<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE module [
          <!ELEMENT module (dtdversion,name,version,description*,help*,about*,requires*,file+)>
          <!ELEMENT dtdversion (#PCDATA)>
          <!ELEMENT name (#PCDATA)>
          <!ELEMENT version (#PCDATA)>
          <!ELEMENT mincmsversion (#PCDATA)>
          <!ELEMENT description (#PCDATA)>
          <!ELEMENT help (#PCDATA)>
          <!ELEMENT about (#PCDATA)>
          <!ELEMENT requires (requiredname,requiredversion)>
          <!ELEMENT requiredname (#PCDATA)>
          <!ELEMENT requiredversion (#PCDATA)>
          <!ELEMENT file (filename,isdir,data)>
          <!ELEMENT filename (#PCDATA)>
          <!ELEMENT isdir (#PCDATA)>
          <!ELEMENT data (#PCDATA)>
        ]>
<module>
	<dtdversion>1.3</dtdversion>
	<name>CMSMSExt</name>
	<version>1.5.2</version>
    <mincmsversion>2.2.9</mincmsversion>
	<help><![CDATA[PHN0eWxlPgoqCnsKICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgouY2xpY2stdG8tY29weQp7CiAgY3Vyc29yOnBvaW50ZXI7Cn0KCi5zbWFsbAp7CiAgZm9udC1zaXplOiA4NSU7CiAgbWFyZ2luOiAwIDAgMCAxNXB4Owp9Cgp1bC5hY2NvcmRpb24tbGlzdAp7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiA5NiUgIWltcG9ydGFudDsKICBoZWlnaHQ6IGF1dG87CiAgcGFkZGluZzogMjBweDsKICBtYXJnaW46IDA7CiAgbGlzdC1zdHlsZTogbm9uZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWZBOwp9Cgp1bC5hY2NvcmRpb24tbGlzdCAuYWNjb3JkaW9uLWxpc3QtaXRlbQp7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogYXV0bzsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGOwogIHBhZGRpbmc6IDIwcHg7CiAgbWFyZ2luOiAwIGF1dG8gMTVweCBhdXRvOwogIGJvcmRlcjogMXB4IHNvbGlkICNlZWU7CiAgYm9yZGVyLXJhZGl1czogNXB4Owp9Cgp1bC5hY2NvcmRpb24tbGlzdCAuYWNjb3JkaW9uLWxpc3QtaXRlbS5hY3RpdmUgaDMuYWw6YWZ0ZXIKewogIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKfQoKdWwuYWNjb3JkaW9uLWxpc3QgLmFjY29yZGlvbi1saXN0LWl0ZW0gaDMuYWwKewogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgLyp0ZXh0LWRlY29yYXRpb24tbGluZTogdW5kZXJsaW5lOyovCiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogYXV0bzsKICBwYWRkaW5nOiAwIDAgMCAwOwogIG1hcmdpbjogMDsKICBmb250LXNpemU6IDE1cHg7CiAgbGV0dGVyLXNwYWNpbmc6IDAuMDFlbTsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCnVsLmFjY29yZGlvbi1saXN0IC5hY2NvcmRpb24tbGlzdC1pdGVtIGgzLmFsOmFmdGVyCnsKICBjb250ZW50OiAiKyI7Ci8gLyBmb250LWZhbWlseTogIm1hdGVyaWFsLWRlc2lnbi1pY29uaWMtZm9udCI7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiAwOwogIHRvcDogMDsKICBjb2xvcjogIzE0N2ZkYjsKICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLWluLW91dDsKICBmb250LXNpemU6IDE4cHg7Cn0KCnVsLmFjY29yZGlvbi1saXN0IC5hY2NvcmRpb24tbGlzdC1pdGVtIGRpdi5hY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkKewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IGF1dG87CiAgbWFyZ2luOiAzNXB4IDAgMTVweCAwOwogIHBhZGRpbmc6IDA7Cn0KCnVsLmFjY29yZGlvbi1saXN0IC5hY2NvcmRpb24tbGlzdC1pdGVtIGRpdi5hY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkgcAp7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgcGFkZGluZzogMCAwIDAgMDsKICBsaW5lLWhlaWdodDogMTUwJTsKICBtYXJnaW46IDAgMCAwIDA7CiAgZm9udC1zaXplOiAxNHB4Owp9CnVsLmhpZ2hsaWdodC1saXN0CnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogODAlOwogIGhlaWdodDogYXV0bzsKICBtYXJnaW46IDE1cHg7CiAgcGFkZGluZzogMjVweDsKfQoKaDV7CiAgbWFyZ2luLXRvcDogMC43NWVtOwogIG1hcmdpbi1ib3R0b206IDAuNzVlbTsKfQpsaS50b3AgewogIG1hcmdpbi10b3A6IDNlbTsKICBtYXJnaW4tYm90dG9tOiAyZW07CiAgbGlzdC1zdHlsZTogbm9uZTsKfQpjb2RlLnRhZyB7CiAgcGFkZGluZy1sZWZ0OiAxZW07CiAgZm9udC1zaXplOiAxNnB4OwogIGZvbnQtc3R5bGU6IG9ibGlxdWU7CiAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKICBkaXNwbGF5OiBibG9jazsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWZlZmVmOwogIGJvcmRlci1sZWZ0OiAzcHggc29saWQgI2NlY2VjZTsKICBib3JkZXItcmlnaHQ6IDNweCBzb2xpZCAjY2VjZWNlOwp9Cjwvc3R5bGU+Cgo8c2NyaXB0IHNyYz0iaHR0cHM6Ly9sb2NhbGhvc3QvQ01TTVMtREVWLTIwMjUtTU9EUy9tb2R1bGVzL0NNU01TRXh0L2pzL2pzLmNvb2tpZS5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSJodHRwczovL2xvY2FsaG9zdC9DTVNNUy1ERVYtMjAyNS1NT0RTL21vZHVsZXMvQ01TTVNFeHQvanMvanMuZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KPGRpdiBjbGFzcz0iY2xlYXIiPjwvZGl2PgoKPGRpdiBpZD0icGFnZV90YWJzIj4KCiAgPGRpdiAgaWQ9ImdlbmVyYWwiPgogICAgR2VuZXJhbAogIDwvZGl2PgogIDxkaXYgaWQ9InVzaW5nIj4KICAgIEhvdyBEbyBJIFVzZSBJdAogIDwvZGl2PgogIDxkaXYgaWQ9InNtYXJ0eV9hZGRvbnMiPgogICAgU21hcnR5IEFkZG9ucwogIDwvZGl2PgogIDxkaXYgaWQ9InNtYXJ0eV9yZXNvdXJjZXMiPgogICAgU21hcnR5IFJlc291cmNlcwogIDwvZGl2PgogIDxkaXYgaWQ9ImR5bl9jc3NfanMiPgogICAgRHluYW1pYyBDU1MgYW5kIEphdmFzY3JpcHQKICA8L2Rpdj4KICA8ZGl2IGlkPSJob29rcyI+CiAgICBIb29rcwogIDwvZGl2PgogIDxkaXYgaWQ9Im1pc2MiPgogICAgTWlzYwogIDwvZGl2PgogIDxkaXYgaWQ9Im5ldyI+CiAgICBXaGF0J3MgTmV3CiAgPC9kaXY+CiAgPGRpdiBpZD0iYWJvdXQiPgogICAgQWJvdXQKICA8L2Rpdj4KCjwvZGl2PgoKPGRpdiBjbGFzcz0iY2xlYXJiIj48L2Rpdj4KPGRpdiBpZD0icGFnZV9jb250ZW50Ij4KCiAgPGRpdiBpZD0iZ2VuZXJhbF9jIj4KICAgIDxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPgo8cD5UaGlzIG1vZHVsZSBwcm92aWRlcyBjb252ZW5pZW5jZSBBUElzLCByZS11c2FibGUgZm9ybXMsIGFuZCBTbWFydHkgdGFncyBmb3IgdXNlIGluIG90aGVyIG1vZHVsZXMuICBJdCBpcyBtZWFudCB0byBiZSBhIHN0YXJ0aW5nIHBvaW50IGZyb20gd2hpY2ggdG8gYnVpbGQgb3RoZXIgbW9kdWxlcy4gSWYgeW91IGFyZSBub3QgYSBwcm9ncmFtbWVyIHlvdSBwcm9iYWJseSB3b24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhpcyBtb2R1bGUgYmVzaWRlcyBhZGp1c3Qgc29tZSBwcmVmZXJlbmNlcy48L3A+CjxwPk9uZSBvZiB0aGUgbWFpbiBhc3BlY3RzIG9mIHRoaXMgbW9kdWxlIGlzIHRoZSBudW1iZXIgb2YgYXV0b21hdGVkIG9yIHNpbXBsaWZpZWQgdGFza3MgZm9yIG1vZHVsZXMgdGhhdCBleHRlbmQgdGhlIDxzdHJvbmc+WFRNb2R1bGU8L3N0cm9uZz4gbWFpbiBjbGFzcy4gVGhlIG1pbmltdW0gcmVxdWlyZW1lbnRzIGFyZSBhbHJlYWR5IGltcGxlbWVudGVkIGZvciB5b3UgYW5kIHRoZXJlIHdpbGwgYmUgc29tZSBleHRlbmRlZCBmdW5jdGlvbmFsaXR5IG9uIHRvcCBvZiB0aGUgY29yZSB1c3VhbCA8c3Ryb25nPkNNU01vZHVsZTwvc3Ryb25nPiBjbGFzcyBmdW5jdGlvbmFsaXR5PC9wPgo8cD5UaGUgbW9kdWxlIGluY2x1ZGVzIGEgbnVtYmVyIG9mIGxpYnJhcmllcyBmb3IgZGlmZmVyZW50IHVzZXMgaW46PC9wPgo8dWw+CiAgPGxpPlBIUDs8L2xpPgogIDxsaT5KUyBpbmNsdWRpbmcgYSBydWRpbWVudGFyeSBhcHAgZGV2ZWxvcG1lbnQgZnJhbWV3b3JrIChiYWNrYm9uZSkgYW5kIGEgZmV3IHVzZWZ1bCBsaWJyYXJpZXM7PC9saT4KICA8bGk+SlF1ZXJ5LCBpbmNsdWRpbmcgc29tZSBwbHVnaW5zOzwvbGk+CiAgPGxpPkNTUyBleHRlbnNpb25zIChleHBlcmltZW50YWwpIHRoYXQgc2hvdWxkIGFsbG93IHNvbWUgbW9yZSBjb250cm9sIG9uIHlvdXIgbW9kdWxlcyBiZWhhdmlvciBhbmQgbG9vayBpbiBhIG1vcmUgY29uc2lzdGVudCB3YXk7PC9saT4KPC91bD4KCjxwPkdpdmVuIHRoZSBleHRlbnNpdmUgcmFuZ2Ugb2YgZmVhdHVyZXMgYW5kIGxpYnJhcmllcyBpbmNsdWRlZCwgdGhlcmUgaXMgc29tZSBkaWZmaWN1bHR5IGluIGRvY3VtZW50aW5nIGl0IGFsbCwgYW5kIHByb2JhYmx5IGl0IHdpbGwgYmUgZG9uZSBpbiBhbiBleHRlcm5hbCBzaXRlIHNvb24uIFRoZSBpbmNsdWRlZCBkb2N1bWVudGF0aW9uIHRyaWVzIHRvIGJlIGFzIHRob3JvdWdoIGFzIHBvc3NpYmxlIG9uIHNvbWUgb2YgdGhlIG1vc3QgcG9wdWxhciBmZWF0dXJlcywgcGx1Z2lucyBhbmQgQVBJIGZ1bmN0aW9ucywgYnV0IGl0J3MgYm91bmQgdG8gYmUgZmF1bHR5IG9uIHNvbWUgYXNwZWN0czwvcD4KPHA+V2UnbGwgdHJ5IG91ciBiZXN0IHRvIGtlZXAgdGhlIGRvY3VtZW50YXRpb24gdXBkYXRlZC48L3A+ICA8L2Rpdj4KICA8ZGl2IGlkPSJ1c2luZ19jIj4KICAgIDxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5TdGFydCB5b3VyIG93biBtb2R1bGUgKHdlIHN1Z2dlc3Qgc3RhcnRpbmcgYnkgcmVhZGluZyB0aGUgZ3JlYXQgbW9kdWxlIHdyaXRpbmcgdHV0b3JpYWwgYXZhaWxhYmxlIG9uIHRoZSBDTVNNUyB3ZWJzaXRlKS48L3A+CjxwPllvdSBjYW4gbWFrZSB5b3VyIG1vZHVsZSBkZXBlbmRhbnQgb24gPGI+Q01TTVNFeHQ8L2I+IGFuZCBleHRlbmQgIHRvIG1ha2UgdGhlIG1vc3Qgb2Ygd2hhdCB0aGUgZXh0ZW5zaW9ucyBoYXZlIHRvIG9mZmVyLjwvcD4KPHA+RXhhbXBsZTo8L3A+CjxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+Y2xhc3MgJmx0O1lvdXJNb2R1bGVDbGFzc05hbWU+IGV4dGVuZHMgXENNU01TRXh0XFhUTW9kdWxlICYjMTIzO30gPC9wcmU+CjxwPkV2ZW4gaWYgeW91IGRvbid0IGV4dGVuZCB0aGUgY2xhc3Mgb24geW91ciBtb2R1bGUsIGFuZCBzdGlsbCB3YW50IHRvIHVzZSBzb21lIG9mIHRoZSBsaWJyYXJpZXMgdGhhdCBjb21lIHdpdGggaXQsIHdlIHJlY29tbWVuZCB5b3UgbWFrZSBpdCBhIGRlcGVuZGVuY3kgdG8gbWFrZSBzdXJlIENNU0V4dCBpcyBpbnN0YWxsZWQgdG9ndWV0aGVyIHdpdGggeW91ciBtb2R1bGU8L3A+CjxwPlRoZW4geW91J2xsIGJlIGFibGUgdG8gdXNlIGEgd2hvbGUgcmFuZ2Ugb2YgbGlicmFyaWVzIGluY2x1ZGVkIHdpdGggdGhlIGV4dGVuc2lvbnMuPC9wPgoKICA8L2Rpdj4KICA8ZGl2IGlkPSJzbWFydHlfYWRkb25zX2MiPgogICAgPGgyPlNtYXJ0eSBBZGRvbnM8L2gyPgo8cD5UaGlzIG1vZHVsZSBhZGRzIGEgZmV3IHNtYXJ0eSBjb252ZW5pZW5jZSBhZGRvbnMgZm9yIHVzZSB3aXRoIG90aGVyIG1vZHVsZXMuIFRoZXkgYXJlIGxpc3RlZCBhbmQgZGVzY3JpYmVkIGhlcmU6PC9wPgoKPHVsIGNsYXNzPSJhY2NvcmRpb24tbGlzdCI+CiAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JiMxMjN4dF9tb2R1bGVfaGludH0gPHNwYW4gY2xhc3M9InNtYWxsIj5DcmVhdGUgaGludCBwYXJhbWV0ZXJzIHRvIG1vZHVsZSBhY3Rpb25zPC9zcGFuPjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD5UaGlzIGZ1bmN0aW9uIHBsdWdpbiBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGhpbnRzIGZvciBtb2R1bGUgYmVoYXZpb3IgYmVmb3JlIHRoZSBtb2R1bGUgaXMgY2FsbGVkIG9yIGZvciBwYXJhbWV0ZXJzIHRoYXQgY2Fubm90IG9yIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIGluIHRoZSBVUkwuICBJLmU6IEluIGEgc2l0dWF0aW9uIHdoZW4gYSBzaXRlIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHByZXR0eSB1cmxzIGZvciBTRU8gcHVycG9zZXMgaXQgaXMgb2Z0ZW4gaW1wb3NzaWJsZSB0byBwcm92aWRlIGFkZGl0aW9uYWwgbW9kdWxlIHBhcmFtZXRlcnMgbGlrZSBhIGRldGFpbHRlbXBsYXRlIG9yIHNvcnQgb3JkZXIgb24gYSBVUkwuICBUaGlzIHBsdWdpbiBjYW4gYmUgdXNlZCBpbiBhbnkgdGVtcGxhdGVzIG9yIGluIGEgcGFnZSBzcGVjaWZpYyB3YXkgdG8gZ2l2ZSBoaW50cyBhcyB0byBob3cgbW9kdWxlcyBzaG91bGQgYmVoYXZlLjwvcD4KICAgICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBBbnkgcGFyYW1ldGVycyB0aGF0IGFyZSBzcGVjaWZpZWQgb24gdGhlIFVSTCBvciBtb2R1bGUgdGFnIHdpbGwgb3ZlcnJpZGUgbWF0Y2hpbmcgbW9kdWxlIGhpbnRzLiBJLmU6IFdoZW4gdXNpbmcgTmV3cyBhbmQgYSBkZXRhaWx0ZW1wbGF0ZSBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIG9uIGEgTmV3cyBkZXRhaWwgdXJsLCBhbnkgZGV0YWlsdGVtcGxhdGUgaGludHMgd2lsbCBoYXZlIG5vIGVmZmVjdC48L3A+CiAgICAgIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gSW4gb3JkZXIgdG8gZW5zdXJlIHByb3BlciBiZWhhdmlvciwgbW9kdWxlIGhpbnRzIG11c3QgYmUgY3JlYXRlZCBiZWZvcmUgdGhlIG1vZHVsZSBpcyBjYWxsZWQsIGFuZCB1c3VhbGx5IGJlZm9yZSB0aGUgJmxicmFjZTtjb250ZW50fSB0YWcgaXMgZXhlY3V0ZWQgaW4gdGhlIENNU01TIHBhZ2UgdGVtcGxhdGUuICBUaGVyZWZvcmUsIHRoZXkgc2hvdWxkIChub3JtYWxseSkgYmUgY3JlYXRlZCB2ZXJ5IGVhcmx5IGluIHRoZSBwYWdlIHRlbXBsYXRlIHByb2Nlc3MuICBBbiBpZGVhbCBsb2NhdGlvbiBmb3IgcGFnZSBzcGVjaWZpYyBoaW50cyBpcyBpbiB0aGUgJnF1b3Q7U21hcnR5IGRhdGEgb3IgbG9naWMgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGlzIHBhZ2U6JnF1b3Q7IHRleHRhcmVhIG9uIHRoZSBlZGl0Y29udGVudCBmb3JtLjwvcD4KCiAgICAgIDxoND5FeGFtcGxlOjwvaDQ+CiAgICAgIDxwPldoZW4gdXNpbmcgdGhlIE5ld3MgbW9kdWxlLCBhbmQgcHJldHR5IHVybHMuICBZb3Ugd2lzaCB0byBkaXNwbGF5IG5ld3MgYXJ0aWNsZXMgZm9yIGEgc3BlY2lmaWMgY2F0ZWdvcnkgb24gb25lIHBhZ2UsIGFuZCB3b3VsZCBsaWtlIHRvIHVzZSBhIG5vbi1zdGFuZGFyZCBkZXRhaWwgdGVtcGxhdGUgdG8gZGlzcGxheSB0aGUgaW5kaXZpZHVhbCBhcnRpY2xlcyBvbiBhIGRpZmZlcmVybnQgcGFnZS4gIEkuZTogcGVyaGFwcyBvbiB5b3VyICZxdW90O1Nwb3J0cyZxdW90OyBwYWdlIHlvdSBhcmUgY2FsbGluZyBOZXdzIGxpa2U6IDxzdHJvbmc+PGNvZGU+JmxicmFjZTtOZXdzIGNhdGVnb3J5PXNwb3J0cyBkZXRhaWxwYWdlPXNwb3J0c19kZXRhaWx9PC9jb2RlPjwvc3Ryb25nPi4gSG93ZXZlciwgdXNpbmcgcHJldHR5IHVybHMgaXQgaXMgaW1wb3NzaWJsZSB0byBzcGVjaWZ5IGEgZGV0YWlsdGVtcGxhdGUgb24gdGhlIGxpbmtzIHRoYXQgd2lsbCBnZW5lcmF0ZSB0aGUgZGV0YWlsIHZpZXdzLiAgVGhlIHNvbHV0aW9uIGlzIHRvIHVzZSB0aGUgPHN0cm9uZz48Y29kZT4mbGJyYWNlO3h0X21vZHVsZV9oaW50fTwvY29kZT48L3N0cm9uZz4gdGFnIG9uIHRoZSA8dT5zcG9ydHNfZGV0YWlsPC91PiBwYWdlIHRvIHByb3ZpZGUgc29tZSBoaW50cyBhcyB0byBob3cgTmV3cyBzaG91bGQgYmVoYXZlIG9uIHRoYXQgcGFnZS48L3A+CiAgICAgIDxwPldoZW4gZWRpdGluZyB0aGUgPHU+c3BvcnRzX2RldGFpbDwvdT4gcGFnZSBvbiB0aGUgb3B0aW9ucyB0YWIsIGluIHRoZSB0ZXh0YXJlYSBlbnRpdGxlZCAmcXVvdDtTbWFydHkgZGF0YSBvciBsb2dpYyB0aGF0IGlzIHNwZWNpZmljIHRvIHRoaXMgcGFnZTomcXVvdDsgeW91IGNvdWxkIGVudGVyIGEgdGFnIHN1Y2ggYXM6IDxzdHJvbmc+PGNvZGU+JmxicmFjZTt4dF9tb2R1bGVfaGludCBtb2R1bGU9TmV3cyBkZXRhaWx0ZW1wbGF0ZT1zcG9ydHN9PC9jb2RlPjwvc3Ryb25nPi4gIE5vdyB3aGVuIGEgdXNlciBjbGlja3Mgb24gYSBsaW5rIGZyb20gdGhlIE5ld3MgZGlzcGxheSBvbiB5b3VyICZxdW90O3Nwb3J0cyZxdW90OyBwYWdlIGhlIHdpbGwgYmUgZGlyZWN0ZWQgdG8gdGhlIDx1PnNwb3J0c19kZXRhaWw8L3U+IHBhZ2UsIGFuZCB0aGUgTmV3cyBkZXRhaWwgdGVtcGxhdGUgZW50aXRsZWQgJnF1b3Q7c3BvcnRzJnF1b3Q7IHdpbGwgYmUgdXNlZCB0byBkaXNwbGF5IHRoZSBhcnRpY2xlLjwvcD4KICAgICAgPHA+Tm90ZTo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+SXQgaXMgcG9zc2libGUgdG8gc3BlY2lmeSBtdWx0aXBsZSBwYXJhbWV0ZXIgaGludHMgdG8gYSBzaW5nbGUgbW9kdWxlIGluIG9uZSBjYWxsIHRvIHRoaXMgcGx1Z2luLjwvbGk+CiAgICAgICAgPGxpPkl0IGlzIHBvc3NpYmxlIHRvIGNhbGwgdGhpcyBtb2R1bGUgbXVsdGlwbGUgdGltZXMgaW4gYSByZXF1ZXN0IHRvIHByb3ZpZGUgaGludHMgdG8gZGlmZmVyZW50IG1vZHVsZXMuPC9saT4KICAgICAgPC91bD4KCiAgICAgIDxoND5Vc2FnZTo8L2g0PgogICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+ICAmbGJyYWNlO3h0X21vZHVsZV9oaW50IG1vZHVsZT1OZXdzIHN1bW1hcnl0ZW1wbGF0ZT1zb21ldGhpbmcgZGV0YWlscGFnZT1ob21lfQogICZsYnJhY2U7eHRfbW9kdWxlX2hpbnQgbW9kdWxlPVNtYXJ0SW1hZ2Ugbm9lbWJlZD0xfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICAgIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X2Vycm9yfS4uLiZsYnJhY2U7L3h0X2Vycm9yfSA8c3BhbiBjbGFzcz0ic21hbGwiPkRpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSA8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPihuZXcpPC9zcGFuPjwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+YWxpYXMgb2YgeHRlcnJvciBmb3IgY29uc2lzdGVuY3k8L3A+CgogICAgICA8cD5BIGJsb2NrIHBsdWdpbiB0aGF0IHVzZXMgdGhlIGVycm9yIHRlbXBsYXRlIChjb25maWd1cmFibGUgZnJvbSB0aGUgQ01TTVNFeHQgYWRtaW4gaW50ZXJmYWNlKSB0byBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UuPC9wPgogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT48Yj5lcnJvcmNsYXNzPC9iPiAtIChzdHJpbmcpIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGNsYXNzIG5hbWUgaW4gdGhlIHRlbXBsYXRlLjwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPlVzYWdlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mbGJyYWNlO3h0X2Vycm9yfVRoaXMgaXMgZXJyb3IgdGV4dCZsYnJhY2U7L3h0X2Vycm9yfTwvcHJlPgoKICAgICAgPHByZT4mbGJyYWNlO3h0ZXJyb3IgW2Vycm9yY2xhc3M9c3RyaW5nXX0uLi4mbGJyYWNlOy94dGVycm9yfSA8c3BhbiBzdHlsZT0iY29sb3I6b3JhbmdlIj4mbGJyYWNlOyogZGVwcmVjYXRlZDogdXNlIHh0X2Vycm9yIGluc3RlYWQuIFRoaXMgdGFnIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlICp9PC9zcGFuPjwvcHJlPgoKICAgIDwvZGl2PgogIDwvbGk+CiAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dF9jb250ZW50X3R5cGV9IDxzcGFuIGNsYXNzPSJzbWFsbCI+Y2hhbmdlIHRoZSBtaW1lLXR5cGUgb2YgYW4gYWN0aW9uPC9zcGFuPjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD5UaGlzIHBsdWdpbiBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgbWltZS10eXBlIG9mIGFuIGFjdGlvbi4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGluIHRlbXBsYXRlcyB0aGF0IGFyZSBpbiByZXNwb25zZSB0byBhamF4IHJlcXVlc3RzLjwvcD4KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgIDx1bD4KICAgICAgICAgPGxpPjxiPnR5cGU8L2I+IC0gKHN0cmluZykgVGhlIGRlc2lyZWQgb3V0cHV0IG1pbWUgdHlwZS48L2xpPgogICAgICA8L3VsPgogICAgPC9kaXY+CiAgPC9saT4KICAgIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X2NhY2hlZF91cmx9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UmV0cmlldmUgdGhlIGNvbnRlbnRzIG9mIGEgcmVtb3RlIFVSTCBhbmQgY2FjaGUgaXQ8L3NwYW4+PC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPlRoaXMgcGx1Z2luIGNhbiByZXRyaWV2ZSB0aGUgY29udGVudHMgb2YgYSByZW1vdGUgVVJMIGFuZCBjYWNoZSB0aGUgY29udGVudHMgZm9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBtaW51dGVzLiAgVGhlbiByZXR1cm5zIHRob3NlLiAgVGhpcyBwbHVnaW4gaXMgdXNlZnVsIGZvciByZXRyaWV2aW5nIHRoZSBjb250ZW50cyBvZiByZW1vdGUgVVJMUywgb3Igb2YgbG9jYWwgdXJscyB0aGF0IHJlcHJlc2VudCBleHBlbnNpdmUgb3BlcmF0aW9ucyBidXQgY2FuIGJlIGNhY2hlZC48L3A+CiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPjxiPnVybDwvYj4gLSAoc3RyaW5nKSAtIFRoZSBVUkwgdG8gZmV0Y2ggYW5kIGNhY2hlPC9saT4KICAgICAgICA8bGk+PGI+dGltZTwvYj4gLSAoaW50KSAtIFRoZSBudW1iZXIgb2YgbWludXRlcyB0byBjYWNoZSB0aGlzIHVybCBmb3IuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEyMDwvbGk+CiAgICAgICAgPGxpPjxiPmFzc2lnbjwvYj4gLSAoc3RyaW5nKSAtIEFzc2lnbiB0aGUgb3V0cHV0IG9mIHRoaXMgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+VXNhZ2U6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiZsdDtkaXYgaWQ9InNvbWV0aGluZyImZ3Q7JmxicmFjZTt4dF9jYWNoZWRfdXJsIHVybD1zb21ldGhpbmd9Jmx0Oy9kaXYmZ3Q7PC9wcmU+CiAgICAgIDxwPlRpcDogIEl0IGlzIHBvc3NpYmxlIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNhY2hlIGV4cGVuc2l2ZSBvcGVyYXRpb25zOjwvcD4KICAgICAgPG9sPgogICAgICAgIDxsaT5DcmVhdGUgYSBuZXcgcGFnZSB0ZW1wbGF0ZSB3aXRoIGp1c3QgPGNvZGU+JmxicmFjZTtjb250ZW50fTwvY29kZT4gaW4gaXQuIE5hbWUgdGhlIHBhZ2UgdGVtcGxhdGUgc29tZXRoaW5nIGxpa2UgY29udGVudF9vbmx5PC9saT4KICAgICAgICA8bGk+Q3JlYXRlIGEgbmV3IGNvbnRlbnQgcGFnZSB1c2luZyB0aGUgbmV3IGNvbnRlbnRfb25seSBwYWdlIHRlbXBsYXRlLiAgRW5zdXJlIHRoYXQgaXQgd2lsbCBub3QgYmUgc2hvd24gaW4gdGhlIG1lbnUuIEluIHRoZSBjb250ZW50IGFyZWEgb2YgdGhpcyBwYWdlIHBsYWNlIHNtYXJ0eSB0YWdzIG9yIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBxdWl0ZSBleHBlbnNpdmUgaW4gcHJvY2Vzc2luZyBidXQgZG8gbm90IG5lZWQgdG8gYmUgcmVmcmVzaGVkIHJlZ3VsYXJseS4gIFJlbWVtYmVyIHRoZSBwYWdlIGFsaWFzIGZvciB0aGlzIG5ldyBwYWdlLjwvbGk+CiAgICAgICAgPGxpPk9uIHlvdXIgbm9ybWFsIHBhZ2UgdGVtcGxhdGUocykgY2FsbCA8Y29kZT4mbGJyYWNlO3h0X2NhY2hlZF91cmwgdXJsPSImbGJyYWNlO2Ntc19zZWxmbGluayBocmVmPSRwYWdlX2FsaWFzfSJ9PC9jb2RlPjwvbGk+CiAgICAgIDwvb2w+CiAgICA8L2Rpdj4KICA8L2xpPgogICAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfaXNib3R9IDxzcGFuIGNsYXNzPSJzbWFsbCI+V2hldGhlciB0aGUgdXNlciBhZ2VudCBvZiB0aGUgcmVxdWVzdCBoYXMgYmVlbiBpZGVudGlmaWVkIHRvIGJlIGEgcm9ib3Q8L3NwYW4+PC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPlRoaXMgcGx1Z2luIHJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgdXNlciBhZ2VudCBvZiB0aGUgcmVxdWVzdCBoYXMgYmVlbiBpZGVudGlmaWVkIHRvIGJlIGEgcm9ib3QuPC9wPgogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT48Yj5hc3NpZ248L2I+IC0gKHN0cmluZykgLSBBc3NpZ24gdGhlIG91dHB1dCBvZiB0aGlzIHBsdWdpbiB0byB0aGUgbmFtZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPlVzYWdlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mbGJyYWNlO3h0X2lzYm90IGFzc2lnbj0naXNib3QnfSZsYnJhY2U7aWYgJGlzYm90fSZsdDtoMyZndDtZb3UgYXJlIGEgYm90Jmx0Oy9oMyZndDsmbGJyYWNlOy9pZn08L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dF9pc19zbWFydHBob25lfSA8c3BhbiBjbGFzcz0ic21hbGwiPldoZXRoZXIgdGhlIHJlcXVlc3QgaXMgZnJvbSBhIHNtYXJ0cGhvbmU8L3NwYW4+PC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPlRoaXMgcGx1Z2luIGRldGVybWluZXMgd2hldGhlciB0aGUgcmVxdWVzdCBpcyBmcm9tIGEgc21hcnRwaG9uZSBzdWNoIGFzIGFuIGlwaG9uZSBvciBhbmRyb2lkLjxwPgogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT48Yj5hc3NpZ248L2I+IC0gKHN0cmluZykgLSBBc3NpZ24gdGhlIG91dHB1dCBvZiB0aGlzIHBsdWdpbiB0byB0aGUgbmFtZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPlVzYWdlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mbGJyYWNlO3h0X2lzX3NtYXJ0cGhvbmUgYXNzaWduPSdpc3Bob25lJ30mbGJyYWNlO2lmICEkaXNwaG9uZX0mbGJyYWNlOyogZGlzcGxheSBtb3JlIHN0dWZmICp9JmxicmFjZTsvaWZ9PC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogICAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfZ2V0YnJvd3Nlcn0gPHNwYW4gY2xhc3M9InNtYWxsIj5SZXR1cm5zIGEgc2hvcnQgc3RyaW5nIGluZGljYXRpbmcgdGhlIGJyb3dzZXIgdHlwZTwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+VGhpcyBwbHVnaW4gcmV0dXJucyBhIHNob3J0IHN0cmluZyBpbmRpY2F0aW5nIHRoZSBicm93c2VyIHR5cGUuPC9wPgogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT48Yj5hc3NpZ248L2I+IC0gKHN0cmluZykgLSBBc3NpZ24gdGhlIG91dHB1dCBvZiB0aGlzIHBsdWdpbiB0byB0aGUgbmFtZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPlVzYWdlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mbGJyYWNlO3h0X2dldGJyb3dzZXIgYXNzaWduPSdicm93c2VyJ30mbGJyYWNlO2lmICRicm93c2VyID09ICdjaHJvbWUnfSZsYnJhY2U7KiBkaXNwbGF5IG1vcmUgc3R1ZmYgKn0mbGJyYWNlOy9pZn08L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dF9pc2FuZHJvaWR9IDxzcGFuIGNsYXNzPSJzbWFsbCI+V2hldGhlciB0aGUgY3VycmVudCByZXF1ZXN0IHdhcyBtYWRlIGZyb20gYW4gYW5kcm9pZCBwbGF0Zm9ybTwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+VGhpcyBwbHVnaW4gcmV0dXJucyB3aGV0aGVyIHRoZSBjdXJyZW50IHJlcXVlc3Qgd2FzIG1hZGUgZnJvbSBhbiBhbmRyb2lkIHBsYXRmb3JtIG9yIG5vdC48L3A+CiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPjxiPmFzc2lnbjwvYj4gLSAoc3RyaW5nKSAtIEFzc2lnbiB0aGUgb3V0cHV0IG9mIHRoaXMgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+VXNhZ2U6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiZsYnJhY2U7eHRfaXNhbmRyb2lkIGFzc2lnbj0nYW5kcm9pZCd9JmxicmFjZTtpZiAkYW5kcm9pZH0mbHQ7aDMgc3R5bGU9ImNvbG9yOiBncmVlbjsiJmd0O1dvb3QhISEmbHQ7L2gzJmd0OyZsYnJhY2U7L2lmfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICAgIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X2lzaW9zfSA8c3BhbiBjbGFzcz0ic21hbGwiPldoZXRoZXIgdGhlIGN1cnJlbnQgcmVxdWVzdCB3YXMgbWFkZSBmcm9tIGFuIGlvcyBwbGF0Zm9ybTwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+VGhpcyBwbHVnaW4gcmV0dXJucyB3aGV0aGVyIHRoZSBjdXJyZW50IHJlcXVlc3Qgd2FzIG1hZGUgZnJvbSBhbiBpb3MgcGxhdGZvcm0gb3Igbm90LjwvcD4KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+PGI+YXNzaWduPC9iPiAtIChzdHJpbmcpIC0gQXNzaWduIHRoZSBvdXRwdXQgb2YgdGhpcyBwbHVnaW4gdG8gdGhlIG5hbWVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPgogICAgICA8L3VsPgogICAgICA8cD5Vc2FnZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JmxicmFjZTt4dF9pc2lvcyBhc3NpZ249J2lvcyd9JmxicmFjZTtpZiAkaW9zfSZsdDtoMyBzdHlsZT0iY29sb3I6IG9yYW5nZTsiJmd0O05vdGU6IFBXQXMgaGF2ZSBwcm9ibGVtcyEhISZsdDsvaDMmZ3Q7JmxicmFjZTsvaWZ9PC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogICAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfaXNpZX0gPHNwYW4gY2xhc3M9InNtYWxsIj53aGV0aGVyIHRoZSBjdXJyZW50IHJlcXVlc3Qgd2FzIG1hZGUgYnkgSW50ZXJuZXQgRXhwbG9kZXI8L3NwYW4+PC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPlRoaXMgcGx1Z2luIHJldHVybnMgd2hldGhlciB0aGUgY3VycmVudCByZXF1ZXN0IHdhcyBtYWRlIGJ5IEludGVybmV0IEV4cGxvZGVyLiBJdCByZXR1cm5zIDAgb3IgMS48L3A+CiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPjxiPmFzc2lnbjwvYj4gLSAoc3RyaW5nKSAtIEFzc2lnbiB0aGUgb3V0cHV0IG9mIHRoaXMgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+VXNhZ2U6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiZsYnJhY2U7eHRfaXNpZSBhc3NpZ249J2llJ30mbGJyYWNlO2lmICRpZX0mbHQ7aDMgc3R5bGU9ImNvbG9yOiByZWQ7IiZndDtidW1tZXIhISEmbHQ7L2gzJmd0OyZsYnJhY2U7L2lmfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICAgIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X3N0YXRlX29wdGlvbnN9IDxzcGFuIGNsYXNzPSJzbWFsbCI+T3V0cHV0IGEgc2V0IG9mICZsdDtvcHRpb24mZ3Q7IHRhZ3MgZm9yIFVTL0NhbmFkYSBzdGF0ZXM8L3NwYW4+PC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPk91dHB1dCBhIHNldCBvZiAmbHQ7b3B0aW9uJmd0OyB0YWdzIGZvciBzdGF0ZXMuICBUaGUgdmFsdWVzIGFyZSBVUy9DYW5hZGEgU3RhdGUvUHJvdmluY2UgYWJicmV2aWF0aW9ucywgdGhlIGxhYmVscyBhcmUgdGhlIGZ1bGwgbGVuZ3RoIG5hbWVzIGluIEVuZ2xpc2guICBUaGlzIG1ldGhvZCByZWFkcyB0aGUgZGVmaW5lZCBzdGF0ZSBsaXN0IGFzIGRlZmluZWQgaW4gdGhlIGRhdGFiYXNlLjwvcD4KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+PGI+c2VsZWN0ZWQ8L2I+IC0gKHN0cmluZykgLSBJbmRpY2F0ZXMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvcHRpb24uICBTaG91bGQgYmUgYSBzdGF0ZSBvciBwcm92aW5jZSBhYmJyZXZpYXRpb24uPC9saT4KICAgICAgICA8bGk+PGI+c2VsZWN0b25lPC9iPiAtIChzdHJpbmcpIC0gQWRkcyBhbiBvcHRpb24gdG8gdGhlIHRvcCBvZiB0aGUgZHJvcGRvd24gaW5kaWNhdGluZyB0aGF0IG5vIHZhbHVlIGhhcyBiZWVuIHNlbGVjdGVkLjwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPlVzYWdlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mbHQ7c2VsZWN0IG5hbWU9InN0YXRlIiZndDsmbGJyYWNlO3h0X3N0YXRlX29wdGlvbnMgc2VsZWN0ZWQ9JG15c3RhdGV9Jmx0Oy9zZWxlY3QmZ3Q7PC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogICAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfY291bnRyeV9vcHRpb25zfSA8c3BhbiBjbGFzcz0ic21hbGwiPk91dHB1dCBhIHNldCBvZiAmbHQ7b3B0aW9ucyZndDsgdGFncyBmb3IgY291bnRyaWVzPC9zcGFuPjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD5PdXRwdXQgYSBzZXQgb2YgJmx0O29wdGlvbnMmZ3Q7IHRhZ3MgZm9yIGNvdW50cmllcy4gIFRoZSB2YWx1ZXMgYXJlIGFwcHJvdmVkIGNvdW50cnkgY29kZXMsIHRoZSBsYWJlbHMgYXJlIHRoZSBmdWxsIGxlbmd0aCBuYW1lcyAoaW4gZW5nbGlzaCkuICBUaGlzIG1ldGhvZCByZWFkcyB0aGUgY291bnRyeSBsaXN0IGFzIGRlZmluZWQgaW4gdGhlIGRhdGFiYXNlLCBhbmQgdGFrZXMgaW50byBhY2NvdW50IHRoZSBwcmlvcml0eSBjb3VudHJpZXMgYXMgZGVmaW5lZCBpbiB0aGUgQ01TTVNFeHQgYWRtaW4gY29uc29sZS48L3A+CiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPjxiPnNlbGVjdGVkPC9iPiAtIChzdHJpbmcpIC0gSW5kaWNhdGVzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgb3B0aW9uLiAgU2hvdWxkIGJlIGEgY291bnRyeSBhYmJyZXZpYXRpb24uPC9saT4KICAgICAgICA8bGk+PGI+c2VsZWN0b25lPC9iPiAtIChzdHJpbmcpIC0gQWRkcyBhbiBvcHRpb24gdG8gdGhlIHRvcCBvZiB0aGUgZHJvcGRvd24gaW5kaWNhdGluZyB0aGF0IG5vIHZhbHVlIGhhcyBiZWVuIHNlbGVjdGVkLjwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPlVzYWdlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mbHQ7c2VsZWN0IG5hbWU9InN0YXRlIiZndDsmbGJyYWNlO3h0X2NvdW50cnlfb3B0aW9ucyBzZWxlY3RlZD0kbXlzdGF0ZX0mbHQ7L3NlbGVjdCZndDs8L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTtnZXRfY3VycmVudF91cmx9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UmV0dXJuIHRoZSBjdXJyZW50IHJlcXVlc3QgdXJsPC9zcGFuPjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD5SZXR1cm4gdGhlIGN1cnJlbnQgcmVxdWVzdCB1cmwgKHdpdGhvdXQgZnJhZ21lbnQsIG9yIHF1ZXJ5IGFyZ3VtZW50cykuICBUaGlzIHBsdWdpbiBpcyB1c2VmdWwgdG8gYnVpbGQgZm9ybSBvciBhbmNob3IgbGlua3Mgb3IgZm9yIGFueSBvdGhlciB0YWcgdGhhdCByZXF1aXJlcyBrbm93aW5nIHRoZSBjdXJyZW50IHBhZ2UgVVJMLjwvcD4KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+PGI+YXNzaWduPC9iPiAtIChzdHJpbmcpIC0gQXNzaWduIHRoZSBvdXRwdXQgb2YgdGhpcyBwbHVnaW4gdG8gdGhlIG5hbWVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPgogICAgICA8L3VsPgogICAgICA8cD5Vc2FnZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+Jmx0O2EgaHJlZj0iJmxicmFjZTtnZXRfY3VycmVudF91cmx9I2FuY2hvciImZ3Q7R28gdG8gQW5jaG9yJmx0Oy9hJmd0OzwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICAgIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X3NldGxpc3R9IDxzcGFuIGNsYXNzPSJzbWFsbCI+IDxzcGFuIHN0eWxlPSJjb2xvcjpvcmFuZ2UiPihkZXByZWNhdGVkKTwvc3Bhbj48L3NwYW4+PC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwIHN0eWxlPSJjb2xvcjogcmVkOyI+RGVwcmVjYXRlZC4uLiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYXZhaWxhYmxlIG5hdGl2ZWx5IGluIFNtYXJ0eSBub3cuPC9wPgogICAgICA8cD5BbGxvd3MgYWRkaW5nIGl0ZW1zIHRvIGZsYXQgc21hcnR5IGFycmF5cy4gVGhpcyBwbHVnaW4gcmV0dXJucyBubyBvdXRwdXQ8L3A+CiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPjxiPm5hbWU8L2I+IC0gVGhlIG5hbWUgb2YgdGhlIHNtYXJ0eSBhcnJheS48L2xpPgogICAgICAgIDxsaT48Yj5rZXk8L2I+IC0gVGhlIGFycmF5IGtleS48L2xpPgogICAgICAgIDxsaT48Yj52YWx1ZTwvYj4gLSBUaGUgYXJyYXkgdmFsdWUuPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+VXNhZ2U6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiZsYnJhY2U7eHRfc2V0bGlzdCBuYW1lPWl0ZW1zIGtleT1pdGVtMSB2YWx1ZT0ndmFsdWUxJ308L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dF91bnNldGxpc3R9IDxzcGFuIGNsYXNzPSJzbWFsbCI+IDxzcGFuIHN0eWxlPSJjb2xvcjpvcmFuZ2UiPihkZXByZWNhdGVkKTwvc3Bhbj48L3NwYW4+PC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwIHN0eWxlPSJjb2xvcjogcmVkOyI+RGVwcmVjYXRlZC4uLiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYXZhaWxhYmxlIG5hdGl2ZWx5IGluIFNtYXJ0eSBub3cuPC9wPgogICAgICA8cD5SZW1vdmluZyBpdGVtcyBmcm9tIGZsYXQgc21hcnR5IGFycmF5cy4gVGhpcyBwbHVnaW4gcmV0dXJucyBubyBvdXRwdXQ8L3A+CiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPjxiPm5hbWU8L2I+IC0gVGhlIG5hbWUgb2YgdGhlIHNtYXJ0eSBhcnJheS48L2xpPgogICAgICAgIDxsaT48Yj5rZXk8L2I+IC0gVGhlIGFycmF5IGtleS48L2xpPgogICAgICA8L3VsPgogICAgICA8cD5Vc2FnZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JmxicmFjZTt4dF91bnNldGxpc3QgbmFtZT1pdGVtcyBrZXk9aXRlbTF9PC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogICAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfeWVzbm9fb3B0aW9uc30gPHNwYW4gY2xhc3M9InNtYWxsIj5Ecm9wZG93biBsaXN0IHRoYXQgYWxsb3dzIHNlbGVjdGluZyB0d28gb3B0aW9uczwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+T3V0cHV0IG9wdGlvbnMgZm9yIGEgZHJvcGRvd24gbGlzdCB0aGF0IGFsbG93cyBzZWxlY3RpbmcgdHdvIG9wdGlvbnMsICZxdW90O1llcyZxdW90OyBvciAmcXVvdDtObyZxdW90Oy4gIFRoaXMgcGx1Z2luIHdpbGwgb3V0cHV0IHRoZSAmbHQ7b3B0aW9uJmd0OyB0YWdzIHVzaW5nIGxvY2FsaXplZCBzdHJpbmdzIGZvciB0aGUgbGFiZWxzLCBhbmQgaW50ZWdlcnMgZm9yIHRoZSB2YWx1ZXMuPC9wPgogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT48Yj5wcmVmaXg8L2I+IC0gKHN0cmluZykgQSBwcmVmaXggdG8gcGxhY2UgYmVmb3JlIHRoZSBuYW1lIGF0dHJpYnV0ZSBvbiB0aGUgdGFnLiAgaS5lOiBwcmVmaXg9JGFjdGlvbmlkPC9saT4KICAgICAgICA8bGk+PGI+bmFtZTwvYj4gLSAoc3RyaW5nKSBBIG5hbWUgZm9yIHRoZSBzZWxlY3QgbGlzdCwgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIHRoZSBzeXN0ZW0gd2lsbCBnZW5lcmF0ZSBhIGNvbXBsZXRlICZsdDtzZWxlY3QmZ3Q7IHRhZy4gIE90aGVyd2lzZSwgb25seSAmbHQ7b3B0aW9uJmd0OyB0YWdzIHdpbGwgYmUgZ2VuZXJhdGVkLjwvbGk+CiAgICAgICAgPGxpPjxiPmlkPC9iPiAtIChzdHJpbmcpIEFuIGlkIGF0dHJpYnV0ZSBmb3IgdGhlIHNlbGVjdCBsaXN0LiAgT25seSB1c2VmdWwgaWYgdGhlIG5hbWUgaXMgYWxzbyBzcGVjaWZpZWQuPC9saT4KICAgICAgICA8bGk+PGI+Y2xhc3M8L2I+IC0gKHN0cmluZykgQSBjbGFzcyBhdHRyaWJ1dGUgZm9yIHRoZSBzZWxlY3QgbGlzdC4gIE9ubHkgdXNlZnVsIGlmIHRoZSBuYW1lIGlzIGFsc28gc3BlY2lmaWVkLjwvbGk+CiAgICAgICAgPGxpPjxiPnNlbGVjdGVkPC9iPiAtIChzdHJpbmcpIFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGVsZW1lbnQgKGVpdGhlciAwIG9yIDEpPC9saT4KICAgICAgICA8bGk+PGI+YXNzaWduPC9iPiAtIChzdHJpbmcpIEFzc2lnbiB0aGUgb3V0cHV0IGh0bWwgY29kZSB0byBhIG5ld2x5IGdlbmVyYXRlZCBzbWFydHkgdmFyaWFibGUuPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+VXNhZ2U6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiZsYnJhY2U7eHRfeWVzbm9fb3B0aW9ucyBuYW1lPWZsYWcgc2VsZWN0ZWQ9JG15ZmxhZ308L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dF9oYXZlX21vZHVsZX0gPHNwYW4gY2xhc3M9InNtYWxsIj5JcyB0aGUgc3BlY2lmaWVkIG1vZHVsZSBpcyBpbnN0YWxsZWQgYW5kIHJlYWR5IHRvIHVzZTwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+T3V0cHV0IGEgYm9vbGVhbiAoMCBvciAxKSB2YWx1ZSBpZiB0aGUgc3BlY2lmaWVkIG1vZHVsZSBpcyBpbnN0YWxsZWQgYW5kIHJlYWR5IHRvIHVzZS48L3A+CiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPjxiPm08L2I+fDxiPm1vZDwvYj58PGI+bW9kdWxlPC9iPiAtIChzdHJpbmcpIFNwZWNpZnkgdGhlIG1vZHVsZSBuYW1lPC9saT4KICAgICAgICA8bGk+PGI+YXNzaWduPC9iPiAtIChzdHJpbmcpIEFzc2lnbiB0aGUgb3V0cHV0IGh0bWwgY29kZSB0byBhIG5ld2x5IGdlbmVyYXRlZCBzbWFydHkgdmFyaWFibGUuPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+VXNhZ2U6PC9wPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiZsYnJhY2U7eHRfaGF2ZV9tb2R1bGUgbW9kdWxlPSdDYXJ0MicgYXNzaWduPSdjYXJ0Mid9JmxicmFjZTtpZiAkaGF2ZV9jYXJ0Mn0mbGJyYWNlO0NhcnQyfSZsYnJhY2U7L2lmfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICAgIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X2ltYWdlfSA8c3BhbiBjbGFzcz0ic21hbGwiPk91dHB1dCBhbiBpbWFnZSB0YWcgIDxzcGFuIHN0eWxlPSJjb2xvcjpncmVlbiI+KG5ldyk8L3NwYW4+PC9zcGFuPjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD48c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPihuZXcpIGFsaWFzIG9mIHh0aW1hZ2UgZm9yIGNvbnNpc3RlbmN5LiA8L3NwYW4+CiAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjpvcmFuZ2UiPnh0aW1hZ2UgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkLjwvc3Bhbj48L3A+CiAgICAgIDxjb2RlPiZsYnJhY2U7eHRfaW1hZ2UgaW1hZ2U9c3RyaW5nIFthbHQ9c3RyaW5nXSBbY2xhc3M9c3RyaW5nXSBbd2lkdGg9aW50XSBbaGVpZ2h0PWludF0gW2Fzc2lnbj1zdHJpbmddfSA8L2NvZGU+CiAgICAgIDxwPk91dHB1dCBhbiBpbWFnZSB0YWcsIFRoaXMgcGx1Z2luIGlzIHR5cGljYWxseSB1c2VkIGluIGFkbWluIHRlbXBsYXRlcywgYXMgaXQgYXV0b21hdGljYWxseSBzZWFyY2hlcyBpbiB0aGUgYWRtaW4gdGhlbWUsIGFuZCBpbiByZWdpc3RlcmVkIGljb24gZGlyZWN0b3JpZXMuPC9wPgogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT48Yj5pbWFnZTwvYj4gLSBUaGUgZmlsZW5hbWUgb2YgdGhlIGltYWdlLiAgWW91IG1heSBzcGVjaWZ5IGEgZmlsZW5hbWUsIG9yIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgYWRtaW4gdGhlbWUmcXVvdDtzIGltYWdlcyBkaXJlY3RvcnkuPC9saT4KICAgICAgICA8bGk+PGI+YWx0PC9iPiAtIFNwZWNpZnkgYWx0IHRleHQgZm9yIHRoZSBpbWFnZS4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZSB2YWx1ZSBvZiB0aGUgaW1hZ2UgcGFyYW1ldGVyIHdpbGwgYmUgdXNlZC48L2xpPgogICAgICAgIDxsaT48Yj5jbGFzczwvYj4gLSBTcGVjaWZ5IGEgY2xhc3MgZm9yIHRoZSBpbWFnZSB0YWcuPC9saT4KICAgICAgICA8bGk+PGI+d2lkdGg8L2I+IC0gU3BlY2lmeSBhbiBpbnRlZ2VyIHdpZHRoIGZvciB0aGUgaW1hZ2UgdGFnLjwvbGk+CiAgICAgICAgPGxpPjxiPmhlaWdodDwvYj4gLSBTcGVjaWZ5IGFuIGludGVnZXIgaGVpZ2h0IGZvciB0aGUgaW1hZ2UgdGFnLjwvbGk+CiAgICAgICAgPGxpPjxiPmFzc2lnbjwvYj4gLSBBc3NpZ24gdGhlIG91dHB1dCBodG1sIGNvZGUgdG8gYSBuZXdseSBnZW5lcmF0ZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPlVzYWdlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICZsYnJhY2U7eHRfaW1hZ2UgaW1hZ2U9J2ljb25zL3N5c3RlbS9uZXdvYmplY3QuZ2lmJyBhbHQ9J0NyZWF0ZSBuZXcgaXRlbSd9PC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogICAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7Li4ufHJmY19kYXRlfSA8c3BhbiBjbGFzcz0ic21hbGwiPkZvcm1hdCB0aW1lIHN0cmluZ3MgY29uc2lzdGVudCB3aXRoIFJGQzwvc3Bhbj48L2gzPgogICAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPiAtIDxlbT5tb2RpZmllcjwvZW0+CiAgICAgIDxwPkZvcm1hdCBhIHN1cHBsaWVkIHRpbWUgaW4gYW4gUkZDIGNvbnNpc3RlbnQgbWFubmVyLiAgVGhpcyBtb2RpZmllciBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHdoZW4gZ2VuZXJhdGluZyBSU1MgZmVlZHMuPC9wPgogICAgICA8cD5Vc2FnZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JmxicmFjZTskc21hcnR5Lm5vd3xyZmNfZGF0ZX08L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTtqc21pbn0uLi4mbGJyYWNlOy9qc21pbn0gPHNwYW4gY2xhc3M9InNtYWxsIj5qYXZhc2NyaXB0IG1pbmlmaWVyPC9zcGFuPjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD5QYXNzIGNvbnRlbnQgdGhyb3VnaCB0aGUgamF2YXNjcmlwdCBtaW5pZmllci48L3A+CiAgICAgIDxwPlVzYWdlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICZsYnJhY2U7anNtaW59CiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpJmxicmFjZTsKICAgICAgJChkb2N1bWVudCkudG9vbHRpcCgpOwogICAgfSkKICAgICZsYnJhY2U7L2pzbWlufTwvcHJlPgogICAgICA8cD5Ob3RlOiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBhcHByb3ByaWF0ZSAmbGJyYWNlO2xpdGVyYWx9LCZsYnJhY2U7L2xpdGVyYWx9LCZsYnJhY2U7bGRlbGltfCwgYW5kICZsYnJhY2U7cmRlbGltfSBpbnNpZGUgdGhlIGJsb2NrIHRvIGFsbG93IHNtYXJ0eSB0byBwcm9jZXNzIG9yIGlnbm9yZSB0aGUgY29kZS48L3A+CiAgICA8L2Rpdj4KICA8L2xpPgogICAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfdGV4dGFyZWF9IDxzcGFuIGNsYXNzPSJzbWFsbCI+VGV4dCBhcmVhIHRhZyB3aXRoIHN1cHBvcnQgZm9yIFdZU0lXWUcgb3Igc3ludGF4IGhpZ2hsaWdodGVyPC9zcGFuPjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD5DcmVhdGUgYSB0ZXh0IGFyZWEgdGFnLCB3aXRoIG9wdGlvbmFsIHN1cHBvcnQgZm9yIFdZU0lXWUcgZWRpdG9yIG9yIHN5bnRheCBoaWdobGlnaHRlci4gIFRoaXMgdGFnIGlzIHR5cGljYWxseSB1c2VkIGluIGFkbWluIHRlbXBsYXRlcyB0byBjcmVhdGUgdGV4dCBhcmVhcy48L3A+CiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaT48Yj5wcmVmaXg8L2I+IC0gKHN0cmluZykgQSBzdHJpbmcgdG8gcHJlZml4IHRoZSB0ZXh0YXJlYSBlbGVtZW50IG5hbWUuICBpLmU6ICZsYnJhY2U7JGFjdGlvbmlkfTwvbGk+CiAgICAgICAgICA8bGk+PGI+bmFtZTwvYj4gLSAoc3RyaW5nLCA8c3Ryb25nPnJlcXVpcmVkPC9zdHJvbmc+KSBUaGUgZWxlbWVudCBuYW1lLjwvbGk+CiAgICAgICAgICA8bGk+PGI+d3lzaXd5ZzwvYj4gLSAoYm9vbCkgSW5kaWNhdGVzIHdoZXRoZXIgYSBXWVNJV1lHIHNob3VsZCBiZSBhcHBsaWVkICh0aGUgYWN0dWFsIFdZU0lXWUcgdGhhdCBpcyB1c2VkIGRlcGVuZHMgb24gQ01TTVMgc2l0ZSBwcmVmZXJlbmNlcyBhbmQgdXNlciBwcmVmZXJlbmNlcy48L2xpPgogICAgICAgICAgPGxpPjxiPnN5bnRheDwvYj4gLSAoYm9vbCkgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByZWZlcnJlZCBzeW50YXggaGlnaGxpZ2h0ZXIgKGlmIGFueSBhcmUgYXZhaWxhYmxlIGFuZCBzZWxlY3RlZCkgc2hvdWxkIGJlIGFwcGxpZWQuIElmIGJvdGggV1lTSVdZRyBhbmQgc3ludGF4IGFyZSB0cnVlLCB0aGVuIHd5c2l3eWcgaXMgcHJlZmVycmVkLiAgTm8gY2hlY2sgaXMgZG9uZSB0byBzZWUgaWYgYSBXWVNJV1lHIG1vZHVsZSBpcyBhY3R1YWxseSBhdmFpbGFibGUuICBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIHdoZW4gdGhpcyB0YWcgaXMgdXNlZCBmb3IgZnJvbnRlbmQgcmVxdWVzdHMuPC9saT4KICAgICAgICAgIDxsaT48Yj5jb250ZW50PC9iPiAtIChzdHJpbmcpIClUaGUgY29udGVudCBmb3IgdGhlIHRleHQgYXJlYS48L2xpPgogICAgICAgICAgPGxpPjxiPmNsYXNzPC9iPiAtIChzdHJpbmcpIEFuIG9wdGlvbmFsIGNsYXNzIHRvIHN1cHBseSB0byB0aGUgdGV4dCBhcmVhIHRhZy48L2xpPgogICAgICAgICAgPGxpPjxiPmlkPC9iPiAtIChzdHJpbmcpIEFuIG9wdGlvbmFsIGlkIGF0dHJpYnV0ZSBmb3IgdGhlIHRleHQgYXJlYSB0YWcuPC9saT4KICAgICAgICAgIDxsaT48Yj5yb3dzPC9iPiAtIChpbnQpIEFuIG9wdGlvbmFsIHJvd3MgYXR0cmlidXRlIGZvciB0aGUgdGV4dCBhcmVhIHRhZy48L2xpPgogICAgICAgICAgPGxpPjxiPmNvbHM8L2I+IC0gKGludCkgQW4gb3B0aW9uYWwgY29scyBhdHRyaWJ1dGUgZm9yIHRoZSB0ZXh0IGFyZWEgdGFnLjwvbGk+CiAgICAgICAgICA8bGk+PGI+YXNzaWduPC9iPiAtIChpbnQpIEFzc2lnbiB0aGUgb3V0cHV0IGh0bWwgY29kZSB0byBhIG5ld2x5IGdlbmVyYXRlZCBzbWFydHkgdmFyaWFibGUuPC9saT4KICAgICAgICA8L3VsPgogICAgICA8cD5Vc2FnZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JmxicmFjZTt4dF90ZXh0YXJlYSBwcmVmaXg9JGFjdGlvbmlkIG5hbWU9ZGVzY3JpcHRpb24gY29udGVudD0kZGVzY3JpcHRpb24gd3lzaXd5Zz0xfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICAgIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X3N0cl90b19hc3NvY30gPHNwYW4gY2xhc3M9InNtYWxsIj4gPHNwYW4gc3R5bGU9ImNvbG9yOm9yYW5nZSI+KGRlcHJlY2F0ZWQpPC9zcGFuPjwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHAgc3R5bGU9ImNvbG9yOiByZWQ7Ij5EZXByZWNhdGVkPC9wPgogICAgICA8cD5Db252ZXJ0IGEgVVJMIHBhcmFtZXRlciB0eXBlIHN0cmluZyB0byBhbiBhc3NvY2lhdGl2ZSBhcnJheS48L3A+CiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaT48Yj5pbnB1dDwvYj4gLSAoc3RyaW5nLDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz4gVGhlIGlucHV0IHN0cmluZzwvbGk+CiAgICAgICAgICA8bGk+PGI+ZGVsaW0xPC9iPiAtIChzdHJpbmcpIClEZWxpbWl0ZXIgZm9yIHNlcGFyYXRpbmcgdGhlIHN0cmluZyBpbnRvIGEgbGlzdCBvZiB2YXJpYWJsZXMuICBEZWZhdWx0cyB0byAmcXVvdDssJnF1b3Q7PC9saT4KICAgICAgICAgIDxsaT48Yj5kZWxpbTI8L2I+IC0gKHN0cmluZykgRGVsaW1pdGVyIGZvciBzZXBhcmF0aW5nIHZhcmlhYmxlIGludG8gYSB2YXJpYWJsZSBuYW1lIGFuZCB2YWx1ZS4gIERlZmF1bHRzIHRvICZxdW90Oz0mcXVvdDs8L2xpPgogICAgICAgICAgPGxpPjxiPmFzc2lnbjwvYj4gLSAoc3RyaW5nKSBBc3NpZ24gdGhlIG91dHB1dCBodG1sIGNvZGUgdG8gYSBuZXdseSBnZW5lcmF0ZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mbGJyYWNlO3h0X3N0cl90b19hc3NvYyBpbnB1dD0mcXVvdDt2YXIxPXZhbDEsdmFyMj12YWwyLHZhcjM9dmFsMyZxdW90OyBhc3NpZ249JnF1b3Q7dG1wJnF1b3Q7fTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICAgIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X3d5c2l3eWd9IDxzcGFuIGNsYXNzPSJzbWFsbCI+IC4uLi4gPC9zcGFuPjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD5BbiBhbGlhcyBmb3IgdGhlICZsYnJhY2U7eHRfdGV4dGFyZWF9IHBsdWdpbi48L3A+CiAgICA8L2Rpdj4KICA8L2xpPgogICAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfY2FjaGV9Li4uJmxicmFjZTsveHRfY2FjaGV9IDxzcGFuIGNsYXNzPSJzbWFsbCI+IDxzcGFuIHN0eWxlPSJjb2xvcjpvcmFuZ2UiPihkZXByZWNhdGVkOiBzZWUgJmxicmFjZTt4dF9jYWNoZV9ibG9ja30pPC9zcGFuPjwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgIDxwIHN0eWxlPSJjb2xvcjogcmVkOyI+RGVwcmVjYXRlZC4uLiBTZWUgdGhlICZsYnJhY2U7eHRfY2FjaGVfYmxvY2t9IHBsdWdpbiBpbnN0ZWFkLjwvcD4KICAgIDxwPlRoaXMgY29tcGlsZXIgcGx1Z2luIGFsbG93cyBjYWNoaW5nIEhUTUwgb3V0cHV0IGJldHdlZW4gc3RhcnQgYW5kIGVuZCBibG9ja3MgZm9yIHBlcmZvcm1hbmNlLiBCeSBkZWZhdWx0LCBjb250ZW50IGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgdGFncyBpcyBjYWNoZWQgdG8gZmlsZXMgaW4gdGhlIHRtcC9jYWNoZSBkaXJlY3RvcnkgZm9yIGEgcGVyaW9kIG9mIGZpdmUgbWludXRlcy4gIExhdGVyIHZlcnNpb25zIG9mIHRoaXMgcGx1Z2luIHdpbGwgYWxsb3cgZXh0ZW5kaW5nIHRoZSBjYWNoZSBsaWZldGltZS48L3A+CiAgICA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoaXMgaXMgbm90IHRlY2huaWNhbGx5IGEgYmxvY2sgcGx1Z2luLCBidXQgZG9lcyBiZWhhdmUgbGlrZSBvbmUuPC9wPgogICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGlzIGlzIGFuIGFkdmFuY2VkIHBsdWdpbiB0aGF0IGNhbiBkcmFtYXRpY2FsbHkgaW1wcm92ZSB0aGUgYXZlcmFnZSBwZXJmb3JtYW5jZSBvZiB5b3VyIChwcmltYXJpbHkgc3RhdGljKSB3ZWJzaXRlLCB0aG91Z2ggaXQgc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uIGFzIHVzaW5nIGl0IGluY29ycmVjdGx5IGNhbiBjYXVzZSBzdHJhbmdlIGJlaGF2aW91ciBvbiB5b3VyIHNpdGUuICBUaGlzIGZ1bmN0aW9uYWxpdHkgd29ya3MgYmVzdCB3aGVuIHdyYXBwZWQgYXJvdW5kIHNtYXJ0eSB0YWdzIHRoYXQgcXVlcnkgdGhlIGRhdGFiYXNlIGFuZCBnZW5lcmF0ZSBzdGF0aWMgaHRtbCBjb250ZW50LiAgVGhpcyBwbHVnaW4gc2hvdWxkIG5vdCBiZSB1c2VkIGFyb3VuZCBkeW5hbWljIGZ1bmN0aW9uYWxpdHkgb3IgZm9ybXMuPC9wPgogICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGlzIHBsdWdpbiB1dGlsaXplcyBmaWxlIGxvY2tpbmcgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuICBUaGlzIG1heSBwcmVzZW50IHByb2JsZW1zIG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMuICBVc2UgdGhpcyBwbHVnaW4gd2l0aCBjYXV0aW9uLjwvcD4KICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPjxiPmtleTwvYj4gLSAoc3RyaW5nKSBBbiBvcHRpb25hbCB1bmlxdWUga2V5IHRvIGlkZW50aWZ5IHRoaXMgY2FjaGUgYmxvY2suICBNdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy48L2xpPgogICAgICA8L3VsPgogICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mbGJyYWNlO3h0X2NhY2hlfSZsYnJhY2U7UHJvZHVjdHN9JmxicmFjZTsveHRfY2FjaGV9PC9wcmU+CiAgPC9kaXY+CiAgPC9saT4KICAgIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X2NhY2hlX2Jsb2NrfSA8c3BhbiBjbGFzcz0ic21hbGwiPkNhY2hlcyBvdXRwdXQgb2YgdGhlIHNwZWNpZmllZCBibG9jayB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZTwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgIDxwPlRoaXMgYmxvY2sgcGx1Z2luIGFsbG93cyBjYWNoaW5nIEhUTUwgb3V0cHV0IG9mIHRoZSBzcGVjaWZpZWQgYmxvY2sgdG8gaW5jcmVhc2UgcGVyZm9ybWFuY2UuIFRoaXMgcGx1Z2luIGlzIHBhcnRpY3VsYXJseSBoYW5keSBmb3IgYmxvY2tzIG9mIEhUTUwgdGhhdCBhcmUgc3RhdGljIGluIG5hdHVyZSAoZG9uJ3QgY2hhbmdlIG9mdGVuKSBidXQgcmVxdWlyZSBzaWduaWZpY2FudCBzZXJ2ZXIgcmVzb3VyY2VzIHRvIGdlbmVyYXRlLjwvcD4KICAgICAgIDxwPlRoaXMgYmxvY2sgcGx1Z2luIGNhY2hlcyB0aGUgSFRNTCBvdXRwdXQuICBJdCBpcyBpbnRlbmRlZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLiAgSXQgd2lsbCBub3QgY2hlY2sgaWYgdGhlIGNvbnRlbnQgaW5zaWRlIHRoZSBibG9jayBoYXMgY2hhbmdlZCwgaXQgbWVyZWx5IGNhY2hlcyB0aGUgSFRNTCBmb3IgYSBzcGVjaWZpZWQgYW1vdW50IG9mIHRpbWUgKDEgaG91ciBieSBkZWZhdWx0KS48L3A+CiAgICAgICA8cD5CeSBkZWZhdWx0LCB0aGlzIHBsdWdpbiBhZGRzIGVudHJvcHkgdG8gdGhlIGtleSAoZXZlbiBpZiBpdCBpcyBhdXRvIGdlbmVyYXRlZCkgdG8gZW5zdXJlIHRoYXQgdGhlIHBhcnRpY3VsYXIgYmxvY2sgaXMgY2FjaGVkIG9uY2UgcGVyIENNU01TIHBhZ2UuICBUaGlzIGFsbG93cyB1c2Ugb2YgJmxicmFjZTt4dF9jYWNoZV9ibG9ja30gYXJvdW5kIG5hdmlnYXRpb25zIGFuZCBvdGhlciBibG9ja3Mgb2YgY29kZSB0aGF0IGNoYW5nZSBmb3IgZWFjaCBwYWdlLCBidXQgZm9yIHdoaWNoIHRoZSB0ZW1wbGF0ZSBzeW50YXggaXMgZW50aXJlbHkgdGhlIHNhbWUuPC9wPgogICAgICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGlzIHBsdWdpbiBzaG91bGQgbm90IGJlIHVzZWQgYXJvdW5kIGR5bmFtaWMgZnVuY3Rpb25hbGl0eSwgb3IgZm9ybXMuPC9wPgogICAgICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGlzIHBsdWdpbiBoYXMgbm8gZWZmZWN0IHdoZW4gbG9nZ2VkIGluIHRvIHRoZSBDTVNNUyBhZG1pbiBjb25zb2xlLiAgRm9yIHRlc3RpbmcsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSBhbiBpbmNvZ25pdG8gb3IgcHJpdmF0ZSB3aW5kb3csIG9yIGEgZGlmZmVyZW50IGJyb3dzZXIuPC9wPgogICAgICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGlzIHBsdWdpbiB1dGlsaXplcyBmaWxlIGxvY2tpbmcgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuICBUaGlzIG1heSBwcmVzZW50IHByb2JsZW1zIG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMuICBVc2UgdGhpcyBwbHVnaW4gd2l0aCBjYXV0aW9uLjwvcD4KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgICAgPHVsPgogICAgICAgICAgPGxpPjxiPmtleTwvYj4gLSAoc3RyaW5nKSBBbiBvcHRpb25hbCB1bmlxdWUga2V5IHRvIGlkZW50aWZ5IHRoaXMgY2FjaGUgYmxvY2suICBNdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy48L2xpPgogICAgICAgICAgPGxpPjxiPmV4cGlyZXM8L2I+IC0gKGludGVnZXIpIFRoZSBleHBpcnkgdGltZSBmb3IgdGhpcyBibG9jayAoaW4gbWludXRlcykuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMjAgbWludXRlcy48L2xpPgogICAgICAgICAgPGxpPjxiPmxvd2VudHJvcHk8L2I+IC0gKGJvb2xlYW4pIFByZXZlbnQgYWRkaW5nIGVudHJvcHkgdG8gdGhlIGtleS4gIFRoaXMgYWxsb3dzIHRoZSBzYW1lIGJsb2NrIG9mIEhUTUwgdG8gYmUgY2FjaGVkIGFjcm9zcyBtdWx0aXBsZSBkaWZmZXJlbnQgcGFnZXMuPC9saT4KICAgICAgICA8L3VsPgogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiZsYnJhY2U7eHRfY2FjaGVfYmxvY2t9JmxicmFjZTtQcm9kdWN0c30mbGJyYWNlOy94dF9jYWNoZV9ibG9ja308L3ByZT4KICAgICAgPHA+PHN0cm9uZz5UaXA6PC9zdHJvbmc+IE5ldmVyIHBsYWNlIHRoZSAmbGJyYWNlO3h0X2NhY2hlX2Jsb2NrfSB0YWdzIGFyb3VuZCB0aGUgZGVmYXVsdCBjb250ZW50IGJsb2NrLjwvcD4KICAgICAgPHA+PHN0cm9uZz5UaXA6PC9zdHJvbmc+IFVzZSBjYXV0aW9uIHdpdGggc21hcnR5IGxvZ2ljIGFuZCB0aGUgYXNzaWdubWVudCBvZiB2YXJpYWJsZXMgd2l0aGluICZsYnJhY2U7eHRfY2FjaGVfYmxvY2t9IGNhbGxzLiAgRG8gbm90IGNyZWF0ZSBzbWFydHkgdmFyaWFibGVzIHdpdGhpbiB0aGUgYmxvY2sgdGhhdCB3aWxsIGJlIHVzZWQgb3V0c2lkZS48L3A+CiAgICA8L2Rpdj4KICA8L2xpPgogICAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfY29va2llX3NldH0gPHNwYW4gY2xhc3M9InNtYWxsIj5TYXZlcyB2YWx1ZXMgdG8gY29va2llcyA8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPihuZXcpPC9zcGFuPjwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+PHNwYW4gY2xhc3M9ImdyZWVuIj5ORVc8L3NwYW4+IFRoaXMgZnVuY3Rpb24gcGx1Z2luIGFsbG93cyBzYXZpbmcgdmFsdWVzIHRvIGNvb2tpZXMgYXMgeW91IHdvdWxkIGluIFBIUC4gSXQgaGFzIGFsbCB0aGUgcGFyYW1ldGVycyB0eXBpY2FsbHkgdXNlZCB3aXRoIFBIUCBmdW5jdGlvbiA8Yj5zZXRjb29raWUoLi4uKTwvYj48L3A+CiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICAgIDx1bD4KICAgICAgICAgIDxsaT48Yj5uYW1lPC9iPiAtIChzdHJpbmcpIEEgcmVxdWlyZWQgbmFtZSB0byB0aGUgY29va2llLjwvbGk+CiAgICAgICAgICA8bGk+PGI+dmFsdWU8L2I+IC0gKHN0cmluZykgKG9wdGlvbmFsKSBBbiBvcHRpb25hbCB2YWx1ZS48L2xpPgogICAgICAgICAgPGxpPjxiPmV4cGlyZTwvYj4gLSAoaW50ZWdlcikgKG9wdGlvbmFsKSBUaGUgdGltZSB0aGUgY29va2llIGV4cGlyZXMuIFRoaXMgaXMgYSBVbml4IHRpbWVzdGFtcCBzbyBpcyBpbiBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2guIFRoZSBleHByZXNzaW9uIDxpPnRpbWUoKSsoODY0MDAqMzApPC9pPiBjYW4gYmUgdXNlZCBhcyBhbiBleGFtcGxlIHRvIGNhbGN1bGF0ZSAzMCBkYXlzIGZyb20gY3VycmVudCB0aW1lLiBPbWlzc2lvbiB3aWxsIHNldCB0aGUgZXhwaXJ5IHRpbWUgdG8gdGhlIGVuZCBvZiB0aGUgYnJvd3Npbmcgc2Vzc2lvbi48L2xpPgogICAgICAgICAgPGxpPjxiPnBhdGg8L2I+IC0gKHN0cmluZykgKG9wdGlvbmFsKSBUaGUgcGF0aCBvbiB0aGUgc2VydmVyIGluIHdoaWNoIHRoZSBjb29raWUgd2lsbCBiZSBhdmFpbGFibGUgb24uIElmIHNldCB0byAnLycsIHRoZSBjb29raWUgd2lsbCBiZSBhdmFpbGFibGUgd2l0aGluIHRoZSBlbnRpcmUgZG9tYWluLjwvbGk+CiAgICAgICAgICA8bGk+PGI+ZG9tYWluPC9iPiAtIChzdHJpbmcpIChvcHRpb25hbCkgVGhlIChzdWIpZG9tYWluIHRoYXQgdGhlIGNvb2tpZSBpcyBhdmFpbGFibGUgdG8uPC9saT4KICAgICAgICAgIDxsaT48Yj5zZWN1cmU8L2I+IC0gKGJvb2xlYW4pIChvcHRpb25hbCkgSW5kaWNhdGVzIHRoYXQgdGhlIGNvb2tpZSBzaG91bGQgb25seSBiZSB0cmFuc21pdHRlZCBvdmVyIGEgc2VjdXJlIEhUVFBTIGNvbm5lY3Rpb24gZnJvbSB0aGUgY2xpZW50LiBXaGVuIHNldCB0byB0cnVlLCB0aGUgY29va2llIHdpbGwgb25seSBiZSBzZXQgaWYgYSBzZWN1cmUgY29ubmVjdGlvbiBleGlzdHMuPC9saT4KICAgICAgICAgIDxsaT48Yj5odHRwb25seTwvYj4gLSAoYm9vbGVhbikgKG9wdGlvbmFsKSBXaGVuIHRydWUgdGhlIGNvb2tpZSB3aWxsIGJlIG1hZGUgYWNjZXNzaWJsZSBvbmx5IHRocm91Z2ggdGhlIEhUVFAgcHJvdG9jb2wuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29va2llIHdvbid0IGJlIGFjY2Vzc2libGUgYnkgc2NyaXB0aW5nIGxhbmd1YWdlcywgc3VjaCBhcyBKYXZhU2NyaXB0LjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBGb3IgbW9yZSBkb2N1bWVudGF0aW9uIGFuZCBzcGVjaWZpY3MgcGxlYXNlIGNvbnN1bHQgUEhQIHNpdGUgZG9jdW1lbnRhdGlvbiBhYm91dCB0aGUgPGI+c2V0Y29va2llKC4uLik8L2I+IGZ1bmN0aW9uLjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mbGJyYWNlO3h0X2Nvb2tpZV9zZXQgbmFtZT1teWNvb2tpZSB2YWx1ZT0nY2hvY29sYXRlJ308L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dF9maWxlX2xpc3R9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UmV0cmlldmUgYSBsaXN0IG9mIGZpbGVzIHRoYXQgbWF0Y2ggYSBjcml0ZXJpYTwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgIDxwPkEgU21hcnR5IHBsdWdpbiB0byByZXRyaWV2ZSBhIGxpc3Qgb2YgZmlsZXMgdGhhdCBtYXRjaCBhIGNyaXRlcmlhLCBhbmQgb3B0aW9uYWxseSB0byBidWlsZCBhIGxpc3Qgb2YgSFRNTCBvcHRpb25zIGZyb20gdGhlIHJlc3VsdHMgZm9yIHVzZSBpbiBhIGRyb3Bkb3duPC9wPgogICAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgICAgPHVsPgogICAgICAgICA8bGk+PGI+ZGlyPC9iPiAtIChzdHJpbmcpIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgPGVtPihyZWxhdGl2ZSB0byB0aGUgdXBsb2FkcyBwYXRoKTwvZW0+IHRvIHNlYXJjaC48L2xpPgogICAgICAgICA8bGk+PGI+cGF0dGVybjwvYj4gLSAoc3RyaW5nKSBBIGxpc3Qgb2YgZmlsZSBwYXR0ZXJucyBzZXBhcmF0ZWQgYnkgfHwgdG8gc2VhcmNoIGZvci4gIGkuZTogKi5wZGZ8fCouZG9jPC9saT4KICAgICAgICAgPGxpPjxiPmV4Y2x1ZGVzPC9iPiAtIChzdHJpbmcpIEEgbGlzdCBvZiBmaWxlIHBhdHRlcm5zIHNlcGFyYXRlZCBieSB8fCB0byBleGNsdWRlIGZyb20gdGhlIHJldHVybmVkIGxpc3QuICBpLmU6IFoqPC9saT4KICAgICAgICAgPGxpPjxiPm1heGRlcHRoPC9iPiAtIChpbnQpIEEgcG9zaXRpdmUgaW50ZWdlciByZXByZXNlbnRpbmcgdGhlIG1heGltdW0gZGVwdGggb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoLiAgRGVmYXVsdCBpcyB0byBwdXQgbm8gbGltaXQgb24gZGlyZWN0b3J5IGRlcHRoLjwvbGk+CiAgICAgICAgIDxsaT48Yj5hYnNvbHV0ZTwvYj4gLSAoYm9vbCkgQSBib29sZWFuIG9wdGlvbiBpbmRpY2F0aW5nIHRoYXQgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGZpbGVzIHNob3VsZCBiZSB1c2VkIGluIHRoZSByZXR1cm5lZCB2YWx1ZXMuPC9saT4KICAgICAgICAgPGxpPjxiPm9wdGlvbnM8L2I+IC0gKGJvb2wpIEEgYm9vbGVhbiBvcHRpb24gaW5kaWNhdGluZyB0aGF0IHRoZSBvdXRwdXQgc2hvdWxkIGJlIGEgc3RyaW5nIG9mIGh0bWwgb3B0aW9ucy48L2xpPgogICAgICAgICA8bGk+PGI+c2VsZWN0ZWQ8L2I+IC0gKHN0cmluZykgSWYgb3B0aW9ucyBpcyBzcGVjaWZpZWQsIHRoaXMgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvcHRpb24uPC9saT4KICAgICAgICAgPGxpPjxiPm5vdmFsdWU8L2I+IC0gKHN0cmluZykgaWYgdGhlICZxdW90O29wdGlvbnMmcXVvdDsgYXR0cmlidXRlIGlzIHNwZWNpZmllZCwgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgc3RyaW5nIHVzZWQgdG8gaW5kaWNhdGUgaW4gdGhlIGdlbmVyYXRlZCBkcm9wZG93biBvciBtdWx0aSBzZWxlY3QgbGlzdCB0byBpbmRpY2F0ZSB0aGF0IG5vIHZhbHVlIGhhcyBiZWVuIHNlbGVjdGVkLiAgQnkgZGVmYXVsdCwgdGhlcmUgaXMgbm8gb3B0aW9uIGluZGljYXRpbmcgbm92YWx1ZS48L2xpPgogICAgICAgICA8bGk+PGI+YXNzaWduPC9iPiAtIChzdHJpbmcpIEFzc2lnbiB0aGUgb3V0cHV0IG9mIHRoaXMgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4KICAgICAgICA8L3VsPgogICAgICAgPHA+RXhhbXBsZSBPbmU6IENyZWF0ZSBhIGRyb3Bkb3duIG9mIFBERiBmaWxlcyBpbiB0aGUgdXBsb2Fkcy9kb2NzIGRpcmVjdG9yeTo8L3A+CiAgICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiZsdDtzZWxlY3QgbmFtZT0iJmxicmFjZTskYWN0aW9uaWR9cGRmX2ZpbGUiPiZsYnJhY2U7eHRfZmlsZV9saXN0IGRpcj1kb2NzIG9wdGlvbnM9MSBub3ZhbHVlPSJOb25lIiBwYXR0ZXJuPScqLnBkZicgc2VsZWN0ZWQ9JHNvbWV2YXJ9Jmx0O3NlbGVjdCZndDs8L3ByZT4KICAgICAgIDxwPkV4YW1wbGUgVHdvOiBDcmVhdGUgYW4gYXJyYXkgb2YgUERGIEZpbGVzIGluIHRoZSB1cGxvYWRzL2RvY3MgZGlyZWN0b3J5OjwvcD4KICAgICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mbGJyYWNlO3h0X2ZpbGVfbGlzdCBkaXI9ZG9jcyBwYXR0ZXJuPScqLnBkZicgYXNzaWduPSdwZGZfZmlsZXMnfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICAgIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X2ltYWdlX2xpc3R9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UmV0cmlldmVzIGEgbGlzdCBvZiBpbWFnZXMgdGhhdCBtYXRjaCBhIGNyaXRlcmlhIGZyb20gYSBkaXJlY3Rvcnk8L3NwYW4+PC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgICA8cD5BIHNtYXJ0eSBwbHVnaW4gdG8gcmV0cmlldmUgYSBsaXN0IG9mIGltYWdlcyB0aGF0IG1hdGNoIGEgY3JpdGVyaWEgZnJvbSBhIGRpcmVjdG9yeSwgYW5kIG9wdGlvbmFsbHkgdG8gYnVpbGQgYSBsaXN0IG9mIGh0bWwgb3B0aW9ucyBmcm9tIHRoZSByZXN1bHRzLiAgVGhpcyBwbHVnaW4gaXMgc2ltcGx5IGEgd3JhcHBlciBhcm91bmQgdGhlICZsYnJhY2U7eHRfZmlsZV9saXN0fSBwbHVnaW4gZGVzY3JpYmVkIGFib3ZlLjwvcD4KICAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICAgPHVsPgogICAgICAgICA8bGk+PGI+ZGlyPC9iPiAtIChzdHJpbmcpIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgPGVtPihyZWxhdGl2ZSB0byB0aGUgdXBsb2FkcyBwYXRoKTwvZW0+IHRvIHNlYXJjaC48L2xpPgogICAgICAgICA8bGk+PGI+ZXh0ZW5zaW9uczwvYj4gLSAoc3RyaW5nKSBBIGxpc3Qgb2YgZmlsZSBwYXR0ZXJucyBzZXBhcmF0ZWQgYnkgfHwgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcGF0dGVybiBvZiAqLmpwZ3x8Ki5qcGVnfHwqLnBuZ3x8Ki5naWZ8fCouYm1wfHwqLmljbzwvbGk+CiAgICAgICAgIDxsaT48Yj5leGNsdWRlczwvYj4gLSAoc3RyaW5nKSBBIGxpc3Qgb2YgZmlsZSBwYXR0ZXJucyBzZXBhcmF0ZWQgYnkgfHwgdG8gZXhjbHVkZSBmcm9tIHRoZSByZXR1cm5lZCBsaXN0LiAgaS5lOiBaKnx8YSo8L2xpPgogICAgICAgICA8bGk+PGI+bWF4ZGVwdGg8L2I+IC0gKGludCkgQSBwb3NpdGl2ZSBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgbWF4aW11bSBkZXB0aCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2guICBEZWZhdWx0IGlzIHRvIHB1dCBubyBsaW1pdCBvbiBkaXJlY3RvcnkgZGVwdGguPC9saT4KICAgICAgICAgPGxpPjxiPmFic29sdXRlPC9iPiAtIChib29sKSBBIGJvb2xlYW4gb3B0aW9uIGluZGljYXRpbmcgdGhhdCB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZmlsZXMgc2hvdWxkIGJlIHVzZWQgaW4gdGhlIHJldHVybmVkIHZhbHVlcy48L2xpPgogICAgICAgICA8bGk+PGI+b3B0aW9uczwvYj4gLSAoYm9vbCkgQSBib29sZWFuIG9wdGlvbiBpbmRpY2F0aW5nIHRoYXQgdGhlIG91dHB1dCBzaG91bGQgYmUgYSBzdHJpbmcgb2YgaHRtbCBvcHRpb25zLjwvbGk+CiAgICAgICAgIDxsaT48Yj5zZWxlY3RlZDwvYj4gLSAoc3RyaW5nKSBJZiBvcHRpb25zIGlzIHNwZWNpZmllZCwgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9wdGlvbi48L2xpPgogICAgICAgICA8bGk+PGI+bm92YWx1ZTwvYj4gLSAoc3RyaW5nKSBpZiB0aGUgJnF1b3Q7b3B0aW9ucyZxdW90OyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCB0aGlzIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBzdHJpbmcgdXNlZCB0byBpbmRpY2F0ZSBpbiB0aGUgZ2VuZXJhdGVkIGRyb3Bkb3duIG9yIG11bHRpIHNlbGVjdCBsaXN0IHRvIGluZGljYXRlIHRoYXQgbm8gdmFsdWUgaGFzIGJlZW4gc2VsZWN0ZWQuICBCeSBkZWZhdWx0LCB0aGVyZSBpcyBubyBvcHRpb24gaW5kaWNhdGluZyBub3ZhbHVlLjwvbGk+CiAgICAgICAgIDxsaT48Yj5hc3NpZ248L2I+IC0gKHN0cmluZykgQXNzaWduIHRoZSBvdXRwdXQgb2YgdGhpcyBwbHVnaW4gdG8gdGhlIG5hbWVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPgogICAgICAgPC91bD4KICAgIDwvZGl2PgogIDwvbGk+CiAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dF9tZXNzYWdlfSA8c3BhbiBjbGFzcz0ic21hbGwiPlN0b3JlIGFuZCByZXRyaWV2ZSBtZXNzYWdlcyBpbiB0aGUgc2Vzc2lvbjwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgIDxwPkEgc2ltcGxlIGNvbnZlbmllbmNlIHBsdWdpbiB0byBzdG9yZSBtZXNzYWdlcyBpbiB0aGUgc2Vzc2lvbiBhbmQgcmV0cmlldmUgdGhlbS4gTWVzc2FnZXMgYXJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBmcm9tIHRoZSBzZXNzaW9uIG9uY2UgcmV0cmlldmVkLjwvcD4KICAgICAgIDxwPlNlZSBhbHNvOiBjbGFzcyB4dF9tZXNzYWdlPC9wPgogICAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgICA8dWw+CiAgICAgICAgIDxsaT48Yj5rZXk8L2I+IC0gKHN0cmluZykgVGhlIG1lc3NhZ2Uga2V5LjwvbGk+CiAgICAgICAgIDxsaT48Yj52YWx1ZTwvYj4gLSAoc3RyaW5nKSBPcHRpb25hbGx5IGNyZWF0ZSBhIG5ldyBtZXNzYWdlIHZhcmlhYmxlLjwvbGk+CiAgICAgICAgIDxsaT48Yj5hc3NpZ248L2I+IC0gKHN0cmluZykgQXNzaWduIHRoZSBvdXRwdXQgb2YgdGhpcyBwbHVnaW4gdG8gdGhlIG5hbWVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPgogICAgICAgPC91bD4KICAgICAgIDxwPlVzYWdlOjwvcD4KICAgICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJmxicmFjZTt4dF9tZXNzYWdlIGtleT0nc2FtcGxlJ30gJmxicmFjZTsqIGdldCwgZXJhc2UsIGFuZCBvdXRwdXQgdGhlIHZhbHVlIG9mICZxdW90O3NhbXBsZSZxdW90OyBpZiBpdCBleGlzdHMgKn08L3ByZT4KICAgICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJmxicmFjZTt4dF9tZXNzYWdlIGtleT0nc2FtcGxlJyBhc3NpZ249J2Zvbyd9ICZsYnJhY2U7KiBnZXQsIGVyYXNlLCBhbmQgYXNzaWduIHRoZSB2YWx1ZSBvZiAmcXVvdDtzYW1wbGUmcXVvdDsgaWYgaXQgZXhpc3RzIHRvIHRoZSBzbWFydHkgdmFyaWFibGUgZm9vLip9PC9wcmU+CiAgICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICZsYnJhY2U7eHRfbWVzc2FnZSBrZXk9J3NhbXBsZScgdmFsdWU9J2Jhcid9ICZsYnJhY2U7KiBzZXQgdGhlIHZhbHVlIG9mIHRoZSBrZXkgJnF1b3Q7c2FtcGxlJnF1b3Q7IHRvICZxdW90O2JhciZxdW90OyAqfTwvcHJlPgogICAgPC9kaXY+CiAgPC9saT4KICAgIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X3BhZ2VvcHRpb25zfSA8c3BhbiBjbGFzcz0ic21hbGwiPkdlbmVyYXRlIGEgbGlzdCBvZiBvcHRpb25zIGZvciBhIHNlbGVjdCBzdGF0ZW1lbnQgY29uc2lzdGluZyBvZiBtYXRjaGluZyBjb250ZW50IHBhZ2VzPC9zcGFuPjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICAgPHA+R2VuZXJhdGUgYSBsaXN0IG9mIG9wdGlvbnMgZm9yIGEgc2VsZWN0IHN0YXRlbWVudCBjb25zaXN0aW5nIG9mIG1hdGNoaW5nIGNvbnRlbnQgcGFnZXMuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBhIHBhZ2UgYXMgYSBtb2R1bGUgcHJlZmVyZW5jZSBldGMuPC9wPgogICAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgICAgPHVsPgogICAgICAgICA8bGk+PGI+c3RhcnRfcGFnZTwvYj4gLSAoaW50fHN0cmluZykgVGhlIHBhZ2UgaWQgb3IgYWxpYXMgb2YgdGhlIHBhcmVudCBwYWdlLiAgT25seSB0aGUgZGVzY2VuZGVudHMgb2YgdGhpcyBwYWdlIHdpbGwgYmUgdXNlZCBpbiB0aGUgb3V0cHV0LjwvbGk+CiAgICAgICAgIDxsaT48Yj5zZWxlY3RlZDwvYj4gLSAoaW50fHN0cmluZykgVGhlIHBhZ2UgaWQgb3IgYWxpYXMgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwYWdlLjwvbGk+CiAgICAgICAgIDxsaT48Yj5zaG93X25hdmhpZGRlbjwvYj4gLSAoYm9vbCkgV2hldGhlciBvciBub3QgdG8gc2hvdyBjb250ZW50IGl0ZW1zIHRoYXQgYXJlIG1hcmtlZCBhcyBub3Qgc2hvd24gaW4gbWVudS48L2xpPgogICAgICAgICA8bGk+PGI+bm9uZTwvYj4gLSAoYm9vbCkgV2hldGhlciBvciBub3QgdG8gc2hvdyBhICZxdW90O05vbmUmcXVvdDsgb3B0aW9uIGF0IHRoZSB0b3Agb2YgdGhlIGxpc3QuPC9saT4KICAgICAgICA8L3VsPgogICAgICAgPHA+VXNhZ2U6PC9wPgogICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICZsdDtzZWxlY3QgbmFtZT0iJmxicmFjZTskYWN0aW9uaWR9c29tZXRoaW5nIiZndDsKICAgICZsYnJhY2U7eHRfcGFnZW9wdGlvbnMgc2VsZWN0ZWQ9JHNvbWVfcHJlZmVyZW5jZX0KICAmbHQ7L3NlbGVjdCZndDs8L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dF9maWxlX2xpbmt9IDxzcGFuIGNsYXNzPSJzbWFsbCI+R2VuZXJhdGUgYW4gb2JmdXNjYXRlZCBsaW5rIHRvIGEgZmlsZTwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICAgPHA+R2VuZXJhdGUgYW4gb2JmdXNjYXRlZCBsaW5rIHRvIGEgZmlsZSB0byBhbGxvdyB2aWV3aW5nIG9yIGRvd25sb2FkaW5nIHRoZSBmaWxlIHdpdGhvdXQgcHJvdmlkaW5nIHBhdGggaW5mb3JtYXRpb24uICBGb3IgbGlua3MgdG8gaW1hZ2VzIG9wdGlvbmFsbHkgZ2VuZXJhdGUgYW5kIGRpc3BsYXkgYSB0aHVtYm5haWwsIGFuZCAoYnkgZGVmYXVsdCkgYWxsb3cgb3BlbmluZyB0aGUgaW1hZ2UgaW4gdGhlIGJyb3dzZXIuPC9wPgogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4KICAgICAgPHVsPgogICAgICAgICA8bGk+PGI+aW48L2I+IC0gKHN0cmluZykgVGhlIGZpbGUgcGF0aCBvciBVUkwgdG8gdGhlIGl0ZW0uICBJbnB1dCBtdXN0IGJlIHdpdGhpbiB0aGUgQ01TTVMgcm9vdCBwYXRoIGV2ZW4gaWYgc3BlY2lmeWluZyBhbiBhYnNvbHV0ZSBmaWxlIGxvY2F0aW9uLiAgZmlsZSBwYXRocyByZWxhdGl2ZSB0byB0aGUgaW1hZ2VfdXBsb2Fkc19wYXRoLCBvciB0aGUgcm9vdCBwYXRoIGFyZSBhbHNvIGFjY2VwdGFibGUuIFVSTFMgbXVzdCBiZSBjb21wbGV0ZSBVUkxTLiBQcm90b2NvbCBzcGVjaWZpYyBVUkxTIG1heSBhbHNvIHdvcmsgYnV0IG11c3Qgc3BlY2lmeSB0aGUgY29tcGxldGUgZG9tYWluIG5hbWUgYW5kIHBhdGguPC9saT4KICAgICAgICAgPGxpPjxiPnBhZ2U8L2I+IC0gKGludHxzdHJpbmcpIC0gQSBwYWdlIGlkIG9yIGFsaWFzIHRvIGEgcHVibGljL3VucHJvdGVjdGVkIHBhZ2UgZm9yIHRoZSBVUkwgdG8gYWxsb3cgc2hhcmluZy4gIElmIG5vdCBzcGVjaWZpZWQgdGhlIGN1cnJlbnQgcGFnZSBpZCB3aWxsIGJlIHVzZWQuPC9saT4KICAgICAgICAgPGxpPjxiPnVybG9ubHk8L2I+IC0gKGJvb2wpIE91dHB1dCBvbmx5IHRoZSBVUkwgdG8gdGhlIG9iZnVzY2F0ZWQgZmlsZSwgbm8gbGluayBvciB0aHVtYm5haWwuIE9mZiBieSBkZWZhdWx0PC9saT4KICAgICAgICAgPGxpPjxiPmRvd25sb2FkPC9iPiAtIChib29sKSBGb3IgbGlua3MgdG8gaW1hZ2UgZmlsZXMgZm9yY2UgdGhlIGltYWdlIHRvIGJlIGRvd25sb2FkZWQgb24gY2xpY2sgcmF0aGVyIHRoYW4gb3BlbmluZyBpbiB0aGUgYnJvd3Nlci4gT2ZmIGJ5IGRlZmF1bHQ8L2xpPgogICAgICAgICA8bGk+PGI+dGh1bWJuYWlsPC9iPiAtIChib29sKSBGb3IgbGlua3MgdG8gaW1hZ2UgZmlsZXMgb3B0aW9uYWxseSBkaXNwbGF5IGEgdGh1bWJuYWlsIGZvciB0aGUgaW1hZ2UuLi4gZ2VuZXJhdGluZyBvbmUgaWYgbmVjZXNzYXJ5LiAgT24gYnkgZGVmYXVsdDwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPlVzYWdlOjwvcD4KICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+ICAmbGJyYWNlO3h0X2ZpbGVfbGluayBpbj0ndXBsb2Fkcy90ZXJtcy5wZGYnfQogICZsYnJhY2U7eHRfZmlsZV9saW5rIGluPSd1cGxvYWRzL2ltYWdlcy9hYm91dC5qcGcnfTwvcHJlPgogIDwvZGl2PgogIDwvbGk+CiAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dF9odG1sX29wdGlvbnN9IDxzcGFuIGNsYXNzPSJzbWFsbCI+SFRNTCAmbHQ7b3B0aW9uJmd0OyB0YWdzIHN1aXRhYmxlIGZvciB1c2UgaW4gYSBzZWxlY3Qgc3RhdGVtZW50PC9zcGFuPjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD5HaXZlbiBhbiBhcnJheSBvZiBvcHRpb24gZGVmaW5pdGlvbnMgY3JlYXRlIEhUTUwgJmx0O29wdGlvbiZndDsgdGFncyBzdWl0YWJsZSBmb3IgdXNlIGluIGEgc2VsZWN0IHN0YXRlbWVudC48L3A+CiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPjxiPm9wdGlvbnM8L2I+IC0gKGFycmF5KSBBbiBhcnJheSBvZiBrZXkvdmFsdWUgcGFpcnMgb3IgYW4gYXJyYXkgb2YgbGFiZWwgYW5kIHZhbHVlIGF0dHJpYnV0ZXMuCiAgICAgICAgICAgIDxwPldoZW4gcGFzc2luZyBhbiBhcnJheSBvZiBsYWJlbCBhbmQgdmFsdWUgcmVjb3JkcywgdGhpcyBtb2R1bGUgd2lsbCBhbHNvIGFjY2VwdCBhICZxdW90O2Rpc2FibGUmcXVvdDssICZxdW90O2NsYXNzJnF1b3Q7LCAmcXVvdDtzZWxlY3RlZCZxdW90OyBhbmQgJnF1b3Q7aWQmcXVvdDsgYXR0cmlidXRlcy4gIGkuZS46PC9wPgogICAgICAgIDxwcmU+JmxicmFjZTskb3B0aW9ucyA9IFsKICAgICAgIFsKICAgICAgICAgICAnbGFiZWwnID0mZ3Q7ICdDYW5hZGEnLAogICAgICAgICAgICd2YWx1ZScgPSZndDsgJ1VTJywKICAgICAgIF0sCiAgICAgICBbCiAgICAgICAgICAgJ2xhYmVsJyA9Jmd0OyAnVW5pdGVkIFN0YXRlcycsCiAgICAgICAgICAgJ3ZhbHVlJyA9Jmd0OyAnVVMnLAogICAgICAgICAgICdkaXNhYmxlZCcgPSZndDsgMSwKICAgICAgIF0sCiAgICAgICBbCiAgICAgICAgICAgJ2xhYmVsJyA9Jmd0OyAnRnJhbmNlJywKICAgICAgICAgICAndmFsdWUnID0mZ3Q7ICdGUicsCiAgICAgICAgICAgJ2lkJyA9Jmd0OyAnRlInLAogICAgICAgICAgICdjbGFzcycgPSZndDsgJ2Nvb2wnCiAgICAgICBdLAogICAgICAgWwogICAgICAgICAgICdsYWJlbCcgPSZndDsgJ05ldGhlcmxhbmRzJywKICAgICAgICAgICAndmFsdWUnID0mZ3Q7ICdOTCcsCiAgICAgICAgICAgJ3NlbGVjdGVkJyA9Jmd0OyAxCiAgICAgICBdLAogICAgXX08L3ByZT4KICAgICAgICAgIDwvbGk+CiAgICAgICAgICA8bGk+PGI+c2VsZWN0ZWQ8L2I+IC0gKHN0cmluZ3xhcnJheSkgVGhlIHZhbHVlIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50KHMpLjwvbGk+CiAgICAgICAgICA8bGk+PGI+YXNzaWduPC9iPiAtIChzdHJpbmcpIEFzc2lnbiB0aGUgb3V0cHV0IG9mIHRoaXMgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4KICAgICAgICA8L3VsPgogICAgICA8cD5FeGFtcGxlOjwvcD4KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mbHQ7c2VsZWN0IG5hbWU9InNvbWV0aGluZyImZ3Q7JmxicmFjZTt4dF9odG1sX29wdGlvbnMgb3B0aW9ucz0kbXlfb3B0aW9uc30mbHQ7L3NlbGVjdCZndDs8L3ByZT4KICAgIDwvZGl2PgogIDwvbGk+CiAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dF9mb3JtX2NzcmZ9IDxzcGFuIGNsYXNzPSJzbWFsbCI+R2VuZXJhdGUgYSBDU1JGIHRva2VuIGZvciBtb2R1bGUgZm9ybXM8L3NwYW4+PC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPkdlbmVyYXRlIGEgQ1NSRiB0b2tlbiBhbmQgZW1iZWQgaXQgYXMgaGlkZGVuIGlucHV0cyBpbnRvIGEgZm9ybS48L3A+CiAgICAgIDxwPlRoaXMgdG9vbCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgdG9rZW5zIHRvIHByZXZlbnQgQ3Jvc3MtU2l0ZS1SZXF1ZXN0LUZvcmdlcnkgYXR0YWNrcyBvbiBmb3JtIHN1Ym1pc3Npb25zLjwvcD4KICAgICAgPHA+U2VlIHRoZSA8Y29kZT5ceHRfdXRpbHM6OnZhbGlkYXRlX2Zvcm1fY3NyZigpPC9jb2RlPiBjb21wYW5pb24gbWV0aG9kLjwvcD4KICAgICAgPHA+U2VlIHRoZSA8Y29kZT54dF9pZ25vcmVfY3NyZjwvY29kZT4gY29uZmlnIGVudHJ5IGJlbG93LjwvcD4KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+PGI+YXNzaWduPC9iPiAtIChzdHJpbmcpIEFzc2lnbiB0aGUgb3V0cHV0IG9mIHRoaXMgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4KICAgICAgPC91bD4KICAgIDwvZGl2PgogIDwvbGk+CiAgICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPgogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dGNzc19hZGR9Li4uJmxicmFjZTsveHRjc3NfYWRkfSA8c3BhbiBjbGFzcz0ic21hbGwiPkNhY2hlIGFuZCBtaW5pZnkgc3R5bGVzaGVldHM8L3NwYW4+PC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICA8cD5UaGlzIHBsdWdpbiBhbGxvd3MgYWRkaW5nIENTUyB0byB0aGUgY2FjaGVkIHN0eWxlc2hlZXRzIGdlbmVyYXRlZCBieSA8Y29kZT4mbGJyYWNlO3h0anNfcmVuZGVyfTwvY29kZT4uIFRoaXMgaXMgc2ltaWxhciB0byAoYnV0IGJldHRlciB0aGFuKSBlbWJlZGRlZCBDU1MgJmx0O3N0eWxlJmd0OyB0YWdzIGJlY2F1c2UgdGhlIGNzcyBpcyBjb25jYXRlbmF0ZWQgdG8gYSBtaW5pbWl6ZWQsIGFuZCBjYWNoZWQgc3R5bGVzaGVldCB0aGF0IGlzIGRvd25sb2FkZWQgYnkgdGhlIHVzZXIgb25jZS48L3A+CiAgICA8cD5TZWUgQWxzbzogPGNvZGU+JmxicmFjZTt4dGpzX3JlbmRlcn08L2NvZGU+PC9wPgogICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgIDx1bD4KICAgICAgICAgPGxpPjxiPmRlcGVuZHM8L2I+IC0gKG1peGVkKSBFaXRoZXIgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nLCBvciBhbiBhcnJheSBvZiByZXF1aXJlZCBsaWJyYXJ5IG5hbWVzLiAgVGhlc2UgbGlicmFyaWVzIChhbmQgdGhlaXIgZGVwZW5kZW50cyB3aWxsIGJlIGxvYWRlZCBwcmlvciB0byB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgY3NzKS48L2xpPgogICAgICAgICA8bGk+PGI+bm9taW5pZnk8L2I+IC0gKGJvb2wpIEV4cGxpY2l0bHkgZGlzYWJsZSBtaW5pZnlpbmcgdGhpcyBDU1MuPC9saT4KICAgICAgICAgPGxpPjxiPmFwcGVuZDwvYj4gLSAoYm9vbCkgU3BlY2lmeSB0aGF0IHRoaXMgY29kZSBzaG91bGQgYmUgYXBwZW5kZWQgQUZURVIgYWxsIHJlZ3VsYXIgcmVxdWlyZXMsIGFuZCBpbmNsdWRlcy4gIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSB1c2VmdWwgY29uc2lkZXJpbmcgdGhlIG9yZGVyIGluIHdoaWNoIENNU01TIHRlbXBsYXRlcyBhcmUgcHJvY2Vzc2VkLjwvbGk+CiAgICAgIDwvdWw+CiAgICA8cD5Vc2FnZTo8L3A+CiAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICZsYnJhY2U7KiBhZGQgc29tZSBjc3Mgc3BlY2lmaWMgZm9yIHRoaXMgcGFnZSBvciB0ZW1wbGF0ZSAqCiAgJmxicmFjZTt4dGNzc19hZGR9CiAgICBpbWcuYWxidW0gJmxicmFjZTsKICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgIHdpZHRoOiAzMyU7CiAgICAgIHBhZGRpbmc6IDRweDsKICAgIH0KICAmbGJyYWNlOy94dGNzc19hZGR9PC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogICAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRqc19hZGR9Li4uJmxicmFjZTsveHRqc19hZGR9IDxzcGFuIGNsYXNzPSJzbWFsbCI+Q2FjaGUgYW5kIG1pbmlmeSBqYXZhc2NyaXB0PC9zcGFuPjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICA8cD5UaGlzIHBsdWdpbiBhbGxvd3MgYWRkaW5nIGphdmFzY3JpcHQgdG8gdGhlIGNhY2hlZCBqYXZhc2NyaXB0IGZpbGUgZ2VuZXJhdGVkIGJ5IDxjb2RlPiZsYnJhY2U7eHRqc19yZW5kZXJ9PC9jb2RlPi4gVGhpcyBpcyBzaW1pbGFyIHRvIChidXQgYmV0dGVyIHRoYW4pIGVtYmVkZGVkICZsdDtzY3JpcHQmZ3Q7IHRhZ3MgYmVjYXVzZSB0aGUgamF2YXNjcmlwdCBpcyBjb25jYXRlbmF0ZWQgdG8gYSBtaW5pbWl6ZWQsIGFuZCBjYWNoZWQgc3R5bGVzaGVldCB0aGF0IGlzIGRvd25sb2FkZWQgYnkgdGhlIHVzZXIgb25jZS48L3A+CiAgICAgIDxwPlNlZSBBbHNvOiA8Y29kZT4mbGJyYWNlO3h0anNfcmVuZGVyfTwvY29kZT48L3A+CiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPjxiPmRlcGVuZHM8L2I+IC0gKG1peGVkKSBBIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHJlZ2lzdGVyZWQgbGliIG5hbWVzLCBvciBhbiBhcnJheSBvZiByZWdpc3RlcmVkIGxpYiBuYW1lcy48L2xpPgogICAgICAgIDxsaT48Yj5ub21pbmlmeTwvYj4gLSAoYm9vbCkgZXhwbGljaXRseSBkaXNhYmxlIG1pbmlmeWluZyB0aGlzIGphdmFzY3JpcHQuPC9saT4KICAgICAgICA8bGk+PGI+YXBwZW5kPC9iPiAtIChib29sKSBzcGVjaWZ5IHRoYXQgdGhpcyBjb2RlIHNob3VsZCBiZSBhcHBlbmRlZCBBRlRFUiBhbGwgcmVndWxhciByZXF1aXJlcywgYW5kIGluY2x1ZGVzLiAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHVzZWZ1bCBpZiB0aGVyZSBpcyBqYXZhc2NyaXB0IGdlbmVyYXRlZCBpbiBtb2R1bGUgdGVtcGxhdGVzLCBhbmQgb3V0cHV0IGF0IHRoZSBib3R0b20gb2YgdGhlIHBhZ2UgY29udGVudC48L2xpPgogICAgICA8L3VsPgogICAgICA8cD5Vc2FnZTo8L3A+CiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+ICAmbGJyYWNlOyogYXV0b21hdGljYWxseSBlbmFibGUganF1ZXJ5IHVpIHRvb2x0aXAgZnVuY3Rpb25hbGl0eSAqfQogICZsYnJhY2U7eHRqc19hZGQgZGVwZW5kcz11aX0KICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkmbGJyYWNlOwogICAgJChkb2N1bWVudCkudG9vbHRpcCgpOwogICAgfSk7CiAgJmxicmFjZTsveHRqc19hZGR9PC9wcmU+CiAgICA8L2Rpdj4KICA8L2xpPgogICAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRqc19yZXF1aXJlfSA8c3BhbiBjbGFzcz0ic21hbGwiPkFkZCBsaWJyYXJpZXMgdG8gJmxicmFjZTt4dGpzX3JlbmRlcn08L3NwYW4+PC9oMz4KPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij48cD5UaGlzIHBsdWdpbiBhbGxvd3MgYWRkaW5nIDxlbT4ob25lIG9mKTwvZW0+IGEgcHJlZGVmaW5lZCBqYXZhc2NyaXB0IGxpYnJhcnkgKGFuZCBpdHMgYXNzb2NpYXRlZCBjc3MpLCBhIENNU01TIHN0eWxlc2hlZXQsIGEgc3RhdGljIENTUyBmaWxlLCBvciBhIGphdmFzY3JpcHQgZmlsZSB0byB0aGUgY29tcGlsZWQgamF2YXNjcmlwdCBhbmQgY3NzIG91dHB1dC4gIFRoaXMgcGx1Z2luIHJlcGxhY2VzIG11bHRpcGxlICZsdDtzY3JpcHQmZ3Q7IGFuZC9vciAmbHQ7bGluayByZWw9c3R5bGVzaGVldCAuLi4mZ3Q7IHRhZ3MuPC9wPgogICAgPHA+U2VlIEFsc286IDxjb2RlPiZsYnJhY2U7eHRqc19yZW5kZXJ9PC9jb2RlPjwvcD4KICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPjxiPmxpYjwvYj4gLSAoc3RyaW5nKSBBIG5hbWUgb2YgYSByZWdpc3RlcmVkIGxpYnJhcnkuPC9saT4KICAgICAgICA8bGk+PGI+Y3NzbmFtZTwvYj4gLSAoc3RyaW5nKSBUaGUgbmFtZSBvZiBhIENNU01TIHN0eWxlc2hlZXQuPC9saT4KICAgICAgICA8bGk+PGI+Y3NzZmlsZTwvYj4gLSAoc3RyaW5nKSBBIENTUyBGaWxlbmFtZSA8ZW0+KHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IG1vZHVsZSwgb3IgdG8gdGhlIHVwbG9hZHMgZGlyZWN0b3J5KTwvZW0+PC9saT4KICAgICAgICA8bGk+PGI+Y3NzdXJsPC9iPiAtIChzdHJpbmcpIEEgVVJMIHRvIGEgcmVtb3RlIENTUyBmaWxlIHRvIGZldGNoIGFuZCBjYWNoZS48L2xpPgogICAgICAgIDxsaT48Yj5qc2ZpbGU8L2I+IC0gKHN0cmluZykgQSBKYXZhc2NyaXB0IGZpbGVuYW1lIDxlbT4ocmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgbW9kdWxlLCBvciB0byB0aGUgdXBsb2FkcyBkaXJlY3RvcnkpPC9lbT48L2xpPgogICAgICAgIDxsaT48Yj5qc3VybDwvYj4gLSAoc3RyaW5nKSBBIFVSTCB0byBhIHJlbW90ZSBKYXZhc2NyaXB0IGZpbGUgdG8gZmV0Y2ggYW5kIGNhY2hlLjwvbGk+CiAgICAgICAgPGxpPjxiPmRlcGVuZHM8L2I+IC0gKG1peGVkKSBBIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHJlZ2lzdGVyZWQgbGliIG5hbWVzLCBvciBhbiBhcnJheSBvZiByZWdpc3RlcmVkIGxpYiBuYW1lcy48L2xpPgogICAgICAgIDxsaT48Yj5ub21pbmlmeTwvYj4gLSAoYm9vbCkgZXhwbGljaXRseSBkaXNhYmxlIG1pbmlmeWluZyBib3RoIHRoZSBjc3MgYW5kIHRoZSBqYXZhc2NyaXB0IGZyb20gdGhpcyBsaWJyYXJ5LCBvdmVycmlkaW5nIHdoYXQgaXMgc3RhdGVkIGluIHRoZSBsaWJyYXJ5LjwvbGk+CiAgICAgIDwvdWw+CiAgICA8cD5Vc2FnZTo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+PGNvZGU+JmxicmFjZTt4dGpzX3JlcXVpcmUgbGliPSdmYW5jeWJveCd9PC9jb2RlPjxici8+RW5zdXJlIHRoYXQgdGhlIGZhbmN5Ym94IGxpYnJhcnksIGFuZCBhbnkgKHJlZ2lzdGVyZWQpIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGxvYWRlZC48L2xpPgogICAgICAgIDxsaT48Y29kZT4mbGJyYWNlO3h0anNfcmVxdWlyZSBqc2ZpbGU9J2Fzc2V0cy9teXN0dWZmLmpzJ308L2NvZGU+PGJyLz5FbnN1cmUgdGhhdCB0aGUgc3BlY2lmaWVkIGphdmFzY3JpcHQgZmlsZSBpcyBpbmNsdWRlZCBpbiB0aGUgamF2YXNjcmlwdCBvdXRwdXQgd2hlbiB0aGlzIHBhZ2UgaXMgcmVuZGVyZWQuPC9saT4KICAgICAgICA8bGk+PGNvZGU+JmxicmFjZTt4dGpzX3JlcXVpcmUgY3NzbmFtZT0nbXlzdHVmZid9PC9jb2RlPjxici8+RW5zdXJlIHRoYXQgdGhlIHNwZWNpZmllZCBDTVNNUyBzdHlsZXNoZWV0IG5hbWVkICdteXN0dWZmJyBpcyBpbmNsdWRlZCBpbiB0aGUgY3NzIG91dHB1dCB3aGVuIHRoaXMgcGFnZSBpcyByZW5kZXJlZC48L2xpPgogICAgICAgIDxsaT48Y29kZT4mbGJyYWNlO3h0anNfcmVxdWlyZSBjc3NmaWxlPSdhc3NldHMvbXlzdHVmZi5jc3MnfTwvY29kZT48YnIvPkVuc3VyZSB0aGF0IHRoZSBzcGVjaWZpZWQgQ1NTIGZpbGUgaXMgaW5jbHVkZWQgaW4gdGhlIGNzcyBvdXRwdXQgd2hlbiB0aGlzIHBhZ2UgaXMgcmVuZGVyZWQuPC9saT4KICAgICAgICA8bGk+PGNvZGU+JmxicmFjZTt4dGpzX3JlcXVpcmUganNmaWxlPSdhc3NldHMvbXlzdHVmZjIuanMnIGRlcGVuZHM9J2ZhbmN5Ym94J308L2NvZGU+PGJyLz5FbnN1cmUgdGhhdCB0aGUgYXNzZXRzL215c3R1ZmYyLmpzIGZpbGUsIGFuZCBpdCdzIGRlcGVuZGVudHMgKGZhbmN5Ym94KSBpcyBpbmNsdWRlZCBpbiB0aGUgamF2YXNjcmlwdCBvdXRwdXQsPC9saT4KICAgICAgPC91bD4KICAgIDxwPk5vdGVzOjwvcD4KICAgICAgIDx1bD4KICAgICAgICAgPGxpPk9ubHkgb25lIG9mOiBsaWIsIGpzZmlsZSwganN1cmwsIGNzc2ZpbGUsIGNzc3VybCwgYW5kIGNzc25hbWUgYXJlIHJlcXVpcmVkLiAgU3BlY2lmeWluZyBtdWx0aXBsZSBhcmd1bWVudHMgY291bGQgcmVzdWx0IGluIHJhbmRvbSBiZWhhdmlvci48L2xpPgogICAgICAgICA8bGk+VGhlIGpzZmlsZSwgY3NzZmlsZSwgYW5kIGNzc25hbWUgYXJndW1lbnRzIGFsbCBzdXBwb3J0IHRoZSAnZGVwZW5kcycgYXJndW1lbnQuLi4gaG93ZXZlciBpdCBpcyBpZ25vcmVkIHdoZW4gc3BlY2lmeWluZyB0aGUgJnF1b3Q7bGliJnF1b3Q7IGFyZ3VtZW50LjwvbGk+CiAgICAgICAgIDxsaT5XaGVuIHVzaW5nIHJlbW90ZSBVUkxTLCB0aGV5IGFyZSBjYWNoZWQgbG9jYWxseSBiZWZvcmUgbWluaWZ5aW5nIG9yIGF0dGFjaGluZyB0byB0aGUgY3NzLjwvbGk+CiAgICAgICAgIDxsaT5MaWJyYXJpZXMsIGZpbGVzIGFuZCBjb2RlIGFyZSBsYXJnZWx5IGF0dGFjaGVkIGluIHRoZSBvcmRlciB0aGV5IGFyZSBzcGVjaWZpZWQuPC9saT4KICAgICAgIDwvdWw+CiAgPC9saT4KICAgIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0anNfcmVuZGVyfSA8c3BhbiBjbGFzcz0ic21hbGwiPlJlbmRlciBhbGwgbGlicmFyeSBkZXBlbmRlbmNpZXM8L3NwYW4+PC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgIDxwPlRoaXMgcGx1Z2luIGludGVsbGlnZW50bHkgYW5kIHJlY3Vyc2l2ZWx5IHJlc29sdmVzIGFsbCBsaWJyYXJ5IGRlcGVuZGVuY2llcywgYW5kIG91dHB1dHMgdHdvIHRhZ3M6PC9wPgogICAgICA8dWw+CiAgICAgICAgPGxpPkEgc2NyaXB0IHRhZyB0byBpbmNsdWRlIGFsbCB0aGUgcmVxdWVzdGVkIGphdmFzY3JpcHQgKGluY2x1ZGluZyBqYXZhc2NyaXB0IGxpYnJhcmllcywgamF2YXNjcmlwdCBmaWxlcywgYW5kIGVtYmVkZGVkIGphdmFzY3JpcHQpLCBpbiBhIHNpbmdsZSBtaW5pbWl6ZWQgZmlsZS48L2xpPgogICAgICAgIDxsaT5BIHN0eWxlc2hlZXQgdGFnIHRvIGluY2x1ZGUgYWxsIHRoZSByZXF1ZXN0ZWQgQ1NTIChpbmNsdWRpbmcgdGhhdCBkZWZpbmVkIGZvciBqYXZhc2NyaXB0IGxpYnJhcmllcyksIENTUyBmaWxlcywgYW5kIGVtYmVkZGVkIENTUyksIGluIGEgc2luZ2xlIG1pbmltaXplZCBmaWxlLjwvbGk+CiAgICAgIDwvdWw+CiAgICA8cD5UaGUgcGx1Z2luIGFsbG93cyBjYWNoaW5nIHRoZSBvdXRwdXQgZm9yIGFuIGFkanVzdGFibGUgbnVtYmVyIG9mIGhvdXJzLCBzbyB0aGF0IHRoZSBwb3RlbnRpYWxseSBleHBlbnNpdmUgZnVuY3Rpb24gb2YgcmVzb2x2aW5nIGFsbCB0aGUgZGVwZW5kZW5jaWVzLCByZWFkaW5nIGFsbCB0aGUgY29kZSBhbmQgY29uY2F0ZW5hdGluZyB0aGVtIGlzIG1pbmltaXplZC48L3A+CiAgICA8cD5QYXJhbWV0ZXJzOjwvcD4KICAgIDx1bD4KICAgICAgPGxpPjxiPmV4Y2x1ZGVzPC9iPiAtIChzdHJpbmdbXSkgLSBBbiBhcnJheSBvZiBsaWJyYXJ5IG5hbWVzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgb3V0cHV0IDxlbT4oZXZlbiBpZiB0aGV5IGFyZSByZXF1aXJlZCBieSBvdGhlciBsaWJhcmllcyk8L2VtPiBUaGlzIGlzIHVzZWZ1bCBpZiBzb21lIGxpYnJhcmllcyB3aWxsIGJlIGluY2x1ZGVkIGJ5IG1lYW5zIGV4dGVybmFsIHRvIHRoZSA8Y29kZT4mbGJyYWNlO3h0anNfcmVxdWlyZX08L2NvZGU+IHRhZy48L2xpPgogICAgICA8bGk+PGI+Y2FjaGVfbGlmZXRpbWU8L2I+IC0gKGludCkgLSBUaGUgbnVtYmVyIG9mIGhvdXJzIHRoYXQgdGhlIG91dHB1dCBzaG91bGQgYmUgY2FjaGVkIGZvci4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDI0LiAgVGhpcyB2YWx1ZSBjYW4gYmUgb3ZlcnJpZGRlbiBnbG9iYWxseSB3aXRoIHRoZSAmcXVvdDt4dGVqc19jYWNoZWxpZmUmcXVvdDsgY29uZmlnIGVudHJ5LjwvbGk+CiAgICAgIDxsaT48Yj5ub2NhY2hlPC9iPiAtIChpbnQpIC0gQW55IG5vbiB6ZXJvIHZhbHVlIGluZGljYXRlcyB0aGF0IGNhY2hpbmcgc2hvdWxkIGJlIHR1cm5lZCBvZmYgZW50aXJlbHkuLi4gdGhpcyBpcyBwb3RlbnRpYWxseSBhbiBleHBlbnNpdmUgb3B0aW9uLCBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGV2ZWxvcG1lbnQuICBUaGlzIHZhbHVlIGNhbiBiZSBvdmVycmlkZGVuIGdsb2JhbGx5IHdpdGggdGhlICZxdW90O3h0ZWpzX25vY2FjaGUmcXVvdDsgY29uZmlnIGVudHJ5LjwvbGk+CiAgICAgIDxsaT48Yj5ub21pbmlmeTwvYj4gLSAoaW50KSAtIEFueSBub24gemVybyB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCBtaW5pZnlpbmcgb2YgamF2YXNjcmlwdCBhbmQgQ1NTIG91dHB1dCBzaG91bGQgYmUgdHVybmVkIG9mZiBlbnRpcmVseS4uLiBUaGlzIHZhbHVlIGNhbiBiZSBvdmVycmlkZGVuIGdsb2JhbGx5IHdpdGggdGhlICZxdW90O3h0ZWpzX25vbWluaWZ5JnF1b3Q7IGNvbmZpZyBlbnRyeS48L2xpPgogICAgICA8bGk+PGI+bm9fY3NzPC9iPiAtIChpbnQpIC0gQW55IG5vbiB6ZXJvIHZhbHVlIGluZGljYXRlcyB0aGF0IHN0eWxlc2hlZXQgdGFncyBzaG91bGQgbm90IGJlIG91dHB1dC48L2xpPgogICAgICA8bGk+PGI+bm9fanM8L2I+IC0gKGludCkgLSBBbnkgbm9uIHplcm8gdmFsdWUgaW5kaWNhdGVzIHRoYXQgamF2YXNjcmlwdCB0YWdzIHNob3VsZCBub3QgYmUgb3V0cHV0LjwvbGk+CiAgICAgIDxsaT48Yj5hZGRrZXk8L2I+IC0gKHN0cmluZykgQWRkIGVudHJvcHkgaW50byB0aGUgY2FjaGUgZmlsZSBuYW1lIGdlbmVyYXRpb24gYWxnb3JpdGhtLjwvbGk+CiAgICAgIDxsaT48Yj5hc3NpZ248L2I+IC0gKHN0cmluZykgQXNzaWduIHRoZSBodG1sIG91dHB1dCBvZiB0aGlzIHBsdWdpbiB0byB0aGUgbmFtZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+CiAgICA8L3VsPgogICAgPHA+VXNhZ2U6PC9wPgogIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+ICAmbGJyYWNlOyogb3V0cHV0IGFsbCBqYXZhc2NyaXB0IGFuZCBDU1MgZGF0YSBxdWV1ZWQgdmlhIHRoZSB4dGpzX3JlcXVpcmUsIHh0anNfYWRkanMsIGFuZCB4dGpzX2FkZGNzcyBwbHVnaW5zICp9CiAgICAmbGJyYWNlO3h0anNfcmVuZGVyfQogICZsdDsvaGVhZCZndDs8L3ByZT4KICAgIDxwPk5vdGVzOjwvcD4KICAgIDx1bD4KICAgICAgPGxpPlRoaXMgcGx1Z2luIGlzIG1lcmVseSBhIHdyYXBwZXIgYXJvdW5kIHRoZSA8Y29kZT54dF9qc2xvYWRlcjo6cmVuZGVyPC9jb2RlPiBBUEkgZnVuY3Rpb24uPC9saT4KICAgICAgPGxpPlRoZSA8Y29kZT54dF9qc2xvYWRlcjo6cmVuZGVyPC9jb2RlPiBBUEkgZnVuY3Rpb24gaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgZm9yIGFkbWluIGFjdGlvbnMgaW4gbW9kdWxlcyB0aGF0IGluaGVyaXQgZnJvbSBDTVNNU0V4dC4gIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIHVzZSAmbGJyYWNlO3h0anNfcmVxdWlyZX0sICZsYnJhY2U7eHRqc19hZGRjc3N9IGFuZCAmbGJyYWNlO3h0anNfYWRkanN9IGluIGFueSBhZG1pbiBzaWRlIGFjdGlvbiBpbiBhbnkgb2YgbXkgbW9kdWxlcy48L2xpPgogICAgICA8bGk+SW4gYWRtaW4gc2lkZSBhY3Rpb25zLCBiZWNhdXNlIHRoZSBDTVNNUyBhZG1pbiB0aGVtZSA8ZW0+KE9uZUVsZXZlbiwgYW5kIE5DbGVhbkdyZXkpPC9lbT4gYXV0b21hdGljYWxseSBpbmNsdWRlIEpRdWVyeSwgYW5kIEpRdWVyeSBVSSwgdGhlc2UgbGlicmFyaWVzIDxlbT4oanF1ZXJ5LCB1aSk8L2VtPiBhcmUgYXV0b21hdGljYWxseSBhZGRlZCB0byB0aGUgZXhjbHVkZSBsaXN0LjwvbGk+CiAgICAgIDxsaT5JbiBmcm9udGVuZCBwYWdlIHRlbXBsYXRlcywgSSByZWNvbW1lbmQgYWRkaW5nIHRoaXMgdGFnIHRvIHRoZSBib3R0b20gb2YgdGhlICZsdDtoZWFkJmd0OyB0YWcgc28gdGhhdCAmbGJyYWNlO3h0anNfcmVxdWlyZX0sICZsYnJhY2U7eHRqc19hZGR9IGFuZCAmbGJyYWNlO3h0Y3NzX2FkZH0gY2FuIGJlIGNhbGxlZCBhbnl3aGVyZSBpbiBtb2R1bGUgYWN0aW9uIHRlbXBsYXRlcywgcGFnZSB0ZW1wbGF0ZXMsIGV0Yy48L2xpPgogICAgPC91bD4KICAgIDwvZGl2PgogIDwvbGk+CiAgICAgIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO2NoZWNrX3Nlc3Npb25fc3RhdHVzfSA8c3BhbiBjbGFzcz0ic21hbGwiPkNoZWNrcyB0aGUgc2Vzc2lvbiBleHBpcmF0aW9uIHN0YXR1cyA8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPihuZXcpPC9zcGFuPjwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4gPHA+QSBzbWFydHkgcGx1Z2luIHVzZWQgdG8gY2hlY2sgdGhlIHNlc3Npb24gZXhwaXJhdGlvbiBzdGF0dXMsIGRpc3BsYXkgYSBjb3VudGRvd24gdGltZXIgdG8gdGhlIHVzZXIgYW5kIGRpc3BsYXkgYSBtZXNzYWdlIG9yIGEgdG9hc3QgdG8gdGhlIHVzZXIgaWYgYW5kIHdoZW4gdGhlIHNlc3Npb24gaGFzIGV4cGlyZWQuIEV4Y2VwdCBmb3IgdGhlIHNjcmlwdCB0aGF0IGlzIGdlbmVyYXRlZCBieSB0aGlzIHBsdWdpbiwgdGhlIHJlc3Qgb2YgaHRtbCBhbmQgY3NzIGFyZSBvcHRpb25hbCBhbmQgY2FuIGJlIGN1c3RvbWl6ZWQgb3Igb3ZlcnJpZGRlbi48L3A+CiAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgIDx1bD4KICAgICAgICA8bGk+PGI+c2Vzc2lvbl9jaGVja19pbnRlcnZhbDwvYj4gLSAoaW50ZWdlciwgb3B0aW9uYWwpOiBUaGUgaW50ZXJ2YWwgKGluIHNlY29uZHMpIGF0IHdoaWNoIHRoZSBzZXNzaW9uIHN0YXR1cyBpcyBjaGVja2VkLiBEZWZhdWx0IHZhbHVlIGlzIDEgc2Vjb25kLjwvbGk+CiAgICAgICAgPGxpPjxiPnRvYXN0X2Rpc3BsYXlfaW50ZXJ2YWw8L2I+IC0gKGludGVnZXIsIG9wdGlvbmFsKTogVGhlIGR1cmF0aW9uIChpbiBzZWNvbmRzKSBmb3Igd2hpY2ggdGhlIHRvYXN0IG1lc3NhZ2UgaXMgZGlzcGxheWVkLiBEZWZhdWx0IHZhbHVlIGlzIDEwIHNlY29uZHMuPC9saT4KICAgICAgICA8bGk+PGI+dXNlX3RvYXN0PC9iPiAtIChpbnRlZ2VyLCBvcHRpb25hbCk6IEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHVzZSB0b2FzdCBmb3IgZGlzcGxheWluZyB0aGUgc2Vzc2lvbiBleHBpcmVkIG1lc3NhZ2UuIFNldCB0byAxIGZvciB0cnVlLCAwIGZvciBmYWxzZS4gRGVmYXVsdCB2YWx1ZSBpcyAxLjwvbGk+CiAgICAgICAgPGxpPjxiPnVzZV9jdXN0b21faHRtbDwvYj4gLSAoaW50ZWdlciwgb3B0aW9uYWwpOiBGbGFnIGluZGljYXRpbmcgd2hldGhlciB0byB1c2UgY3VzdG9tIEhUTUwgZm9yIHNlc3Npb24gc3RhdHVzIGRpc3BsYXkuIFNldCB0byAxIGZvciB0cnVlLCAwIGZvciBmYWxzZS4gRGVmYXVsdCB2YWx1ZSBpcyAwLjwvbGk+CiAgICAgICAgPGxpPjxiPnVzZV9jdXN0b21fY3NzPC9iPiAtIChpbnRlZ2VyLCBvcHRpb25hbCk6IEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHVzZSBjdXN0b20gQ1NTIGZvciBzZXNzaW9uIHN0YXR1cyBkaXNwbGF5LiBTZXQgdG8gMSBmb3IgdHJ1ZSwgMCBmb3IgZmFsc2UuIERlZmF1bHQgdmFsdWUgaXMgMC48L2xpPgogICAgICAgIDxsaT48Yj5jb3VudGVyX2lkPC9iPiAtIChzdHJpbmcsIG9wdGlvbmFsKTogVGhlIElEIGF0dHJpYnV0ZSBmb3IgdGhlIGNvdW50ZG93biB0aW1lciBlbGVtZW50LiBEZWZhdWx0IHZhbHVlIGlzICdzZXNzaW9uX3N0YXR1c19jb3VudGRvd24nLjwvbGk+CiAgICAgICAgPGxpPjxiPmNvdW50ZXJfY2xhc3M8L2I+IC0gKHN0cmluZywgb3B0aW9uYWwpOiBUaGUgY2xhc3MgYXR0cmlidXRlIGZvciB0aGUgY291bnRkb3duIHRpbWVyIGVsZW1lbnQuIERlZmF1bHQgdmFsdWUgaXMgJ3Nlc3Npb25fc3RhdHVzX2NvdW50ZG93bicuPC9saT4KICAgICAgICA8bGk+PGI+Y291bnRlcl9zcGFuX2lkPC9iPiAtIChzdHJpbmcsIG9wdGlvbmFsKTogVGhlIElEIGF0dHJpYnV0ZSBmb3IgdGhlIGNvdW50ZG93biB0aW1lciBzcGFuIGVsZW1lbnQuIERlZmF1bHQgdmFsdWUgaXMgJ3Nlc3Npb25fc3RhdHVzX2NvdW50ZG93bl9zcGFuJy48L2xpPgogICAgICAgIDxsaT48Yj5jb3VudGVyX3NwYW5fY2xhc3M8L2I+IC0gKHN0cmluZywgb3B0aW9uYWwpOiBUaGUgY2xhc3MgYXR0cmlidXRlIGZvciB0aGUgY291bnRkb3duIHRpbWVyIHNwYW4gZWxlbWVudC4gRGVmYXVsdCB2YWx1ZSBpcyAnc2Vzc2lvbl9zdGF0dXNfY291bnRkb3duX3NwYW4nLjwvbGk+CiAgICAgICAgPGxpPjxiPnRvYXN0X2lkPC9iPiAtIChzdHJpbmcsIG9wdGlvbmFsKTogVGhlIElEIGF0dHJpYnV0ZSBmb3IgdGhlIHRvYXN0IGVsZW1lbnQuIERlZmF1bHQgdmFsdWUgaXMgJ3Nlc3Npb25fc3RhdHVzX3RvYXN0Jy48L2xpPgogICAgICAgIDxsaT48Yj50b2FzdF9jbGFzczwvYj4gLSAoc3RyaW5nLCBvcHRpb25hbCk6IFRoZSBjbGFzcyBhdHRyaWJ1dGUgZm9yIHRoZSB0b2FzdCBlbGVtZW50LiBEZWZhdWx0IHZhbHVlIGlzICdzZXNzaW9uX3N0YXR1c190b2FzdCcuPC9saT4KICAgICAgICA8bGk+PGI+bm90aWZpY2F0aW9uX2lkPC9iPiAtIChzdHJpbmcsIG9wdGlvbmFsKTogVGhlIElEIGF0dHJpYnV0ZSBmb3IgdGhlIHNlc3Npb24gZXhwaXJlZCBub3RpZmljYXRpb24gZWxlbWVudC4gRGVmYXVsdCB2YWx1ZSBpcyAnc2Vzc2lvbl9zdGF0dXNfZXhwaXJlZF9hbGVydCcuPC9saT4KICAgICAgICA8bGk+PGI+bm90aWZpY2F0aW9uX2NsYXNzPC9iPiAtIChzdHJpbmcsIG9wdGlvbmFsKTogVGhlIGNsYXNzIGF0dHJpYnV0ZSBmb3IgdGhlIHNlc3Npb24gZXhwaXJlZCBub3RpZmljYXRpb24gZWxlbWVudC4gRGVmYXVsdCB2YWx1ZSBpcyAnc2Vzc2lvbl9zdGF0dXNfYWxlcnQnLjwvbGk+CiAgICAgICAgPGxpPjxiPmFsZXJ0X21lc3NhZ2VfaWQ8L2I+IC0gKHN0cmluZywgb3B0aW9uYWwpOiBUaGUgSUQgYXR0cmlidXRlIGZvciB0aGUgYWxlcnQgbWVzc2FnZSBlbGVtZW50IHdpdGhpbiB0aGUgbm90aWZpY2F0aW9uLiBEZWZhdWx0IHZhbHVlIGlzICdhbGVydF9tZXNzYWdlJy48L2xpPgogICAgICAgIDxsaT48Yj5lbmRfc2Vzc2lvbl9tZXNzYWdlPC9iPiAtIChzdHJpbmcsIG9wdGlvbmFsKTogVGhlIG1lc3NhZ2UgdG8gZGlzcGxheSB3aGVuIHRoZSBzZXNzaW9uIGhhcyBleHBpcmVkLiBEZWZhdWx0IHZhbHVlIGlzICdZb3VyIHNlc3Npb24gaGFzIGV4cGlyZWQuIFBsZWFzZSByZWZyZXNoIHRoZSBwYWdlIHRvIGNvbnRpbnVlLicuPC9saT4KICAgICAgICA8bGk+PGI+Y3VzdG9tX2NhbGxiYWNrPC9iPiAtIChzdHJpbmcsIG9wdGlvbmFsKTogVGhlIG5hbWUgb2YgYSBjdXN0b20gY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgc2Vzc2lvbiBleHBpcmVzLiBEZWZhdWx0IHZhbHVlIGlzIGFuIGVtcHR5IHN0cmluZy48L2xpPgogICAgICA8L3VsPgogICAgPC9kaXY+CiAgPC9saT4KICAgICAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7cmVzdHJpY3RfYnlfaXBfbGlzdH0gPHNwYW4gY2xhc3M9InNtYWxsIj5yZXN0cmljdHMgYWNjZXNzIGJ5IElQIGFkZHJlc3MuIDxzcGFuIHN0eWxlPSJjb2xvcjpncmVlbiI+KG5ldyk8L3NwYW4+PC9zcGFuPjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPiA8cD5BIHNtYXJ0eSBwbHVnaW4gdXNlZCB0byByZXN0cmljdCBhY2Nlc3MgYnkgYSBzaW5nbGUgSVAgYWRkcmVzcyBvciBhIGxpc3Qgb2YgdGhlbSBiZSBpdCBJUFY0IG9yIElQVjYuIFRocm93cyBhIDxiPkNtc0Vycm9yNDAzRXhjZXB0aW9uPC9iPiBleGNlcHRpb24gd2hpY2ggd2lsbCByZWRpcmVjdCB0byBhIENNU01TIGN1c3RvbSBwYWdlIGlmIHNldCwgb3IgYSBob3N0IGN1c3RvbSBwYWdlIGlmIG5vdC4gQ2FuIGJlIHVzZWQgb24gYSB0ZW1wbGF0ZSBvciBvbiBhIHBhZ2UuPC9wPgogICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICA8dWw+CiAgICAgICA8bGk+PGI+bGlzdDwvYj4gLSAoc3RyaW5nIG9yIGFycmF5KSBBbiBhcnJheSBvZiBJUCBhZGRyZXNzZXMgb3IgYSBzaW5nbGUgSVAgYWRkcmVzcy48L2xpPgogICAgICA8L3VsPgogICAgPC9kaXY+CiAgPC9saT4KICA8L3VsPgogIDxoMz5UYWIgRnVuY3Rpb25zOjwvaDM+CiAgPHAgc3R5bGU9ImNvbG9yOiByZWQ7Ij5EZXByZWNhdGVkISBUaGUgY29yZSBub3cgaGFzIHRoZSBmdW5jdGlvbmFsaXR5IGJ1aWx0IGluLjwvcD4KICA8cD5UaGlzIG1vZHVsZSBwcm92aWRlcyBzb21lIHNtYXJ0eSBwbHVnaW5zIHRvIGFzc2lzdCBpbiBidWlsZGluZyB0YWJiZWQgb3V0cHV0IGluIGFkbWluIHNpZGUgdGVtcGxhdGVzLiAgVGhpcyBhaWRzIGluIGZ1cnRoZXIgc2VwYXJhdGluZyB0aGUgZGlzcGxheSBpc3N1ZXMgZnJvbSBsb2dpYyBpc3N1ZXMuPC9wPgogIDxoND5FeGFtcGxlOjwvaDQ+CiAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICZsYnJhY2U7eHRfc3RhcnRfdGFic30KICAmbGJyYWNlO3h0X3RhYmhlYWRlciBuYW1lPSd0YWIxJyBsYWJlbD0nVGFiIE9uZSd9CiAgJmxicmFjZTt4dF90YWJoZWFkZXIgbmFtZT0ndGFiMicgbGFiZWw9J1RhYiBUd28nfQogICZsYnJhY2U7eHRfdGFiY29udGVudF9zdGFydCBuYW1lPSd0YWIxJ30KICAgICZsdDtwJmd0O0NvbnRlbnQgZm9yIHRhYiBvbmUmbHQ7L3AmZ3Q7CiAgJmxicmFjZTt4dF90YWJjb250ZW50X2VuZH0mbGJyYWNlOyogbm90IG5lY2Vzc2FyeSwgYnV0IHByb3ZpZGVkIGZvciBjb21wbGV0ZW5lc3MgKn0KICAmbGJyYWNlO3h0X3RhYmNvbnRlbnRfc3RhcnQgbmFtZT0ndGFiMid9CiAgICAmbHQ7cCZndDtDb250ZW50IGZvciB0YWIgdHdvJmx0Oy9wJmd0OwogICZsYnJhY2U7eHRfZW5kX3RhYnN9PC9wcmU+CiAgPHVsIGNsYXNzPSJhY2NvcmRpb24tbGlzdCI+CgogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X3N0YXJ0X3RhYnN9IDxzcGFuIGNsYXNzPSJzbWFsbCI+SW5kaWNhdGVzIHRoZSBzdGFydCBvZiB0YWJiZWQgb3V0cHV0PC9zcGFuPjwvaDM+CjxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+IDxwPkFuIGFkbWluIG9ubHkgc21hcnR5IHBsdWdpbiB1c2VmdWwgaW4gYWRtaW4gdGFicyB0byBpbmRpY2F0ZSB0aGUgc3RhcnQgb2YgdGFiYmVkIG91dHB1dC4gIFNlZSB0aGUgYnJpZWYgZGVtbyBhYm92ZS48L3A+CiAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgPHVsPgogICAgICAgPGxpPjxiPmFzc2lnbjwvYj4gLSAoc3RyaW5nKSBBc3NpZ24gdGhlIG91dHB1dCBvZiB0aGlzIHBsdWdpbiB0byB0aGUgbmFtZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+CiAgICAgPC91bD4KICAgIDwvZGl2PjwvbGk+CiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfdGFiaGVhZGVyIG5hbWU9c3RyaW5nfSA8c3BhbiBjbGFzcz0ic21hbGwiPkluZGljYXRlcyB0aGUgc3RhcnQgb2YgYSB0YWIgaGVhZGVyPC9zcGFuPjwvaDM+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPgogICAgICAgPHA+QW4gYWRtaW4gb25seSBzbWFydHkgcGx1Z2luIHVzZWQgdG8gZGVub3RlIHRoZSBzdGFydCBvZiBhIHRhYiBoZWFkZXIuICBTZWUgdGhlIGJyaWVmIGRlbW8gYWJvdmUuPC9wPgogICAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgICA8dWw+CiAgICAgICAgIDxsaT48Yj5uYW1lPC9iPiAtIChzdHJpbmcpIFRoZSBuYW1lIGZvciB0aGUgdGFiLiAgVGhpcyBzaG91bGQgYmUgYWxsIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCBvciB1bmRlcnNjb3JlLjwvbGk+CiAgICAgICAgIDxsaT48Yj5sYWJlbDwvYj4gLSAoc3RyaW5nKSBUaGUgaHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIHRoaXMgdGFiLjwvbGk+CiAgICAgICAgIDxsaT48Yj5hc3NpZ248L2I+IC0gKHN0cmluZykgQXNzaWduIHRoZSBvdXRwdXQgb2YgdGhpcyBwbHVnaW4gdG8gdGhlIG5hbWVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPgogICAgICAgIDwvdWw+CiAgICA8L2Rpdj4KICA8L2xpPgogICAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfdGFiY29udGVudF9zdGFydH0gPHNwYW4gY2xhc3M9InNtYWxsIj5JbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIGEgdGFiIGNvbnRlbnQ8L3NwYW4+PC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+CiAgICAgPHA+QW4gYWRtaW4gb25seSBzbWFydHkgcGx1Z2luIHVzZWQgdG8gZGVub3RlIHRoZSBzdGFydCBvZiBhIHRhYiBjb250ZW50LiAgU2VlIHRoZSBkZW1vIGFib3ZlLjwvcD4KICAgICA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoZSBvcmRlciBvZiB0aGUgdGFiY29udGVudHMgbXVzdCBtYXRjaCBleGFjdGx5IHRoZSBvcmRlciBvZiB0aGUgdGFiIGhlYWRlcnMgc3BlY2lmaWVkLiAgQWRkaXRpb25hbGx5LCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGRlbm90ZSB0aGUgZW5kaW5nIG9mIHRoZSB0YWIgaGVhZGVycywgYXMgdGhpcyBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBmaXJzdCBjYWxsIHRvICZsYnJhY2U7eHRfdGFiY29udGVudF9zdGFydH0uPC9wPgogICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgICA8dWw+CiAgICAgICA8bGk+PGI+bmFtZTwvYj4gLSAoc3RyaW5nKSBUaGUgbmFtZSBmb3IgdGhlIHRhYi4gIFRoaXMgc2hvdWxkIGJlIGFsbCBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgb3IgdW5kZXJzY29yZS48L2xpPgogICAgICAgPGxpPjxiPmFzc2lnbjwvYj4gLSAoc3RyaW5nKSBBc3NpZ24gdGhlIG91dHB1dCBvZiB0aGlzIHBsdWdpbiB0byB0aGUgbmFtZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+CiAgICAgIDwvdWw+CiAgICA8L2Rpdj4KICA8L2xpPgogICAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfdGFiY29udGVudF9lbmR9IDxzcGFuIGNsYXNzPSJzbWFsbCI+SW5kaWNhdGVzIHRoZSBlbmQgb2YgYSB0YWIgY29udGVudDwvc3Bhbj48L2gzPgogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4KICAgICA8cD5BbiBhZG1pbiBvbmx5IHNtYXJ0eSBwbHVnaW4gdXNlZCB0byBkZW5vdGUgdGhlIGVuZCBvZiBhIHRhYnMgY29udGVudC4gIFNlZSB0aGUgZGVtbyBhYm92ZS48L3A+CiAgICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiAgSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjYWxsIHRoaXMgcGx1Z2luIGZvciBlYWNoIHRhYiwgYXMgaXQgaXMgZG9uZSBpbXBsaWNpdGx5IGJ5IHRoZSBjYWxsIHRvICZsYnJhY2U7eHRfdGFiY29udGVudF9zdGFydH0gb3IgJmxicmFjZTt4dF9lbmRfdGFic30uPC9wPgogICAgIDxwPlBhcmFtZXRlcnM6PC9wPgogICAgIDx1bD4KICAgICAgIDxsaT48Yj5hc3NpZ248L2I+IC0gKHN0cmluZykgQXNzaWduIHRoZSBvdXRwdXQgb2YgdGhpcyBwbHVnaW4gdG8gdGhlIG5hbWVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPgogICAgIDwvdWw+CiAgPC9kaXY+CiAgPC9saT4KICAgIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+CiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X2VuZF90YWJzfSA8c3BhbiBjbGFzcz0ic21hbGwiPkluZGljYXRlcyB0aGUgZW5kIG9mIHRhYmJlZCBvdXRwdXQ8L3NwYW4+PC9oMz4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+IDxwPkFuIGFkbWluIG9ubHkgc21hcnR5IHBsdWdpbiB1c2VkIHRvIGRlbm90ZSB0aGUgZW5kIG9mIHRhYmJlZCBvdXRwdXQuLi4gIFNlZSB0aGUgZGVtbyBhYm92ZS48L3A+CiAgICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICAgIDx1bD4KICAgICAgIDxsaT48Yj5hc3NpZ248L2I+IC0gKHN0cmluZykgQXNzaWduIHRoZSBvdXRwdXQgb2YgdGhpcyBwbHVnaW4gdG8gdGhlIG5hbWVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPgogICAgICA8L3VsPgogICAgPC9kaXY+CiAgPC9saT4KPC91bD4gIDwvZGl2PgogIDxkaXYgaWQ9InNtYXJ0eV9yZXNvdXJjZXNfYyI+CiAgICA8aDM+U21hcnR5IFJlc291cmNlczwvaDM+CjxwPkNNU01TRXh0IHByb3ZpZGVzIHRoZSA8Y29kZT54dF9tb2RmaWxlPC9jb2RlPiBzbWFydHkgcmVzb3VyY2UuICBUaGlzIGlzIGEgc3BlY2lhbCByZXNvdXJjZSwgc2ltaWxhciB0byB0aGUgQ01TTVMgY29yZSByZXNvdXJjZSBjYWxsZWQgPGNvZGU+bW9kdWxlX2ZpbGVfdHBsPC9jb2RlPiBleGNlcHQgdGhhdCBpdCBkb2VzIE5PVCBzZWFyY2ggdGhlIG1vZHVsZV9jdXN0b20gZGlyZWN0b3J5IGZvciBtb2R1bGUgdGVtcGxhdGVzLjwvcD4KPHA+VGhpcyByZXNvdXJjZSBpcyB1c2VmdWwgd2hlbiB3YW50aW5nIHRvIHByZXBlbmQgb3IgYXBwZW5kIGNvbnRlbnQgdG8gYSBzdGFuZGFyZCBtb2R1bGUgdGVtcGxhdGUuPC9wPgo8cD5JbnN0cnVjdGlvbnM6PC9wPgo8dWw+CiAgIDxsaT5DcmVhdGUgdGhlIGFwcHJvcHJpYXRlIG1vZHVsZV9jdXN0b20gZGlyZWN0b3J5IGZvciB0aGUgbW9kdWxlIHRoYXQgaGFzIHRoZSB0ZW1wbGF0ZSB5b3Ugd2FudCB0byBlbmhhbmNlCiAgICA8cD48cHJlPjxjb2RlPm1rZGlyIC1wIGFzc2V0cy9tb2R1bGVfY3VzdG9tLyZsdDttb2R1bGVfbmFtZSZndDsvdGVtcGxhdGVzPC9jb2RlPjwvcHJlPjwvcD4KICAgPC9saT4KICAgPGxpPkNyZWF0ZSBhIG5ldyBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZmlsZSB5b3Ugd2FudCB0byBlbmhhbmNlLgogICAgICAgPHA+SW4gdGhhdCBmaWxlIGFkZCB0aGUgY29kZSB0aGF0IHlvdSB3YW50LCBhbmQgaW5jbHVkZSB0aGUgcHJpbWFyeSBmaWxlIHVzaW5nIHRoZSA8Y29kZT54dF9tb2RmaWxlPC9jb2RlPiByZXNvdXJjZS4gaS5lLjo8L3A+CiAgICAgICA8cHJlPjxjb2RlPiZsdDtzdHlsZSZndDsKdGFibGUgdGJvZHkgdHIuZXZlbiB0ZCAmbGJyYWNlOwogICBjb2xvcjogZ3JlZW47Cn0KJmx0Oy9zdHlsZSZndDsKJmxicmFjZTtpbmNsdWRlIGZpbGU9J3h0X21vZGZpbGU6Jmx0O21vZHVsZV9uYW1lJmd0Ozt1c2VybGlzdC50cGwnfQogICAgICAgPC9jb2RlPjwvcHJlPgogICA8L2xpPgo8L3VsPiAgPC9kaXY+CiAgPGRpdiBpZD0iZHluX2Nzc19qc19jIj4KICAgIDxoMz5EeW5hbWljIENTUyBhbmQgSmF2YXNjcmlwdDwvaDM+CjxwPkZyZXF1ZW50bHkgd2hlbiBkb2luZyBzaXRlIGRlc2lnbiwgc29tZSBqYXZhc2NyaXB0IHBsdWdpbnMgYW5kIGN1c3RvbSBjc3MgYXJlIG5lZWRlZCBleHBsaWNpdGlseSBmb3IgYSBzaW5nbGUgcGFnZSwgb3IgYSBzaW5nbGUgZm9ybS4gIFlvdSBvZnRlbiBuZWVkIHRvIGluY2x1ZGUgc29tZSBqYXZhc2NyaXB0IGNvZGUgdGhhdCBpcyB1bmlxdWUgdG8gdGhhdCBwYWdlIG9yIGZvcm0gdG8gaW5pdGlhbGl6ZSBvciBhY3RpdmF0ZSBqcXVlcnkgcGx1Z2lucy4gICBOZXh0IHlvdSBtYXkgbmVlZCB0byBhZGQgc29tZSBzcGVjaWZpYyBjc3Mgc3R5bGVzIHRoYXQgd2lsbCBvbmx5IGJlIHVzZWQgb24gdGhpcyBwYWdlIG9yIGZvciB0aGlzIGZvcm0uICBJdCB3b3VsZCBiZSBiZXN0IChmb3IgbWFuYWdlbWVudCByZWFzb25zKSBpZiBhbGwgb2YgdGhhdCBjb2RlIChyZXF1ZXN0aW5nIHRoZSBqYXZhc2NyaXB0IGxpYnJhcmllcywgaW5jbHVkaW5nIGV4dHJhIGphdmFzY3JpcHQgYW5kL29yIGNzcykgY291bGQgYmUgbWFpbnRhaW5lZCBmcm9tIHdpdGhpbiB0aGUgc2luZ2xlIHRlbXBsYXRlIHdoZXJlIGl0IHdpbGwgYmUgdXNlZC4gICBIb3dldmVyLCBpbmNsdWRpbmcgamF2YXNjcmlwdCBpbmxpbmUgY2FuIGltcGVkZSBwZXJmb3JtYW5jZSwgaXQgaXMgYmFkIGZvcm0gdG8gaW5jbHVkZSBqYXZhc2NyaXB0IGxpYnJhcmllcyBmcm9tIHdpdGhpbiB0aGUgKG1pZGRsZSkgb2YgdGhlIGh0bWwgcGFnZSwgYW5kIGl0IGlzIGJhZCBmb3JtIGFuZCBwcm9ibGVtYXRpYyB0byBlbWJlZCBpbmxpbmUgc3R5bGVzaGVldHMgaW50byBodG1sIG91dHB1dC4gVGhlIENNU01TRXh0IG1vZHVsZSA8ZW0+KHYgMS4zOSspPC9lbT4gSW50cm9kdWNlcyBhIGZldyBuZXcgdGFncyB0byBhbGxvdyBpbnNlcnRpbmcgamF2YXNjcmlwdCBhbmQgc3R5bGVzaGVldHMgaW4gYSAmcXVvdDtyZWFzb25hYmx5JnF1b3Q7IGNhY2hlIGVmZmljaWVudCwgYW5kIGNvbnZlbmllbnQgdG8gdXNlIG1lY2hhbmlzbS48L3A+Cgo8cD5UaGUgQ01TTVNFeHQgcGx1Z2lucyAmbGJyYWNlO3h0anNfcmVxdWlyZX0sICZsYnJhY2U7eHRqc19hZGR9LCAmbGJyYWNlO3h0Y3NzX2FkZH0gYW5kICZsYnJhY2U7eHRqc19yZW5kZXJ9IGFsbG93IHF1ZWluZyBqYXZhc2NyaXB0IGxpYnJhcmllcyAod2l0aCB0aGVpciBkZXBlbmRlbmNpZXMpLCBzaW5nbGUgamF2YXNjcmlwdCBhbmQgY3NzIGZpbGVzLCBhbmQgaW5saW5lIGNzcyBhbmQganMgaW50byBzaW5nbGUgbWluaWZpZWQgdXJscyAob25lIGZvciBqYXZhc2NyaXB0LCBhbmQgb25lIGZvciBjc3MpLiAgVGhpcyBhaWRlcyBpbiBwZXJmb3JtYW5jZSAoYXMgbXVsdGlwbGUgamF2YXNjcmlwdCBhbmQgY3NzIGZpbGVzIGFyZSBjb25jYXRlbmF0ZWQgYW5kIG1pbmlmaWVkKSwga2VlcHMgYWxsIHJlbGV2YW50IGNvZGUgKHNtYXJ0eS4gamF2YXNjcmlwdCwgYW5kIGNzcykgdG9nZXRoZXIsIGFuZCBlbGltaW5hdGVzIHRoZSBpc3N1ZWVzIG9mIGlubGluZSBjb2RlLjwvcD4KCjxoND5KYXZhc2NyaXB0IExpYnJhcmllczwvaDQ+CjxwPk51bWVyb3VzIENNU01TRXh0IGRlcml2ZWQgbW9kdWxlcyAoTUFNUywgTUFNU1JlZ2lzdHJhdGlvbiwgZXRjKSBzaGFyZSB2YXJpb3VzIGphdmFzY3JpcHQgbGlicmFyaWVzLiBSZXF1aXJpbmcgdGhhdCB0aGVzZSBsaWJyYXJpZXMgYmUgaW5jbHVkZWQgaW4geW91ciBvdXRwdXQgaHRtbCBjb2RlIGlzIGFzIHNpbXBsZSBhcyB1c2luZyB0aGUgPGNvZGU+JmxicmFjZTt4dGpzX3JlcXVpcmUgbGliPSZsdDtsaWJuYW1lJmd0O308L2NvZGU+IHRhZyBpbiB0aGUgcmVsYXZlbnQgdGVtcGxhdGUuPC9wPgoKPGg0PlJlbmRlcmluZyBPdXRwdXQ8L2g0Pgo8cD5UaGUgPGNvZGU+JmxicmFjZTt4dGpzX3JlbmRlcn08L2NvZGU+IHRhZyB3aWxsIG9wZW4gYWxsIHJlcXVpcmVkIGxpYnJhcmllcyA8ZW0+KGFuZCB0aGVpciBkZXBlbmRlbmNpZXMpPC9lbT4sIGFsbCByZXF1aXJlZCBqYXZhc2NyaXB0IGFuZCBjc3MgZmlsZXMsIGFuZCBhbGwgaW5saW5lIGphdmFzY3JpcHQgYW5kIGNzcyBmaWxlcywgY29uY2F0ZW5hdGUgdGhlbSBpbnRvIGEgc2luZ2xlIGphdmFzY3JpcHQgZmlsZSwgYW5kIGEgc2luZ2xlIGNzcyBmaWxlLiAgRWFjaCB1bmlxdWUgY29tYmluYXRpb24gb2YgcmVxdWVzdGVkIGxpYnJhcmllcywgamF2YXNjcmlwdCwgYW5kIGNzcyBmaWxlcywgYW5kIGlubGluZWQgY29kZSBpcyBoYXNoZWQgaW50byBhIHNpbmdsZSAnc2lnbmF0dXJlJywgd2hpY2ggaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG91dHB1dCBqYXZhc2NyaXB0IGFuZCBjc3MgZmlsZW5hbWVzLiAgVGhlIHRhZyB3aWxsIHRoZW4gY29uY2F0ZW5hdGUgYWxsIG9mIHRoZSBqYXZhc2NyaXB0LCBtaW5pZnkgaXQsIGFuZCBvdXRwdXQgdG8gYSBzaW5nbGUgamF2YXNjcmlwdCBmaWxlLiAgU2ltaWxhcmx5IGNzcyBpcyBvdXRwdXQgdG8gYSBzaW5nbGUgbWluaW1pemVkIGNzcyBmaWxlLiAgIFRvIGltcHJvdmUgc2VydmVyIHNpZGUgcGVyZm9ybWFuY2UsIHRoZSByZW5kZXIgZnVuY3Rpb25hbGl0eSB3aWxsIG5vdCByZXNvbHZlIGRlcGVuZGVuY2llcywgb3IgZ2VuZXJhdGUgdGhlIHJlc3VsdGluZyBqYXZhc2NyaXB0IGFuZCBjc3MgZmlsZXMgaWYgdGhlIG91dHB1dCBmaWxlcyBhbHJlYWR5IGV4aXN0ICh1bmxlc3MgdGhleSBhcmUgb2xkZXIgdGhhbiB0aGUgcHJlc2V0IGV4cGlyeSBhZ2UpLjwvcD4KPHA+VGhlIDxjb2RlPiZsYnJhY2U7eHRqc19yZW5kZXJ9PC9jb2RlPiB0YWcgc2hvdWxkICh0eXBpY2FsbHkpIGJlIHB1dCBqdXN0IGJlZm9yZSB0aGUgZW5kIG9mIHRoZSAmbHQ7aGVhZCZndDsgc2VjdGlvbiBvZiB0aGUgcGFnZSB0ZW1wbGF0ZS4gVGhpcyBpcyBiZWNhdXNlIGl0IHJlbmRlcnMgamF2YXNjcmlwdCBhbmQgc3R5bGVzaGVldHMuPC9wPgoKPGg0PkFkbWluIFRlbXBsYXRlczwvaDQ+CjxwPlRoZSA8Y29kZT54dF9qc2xvYWRlcjo6cmVuZGVyKCk8L2NvZGU+IGZ1bmN0aW9uIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGZvciBlYWNoIENNU01TRXh0IGRlcml2ZWQgYWRtaW4gYWN0aW9uLiAgVGhpcyBtZWFucyB0aGF0IHRoZSAmbGJyYWNlO3h0anNfcmVxdWlyZX0sICZsYnJhY2U7eHRqc19hZGR9IGFuZCAmbGJyYWNlO3h0Y3NzX2FkZH0gcGx1Z2lucyBjYW4gYWxsIGJlIHVzZWQgZnJvbSB3aXRoaW4gYWN0aW9uIHRlbXBsYXRlcyBmb3IgQ01TTVNFeHQgZGVyaXZlZCBtb2R1bGVzLjwvcD4KCjxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gSW4gYWRtaW4gcmVxdWVzdHMsIGJlY2F1c2UgdGhlIENNU01TIHN0YW5kYXJkIE9uZUVsZXZlbiBhZG1pbiB0aGVtZSBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBqcXVlcnksIGFuZCBqcXVlcnkgdWkgcGx1Z2lucywgdGhlc2UgcGx1Z2lucyBhcmUgYXV0b21hdGljYWxseSBleGNsdWRlZCBmcm9tIHJlbmRlcmVkIG91dHB1dC48L3A+ICA8L2Rpdj4KICA8ZGl2IGlkPSJob29rc19jIj4KICAgIDxoMz5Ib29rczwvaDM+CjxwPlRoaXMgbW9kdWxlIGVtaXRzIHNldmVyYWwgZGlmZmVyZW50IGhvb2tzOjwvcD4KPHVsPgogICAgPGxpPkNNU01TRXh0OjpIb3VybHlUYXNrCgk8cD5UaGlzIGhvb2sgaXMgc2VudCBhdCBhIG1heGltdW0gb2Ygb25jZSBwZXIgaG91ci4gIEl0IGNhbiBiZSB1c2VkIGJ5IHRoaXJkIHBhcnR5IGNvZGUgdG8gZXhlY3V0ZSBjb2RlIHJvdWdobHkgb25jZSBwZXIgaG91ci48L3A+Cgk8cD5UaGlzIGhvb2sgaXMgc2VudCBmcm9tIGEgQ01TTVMgQ3JvbiBqb2IgdGhhdCBpcyByZXF1ZXN0IGJhc2VkLiAgU28gaWYgbm8gcmVxdWVzdHMgYXJlIGNvbWluZyB0byB5b3VyIGFwcGxpY2F0aW9uLCBvciB5b3VyIGNyb24gam9iIHNldHRpbmdzIGFyZSBkaWZmZXJlbnQgdGhhbiB0aGUgZGVmYXVsdCwgdGhpcyBob29rIG1heSBub3QgYmUgdHJpZ2dlcmVkIHJlZ3VsYXJseS4gIEFkZGl0aW9uYWxseSwgeW91IGNhbm5vdCBjb3VudCBvbiB0aGUgaG9vayBiZWluZyBleGVjdXRlZCBleGFjdGx5IGV2ZXJ5IHNpeHR5IG1pbnV0ZXMuPC9wPgogICAgPC9saT4KICAgIDxsaT5DTVNNU0V4dDo6RGFpbHlUYXNrCiAgICAgICAgPHA+VGhpcyBob29rIGlzIHNlbnQgYXQgYSBtYXhpbXVtIG9mIG9uY2UgcGVyIGRheS4gIEl0IGNhbiBiZSB1c2VkIGJ5IHRoaXJkIHBhcnR5IGNvZGUgdG8gZXhlY3V0ZSBjb2RlIHJvdWdobHkgb25jZSBwZXIgZGF5LjwvcD4KCTxwPlRoaXMgaG9vayBpcyBzZW50IGZyb20gYSBDTVNNUyBDcm9uIGpvYiB0aGF0IGlzIHJlcXVlc3QgYmFzZWQuICBTbyBpZiBubyByZXF1ZXN0cyBhcmUgY29taW5nIHRvIHlvdXIgYXBwbGljYXRpb24sIG9yIHlvdXIgY3JvbiBqb2Igc2V0dGluZ3MgYXJlIGRpZmZlcmVudCB0aGFuIHRoZSBkZWZhdWx0LCB0aGlzIGhvb2sgbWF5IG5vdCBiZSB0cmlnZ2VyZWQgcmVndWxhcmx5LiAgQWRkaXRpb25hbGx5LCB5b3UgY2Fubm90IGNvdW50IG9uIHRoZSBob29rIGJlaW5nIGV4ZWN1dGVkIGV4YWN0bHkgZXZlcnkgdHdlbnR5IGZvdXIgaG91cnMuPC9wPgogICAgPC9saT4KPC91bD4gIDwvZGl2PgogIDxkaXYgaWQ9Im1pc2NfYyI+CiAgICA8aDQ+Q29uZmlnIFZhcmlhYmxlczwvaDQ+Cgo8ZGl2IGNsYXNzPSJpbmZvcm1hdGlvbiI+CiAgPHA+PGI+Tm90ZTo8L2I+IG9uIGluc3RhbGwgPGI+Q01TTVNFeHQ8L2I+IGNvcGllcyBleGlzdGluZyA8Yj5jb25maWcucGhwPC9iPiBlbnRyaWVzIGZyb20gPGI+Q0dFeHRlbnNpb25zPC9iPiB0byBhIDxiPmNvbmZpZy5pbmM8L2I+IHNpdHVhdGVkIG9uIGl0cyA8Yj5kYXRhPC9iPiBmb2xkZXIuPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPgogIDxwPjxiPk5vdGU6PC9iPiBpbiB0aGUgZnV0dXJlIHRoZXNlIHNldHRpbmdzIHdpbGwgYmUgYWxzbyBhY2Nlc3NpYmxlIHZpYSB0aGlzIG1vZHVsZSBzZXR0aW5ncyBwYWdlIGV4Y2VwdCBmb3IgPGI+ZGVwcmVjYXRlZCBzZXR0aW5nczwvYj4sIDxiPnJhcmVseSB1c2VkIHNldHRpbmdzPC9iPiwgb3IgPGI+Y3JpdGljYWwgc2V0dGluZ3M8L2I+IHRoYXQgc2hvdWxkIG5vdCBiZSBlYXNpbHkgYWNjZXNzaWJsZS48L3A+CjwvZGl2PgoKPHA+VGhpcyBmdW5jdGlvbmFsaXR5IGxpc3RlbnMgdG8gYSBmZXcgZGlmZmVyZW50IDxlbT4ob3B0aW9uYWwpPC9lbT4gdmFyaWFibGVzIGluIHRoZSA8Yj5jb25maWcuaW5jPC9iPiBmaWxlOjwvcD4KPHVsPgogIDxsaT48Y29kZT4kY29uZmlnWyd4dF9wcmV0dHlodG1sJ108L2NvZGU+ID0gKGJvb2w6ZmFsc2UpCiAgICA8cD5BIGZsYWcgaW5kaWNhdGluZyB3ZXRoZXIgdG8gcHJldHRpZnkgdGhlIEhUTUwgb3V0cHV0IGFmdGVyIHJlbmRlcmluZy4gIE5vdGU6ICBUaGUgaGVhZCBzZWN0aW9uIGlzIG5vdCBmb3JtYXR0ZWQuPC9wPgogIDwvbGk+CiAgPGxpPjxjb2RlPiRjb25maWdbJ3h0X21pbmh0bWwnXTwvY29kZT4gPSAoYm9vbDpmYWxzZSkKICAgIDxwPkEgZmxhZyBpbmRpY2F0aW5nIHdldGhlciB0byBtaW5pZnkgdGhlIEhUTUwgb3V0cHV0IGFmdGVyIHJlbmRlcmluZy4gICBJZiBib3RoIHh0X3ByZXR0eWh0bWwgYW5kIHh0X21pbmh0bWwgYXJlIHNwZWNpZmllZCwgeHRfcHJldHR5aHRtbCB3aWxsIGhhdmUgcHJlY2VkZW5jZS48L3A+CiAgPC9saT4KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHRqc19jYWNoZWxpZmUnXTwvY29kZT4gPSAoaW50OjI0KQogICAgPHA+VGhlIG51bWJlciBvZiBob3VycyB0aGF0IGVhY2ggc2lnbmF0dXJlIGpzIGFuZC9vciBjc3MgZmlsZSBzaG91bGQgYmUgY2FjaGVkIGZvciwgYmVmb3JlIGJlaW5nIHJlZ2VuZXJhdGVkLiAgVGhlIGRlZmF1bHQgaXMgMjQgaG91cnMuPC9wPgogIDwvbGk+CiAgPGxpPjxjb2RlPiRjb25maWdbJ3h0anNfbm9jYWNoZSddPC9jb2RlPiA9IChib29sOmZhbHNlKQogICAgPHA+VGhpcyBjb25maWcgZW50cnksIGlmIHNldCwgYW5kIHRydWUgZXhwbGljaXRseSBkaXNhYmxlcyBjYWNoaW5nLiAgVGhlIGNvbWJpbmVkIGNzcyBhbmQganMgZmlsZXMgd2lsbCBiZSByZWdlbmVyYXRlZCBmb3IgZWFjaCByZXF1ZXN0LjwvcD4KICA8L2xpPgogIDxsaT48Y29kZT4kY29uZmlnWyd4dGpzX25vbWluaWZ5J108L2NvZGU+ID0gKGJvb2w6ZmFsc2UpCiAgICA8cD5UaGlzIGNvbmZpZyBlbnRyeSwgaWYgc2V0LCBhbmQgdHJ1ZSBleHBsaWNpdGx5IGRpc2FibGVzIG1pbmlmeWluZyBvZiBqYXZhc2NyaXB0IG9yIENTUyBjb2RlLCBpbmRlcGVuZGVudCBvZiBvdGhlciBwYXJhbXMgb3IgZmxhZ3MuPC9wPgogIDwvbGk+CiAgPGxpPjxjb2RlPiRjb25maWdbJ2RldmVsb3Blcl9tb2RlJ108L2NvZGU+ID0gKGJvb2w6ZmFsc2UpCiAgICA8cD5UaGlzIGNvbmZpZyBlbnRyeSwgaWYgc2V0LCBhbmQgdHJ1ZSBleHBsaWNpdGx5IGRpc2FibGVzIHRoZSBiZWhhdmlvciBvZiB0aGUgJmxicmFjZTt4dF9jYWNoZX0gYW5kICZsYnJhY2U7eHRfY2FjaGVfYmxvY2t9IHBsdWdpbnMuPC9wPgogIDwvbGk+CiAgPGxpPjxjb2RlPiRjb25maWdbJ3h0X3JlbGF4X3NxbCddPC9jb2RlPiA9IChib29sOmZhbHNlKQogICAgPHA+VGhpcyBjb25maWcgZW50cnksIGlmIHNldCwgYW5kIHRydWUgYXR0ZW1wdHMgdG8gc2V0IHRoZSBteXNxbCBzcWxfbW9kZSB0byBUUkFESVRJT05BTCB0byBmaXggc29tZSBlcnJvcnMgY3JvcHBpbmcgdXAgaW4gcXVlcmllcyBmb3IgdXNlcnMgcnVubmluZyBteXNxbCA1LjcrPC9wPgogIDwvbGk+CiAgPGxpPjxjb2RlPiRjb25maWdbJ3h0X2lnbm9yZV9jc3JmJ108L2NvZGU+ID0gKGJvb2w6ZmFsc2UpCiAgICAgPHA+VGhpcyBjb25maWcgZW50cnksIGlmIHNldCBhbmQgdHJ1ZSBpbmRpY2F0ZXMgdGhhdCBDU1JGIHRva2VucyBzZXQgYnkgdGhlICZsYnJhY2U7eHRfZm9ybV9jc3JmfSB0YWcgc2hvdWxkIGJlIGlnbm9yZWQuICBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZC48L3A+CiAgPC9saT4KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHRfdXBsb2FkX2FsbG93ZWRfZmlsZXR5cGVzJ108L2NvZGU+ID0gKHN0cmluZykKICAgICA8cD5UaGlzIGNvbmZpZyBlbnRyeSwgaWYgc2V0IGluZGljYXRlcyBhIGxpc3Qgb2YgZmlsZSB0eXBlcyB0aGF0IGNhbiBiZSB1cGxvYWRlZCBieSBtb2R1bGVzIHRoYXQgdXNlIHRoZSB4dF9maWxldXBsb2FkIGZ1bmN0aW9uYWxpdHkuICBJZiBub3Qgc3BlY2lmaWVkIG5vIGZpbHRlcmluZyBpcyBkb25lLjwvcD4KICAgICA8cD5UaGlzIGNvbmZpZyBlbnRyeSwgaWYgc3BlY2lmaWVkIHNob3VsZCBjb250YWluIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZSBleHRlbnNpb25zIChjYXNlIGluc2Vuc2l0aXZlKS48L3A+CiAgPC9saT4KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHRfaW1hZ2VleHRlbnNpb25zJ108L2NvZGU+ID0gKHN0cmluZzpqcGcsanBlZyxwbmcpCiAgPC9saT4KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHRfYWxsb3dfd2F0ZXJtYXJraW5nJ108L2NvZGU+ID0gKGJvb2w6ZmFsc2UpCiAgPC9saT4KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHRfd2F0ZXJtYXJrX3RleHQnXTwvY29kZT4gPSAoc3RyaW5nOkNNU01TIFNJVEUgTkFNRSkKICA8L2xpPgogIDxsaT48Y29kZT4kY29uZmlnWyd4dF93YXRlcm1hcmtfdGV4dHNpemUnXTwvY29kZT4gPSAoaW50OjEyKQogIDwvbGk+CiAgPGxpPjxjb2RlPiRjb25maWdbJ3h0X3dhdGVybWFya19hbmdsZSddPC9jb2RlPiA9IChpbnQ6MCkKICA8L2xpPgogIDxsaT48Y29kZT4kY29uZmlnWyd4dF93YXRlcm1hcmtfZm9udCddPC9jb2RlPiA9IChzdHJpbmc6QVJJQUwuVFRGKQogIDwvbGk+CiAgPGxpPjxjb2RlPiRjb25maWdbJ3h0X3dhdGVybWFya190ZXh0Y29sb3InXTwvY29kZT4gPSAoc3RyaW5nOiNGRkZGRkYpCiAgPC9saT4KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHRfd2F0ZXJtYXJrX2JnY29sb3InXTwvY29kZT4gPSAoc3RyaW5nOiMwMDAwMDApCiAgPC9saT4KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHRfd2F0ZXJtYXJrX3RyYW5zcGFyZW50J108L2NvZGU+ID0gKGJvb2w6dHJ1ZSkKICA8L2xpPgogIDxsaT48Y29kZT4kY29uZmlnWyd4dF93YXRlcm1hcmtfZmlsZSddPC9jb2RlPiA9IChzdHJpbmc6bnVsbCkKICAgICAgPHA+VGhlIG5hbWUgb2YgYW4gaW1hZ2UgZmlsZSwgcmVsYXRpdmUgdG8gZWl0aGVyIHRoZSB1cGxvYWRzIGRpcmVjdG9yeSBvciB0aGUgYXNzZXRzIHBhdGggdG8gdXNlIHdoZW4gd2F0ZXJtYXJraW5nIGltYWdlcy48L3A+CiAgPC9saT4KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHRfd2F0ZXJtYXJrX2FsaWdubWVudCddPC9jb2RlPiA9IChpbnQ6MCkKICAgICAgPHVsPgogICAgICAgICAgPGxpPjAgPSBVcHBlciBMZWZ0PC9saT4KICAgICAgICAgIDxsaT4xID0gVXBwZXIgQ2VudGVyPC9saT4KICAgICAgICAgIDxsaT4yID0gVXBwZXIgUmlnaHQ8L2xpPgogICAgICAgICAgPGxpPjMgPSBNaWRkbGUgTGVmdDwvbGk+CiAgICAgICAgICA8bGk+NCA9IE1pZGRsZSBDZW50ZXI8L2xpPgogICAgICAgICAgPGxpPjUgPSBNaWRkbGUgUmlnaHQ8L2xpPgogICAgICAgICAgPGxpPjYgPSBMb3dlciBMZWZ0PC9saT4KICAgICAgICAgIDxsaT43ID0gTG93ZXIgQ2VudGVyPC9saT4KICAgICAgICAgIDxsaT44ID0gTG93ZXIgUmlnaHQ8L2xpPgogICAgICA8L3VsPgogIDwvbGk+CiAgPGxpPjxjb2RlPiRjb25maWdbJ3h0X3dhdGVybWFya190cmFuc2x1Y2VuY3knXTwvY29kZT4gPSAoaW50OjEwMCkKICA8L2xpPgogIDxsaT48Y29kZT4kY29uZmlnWyd4dF9hbGxvd19wcmV2aWV3J108L2NvZGU+ID0gKGJvb2w6ZmFsc2UpCiAgPC9saT4KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHRfcHJldmlld19zaXplJ108L2NvZGU+ID0gKGludDo4MDApCiAgPC9saT4KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHRfZGVsZXRlX29yaWdfaW1hZ2UnXTwvY29kZT4gPSAoYm9vbDpmYWxzZSkKICA8L2xpPgogIDxsaT48Y29kZT4kY29uZmlnWyd4dF9hbGxvd190aHVtYm5haWxpbmcnXTwvY29kZT4gPSAoYm9vbDpmYWxzZSkKICA8L2xpPgogIDxsaT48Y29kZT4kY29uZmlnWyd4dF90aHVtYm5haWxfc2l6ZSddPC9jb2RlPiA9IChpbnQ6NzUpCiAgPC9saT4KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHh4eHh4eHh4X2FkbWluc2VjdGlvbiddPC9jb2RlPiA9IChzdHJpbmc6ZXh0ZW5zaW9ucykKICAgICAgPHA+Rm9yIHNvbWUgbW9kdWxlcyBkZXJpdmVkIGZyb20gQ01TTVNFeHQsIENvbmZpZyBlbnRyaWVzIHRoYXQgYmVnaW4gd2l0aCB0aGUgbW9kdWxlIG5hbWUgaW4gbG93ZXJjYXNlLCBhbmQgZm9sbG93ZWQgYnkgX2FkbWluc2VjdGlvbiBhbGxvdwogICAgICAgICBzcGVjaWZ5aW5nIHRoZSBzZWN0aW9uIG9mIHRoZSBhZG1pbiBuYXZpZ2F0aW9uIHRoYXQgdGhlIG1vZHVsZSB3aWxsIGFwcGVhciBpbi4gIFBvc3NpYmxlIHZhbHVlcyBhcmU6IGNvbnRlbnQsIGxheW91dCwgZmlsZXMsIHVzZXJncm91cHMsIGV4dGVuc2lvbnMsIHByZWZlcmVuY2VzLCBzaXRlYWRtaW4sIG15cHJlZnMsIGVjb21tZXJjZS48L3A+CiAgICAgIDxwPmkuZTogPGNvZGU+JGNvbmZpZ1snY2dibG9nX2FkbWluc2VjdGlvbiddID0gJ2NvbnRlbnQnOzwvY29kZT48L3A+CiAgICA8ZGl2IGNsYXNzPSJpbmZvcm1hdGlvbiI+CiAgICAgIDxwPjxiPk5vdGU6PC9iPiB0aGlzIGZ1bmN0aW9uYWxpdHkgZG9lcyBub3Qgd29yayBmb3IgYWxsIG1vZHVsZXMuICBPbmx5IG1vZHVsZXMgdGhhdCB3ZXJlIHVwZGF0ZWQgaW4gdGhlIGxhdGVyIGhhbGYgb2YgMjAxOSBvciBsYXRlci4gT3RoZXIgbW9kdWxlcyBtYXkgaGF2ZSBvdGhlciBtZWFucyBvZiBjaGFuZ2luZyB0aGUgYWRtaW4gc2VjdGlvbi48L3A+CiAgICA8L2Rpdj4KICA8L2xpPgo8L3VsPgoKPGgzPkFkbWluIFN0eWxlczwvaDM+CjxwPlRoaXMgbW9kdWxlLCBhbmQgYWxsIG1vZHVsZXMgZGVyaXZlZCBmcm9tIENNU01TRXh0IHN1cHBvcnQgbG9hZGluZyBhIHNlcGFyYXRlIHN0eWxlc2hlZXQgZm9yIHVzZSBpbiBhZG1pbiByZXF1ZXN0cyBmb3IgdGhhdCBtb2R1bGUuICBUaGlzIGFsbG93cyBhZGp1c3Rpbmcgc3R5bGVzIG9uIGEgcGVyLW1vZHVsZSBiYXNpcyB3aXRoaW4gdGhlIGFkbWluIGNvbnNvbGUuPC9wPgo8cD5UbyB1c2UgdGhpcywgcGxhc2UgYSBmaWxlIG5hbWVkIGFkbWluX3N0eWxlcy5jc3MgaW4gdGhlIDxyb290Pi9tb2R1bGVfY3VzdG9tLzxtb2R1bGVuYW1lPi9jc3MgZGlyZWN0b3J5LCB3aXRoIHRoZSBjc3MgdGhhdCB5b3Ugd2FudCB0byBhZGp1c3Qgb3Igb3ZlcnJpZGUuICBpLmU6ICBmb3IgdGhlIEZyb250RW5kVXNlcnMgbW9kdWxlIHlvdSB3b3VsZDo8L3A+CjxwPjxwcmU+PGNvZGU+bWtkaXIgLXAgbW9kdWxlX2N1c3RvbS9Gcm9udEVuZFVzZXJzL2Nzcwp2aSBtb2R1bGVfY3VzdG9tL0Zyb250RW5kVXNlcnMvY3NzL2FkbWluX3N0eWxlcy5jc3M8L2NvZGU+PC9wcmU+PC9wPgoKPGgzPkVtYWlsIGFuZCBFbWFpbCBUZW1wbGF0ZXM8L2gzPgo8cD5UaGlzIG1vZHVsZSBwcm92aWRlcyBhIHNldCBvZiBjbGFzc2VzIHRvIGFsbG93IHN0b3JpbmcgZW1haWwgdGVtcGxhdGVzLCBhbmQgZGVzdGluYXRpb24gZW1haWwgYWRkcmVzcyBjb25maWd1cmF0aW9ucyBpbiBmaWxlcy4gIFRoaXMgaXMgcGVyZmVjdCBmb3IgYXBwbGljYXRpb25zIHdoZXJlIGFzIG11Y2ggYXMgcG9zc2libGUgc2hvdWxkIGJlIHN0b3JlZCBpbiBmaWxlcyB0byBhbGxvdyBmb3IgcmV2aXNpb24gY29udHJvbCwgYW5kIHRvIGFsbG93IGZvciBlYXNpZXIgbWlncmF0aW9uIGJldHdlZW4gZGV2ZWxvcG1lbnQsIHN0YWdpbmcsIGFuZCBsaXZlIGVudmlyb25tZW50cy48L3A+CjxwPlRoZSBFbWFpbCBBUEkncyBtdXN0IGJlIHV0aWxpemVkIGJ5IG90aGVyIHRoaXJkIHBhcnR5IG1vZHVsZXMgdGhhdCB3aXNoIHRvIHNlbmQgbWFpbHMuPC9wPgo8aDQ+RmlsZSBsb2NhdGlvbjo8L2g0Pgo8cD5UaGUgRW1haWwgZnVuY3Rpb25hbGl0eSBsb29rcyBmb3IgZmlsZXMgZW5kaW5nIHdpdGggLmVtbCBmaXJzdCBpbiB5b3VyIDxjb2RlPiRjb25maWdbJ2Fzc2V0c19wYXRoJ10vZW1haWxzPC9jb2RlPi4gIFdoaWNoIGlzIGJ5IGRlZmF1bHQgPGNvZGU+Jmx0O2Ntc21zIHJvb3QmZ3Q7L2Fzc2V0cy9lbWFpbHM8L2NvZGU+LjwvcD4KPHA+TmV4dCB0aGlzIGZ1bmN0aW9uYWxpdHkgd2lsbCBsb29rIGluIDxjb2RlPiRjb25maWdbJ2Fzc2V0c19wYXRoJ10vbW9kdWxlX2N1c3RvbS8mbHQ7bW9kdWxlIG5hbWUmZ3Q7L2VtYWlsczwvY29kZT4uPC9wPgo8cD5MYXN0bHkgdGhpcyBmdW5jdGlvbmFsaXR5IHdpbGwgbG9vayBmb3IgdGhlIC5lbWwgZmlsZSBpbiB0aGUgbW9kdWxlJ3MgZW1haWwgZGlyZWN0b3J5LCBpbiB0aGUgbW9kdWxlIHNvdXJjZSBkaXJlY3RvcnkuICBZb3Ugc2hvdWxkIG5ldmVyIG1vZGlmeSB0aGVzZSBmaWxlcyBkaXJlY3RseS48L3A+CjxoND5GaWxlIGZvcm1hdDo8L2g0Pgo8cD5UaGUgZmlsZXMgbXVzdCBlbmQgaW4gYSA8Y29kZT4uZW1sPC9jb2RlPiBleHRlbnNpb24sIGFuZCBiZSBBU0NJSSBmaWxlcy4gIFRoZSBmaWxlIGlzIGRpdmlkZWQgaW50byAzIHByaW1hcnkgcGFydHMgc2VwYXJhdGVkIGJ5IGxpbmVzIHN0YXJ0aW5nIHdpdGggYW5kIGVuZGluZyB3aXRoID09PT0uPC9wPgo8dWw+CiAgIDxsaT5UaGUgdG9wIGNvbmZpZ3VyYXRpb24gc2VjdGlvbiAoaW4gaW5pIGZpbGUgZm9ybWF0PC9saT4KICAgPGxpPlRoZSBzbWFydHkgdGVtcGxhdGUgZm9yIHRoZSBlbWFpbCBzdWJqZWN0LjwvbGk+CiAgIDxsaT5UaGUgc21hcnR5IHRlbXBsYXRlIGZvciB0aGUgZW1haWwgYm9keS48L2xpPgo8L3VsPgo8aDQ+RXhhbXBsZTogPGNvZGU+YXNzZXRzL2VtYWlscy9mZXVfb25sb2dpbmZhaWxlZC5lbWw8L2NvZGU+PC9oND4KPHByZT5bZW1haWxdCnRvX2FkbWluX2dyb3Vwcz1BZG1pbgp0b19mZXVfZ3JvdXBzPQp0b19jdXJyZW50X2FkbWluPTAKdG9fY3VycmVudF9mZXU9MAp0b19hZGRyPXNvbWUuZW1haWxAZG9tYWluLmNvbQp0b19hZGRyPWFub3RoZXIuZW1haWxAZG9tYWluLmNvbQo9PT09IHN1YmplY3QgPT09PQpVc2VyIGxvZ2luIGZhaWxlZCBmb3IgJmxicmFjZTskdXNlcm5hbWV9Cgo9PT09IGJvZHkgPT09PQpBIHVzZXIgbG9naW4gYXQgJmxicmFjZTskaXB9IGF0dGVtcHRlZCB0byBsb2dpbiBhdCAmbGJyYWNlO3NpdGVuYW1lfSB3aXRoIHVzZXJuYW1lICZsYnJhY2U7JHVzZXJuYW1lfSBhbmQgZmFpbGVkLgoKPC9wcmU+CjxoND5BY2NlcHRlZCBpbmkga2V5czwvaDQ+Cjx1bD4KICAgIDxsaT48Y29kZT50b19hZG1pbl9ncm91cHM8L2NvZGU+IDogc3RyaW5nIGFycmF5IC0gQW4gYXJyYXkgb2YgYWRtaW4gZ3JvdXAgaWRzIG9yIG5hbWVzIHRvIHdoaWNoIHRoaXMgZW1haWwgc2hvdWxkIGJlIHNlbnQuIFNlcGFyYXRlZCBieSBjb21tYXMuPC9saT4KICAgIDxsaT48Y29kZT50b19mZXVfZ3JvdXBzPC9jb2RlPiA6IHN0cmluZyBhcnJheSAtIEFuIGFycmF5IG9mIEZFVSBncm91cCBpZHMgb3IgbmFtZXMgdG8gd2hpY2ggdGhpcyBlbWFpbCBzaG91bGQgYmUgc2VudC4gU2VwYXJhdGVkIGJ5IGNvbW1hcy48L2xpPgogICAgPGxpPjxjb2RlPnRvX2N1cnJlbnRfYWRtaW48L2NvZGU+IDogYm9vbCAtIEluZGljYXRlcyB0aGF0IHRoaXMgZW1haWwgc2hvdWxkIGJlIHNlbnQgdG8gdGhlIGN1cnJlbnRseSBsb2dnZWQgaW4gYWRtaW4gdXNlciAoaWYgYXZhaWxhYmxlKS48L2xpPgogICAgPGxpPjxjb2RlPnRvX2N1cnJlbnRfZmV1PC9jb2RlPiA6IGJvb2wgLSBJbmRpY2F0ZXMgdGhhdCB0aGlzIGVtYWlsIHNob3VsZCBiZSBzZW50IHRvIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIEZFVSB1c2VyIChpZiBhdmFpbGFibGUpLjwvbGk+CiAgICA8bGk+PGNvZGU+dG9fYWRkcjwvY29kZT4gOiBzdHJpbmcgYXJyYXkgLSBBbiBhcnJheSBvZiBmaXhlZCBlbWFpbCBhZGRyZXNzZXMgdG8gcmVjZWl2ZSB0aGlzIG1lc3NhZ2UuPC9saT4KICAgIDxsaT48Y29kZT5jY19hZGRyPC9jb2RlPiA6IHN0cmluZyBhcnJheSAtIEFuIGFycmF5IG9mIGZpeGVkIGVtYWlsIGFkZHJlc3NlcyB0byBiZSBjYXJib24gY29waWVkIG9uIHRoaXMgbWVzc2FnZS48L2xpPgogICAgPGxpPjxjb2RlPmJjY19hZGRyPC9jb2RlPiA6IHN0cmluZyBhcnJheSAtIEFuIGFycmF5IG9mIGZpeGVkIGVtYWlsIGFkZHJlc3NlcyB0byBiZSBibGluZCBjYXJib24gY29waWVkIG9uIHRoaXMgbWVzc2FnZS48L2xpPgogICAgPGxpPjxjb2RlPnByaW9yaXR5PC9jb2RlPiA6IGludCBbMS01XSAtIEFuIGludGVnZXIgcHJpb3JpdHkgZm9yIHRoZSBlbWFpbCBzeXN0ZW0gKGNsaWVudHMgbWF5IGlnbm9yZSB0aGlzKS4gIDEgPSBIaWdoIFByaW9yaXR5LCAgNSA9IGxvdyBwcmlvcml0eS4gICAzIGlzIHRoZSBkZWZhdWx0LjwvbGk+CiAgICA8bGk+PGNvZGU+ZW5jb2RlX3N1YmplY3Q8L2NvZGU+IDogYm9vbCAtIEluZGljYXRlcyB0aGF0IHRoZSBzdWJqZWN0IGZvciB0aGlzIGVtYWlsIHNob3VsZCBiZSBiYXNlNjQgZW5jb2RlZC48L2xpPgo8L3VsPgo8aDQ+Tm90ZXM6PC9oND4KPHVsPgogIDxsaT5Pbmx5IEFTQ0lJIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQgaW4gdGhlIGVtYWlsIHN1YmplY3QgbGluZSwgdGhlcmVmb3JlIHlvdSBtYXkgbmVlZCB0byBkZWNvZGUgZW50aXRpZXMgZnJvbSBzb21lIHBsdWdpbnMgZm9yIHVzZSBpbiB0aGUgc3ViamVjdCwgb3IgYmFzZTY0IGVuY29kZSB0aGUgc3ViamVjdCB1c2luZyB0aGUgZW5jb2RlX3N1YmplY3QgZmxhZyBpbiB0aGUgaW5pIHNlY3Rpb24uPC9saT4KICA8bGk+VHJhbnNsYXRpb24gaW4gZW1haWxzIGlzIG5vdCBhIHN0cmFpZ2h0Zm9yd2FyZCBwcm9jZXNzLgogICAgICA8cD5QcmltYXJpbHkgYmVjYXVzZSBkaWZmZXJlbnQgZW1haWxzIGNhbiBiZSB0cmlnZ2VyZXJkIGZyb20gZGlmZmVyZW50IHByb2Nlc3NlcyBhbmQgaXQgbWF5IG5vdCBiZSBwb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIGxhbmd1YWdlIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGEgcGFydGljdWxhciB1c2VyLiBJdCBpcyB1c3VhbGx5IGJlc3QgdG8gYmVnaW4gd2l0aCBoYXJkY29kaW5nIHRoZSBsYW5ndWFnZSBpbiB0aGUgZW1haWwgY29udGVudCB1bnRpbCB5b3Uga25vdyBiZXR0ZXIgaG93IHRoZSBtZXNzYWdlcyB3b3JrLjwvcD4KICAgICAgPHA+Rm9yIGV4YW1wbGU6IGl0IGlzIGRpZmZpY3VsdCB0byBrbm93IHdoYXQgbGFuZ3VhZ2UgdG8gdXNlIHdoZW4gYW4gZW1haWwgaXMgc2VudCB0byBhIHNpdGUgdmlzaXRvciB0cmlnZ2VyZWQgYnkgYSBiYWNrZ3JvdW5kIHRhc2sgb3IgYW4gYWRtaW4gYWN0aW9uLiAgSXQgaXMgYWxzbyBkaWZmaWN1bHQgdG8ga25vdyB3aGF0IGxhbmd1YWdlIHRvIHVzZSB3aGVuIGFuIGVtYWlsIGlzIHNlbnQgdG8gbXVsdGlwbGUgYWRtaW4gdXNlcnMuPC9wPgogICAgICA8cD5JZiB5b3Ugd291bGQgbGlrZSB0aGUgYWJpbGl0eSB0byB0cmFuc2xhdGUgZW1haWxzIGZvciBlYWNoIHBhcnRpY3VsYXIgdXNlciwgQU5EIGNhbiBkZXRlcm1pbmUgd2hhdCB0aGF0IGxhbmd1YWdlIHNob3VsZCBiZSwgdGhlbiB5b3UgbWF5IHdhbnQgdG8gdXNlIHRoZSBDR21sIGFuZCBDR21sR1VJIG1vZHVsZXMgZm9yIGNyZWF0aW5nIGFuZCBtYW5hZ2luZyB0cmFuc2xhdGlvbnMgdGhhdCBhcmUgc2VwYXJhdGUgZnJvbSB0aGUgbW9kdWxlcyB5b3UgYXJlIHVzaW5nLjwvcD4KICA8L2xpPgogIDxsaT5TZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBDTVNNU0V4dFxFbWFpbFxFbWFpbCwgQ01TTVNFeHRcRW1haWxcRmlsZUVtYWlsU3RvcmFnZSwgYW5kIENNU01TRXh0XEVtYWlsXFNpbXBsZUVtYWlsUHJvY2Vzc29yIGNsYXNzZXMgaW4gdGhlQVBJIGRvY3VtZW50YXRpb24gZm9yIHRoZSBtZXRob2RzIHRoYXQgYXJlIGF2YWlsYWJsZS48L2xpPgo8L3VsPgoKPGg0PkFkZGl0aW9uYWwgc21hcnR5IGRhdGEuPC9oND4KPHA+VGhlIDxjb2RlPlxDTVNNU0V4dFxFbWFpbFxFbWFpbDwvY29kZT4gY2xhc3MgaGFzIG1ldGhvZHMgdG8gYWRkIGFkZGl0aW9uYWwgc21hcnR5IHZhcmlhYmxlcyB0byB0aGUgZW1haWwgYmVmb3JlIHRlbXBsYXRlIHByb2Nlc3NpbmcuICBUaGlzIGlzIGRvbmUgaW4gY29kZS4gSW4gY29kZSBmaWxlIGF0dGFjaG1lbnRzIGNhbiBhbHNvIGJlIHByb3ZpZGVkLiAgVGhlIGV4YW1wbGUgYWJvdmUgYXNzdW1lcyB0aGF0IHRoZSBjb2RlIHRoYXQgdHJpZ2dlcnMgdGhpcyBlbWFpbCB3aWxsIGFkZCB0aGUgJmxicmFjZTskaXB9IGFuZCAmbGJyYWNlOyR1c2VybmFtZX0gdmFyYWlibGVzLjwvcD4KPGg0PlNhbXBsZTo8L2g0Pgo8cD5UaGlzIGNvZGUgaWxsdXN0cmF0ZXMgYSBwb3RlbnRpYWwgaGFuZGxlciBmb3IgdGhlIEZyb250RW5kVXNlcnMgbW9kdWxlcydzIG9uTG9naW5GYWlsZWQgRXZlbnQuICBUaGlzIGNvZGUgd291bGQgcG90ZW50aWFsbHkgZ28gaW50byBhIHRoaXJkIHBhcnR5IG1vZHVsZSdzIGNvbnN0cnVjdG9yLjwvcD4KPHByZT48Y29kZT4KXENNU01TXEhvb2tNYW5hZ2VyOjphZGRfaG9vayggJ0Zyb250RW5kVXNlcnM6Om9uTG9naW5GYWlsZWQnLCBmdW5jdGlvbiggJHBhcmFtcyApICZsYnJhY2U7CiAgICAvLyB0aGlzIG1ldGhvZCBwcm92aWRlZCBieSBDTVNNU0V4dCBsb2FkcyB0aGUgZW1haWwgb2JqZWN0LgogICAgJGVtbCA9ICR0aGlzLT5nZXRfZW1haWxfc3RvcmFnZSgpLT5sb2FkKCdmZXVfb25sb2dpbmZhaWxlZC5lbWwnKTsKICAgIC8vIGFkZCBkYXRhIHNwZWNpZmljIGZvciB0aGlzIGhvb2suCiAgICAkZW1sID0gJGVtbC0+YWRkX2RhdGEoJ2lwJywkcGFyYW1zWydpcCddKS0+YWRkX2RhdGEoJ3VzZXJuYW1lJywkcGFyYW1zWyd1c2VybmFtZSddKTsKCiAgICAkbWFpbGVyID0gbmV3IFxjbXNfbWFpbGVyOwogICAgJHNlbmRlciA9IG5ldyBcQ01TTVNFeHRcRW1haWxcU2ltcGxlRW1haWxQcm9jZXNzb3IoICRlbWwsICRtYWlsZXIgKTsKICAgICRzZW5kZXItPnNlbmQoKQp9KTsKPC9jb2RlPjwvcHJlPgoKPGgzPkZpbGUgVGVtcGxhdGVzPC9oMz4KPHVsPgogICAgPGxpPnNvcnRhYmxlIGxpc3QgdGVtcGxhdGUgLSA8Y29kZT5zb3J0YWJsZWxpc3QudHBsPC9jb2RlPgogICAgPC9saT4KICAgIDxsaT5lcnJvciB0ZW1wbGF0ZSAtIDxjb2RlPmVycm9yLnRwbDwvY29kZT4KICAgIDwvbGk+CjwvdWw+Cgo8aDM+QWRtaW4gc2lkZSBqYXZhc2NyaXB0PC9oMz4KPHA+VGhpcyBtb2R1bGUgdXRpbGl6ZXMgdGhlIEdldEhlYWRlckhUTUwoKSBtZXRob2QgdG8gaW5qZWN0IHNvbWUgamF2YXNjcmlwdCB1dGlsaXRpZXMgdGhhdCBjYW4gYmUgdXNlZCBieSBhbnkgbW9kdWxlIHRoYXQgZXh0ZW5kcyBcQ01TTVNFeHRcWFRNb2R1bGUgaW4gdGhlaXIgYWRtaW4gcGFuZWwuPC9wPgo8dWw+CiAgICA8bGk+TWFrZSBidXR0b25zIHdvcmsgbGlrZSBsaW5rcwogICAgICAgIDxwPkNyZWF0aW5nIGEgYnV0dG9uIHdpdGggYSBkYXRhLWhyZWYgYXR0cmlidXRlIHRoYXQgaGFzIGEgVVJJIGluIGl0IHdpbGwgY2F1c2UgdGhlIGJ1dHRvbiB0byByZWRpcmVjdCB0byB0aGUgVVJJIHdoZW4gY2xpY2tlZC48L3A+Cgk8cHJlPiZsdDtidXR0b24gZGF0YS1ocmVmPSJodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnIiZndDtnbyZsdDtidXR0b24mZ3Q7PC9wcmU+CiAgICA8L2xpPgo8L3VsPiAgPC9kaXY+CiAgPGRpdiBpZD0ibmV3X2MiPgogICAgPGgyPldoYXQgaXMgTmV3PC9oMj4KCjxwPkhlcmUncyB3aGF0IHdlIGhhdmUgYmVlbiB3b3JraW5nIG9uOjwvcD4KCjxoMz5XaGF0J3MgbmV3IGluIDEuNC4zPC9oMz4KPHVsPgogICAgPGxpPk5ldyBQbHVnaW5zOgogICAgPHVsPgogICAgICA8bGk+PHN0cm9uZz4mIzEyMztjaGVja19zZXNzaW9uX3N0YXR1c308L3N0cm9uZz4gLSBDaGVja3MgdGhlIHNlc3Npb24gZXhwaXJhdGlvbiBzdGF0dXMgd2l0aCBhIGNvdW50ZG93biBhbmQgYSBub3RpZmljYXRpb24gb3IgdG9hc3Q7PC9saT4KICAgICAgPGxpPjxzdHJvbmc+JiMxMjM7cmVzdHJpY3RfYnlfaXBfbGlzdH08L3N0cm9uZz4gLSByZXN0cmljdHMgYWNjZXNzIGJ5IElQIGFkZHJlc3MoZXMpLjs8L2xpPgogICAgPC91bD4KICA8L2xpPgo8L3VsPgo8aDM+V2hhdCdzIG5ldyBpbiAxLjQuMjwvaDM+Cjx1bD4KICA8bGk+TmV3IFBsdWdpbnM6CiAgICA8dWw+CiAgICAgIDxsaT48c3Ryb25nPiYjMTIzO3h0X2Nvb2tpZV9zZXR9PC9zdHJvbmc+IC0gU2V0IHZhbHVlcyBpbiBjb29raWVzIGZyb20gU21hcnR5OzwvbGk+CiAgICAgIDxsaT5BZGRlZCBhIGZldyBhbGlhc2VzIHRvIHNvbWUgZXhpc3RpbmcgcGx1Z2lucyBzbyB0aGF0IHRoZSBuYW1pbmcgZ290IGEgYml0IG1vcmUgY29uc2lzdGVudDs8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5BIG5ldyBhbmQgbW9yZSBvcmdhbml6ZWQgaGVscDs8L2xpPgogIDxsaT5PbGQgbGVmdG92ZXJzIG9mIHBsdWdpbnMgb24gdGhlIGhlbHAgaGF2ZSBiZWVuIHJlbW92ZWQ7PC9saT4KICA8bGk+RGVwcmVjYXRlZCBzb21lIHBsdWdpbnMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZCBtYWlubHkgYmVjYXVzZSB0aGVyZSBhcmUgYmV0dGVyIHJlcGxhY2VtZW50cyBmb3IgdGhlbTs8L2xpPgogIDxsaT5OZXcgPHN0cm9uZz5jbGljayB0byBjb3B5PC9zdHJvbmc+IGZlYXR1cmUgb24gY29kZSBzbmlwcGV0cyAocGF5IGF0dGVudGlvbiB0byB0aGUgY3Vyc29yIHdoaWxlIGhvdmVyaW5nIG92ZXIgdGhlIHNuaXBwZXRzKTs8L2xpPgogIDxsaT5UaGUgbW9kdWxlIHNob3VsZCBiZSBmdWxseSBQSFAgOC4xIGNvbXBhdGlibGUgYnkgbm93IHVubGVzcyB3ZSBtaXNzZWQgc29tZXRoaW5nOzwvbGk+CjwvdWw+CiAgPC9kaXY+CiAgPGRpdiBpZD0iYWJvdXRfYyI+CiAgICA8aDM+QWJvdXQgdGhpcyBtb2R1bGU8L2gzPgogICAgICA8cD5UaGlzIG1vZHVsZSBpcyBhIGZvcmsgb2YgPHN0cm9uZz5DR0V4dGVuc2lvbnM8L3N0cm9uZz4gZGV2ZWxvcGVkIGJ5IDxzdHJvbmc+Um9iZXJ0IENhbXBiZWxsICZsdDtjYWxndXkxMDAwJmd0Ozwvc3Ryb25nPi48YnIgLz4KCQkJICAgIFRoaXMgaXMgYSAxc3QgZ2VuZXJhdGlvbiBmb3JrIG9mIHRoZSBtb2R1bGUuIENvbnNpZGVyIHRoaXMgYXMgYW5vdGhlciBmbGF2b3VyIG9mIHRoZSBvcmlnaW5hbCBtb2R1bGUuPGJyIC8+CgoJCQlJZiB5b3UgZmluZCBhbnkgYnVncyBwbGVhc2UgZmVlbCBmcmVlIHRvIHN1Ym1pdCBhIGJ1ZyByZXBvcnQgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9idWcvbGlzdC8xNDYyIiB0YXJnZXQ9Il9ibGFuayI+aGVyZTwvYT4gb3IgZm9yIGFueSBnb29kIGlkZWFzIGNvbnNpZGVyIHN1Ym1pdGluZyBhIGZlYXR1cmUgcmVxdWVzdCA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL2ZlYXR1cmVfcmVxdWVzdC9saXN0LzE0NjIiIHRhcmdldD0iX2JsYW5rIj5oZXJlPC9hPi48L3A+CgkJCTxwPlBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCBkZXZlbG9wZXJzIGRvIGhhdmUgdGhlaXIgZGFpbHkgam9icyB3aGljaCBtZWFucyB0aGF0IGZlYXR1cmUgcmVxdWVzdHMgYXJlIGNvbnNpZGVyZWQgYW5kIGRvbmUgYXMgdGltZSBhbGxvd3MuIElmIHlvdSBuZWVkIGEgZmVhdHVyZSByZWFsbHkgYmFkbHkgY29uc2lkZXIgY29udGFjdGluZyBvbmUgb2YgdGhlIGRldmVsb3BlcnMgZm9yIGEgc3BvbnNvcmVkIGRldmVsb3BtZW50LgoJCQk8L3A+CgoKPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGUgbW9kdWxlIGF1dGhvciAvIG1haW50YWluZXJzIG9yIHByb2plY3QgbWFuYWdlcnMgYXJlIGluIG5vIHdheSBvYmxpZ2F0ZWQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGlzIGNvZGUgaW4gYW55IGZhc2hpb24uICBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgo8bGk+QSBidWcgdHJhY2tpbmcgYW5kIGZlYXR1cmUgcmVxdWVzdCBzeXN0ZW0gaGFzIGJlZW4gY3JlYXRlZCBmb3IgdGhpcyBtb2R1bGUgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9jbXNtc2V4dCI+aGVyZTwvYT4uIFBsZWFzZSBiZSB2ZXJib3NlIGFuZCBkZXNjcmlwdGl2ZSB3aGVuIHN1Ym1pdHRpbmcgYnVnIHJlcG9ydHMgYW5kIGZlYXR1cmUgcmVxdWVzdHMsIGFuZCBmb3IgYnVnIHJlcG9ydHMgZW5zdXJlIHRoYXQgeW91IGhhdmUgcHJvdmlkZWQgc3VmZmljaWVudCBpbmZvcm1hdGlvbiB0byByZWxpYWJseSByZXByb2R1Y2UgdGhlIGlzc3VlLjwvbGk+CjxsaT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGFsc28gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT4uICBXaGVuIGRlc2NyaWJpbmcgYW4gaXNzdWUgcGxlYXNlIG1ha2UgYW4gZWZmb3J0IHRvIHByb3ZpZGUgYWxsIHJlbGV2YW50IGluZm9ybWF0aW9uLCBhIHRob3JvdWdoIGRlc2NyaXB0aW9uIG9mIHlvdXIgaXNzdWUsIGFuZCBzdGVwcyB0byByZXByb2R1Y2UgaXQgb3IgeW91ciBkaXNjdXNzaW9uIG1heSBiZSBpZ25vcmVkLjwvbGk+CjwvdWw+Cgo8cD5UaGUgbWFpbnRhaW5lcnMgd2lsbCBkbyB0aGVpciBiZXN0IHRvIGtlZXAgdGhlIG1vZHVsZSBhbmQgYWxsIHRoZSBsaWJyYXJpZXMgaXQgdXNlcyB1cCB0byBkYXRlLjwvcD4KCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMjAgLSAyMDI1LCBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbiA8YSBocmVmPSJtYWlsdG86aW5mb0BjbXNtYWRlc2ltcGxlLm9yZyI+Jmx0O2luZm9AY21zbWFkZXNpbXBsZS5vcmcmZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDgsIFJvYmVydCBDYW1wYmVsbCAmbHQ7Y2FsZ3V5MTAwMCZndDsuIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPGhyPgo8cD48c3Ryb25nPkNNU01TRXh0PC9zdHJvbmc+IGlzIGZyZWUgc29mdHdhcmU7PGJyIC8+IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSA8c3Ryb25nPkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlPC9zdHJvbmc+IGFzIHB1Ymxpc2hlZCBieSB0aGUgPHN0cm9uZz5GcmVlIFNvZnR3YXJlIEZvdW5kYXRpb248L3N0cm9uZz47PGJyIC8+IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uPC9wPgo8cD48c3Ryb25nPkNNU01TRXh0PC9zdHJvbmc+IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCA8c3Ryb25nPldJVEhPVVQgQU5ZIFdBUlJBTlRZPC9zdHJvbmc+OzxiciAvPiB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgPHN0cm9uZz5NRVJDSEFOVEFCSUxJVFk8L3N0cm9uZz4gb3IgPHN0cm9uZz5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRTwvc3Ryb25nPi48L3A+CjxwPlNlZSB0aGVHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLjwvcD4KIDxwPllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIDxzdHJvbmc+R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2U8L3N0cm9uZz4gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07PGJyIC8+IGlmIG5vdCwgd3JpdGUgdG8gdGhlIDxzdHJvbmc+RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQTwvc3Ryb25nPiBvciA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5yZWFkIGl0IG9ubGluZTwvYT4uPC9wPgo8cD48c3Ryb25nPllvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgPHN0cm9uZz5DTVNNU0V4dDwvc3Ryb25nPi48L3N0cm9uZz48L3A+Cjxocj4KPGg0PkN1cnJlbnQgTWFpbnRhaW5lcnM8L2g0Pgo8dWw+CiAgPGxpIGNsYXNzPSJwX2JvdHRvbV8xNSI+PHN0cm9uZz5GZXJuYW5kbyBNb3JnYWRvIChKbyBNb3JnKTwvc3Ryb25nPjwvbGk+CiAgPGxpIGNsYXNzPSJwX2JvdHRvbV8xNSI+PHN0cm9uZz5Sb2xmIFRqYXNzZW5zIChSb2xmVGopPC9zdHJvbmc+PC9saT4KPC91bD4KCjxoND5QYXN0IE1haW50YWluZXJzPC9oND4KPHVsPgogIDxsaT48c3Ryb25nPlJvYmVydCBDYW1wYmVsbCAoY2FsZ3V5MTAwMCk8L3N0cm9uZz4gPGJyIC8+d3d3LmNhbGd1eTEwMDAuY29tPC9saT4KPC91bD4KCjxoND5Lbm93biBDb250cmlidXRvcnM8L2g0Pgo8dWw+CiAgPGxpPjxzdHJvbmc+Um9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwKTwvc3Ryb25nPjxiciAvPnd3dy5jYWxndXkxMDAwLmNvbTwvbGk+CiAgPGxpPjxzdHJvbmc+Um9sZiBUamFzc2Vuczwvc3Ryb25nPjxiciAvPnd3dy5jbXNjYW5iZXNpbXBsZS5vcmc8L2xpPgo8L3VsPgoKICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0iY2xlYXJiIj48L2Rpdj4KPC9kaXY+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBGZXJuYW5kbyBNb3JnYWRvIChKbyBNb3JnKSAmbHQ7am9tb3JnQGNtc21hZGVzaW1wbGUub3JnJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuNS4yPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHN0eWxlPgogIHNlY3Rpb24gY29kZQogIHsKICAgIGJvcmRlci1yYWRpdXM6IDAuMzE1ZW07CiAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOwogICAgcGFkZGluZzogMCAwLjNlbSAwLjA0MGVtOwogICAgZm9udC1zaXplOiAwLjllbTsKICB9Cjwvc3R5bGU+CjxzZWN0aW9uPgogIDxoND4tIFZlcnNpb24gPGNvZGU+MS41LjE6PC9jb2RlPiA8Y29kZT4yMDIzLTA4LTA3PC9jb2RlPjwvaDQ+CiAgPHVsPgogICAgPGxpPjxjb2RlPkZpeGVkOjwvY29kZT4gQSBidWcgcmVsYXRlZCB3aXRoIE1BTVMgZnJvbnRlbmQgYWN0aW9uczs8L2xpPgogIDwvdWw+CiAgPGg0Pi0gVmVyc2lvbiA8Y29kZT4xLjUuMDo8L2NvZGU+IDxjb2RlPjIwMjMtMDctMzA8L2NvZGU+PC9oND4KICAgIDx1bD4KICAgICAgPGxpPjxjb2RlPkNoYW5nZWQ6PC9jb2RlPiBtb3JlIHN0YWJpbGl0eSBpbXByb3ZlbWVudHM7PC9saT4KICAgICAgPGxpPjxjb2RlPkFkZGVkOjwvY29kZT4gYSBudW1iZXIgb2YgbmV3IGNsYXNzZXMgdG8gdGhlIGRldmVsb3BlciB0b29scyBwYWxldHRlOzwvbGk+CiAgICAgIDxsaT48Y29kZT5BZGRlZDo8L2NvZGU+IGFuIGV4dHJhIGRiIGxpYiB0byBzdGFydCBpbXBsZW1lbnRpbmcgc29tZSBvZiB0aGUgZmVhdHVyZXMgdGhhdCBtYXkgYmUgcG9ydGVkIHRvIHRoZSBjb3JlOzwvbGk+CiAgICAgICAgPGxpPjxjb2RlPlVwZGF0ZWQ6PC9jb2RlPiBKU01pbiBsaWJyYXJ5OgogICAgICAgICAgPHVsPgogICAgICAgICAgICA8bGk+RG9lcyBub3QgY2hva2Ugb24gc29tZSByZWdleHAgbGl0ZXJhbHMgY29udGFpbmluZyBxdW90ZSBjaGFyYWN0ZXJzLiBFLmcuIC8nLzwvbGk+CiAgICAgICAgICAgIDxsaT5TcGFjZXMgYXJlIHByZXNlcnZlZCBhZnRlciBzb21lIGFkZC9zdWIgb3BlcmF0b3JzLCBzbyB0aGV5IGFyZSBub3QgbWlzdGFrZW5seSBjb252ZXJ0ZWQgdG8gcG9zdC1pbmMvZGVjLiBFLmcuIGEgKyArK2IgLT4gYSsgKytiPC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9saT4KICAgICAgPGxpPjxjb2RlPk5ldzo8L2NvZGU+IHRoZXJlIGlzIG5vdyBhIG1vZHVsZSBBUEkgY2xhc3Mgd2hpY2ggZXh0ZW5kcyBhbmQgb3ZlcnJpZGVzICB0aCBNb2R1bGUgUmVmZXJlbmNlIGNsYXNzIHNvIHRoYXQgb25seSBwdWJsaWMgbWV0aG9kcyB3aXRoIGFuIEBhcGkgYW5ub3RhdGlvbiBhcmUgZXhwb3NlZC48L2xpPgogICAgICA8bGk+PGNvZGU+TmV3OjwvY29kZT4gdGhlcmUgaXMgbm93IGEgTW9kdWxlIFJlZmVyZW5jZSBjbGFzcyB0byByZWR1Y2UgdGhlIGZvb3RwcmludCBvZiB0aGUgbW9kdWxlcyB3aGVuIGNhbGxlZCBhcyBhbiBBUEkgdG8gdGhlIG1vZHVsZS48L2xpPgogICAgICA8bGk+PGNvZGU+TmV3OjwvY29kZT4gdGhlIG1vZHVsZXMnIGFjdGlvbnMgY2FuIG5vdyBiZSBjbGFzc2VzIG9uIG1vZHVsZV9kYXRhIGZvbGRlciBpbiB0aGUgbW9kdWxlcyBmb2xkZXI7PC9saT4KICAgICAgPGxpPjxjb2RlPkNoYW5nZWQ6PC9jb2RlPiB0aGUgWFRNb2R1bGUgY2xhc3MgaGFzIGJlZW4gc3BsaXQgaW50byB0cmFpdHMgZm9yIHRoZSBtb3N0IHBhcnQsIHN0aWxsIGEgV0lQLCBidXQgYWRkcyBmbGV4aWJpbGl0eSBhbmQgc29tZSBtb3JlIGZlYXR1cmVzOzwvbGk+PC9saT4KICAgICAgPGxpPjxjb2RlPkZpeGVkOjwvY29kZT4gYSBmZXcgbW9yZSBidWdzIGFuZCBzb21lIG1vcmUgUEhQIDguMyBjb21wYXRpYmlsaXR5IGlzc3Vlczs8L2xpPgogICAgICA8bGk+PGNvZGU+Rml4ZWQ6PC9jb2RlPiBhbiBpc3N1ZSB3aXRoIHRoZSBzZXNzaW9uIG1hbmFnZXIgZmlsZXMgcGVybWlzc2lvbnM7PC9saT4KICAgICAgPGxpPjxjb2RlPkZpeGVkOjwvY29kZT4gQlIjMTI1Njg7PC9saT4KICAgICAgPGxpPjxjb2RlPlVwZGF0ZWQ6PC9jb2RlPiBodG1MYXdlZCB0byAxLjIuMTU7PC9saT4KICA8L3VsPgogIDxoND4tIFZlcnNpb24gPGNvZGU+MS40LjU6PC9jb2RlPiA8Y29kZT4yMDIzLTExLTI1PC9jb2RlPjwvaDQ+CiAgICA8dWw+CiAgICA8bGk+PGNvZGU+Q2hhbmdlZDo8L2NvZGU+IGEgZmV3IHN0YWJpbGl0eSBpbXByb3ZlbWVudHM7PC9saT4KICAgIDxsaT48Y29kZT5BZGRlZDo8L2NvZGU+IGEgbnVtYmVyIG9mIG5ldyBjbGFzc2VzIHRvIHRoZSBkZXZlbG9wZXIgdG9vbHMgcGFsZXR0ZTs8L2xpPgogICAgPGxpPjxjb2RlPkZpeGVkOjwvY29kZT4gZ2FyYmFnZSBjb2xsZWN0b3Igb24gdGhlIHNlc3Npb24gbWFuYWdlcjs8L2xpPgogIDwvdWw+CiAgPGg0Pi0gVmVyc2lvbiA8Y29kZT4xLjQuNDo8L2NvZGU+IDxjb2RlPjIwMjMtMTAtMDU8L2NvZGU+PC9oND4KICAgIDx1bD4KICAgIDxsaT48Y29kZT5DaGFuZ2VkOjwvY29kZT4gYSBmZXcgc3RhYmlsaXR5IGltcHJvdmVtZW50czs8L2xpPgogICAgPGxpPjxjb2RlPkFkZGVkOjwvY29kZT4gYSBudW1iZXIgb2YgbmV3IGNsYXNzZXMgdG8gdGhlIGRldmVsb3BlciB0b29scyBwYWxldHRlOzwvbGk+CiAgICAgIDxsaT48Y29kZT5GaXhlZDo8L2NvZGU+IG1pc3NpbmcgY2hhbmdlbG9nIGVudHJpZXMgYW5kIGEgZmV3IG90aGVyIGZpeGVzOzwvbGk+CiAgICA8bGk+PGNvZGU+QWRkZWQ6PC9jb2RlPiBkYmcoKS0+ZHVtcCg8ZW0+W3ZhcnMuLi5dPC9lbT4pIGFuZCBhIGZldyBvdGhlciBkZWJ1ZyBoZWxwZXIgZnVuY3Rpb25zIGNhbGxlZCB2aWEgZGJnKCktPjs8L2xpPgogIDwvdWw+CiAgPGg0Pi0gVmVyc2lvbiA8Y29kZT4xLjQuMzo8L2NvZGU+IDxjb2RlPjIwMjMtMDktMTA8L2NvZGU+PC9oND4KICAgIDx1bD4KICAgIDxsaT48Y29kZT5DaGFuZ2VkOjwvY29kZT4gYSBmZXcgc3RhYmlsaXR5IGltcHJvdmVtZW50czs8L2xpPgogICAgPGxpPjxjb2RlPkFkZGVkOjwvY29kZT4gc21hcnR5IHBsdWdpbiB0byByZXN0cmljdCBhY2Nlc3MgdG8gcGFnZXMgYnkgSVA7PC9saT4KICAgIDxsaT48Y29kZT5BZGRlZDo8L2NvZGU+IHNtYXJ0eSBwbHVnaW4gdG8gc2hvdyBhIGNvdW50ZG93biB1bnRpbCBwaHAgc2Vzc2lvbiBleHBpcmVzPC9saT4KICAgIDxsaT48Y29kZT5GaXhlZDo8L2NvZGU+IFBIUCA4LjEgY29tcGF0aWJpbGl0eSBmaXhlcyBhcmUgc3RpbGwgdW5kZXJ3YXkgYXMgd2UgZmluZCB0aGVtOzwvbGk+CiAgPC91bD4KICA8aDQ+LSBWZXJzaW9uIDxjb2RlPjEuNC4yOjwvY29kZT4gPGNvZGU+MjAyMy0wOC0yMTwvY29kZT48L2g0PgogICAgPHVsPgogICAgPGxpPjxjb2RlPkNoYW5nZWQ6PC9jb2RlPiBhIGZldyBzdGFiaWxpdHkgaW1wcm92ZW1lbnRzOzwvbGk+CiAgICA8bGk+PGNvZGU+QWRkZWQ6PC9jb2RlPiBhIGZldyBXSVAgZnVuY3Rpb25zIChzdGlsbCB1bmRlciBkZXZlbG9wbWVudCk7PC9saT4KICAgIDxsaT48Y29kZT5GaXhlZDo8L2NvZGU+IFBIUCA4LjEgY29tcGF0aWJpbGl0eSBmaXhlcyBhcmUgc3RpbGwgdW5kZXJ3YXkgYXMgd2UgZmluZCB0aGVtOzwvbGk+CiAgPC91bD4KICA8aDQ+LSBWZXJzaW9uIDxjb2RlPjEuNC4xPC9jb2RlPiA6IDxjb2RlPjIwMjMtMDMtMDQ8L2NvZGU+PC9oND4KICA8dWw+CiAgICA8bGk+PGNvZGU+Q2hhbmdlZDo8L2NvZGU+IGhlbHAgaXMgYmV0dGVyIG9yZ2FuaXplZCBhbmQgdGhlIGNvZGUgc25pcHBldHMgPHN0cm9uZz5jbGljayB0byBjb3B5PC9zdHJvbmc+IGZlYXR1cmUgaGFzIGJlZW4gaW1wbGVtZW50ZWQ7PC9saT4KICAgIDxsaT48Y29kZT5BZGRlZDo8L2NvZGU+IFNtYXJ0eSBwbHVnaW4gdG8gc2V0IGNvb2tpZXMgZnJvbSB0ZW1wbGF0ZXM7PC9saT4KICAgIDxsaT48Y29kZT5GaXhlZDo8L2NvZGU+IGNmZy5pbmMgd2lsbCBubyBsb25nZXIgYmUgZGlzdHJpYnV0ZWQgKGl0IHdhcyBieSBtaXN0YWtlIGxhc3QgcmVsZWFzZSk7PC9saT4KICAgIDxsaT48Y29kZT5BZGRlZDo8L2NvZGU+IGNmZ19zYW1wbGUuaW5jIGlzIG5vdyB0aGUgbWVhbnMgYnkgd2hpY2ggY2ZnLmluYyBpcyBkb2N1bWVudGVkIGFuZCBzZXJ2ZXMgYXMgYSBkZWZhdWx0IGNmZy5pbmMgZm9yIG5ldyBpbnN0YWxsYXRpb25zOzwvbGk+CiAgICA8bGk+PGNvZGU+Rml4ZWQ6PC9jb2RlPiBQSFAgOC4xIGNvbXBhdGliaWxpdHkgZml4ZXMgYXJlIHN0aWxsIHVuZGVyd2F5IGFzIHdlIGZpbmQgdGhlbTs8L2xpPgogIDwvdWw+CiAgPGg0Pi0gVmVyc2lvbiA8Y29kZT4xLjQ8L2NvZGU+IDogPGNvZGU+MjAyMy0wMS0yMjwvY29kZT48L2g0PgogIDx1bD4KICAgIDxsaT48Y29kZT5DaGFuZ2VkOjwvY29kZT4gc29tZSBvZiB0aGUgY29kZSBiYXNlIGhhcyBiZWVuIG9wdGltaXplZCAodGhpcyBzaG91bGQgYmUgcmVjdXJyZW50IGZvciBhIHdoaWxlIGFzIGl0IGlzIHN0aWxsIFdJUCk7PC9saT4KICAgIDxsaT48Y29kZT5BZGRlZDwvY29kZT4gbmV3IGZ1bmN0aW9uYWxpdHkgdG8gbW9kdWxlX21pZ3JhdG9yLCBzdGlsbCB3aXAgYnV0IGFscmVhZHkgdmVyeSBwb3dlcmZ1bCAoc2VlIGNvZGUgYW5kIG1vZHVsZXMgc3VjaCBhcyBVcE1hbiBhbmQgU21hcnRGb3JtcyBvciBTbWFydEZvcm1zQWNjZXNzIGZvciBzb21lIHNvcnQgb2YgZXhhbXBsZXMgb2YgaW1wbGVtZW50YXRpb24pOzwvbGk+CiAgICA8bGk+PGNvZGU+QWRkZWQ8L2NvZGU+IDxjb2RlPmNvbnZlcnRfb2JqX2NsYXNzKCk8L2NvZGU+IHRvIGNsYXNzIHh0X3V0aWxzLCBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNvbnZlcnQgc2ltcGxlIHNoYWxsb3cgb2JqZXRzIGZyb20gb25lIGNsYXNzIHRvIGFub3RoZXI7PC9saT4KICAgIDxsaT48Y29kZT5GaXhlZDwvY29kZT4gYSBmZXcgbW9yZSBidWdzIGFuZCBzb21lIG1vcmUgUEhQIDguMSBjb21wYXRpYmlsaXR5IGlzc3Vlczs8L2xpPgogIDwvdWw+CiAgPGg0Pi0gVmVyc2lvbiA8Y29kZT4xLjM8L2NvZGU+IDogPGNvZGU+MjAyMi0xMi0xNTwvY29kZT48L2g0PgogIDx1bD4KICAgIDxsaT48Y29kZT5DaGFuZ2VkPC9jb2RlPiBvZmZpY2lhbGx5IGFkb3B0ZWQgc2VtYW50aWMgdmVyc2lvbmluZzs8L2xpPgogICAgPGxpPjxjb2RlPkFkZGVkPC9jb2RlPiBhIFNtYXJ0eSBtaW5pIHBhcnNlciB0aGF0IHNob3VsZCBhbGxvdyBvdGhlciBtb2R1bGVzIHRvIHBhcnNlIG11bHRpcGxlIHR5cGVzIG9mIGlucHV0czs8L2xpPgogICAgPGxpPjxjb2RlPkZpeGVkPC9jb2RlPiBhIGZldyBidWdzIGFuZCBzb21lIG1vcmUgUEhQIDguMSBjb21wYXRpYmlsaXR5IGlzc3Vlczs8L2xpPgogIDwvdWw+CiAgPGg0Pi0gVmVyc2lvbiA8Y29kZT4xLjIuMTwvY29kZT4gOiA8Y29kZT4yMDIyLTExLTIyPC9jb2RlPjwvaDQ+CiAgPHVsPgogICAgPGxpPjxjb2RlPkZpeGVkPC9jb2RlPiBhIGZldyBidWdzIGFuZCBzb21lIG1vcmUgUEhQIDguMSBjb21wYXRpYmlsaXR5IGlzc3Vlczs8L2xpPgogIDwvdWw+CiAgPGg0Pi0gVmVyc2lvbiA8Y29kZT4xLjI8L2NvZGU+IDogPGNvZGU+MjAyMi0wOC0yMTwvY29kZT48L2g0PgogIDx1bD4KICAgIDxsaT48Y29kZT5BZGRlZDwvY29kZT4gYSBmZXcgdXRpbGl0eSBjbGFzc2VzIHRoYXQgb25seSBoYXZlIGltcG9ydGFuY2UgZm9yIGNvZGVycyAobmVlZHMgZG9jdW1lbnRhdGlvbik7PC9saT4KICAgIDxsaT48Y29kZT5BZGRlZDwvY29kZT4gYSBmZXcgdXRpbGl0eSBjbGFzc2VzIHRoYXQgb25seSBoYXZlIHNvbWUgdW5kZXIgdGhlIGhvb2QgaW1wb3J0YW5jZTs8L2xpPgogICAgPGxpPjxjb2RlPkZpeGVkPC9jb2RlPiBhIGZldyBidWdzIGFuZCBzb21lIG1vcmUgUEhQIDguMSBjb21wYXRpYmlsaXR5IGlzc3Vlczs8L2xpPgogIDwvdWw+CiAgPGg0Pi0gVmVyc2lvbiA8Y29kZT4xLjEuMC4xPC9jb2RlPiA6IDxjb2RlPjIwMjItMDgtMjE8L2NvZGU+PC9oND4KICA8dWw+CiAgICA8bGk+PGNvZGU+Rml4ZWQ8L2NvZGU+IHRoZSByZWxlYXNlIFhNTCBmaWxlIG9mIDEuMSwgb3RoZXJ3aXNlIGlzIHRoZSBzYW1lIHJlbGVhc2U7PC9saT4KICA8L3VsPgogIDxoND4tIFZlcnNpb24gPGNvZGU+MS4xPC9jb2RlPiA6IDxjb2RlPjIwMjItMDgtMjE8L2NvZGU+PC9oND4KICAgIDx1bD4KICAgIDxsaT48Y29kZT5BZGRlZDwvY29kZT4gIEEgUEhQIGhlbHBlciBjbGFzcyBmb3IgbWlncmF0aW5nIHNldHRpbmdzIGFuZCBkYXRhIGJldHdlZW4gbW9kdWxlcyAodG8gaGVscCB3aXRoIGZvcmtzIG1pZ3JhdGlvbnMpOzwvbGk+CiAgICA8bGk+PGNvZGU+QWRkZWQ8L2NvZGU+IFNtYXJ0IGpzIChhIGpzIHRlbXBsYXRpbmcgZW5naW5lIHRoYXQgbWltaWNzIFBIUCBTbWFydHkgdGVtcGxhdGluZyBlbmdpbmUpOzwvbGk+CiAgICA8bGk+PGNvZGU+QWRkZWQ8L2NvZGU+IEJhY2tib25lIGpzOzwvbGk+CiAgICA8bGk+PGNvZGU+QWRkZWQ8L2NvZGU+IFNvbWUgY3NzIGFkZG9ucyBmb3IgYmFja2VuZCBtb2R1bGUgc3R5bGluZzs8L2xpPgogICAgPGxpPjxjb2RlPkFkZGVkPC9jb2RlPiBBIG51bWJlciBvZiBuZXcgZmVhdHVyZXMgYW5kIGRldmVsb3BlciBQSFAgY2xhc3Nlczs8L2xpPgogICAgPGxpPjxjb2RlPkZpeGVkPC9jb2RlPiBBIG51bWJlciBvZiBmaXhlcyBmb3IgUEhQIDguMSBjb21wYXRpYmlsaXR5ICh3b3JrIGluIHByb2dyZXNzKTs8L2xpPgogIDwvdWw+CiAgPGg0Pi0gVmVyc2lvbiA8Y29kZT4xLjAuMTwvY29kZT4gOiA8Y29kZT4yMDIxLTAzLTAxPC9jb2RlPjwvaDQ+CiAgPHA+QSBmZXcgaW1wb3J0YW50IGZpeGVzIG5hbWVseTo8L3A+CiAgPHVsPgogICAgPGxpPjxjb2RlPkZpeGVkPC9jb2RlPiBFZGl0aW5nIHRlbXBsYXRlcyBpbiBkZXBlbmRlbnQgbW9kdWxlcyBkb2Vzbid0IGp1bXAgdG8gYSBDTVNNU0V4dCBhY3Rpb247PC9saT4KICAgIDxsaT48Y29kZT5GaXhlZDwvY29kZT4gRml4ZXMgdG8gdGhlIGFjdGlvbiBmaWxlcyBzaGFyZWQgYmV0d2VlbiBYVE1vZHVsZSBhbmQgaXRzIGRlc2NlbmRhbnRzOzwvbGk+CiAgPC91bD4KICA8aDQ+LSBWZXJzaW9uIDxjb2RlPjEuMC4wPC9jb2RlPiA6IDxjb2RlPjIwMjEtMDMtMDg8L2NvZGU+PC9oND4KICA8dWw+CiAgICA8bGk+SW5pdGlhbCBQdWJsaWMgUmVsZWFzZTs8L2xpPgogIDwvdWw+Cjwvc2VjdGlvbj4KPGJyIC8+]]></about>
	<description><![CDATA[This module is a library of php classes used to build advanced forms]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_lkp_delitem.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDA4LTIwMTQgYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gcHJvdmlkZSB1c2VmdWwgZnVuY3Rpb25zCiMgIGFuZCBjb21tb25seSB1c2VkIGd1aSBjYXBhYmlsaXRpZXMgdG8gb3RoZXIgbW9kdWxlcy4KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNU01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBWaXNpdCB0aGUgQ01TTVMgSG9tZXBhZ2UgYXQ6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCmlmKCAhZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSApIGV4aXQ7CmlmKCBjbXNtcygpLT5pc19mcm9udGVuZF9yZXF1ZXN0KCkgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKF9fTUVUSE9EX18uJyBjYW5ub3QgYmUgdXNlZCBmb3IgZnJvbnRlbmQgcmVxdWVzdHMuJyk7CgokZm9ybWRhdGEgPSAkbW9kID0gbnVsbDsKdHJ5IHsKICAgICRwYXJhbXMgPSBceHRfdXRpbHM6OmRlY3J5cHRfcGFyYW1zKCRwYXJhbXMpOwogICAgJG1vZHVsZV9uYW1lID0geHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywnX20nKTsKICAgICRjbGFzcyA9IHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ19jJyk7CiAgICAkaXRlbV9pZCA9IHh0X3BhcmFtOjpnZXRfaW50KCRwYXJhbXMsJ19pJyk7CiAgICAkbW9kID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgkbW9kdWxlX25hbWUpOwogICAgaWYoICEkbW9kICkgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiQ291bGQgbm90IGdldCBpbnN0YW5jZSBvZiBtb2R1bGUgIi4kbW9kdWxlX25hbWUpOwogICAgJGZvcm1kYXRhID0gJGNsYXNzOjpnZXRfYWRkZWRpdF9mb3JtZGF0YSgpOwogICAgaWYoICEgJGZvcm1kYXRhIGluc3RhbmNlb2YgXENNU01TRXh0XGxvb2t1cF9mb3JtX2RhdGEgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdQcm9ibGVtIG9jY3VycmVkIGdldHRpbmcgZm9ybSBkYXRhIGZvciBsb29rdXAgdGFibGU6ICcuJGNsYXNzKTsKICAgICRmb3JtZGF0YS0+dmFsaWRhdGUoKTsKICAgIGlmKCAkaXRlbV9pZCA8IDEgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdJbnZhbGlkIGl0ZW0gaWQgc3BlY2lmaWVkIGZvciBtb3ZlIGxvb2t1cCBpdGVtJyk7CgogICAgJGNsYXNzOjpkZWxldGUoJGl0ZW1faWQpOwp9CmNhdGNoKCBcRXhjZXB0aW9uICRlICkgewogICAgJG1vZC0+U2V0RXJyb3IoJGUtPkdldE1lc3NhZ2UoKSk7Cn0KCiRtb2QtPlJlZGlyZWN0VG9UYWIoJGlkLCRmb3JtZGF0YS0+cmV0dXJuX3RhYiwnJywkZm9ybWRhdGEtPnJldHVybl9hY3Rpb24pOwoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_lkp_edititem.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWRlZmluZWQoJ0NNU19WRVJTSU9OJykgKSBleGl0OwppZiggY21zbXMoKS0+aXNfZnJvbnRlbmRfcmVxdWVzdCgpICkgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbihfX01FVEhPRF9fLicgY2Fubm90IGJlIHVzZWQgZm9yIGZyb250ZW5kIHJlcXVlc3RzLicpOwoKJGZvcm1kYXRhID0gJG1vZCA9IG51bGw7CnRyeSB7CiAgICAkcGFyYW1zID0geHRfdXRpbHM6OmRlY3J5cHRfcGFyYW1zKCRwYXJhbXMpOwogICAgJG1vZHVsZV9uYW1lID0geHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywnX20nKTsKICAgICRjbGFzcyA9IHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ19jJyk7CiAgICAkaXRlbV9pZCA9IHh0X3BhcmFtOjpnZXRfaW50KCRwYXJhbXMsJ19pJyk7CiAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRtb2R1bGVfbmFtZSk7CiAgICBpZiggISRtb2QgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCJDb3VsZCBub3QgZ2V0IGluc3RhbmNlIG9mIG1vZHVsZSAiLiRtb2R1bGVfbmFtZSk7CiAgICAkZm9ybWRhdGEgPSAkY2xhc3M6OmdldF9hZGRlZGl0X2Zvcm1kYXRhKCk7CiAgICBpZiggISAkZm9ybWRhdGEgaW5zdGFuY2VvZiBcQ01TTVNFeHRcbG9va3VwX2Zvcm1fZGF0YSApIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ1Byb2JsZW0gb2NjdXJyZWQgZ2V0dGluZyBmb3JtIGRhdGEgZm9yIGxvb2t1cCB0YWJsZTogJy4kY2xhc3MpOwogICAgJGZvcm1kYXRhLT52YWxpZGF0ZSgpOwoKICAgICRpdGVtID0gbmV3ICRjbGFzczsKICAgIGlmKCAkaXRlbV9pZCA+IDAgKSAkaXRlbSA9ICRjbGFzczo6bG9hZCgkaXRlbV9pZCk7CgogICAgLy8gaGFuZGxlIHRoZSBmb3JtCiAgICBpZiggaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pICkgewogICAgICAgIC8vIEB0b2RvIGFkZCBzaG93bWVzc2FnZSBoZXJlLgogICAgICAgIGlmKCAkZm9ybWRhdGEtPmNhbmNlbF9tZXNzYWdlICkgJG1vZC0+U2V0TWVzc2FnZSgkZm9ybWRhdGEtPmNhbmNlbF9tZXNzYWdlKTsKICAgICAgICAkbW9kLT5SZWRpcmVjdFRvVGFiKCRpZCwkZm9ybWRhdGEtPnJldHVybl90YWIsJycsJGZvcm1kYXRhLT5yZXR1cm5fYWN0aW9uKTsKICAgIH0KICAgIGVsc2UgaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSApIHsKICAgICAgICAkaW5fZWRpdCA9ICRpdGVtLT5pZCA+IDA7CiAgICAgICAgJGl0ZW0tPm5hbWUgPSB4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCduYW1lJyk7CiAgICAgICAgJGl0ZW0tPmRlc2NyaXB0aW9uID0geHRfcGFyYW06OmdldF9odG1sKCRwYXJhbXMsJ2Rlc2NyaXB0aW9uJyk7CiAgICAgICAgJGl0ZW0tPnNhdmUoKTsKCiAgICAgICAgLy8gYWxsIGRvbmUuCiAgICAgICAgaWYoICRpbl9lZGl0ICkgewogICAgICAgICAgICBpZiggJGZvcm1kYXRhLT5wb3N0X2VkaXRfbWVzc2FnZSApICRtb2QtPlNldE1lc3NhZ2UoJGZvcm1kYXRhLT5wb3N0X2VkaXRfbWVzc2FnZSk7CiAgICAgICAgfSBlbHNlIGlmKCAkZm9ybWRhdGEtPnBvc3RfYWRkX21lc3NhZ2UgKSB7CiAgICAgICAgICAgICRtb2QtPlNldE1lc3NhZ2UoJGZvcm1kYXRhLT5wb3N0X2FkZF9tZXNzYWdlKTsKICAgICAgICB9CiAgICAgICAgJG1vZC0+UmVkaXJlY3RUb1RhYigkaWQsJGZvcm1kYXRhLT5yZXR1cm5fdGFiLCcnLCRmb3JtZGF0YS0+cmV0dXJuX2FjdGlvbik7CiAgICB9CgogICAgLy8gYnVpbGQgdGhlIGZvcm0KICAgICRwYXJtcyA9IGFycmF5KCdfbSc9PiRtb2R1bGVfbmFtZSwnX2MnPT4kY2xhc3MsJ19pJz0+JGl0ZW1faWQpOwogICAgJHRwbCA9ICR0aGlzLT5DcmVhdGVTbWFydHlUZW1wbGF0ZSgnYWRtaW5fbGtwX2VkaXRpdGVtLnRwbCcpOwogICAgJHRwbC0+YXNzaWduKCdpdGVtJywkaXRlbSk7CiAgICAkdHBsLT5hc3NpZ24oJ3RpdGxlJywkZm9ybWRhdGEtPnRpdGxlKTsKICAgICR0cGwtPmFzc2lnbignc3VidGl0bGUnLCRmb3JtZGF0YS0+c3VidGl0bGUpOwogICAgJHRwbC0+YXNzaWduKCdmb3Jtc3RhcnQnLCR0aGlzLT5YVENyZWF0ZUZvcm1TdGFydCgkaWQsJ2FkbWluX2xrcF9lZGl0aXRlbScsJHJldHVybmlkLHh0X3V0aWxzOjplbmNyeXB0X3BhcmFtcygkcGFybXMpKSk7CiAgICAkdHBsLT5hc3NpZ24oJ2Zvcm1lbmQnLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwogICAgJHRwbC0+ZGlzcGxheSgpOwp9CmNhdGNoKCBcRXhjZXB0aW9uICRlICkgewogICAgJG1vZC0+U2V0RXJyb3IoJGUtPkdldE1lc3NhZ2UoKSk7CiAgICAkbW9kLT5SZWRpcmVjdFRvVGFiKCRpZCwkZm9ybWRhdGEtPnJldHVybl90YWIsJycsJGZvcm1kYXRhLT5yZXR1cm5fYWN0aW9uKTsKfQojCiMgRU9GCiMK]]></data>
	</file>
	<file>
	  <filename>/action.admin_lkp_moveitem.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWRlZmluZWQoJ0NNU19WRVJTSU9OJykgKSBleGl0OwppZiggY21zbXMoKS0+aXNfZnJvbnRlbmRfcmVxdWVzdCgpICkgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbihfX01FVEhPRF9fLicgY2Fubm90IGJlIHVzZWQgZm9yIGZyb250ZW5kIHJlcXVlc3RzLicpOwoKJGZvcm1kYXRhID0gJG1vZCA9IG51bGw7CnRyeSB7CiAgICAkcGFyYW1zID0gXHh0X3V0aWxzOjpkZWNyeXB0X3BhcmFtcygkcGFyYW1zKTsKICAgICRtb2R1bGVfbmFtZSA9IHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ19tJyk7CiAgICAkY2xhc3MgPSB4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCdfYycpOwogICAgJGl0ZW1faWQgPSB4dF9wYXJhbTo6Z2V0X2ludCgkcGFyYW1zLCdfaScpOwogICAgJGRpciA9IHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ19kaXInLCd1cCcpOwogICAgJG1vZCA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJG1vZHVsZV9uYW1lKTsKICAgIGlmKCAhJG1vZCApIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oIkNvdWxkIG5vdCBnZXQgaW5zdGFuY2Ugb2YgbW9kdWxlICIuJG1vZHVsZV9uYW1lKTsKICAgICRmb3JtZGF0YSA9ICRjbGFzczo6Z2V0X2FkZGVkaXRfZm9ybWRhdGEoKTsKICAgIGlmKCAhICRmb3JtZGF0YSBpbnN0YW5jZW9mIFxDTVNNU0V4dFxsb29rdXBfZm9ybV9kYXRhICkgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignUHJvYmxlbSBvY2N1cnJlZCBnZXR0aW5nIGZvcm0gZGF0YSBmb3IgbG9va3VwIHRhYmxlOiAnLiRjbGFzcyk7CiAgICAkZm9ybWRhdGEtPnZhbGlkYXRlKCk7CiAgICBpZiggJGl0ZW1faWQgPCAxICkgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignSW52YWxpZCBpdGVtIGlkIHNwZWNpZmllZCBmb3IgbW92ZSBsb29rdXAgaXRlbScpOwogICAgJGl0ZW0gPSAkY2xhc3M6OmxvYWQoJGl0ZW1faWQpOwoKICAgIHN3aXRjaCggJGRpciApIHsKICAgIGNhc2UgJ3VwJzoKICAgICAgICAkY2xhc3M6Om1vdmVfdXAoJGl0ZW1faWQpOwogICAgICAgIGJyZWFrOwoKICAgIGNhc2UgJ2Rvd24nOgogICAgZGVmYXVsdDoKICAgICAgICAkY2xhc3M6Om1vdmVfZG93bigkaXRlbV9pZCk7CiAgICAgICAgYnJlYWs7CiAgICB9Cn0KY2F0Y2goIFxFeGNlcHRpb24gJGUgKSB7CiAgICAkbW9kLT5TZXRFcnJvcigkZS0+R2V0TWVzc2FnZSgpKTsKfQoKJG1vZC0+UmVkaXJlY3RUb1RhYigkaWQsJGZvcm1kYXRhLT5yZXR1cm5fdGFiLCcnLCRmb3JtZGF0YS0+cmV0dXJuX2FjdGlvbik7CgojCiMgRU9GCiMKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiAoIWlzc2V0KCRnQ21zKSkgZXhpdCgpOwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykpIHJldHVybiBmYWxzZTsKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZGVmYXVsdF9hZG1pbi50cGwnKTs=]]></data>
	</file>
	<file>
	  <filename>/action.deletetemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKaWYoICEgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpICkKICB7CiAgICAvLyB0b2RvLCBwZXJtaXNzaW9ucyBtZXNzYWdlIGhlcmUKICAgIHJldHVybjsKICB9CgokdGhlX2FjdGlvbiA9ICdkZWZhdWx0YWRtaW4nOwppZiggaXNzZXQoJHBhcmFtc1snZGVzdGFjdGlvbiddKSApCnsKICAkdGhlX2FjdGlvbiA9IHRyaW0oJHBhcmFtc1snZGVzdGFjdGlvbiddKTsKfQoKaWYoICFpc3NldCggJHBhcmFtc1snbW9kbmFtZSddICkgfHwgIWlzc2V0KCAkcGFyYW1zWydwcmVmaXgnXSApICkKICB7CiAgICAkcGFyYW1zWydlcnJvcnMnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKTsKICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsJHRoZV9hY3Rpb24sJHJldHVybmlkLCRwYXJhbXMpOwogICAgcmV0dXJuOwogIH0KJG1vZHVsZSA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgkcGFyYW1zWydtb2RuYW1lJ10pOwppZiggISRtb2R1bGUgKQogIHsKICAgICRwYXJhbXNbJ2Vycm9ycyddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpOwogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwkdGhlX2FjdGlvbiwkcmV0dXJuaWQsJHBhcmFtcyk7CiAgICByZXR1cm47CiAgfQoKCmlmKCAhKGlzc2V0KCRwYXJhbXNbJ3RlbXBsYXRlJ10pKSApCiAgewogICAgJHBhcmFtc1snZXJyb3JzJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJyk7CiAgICAkbW9kdWxlLT5SZWRpcmVjdFRvVGFiKCRpZCwgJHBhcmFtc1sneHRfYWN0aXZldGFiJ10sJycsJHRoZV9hY3Rpb24pOwogICAgcmV0dXJuOwogIH0KJHRlbXBsYXRlID0gaHRtbF9lbnRpdHlfZGVjb2RlKHRyaW0oJHBhcmFtc1sncHJlZml4J10uJHBhcmFtc1sndGVtcGxhdGUnXSkpOwokbW9kdWxlLT5EZWxldGVUZW1wbGF0ZSgkdGVtcGxhdGUpOwokbW9kdWxlLT5SZWRpcmVjdFRvQWRtaW5UYWIoKTsK]]></data>
	</file>
	<file>
	  <filename>/action.edittemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKaWYoICFkZWZpbmVkKCdDTVNfVkVSU0lPTicpICkgZXhpdDsKCiR0ZW1wbGF0ZV9uYW1lID0gXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ3RlbXBsYXRlJyk7CiRwcmVmaXggPSBceHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywncHJlZml4Jyk7CiRtb2RlID0gXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ21vZGUnLCdhZGQnKTsKJHRpdGxlID0gXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ3RpdGxlJyk7CiRtb2RuYW1lID0gXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ21vZG5hbWUnKTsKJGRlc3RhY3Rpb24gPSBceHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywnZGVzdGFjdGlvbicsJ2RlZmF1bHRhZG1pbicpOwokYWN0aXZldGFiID0gXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ2FjdGl2ZXRhYicpOwokaW5mbyA9IFx4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCdpbmZvJyk7CiRtb2RkZXNjID0gXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ21vZGRlc2MnKTsKJGRlZmF1bHR0ZW1wbGF0ZXByZWYgPSBceHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywnZGVmYXVsdHRlbXBsYXRlcHJlZicpOwokZGVmYXVsdHByZWZuYW1lID0gXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ2RlZmF1bHRwcmVmbmFtZScpOwppZiggIWlzc2V0KCRwYXJhbXNbJ29yaWduYW1lJ10pICkgJHBhcmFtc1snb3JpZ25hbWUnXSA9ICR0ZW1wbGF0ZV9uYW1lOwokdGVtcGxhdGVjb250ZW50ID0gbnVsbDsKCiRnZXRfZmFjdG9yeV90ZW1wbGF0ZV9jb250ZW50ID0gZnVuY3Rpb24oJHRwbG5hbWUsJG1vZHVsZSkgewogICAgJGNvbnRlbnQgPSBudWxsOwogICAgaWYoIGVuZHN3aXRoKCAkdHBsbmFtZSwgJy50cGwnKSApIHsKICAgICAgICAkZm4gPSAkbW9kdWxlLT5maW5kX21vZHVsZV9maWxlKCd0ZW1wbGF0ZXMvJy4kdHBsbmFtZSk7CiAgICAgICAgaWYoICRmbiAmJiBpc19maWxlKCRmbikgKSAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmbik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkY29udGVudCA9ICRtb2R1bGUtPkdldFRlbXBsYXRlKCR0cGxuYW1lKTsKICAgICAgICBpZiggISRjb250ZW50ICkgJGNvbnRlbnQgPSAkbW9kdWxlLT5HZXRQcmVmZXJlbmNlKCR0cGxuYW1lKTsKICAgIH0KICAgIHJldHVybiAkY29udGVudDsKfTsKCnRyeSB7CiAgICBpZiggISRtb2RuYW1lICkgdGhyb3cgbmV3IFxFeGNlcHRpb24oJHRoaXMtPkxhbmcoJ2Vycm9yX21pc3NpbmdwYXJhbScpKTsKICAgICRtb2R1bGUgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJG1vZG5hbWUpOwogICAgaWYoICEkbW9kdWxlICkgdGhyb3cgbmV3IFxFeGNlcHRpb24oJHRoaXMtPkxhbmcoJ2Vycm9yX21pc3NpbmdwYXJhbScpKTsKICAgIGlmKCAhJHByZWZpeCApIHRocm93IG5ldyBcRXhjZXB0aW9uKCR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5ncGFyYW0nKSk7CiAgICBpZiggISRtb2RlIHx8ICEkdGl0bGUgKSB0aHJvdyBuZXcgXEV4Y2VwdGlvbigkdGhpcy0+TGFuZygnZXJyb3JfbWlzc2luZ3BhcmFtJykpOwogICAgc3dpdGNoKCAkbW9kZSApIHsKICAgIGNhc2UgJ2FkZCc6CiAgICAgICAgJHRlbXBsYXRlY29udGVudCA9ICRnZXRfZmFjdG9yeV90ZW1wbGF0ZV9jb250ZW50KCRkZWZhdWx0dGVtcGxhdGVwcmVmLCRtb2R1bGUpOwogICAgICAgIGJyZWFrOwogICAgY2FzZSAnZWRpdCc6CiAgICAgICAgJHRlbXBsYXRlY29udGVudCA9ICRtb2R1bGUtPkdldFRlbXBsYXRlKCRwcmVmaXguJHRlbXBsYXRlX25hbWUpOwogICAgICAgIGJyZWFrOwogICAgfQoKICAgIHRyeSB7CiAgICAgICAgJG1vZHVsZS0+U2V0Q3VycmVudEFjdGlvbigkZGVzdGFjdGlvbik7CiAgICAgICAgaWYoIGlzc2V0KCRwYXJhbXNbJ3h0X2NhbmNlbCddKSApIHsKICAgICAgICAgICAgJG1vZHVsZS0+UmVkaXJlY3RUb0FkbWluVGFiKCRhY3RpdmV0YWIpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKCBpc3NldCgkcGFyYW1zWyd4dF9yZXNldCddKSApIHsKICAgICAgICAgICAgJHRlbXBsYXRlY29udGVudCA9ICRnZXRfZmFjdG9yeV90ZW1wbGF0ZV9jb250ZW50KCRkZWZhdWx0dGVtcGxhdGVwcmVmLCRtb2R1bGUpOwogICAgICAgICAgICBpZiggISR0ZW1wbGF0ZWNvbnRlbnQgKSAkdGVtcGxhdGVjb250ZW50ID0gJG1vZHVsZS0+R2V0UHJlZmVyZW5jZSgkZGVmYXVsdHRlbXBsYXRlcHJlZik7CiAgICAgICAgICAgIGVjaG8gJHRoaXMtPlNob3dNZXNzYWdlKCR0aGlzLT5MYW5nKCdtc2dfdGVtcGxhdGVfcmVzZXQnKSk7CiAgICAgICAgfQogICAgICAgIGlmKCBpc3NldCgkcGFyYW1zWyd4dF9zdWJtaXQnXSkgfHwgaXNzZXQoJHBhcmFtc1sneHRfYXBwbHknXSkgKSB7CiAgICAgICAgICAgICR0ZW1wbGF0ZV9uYW1lID0gXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ3RlbXBsYXRlJywkdGVtcGxhdGVfbmFtZSk7CiAgICAgICAgICAgIGlmKCAhJHRlbXBsYXRlX25hbWUgKSB0aHJvdyBuZXcgXEV4Y2VwdGlvbigkdGhpcy0+TGFuZygnZXJyb3JfdGVtcGxhdGVuYW1lYmFkJykpOwogICAgICAgICAgICBpZiggIXByZWdfbWF0Y2goJy9bYS16QS1aMC05XF9dKi8nLCRwYXJhbXNbJ3RlbXBsYXRlJ10pICkgdGhyb3cgbmV3IFxFeGNlcHRpb24oJHRoaXMtPkxhbmcoJ2Vycm9yX3RlbXBsYXRlbmFtZWJhZCcpKTsKCiAgICAgICAgICAgICR0ZW1wbGF0ZWNvbnRlbnQgPSAkcGFyYW1zWyd0ZW1wbGF0ZWNvbnRlbnQnXTsKICAgICAgICAgICAgJG9yaWduYW1lID0gXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ29yaWduYW1lJyk7CiAgICAgICAgICAgICRjdXJyZW50X2RmbHQgPSAkbW9kdWxlLT5HZXRQcmVmZXJlbmNlKCRkZWZhdWx0cHJlZm5hbWUpOwogICAgICAgICAgICBpZiggJHRlbXBsYXRlX25hbWUgIT0gJG9yaWduYW1lICYmICRvcmlnbmFtZSApIHsKICAgICAgICAgICAgICAgIC8vIHRlbXBsYXRlIHJlbmFtZWQKICAgICAgICAgICAgICAgICRtb2R1bGUtPkRlbGV0ZVRlbXBsYXRlKCRwcmVmaXguJG9yaWduYW1lKTsKICAgICAgICAgICAgICAgIGlmKCAkb3JpZ25hbWUgJiYgJG9yaWduYW1lID09ICRjdXJyZW50X2RmbHQgKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gd2UgYXJlIGFkanVzdGluZyB0aGUgZGVmYXVsdCB0ZW1wbGF0ZQogICAgICAgICAgICAgICAgICAgICRtb2R1bGUtPlNldFByZWZlcmVuY2UoJGRlZmF1bHRwcmVmbmFtZSwkdGVtcGxhdGVfbmFtZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG1vZHVsZS0+U2V0VGVtcGxhdGUoJHByZWZpeC4kdGVtcGxhdGVfbmFtZSwkdGVtcGxhdGVjb250ZW50KTsKCiAgICAgICAgICAgIGlmKCBpc3NldCgkcGFyYW1zWyd4dF9zdWJtaXQnXSkgKSB7CiAgICAgICAgICAgICAgICAkbW9kdWxlLT5TZXRNZXNzYWdlKCR0aGlzLT5MYW5nKCdtc2dfdGVtcGxhdGVzYXZlZCcpKTsKICAgICAgICAgICAgICAgICRtb2R1bGUtPlJlZGlyZWN0VG9BZG1pblRhYigkYWN0aXZldGFiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGVjaG8gJHRoaXMtPlNob3dNZXNzYWdlKCR0aGlzLT5MYW5nKCdtc2dfdGVtcGxhdGVzYXZlZCcpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGNhdGNoKCBcRXhjZXB0aW9uICRlICkgewogICAgICAgIGVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJGUtPkdldE1lc3NhZ2UoKSk7CiAgICB9Cn0KY2F0Y2goIFxFeGNlcHRpb24gJGUgKSB7CiAgICAkdGhpcy0+U2V0RXJyb3IoJGUtPkdldE1lc3NhZ2UoKSk7CiAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4nLCRyZXR1cm5pZCwkcGFyYW1zKTsKfQoKCi8vIGhhbmRsZSBlcnJvcnMuCmlmKCBpc3NldCgkcGFyYW1zWydlcnJvcnMnXSkgKSBlY2hvICRtb2R1bGUtPlNob3dFcnJvcnMoJHBhcmFtc1snZXJyb3JzJ10pOwoKdW5zZXQoJHBhcmFtc1sneHRfc3VibWl0J10sJHBhcmFtc1sneHRfYXBwbHknXSwkcGFyYW1zWyd4dF9yZXNldCddLCRwYXJhbXNbJ3h0X2NhbmNlbCddLCRwYXJhbXNbJ3RlbXBsYXRlY29udGVudCddKTsKJHRoZW1lID0gXGNtc191dGlsczo6Z2V0X3RoZW1lX29iamVjdCgpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlJyxjbXNfaHRtbF9lbnRpdHlfZGVjb2RlKCR0aXRsZSkpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsICR0aGlzLT5YVENyZWF0ZUZvcm1TdGFydCgkaWQsICdlZGl0dGVtcGxhdGUnLCRyZXR1cm5pZCwkcGFyYW1zKSk7CiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiRzbWFydHktPmFzc2lnbigndGVtcGxhdGVuYW1lJywkdGVtcGxhdGVfbmFtZSk7CiRzbWFydHktPmFzc2lnbigneHQnLCR0aGlzKTsKJHNtYXJ0eS0+YXNzaWduKCdhY3Rpb25pZCcsJGlkKTsKJHNtYXJ0eS0+YXNzaWduKCdtb2RlJywkbW9kZSk7CiRzbWFydHktPmFzc2lnbignbW9kbmFtZScsJG1vZG5hbWUpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlJywkdGl0bGUpOwokc21hcnR5LT5hc3NpZ24oJ21vZGRlc2MnLCRtb2RkZXNjKTsKJHNtYXJ0eS0+YXNzaWduKCdpbmZvJywkaW5mbyk7CiRzbWFydHktPmFzc2lnbigndGVtcGxhdGVjb250ZW50JywkdGVtcGxhdGVjb250ZW50KTsKJHNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfdGVtcGxhdGVuYW1lJywkdGhpcy0+TGFuZygncHJvbXB0X3RlbXBsYXRlbmFtZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfdGVtcGxhdGUnLCR0aGlzLT5MYW5nKCdwcm9tcHRfdGVtcGxhdGUnKSk7CmVjaG8gJHRoaXMtPk1vZFByb2Nlc3NUZW1wbGF0ZSgnZWRpdHRlbXBsYXRlLnRwbCcpOwovL2VjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZWRpdHRlbXBsYXRlLnRwbCcpOwo=]]></data>
	</file>
	<file>
	  <filename>/action.generate_module_checksums.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQpuYW1lc3BhY2UgQ01TTVNFeHQ7Cgp1c2UgQ01TTVNFeHRcaW50ZXJuYWxcTW9kdWxlSW50ZWdyaXR5VG9vbHM7CnVzZSBDTVNNU0V4dFxpbnRlcm5hbFxNb2R1bGVJbnRlZ3JpdHlDb2RlR2VuZXJhdG9yOwp1c2UgTW9kdWxlT3BlcmF0aW9uczsKdXNlIHh0X3BhcmFtOwoKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQoKTsKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgTW9kdWxlcycpKSByZXR1cm47CiRjb25maWcgPSBcQ01TTVNFeHRcY29uZmlnOjpHZXRJbnN0YW5jZSgpOwppZiggIWlzc2V0KCRjb25maWdbJ3h0X2RldmVsb3Blcl9tb2RlJ10pIHx8ICEkY29uZmlnWyd4dF9kZXZlbG9wZXJfbW9kZSddICkgcmV0dXJuOwoKdHJ5IHsKICAgICRhY3RfbW9kdWxlID0geHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywnYWN0X21vZHVsZScpOwogICAgJGFjdF9nZW5lcmF0ZSA9IHh0X3BhcmFtOjpnZXRfaW50KCRwYXJhbXMsJ2dlbmVyYXRlJyk7CiAgICBpZiggJGFjdF9nZW5lcmF0ZSAmJiAkYWN0X21vZHVsZSApIHsKICAgICAgICAvLyBnZXQgdGhlIG1vZHVsZQogICAgICAgICRtb2QgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRhY3RfbW9kdWxlKTsKICAgICAgICBpZiggISRtb2QgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCJDb3VsZCBub3QgZ2V0IGluc3RhbmNlIG9mIG1vZHVsZSAkYWN0X21vZHVsZSIpOwogICAgICAgIGlmKCAhJG1vZCBpbnN0YW5jZW9mIENNU01TRXh0ICkgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiJGFjdF9tb2R1bGUgaXMgbm90IGRlcml2ZWQgZnJvbSBDTVNNU0V4dCIpOwoKICAgICAgICAkZ2VuZXJhdG9yID0gbmV3IE1vZHVsZUludGVncml0eUNvZGVHZW5lcmF0b3IoJGFjdF9tb2R1bGUpOwogICAgICAgICRnZW5lcmF0b3ItPmdlbmVyYXRlKCk7CgogICAgICAgICR0aGlzLT5TZXRNZXNzYWdlKCR0aGlzLT5MYW5nKCdtc2dfdnJmeV9jaGVja3N1bWdlbmVyYXRlZCcsJGFjdF9tb2R1bGUpKTsKICAgIH0KICAgIHVuc2V0KCRhY3RfbW9kdWxlLCRhY3RfZ2VuZXJhdGUpOwoKICAgIC8vIGdldCBhIGxpc3Qgb2YgbW9kdWxlcyBkZXJpdmVkIGZyb20gQ01TTVNFeHQKICAgICRtb2R1bGVfbGlzdCA9IGFycmF5KCk7CiAgICAkYWxsX21vZHVsZXMgPSAkdGhpcy0+Y21zLT5HZXRNb2R1bGVPcGVyYXRpb25zKCktPkdldEluc3RhbGxlZE1vZHVsZXMoKTsKICAgIGZvcmVhY2goICRhbGxfbW9kdWxlcyBhcyAkbW9kdWxlX25hbWUgKSB7CiAgICAgICAgJG1vZCA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJG1vZHVsZV9uYW1lKTsKICAgICAgICBpZiggISRtb2QgKSBjb250aW51ZTsKICAgICAgICBpZiggISRtb2QgaW5zdGFuY2VvZiBDTVNNU0V4dCApIGNvbnRpbnVlOwoKICAgICAgICAkZGlyID0gJG1vZC0+R2V0TW9kdWxlUGF0aCgpOwogICAgICAgICRyZWMgPSBhcnJheSgnbmFtZSc9PiRtb2R1bGVfbmFtZSwndmVyc2lvbic9PiRtb2QtPkdldFZlcnNpb24oKSwnaGFzX2NoZWNrc3VtJz0+MCk7CiAgICAgICAgaWYoIE1vZHVsZUludGVncml0eVRvb2xzOjpoYXNfY2hlY2tzdW1fZGF0YSgkbW9kKSApICRyZWNbJ2hhc19jaGVja3N1bSddID0gMTsKICAgICAgICAkcmVjWydnZW5lcmF0ZV91cmwnXSA9ICR0aGlzLT5jcmVhdGVfdXJsKCRpZCwnZ2VuZXJhdGVfbW9kdWxlX2NoZWNrc3VtcycsJHJldHVybmlkLGFycmF5KCdhY3RfbW9kdWxlJz0+JG1vZHVsZV9uYW1lLCdnZW5lcmF0ZSc9PjEpKTsKICAgICAgICAkbW9kdWxlX2xpc3RbXSA9ICRyZWM7CiAgICB9CgogICAgJHRwbCA9ICR0aGlzLT5DcmVhdGVTbWFydHlUZW1wbGF0ZSgnZ2VuZXJhdGVfbW9kdWxlX2NoZWNrc3Vtcy50cGwnKTsKICAgICR0cGwtPmFzc2lnbigncmV0dXJuX3VybCcsJHRoaXMtPmNyZWF0ZV91cmwoJGlkLCdkZWZhdWx0YWRtaW4nLCRyZXR1cm5pZCkpOwogICAgJHRwbC0+YXNzaWduKCdtb2R1bGVfbGlzdCcsJG1vZHVsZV9saXN0KTsKICAgICR0cGwtPmRpc3BsYXkoKTsKfQpjYXRjaCggXEV4Y2VwdGlvbiAkZSApIHsKICAgIGVjaG8gJHRoaXMtPkRpc3BsYXlFcnJvck1lc3NhZ2UoJGUtPkdldE1lc3NhZ2UoKSwnZXJyb3InKTsKfQoKIwojIEVPRgojCg==]]></data>
	</file>
	<file>
	  <filename>/action.getfile.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKLy8gZG93bmxvYWQgYW4gaW1hZ2UuLi4gb3IgYSBmaWxlLCBvciBkdW1wIGFuIGltYWdlIHRvIHN0ZG91dAovLyBqdXN0IHdpdGggb2JmdXNjYXRpb24gc28gdGhhdCB0aGUgZmlsZW5hbWUgYW5kIHBhdGggYXJlIG5vdCBvYnZpb3VzLgokcGFyYW1zID0gXHh0X3V0aWxzOjpkZWNyeXB0X3BhcmFtcyggJHBhcmFtcyApOwokZmlsZSA9IFx4dF9wYXJhbTo6Z2V0X3N0cmluZyggJHBhcmFtcywgJ2ZpbGUnICk7CiRkbCA9IFx4dF9wYXJhbTo6Z2V0X2Jvb2woICRwYXJhbXMsICdkb3dubG9hZCcgKTsKJG5vY2FjaGUgPSBceHRfcGFyYW06OmdldF9ib29sKCAkcGFyYW1zLCAnbm9jYWNoZScgKTsKaWYoICRmaWxlICYmIGlzX2ZpbGUoICRmaWxlICkgKSB7CiAgICAkbWltZV90eXBlID0gXHh0X3V0aWxzOjpnZXRfbWltZV90eXBlKCAkZmlsZSApOwogICAgaWYoICEgc3RhcnRzd2l0aCggJG1pbWVfdHlwZSwgJ2ltYWdlLycpICkgJGRsID0gdHJ1ZTsKICAgIGlmKCAkZGwgKSBceHRfdXRpbHM6OnNlbmRfZmlsZV9hbmRfZXhpdCggJGZpbGUgKTsKCiAgICBpZiggJG5vY2FjaGUgKSB7CiAgICAgICAgaGVhZGVyKCdDYWNoZS1Db250cm9sOiBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTAnKTsKICAgICAgICBoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IHByaXZhdGUnLGZhbHNlKTsKICAgIH0KICAgIGhlYWRlcignQ29udGVudC10eXBlOiAnLiRtaW1lX3R5cGUpOwogICAgaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJyAuIGZpbGVzaXplKCRmaWxlKSk7CgogICAgJGNodW5rc2l6ZSA9IDY1NTM1OwogICAgJGhhbmRsZT1mb3BlbigkZmlsZSwncmInKTsKICAgICRjb250ZW50cyA9ICcnOwogICAgZG8gewogICAgICAgICRkYXRhID0gZnJlYWQoJGhhbmRsZSwkY2h1bmtzaXplKTsKICAgICAgICBpZiggc3RybGVuKCRkYXRhKSA9PSAwICkgYnJlYWs7CiAgICAgICAgcHJpbnQoJGRhdGEpOwogICAgfSB3aGlsZSh0cnVlKTsKICAgIGZjbG9zZSgkaGFuZGxlKTsKfQpleGl0KCk7]]></data>
	</file>
	<file>
	  <filename>/action.makedefaulttemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKaWYoICFpc3NldCggJGdDbXMgKSApIGV4aXQoKTsKCi8vIGlmKCAhICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKSApCi8vICAgewovLyAgICAgLy8gdG9kbywgcGVybWlzc2lvbnMgbWVzc2FnZSBoZXJlCi8vICAgICByZXR1cm47Ci8vICAgfQoKJHRoZV9hY3Rpb24gPSAnZGVmYXVsdGFkbWluJzsKaWYoIGlzc2V0KCRwYXJhbXNbJ2Rlc3RhY3Rpb24nXSkgKQp7CiAgJHRoZV9hY3Rpb24gPSB0cmltKCRwYXJhbXNbJ2Rlc3RhY3Rpb24nXSk7Cn0KCmlmKCAhaXNzZXQoICRwYXJhbXNbJ21vZG5hbWUnXSApICkKICB7CiAgICAkcGFyYW1zWydlcnJvcnMnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKTsKICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsJHRoZV9hY3Rpb24sJHJldHVybmlkLCRwYXJhbXMpOwogICAgcmV0dXJuOwogIH0KJG1vZHVsZSA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgkcGFyYW1zWydtb2RuYW1lJ10pOwppZiggISRtb2R1bGUgKQogIHsKICAgICRwYXJhbXNbJ2Vycm9ycyddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpOwogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwkdGhlX2FjdGlvbiwkcmV0dXJuaWQsJHBhcmFtcyk7CiAgICByZXR1cm47CiAgfQoKaWYoICFpc3NldCggJHBhcmFtc1sndGVtcGxhdGUnXSApICkKICB7CiAgICAkcGFyYW1zWydlcnJvcnMnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKTsKICAgICRtb2R1bGUtPlJlZGlyZWN0VG9BZG1pblRhYigpOwogICAgcmV0dXJuOwogIH0KCmlmKCAhaXNzZXQoICRwYXJhbXNbJ2RlZmF1bHRwcmVmbmFtZSddICkgKQogIHsKICAgICRwYXJhbXNbJ2Vycm9ycyddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpOwogICAgJG1vZHVsZS0+UmVkaXJlY3RUb0FkbWluVGFiKCk7CiAgICByZXR1cm47CiAgfQokbW9kdWxlLT5TZXRQcmVmZXJlbmNlKCRwYXJhbXNbJ2RlZmF1bHRwcmVmbmFtZSddLCRwYXJhbXNbJ3RlbXBsYXRlJ10pOwoKJG1vZHVsZS0+UmVkaXJlY3RUb0FkbWluVGFiKCkKLy8gRU9GCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.setdefaulttemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CiR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKTsgLy9Eb24ndCBhY3R1YWxseSBjYXJlLiAgSnVzdCBmb3JjZSBhIGxvZ2luLgoKaWYoICFpc3NldCgkcGFyYW1zWydkZXN0bW9kdWxlJ10pICkgewogIHN0YWNrX3RyYWNlKCk7CiAgZGllKCc8YnIvPkRlc3RpbmF0aW9uIG1vZHVsZSBub3Qgc2V0Jyk7Cn0KJG1vZHVsZSA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgkcGFyYW1zWydkZXN0bW9kdWxlJ10pOwppZiggIWlzX29iamVjdCgkbW9kdWxlKSApIHsKICBkaWUoJzxici8+Q291bGQgbm90IGZpbmQgZGVzdGluYXRpb24gbW9kdWxlJyk7Cn0KCmlmKCBpc3NldCgkcGFyYW1zWydyZXNldHRvZGVmYXVsdCddKSAmJgogICAgaXNzZXQoJHBhcmFtc1sncHJlZm5hbWUnXSkgJiYKICAgIGlzc2V0KCRwYXJhbXNbJ2ZpbGVuYW1lJ10pICkgewoKICAgICRwYXJhbXNbJ3ByZWZuYW1lJ10gPSBmaWx0ZXJfdmFyKCRwYXJhbXNbJ3ByZWZuYW1lJ10sRklMVEVSX1NBTklUSVpFX1NUUklORyk7CiAgICAkcGFyYW1zWydmaWxlbmFtZSddID0gZmlsdGVyX3ZhcigkcGFyYW1zWydmaWxlbmFtZSddLEZJTFRFUl9TQU5JVElaRV9TVFJJTkcpOwogICAgaWYoICRwYXJhbXNbJ2ZpbGVuYW1lJ10gKSAkcGFyYW1zWydmaWxlbmFtZSddID0gYmFzZW5hbWUoJHBhcmFtc1snZmlsZW5hbWUnXSk7CiAgICBpZiggJHBhcmFtc1sncHJlZm5hbWUnXSAmJiAkcGFyYW1zWydmaWxlbmFtZSddICkgewogICAgICAgICRmbiA9ICRtb2R1bGUtPkdldE1vZHVsZVBhdGgoKS4nL3RlbXBsYXRlcy8nLiRwYXJhbXNbJ2ZpbGVuYW1lJ107CiAgICAgICAgaWYoIGlzX2ZpbGUoICRmbiApICkgewogICAgICAgICAgICAkdGVtcGxhdGUgPSBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsKICAgICAgICAgICAgJG1vZHVsZS0+U2V0VGVtcGxhdGUoJHBhcmFtc1sncHJlZm5hbWUnXSwkdGVtcGxhdGUpOwogICAgICAgICAgICAkbW9kdWxlLT5SZW1vdmVQcmVmZXJlbmNlKCRwYXJhbXNbJ3ByZWZuYW1lJ10pOyAvLyBjbGVhciBvbGQgY3J1ZnQuCiAgICAgICAgICAgIGF1ZGl0KCcnLCRtb2R1bGUtPkdldE5hbWUoKSwnUmVzZXQgdGhlIGRlZmF1bHQgdGVtcGxhdGUgZm9yICcuJHBhcmFtc1sncHJlZm5hbWUnXSk7CiAgICAgICAgfQogICAgfQp9CmVsc2UgaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSAmJiBpc3NldCgkcGFyYW1zWydwcmVmbmFtZSddKSApIHsKICAgICRtb2R1bGUtPlNldFRlbXBsYXRlKCRwYXJhbXNbJ3ByZWZuYW1lJ10sJHBhcmFtc1snaW5wdXRfdGVtcGxhdGUnXSk7CiAgICAkbW9kdWxlLT5SZW1vdmVQcmVmZXJlbmNlKCRwYXJhbXNbJ3ByZWZuYW1lJ10pOyAvLyBjbGVhciBvbGQgY3J1ZnQuCiAgICBhdWRpdCgnJywkbW9kdWxlLT5HZXROYW1lKCksJ1RlbXBsYXRlICcuJHBhcmFtc1sncHJlZm5hbWUnXS4nIHdhcyBlZGl0ZWQnKTsKfQoKJHRoZV90YWIgPSB4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCd4dF9hY3RpdmV0YWInKTsKJHRoZV9hY3Rpb24gPSAnZGVmYXVsdGFkbWluJzsKaWYoIGlzc2V0KCRwYXJhbXNbJ2Rlc3RhY3Rpb24nXSkgKSAkdGhlX2FjdGlvbiA9IHRyaW0oJHBhcmFtc1snZGVzdGFjdGlvbiddKTsKCiRtb2R1bGUtPlNldE1lc3NhZ2UoJHRoaXMtPkxhbmcoJ21zZ190ZW1wbGF0ZXNhdmVkJykpOwokbW9kdWxlLT5SZWRpcmVjdFRvQWRtaW5UYWIoJHRoZV90YWIpOwoKCi8vIEVPRgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.showmessage.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgokbXNna2V5ID0geHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywneHRfbXNna2V5Jyk7CiRtc2cgPSB4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCd4dF9tc2cnKTsKJGVycm9yID0geHRfcGFyYW06OmdldF9ib29sKCRwYXJhbXMsJ3h0X2Jvb2wnKTsKJHRpdGxlID0geHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywneHRfdGl0bGUnKTsKCiRzdHIgPSAkbXNnOwppZiggISRtc2cgJiYgJG1zZ2tleSApICRzdHIgPSBceHRfbWVzc2FnZTo6Z2V0KCRtc2drZXkpOwoKJHRoaXMtPlNob3dGb3JtYXR0ZWRNZXNzYWdlKCRzdHIsJGVycm9yLCR0aXRsZSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/action.verify_modules.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQp1c2UgQ01TTVNFeHRcaW50ZXJuYWxcTW9kdWxlSW50ZWdyaXR5VG9vbHM7CgppZiAoIWlzc2V0KCRnQ21zKSkgZXhpdCgpOwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykpIHJldHVybiBmYWxzZTsKCnRyeSB7CiAgICBNb2R1bGVJbnRlZ3JpdHlUb29sczo6Y2xlYXJfY2FjaGVkX2NoZWNrcygpOwogICAgJHJlcG9ydF9kYXRhID0gTW9kdWxlSW50ZWdyaXR5VG9vbHM6OmNoZWNrX25vbmNvcmVfbW9kdWxlcygpOwoKICAgIC8vIGdpdmUgZXZlcnl0aGluZyB0byBzbWFydHkKICAgICR0cGwgPSAkdGhpcy0+Q3JlYXRlU21hcnR5VGVtcGxhdGUoJ3ZlcmlmeV9tb2R1bGVzLnRwbCcpOwogICAgJHRwbC0+YXNzaWduKCdyZXR1cm5fdXJsJywkdGhpcy0+Y3JlYXRlX3VybCgkaWQsJ2RlZmF1bHRhZG1pbicsJHJldHVybmlkKSk7CiAgICAkdHBsLT5hc3NpZ24oJ3JlcG9ydF9kYXRhJywkcmVwb3J0X2RhdGEpOwogICAgJHRwbC0+ZGlzcGxheSgpOwp9CmNhdGNoKCBcRXhjZXB0aW9uICRlICkgewogICAgZWNobyAkdGhpcy0+RGlzcGxheUVycm9yTWVzc2FnZSgkZS0+R2V0TWVzc2FnZSgpLCdlcnJvcicpOwp9CgojCiMgRU9GCiMK]]></data>
	</file>
	<file>
	  <filename>/CMSMSExt.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQojIGJvb3RzdHJhcCBDTVNNU0V4dAppbmNsdWRlX29uY2UgY21zX2pvaW5fcGF0aCggX19ESVJfXyAsICdsaWInICwgJ2Ntc21zX2V4dF9ib290c3RyYXAuaW5jLnBocCcpOwoKdXNlIENNU01TXEhvb2tNYW5hZ2VyOwp1c2UgQ01TTVNFeHRcRmlsZVRlbXBsYXRlUmVzb3VyY2U7CnVzZSBDTVNNU0V4dFxpbnRlcm5hbFxzZXR0aW5nczsKdXNlIENNU01TRXh0XHNtYXJ0eV9wbHVnaW5zOwoKLyoqCiAqIEEgYmFzZSBjbGFzcyBmb3IgQ01TTVMgbW9kdWxlcwogKiB0byBwcm92aWRlIG9wdGltaXphdGlvbnMKICogYW5kIGNvbnZlbmllbmNlcyB0aGF0IGFyZSBub3QgYnVpbHQgaW50byBDTVNNUy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICovCmNsYXNzIENNU01TRXh0IGV4dGVuZHMgXENNU01TRXh0XFhUTW9kdWxlCnsKICAvKioKICAgKiBAaWdub3JlCiAgICovCiAgcHJpdmF0ZSBzdGF0aWMgJF9pbml0aWFsaXplZDsKICBwcml2YXRlIHN0YXRpYyAkYXBpX2FjdGlvbl9uYW1lID0gJyc7CiAgCiAgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogIHsKICAgIHNwbF9hdXRvbG9hZF9yZWdpc3RlcihbJHRoaXMsICdhdXRvbG9hZCddKTsKICAgIAogICAgcGFyZW50OjpfX2NvbnN0cnVjdCgpOwogIAogICAgZ2xvYmFsICRDTVNfSU5TVEFMTF9QQUdFLCAkQ01TX1BIQVJfSU5TVEFMTDsKICAKICAgIGlmKGlzc2V0KCRDTVNfSU5TVEFMTF9QQUdFKSB8fCBpc3NldCgkQ01TX1BIQVJfSU5TVEFMTCkpeyByZXR1cm47IH0KICAgIAogICAgJGNsYXNzID0gZ2V0X2NsYXNzKCR0aGlzKTsKICAKICAgIGlmKCFkZWZpbmVkKCdNT0RfJyAuIHN0cnRvdXBwZXIoJGNsYXNzKSkpCiAgICB7CiAgICAgIC8qKgogICAgICAgKiBhbGxvdyB0byBhY2Nlc3MgdGhlIE1vZHVsZSBjbGFzcyBhcyBhICBjb25zdGFudCBNT0RfTVlNT0RVTEVOQU1FCiAgICAgICAqIG5vdyB0aGlzIGNhbiBiZSBleHBsaWNpdGx5IHNldCB0byBNT0RfQ01TTVNFWFQKICAgICAgICogYXMgdGhlIGluaGVyaXRhYmxlIGNsYXNzIGlzIFxDTVNNU0V4dFxYVE1vZHVsZQogICAgICAgKiBhbmQgYWxsIHRoYXQgbG9naWMgaGFzIG1vdmVkIHRvIGl0CiAgICAgICAqCiAgICAgICAqIEBpZ25vcmUKICAgICAgICovCiAgICAgIAogICAgICBkZWZpbmUoJ01PRF9DTVNNU0VYVCcsIF9fQ0xBU1NfXyk7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogTWFrZSBzdXJlIHdlIGRvbid0IHJ1biB0aGUgZm9sbG93aW5nIG1vcmUgdGhhbiBvbmNlCiAgICAgKi8KICAgIGlmKHNlbGY6OiRfaW5pdGlhbGl6ZWQpIHsgcmV0dXJuOyB9CiAgCiAgICAjIGhhdmUgbm90IHJ1biB0aGlzIHlldCBzbyBzZXQgdGhlIGZsYWcgYW5kIG1vdmUgb24KICAgIHNlbGY6OiRfaW5pdGlhbGl6ZWQgPSBUUlVFOwogICAgCiAgICAjIHdlJ2xsIHVzZSBwaWQgdG8gY3JlYXRlIGEgdW5pcXVlIHJvdXRlIGZvciB0aGUgbW9kdWxlIGFwaSBhY3Rpb24gIHVyaQogICAgJHBpZCA9IGdldG15cGlkKCk7CiAgICBzZWxmOjokYXBpX2FjdGlvbl9uYW1lID0gJ2Ntc21zZXh0LScgLiAkcGlkIC4gJy1hcGknOwogICAgJHJldHVybmlkID0gY21zbXMoKS0+R2V0Q29udGVudE9wZXJhdGlvbnMoKS0+R2V0RGVmYXVsdENvbnRlbnQoKTsKICAgIAogICAgJHBhcm1zID0gWwogICAgICAnYWN0aW9uJyAgID0+IHNlbGY6OiRhcGlfYWN0aW9uX25hbWUgLAogICAgICAncmV0dXJuaWQnID0+ICRyZXR1cm5pZCwKICAgIF07CiAgICAKICAgICRyb3V0ZSA9IG5ldyBDbXNSb3V0ZShzZWxmOjokYXBpX2FjdGlvbl9uYW1lLCAkdGhpcy0+R2V0TmFtZSgpLCAkcGFybXMsIFRSVUUpOwogICAgY21zX3JvdXRlX21hbmFnZXI6OnJlZ2lzdGVyKCRyb3V0ZSk7CiAgICAjIHNldCB0aGUgYXBpIGFjdGlvbiBuYW1lIGluIHRoZSBhcHAgZGF0YSB0byBiZSByZXRyaWV2YWJsZSBnbG9iYWxseSBpZiBuZWVkZWQKICAgIGNtc191dGlsczo6c2V0X2FwcF9kYXRhKCdjbXNtc2V4dF9hcGlfYWN0aW9uX25hbWUnLCBzZWxmOjokYXBpX2FjdGlvbl9uYW1lKTsKICAgIAogICAgaW5pX3NldCgndW5zZXJpYWxpemVfY2FsbGJhY2tfZnVuYycsICdfX3h0X3Vuc2VyaWFsaXplX2NhbGxiYWNrJyk7CiAgICAkdGhpcy0+X2luY2x1ZGVzKCk7CiAgICAKICAgICMgd2UgYWRkIGEgaG9vayB0byBDb3JlOjpDb250ZW50UG9zdFJlbmRlcgogICAgSG9va01hbmFnZXI6OmFkZF9ob29rKCdDb3JlOjpDb250ZW50UG9zdFJlbmRlcicsIFskdGhpcywgJ29uQ29udGVudFBvc3RSZW5kZXInXSwgSG9va01hbmFnZXI6OlBSSU9SSVRZX0xPVyk7CiAgICBIb29rTWFuYWdlcjo6YWRkX2hvb2soJ0NvcmU6OkNvbnRlbnRQcmVSZW5kZXInLCBbJHRoaXMsICdvbkNvbnRlbnRQcmVSZW5kZXInXSwgSG9va01hbmFnZXI6OlBSSU9SSVRZX0xPVyk7CiAgCiAgICAkc21hcnR5ID0gJHRoaXMtPmNtcy0+R2V0U21hcnR5KCk7CiAgCiAgICBpZighJHNtYXJ0eSkgIHsgcmV0dXJuOyB9CgogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfcmVzb3VyY2UoJ3h0X21vZGZpbGUnLCBuZXcgRmlsZVRlbXBsYXRlUmVzb3VyY2UoKSk7CiAgICAkcGx1Z2luc19kaXIgPSBjbXNfam9pbl9wYXRoKCAkdGhpcy0+R2V0TW9kdWxlUGF0aCgpLCAnbGliJywgJ2ludGVybmFsX3BsdWdpbnMnICk7CiAgICAkc21hcnR5LT5hZGRQbHVnaW5zRGlyKCRwbHVnaW5zX2Rpcik7CgogICAgIyA/Pz8/CiAgICAkX3BsdWdpbnMgPSBuZXcgc21hcnR5X3BsdWdpbnMoJHRoaXMsICRzbWFydHkpOwogICAgJF91dGlscyAgID0gbmV3IHh0X3V0aWxzKCR0aGlzLCAkdGhpcy0+eHRfc2V0dGluZ3MoKSk7CiAgICAkX2ltYWdlICAgPSBuZXcgeHRfaW1hZ2UoJHRoaXMtPnh0X3NldHRpbmdzKCktPnRodW1ibmFpbHNpemUpOwogICAgJF9zZXR1cCAgID0gbmV3IHh0X3NldHVwKCR0aGlzLT5jb25maWcsICR0aGlzLT54dF9zZXR0aW5ncygpLCAkdGhpcy0+R2V0TW9kdWxlUGF0aCgpKTsKICAgIAogICAgJGRiID0gY21zX3V0aWxzOjpnZXRfZGIoKTsKICAKICAgIGlmKGlzX29iamVjdCgkZGIpKQogICAgewogICAgICAkcXVlcnkgPSAnU0VUIEB4dF9aRVJPVElNRSA9IE5PVygpIC0gSU5URVJWQUwgMTUwIFlFQVIsQHh0X0ZVVFVSRVRJTUUgPSBOT1coKSArIElOVEVSVkFMIDUgWUVBUic7CiAgICAgICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoKICAgICAgJGNvbmZpZyA9IFxDTVNNU0V4dFxjb25maWc6OkdldEluc3RhbmNlKCk7CiAgICAgIGlmKCB4dF9wYXJhbTo6Z2V0X2Jvb2woIChhcnJheSkkY29uZmlnLCAneHRfcmVsYXhfc3FsJyApICkKICAgICAgewogICAgICAgICRxdWVyeSA9ICdTRVQgU0VTU0lPTiBzcWxfbW9kZT1cJ1RSQURJVElPTkFMXCcnOwogICAgICAgICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwogICAgICB9CiAgICB9CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBhdXRvbG9hZCgkY2xhc3NuYW1lKSA6IGJvb2wKICB7CiAgICBpZiggIWlzX29iamVjdCgkdGhpcykgKSB7IHJldHVybiBGQUxTRTsgfQogICAgCiAgICAvLyBjaGVjayBmb3IgY2xhc3Nlcy4KICAgICRwYXRoID0gJHRoaXMtPkdldE1vZHVsZVBhdGgoKSAuICcvbGliJzsKICAKICAgIGlmKEZBTFNFICE9PSBzdHJwb3MoJGNsYXNzbmFtZSwgJ1xcJykpCiAgICB7CiAgICAgICR0X3BhdGggPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRjbGFzc25hbWUpOwogICAgICAKICAgICAgaWYoc3RhcnRzd2l0aCgkdF9wYXRoLCAkdGhpcy0+R2V0TmFtZSgpIC4gJy8nKSkKICAgICAgewogICAgICAgICRjbGFzc25hbWUgPSBiYXNlbmFtZSgkdF9wYXRoKTsKICAgICAgICAkdF9wYXRoICAgID0gZGlybmFtZSgkdF9wYXRoKTsKICAgICAgICAkdF9wYXRoICAgID0gc3Vic3RyKCR0X3BhdGgsIHN0cmxlbigkdGhpcy0+R2V0TmFtZSgpKSArIDEpOwogICAgICAgICRwYXRoICAgICAgPSAkdGhpcy0+R2V0TW9kdWxlUGF0aCgpIC4gJy9saWIvJyAuICR0X3BhdGg7CiAgICAgIH0KICAgIH0KICAgIAogICAgJGZuID0gJHBhdGggLiAiL2NsYXNzLnskY2xhc3NuYW1lfS5waHAiOwogICAgCiAgICBpZihpc19maWxlKCRmbikpCiAgICB7CiAgICAgIHJlcXVpcmVfb25jZSgkZm4pOwogICAgICAKICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CiAgICAKICAgIC8vIGNoZWNrIGZvciBhYnN0cmFjdCBjbGFzc2VzLgogICAgJGZuID0gJHBhdGggLiAiL2Fic3RyYWN0LnskY2xhc3NuYW1lfS5waHAiOwogICAgCiAgICBpZihpc19maWxlKCRmbikpCiAgICB7CiAgICAgIHJlcXVpcmVfb25jZSgkZm4pOwogICAgICAKICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CiAgICAKICAgIC8vIGNoZWNrIGZvciBpbnRlcmZhY2VzCiAgICAkZm4gPSAkcGF0aCAuICIvaW50ZXJmYWNlLnskY2xhc3NuYW1lfS5waHAiOwogICAgCiAgICBpZihpc19maWxlKCRmbikpCiAgICB7CiAgICAgIHJlcXVpcmVfb25jZSgkZm4pOwogICAgICAKICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CiAgICAKICAgIC8vIGNoZWNrIGZvciB0cmFpdHMKICAgICRmbiA9ICRwYXRoIC4gIi90cmFpdC57JGNsYXNzbmFtZX0ucGhwIjsKICAgIAogICAgaWYoaXNfZmlsZSgkZm4pKQogICAgewogICAgICByZXF1aXJlX29uY2UoJGZuKTsKICAgICAgCiAgICAgIHJldHVybiBUUlVFOwogICAgfQogICAgCiAgICAvLyBjaGVjayBmb3IgYSBtYXN0ZXIgZmlsZQogICAgJGZuID0gJHRoaXMtPkdldE1vZHVsZVBhdGgoKSAuICcvbGliL2V4dHJhY2xhc3Nlcy5waHAnOwogICAgCiAgICBpZihpc19maWxlKCRmbikpCiAgICB7CiAgICAgIHJlcXVpcmVfb25jZSgkZm4pOwogICAgICAKICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CiAgICAKICAgIHJldHVybiBGQUxTRTsKICB9CiAgCiAgcHJpdmF0ZSBmdW5jdGlvbiBfaW5jbHVkZXMoKQogIHsKICAgICRwYXR0ZXJucyA9IFsKICAgICAgICBjbXNfam9pbl9wYXRoKAogICAgICAgICAgJHRoaXMtPkdldE1vZHVsZVBhdGgoKSwKICAgICAgICAgICdsaWInLAogICAgICAgICAgJ2Z1bmN0aW9ucycsCiAgICAgICAgICAne2Z1bmN0aW9uLGZ1bmN0aW9uc30uKi5waHAnCiAgICAgICAgKSwKICAgICAgICBjbXNfam9pbl9wYXRoKAogICAgICAgICAgJHRoaXMtPkdldE1vZHVsZVBhdGgoKSwKICAgICAgICAgICcud2lwJywKICAgICAgICAgICdmdW5jdGlvbnMnLAogICAgICAgICAgJ3tmdW5jdGlvbixmdW5jdGlvbnN9LioucGhwJwogICAgICAgICksCiAgICAgICAgY21zX2pvaW5fcGF0aCgKICAgICAgICAgICR0aGlzLT5HZXRNb2R1bGVQYXRoKCksCiAgICAgICAgICAnLndpcCcsCiAgICAgICAgICAne2Fic3RyYWN0LGNsYXNzLGludGVyZmFjZSx0cmFpdH0uKi5waHAnCiAgICAgICAgKSwKICAgICAgXTsKICAgIAogICAgZm9yZWFjaCgkcGF0dGVybnMgYXMgJHBhdHRlcm4pCiAgICB7CiAgICAgIGZvcmVhY2goZ2xvYigkcGF0dGVybiwgR0xPQl9CUkFDRSkgYXMgJGZpbGVuYW1lKQogICAgICB7CiAgICAgICAgaW5jbHVkZV9vbmNlICRmaWxlbmFtZTsKICAgICAgfQogICAgfQogIH0KICAKICAvKioKICAgKiBSZXR1cm4gdGhlIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUuCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZwogICAqIEBzZWUgQ01TTW9kdWxlOjpHZXRWZXJzaW9uKCkKICAgKiBAYWJzdHJhY3QKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gR2V0VmVyc2lvbigpCiAgewogICAgcmV0dXJuICcxLjUuMic7CiAgfQogIAogIC8qKgogICAqIFJldHVybiB0aGUgQXV0aG9yIG9mIHRoaXMgbW9kdWxlLgogICAqCiAgICogQHJldHVybiBzdHJpbmcKICAgKiBAc2VlIENNU01vZHVsZTo6R2V0QXV0aG9yKCkKICAgKiBAYWJzdHJhY3QKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yKCkgeyByZXR1cm4gJ0Zlcm5hbmRvIE1vcmdhZG8gKEpvIE1vcmcpJzsgfQogIAogIC8qKgogICAqIFJldHVybiB0aGUgZW1haWwgYWRkcmVzcyBmb3IgdGhlIGF1dGhvciBvZiB0aGlzIG1vZHVsZS4KICAgKgogICAqIEByZXR1cm4gc3RyaW5nCiAgICogQHNlZSBDTVNNb2R1bGU6OkdldEF1dGhvckVtYWlsKCkKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKSB7IHJldHVybiAnam9tb3JnQGNtc21hZGVzaW1wbGUub3JnJzsgfQogIAogIAogIC8qKgogICAqIFJldHVybiBpZiB0aGlzIGlzIGEgcGx1Z2luIG1vZHVsZSAoZm9yIHRoZSBmcm9udGVuZCBvZiB0aGUgd2Vic2l0ZSkgb3Igbm90LgogICAqCiAgICogQHJldHVybiBib29sCiAgICogQHNlZSBDTVNNb2R1bGU6OklzUGx1Z2luTW9kdWxlKCkKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKSAgeyByZXR1cm4gVFJVRTsgfQogIAogIC8qKgogICAqIFJldHVybiB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoaXMgbW9kdWxlCiAgICogb3ZlcnJpZGUgaXQgYXMgdGhlcmUgaXMgYSBkZWZhdWx0IGZvciBtb2R1bGVzIHRoYXQgZXh0ZW5kIFxDTVNNU0V4dFxYVE1vZHVsZQogICAqIHdlIGRvbid0IHJlYWxseSBuZWVkIGl0CiAgICoKICAgKiBAcmV0dXJuIGFycmF5CiAgICogQHNlZSBDTVNNb2R1bGU6OkdldERlcGVuZGVuY2llcygpCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpICB7IHJldHVybiBbXTsgfQogIAogIC8qKgogICAqIFJldHVybiBpZiB0aGlzIG1vZHVsZSBoYXMgYW4gYWRtaW4gc2VjdGlvbi4KICAgKgogICAqIEByZXR1cm4gc3RyaW5nCiAgICogQHNlZSBDTVNNb2R1bGU6Okhhc0FkbWluKCkKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gSGFzQWRtaW4oKSAgeyByZXR1cm4gVFJVRTsgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBIYW5kbGVzRXZlbnRzKCkgIHsgcmV0dXJuIFRSVUU7IH0KICAKICAvKioKICAgKiBSZXR1cm4gdGhlIG1pbmltdW0gQ01TTVMgdmVyc2lvbiB0aGF0IHRoaXMgbW9kdWxlIGlzIGNvbXBhdGlibGUgd2l0aC4KICAgKgogICAqIEByZXR1cm4gc3RyaW5nCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCl7IHJldHVybiAnMi4yLjknOyB9CiAgCiAgLyoqCiAgICogR2V0IGEgc2V0dGluZ3Mgb2JqZWN0CiAgICoKICAgKiBAcmV0dXJuIHNldHRpbmdzCiAgICovCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIHh0X3NldHRpbmdzKCkgOiBzZXR0aW5ncwogIHsKICAgIHN0YXRpYyAkX29iajsKICAgIAogICAgaWYoISRfb2JqKQogICAgewogICAgICAkX29iaiA9IG5ldyBzZXR0aW5ncygkdGhpcy0+Y29uZmlnKTsKICAgIH0KICAgIAogICAgcmV0dXJuICRfb2JqOwogIH0KICAKICAKICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAKICAvKioKICAgKiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CiAgICovCiAgCiAgLyoqCiAgICogQSBjb252ZW5pZW5jZSBtZXRob2QgdG8gZ2VuZXJhdGUgYSBuZXcgc21hcnR5IHRlbXBsYXRlIG9iamVjdCBnaXZlbiBhIHJlc291cmNlIHN0cmluZywKICAgKiBhbmQgYSBwcmVmaXguICBUaGlzIG1ldGhvZCB3aWxsIGFsc28gYXV0b21hdGljYWxseSBhc3NpZ24gYSBmZXcgY29tbW9uIHNtYXJ0eSB2YXJpYWJsZXMKICAgKiB0byB0aGUgbmV3IHNjb3BlLgogICAqCiAgICogTm90ZTogdGhlIHBhcmVudCBzbWFydHkgc2NvcGUgZGVwZW5kcyBvbiBob3cgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuICBJZiBjYWxsZWQgZGlyZWN0bHkgZnJvbSBhIG1vZHVsZSBhY3Rpb24gZm9yCiAgICogdGhlIHNhbWUgbW9kdWxlIHRoZSBwYXJlbnQgd2lsbCBiZSB0aGUgY3VycmVudCBzbWFydHkgc2NvcGUuICBJZiBjYWxsZWQgZnJvbSBhbnkgbWV0aG9kIHRoYXQgaXMgdXNpbmcgYSBkaWZmZXJlbnQKICAgKiBtb2R1bGUgdGhhbiB0aGUgYWN0aW9uIG1vZHVsZSwgdGhlbiB0aGUgcGFyZW50IHNjb3BlIHdpbGwgYmUgdGhlIGdsb2JhbCBzbWFydHkgc2NvcGUuCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJHRlbXBsYXRlX25hbWUgVGhlIGRlc2lyZWQgdGVtcGxhdGUgbmFtZS4KICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByZWZpeCAgICAgICAgYW4gb3B0aW9uYWwgcHJlZml4IGZvciBkYXRhYmFzZSB0ZW1wbGF0ZXMuCiAgICogQHBhcmFtIHN0cmluZ3xudWxsICRjYWNoZV9pZCAgICAgIEFuIG9wdGlvbmFsIHNtYXJ0eSBjYWNoZSBpZC4KICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNvbXBpbGVfaWQgICAgQW4gb3B0aW9uYWwgc21hcnR5IGNvbXBpbGUgaWQuCiAgICogQHBhcmFtIG51bGwgICAgICAgICRwYXJlbnQgICAgICAgIEFuIG9wdGlvbmFsIHBhcmVudCB0ZW1wbGF0ZSBvYmplY3QuCiAgICoKICAgKiBAcmV0dXJuIG9iamVjdAogICAqIEB0aHJvd3MgXFNtYXJ0eUV4Y2VwdGlvbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBDcmVhdGVTbWFydHlUZW1wbGF0ZSgKICAgIHN0cmluZyAkdGVtcGxhdGVfbmFtZSwgc3RyaW5nICRwcmVmaXggPSBOVUxMLCBzdHJpbmcgJGNhY2hlX2lkID0gTlVMTCwgc3RyaW5nICRjb21waWxlX2lkID0gTlVMTCwgJHBhcmVudCA9IE5VTEwKICApCiAgewogICAgJHNtYXJ0eSA9IE5VTEw7CiAgICAKICAgIGlmKCRwYXJlbnQpeyRzbWFydHkgPSAkcGFyZW50O30KICAgIAogICAgaWYoISRzbWFydHkpeyRzbWFydHkgPSAkdGhpcy0+R2V0QWN0aW9uVGVtcGxhdGVPYmplY3QoKTt9CiAgICAKICAgIGlmKCEkc21hcnR5KXskc21hcnR5ID0gJHRoaXMtPmNtcy0+R2V0U21hcnR5KCk7fQogICAgCiAgICAkdHBsID0gJHNtYXJ0eS0+Y3JlYXRlVGVtcGxhdGUoCiAgICAgICR0aGlzLT5YVEdldFRlbXBsYXRlUmVzb3VyY2UoJHRlbXBsYXRlX25hbWUsICRwcmVmaXgpLCAkY2FjaGVfaWQsICRjb21waWxlX2lkLCAkc21hcnR5CiAgICApOwogICAgCiAgICAvLyBmb3IgY29udmVuaWVuY2UsIHdlIGFzc2lnbiBhIGZldyBzbWFydHkgdmFyaWFibGVzLgogICAgJHRwbC0+YXNzaWduKCdtb2R1bGUnLCAkdGhpcy0+R2V0TmFtZSgpKTsKICAgICR0cGwtPmFzc2lnbigkdGhpcy0+R2V0TmFtZSgpLCAkdGhpcyk7CiAgICAkdHBsLT5hc3NpZ24oJ21vZCcsICR0aGlzKTsKICAgICR0cGwtPmFzc2lnbignYWN0aW9uaWQnLCAkdGhpcy0+Z2V0X2FjdGlvbl9pZCgpKTsKICAKICAgIGlmKCgkYWN0aW9ucGFyYW1zID0gJHNtYXJ0eS0+Z2V0VGVtcGxhdGVWYXJzKCdhY3Rpb25wYXJhbXMnKSkpCiAgICB7CiAgICAgICR0cGwtPmFzc2lnbignYWN0aW9ucGFyYW1zJywgJGFjdGlvbnBhcmFtcyk7CiAgICB9CiAgCiAgICByZXR1cm4gJHRwbDsKICB9CiAgCiAgCiAgLyoqCiAgICogQGlnbm9yZQogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBvbkNvbnRlbnRQb3N0UmVuZGVyKGFycmF5ICRwYXJhbXMpCiAgewogICAgaWYoJHRoaXMtPmNvbmZpZ1snZGVidWcnXSkgeyByZXR1cm47IH0KICAgIAogICAgJHByZXR0eV9odG1sID0geHRfcGFyYW06OmdldF9ib29sKChhcnJheSkkdGhpcy0+Y29uZmlnLCAneHRfcHJldHR5aHRtbCcsIEZBTFNFKTsKICAgICRtaW5faHRtbCAgICA9IHh0X3BhcmFtOjpnZXRfYm9vbCgoYXJyYXkpJHRoaXMtPmNvbmZpZywgJ3h0X21pbmh0bWwnLCBGQUxTRSk7CiAgICAKICAgIGlmKCEkcHJldHR5X2h0bWwgJiYgISRtaW5faHRtbCkgIHsgcmV0dXJuOyB9CiAgICAKICAgIGluY2x1ZGVfb25jZShfX0RJUl9fIC4gJy9ldmVudC5Db3JlLkNvbnRlbnRQb3N0UmVuZGVyLnBocCcpOwogIH0KICAKICAvKioKICAgKiBAaWdub3JlCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIG9uQ29udGVudFByZVJlbmRlcihhcnJheSAkcGFyYW1zKQogIHsKICAgIENNU01TRXh0XHNldF9zZXNzaW9uX3N0YXR1c19mbGFnX2ZpbGUoKTsKICB9CiAgCiAgCiAgcHVibGljIGZ1bmN0aW9uIEdldEhlYWRlckhUTUwoKQogIHsKICAgICRvdXQgPSBwYXJlbnQ6OkdldEhlYWRlckhUTUwoKTsKCiAgICAkZmlsZSA9ICR0aGlzLT5maW5kX21vZHVsZV9maWxlKCdqcy9jb21tb24uanMnKTsKCiAgICBpZigkZmlsZSkKICAgIHsKICAgICAgLy8kb3V0IC49ICR0aGlzLT5nZXRfanNsb2FkZXIoKS0+YWRkX2pzZmlsZSgkZmlsZSk7IHRoaXMgc2hvdWxkIG5vdCByZXR1cm4gYW55dGhpbmcuLi4gKEpNKQogICAgICAkdGhpcy0+Z2V0X2pzbG9hZGVyKCktPmFkZF9qc2ZpbGUoJGZpbGUpOwogICAgfQoKICAgICRmbiA9ICR0aGlzLT5maW5kX21vZHVsZV9maWxlKCdjc3MvYWRtaW5fc3R5bGVzLmNzcycpOwoKICAgIGlmKCRmbikKICAgIHsKICAgICAgJGNzcyA9IHN0cl9yZXBsYWNlKENNU19ST09UX1BBVEgsIENNU19ST09UX1VSTCwgJGZuKTsKICAgICAgJG91dCAuPSAnPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSInIC4gJGNzcyAuICciLz4nIC4gIlxuIjsKICAgIH0KCiAgICAkZm4gPSAkdGhpcy0+ZmluZF9tb2R1bGVfZmlsZSgnY3NzL2FkbWluX3N0eWxlcy5jc3MnKTsKCiAgICBpZigkZm4pCiAgICB7CiAgICAgICRjc3MgPSBzdHJfcmVwbGFjZShDTVNfUk9PVF9QQVRILCBDTVNfUk9PVF9VUkwsICRmbik7CiAgICAgICRvdXQgLj0gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iJyAuICRjc3MgLiAnIi8+JyAuICJcbiI7CiAgICB9CgogICAgcmV0dXJuICRvdXQ7CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBEb0FjdGlvbigkbmFtZSwgJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgPSAnJykKICB7CiAgICBwYXJlbnQ6OkRvQWN0aW9uKCRuYW1lLCAkaWQsICRwYXJhbXMpOwovLyAgICBpZihzZWxmOjokYXBpX2FjdGlvbl9uYW1lID09PSAkbmFtZSkKLy8gICAgewovLyAgICAgICRjbXNfc3RhdGVzICAgICA9IENtc0FwcDo6Z2V0X2luc3RhbmNlKCktPmdldF9zdGF0ZXMoKTsKLy8gICAgICAkQ01TX0FETUlOX1BBR0UgPSBpbl9hcnJheShDbXNBcHA6OlNUQVRFX0FETUlOX1BBR0UsICRjbXNfc3RhdGVzKTsKLy8gICAgICAkZXhjZXB0aW9ucyAgICAgPSBbJ2FqYXhfZ2V0dXJsJywgJ2FqYXhfZ2V0X2FsaWFzJ107Ci8vICAgICAgJHNtYXJ0eSAgICAgICAgID0gY21zbXMoKS0+R2V0U21hcnR5KCk7Ci8vICAgICAgJGRiICAgICAgICAgICAgID0gY21zbXMoKS0+R2V0RGIoKTsgIyBuZWVkZWQgZm9yIGluY2x1ZGVzCi8vCi8vICAgICAgJHNtYXJ0eS0+YXNzaWduKCdtb2QnLCAkdGhpcyk7Ci8vICAgICAgJHNtYXJ0eS0+YXNzaWduKCdhY3Rpb25pZCcsICRpZCk7Ci8vICAgICAgJHNtYXJ0eS0+YXNzaWduKCdyZXR1cm5pZCcsICRyZXR1cm5pZCk7Ci8vCi8vICAgICAgaWYoIGNtc21zKCktPmlzX2Zyb250ZW5kX3JlcXVlc3QoKSApCi8vICAgICAgewovLyAgICAgICAgaW5jbHVkZV9vbmNlIF9fRElSX18gLiAnL2ludGVybmFsL2Z1bmN0aW9uLmFwaS5waHAnOwovLyAgICAgIH0KLy8KLy8gICAgICBpZigkQ01TX0FETUlOX1BBR0UpCi8vICAgICAgewovLyAgICAgICAgcGFyZW50OjpEb0FjdGlvbigkbmFtZSwgJGlkLCAkcGFyYW1zKTsKLy8gICAgICB9Ci8vICAgIH0KICB9CiAgCiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAKfSAvLyBjbGFzcwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/css</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/css/addons</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/css/addons/backbone.modal.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogTW9kYWwgcG9zaXRpb25pbmcgKi8KLmJibS13cmFwcGVyIHsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIHBvc2l0aW9uOiBmaXhlZDsKICBsZWZ0OiAwOwogIHRvcDogMDsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgei1pbmRleDogMTAwOwogIHBhZGRpbmc6IDUwcHggMTBweDsKICBvdmVyZmxvdzogYXV0bzsgfQogIC5iYm0td3JhcHBlciAqIHsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH0KCi5iYm0tbW9kYWwgewogIGJvcmRlci1yYWRpdXM6IDNweDsKICBtYXJnaW46IGF1dG87CiAgd2lkdGg6IGF1dG87CiAgbWF4LXdpZHRoOiA1NTBweDsgfQoKLmJibS12aWV3cyB7CiAgd2lkdGg6IDEwMCU7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQo=]]></data>
	</file>
	<file>
	  <filename>/css/addons/backbone.modal.theme.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmJibS13cmFwcGVyIHsKICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNzUpOwogIC13ZWJraXQtdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzOyB9CgouYmJtLW1vZGFsIHsKICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICBib3gtc2hhZG93OiAwIDBweCA2cHggcmdiYSgwLCAwLCAwLCAwLjYpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjkpOyB9CgovKiBCTE9DS1MgKi8KLmJibS1tb2RhbF9fdG9wYmFyLAouYmJtLW1vZGFsX19ib3R0b21iYXIgewogIHBhZGRpbmc6IDAgMzBweDsgfQoKLmJibS1tb2RhbF9fdG9wYmFyIHsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpOwogIG1hcmdpbi1ib3R0b206IDMwcHg7IH0KICAuYmJtLW1vZGFsX190b3BiYXIgPiB1bCB7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcGFkZGluZzogMDsKICAgIG1hcmdpbjogMDsgfQoKLmJibS1tb2RhbF9fdGFiIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgcGFkZGluZzogMTVweCAxMHB4OyB9CiAgLmJibS1tb2RhbF9fdGFiIGEgewogICAgZm9udC1zaXplOiAxNnB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBjb2xvcjogIzk5OTsgfQogICAgLmJibS1tb2RhbF9fdGFiIGE6aG92ZXIsIC5iYm0tbW9kYWxfX3RhYiBhLmFjdGl2ZSB7CiAgICAgIGNvbG9yOiAjMjIyOyB9CgouYmJtLW1vZGFsX190aXRsZSB7CiAgcGFkZGluZzogMjBweCAwIDE5cHg7CiAgbWFyZ2luOiAwOwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgZm9udC1zaXplOiAyMnB4OwogIGxpbmUtaGVpZ2h0OiAxZW07CiAgY29sb3I6ICMzMTJEM0E7IH0KCi5iYm0tbW9kYWxfX3NlY3Rpb24gewogIHBhZGRpbmc6IDAgMzBweDsKICBtYXJnaW4tdG9wOiAwcHg7CiAgZm9udC1zaXplOiAxNnB4OwogIGxpbmUtaGVpZ2h0OiAyNnB4OwogIGNvbG9yOiAjNTc1NjU2OyB9CiAgLmJibS1tb2RhbF9fc2VjdGlvbiBwIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAyNnB4OwogICAgY29sb3I6ICM1NzU2NTY7IH0KICAgIC5iYm0tbW9kYWxfX3NlY3Rpb24gcDpsYXN0LWNoaWxkIHsKICAgICAgcGFkZGluZzogMDsKICAgICAgbWFyZ2luLWJvdHRvbTogMDsgfQogIC5iYm0tbW9kYWxfX3NlY3Rpb24gYSB7CiAgICBjb2xvcjogI0ZGNjQzQzsgfQogIC5iYm0tbW9kYWxfX3NlY3Rpb24gaDMgewogICAgbWFyZ2luOiAwOwogICAgZm9udC1zaXplOiAyMHB4OwogICAgbGluZS1oZWlnaHQ6IDFlbTsgfQoKLmJibS1tb2RhbF9fYm90dG9tYmFyIHsKICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpOwogIHBhZGRpbmc6IDE4cHg7CiAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgbWFyZ2luLXRvcDogMzBweDsgfQoKLyogTU9EVUxFUyAqLwouYmJtLWdyb3VwIHsKICBjb250ZW50OiAiIjsKICBkaXNwbGF5OiB0YWJsZTsKICBjbGVhcjogYm90aDsgfQoKLmJibS1idXR0b24gewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBjb2xvcjogcmdiYSg0OSwgNDUsIDU4LCAwLjgpOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICBmb250LXNpemU6IDE0cHg7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgbGluZS1oZWlnaHQ6IDFlbTsKICBwYWRkaW5nOiAxMHB4IDE0cHg7CiAgYm9yZGVyLXJhZGl1czogM3B4OwogIGJhY2tncm91bmQ6ICNGQ0ZDRkM7CiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHJnYmEoNzAsIDMwLCAxNzAsIDApIDAlLCByZ2JhKDY1LCA2MSwgNzUsIDAuMTUpIDEwMCUpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KHJnYmEoNzAsIDMwLCAxNzAsIDApIDAlLCByZ2JhKDY1LCA2MSwgNzUsIDAuMTUpIDEwMCUpOwogIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHJnYmEoNzAsIDMwLCAxNzAsIDApIDAlLCByZ2JhKDY1LCA2MSwgNzUsIDAuMTUpIDEwMCUpOwogIGJhY2tncm91bmQtaW1hZ2U6IC1tcy1saW5lYXItZ3JhZGllbnQocmdiYSg3MCwgMzAsIDE3MCwgMCkgMCUsIHJnYmEoNjUsIDYxLCA3NSwgMC4xNSkgMTAwJSk7CiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHJnYmEoNzAsIDMwLCAxNzAsIDApIDAlLCByZ2JhKDY1LCA2MSwgNzUsIDAuMTUpIDEwMCUpOwogIC1tb3otYm94LXNoYWRvdzogMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xKSwgaW5zZXQgMHB4IDBweCAwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAtd2Via2l0LWJveC1zaGFkb3c6IDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMSksIGluc2V0IDBweCAwcHggMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgYm94LXNoYWRvdzogMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xKSwgaW5zZXQgMHB4IDBweCAwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4yKTsgfQogIC5iYm0tYnV0dG9uLmluYWN0aXZlIHsKICAgIG9wYWNpdHk6IDAuNTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOyB9CiAgLmJibS1idXR0b246YWN0aXZlIHsKICAgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudChyZ2JhKDcwLCAzMCwgMTcwLCAwKSAwJSwgcmdiYSg2NSwgNjEsIDc1LCAwLjI1KSAxMDAlKTsKICAgIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KHJnYmEoNzAsIDMwLCAxNzAsIDApIDAlLCByZ2JhKDY1LCA2MSwgNzUsIDAuMjUpIDEwMCUpOwogICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQocmdiYSg3MCwgMzAsIDE3MCwgMCkgMCUsIHJnYmEoNjUsIDYxLCA3NSwgMC4yNSkgMTAwJSk7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtbXMtbGluZWFyLWdyYWRpZW50KHJnYmEoNzAsIDMwLCAxNzAsIDApIDAlLCByZ2JhKDY1LCA2MSwgNzUsIDAuMjUpIDEwMCUpOwogICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHJnYmEoNzAsIDMwLCAxNzAsIDApIDAlLCByZ2JhKDY1LCA2MSwgNzUsIDAuMjUpIDEwMCUpOwogICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwcHggMXB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjUpLCBpbnNldCAwcHggMHB4IDBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwcHggMXB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjUpLCBpbnNldCAwcHggMHB4IDBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgYm94LXNoYWRvdzogaW5zZXQgMHB4IDFweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC41KSwgaW5zZXQgMHB4IDBweCAwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4yKTsgfQoKLyogQU5JTUFUSU9OUyAqLwovKiBPcGVuIG1vZGFsICovCkAtd2Via2l0LWtleWZyYW1lcyBiYm0tb3BlbiB7CiAgMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk5MTI2LCAwLCAwLCAwLjk5MTI2LCAwLCA0My44ODEzKTsKICAgIG9wYWNpdHk6IDAuMTI1OTsgfQogIDQlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45OTI5NSwgMCwgMCwgMC45OTI5NSwgMCwgNDUuMDY4MDkpOwogICAgb3BhY2l0eTogMC4yOTU0NDsgfQogIDglIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45OTQ2NywgMCwgMCwgMC45OTQ2NywgMCwgNDYuMjY5MjIpOwogICAgb3BhY2l0eTogMC40NjcwMzsgfQogIDEyJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTk2MTksIDAsIDAsIDAuOTk2MTksIDAsIDQ3LjMzMzU1KTsKICAgIG9wYWNpdHk6IDAuNjE5MDg7IH0KICAxNiUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk5NzQzLCAwLCAwLCAwLjk5NzQzLCAwLCA0OC4xOTk5MSk7CiAgICBvcGFjaXR5OiAwLjc0Mjg0OyB9CiAgMjAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45OTgzNywgMCwgMCwgMC45OTgzNywgMCwgNDguODYwNjcpOwogICAgb3BhY2l0eTogMC44MzcyNDsgfQogIDI0JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTk5MDUsIDAsIDAsIDAuOTk5MDUsIDAsIDQ5LjMzNjU4KTsKICAgIG9wYWNpdHk6IDAuOTA1MjM7IH0KICAyOCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk5OTUyLCAwLCAwLCAwLjk5OTUyLCAwLCA0OS42NjA0OSk7CiAgICBvcGFjaXR5OiAwLjk1MTU7IH0KICAzMiUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk5OTgxLCAwLCAwLCAwLjk5OTgxLCAwLCA0OS44Njc1KTsKICAgIG9wYWNpdHk6IDAuOTgxMDc7IH0KICAzNiUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk5OTk5LCAwLCAwLCAwLjk5OTk5LCAwLCA0OS45ODk2Nik7CiAgICBvcGFjaXR5OiAwLjk5ODUyOyB9CiAgNDAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMS4wMDAwOCwgMCwgMCwgMS4wMDAwOCwgMCwgNTAuMDUzNjEpOwogICAgb3BhY2l0eTogMS4wMDc2NjsgfQogIDQ0JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDEuMDAwMTEsIDAsIDAsIDEuMDAwMTEsIDAsIDUwLjA4KTsKICAgIG9wYWNpdHk6IDEuMDExNDM7IH0KICA0OCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgxLjAwMDEyLCAwLCAwLCAxLjAwMDEyLCAwLCA1MC4wODM5NCk7CiAgICBvcGFjaXR5OiAxLjAxMTk5OyB9CiAgNTIlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMS4wMDAxMSwgMCwgMCwgMS4wMDAxMSwgMCwgNTAuMDc1ODkpOwogICAgb3BhY2l0eTogMS4wMTA4NDsgfQogIDU2JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDEuMDAwMDksIDAsIDAsIDEuMDAwMDksIDAsIDUwLjA2MjY1KTsKICAgIG9wYWNpdHk6IDEuMDA4OTU7IH0KICA2MCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgxLjAwMDA3LCAwLCAwLCAxLjAwMDA3LCAwLCA1MC4wNDgzMyk7CiAgICBvcGFjaXR5OiAxLjAwNjk7IH0KICA2NCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgxLjAwMDA1LCAwLCAwLCAxLjAwMDA1LCAwLCA1MC4wMzUxOCk7CiAgICBvcGFjaXR5OiAxLjAwNTAzOyB9CiAgNjglIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMS4wMDAwNCwgMCwgMCwgMS4wMDAwNCwgMCwgNTAuMDI0MjEpOwogICAgb3BhY2l0eTogMS4wMDM0NjsgfQogIDcyJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDEuMDAwMDIsIDAsIDAsIDEuMDAwMDIsIDAsIDUwLjAxNTY3KTsKICAgIG9wYWNpdHk6IDEuMDAyMjQ7IH0KICA3NiUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgxLjAwMDAxLCAwLCAwLCAxLjAwMDAxLCAwLCA1MC4wMDk0MSk7CiAgICBvcGFjaXR5OiAxLjAwMTM0OyB9CiAgODAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMS4wMDAwMSwgMCwgMCwgMS4wMDAwMSwgMCwgNTAuMDA1MDYpOwogICAgb3BhY2l0eTogMS4wMDA3MjsgfQogIDg0JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDEsIDAsIDAsIDEsIDAsIDUwLjAwMjIzKTsKICAgIG9wYWNpdHk6IDEuMDAwMzI7IH0KICA4OCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgxLCAwLCAwLCAxLCAwLCA1MC4wMDA1KTsKICAgIG9wYWNpdHk6IDEuMDAwMDc7IH0KICA5MiUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgxLCAwLCAwLCAxLCAwLCA0OS45OTk1Nik7CiAgICBvcGFjaXR5OiAwLjk5OTk0OyB9CiAgOTYlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMSwgMCwgMCwgMSwgMCwgNDkuOTk5MTMpOwogICAgb3BhY2l0eTogMC45OTk4ODsgfQogIDEwMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgxLCAwLCAwLCAxLCAwLCA1MCk7CiAgICBvcGFjaXR5OiAxOyB9IH0KLmJibS1tb2RhbC0tb3BlbiB7CiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IDAuM3M7CiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogYmJtLW9wZW47CiAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7CiAgLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOiBib3RoOwogIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogNTAlIDUwJTsKICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjsgfQoKLyogT3BlbiBhIHN0YWNrZWQgbW9kYWwgKi8KQC13ZWJraXQta2V5ZnJhbWVzIGJibS1zdGFja2VkIHsKICAwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTk4NzQsIDAsIDAsIDAuOTk4NzQsIDAsIDQ5LjExODcpOwogICAgb3BhY2l0eTogMC45MzcwNTsgfQogIDQlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45OTcwNSwgMCwgMCwgMC45OTcwNSwgMCwgNDcuOTMxOTIpOwogICAgb3BhY2l0eTogMC44NTIyODsgfQogIDglIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45OTUzMywgMCwgMCwgMC45OTUzMywgMCwgNDYuNzMwNzgpOwogICAgb3BhY2l0eTogMC43NjY0ODsgfQogIDEyJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTkzODEsIDAsIDAsIDAuOTkzODEsIDAsIDQ1LjY2NjQ1KTsKICAgIG9wYWNpdHk6IDAuNjkwNDY7IH0KICAxNiUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk5MjU3LCAwLCAwLCAwLjk5MjU3LCAwLCA0NC44MDAwOSk7CiAgICBvcGFjaXR5OiAwLjYyODU4OyB9CiAgMjAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45OTE2MywgMCwgMCwgMC45OTE2MywgMCwgNDQuMTM5MzMpOwogICAgb3BhY2l0eTogMC41ODEzODsgfQogIDI0JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTkwOTUsIDAsIDAsIDAuOTkwOTUsIDAsIDQzLjY2MzQyKTsKICAgIG9wYWNpdHk6IDAuNTQ3Mzk7IH0KICAyOCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk5MDQ5LCAwLCAwLCAwLjk5MDQ5LCAwLCA0My4zMzk1MSk7CiAgICBvcGFjaXR5OiAwLjUyNDI1OyB9CiAgMzIlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45OTAxOSwgMCwgMCwgMC45OTAxOSwgMCwgNDMuMTMyNSk7CiAgICBvcGFjaXR5OiAwLjUwOTQ2OyB9CiAgMzYlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45OTAwMiwgMCwgMCwgMC45OTAwMiwgMCwgNDMuMDEwMzQpOwogICAgb3BhY2l0eTogMC41MDA3NDsgfQogIDQwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTg5OTIsIDAsIDAsIDAuOTg5OTIsIDAsIDQyLjk0NjM5KTsKICAgIG9wYWNpdHk6IDAuNDk2MTc7IH0KICA0NCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk4OTg5LCAwLCAwLCAwLjk4OTg5LCAwLCA0Mi45MjAwMSk7CiAgICBvcGFjaXR5OiAwLjQ5NDI5OyB9CiAgNDglIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45ODk4OCwgMCwgMCwgMC45ODk4OCwgMCwgNDIuOTE2MDYpOwogICAgb3BhY2l0eTogMC40OTQ7IH0KICA1MiUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk4OTg5LCAwLCAwLCAwLjk4OTg5LCAwLCA0Mi45MjQxMSk7CiAgICBvcGFjaXR5OiAwLjQ5NDU4OyB9CiAgNTYlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45ODk5MSwgMCwgMCwgMC45ODk5MSwgMCwgNDIuOTM3MzYpOwogICAgb3BhY2l0eTogMC40OTU1MzsgfQogIDYwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTg5OTMsIDAsIDAsIDAuOTg5OTMsIDAsIDQyLjk1MTY3KTsKICAgIG9wYWNpdHk6IDAuNDk2NTU7IH0KICA2NCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk4OTk1LCAwLCAwLCAwLjk4OTk1LCAwLCA0Mi45NjQ4Mik7CiAgICBvcGFjaXR5OiAwLjQ5NzQ5OyB9CiAgNjglIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45ODk5NywgMCwgMCwgMC45ODk5NywgMCwgNDIuOTc1NzkpOwogICAgb3BhY2l0eTogMC40OTgyNzsgfQogIDcyJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTg5OTgsIDAsIDAsIDAuOTg5OTgsIDAsIDQyLjk4NDMzKTsKICAgIG9wYWNpdHk6IDAuNDk4ODg7IH0KICA3NiUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk4OTk5LCAwLCAwLCAwLjk4OTk5LCAwLCA0Mi45OTA1OSk7CiAgICBvcGFjaXR5OiAwLjQ5OTMzOyB9CiAgODAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45ODk5OSwgMCwgMCwgMC45ODk5OSwgMCwgNDIuOTk0OTQpOwogICAgb3BhY2l0eTogMC40OTk2NDsgfQogIDg0JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTksIDAsIDAsIDAuOTksIDAsIDQyLjk5Nzc3KTsKICAgIG9wYWNpdHk6IDAuNDk5ODQ7IH0KICA4OCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk5LCAwLCAwLCAwLjk5LCAwLCA0Mi45OTk1KTsKICAgIG9wYWNpdHk6IDAuNDk5OTY7IH0KICA5MiUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk5LCAwLCAwLCAwLjk5LCAwLCA0My4wMDA0NCk7CiAgICBvcGFjaXR5OiAwLjUwMDAzOyB9CiAgOTYlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45OSwgMCwgMCwgMC45OSwgMCwgNDMuMDAwODgpOwogICAgb3BhY2l0eTogMC41MDAwNjsgfQogIDEwMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk5LCAwLCAwLCAwLjk5LCAwLCA0Myk7CiAgICBvcGFjaXR5OiAwLjU7IH0gfQouYmJtLW1vZGFsLS1zdGFja2VkIHsKICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogMC40MzMzM3M7CiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogYmJtLXN0YWNrZWQ7CiAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7CiAgLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOiBib3RoOwogIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogNTAlIDUwJTsKICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjsgfQoKLyogZGVzdHJveSBhIHN0YWNrZWQgbW9kYWwgKi8KQC13ZWJraXQta2V5ZnJhbWVzIGJibS1zdGFja2VkLXJldmVyc2UgewogIDAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45OTEyMywgMCwgMCwgMC45OTEyMywgMCwgNDMuODYyNjYpOwogICAgb3BhY2l0eTogMC41NjE2MjsgfQogIDQlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45OTI5MywgMCwgMCwgMC45OTI5MywgMCwgNDUuMDUzMDYpOwogICAgb3BhY2l0eTogMC42NDY2NTsgfQogIDglIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45OTQ2NSwgMCwgMCwgMC45OTQ2NSwgMCwgNDYuMjU3ODUpOwogICAgb3BhY2l0eTogMC43MzI3OyB9CiAgMTIlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45OTYxOCwgMCwgMCwgMC45OTYxOCwgMCwgNDcuMzI1NDMpOwogICAgb3BhY2l0eTogMC44MDg5NjsgfQogIDE2JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTk3NDIsIDAsIDAsIDAuOTk3NDIsIDAsIDQ4LjE5NDQzKTsKICAgIG9wYWNpdHk6IDAuODcxMDM7IH0KICAyMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk5ODM3LCAwLCAwLCAwLjk5ODM3LCAwLCA0OC44NTcyKTsKICAgIG9wYWNpdHk6IDAuOTE4Mzc7IH0KICAyNCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk5OTA1LCAwLCAwLCAwLjk5OTA1LCAwLCA0OS4zMzQ1Nik7CiAgICBvcGFjaXR5OiAwLjk1MjQ3OyB9CiAgMjglIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45OTk1MSwgMCwgMCwgMC45OTk1MSwgMCwgNDkuNjU5NDYpOwogICAgb3BhY2l0eTogMC45NzU2ODsgfQogIDMyJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTk5ODEsIDAsIDAsIDAuOTk5ODEsIDAsIDQ5Ljg2NzEpOwogICAgb3BhY2l0eTogMC45OTA1MTsgfQogIDM2JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTk5OTksIDAsIDAsIDAuOTk5OTksIDAsIDQ5Ljk4OTYzKTsKICAgIG9wYWNpdHk6IDAuOTk5MjY7IH0KICA0MCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgxLjAwMDA4LCAwLCAwLCAxLjAwMDA4LCAwLCA1MC4wNTM3Nyk7CiAgICBvcGFjaXR5OiAxLjAwMzg0OyB9CiAgNDQlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMS4wMDAxMiwgMCwgMCwgMS4wMDAxMiwgMCwgNTAuMDgwMjQpOwogICAgb3BhY2l0eTogMS4wMDU3MzsgfQogIDQ4JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDEuMDAwMTIsIDAsIDAsIDEuMDAwMTIsIDAsIDUwLjA4NDE5KTsKICAgIG9wYWNpdHk6IDEuMDA2MDE7IH0KICA1MiUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgxLjAwMDExLCAwLCAwLCAxLjAwMDExLCAwLCA1MC4wNzYxMik7CiAgICBvcGFjaXR5OiAxLjAwNTQ0OyB9CiAgNTYlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMS4wMDAwOSwgMCwgMCwgMS4wMDAwOSwgMCwgNTAuMDYyODQpOwogICAgb3BhY2l0eTogMS4wMDQ0OTsgfQogIDYwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDEuMDAwMDcsIDAsIDAsIDEuMDAwMDcsIDAsIDUwLjA0ODQ4KTsKICAgIG9wYWNpdHk6IDEuMDAzNDY7IH0KICA2NCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgxLjAwMDA1LCAwLCAwLCAxLjAwMDA1LCAwLCA1MC4wMzUyOSk7CiAgICBvcGFjaXR5OiAxLjAwMjUyOyB9CiAgNjglIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMS4wMDAwNCwgMCwgMCwgMS4wMDAwNCwgMCwgNTAuMDI0MjgpOwogICAgb3BhY2l0eTogMS4wMDE3MzsgfQogIDcyJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDEuMDAwMDIsIDAsIDAsIDEuMDAwMDIsIDAsIDUwLjAxNTcyKTsKICAgIG9wYWNpdHk6IDEuMDAxMTI7IH0KICA3NiUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgxLjAwMDAxLCAwLCAwLCAxLjAwMDAxLCAwLCA1MC4wMDk0NCk7CiAgICBvcGFjaXR5OiAxLjAwMDY3OyB9CiAgODAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMS4wMDAwMSwgMCwgMCwgMS4wMDAwMSwgMCwgNTAuMDA1MDgpOwogICAgb3BhY2l0eTogMS4wMDAzNjsgfQogIDg0JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDEsIDAsIDAsIDEsIDAsIDUwLjAwMjIzKTsKICAgIG9wYWNpdHk6IDEuMDAwMTY7IH0KICA4OCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgxLCAwLCAwLCAxLCAwLCA1MC4wMDA1KTsKICAgIG9wYWNpdHk6IDEuMDAwMDQ7IH0KICA5MiUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgxLCAwLCAwLCAxLCAwLCA0OS45OTk1Nik7CiAgICBvcGFjaXR5OiAwLjk5OTk3OyB9CiAgOTYlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMSwgMCwgMCwgMSwgMCwgNDkuOTk5MTIpOwogICAgb3BhY2l0eTogMC45OTk5NDsgfQogIDEwMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgxLCAwLCAwLCAxLCAwLCA1MCk7CiAgICBvcGFjaXR5OiAxOyB9IH0KLmJibS1tb2RhbC0tc3RhY2tlZC1yZXZlcnNlIHsKICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogMC40MzMzM3M7CiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogYmJtLXN0YWNrZWQtcmV2ZXJzZTsKICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjsKICAtd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7CiAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiA1MCUgNTAlOwogIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuOyB9CgovKiBkZXN0cm95IGEgbW9kYWwgKi8KQC13ZWJraXQta2V5ZnJhbWVzIGJibS1kZXN0cm95IHsKICAwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTk4NzQsIDAsIDAsIDAuOTk4NzQsIDAsIDQ5LjExODcpOwogICAgb3BhY2l0eTogMC44NzQxOyB9CiAgNCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk5NzA1LCAwLCAwLCAwLjk5NzA1LCAwLCA0Ny45MzE5Mik7CiAgICBvcGFjaXR5OiAwLjcwNDU2OyB9CiAgOCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk5NTMzLCAwLCAwLCAwLjk5NTMzLCAwLCA0Ni43MzA3OCk7CiAgICBvcGFjaXR5OiAwLjUzMjk3OyB9CiAgMTIlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45OTM4MSwgMCwgMCwgMC45OTM4MSwgMCwgNDUuNjY2NDUpOwogICAgb3BhY2l0eTogMC4zODA5MjsgfQogIDE2JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTkyNTcsIDAsIDAsIDAuOTkyNTcsIDAsIDQ0LjgwMDA5KTsKICAgIG9wYWNpdHk6IDAuMjU3MTY7IH0KICAyMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk5MTYzLCAwLCAwLCAwLjk5MTYzLCAwLCA0NC4xMzkzMyk7CiAgICBvcGFjaXR5OiAwLjE2Mjc2OyB9CiAgMjQlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45OTA5NSwgMCwgMCwgMC45OTA5NSwgMCwgNDMuNjYzNDIpOwogICAgb3BhY2l0eTogMC4wOTQ3NzsgfQogIDI4JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTkwNDksIDAsIDAsIDAuOTkwNDksIDAsIDQzLjMzOTUxKTsKICAgIG9wYWNpdHk6IDAuMDQ4NTsgfQogIDMyJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTkwMTksIDAsIDAsIDAuOTkwMTksIDAsIDQzLjEzMjUpOwogICAgb3BhY2l0eTogMC4wMTg5MzsgfQogIDM2JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTkwMDIsIDAsIDAsIDAuOTkwMDIsIDAsIDQzLjAxMDM0KTsKICAgIG9wYWNpdHk6IDAuMDAxNDg7IH0KICA0MCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk4OTkyLCAwLCAwLCAwLjk4OTkyLCAwLCA0Mi45NDYzOSk7CiAgICBvcGFjaXR5OiAtMC4wMDc2NjsgfQogIDQ0JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTg5ODksIDAsIDAsIDAuOTg5ODksIDAsIDQyLjkyMDAxKTsKICAgIG9wYWNpdHk6IC0wLjAxMTQzOyB9CiAgNDglIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45ODk4OCwgMCwgMCwgMC45ODk4OCwgMCwgNDIuOTE2MDYpOwogICAgb3BhY2l0eTogLTAuMDExOTk7IH0KICA1MiUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk4OTg5LCAwLCAwLCAwLjk4OTg5LCAwLCA0Mi45MjQxMSk7CiAgICBvcGFjaXR5OiAtMC4wMTA4NDsgfQogIDU2JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTg5OTEsIDAsIDAsIDAuOTg5OTEsIDAsIDQyLjkzNzM2KTsKICAgIG9wYWNpdHk6IC0wLjAwODk1OyB9CiAgNjAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45ODk5MywgMCwgMCwgMC45ODk5MywgMCwgNDIuOTUxNjcpOwogICAgb3BhY2l0eTogLTAuMDA2OTsgfQogIDY0JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTg5OTUsIDAsIDAsIDAuOTg5OTUsIDAsIDQyLjk2NDgyKTsKICAgIG9wYWNpdHk6IC0wLjAwNTAzOyB9CiAgNjglIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45ODk5NywgMCwgMCwgMC45ODk5NywgMCwgNDIuOTc1NzkpOwogICAgb3BhY2l0eTogLTAuMDAzNDY7IH0KICA3MiUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk4OTk4LCAwLCAwLCAwLjk4OTk4LCAwLCA0Mi45ODQzMyk7CiAgICBvcGFjaXR5OiAtMC4wMDIyNDsgfQogIDc2JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTg5OTksIDAsIDAsIDAuOTg5OTksIDAsIDQyLjk5MDU5KTsKICAgIG9wYWNpdHk6IC0wLjAwMTM0OyB9CiAgODAlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45ODk5OSwgMCwgMCwgMC45ODk5OSwgMCwgNDIuOTk0OTQpOwogICAgb3BhY2l0eTogLTAuMDAwNzI7IH0KICA4NCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk5LCAwLCAwLCAwLjk5LCAwLCA0Mi45OTc3Nyk7CiAgICBvcGFjaXR5OiAtMC4wMDAzMjsgfQogIDg4JSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogbWF0cml4KDAuOTksIDAsIDAsIDAuOTksIDAsIDQyLjk5OTUpOwogICAgb3BhY2l0eTogLTAuMDAwMDc7IH0KICA5MiUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk5LCAwLCAwLCAwLjk5LCAwLCA0My4wMDA0NCk7CiAgICBvcGFjaXR5OiAwLjAwMDA2OyB9CiAgOTYlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBtYXRyaXgoMC45OSwgMCwgMCwgMC45OSwgMCwgNDMuMDAwODgpOwogICAgb3BhY2l0eTogMC4wMDAxMjsgfQogIDEwMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IG1hdHJpeCgwLjk5LCAwLCAwLCAwLjk5LCAwLCA0Myk7CiAgICBvcGFjaXR5OiAwOyB9IH0KLmJibS1tb2RhbC0tZGVzdHJveSB7CiAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IDAuNDMzMzNzOwogIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGJibS1kZXN0cm95OwogIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyOwogIC13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDsKICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDUwJSA1MCU7CiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47IH0KCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6IDc2OHB4KSBhbmQgKG1heC1kZXZpY2Utd2lkdGg6IDEwMjRweCkgewogIC5iYm0tbW9kYWwtLW9wZW4sIC5iYm0tbW9kYWwtLXN0YWNrZWQsIC5iYm0tbW9kYWwtLXN0YWNrZWQtcmV2ZXJzZSwgLmJibS1tb2RhbC0tZGVzdHJveSB7CiAgICAtd2Via2l0LWFuaW1hdGlvbjogbm9uZSAhaW1wb3J0YW50OyB9IH0K]]></data>
	</file>
	<file>
	  <filename>/css/addons/datatables.min.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogVGhpcyBjb21iaW5lZCBmaWxlIHdhcyBjcmVhdGVkIGJ5IHRoZSBEYXRhVGFibGVzIGRvd25sb2FkZXIgYnVpbGRlcjoKICogICBodHRwczovL2RhdGF0YWJsZXMubmV0L2Rvd25sb2FkCiAqCiAqIFRvIHJlYnVpbGQgb3IgbW9kaWZ5IHRoaXMgZmlsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbnMgb2YgdGhlIGluY2x1ZGVkCiAqIHNvZnR3YXJlIHBsZWFzZSB2aXNpdDoKICogICBodHRwczovL2RhdGF0YWJsZXMubmV0L2Rvd25sb2FkLyNiczQvanN6aXAtMi41LjAvZHQtMS4xMC4yMC9iLTEuNi4xL2ItY29sdmlzLTEuNi4xL2ItZmxhc2gtMS42LjEvYi1odG1sNS0xLjYuMS9iLXByaW50LTEuNi4xL2NyLTEuNS4yL2ZjLTMuMy4wL2ZoLTMuMS42L2t0LTIuNS4xL3ItMi4yLjMvcmctMS4xLjEvcnItMS4yLjYvc2MtMi4wLjEvc3AtMS4wLjEvc2wtMS4zLjEKICoKICogSW5jbHVkZWQgbGlicmFyaWVzOgogKiAgIEpTWmlwIDIuNS4wLCBEYXRhVGFibGVzIDEuMTAuMjAsIEJ1dHRvbnMgMS42LjEsIENvbHVtbiB2aXNpYmlsaXR5IDEuNi4xLCBGbGFzaCBleHBvcnQgMS42LjEsIEhUTUw1IGV4cG9ydCAxLjYuMSwgUHJpbnQgdmlldyAxLjYuMSwgQ29sUmVvcmRlciAxLjUuMiwgRml4ZWRDb2x1bW5zIDMuMy4wLCBGaXhlZEhlYWRlciAzLjEuNiwgS2V5VGFibGUgMi41LjEsIFJlc3BvbnNpdmUgMi4yLjMsIFJvd0dyb3VwIDEuMS4xLCBSb3dSZW9yZGVyIDEuMi42LCBTY3JvbGxlciAyLjAuMSwgU2VhcmNoUGFuZXMgMS4wLjEsIFNlbGVjdCAxLjMuMQogKi8KCnRhYmxlLmRhdGFUYWJsZXtjbGVhcjpib3RoO21hcmdpbi10b3A6NnB4ICFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTo2cHggIWltcG9ydGFudDttYXgtd2lkdGg6bm9uZSAhaW1wb3J0YW50O2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZSAhaW1wb3J0YW50O2JvcmRlci1zcGFjaW5nOjB9dGFibGUuZGF0YVRhYmxlIHRkLHRhYmxlLmRhdGFUYWJsZSB0aHstd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveH10YWJsZS5kYXRhVGFibGUgdGQuZGF0YVRhYmxlc19lbXB0eSx0YWJsZS5kYXRhVGFibGUgdGguZGF0YVRhYmxlc19lbXB0eXt0ZXh0LWFsaWduOmNlbnRlcn10YWJsZS5kYXRhVGFibGUubm93cmFwIHRoLHRhYmxlLmRhdGFUYWJsZS5ub3dyYXAgdGR7d2hpdGUtc3BhY2U6bm93cmFwfWRpdi5kYXRhVGFibGVzX3dyYXBwZXIgZGl2LmRhdGFUYWJsZXNfbGVuZ3RoIGxhYmVse2ZvbnQtd2VpZ2h0Om5vcm1hbDt0ZXh0LWFsaWduOmxlZnQ7d2hpdGUtc3BhY2U6bm93cmFwfWRpdi5kYXRhVGFibGVzX3dyYXBwZXIgZGl2LmRhdGFUYWJsZXNfbGVuZ3RoIHNlbGVjdHt3aWR0aDphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrfWRpdi5kYXRhVGFibGVzX3dyYXBwZXIgZGl2LmRhdGFUYWJsZXNfZmlsdGVye3RleHQtYWxpZ246cmlnaHR9ZGl2LmRhdGFUYWJsZXNfd3JhcHBlciBkaXYuZGF0YVRhYmxlc19maWx0ZXIgbGFiZWx7Zm9udC13ZWlnaHQ6bm9ybWFsO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWFsaWduOmxlZnR9ZGl2LmRhdGFUYWJsZXNfd3JhcHBlciBkaXYuZGF0YVRhYmxlc19maWx0ZXIgaW5wdXR7bWFyZ2luLWxlZnQ6MC41ZW07ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6YXV0b31kaXYuZGF0YVRhYmxlc193cmFwcGVyIGRpdi5kYXRhVGFibGVzX2luZm97cGFkZGluZy10b3A6MC44NWVtO3doaXRlLXNwYWNlOm5vd3JhcH1kaXYuZGF0YVRhYmxlc193cmFwcGVyIGRpdi5kYXRhVGFibGVzX3BhZ2luYXRle21hcmdpbjowO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWFsaWduOnJpZ2h0fWRpdi5kYXRhVGFibGVzX3dyYXBwZXIgZGl2LmRhdGFUYWJsZXNfcGFnaW5hdGUgdWwucGFnaW5hdGlvbnttYXJnaW46MnB4IDA7d2hpdGUtc3BhY2U6bm93cmFwO2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1kaXYuZGF0YVRhYmxlc193cmFwcGVyIGRpdi5kYXRhVGFibGVzX3Byb2Nlc3Npbmd7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt3aWR0aDoyMDBweDttYXJnaW4tbGVmdDotMTAwcHg7bWFyZ2luLXRvcDotMjZweDt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjFlbSAwfXRhYmxlLmRhdGFUYWJsZSB0aGVhZD50cj50aC5zb3J0aW5nX2FzYyx0YWJsZS5kYXRhVGFibGUgdGhlYWQ+dHI+dGguc29ydGluZ19kZXNjLHRhYmxlLmRhdGFUYWJsZSB0aGVhZD50cj50aC5zb3J0aW5nLHRhYmxlLmRhdGFUYWJsZSB0aGVhZD50cj50ZC5zb3J0aW5nX2FzYyx0YWJsZS5kYXRhVGFibGUgdGhlYWQ+dHI+dGQuc29ydGluZ19kZXNjLHRhYmxlLmRhdGFUYWJsZSB0aGVhZD50cj50ZC5zb3J0aW5ne3BhZGRpbmctcmlnaHQ6MzBweH10YWJsZS5kYXRhVGFibGUgdGhlYWQ+dHI+dGg6YWN0aXZlLHRhYmxlLmRhdGFUYWJsZSB0aGVhZD50cj50ZDphY3RpdmV7b3V0bGluZTpub25lfXRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZyx0YWJsZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmdfYXNjLHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19kZXNjLHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19hc2NfZGlzYWJsZWQsdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2Rlc2NfZGlzYWJsZWR7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246cmVsYXRpdmV9dGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nOmJlZm9yZSx0YWJsZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmc6YWZ0ZXIsdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYzpiZWZvcmUsdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYzphZnRlcix0YWJsZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmdfZGVzYzpiZWZvcmUsdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2Rlc2M6YWZ0ZXIsdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzY19kaXNhYmxlZDpiZWZvcmUsdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzY19kaXNhYmxlZDphZnRlcix0YWJsZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmdfZGVzY19kaXNhYmxlZDpiZWZvcmUsdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2Rlc2NfZGlzYWJsZWQ6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjAuOWVtO2Rpc3BsYXk6YmxvY2s7b3BhY2l0eTowLjN9dGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nOmJlZm9yZSx0YWJsZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmdfYXNjOmJlZm9yZSx0YWJsZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmdfZGVzYzpiZWZvcmUsdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzY19kaXNhYmxlZDpiZWZvcmUsdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2Rlc2NfZGlzYWJsZWQ6YmVmb3Jle3JpZ2h0OjFlbTtjb250ZW50OiJcMjE5MSJ9dGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nOmFmdGVyLHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19hc2M6YWZ0ZXIsdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2Rlc2M6YWZ0ZXIsdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzY19kaXNhYmxlZDphZnRlcix0YWJsZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmdfZGVzY19kaXNhYmxlZDphZnRlcntyaWdodDowLjVlbTtjb250ZW50OiJcMjE5MyJ9dGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYzpiZWZvcmUsdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2Rlc2M6YWZ0ZXJ7b3BhY2l0eToxfXRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19hc2NfZGlzYWJsZWQ6YmVmb3JlLHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19kZXNjX2Rpc2FibGVkOmFmdGVye29wYWNpdHk6MH1kaXYuZGF0YVRhYmxlc19zY3JvbGxIZWFkIHRhYmxlLmRhdGFUYWJsZXttYXJnaW4tYm90dG9tOjAgIWltcG9ydGFudH1kaXYuZGF0YVRhYmxlc19zY3JvbGxCb2R5IHRhYmxle2JvcmRlci10b3A6bm9uZTttYXJnaW4tdG9wOjAgIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAgIWltcG9ydGFudH1kaXYuZGF0YVRhYmxlc19zY3JvbGxCb2R5IHRhYmxlIHRoZWFkIC5zb3J0aW5nOmJlZm9yZSxkaXYuZGF0YVRhYmxlc19zY3JvbGxCb2R5IHRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYzpiZWZvcmUsZGl2LmRhdGFUYWJsZXNfc2Nyb2xsQm9keSB0YWJsZSB0aGVhZCAuc29ydGluZ19kZXNjOmJlZm9yZSxkaXYuZGF0YVRhYmxlc19zY3JvbGxCb2R5IHRhYmxlIHRoZWFkIC5zb3J0aW5nOmFmdGVyLGRpdi5kYXRhVGFibGVzX3Njcm9sbEJvZHkgdGFibGUgdGhlYWQgLnNvcnRpbmdfYXNjOmFmdGVyLGRpdi5kYXRhVGFibGVzX3Njcm9sbEJvZHkgdGFibGUgdGhlYWQgLnNvcnRpbmdfZGVzYzphZnRlcntkaXNwbGF5Om5vbmV9ZGl2LmRhdGFUYWJsZXNfc2Nyb2xsQm9keSB0YWJsZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0aCxkaXYuZGF0YVRhYmxlc19zY3JvbGxCb2R5IHRhYmxlIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6bm9uZX1kaXYuZGF0YVRhYmxlc19zY3JvbGxGb290Pi5kYXRhVGFibGVzX3Njcm9sbEZvb3RJbm5lcntib3gtc2l6aW5nOmNvbnRlbnQtYm94fWRpdi5kYXRhVGFibGVzX3Njcm9sbEZvb3Q+LmRhdGFUYWJsZXNfc2Nyb2xsRm9vdElubmVyPnRhYmxle21hcmdpbi10b3A6MCAhaW1wb3J0YW50O2JvcmRlci10b3A6bm9uZX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCl7ZGl2LmRhdGFUYWJsZXNfd3JhcHBlciBkaXYuZGF0YVRhYmxlc19sZW5ndGgsZGl2LmRhdGFUYWJsZXNfd3JhcHBlciBkaXYuZGF0YVRhYmxlc19maWx0ZXIsZGl2LmRhdGFUYWJsZXNfd3JhcHBlciBkaXYuZGF0YVRhYmxlc19pbmZvLGRpdi5kYXRhVGFibGVzX3dyYXBwZXIgZGl2LmRhdGFUYWJsZXNfcGFnaW5hdGV7dGV4dC1hbGlnbjpjZW50ZXJ9fXRhYmxlLmRhdGFUYWJsZS50YWJsZS1zbT50aGVhZD50cj50aHtwYWRkaW5nLXJpZ2h0OjIwcHh9dGFibGUuZGF0YVRhYmxlLnRhYmxlLXNtIC5zb3J0aW5nOmJlZm9yZSx0YWJsZS5kYXRhVGFibGUudGFibGUtc20gLnNvcnRpbmdfYXNjOmJlZm9yZSx0YWJsZS5kYXRhVGFibGUudGFibGUtc20gLnNvcnRpbmdfZGVzYzpiZWZvcmV7dG9wOjVweDtyaWdodDowLjg1ZW19dGFibGUuZGF0YVRhYmxlLnRhYmxlLXNtIC5zb3J0aW5nOmFmdGVyLHRhYmxlLmRhdGFUYWJsZS50YWJsZS1zbSAuc29ydGluZ19hc2M6YWZ0ZXIsdGFibGUuZGF0YVRhYmxlLnRhYmxlLXNtIC5zb3J0aW5nX2Rlc2M6YWZ0ZXJ7dG9wOjVweH10YWJsZS50YWJsZS1ib3JkZXJlZC5kYXRhVGFibGUgdGgsdGFibGUudGFibGUtYm9yZGVyZWQuZGF0YVRhYmxlIHRke2JvcmRlci1sZWZ0LXdpZHRoOjB9dGFibGUudGFibGUtYm9yZGVyZWQuZGF0YVRhYmxlIHRoOmxhc3QtY2hpbGQsdGFibGUudGFibGUtYm9yZGVyZWQuZGF0YVRhYmxlIHRoOmxhc3QtY2hpbGQsdGFibGUudGFibGUtYm9yZGVyZWQuZGF0YVRhYmxlIHRkOmxhc3QtY2hpbGQsdGFibGUudGFibGUtYm9yZGVyZWQuZGF0YVRhYmxlIHRkOmxhc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0LXdpZHRoOjB9dGFibGUudGFibGUtYm9yZGVyZWQuZGF0YVRhYmxlIHRib2R5IHRoLHRhYmxlLnRhYmxlLWJvcmRlcmVkLmRhdGFUYWJsZSB0Ym9keSB0ZHtib3JkZXItYm90dG9tLXdpZHRoOjB9ZGl2LmRhdGFUYWJsZXNfc2Nyb2xsSGVhZCB0YWJsZS50YWJsZS1ib3JkZXJlZHtib3JkZXItYm90dG9tLXdpZHRoOjB9ZGl2LnRhYmxlLXJlc3BvbnNpdmU+ZGl2LmRhdGFUYWJsZXNfd3JhcHBlcj5kaXYucm93e21hcmdpbjowfWRpdi50YWJsZS1yZXNwb25zaXZlPmRpdi5kYXRhVGFibGVzX3dyYXBwZXI+ZGl2LnJvdz5kaXZbY2xhc3NePSJjb2wtIl06Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OjB9ZGl2LnRhYmxlLXJlc3BvbnNpdmU+ZGl2LmRhdGFUYWJsZXNfd3JhcHBlcj5kaXYucm93PmRpdltjbGFzc149ImNvbC0iXTpsYXN0LWNoaWxke3BhZGRpbmctcmlnaHQ6MH0KCgpAa2V5ZnJhbWVzIGR0Yi1zcGlubmVyezEwMCV7dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1ALW8ta2V5ZnJhbWVzIGR0Yi1zcGlubmVyezEwMCV7LW8tdHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpO3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QC1tcy1rZXlmcmFtZXMgZHRiLXNwaW5uZXJ7MTAwJXstbXMtdHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpO3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QC13ZWJraXQta2V5ZnJhbWVzIGR0Yi1zcGlubmVyezEwMCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDM2MGRlZyk7dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1ALW1vei1rZXlmcmFtZXMgZHRiLXNwaW5uZXJ7MTAwJXstbW96LXRyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fWRpdi5kdC1idXR0b24taW5mb3twb3NpdGlvbjpmaXhlZDt0b3A6NTAlO2xlZnQ6NTAlO3dpZHRoOjQwMHB4O21hcmdpbi10b3A6LTEwMHB4O21hcmdpbi1sZWZ0Oi0yMDBweDtiYWNrZ3JvdW5kLWNvbG9yOndoaXRlO2JvcmRlcjoycHggc29saWQgIzExMTtib3gtc2hhZG93OjNweCAzcHggOHB4IHJnYmEoMCwwLDAsMC4zKTtib3JkZXItcmFkaXVzOjNweDt0ZXh0LWFsaWduOmNlbnRlcjt6LWluZGV4OjIxfWRpdi5kdC1idXR0b24taW5mbyBoMntwYWRkaW5nOjAuNWVtO21hcmdpbjowO2ZvbnQtd2VpZ2h0Om5vcm1hbDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGRkO2JhY2tncm91bmQtY29sb3I6I2YzZjNmM31kaXYuZHQtYnV0dG9uLWluZm8+ZGl2e3BhZGRpbmc6MWVtfWRpdi5kdC1idXR0b24tY29sbGVjdGlvbi10aXRsZXt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjAuM2VtIDAgMC41ZW07Zm9udC1zaXplOjAuOWVtfWRpdi5kdC1idXR0b24tY29sbGVjdGlvbi10aXRsZTplbXB0eXtkaXNwbGF5Om5vbmV9ZGl2LmR0LWJ1dHRvbi1jb2xsZWN0aW9ue3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MjAwMX1kaXYuZHQtYnV0dG9uLWNvbGxlY3Rpb24gZGl2LmRyb3Bkb3duLW1lbnV7ZGlzcGxheTpibG9jazt6LWluZGV4OjIwMDI7bWluLXdpZHRoOjEwMCV9ZGl2LmR0LWJ1dHRvbi1jb2xsZWN0aW9uIGRpdi5kdC1idXR0b24tY29sbGVjdGlvbi10aXRsZXtiYWNrZ3JvdW5kLWNvbG9yOndoaXRlO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwwLjE1KX1kaXYuZHQtYnV0dG9uLWNvbGxlY3Rpb24uZml4ZWR7cG9zaXRpb246Zml4ZWQ7dG9wOjUwJTtsZWZ0OjUwJTttYXJnaW4tbGVmdDotNzVweDtib3JkZXItcmFkaXVzOjB9ZGl2LmR0LWJ1dHRvbi1jb2xsZWN0aW9uLmZpeGVkLnR3by1jb2x1bW57bWFyZ2luLWxlZnQ6LTIwMHB4fWRpdi5kdC1idXR0b24tY29sbGVjdGlvbi5maXhlZC50aHJlZS1jb2x1bW57bWFyZ2luLWxlZnQ6LTIyNXB4fWRpdi5kdC1idXR0b24tY29sbGVjdGlvbi5maXhlZC5mb3VyLWNvbHVtbnttYXJnaW4tbGVmdDotMzAwcHh9ZGl2LmR0LWJ1dHRvbi1jb2xsZWN0aW9uPjpsYXN0LWNoaWxke2Rpc3BsYXk6YmxvY2sgIWltcG9ydGFudDstd2Via2l0LWNvbHVtbi1nYXA6OHB4Oy1tb3otY29sdW1uLWdhcDo4cHg7LW1zLWNvbHVtbi1nYXA6OHB4Oy1vLWNvbHVtbi1nYXA6OHB4O2NvbHVtbi1nYXA6OHB4fWRpdi5kdC1idXR0b24tY29sbGVjdGlvbj46bGFzdC1jaGlsZD4qey13ZWJraXQtY29sdW1uLWJyZWFrLWluc2lkZTphdm9pZDticmVhay1pbnNpZGU6YXZvaWR9ZGl2LmR0LWJ1dHRvbi1jb2xsZWN0aW9uLnR3by1jb2x1bW57d2lkdGg6NDAwcHh9ZGl2LmR0LWJ1dHRvbi1jb2xsZWN0aW9uLnR3by1jb2x1bW4+Omxhc3QtY2hpbGR7cGFkZGluZy1ib3R0b206MXB4Oy13ZWJraXQtY29sdW1uLWNvdW50OjI7LW1vei1jb2x1bW4tY291bnQ6MjstbXMtY29sdW1uLWNvdW50OjI7LW8tY29sdW1uLWNvdW50OjI7Y29sdW1uLWNvdW50OjJ9ZGl2LmR0LWJ1dHRvbi1jb2xsZWN0aW9uLnRocmVlLWNvbHVtbnt3aWR0aDo0NTBweH1kaXYuZHQtYnV0dG9uLWNvbGxlY3Rpb24udGhyZWUtY29sdW1uPjpsYXN0LWNoaWxke3BhZGRpbmctYm90dG9tOjFweDstd2Via2l0LWNvbHVtbi1jb3VudDozOy1tb3otY29sdW1uLWNvdW50OjM7LW1zLWNvbHVtbi1jb3VudDozOy1vLWNvbHVtbi1jb3VudDozO2NvbHVtbi1jb3VudDozfWRpdi5kdC1idXR0b24tY29sbGVjdGlvbi5mb3VyLWNvbHVtbnt3aWR0aDo2MDBweH1kaXYuZHQtYnV0dG9uLWNvbGxlY3Rpb24uZm91ci1jb2x1bW4+Omxhc3QtY2hpbGR7cGFkZGluZy1ib3R0b206MXB4Oy13ZWJraXQtY29sdW1uLWNvdW50OjQ7LW1vei1jb2x1bW4tY291bnQ6NDstbXMtY29sdW1uLWNvdW50OjQ7LW8tY29sdW1uLWNvdW50OjQ7Y29sdW1uLWNvdW50OjR9ZGl2LmR0LWJ1dHRvbi1jb2xsZWN0aW9uIC5kdC1idXR0b257Ym9yZGVyLXJhZGl1czowfWRpdi5kdC1idXR0b24tY29sbGVjdGlvbi5maXhlZHttYXgtd2lkdGg6bm9uZX1kaXYuZHQtYnV0dG9uLWNvbGxlY3Rpb24uZml4ZWQ6YmVmb3JlLGRpdi5kdC1idXR0b24tY29sbGVjdGlvbi5maXhlZDphZnRlcntkaXNwbGF5Om5vbmV9ZGl2LmR0LWJ1dHRvbi1iYWNrZ3JvdW5ke3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6OTk5fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KXtkaXYuZHQtYnV0dG9uc3tmbG9hdDpub25lO3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLWJvdHRvbTowLjVlbX1kaXYuZHQtYnV0dG9ucyBhLmJ0bntmbG9hdDpub25lfX1kaXYuZHQtYnV0dG9ucyBidXR0b24uYnRuLnByb2Nlc3NpbmcsZGl2LmR0LWJ1dHRvbnMgZGl2LmJ0bi5wcm9jZXNzaW5nLGRpdi5kdC1idXR0b25zIGEuYnRuLnByb2Nlc3Npbmd7Y29sb3I6cmdiYSgwLDAsMCwwLjIpfWRpdi5kdC1idXR0b25zIGJ1dHRvbi5idG4ucHJvY2Vzc2luZzphZnRlcixkaXYuZHQtYnV0dG9ucyBkaXYuYnRuLnByb2Nlc3Npbmc6YWZ0ZXIsZGl2LmR0LWJ1dHRvbnMgYS5idG4ucHJvY2Vzc2luZzphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlO3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7bWFyZ2luOi04cHggMCAwIC04cHg7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7Y29udGVudDonICc7Ym9yZGVyOjJweCBzb2xpZCAjMjgyODI4O2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlci1sZWZ0LWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1jb2xvcjp0cmFuc3BhcmVudDthbmltYXRpb246ZHRiLXNwaW5uZXIgMTUwMG1zIGluZmluaXRlIGxpbmVhcjstby1hbmltYXRpb246ZHRiLXNwaW5uZXIgMTUwMG1zIGluZmluaXRlIGxpbmVhcjstbXMtYW5pbWF0aW9uOmR0Yi1zcGlubmVyIDE1MDBtcyBpbmZpbml0ZSBsaW5lYXI7LXdlYmtpdC1hbmltYXRpb246ZHRiLXNwaW5uZXIgMTUwMG1zIGluZmluaXRlIGxpbmVhcjstbW96LWFuaW1hdGlvbjpkdGItc3Bpbm5lciAxNTAwbXMgaW5maW5pdGUgbGluZWFyfQoKCnRhYmxlLkRUQ1JfY2xvbmVkVGFibGUuZGF0YVRhYmxle3Bvc2l0aW9uOmFic29sdXRlICFpbXBvcnRhbnQ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LDAuNyk7ei1pbmRleDoyMDJ9ZGl2LkRUQ1JfcG9pbnRlcnt3aWR0aDoxcHg7YmFja2dyb3VuZC1jb2xvcjojMDI3NWQ4O3otaW5kZXg6MjAxfQoKCnRhYmxlLkRURkNfQ2xvbmVkIHRye2JhY2tncm91bmQtY29sb3I6d2hpdGU7bWFyZ2luLWJvdHRvbTowfWRpdi5EVEZDX0xlZnRIZWFkV3JhcHBlciB0YWJsZSxkaXYuRFRGQ19SaWdodEhlYWRXcmFwcGVyIHRhYmxle2JvcmRlci1ib3R0b206bm9uZSAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206MCAhaW1wb3J0YW50O2JhY2tncm91bmQtY29sb3I6d2hpdGV9ZGl2LkRURkNfTGVmdEJvZHlXcmFwcGVyIHRhYmxlLGRpdi5EVEZDX1JpZ2h0Qm9keVdyYXBwZXIgdGFibGV7Ym9yZGVyLXRvcDpub25lO21hcmdpbjowICFpbXBvcnRhbnQ7ei1pbmRleDoyfWRpdi5EVEZDX0xlZnRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZzpiZWZvcmUsZGl2LkRURkNfTGVmdEJvZHlXcmFwcGVyIHRhYmxlIHRoZWFkIC5zb3J0aW5nOmFmdGVyLGRpdi5EVEZDX0xlZnRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZ19hc2M6YmVmb3JlLGRpdi5EVEZDX0xlZnRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZ19hc2M6YWZ0ZXIsZGl2LkRURkNfTGVmdEJvZHlXcmFwcGVyIHRhYmxlIHRoZWFkIC5zb3J0aW5nX2Rlc2M6YmVmb3JlLGRpdi5EVEZDX0xlZnRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZ19kZXNjOmFmdGVyLGRpdi5EVEZDX0xlZnRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZzpiZWZvcmUsZGl2LkRURkNfTGVmdEJvZHlXcmFwcGVyIHRhYmxlIHRoZWFkIC5zb3J0aW5nOmFmdGVyLGRpdi5EVEZDX0xlZnRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZ19hc2M6YmVmb3JlLGRpdi5EVEZDX0xlZnRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZ19hc2M6YWZ0ZXIsZGl2LkRURkNfTGVmdEJvZHlXcmFwcGVyIHRhYmxlIHRoZWFkIC5zb3J0aW5nX2Rlc2M6YmVmb3JlLGRpdi5EVEZDX0xlZnRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZ19kZXNjOmFmdGVyLGRpdi5EVEZDX1JpZ2h0Qm9keVdyYXBwZXIgdGFibGUgdGhlYWQgLnNvcnRpbmc6YmVmb3JlLGRpdi5EVEZDX1JpZ2h0Qm9keVdyYXBwZXIgdGFibGUgdGhlYWQgLnNvcnRpbmc6YWZ0ZXIsZGl2LkRURkNfUmlnaHRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZ19hc2M6YmVmb3JlLGRpdi5EVEZDX1JpZ2h0Qm9keVdyYXBwZXIgdGFibGUgdGhlYWQgLnNvcnRpbmdfYXNjOmFmdGVyLGRpdi5EVEZDX1JpZ2h0Qm9keVdyYXBwZXIgdGFibGUgdGhlYWQgLnNvcnRpbmdfZGVzYzpiZWZvcmUsZGl2LkRURkNfUmlnaHRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZ19kZXNjOmFmdGVyLGRpdi5EVEZDX1JpZ2h0Qm9keVdyYXBwZXIgdGFibGUgdGhlYWQgLnNvcnRpbmc6YmVmb3JlLGRpdi5EVEZDX1JpZ2h0Qm9keVdyYXBwZXIgdGFibGUgdGhlYWQgLnNvcnRpbmc6YWZ0ZXIsZGl2LkRURkNfUmlnaHRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZ19hc2M6YmVmb3JlLGRpdi5EVEZDX1JpZ2h0Qm9keVdyYXBwZXIgdGFibGUgdGhlYWQgLnNvcnRpbmdfYXNjOmFmdGVyLGRpdi5EVEZDX1JpZ2h0Qm9keVdyYXBwZXIgdGFibGUgdGhlYWQgLnNvcnRpbmdfZGVzYzpiZWZvcmUsZGl2LkRURkNfUmlnaHRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZ19kZXNjOmFmdGVye2Rpc3BsYXk6bm9uZX1kaXYuRFRGQ19MZWZ0Qm9keVdyYXBwZXIgdGFibGUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGgsZGl2LkRURkNfTGVmdEJvZHlXcmFwcGVyIHRhYmxlIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkLGRpdi5EVEZDX1JpZ2h0Qm9keVdyYXBwZXIgdGFibGUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGgsZGl2LkRURkNfUmlnaHRCb2R5V3JhcHBlciB0YWJsZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZHtib3JkZXItdG9wOm5vbmV9ZGl2LkRURkNfTGVmdEZvb3RXcmFwcGVyIHRhYmxlLGRpdi5EVEZDX1JpZ2h0Rm9vdFdyYXBwZXIgdGFibGV7Ym9yZGVyLXRvcDpub25lO21hcmdpbi10b3A6MCAhaW1wb3J0YW50O2JhY2tncm91bmQtY29sb3I6d2hpdGV9ZGl2LkRURkNfQmxvY2tlcntiYWNrZ3JvdW5kLWNvbG9yOndoaXRlfXRhYmxlLmRhdGFUYWJsZS50YWJsZS1zdHJpcGVkLkRURkNfQ2xvbmVkIHRib2R5e2JhY2tncm91bmQtY29sb3I6d2hpdGV9CgoKdGFibGUuZGF0YVRhYmxlLmZpeGVkSGVhZGVyLWZsb2F0aW5nLHRhYmxlLmRhdGFUYWJsZS5maXhlZEhlYWRlci1sb2NrZWR7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTttYXJnaW4tdG9wOjAgIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAgIWltcG9ydGFudH10YWJsZS5kYXRhVGFibGUuZml4ZWRIZWFkZXItZmxvYXRpbmd7cG9zaXRpb246Zml4ZWQgIWltcG9ydGFudH10YWJsZS5kYXRhVGFibGUuZml4ZWRIZWFkZXItbG9ja2Vke3Bvc2l0aW9uOmFic29sdXRlICFpbXBvcnRhbnR9QG1lZGlhIHByaW50e3RhYmxlLmZpeGVkSGVhZGVyLWZsb2F0aW5ne2Rpc3BsYXk6bm9uZX19CgoKdGFibGUuZGF0YVRhYmxlIHRib2R5IHRoLmZvY3VzLHRhYmxlLmRhdGFUYWJsZSB0Ym9keSB0ZC5mb2N1c3tib3gtc2hhZG93Omluc2V0IDAgMCAxcHggMnB4ICMwMjc1ZDh9ZGl2LmR0ay1mb2N1cy1hbHQgdGFibGUuZGF0YVRhYmxlIHRib2R5IHRoLmZvY3VzLGRpdi5kdGstZm9jdXMtYWx0IHRhYmxlLmRhdGFUYWJsZSB0Ym9keSB0ZC5mb2N1c3tib3gtc2hhZG93Omluc2V0IDAgMCAxcHggMnB4ICNmZjhiMzN9CgoKdGFibGUuZGF0YVRhYmxlLmR0ci1pbmxpbmUuY29sbGFwc2VkPnRib2R5PnRyPnRkLmNoaWxkLHRhYmxlLmRhdGFUYWJsZS5kdHItaW5saW5lLmNvbGxhcHNlZD50Ym9keT50cj50aC5jaGlsZCx0YWJsZS5kYXRhVGFibGUuZHRyLWlubGluZS5jb2xsYXBzZWQ+dGJvZHk+dHI+dGQuZGF0YVRhYmxlc19lbXB0eXtjdXJzb3I6ZGVmYXVsdCAhaW1wb3J0YW50fXRhYmxlLmRhdGFUYWJsZS5kdHItaW5saW5lLmNvbGxhcHNlZD50Ym9keT50cj50ZC5jaGlsZDpiZWZvcmUsdGFibGUuZGF0YVRhYmxlLmR0ci1pbmxpbmUuY29sbGFwc2VkPnRib2R5PnRyPnRoLmNoaWxkOmJlZm9yZSx0YWJsZS5kYXRhVGFibGUuZHRyLWlubGluZS5jb2xsYXBzZWQ+dGJvZHk+dHI+dGQuZGF0YVRhYmxlc19lbXB0eTpiZWZvcmV7ZGlzcGxheTpub25lICFpbXBvcnRhbnR9dGFibGUuZGF0YVRhYmxlLmR0ci1pbmxpbmUuY29sbGFwc2VkPnRib2R5PnRyW3JvbGU9InJvdyJdPnRkOmZpcnN0LWNoaWxkLHRhYmxlLmRhdGFUYWJsZS5kdHItaW5saW5lLmNvbGxhcHNlZD50Ym9keT50cltyb2xlPSJyb3ciXT50aDpmaXJzdC1jaGlsZHtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLWxlZnQ6MzBweDtjdXJzb3I6cG9pbnRlcn10YWJsZS5kYXRhVGFibGUuZHRyLWlubGluZS5jb2xsYXBzZWQ+dGJvZHk+dHJbcm9sZT0icm93Il0+dGQ6Zmlyc3QtY2hpbGQ6YmVmb3JlLHRhYmxlLmRhdGFUYWJsZS5kdHItaW5saW5lLmNvbGxhcHNlZD50Ym9keT50cltyb2xlPSJyb3ciXT50aDpmaXJzdC1jaGlsZDpiZWZvcmV7dG9wOjEycHg7bGVmdDo0cHg7aGVpZ2h0OjE0cHg7d2lkdGg6MTRweDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2NvbG9yOndoaXRlO2JvcmRlcjoycHggc29saWQgd2hpdGU7Ym9yZGVyLXJhZGl1czoxNHB4O2JveC1zaGFkb3c6MCAwIDNweCAjNDQ0O2JveC1zaXppbmc6Y29udGVudC1ib3g7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1pbmRlbnQ6MCAhaW1wb3J0YW50O2ZvbnQtZmFtaWx5OidDb3VyaWVyIE5ldycsIENvdXJpZXIsIG1vbm9zcGFjZTtsaW5lLWhlaWdodDoxNHB4O2NvbnRlbnQ6JysnO2JhY2tncm91bmQtY29sb3I6IzAyNzVkOH10YWJsZS5kYXRhVGFibGUuZHRyLWlubGluZS5jb2xsYXBzZWQ+dGJvZHk+dHIucGFyZW50PnRkOmZpcnN0LWNoaWxkOmJlZm9yZSx0YWJsZS5kYXRhVGFibGUuZHRyLWlubGluZS5jb2xsYXBzZWQ+dGJvZHk+dHIucGFyZW50PnRoOmZpcnN0LWNoaWxkOmJlZm9yZXtjb250ZW50OictJztiYWNrZ3JvdW5kLWNvbG9yOiNkMzMzMzN9dGFibGUuZGF0YVRhYmxlLmR0ci1pbmxpbmUuY29sbGFwc2VkLmNvbXBhY3Q+dGJvZHk+dHI+dGQ6Zmlyc3QtY2hpbGQsdGFibGUuZGF0YVRhYmxlLmR0ci1pbmxpbmUuY29sbGFwc2VkLmNvbXBhY3Q+dGJvZHk+dHI+dGg6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OjI3cHh9dGFibGUuZGF0YVRhYmxlLmR0ci1pbmxpbmUuY29sbGFwc2VkLmNvbXBhY3Q+dGJvZHk+dHI+dGQ6Zmlyc3QtY2hpbGQ6YmVmb3JlLHRhYmxlLmRhdGFUYWJsZS5kdHItaW5saW5lLmNvbGxhcHNlZC5jb21wYWN0PnRib2R5PnRyPnRoOmZpcnN0LWNoaWxkOmJlZm9yZXt0b3A6NXB4O2xlZnQ6NHB4O2hlaWdodDoxNHB4O3dpZHRoOjE0cHg7Ym9yZGVyLXJhZGl1czoxNHB4O2xpbmUtaGVpZ2h0OjE0cHg7dGV4dC1pbmRlbnQ6M3B4fXRhYmxlLmRhdGFUYWJsZS5kdHItY29sdW1uPnRib2R5PnRyPnRkLmNvbnRyb2wsdGFibGUuZGF0YVRhYmxlLmR0ci1jb2x1bW4+dGJvZHk+dHI+dGguY29udHJvbHtwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcn10YWJsZS5kYXRhVGFibGUuZHRyLWNvbHVtbj50Ym9keT50cj50ZC5jb250cm9sOmJlZm9yZSx0YWJsZS5kYXRhVGFibGUuZHRyLWNvbHVtbj50Ym9keT50cj50aC5jb250cm9sOmJlZm9yZXt0b3A6NTAlO2xlZnQ6NTAlO2hlaWdodDoxNnB4O3dpZHRoOjE2cHg7bWFyZ2luLXRvcDotMTBweDttYXJnaW4tbGVmdDotMTBweDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2NvbG9yOndoaXRlO2JvcmRlcjoycHggc29saWQgd2hpdGU7Ym9yZGVyLXJhZGl1czoxNHB4O2JveC1zaGFkb3c6MCAwIDNweCAjNDQ0O2JveC1zaXppbmc6Y29udGVudC1ib3g7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1pbmRlbnQ6MCAhaW1wb3J0YW50O2ZvbnQtZmFtaWx5OidDb3VyaWVyIE5ldycsIENvdXJpZXIsIG1vbm9zcGFjZTtsaW5lLWhlaWdodDoxNHB4O2NvbnRlbnQ6JysnO2JhY2tncm91bmQtY29sb3I6IzAyNzVkOH10YWJsZS5kYXRhVGFibGUuZHRyLWNvbHVtbj50Ym9keT50ci5wYXJlbnQgdGQuY29udHJvbDpiZWZvcmUsdGFibGUuZGF0YVRhYmxlLmR0ci1jb2x1bW4+dGJvZHk+dHIucGFyZW50IHRoLmNvbnRyb2w6YmVmb3Jle2NvbnRlbnQ6Jy0nO2JhY2tncm91bmQtY29sb3I6I2QzMzMzM310YWJsZS5kYXRhVGFibGU+dGJvZHk+dHIuY2hpbGR7cGFkZGluZzowLjVlbSAxZW19dGFibGUuZGF0YVRhYmxlPnRib2R5PnRyLmNoaWxkOmhvdmVye2JhY2tncm91bmQ6dHJhbnNwYXJlbnQgIWltcG9ydGFudH10YWJsZS5kYXRhVGFibGU+dGJvZHk+dHIuY2hpbGQgdWwuZHRyLWRldGFpbHN7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGlzdC1zdHlsZS10eXBlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowfXRhYmxlLmRhdGFUYWJsZT50Ym9keT50ci5jaGlsZCB1bC5kdHItZGV0YWlscz5saXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWZlZmVmO3BhZGRpbmc6MC41ZW0gMH10YWJsZS5kYXRhVGFibGU+dGJvZHk+dHIuY2hpbGQgdWwuZHRyLWRldGFpbHM+bGk6Zmlyc3QtY2hpbGR7cGFkZGluZy10b3A6MH10YWJsZS5kYXRhVGFibGU+dGJvZHk+dHIuY2hpbGQgdWwuZHRyLWRldGFpbHM+bGk6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9dGFibGUuZGF0YVRhYmxlPnRib2R5PnRyLmNoaWxkIHNwYW4uZHRyLXRpdGxle2Rpc3BsYXk6aW5saW5lLWJsb2NrO21pbi13aWR0aDo3NXB4O2ZvbnQtd2VpZ2h0OmJvbGR9ZGl2LmR0ci1tb2RhbHtwb3NpdGlvbjpmaXhlZDtib3gtc2l6aW5nOmJvcmRlci1ib3g7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ei1pbmRleDoxMDA7cGFkZGluZzoxMGVtIDFlbX1kaXYuZHRyLW1vZGFsIGRpdi5kdHItbW9kYWwtZGlzcGxheXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MDt3aWR0aDo1MCU7aGVpZ2h0OjUwJTtvdmVyZmxvdzphdXRvO21hcmdpbjphdXRvO3otaW5kZXg6MTAyO292ZXJmbG93OmF1dG87YmFja2dyb3VuZC1jb2xvcjojZjVmNWY3O2JvcmRlcjoxcHggc29saWQgYmxhY2s7Ym9yZGVyLXJhZGl1czowLjVlbTtib3gtc2hhZG93OjAgMTJweCAzMHB4IHJnYmEoMCwwLDAsMC42KX1kaXYuZHRyLW1vZGFsIGRpdi5kdHItbW9kYWwtY29udGVudHtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjFlbX1kaXYuZHRyLW1vZGFsIGRpdi5kdHItbW9kYWwtY2xvc2V7cG9zaXRpb246YWJzb2x1dGU7dG9wOjZweDtyaWdodDo2cHg7d2lkdGg6MjJweDtoZWlnaHQ6MjJweDtib3JkZXI6MXB4IHNvbGlkICNlYWVhZWE7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6M3B4O2N1cnNvcjpwb2ludGVyO3otaW5kZXg6MTJ9ZGl2LmR0ci1tb2RhbCBkaXYuZHRyLW1vZGFsLWNsb3NlOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VhZWFlYX1kaXYuZHRyLW1vZGFsIGRpdi5kdHItbW9kYWwtYmFja2dyb3VuZHtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDt6LWluZGV4OjEwMTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC42KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCl7ZGl2LmR0ci1tb2RhbCBkaXYuZHRyLW1vZGFsLWRpc3BsYXl7d2lkdGg6OTUlfX1kaXYuZHRyLWJzLW1vZGFsIHRhYmxlLnRhYmxlIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6bm9uZX0KCgp0YWJsZS5kYXRhVGFibGUgdHIuZHRyZy1ncm91cCB0ZHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTB9dGFibGUuZGF0YVRhYmxlIHRyLmR0cmctZ3JvdXAuZHRyZy1sZXZlbC0wIHRke2ZvbnQtd2VpZ2h0OmJvbGR9dGFibGUuZGF0YVRhYmxlIHRyLmR0cmctZ3JvdXAuZHRyZy1sZXZlbC0xIHRkLHRhYmxlLmRhdGFUYWJsZSB0ci5kdHJnLWdyb3VwLmR0cmctbGV2ZWwtMiB0ZHtiYWNrZ3JvdW5kLWNvbG9yOiNmMGYwZjA7cGFkZGluZy10b3A6MC4yNWVtO3BhZGRpbmctYm90dG9tOjAuMjVlbTtwYWRkaW5nLWxlZnQ6MmVtO2ZvbnQtc2l6ZTowLjllbX10YWJsZS5kYXRhVGFibGUgdHIuZHRyZy1ncm91cC5kdHJnLWxldmVsLTIgdGR7YmFja2dyb3VuZC1jb2xvcjojZjNmM2YzfQoKCnRhYmxlLmR0LXJvd1Jlb3JkZXItZmxvYXR7cG9zaXRpb246YWJzb2x1dGUgIWltcG9ydGFudDtvcGFjaXR5OjAuODt0YWJsZS1sYXlvdXQ6Zml4ZWQ7b3V0bGluZToycHggc29saWQgIzAyNzVkODtvdXRsaW5lLW9mZnNldDotMnB4O3otaW5kZXg6MjAwMX10ci5kdC1yb3dSZW9yZGVyLW1vdmluZ3tvdXRsaW5lOjJweCBzb2xpZCAjODg4O291dGxpbmUtb2Zmc2V0Oi0ycHh9Ym9keS5kdC1yb3dSZW9yZGVyLW5vT3ZlcmZsb3d7b3ZlcmZsb3cteDpoaWRkZW59dGFibGUuZGF0YVRhYmxlIHRkLnJlb3JkZXJ7dGV4dC1hbGlnbjpjZW50ZXI7Y3Vyc29yOm1vdmV9CgoKZGl2LmR0c3tkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnR9ZGl2LmR0cyB0Ym9keSB0aCxkaXYuZHRzIHRib2R5IHRke3doaXRlLXNwYWNlOm5vd3JhcH1kaXYuZHRzIGRpdi5kdHNfbG9hZGluZ3t6LWluZGV4OjF9ZGl2LmR0cyBkaXYuZHRzX2xhYmVse3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwcHg7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuOCk7Y29sb3I6d2hpdGU7Ym94LXNoYWRvdzozcHggM3B4IDEwcHggcmdiYSgwLDAsMCwwLjUpO3RleHQtYWxpZ246cmlnaHQ7Ym9yZGVyLXJhZGl1czozcHg7cGFkZGluZzowLjRlbTt6LWluZGV4OjI7ZGlzcGxheTpub25lfWRpdi5kdHMgZGl2LmRhdGFUYWJsZXNfc2Nyb2xsQm9keXtiYWNrZ3JvdW5kOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoNDVkZWcsICNlZGVlZmYsICNlZGVlZmYgMTBweCwgI2ZmZiAxMHB4LCAjZmZmIDIwcHgpfWRpdi5kdHMgZGl2LmRhdGFUYWJsZXNfc2Nyb2xsQm9keSB0YWJsZXt6LWluZGV4OjJ9ZGl2LmR0cyBkaXYuZGF0YVRhYmxlc19wYWdpbmF0ZSxkaXYuZHRzIGRpdi5kYXRhVGFibGVzX2xlbmd0aHtkaXNwbGF5Om5vbmV9ZGl2LkRUUyBkaXYuZGF0YVRhYmxlc19zY3JvbGxCb2R5IHRhYmxle2JhY2tncm91bmQtY29sb3I6d2hpdGV9CgoKZGl2LmR0c3AtdG9wUm93e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kO2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fWRpdi5kdHNwLXRvcFJvdyBkaXYuZHRzcC1zdWJSb3cxe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtmbGV4LWdyb3c6MTtmbGV4LXNocmluazowO2ZsZXgtYmFzaXM6MH1kaXYuZHRzcC10b3BSb3cgZGl2LmR0c3Atc2VhcmNoQ29udHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7ZmxleC1ncm93OjE7ZmxleC1zaHJpbms6MDtmbGV4LWJhc2lzOjB9ZGl2LmR0c3AtdG9wUm93IGJ1dHRvbi5kdHNwLW5hbWVCdXR0b257YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ01BQUFBakNBWUFBQUFlMmJOWkFBQUJjR2xEUTFCcFkyTUFBQ2lSZFpITlN3SkJHTVlmdFREUzhGQ0hrQTU3c09pZ0lBWFJNUXp5WWgzVUlLdkw3cmlyd2U2NnpLNklkQTI2ZEJBNlJGMzZPdlFmMURYb1doQUVSUkFSOUIvMGRRblozbkVGSlhTRzJmZkhzL084ekR3RCtETTZNK3lCSkdDWURzK21VOUphWVYwS3ZpTk1NNFFvRWpLenJlWGNVaDU5eDg4amZLSStKRVN2L3Z0NmpsQlJ0Um5nR3lLZVl4WjNpQmVJTXpYSEVyeEhQTWJLY3BINGhEak82WURFdDBKWFBINFRYUEw0U3pEUFp4Y0J2K2dwbGJwWTZXSlc1Z2J4TkhITTBLdXNmUjV4azdCcXJ1YW9SbWxOd0VZV2FhUWdRVUVWVzlEaElFSFZwTXg2KzVJdDN3b3E1R0gwdFZBSEowY0paZkxHU2ExU1Y1V3FScnBLVTBkZDVQNC9UMXVibmZHNmgxUEE0S3ZyZms0Q3dYMmcyWERkMzFQWGJaNEJnUmZnMnV6NEs1VFQvRGZwalk0V093WWlPOERsVFVkVERvQ3JYV0Q4MlpLNTNKSUN0UHlhQm54Y0FDTUZZUFFlR043d3Ntci94L2tUa04rbUo3b0REbytBS2RvZjJmd0RDQlJvRGtMOFVjY0FBQUFKY0VoWmN3QUFEMkVBQUE5aEFhZy9wMmtBQUFLMlNVUkJWRmdKN1pZOWo0MUJGSUN2cnlDRXhySkJRNkh5RVlWRUlSRWFVWkRRSVJvUjJWaUpLQ2lveFYrZ2tWWFlUVlpFUWlFVWhHMkVRbnhVQ2gwRktvbFk0dXQ1WG5NMmN5ZnZhM1B0NW03RVBjbXpaMmJlbVRObnpqa3pkMXV0bnZRaTBJdkFmeGlCeTV6NUZveE84OWtQWSs4bWJNanR6czQ3UlhzNS9XVnBiQUc2YldFeHQ1UHVJaWJ2aFZrd21DK2NrM2VLOWxuNi9mQWRkRm9qWXpCVnVZU0JwY25JRXZSYXFPdzJSY2FOMThGUHVKSDBKdlJVeGJUM3dXZjRsdGlLUGdmVmlkV2xiR1pnUG96REZmZ0FDK0VBL0syRUk0Y3djQUorZ1BhZVErVlFVMlNPTU1HY1BnUGwvbS9WMnA1MHJyYlJzUmd0OUl2NWg2eHRwUDIyQno3Q2UxQytnRkZ4Zkt6T21TaGNVK1FteWgydzN3OHJJSmZkZEhUY2s2NkV1a0wveFBoaitKTThySE5tRnlzMFBnNHYwdXAzYUZObHdSOU5ZeW9kZDNPTC9DNjR6cHN5bWNURmNmNkVsTTRZempBV0tZckprYXE4a0UveVVZTlA0Qm9ZdlMxUVJvK2hOdEY1eGZrVFVqb1RoZXVrU0ZGTWpsVEZtNlBqY2VPY2EvU01wS2ZlQ1IxTDZVemsveTJXSWtWaE5GSmxKQVpoUCtoWW5zN2I5RDNJUHVoWTVtWXJJdjhPclFKdlI1Tll5TmFXNGpzVThwU0dOeVNpVng0bzV0WHEzSmtvWEUvbWc1Ui9NOGRHSkNKcEtoYURjakJSZGJJL1JtOGc2OWMxMjJvbTMzQkhtajJDSG9WNXFhOWpVWEJyYUorRzFmQVZqSUJPMWtsYzg3cm8xSzRKWi9LMzVTV1czVHdjeURkNlRlY3FuQUVkOGNHcTIrdzg0eHZCbTFuM3ZTMGl6S2trd2g1WE5DL0dtRlBxcUF0UEY4OUFPU2NLdWVtYU56b1RWMVNENWR0U2JtTGYxL1JWK3RDMFdUZ2NqNlI3SEV0clZHV2FxdS9sWURaLzJwdnhRL2tJeXcvZ0ZCeUhDOUFIdzkxMGh2MWFVVXVteWQ4eXkwUWZobUVrZmlOb2QwWHVzY3Q2OEoxcWM4VGR1eDBaOTdRK2hzRGIrQVlHWUViRi80R3V3MlEvcURQcVpHL3pYZ1QrM1FqOEF0S25mV2hGd211QUFBQUFBRWxGVGtTdVFtQ0MiKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXI7YmFja2dyb3VuZC1zaXplOjIzcHg7dmVydGljYWwtYWxpZ246Ym90dG9tfWRpdi5kdHNwLXRvcFJvdyBidXR0b24uZHRzcC1jb3VudEJ1dHRvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQmNHbERRMUJwWTJNQUFDaVJkWkhOU3dKQkdNWWZ0VERTOEZDSGtBNTdzT2lnSUFYUk1RenlZaDNVSUt2TDdyaXJ3ZTY2eks2SWRBMjZkQkE2UkYzNk92UWYxRFhvV2hBRVJSQVI5Qi8wZFFuWjNuRUZKWFNHMmZmSHMvTzh6RHdEK0RNNk0reUJKR0NZRHMrbVU5SmFZVjBLdmlOTU00UW9Fakt6cmVYY1VoNTl4ODhqZktJK0pFU3YvdnQ2amxCUnRSbmdHeUtlWXhaM2lCZUlNelhIRXJ4SFBNYktjcEg0aERqTzZZREV0MEpYUEg0VFhQTDRTekRQWnhjQnYrZ3BsYnBZNldKVzVnYnhOSEhNMEt1c2ZSNXhrN0JxcnVhb1JtbE53RVlXYWFRZ1FVRVZXOURoSUVIVnBNeDYrNUl0M3dvcTVHSDB0VkFISjBjSlpmTEdTYTFTVjVXcVJycEtVMGRkNVA0L1QxdWJuZkc2aDFQQTRLdnJmazRDd1gyZzJYRGQzMVBYYlo0QmdSZmcydXo0SzVUVC9EZnBqWTRXT3dZaU84RGxUVWRURG9DclhXRDgyWks1M0pJQ3RQeWFCbnhjQUNNRllQUWVHTjd3c21yL3gva1RrTittSjdvRERvK0FLZG9mMmZ3RENCUm9Ea0w4VWNjQUFBQUpjRWhaY3dBQUQyRUFBQTloQWFnL3Aya0FBQUc1U1VSQlZFZ04zVlU5THdWQkZGMGZpWWhvZlVTbEVRa0toVTd6L29CQ1FrSWlHcjlCZ1ViaFZ6eTlCQW5oRnlqVi9BWUZpVTVJQ003Wk4rYzVadWQ1ZG0zbEptZm16cmt6OSs3Y3UzYzN5LzZqak9CU0Y4Q3hYUzdGbVRrYndxSUpqRHBKdlRjbXNKNEszS1BaVXB5WnN4MHN4b0I5SjZtbkFreUM3d0d1dUNGSWlwTnRFY3BjV0V4Z1hwT0JjNzh2Z2o2TitRTzROVnNqd2RGTTU5dFVJRHhEckhNQk9lSVEzNEM1WkRyZWdYdUFRbTRZY0k2OG5OOUIzd3IyUGN3UEFJUGtOMkVxdEpINmIrUVptMWFqalR4N0Jxd0FyMjZMYitDMkt2cGJ0ME1iMkhBSjdOckdGR2ZtWE8zRGVBNFVzaERmUUFWbUgwZ2FVRmc4NTJUVFREdmx4d0JsQ3R4eTl6WHlCaFFGYXEwd01tSWRSZWJyZmdvc0EzemIyaEtucUcwb3FjaHA0UWJ1UjhYMFRqekFCaGJkT1Q4am5RL2F0Y2dxcG5md09BN3lxWnlUVTU4N1prSUdkZXNMVHQyRWt5bk9uYnJlTVVVS01JL2RBNEIvUVZPY08xM0NRaCs1d1dDZ0R3by83NXU1OW9kQi93am1maGJndkFDY0FPeVpQSGloTVdBb0l3eHlDTGdmMW94ZmdqelZiZ0JYU1R6SU4rZjBwZzZzNURrY2VzTE1ScHNCcmdFMlhPM0NONjRKRlA3SnRVZUtIWDRDS3RSUlhGWis3ZEVBQUFBQVNVVk9SSzVDWUlJPSIpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcjtiYWNrZ3JvdW5kLXNpemU6MThweDt2ZXJ0aWNhbC1hbGlnbjpib3R0b219ZGl2LmR0c3AtdG9wUm93IGJ1dHRvbi5kdHNwLXNlYXJjaEljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQThBQUFBUENBWUFBQUE3MXBWS0FBQUJjR2xEUTFCcFkyTUFBQ2lSZFpITlN3SkJHTVlmdFREUzhGQ0hrQTU3c09pZ0lBWFJNUXp5WWgzVUlLdkw3cmlyd2U2NnpLNklkQTI2ZEJBNlJGMzZPdlFmMURYb1doQUVSUkFSOUIvMGRRblozbkVGSlhTRzJmZkhzL084ekR3RCtETTZNK3lCSkdDWURzK21VOUphWVYwS3ZpTk1NNFFvRWpLenJlWGNVaDU5eDg4amZLSStKRVN2L3Z0NmpsQlJ0Um5nR3lLZVl4WjNpQmVJTXpYSEVyeEhQTWJLY3BINGhEak82WURFdDBKWFBINFRYUEw0U3pEUFp4Y0J2K2dwbGJwWTZXSlc1Z2J4TkhITTBLdXNmUjV4azdCcXJ1YW9SbWxOd0VZV2FhUWdRVUVWVzlEaElFSFZwTXg2KzVJdDN3b3E1R0gwdFZBSEowY0paZkxHU2ExU1Y1V3FScnBLVTBkZDVQNC9UMXVibmZHNmgxUEE0S3ZyZms0Q3dYMmcyWERkMzFQWGJaNEJnUmZnMnV6NEs1VFQvRGZwalk0V093WWlPOERsVFVkVERvQ3JYV0Q4MlpLNTNKSUN0UHlhQm54Y0FDTUZZUFFlR043d3Ntci94L2tUa04rbUo3b0REbytBS2RvZjJmd0RDQlJvRGtMOFVjY0FBQUFKY0VoWmN3QUFEMkVBQUE5aEFhZy9wMmtBQUFFblNVUkJWQ2dWcGRHN1NnTkJGSURoMVJoSnNCQkVzRElnSWhhV0ZqWmEyR3RwS2I2QW5VME1wcktPV0VqSzJJdUZGeEN4UzJsaFp5T1dYaDVBUVZFUi9YK3p1d3d5d29JSHZwM2RNM05tNTVJay80aStQMm9yNUZld2lCSWUwY0V0OG9nVno5TGJoRVZmK2Nna2NldzF0dkFaNVBQWEdtOUhPTUVhbk1BWVFodW5hQ0FhenVxQTFVanZJTGw5SEdQYy9uNGZhYmpQR2J6ak1NMkZqZmtEdVB3NU84SmlsemdBOS9PS1dEeW55V25ic1BpRjd5YzRTUld4bUV5VE43WmhzU2Q3Z1RMVzhUdUdTU3pCY1pkMmhzVituK01OQzlqR0NOempQRHdzejhYQ08veDAyQnFlcHRjeGhnKzRnakQ4WXhldExPa0JHUmJ1d2NJcitOZFJMTVBsM3VNTTJZSHgyZ3NMZCtEOTdxS0VRdUdlNjVqQ0F6YmdWUldPQ1VadW92QWZzNW0vQWRWeEwwUjFBSXNMQUFBQUFFbEZUa1N1UW1DQyIpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcjtiYWNrZ3JvdW5kLXNpemU6MTJweH1kaXYuZGF0YVRhYmxlc19zY3JvbGxCb2R5e2JhY2tncm91bmQ6d2hpdGUgIWltcG9ydGFudH1kaXYuZHRzcC1zZWFyY2hQYW5lc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1ldmVubHk7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0O2FsaWduLWl0ZW1zOnN0cmV0Y2g7Y2xlYXI6Ym90aH1kaXYuZHRzcC1zZWFyY2hQYW5lcyBidXR0b24uYnRue21hcmdpbjoxcHh9ZGl2LmR0c3Atc2VhcmNoUGFuZXMgYnV0dG9uLmR0c3AtY2xlYXJBbGx7bWF4LXdpZHRoOjUwcHh9ZGl2LmR0c3Atc2VhcmNoUGFuZXtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtmbGV4LWdyb3c6MTtmbGV4LXNocmluazowO2ZsZXgtYmFzaXM6MjgwcHg7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZDthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6c3RyZXRjaDtwYWRkaW5nLXRvcDowcHg7cGFkZGluZy1ib3R0b206NXB4O21hcmdpbjo1cHggMDttYXJnaW4tdG9wOjBweDttYXJnaW4tYm90dG9tOjBweDtmb250LXNpemU6MC45ZW07bWFyZ2luOjVweH1kaXYuZHRzcC1zZWFyY2hQYW5lIGRpdi5kYXRhVGFibGVzX3dyYXBwZXJ7ZmxleDoxfWRpdi5kdHNwLXNlYXJjaFBhbmUgZGl2LmRhdGFUYWJsZXNfd3JhcHBlciBkaXYuZGF0YVRhYmxlc19maWx0ZXJ7ZGlzcGxheTpub25lfWRpdi5kdHNwLXNlYXJjaFBhbmUgZGl2LmRhdGFUYWJsZXNfd3JhcHBlciBkaXYucm93IGRpdi5jb2wtc20tMTI6ZW1wdHl7ZGlzcGxheTpub25lfWRpdi5kdHNwLXNlYXJjaFBhbmUgZGl2LmRhdGFUYWJsZXNfd3JhcHBlciBkaXYucm93IGRpdi5kYXRhVGFibGVzX2ZpbHRlcntkaXNwbGF5Om5vbmV9ZGl2LmR0c3Atc2VhcmNoUGFuZSBkaXYuYnRuLWdyb3Vwe3BhZGRpbmc6MHB4fWRpdi5kdHNwLXNlYXJjaFBhbmUgZGl2LmJ0bi1ncm91cCBidXR0b24uYnRue21hcmdpbjowO2hlaWdodDo0MHB4fWRpdi5kdHNwLXNlYXJjaFBhbmUgZGl2LmR0c3AtdG9wUm93e3BhZGRpbmc6MHB4ICFpbXBvcnRhbnQ7bWFyZ2luOjBweCAhaW1wb3J0YW50fWRpdi5kdHNwLXNlYXJjaFBhbmUgZGl2LmR0c3AtdG9wUm93IGRpdi5kdHNwLXN1YlJvd3N7cGFkZGluZzowcHggIWltcG9ydGFudDt0ZXh0LWFsaWduOnJpZ2h0fWRpdi5kdHNwLXNlYXJjaFBhbmUgZGl2LmR0c3AtdG9wUm93IGRpdi5yb3d7d2lkdGg6MTAwJX1kaXYuZHRzcC1zZWFyY2hQYW5lIHRoZWFke2Rpc3BsYXk6bm9uZX1kaXYuZHRzcC1zZWFyY2hQYW5lIC5tYi0ze21hcmdpbi1ib3R0b206bm9uZSAhaW1wb3J0YW50fWRpdi5kdHNwLXNlYXJjaFBhbmUgLmNvbC1zbS0xMntwYWRkaW5nOjVweH1kaXYuZHRzcC1zZWFyY2hQYW5lIC5pbnB1dC1ncm91cHtoZWlnaHQ6NDBweCAhaW1wb3J0YW50O3BhZGRpbmc6MHB4ICFpbXBvcnRhbnR9ZGl2LmR0c3Atc2VhcmNoUGFuZSAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWFwcGVuZHtkaXNwbGF5OmlubGluZS1ibG9ja31kaXYuZHRzcC1zZWFyY2hQYW5lIGRpdi5kYXRhVGFibGVzX3Njcm9sbEhlYWR7ZGlzcGxheTpub25lfWRpdi5kdHNwLXNlYXJjaFBhbmUgZGl2LmRhdGFUYWJsZXNfc2Nyb2xsQm9keXtwYWRkaW5nOjJweDtib3JkZXI6MnB4ICNmMGYwZjAgc29saWQ7Ym9yZGVyLXJhZGl1czo0cHh9ZGl2LmR0c3Atc2VhcmNoUGFuZSBkaXYuZGF0YVRhYmxlc19zY3JvbGxCb2R5OmhvdmVye2JvcmRlcjoycHggc29saWQgI2NmY2ZjZiAhaW1wb3J0YW50fWRpdi5kdHNwLXNlYXJjaFBhbmUgZGl2LmRhdGFUYWJsZXNfc2Nyb2xsQm9keSB0YWJsZSB0Ym9keSB0ciBzcGFuLmJhZGdle2Zsb2F0OnJpZ2h0O21pbi13aWR0aDozMHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjF9ZGl2LmR0c3Atc2VhcmNoUGFuZSBkaXYuZGF0YVRhYmxlc19zY3JvbGxCb2R5IHRhYmxlIHRib2R5IHRyIHRkLmR0c3AtY291bnRDb2x1bW57dGV4dC1hbGlnbjpyaWdodH1kaXYuZHRzcC1zZWFyY2hQYW5lIC5kdHNwLXNlYXJjaEljb257ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjE4cHggMTNweH1kaXYuZHRzcC1zZWFyY2hQYW5lIGRpdi5kYXRhVGFibGVzX3dyYXBwZXIgZGl2LmRhdGFUYWJsZXNfZmlsdGVye2Rpc3BsYXk6bm9uZX1kaXYuZHRzcC1zZWFyY2hQYW5lIGRpdi5kYXRhVGFibGVzX3dyYXBwZXIgZGl2LnJvd3ttYXJnaW4tbGVmdDotN3B4O21hcmdpbi1yaWdodDotN3B4fWRpdi5kdHNwLXNlYXJjaFBhbmUgZGl2LmJhZGdle21pbi13aWR0aDozMHB4fWRpdi5kdHNwLXBhbmVze3BhZGRpbmc6NXB4O2JvcmRlcjoycHggc29saWQgI2YwZjBmMDtib3JkZXItcmFkaXVzOjEwcHg7bWFyZ2luOjVweDtjbGVhcjpib3RofWRpdi5kdHNwLXBhbmVzIGRpdi5kdHNwLXRpdGxlUm93e3BhZGRpbmctYm90dG9tOjEwcHh9ZGl2LmR0c3AtcGFuZXMgZGl2LmR0c3AtdGl0bGV7ZmxvYXQ6bGVmdDttYXJnaW46MjBweDttYXJnaW4tYm90dG9tOjBweDttYXJnaW4tdG9wOjEwcHh9ZGl2LmR0c3AtcGFuZXMgYnV0dG9uLmR0c3AtY2xlYXJBbGx7ZmxvYXQ6cmlnaHR9ZGl2LmR0c3AtY29sdW1ucy0xe21pbi13aWR0aDo5OCU7bWF4LXdpZHRoOjk4JTtwYWRkaW5nLWxlZnQ6MSU7cGFkZGluZy1yaWdodDoxJTttYXJnaW46MHB4ICFpbXBvcnRhbnR9ZGl2LmR0c3AtY29sdW1ucy0ye21pbi13aWR0aDo0OCU7bWF4LXdpZHRoOjQ4JTtwYWRkaW5nLWxlZnQ6MSU7cGFkZGluZy1yaWdodDoxJTttYXJnaW46MHB4ICFpbXBvcnRhbnR9ZGl2LmR0c3AtY29sdW1ucy0ze21pbi13aWR0aDozMy4zMzMlO21heC13aWR0aDozMy4zMzMlO3BhZGRpbmctbGVmdDoxJTtwYWRkaW5nLXJpZ2h0OjElO21hcmdpbjowcHggIWltcG9ydGFudH1kaXYuZHRzcC1jb2x1bW5zLTR7bWluLXdpZHRoOjIzJTttYXgtd2lkdGg6MjMlO3BhZGRpbmctbGVmdDoxJTtwYWRkaW5nLXJpZ2h0OjElO21hcmdpbjowcHggIWltcG9ydGFudH1kaXYuZHRzcC1jb2x1bW5zLTQgZGl2LmR0c3AtdG9wUm93e2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiAhaW1wb3J0YW50fWRpdi5kdHNwLWNvbHVtbnMtNXttaW4td2lkdGg6MTglO21heC13aWR0aDoxOCU7cGFkZGluZy1sZWZ0OjElO3BhZGRpbmctcmlnaHQ6MSU7bWFyZ2luOjBweCAhaW1wb3J0YW50fWRpdi5kdHNwLWNvbHVtbnMtNSBkaXYuZHRzcC10b3BSb3d7ZmxleC1kaXJlY3Rpb246Y29sdW1uICFpbXBvcnRhbnR9ZGl2LmR0c3AtY29sdW1ucy02e21pbi13aWR0aDoxNS42NjYlO21heC13aWR0aDoxNS42NjYlO3BhZGRpbmctbGVmdDowLjUlO3BhZGRpbmctcmlnaHQ6MC41JTttYXJnaW46MHB4ICFpbXBvcnRhbnR9ZGl2LmR0c3AtY29sdW1ucy02IGRpdi5kdHNwLXRvcFJvd3tmbGV4LWRpcmVjdGlvbjpjb2x1bW4gIWltcG9ydGFudH1kaXYuZHRzcC1oaWRkZW57ZGlzcGxheTpub25lICFpbXBvcnRhbnR9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpe2Rpdi5kdHNwLWNvbHVtbnMtNCxkaXYuZHRzcC1jb2x1bW5zLTUsZGl2LmR0c3AtY29sdW1ucy02e21heC13aWR0aDozMSUgIWltcG9ydGFudDttaW4td2lkdGg6MzElICFpbXBvcnRhbnR9fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDY0MHB4KXtkaXYuZHRzcC1zZWFyY2hQYW5lc3tmbGV4LWRpcmVjdGlvbjpjb2x1bW4gIWltcG9ydGFudH1kaXYuZHRzcC1zZWFyY2hQYW5le21heC13aWR0aDo5OCUgIWltcG9ydGFudDttaW4td2lkdGg6OTglICFpbXBvcnRhbnR9fQoKCnRhYmxlLmRhdGFUYWJsZSB0Ym9keT50ci5zZWxlY3RlZCx0YWJsZS5kYXRhVGFibGUgdGJvZHk+dHI+LnNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6IzAyNzVkOH10YWJsZS5kYXRhVGFibGUuc3RyaXBlIHRib2R5PnRyLm9kZC5zZWxlY3RlZCx0YWJsZS5kYXRhVGFibGUuc3RyaXBlIHRib2R5PnRyLm9kZD4uc2VsZWN0ZWQsdGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHk+dHIub2RkLnNlbGVjdGVkLHRhYmxlLmRhdGFUYWJsZS5kaXNwbGF5IHRib2R5PnRyLm9kZD4uc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojMDI3MmQzfXRhYmxlLmRhdGFUYWJsZS5ob3ZlciB0Ym9keT50ci5zZWxlY3RlZDpob3Zlcix0YWJsZS5kYXRhVGFibGUuaG92ZXIgdGJvZHk+dHI+LnNlbGVjdGVkOmhvdmVyLHRhYmxlLmRhdGFUYWJsZS5kaXNwbGF5IHRib2R5PnRyLnNlbGVjdGVkOmhvdmVyLHRhYmxlLmRhdGFUYWJsZS5kaXNwbGF5IHRib2R5PnRyPi5zZWxlY3RlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMjcxZDB9dGFibGUuZGF0YVRhYmxlLm9yZGVyLWNvbHVtbiB0Ym9keT50ci5zZWxlY3RlZD4uc29ydGluZ18xLHRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4gdGJvZHk+dHIuc2VsZWN0ZWQ+LnNvcnRpbmdfMix0YWJsZS5kYXRhVGFibGUub3JkZXItY29sdW1uIHRib2R5PnRyLnNlbGVjdGVkPi5zb3J0aW5nXzMsdGFibGUuZGF0YVRhYmxlLm9yZGVyLWNvbHVtbiB0Ym9keT50cj4uc2VsZWN0ZWQsdGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHk+dHIuc2VsZWN0ZWQ+LnNvcnRpbmdfMSx0YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keT50ci5zZWxlY3RlZD4uc29ydGluZ18yLHRhYmxlLmRhdGFUYWJsZS5kaXNwbGF5IHRib2R5PnRyLnNlbGVjdGVkPi5zb3J0aW5nXzMsdGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHk+dHI+LnNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6IzAyNzNkNH10YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keT50ci5vZGQuc2VsZWN0ZWQ+LnNvcnRpbmdfMSx0YWJsZS5kYXRhVGFibGUub3JkZXItY29sdW1uLnN0cmlwZSB0Ym9keT50ci5vZGQuc2VsZWN0ZWQ+LnNvcnRpbmdfMXtiYWNrZ3JvdW5kLWNvbG9yOiMwMjZmY2N9dGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHk+dHIub2RkLnNlbGVjdGVkPi5zb3J0aW5nXzIsdGFibGUuZGF0YVRhYmxlLm9yZGVyLWNvbHVtbi5zdHJpcGUgdGJvZHk+dHIub2RkLnNlbGVjdGVkPi5zb3J0aW5nXzJ7YmFja2dyb3VuZC1jb2xvcjojMDI3MGNlfXRhYmxlLmRhdGFUYWJsZS5kaXNwbGF5IHRib2R5PnRyLm9kZC5zZWxlY3RlZD4uc29ydGluZ18zLHRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4uc3RyaXBlIHRib2R5PnRyLm9kZC5zZWxlY3RlZD4uc29ydGluZ18ze2JhY2tncm91bmQtY29sb3I6IzAyNzBkMH10YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keT50ci5ldmVuLnNlbGVjdGVkPi5zb3J0aW5nXzEsdGFibGUuZGF0YVRhYmxlLm9yZGVyLWNvbHVtbi5zdHJpcGUgdGJvZHk+dHIuZXZlbi5zZWxlY3RlZD4uc29ydGluZ18xe2JhY2tncm91bmQtY29sb3I6IzAyNzNkNH10YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keT50ci5ldmVuLnNlbGVjdGVkPi5zb3J0aW5nXzIsdGFibGUuZGF0YVRhYmxlLm9yZGVyLWNvbHVtbi5zdHJpcGUgdGJvZHk+dHIuZXZlbi5zZWxlY3RlZD4uc29ydGluZ18ye2JhY2tncm91bmQtY29sb3I6IzAyNzRkNX10YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keT50ci5ldmVuLnNlbGVjdGVkPi5zb3J0aW5nXzMsdGFibGUuZGF0YVRhYmxlLm9yZGVyLWNvbHVtbi5zdHJpcGUgdGJvZHk+dHIuZXZlbi5zZWxlY3RlZD4uc29ydGluZ18ze2JhY2tncm91bmQtY29sb3I6IzAyNzVkN310YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keT50ci5vZGQ+LnNlbGVjdGVkLHRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4uc3RyaXBlIHRib2R5PnRyLm9kZD4uc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojMDI2ZmNjfXRhYmxlLmRhdGFUYWJsZS5kaXNwbGF5IHRib2R5PnRyLmV2ZW4+LnNlbGVjdGVkLHRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4uc3RyaXBlIHRib2R5PnRyLmV2ZW4+LnNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6IzAyNzNkNH10YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keT50ci5zZWxlY3RlZDpob3Zlcj4uc29ydGluZ18xLHRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4uaG92ZXIgdGJvZHk+dHIuc2VsZWN0ZWQ6aG92ZXI+LnNvcnRpbmdfMXtiYWNrZ3JvdW5kLWNvbG9yOiMwMjZiYzZ9dGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHk+dHIuc2VsZWN0ZWQ6aG92ZXI+LnNvcnRpbmdfMix0YWJsZS5kYXRhVGFibGUub3JkZXItY29sdW1uLmhvdmVyIHRib2R5PnRyLnNlbGVjdGVkOmhvdmVyPi5zb3J0aW5nXzJ7YmFja2dyb3VuZC1jb2xvcjojMDI2Y2M4fXRhYmxlLmRhdGFUYWJsZS5kaXNwbGF5IHRib2R5PnRyLnNlbGVjdGVkOmhvdmVyPi5zb3J0aW5nXzMsdGFibGUuZGF0YVRhYmxlLm9yZGVyLWNvbHVtbi5ob3ZlciB0Ym9keT50ci5zZWxlY3RlZDpob3Zlcj4uc29ydGluZ18ze2JhY2tncm91bmQtY29sb3I6IzAyNmVjYX10YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keT50cjpob3Zlcj4uc2VsZWN0ZWQsdGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHk+dHI+LnNlbGVjdGVkOmhvdmVyLHRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4uaG92ZXIgdGJvZHk+dHI6aG92ZXI+LnNlbGVjdGVkLHRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4uaG92ZXIgdGJvZHk+dHI+LnNlbGVjdGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAyNmJjNn10YWJsZS5kYXRhVGFibGUgdGJvZHkgdGQuc2VsZWN0LWNoZWNrYm94LHRhYmxlLmRhdGFUYWJsZSB0Ym9keSB0aC5zZWxlY3QtY2hlY2tib3h7cG9zaXRpb246cmVsYXRpdmV9dGFibGUuZGF0YVRhYmxlIHRib2R5IHRkLnNlbGVjdC1jaGVja2JveDpiZWZvcmUsdGFibGUuZGF0YVRhYmxlIHRib2R5IHRkLnNlbGVjdC1jaGVja2JveDphZnRlcix0YWJsZS5kYXRhVGFibGUgdGJvZHkgdGguc2VsZWN0LWNoZWNrYm94OmJlZm9yZSx0YWJsZS5kYXRhVGFibGUgdGJvZHkgdGguc2VsZWN0LWNoZWNrYm94OmFmdGVye2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEuMmVtO2xlZnQ6NTAlO3dpZHRoOjEycHg7aGVpZ2h0OjEycHg7Ym94LXNpemluZzpib3JkZXItYm94fXRhYmxlLmRhdGFUYWJsZSB0Ym9keSB0ZC5zZWxlY3QtY2hlY2tib3g6YmVmb3JlLHRhYmxlLmRhdGFUYWJsZSB0Ym9keSB0aC5zZWxlY3QtY2hlY2tib3g6YmVmb3Jle2NvbnRlbnQ6JyAnO21hcmdpbi10b3A6LTZweDttYXJnaW4tbGVmdDotNnB4O2JvcmRlcjoxcHggc29saWQgYmxhY2s7Ym9yZGVyLXJhZGl1czozcHh9dGFibGUuZGF0YVRhYmxlIHRyLnNlbGVjdGVkIHRkLnNlbGVjdC1jaGVja2JveDphZnRlcix0YWJsZS5kYXRhVGFibGUgdHIuc2VsZWN0ZWQgdGguc2VsZWN0LWNoZWNrYm94OmFmdGVye2NvbnRlbnQ6J1wyNzE0JzttYXJnaW4tdG9wOi0xMXB4O21hcmdpbi1sZWZ0Oi00cHg7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1zaGFkb3c6MXB4IDFweCAjQjBCRUQ5LCAtMXB4IC0xcHggI0IwQkVEOSwgMXB4IC0xcHggI0IwQkVEOSwgLTFweCAxcHggI0IwQkVEOX1kaXYuZGF0YVRhYmxlc193cmFwcGVyIHNwYW4uc2VsZWN0LWluZm8sZGl2LmRhdGFUYWJsZXNfd3JhcHBlciBzcGFuLnNlbGVjdC1pdGVte21hcmdpbi1sZWZ0OjAuNWVtfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDY0MHB4KXtkaXYuZGF0YVRhYmxlc193cmFwcGVyIHNwYW4uc2VsZWN0LWluZm8sZGl2LmRhdGFUYWJsZXNfd3JhcHBlciBzcGFuLnNlbGVjdC1pdGVte21hcmdpbi1sZWZ0OjA7ZGlzcGxheTpibG9ja319dGFibGUuZGF0YVRhYmxlIHRib2R5IHRyLnNlbGVjdGVkLHRhYmxlLmRhdGFUYWJsZSB0Ym9keSB0aC5zZWxlY3RlZCx0YWJsZS5kYXRhVGFibGUgdGJvZHkgdGQuc2VsZWN0ZWR7Y29sb3I6d2hpdGV9dGFibGUuZGF0YVRhYmxlIHRib2R5IHRyLnNlbGVjdGVkIGEsdGFibGUuZGF0YVRhYmxlIHRib2R5IHRoLnNlbGVjdGVkIGEsdGFibGUuZGF0YVRhYmxlIHRib2R5IHRkLnNlbGVjdGVkIGF7Y29sb3I6I2EyZDRlZH0KCgo=]]></data>
	</file>
	<file>
	  <filename>/css/addons/dev</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/css/addons/dev/datatables.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogVGhpcyBjb21iaW5lZCBmaWxlIHdhcyBjcmVhdGVkIGJ5IHRoZSBEYXRhVGFibGVzIGRvd25sb2FkZXIgYnVpbGRlcjoKICogICBodHRwczovL2RhdGF0YWJsZXMubmV0L2Rvd25sb2FkCiAqCiAqIFRvIHJlYnVpbGQgb3IgbW9kaWZ5IHRoaXMgZmlsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbnMgb2YgdGhlIGluY2x1ZGVkCiAqIHNvZnR3YXJlIHBsZWFzZSB2aXNpdDoKICogICBodHRwczovL2RhdGF0YWJsZXMubmV0L2Rvd25sb2FkLyNiczQvanN6aXAtMi41LjAvZHQtMS4xMC4yMC9iLTEuNi4xL2ItY29sdmlzLTEuNi4xL2ItZmxhc2gtMS42LjEvYi1odG1sNS0xLjYuMS9iLXByaW50LTEuNi4xL2NyLTEuNS4yL2ZjLTMuMy4wL2ZoLTMuMS42L2t0LTIuNS4xL3ItMi4yLjMvcmctMS4xLjEvcnItMS4yLjYvc2MtMi4wLjEvc3AtMS4wLjEvc2wtMS4zLjEKICoKICogSW5jbHVkZWQgbGlicmFyaWVzOgogKiAgIEpTWmlwIDIuNS4wLCBEYXRhVGFibGVzIDEuMTAuMjAsIEJ1dHRvbnMgMS42LjEsIENvbHVtbiB2aXNpYmlsaXR5IDEuNi4xLCBGbGFzaCBleHBvcnQgMS42LjEsIEhUTUw1IGV4cG9ydCAxLjYuMSwgUHJpbnQgdmlldyAxLjYuMSwgQ29sUmVvcmRlciAxLjUuMiwgRml4ZWRDb2x1bW5zIDMuMy4wLCBGaXhlZEhlYWRlciAzLjEuNiwgS2V5VGFibGUgMi41LjEsIFJlc3BvbnNpdmUgMi4yLjMsIFJvd0dyb3VwIDEuMS4xLCBSb3dSZW9yZGVyIDEuMi42LCBTY3JvbGxlciAyLjAuMSwgU2VhcmNoUGFuZXMgMS4wLjEsIFNlbGVjdCAxLjMuMQogKi8KCnRhYmxlLmRhdGFUYWJsZSB7CiAgY2xlYXI6IGJvdGg7CiAgbWFyZ2luLXRvcDogNnB4ICFpbXBvcnRhbnQ7CiAgbWFyZ2luLWJvdHRvbTogNnB4ICFpbXBvcnRhbnQ7CiAgbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7CiAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZSAhaW1wb3J0YW50OwogIGJvcmRlci1zcGFjaW5nOiAwOwp9CnRhYmxlLmRhdGFUYWJsZSB0ZCwKdGFibGUuZGF0YVRhYmxlIHRoIHsKICAtd2Via2l0LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogIGJveC1zaXppbmc6IGNvbnRlbnQtYm94Owp9CnRhYmxlLmRhdGFUYWJsZSB0ZC5kYXRhVGFibGVzX2VtcHR5LAp0YWJsZS5kYXRhVGFibGUgdGguZGF0YVRhYmxlc19lbXB0eSB7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CnRhYmxlLmRhdGFUYWJsZS5ub3dyYXAgdGgsCnRhYmxlLmRhdGFUYWJsZS5ub3dyYXAgdGQgewogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCmRpdi5kYXRhVGFibGVzX3dyYXBwZXIgZGl2LmRhdGFUYWJsZXNfbGVuZ3RoIGxhYmVsIHsKICBmb250LXdlaWdodDogbm9ybWFsOwogIHRleHQtYWxpZ246IGxlZnQ7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQpkaXYuZGF0YVRhYmxlc193cmFwcGVyIGRpdi5kYXRhVGFibGVzX2xlbmd0aCBzZWxlY3QgewogIHdpZHRoOiBhdXRvOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQpkaXYuZGF0YVRhYmxlc193cmFwcGVyIGRpdi5kYXRhVGFibGVzX2ZpbHRlciB7CiAgdGV4dC1hbGlnbjogcmlnaHQ7Cn0KZGl2LmRhdGFUYWJsZXNfd3JhcHBlciBkaXYuZGF0YVRhYmxlc19maWx0ZXIgbGFiZWwgewogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICB0ZXh0LWFsaWduOiBsZWZ0Owp9CmRpdi5kYXRhVGFibGVzX3dyYXBwZXIgZGl2LmRhdGFUYWJsZXNfZmlsdGVyIGlucHV0IHsKICBtYXJnaW4tbGVmdDogMC41ZW07CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHdpZHRoOiBhdXRvOwp9CmRpdi5kYXRhVGFibGVzX3dyYXBwZXIgZGl2LmRhdGFUYWJsZXNfaW5mbyB7CiAgcGFkZGluZy10b3A6IDAuODVlbTsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CmRpdi5kYXRhVGFibGVzX3dyYXBwZXIgZGl2LmRhdGFUYWJsZXNfcGFnaW5hdGUgewogIG1hcmdpbjogMDsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwogIHRleHQtYWxpZ246IHJpZ2h0Owp9CmRpdi5kYXRhVGFibGVzX3dyYXBwZXIgZGl2LmRhdGFUYWJsZXNfcGFnaW5hdGUgdWwucGFnaW5hdGlvbiB7CiAgbWFyZ2luOiAycHggMDsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwogIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KZGl2LmRhdGFUYWJsZXNfd3JhcHBlciBkaXYuZGF0YVRhYmxlc19wcm9jZXNzaW5nIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiA1MCU7CiAgbGVmdDogNTAlOwogIHdpZHRoOiAyMDBweDsKICBtYXJnaW4tbGVmdDogLTEwMHB4OwogIG1hcmdpbi10b3A6IC0yNnB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBwYWRkaW5nOiAxZW0gMDsKfQoKdGFibGUuZGF0YVRhYmxlIHRoZWFkID4gdHIgPiB0aC5zb3J0aW5nX2FzYywgdGFibGUuZGF0YVRhYmxlIHRoZWFkID4gdHIgPiB0aC5zb3J0aW5nX2Rlc2MsIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCA+IHRyID4gdGguc29ydGluZywKdGFibGUuZGF0YVRhYmxlIHRoZWFkID4gdHIgPiB0ZC5zb3J0aW5nX2FzYywKdGFibGUuZGF0YVRhYmxlIHRoZWFkID4gdHIgPiB0ZC5zb3J0aW5nX2Rlc2MsCnRhYmxlLmRhdGFUYWJsZSB0aGVhZCA+IHRyID4gdGQuc29ydGluZyB7CiAgcGFkZGluZy1yaWdodDogMzBweDsKfQp0YWJsZS5kYXRhVGFibGUgdGhlYWQgPiB0ciA+IHRoOmFjdGl2ZSwKdGFibGUuZGF0YVRhYmxlIHRoZWFkID4gdHIgPiB0ZDphY3RpdmUgewogIG91dGxpbmU6IG5vbmU7Cn0KdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nLAp0YWJsZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmdfYXNjLAp0YWJsZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmdfZGVzYywKdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzY19kaXNhYmxlZCwKdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2Rlc2NfZGlzYWJsZWQgewogIGN1cnNvcjogcG9pbnRlcjsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nOmJlZm9yZSwgdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nOmFmdGVyLAp0YWJsZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmdfYXNjOmJlZm9yZSwKdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYzphZnRlciwKdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2Rlc2M6YmVmb3JlLAp0YWJsZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmdfZGVzYzphZnRlciwKdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzY19kaXNhYmxlZDpiZWZvcmUsCnRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19hc2NfZGlzYWJsZWQ6YWZ0ZXIsCnRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19kZXNjX2Rpc2FibGVkOmJlZm9yZSwKdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2Rlc2NfZGlzYWJsZWQ6YWZ0ZXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBib3R0b206IDAuOWVtOwogIGRpc3BsYXk6IGJsb2NrOwogIG9wYWNpdHk6IDAuMzsKfQp0YWJsZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmc6YmVmb3JlLAp0YWJsZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmdfYXNjOmJlZm9yZSwKdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2Rlc2M6YmVmb3JlLAp0YWJsZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmdfYXNjX2Rpc2FibGVkOmJlZm9yZSwKdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2Rlc2NfZGlzYWJsZWQ6YmVmb3JlIHsKICByaWdodDogMWVtOwogIGNvbnRlbnQ6ICJcMjE5MSI7Cn0KdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nOmFmdGVyLAp0YWJsZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmdfYXNjOmFmdGVyLAp0YWJsZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmdfZGVzYzphZnRlciwKdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzY19kaXNhYmxlZDphZnRlciwKdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2Rlc2NfZGlzYWJsZWQ6YWZ0ZXIgewogIHJpZ2h0OiAwLjVlbTsKICBjb250ZW50OiAiXDIxOTMiOwp9CnRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19hc2M6YmVmb3JlLAp0YWJsZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmdfZGVzYzphZnRlciB7CiAgb3BhY2l0eTogMTsKfQp0YWJsZS5kYXRhVGFibGUgdGhlYWQgLnNvcnRpbmdfYXNjX2Rpc2FibGVkOmJlZm9yZSwKdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2Rlc2NfZGlzYWJsZWQ6YWZ0ZXIgewogIG9wYWNpdHk6IDA7Cn0KCmRpdi5kYXRhVGFibGVzX3Njcm9sbEhlYWQgdGFibGUuZGF0YVRhYmxlIHsKICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7Cn0KCmRpdi5kYXRhVGFibGVzX3Njcm9sbEJvZHkgdGFibGUgewogIGJvcmRlci10b3A6IG5vbmU7CiAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDsKfQpkaXYuZGF0YVRhYmxlc19zY3JvbGxCb2R5IHRhYmxlIHRoZWFkIC5zb3J0aW5nOmJlZm9yZSwKZGl2LmRhdGFUYWJsZXNfc2Nyb2xsQm9keSB0YWJsZSB0aGVhZCAuc29ydGluZ19hc2M6YmVmb3JlLApkaXYuZGF0YVRhYmxlc19zY3JvbGxCb2R5IHRhYmxlIHRoZWFkIC5zb3J0aW5nX2Rlc2M6YmVmb3JlLApkaXYuZGF0YVRhYmxlc19zY3JvbGxCb2R5IHRhYmxlIHRoZWFkIC5zb3J0aW5nOmFmdGVyLApkaXYuZGF0YVRhYmxlc19zY3JvbGxCb2R5IHRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYzphZnRlciwKZGl2LmRhdGFUYWJsZXNfc2Nyb2xsQm9keSB0YWJsZSB0aGVhZCAuc29ydGluZ19kZXNjOmFmdGVyIHsKICBkaXNwbGF5OiBub25lOwp9CmRpdi5kYXRhVGFibGVzX3Njcm9sbEJvZHkgdGFibGUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGgsCmRpdi5kYXRhVGFibGVzX3Njcm9sbEJvZHkgdGFibGUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQgewogIGJvcmRlci10b3A6IG5vbmU7Cn0KCmRpdi5kYXRhVGFibGVzX3Njcm9sbEZvb3QgPiAuZGF0YVRhYmxlc19zY3JvbGxGb290SW5uZXIgewogIGJveC1zaXppbmc6IGNvbnRlbnQtYm94Owp9CmRpdi5kYXRhVGFibGVzX3Njcm9sbEZvb3QgPiAuZGF0YVRhYmxlc19zY3JvbGxGb290SW5uZXIgPiB0YWJsZSB7CiAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogIGJvcmRlci10b3A6IG5vbmU7Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7CiAgZGl2LmRhdGFUYWJsZXNfd3JhcHBlciBkaXYuZGF0YVRhYmxlc19sZW5ndGgsCiAgZGl2LmRhdGFUYWJsZXNfd3JhcHBlciBkaXYuZGF0YVRhYmxlc19maWx0ZXIsCiAgZGl2LmRhdGFUYWJsZXNfd3JhcHBlciBkaXYuZGF0YVRhYmxlc19pbmZvLAogIGRpdi5kYXRhVGFibGVzX3dyYXBwZXIgZGl2LmRhdGFUYWJsZXNfcGFnaW5hdGUgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogIH0KfQp0YWJsZS5kYXRhVGFibGUudGFibGUtc20gPiB0aGVhZCA+IHRyID4gdGggewogIHBhZGRpbmctcmlnaHQ6IDIwcHg7Cn0KdGFibGUuZGF0YVRhYmxlLnRhYmxlLXNtIC5zb3J0aW5nOmJlZm9yZSwKdGFibGUuZGF0YVRhYmxlLnRhYmxlLXNtIC5zb3J0aW5nX2FzYzpiZWZvcmUsCnRhYmxlLmRhdGFUYWJsZS50YWJsZS1zbSAuc29ydGluZ19kZXNjOmJlZm9yZSB7CiAgdG9wOiA1cHg7CiAgcmlnaHQ6IDAuODVlbTsKfQp0YWJsZS5kYXRhVGFibGUudGFibGUtc20gLnNvcnRpbmc6YWZ0ZXIsCnRhYmxlLmRhdGFUYWJsZS50YWJsZS1zbSAuc29ydGluZ19hc2M6YWZ0ZXIsCnRhYmxlLmRhdGFUYWJsZS50YWJsZS1zbSAuc29ydGluZ19kZXNjOmFmdGVyIHsKICB0b3A6IDVweDsKfQoKdGFibGUudGFibGUtYm9yZGVyZWQuZGF0YVRhYmxlIHRoLAp0YWJsZS50YWJsZS1ib3JkZXJlZC5kYXRhVGFibGUgdGQgewogIGJvcmRlci1sZWZ0LXdpZHRoOiAwOwp9CnRhYmxlLnRhYmxlLWJvcmRlcmVkLmRhdGFUYWJsZSB0aDpsYXN0LWNoaWxkLCB0YWJsZS50YWJsZS1ib3JkZXJlZC5kYXRhVGFibGUgdGg6bGFzdC1jaGlsZCwKdGFibGUudGFibGUtYm9yZGVyZWQuZGF0YVRhYmxlIHRkOmxhc3QtY2hpbGQsCnRhYmxlLnRhYmxlLWJvcmRlcmVkLmRhdGFUYWJsZSB0ZDpsYXN0LWNoaWxkIHsKICBib3JkZXItcmlnaHQtd2lkdGg6IDA7Cn0KdGFibGUudGFibGUtYm9yZGVyZWQuZGF0YVRhYmxlIHRib2R5IHRoLAp0YWJsZS50YWJsZS1ib3JkZXJlZC5kYXRhVGFibGUgdGJvZHkgdGQgewogIGJvcmRlci1ib3R0b20td2lkdGg6IDA7Cn0KCmRpdi5kYXRhVGFibGVzX3Njcm9sbEhlYWQgdGFibGUudGFibGUtYm9yZGVyZWQgewogIGJvcmRlci1ib3R0b20td2lkdGg6IDA7Cn0KCmRpdi50YWJsZS1yZXNwb25zaXZlID4gZGl2LmRhdGFUYWJsZXNfd3JhcHBlciA+IGRpdi5yb3cgewogIG1hcmdpbjogMDsKfQpkaXYudGFibGUtcmVzcG9uc2l2ZSA+IGRpdi5kYXRhVGFibGVzX3dyYXBwZXIgPiBkaXYucm93ID4gZGl2W2NsYXNzXj0iY29sLSJdOmZpcnN0LWNoaWxkIHsKICBwYWRkaW5nLWxlZnQ6IDA7Cn0KZGl2LnRhYmxlLXJlc3BvbnNpdmUgPiBkaXYuZGF0YVRhYmxlc193cmFwcGVyID4gZGl2LnJvdyA+IGRpdltjbGFzc149ImNvbC0iXTpsYXN0LWNoaWxkIHsKICBwYWRkaW5nLXJpZ2h0OiAwOwp9CgoKQGtleWZyYW1lcyBkdGItc3Bpbm5lciB7CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogIH0KfQpALW8ta2V5ZnJhbWVzIGR0Yi1zcGlubmVyIHsKICAxMDAlIHsKICAgIC1vLXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogIH0KfQpALW1zLWtleWZyYW1lcyBkdGItc3Bpbm5lciB7CiAgMTAwJSB7CiAgICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgfQp9CkAtd2Via2l0LWtleWZyYW1lcyBkdGItc3Bpbm5lciB7CiAgMTAwJSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogIH0KfQpALW1vei1rZXlmcmFtZXMgZHRiLXNwaW5uZXIgewogIDEwMCUgewogICAgLW1vei10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICB9Cn0KZGl2LmR0LWJ1dHRvbi1pbmZvIHsKICBwb3NpdGlvbjogZml4ZWQ7CiAgdG9wOiA1MCU7CiAgbGVmdDogNTAlOwogIHdpZHRoOiA0MDBweDsKICBtYXJnaW4tdG9wOiAtMTAwcHg7CiAgbWFyZ2luLWxlZnQ6IC0yMDBweDsKICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICBib3JkZXI6IDJweCBzb2xpZCAjMTExOwogIGJveC1zaGFkb3c6IDNweCAzcHggOHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICBib3JkZXItcmFkaXVzOiAzcHg7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIHotaW5kZXg6IDIxOwp9CmRpdi5kdC1idXR0b24taW5mbyBoMiB7CiAgcGFkZGluZzogMC41ZW07CiAgbWFyZ2luOiAwOwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7CiAgYmFja2dyb3VuZC1jb2xvcjogI2YzZjNmMzsKfQpkaXYuZHQtYnV0dG9uLWluZm8gPiBkaXYgewogIHBhZGRpbmc6IDFlbTsKfQoKZGl2LmR0LWJ1dHRvbi1jb2xsZWN0aW9uLXRpdGxlIHsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgcGFkZGluZzogMC4zZW0gMCAwLjVlbTsKICBmb250LXNpemU6IDAuOWVtOwp9CgpkaXYuZHQtYnV0dG9uLWNvbGxlY3Rpb24tdGl0bGU6ZW1wdHkgewogIGRpc3BsYXk6IG5vbmU7Cn0KCmRpdi5kdC1idXR0b24tY29sbGVjdGlvbiB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHotaW5kZXg6IDIwMDE7Cn0KZGl2LmR0LWJ1dHRvbi1jb2xsZWN0aW9uIGRpdi5kcm9wZG93bi1tZW51IHsKICBkaXNwbGF5OiBibG9jazsKICB6LWluZGV4OiAyMDAyOwogIG1pbi13aWR0aDogMTAwJTsKfQpkaXYuZHQtYnV0dG9uLWNvbGxlY3Rpb24gZGl2LmR0LWJ1dHRvbi1jb2xsZWN0aW9uLXRpdGxlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTUpOwp9CmRpdi5kdC1idXR0b24tY29sbGVjdGlvbi5maXhlZCB7CiAgcG9zaXRpb246IGZpeGVkOwogIHRvcDogNTAlOwogIGxlZnQ6IDUwJTsKICBtYXJnaW4tbGVmdDogLTc1cHg7CiAgYm9yZGVyLXJhZGl1czogMDsKfQpkaXYuZHQtYnV0dG9uLWNvbGxlY3Rpb24uZml4ZWQudHdvLWNvbHVtbiB7CiAgbWFyZ2luLWxlZnQ6IC0yMDBweDsKfQpkaXYuZHQtYnV0dG9uLWNvbGxlY3Rpb24uZml4ZWQudGhyZWUtY29sdW1uIHsKICBtYXJnaW4tbGVmdDogLTIyNXB4Owp9CmRpdi5kdC1idXR0b24tY29sbGVjdGlvbi5maXhlZC5mb3VyLWNvbHVtbiB7CiAgbWFyZ2luLWxlZnQ6IC0zMDBweDsKfQpkaXYuZHQtYnV0dG9uLWNvbGxlY3Rpb24gPiA6bGFzdC1jaGlsZCB7CiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICAtd2Via2l0LWNvbHVtbi1nYXA6IDhweDsKICAtbW96LWNvbHVtbi1nYXA6IDhweDsKICAtbXMtY29sdW1uLWdhcDogOHB4OwogIC1vLWNvbHVtbi1nYXA6IDhweDsKICBjb2x1bW4tZ2FwOiA4cHg7Cn0KZGl2LmR0LWJ1dHRvbi1jb2xsZWN0aW9uID4gOmxhc3QtY2hpbGQgPiAqIHsKICAtd2Via2l0LWNvbHVtbi1icmVhay1pbnNpZGU6IGF2b2lkOwogIGJyZWFrLWluc2lkZTogYXZvaWQ7Cn0KZGl2LmR0LWJ1dHRvbi1jb2xsZWN0aW9uLnR3by1jb2x1bW4gewogIHdpZHRoOiA0MDBweDsKfQpkaXYuZHQtYnV0dG9uLWNvbGxlY3Rpb24udHdvLWNvbHVtbiA+IDpsYXN0LWNoaWxkIHsKICBwYWRkaW5nLWJvdHRvbTogMXB4OwogIC13ZWJraXQtY29sdW1uLWNvdW50OiAyOwogIC1tb3otY29sdW1uLWNvdW50OiAyOwogIC1tcy1jb2x1bW4tY291bnQ6IDI7CiAgLW8tY29sdW1uLWNvdW50OiAyOwogIGNvbHVtbi1jb3VudDogMjsKfQpkaXYuZHQtYnV0dG9uLWNvbGxlY3Rpb24udGhyZWUtY29sdW1uIHsKICB3aWR0aDogNDUwcHg7Cn0KZGl2LmR0LWJ1dHRvbi1jb2xsZWN0aW9uLnRocmVlLWNvbHVtbiA+IDpsYXN0LWNoaWxkIHsKICBwYWRkaW5nLWJvdHRvbTogMXB4OwogIC13ZWJraXQtY29sdW1uLWNvdW50OiAzOwogIC1tb3otY29sdW1uLWNvdW50OiAzOwogIC1tcy1jb2x1bW4tY291bnQ6IDM7CiAgLW8tY29sdW1uLWNvdW50OiAzOwogIGNvbHVtbi1jb3VudDogMzsKfQpkaXYuZHQtYnV0dG9uLWNvbGxlY3Rpb24uZm91ci1jb2x1bW4gewogIHdpZHRoOiA2MDBweDsKfQpkaXYuZHQtYnV0dG9uLWNvbGxlY3Rpb24uZm91ci1jb2x1bW4gPiA6bGFzdC1jaGlsZCB7CiAgcGFkZGluZy1ib3R0b206IDFweDsKICAtd2Via2l0LWNvbHVtbi1jb3VudDogNDsKICAtbW96LWNvbHVtbi1jb3VudDogNDsKICAtbXMtY29sdW1uLWNvdW50OiA0OwogIC1vLWNvbHVtbi1jb3VudDogNDsKICBjb2x1bW4tY291bnQ6IDQ7Cn0KZGl2LmR0LWJ1dHRvbi1jb2xsZWN0aW9uIC5kdC1idXR0b24gewogIGJvcmRlci1yYWRpdXM6IDA7Cn0KZGl2LmR0LWJ1dHRvbi1jb2xsZWN0aW9uLmZpeGVkIHsKICBtYXgtd2lkdGg6IG5vbmU7Cn0KZGl2LmR0LWJ1dHRvbi1jb2xsZWN0aW9uLmZpeGVkOmJlZm9yZSwgZGl2LmR0LWJ1dHRvbi1jb2xsZWN0aW9uLmZpeGVkOmFmdGVyIHsKICBkaXNwbGF5OiBub25lOwp9CgpkaXYuZHQtYnV0dG9uLWJhY2tncm91bmQgewogIHBvc2l0aW9uOiBmaXhlZDsKICB0b3A6IDA7CiAgbGVmdDogMDsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgei1pbmRleDogOTk5Owp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkgewogIGRpdi5kdC1idXR0b25zIHsKICAgIGZsb2F0OiBub25lOwogICAgd2lkdGg6IDEwMCU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKICB9CiAgZGl2LmR0LWJ1dHRvbnMgYS5idG4gewogICAgZmxvYXQ6IG5vbmU7CiAgfQp9CmRpdi5kdC1idXR0b25zIGJ1dHRvbi5idG4ucHJvY2Vzc2luZywKZGl2LmR0LWJ1dHRvbnMgZGl2LmJ0bi5wcm9jZXNzaW5nLApkaXYuZHQtYnV0dG9ucyBhLmJ0bi5wcm9jZXNzaW5nIHsKICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjIpOwp9CmRpdi5kdC1idXR0b25zIGJ1dHRvbi5idG4ucHJvY2Vzc2luZzphZnRlciwKZGl2LmR0LWJ1dHRvbnMgZGl2LmJ0bi5wcm9jZXNzaW5nOmFmdGVyLApkaXYuZHQtYnV0dG9ucyBhLmJ0bi5wcm9jZXNzaW5nOmFmdGVyIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiA1MCU7CiAgbGVmdDogNTAlOwogIHdpZHRoOiAxNnB4OwogIGhlaWdodDogMTZweDsKICBtYXJnaW46IC04cHggMCAwIC04cHg7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBkaXNwbGF5OiBibG9jazsKICBjb250ZW50OiAnICc7CiAgYm9yZGVyOiAycHggc29saWQgIzI4MjgyODsKICBib3JkZXItcmFkaXVzOiA1MCU7CiAgYm9yZGVyLWxlZnQtY29sb3I6IHRyYW5zcGFyZW50OwogIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgYW5pbWF0aW9uOiBkdGItc3Bpbm5lciAxNTAwbXMgaW5maW5pdGUgbGluZWFyOwogIC1vLWFuaW1hdGlvbjogZHRiLXNwaW5uZXIgMTUwMG1zIGluZmluaXRlIGxpbmVhcjsKICAtbXMtYW5pbWF0aW9uOiBkdGItc3Bpbm5lciAxNTAwbXMgaW5maW5pdGUgbGluZWFyOwogIC13ZWJraXQtYW5pbWF0aW9uOiBkdGItc3Bpbm5lciAxNTAwbXMgaW5maW5pdGUgbGluZWFyOwogIC1tb3otYW5pbWF0aW9uOiBkdGItc3Bpbm5lciAxNTAwbXMgaW5maW5pdGUgbGluZWFyOwp9CgoKdGFibGUuRFRDUl9jbG9uZWRUYWJsZS5kYXRhVGFibGUgewogIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OwogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICB6LWluZGV4OiAyMDI7Cn0KCmRpdi5EVENSX3BvaW50ZXIgewogIHdpZHRoOiAxcHg7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAyNzVkODsKICB6LWluZGV4OiAyMDE7Cn0KCgp0YWJsZS5EVEZDX0Nsb25lZCB0ciB7CiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgbWFyZ2luLWJvdHRvbTogMDsKfQoKZGl2LkRURkNfTGVmdEhlYWRXcmFwcGVyIHRhYmxlLApkaXYuRFRGQ19SaWdodEhlYWRXcmFwcGVyIHRhYmxlIHsKICBib3JkZXItYm90dG9tOiBub25lICFpbXBvcnRhbnQ7CiAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50OwogIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwp9CgpkaXYuRFRGQ19MZWZ0Qm9keVdyYXBwZXIgdGFibGUsCmRpdi5EVEZDX1JpZ2h0Qm9keVdyYXBwZXIgdGFibGUgewogIGJvcmRlci10b3A6IG5vbmU7CiAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgei1pbmRleDogMjsKfQpkaXYuRFRGQ19MZWZ0Qm9keVdyYXBwZXIgdGFibGUgdGhlYWQgLnNvcnRpbmc6YmVmb3JlLCBkaXYuRFRGQ19MZWZ0Qm9keVdyYXBwZXIgdGFibGUgdGhlYWQgLnNvcnRpbmc6YWZ0ZXIsCmRpdi5EVEZDX0xlZnRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZ19hc2M6YmVmb3JlLApkaXYuRFRGQ19MZWZ0Qm9keVdyYXBwZXIgdGFibGUgdGhlYWQgLnNvcnRpbmdfYXNjOmFmdGVyLApkaXYuRFRGQ19MZWZ0Qm9keVdyYXBwZXIgdGFibGUgdGhlYWQgLnNvcnRpbmdfZGVzYzpiZWZvcmUsCmRpdi5EVEZDX0xlZnRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZ19kZXNjOmFmdGVyLApkaXYuRFRGQ19MZWZ0Qm9keVdyYXBwZXIgdGFibGUgdGhlYWQgLnNvcnRpbmc6YmVmb3JlLApkaXYuRFRGQ19MZWZ0Qm9keVdyYXBwZXIgdGFibGUgdGhlYWQgLnNvcnRpbmc6YWZ0ZXIsCmRpdi5EVEZDX0xlZnRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZ19hc2M6YmVmb3JlLApkaXYuRFRGQ19MZWZ0Qm9keVdyYXBwZXIgdGFibGUgdGhlYWQgLnNvcnRpbmdfYXNjOmFmdGVyLApkaXYuRFRGQ19MZWZ0Qm9keVdyYXBwZXIgdGFibGUgdGhlYWQgLnNvcnRpbmdfZGVzYzpiZWZvcmUsCmRpdi5EVEZDX0xlZnRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZ19kZXNjOmFmdGVyLApkaXYuRFRGQ19SaWdodEJvZHlXcmFwcGVyIHRhYmxlIHRoZWFkIC5zb3J0aW5nOmJlZm9yZSwKZGl2LkRURkNfUmlnaHRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZzphZnRlciwKZGl2LkRURkNfUmlnaHRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZ19hc2M6YmVmb3JlLApkaXYuRFRGQ19SaWdodEJvZHlXcmFwcGVyIHRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYzphZnRlciwKZGl2LkRURkNfUmlnaHRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZ19kZXNjOmJlZm9yZSwKZGl2LkRURkNfUmlnaHRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZ19kZXNjOmFmdGVyLApkaXYuRFRGQ19SaWdodEJvZHlXcmFwcGVyIHRhYmxlIHRoZWFkIC5zb3J0aW5nOmJlZm9yZSwKZGl2LkRURkNfUmlnaHRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZzphZnRlciwKZGl2LkRURkNfUmlnaHRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZ19hc2M6YmVmb3JlLApkaXYuRFRGQ19SaWdodEJvZHlXcmFwcGVyIHRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYzphZnRlciwKZGl2LkRURkNfUmlnaHRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZ19kZXNjOmJlZm9yZSwKZGl2LkRURkNfUmlnaHRCb2R5V3JhcHBlciB0YWJsZSB0aGVhZCAuc29ydGluZ19kZXNjOmFmdGVyIHsKICBkaXNwbGF5OiBub25lOwp9CmRpdi5EVEZDX0xlZnRCb2R5V3JhcHBlciB0YWJsZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0aCwKZGl2LkRURkNfTGVmdEJvZHlXcmFwcGVyIHRhYmxlIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkLApkaXYuRFRGQ19SaWdodEJvZHlXcmFwcGVyIHRhYmxlIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRoLApkaXYuRFRGQ19SaWdodEJvZHlXcmFwcGVyIHRhYmxlIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkIHsKICBib3JkZXItdG9wOiBub25lOwp9CgpkaXYuRFRGQ19MZWZ0Rm9vdFdyYXBwZXIgdGFibGUsCmRpdi5EVEZDX1JpZ2h0Rm9vdFdyYXBwZXIgdGFibGUgewogIGJvcmRlci10b3A6IG5vbmU7CiAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwp9CgpkaXYuRFRGQ19CbG9ja2VyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKfQoKdGFibGUuZGF0YVRhYmxlLnRhYmxlLXN0cmlwZWQuRFRGQ19DbG9uZWQgdGJvZHkgewogIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwp9CgoKdGFibGUuZGF0YVRhYmxlLmZpeGVkSGVhZGVyLWZsb2F0aW5nLAp0YWJsZS5kYXRhVGFibGUuZml4ZWRIZWFkZXItbG9ja2VkIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50Owp9Cgp0YWJsZS5kYXRhVGFibGUuZml4ZWRIZWFkZXItZmxvYXRpbmcgewogIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50Owp9Cgp0YWJsZS5kYXRhVGFibGUuZml4ZWRIZWFkZXItbG9ja2VkIHsKICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKfQoKQG1lZGlhIHByaW50IHsKICB0YWJsZS5maXhlZEhlYWRlci1mbG9hdGluZyB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KfQoKCnRhYmxlLmRhdGFUYWJsZSB0Ym9keSB0aC5mb2N1cywKdGFibGUuZGF0YVRhYmxlIHRib2R5IHRkLmZvY3VzIHsKICBib3gtc2hhZG93OiBpbnNldCAwIDAgMXB4IDJweCAjMDI3NWQ4Owp9CgpkaXYuZHRrLWZvY3VzLWFsdCB0YWJsZS5kYXRhVGFibGUgdGJvZHkgdGguZm9jdXMsCmRpdi5kdGstZm9jdXMtYWx0IHRhYmxlLmRhdGFUYWJsZSB0Ym9keSB0ZC5mb2N1cyB7CiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDFweCAycHggI2ZmOGIzMzsKfQoKCnRhYmxlLmRhdGFUYWJsZS5kdHItaW5saW5lLmNvbGxhcHNlZCA+IHRib2R5ID4gdHIgPiB0ZC5jaGlsZCwKdGFibGUuZGF0YVRhYmxlLmR0ci1pbmxpbmUuY29sbGFwc2VkID4gdGJvZHkgPiB0ciA+IHRoLmNoaWxkLAp0YWJsZS5kYXRhVGFibGUuZHRyLWlubGluZS5jb2xsYXBzZWQgPiB0Ym9keSA+IHRyID4gdGQuZGF0YVRhYmxlc19lbXB0eSB7CiAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7Cn0KdGFibGUuZGF0YVRhYmxlLmR0ci1pbmxpbmUuY29sbGFwc2VkID4gdGJvZHkgPiB0ciA+IHRkLmNoaWxkOmJlZm9yZSwKdGFibGUuZGF0YVRhYmxlLmR0ci1pbmxpbmUuY29sbGFwc2VkID4gdGJvZHkgPiB0ciA+IHRoLmNoaWxkOmJlZm9yZSwKdGFibGUuZGF0YVRhYmxlLmR0ci1pbmxpbmUuY29sbGFwc2VkID4gdGJvZHkgPiB0ciA+IHRkLmRhdGFUYWJsZXNfZW1wdHk6YmVmb3JlIHsKICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KdGFibGUuZGF0YVRhYmxlLmR0ci1pbmxpbmUuY29sbGFwc2VkID4gdGJvZHkgPiB0cltyb2xlPSJyb3ciXSA+IHRkOmZpcnN0LWNoaWxkLAp0YWJsZS5kYXRhVGFibGUuZHRyLWlubGluZS5jb2xsYXBzZWQgPiB0Ym9keSA+IHRyW3JvbGU9InJvdyJdID4gdGg6Zmlyc3QtY2hpbGQgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBwYWRkaW5nLWxlZnQ6IDMwcHg7CiAgY3Vyc29yOiBwb2ludGVyOwp9CnRhYmxlLmRhdGFUYWJsZS5kdHItaW5saW5lLmNvbGxhcHNlZCA+IHRib2R5ID4gdHJbcm9sZT0icm93Il0gPiB0ZDpmaXJzdC1jaGlsZDpiZWZvcmUsCnRhYmxlLmRhdGFUYWJsZS5kdHItaW5saW5lLmNvbGxhcHNlZCA+IHRib2R5ID4gdHJbcm9sZT0icm93Il0gPiB0aDpmaXJzdC1jaGlsZDpiZWZvcmUgewogIHRvcDogMTJweDsKICBsZWZ0OiA0cHg7CiAgaGVpZ2h0OiAxNHB4OwogIHdpZHRoOiAxNHB4OwogIGRpc3BsYXk6IGJsb2NrOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBjb2xvcjogd2hpdGU7CiAgYm9yZGVyOiAycHggc29saWQgd2hpdGU7CiAgYm9yZGVyLXJhZGl1czogMTRweDsKICBib3gtc2hhZG93OiAwIDAgM3B4ICM0NDQ7CiAgYm94LXNpemluZzogY29udGVudC1ib3g7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIHRleHQtaW5kZW50OiAwICFpbXBvcnRhbnQ7CiAgZm9udC1mYW1pbHk6ICdDb3VyaWVyIE5ldycsIENvdXJpZXIsIG1vbm9zcGFjZTsKICBsaW5lLWhlaWdodDogMTRweDsKICBjb250ZW50OiAnKyc7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAyNzVkODsKfQp0YWJsZS5kYXRhVGFibGUuZHRyLWlubGluZS5jb2xsYXBzZWQgPiB0Ym9keSA+IHRyLnBhcmVudCA+IHRkOmZpcnN0LWNoaWxkOmJlZm9yZSwKdGFibGUuZGF0YVRhYmxlLmR0ci1pbmxpbmUuY29sbGFwc2VkID4gdGJvZHkgPiB0ci5wYXJlbnQgPiB0aDpmaXJzdC1jaGlsZDpiZWZvcmUgewogIGNvbnRlbnQ6ICctJzsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDMzMzMzOwp9CnRhYmxlLmRhdGFUYWJsZS5kdHItaW5saW5lLmNvbGxhcHNlZC5jb21wYWN0ID4gdGJvZHkgPiB0ciA+IHRkOmZpcnN0LWNoaWxkLAp0YWJsZS5kYXRhVGFibGUuZHRyLWlubGluZS5jb2xsYXBzZWQuY29tcGFjdCA+IHRib2R5ID4gdHIgPiB0aDpmaXJzdC1jaGlsZCB7CiAgcGFkZGluZy1sZWZ0OiAyN3B4Owp9CnRhYmxlLmRhdGFUYWJsZS5kdHItaW5saW5lLmNvbGxhcHNlZC5jb21wYWN0ID4gdGJvZHkgPiB0ciA+IHRkOmZpcnN0LWNoaWxkOmJlZm9yZSwKdGFibGUuZGF0YVRhYmxlLmR0ci1pbmxpbmUuY29sbGFwc2VkLmNvbXBhY3QgPiB0Ym9keSA+IHRyID4gdGg6Zmlyc3QtY2hpbGQ6YmVmb3JlIHsKICB0b3A6IDVweDsKICBsZWZ0OiA0cHg7CiAgaGVpZ2h0OiAxNHB4OwogIHdpZHRoOiAxNHB4OwogIGJvcmRlci1yYWRpdXM6IDE0cHg7CiAgbGluZS1oZWlnaHQ6IDE0cHg7CiAgdGV4dC1pbmRlbnQ6IDNweDsKfQp0YWJsZS5kYXRhVGFibGUuZHRyLWNvbHVtbiA+IHRib2R5ID4gdHIgPiB0ZC5jb250cm9sLAp0YWJsZS5kYXRhVGFibGUuZHRyLWNvbHVtbiA+IHRib2R5ID4gdHIgPiB0aC5jb250cm9sIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgY3Vyc29yOiBwb2ludGVyOwp9CnRhYmxlLmRhdGFUYWJsZS5kdHItY29sdW1uID4gdGJvZHkgPiB0ciA+IHRkLmNvbnRyb2w6YmVmb3JlLAp0YWJsZS5kYXRhVGFibGUuZHRyLWNvbHVtbiA+IHRib2R5ID4gdHIgPiB0aC5jb250cm9sOmJlZm9yZSB7CiAgdG9wOiA1MCU7CiAgbGVmdDogNTAlOwogIGhlaWdodDogMTZweDsKICB3aWR0aDogMTZweDsKICBtYXJnaW4tdG9wOiAtMTBweDsKICBtYXJnaW4tbGVmdDogLTEwcHg7CiAgZGlzcGxheTogYmxvY2s7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGNvbG9yOiB3aGl0ZTsKICBib3JkZXI6IDJweCBzb2xpZCB3aGl0ZTsKICBib3JkZXItcmFkaXVzOiAxNHB4OwogIGJveC1zaGFkb3c6IDAgMCAzcHggIzQ0NDsKICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdGV4dC1pbmRlbnQ6IDAgIWltcG9ydGFudDsKICBmb250LWZhbWlseTogJ0NvdXJpZXIgTmV3JywgQ291cmllciwgbW9ub3NwYWNlOwogIGxpbmUtaGVpZ2h0OiAxNHB4OwogIGNvbnRlbnQ6ICcrJzsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDI3NWQ4Owp9CnRhYmxlLmRhdGFUYWJsZS5kdHItY29sdW1uID4gdGJvZHkgPiB0ci5wYXJlbnQgdGQuY29udHJvbDpiZWZvcmUsCnRhYmxlLmRhdGFUYWJsZS5kdHItY29sdW1uID4gdGJvZHkgPiB0ci5wYXJlbnQgdGguY29udHJvbDpiZWZvcmUgewogIGNvbnRlbnQ6ICctJzsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDMzMzMzOwp9CnRhYmxlLmRhdGFUYWJsZSA+IHRib2R5ID4gdHIuY2hpbGQgewogIHBhZGRpbmc6IDAuNWVtIDFlbTsKfQp0YWJsZS5kYXRhVGFibGUgPiB0Ym9keSA+IHRyLmNoaWxkOmhvdmVyIHsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50Owp9CnRhYmxlLmRhdGFUYWJsZSA+IHRib2R5ID4gdHIuY2hpbGQgdWwuZHRyLWRldGFpbHMgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KdGFibGUuZGF0YVRhYmxlID4gdGJvZHkgPiB0ci5jaGlsZCB1bC5kdHItZGV0YWlscyA+IGxpIHsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VmZWZlZjsKICBwYWRkaW5nOiAwLjVlbSAwOwp9CnRhYmxlLmRhdGFUYWJsZSA+IHRib2R5ID4gdHIuY2hpbGQgdWwuZHRyLWRldGFpbHMgPiBsaTpmaXJzdC1jaGlsZCB7CiAgcGFkZGluZy10b3A6IDA7Cn0KdGFibGUuZGF0YVRhYmxlID4gdGJvZHkgPiB0ci5jaGlsZCB1bC5kdHItZGV0YWlscyA+IGxpOmxhc3QtY2hpbGQgewogIGJvcmRlci1ib3R0b206IG5vbmU7Cn0KdGFibGUuZGF0YVRhYmxlID4gdGJvZHkgPiB0ci5jaGlsZCBzcGFuLmR0ci10aXRsZSB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIG1pbi13aWR0aDogNzVweDsKICBmb250LXdlaWdodDogYm9sZDsKfQoKZGl2LmR0ci1tb2RhbCB7CiAgcG9zaXRpb246IGZpeGVkOwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgdG9wOiAwOwogIGxlZnQ6IDA7CiAgaGVpZ2h0OiAxMDAlOwogIHdpZHRoOiAxMDAlOwogIHotaW5kZXg6IDEwMDsKICBwYWRkaW5nOiAxMGVtIDFlbTsKfQpkaXYuZHRyLW1vZGFsIGRpdi5kdHItbW9kYWwtZGlzcGxheSB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsKICBsZWZ0OiAwOwogIGJvdHRvbTogMDsKICByaWdodDogMDsKICB3aWR0aDogNTAlOwogIGhlaWdodDogNTAlOwogIG92ZXJmbG93OiBhdXRvOwogIG1hcmdpbjogYXV0bzsKICB6LWluZGV4OiAxMDI7CiAgb3ZlcmZsb3c6IGF1dG87CiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNzsKICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKICBib3JkZXItcmFkaXVzOiAwLjVlbTsKICBib3gtc2hhZG93OiAwIDEycHggMzBweCByZ2JhKDAsIDAsIDAsIDAuNik7Cn0KZGl2LmR0ci1tb2RhbCBkaXYuZHRyLW1vZGFsLWNvbnRlbnQgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBwYWRkaW5nOiAxZW07Cn0KZGl2LmR0ci1tb2RhbCBkaXYuZHRyLW1vZGFsLWNsb3NlIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiA2cHg7CiAgcmlnaHQ6IDZweDsKICB3aWR0aDogMjJweDsKICBoZWlnaHQ6IDIycHg7CiAgYm9yZGVyOiAxcHggc29saWQgI2VhZWFlYTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBib3JkZXItcmFkaXVzOiAzcHg7CiAgY3Vyc29yOiBwb2ludGVyOwogIHotaW5kZXg6IDEyOwp9CmRpdi5kdHItbW9kYWwgZGl2LmR0ci1tb2RhbC1jbG9zZTpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2VhZWFlYTsKfQpkaXYuZHRyLW1vZGFsIGRpdi5kdHItbW9kYWwtYmFja2dyb3VuZCB7CiAgcG9zaXRpb246IGZpeGVkOwogIHRvcDogMDsKICBsZWZ0OiAwOwogIHJpZ2h0OiAwOwogIGJvdHRvbTogMDsKICB6LWluZGV4OiAxMDE7CiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYpOwp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkgewogIGRpdi5kdHItbW9kYWwgZGl2LmR0ci1tb2RhbC1kaXNwbGF5IHsKICAgIHdpZHRoOiA5NSU7CiAgfQp9CmRpdi5kdHItYnMtbW9kYWwgdGFibGUudGFibGUgdHI6Zmlyc3QtY2hpbGQgdGQgewogIGJvcmRlci10b3A6IG5vbmU7Cn0KCgp0YWJsZS5kYXRhVGFibGUgdHIuZHRyZy1ncm91cCB0ZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMDsKfQoKdGFibGUuZGF0YVRhYmxlIHRyLmR0cmctZ3JvdXAuZHRyZy1sZXZlbC0wIHRkIHsKICBmb250LXdlaWdodDogYm9sZDsKfQoKdGFibGUuZGF0YVRhYmxlIHRyLmR0cmctZ3JvdXAuZHRyZy1sZXZlbC0xIHRkLAp0YWJsZS5kYXRhVGFibGUgdHIuZHRyZy1ncm91cC5kdHJnLWxldmVsLTIgdGQgewogIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7CiAgcGFkZGluZy10b3A6IDAuMjVlbTsKICBwYWRkaW5nLWJvdHRvbTogMC4yNWVtOwogIHBhZGRpbmctbGVmdDogMmVtOwogIGZvbnQtc2l6ZTogMC45ZW07Cn0KCnRhYmxlLmRhdGFUYWJsZSB0ci5kdHJnLWdyb3VwLmR0cmctbGV2ZWwtMiB0ZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2YzZjNmMzsKfQoKCnRhYmxlLmR0LXJvd1Jlb3JkZXItZmxvYXQgewogIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OwogIG9wYWNpdHk6IDAuODsKICB0YWJsZS1sYXlvdXQ6IGZpeGVkOwogIG91dGxpbmU6IDJweCBzb2xpZCAjMDI3NWQ4OwogIG91dGxpbmUtb2Zmc2V0OiAtMnB4OwogIHotaW5kZXg6IDIwMDE7Cn0KCnRyLmR0LXJvd1Jlb3JkZXItbW92aW5nIHsKICBvdXRsaW5lOiAycHggc29saWQgIzg4ODsKICBvdXRsaW5lLW9mZnNldDogLTJweDsKfQoKYm9keS5kdC1yb3dSZW9yZGVyLW5vT3ZlcmZsb3cgewogIG92ZXJmbG93LXg6IGhpZGRlbjsKfQoKdGFibGUuZGF0YVRhYmxlIHRkLnJlb3JkZXIgewogIHRleHQtYWxpZ246IGNlbnRlcjsKICBjdXJzb3I6IG1vdmU7Cn0KCgpkaXYuZHRzIHsKICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50Owp9CmRpdi5kdHMgdGJvZHkgdGgsCmRpdi5kdHMgdGJvZHkgdGQgewogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KZGl2LmR0cyBkaXYuZHRzX2xvYWRpbmcgewogIHotaW5kZXg6IDE7Cn0KZGl2LmR0cyBkaXYuZHRzX2xhYmVsIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgcmlnaHQ6IDEwcHg7CiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpOwogIGNvbG9yOiB3aGl0ZTsKICBib3gtc2hhZG93OiAzcHggM3B4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjUpOwogIHRleHQtYWxpZ246IHJpZ2h0OwogIGJvcmRlci1yYWRpdXM6IDNweDsKICBwYWRkaW5nOiAwLjRlbTsKICB6LWluZGV4OiAyOwogIGRpc3BsYXk6IG5vbmU7Cn0KZGl2LmR0cyBkaXYuZGF0YVRhYmxlc19zY3JvbGxCb2R5IHsKICBiYWNrZ3JvdW5kOiByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjZWRlZWZmLCAjZWRlZWZmIDEwcHgsIHdoaXRlIDEwcHgsIHdoaXRlIDIwcHgpOwp9CmRpdi5kdHMgZGl2LmRhdGFUYWJsZXNfc2Nyb2xsQm9keSB0YWJsZSB7CiAgei1pbmRleDogMjsKfQpkaXYuZHRzIGRpdi5kYXRhVGFibGVzX3BhZ2luYXRlLApkaXYuZHRzIGRpdi5kYXRhVGFibGVzX2xlbmd0aCB7CiAgZGlzcGxheTogbm9uZTsKfQoKZGl2LkRUUyBkaXYuZGF0YVRhYmxlc19zY3JvbGxCb2R5IHRhYmxlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKfQoKCmRpdi5kdHNwLXRvcFJvdyB7CiAgZGlzcGxheTogZmxleDsKICBmbGV4LWRpcmVjdGlvbjogcm93OwogIGZsZXgtd3JhcDogbm93cmFwOwogIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7Cn0KZGl2LmR0c3AtdG9wUm93IGRpdi5kdHNwLXN1YlJvdzEgewogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC1kaXJlY3Rpb246IHJvdzsKICBmbGV4LXdyYXA6IG5vd3JhcDsKICBmbGV4LWdyb3c6IDE7CiAgZmxleC1zaHJpbms6IDA7CiAgZmxleC1iYXNpczogMDsKfQpkaXYuZHRzcC10b3BSb3cgZGl2LmR0c3Atc2VhcmNoQ29udCB7CiAgZGlzcGxheTogZmxleDsKICBmbGV4LWRpcmVjdGlvbjogcm93OwogIGZsZXgtd3JhcDogbm93cmFwOwogIGZsZXgtZ3JvdzogMTsKICBmbGV4LXNocmluazogMDsKICBmbGV4LWJhc2lzOiAwOwp9CmRpdi5kdHNwLXRvcFJvdyBidXR0b24uZHRzcC1uYW1lQnV0dG9uIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ01BQUFBakNBWUFBQUFlMmJOWkFBQUJjR2xEUTFCcFkyTUFBQ2lSZFpITlN3SkJHTVlmdFREUzhGQ0hrQTU3c09pZ0lBWFJNUXp5WWgzVUlLdkw3cmlyd2U2NnpLNklkQTI2ZEJBNlJGMzZPdlFmMURYb1doQUVSUkFSOUIvMGRRblozbkVGSlhTRzJmZkhzL084ekR3RCtETTZNK3lCSkdDWURzK21VOUphWVYwS3ZpTk1NNFFvRWpLenJlWGNVaDU5eDg4amZLSStKRVN2L3Z0NmpsQlJ0Um5nR3lLZVl4WjNpQmVJTXpYSEVyeEhQTWJLY3BINGhEak82WURFdDBKWFBINFRYUEw0U3pEUFp4Y0J2K2dwbGJwWTZXSlc1Z2J4TkhITTBLdXNmUjV4azdCcXJ1YW9SbWxOd0VZV2FhUWdRVUVWVzlEaElFSFZwTXg2KzVJdDN3b3E1R0gwdFZBSEowY0paZkxHU2ExU1Y1V3FScnBLVTBkZDVQNC9UMXVibmZHNmgxUEE0S3ZyZms0Q3dYMmcyWERkMzFQWGJaNEJnUmZnMnV6NEs1VFQvRGZwalk0V093WWlPOERsVFVkVERvQ3JYV0Q4MlpLNTNKSUN0UHlhQm54Y0FDTUZZUFFlR043d3Ntci94L2tUa04rbUo3b0REbytBS2RvZjJmd0RDQlJvRGtMOFVjY0FBQUFKY0VoWmN3QUFEMkVBQUE5aEFhZy9wMmtBQUFLMlNVUkJWRmdKN1pZOWo0MUJGSUN2cnlDRXhySkJRNkh5RVlWRUlSRWFVWkRRSVJvUjJWaUpLQ2lveFYrZ2tWWFlUVlpFUWlFVWhHMkVRbnhVQ2gwRktvbFk0dXQ1WG5NMmN5ZnZhM1B0NW03RVBjbXpaMmJlbVRObnpqa3pkMXV0bnZRaTBJdkFmeGlCeTV6NUZveE84OWtQWSs4bWJNanR6czQ3UlhzNS9XVnBiQUc2YldFeHQ1UHVJaWJ2aFZrd21DK2NrM2VLOWxuNi9mQWRkRm9qWXpCVnVZU0JwY25JRXZSYXFPdzJSY2FOMThGUHVKSDBKdlJVeGJUM3dXZjRsdGlLUGdmVmlkV2xiR1pnUG96REZmZ0FDK0VBL0syRUk0Y3djQUorZ1BhZVErVlFVMlNPTU1HY1BnUGwvbS9WMnA1MHJyYlJzUmd0OUl2NWg2eHRwUDIyQno3Q2UxQytnRkZ4Zkt6T21TaGNVK1FteWgydzN3OHJJSmZkZEhUY2s2NkV1a0wveFBoaitKTThySE5tRnlzMFBnNHYwdXAzYUZObHdSOU5ZeW9kZDNPTC9DNjR6cHN5bWNURmNmNkVsTTRZempBV0tZckprYXE4a0UveVVZTlA0Qm9ZdlMxUVJvK2hOdEY1eGZrVFVqb1RoZXVrU0ZGTWpsVEZtNlBqY2VPY2EvU01wS2ZlQ1IxTDZVemsveTJXSWtWaE5GSmxKQVpoUCtoWW5zN2I5RDNJUHVoWTVtWXJJdjhPclFKdlI1Tll5TmFXNGpzVThwU0dOeVNpVng0bzV0WHEzSmtvWEUvbWc1Ui9NOGRHSkNKcEtoYURjakJSZGJJL1JtOGc2OWMxMjJvbTMzQkhtajJDSG9WNXFhOWpVWEJyYUorRzFmQVZqSUJPMWtsYzg3cm8xSzRKWi9LMzVTV1czVHdjeURkNlRlY3FuQUVkOGNHcTIrdzg0eHZCbTFuM3ZTMGl6S2trd2g1WE5DL0dtRlBxcUF0UEY4OUFPU2NLdWVtYU56b1RWMVNENWR0U2JtTGYxL1JWK3RDMFdUZ2NqNlI3SEV0clZHV2FxdS9sWURaLzJwdnhRL2tJeXcvZ0ZCeUhDOUFIdzkxMGh2MWFVVXVteWQ4eXkwUWZobUVrZmlOb2QwWHVzY3Q2OEoxcWM4VGR1eDBaOTdRK2hzRGIrQVlHWUViRi80R3V3MlEvcURQcVpHL3pYZ1QrM1FqOEF0S25mV2hGd211QUFBQUFBRWxGVGtTdVFtQ0MiKTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKICBiYWNrZ3JvdW5kLXNpemU6IDIzcHg7CiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsKfQpkaXYuZHRzcC10b3BSb3cgYnV0dG9uLmR0c3AtY291bnRCdXR0b24gewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCZ0FBQUFZQ0FZQUFBRGdkejM0QUFBQmNHbERRMUJwWTJNQUFDaVJkWkhOU3dKQkdNWWZ0VERTOEZDSGtBNTdzT2lnSUFYUk1RenlZaDNVSUt2TDdyaXJ3ZTY2eks2SWRBMjZkQkE2UkYzNk92UWYxRFhvV2hBRVJSQVI5Qi8wZFFuWjNuRUZKWFNHMmZmSHMvTzh6RHdEK0RNNk0reUJKR0NZRHMrbVU5SmFZVjBLdmlOTU00UW9Fakt6cmVYY1VoNTl4ODhqZktJK0pFU3YvdnQ2amxCUnRSbmdHeUtlWXhaM2lCZUlNelhIRXJ4SFBNYktjcEg0aERqTzZZREV0MEpYUEg0VFhQTDRTekRQWnhjQnYrZ3BsYnBZNldKVzVnYnhOSEhNMEt1c2ZSNXhrN0JxcnVhb1JtbE53RVlXYWFRZ1FVRVZXOURoSUVIVnBNeDYrNUl0M3dvcTVHSDB0VkFISjBjSlpmTEdTYTFTVjVXcVJycEtVMGRkNVA0L1QxdWJuZkc2aDFQQTRLdnJmazRDd1gyZzJYRGQzMVBYYlo0QmdSZmcydXo0SzVUVC9EZnBqWTRXT3dZaU84RGxUVWRURG9DclhXRDgyWks1M0pJQ3RQeWFCbnhjQUNNRllQUWVHTjd3c21yL3gva1RrTittSjdvRERvK0FLZG9mMmZ3RENCUm9Ea0w4VWNjQUFBQUpjRWhaY3dBQUQyRUFBQTloQWFnL3Aya0FBQUc1U1VSQlZFZ04zVlU5THdWQkZGMGZpWWhvZlVTbEVRa0toVTd6L29CQ1FrSWlHcjlCZ1ViaFZ6eTlCQW5oRnlqVi9BWUZpVTVJQ003Wk4rYzVadWQ1ZG0zbEptZm16cmt6OSs3Y3UzYzN5LzZqak9CU0Y4Q3hYUzdGbVRrYndxSUpqRHBKdlRjbXNKNEszS1BaVXB5WnN4MHN4b0I5SjZtbkFreUM3d0d1dUNGSWlwTnRFY3BjV0V4Z1hwT0JjNzh2Z2o2TitRTzROVnNqd2RGTTU5dFVJRHhEckhNQk9lSVEzNEM1WkRyZWdYdUFRbTRZY0k2OG5OOUIzd3IyUGN3UEFJUGtOMkVxdEpINmIrUVptMWFqalR4N0Jxd0FyMjZMYitDMkt2cGJ0ME1iMkhBSjdOckdGR2ZtWE8zRGVBNFVzaERmUUFWbUgwZ2FVRmc4NTJUVFREdmx4d0JsQ3R4eTl6WHlCaFFGYXEwd01tSWRSZWJyZmdvc0EzemIyaEtucUcwb3FjaHA0UWJ1UjhYMFRqekFCaGJkT1Q4am5RL2F0Y2dxcG5md09BN3lxWnlUVTU4N1prSUdkZXNMVHQyRWt5bk9uYnJlTVVVS01JL2RBNEIvUVZPY08xM0NRaCs1d1dDZ0R3by83NXU1OW9kQi93am1maGJndkFDY0FPeVpQSGloTVdBb0l3eHlDTGdmMW94ZmdqelZiZ0JYU1R6SU4rZjBwZzZzNURrY2VzTE1ScHNCcmdFMlhPM0NONjRKRlA3SnRVZUtIWDRDS3RSUlhGWis3ZEVBQUFBQVNVVk9SSzVDWUlJPSIpOwogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOwogIGJhY2tncm91bmQtc2l6ZTogMThweDsKICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOwp9CmRpdi5kdHNwLXRvcFJvdyBidXR0b24uZHRzcC1zZWFyY2hJY29uIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQThBQUFBUENBWUFBQUE3MXBWS0FBQUJjR2xEUTFCcFkyTUFBQ2lSZFpITlN3SkJHTVlmdFREUzhGQ0hrQTU3c09pZ0lBWFJNUXp5WWgzVUlLdkw3cmlyd2U2NnpLNklkQTI2ZEJBNlJGMzZPdlFmMURYb1doQUVSUkFSOUIvMGRRblozbkVGSlhTRzJmZkhzL084ekR3RCtETTZNK3lCSkdDWURzK21VOUphWVYwS3ZpTk1NNFFvRWpLenJlWGNVaDU5eDg4amZLSStKRVN2L3Z0NmpsQlJ0Um5nR3lLZVl4WjNpQmVJTXpYSEVyeEhQTWJLY3BINGhEak82WURFdDBKWFBINFRYUEw0U3pEUFp4Y0J2K2dwbGJwWTZXSlc1Z2J4TkhITTBLdXNmUjV4azdCcXJ1YW9SbWxOd0VZV2FhUWdRVUVWVzlEaElFSFZwTXg2KzVJdDN3b3E1R0gwdFZBSEowY0paZkxHU2ExU1Y1V3FScnBLVTBkZDVQNC9UMXVibmZHNmgxUEE0S3ZyZms0Q3dYMmcyWERkMzFQWGJaNEJnUmZnMnV6NEs1VFQvRGZwalk0V093WWlPOERsVFVkVERvQ3JYV0Q4MlpLNTNKSUN0UHlhQm54Y0FDTUZZUFFlR043d3Ntci94L2tUa04rbUo3b0REbytBS2RvZjJmd0RDQlJvRGtMOFVjY0FBQUFKY0VoWmN3QUFEMkVBQUE5aEFhZy9wMmtBQUFFblNVUkJWQ2dWcGRHN1NnTkJGSURoMVJoSnNCQkVzRElnSWhhV0ZqWmEyR3RwS2I2QW5VME1wcktPV0VqSzJJdUZGeEN4UzJsaFp5T1dYaDVBUVZFUi9YK3p1d3d5d29JSHZwM2RNM05tNTVJay80aStQMm9yNUZld2lCSWUwY0V0OG9nVno5TGJoRVZmK2Nna2NldzF0dkFaNVBQWEdtOUhPTUVhbk1BWVFodW5hQ0FhenVxQTFVanZJTGw5SEdQYy9uNGZhYmpQR2J6ak1NMkZqZmtEdVB3NU84SmlsemdBOS9PS1dEeW55V25ic1BpRjd5YzRTUld4bUV5VE43WmhzU2Q3Z1RMVzhUdUdTU3pCY1pkMmhzVituK01OQzlqR0NOempQRHdzejhYQ08veDAyQnFlcHRjeGhnKzRnakQ4WXhldExPa0JHUmJ1d2NJcitOZFJMTVBsM3VNTTJZSHgyZ3NMZCtEOTdxS0VRdUdlNjVqQ0F6YmdWUldPQ1VadW92QWZzNW0vQWRWeEwwUjFBSXNMQUFBQUFFbEZUa1N1UW1DQyIpOwogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOwogIGJhY2tncm91bmQtc2l6ZTogMTJweDsKfQoKZGl2LmRhdGFUYWJsZXNfc2Nyb2xsQm9keSB7CiAgYmFja2dyb3VuZDogd2hpdGUgIWltcG9ydGFudDsKfQoKZGl2LmR0c3Atc2VhcmNoUGFuZXMgewogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC1kaXJlY3Rpb246IHJvdzsKICBmbGV4LXdyYXA6IHdyYXA7CiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7CiAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICBjbGVhcjogYm90aDsKfQpkaXYuZHRzcC1zZWFyY2hQYW5lcyBidXR0b24uYnRuIHsKICBtYXJnaW46IDFweDsKfQpkaXYuZHRzcC1zZWFyY2hQYW5lcyBidXR0b24uZHRzcC1jbGVhckFsbCB7CiAgbWF4LXdpZHRoOiA1MHB4Owp9CgpkaXYuZHRzcC1zZWFyY2hQYW5lIHsKICBmbGV4LWRpcmVjdGlvbjogcm93OwogIGZsZXgtd3JhcDogbm93cmFwOwogIGZsZXgtZ3JvdzogMTsKICBmbGV4LXNocmluazogMDsKICBmbGV4LWJhc2lzOiAyODBweDsKICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogIGFsaWduLWl0ZW1zOiBzdHJldGNoOwogIHBhZGRpbmctdG9wOiAwcHg7CiAgcGFkZGluZy1ib3R0b206IDVweDsKICBtYXJnaW46IDVweCAwOwogIG1hcmdpbi10b3A6IDBweDsKICBtYXJnaW4tYm90dG9tOiAwcHg7CiAgZm9udC1zaXplOiAwLjllbTsKICBtYXJnaW46IDVweDsKfQpkaXYuZHRzcC1zZWFyY2hQYW5lIGRpdi5kYXRhVGFibGVzX3dyYXBwZXIgewogIGZsZXg6IDE7Cn0KZGl2LmR0c3Atc2VhcmNoUGFuZSBkaXYuZGF0YVRhYmxlc193cmFwcGVyIGRpdi5kYXRhVGFibGVzX2ZpbHRlciB7CiAgZGlzcGxheTogbm9uZTsKfQpkaXYuZHRzcC1zZWFyY2hQYW5lIGRpdi5kYXRhVGFibGVzX3dyYXBwZXIgZGl2LnJvdyBkaXYuY29sLXNtLTEyOmVtcHR5IHsKICBkaXNwbGF5OiBub25lOwp9CmRpdi5kdHNwLXNlYXJjaFBhbmUgZGl2LmRhdGFUYWJsZXNfd3JhcHBlciBkaXYucm93IGRpdi5kYXRhVGFibGVzX2ZpbHRlciB7CiAgZGlzcGxheTogbm9uZTsKfQpkaXYuZHRzcC1zZWFyY2hQYW5lIGRpdi5idG4tZ3JvdXAgewogIHBhZGRpbmc6IDBweDsKfQpkaXYuZHRzcC1zZWFyY2hQYW5lIGRpdi5idG4tZ3JvdXAgYnV0dG9uLmJ0biB7CiAgbWFyZ2luOiAwOwogIGhlaWdodDogNDBweDsKfQpkaXYuZHRzcC1zZWFyY2hQYW5lIGRpdi5kdHNwLXRvcFJvdyB7CiAgcGFkZGluZzogMHB4ICFpbXBvcnRhbnQ7CiAgbWFyZ2luOiAwcHggIWltcG9ydGFudDsKfQpkaXYuZHRzcC1zZWFyY2hQYW5lIGRpdi5kdHNwLXRvcFJvdyBkaXYuZHRzcC1zdWJSb3dzIHsKICBwYWRkaW5nOiAwcHggIWltcG9ydGFudDsKICB0ZXh0LWFsaWduOiByaWdodDsKfQpkaXYuZHRzcC1zZWFyY2hQYW5lIGRpdi5kdHNwLXRvcFJvdyBkaXYucm93IHsKICB3aWR0aDogMTAwJTsKfQpkaXYuZHRzcC1zZWFyY2hQYW5lIHRoZWFkIHsKICBkaXNwbGF5OiBub25lOwp9CmRpdi5kdHNwLXNlYXJjaFBhbmUgLm1iLTMgewogIG1hcmdpbi1ib3R0b206IG5vbmUgIWltcG9ydGFudDsKfQpkaXYuZHRzcC1zZWFyY2hQYW5lIC5jb2wtc20tMTIgewogIHBhZGRpbmc6IDVweDsKfQpkaXYuZHRzcC1zZWFyY2hQYW5lIC5pbnB1dC1ncm91cCB7CiAgaGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7CiAgcGFkZGluZzogMHB4ICFpbXBvcnRhbnQ7Cn0KZGl2LmR0c3Atc2VhcmNoUGFuZSAuaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWFwcGVuZCB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CmRpdi5kdHNwLXNlYXJjaFBhbmUgZGl2LmRhdGFUYWJsZXNfc2Nyb2xsSGVhZCB7CiAgZGlzcGxheTogbm9uZTsKfQpkaXYuZHRzcC1zZWFyY2hQYW5lIGRpdi5kYXRhVGFibGVzX3Njcm9sbEJvZHkgewogIHBhZGRpbmc6IDJweDsKICBib3JkZXI6IDJweCAjZjBmMGYwIHNvbGlkOwogIGJvcmRlci1yYWRpdXM6IDRweDsKfQpkaXYuZHRzcC1zZWFyY2hQYW5lIGRpdi5kYXRhVGFibGVzX3Njcm9sbEJvZHk6aG92ZXIgewogIGJvcmRlcjogMnB4IHNvbGlkICNjZmNmY2YgIWltcG9ydGFudDsKfQpkaXYuZHRzcC1zZWFyY2hQYW5lIGRpdi5kYXRhVGFibGVzX3Njcm9sbEJvZHkgdGFibGUgdGJvZHkgdHIgc3Bhbi5iYWRnZSB7CiAgZmxvYXQ6IHJpZ2h0OwogIG1pbi13aWR0aDogMzBweDsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbGluZS1oZWlnaHQ6IDE7Cn0KZGl2LmR0c3Atc2VhcmNoUGFuZSBkaXYuZGF0YVRhYmxlc19zY3JvbGxCb2R5IHRhYmxlIHRib2R5IHRyIHRkLmR0c3AtY291bnRDb2x1bW4gewogIHRleHQtYWxpZ246IHJpZ2h0Owp9CmRpdi5kdHNwLXNlYXJjaFBhbmUgLmR0c3Atc2VhcmNoSWNvbiB7CiAgZGlzcGxheTogYmxvY2s7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHBhZGRpbmc6IDE4cHggMTNweDsKfQpkaXYuZHRzcC1zZWFyY2hQYW5lIGRpdi5kYXRhVGFibGVzX3dyYXBwZXIgZGl2LmRhdGFUYWJsZXNfZmlsdGVyIHsKICBkaXNwbGF5OiBub25lOwp9CmRpdi5kdHNwLXNlYXJjaFBhbmUgZGl2LmRhdGFUYWJsZXNfd3JhcHBlciBkaXYucm93IHsKICBtYXJnaW4tbGVmdDogLTdweDsKICBtYXJnaW4tcmlnaHQ6IC03cHg7Cn0KZGl2LmR0c3Atc2VhcmNoUGFuZSBkaXYuYmFkZ2UgewogIG1pbi13aWR0aDogMzBweDsKfQoKZGl2LmR0c3AtcGFuZXMgewogIHBhZGRpbmc6IDVweDsKICBib3JkZXI6IDJweCBzb2xpZCAjZjBmMGYwOwogIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgbWFyZ2luOiA1cHg7CiAgY2xlYXI6IGJvdGg7Cn0KZGl2LmR0c3AtcGFuZXMgZGl2LmR0c3AtdGl0bGVSb3cgewogIHBhZGRpbmctYm90dG9tOiAxMHB4Owp9CmRpdi5kdHNwLXBhbmVzIGRpdi5kdHNwLXRpdGxlIHsKICBmbG9hdDogbGVmdDsKICBtYXJnaW46IDIwcHg7CiAgbWFyZ2luLWJvdHRvbTogMHB4OwogIG1hcmdpbi10b3A6IDEwcHg7Cn0KZGl2LmR0c3AtcGFuZXMgYnV0dG9uLmR0c3AtY2xlYXJBbGwgewogIGZsb2F0OiByaWdodDsKfQoKZGl2LmR0c3AtY29sdW1ucy0xIHsKICBtaW4td2lkdGg6IDk4JTsKICBtYXgtd2lkdGg6IDk4JTsKICBwYWRkaW5nLWxlZnQ6IDElOwogIHBhZGRpbmctcmlnaHQ6IDElOwogIG1hcmdpbjogMHB4ICFpbXBvcnRhbnQ7Cn0KCmRpdi5kdHNwLWNvbHVtbnMtMiB7CiAgbWluLXdpZHRoOiA0OCU7CiAgbWF4LXdpZHRoOiA0OCU7CiAgcGFkZGluZy1sZWZ0OiAxJTsKICBwYWRkaW5nLXJpZ2h0OiAxJTsKICBtYXJnaW46IDBweCAhaW1wb3J0YW50Owp9CgpkaXYuZHRzcC1jb2x1bW5zLTMgewogIG1pbi13aWR0aDogMzMuMzMzJTsKICBtYXgtd2lkdGg6IDMzLjMzMyU7CiAgcGFkZGluZy1sZWZ0OiAxJTsKICBwYWRkaW5nLXJpZ2h0OiAxJTsKICBtYXJnaW46IDBweCAhaW1wb3J0YW50Owp9CgpkaXYuZHRzcC1jb2x1bW5zLTQgewogIG1pbi13aWR0aDogMjMlOwogIG1heC13aWR0aDogMjMlOwogIHBhZGRpbmctbGVmdDogMSU7CiAgcGFkZGluZy1yaWdodDogMSU7CiAgbWFyZ2luOiAwcHggIWltcG9ydGFudDsKfQpkaXYuZHRzcC1jb2x1bW5zLTQgZGl2LmR0c3AtdG9wUm93IHsKICBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7Cn0KCmRpdi5kdHNwLWNvbHVtbnMtNSB7CiAgbWluLXdpZHRoOiAxOCU7CiAgbWF4LXdpZHRoOiAxOCU7CiAgcGFkZGluZy1sZWZ0OiAxJTsKICBwYWRkaW5nLXJpZ2h0OiAxJTsKICBtYXJnaW46IDBweCAhaW1wb3J0YW50Owp9CmRpdi5kdHNwLWNvbHVtbnMtNSBkaXYuZHRzcC10b3BSb3cgewogIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDsKfQoKZGl2LmR0c3AtY29sdW1ucy02IHsKICBtaW4td2lkdGg6IDE1LjY2NiU7CiAgbWF4LXdpZHRoOiAxNS42NjYlOwogIHBhZGRpbmctbGVmdDogMC41JTsKICBwYWRkaW5nLXJpZ2h0OiAwLjUlOwogIG1hcmdpbjogMHB4ICFpbXBvcnRhbnQ7Cn0KZGl2LmR0c3AtY29sdW1ucy02IGRpdi5kdHNwLXRvcFJvdyB7CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50Owp9CgpkaXYuZHRzcC1oaWRkZW4gewogIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoKQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHsKICBkaXYuZHRzcC1jb2x1bW5zLTQsCiAgZGl2LmR0c3AtY29sdW1ucy01LAogIGRpdi5kdHNwLWNvbHVtbnMtNiB7CiAgICBtYXgtd2lkdGg6IDMxJSAhaW1wb3J0YW50OwogICAgbWluLXdpZHRoOiAzMSUgIWltcG9ydGFudDsKICB9Cn0KQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjQwcHgpIHsKICBkaXYuZHRzcC1zZWFyY2hQYW5lcyB7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7CiAgfQoKICBkaXYuZHRzcC1zZWFyY2hQYW5lIHsKICAgIG1heC13aWR0aDogOTglICFpbXBvcnRhbnQ7CiAgICBtaW4td2lkdGg6IDk4JSAhaW1wb3J0YW50OwogIH0KfQoKCnRhYmxlLmRhdGFUYWJsZSB0Ym9keSA+IHRyLnNlbGVjdGVkLAp0YWJsZS5kYXRhVGFibGUgdGJvZHkgPiB0ciA+IC5zZWxlY3RlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAyNzVkODsKfQp0YWJsZS5kYXRhVGFibGUuc3RyaXBlIHRib2R5ID4gdHIub2RkLnNlbGVjdGVkLAp0YWJsZS5kYXRhVGFibGUuc3RyaXBlIHRib2R5ID4gdHIub2RkID4gLnNlbGVjdGVkLCB0YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keSA+IHRyLm9kZC5zZWxlY3RlZCwKdGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHkgPiB0ci5vZGQgPiAuc2VsZWN0ZWQgewogIGJhY2tncm91bmQtY29sb3I6ICMwMjcyZDM7Cn0KdGFibGUuZGF0YVRhYmxlLmhvdmVyIHRib2R5ID4gdHIuc2VsZWN0ZWQ6aG92ZXIsCnRhYmxlLmRhdGFUYWJsZS5ob3ZlciB0Ym9keSA+IHRyID4gLnNlbGVjdGVkOmhvdmVyLCB0YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keSA+IHRyLnNlbGVjdGVkOmhvdmVyLAp0YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keSA+IHRyID4gLnNlbGVjdGVkOmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDI3MWQwOwp9CnRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4gdGJvZHkgPiB0ci5zZWxlY3RlZCA+IC5zb3J0aW5nXzEsCnRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4gdGJvZHkgPiB0ci5zZWxlY3RlZCA+IC5zb3J0aW5nXzIsCnRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4gdGJvZHkgPiB0ci5zZWxlY3RlZCA+IC5zb3J0aW5nXzMsCnRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4gdGJvZHkgPiB0ciA+IC5zZWxlY3RlZCwgdGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHkgPiB0ci5zZWxlY3RlZCA+IC5zb3J0aW5nXzEsCnRhYmxlLmRhdGFUYWJsZS5kaXNwbGF5IHRib2R5ID4gdHIuc2VsZWN0ZWQgPiAuc29ydGluZ18yLAp0YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keSA+IHRyLnNlbGVjdGVkID4gLnNvcnRpbmdfMywKdGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHkgPiB0ciA+IC5zZWxlY3RlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAyNzNkNDsKfQp0YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keSA+IHRyLm9kZC5zZWxlY3RlZCA+IC5zb3J0aW5nXzEsIHRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4uc3RyaXBlIHRib2R5ID4gdHIub2RkLnNlbGVjdGVkID4gLnNvcnRpbmdfMSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAyNmZjYzsKfQp0YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keSA+IHRyLm9kZC5zZWxlY3RlZCA+IC5zb3J0aW5nXzIsIHRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4uc3RyaXBlIHRib2R5ID4gdHIub2RkLnNlbGVjdGVkID4gLnNvcnRpbmdfMiB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAyNzBjZTsKfQp0YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keSA+IHRyLm9kZC5zZWxlY3RlZCA+IC5zb3J0aW5nXzMsIHRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4uc3RyaXBlIHRib2R5ID4gdHIub2RkLnNlbGVjdGVkID4gLnNvcnRpbmdfMyB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAyNzBkMDsKfQp0YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keSA+IHRyLmV2ZW4uc2VsZWN0ZWQgPiAuc29ydGluZ18xLCB0YWJsZS5kYXRhVGFibGUub3JkZXItY29sdW1uLnN0cmlwZSB0Ym9keSA+IHRyLmV2ZW4uc2VsZWN0ZWQgPiAuc29ydGluZ18xIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDI3M2Q0Owp9CnRhYmxlLmRhdGFUYWJsZS5kaXNwbGF5IHRib2R5ID4gdHIuZXZlbi5zZWxlY3RlZCA+IC5zb3J0aW5nXzIsIHRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4uc3RyaXBlIHRib2R5ID4gdHIuZXZlbi5zZWxlY3RlZCA+IC5zb3J0aW5nXzIgewogIGJhY2tncm91bmQtY29sb3I6ICMwMjc0ZDU7Cn0KdGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHkgPiB0ci5ldmVuLnNlbGVjdGVkID4gLnNvcnRpbmdfMywgdGFibGUuZGF0YVRhYmxlLm9yZGVyLWNvbHVtbi5zdHJpcGUgdGJvZHkgPiB0ci5ldmVuLnNlbGVjdGVkID4gLnNvcnRpbmdfMyB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAyNzVkNzsKfQp0YWJsZS5kYXRhVGFibGUuZGlzcGxheSB0Ym9keSA+IHRyLm9kZCA+IC5zZWxlY3RlZCwgdGFibGUuZGF0YVRhYmxlLm9yZGVyLWNvbHVtbi5zdHJpcGUgdGJvZHkgPiB0ci5vZGQgPiAuc2VsZWN0ZWQgewogIGJhY2tncm91bmQtY29sb3I6ICMwMjZmY2M7Cn0KdGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHkgPiB0ci5ldmVuID4gLnNlbGVjdGVkLCB0YWJsZS5kYXRhVGFibGUub3JkZXItY29sdW1uLnN0cmlwZSB0Ym9keSA+IHRyLmV2ZW4gPiAuc2VsZWN0ZWQgewogIGJhY2tncm91bmQtY29sb3I6ICMwMjczZDQ7Cn0KdGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHkgPiB0ci5zZWxlY3RlZDpob3ZlciA+IC5zb3J0aW5nXzEsIHRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4uaG92ZXIgdGJvZHkgPiB0ci5zZWxlY3RlZDpob3ZlciA+IC5zb3J0aW5nXzEgewogIGJhY2tncm91bmQtY29sb3I6ICMwMjZiYzY7Cn0KdGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHkgPiB0ci5zZWxlY3RlZDpob3ZlciA+IC5zb3J0aW5nXzIsIHRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4uaG92ZXIgdGJvZHkgPiB0ci5zZWxlY3RlZDpob3ZlciA+IC5zb3J0aW5nXzIgewogIGJhY2tncm91bmQtY29sb3I6ICMwMjZjYzg7Cn0KdGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHkgPiB0ci5zZWxlY3RlZDpob3ZlciA+IC5zb3J0aW5nXzMsIHRhYmxlLmRhdGFUYWJsZS5vcmRlci1jb2x1bW4uaG92ZXIgdGJvZHkgPiB0ci5zZWxlY3RlZDpob3ZlciA+IC5zb3J0aW5nXzMgewogIGJhY2tncm91bmQtY29sb3I6ICMwMjZlY2E7Cn0KdGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHkgPiB0cjpob3ZlciA+IC5zZWxlY3RlZCwKdGFibGUuZGF0YVRhYmxlLmRpc3BsYXkgdGJvZHkgPiB0ciA+IC5zZWxlY3RlZDpob3ZlciwgdGFibGUuZGF0YVRhYmxlLm9yZGVyLWNvbHVtbi5ob3ZlciB0Ym9keSA+IHRyOmhvdmVyID4gLnNlbGVjdGVkLAp0YWJsZS5kYXRhVGFibGUub3JkZXItY29sdW1uLmhvdmVyIHRib2R5ID4gdHIgPiAuc2VsZWN0ZWQ6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICMwMjZiYzY7Cn0KdGFibGUuZGF0YVRhYmxlIHRib2R5IHRkLnNlbGVjdC1jaGVja2JveCwKdGFibGUuZGF0YVRhYmxlIHRib2R5IHRoLnNlbGVjdC1jaGVja2JveCB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CnRhYmxlLmRhdGFUYWJsZSB0Ym9keSB0ZC5zZWxlY3QtY2hlY2tib3g6YmVmb3JlLCB0YWJsZS5kYXRhVGFibGUgdGJvZHkgdGQuc2VsZWN0LWNoZWNrYm94OmFmdGVyLAp0YWJsZS5kYXRhVGFibGUgdGJvZHkgdGguc2VsZWN0LWNoZWNrYm94OmJlZm9yZSwKdGFibGUuZGF0YVRhYmxlIHRib2R5IHRoLnNlbGVjdC1jaGVja2JveDphZnRlciB7CiAgZGlzcGxheTogYmxvY2s7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMS4yZW07CiAgbGVmdDogNTAlOwogIHdpZHRoOiAxMnB4OwogIGhlaWdodDogMTJweDsKICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CnRhYmxlLmRhdGFUYWJsZSB0Ym9keSB0ZC5zZWxlY3QtY2hlY2tib3g6YmVmb3JlLAp0YWJsZS5kYXRhVGFibGUgdGJvZHkgdGguc2VsZWN0LWNoZWNrYm94OmJlZm9yZSB7CiAgY29udGVudDogJyAnOwogIG1hcmdpbi10b3A6IC02cHg7CiAgbWFyZ2luLWxlZnQ6IC02cHg7CiAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CiAgYm9yZGVyLXJhZGl1czogM3B4Owp9CnRhYmxlLmRhdGFUYWJsZSB0ci5zZWxlY3RlZCB0ZC5zZWxlY3QtY2hlY2tib3g6YWZ0ZXIsCnRhYmxlLmRhdGFUYWJsZSB0ci5zZWxlY3RlZCB0aC5zZWxlY3QtY2hlY2tib3g6YWZ0ZXIgewogIGNvbnRlbnQ6ICdcMjcxNCc7CiAgbWFyZ2luLXRvcDogLTExcHg7CiAgbWFyZ2luLWxlZnQ6IC00cHg7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIHRleHQtc2hhZG93OiAxcHggMXB4ICNCMEJFRDksIC0xcHggLTFweCAjQjBCRUQ5LCAxcHggLTFweCAjQjBCRUQ5LCAtMXB4IDFweCAjQjBCRUQ5Owp9CgpkaXYuZGF0YVRhYmxlc193cmFwcGVyIHNwYW4uc2VsZWN0LWluZm8sCmRpdi5kYXRhVGFibGVzX3dyYXBwZXIgc3Bhbi5zZWxlY3QtaXRlbSB7CiAgbWFyZ2luLWxlZnQ6IDAuNWVtOwp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA2NDBweCkgewogIGRpdi5kYXRhVGFibGVzX3dyYXBwZXIgc3Bhbi5zZWxlY3QtaW5mbywKICBkaXYuZGF0YVRhYmxlc193cmFwcGVyIHNwYW4uc2VsZWN0LWl0ZW0gewogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBkaXNwbGF5OiBibG9jazsKICB9Cn0KdGFibGUuZGF0YVRhYmxlIHRib2R5IHRyLnNlbGVjdGVkLAp0YWJsZS5kYXRhVGFibGUgdGJvZHkgdGguc2VsZWN0ZWQsCnRhYmxlLmRhdGFUYWJsZSB0Ym9keSB0ZC5zZWxlY3RlZCB7CiAgY29sb3I6IHdoaXRlOwp9CnRhYmxlLmRhdGFUYWJsZSB0Ym9keSB0ci5zZWxlY3RlZCBhLAp0YWJsZS5kYXRhVGFibGUgdGJvZHkgdGguc2VsZWN0ZWQgYSwKdGFibGUuZGF0YVRhYmxlIHRib2R5IHRkLnNlbGVjdGVkIGEgewogIGNvbG9yOiAjYTJkNGVkOwp9CgoK]]></data>
	</file>
	<file>
	  <filename>/css/addons/jquery.multi-select.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Lm1zLWNvbnRhaW5lcnsNCiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgdXJsKCcuLi9NQU1TTXVsdGlTZWxlY3QvaW1hZ2VzL3N3aXRjaC5wbmcnKSBuby1yZXBlYXQgNTAlIDUwJTsNCiAgd2lkdGg6IDQ3MHB4Ow0KfQ0KDQoubXMtY29udGFpbmVyOmFmdGVyew0KICBjb250ZW50OiAiLiI7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBoZWlnaHQ6IDA7DQogIGxpbmUtaGVpZ2h0OiAwOw0KICBmb250LXNpemU6IDA7DQogIGNsZWFyOiBib3RoOw0KICBtaW4taGVpZ2h0OiAwOw0KICB2aXNpYmlsaXR5OiBoaWRkZW47DQp9DQoNCi5tcy1jb250YWluZXIgLm1zLXNlbGVjdGFibGUsIC5tcy1jb250YWluZXIgLm1zLXNlbGVjdGlvbnsNCiAgYmFja2dyb3VuZDogI2ZmZjsNCiAgY29sb3I6ICM1NTU1NTU7DQogIGZsb2F0OiBsZWZ0Ow0KICB3aWR0aDogNDUlOw0KfQ0KLm1zLWNvbnRhaW5lciAubXMtc2VsZWN0aW9uew0KICBmbG9hdDogcmlnaHQ7DQp9DQoNCi5tcy1jb250YWluZXIgLm1zLWxpc3R7DQogIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpOw0KICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTsNCiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpOw0KICAtd2Via2l0LXRyYW5zaXRpb246IGJvcmRlciBsaW5lYXIgMC4ycywgYm94LXNoYWRvdyBsaW5lYXIgMC4yczsNCiAgLW1vei10cmFuc2l0aW9uOiBib3JkZXIgbGluZWFyIDAuMnMsIGJveC1zaGFkb3cgbGluZWFyIDAuMnM7DQogIC1tcy10cmFuc2l0aW9uOiBib3JkZXIgbGluZWFyIDAuMnMsIGJveC1zaGFkb3cgbGluZWFyIDAuMnM7DQogIC1vLXRyYW5zaXRpb246IGJvcmRlciBsaW5lYXIgMC4ycywgYm94LXNoYWRvdyBsaW5lYXIgMC4yczsNCiAgdHJhbnNpdGlvbjogYm9yZGVyIGxpbmVhciAwLjJzLCBib3gtc2hhZG93IGxpbmVhciAwLjJzOw0KICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOw0KICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDsNCiAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7DQogIGJvcmRlci1yYWRpdXM6IDNweDsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICBoZWlnaHQ6IDIwMHB4Ow0KICBwYWRkaW5nOiAwOw0KICBvdmVyZmxvdy15OiBhdXRvOw0KfQ0KDQoubXMtY29udGFpbmVyIC5tcy1saXN0Lm1zLWZvY3Vzew0KICBib3JkZXItY29sb3I6IHJnYmEoODIsIDE2OCwgMjM2LCAwLjgpOw0KICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDhweCByZ2JhKDgyLCAxNjgsIDIzNiwgMC42KTsNCiAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA4cHggcmdiYSg4MiwgMTY4LCAyMzYsIDAuNik7DQogIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDhweCByZ2JhKDgyLCAxNjgsIDIzNiwgMC42KTsNCiAgb3V0bGluZTogMDsNCiAgb3V0bGluZTogdGhpbiBkb3R0ZWQgXDk7DQp9DQoNCi5tcy1jb250YWluZXIgdWx7DQogIG1hcmdpbjogMDsNCiAgbGlzdC1zdHlsZS10eXBlOiBub25lOw0KICBwYWRkaW5nOiAwOw0KfQ0KDQoubXMtY29udGFpbmVyIC5tcy1vcHRncm91cC1jb250YWluZXJ7DQogIHdpZHRoOiAxMDAlOw0KfQ0KDQoubXMtY29udGFpbmVyIC5tcy1vcHRncm91cC1sYWJlbHsNCiAgbWFyZ2luOiAwOw0KICBwYWRkaW5nOiA1cHggMHB4IDBweCA1cHg7DQogIGN1cnNvcjogcG9pbnRlcjsNCiAgY29sb3I6ICM5OTk7DQp9DQoNCi5tcy1jb250YWluZXIgLm1zLXNlbGVjdGFibGUgbGkubXMtZWxlbS1zZWxlY3RhYmxlLA0KLm1zLWNvbnRhaW5lciAubXMtc2VsZWN0aW9uIGxpLm1zLWVsZW0tc2VsZWN0aW9uew0KICBib3JkZXItYm90dG9tOiAxcHggI2VlZSBzb2xpZDsNCiAgcGFkZGluZzogMnB4IDEwcHg7DQogIGNvbG9yOiAjNTU1Ow0KICBmb250LXNpemU6IDE0cHg7DQp9DQoNCi5tcy1jb250YWluZXIgLm1zLXNlbGVjdGFibGUgbGkubXMtaG92ZXIsDQoubXMtY29udGFpbmVyIC5tcy1zZWxlY3Rpb24gbGkubXMtaG92ZXJ7DQogIGN1cnNvcjogcG9pbnRlcjsNCiAgY29sb3I6ICNmZmY7DQogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzA4YzsNCn0NCg0KLm1zLWNvbnRhaW5lciAubXMtc2VsZWN0YWJsZSBsaS5kaXNhYmxlZCwNCi5tcy1jb250YWluZXIgLm1zLXNlbGVjdGlvbiBsaS5kaXNhYmxlZHsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsNCiAgY29sb3I6ICNhYWE7DQogIGN1cnNvcjogdGV4dDsNCn0=]]></data>
	</file>
	<file>
	  <filename>/css/admin_styles.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogYSBzbWFsbCwgcmVzaXphYmxlIHRleHQgYXJlYSAqLwpkaXYud2FybmluZyxwLndhcm5pbmcgewogICAgZGlzcGxheTogYmxvY2s7Cn0KZGl2LmluZm9ybWF0aW9uLHAuaW5mb3JtYXRpb24gewogICAgZGlzcGxheTogYmxvY2s7Cn0KLnRleHQtY2VudGVyIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQp0ZXh0YXJlYSB7CiAgd2lkdGg6IGF1dG87CiAgaGVpZ2h0OiBhdXRvOwp9Cgp0ZXh0YXJlYS50YV9yZXNpemFibGUgewogIHdpZHRoOiAzNWVtOwogIGhlaWdodDogNGVtOwogIG1heC1oZWlnaHQ6IDE1ZW07CiAgbWF4LXdpZHRoOiA2MGVtOwogIHJlc2l6ZTogYm90aDsKfQoKLyogYSBsYXJnZSwgcmVzaXphYmxlIHRleHQgYXJlYSAqLwp0ZXh0YXJlYS50YV9yZXNpemFibGVfbGcgewogIHdpZHRoOiAzNWVtOwogIGhlaWdodDogMTBlbTsKICBtYXgtaGVpZ2h0OiAyMGVtOwogIG1heC13aWR0aDogNzBlbTsKICByZXNpemU6IGJvdGg7Cn0KCi8qIGFsbCBzeXN0ZW0gaWNvbnMgc2hvdWxkIGJlIHNtYWxsICovCmltZy5zeXN0ZW1pY29uIHsKICAgIG1heC1oZWlnaHQ6IDE2cHg7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9CgovKiBmb3JtYXQgc3R1ZmYgYWxpZ25lZCB0byB0aGUgcmlnaHQgKi8KZGl2LnJpZ2h0LWJveCxwLnJpZ2h0LWJveCB7CiAgICBmbG9hdDpyaWdodDsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgcGFkZGluZy1yaWdodDogMWVtOwp9Ci50ZXh0LXJpZ2h0IHsKICAgIHRleHQtYWxpZ246IHJpZ2h0ICFpbXBvcnRhbnQ7Cn0KdGFibGUgdGQudGV4dC1yaWdodCB7CiAgICBwYWRkaW5nLXJpZ2h0OiAxZW07Cn0KLnRleHQtbGVmdCB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7Cn0KdGFibGUgdGQudGV4dC1sZWZ0IHsKICAgIHBhZGRpbmctbGVmdDogMWVtOwp9CgovKiB0b29sdGlwIHN0dWZmICovCmRpdi5jZ190b29sdGlwX2RhdGEgewogICAgZGlzcGxheTogbm9uZTsKfQoKLyogb3B0aW9uIG1lbnVzICovCnVsLm9wdGlvbi1tZW51LWhvcml6IHsKICAgIGJvcmRlcjogbm9uZTsKICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgIG1hcmdpbjogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMCAhaW1wb3J0YW50Owp9CnVsLm9wdGlvbi1tZW51LWhvcml6IHVsIHsKICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZSAhaW1wb3J0YW50OwogICAgZGlzcGxheTogYmxvY2s7CiAgICBjbGVhcjogYm90aDsKfQp1bC5vcHRpb24tbWVudS1ob3JpeiAudWktbWVudS1pdGVtIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luOiAwOwogICAgd2lkdGg6IGF1dG87Cn0KdWwub3B0aW9uLW1lbnUtaG9yaXogbGkgewogICAgcGFkZGluZy1yaWdodDogMC41ZW07Cn0KCgovKiBhZGp1c3QgZ29yYW4ncyBncmlkIHN0dWZmIGZvciBzbWFsbGVyIHNjcmVlbnMgKi8KQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogMTAyNHB4KSB7CiAgLmdyaWRfNCB7CiAgICBmbG9hdDogaW5pdGlhbCAhaW1wb3J0YW50OwogICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDsKICAgIG1hcmdpbjogYXV0byAhaW1wb3J0YW50OwogIH0KICAuZ3JpZF82IHsKICAgIGZsb2F0OiBpbml0aWFsICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50OwogICAgbWFyZ2luOiBhdXRvICFpbXBvcnRhbnQ7CiAgfQogIC5ncmlkXzggewogICAgZmxvYXQ6IGluaXRpYWwgIWltcG9ydGFudDsKICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IGF1dG8gIWltcG9ydGFudDsKICB9Cn0KCi54dF9zaWcgewogICAgZmxvYXQ6IHJpZ2h0OwogICAgYmFja2dyb3VuZC1jb2xvcjogI2NlZTZmMjsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIHBhZGRpbmc6IDAuMjVlbTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICMwNThkYzc7CiAgICBtYXJnaW4tYm90dG9tOiAwLjI1ZW07Cn0KLnh0X3NpZyA+IHNwYW4gewogICAgbWFyZ2luLWxlZnQ6IDAuMjVlbTsKfQouc2lnX2Vycm9yIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmMmQ0Y2UgIWltcG9ydGFudDsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNhZTQzMmUgIWltcG9ydGFudDsKfQ==]]></data>
	</file>
	<file>
	  <filename>/css/backslash</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/css/backslash/backslash.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[QGltcG9ydCAiLi9icy9icy5jc3MiOw0KQGltcG9ydCAiZmsuY3NzIjs=]]></data>
	</file>
	<file>
	  <filename>/css/backslash/bs</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/css/backslash/bs/bs.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[QGltcG9ydCAiLi9saWIvY29yZS5jc3MiOw0KQGltcG9ydCAiLi9saWIveHRyYS5jc3MiOw0KQGltcG9ydCAiLi9saWIvaGVscGVycy5jc3MiOw0KQGltcG9ydCAiLi9saWIvbWFyZ2luX3BhZGRpbmcuY3NzIjsNCkBpbXBvcnQgIi4vbGliL21pc2MuY3NzIjsNCkBpbXBvcnQgIi4vbGliL2dyaWQuY3NzIjsNCkBpbXBvcnQgIi4vbGliL2xnLWdyaWQuY3NzIjsNCkBpbXBvcnQgIi4vbGliL21kLWdyaWQuY3NzIjsNCkBpbXBvcnQgIi4vbGliL3NtLWdyaWQuY3NzIjsNCkBpbXBvcnQgIi4vbGliL2dyaWQtdXRpbHMuY3NzIjsNCkBpbXBvcnQgIi4vbGliL2JzLWljb25zLmNzcyI7DQo=]]></data>
	</file>
	<file>
	  <filename>/css/backslash/bs/lib</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/css/backslash/bs/lib/bs-exp.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGJhc2VkIG9uIFNwZWN0cmUuY3NzIEV4cGVyaW1lbnRhbHMgdjAuNS45IHwgTUlUIExpY2Vuc2UgfCBnaXRodWIuY29tL3BpY3R1cmVwYW4yL3NwZWN0cmUgKi8KLmZvcm0tYXV0b2NvbXBsZXRlIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5mb3JtLWF1dG9jb21wbGV0ZSAuZm9ybS1hdXRvY29tcGxldGUtaW5wdXQgewogIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgZGlzcGxheTogZmxleDsKICAtbXMtZmxleC1saW5lLXBhY2s6IHN0YXJ0OwogIC1tcy1mbGV4LXdyYXA6IHdyYXA7CiAgZmxleC13cmFwOiB3cmFwOwogIGhlaWdodDogYXV0bzsKICBtaW4taGVpZ2h0OiAxLjZyZW07CiAgcGFkZGluZzogLjFyZW07Cn0KCi5mb3JtLWF1dG9jb21wbGV0ZSAuZm9ybS1hdXRvY29tcGxldGUtaW5wdXQuaXMtZm9jdXNlZCB7CiAgYm9yZGVyLWNvbG9yOiAjNTc1NWQ5OyAKICBib3gtc2hhZG93OiAwIDAgMCAuMXJlbSByZ2JhKDg3LCA4NSwgMjE3LCAuMik7Cn0KCi5mb3JtLWF1dG9jb21wbGV0ZSAuZm9ybS1hdXRvY29tcGxldGUtaW5wdXQgLmZvcm0taW5wdXQgewogIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgYm94LXNoYWRvdzogbm9uZTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgLW1zLWZsZXg6IDEgMCBhdXRvOwogIGZsZXg6IDEgMCBhdXRvOwogIGhlaWdodDogMS4ycmVtOwogIGxpbmUtaGVpZ2h0OiAuOHJlbTsKICBtYXJnaW46IC4xcmVtOwogIHdpZHRoOiBhdXRvOwp9CgouZm9ybS1hdXRvY29tcGxldGUgLm1lbnUgewogIGxlZnQ6IDA7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMTAwJTsKICB3aWR0aDogMTAwJTsKfQoKLmZvcm0tYXV0b2NvbXBsZXRlLmF1dG9jb21wbGV0ZS1vbmVsaW5lIC5mb3JtLWF1dG9jb21wbGV0ZS1pbnB1dCB7CiAgLW1zLWZsZXgtd3JhcDogbm93cmFwOwogIGZsZXgtd3JhcDogbm93cmFwOwogIG92ZXJmbG93LXg6IGF1dG87Cn0KCi5mb3JtLWF1dG9jb21wbGV0ZS5hdXRvY29tcGxldGUtb25lbGluZSAuY2hpcCB7CiAgLW1zLWZsZXg6IDEgMCBhdXRvOwogIGZsZXg6IDEgMCBhdXRvOwp9CgouY2FsZW5kYXIgewogIGJvcmRlcjogLjA1cmVtIHNvbGlkICNkYWRlZTQ7CiAgYm9yZGVyLXJhZGl1czogLjFyZW07CiAgZGlzcGxheTogYmxvY2s7CiAgbWluLXdpZHRoOiAyODBweDsKfQoKLmNhbGVuZGFyIC5jYWxlbmRhci1uYXYgewogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgYmFja2dyb3VuZDogI2Y3ZjhmOTsKICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAuMXJlbTsKICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogLjFyZW07CiAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgZGlzcGxheTogZmxleDsKICAtbXMtZmxleC1hbGlnbjogY2VudGVyOwogIGZvbnQtc2l6ZTogLjlyZW07CiAgcGFkZGluZzogLjRyZW07Cn0KCi5jYWxlbmRhciAuY2FsZW5kYXItaGVhZGVyLAouY2FsZW5kYXIgLmNhbGVuZGFyLWJvZHkgewogIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogIGRpc3BsYXk6IGZsZXg7CiAgLW1zLWZsZXgtcGFjazogY2VudGVyOwogIC1tcy1mbGV4LXdyYXA6IHdyYXA7CiAgZmxleC13cmFwOiB3cmFwOwogIGp1c3RpZnktY29udGVudDogY2VudGVyOwogIHBhZGRpbmc6IC40cmVtIDA7Cn0KCi5jYWxlbmRhciAuY2FsZW5kYXItaGVhZGVyIC5jYWxlbmRhci1kYXRlLAouY2FsZW5kYXIgLmNhbGVuZGFyLWJvZHkgLmNhbGVuZGFyLWRhdGUgewogIC1tcy1mbGV4OiAwIDAgMTQuMjglOwogIGZsZXg6IDAgMCAxNC4yOCU7CiAgbWF4LXdpZHRoOiAxNC4yOCU7Cn0KCi5jYWxlbmRhciAuY2FsZW5kYXItaGVhZGVyIHsKICBiYWNrZ3JvdW5kOiAjZjdmOGY5OwogIGJvcmRlci1ib3R0b206IC4wNXJlbSBzb2xpZCAjZGFkZWU0OwogIGNvbG9yOiAjYmNjM2NlOwogIGZvbnQtc2l6ZTogLjdyZW07CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgouY2FsZW5kYXIgLmNhbGVuZGFyLWJvZHkgewogIGNvbG9yOiAjNjY3NThjOwp9CgouY2FsZW5kYXIgLmNhbGVuZGFyLWRhdGUgewogIGJvcmRlcjogMDsKICBwYWRkaW5nOiAuMnJlbTsKfQoKLmNhbGVuZGFyIC5jYWxlbmRhci1kYXRlIC5kYXRlLWl0ZW0gewogIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7CiAgYXBwZWFyYW5jZTogbm9uZTsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICBib3JkZXI6IC4wNXJlbSBzb2xpZCB0cmFuc3BhcmVudDsKICBib3JkZXItcmFkaXVzOiA1MCU7CiAgY29sb3I6ICM2Njc1OGM7CiAgY3Vyc29yOiBwb2ludGVyOwogIGZvbnQtc2l6ZTogLjdyZW07CiAgaGVpZ2h0OiAxLjRyZW07CiAgbGluZS1oZWlnaHQ6IDFyZW07CiAgb3V0bGluZTogbm9uZTsKICBwYWRkaW5nOiAuMXJlbTsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC4ycywgYm9yZGVyIC4ycywgYm94LXNoYWRvdyAuMnMsIGNvbG9yIC4yczsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgd2lkdGg6IDEuNHJlbTsKfQoKLmNhbGVuZGFyIC5jYWxlbmRhci1kYXRlIC5kYXRlLWl0ZW0uZGF0ZS10b2RheSB7CiAgYm9yZGVyLWNvbG9yOiAjZTVlNWY5OwogIGNvbG9yOiAjNTc1NWQ5Owp9CgouY2FsZW5kYXIgLmNhbGVuZGFyLWRhdGUgLmRhdGUtaXRlbTpmb2N1cyB7CiAgYm94LXNoYWRvdzogMCAwIDAgLjFyZW0gcmdiYSg4NywgODUsIDIxNywgLjIpOwp9CgouY2FsZW5kYXIgLmNhbGVuZGFyLWRhdGUgLmRhdGUtaXRlbTpmb2N1cywKLmNhbGVuZGFyIC5jYWxlbmRhci1kYXRlIC5kYXRlLWl0ZW06aG92ZXIgewogIGJhY2tncm91bmQ6ICNmZWZlZmY7CiAgYm9yZGVyLWNvbG9yOiAjZTVlNWY5OwogIGNvbG9yOiAjNTc1NWQ5OwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKLmNhbGVuZGFyIC5jYWxlbmRhci1kYXRlIC5kYXRlLWl0ZW06YWN0aXZlLAouY2FsZW5kYXIgLmNhbGVuZGFyLWRhdGUgLmRhdGUtaXRlbS5hY3RpdmUgewogIGJhY2tncm91bmQ6ICM0YjQ4ZDY7CiAgYm9yZGVyLWNvbG9yOiAjMzYzNGQyOwogIGNvbG9yOiAjZmZmOwp9CgouY2FsZW5kYXIgLmNhbGVuZGFyLWRhdGUgLmRhdGUtaXRlbS5iYWRnZTo6YWZ0ZXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICByaWdodDogM3B4OwogIHRvcDogM3B4OwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKDUwJSwgLTUwJSk7Cn0KCi5jYWxlbmRhciAuY2FsZW5kYXItZGF0ZSAuZGF0ZS1pdGVtOmRpc2FibGVkLAouY2FsZW5kYXIgLmNhbGVuZGFyLWRhdGUgLmRhdGUtaXRlbS5kaXNhYmxlZCwKLmNhbGVuZGFyIC5jYWxlbmRhci1kYXRlIC5jYWxlbmRhci1ldmVudDpkaXNhYmxlZCwKLmNhbGVuZGFyIC5jYWxlbmRhci1kYXRlIC5jYWxlbmRhci1ldmVudC5kaXNhYmxlZCB7CiAgY3Vyc29yOiBkZWZhdWx0OwogIG9wYWNpdHk6IC4yNTsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLmNhbGVuZGFyIC5jYWxlbmRhci1kYXRlLnByZXYtbW9udGggLmRhdGUtaXRlbSwKLmNhbGVuZGFyIC5jYWxlbmRhci1kYXRlLnByZXYtbW9udGggLmNhbGVuZGFyLWV2ZW50LAouY2FsZW5kYXIgLmNhbGVuZGFyLWRhdGUubmV4dC1tb250aCAuZGF0ZS1pdGVtLAouY2FsZW5kYXIgLmNhbGVuZGFyLWRhdGUubmV4dC1tb250aCAuY2FsZW5kYXItZXZlbnQgewogIG9wYWNpdHk6IC4yNTsKfQoKLmNhbGVuZGFyIC5jYWxlbmRhci1yYW5nZSB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgouY2FsZW5kYXIgLmNhbGVuZGFyLXJhbmdlOjpiZWZvcmUgewogIGJhY2tncm91bmQ6ICNmMWYxZmM7CiAgY29udGVudDogIiI7CiAgaGVpZ2h0OiAxLjRyZW07CiAgbGVmdDogMDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgcmlnaHQ6IDA7CiAgdG9wOiA1MCU7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwp9CgouY2FsZW5kYXIgLmNhbGVuZGFyLXJhbmdlLnJhbmdlLXN0YXJ0OjpiZWZvcmUgewogIGxlZnQ6IDUwJTsKfQoKLmNhbGVuZGFyIC5jYWxlbmRhci1yYW5nZS5yYW5nZS1lbmQ6OmJlZm9yZSB7CiAgcmlnaHQ6IDUwJTsKfQoKLmNhbGVuZGFyIC5jYWxlbmRhci1yYW5nZS5yYW5nZS1zdGFydCAuZGF0ZS1pdGVtLAouY2FsZW5kYXIgLmNhbGVuZGFyLXJhbmdlLnJhbmdlLWVuZCAuZGF0ZS1pdGVtIHsKICBiYWNrZ3JvdW5kOiAjNGI0OGQ2OwogIGJvcmRlci1jb2xvcjogIzM2MzRkMjsKICBjb2xvcjogI2ZmZjsKfQoKLmNhbGVuZGFyIC5jYWxlbmRhci1yYW5nZSAuZGF0ZS1pdGVtIHsKICBjb2xvcjogIzU3NTVkOTsKfQoKLmNhbGVuZGFyLmNhbGVuZGFyLWxnIC5jYWxlbmRhci1ib2R5IHsKICBwYWRkaW5nOiAwOwp9CgouY2FsZW5kYXIuY2FsZW5kYXItbGcgLmNhbGVuZGFyLWJvZHkgLmNhbGVuZGFyLWRhdGUgewogIGJvcmRlci1ib3R0b206IC4wNXJlbSBzb2xpZCAjZGFkZWU0OwogIGJvcmRlci1yaWdodDogLjA1cmVtIHNvbGlkICNkYWRlZTQ7CiAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgZGlzcGxheTogZmxleDsKICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogIGhlaWdodDogNS41cmVtOwogIHBhZGRpbmc6IDA7Cn0KCi5jYWxlbmRhci5jYWxlbmRhci1sZyAuY2FsZW5kYXItYm9keSAuY2FsZW5kYXItZGF0ZTpudGgtY2hpbGQoN24pIHsKICBib3JkZXItcmlnaHQ6IDA7Cn0KCi5jYWxlbmRhci5jYWxlbmRhci1sZyAuY2FsZW5kYXItYm9keSAuY2FsZW5kYXItZGF0ZTpudGgtbGFzdC1jaGlsZCgtbis3KSB7CiAgYm9yZGVyLWJvdHRvbTogMDsKfQoKLmNhbGVuZGFyLmNhbGVuZGFyLWxnIC5kYXRlLWl0ZW0gewogIGFsaWduLXNlbGY6IGZsZXgtZW5kOwogIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGVuZDsKICBoZWlnaHQ6IDEuNHJlbTsKICBtYXJnaW4tcmlnaHQ6IC4ycmVtOwogIG1hcmdpbi10b3A6IC4ycmVtOwp9CgouY2FsZW5kYXIuY2FsZW5kYXItbGcgLmNhbGVuZGFyLXJhbmdlOjpiZWZvcmUgewogIHRvcDogMTlweDsKfQoKLmNhbGVuZGFyLmNhbGVuZGFyLWxnIC5jYWxlbmRhci1yYW5nZS5yYW5nZS1zdGFydDo6YmVmb3JlIHsKICBsZWZ0OiBhdXRvOwogIHdpZHRoOiAxOXB4Owp9CgouY2FsZW5kYXIuY2FsZW5kYXItbGcgLmNhbGVuZGFyLXJhbmdlLnJhbmdlLWVuZDo6YmVmb3JlIHsKICByaWdodDogMTlweDsKfQoKLmNhbGVuZGFyLmNhbGVuZGFyLWxnIC5jYWxlbmRhci1ldmVudHMgewogIGZsZXgtZ3JvdzogMTsKICAtbXMtZmxleC1wb3NpdGl2ZTogMTsKICBsaW5lLWhlaWdodDogMTsKICBvdmVyZmxvdy15OiBhdXRvOwogIHBhZGRpbmc6IC4ycmVtOwp9CgouY2FsZW5kYXIuY2FsZW5kYXItbGcgLmNhbGVuZGFyLWV2ZW50IHsKICBib3JkZXItcmFkaXVzOiAuMXJlbTsKICBkaXNwbGF5OiBibG9jazsKICBmb250LXNpemU6IC43cmVtOwogIG1hcmdpbjogLjFyZW0gYXV0bzsKICBvdmVyZmxvdzogaGlkZGVuOwogIHBhZGRpbmc6IDNweCA0cHg7CiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLmNhcm91c2VsIC5jYXJvdXNlbC1sb2NhdG9yOm50aC1vZi10eXBlKDEpOmNoZWNrZWQgfiAuY2Fyb3VzZWwtY29udGFpbmVyIC5jYXJvdXNlbC1pdGVtOm50aC1vZi10eXBlKDEpLAouY2Fyb3VzZWwgLmNhcm91c2VsLWxvY2F0b3I6bnRoLW9mLXR5cGUoMik6Y2hlY2tlZCB+IC5jYXJvdXNlbC1jb250YWluZXIgLmNhcm91c2VsLWl0ZW06bnRoLW9mLXR5cGUoMiksCi5jYXJvdXNlbCAuY2Fyb3VzZWwtbG9jYXRvcjpudGgtb2YtdHlwZSgzKTpjaGVja2VkIH4gLmNhcm91c2VsLWNvbnRhaW5lciAuY2Fyb3VzZWwtaXRlbTpudGgtb2YtdHlwZSgzKSwKLmNhcm91c2VsIC5jYXJvdXNlbC1sb2NhdG9yOm50aC1vZi10eXBlKDQpOmNoZWNrZWQgfiAuY2Fyb3VzZWwtY29udGFpbmVyIC5jYXJvdXNlbC1pdGVtOm50aC1vZi10eXBlKDQpLAouY2Fyb3VzZWwgLmNhcm91c2VsLWxvY2F0b3I6bnRoLW9mLXR5cGUoNSk6Y2hlY2tlZCB+IC5jYXJvdXNlbC1jb250YWluZXIgLmNhcm91c2VsLWl0ZW06bnRoLW9mLXR5cGUoNSksCi5jYXJvdXNlbCAuY2Fyb3VzZWwtbG9jYXRvcjpudGgtb2YtdHlwZSg2KTpjaGVja2VkIH4gLmNhcm91c2VsLWNvbnRhaW5lciAuY2Fyb3VzZWwtaXRlbTpudGgtb2YtdHlwZSg2KSwKLmNhcm91c2VsIC5jYXJvdXNlbC1sb2NhdG9yOm50aC1vZi10eXBlKDcpOmNoZWNrZWQgfiAuY2Fyb3VzZWwtY29udGFpbmVyIC5jYXJvdXNlbC1pdGVtOm50aC1vZi10eXBlKDcpLAouY2Fyb3VzZWwgLmNhcm91c2VsLWxvY2F0b3I6bnRoLW9mLXR5cGUoOCk6Y2hlY2tlZCB+IC5jYXJvdXNlbC1jb250YWluZXIgLmNhcm91c2VsLWl0ZW06bnRoLW9mLXR5cGUoOCkgewogIGFuaW1hdGlvbjogY2Fyb3VzZWwtc2xpZGVpbiAuNzVzIGVhc2UtaW4tb3V0IDE7CiAgb3BhY2l0eTogMTsKICB6LWluZGV4OiAxMDA7Cn0KCi5jYXJvdXNlbCAuY2Fyb3VzZWwtbG9jYXRvcjpudGgtb2YtdHlwZSgxKTpjaGVja2VkIH4gLmNhcm91c2VsLW5hdiAubmF2LWl0ZW06bnRoLW9mLXR5cGUoMSksCi5jYXJvdXNlbCAuY2Fyb3VzZWwtbG9jYXRvcjpudGgtb2YtdHlwZSgyKTpjaGVja2VkIH4gLmNhcm91c2VsLW5hdiAubmF2LWl0ZW06bnRoLW9mLXR5cGUoMiksCi5jYXJvdXNlbCAuY2Fyb3VzZWwtbG9jYXRvcjpudGgtb2YtdHlwZSgzKTpjaGVja2VkIH4gLmNhcm91c2VsLW5hdiAubmF2LWl0ZW06bnRoLW9mLXR5cGUoMyksCi5jYXJvdXNlbCAuY2Fyb3VzZWwtbG9jYXRvcjpudGgtb2YtdHlwZSg0KTpjaGVja2VkIH4gLmNhcm91c2VsLW5hdiAubmF2LWl0ZW06bnRoLW9mLXR5cGUoNCksCi5jYXJvdXNlbCAuY2Fyb3VzZWwtbG9jYXRvcjpudGgtb2YtdHlwZSg1KTpjaGVja2VkIH4gLmNhcm91c2VsLW5hdiAubmF2LWl0ZW06bnRoLW9mLXR5cGUoNSksCi5jYXJvdXNlbCAuY2Fyb3VzZWwtbG9jYXRvcjpudGgtb2YtdHlwZSg2KTpjaGVja2VkIH4gLmNhcm91c2VsLW5hdiAubmF2LWl0ZW06bnRoLW9mLXR5cGUoNiksCi5jYXJvdXNlbCAuY2Fyb3VzZWwtbG9jYXRvcjpudGgtb2YtdHlwZSg3KTpjaGVja2VkIH4gLmNhcm91c2VsLW5hdiAubmF2LWl0ZW06bnRoLW9mLXR5cGUoNyksCi5jYXJvdXNlbCAuY2Fyb3VzZWwtbG9jYXRvcjpudGgtb2YtdHlwZSg4KTpjaGVja2VkIH4gLmNhcm91c2VsLW5hdiAubmF2LWl0ZW06bnRoLW9mLXR5cGUoOCkgewogIGNvbG9yOiAjZjdmOGY5Owp9CgouY2Fyb3VzZWwgewogIGJhY2tncm91bmQ6ICNmN2Y4Zjk7CiAgZGlzcGxheTogYmxvY2s7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHdpZHRoOiAxMDAlOwogIHotaW5kZXg6IDE7Cn0KCi5jYXJvdXNlbCAuY2Fyb3VzZWwtY29udGFpbmVyIHsKICBoZWlnaHQ6IDEwMCU7CiAgbGVmdDogMDsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5jYXJvdXNlbCAuY2Fyb3VzZWwtY29udGFpbmVyOjpiZWZvcmUgewogIGNvbnRlbnQ6ICIiOwogIGRpc3BsYXk6IGJsb2NrOwogIHBhZGRpbmctYm90dG9tOiA1Ni4yNSU7Cn0KCi5jYXJvdXNlbCAuY2Fyb3VzZWwtY29udGFpbmVyIC5jYXJvdXNlbC1pdGVtIHsKICBhbmltYXRpb246IGNhcm91c2VsLXNsaWRlb3V0IDFzIGVhc2UtaW4tb3V0IDE7CiAgaGVpZ2h0OiAxMDAlOwogIGxlZnQ6IDA7CiAgbWFyZ2luOiAwOwogIG9wYWNpdHk6IDA7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsKICB3aWR0aDogMTAwJTsKfQoKLmNhcm91c2VsIC5jYXJvdXNlbC1jb250YWluZXIgLmNhcm91c2VsLWl0ZW06aG92ZXIgLml0ZW0tcHJldiwKLmNhcm91c2VsIC5jYXJvdXNlbC1jb250YWluZXIgLmNhcm91c2VsLWl0ZW06aG92ZXIgLml0ZW0tbmV4dCB7CiAgb3BhY2l0eTogMTsKfQoKLmNhcm91c2VsIC5jYXJvdXNlbC1jb250YWluZXIgLml0ZW0tcHJldiwKLmNhcm91c2VsIC5jYXJvdXNlbC1jb250YWluZXIgLml0ZW0tbmV4dCB7CiAgYmFja2dyb3VuZDogcmdiYSgyNDcsIDI0OCwgMjQ5LCAuMjUpOwogIGJvcmRlci1jb2xvcjogcmdiYSgyNDcsIDI0OCwgMjQ5LCAuNSk7CiAgY29sb3I6ICNmN2Y4Zjk7CiAgb3BhY2l0eTogMDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiA1MCU7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogIHRyYW5zaXRpb246IGFsbCAuNHM7CiAgei1pbmRleDogMTAwOwp9CgouY2Fyb3VzZWwgLmNhcm91c2VsLWNvbnRhaW5lciAuaXRlbS1wcmV2IHsKICBsZWZ0OiAxcmVtOwp9CgouY2Fyb3VzZWwgLmNhcm91c2VsLWNvbnRhaW5lciAuaXRlbS1uZXh0IHsKICByaWdodDogMXJlbTsKfQoKLmNhcm91c2VsIC5jYXJvdXNlbC1uYXYgewogIGJvdHRvbTogLjRyZW07CiAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgZGlzcGxheTogZmxleDsKICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgbGVmdDogNTAlOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgd2lkdGg6IDEwcmVtOwogIHotaW5kZXg6IDEwMDsKfQoKLmNhcm91c2VsIC5jYXJvdXNlbC1uYXYgLm5hdi1pdGVtIHsKICBjb2xvcjogcmdiYSgyNDcsIDI0OCwgMjQ5LCAuNSk7CiAgZGlzcGxheTogYmxvY2s7CiAgLW1zLWZsZXg6IDEgMCBhdXRvOwogIGZsZXg6IDEgMCBhdXRvOwogIGhlaWdodDogMS42cmVtOwogIG1hcmdpbjogLjJyZW07CiAgbWF4LXdpZHRoOiAyLjVyZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgouY2Fyb3VzZWwgLmNhcm91c2VsLW5hdiAubmF2LWl0ZW06OmJlZm9yZSB7CiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yOwogIGNvbnRlbnQ6ICIiOwogIGRpc3BsYXk6IGJsb2NrOwogIGhlaWdodDogLjFyZW07CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogLjVyZW07CiAgd2lkdGg6IDEwMCU7Cn0KCkBrZXlmcmFtZXMgY2Fyb3VzZWwtc2xpZGVpbiB7CiAgMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKICB9Cn0KCkBrZXlmcmFtZXMgY2Fyb3VzZWwtc2xpZGVvdXQgewogIDAlIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7CiAgfQogIDEwMCUgewogICAgb3BhY2l0eTogMTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICB9Cn0KCi5jb21wYXJpc29uLXNsaWRlciB7CiAgaGVpZ2h0OiA1MHZoOwogIG92ZXJmbG93OiBoaWRkZW47CiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOyAKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgd2lkdGg6IDEwMCU7Cn0KCi5jb21wYXJpc29uLXNsaWRlciAuY29tcGFyaXNvbi1iZWZvcmUsCi5jb21wYXJpc29uLXNsaWRlciAuY29tcGFyaXNvbi1hZnRlciB7CiAgaGVpZ2h0OiAxMDAlOwogIGxlZnQ6IDA7CiAgbWFyZ2luOiAwOwogIG92ZXJmbG93OiBoaWRkZW47CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsKfQoKLmNvbXBhcmlzb24tc2xpZGVyIC5jb21wYXJpc29uLWJlZm9yZSBpbWcsCi5jb21wYXJpc29uLXNsaWRlciAuY29tcGFyaXNvbi1hZnRlciBpbWcgewogIGhlaWdodDogMTAwJTsKICBvYmplY3QtZml0OiBjb3ZlcjsKICBvYmplY3QtcG9zaXRpb246IGxlZnQgY2VudGVyOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMTAwJTsKfQoKLmNvbXBhcmlzb24tc2xpZGVyIC5jb21wYXJpc29uLWJlZm9yZSB7CiAgd2lkdGg6IDEwMCU7CiAgei1pbmRleDogMTsKfQoKLmNvbXBhcmlzb24tc2xpZGVyIC5jb21wYXJpc29uLWJlZm9yZSAuY29tcGFyaXNvbi1sYWJlbCB7CiAgcmlnaHQ6IC44cmVtOwp9CgouY29tcGFyaXNvbi1zbGlkZXIgLmNvbXBhcmlzb24tYWZ0ZXIgewogIG1heC13aWR0aDogMTAwJTsKICBtaW4td2lkdGg6IDA7CiAgei1pbmRleDogMjsKfQoKLmNvbXBhcmlzb24tc2xpZGVyIC5jb21wYXJpc29uLWFmdGVyOjpiZWZvcmUgewogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogIGNvbnRlbnQ6ICIiOwogIGN1cnNvcjogZGVmYXVsdDsKICBoZWlnaHQ6IDEwMCU7CiAgbGVmdDogMDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgcmlnaHQ6IC44cmVtOwogIHRvcDogMDsKICB6LWluZGV4OiAxOwp9CgouY29tcGFyaXNvbi1zbGlkZXIgLmNvbXBhcmlzb24tYWZ0ZXI6OmFmdGVyIHsKICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7CiAgYm9yZGVyLXJhZGl1czogNTAlOwogIGJveC1zaGFkb3c6IDAgLTVweCwgMCA1cHg7CiAgY29sb3I6ICNmZmY7CiAgY29udGVudDogIiI7CiAgaGVpZ2h0OiAzcHg7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiAuNHJlbTsKICB0b3A6IDUwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MCUsIC01MCUpOwogIHdpZHRoOiAzcHg7Cn0KCi5jb21wYXJpc29uLXNsaWRlciAuY29tcGFyaXNvbi1hZnRlciAuY29tcGFyaXNvbi1sYWJlbCB7CiAgbGVmdDogLjhyZW07Cn0KCi5jb21wYXJpc29uLXNsaWRlciAuY29tcGFyaXNvbi1yZXNpemVyIHsKICBhbmltYXRpb246IGZpcnN0LXJ1biAxLjVzIDEgZWFzZS1pbi1vdXQ7CiAgY3Vyc29yOiBldy1yZXNpemU7CiAgaGVpZ2h0OiAuOHJlbTsKICBsZWZ0OiAwOwogIG1heC13aWR0aDogMTAwJTsKICBtaW4td2lkdGg6IC44cmVtOwogIG9wYWNpdHk6IDA7CiAgb3V0bGluZTogbm9uZTsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgcmVzaXplOiBob3Jpem9udGFsOwogIHRvcDogNTAlOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKSBzY2FsZVkoMzApOwogIHdpZHRoOiAwOwp9CgouY29tcGFyaXNvbi1zbGlkZXIgLmNvbXBhcmlzb24tbGFiZWwgewogIGJhY2tncm91bmQ6IHJnYmEoNDgsIDU1LCA2NiwgLjUpOwogIGJvdHRvbTogLjhyZW07CiAgY29sb3I6ICNmZmY7CiAgcGFkZGluZzogLjJyZW0gLjRyZW07CiAgcG9zaXRpb246IGFic29sdXRlOwogIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCkBrZXlmcmFtZXMgZmlyc3QtcnVuIHsKICAwJSB7CiAgICB3aWR0aDogMDsKICB9CiAgMjUlIHsKICAgIHdpZHRoOiAyLjRyZW07CiAgfQogIDUwJSB7CiAgICB3aWR0aDogLjhyZW07CiAgfQogIDc1JSB7CiAgICB3aWR0aDogMS4ycmVtOwogIH0KICAxMDAlIHsKICAgIHdpZHRoOiAwOwogIH0KfQoKLmZpbHRlciAuZmlsdGVyLXRhZyN0YWctMDpjaGVja2VkIH4gLmZpbHRlci1uYXYgLmNoaXBbZm9yPSJ0YWctMCJdLAouZmlsdGVyIC5maWx0ZXItdGFnI3RhZy0xOmNoZWNrZWQgfiAuZmlsdGVyLW5hdiAuY2hpcFtmb3I9InRhZy0xIl0sCi5maWx0ZXIgLmZpbHRlci10YWcjdGFnLTI6Y2hlY2tlZCB+IC5maWx0ZXItbmF2IC5jaGlwW2Zvcj0idGFnLTIiXSwKLmZpbHRlciAuZmlsdGVyLXRhZyN0YWctMzpjaGVja2VkIH4gLmZpbHRlci1uYXYgLmNoaXBbZm9yPSJ0YWctMyJdLAouZmlsdGVyIC5maWx0ZXItdGFnI3RhZy00OmNoZWNrZWQgfiAuZmlsdGVyLW5hdiAuY2hpcFtmb3I9InRhZy00Il0sCi5maWx0ZXIgLmZpbHRlci10YWcjdGFnLTU6Y2hlY2tlZCB+IC5maWx0ZXItbmF2IC5jaGlwW2Zvcj0idGFnLTUiXSwKLmZpbHRlciAuZmlsdGVyLXRhZyN0YWctNjpjaGVja2VkIH4gLmZpbHRlci1uYXYgLmNoaXBbZm9yPSJ0YWctNiJdLAouZmlsdGVyIC5maWx0ZXItdGFnI3RhZy03OmNoZWNrZWQgfiAuZmlsdGVyLW5hdiAuY2hpcFtmb3I9InRhZy03Il0sCi5maWx0ZXIgLmZpbHRlci10YWcjdGFnLTg6Y2hlY2tlZCB+IC5maWx0ZXItbmF2IC5jaGlwW2Zvcj0idGFnLTgiXSB7CiAgYmFja2dyb3VuZDogIzU3NTVkOTsKICBjb2xvcjogI2ZmZjsKfQoKLmZpbHRlciAuZmlsdGVyLXRhZyN0YWctMTpjaGVja2VkIH4gLmZpbHRlci1ib2R5IC5maWx0ZXItaXRlbTpub3QoW2RhdGEtdGFnfj0idGFnLTEiXSksCi5maWx0ZXIgLmZpbHRlci10YWcjdGFnLTI6Y2hlY2tlZCB+IC5maWx0ZXItYm9keSAuZmlsdGVyLWl0ZW06bm90KFtkYXRhLXRhZ349InRhZy0yIl0pLAouZmlsdGVyIC5maWx0ZXItdGFnI3RhZy0zOmNoZWNrZWQgfiAuZmlsdGVyLWJvZHkgLmZpbHRlci1pdGVtOm5vdChbZGF0YS10YWd+PSJ0YWctMyJdKSwKLmZpbHRlciAuZmlsdGVyLXRhZyN0YWctNDpjaGVja2VkIH4gLmZpbHRlci1ib2R5IC5maWx0ZXItaXRlbTpub3QoW2RhdGEtdGFnfj0idGFnLTQiXSksCi5maWx0ZXIgLmZpbHRlci10YWcjdGFnLTU6Y2hlY2tlZCB+IC5maWx0ZXItYm9keSAuZmlsdGVyLWl0ZW06bm90KFtkYXRhLXRhZ349InRhZy01Il0pLAouZmlsdGVyIC5maWx0ZXItdGFnI3RhZy02OmNoZWNrZWQgfiAuZmlsdGVyLWJvZHkgLmZpbHRlci1pdGVtOm5vdChbZGF0YS10YWd+PSJ0YWctNiJdKSwKLmZpbHRlciAuZmlsdGVyLXRhZyN0YWctNzpjaGVja2VkIH4gLmZpbHRlci1ib2R5IC5maWx0ZXItaXRlbTpub3QoW2RhdGEtdGFnfj0idGFnLTciXSksCi5maWx0ZXIgLmZpbHRlci10YWcjdGFnLTg6Y2hlY2tlZCB+IC5maWx0ZXItYm9keSAuZmlsdGVyLWl0ZW06bm90KFtkYXRhLXRhZ349InRhZy04Il0pIHsKICBkaXNwbGF5OiBub25lOwp9CgouZmlsdGVyIC5maWx0ZXItbmF2IHsKICBtYXJnaW46IC40cmVtIDA7Cn0KCi5maWx0ZXIgLmZpbHRlci1ib2R5IHsKICBkaXNwbGF5OiAtbXMtZmxleGJveDsKICBkaXNwbGF5OiBmbGV4OwogIC1tcy1mbGV4LXdyYXA6IHdyYXA7CiAgZmxleC13cmFwOiB3cmFwOwp9CgoubWV0ZXIgewogIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7CiAgYXBwZWFyYW5jZTogbm9uZTsKICBiYWNrZ3JvdW5kOiAjZjdmOGY5OwogIGJvcmRlcjogMDsKICBib3JkZXItcmFkaXVzOiAuMXJlbTsKICBkaXNwbGF5OiBibG9jazsKICBoZWlnaHQ6IC44cmVtOyAKICB3aWR0aDogMTAwJTsKfQoKLm1ldGVyOjotd2Via2l0LW1ldGVyLWlubmVyLWVsZW1lbnQgewogIGRpc3BsYXk6IGJsb2NrOwp9CgoubWV0ZXI6Oi13ZWJraXQtbWV0ZXItYmFyLAoubWV0ZXI6Oi13ZWJraXQtbWV0ZXItb3B0aW11bS12YWx1ZSwKLm1ldGVyOjotd2Via2l0LW1ldGVyLXN1Ym9wdGltdW0tdmFsdWUsCi5tZXRlcjo6LXdlYmtpdC1tZXRlci1ldmVuLWxlc3MtZ29vZC12YWx1ZSB7CiAgYm9yZGVyLXJhZGl1czogLjFyZW07Cn0KCi5tZXRlcjo6LXdlYmtpdC1tZXRlci1iYXIgewogIGJhY2tncm91bmQ6ICNmN2Y4Zjk7Cn0KCi5tZXRlcjo6LXdlYmtpdC1tZXRlci1vcHRpbXVtLXZhbHVlIHsKICBiYWNrZ3JvdW5kOiAjMzJiNjQzOwp9CgoubWV0ZXI6Oi13ZWJraXQtbWV0ZXItc3Vib3B0aW11bS12YWx1ZSB7CiAgYmFja2dyb3VuZDogI2ZmYjcwMDsKfQoKLm1ldGVyOjotd2Via2l0LW1ldGVyLWV2ZW4tbGVzcy1nb29kLXZhbHVlIHsKICBiYWNrZ3JvdW5kOiAjZTg1NjAwOwp9CgoubWV0ZXI6Oi1tb3otbWV0ZXItYmFyLAoubWV0ZXI6LW1vei1tZXRlci1vcHRpbXVtLAoubWV0ZXI6LW1vei1tZXRlci1zdWItb3B0aW11bSwKLm1ldGVyOi1tb3otbWV0ZXItc3ViLXN1Yi1vcHRpbXVtIHsKICBib3JkZXItcmFkaXVzOiAuMXJlbTsKfQoKLm1ldGVyOi1tb3otbWV0ZXItb3B0aW11bTo6LW1vei1tZXRlci1iYXIgewogIGJhY2tncm91bmQ6ICMzMmI2NDM7Cn0KCi5tZXRlcjotbW96LW1ldGVyLXN1Yi1vcHRpbXVtOjotbW96LW1ldGVyLWJhciB7CiAgYmFja2dyb3VuZDogI2ZmYjcwMDsKfQoKLm1ldGVyOi1tb3otbWV0ZXItc3ViLXN1Yi1vcHRpbXVtOjotbW96LW1ldGVyLWJhciB7CiAgYmFja2dyb3VuZDogI2U4NTYwMDsKfQoKLm9mZi1jYW52YXMgewogIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogIGRpc3BsYXk6IGZsZXg7CiAgLW1zLWZsZXgtZmxvdzogbm93cmFwOwogIGZsZXgtZmxvdzogbm93cmFwOwogIGhlaWdodDogMTAwJTsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgd2lkdGg6IDEwMCU7Cn0KCi5vZmYtY2FudmFzIC5vZmYtY2FudmFzLXRvZ2dsZSB7CiAgZGlzcGxheTogYmxvY2s7CiAgbGVmdDogLjRyZW07IAogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IC40cmVtOwogIHRyYW5zaXRpb246IG5vbmU7CiAgei1pbmRleDogMTsKfQoKLm9mZi1jYW52YXMgLm9mZi1jYW52YXMtc2lkZWJhciB7CiAgYmFja2dyb3VuZDogI2Y3ZjhmOTsKICBib3R0b206IDA7CiAgbGVmdDogMDsKICBtaW4td2lkdGg6IDEwcmVtOwogIG92ZXJmbG93LXk6IGF1dG87CiAgcG9zaXRpb246IGZpeGVkOwogIHRvcDogMDsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpOyAKICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjI1czsKICB6LWluZGV4OiAyMDA7Cn0KCi5vZmYtY2FudmFzIC5vZmYtY2FudmFzLWNvbnRlbnQgewogIC1tcy1mbGV4OiAxIDEgYXV0bzsKICBmbGV4OiAxIDEgYXV0bzsKICBoZWlnaHQ6IDEwMCU7CiAgcGFkZGluZzogLjRyZW0gLjRyZW0gLjRyZW0gNHJlbTsKfQoKLm9mZi1jYW52YXMgLm9mZi1jYW52YXMtb3ZlcmxheSB7CiAgYmFja2dyb3VuZDogcmdiYSg0OCwgNTUsIDY2LCAuMSk7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICBib3JkZXItcmFkaXVzOiAwOwogIGJvdHRvbTogMDsKICBkaXNwbGF5OiBub25lOwogIGhlaWdodDogMTAwJTsKICBsZWZ0OiAwOwogIHBvc2l0aW9uOiBmaXhlZDsKICByaWdodDogMDsKICB0b3A6IDA7CiAgd2lkdGg6IDEwMCU7Cn0KCi5vZmYtY2FudmFzIC5vZmYtY2FudmFzLXNpZGViYXI6dGFyZ2V0LAoub2ZmLWNhbnZhcyAub2ZmLWNhbnZhcy1zaWRlYmFyLmFjdGl2ZSB7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOwp9Cgoub2ZmLWNhbnZhcyAub2ZmLWNhbnZhcy1zaWRlYmFyOnRhcmdldCB+IC5vZmYtY2FudmFzLW92ZXJsYXksCi5vZmYtY2FudmFzIC5vZmYtY2FudmFzLXNpZGViYXIuYWN0aXZlIH4gLm9mZi1jYW52YXMtb3ZlcmxheSB7CiAgZGlzcGxheTogYmxvY2s7CiAgei1pbmRleDogMTAwOwp9CgpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAub2ZmLWNhbnZhcy5vZmYtY2FudmFzLXNpZGViYXItc2hvdyAub2ZmLWNhbnZhcy10b2dnbGUgewogICAgZGlzcGxheTogbm9uZTsKICB9CiAgLm9mZi1jYW52YXMub2ZmLWNhbnZhcy1zaWRlYmFyLXNob3cgLm9mZi1jYW52YXMtc2lkZWJhciB7CiAgICAtbXMtZmxleDogMCAwIGF1dG87CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHRyYW5zZm9ybTogbm9uZTsKICB9CiAgLm9mZi1jYW52YXMub2ZmLWNhbnZhcy1zaWRlYmFyLXNob3cgLm9mZi1jYW52YXMtb3ZlcmxheSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQp9CgoucGFyYWxsYXggewogIGRpc3BsYXk6IGJsb2NrOwogIGhlaWdodDogYXV0bzsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgd2lkdGg6IGF1dG87Cn0KCi5wYXJhbGxheCAucGFyYWxsYXgtY29udGVudCB7CiAgYm94LXNoYWRvdzogMCAxcmVtIDIuMXJlbSByZ2JhKDQ4LCA1NSwgNjYsIC4zKTsKICBoZWlnaHQ6IGF1dG87CiAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgxMDAwcHgpOwogIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Q7CiAgdHJhbnNpdGlvbjogYWxsIC40cyBlYXNlOwogIHdpZHRoOiAxMDAlOwp9CgoucGFyYWxsYXggLnBhcmFsbGF4LWNvbnRlbnQ6OmJlZm9yZSB7CiAgY29udGVudDogIiI7CiAgZGlzcGxheTogYmxvY2s7CiAgaGVpZ2h0OiAxMDAlOwogIGxlZnQ6IDA7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsKICB3aWR0aDogMTAwJTsKfQoKLnBhcmFsbGF4IC5wYXJhbGxheC1mcm9udCB7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICBjb2xvcjogI2ZmZjsKICBkaXNwbGF5OiAtbXMtZmxleGJveDsKICBkaXNwbGF5OiBmbGV4OwogIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgLW1zLWZsZXgtcGFjazogY2VudGVyOwogIGhlaWdodDogMTAwJTsKICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICBsZWZ0OiAwOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdGV4dC1zaGFkb3c6IDAgMCAyMHB4IHJnYmEoNDgsIDU1LCA2NiwgLjc1KTsKICB0b3A6IDA7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDUwcHgpIHNjYWxlKC45NSk7CiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC40czsKICB3aWR0aDogMTAwJTsKICB6LWluZGV4OiAxOwp9CgoucGFyYWxsYXggLnBhcmFsbGF4LXRvcC1sZWZ0IHsKICBoZWlnaHQ6IDUwJTsKICBsZWZ0OiAwOwogIG91dGxpbmU6IG5vbmU7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsgCiAgd2lkdGg6IDUwJTsKICB6LWluZGV4OiAxMDA7Cn0KCi5wYXJhbGxheCAucGFyYWxsYXgtdG9wLWxlZnQ6Zm9jdXMgfiAucGFyYWxsYXgtY29udGVudCwKLnBhcmFsbGF4IC5wYXJhbGxheC10b3AtbGVmdDpob3ZlciB+IC5wYXJhbGxheC1jb250ZW50IHsKICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDEwMDBweCkgcm90YXRlWCgzZGVnKSByb3RhdGVZKC0zZGVnKTsKfQoKLnBhcmFsbGF4IC5wYXJhbGxheC10b3AtbGVmdDpmb2N1cyB+IC5wYXJhbGxheC1jb250ZW50OjpiZWZvcmUsCi5wYXJhbGxheCAucGFyYWxsYXgtdG9wLWxlZnQ6aG92ZXIgfiAucGFyYWxsYXgtY29udGVudDo6YmVmb3JlIHsKICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4zNSkgMCUsIHRyYW5zcGFyZW50IDUwJSk7Cn0KCi5wYXJhbGxheCAucGFyYWxsYXgtdG9wLWxlZnQ6Zm9jdXMgfiAucGFyYWxsYXgtY29udGVudCAucGFyYWxsYXgtZnJvbnQsCi5wYXJhbGxheCAucGFyYWxsYXgtdG9wLWxlZnQ6aG92ZXIgfiAucGFyYWxsYXgtY29udGVudCAucGFyYWxsYXgtZnJvbnQgewogIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoNC41cHgsIDQuNXB4LCA1MHB4KSBzY2FsZSguOTUpOwp9CgoucGFyYWxsYXggLnBhcmFsbGF4LXRvcC1yaWdodCB7CiAgaGVpZ2h0OiA1MCU7CiAgb3V0bGluZTogbm9uZTsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgcmlnaHQ6IDA7CiAgdG9wOiAwOyAKICB3aWR0aDogNTAlOwogIHotaW5kZXg6IDEwMDsKfQoKLnBhcmFsbGF4IC5wYXJhbGxheC10b3AtcmlnaHQ6Zm9jdXMgfiAucGFyYWxsYXgtY29udGVudCwKLnBhcmFsbGF4IC5wYXJhbGxheC10b3AtcmlnaHQ6aG92ZXIgfiAucGFyYWxsYXgtY29udGVudCB7CiAgdHJhbnNmb3JtOiBwZXJzcGVjdGl2ZSgxMDAwcHgpIHJvdGF0ZVgoM2RlZykgcm90YXRlWSgzZGVnKTsKfQoKLnBhcmFsbGF4IC5wYXJhbGxheC10b3AtcmlnaHQ6Zm9jdXMgfiAucGFyYWxsYXgtY29udGVudDo6YmVmb3JlLAoucGFyYWxsYXggLnBhcmFsbGF4LXRvcC1yaWdodDpob3ZlciB+IC5wYXJhbGxheC1jb250ZW50OjpiZWZvcmUgewogIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgtMTM1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4zNSkgMCUsIHRyYW5zcGFyZW50IDUwJSk7Cn0KCi5wYXJhbGxheCAucGFyYWxsYXgtdG9wLXJpZ2h0OmZvY3VzIH4gLnBhcmFsbGF4LWNvbnRlbnQgLnBhcmFsbGF4LWZyb250LAoucGFyYWxsYXggLnBhcmFsbGF4LXRvcC1yaWdodDpob3ZlciB+IC5wYXJhbGxheC1jb250ZW50IC5wYXJhbGxheC1mcm9udCB7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtNC41cHgsIDQuNXB4LCA1MHB4KSBzY2FsZSguOTUpOwp9CgoucGFyYWxsYXggLnBhcmFsbGF4LWJvdHRvbS1sZWZ0IHsKICBib3R0b206IDA7CiAgaGVpZ2h0OiA1MCU7CiAgbGVmdDogMDsgCiAgb3V0bGluZTogbm9uZTsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgd2lkdGg6IDUwJTsKICB6LWluZGV4OiAxMDA7Cn0KCi5wYXJhbGxheCAucGFyYWxsYXgtYm90dG9tLWxlZnQ6Zm9jdXMgfiAucGFyYWxsYXgtY29udGVudCwKLnBhcmFsbGF4IC5wYXJhbGxheC1ib3R0b20tbGVmdDpob3ZlciB+IC5wYXJhbGxheC1jb250ZW50IHsKICB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKDEwMDBweCkgcm90YXRlWCgtM2RlZykgcm90YXRlWSgtM2RlZyk7Cn0KCi5wYXJhbGxheCAucGFyYWxsYXgtYm90dG9tLWxlZnQ6Zm9jdXMgfiAucGFyYWxsYXgtY29udGVudDo6YmVmb3JlLAoucGFyYWxsYXggLnBhcmFsbGF4LWJvdHRvbS1sZWZ0OmhvdmVyIH4gLnBhcmFsbGF4LWNvbnRlbnQ6OmJlZm9yZSB7CiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4zNSkgMCUsIHRyYW5zcGFyZW50IDUwJSk7Cn0KCi5wYXJhbGxheCAucGFyYWxsYXgtYm90dG9tLWxlZnQ6Zm9jdXMgfiAucGFyYWxsYXgtY29udGVudCAucGFyYWxsYXgtZnJvbnQsCi5wYXJhbGxheCAucGFyYWxsYXgtYm90dG9tLWxlZnQ6aG92ZXIgfiAucGFyYWxsYXgtY29udGVudCAucGFyYWxsYXgtZnJvbnQgewogIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoNC41cHgsIC00LjVweCwgNTBweCkgc2NhbGUoLjk1KTsKfQoKLnBhcmFsbGF4IC5wYXJhbGxheC1ib3R0b20tcmlnaHQgewogIGJvdHRvbTogMDsKICBoZWlnaHQ6IDUwJTsKICBvdXRsaW5lOiBub25lOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICByaWdodDogMDsgCiAgd2lkdGg6IDUwJTsKICB6LWluZGV4OiAxMDA7Cn0KCi5wYXJhbGxheCAucGFyYWxsYXgtYm90dG9tLXJpZ2h0OmZvY3VzIH4gLnBhcmFsbGF4LWNvbnRlbnQsCi5wYXJhbGxheCAucGFyYWxsYXgtYm90dG9tLXJpZ2h0OmhvdmVyIH4gLnBhcmFsbGF4LWNvbnRlbnQgewogIHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoMTAwMHB4KSByb3RhdGVYKC0zZGVnKSByb3RhdGVZKDNkZWcpOwp9CgoucGFyYWxsYXggLnBhcmFsbGF4LWJvdHRvbS1yaWdodDpmb2N1cyB+IC5wYXJhbGxheC1jb250ZW50OjpiZWZvcmUsCi5wYXJhbGxheCAucGFyYWxsYXgtYm90dG9tLXJpZ2h0OmhvdmVyIH4gLnBhcmFsbGF4LWNvbnRlbnQ6OmJlZm9yZSB7CiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KC00NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAuMzUpIDAlLCB0cmFuc3BhcmVudCA1MCUpOwp9CgoucGFyYWxsYXggLnBhcmFsbGF4LWJvdHRvbS1yaWdodDpmb2N1cyB+IC5wYXJhbGxheC1jb250ZW50IC5wYXJhbGxheC1mcm9udCwKLnBhcmFsbGF4IC5wYXJhbGxheC1ib3R0b20tcmlnaHQ6aG92ZXIgfiAucGFyYWxsYXgtY29udGVudCAucGFyYWxsYXgtZnJvbnQgewogIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTQuNXB4LCAtNC41cHgsIDUwcHgpIHNjYWxlKC45NSk7Cn0KCi5wcm9ncmVzcyB7CiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogIC1tb3otYXBwZWFyYW5jZTogbm9uZTsKICBhcHBlYXJhbmNlOiBub25lOwogIGJhY2tncm91bmQ6ICNlZWYwZjM7CiAgYm9yZGVyOiAwOwogIGJvcmRlci1yYWRpdXM6IC4xcmVtOwogIGNvbG9yOiAjNTc1NWQ5OwogIGhlaWdodDogLjJyZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHdpZHRoOiAxMDAlOwp9CgoucHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtYmFyIHsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICBib3JkZXItcmFkaXVzOiAuMXJlbTsKfQoKLnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVlIHsKICBiYWNrZ3JvdW5kOiAjNTc1NWQ5OwogIGJvcmRlci1yYWRpdXM6IC4xcmVtOwp9CgoucHJvZ3Jlc3M6Oi1tb3otcHJvZ3Jlc3MtYmFyIHsKICBiYWNrZ3JvdW5kOiAjNTc1NWQ5OwogIGJvcmRlci1yYWRpdXM6IC4xcmVtOwp9CgoucHJvZ3Jlc3M6aW5kZXRlcm1pbmF0ZSB7CiAgYW5pbWF0aW9uOiBwcm9ncmVzcy1pbmRldGVybWluYXRlIDEuNXMgbGluZWFyIGluZmluaXRlOwogIGJhY2tncm91bmQ6ICNlZWYwZjMgbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAjNTc1NWQ5IDMwJSwgI2VlZjBmMyAzMCUpIHRvcCBsZWZ0LzE1MCUgMTUwJSBuby1yZXBlYXQ7Cn0KCi5wcm9ncmVzczppbmRldGVybWluYXRlOjotbW96LXByb2dyZXNzLWJhciB7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCkBrZXlmcmFtZXMgcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZSB7CiAgMCUgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMjAwJSAwOwogIH0KICAxMDAlIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yMDAlIDA7CiAgfQp9Cgouc2xpZGVyIHsKICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgLW1vei1hcHBlYXJhbmNlOiBub25lOwogIGFwcGVhcmFuY2U6IG5vbmU7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgZGlzcGxheTogYmxvY2s7CiAgaGVpZ2h0OiAxLjJyZW07IAogIHdpZHRoOiAxMDAlOwp9Cgouc2xpZGVyOmZvY3VzIHsKICBib3gtc2hhZG93OiAwIDAgMCAuMXJlbSByZ2JhKDg3LCA4NSwgMjE3LCAuMik7CiAgb3V0bGluZTogbm9uZTsKfQoKLnNsaWRlci50b29sdGlwOm5vdChbZGF0YS10b29sdGlwXSk6OmFmdGVyIHsKICBjb250ZW50OiBhdHRyKHZhbHVlKTsKfQoKLnNsaWRlcjo6LXdlYmtpdC1zbGlkZXItdGh1bWIgewogIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICBiYWNrZ3JvdW5kOiAjNTc1NWQ5OwogIGJvcmRlcjogMDsKICBib3JkZXItcmFkaXVzOiA1MCU7CiAgaGVpZ2h0OiAuNnJlbTsKICBtYXJnaW4tdG9wOiAtLjI1cmVtOwogIC13ZWJraXQtdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4yczsKICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjJzOwogIHdpZHRoOiAuNnJlbTsKfQoKLnNsaWRlcjo6LW1vei1yYW5nZS10aHVtYiB7CiAgYmFja2dyb3VuZDogIzU3NTVkOTsKICBib3JkZXI6IDA7CiAgYm9yZGVyLXJhZGl1czogNTAlOwogIGhlaWdodDogLjZyZW07CiAgLW1vei10cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjJzOwogIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMnM7CiAgd2lkdGg6IC42cmVtOwp9Cgouc2xpZGVyOjotbXMtdGh1bWIgewogIGJhY2tncm91bmQ6ICM1NzU1ZDk7CiAgYm9yZGVyOiAwOwogIGJvcmRlci1yYWRpdXM6IDUwJTsKICBoZWlnaHQ6IC42cmVtOwogIC1tcy10cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjJzOwogIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMnM7CiAgd2lkdGg6IC42cmVtOwp9Cgouc2xpZGVyOmFjdGl2ZTo6LXdlYmtpdC1zbGlkZXItdGh1bWIgewogIHRyYW5zZm9ybTogc2NhbGUoMS4yNSk7Cn0KCi5zbGlkZXI6YWN0aXZlOjotbW96LXJhbmdlLXRodW1iIHsKICB0cmFuc2Zvcm06IHNjYWxlKDEuMjUpOwp9Cgouc2xpZGVyOmFjdGl2ZTo6LW1zLXRodW1iIHsKICB0cmFuc2Zvcm06IHNjYWxlKDEuMjUpOwp9Cgouc2xpZGVyOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYiwKLnNsaWRlci5kaXNhYmxlZDo6LXdlYmtpdC1zbGlkZXItdGh1bWIgewogIGJhY2tncm91bmQ6ICNmN2Y4Zjk7CiAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKfQoKLnNsaWRlcjpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYiwKLnNsaWRlci5kaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYiB7CiAgYmFja2dyb3VuZDogI2Y3ZjhmOTsKICB0cmFuc2Zvcm06IHNjYWxlKDEpOwp9Cgouc2xpZGVyOmRpc2FibGVkOjotbXMtdGh1bWIsCi5zbGlkZXIuZGlzYWJsZWQ6Oi1tcy10aHVtYiB7CiAgYmFja2dyb3VuZDogI2Y3ZjhmOTsKICB0cmFuc2Zvcm06IHNjYWxlKDEpOwp9Cgouc2xpZGVyOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFjayB7CiAgYmFja2dyb3VuZDogI2VlZjBmMzsKICBib3JkZXItcmFkaXVzOiAuMXJlbTsKICBoZWlnaHQ6IC4xcmVtOwogIHdpZHRoOiAxMDAlOwp9Cgouc2xpZGVyOjotbW96LXJhbmdlLXRyYWNrIHsKICBiYWNrZ3JvdW5kOiAjZWVmMGYzOwogIGJvcmRlci1yYWRpdXM6IC4xcmVtOwogIGhlaWdodDogLjFyZW07CiAgd2lkdGg6IDEwMCU7Cn0KCi5zbGlkZXI6Oi1tcy10cmFjayB7CiAgYmFja2dyb3VuZDogI2VlZjBmMzsKICBib3JkZXItcmFkaXVzOiAuMXJlbTsKICBoZWlnaHQ6IC4xcmVtOwogIHdpZHRoOiAxMDAlOwp9Cgouc2xpZGVyOjotbXMtZmlsbC1sb3dlciB7CiAgYmFja2dyb3VuZDogIzU3NTVkOTsKfQoKLnRpbWVsaW5lIC50aW1lbGluZS1pdGVtIHsKICBkaXNwbGF5OiAtbXMtZmxleGJveDsKICBkaXNwbGF5OiBmbGV4OwogIG1hcmdpbi1ib3R0b206IDEuMnJlbTsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi50aW1lbGluZSAudGltZWxpbmUtaXRlbTo6YmVmb3JlIHsKICBiYWNrZ3JvdW5kOiAjZGFkZWU0OwogIGNvbnRlbnQ6ICIiOwogIGhlaWdodDogMTAwJTsKICBsZWZ0OiAxMXB4OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDEuMnJlbTsKICB3aWR0aDogMnB4Owp9CgoudGltZWxpbmUgLnRpbWVsaW5lLWl0ZW0gLnRpbWVsaW5lLWxlZnQgewogIC1tcy1mbGV4OiAwIDAgYXV0bzsKICBmbGV4OiAwIDAgYXV0bzsKfQoKLnRpbWVsaW5lIC50aW1lbGluZS1pdGVtIC50aW1lbGluZS1jb250ZW50IHsKICAtbXMtZmxleDogMSAxIGF1dG87CiAgZmxleDogMSAxIGF1dG87CiAgcGFkZGluZzogMnB4IDAgMnB4IC44cmVtOwp9CgoudGltZWxpbmUgLnRpbWVsaW5lLWl0ZW0gLnRpbWVsaW5lLWljb24gewogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgYm9yZGVyLXJhZGl1czogNTAlOwogIGNvbG9yOiAjZmZmOwogIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogIGRpc3BsYXk6IGZsZXg7CiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjsKICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgaGVpZ2h0OiAxLjJyZW07CiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIHdpZHRoOiAxLjJyZW07Cn0KCi50aW1lbGluZSAudGltZWxpbmUtaXRlbSAudGltZWxpbmUtaWNvbjo6YmVmb3JlIHsKICBib3JkZXI6IC4xcmVtIHNvbGlkICM1NzU1ZDk7CiAgYm9yZGVyLXJhZGl1czogNTAlOwogIGNvbnRlbnQ6ICIiOwogIGRpc3BsYXk6IGJsb2NrOwogIGhlaWdodDogLjRyZW07CiAgbGVmdDogLjRyZW07CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogLjRyZW07CiAgd2lkdGg6IC40cmVtOwp9CgoudGltZWxpbmUgLnRpbWVsaW5lLWl0ZW0gLnRpbWVsaW5lLWljb24uaWNvbi1sZyB7CiAgYmFja2dyb3VuZDogIzU3NTVkOTsKICBsaW5lLWhlaWdodDogMS4ycmVtOwp9CgoudGltZWxpbmUgLnRpbWVsaW5lLWl0ZW0gLnRpbWVsaW5lLWljb24uaWNvbi1sZzo6YmVmb3JlIHsKICBjb250ZW50OiBub25lOwp9Cgoudmlld2VyLTM2MCB7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICBkaXNwbGF5OiAtbXMtZmxleGJveDsKICBkaXNwbGF5OiBmbGV4OwogIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKfQoKLnZpZXdlci0zNjAgLnZpZXdlci1zbGlkZXJbbWF4PSIzNiJdW3ZhbHVlPSIxIl0gKyAudmlld2VyLWltYWdlIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IDA7Cn0KCi52aWV3ZXItMzYwIC52aWV3ZXItc2xpZGVyW21heD0iMzYiXVt2YWx1ZT0iMiJdICsgLnZpZXdlci1pbWFnZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAyLjg1NzE0Mjg1NzElOwp9Cgoudmlld2VyLTM2MCAudmlld2VyLXNsaWRlclttYXg9IjM2Il1bdmFsdWU9IjMiXSArIC52aWV3ZXItaW1hZ2UgewogIGJhY2tncm91bmQtcG9zaXRpb24teTogNS43MTQyODU3MTQzJTsKfQoKLnZpZXdlci0zNjAgLnZpZXdlci1zbGlkZXJbbWF4PSIzNiJdW3ZhbHVlPSI0Il0gKyAudmlld2VyLWltYWdlIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IDguNTcxNDI4NTcxNCU7Cn0KCi52aWV3ZXItMzYwIC52aWV3ZXItc2xpZGVyW21heD0iMzYiXVt2YWx1ZT0iNSJdICsgLnZpZXdlci1pbWFnZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAxMS40Mjg1NzE0Mjg2JTsKfQoKLnZpZXdlci0zNjAgLnZpZXdlci1zbGlkZXJbbWF4PSIzNiJdW3ZhbHVlPSI2Il0gKyAudmlld2VyLWltYWdlIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IDE0LjI4NTcxNDI4NTclOwp9Cgoudmlld2VyLTM2MCAudmlld2VyLXNsaWRlclttYXg9IjM2Il1bdmFsdWU9IjciXSArIC52aWV3ZXItaW1hZ2UgewogIGJhY2tncm91bmQtcG9zaXRpb24teTogMTcuMTQyODU3MTQyOSU7Cn0KCi52aWV3ZXItMzYwIC52aWV3ZXItc2xpZGVyW21heD0iMzYiXVt2YWx1ZT0iOCJdICsgLnZpZXdlci1pbWFnZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAyMCU7Cn0KCi52aWV3ZXItMzYwIC52aWV3ZXItc2xpZGVyW21heD0iMzYiXVt2YWx1ZT0iOSJdICsgLnZpZXdlci1pbWFnZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAyMi44NTcxNDI4NTcxJTsKfQoKLnZpZXdlci0zNjAgLnZpZXdlci1zbGlkZXJbbWF4PSIzNiJdW3ZhbHVlPSIxMCJdICsgLnZpZXdlci1pbWFnZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAyNS43MTQyODU3MTQzJTsKfQoKLnZpZXdlci0zNjAgLnZpZXdlci1zbGlkZXJbbWF4PSIzNiJdW3ZhbHVlPSIxMSJdICsgLnZpZXdlci1pbWFnZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAyOC41NzE0Mjg1NzE0JTsKfQoKLnZpZXdlci0zNjAgLnZpZXdlci1zbGlkZXJbbWF4PSIzNiJdW3ZhbHVlPSIxMiJdICsgLnZpZXdlci1pbWFnZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAzMS40Mjg1NzE0Mjg2JTsKfQoKLnZpZXdlci0zNjAgLnZpZXdlci1zbGlkZXJbbWF4PSIzNiJdW3ZhbHVlPSIxMyJdICsgLnZpZXdlci1pbWFnZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAzNC4yODU3MTQyODU3JTsKfQoKLnZpZXdlci0zNjAgLnZpZXdlci1zbGlkZXJbbWF4PSIzNiJdW3ZhbHVlPSIxNCJdICsgLnZpZXdlci1pbWFnZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAzNy4xNDI4NTcxNDI5JTsKfQoKLnZpZXdlci0zNjAgLnZpZXdlci1zbGlkZXJbbWF4PSIzNiJdW3ZhbHVlPSIxNSJdICsgLnZpZXdlci1pbWFnZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiA0MCU7Cn0KCi52aWV3ZXItMzYwIC52aWV3ZXItc2xpZGVyW21heD0iMzYiXVt2YWx1ZT0iMTYiXSArIC52aWV3ZXItaW1hZ2UgewogIGJhY2tncm91bmQtcG9zaXRpb24teTogNDIuODU3MTQyODU3MSU7Cn0KCi52aWV3ZXItMzYwIC52aWV3ZXItc2xpZGVyW21heD0iMzYiXVt2YWx1ZT0iMTciXSArIC52aWV3ZXItaW1hZ2UgewogIGJhY2tncm91bmQtcG9zaXRpb24teTogNDUuNzE0Mjg1NzE0MyU7Cn0KCi52aWV3ZXItMzYwIC52aWV3ZXItc2xpZGVyW21heD0iMzYiXVt2YWx1ZT0iMTgiXSArIC52aWV3ZXItaW1hZ2UgewogIGJhY2tncm91bmQtcG9zaXRpb24teTogNDguNTcxNDI4NTcxNCU7Cn0KCi52aWV3ZXItMzYwIC52aWV3ZXItc2xpZGVyW21heD0iMzYiXVt2YWx1ZT0iMTkiXSArIC52aWV3ZXItaW1hZ2UgewogIGJhY2tncm91bmQtcG9zaXRpb24teTogNTEuNDI4NTcxNDI4NiU7Cn0KCi52aWV3ZXItMzYwIC52aWV3ZXItc2xpZGVyW21heD0iMzYiXVt2YWx1ZT0iMjAiXSArIC52aWV3ZXItaW1hZ2UgewogIGJhY2tncm91bmQtcG9zaXRpb24teTogNTQuMjg1NzE0Mjg1NyU7Cn0KCi52aWV3ZXItMzYwIC52aWV3ZXItc2xpZGVyW21heD0iMzYiXVt2YWx1ZT0iMjEiXSArIC52aWV3ZXItaW1hZ2UgewogIGJhY2tncm91bmQtcG9zaXRpb24teTogNTcuMTQyODU3MTQyOSU7Cn0KCi52aWV3ZXItMzYwIC52aWV3ZXItc2xpZGVyW21heD0iMzYiXVt2YWx1ZT0iMjIiXSArIC52aWV3ZXItaW1hZ2UgewogIGJhY2tncm91bmQtcG9zaXRpb24teTogNjAlOwp9Cgoudmlld2VyLTM2MCAudmlld2VyLXNsaWRlclttYXg9IjM2Il1bdmFsdWU9IjIzIl0gKyAudmlld2VyLWltYWdlIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IDYyLjg1NzE0Mjg1NzElOwp9Cgoudmlld2VyLTM2MCAudmlld2VyLXNsaWRlclttYXg9IjM2Il1bdmFsdWU9IjI0Il0gKyAudmlld2VyLWltYWdlIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IDY1LjcxNDI4NTcxNDMlOwp9Cgoudmlld2VyLTM2MCAudmlld2VyLXNsaWRlclttYXg9IjM2Il1bdmFsdWU9IjI1Il0gKyAudmlld2VyLWltYWdlIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IDY4LjU3MTQyODU3MTQlOwp9Cgoudmlld2VyLTM2MCAudmlld2VyLXNsaWRlclttYXg9IjM2Il1bdmFsdWU9IjI2Il0gKyAudmlld2VyLWltYWdlIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IDcxLjQyODU3MTQyODYlOwp9Cgoudmlld2VyLTM2MCAudmlld2VyLXNsaWRlclttYXg9IjM2Il1bdmFsdWU9IjI3Il0gKyAudmlld2VyLWltYWdlIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IDc0LjI4NTcxNDI4NTclOwp9Cgoudmlld2VyLTM2MCAudmlld2VyLXNsaWRlclttYXg9IjM2Il1bdmFsdWU9IjI4Il0gKyAudmlld2VyLWltYWdlIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IDc3LjE0Mjg1NzE0MjklOwp9Cgoudmlld2VyLTM2MCAudmlld2VyLXNsaWRlclttYXg9IjM2Il1bdmFsdWU9IjI5Il0gKyAudmlld2VyLWltYWdlIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6IDgwJTsKfQoKLnZpZXdlci0zNjAgLnZpZXdlci1zbGlkZXJbbWF4PSIzNiJdW3ZhbHVlPSIzMCJdICsgLnZpZXdlci1pbWFnZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiA4Mi44NTcxNDI4NTcxJTsKfQoKLnZpZXdlci0zNjAgLnZpZXdlci1zbGlkZXJbbWF4PSIzNiJdW3ZhbHVlPSIzMSJdICsgLnZpZXdlci1pbWFnZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiA4NS43MTQyODU3MTQzJTsKfQoKLnZpZXdlci0zNjAgLnZpZXdlci1zbGlkZXJbbWF4PSIzNiJdW3ZhbHVlPSIzMiJdICsgLnZpZXdlci1pbWFnZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiA4OC41NzE0Mjg1NzE0JTsKfQoKLnZpZXdlci0zNjAgLnZpZXdlci1zbGlkZXJbbWF4PSIzNiJdW3ZhbHVlPSIzMyJdICsgLnZpZXdlci1pbWFnZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiA5MS40Mjg1NzE0Mjg2JTsKfQoKLnZpZXdlci0zNjAgLnZpZXdlci1zbGlkZXJbbWF4PSIzNiJdW3ZhbHVlPSIzNCJdICsgLnZpZXdlci1pbWFnZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiA5NC4yODU3MTQyODU3JTsKfQoKLnZpZXdlci0zNjAgLnZpZXdlci1zbGlkZXJbbWF4PSIzNiJdW3ZhbHVlPSIzNSJdICsgLnZpZXdlci1pbWFnZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiA5Ny4xNDI4NTcxNDI5JTsKfQoKLnZpZXdlci0zNjAgLnZpZXdlci1zbGlkZXJbbWF4PSIzNiJdW3ZhbHVlPSIzNiJdICsgLnZpZXdlci1pbWFnZSB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbi15OiAxMDAlOwp9Cgoudmlld2VyLTM2MCAudmlld2VyLXNsaWRlciB7CiAgY3Vyc29yOiBldy1yZXNpemU7CiAgLW1zLWZsZXgtb3JkZXI6IDI7CiAgbWFyZ2luOiAxcmVtOwogIG9yZGVyOiAyOwogIHdpZHRoOiA2MCU7Cn0KCi52aWV3ZXItMzYwIC52aWV3ZXItaW1hZ2UgewogIGJhY2tncm91bmQtcG9zaXRpb24teTogMDsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGJhY2tncm91bmQtc2l6ZTogMTAwJTsKICAtbXMtZmxleC1vcmRlcjogMTsKICBtYXgtd2lkdGg6IDEwMCU7CiAgb3JkZXI6IDE7Cn0=]]></data>
	</file>
	<file>
	  <filename>/css/backslash/bs/lib/bs-icons.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGJhc2VkIG9uICBJY29ucy5jc3MgdjAuMS4wIHwgTUlUIExpY2Vuc2UgfCBnaXRodWIuY29tL3BpY3R1cmVwYW4yL2ljb25zLmNzcyAqLwouXFwtaWNvbiB7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiBpbmhlcml0OwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBoZWlnaHQ6IDFlbTsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdGV4dC1pbmRlbnQ6IC05OTk5cHg7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICB3aWR0aDogMWVtOwp9CgouXFwtaWNvbjo6YmVmb3JlLAouXFwtaWNvbjo6YWZ0ZXIgewogIGNvbnRlbnQ6ICIiOwogIGRpc3BsYXk6IGJsb2NrOwogIGxlZnQ6IDUwJTsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiA1MCU7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7Cn0KCi5cXC1pY29uLlxcLWljb24tMnggewogIGZvbnQtc2l6ZTogMzJweDsKfQoKLlxcLWljb24uXFwtaWNvbi0zeCB7CiAgZm9udC1zaXplOiA0OHB4Owp9CgouXFwtaWNvbi5cXC1pY29uLTR4IHsKICBmb250LXNpemU6IDY0cHg7Cn0KCi5cXC1pY29uLWFwcHM6OmJlZm9yZSB7CiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yOwogIGJveC1zaGFkb3c6IC0uMzVlbSAtLjM1ZW0sIC0uMzVlbSAwLCAtLjM1ZW0gLjM1ZW0sIDAgLS4zNWVtLCAwIC4zNWVtLCAuMzVlbSAtLjM1ZW0sIC4zNWVtIDAsIC4zNWVtIC4zNWVtOwogIGhlaWdodDogLjE1ZW07CiAgd2lkdGg6IC4xNWVtOwp9CgouXFwtaWNvbi1hcnJvdy1kb3duOjpiZWZvcmUsCi5cXC1pY29uLWFycm93LWxlZnQ6OmJlZm9yZSwKLlxcLWljb24tYXJyb3ctcmlnaHQ6OmJlZm9yZSwKLlxcLWljb24tYXJyb3ctdXA6OmJlZm9yZSwKLlxcLWljb24tZG93bndhcmQ6OmJlZm9yZSwKLlxcLWljb24tYmFjazo6YmVmb3JlLAouXFwtaWNvbi1mb3J3YXJkOjpiZWZvcmUsCi5cXC1pY29uLXVwd2FyZDo6YmVmb3JlIHsKICBib3JkZXI6IC4xcmVtIHNvbGlkIGN1cnJlbnRDb2xvcjsKICBib3JkZXItYm90dG9tOiAwOwogIGJvcmRlci1yaWdodDogMDsKICBoZWlnaHQ6IC42NWVtOwogIHdpZHRoOiAuNjVlbTsKfQoKLlxcLWljb24tYXJyb3ctZG93bjo6YmVmb3JlIHsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNzUlKSByb3RhdGUoMjI1ZGVnKTsKfQoKLlxcLWljb24tYXJyb3ctbGVmdDo6YmVmb3JlIHsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMjUlLCAtNTAlKSByb3RhdGUoLTQ1ZGVnKTsKfQoKLlxcLWljb24tYXJyb3ctcmlnaHQ6OmJlZm9yZSB7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTc1JSwgLTUwJSkgcm90YXRlKDEzNWRlZyk7Cn0KCi5cXC1pY29uLWFycm93LXVwOjpiZWZvcmUgewogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC0yNSUpIHJvdGF0ZSg0NWRlZyk7Cn0KCi5cXC1pY29uLWJhY2s6OmFmdGVyLAouXFwtaWNvbi1mb3J3YXJkOjphZnRlciB7CiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yOwogIGhlaWdodDogLjFyZW07CiAgd2lkdGg6IC44ZW07Cn0KCi5cXC1pY29uLWRvd253YXJkOjphZnRlciwKLlxcLWljb24tdXB3YXJkOjphZnRlciB7CiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yOwogIGhlaWdodDogLjhlbTsKICB3aWR0aDogLjFyZW07Cn0KCi5cXC1pY29uLWJhY2s6OmFmdGVyIHsKICBsZWZ0OiA1NSU7Cn0KCi5cXC1pY29uLWJhY2s6OmJlZm9yZSB7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgcm90YXRlKC00NWRlZyk7Cn0KCi5cXC1pY29uLWRvd253YXJkOjphZnRlciB7CiAgdG9wOiA0NSU7Cn0KCi5cXC1pY29uLWRvd253YXJkOjpiZWZvcmUgewogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHJvdGF0ZSgtMTM1ZGVnKTsKfQoKLlxcLWljb24tZm9yd2FyZDo6YWZ0ZXIgewogIGxlZnQ6IDQ1JTsKfQoKLlxcLWljb24tZm9yd2FyZDo6YmVmb3JlIHsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoMTM1ZGVnKTsKfQoKLlxcLWljb24tdXB3YXJkOjphZnRlciB7CiAgdG9wOiA1NSU7Cn0KCi5cXC1pY29uLXVwd2FyZDo6YmVmb3JlIHsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoNDVkZWcpOwp9CgouXFwtaWNvbi1jYXJldDo6YmVmb3JlIHsKICBib3JkZXItbGVmdDogLjNlbSBzb2xpZCB0cmFuc3BhcmVudDsKICBib3JkZXItcmlnaHQ6IC4zZW0gc29saWQgdHJhbnNwYXJlbnQ7CiAgYm9yZGVyLXRvcDogLjNlbSBzb2xpZCBjdXJyZW50Q29sb3I7CiAgaGVpZ2h0OiAwOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC0yNSUpOwogIHdpZHRoOiAwOwp9CgouXFwtaWNvbi1tZW51OjpiZWZvcmUgewogIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICBib3gtc2hhZG93OiAwIC0uMzVlbSwgMCAuMzVlbTsKICBoZWlnaHQ6IC4xcmVtOwogIHdpZHRoOiAxMDAlOwp9CgouXFwtaWNvbi1tb3JlLWhvcml6OjpiZWZvcmUsCi5cXC1pY29uLW1vcmUtdmVydDo6YmVmb3JlIHsKICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7CiAgYm9yZGVyLXJhZGl1czogNTAlOwogIGJveC1zaGFkb3c6IC0uNGVtIDAsIC40ZW0gMDsKICBoZWlnaHQ6IC4yZW07CiAgd2lkdGg6IC4yZW07Cn0KCi5cXC1pY29uLW1vcmUtdmVydDo6YmVmb3JlIHsKICBib3gtc2hhZG93OiAwIC0uNGVtLCAwIC40ZW07Cn0KCi5cXC1pY29uLWJvb2ttYXJrOjpiZWZvcmUgewogIGJvcmRlcjogLjFyZW0gc29saWQgY3VycmVudENvbG9yOwogIGJvcmRlci1ib3R0b206IDA7CiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogLjFyZW07CiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IC4xcmVtOwogIGhlaWdodDogLjllbTsKICB3aWR0aDogLjg1ZW07Cn0KCi5cXC1pY29uLWJvb2ttYXJrOjphZnRlciB7CiAgYm9yZGVyOiAuMXJlbSBzb2xpZCBjdXJyZW50Q29sb3I7CiAgYm9yZGVyLWJvdHRvbTogMDsKICBib3JkZXItbGVmdDogMDsKICBib3JkZXItcmFkaXVzOiAuMXJlbTsKICBoZWlnaHQ6IC41ZW07CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLjJlbSkgcm90YXRlKC00NWRlZykgc2tldygxNWRlZywgMTVkZWcpOwogIHdpZHRoOiAuNWVtOwp9CgouXFwtaWNvbi1jaGVjazo6YmVmb3JlIHsKICBib3JkZXI6IC4xcmVtIHNvbGlkIGN1cnJlbnRDb2xvcjsKICBib3JkZXItcmlnaHQ6IDA7CiAgYm9yZGVyLXRvcDogMDsKICBoZWlnaHQ6IC41ZW07CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLS4zNzVlbSkgcm90YXRlKC00NWRlZyk7CiAgd2lkdGg6IC45ZW07Cn0KCi5cXC1pY29uLWNsb3NlOjpiZWZvcmUgewogIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICBoZWlnaHQ6IC4xcmVtOwogIHdpZHRoOiAxMDAlOwp9CgouXFwtaWNvbi1jbG9zZTo6YWZ0ZXIgewogIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICBoZWlnaHQ6IDEwMCU7CiAgd2lkdGg6IC4xcmVtOwp9CgouXFwtaWNvbi1jbG9zZTo6YmVmb3JlLAouXFwtaWNvbi1jbG9zZTo6YWZ0ZXIgewogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHJvdGF0ZSg0NWRlZyk7Cn0KCi5cXC1pY29uLWNvcHk6OmJlZm9yZSB7CiAgYm9yZGVyOiAuMXJlbSBzb2xpZCBjdXJyZW50Q29sb3I7CiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgYm9yZGVyLXJhZGl1czogLjFlbTsKICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogIGhlaWdodDogLjhlbTsKICBsZWZ0OiA0MCU7CiAgdG9wOiA0MCU7CiAgd2lkdGg6IC43ZW07Cn0KCi5cXC1pY29uLWNvcHk6OmFmdGVyIHsKICBib3JkZXI6IC4xcmVtIHNvbGlkIGN1cnJlbnRDb2xvcjsKICBib3JkZXItcmFkaXVzOiAuMWVtOwogIGhlaWdodDogLjhlbTsKICBsZWZ0OiA2MCU7CiAgdG9wOiA2MCU7CiAgd2lkdGg6IC43ZW07Cn0KCi5cXC1pY29uLWRlbGV0ZTo6YmVmb3JlIHsKICBib3JkZXI6IC4xcmVtIHNvbGlkIGN1cnJlbnRDb2xvcjsKICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAuMXJlbTsKICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogLjFyZW07CiAgYm9yZGVyLXRvcDogMDsKICBoZWlnaHQ6IC42ZW07CiAgdG9wOiA3MCU7CiAgd2lkdGg6IC43NWVtOwp9CgouXFwtaWNvbi1kZWxldGU6OmFmdGVyIHsKICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7CiAgYm94LXNoYWRvdzogLS4yZW0gLjJlbSwgLjJlbSAuMmVtOwogIGhlaWdodDogLjFyZW07CiAgdG9wOiAuMDVyZW07CiAgd2lkdGg6IC41ZW07Cn0KCi5cXC1pY29uLWRvd25sb2FkIHsKICBib3JkZXItYm90dG9tOiAuMXJlbSBzb2xpZCBjdXJyZW50Q29sb3I7Cn0KCi5cXC1pY29uLWRvd25sb2FkOjpiZWZvcmUgewogIGJvcmRlcjogLjFyZW0gc29saWQgY3VycmVudENvbG9yOwogIGJvcmRlci1ib3R0b206IDA7CiAgYm9yZGVyLXJpZ2h0OiAwOwogIGhlaWdodDogLjVlbTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtLjNlbSkgcm90YXRlKC0xMzVkZWcpOwogIHdpZHRoOiAuNWVtOwp9CgouXFwtaWNvbi1kb3dubG9hZDo6YWZ0ZXIgewogIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICBoZWlnaHQ6IC42ZW07CiAgdG9wOiA0MCU7CiAgd2lkdGg6IC4xcmVtOwp9CgouXFwtaWNvbi1lZGl0OjpiZWZvcmUgewogIGJvcmRlcjogLjFyZW0gc29saWQgY3VycmVudENvbG9yOwogIGhlaWdodDogLjRlbTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtLjM1ZW0sIC0uMjVlbSkgcm90YXRlKC00NWRlZyk7CiAgd2lkdGg6IC44NWVtOwp9CgouXFwtaWNvbi1lZGl0OjphZnRlciB7CiAgYm9yZGVyOiAuMTVlbSBzb2xpZCBjdXJyZW50Q29sb3I7CiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICBib3JkZXItdG9wLWNvbG9yOiB0cmFuc3BhcmVudDsKICBoZWlnaHQ6IDA7CiAgbGVmdDogNSU7CiAgdG9wOiA5NSU7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTEwMCUpOwogIHdpZHRoOiAwOwp9CgouXFwtaWNvbi1mbGFnOjpiZWZvcmUgewogIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICBoZWlnaHQ6IDFlbTsKICBsZWZ0OiAxMCU7CiAgd2lkdGg6IC4xcmVtOwp9CgouXFwtaWNvbi1mbGFnOjphZnRlciB7CiAgYm9yZGVyOiAuMXJlbSBzb2xpZCBjdXJyZW50Q29sb3I7CiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IC4xZW07CiAgYm9yZGVyLWxlZnQ6IDA7CiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IC4xZW07CiAgaGVpZ2h0OiAuN2VtOwogIGxlZnQ6IDUyJTsKICB0b3A6IDM1JTsKICB3aWR0aDogLjg1ZW07Cn0KCi5cXC1pY29uLW1pbnVzOjpiZWZvcmUgewogIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICBoZWlnaHQ6IC4xcmVtOwogIHdpZHRoOiAxMDAlOwp9CgouXFwtaWNvbi1wbHVzOjpiZWZvcmUgewogIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICBoZWlnaHQ6IC4xcmVtOwogIHdpZHRoOiAxMDAlOwp9CgouXFwtaWNvbi1wbHVzOjphZnRlciB7CiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yOwogIGhlaWdodDogMTAwJTsKICB3aWR0aDogLjFyZW07Cn0KCi5cXC1pY29uLXJlZnJlc2g6OmJlZm9yZSB7CiAgYm9yZGVyOiAuMXJlbSBzb2xpZCBjdXJyZW50Q29sb3I7CiAgYm9yZGVyLXJhZGl1czogNTAlOwogIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgaGVpZ2h0OiAxZW07CiAgd2lkdGg6IDFlbTsKfQoKLlxcLWljb24tcmVmcmVzaDo6YWZ0ZXIgewogIGJvcmRlcjogLjJlbSBzb2xpZCBjdXJyZW50Q29sb3I7CiAgYm9yZGVyLWxlZnQtY29sb3I6IHRyYW5zcGFyZW50OwogIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50OwogIGhlaWdodDogMDsKICBsZWZ0OiA4MCU7CiAgdG9wOiAyMCU7CiAgd2lkdGg6IDA7Cn0KCi5cXC1pY29uLXJlc2l6ZS1ob3Jpejo6YmVmb3JlLAouXFwtaWNvbi1yZXNpemUtaG9yaXo6OmFmdGVyLAouXFwtaWNvbi1yZXNpemUtdmVydDo6YmVmb3JlLAouXFwtaWNvbi1yZXNpemUtdmVydDo6YWZ0ZXIgewogIGJvcmRlcjogLjFyZW0gc29saWQgY3VycmVudENvbG9yOwogIGJvcmRlci1ib3R0b206IDA7CiAgYm9yZGVyLXJpZ2h0OiAwOwogIGhlaWdodDogLjRlbTsKICB3aWR0aDogLjRlbTsKfQoKLlxcLWljb24tcmVzaXplLWhvcml6OjpiZWZvcmUsCi5cXC1pY29uLXJlc2l6ZS12ZXJ0OjpiZWZvcmUgewogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC05MCUpIHJvdGF0ZSg0NWRlZyk7Cn0KCi5cXC1pY29uLXJlc2l6ZS1ob3Jpejo6YWZ0ZXIsCi5cXC1pY29uLXJlc2l6ZS12ZXJ0OjphZnRlciB7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTEwJSkgcm90YXRlKDIyNWRlZyk7Cn0KCi5cXC1pY29uLXJlc2l6ZS1ob3Jpejo6YmVmb3JlIHsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtOTAlLCAtNTAlKSByb3RhdGUoLTQ1ZGVnKTsKfQoKLlxcLWljb24tcmVzaXplLWhvcml6OjphZnRlciB7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTEwJSwgLTUwJSkgcm90YXRlKDEzNWRlZyk7Cn0KCi5cXC1pY29uLXNlYXJjaDo6YmVmb3JlIHsKICBib3JkZXI6IC4xcmVtIHNvbGlkIGN1cnJlbnRDb2xvcjsKICBib3JkZXItcmFkaXVzOiA1MCU7CiAgaGVpZ2h0OiAuNzVlbTsKICBsZWZ0OiA1JTsKICB0b3A6IDUlOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApIHJvdGF0ZSg0NWRlZyk7CiAgd2lkdGg6IC43NWVtOwp9CgouXFwtaWNvbi1zZWFyY2g6OmFmdGVyIHsKICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7CiAgaGVpZ2h0OiAuMXJlbTsKICBsZWZ0OiA4MCU7CiAgdG9wOiA4MCU7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgcm90YXRlKDQ1ZGVnKTsKICB3aWR0aDogLjRlbTsKfQoKLlxcLWljb24tc2hhcmUgewogIGJvcmRlcjogLjFyZW0gc29saWQgY3VycmVudENvbG9yOwogIGJvcmRlci1yYWRpdXM6IC4xcmVtOwogIGJvcmRlci1yaWdodDogMDsKICBib3JkZXItdG9wOiAwOwp9CgouXFwtaWNvbi1zaGFyZTo6YmVmb3JlIHsKICBib3JkZXI6IC4xcmVtIHNvbGlkIGN1cnJlbnRDb2xvcjsKICBib3JkZXItbGVmdDogMDsKICBib3JkZXItdG9wOiAwOwogIGhlaWdodDogLjRlbTsKICBsZWZ0OiAxMDAlOwogIHRvcDogLjI1ZW07CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTEyNSUsIC01MCUpIHJvdGF0ZSgtNDVkZWcpOwogIHdpZHRoOiAuNGVtOwp9CgouXFwtaWNvbi1zaGFyZTo6YWZ0ZXIgewogIGJvcmRlcjogLjFyZW0gc29saWQgY3VycmVudENvbG9yOwogIGJvcmRlci1ib3R0b206IDA7CiAgYm9yZGVyLXJhZGl1czogNzUlIDE1JTsKICBib3JkZXItcmlnaHQ6IDA7CiAgaGVpZ2h0OiAuNmVtOwogIHRvcDogNTUlOwogIHdpZHRoOiAuNmVtOwp9CgouXFwtaWNvbi1zaHV0ZG93biB7CiAgYm9yZGVyOiAuMXJlbSBzb2xpZCBjdXJyZW50Q29sb3I7CiAgYm9yZGVyLXJhZGl1czogNTAlOwogIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50Owp9CgouXFwtaWNvbi1zaHV0ZG93bjo6YmVmb3JlIHsKICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7CiAgY29udGVudDogIiI7CiAgaGVpZ2h0OiAuNWVtOwogIHRvcDogLjFlbTsKICB3aWR0aDogLjFyZW07Cn0KCi5cXC1pY29uLXN0b3AgewogIGJvcmRlcjogLjFyZW0gc29saWQgY3VycmVudENvbG9yOwogIGJvcmRlci1yYWRpdXM6IDUwJTsKfQoKLlxcLWljb24tc3RvcDo6YmVmb3JlIHsKICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7CiAgaGVpZ2h0OiAuMXJlbTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoNDVkZWcpOwogIHdpZHRoOiAxZW07Cn0KCi5cXC1pY29uLXVwbG9hZCB7CiAgYm9yZGVyLWJvdHRvbTogLjFyZW0gc29saWQgY3VycmVudENvbG9yOwp9CgouXFwtaWNvbi11cGxvYWQ6OmJlZm9yZSB7CiAgYm9yZGVyOiAuMXJlbSBzb2xpZCBjdXJyZW50Q29sb3I7CiAgYm9yZGVyLWJvdHRvbTogMDsKICBib3JkZXItcmlnaHQ6IDA7CiAgaGVpZ2h0OiAuNWVtOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC02MCUpIHJvdGF0ZSg0NWRlZyk7CiAgd2lkdGg6IC41ZW07Cn0KCi5cXC1pY29uLXVwbG9hZDo6YWZ0ZXIgewogIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICBoZWlnaHQ6IC42ZW07CiAgdG9wOiA1MCU7CiAgd2lkdGg6IC4xcmVtOwp9CgouXFwtaWNvbi1hdWRpbyB7CiAgYm9yZGVyOiAuMXJlbSBzb2xpZCBjdXJyZW50Q29sb3I7CiAgYm9yZGVyLXJhZGl1czogLjRlbTsKICBoZWlnaHQ6IC42ZW07CiAgbWFyZ2luOiAtLjRlbSAuM2VtIDAgLjNlbTsKICB3aWR0aDogLjRlbTsKfQoKLlxcLWljb24tYXVkaW86OmJlZm9yZSB7CiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yOwogIGhlaWdodDogLjE1ZW07CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLjQ1ZW0pOwogIHdpZHRoOiAuMXJlbTsKfQoKLlxcLWljb24tYXVkaW86OmFmdGVyIHsKICBib3JkZXI6IC4xcmVtIHNvbGlkIGN1cnJlbnRDb2xvcjsKICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDsKICBib3JkZXItcmFkaXVzOiA1MCU7CiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICBoZWlnaHQ6IC43ZW07CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTM1JSkgcm90YXRlKC0xMzVkZWcpOwogIHdpZHRoOiAuN2VtOwp9CgouXFwtaWNvbi1lbW9qaSB7CiAgYm9yZGVyOiAuMXJlbSBzb2xpZCBjdXJyZW50Q29sb3I7CiAgYm9yZGVyLXJhZGl1czogNTAlOwp9CgouXFwtaWNvbi1lbW9qaTo6YmVmb3JlIHsKICBib3JkZXItcmFkaXVzOiA1MCU7CiAgYm94LXNoYWRvdzogLS4xN2VtIC0uMTVlbSwgLjE3ZW0gLS4xNWVtOwogIGhlaWdodDogLjE1cmVtOwogIHdpZHRoOiAuMTVyZW07Cn0KCi5cXC1pY29uLWVtb2ppOjphZnRlciB7CiAgYm9yZGVyOiAuMXJlbSBzb2xpZCBjdXJyZW50Q29sb3I7CiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgYm9yZGVyLXJhZGl1czogNTAlOwogIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgaGVpZ2h0OiAuNWVtOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC0uMmVtKSByb3RhdGUoLTEzNWRlZyk7CiAgd2lkdGg6IC41ZW07Cn0KCi5cXC1pY29uLWxpbms6OmJlZm9yZSwKLlxcLWljb24tbGluazo6YWZ0ZXIgewogIGJvcmRlcjogLjFyZW0gc29saWQgY3VycmVudENvbG9yOwogIGJvcmRlci1yYWRpdXM6IDVlbSAwIDAgNWVtOwogIGJvcmRlci1yaWdodDogMDsKICBoZWlnaHQ6IC41ZW07CiAgd2lkdGg6IC43NWVtOwp9CgouXFwtaWNvbi1saW5rOjpiZWZvcmUgewogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC03MCUsIC00NSUpIHJvdGF0ZSgtNDVkZWcpOwp9CgouXFwtaWNvbi1saW5rOjphZnRlciB7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTMwJSwgLTU1JSkgcm90YXRlKDEzNWRlZyk7Cn0KCi5cXC1pY29uLWxvY2F0aW9uOjpiZWZvcmUgewogIGJvcmRlcjogLjFyZW0gc29saWQgY3VycmVudENvbG9yOwogIGJvcmRlci1yYWRpdXM6IDUwJSA1MCUgNTAlIDA7CiAgaGVpZ2h0OiAuOGVtOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC02MCUpIHJvdGF0ZSgtNDVkZWcpOwogIHdpZHRoOiAuOGVtOwp9CgouXFwtaWNvbi1sb2NhdGlvbjo6YWZ0ZXIgewogIGJvcmRlcjogLjFyZW0gc29saWQgY3VycmVudENvbG9yOwogIGJvcmRlci1yYWRpdXM6IDUwJTsKICBoZWlnaHQ6IC4zZW07CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLS4yNWVtKTsKICB3aWR0aDogLjNlbTsKfQoKLlxcLWljb24tbWFpbDo6YmVmb3JlIHsKICBib3JkZXI6IC4xcmVtIHNvbGlkIGN1cnJlbnRDb2xvcjsKICBib3JkZXItcmFkaXVzOiAuMXJlbTsKICBoZWlnaHQ6IC44ZW07CiAgd2lkdGg6IDFlbTsKfQoKLlxcLWljb24tbWFpbDo6YWZ0ZXIgewogIGJvcmRlcjogLjFyZW0gc29saWQgY3VycmVudENvbG9yOwogIGJvcmRlci1yaWdodDogMDsKICBib3JkZXItdG9wOiAwOwogIGhlaWdodDogLjVlbTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtLjQ1ZW0pIHJvdGF0ZSgtNDVkZWcpIHNrZXcoMTBkZWcsIDEwZGVnKTsKICB3aWR0aDogLjVlbTsKfQoKLlxcLWljb24tbWVzc2FnZSB7CiAgYm9yZGVyOiAuMXJlbSBzb2xpZCBjdXJyZW50Q29sb3I7CiAgYm9yZGVyLWJvdHRvbTogMDsKICBib3JkZXItcmFkaXVzOiAuMXJlbTsKICBib3JkZXItcmlnaHQ6IDA7Cn0KCi5cXC1pY29uLW1lc3NhZ2U6OmJlZm9yZSB7CiAgYm9yZGVyOiAuMXJlbSBzb2xpZCBjdXJyZW50Q29sb3I7CiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IC4xcmVtOwogIGJvcmRlci1sZWZ0OiAwOwogIGJvcmRlci10b3A6IDA7CiAgaGVpZ2h0OiAuOGVtOwogIGxlZnQ6IDY1JTsKICB0b3A6IDM1JTsKICB3aWR0aDogLjc1ZW07Cn0KCi5cXC1pY29uLW1lc3NhZ2U6OmFmdGVyIHsKICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7CiAgYm9yZGVyLXJhZGl1czogLjFyZW07CiAgaGVpZ2h0OiAuMzVlbTsKICBsZWZ0OiA3JTsKICB0b3A6IDEwMCU7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLS4zMmVtKSByb3RhdGUoNDVkZWcpOwogIHdpZHRoOiAuMXJlbTsKfQoKLlxcLWljb24tcGVyc29uOjpiZWZvcmUgewogIGJvcmRlcjogLjFyZW0gc29saWQgY3VycmVudENvbG9yOwogIGJvcmRlci1yYWRpdXM6IDUwJTsKICBoZWlnaHQ6IC40NWVtOwogIHRvcDogMjUlOwogIHdpZHRoOiAuNDVlbTsKfQoKLlxcLWljb24tcGVyc29uOjphZnRlciB7CiAgYm9yZGVyOiAuMXJlbSBzb2xpZCBjdXJyZW50Q29sb3I7CiAgYm9yZGVyLXJhZGl1czogNTAlIDUwJSAwIDA7CiAgaGVpZ2h0OiAuNGVtOwogIHRvcDogNzUlOwogIHdpZHRoOiAuOWVtOwp9CgouXFwtaWNvbi1waG90byB7CiAgYm9yZGVyOiAuMXJlbSBzb2xpZCBjdXJyZW50Q29sb3I7CiAgYm9yZGVyLXJhZGl1czogLjFyZW07Cn0KCi5cXC1pY29uLXBob3RvOjpiZWZvcmUgewogIGJvcmRlcjogLjFyZW0gc29saWQgY3VycmVudENvbG9yOwogIGJvcmRlci1yYWRpdXM6IDUwJTsKICBoZWlnaHQ6IC4zZW07CiAgbGVmdDogMzUlOwogIHRvcDogMzUlOwogIHdpZHRoOiAuM2VtOwp9CgouXFwtaWNvbi1waG90bzo6YWZ0ZXIgewogIGJvcmRlcjogLjFyZW0gc29saWQgY3VycmVudENvbG9yOwogIGJvcmRlci1ib3R0b206IDA7CiAgYm9yZGVyLWxlZnQ6IDA7CiAgaGVpZ2h0OiAuNWVtOwogIGxlZnQ6IDYwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNDUlLCAyNSUpIHJvdGF0ZSgtNDVkZWcpOwogIHdpZHRoOiAuNWVtOwp9CgouXFwtaWNvbi10aW1lIHsKICBib3JkZXI6IC4xcmVtIHNvbGlkIGN1cnJlbnRDb2xvcjsKICBib3JkZXItcmFkaXVzOiA1MCU7Cn0KCi5cXC1pY29uLXRpbWU6OmJlZm9yZSB7CiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yOwogIGhlaWdodDogLjRlbTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNzUlKTsKICB3aWR0aDogLjFyZW07Cn0KCi5cXC1pY29uLXRpbWU6OmFmdGVyIHsKICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7CiAgaGVpZ2h0OiAuMjVlbTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNzUlKSByb3RhdGUoMTI1ZGVnKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMTAwJTsKICB3aWR0aDogLjFyZW07Cn0=]]></data>
	</file>
	<file>
	  <filename>/css/backslash/bs/lib/bs-sp.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGJhc2VkIG9uICBTcGVjdHJlLmNzcyB2MC41LjkgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vcGljdHVyZXBhbjIvc3BlY3RyZSAqLwovKiBNYW51YWxseSBmb3JrZWQgZnJvbSBOb3JtYWxpemUuY3NzICovCi8qIG5vcm1hbGl6ZS5jc3MgdjUuMC4wIHwgTUlUIExpY2Vuc2UgfCBnaXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcyAqLwovKiogMS4gQ2hhbmdlIHRoZSBkZWZhdWx0IGZvbnQgZmFtaWx5IGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLiAyLiBDb3JyZWN0IHRoZSBsaW5lIGhlaWdodCBpbiBhbGwgYnJvd3NlcnMuIDMuIFByZXZlbnQgYWRqdXN0bWVudHMgb2YgZm9udCBzaXplIGFmdGVyIG9yaWVudGF0aW9uIGNoYW5nZXMgaW4gSUUgb24gV2luZG93cyBQaG9uZSBhbmQgaW4gaU9TLiAqLwovKiBEb2N1bWVudCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpodG1sIHsKICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsgLyogMSAqLwogIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLyogMyAqLyAKICAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLyogMyAqLwp9CgovKiBTZWN0aW9ucyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiogUmVtb3ZlIHRoZSBtYXJnaW4gaW4gYWxsIGJyb3dzZXJzIChvcGluaW9uYXRlZCkuICovCmJvZHkgewogIG1hcmdpbjogMDsKfQoKLyoqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDktLiAqLwphcnRpY2xlLAphc2lkZSwKZm9vdGVyLApoZWFkZXIsCm5hdiwKc2VjdGlvbiB7CiAgZGlzcGxheTogYmxvY2s7Cn0KCi8qKiBDb3JyZWN0IHRoZSBmb250IHNpemUgYW5kIG1hcmdpbiBvbiBgaDFgIGVsZW1lbnRzIHdpdGhpbiBgc2VjdGlvbmAgYW5kIGBhcnRpY2xlYCBjb250ZXh0cyBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBTYWZhcmkuICovCmgxIHsKICBmb250LXNpemU6IDJlbTsKICBtYXJnaW46IC42N2VtIDA7Cn0KCi8qIEdyb3VwaW5nIGNvbnRlbnQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDktLiAxLiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRS4gKi8KZmlnY2FwdGlvbiwKZmlndXJlLAptYWluIHsKICAvKiAxICovIGRpc3BsYXk6IGJsb2NrOwp9CgovKiogQWRkIHRoZSBjb3JyZWN0IG1hcmdpbiBpbiBJRSA4IChyZW1vdmVkKS4gKi8KLyoqIDEuIEFkZCB0aGUgY29ycmVjdCBib3ggc2l6aW5nIGluIEZpcmVmb3guIDIuIFNob3cgdGhlIG92ZXJmbG93IGluIEVkZ2UgYW5kIElFLiAqLwpociB7CiAgYm94LXNpemluZzogY29udGVudC1ib3g7IC8qIDEgKi8KICBoZWlnaHQ6IDA7IC8qIDEgKi8KICBvdmVyZmxvdzogdmlzaWJsZTsgLyogMiAqLwp9CgovKiogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy4gKHJlbW92ZWQpIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy4gKi8KLyogVGV4dC1sZXZlbCBzZW1hbnRpY3MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoqIDEuIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIG9uIGFjdGl2ZSBsaW5rcyBpbiBJRSAxMC4gMi4gUmVtb3ZlIGdhcHMgaW4gbGlua3MgdW5kZXJsaW5lIGluIGlPUyA4KyBhbmQgU2FmYXJpIDgrLiAqLwphIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgLyogMSAqLwogIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9uLXNraXA6IG9iamVjdHM7IC8qIDIgKi8KfQoKLyoqIFJlbW92ZSB0aGUgb3V0bGluZSBvbiBmb2N1c2VkIGxpbmtzIHdoZW4gdGhleSBhcmUgYWxzbyBhY3RpdmUgb3IgaG92ZXJlZCBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKS4gKi8KYTphY3RpdmUsCmE6aG92ZXIgewogIG91dGxpbmUtd2lkdGg6IDA7Cn0KCi8qKiBNb2RpZnkgZGVmYXVsdCBzdHlsaW5nIG9mIGFkZHJlc3MuICovCmFkZHJlc3MgewogIGZvbnQtc3R5bGU6IG5vcm1hbDsKfQoKLyoqIDEuIFJlbW92ZSB0aGUgYm90dG9tIGJvcmRlciBpbiBGaXJlZm94IDM5LS4gMi4gQWRkIHRoZSBjb3JyZWN0IHRleHQgZGVjb3JhdGlvbiBpbiBDaHJvbWUsIEVkZ2UsIElFLCBPcGVyYSwgYW5kIFNhZmFyaS4gKHJlbW92ZWQpICovCi8qKiBQcmV2ZW50IHRoZSBkdXBsaWNhdGUgYXBwbGljYXRpb24gb2YgYGJvbGRlcmAgYnkgdGhlIG5leHQgcnVsZSBpbiBTYWZhcmkgNi4gKi8KYiwKc3Ryb25nIHsKICBmb250LXdlaWdodDogaW5oZXJpdDsKfQoKLyoqIEFkZCB0aGUgY29ycmVjdCBmb250IHdlaWdodCBpbiBDaHJvbWUsIEVkZ2UsIGFuZCBTYWZhcmkuICovCmIsCnN0cm9uZyB7CiAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKfQoKLyoqIDEuIENvcnJlY3QgdGhlIGluaGVyaXRhbmNlIGFuZCBzY2FsaW5nIG9mIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy4gKi8KY29kZSwKa2JkLApwcmUsCnNhbXAgewogIGZvbnQtZmFtaWx5OiAiU0YgTW9ubyIsICJTZWdvZSBVSSBNb25vIiwgIlJvYm90byBNb25vIiwgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZTsgLyogMSAoY2hhbmdlZCkgKi8KICBmb250LXNpemU6IDFlbTsgLyogMiAqLwp9CgovKiogQWRkIHRoZSBjb3JyZWN0IGZvbnQgc3R5bGUgaW4gQW5kcm9pZCA0LjMtLiAqLwpkZm4gewogIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKLyoqIEFkZCB0aGUgY29ycmVjdCBiYWNrZ3JvdW5kIGFuZCBjb2xvciBpbiBJRSA5LS4gKFJlbW92ZWQpICovCi8qKiBBZGQgdGhlIGNvcnJlY3QgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy4gKi8Kc21hbGwgewogIGZvbnQtc2l6ZTogODAlOwogIGZvbnQtd2VpZ2h0OiA0MDA7IC8qIChhZGRlZCkgKi8KfQoKLyoqIFByZXZlbnQgYHN1YmAgYW5kIGBzdXBgIGVsZW1lbnRzIGZyb20gYWZmZWN0aW5nIHRoZSBsaW5lIGhlaWdodCBpbiBhbGwgYnJvd3NlcnMuICovCnN1YiwKc3VwIHsKICBmb250LXNpemU6IDc1JTsKICBsaW5lLWhlaWdodDogMDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwp9CgpzdWIgewogIGJvdHRvbTogLS4yNWVtOwp9CgpzdXAgewogIHRvcDogLS41ZW07Cn0KCi8qIEVtYmVkZGVkIGNvbnRlbnQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDktLiAqLwphdWRpbywKdmlkZW8gewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLyoqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIGlPUyA0LTcuICovCmF1ZGlvOm5vdChbY29udHJvbHNdKSB7CiAgZGlzcGxheTogbm9uZTsKICBoZWlnaHQ6IDA7Cn0KCi8qKiBSZW1vdmUgdGhlIGJvcmRlciBvbiBpbWFnZXMgaW5zaWRlIGxpbmtzIGluIElFIDEwLS4gKi8KaW1nIHsKICBib3JkZXItc3R5bGU6IG5vbmU7Cn0KCi8qKiBIaWRlIHRoZSBvdmVyZmxvdyBpbiBJRS4gKi8Kc3ZnOm5vdCg6cm9vdCkgewogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi8qIEZvcm1zID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qKiAxLiBDaGFuZ2UgdGhlIGZvbnQgc3R5bGVzIGluIGFsbCBicm93c2VycyAob3BpbmlvbmF0ZWQpLiAyLiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBGaXJlZm94IGFuZCBTYWZhcmkuICovCmJ1dHRvbiwKaW5wdXQsCm9wdGdyb3VwLApzZWxlY3QsCnRleHRhcmVhIHsKICBmb250LWZhbWlseTogaW5oZXJpdDsgLyogMSAoY2hhbmdlZCkgKi8KICBmb250LXNpemU6IGluaGVyaXQ7IC8qIDEgKGNoYW5nZWQpICovCiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7IC8qIDEgKGNoYW5nZWQpICovCiAgbWFyZ2luOiAwOyAvKiAyICovCn0KCi8qKiBTaG93IHRoZSBvdmVyZmxvdyBpbiBJRS4gMS4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gRWRnZS4gKi8KYnV0dG9uLAppbnB1dCB7CiAgLyogMSAqLyBvdmVyZmxvdzogdmlzaWJsZTsKfQoKLyoqIFJlbW92ZSB0aGUgaW5oZXJpdGFuY2Ugb2YgdGV4dCB0cmFuc2Zvcm0gaW4gRWRnZSwgRmlyZWZveCwgYW5kIElFLiAxLiBSZW1vdmUgdGhlIGluaGVyaXRhbmNlIG9mIHRleHQgdHJhbnNmb3JtIGluIEZpcmVmb3guICovCmJ1dHRvbiwKc2VsZWN0IHsKICAvKiAxICovIHRleHQtdHJhbnNmb3JtOiBub25lOwp9CgovKiogMS4gUHJldmVudCBhIFdlYktpdCBidWcgd2hlcmUgKDIpIGRlc3Ryb3lzIG5hdGl2ZSBgYXVkaW9gIGFuZCBgdmlkZW9gIGNvbnRyb2xzIGluIEFuZHJvaWQgNC4gMi4gQ29ycmVjdCB0aGUgaW5hYmlsaXR5IHRvIHN0eWxlIGNsaWNrYWJsZSB0eXBlcyBpbiBpT1MgYW5kIFNhZmFyaS4gKi8KYnV0dG9uLApodG1sIFt0eXBlPSJidXR0b24iXSwKW3R5cGU9InJlc2V0Il0sClt0eXBlPSJzdWJtaXQiXSB7CiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247IC8qIDIgKi8KfQoKLyoqIFJlbW92ZSB0aGUgaW5uZXIgYm9yZGVyIGFuZCBwYWRkaW5nIGluIEZpcmVmb3guICovCmJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwKW3R5cGU9ImJ1dHRvbiJdOjotbW96LWZvY3VzLWlubmVyLApbdHlwZT0icmVzZXQiXTo6LW1vei1mb2N1cy1pbm5lciwKW3R5cGU9InN1Ym1pdCJdOjotbW96LWZvY3VzLWlubmVyIHsKICBib3JkZXItc3R5bGU6IG5vbmU7CiAgcGFkZGluZzogMDsKfQoKLyoqIFJlc3RvcmUgdGhlIGZvY3VzIHN0eWxlcyB1bnNldCBieSB0aGUgcHJldmlvdXMgcnVsZSAocmVtb3ZlZCkuICovCi8qKiBDaGFuZ2UgdGhlIGJvcmRlciwgbWFyZ2luLCBhbmQgcGFkZGluZyBpbiBhbGwgYnJvd3NlcnMgKG9waW5pb25hdGVkKSAoY2hhbmdlZCkuICovCmZpZWxkc2V0IHsKICBib3JkZXI6IDA7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KCi8qKiAxLiBDb3JyZWN0IHRoZSB0ZXh0IHdyYXBwaW5nIGluIEVkZ2UgYW5kIElFLiAyLiBDb3JyZWN0IHRoZSBjb2xvciBpbmhlcml0YW5jZSBmcm9tIGBmaWVsZHNldGAgZWxlbWVudHMgaW4gSUUuIDMuIFJlbW92ZSB0aGUgcGFkZGluZyBzbyBkZXZlbG9wZXJzIGFyZSBub3QgY2F1Z2h0IG91dCB3aGVuIHRoZXkgemVybyBvdXQgYGZpZWxkc2V0YCBlbGVtZW50cyBpbiBhbGwgYnJvd3NlcnMuICovCmxlZ2VuZCB7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsgLyogMSAqLwogIGNvbG9yOiBpbmhlcml0OyAvKiAyICovCiAgZGlzcGxheTogdGFibGU7IC8qIDEgKi8KICBtYXgtd2lkdGg6IDEwMCU7IC8qIDEgKi8KICBwYWRkaW5nOiAwOyAvKiAzICovCiAgd2hpdGUtc3BhY2U6IG5vcm1hbDsgLyogMSAqLwp9CgovKiogMS4gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgOS0uIDIuIEFkZCB0aGUgY29ycmVjdCB2ZXJ0aWNhbCBhbGlnbm1lbnQgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgT3BlcmEuICovCnByb2dyZXNzIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8qIDEgKi8KICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7IC8qIDIgKi8KfQoKLyoqIFJlbW92ZSB0aGUgZGVmYXVsdCB2ZXJ0aWNhbCBzY3JvbGxiYXIgaW4gSUUuICovCnRleHRhcmVhIHsKICBvdmVyZmxvdzogYXV0bzsKfQoKLyoqIDEuIEFkZCB0aGUgY29ycmVjdCBib3ggc2l6aW5nIGluIElFIDEwLS4gMi4gUmVtb3ZlIHRoZSBwYWRkaW5nIGluIElFIDEwLS4gKi8KW3R5cGU9ImNoZWNrYm94Il0sClt0eXBlPSJyYWRpbyJdIHsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiAxICovCiAgcGFkZGluZzogMDsgLyogMiAqLwp9CgovKiogQ29ycmVjdCB0aGUgY3Vyc29yIHN0eWxlIG9mIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGJ1dHRvbnMgaW4gQ2hyb21lLiAqLwpbdHlwZT0ibnVtYmVyIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sClt0eXBlPSJudW1iZXIiXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7CiAgaGVpZ2h0OiBhdXRvOwp9CgovKiogMS4gQ29ycmVjdCB0aGUgb2RkIGFwcGVhcmFuY2UgaW4gQ2hyb21lIGFuZCBTYWZhcmkuIDIuIENvcnJlY3QgdGhlIG91dGxpbmUgc3R5bGUgaW4gU2FmYXJpLiAqLwpbdHlwZT0ic2VhcmNoIl0gewogIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkOyAvKiAxICovCiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7IC8qIDIgKi8KfQoKLyoqIFJlbW92ZSB0aGUgaW5uZXIgcGFkZGluZyBhbmQgY2FuY2VsIGJ1dHRvbnMgaW4gQ2hyb21lIGFuZCBTYWZhcmkgb24gbWFjT1MuICovClt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwKW3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHsKICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Cn0KCi8qKiAxLiBDb3JyZWN0IHRoZSBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIHR5cGVzIGluIGlPUyBhbmQgU2FmYXJpLiAyLiBDaGFuZ2UgZm9udCBwcm9wZXJ0aWVzIHRvIGBpbmhlcml0YCBpbiBTYWZhcmkuICovCjo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24gewogIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uOyAvKiAxICovCiAgZm9udDogaW5oZXJpdDsgLyogMiAqLwp9CgovKiBJbnRlcmFjdGl2ZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSA5LS4gMS4gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gRWRnZSwgSUUsIGFuZCBGaXJlZm94LiAqLwpkZXRhaWxzLAptZW51IHsKICBkaXNwbGF5OiBibG9jazsKfQoKLyogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gYWxsIGJyb3dzZXJzLiAqLwpzdW1tYXJ5IHsKICBkaXNwbGF5OiBsaXN0LWl0ZW07CiAgb3V0bGluZTogbm9uZTsKfQoKLyogU2NyaXB0aW5nID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSA5LS4gKi8KY2FudmFzIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KCi8qKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRS4gKi8KdGVtcGxhdGUgewogIGRpc3BsYXk6IG5vbmU7Cn0KCi8qIEhpZGRlbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTAtLiAqLwpbaGlkZGVuXSB7CiAgZGlzcGxheTogbm9uZTsKfQoKKiwKKjo6YmVmb3JlLAoqOjphZnRlciB7CiAgYm94LXNpemluZzogaW5oZXJpdDsKfQoKaHRtbCB7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBmb250LXNpemU6IDIwcHg7CiAgbGluZS1oZWlnaHQ6IDEuNTsKICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50Owp9Cgpib2R5IHsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGNvbG9yOiAjM2I0MzUxOwogIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBzeXN0ZW0tdWksIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmOwogIGZvbnQtc2l6ZTogLjhyZW07CiAgb3ZlcmZsb3cteDogaGlkZGVuOwogIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7Cn0KCmEgewogIGNvbG9yOiAjNTc1NWQ5OwogIG91dGxpbmU6IG5vbmU7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CgphOmZvY3VzIHsKICBib3gtc2hhZG93OiAwIDAgMCAuMXJlbSByZ2JhKDg3LCA4NSwgMjE3LCAuMik7Cn0KCmE6Zm9jdXMsCmE6aG92ZXIsCmE6YWN0aXZlLAphLmFjdGl2ZSB7CiAgY29sb3I6ICMzMDJlY2Q7CiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KCmE6dmlzaXRlZCB7CiAgY29sb3I6ICM4MDdmZTI7Cn0KCmgxLApoMiwKaDMsCmg0LApoNSwKaDYgewogIGNvbG9yOiBpbmhlcml0OwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgbGluZS1oZWlnaHQ6IDEuMjsKICBtYXJnaW4tYm90dG9tOiAuNWVtOwogIG1hcmdpbi10b3A6IDA7Cn0KCi5oMSwKLmgyLAouaDMsCi5oNCwKLmg1LAouaDYgewogIGZvbnQtd2VpZ2h0OiA1MDA7Cn0KCmgxLAouaDEgewogIGZvbnQtc2l6ZTogMnJlbTsKfQoKaDIsCi5oMiB7CiAgZm9udC1zaXplOiAxLjZyZW07Cn0KCmgzLAouaDMgewogIGZvbnQtc2l6ZTogMS40cmVtOwp9CgpoNCwKLmg0IHsKICBmb250LXNpemU6IDEuMnJlbTsKfQoKaDUsCi5oNSB7CiAgZm9udC1zaXplOiAxcmVtOwp9CgpoNiwKLmg2IHsKICBmb250LXNpemU6IC44cmVtOwp9CgpwIHsKICBtYXJnaW46IDAgMCAxLjJyZW07Cn0KCmEsCmlucywKdSB7CiAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcDogaW5rIGVkZ2VzOwogIHRleHQtZGVjb3JhdGlvbi1za2lwOiBpbmsgZWRnZXM7Cn0KCmFiYnJbdGl0bGVdIHsKICBib3JkZXItYm90dG9tOiAuMDVyZW0gZG90dGVkOwogIGN1cnNvcjogaGVscDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCmtiZCB7CiAgYmFja2dyb3VuZDogIzMwMzc0MjsKICBib3JkZXItcmFkaXVzOiAuMXJlbTsKICBjb2xvcjogI2ZmZjsKICBmb250LXNpemU6IC43cmVtOyAKICBsaW5lLWhlaWdodDogMS4yNTsKICBwYWRkaW5nOiAuMXJlbSAuMnJlbTsKfQoKbWFyayB7CiAgYmFja2dyb3VuZDogI2ZmZTliMzsKICBib3JkZXItYm90dG9tOiAuMDVyZW0gc29saWQgI2ZmZDM2NzsKICBib3JkZXItcmFkaXVzOiAuMXJlbTsKICBjb2xvcjogIzNiNDM1MTsKICBwYWRkaW5nOiAuMDVyZW0gLjFyZW0gMDsKfQoKYmxvY2txdW90ZSB7CiAgYm9yZGVyLWxlZnQ6IC4xcmVtIHNvbGlkICNkYWRlZTQ7CiAgbWFyZ2luLWxlZnQ6IDA7CiAgcGFkZGluZzogLjRyZW0gLjhyZW07Cn0KCmJsb2NrcXVvdGUgcDpsYXN0LWNoaWxkIHsKICBtYXJnaW4tYm90dG9tOiAwOwp9Cgp1bCwKb2wgewogIG1hcmdpbjogLjhyZW0gMCAuOHJlbSAuOHJlbTsKICBwYWRkaW5nOiAwOwp9Cgp1bCB1bCwKdWwgb2wsCm9sIHVsLApvbCBvbCB7CiAgbWFyZ2luOiAuOHJlbSAwIC44cmVtIC44cmVtOwp9Cgp1bCBsaSwKb2wgbGkgewogIG1hcmdpbi10b3A6IC40cmVtOwp9Cgp1bCB7CiAgbGlzdC1zdHlsZTogZGlzYyBpbnNpZGU7Cn0KCnVsIHVsIHsKICBsaXN0LXN0eWxlLXR5cGU6IGNpcmNsZTsKfQoKb2wgewogIGxpc3Qtc3R5bGU6IGRlY2ltYWwgaW5zaWRlOwp9CgpvbCBvbCB7CiAgbGlzdC1zdHlsZS10eXBlOiBsb3dlci1hbHBoYTsKfQoKZGwgZHQgewogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgpkbCBkZCB7CiAgbWFyZ2luOiAuNHJlbSAwIC44cmVtIDA7Cn0KCmh0bWw6bGFuZyh6aCksCmh0bWw6bGFuZyh6aC1IYW5zKSwKLmxhbmctemgsCi5sYW5nLXpoLWhhbnMgewogIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBzeXN0ZW0tdWksIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgUm9ib3RvLCAiUGluZ0ZhbmcgU0MiLCAiSGlyYWdpbm8gU2FucyBHQiIsICJNaWNyb3NvZnQgWWFIZWkiLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmOwp9CgpodG1sOmxhbmcoemgtSGFudCksCi5sYW5nLXpoLWhhbnQgewogIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBzeXN0ZW0tdWksIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgUm9ib3RvLCAiUGluZ0ZhbmcgVEMiLCAiSGlyYWdpbm8gU2FucyBDTlMiLCAiTWljcm9zb2Z0IEpoZW5nSGVpIiwgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjsKfQoKaHRtbDpsYW5nKGphKSwKLmxhbmctamEgewogIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBzeXN0ZW0tdWksIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgUm9ib3RvLCAiSGlyYWdpbm8gU2FucyIsICJIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm8iLCAiWXUgR290aGljIiwgWXVHb3RoaWMsIE1laXJ5bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjsKfQoKaHRtbDpsYW5nKGtvKSwKLmxhbmcta28gewogIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBzeXN0ZW0tdWksIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgUm9ib3RvLCAiTWFsZ3VuIEdvdGhpYyIsICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Cn0KCjpsYW5nKHpoKSBpbnMsCjpsYW5nKHpoKSB1LAo6bGFuZyhqYSkgaW5zLAo6bGFuZyhqYSkgdSwKLmxhbmctY2prIGlucywKLmxhbmctY2prIHUgewogIGJvcmRlci1ib3R0b206IC4wNXJlbSBzb2xpZDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCjpsYW5nKHpoKSBkZWwgKyBkZWwsCjpsYW5nKHpoKSBkZWwgKyBzLAo6bGFuZyh6aCkgaW5zICsgaW5zLAo6bGFuZyh6aCkgaW5zICsgdSwKOmxhbmcoemgpIHMgKyBkZWwsCjpsYW5nKHpoKSBzICsgcywKOmxhbmcoemgpIHUgKyBpbnMsCjpsYW5nKHpoKSB1ICsgdSwKOmxhbmcoamEpIGRlbCArIGRlbCwKOmxhbmcoamEpIGRlbCArIHMsCjpsYW5nKGphKSBpbnMgKyBpbnMsCjpsYW5nKGphKSBpbnMgKyB1LAo6bGFuZyhqYSkgcyArIGRlbCwKOmxhbmcoamEpIHMgKyBzLAo6bGFuZyhqYSkgdSArIGlucywKOmxhbmcoamEpIHUgKyB1LAoubGFuZy1jamsgZGVsICsgZGVsLAoubGFuZy1jamsgZGVsICsgcywKLmxhbmctY2prIGlucyArIGlucywKLmxhbmctY2prIGlucyArIHUsCi5sYW5nLWNqayBzICsgZGVsLAoubGFuZy1jamsgcyArIHMsCi5sYW5nLWNqayB1ICsgaW5zLAoubGFuZy1jamsgdSArIHUgewogIG1hcmdpbi1sZWZ0OiAuMTI1ZW07Cn0KCi50YWJsZSB7CiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICBib3JkZXItc3BhY2luZzogMDsKICB0ZXh0LWFsaWduOiBsZWZ0OyAKICB3aWR0aDogMTAwJTsKfQoKLnRhYmxlLnRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSB7CiAgYmFja2dyb3VuZDogI2Y3ZjhmOTsKfQoKLnRhYmxlIHRib2R5IHRyLmFjdGl2ZSwKLnRhYmxlLnRhYmxlLXN0cmlwZWQgdGJvZHkgdHIuYWN0aXZlIHsKICBiYWNrZ3JvdW5kOiAjZWVmMGYzOwp9CgoudGFibGUudGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIgewogIGJhY2tncm91bmQ6ICNlZWYwZjM7Cn0KCi50YWJsZS50YWJsZS1zY3JvbGwgewogIGRpc3BsYXk6IGJsb2NrOwogIG92ZXJmbG93LXg6IGF1dG87CiAgcGFkZGluZy1ib3R0b206IC43NXJlbTsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoudGFibGUgdGQsCi50YWJsZSB0aCB7CiAgYm9yZGVyLWJvdHRvbTogLjA1cmVtIHNvbGlkICNkYWRlZTQ7CiAgcGFkZGluZzogLjZyZW0gLjRyZW07Cn0KCi50YWJsZSB0aCB7CiAgYm9yZGVyLWJvdHRvbS13aWR0aDogLjFyZW07Cn0KCi5idG4gewogIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7CiAgYXBwZWFyYW5jZTogbm9uZTsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGJvcmRlcjogLjA1cmVtIHNvbGlkICM1NzU1ZDk7CiAgYm9yZGVyLXJhZGl1czogLjFyZW07CiAgY29sb3I6ICM1NzU1ZDk7CiAgY3Vyc29yOiBwb2ludGVyOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IC44cmVtOwogIGhlaWdodDogMS44cmVtOwogIGxpbmUtaGVpZ2h0OiAxLjJyZW07CiAgb3V0bGluZTogbm9uZTsKICBwYWRkaW5nOiAuMjVyZW0gLjRyZW07CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC4ycywgYm9yZGVyIC4ycywgYm94LXNoYWRvdyAuMnMsIGNvbG9yIC4yczsKICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogIHVzZXItc2VsZWN0OiBub25lOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLmJ0bjpmb2N1cyB7CiAgYm94LXNoYWRvdzogMCAwIDAgLjFyZW0gcmdiYSg4NywgODUsIDIxNywgLjIpOwp9CgouYnRuOmZvY3VzLAouYnRuOmhvdmVyIHsKICBiYWNrZ3JvdW5kOiAjZjFmMWZjOwogIGJvcmRlci1jb2xvcjogIzRiNDhkNjsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCi5idG46YWN0aXZlLAouYnRuLmFjdGl2ZSB7CiAgYmFja2dyb3VuZDogIzRiNDhkNjsKICBib3JkZXItY29sb3I6ICMzNjM0ZDI7CiAgY29sb3I6ICNmZmY7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CgouYnRuOmFjdGl2ZS5sb2FkaW5nOjphZnRlciwKLmJ0bi5hY3RpdmUubG9hZGluZzo6YWZ0ZXIgewogIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7CiAgYm9yZGVyLWxlZnQtY29sb3I6ICNmZmY7Cn0KCi5idG5bZGlzYWJsZWRdLAouYnRuOmRpc2FibGVkLAouYnRuLmRpc2FibGVkIHsKICBjdXJzb3I6IGRlZmF1bHQ7CiAgb3BhY2l0eTogLjU7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5idG4uYnRuLXByaW1hcnkgewogIGJhY2tncm91bmQ6ICM1NzU1ZDk7CiAgYm9yZGVyLWNvbG9yOiAjNGI0OGQ2OwogIGNvbG9yOiAjZmZmOwp9CgouYnRuLmJ0bi1wcmltYXJ5OmZvY3VzLAouYnRuLmJ0bi1wcmltYXJ5OmhvdmVyIHsKICBiYWNrZ3JvdW5kOiAjNDI0MGQ0OwogIGJvcmRlci1jb2xvcjogIzM2MzRkMjsKICBjb2xvcjogI2ZmZjsKfQoKLmJ0bi5idG4tcHJpbWFyeTphY3RpdmUsCi5idG4uYnRuLXByaW1hcnkuYWN0aXZlIHsKICBiYWNrZ3JvdW5kOiAjM2EzOGQyOwogIGJvcmRlci1jb2xvcjogIzMwMmVjZDsKICBjb2xvcjogI2ZmZjsKfQoKLmJ0bi5idG4tcHJpbWFyeS5sb2FkaW5nOjphZnRlciB7CiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKICBib3JkZXItbGVmdC1jb2xvcjogI2ZmZjsKfQoKLmJ0bi5idG4tc3VjY2VzcyB7CiAgYmFja2dyb3VuZDogIzMyYjY0MzsKICBib3JkZXItY29sb3I6ICMyZmFhM2Y7CiAgY29sb3I6ICNmZmY7Cn0KCi5idG4uYnRuLXN1Y2Nlc3M6Zm9jdXMgewogIGJveC1zaGFkb3c6IDAgMCAwIC4xcmVtIHJnYmEoNTAsIDE4MiwgNjcsIC4yKTsKfQoKLmJ0bi5idG4tc3VjY2Vzczpmb2N1cywKLmJ0bi5idG4tc3VjY2Vzczpob3ZlciB7CiAgYmFja2dyb3VuZDogIzMwYWU0MDsKICBib3JkZXItY29sb3I6ICMyZGEyM2M7CiAgY29sb3I6ICNmZmY7Cn0KCi5idG4uYnRuLXN1Y2Nlc3M6YWN0aXZlLAouYnRuLmJ0bi1zdWNjZXNzLmFjdGl2ZSB7CiAgYmFja2dyb3VuZDogIzJhOWEzOTsKICBib3JkZXItY29sb3I6ICMyNzhlMzQ7CiAgY29sb3I6ICNmZmY7Cn0KCi5idG4uYnRuLXN1Y2Nlc3MubG9hZGluZzo6YWZ0ZXIgewogIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7CiAgYm9yZGVyLWxlZnQtY29sb3I6ICNmZmY7Cn0KCi5idG4uYnRuLWVycm9yIHsKICBiYWNrZ3JvdW5kOiAjZTg1NjAwOwogIGJvcmRlci1jb2xvcjogI2Q5NTAwMDsKICBjb2xvcjogI2ZmZjsKfQoKLmJ0bi5idG4tZXJyb3I6Zm9jdXMgewogIGJveC1zaGFkb3c6IDAgMCAwIC4xcmVtIHJnYmEoMjMyLCA4NiwgMCwgLjIpOwp9CgouYnRuLmJ0bi1lcnJvcjpmb2N1cywKLmJ0bi5idG4tZXJyb3I6aG92ZXIgewogIGJhY2tncm91bmQ6ICNkZTUyMDA7CiAgYm9yZGVyLWNvbG9yOiAjY2Y0ZDAwOwogIGNvbG9yOiAjZmZmOwp9CgouYnRuLmJ0bi1lcnJvcjphY3RpdmUsCi5idG4uYnRuLWVycm9yLmFjdGl2ZSB7CiAgYmFja2dyb3VuZDogI2M0NDkwMDsKICBib3JkZXItY29sb3I6ICNiNTQzMDA7CiAgY29sb3I6ICNmZmY7Cn0KCi5idG4uYnRuLWVycm9yLmxvYWRpbmc6OmFmdGVyIHsKICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmOwogIGJvcmRlci1sZWZ0LWNvbG9yOiAjZmZmOwp9CgouYnRuLmJ0bi1saW5rIHsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwogIGNvbG9yOiAjNTc1NWQ5Owp9CgouYnRuLmJ0bi1saW5rOmZvY3VzLAouYnRuLmJ0bi1saW5rOmhvdmVyLAouYnRuLmJ0bi1saW5rOmFjdGl2ZSwKLmJ0bi5idG4tbGluay5hY3RpdmUgewogIGNvbG9yOiAjMzAyZWNkOwp9CgouYnRuLmJ0bi1zbSB7CiAgZm9udC1zaXplOiAuN3JlbTsKICBoZWlnaHQ6IDEuNHJlbTsKICBwYWRkaW5nOiAuMDVyZW0gLjNyZW07Cn0KCi5idG4uYnRuLWxnIHsKICBmb250LXNpemU6IC45cmVtOwogIGhlaWdodDogMnJlbTsKICBwYWRkaW5nOiAuMzVyZW0gLjZyZW07Cn0KCi5idG4uYnRuLWJsb2NrIHsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogMTAwJTsKfQoKLmJ0bi5idG4tYWN0aW9uIHsKICBwYWRkaW5nLWxlZnQ6IDA7CiAgcGFkZGluZy1yaWdodDogMDsgCiAgd2lkdGg6IDEuOHJlbTsKfQoKLmJ0bi5idG4tYWN0aW9uLmJ0bi1zbSB7CiAgd2lkdGg6IDEuNHJlbTsKfQoKLmJ0bi5idG4tYWN0aW9uLmJ0bi1sZyB7CiAgd2lkdGg6IDJyZW07Cn0KCi5idG4uYnRuLWNsZWFyIHsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICBib3JkZXI6IDA7CiAgY29sb3I6IGN1cnJlbnRDb2xvcjsKICBoZWlnaHQ6IDFyZW07CiAgbGluZS1oZWlnaHQ6IC44cmVtOwogIG1hcmdpbi1sZWZ0OiAuMnJlbTsKICBtYXJnaW4tcmlnaHQ6IC0ycHg7CiAgb3BhY2l0eTogMTsKICBwYWRkaW5nOiAuMXJlbTsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgd2lkdGg6IDFyZW07Cn0KCi5idG4uYnRuLWNsZWFyOmZvY3VzLAouYnRuLmJ0bi1jbGVhcjpob3ZlciB7CiAgYmFja2dyb3VuZDogcmdiYSgyNDcsIDI0OCwgMjQ5LCAuNSk7CiAgb3BhY2l0eTogLjk1Owp9CgouYnRuLmJ0bi1jbGVhcjo6YmVmb3JlIHsKICBjb250ZW50OiAiXDI3MTUiOwp9CgouYnRuLWdyb3VwIHsKICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgLW1zLWZsZXgtd3JhcDogd3JhcDsKICBmbGV4LXdyYXA6IHdyYXA7Cn0KCi5idG4tZ3JvdXAgLmJ0biB7CiAgLW1zLWZsZXg6IDEgMCBhdXRvOwogIGZsZXg6IDEgMCBhdXRvOwp9CgouYnRuLWdyb3VwIC5idG46Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSB7CiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7CiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7Cn0KCi5idG4tZ3JvdXAgLmJ0bjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpIHsKICBib3JkZXItcmFkaXVzOiAwOwogIG1hcmdpbi1sZWZ0OiAtLjA1cmVtOwp9CgouYnRuLWdyb3VwIC5idG46bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSB7CiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDsKICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOwogIG1hcmdpbi1sZWZ0OiAtLjA1cmVtOwp9CgouYnRuLWdyb3VwIC5idG46Zm9jdXMsCi5idG4tZ3JvdXAgLmJ0bjpob3ZlciwKLmJ0bi1ncm91cCAuYnRuOmFjdGl2ZSwKLmJ0bi1ncm91cCAuYnRuLmFjdGl2ZSB7CiAgei1pbmRleDogMTsKfQoKLmJ0bi1ncm91cC5idG4tZ3JvdXAtYmxvY2sgewogIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogIGRpc3BsYXk6IGZsZXg7Cn0KCi5idG4tZ3JvdXAuYnRuLWdyb3VwLWJsb2NrIC5idG4gewogIC1tcy1mbGV4OiAxIDAgMDsKICBmbGV4OiAxIDAgMDsKfQoKLmZvcm0tZ3JvdXA6bm90KDpsYXN0LWNoaWxkKSB7CiAgbWFyZ2luLWJvdHRvbTogLjRyZW07Cn0KCmZpZWxkc2V0IHsKICBtYXJnaW4tYm90dG9tOiAuOHJlbTsKfQoKbGVnZW5kIHsKICBmb250LXNpemU6IC45cmVtOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgbWFyZ2luLWJvdHRvbTogLjhyZW07Cn0KCi5mb3JtLWxhYmVsIHsKICBkaXNwbGF5OiBibG9jazsKICBsaW5lLWhlaWdodDogMS4ycmVtOwogIHBhZGRpbmc6IC4zcmVtIDA7Cn0KCi5mb3JtLWxhYmVsLmxhYmVsLXNtIHsKICBmb250LXNpemU6IC43cmVtOwogIHBhZGRpbmc6IC4xcmVtIDA7Cn0KCi5mb3JtLWxhYmVsLmxhYmVsLWxnIHsKICBmb250LXNpemU6IC45cmVtOwogIHBhZGRpbmc6IC40cmVtIDA7Cn0KCi5mb3JtLWlucHV0IHsKICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgLW1vei1hcHBlYXJhbmNlOiBub25lOwogIGFwcGVhcmFuY2U6IG5vbmU7CiAgYmFja2dyb3VuZDogI2ZmZjsKICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwogIGJvcmRlcjogLjA1cmVtIHNvbGlkICNiY2MzY2U7CiAgYm9yZGVyLXJhZGl1czogLjFyZW07CiAgY29sb3I6ICMzYjQzNTE7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAuOHJlbTsKICBoZWlnaHQ6IDEuOHJlbTsKICBsaW5lLWhlaWdodDogMS4ycmVtOwogIG1heC13aWR0aDogMTAwJTsKICBvdXRsaW5lOiBub25lOwogIHBhZGRpbmc6IC4yNXJlbSAuNHJlbTsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAuMnMsIGJvcmRlciAuMnMsIGJveC1zaGFkb3cgLjJzLCBjb2xvciAuMnM7CiAgd2lkdGg6IDEwMCU7Cn0KCi5mb3JtLWlucHV0OmZvY3VzIHsKICBib3JkZXItY29sb3I6ICM1NzU1ZDk7IAogIGJveC1zaGFkb3c6IDAgMCAwIC4xcmVtIHJnYmEoODcsIDg1LCAyMTcsIC4yKTsKfQoKLmZvcm0taW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHsKICBjb2xvcjogI2JjYzNjZTsKfQoKLmZvcm0taW5wdXQ6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgY29sb3I6ICNiY2MzY2U7Cn0KCi5mb3JtLWlucHV0OjpwbGFjZWhvbGRlciB7CiAgY29sb3I6ICNiY2MzY2U7Cn0KCi5mb3JtLWlucHV0LmlucHV0LXNtIHsKICBmb250LXNpemU6IC43cmVtOwogIGhlaWdodDogMS40cmVtOwogIHBhZGRpbmc6IC4wNXJlbSAuM3JlbTsKfQoKLmZvcm0taW5wdXQuaW5wdXQtbGcgewogIGZvbnQtc2l6ZTogLjlyZW07CiAgaGVpZ2h0OiAycmVtOwogIHBhZGRpbmc6IC4zNXJlbSAuNnJlbTsKfQoKLmZvcm0taW5wdXQuaW5wdXQtaW5saW5lIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICB3aWR0aDogYXV0bzsKfQoKLmZvcm0taW5wdXRbdHlwZT0iZmlsZSJdIHsKICBoZWlnaHQ6IGF1dG87Cn0KCnRleHRhcmVhLmZvcm0taW5wdXQsCnRleHRhcmVhLmZvcm0taW5wdXQuaW5wdXQtbGcsCnRleHRhcmVhLmZvcm0taW5wdXQuaW5wdXQtc20gewogIGhlaWdodDogYXV0bzsKfQoKLmZvcm0taW5wdXQtaGludCB7CiAgY29sb3I6ICNiY2MzY2U7CiAgZm9udC1zaXplOiAuN3JlbTsKICBtYXJnaW4tdG9wOiAuMnJlbTsKfQoKLmhhcy1zdWNjZXNzIC5mb3JtLWlucHV0LWhpbnQsCi5pcy1zdWNjZXNzICsgLmZvcm0taW5wdXQtaGludCB7CiAgY29sb3I6ICMzMmI2NDM7Cn0KCi5oYXMtZXJyb3IgLmZvcm0taW5wdXQtaGludCwKLmlzLWVycm9yICsgLmZvcm0taW5wdXQtaGludCB7CiAgY29sb3I6ICNlODU2MDA7Cn0KCi5mb3JtLXNlbGVjdCB7CiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogIC1tb3otYXBwZWFyYW5jZTogbm9uZTsKICBhcHBlYXJhbmNlOiBub25lOwogIGJhY2tncm91bmQ6ICNmZmY7IAogIGJvcmRlcjogLjA1cmVtIHNvbGlkICNiY2MzY2U7CiAgYm9yZGVyLXJhZGl1czogLjFyZW07CiAgY29sb3I6IGluaGVyaXQ7CiAgZm9udC1zaXplOiAuOHJlbTsKICBoZWlnaHQ6IDEuOHJlbTsKICBsaW5lLWhlaWdodDogMS4ycmVtOwogIG91dGxpbmU6IG5vbmU7CiAgcGFkZGluZzogLjI1cmVtIC40cmVtOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgd2lkdGg6IDEwMCU7Cn0KCi5mb3JtLXNlbGVjdDpmb2N1cyB7CiAgYm9yZGVyLWNvbG9yOiAjNTc1NWQ5OyAKICBib3gtc2hhZG93OiAwIDAgMCAuMXJlbSByZ2JhKDg3LCA4NSwgMjE3LCAuMik7Cn0KCi5mb3JtLXNlbGVjdDo6LW1zLWV4cGFuZCB7CiAgZGlzcGxheTogbm9uZTsKfQoKLmZvcm0tc2VsZWN0LnNlbGVjdC1zbSB7CiAgZm9udC1zaXplOiAuN3JlbTsKICBoZWlnaHQ6IDEuNHJlbTsKICBwYWRkaW5nOiAuMDVyZW0gMS4xcmVtIC4wNXJlbSAuM3JlbTsKfQoKLmZvcm0tc2VsZWN0LnNlbGVjdC1sZyB7CiAgZm9udC1zaXplOiAuOXJlbTsKICBoZWlnaHQ6IDJyZW07CiAgcGFkZGluZzogLjM1cmVtIDEuNHJlbSAuMzVyZW0gLjZyZW07Cn0KCi5mb3JtLXNlbGVjdFtzaXplXSwKLmZvcm0tc2VsZWN0W211bHRpcGxlXSB7CiAgaGVpZ2h0OiBhdXRvOwogIHBhZGRpbmc6IC4yNXJlbSAuNHJlbTsKfQoKLmZvcm0tc2VsZWN0W3NpemVdIG9wdGlvbiwKLmZvcm0tc2VsZWN0W211bHRpcGxlXSBvcHRpb24gewogIHBhZGRpbmc6IC4xcmVtIC4ycmVtOwp9CgouZm9ybS1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pIHsKICBiYWNrZ3JvdW5kOiAjZmZmIHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTIwdmlld0JveD0nMCUyMDAlMjA0JTIwNSclM0UlM0NwYXRoJTIwZmlsbD0nJTIzNjY3MTg5JyUyMGQ9J00yJTIwMEwwJTIwMmg0em0wJTIwNUwwJTIwM2g0eicvJTNFJTNDL3N2ZyUzRSIpIG5vLXJlcGVhdCByaWdodCAuMzVyZW0gY2VudGVyLy40cmVtIC41cmVtOwogIHBhZGRpbmctcmlnaHQ6IDEuMnJlbTsKfQoKLmhhcy1pY29uLWxlZnQsCi5oYXMtaWNvbi1yaWdodCB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgouaGFzLWljb24tbGVmdCAuZm9ybS1pY29uLAouaGFzLWljb24tcmlnaHQgLmZvcm0taWNvbiB7CiAgaGVpZ2h0OiAuOHJlbTsKICBtYXJnaW46IDAgLjI1cmVtOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDUwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgd2lkdGg6IC44cmVtOwogIHotaW5kZXg6IDI7Cn0KCi5oYXMtaWNvbi1sZWZ0IC5mb3JtLWljb24gewogIGxlZnQ6IC4wNXJlbTsKfQoKLmhhcy1pY29uLWxlZnQgLmZvcm0taW5wdXQgewogIHBhZGRpbmctbGVmdDogMS4zcmVtOwp9CgouaGFzLWljb24tcmlnaHQgLmZvcm0taWNvbiB7CiAgcmlnaHQ6IC4wNXJlbTsKfQoKLmhhcy1pY29uLXJpZ2h0IC5mb3JtLWlucHV0IHsKICBwYWRkaW5nLXJpZ2h0OiAxLjNyZW07Cn0KCi5mb3JtLWNoZWNrYm94LAouZm9ybS1yYWRpbywKLmZvcm0tc3dpdGNoIHsKICBkaXNwbGF5OiBibG9jazsKICBsaW5lLWhlaWdodDogMS4ycmVtOwogIG1hcmdpbjogLjJyZW0gMDsKICBtaW4taGVpZ2h0OiAxLjRyZW07CiAgcGFkZGluZzogLjFyZW0gLjRyZW0gLjFyZW0gMS4ycmVtOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmZvcm0tY2hlY2tib3ggaW5wdXQsCi5mb3JtLXJhZGlvIGlucHV0LAouZm9ybS1zd2l0Y2ggaW5wdXQgewogIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7CiAgaGVpZ2h0OiAxcHg7CiAgbWFyZ2luOiAtMXB4OwogIG92ZXJmbG93OiBoaWRkZW47CiAgcG9zaXRpb246IGFic29sdXRlOwogIHdpZHRoOiAxcHg7Cn0KCi5mb3JtLWNoZWNrYm94IGlucHV0OmZvY3VzICsgLmZvcm0taWNvbiwKLmZvcm0tcmFkaW8gaW5wdXQ6Zm9jdXMgKyAuZm9ybS1pY29uLAouZm9ybS1zd2l0Y2ggaW5wdXQ6Zm9jdXMgKyAuZm9ybS1pY29uIHsKICBib3JkZXItY29sb3I6ICM1NzU1ZDk7IAogIGJveC1zaGFkb3c6IDAgMCAwIC4xcmVtIHJnYmEoODcsIDg1LCAyMTcsIC4yKTsKfQoKLmZvcm0tY2hlY2tib3ggaW5wdXQ6Y2hlY2tlZCArIC5mb3JtLWljb24sCi5mb3JtLXJhZGlvIGlucHV0OmNoZWNrZWQgKyAuZm9ybS1pY29uLAouZm9ybS1zd2l0Y2ggaW5wdXQ6Y2hlY2tlZCArIC5mb3JtLWljb24gewogIGJhY2tncm91bmQ6ICM1NzU1ZDk7CiAgYm9yZGVyLWNvbG9yOiAjNTc1NWQ5Owp9CgouZm9ybS1jaGVja2JveCAuZm9ybS1pY29uLAouZm9ybS1yYWRpbyAuZm9ybS1pY29uLAouZm9ybS1zd2l0Y2ggLmZvcm0taWNvbiB7CiAgYm9yZGVyOiAuMDVyZW0gc29saWQgI2JjYzNjZTsKICBjdXJzb3I6IHBvaW50ZXI7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC4ycywgYm9yZGVyIC4ycywgYm94LXNoYWRvdyAuMnMsIGNvbG9yIC4yczsKfQoKLmZvcm0tY2hlY2tib3guaW5wdXQtc20sCi5mb3JtLXJhZGlvLmlucHV0LXNtLAouZm9ybS1zd2l0Y2guaW5wdXQtc20gewogIGZvbnQtc2l6ZTogLjdyZW07CiAgbWFyZ2luOiAwOwp9CgouZm9ybS1jaGVja2JveC5pbnB1dC1sZywKLmZvcm0tcmFkaW8uaW5wdXQtbGcsCi5mb3JtLXN3aXRjaC5pbnB1dC1sZyB7CiAgZm9udC1zaXplOiAuOXJlbTsKICBtYXJnaW46IC4zcmVtIDA7Cn0KCi5mb3JtLWNoZWNrYm94IC5mb3JtLWljb24sCi5mb3JtLXJhZGlvIC5mb3JtLWljb24gewogIGJhY2tncm91bmQ6ICNmZmY7CiAgaGVpZ2h0OiAuOHJlbTsKICBsZWZ0OiAwOwogIHRvcDogLjNyZW07CiAgd2lkdGg6IC44cmVtOwp9CgouZm9ybS1jaGVja2JveCBpbnB1dDphY3RpdmUgKyAuZm9ybS1pY29uLAouZm9ybS1yYWRpbyBpbnB1dDphY3RpdmUgKyAuZm9ybS1pY29uIHsKICBiYWNrZ3JvdW5kOiAjZWVmMGYzOwp9CgouZm9ybS1jaGVja2JveCAuZm9ybS1pY29uIHsKICBib3JkZXItcmFkaXVzOiAuMXJlbTsKfQoKLmZvcm0tY2hlY2tib3ggaW5wdXQ6Y2hlY2tlZCArIC5mb3JtLWljb246OmJlZm9yZSB7CiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKICBib3JkZXI6IC4xcmVtIHNvbGlkICNmZmY7CiAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7CiAgYm9yZGVyLXRvcC13aWR0aDogMDsKICBjb250ZW50OiAiIjsKICBoZWlnaHQ6IDlweDsKICBsZWZ0OiA1MCU7CiAgbWFyZ2luLWxlZnQ6IC0zcHg7CiAgbWFyZ2luLXRvcDogLTZweDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiA1MCU7CiAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOwogIHdpZHRoOiA2cHg7Cn0KCi5mb3JtLWNoZWNrYm94IGlucHV0OmluZGV0ZXJtaW5hdGUgKyAuZm9ybS1pY29uIHsKICBiYWNrZ3JvdW5kOiAjNTc1NWQ5OwogIGJvcmRlci1jb2xvcjogIzU3NTVkOTsKfQoKLmZvcm0tY2hlY2tib3ggaW5wdXQ6aW5kZXRlcm1pbmF0ZSArIC5mb3JtLWljb246OmJlZm9yZSB7CiAgYmFja2dyb3VuZDogI2ZmZjsKICBjb250ZW50OiAiIjsKICBoZWlnaHQ6IDJweDsKICBsZWZ0OiA1MCU7CiAgbWFyZ2luLWxlZnQ6IC01cHg7CiAgbWFyZ2luLXRvcDogLTFweDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiA1MCU7CiAgd2lkdGg6IDEwcHg7Cn0KCi5mb3JtLXJhZGlvIC5mb3JtLWljb24gewogIGJvcmRlci1yYWRpdXM6IDUwJTsKfQoKLmZvcm0tcmFkaW8gaW5wdXQ6Y2hlY2tlZCArIC5mb3JtLWljb246OmJlZm9yZSB7CiAgYmFja2dyb3VuZDogI2ZmZjsKICBib3JkZXItcmFkaXVzOiA1MCU7CiAgY29udGVudDogIiI7CiAgaGVpZ2h0OiA2cHg7CiAgbGVmdDogNTAlOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDUwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICB3aWR0aDogNnB4Owp9CgouZm9ybS1zd2l0Y2ggewogIHBhZGRpbmctbGVmdDogMnJlbTsKfQoKLmZvcm0tc3dpdGNoIC5mb3JtLWljb24gewogIGJhY2tncm91bmQ6ICNiY2MzY2U7CiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKICBib3JkZXItcmFkaXVzOiAuNDVyZW07CiAgaGVpZ2h0OiAuOXJlbTsKICBsZWZ0OiAwOwogIHRvcDogLjI1cmVtOwogIHdpZHRoOiAxLjZyZW07Cn0KCi5mb3JtLXN3aXRjaCAuZm9ybS1pY29uOjpiZWZvcmUgewogIGJhY2tncm91bmQ6ICNmZmY7CiAgYm9yZGVyLXJhZGl1czogNTAlOwogIGNvbnRlbnQ6ICIiOwogIGRpc3BsYXk6IGJsb2NrOwogIGhlaWdodDogLjhyZW07CiAgbGVmdDogMDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOwogIHRyYW5zaXRpb246IGJhY2tncm91bmQgLjJzLCBib3JkZXIgLjJzLCBib3gtc2hhZG93IC4ycywgY29sb3IgLjJzLCBsZWZ0IC4yczsKICB3aWR0aDogLjhyZW07Cn0KCi5mb3JtLXN3aXRjaCBpbnB1dDpjaGVja2VkICsgLmZvcm0taWNvbjo6YmVmb3JlIHsKICBsZWZ0OiAxNHB4Owp9CgouZm9ybS1zd2l0Y2ggaW5wdXQ6YWN0aXZlICsgLmZvcm0taWNvbjo6YmVmb3JlIHsKICBiYWNrZ3JvdW5kOiAjZjdmOGY5Owp9CgouaW5wdXQtZ3JvdXAgewogIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogIGRpc3BsYXk6IGZsZXg7Cn0KCi5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYWRkb24gewogIGJhY2tncm91bmQ6ICNmN2Y4Zjk7CiAgYm9yZGVyOiAuMDVyZW0gc29saWQgI2JjYzNjZTsKICBib3JkZXItcmFkaXVzOiAuMXJlbTsKICBsaW5lLWhlaWdodDogMS4ycmVtOwogIHBhZGRpbmc6IC4yNXJlbSAuNHJlbTsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgouaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWFkZG9uLmFkZG9uLXNtIHsKICBmb250LXNpemU6IC43cmVtOwogIHBhZGRpbmc6IC4wNXJlbSAuM3JlbTsKfQoKLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1hZGRvbi5hZGRvbi1sZyB7CiAgZm9udC1zaXplOiAuOXJlbTsKICBwYWRkaW5nOiAuMzVyZW0gLjZyZW07Cn0KCi5pbnB1dC1ncm91cCAuZm9ybS1pbnB1dCwKLmlucHV0LWdyb3VwIC5mb3JtLXNlbGVjdCB7CiAgLW1zLWZsZXg6IDEgMSBhdXRvOwogIGZsZXg6IDEgMSBhdXRvOwogIHdpZHRoOiAxJTsKfQoKLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1idG4gewogIHotaW5kZXg6IDE7Cn0KCi5pbnB1dC1ncm91cCAuZm9ybS1pbnB1dDpmaXJzdC1jaGlsZDpub3QoOmxhc3QtY2hpbGQpLAouaW5wdXQtZ3JvdXAgLmZvcm0tc2VsZWN0OmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCksCi5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYWRkb246Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSwKLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1idG46Zmlyc3QtY2hpbGQ6bm90KDpsYXN0LWNoaWxkKSB7CiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7CiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7Cn0KCi5pbnB1dC1ncm91cCAuZm9ybS1pbnB1dDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLAouaW5wdXQtZ3JvdXAgLmZvcm0tc2VsZWN0Om5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCksCi5pbnB1dC1ncm91cCAuaW5wdXQtZ3JvdXAtYWRkb246bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSwKLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1idG46bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7CiAgYm9yZGVyLXJhZGl1czogMDsKICBtYXJnaW4tbGVmdDogLS4wNXJlbTsKfQoKLmlucHV0LWdyb3VwIC5mb3JtLWlucHV0Omxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCksCi5pbnB1dC1ncm91cCAuZm9ybS1zZWxlY3Q6bGFzdC1jaGlsZDpub3QoOmZpcnN0LWNoaWxkKSwKLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1hZGRvbjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpLAouaW5wdXQtZ3JvdXAgLmlucHV0LWdyb3VwLWJ0bjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpIHsKICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOwogIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7CiAgbWFyZ2luLWxlZnQ6IC0uMDVyZW07Cn0KCi5pbnB1dC1ncm91cCAuZm9ybS1pbnB1dDpmb2N1cywKLmlucHV0LWdyb3VwIC5mb3JtLXNlbGVjdDpmb2N1cywKLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1hZGRvbjpmb2N1cywKLmlucHV0LWdyb3VwIC5pbnB1dC1ncm91cC1idG46Zm9jdXMgewogIHotaW5kZXg6IDI7Cn0KCi5pbnB1dC1ncm91cCAuZm9ybS1zZWxlY3QgewogIHdpZHRoOiBhdXRvOwp9CgouaW5wdXQtZ3JvdXAuaW5wdXQtaW5saW5lIHsKICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgZGlzcGxheTogaW5saW5lLWZsZXg7Cn0KCi5oYXMtc3VjY2VzcyAuZm9ybS1pbnB1dCwKLmZvcm0taW5wdXQuaXMtc3VjY2VzcywKLmhhcy1zdWNjZXNzIC5mb3JtLXNlbGVjdCwKLmZvcm0tc2VsZWN0LmlzLXN1Y2Nlc3MgewogIGJhY2tncm91bmQ6ICNmOWZkZmE7CiAgYm9yZGVyLWNvbG9yOiAjMzJiNjQzOwp9CgouaGFzLXN1Y2Nlc3MgLmZvcm0taW5wdXQ6Zm9jdXMsCi5mb3JtLWlucHV0LmlzLXN1Y2Nlc3M6Zm9jdXMsCi5oYXMtc3VjY2VzcyAuZm9ybS1zZWxlY3Q6Zm9jdXMsCi5mb3JtLXNlbGVjdC5pcy1zdWNjZXNzOmZvY3VzIHsKICBib3gtc2hhZG93OiAwIDAgMCAuMXJlbSByZ2JhKDUwLCAxODIsIDY3LCAuMik7Cn0KCi5oYXMtZXJyb3IgLmZvcm0taW5wdXQsCi5mb3JtLWlucHV0LmlzLWVycm9yLAouaGFzLWVycm9yIC5mb3JtLXNlbGVjdCwKLmZvcm0tc2VsZWN0LmlzLWVycm9yIHsKICBiYWNrZ3JvdW5kOiAjZmZmYWY3OwogIGJvcmRlci1jb2xvcjogI2U4NTYwMDsKfQoKLmhhcy1lcnJvciAuZm9ybS1pbnB1dDpmb2N1cywKLmZvcm0taW5wdXQuaXMtZXJyb3I6Zm9jdXMsCi5oYXMtZXJyb3IgLmZvcm0tc2VsZWN0OmZvY3VzLAouZm9ybS1zZWxlY3QuaXMtZXJyb3I6Zm9jdXMgewogIGJveC1zaGFkb3c6IDAgMCAwIC4xcmVtIHJnYmEoMjMyLCA4NiwgMCwgLjIpOwp9CgouaGFzLWVycm9yIC5mb3JtLWNoZWNrYm94IC5mb3JtLWljb24sCi5mb3JtLWNoZWNrYm94LmlzLWVycm9yIC5mb3JtLWljb24sCi5oYXMtZXJyb3IgLmZvcm0tcmFkaW8gLmZvcm0taWNvbiwKLmZvcm0tcmFkaW8uaXMtZXJyb3IgLmZvcm0taWNvbiwKLmhhcy1lcnJvciAuZm9ybS1zd2l0Y2ggLmZvcm0taWNvbiwKLmZvcm0tc3dpdGNoLmlzLWVycm9yIC5mb3JtLWljb24gewogIGJvcmRlci1jb2xvcjogI2U4NTYwMDsKfQoKLmhhcy1lcnJvciAuZm9ybS1jaGVja2JveCBpbnB1dDpjaGVja2VkICsgLmZvcm0taWNvbiwKLmZvcm0tY2hlY2tib3guaXMtZXJyb3IgaW5wdXQ6Y2hlY2tlZCArIC5mb3JtLWljb24sCi5oYXMtZXJyb3IgLmZvcm0tcmFkaW8gaW5wdXQ6Y2hlY2tlZCArIC5mb3JtLWljb24sCi5mb3JtLXJhZGlvLmlzLWVycm9yIGlucHV0OmNoZWNrZWQgKyAuZm9ybS1pY29uLAouaGFzLWVycm9yIC5mb3JtLXN3aXRjaCBpbnB1dDpjaGVja2VkICsgLmZvcm0taWNvbiwKLmZvcm0tc3dpdGNoLmlzLWVycm9yIGlucHV0OmNoZWNrZWQgKyAuZm9ybS1pY29uIHsKICBiYWNrZ3JvdW5kOiAjZTg1NjAwOwogIGJvcmRlci1jb2xvcjogI2U4NTYwMDsKfQoKLmhhcy1lcnJvciAuZm9ybS1jaGVja2JveCBpbnB1dDpmb2N1cyArIC5mb3JtLWljb24sCi5mb3JtLWNoZWNrYm94LmlzLWVycm9yIGlucHV0OmZvY3VzICsgLmZvcm0taWNvbiwKLmhhcy1lcnJvciAuZm9ybS1yYWRpbyBpbnB1dDpmb2N1cyArIC5mb3JtLWljb24sCi5mb3JtLXJhZGlvLmlzLWVycm9yIGlucHV0OmZvY3VzICsgLmZvcm0taWNvbiwKLmhhcy1lcnJvciAuZm9ybS1zd2l0Y2ggaW5wdXQ6Zm9jdXMgKyAuZm9ybS1pY29uLAouZm9ybS1zd2l0Y2guaXMtZXJyb3IgaW5wdXQ6Zm9jdXMgKyAuZm9ybS1pY29uIHsKICBib3JkZXItY29sb3I6ICNlODU2MDA7IAogIGJveC1zaGFkb3c6IDAgMCAwIC4xcmVtIHJnYmEoMjMyLCA4NiwgMCwgLjIpOwp9CgouaGFzLWVycm9yIC5mb3JtLWNoZWNrYm94IGlucHV0OmluZGV0ZXJtaW5hdGUgKyAuZm9ybS1pY29uLAouZm9ybS1jaGVja2JveC5pcy1lcnJvciBpbnB1dDppbmRldGVybWluYXRlICsgLmZvcm0taWNvbiB7CiAgYmFja2dyb3VuZDogI2U4NTYwMDsKICBib3JkZXItY29sb3I6ICNlODU2MDA7Cn0KCi5mb3JtLWlucHV0Om5vdCg6LW1zLWlucHV0LXBsYWNlaG9sZGVyKTppbnZhbGlkIHsKICBib3JkZXItY29sb3I6ICNlODU2MDA7Cn0KCi5mb3JtLWlucHV0Om5vdCg6cGxhY2Vob2xkZXItc2hvd24pOmludmFsaWQgewogIGJvcmRlci1jb2xvcjogI2U4NTYwMDsKfQoKLmZvcm0taW5wdXQ6bm90KDotbXMtaW5wdXQtcGxhY2Vob2xkZXIpOmludmFsaWQ6Zm9jdXMgewogIGJhY2tncm91bmQ6ICNmZmZhZjc7IAogIGJveC1zaGFkb3c6IDAgMCAwIC4xcmVtIHJnYmEoMjMyLCA4NiwgMCwgLjIpOwp9CgouZm9ybS1pbnB1dDpub3QoOnBsYWNlaG9sZGVyLXNob3duKTppbnZhbGlkOmZvY3VzIHsKICBiYWNrZ3JvdW5kOiAjZmZmYWY3OyAKICBib3gtc2hhZG93OiAwIDAgMCAuMXJlbSByZ2JhKDIzMiwgODYsIDAsIC4yKTsKfQoKLmZvcm0taW5wdXQ6bm90KDotbXMtaW5wdXQtcGxhY2Vob2xkZXIpOmludmFsaWQgKyAuZm9ybS1pbnB1dC1oaW50IHsKICBjb2xvcjogI2U4NTYwMDsKfQoKLmZvcm0taW5wdXQ6bm90KDpwbGFjZWhvbGRlci1zaG93bik6aW52YWxpZCArIC5mb3JtLWlucHV0LWhpbnQgewogIGNvbG9yOiAjZTg1NjAwOwp9CgouZm9ybS1pbnB1dDpkaXNhYmxlZCwKLmZvcm0taW5wdXQuZGlzYWJsZWQsCi5mb3JtLXNlbGVjdDpkaXNhYmxlZCwKLmZvcm0tc2VsZWN0LmRpc2FibGVkIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVmMGYzOwogIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgb3BhY2l0eTogLjU7Cn0KCi5mb3JtLWlucHV0W3JlYWRvbmx5XSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjhmOTsKfQoKaW5wdXQ6ZGlzYWJsZWQgKyAuZm9ybS1pY29uLAppbnB1dC5kaXNhYmxlZCArIC5mb3JtLWljb24gewogIGJhY2tncm91bmQ6ICNlZWYwZjM7CiAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICBvcGFjaXR5OiAuNTsKfQoKLmZvcm0tc3dpdGNoIGlucHV0OmRpc2FibGVkICsgLmZvcm0taWNvbjo6YmVmb3JlLAouZm9ybS1zd2l0Y2ggaW5wdXQuZGlzYWJsZWQgKyAuZm9ybS1pY29uOjpiZWZvcmUgewogIGJhY2tncm91bmQ6ICNmZmY7Cn0KCi5mb3JtLWhvcml6b250YWwgewogIHBhZGRpbmc6IC40cmVtIDA7Cn0KCi5mb3JtLWhvcml6b250YWwgLmZvcm0tZ3JvdXAgewogIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogIGRpc3BsYXk6IGZsZXg7CiAgLW1zLWZsZXgtd3JhcDogd3JhcDsKICBmbGV4LXdyYXA6IHdyYXA7Cn0KCi5mb3JtLWlubGluZSB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CgoubGFiZWwgewogIGJhY2tncm91bmQ6ICNlZWYwZjM7CiAgYm9yZGVyLXJhZGl1czogLjFyZW07CiAgY29sb3I6ICM0NTUwNjA7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOyAKICBsaW5lLWhlaWdodDogMS4yNTsKICBwYWRkaW5nOiAuMXJlbSAuMnJlbTsKfQoKLmxhYmVsLmxhYmVsLXJvdW5kZWQgewogIGJvcmRlci1yYWRpdXM6IDVyZW07CiAgcGFkZGluZy1sZWZ0OiAuNHJlbTsKICBwYWRkaW5nLXJpZ2h0OiAuNHJlbTsKfQoKLmxhYmVsLmxhYmVsLXByaW1hcnkgewogIGJhY2tncm91bmQ6ICM1NzU1ZDk7CiAgY29sb3I6ICNmZmY7Cn0KCi5sYWJlbC5sYWJlbC1zZWNvbmRhcnkgewogIGJhY2tncm91bmQ6ICNmMWYxZmM7CiAgY29sb3I6ICM1NzU1ZDk7Cn0KCi5sYWJlbC5sYWJlbC1zdWNjZXNzIHsKICBiYWNrZ3JvdW5kOiAjMzJiNjQzOwogIGNvbG9yOiAjZmZmOwp9CgoubGFiZWwubGFiZWwtd2FybmluZyB7CiAgYmFja2dyb3VuZDogI2ZmYjcwMDsKICBjb2xvcjogI2ZmZjsKfQoKLmxhYmVsLmxhYmVsLWVycm9yIHsKICBiYWNrZ3JvdW5kOiAjZTg1NjAwOwogIGNvbG9yOiAjZmZmOwp9Cgpjb2RlIHsKICBiYWNrZ3JvdW5kOiAjZmNmMmYyOwogIGJvcmRlci1yYWRpdXM6IC4xcmVtOwogIGNvbG9yOiAjZDczZTQ4OwogIGZvbnQtc2l6ZTogODUlOyAKICBsaW5lLWhlaWdodDogMS4yNTsKICBwYWRkaW5nOiAuMXJlbSAuMnJlbTsKfQoKLmNvZGUgewogIGJvcmRlci1yYWRpdXM6IC4xcmVtOwogIGNvbG9yOiAjM2I0MzUxOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmNvZGU6OmJlZm9yZSB7CiAgY29sb3I6ICNiY2MzY2U7CiAgY29udGVudDogYXR0cihkYXRhLWxhbmcpOwogIGZvbnQtc2l6ZTogLjdyZW07CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiAuNHJlbTsKICB0b3A6IC4xcmVtOwp9CgouY29kZSBjb2RlIHsKICBiYWNrZ3JvdW5kOiAjZjdmOGY5OwogIGNvbG9yOiBpbmhlcml0OwogIGRpc3BsYXk6IGJsb2NrOwogIGxpbmUtaGVpZ2h0OiAxLjU7CiAgb3ZlcmZsb3cteDogYXV0bzsKICBwYWRkaW5nOiAxcmVtOwogIHdpZHRoOiAxMDAlOwp9CgouaW1nLXJlc3BvbnNpdmUgewogIGRpc3BsYXk6IGJsb2NrOwogIGhlaWdodDogYXV0bzsKICBtYXgtd2lkdGg6IDEwMCU7Cn0KCi5pbWctZml0LWNvdmVyIHsKICBvYmplY3QtZml0OiBjb3ZlcjsKfQoKLmltZy1maXQtY29udGFpbiB7CiAgb2JqZWN0LWZpdDogY29udGFpbjsKfQoKLnZpZGVvLXJlc3BvbnNpdmUgewogIGRpc3BsYXk6IGJsb2NrOwogIG92ZXJmbG93OiBoaWRkZW47CiAgcGFkZGluZzogMDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgd2lkdGg6IDEwMCU7Cn0KCi52aWRlby1yZXNwb25zaXZlOjpiZWZvcmUgewogIGNvbnRlbnQ6ICIiOwogIGRpc3BsYXk6IGJsb2NrOwogIHBhZGRpbmctYm90dG9tOiA1Ni4yNSU7Cn0KCi52aWRlby1yZXNwb25zaXZlIGlmcmFtZSwKLnZpZGVvLXJlc3BvbnNpdmUgb2JqZWN0LAoudmlkZW8tcmVzcG9uc2l2ZSBlbWJlZCB7CiAgYm9yZGVyOiAwOwogIGJvdHRvbTogMDsKICBoZWlnaHQ6IDEwMCU7CiAgbGVmdDogMDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgcmlnaHQ6IDA7CiAgdG9wOiAwOwogIHdpZHRoOiAxMDAlOwp9Cgp2aWRlby52aWRlby1yZXNwb25zaXZlIHsKICBoZWlnaHQ6IGF1dG87CiAgbWF4LXdpZHRoOiAxMDAlOwp9Cgp2aWRlby52aWRlby1yZXNwb25zaXZlOjpiZWZvcmUgewogIGNvbnRlbnQ6IG5vbmU7Cn0KCi52aWRlby1yZXNwb25zaXZlLTQtMzo6YmVmb3JlIHsKICBwYWRkaW5nLWJvdHRvbTogNzUlOwp9CgoudmlkZW8tcmVzcG9uc2l2ZS0xLTE6OmJlZm9yZSB7CiAgcGFkZGluZy1ib3R0b206IDEwMCU7Cn0KCi5maWd1cmUgewogIG1hcmdpbjogMCAwIC40cmVtIDA7Cn0KCi5maWd1cmUgLmZpZ3VyZS1jYXB0aW9uIHsKICBjb2xvcjogIzY2NzU4YzsKICBtYXJnaW4tdG9wOiAuNHJlbTsKfQoKLmNvbnRhaW5lciB7CiAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgbWFyZ2luLXJpZ2h0OiBhdXRvOwogIHBhZGRpbmctbGVmdDogLjRyZW07CiAgcGFkZGluZy1yaWdodDogLjRyZW07CiAgd2lkdGg6IDEwMCU7Cn0KCi5jb250YWluZXIuZ3JpZC14bCB7CiAgbWF4LXdpZHRoOiAxMjk2cHg7Cn0KCi5jb250YWluZXIuZ3JpZC1sZyB7CiAgbWF4LXdpZHRoOiA5NzZweDsKfQoKLmNvbnRhaW5lci5ncmlkLW1kIHsKICBtYXgtd2lkdGg6IDg1NnB4Owp9CgouY29udGFpbmVyLmdyaWQtc20gewogIG1heC13aWR0aDogNjE2cHg7Cn0KCi5jb250YWluZXIuZ3JpZC14cyB7CiAgbWF4LXdpZHRoOiA0OTZweDsKfQoKLnNob3cteHMsCi5zaG93LXNtLAouc2hvdy1tZCwKLnNob3ctbGcsCi5zaG93LXhsIHsKICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KCi5jb2xzLAouY29sdW1ucyB7CiAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgZGlzcGxheTogZmxleDsKICAtbXMtZmxleC13cmFwOiB3cmFwOwogIGZsZXgtd3JhcDogd3JhcDsKICBtYXJnaW4tbGVmdDogLS40cmVtOwogIG1hcmdpbi1yaWdodDogLS40cmVtOwp9CgouY29scy5jb2wtZ2FwbGVzcywKLmNvbHVtbnMuY29sLWdhcGxlc3MgewogIG1hcmdpbi1sZWZ0OiAwOwogIG1hcmdpbi1yaWdodDogMDsKfQoKLmNvbHMuY29sLWdhcGxlc3MgPiAuY29sdW1uLAouY29sdW1ucy5jb2wtZ2FwbGVzcyA+IC5jb2x1bW4gewogIHBhZGRpbmctbGVmdDogMDsKICBwYWRkaW5nLXJpZ2h0OiAwOwp9CgouY29scy5jb2wtb25lbGluZSwKLmNvbHVtbnMuY29sLW9uZWxpbmUgewogIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDsKICBmbGV4LXdyYXA6IG5vd3JhcDsKICBvdmVyZmxvdy14OiBhdXRvOwp9CgpbY2xhc3N+PSJjb2wtIl0sCi5jb2x1bW4gewogIC1tcy1mbGV4OiAxOwogIGZsZXg6IDE7CiAgbWF4LXdpZHRoOiAxMDAlOwogIHBhZGRpbmctbGVmdDogLjRyZW07CiAgcGFkZGluZy1yaWdodDogLjRyZW07Cn0KCltjbGFzc349ImNvbC0iXS5jb2wtMTIsCltjbGFzc349ImNvbC0iXS5jb2wtMTEsCltjbGFzc349ImNvbC0iXS5jb2wtMTAsCltjbGFzc349ImNvbC0iXS5jb2wtOSwKW2NsYXNzfj0iY29sLSJdLmNvbC04LApbY2xhc3N+PSJjb2wtIl0uY29sLTcsCltjbGFzc349ImNvbC0iXS5jb2wtNiwKW2NsYXNzfj0iY29sLSJdLmNvbC01LApbY2xhc3N+PSJjb2wtIl0uY29sLTQsCltjbGFzc349ImNvbC0iXS5jb2wtMywKW2NsYXNzfj0iY29sLSJdLmNvbC0yLApbY2xhc3N+PSJjb2wtIl0uY29sLTEsCltjbGFzc349ImNvbC0iXS5jb2wtYXV0bywKLmNvbHVtbi5jb2wtMTIsCi5jb2x1bW4uY29sLTExLAouY29sdW1uLmNvbC0xMCwKLmNvbHVtbi5jb2wtOSwKLmNvbHVtbi5jb2wtOCwKLmNvbHVtbi5jb2wtNywKLmNvbHVtbi5jb2wtNiwKLmNvbHVtbi5jb2wtNSwKLmNvbHVtbi5jb2wtNCwKLmNvbHVtbi5jb2wtMywKLmNvbHVtbi5jb2wtMiwKLmNvbHVtbi5jb2wtMSwKLmNvbHVtbi5jb2wtYXV0byB7CiAgLW1zLWZsZXg6IG5vbmU7CiAgZmxleDogbm9uZTsKfQoKLmNvbC0xMiB7CiAgd2lkdGg6IDEwMCU7Cn0KCi5jb2wtMTEgewogIHdpZHRoOiA5MS42NjY2NjY2NyU7Cn0KCi5jb2wtMTAgewogIHdpZHRoOiA4My4zMzMzMzMzMyU7Cn0KCi5jb2wtOSB7CiAgd2lkdGg6IDc1JTsKfQoKLmNvbC04IHsKICB3aWR0aDogNjYuNjY2NjY2NjclOwp9CgouY29sLTcgewogIHdpZHRoOiA1OC4zMzMzMzMzMyU7Cn0KCi5jb2wtNiB7CiAgd2lkdGg6IDUwJTsKfQoKLmNvbC01IHsKICB3aWR0aDogNDEuNjY2NjY2NjclOwp9CgouY29sLTQgewogIHdpZHRoOiAzMy4zMzMzMzMzMyU7Cn0KCi5jb2wtMyB7CiAgd2lkdGg6IDI1JTsKfQoKLmNvbC0yIHsKICB3aWR0aDogMTYuNjY2NjY2NjclOwp9CgouY29sLTEgewogIHdpZHRoOiA4LjMzMzMzMzMzJTsKfQoKLmNvbC1hdXRvIHsKICAtbXMtZmxleDogMCAwIGF1dG87CiAgZmxleDogMCAwIGF1dG87CiAgbWF4LXdpZHRoOiBub25lOwogIHdpZHRoOiBhdXRvOwp9CgouY29sLW14LWF1dG8gewogIG1hcmdpbi1sZWZ0OiBhdXRvOwogIG1hcmdpbi1yaWdodDogYXV0bzsKfQoKLmNvbC1tbC1hdXRvIHsKICBtYXJnaW4tbGVmdDogYXV0bzsKfQoKLmNvbC1tci1hdXRvIHsKICBtYXJnaW4tcmlnaHQ6IGF1dG87Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiAxMjgwcHgpIHsKICAuY29sLXhsLTEyLAogIC5jb2wteGwtMTEsCiAgLmNvbC14bC0xMCwKICAuY29sLXhsLTksCiAgLmNvbC14bC04LAogIC5jb2wteGwtNywKICAuY29sLXhsLTYsCiAgLmNvbC14bC01LAogIC5jb2wteGwtNCwKICAuY29sLXhsLTMsCiAgLmNvbC14bC0yLAogIC5jb2wteGwtMSwKICAuY29sLXhsLWF1dG8gewogICAgLW1zLWZsZXg6IG5vbmU7CiAgICBmbGV4OiBub25lOwogIH0KICAuY29sLXhsLTEyIHsKICAgIHdpZHRoOiAxMDAlOwogIH0KICAuY29sLXhsLTExIHsKICAgIHdpZHRoOiA5MS42NjY2NjY2NyU7CiAgfQogIC5jb2wteGwtMTAgewogICAgd2lkdGg6IDgzLjMzMzMzMzMzJTsKICB9CiAgLmNvbC14bC05IHsKICAgIHdpZHRoOiA3NSU7CiAgfQogIC5jb2wteGwtOCB7CiAgICB3aWR0aDogNjYuNjY2NjY2NjclOwogIH0KICAuY29sLXhsLTcgewogICAgd2lkdGg6IDU4LjMzMzMzMzMzJTsKICB9CiAgLmNvbC14bC02IHsKICAgIHdpZHRoOiA1MCU7CiAgfQogIC5jb2wteGwtNSB7CiAgICB3aWR0aDogNDEuNjY2NjY2NjclOwogIH0KICAuY29sLXhsLTQgewogICAgd2lkdGg6IDMzLjMzMzMzMzMzJTsKICB9CiAgLmNvbC14bC0zIHsKICAgIHdpZHRoOiAyNSU7CiAgfQogIC5jb2wteGwtMiB7CiAgICB3aWR0aDogMTYuNjY2NjY2NjclOwogIH0KICAuY29sLXhsLTEgewogICAgd2lkdGg6IDguMzMzMzMzMzMlOwogIH0KICAuY29sLXhsLWF1dG8gewogICAgd2lkdGg6IGF1dG87CiAgfQogIC5oaWRlLXhsIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICB9CiAgLnNob3cteGwgewogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICB9Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA5NjBweCkgewogIC5jb2wtbGctMTIsCiAgLmNvbC1sZy0xMSwKICAuY29sLWxnLTEwLAogIC5jb2wtbGctOSwKICAuY29sLWxnLTgsCiAgLmNvbC1sZy03LAogIC5jb2wtbGctNiwKICAuY29sLWxnLTUsCiAgLmNvbC1sZy00LAogIC5jb2wtbGctMywKICAuY29sLWxnLTIsCiAgLmNvbC1sZy0xLAogIC5jb2wtbGctYXV0byB7CiAgICAtbXMtZmxleDogbm9uZTsKICAgIGZsZXg6IG5vbmU7CiAgfQogIC5jb2wtbGctMTIgewogICAgd2lkdGg6IDEwMCU7CiAgfQogIC5jb2wtbGctMTEgewogICAgd2lkdGg6IDkxLjY2NjY2NjY3JTsKICB9CiAgLmNvbC1sZy0xMCB7CiAgICB3aWR0aDogODMuMzMzMzMzMzMlOwogIH0KICAuY29sLWxnLTkgewogICAgd2lkdGg6IDc1JTsKICB9CiAgLmNvbC1sZy04IHsKICAgIHdpZHRoOiA2Ni42NjY2NjY2NyU7CiAgfQogIC5jb2wtbGctNyB7CiAgICB3aWR0aDogNTguMzMzMzMzMzMlOwogIH0KICAuY29sLWxnLTYgewogICAgd2lkdGg6IDUwJTsKICB9CiAgLmNvbC1sZy01IHsKICAgIHdpZHRoOiA0MS42NjY2NjY2NyU7CiAgfQogIC5jb2wtbGctNCB7CiAgICB3aWR0aDogMzMuMzMzMzMzMzMlOwogIH0KICAuY29sLWxnLTMgewogICAgd2lkdGg6IDI1JTsKICB9CiAgLmNvbC1sZy0yIHsKICAgIHdpZHRoOiAxNi42NjY2NjY2NyU7CiAgfQogIC5jb2wtbGctMSB7CiAgICB3aWR0aDogOC4zMzMzMzMzMyU7CiAgfQogIC5jb2wtbGctYXV0byB7CiAgICB3aWR0aDogYXV0bzsKICB9CiAgLmhpZGUtbGcgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogIH0KICAuc2hvdy1sZyB7CiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogIH0KfQoKQG1lZGlhIChtYXgtd2lkdGg6IDg0MHB4KSB7CiAgLmNvbC1tZC0xMiwKICAuY29sLW1kLTExLAogIC5jb2wtbWQtMTAsCiAgLmNvbC1tZC05LAogIC5jb2wtbWQtOCwKICAuY29sLW1kLTcsCiAgLmNvbC1tZC02LAogIC5jb2wtbWQtNSwKICAuY29sLW1kLTQsCiAgLmNvbC1tZC0zLAogIC5jb2wtbWQtMiwKICAuY29sLW1kLTEsCiAgLmNvbC1tZC1hdXRvIHsKICAgIC1tcy1mbGV4OiBub25lOwogICAgZmxleDogbm9uZTsKICB9CiAgLmNvbC1tZC0xMiB7CiAgICB3aWR0aDogMTAwJTsKICB9CiAgLmNvbC1tZC0xMSB7CiAgICB3aWR0aDogOTEuNjY2NjY2NjclOwogIH0KICAuY29sLW1kLTEwIHsKICAgIHdpZHRoOiA4My4zMzMzMzMzMyU7CiAgfQogIC5jb2wtbWQtOSB7CiAgICB3aWR0aDogNzUlOwogIH0KICAuY29sLW1kLTggewogICAgd2lkdGg6IDY2LjY2NjY2NjY3JTsKICB9CiAgLmNvbC1tZC03IHsKICAgIHdpZHRoOiA1OC4zMzMzMzMzMyU7CiAgfQogIC5jb2wtbWQtNiB7CiAgICB3aWR0aDogNTAlOwogIH0KICAuY29sLW1kLTUgewogICAgd2lkdGg6IDQxLjY2NjY2NjY3JTsKICB9CiAgLmNvbC1tZC00IHsKICAgIHdpZHRoOiAzMy4zMzMzMzMzMyU7CiAgfQogIC5jb2wtbWQtMyB7CiAgICB3aWR0aDogMjUlOwogIH0KICAuY29sLW1kLTIgewogICAgd2lkdGg6IDE2LjY2NjY2NjY3JTsKICB9CiAgLmNvbC1tZC0xIHsKICAgIHdpZHRoOiA4LjMzMzMzMzMzJTsKICB9CiAgLmNvbC1tZC1hdXRvIHsKICAgIHdpZHRoOiBhdXRvOwogIH0KICAuaGlkZS1tZCB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQogIC5zaG93LW1kIHsKICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgfQp9CgpAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHsKICAuY29sLXNtLTEyLAogIC5jb2wtc20tMTEsCiAgLmNvbC1zbS0xMCwKICAuY29sLXNtLTksCiAgLmNvbC1zbS04LAogIC5jb2wtc20tNywKICAuY29sLXNtLTYsCiAgLmNvbC1zbS01LAogIC5jb2wtc20tNCwKICAuY29sLXNtLTMsCiAgLmNvbC1zbS0yLAogIC5jb2wtc20tMSwKICAuY29sLXNtLWF1dG8gewogICAgLW1zLWZsZXg6IG5vbmU7CiAgICBmbGV4OiBub25lOwogIH0KICAuY29sLXNtLTEyIHsKICAgIHdpZHRoOiAxMDAlOwogIH0KICAuY29sLXNtLTExIHsKICAgIHdpZHRoOiA5MS42NjY2NjY2NyU7CiAgfQogIC5jb2wtc20tMTAgewogICAgd2lkdGg6IDgzLjMzMzMzMzMzJTsKICB9CiAgLmNvbC1zbS05IHsKICAgIHdpZHRoOiA3NSU7CiAgfQogIC5jb2wtc20tOCB7CiAgICB3aWR0aDogNjYuNjY2NjY2NjclOwogIH0KICAuY29sLXNtLTcgewogICAgd2lkdGg6IDU4LjMzMzMzMzMzJTsKICB9CiAgLmNvbC1zbS02IHsKICAgIHdpZHRoOiA1MCU7CiAgfQogIC5jb2wtc20tNSB7CiAgICB3aWR0aDogNDEuNjY2NjY2NjclOwogIH0KICAuY29sLXNtLTQgewogICAgd2lkdGg6IDMzLjMzMzMzMzMzJTsKICB9CiAgLmNvbC1zbS0zIHsKICAgIHdpZHRoOiAyNSU7CiAgfQogIC5jb2wtc20tMiB7CiAgICB3aWR0aDogMTYuNjY2NjY2NjclOwogIH0KICAuY29sLXNtLTEgewogICAgd2lkdGg6IDguMzMzMzMzMzMlOwogIH0KICAuY29sLXNtLWF1dG8gewogICAgd2lkdGg6IGF1dG87CiAgfQogIC5oaWRlLXNtIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICB9CiAgLnNob3ctc20gewogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICB9Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkgewogIC5jb2wteHMtMTIsCiAgLmNvbC14cy0xMSwKICAuY29sLXhzLTEwLAogIC5jb2wteHMtOSwKICAuY29sLXhzLTgsCiAgLmNvbC14cy03LAogIC5jb2wteHMtNiwKICAuY29sLXhzLTUsCiAgLmNvbC14cy00LAogIC5jb2wteHMtMywKICAuY29sLXhzLTIsCiAgLmNvbC14cy0xLAogIC5jb2wteHMtYXV0byB7CiAgICAtbXMtZmxleDogbm9uZTsKICAgIGZsZXg6IG5vbmU7CiAgfQogIC5jb2wteHMtMTIgewogICAgd2lkdGg6IDEwMCU7CiAgfQogIC5jb2wteHMtMTEgewogICAgd2lkdGg6IDkxLjY2NjY2NjY3JTsKICB9CiAgLmNvbC14cy0xMCB7CiAgICB3aWR0aDogODMuMzMzMzMzMzMlOwogIH0KICAuY29sLXhzLTkgewogICAgd2lkdGg6IDc1JTsKICB9CiAgLmNvbC14cy04IHsKICAgIHdpZHRoOiA2Ni42NjY2NjY2NyU7CiAgfQogIC5jb2wteHMtNyB7CiAgICB3aWR0aDogNTguMzMzMzMzMzMlOwogIH0KICAuY29sLXhzLTYgewogICAgd2lkdGg6IDUwJTsKICB9CiAgLmNvbC14cy01IHsKICAgIHdpZHRoOiA0MS42NjY2NjY2NyU7CiAgfQogIC5jb2wteHMtNCB7CiAgICB3aWR0aDogMzMuMzMzMzMzMzMlOwogIH0KICAuY29sLXhzLTMgewogICAgd2lkdGg6IDI1JTsKICB9CiAgLmNvbC14cy0yIHsKICAgIHdpZHRoOiAxNi42NjY2NjY2NyU7CiAgfQogIC5jb2wteHMtMSB7CiAgICB3aWR0aDogOC4zMzMzMzMzMyU7CiAgfQogIC5jb2wteHMtYXV0byB7CiAgICB3aWR0aDogYXV0bzsKICB9CiAgLmhpZGUteHMgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogIH0KICAuc2hvdy14cyB7CiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogIH0KfQoKLmhlcm8gewogIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogIGRpc3BsYXk6IGZsZXg7CiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5OwogIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICBwYWRkaW5nLWJvdHRvbTogNHJlbTsKICBwYWRkaW5nLXRvcDogNHJlbTsKfQoKLmhlcm8uaGVyby1zbSB7CiAgcGFkZGluZy1ib3R0b206IDJyZW07CiAgcGFkZGluZy10b3A6IDJyZW07Cn0KCi5oZXJvLmhlcm8tbGcgewogIHBhZGRpbmctYm90dG9tOiA4cmVtOwogIHBhZGRpbmctdG9wOiA4cmVtOwp9CgouaGVybyAuaGVyby1ib2R5IHsKICBwYWRkaW5nOiAuNHJlbTsKfQoKLm5hdmJhciB7CiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgZGlzcGxheTogZmxleDsKICAtbXMtZmxleC1hbGlnbjogc3RyZXRjaDsKICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5OwogIC1tcy1mbGV4LXdyYXA6IHdyYXA7CiAgZmxleC13cmFwOiB3cmFwOwogIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKfQoKLm5hdmJhciAubmF2YmFyLXNlY3Rpb24gewogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgZGlzcGxheTogZmxleDsKICAtbXMtZmxleDogMSAwIDA7CiAgZmxleDogMSAwIDA7IAogIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7Cn0KCi5uYXZiYXIgLm5hdmJhci1zZWN0aW9uOm5vdCg6Zmlyc3QtY2hpbGQpOmxhc3QtY2hpbGQgewogIC1tcy1mbGV4LXBhY2s6IGVuZDsKICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwp9CgoubmF2YmFyIC5uYXZiYXItY2VudGVyIHsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogIGRpc3BsYXk6IGZsZXg7CiAgLW1zLWZsZXg6IDAgMCBhdXRvOwogIGZsZXg6IDAgMCBhdXRvOyAKICAtbXMtZmxleC1hbGlnbjogY2VudGVyOwp9CgoubmF2YmFyIC5uYXZiYXItYnJhbmQgewogIGZvbnQtc2l6ZTogLjlyZW07CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CgouYWNjb3JkaW9uIGlucHV0OmNoZWNrZWQgfiAuYWNjb3JkaW9uLWhlYWRlciA+IC5pY29uOmZpcnN0LWNoaWxkLAouYWNjb3JkaW9uW29wZW5dIC5hY2NvcmRpb24taGVhZGVyID4gLmljb246Zmlyc3QtY2hpbGQgewogIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKfQoKLmFjY29yZGlvbiBpbnB1dDpjaGVja2VkIH4gLmFjY29yZGlvbi1ib2R5LAouYWNjb3JkaW9uW29wZW5dIC5hY2NvcmRpb24tYm9keSB7CiAgbWF4LWhlaWdodDogNTByZW07Cn0KCi5hY2NvcmRpb24gLmFjY29yZGlvbi1oZWFkZXIgewogIGRpc3BsYXk6IGJsb2NrOwogIHBhZGRpbmc6IC4ycmVtIC40cmVtOwp9CgouYWNjb3JkaW9uIC5hY2NvcmRpb24taGVhZGVyIC5pY29uIHsKICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjI1czsKfQoKLmFjY29yZGlvbiAuYWNjb3JkaW9uLWJvZHkgewogIG1hcmdpbi1ib3R0b206IC40cmVtOwogIG1heC1oZWlnaHQ6IDA7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICB0cmFuc2l0aW9uOiBtYXgtaGVpZ2h0IC4yNXM7Cn0KCnN1bW1hcnkuYWNjb3JkaW9uLWhlYWRlcjo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlciB7CiAgZGlzcGxheTogbm9uZTsKfQoKLmF2YXRhciB7CiAgYmFja2dyb3VuZDogIzU3NTVkOTsKICBib3JkZXItcmFkaXVzOiA1MCU7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjg1KTsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZm9udC1zaXplOiAuOHJlbTsKICBmb250LXdlaWdodDogMzAwOwogIGhlaWdodDogMS42cmVtOwogIGxpbmUtaGVpZ2h0OiAxLjI1OwogIG1hcmdpbjogMDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgCiAgd2lkdGg6IDEuNnJlbTsKfQoKLmF2YXRhci5hdmF0YXIteHMgewogIGZvbnQtc2l6ZTogLjRyZW07CiAgaGVpZ2h0OiAuOHJlbTsKICB3aWR0aDogLjhyZW07Cn0KCi5hdmF0YXIuYXZhdGFyLXNtIHsKICBmb250LXNpemU6IC42cmVtOwogIGhlaWdodDogMS4ycmVtOwogIHdpZHRoOiAxLjJyZW07Cn0KCi5hdmF0YXIuYXZhdGFyLWxnIHsKICBmb250LXNpemU6IDEuMnJlbTsKICBoZWlnaHQ6IDIuNHJlbTsKICB3aWR0aDogMi40cmVtOwp9CgouYXZhdGFyLmF2YXRhci14bCB7CiAgZm9udC1zaXplOiAxLjZyZW07CiAgaGVpZ2h0OiAzLjJyZW07CiAgd2lkdGg6IDMuMnJlbTsKfQoKLmF2YXRhciBpbWcgewogIGJvcmRlci1yYWRpdXM6IDUwJTsKICBoZWlnaHQ6IDEwMCU7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHdpZHRoOiAxMDAlOwogIHotaW5kZXg6IDE7Cn0KCi5hdmF0YXIgLmF2YXRhci1pY29uLAouYXZhdGFyIC5hdmF0YXItcHJlc2VuY2UgewogIGJhY2tncm91bmQ6ICNmZmY7CiAgYm90dG9tOiAxNC42NCU7CiAgaGVpZ2h0OiA1MCU7CiAgcGFkZGluZzogLjFyZW07CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiAxNC42NCU7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNTAlLCA1MCUpOwogIHdpZHRoOiA1MCU7CiAgei1pbmRleDogMjsKfQoKLmF2YXRhciAuYXZhdGFyLXByZXNlbmNlIHsKICBiYWNrZ3JvdW5kOiAjYmNjM2NlOwogIGJvcmRlci1yYWRpdXM6IDUwJTsKICBib3gtc2hhZG93OiAwIDAgMCAuMXJlbSAjZmZmOwogIGhlaWdodDogLjVlbTsKICB3aWR0aDogLjVlbTsKfQoKLmF2YXRhciAuYXZhdGFyLXByZXNlbmNlLm9ubGluZSB7CiAgYmFja2dyb3VuZDogIzMyYjY0MzsKfQoKLmF2YXRhciAuYXZhdGFyLXByZXNlbmNlLmJ1c3kgewogIGJhY2tncm91bmQ6ICNlODU2MDA7Cn0KCi5hdmF0YXIgLmF2YXRhci1wcmVzZW5jZS5hd2F5IHsKICBiYWNrZ3JvdW5kOiAjZmZiNzAwOwp9CgouYXZhdGFyW2RhdGEtaW5pdGlhbF06OmJlZm9yZSB7CiAgY29sb3I6IGN1cnJlbnRDb2xvcjsKICBjb250ZW50OiBhdHRyKGRhdGEtaW5pdGlhbCk7CiAgbGVmdDogNTAlOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDUwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICB6LWluZGV4OiAxOwp9CgouYmFkZ2UgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgouYmFkZ2VbZGF0YS1iYWRnZV06OmFmdGVyLAouYmFkZ2U6bm90KFtkYXRhLWJhZGdlXSk6OmFmdGVyIHsKICBiYWNrZ3JvdW5kOiAjNTc1NWQ5OwogIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7CiAgYm9yZGVyLXJhZGl1czogLjVyZW07CiAgYm94LXNoYWRvdzogMCAwIDAgLjFyZW0gI2ZmZjsKICBjb2xvcjogI2ZmZjsKICBjb250ZW50OiBhdHRyKGRhdGEtYmFkZ2UpOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtLjA1cmVtLCAtLjVyZW0pOwp9CgouYmFkZ2VbZGF0YS1iYWRnZV06OmFmdGVyIHsKICBmb250LXNpemU6IC43cmVtOwogIGhlaWdodDogLjlyZW07CiAgbGluZS1oZWlnaHQ6IDE7CiAgbWluLXdpZHRoOiAuOXJlbTsKICBwYWRkaW5nOiAuMXJlbSAuMnJlbTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLmJhZGdlOm5vdChbZGF0YS1iYWRnZV0pOjphZnRlciwKLmJhZGdlW2RhdGEtYmFkZ2U9IiJdOjphZnRlciB7CiAgaGVpZ2h0OiA2cHg7CiAgbWluLXdpZHRoOiA2cHg7CiAgcGFkZGluZzogMDsKICB3aWR0aDogNnB4Owp9CgouYmFkZ2UuYnRuOjphZnRlciB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiAwOwogIHRvcDogMDsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MCUsIC01MCUpOwp9CgouYmFkZ2UuYXZhdGFyOjphZnRlciB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiAxNC42NCU7CiAgdG9wOiAxNC42NCU7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNTAlLCAtNTAlKTsKICB6LWluZGV4OiAxMDA7Cn0KCi5icmVhZGNydW1iIHsKICBsaXN0LXN0eWxlOiBub25lOwogIG1hcmdpbjogLjJyZW0gMDsKICBwYWRkaW5nOiAuMnJlbSAwOwp9CgouYnJlYWRjcnVtYiAuYnJlYWRjcnVtYi1pdGVtIHsKICBjb2xvcjogIzY2NzU4YzsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IC4ycmVtIDA7Cn0KCi5icmVhZGNydW1iIC5icmVhZGNydW1iLWl0ZW06bm90KDpsYXN0LWNoaWxkKSB7CiAgbWFyZ2luLXJpZ2h0OiAuMnJlbTsKfQoKLmJyZWFkY3J1bWIgLmJyZWFkY3J1bWItaXRlbTpub3QoOmxhc3QtY2hpbGQpIGEgewogIGNvbG9yOiAjNjY3NThjOwp9CgouYnJlYWRjcnVtYiAuYnJlYWRjcnVtYi1pdGVtOm5vdCg6Zmlyc3QtY2hpbGQpOjpiZWZvcmUgewogIGNvbG9yOiAjNjY3NThjOwogIGNvbnRlbnQ6ICIvIjsKICBwYWRkaW5nLXJpZ2h0OiAuNHJlbTsKfQoKLmJhciB7CiAgYmFja2dyb3VuZDogI2VlZjBmMzsKICBib3JkZXItcmFkaXVzOiAuMXJlbTsKICBkaXNwbGF5OiAtbXMtZmxleGJveDsKICBkaXNwbGF5OiBmbGV4OwogIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDsKICBmbGV4LXdyYXA6IG5vd3JhcDsKICBoZWlnaHQ6IC44cmVtOwogIHdpZHRoOiAxMDAlOwp9CgouYmFyLmJhci1zbSB7CiAgaGVpZ2h0OiAuMnJlbTsKfQoKLmJhciAuYmFyLWl0ZW0gewogIGJhY2tncm91bmQ6ICM1NzU1ZDk7CiAgY29sb3I6ICNmZmY7CiAgZGlzcGxheTogYmxvY2s7CiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7CiAgZmxleC1zaHJpbms6IDA7CiAgZm9udC1zaXplOiAuN3JlbTsKICBoZWlnaHQ6IDEwMCU7CiAgbGluZS1oZWlnaHQ6IC44cmVtOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgd2lkdGg6IDA7Cn0KCi5iYXIgLmJhci1pdGVtOmZpcnN0LWNoaWxkIHsKICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAuMXJlbTsKICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAuMXJlbTsKfQoKLmJhciAuYmFyLWl0ZW06bGFzdC1jaGlsZCB7CiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IC4xcmVtOwogIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAuMXJlbTsKICAtbXMtZmxleC1uZWdhdGl2ZTogMTsKICBmbGV4LXNocmluazogMTsKfQoKLmJhci1zbGlkZXIgewogIGhlaWdodDogLjFyZW07CiAgbWFyZ2luOiAuNHJlbSAwOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmJhci1zbGlkZXIgLmJhci1pdGVtIHsKICBsZWZ0OiAwOwogIHBhZGRpbmc6IDA7CiAgcG9zaXRpb246IGFic29sdXRlOwp9CgouYmFyLXNsaWRlciAuYmFyLWl0ZW06bm90KDpsYXN0LWNoaWxkKTpmaXJzdC1jaGlsZCB7CiAgYmFja2dyb3VuZDogI2VlZjBmMzsKICB6LWluZGV4OiAxOwp9CgouYmFyLXNsaWRlciAuYmFyLXNsaWRlci1idG4gewogIGJhY2tncm91bmQ6ICM1NzU1ZDk7CiAgYm9yZGVyOiAwOwogIGJvcmRlci1yYWRpdXM6IDUwJTsKICBoZWlnaHQ6IC42cmVtOwogIHBhZGRpbmc6IDA7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiAwOwogIHRvcDogNTAlOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKDUwJSwgLTUwJSk7CiAgd2lkdGg6IC42cmVtOwp9CgouYmFyLXNsaWRlciAuYmFyLXNsaWRlci1idG46YWN0aXZlIHsKICBib3gtc2hhZG93OiAwIDAgMCAuMXJlbSAjNTc1NWQ5Owp9CgouY2FyZCB7CiAgYmFja2dyb3VuZDogI2ZmZjsKICBib3JkZXI6IC4wNXJlbSBzb2xpZCAjZGFkZWU0OwogIGJvcmRlci1yYWRpdXM6IC4xcmVtOwogIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogIGRpc3BsYXk6IGZsZXg7CiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKfQoKLmNhcmQgLmNhcmQtaGVhZGVyLAouY2FyZCAuY2FyZC1ib2R5LAouY2FyZCAuY2FyZC1mb290ZXIgewogIHBhZGRpbmc6IC44cmVtOwogIHBhZGRpbmctYm90dG9tOiAwOwp9CgouY2FyZCAuY2FyZC1oZWFkZXI6bGFzdC1jaGlsZCwKLmNhcmQgLmNhcmQtYm9keTpsYXN0LWNoaWxkLAouY2FyZCAuY2FyZC1mb290ZXI6bGFzdC1jaGlsZCB7CiAgcGFkZGluZy1ib3R0b206IC44cmVtOwp9CgouY2FyZCAuY2FyZC1ib2R5IHsKICAtbXMtZmxleDogMSAxIGF1dG87CiAgZmxleDogMSAxIGF1dG87Cn0KCi5jYXJkIC5jYXJkLWltYWdlIHsKICBwYWRkaW5nLXRvcDogLjhyZW07Cn0KCi5jYXJkIC5jYXJkLWltYWdlOmZpcnN0LWNoaWxkIHsKICBwYWRkaW5nLXRvcDogMDsKfQoKLmNhcmQgLmNhcmQtaW1hZ2U6Zmlyc3QtY2hpbGQgaW1nIHsKICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAuMXJlbTsKICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogLjFyZW07Cn0KCi5jYXJkIC5jYXJkLWltYWdlOmxhc3QtY2hpbGQgaW1nIHsKICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAuMXJlbTsKICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogLjFyZW07Cn0KCi5jaGlwIHsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIGJhY2tncm91bmQ6ICNlZWYwZjM7CiAgYm9yZGVyLXJhZGl1czogNXJlbTsKICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjsKICBmb250LXNpemU6IDkwJTsKICBoZWlnaHQ6IDEuMnJlbTsKICBsaW5lLWhlaWdodDogLjhyZW07CiAgbWFyZ2luOiAuMXJlbTsKICBtYXgtd2lkdGg6IDMyMHB4OwogIG92ZXJmbG93OiBoaWRkZW47CiAgcGFkZGluZzogLjJyZW0gLjRyZW07CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLmNoaXAuYWN0aXZlIHsKICBiYWNrZ3JvdW5kOiAjNTc1NWQ5OwogIGNvbG9yOiAjZmZmOwp9CgouY2hpcCAuYXZhdGFyIHsKICBtYXJnaW4tbGVmdDogLS40cmVtOwogIG1hcmdpbi1yaWdodDogLjJyZW07Cn0KCi5jaGlwIC5idG4tY2xlYXIgewogIGJvcmRlci1yYWRpdXM6IDUwJTsKICB0cmFuc2Zvcm06IHNjYWxlKC43NSk7Cn0KCi5kcm9wZG93biB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmRyb3Bkb3duIC5tZW51IHsKICBhbmltYXRpb246IHNsaWRlLWRvd24gLjE1cyBlYXNlIDE7CiAgZGlzcGxheTogbm9uZTsKICBsZWZ0OiAwOwogIG1heC1oZWlnaHQ6IDUwdmg7CiAgb3ZlcmZsb3cteTogYXV0bzsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAxMDAlOwp9CgouZHJvcGRvd24uZHJvcGRvd24tcmlnaHQgLm1lbnUgewogIGxlZnQ6IGF1dG87CiAgcmlnaHQ6IDA7Cn0KCi5kcm9wZG93bi5hY3RpdmUgLm1lbnUsCi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlOmZvY3VzICsgLm1lbnUsCi5kcm9wZG93biAubWVudTpob3ZlciB7CiAgZGlzcGxheTogYmxvY2s7Cn0KCi5kcm9wZG93biAuYnRuLWdyb3VwIC5kcm9wZG93bi10b2dnbGU6bnRoLWxhc3QtY2hpbGQoMikgewogIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAuMXJlbTsKICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogLjFyZW07Cn0KCi5lbXB0eSB7CiAgYmFja2dyb3VuZDogI2Y3ZjhmOTsKICBib3JkZXItcmFkaXVzOiAuMXJlbTsKICBjb2xvcjogIzY2NzU4YzsKICBwYWRkaW5nOiAzLjJyZW0gMS42cmVtOyAKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5lbXB0eSAuZW1wdHktaWNvbiB7CiAgbWFyZ2luLWJvdHRvbTogLjhyZW07Cn0KCi5lbXB0eSAuZW1wdHktdGl0bGUsCi5lbXB0eSAuZW1wdHktc3VidGl0bGUgewogIG1hcmdpbjogLjRyZW0gYXV0bzsKfQoKLmVtcHR5IC5lbXB0eS1hY3Rpb24gewogIG1hcmdpbi10b3A6IC44cmVtOwp9CgoubWVudSB7CiAgYmFja2dyb3VuZDogI2ZmZjsKICBib3JkZXItcmFkaXVzOiAuMXJlbTsKICBib3gtc2hhZG93OiAwIC4wNXJlbSAuMnJlbSByZ2JhKDQ4LCA1NSwgNjYsIC4zKTsKICBsaXN0LXN0eWxlOiBub25lOwogIG1hcmdpbjogMDsKICBtaW4td2lkdGg6IDE4MHB4OwogIHBhZGRpbmc6IC40cmVtOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSguMnJlbSk7CiAgei1pbmRleDogMzAwOwp9CgoubWVudS5tZW51LW5hdiB7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgYm94LXNoYWRvdzogbm9uZTsKfQoKLm1lbnUgLm1lbnUtaXRlbSB7CiAgbWFyZ2luLXRvcDogMDsKICBwYWRkaW5nOiAwIC40cmVtOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCi5tZW51IC5tZW51LWl0ZW0gPiBhIHsKICBib3JkZXItcmFkaXVzOiAuMXJlbTsKICBjb2xvcjogaW5oZXJpdDsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW46IDAgLS40cmVtOwogIHBhZGRpbmc6IC4ycmVtIC40cmVtOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKLm1lbnUgLm1lbnUtaXRlbSA+IGE6Zm9jdXMsCi5tZW51IC5tZW51LWl0ZW0gPiBhOmhvdmVyIHsKICBiYWNrZ3JvdW5kOiAjZjFmMWZjOwogIGNvbG9yOiAjNTc1NWQ5Owp9CgoubWVudSAubWVudS1pdGVtID4gYTphY3RpdmUsCi5tZW51IC5tZW51LWl0ZW0gPiBhLmFjdGl2ZSB7CiAgYmFja2dyb3VuZDogI2YxZjFmYzsKICBjb2xvcjogIzU3NTVkOTsKfQoKLm1lbnUgLm1lbnUtaXRlbSAuZm9ybS1jaGVja2JveCwKLm1lbnUgLm1lbnUtaXRlbSAuZm9ybS1yYWRpbywKLm1lbnUgLm1lbnUtaXRlbSAuZm9ybS1zd2l0Y2ggewogIG1hcmdpbjogLjFyZW0gMDsKfQoKLm1lbnUgLm1lbnUtaXRlbSArIC5tZW51LWl0ZW0gewogIG1hcmdpbi10b3A6IC4ycmVtOwp9CgoubWVudSAubWVudS1iYWRnZSB7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICBkaXNwbGF5OiAtbXMtZmxleGJveDsKICBkaXNwbGF5OiBmbGV4OwogIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgaGVpZ2h0OiAxMDAlOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICByaWdodDogMDsKICB0b3A6IDA7Cn0KCi5tZW51IC5tZW51LWJhZGdlIC5sYWJlbCB7CiAgbWFyZ2luLXJpZ2h0OiAuNHJlbTsKfQoKLm1vZGFsIHsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIGJvdHRvbTogMDsKICBkaXNwbGF5OiBub25lOwogIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgLW1zLWZsZXgtcGFjazogY2VudGVyOwogIGp1c3RpZnktY29udGVudDogY2VudGVyOwogIGxlZnQ6IDA7CiAgb3BhY2l0eTogMDsKICBvdmVyZmxvdzogaGlkZGVuOwogIHBhZGRpbmc6IC40cmVtOwogIHBvc2l0aW9uOiBmaXhlZDsKICByaWdodDogMDsKICB0b3A6IDA7Cn0KCi5tb2RhbDp0YXJnZXQsCi5tb2RhbC5hY3RpdmUgewogIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogIGRpc3BsYXk6IGZsZXg7CiAgb3BhY2l0eTogMTsKICB6LWluZGV4OiA0MDA7Cn0KCi5tb2RhbDp0YXJnZXQgLm1vZGFsLW92ZXJsYXksCi5tb2RhbC5hY3RpdmUgLm1vZGFsLW92ZXJsYXkgewogIGJhY2tncm91bmQ6IHJnYmEoMjQ3LCAyNDgsIDI0OSwgLjc1KTsKICBib3R0b206IDA7CiAgY3Vyc29yOiBkZWZhdWx0OwogIGRpc3BsYXk6IGJsb2NrOwogIGxlZnQ6IDA7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiAwOwogIHRvcDogMDsKfQoKLm1vZGFsOnRhcmdldCAubW9kYWwtY29udGFpbmVyLAoubW9kYWwuYWN0aXZlIC5tb2RhbC1jb250YWluZXIgewogIGFuaW1hdGlvbjogc2xpZGUtZG93biAuMnMgZWFzZSAxOwogIHotaW5kZXg6IDE7Cn0KCi5tb2RhbC5tb2RhbC1zbSAubW9kYWwtY29udGFpbmVyIHsKICBtYXgtd2lkdGg6IDMyMHB4OwogIHBhZGRpbmc6IDAgLjRyZW07Cn0KCi5tb2RhbC5tb2RhbC1sZyAubW9kYWwtb3ZlcmxheSB7CiAgYmFja2dyb3VuZDogI2ZmZjsKfQoKLm1vZGFsLm1vZGFsLWxnIC5tb2RhbC1jb250YWluZXIgewogIGJveC1zaGFkb3c6IG5vbmU7CiAgbWF4LXdpZHRoOiA5NjBweDsKfQoKLm1vZGFsLWNvbnRhaW5lciB7CiAgYmFja2dyb3VuZDogI2ZmZjsKICBib3JkZXItcmFkaXVzOiAuMXJlbTsKICBib3gtc2hhZG93OiAwIC4ycmVtIC41cmVtIHJnYmEoNDgsIDU1LCA2NiwgLjMpOwogIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogIGRpc3BsYXk6IGZsZXg7CiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICBtYXgtaGVpZ2h0OiA3NXZoOwogIG1heC13aWR0aDogNjQwcHg7CiAgcGFkZGluZzogMCAuOHJlbTsKICB3aWR0aDogMTAwJTsKfQoKLm1vZGFsLWNvbnRhaW5lci5tb2RhbC1mdWxsaGVpZ2h0IHsKICBtYXgtaGVpZ2h0OiAxMDB2aDsKfQoKLm1vZGFsLWNvbnRhaW5lciAubW9kYWwtaGVhZGVyIHsKICBjb2xvcjogIzMwMzc0MjsKICBwYWRkaW5nOiAuOHJlbTsKfQoKLm1vZGFsLWNvbnRhaW5lciAubW9kYWwtYm9keSB7CiAgb3ZlcmZsb3cteTogYXV0bzsKICBwYWRkaW5nOiAuOHJlbTsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5tb2RhbC1jb250YWluZXIgLm1vZGFsLWZvb3RlciB7CiAgcGFkZGluZzogLjhyZW07CiAgdGV4dC1hbGlnbjogcmlnaHQ7Cn0KCi5uYXYgewogIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogIGRpc3BsYXk6IGZsZXg7CiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICBsaXN0LXN0eWxlOiBub25lOwogIG1hcmdpbjogLjJyZW0gMDsKfQoKLm5hdiAubmF2LWl0ZW0gYSB7CiAgY29sb3I6ICM2Njc1OGM7CiAgcGFkZGluZzogLjJyZW0gLjRyZW07CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CgoubmF2IC5uYXYtaXRlbSBhOmZvY3VzLAoubmF2IC5uYXYtaXRlbSBhOmhvdmVyIHsKICBjb2xvcjogIzU3NTVkOTsKfQoKLm5hdiAubmF2LWl0ZW0uYWN0aXZlID4gYSB7CiAgY29sb3I6ICM1MDVjNmU7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5uYXYgLm5hdi1pdGVtLmFjdGl2ZSA+IGE6Zm9jdXMsCi5uYXYgLm5hdi1pdGVtLmFjdGl2ZSA+IGE6aG92ZXIgewogIGNvbG9yOiAjNTc1NWQ5Owp9CgoubmF2IC5uYXYgewogIG1hcmdpbi1ib3R0b206IC40cmVtOwogIG1hcmdpbi1sZWZ0OiAuOHJlbTsKfQoKLnBhZ2luYXRpb24gewogIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogIGRpc3BsYXk6IGZsZXg7CiAgbGlzdC1zdHlsZTogbm9uZTsKICBtYXJnaW46IC4ycmVtIDA7CiAgcGFkZGluZzogLjJyZW0gMDsKfQoKLnBhZ2luYXRpb24gLnBhZ2UtaXRlbSB7CiAgbWFyZ2luOiAuMnJlbSAuMDVyZW07Cn0KCi5wYWdpbmF0aW9uIC5wYWdlLWl0ZW0gc3BhbiB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHBhZGRpbmc6IC4ycmVtIC4ycmVtOwp9CgoucGFnaW5hdGlvbiAucGFnZS1pdGVtIGEgewogIGJvcmRlci1yYWRpdXM6IC4xcmVtOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBwYWRkaW5nOiAuMnJlbSAuNHJlbTsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCi5wYWdpbmF0aW9uIC5wYWdlLWl0ZW0gYTpmb2N1cywKLnBhZ2luYXRpb24gLnBhZ2UtaXRlbSBhOmhvdmVyIHsKICBjb2xvcjogIzU3NTVkOTsKfQoKLnBhZ2luYXRpb24gLnBhZ2UtaXRlbS5kaXNhYmxlZCBhIHsKICBjdXJzb3I6IGRlZmF1bHQ7CiAgb3BhY2l0eTogLjU7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5wYWdpbmF0aW9uIC5wYWdlLWl0ZW0uYWN0aXZlIGEgewogIGJhY2tncm91bmQ6ICM1NzU1ZDk7CiAgY29sb3I6ICNmZmY7Cn0KCi5wYWdpbmF0aW9uIC5wYWdlLWl0ZW0ucGFnZS1wcmV2LAoucGFnaW5hdGlvbiAucGFnZS1pdGVtLnBhZ2UtbmV4dCB7CiAgLW1zLWZsZXg6IDEgMCA1MCU7CiAgZmxleDogMSAwIDUwJTsKfQoKLnBhZ2luYXRpb24gLnBhZ2UtaXRlbS5wYWdlLW5leHQgewogIHRleHQtYWxpZ246IHJpZ2h0Owp9CgoucGFnaW5hdGlvbiAucGFnZS1pdGVtIC5wYWdlLWl0ZW0tdGl0bGUgewogIG1hcmdpbjogMDsKfQoKLnBhZ2luYXRpb24gLnBhZ2UtaXRlbSAucGFnZS1pdGVtLXN1YnRpdGxlIHsKICBtYXJnaW46IDA7CiAgb3BhY2l0eTogLjU7Cn0KCi5wYW5lbCB7CiAgYm9yZGVyOiAuMDVyZW0gc29saWQgI2RhZGVlNDsKICBib3JkZXItcmFkaXVzOiAuMXJlbTsKICBkaXNwbGF5OiAtbXMtZmxleGJveDsKICBkaXNwbGF5OiBmbGV4OwogIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uOwogIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Cn0KCi5wYW5lbCAucGFuZWwtaGVhZGVyLAoucGFuZWwgLnBhbmVsLWZvb3RlciB7CiAgLW1zLWZsZXg6IDAgMCBhdXRvOwogIGZsZXg6IDAgMCBhdXRvOwogIHBhZGRpbmc6IC44cmVtOwp9CgoucGFuZWwgLnBhbmVsLW5hdiB7CiAgLW1zLWZsZXg6IDAgMCBhdXRvOwogIGZsZXg6IDAgMCBhdXRvOwp9CgoucGFuZWwgLnBhbmVsLWJvZHkgewogIC1tcy1mbGV4OiAxIDEgYXV0bzsKICBmbGV4OiAxIDEgYXV0bzsKICBvdmVyZmxvdy15OiBhdXRvOwogIHBhZGRpbmc6IDAgLjhyZW07Cn0KCi5wb3BvdmVyIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgoucG9wb3ZlciAucG9wb3Zlci1jb250YWluZXIgewogIGxlZnQ6IDUwJTsKICBvcGFjaXR5OiAwOwogIHBhZGRpbmc6IC40cmVtOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDA7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgc2NhbGUoMCk7CiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4yczsKICB3aWR0aDogMzIwcHg7CiAgei1pbmRleDogMzAwOwp9CgoucG9wb3ZlciAqOmZvY3VzICsgLnBvcG92ZXItY29udGFpbmVyLAoucG9wb3Zlcjpob3ZlciAucG9wb3Zlci1jb250YWluZXIgewogIGRpc3BsYXk6IGJsb2NrOwogIG9wYWNpdHk6IDE7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTEwMCUpIHNjYWxlKDEpOwp9CgoucG9wb3Zlci5wb3BvdmVyLXJpZ2h0IC5wb3BvdmVyLWNvbnRhaW5lciB7CiAgbGVmdDogMTAwJTsKICB0b3A6IDUwJTsKfQoKLnBvcG92ZXIucG9wb3Zlci1yaWdodCAqOmZvY3VzICsgLnBvcG92ZXItY29udGFpbmVyLAoucG9wb3Zlci5wb3BvdmVyLXJpZ2h0OmhvdmVyIC5wb3BvdmVyLWNvbnRhaW5lciB7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTUwJSkgc2NhbGUoMSk7Cn0KCi5wb3BvdmVyLnBvcG92ZXItYm90dG9tIC5wb3BvdmVyLWNvbnRhaW5lciB7CiAgbGVmdDogNTAlOwogIHRvcDogMTAwJTsKfQoKLnBvcG92ZXIucG9wb3Zlci1ib3R0b20gKjpmb2N1cyArIC5wb3BvdmVyLWNvbnRhaW5lciwKLnBvcG92ZXIucG9wb3Zlci1ib3R0b206aG92ZXIgLnBvcG92ZXItY29udGFpbmVyIHsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwKSBzY2FsZSgxKTsKfQoKLnBvcG92ZXIucG9wb3Zlci1sZWZ0IC5wb3BvdmVyLWNvbnRhaW5lciB7CiAgbGVmdDogMDsKICB0b3A6IDUwJTsKfQoKLnBvcG92ZXIucG9wb3Zlci1sZWZ0ICo6Zm9jdXMgKyAucG9wb3Zlci1jb250YWluZXIsCi5wb3BvdmVyLnBvcG92ZXItbGVmdDpob3ZlciAucG9wb3Zlci1jb250YWluZXIgewogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0xMDAlLCAtNTAlKSBzY2FsZSgxKTsKfQoKLnBvcG92ZXIgLmNhcmQgewogIGJvcmRlcjogMDsgCiAgYm94LXNoYWRvdzogMCAuMnJlbSAuNXJlbSByZ2JhKDQ4LCA1NSwgNjYsIC4zKTsKfQoKLnN0ZXAgewogIGRpc3BsYXk6IC1tcy1mbGV4Ym94OwogIGRpc3BsYXk6IGZsZXg7CiAgLW1zLWZsZXgtd3JhcDogbm93cmFwOwogIGZsZXgtd3JhcDogbm93cmFwOwogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luOiAuMnJlbSAwOwogIHdpZHRoOiAxMDAlOwp9Cgouc3RlcCAuc3RlcC1pdGVtIHsKICAtbXMtZmxleDogMSAxIDA7CiAgZmxleDogMSAxIDA7CiAgbWFyZ2luLXRvcDogMDsKICBtaW4taGVpZ2h0OiAxcmVtOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsgCiAgdGV4dC1hbGlnbjogY2VudGVyOwp9Cgouc3RlcCAuc3RlcC1pdGVtOm5vdCg6Zmlyc3QtY2hpbGQpOjpiZWZvcmUgewogIGJhY2tncm91bmQ6ICM1NzU1ZDk7CiAgY29udGVudDogIiI7CiAgaGVpZ2h0OiAycHg7CiAgbGVmdDogLTUwJTsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiA5cHg7CiAgd2lkdGg6IDEwMCU7Cn0KCi5zdGVwIC5zdGVwLWl0ZW0gYSB7CiAgY29sb3I6ICM1NzU1ZDk7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHBhZGRpbmc6IDIwcHggMTBweCAwOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKLnN0ZXAgLnN0ZXAtaXRlbSBhOjpiZWZvcmUgewogIGJhY2tncm91bmQ6ICM1NzU1ZDk7CiAgYm9yZGVyOiAuMXJlbSBzb2xpZCAjZmZmOwogIGJvcmRlci1yYWRpdXM6IDUwJTsKICBjb250ZW50OiAiIjsKICBkaXNwbGF5OiBibG9jazsKICBoZWlnaHQ6IC42cmVtOwogIGxlZnQ6IDUwJTsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAuMnJlbTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgd2lkdGg6IC42cmVtOwogIHotaW5kZXg6IDE7Cn0KCi5zdGVwIC5zdGVwLWl0ZW0uYWN0aXZlIGE6OmJlZm9yZSB7CiAgYmFja2dyb3VuZDogI2ZmZjsKICBib3JkZXI6IC4xcmVtIHNvbGlkICM1NzU1ZDk7Cn0KCi5zdGVwIC5zdGVwLWl0ZW0uYWN0aXZlIH4gLnN0ZXAtaXRlbTo6YmVmb3JlIHsKICBiYWNrZ3JvdW5kOiAjZGFkZWU0Owp9Cgouc3RlcCAuc3RlcC1pdGVtLmFjdGl2ZSB+IC5zdGVwLWl0ZW0gYSB7CiAgY29sb3I6ICNiY2MzY2U7Cn0KCi5zdGVwIC5zdGVwLWl0ZW0uYWN0aXZlIH4gLnN0ZXAtaXRlbSBhOjpiZWZvcmUgewogIGJhY2tncm91bmQ6ICNkYWRlZTQ7Cn0KCi50YWIgewogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgYm9yZGVyLWJvdHRvbTogLjA1cmVtIHNvbGlkICNkYWRlZTQ7CiAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgZGlzcGxheTogZmxleDsKICAtbXMtZmxleC1hbGlnbjogY2VudGVyOwogIC1tcy1mbGV4LXdyYXA6IHdyYXA7CiAgZmxleC13cmFwOiB3cmFwOwogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbWFyZ2luOiAuMnJlbSAwIC4xNXJlbSAwOwp9CgoudGFiIC50YWItaXRlbSB7CiAgbWFyZ2luLXRvcDogMDsKfQoKLnRhYiAudGFiLWl0ZW0gYSB7CiAgYm9yZGVyLWJvdHRvbTogLjFyZW0gc29saWQgdHJhbnNwYXJlbnQ7CiAgY29sb3I6IGluaGVyaXQ7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luOiAwIC40cmVtIDAgMDsKICBwYWRkaW5nOiAuNHJlbSAuMnJlbSAuM3JlbSAuMnJlbTsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCi50YWIgLnRhYi1pdGVtIGE6Zm9jdXMsCi50YWIgLnRhYi1pdGVtIGE6aG92ZXIgewogIGNvbG9yOiAjNTc1NWQ5Owp9CgoudGFiIC50YWItaXRlbS5hY3RpdmUgYSwKLnRhYiAudGFiLWl0ZW0gYS5hY3RpdmUgewogIGJvcmRlci1ib3R0b20tY29sb3I6ICM1NzU1ZDk7CiAgY29sb3I6ICM1NzU1ZDk7Cn0KCi50YWIgLnRhYi1pdGVtLnRhYi1hY3Rpb24gewogIC1tcy1mbGV4OiAxIDAgYXV0bzsKICBmbGV4OiAxIDAgYXV0bzsKICB0ZXh0LWFsaWduOiByaWdodDsKfQoKLnRhYiAudGFiLWl0ZW0gLmJ0bi1jbGVhciB7CiAgbWFyZ2luLXRvcDogLS4ycmVtOwp9CgoudGFiLnRhYi1ibG9jayAudGFiLWl0ZW0gewogIC1tcy1mbGV4OiAxIDAgMDsKICBmbGV4OiAxIDAgMDsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi50YWIudGFiLWJsb2NrIC50YWItaXRlbSBhIHsKICBtYXJnaW46IDA7Cn0KCi50YWIudGFiLWJsb2NrIC50YWItaXRlbSAuYmFkZ2VbZGF0YS1iYWRnZV06OmFmdGVyIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgcmlnaHQ6IC4xcmVtOwogIHRvcDogLjFyZW07CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7Cn0KCi50YWI6bm90KC50YWItYmxvY2spIC5iYWRnZSB7CiAgcGFkZGluZy1yaWdodDogMDsKfQoKLnRpbGUgewogIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgZGlzcGxheTogZmxleDsgCiAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0OwogIC1tcy1mbGV4LWxpbmUtcGFjazoganVzdGlmeTsKfQoKLnRpbGUgLnRpbGUtaWNvbiwKLnRpbGUgLnRpbGUtYWN0aW9uIHsKICAtbXMtZmxleDogMCAwIGF1dG87CiAgZmxleDogMCAwIGF1dG87Cn0KCi50aWxlIC50aWxlLWNvbnRlbnQgewogIC1tcy1mbGV4OiAxIDEgYXV0bzsKICBmbGV4OiAxIDEgYXV0bzsKfQoKLnRpbGUgLnRpbGUtY29udGVudDpub3QoOmZpcnN0LWNoaWxkKSB7CiAgcGFkZGluZy1sZWZ0OiAuNHJlbTsKfQoKLnRpbGUgLnRpbGUtY29udGVudDpub3QoOmxhc3QtY2hpbGQpIHsKICBwYWRkaW5nLXJpZ2h0OiAuNHJlbTsKfQoKLnRpbGUgLnRpbGUtdGl0bGUsCi50aWxlIC50aWxlLXN1YnRpdGxlIHsKICBsaW5lLWhlaWdodDogMS4ycmVtOwp9CgoudGlsZS50aWxlLWNlbnRlcmVkIHsKICBhbGlnbi1pdGVtczogY2VudGVyOyAKICAtbXMtZmxleC1hbGlnbjogY2VudGVyOwp9CgoudGlsZS50aWxlLWNlbnRlcmVkIC50aWxlLWNvbnRlbnQgewogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi50aWxlLnRpbGUtY2VudGVyZWQgLnRpbGUtdGl0bGUsCi50aWxlLnRpbGUtY2VudGVyZWQgLnRpbGUtc3VidGl0bGUgewogIG1hcmdpbi1ib3R0b206IDA7IAogIG92ZXJmbG93OiBoaWRkZW47CiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLnRvYXN0IHsKICBiYWNrZ3JvdW5kOiByZ2JhKDQ4LCA1NSwgNjYsIC45NSk7CiAgYm9yZGVyOiAuMDVyZW0gc29saWQgIzMwMzc0MjsKICBib3JkZXItY29sb3I6ICMzMDM3NDI7CiAgYm9yZGVyLXJhZGl1czogLjFyZW07CiAgY29sb3I6ICNmZmY7CiAgZGlzcGxheTogYmxvY2s7CiAgcGFkZGluZzogLjRyZW07CiAgd2lkdGg6IDEwMCU7Cn0KCi50b2FzdC50b2FzdC1wcmltYXJ5IHsKICBiYWNrZ3JvdW5kOiByZ2JhKDg3LCA4NSwgMjE3LCAuOTUpOwogIGJvcmRlci1jb2xvcjogIzU3NTVkOTsKfQoKLnRvYXN0LnRvYXN0LXN1Y2Nlc3MgewogIGJhY2tncm91bmQ6IHJnYmEoNTAsIDE4MiwgNjcsIC45NSk7CiAgYm9yZGVyLWNvbG9yOiAjMzJiNjQzOwp9CgoudG9hc3QudG9hc3Qtd2FybmluZyB7CiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDE4MywgMCwgLjk1KTsKICBib3JkZXItY29sb3I6ICNmZmI3MDA7Cn0KCi50b2FzdC50b2FzdC1lcnJvciB7CiAgYmFja2dyb3VuZDogcmdiYSgyMzIsIDg2LCAwLCAuOTUpOwogIGJvcmRlci1jb2xvcjogI2U4NTYwMDsKfQoKLnRvYXN0IGEgewogIGNvbG9yOiAjZmZmOwogIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgoudG9hc3QgYTpmb2N1cywKLnRvYXN0IGE6aG92ZXIsCi50b2FzdCBhOmFjdGl2ZSwKLnRvYXN0IGEuYWN0aXZlIHsKICBvcGFjaXR5OiAuNzU7Cn0KCi50b2FzdCAuYnRuLWNsZWFyIHsKICBtYXJnaW46IC4xcmVtOwp9CgoudG9hc3QgcDpsYXN0LWNoaWxkIHsKICBtYXJnaW4tYm90dG9tOiAwOwp9CgoudG9vbHRpcCB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgoudG9vbHRpcDo6YWZ0ZXIgewogIGJhY2tncm91bmQ6IHJnYmEoNDgsIDU1LCA2NiwgLjk1KTsKICBib3JkZXItcmFkaXVzOiAuMXJlbTsKICBib3R0b206IDEwMCU7CiAgY29sb3I6ICNmZmY7CiAgY29udGVudDogYXR0cihkYXRhLXRvb2x0aXApOwogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogLjdyZW07CiAgbGVmdDogNTAlOwogIG1heC13aWR0aDogMzIwcHg7CiAgb3BhY2l0eTogMDsKICBvdmVyZmxvdzogaGlkZGVuOwogIHBhZGRpbmc6IC4ycmVtIC40cmVtOwogIHBvaW50ZXItZXZlbnRzOiBub25lOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAuNHJlbSk7CiAgdHJhbnNpdGlvbjogb3BhY2l0eSAuMnMsIHRyYW5zZm9ybSAuMnM7CiAgd2hpdGUtc3BhY2U6IHByZTsKICB6LWluZGV4OiAzMDA7Cn0KCi50b29sdGlwOmZvY3VzOjphZnRlciwKLnRvb2x0aXA6aG92ZXI6OmFmdGVyIHsKICBvcGFjaXR5OiAxOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC0uMnJlbSk7Cn0KCi50b29sdGlwW2Rpc2FibGVkXSwKLnRvb2x0aXAuZGlzYWJsZWQgewogIHBvaW50ZXItZXZlbnRzOiBhdXRvOwp9CgoudG9vbHRpcC50b29sdGlwLXJpZ2h0OjphZnRlciB7CiAgYm90dG9tOiA1MCU7CiAgbGVmdDogMTAwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtLjJyZW0sIDUwJSk7Cn0KCi50b29sdGlwLnRvb2x0aXAtcmlnaHQ6Zm9jdXM6OmFmdGVyLAoudG9vbHRpcC50b29sdGlwLXJpZ2h0OmhvdmVyOjphZnRlciB7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLjJyZW0sIDUwJSk7Cn0KCi50b29sdGlwLnRvb2x0aXAtYm90dG9tOjphZnRlciB7CiAgYm90dG9tOiBhdXRvOwogIHRvcDogMTAwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtLjRyZW0pOwp9CgoudG9vbHRpcC50b29sdGlwLWJvdHRvbTpmb2N1czo6YWZ0ZXIsCi50b29sdGlwLnRvb2x0aXAtYm90dG9tOmhvdmVyOjphZnRlciB7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLjJyZW0pOwp9CgoudG9vbHRpcC50b29sdGlwLWxlZnQ6OmFmdGVyIHsKICBib3R0b206IDUwJTsKICBsZWZ0OiBhdXRvOwogIHJpZ2h0OiAxMDAlOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC40cmVtLCA1MCUpOwp9CgoudG9vbHRpcC50b29sdGlwLWxlZnQ6Zm9jdXM6OmFmdGVyLAoudG9vbHRpcC50b29sdGlwLWxlZnQ6aG92ZXI6OmFmdGVyIHsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtLjJyZW0sIDUwJSk7Cn0KCkBrZXlmcmFtZXMgbG9hZGluZyB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICB9Cn0KCkBrZXlmcmFtZXMgc2xpZGUtZG93biB7CiAgMCUgewogICAgb3BhY2l0eTogMDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMS42cmVtKTsKICB9CiAgMTAwJSB7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogIH0KfQoKLnRleHQtcHJpbWFyeSB7CiAgY29sb3I6ICM1NzU1ZDkgIWltcG9ydGFudDsKfQoKYS50ZXh0LXByaW1hcnk6Zm9jdXMsCmEudGV4dC1wcmltYXJ5OmhvdmVyIHsKICBjb2xvcjogIzQyNDBkNDsKfQoKYS50ZXh0LXByaW1hcnk6dmlzaXRlZCB7CiAgY29sb3I6ICM2YzZhZGU7Cn0KCi50ZXh0LXNlY29uZGFyeSB7CiAgY29sb3I6ICNlNWU1ZjkgIWltcG9ydGFudDsKfQoKYS50ZXh0LXNlY29uZGFyeTpmb2N1cywKYS50ZXh0LXNlY29uZGFyeTpob3ZlciB7CiAgY29sb3I6ICNkMWQwZjQ7Cn0KCmEudGV4dC1zZWNvbmRhcnk6dmlzaXRlZCB7CiAgY29sb3I6ICNmYWZhZmU7Cn0KCi50ZXh0LWdyYXkgewogIGNvbG9yOiAjYmNjM2NlICFpbXBvcnRhbnQ7Cn0KCmEudGV4dC1ncmF5OmZvY3VzLAphLnRleHQtZ3JheTpob3ZlciB7CiAgY29sb3I6ICNhZGI2YzQ7Cn0KCmEudGV4dC1ncmF5OnZpc2l0ZWQgewogIGNvbG9yOiAjY2JkMGQ5Owp9CgoudGV4dC1saWdodCB7CiAgY29sb3I6ICNmZmYgIWltcG9ydGFudDsKfQoKYS50ZXh0LWxpZ2h0OmZvY3VzLAphLnRleHQtbGlnaHQ6aG92ZXIgewogIGNvbG9yOiAjZjJmMmYyOwp9CgphLnRleHQtbGlnaHQ6dmlzaXRlZCB7CiAgY29sb3I6IHdoaXRlOwp9CgoudGV4dC1kYXJrIHsKICBjb2xvcjogIzNiNDM1MSAhaW1wb3J0YW50Owp9CgphLnRleHQtZGFyazpmb2N1cywKYS50ZXh0LWRhcms6aG92ZXIgewogIGNvbG9yOiAjMzAzNzQyOwp9CgphLnRleHQtZGFyazp2aXNpdGVkIHsKICBjb2xvcjogIzQ1NTA2MDsKfQoKLnRleHQtc3VjY2VzcyB7CiAgY29sb3I6ICMzMmI2NDMgIWltcG9ydGFudDsKfQoKYS50ZXh0LXN1Y2Nlc3M6Zm9jdXMsCmEudGV4dC1zdWNjZXNzOmhvdmVyIHsKICBjb2xvcjogIzJkYTIzYzsKfQoKYS50ZXh0LXN1Y2Nlc3M6dmlzaXRlZCB7CiAgY29sb3I6ICMzOWM5NGI7Cn0KCi50ZXh0LXdhcm5pbmcgewogIGNvbG9yOiAjZmZiNzAwICFpbXBvcnRhbnQ7Cn0KCmEudGV4dC13YXJuaW5nOmZvY3VzLAphLnRleHQtd2FybmluZzpob3ZlciB7CiAgY29sb3I6ICNlNmE1MDA7Cn0KCmEudGV4dC13YXJuaW5nOnZpc2l0ZWQgewogIGNvbG9yOiAjZmZiZTFhOwp9CgoudGV4dC1lcnJvciB7CiAgY29sb3I6ICNlODU2MDAgIWltcG9ydGFudDsKfQoKYS50ZXh0LWVycm9yOmZvY3VzLAphLnRleHQtZXJyb3I6aG92ZXIgewogIGNvbG9yOiAjY2Y0ZDAwOwp9CgphLnRleHQtZXJyb3I6dmlzaXRlZCB7CiAgY29sb3I6ICNmZjYwMDM7Cn0KCi5iZy1wcmltYXJ5IHsKICBiYWNrZ3JvdW5kOiAjNTc1NWQ5ICFpbXBvcnRhbnQ7CiAgY29sb3I6ICNmZmY7Cn0KCi5iZy1zZWNvbmRhcnkgewogIGJhY2tncm91bmQ6ICNmMWYxZmMgIWltcG9ydGFudDsKfQoKLmJnLWRhcmsgewogIGJhY2tncm91bmQ6ICMzMDM3NDIgIWltcG9ydGFudDsKICBjb2xvcjogI2ZmZjsKfQoKLmJnLWdyYXkgewogIGJhY2tncm91bmQ6ICNmN2Y4ZjkgIWltcG9ydGFudDsKfQoKLmJnLXN1Y2Nlc3MgewogIGJhY2tncm91bmQ6ICMzMmI2NDMgIWltcG9ydGFudDsKICBjb2xvcjogI2ZmZjsKfQoKLmJnLXdhcm5pbmcgewogIGJhY2tncm91bmQ6ICNmZmI3MDAgIWltcG9ydGFudDsKICBjb2xvcjogI2ZmZjsKfQoKLmJnLWVycm9yIHsKICBiYWNrZ3JvdW5kOiAjZTg1NjAwICFpbXBvcnRhbnQ7CiAgY29sb3I6ICNmZmY7Cn0KCi5jLWhhbmQgewogIGN1cnNvcjogcG9pbnRlcjsKfQoKLmMtbW92ZSB7CiAgY3Vyc29yOiBtb3ZlOwp9CgouYy16b29tLWluIHsKICBjdXJzb3I6IHpvb20taW47Cn0KCi5jLXpvb20tb3V0IHsKICBjdXJzb3I6IHpvb20tb3V0Owp9CgouYy1ub3QtYWxsb3dlZCB7CiAgY3Vyc29yOiBub3QtYWxsb3dlZDsKfQoKLmMtYXV0byB7CiAgY3Vyc29yOiBhdXRvOwp9CgouZC1ibG9jayB7CiAgZGlzcGxheTogYmxvY2s7Cn0KCi5kLWlubGluZSB7CiAgZGlzcGxheTogaW5saW5lOwp9CgouZC1pbmxpbmUtYmxvY2sgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLmQtZmxleCB7CiAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgZGlzcGxheTogZmxleDsKfQoKLmQtaW5saW5lLWZsZXggewogIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDsKICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKfQoKLmQtbm9uZSwKLmQtaGlkZSB7CiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9CgouZC12aXNpYmxlIHsKICB2aXNpYmlsaXR5OiB2aXNpYmxlOwp9CgouZC1pbnZpc2libGUgewogIHZpc2liaWxpdHk6IGhpZGRlbjsKfQoKLnRleHQtaGlkZSB7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgYm9yZGVyOiAwOwogIGNvbG9yOiB0cmFuc3BhcmVudDsKICBmb250LXNpemU6IDA7CiAgbGluZS1oZWlnaHQ6IDA7CiAgdGV4dC1zaGFkb3c6IG5vbmU7Cn0KCi50ZXh0LWFzc2lzdGl2ZSB7CiAgYm9yZGVyOiAwOwogIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7CiAgaGVpZ2h0OiAxcHg7CiAgbWFyZ2luOiAtMXB4OwogIG92ZXJmbG93OiBoaWRkZW47CiAgcGFkZGluZzogMDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgd2lkdGg6IDFweDsKfQoKLmRpdmlkZXIsCi5kaXZpZGVyLXZlcnQgewogIGRpc3BsYXk6IGJsb2NrOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmRpdmlkZXJbZGF0YS1jb250ZW50XTo6YWZ0ZXIsCi5kaXZpZGVyLXZlcnRbZGF0YS1jb250ZW50XTo6YWZ0ZXIgewogIGJhY2tncm91bmQ6ICNmZmY7CiAgY29sb3I6ICNiY2MzY2U7CiAgY29udGVudDogYXR0cihkYXRhLWNvbnRlbnQpOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IC43cmVtOwogIHBhZGRpbmc6IDAgLjRyZW07CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0uNjVyZW0pOwp9CgouZGl2aWRlciB7CiAgYm9yZGVyLXRvcDogLjA1cmVtIHNvbGlkICNmMWYzZjU7CiAgaGVpZ2h0OiAuMDVyZW07CiAgbWFyZ2luOiAuNHJlbSAwOwp9CgouZGl2aWRlcltkYXRhLWNvbnRlbnRdIHsKICBtYXJnaW46IC44cmVtIDA7Cn0KCi5kaXZpZGVyLXZlcnQgewogIGRpc3BsYXk6IGJsb2NrOwogIHBhZGRpbmc6IC44cmVtOwp9CgouZGl2aWRlci12ZXJ0OjpiZWZvcmUgewogIGJvcmRlci1sZWZ0OiAuMDVyZW0gc29saWQgI2RhZGVlNDsKICBib3R0b206IC40cmVtOwogIGNvbnRlbnQ6ICIiOwogIGRpc3BsYXk6IGJsb2NrOwogIGxlZnQ6IDUwJTsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAuNHJlbTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7Cn0KCi5kaXZpZGVyLXZlcnRbZGF0YS1jb250ZW50XTo6YWZ0ZXIgewogIGxlZnQ6IDUwJTsKICBwYWRkaW5nOiAuMnJlbSAwOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDUwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKfQoKLmxvYWRpbmcgewogIGNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogIG1pbi1oZWlnaHQ6IC44cmVtOwogIHBvaW50ZXItZXZlbnRzOiBub25lOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmxvYWRpbmc6OmFmdGVyIHsKICBhbmltYXRpb246IGxvYWRpbmcgNTAwbXMgaW5maW5pdGUgbGluZWFyOwogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogIGJvcmRlcjogLjFyZW0gc29saWQgIzU3NTVkOTsKICBib3JkZXItcmFkaXVzOiA1MCU7CiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICBib3JkZXItdG9wLWNvbG9yOiB0cmFuc3BhcmVudDsKICBjb250ZW50OiAiIjsKICBkaXNwbGF5OiBibG9jazsKICBoZWlnaHQ6IC44cmVtOwogIGxlZnQ6IDUwJTsKICBtYXJnaW4tbGVmdDogLS40cmVtOwogIG1hcmdpbi10b3A6IC0uNHJlbTsKICBvcGFjaXR5OiAxOwogIHBhZGRpbmc6IDA7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogNTAlOwogIHdpZHRoOiAuOHJlbTsKICB6LWluZGV4OiAxOwp9CgoubG9hZGluZy5sb2FkaW5nLWxnIHsKICBtaW4taGVpZ2h0OiAycmVtOwp9CgoubG9hZGluZy5sb2FkaW5nLWxnOjphZnRlciB7CiAgaGVpZ2h0OiAxLjZyZW07CiAgbWFyZ2luLWxlZnQ6IC0uOHJlbTsKICBtYXJnaW4tdG9wOiAtLjhyZW07CiAgd2lkdGg6IDEuNnJlbTsKfQoKLmNsZWFyZml4OjphZnRlciB7CiAgY2xlYXI6IGJvdGg7CiAgY29udGVudDogIiI7CiAgZGlzcGxheTogdGFibGU7Cn0KCi5mbG9hdC1sZWZ0IHsKICBmbG9hdDogbGVmdCAhaW1wb3J0YW50Owp9CgouZmxvYXQtcmlnaHQgewogIGZsb2F0OiByaWdodCAhaW1wb3J0YW50Owp9CgoucC1yZWxhdGl2ZSB7CiAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7Cn0KCi5wLWFic29sdXRlIHsKICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKfQoKLnAtZml4ZWQgewogIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50Owp9CgoucC1zdGlja3kgewogIHBvc2l0aW9uOiAtd2Via2l0LXN0aWNreSAhaW1wb3J0YW50OwogIHBvc2l0aW9uOiBzdGlja3kgIWltcG9ydGFudDsKfQoKLnAtY2VudGVyZWQgewogIGRpc3BsYXk6IGJsb2NrOwogIGZsb2F0OiBub25lOwogIG1hcmdpbi1sZWZ0OiBhdXRvOwogIG1hcmdpbi1yaWdodDogYXV0bzsKfQoKLmZsZXgtY2VudGVyZWQgewogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgZGlzcGxheTogZmxleDsKICAtbXMtZmxleC1hbGlnbjogY2VudGVyOwogIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjsKICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKfQoKLm0tMCB7CiAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7Cn0KCi5tYi0wIHsKICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7Cn0KCi5tbC0wIHsKICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50Owp9CgoubXItMCB7CiAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7Cn0KCi5tdC0wIHsKICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7Cn0KCi5teC0wIHsKICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OwogIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50Owp9CgoubXktMCB7CiAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50OwogIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKfQoKLm0tMSB7CiAgbWFyZ2luOiAuMnJlbSAhaW1wb3J0YW50Owp9CgoubWItMSB7CiAgbWFyZ2luLWJvdHRvbTogLjJyZW0gIWltcG9ydGFudDsKfQoKLm1sLTEgewogIG1hcmdpbi1sZWZ0OiAuMnJlbSAhaW1wb3J0YW50Owp9CgoubXItMSB7CiAgbWFyZ2luLXJpZ2h0OiAuMnJlbSAhaW1wb3J0YW50Owp9CgoubXQtMSB7CiAgbWFyZ2luLXRvcDogLjJyZW0gIWltcG9ydGFudDsKfQoKLm14LTEgewogIG1hcmdpbi1sZWZ0OiAuMnJlbSAhaW1wb3J0YW50OwogIG1hcmdpbi1yaWdodDogLjJyZW0gIWltcG9ydGFudDsKfQoKLm15LTEgewogIG1hcmdpbi1ib3R0b206IC4ycmVtICFpbXBvcnRhbnQ7CiAgbWFyZ2luLXRvcDogLjJyZW0gIWltcG9ydGFudDsKfQoKLm0tMiB7CiAgbWFyZ2luOiAuNHJlbSAhaW1wb3J0YW50Owp9CgoubWItMiB7CiAgbWFyZ2luLWJvdHRvbTogLjRyZW0gIWltcG9ydGFudDsKfQoKLm1sLTIgewogIG1hcmdpbi1sZWZ0OiAuNHJlbSAhaW1wb3J0YW50Owp9CgoubXItMiB7CiAgbWFyZ2luLXJpZ2h0OiAuNHJlbSAhaW1wb3J0YW50Owp9CgoubXQtMiB7CiAgbWFyZ2luLXRvcDogLjRyZW0gIWltcG9ydGFudDsKfQoKLm14LTIgewogIG1hcmdpbi1sZWZ0OiAuNHJlbSAhaW1wb3J0YW50OwogIG1hcmdpbi1yaWdodDogLjRyZW0gIWltcG9ydGFudDsKfQoKLm15LTIgewogIG1hcmdpbi1ib3R0b206IC40cmVtICFpbXBvcnRhbnQ7CiAgbWFyZ2luLXRvcDogLjRyZW0gIWltcG9ydGFudDsKfQoKLnAtMCB7CiAgcGFkZGluZzogMCAhaW1wb3J0YW50Owp9CgoucGItMCB7CiAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDsKfQoKLnBsLTAgewogIHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50Owp9CgoucHItMCB7CiAgcGFkZGluZy1yaWdodDogMCAhaW1wb3J0YW50Owp9CgoucHQtMCB7CiAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKfQoKLnB4LTAgewogIHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50OwogIHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDsKfQoKLnB5LTAgewogIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7CiAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKfQoKLnAtMSB7CiAgcGFkZGluZzogLjJyZW0gIWltcG9ydGFudDsKfQoKLnBiLTEgewogIHBhZGRpbmctYm90dG9tOiAuMnJlbSAhaW1wb3J0YW50Owp9CgoucGwtMSB7CiAgcGFkZGluZy1sZWZ0OiAuMnJlbSAhaW1wb3J0YW50Owp9CgoucHItMSB7CiAgcGFkZGluZy1yaWdodDogLjJyZW0gIWltcG9ydGFudDsKfQoKLnB0LTEgewogIHBhZGRpbmctdG9wOiAuMnJlbSAhaW1wb3J0YW50Owp9CgoucHgtMSB7CiAgcGFkZGluZy1sZWZ0OiAuMnJlbSAhaW1wb3J0YW50OwogIHBhZGRpbmctcmlnaHQ6IC4ycmVtICFpbXBvcnRhbnQ7Cn0KCi5weS0xIHsKICBwYWRkaW5nLWJvdHRvbTogLjJyZW0gIWltcG9ydGFudDsKICBwYWRkaW5nLXRvcDogLjJyZW0gIWltcG9ydGFudDsKfQoKLnAtMiB7CiAgcGFkZGluZzogLjRyZW0gIWltcG9ydGFudDsKfQoKLnBiLTIgewogIHBhZGRpbmctYm90dG9tOiAuNHJlbSAhaW1wb3J0YW50Owp9CgoucGwtMiB7CiAgcGFkZGluZy1sZWZ0OiAuNHJlbSAhaW1wb3J0YW50Owp9CgoucHItMiB7CiAgcGFkZGluZy1yaWdodDogLjRyZW0gIWltcG9ydGFudDsKfQoKLnB0LTIgewogIHBhZGRpbmctdG9wOiAuNHJlbSAhaW1wb3J0YW50Owp9CgoucHgtMiB7CiAgcGFkZGluZy1sZWZ0OiAuNHJlbSAhaW1wb3J0YW50OwogIHBhZGRpbmctcmlnaHQ6IC40cmVtICFpbXBvcnRhbnQ7Cn0KCi5weS0yIHsKICBwYWRkaW5nLWJvdHRvbTogLjRyZW0gIWltcG9ydGFudDsKICBwYWRkaW5nLXRvcDogLjRyZW0gIWltcG9ydGFudDsKfQoKLnMtcm91bmRlZCB7CiAgYm9yZGVyLXJhZGl1czogLjFyZW07Cn0KCi5zLWNpcmNsZSB7CiAgYm9yZGVyLXJhZGl1czogNTAlOwp9CgoudGV4dC1sZWZ0IHsKICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgoudGV4dC1yaWdodCB7CiAgdGV4dC1hbGlnbjogcmlnaHQ7Cn0KCi50ZXh0LWNlbnRlciB7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgoudGV4dC1qdXN0aWZ5IHsKICB0ZXh0LWFsaWduOiBqdXN0aWZ5Owp9CgoudGV4dC1sb3dlcmNhc2UgewogIHRleHQtdHJhbnNmb3JtOiBsb3dlcmNhc2U7Cn0KCi50ZXh0LXVwcGVyY2FzZSB7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLnRleHQtY2FwaXRhbGl6ZSB7CiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7Cn0KCi50ZXh0LW5vcm1hbCB7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKfQoKLnRleHQtYm9sZCB7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi50ZXh0LWl0YWxpYyB7CiAgZm9udC1zdHlsZTogaXRhbGljOwp9CgoudGV4dC1sYXJnZSB7CiAgZm9udC1zaXplOiAxLjJlbTsKfQoKLnRleHQtc21hbGwgewogIGZvbnQtc2l6ZTogLjllbTsKfQoKLnRleHQtdGlueSB7CiAgZm9udC1zaXplOiAuOGVtOwp9CgoudGV4dC1tdXRlZCB7CiAgb3BhY2l0eTogLjg7Cn0KCi50ZXh0LWVsbGlwc2lzIHsKICBvdmVyZmxvdzogaGlkZGVuOwogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi50ZXh0LWNsaXAgewogIG92ZXJmbG93OiBoaWRkZW47CiAgdGV4dC1vdmVyZmxvdzogY2xpcDsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoudGV4dC1icmVhayB7CiAgLXdlYmtpdC1oeXBoZW5zOiBhdXRvOwogIC1tcy1oeXBoZW5zOiBhdXRvOwogIGh5cGhlbnM6IGF1dG87CiAgd29yZC1icmVhazogYnJlYWstd29yZDsKICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7Cn0=]]></data>
	</file>
	<file>
	  <filename>/css/backslash/bs/lib/core.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[QGNoYXJzZXQgIlVURi04IjsKCi8qIEVtYmVkZGVkIGNvbnRlbnQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDktLiAqLwphdWRpbywKdmlkZW8gewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLyoqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIGlPUyA0LTcuICovCmF1ZGlvOm5vdChbY29udHJvbHNdKSB7CiAgZGlzcGxheTogbm9uZTsKICBoZWlnaHQ6IDA7Cn0KCi8qKiBSZW1vdmUgdGhlIGJvcmRlciBvbiBpbWFnZXMgaW5zaWRlIGxpbmtzIGluIElFIDEwLS4gKi8KaW1nIHsKICBib3JkZXItc3R5bGU6IG5vbmU7Cn0KCi8qKiBIaWRlIHRoZSBvdmVyZmxvdyBpbiBJRS4gKi8Kc3ZnOm5vdCg6cm9vdCkgewogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi8qKiAxLiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSA5LS4gMi4gQWRkIHRoZSBjb3JyZWN0IHZlcnRpY2FsIGFsaWdubWVudCBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBPcGVyYS4gKi8KcHJvZ3Jlc3MgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsgLyogMSAqLwogIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsgLyogMiAqLwp9CgoKLyogSW50ZXJhY3RpdmUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgOS0uIDEuIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIEVkZ2UsIElFLCBhbmQgRmlyZWZveC4gKi8KZGV0YWlscywKbWVudSB7CiAgZGlzcGxheTogYmxvY2s7Cn0KCi8qIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIGFsbCBicm93c2Vycy4gKi8Kc3VtbWFyeSB7CiAgZGlzcGxheTogbGlzdC1pdGVtOwogIG91dGxpbmU6IG5vbmU7Cn0KCi8qIFNjcmlwdGluZyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgOS0uICovCmNhbnZhcyB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwp9CgovKiogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUuICovCnRlbXBsYXRlIHsKICBkaXNwbGF5OiBub25lOwp9CgovKiBIaWRkZW4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDEwLS4gKi8KW2hpZGRlbl0gewogIGRpc3BsYXk6IG5vbmU7Cn0KCiosCio6OmJlZm9yZSwKKjo6YWZ0ZXIgewogIGJveC1zaXppbmc6IGluaGVyaXQ7Cn0KCmh0bWwgewogIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogIGZvbnQtc2l6ZTogMjBweDsKICBsaW5lLWhlaWdodDogMS41OwogIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7Cn0KCjpsYW5nKHpoKSBpbnMsCjpsYW5nKHpoKSB1LAo6bGFuZyhqYSkgaW5zLAo6bGFuZyhqYSkgdSwKLmxhbmctY2prIGlucywKLmxhbmctY2prIHUgewogIGJvcmRlci1ib3R0b206IC4wNXJlbSBzb2xpZDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCjpsYW5nKHpoKSBkZWwgKyBkZWwsCjpsYW5nKHpoKSBkZWwgKyBzLAo6bGFuZyh6aCkgaW5zICsgaW5zLAo6bGFuZyh6aCkgaW5zICsgdSwKOmxhbmcoemgpIHMgKyBkZWwsCjpsYW5nKHpoKSBzICsgcywKOmxhbmcoemgpIHUgKyBpbnMsCjpsYW5nKHpoKSB1ICsgdSwKOmxhbmcoamEpIGRlbCArIGRlbCwKOmxhbmcoamEpIGRlbCArIHMsCjpsYW5nKGphKSBpbnMgKyBpbnMsCjpsYW5nKGphKSBpbnMgKyB1LAo6bGFuZyhqYSkgcyArIGRlbCwKOmxhbmcoamEpIHMgKyBzLAo6bGFuZyhqYSkgdSArIGlucywKOmxhbmcoamEpIHUgKyB1LAoubGFuZy1jamsgZGVsICsgZGVsLAoubGFuZy1jamsgZGVsICsgcywKLmxhbmctY2prIGlucyArIGlucywKLmxhbmctY2prIGlucyArIHUsCi5sYW5nLWNqayBzICsgZGVsLAoubGFuZy1jamsgcyArIHMsCi5sYW5nLWNqayB1ICsgaW5zLAoubGFuZy1jamsgdSArIHUgewogIG1hcmdpbi1sZWZ0OiAuMTI1ZW07Cn0KCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCi5cXC1sYXlvdXQKewogIGRpc3BsYXk6IGJsb2NrOwogIG92ZXJmbG93LXg6IGhpZGRlbjsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgZm9udC1zaXplOiAxNnB4OwogIGNvbG9yOiAjNTQ2Nzc4OwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cn0KCi5cXC1sYXlvdXQtLWxlZnQKewogIGZsb2F0OiBsZWZ0Owp9CgouXFwtbGF5b3V0LS1yaWdodAp7CiAgZmxvYXQ6IHJpZ2h0Owp9CgouXFwtYnJhbmQKewogIGZvbnQtZmFtaWx5OiAiTW9udHNlcnJhdCIsICJSb2JvdG8iLCBzYW5zLXNlcmlmOwp9CgouXFwtYmxvY2txdW90ZQp7CiAgZGlzcGxheTogYmxvY2s7CiAgY29sb3I6ICM4NzlBQUI7CiAgZm9udC1zaXplOiAxNnB4OwogIGxpbmUtaGVpZ2h0OiAyNHB4OwogIGJvcmRlci1sZWZ0OiA0cHggc29saWQgIzg3OUFBQjsKICBwYWRkaW5nLXRvcDogNXB4OwogIHBhZGRpbmctYm90dG9tOiA1cHg7CiAgcGFkZGluZy1yaWdodDogMTBweDsKICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgbWFyZ2luLWJvdHRvbTogMjBweDsKICBtYXJnaW4tbGVmdDogMHB4OwogIG1hcmdpbi1yaWdodDogMHB4Owp9CgouXFwtY29kZQp7CiAgY29sb3I6ICNFRTY3NUQ7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGZvbnQtc2l6ZTogMTNweDsKICBmb250LXdlaWdodDogNjAwOwogIGJhY2tncm91bmQtY29sb3I6ICNFRUYyRjc7CiAgYm9yZGVyLXJhZGl1czogM3B4OwogIHBhZGRpbmctdG9wOiAycHg7CiAgcGFkZGluZy1ib3R0b206IDJweDsKICBwYWRkaW5nLWxlZnQ6IDVweDsKICBwYWRkaW5nLXJpZ2h0OiA1cHg7Cn0KCi5cXC1jb2RlLS1kYXJrCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ2Nzc4ICFpbXBvcnRhbnQ7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1oMQp7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiA0MHB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgbGluZS1oZWlnaHQ6IDUxcHg7CiAgY29sb3I6ICM1NDY3Nzg7CiAgcGFkZGluZzogMHB4OwogIG1hcmdpbi1ib3R0b206IDAuNWVtOwp9CgouXFwtaDE6bm90KDpmaXJzdC1jaGlsZCkKewogIG1hcmdpbi10b3A6IDMwcHg7Cn0KCi5cXC1oMgp7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAzMnB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgbGluZS1oZWlnaHQ6IDQwcHg7CiAgY29sb3I6ICM1NDY3Nzg7CiAgcGFkZGluZzogMHB4OwogIG1hcmdpbi1ib3R0b206IDAuNWVtOwp9CgouXFwtaDI6bm90KDpmaXJzdC1jaGlsZCkKewogIG1hcmdpbi10b3A6IDMwcHg7Cn0KCi5cXC1oMwp7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAyOHB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgbGluZS1oZWlnaHQ6IDI5cHg7CiAgY29sb3I6ICM1NDY3Nzg7CiAgcGFkZGluZzogMHB4OwogIG1hcmdpbi1ib3R0b206IDAuNWVtOwp9CgouXFwtaDM6bm90KDpmaXJzdC1jaGlsZCkKewogIG1hcmdpbi10b3A6IDMwcHg7Cn0KCi5cXC1oNAp7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAyNHB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgbGluZS1oZWlnaHQ6IDI1cHg7CiAgY29sb3I6ICM1NDY3Nzg7CiAgcGFkZGluZzogMHB4OwogIG1hcmdpbi1ib3R0b206IDAuNWVtOwp9CgouXFwtaDQ6bm90KDpmaXJzdC1jaGlsZCkKewogIG1hcmdpbi10b3A6IDMwcHg7Cn0KCi5cXC1oNQp7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgbGluZS1oZWlnaHQ6IDIycHg7CiAgY29sb3I6ICM1NDY3Nzg7CiAgcGFkZGluZzogMHB4OwogIG1hcmdpbi1ib3R0b206IDAuNWVtOwp9CgouXFwtaDU6bm90KDpmaXJzdC1jaGlsZCkKewogIG1hcmdpbi10b3A6IDMwcHg7Cn0KCi5cXC1oNgp7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAxNnB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgY29sb3I6ICM1NDY3Nzg7CiAgcGFkZGluZzogMHB4OwogIG1hcmdpbi1ib3R0b206IDAuNWVtOwp9CgouXFwtaDY6bm90KDpmaXJzdC1jaGlsZCkKewogIG1hcmdpbi10b3A6IDMwcHg7Cn0KCi5cXC1saW5rCnsKICBjb2xvcjogIzRFOTFFNDsKICBmb250LXdlaWdodDogNjAwOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICB0cmFuc2l0aW9uOiBjb2xvciAwLjNzOwogIGN1cnNvcjogcG9pbnRlcjsKfQoKLlxcLWxpbms6aG92ZXIKewogIGNvbG9yOiAjMUI1RUIxOwp9CgouXFwtcGFyYWdyYXBoLAouXFwtcAp7CiAgZGlzcGxheTogYmxvY2s7CiAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgZm9udC1zaXplOiAxNnB4OwogIG1hcmdpbi10b3A6IDBweDsKICBtYXJnaW4tYm90dG9tOiAyMHB4Owp9CgouXFwtcGFyYWdyYXBoLS1sZWFkLAouXFwtcC0tbGVhZAp7CiAgZm9udC1zaXplOiAyMHB4OwogIGxpbmUtaGVpZ2h0OiAzMHB4Owp9CgouXFwtcHJlCnsKICBkaXNwbGF5OiBibG9jazsKICBvdmVyZmxvdy14OiBhdXRvOwogIHdpZHRoOiBjYWxjKDEwMCUgLSAyICogMTVweCk7CiAgY29sb3I6ICM1NDY3Nzg7CiAgbGluZS1oZWlnaHQ6IDIycHg7CiAgZm9udC1zaXplOiAxNHB4OwogIGJhY2tncm91bmQtY29sb3I6ICNFRUYyRjc7CiAgYm9yZGVyLXJhZGl1czogNXB4OwogIHBhZGRpbmc6IDE1cHg7CiAgbWFyZ2luLWJvdHRvbTogMjBweDsKICBtYXJnaW4tdG9wOiAwcHg7Cn0KCi5cXC1wcmUtLWRhcmsKewogIGJhY2tncm91bmQtY29sb3I6ICM1NDY3NzggIWltcG9ydGFudDsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLXNtYWxsCnsKICBmb250LXNpemU6IDEzcHg7CiAgY29sb3I6ICM4NzlBQUI7Cn0KCi5cXC1idG4KewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7CiAgY3Vyc29yOiBwb2ludGVyOwogIGxpbmUtaGVpZ2h0OiAyNHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgZm9udC1zaXplOiAxNnB4OwogIHBhZGRpbmctbGVmdDogMTVweDsKICBwYWRkaW5nLXJpZ2h0OiAxNXB4OwogIHBhZGRpbmctdG9wOiA1cHg7CiAgcGFkZGluZy1ib3R0b206IDVweDsKICBib3JkZXItcmFkaXVzOiA1cHg7CiAgYm9yZGVyOiAwcHg7CiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5cXC1idG46aG92ZXIKewogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVGMkY3Owp9CgouXFwtYnRuLlxcLWJ0bi0tcHJpbWFyeQp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzRFOTFFNDsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLWJ0bi5cXC1idG4tLXByaW1hcnk6aG92ZXIKewogIGJhY2tncm91bmQtY29sb3I6ICMxQjVFQjE7Cn0KCi5cXC1idG4uXFwtYnRuLS1zdWNjZXNzCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNEFDRjdGOwogIGNvbG9yOiAjRkZGOwp9CgouXFwtYnRuLlxcLWJ0bi0tc3VjY2Vzczpob3Zlcgp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzI2OEQ0RjsKfQoKLlxcLWJ0bi5cXC1idG4tLXdhcm5pbmcKewogIGJhY2tncm91bmQtY29sb3I6ICNGQkM4NTA7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1idG4uXFwtYnRuLS13YXJuaW5nOmhvdmVyCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTA5RjA1Owp9CgouXFwtYnRuLlxcLWJ0bi0tZXJyb3IKewogIGJhY2tncm91bmQtY29sb3I6ICNFRTY3NUQ7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1idG4uXFwtYnRuLS1lcnJvcjpob3Zlcgp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0NGMjMxNjsKfQoKLlxcLWJ0bi5cXC1idG4tLWRhcmsKewogIGJhY2tncm91bmQtY29sb3I6ICM1NDY3Nzg7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1idG4uXFwtYnRuLS1kYXJrOmhvdmVyCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMkEzNDNDOwp9CgouXFwtYnRuLlxcLWJ0bi0tbGlnaHQKewogIGJhY2tncm91bmQtY29sb3I6ICNEREU1RUU7CiAgY29sb3I6ICM1NDY3Nzg7Cn0KCi5cXC1idG4uXFwtYnRuLS1saWdodDpob3Zlcgp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0NCRDhFNjsKfQoKLlxcLWJ0bi5cXC1idG4tLW5hdnkKewogIGJhY2tncm91bmQtY29sb3I6ICM1NDY3Nzg7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1idG4uXFwtYnRuLS1ncmVlbgp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzkzRDI2MDsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLWJ0bi5cXC1idG4tLXRlYWwKewogIGJhY2tncm91bmQtY29sb3I6ICM2MEQyQjY7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1idG4uXFwtYnRuLS1ibHVlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNEU5MUU0OwogIGNvbG9yOiAjRkZGOwp9CgouXFwtYnRuLlxcLWJ0bi0tcHVycGxlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjQUM5NEU4OwogIGNvbG9yOiAjRkZGOwp9CgouXFwtYnRuLlxcLWJ0bi0tcGluawp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0U3N0VCODsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLWJ0bi5cXC1idG4tLXJlZAp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0VFNjc1RDsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLWJ0bi5cXC1idG4tLW9yYW5nZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0Y3ODA1NTsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLWJ0bi5cXC1idG4tLXllbGxvdwp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0ZCQzg1MDsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLWJ0bi5cXC1idG4tLWdyZXkKewogIGJhY2tncm91bmQtY29sb3I6ICNEREU1RUU7CiAgY29sb3I6ICM1NDY3Nzg7Cn0KCi5cXC1idG4tLWRpc2FibGVkCnsKICBvcGFjaXR5OiAwLjYgIWltcG9ydGFudDsKICBjdXJzb3I6IG5vdC1hbGxvd2VkICFpbXBvcnRhbnQ7Cn0KCi5cXC1idG4tLXNtYWxsCnsKICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgcGFkZGluZy1yaWdodDogMTBweDsKICBwYWRkaW5nLXRvcDogNHB4OwogIHBhZGRpbmctYm90dG9tOiA0cHg7CiAgZm9udC1zaXplOiAxMnB4OwogIGxpbmUtaGVpZ2h0OiAxNnB4Owp9CgouXFwtYnRuLS1iaWcKewogIHBhZGRpbmctbGVmdDogMjBweDsKICBwYWRkaW5nLXJpZ2h0OiAyMHB4OwogIHBhZGRpbmctdG9wOiA5cHg7CiAgcGFkZGluZy1ib3R0b206IDlweDsKICBmb250LXNpemU6IDIwcHg7CiAgbGluZS1oZWlnaHQ6IDMwcHg7Cn0KCi5cXC1idG4tLWZsdWlkCnsKICB3aWR0aDogMTAwJTsKICBwYWRkaW5nLWxlZnQ6IDBweCAhaW1wb3J0YW50OwogIHBhZGRpbmctcmlnaHQ6IDBweCAhaW1wb3J0YW50Owp9CgouXFwtYnRuLS1yb3VuZGVkCnsKICBib3JkZXItcmFkaXVzOiA1MHB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC1idG4tZ3JvdXAKewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQoKLlxcLWJ0bi1ncm91cCA+IC5cXC1idG46bm90KDpmaXJzdC1jaGlsZCkKewogIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDBweDsKICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwcHg7CiAgbWFyZ2luLWxlZnQ6IC0xcHg7Cn0KCi5cXC1idG4tZ3JvdXAgPiAuXFwtYnRuOm5vdCg6bGFzdC1jaGlsZCkKewogIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwcHg7CiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDBweDsKICBtYXJnaW4tcmlnaHQ6IC0ycHg7Cn0KCi5cXC1jbG9zZQp7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHdpZHRoOiAyMHB4OwogIGhlaWdodDogMjBweDsKICBjdXJzb3I6IHBvaW50ZXI7CiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBib3JkZXItcmFkaXVzOiAxMDBweDsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDg0LCAxMDMsIDEyMCwgMC4zKTsKfQoKLlxcLWNsb3NlOmFmdGVyLCAuXFwtY2xvc2U6YmVmb3JlCnsKICBjb250ZW50OiAiIjsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogMTJweDsKICBoZWlnaHQ6IDJweDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiA5cHg7CiAgbGVmdDogNHB4OwogIGJhY2tncm91bmQtY29sb3I6ICNGRkY7Cn0KCi5cXC1jbG9zZTphZnRlcgp7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CiAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOwp9CgouXFwtY2xvc2U6YmVmb3JlCnsKICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7CiAgdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTsKfQoKLlxcLWNsb3NlOmhvdmVyCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDg0LCAxMDMsIDEyMCwgMC41KTsKfQoKLlxcLXJ1bGUKewogIGRpc3BsYXk6IGJsb2NrOwogIGhlaWdodDogMnB4OwogIGJhY2tncm91bmQtY29sb3I6ICNEREU1RUU7CiAgcGFkZGluZzogMHB4OwogIG1hcmdpbi10b3A6IDE1cHg7CiAgbWFyZ2luLWJvdHRvbTogMTVweDsKICBib3JkZXI6IDBweDsKfQoKLlxcLXJ1bGU6Zmlyc3QtY2hpbGQKewogIG1hcmdpbi10b3A6IDBweCAhaW1wb3J0YW50Owp9CgouXFwtcnVsZTpsYXN0LWNoaWxkCnsKICBtYXJnaW4tYm90dG9tOiAwcHggIWltcG9ydGFudDsKfQoKQC13ZWJraXQta2V5ZnJhbWVzIHNpaW1wbGUtc3Bpbm5lci1hbmltYXRpb24KewogIDUwJQogIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogIH0KfQoKQGtleWZyYW1lcyBzaWltcGxlLXNwaW5uZXItYW5pbWF0aW9uCnsKICA1MCUKICB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICB9Cn0KCi5cXC1zcGlubmVyCnsKICB3aWR0aDogMTBweDsKICBoZWlnaHQ6IDEwcHg7CiAgY29udGVudDogIiI7CiAgLXdlYmtpdC1hbmltYXRpb246IHNpaW1wbGUtc3Bpbm5lci1hbmltYXRpb24gMXMgaW5maW5pdGUgZWFzZS1pbi1vdXQ7CiAgYW5pbWF0aW9uOiBzaWltcGxlLXNwaW5uZXItYW5pbWF0aW9uIDFzIGluZmluaXRlIGVhc2UtaW4tb3V0OwogIC13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDsKICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoOwogIGJvcmRlci1yYWRpdXM6IDEwMHB4OwogIGRpc3BsYXk6IGJsb2NrOwogIHRleHQtaW5kZW50OiAtOTk5OWVtOwogIGZvbnQtc2l6ZTogMTBweDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAwLjMzczsKICBhbmltYXRpb24tZGVsYXk6IDAuMzNzOwogIG1hcmdpbi1sZWZ0OiBhdXRvOwogIG1hcmdpbi1yaWdodDogYXV0bzsKICBtYXJnaW4tdG9wOiAwcHg7Cn0KCi5cXC1zcGlubmVyOmJlZm9yZQp7CiAgd2lkdGg6IDEwcHg7CiAgaGVpZ2h0OiAxMHB4OwogIGNvbnRlbnQ6ICIiOwogIC13ZWJraXQtYW5pbWF0aW9uOiBzaWltcGxlLXNwaW5uZXItYW5pbWF0aW9uIDFzIGluZmluaXRlIGVhc2UtaW4tb3V0OwogIGFuaW1hdGlvbjogc2lpbXBsZS1zcGlubmVyLWFuaW1hdGlvbiAxcyBpbmZpbml0ZSBlYXNlLWluLW91dDsKICAtd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7CiAgYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDsKICBib3JkZXItcmFkaXVzOiAxMDBweDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgbGVmdDogY2FsYygxNXB4ICogLTEpOwogIHRvcDogMDsKfQoKLlxcLXNwaW5uZXI6YWZ0ZXIKewogIHdpZHRoOiAxMHB4OwogIGhlaWdodDogMTBweDsKICBjb250ZW50OiAiIjsKICAtd2Via2l0LWFuaW1hdGlvbjogc2lpbXBsZS1zcGlubmVyLWFuaW1hdGlvbiAxcyBpbmZpbml0ZSBlYXNlLWluLW91dDsKICBhbmltYXRpb246IHNpaW1wbGUtc3Bpbm5lci1hbmltYXRpb24gMXMgaW5maW5pdGUgZWFzZS1pbi1vdXQ7CiAgLXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOiBib3RoOwogIGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7CiAgYm9yZGVyLXJhZGl1czogMTAwcHg7CiAgLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDAuNjZzOwogIGFuaW1hdGlvbi1kZWxheTogMC42NnM7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGxlZnQ6IDE1cHg7CiAgdG9wOiAwOwp9CgouXFwtc3Bpbm5lci5cXC1zcGlubmVyLS1wcmltYXJ5LCAuXFwtc3Bpbm5lci5cXC1zcGlubmVyLS1wcmltYXJ5OmFmdGVyLCAuXFwtc3Bpbm5lci5cXC1zcGlubmVyLS1wcmltYXJ5OmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzRFOTFFNDsKfQoKLlxcLXNwaW5uZXIuXFwtc3Bpbm5lci0tc3VjY2VzcywgLlxcLXNwaW5uZXIuXFwtc3Bpbm5lci0tc3VjY2VzczphZnRlciwgLlxcLXNwaW5uZXIuXFwtc3Bpbm5lci0tc3VjY2VzczpiZWZvcmUKewogIGJhY2tncm91bmQtY29sb3I6ICM0QUNGN0Y7Cn0KCi5cXC1zcGlubmVyLlxcLXNwaW5uZXItLXdhcm5pbmcsIC5cXC1zcGlubmVyLlxcLXNwaW5uZXItLXdhcm5pbmc6YWZ0ZXIsIC5cXC1zcGlubmVyLlxcLXNwaW5uZXItLXdhcm5pbmc6YmVmb3JlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkJDODUwOwp9CgouXFwtc3Bpbm5lci5cXC1zcGlubmVyLS1lcnJvciwgLlxcLXNwaW5uZXIuXFwtc3Bpbm5lci0tZXJyb3I6YWZ0ZXIsIC5cXC1zcGlubmVyLlxcLXNwaW5uZXItLWVycm9yOmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0VFNjc1RDsKfQoKLlxcLXNwaW5uZXIuXFwtc3Bpbm5lci0tZGFyaywgLlxcLXNwaW5uZXIuXFwtc3Bpbm5lci0tZGFyazphZnRlciwgLlxcLXNwaW5uZXIuXFwtc3Bpbm5lci0tZGFyazpiZWZvcmUKewogIGJhY2tncm91bmQtY29sb3I6ICM1NDY3Nzg7Cn0KCi5cXC1zcGlubmVyLlxcLXNwaW5uZXItLWxpZ2h0LCAuXFwtc3Bpbm5lci5cXC1zcGlubmVyLS1saWdodDphZnRlciwgLlxcLXNwaW5uZXIuXFwtc3Bpbm5lci0tbGlnaHQ6YmVmb3JlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRERFNUVFOwp9CgouXFwtc3Bpbm5lci5cXC1zcGlubmVyLS1uYXZ5LCAuXFwtc3Bpbm5lci5cXC1zcGlubmVyLS1uYXZ5OmFmdGVyLCAuXFwtc3Bpbm5lci5cXC1zcGlubmVyLS1uYXZ5OmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzU0Njc3ODsKfQoKLlxcLXNwaW5uZXIuXFwtc3Bpbm5lci0tZ3JlZW4sIC5cXC1zcGlubmVyLlxcLXNwaW5uZXItLWdyZWVuOmFmdGVyLCAuXFwtc3Bpbm5lci5cXC1zcGlubmVyLS1ncmVlbjpiZWZvcmUKewogIGJhY2tncm91bmQtY29sb3I6ICM5M0QyNjA7Cn0KCi5cXC1zcGlubmVyLlxcLXNwaW5uZXItLXRlYWwsIC5cXC1zcGlubmVyLlxcLXNwaW5uZXItLXRlYWw6YWZ0ZXIsIC5cXC1zcGlubmVyLlxcLXNwaW5uZXItLXRlYWw6YmVmb3JlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjBEMkI2Owp9CgouXFwtc3Bpbm5lci5cXC1zcGlubmVyLS1ibHVlLCAuXFwtc3Bpbm5lci5cXC1zcGlubmVyLS1ibHVlOmFmdGVyLCAuXFwtc3Bpbm5lci5cXC1zcGlubmVyLS1ibHVlOmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzRFOTFFNDsKfQoKLlxcLXNwaW5uZXIuXFwtc3Bpbm5lci0tcHVycGxlLCAuXFwtc3Bpbm5lci5cXC1zcGlubmVyLS1wdXJwbGU6YWZ0ZXIsIC5cXC1zcGlubmVyLlxcLXNwaW5uZXItLXB1cnBsZTpiZWZvcmUKewogIGJhY2tncm91bmQtY29sb3I6ICNBQzk0RTg7Cn0KCi5cXC1zcGlubmVyLlxcLXNwaW5uZXItLXBpbmssIC5cXC1zcGlubmVyLlxcLXNwaW5uZXItLXBpbms6YWZ0ZXIsIC5cXC1zcGlubmVyLlxcLXNwaW5uZXItLXBpbms6YmVmb3JlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTc3RUI4Owp9CgouXFwtc3Bpbm5lci5cXC1zcGlubmVyLS1yZWQsIC5cXC1zcGlubmVyLlxcLXNwaW5uZXItLXJlZDphZnRlciwgLlxcLXNwaW5uZXIuXFwtc3Bpbm5lci0tcmVkOmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0VFNjc1RDsKfQoKLlxcLXNwaW5uZXIuXFwtc3Bpbm5lci0tb3JhbmdlLCAuXFwtc3Bpbm5lci5cXC1zcGlubmVyLS1vcmFuZ2U6YWZ0ZXIsIC5cXC1zcGlubmVyLlxcLXNwaW5uZXItLW9yYW5nZTpiZWZvcmUKewogIGJhY2tncm91bmQtY29sb3I6ICNGNzgwNTU7Cn0KCi5cXC1zcGlubmVyLlxcLXNwaW5uZXItLXllbGxvdywgLlxcLXNwaW5uZXIuXFwtc3Bpbm5lci0teWVsbG93OmFmdGVyLCAuXFwtc3Bpbm5lci5cXC1zcGlubmVyLS15ZWxsb3c6YmVmb3JlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkJDODUwOwp9CgouXFwtc3Bpbm5lci5cXC1zcGlubmVyLS1ncmV5LCAuXFwtc3Bpbm5lci5cXC1zcGlubmVyLS1ncmV5OmFmdGVyLCAuXFwtc3Bpbm5lci5cXC1zcGlubmVyLS1ncmV5OmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0RERTVFRTsKfQoKLlxcLXNwaW5uZXItLXNtYWxsLCAuXFwtc3Bpbm5lci0tc21hbGw6YmVmb3JlLCAuXFwtc3Bpbm5lci0tc21hbGw6YWZ0ZXIKewogIHdpZHRoOiA4cHggIWltcG9ydGFudDsKICBoZWlnaHQ6IDhweCAhaW1wb3J0YW50Owp9CgouXFwtc3Bpbm5lci0tc21hbGw6YmVmb3JlCnsKICBsZWZ0OiBjYWxjKDEzcHggKiAtMSkgIWltcG9ydGFudDsKfQoKLlxcLXNwaW5uZXItLXNtYWxsOmFmdGVyCnsKICBsZWZ0OiAxM3B4ICFpbXBvcnRhbnQ7Cn0KCi5cXC1zcGlubmVyLS1sYXJnZSwgLlxcLXNwaW5uZXItLWxhcmdlOmJlZm9yZSwgLlxcLXNwaW5uZXItLWxhcmdlOmFmdGVyCnsKICB3aWR0aDogMTVweCAhaW1wb3J0YW50OwogIGhlaWdodDogMTVweCAhaW1wb3J0YW50Owp9CgouXFwtc3Bpbm5lci0tbGFyZ2U6YmVmb3JlCnsKICBsZWZ0OiBjYWxjKDIwcHggKiAtMSkgIWltcG9ydGFudDsKfQoKLlxcLXNwaW5uZXItLWxhcmdlOmFmdGVyCnsKICBsZWZ0OiAyMHB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC10YWcKewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LXNpemU6IDExcHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGxpbmUtaGVpZ2h0OiAxOXB4OwogIGJvcmRlci1yYWRpdXM6IDRweDsKICBwYWRkaW5nLWxlZnQ6IDhweDsKICBwYWRkaW5nLXJpZ2h0OiA4cHg7CiAgdmVydGljYWwtYWxpZ246IHRleHQtdG9wOwp9CgouXFwtdGFnLS1yb3VuZGVkCnsKICBib3JkZXItcmFkaXVzOiAxNXB4Owp9CgouXFwtdGFnLlxcLXRhZy0tcHJpbWFyeQp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzRFOTFFNDsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLXRhZy5cXC10YWctLXN1Y2Nlc3MKewogIGJhY2tncm91bmQtY29sb3I6ICM0QUNGN0Y7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC10YWcuXFwtdGFnLS13YXJuaW5nCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkJDODUwOwogIGNvbG9yOiAjRkZGOwp9CgouXFwtdGFnLlxcLXRhZy0tZXJyb3IKewogIGJhY2tncm91bmQtY29sb3I6ICNFRTY3NUQ7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC10YWcuXFwtdGFnLS1kYXJrCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ2Nzc4OwogIGNvbG9yOiAjRkZGOwp9CgouXFwtdGFnLlxcLXRhZy0tbGlnaHQKewogIGJhY2tncm91bmQtY29sb3I6ICNEREU1RUU7CiAgY29sb3I6ICM1NDY3Nzg7Cn0KCi5cXC10YWcuXFwtdGFnLS1uYXZ5CnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ2Nzc4OwogIGNvbG9yOiAjRkZGOwp9CgouXFwtdGFnLlxcLXRhZy0tZ3JlZW4KewogIGJhY2tncm91bmQtY29sb3I6ICM5M0QyNjA7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC10YWcuXFwtdGFnLS10ZWFsCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjBEMkI2OwogIGNvbG9yOiAjRkZGOwp9CgouXFwtdGFnLlxcLXRhZy0tYmx1ZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzRFOTFFNDsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLXRhZy5cXC10YWctLXB1cnBsZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0FDOTRFODsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLXRhZy5cXC10YWctLXBpbmsKewogIGJhY2tncm91bmQtY29sb3I6ICNFNzdFQjg7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC10YWcuXFwtdGFnLS1yZWQKewogIGJhY2tncm91bmQtY29sb3I6ICNFRTY3NUQ7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC10YWcuXFwtdGFnLS1vcmFuZ2UKewogIGJhY2tncm91bmQtY29sb3I6ICNGNzgwNTU7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC10YWcuXFwtdGFnLS15ZWxsb3cKewogIGJhY2tncm91bmQtY29sb3I6ICNGQkM4NTA7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC10YWcuXFwtdGFnLS1ncmV5CnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRERFNUVFOwogIGNvbG9yOiAjNTQ2Nzc4Owp9CgouXFwtdGlwCnsKICBkaXNwbGF5OiBibG9jazsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgd2lkdGg6IGNhbGMoMTAwJSAtIDI1cHggLSAyMHB4IC0gNXB4KTsKICBib3JkZXItbGVmdC1zdHlsZTogc29saWQ7CiAgYm9yZGVyLWxlZnQtd2lkdGg6IDVweDsKICBib3JkZXItcmFkaXVzOiA1cHg7CiAgcGFkZGluZy10b3A6IDEwcHg7CiAgcGFkZGluZy1yaWdodDogMjBweCAhaW1wb3J0YW50OwogIHBhZGRpbmctYm90dG9tOiAxMHB4OwogIHBhZGRpbmctbGVmdDogMjVweCAhaW1wb3J0YW50OwogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgYmFja2dyb3VuZC1jb2xvcjogI0VFRjJGNzsKICBmb250LXNpemU6IDE2cHg7CiAgY29sb3I6ICM1NDY3Nzg7CiAgbGluZS1oZWlnaHQ6IDI0cHg7Cn0KCi5cXC10aXA6OmJlZm9yZQp7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMTBweDsKICBsZWZ0OiAtMTJweDsKICB3aWR0aDogMjBweDsKICBoZWlnaHQ6IDIwcHg7CiAgYm9yZGVyLXJhZGl1czogMTAwcHg7CiAgY29sb3I6ICNGRkY7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIGxpbmUtaGVpZ2h0OiAyMHB4Owp9CgouXFwtdGlwLlxcLXRpcC0tcHJpbWFyeQp7CiAgYm9yZGVyLWxlZnQtY29sb3I6ICM0RTkxRTQ7Cn0KCi5cXC10aXAuXFwtdGlwLS1wcmltYXJ5OjpiZWZvcmUKewogIGJhY2tncm91bmQtY29sb3I6ICM0RTkxRTQ7Cn0KCi5cXC10aXAuXFwtdGlwLS1zdWNjZXNzCnsKICBib3JkZXItbGVmdC1jb2xvcjogIzRBQ0Y3RjsKfQoKLlxcLXRpcC5cXC10aXAtLXN1Y2Nlc3M6OmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzRBQ0Y3RjsKfQoKLlxcLXRpcC5cXC10aXAtLXdhcm5pbmcKewogIGJvcmRlci1sZWZ0LWNvbG9yOiAjRkJDODUwOwp9CgouXFwtdGlwLlxcLXRpcC0td2FybmluZzo6YmVmb3JlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkJDODUwOwp9CgouXFwtdGlwLlxcLXRpcC0tZXJyb3IKewogIGJvcmRlci1sZWZ0LWNvbG9yOiAjRUU2NzVEOwp9CgouXFwtdGlwLlxcLXRpcC0tZXJyb3I6OmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0VFNjc1RDsKfQoKLlxcLXRpcC5cXC10aXAtLWRhcmsKewogIGJvcmRlci1sZWZ0LWNvbG9yOiAjNTQ2Nzc4Owp9CgouXFwtdGlwLlxcLXRpcC0tZGFyazo6YmVmb3JlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ2Nzc4Owp9CgouXFwtdGlwLlxcLXRpcC0tbGlnaHQKewogIGJvcmRlci1sZWZ0LWNvbG9yOiAjRERFNUVFOwp9CgouXFwtdGlwLlxcLXRpcC0tbGlnaHQ6OmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0RERTVFRTsKfQoKLlxcLXRpcC5cXC10aXAtLW5hdnkKewogIGJvcmRlci1sZWZ0LWNvbG9yOiAjNTQ2Nzc4Owp9CgouXFwtdGlwLlxcLXRpcC0tbmF2eTo6YmVmb3JlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ2Nzc4Owp9CgouXFwtdGlwLlxcLXRpcC0tZ3JlZW4KewogIGJvcmRlci1sZWZ0LWNvbG9yOiAjOTNEMjYwOwp9CgouXFwtdGlwLlxcLXRpcC0tZ3JlZW46OmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzkzRDI2MDsKfQoKLlxcLXRpcC5cXC10aXAtLXRlYWwKewogIGJvcmRlci1sZWZ0LWNvbG9yOiAjNjBEMkI2Owp9CgouXFwtdGlwLlxcLXRpcC0tdGVhbDo6YmVmb3JlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjBEMkI2Owp9CgouXFwtdGlwLlxcLXRpcC0tYmx1ZQp7CiAgYm9yZGVyLWxlZnQtY29sb3I6ICM0RTkxRTQ7Cn0KCi5cXC10aXAuXFwtdGlwLS1ibHVlOjpiZWZvcmUKewogIGJhY2tncm91bmQtY29sb3I6ICM0RTkxRTQ7Cn0KCi5cXC10aXAuXFwtdGlwLS1wdXJwbGUKewogIGJvcmRlci1sZWZ0LWNvbG9yOiAjQUM5NEU4Owp9CgouXFwtdGlwLlxcLXRpcC0tcHVycGxlOjpiZWZvcmUKewogIGJhY2tncm91bmQtY29sb3I6ICNBQzk0RTg7Cn0KCi5cXC10aXAuXFwtdGlwLS1waW5rCnsKICBib3JkZXItbGVmdC1jb2xvcjogI0U3N0VCODsKfQoKLlxcLXRpcC5cXC10aXAtLXBpbms6OmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0U3N0VCODsKfQoKLlxcLXRpcC5cXC10aXAtLXJlZAp7CiAgYm9yZGVyLWxlZnQtY29sb3I6ICNFRTY3NUQ7Cn0KCi5cXC10aXAuXFwtdGlwLS1yZWQ6OmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0VFNjc1RDsKfQoKLlxcLXRpcC5cXC10aXAtLW9yYW5nZQp7CiAgYm9yZGVyLWxlZnQtY29sb3I6ICNGNzgwNTU7Cn0KCi5cXC10aXAuXFwtdGlwLS1vcmFuZ2U6OmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0Y3ODA1NTsKfQoKLlxcLXRpcC5cXC10aXAtLXllbGxvdwp7CiAgYm9yZGVyLWxlZnQtY29sb3I6ICNGQkM4NTA7Cn0KCi5cXC10aXAuXFwtdGlwLS15ZWxsb3c6OmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0ZCQzg1MDsKfQoKLlxcLXRpcC5cXC10aXAtLWdyZXkKewogIGJvcmRlci1sZWZ0LWNvbG9yOiAjRERFNUVFOwp9CgouXFwtdGlwLlxcLXRpcC0tZ3JleTo6YmVmb3JlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRERFNUVFOwp9CgouXFwtdGlwLS1leGNsYW1hdGlvbjo6YmVmb3JlCnsKICBjb250ZW50OiAiISI7Cn0KCi5cXC10aXAtLXF1ZXN0aW9uOjpiZWZvcmUKewogIGNvbnRlbnQ6ICI/IjsKfQoKLlxcLXRpcC0taGVhcnQ6OmJlZm9yZQp7CiAgY29udGVudDogIuKdpCI7Cn0KCi5cXC1hbGVydAp7CiAgZGlzcGxheTogYmxvY2s7CiAgd2lkdGg6IGNhbGMoMTAwJSAtIDE1cHggLSAzMHB4KTsKICBsaW5lLWhlaWdodDogMjRweDsKICBmb250LXNpemU6IDE2cHg7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGJvcmRlci1yYWRpdXM6IDVweDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVGMkY3OwogIGNvbG9yOiAjNTQ2Nzc4OwogIHBhZGRpbmctdG9wOiAxMHB4OwogIHBhZGRpbmctcmlnaHQ6IDMwcHg7CiAgcGFkZGluZy1ib3R0b206IDEwcHg7CiAgcGFkZGluZy1sZWZ0OiAxNXB4OwogIG1hcmdpbi1ib3R0b206IDIwcHg7Cn0KCi5cXC1hbGVydC10aXRsZQp7CiAgZm9udC1zaXplOiAxOXB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGxpbmUtaGVpZ2h0OiAyNnB4Owp9CgouXFwtYWxlcnQtY2xvc2UKewogIGRpc3BsYXk6IGJsb2NrOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDEwcHg7CiAgcmlnaHQ6IDEwcHg7CiAgd2lkdGg6IDE2cHg7CiAgaGVpZ2h0OiAxNnB4OwogIGN1cnNvcjogcG9pbnRlcjsKICBvcGFjaXR5OiAwLjY7CiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzOwp9CgouXFwtYWxlcnQtY2xvc2U6aG92ZXIKewogIG9wYWNpdHk6IDE7Cn0KCi5cXC1hbGVydC1jbG9zZTo6YmVmb3JlLCAuXFwtYWxlcnQtY2xvc2U6OmFmdGVyCnsKICBjb250ZW50OiAiIjsKICB3aWR0aDogMTZweDsKICBoZWlnaHQ6IDNweDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ2Nzc4OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBib3JkZXItcmFkaXVzOiAxcHg7CiAgdG9wOiA2cHg7Cn0KCi5cXC1hbGVydC1jbG9zZTo6YmVmb3JlCnsKICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7Cn0KCi5cXC1hbGVydC1jbG9zZTo6YWZ0ZXIKewogIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpOwp9CgouXFwtYWxlcnQuXFwtYWxlcnQtLXByaW1hcnkKewogIGJhY2tncm91bmQtY29sb3I6ICNBN0M4RjI7CiAgY29sb3I6ICMxQjVFQjE7Cn0KCi5cXC1hbGVydC0tcHJpbWFyeSAuXFwtYWxlcnQtY2xvc2U6OmJlZm9yZSwgLlxcLWFsZXJ0LS1wcmltYXJ5IC5cXC1hbGVydC1jbG9zZTo6YWZ0ZXIKewogIGJhY2tncm91bmQtY29sb3I6ICMxQjVFQjE7Cn0KCi5cXC1hbGVydC5cXC1hbGVydC0tc3VjY2Vzcwp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzlCRTRCODsKICBjb2xvcjogIzI2OEQ0RjsKfQoKLlxcLWFsZXJ0LS1zdWNjZXNzIC5cXC1hbGVydC1jbG9zZTo6YmVmb3JlLCAuXFwtYWxlcnQtLXN1Y2Nlc3MgLlxcLWFsZXJ0LWNsb3NlOjphZnRlcgp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzI2OEQ0RjsKfQoKLlxcLWFsZXJ0LlxcLWFsZXJ0LS13YXJuaW5nCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkRFN0I0OwogIGNvbG9yOiAjRTA5RjA1Owp9CgouXFwtYWxlcnQtLXdhcm5pbmcgLlxcLWFsZXJ0LWNsb3NlOjpiZWZvcmUsIC5cXC1hbGVydC0td2FybmluZyAuXFwtYWxlcnQtY2xvc2U6OmFmdGVyCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTA5RjA1Owp9CgouXFwtYWxlcnQuXFwtYWxlcnQtLWVycm9yCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhCRUI5OwogIGNvbG9yOiAjQ0YyMzE2Owp9CgouXFwtYWxlcnQtLWVycm9yIC5cXC1hbGVydC1jbG9zZTo6YmVmb3JlLCAuXFwtYWxlcnQtLWVycm9yIC5cXC1hbGVydC1jbG9zZTo6YWZ0ZXIKewogIGJhY2tncm91bmQtY29sb3I6ICNDRjIzMTY7Cn0KCi5cXC1hbGVydC5cXC1hbGVydC0tZGFyawp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzg3OUFBQjsKICBjb2xvcjogIzJBMzQzQzsKfQoKLlxcLWFsZXJ0LS1kYXJrIC5cXC1hbGVydC1jbG9zZTo6YmVmb3JlLCAuXFwtYWxlcnQtLWRhcmsgLlxcLWFsZXJ0LWNsb3NlOjphZnRlcgp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzJBMzQzQzsKfQoKLlxcLWFsZXJ0LlxcLWFsZXJ0LS1saWdodAp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0VFRjJGNzsKICBjb2xvcjogI0NCRDhFNjsKfQoKLlxcLWFsZXJ0LS1saWdodCAuXFwtYWxlcnQtY2xvc2U6OmJlZm9yZSwgLlxcLWFsZXJ0LS1saWdodCAuXFwtYWxlcnQtY2xvc2U6OmFmdGVyCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjQ0JEOEU2Owp9CgouXFwtYWxlcnQuXFwtYWxlcnQtLW5hdnkKewogIGJhY2tncm91bmQtY29sb3I6ICM3ODhFQTE7CiAgY29sb3I6ICMzNDQxNEI7Cn0KCi5cXC1hbGVydC5cXC1hbGVydC0tZ3JlZW4KewogIGJhY2tncm91bmQtY29sb3I6ICNCQ0UzOUM7CiAgY29sb3I6ICM2Q0IzMzI7Cn0KCi5cXC1hbGVydC5cXC1hbGVydC0tdGVhbAp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzlDRTNEMTsKICBjb2xvcjogIzMyQjM5MzsKfQoKLlxcLWFsZXJ0LlxcLWFsZXJ0LS1ibHVlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTBCQkVFOwogIGNvbG9yOiAjMUU2QUM4Owp9CgouXFwtYWxlcnQuXFwtYWxlcnQtLXB1cnBsZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0RFRDVGNjsKICBjb2xvcjogIzdDNTdEQjsKfQoKLlxcLWFsZXJ0LlxcLWFsZXJ0LS1waW5rCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjNCRURCOwogIGNvbG9yOiAjREIzRDk0Owp9CgouXFwtYWxlcnQuXFwtYWxlcnQtLXJlZAp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0Y1QThBMzsKICBjb2xvcjogI0U3MjYxODsKfQoKLlxcLWFsZXJ0LlxcLWFsZXJ0LS1vcmFuZ2UKewogIGJhY2tncm91bmQtY29sb3I6ICNGQUI2OUU7CiAgY29sb3I6ICNGNDQ5MEI7Cn0KCi5cXC1hbGVydC5cXC1hbGVydC0teWVsbG93CnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkRFMDlCOwogIGNvbG9yOiAjRkFCMDA1Owp9CgouXFwtYWxlcnQuXFwtYWxlcnQtLWdyZXkKewogIGJhY2tncm91bmQtY29sb3I6ICNFRUYyRjc7CiAgY29sb3I6ICNDQkQ4RTY7Cn0KCi5cXC1hbGVydCAuXFwtY2xvc2UKewogIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OwogIHJpZ2h0OiA1cHggIWltcG9ydGFudDsKICB0b3A6IDVweCAhaW1wb3J0YW50Owp9CgouXFwtYnJlYWRjcnVtYgp7CiAgZGlzcGxheTogYmxvY2s7CiAgaGVpZ2h0OiAyNHB4OwogIHBhZGRpbmctdG9wOiAxMHB4OwogIHBhZGRpbmctYm90dG9tOiAxMHB4OwogIHBhZGRpbmctbGVmdDogMTVweDsKICBwYWRkaW5nLXJpZ2h0OiAxNXB4OwogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgYmFja2dyb3VuZC1jb2xvcjogI0VFRjJGNzsKICBib3JkZXItcmFkaXVzOiA1cHg7CiAgYm9yZGVyOiAwcHg7Cn0KCi5cXC1icmVhZGNydW1iLWl0ZW0sIC5cXC1icmVhZGNydW1iLWNydW1iCnsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgZmxvYXQ6IGxlZnQ7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGhlaWdodDogMjRweDsKICBsaW5lLWhlaWdodDogMjRweDsKICBmb250LXNpemU6IDE0cHg7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgY29sb3I6ICM0RTkxRTQ7CiAgdHJhbnNpdGlvbjogY29sb3IgMC4zczsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5cXC1icmVhZGNydW1iLWl0ZW06bm90KDpmaXJzdC1vZi10eXBlKSwgLlxcLWJyZWFkY3J1bWItY3J1bWI6bm90KDpmaXJzdC1vZi10eXBlKQp7CiAgcGFkZGluZy1sZWZ0OiA4cHg7Cn0KCi5cXC1icmVhZGNydW1iLWl0ZW06aG92ZXIsIC5cXC1icmVhZGNydW1iLWNydW1iOmhvdmVyCnsKICBjb2xvcjogIzFCNUVCMTsKfQoKLlxcLWJyZWFkY3J1bWItaXRlbTpub3QoOmZpcnN0LW9mLXR5cGUpOjpiZWZvcmUsIC5cXC1icmVhZGNydW1iLWNydW1iOm5vdCg6Zmlyc3Qtb2YtdHlwZSk6OmJlZm9yZQp7CiAgY29udGVudDogIi8iOwogIGNvbG9yOiAjODc5QUFCOwogIGZvbnQtd2VpZ2h0OiBib2xkICFpbXBvcnRhbnQ7CiAgcGFkZGluZy1yaWdodDogOHB4Owp9CgouXFwtYnJlYWRjcnVtYi1pdGVtLS1zZWxlY3RlZCwgLlxcLWJyZWFkY3J1bWItY3J1bWItLXNlbGVjdGVkCnsKICBjb2xvcjogIzU0Njc3OCAhaW1wb3J0YW50OwogIGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50OwogIGZvbnQtd2VpZ2h0OiBub3JtYWwgIWltcG9ydGFudDsKfQoKLlxcLWNhcmQKewogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxMDAlOwogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgY29sb3I6ICM1NDY3Nzg7CiAgZm9udC1zaXplOiAxNnB4Owp9CgouXFwtY2FyZC1oZWFkZXIsIC5cXC1jYXJkLWJvZHksIC5cXC1jYXJkLWZvb3RlciwgLlxcLWNhcmQtbGluawp7CiAgZGlzcGxheTogYmxvY2s7CiAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRUVGMkY3OwogIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICNFRUYyRjc7CiAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICNFRUYyRjc7Cn0KCi5cXC1jYXJkLWhlYWRlcjpmaXJzdC1jaGlsZCwgLlxcLWNhcmQtYm9keTpmaXJzdC1jaGlsZCwgLlxcLWNhcmQtZm9vdGVyOmZpcnN0LWNoaWxkLCAuXFwtY2FyZC1saW5rOmZpcnN0LWNoaWxkCnsKICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA1cHg7CiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDVweDsKfQoKLlxcLWNhcmQtaGVhZGVyOmxhc3QtY2hpbGQsIC5cXC1jYXJkLWJvZHk6bGFzdC1jaGlsZCwgLlxcLWNhcmQtZm9vdGVyOmxhc3QtY2hpbGQsIC5cXC1jYXJkLWxpbms6bGFzdC1jaGlsZAp7CiAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNFRUYyRjc7CiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNXB4OwogIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA1cHg7Cn0KCi5cXC1jYXJkLWhlYWRlciwgLlxcLWNhcmQtZm9vdGVyCnsKICBwYWRkaW5nOiAxMnB4OwogIGJhY2tncm91bmQtY29sb3I6ICNFRUYyRjc7Cn0KCi5cXC1jYXJkLWhlYWRlcgp7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5cXC1jYXJkLWJvZHkKewogIHBhZGRpbmc6IDEycHg7Cn0KCi5cXC1jYXJkLWxpbmsKewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBjb2xvcjogIzRFOTFFNDsKICBmb250LXdlaWdodDogYm9sZDsKICBmb250LXNpemU6IDE1cHg7CiAgcGFkZGluZzogMTJweDsKICBjdXJzb3I6IHBvaW50ZXI7CiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzOwp9CgouXFwtY2FyZC1saW5rOjpiZWZvcmUKewogIGRpc3BsYXk6IGJsb2NrOwogIGNvbnRlbnQ6ICIiOwogIHdpZHRoOiAxMXB4OwogIGhlaWdodDogMTFweDsKICBib3JkZXItdG9wOiAzcHggc29saWQgIzRFOTFFNDsKICBib3JkZXItcmlnaHQ6IDNweCBzb2xpZCAjNEU5MUU0OwogIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOwogIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICBib3JkZXItcmFkaXVzOiAycHg7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMTdweDsKICByaWdodDogMTVweDsKICB0cmFuc2l0aW9uOiByaWdodCAwLjNzOwp9CgouXFwtY2FyZC1saW5rOmhvdmVyCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVGMkY3Owp9CgouXFwtY2FyZC1saW5rOmhvdmVyOjpiZWZvcmUKewogIHJpZ2h0OiAxMnB4Owp9CgouXFwtY2FyZC10aXRsZQp7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAxOHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIG1hcmdpbi1ib3R0b206IDVweDsKfQoKLlxcLWNhcmQtc3VidGl0bGUKewogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMTVweDsKICBjb2xvcjogIzg3OUFBQjsKICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgbGluZS1oZWlnaHQ6IDIzcHg7Cn0KCi5cXC1jYXJkLXRpdGxlICsgLlxcLWNhcmQtc3VidGl0bGUKewogIG1hcmdpbi10b3A6IC01cHggIWltcG9ydGFudDsKfQoKLlxcLWxpc3QKewogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxMDAlOwogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgY29sb3I6ICM1NDY3Nzg7CiAgZm9udC1zaXplOiAxNnB4OwogIGxpbmUtaGVpZ2h0OiAyNHB4Owp9CgouXFwtbGlzdC1pdGVtCnsKICBkaXNwbGF5OiBibG9jazsKICBwYWRkaW5nOiAxMHB4OwogIGJhY2tncm91bmQtY29sb3I6ICNFRUYyRjc7CiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgY29sb3I6ICM1NDY3Nzg7Cn0KCi5cXC1saXN0LWl0ZW06Zmlyc3QtY2hpbGQKewogIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDVweDsKICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNXB4Owp9CgouXFwtbGlzdC1pdGVtOmxhc3QtY2hpbGQKewogIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDVweDsKICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNXB4Owp9CgouXFwtbGlzdC1pdGVtOm5vdCg6bGFzdC1jaGlsZCkKewogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRERFNUVFOwp9CgouXFwtbGlzdC0taG92ZXIgLlxcLWxpc3QtaXRlbTpub3QoLlxcLWxpc3QtaXRlbS0tc2VsZWN0ZWQpOmhvdmVyCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRERFNUVFOwogIGN1cnNvcjogcG9pbnRlcjsKfQoKLlxcLWxpc3QtaXRlbS0tc2VsZWN0ZWQKewogIGJhY2tncm91bmQtY29sb3I6ICNBN0M4RjI7Cn0KCi5cXC1saXN0LWl0ZW0tLXNlbGVjdGVkLCAuXFwtbGlzdC1pdGVtLS1zZWxlY3RlZCAuXFwtbGlzdC10aXRsZSwgLlxcLWxpc3QtaXRlbS0tc2VsZWN0ZWQgLlxcLWxpc3QtZGVzY3JpcHRpb24KewogIGNvbG9yOiAjMUI1RUIxOwp9CgouXFwtbGlzdC10aXRsZQp7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAxNnB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGxpbmUtaGVpZ2h0OiAyNHB4OwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICBjb2xvcjogIzU0Njc3ODsKfQoKLlxcLWxpc3QtZGVzY3JpcHRpb24KewogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMTRweDsKICBsaW5lLWhlaWdodDogMjBweDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgY29sb3I6ICM4NzlBQUI7Cn0KCi5cXC1saXN0LWl0ZW0gLlxcLXRhZwp7CiAgZmxvYXQ6IHJpZ2h0Owp9CgouXFwtbWVudQp7CiAgZGlzcGxheTogYmxvY2s7CiAgd2lkdGg6IDEwMCU7CiAgbWFyZ2luLWJvdHRvbTogMjBweDsKfQoKLlxcLW1lbnUtZ3JvdXAKewogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMjVweDsKICBsaW5lLWhlaWdodDogMjVweDsKICB0cmFuc2l0aW9uOiBjb2xvciAwLjNzOwogIGZvbnQtc2l6ZTogMTVweDsKICBmb250LXdlaWdodDogYm9sZDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgY29sb3I6ICM4NzlBQUI7Cn0KCi5cXC1tZW51LWdyb3VwOm5vdCg6Zmlyc3QtY2hpbGQpCnsKICBtYXJnaW4tdG9wOiAxMHB4Owp9CgouXFwtbWVudS1ncm91cDpob3Zlcgp7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7Cn0KCi5cXC1tZW51LWl0ZW0KewogIGRpc3BsYXk6IGJsb2NrOwogIGhlaWdodDogMzRweDsKICBsaW5lLWhlaWdodDogMzRweDsKICBib3JkZXItcmFkaXVzOiA1cHg7CiAgZm9udC1zaXplOiAxNXB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGNvbG9yOiAjODc5QUFCOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgcGFkZGluZy1yaWdodDogMTBweDsKICB0cmFuc2l0aW9uOiBhbGwgZWFzZSAwLjNzOwogIGN1cnNvcjogcG9pbnRlcjsKfQoKLlxcLW1lbnUtaXRlbTpub3QoLlxcLW1lbnUtaXRlbS0tc2VsZWN0ZWQpOmhvdmVyCnsKICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDsKICBjb2xvcjogIzRFOTFFNDsKfQoKLlxcLW1lbnUtaXRlbS0tc2VsZWN0ZWQKewogIGJhY2tncm91bmQtY29sb3I6ICNFRUYyRjc7CiAgY29sb3I6ICM1NDY3Nzg7Cn0KCi5cXC1tZW51LXN1YiwgLlxcLW1lbnUtc3VibWVudQp7CiAgZGlzcGxheTogYmxvY2s7CiAgcGFkZGluZy1sZWZ0OiAxMHB4OwogIG1hcmdpbi1sZWZ0OiAxMHB4OwogIG1hcmdpbi10b3A6IDVweDsKICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjQ0JEOEU2Owp9CgouXFwtdGFibGUKewogIGRpc3BsYXk6IHRhYmxlOwogIHdpZHRoOiAxMDAlOwogIGZvbnQtc2l6ZTogMTZweDsKICBjb2xvcjogIzU0Njc3ODsKICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOwogIGJvcmRlci1zcGFjaW5nOiAwOwogIGJvcmRlci13aWR0aDogMHB4OwogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKLlxcLXRhYmxlLXJvdwp7CiAgZGlzcGxheTogdGFibGUtcm93OwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KCi5cXC10YWJsZS1jZWxsCnsKICBkaXNwbGF5OiB0YWJsZS1jZWxsOwogIGxpbmUtaGVpZ2h0OiAyNHB4OwogIHBhZGRpbmc6IDEwcHg7CiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzOwogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjQ0JEOEU2OwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgdmVydGljYWwtYWxpZ246IHRvcDsKfQoKLlxcLXRhYmxlLWNlbGwtLXNvcnRhYmxlCnsKICBwYWRkaW5nLXJpZ2h0OiAyMHB4ICFpbXBvcnRhbnQ7CiAgY3Vyc29yOiBwb2ludGVyOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLlxcLXRhYmxlLWNlbGwtLXNvcnRhYmxlOjpiZWZvcmUsIC5cXC10YWJsZS1jZWxsLS1zb3J0YWJsZTo6YWZ0ZXIKewogIGRpc3BsYXk6IGJsb2NrOwogIGNvbnRlbnQ6ICIiOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICByaWdodDogNXB4OwogIHdpZHRoOiAwcHg7CiAgaGVpZ2h0OiAwcHg7CiAgYm9yZGVyLWxlZnQ6IDZweCBzb2xpZCB0cmFuc3BhcmVudDsKICBib3JkZXItcmlnaHQ6IDZweCBzb2xpZCB0cmFuc3BhcmVudDsKICB0cmFuc2l0aW9uOiBhbGwgMC4zczsKfQoKLlxcLXRhYmxlLWNlbGwtLXNvcnRhYmxlOjpiZWZvcmUKewogIHRvcDogMTJweDsKICBib3JkZXItYm90dG9tOiA4cHggc29saWQgI0RERTVFRTsKfQoKLlxcLXRhYmxlLWNlbGwtLXNvcnRhYmxlOjphZnRlcgp7CiAgYm90dG9tOiAxMnB4OwogIGJvcmRlci10b3A6IDhweCBzb2xpZCAjRERFNUVFOwp9CgouXFwtdGFibGUtY2VsbC0tYXNjOjpiZWZvcmUKewogIGJvcmRlci1ib3R0b20tY29sb3I6ICM0RTkxRTQ7Cn0KCi5cXC10YWJsZS1jZWxsLS1kZXNjOjphZnRlcgp7CiAgYm9yZGVyLXRvcC1jb2xvcjogIzRFOTFFNDsKfQoKLlxcLXRhYmxlLWNlbGwtLTEKewogIHdpZHRoOiA4LjMzJTsKfQoKLlxcLXRhYmxlLWNlbGwtLTIKewogIHdpZHRoOiAxNi42NiU7Cn0KCi5cXC10YWJsZS1jZWxsLS0zCnsKICB3aWR0aDogMjQuOTklOwp9CgouXFwtdGFibGUtY2VsbC0tNAp7CiAgd2lkdGg6IDMzLjMzJTsKfQoKLlxcLXRhYmxlLWNlbGwtLTUKewogIHdpZHRoOiA0MS42NiU7Cn0KCi5cXC10YWJsZS1jZWxsLS02CnsKICB3aWR0aDogNDkuOTklOwp9CgouXFwtdGFibGUtY2VsbC0tNwp7CiAgd2lkdGg6IDU4LjMzJTsKfQoKLlxcLXRhYmxlLWNlbGwtLTgKewogIHdpZHRoOiA2Ni42NiU7Cn0KCi5cXC10YWJsZS1jZWxsLS05CnsKICB3aWR0aDogNzQuOTklOwp9CgouXFwtdGFibGUtY2VsbC0tMTAKewogIHdpZHRoOiA4My4zMyU7Cn0KCi5cXC10YWJsZS1jZWxsLS0xMQp7CiAgd2lkdGg6IDkxLjY2JTsKfQoKLlxcLXRhYmxlLWNlbGwtLTEyCnsKICB3aWR0aDogOTkuOTklOwp9CgouXFwtdGFibGUtLWJvcmRlciAuXFwtdGFibGUtY2VsbAp7CiAgYm9yZGVyOiAxcHggc29saWQgI0NCRDhFNjsKfQoKLlxcLXRhYmxlLWhlYWRlcgp7CiAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwOwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KCi5cXC10YWJsZS0tYm9yZGVyIC5cXC10YWJsZS1oZWFkZXIgLlxcLXRhYmxlLXJvdzpmaXJzdC1jaGlsZCAuXFwtdGFibGUtY2VsbDpmaXJzdC1jaGlsZAp7CiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNXB4OwogIGJvcmRlci1sZWZ0LXdpZHRoOiAycHg7Cn0KCi5cXC10YWJsZS0tYm9yZGVyIC5cXC10YWJsZS1oZWFkZXIgLlxcLXRhYmxlLXJvdzpmaXJzdC1jaGlsZCAuXFwtdGFibGUtY2VsbDpsYXN0LWNoaWxkCnsKICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNXB4OwogIGJvcmRlci1yaWdodC13aWR0aDogMnB4Owp9CgouXFwtdGFibGUtLWJvcmRlciAuXFwtdGFibGUtaGVhZGVyIC5cXC10YWJsZS1yb3c6Zmlyc3QtY2hpbGQgLlxcLXRhYmxlLWNlbGwKewogIGJvcmRlci10b3Atd2lkdGg6IDJweDsKfQoKLlxcLXRhYmxlLWhlYWRlciAuXFwtdGFibGUtY2VsbAp7CiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsKICBib3JkZXItYm90dG9tOiAycHggc29saWQgI0NCRDhFNjsKICBmb250LXdlaWdodDogNjAwOwp9CgouXFwtdGFibGUtYm9keQp7CiAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cn0KCi5cXC10YWJsZS1ib2R5IC5cXC10YWJsZS1yb3c6bm90KDpsYXN0LWNoaWxkKSAuXFwtdGFibGUtY2VsbAp7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNDQkQ4RTY7Cn0KCi5cXC10YWJsZS0tYm9yZGVyIC5cXC10YWJsZS1ib2R5IC5cXC10YWJsZS1yb3c6bGFzdC1jaGlsZCAuXFwtdGFibGUtY2VsbDpmaXJzdC1jaGlsZAp7CiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNXB4Owp9CgouXFwtdGFibGUtLWJvcmRlciAuXFwtdGFibGUtYm9keSAuXFwtdGFibGUtcm93Omxhc3QtY2hpbGQgLlxcLXRhYmxlLWNlbGw6bGFzdC1jaGlsZAp7CiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDVweDsKfQoKLlxcLXRhYmxlLS1ib3JkZXIgLlxcLXRhYmxlLWJvZHkgLlxcLXRhYmxlLXJvdzpsYXN0LWNoaWxkIC5cXC10YWJsZS1jZWxsCnsKICBib3JkZXItYm90dG9tLXdpZHRoOiAycHg7Cn0KCi5cXC10YWJsZS0tYm9yZGVyIC5cXC10YWJsZS1ib2R5IC5cXC10YWJsZS1yb3cgLlxcLXRhYmxlLWNlbGw6Zmlyc3QtY2hpbGQKewogIGJvcmRlci1sZWZ0LXdpZHRoOiAycHg7Cn0KCi5cXC10YWJsZS0tYm9yZGVyIC5cXC10YWJsZS1ib2R5IC5cXC10YWJsZS1yb3cgLlxcLXRhYmxlLWNlbGw6bGFzdC1jaGlsZAp7CiAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAycHg7Cn0KCi5cXC10YWJsZS0tc3RyaXBlZCAuXFwtdGFibGUtYm9keSAuXFwtdGFibGUtcm93Om50aC1jaGlsZChvZGQpIC5cXC10YWJsZS1jZWxsCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIzOCwgMjQyLCAyNDcsIDAuOCk7Cn0KCi5cXC10YWJsZS0taG92ZXIgLlxcLXRhYmxlLWJvZHkgLlxcLXRhYmxlLXJvdzpob3ZlciAuXFwtdGFibGUtY2VsbAp7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMjEsIDIyOSwgMjM4LCAwLjgpOwp9CgouXFwtdGFibGUtLWZpeGVkCnsKICB0YWJsZS1sYXlvdXQ6IGZpeGVkOwp9CgouXFwtdGFibGUtcmVzcG9uc2l2ZQp7CiAgZGlzcGxheTogYmxvY2s7CiAgd2lkdGg6IDEwMCU7CiAgb3ZlcmZsb3cteDogYXV0bzsKfQoKLlxcLXRhYmxlLXJvdy0tcHJpbWFyeSwgLlxcLXRhYmxlLXJvdy0tcHJpbWFyeSAuXFwtdGFibGUtY2VsbAp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0E3QzhGMiAhaW1wb3J0YW50Owp9CgouXFwtdGFibGUtcm93LS1zdWNjZXNzLCAuXFwtdGFibGUtcm93LS1zdWNjZXNzIC5cXC10YWJsZS1jZWxsCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjOUJFNEI4ICFpbXBvcnRhbnQ7Cn0KCi5cXC10YWJsZS1yb3ctLXdhcm5pbmcsIC5cXC10YWJsZS1yb3ctLXdhcm5pbmcgLlxcLXRhYmxlLWNlbGwKewogIGJhY2tncm91bmQtY29sb3I6ICNGREU3QjQgIWltcG9ydGFudDsKfQoKLlxcLXRhYmxlLXJvdy0tZXJyb3IsIC5cXC10YWJsZS1yb3ctLWVycm9yIC5cXC10YWJsZS1jZWxsCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhCRUI5ICFpbXBvcnRhbnQ7Cn0KCi5cXC10YWJzCnsKICBkaXNwbGF5OiBibG9jazsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiA0MHB4OwogIGZvbnQtc2l6ZTogMTZweDsKICBtYXJnaW4tYm90dG9tOiAyMHB4OwogIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjRERFNUVFOwogIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgLWtodG1sLXVzZXItc2VsZWN0OiBub25lOwogIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgLW1zLXVzZXItc2VsZWN0OiBub25lOwp9CgouXFwtdGFicy10YWIsIC5cXC10YWJzLWl0ZW0KewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmbG9hdDogbGVmdDsKICBoZWlnaHQ6IGNhbGMoNDBweCAtIDJweCk7CiAgbGluZS1oZWlnaHQ6IDQwcHg7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBjb2xvcjogIzg3OUFBQjsKICBwYWRkaW5nLWxlZnQ6IDE1cHg7CiAgcGFkZGluZy1yaWdodDogMTVweDsKICBtYXJnaW4tYm90dG9tOiAtMXB4OwogIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDVweDsKICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNXB4OwogIGN1cnNvcjogcG9pbnRlcjsKICB0cmFuc2l0aW9uOiBhbGwgMC4zczsKfQoKLlxcLXRhYnMtdGFiOmhvdmVyLCAuXFwtdGFicy1pdGVtOmhvdmVyCnsKICBib3JkZXItdG9wLWNvbG9yOiAjRUVGMkY3OwogIGJvcmRlci1sZWZ0LWNvbG9yOiAjRUVGMkY3OwogIGJvcmRlci1yaWdodC1jb2xvcjogI0VFRjJGNzsKfQoKLlxcLXRhYnMtdGFiLS1zZWxlY3RlZCwgLlxcLXRhYnMtaXRlbS0tc2VsZWN0ZWQKewogIGJvcmRlci10b3AtY29sb3I6ICNEREU1RUUgIWltcG9ydGFudDsKICBib3JkZXItbGVmdC1jb2xvcjogI0RERTVFRSAhaW1wb3J0YW50OwogIGJvcmRlci1yaWdodC1jb2xvcjogI0RERTVFRSAhaW1wb3J0YW50OwogIGJvcmRlci1ib3R0b20tY29sb3I6ICNGRkYgIWltcG9ydGFudDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGICFpbXBvcnRhbnQ7CiAgY29sb3I6ICM1NDY3Nzg7Cn0KCi5cXC1ib3gKewogIGRpc3BsYXk6IGJsb2NrOwogIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgd2lkdGg6IGNhbGMoMTAwJSAtIDYwcHgpOwogIGJhY2tncm91bmQtY29sb3I6ICNEREU1RUU7CiAgYm9yZGVyLXJhZGl1czogNXB4OwogIHBhZGRpbmc6IDMwcHg7CiAgbWFyZ2luLWJvdHRvbTogMjBweDsKfQoKLlxcLWJveC10aXRsZSwgLlxcLWJveC1zdWJ0aXRsZSwgLlxcLWJveC1kZXRhaWwKewogIGRpc3BsYXk6IGJsb2NrOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKLlxcLWJveC10aXRsZQp7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgZm9udC1zaXplOiAzNXB4Owp9CgouXFwtYm94LXN1YnRpdGxlCnsKICBmb250LXdlaWdodDogNjAwOwogIGZvbnQtc2l6ZTogMjJweDsKICBvcGFjaXR5OiAwLjc1Owp9CgouXFwtYm94LWRldGFpbAp7CiAgZm9udC1zaXplOiAxNnB4OwogIGxpbmUtaGVpZ2h0OiAyMnB4OwogIG9wYWNpdHk6IDAuNTsKfQoKLlxcLWJveC10aXRsZSArIC5cXC1ib3gtc3VidGl0bGUsIC5cXC1ib3gtc3VidGl0bGUgKyAuXFwtYm94LWRldGFpbCwgLlxcLWJveC10aXRsZSArIC5cXC1ib3gtZGV0YWlsCnsKICBtYXJnaW4tdG9wOiA1cHg7Cn0KCi5cXC1ib3guXFwtYm94LS1wcmltYXJ5CnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNEU5MUU0OwogIGNvbG9yOiAjRkZGOwp9CgouXFwtYm94LlxcLWJveC0tc3VjY2Vzcwp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzRBQ0Y3RjsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLWJveC5cXC1ib3gtLXdhcm5pbmcKewogIGJhY2tncm91bmQtY29sb3I6ICNGQkM4NTA7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1ib3guXFwtYm94LS1lcnJvcgp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0VFNjc1RDsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLWJveC5cXC1ib3gtLWRhcmsKewogIGJhY2tncm91bmQtY29sb3I6ICM1NDY3Nzg7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1ib3guXFwtYm94LS1saWdodAp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0RERTVFRTsKICBjb2xvcjogIzU0Njc3ODsKfQoKLlxcLWJveC5cXC1ib3gtLW5hdnkKewogIGJhY2tncm91bmQtY29sb3I6ICM1NDY3Nzg7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1ib3guXFwtYm94LS1ncmVlbgp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzkzRDI2MDsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLWJveC5cXC1ib3gtLXRlYWwKewogIGJhY2tncm91bmQtY29sb3I6ICM2MEQyQjY7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1ib3guXFwtYm94LS1ibHVlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNEU5MUU0OwogIGNvbG9yOiAjRkZGOwp9CgouXFwtYm94LlxcLWJveC0tcHVycGxlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjQUM5NEU4OwogIGNvbG9yOiAjRkZGOwp9CgouXFwtYm94LlxcLWJveC0tcGluawp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0U3N0VCODsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLWJveC5cXC1ib3gtLXJlZAp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0VFNjc1RDsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLWJveC5cXC1ib3gtLW9yYW5nZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0Y3ODA1NTsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLWJveC5cXC1ib3gtLXllbGxvdwp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0ZCQzg1MDsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLWJveC5cXC1ib3gtLWdyZXkKewogIGJhY2tncm91bmQtY29sb3I6ICNEREU1RUU7CiAgY29sb3I6ICM1NDY3Nzg7Cn0KCi5cXC1jb250ZW50CnsKICBkaXNwbGF5OiBibG9jazsKICBwYWRkaW5nLXRvcDogMzBweDsKICBwYWRkaW5nLWJvdHRvbTogMzBweDsKfQoKLlxcLWNvbnRlbnQtLWV4dHJhLXNtYWxsCnsKICBtYXgtd2lkdGg6IDQ4MHB4OwogIHBhZGRpbmctbGVmdDogY2FsYyg1MCUgLSA0ODBweCAvIDIpOwogIHBhZGRpbmctcmlnaHQ6IGNhbGMoNTAlIC0gNDgwcHggLyAyKTsKfQoKQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpCnsKICAuXFwtY29udGVudC0tZXh0cmEtc21hbGwKICB7CiAgICB3aWR0aDogY2FsYygxMDAlIC0gNDBweCk7CiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4OwogIH0KfQoKLlxcLWNvbnRlbnQtLXNtYWxsCnsKICBtYXgtd2lkdGg6IDYwMHB4OwogIHBhZGRpbmctbGVmdDogY2FsYyg1MCUgLSA2MDBweCAvIDIpOwogIHBhZGRpbmctcmlnaHQ6IGNhbGMoNTAlIC0gNjAwcHggLyAyKTsKfQoKQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpCnsKICAuXFwtY29udGVudC0tc21hbGwKICB7CiAgICB3aWR0aDogY2FsYygxMDAlIC0gNDBweCk7CiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4OwogIH0KfQoKLlxcLWNvbnRlbnQtLW1lZGl1bQp7CiAgbWF4LXdpZHRoOiA3NjhweDsKICBwYWRkaW5nLWxlZnQ6IGNhbGMoNTAlIC0gNzY4cHggLyAyKTsKICBwYWRkaW5nLXJpZ2h0OiBjYWxjKDUwJSAtIDc2OHB4IC8gMik7Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KQp7CiAgLlxcLWNvbnRlbnQtLW1lZGl1bQogIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTsKICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7CiAgfQp9CgouXFwtY29udGVudC0tbGFyZ2UKewogIG1heC13aWR0aDogOTYwcHg7CiAgcGFkZGluZy1sZWZ0OiBjYWxjKDUwJSAtIDk2MHB4IC8gMik7CiAgcGFkZGluZy1yaWdodDogY2FsYyg1MCUgLSA5NjBweCAvIDIpOwp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA5NjBweCkKewogIC5cXC1jb250ZW50LS1sYXJnZQogIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTsKICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7CiAgfQp9CgouXFwtY29udGVudC0tZXh0cmEtbGFyZ2UKewogIG1heC13aWR0aDogMTI4MHB4OwogIHBhZGRpbmctbGVmdDogY2FsYyg1MCUgLSAxMjgwcHggLyAyKTsKICBwYWRkaW5nLXJpZ2h0OiBjYWxjKDUwJSAtIDEyODBweCAvIDIpOwp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjgwcHgpCnsKICAuXFwtY29udGVudC0tZXh0cmEtbGFyZ2UKICB7CiAgICB3aWR0aDogY2FsYygxMDAlIC0gNDBweCk7CiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4OwogIH0KfQoKLlxcLWNvbnRlbnQtLWZsdWlkCnsKICB3aWR0aDogY2FsYygxMDAlIC0gNDBweCk7CiAgcGFkZGluZy1sZWZ0OiAyMHB4OwogIHBhZGRpbmctcmlnaHQ6IDIwcHg7Cn0KCi5cXC1mb290ZXIKewogIGRpc3BsYXk6IGJsb2NrOwogIHBhZGRpbmctdG9wOiA1MHB4OwogIHBhZGRpbmctYm90dG9tOiA1MHB4OwogIGZvbnQtc2l6ZTogMTRweDsKICBsaW5lLWhlaWdodDogMjFweDsKfQoKLlxcLWZvb3Rlci0tZXh0cmEtc21hbGwKewogIG1heC13aWR0aDogNDgwcHg7CiAgcGFkZGluZy1sZWZ0OiBjYWxjKDUwJSAtIDQ4MHB4IC8gMik7CiAgcGFkZGluZy1yaWdodDogY2FsYyg1MCUgLSA0ODBweCAvIDIpOwp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweCkKewogIC5cXC1mb290ZXItLWV4dHJhLXNtYWxsCiAgewogICAgd2lkdGg6IGNhbGMoMTAwJSAtIDQwcHgpOwogICAgcGFkZGluZy1sZWZ0OiAyMHB4OwogICAgcGFkZGluZy1yaWdodDogMjBweDsKICB9Cn0KCi5cXC1mb290ZXItLXNtYWxsCnsKICBtYXgtd2lkdGg6IDYwMHB4OwogIHBhZGRpbmctbGVmdDogY2FsYyg1MCUgLSA2MDBweCAvIDIpOwogIHBhZGRpbmctcmlnaHQ6IGNhbGMoNTAlIC0gNjAwcHggLyAyKTsKfQoKQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpCnsKICAuXFwtZm9vdGVyLS1zbWFsbAogIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTsKICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7CiAgfQp9CgouXFwtZm9vdGVyLS1tZWRpdW0KewogIG1heC13aWR0aDogNzY4cHg7CiAgcGFkZGluZy1sZWZ0OiBjYWxjKDUwJSAtIDc2OHB4IC8gMik7CiAgcGFkZGluZy1yaWdodDogY2FsYyg1MCUgLSA3NjhweCAvIDIpOwp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkKewogIC5cXC1mb290ZXItLW1lZGl1bQogIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTsKICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7CiAgfQp9CgouXFwtZm9vdGVyLS1sYXJnZQp7CiAgbWF4LXdpZHRoOiA5NjBweDsKICBwYWRkaW5nLWxlZnQ6IGNhbGMoNTAlIC0gOTYwcHggLyAyKTsKICBwYWRkaW5nLXJpZ2h0OiBjYWxjKDUwJSAtIDk2MHB4IC8gMik7Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDk2MHB4KQp7CiAgLlxcLWZvb3Rlci0tbGFyZ2UKICB7CiAgICB3aWR0aDogY2FsYygxMDAlIC0gNDBweCk7CiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4OwogIH0KfQoKLlxcLWZvb3Rlci0tZXh0cmEtbGFyZ2UKewogIG1heC13aWR0aDogMTI4MHB4OwogIHBhZGRpbmctbGVmdDogY2FsYyg1MCUgLSAxMjgwcHggLyAyKTsKICBwYWRkaW5nLXJpZ2h0OiBjYWxjKDUwJSAtIDEyODBweCAvIDIpOwp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjgwcHgpCnsKICAuXFwtZm9vdGVyLS1leHRyYS1sYXJnZQogIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTsKICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7CiAgfQp9CgouXFwtZm9vdGVyLS1mbHVpZAp7CiAgd2lkdGg6IGNhbGMoMTAwJSAtIDQwcHgpOwogIHBhZGRpbmctbGVmdDogMjBweDsKICBwYWRkaW5nLXJpZ2h0OiAyMHB4Owp9CgouXFwtZm9vdGVyLS1saWdodAp7CiAgY29sb3I6ICM4NzlBQUI7CiAgYmFja2dyb3VuZC1jb2xvcjogI0VFRjJGNzsKfQoKLlxcLWZvb3Rlci0tZGFyawp7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ2Nzc4Owp9CgouXFwtZm9vdGVyLXRpdGxlCnsKICBkaXNwbGF5OiBibG9jazsKICBmb250LXNpemU6IDIwcHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGxpbmUtaGVpZ2h0OiAzMHB4Owp9CgouXFwtZm9vdGVyLXN1YnRpdGxlCnsKICBkaXNwbGF5OiBibG9jazsKICBmb250LXNpemU6IDE1cHg7CiAgb3BhY2l0eTogMC44OwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKLlxcLWZvb3Rlci1ncm91cAp7CiAgZGlzcGxheTogYmxvY2s7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgZm9udC1zaXplOiAxNXB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIG1hcmdpbi1ib3R0b206IDVweDsKfQoKLlxcLWZvb3Rlci0tbGlnaHQgLlxcLWZvb3Rlci1ncm91cAp7CiAgY29sb3I6ICM4NzlBQUI7Cn0KCi5cXC1mb290ZXItLWRhcmsgLlxcLWZvb3Rlci1ncm91cAp7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKfQoKLlxcLWZvb3Rlci1saW5rCnsKICBkaXNwbGF5OiBibG9jazsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICB0cmFuc2l0aW9uOiBjb2xvciAwLjNzOwogIGN1cnNvcjogcG9pbnRlcjsKICBvcGFjaXR5OiAwLjg1Owp9CgouXFwtZm9vdGVyLWxpbmstLWlubGluZQp7CiAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7Cn0KCi5cXC1mb290ZXItbGluay0taW5saW5lOm5vdCg6bGFzdC1jaGlsZCkKewogIG1hcmdpbi1yaWdodDogMTBweDsKfQoKLlxcLWZvb3Rlci1saW5rOmhvdmVyCnsKICBjb2xvcjogIzRFOTFFNCAhaW1wb3J0YW50Owp9CgouXFwtZm9vdGVyLWxpbmstZGVzY3JpcHRpb24KewogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMTJweDsKICBmb250LXdlaWdodDogbm9ybWFsOwogIG1hcmdpbi1ib3R0b206IDNweDsKICBtYXJnaW4tdG9wOiAtNHB4Owp9CgouXFwtZm9vdGVyLS1saWdodCAuXFwtZm9vdGVyLWxpbmsKewogIGNvbG9yOiAjODc5QUFCOwp9CgouXFwtZm9vdGVyLS1saWdodCAuXFwtZm9vdGVyLWxpbmstZGVzY3JpcHRpb24KewogIGNvbG9yOiAjODc5QUFCICFpbXBvcnRhbnQ7Cn0KCi5cXC1mb290ZXItLWRhcmsgLlxcLWZvb3Rlci1saW5rCnsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOwp9CgouXFwtZm9vdGVyLS1kYXJrIC5cXC1mb290ZXItbGluay1kZXNjcmlwdGlvbgp7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KSAhaW1wb3J0YW50Owp9CgouXFwtZm9vdGVyLXBhcmFncmFwaAp7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luLWJvdHRvbTogMTBweDsKfQoKLlxcLWZvb3Rlci1ydWxlCnsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDJweDsKICBtYXJnaW4tdG9wOiAyMHB4OwogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgb3BhY2l0eTogMC42Owp9CgouXFwtZm9vdGVyLS1saWdodCAuXFwtZm9vdGVyLXJ1bGUKewogIGJhY2tncm91bmQtY29sb3I6ICNDQkQ4RTY7Cn0KCi5cXC1mb290ZXItLWRhcmsgLlxcLWZvb3Rlci1ydWxlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7Cn0KCi5cXC1mb290ZXIuXFwtZm9vdGVyLS1uYXZ5CnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ2Nzc4OwogIGNvbG9yOiAjRkZGOwp9CgouXFwtZm9vdGVyLlxcLWZvb3Rlci0tZ3JlZW4KewogIGJhY2tncm91bmQtY29sb3I6ICM5M0QyNjA7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1mb290ZXIuXFwtZm9vdGVyLS10ZWFsCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjBEMkI2OwogIGNvbG9yOiAjRkZGOwp9CgouXFwtZm9vdGVyLlxcLWZvb3Rlci0tYmx1ZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzRFOTFFNDsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLWZvb3Rlci5cXC1mb290ZXItLXB1cnBsZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0FDOTRFODsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLWZvb3Rlci5cXC1mb290ZXItLXBpbmsKewogIGJhY2tncm91bmQtY29sb3I6ICNFNzdFQjg7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1mb290ZXIuXFwtZm9vdGVyLS1yZWQKewogIGJhY2tncm91bmQtY29sb3I6ICNFRTY3NUQ7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1mb290ZXIuXFwtZm9vdGVyLS1vcmFuZ2UKewogIGJhY2tncm91bmQtY29sb3I6ICNGNzgwNTU7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1mb290ZXIuXFwtZm9vdGVyLS15ZWxsb3cKewogIGJhY2tncm91bmQtY29sb3I6ICNGQkM4NTA7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1mb290ZXIuXFwtZm9vdGVyLS1ncmV5CnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRERFNUVFOwogIGNvbG9yOiAjNTQ2Nzc4Owp9CgouXFwtanVtYm90cm9uCnsKICBkaXNwbGF5OiBibG9jazsKICBwYWRkaW5nLXRvcDogODVweDsKICBwYWRkaW5nLWJvdHRvbTogODVweDsKfQoKLlxcLWp1bWJvdHJvbi0tZXh0cmEtc21hbGwKewogIG1heC13aWR0aDogNDgwcHg7CiAgcGFkZGluZy1sZWZ0OiBjYWxjKDUwJSAtIDQ4MHB4IC8gMik7CiAgcGFkZGluZy1yaWdodDogY2FsYyg1MCUgLSA0ODBweCAvIDIpOwp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweCkKewogIC5cXC1qdW1ib3Ryb24tLWV4dHJhLXNtYWxsCiAgewogICAgd2lkdGg6IGNhbGMoMTAwJSAtIDQwcHgpOwogICAgcGFkZGluZy1sZWZ0OiAyMHB4OwogICAgcGFkZGluZy1yaWdodDogMjBweDsKICB9Cn0KCi5cXC1qdW1ib3Ryb24tLXNtYWxsCnsKICBtYXgtd2lkdGg6IDYwMHB4OwogIHBhZGRpbmctbGVmdDogY2FsYyg1MCUgLSA2MDBweCAvIDIpOwogIHBhZGRpbmctcmlnaHQ6IGNhbGMoNTAlIC0gNjAwcHggLyAyKTsKfQoKQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpCnsKICAuXFwtanVtYm90cm9uLS1zbWFsbAogIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTsKICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7CiAgfQp9CgouXFwtanVtYm90cm9uLS1tZWRpdW0KewogIG1heC13aWR0aDogNzY4cHg7CiAgcGFkZGluZy1sZWZ0OiBjYWxjKDUwJSAtIDc2OHB4IC8gMik7CiAgcGFkZGluZy1yaWdodDogY2FsYyg1MCUgLSA3NjhweCAvIDIpOwp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkKewogIC5cXC1qdW1ib3Ryb24tLW1lZGl1bQogIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTsKICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7CiAgfQp9CgouXFwtanVtYm90cm9uLS1sYXJnZQp7CiAgbWF4LXdpZHRoOiA5NjBweDsKICBwYWRkaW5nLWxlZnQ6IGNhbGMoNTAlIC0gOTYwcHggLyAyKTsKICBwYWRkaW5nLXJpZ2h0OiBjYWxjKDUwJSAtIDk2MHB4IC8gMik7Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDk2MHB4KQp7CiAgLlxcLWp1bWJvdHJvbi0tbGFyZ2UKICB7CiAgICB3aWR0aDogY2FsYygxMDAlIC0gNDBweCk7CiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4OwogIH0KfQoKLlxcLWp1bWJvdHJvbi0tZXh0cmEtbGFyZ2UKewogIG1heC13aWR0aDogMTI4MHB4OwogIHBhZGRpbmctbGVmdDogY2FsYyg1MCUgLSAxMjgwcHggLyAyKTsKICBwYWRkaW5nLXJpZ2h0OiBjYWxjKDUwJSAtIDEyODBweCAvIDIpOwp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjgwcHgpCnsKICAuXFwtanVtYm90cm9uLS1leHRyYS1sYXJnZQogIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTsKICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7CiAgfQp9CgouXFwtanVtYm90cm9uLS1mbHVpZAp7CiAgd2lkdGg6IGNhbGMoMTAwJSAtIDQwcHgpOwogIHBhZGRpbmctbGVmdDogMjBweDsKICBwYWRkaW5nLXJpZ2h0OiAyMHB4Owp9CgouXFwtanVtYm90cm9uLXRpdGxlLCAuXFwtanVtYm90cm9uLXN1YnRpdGxlLCAuXFwtanVtYm90cm9uLWRldGFpbAp7CiAgZGlzcGxheTogYmxvY2s7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CgouXFwtanVtYm90cm9uLXRpdGxlCnsKICBmb250LXdlaWdodDogYm9sZDsKICBmb250LXNpemU6IDQwcHg7Cn0KCi5cXC1qdW1ib3Ryb24tc3VidGl0bGUKewogIGZvbnQtc2l6ZTogMjRweDsKICBmb250LXdlaWdodDogNjAwOwogIG9wYWNpdHk6IDAuODsKfQoKLlxcLWp1bWJvdHJvbi1kZXRhaWwKewogIGxpbmUtaGVpZ2h0OiAyMnB4OwogIGZvbnQtc2l6ZTogMTZweDsKICBvcGFjaXR5OiAwLjY7Cn0KCi5cXC1qdW1ib3Ryb24tdGl0bGUgKyAuXFwtanVtYm90cm9uLXN1YnRpdGxlLCAuXFwtanVtYm90cm9uLXRpdGxlICsgLlxcLWp1bWJvdHJvbi1kZXRhaWwsIC5cXC1qdW1ib3Ryb24tc3VidGl0bGUgKyAuXFwtanVtYm90cm9uLWRldGFpbAp7CiAgbWFyZ2luLXRvcDogNXB4Owp9CgouXFwtanVtYm90cm9uLlxcLWp1bWJvdHJvbi0tcHJpbWFyeQp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzRFOTFFNDsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLWp1bWJvdHJvbi5cXC1qdW1ib3Ryb24tLXN1Y2Nlc3MKewogIGJhY2tncm91bmQtY29sb3I6ICM0QUNGN0Y7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1qdW1ib3Ryb24uXFwtanVtYm90cm9uLS13YXJuaW5nCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkJDODUwOwogIGNvbG9yOiAjRkZGOwp9CgouXFwtanVtYm90cm9uLlxcLWp1bWJvdHJvbi0tZXJyb3IKewogIGJhY2tncm91bmQtY29sb3I6ICNFRTY3NUQ7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1qdW1ib3Ryb24uXFwtanVtYm90cm9uLS1kYXJrCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ2Nzc4OwogIGNvbG9yOiAjRkZGOwp9CgouXFwtanVtYm90cm9uLlxcLWp1bWJvdHJvbi0tbGlnaHQKewogIGJhY2tncm91bmQtY29sb3I6ICNEREU1RUU7CiAgY29sb3I6ICM1NDY3Nzg7Cn0KCi5cXC1qdW1ib3Ryb24uXFwtanVtYm90cm9uLS1uYXZ5CnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ2Nzc4OwogIGNvbG9yOiAjRkZGOwp9CgouXFwtanVtYm90cm9uLlxcLWp1bWJvdHJvbi0tZ3JlZW4KewogIGJhY2tncm91bmQtY29sb3I6ICM5M0QyNjA7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1qdW1ib3Ryb24uXFwtanVtYm90cm9uLS10ZWFsCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjBEMkI2OwogIGNvbG9yOiAjRkZGOwp9CgouXFwtanVtYm90cm9uLlxcLWp1bWJvdHJvbi0tYmx1ZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzRFOTFFNDsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLWp1bWJvdHJvbi5cXC1qdW1ib3Ryb24tLXB1cnBsZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0FDOTRFODsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLWp1bWJvdHJvbi5cXC1qdW1ib3Ryb24tLXBpbmsKewogIGJhY2tncm91bmQtY29sb3I6ICNFNzdFQjg7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1qdW1ib3Ryb24uXFwtanVtYm90cm9uLS1yZWQKewogIGJhY2tncm91bmQtY29sb3I6ICNFRTY3NUQ7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1qdW1ib3Ryb24uXFwtanVtYm90cm9uLS1vcmFuZ2UKewogIGJhY2tncm91bmQtY29sb3I6ICNGNzgwNTU7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1qdW1ib3Ryb24uXFwtanVtYm90cm9uLS15ZWxsb3cKewogIGJhY2tncm91bmQtY29sb3I6ICNGQkM4NTA7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1qdW1ib3Ryb24uXFwtanVtYm90cm9uLS1ncmV5CnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRERFNUVFOwogIGNvbG9yOiAjNTQ2Nzc4Owp9CgouXFwtbmF2YmFyCnsKICBkaXNwbGF5OiBibG9jazsKICB6LWluZGV4OiAzOwogIG1heC13aWR0aDogY2FsYygxMDAlIC0gMiAqIDIwcHgpOwogIGhlaWdodDogMzRweDsKICBwYWRkaW5nLXRvcDogMTVweDsKICBwYWRkaW5nLWJvdHRvbTogMTVweDsKICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgcGFkZGluZy1yaWdodDogMjBweDsKfQoKLlxcLW5hdmJhci0tZXh0cmEtc21hbGwKewogIG1heC13aWR0aDogNDgwcHg7CiAgcGFkZGluZy1sZWZ0OiBjYWxjKDUwJSAtIDQ4MHB4IC8gMik7CiAgcGFkZGluZy1yaWdodDogY2FsYyg1MCUgLSA0ODBweCAvIDIpOwp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweCkKewogIC5cXC1uYXZiYXItLWV4dHJhLXNtYWxsCiAgewogICAgd2lkdGg6IGNhbGMoMTAwJSAtIDQwcHgpOwogICAgcGFkZGluZy1sZWZ0OiAyMHB4OwogICAgcGFkZGluZy1yaWdodDogMjBweDsKICB9Cn0KCi5cXC1uYXZiYXItLXNtYWxsCnsKICBtYXgtd2lkdGg6IDYwMHB4OwogIHBhZGRpbmctbGVmdDogY2FsYyg1MCUgLSA2MDBweCAvIDIpOwogIHBhZGRpbmctcmlnaHQ6IGNhbGMoNTAlIC0gNjAwcHggLyAyKTsKfQoKQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjAwcHgpCnsKICAuXFwtbmF2YmFyLS1zbWFsbAogIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTsKICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7CiAgfQp9CgouXFwtbmF2YmFyLS1tZWRpdW0KewogIG1heC13aWR0aDogNzY4cHg7CiAgcGFkZGluZy1sZWZ0OiBjYWxjKDUwJSAtIDc2OHB4IC8gMik7CiAgcGFkZGluZy1yaWdodDogY2FsYyg1MCUgLSA3NjhweCAvIDIpOwp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkKewogIC5cXC1uYXZiYXItLW1lZGl1bQogIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTsKICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7CiAgfQp9CgouXFwtbmF2YmFyLS1sYXJnZQp7CiAgbWF4LXdpZHRoOiA5NjBweDsKICBwYWRkaW5nLWxlZnQ6IGNhbGMoNTAlIC0gOTYwcHggLyAyKTsKICBwYWRkaW5nLXJpZ2h0OiBjYWxjKDUwJSAtIDk2MHB4IC8gMik7Cn0KCkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDk2MHB4KQp7CiAgLlxcLW5hdmJhci0tbGFyZ2UKICB7CiAgICB3aWR0aDogY2FsYygxMDAlIC0gNDBweCk7CiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4OwogIH0KfQoKLlxcLW5hdmJhci0tZXh0cmEtbGFyZ2UKewogIG1heC13aWR0aDogMTI4MHB4OwogIHBhZGRpbmctbGVmdDogY2FsYyg1MCUgLSAxMjgwcHggLyAyKTsKICBwYWRkaW5nLXJpZ2h0OiBjYWxjKDUwJSAtIDEyODBweCAvIDIpOwp9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjgwcHgpCnsKICAuXFwtbmF2YmFyLS1leHRyYS1sYXJnZQogIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTsKICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7CiAgfQp9CgouXFwtbmF2YmFyLS1mbHVpZAp7CiAgd2lkdGg6IGNhbGMoMTAwJSAtIDQwcHgpOwogIHBhZGRpbmctbGVmdDogMjBweDsKICBwYWRkaW5nLXJpZ2h0OiAyMHB4Owp9CgouXFwtbmF2YmFyLXRpdGxlCnsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgaGVpZ2h0OiAzNHB4OwogIGxpbmUtaGVpZ2h0OiAzNHB4OwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICBmb250LXdlaWdodDogYm9sZDsKICBmb250LXNpemU6IDIxcHg7CiAgcGFkZGluZy1sZWZ0OiAwcHg7CiAgcGFkZGluZy1yaWdodDogMHB4OwogIGN1cnNvcjogcG9pbnRlcjsKfQoKLlxcLW5hdmJhci1zdWJ0aXRsZQp7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGhlaWdodDogMzRweDsKICBsaW5lLWhlaWdodDogMzRweDsKICBmb250LXNpemU6IDE2cHg7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGN1cnNvcjogcG9pbnRlcjsKICBwYWRkaW5nLWxlZnQ6IDVweDsKICBvcGFjaXR5OiAwLjg7Cn0KCi5cXC1uYXZiYXItaXRlbSwgLlxcLW5hdmJhci1saW5rCnsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgaGVpZ2h0OiAzNHB4OwogIGxpbmUtaGVpZ2h0OiAzNHB4OwogIHBhZGRpbmctbGVmdDogMTBweDsKICBwYWRkaW5nLXJpZ2h0OiAxMHB4OwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgZm9udC1zaXplOiAxNnB4OwogIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zczsKICBjdXJzb3I6IHBvaW50ZXI7CiAgb3BhY2l0eTogMC45Owp9CgouXFwtbmF2YmFyLWl0ZW06aG92ZXIsIC5cXC1uYXZiYXItbGluazpob3Zlcgp7CiAgb3BhY2l0eTogMTsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLXByaW1hcnkKewogIGNvbG9yOiAjRkZGOwogIGJhY2tncm91bmQtY29sb3I6ICM0RTkxRTQ7Cn0KCi5cXC1uYXZiYXIuXFwtbmF2YmFyLS1wcmltYXJ5IC5cXC1uYXZiYXItdGl0bGUsIC5cXC1uYXZiYXIuXFwtbmF2YmFyLS1wcmltYXJ5IC5cXC1uYXZiYXItc3VidGl0bGUsIC5cXC1uYXZiYXIuXFwtbmF2YmFyLS1wcmltYXJ5IC5cXC1uYXZiYXItbGluaywgLlxcLW5hdmJhci5cXC1uYXZiYXItLXByaW1hcnkgLlxcLW5hdmJhci1pdGVtCnsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLXN1Y2Nlc3MKewogIGNvbG9yOiAjRkZGOwogIGJhY2tncm91bmQtY29sb3I6ICM0QUNGN0Y7Cn0KCi5cXC1uYXZiYXIuXFwtbmF2YmFyLS1zdWNjZXNzIC5cXC1uYXZiYXItdGl0bGUsIC5cXC1uYXZiYXIuXFwtbmF2YmFyLS1zdWNjZXNzIC5cXC1uYXZiYXItc3VidGl0bGUsIC5cXC1uYXZiYXIuXFwtbmF2YmFyLS1zdWNjZXNzIC5cXC1uYXZiYXItbGluaywgLlxcLW5hdmJhci5cXC1uYXZiYXItLXN1Y2Nlc3MgLlxcLW5hdmJhci1pdGVtCnsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLXdhcm5pbmcKewogIGNvbG9yOiAjRkZGOwogIGJhY2tncm91bmQtY29sb3I6ICNGQkM4NTA7Cn0KCi5cXC1uYXZiYXIuXFwtbmF2YmFyLS13YXJuaW5nIC5cXC1uYXZiYXItdGl0bGUsIC5cXC1uYXZiYXIuXFwtbmF2YmFyLS13YXJuaW5nIC5cXC1uYXZiYXItc3VidGl0bGUsIC5cXC1uYXZiYXIuXFwtbmF2YmFyLS13YXJuaW5nIC5cXC1uYXZiYXItbGluaywgLlxcLW5hdmJhci5cXC1uYXZiYXItLXdhcm5pbmcgLlxcLW5hdmJhci1pdGVtCnsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLWVycm9yCnsKICBjb2xvcjogI0ZGRjsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUU2NzVEOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tZXJyb3IgLlxcLW5hdmJhci10aXRsZSwgLlxcLW5hdmJhci5cXC1uYXZiYXItLWVycm9yIC5cXC1uYXZiYXItc3VidGl0bGUsIC5cXC1uYXZiYXIuXFwtbmF2YmFyLS1lcnJvciAuXFwtbmF2YmFyLWxpbmssIC5cXC1uYXZiYXIuXFwtbmF2YmFyLS1lcnJvciAuXFwtbmF2YmFyLWl0ZW0KewogIGNvbG9yOiAjRkZGOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tZGFyawp7CiAgY29sb3I6ICNGRkY7CiAgYmFja2dyb3VuZC1jb2xvcjogIzU0Njc3ODsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLWRhcmsgLlxcLW5hdmJhci10aXRsZSwgLlxcLW5hdmJhci5cXC1uYXZiYXItLWRhcmsgLlxcLW5hdmJhci1zdWJ0aXRsZSwgLlxcLW5hdmJhci5cXC1uYXZiYXItLWRhcmsgLlxcLW5hdmJhci1saW5rLCAuXFwtbmF2YmFyLlxcLW5hdmJhci0tZGFyayAuXFwtbmF2YmFyLWl0ZW0KewogIGNvbG9yOiAjRkZGOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tbGlnaHQKewogIGNvbG9yOiAjNTQ2Nzc4OwogIGJhY2tncm91bmQtY29sb3I6ICNEREU1RUU7Cn0KCi5cXC1uYXZiYXIuXFwtbmF2YmFyLS1saWdodCAuXFwtbmF2YmFyLXRpdGxlLCAuXFwtbmF2YmFyLlxcLW5hdmJhci0tbGlnaHQgLlxcLW5hdmJhci1zdWJ0aXRsZSwgLlxcLW5hdmJhci5cXC1uYXZiYXItLWxpZ2h0IC5cXC1uYXZiYXItbGluaywgLlxcLW5hdmJhci5cXC1uYXZiYXItLWxpZ2h0IC5cXC1uYXZiYXItaXRlbQp7CiAgY29sb3I6ICM1NDY3Nzg7Cn0KCi5cXC1uYXZiYXIuXFwtbmF2YmFyLS1uYXZ5CnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ2Nzc4OwogIGNvbG9yOiAjRkZGOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tbmF2eSAuXFwtbmF2YmFyLXRpdGxlCnsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLW5hdnkgLlxcLW5hdmJhci1zdWJ0aXRsZQp7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1uYXZiYXIuXFwtbmF2YmFyLS1uYXZ5IC5cXC1uYXZiYXItc3VidGl0bGU6OmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLW5hdnkgLlxcLW5hdmJhci1saW5rLCAuXFwtbmF2YmFyLlxcLW5hdmJhci0tbmF2eSAuXFwtbmF2YmFyLWl0ZW0KewogIGNvbG9yOiAjRkZGOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tZ3JlZW4KewogIGJhY2tncm91bmQtY29sb3I6ICM5M0QyNjA7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1uYXZiYXIuXFwtbmF2YmFyLS1ncmVlbiAuXFwtbmF2YmFyLXRpdGxlCnsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLWdyZWVuIC5cXC1uYXZiYXItc3VidGl0bGUKewogIGNvbG9yOiAjRkZGOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tZ3JlZW4gLlxcLW5hdmJhci1zdWJ0aXRsZTo6YmVmb3JlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tZ3JlZW4gLlxcLW5hdmJhci1saW5rLCAuXFwtbmF2YmFyLlxcLW5hdmJhci0tZ3JlZW4gLlxcLW5hdmJhci1pdGVtCnsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLXRlYWwKewogIGJhY2tncm91bmQtY29sb3I6ICM2MEQyQjY7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1uYXZiYXIuXFwtbmF2YmFyLS10ZWFsIC5cXC1uYXZiYXItdGl0bGUKewogIGNvbG9yOiAjRkZGOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tdGVhbCAuXFwtbmF2YmFyLXN1YnRpdGxlCnsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLXRlYWwgLlxcLW5hdmJhci1zdWJ0aXRsZTo6YmVmb3JlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tdGVhbCAuXFwtbmF2YmFyLWxpbmssIC5cXC1uYXZiYXIuXFwtbmF2YmFyLS10ZWFsIC5cXC1uYXZiYXItaXRlbQp7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1uYXZiYXIuXFwtbmF2YmFyLS1ibHVlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNEU5MUU0OwogIGNvbG9yOiAjRkZGOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tYmx1ZSAuXFwtbmF2YmFyLXRpdGxlCnsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLWJsdWUgLlxcLW5hdmJhci1zdWJ0aXRsZQp7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1uYXZiYXIuXFwtbmF2YmFyLS1ibHVlIC5cXC1uYXZiYXItc3VidGl0bGU6OmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLWJsdWUgLlxcLW5hdmJhci1saW5rLCAuXFwtbmF2YmFyLlxcLW5hdmJhci0tYmx1ZSAuXFwtbmF2YmFyLWl0ZW0KewogIGNvbG9yOiAjRkZGOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tcHVycGxlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjQUM5NEU4OwogIGNvbG9yOiAjRkZGOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tcHVycGxlIC5cXC1uYXZiYXItdGl0bGUKewogIGNvbG9yOiAjRkZGOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tcHVycGxlIC5cXC1uYXZiYXItc3VidGl0bGUKewogIGNvbG9yOiAjRkZGOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tcHVycGxlIC5cXC1uYXZiYXItc3VidGl0bGU6OmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLXB1cnBsZSAuXFwtbmF2YmFyLWxpbmssIC5cXC1uYXZiYXIuXFwtbmF2YmFyLS1wdXJwbGUgLlxcLW5hdmJhci1pdGVtCnsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLXBpbmsKewogIGJhY2tncm91bmQtY29sb3I6ICNFNzdFQjg7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1uYXZiYXIuXFwtbmF2YmFyLS1waW5rIC5cXC1uYXZiYXItdGl0bGUKewogIGNvbG9yOiAjRkZGOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tcGluayAuXFwtbmF2YmFyLXN1YnRpdGxlCnsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLXBpbmsgLlxcLW5hdmJhci1zdWJ0aXRsZTo6YmVmb3JlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tcGluayAuXFwtbmF2YmFyLWxpbmssIC5cXC1uYXZiYXIuXFwtbmF2YmFyLS1waW5rIC5cXC1uYXZiYXItaXRlbQp7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1uYXZiYXIuXFwtbmF2YmFyLS1yZWQKewogIGJhY2tncm91bmQtY29sb3I6ICNFRTY3NUQ7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1uYXZiYXIuXFwtbmF2YmFyLS1yZWQgLlxcLW5hdmJhci10aXRsZQp7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1uYXZiYXIuXFwtbmF2YmFyLS1yZWQgLlxcLW5hdmJhci1zdWJ0aXRsZQp7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1uYXZiYXIuXFwtbmF2YmFyLS1yZWQgLlxcLW5hdmJhci1zdWJ0aXRsZTo6YmVmb3JlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tcmVkIC5cXC1uYXZiYXItbGluaywgLlxcLW5hdmJhci5cXC1uYXZiYXItLXJlZCAuXFwtbmF2YmFyLWl0ZW0KewogIGNvbG9yOiAjRkZGOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tb3JhbmdlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjc4MDU1OwogIGNvbG9yOiAjRkZGOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tb3JhbmdlIC5cXC1uYXZiYXItdGl0bGUKewogIGNvbG9yOiAjRkZGOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tb3JhbmdlIC5cXC1uYXZiYXItc3VidGl0bGUKewogIGNvbG9yOiAjRkZGOwp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tb3JhbmdlIC5cXC1uYXZiYXItc3VidGl0bGU6OmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLW9yYW5nZSAuXFwtbmF2YmFyLWxpbmssIC5cXC1uYXZiYXIuXFwtbmF2YmFyLS1vcmFuZ2UgLlxcLW5hdmJhci1pdGVtCnsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLXllbGxvdwp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0ZCQzg1MDsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLXllbGxvdyAuXFwtbmF2YmFyLXRpdGxlCnsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLXllbGxvdyAuXFwtbmF2YmFyLXN1YnRpdGxlCnsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLXllbGxvdyAuXFwtbmF2YmFyLXN1YnRpdGxlOjpiZWZvcmUKewogIGJhY2tncm91bmQtY29sb3I6ICNGRkY7Cn0KCi5cXC1uYXZiYXIuXFwtbmF2YmFyLS15ZWxsb3cgLlxcLW5hdmJhci1saW5rLCAuXFwtbmF2YmFyLlxcLW5hdmJhci0teWVsbG93IC5cXC1uYXZiYXItaXRlbQp7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1uYXZiYXIuXFwtbmF2YmFyLS1ncmV5CnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRERFNUVFOwogIGNvbG9yOiAjNTQ2Nzc4Owp9CgouXFwtbmF2YmFyLlxcLW5hdmJhci0tZ3JleSAuXFwtbmF2YmFyLXRpdGxlCnsKICBjb2xvcjogIzU0Njc3ODsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLWdyZXkgLlxcLW5hdmJhci1zdWJ0aXRsZQp7CiAgY29sb3I6ICM1NDY3Nzg7Cn0KCi5cXC1uYXZiYXIuXFwtbmF2YmFyLS1ncmV5IC5cXC1uYXZiYXItc3VidGl0bGU6OmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzU0Njc3ODsKfQoKLlxcLW5hdmJhci5cXC1uYXZiYXItLWdyZXkgLlxcLW5hdmJhci1saW5rLCAuXFwtbmF2YmFyLlxcLW5hdmJhci0tZ3JleSAuXFwtbmF2YmFyLWl0ZW0KewogIGNvbG9yOiAjNTQ2Nzc4Owp9CgouXFwtY2hlY2tib3gKewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgd2lkdGg6IDE4cHg7CiAgaGVpZ2h0OiAxOHB4OwogIG1hcmdpbi1sZWZ0OiAxMHB4OwogIG1hcmdpbi1yaWdodDogMTBweDsKICBtYXJnaW4tdG9wOiA4cHg7CiAgbWFyZ2luLWJvdHRvbTogOHB4OwogIHZlcnRpY2FsLWFsaWduOiB0b3A7Cn0KCi5cXC1jaGVja2JveCBsYWJlbAp7CiAgd2lkdGg6IDE4cHg7CiAgaGVpZ2h0OiAxOHB4OwogIGN1cnNvcjogcG9pbnRlcjsKICB0cmFuc2l0aW9uOiBhbGwgMC4zczsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOwogIGxlZnQ6IDA7CiAgYm9yZGVyLXJhZGl1czogMnB4OwogIGJhY2tncm91bmQ6ICNEREU1RUU7Cn0KCi5cXC1jaGVja2JveCBsYWJlbDphZnRlcgp7CiAgY29udGVudDogIiI7CiAgb3BhY2l0eTogMC4yOwogIHdpZHRoOiA4cHg7CiAgaGVpZ2h0OiA0cHg7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpOwogIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7CiAgdHJhbnNpdGlvbjogYWxsIDAuM3M7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogNXB4OwogIGxlZnQ6IDRweDsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICBib3JkZXI6IDJweCBzb2xpZCAjNTQ2Nzc4OwogIGJvcmRlci10b3A6IDBweDsKICBib3JkZXItcmlnaHQ6IDBweDsKfQoKLlxcLWNoZWNrYm94IGxhYmVsOmhvdmVyOjphZnRlcgp7CiAgb3BhY2l0eTogMC41Owp9CgouXFwtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0KewogIHZpc2liaWxpdHk6IGhpZGRlbjsKfQoKLlxcLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyBsYWJlbDphZnRlcgp7CiAgb3BhY2l0eTogMTsKICBib3JkZXItY29sb3I6ICNGRkY7Cn0KCi5cXC1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgbGFiZWwKewogIGJhY2tncm91bmQtY29sb3I6ICM0RTkxRTQ7Cn0KCi5cXC1jaGVja2JveC0tc3VjY2VzcyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkICsgbGFiZWwKewogIGJhY2tncm91bmQtY29sb3I6ICM0QUNGN0Y7Cn0KCi5cXC1jaGVja2JveC0tZXJyb3IgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIGxhYmVsCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUU2NzVEOwp9CgouXFwtY2hlY2tib3gtLXdhcm5pbmcgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIGxhYmVsCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkJDODUwOwp9CgouXFwtZmllbGQsCi5cXC1mb3JtLWZpZWxkCnsKICBkaXNwbGF5OiBibG9jazsKICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgbWFyZ2luLXRvcDogMHB4Owp9CgouXFwtZmllbGQtbGFiZWwsCi5cXC1mb3JtLWZpZWxkLWxhYmVsCnsKICBkaXNwbGF5OiBibG9jazsKICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgZm9udC1zaXplOiAxNXB4OwogIGNvbG9yOiAjNTQ2Nzc4OwogIG1hcmdpbi10b3A6IDBweDsKICBtYXJnaW4tYm90dG9tOiA1cHg7Cn0KCi5cXC1maWVsZC1oZWxwZXIsCi5cXC1mb3JtLWZpZWxkLWhlbHBlcgp7CiAgZGlzcGxheTogYmxvY2s7CiAgdmVydGljYWwtYWxpZ246IHRvcDsKICBmb250LXdlaWdodDogbm9ybWFsOwogIGZvbnQtc2l6ZTogMTNweDsKICBjb2xvcjogIzg3OUFBQjsKICBtYXJnaW4tdG9wOiA1cHg7CiAgbWFyZ2luLWJvdHRvbTogMjBweDsKfQoKLlxcLWZvcm0KewogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxMDAlOwogIG1hcmdpbi10b3A6IDBweDsKICBtYXJnaW4tYm90dG9tOiAyMHB4OwogIGZvbnQtc2l6ZTogMTZweDsKfQoKLlxcLWZvcm0tdGl0bGUKewogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxMDAlOwogIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgZm9udC1zaXplOiAyNHB4OwogIGNvbG9yOiAjNTQ2Nzc4OwogIG1hcmdpbi1ib3R0b206IDEwcHg7Cn0KCi5cXC1mb3JtLWRldGFpbAp7CiAgZGlzcGxheTogYmxvY2s7CiAgd2lkdGg6IDEwMCU7CiAgdmVydGljYWwtYWxpZ246IHRvcDsKICBmb250LXNpemU6IDE2cHg7CiAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgY29sb3I6ICM1NDY3Nzg7CiAgbWFyZ2luLWJvdHRvbTogMjBweDsKfQoKLlxcLWZvcm0tcnVsZQp7CiAgZGlzcGxheTogYmxvY2s7CiAgd2lkdGg6IDEwMCU7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNDQkQ4RTY7CiAgbWFyZ2luLXRvcDogNXB4OwogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgaGVpZ2h0OiAwcHg7Cn0KCi5cXC1pbnB1dAp7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGhlaWdodDogMzRweDsKICBsaW5lLWhlaWdodDogMzRweDsKICBmb250LXNpemU6IDE0cHg7CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICBjb2xvcjogIzU0Njc3ODsKICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgcGFkZGluZy1yaWdodDogMTBweDsKICBwYWRkaW5nLXRvcDogMHB4OwogIHBhZGRpbmctYm90dG9tOiAwcHg7CiAgYm9yZGVyOiAwcHg7CiAgYm9yZGVyLXJhZGl1czogNXB4OwogIG91dGxpbmU6IDBweDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVGMkY3OwogIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAvKmJvcmRlcjogMXB4IHNvbGlkICNhYWE7Ki8KICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDsKICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkZGQ7Cn0KCi5cXC1pbnB1dC0tZmx1aWQKewogIHdpZHRoOiAxMDAlOwp9CgouXFwtaW5wdXQtLWxpZ2h0CnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGOwp9CgouXFwtaW5wdXQtLWRhcmsKewogIGJhY2tncm91bmQtY29sb3I6ICM1NDY3Nzg7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1sYWJlbAp7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIG1pbi1oZWlnaHQ6IDM0cHg7CiAgbGluZS1oZWlnaHQ6IDM0cHg7CiAgZm9udC1zaXplOiAxNXB4OwogIGNvbG9yOiAjNTQ2Nzc4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgcGFkZGluZy1yaWdodDogMTBweDsKICBwYWRkaW5nLWxlZnQ6IDBweDsKICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwp9CgouXFwtbGFiZWwtLWxpZ2h0CnsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLWxhYmVsLS1kYXJrCnsKICBjb2xvcjogIzU0Njc3ODsKfQoKLlxcLXJhZGlvCnsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgd2lkdGg6IDE4cHg7CiAgaGVpZ2h0OiAxOHB4OwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogIG1hcmdpbjogOHB4OwogIGN1cnNvcjogcG9pbnRlcjsKfQoKLlxcLXJhZGlvID4gbGFiZWwKewogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiBjYWxjKDE4cHggLSAyICogM3B4KTsKICBoZWlnaHQ6IGNhbGMoMThweCAtIDIgKiAzcHgpOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDBweDsKICBsZWZ0OiAwcHg7CiAgYm9yZGVyLXJhZGl1czogMTAwcHg7CiAgYm9yZGVyLXdpZHRoOiAzcHg7CiAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICBib3JkZXItY29sb3I6ICNEREU1RUU7CiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuM3MgZWFzZTsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5cXC1yYWRpbyA+IGxhYmVsOmFmdGVyCnsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgZGlzcGxheTogYmxvY2s7CiAgY29udGVudDogIiI7CiAgd2lkdGg6IDZweDsKICBoZWlnaHQ6IDZweDsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICBib3JkZXItcmFkaXVzOiAxMDBweDsKICB0b3A6IGNhbGMoNTAlIC0gNnB4IC8gMik7CiAgbGVmdDogY2FsYyg1MCUgLSA2cHggLyAyKTsKICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwp9CgouXFwtcmFkaW86aG92ZXIgPiBsYWJlbDphZnRlcgp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0RERTVFRTsKfQoKLlxcLXJhZGlvIGlucHV0W3R5cGU9cmFkaW9dCnsKICB2aXNpYmlsaXR5OiBoaWRkZW47Cn0KCi5cXC1yYWRpbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkICsgbGFiZWw6YWZ0ZXIKewogIGJhY2tncm91bmQtY29sb3I6ICM0RTkxRTQ7Cn0KCi5cXC1yYWRpbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkICsgbGFiZWwKewogIGJvcmRlci1jb2xvcjogIzRFOTFFNDsKfQoKLlxcLXJhZGlvLS1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgKyBsYWJlbDphZnRlcgp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzRBQ0Y3RjsKfQoKLlxcLXJhZGlvLS1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgKyBsYWJlbAp7CiAgYm9yZGVyLWNvbG9yOiAjNEFDRjdGOwp9CgouXFwtcmFkaW8tLWVycm9yIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgKyBsYWJlbDphZnRlcgp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0VFNjc1RDsKfQoKLlxcLXJhZGlvLS1lcnJvciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkICsgbGFiZWwKewogIGJvcmRlci1jb2xvcjogI0VFNjc1RDsKfQoKLlxcLXJhZGlvLS13YXJuaW5nIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgKyBsYWJlbDphZnRlcgp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0ZCQzg1MDsKfQoKLlxcLXJhZGlvLS13YXJuaW5nIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgKyBsYWJlbAp7CiAgYm9yZGVyLWNvbG9yOiAjRkJDODUwOwp9CgouXFwtc2VsZWN0CnsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgaGVpZ2h0OiAzNHB4OwogIGxpbmUtaGVpZ2h0OiAzNHB4OwogIGZvbnQtc2l6ZTogMTRweDsKICBmb250LXdlaWdodDogbm9ybWFsOwogIGNvbG9yOiAjNTQ2Nzc4OwogIHBhZGRpbmctbGVmdDogMTBweDsKICBwYWRkaW5nLXJpZ2h0OiAxMHB4OwogIHBhZGRpbmctdG9wOiAwcHg7CiAgcGFkZGluZy1ib3R0b206IDBweDsKICBib3JkZXI6IDBweDsKICBib3JkZXItcmFkaXVzOiA1cHg7CiAgb3V0bGluZTogMHB4OwogIGJhY2tncm91bmQtY29sb3I6ICNFRUYyRjc7CiAgdmVydGljYWwtYWxpZ246IHRvcDsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkOwogIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2RkZDsKfQoKLlxcLXNlbGVjdC0tZmx1aWQKewogIHdpZHRoOiAxMDAlOwp9CgouXFwtc2VsZWN0LS1saWdodAp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjsKfQoKLlxcLXNlbGVjdC0tZGFyawp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzU0Njc3ODsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLXN3aXRjaAp7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHdpZHRoOiAzMnB4OwogIGhlaWdodDogMThweDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgYm9yZGVyLXJhZGl1czogNTBweDsKICBtYXJnaW4tbGVmdDogMTBweDsKICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgbWFyZ2luLXRvcDogOHB4OwogIG1hcmdpbi1ib3R0b206IDhweDsKICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwp9CgouXFwtc3dpdGNoIGxhYmVsCnsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5cXC1zd2l0Y2ggbGFiZWw6OmFmdGVyCnsKICBkaXNwbGF5OiBibG9jazsKICBjb250ZW50OiAiIjsKICB3aWR0aDogMTRweDsKICBoZWlnaHQ6IDE0cHg7CiAgYm9yZGVyLXJhZGl1czogNTBweDsKICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogIGJhY2tncm91bmQ6ICM4NzlBQUI7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMnB4OwogIGxlZnQ6IDJweDsKICB6LWluZGV4OiAyOwogIG9wYWNpdHk6IDAuNjsKfQoKLlxcLXN3aXRjaCBsYWJlbDo6YWZ0ZXI6aG92ZXIKewogIG9wYWNpdHk6IDE7Cn0KCi5cXC1zd2l0Y2ggbGFiZWw6OmJlZm9yZQp7CiAgZGlzcGxheTogYmxvY2s7CiAgY29udGVudDogIiI7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAxMDAlOwogIGJhY2tncm91bmQtY29sb3I6ICNEREU1RUU7CiAgYm9yZGVyLXJhZGl1czogNTBweDsKICB0cmFuc2l0aW9uOiBhbGwgMC4zczsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwcHg7CiAgei1pbmRleDogMTsKfQoKLlxcLXN3aXRjaCBpbnB1dFt0eXBlPWNoZWNrYm94XQp7CiAgdmlzaWJpbGl0eTogaGlkZGVuOwp9CgouXFwtc3dpdGNoIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgfiBsYWJlbDo6YmVmb3JlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNEU5MUU0Owp9CgouXFwtc3dpdGNoIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgfiBsYWJlbDo6YWZ0ZXIKewogIGxlZnQ6IDE2cHg7CiAgb3BhY2l0eTogMTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGOwp9CgouXFwtc3dpdGNoLS1zdWNjZXNzIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgfiBsYWJlbDo6YmVmb3JlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNEFDRjdGOwp9CgouXFwtc3dpdGNoLS1lcnJvciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkIH4gbGFiZWw6OmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0VFNjc1RDsKfQoKLlxcLXN3aXRjaC0td2FybmluZyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkIH4gbGFiZWw6OmJlZm9yZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0ZCQzg1MDsKfQoKLlxcLXRleHRhcmVhCnsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgZm9udC1zaXplOiAxNHB4OwogIGNvbG9yOiAjNTQ2Nzc4OwogIHBhZGRpbmc6IDEwcHg7CiAgYm9yZGVyOiAwcHg7CiAgYm9yZGVyLXJhZGl1czogNXB4OwogIG91dGxpbmU6IDBweDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUVGMkY3OwogIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICByZXNpemU6IHZlcnRpY2FsOwp9CgouXFwtdGV4dGFyZWEtLWZsdWlkCnsKICB3aWR0aDogMTAwJTsKfQoKLlxcLXRleHRhcmVhLS1saWdodAp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjsKfQoKLlxcLXRleHRhcmVhLS1kYXJrCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ2Nzc4OwogIGNvbG9yOiAjRkZGOwp9CgouXFwtZ3JpZAp7CiAgZGlzcGxheTogYmxvY2s7CiAgd2lkdGg6IDEwMCU7CiAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgbWFyZ2luLXJpZ2h0OiBhdXRvOwp9CgouXFwtZ3JpZC1yb3cKewogIGRpc3BsYXk6IGJsb2NrOwogIG1hcmdpbi1sZWZ0OiAtMTJweDsKICBtYXJnaW4tcmlnaHQ6IC0xMnB4Owp9CgouXFwtZ3JpZC1yb3c6YWZ0ZXIKewogIGNvbnRlbnQ6ICIgIjsKICBjbGVhcjogYm90aDsKICBkaXNwbGF5OiB0YWJsZTsKICBsaW5lLWhlaWdodDogMDsKfQoKLlxcLWdyaWQtY29sCnsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgdmVydGljYWwtYWxpZ246IHRvcDsKICBmbG9hdDogbGVmdDsKICBwYWRkaW5nOiAxMnB4Owp9CgouXFwtZ3JpZC1jb2wtLTEKewogIHdpZHRoOiBjYWxjKDguMzMlIC0gMiAqIDEycHgpOwp9CgouXFwtZ3JpZC1jb2wtLTIKewogIHdpZHRoOiBjYWxjKDE2LjY2JSAtIDIgKiAxMnB4KTsKfQoKLlxcLWdyaWQtY29sLS0zCnsKICB3aWR0aDogY2FsYygyNC45OSUgLSAyICogMTJweCk7Cn0KCi5cXC1ncmlkLWNvbC0tNAp7CiAgd2lkdGg6IGNhbGMoMzMuMzMlIC0gMiAqIDEycHgpOwp9CgouXFwtZ3JpZC1jb2wtLTUKewogIHdpZHRoOiBjYWxjKDQxLjY2JSAtIDIgKiAxMnB4KTsKfQoKLlxcLWdyaWQtY29sLS02CnsKICB3aWR0aDogY2FsYyg0OS45OSUgLSAyICogMTJweCk7Cn0KCi5cXC1ncmlkLWNvbC0tNwp7CiAgd2lkdGg6IGNhbGMoNTguMzMlIC0gMiAqIDEycHgpOwp9CgouXFwtZ3JpZC1jb2wtLTgKewogIHdpZHRoOiBjYWxjKDY2LjY2JSAtIDIgKiAxMnB4KTsKfQoKLlxcLWdyaWQtY29sLS05CnsKICB3aWR0aDogY2FsYyg3NC45OSUgLSAyICogMTJweCk7Cn0KCi5cXC1ncmlkLWNvbC0tMTAKewogIHdpZHRoOiBjYWxjKDgzLjMzJSAtIDIgKiAxMnB4KTsKfQoKLlxcLWdyaWQtY29sLS0xMQp7CiAgd2lkdGg6IGNhbGMoOTEuNjYlIC0gMiAqIDEycHgpOwp9CgouXFwtZ3JpZC1jb2wtLTEyCnsKICB3aWR0aDogY2FsYyg5OS45OSUgLSAyICogMTJweCk7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiAxMjgwcHgpCnsKICAuXFwtZ3JpZC1jb2wtLXhsLTEsIC5cXC1ncmlkLWNvbC14bC0tMQogIHsKICAgIHdpZHRoOiBjYWxjKDguMzMlIC0gMiAqIDEycHgpOwogIH0KICAKICAuXFwtZ3JpZC1jb2wtLXhsLTIsIC5cXC1ncmlkLWNvbC14bC0tMgogIHsKICAgIHdpZHRoOiBjYWxjKDE2LjY2JSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS14bC0zLCAuXFwtZ3JpZC1jb2wteGwtLTMKICB7CiAgICB3aWR0aDogY2FsYygyNC45OSUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0teGwtNCwgLlxcLWdyaWQtY29sLXhsLS00CiAgewogICAgd2lkdGg6IGNhbGMoMzMuMzMlIC0gMiAqIDEycHgpOwogIH0KICAKICAuXFwtZ3JpZC1jb2wtLXhsLTUsIC5cXC1ncmlkLWNvbC14bC0tNQogIHsKICAgIHdpZHRoOiBjYWxjKDQxLjY2JSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS14bC02LCAuXFwtZ3JpZC1jb2wteGwtLTYKICB7CiAgICB3aWR0aDogY2FsYyg0OS45OSUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0teGwtNywgLlxcLWdyaWQtY29sLXhsLS03CiAgewogICAgd2lkdGg6IGNhbGMoNTguMzMlIC0gMiAqIDEycHgpOwogIH0KICAKICAuXFwtZ3JpZC1jb2wtLXhsLTgsIC5cXC1ncmlkLWNvbC14bC0tOAogIHsKICAgIHdpZHRoOiBjYWxjKDY2LjY2JSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS14bC05LCAuXFwtZ3JpZC1jb2wteGwtLTkKICB7CiAgICB3aWR0aDogY2FsYyg3NC45OSUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0teGwtMTAsIC5cXC1ncmlkLWNvbC14bC0tMTAKICB7CiAgICB3aWR0aDogY2FsYyg4My4zMyUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0teGwtMTEsIC5cXC1ncmlkLWNvbC14bC0tMTEKICB7CiAgICB3aWR0aDogY2FsYyg5MS42NiUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0teGwtMTIsIC5cXC1ncmlkLWNvbC14bC0tMTIKICB7CiAgICB3aWR0aDogY2FsYyg5OS45OSUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0teGwtaGlkZQogIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA5NjBweCkKewogIC5cXC1ncmlkLWNvbC0tbGctMSwgLlxcLWdyaWQtY29sLWxnLS0xCiAgewogICAgd2lkdGg6IGNhbGMoOC4zMyUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0tbGctMiwgLlxcLWdyaWQtY29sLWxnLS0yCiAgewogICAgd2lkdGg6IGNhbGMoMTYuNjYlIC0gMiAqIDEycHgpOwogIH0KICAKICAuXFwtZ3JpZC1jb2wtLWxnLTMsIC5cXC1ncmlkLWNvbC1sZy0tMwogIHsKICAgIHdpZHRoOiBjYWxjKDI0Ljk5JSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS1sZy00LCAuXFwtZ3JpZC1jb2wtbGctLTQKICB7CiAgICB3aWR0aDogY2FsYygzMy4zMyUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0tbGctNSwgLlxcLWdyaWQtY29sLWxnLS01CiAgewogICAgd2lkdGg6IGNhbGMoNDEuNjYlIC0gMiAqIDEycHgpOwogIH0KICAKICAuXFwtZ3JpZC1jb2wtLWxnLTYsIC5cXC1ncmlkLWNvbC1sZy0tNgogIHsKICAgIHdpZHRoOiBjYWxjKDQ5Ljk5JSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS1sZy03LCAuXFwtZ3JpZC1jb2wtbGctLTcKICB7CiAgICB3aWR0aDogY2FsYyg1OC4zMyUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0tbGctOCwgLlxcLWdyaWQtY29sLWxnLS04CiAgewogICAgd2lkdGg6IGNhbGMoNjYuNjYlIC0gMiAqIDEycHgpOwogIH0KICAKICAuXFwtZ3JpZC1jb2wtLWxnLTksIC5cXC1ncmlkLWNvbC1sZy0tOQogIHsKICAgIHdpZHRoOiBjYWxjKDc0Ljk5JSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS1sZy0xMCwgLlxcLWdyaWQtY29sLWxnLS0xMAogIHsKICAgIHdpZHRoOiBjYWxjKDgzLjMzJSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS1sZy0xMSwgLlxcLWdyaWQtY29sLWxnLS0xMQogIHsKICAgIHdpZHRoOiBjYWxjKDkxLjY2JSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS1sZy0xMiwgLlxcLWdyaWQtY29sLWxnLS0xMgogIHsKICAgIHdpZHRoOiBjYWxjKDk5Ljk5JSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS1sZy1oaWRlCiAgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogIH0KfQoKQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KQp7CiAgLlxcLWdyaWQtY29sLS1tZC0xLCAuXFwtZ3JpZC1jb2wtbWQtLTEKICB7CiAgICB3aWR0aDogY2FsYyg4LjMzJSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS1tZC0yLCAuXFwtZ3JpZC1jb2wtbWQtLTIKICB7CiAgICB3aWR0aDogY2FsYygxNi42NiUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0tbWQtMywgLlxcLWdyaWQtY29sLW1kLS0zCiAgewogICAgd2lkdGg6IGNhbGMoMjQuOTklIC0gMiAqIDEycHgpOwogIH0KICAKICAuXFwtZ3JpZC1jb2wtLW1kLTQsIC5cXC1ncmlkLWNvbC1tZC0tNAogIHsKICAgIHdpZHRoOiBjYWxjKDMzLjMzJSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS1tZC01LCAuXFwtZ3JpZC1jb2wtbWQtLTUKICB7CiAgICB3aWR0aDogY2FsYyg0MS42NiUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0tbWQtNiwgLlxcLWdyaWQtY29sLW1kLS02CiAgewogICAgd2lkdGg6IGNhbGMoNDkuOTklIC0gMiAqIDEycHgpOwogIH0KICAKICAuXFwtZ3JpZC1jb2wtLW1kLTcsIC5cXC1ncmlkLWNvbC1tZC0tNwogIHsKICAgIHdpZHRoOiBjYWxjKDU4LjMzJSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS1tZC04LCAuXFwtZ3JpZC1jb2wtbWQtLTgKICB7CiAgICB3aWR0aDogY2FsYyg2Ni42NiUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0tbWQtOSwgLlxcLWdyaWQtY29sLW1kLS05CiAgewogICAgd2lkdGg6IGNhbGMoNzQuOTklIC0gMiAqIDEycHgpOwogIH0KICAKICAuXFwtZ3JpZC1jb2wtLW1kLTEwLCAuXFwtZ3JpZC1jb2wtbWQtLTEwCiAgewogICAgd2lkdGg6IGNhbGMoODMuMzMlIC0gMiAqIDEycHgpOwogIH0KICAKICAuXFwtZ3JpZC1jb2wtLW1kLTExLCAuXFwtZ3JpZC1jb2wtbWQtLTExCiAgewogICAgd2lkdGg6IGNhbGMoOTEuNjYlIC0gMiAqIDEycHgpOwogIH0KICAKICAuXFwtZ3JpZC1jb2wtLW1kLTEyLCAuXFwtZ3JpZC1jb2wtbWQtLTEyCiAgewogICAgd2lkdGg6IGNhbGMoOTkuOTklIC0gMiAqIDEycHgpOwogIH0KICAKICAuXFwtZ3JpZC1jb2wtLW1kLWhpZGUKICB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQp9CgpAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpCnsKICAuXFwtZ3JpZC1jb2wtLXNtLTEsIC5cXC1ncmlkLWNvbC1zbS0tMQogIHsKICAgIHdpZHRoOiBjYWxjKDguMzMlIC0gMiAqIDEycHgpOwogIH0KICAKICAuXFwtZ3JpZC1jb2wtLXNtLTIsIC5cXC1ncmlkLWNvbC1zbS0tMgogIHsKICAgIHdpZHRoOiBjYWxjKDE2LjY2JSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS1zbS0zLCAuXFwtZ3JpZC1jb2wtc20tLTMKICB7CiAgICB3aWR0aDogY2FsYygyNC45OSUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0tc20tNCwgLlxcLWdyaWQtY29sLXNtLS00CiAgewogICAgd2lkdGg6IGNhbGMoMzMuMzMlIC0gMiAqIDEycHgpOwogIH0KICAKICAuXFwtZ3JpZC1jb2wtLXNtLTUsIC5cXC1ncmlkLWNvbC1zbS0tNQogIHsKICAgIHdpZHRoOiBjYWxjKDQxLjY2JSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS1zbS02LCAuXFwtZ3JpZC1jb2wtc20tLTYKICB7CiAgICB3aWR0aDogY2FsYyg0OS45OSUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0tc20tNywgLlxcLWdyaWQtY29sLXNtLS03CiAgewogICAgd2lkdGg6IGNhbGMoNTguMzMlIC0gMiAqIDEycHgpOwogIH0KICAKICAuXFwtZ3JpZC1jb2wtLXNtLTgsIC5cXC1ncmlkLWNvbC1zbS0tOAogIHsKICAgIHdpZHRoOiBjYWxjKDY2LjY2JSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS1zbS05LCAuXFwtZ3JpZC1jb2wtc20tLTkKICB7CiAgICB3aWR0aDogY2FsYyg3NC45OSUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0tc20tMTAsIC5cXC1ncmlkLWNvbC1zbS0tMTAKICB7CiAgICB3aWR0aDogY2FsYyg4My4zMyUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0tc20tMTEsIC5cXC1ncmlkLWNvbC1zbS0tMTEKICB7CiAgICB3aWR0aDogY2FsYyg5MS42NiUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0tc20tMTIsIC5cXC1ncmlkLWNvbC1zbS0tMTIKICB7CiAgICB3aWR0aDogY2FsYyg5OS45OSUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0tc20taGlkZQogIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkKewogIC5cXC1ncmlkLWNvbC0teHMtMSwgLlxcLWdyaWQtY29sLXhzLS0xCiAgewogICAgd2lkdGg6IGNhbGMoOC4zMyUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0teHMtMiwgLlxcLWdyaWQtY29sLXhzLS0yCiAgewogICAgd2lkdGg6IGNhbGMoMTYuNjYlIC0gMiAqIDEycHgpOwogIH0KICAKICAuXFwtZ3JpZC1jb2wtLXhzLTMsIC5cXC1ncmlkLWNvbC14cy0tMwogIHsKICAgIHdpZHRoOiBjYWxjKDI0Ljk5JSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS14cy00LCAuXFwtZ3JpZC1jb2wteHMtLTQKICB7CiAgICB3aWR0aDogY2FsYygzMy4zMyUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0teHMtNSwgLlxcLWdyaWQtY29sLXhzLS01CiAgewogICAgd2lkdGg6IGNhbGMoNDEuNjYlIC0gMiAqIDEycHgpOwogIH0KICAKICAuXFwtZ3JpZC1jb2wtLXhzLTYsIC5cXC1ncmlkLWNvbC14cy0tNgogIHsKICAgIHdpZHRoOiBjYWxjKDQ5Ljk5JSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS14cy03LCAuXFwtZ3JpZC1jb2wteHMtLTcKICB7CiAgICB3aWR0aDogY2FsYyg1OC4zMyUgLSAyICogMTJweCk7CiAgfQogIAogIC5cXC1ncmlkLWNvbC0teHMtOCwgLlxcLWdyaWQtY29sLXhzLS04CiAgewogICAgd2lkdGg6IGNhbGMoNjYuNjYlIC0gMiAqIDEycHgpOwogIH0KICAKICAuXFwtZ3JpZC1jb2wtLXhzLTksIC5cXC1ncmlkLWNvbC14cy0tOQogIHsKICAgIHdpZHRoOiBjYWxjKDc0Ljk5JSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS14cy0xMCwgLlxcLWdyaWQtY29sLXhzLS0xMAogIHsKICAgIHdpZHRoOiBjYWxjKDgzLjMzJSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS14cy0xMSwgLlxcLWdyaWQtY29sLXhzLS0xMQogIHsKICAgIHdpZHRoOiBjYWxjKDkxLjY2JSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS14cy0xMiwgLlxcLWdyaWQtY29sLXhzLS0xMgogIHsKICAgIHdpZHRoOiBjYWxjKDk5Ljk5JSAtIDIgKiAxMnB4KTsKICB9CiAgCiAgLlxcLWdyaWQtY29sLS14cy1oaWRlCiAgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogIH0KfQoKLlxcLWRyb3Bkb3duCnsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5cXC1kcm9wZG93bi10b2dnbGU6OmFmdGVyCnsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgY29udGVudDogIiI7CiAgaGVpZ2h0OiAwcHg7CiAgd2lkdGg6IDBweDsKICBtYXJnaW4tbGVmdDogNHB4OwogIGJvcmRlci10b3A6IDZweCBzb2xpZCAjRkZGOwogIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKfQoKLlxcLWRyb3Bkb3duLXRvZ2dsZS0tbGlnaHQ6OmFmdGVyCnsKICBib3JkZXItdG9wLWNvbG9yOiAjRkZGOwp9CgouXFwtZHJvcGRvd24tdG9nZ2xlLS1kYXJrOjphZnRlcgp7CiAgYm9yZGVyLXRvcC1jb2xvcjogIzU0Njc3ODsKfQoKLlxcLWRyb3Bkb3duLWNvbnRlbnQKewogIGRpc3BsYXk6IG5vbmU7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogY2FsYygxMDAlICsgMnB4KTsKICBsZWZ0OiAwcHg7CiAgbWluLXdpZHRoOiAxNTBweDsKICBjb2xvcjogIzU0Njc3ODsKICB0ZXh0LWFsaWduOiBsZWZ0OwogIGJhY2tncm91bmQtY29sb3I6ICNGRkY7CiAgYm9yZGVyLXJhZGl1czogNXB4OwogIGJvcmRlcjogMXB4IHNvbGlkICNEREU1RUU7Cn0KCi5cXC1kcm9wZG93bi0tdmlzaWJsZSAuXFwtZHJvcGRvd24tY29udGVudAp7CiAgZGlzcGxheTogYmxvY2s7Cn0KCi5cXC1kcm9wZG93bi1pdGVtCnsKICBkaXNwbGF5OiBibG9jazsKICBsaW5lLWhlaWdodDogMjRweDsKICBmb250LXNpemU6IDE2cHg7CiAgcGFkZGluZy1sZWZ0OiAxNXB4OwogIHBhZGRpbmctcmlnaHQ6IDE1cHg7CiAgcGFkZGluZy10b3A6IDRweDsKICBwYWRkaW5nLWJvdHRvbTogNHB4OwogIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgY3Vyc29yOiBwb2ludGVyOwogIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zczsKfQoKLlxcLWRyb3Bkb3duLWl0ZW06aG92ZXIKewogIGJhY2tncm91bmQtY29sb3I6ICNFRUYyRjc7Cn0KCi5cXC1kcm9wZG93bi1zZXBhcmF0b3IKewogIGRpc3BsYXk6IGJsb2NrOwogIGhlaWdodDogMHB4OwogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRERFNUVFOwogIG1hcmdpbi10b3A6IDVweDsKICBtYXJnaW4tYm90dG9tOiA1cHg7Cn0KCi5cXC1tb2RhbAp7CiAgZGlzcGxheTogZmxleDsKICB3aWR0aDogY2FsYygxMDAlIC0gMiAqIDE1cHgpOwogIGhlaWdodDogY2FsYygxMDAlIC0gMiAqIDE1cHgpOwogIHBvc2l0aW9uOiBmaXhlZDsKICB0b3A6IDBweDsKICBsZWZ0OiAwcHg7CiAgei1pbmRleDogNDAwOwogIHBhZGRpbmc6IDE1cHg7CiAgb3ZlcmZsb3cteDogaGlkZGVuOwogIG92ZXJmbG93LXk6IGhpZGRlbjsKICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoNDIsIDUyLCA2MCwgMC40KTsKfQoKLlxcLW1vZGFsLWNvbnRlbnQKewogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxMDAlOwogIGJhY2tncm91bmQtY29sb3I6ICNGRkY7CiAgYm9yZGVyLXJhZGl1czogNXB4OwogIHBhZGRpbmc6IDBweDsKfQoKLlxcLW1vZGFsLWhlYWRlcgp7CiAgZGlzcGxheTogYmxvY2s7CiAgaGVpZ2h0OiAyNHB4OwogIHBhZGRpbmc6IDIwcHg7CiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNXB4OwogIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA1cHg7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNEREU1RUU7Cn0KCi5cXC1tb2RhbC1oZWFkZXItdGl0bGUKewogIGZsb2F0OiBsZWZ0OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtc2l6ZTogMjBweDsKICBoZWlnaHQ6IDI0cHg7CiAgbGluZS1oZWlnaHQ6IDI0cHg7Cn0KCi5cXC1tb2RhbC1oZWFkZXItY2xvc2UKewogIGRpc3BsYXk6IGJsb2NrOwogIGZsb2F0OiByaWdodDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgd2lkdGg6IDE2cHg7CiAgaGVpZ2h0OiAyNHB4OwogIGN1cnNvcjogcG9pbnRlcjsKICBvcGFjaXR5OiAwLjY7CiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzOwp9CgouXFwtbW9kYWwtaGVhZGVyLWNsb3NlOmhvdmVyCnsKICBvcGFjaXR5OiAxOwp9CgouXFwtbW9kYWwtaGVhZGVyLWNsb3NlOjpiZWZvcmUsIC5cXC1tb2RhbC1oZWFkZXItY2xvc2U6OmFmdGVyCnsKICBjb250ZW50OiAiIjsKICB3aWR0aDogMTZweDsKICBoZWlnaHQ6IDNweDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ2Nzc4OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBib3JkZXItcmFkaXVzOiAxcHg7CiAgdG9wOiAxMHB4Owp9CgouXFwtbW9kYWwtaGVhZGVyLWNsb3NlOjpiZWZvcmUKewogIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOwogIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKfQoKLlxcLW1vZGFsLWhlYWRlci1jbG9zZTo6YWZ0ZXIKewogIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpOwp9CgouXFwtbW9kYWwtaGVhZGVyOmFmdGVyCnsKICBjb250ZW50OiAiIjsKICBjbGVhcjogYm90aDsKfQoKLlxcLW1vZGFsLWJvZHkKewogIGRpc3BsYXk6IGJsb2NrOwogIG92ZXJmbG93LXk6IGF1dG87CiAgbWF4LWhlaWdodDogNTB2aDsKICBwYWRkaW5nOiAyMHB4Owp9CgouXFwtbW9kYWwtZm9vdGVyCnsKICBkaXNwbGF5OiBibG9jazsKICBwYWRkaW5nOiAyMHB4OwogIGNvbG9yOiAjODc5QUFCOwogIGJhY2tncm91bmQtY29sb3I6ICNFRUYyRjc7CiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNXB4OwogIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA1cHg7Cn0KCi5cXC1tb2RhbC0tc21hbGwgLlxcLW1vZGFsLWNvbnRlbnQKewogIG1heC13aWR0aDogNjAwcHg7Cn0KCi5cXC1tb2RhbC0tbWVkaXVtIC5cXC1tb2RhbC1jb250ZW50CnsKICBtYXgtd2lkdGg6IDc2OHB4Owp9CgouXFwtbW9kYWwtLWxhcmdlIC5cXC1tb2RhbC1jb250ZW50CnsKICBtYXgtd2lkdGg6IDk2MHB4Owp9CgpALXdlYmtpdC1rZXlmcmFtZXMgc2lpbXBsZS1wcm9ncmVzcy1hbmltYXRpb24KewogIDAlCiAgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOwogIH0KICAxMDAlCiAgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNTBweCA1MHB4OwogIH0KfQoKQGtleWZyYW1lcyBzaWltcGxlLXByb2dyZXNzLWFuaW1hdGlvbgp7CiAgMCUKICB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7CiAgfQogIDEwMCUKICB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MHB4IDUwcHg7CiAgfQp9CgouXFwtcHJvZ3Jlc3MKewogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMjBweDsKICBwYWRkaW5nOiAwcHggIWltcG9ydGFudDsKICBtYXJnaW4tdG9wOiAwcHg7CiAgbWFyZ2luLWJvdHRvbTogMjBweDsKICBib3JkZXItcmFkaXVzOiA1cHg7CiAgYmFja2dyb3VuZC1jb2xvcjogI0VFRjJGNzsKICBvdmVyZmxvdzogaGlkZGVuOwogIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAtbXotYXBwZWFyYW5jZTogbm9uZTsKfQoKLlxcLXByb2dyZXNzID4gc3Bhbgp7CiAgZGlzcGxheTogYmxvY2s7CiAgaGVpZ2h0OiAxMDAlOwogIG92ZXJmbG93OiBoaWRkZW47CiAgdHJhbnNpdGlvbjogYWxsIDAuM3M7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBsaW5lLWhlaWdodDogMjBweDsKICBmb250LXNpemU6IDEycHg7Cn0KCi5cXC1wcm9ncmVzcy0tc3RyaXBlZCA+IHNwYW46OmFmdGVyLCAuXFwtcHJvZ3Jlc3MtLXN0cmlwZWQtc2xvdyA+IHNwYW46OmFmdGVyLCAuXFwtcHJvZ3Jlc3MtLXN0cmlwZWQtZmFzdCA+IHNwYW46OmFmdGVyCnsKICBjb250ZW50OiAiIjsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwcHg7CiAgbGVmdDogMHB4OwogIHJpZ2h0OiAwcHg7CiAgYm90dG9tOiAwcHg7CiAgei1pbmRleDogMTsKICBiYWNrZ3JvdW5kLXNpemU6IDUwcHggNTBweDsKICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoLTQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7Cn0KCi5cXC1wcm9ncmVzcy0tc3RyaXBlZCA+IHNwYW46OmFmdGVyCnsKICAtd2Via2l0LWFuaW1hdGlvbjogc2lpbXBsZS1wcm9ncmVzcy1hbmltYXRpb24gMi41cyBsaW5lYXIgaW5maW5pdGU7CiAgYW5pbWF0aW9uOiBzaWltcGxlLXByb2dyZXNzLWFuaW1hdGlvbiAyLjVzIGxpbmVhciBpbmZpbml0ZTsKfQoKLlxcLXByb2dyZXNzLS1zdHJpcGVkLWZhc3QgPiBzcGFuOjphZnRlcgp7CiAgLXdlYmtpdC1hbmltYXRpb246IHNpaW1wbGUtcHJvZ3Jlc3MtYW5pbWF0aW9uIDFzIGxpbmVhciBpbmZpbml0ZTsKICBhbmltYXRpb246IHNpaW1wbGUtcHJvZ3Jlc3MtYW5pbWF0aW9uIDFzIGxpbmVhciBpbmZpbml0ZTsKfQoKLlxcLXByb2dyZXNzLS1zdHJpcGVkLXNsb3cgPiBzcGFuOjphZnRlcgp7CiAgLXdlYmtpdC1hbmltYXRpb246IHNpaW1wbGUtcHJvZ3Jlc3MtYW5pbWF0aW9uIDRzIGxpbmVhciBpbmZpbml0ZTsKICBhbmltYXRpb246IHNpaW1wbGUtcHJvZ3Jlc3MtYW5pbWF0aW9uIDRzIGxpbmVhciBpbmZpbml0ZTsKfQoKLlxcLXByb2dyZXNzLlxcLXByb2dyZXNzLS1wcmltYXJ5ID4gc3Bhbgp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzRFOTFFNDsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLXByb2dyZXNzLlxcLXByb2dyZXNzLS1zdWNjZXNzID4gc3Bhbgp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzRBQ0Y3RjsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLXByb2dyZXNzLlxcLXByb2dyZXNzLS13YXJuaW5nID4gc3Bhbgp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0ZCQzg1MDsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLXByb2dyZXNzLlxcLXByb2dyZXNzLS1lcnJvciA+IHNwYW4KewogIGJhY2tncm91bmQtY29sb3I6ICNFRTY3NUQ7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1wcm9ncmVzcy5cXC1wcm9ncmVzcy0tZGFyayA+IHNwYW4KewogIGJhY2tncm91bmQtY29sb3I6ICM1NDY3Nzg7CiAgY29sb3I6ICNGRkY7Cn0KCi5cXC1wcm9ncmVzcy5cXC1wcm9ncmVzcy0tbGlnaHQgPiBzcGFuCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRERFNUVFOwogIGNvbG9yOiAjNTQ2Nzc4Owp9CgouXFwtc3RlcHMKewogIGRpc3BsYXk6IGJsb2NrOwogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgouXFwtc3RlcHMtaXRlbQp7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHBhZGRpbmctdG9wOiA0MHB4OwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLlxcLXN0ZXBzLWl0ZW0tYnViYmxlCnsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogMzRweDsKICBoZWlnaHQ6IDM0cHg7CiAgYm9yZGVyLXJhZGl1czogMTAwcHg7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGxlZnQ6IGNhbGMoNTAlIC0gMzRweCAvIDIpOwogIHRvcDogMHB4OwogIHotaW5kZXg6IDEwOwogIGxpbmUtaGVpZ2h0OiAzNHB4OwogIGZvbnQtc2l6ZTogMjBweDsKICBjb2xvcjogI0ZGRjsKfQoKLlxcLXN0ZXBzLWl0ZW0tdGl0bGUKewogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiBjYWxjKDEwMCUgLSAyICogNXB4KTsKICBwYWRkaW5nLWxlZnQ6IDVweDsKICBwYWRkaW5nLXJpZ2h0OiA1cHg7CiAgZm9udC1zaXplOiAxNXB4OwogIGxpbmUtaGVpZ2h0OiAyMnB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGNvbG9yOiAjQ0JEOEU2Owp9CgouXFwtc3RlcHMtaXRlbS1kZXNjcmlwdGlvbgp7CiAgZGlzcGxheTogYmxvY2s7CiAgd2lkdGg6IGNhbGMoMTAwJSAtIDIgKiA1cHgpOwogIHBhZGRpbmctbGVmdDogNXB4OwogIHBhZGRpbmctcmlnaHQ6IDVweDsKICBmb250LXNpemU6IDEzcHg7CiAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgY29sb3I6ICNEREU1RUU7Cn0KCi5cXC1zdGVwcy1pdGVtOm5vdCg6bGFzdC1jaGlsZCk6OmFmdGVyCnsKICBjb250ZW50OiAiIjsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDhweDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiBjYWxjKDI2cHggLyAyKTsKICBsZWZ0OiA1MCU7Cn0KCi5cXC1zdGVwcy1pdGVtLS1jdXJyZW50IH4gLlxcLXN0ZXBzLWl0ZW0gLlxcLXN0ZXBzLWl0ZW0tYnViYmxlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRERFNUVFICFpbXBvcnRhbnQ7Cn0KCi5cXC1zdGVwcy1pdGVtLS1jdXJyZW50OjphZnRlciwgLlxcLXN0ZXBzLWl0ZW0tLWN1cnJlbnQgfiAuXFwtc3RlcHMtaXRlbTo6YWZ0ZXIKewogIGJhY2tncm91bmQtY29sb3I6ICNEREU1RUUgIWltcG9ydGFudDsKfQoKLlxcLXN0ZXBzLWl0ZW0tLWN1cnJlbnQgLlxcLXN0ZXBzLWl0ZW0tdGl0bGUKewogIGNvbG9yOiAjNTQ2Nzc4ICFpbXBvcnRhbnQ7Cn0KCi5cXC1zdGVwcy1pdGVtLS1jdXJyZW50IC5cXC1zdGVwcy1pdGVtLWRlc2NyaXB0aW9uCnsKICBjb2xvcjogIzg3OUFBQiAhaW1wb3J0YW50Owp9CgouXFwtc3RlcHMtaXRlbS0tY2hlY2sgLlxcLXN0ZXBzLWl0ZW0tYnViYmxlOjphZnRlciwgLlxcLXN0ZXBzLWl0ZW0tLWNoZWNrIC5cXC1zdGVwcy1pdGVtLWJ1YmJsZTo6YmVmb3JlLCAuXFwtc3RlcHMtaXRlbS0tY3Jvc3MgLlxcLXN0ZXBzLWl0ZW0tYnViYmxlOjphZnRlciwgLlxcLXN0ZXBzLWl0ZW0tLWNyb3NzIC5cXC1zdGVwcy1pdGVtLWJ1YmJsZTo6YmVmb3JlLCAuXFwtc3RlcHMtaXRlbS0tZXhjbGFtYXRpb24gLlxcLXN0ZXBzLWl0ZW0tYnViYmxlOjphZnRlciwgLlxcLXN0ZXBzLWl0ZW0tLWV4Y2xhbWF0aW9uIC5cXC1zdGVwcy1pdGVtLWJ1YmJsZTo6YmVmb3JlCnsKICBkaXNwbGF5OiBibG9jazsKICBjb250ZW50OiAiIjsKICBoZWlnaHQ6IDNweDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRjsKICBib3JkZXItcmFkaXVzOiA1cHg7Cn0KCi5cXC1zdGVwcy1pdGVtLS1jaGVjayAuXFwtc3RlcHMtaXRlbS1idWJibGU6OmFmdGVyCnsKICB3aWR0aDogMTBweDsKICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CiAgdG9wOiAxOXB4OwogIGxlZnQ6IDYuNXB4Owp9CgouXFwtc3RlcHMtaXRlbS0tY2hlY2sgLlxcLXN0ZXBzLWl0ZW0tYnViYmxlOjpiZWZvcmUKewogIHdpZHRoOiAxOHB4OwogIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpOwogIHRvcDogMTZweDsKICBsZWZ0OiAxMC41cHg7Cn0KCi5cXC1zdGVwcy1pdGVtLS1jcm9zcyAuXFwtc3RlcHMtaXRlbS1idWJibGU6OmFmdGVyCnsKICB3aWR0aDogMjBweDsKICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CiAgdG9wOiAxNS41cHg7CiAgbGVmdDogN3B4Owp9CgouXFwtc3RlcHMtaXRlbS0tY3Jvc3MgLlxcLXN0ZXBzLWl0ZW0tYnViYmxlOjpiZWZvcmUKewogIHdpZHRoOiAyMHB4OwogIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpOwogIHRvcDogMTUuNXB4OwogIGxlZnQ6IDdweDsKfQoKLlxcLXN0ZXBzLWl0ZW0tLWV4Y2xhbWF0aW9uIC5cXC1zdGVwcy1pdGVtLWJ1YmJsZTo6YWZ0ZXIKewogIHdpZHRoOiAzcHg7CiAgdG9wOiAyMnB4OwogIGxlZnQ6IDE1LjVweDsKfQoKLlxcLXN0ZXBzLWl0ZW0tLWV4Y2xhbWF0aW9uIC5cXC1zdGVwcy1pdGVtLWJ1YmJsZTo6YmVmb3JlCnsKICB3aWR0aDogM3B4OwogIGhlaWdodDogMTFweDsKICB0b3A6IDhweDsKICBsZWZ0OiAxNS41cHg7Cn0KCi5cXC1zdGVwcy0tcHJpbWFyeSAuXFwtc3RlcHMtaXRlbS1idWJibGUKewogIGJhY2tncm91bmQtY29sb3I6ICM0RTkxRTQ7Cn0KCi5cXC1zdGVwcy0tcHJpbWFyeSAuXFwtc3RlcHMtaXRlbTpub3QoOmxhc3QtY2hpbGQpOjphZnRlcgp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzRFOTFFNDsKfQoKLlxcLXN0ZXBzLS1zdWNjZXNzIC5cXC1zdGVwcy1pdGVtLWJ1YmJsZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzRBQ0Y3RjsKfQoKLlxcLXN0ZXBzLS1zdWNjZXNzIC5cXC1zdGVwcy1pdGVtOm5vdCg6bGFzdC1jaGlsZCk6OmFmdGVyCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNEFDRjdGOwp9CgouXFwtc3RlcHMtLXdhcm5pbmcgLlxcLXN0ZXBzLWl0ZW0tYnViYmxlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkJDODUwOwp9CgouXFwtc3RlcHMtLXdhcm5pbmcgLlxcLXN0ZXBzLWl0ZW06bm90KDpsYXN0LWNoaWxkKTo6YWZ0ZXIKewogIGJhY2tncm91bmQtY29sb3I6ICNGQkM4NTA7Cn0KCi5cXC1zdGVwcy0tZXJyb3IgLlxcLXN0ZXBzLWl0ZW0tYnViYmxlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUU2NzVEOwp9CgouXFwtc3RlcHMtLWVycm9yIC5cXC1zdGVwcy1pdGVtOm5vdCg6bGFzdC1jaGlsZCk6OmFmdGVyCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUU2NzVEOwp9CgouXFwtc3RlcHMtLWRhcmsgLlxcLXN0ZXBzLWl0ZW0tYnViYmxlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ2Nzc4Owp9CgouXFwtc3RlcHMtLWRhcmsgLlxcLXN0ZXBzLWl0ZW06bm90KDpsYXN0LWNoaWxkKTo6YWZ0ZXIKewogIGJhY2tncm91bmQtY29sb3I6ICM1NDY3Nzg7Cn0KCi5cXC1zdGVwcy0tbGlnaHQgLlxcLXN0ZXBzLWl0ZW0tYnViYmxlCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRERFNUVFOwp9CgouXFwtc3RlcHMtLWxpZ2h0IC5cXC1zdGVwcy1pdGVtOm5vdCg6bGFzdC1jaGlsZCk6OmFmdGVyCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRERFNUVFOwp9CgouXFwtLWNvbG9yLXByaW1hcnkKewogIGNvbG9yOiAjNEU5MUU0ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tYmctcHJpbWFyeQp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzRFOTFFNCAhaW1wb3J0YW50Owp9CgouXFwtLWNvbG9yLXN1Y2Nlc3MKewogIGNvbG9yOiAjNEFDRjdGICFpbXBvcnRhbnQ7Cn0KCi5cXC0tYmctc3VjY2Vzcwp7CiAgYmFja2dyb3VuZC1jb2xvcjogIzRBQ0Y3RiAhaW1wb3J0YW50Owp9CgouXFwtLWNvbG9yLXdhcm5pbmcKewogIGNvbG9yOiAjRkJDODUwICFpbXBvcnRhbnQ7Cn0KCi5cXC0tYmctd2FybmluZwp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0ZCQzg1MCAhaW1wb3J0YW50Owp9CgouXFwtLWNvbG9yLWVycm9yCnsKICBjb2xvcjogI0VFNjc1RCAhaW1wb3J0YW50Owp9CgouXFwtLWJnLWVycm9yCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUU2NzVEICFpbXBvcnRhbnQ7Cn0KCi5cXC0tY29sb3ItZGFyawp7CiAgY29sb3I6ICM1NDY3NzggIWltcG9ydGFudDsKfQoKLlxcLS1iZy1kYXJrCnsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTQ2Nzc4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tY29sb3ItbGlnaHQKewogIGNvbG9yOiAjRERFNUVFICFpbXBvcnRhbnQ7Cn0KCi5cXC0tYmctbGlnaHQKewogIGJhY2tncm91bmQtY29sb3I6ICNEREU1RUUgIWltcG9ydGFudDsKfQoKLlxcLS1jb2xvci13aGl0ZQp7CiAgY29sb3I6ICNGRkYgIWltcG9ydGFudDsKfQoKLlxcLS1iZy13aGl0ZQp7CiAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRiAhaW1wb3J0YW50Owp9CgouXFwtLWRpc3BsYXktbm9uZQp7CiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9CgouXFwtLWRpc3BsYXktYmxvY2sKewogIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7Cn0KCi5cXC0tZGlzcGxheS1pbmxpbmUKewogIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50Owp9CgouXFwtLWRpc3BsYXktaW5saW5lLWJsb2NrCnsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsKfQoKLlxcLS1kaXNwbGF5LXRhYmxlCnsKICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50Owp9CgouXFwtLWRpc3BsYXktdGFibGUtY2VsbAp7CiAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50Owp9CgouXFwtLWRpc3BsYXktdGFibGUtcm93CnsKICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDsKfQoKLlxcLS1kaXNwbGF5LWZsZXgKewogIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKfQoKLlxcLS1kaXNwbGF5LWlubGluZS1mbGV4CnsKICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50Owp9CgpAbWVkaWEgKG1heC13aWR0aDogMTI4MHB4KQp7CiAgLlxcLS1kaXNwbGF5LXhsLW5vbmUKICB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQogIAogIC5cXC0tZGlzcGxheS14bC1ibG9jawogIHsKICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgfQogIAogIC5cXC0tZGlzcGxheS14bC1pbmxpbmUKICB7CiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsKICB9CiAgCiAgLlxcLS1kaXNwbGF5LXhsLWlubGluZS1ibG9jawogIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50OwogIH0KICAKICAuXFwtLWRpc3BsYXkteGwtdGFibGUKICB7CiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50OwogIH0KICAKICAuXFwtLWRpc3BsYXkteGwtdGFibGUtY2VsbAogIHsKICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsKICB9CiAgCiAgLlxcLS1kaXNwbGF5LXhsLXRhYmxlLXJvdwogIHsKICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50OwogIH0KICAKICAuXFwtLWRpc3BsYXkteGwtZmxleAogIHsKICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKICB9CiAgCiAgLlxcLS1kaXNwbGF5LXhsLWlubGluZS1mbGV4CiAgewogICAgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDsKICB9Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA5NjBweCkKewogIC5cXC0tZGlzcGxheS1sZy1ub25lCiAgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogIH0KICAKICAuXFwtLWRpc3BsYXktbGctYmxvY2sKICB7CiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogIH0KICAKICAuXFwtLWRpc3BsYXktbGctaW5saW5lCiAgewogICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7CiAgfQogIAogIC5cXC0tZGlzcGxheS1sZy1pbmxpbmUtYmxvY2sKICB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsKICB9CiAgCiAgLlxcLS1kaXNwbGF5LWxnLXRhYmxlCiAgewogICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDsKICB9CiAgCiAgLlxcLS1kaXNwbGF5LWxnLXRhYmxlLWNlbGwKICB7CiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7CiAgfQogIAogIC5cXC0tZGlzcGxheS1sZy10YWJsZS1yb3cKICB7CiAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDsKICB9CiAgCiAgLlxcLS1kaXNwbGF5LWxnLWZsZXgKICB7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7CiAgfQogIAogIC5cXC0tZGlzcGxheS1sZy1pbmxpbmUtZmxleAogIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7CiAgfQp9CgpAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpCnsKICAuXFwtLWRpc3BsYXktbWQtbm9uZQogIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICB9CiAgCiAgLlxcLS1kaXNwbGF5LW1kLWJsb2NrCiAgewogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICB9CiAgCiAgLlxcLS1kaXNwbGF5LW1kLWlubGluZQogIHsKICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50OwogIH0KICAKICAuXFwtLWRpc3BsYXktbWQtaW5saW5lLWJsb2NrCiAgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7CiAgfQogIAogIC5cXC0tZGlzcGxheS1tZC10YWJsZQogIHsKICAgIGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7CiAgfQogIAogIC5cXC0tZGlzcGxheS1tZC10YWJsZS1jZWxsCiAgewogICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50OwogIH0KICAKICAuXFwtLWRpc3BsYXktbWQtdGFibGUtcm93CiAgewogICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7CiAgfQogIAogIC5cXC0tZGlzcGxheS1tZC1mbGV4CiAgewogICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OwogIH0KICAKICAuXFwtLWRpc3BsYXktbWQtaW5saW5lLWZsZXgKICB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50OwogIH0KfQoKQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KQp7CiAgLlxcLS1kaXNwbGF5LXNtLW5vbmUKICB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQogIAogIC5cXC0tZGlzcGxheS1zbS1ibG9jawogIHsKICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgfQogIAogIC5cXC0tZGlzcGxheS1zbS1pbmxpbmUKICB7CiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsKICB9CiAgCiAgLlxcLS1kaXNwbGF5LXNtLWlubGluZS1ibG9jawogIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50OwogIH0KICAKICAuXFwtLWRpc3BsYXktc20tdGFibGUKICB7CiAgICBkaXNwbGF5OiB0YWJsZSAhaW1wb3J0YW50OwogIH0KICAKICAuXFwtLWRpc3BsYXktc20tdGFibGUtY2VsbAogIHsKICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDsKICB9CiAgCiAgLlxcLS1kaXNwbGF5LXNtLXRhYmxlLXJvdwogIHsKICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50OwogIH0KICAKICAuXFwtLWRpc3BsYXktc20tZmxleAogIHsKICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKICB9CiAgCiAgLlxcLS1kaXNwbGF5LXNtLWlubGluZS1mbGV4CiAgewogICAgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDsKICB9Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkKewogIC5cXC0tZGlzcGxheS14cy1ub25lCiAgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogIH0KICAKICAuXFwtLWRpc3BsYXkteHMtYmxvY2sKICB7CiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogIH0KICAKICAuXFwtLWRpc3BsYXkteHMtaW5saW5lCiAgewogICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7CiAgfQogIAogIC5cXC0tZGlzcGxheS14cy1pbmxpbmUtYmxvY2sKICB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsKICB9CiAgCiAgLlxcLS1kaXNwbGF5LXhzLXRhYmxlCiAgewogICAgZGlzcGxheTogdGFibGUgIWltcG9ydGFudDsKICB9CiAgCiAgLlxcLS1kaXNwbGF5LXhzLXRhYmxlLWNlbGwKICB7CiAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7CiAgfQogIAogIC5cXC0tZGlzcGxheS14cy10YWJsZS1yb3cKICB7CiAgICBkaXNwbGF5OiB0YWJsZS1yb3cgIWltcG9ydGFudDsKICB9CiAgCiAgLlxcLS1kaXNwbGF5LXhzLWZsZXgKICB7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7CiAgfQogIAogIC5cXC0tZGlzcGxheS14cy1pbmxpbmUtZmxleAogIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7CiAgfQp9CgouXFwtLWZsb2F0LWxlZnQKewogIGZsb2F0OiBsZWZ0ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tZmxvYXQtcmlnaHQKewogIGZsb2F0OiByaWdodCAhaW1wb3J0YW50Owp9CgouXFwtLWZsb2F0LW5vbmUKewogIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiAxMjgwcHgpCnsKICAuXFwtLWZsb2F0LXhsLWxlZnQKICB7CiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50OwogIH0KICAKICAuXFwtLWZsb2F0LXhsLXJpZ2h0CiAgewogICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7CiAgfQogIAogIC5cXC0tZmxvYXQteGwtbm9uZQogIHsKICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7CiAgfQp9CgpAbWVkaWEgKG1heC13aWR0aDogOTYwcHgpCnsKICAuXFwtLWZsb2F0LWxnLWxlZnQKICB7CiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50OwogIH0KICAKICAuXFwtLWZsb2F0LWxnLXJpZ2h0CiAgewogICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7CiAgfQogIAogIC5cXC0tZmxvYXQtbGctbm9uZQogIHsKICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7CiAgfQp9CgpAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpCnsKICAuXFwtLWZsb2F0LW1kLWxlZnQKICB7CiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50OwogIH0KICAKICAuXFwtLWZsb2F0LW1kLXJpZ2h0CiAgewogICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7CiAgfQogIAogIC5cXC0tZmxvYXQtbWQtbm9uZQogIHsKICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7CiAgfQp9CgpAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpCnsKICAuXFwtLWZsb2F0LXNtLWxlZnQKICB7CiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50OwogIH0KICAKICAuXFwtLWZsb2F0LXNtLXJpZ2h0CiAgewogICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7CiAgfQogIAogIC5cXC0tZmxvYXQtc20tbm9uZQogIHsKICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7CiAgfQp9CgpAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpCnsKICAuXFwtLWZsb2F0LXhzLWxlZnQKICB7CiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50OwogIH0KICAKICAuXFwtLWZsb2F0LXhzLXJpZ2h0CiAgewogICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7CiAgfQogIAogIC5cXC0tZmxvYXQteHMtbm9uZQogIHsKICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7CiAgfQp9CgouXFwtLWNsZWFyZml4OjphZnRlcgp7CiAgZGlzcGxheTogYmxvY2s7CiAgY29udGVudDogIiI7CiAgY2xlYXI6IGJvdGg7Cn0KCi5cXC0tbGgtbm9ybWFsCnsKICBsaW5lLWhlaWdodDogMjRweCAhaW1wb3J0YW50Owp9CgouXFwtLWxoLWNvbmRlbnNlZAp7CiAgbGluZS1oZWlnaHQ6IDE4cHggIWltcG9ydGFudDsKfQoKLlxcLS13aWR0aC0wCnsKICB3aWR0aDogMCUgIWltcG9ydGFudDsKfQoKLlxcLS1td2lkdGgtMAp7CiAgbWF4LXdpZHRoOiAwJSAhaW1wb3J0YW50Owp9CgouXFwtLWhlaWdodC0wCnsKICBoZWlnaHQ6IDAlICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbWhlaWdodC0wCnsKICBtYXgtaGVpZ2h0OiAwJSAhaW1wb3J0YW50Owp9CgouXFwtLXdpZHRoLTI1CnsKICB3aWR0aDogMjUlICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbXdpZHRoLTI1CnsKICBtYXgtd2lkdGg6IDI1JSAhaW1wb3J0YW50Owp9CgouXFwtLWhlaWdodC0yNQp7CiAgaGVpZ2h0OiAyNSUgIWltcG9ydGFudDsKfQoKLlxcLS1taGVpZ2h0LTI1CnsKICBtYXgtaGVpZ2h0OiAyNSUgIWltcG9ydGFudDsKfQoKLlxcLS13aWR0aC01MAp7CiAgd2lkdGg6IDUwJSAhaW1wb3J0YW50Owp9CgouXFwtLW13aWR0aC01MAp7CiAgbWF4LXdpZHRoOiA1MCUgIWltcG9ydGFudDsKfQoKLlxcLS1oZWlnaHQtNTAKewogIGhlaWdodDogNTAlICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbWhlaWdodC01MAp7CiAgbWF4LWhlaWdodDogNTAlICFpbXBvcnRhbnQ7Cn0KCi5cXC0td2lkdGgtNzUKewogIHdpZHRoOiA3NSUgIWltcG9ydGFudDsKfQoKLlxcLS1td2lkdGgtNzUKewogIG1heC13aWR0aDogNzUlICFpbXBvcnRhbnQ7Cn0KCi5cXC0taGVpZ2h0LTc1CnsKICBoZWlnaHQ6IDc1JSAhaW1wb3J0YW50Owp9CgouXFwtLW1oZWlnaHQtNzUKewogIG1heC1oZWlnaHQ6IDc1JSAhaW1wb3J0YW50Owp9CgouXFwtLXdpZHRoLTEwMAp7CiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKfQoKLlxcLS1td2lkdGgtMTAwCnsKICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKfQoKLlxcLS1oZWlnaHQtMTAwCnsKICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDsKfQoKLlxcLS1taGVpZ2h0LTEwMAp7CiAgbWF4LWhlaWdodDogMTAwJSAhaW1wb3J0YW50Owp9CgouXFwtLW10LTAKewogIG1hcmdpbi10b3A6IDBweCAhaW1wb3J0YW50Owp9CgouXFwtLW1iLTAKewogIG1hcmdpbi1ib3R0b206IDBweCAhaW1wb3J0YW50Owp9CgouXFwtLW1sLTAKewogIG1hcmdpbi1sZWZ0OiAwcHggIWltcG9ydGFudDsKfQoKLlxcLS1tci0wCnsKICBtYXJnaW4tcmlnaHQ6IDBweCAhaW1wb3J0YW50Owp9CgouXFwtLW14LTAKewogIG1hcmdpbi1sZWZ0OiAwcHggIWltcG9ydGFudDsKICBtYXJnaW4tcmlnaHQ6IDBweCAhaW1wb3J0YW50Owp9CgouXFwtLW15LTAKewogIG1hcmdpbi10b3A6IDBweCAhaW1wb3J0YW50OwogIG1hcmdpbi1ib3R0b206IDBweCAhaW1wb3J0YW50Owp9CgouXFwtLXB0LTAKewogIHBhZGRpbmctdG9wOiAwcHggIWltcG9ydGFudDsKfQoKLlxcLS1wYi0wCnsKICBwYWRkaW5nLWJvdHRvbTogMHB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tcGwtMAp7CiAgcGFkZGluZy1sZWZ0OiAwcHggIWltcG9ydGFudDsKfQoKLlxcLS1wci0wCnsKICBwYWRkaW5nLXJpZ2h0OiAwcHggIWltcG9ydGFudDsKfQoKLlxcLS1weC0wCnsKICBwYWRkaW5nLWxlZnQ6IDBweCAhaW1wb3J0YW50OwogIHBhZGRpbmctcmlnaHQ6IDBweCAhaW1wb3J0YW50Owp9CgouXFwtLXB5LTAKewogIHBhZGRpbmctdG9wOiAwcHggIWltcG9ydGFudDsKICBwYWRkaW5nLWJvdHRvbTogMHB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbXQtMQp7CiAgbWFyZ2luLXRvcDogNXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbWItMQp7CiAgbWFyZ2luLWJvdHRvbTogNXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbWwtMQp7CiAgbWFyZ2luLWxlZnQ6IDVweCAhaW1wb3J0YW50Owp9CgouXFwtLW1yLTEKewogIG1hcmdpbi1yaWdodDogNXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbXgtMQp7CiAgbWFyZ2luLWxlZnQ6IDVweCAhaW1wb3J0YW50OwogIG1hcmdpbi1yaWdodDogNXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbXktMQp7CiAgbWFyZ2luLXRvcDogNXB4ICFpbXBvcnRhbnQ7CiAgbWFyZ2luLWJvdHRvbTogNXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tcHQtMQp7CiAgcGFkZGluZy10b3A6IDVweCAhaW1wb3J0YW50Owp9CgouXFwtLXBiLTEKewogIHBhZGRpbmctYm90dG9tOiA1cHggIWltcG9ydGFudDsKfQoKLlxcLS1wbC0xCnsKICBwYWRkaW5nLWxlZnQ6IDVweCAhaW1wb3J0YW50Owp9CgouXFwtLXByLTEKewogIHBhZGRpbmctcmlnaHQ6IDVweCAhaW1wb3J0YW50Owp9CgouXFwtLXB4LTEKewogIHBhZGRpbmctbGVmdDogNXB4ICFpbXBvcnRhbnQ7CiAgcGFkZGluZy1yaWdodDogNXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tcHktMQp7CiAgcGFkZGluZy10b3A6IDVweCAhaW1wb3J0YW50OwogIHBhZGRpbmctYm90dG9tOiA1cHggIWltcG9ydGFudDsKfQoKLlxcLS1tdC0yCnsKICBtYXJnaW4tdG9wOiAxMHB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbWItMgp7CiAgbWFyZ2luLWJvdHRvbTogMTBweCAhaW1wb3J0YW50Owp9CgouXFwtLW1sLTIKewogIG1hcmdpbi1sZWZ0OiAxMHB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbXItMgp7CiAgbWFyZ2luLXJpZ2h0OiAxMHB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbXgtMgp7CiAgbWFyZ2luLWxlZnQ6IDEwcHggIWltcG9ydGFudDsKICBtYXJnaW4tcmlnaHQ6IDEwcHggIWltcG9ydGFudDsKfQoKLlxcLS1teS0yCnsKICBtYXJnaW4tdG9wOiAxMHB4ICFpbXBvcnRhbnQ7CiAgbWFyZ2luLWJvdHRvbTogMTBweCAhaW1wb3J0YW50Owp9CgouXFwtLXB0LTIKewogIHBhZGRpbmctdG9wOiAxMHB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tcGItMgp7CiAgcGFkZGluZy1ib3R0b206IDEwcHggIWltcG9ydGFudDsKfQoKLlxcLS1wbC0yCnsKICBwYWRkaW5nLWxlZnQ6IDEwcHggIWltcG9ydGFudDsKfQoKLlxcLS1wci0yCnsKICBwYWRkaW5nLXJpZ2h0OiAxMHB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tcHgtMgp7CiAgcGFkZGluZy1sZWZ0OiAxMHB4ICFpbXBvcnRhbnQ7CiAgcGFkZGluZy1yaWdodDogMTBweCAhaW1wb3J0YW50Owp9CgouXFwtLXB5LTIKewogIHBhZGRpbmctdG9wOiAxMHB4ICFpbXBvcnRhbnQ7CiAgcGFkZGluZy1ib3R0b206IDEwcHggIWltcG9ydGFudDsKfQoKLlxcLS1tdC0zCnsKICBtYXJnaW4tdG9wOiAxNXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbWItMwp7CiAgbWFyZ2luLWJvdHRvbTogMTVweCAhaW1wb3J0YW50Owp9CgouXFwtLW1sLTMKewogIG1hcmdpbi1sZWZ0OiAxNXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbXItMwp7CiAgbWFyZ2luLXJpZ2h0OiAxNXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbXgtMwp7CiAgbWFyZ2luLWxlZnQ6IDE1cHggIWltcG9ydGFudDsKICBtYXJnaW4tcmlnaHQ6IDE1cHggIWltcG9ydGFudDsKfQoKLlxcLS1teS0zCnsKICBtYXJnaW4tdG9wOiAxNXB4ICFpbXBvcnRhbnQ7CiAgbWFyZ2luLWJvdHRvbTogMTVweCAhaW1wb3J0YW50Owp9CgouXFwtLXB0LTMKewogIHBhZGRpbmctdG9wOiAxNXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tcGItMwp7CiAgcGFkZGluZy1ib3R0b206IDE1cHggIWltcG9ydGFudDsKfQoKLlxcLS1wbC0zCnsKICBwYWRkaW5nLWxlZnQ6IDE1cHggIWltcG9ydGFudDsKfQoKLlxcLS1wci0zCnsKICBwYWRkaW5nLXJpZ2h0OiAxNXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tcHgtMwp7CiAgcGFkZGluZy1sZWZ0OiAxNXB4ICFpbXBvcnRhbnQ7CiAgcGFkZGluZy1yaWdodDogMTVweCAhaW1wb3J0YW50Owp9CgouXFwtLXB5LTMKewogIHBhZGRpbmctdG9wOiAxNXB4ICFpbXBvcnRhbnQ7CiAgcGFkZGluZy1ib3R0b206IDE1cHggIWltcG9ydGFudDsKfQoKLlxcLS1tdC00CnsKICBtYXJnaW4tdG9wOiAyNXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbWItNAp7CiAgbWFyZ2luLWJvdHRvbTogMjVweCAhaW1wb3J0YW50Owp9CgouXFwtLW1sLTQKewogIG1hcmdpbi1sZWZ0OiAyNXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbXItNAp7CiAgbWFyZ2luLXJpZ2h0OiAyNXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbXgtNAp7CiAgbWFyZ2luLWxlZnQ6IDI1cHggIWltcG9ydGFudDsKICBtYXJnaW4tcmlnaHQ6IDI1cHggIWltcG9ydGFudDsKfQoKLlxcLS1teS00CnsKICBtYXJnaW4tdG9wOiAyNXB4ICFpbXBvcnRhbnQ7CiAgbWFyZ2luLWJvdHRvbTogMjVweCAhaW1wb3J0YW50Owp9CgouXFwtLXB0LTQKewogIHBhZGRpbmctdG9wOiAyNXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tcGItNAp7CiAgcGFkZGluZy1ib3R0b206IDI1cHggIWltcG9ydGFudDsKfQoKLlxcLS1wbC00CnsKICBwYWRkaW5nLWxlZnQ6IDI1cHggIWltcG9ydGFudDsKfQoKLlxcLS1wci00CnsKICBwYWRkaW5nLXJpZ2h0OiAyNXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tcHgtNAp7CiAgcGFkZGluZy1sZWZ0OiAyNXB4ICFpbXBvcnRhbnQ7CiAgcGFkZGluZy1yaWdodDogMjVweCAhaW1wb3J0YW50Owp9CgouXFwtLXB5LTQKewogIHBhZGRpbmctdG9wOiAyNXB4ICFpbXBvcnRhbnQ7CiAgcGFkZGluZy1ib3R0b206IDI1cHggIWltcG9ydGFudDsKfQoKLlxcLS1tdC01CnsKICBtYXJnaW4tdG9wOiA0NXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbWItNQp7CiAgbWFyZ2luLWJvdHRvbTogNDVweCAhaW1wb3J0YW50Owp9CgouXFwtLW1sLTUKewogIG1hcmdpbi1sZWZ0OiA0NXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbXItNQp7CiAgbWFyZ2luLXJpZ2h0OiA0NXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbXgtNQp7CiAgbWFyZ2luLWxlZnQ6IDQ1cHggIWltcG9ydGFudDsKICBtYXJnaW4tcmlnaHQ6IDQ1cHggIWltcG9ydGFudDsKfQoKLlxcLS1teS01CnsKICBtYXJnaW4tdG9wOiA0NXB4ICFpbXBvcnRhbnQ7CiAgbWFyZ2luLWJvdHRvbTogNDVweCAhaW1wb3J0YW50Owp9CgouXFwtLXB0LTUKewogIHBhZGRpbmctdG9wOiA0NXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tcGItNQp7CiAgcGFkZGluZy1ib3R0b206IDQ1cHggIWltcG9ydGFudDsKfQoKLlxcLS1wbC01CnsKICBwYWRkaW5nLWxlZnQ6IDQ1cHggIWltcG9ydGFudDsKfQoKLlxcLS1wci01CnsKICBwYWRkaW5nLXJpZ2h0OiA0NXB4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tcHgtNQp7CiAgcGFkZGluZy1sZWZ0OiA0NXB4ICFpbXBvcnRhbnQ7CiAgcGFkZGluZy1yaWdodDogNDVweCAhaW1wb3J0YW50Owp9CgouXFwtLXB5LTUKewogIHBhZGRpbmctdG9wOiA0NXB4ICFpbXBvcnRhbnQ7CiAgcGFkZGluZy1ib3R0b206IDQ1cHggIWltcG9ydGFudDsKfQoKLlxcLS1tdC1hdXRvCnsKICBtYXJnaW4tdG9wOiBhdXRvICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbWItYXV0bwp7CiAgbWFyZ2luLWJvdHRvbTogYXV0byAhaW1wb3J0YW50Owp9CgouXFwtLW1sLWF1dG8KewogIG1hcmdpbi1sZWZ0OiBhdXRvICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbXItYXV0bwp7CiAgbWFyZ2luLXJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7Cn0KCi5cXC0tbXgtYXV0bwp7CiAgbWFyZ2luLWxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsKfQoKLlxcLS1teS1hdXRvCnsKICBtYXJnaW4tdG9wOiBhdXRvICFpbXBvcnRhbnQ7CiAgbWFyZ2luLWJvdHRvbTogYXV0byAhaW1wb3J0YW50Owp9CgouXFwtLXRleHQtanVzdGlmeQp7CiAgdGV4dC1hbGlnbjoganVzdGlmeSAhaW1wb3J0YW50Owp9CgouXFwtLXRleHQtbGVmdAp7CiAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50Owp9CgouXFwtLXRleHQtY2VudGVyCnsKICB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsKfQoKLlxcLS10ZXh0LXJpZ2h0CnsKICB0ZXh0LWFsaWduOiByaWdodCAhaW1wb3J0YW50Owp9CgouXFwtLXRleHQtdXBwZXJjYXNlCnsKICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlICFpbXBvcnRhbnQ7Cn0KCi5cXC0tdGV4dC1sb3dlcmNhc2UKewogIHRleHQtdHJhbnNmb3JtOiBsb3dlcmNhc2UgIWltcG9ydGFudDsKfQoKLlxcLS10ZXh0LWNhcGl0YWxpemUKewogIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplICFpbXBvcnRhbnQ7Cn0KCi5cXC0tdGV4dC1ib2xkCnsKICBmb250LXdlaWdodDogNzAwICFpbXBvcnRhbnQ7Cn0KCi5cXC0tdGV4dC1pdGFsaWMKewogIGZvbnQtc3R5bGU6IGl0YWxpYyAhaW1wb3J0YW50Owp9CgouXFwtLXRleHQtbm9ybWFsCnsKICBmb250LXdlaWdodDogNDAwICFpbXBvcnRhbnQ7Cn0KCi5cXC0tdGV4dC1zbWFsbAp7CiAgZm9udC1zaXplOiAxM3B4ICFpbXBvcnRhbnQ7Cn0KCi5cXC0tcm91bmRlZAp7CiAgYm9yZGVyLXJhZGl1czogNXB4Owp9]]></data>
	</file>
	<file>
	  <filename>/css/backslash/bs/lib/grid-utils.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LlxcLWdyaWQtdSAgICAgICAgICAgIHsgZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwOyB9Ci5cXC1ncmlkLXUuXC10b3AgICAgICB7IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OyB9Ci5cXC1ncmlkLXUuXC1taWRkbGUgICB7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IH0KLlxcLWdyaWQtdS5cLWJvdHRvbSAgIHsgYWxpZ24taXRlbXM6IGZsZXgtZW5kOyB9Ci5cXC1ncmlkLXUuXC1zdHJldGNoICB7IGFsaWduLWl0ZW1zOiBzdHJldGNoOyB9Ci5cXC1ncmlkLXUuXC1iYXNlbGluZSB7IGFsaWduLWl0ZW1zOiBiYXNlbGluZTsgfQouXFwtZ3JpZC11LlwtbGVmdCAgICAgeyBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IH0KLlxcLWdyaWQtdS5cLWNlbnRlciAgIHsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH0KLlxcLWdyaWQtdS5cLXJpZ2h0ICAgIHsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsgfQouXFwtZ3JpZC11LlwtYmV0d2VlbiAgeyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IH0KLlxcLWdyaWQtdS5cLWFyb3VuZCAgIHsganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7IH0KCi5cXC1jZWxsLXUgICAgICAgICAgICB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGZsZXgtc2hyaW5rOiAwOyB9Ci5cXC1jZWxsLXUuXC1maWxsICAgICB7IHdpZHRoOiAwOyBtaW4td2lkdGg6IDA7IGZsZXgtZ3JvdzogMTsgfQouXFwtY2VsbC11LlwtMSAgICAgICAgeyB3aWR0aDogY2FsYygxMDAlICogMSAvIDEyKTsgfQouXFwtY2VsbC11LlwtMiAgICAgICAgeyB3aWR0aDogY2FsYygxMDAlICogMiAvIDEyKTsgfQouXFwtY2VsbC11LlwtMyAgICAgICAgeyB3aWR0aDogY2FsYygxMDAlICogMyAvIDEyKTsgfQouXFwtY2VsbC11LlwtNCAgICAgICAgeyB3aWR0aDogY2FsYygxMDAlICogNCAvIDEyKTsgfQouXFwtY2VsbC11LlwtNSAgICAgICAgeyB3aWR0aDogY2FsYygxMDAlICogNSAvIDEyKTsgfQouXFwtY2VsbC11LlwtNiAgICAgICAgeyB3aWR0aDogY2FsYygxMDAlICogNiAvIDEyKTsgfQouXFwtY2VsbC11LlwtNyAgICAgICAgeyB3aWR0aDogY2FsYygxMDAlICogNyAvIDEyKTsgfQouXFwtY2VsbC11LlwtOCAgICAgICAgeyB3aWR0aDogY2FsYygxMDAlICogOCAvIDEyKTsgfQouXFwtY2VsbC11LlwtOSAgICAgICAgeyB3aWR0aDogY2FsYygxMDAlICogOSAvIDEyKTsgfQouXFwtY2VsbC11LlwtMTAgICAgICAgeyB3aWR0aDogY2FsYygxMDAlICogMTAgLyAxMik7IH0KLlxcLWNlbGwtdS5cLTExICAgICAgIHsgd2lkdGg6IGNhbGMoMTAwJSAqIDExIC8gMTIpOyB9Ci5cXC1jZWxsLXUuXC0xMiAgICAgICB7IHdpZHRoOiAxMDAlOyB9Cg==]]></data>
	</file>
	<file>
	  <filename>/css/backslash/bs/lib/grid.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LlxcLWNvbCB7CiAgZmxvYXQ6IGxlZnQ7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKLlxcLWNvbC1yaWdodCB7CiAgZmxvYXQ6IHJpZ2h0OwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KCi5cXC1jb2wtMSB7CiAgd2lkdGg6IGNhbGMoMS8xMiAqIDEwMCUpOwp9CgouXFwtY29sLTIgewogIHdpZHRoOiBjYWxjKDIvMTIgKiAxMDAlKTsKfQoKLlxcLWNvbC0zIHsKICB3aWR0aDogY2FsYygzLzEyICogMTAwJSk7Cn0KCi5cXC1jb2wtNCB7CiAgd2lkdGg6IGNhbGMoNC8xMiAqIDEwMCUpOwp9CgouXFwtY29sLTUgewogIHdpZHRoOiBjYWxjKDUvMTIgKiAxMDAlKTsKfQoKLlxcLWNvbC02IHsKICB3aWR0aDogY2FsYyg2LzEyICogMTAwJSk7Cn0KCi5cXC1jb2wtNyB7CiAgd2lkdGg6IGNhbGMoNy8xMiAqIDEwMCUpOwp9CgouXFwtY29sLTggewogIHdpZHRoOiBjYWxjKDgvMTIgKiAxMDAlKTsKfQoKLlxcLWNvbC05IHsKICB3aWR0aDogY2FsYyg5LzEyICogMTAwJSk7Cn0KCi5cXC1jb2wtMTAgewogIHdpZHRoOiBjYWxjKDEwLzEyICogMTAwJSk7Cn0KCi5cXC1jb2wtMTEgewogIHdpZHRoOiBjYWxjKDExLzEyICogMTAwJSk7Cn0KCi5cXC1jb2wtMTIgewogIHdpZHRoOiAxMDAlOwp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/css/backslash/bs/lib/helpers.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LlxcLWNvbnRhaW5lciwgLlxcLXBhbmVsDQp7DQogIHBhZGRpbmc6IDAuMDFlbSAxNnB4DQp9DQoNCi5cXC1wYW5lbA0Kew0KICBtYXJnaW4tdG9wOiAxNnB4Ow0KICBtYXJnaW4tYm90dG9tOiAxNnB4DQp9DQoNCi5cXC1jb250YWluZXI6YWZ0ZXIsIC5cXC1jb250YWluZXI6YmVmb3JlLCAuXFwtcGFuZWw6YWZ0ZXIsIC5cXC1wYW5lbDpiZWZvcmUNCnsNCiAgY29udGVudDogIiI7DQogIGRpc3BsYXk6IHRhYmxlOw0KICBjbGVhcjogYm90aA0KfQ0KDQouXFwtbGVmdA0Kew0KICBmbG9hdDogbGVmdDsNCn0NCg0KLlxcLXJpZ2h0DQp7DQogIGZsb2F0OiByaWdodDsNCn0NCg0KLlxcLWNsZWFyZml4OmJlZm9yZSwgLlxcLWNsZWFyZml4OmFmdGVyDQp7DQogIGNvbnRlbnQ6ICIgIjsNCiAgZGlzcGxheTogdGFibGU7DQp9DQoNCi5cXC1jbGVhcmZpeDphZnRlcg0Kew0KICBjbGVhcjogYm90aDsNCn0NCg0KLlxcLXppbmRleC0xDQp7DQogIHotaW5kZXg6IDE7DQp9DQoNCi5cXC16aW5kZXgtMg0Kew0KICB6LWluZGV4OiAyOw0KfQ0KDQouXFwtemluZGV4LTMNCnsNCiAgei1pbmRleDogMzsNCn0NCg0KLlxcLXppbmRleC00DQp7DQogIHotaW5kZXg6IDQ7DQp9DQoNCi5cXC1maXhlZA0Kew0KICBwb3NpdGlvbjogZml4ZWQ7DQp9DQoNCi5cXC1yZWxhdGl2ZQ0Kew0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQp9DQoNCi5cXC1hYnNvbHV0ZQ0Kew0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQp9DQoNCi5cXC10ZXh0LWxlZnQNCnsNCiAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KLlxcLXRleHQtcmlnaHQNCnsNCiAgdGV4dC1hbGlnbjogcmlnaHQ7DQp9DQoNCi5cXC10ZXh0LWNlbnRlcg0Kew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCi5cXC10ZXh0LWp1c3QNCnsNCiAgdGV4dC1hbGlnbjoganVzdGlmeTsNCn0NCg0KLlxcLWFsaWduLXRvcA0Kew0KICB2ZXJ0aWNhbC1hbGlnbjogdG9wOw0KfQ0KDQouXFwtYWxpZ24tYm90dG9tDQp7DQogIHZlcnRpY2FsLWFsaWduOiBib3R0b207DQp9DQoNCi5cXC1hbGlnbi1taWRkbGUNCnsNCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCn0NCg0KLlxcLWFsaWduLWJhc2VsaW5lDQp7DQogIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsNCn0NCg0KLlxcLWZpdA0Kew0KICBtYXgtd2lkdGg6IDEwMCU7DQp9DQoNCi5cXC1oYWxmLXdpZHRoDQp7DQogIHdpZHRoOiA1MCU7DQp9DQoNCi5cXC1mdWxsLXdpZHRoDQp7DQogIHdpZHRoOiAxMDAlOw0KfQ0KDQouXFwtZnVsbC1oZWlnaHQNCnsNCiAgaGVpZ2h0OiAxMDAlOw0KfQ0KDQouXFwtaW5saW5lDQp7DQogIGRpc3BsYXk6IGlubGluZTsNCn0NCg0KLlxcLWJsb2NrDQp7DQogIGRpc3BsYXk6IGJsb2NrOw0KfQ0KDQouXFwtaW5saW5lLWJsb2NrDQp7DQogIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCn0NCg0KLlxcLWhpZGRlbg0Kew0KICBkaXNwbGF5OiBub25lOw0KfQ0KDQouXFwtYy1oYW5kIHsNCiAgY3Vyc29yOiBwb2ludGVyOw0KfQ0KDQouXFwtYy1tb3ZlIHsNCiAgY3Vyc29yOiBtb3ZlOw0KfQ0KDQouXFwtYy16b29tLWluIHsNCiAgY3Vyc29yOiB6b29tLWluOw0KfQ0KDQouXFwtYy16b29tLW91dCB7DQogIGN1cnNvcjogem9vbS1vdXQ7DQp9DQoNCi5cXC1jLW5vdC1hbGxvd2VkIHsNCiAgY3Vyc29yOiBub3QtYWxsb3dlZDsNCn0NCg0KLlxcLWMtYXV0byB7DQogIGN1cnNvcjogYXV0bzsNCn0NCg0KLyoud2hpdGUqLw0KLyp7Ki8NCi8qICBjb2xvcjogI0ZGRjsqLw0KLyp9Ki8NCg0KLyouZ3JheSovDQovKnsqLw0KLyogIGNvbG9yOiAjMkMzRTUwOyovDQovKn0qLw0KDQovKi5kYXJrLWdyYXkqLw0KLyp7Ki8NCi8qICBjb2xvcjogIzk1QTVBNjsqLw0KLyp9Ki8NCg0KLyoubm90aWNlKi8NCi8qeyovDQovKiAgY29sb3I6ICMzNDk4REI7Ki8NCi8qfSovDQoNCi8qLnN1Y2Nlc3MqLw0KLyp7Ki8NCi8qICBjb2xvcjogIzFBQkM5QzsqLw0KLyp9Ki8NCg0KLyouYWxlcnQqLw0KLyp7Ki8NCi8qICBjb2xvcjogI0U3NEMzQzsqLw0KLyp9Ki8NCg0KLyoud2hpdGUtYmcqLw0KLyp7Ki8NCi8qICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGOyovDQovKn0qLw0KDQovKi5ncmF5LWJnKi8NCi8qeyovDQovKiAgYmFja2dyb3VuZC1jb2xvcjogIzJDM0U1MDsqLw0KLyp9Ki8NCg0KLyouZGFyay1ncmF5LWJnKi8NCi8qeyovDQovKiAgYmFja2dyb3VuZC1jb2xvcjogIzk1QTVBNjsqLw0KLyp9Ki8NCg0KLyoubm90aWNlLWJnKi8NCi8qeyovDQovKiAgYmFja2dyb3VuZC1jb2xvcjogIzM0OThEQjsqLw0KLyp9Ki8NCg0KLyouc3VjY2Vzcy1iZyovDQovKnsqLw0KLyogIGJhY2tncm91bmQtY29sb3I6ICMxQUJDOUM7Ki8NCi8qfSovDQoNCi8qLmFsZXJ0LWJnKi8NCi8qeyovDQovKiAgYmFja2dyb3VuZC1jb2xvcjogI0U3NEMzQzsqLw0KLyp9Ki8NCg0KLlxcLWJvbGQNCnsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQp9DQoNCi5cXC1yZWd1bGFyDQp7DQogIGZvbnQtd2VpZ2h0OiBub3JtYWw7DQp9DQoNCi5cXC1pdGFsaWMNCnsNCiAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQouXFwtdHJ1bmNhdGUNCnsNCiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsNCiAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7DQp9DQoNCi5cXC1icmVhay13b3JkDQp7DQogIHdvcmQtd3JhcDogYnJlYWstd29yZDsNCn0NCg0KLlxcLW5vLXdyYXANCnsNCiAgd2hpdGUtc3BhY2U6IG5vd3JhcCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbm8tYnVsbGV0cywgLlxcLWxpc3QtYmFyZQ0Kew0KICBsaXN0LXN0eWxlOiBub25lOw0KfQ0KDQouXFwtYnVsbGV0cy1pbnNpZGUNCnsNCiAgbGlzdC1zdHlsZTogaW5zaWRlOw0KfQ0KDQouXFwtbGlzdC1iYXJlDQp7DQogIG1hcmdpbjogMDsNCiAgcGFkZGluZzogMDsNCn0NCg0KLlxcLWJvcmRlci1hbGwNCnsNCiAgYm9yZGVyOiAxcHggc29saWQgI0VDRjBGMTsNCn0NCg0KLlxcLWJvcmRlci10b3ANCnsNCiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNFQ0YwRjE7DQp9DQoNCi5cXC1ib3JkZXItYm90dG9tDQp7DQogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRUNGMEYxOw0KfQ0KDQouXFwtYm9yZGVyLXJpZ2h0DQp7DQogIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNFQ0YwRjE7DQp9DQoNCi5cXC1ib3JkZXItbGVmdA0Kew0KICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNFQ0YwRjE7DQp9DQoNCi5cXC1ib3JkZXItYWxsLS1kYXJrDQp7DQogIGJvcmRlcjogMXB4IHNvbGlkICNCREMzQzc7DQp9DQoNCi5cXC1ib3JkZXItdG9wLS1kYXJrDQp7DQogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjQkRDM0M3Ow0KfQ0KDQouXFwtYm9yZGVyLWJvdHRvbS0tZGFyaw0Kew0KICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JEQzNDNzsNCn0NCg0KLlxcLWJvcmRlci1yaWdodC0tZGFyaw0Kew0KICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjQkRDM0M3Ow0KfQ0KDQouXFwtYm9yZGVyLWxlZnQtLWRhcmsNCnsNCiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjQkRDM0M3Ow0KfQ0KDQovKg0KICogSGlkZSB2aXN1YWxseSBhbmQgZnJvbSBzY3JlZW4gcmVhZGVyczoNCiAqIGh0dHA6Ly9qdWljeXN0dWRpby5jb20vYXJ0aWNsZS9zY3JlZW4tcmVhZGVycy1kaXNwbGF5LW5vbmUucGhwDQogKi8NCi5cXC1oaWRkZW4NCnsNCiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Ow0KICB2aXNpYmlsaXR5OiBoaWRkZW47DQp9DQoNCi8qDQogKiBIaWRlIG9ubHkgdmlzdWFsbHksIGJ1dCBoYXZlIGl0IGF2YWlsYWJsZSBmb3Igc2NyZWVuIHJlYWRlcnM6DQogKiBodHRwOi8vc25vb2suY2EvYXJjaGl2ZXMvaHRtbF9hbmRfY3NzL2hpZGluZy1jb250ZW50LWZvci1hY2Nlc3NpYmlsaXR5DQogKi8NCi5cXC12aXN1YWxseWhpZGRlbg0Kew0KICBib3JkZXI6IDA7DQogIGNsaXA6IHJlY3QoMCAwIDAgMCk7DQogIGhlaWdodDogMXB4Ow0KICBtYXJnaW46IC0xcHg7DQogIG92ZXJmbG93OiBoaWRkZW47DQogIHBhZGRpbmc6IDA7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgd2lkdGg6IDFweDsNCn0NCg0KLyoNCiAqIEV4dGVuZHMgdGhlIC52aXN1YWxseWhpZGRlbiBjbGFzcyB0byBhbGxvdyB0aGUgZWxlbWVudA0KICogdG8gYmUgZm9jdXNhYmxlIHdoZW4gbmF2aWdhdGVkIHRvIHZpYSB0aGUga2V5Ym9hcmQ6DQogKiBodHRwczovL3d3dy5kcnVwYWwub3JnL25vZGUvODk3NjM4DQogKi8NCi5cXC12aXN1YWxseWhpZGRlbi5mb2N1c2FibGU6YWN0aXZlLA0KLlxcLXZpc3VhbGx5aGlkZGVuLmZvY3VzYWJsZTpmb2N1cw0Kew0KICBjbGlwOiBhdXRvOw0KICBoZWlnaHQ6IGF1dG87DQogIG1hcmdpbjogMDsNCiAgb3ZlcmZsb3c6IHZpc2libGU7DQogIHBvc2l0aW9uOiBzdGF0aWM7DQogIHdpZHRoOiBhdXRvOw0KfQ0KDQovKg0KICogSGlkZSB2aXN1YWxseSBhbmQgZnJvbSBzY3JlZW4gcmVhZGVycywgYnV0IG1haW50YWluIGxheW91dA0KICovDQouXFwtaW52aXNpYmxlDQp7DQogIHZpc2liaWxpdHk6IGhpZGRlbjsNCn0NCg0KLlxcLXJhZGl1cw0Kew0KICBib3JkZXItcmFkaXVzOiAzcHg7DQp9DQoNCi5cXC1yYWRpdXMtdG9wDQp7DQogIGJvcmRlci1yYWRpdXM6IDNweCAzcHggMCAwOw0KfQ0KDQouXFwtcmFkaXVzLXJpZ2h0DQp7DQogIGJvcmRlci1yYWRpdXM6IDAgM3B4IDNweCAwOw0KfQ0KDQouXFwtcmFkaXVzLWJvdHRvbQ0Kew0KICBib3JkZXItcmFkaXVzOiAwIDAgM3B4IDNweDsNCn0NCg0KLlxcLXJhZGl1cy1sZWZ0DQp7DQogIGJvcmRlci1yYWRpdXM6IDNweCAwIDAgM3B4Ow0KfQ0KDQouXFwtbWFyZ2luLXRvcC1ub25lDQp7DQogIG1hcmdpbi10b3A6IDA7DQp9DQoNCi5cXC1tYXJnaW4tdG9wLXF1YXJ0ZXINCnsNCiAgbWFyZ2luLXRvcDogMC4yNWVtOw0KfQ0KDQouXFwtbWFyZ2luLXRvcC1oYWxmDQp7DQogIG1hcmdpbi10b3A6IDAuNWVtOw0KfQ0KDQouXFwtbWFyZ2luLXRvcC1vbmUNCnsNCiAgbWFyZ2luLXRvcDogMWVtOw0KfQ0KDQouXFwtbWFyZ2luLXRvcC10d28NCnsNCiAgbWFyZ2luLXRvcDogMmVtOw0KfQ0KDQouXFwtbWFyZ2luLXRvcC10aHJlZQ0Kew0KICBtYXJnaW4tdG9wOiAzZW07DQp9DQoNCi5cXC1tYXJnaW4tdG9wLWZvdXINCnsNCiAgbWFyZ2luLXRvcDogNGVtOw0KfQ0KDQouXFwtbWFyZ2luLWJvdHRvbS1ub25lDQp7DQogIG1hcmdpbi1ib3R0b206IDA7DQp9DQoNCi5cXC1tYXJnaW4tYm90dG9tLXF1YXJ0ZXINCnsNCiAgbWFyZ2luLWJvdHRvbTogMC4yNWVtOw0KfQ0KDQouXFwtbWFyZ2luLWJvdHRvbS1oYWxmDQp7DQogIG1hcmdpbi1ib3R0b206IDAuNWVtOw0KfQ0KDQouXFwtbWFyZ2luLWJvdHRvbS1vbmUNCnsNCiAgbWFyZ2luLWJvdHRvbTogMWVtOw0KfQ0KDQouXFwtbWFyZ2luLWJvdHRvbS10d28NCnsNCiAgbWFyZ2luLWJvdHRvbTogMmVtOw0KfQ0KDQouXFwtbWFyZ2luLWJvdHRvbS10aHJlZQ0Kew0KICBtYXJnaW4tYm90dG9tOiAzZW07DQp9DQoNCi5cXC1tYXJnaW4tYm90dG9tLWZvdXINCnsNCiAgbWFyZ2luLWJvdHRvbTogNGVtOw0KfQ0KDQouXFwtbWFyZ2luLXJpZ2h0LW5vbmUNCnsNCiAgbWFyZ2luLXJpZ2h0OiAwOw0KfQ0KDQouXFwtbWFyZ2luLXJpZ2h0LXF1YXJ0ZXINCnsNCiAgbWFyZ2luLXJpZ2h0OiAwLjI1ZW07DQp9DQoNCi5cXC1tYXJnaW4tcmlnaHQtaGFsZg0Kew0KICBtYXJnaW4tcmlnaHQ6IDAuNWVtOw0KfQ0KDQouXFwtbWFyZ2luLXJpZ2h0LW9uZQ0Kew0KICBtYXJnaW4tcmlnaHQ6IDFlbTsNCn0NCg0KLlxcLW1hcmdpbi1yaWdodC10d28NCnsNCiAgbWFyZ2luLXJpZ2h0OiAyZW07DQp9DQoNCi5cXC1tYXJnaW4tcmlnaHQtdGhyZWUNCnsNCiAgbWFyZ2luLXJpZ2h0OiAzZW07DQp9DQoNCi5cXC1tYXJnaW4tcmlnaHQtZm91cg0Kew0KICBtYXJnaW4tcmlnaHQ6IDRlbTsNCn0NCg0KLlxcLW1hcmdpbi1sZWZ0LW5vbmUNCnsNCiAgbWFyZ2luLWxlZnQ6IDA7DQp9DQoNCi5cXC1tYXJnaW4tbGVmdC1xdWFydGVyDQp7DQogIG1hcmdpbi1sZWZ0OiAwLjI1ZW07DQp9DQoNCi5cXC1tYXJnaW4tbGVmdC1oYWxmDQp7DQogIG1hcmdpbi1sZWZ0OiAwLjVlbTsNCn0NCg0KLlxcLW1hcmdpbi1sZWZ0LW9uZQ0Kew0KICBtYXJnaW4tbGVmdDogMWVtOw0KfQ0KDQouXFwtbWFyZ2luLWxlZnQtdHdvDQp7DQogIG1hcmdpbi1sZWZ0OiAyZW07DQp9DQoNCi5cXC1tYXJnaW4tbGVmdC10aHJlZQ0Kew0KICBtYXJnaW4tbGVmdDogM2VtOw0KfQ0KDQouXFwtbWFyZ2luLWxlZnQtZm91cg0Kew0KICBtYXJnaW4tbGVmdDogNGVtOw0KfQ0KDQouXFwtbWFyZ2luLW5vbmUNCnsNCiAgbWFyZ2luOiAwOw0KfQ0KDQouXFwtbWFyZ2luLXF1YXJ0ZXINCnsNCiAgbWFyZ2luOiAwLjI1ZW07DQp9DQoNCi5cXC1tYXJnaW4taGFsZg0Kew0KICBtYXJnaW46IDAuNWVtOw0KfQ0KDQouXFwtbWFyZ2luLW9uZQ0Kew0KICBtYXJnaW46IDFlbTsNCn0NCg0KLlxcLW1hcmdpbi10d28NCnsNCiAgbWFyZ2luOiAyZW07DQp9DQoNCi5cXC1tYXJnaW4tdGhyZWUNCnsNCiAgbWFyZ2luOiAzZW07DQp9DQoNCi5cXC1tYXJnaW4tZm91cg0Kew0KICBtYXJnaW46IDRlbTsNCn0NCg0KLlxcLXBhZGRpbmctdG9wLW5vbmUNCnsNCiAgcGFkZGluZy10b3A6IDA7DQp9DQoNCi5cXC1wYWRkaW5nLXRvcC1xdWFydGVyDQp7DQogIHBhZGRpbmctdG9wOiAwLjI1ZW07DQp9DQoNCi5cXC1wYWRkaW5nLXRvcC1oYWx2ZQ0Kew0KICBwYWRkaW5nLXRvcDogMC41ZW07DQp9DQoNCi5cXC1wYWRkaW5nLXRvcC1vbmUNCnsNCiAgcGFkZGluZy10b3A6IDFlbTsNCn0NCg0KLlxcLXBhZGRpbmctdG9wLXR3bw0Kew0KICBwYWRkaW5nLXRvcDogMmVtOw0KfQ0KDQouXFwtcGFkZGluZy10b3AtdGhyZWUNCnsNCiAgcGFkZGluZy10b3A6IDNlbTsNCn0NCg0KLlxcLXBhZGRpbmctdG9wLWZvdXINCnsNCiAgcGFkZGluZy10b3A6IDRlbTsNCn0NCg0KLlxcLXBhZGRpbmctYm90dG9tLW5vbmUNCnsNCiAgcGFkZGluZy1ib3R0b206IDA7DQp9DQoNCi5cXC1wYWRkaW5nLWJvdHRvbS1xdWFydGVyDQp7DQogIHBhZGRpbmctYm90dG9tOiAwLjI1ZW07DQp9DQoNCi5cXC1wYWRkaW5nLWJvdHRvbS1oYWx2ZQ0Kew0KICBwYWRkaW5nLWJvdHRvbTogMC41ZW07DQp9DQoNCi5cXC1wYWRkaW5nLWJvdHRvbS1vbmUNCnsNCiAgcGFkZGluZy1ib3R0b206IDFlbTsNCn0NCg0KLlxcLXBhZGRpbmctYm90dG9tLXR3bw0Kew0KICBwYWRkaW5nLWJvdHRvbTogMmVtOw0KfQ0KDQouXFwtcGFkZGluZy1ib3R0b20tdGhyZWUNCnsNCiAgcGFkZGluZy1ib3R0b206IDNlbTsNCn0NCg0KLlxcLXBhZGRpbmctYm90dG9tLWZvdXINCnsNCiAgcGFkZGluZy1ib3R0b206IDRlbTsNCn0NCg0KLlxcLXBhZGRpbmctcmlnaHQtbm9uZQ0Kew0KICBwYWRkaW5nLXJpZ2h0OiAwOw0KfQ0KDQouXFwtcGFkZGluZy1yaWdodC1xdWFydGVyDQp7DQogIHBhZGRpbmctcmlnaHQ6IDAuMjVlbTsNCn0NCg0KLlxcLXBhZGRpbmctcmlnaHQtaGFsdmUNCnsNCiAgcGFkZGluZy1yaWdodDogMC41ZW07DQp9DQoNCi5cXC1wYWRkaW5nLXJpZ2h0LW9uZQ0Kew0KICBwYWRkaW5nLXJpZ2h0OiAxZW07DQp9DQoNCi5cXC1wYWRkaW5nLXJpZ2h0LXR3bw0Kew0KICBwYWRkaW5nLXJpZ2h0OiAyZW07DQp9DQoNCi5cXC1wYWRkaW5nLXJpZ2h0LXRocmVlDQp7DQogIHBhZGRpbmctcmlnaHQ6IDNlbTsNCn0NCg0KLlxcLXBhZGRpbmctcmlnaHQtZm91cg0Kew0KICBwYWRkaW5nLXJpZ2h0OiA0ZW07DQp9DQoNCi5cXC1wYWRkaW5nLWxlZnQtbm9uZQ0Kew0KICBwYWRkaW5nLWxlZnQ6IDA7DQp9DQoNCi5cXC1wYWRkaW5nLWxlZnQtcXVhcnRlcg0Kew0KICBwYWRkaW5nLWxlZnQ6IDAuMjVlbTsNCn0NCg0KLlxcLXBhZGRpbmctbGVmdC1oYWx2ZQ0Kew0KICBwYWRkaW5nLWxlZnQ6IDAuNWVtOw0KfQ0KDQouXFwtcGFkZGluZy1sZWZ0LW9uZQ0Kew0KICBwYWRkaW5nLWxlZnQ6IDFlbTsNCn0NCg0KLlxcLXBhZGRpbmctbGVmdC10d28NCnsNCiAgcGFkZGluZy1sZWZ0OiAyZW07DQp9DQoNCi5cXC1wYWRkaW5nLWxlZnQtdGhyZWUNCnsNCiAgcGFkZGluZy1sZWZ0OiAzZW07DQp9DQoNCi5cXC1wYWRkaW5nLWxlZnQtZm91cg0Kew0KICBwYWRkaW5nLWxlZnQ6IDRlbTsNCn0NCg0KLlxcLXBhZGRpbmctbm9uZQ0Kew0KICBwYWRkaW5nOiAwOw0KfQ0KDQouXFwtcGFkZGluZy1xdWFydGVyDQp7DQogIHBhZGRpbmc6IDAuMjVlbTsNCn0NCg0KLlxcLXBhZGRpbmctaGFsdmUNCnsNCiAgcGFkZGluZzogMC41ZW07DQp9DQoNCi5cXC1wYWRkaW5nLW9uZQ0Kew0KICBwYWRkaW5nOiAxZW07DQp9DQoNCi5cXC1wYWRkaW5nLXR3bw0Kew0KICBwYWRkaW5nOiAyZW07DQp9DQoNCi5cXC1wYWRkaW5nLXRocmVlDQp7DQogIHBhZGRpbmc6IDNlbTsNCn0NCg0KLlxcLXBhZGRpbmctZm91cg0Kew0KICBwYWRkaW5nOiA0ZW07DQp9DQoNCg0KLlxcLXNob3cteHMsDQouXFwtc2hvdy1zbSwNCi5cXC1zaG93LW1kLA0KLlxcLXNob3ctbGcsDQouXFwtc2hvdy14bCB7DQogIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsNCn0NCg0KQG1lZGlhIChtYXgtd2lkdGg6IDEyODBweCkgew0KICAuXFwtaGlkZS14bCB7DQogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Ow0KICB9DQogIC5cXC1zaG93LXhsIHsNCiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50Ow0KICB9DQp9DQoNCkBtZWRpYSAobWF4LXdpZHRoOiA5NjBweCkgew0KICAuXFwtaGlkZS1sZyB7DQogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Ow0KICB9DQogIC5cXC1zaG93LWxnIHsNCiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50Ow0KICB9DQp9DQoNCkBtZWRpYSAobWF4LXdpZHRoOiA4NDBweCkgew0KICAuXFwtaGlkZS1tZCB7DQogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Ow0KICB9DQogIC5cXC1zaG93LW1kIHsNCiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50Ow0KICB9DQp9DQoNCkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkgew0KICAuXFwtaGlkZS1zbSB7DQogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Ow0KICB9DQogIC5cXC1zaG93LXNtIHsNCiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50Ow0KICB9DQp9DQoNCkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkgew0KICAuXFwtaGlkZS14cyB7DQogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Ow0KICB9DQogIC5cXC1zaG93LXhzIHsNCiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50Ow0KICB9DQp9]]></data>
	</file>
	<file>
	  <filename>/css/backslash/bs/lib/helpers.min.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmxlZnR7ZmxvYXQ6bGVmdH0ucmlnaHR7ZmxvYXQ6cmlnaHR9LmNsZWFyZml4OmFmdGVyLC5jbGVhcmZpeDpiZWZvcmV7Y29udGVudDoiICI7ZGlzcGxheTp0YWJsZX0uY2xlYXJmaXg6YWZ0ZXJ7Y2xlYXI6Ym90aH0uemluZGV4LTF7ei1pbmRleDoxfS56aW5kZXgtMnt6LWluZGV4OjJ9LnppbmRleC0ze3otaW5kZXg6M30uemluZGV4LTR7ei1pbmRleDo0fS5maXhlZHtwb3NpdGlvbjpmaXhlZH0ucmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LmFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS50ZXh0LWp1c3R7dGV4dC1hbGlnbjpqdXN0aWZ5fS5hbGlnbi10b3B7dmVydGljYWwtYWxpZ246dG9wfS5hbGlnbi1ib3R0b217dmVydGljYWwtYWxpZ246Ym90dG9tfS5hbGlnbi1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfS5hbGlnbi1iYXNlbGluZXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX0uZml0e21heC13aWR0aDoxMDAlfS5oYWxmLXdpZHRoe3dpZHRoOjUwJX0uZnVsbC13aWR0aHt3aWR0aDoxMDAlfS5mdWxsLWhlaWdodHtoZWlnaHQ6MTAwJX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmhpZGRlbntkaXNwbGF5Om5vbmV9LndoaXRle2NvbG9yOiNmZmZ9LmdyYXl7Y29sb3I6IzJjM2U1MH0uZGFyay1ncmF5e2NvbG9yOiM5NWE1YTZ9Lm5vdGljZXtjb2xvcjojMzQ5OGRifS5zdWNjZXNze2NvbG9yOiMxYWJjOWN9LmFsZXJ0e2NvbG9yOiNlNzRjM2N9LndoaXRlLWJne2JhY2tncm91bmQtY29sb3I6I2ZmZn0uZ3JheS1iZ3tiYWNrZ3JvdW5kLWNvbG9yOiMyYzNlNTB9LmRhcmstZ3JheS1iZ3tiYWNrZ3JvdW5kLWNvbG9yOiM5NWE1YTZ9Lm5vdGljZS1iZ3tiYWNrZ3JvdW5kLWNvbG9yOiMzNDk4ZGJ9LnN1Y2Nlc3MtYmd7YmFja2dyb3VuZC1jb2xvcjojMWFiYzljfS5hbGVydC1iZ3tiYWNrZ3JvdW5kLWNvbG9yOiNlNzRjM2N9LmJvbGR7Zm9udC13ZWlnaHQ6NzAwfS5yZWd1bGFye2ZvbnQtd2VpZ2h0OjQwMH0uaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS50cnVuY2F0ZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LmJyZWFrLXdvcmR7d29yZC13cmFwOmJyZWFrLXdvcmR9Lm5vLXdyYXB7d2hpdGUtc3BhY2U6bm93cmFwIWltcG9ydGFudH0ubGlzdC1iYXJlLC5uby1idWxsZXRze2xpc3Qtc3R5bGU6bm9uZX0uYnVsbGV0cy1pbnNpZGV7bGlzdC1zdHlsZTppbnNpZGV9Lmxpc3QtYmFyZXttYXJnaW46MDtwYWRkaW5nOjB9LmJvcmRlci1hbGx7Ym9yZGVyOjFweCBzb2xpZCAjZWNmMGYxfS5ib3JkZXItdG9we2JvcmRlci10b3A6MXB4IHNvbGlkICNlY2YwZjF9LmJvcmRlci1ib3R0b217Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2VjZjBmMX0uYm9yZGVyLXJpZ2h0e2JvcmRlci1yaWdodDoxcHggc29saWQgI2VjZjBmMX0uYm9yZGVyLWxlZnR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlY2YwZjF9LmJvcmRlci1hbGwtLWRhcmt7Ym9yZGVyOjFweCBzb2xpZCAjYmRjM2M3fS5ib3JkZXItdG9wLS1kYXJre2JvcmRlci10b3A6MXB4IHNvbGlkICNiZGMzYzd9LmJvcmRlci1ib3R0b20tLWRhcmt7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2JkYzNjN30uYm9yZGVyLXJpZ2h0LS1kYXJre2JvcmRlci1yaWdodDoxcHggc29saWQgI2JkYzNjN30uYm9yZGVyLWxlZnQtLWRhcmt7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNiZGMzYzd9LnJhZGl1c3tib3JkZXItcmFkaXVzOjNweH0ucmFkaXVzLXRvcHtib3JkZXItcmFkaXVzOjNweCAzcHggMCAwfS5yYWRpdXMtcmlnaHR7Ym9yZGVyLXJhZGl1czowIDNweCAzcHggMH0ucmFkaXVzLWJvdHRvbXtib3JkZXItcmFkaXVzOjAgMCAzcHggM3B4fS5yYWRpdXMtbGVmdHtib3JkZXItcmFkaXVzOjNweCAwIDAgM3B4fS5tYXJnaW4tdG9wLW5vbmV7bWFyZ2luLXRvcDowfS5tYXJnaW4tdG9wLXF1YXJ0ZXJ7bWFyZ2luLXRvcDouMjVlbX0ubWFyZ2luLXRvcC1oYWxme21hcmdpbi10b3A6LjVlbX0ubWFyZ2luLXRvcC1vbmV7bWFyZ2luLXRvcDoxZW19Lm1hcmdpbi10b3AtdHdve21hcmdpbi10b3A6MmVtfS5tYXJnaW4tdG9wLXRocmVle21hcmdpbi10b3A6M2VtfS5tYXJnaW4tdG9wLWZvdXJ7bWFyZ2luLXRvcDo0ZW19Lm1hcmdpbi1ib3R0b20tbm9uZXttYXJnaW4tYm90dG9tOjB9Lm1hcmdpbi1ib3R0b20tcXVhcnRlcnttYXJnaW4tYm90dG9tOi4yNWVtfS5tYXJnaW4tYm90dG9tLWhhbGZ7bWFyZ2luLWJvdHRvbTouNWVtfS5tYXJnaW4tYm90dG9tLW9uZXttYXJnaW4tYm90dG9tOjFlbX0ubWFyZ2luLWJvdHRvbS10d297bWFyZ2luLWJvdHRvbToyZW19Lm1hcmdpbi1ib3R0b20tdGhyZWV7bWFyZ2luLWJvdHRvbTozZW19Lm1hcmdpbi1ib3R0b20tZm91cnttYXJnaW4tYm90dG9tOjRlbX0ubWFyZ2luLXJpZ2h0LW5vbmV7bWFyZ2luLXJpZ2h0OjB9Lm1hcmdpbi1yaWdodC1xdWFydGVye21hcmdpbi1yaWdodDouMjVlbX0ubWFyZ2luLXJpZ2h0LWhhbGZ7bWFyZ2luLXJpZ2h0Oi41ZW19Lm1hcmdpbi1yaWdodC1vbmV7bWFyZ2luLXJpZ2h0OjFlbX0ubWFyZ2luLXJpZ2h0LXR3b3ttYXJnaW4tcmlnaHQ6MmVtfS5tYXJnaW4tcmlnaHQtdGhyZWV7bWFyZ2luLXJpZ2h0OjNlbX0ubWFyZ2luLXJpZ2h0LWZvdXJ7bWFyZ2luLXJpZ2h0OjRlbX0ubWFyZ2luLWxlZnQtbm9uZXttYXJnaW4tbGVmdDowfS5tYXJnaW4tbGVmdC1xdWFydGVye21hcmdpbi1sZWZ0Oi4yNWVtfS5tYXJnaW4tbGVmdC1oYWxme21hcmdpbi1sZWZ0Oi41ZW19Lm1hcmdpbi1sZWZ0LW9uZXttYXJnaW4tbGVmdDoxZW19Lm1hcmdpbi1sZWZ0LXR3b3ttYXJnaW4tbGVmdDoyZW19Lm1hcmdpbi1sZWZ0LXRocmVle21hcmdpbi1sZWZ0OjNlbX0ubWFyZ2luLWxlZnQtZm91cnttYXJnaW4tbGVmdDo0ZW19Lm1hcmdpbi1ub25le21hcmdpbjowfS5tYXJnaW4tcXVhcnRlcnttYXJnaW46LjI1ZW19Lm1hcmdpbi1oYWxme21hcmdpbjouNWVtfS5tYXJnaW4tb25le21hcmdpbjoxZW19Lm1hcmdpbi10d297bWFyZ2luOjJlbX0ubWFyZ2luLXRocmVle21hcmdpbjozZW19Lm1hcmdpbi1mb3Vye21hcmdpbjo0ZW19LnBhZGRpbmctdG9wLW5vbmV7cGFkZGluZy10b3A6MH0ucGFkZGluZy10b3AtcXVhcnRlcntwYWRkaW5nLXRvcDouMjVlbX0ucGFkZGluZy10b3AtaGFsdmV7cGFkZGluZy10b3A6LjVlbX0ucGFkZGluZy10b3Atb25le3BhZGRpbmctdG9wOjFlbX0ucGFkZGluZy10b3AtdHdve3BhZGRpbmctdG9wOjJlbX0ucGFkZGluZy10b3AtdGhyZWV7cGFkZGluZy10b3A6M2VtfS5wYWRkaW5nLXRvcC1mb3Vye3BhZGRpbmctdG9wOjRlbX0ucGFkZGluZy1ib3R0b20tbm9uZXtwYWRkaW5nLWJvdHRvbTowfS5wYWRkaW5nLWJvdHRvbS1xdWFydGVye3BhZGRpbmctYm90dG9tOi4yNWVtfS5wYWRkaW5nLWJvdHRvbS1oYWx2ZXtwYWRkaW5nLWJvdHRvbTouNWVtfS5wYWRkaW5nLWJvdHRvbS1vbmV7cGFkZGluZy1ib3R0b206MWVtfS5wYWRkaW5nLWJvdHRvbS10d297cGFkZGluZy1ib3R0b206MmVtfS5wYWRkaW5nLWJvdHRvbS10aHJlZXtwYWRkaW5nLWJvdHRvbTozZW19LnBhZGRpbmctYm90dG9tLWZvdXJ7cGFkZGluZy1ib3R0b206NGVtfS5wYWRkaW5nLXJpZ2h0LW5vbmV7cGFkZGluZy1yaWdodDowfS5wYWRkaW5nLXJpZ2h0LXF1YXJ0ZXJ7cGFkZGluZy1yaWdodDouMjVlbX0ucGFkZGluZy1yaWdodC1oYWx2ZXtwYWRkaW5nLXJpZ2h0Oi41ZW19LnBhZGRpbmctcmlnaHQtb25le3BhZGRpbmctcmlnaHQ6MWVtfS5wYWRkaW5nLXJpZ2h0LXR3b3twYWRkaW5nLXJpZ2h0OjJlbX0ucGFkZGluZy1yaWdodC10aHJlZXtwYWRkaW5nLXJpZ2h0OjNlbX0ucGFkZGluZy1yaWdodC1mb3Vye3BhZGRpbmctcmlnaHQ6NGVtfS5wYWRkaW5nLWxlZnQtbm9uZXtwYWRkaW5nLWxlZnQ6MH0ucGFkZGluZy1sZWZ0LXF1YXJ0ZXJ7cGFkZGluZy1sZWZ0Oi4yNWVtfS5wYWRkaW5nLWxlZnQtaGFsdmV7cGFkZGluZy1sZWZ0Oi41ZW19LnBhZGRpbmctbGVmdC1vbmV7cGFkZGluZy1sZWZ0OjFlbX0ucGFkZGluZy1sZWZ0LXR3b3twYWRkaW5nLWxlZnQ6MmVtfS5wYWRkaW5nLWxlZnQtdGhyZWV7cGFkZGluZy1sZWZ0OjNlbX0ucGFkZGluZy1sZWZ0LWZvdXJ7cGFkZGluZy1sZWZ0OjRlbX0ucGFkZGluZy1ub25le3BhZGRpbmc6MH0ucGFkZGluZy1xdWFydGVye3BhZGRpbmc6LjI1ZW19LnBhZGRpbmctaGFsdmV7cGFkZGluZzouNWVtfS5wYWRkaW5nLW9uZXtwYWRkaW5nOjFlbX0ucGFkZGluZy10d297cGFkZGluZzoyZW19LnBhZGRpbmctdGhyZWV7cGFkZGluZzozZW19LnBhZGRpbmctZm91cntwYWRkaW5nOjRlbX0=]]></data>
	</file>
	<file>
	  <filename>/css/backslash/bs/lib/lg-grid.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[QG1lZGlhICgtLWJyZWFrcG9pbnQtbGcpIHsKCiAgLlxcLWxnLWNvbCB7CiAgICBmbG9hdDogbGVmdDsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgfQoKICAuXFwtbGctY29sLXJpZ2h0IHsKICAgIGZsb2F0OiByaWdodDsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgfQoKICAuXFwtbGctY29sLTEgewogICAgd2lkdGg6IGNhbGMoMS8xMiAqIDEwMCUpOwogIH0KCiAgLlxcLWxnLWNvbC0yIHsKICAgIHdpZHRoOiBjYWxjKDIvMTIgKiAxMDAlKTsKICB9CgogIC5cXC1sZy1jb2wtMyB7CiAgICB3aWR0aDogY2FsYygzLzEyICogMTAwJSk7CiAgfQoKICAuXFwtbGctY29sLTQgewogICAgd2lkdGg6IGNhbGMoNC8xMiAqIDEwMCUpOwogIH0KCiAgLlxcLWxnLWNvbC01IHsKICAgIHdpZHRoOiBjYWxjKDUvMTIgKiAxMDAlKTsKICB9CgogIC5cXC1sZy1jb2wtNiB7CiAgICB3aWR0aDogY2FsYyg2LzEyICogMTAwJSk7CiAgfQoKICAuXFwtbGctY29sLTcgewogICAgd2lkdGg6IGNhbGMoNy8xMiAqIDEwMCUpOwogIH0KCiAgLlxcLWxnLWNvbC04IHsKICAgIHdpZHRoOiBjYWxjKDgvMTIgKiAxMDAlKTsKICB9CgogIC5cXC1sZy1jb2wtOSB7CiAgICB3aWR0aDogY2FsYyg5LzEyICogMTAwJSk7CiAgfQoKICAuXFwtbGctY29sLTEwIHsKICAgIHdpZHRoOiBjYWxjKDEwLzEyICogMTAwJSk7CiAgfQoKICAuXFwtbGctY29sLTExIHsKICAgIHdpZHRoOiBjYWxjKDExLzEyICogMTAwJSk7CiAgfQoKICAuXFwtbGctY29sLTEyIHsKICAgIHdpZHRoOiAxMDAlOwogIH0KCn0KCg==]]></data>
	</file>
	<file>
	  <filename>/css/backslash/bs/lib/margin_padding.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LlxcLXAtNSB7DQogIHBhZGRpbmc6IDVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcC0xMCB7DQogIHBhZGRpbmc6IDEwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXAtMTUgew0KICBwYWRkaW5nOiAxNXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wLTIwIHsNCiAgcGFkZGluZzogMjBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcC0yNSB7DQogIHBhZGRpbmc6IDI1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXAtMzAgew0KICBwYWRkaW5nOiAzMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wLTM1IHsNCiAgcGFkZGluZzogMzVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcC00MCB7DQogIHBhZGRpbmc6IDQwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXAtNDUgew0KICBwYWRkaW5nOiA0NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wLTUwIHsNCiAgcGFkZGluZzogNTBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcC02MCB7DQogIHBhZGRpbmc6IDYwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXAtNjUgew0KICBwYWRkaW5nOiA2NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wLTcwIHsNCiAgcGFkZGluZzogNzBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcC03NSB7DQogIHBhZGRpbmc6IDc1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXAtODAgew0KICBwYWRkaW5nOiA4MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wLTg1IHsNCiAgcGFkZGluZzogODVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcC05MCB7DQogIHBhZGRpbmc6IDkwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXAtOTUgew0KICBwYWRkaW5nOiA5NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wLTEwMCB7DQogIHBhZGRpbmc6IDEwMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wLTEyNSB7DQogIHBhZGRpbmc6IDEyNXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wLTE1MCB7DQogIHBhZGRpbmc6IDE1MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wLTE3NSB7DQogIHBhZGRpbmc6IDE3NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wLTIwMCB7DQogIHBhZGRpbmc6IDIwMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wdC01IHsNCiAgcGFkZGluZy10b3A6IDVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHQtMTAgew0KICBwYWRkaW5nLXRvcDogMTBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHQtMTUgew0KICBwYWRkaW5nLXRvcDogMTVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHQtMjAgew0KICBwYWRkaW5nLXRvcDogMjBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHQtMjUgew0KICBwYWRkaW5nLXRvcDogMjVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHQtMzAgew0KICBwYWRkaW5nLXRvcDogMzBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHQtMzUgew0KICBwYWRkaW5nLXRvcDogMzVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHQtNDAgew0KICBwYWRkaW5nLXRvcDogNDBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHQtNDUgew0KICBwYWRkaW5nLXRvcDogNDVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHQtNTAgew0KICBwYWRkaW5nLXRvcDogNTBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHQtNjAgew0KICBwYWRkaW5nLXRvcDogNjBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHQtNjUgew0KICBwYWRkaW5nLXRvcDogNjVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHQtNzAgew0KICBwYWRkaW5nLXRvcDogNzBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHQtNzUgew0KICBwYWRkaW5nLXRvcDogNzVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHQtODAgew0KICBwYWRkaW5nLXRvcDogODBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHQtODUgew0KICBwYWRkaW5nLXRvcDogODVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHQtOTAgew0KICBwYWRkaW5nLXRvcDogOTBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHQtOTUgew0KICBwYWRkaW5nLXRvcDogOTVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHQtMTAwIHsNCiAgcGFkZGluZy10b3A6IDEwMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wdC0xMjUgew0KICBwYWRkaW5nLXRvcDogMTI1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXB0LTE1MCB7DQogIHBhZGRpbmctdG9wOiAxNTBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHQtMTc1IHsNCiAgcGFkZGluZy10b3A6IDE3NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wdC0yMDAgew0KICBwYWRkaW5nLXRvcDogMjAwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXBiLTUgew0KICBwYWRkaW5nLWJvdHRvbTogNXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wYi0xMCB7DQogIHBhZGRpbmctYm90dG9tOiAxMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wYi0xNSB7DQogIHBhZGRpbmctYm90dG9tOiAxNXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wYi0yMCB7DQogIHBhZGRpbmctYm90dG9tOiAyMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wYi0yNSB7DQogIHBhZGRpbmctYm90dG9tOiAyNXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wYi0zMCB7DQogIHBhZGRpbmctYm90dG9tOiAzMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wYi0zNSB7DQogIHBhZGRpbmctYm90dG9tOiAzNXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wYi00MCB7DQogIHBhZGRpbmctYm90dG9tOiA0MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wYi00NSB7DQogIHBhZGRpbmctYm90dG9tOiA0NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wYi01MCB7DQogIHBhZGRpbmctYm90dG9tOiA1MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wYi02MCB7DQogIHBhZGRpbmctYm90dG9tOiA2MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wYi02NSB7DQogIHBhZGRpbmctYm90dG9tOiA2NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wYi03MCB7DQogIHBhZGRpbmctYm90dG9tOiA3MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wYi03NSB7DQogIHBhZGRpbmctYm90dG9tOiA3NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wYi04MCB7DQogIHBhZGRpbmctYm90dG9tOiA4MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wYi04NSB7DQogIHBhZGRpbmctYm90dG9tOiA4NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wYi05MCB7DQogIHBhZGRpbmctYm90dG9tOiA5MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wYi05NSB7DQogIHBhZGRpbmctYm90dG9tOiA5NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wYi0xMDAgew0KICBwYWRkaW5nLWJvdHRvbTogMTAwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXBiLTEyNSB7DQogIHBhZGRpbmctYm90dG9tOiAxMjVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcGItMTUwIHsNCiAgcGFkZGluZy1ib3R0b206IDE1MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wYi0xNzUgew0KICBwYWRkaW5nLWJvdHRvbTogMTc1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXBiLTIwMCB7DQogIHBhZGRpbmctYm90dG9tOiAyMDBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcGwtNSB7DQogIHBhZGRpbmctbGVmdDogNXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wbC0xMCB7DQogIHBhZGRpbmctbGVmdDogMTBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcGwtMTUgew0KICBwYWRkaW5nLWxlZnQ6IDE1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXBsLTIwIHsNCiAgcGFkZGluZy1sZWZ0OiAyMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wbC0yNSB7DQogIHBhZGRpbmctbGVmdDogMjVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcGwtMzAgew0KICBwYWRkaW5nLWxlZnQ6IDMwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXBsLTM1IHsNCiAgcGFkZGluZy1sZWZ0OiAzNXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wbC00MCB7DQogIHBhZGRpbmctbGVmdDogNDBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcGwtNDUgew0KICBwYWRkaW5nLWxlZnQ6IDQ1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXBsLTUwIHsNCiAgcGFkZGluZy1sZWZ0OiA1MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wbC02MCB7DQogIHBhZGRpbmctbGVmdDogNjBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcGwtNjUgew0KICBwYWRkaW5nLWxlZnQ6IDY1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXBsLTcwIHsNCiAgcGFkZGluZy1sZWZ0OiA3MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wbC03NSB7DQogIHBhZGRpbmctbGVmdDogNzVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcGwtODAgew0KICBwYWRkaW5nLWxlZnQ6IDgwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXBsLTg1IHsNCiAgcGFkZGluZy1sZWZ0OiA4NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wbC05MCB7DQogIHBhZGRpbmctbGVmdDogOTBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcGwtOTUgew0KICBwYWRkaW5nLWxlZnQ6IDk1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXBsLTEwMCB7DQogIHBhZGRpbmctbGVmdDogMTAwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXBsLTEyNSB7DQogIHBhZGRpbmctbGVmdDogMTI1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXBsLTE1MCB7DQogIHBhZGRpbmctbGVmdDogMTUwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXBsLTE3NSB7DQogIHBhZGRpbmctbGVmdDogMTc1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXBsLTIwMCB7DQogIHBhZGRpbmctbGVmdDogMjAwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXByLTUgew0KICBwYWRkaW5nLXJpZ2h0OiA1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXByLTEwIHsNCiAgcGFkZGluZy1yaWdodDogMTBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHItMTUgew0KICBwYWRkaW5nLXJpZ2h0OiAxNXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wci0yMCB7DQogIHBhZGRpbmctcmlnaHQ6IDIwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXByLTI1IHsNCiAgcGFkZGluZy1yaWdodDogMjVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHItMzAgew0KICBwYWRkaW5nLXJpZ2h0OiAzMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wci0zNSB7DQogIHBhZGRpbmctcmlnaHQ6IDM1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXByLTQwIHsNCiAgcGFkZGluZy1yaWdodDogNDBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHItNDUgew0KICBwYWRkaW5nLXJpZ2h0OiA0NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wci01MCB7DQogIHBhZGRpbmctcmlnaHQ6IDUwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXByLTYwIHsNCiAgcGFkZGluZy1yaWdodDogNjBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHItNjUgew0KICBwYWRkaW5nLXJpZ2h0OiA2NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wci03MCB7DQogIHBhZGRpbmctcmlnaHQ6IDcwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXByLTc1IHsNCiAgcGFkZGluZy1yaWdodDogNzVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHItODAgew0KICBwYWRkaW5nLXJpZ2h0OiA4MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wci04NSB7DQogIHBhZGRpbmctcmlnaHQ6IDg1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXByLTkwIHsNCiAgcGFkZGluZy1yaWdodDogOTBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHItOTUgew0KICBwYWRkaW5nLXJpZ2h0OiA5NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wci0xMDAgew0KICBwYWRkaW5nLXJpZ2h0OiAxMDBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHItMTI1IHsNCiAgcGFkZGluZy1yaWdodDogMTI1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLXByLTE1MCB7DQogIHBhZGRpbmctcmlnaHQ6IDE1MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1wci0xNzUgew0KICBwYWRkaW5nLXJpZ2h0OiAxNzVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtcHItMjAwIHsNCiAgcGFkZGluZy1yaWdodDogMjAwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW0tNSB7DQogIG1hcmdpbjogNXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tLTEwIHsNCiAgbWFyZ2luOiAxMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tLTE1IHsNCiAgbWFyZ2luOiAxNXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tLTIwIHsNCiAgbWFyZ2luOiAyMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tLTI1IHsNCiAgbWFyZ2luOiAyNXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tLTMwIHsNCiAgbWFyZ2luOiAzMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tLTM1IHsNCiAgbWFyZ2luOiAzNXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tLTQwIHsNCiAgbWFyZ2luOiA0MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tLTQ1IHsNCiAgbWFyZ2luOiA0NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tLTUwIHsNCiAgbWFyZ2luOiA1MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tLTYwIHsNCiAgbWFyZ2luOiA2MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tLTY1IHsNCiAgbWFyZ2luOiA2NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tLTcwIHsNCiAgbWFyZ2luOiA3MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tLTc1IHsNCiAgbWFyZ2luOiA3NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tLTgwIHsNCiAgbWFyZ2luOiA4MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tLTg1IHsNCiAgbWFyZ2luOiA4NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tLTkwIHsNCiAgbWFyZ2luOiA5MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tLTk1IHsNCiAgbWFyZ2luOiA5NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tLTEwMCB7DQogIG1hcmdpbjogMTAwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW0tMTI1IHsNCiAgbWFyZ2luOiAxMjVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbS0xNTAgew0KICBtYXJnaW46IDE1MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tLTE3NSB7DQogIG1hcmdpbjogMTc1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW0tMjAwIHsNCiAgbWFyZ2luOiAyMDBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbXQtNSB7DQogIG1hcmdpbi10b3A6IDVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbXQtMTAgew0KICBtYXJnaW4tdG9wOiAxMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tdC0xNSB7DQogIG1hcmdpbi10b3A6IDE1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW10LTIwIHsNCiAgbWFyZ2luLXRvcDogMjBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbXQtMjUgew0KICBtYXJnaW4tdG9wOiAyNXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tdC0zMCB7DQogIG1hcmdpbi10b3A6IDMwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW10LTM1IHsNCiAgbWFyZ2luLXRvcDogMzVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbXQtNDAgew0KICBtYXJnaW4tdG9wOiA0MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tdC00NSB7DQogIG1hcmdpbi10b3A6IDQ1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW10LTUwIHsNCiAgbWFyZ2luLXRvcDogNTBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbXQtNjAgew0KICBtYXJnaW4tdG9wOiA2MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tdC02NSB7DQogIG1hcmdpbi10b3A6IDY1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW10LTcwIHsNCiAgbWFyZ2luLXRvcDogNzBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbXQtNzUgew0KICBtYXJnaW4tdG9wOiA3NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tdC04MCB7DQogIG1hcmdpbi10b3A6IDgwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW10LTg1IHsNCiAgbWFyZ2luLXRvcDogODVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbXQtOTAgew0KICBtYXJnaW4tdG9wOiA5MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tdC05NSB7DQogIG1hcmdpbi10b3A6IDk1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW10LTEwMCB7DQogIG1hcmdpbi10b3A6IDEwMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tdC0xMjUgew0KICBtYXJnaW4tdG9wOiAxMjVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbXQtMTUwIHsNCiAgbWFyZ2luLXRvcDogMTUwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW10LTE3NSB7DQogIG1hcmdpbi10b3A6IDE3NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tdC0yMDAgew0KICBtYXJnaW4tdG9wOiAyMDBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbWItNSB7DQogIG1hcmdpbi1ib3R0b206IDVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbWItMTAgew0KICBtYXJnaW4tYm90dG9tOiAxMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tYi0xNSB7DQogIG1hcmdpbi1ib3R0b206IDE1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1iLTIwIHsNCiAgbWFyZ2luLWJvdHRvbTogMjBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbWItMjUgew0KICBtYXJnaW4tYm90dG9tOiAyNXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tYi0zMCB7DQogIG1hcmdpbi1ib3R0b206IDMwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1iLTM1IHsNCiAgbWFyZ2luLWJvdHRvbTogMzVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbWItNDAgew0KICBtYXJnaW4tYm90dG9tOiA0MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tYi00NSB7DQogIG1hcmdpbi1ib3R0b206IDQ1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1iLTUwIHsNCiAgbWFyZ2luLWJvdHRvbTogNTBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbWItNjAgew0KICBtYXJnaW4tYm90dG9tOiA2MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tYi02NSB7DQogIG1hcmdpbi1ib3R0b206IDY1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1iLTcwIHsNCiAgbWFyZ2luLWJvdHRvbTogNzBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbWItNzUgew0KICBtYXJnaW4tYm90dG9tOiA3NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tYi04MCB7DQogIG1hcmdpbi1ib3R0b206IDgwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1iLTg1IHsNCiAgbWFyZ2luLWJvdHRvbTogODVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbWItOTAgew0KICBtYXJnaW4tYm90dG9tOiA5MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tYi05NSB7DQogIG1hcmdpbi1ib3R0b206IDk1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1iLTEwMCB7DQogIG1hcmdpbi1ib3R0b206IDEwMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tYi0xMjUgew0KICBtYXJnaW4tYm90dG9tOiAxMjVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbWItMTUwIHsNCiAgbWFyZ2luLWJvdHRvbTogMTUwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1iLTE3NSB7DQogIG1hcmdpbi1ib3R0b206IDE3NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tYi0yMDAgew0KICBtYXJnaW4tYm90dG9tOiAyMDBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbWwtNSB7DQogIG1hcmdpbi1sZWZ0OiA1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1sLTEwIHsNCiAgbWFyZ2luLWxlZnQ6IDEwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1sLTE1IHsNCiAgbWFyZ2luLWxlZnQ6IDE1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1sLTIwIHsNCiAgbWFyZ2luLWxlZnQ6IDIwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1sLTI1IHsNCiAgbWFyZ2luLWxlZnQ6IDI1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1sLTMwIHsNCiAgbWFyZ2luLWxlZnQ6IDMwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1sLTM1IHsNCiAgbWFyZ2luLWxlZnQ6IDM1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1sLTQwIHsNCiAgbWFyZ2luLWxlZnQ6IDQwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1sLTQ1IHsNCiAgbWFyZ2luLWxlZnQ6IDQ1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1sLTUwIHsNCiAgbWFyZ2luLWxlZnQ6IDUwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1sLTYwIHsNCiAgbWFyZ2luLWxlZnQ6IDYwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1sLTY1IHsNCiAgbWFyZ2luLWxlZnQ6IDY1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1sLTcwIHsNCiAgbWFyZ2luLWxlZnQ6IDcwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1sLTc1IHsNCiAgbWFyZ2luLWxlZnQ6IDc1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1sLTgwIHsNCiAgbWFyZ2luLWxlZnQ6IDgwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1sLTg1IHsNCiAgbWFyZ2luLWxlZnQ6IDg1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1sLTkwIHsNCiAgbWFyZ2luLWxlZnQ6IDkwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1sLTk1IHsNCiAgbWFyZ2luLWxlZnQ6IDk1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1sLTEwMCB7DQogIG1hcmdpbi1sZWZ0OiAxMDBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbWwtMTI1IHsNCiAgbWFyZ2luLWxlZnQ6IDEyNXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tbC0xNTAgew0KICBtYXJnaW4tbGVmdDogMTUwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1sLTE3NSB7DQogIG1hcmdpbi1sZWZ0OiAxNzVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbWwtMjAwIHsNCiAgbWFyZ2luLWxlZnQ6IDIwMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tci01IHsNCiAgbWFyZ2luLXJpZ2h0OiA1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1yLTEwIHsNCiAgbWFyZ2luLXJpZ2h0OiAxMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tci0xNSB7DQogIG1hcmdpbi1yaWdodDogMTVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbXItMjAgew0KICBtYXJnaW4tcmlnaHQ6IDIwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1yLTI1IHsNCiAgbWFyZ2luLXJpZ2h0OiAyNXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tci0zMCB7DQogIG1hcmdpbi1yaWdodDogMzBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbXItMzUgew0KICBtYXJnaW4tcmlnaHQ6IDM1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1yLTQwIHsNCiAgbWFyZ2luLXJpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tci00NSB7DQogIG1hcmdpbi1yaWdodDogNDVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbXItNTAgew0KICBtYXJnaW4tcmlnaHQ6IDUwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1yLTYwIHsNCiAgbWFyZ2luLXJpZ2h0OiA2MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tci02NSB7DQogIG1hcmdpbi1yaWdodDogNjVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbXItNzAgew0KICBtYXJnaW4tcmlnaHQ6IDcwcHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1yLTc1IHsNCiAgbWFyZ2luLXJpZ2h0OiA3NXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tci04MCB7DQogIG1hcmdpbi1yaWdodDogODBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbXItODUgew0KICBtYXJnaW4tcmlnaHQ6IDg1cHggIWltcG9ydGFudDsNCn0NCg0KLlxcLW1yLTkwIHsNCiAgbWFyZ2luLXJpZ2h0OiA5MHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5cXC1tci05NSB7DQogIG1hcmdpbi1yaWdodDogOTVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbXItMTAwIHsNCiAgbWFyZ2luLXJpZ2h0OiAxMDBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbXItMTI1IHsNCiAgbWFyZ2luLXJpZ2h0OiAxMjVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbXItMTUwIHsNCiAgbWFyZ2luLXJpZ2h0OiAxNTBweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbXItMTc1IHsNCiAgbWFyZ2luLXJpZ2h0OiAxNzVweCAhaW1wb3J0YW50Ow0KfQ0KDQouXFwtbXItMjAwIHsNCiAgbWFyZ2luLXJpZ2h0OiAyMDBweCAhaW1wb3J0YW50Ow0KfQ==]]></data>
	</file>
	<file>
	  <filename>/css/backslash/bs/lib/md-grid.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[QG1lZGlhICgtLWJyZWFrcG9pbnQtbWQpIHsKCiAgLlxcLXNtLWxnLWNvbCB7CiAgICBmbG9hdDogbGVmdDsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgfQoKICAuXFwtc20tbGctY29sLXJpZ2h0IHsKICAgIGZsb2F0OiByaWdodDsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgfQoKICAuXFwtc20tbGctY29sLTEgewogICAgd2lkdGg6IGNhbGMoMS8xMiAqIDEwMCUpOwogIH0KCiAgLlxcLXNtLWxnLWNvbC0yIHsKICAgIHdpZHRoOiBjYWxjKDIvMTIgKiAxMDAlKTsKICB9CgogIC5cXC1zbS1sZy1jb2wtMyB7CiAgICB3aWR0aDogY2FsYygzLzEyICogMTAwJSk7CiAgfQoKICAuXFwtc20tbGctY29sLTQgewogICAgd2lkdGg6IGNhbGMoNC8xMiAqIDEwMCUpOwogIH0KCiAgLlxcLXNtLWxnLWNvbC01IHsKICAgIHdpZHRoOiBjYWxjKDUvMTIgKiAxMDAlKTsKICB9CgogIC5cXC1zbS1sZy1jb2wtNiB7CiAgICB3aWR0aDogY2FsYyg2LzEyICogMTAwJSk7CiAgfQoKICAuXFwtc20tbGctY29sLTcgewogICAgd2lkdGg6IGNhbGMoNy8xMiAqIDEwMCUpOwogIH0KCiAgLlxcLXNtLWxnLWNvbC04IHsKICAgIHdpZHRoOiBjYWxjKDgvMTIgKiAxMDAlKTsKICB9CgogIC5cXC1zbS1sZy1jb2wtOSB7CiAgICB3aWR0aDogY2FsYyg5LzEyICogMTAwJSk7CiAgfQoKICAuXFwtc20tbGctY29sLTEwIHsKICAgIHdpZHRoOiBjYWxjKDEwLzEyICogMTAwJSk7CiAgfQoKICAuXFwtc20tbGctY29sLTExIHsKICAgIHdpZHRoOiBjYWxjKDExLzEyICogMTAwJSk7CiAgfQoKICAuXFwtc20tbGctY29sLTEyIHsKICAgIHdpZHRoOiAxMDAlOwogIH0KCn0KCg==]]></data>
	</file>
	<file>
	  <filename>/css/backslash/bs/lib/misc.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LlxcLWZpdA0Kew0KICBtYXgtd2lkdGg6IDEwMCU7DQp9DQoNCi5cXC1oYWxmLXdpZHRoDQp7DQogIHdpZHRoOiA1MCUNCn0NCg0KLlxcLWZ1bGwtd2lkdGgNCnsNCiAgd2lkdGg6IDEwMCU7DQp9DQoNCi5cXC1mdWxsLWhlaWdodA0Kew0KICBoZWlnaHQ6IDEwMCU7DQp9DQoNCi5cXC1maXhlZA0Kew0KICBwb3NpdGlvbjogZml4ZWQ7DQp9DQoNCi5cXC1yZWxhdGl2ZQ0Kew0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQp9DQoNCi5cXC1hYnNvbHV0ZQ0Kew0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQp9DQoNCi5cXC1zdGF0aWMNCnsNCiAgcG9zaXRpb246IHN0YXRpYzsNCn0NCg0KLlxcLXppbmRleC0xDQp7DQogIHotaW5kZXg6IDE7DQp9DQoNCi5cXC16aW5kZXgtMg0Kew0KICB6LWluZGV4OiAyOw0KfQ0KDQouXFwtemluZGV4LTMNCnsNCiAgei1pbmRleDogMzsNCn0NCg0KLyogTWFyZ2lucw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KDQouXFwtc3BhY2UtbGVmdDAgIHsgbWFyZ2luLWxlZnQ6ICAgIDVweDt9DQouXFwtc3BhY2UtbGVmdDEgIHsgbWFyZ2luLWxlZnQ6ICAgMTBweDt9DQouXFwtc3BhY2UtbGVmdDIgIHsgbWFyZ2luLWxlZnQ6ICAgMjBweDt9DQouXFwtc3BhY2UtbGVmdDMgIHsgbWFyZ2luLWxlZnQ6ICAgMzBweDt9DQouXFwtc3BhY2UtbGVmdDQgIHsgbWFyZ2luLWxlZnQ6ICAgNDBweDt9DQouXFwtc3BhY2UtbGVmdDggIHsgbWFyZ2luLWxlZnQ6ICAgODBweDt9DQouXFwtc3BhY2UtbGVmdDEyIHsgbWFyZ2luLWxlZnQ6ICAxMjBweDt9DQouXFwtc3BhY2UtbGVmdDE2IHsgbWFyZ2luLWxlZnQ6ICAxNjBweDt9DQouXFwtc3BhY2UtbGVmdDIwIHsgbWFyZ2luLWxlZnQ6ICAyMDBweDt9DQouXFwtc3BhY2UtbGVmdDI0IHsgbWFyZ2luLWxlZnQ6ICAyNDBweDt9DQoNCi5cXC1zcGFjZS1yaWdodDAgIHsgbWFyZ2luLXJpZ2h0OiAgIDVweDt9DQouXFwtc3BhY2UtcmlnaHQxICB7IG1hcmdpbi1yaWdodDogIDEwcHg7fQ0KLlxcLXNwYWNlLXJpZ2h0MiAgeyBtYXJnaW4tcmlnaHQ6ICAyMHB4O30NCi5cXC1zcGFjZS1yaWdodDMgIHsgbWFyZ2luLXJpZ2h0OiAgMzBweDt9DQouXFwtc3BhY2UtcmlnaHQ0ICB7IG1hcmdpbi1yaWdodDogIDQwcHg7fQ0KLlxcLXNwYWNlLXJpZ2h0OCAgeyBtYXJnaW4tcmlnaHQ6ICA4MHB4O30NCi5cXC1zcGFjZS1yaWdodDEyIHsgbWFyZ2luLXJpZ2h0OiAxMjBweDt9DQouXFwtc3BhY2UtcmlnaHQxNiB7IG1hcmdpbi1yaWdodDogMTYwcHg7fQ0KLlxcLXNwYWNlLXJpZ2h0MjAgeyBtYXJnaW4tcmlnaHQ6IDIwMHB4O30NCi5cXC1zcGFjZS1yaWdodDI0IHsgbWFyZ2luLXJpZ2h0OiAyNDBweDt9DQoNCi5cXC1zcGFjZS1ib3R0b20wICAgICAgICAgICAgICAgIHsgbWFyZ2luLWJvdHRvbTogIDVweDt9DQouXFwtc3BhY2UtYm90dG9tMSAgICAgICAgICAgICAgICB7IG1hcmdpbi1ib3R0b206IDEwcHg7fQ0KLlxcLXNwYWNlLWJvdHRvbTIgICAgICAgICAgICAgICAgeyBtYXJnaW4tYm90dG9tOiAyMHB4O30NCi5cXC1zcGFjZS1ib3R0b200ICAgICAgICAgICAgICAgIHsgbWFyZ2luLWJvdHRvbTogNDBweDt9DQouXFwtc3BhY2UtYm90dG9tOCAgICAgICAgICAgICAgICB7IG1hcmdpbi1ib3R0b206IDgwcHg7fQ0KDQouXFwtc3BhY2UtdG9wMCAgICAgICAgICAgICAgICAgICB7IG1hcmdpbi10b3A6ICA1cHg7fQ0KLlxcLXNwYWNlLXRvcDEgICAgICAgICAgICAgICAgICAgeyBtYXJnaW4tdG9wOiAxMHB4O30NCi5cXC1zcGFjZS10b3AyICAgICAgICAgICAgICAgICAgIHsgbWFyZ2luLXRvcDogMjBweDt9DQouXFwtc3BhY2UtdG9wNCAgICAgICAgICAgICAgICAgICB7IG1hcmdpbi10b3A6IDQwcHg7fQ0KLlxcLXNwYWNlLXRvcDggICAgICAgICAgICAgICAgICAgeyBtYXJnaW4tdG9wOiA4MHB4O30NCg0KLyogUGFkZGluZw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLlxcLXBhZDAgIHsgcGFkZGluZzo1cHg7IH0NCi5cXC1wYWQweSB7IHBhZGRpbmctdG9wOjVweDsgcGFkZGluZy1ib3R0b206NXB4OyB9DQouXFwtcGFkMHggeyBwYWRkaW5nLXJpZ2h0OjVweDsgcGFkZGluZy1sZWZ0OjVweDsgfQ0KDQouXFwtcGFkMSAgICB7IHBhZGRpbmc6MTBweDsgfQ0KLlxcLXBhZDIgICAgeyBwYWRkaW5nOjIwcHg7IH0NCi5cXC1wYWQ0ICAgIHsgcGFkZGluZzo0MHB4OyB9DQoNCi5cXC1wYWQxeCB7IHBhZGRpbmctbGVmdDogMTBweDsgcGFkZGluZy1yaWdodDogMTBweDt9DQouXFwtcGFkMnggeyBwYWRkaW5nLWxlZnQ6IDIwcHg7IHBhZGRpbmctcmlnaHQ6IDIwcHg7fQ0KLlxcLXBhZDR4IHsgcGFkZGluZy1sZWZ0OiA0MHB4OyBwYWRkaW5nLXJpZ2h0OiA0MHB4O30NCg0KLlxcLXBhZDF5IHsgcGFkZGluZy10b3A6IDEwcHg7IHBhZGRpbmctYm90dG9tOiAxMHB4O30NCi5cXC1wYWQyeSB7IHBhZGRpbmctdG9wOiAyMHB4OyBwYWRkaW5nLWJvdHRvbTogMjBweDt9DQouXFwtcGFkNHkgeyBwYWRkaW5nLXRvcDogNDBweDsgcGFkZGluZy1ib3R0b206IDQwcHg7fQ0KDQouXFwtcGFkOCB7ICBwYWRkaW5nOiA4MHB4OyB9DQouXFwtcGFkOHkgeyBwYWRkaW5nLXRvcDogODBweDsgcGFkZGluZy1ib3R0b206IDgwcHg7fQ0KLlxcLXBhZDh4IHsgcGFkZGluZy1sZWZ0OiA4MHB4OyBwYWRkaW5nLXJpZ2h0OiA4MHB4O30NCg0KLyogQWJzb2x1dGUgY29udGFpbmVycw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLlxcLXBpbi10b3AsDQouXFwtcGluLXJpZ2h0LA0KLlxcLXBpbi1ib3R0b20sDQouXFwtcGluLWxlZnQsDQouXFwtcGluLXRvcGxlZnQsDQouXFwtcGluLXRvcHJpZ2h0LA0KLlxcLXBpbi1ib3R0b21sZWZ0LA0KLlxcLXBpbi1ib3R0b21yaWdodCB7DQogIHBvc2l0aW9uOmFic29sdXRlOw0KfQ0KLlxcLXBpbi1ib3R0b20geyByaWdodDowOyBib3R0b206MDsgbGVmdDowOyB9DQouXFwtcGluLXRvcCAgICB7IHRvcDowOyByaWdodDowOyBsZWZ0OjA7IH0NCi5cXC1waW4tbGVmdCAgIHsgdG9wOjA7IGJvdHRvbTowOyBsZWZ0OjA7IH0NCi5cXC1waW4tcmlnaHQgIHsgdG9wOjA7IHJpZ2h0OjA7IGJvdHRvbTowOyB9DQouXFwtcGluLWJvdHRvbXJpZ2h0IHsgYm90dG9tOjA7IHJpZ2h0OjA7IH0NCi5cXC1waW4tYm90dG9tbGVmdCAgeyBib3R0b206MDsgbGVmdDowOyB9DQouXFwtcGluLXRvcHJpZ2h0ICAgIHsgdG9wOjA7IHJpZ2h0OjA7IH0NCi5cXC1waW4tdG9wbGVmdCAgICAgeyB0b3A6MDsgbGVmdDowOyB9DQoNCi8qIEZpeGVkIGNvbnRhaW5lcnMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi5cXC1maXhlZC10b3AsDQouXFwtZml4ZWQtcmlnaHQsDQouXFwtZml4ZWQtYm90dG9tLA0KLlxcLWZpeGVkLWxlZnQsDQouXFwtZml4ZWQtdG9wbGVmdCwNCi5cXC1maXhlZC10b3ByaWdodCwNCi5cXC1maXhlZC1ib3R0b21sZWZ0LA0KLlxcLWZpeGVkLWJvdHRvbXJpZ2h0IHsNCiAgcG9zaXRpb246Zml4ZWQ7DQp9DQouXFwtZml4ZWQtYm90dG9tIHsgcmlnaHQ6MDsgYm90dG9tOjA7IGxlZnQ6MDsgfQ0KLlxcLWZpeGVkLXRvcCAgICB7IHRvcDowOyByaWdodDowOyBsZWZ0OjA7IH0NCi5cXC1maXhlZC1sZWZ0ICAgeyB0b3A6MDsgYm90dG9tOjA7IGxlZnQ6MDsgfQ0KLlxcLWZpeGVkLXJpZ2h0ICB7IHRvcDowOyByaWdodDowOyBib3R0b206MDsgfQ0KLlxcLWZpeGVkLWJvdHRvbXJpZ2h0IHsgYm90dG9tOjA7IHJpZ2h0OjA7IH0NCi5cXC1maXhlZC1ib3R0b21sZWZ0ICB7IGJvdHRvbTowOyBsZWZ0OjA7IH0NCi5cXC1maXhlZC10b3ByaWdodCAgICB7IHRvcDowOyByaWdodDowOyB9DQouXFwtZml4ZWQtdG9wbGVmdCAgICAgeyB0b3A6MDsgbGVmdDowOyB9DQoNCi8qIEFkZGl0aW9uYWwgVXRpbGl0eSBDbGFzc2VzDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQouXFwtZnINCnsNCiAgZmxvYXQ6IHJpZ2h0Ow0KfQ0KDQouXFwtZmwNCnsNCiAgZmxvYXQ6IGxlZnQ7DQp9DQoNCi5cXC11bmZsb2F0DQp7DQogIGZsb2F0OiBub25lOw0KfQ0KDQouXFwtZG90DQp7DQogIGJvcmRlci1yYWRpdXM6IDUwJTsNCn0NCg0KLlxcLXF1aWV0DQp7DQogIGNvbG9yOiAjN0Y3RjdGOw0KICBjb2xvcjogcmdiYSgwLCAwLCAwLCAuNSk7DQp9DQoNCi5cXC1kYXJrIC5xdWlldA0Kew0KICBjb2xvcjogIzdGN0Y3RjsNCiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjUpOw0KfQ0KDQouXFwtY2VudGVyDQp7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KLlxcLWNvbnRhaW4NCnsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KfQ0KDQouXFwtY2xpcA0Kew0KICBvdmVyZmxvdzogaGlkZGVuOw0KfQ0KDQouXFwtaGlkZGVuLmhpZGRlbg0Kew0KICBkaXNwbGF5OiBub25lOw0KfQ0KDQouXFwtdGV4dC1sZWZ0DQp7DQogIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCi5cXC10ZXh0LXJpZ2h0DQp7DQogIHRleHQtYWxpZ246IHJpZ2h0Ow0KfQ0KDQouXFwtc3BhY2UgPiAqDQp7DQogIG1hcmdpbi1yaWdodDogNXB4Ow0KfQ0KDQouXFwtaGlkZS10YWJsZXQsIC5oaWRlLW1vYmlsZQ0Kew0KICBkaXNwbGF5OiBibG9jazsNCn0NCg0KLlxcLXNob3ctdGFibGV0LCAuc2hvdy1tb2JpbGUNCnsNCiAgZGlzcGxheTogbm9uZTsNCn0NCg0KLlxcLXNob3ctbW9iaWxlDQp7DQogIGRpc3BsYXk6IG5vbmU7DQp9DQoNCi5cXC1zaG93LW1vYmlsZS5pbmxpbmUNCnsNCiAgZGlzcGxheTogbm9uZTsNCn0NCg0KaW1nLmlubGluZSwgLmlubGluZQ0Kew0KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQp9DQoNCi5cXC1icmVhay13b3JkDQp7DQogIHdvcmQtd3JhcDogYnJlYWstd29yZDsNCn0NCg0KLlxcLWFsaWduLW1pZGRsZQ0Kew0KICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KfQ0KDQouXFwtYWxpZ24tdG9wDQp7DQogIHZlcnRpY2FsLWFsaWduOiB0b3A7DQp9DQoNCi5cXC1ibG9jaw0Kew0KICBkaXNwbGF5OiBibG9jazsNCn0NCg0KLlxcLXNjcm9sbC1oDQp7DQogIG92ZXJmbG93LXg6IGF1dG87DQp9DQoNCi5cXC1zY3JvbGwtdg0Kew0KICBvdmVyZmxvdy15OiBhdXRvOw0KfQ0KDQouXFwtY2FwaXRhbGl6ZQ0Kew0KICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsNCn0NCg0KLlxcLXoxDQp7DQogIHotaW5kZXg6IDE7DQp9DQoNCi5cXC16Mg0Kew0KICB6LWluZGV4OiAyOw0KfQ0KDQouXFwtejgNCnsNCiAgei1pbmRleDogODsNCn0NCg0KLlxcLXoxMA0Kew0KICB6LWluZGV4OiAxMDsNCn0NCg0KLlxcLXoxMDANCnsNCiAgei1pbmRleDogMTAwOw0KfQ0KDQouXFwtcm91bmQNCnsNCiAgYm9yZGVyLXJhZGl1czogM3B4Ow0KfQ0KDQouXFwtcm91bmQtdG9wDQp7DQogIGJvcmRlci1yYWRpdXM6IDNweCAzcHggMCAwOw0KfQ0KDQouXFwtcm91bmQtcmlnaHQNCnsNCiAgYm9yZGVyLXJhZGl1czogMCAzcHggM3B4IDA7DQp9DQoNCi5cXC1yb3VuZC1ib3R0b20NCnsNCiAgYm9yZGVyLXJhZGl1czogMCAwIDNweCAzcHg7DQp9DQoNCi5cXC1yb3VuZC1sZWZ0DQp7DQogIGJvcmRlci1yYWRpdXM6IDNweCAwIDAgM3B4Ow0KfQ0KDQouXFwtcm91bmQtdG9wbGVmdA0Kew0KICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7DQp9DQoNCi5cXC1yb3VuZC1ib3R0b21sZWZ0DQp7DQogIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDsNCn0NCg0KLlxcLXJvdW5kLXRvcHJpZ2h0DQp7DQogIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7DQp9DQoNCi5cXC1yb3VuZC1ib3R0b21yaWdodA0Kew0KICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4Ow0KfQ0KDQouXFwtc2hhZG93DQp7DQogIGJveC1zaGFkb3c6IDAgMCAyNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE1KTsNCn0NCg0KLlxcLXVwcGVyY2FzZQ0Kew0KICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOw0KfQ0KDQouXFwtbm9ldmVudHMNCnsNCiAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQp9DQoNCi5cXC11bnJvdW5kLA0KLlxcLXBpbGwudW5yb3VuZCAudW5yb3VuZA0Kew0KICBib3JkZXItcmFkaXVzOiAwOw0KfQ0KDQouXFwtY2FwdGlvbg0Kew0KICBkaXNwbGF5OiBibG9jazsNCn0NCg0KLlxcLXByb3NlIC5jYXB0aW9uDQp7DQogIGZvbnQtc2l6ZTogMTJweDsNCiAgbWFyZ2luOiAtMjBweCAwIDIwcHgNCn0NCg0KLlxcLXRydW5jYXRlDQp7DQogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOw0KICB3aGl0ZS1zcGFjZTogbm93cmFwOw0KICBvdmVyZmxvdzogaGlkZGVuOw0KfQ0KDQovKiBDU1MgQW5pbWF0aW9ucy9UcmFuc2l0aW9ucw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi5cXC1hbmltYXRlIHsNCiAgLXdlYmtpdC10cmFuc2l0aW9uOmFsbCAuMTI1czsNCiAgLW1vei10cmFuc2l0aW9uOmFsbCAuMTI1czsNCiAgLW1zLXRyYW5zaXRpb246YWxsIC4xMjVzOw0KICB0cmFuc2l0aW9uOmFsbCAuMTI1czsNCn0NCg0KLlxcLW9mZmNhbnZhcy10b3AgICAgew0KICAtd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDAlKTsNCiAgLW1vei10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSk7DQogIC1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSk7DQogIHRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDAlKTsNCn0NCi5cXC1vZmZjYW52YXMtcmlnaHQgIHsNCiAgLXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKTsNCiAgLW1vei10cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKTsNCiAgLW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpOw0KICB0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKTsNCn0NCi5cXC1vZmZjYW52YXMtYm90dG9tIHsNCiAgLXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgxMDAlKTsNCiAgLW1vei10cmFuc2Zvcm06dHJhbnNsYXRlWSgxMDAlKTsNCiAgLW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpOw0KICB0cmFuc2Zvcm06dHJhbnNsYXRlWSgxMDAlKTsNCn0NCi5cXC1vZmZjYW52YXMtbGVmdCAgIHsNCiAgLXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSk7DQogIC1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpOw0KICAtbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpOw0KICB0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSk7DQp9DQoNCi5cXC1vZmZjYW52YXMtdG9wLmFjdGl2ZSwNCi5cXC1vZmZjYW52YXMtYm90dG9tLmFjdGl2ZSwNCi5cXC1vZmZjYW52YXMtdG9wOnRhcmdldCwNCi5cXC1vZmZjYW52YXMtYm90dG9tOnRhcmdldCB7DQogIC13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCk7DQogIC1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCk7DQogIC1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgwKTsNCiAgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCk7DQp9DQoNCi5cXC1vZmZjYW52YXMtbGVmdC5hY3RpdmUsDQouXFwtb2ZmY2FudmFzLXJpZ2h0LmFjdGl2ZSwNCi5cXC1vZmZjYW52YXMtbGVmdDp0YXJnZXQsDQouXFwtb2ZmY2FudmFzLXJpZ2h0OnRhcmdldCB7DQogIC13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCk7DQogIC1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCk7DQogIC1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWCgwKTsNCiAgdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCk7DQp9DQoNCi8qIFNsaWRpbmcgcGFuZXMgKi8NCi5cXC1zbGlkaW5nICAgICAgIHsgcG9zaXRpb246cmVsYXRpdmU7IH0NCi5cXC1zbGlkaW5nID4gKiAgIHsgcG9zaXRpb246YWJzb2x1dGU7IH0NCi5cXC1zbGlkaW5nLmggPiAqIHsNCiAgLXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSk7DQogIC1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpOw0KICAtbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpOw0KICB0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSk7DQp9DQouXFwtc2xpZGluZy52ID4gKiB7DQogIC13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEwMCUpOw0KICAtbW96LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDAlKTsNCiAgLW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDAlKTsNCiAgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEwMCUpOw0KfQ0KLlxcLXNsaWRpbmcuaC5hY3RpdmUxID4gKjpudGgtY2hpbGQoICAgMSksDQouXFwtc2xpZGluZy5oLmFjdGl2ZTIgPiAqOm50aC1jaGlsZCggICAyKSwNCi5cXC1zbGlkaW5nLmguYWN0aXZlMyA+ICo6bnRoLWNoaWxkKCAgIDMpLA0KLlxcLXNsaWRpbmcuaC5hY3RpdmU0ID4gKjpudGgtY2hpbGQoICAgNCksDQouXFwtc2xpZGluZy5oLmFjdGl2ZTUgPiAqOm50aC1jaGlsZCggICA1KSwNCi5cXC1zbGlkaW5nLmguYWN0aXZlNiA+ICo6bnRoLWNoaWxkKCAgIDYpLA0KLlxcLXNsaWRpbmcuaC5hY3RpdmU3ID4gKjpudGgtY2hpbGQoICAgNyksDQouXFwtc2xpZGluZy5oLmFjdGl2ZTggPiAqOm50aC1jaGlsZCggICA4KSwNCi5cXC1zbGlkaW5nLmguYWN0aXZlOSA+ICo6bnRoLWNoaWxkKCAgIDkpIHsNCiAgLXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgwJSk7DQogIC1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCUpOw0KICAtbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCUpOw0KICB0cmFuc2Zvcm06dHJhbnNsYXRlWCgwJSk7DQp9DQouXFwtc2xpZGluZy5oLmFjdGl2ZTEgPiAqOm50aC1jaGlsZCggbisyKSwNCi5cXC1zbGlkaW5nLmguYWN0aXZlMiA+ICo6bnRoLWNoaWxkKCBuKzMpLA0KLlxcLXNsaWRpbmcuaC5hY3RpdmUzID4gKjpudGgtY2hpbGQoIG4rNCksDQouXFwtc2xpZGluZy5oLmFjdGl2ZTQgPiAqOm50aC1jaGlsZCggbis1KSwNCi5cXC1zbGlkaW5nLmguYWN0aXZlNSA+ICo6bnRoLWNoaWxkKCBuKzYpLA0KLlxcLXNsaWRpbmcuaC5hY3RpdmU2ID4gKjpudGgtY2hpbGQoIG4rNyksDQouXFwtc2xpZGluZy5oLmFjdGl2ZTcgPiAqOm50aC1jaGlsZCggbis4KSwNCi5cXC1zbGlkaW5nLmguYWN0aXZlOCA+ICo6bnRoLWNoaWxkKCBuKzkpLA0KLlxcLXNsaWRpbmcuaC5hY3RpdmU5ID4gKjpudGgtY2hpbGQobisxMCkgew0KICAtd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpOw0KICAtbW96LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpOw0KICAtbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTAwJSk7DQogIHRyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpOw0KfQ0KDQouXFwtc2xpZGluZy52LmFjdGl2ZTEgPiAqOm50aC1jaGlsZCggICAxKSwNCi5cXC1zbGlkaW5nLnYuYWN0aXZlMiA+ICo6bnRoLWNoaWxkKCAgIDIpLA0KLlxcLXNsaWRpbmcudi5hY3RpdmUzID4gKjpudGgtY2hpbGQoICAgMyksDQouXFwtc2xpZGluZy52LmFjdGl2ZTQgPiAqOm50aC1jaGlsZCggICA0KSwNCi5cXC1zbGlkaW5nLnYuYWN0aXZlNSA+ICo6bnRoLWNoaWxkKCAgIDUpLA0KLlxcLXNsaWRpbmcudi5hY3RpdmU2ID4gKjpudGgtY2hpbGQoICAgNiksDQouXFwtc2xpZGluZy52LmFjdGl2ZTcgPiAqOm50aC1jaGlsZCggICA3KSwNCi5cXC1zbGlkaW5nLnYuYWN0aXZlOCA+ICo6bnRoLWNoaWxkKCAgIDgpLA0KLlxcLXNsaWRpbmcudi5hY3RpdmU5ID4gKjpudGgtY2hpbGQoICAgOSksDQouXFwtc2xpZGluZy52LmFjdGl2ZTEwPiAqOm50aC1jaGlsZCggIDEwKSwNCi5cXC1zbGlkaW5nLnYuYWN0aXZlMTE+ICo6bnRoLWNoaWxkKCAgMTEpLA0KLlxcLXNsaWRpbmcudi5hY3RpdmUxMj4gKjpudGgtY2hpbGQoICAxMiksDQouXFwtc2xpZGluZy52LmFjdGl2ZTEzPiAqOm50aC1jaGlsZCggIDEzKSwNCi5cXC1zbGlkaW5nLnYuYWN0aXZlMTQ+ICo6bnRoLWNoaWxkKCAgMTQpLA0KLlxcLXNsaWRpbmcudi5hY3RpdmUxNT4gKjpudGgtY2hpbGQoICAxNSksDQouXFwtc2xpZGluZy52LmFjdGl2ZTE2PiAqOm50aC1jaGlsZCggIDE2KSwNCi5cXC1zbGlkaW5nLnYuYWN0aXZlMTc+ICo6bnRoLWNoaWxkKCAgMTcpLA0KLlxcLXNsaWRpbmcudi5hY3RpdmUxOD4gKjpudGgtY2hpbGQoICAxOCksDQouXFwtc2xpZGluZy52LmFjdGl2ZTE5PiAqOm50aC1jaGlsZCggIDE5KSwNCi5cXC1zbGlkaW5nLnYuYWN0aXZlMjA+ICo6bnRoLWNoaWxkKCAgMjApDQp7DQogIC13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCUpOw0KICAtbW96LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDAlKTsNCiAgLW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKDAlKTsNCiAgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCUpOw0KfQ0KLlxcLXNsaWRpbmcudi5hY3RpdmUxID4gKjpudGgtY2hpbGQoIG4rMiksDQouXFwtc2xpZGluZy52LmFjdGl2ZTIgPiAqOm50aC1jaGlsZCggbiszKSwNCi5cXC1zbGlkaW5nLnYuYWN0aXZlMyA+ICo6bnRoLWNoaWxkKCBuKzQpLA0KLlxcLXNsaWRpbmcudi5hY3RpdmU0ID4gKjpudGgtY2hpbGQoIG4rNSksDQouXFwtc2xpZGluZy52LmFjdGl2ZTUgPiAqOm50aC1jaGlsZCggbis2KSwNCi5cXC1zbGlkaW5nLnYuYWN0aXZlNiA+ICo6bnRoLWNoaWxkKCBuKzcpLA0KLlxcLXNsaWRpbmcudi5hY3RpdmU3ID4gKjpudGgtY2hpbGQoIG4rOCksDQouXFwtc2xpZGluZy52LmFjdGl2ZTggPiAqOm50aC1jaGlsZCggbis5KSwNCi5cXC1zbGlkaW5nLnYuYWN0aXZlOSA+ICo6bnRoLWNoaWxkKG4rMTApLA0KLlxcLXNsaWRpbmcudi5hY3RpdmUxMD4gKjpudGgtY2hpbGQobisxMSksDQouXFwtc2xpZGluZy52LmFjdGl2ZTExPiAqOm50aC1jaGlsZChuKzEyKSwNCi5cXC1zbGlkaW5nLnYuYWN0aXZlMTI+ICo6bnRoLWNoaWxkKG4rMTMpLA0KLlxcLXNsaWRpbmcudi5hY3RpdmUxMz4gKjpudGgtY2hpbGQobisxNCksDQouXFwtc2xpZGluZy52LmFjdGl2ZTE0PiAqOm50aC1jaGlsZChuKzE1KSwNCi5cXC1zbGlkaW5nLnYuYWN0aXZlMTU+ICo6bnRoLWNoaWxkKG4rMTYpLA0KLlxcLXNsaWRpbmcudi5hY3RpdmUxNj4gKjpudGgtY2hpbGQobisxNyksDQouXFwtc2xpZGluZy52LmFjdGl2ZTE3PiAqOm50aC1jaGlsZChuKzE4KSwNCi5cXC1zbGlkaW5nLnYuYWN0aXZlMTg+ICo6bnRoLWNoaWxkKG4rMTkpLA0KLlxcLXNsaWRpbmcudi5hY3RpdmUxOT4gKjpudGgtY2hpbGQobisyMCksDQouXFwtc2xpZGluZy52LmFjdGl2ZTIwPiAqOm50aC1jaGlsZChuKzIxKQ0Kew0KICAtd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpOw0KICAtbW96LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpOw0KICAtbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTAwJSk7DQogIHRyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpOw0KfQ0KDQovKiBGaWxscw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi5cXC1maWxsLWRhcmsgICAgICAgIHsgYmFja2dyb3VuZC1jb2xvcjojNDA0MDQwOyB9DQouXFwtZmlsbC1ncmF5LA0KLlxcLWZpbGwtZ3JleSAgICAgICAgeyBiYWNrZ3JvdW5kOiNlZWU7IH0NCi5cXC1maWxsLWdyZXktZGFyaywNCi5cXC1maWxsLWdyYXktZGFyayAgIHsgYmFja2dyb3VuZDojNDA0MDQwOyB9DQouXFwtZmlsbC13aGl0ZSAgICAgICB7IGJhY2tncm91bmQ6I2ZmZjsgfQ0KLlxcLWZpbGwtbGlnaHQgICAgICAgeyBiYWNrZ3JvdW5kOiNmOGY4Zjg7IH0NCi8qIGRlcHJlY2F0ZWQsIHVzZSBmaWxsLWN5YW4gKi8NCi5cXC1maWxsLWJsdWUtbGlnaHQgIHsgYmFja2dyb3VuZDojNTJhMWQ4OyB9DQouXFwtZmlsbC1jeWFuICAgICAgICB7IGJhY2tncm91bmQ6IzNiYjJkMDsgfQ0KLlxcLWZpbGwtbWlkbmlnaHQgICAgeyBiYWNrZ3JvdW5kOiMxNDI3MzY7IH0NCg0KLlxcLWZpbGwtYmx1ZSAgICAgICAgeyBiYWNrZ3JvdW5kOiMzODg3YmU7IH0NCi5cXC1maWxsLWRlbmltICAgICAgIHsgYmFja2dyb3VuZDojNTA2NjdmOyB9DQouXFwtZmlsbC1uYXZ5ICAgICAgICB7IGJhY2tncm91bmQ6IzI4MzUzZDsgfQ0KLlxcLWZpbGwtbmF2eS1kYXJrICAgeyBiYWNrZ3JvdW5kOiMyMjJCMzA7IH0NCi5cXC1maWxsLXB1cnBsZSAgICAgIHsgYmFja2dyb3VuZDojOGE4YWNiOyB9DQouXFwtZmlsbC1ncmVlbiAgICAgICB7IGJhY2tncm91bmQ6IzU2Yjg4MTsgfQ0KLlxcLWZpbGwteWVsbG93ICAgICAgeyBiYWNrZ3JvdW5kOiNmMWYwNzU7IH0NCi5cXC1maWxsLW9yYW5nZSAgICAgIHsgYmFja2dyb3VuZDojZjk4ODZjOyB9DQoNCi5cXC1maWxsLWRhcmtibHVlICAgIHsgYmFja2dyb3VuZC1jb2xvcjojMjIzYjUzOyB9DQouXFwtZmlsbC1yZWQgICAgICAgICB7IGJhY2tncm91bmQtY29sb3I6I2U1NWU1ZTsgfQ0KLlxcLWZpbGwtdGVhbCAgICAgICAgeyBiYWNrZ3JvdW5kLWNvbG9yOiM0MWFmYTU7IH0NCi5cXC1maWxsLXBpbmsgICAgICAgIHsgYmFja2dyb3VuZC1jb2xvcjojZWQ2NDk4OyB9DQouXFwtZmlsbC1tdXN0YXJkICAgICB7IGJhY2tncm91bmQtY29sb3I6I2ZiYjAzYjsgfQ0KDQouXFwtZmlsbC1kYXJrZW4wIHsgYmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuMDUpOyB9DQouXFwtZmlsbC1kYXJrZW4xIHsgYmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuMjUpOyB9DQouXFwtZmlsbC1kYXJrZW4yIHsgYmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuNTApOyB9DQouXFwtZmlsbC1kYXJrZW4zIHsgYmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuNzUpOyB9DQoNCi5cXC1maWxsLWxpZ2h0ZW4wIHsgYmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuMTApOyB9DQouXFwtZmlsbC1saWdodGVuMSB7IGJhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwwLjI1KTsgfQ0KLlxcLWZpbGwtbGlnaHRlbjIgeyBiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsMC41MCk7IH0NCi5cXC1maWxsLWxpZ2h0ZW4zIHsgYmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuNzUpOyB9]]></data>
	</file>
	<file>
	  <filename>/css/backslash/bs/lib/mt-grid.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[QGltcG9ydCAiZ3JpZC11dGlscy5jc3MiOw0KQGltcG9ydCAiZ3JpZC5jc3MiOw0KQGltcG9ydCAic20tZ3JpZC5jc3MiOw0KQGltcG9ydCAibWQtZ3JpZC5jc3MiOw0KQGltcG9ydCAibGctZ3JpZC5jc3MiOw0KDQpAY3VzdG9tLW1lZGlhIC0tYnJlYWtwb2ludC1zbSAobWluLXdpZHRoOiA0MGVtKTsNCkBjdXN0b20tbWVkaWEgLS1icmVha3BvaW50LW1kIChtaW4td2lkdGg6IDUyZW0pOw0KQGN1c3RvbS1tZWRpYSAtLWJyZWFrcG9pbnQtbGcgKG1pbi13aWR0aDogNjRlbSk7]]></data>
	</file>
	<file>
	  <filename>/css/backslash/bs/lib/sm-grid.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[QG1lZGlhICgtLWJyZWFrcG9pbnQtc20pIHsKCiAgLlxcLXNtLWNvbCB7CiAgICBmbG9hdDogbGVmdDsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgfQoKICAuXFwtc20tY29sLXJpZ2h0IHsKICAgIGZsb2F0OiByaWdodDsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgfQoKICAuXFwtc20tY29sLTEgewogICAgd2lkdGg6IGNhbGMoMS8xMiAqIDEwMCUpOwogIH0KCiAgLlxcLXNtLWNvbC0yIHsKICAgIHdpZHRoOiBjYWxjKDIvMTIgKiAxMDAlKTsKICB9CgogIC5cXC1zbS1jb2wtMyB7CiAgICB3aWR0aDogY2FsYygzLzEyICogMTAwJSk7CiAgfQoKICAuXFwtc20tY29sLTQgewogICAgd2lkdGg6IGNhbGMoNC8xMiAqIDEwMCUpOwogIH0KCiAgLlxcLXNtLWNvbC01IHsKICAgIHdpZHRoOiBjYWxjKDUvMTIgKiAxMDAlKTsKICB9CgogIC5cXC1zbS1jb2wtNiB7CiAgICB3aWR0aDogY2FsYyg2LzEyICogMTAwJSk7CiAgfQoKICAuXFwtc20tY29sLTcgewogICAgd2lkdGg6IGNhbGMoNy8xMiAqIDEwMCUpOwogIH0KCiAgLlxcLXNtLWNvbC04IHsKICAgIHdpZHRoOiBjYWxjKDgvMTIgKiAxMDAlKTsKICB9CgogIC5cXC1zbS1jb2wtOSB7CiAgICB3aWR0aDogY2FsYyg5LzEyICogMTAwJSk7CiAgfQoKICAuXFwtc20tY29sLTEwIHsKICAgIHdpZHRoOiBjYWxjKDEwLzEyICogMTAwJSk7CiAgfQoKICAuXFwtc20tY29sLTExIHsKICAgIHdpZHRoOiBjYWxjKDExLzEyICogMTAwJSk7CiAgfQoKICAuXFwtc20tY29sLTEyIHsKICAgIHdpZHRoOiAxMDAlOwogIH0KCn0KCg==]]></data>
	</file>
	<file>
	  <filename>/css/backslash/bs/lib/xtra.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LlxcLWltZy1yZXNwb25zaXZlIHsNCiAgZGlzcGxheTogYmxvY2s7DQogIGhlaWdodDogYXV0bzsNCiAgbWF4LXdpZHRoOiAxMDAlOw0KfQ0KDQouXFwtaW1nLWZpdC1jb3ZlciB7DQogIG9iamVjdC1maXQ6IGNvdmVyOw0KfQ0KDQouXFwtaW1nLWZpdC1jb250YWluIHsNCiAgb2JqZWN0LWZpdDogY29udGFpbjsNCn0NCg0KLlxcLXZpZGVvLXJlc3BvbnNpdmUgew0KICBkaXNwbGF5OiBibG9jazsNCiAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgcGFkZGluZzogMDsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICB3aWR0aDogMTAwJTsNCn0NCg0KLlxcLXZpZGVvLXJlc3BvbnNpdmU6OmJlZm9yZSB7DQogIGNvbnRlbnQ6ICIiOw0KICBkaXNwbGF5OiBibG9jazsNCiAgcGFkZGluZy1ib3R0b206IDU2LjI1JTsNCn0NCg0KLlxcLXZpZGVvLXJlc3BvbnNpdmUgaWZyYW1lLA0KLlxcLXZpZGVvLXJlc3BvbnNpdmUgb2JqZWN0LA0KLlxcLXZpZGVvLXJlc3BvbnNpdmUgZW1iZWQgew0KICBib3JkZXI6IDA7DQogIGJvdHRvbTogMDsNCiAgaGVpZ2h0OiAxMDAlOw0KICBsZWZ0OiAwOw0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIHJpZ2h0OiAwOw0KICB0b3A6IDA7DQogIHdpZHRoOiAxMDAlOw0KfQ0KDQp2aWRlby5cXC12aWRlby1yZXNwb25zaXZlIHsNCiAgaGVpZ2h0OiBhdXRvOw0KICBtYXgtd2lkdGg6IDEwMCU7DQp9DQoNCnZpZGVvLlxcLXZpZGVvLXJlc3BvbnNpdmU6OmJlZm9yZSB7DQogIGNvbnRlbnQ6IG5vbmU7DQp9DQoNCi5cXC12aWRlby1yZXNwb25zaXZlLTQtMzo6YmVmb3JlIHsNCiAgcGFkZGluZy1ib3R0b206IDc1JTsNCn0NCg0KLlxcLXZpZGVvLXJlc3BvbnNpdmUtMS0xOjpiZWZvcmUgew0KICBwYWRkaW5nLWJvdHRvbTogMTAwJTsNCn0NCg0KDQouXFwtZmlndXJlIHsNCiAgbWFyZ2luOiAwIDAgLjRyZW0gMDsNCn0NCg0KLlxcLWZpZ3VyZSAuXFwtZmlndXJlLWNhcHRpb24gew0KICBjb2xvcjogIzY2NzU4YzsNCiAgbWFyZ2luLXRvcDogLjRyZW07DQp9DQoNCi5cXC1hdmF0YXIgew0KICBiYWNrZ3JvdW5kOiAjNTc1NWQ5Ow0KICBib3JkZXItcmFkaXVzOiA1MCU7DQogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIC44NSk7DQogIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgZm9udC1zaXplOiAuOHJlbTsNCiAgZm9udC13ZWlnaHQ6IDMwMDsNCiAgaGVpZ2h0OiAxLjZyZW07DQogIGxpbmUtaGVpZ2h0OiAxLjI1Ow0KICBtYXJnaW46IDA7DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsNCiAgd2lkdGg6IDEuNnJlbTsNCn0NCg0KLlxcLWF2YXRhci5cXC1hdmF0YXIteHMgew0KICBmb250LXNpemU6IC40cmVtOw0KICBoZWlnaHQ6IC44cmVtOw0KICB3aWR0aDogLjhyZW07DQp9DQoNCi5cXC1hdmF0YXIuXFwtYXZhdGFyLXNtIHsNCiAgZm9udC1zaXplOiAuNnJlbTsNCiAgaGVpZ2h0OiAxLjJyZW07DQogIHdpZHRoOiAxLjJyZW07DQp9DQoNCi5cXC1hdmF0YXIuXFwtYXZhdGFyLWxnIHsNCiAgZm9udC1zaXplOiAxLjJyZW07DQogIGhlaWdodDogMi40cmVtOw0KICB3aWR0aDogMi40cmVtOw0KfQ0KDQouXFwtYXZhdGFyLlxcLWF2YXRhci14bCB7DQogIGZvbnQtc2l6ZTogMS42cmVtOw0KICBoZWlnaHQ6IDMuMnJlbTsNCiAgd2lkdGg6IDMuMnJlbTsNCn0NCg0KLlxcLWF2YXRhciBpbWcgew0KICBib3JkZXItcmFkaXVzOiA1MCU7DQogIGhlaWdodDogMTAwJTsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICB3aWR0aDogMTAwJTsNCiAgei1pbmRleDogMTsNCn0NCg0KLlxcLWF2YXRhciAuXFwtYXZhdGFyLWljb24sDQouXFwtYXZhdGFyIC5cXC1hdmF0YXItcHJlc2VuY2Ugew0KICBiYWNrZ3JvdW5kOiAjZmZmOw0KICBib3R0b206IDE0LjY0JTsNCiAgaGVpZ2h0OiA1MCU7DQogIHBhZGRpbmc6IC4xcmVtOw0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIHJpZ2h0OiAxNC42NCU7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlKDUwJSwgNTAlKTsNCiAgd2lkdGg6IDUwJTsNCiAgei1pbmRleDogMjsNCn0NCg0KLlxcLWF2YXRhciAuXFwtYXZhdGFyLXByZXNlbmNlIHsNCiAgYmFja2dyb3VuZDogI2JjYzNjZTsNCiAgYm9yZGVyLXJhZGl1czogNTAlOw0KICBib3gtc2hhZG93OiAwIDAgMCAuMXJlbSAjZmZmOw0KICBoZWlnaHQ6IC41ZW07DQogIHdpZHRoOiAuNWVtOw0KfQ0KDQouXFwtYXZhdGFyIC5cXC1hdmF0YXItcHJlc2VuY2Uub25saW5lIHsNCiAgYmFja2dyb3VuZDogIzMyYjY0MzsNCn0NCg0KLlxcLWF2YXRhciAuXFwtYXZhdGFyLXByZXNlbmNlLmJ1c3kgew0KICBiYWNrZ3JvdW5kOiAjZTg1NjAwOw0KfQ0KDQouXFwtYXZhdGFyIC5cXC1hdmF0YXItcHJlc2VuY2UuYXdheSB7DQogIGJhY2tncm91bmQ6ICNmZmI3MDA7DQp9DQoNCi5cXC1hdmF0YXJbZGF0YS1pbml0aWFsXTo6YmVmb3JlIHsNCiAgY29sb3I6IGN1cnJlbnRDb2xvcjsNCiAgY29udGVudDogYXR0cihkYXRhLWluaXRpYWwpOw0KICBsZWZ0OiA1MCU7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgdG9wOiA1MCU7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOw0KICB6LWluZGV4OiAxOw0KfQ0KDQouXFwtYmFkZ2UgIHsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICB3aGl0ZS1zcGFjZTogbm93cmFwOw0KfQ0KDQouXFwtYmFkZ2UgW2RhdGEtYmFkZ2VdOjphZnRlciwNCi5cXC1iYWRnZSA6bm90KFtkYXRhLWJhZGdlXSk6OmFmdGVyIHsNCiAgYmFja2dyb3VuZDogIzU3NTVkOTsNCiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsNCiAgYm9yZGVyLXJhZGl1czogLjVyZW07DQogIGJveC1zaGFkb3c6IDAgMCAwIC4xcmVtICNmZmY7DQogIGNvbG9yOiAjZmZmOw0KICBjb250ZW50OiBhdHRyKGRhdGEtYmFkZ2UpOw0KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0uMDVyZW0sIC0uNXJlbSk7DQp9DQoNCi5cXC1iYWRnZSBbZGF0YS1iYWRnZV06OmFmdGVyIHsNCiAgZm9udC1zaXplOiAuN3JlbTsNCiAgaGVpZ2h0OiAuOXJlbTsNCiAgbGluZS1oZWlnaHQ6IDE7DQogIG1pbi13aWR0aDogLjlyZW07DQogIHBhZGRpbmc6IC4xcmVtIC4ycmVtOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIHdoaXRlLXNwYWNlOiBub3dyYXA7DQp9DQoNCi5cXC1iYWRnZSA6bm90KFtkYXRhLWJhZGdlXSk6OmFmdGVyLA0KLlxcLWJhZGdlIFtkYXRhLWJhZGdlPSIiXTo6YWZ0ZXIgew0KICBoZWlnaHQ6IDZweDsNCiAgbWluLXdpZHRoOiA2cHg7DQogIHBhZGRpbmc6IDA7DQogIHdpZHRoOiA2cHg7DQp9DQoNCi5cXC1iYWRnZSAuYnRuOjphZnRlciB7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgcmlnaHQ6IDA7DQogIHRvcDogMDsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNTAlLCAtNTAlKTsNCn0NCg0KLlxcLWJhZGdlIC5cXC1hdmF0YXI6OmFmdGVyIHsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICByaWdodDogMTQuNjQlOw0KICB0b3A6IDE0LjY0JTsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNTAlLCAtNTAlKTsNCiAgei1pbmRleDogMTAwOw0KfQ0KDQouXFwtYmFyIHsNCiAgYmFja2dyb3VuZDogI2VlZjBmMzsNCiAgYm9yZGVyLXJhZGl1czogLjFyZW07DQogIGRpc3BsYXk6IC1tcy1mbGV4Ym94Ow0KICBkaXNwbGF5OiBmbGV4Ow0KICAtbXMtZmxleC13cmFwOiBub3dyYXA7DQogIGZsZXgtd3JhcDogbm93cmFwOw0KICBoZWlnaHQ6IC44cmVtOw0KICB3aWR0aDogMTAwJTsNCn0NCg0KLlxcLWJhci5cXC1iYXItc20gew0KICBoZWlnaHQ6IC4ycmVtOw0KfQ0KDQouXFwtYmFyIC5cXC1iYXItaXRlbSB7DQogIGJhY2tncm91bmQ6ICM1NzU1ZDk7DQogIGNvbG9yOiAjZmZmOw0KICBkaXNwbGF5OiBibG9jazsNCiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7DQogIGZsZXgtc2hyaW5rOiAwOw0KICBmb250LXNpemU6IC43cmVtOw0KICBoZWlnaHQ6IDEwMCU7DQogIGxpbmUtaGVpZ2h0OiAuOHJlbTsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIHdpZHRoOiAwOw0KfQ0KDQouXFwtYmFyIC5cXC1iYXItaXRlbTpmaXJzdC1jaGlsZCB7DQogIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IC4xcmVtOw0KICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAuMXJlbTsNCn0NCg0KLlxcLWJhciAuXFwtYmFyLWl0ZW06bGFzdC1jaGlsZCB7DQogIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAuMXJlbTsNCiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IC4xcmVtOw0KICAtbXMtZmxleC1uZWdhdGl2ZTogMTsNCiAgZmxleC1zaHJpbms6IDE7DQp9DQoNCi5cXC1iYXItc2xpZGVyIHsNCiAgaGVpZ2h0OiAuMXJlbTsNCiAgbWFyZ2luOiAuNHJlbSAwOw0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQp9DQoNCi5cXC1iYXItc2xpZGVyIC5cXC1iYXItaXRlbSB7DQogIGxlZnQ6IDA7DQogIHBhZGRpbmc6IDA7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCn0NCg0KLlxcLWJhci1zbGlkZXIgLlxcLWJhci1pdGVtOm5vdCg6bGFzdC1jaGlsZCk6Zmlyc3QtY2hpbGQgew0KICBiYWNrZ3JvdW5kOiAjZWVmMGYzOw0KICB6LWluZGV4OiAxOw0KfQ0KDQouXFwtYmFyLXNsaWRlciAuXFwtYmFyLXNsaWRlci1idG4gew0KICBiYWNrZ3JvdW5kOiAjNTc1NWQ5Ow0KICBib3JkZXI6IDA7DQogIGJvcmRlci1yYWRpdXM6IDUwJTsNCiAgaGVpZ2h0OiAuNnJlbTsNCiAgcGFkZGluZzogMDsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICByaWdodDogMDsNCiAgdG9wOiA1MCU7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlKDUwJSwgLTUwJSk7DQogIHdpZHRoOiAuNnJlbTsNCn0NCg0KLlxcLWJhci1zbGlkZXIgLlxcLWJhci1zbGlkZXItYnRuOmFjdGl2ZSB7DQogIGJveC1zaGFkb3c6IDAgMCAwIC4xcmVtICM1NzU1ZDk7DQp9DQoNCi5cXC1jaGlwIHsNCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgYmFja2dyb3VuZDogI2VlZjBmMzsNCiAgYm9yZGVyLXJhZGl1czogNXJlbTsNCiAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94Ow0KICBkaXNwbGF5OiBpbmxpbmUtZmxleDsNCiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjsNCiAgZm9udC1zaXplOiA5MCU7DQogIGhlaWdodDogMS4ycmVtOw0KICBsaW5lLWhlaWdodDogLjhyZW07DQogIG1hcmdpbjogLjFyZW07DQogIG1heC13aWR0aDogMzIwcHg7DQogIG92ZXJmbG93OiBoaWRkZW47DQogIHBhZGRpbmc6IC4ycmVtIC40cmVtOw0KICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOw0KICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KICB3aGl0ZS1zcGFjZTogbm93cmFwOw0KfQ0KDQouXFwtY2hpcC5hY3RpdmUgew0KICBiYWNrZ3JvdW5kOiAjNTc1NWQ5Ow0KICBjb2xvcjogI2ZmZjsNCn0NCg0KLlxcLWNoaXAgLlxcLWF2YXRhciB7DQogIG1hcmdpbi1sZWZ0OiAtLjRyZW07DQogIG1hcmdpbi1yaWdodDogLjJyZW07DQp9DQoNCi5cXC1jaGlwIC5cXC1idG4tY2xlYXIgew0KICBib3JkZXItcmFkaXVzOiA1MCU7DQogIHRyYW5zZm9ybTogc2NhbGUoLjc1KTsNCn0NCg0KDQouXFwtZW1wdHkgew0KICBiYWNrZ3JvdW5kOiAjZjdmOGY5Ow0KICBib3JkZXItcmFkaXVzOiAuMXJlbTsNCiAgY29sb3I6ICM2Njc1OGM7DQogIHBhZGRpbmc6IDMuMnJlbSAxLjZyZW07DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KLlxcLWVtcHR5IC5cXC1lbXB0eS1pY29uIHsNCiAgbWFyZ2luLWJvdHRvbTogLjhyZW07DQp9DQoNCi5cXC1lbXB0eSAuXFwtZW1wdHktdGl0bGUsDQouXFwtZW1wdHkgLlxcLWVtcHR5LXN1YnRpdGxlIHsNCiAgbWFyZ2luOiAuNHJlbSBhdXRvOw0KfQ0KDQouXFwtZW1wdHkgLlxcLWVtcHR5LWFjdGlvbiB7DQogIG1hcmdpbi10b3A6IC44cmVtOw0KfQ0KDQouXFwtaWxhYmVsIHsNCiAgYmFja2dyb3VuZDogI2VlZjBmMzsNCiAgYm9yZGVyLXJhZGl1czogLjFyZW07DQogIGNvbG9yOiAjNDU1MDYwOw0KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogIGxpbmUtaGVpZ2h0OiAxLjI1Ow0KICBwYWRkaW5nOiAuMXJlbSAuMnJlbTsNCn0NCg0KLlxcLWlsYWJlbC5cXC1pbGFiZWwtcm91bmRlZCB7DQogIGJvcmRlci1yYWRpdXM6IDVyZW07DQogIHBhZGRpbmctbGVmdDogLjRyZW07DQogIHBhZGRpbmctcmlnaHQ6IC40cmVtOw0KfQ0KDQouXFwtaWxhYmVsLlxcLWlsYWJlbC1wcmltYXJ5IHsNCiAgYmFja2dyb3VuZDogIzU3NTVkOTsNCiAgY29sb3I6ICNmZmY7DQp9DQoNCi5cXC1pbGFiZWwuXFwtaWxhYmVsLXNlY29uZGFyeSB7DQogIGJhY2tncm91bmQ6ICNmMWYxZmM7DQogIGNvbG9yOiAjNTc1NWQ5Ow0KfQ0KDQouXFwtaWxhYmVsLlxcLWlsYWJlbC1zdWNjZXNzIHsNCiAgYmFja2dyb3VuZDogIzMyYjY0MzsNCiAgY29sb3I6ICNmZmY7DQp9DQoNCi5cXC1pbGFiZWwuXFwtaWxhYmVsLXdhcm5pbmcgew0KICBiYWNrZ3JvdW5kOiAjZmZiNzAwOw0KICBjb2xvcjogI2ZmZjsNCn0NCg0KLlxcLWhlcm8gew0KICBkaXNwbGF5OiAtbXMtZmxleGJveDsNCiAgZGlzcGxheTogZmxleDsNCiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47DQogIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47DQogIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7DQogIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsNCiAgcGFkZGluZy1ib3R0b206IDRyZW07DQogIHBhZGRpbmctdG9wOiA0cmVtOw0KfQ0KDQouXFwtaGVyby5cXC1oZXJvLXNtIHsNCiAgcGFkZGluZy1ib3R0b206IDJyZW07DQogIHBhZGRpbmctdG9wOiAycmVtOw0KfQ0KDQouXFwtaGVyby5cXC1oZXJvLWxnIHsNCiAgcGFkZGluZy1ib3R0b206IDhyZW07DQogIHBhZGRpbmctdG9wOiA4cmVtOw0KfQ0KDQouXFwtaGVybyAuXFwtaGVyby1ib2R5IHsNCiAgcGFkZGluZzogLjRyZW07DQp9DQoNCg0KLlxcLWFjY29yZGlvbiBpbnB1dDpjaGVja2VkIH4gLlxcLWFjY29yZGlvbi1oZWFkZXIgPiAuaWNvbjpmaXJzdC1jaGlsZCwNCi5cXC1hY2NvcmRpb25bb3Blbl0gLlxcLWFjY29yZGlvbi1oZWFkZXIgPiAuaWNvbjpmaXJzdC1jaGlsZCB7DQogIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsNCn0NCg0KLlxcLWFjY29yZGlvbiBpbnB1dDpjaGVja2VkIH4gLlxcLWFjY29yZGlvbi1ib2R5LA0KLlxcLWFjY29yZGlvbltvcGVuXSAuXFwtYWNjb3JkaW9uLWJvZHkgew0KICBtYXgtaGVpZ2h0OiA1MHJlbTsNCn0NCg0KLlxcLWFjY29yZGlvbiAuXFwtYWNjb3JkaW9uLWhlYWRlciB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBwYWRkaW5nOiAuMnJlbSAuNHJlbTsNCn0NCg0KLlxcLWFjY29yZGlvbiAuXFwtYWNjb3JkaW9uLWhlYWRlciAuaWNvbiB7DQogIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMjVzOw0KfQ0KDQouXFwtYWNjb3JkaW9uIC5cXC1hY2NvcmRpb24tYm9keSB7DQogIG1hcmdpbi1ib3R0b206IC40cmVtOw0KICBtYXgtaGVpZ2h0OiAwOw0KICBvdmVyZmxvdzogaGlkZGVuOw0KICB0cmFuc2l0aW9uOiBtYXgtaGVpZ2h0IC4yNXM7DQp9DQoNCnN1bW1hcnkuXFwtYWNjb3JkaW9uLWhlYWRlcjo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlciB7DQogIGRpc3BsYXk6IG5vbmU7DQp9DQoNCg0KDQouXFwtc2NhcmQgew0KICBiYWNrZ3JvdW5kOiAjZmZmOw0KICBib3JkZXI6IC4wNXJlbSBzb2xpZCAjZGFkZWU0Ow0KICBib3JkZXItcmFkaXVzOiAuMXJlbTsNCiAgZGlzcGxheTogLW1zLWZsZXhib3g7DQogIGRpc3BsYXk6IGZsZXg7DQogIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KfQ0KDQouXFwtc2NhcmQgLlxcLXNjYXJkLWhlYWRlciwNCi5cXC1zY2FyZCAuXFwtc2NhcmQtYm9keSwNCi5cXC1zY2FyZCAuXFwtc2NhcmQtZm9vdGVyIHsNCiAgcGFkZGluZzogLjhyZW07DQogIHBhZGRpbmctYm90dG9tOiAwOw0KfQ0KDQouXFwtc2NhcmQgLlxcLXNjYXJkLWhlYWRlcjpsYXN0LWNoaWxkLA0KLlxcLXNjYXJkIC5cXC1zY2FyZC1ib2R5Omxhc3QtY2hpbGQsDQouXFwtc2NhcmQgLlxcLXNjYXJkLWZvb3RlcjpsYXN0LWNoaWxkIHsNCiAgcGFkZGluZy1ib3R0b206IC44cmVtOw0KfQ0KDQouXFwtc2NhcmQgLlxcLXNjYXJkLWJvZHkgew0KICAtbXMtZmxleDogMSAxIGF1dG87DQogIGZsZXg6IDEgMSBhdXRvOw0KfQ0KDQouXFwtc2NhcmQgLlxcLXNjYXJkLWltYWdlIHsNCiAgcGFkZGluZy10b3A6IC44cmVtOw0KfQ0KDQouXFwtc2NhcmQgLlxcLXNjYXJkLWltYWdlOmZpcnN0LWNoaWxkIHsNCiAgcGFkZGluZy10b3A6IDA7DQp9DQoNCi5cXC1zY2FyZCAuXFwtc2NhcmQtaW1hZ2U6Zmlyc3QtY2hpbGQgaW1nIHsNCiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogLjFyZW07DQogIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAuMXJlbTsNCn0NCg0KLlxcLXNjYXJkIC5cXC1zY2FyZC1pbWFnZTpsYXN0LWNoaWxkIGltZyB7DQogIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IC4xcmVtOw0KICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogLjFyZW07DQp9DQoNCg0KLlxcLXBhbmVsIHsNCiAgYm9yZGVyOiAuMDVyZW0gc29saWQgI2RhZGVlNDsNCiAgYm9yZGVyLXJhZGl1czogLjFyZW07DQogIGRpc3BsYXk6IC1tcy1mbGV4Ym94Ow0KICBkaXNwbGF5OiBmbGV4Ow0KICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCn0NCg0KLlxcLXBhbmVsIC5cXC1wYW5lbC1oZWFkZXIsDQouXFwtcGFuZWwgLlxcLXBhbmVsLWZvb3RlciB7DQogIC1tcy1mbGV4OiAwIDAgYXV0bzsNCiAgZmxleDogMCAwIGF1dG87DQogIHBhZGRpbmc6IC44cmVtOw0KfQ0KDQouXFwtcGFuZWwgLlxcLXBhbmVsLW5hdiB7DQogIC1tcy1mbGV4OiAwIDAgYXV0bzsNCiAgZmxleDogMCAwIGF1dG87DQp9DQoNCi5cXC1wYW5lbCAuXFwtcGFuZWwtYm9keSB7DQogIC1tcy1mbGV4OiAxIDEgYXV0bzsNCiAgZmxleDogMSAxIGF1dG87DQogIG92ZXJmbG93LXk6IGF1dG87DQogIHBhZGRpbmc6IDAgLjhyZW07DQp9DQoNCg0KLlxcLXBvcG92ZXIgew0KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCn0NCg0KLlxcLXBvcG92ZXIgLlxcLXBvcG92ZXItY29udGFpbmVyIHsNCiAgbGVmdDogNTAlOw0KICBvcGFjaXR5OiAwOw0KICBwYWRkaW5nOiAuNHJlbTsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICB0b3A6IDA7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHNjYWxlKDApOw0KICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjJzOw0KICB3aWR0aDogMzIwcHg7DQogIHotaW5kZXg6IDMwMDsNCn0NCg0KLlxcLXBvcG92ZXIgKjpmb2N1cyArIC5cXC1wb3BvdmVyLWNvbnRhaW5lciwNCi5cXC1wb3BvdmVyOmhvdmVyIC5cXC1wb3BvdmVyLWNvbnRhaW5lciB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBvcGFjaXR5OiAxOw0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtMTAwJSkgc2NhbGUoMSk7DQp9DQoNCi5cXC1wb3BvdmVyLlxcLXBvcG92ZXItcmlnaHQgLlxcLXBvcG92ZXItY29udGFpbmVyIHsNCiAgbGVmdDogMTAwJTsNCiAgdG9wOiA1MCU7DQp9DQoNCi5cXC1wb3BvdmVyLlxcLXBvcG92ZXItcmlnaHQgKjpmb2N1cyArIC5cXC1wb3BvdmVyLWNvbnRhaW5lciwNCi5cXC1wb3BvdmVyLlxcLXBvcG92ZXItcmlnaHQ6aG92ZXIgLlxcLXBvcG92ZXItY29udGFpbmVyIHsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTUwJSkgc2NhbGUoMSk7DQp9DQoNCi5cXC1wb3BvdmVyLlxcLXBvcG92ZXItYm90dG9tIC5cXC1wb3BvdmVyLWNvbnRhaW5lciB7DQogIGxlZnQ6IDUwJTsNCiAgdG9wOiAxMDAlOw0KfQ0KDQouXFwtcG9wb3Zlci5cXC1wb3BvdmVyLWJvdHRvbSAqOmZvY3VzICsgLlxcLXBvcG92ZXItY29udGFpbmVyLA0KLlxcLXBvcG92ZXIuXFwtcG9wb3Zlci1ib3R0b206aG92ZXIgLlxcLXBvcG92ZXItY29udGFpbmVyIHsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgMCkgc2NhbGUoMSk7DQp9DQoNCi5cXC1wb3BvdmVyLlxcLXBvcG92ZXItbGVmdCAuXFwtcG9wb3Zlci1jb250YWluZXIgew0KICBsZWZ0OiAwOw0KICB0b3A6IDUwJTsNCn0NCg0KLlxcLXBvcG92ZXIuXFwtcG9wb3Zlci1sZWZ0ICo6Zm9jdXMgKyAuXFwtcG9wb3Zlci1jb250YWluZXIsDQouXFwtcG9wb3Zlci5cXC1wb3BvdmVyLWxlZnQ6aG92ZXIgLlxcLXBvcG92ZXItY29udGFpbmVyIHsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTEwMCUsIC01MCUpIHNjYWxlKDEpOw0KfQ0KDQouXFwtcG9wb3ZlciAuXFwtY2FyZCB7DQogIGJvcmRlcjogMDsNCiAgYm94LXNoYWRvdzogMCAuMnJlbSAuNXJlbSByZ2JhKDQ4LCA1NSwgNjYsIC4zKTsNCn0NCg0KLlxcLXN0ZXAgew0KICBkaXNwbGF5OiAtbXMtZmxleGJveDsNCiAgZGlzcGxheTogZmxleDsNCiAgLW1zLWZsZXgtd3JhcDogbm93cmFwOw0KICBmbGV4LXdyYXA6IG5vd3JhcDsNCiAgbGlzdC1zdHlsZTogbm9uZTsNCiAgbWFyZ2luOiAuMnJlbSAwOw0KICB3aWR0aDogMTAwJTsNCn0NCg0KLlxcLXN0ZXAgLlxcLXN0ZXAtaXRlbSB7DQogIC1tcy1mbGV4OiAxIDEgMDsNCiAgZmxleDogMSAxIDA7DQogIG1hcmdpbi10b3A6IDA7DQogIG1pbi1oZWlnaHQ6IDFyZW07DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQouXFwtc3RlcCAuXFwtc3RlcC1pdGVtOm5vdCg6Zmlyc3QtY2hpbGQpOjpiZWZvcmUgew0KICBiYWNrZ3JvdW5kOiAjNTc1NWQ5Ow0KICBjb250ZW50OiAiIjsNCiAgaGVpZ2h0OiAycHg7DQogIGxlZnQ6IC01MCU7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgdG9wOiA5cHg7DQogIHdpZHRoOiAxMDAlOw0KfQ0KDQouXFwtc3RlcCAuXFwtc3RlcC1pdGVtIGEgew0KICBjb2xvcjogIzU3NTVkOTsNCiAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICBwYWRkaW5nOiAyMHB4IDEwcHggMDsNCiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KfQ0KDQouXFwtc3RlcCAuXFwtc3RlcC1pdGVtIGE6OmJlZm9yZSB7DQogIGJhY2tncm91bmQ6ICM1NzU1ZDk7DQogIGJvcmRlcjogLjFyZW0gc29saWQgI2ZmZjsNCiAgYm9yZGVyLXJhZGl1czogNTAlOw0KICBjb250ZW50OiAiIjsNCiAgZGlzcGxheTogYmxvY2s7DQogIGhlaWdodDogLjZyZW07DQogIGxlZnQ6IDUwJTsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICB0b3A6IC4ycmVtOw0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7DQogIHdpZHRoOiAuNnJlbTsNCiAgei1pbmRleDogMTsNCn0NCg0KLlxcLXN0ZXAgLlxcLXN0ZXAtaXRlbS5hY3RpdmUgYTo6YmVmb3JlIHsNCiAgYmFja2dyb3VuZDogI2ZmZjsNCiAgYm9yZGVyOiAuMXJlbSBzb2xpZCAjNTc1NWQ5Ow0KfQ0KDQouXFwtc3RlcCAuXFwtc3RlcC1pdGVtLmFjdGl2ZSB+IC5cXC1zdGVwLWl0ZW06OmJlZm9yZSB7DQogIGJhY2tncm91bmQ6ICNkYWRlZTQ7DQp9DQoNCi5cXC1zdGVwIC5cXC1zdGVwLWl0ZW0uYWN0aXZlIH4gLlxcLXN0ZXAtaXRlbSBhIHsNCiAgY29sb3I6ICNiY2MzY2U7DQp9DQoNCi5cXC1zdGVwIC5cXC1zdGVwLWl0ZW0uYWN0aXZlIH4gLlxcLXN0ZXAtaXRlbSBhOjpiZWZvcmUgew0KICBiYWNrZ3JvdW5kOiAjZGFkZWU0Ow0KfQ0KDQouXFwtZGl2aWRlciwNCi5cXC1kaXZpZGVyLXZlcnQgew0KICBkaXNwbGF5OiBibG9jazsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KfQ0KDQouXFwtZGl2aWRlcltkYXRhLWNvbnRlbnRdOjphZnRlciwNCi5cXC1kaXZpZGVyLXZlcnRbZGF0YS1jb250ZW50XTo6YWZ0ZXIgew0KICBiYWNrZ3JvdW5kOiAjZmZmOw0KICBjb2xvcjogI2JjYzNjZTsNCiAgY29udGVudDogYXR0cihkYXRhLWNvbnRlbnQpOw0KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogIGZvbnQtc2l6ZTogLjdyZW07DQogIHBhZGRpbmc6IDAgLjRyZW07DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtLjY1cmVtKTsNCn0NCg0KLlxcLWRpdmlkZXIgew0KICBib3JkZXItdG9wOiAuMDVyZW0gc29saWQgI2YxZjNmNTsNCiAgaGVpZ2h0OiAuMDVyZW07DQogIG1hcmdpbjogLjRyZW0gMDsNCn0NCg0KLlxcLWRpdmlkZXJbZGF0YS1jb250ZW50XSB7DQogIG1hcmdpbjogLjhyZW0gMDsNCn0NCg0KLlxcLWRpdmlkZXItdmVydCB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBwYWRkaW5nOiAuOHJlbTsNCn0NCg0KLlxcLWRpdmlkZXItdmVydDo6YmVmb3JlIHsNCiAgYm9yZGVyLWxlZnQ6IC4wNXJlbSBzb2xpZCAjZGFkZWU0Ow0KICBib3R0b206IC40cmVtOw0KICBjb250ZW50OiAiIjsNCiAgZGlzcGxheTogYmxvY2s7DQogIGxlZnQ6IDUwJTsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICB0b3A6IC40cmVtOw0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7DQp9DQoNCi5cXC1kaXZpZGVyLXZlcnRbZGF0YS1jb250ZW50XTo6YWZ0ZXIgew0KICBsZWZ0OiA1MCU7DQogIHBhZGRpbmc6IC4ycmVtIDA7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgdG9wOiA1MCU7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOw0KfQ0KDQovKiovDQoNCiNsb2FkLXNwaW4gew0KICBwb3NpdGlvbjpmaXhlZDsNCiAgd2lkdGg6MTAwJTsNCiAgbGVmdDowO3JpZ2h0OjA7dG9wOjA7Ym90dG9tOjA7DQogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC43KTsNCiAgei1pbmRleDo5OTk5Ow0KICBkaXNwbGF5Om5vbmU7DQp9DQoNCkAtd2Via2l0LWtleWZyYW1lcyBzcGluIHsNCiAgZnJvbSB7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDBkZWcpO30NCiAgdG8gey13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpO30NCn0NCg0KQGtleWZyYW1lcyBzcGluIHsNCiAgZnJvbSB7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKTt9DQogIHRvIHt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyk7fQ0KfQ0KDQojbG9hZC1zcGluOjphZnRlciB7DQogIGNvbnRlbnQ6Jyc7DQogIGRpc3BsYXk6YmxvY2s7DQogIHBvc2l0aW9uOmFic29sdXRlOw0KICBsZWZ0OjQ4JTt0b3A6NDAlOw0KICB3aWR0aDo0MHB4O2hlaWdodDo0MHB4Ow0KICBib3JkZXItc3R5bGU6c29saWQ7DQogIGJvcmRlci1jb2xvcjpibGFjazsNCiAgYm9yZGVyLXRvcC1jb2xvcjp0cmFuc3BhcmVudDsNCiAgYm9yZGVyLXdpZHRoOiA0cHg7DQogIGJvcmRlci1yYWRpdXM6NTAlOw0KICAtd2Via2l0LWFuaW1hdGlvbjogc3BpbiAuOHMgbGluZWFyIGluZmluaXRlOw0KICBhbmltYXRpb246IHNwaW4gLjhzIGxpbmVhciBpbmZpbml0ZTsNCn0NCg0KLyoqLw0KDQouXFwtbG9hZGluZyB7DQogIGNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50Ow0KICBtaW4taGVpZ2h0OiAuOHJlbTsNCiAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCn0NCg0KLlxcLWxvYWRpbmc6OmFmdGVyIHsNCiAgYW5pbWF0aW9uOiBsb2FkaW5nIDUwMG1zIGluZmluaXRlIGxpbmVhcjsNCiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7DQogIGJvcmRlcjogLjFyZW0gc29saWQgIzU3NTVkOTsNCiAgYm9yZGVyLXJhZGl1czogNTAlOw0KICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50Ow0KICBib3JkZXItdG9wLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgY29udGVudDogIiI7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBoZWlnaHQ6IC44cmVtOw0KICBsZWZ0OiA1MCU7DQogIG1hcmdpbi1sZWZ0OiAtLjRyZW07DQogIG1hcmdpbi10b3A6IC0uNHJlbTsNCiAgb3BhY2l0eTogMTsNCiAgcGFkZGluZzogMDsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICB0b3A6IDUwJTsNCiAgd2lkdGg6IC44cmVtOw0KICB6LWluZGV4OiAxOw0KfQ0KDQouXFwtbG9hZGluZy5cXC1sb2FkaW5nLWxnIHsNCiAgbWluLWhlaWdodDogMnJlbTsNCn0NCg0KLlxcLWxvYWRpbmcuXFwtbG9hZGluZy1sZzo6YWZ0ZXIgew0KICBoZWlnaHQ6IDEuNnJlbTsNCiAgbWFyZ2luLWxlZnQ6IC0uOHJlbTsNCiAgbWFyZ2luLXRvcDogLS44cmVtOw0KICB3aWR0aDogMS42cmVtOw0KfQ0KDQouXFwtcy1yb3VuZGVkIHsNCiAgYm9yZGVyLXJhZGl1czogLjFyZW07DQp9DQoNCi5cXC1zLWNpcmNsZSB7DQogIGJvcmRlci1yYWRpdXM6IDUwJTsNCn0NCg0KDQouXFwtbWV0ZXIgew0KICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7DQogIC1tb3otYXBwZWFyYW5jZTogbm9uZTsNCiAgYXBwZWFyYW5jZTogbm9uZTsNCiAgYmFja2dyb3VuZDogI2Y3ZjhmOTsNCiAgYm9yZGVyOiAwOw0KICBib3JkZXItcmFkaXVzOiAuMXJlbTsNCiAgZGlzcGxheTogYmxvY2s7DQogIGhlaWdodDogLjhyZW07DQogIHdpZHRoOiAxMDAlOw0KfQ0KDQouXFwtbWV0ZXI6Oi13ZWJraXQtbWV0ZXItaW5uZXItZWxlbWVudCB7DQogIGRpc3BsYXk6IGJsb2NrOw0KfQ0KDQouXFwtbWV0ZXI6Oi13ZWJraXQtbWV0ZXItYmFyLA0KLlxcLW1ldGVyOjotd2Via2l0LW1ldGVyLW9wdGltdW0tdmFsdWUsDQouXFwtbWV0ZXI6Oi13ZWJraXQtbWV0ZXItc3Vib3B0aW11bS12YWx1ZSwNCi5cXC1tZXRlcjo6LXdlYmtpdC1tZXRlci1ldmVuLWxlc3MtZ29vZC12YWx1ZSB7DQogIGJvcmRlci1yYWRpdXM6IC4xcmVtOw0KfQ0KDQouXFwtbWV0ZXI6Oi13ZWJraXQtbWV0ZXItYmFyIHsNCiAgYmFja2dyb3VuZDogI2Y3ZjhmOTsNCn0NCg0KLlxcLW1ldGVyOjotd2Via2l0LW1ldGVyLW9wdGltdW0tdmFsdWUgew0KICBiYWNrZ3JvdW5kOiAjMzJiNjQzOw0KfQ0KDQouXFwtbWV0ZXI6Oi13ZWJraXQtbWV0ZXItc3Vib3B0aW11bS12YWx1ZSB7DQogIGJhY2tncm91bmQ6ICNmZmI3MDA7DQp9DQoNCi5cXC1tZXRlcjo6LXdlYmtpdC1tZXRlci1ldmVuLWxlc3MtZ29vZC12YWx1ZSB7DQogIGJhY2tncm91bmQ6ICNlODU2MDA7DQp9DQoNCi5cXC1tZXRlcjo6LW1vei1tZXRlci1iYXIsDQouXFwtbWV0ZXI6LW1vei1tZXRlci1vcHRpbXVtLA0KLlxcLW1ldGVyOi1tb3otbWV0ZXItc3ViLW9wdGltdW0sDQouXFwtbWV0ZXI6LW1vei1tZXRlci1zdWItc3ViLW9wdGltdW0gew0KICBib3JkZXItcmFkaXVzOiAuMXJlbTsNCn0NCg0KLlxcLW1ldGVyOi1tb3otbWV0ZXItb3B0aW11bTo6LW1vei1tZXRlci1iYXIgew0KICBiYWNrZ3JvdW5kOiAjMzJiNjQzOw0KfQ0KDQouXFwtbWV0ZXI6LW1vei1tZXRlci1zdWItb3B0aW11bTo6LW1vei1tZXRlci1iYXIgew0KICBiYWNrZ3JvdW5kOiAjZmZiNzAwOw0KfQ0KDQouXFwtbWV0ZXI6LW1vei1tZXRlci1zdWItc3ViLW9wdGltdW06Oi1tb3otbWV0ZXItYmFyIHsNCiAgYmFja2dyb3VuZDogI2U4NTYwMDsNCn0NCg0KDQouXFwtcHJvZ3Jlc3Mgew0KICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7DQogIC1tb3otYXBwZWFyYW5jZTogbm9uZTsNCiAgYXBwZWFyYW5jZTogbm9uZTsNCiAgYmFja2dyb3VuZDogI2VlZjBmMzsNCiAgYm9yZGVyOiAwOw0KICBib3JkZXItcmFkaXVzOiAuMXJlbTsNCiAgY29sb3I6ICM1NzU1ZDk7DQogIGhlaWdodDogLjJyZW07DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgd2lkdGg6IDEwMCU7DQp9DQoNCi5cXC1wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy1iYXIgew0KICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsNCiAgYm9yZGVyLXJhZGl1czogLjFyZW07DQp9DQoNCi5cXC1wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZSB7DQogIGJhY2tncm91bmQ6ICM1NzU1ZDk7DQogIGJvcmRlci1yYWRpdXM6IC4xcmVtOw0KfQ0KDQouXFwtcHJvZ3Jlc3M6Oi1tb3otcHJvZ3Jlc3MtYmFyIHsNCiAgYmFja2dyb3VuZDogIzU3NTVkOTsNCiAgYm9yZGVyLXJhZGl1czogLjFyZW07DQp9DQoNCi5cXC1wcm9ncmVzczppbmRldGVybWluYXRlIHsNCiAgYW5pbWF0aW9uOiBwcm9ncmVzcy1pbmRldGVybWluYXRlIDEuNXMgbGluZWFyIGluZmluaXRlOw0KICBiYWNrZ3JvdW5kOiAjZWVmMGYzIGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzU3NTVkOSAzMCUsICNlZWYwZjMgMzAlKSB0b3AgbGVmdC8xNTAlIDE1MCUgbm8tcmVwZWF0Ow0KfQ0KDQouXFwtcHJvZ3Jlc3M6aW5kZXRlcm1pbmF0ZTo6LW1vei1wcm9ncmVzcy1iYXIgew0KICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsNCn0NCg0KQGtleWZyYW1lcyBwcm9ncmVzcy1pbmRldGVybWluYXRlIHsNCiAgMCUgew0KICAgIGJhY2tncm91bmQtcG9zaXRpb246IDIwMCUgMDsNCiAgfQ0KICAxMDAlIHsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjAwJSAwOw0KICB9DQp9DQoNCg0KLlxcLXNsaWRlciB7DQogIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsNCiAgLW1vei1hcHBlYXJhbmNlOiBub25lOw0KICBhcHBlYXJhbmNlOiBub25lOw0KICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsNCiAgZGlzcGxheTogYmxvY2s7DQogIGhlaWdodDogMS4ycmVtOw0KICB3aWR0aDogMTAwJTsNCn0NCg0KLlxcLXNsaWRlcjpmb2N1cyB7DQogIGJveC1zaGFkb3c6IDAgMCAwIC4xcmVtIHJnYmEoODcsIDg1LCAyMTcsIC4yKTsNCiAgb3V0bGluZTogbm9uZTsNCn0NCg0KLlxcLXNsaWRlci5cXC10b29sdGlwOm5vdChbZGF0YS10b29sdGlwXSk6OmFmdGVyIHsNCiAgY29udGVudDogYXR0cih2YWx1ZSk7DQp9DQoNCi5cXC1zbGlkZXI6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHsNCiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOw0KICBiYWNrZ3JvdW5kOiAjNTc1NWQ5Ow0KICBib3JkZXI6IDA7DQogIGJvcmRlci1yYWRpdXM6IDUwJTsNCiAgaGVpZ2h0OiAuNnJlbTsNCiAgbWFyZ2luLXRvcDogLS4yNXJlbTsNCiAgLXdlYmtpdC10cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjJzOw0KICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjJzOw0KICB3aWR0aDogLjZyZW07DQp9DQoNCi5cXC1zbGlkZXI6Oi1tb3otcmFuZ2UtdGh1bWIgew0KICBiYWNrZ3JvdW5kOiAjNTc1NWQ5Ow0KICBib3JkZXI6IDA7DQogIGJvcmRlci1yYWRpdXM6IDUwJTsNCiAgaGVpZ2h0OiAuNnJlbTsNCiAgLW1vei10cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjJzOw0KICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjJzOw0KICB3aWR0aDogLjZyZW07DQp9DQoNCi5cXC1zbGlkZXI6Oi1tcy10aHVtYiB7DQogIGJhY2tncm91bmQ6ICM1NzU1ZDk7DQogIGJvcmRlcjogMDsNCiAgYm9yZGVyLXJhZGl1czogNTAlOw0KICBoZWlnaHQ6IC42cmVtOw0KICAtbXMtdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4yczsNCiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4yczsNCiAgd2lkdGg6IC42cmVtOw0KfQ0KDQouXFwtc2xpZGVyOmFjdGl2ZTo6LXdlYmtpdC1zbGlkZXItdGh1bWIgew0KICB0cmFuc2Zvcm06IHNjYWxlKDEuMjUpOw0KfQ0KDQouXFwtc2xpZGVyOmFjdGl2ZTo6LW1vei1yYW5nZS10aHVtYiB7DQogIHRyYW5zZm9ybTogc2NhbGUoMS4yNSk7DQp9DQoNCi5cXC1zbGlkZXI6YWN0aXZlOjotbXMtdGh1bWIgew0KICB0cmFuc2Zvcm06IHNjYWxlKDEuMjUpOw0KfQ0KDQouXFwtc2xpZGVyOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYiwNCi5cXC1zbGlkZXIuZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHsNCiAgYmFja2dyb3VuZDogI2Y3ZjhmOTsNCiAgdHJhbnNmb3JtOiBzY2FsZSgxKTsNCn0NCg0KLlxcLXNsaWRlcjpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYiwNCi5cXC1zbGlkZXIuZGlzYWJsZWQ6Oi1tb3otcmFuZ2UtdGh1bWIgew0KICBiYWNrZ3JvdW5kOiAjZjdmOGY5Ow0KICB0cmFuc2Zvcm06IHNjYWxlKDEpOw0KfQ0KDQouXFwtc2xpZGVyOmRpc2FibGVkOjotbXMtdGh1bWIsDQouXFwtc2xpZGVyLmRpc2FibGVkOjotbXMtdGh1bWIgew0KICBiYWNrZ3JvdW5kOiAjZjdmOGY5Ow0KICB0cmFuc2Zvcm06IHNjYWxlKDEpOw0KfQ0KDQouXFwtc2xpZGVyOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFjayB7DQogIGJhY2tncm91bmQ6ICNlZWYwZjM7DQogIGJvcmRlci1yYWRpdXM6IC4xcmVtOw0KICBoZWlnaHQ6IC4xcmVtOw0KICB3aWR0aDogMTAwJTsNCn0NCg0KLlxcLXNsaWRlcjo6LW1vei1yYW5nZS10cmFjayB7DQogIGJhY2tncm91bmQ6ICNlZWYwZjM7DQogIGJvcmRlci1yYWRpdXM6IC4xcmVtOw0KICBoZWlnaHQ6IC4xcmVtOw0KICB3aWR0aDogMTAwJTsNCn0NCg0KLlxcLXNsaWRlcjo6LW1zLXRyYWNrIHsNCiAgYmFja2dyb3VuZDogI2VlZjBmMzsNCiAgYm9yZGVyLXJhZGl1czogLjFyZW07DQogIGhlaWdodDogLjFyZW07DQogIHdpZHRoOiAxMDAlOw0KfQ0KDQouXFwtc2xpZGVyOjotbXMtZmlsbC1sb3dlciB7DQogIGJhY2tncm91bmQ6ICM1NzU1ZDk7DQp9DQoNCi5cXC10aW1lbGluZSAuXFwtdGltZWxpbmUtaXRlbSB7DQogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7DQogIGRpc3BsYXk6IC1tcy1mbGV4Ym94Ow0KICBkaXNwbGF5OiBmbGV4Ow0KICBtYXJnaW4tYm90dG9tOiAxLjJyZW07DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCn0NCg0KLlxcLXRpbWVsaW5lIC5cXC10aW1lbGluZS1pdGVtOjpiZWZvcmUgew0KICBiYWNrZ3JvdW5kOiAjZGFkZWU0Ow0KICBjb250ZW50OiAiIjsNCiAgaGVpZ2h0OiAxMDAlOw0KICBsZWZ0OiAxMXB4Ow0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIHRvcDogMS4ycmVtOw0KICB3aWR0aDogMnB4Ow0KfQ0KDQouXFwtdGltZWxpbmUgLlxcLXRpbWVsaW5lLWl0ZW0gLlxcLXRpbWVsaW5lLWxlZnQgew0KICAtbXMtZmxleDogMCAwIGF1dG87DQogIGZsZXg6IDAgMCBhdXRvOw0KfQ0KDQouXFwtdGltZWxpbmUgLlxcLXRpbWVsaW5lLWl0ZW0gLlxcLXRpbWVsaW5lLWNvbnRlbnQgew0KICAtbXMtZmxleDogMSAxIGF1dG87DQogIGZsZXg6IDEgMSBhdXRvOw0KICBwYWRkaW5nOiAycHggMCAycHggLjhyZW07DQp9DQoNCi5cXC10aW1lbGluZSAuXFwtdGltZWxpbmUtaXRlbSAuXFwtdGltZWxpbmUtaWNvbiB7DQogIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogIGJvcmRlci1yYWRpdXM6IDUwJTsNCiAgY29sb3I6ICNmZmY7DQogIGRpc3BsYXk6IC1tcy1mbGV4Ym94Ow0KICBkaXNwbGF5OiBmbGV4Ow0KICAtbXMtZmxleC1hbGlnbjogY2VudGVyOw0KICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7DQogIGhlaWdodDogMS4ycmVtOw0KICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICB3aWR0aDogMS4ycmVtOw0KfQ0KDQouXFwtdGltZWxpbmUgLlxcLXRpbWVsaW5lLWl0ZW0gLlxcLXRpbWVsaW5lLWljb246OmJlZm9yZSB7DQogIGJvcmRlcjogLjFyZW0gc29saWQgIzU3NTVkOTsNCiAgYm9yZGVyLXJhZGl1czogNTAlOw0KICBjb250ZW50OiAiIjsNCiAgZGlzcGxheTogYmxvY2s7DQogIGhlaWdodDogLjRyZW07DQogIGxlZnQ6IC40cmVtOw0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIHRvcDogLjRyZW07DQogIHdpZHRoOiAuNHJlbTsNCn0NCg0KLlxcLXRpbWVsaW5lIC5cXC10aW1lbGluZS1pdGVtIC5cXC10aW1lbGluZS1pY29uLlxcLWljb24tbGcgew0KICBiYWNrZ3JvdW5kOiAjNTc1NWQ5Ow0KICBsaW5lLWhlaWdodDogMS4ycmVtOw0KfQ0KDQouXFwtdGltZWxpbmUgLlxcLXRpbWVsaW5lLWl0ZW0gLlxcLXRpbWVsaW5lLWljb24uXFwtaWNvbi1sZzo6YmVmb3JlIHsNCiAgY29udGVudDogbm9uZTsNCn0NCg0KLlxcLXRpbGUgew0KICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOw0KICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsNCiAgZGlzcGxheTogLW1zLWZsZXhib3g7DQogIGRpc3BsYXk6IGZsZXg7DQogIC1tcy1mbGV4LWFsaWduOiBzdGFydDsNCiAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5Ow0KfQ0KDQouXFwtdGlsZSAuXFwtdGlsZS1pY29uLA0KLlxcLXRpbGUgLlxcLXRpbGUtYWN0aW9uIHsNCiAgLW1zLWZsZXg6IDAgMCBhdXRvOw0KICBmbGV4OiAwIDAgYXV0bzsNCn0NCg0KLlxcLXRpbGUgLlxcLXRpbGUtY29udGVudCB7DQogIC1tcy1mbGV4OiAxIDEgYXV0bzsNCiAgZmxleDogMSAxIGF1dG87DQp9DQoNCi5cXC10aWxlIC5cXC10aWxlLWNvbnRlbnQ6bm90KDpmaXJzdC1jaGlsZCkgew0KICBwYWRkaW5nLWxlZnQ6IC40cmVtOw0KfQ0KDQouXFwtdGlsZSAuXFwtdGlsZS1jb250ZW50Om5vdCg6bGFzdC1jaGlsZCkgew0KICBwYWRkaW5nLXJpZ2h0OiAuNHJlbTsNCn0NCg0KLlxcLXRpbGUgLlxcLXRpbGUtdGl0bGUsDQouXFwtdGlsZSAuXFwtdGlsZS1zdWJ0aXRsZSB7DQogIGxpbmUtaGVpZ2h0OiAxLjJyZW07DQp9DQoNCi5cXC10aWxlLlxcLXRpbGUtY2VudGVyZWQgew0KICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAtbXMtZmxleC1hbGlnbjogY2VudGVyOw0KfQ0KDQouXFwtdGlsZS5cXC10aWxlLWNlbnRlcmVkIC5cXC10aWxlLWNvbnRlbnQgew0KICBvdmVyZmxvdzogaGlkZGVuOw0KfQ0KDQouXFwtdGlsZS5cXC10aWxlLWNlbnRlcmVkIC5cXC10aWxlLXRpdGxlLA0KLlxcLXRpbGUuXFwtdGlsZS1jZW50ZXJlZCAuXFwtdGlsZS1zdWJ0aXRsZSB7DQogIG1hcmdpbi1ib3R0b206IDA7DQogIG92ZXJmbG93OiBoaWRkZW47DQogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOw0KICB3aGl0ZS1zcGFjZTogbm93cmFwOw0KfQ0KDQouXFwtdG9hc3Qgew0KICBiYWNrZ3JvdW5kOiByZ2JhKDQ4LCA1NSwgNjYsIC45NSk7DQogIGJvcmRlcjogLjA1cmVtIHNvbGlkICMzMDM3NDI7DQogIGJvcmRlci1jb2xvcjogIzMwMzc0MjsNCiAgYm9yZGVyLXJhZGl1czogLjFyZW07DQogIGNvbG9yOiAjZmZmOw0KICBkaXNwbGF5OiBibG9jazsNCiAgcGFkZGluZzogLjRyZW07DQogIHdpZHRoOiAxMDAlOw0KfQ0KDQouXFwtdG9hc3QuXFwtdG9hc3QtcHJpbWFyeSB7DQogIGJhY2tncm91bmQ6IHJnYmEoODcsIDg1LCAyMTcsIC45NSk7DQogIGJvcmRlci1jb2xvcjogIzU3NTVkOTsNCn0NCg0KLlxcLXRvYXN0LlxcLXRvYXN0LXN1Y2Nlc3Mgew0KICBiYWNrZ3JvdW5kOiByZ2JhKDUwLCAxODIsIDY3LCAuOTUpOw0KICBib3JkZXItY29sb3I6ICMzMmI2NDM7DQp9DQoNCi5cXC10b2FzdC5cXC10b2FzdC13YXJuaW5nIHsNCiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDE4MywgMCwgLjk1KTsNCiAgYm9yZGVyLWNvbG9yOiAjZmZiNzAwOw0KfQ0KDQouXFwtdG9hc3QuXFwtdG9hc3QtZXJyb3Igew0KICBiYWNrZ3JvdW5kOiByZ2JhKDIzMiwgODYsIDAsIC45NSk7DQogIGJvcmRlci1jb2xvcjogI2U4NTYwMDsNCn0NCg0KLlxcLXRvYXN0IGEgew0KICBjb2xvcjogI2ZmZjsNCiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQp9DQoNCi5cXC10b2FzdCBhOmZvY3VzLA0KLlxcLXRvYXN0IGE6aG92ZXIsDQouXFwtdG9hc3QgYTphY3RpdmUsDQouXFwtdG9hc3QgYS5hY3RpdmUgew0KICBvcGFjaXR5OiAuNzU7DQp9DQoNCi5cXC10b2FzdCAuYnRuLWNsZWFyIHsNCiAgbWFyZ2luOiAuMXJlbTsNCn0NCg0KLlxcLXRvYXN0IHA6bGFzdC1jaGlsZCB7DQogIG1hcmdpbi1ib3R0b206IDA7DQp9DQoNCi5cXC10b29sdGlwIHsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KfQ0KDQouXFwtdG9vbHRpcDo6YWZ0ZXIgew0KICBiYWNrZ3JvdW5kOiByZ2JhKDQ4LCA1NSwgNjYsIC45NSk7DQogIGJvcmRlci1yYWRpdXM6IC4xcmVtOw0KICBib3R0b206IDEwMCU7DQogIGNvbG9yOiAjZmZmOw0KICBjb250ZW50OiBhdHRyKGRhdGEtdG9vbHRpcCk7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBmb250LXNpemU6IC43cmVtOw0KICBsZWZ0OiA1MCU7DQogIG1heC13aWR0aDogMzIwcHg7DQogIG9wYWNpdHk6IDA7DQogIG92ZXJmbG93OiBoaWRkZW47DQogIHBhZGRpbmc6IC4ycmVtIC40cmVtOw0KICBwb2ludGVyLWV2ZW50czogbm9uZTsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLjRyZW0pOw0KICB0cmFuc2l0aW9uOiBvcGFjaXR5IC4ycywgdHJhbnNmb3JtIC4yczsNCiAgd2hpdGUtc3BhY2U6IHByZTsNCiAgei1pbmRleDogMzAwOw0KfQ0KDQouXFwtdG9vbHRpcDpmb2N1czo6YWZ0ZXIsDQouXFwtdG9vbHRpcDpob3Zlcjo6YWZ0ZXIgew0KICBvcGFjaXR5OiAxOw0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtLjJyZW0pOw0KfQ0KDQouXFwtdG9vbHRpcFtkaXNhYmxlZF0sDQouXFwtdG9vbHRpcC5kaXNhYmxlZCB7DQogIHBvaW50ZXItZXZlbnRzOiBhdXRvOw0KfQ0KDQouXFwtdG9vbHRpcC5cXC10b29sdGlwLXJpZ2h0OjphZnRlciB7DQogIGJvdHRvbTogNTAlOw0KICBsZWZ0OiAxMDAlOw0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtLjJyZW0sIDUwJSk7DQp9DQoNCi5cXC10b29sdGlwLlxcLXRvb2x0aXAtcmlnaHQ6Zm9jdXM6OmFmdGVyLA0KLlxcLXRvb2x0aXAuXFwtdG9vbHRpcC1yaWdodDpob3Zlcjo6YWZ0ZXIgew0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSguMnJlbSwgNTAlKTsNCn0NCg0KLlxcLXRvb2x0aXAuXFwtdG9vbHRpcC1ib3R0b206OmFmdGVyIHsNCiAgYm90dG9tOiBhdXRvOw0KICB0b3A6IDEwMCU7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC0uNHJlbSk7DQp9DQoNCi5cXC10b29sdGlwLlxcLXRvb2x0aXAtYm90dG9tOmZvY3VzOjphZnRlciwNCi5cXC10b29sdGlwLlxcLXRvb2x0aXAtYm90dG9tOmhvdmVyOjphZnRlciB7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC4ycmVtKTsNCn0NCg0KLlxcLXRvb2x0aXAuXFwtdG9vbHRpcC1sZWZ0OjphZnRlciB7DQogIGJvdHRvbTogNTAlOw0KICBsZWZ0OiBhdXRvOw0KICByaWdodDogMTAwJTsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLjRyZW0sIDUwJSk7DQp9DQoNCi5cXC10b29sdGlwLlxcLXRvb2x0aXAtbGVmdDpmb2N1czo6YWZ0ZXIsDQouXFwtdG9vbHRpcC5cXC10b29sdGlwLWxlZnQ6aG92ZXI6OmFmdGVyIHsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLS4ycmVtLCA1MCUpOw0KfQ0KDQpAa2V5ZnJhbWVzIGxvYWRpbmcgew0KICAwJSB7DQogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7DQogIH0NCiAgMTAwJSB7DQogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsNCiAgfQ0KfQ0KDQpAa2V5ZnJhbWVzIHNsaWRlLWRvd24gew0KICAwJSB7DQogICAgb3BhY2l0eTogMDsNCiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEuNnJlbSk7DQogIH0NCiAgMTAwJSB7DQogICAgb3BhY2l0eTogMTsNCiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7DQogIH0NCn0NCg0KLyoqLw0KLyoNCi5cXC1vZmYtY2FudmFzIHsNCiAgZGlzcGxheTogLW1zLWZsZXhib3g7DQogIGRpc3BsYXk6IGZsZXg7DQogIC1tcy1mbGV4LWZsb3c6IG5vd3JhcDsNCiAgZmxleC1mbG93OiBub3dyYXA7DQogIGhlaWdodDogMTAwJTsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICB3aWR0aDogMTAwJTsNCn0NCg0KLlxcLW9mZi1jYW52YXMgLlxcLW9mZi1jYW52YXMtdG9nZ2xlIHsNCiAgZGlzcGxheTogYmxvY2s7DQogIGxlZnQ6IC40cmVtOw0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIHRvcDogLjRyZW07DQogIHRyYW5zaXRpb246IG5vbmU7DQogIHotaW5kZXg6IDE7DQp9DQoNCi5cXC1vZmYtY2FudmFzIC5cXC1vZmYtY2FudmFzLXNpZGViYXIgew0KICBiYWNrZ3JvdW5kOiAjZjdmOGY5Ow0KICBib3R0b206IDA7DQogIGxlZnQ6IDA7DQogIG1pbi13aWR0aDogMTByZW07DQogIG92ZXJmbG93LXk6IGF1dG87DQogIHBvc2l0aW9uOiBmaXhlZDsNCiAgdG9wOiAwOw0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpOw0KICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjI1czsNCiAgei1pbmRleDogMjAwOw0KfQ0KDQouXFwtb2ZmLWNhbnZhcyAuXFwtb2ZmLWNhbnZhcy1jb250ZW50IHsNCiAgLW1zLWZsZXg6IDEgMSBhdXRvOw0KICBmbGV4OiAxIDEgYXV0bzsNCiAgaGVpZ2h0OiAxMDAlOw0KICBwYWRkaW5nOiAuNHJlbSAuNHJlbSAuNHJlbSA0cmVtOw0KfQ0KDQouXFwtb2ZmLWNhbnZhcyAuXFwtb2ZmLWNhbnZhcy1vdmVybGF5IHsNCiAgYmFja2dyb3VuZDogcmdiYSg0OCwgNTUsIDY2LCAuMSk7DQogIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7DQogIGJvcmRlci1yYWRpdXM6IDA7DQogIGJvdHRvbTogMDsNCiAgZGlzcGxheTogbm9uZTsNCiAgaGVpZ2h0OiAxMDAlOw0KICBsZWZ0OiAwOw0KICBwb3NpdGlvbjogZml4ZWQ7DQogIHJpZ2h0OiAwOw0KICB0b3A6IDA7DQogIHdpZHRoOiAxMDAlOw0KfQ0KDQouXFwtb2ZmLWNhbnZhcyAuXFwtb2ZmLWNhbnZhcy1zaWRlYmFyOnRhcmdldCwNCi5cXC1vZmYtY2FudmFzIC5cXC1vZmYtY2FudmFzLXNpZGViYXIuYWN0aXZlIHsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOw0KfQ0KDQouXFwtb2ZmLWNhbnZhcyAuXFwtb2ZmLWNhbnZhcy1zaWRlYmFyOnRhcmdldCB+IC5cXC1vZmYtY2FudmFzLW92ZXJsYXksDQouXFwtb2ZmLWNhbnZhcyAuXFwtb2ZmLWNhbnZhcy1zaWRlYmFyLmFjdGl2ZSB+IC5cXC1vZmYtY2FudmFzLW92ZXJsYXkgew0KICBkaXNwbGF5OiBibG9jazsNCiAgei1pbmRleDogMTAwOw0KfQ0KDQpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsNCiAgLlxcLW9mZi1jYW52YXMuXFwtb2ZmLWNhbnZhcy1zaWRlYmFyLXNob3cgLlxcLW9mZi1jYW52YXMtdG9nZ2xlIHsNCiAgICBkaXNwbGF5OiBub25lOw0KICB9DQogIC5cXC1vZmYtY2FudmFzLlxcLW9mZi1jYW52YXMtc2lkZWJhci1zaG93IC5cXC1vZmYtY2FudmFzLXNpZGViYXIgew0KICAgIC1tcy1mbGV4OiAwIDAgYXV0bzsNCiAgICBmbGV4OiAwIDAgYXV0bzsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgdHJhbnNmb3JtOiBub25lOw0KICB9DQogIC5cXC1vZmYtY2FudmFzLlxcLW9mZi1jYW52YXMtc2lkZWJhci1zaG93IC5cXC1vZmYtY2FudmFzLW92ZXJsYXkgew0KICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsNCiAgfQ0KfQ0KDQogKi8=]]></data>
	</file>
	<file>
	  <filename>/css/backslash/fk.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogZmluZGVycyBrZWVwZXJzICovDQoNCi5cXC1may13YXJuaW5nLA0KLlxcLWZrLWVycm9yLA0KLlxcLWZrLWluZm9ybWF0aW9uLA0KLlxcLWZrLW1lc3NhZ2UsDQouXFwtZmstc3VjY2VzcywNCi5cXC1may1wYWdld2FybmluZywNCi5cXC1may1ncmVlbiwNCi5cXC1may1yZWQsDQouXFwtZmsteWVsbG93DQp7DQogIGJvcmRlci1yYWRpdXM6IDRweA0KfQ0KDQoNCi5cXC1may1vcmFuZ2UNCnsNCiAgY29sb3I6ICNFNkMyNkUNCn0NCg0KLlxcLWZrLXJlZCwNCi5cXC1may10ZXh0LXJlZCwNCmEuXFwtZmstdGV4dC1yZWQsDQp0YWJsZS5cXC1may1wYWdldGFibGUgYS5cXC1may10ZXh0LXJlZA0Kew0KICBjb2xvcjogI0FFNDMyRQ0KfQ0KDQouXFwtZmstYmx1ZQ0Kew0KICBjb2xvcjogIzA1OERDNw0KfQ0KDQouXFwtZmstbWVzc2FnZSwNCi5cXC1may1wYWdld2FybmluZywNCi5cXC1may1wYWdlbWNvbnRhaW5lciwNCi5cXC1may1wYWdlZXJyb3Jjb250YWluZXIsDQouXFwtZmstcGFnZWVycm9yaW5zdGFsbGRpciwNCi5cXC1may1ncmVlbiwNCi5cXC1may1yZWQsDQouXFwtZmsteWVsbG93LA0KLlxcLWZrLXdhcm5pbmcsDQouXFwtZmstaW5mb3JtYXRpb24NCnsNCiAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICB3aWR0aDogYXV0bzsNCiAgZm9udC1zaXplOiAxNHB4Ow0KICBwYWRkaW5nOiAxMHB4IDEwcHggMTBweCA0MHB4Ow0KICBtYXJnaW46IDEwcHggMA0KfQ0KDQouXFwtZmstcGFnZXdhcm5pbmcuXFwtZmstaGlkZGVuDQp7DQogIGRpc3BsYXk6IG5vbmUNCn0NCg0KLlxcLWZrLWRpYWxvZyAuXFwtZmstZ3JlZW4sDQouXFwtZmstZGlhbG9nIC5cXC1may1yZWQsDQouXFwtZmstZGlhbG9nIC5cXC1may15ZWxsb3csDQouXFwtZmstZGlhbG9nIC5cXC1may1vcmFuZ2UNCnsNCiAgZGlzcGxheTogYmxvY2sNCn0NCg0KLlxcLWZrLWdyZWVuLA0KLlxcLWZrLXJlZCwNCi5cXC1may15ZWxsb3csDQouXFwtZmstb3JhbmdlDQp7DQogIHBhZGRpbmc6IDEwcHg7DQp9DQoNCi5cXC1may15ZWxsb3cNCnsNCiAgYmFja2dyb3VuZDogI0ZBRjZENDsNCiAgY29sb3I6ICNFNkMyNkU7DQogIGJvcmRlcjogMXB4IHNvbGlkICNFNkMyNkUNCn0NCg0KLlxcLWZrLWVycm9yLA0KLlxcLWZrLXBhZ2VlcnJvcmNvbnRhaW5lciwNCi5cXC1may1yZWQNCnsNCiAgYmFja2dyb3VuZDogI0YyRDRDRTsNCiAgY29sb3I6ICNBRTQzMkU7DQogIGJvcmRlcjogMXB4IHNvbGlkICNBRTQzMkUNCn0NCg0KLlxcLWZrLWdyZWVuDQp7DQogIGJhY2tncm91bmQ6ICNEOUU2QzM7DQogIGNvbG9yOiAjNzdBQjEzOw0KICBib3JkZXI6IDFweCBzb2xpZCAjNzdBQjEzDQp9DQoNCi5cXC1may1tZXNzYWdlOmhvdmVyDQp7DQogIGN1cnNvcjogaGVscA0KfQ0KDQouXFwtZmstd2FybmluZyBwLA0KLlxcLWZrLXBhZ2V3YXJuaW5nIHAsDQouXFwtZmstbWVzc2FnZSBwDQp7DQogIGNvbG9yOiAjMjMyMzIzOw0KICBtYXJnaW46IDA7DQogIGZvbnQtc2l6ZTogMTRweA0KfQ0KDQouXFwtZmstd2FybmluZyBoMywNCi5cXC1may1wYWdld2FybmluZyBoMw0Kew0KICBtYXJnaW46IDJweCAwOw0KICBmb250LXNpemU6IDE0cHg7DQogIGNvbG9yOiAjRTZDMjZFDQp9]]></data>
	</file>
	<file>
	  <filename>/css/backslash/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/css/uikit</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/css/uikit/uikit-rtl.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIFVJa2l0IDMuMTUuMSB8IGh0dHBzOi8vd3d3LmdldHVpa2l0LmNvbSB8IChjKSAyMDE0IC0gMjAyMiBZT090aGVtZSB8IE1JVCBMaWNlbnNlICovCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IEJhc2UKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFNldCBgZm9udC1zaXplYCB0byBzdXBwb3J0IGByZW1gIHVuaXRzCiAqIDIuIFByZXZlbnQgYWRqdXN0bWVudHMgb2YgZm9udCBzaXplIGFmdGVyIG9yaWVudGF0aW9uIGNoYW5nZXMgaW4gaU9TLgogKiAzLiBTdHlsZQogKi8KaHRtbCB7CiAgLyogMSAqLwogIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsICJOb3RvIFNhbnMiLCBzYW5zLXNlcmlmLCAiQXBwbGUgQ29sb3IgRW1vamkiLCAiU2Vnb2UgVUkgRW1vamkiLCAiU2Vnb2UgVUkgU3ltYm9sIiwgIk5vdG8gQ29sb3IgRW1vamkiOwogIGZvbnQtc2l6ZTogMTZweDsKICBmb250LXdlaWdodDogbm9ybWFsOwogIGxpbmUtaGVpZ2h0OiAxLjU7CiAgLyogMiAqLwogIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsKICAvKiAzICovCiAgYmFja2dyb3VuZDogI2ZmZjsKICBjb2xvcjogIzY2NjsKfQovKgogKiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBhbGwgYnJvd3NlcnMuCiAqLwpib2R5IHsKICBtYXJnaW46IDA7Cn0KLyogTGlua3MKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIFN0eWxlCiAqLwphLAoudWstbGluayB7CiAgY29sb3I6ICMxZTg3ZjA7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGN1cnNvcjogcG9pbnRlcjsKfQphOmhvdmVyLAoudWstbGluazpob3ZlciwKLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rIHsKICBjb2xvcjogIzBmNmVjZDsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQovKiBUZXh0LWxldmVsIHNlbWFudGljcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gQWRkIHRoZSBjb3JyZWN0IHRleHQgZGVjb3JhdGlvbiBpbiBFZGdlLgogKiAyLiBUaGUgc2hvcnRoYW5kIGRlY2xhcmF0aW9uIGB1bmRlcmxpbmUgZG90dGVkYCBpcyBub3Qgc3VwcG9ydGVkIGluIFNhZmFyaS4KICovCmFiYnJbdGl0bGVdIHsKICAvKiAxICovCiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkOwogIC8qIDIgKi8KICAtd2Via2l0LXRleHQtZGVjb3JhdGlvbi1zdHlsZTogZG90dGVkOwp9Ci8qCiAqIEFkZCB0aGUgY29ycmVjdCBmb250IHdlaWdodCBpbiBDaHJvbWUsIEVkZ2UsIGFuZCBTYWZhcmkuCiAqLwpiLApzdHJvbmcgewogIGZvbnQtd2VpZ2h0OiBib2xkZXI7Cn0KLyoKICogMS4gQ29uc29sYXMgaGFzIGEgYmV0dGVyIGJhc2VsaW5lIGluIHJ1bm5pbmcgdGV4dCBjb21wYXJlZCB0byBgQ291cmllcmAKICogMi4gQ29ycmVjdCB0aGUgb2RkIGBlbWAgZm9udCBzaXppbmcgaW4gYWxsIGJyb3dzZXJzLgogKiAzLiBTdHlsZQogKi8KOm5vdChwcmUpID4gY29kZSwKOm5vdChwcmUpID4ga2JkLAo6bm90KHByZSkgPiBzYW1wIHsKICAvKiAxICovCiAgZm9udC1mYW1pbHk6IENvbnNvbGFzLCBtb25hY28sIG1vbm9zcGFjZTsKICAvKiAyICovCiAgZm9udC1zaXplOiAwLjg3NXJlbTsKICAvKiAzICovCiAgY29sb3I6ICNmMDUwNmU7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICBwYWRkaW5nOiAycHggNnB4OwogIGJhY2tncm91bmQ6ICNmOGY4Zjg7Cn0KLyoKICogRW1waGFzaXplCiAqLwplbSB7CiAgY29sb3I6ICNmMDUwNmU7Cn0KLyoKICogSW5zZXJ0CiAqLwppbnMgewogIGJhY2tncm91bmQ6ICNmZmQ7CiAgY29sb3I6ICM2NjY7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci8qCiAqIE1hcmsKICovCm1hcmsgewogIGJhY2tncm91bmQ6ICNmZmQ7CiAgY29sb3I6ICM2NjY7Cn0KLyoKICogUXVvdGUKICovCnEgewogIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQovKgogKiBBZGQgdGhlIGNvcnJlY3QgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy4KICovCnNtYWxsIHsKICBmb250LXNpemU6IDgwJTsKfQovKgogKiBQcmV2ZW50cyBgc3ViYCBhbmQgYHN1cGAgYWZmZWN0aW5nIGBsaW5lLWhlaWdodGAgaW4gYWxsIGJyb3dzZXJzLgogKi8Kc3ViLApzdXAgewogIGZvbnQtc2l6ZTogNzUlOwogIGxpbmUtaGVpZ2h0OiAwOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7Cn0Kc3VwIHsKICB0b3A6IC0wLjVlbTsKfQpzdWIgewogIGJvdHRvbTogLTAuMjVlbTsKfQovKiBFbWJlZGRlZCBjb250ZW50CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBSZW1vdmUgdGhlIGdhcCBiZXR3ZWVuIHRoZSBlbGVtZW50IGFuZCB0aGUgYm90dG9tIG9mIGl0cyBwYXJlbnQgY29udGFpbmVyLgogKi8KYXVkaW8sCmNhbnZhcywKaWZyYW1lLAppbWcsCnN2ZywKdmlkZW8gewogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cn0KLyoKICogMS4gQ29uc3RyYWluIHRoZSBlbGVtZW50IHRvIGl0cyBwYXJlbnQgd2lkdGguCiAqIDIuIFByZXNlcnZlIHRoZSBpbnRyaW5zaWMgYXNwZWN0IHJhdGlvIGFuZCBhdXRvLXNjYWxlIHRoZSBoZWlnaHQgb2YgYW4gaW1hZ2UgaWYgdGhlIGBoZWlnaHRgIGF0dHJpYnV0ZSBpcyBwcmVzZW50LgogKiAzLiBUYWtlIGJvcmRlciBhbmQgcGFkZGluZyBpbnRvIGFjY291bnQuCiAqLwpjYW52YXMsCmltZywKc3ZnLAp2aWRlbyB7CiAgLyogMSAqLwogIG1heC13aWR0aDogMTAwJTsKICAvKiAyICovCiAgaGVpZ2h0OiBhdXRvOwogIC8qIDMgKi8KICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9Ci8qCiAqIERlcHJlY2F0ZWQ6IG9ubHkgbmVlZGVkIGZvciBgaW1nYCBlbGVtZW50cyB3aXRoIGB1ay1pbWdgCiAqIDEuIEhpZGUgYGFsdGAgdGV4dCBmb3IgbGF6eSBsb2FkIGltYWdlcy4KICogMi4gRml4IGxhenkgbG9hZGluZyBpbWFnZXMgaWYgcGFyZW50IGVsZW1lbnQgaXMgc2V0IHRvIGBkaXNwbGF5OiBpbmxpbmVgIGFuZCBoYXMgYG92ZXJmbG93OiBoaWRkZW5gLgogKi8KaW1nOm5vdChbc3JjXSkgewogIC8qIDEgKi8KICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgLyogMiAqLwogIG1pbi13aWR0aDogMXB4Owp9Ci8qCiAqIElmcmFtZQogKiBSZW1vdmUgYm9yZGVyIGluIGFsbCBicm93c2VycwogKi8KaWZyYW1lIHsKICBib3JkZXI6IDA7Cn0KLyogQmxvY2sgZWxlbWVudHMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIE1hcmdpbnMKICovCnAsCnVsLApvbCwKZGwsCnByZSwKYWRkcmVzcywKZmllbGRzZXQsCmZpZ3VyZSB7CiAgbWFyZ2luOiAwIDAgMjBweCAwOwp9Ci8qIEFkZCBtYXJnaW4gaWYgYWRqYWNlbnQgZWxlbWVudCAqLwoqICsgcCwKKiArIHVsLAoqICsgb2wsCiogKyBkbCwKKiArIHByZSwKKiArIGFkZHJlc3MsCiogKyBmaWVsZHNldCwKKiArIGZpZ3VyZSB7CiAgbWFyZ2luLXRvcDogMjBweDsKfQovKiBIZWFkaW5ncwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KaDEsCi51ay1oMSwKaDIsCi51ay1oMiwKaDMsCi51ay1oMywKaDQsCi51ay1oNCwKaDUsCi51ay1oNSwKaDYsCi51ay1oNiwKLnVrLWhlYWRpbmctc21hbGwsCi51ay1oZWFkaW5nLW1lZGl1bSwKLnVrLWhlYWRpbmctbGFyZ2UsCi51ay1oZWFkaW5nLXhsYXJnZSwKLnVrLWhlYWRpbmctMnhsYXJnZSB7CiAgbWFyZ2luOiAwIDAgMjBweCAwOwogIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsICJOb3RvIFNhbnMiLCBzYW5zLXNlcmlmLCAiQXBwbGUgQ29sb3IgRW1vamkiLCAiU2Vnb2UgVUkgRW1vamkiLCAiU2Vnb2UgVUkgU3ltYm9sIiwgIk5vdG8gQ29sb3IgRW1vamkiOwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgY29sb3I6ICMzMzM7CiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7Cn0KLyogQWRkIG1hcmdpbiBpZiBhZGphY2VudCBlbGVtZW50ICovCiogKyBoMSwKKiArIC51ay1oMSwKKiArIGgyLAoqICsgLnVrLWgyLAoqICsgaDMsCiogKyAudWstaDMsCiogKyBoNCwKKiArIC51ay1oNCwKKiArIGg1LAoqICsgLnVrLWg1LAoqICsgaDYsCiogKyAudWstaDYsCiogKyAudWstaGVhZGluZy1zbWFsbCwKKiArIC51ay1oZWFkaW5nLW1lZGl1bSwKKiArIC51ay1oZWFkaW5nLWxhcmdlLAoqICsgLnVrLWhlYWRpbmcteGxhcmdlLAoqICsgLnVrLWhlYWRpbmctMnhsYXJnZSB7CiAgbWFyZ2luLXRvcDogNDBweDsKfQovKgogKiBTaXplcwogKi8KaDEsCi51ay1oMSB7CiAgZm9udC1zaXplOiAyLjIzMTI1cmVtOwogIGxpbmUtaGVpZ2h0OiAxLjI7Cn0KaDIsCi51ay1oMiB7CiAgZm9udC1zaXplOiAxLjdyZW07CiAgbGluZS1oZWlnaHQ6IDEuMzsKfQpoMywKLnVrLWgzIHsKICBmb250LXNpemU6IDEuNXJlbTsKICBsaW5lLWhlaWdodDogMS40Owp9Cmg0LAoudWstaDQgewogIGZvbnQtc2l6ZTogMS4yNXJlbTsKICBsaW5lLWhlaWdodDogMS40Owp9Cmg1LAoudWstaDUgewogIGZvbnQtc2l6ZTogMTZweDsKICBsaW5lLWhlaWdodDogMS40Owp9Cmg2LAoudWstaDYgewogIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgbGluZS1oZWlnaHQ6IDEuNDsKfQovKiBUYWJsZXQgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7CiAgaDEsCiAgLnVrLWgxIHsKICAgIGZvbnQtc2l6ZTogMi42MjVyZW07CiAgfQogIGgyLAogIC51ay1oMiB7CiAgICBmb250LXNpemU6IDJyZW07CiAgfQp9Ci8qIExpc3RzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwp1bCwKb2wgewogIHBhZGRpbmctcmlnaHQ6IDMwcHg7Cn0KLyoKICogUmVzZXQgbWFyZ2luIGZvciBuZXN0ZWQgbGlzdHMKICovCnVsID4gbGkgPiB1bCwKdWwgPiBsaSA+IG9sLApvbCA+IGxpID4gb2wsCm9sID4gbGkgPiB1bCB7CiAgbWFyZ2luOiAwOwp9Ci8qIERlc2NyaXB0aW9uIGxpc3RzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpkdCB7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KZGQgewogIG1hcmdpbi1yaWdodDogMDsKfQovKiBIb3Jpem9udGFsIHJ1bGVzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBTaG93IHRoZSBvdmVyZmxvdyBpbiBDaHJvbWUsIEVkZ2UgYW5kIElFLgogKiAyLiBBZGQgdGhlIGNvcnJlY3QgdGV4dC1hbGlnbiBpbiBFZGdlIGFuZCBJRS4KICogMy4gU3R5bGUKICovCmhyLAoudWstaHIgewogIC8qIDEgKi8KICBvdmVyZmxvdzogdmlzaWJsZTsKICAvKiAyICovCiAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAvKiAzICovCiAgbWFyZ2luOiAwIDAgMjBweCAwOwogIGJvcmRlcjogMDsKICBib3JkZXItdG9wOiAxcHggc29saWQgI2U1ZTVlNTsKfQovKiBBZGQgbWFyZ2luIGlmIGFkamFjZW50IGVsZW1lbnQgKi8KKiArIGhyLAoqICsgLnVrLWhyIHsKICBtYXJnaW4tdG9wOiAyMHB4Owp9Ci8qIEFkZHJlc3MKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmFkZHJlc3MgewogIGZvbnQtc3R5bGU6IG5vcm1hbDsKfQovKiBCbG9ja3F1b3RlcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KYmxvY2txdW90ZSB7CiAgbWFyZ2luOiAwIDAgMjBweCAwOwogIGZvbnQtc2l6ZTogMS4yNXJlbTsKICBsaW5lLWhlaWdodDogMS41OwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBjb2xvcjogIzMzMzsKfQovKiBBZGQgbWFyZ2luIGlmIGFkamFjZW50IGVsZW1lbnQgKi8KKiArIGJsb2NrcXVvdGUgewogIG1hcmdpbi10b3A6IDIwcHg7Cn0KLyoKICogQ29udGVudAogKi8KYmxvY2txdW90ZSBwOmxhc3Qtb2YtdHlwZSB7CiAgbWFyZ2luLWJvdHRvbTogMDsKfQpibG9ja3F1b3RlIGZvb3RlciB7CiAgbWFyZ2luLXRvcDogMTBweDsKICBmb250LXNpemU6IDAuODc1cmVtOwogIGxpbmUtaGVpZ2h0OiAxLjU7CiAgY29sb3I6ICM2NjY7Cn0KYmxvY2txdW90ZSBmb290ZXI6OmJlZm9yZSB7CiAgY29udGVudDogIuKAlCAiOwp9Ci8qIFByZWZvcm1hdHRlZCB0ZXh0CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBDb250YWluIG92ZXJmbG93IGluIGFsbCBicm93c2Vycy4KICovCnByZSB7CiAgZm9udDogMC44NzVyZW0gLyAxLjUgQ29uc29sYXMsIG1vbmFjbywgbW9ub3NwYWNlOwogIGNvbG9yOiAjNjY2OwogIC1tb3otdGFiLXNpemU6IDQ7CiAgdGFiLXNpemU6IDQ7CiAgLyogMSAqLwogIG92ZXJmbG93OiBhdXRvOwogIHBhZGRpbmc6IDEwcHg7CiAgYm9yZGVyOiAxcHggc29saWQgI2U1ZTVlNTsKICBib3JkZXItcmFkaXVzOiAzcHg7CiAgYmFja2dyb3VuZDogI2ZmZjsKfQpwcmUgY29kZSB7CiAgZm9udC1mYW1pbHk6IENvbnNvbGFzLCBtb25hY28sIG1vbm9zcGFjZTsKfQovKiBGb2N1cwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KOmZvY3VzIHsKICBvdXRsaW5lOiBub25lOwp9Cjpmb2N1cy12aXNpYmxlIHsKICBvdXRsaW5lOiAycHggZG90dGVkICMzMzM7Cn0KLyogU2VsZWN0aW9uIHBzZXVkby1lbGVtZW50CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwo6OnNlbGVjdGlvbiB7CiAgYmFja2dyb3VuZDogIzM5ZjsKICBjb2xvcjogI2ZmZjsKICB0ZXh0LXNoYWRvdzogbm9uZTsKfQovKiBIVE1MNSBlbGVtZW50cwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gRWRnZSwgSUUgMTArLCBhbmQgRmlyZWZveC4KICogMi4gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUuCiAqLwpkZXRhaWxzLAptYWluIHsKICAvKiAyICovCiAgZGlzcGxheTogYmxvY2s7Cn0KLyoKICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gYWxsIGJyb3dzZXJzLgogKi8Kc3VtbWFyeSB7CiAgZGlzcGxheTogbGlzdC1pdGVtOwp9Ci8qCiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFLgogKi8KdGVtcGxhdGUgewogIGRpc3BsYXk6IG5vbmU7Cn0KLyogUGFzcyBtZWRpYSBicmVha3BvaW50cyB0byBKUwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogQnJlYWtwb2ludHMKICovCjpyb290IHsKICAtLXVrLWJyZWFrcG9pbnQtczogNjQwcHg7CiAgLS11ay1icmVha3BvaW50LW06IDk2MHB4OwogIC0tdWstYnJlYWtwb2ludC1sOiAxMjAwcHg7CiAgLS11ay1icmVha3BvaW50LXhsOiAxNjAwcHg7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogTGluawogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogTXV0ZWQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmEudWstbGluay1tdXRlZCwKLnVrLWxpbmstbXV0ZWQgYSwKLnVrLWxpbmstdG9nZ2xlIC51ay1saW5rLW11dGVkIHsKICBjb2xvcjogIzk5OTsKfQphLnVrLWxpbmstbXV0ZWQ6aG92ZXIsCi51ay1saW5rLW11dGVkIGE6aG92ZXIsCi51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1tdXRlZCB7CiAgY29sb3I6ICM2NjY7Cn0KLyogVGV4dAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KYS51ay1saW5rLXRleHQsCi51ay1saW5rLXRleHQgYSwKLnVrLWxpbmstdG9nZ2xlIC51ay1saW5rLXRleHQgewogIGNvbG9yOiBpbmhlcml0Owp9CmEudWstbGluay10ZXh0OmhvdmVyLAoudWstbGluay10ZXh0IGE6aG92ZXIsCi51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay10ZXh0IHsKICBjb2xvcjogIzk5OTsKfQovKiBIZWFkaW5nCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwphLnVrLWxpbmstaGVhZGluZywKLnVrLWxpbmstaGVhZGluZyBhLAoudWstbGluay10b2dnbGUgLnVrLWxpbmstaGVhZGluZyB7CiAgY29sb3I6IGluaGVyaXQ7Cn0KYS51ay1saW5rLWhlYWRpbmc6aG92ZXIsCi51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwKLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLWhlYWRpbmcgewogIGNvbG9yOiAjMWU4N2YwOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQovKiBSZXNldAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogYCFpbXBvcnRhbnRgIG5lZWRlZCB0byBvdmVycmlkZSBpbnZlcnNlIGNvbXBvbmVudAogKi8KYS51ay1saW5rLXJlc2V0LAoudWstbGluay1yZXNldCBhIHsKICBjb2xvcjogaW5oZXJpdCAhaW1wb3J0YW50OwogIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50Owp9Ci8qIFRvZ2dsZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWxpbmstdG9nZ2xlIHsKICBjb2xvcjogaW5oZXJpdCAhaW1wb3J0YW50OwogIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50Owp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IEhlYWRpbmcKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1oZWFkaW5nLXNtYWxsIHsKICBmb250LXNpemU6IDIuNnJlbTsKICBsaW5lLWhlaWdodDogMS4yOwp9Ci51ay1oZWFkaW5nLW1lZGl1bSB7CiAgZm9udC1zaXplOiAyLjg4NzVyZW07CiAgbGluZS1oZWlnaHQ6IDEuMTsKfQoudWstaGVhZGluZy1sYXJnZSB7CiAgZm9udC1zaXplOiAzLjRyZW07CiAgbGluZS1oZWlnaHQ6IDEuMTsKfQoudWstaGVhZGluZy14bGFyZ2UgewogIGZvbnQtc2l6ZTogNHJlbTsKICBsaW5lLWhlaWdodDogMTsKfQoudWstaGVhZGluZy0yeGxhcmdlIHsKICBmb250LXNpemU6IDZyZW07CiAgbGluZS1oZWlnaHQ6IDE7Cn0KLyogVGFibGV0IExhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogIC51ay1oZWFkaW5nLXNtYWxsIHsKICAgIGZvbnQtc2l6ZTogMy4yNXJlbTsKICB9CiAgLnVrLWhlYWRpbmctbWVkaXVtIHsKICAgIGZvbnQtc2l6ZTogMy41cmVtOwogIH0KICAudWstaGVhZGluZy1sYXJnZSB7CiAgICBmb250LXNpemU6IDRyZW07CiAgfQogIC51ay1oZWFkaW5nLXhsYXJnZSB7CiAgICBmb250LXNpemU6IDZyZW07CiAgfQogIC51ay1oZWFkaW5nLTJ4bGFyZ2UgewogICAgZm9udC1zaXplOiA4cmVtOwogIH0KfQovKiBMYXB0b3AgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CiAgLnVrLWhlYWRpbmctbWVkaXVtIHsKICAgIGZvbnQtc2l6ZTogNHJlbTsKICB9CiAgLnVrLWhlYWRpbmctbGFyZ2UgewogICAgZm9udC1zaXplOiA2cmVtOwogIH0KICAudWstaGVhZGluZy14bGFyZ2UgewogICAgZm9udC1zaXplOiA4cmVtOwogIH0KICAudWstaGVhZGluZy0yeGxhcmdlIHsKICAgIGZvbnQtc2l6ZTogMTFyZW07CiAgfQp9Ci8qIFByaW1hcnkKICAgRGVwcmVjYXRlZDogVXNlIGB1ay1oZWFkaW5nLW1lZGl1bWAgaW5zdGVhZAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCi8qIERlc2t0b3AgYW5kIGJpZ2dlciAqLwovKiBIZXJvCiAgIERlcHJlY2F0ZWQ6IFVzZSBgdWstaGVhZGluZy14bGFyZ2VgIGluc3RlYWQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KLyogRGl2aWRlcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWhlYWRpbmctZGl2aWRlciB7CiAgcGFkZGluZy1ib3R0b206IGNhbGMoNXB4ICsgMC4xZW0pOwogIGJvcmRlci1ib3R0b206IGNhbGMoMC4ycHggKyAwLjA1ZW0pIHNvbGlkICNlNWU1ZTU7Cn0KLyogQnVsbGV0CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstaGVhZGluZy1idWxsZXQgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQovKgogKiAxLiBVc2luZyBgaW5saW5lLWJsb2NrYCB0byBtYWtlIGl0IHdvcmsgd2l0aCB0ZXh0IGFsaWdubWVudAogKiAyLiBDZW50ZXIgdmVydGljYWxseQogKiAzLiBTdHlsZQogKi8KLnVrLWhlYWRpbmctYnVsbGV0OjpiZWZvcmUgewogIGNvbnRlbnQ6ICIiOwogIC8qIDEgKi8KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgLyogMiAqLwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB0b3A6IGNhbGMoLTAuMSAqIDFlbSk7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAvKiAzICovCiAgaGVpZ2h0OiBjYWxjKDRweCArIDAuN2VtKTsKICBtYXJnaW4tbGVmdDogY2FsYyg1cHggKyAwLjJlbSk7CiAgYm9yZGVyLXJpZ2h0OiBjYWxjKDVweCArIDAuMWVtKSBzb2xpZCAjZTVlNWU1Owp9Ci8qIExpbmUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIENsaXAgdGhlIGNoaWxkIGVsZW1lbnQKICovCi51ay1oZWFkaW5nLWxpbmUgewogIG92ZXJmbG93OiBoaWRkZW47Cn0KLyoKICogRXh0cmEgbWFya3VwIGlzIG5lZWRlZCB0byBtYWtlIGl0IHdvcmsgd2l0aCB0ZXh0IGFsaWduCiAqLwoudWstaGVhZGluZy1saW5lID4gKiB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQovKgogKiAxLiBDZW50ZXIgdmVydGljYWxseQogKiAyLiBNYWtlIHRoZSBlbGVtZW50IGFzIGxhcmdlIGFzIHBvc3NpYmxlLiBJdCdzIGNsaXBwZWQgYnkgdGhlIGNvbnRhaW5lci4KICogMy4gU3R5bGUKICovCi51ay1oZWFkaW5nLWxpbmUgPiA6OmJlZm9yZSwKLnVrLWhlYWRpbmctbGluZSA+IDo6YWZ0ZXIgewogIGNvbnRlbnQ6ICIiOwogIC8qIDEgKi8KICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiBjYWxjKDUwJSAtIChjYWxjKDAuMnB4ICsgMC4wNWVtKSAvIDIpKTsKICAvKiAyICovCiAgd2lkdGg6IDIwMDBweDsKICAvKiAzICovCiAgYm9yZGVyLWJvdHRvbTogY2FsYygwLjJweCArIDAuMDVlbSkgc29saWQgI2U1ZTVlNTsKfQoudWstaGVhZGluZy1saW5lID4gOjpiZWZvcmUgewogIGxlZnQ6IDEwMCU7CiAgbWFyZ2luLWxlZnQ6IGNhbGMoNXB4ICsgMC4zZW0pOwp9Ci51ay1oZWFkaW5nLWxpbmUgPiA6OmFmdGVyIHsKICByaWdodDogMTAwJTsKICBtYXJnaW4tcmlnaHQ6IGNhbGMoNXB4ICsgMC4zZW0pOwp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IERpdmlkZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFJlc2V0IGRlZmF1bHQgYGhyYAogKiAyLiBTZXQgbWFyZ2luIGlmIGEgYGRpdmAgaXMgdXNlZCBmb3Igc2VtYW50aWNhbCByZWFzb24KICovCltjbGFzcyo9J3VrLWRpdmlkZXInXSB7CiAgLyogMSAqLwogIGJvcmRlcjogbm9uZTsKICAvKiAyICovCiAgbWFyZ2luLWJvdHRvbTogMjBweDsKfQovKiBBZGQgbWFyZ2luIGlmIGFkamFjZW50IGVsZW1lbnQgKi8KKiArIFtjbGFzcyo9J3VrLWRpdmlkZXInXSB7CiAgbWFyZ2luLXRvcDogMjBweDsKfQovKiBJY29uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstZGl2aWRlci1pY29uIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgaGVpZ2h0OiAyMHB4OwogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIyMCUyMiUyMGhlaWdodCUzRCUyMjIwJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMjAlMjAyMCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDY2lyY2xlJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBzdHJva2UlM0QlMjIlMjNlNWU1ZTUlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIyJTIyJTIwY3glM0QlMjIxMCUyMiUyMGN5JTNEJTIyMTAlMjIlMjByJTNEJTIyNyUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSIpOwogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJTsKfQoudWstZGl2aWRlci1pY29uOjpiZWZvcmUsCi51ay1kaXZpZGVyLWljb246OmFmdGVyIHsKICBjb250ZW50OiAiIjsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiA1MCU7CiAgbWF4LXdpZHRoOiBjYWxjKDUwJSAtICg1MHB4IC8gMikpOwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTVlNWU1Owp9Ci51ay1kaXZpZGVyLWljb246OmJlZm9yZSB7CiAgbGVmdDogY2FsYyg1MCUgKyAoNTBweCAvIDIpKTsKICB3aWR0aDogMTAwJTsKfQoudWstZGl2aWRlci1pY29uOjphZnRlciB7CiAgcmlnaHQ6IGNhbGMoNTAlICsgKDUwcHggLyAyKSk7CiAgd2lkdGg6IDEwMCU7Cn0KLyogU21hbGwKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIEZpeCBoZWlnaHQgYmVjYXVzZSBvZiBgaW5saW5lLWJsb2NrYAogKiAyLiBVc2luZyA6OmFmdGVyIGFuZCBpbmxpbmUtYmxvY2sgdG8gbWFrZSBgdGV4dC1hbGlnbmAgd29yawogKi8KLyogMSAqLwoudWstZGl2aWRlci1zbWFsbCB7CiAgbGluZS1oZWlnaHQ6IDA7Cn0KLyogMiAqLwoudWstZGl2aWRlci1zbWFsbDo6YWZ0ZXIgewogIGNvbnRlbnQ6ICIiOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICB3aWR0aDogMTAwcHg7CiAgbWF4LXdpZHRoOiAxMDAlOwogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1OwogIHZlcnRpY2FsLWFsaWduOiB0b3A7Cn0KLyogVmVydGljYWwKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1kaXZpZGVyLXZlcnRpY2FsIHsKICB3aWR0aDogbWF4LWNvbnRlbnQ7CiAgaGVpZ2h0OiAxMDBweDsKICBtYXJnaW4tcmlnaHQ6IGF1dG87CiAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2U1ZTVlNTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBMaXN0CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstbGlzdCB7CiAgcGFkZGluZzogMDsKICBsaXN0LXN0eWxlOiBub25lOwp9Ci8qCiAqIFJlbW92ZSBtYXJnaW4gZnJvbSB0aGUgbGFzdC1jaGlsZAogKi8KLnVrLWxpc3QgPiAqID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KLyoKICogU3R5bGUKICovCi51ay1saXN0ID4gOm50aC1jaGlsZChuKzIpLAoudWstbGlzdCA+ICogPiB1bCB7CiAgbWFyZ2luLXRvcDogMTBweDsKfQovKiBNYXJrZXIgbW9kaWZpZXJzCiAqIE1vdmluZyBgOjptYXJrZXJgIGluc2lkZSBgOjpiZWZvcmVgIHRvIHN0eWxlIGl0IGRpZmZlcmVudGx5CiAqIFRvIHN0eWxlIHRoZSBgOjptYXJrZXJgIGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBpbiBGaXJlZm94IGFuZCBTYWZhcmkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1saXN0LWRpc2MgPiAqLAoudWstbGlzdC1jaXJjbGUgPiAqLAoudWstbGlzdC1zcXVhcmUgPiAqLAoudWstbGlzdC1kZWNpbWFsID4gKiwKLnVrLWxpc3QtaHlwaGVuID4gKiB7CiAgcGFkZGluZy1yaWdodDogMzBweDsKfQovKgogKiBUeXBlIG1vZGlmaWVycwogKi8KLnVrLWxpc3QtZGVjaW1hbCB7CiAgY291bnRlci1yZXNldDogZGVjaW1hbDsKfQoudWstbGlzdC1kZWNpbWFsID4gKiB7CiAgY291bnRlci1pbmNyZW1lbnQ6IGRlY2ltYWw7Cn0KLnVrLWxpc3QtZGlzYyA+IDo6YmVmb3JlLAoudWstbGlzdC1jaXJjbGUgPiA6OmJlZm9yZSwKLnVrLWxpc3Qtc3F1YXJlID4gOjpiZWZvcmUsCi51ay1saXN0LWRlY2ltYWwgPiA6OmJlZm9yZSwKLnVrLWxpc3QtaHlwaGVuID4gOjpiZWZvcmUgewogIGNvbnRlbnQ6ICIiOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICByaWdodDogLTMwcHg7CiAgd2lkdGg6IDMwcHg7CiAgaGVpZ2h0OiAxLjVlbTsKICBtYXJnaW4tYm90dG9tOiAtMS41ZW07CiAgZGlzcGxheTogbGlzdC1pdGVtOwogIGxpc3Qtc3R5bGUtcG9zaXRpb246IGluc2lkZTsKICB0ZXh0LWFsaWduOiBsZWZ0Owp9Ci51ay1saXN0LWRpc2MgPiA6OmJlZm9yZSB7CiAgbGlzdC1zdHlsZS10eXBlOiBkaXNjOwp9Ci51ay1saXN0LWNpcmNsZSA+IDo6YmVmb3JlIHsKICBsaXN0LXN0eWxlLXR5cGU6IGNpcmNsZTsKfQoudWstbGlzdC1zcXVhcmUgPiA6OmJlZm9yZSB7CiAgbGlzdC1zdHlsZS10eXBlOiBzcXVhcmU7Cn0KLnVrLWxpc3QtZGVjaW1hbCA+IDo6YmVmb3JlIHsKICBjb250ZW50OiBjb3VudGVyKGRlY2ltYWwsIGRlY2ltYWwpICdcMjAwQS5cMDBBMCc7Cn0KLnVrLWxpc3QtaHlwaGVuID4gOjpiZWZvcmUgewogIGNvbnRlbnQ6ICfigJNcMDBBMFwwMEEwJzsKfQovKgogKiBDb2xvciBtb2RpZmllcnMKICovCi51ay1saXN0LW11dGVkID4gOjpiZWZvcmUgewogIGNvbG9yOiAjOTk5ICFpbXBvcnRhbnQ7Cn0KLnVrLWxpc3QtZW1waGFzaXMgPiA6OmJlZm9yZSB7CiAgY29sb3I6ICMzMzMgIWltcG9ydGFudDsKfQoudWstbGlzdC1wcmltYXJ5ID4gOjpiZWZvcmUgewogIGNvbG9yOiAjMWU4N2YwICFpbXBvcnRhbnQ7Cn0KLnVrLWxpc3Qtc2Vjb25kYXJ5ID4gOjpiZWZvcmUgewogIGNvbG9yOiAjMjIyICFpbXBvcnRhbnQ7Cn0KLyogSW1hZ2UgYnVsbGV0IG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstbGlzdC1idWxsZXQgPiAqIHsKICBwYWRkaW5nLXJpZ2h0OiAzMHB4Owp9Ci51ay1saXN0LWJ1bGxldCA+IDo6YmVmb3JlIHsKICBjb250ZW50OiAiIjsKICBkaXNwbGF5OiBsaXN0LWl0ZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHJpZ2h0OiAtMzBweDsKICB3aWR0aDogMzBweDsKICBoZWlnaHQ6IDEuNWVtOwogIG1hcmdpbi1ib3R0b206IC0xLjVlbTsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyNiUyMiUyMGhlaWdodCUzRCUyMjYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjA2JTIwNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDY2lyY2xlJTIwZmlsbCUzRCUyMiUyMzY2NiUyMiUyMGN4JTNEJTIyMyUyMiUyMGN5JTNEJTIyMyUyMiUyMHIlM0QlMjIzJTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIik7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNTAlOwp9Ci8qIFN0eWxlIG1vZGlmaWVycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogRGl2aWRlcgogKi8KLnVrLWxpc3QtZGl2aWRlciA+IDpudGgtY2hpbGQobisyKSB7CiAgbWFyZ2luLXRvcDogMTBweDsKICBwYWRkaW5nLXRvcDogMTBweDsKICBib3JkZXItdG9wOiAxcHggc29saWQgI2U1ZTVlNTsKfQovKgogKiBTdHJpcGVkCiAqLwoudWstbGlzdC1zdHJpcGVkID4gKiB7CiAgcGFkZGluZzogMTBweCAxMHB4Owp9Ci51ay1saXN0LXN0cmlwZWQgPiAqOm50aC1vZi10eXBlKG9kZCkgewogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1OwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTVlNWU1Owp9Ci51ay1saXN0LXN0cmlwZWQgPiA6bnRoLW9mLXR5cGUob2RkKSB7CiAgYmFja2dyb3VuZDogI2Y4ZjhmODsKfQoudWstbGlzdC1zdHJpcGVkID4gOm50aC1jaGlsZChuKzIpIHsKICBtYXJnaW4tdG9wOiAwOwp9Ci8qIFNpemUgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1saXN0LWxhcmdlID4gOm50aC1jaGlsZChuKzIpLAoudWstbGlzdC1sYXJnZSA+ICogPiB1bCB7CiAgbWFyZ2luLXRvcDogMjBweDsKfQoudWstbGlzdC1jb2xsYXBzZSA+IDpudGgtY2hpbGQobisyKSwKLnVrLWxpc3QtY29sbGFwc2UgPiAqID4gdWwgewogIG1hcmdpbi10b3A6IDA7Cn0KLyoKICogRGl2aWRlcgogKi8KLnVrLWxpc3QtbGFyZ2UudWstbGlzdC1kaXZpZGVyID4gOm50aC1jaGlsZChuKzIpIHsKICBtYXJnaW4tdG9wOiAyMHB4OwogIHBhZGRpbmctdG9wOiAyMHB4Owp9Ci51ay1saXN0LWNvbGxhcHNlLnVrLWxpc3QtZGl2aWRlciA+IDpudGgtY2hpbGQobisyKSB7CiAgbWFyZ2luLXRvcDogMDsKICBwYWRkaW5nLXRvcDogMDsKfQovKgogKiBTdHJpcGVkCiAqLwoudWstbGlzdC1sYXJnZS51ay1saXN0LXN0cmlwZWQgPiAqIHsKICBwYWRkaW5nOiAyMHB4IDEwcHg7Cn0KLnVrLWxpc3QtY29sbGFwc2UudWstbGlzdC1zdHJpcGVkID4gKiB7CiAgcGFkZGluZy10b3A6IDA7CiAgcGFkZGluZy1ib3R0b206IDA7Cn0KLnVrLWxpc3QtbGFyZ2UudWstbGlzdC1zdHJpcGVkID4gOm50aC1jaGlsZChuKzIpLAoudWstbGlzdC1jb2xsYXBzZS51ay1saXN0LXN0cmlwZWQgPiA6bnRoLWNoaWxkKG4rMikgewogIG1hcmdpbi10b3A6IDA7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogRGVzY3JpcHRpb24gbGlzdAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogVGVybQogKi8KLnVrLWRlc2NyaXB0aW9uLWxpc3QgPiBkdCB7CiAgY29sb3I6ICMzMzM7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKICBmb250LXdlaWdodDogbm9ybWFsOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KLnVrLWRlc2NyaXB0aW9uLWxpc3QgPiBkdDpudGgtY2hpbGQobisyKSB7CiAgbWFyZ2luLXRvcDogMjBweDsKfQovKgogKiBEZXNjcmlwdGlvbgogKi8KLyogU3R5bGUgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIExpbmUKICovCi51ay1kZXNjcmlwdGlvbi1saXN0LWRpdmlkZXIgPiBkdDpudGgtY2hpbGQobisyKSB7CiAgbWFyZ2luLXRvcDogMjBweDsKICBwYWRkaW5nLXRvcDogMjBweDsKICBib3JkZXItdG9wOiAxcHggc29saWQgI2U1ZTVlNTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBUYWJsZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gUmVtb3ZlIG1vc3Qgc3BhY2luZyBiZXR3ZWVuIHRhYmxlIGNlbGxzLgogKiAyLiBCZWhhdmUgbGlrZSBhIGJsb2NrIGVsZW1lbnQKICogMy4gU3R5bGUKICovCi51ay10YWJsZSB7CiAgLyogMSAqLwogIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgYm9yZGVyLXNwYWNpbmc6IDA7CiAgLyogMiAqLwogIHdpZHRoOiAxMDAlOwogIC8qIDMgKi8KICBtYXJnaW4tYm90dG9tOiAyMHB4Owp9Ci8qIEFkZCBtYXJnaW4gaWYgYWRqYWNlbnQgZWxlbWVudCAqLwoqICsgLnVrLXRhYmxlIHsKICBtYXJnaW4tdG9wOiAyMHB4Owp9Ci8qIEhlYWRlciBjZWxsCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBTdHlsZQogKi8KLnVrLXRhYmxlIHRoIHsKICBwYWRkaW5nOiAxNnB4IDEycHg7CiAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsKICAvKiAxICovCiAgZm9udC1zaXplOiAwLjg3NXJlbTsKICBmb250LXdlaWdodDogbm9ybWFsOwogIGNvbG9yOiAjOTk5OwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KLyogQ2VsbAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXRhYmxlIHRkIHsKICBwYWRkaW5nOiAxNnB4IDEycHg7CiAgdmVydGljYWwtYWxpZ246IHRvcDsKfQovKgogKiBSZW1vdmUgbWFyZ2luIGZyb20gdGhlIGxhc3QtY2hpbGQKICovCi51ay10YWJsZSB0ZCA+IDpsYXN0LWNoaWxkIHsKICBtYXJnaW4tYm90dG9tOiAwOwp9Ci8qIEZvb3RlcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXRhYmxlIHRmb290IHsKICBmb250LXNpemU6IDAuODc1cmVtOwp9Ci8qIENhcHRpb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay10YWJsZSBjYXB0aW9uIHsKICBmb250LXNpemU6IDAuODc1cmVtOwogIHRleHQtYWxpZ246IHJpZ2h0OwogIGNvbG9yOiAjOTk5Owp9Ci8qIEFsaWdubWVudCBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXRhYmxlLW1pZGRsZSwKLnVrLXRhYmxlLW1pZGRsZSB0ZCB7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50Owp9Ci8qIFN0eWxlIG1vZGlmaWVycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogRGl2aWRlcgogKi8KLnVrLXRhYmxlLWRpdmlkZXIgPiB0cjpub3QoOmZpcnN0LWNoaWxkKSwKLnVrLXRhYmxlLWRpdmlkZXIgPiA6bm90KDpmaXJzdC1jaGlsZCkgPiB0ciwKLnVrLXRhYmxlLWRpdmlkZXIgPiA6Zmlyc3QtY2hpbGQgPiB0cjpub3QoOmZpcnN0LWNoaWxkKSB7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNWU1ZTU7Cn0KLyoKICogU3RyaXBlZAogKi8KLnVrLXRhYmxlLXN0cmlwZWQgPiB0cjpudGgtb2YtdHlwZShvZGQpLAoudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpIHsKICBiYWNrZ3JvdW5kOiAjZjhmOGY4OwogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1OwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTVlNWU1Owp9Ci8qCiAqIEhvdmVyCiAqLwoudWstdGFibGUtaG92ZXIgPiB0cjpob3ZlciwKLnVrLXRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyIHsKICBiYWNrZ3JvdW5kOiAjZmZkOwp9Ci8qIEFjdGl2ZSBzdGF0ZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXRhYmxlID4gdHIudWstYWN0aXZlLAoudWstdGFibGUgdGJvZHkgdHIudWstYWN0aXZlIHsKICBiYWNrZ3JvdW5kOiAjZmZkOwp9Ci8qIFNpemUgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay10YWJsZS1zbWFsbCB0aCwKLnVrLXRhYmxlLXNtYWxsIHRkIHsKICBwYWRkaW5nOiAxMHB4IDEycHg7Cn0KLnVrLXRhYmxlLWxhcmdlIHRoLAoudWstdGFibGUtbGFyZ2UgdGQgewogIHBhZGRpbmc6IDIycHggMTJweDsKfQovKiBKdXN0aWZ5IG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstdGFibGUtanVzdGlmeSB0aDpmaXJzdC1jaGlsZCwKLnVrLXRhYmxlLWp1c3RpZnkgdGQ6Zmlyc3QtY2hpbGQgewogIHBhZGRpbmctcmlnaHQ6IDA7Cn0KLnVrLXRhYmxlLWp1c3RpZnkgdGg6bGFzdC1jaGlsZCwKLnVrLXRhYmxlLWp1c3RpZnkgdGQ6bGFzdC1jaGlsZCB7CiAgcGFkZGluZy1sZWZ0OiAwOwp9Ci8qIENlbGwgc2l6ZSBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXRhYmxlLXNocmluayB7CiAgd2lkdGg6IDFweDsKfQoudWstdGFibGUtZXhwYW5kIHsKICBtaW4td2lkdGg6IDE1MHB4Owp9Ci8qIENlbGwgbGluayBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogRG9lcyBub3Qgd29yayB3aXRoIGB1ay10YWJsZS1qdXN0aWZ5YCBhdCB0aGUgbW9tZW50CiAqLwoudWstdGFibGUtbGluayB7CiAgcGFkZGluZzogMCAhaW1wb3J0YW50Owp9Ci51ay10YWJsZS1saW5rID4gYSB7CiAgZGlzcGxheTogYmxvY2s7CiAgcGFkZGluZzogMTZweCAxMnB4Owp9Ci51ay10YWJsZS1zbWFsbCAudWstdGFibGUtbGluayA+IGEgewogIHBhZGRpbmc6IDEwcHggMTJweDsKfQovKiBSZXNwb25zaXZlIHRhYmxlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIHNtYWxsZXIgKi8KQG1lZGlhIChtYXgtd2lkdGg6IDk1OXB4KSB7CiAgLnVrLXRhYmxlLXJlc3BvbnNpdmUsCiAgLnVrLXRhYmxlLXJlc3BvbnNpdmUgdGJvZHksCiAgLnVrLXRhYmxlLXJlc3BvbnNpdmUgdGgsCiAgLnVrLXRhYmxlLXJlc3BvbnNpdmUgdGQsCiAgLnVrLXRhYmxlLXJlc3BvbnNpdmUgdHIgewogICAgZGlzcGxheTogYmxvY2s7CiAgfQogIC51ay10YWJsZS1yZXNwb25zaXZlIHRoZWFkIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQogIC51ay10YWJsZS1yZXNwb25zaXZlIHRoLAogIC51ay10YWJsZS1yZXNwb25zaXZlIHRkIHsKICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7CiAgICBtYXgtd2lkdGg6IG5vbmUgIWltcG9ydGFudDsKICAgIG1pbi13aWR0aDogMCAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWwgIWltcG9ydGFudDsKICB9CiAgLnVrLXRhYmxlLXJlc3BvbnNpdmUgdGg6bm90KDpmaXJzdC1jaGlsZCk6bm90KC51ay10YWJsZS1saW5rKSwKICAudWstdGFibGUtcmVzcG9uc2l2ZSB0ZDpub3QoOmZpcnN0LWNoaWxkKTpub3QoLnVrLXRhYmxlLWxpbmspLAogIC51ay10YWJsZS1yZXNwb25zaXZlIC51ay10YWJsZS1saW5rOm5vdCg6Zmlyc3QtY2hpbGQpID4gYSB7CiAgICBwYWRkaW5nLXRvcDogNXB4ICFpbXBvcnRhbnQ7CiAgfQogIC51ay10YWJsZS1yZXNwb25zaXZlIHRoOm5vdCg6bGFzdC1jaGlsZCk6bm90KC51ay10YWJsZS1saW5rKSwKICAudWstdGFibGUtcmVzcG9uc2l2ZSB0ZDpub3QoOmxhc3QtY2hpbGQpOm5vdCgudWstdGFibGUtbGluayksCiAgLnVrLXRhYmxlLXJlc3BvbnNpdmUgLnVrLXRhYmxlLWxpbms6bm90KDpsYXN0LWNoaWxkKSA+IGEgewogICAgcGFkZGluZy1ib3R0b206IDVweCAhaW1wb3J0YW50OwogIH0KICAudWstdGFibGUtanVzdGlmeS51ay10YWJsZS1yZXNwb25zaXZlIHRoLAogIC51ay10YWJsZS1qdXN0aWZ5LnVrLXRhYmxlLXJlc3BvbnNpdmUgdGQgewogICAgcGFkZGluZy1yaWdodDogMDsKICAgIHBhZGRpbmctbGVmdDogMDsKICB9Cn0KLnVrLXRhYmxlIHRib2R5IHRyIHsKICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMXMgbGluZWFyOwp9Ci51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCB7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNWU1ZTU7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogSWNvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogTm90ZTogMS4gLSA3LiBpcyByZXF1aXJlZCBmb3IgYGJ1dHRvbmAgZWxlbWVudHMuIE5lZWRlZCBmb3IgQ2xvc2UgYW5kIEZvcm0gSWNvbiBjb21wb25lbnQuCiAqIDEuIFJlbW92ZSBtYXJnaW5zIGluIENocm9tZSwgU2FmYXJpIGFuZCBPcGVyYS4KICogMi4gUmVtb3ZlIGJvcmRlcnMgZm9yIGBidXR0b25gLgogKiAzLiBSZW1vdmUgYm9yZGVyLXJhZGl1cyBpbiBDaHJvbWUuCiAqIDQuIEFkZHJlc3MgYG92ZXJmbG93YCBzZXQgdG8gYGhpZGRlbmAgaW4gSUUuCiAqIDUuIENvcnJlY3QgYGZvbnRgIHByb3BlcnRpZXMgYW5kIGBjb2xvcmAgbm90IGJlaW5nIGluaGVyaXRlZCBmb3IgYGJ1dHRvbmAuCiAqIDYuIFJlbW92ZSB0aGUgaW5oZXJpdGFuY2Ugb2YgdGV4dCB0cmFuc2Zvcm0gaW4gRWRnZSwgRmlyZWZveCwgYW5kIElFLgogKiA3LiBSZW1vdmUgZGVmYXVsdCBgYnV0dG9uYCBwYWRkaW5nIGFuZCBiYWNrZ3JvdW5kIGNvbG9yCiAqIDguIFN0eWxlCiAqIDkuIEZpbGwgYWxsIFNWRyBlbGVtZW50cyB3aXRoIHRoZSBjdXJyZW50IHRleHQgY29sb3IgaWYgbm8gYGZpbGxgIGF0dHJpYnV0ZSBpcyBzZXQKICogMTAuIExldCB0aGUgY29udGFpbmVyIGZpdCB0aGUgaGVpZ2h0IG9mIHRoZSBpY29uCiAqLwoudWstaWNvbiB7CiAgLyogMSAqLwogIG1hcmdpbjogMDsKICAvKiAyICovCiAgYm9yZGVyOiBub25lOwogIC8qIDMgKi8KICBib3JkZXItcmFkaXVzOiAwOwogIC8qIDQgKi8KICBvdmVyZmxvdzogdmlzaWJsZTsKICAvKiA1ICovCiAgZm9udDogaW5oZXJpdDsKICBjb2xvcjogaW5oZXJpdDsKICAvKiA2ICovCiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgLyogNy4gKi8KICBwYWRkaW5nOiAwOwogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogIC8qIDggKi8KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgLyogOSAqLwogIGZpbGw6IGN1cnJlbnRjb2xvcjsKICAvKiAxMCAqLwogIGxpbmUtaGVpZ2h0OiAwOwp9Ci8qIFJlcXVpcmVkIGZvciBgYnV0dG9uYC4gKi8KYnV0dG9uLnVrLWljb246bm90KDpkaXNhYmxlZCkgewogIGN1cnNvcjogcG9pbnRlcjsKfQovKgogKiBSZW1vdmUgdGhlIGlubmVyIGJvcmRlciBhbmQgcGFkZGluZyBpbiBGaXJlZm94LgogKi8KLnVrLWljb246Oi1tb3otZm9jdXMtaW5uZXIgewogIGJvcmRlcjogMDsKICBwYWRkaW5nOiAwOwp9Ci8qCiAqIFNldCB0aGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9yIG9mIGFsbCBTVkcgZWxlbWVudHMgdG8gdGhlIGN1cnJlbnQgdGV4dCBjb2xvcgogKi8KLnVrLWljb246bm90KC51ay1wcmVzZXJ2ZSkgW2ZpbGwqPScjJ106bm90KC51ay1wcmVzZXJ2ZSkgewogIGZpbGw6IGN1cnJlbnRjb2xvcjsKfQoudWstaWNvbjpub3QoLnVrLXByZXNlcnZlKSBbc3Ryb2tlKj0nIyddOm5vdCgudWstcHJlc2VydmUpIHsKICBzdHJva2U6IGN1cnJlbnRjb2xvcjsKfQovKgogKiBGaXggRmlyZWZveCBibHVycnkgU1ZHIHJlbmRlcmluZzogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0NjgzNQogKi8KLnVrLWljb24gPiAqIHsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTsKfQovKiBJbWFnZSBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogRGlzcGxheSBpbWFnZXMgaW4gaWNvbiBkaW1lbnNpb25zCiAqIDEuIFJlcXVpcmVkIGZvciBgc3BhbmAgd2l0aCBiYWNrZ3JvdW5kIGltYWdlCiAqIDIuIFJlcXVpcmVkIGZvciBgaW1hZ2VgCiAqLwoudWstaWNvbi1pbWFnZSB7CiAgd2lkdGg6IDIwcHg7CiAgaGVpZ2h0OiAyMHB4OwogIC8qIDEgKi8KICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNTAlOwogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgLyogMiAqLwogIG9iamVjdC1maXQ6IHNjYWxlLWRvd247CiAgbWF4LXdpZHRoOiBub25lOwp9Ci8qIFN0eWxlIG1vZGlmaWVycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogTGluawogKiAxLiBBbGxvdyB0ZXh0IHdpdGhpbiBsaW5rCiAqLwoudWstaWNvbi1saW5rIHsKICBjb2xvcjogIzk5OTsKICAvKiAxICovCiAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7Cn0KLnVrLWljb24tbGluazpob3ZlciB7CiAgY29sb3I6ICM2NjY7Cn0KLyogT25DbGljayArIEFjdGl2ZSAqLwoudWstaWNvbi1saW5rOmFjdGl2ZSwKLnVrLWFjdGl2ZSA+IC51ay1pY29uLWxpbmsgewogIGNvbG9yOiAjNTk1OTU5Owp9Ci8qCiAqIEJ1dHRvbgogKiAxLiBDZW50ZXIgaWNvbiB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFsbHkKICovCi51ay1pY29uLWJ1dHRvbiB7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB3aWR0aDogMzZweDsKICBoZWlnaHQ6IDM2cHg7CiAgYm9yZGVyLXJhZGl1czogNTAwcHg7CiAgYmFja2dyb3VuZDogI2Y4ZjhmODsKICBjb2xvcjogIzk5OTsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIC8qIDEgKi8KICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIHRyYW5zaXRpb246IDAuMXMgZWFzZS1pbi1vdXQ7CiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogY29sb3IsIGJhY2tncm91bmQtY29sb3I7Cn0KLyogSG92ZXIgKi8KLnVrLWljb24tYnV0dG9uOmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWJlYmViOwogIGNvbG9yOiAjNjY2Owp9Ci8qIE9uQ2xpY2sgKyBBY3RpdmUgKi8KLnVrLWljb24tYnV0dG9uOmFjdGl2ZSwKLnVrLWFjdGl2ZSA+IC51ay1pY29uLWJ1dHRvbiB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2RmZGZkZjsKICBjb2xvcjogIzY2NjsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBGb3JtIFJhbmdlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBSZW1vdmUgZGVmYXVsdCBzdHlsZS4KICogMi4gRGVmaW5lIGNvbnNpc3RlbnQgYm94IHNpemluZy4KICogMy4gUmVtb3ZlIGBtYXJnaW5gIGluIGFsbCBicm93c2Vycy4KICogNC4gQWxpZ24gdG8gdGhlIGNlbnRlciBvZiB0aGUgbGluZSBib3guCiAqIDUuIFByZXZlbnQgY29udGVudCBvdmVyZmxvdyBpZiBhIGZpeGVkIHdpZHRoIGlzIHVzZWQuCiAqIDYuIFRha2UgdGhlIGZ1bGwgd2lkdGguCiAqIDcuIFJlbW92ZSB3aGl0ZSBiYWNrZ3JvdW5kIGluIENocm9tZS4KICovCi51ay1yYW5nZSB7CiAgLyogMSAqLwogIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAvKiAyICovCiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAvKiAzICovCiAgbWFyZ2luOiAwOwogIC8qIDQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIC8qIDUgKi8KICBtYXgtd2lkdGg6IDEwMCU7CiAgLyogNiAqLwogIHdpZHRoOiAxMDAlOwogIC8qIDcgKi8KICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQovKiBGb2N1cyAqLwoudWstcmFuZ2U6Zm9jdXMgewogIG91dGxpbmU6IG5vbmU7Cn0KLnVrLXJhbmdlOjotbW96LWZvY3VzLW91dGVyIHsKICBib3JkZXI6IG5vbmU7Cn0KLyoKICogSW1wcm92ZXMgY29uc2lzdGVuY3kgb2YgY3Vyc29yIHN0eWxlIGZvciBjbGlja2FibGUgZWxlbWVudHMKICovCi51ay1yYW5nZTpub3QoOmRpc2FibGVkKTo6LXdlYmtpdC1zbGlkZXItdGh1bWIgewogIGN1cnNvcjogcG9pbnRlcjsKfQoudWstcmFuZ2U6bm90KDpkaXNhYmxlZCk6Oi1tb3otcmFuZ2UtdGh1bWIgewogIGN1cnNvcjogcG9pbnRlcjsKfQovKgogKiBUcmFjawogKiAxLiBTYWZhcmkgZG9lc24ndCBoYXZlIGEgZm9jdXMgc3RhdGUuIFVzaW5nIGFjdGl2ZSBpbnN0ZWFkLgogKi8KLyogV2Via2l0ICovCi51ay1yYW5nZTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2sgewogIGhlaWdodDogM3B4OwogIGJhY2tncm91bmQ6ICNlYmViZWI7CiAgYm9yZGVyLXJhZGl1czogNTAwcHg7Cn0KLnVrLXJhbmdlOmZvY3VzOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFjaywKLnVrLXJhbmdlOmFjdGl2ZTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2sgewogIGJhY2tncm91bmQ6ICNkZWRlZGU7Cn0KLyogRmlyZWZveCAqLwoudWstcmFuZ2U6Oi1tb3otcmFuZ2UtdHJhY2sgewogIGhlaWdodDogM3B4OwogIGJhY2tncm91bmQ6ICNlYmViZWI7CiAgYm9yZGVyLXJhZGl1czogNTAwcHg7Cn0KLnVrLXJhbmdlOmZvY3VzOjotbW96LXJhbmdlLXRyYWNrIHsKICBiYWNrZ3JvdW5kOiAjZGVkZWRlOwp9Ci8qCiAqIFRodW1iCiAqIDEuIFJlc2V0CiAqIDIuIFN0eWxlCiAqLwovKiBXZWJraXQgKi8KLnVrLXJhbmdlOjotd2Via2l0LXNsaWRlci10aHVtYiB7CiAgLyogMSAqLwogIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICBtYXJnaW4tdG9wOiAtN3B4OwogIC8qIDIgKi8KICBoZWlnaHQ6IDE1cHg7CiAgd2lkdGg6IDE1cHg7CiAgYm9yZGVyLXJhZGl1czogNTAwcHg7CiAgYmFja2dyb3VuZDogI2ZmZjsKICBib3JkZXI6IDFweCBzb2xpZCAjY2NjY2NjOwp9Ci8qIEZpcmVmb3ggKi8KLnVrLXJhbmdlOjotbW96LXJhbmdlLXRodW1iIHsKICAvKiAxICovCiAgYm9yZGVyOiBub25lOwogIC8qIDIgKi8KICBoZWlnaHQ6IDE1cHg7CiAgd2lkdGg6IDE1cHg7CiAgbWFyZ2luLXRvcDogLTdweDsKICBib3JkZXItcmFkaXVzOiA1MDBweDsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGJvcmRlcjogMXB4IHNvbGlkICNjY2NjY2M7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogRm9ybQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gRGVmaW5lIGNvbnNpc3RlbnQgYm94IHNpemluZy4KICogICAgRGVmYXVsdCBpcyBgY29udGVudC1ib3hgIHdpdGggZm9sbG93aW5nIGV4Y2VwdGlvbnMgc2V0IHRvIGBib3JkZXItYm94YAogKiAgICBgc2VsZWN0YCwgYGlucHV0W3R5cGU9ImNoZWNrYm94Il1gIGFuZCBgaW5wdXRbdHlwZT0icmFkaW8iXWAKICogICAgYGlucHV0W3R5cGU9InNlYXJjaCJdYCBpbiBDaHJvbWUsIFNhZmFyaSBhbmQgT3BlcmEKICogICAgYGlucHV0W3R5cGU9ImNvbG9yIl1gIGluIEZpcmVmb3gKICogMi4gQWRkcmVzcyBtYXJnaW5zIHNldCBkaWZmZXJlbnRseSBpbiBGaXJlZm94L0lFIGFuZCBDaHJvbWUvU2FmYXJpL09wZXJhLgogKiAzLiBSZW1vdmUgYGJvcmRlci1yYWRpdXNgIGluIGlPUy4KICogNC4gQ2hhbmdlIGZvbnQgcHJvcGVydGllcyB0byBgaW5oZXJpdGAgaW4gYWxsIGJyb3dzZXJzLgogKi8KLnVrLWlucHV0LAoudWstc2VsZWN0LAoudWstdGV4dGFyZWEsCi51ay1yYWRpbywKLnVrLWNoZWNrYm94IHsKICAvKiAxICovCiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAvKiAyICovCiAgbWFyZ2luOiAwOwogIC8qIDMgKi8KICBib3JkZXItcmFkaXVzOiAwOwogIC8qIDQgKi8KICBmb250OiBpbmhlcml0Owp9Ci8qCiAqIFNob3cgdGhlIG92ZXJmbG93IGluIEVkZ2UuCiAqLwoudWstaW5wdXQgewogIG92ZXJmbG93OiB2aXNpYmxlOwp9Ci8qCiAqIFJlbW92ZSB0aGUgaW5oZXJpdGFuY2Ugb2YgdGV4dCB0cmFuc2Zvcm0gaW4gRmlyZWZveC4KICovCi51ay1zZWxlY3QgewogIHRleHQtdHJhbnNmb3JtOiBub25lOwp9Ci8qCiAqIDEuIENoYW5nZSBmb250IHByb3BlcnRpZXMgdG8gYGluaGVyaXRgIGluIGFsbCBicm93c2VycwogKiAyLiBEb24ndCBpbmhlcml0IHRoZSBgZm9udC13ZWlnaHRgIGFuZCB1c2UgYGJvbGRgIGluc3RlYWQuCiAqIE5PVEU6IEJvdGggZGVjbGFyYXRpb25zIGRvbid0IHdvcmsgaW4gQ2hyb21lLCBTYWZhcmkgYW5kIE9wZXJhLgogKi8KLnVrLXNlbGVjdCBvcHRncm91cCB7CiAgLyogMSAqLwogIGZvbnQ6IGluaGVyaXQ7CiAgLyogMiAqLwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9Ci8qCiAqIFJlbW92ZSB0aGUgZGVmYXVsdCB2ZXJ0aWNhbCBzY3JvbGxiYXIgaW4gSUUgMTArLgogKi8KLnVrLXRleHRhcmVhIHsKICBvdmVyZmxvdzogYXV0bzsKfQovKgogKiBSZW1vdmUgdGhlIGlubmVyIHBhZGRpbmcgYW5kIGNhbmNlbCBidXR0b25zIGluIENocm9tZSBvbiBPUyBYIGFuZCBTYWZhcmkgb24gT1MgWC4KICovCi51ay1pbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwKLnVrLWlucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHsKICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Cn0KLyoKICogQ29ycmVjdCB0aGUgY3Vyc29yIHN0eWxlIG9mIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGJ1dHRvbnMgaW4gQ2hyb21lLgogKi8KLnVrLWlucHV0W3R5cGU9Im51bWJlciJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLAoudWstaW5wdXRbdHlwZT0ibnVtYmVyIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24gewogIGhlaWdodDogYXV0bzsKfQovKgogKiBSZW1vdmVzIHBsYWNlaG9sZGVyIHRyYW5zcGFyZW5jeSBpbiBGaXJlZm94LgogKi8KLnVrLWlucHV0OjotbW96LXBsYWNlaG9sZGVyLAoudWstdGV4dGFyZWE6Oi1tb3otcGxhY2Vob2xkZXIgewogIG9wYWNpdHk6IDE7Cn0KLyoKICogSW1wcm92ZXMgY29uc2lzdGVuY3kgb2YgY3Vyc29yIHN0eWxlIGZvciBjbGlja2FibGUgZWxlbWVudHMKICovCi51ay1yYWRpbzpub3QoOmRpc2FibGVkKSwKLnVrLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpIHsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KLyoKICogRGVmaW5lIGNvbnNpc3RlbnQgYm9yZGVyLCBtYXJnaW4sIGFuZCBwYWRkaW5nLgogKi8KLnVrLWZpZWxkc2V0IHsKICBib3JkZXI6IG5vbmU7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7Cn0KLyogSW5wdXQsIHNlbGVjdCBhbmQgdGV4dGFyZWEKICogQWxsb3dlZDogYHRleHRgLCBgcGFzc3dvcmRgLCBgZGF0ZXRpbWVgLCBgZGF0ZXRpbWUtbG9jYWxgLCBgZGF0ZWAsICBgbW9udGhgLAogICAgICAgICAgICBgdGltZWAsIGB3ZWVrYCwgYG51bWJlcmAsIGBlbWFpbGAsIGB1cmxgLCBgc2VhcmNoYCwgYHRlbGAsIGBjb2xvcmAKICogRGlzYWxsb3dlZDogYHJhbmdlYCwgYHJhZGlvYCwgYGNoZWNrYm94YCwgYGZpbGVgLCBgc3VibWl0YCwgYHJlc2V0YCBhbmQgYGltYWdlYAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogUmVtb3ZlIGRlZmF1bHQgc3R5bGUgaW4gaU9TLgogKi8KLnVrLWlucHV0LAoudWstdGV4dGFyZWEgewogIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKfQovKgogKiAxLiBQcmV2ZW50IGNvbnRlbnQgb3ZlcmZsb3cgaWYgYSBmaXhlZCB3aWR0aCBpcyB1c2VkCiAqIDIuIFRha2UgdGhlIGZ1bGwgd2lkdGgKICogMy4gUmVzZXQgZGVmYXVsdAogKiA0LiBTdHlsZQogKi8KLnVrLWlucHV0LAoudWstc2VsZWN0LAoudWstdGV4dGFyZWEgewogIC8qIDEgKi8KICBtYXgtd2lkdGg6IDEwMCU7CiAgLyogMiAqLwogIHdpZHRoOiAxMDAlOwogIC8qIDMgKi8KICBib3JkZXI6IDAgbm9uZTsKICAvKiA0ICovCiAgcGFkZGluZzogMCAxMHB4OwogIGJhY2tncm91bmQ6ICNmZmY7CiAgY29sb3I6ICM2NjY7CiAgYm9yZGVyOiAxcHggc29saWQgI2U1ZTVlNTsKICB0cmFuc2l0aW9uOiAwLjJzIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb24tcHJvcGVydHk6IGNvbG9yLCBiYWNrZ3JvdW5kLWNvbG9yLCBib3JkZXI7Cn0KLyoKICogU2luZ2xlLWxpbmUKICogMS4gQWxsb3cgYW55IGVsZW1lbnQgdG8gbG9vayBsaWtlIGFuIGBpbnB1dGAgb3IgYHNlbGVjdGAgZWxlbWVudAogKiAyLiBNYWtlIHN1cmUgbGluZS1oZWlnaHQgaXMgbm90IGxhcmdlciB0aGFuIGhlaWdodAogKiAgICBBbHNvIG5lZWRlZCB0byBjZW50ZXIgdGhlIHRleHQgdmVydGljYWxseQogKi8KLnVrLWlucHV0LAoudWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSB7CiAgaGVpZ2h0OiA0MHB4OwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgLyogMSAqLwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKfQovKiAyICovCi51ay1pbnB1dDpub3QoaW5wdXQpLAoudWstc2VsZWN0Om5vdChzZWxlY3QpIHsKICBsaW5lLWhlaWdodDogMzhweDsKfQovKgogKiBNdWx0aS1saW5lCiAqLwoudWstc2VsZWN0W211bHRpcGxlXSwKLnVrLXNlbGVjdFtzaXplXSwKLnVrLXRleHRhcmVhIHsKICBwYWRkaW5nLXRvcDogNnB4OwogIHBhZGRpbmctYm90dG9tOiA2cHg7CiAgdmVydGljYWwtYWxpZ246IHRvcDsKfQoudWstc2VsZWN0W211bHRpcGxlXSwKLnVrLXNlbGVjdFtzaXplXSB7CiAgcmVzaXplOiB2ZXJ0aWNhbDsKfQovKiBGb2N1cyAqLwoudWstaW5wdXQ6Zm9jdXMsCi51ay1zZWxlY3Q6Zm9jdXMsCi51ay10ZXh0YXJlYTpmb2N1cyB7CiAgb3V0bGluZTogbm9uZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogIGNvbG9yOiAjNjY2OwogIGJvcmRlci1jb2xvcjogIzFlODdmMDsKfQovKiBEaXNhYmxlZCAqLwoudWstaW5wdXQ6ZGlzYWJsZWQsCi51ay1zZWxlY3Q6ZGlzYWJsZWQsCi51ay10ZXh0YXJlYTpkaXNhYmxlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsKICBjb2xvcjogIzk5OTsKICBib3JkZXItY29sb3I6ICNlNWU1ZTU7Cn0KLyoKICogUGxhY2Vob2xkZXIKICovCi51ay1pbnB1dDo6cGxhY2Vob2xkZXIgewogIGNvbG9yOiAjOTk5Owp9Ci51ay10ZXh0YXJlYTo6cGxhY2Vob2xkZXIgewogIGNvbG9yOiAjOTk5Owp9Ci8qIFN0eWxlIG1vZGlmaWVyIChgdWstaW5wdXRgLCBgdWstc2VsZWN0YCBhbmQgYHVrLXRleHRhcmVhYCkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIFNtYWxsCiAqLwoudWstZm9ybS1zbWFsbCB7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKfQovKiBTaW5nbGUtbGluZSAqLwoudWstZm9ybS1zbWFsbDpub3QodGV4dGFyZWEpOm5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSB7CiAgaGVpZ2h0OiAzMHB4OwogIHBhZGRpbmctcmlnaHQ6IDhweDsKICBwYWRkaW5nLWxlZnQ6IDhweDsKfQovKiBNdWx0aS1saW5lICovCnRleHRhcmVhLnVrLWZvcm0tc21hbGwsClttdWx0aXBsZV0udWstZm9ybS1zbWFsbCwKW3NpemVdLnVrLWZvcm0tc21hbGwgewogIHBhZGRpbmc6IDVweCA4cHg7Cn0KLnVrLWZvcm0tc21hbGw6bm90KHNlbGVjdCk6bm90KGlucHV0KTpub3QodGV4dGFyZWEpIHsKICBsaW5lLWhlaWdodDogMjhweDsKfQovKgogKiBMYXJnZQogKi8KLnVrLWZvcm0tbGFyZ2UgewogIGZvbnQtc2l6ZTogMS4yNXJlbTsKfQovKiBTaW5nbGUtbGluZSAqLwoudWstZm9ybS1sYXJnZTpub3QodGV4dGFyZWEpOm5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSB7CiAgaGVpZ2h0OiA1NXB4OwogIHBhZGRpbmctcmlnaHQ6IDEycHg7CiAgcGFkZGluZy1sZWZ0OiAxMnB4Owp9Ci8qIE11bHRpLWxpbmUgKi8KdGV4dGFyZWEudWstZm9ybS1sYXJnZSwKW211bHRpcGxlXS51ay1mb3JtLWxhcmdlLApbc2l6ZV0udWstZm9ybS1sYXJnZSB7CiAgcGFkZGluZzogN3B4IDEycHg7Cn0KLnVrLWZvcm0tbGFyZ2U6bm90KHNlbGVjdCk6bm90KGlucHV0KTpub3QodGV4dGFyZWEpIHsKICBsaW5lLWhlaWdodDogNTNweDsKfQovKiBTdHlsZSBtb2RpZmllciAoYHVrLWlucHV0YCwgYHVrLXNlbGVjdGAgYW5kIGB1ay10ZXh0YXJlYWApCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBFcnJvcgogKi8KLnVrLWZvcm0tZGFuZ2VyLAoudWstZm9ybS1kYW5nZXI6Zm9jdXMgewogIGNvbG9yOiAjZjA1MDZlOwogIGJvcmRlci1jb2xvcjogI2YwNTA2ZTsKfQovKgogKiBTdWNjZXNzCiAqLwoudWstZm9ybS1zdWNjZXNzLAoudWstZm9ybS1zdWNjZXNzOmZvY3VzIHsKICBjb2xvcjogIzMyZDI5NjsKICBib3JkZXItY29sb3I6ICMzMmQyOTY7Cn0KLyoKICogQmxhbmsKICovCi51ay1mb3JtLWJsYW5rIHsKICBiYWNrZ3JvdW5kOiBub25lOwogIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7Cn0KLnVrLWZvcm0tYmxhbms6Zm9jdXMgewogIGJvcmRlci1jb2xvcjogI2U1ZTVlNTsKICBib3JkZXItc3R5bGU6IHNvbGlkOwp9Ci8qIFdpZHRoIG1vZGlmaWVycyAoYHVrLWlucHV0YCwgYHVrLXNlbGVjdGAgYW5kIGB1ay10ZXh0YXJlYWApCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBGaXhlZCB3aWR0aHMKICogRGlmZmVyZW50IHdpZHRocyBmb3IgbWluaSBzaXplZCBgaW5wdXRgIGFuZCBgc2VsZWN0YCBlbGVtZW50cwogKi8KaW5wdXQudWstZm9ybS13aWR0aC14c21hbGwgewogIHdpZHRoOiA1MHB4Owp9CnNlbGVjdC51ay1mb3JtLXdpZHRoLXhzbWFsbCB7CiAgd2lkdGg6IDc1cHg7Cn0KLnVrLWZvcm0td2lkdGgtc21hbGwgewogIHdpZHRoOiAxMzBweDsKfQoudWstZm9ybS13aWR0aC1tZWRpdW0gewogIHdpZHRoOiAyMDBweDsKfQoudWstZm9ybS13aWR0aC1sYXJnZSB7CiAgd2lkdGg6IDUwMHB4Owp9Ci8qIFNlbGVjdAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gUmVtb3ZlIGRlZmF1bHQgc3R5bGUuIEFsc28gd29ya3MgaW4gRmlyZWZveAogKiAyLiBTdHlsZQogKiAzLiBTZXQgYGNvbG9yYCBmb3Igb3B0aW9ucyBpbiB0aGUgc2VsZWN0IGRyb3Bkb3duLCBiZWNhdXNlIHRoZSBpbmhlcml0ZWQgYGNvbG9yYCBtaWdodCBiZSB0b28gbGlnaHQuCiAqLwoudWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSB7CiAgLyogMSAqLwogIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7CiAgLyogMiAqLwogIHBhZGRpbmctbGVmdDogMjBweDsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDI0JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxJTIwOSUyMDYlMjAxNSUyMDYlMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzY2NiUyMiUyMHBvaW50cyUzRCUyMjEyJTIwMTMlMjA5JTIwOCUyMDE1JTIwOCUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSIpOwogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCUgNTAlOwp9Ci8qIDMgKi8KLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSkgb3B0aW9uIHsKICBjb2xvcjogIzY2NjsKfQovKgogKiBEaXNhYmxlZAogKi8KLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSk6ZGlzYWJsZWQgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIyNCUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMjQlMjAxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5OTklMjIlMjBwb2ludHMlM0QlMjIxMiUyMDElMjA5JTIwNiUyMDE1JTIwNiUyMiUyMCUyRiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTk5JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxMyUyMDklMjA4JTIwMTUlMjA4JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIik7Cn0KLyogRGF0YWxpc3QKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFJlbW92ZSBkZWZhdWx0IHN0eWxlIGluIENocm9tZQogKi8KLnVrLWlucHV0W2xpc3RdIHsKICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwJSA1MCU7Cn0KLnVrLWlucHV0W2xpc3RdOmhvdmVyLAoudWstaW5wdXRbbGlzdF06Zm9jdXMgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIyNCUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMjQlMjAxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM2NjYlMjIlMjBwb2ludHMlM0QlMjIxMiUyMDEyJTIwOCUyMDYlMjAxNiUyMDYlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEiKTsKfQovKiAxICovCi51ay1pbnB1dFtsaXN0XTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yIHsKICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLyogUmFkaW8gYW5kIGNoZWNrYm94CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBTdHlsZQogKiAyLiBNYWtlIGJveCBtb3JlIHJvYnVzdCBzbyBpdCBjbGlwcyB0aGUgY2hpbGQgZWxlbWVudAogKiAzLiBWZXJ0aWNhbCBhbGlnbm1lbnQKICogNC4gUmVtb3ZlIGRlZmF1bHQgc3R5bGUKICogNS4gRml4IGJsYWNrIGJhY2tncm91bmQgb24gaU9TCiAqIDYuIENlbnRlciBpY29ucwogKi8KLnVrLXJhZGlvLAoudWstY2hlY2tib3ggewogIC8qIDEgKi8KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgaGVpZ2h0OiAxNnB4OwogIHdpZHRoOiAxNnB4OwogIC8qIDIgKi8KICBvdmVyZmxvdzogaGlkZGVuOwogIC8qIDMgKi8KICBtYXJnaW4tdG9wOiAtNHB4OwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgLyogNCAqLwogIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7CiAgLyogNSAqLwogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogIC8qIDYgKi8KICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGJhY2tncm91bmQtcG9zaXRpb246IDUwJSA1MCU7CiAgYm9yZGVyOiAxcHggc29saWQgI2NjY2NjYzsKICB0cmFuc2l0aW9uOiAwLjJzIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3IsIGJvcmRlcjsKfQoudWstcmFkaW8gewogIGJvcmRlci1yYWRpdXM6IDUwJTsKfQovKiBGb2N1cyAqLwoudWstcmFkaW86Zm9jdXMsCi51ay1jaGVja2JveDpmb2N1cyB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICBvdXRsaW5lOiBub25lOwogIGJvcmRlci1jb2xvcjogIzFlODdmMDsKfQovKgogKiBDaGVja2VkCiAqLwoudWstcmFkaW86Y2hlY2tlZCwKLnVrLWNoZWNrYm94OmNoZWNrZWQsCi51ay1jaGVja2JveDppbmRldGVybWluYXRlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWU4N2YwOwogIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7Cn0KLyogRm9jdXMgKi8KLnVrLXJhZGlvOmNoZWNrZWQ6Zm9jdXMsCi51ay1jaGVja2JveDpjaGVja2VkOmZvY3VzLAoudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cyB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzBlNmRjZDsKfQovKgogKiBJY29ucwogKi8KLnVrLXJhZGlvOmNoZWNrZWQgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxNiUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTYlMjAxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDY2lyY2xlJTIwZmlsbCUzRCUyMiUyM2ZmZiUyMiUyMGN4JTNEJTIyOCUyMiUyMGN5JTNEJTIyOCUyMiUyMHIlM0QlMjIyJTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIik7Cn0KLnVrLWNoZWNrYm94OmNoZWNrZWQgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxNCUyMiUyMGhlaWdodCUzRCUyMjExJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTQlMjAxMSUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNmZmYlMjIlMjBwb2ludHMlM0QlMjIxMiUyMDElMjA1JTIwNy41JTIwMiUyMDUlMjAxJTIwNS41JTIwNSUyMDEwJTIwMTMlMjAxLjUlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEiKTsKfQoudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSB7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjE2JTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNiUyMDE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyM2ZmZiUyMiUyMHglM0QlMjIzJTIyJTIweSUzRCUyMjglMjIlMjB3aWR0aCUzRCUyMjEwJTIyJTIwaGVpZ2h0JTNEJTIyMSUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpOwp9Ci8qCiAqIERpc2FibGVkCiAqLwoudWstcmFkaW86ZGlzYWJsZWQsCi51ay1jaGVja2JveDpkaXNhYmxlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsKICBib3JkZXItY29sb3I6ICNlNWU1ZTU7Cn0KLnVrLXJhZGlvOmRpc2FibGVkOmNoZWNrZWQgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxNiUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTYlMjAxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDY2lyY2xlJTIwZmlsbCUzRCUyMiUyMzk5OSUyMiUyMGN4JTNEJTIyOCUyMiUyMGN5JTNEJTIyOCUyMiUyMHIlM0QlMjIyJTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIik7Cn0KLnVrLWNoZWNrYm94OmRpc2FibGVkOmNoZWNrZWQgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxNCUyMiUyMGhlaWdodCUzRCUyMjExJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTQlMjAxMSUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5OTklMjIlMjBwb2ludHMlM0QlMjIxMiUyMDElMjA1JTIwNy41JTIwMiUyMDUlMjAxJTIwNS41JTIwNSUyMDEwJTIwMTMlMjAxLjUlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEiKTsKfQoudWstY2hlY2tib3g6ZGlzYWJsZWQ6aW5kZXRlcm1pbmF0ZSB7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjE2JTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNiUyMDE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyMzk5OSUyMiUyMHglM0QlMjIzJTIyJTIweSUzRCUyMjglMjIlMjB3aWR0aCUzRCUyMjEwJTIyJTIwaGVpZ2h0JTNEJTIyMSUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpOwp9Ci8qIExlZ2VuZAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogTGVnZW5kCiAqIDEuIEJlaGF2ZSBsaWtlIGJsb2NrIGVsZW1lbnQKICogMi4gQ29ycmVjdCB0aGUgY29sb3IgaW5oZXJpdGFuY2UgZnJvbSBgZmllbGRzZXRgIGVsZW1lbnRzIGluIElFLgogKiAzLiBSZW1vdmUgcGFkZGluZyBzbyBwZW9wbGUgYXJlbid0IGNhdWdodCBvdXQgaWYgdGhleSB6ZXJvIG91dCBmaWVsZHNldHMuCiAqIDQuIFN0eWxlCiAqLwoudWstbGVnZW5kIHsKICAvKiAxICovCiAgd2lkdGg6IDEwMCU7CiAgLyogMiAqLwogIGNvbG9yOiBpbmhlcml0OwogIC8qIDMgKi8KICBwYWRkaW5nOiAwOwogIC8qIDQgKi8KICBmb250LXNpemU6IDEuNXJlbTsKICBsaW5lLWhlaWdodDogMS40Owp9Ci8qIEN1c3RvbSBjb250cm9scwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gQ29udGFpbmVyIGZpdHMgaXRzIGNvbnRlbnQKICogMi4gQ3JlYXRlIHBvc2l0aW9uIGNvbnRleHQKICogMy4gUHJldmVudCBjb250ZW50IG92ZXJmbG93CiAqIDQuIEJlaGF2ZSBsaWtlIG1vc3QgaW5saW5lLWJsb2NrIGVsZW1lbnRzCiAqLwoudWstZm9ybS1jdXN0b20gewogIC8qIDEgKi8KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgLyogMiAqLwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAvKiAzICovCiAgbWF4LXdpZHRoOiAxMDAlOwogIC8qIDQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9Ci8qCiAqIDEuIFBvc2l0aW9uIGFuZCByZXNpemUgdGhlIGZvcm0gY29udHJvbCB0byBhbHdheXMgY292ZXIgaXRzIGNvbnRhaW5lcgogKiAyLiBSZXF1aXJlZCBmb3IgRmlyZWZveCBmb3IgcG9zaXRpb25pbmcgdG8gdGhlIGxlZnQKICogMy4gUmVxdWlyZWQgZm9yIFdlYmtpdCB0byBtYWtlIGBoZWlnaHRgIHdvcmsKICogNC4gSGlkZSBjb250cm9sZSBhbmQgc2hvdyBjdXJzb3IKICogNS4gTmVlZGVkIGZvciB0aGUgY3Vyc29yCiAqIDYuIENsaXAgaGVpZ2h0IGNhdXNlZCBieSA1LiBOZWVkZWQgZm9yIFdlYmtpdCBvbmx5CiAqLwoudWstZm9ybS1jdXN0b20gc2VsZWN0LAoudWstZm9ybS1jdXN0b20gaW5wdXRbdHlwZT0iZmlsZSJdIHsKICAvKiAxICovCiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsKICB6LWluZGV4OiAxOwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICAvKiAyICovCiAgcmlnaHQ6IDA7CiAgLyogMyAqLwogIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAvKiA0ICovCiAgb3BhY2l0eTogMDsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KLnVrLWZvcm0tY3VzdG9tIGlucHV0W3R5cGU9ImZpbGUiXSB7CiAgLyogNSAqLwogIGZvbnQtc2l6ZTogNTAwcHg7CiAgLyogNiAqLwogIG92ZXJmbG93OiBoaWRkZW47Cn0KLyogTGFiZWwKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1mb3JtLWxhYmVsIHsKICBjb2xvcjogIzMzMzsKICBmb250LXNpemU6IDAuODc1cmVtOwp9Ci8qIExheW91dAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogU3RhY2tlZAogKi8KLnVrLWZvcm0tc3RhY2tlZCAudWstZm9ybS1sYWJlbCB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luLWJvdHRvbTogNXB4Owp9Ci8qCiAqIEhvcml6b250YWwKICovCi8qIFRhYmxldCBwb3J0cmFpdCBhbmQgc21hbGxlciAqLwpAbWVkaWEgKG1heC13aWR0aDogOTU5cHgpIHsKICAvKiBCZWhhdmUgbGlrZSBgdWstZm9ybS1zdGFja2VkYCAqLwogIC51ay1mb3JtLWhvcml6b250YWwgLnVrLWZvcm0tbGFiZWwgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstZm9ybS1ob3Jpem9udGFsIC51ay1mb3JtLWxhYmVsIHsKICAgIHdpZHRoOiAyMDBweDsKICAgIG1hcmdpbi10b3A6IDdweDsKICAgIGZsb2F0OiByaWdodDsKICB9CiAgLnVrLWZvcm0taG9yaXpvbnRhbCAudWstZm9ybS1jb250cm9scyB7CiAgICBtYXJnaW4tcmlnaHQ6IDIxNXB4OwogIH0KICAvKiBCZXR0ZXIgdmVydGljYWwgYWxpZ25tZW50IGlmIGNvbnRyb2xzIGFyZSBjaGVja2JveGVzIGFuZCByYWRpbyBidXR0b25zIHdpdGggdGV4dCAqLwogIC51ay1mb3JtLWhvcml6b250YWwgLnVrLWZvcm0tY29udHJvbHMtdGV4dCB7CiAgICBwYWRkaW5nLXRvcDogN3B4OwogIH0KfQovKiBJY29ucwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gU2V0IHBvc2l0aW9uCiAqIDIuIFNldCB3aWR0aAogKiAzLiBDZW50ZXIgaWNvbiB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFsbHkKICogNC4gU3R5bGUKICovCi51ay1mb3JtLWljb24gewogIC8qIDEgKi8KICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOwogIGJvdHRvbTogMDsKICByaWdodDogMDsKICAvKiAyICovCiAgd2lkdGg6IDQwcHg7CiAgLyogMyAqLwogIGRpc3BsYXk6IGlubGluZS1mbGV4OwogIGp1c3RpZnktY29udGVudDogY2VudGVyOwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgLyogNCAqLwogIGNvbG9yOiAjOTk5Owp9Ci8qCiAqIFJlcXVpcmVkIGZvciBgYWAuCiAqLwoudWstZm9ybS1pY29uOmhvdmVyIHsKICBjb2xvcjogIzY2NjsKfQovKgogKiBNYWtlIGBpbnB1dGAgZWxlbWVudCBjbGlja2FibGUgdGhyb3VnaCBpY29uLCBlLmcuIGlmIGl0J3MgYSBgc3BhbmAKICovCi51ay1mb3JtLWljb246bm90KGEpOm5vdChidXR0b24pOm5vdChpbnB1dCkgewogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Ci8qCiAqIElucHV0IHBhZGRpbmcKICovCi51ay1mb3JtLWljb246bm90KC51ay1mb3JtLWljb24tZmxpcCkgfiAudWstaW5wdXQgewogIHBhZGRpbmctcmlnaHQ6IDQwcHggIWltcG9ydGFudDsKfQovKgogKiBQb3NpdGlvbiBtb2RpZmllcgogKi8KLnVrLWZvcm0taWNvbi1mbGlwIHsKICBsZWZ0OiAwOwogIHJpZ2h0OiBhdXRvOwp9Ci51ay1mb3JtLWljb24tZmxpcCB+IC51ay1pbnB1dCB7CiAgcGFkZGluZy1sZWZ0OiA0MHB4ICFpbXBvcnRhbnQ7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogQnV0dG9uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBSZW1vdmUgbWFyZ2lucyBpbiBDaHJvbWUsIFNhZmFyaSBhbmQgT3BlcmEuCiAqIDIuIFJlbW92ZSBib3JkZXJzIGZvciBgYnV0dG9uYC4KICogMy4gQWRkcmVzcyBgb3ZlcmZsb3dgIHNldCB0byBgaGlkZGVuYCBpbiBJRS4KICogNC4gQ29ycmVjdCBgZm9udGAgcHJvcGVydGllcyBhbmQgYGNvbG9yYCBub3QgYmVpbmcgaW5oZXJpdGVkIGZvciBgYnV0dG9uYC4KICogNS4gUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB0ZXh0IHRyYW5zZm9ybSBpbiBFZGdlLCBGaXJlZm94LCBhbmQgSUUuCiAqIDYuIFJlbW92ZSBkZWZhdWx0IHN0eWxlIGZvciBgaW5wdXQgdHlwZT0ic3VibWl0ImBpbiBpT1MuCiAqIDcuIFN0eWxlCiAqIDguIGBsaW5lLWhlaWdodGAgaXMgdXNlZCB0byBjcmVhdGUgYSBoZWlnaHQgYmVjYXVzZSBpdCBhbHNvIGNlbnRlcnMgdGhlIHRleHQgdmVydGljYWxseSBmb3IgYGFgIGVsZW1lbnRzLgogKiAgICBCZXR0ZXIgd291bGQgYmUgdG8gdXNlIGhlaWdodCBhbmQgZmxleGJveCB0byBjZW50ZXIgdGhlIHRleHQgdmVydGljYWxseSBidXQgZmxleGJveCBkb2Vzbid0IHdvcmsgaW4gRmlyZWZveCBvbiBgYnV0dG9uYCBlbGVtZW50cy4KICogOS4gQWxpZ24gdGV4dCBpZiBidXR0b24gaGFzIGEgd2lkdGgKICogMTAuIFJlcXVpcmVkIGZvciBgYWAuCiAqLwoudWstYnV0dG9uIHsKICAvKiAxICovCiAgbWFyZ2luOiAwOwogIC8qIDIgKi8KICBib3JkZXI6IG5vbmU7CiAgLyogMyAqLwogIG92ZXJmbG93OiB2aXNpYmxlOwogIC8qIDQgKi8KICBmb250OiBpbmhlcml0OwogIGNvbG9yOiBpbmhlcml0OwogIC8qIDUgKi8KICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAvKiA2ICovCiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogIGJvcmRlci1yYWRpdXM6IDA7CiAgLyogNyAqLwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIHBhZGRpbmc6IDAgMzBweDsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgLyogOCAqLwogIGxpbmUtaGVpZ2h0OiAzOHB4OwogIC8qIDkgKi8KICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgLyogMTAgKi8KICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICB0cmFuc2l0aW9uOiAwLjFzIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb24tcHJvcGVydHk6IGNvbG9yLCBiYWNrZ3JvdW5kLWNvbG9yLCBib3JkZXItY29sb3I7Cn0KLnVrLWJ1dHRvbjpub3QoOmRpc2FibGVkKSB7CiAgY3Vyc29yOiBwb2ludGVyOwp9Ci8qCiAqIFJlbW92ZSB0aGUgaW5uZXIgYm9yZGVyIGFuZCBwYWRkaW5nIGluIEZpcmVmb3guCiAqLwoudWstYnV0dG9uOjotbW96LWZvY3VzLWlubmVyIHsKICBib3JkZXI6IDA7CiAgcGFkZGluZzogMDsKfQovKiBIb3ZlciAqLwoudWstYnV0dG9uOmhvdmVyIHsKICAvKiA5ICovCiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci8qIE9uQ2xpY2sgKyBBY3RpdmUgKi8KLyogU3R5bGUgbW9kaWZpZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBEZWZhdWx0CiAqLwoudWstYnV0dG9uLWRlZmF1bHQgewogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogIGNvbG9yOiAjMzMzOwogIGJvcmRlcjogMXB4IHNvbGlkICNlNWU1ZTU7Cn0KLyogSG92ZXIgKi8KLnVrLWJ1dHRvbi1kZWZhdWx0OmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICBjb2xvcjogIzMzMzsKICBib3JkZXItY29sb3I6ICNiMmIyYjI7Cn0KLyogT25DbGljayArIEFjdGl2ZSAqLwoudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZlLAoudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICBjb2xvcjogIzMzMzsKICBib3JkZXItY29sb3I6ICM5OTk5OTk7Cn0KLyoKICogUHJpbWFyeQogKi8KLnVrLWJ1dHRvbi1wcmltYXJ5IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWU4N2YwOwogIGNvbG9yOiAjZmZmOwogIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50Owp9Ci8qIEhvdmVyICovCi51ay1idXR0b24tcHJpbWFyeTpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzBmN2FlNTsKICBjb2xvcjogI2ZmZjsKfQovKiBPbkNsaWNrICsgQWN0aXZlICovCi51ay1idXR0b24tcHJpbWFyeTphY3RpdmUsCi51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUgewogIGJhY2tncm91bmQtY29sb3I6ICMwZTZkY2Q7CiAgY29sb3I6ICNmZmY7Cn0KLyoKICogU2Vjb25kYXJ5CiAqLwoudWstYnV0dG9uLXNlY29uZGFyeSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsKICBjb2xvcjogI2ZmZjsKICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKfQovKiBIb3ZlciAqLwoudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzE1MTUxNTsKICBjb2xvcjogI2ZmZjsKfQovKiBPbkNsaWNrICsgQWN0aXZlICovCi51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwKLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDgwODA4OwogIGNvbG9yOiAjZmZmOwp9Ci8qCiAqIERhbmdlcgogKi8KLnVrLWJ1dHRvbi1kYW5nZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNmMDUwNmU7CiAgY29sb3I6ICNmZmY7CiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7Cn0KLyogSG92ZXIgKi8KLnVrLWJ1dHRvbi1kYW5nZXI6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNlZTM5NWI7CiAgY29sb3I6ICNmZmY7Cn0KLyogT25DbGljayArIEFjdGl2ZSAqLwoudWstYnV0dG9uLWRhbmdlcjphY3RpdmUsCi51ay1idXR0b24tZGFuZ2VyLnVrLWFjdGl2ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2VjMjE0NzsKICBjb2xvcjogI2ZmZjsKfQovKgogKiBEaXNhYmxlZAogKiBUaGUgc2FtZSBmb3IgYWxsIHN0eWxlIG1vZGlmaWVycwogKi8KLnVrLWJ1dHRvbi1kZWZhdWx0OmRpc2FibGVkLAoudWstYnV0dG9uLXByaW1hcnk6ZGlzYWJsZWQsCi51ay1idXR0b24tc2Vjb25kYXJ5OmRpc2FibGVkLAoudWstYnV0dG9uLWRhbmdlcjpkaXNhYmxlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgY29sb3I6ICM5OTk7CiAgYm9yZGVyLWNvbG9yOiAjZTVlNWU1Owp9Ci8qIFNpemUgbW9kaWZpZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstYnV0dG9uLXNtYWxsIHsKICBwYWRkaW5nOiAwIDE1cHg7CiAgbGluZS1oZWlnaHQ6IDI4cHg7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKfQoudWstYnV0dG9uLWxhcmdlIHsKICBwYWRkaW5nOiAwIDQwcHg7CiAgbGluZS1oZWlnaHQ6IDUzcHg7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKfQovKiBUZXh0IG1vZGlmaWVycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogVGV4dAogKiAxLiBSZXNldAogKiAyLiBTdHlsZQogKi8KLnVrLWJ1dHRvbi10ZXh0IHsKICAvKiAxICovCiAgcGFkZGluZzogMDsKICBsaW5lLWhlaWdodDogMS41OwogIGJhY2tncm91bmQ6IG5vbmU7CiAgLyogMiAqLwogIGNvbG9yOiAjMzMzOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoudWstYnV0dG9uLXRleHQ6OmJlZm9yZSB7CiAgY29udGVudDogIiI7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGJvdHRvbTogMDsKICByaWdodDogMDsKICBsZWZ0OiAxMDAlOwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzOwogIHRyYW5zaXRpb246IGxlZnQgMC4zcyBlYXNlLW91dDsKfQovKiBIb3ZlciAqLwoudWstYnV0dG9uLXRleHQ6aG92ZXIgewogIGNvbG9yOiAjMzMzOwp9Ci51ay1idXR0b24tdGV4dDpob3Zlcjo6YmVmb3JlIHsKICBsZWZ0OiAwOwp9Ci8qIERpc2FibGVkICovCi51ay1idXR0b24tdGV4dDpkaXNhYmxlZCB7CiAgY29sb3I6ICM5OTk7Cn0KLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkOjpiZWZvcmUgewogIGRpc3BsYXk6IG5vbmU7Cn0KLyoKICogTGluawogKiAxLiBSZXNldAogKiAyLiBTdHlsZQogKi8KLnVrLWJ1dHRvbi1saW5rIHsKICAvKiAxICovCiAgcGFkZGluZzogMDsKICBsaW5lLWhlaWdodDogMS41OwogIGJhY2tncm91bmQ6IG5vbmU7CiAgLyogMiAqLwogIGNvbG9yOiAjMzMzOwp9Ci8qIEhvdmVyICovCi51ay1idXR0b24tbGluazpob3ZlciB7CiAgY29sb3I6ICM5OTk7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci8qIERpc2FibGVkICovCi51ay1idXR0b24tbGluazpkaXNhYmxlZCB7CiAgY29sb3I6ICM5OTk7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci8qIEdyb3VwCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBVc2luZyBgZmxleGAgaW5zdGVhZCBvZiBgaW5saW5lLWJsb2NrYCB0byBwcmV2ZW50IHdoaXRlc3BhY2UgYmV0d2VlbnQgY2hpbGQgZWxlbWVudHMKICogMi4gQmVoYXZlIGxpa2UgYnV0dG9uCiAqIDMuIENyZWF0ZSBwb3NpdGlvbiBjb250ZXh0CiAqLwoudWstYnV0dG9uLWdyb3VwIHsKICAvKiAxICovCiAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgLyogMiAqLwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgLyogMyAqLwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQovKiBHcm91cAogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAgICAgKiBDb2xsYXBzZSBib3JkZXIKICAgICAqLwoudWstYnV0dG9uLWdyb3VwID4gLnVrLWJ1dHRvbjpudGgtY2hpbGQobisyKSwKLnVrLWJ1dHRvbi1ncm91cCA+IGRpdjpudGgtY2hpbGQobisyKSAudWstYnV0dG9uIHsKICBtYXJnaW4tcmlnaHQ6IC0xcHg7Cn0KLyoKICAgICAqIENyZWF0ZSBwb3NpdGlvbiBjb250ZXh0IHRvIHN1cGVyaW1wb3NlIHRoZSBzdWNjZXNzb3IgZWxlbWVudHMgYm9yZGVyCiAgICAgKiBLbm93biBpc3N1ZTogSWYgeW91IHVzZSBhbiBgYWAgZWxlbWVudCBhcyBidXR0b24gYW5kIGFuIGljb24gaW5zaWRlLAogICAgICogdGhlIGFjdGl2ZSBzdGF0ZSB3aWxsIG5vdCB3b3JrIGlmIHlvdSBjbGljayB0aGUgaWNvbiBpbnNpZGUgdGhlIGJ1dHRvbgogICAgICogV29ya2Fyb3VuZDogSnVzdCB1c2UgYSBgYnV0dG9uYCBvciBgaW5wdXRgIGVsZW1lbnQgYXMgYnV0dG9uCiAgICAgKi8KLnVrLWJ1dHRvbi1ncm91cCAudWstYnV0dG9uOmhvdmVyLAoudWstYnV0dG9uLWdyb3VwIC51ay1idXR0b246YWN0aXZlLAoudWstYnV0dG9uLWdyb3VwIC51ay1idXR0b24udWstYWN0aXZlIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgei1pbmRleDogMTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBQcm9ncmVzcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gQWRkIHRoZSBjb3JyZWN0IHZlcnRpY2FsIGFsaWdubWVudCBpbiBhbGwgYnJvd3NlcnMuCiAqIDIuIEJlaGF2ZSBsaWtlIGEgYmxvY2sgZWxlbWVudC4KICogMy4gUmVtb3ZlIGJvcmRlcnMgaW4gRmlyZWZveC4KICogNC4gUmVtb3ZlIGRlZmF1bHQgc3R5bGUgaW4gQ2hyb21lLCBTYWZhcmkgYW5kIEVkZ2UuCiAqIDUuIFN0eWxlCiAqLwoudWstcHJvZ3Jlc3MgewogIC8qIDEgKi8KICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CiAgLyogMiAqLwogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxMDAlOwogIC8qIDMgKi8KICBib3JkZXI6IDA7CiAgLyogNCAqLwogIGJhY2tncm91bmQtY29sb3I6ICNmOGY4Zjg7CiAgLyogNSAqLwogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgaGVpZ2h0OiAxNXB4OwogIGJvcmRlci1yYWRpdXM6IDUwMHB4OwogIG92ZXJmbG93OiBoaWRkZW47Cn0KLyogQWRkIG1hcmdpbiBpZiBhZGphY2VudCBlbGVtZW50ICovCiogKyAudWstcHJvZ3Jlc3MgewogIG1hcmdpbi10b3A6IDIwcHg7Cn0KLyoKICogU2hvdyBiYWNrZ3JvdW5kIGNvbG9yIHNldCBvbiBgdWstcHJvZ3Jlc3NgIGluIENocm9tZSwgU2FmYXJpIGFuZCBFZGdlLgogKi8KLnVrLXByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLWJhciB7CiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Cn0KLyoKICogUHJvZ3Jlc3MgQmFyCiAqIDEuIFRyYW5zaXRpb25zIGRvbid0IHdvcmsgb24gYDo6LW1vei1wcm9ncmVzcy1iYXJgIHBzZXVkbyBlbGVtZW50IGluIEZpcmVmb3ggeWV0LgogKiAgICBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02NjIzNTEKICovCi51ay1wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzFlODdmMDsKICB0cmFuc2l0aW9uOiB3aWR0aCAwLjZzIGVhc2U7Cn0KLnVrLXByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhciB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzFlODdmMDsKICAvKiAxICovCiAgdHJhbnNpdGlvbjogd2lkdGggMC42cyBlYXNlOwp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IFNlY3Rpb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIE1ha2UgaXQgd29yayB3aXRoIGAxMDB2aGAgYW5kIGhlaWdodCBpbiBnZW5lcmFsCiAqLwoudWstc2VjdGlvbiB7CiAgZGlzcGxheTogZmxvdy1yb290OwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgLyogMSAqLwogIHBhZGRpbmctdG9wOiA0MHB4OwogIHBhZGRpbmctYm90dG9tOiA0MHB4Owp9Ci8qIERlc2t0b3AgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstc2VjdGlvbiB7CiAgICBwYWRkaW5nLXRvcDogNzBweDsKICAgIHBhZGRpbmctYm90dG9tOiA3MHB4OwogIH0KfQovKgogKiBSZW1vdmUgbWFyZ2luIGZyb20gdGhlIGxhc3QtY2hpbGQKICovCi51ay1zZWN0aW9uID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KLyogU2l6ZSBtb2RpZmllcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIFhTbWFsbAogKi8KLnVrLXNlY3Rpb24teHNtYWxsIHsKICBwYWRkaW5nLXRvcDogMjBweDsKICBwYWRkaW5nLWJvdHRvbTogMjBweDsKfQovKgogKiBTbWFsbAogKi8KLnVrLXNlY3Rpb24tc21hbGwgewogIHBhZGRpbmctdG9wOiA0MHB4OwogIHBhZGRpbmctYm90dG9tOiA0MHB4Owp9Ci8qCiAqIExhcmdlCiAqLwoudWstc2VjdGlvbi1sYXJnZSB7CiAgcGFkZGluZy10b3A6IDcwcHg7CiAgcGFkZGluZy1ib3R0b206IDcwcHg7Cn0KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogIC51ay1zZWN0aW9uLWxhcmdlIHsKICAgIHBhZGRpbmctdG9wOiAxNDBweDsKICAgIHBhZGRpbmctYm90dG9tOiAxNDBweDsKICB9Cn0KLyoKICogWExhcmdlCiAqLwoudWstc2VjdGlvbi14bGFyZ2UgewogIHBhZGRpbmctdG9wOiAxNDBweDsKICBwYWRkaW5nLWJvdHRvbTogMTQwcHg7Cn0KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogIC51ay1zZWN0aW9uLXhsYXJnZSB7CiAgICBwYWRkaW5nLXRvcDogMjEwcHg7CiAgICBwYWRkaW5nLWJvdHRvbTogMjEwcHg7CiAgfQp9Ci8qIFN0eWxlIG1vZGlmaWVycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogRGVmYXVsdAogKi8KLnVrLXNlY3Rpb24tZGVmYXVsdCB7CiAgYmFja2dyb3VuZDogI2ZmZjsKfQovKgogKiBNdXRlZAogKi8KLnVrLXNlY3Rpb24tbXV0ZWQgewogIGJhY2tncm91bmQ6ICNmOGY4Zjg7Cn0KLyoKICogUHJpbWFyeQogKi8KLnVrLXNlY3Rpb24tcHJpbWFyeSB7CiAgYmFja2dyb3VuZDogIzFlODdmMDsKfQovKgogKiBTZWNvbmRhcnkKICovCi51ay1zZWN0aW9uLXNlY29uZGFyeSB7CiAgYmFja2dyb3VuZDogIzIyMjsKfQovKiBPdmVybGFwIG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBSZXNlcnZlZCBtb2RpZmllciB0byBtYWtlIGEgc2VjdGlvbiBvdmVybGFwIGFub3RoZXIgc2VjdGlvbiB3aXRoIGFuIGJvcmRlciBpbWFnZQogKiBJbXBsZW1lbnRlZCBieSB0aGUgdGhlbWUKICovCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IENvbnRhaW5lcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gQm94IHNpemluZyBoYXMgdG8gYmUgYGNvbnRlbnQtYm94YCBzbyB0aGUgbWF4LXdpZHRoIGlzIGFsd2F5cyB0aGUgc2FtZSBhbmQKICogICAgdW5hZmZlY3RlZCBieSB0aGUgcGFkZGluZyBvbiBkaWZmZXJlbnQgYnJlYWtwb2ludHMuIEl0J3MgaW1wb3J0YW50IGZvciB0aGUgc2l6ZSBtb2RpZmllcnMuCiAqLwoudWstY29udGFpbmVyIHsKICBkaXNwbGF5OiBmbG93LXJvb3Q7CiAgLyogMSAqLwogIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogIG1heC13aWR0aDogMTIwMHB4OwogIG1hcmdpbi1yaWdodDogYXV0bzsKICBtYXJnaW4tbGVmdDogYXV0bzsKICBwYWRkaW5nLXJpZ2h0OiAxNXB4OwogIHBhZGRpbmctbGVmdDogMTVweDsKfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAudWstY29udGFpbmVyIHsKICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7CiAgICBwYWRkaW5nLWxlZnQ6IDMwcHg7CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstY29udGFpbmVyIHsKICAgIHBhZGRpbmctcmlnaHQ6IDQwcHg7CiAgICBwYWRkaW5nLWxlZnQ6IDQwcHg7CiAgfQp9Ci8qCiAqIFJlbW92ZSBtYXJnaW4gZnJvbSB0aGUgbGFzdC1jaGlsZAogKi8KLnVrLWNvbnRhaW5lciA+IDpsYXN0LWNoaWxkIHsKICBtYXJnaW4tYm90dG9tOiAwOwp9Ci8qCiAqIFJlbW92ZSBwYWRkaW5nIGZyb20gbmVzdGVkIGNvbnRhaW5lcnMKICovCi51ay1jb250YWluZXIgLnVrLWNvbnRhaW5lciB7CiAgcGFkZGluZy1yaWdodDogMDsKICBwYWRkaW5nLWxlZnQ6IDA7Cn0KLyogU2l6ZSBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWNvbnRhaW5lci14c21hbGwgewogIG1heC13aWR0aDogNzUwcHg7Cn0KLnVrLWNvbnRhaW5lci1zbWFsbCB7CiAgbWF4LXdpZHRoOiA5MDBweDsKfQoudWstY29udGFpbmVyLWxhcmdlIHsKICBtYXgtd2lkdGg6IDE0MDBweDsKfQoudWstY29udGFpbmVyLXhsYXJnZSB7CiAgbWF4LXdpZHRoOiAxNjAwcHg7Cn0KLnVrLWNvbnRhaW5lci1leHBhbmQgewogIG1heC13aWR0aDogbm9uZTsKfQovKiBFeHBhbmQgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIEV4cGFuZCBvbmUgc2lkZSBvbmx5CiAqLwoudWstY29udGFpbmVyLWV4cGFuZC1yaWdodCB7CiAgbWFyZ2luLXJpZ2h0OiAwOwp9Ci51ay1jb250YWluZXItZXhwYW5kLWxlZnQgewogIG1hcmdpbi1sZWZ0OiAwOwp9Ci8qIFBob25lIGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgewogIC51ay1jb250YWluZXItZXhwYW5kLXJpZ2h0LnVrLWNvbnRhaW5lci14c21hbGwsCiAgLnVrLWNvbnRhaW5lci1leHBhbmQtbGVmdC51ay1jb250YWluZXIteHNtYWxsIHsKICAgIG1heC13aWR0aDogY2FsYyg1MCUgKyAoNzUwcHggLyAyKSAtIDMwcHgpOwogIH0KICAudWstY29udGFpbmVyLWV4cGFuZC1yaWdodC51ay1jb250YWluZXItc21hbGwsCiAgLnVrLWNvbnRhaW5lci1leHBhbmQtbGVmdC51ay1jb250YWluZXItc21hbGwgewogICAgbWF4LXdpZHRoOiBjYWxjKDUwJSArICg5MDBweCAvIDIpIC0gMzBweCk7CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstY29udGFpbmVyLWV4cGFuZC1yaWdodCwKICAudWstY29udGFpbmVyLWV4cGFuZC1sZWZ0IHsKICAgIG1heC13aWR0aDogY2FsYyg1MCUgKyAoMTIwMHB4IC8gMikgLSA0MHB4KTsKICB9CiAgLnVrLWNvbnRhaW5lci1leHBhbmQtcmlnaHQudWstY29udGFpbmVyLXhzbWFsbCwKICAudWstY29udGFpbmVyLWV4cGFuZC1sZWZ0LnVrLWNvbnRhaW5lci14c21hbGwgewogICAgbWF4LXdpZHRoOiBjYWxjKDUwJSArICg3NTBweCAvIDIpIC0gNDBweCk7CiAgfQogIC51ay1jb250YWluZXItZXhwYW5kLXJpZ2h0LnVrLWNvbnRhaW5lci1zbWFsbCwKICAudWstY29udGFpbmVyLWV4cGFuZC1sZWZ0LnVrLWNvbnRhaW5lci1zbWFsbCB7CiAgICBtYXgtd2lkdGg6IGNhbGMoNTAlICsgKDkwMHB4IC8gMikgLSA0MHB4KTsKICB9CiAgLnVrLWNvbnRhaW5lci1leHBhbmQtcmlnaHQudWstY29udGFpbmVyLWxhcmdlLAogIC51ay1jb250YWluZXItZXhwYW5kLWxlZnQudWstY29udGFpbmVyLWxhcmdlIHsKICAgIG1heC13aWR0aDogY2FsYyg1MCUgKyAoMTQwMHB4IC8gMikgLSA0MHB4KTsKICB9CiAgLnVrLWNvbnRhaW5lci1leHBhbmQtcmlnaHQudWstY29udGFpbmVyLXhsYXJnZSwKICAudWstY29udGFpbmVyLWV4cGFuZC1sZWZ0LnVrLWNvbnRhaW5lci14bGFyZ2UgewogICAgbWF4LXdpZHRoOiBjYWxjKDUwJSArICgxNjAwcHggLyAyKSAtIDQwcHgpOwogIH0KfQovKiBJdGVtCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBVdGlsaXR5IGNsYXNzZXMgdG8gcmVzZXQgY29udGFpbmVyIHBhZGRpbmcgb24gdGhlIGxlZnQgb3IgcmlnaHQgc2lkZQogKiBOb3RlOiBJdCBoYXMgdG8gYmUgbmVnYXRpdmUgbWFyZ2luIG9uIHRoZSBpdGVtLCBiZWNhdXNlIGl0J3Mgc3BlY2lmaWMgdG8gdGhlIGl0ZW0uCiAqLwoudWstY29udGFpbmVyLWl0ZW0tcGFkZGluZy1yZW1vdmUtcmlnaHQsCi51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1sZWZ0IHsKICB3aWR0aDogY2FsYygxMDAlICsgMTVweCk7Cn0KLnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLXJpZ2h0IHsKICBtYXJnaW4tcmlnaHQ6IC0xNXB4Owp9Ci51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1sZWZ0IHsKICBtYXJnaW4tbGVmdDogLTE1cHg7Cn0KLyogUGhvbmUgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7CiAgLnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLXJpZ2h0LAogIC51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1sZWZ0IHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgKyAzMHB4KTsKICB9CiAgLnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLXJpZ2h0IHsKICAgIG1hcmdpbi1yaWdodDogLTMwcHg7CiAgfQogIC51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1sZWZ0IHsKICAgIG1hcmdpbi1sZWZ0OiAtMzBweDsKICB9Cn0KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogIC51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1yaWdodCwKICAudWstY29udGFpbmVyLWl0ZW0tcGFkZGluZy1yZW1vdmUtbGVmdCB7CiAgICB3aWR0aDogY2FsYygxMDAlICsgNDBweCk7CiAgfQogIC51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1yaWdodCB7CiAgICBtYXJnaW4tcmlnaHQ6IC00MHB4OwogIH0KICAudWstY29udGFpbmVyLWl0ZW0tcGFkZGluZy1yZW1vdmUtbGVmdCB7CiAgICBtYXJnaW4tbGVmdDogLTQwcHg7CiAgfQp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IFRpbGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay10aWxlIHsKICBkaXNwbGF5OiBmbG93LXJvb3Q7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgcGFkZGluZy1yaWdodDogMTVweDsKICBwYWRkaW5nLWxlZnQ6IDE1cHg7CiAgcGFkZGluZy10b3A6IDQwcHg7CiAgcGFkZGluZy1ib3R0b206IDQwcHg7Cn0KLyogUGhvbmUgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7CiAgLnVrLXRpbGUgewogICAgcGFkZGluZy1yaWdodDogMzBweDsKICAgIHBhZGRpbmctbGVmdDogMzBweDsKICB9Cn0KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogIC51ay10aWxlIHsKICAgIHBhZGRpbmctcmlnaHQ6IDQwcHg7CiAgICBwYWRkaW5nLWxlZnQ6IDQwcHg7CiAgICBwYWRkaW5nLXRvcDogNzBweDsKICAgIHBhZGRpbmctYm90dG9tOiA3MHB4OwogIH0KfQovKgogKiBSZW1vdmUgbWFyZ2luIGZyb20gdGhlIGxhc3QtY2hpbGQKICovCi51ay10aWxlID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KLyogU2l6ZSBtb2RpZmllcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIFhTbWFsbAogKi8KLnVrLXRpbGUteHNtYWxsIHsKICBwYWRkaW5nLXRvcDogMjBweDsKICBwYWRkaW5nLWJvdHRvbTogMjBweDsKfQovKgogKiBTbWFsbAogKi8KLnVrLXRpbGUtc21hbGwgewogIHBhZGRpbmctdG9wOiA0MHB4OwogIHBhZGRpbmctYm90dG9tOiA0MHB4Owp9Ci8qCiAqIExhcmdlCiAqLwoudWstdGlsZS1sYXJnZSB7CiAgcGFkZGluZy10b3A6IDcwcHg7CiAgcGFkZGluZy1ib3R0b206IDcwcHg7Cn0KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogIC51ay10aWxlLWxhcmdlIHsKICAgIHBhZGRpbmctdG9wOiAxNDBweDsKICAgIHBhZGRpbmctYm90dG9tOiAxNDBweDsKICB9Cn0KLyoKICogWExhcmdlCiAqLwoudWstdGlsZS14bGFyZ2UgewogIHBhZGRpbmctdG9wOiAxNDBweDsKICBwYWRkaW5nLWJvdHRvbTogMTQwcHg7Cn0KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogIC51ay10aWxlLXhsYXJnZSB7CiAgICBwYWRkaW5nLXRvcDogMjEwcHg7CiAgICBwYWRkaW5nLWJvdHRvbTogMjEwcHg7CiAgfQp9Ci8qIFN0eWxlIG1vZGlmaWVycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogRGVmYXVsdAogKi8KLnVrLXRpbGUtZGVmYXVsdCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKfQovKgogKiBNdXRlZAogKi8KLnVrLXRpbGUtbXV0ZWQgewogIGJhY2tncm91bmQtY29sb3I6ICNmOGY4Zjg7Cn0KLyoKICogUHJpbWFyeQogKi8KLnVrLXRpbGUtcHJpbWFyeSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzFlODdmMDsKfQovKgogKiBTZWNvbmRhcnkKICovCi51ay10aWxlLXNlY29uZGFyeSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBDYXJkCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstY2FyZCB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjFzIGVhc2UtaW4tb3V0Owp9Ci8qIFNlY3Rpb25zCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstY2FyZC1ib2R5IHsKICBkaXNwbGF5OiBmbG93LXJvb3Q7CiAgcGFkZGluZzogMzBweCAzMHB4Owp9Ci51ay1jYXJkLWhlYWRlciB7CiAgZGlzcGxheTogZmxvdy1yb290OwogIHBhZGRpbmc6IDE1cHggMzBweDsKfQoudWstY2FyZC1mb290ZXIgewogIGRpc3BsYXk6IGZsb3ctcm9vdDsKICBwYWRkaW5nOiAxNXB4IDMwcHg7Cn0KLyogRGVza3RvcCBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHsKICAudWstY2FyZC1ib2R5IHsKICAgIHBhZGRpbmc6IDQwcHggNDBweDsKICB9CiAgLnVrLWNhcmQtaGVhZGVyIHsKICAgIHBhZGRpbmc6IDIwcHggNDBweDsKICB9CiAgLnVrLWNhcmQtZm9vdGVyIHsKICAgIHBhZGRpbmc6IDIwcHggNDBweDsKICB9Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIHRoZSBsYXN0LWNoaWxkCiAqLwoudWstY2FyZC1ib2R5ID4gOmxhc3QtY2hpbGQsCi51ay1jYXJkLWhlYWRlciA+IDpsYXN0LWNoaWxkLAoudWstY2FyZC1mb290ZXIgPiA6bGFzdC1jaGlsZCB7CiAgbWFyZ2luLWJvdHRvbTogMDsKfQovKiBNZWRpYQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogUmVzZXJ2ZWQgYWxpZ25tZW50IG1vZGlmaWVyIHRvIHN0eWxlIHRoZSBtZWRpYSBlbGVtZW50LCBlLmcuIHdpdGggYGJvcmRlci1yYWRpdXNgCiAqIEltcGxlbWVudGVkIGJ5IHRoZSB0aGVtZQogKi8KLyogVGl0bGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1jYXJkLXRpdGxlIHsKICBmb250LXNpemU6IDEuNXJlbTsKICBsaW5lLWhlaWdodDogMS40Owp9Ci8qIEJhZGdlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBQb3NpdGlvbgogKiAyLiBTaXplCiAqIDMuIFN0eWxlCiAqIDQuIENlbnRlciBjaGlsZCB2ZXJ0aWNhbGx5CiAqLwoudWstY2FyZC1iYWRnZSB7CiAgLyogMSAqLwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDE1cHg7CiAgbGVmdDogMTVweDsKICB6LWluZGV4OiAxOwogIC8qIDIgKi8KICBoZWlnaHQ6IDIycHg7CiAgcGFkZGluZzogMCAxMHB4OwogIC8qIDMgKi8KICBiYWNrZ3JvdW5kOiAjMWU4N2YwOwogIGNvbG9yOiAjZmZmOwogIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgLyogNCAqLwogIGRpc3BsYXk6IGZsZXg7CiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICBsaW5lLWhlaWdodDogMDsKICBib3JkZXItcmFkaXVzOiAycHg7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQovKgogKiBSZW1vdmUgbWFyZ2luIGZyb20gYWRqYWNlbnQgZWxlbWVudAogKi8KLnVrLWNhcmQtYmFkZ2U6Zmlyc3QtY2hpbGQgKyAqIHsKICBtYXJnaW4tdG9wOiAwOwp9Ci8qIEhvdmVyIG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstY2FyZC1ob3Zlcjpub3QoLnVrLWNhcmQtZGVmYXVsdCk6bm90KC51ay1jYXJkLXByaW1hcnkpOm5vdCgudWstY2FyZC1zZWNvbmRhcnkpOmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogIGJveC1zaGFkb3c6IDAgMTRweCAyNXB4IHJnYmEoMCwgMCwgMCwgMC4xNik7Cn0KLyogU3R5bGUgbW9kaWZpZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBEZWZhdWx0CiAqIE5vdGU6IEhlYWRlciBhbmQgRm9vdGVyIGFyZSBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgZGVmYXVsdCBzdHlsZQogKi8KLnVrLWNhcmQtZGVmYXVsdCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICBjb2xvcjogIzY2NjsKICBib3gtc2hhZG93OiAwIDVweCAxNXB4IHJnYmEoMCwgMCwgMCwgMC4wOCk7Cn0KLnVrLWNhcmQtZGVmYXVsdCAudWstY2FyZC10aXRsZSB7CiAgY29sb3I6ICMzMzM7Cn0KLnVrLWNhcmQtZGVmYXVsdC51ay1jYXJkLWhvdmVyOmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogIGJveC1zaGFkb3c6IDAgMTRweCAyNXB4IHJnYmEoMCwgMCwgMCwgMC4xNik7Cn0KLnVrLWNhcmQtZGVmYXVsdCAudWstY2FyZC1oZWFkZXIgewogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTVlNWU1Owp9Ci51ay1jYXJkLWRlZmF1bHQgLnVrLWNhcmQtZm9vdGVyIHsKICBib3JkZXItdG9wOiAxcHggc29saWQgI2U1ZTVlNTsKfQovKgogKiBQcmltYXJ5CiAqLwoudWstY2FyZC1wcmltYXJ5IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWU4N2YwOwogIGNvbG9yOiAjZmZmOwogIGJveC1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjA4KTsKfQoudWstY2FyZC1wcmltYXJ5IC51ay1jYXJkLXRpdGxlIHsKICBjb2xvcjogI2ZmZjsKfQoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtaG92ZXI6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICMxZTg3ZjA7CiAgYm94LXNoYWRvdzogMCAxNHB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjE2KTsKfQovKgogKiBTZWNvbmRhcnkKICovCi51ay1jYXJkLXNlY29uZGFyeSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsKICBjb2xvcjogI2ZmZjsKICBib3gtc2hhZG93OiAwIDVweCAxNXB4IHJnYmEoMCwgMCwgMCwgMC4wOCk7Cn0KLnVrLWNhcmQtc2Vjb25kYXJ5IC51ay1jYXJkLXRpdGxlIHsKICBjb2xvcjogI2ZmZjsKfQoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ob3Zlcjpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsKICBib3gtc2hhZG93OiAwIDE0cHggMjVweCByZ2JhKDAsIDAsIDAsIDAuMTYpOwp9Ci8qIFNpemUgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIFNtYWxsCiAqLwoudWstY2FyZC1zbWFsbC51ay1jYXJkLWJvZHksCi51ay1jYXJkLXNtYWxsIC51ay1jYXJkLWJvZHkgewogIHBhZGRpbmc6IDIwcHggMjBweDsKfQoudWstY2FyZC1zbWFsbCAudWstY2FyZC1oZWFkZXIgewogIHBhZGRpbmc6IDEzcHggMjBweDsKfQoudWstY2FyZC1zbWFsbCAudWstY2FyZC1mb290ZXIgewogIHBhZGRpbmc6IDEzcHggMjBweDsKfQovKgogKiBMYXJnZQogKi8KLyogRGVza3RvcCBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHsKICAudWstY2FyZC1sYXJnZS51ay1jYXJkLWJvZHksCiAgLnVrLWNhcmQtbGFyZ2UgLnVrLWNhcmQtYm9keSB7CiAgICBwYWRkaW5nOiA3MHB4IDcwcHg7CiAgfQogIC51ay1jYXJkLWxhcmdlIC51ay1jYXJkLWhlYWRlciB7CiAgICBwYWRkaW5nOiAzNXB4IDcwcHg7CiAgfQogIC51ay1jYXJkLWxhcmdlIC51ay1jYXJkLWZvb3RlciB7CiAgICBwYWRkaW5nOiAzNXB4IDcwcHg7CiAgfQp9Ci8qCiAgICAgKiBEZWZhdWx0CiAgICAgKi8KLnVrLWNhcmQtYm9keSA+IC51ay1uYXYtZGVmYXVsdCB7CiAgbWFyZ2luLXJpZ2h0OiAtMzBweDsKICBtYXJnaW4tbGVmdDogLTMwcHg7Cn0KLnVrLWNhcmQtYm9keSA+IC51ay1uYXYtZGVmYXVsdDpvbmx5LWNoaWxkIHsKICBtYXJnaW4tdG9wOiAtMTVweDsKICBtYXJnaW4tYm90dG9tOiAtMTVweDsKfQoudWstY2FyZC1ib2R5ID4gLnVrLW5hdi1kZWZhdWx0ID4gbGkgPiBhLAoudWstY2FyZC1ib2R5ID4gLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLAoudWstY2FyZC1ib2R5ID4gLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciB7CiAgcGFkZGluZy1yaWdodDogMzBweDsKICBwYWRkaW5nLWxlZnQ6IDMwcHg7Cn0KLnVrLWNhcmQtYm9keSA+IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiB7CiAgcGFkZGluZy1yaWdodDogNDVweDsKfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC51ay1jYXJkLWJvZHkgPiAudWstbmF2LWRlZmF1bHQgewogICAgbWFyZ2luLXJpZ2h0OiAtNDBweDsKICAgIG1hcmdpbi1sZWZ0OiAtNDBweDsKICB9CiAgLnVrLWNhcmQtYm9keSA+IC51ay1uYXYtZGVmYXVsdDpvbmx5LWNoaWxkIHsKICAgIG1hcmdpbi10b3A6IC0yNXB4OwogICAgbWFyZ2luLWJvdHRvbTogLTI1cHg7CiAgfQogIC51ay1jYXJkLWJvZHkgPiAudWstbmF2LWRlZmF1bHQgPiBsaSA+IGEsCiAgLnVrLWNhcmQtYm9keSA+IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwKICAudWstY2FyZC1ib2R5ID4gLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciB7CiAgICBwYWRkaW5nLXJpZ2h0OiA0MHB4OwogICAgcGFkZGluZy1sZWZ0OiA0MHB4OwogIH0KICAudWstY2FyZC1ib2R5ID4gLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIHsKICAgIHBhZGRpbmctcmlnaHQ6IDU1cHg7CiAgfQp9Ci8qCiAgICAgKiBTbWFsbAogICAgICovCi51ay1jYXJkLXNtYWxsID4gLnVrLW5hdi1kZWZhdWx0IHsKICBtYXJnaW4tcmlnaHQ6IC0yMHB4OwogIG1hcmdpbi1sZWZ0OiAtMjBweDsKfQoudWstY2FyZC1zbWFsbCA+IC51ay1uYXYtZGVmYXVsdDpvbmx5LWNoaWxkIHsKICBtYXJnaW4tdG9wOiAtNXB4OwogIG1hcmdpbi1ib3R0b206IC01cHg7Cn0KLnVrLWNhcmQtc21hbGwgPiAudWstbmF2LWRlZmF1bHQgPiBsaSA+IGEsCi51ay1jYXJkLXNtYWxsID4gLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLAoudWstY2FyZC1zbWFsbCA+IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIgewogIHBhZGRpbmctcmlnaHQ6IDIwcHg7CiAgcGFkZGluZy1sZWZ0OiAyMHB4Owp9Ci51ay1jYXJkLXNtYWxsID4gLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIHsKICBwYWRkaW5nLXJpZ2h0OiAzNXB4Owp9Ci8qCiAgICAgKiBMYXJnZQogICAgICovCi8qIERlc2t0b3AgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CiAgLnVrLWNhcmQtbGFyZ2UgPiAudWstbmF2LWRlZmF1bHQgewogICAgbWFyZ2luOiAwOwogIH0KICAudWstY2FyZC1sYXJnZSA+IC51ay1uYXYtZGVmYXVsdDpvbmx5LWNoaWxkIHsKICAgIG1hcmdpbjogMDsKICB9CiAgLnVrLWNhcmQtbGFyZ2UgPiAudWstbmF2LWRlZmF1bHQgPiBsaSA+IGEsCiAgLnVrLWNhcmQtbGFyZ2UgPiAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsCiAgLnVrLWNhcmQtbGFyZ2UgPiAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyIHsKICAgIHBhZGRpbmctcmlnaHQ6IDA7CiAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgfQogIC51ay1jYXJkLWxhcmdlID4gLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIHsKICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7CiAgfQp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IENsb3NlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBBZG9wdHMgYHVrLWljb25gCiAqLwoudWstY2xvc2UgewogIGNvbG9yOiAjOTk5OwogIHRyYW5zaXRpb246IDAuMXMgZWFzZS1pbi1vdXQ7CiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogY29sb3IsIG9wYWNpdHk7Cn0KLyogSG92ZXIgKi8KLnVrLWNsb3NlOmhvdmVyIHsKICBjb2xvcjogIzY2NjsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBTcGlubmVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBBZG9wdHMgYHVrLWljb25gCiAqLwovKiBTVkcKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1zcGlubmVyID4gKiB7CiAgYW5pbWF0aW9uOiB1ay1zcGlubmVyLXJvdGF0ZSAxLjRzIGxpbmVhciBpbmZpbml0ZTsKfQpAa2V5ZnJhbWVzIHVrLXNwaW5uZXItcm90YXRlIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMjcwZGVnKTsKICB9Cn0KLyoKICogQ2lyY2xlCiAqLwoudWstc3Bpbm5lciA+ICogPiAqIHsKICBzdHJva2UtZGFzaGFycmF5OiA4OHB4OwogIHN0cm9rZS1kYXNob2Zmc2V0OiAwOwogIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjsKICBhbmltYXRpb246IHVrLXNwaW5uZXItZGFzaCAxLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogIHN0cm9rZS13aWR0aDogMTsKICBzdHJva2UtbGluZWNhcDogcm91bmQ7Cn0KQGtleWZyYW1lcyB1ay1zcGlubmVyLWRhc2ggewogIDAlIHsKICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtODhweDsKICB9CiAgNTAlIHsKICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMjJweDsKICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMzVkZWcpOwogIH0KICAxMDAlIHsKICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtODhweDsKICAgIHRyYW5zZm9ybTogcm90YXRlKC00NTBkZWcpOwogIH0KfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBUb3RvcAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogQWRkb3B0cyBgdWstaWNvbmAKICovCi51ay10b3RvcCB7CiAgcGFkZGluZzogNXB4OwogIGNvbG9yOiAjOTk5OwogIHRyYW5zaXRpb246IGNvbG9yIDAuMXMgZWFzZS1pbi1vdXQ7Cn0KLyogSG92ZXIgKi8KLnVrLXRvdG9wOmhvdmVyIHsKICBjb2xvcjogIzY2NjsKfQovKiBPbkNsaWNrICovCi51ay10b3RvcDphY3RpdmUgewogIGNvbG9yOiAjMzMzOwp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IE1hcmtlcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogQWRkb3B0cyBgdWstaWNvbmAKICovCi51ay1tYXJrZXIgewogIHBhZGRpbmc6IDVweDsKICBiYWNrZ3JvdW5kOiAjMjIyOwogIGNvbG9yOiAjZmZmOwogIGJvcmRlci1yYWRpdXM6IDUwMHB4Owp9Ci8qIEhvdmVyICovCi51ay1tYXJrZXI6aG92ZXIgewogIGNvbG9yOiAjZmZmOwp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IEFsZXJ0CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstYWxlcnQgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBtYXJnaW4tYm90dG9tOiAyMHB4OwogIHBhZGRpbmc6IDE1cHggMTVweCAxNXB4IDI5cHg7CiAgYmFja2dyb3VuZDogI2Y4ZjhmODsKICBjb2xvcjogIzY2NjsKfQovKiBBZGQgbWFyZ2luIGlmIGFkamFjZW50IGVsZW1lbnQgKi8KKiArIC51ay1hbGVydCB7CiAgbWFyZ2luLXRvcDogMjBweDsKfQovKgogKiBSZW1vdmUgbWFyZ2luIGZyb20gdGhlIGxhc3QtY2hpbGQKICovCi51ay1hbGVydCA+IDpsYXN0LWNoaWxkIHsKICBtYXJnaW4tYm90dG9tOiAwOwp9Ci8qIENsb3NlCiAqIEFkb3B0cyBgdWstY2xvc2VgCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstYWxlcnQtY2xvc2UgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDIwcHg7CiAgbGVmdDogMTVweDsKICBjb2xvcjogaW5oZXJpdDsKICBvcGFjaXR5OiAwLjQ7Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIGFkamFjZW50IGVsZW1lbnQKICovCi51ay1hbGVydC1jbG9zZTpmaXJzdC1jaGlsZCArICogewogIG1hcmdpbi10b3A6IDA7Cn0KLyoKICogSG92ZXIKICovCi51ay1hbGVydC1jbG9zZTpob3ZlciB7CiAgY29sb3I6IGluaGVyaXQ7CiAgb3BhY2l0eTogMC44Owp9Ci8qIFN0eWxlIG1vZGlmaWVycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogUHJpbWFyeQogKi8KLnVrLWFsZXJ0LXByaW1hcnkgewogIGJhY2tncm91bmQ6ICNkOGVhZmM7CiAgY29sb3I6ICMxZTg3ZjA7Cn0KLyoKICogU3VjY2VzcwogKi8KLnVrLWFsZXJ0LXN1Y2Nlc3MgewogIGJhY2tncm91bmQ6ICNlZGZiZjY7CiAgY29sb3I6ICMzMmQyOTY7Cn0KLyoKICogV2FybmluZwogKi8KLnVrLWFsZXJ0LXdhcm5pbmcgewogIGJhY2tncm91bmQ6ICNmZmY2ZWU7CiAgY29sb3I6ICNmYWEwNWE7Cn0KLyoKICogRGFuZ2VyCiAqLwoudWstYWxlcnQtZGFuZ2VyIHsKICBiYWNrZ3JvdW5kOiAjZmVmNGY2OwogIGNvbG9yOiAjZjA1MDZlOwp9Ci8qCiAgICAgKiBDb250ZW50CiAgICAgKi8KLnVrLWFsZXJ0IGgxLAoudWstYWxlcnQgaDIsCi51ay1hbGVydCBoMywKLnVrLWFsZXJ0IGg0LAoudWstYWxlcnQgaDUsCi51ay1hbGVydCBoNiB7CiAgY29sb3I6IGluaGVyaXQ7Cn0KLnVrLWFsZXJ0IGE6bm90KFtjbGFzc10pIHsKICBjb2xvcjogaW5oZXJpdDsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQoudWstYWxlcnQgYTpub3QoW2NsYXNzXSk6aG92ZXIgewogIGNvbG9yOiBpbmhlcml0OwogIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IFBsYWNlaG9sZGVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstcGxhY2Vob2xkZXIgewogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgcGFkZGluZzogMzBweCAzMHB4OwogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogIGJvcmRlcjogMXB4IGRhc2hlZCAjZTVlNWU1Owp9Ci8qIEFkZCBtYXJnaW4gaWYgYWRqYWNlbnQgZWxlbWVudCAqLwoqICsgLnVrLXBsYWNlaG9sZGVyIHsKICBtYXJnaW4tdG9wOiAyMHB4Owp9Ci8qCiAqIFJlbW92ZSBtYXJnaW4gZnJvbSB0aGUgbGFzdC1jaGlsZAogKi8KLnVrLXBsYWNlaG9sZGVyID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogQmFkZ2UKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFN0eWxlCiAqIDIuIENlbnRlciBjaGlsZCB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFsbHkKICovCi51ay1iYWRnZSB7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBtaW4td2lkdGg6IDE4cHg7CiAgaGVpZ2h0OiAxOHB4OwogIHBhZGRpbmc6IDAgNXB4OwogIGJvcmRlci1yYWRpdXM6IDUwMHB4OwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgLyogMSAqLwogIGJhY2tncm91bmQ6ICMxZTg3ZjA7CiAgY29sb3I6ICNmZmYgIWltcG9ydGFudDsKICBmb250LXNpemU6IDExcHg7CiAgLyogMiAqLwogIGRpc3BsYXk6IGlubGluZS1mbGV4OwogIGp1c3RpZnktY29udGVudDogY2VudGVyOwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgbGluZS1oZWlnaHQ6IDA7Cn0KLyoKICogUmVxdWlyZWQgZm9yIGBhYAogKi8KLnVrLWJhZGdlOmhvdmVyIHsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogTGFiZWwKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1sYWJlbCB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHBhZGRpbmc6IDAgMTBweDsKICBiYWNrZ3JvdW5kOiAjMWU4N2YwOwogIGxpbmUtaGVpZ2h0OiAxLjU7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKICBjb2xvcjogI2ZmZjsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgYm9yZGVyLXJhZGl1czogMnB4OwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KLyogQ29sb3IgbW9kaWZpZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBTdWNjZXNzCiAqLwoudWstbGFiZWwtc3VjY2VzcyB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzMyZDI5NjsKICBjb2xvcjogI2ZmZjsKfQovKgogKiBXYXJuaW5nCiAqLwoudWstbGFiZWwtd2FybmluZyB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhYTA1YTsKICBjb2xvcjogI2ZmZjsKfQovKgogKiBEYW5nZXIKICovCi51ay1sYWJlbC1kYW5nZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNmMDUwNmU7CiAgY29sb3I6ICNmZmY7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogT3ZlcmxheQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLW92ZXJsYXkgewogIHBhZGRpbmc6IDMwcHggMzBweDsKfQovKgogKiBSZW1vdmUgbWFyZ2luIGZyb20gdGhlIGxhc3QtY2hpbGQKICovCi51ay1vdmVybGF5ID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KLyogSWNvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogU3R5bGUgbW9kaWZpZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBEZWZhdWx0CiAqLwoudWstb3ZlcmxheS1kZWZhdWx0IHsKICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7Cn0KLyoKICogUHJpbWFyeQogKi8KLnVrLW92ZXJsYXktcHJpbWFyeSB7CiAgYmFja2dyb3VuZDogcmdiYSgzNCwgMzQsIDM0LCAwLjgpOwp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IEFydGljbGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1hcnRpY2xlIHsKICBkaXNwbGF5OiBmbG93LXJvb3Q7Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIHRoZSBsYXN0LWNoaWxkCiAqLwoudWstYXJ0aWNsZSA+IDpsYXN0LWNoaWxkIHsKICBtYXJnaW4tYm90dG9tOiAwOwp9Ci8qIEFkamFjZW50IHNpYmxpbmcKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1hcnRpY2xlICsgLnVrLWFydGljbGUgewogIG1hcmdpbi10b3A6IDcwcHg7Cn0KLyogVGl0bGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1hcnRpY2xlLXRpdGxlIHsKICBmb250LXNpemU6IDIuMjMxMjVyZW07CiAgbGluZS1oZWlnaHQ6IDEuMjsKfQovKiBUYWJsZXQgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7CiAgLnVrLWFydGljbGUtdGl0bGUgewogICAgZm9udC1zaXplOiAyLjYyNXJlbTsKICB9Cn0KLyogTWV0YQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWFydGljbGUtbWV0YSB7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKICBsaW5lLWhlaWdodDogMS40OwogIGNvbG9yOiAjOTk5Owp9Ci51ay1hcnRpY2xlLW1ldGEgYSB7CiAgY29sb3I6ICM5OTk7Cn0KLnVrLWFydGljbGUtbWV0YSBhOmhvdmVyIHsKICBjb2xvcjogIzY2NjsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogQ29tbWVudAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogU2VjdGlvbnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1jb21tZW50LWJvZHkgewogIGRpc3BsYXk6IGZsb3ctcm9vdDsKICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkOwogIHdvcmQtd3JhcDogYnJlYWstd29yZDsKfQoudWstY29tbWVudC1oZWFkZXIgewogIGRpc3BsYXk6IGZsb3ctcm9vdDsKICBtYXJnaW4tYm90dG9tOiAyMHB4Owp9Ci8qCiAqIFJlbW92ZSBtYXJnaW4gZnJvbSB0aGUgbGFzdC1jaGlsZAogKi8KLnVrLWNvbW1lbnQtYm9keSA+IDpsYXN0LWNoaWxkLAoudWstY29tbWVudC1oZWFkZXIgPiA6bGFzdC1jaGlsZCB7CiAgbWFyZ2luLWJvdHRvbTogMDsKfQovKiBUaXRsZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWNvbW1lbnQtdGl0bGUgewogIGZvbnQtc2l6ZTogMS4yNXJlbTsKICBsaW5lLWhlaWdodDogMS40Owp9Ci8qIE1ldGEKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1jb21tZW50LW1ldGEgewogIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgbGluZS1oZWlnaHQ6IDEuNDsKICBjb2xvcjogIzk5OTsKfQovKiBBdmF0YXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIExpc3QKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1jb21tZW50LWxpc3QgewogIHBhZGRpbmc6IDA7CiAgbGlzdC1zdHlsZTogbm9uZTsKfQovKiBBZGphY2VudCBzaWJsaW5ncyAqLwoudWstY29tbWVudC1saXN0ID4gOm50aC1jaGlsZChuKzIpIHsKICBtYXJnaW4tdG9wOiA3MHB4Owp9Ci8qCiAqIFN1Ymxpc3RzCiAqIE5vdGU6IEdlbmVyYWwgc2libGluZyBzZWxlY3RvciBhbGxvd3MgcmVwbHkgYmxvY2sgYmV0d2VlbiBjb21tZW50IGFuZCBzdWJsaXN0CiAqLwoudWstY29tbWVudC1saXN0IC51ay1jb21tZW50IH4gdWwgewogIG1hcmdpbjogNzBweCAwIDAgMDsKICBwYWRkaW5nLXJpZ2h0OiAzMHB4OwogIGxpc3Qtc3R5bGU6IG5vbmU7Cn0KLyogVGFibGV0IGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7CiAgLnVrLWNvbW1lbnQtbGlzdCAudWstY29tbWVudCB+IHVsIHsKICAgIHBhZGRpbmctcmlnaHQ6IDEwMHB4OwogIH0KfQovKiBBZGphY2VudCBzaWJsaW5ncyAqLwoudWstY29tbWVudC1saXN0IC51ay1jb21tZW50IH4gdWwgPiA6bnRoLWNoaWxkKG4rMikgewogIG1hcmdpbi10b3A6IDcwcHg7Cn0KLyogU3R5bGUgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1jb21tZW50LXByaW1hcnkgewogIHBhZGRpbmc6IDMwcHg7CiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBTZWFyY2gKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIENvbnRhaW5lciBmaXRzIGl0cyBjb250ZW50CiAqIDIuIENyZWF0ZSBwb3NpdGlvbiBjb250ZXh0CiAqIDMuIFByZXZlbnQgY29udGVudCBvdmVyZmxvdwogKiA0LiBSZXNldCBgZm9ybWAKICovCi51ay1zZWFyY2ggewogIC8qIDEgKi8KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgLyogMiAqLwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAvKiAzICovCiAgbWF4LXdpZHRoOiAxMDAlOwogIC8qIDQgKi8KICBtYXJnaW46IDA7Cn0KLyogSW5wdXQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIFJlbW92ZSB0aGUgaW5uZXIgcGFkZGluZyBhbmQgY2FuY2VsIGJ1dHRvbnMgaW4gQ2hyb21lIG9uIE9TIFggYW5kIFNhZmFyaSBvbiBPUyBYLgogKi8KLnVrLXNlYXJjaC1pbnB1dDo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwKLnVrLXNlYXJjaC1pbnB1dDo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7CiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwp9Ci8qCiAqIFJlbW92ZXMgcGxhY2Vob2xkZXIgdHJhbnNwYXJlbmN5IGluIEZpcmVmb3guCiAqLwoudWstc2VhcmNoLWlucHV0OjotbW96LXBsYWNlaG9sZGVyIHsKICBvcGFjaXR5OiAxOwp9Ci8qCiAqIDEuIERlZmluZSBjb25zaXN0ZW50IGJveCBzaXppbmcuCiAqIDIuIEFkZHJlc3MgbWFyZ2lucyBzZXQgZGlmZmVyZW50bHkgaW4gRmlyZWZveC9JRSBhbmQgQ2hyb21lL1NhZmFyaS9PcGVyYS4KICogMy4gUmVtb3ZlIGBib3JkZXItcmFkaXVzYCBpbiBpT1MuCiAqIDQuIENoYW5nZSBmb250IHByb3BlcnRpZXMgdG8gYGluaGVyaXRgIGluIGFsbCBicm93c2VycwogKiA1LiBTaG93IHRoZSBvdmVyZmxvdyBpbiBFZGdlLgogKiA2LiBSZW1vdmUgZGVmYXVsdCBzdHlsZSBpbiBpT1MuCiAqIDcuIFZlcnRpY2FsIGFsaWdubWVudAogKiA4LiBUYWtlIHRoZSBmdWxsIGNvbnRhaW5lciB3aWR0aAogKiA5LiBTdHlsZQogKi8KLnVrLXNlYXJjaC1pbnB1dCB7CiAgLyogMSAqLwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgLyogMiAqLwogIG1hcmdpbjogMDsKICAvKiAzICovCiAgYm9yZGVyLXJhZGl1czogMDsKICAvKiA0ICovCiAgZm9udDogaW5oZXJpdDsKICAvKiA1ICovCiAgb3ZlcmZsb3c6IHZpc2libGU7CiAgLyogNiAqLwogIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAvKiA3ICovCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAvKiA4ICovCiAgd2lkdGg6IDEwMCU7CiAgLyogOSAqLwogIGJvcmRlcjogbm9uZTsKICBjb2xvcjogIzY2NjsKfQoudWstc2VhcmNoLWlucHV0OmZvY3VzIHsKICBvdXRsaW5lOiBub25lOwp9Ci8qIFBsYWNlaG9sZGVyICovCi51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICBjb2xvcjogIzk5OTsKfQovKiBJY29uIChBZG9wdHMgYHVrLWljb25gKQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogUG9zaXRpb24gYWJvdmUgaW5wdXQKICogMS4gU2V0IHBvc2l0aW9uCiAqIDIuIENlbnRlciBpY29uIHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseQogKiAzLiBTdHlsZQogKi8KLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb24gewogIC8qIDEgKi8KICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOwogIGJvdHRvbTogMDsKICByaWdodDogMDsKICAvKiAyICovCiAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAvKiAzICovCiAgY29sb3I6ICM5OTk7Cn0KLyoKICogUmVxdWlyZWQgZm9yIGBhYC4KICovCi51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyIHsKICBjb2xvcjogIzk5OTsKfQovKgogKiBNYWtlIGBpbnB1dGAgZWxlbWVudCBjbGlja2FibGUgdGhyb3VnaCBpY29uLCBlLmcuIGlmIGl0J3MgYSBgc3BhbmAKICovCi51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOm5vdChhKTpub3QoYnV0dG9uKTpub3QoaW5wdXQpIHsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQovKgogKiBQb3NpdGlvbiBtb2RpZmllcgogKi8KLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb24tZmxpcCB7CiAgbGVmdDogMDsKICByaWdodDogYXV0bzsKfQovKiBEZWZhdWx0IG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstc2VhcmNoLWRlZmF1bHQgewogIHdpZHRoOiAyNDBweDsKfQovKgogKiBJbnB1dAogKi8KLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQgewogIGhlaWdodDogNDBweDsKICBwYWRkaW5nLXJpZ2h0OiAxMHB4OwogIHBhZGRpbmctbGVmdDogMTBweDsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICBib3JkZXI6IDFweCBzb2xpZCAjZTVlNWU1Owp9Ci8qIEZvY3VzICovCi51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3VzIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOwogIGJvcmRlci1jb2xvcjogIzFlODdmMDsKfQovKgogKiBJY29uCiAqLwoudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pY29uIHsKICB3aWR0aDogNDBweDsKfQoudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pY29uOm5vdCgudWstc2VhcmNoLWljb24tZmxpcCkgfiAudWstc2VhcmNoLWlucHV0IHsKICBwYWRkaW5nLXJpZ2h0OiA0MHB4Owp9Ci51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWljb24tZmxpcCB+IC51ay1zZWFyY2gtaW5wdXQgewogIHBhZGRpbmctbGVmdDogNDBweDsKfQovKiBOYXZiYXIgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1zZWFyY2gtbmF2YmFyIHsKICB3aWR0aDogNDAwcHg7Cn0KLyoKICogSW5wdXQKICovCi51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXQgewogIGhlaWdodDogNDBweDsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICBmb250LXNpemU6IDEuNXJlbTsKfQovKiBGb2N1cyAqLwovKgogKiBJY29uCiAqLwoudWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWljb24gewogIHdpZHRoOiA0MHB4Owp9Ci51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaWNvbjpub3QoLnVrLXNlYXJjaC1pY29uLWZsaXApIH4gLnVrLXNlYXJjaC1pbnB1dCB7CiAgcGFkZGluZy1yaWdodDogNDBweDsKfQoudWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWljb24tZmxpcCB+IC51ay1zZWFyY2gtaW5wdXQgewogIHBhZGRpbmctbGVmdDogNDBweDsKfQovKiBMYXJnZSBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXNlYXJjaC1sYXJnZSB7CiAgd2lkdGg6IDUwMHB4Owp9Ci8qCiAqIElucHV0CiAqLwoudWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaW5wdXQgewogIGhlaWdodDogODBweDsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICBmb250LXNpemU6IDIuNjI1cmVtOwp9Ci8qIEZvY3VzICovCi8qCiAqIEljb24KICovCi51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pY29uIHsKICB3aWR0aDogODBweDsKfQoudWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaWNvbjpub3QoLnVrLXNlYXJjaC1pY29uLWZsaXApIH4gLnVrLXNlYXJjaC1pbnB1dCB7CiAgcGFkZGluZy1yaWdodDogODBweDsKfQoudWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaWNvbi1mbGlwIH4gLnVrLXNlYXJjaC1pbnB1dCB7CiAgcGFkZGluZy1sZWZ0OiA4MHB4Owp9Ci8qIFRvZ2dsZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXNlYXJjaC10b2dnbGUgewogIGNvbG9yOiAjOTk5Owp9Ci8qIEhvdmVyICovCi51ay1zZWFyY2gtdG9nZ2xlOmhvdmVyIHsKICBjb2xvcjogIzY2NjsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBBY2NvcmRpb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1hY2NvcmRpb24gewogIHBhZGRpbmc6IDA7CiAgbGlzdC1zdHlsZTogbm9uZTsKfQovKiBJdGVtCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstYWNjb3JkaW9uID4gOm50aC1jaGlsZChuKzIpIHsKICBtYXJnaW4tdG9wOiAyMHB4Owp9Ci8qIFRpdGxlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstYWNjb3JkaW9uLXRpdGxlIHsKICBkaXNwbGF5OiBibG9jazsKICBmb250LXNpemU6IDEuMjVyZW07CiAgbGluZS1oZWlnaHQ6IDEuNDsKICBjb2xvcjogIzMzMzsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSB7CiAgY29udGVudDogIiI7CiAgd2lkdGg6IDEuNGVtOwogIGhlaWdodDogMS40ZW07CiAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogIGZsb2F0OiBsZWZ0OwogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxMyUyMiUyMGhlaWdodCUzRCUyMjEzJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTMlMjAxMyUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM2NjYlMjIlMjB3aWR0aCUzRCUyMjEzJTIyJTIwaGVpZ2h0JTNEJTIyMSUyMiUyMHglM0QlMjIwJTIyJTIweSUzRCUyMjYlMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyMzY2NiUyMiUyMHdpZHRoJTNEJTIyMSUyMiUyMGhlaWdodCUzRCUyMjEzJTIyJTIweCUzRCUyMjYlMjIlMjB5JTNEJTIyMCUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpOwogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJTsKfQoudWstb3BlbiA+IC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSB7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjEzJTIyJTIwaGVpZ2h0JTNEJTIyMTMlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMyUyMDEzJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyMzY2NiUyMiUyMHdpZHRoJTNEJTIyMTMlMjIlMjBoZWlnaHQlM0QlMjIxJTIyJTIweCUzRCUyMjAlMjIlMjB5JTNEJTIyNiUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpOwp9Ci8qIEhvdmVyICovCi51ay1hY2NvcmRpb24tdGl0bGU6aG92ZXIgewogIGNvbG9yOiAjNjY2OwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQovKiBDb250ZW50CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstYWNjb3JkaW9uLWNvbnRlbnQgewogIGRpc3BsYXk6IGZsb3ctcm9vdDsKICBtYXJnaW4tdG9wOiAyMHB4Owp9Ci8qCiAqIFJlbW92ZSBtYXJnaW4gZnJvbSB0aGUgbGFzdC1jaGlsZAogKi8KLnVrLWFjY29yZGlvbi1jb250ZW50ID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogRHJvcAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gSGlkZSBieSBkZWZhdWx0CiAqIDIuIFNldCBwb3NpdGlvbgogKiAzLiBTZXQgYSBkZWZhdWx0IHdpZHRoCiAqLwoudWstZHJvcCB7CiAgLyogMSAqLwogIGRpc3BsYXk6IG5vbmU7CiAgLyogMiAqLwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiAxMDIwOwogIC0tdWstcG9zaXRpb24tb2Zmc2V0OiAyMHB4OwogIC0tdWstcG9zaXRpb24tdmlld3BvcnQtb2Zmc2V0OiAxNXB4OwogIC8qIDMgKi8KICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIHdpZHRoOiAzMDBweDsKfQovKiBTaG93ICovCi51ay1kcm9wLnVrLW9wZW4gewogIGRpc3BsYXk6IGJsb2NrOwp9Ci8qIEdyaWQgbW9kaWZpZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstZHJvcC1zdGFjayAudWstZHJvcC1ncmlkID4gKiB7CiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBEcm9wZG93bgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gSGlkZSBieSBkZWZhdWx0CiAqIDIuIFNldCBwb3NpdGlvbgogKiAzLiBTZXQgYSBkZWZhdWx0IHdpZHRoCiAqIDQuIFN0eWxlCiAqLwoudWstZHJvcGRvd24gewogIC8qIDEgKi8KICBkaXNwbGF5OiBub25lOwogIC8qIDIgKi8KICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgei1pbmRleDogMTAyMDsKICAtLXVrLXBvc2l0aW9uLW9mZnNldDogMTBweDsKICAtLXVrLXBvc2l0aW9uLXZpZXdwb3J0LW9mZnNldDogMTVweDsKICAvKiAzICovCiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBtaW4td2lkdGg6IDIwMHB4OwogIC8qIDQgKi8KICBwYWRkaW5nOiAyNXB4OwogIGJhY2tncm91bmQ6ICNmZmY7CiAgY29sb3I6ICM2NjY7CiAgYm94LXNoYWRvdzogMCA1cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwp9Ci8qIFNob3cgKi8KLnVrLWRyb3Bkb3duLnVrLW9wZW4gewogIGRpc3BsYXk6IGJsb2NrOwp9Ci8qCiAqIFJlbW92ZSBtYXJnaW4gZnJvbSB0aGUgbGFzdC1jaGlsZAogKi8KLnVrLWRyb3Bkb3duID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KLyogU2l6ZSBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWRyb3Bkb3duLWxhcmdlIHsKICBwYWRkaW5nOiA0MHB4Owp9Ci8qIE5hdgogKiBBZG9wdHMgYHVrLW5hdmAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1kcm9wZG93bi1uYXYgewogIGZvbnQtc2l6ZTogMC44NzVyZW07Cn0KLyoKICogSXRlbXMKICovCi51ay1kcm9wZG93bi1uYXYgPiBsaSA+IGEgewogIGNvbG9yOiAjOTk5Owp9Ci8qIEhvdmVyICsgQWN0aXZlICovCi51ay1kcm9wZG93bi1uYXYgPiBsaSA+IGE6aG92ZXIsCi51ay1kcm9wZG93bi1uYXYgPiBsaS51ay1hY3RpdmUgPiBhIHsKICBjb2xvcjogIzY2NjsKfQovKgogKiBTdWJ0aXRsZQogKi8KLnVrLWRyb3Bkb3duLW5hdiAudWstbmF2LXN1YnRpdGxlIHsKICBmb250LXNpemU6IDEycHg7Cn0KLyoKICogSGVhZGVyCiAqLwoudWstZHJvcGRvd24tbmF2IC51ay1uYXYtaGVhZGVyIHsKICBjb2xvcjogIzMzMzsKfQovKgogKiBEaXZpZGVyCiAqLwoudWstZHJvcGRvd24tbmF2IC51ay1uYXYtZGl2aWRlciB7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNWU1ZTU7Cn0KLyoKICogU3VibGlzdHMKICovCi51ay1kcm9wZG93bi1uYXYgLnVrLW5hdi1zdWIgYSB7CiAgY29sb3I6ICM5OTk7Cn0KLnVrLWRyb3Bkb3duLW5hdiAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstZHJvcGRvd24tbmF2IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEgewogIGNvbG9yOiAjNjY2Owp9Ci8qIEdyaWQgbW9kaWZpZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstZHJvcGRvd24tc3RhY2sgLnVrLWRyb3Bkb3duLWdyaWQgPiAqIHsKICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Owp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IERyb3BiYXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIEhpZGUgYnkgZGVmYXVsdAogKiAyLiBTZXQgcG9zaXRpb24KICogMy4gU3R5bGUKICovCi51ay1kcm9wYmFyIHsKICAtLXVrLXBvc2l0aW9uLW9mZnNldDogMDsKICAtLXVrLXBvc2l0aW9uLXNoaWZ0LW9mZnNldDogMDsKICAtLXVrLXBvc2l0aW9uLXZpZXdwb3J0LW9mZnNldDogMDsKICAvKiAxICovCiAgZGlzcGxheTogbm9uZTsKICAvKiAyICovCiAgcG9zaXRpb246IGFic29sdXRlOwogIHotaW5kZXg6IDEwMjA7CiAgLyogMyAqLwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgcGFkZGluZzogMjVweCAxNXB4IDI1cHggMTVweDsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGNvbG9yOiAjNjY2Owp9Ci8qIFNob3cgKi8KLnVrLWRyb3BiYXIudWstb3BlbiB7CiAgZGlzcGxheTogYmxvY2s7Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIHRoZSBsYXN0LWNoaWxkCiAqLwoudWstZHJvcGJhciA+IDpsYXN0LWNoaWxkIHsKICBtYXJnaW4tYm90dG9tOiAwOwp9Ci8qIFBob25lIGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgewogIC51ay1kcm9wYmFyIHsKICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7CiAgICBwYWRkaW5nLWxlZnQ6IDMwcHg7CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstZHJvcGJhciB7CiAgICBwYWRkaW5nLXJpZ2h0OiA0MHB4OwogICAgcGFkZGluZy1sZWZ0OiA0MHB4OwogIH0KfQovKiBTaXplIG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstZHJvcGJhci1sYXJnZSB7CiAgcGFkZGluZy10b3A6IDQwcHg7CiAgcGFkZGluZy1ib3R0b206IDQwcHg7Cn0KLyogRGlyZWN0aW9uIG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstZHJvcGJhci10b3AgewogIGJveC1zaGFkb3c6IDAgMTJweCA3cHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMDUpOwp9Ci51ay1kcm9wYmFyLWJvdHRvbSB7CiAgYm94LXNoYWRvdzogMCAtMTJweCA3cHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMDUpOwp9Ci51ay1kcm9wYmFyLXJpZ2h0IHsKICBib3gtc2hhZG93OiAtMTJweCAwIDdweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7Cn0KLnVrLWRyb3BiYXItbGVmdCB7CiAgYm94LXNoYWRvdzogMTJweCAwIDdweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogTW9kYWwKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIEhpZGUgYnkgZGVmYXVsdAogKiAyLiBTZXQgcG9zaXRpb24KICogMy4gQWxsb3cgc2Nyb2xsaW5nIGZvciB0aGUgbW9kYWwgZGlhbG9nCiAqIDQuIEhvcml6b250YWwgcGFkZGluZwogKiA1LiBNYXNrIHRoZSBiYWNrZ3JvdW5kIHBhZ2UKICogNi4gRmFkZS1pbiB0cmFuc2l0aW9uCiAqLwoudWstbW9kYWwgewogIC8qIDEgKi8KICBkaXNwbGF5OiBub25lOwogIC8qIDIgKi8KICBwb3NpdGlvbjogZml4ZWQ7CiAgdG9wOiAwOwogIGxlZnQ6IDA7CiAgYm90dG9tOiAwOwogIHJpZ2h0OiAwOwogIHotaW5kZXg6IDEwMTA7CiAgLyogMyAqLwogIG92ZXJmbG93LXk6IGF1dG87CiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogIC8qIDQgKi8KICBwYWRkaW5nOiAxNXB4IDE1cHg7CiAgLyogNSAqLwogIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC42KTsKICAvKiA2ICovCiAgb3BhY2l0eTogMDsKICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGxpbmVhcjsKfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAudWstbW9kYWwgewogICAgcGFkZGluZzogNTBweCAzMHB4OwogIH0KfQovKiBUYWJsZXQgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7CiAgLnVrLW1vZGFsIHsKICAgIHBhZGRpbmctcmlnaHQ6IDQwcHg7CiAgICBwYWRkaW5nLWxlZnQ6IDQwcHg7CiAgfQp9Ci8qCiAqIE9wZW4KICovCi51ay1tb2RhbC51ay1vcGVuIHsKICBvcGFjaXR5OiAxOwp9Ci8qIFBhZ2UKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIFByZXZlbnQgc2Nyb2xsYmFycwogKi8KLnVrLW1vZGFsLXBhZ2UgewogIG92ZXJmbG93OiBoaWRkZW47Cn0KLyogRGlhbG9nCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBDcmVhdGUgcG9zaXRpb24gY29udGV4dCBmb3Igc3Bpbm5lciBhbmQgY2xvc2UgYnV0dG9uCiAqIDIuIERpbWVuc2lvbnMKICogMy4gYCFpbXBvcnRhbnRgIGlzIG5lZWRlZCB0byBvdmVyd3JpdGUgYHVrLXdpZHRoLWF1dG9gLiBTZWUgYCNtb2RhbC1tZWRpYS1pbWFnZWAgaW4gdGVzdHMKICogNC4gU3R5bGUKICogNS4gU2xpZGUtaW4gdHJhbnNpdGlvbgogKi8KLnVrLW1vZGFsLWRpYWxvZyB7CiAgLyogMSAqLwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAvKiAyICovCiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBtYXJnaW46IDAgYXV0bzsKICB3aWR0aDogNjAwcHg7CiAgLyogMyAqLwogIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OwogIC8qIDQgKi8KICBiYWNrZ3JvdW5kOiAjZmZmOwogIC8qIDUgKi8KICBvcGFjaXR5OiAwOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTAwcHgpOwogIHRyYW5zaXRpb246IDAuM3MgbGluZWFyOwogIHRyYW5zaXRpb24tcHJvcGVydHk6IG9wYWNpdHksIHRyYW5zZm9ybTsKfQovKgogKiBPcGVuCiAqLwoudWstb3BlbiA+IC51ay1tb2RhbC1kaWFsb2cgewogIG9wYWNpdHk6IDE7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwp9Ci8qIFNpemUgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIENvbnRhaW5lciBzaXplCiAqIFRha2UgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgQ29udGFpbmVyIGNvbXBvbmVudAogKi8KLnVrLW1vZGFsLWNvbnRhaW5lciAudWstbW9kYWwtZGlhbG9nIHsKICB3aWR0aDogMTIwMHB4Owp9Ci8qCiAqIEZ1bGwgc2l6ZQogKiAxLiBSZW1vdmUgcGFkZGluZyBhbmQgYmFja2dyb3VuZCBmcm9tIG1vZGFsCiAqIDIuIFJlc2V0IGFsbCBkZWZhdWx0IGRlY2xhcmF0aW9ucyBmcm9tIG1vZGFsIGRpYWxvZwogKi8KLyogMSAqLwoudWstbW9kYWwtZnVsbCB7CiAgcGFkZGluZzogMDsKICBiYWNrZ3JvdW5kOiBub25lOwp9Ci8qIDIgKi8KLnVrLW1vZGFsLWZ1bGwgLnVrLW1vZGFsLWRpYWxvZyB7CiAgbWFyZ2luOiAwOwogIHdpZHRoOiAxMDAlOwogIG1heC13aWR0aDogMTAwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7Cn0KLyogU2VjdGlvbnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1tb2RhbC1ib2R5IHsKICBkaXNwbGF5OiBmbG93LXJvb3Q7CiAgcGFkZGluZzogMjBweCAyMHB4Owp9Ci51ay1tb2RhbC1oZWFkZXIgewogIGRpc3BsYXk6IGZsb3ctcm9vdDsKICBwYWRkaW5nOiAxMHB4IDIwcHg7CiAgYmFja2dyb3VuZDogI2ZmZjsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTsKfQoudWstbW9kYWwtZm9vdGVyIHsKICBkaXNwbGF5OiBmbG93LXJvb3Q7CiAgcGFkZGluZzogMTBweCAyMHB4OwogIGJhY2tncm91bmQ6ICNmZmY7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNWU1ZTU7Cn0KLyogUGhvbmUgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7CiAgLnVrLW1vZGFsLWJvZHkgewogICAgcGFkZGluZzogMzBweCAzMHB4OwogIH0KICAudWstbW9kYWwtaGVhZGVyIHsKICAgIHBhZGRpbmc6IDE1cHggMzBweDsKICB9CiAgLnVrLW1vZGFsLWZvb3RlciB7CiAgICBwYWRkaW5nOiAxNXB4IDMwcHg7CiAgfQp9Ci8qCiAqIFJlbW92ZSBtYXJnaW4gZnJvbSB0aGUgbGFzdC1jaGlsZAogKi8KLnVrLW1vZGFsLWJvZHkgPiA6bGFzdC1jaGlsZCwKLnVrLW1vZGFsLWhlYWRlciA+IDpsYXN0LWNoaWxkLAoudWstbW9kYWwtZm9vdGVyID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KLyogVGl0bGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1tb2RhbC10aXRsZSB7CiAgZm9udC1zaXplOiAycmVtOwogIGxpbmUtaGVpZ2h0OiAxLjM7Cn0KLyogQ2xvc2UKICogQWRvcHRzIGB1ay1jbG9zZWAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCltjbGFzcyo9J3VrLW1vZGFsLWNsb3NlLSddIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgei1pbmRleDogMTAxMDsKICB0b3A6IDEwcHg7CiAgbGVmdDogMTBweDsKICBwYWRkaW5nOiA1cHg7Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIGFkamFjZW50IGVsZW1lbnQKICovCltjbGFzcyo9J3VrLW1vZGFsLWNsb3NlLSddOmZpcnN0LWNoaWxkICsgKiB7CiAgbWFyZ2luLXRvcDogMDsKfQovKgogKiBIb3ZlcgogKi8KLyoKICogRGVmYXVsdAogKi8KLyoKICogT3V0c2lkZQogKiAxLiBQcmV2ZW50IHNjcm9sbGJhciBvbiBzbWFsbCBkZXZpY2VzCiAqLwoudWstbW9kYWwtY2xvc2Utb3V0c2lkZSB7CiAgdG9wOiAwOwogIC8qIDEgKi8KICBsZWZ0OiAtNXB4OwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC0xMDAlKTsKICBjb2xvcjogI2ZmZmZmZjsKfQoudWstbW9kYWwtY2xvc2Utb3V0c2lkZTpob3ZlciB7CiAgY29sb3I6ICNmZmY7Cn0KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogIC8qIDEgKi8KICAudWstbW9kYWwtY2xvc2Utb3V0c2lkZSB7CiAgICBsZWZ0OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTEwMCUsIC0xMDAlKTsKICB9Cn0KLyoKICogRnVsbAogKi8KLnVrLW1vZGFsLWNsb3NlLWZ1bGwgewogIHRvcDogMDsKICBsZWZ0OiAwOwogIHBhZGRpbmc6IDIwcHg7CiAgYmFja2dyb3VuZDogI2ZmZjsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBTbGlkZXNob3cKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFByZXZlbnQgdGFiIGhpZ2hsaWdodGluZyBvbiBpT1MuCiAqLwoudWstc2xpZGVzaG93IHsKICAvKiAxICovCiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKfQovKiBJdGVtcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gQ3JlYXRlIHBvc2l0aW9uIGFuZCBzdGFja2luZyBjb250ZXh0CiAqIDIuIFJlc2V0IGxpc3QKICogMy4gQ2xpcCBjaGlsZCBlbGVtZW50cwogKiA0LiBQcmV2ZW50IGRpc3BsYXlpbmcgdGhlIGNhbGxvdXQgaW5mb3JtYXRpb24gb24gaU9TLgogKiA1LiBEaXNhYmxlIGhvcml6b250YWwgcGFubmluZyBnZXN0dXJlcwogKi8KLnVrLXNsaWRlc2hvdy1pdGVtcyB7CiAgLyogMSAqLwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB6LWluZGV4OiAwOwogIC8qIDIgKi8KICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKICBsaXN0LXN0eWxlOiBub25lOwogIC8qIDMgKi8KICBvdmVyZmxvdzogaGlkZGVuOwogIC8qIDQgKi8KICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7CiAgLyogNSAqLwogIHRvdWNoLWFjdGlvbjogcGFuLXk7Cn0KLyogSXRlbQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gUG9zaXRpb24gaXRlbXMgYWJvdmUgZWFjaCBvdGhlcgogKiAyLiBUYWtlIHRoZSBmdWxsIHdpZHRoCiAqIDMuIENsaXAgY2hpbGQgZWxlbWVudHMsIGUuZy4gZm9yIGB1ay1jb3ZlcmAKICogNC4gT3B0aW1pemUgYW5pbWF0aW9uCiAqLwoudWstc2xpZGVzaG93LWl0ZW1zID4gKiB7CiAgLyogMSAqLwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDA7CiAgcmlnaHQ6IDA7CiAgLyogMiAqLwogIGxlZnQ6IDA7CiAgYm90dG9tOiAwOwogIC8qIDMgKi8KICBvdmVyZmxvdzogaGlkZGVuOwogIC8qIDQgKi8KICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtLCBvcGFjaXR5Owp9Ci8qCiAqIEhpZGUgbm90IGFjdGl2ZSBpdGVtcwogKi8KLnVrLXNsaWRlc2hvdy1pdGVtcyA+IDpub3QoLnVrLWFjdGl2ZSkgewogIGRpc3BsYXk6IG5vbmU7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogU2xpZGVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBQcmV2ZW50IHRhYiBoaWdobGlnaHRpbmcgb24gaU9TLgogKi8KLnVrLXNsaWRlciB7CiAgLyogMSAqLwogIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7Cn0KLyogQ29udGFpbmVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBDbGlwIGNoaWxkIGVsZW1lbnRzCiAqLwoudWstc2xpZGVyLWNvbnRhaW5lciB7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQovKgogKiBXaWRlbiBjb250YWluZXIgdG8gcHJldmVudCBib3gtc2hhZG93cyBmcm9tIGNsaXBwaW5nLCBgbGFyZ2UtYm94LXNoYWRvd2AKICovCi51ay1zbGlkZXItY29udGFpbmVyLW9mZnNldCB7CiAgbWFyZ2luOiAtMTFweCAtMjVweCAtMzlweCAtMjVweDsKICBwYWRkaW5nOiAxMXB4IDI1cHggMzlweCAyNXB4Owp9Ci8qIEl0ZW1zCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBPcHRpbWl6ZSBhbmltYXRpb24KICogMi4gQ3JlYXRlIGEgY29udGFpbmluZyBibG9jay4gSW4gU2FmYXJpIGl0J3MgbmVpdGhlciBjcmVhdGVkIGJ5IGB0cmFuc2Zvcm1gIG5vciBgd2lsbC1jaGFuZ2VgLgogKiAzLiBEaXNhYmxlIGhvcml6b250YWwgcGFubmluZyBnZXN0dXJlcwogKi8KLnVrLXNsaWRlci1pdGVtcyB7CiAgLyogMSAqLwogIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgLyogMiAqLwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAvKiAzICovCiAgdG91Y2gtYWN0aW9uOiBwYW4teTsKfQovKgogKiAxLiBSZXNldCBsaXN0IHN0eWxlIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCBncmlkCiAqIDIuIFByZXZlbnQgZGlzcGxheWluZyB0aGUgY2FsbG91dCBpbmZvcm1hdGlvbiBvbiBpT1MuCiAqLwoudWstc2xpZGVyLWl0ZW1zOm5vdCgudWstZ3JpZCkgewogIGRpc3BsYXk6IGZsZXg7CiAgLyogMSAqLwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgLyogMiAqLwogIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTsKfQoudWstc2xpZGVyLWl0ZW1zLnVrLWdyaWQgewogIGZsZXgtd3JhcDogbm93cmFwOwp9Ci8qIEl0ZW0KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIExldCBpdGVtcyB0YWtlIGNvbnRlbnQgZGltZW5zaW9ucyAoMCAwIGF1dG8pCiAqICAgIGBtYXgtd2lkdGhgIG5lZWRlZCB0byBrZWVwIGltYWdlIHJlc3BvbnNpdmVuZXNzIGFuZCBwcmV2ZW50IGNvbnRlbnQgb3ZlcmZsb3cKICogMy4gQ3JlYXRlIHBvc2l0aW9uIGNvbnRleHQKICovCi51ay1zbGlkZXItaXRlbXMgPiAqIHsKICAvKiAxICovCiAgZmxleDogbm9uZTsKICBtYXgtd2lkdGg6IDEwMCU7CiAgLyogMyAqLwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBTdGlja3kKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIENyZWF0ZSBwb3NpdGlvbiBjb250ZXh0IHNvIGl0J3MgdCB0aGUgc2FtZSBsaWtlIHdoZW4gZml4ZWQuCiAqIDIuIE1vcmUgcm9idXN0IGlmIHBhZGRpbmcgYW5kIGJvcmRlciBhcmUgdXNlZCBhbmQgdGhlIHN0aWNreSBoZWlnaHQgaXMgdHJhbnNpdGlvbmVkCiAqLwoudWstc3RpY2t5IHsKICAvKiAxICovCiAgcG9zaXRpb246IHJlbGF0aXZlOwogIC8qIDIgKi8KICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9Ci8qCiAqIDEuIEZvcmNlIG5ldyBsYXllciB0byByZXNvbHZlIGZyYW1lIHJhdGUgaXNzdWVzIG9uIGRldmljZXMgd2l0aCBsb3dlciBmcmFtZSByYXRlcwogKi8KLnVrLXN0aWNreS1maXhlZCB7CiAgei1pbmRleDogOTgwOwogIG1hcmdpbjogMCAhaW1wb3J0YW50OwogIC8qIDEgKi8KICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjsKICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47Cn0KLyoKICogRmFzdGVyIGFuaW1hdGlvbnMKICovCi51ay1zdGlja3lbY2xhc3MqPSd1ay1hbmltYXRpb24tJ10gewogIGFuaW1hdGlvbi1kdXJhdGlvbjogMC4yczsKfQoudWstc3RpY2t5LnVrLWFuaW1hdGlvbi1yZXZlcnNlIHsKICBhbmltYXRpb24tZHVyYXRpb246IDAuMnM7Cn0KLyoKICogUGxhY2Vob2xkZXIKICogTWFrZSBjb250ZW50IGNsaWNrYWJsZSBmb3Igc3RpY2t5IGNvdmVyIGFuZCByZXZlYWwgZWZmZWN0cwogKi8KLnVrLXN0aWNreS1wbGFjZWhvbGRlciB7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogT2ZmLWNhbnZhcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gSGlkZSBieSBkZWZhdWx0CiAqIDIuIFNldCBwb3NpdGlvbgogKi8KLnVrLW9mZmNhbnZhcyB7CiAgLyogMSAqLwogIGRpc3BsYXk6IG5vbmU7CiAgLyogMiAqLwogIHBvc2l0aW9uOiBmaXhlZDsKICB0b3A6IDA7CiAgYm90dG9tOiAwOwogIHJpZ2h0OiAwOwogIHotaW5kZXg6IDEwMDA7Cn0KLyoKICogRmxpcCBtb2RpZmllcgogKi8KLnVrLW9mZmNhbnZhcy1mbGlwIC51ay1vZmZjYW52YXMgewogIGxlZnQ6IDA7CiAgcmlnaHQ6IGF1dG87Cn0KLyogQmFyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBTZXQgcG9zaXRpb24KICogMi4gU2l6ZSBhbmQgc3R5bGUKICogMy4gQWxsb3cgc2Nyb2xsaW5nCiAqLwoudWstb2ZmY2FudmFzLWJhciB7CiAgLyogMSAqLwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDA7CiAgYm90dG9tOiAwOwogIHJpZ2h0OiAtMjcwcHg7CiAgLyogMiAqLwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgd2lkdGg6IDI3MHB4OwogIHBhZGRpbmc6IDIwcHggMjBweDsKICBiYWNrZ3JvdW5kOiAjMjIyOwogIC8qIDMgKi8KICBvdmVyZmxvdy15OiBhdXRvOwogIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAudWstb2ZmY2FudmFzLWJhciB7CiAgICByaWdodDogLTM1MHB4OwogICAgd2lkdGg6IDM1MHB4OwogICAgcGFkZGluZzogMzBweCAzMHB4OwogIH0KfQovKiBGbGlwIG1vZGlmaWVyICovCi51ay1vZmZjYW52YXMtZmxpcCAudWstb2ZmY2FudmFzLWJhciB7CiAgcmlnaHQ6IGF1dG87CiAgbGVmdDogLTI3MHB4Owp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAudWstb2ZmY2FudmFzLWZsaXAgLnVrLW9mZmNhbnZhcy1iYXIgewogICAgbGVmdDogLTM1MHB4OwogIH0KfQovKgogKiBPcGVuCiAqLwoudWstb3BlbiA+IC51ay1vZmZjYW52YXMtYmFyIHsKICByaWdodDogMDsKfQoudWstb2ZmY2FudmFzLWZsaXAgLnVrLW9wZW4gPiAudWstb2ZmY2FudmFzLWJhciB7CiAgcmlnaHQ6IGF1dG87CiAgbGVmdDogMDsKfQovKgogKiBTbGlkZSBBbmltYXRpb24gKFVzZWQgaW4gc2xpZGUgYW5kIHB1c2ggbW9kZSkKICovCi51ay1vZmZjYW52YXMtYmFyLWFuaW1hdGlvbiB7CiAgdHJhbnNpdGlvbjogcmlnaHQgMC4zcyBlYXNlLW91dDsKfQoudWstb2ZmY2FudmFzLWZsaXAgLnVrLW9mZmNhbnZhcy1iYXItYW5pbWF0aW9uIHsKICB0cmFuc2l0aW9uLXByb3BlcnR5OiBsZWZ0Owp9Ci8qCiAqIFJldmVhbCBBbmltYXRpb24KICogMS4gU2V0IHBvc2l0aW9uCiAqIDIuIENsaXAgdGhlIGJhcgogKiAzLiBBbmltYXRpb24KICogNC4gUmVzZXQgcG9zaXRpb24KICovCi51ay1vZmZjYW52YXMtcmV2ZWFsIHsKICAvKiAxICovCiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsKICBib3R0b206IDA7CiAgcmlnaHQ6IDA7CiAgLyogMiAqLwogIHdpZHRoOiAwOwogIG92ZXJmbG93OiBoaWRkZW47CiAgLyogMyAqLwogIHRyYW5zaXRpb246IHdpZHRoIDAuM3MgZWFzZS1vdXQ7Cn0KLnVrLW9mZmNhbnZhcy1yZXZlYWwgLnVrLW9mZmNhbnZhcy1iYXIgewogIC8qIDQgKi8KICByaWdodDogMDsKfQoudWstb2ZmY2FudmFzLWZsaXAgLnVrLW9mZmNhbnZhcy1yZXZlYWwgLnVrLW9mZmNhbnZhcy1iYXIgewogIC8qIDQgKi8KICByaWdodDogYXV0bzsKICBsZWZ0OiAwOwp9Ci51ay1vcGVuID4gLnVrLW9mZmNhbnZhcy1yZXZlYWwgewogIHdpZHRoOiAyNzBweDsKfQovKiBUYWJsZXQgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7CiAgLnVrLW9wZW4gPiAudWstb2ZmY2FudmFzLXJldmVhbCB7CiAgICB3aWR0aDogMzUwcHg7CiAgfQp9Ci8qCiAqIEZsaXAgbW9kaWZpZXIKICovCi51ay1vZmZjYW52YXMtZmxpcCAudWstb2ZmY2FudmFzLXJldmVhbCB7CiAgbGVmdDogMDsKICByaWdodDogYXV0bzsKfQovKiBDbG9zZQogKiBBZG9wdHMgYHVrLWNsb3NlYAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLW9mZmNhbnZhcy1jbG9zZSB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHotaW5kZXg6IDEwMDA7CiAgdG9wOiA1cHg7CiAgbGVmdDogNXB4OwogIHBhZGRpbmc6IDVweDsKfQovKiBUYWJsZXQgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7CiAgLnVrLW9mZmNhbnZhcy1jbG9zZSB7CiAgICB0b3A6IDEwcHg7CiAgICBsZWZ0OiAxMHB4OwogIH0KfQovKgogKiBSZW1vdmUgbWFyZ2luIGZyb20gYWRqYWNlbnQgZWxlbWVudAogKi8KLnVrLW9mZmNhbnZhcy1jbG9zZTpmaXJzdC1jaGlsZCArICogewogIG1hcmdpbi10b3A6IDA7Cn0KLyogT3ZlcmxheQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogT3ZlcmxheSB0aGUgd2hvbGUgcGFnZS4gTmVlZGVkIGZvciB0aGUgYDo6YmVmb3JlYAogKiAxLiBVc2luZyBgMTAwdndgIHNvIG5vIG1vZGlmaWNhdGlvbiBpcyBuZWVkZWQgd2hlbiBvZmYtY2FudmFzIGlzIGZsaXBwZWQKICogMi4gQWxsb3cgZm9yIGNsb3Npbmcgd2l0aCBzd2lwZSBnZXN0dXJlIG9uIGRldmljZXMgd2l0aCBwb2ludGVyIGV2ZW50cy4KICovCi51ay1vZmZjYW52YXMtb3ZlcmxheSB7CiAgLyogMSAqLwogIHdpZHRoOiAxMDB2dzsKICAvKiAyICovCiAgdG91Y2gtYWN0aW9uOiBub25lOwp9Ci8qCiAqIDEuIE1hc2sgdGhlIHdob2xlIHBhZ2UKICogMi4gRmFkZS1pbiB0cmFuc2l0aW9uCiAqLwoudWstb2ZmY2FudmFzLW92ZXJsYXk6OmJlZm9yZSB7CiAgLyogMSAqLwogIGNvbnRlbnQ6ICIiOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDA7CiAgYm90dG9tOiAwOwogIHJpZ2h0OiAwOwogIGxlZnQ6IDA7CiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjEpOwogIC8qIDIgKi8KICBvcGFjaXR5OiAwOwogIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgbGluZWFyOwp9Ci51ay1vZmZjYW52YXMtb3ZlcmxheS51ay1vcGVuOjpiZWZvcmUgewogIG9wYWNpdHk6IDE7Cn0KLyogUHJldmVudCBzY3JvbGxpbmcKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIFByZXZlbnQgaG9yaXpvbnRhbCBzY3JvbGxiYXIgd2hlbiB0aGUgY29udGVudCBpcyBzbGlkZS1vdXQKICogSGFzIHRvIGJlIG9uIHRoZSBgaHRtbGAgZWxlbWVudCB0b28gdG8gbWFrZSBpdCB3b3JrIG9uIHRoZSBgYm9keWAKICovCi51ay1vZmZjYW52YXMtcGFnZSwKLnVrLW9mZmNhbnZhcy1jb250YWluZXIgewogIG92ZXJmbG93LXg6IGhpZGRlbjsKfQovKiBDb250YWluZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIFByZXBhcmUgc2xpZGUtb3V0IGFuaW1hdGlvbiAoVXNlZCBpbiByZXZlYWwgYW5kIHB1c2ggbW9kZSkKICogVXNpbmcgYHBvc2l0aW9uOiBsZWZ0YCBpbnN0ZWFkIG9mIGB0cmFuc2Zvcm1gIGJlY2F1c2UgcG9zaXRpb24gYGZpeGVkYCBlbGVtZW50cyBsaWtlIHN0aWNreSBuYXZiYXJzCiAqIGxvc2UgdGhlaXIgZml4ZWQgc3RhdGUgYW5kIGJlaGF2ZXMgbGlrZSBgYWJzb2x1dGVgIHdpdGhpbiBhIHRyYW5zZm9ybWVkIGNvbnRhaW5lcgogKiAxLiBQcm92aWRlIGEgZml4ZWQgd2lkdGggYW5kIHByZXZlbnQgc2hyaW5raW5nCiAqLwoudWstb2ZmY2FudmFzLWNvbnRhaW5lciB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHJpZ2h0OiAwOwogIHRyYW5zaXRpb246IHJpZ2h0IDAuM3MgZWFzZS1vdXQ7CiAgLyogMSAqLwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgd2lkdGg6IDEwMCU7Cn0KLyoKICogQWN0aXZhdGUgc2xpZGUtb3V0IGFuaW1hdGlvbgogKi8KOm5vdCgudWstb2ZmY2FudmFzLWZsaXApLnVrLW9mZmNhbnZhcy1jb250YWluZXItYW5pbWF0aW9uIHsKICByaWdodDogMjcwcHg7Cn0KLnVrLW9mZmNhbnZhcy1mbGlwLnVrLW9mZmNhbnZhcy1jb250YWluZXItYW5pbWF0aW9uIHsKICByaWdodDogLTI3MHB4Owp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICA6bm90KC51ay1vZmZjYW52YXMtZmxpcCkudWstb2ZmY2FudmFzLWNvbnRhaW5lci1hbmltYXRpb24gewogICAgcmlnaHQ6IDM1MHB4OwogIH0KICAudWstb2ZmY2FudmFzLWZsaXAudWstb2ZmY2FudmFzLWNvbnRhaW5lci1hbmltYXRpb24gewogICAgcmlnaHQ6IC0zNTBweDsKICB9Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogU3dpdGNoZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIFJlc2V0IGxpc3QKICovCi51ay1zd2l0Y2hlciB7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7CiAgbGlzdC1zdHlsZTogbm9uZTsKfQovKiBJdGVtcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogSGlkZSBub3QgYWN0aXZlIGl0ZW1zCiAqLwoudWstc3dpdGNoZXIgPiA6bm90KC51ay1hY3RpdmUpIHsKICBkaXNwbGF5OiBub25lOwp9Ci8qCiAqIFJlbW92ZSBtYXJnaW4gZnJvbSB0aGUgbGFzdC1jaGlsZAogKi8KLnVrLXN3aXRjaGVyID4gKiA+IDpsYXN0LWNoaWxkIHsKICBtYXJnaW4tYm90dG9tOiAwOwp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IExlYWRlcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWxlYWRlciB7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQovKgogKiAxLiBQbGFjZSBlbGVtZW50IGluIHRleHQgZmxvdwogKiAyLiBOZXZlciBicmVhayBpbnRvIGEgbmV3IGxpbmUKICogMy4gR2V0IGEgc3RyaW5nIGJhY2sgd2l0aCBhcyBtYW55IHJlcGVhdGluZyBjaGFyYWN0ZXJzIHRvIGZpbGwgdGhlIGNvbnRhaW5lcgogKiA0LiBQcmV2ZW50IHdyYXBwaW5nLiBPdmVyZmxvd2luZyBjaGFyYWN0ZXJzIHdpbGwgYmUgY2xpcHBlZCBieSB0aGUgY29udGFpbmVyCiAqLwoudWstbGVhZGVyLWZpbGw6OmFmdGVyIHsKICAvKiAxICovCiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIG1hcmdpbi1yaWdodDogMTVweDsKICAvKiAyICovCiAgd2lkdGg6IDA7CiAgLyogMyAqLwogIGNvbnRlbnQ6IGF0dHIoZGF0YS1maWxsKTsKICAvKiA0ICovCiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQovKgogKiBIaWRlIGlmIG1lZGlhIGRvZXMgbm90IG1hdGNoCiAqLwoudWstbGVhZGVyLWZpbGwudWstbGVhZGVyLWhpZGU6OmFmdGVyIHsKICBkaXNwbGF5OiBub25lOwp9Ci8qCiAqIFBhc3MgZmlsbCBjaGFyYWN0ZXIgdG8gSlMKICovCjpyb290IHsKICAtLXVrLWxlYWRlci1maWxsLWNvbnRlbnQ6IC47Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogTm90aWZpY2F0aW9uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBTZXQgcG9zaXRpb24KICogMi4gRGltZW5zaW9ucwogKi8KLnVrLW5vdGlmaWNhdGlvbiB7CiAgLyogMSAqLwogIHBvc2l0aW9uOiBmaXhlZDsKICB0b3A6IDEwcHg7CiAgcmlnaHQ6IDEwcHg7CiAgei1pbmRleDogMTA0MDsKICAvKiAyICovCiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB3aWR0aDogMzUwcHg7Cn0KLyogUG9zaXRpb24gbW9kaWZpZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1ub3RpZmljYXRpb24tdG9wLWxlZnQsCi51ay1ub3RpZmljYXRpb24tYm90dG9tLWxlZnQgewogIHJpZ2h0OiBhdXRvOwogIGxlZnQ6IDEwcHg7Cn0KLnVrLW5vdGlmaWNhdGlvbi10b3AtY2VudGVyLAoudWstbm90aWZpY2F0aW9uLWJvdHRvbS1jZW50ZXIgewogIHJpZ2h0OiA1MCU7CiAgbWFyZ2luLXJpZ2h0OiAtMTc1cHg7Cn0KLnVrLW5vdGlmaWNhdGlvbi1ib3R0b20tcmlnaHQsCi51ay1ub3RpZmljYXRpb24tYm90dG9tLWxlZnQsCi51ay1ub3RpZmljYXRpb24tYm90dG9tLWNlbnRlciB7CiAgdG9wOiBhdXRvOwogIGJvdHRvbTogMTBweDsKfQovKiBSZXNwb25zaXZlbmVzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBQaG9uZXMgcG9ydHJhaXQgYW5kIHNtYWxsZXIgKi8KQG1lZGlhIChtYXgtd2lkdGg6IDYzOXB4KSB7CiAgLnVrLW5vdGlmaWNhdGlvbiB7CiAgICByaWdodDogMTBweDsKICAgIGxlZnQ6IDEwcHg7CiAgICB3aWR0aDogYXV0bzsKICAgIG1hcmdpbjogMDsKICB9Cn0KLyogTWVzc2FnZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstbm90aWZpY2F0aW9uLW1lc3NhZ2UgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBwYWRkaW5nOiAxNXB4OwogIGJhY2tncm91bmQ6ICNmOGY4Zjg7CiAgY29sb3I6ICM2NjY7CiAgZm9udC1zaXplOiAxLjI1cmVtOwogIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgY3Vyc29yOiBwb2ludGVyOwp9CiogKyAudWstbm90aWZpY2F0aW9uLW1lc3NhZ2UgewogIG1hcmdpbi10b3A6IDEwcHg7Cn0KLyogQ2xvc2UKICogQWRvcHRzIGB1ay1jbG9zZWAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1ub3RpZmljYXRpb24tY2xvc2UgewogIGRpc3BsYXk6IG5vbmU7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMjBweDsKICBsZWZ0OiAxNXB4Owp9Ci51ay1ub3RpZmljYXRpb24tbWVzc2FnZTpob3ZlciAudWstbm90aWZpY2F0aW9uLWNsb3NlIHsKICBkaXNwbGF5OiBibG9jazsKfQovKiBTdHlsZSBtb2RpZmllcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIFByaW1hcnkKICovCi51ay1ub3RpZmljYXRpb24tbWVzc2FnZS1wcmltYXJ5IHsKICBjb2xvcjogIzFlODdmMDsKfQovKgogKiBTdWNjZXNzCiAqLwoudWstbm90aWZpY2F0aW9uLW1lc3NhZ2Utc3VjY2VzcyB7CiAgY29sb3I6ICMzMmQyOTY7Cn0KLyoKICogV2FybmluZwogKi8KLnVrLW5vdGlmaWNhdGlvbi1tZXNzYWdlLXdhcm5pbmcgewogIGNvbG9yOiAjZmFhMDVhOwp9Ci8qCiAqIERhbmdlcgogKi8KLnVrLW5vdGlmaWNhdGlvbi1tZXNzYWdlLWRhbmdlciB7CiAgY29sb3I6ICNmMDUwNmU7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogVG9vbHRpcAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gSGlkZSBieSBkZWZhdWx0CiAqIDIuIFBvc2l0aW9uCiAqIDMuIFJlbW92ZSB0b29sdGlwIGZyb20gZG9jdW1lbnQgZmxvdyB0byBrZWVwIHRoZSBVSWtpdCBjb250YWluZXIgZnJvbSBjaGFuZ2luZyBpdHMgc2l6ZSB3aGVuIGluamVjdGVkIGludG8gdGhlIGRvY3VtZW50IGluaXRpYWxseQogKiA0LiBEaW1lbnNpb25zCiAqIDUuIFN0eWxlCiAqLwoudWstdG9vbHRpcCB7CiAgLyogMSAqLwogIGRpc3BsYXk6IG5vbmU7CiAgLyogMiAqLwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiAxMDMwOwogIC0tdWstcG9zaXRpb24tb2Zmc2V0OiAxMHB4OwogIC0tdWstcG9zaXRpb24tdmlld3BvcnQtb2Zmc2V0OiAxMDsKICAvKiAzICovCiAgdG9wOiAwOwogIC8qIDQgKi8KICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIG1heC13aWR0aDogMjAwcHg7CiAgcGFkZGluZzogM3B4IDZweDsKICAvKiA1ICovCiAgYmFja2dyb3VuZDogIzY2NjsKICBib3JkZXItcmFkaXVzOiAycHg7CiAgY29sb3I6ICNmZmY7CiAgZm9udC1zaXplOiAxMnB4Owp9Ci8qIFNob3cgKi8KLnVrLXRvb2x0aXAudWstYWN0aXZlIHsKICBkaXNwbGF5OiBibG9jazsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBTb3J0YWJsZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXNvcnRhYmxlIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIHRoZSBsYXN0LWNoaWxkCiAqLwoudWstc29ydGFibGUgPiA6bGFzdC1jaGlsZCB7CiAgbWFyZ2luLWJvdHRvbTogMDsKfQovKiBEcmFnCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstc29ydGFibGUtZHJhZyB7CiAgcG9zaXRpb246IGZpeGVkICFpbXBvcnRhbnQ7CiAgei1pbmRleDogMTA1MCAhaW1wb3J0YW50OwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Ci8qIFBsYWNlaG9sZGVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstc29ydGFibGUtcGxhY2Vob2xkZXIgewogIG9wYWNpdHk6IDA7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KLyogRW1wdHkgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1zb3J0YWJsZS1lbXB0eSB7CiAgbWluLWhlaWdodDogNTBweDsKfQovKiBIYW5kbGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIEhvdmVyICovCi51ay1zb3J0YWJsZS1oYW5kbGU6aG92ZXIgewogIGN1cnNvcjogbW92ZTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBDb3VudGRvd24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIEl0ZW0KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIE51bWJlcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gTWFrZSBudW1iZXJzIGFsbCBvZiB0aGUgc2FtZSBzaXplIHRvIHByZXZlbnQganVtcGluZy4gTXVzdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIGZvbnQuCiAqIDIuIFN0eWxlCiAqLwoudWstY291bnRkb3duLW51bWJlciB7CiAgLyogMSAqLwogIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7CiAgLyogMiAqLwogIGZvbnQtc2l6ZTogMnJlbTsKICBsaW5lLWhlaWdodDogMC44Owp9Ci8qIFBob25lIGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgewogIC51ay1jb3VudGRvd24tbnVtYmVyIHsKICAgIGZvbnQtc2l6ZTogNHJlbTsKICB9Cn0KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogIC51ay1jb3VudGRvd24tbnVtYmVyIHsKICAgIGZvbnQtc2l6ZTogNnJlbTsKICB9Cn0KLyogU2VwYXJhdG9yCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstY291bnRkb3duLXNlcGFyYXRvciB7CiAgZm9udC1zaXplOiAxcmVtOwogIGxpbmUtaGVpZ2h0OiAxLjY7Cn0KLyogUGhvbmUgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7CiAgLnVrLWNvdW50ZG93bi1zZXBhcmF0b3IgewogICAgZm9udC1zaXplOiAycmVtOwogIH0KfQovKiBUYWJsZXQgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7CiAgLnVrLWNvdW50ZG93bi1zZXBhcmF0b3IgewogICAgZm9udC1zaXplOiAzcmVtOwogIH0KfQovKiBMYWJlbAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogR3JpZAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gQWxsb3cgY2VsbHMgdG8gd3JhcCBpbnRvIHRoZSBuZXh0IGxpbmUKICogMi4gUmVzZXQgbGlzdAogKi8KLnVrLWdyaWQgewogIGRpc3BsYXk6IGZsZXg7CiAgLyogMSAqLwogIGZsZXgtd3JhcDogd3JhcDsKICAvKiAyICovCiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7CiAgbGlzdC1zdHlsZTogbm9uZTsKfQovKgogKiBHcmlkIGNlbGwKICogTm90ZTogU3BhY2UgaXMgYWxsb2NhdGVkIHNvbGVseSBiYXNlZCBvbiBjb250ZW50IGRpbWVuc2lvbnMsIGJ1dCBzaHJpbmtzOiAwIDEgYXV0bwogKiBSZXNldCBtYXJnaW4gZm9yIGUuZy4gcGFyYWdyYXBocwogKi8KLnVrLWdyaWQgPiAqIHsKICBtYXJnaW46IDA7Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIHRoZSBsYXN0LWNoaWxkCiAqLwoudWstZ3JpZCA+ICogPiA6bGFzdC1jaGlsZCB7CiAgbWFyZ2luLWJvdHRvbTogMDsKfQovKiBHdXR0ZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIERlZmF1bHQKICovCi8qIEhvcml6b250YWwgKi8KLnVrLWdyaWQgewogIG1hcmdpbi1yaWdodDogLTMwcHg7Cn0KLnVrLWdyaWQgPiAqIHsKICBwYWRkaW5nLXJpZ2h0OiAzMHB4Owp9Ci8qIFZlcnRpY2FsICovCi51ay1ncmlkICsgLnVrLWdyaWQsCi51ay1ncmlkID4gLnVrLWdyaWQtbWFyZ2luLAoqICsgLnVrLWdyaWQtbWFyZ2luIHsKICBtYXJnaW4tdG9wOiAzMHB4Owp9Ci8qIERlc2t0b3AgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CiAgLyogSG9yaXpvbnRhbCAqLwogIC51ay1ncmlkIHsKICAgIG1hcmdpbi1yaWdodDogLTQwcHg7CiAgfQogIC51ay1ncmlkID4gKiB7CiAgICBwYWRkaW5nLXJpZ2h0OiA0MHB4OwogIH0KICAvKiBWZXJ0aWNhbCAqLwogIC51ay1ncmlkICsgLnVrLWdyaWQsCiAgLnVrLWdyaWQgPiAudWstZ3JpZC1tYXJnaW4sCiAgKiArIC51ay1ncmlkLW1hcmdpbiB7CiAgICBtYXJnaW4tdG9wOiA0MHB4OwogIH0KfQovKgogKiBTbWFsbAogKi8KLyogSG9yaXpvbnRhbCAqLwoudWstZ3JpZC1zbWFsbCwKLnVrLWdyaWQtY29sdW1uLXNtYWxsIHsKICBtYXJnaW4tcmlnaHQ6IC0xNXB4Owp9Ci51ay1ncmlkLXNtYWxsID4gKiwKLnVrLWdyaWQtY29sdW1uLXNtYWxsID4gKiB7CiAgcGFkZGluZy1yaWdodDogMTVweDsKfQovKiBWZXJ0aWNhbCAqLwoudWstZ3JpZCArIC51ay1ncmlkLXNtYWxsLAoudWstZ3JpZCArIC51ay1ncmlkLXJvdy1zbWFsbCwKLnVrLWdyaWQtc21hbGwgPiAudWstZ3JpZC1tYXJnaW4sCi51ay1ncmlkLXJvdy1zbWFsbCA+IC51ay1ncmlkLW1hcmdpbiwKKiArIC51ay1ncmlkLW1hcmdpbi1zbWFsbCB7CiAgbWFyZ2luLXRvcDogMTVweDsKfQovKgogKiBNZWRpdW0KICovCi8qIEhvcml6b250YWwgKi8KLnVrLWdyaWQtbWVkaXVtLAoudWstZ3JpZC1jb2x1bW4tbWVkaXVtIHsKICBtYXJnaW4tcmlnaHQ6IC0zMHB4Owp9Ci51ay1ncmlkLW1lZGl1bSA+ICosCi51ay1ncmlkLWNvbHVtbi1tZWRpdW0gPiAqIHsKICBwYWRkaW5nLXJpZ2h0OiAzMHB4Owp9Ci8qIFZlcnRpY2FsICovCi51ay1ncmlkICsgLnVrLWdyaWQtbWVkaXVtLAoudWstZ3JpZCArIC51ay1ncmlkLXJvdy1tZWRpdW0sCi51ay1ncmlkLW1lZGl1bSA+IC51ay1ncmlkLW1hcmdpbiwKLnVrLWdyaWQtcm93LW1lZGl1bSA+IC51ay1ncmlkLW1hcmdpbiwKKiArIC51ay1ncmlkLW1hcmdpbi1tZWRpdW0gewogIG1hcmdpbi10b3A6IDMwcHg7Cn0KLyoKICogTGFyZ2UKICovCi8qIEhvcml6b250YWwgKi8KLnVrLWdyaWQtbGFyZ2UsCi51ay1ncmlkLWNvbHVtbi1sYXJnZSB7CiAgbWFyZ2luLXJpZ2h0OiAtNDBweDsKfQoudWstZ3JpZC1sYXJnZSA+ICosCi51ay1ncmlkLWNvbHVtbi1sYXJnZSA+ICogewogIHBhZGRpbmctcmlnaHQ6IDQwcHg7Cn0KLyogVmVydGljYWwgKi8KLnVrLWdyaWQgKyAudWstZ3JpZC1sYXJnZSwKLnVrLWdyaWQgKyAudWstZ3JpZC1yb3ctbGFyZ2UsCi51ay1ncmlkLWxhcmdlID4gLnVrLWdyaWQtbWFyZ2luLAoudWstZ3JpZC1yb3ctbGFyZ2UgPiAudWstZ3JpZC1tYXJnaW4sCiogKyAudWstZ3JpZC1tYXJnaW4tbGFyZ2UgewogIG1hcmdpbi10b3A6IDQwcHg7Cn0KLyogRGVza3RvcCBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHsKICAvKiBIb3Jpem9udGFsICovCiAgLnVrLWdyaWQtbGFyZ2UsCiAgLnVrLWdyaWQtY29sdW1uLWxhcmdlIHsKICAgIG1hcmdpbi1yaWdodDogLTcwcHg7CiAgfQogIC51ay1ncmlkLWxhcmdlID4gKiwKICAudWstZ3JpZC1jb2x1bW4tbGFyZ2UgPiAqIHsKICAgIHBhZGRpbmctcmlnaHQ6IDcwcHg7CiAgfQogIC8qIFZlcnRpY2FsICovCiAgLnVrLWdyaWQgKyAudWstZ3JpZC1sYXJnZSwKICAudWstZ3JpZCArIC51ay1ncmlkLXJvdy1sYXJnZSwKICAudWstZ3JpZC1sYXJnZSA+IC51ay1ncmlkLW1hcmdpbiwKICAudWstZ3JpZC1yb3ctbGFyZ2UgPiAudWstZ3JpZC1tYXJnaW4sCiAgKiArIC51ay1ncmlkLW1hcmdpbi1sYXJnZSB7CiAgICBtYXJnaW4tdG9wOiA3MHB4OwogIH0KfQovKgogKiBDb2xsYXBzZQogKi8KLyogSG9yaXpvbnRhbCAqLwoudWstZ3JpZC1jb2xsYXBzZSwKLnVrLWdyaWQtY29sdW1uLWNvbGxhcHNlIHsKICBtYXJnaW4tcmlnaHQ6IDA7Cn0KLnVrLWdyaWQtY29sbGFwc2UgPiAqLAoudWstZ3JpZC1jb2x1bW4tY29sbGFwc2UgPiAqIHsKICBwYWRkaW5nLXJpZ2h0OiAwOwp9Ci8qIFZlcnRpY2FsICovCi51ay1ncmlkICsgLnVrLWdyaWQtY29sbGFwc2UsCi51ay1ncmlkICsgLnVrLWdyaWQtcm93LWNvbGxhcHNlLAoudWstZ3JpZC1jb2xsYXBzZSA+IC51ay1ncmlkLW1hcmdpbiwKLnVrLWdyaWQtcm93LWNvbGxhcHNlID4gLnVrLWdyaWQtbWFyZ2luIHsKICBtYXJnaW4tdG9wOiAwOwp9Ci8qIERpdmlkZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1ncmlkLWRpdmlkZXIgPiAqIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KLnVrLWdyaWQtZGl2aWRlciA+IDpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSB7CiAgY29udGVudDogIiI7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsKICBib3R0b206IDA7CiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2U1ZTVlNTsKfQovKiBWZXJ0aWNhbCAqLwoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSB7CiAgY29udGVudDogIiI7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiAwOwogIGxlZnQ6IDA7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNWU1ZTU7Cn0KLyoKICogRGVmYXVsdAogKi8KLyogSG9yaXpvbnRhbCAqLwoudWstZ3JpZC1kaXZpZGVyIHsKICBtYXJnaW4tcmlnaHQ6IC02MHB4Owp9Ci51ay1ncmlkLWRpdmlkZXIgPiAqIHsKICBwYWRkaW5nLXJpZ2h0OiA2MHB4Owp9Ci51ay1ncmlkLWRpdmlkZXIgPiA6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUgewogIHJpZ2h0OiAzMHB4Owp9Ci8qIFZlcnRpY2FsICovCi51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbiB7CiAgbWFyZ2luLXRvcDogNjBweDsKfQoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSB7CiAgdG9wOiAtMzBweDsKICByaWdodDogNjBweDsKfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC8qIEhvcml6b250YWwgKi8KICAudWstZ3JpZC1kaXZpZGVyIHsKICAgIG1hcmdpbi1yaWdodDogLTgwcHg7CiAgfQogIC51ay1ncmlkLWRpdmlkZXIgPiAqIHsKICAgIHBhZGRpbmctcmlnaHQ6IDgwcHg7CiAgfQogIC51ay1ncmlkLWRpdmlkZXIgPiA6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUgewogICAgcmlnaHQ6IDQwcHg7CiAgfQogIC8qIFZlcnRpY2FsICovCiAgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXN0YWNrID4gLnVrLWdyaWQtbWFyZ2luIHsKICAgIG1hcmdpbi10b3A6IDgwcHg7CiAgfQogIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbjo6YmVmb3JlIHsKICAgIHRvcDogLTQwcHg7CiAgICByaWdodDogODBweDsKICB9Cn0KLyoKICogU21hbGwKICovCi8qIEhvcml6b250YWwgKi8KLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXNtYWxsLAoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLXNtYWxsIHsKICBtYXJnaW4tcmlnaHQ6IC0zMHB4Owp9Ci51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zbWFsbCA+ICosCi51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tc21hbGwgPiAqIHsKICBwYWRkaW5nLXJpZ2h0OiAzMHB4Owp9Ci51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zbWFsbCA+IDpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1zbWFsbCA+IDpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSB7CiAgcmlnaHQ6IDE1cHg7Cn0KLyogVmVydGljYWwgKi8KLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXNtYWxsLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW4sCi51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1yb3ctc21hbGwudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbiB7CiAgbWFyZ2luLXRvcDogMzBweDsKfQoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc21hbGwudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbjo6YmVmb3JlIHsKICB0b3A6IC0xNXB4OwogIHJpZ2h0OiAzMHB4Owp9Ci51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1yb3ctc21hbGwudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbjo6YmVmb3JlIHsKICB0b3A6IC0xNXB4Owp9Ci51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tc21hbGwudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbjo6YmVmb3JlIHsKICByaWdodDogMzBweDsKfQovKgogKiBNZWRpdW0KICovCi8qIEhvcml6b250YWwgKi8KLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLW1lZGl1bSwKLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1tZWRpdW0gewogIG1hcmdpbi1yaWdodDogLTYwcHg7Cn0KLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLW1lZGl1bSA+ICosCi51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tbWVkaXVtID4gKiB7CiAgcGFkZGluZy1yaWdodDogNjBweDsKfQoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbWVkaXVtID4gOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLW1lZGl1bSA+IDpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSB7CiAgcmlnaHQ6IDMwcHg7Cn0KLyogVmVydGljYWwgKi8KLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLW1lZGl1bS51ay1ncmlkLXN0YWNrID4gLnVrLWdyaWQtbWFyZ2luLAoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtcm93LW1lZGl1bS51ay1ncmlkLXN0YWNrID4gLnVrLWdyaWQtbWFyZ2luIHsKICBtYXJnaW4tdG9wOiA2MHB4Owp9Ci51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1tZWRpdW0udWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbjo6YmVmb3JlIHsKICB0b3A6IC0zMHB4OwogIHJpZ2h0OiA2MHB4Owp9Ci51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1yb3ctbWVkaXVtLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSB7CiAgdG9wOiAtMzBweDsKfQoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLW1lZGl1bS51ay1ncmlkLXN0YWNrID4gLnVrLWdyaWQtbWFyZ2luOjpiZWZvcmUgewogIHJpZ2h0OiA2MHB4Owp9Ci8qCiAqIExhcmdlCiAqLwovKiBIb3Jpem9udGFsICovCi51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZSwKLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1sYXJnZSB7CiAgbWFyZ2luLXJpZ2h0OiAtODBweDsKfQoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbGFyZ2UgPiAqLAoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLWxhcmdlID4gKiB7CiAgcGFkZGluZy1yaWdodDogODBweDsKfQoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbGFyZ2UgPiA6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsCi51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tbGFyZ2UgPiA6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUgewogIHJpZ2h0OiA0MHB4Owp9Ci8qIFZlcnRpY2FsICovCi51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZS51ay1ncmlkLXN0YWNrID4gLnVrLWdyaWQtbWFyZ2luLAoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtcm93LWxhcmdlLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW4gewogIG1hcmdpbi10b3A6IDgwcHg7Cn0KLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWxhcmdlLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSB7CiAgdG9wOiAtNDBweDsKICByaWdodDogODBweDsKfQoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtcm93LWxhcmdlLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSB7CiAgdG9wOiAtNDBweDsKfQoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLWxhcmdlLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSB7CiAgcmlnaHQ6IDgwcHg7Cn0KLyogRGVza3RvcCBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHsKICAvKiBIb3Jpem9udGFsICovCiAgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWxhcmdlLAogIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tbGFyZ2UgewogICAgbWFyZ2luLXJpZ2h0OiAtMTQwcHg7CiAgfQogIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZSA+ICosCiAgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1sYXJnZSA+ICogewogICAgcGFkZGluZy1yaWdodDogMTQwcHg7CiAgfQogIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZSA+IDpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKICAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLWxhcmdlID4gOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlIHsKICAgIHJpZ2h0OiA3MHB4OwogIH0KICAvKiBWZXJ0aWNhbCAqLwogIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZS51ay1ncmlkLXN0YWNrID4gLnVrLWdyaWQtbWFyZ2luLAogIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1yb3ctbGFyZ2UudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbiB7CiAgICBtYXJnaW4tdG9wOiAxNDBweDsKICB9CiAgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWxhcmdlLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSB7CiAgICB0b3A6IC03MHB4OwogICAgcmlnaHQ6IDE0MHB4OwogIH0KICAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtcm93LWxhcmdlLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSB7CiAgICB0b3A6IC03MHB4OwogIH0KICAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLWxhcmdlLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSB7CiAgICByaWdodDogMTQwcHg7CiAgfQp9Ci8qIE1hdGNoIGNoaWxkIG9mIGEgZ3JpZCBjZWxsCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBCZWhhdmUgbGlrZSBhIGJsb2NrIGVsZW1lbnQKICogMS4gV3JhcCBpbnRvIHRoZSBuZXh0IGxpbmUKICogMi4gVGFrZSB0aGUgZnVsbCB3aWR0aCwgYXQgbGVhc3QgMTAwJS4gT25seSBpZiBubyBjbGFzcyBmcm9tIHRoZSBXaWR0aCBjb21wb25lbnQgaXMgc2V0LgogKiAzLiBFeHBhbmQgd2lkdGggZXZlbiBpZiBsYXJnZXIgdGhhbiAxMDAlLCBlLmcuIGJlY2F1c2Ugb2YgbmVnYXRpdmUgbWFyZ2luIChOZWVkZWQgZm9yIG5lc3RlZCBncmlkcykKICovCi51ay1ncmlkLW1hdGNoID4gKiwKLnVrLWdyaWQtaXRlbS1tYXRjaCB7CiAgZGlzcGxheTogZmxleDsKICAvKiAxICovCiAgZmxleC13cmFwOiB3cmFwOwp9Ci51ay1ncmlkLW1hdGNoID4gKiA+IDpub3QoW2NsYXNzKj0ndWstd2lkdGgnXSksCi51ay1ncmlkLWl0ZW0tbWF0Y2ggPiA6bm90KFtjbGFzcyo9J3VrLXdpZHRoJ10pIHsKICAvKiAyICovCiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB3aWR0aDogMTAwJTsKICAvKiAzICovCiAgZmxleDogYXV0bzsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBOYXYKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIFJlc2V0CiAqLwoudWstbmF2LAoudWstbmF2IHVsIHsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKICBsaXN0LXN0eWxlOiBub25lOwp9Ci8qCiogMS4gQ2VudGVyIGNvbnRlbnQgdmVydGljYWxseSwgZS5nLiBhbiBpY29uCiogMi4gSW1pdGF0ZSB3aGl0ZSBzcGFjZSBnYXAgd2hlbiB1c2luZyBmbGV4Ym94CiogMy4gUmVzZXQgbGluawogKi8KLnVrLW5hdiBsaSA+IGEgewogIC8qIDEgKi8KICBkaXNwbGF5OiBmbGV4OwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgLyogMiAqLwogIGNvbHVtbi1nYXA6IDAuMjVlbTsKICAvKiAzKi8KICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KLyoKICogSXRlbXMKICogTXVzdCB0YXJnZXQgYGFgIGVsZW1lbnRzIHRvIGV4Y2x1ZGUgb3RoZXIgZWxlbWVudHMgKGUuZy4gbGlzdHMpCiAqLwoudWstbmF2ID4gbGkgPiBhIHsKICBwYWRkaW5nOiA1cHggMDsKfQovKiBTdWJsaXN0cwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogTGV2ZWwgMgogKiBgdWxgIG5lZWRlZCBmb3IgaGlnaGVyIHNwZWNpZmljaXR5IHRvIG92ZXJyaWRlIHBhZGRpbmcKICovCnVsLnVrLW5hdi1zdWIgewogIHBhZGRpbmc6IDVweCAxNXB4IDVweCAwOwp9Ci8qCiAqIExldmVsIDMgYW5kIGRlZXBlcgogKi8KLnVrLW5hdi1zdWIgdWwgewogIHBhZGRpbmctcmlnaHQ6IDE1cHg7Cn0KLyoKICogSXRlbXMKICovCi51ay1uYXYtc3ViIGEgewogIHBhZGRpbmc6IDJweCAwOwp9Ci8qIFBhcmVudCBpY29uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstbmF2LXBhcmVudC1pY29uIHsKICBtYXJnaW4tcmlnaHQ6IGF1dG87Cn0KLnVrLW5hdiA+IGxpID4gYVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0gLnVrLW5hdi1wYXJlbnQtaWNvbiB7CiAgdHJhbnNmb3JtOiByb3RhdGUoLTE4MGRlZyk7Cn0KLyogSGVhZGVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstbmF2LWhlYWRlciB7CiAgcGFkZGluZzogNXB4IDA7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICBmb250LXNpemU6IDAuODc1cmVtOwp9Ci51ay1uYXYtaGVhZGVyOm5vdCg6Zmlyc3QtY2hpbGQpIHsKICBtYXJnaW4tdG9wOiAyMHB4Owp9Ci8qIERpdmlkZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1uYXYgLnVrLW5hdi1kaXZpZGVyIHsKICBtYXJnaW46IDVweCAwOwp9Ci8qIERlZmF1bHQgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1uYXYtZGVmYXVsdCB7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKICBsaW5lLWhlaWdodDogMS41Owp9Ci8qCiAqIEl0ZW1zCiAqLwoudWstbmF2LWRlZmF1bHQgPiBsaSA+IGEgewogIGNvbG9yOiAjOTk5Owp9Ci8qIEhvdmVyICovCi51ay1uYXYtZGVmYXVsdCA+IGxpID4gYTpob3ZlciB7CiAgY29sb3I6ICM2NjY7Cn0KLyogQWN0aXZlICovCi51ay1uYXYtZGVmYXVsdCA+IGxpLnVrLWFjdGl2ZSA+IGEgewogIGNvbG9yOiAjMzMzOwp9Ci8qCiAqIFN1YnRpdGxlCiAqLwoudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWJ0aXRsZSB7CiAgZm9udC1zaXplOiAxMnB4Owp9Ci8qCiAqIEhlYWRlcgogKi8KLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyIHsKICBjb2xvcjogIzMzMzsKfQovKgogKiBEaXZpZGVyCiAqLwoudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyIHsKICBib3JkZXItdG9wOiAxcHggc29saWQgI2U1ZTVlNTsKfQovKgogKiBTdWJsaXN0cwogKi8KLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIHsKICBmb250LXNpemU6IDAuODc1cmVtOwogIGxpbmUtaGVpZ2h0OiAxLjU7Cn0KLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEgewogIGNvbG9yOiAjOTk5Owp9Ci51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVyIHsKICBjb2xvcjogIzY2NjsKfQoudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSB7CiAgY29sb3I6ICMzMzM7Cn0KLyogUHJpbWFyeSBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLW5hdi1wcmltYXJ5IHsKICBmb250LXNpemU6IDEuNXJlbTsKICBsaW5lLWhlaWdodDogMS41Owp9Ci8qCiAqIEl0ZW1zCiAqLwoudWstbmF2LXByaW1hcnkgPiBsaSA+IGEgewogIGNvbG9yOiAjOTk5Owp9Ci8qIEhvdmVyICovCi51ay1uYXYtcHJpbWFyeSA+IGxpID4gYTpob3ZlciB7CiAgY29sb3I6ICM2NjY7Cn0KLyogQWN0aXZlICovCi51ay1uYXYtcHJpbWFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEgewogIGNvbG9yOiAjMzMzOwp9Ci8qCiAqIFN1YnRpdGxlCiAqLwoudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWJ0aXRsZSB7CiAgZm9udC1zaXplOiAxLjI1cmVtOwp9Ci8qCiAqIEhlYWRlcgogKi8KLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtaGVhZGVyIHsKICBjb2xvcjogIzMzMzsKfQovKgogKiBEaXZpZGVyCiAqLwoudWstbmF2LXByaW1hcnkgLnVrLW5hdi1kaXZpZGVyIHsKICBib3JkZXItdG9wOiAxcHggc29saWQgI2U1ZTVlNTsKfQovKgogKiBTdWJsaXN0cwogKi8KLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIHsKICBmb250LXNpemU6IDEuMjVyZW07CiAgbGluZS1oZWlnaHQ6IDEuNTsKfQoudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYSB7CiAgY29sb3I6ICM5OTk7Cn0KLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIgewogIGNvbG9yOiAjNjY2Owp9Ci51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhIHsKICBjb2xvcjogIzMzMzsKfQovKiBTZWNvbmRhcnkgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1uYXYtc2Vjb25kYXJ5IHsKICBmb250LXNpemU6IDE2cHg7CiAgbGluZS1oZWlnaHQ6IDEuNTsKfQoudWstbmF2LXNlY29uZGFyeSA+IDpub3QoLnVrLW5hdi1kaXZpZGVyKSArIDpub3QoLnVrLW5hdi1oZWFkZXIsIC51ay1uYXYtZGl2aWRlcikgewogIG1hcmdpbi10b3A6IDA7Cn0KLyoKICogSXRlbXMKICovCi51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhIHsKICBjb2xvcjogIzMzMzsKICBwYWRkaW5nOiAxMHB4IDEwcHg7Cn0KLyogSG92ZXIgKi8KLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGE6aG92ZXIgewogIGNvbG9yOiAjMzMzOwogIGJhY2tncm91bmQtY29sb3I6ICNmOGY4Zjg7Cn0KLyogQWN0aXZlICovCi51ay1uYXYtc2Vjb25kYXJ5ID4gbGkudWstYWN0aXZlID4gYSB7CiAgY29sb3I6ICMzMzM7CiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsKfQovKgogKiBTdWJ0aXRsZQogKi8KLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWJ0aXRsZSB7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKICBjb2xvcjogIzk5OTsKfQovKiBIb3ZlciAqLwoudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYTpob3ZlciAudWstbmF2LXN1YnRpdGxlIHsKICBjb2xvcjogIzY2NjsKfQovKiBBY3RpdmUgKi8KLnVrLW5hdi1zZWNvbmRhcnkgPiBsaS51ay1hY3RpdmUgPiBhIC51ay1uYXYtc3VidGl0bGUgewogIGNvbG9yOiAjMzMzOwp9Ci8qCiAqIEhlYWRlcgogKi8KLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1oZWFkZXIgewogIGNvbG9yOiAjMzMzOwp9Ci8qCiAqIERpdmlkZXIKICovCi51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtZGl2aWRlciB7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNWU1ZTU7Cn0KLyoKICogU3VibGlzdHMKICovCi51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIHsKICBmb250LXNpemU6IDAuODc1cmVtOwogIGxpbmUtaGVpZ2h0OiAxLjU7Cn0KLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYSB7CiAgY29sb3I6ICM5OTk7Cn0KLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYTpob3ZlciB7CiAgY29sb3I6ICM2NjY7Cn0KLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSB7CiAgY29sb3I6ICMzMzM7Cn0KLyogQWxpZ25tZW50IG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBDZW50ZXIgaGVhZGVyCiAqIDIuIENlbnRlciBpdGVtcwogKi8KLyogMSAqLwoudWstbmF2LWNlbnRlciB7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9Ci8qIDIgKi8KLnVrLW5hdi1jZW50ZXIgbGkgPiBhIHsKICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKfQovKiBTdWJsaXN0cyAqLwoudWstbmF2LWNlbnRlciAudWstbmF2LXN1YiwKLnVrLW5hdi1jZW50ZXIgLnVrLW5hdi1zdWIgdWwgewogIHBhZGRpbmctcmlnaHQ6IDA7Cn0KLyogUGFyZW50IGljb24gICovCi51ay1uYXYtY2VudGVyIC51ay1uYXYtcGFyZW50LWljb24gewogIG1hcmdpbi1yaWdodDogNHB4Owp9Ci8qIFN0eWxlIG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBEaXZpZGVyCiAqIE5hbWluZyBpcyBpbiBwbHVyYWwgdG8gcHJldmVudCBjb25mbGljdHMgd2l0aCBkaXZpZGVyIHN1YiBvYmplY3QuCiAqLwoudWstbmF2LnVrLW5hdi1kaXZpZGVyID4gOm5vdCgudWstbmF2LWRpdmlkZXIpICsgOm5vdCgudWstbmF2LWhlYWRlciwgLnVrLW5hdi1kaXZpZGVyKSB7CiAgbWFyZ2luLXRvcDogNXB4OwogIHBhZGRpbmctdG9wOiA1cHg7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNWU1ZTU7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogTmF2YmFyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBDcmVhdGUgcG9zaXRpb24gY29udGV4dCB0byBjZW50ZXIgbmF2YmFyIGdyb3VwCiAqLwoudWstbmF2YmFyIHsKICBkaXNwbGF5OiBmbGV4OwogIC8qIDEgKi8KICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KLyogQ29udGFpbmVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstbmF2YmFyLWNvbnRhaW5lcjpub3QoLnVrLW5hdmJhci10cmFuc3BhcmVudCkgewogIGJhY2tncm91bmQ6ICNmOGY4Zjg7Cn0KLyogR3JvdXBzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBBbGlnbiBuYXZzIGFuZCBpdGVtcyB2ZXJ0aWNhbGx5IGlmIHRoZXkgaGF2ZSBhIGRpZmZlcmVudCBoZWlnaHQKICovCi51ay1uYXZiYXItcmlnaHQsCi51ay1uYXZiYXItbGVmdCwKW2NsYXNzKj0ndWstbmF2YmFyLWNlbnRlciddIHsKICBkaXNwbGF5OiBmbGV4OwogIGdhcDogMzBweDsKICAvKiAxICovCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQovKgogKiBIb3Jpem9udGFsIGFsaWdubWVudAogKiAxLiBDcmVhdGUgcG9zaXRpb24gY29udGV4dCBmb3IgY2VudGVyZWQgbmF2YmFyIHdpdGggc3ViIGdyb3VwcyAobGVmdC9yaWdodCkKICogMi4gRml4IHRleHQgd3JhcHBpbmcgaWYgY29udGVudCBpcyBsYXJnZXIgdGhhbiA1MCUgb2YgdGhlIGNvbnRhaW5lci4KICogMy4gTmVlZGVkIGZvciBkcm9wZG93bnMgYmVjYXVzZSBhIG5ldyBwb3NpdGlvbiBjb250ZXh0IGlzIGNyZWF0ZWQKICogICAgYHotaW5kZXhgIG11c3QgYmUgc21hbGxlciB0aGFuIG9mZi1jYW52YXMKICogNC4gQWxpZ24gc3ViIGdyb3VwcyBmb3IgY2VudGVyZWQgbmF2YmFyCiAqLwoudWstbmF2YmFyLWxlZnQgewogIG1hcmdpbi1yaWdodDogYXV0bzsKfQoudWstbmF2YmFyLWNlbnRlcjpvbmx5LWNoaWxkIHsKICBtYXJnaW4tcmlnaHQ6IGF1dG87CiAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgLyogMSAqLwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoudWstbmF2YmFyLWNlbnRlcjpub3QoOm9ubHktY2hpbGQpIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiA1MCU7CiAgcmlnaHQ6IDUwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MCUsIC01MCUpOwogIC8qIDIgKi8KICB3aWR0aDogbWF4LWNvbnRlbnQ7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAvKiAzICovCiAgei1pbmRleDogOTkwOwp9Ci8qIDQgKi8KLnVrLW5hdmJhci1jZW50ZXItcmlnaHQsCi51ay1uYXZiYXItY2VudGVyLWxlZnQgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDA7Cn0KLnVrLW5hdmJhci1jZW50ZXItcmlnaHQgewogIGxlZnQ6IGNhbGMoMTAwJSArIDMwcHgpOwp9Ci51ay1uYXZiYXItY2VudGVyLWxlZnQgewogIHJpZ2h0OiBjYWxjKDEwMCUgKyAzMHB4KTsKfQpbY2xhc3MqPSd1ay1uYXZiYXItY2VudGVyLSddIHsKICB3aWR0aDogbWF4LWNvbnRlbnQ7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQovKiBOYXYKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFJlc2V0IGxpc3QKICovCi51ay1uYXZiYXItbmF2IHsKICBkaXNwbGF5OiBmbGV4OwogIGdhcDogMzBweDsKICAvKiAxICovCiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7CiAgbGlzdC1zdHlsZTogbm9uZTsKfQovKgogKiBBbGxvdyBpdGVtcyB0byB3cmFwIGludG8gdGhlIG5leHQgbGluZQogKiBPbmx5IG5vdCBgYWJzb2x1dGVgIHBvc2l0aW9uZWQgZ3JvdXBzCiAqLwoudWstbmF2YmFyLXJpZ2h0LAoudWstbmF2YmFyLWxlZnQsCi51ay1uYXZiYXItY2VudGVyOm9ubHktY2hpbGQgewogIGZsZXgtd3JhcDogd3JhcDsKfQovKgogKiBJdGVtcwogKiAxLiBDZW50ZXIgY29udGVudCB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFsbHkKICogMi4gSW1pdGF0ZSB3aGl0ZSBzcGFjZSBnYXAgd2hlbiB1c2luZyBmbGV4Ym94CiAqIDMuIERpbWVuc2lvbnMKICogNC4gU3R5bGUKICogNS4gUmVxdWlyZWQgZm9yIGBhYAogKi8KLnVrLW5hdmJhci1uYXYgPiBsaSA+IGEsCi51ay1uYXZiYXItaXRlbSwKLnVrLW5hdmJhci10b2dnbGUgewogIC8qIDEgKi8KICBkaXNwbGF5OiBmbGV4OwogIGp1c3RpZnktY29udGVudDogY2VudGVyOwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgLyogMiAqLwogIGNvbHVtbi1nYXA6IDAuMjVlbTsKICAvKiAzICovCiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBtaW4taGVpZ2h0OiA4MHB4OwogIC8qIDQgKi8KICBmb250LXNpemU6IDAuODc1cmVtOwogIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsICJOb3RvIFNhbnMiLCBzYW5zLXNlcmlmLCAiQXBwbGUgQ29sb3IgRW1vamkiLCAiU2Vnb2UgVUkgRW1vamkiLCAiU2Vnb2UgVUkgU3ltYm9sIiwgIk5vdG8gQ29sb3IgRW1vamkiOwogIC8qIDUgKi8KICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KLyoKICogTmF2IGl0ZW1zCiAqLwoudWstbmF2YmFyLW5hdiA+IGxpID4gYSB7CiAgcGFkZGluZzogMCAwOwogIGNvbG9yOiAjOTk5OwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgdHJhbnNpdGlvbjogMC4xcyBlYXNlLWluLW91dDsKICB0cmFuc2l0aW9uLXByb3BlcnR5OiBjb2xvciwgYmFja2dyb3VuZC1jb2xvcjsKfQovKgogKiBIb3ZlcgogKiBBcHBseSBob3ZlciBzdHlsZSBhbHNvIGlmIGRyb3Bkb3duIGlzIG9wZW5lZAogKi8KLnVrLW5hdmJhci1uYXYgPiBsaTpob3ZlciA+IGEsCi51ay1uYXZiYXItbmF2ID4gbGkgPiBhW2FyaWEtZXhwYW5kZWQ9InRydWUiXSB7CiAgY29sb3I6ICM2NjY7Cn0KLyogT25DbGljayAqLwoudWstbmF2YmFyLW5hdiA+IGxpID4gYTphY3RpdmUgewogIGNvbG9yOiAjMzMzOwp9Ci8qIEFjdGl2ZSAqLwoudWstbmF2YmFyLW5hdiA+IGxpLnVrLWFjdGl2ZSA+IGEgewogIGNvbG9yOiAjMzMzOwp9Ci8qIFBhcmVudCBpY29uIG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstbmF2YmFyLXBhcmVudC1pY29uIHsKICBtYXJnaW4tcmlnaHQ6IDRweDsKfQoudWstbmF2YmFyLW5hdiA+IGxpID4gYVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0gLnVrLW5hdmJhci1wYXJlbnQtaWNvbiB7CiAgdHJhbnNmb3JtOiByb3RhdGUoLTE4MGRlZyk7Cn0KLyogSXRlbQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLW5hdmJhci1pdGVtIHsKICBwYWRkaW5nOiAwIDA7CiAgY29sb3I6ICM2NjY7Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIHRoZSBsYXN0LWNoaWxkCiAqLwoudWstbmF2YmFyLWl0ZW0gPiA6bGFzdC1jaGlsZCB7CiAgbWFyZ2luLWJvdHRvbTogMDsKfQovKiBUb2dnbGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1uYXZiYXItdG9nZ2xlIHsKICBwYWRkaW5nOiAwIDA7CiAgY29sb3I6ICM5OTk7Cn0KLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsCi51ay1uYXZiYXItdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9InRydWUiXSB7CiAgY29sb3I6ICM2NjY7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci8qCiAqIEljb24KICogQWRvcHRzIGB1ay1pY29uYAogKi8KLyogSG92ZXIgKi8KLyogU3VidGl0bGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1uYXZiYXItc3VidGl0bGUgewogIGZvbnQtc2l6ZTogMC44NzVyZW07Cn0KLyogSnVzdGlmeSBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLW5hdmJhci1qdXN0aWZ5IC51ay1uYXZiYXItcmlnaHQsCi51ay1uYXZiYXItanVzdGlmeSAudWstbmF2YmFyLWxlZnQsCi51ay1uYXZiYXItanVzdGlmeSAudWstbmF2YmFyLW5hdiwKLnVrLW5hdmJhci1qdXN0aWZ5IC51ay1uYXZiYXItbmF2ID4gbGksCi51ay1uYXZiYXItanVzdGlmeSAudWstbmF2YmFyLWl0ZW0sCi51ay1uYXZiYXItanVzdGlmeSAudWstbmF2YmFyLXRvZ2dsZSB7CiAgZmxleC1ncm93OiAxOwp9Ci8qIFN0eWxlIG1vZGlmaWVycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogRHJvcGRvd24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIEFkb3B0cyBgdWstZHJvcGRvd25gCiAqIDEuIEhpZGUgYnkgZGVmYXVsdAogKiAyLiBTZXQgcG9zaXRpb24KICogMy4gU2V0IGEgZGVmYXVsdCB3aWR0aAogKiA0LiBTdHlsZQogKi8KLnVrLW5hdmJhci1kcm9wZG93biB7CiAgLyogMSAqLwogIGRpc3BsYXk6IG5vbmU7CiAgLyogMiAqLwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiAxMDIwOwogIC0tdWstcG9zaXRpb24tb2Zmc2V0OiAxNXB4OwogIC0tdWstcG9zaXRpb24tc2hpZnQtb2Zmc2V0OiAwOwogIC0tdWstcG9zaXRpb24tdmlld3BvcnQtb2Zmc2V0OiAxNXB4OwogIC8qIDMgKi8KICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIHdpZHRoOiAyMDBweDsKICAvKiA0ICovCiAgcGFkZGluZzogMjVweDsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGNvbG9yOiAjNjY2OwogIGJveC1zaGFkb3c6IDAgNXB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKfQovKiBTaG93ICovCi51ay1uYXZiYXItZHJvcGRvd24udWstb3BlbiB7CiAgZGlzcGxheTogYmxvY2s7Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIHRoZSBsYXN0LWNoaWxkCiAqLwoudWstbmF2YmFyLWRyb3Bkb3duID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KLyoKICogR3JpZAogKiBBZG9wdHMgYHVrLWdyaWRgCiAqLwovKiBHdXR0ZXIgSG9yaXpvbnRhbCAqLwoudWstbmF2YmFyLWRyb3Bkb3duLWdyaWQgewogIG1hcmdpbi1yaWdodDogLTMwcHg7Cn0KLnVrLW5hdmJhci1kcm9wZG93bi1ncmlkID4gKiB7CiAgcGFkZGluZy1yaWdodDogMzBweDsKfQovKiBHdXR0ZXIgVmVydGljYWwgKi8KLnVrLW5hdmJhci1kcm9wZG93bi1ncmlkID4gLnVrLWdyaWQtbWFyZ2luIHsKICBtYXJnaW4tdG9wOiAzMHB4Owp9Ci8qIFN0YWNrICovCi51ay1uYXZiYXItZHJvcGRvd24tc3RhY2sgLnVrLW5hdmJhci1kcm9wZG93bi1ncmlkID4gKiB7CiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKfQovKgogKiBXaWR0aCBtb2RpZmllcgogKi8KLnVrLW5hdmJhci1kcm9wZG93bi13aWR0aC0yOm5vdCgudWstbmF2YmFyLWRyb3Bkb3duLXN0YWNrKSB7CiAgd2lkdGg6IDQwMHB4Owp9Ci51ay1uYXZiYXItZHJvcGRvd24td2lkdGgtMzpub3QoLnVrLW5hdmJhci1kcm9wZG93bi1zdGFjaykgewogIHdpZHRoOiA2MDBweDsKfQoudWstbmF2YmFyLWRyb3Bkb3duLXdpZHRoLTQ6bm90KC51ay1uYXZiYXItZHJvcGRvd24tc3RhY2spIHsKICB3aWR0aDogODAwcHg7Cn0KLnVrLW5hdmJhci1kcm9wZG93bi13aWR0aC01Om5vdCgudWstbmF2YmFyLWRyb3Bkb3duLXN0YWNrKSB7CiAgd2lkdGg6IDEwMDBweDsKfQovKgogKiBTaXplIG1vZGlmaWVyCiAqLwoudWstbmF2YmFyLWRyb3Bkb3duLWxhcmdlIHsKICAtLXVrLXBvc2l0aW9uLXNoaWZ0LW9mZnNldDogMDsKICBwYWRkaW5nOiA0MHB4Owp9Ci8qCiAqIERyb3BiYXIgbW9kaWZpZXIKICogMS4gUmVzZXQgZHJvcGRvd24gd2lkdGggdG8gcHJldmVudCB0byBlYXJseSBzaGlmdGluZwogKiAyLiBSZXNldCBzdHlsZQogKiAzLiBQYWRkaW5nCiAqLwoudWstbmF2YmFyLWRyb3Bkb3duLWRyb3BiYXIgewogIC8qIDEgKi8KICB3aWR0aDogYXV0bzsKICAvKiAyICovCiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgLyogMyAqLwogIHBhZGRpbmc6IDI1cHggMCAyNXB4IDA7CiAgLS11ay1wb3NpdGlvbi1vZmZzZXQ6IDA7CiAgLS11ay1wb3NpdGlvbi1zaGlmdC1vZmZzZXQ6IDA7CiAgLS11ay1wb3NpdGlvbi12aWV3cG9ydC1vZmZzZXQ6IDE1cHg7CiAgYm94LXNoYWRvdzogbm9uZTsKfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAudWstbmF2YmFyLWRyb3Bkb3duLWRyb3BiYXIgewogICAgLS11ay1wb3NpdGlvbi12aWV3cG9ydC1vZmZzZXQ6IDMwcHg7CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstbmF2YmFyLWRyb3Bkb3duLWRyb3BiYXIgewogICAgLS11ay1wb3NpdGlvbi12aWV3cG9ydC1vZmZzZXQ6IDQwcHg7CiAgfQp9Ci51ay1uYXZiYXItZHJvcGRvd24tZHJvcGJhci1sYXJnZSB7CiAgLS11ay1wb3NpdGlvbi1zaGlmdC1vZmZzZXQ6IDA7CiAgcGFkZGluZy10b3A6IDQwcHg7CiAgcGFkZGluZy1ib3R0b206IDQwcHg7Cn0KLyogRHJvcGRvd24gTmF2CiAqIEFkb3B0cyBgdWstbmF2YAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLW5hdmJhci1kcm9wZG93bi1uYXYgewogIGZvbnQtc2l6ZTogMC44NzVyZW07Cn0KLyoKICogSXRlbXMKICovCi51ay1uYXZiYXItZHJvcGRvd24tbmF2ID4gbGkgPiBhIHsKICBjb2xvcjogIzk5OTsKfQovKiBIb3ZlciAqLwoudWstbmF2YmFyLWRyb3Bkb3duLW5hdiA+IGxpID4gYTpob3ZlciB7CiAgY29sb3I6ICM2NjY7Cn0KLyogQWN0aXZlICovCi51ay1uYXZiYXItZHJvcGRvd24tbmF2ID4gbGkudWstYWN0aXZlID4gYSB7CiAgY29sb3I6ICMzMzM7Cn0KLyoKICogU3VidGl0bGUKICovCi51ay1uYXZiYXItZHJvcGRvd24tbmF2IC51ay1uYXYtc3VidGl0bGUgewogIGZvbnQtc2l6ZTogMTJweDsKfQovKgogKiBIZWFkZXIKICovCi51ay1uYXZiYXItZHJvcGRvd24tbmF2IC51ay1uYXYtaGVhZGVyIHsKICBjb2xvcjogIzMzMzsKfQovKgogKiBEaXZpZGVyCiAqLwoudWstbmF2YmFyLWRyb3Bkb3duLW5hdiAudWstbmF2LWRpdmlkZXIgewogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1Owp9Ci8qCiAqIFN1Ymxpc3RzCiAqLwoudWstbmF2YmFyLWRyb3Bkb3duLW5hdiAudWstbmF2LXN1YiBhIHsKICBjb2xvcjogIzk5OTsKfQoudWstbmF2YmFyLWRyb3Bkb3duLW5hdiAudWstbmF2LXN1YiBhOmhvdmVyIHsKICBjb2xvcjogIzY2NjsKfQoudWstbmF2YmFyLWRyb3Bkb3duLW5hdiAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhIHsKICBjb2xvcjogIzMzMzsKfQovKiBEcm9wYmFyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBSZXNldCBkcm9wYmFyCiAqIDIuIFdpZHRoCiAqLwoudWstbmF2YmFyLWRyb3BiYXIgewogIC8qIDEgKi8KICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogIHotaW5kZXg6IDk4MDsKICBwYWRkaW5nOiAwOwogIC8qIDIgKi8KICByaWdodDogMDsKICBsZWZ0OiAwOwp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IFN1Ym5hdgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gQWxsb3cgaXRlbXMgdG8gd3JhcCBpbnRvIHRoZSBuZXh0IGxpbmUKICogMi4gQ2VudGVyIGl0ZW1zIHZlcnRpY2FsbHkgaWYgdGhleSBoYXZlIGEgZGlmZmVyZW50IGhlaWdodAogKiAzLiBHdXR0ZXIKICogNC4gUmVzZXQgbGlzdAogKi8KLnVrLXN1Ym5hdiB7CiAgZGlzcGxheTogZmxleDsKICAvKiAxICovCiAgZmxleC13cmFwOiB3cmFwOwogIC8qIDIgKi8KICBhbGlnbi1pdGVtczogY2VudGVyOwogIC8qIDMgKi8KICBtYXJnaW4tcmlnaHQ6IC0yMHB4OwogIC8qIDQgKi8KICBwYWRkaW5nOiAwOwogIGxpc3Qtc3R5bGU6IG5vbmU7Cn0KLyoKICogMS4gU3BhY2UgaXMgYWxsb2NhdGVkIHNvbGVseSBiYXNlZCBvbiBjb250ZW50IGRpbWVuc2lvbnM6IDAgMCBhdXRvCiAqIDIuIEd1dHRlcgogKiAzLiBDcmVhdGUgcG9zaXRpb24gY29udGV4dCBmb3IgZHJvcGRvd25zCiAqLwoudWstc3VibmF2ID4gKiB7CiAgLyogMSAqLwogIGZsZXg6IG5vbmU7CiAgLyogMiAqLwogIHBhZGRpbmctcmlnaHQ6IDIwcHg7CiAgLyogMyAqLwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQovKiBJdGVtcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogSXRlbXMgbXVzdCB0YXJnZXQgYGFgIGVsZW1lbnRzIHRvIGV4Y2x1ZGUgb3RoZXIgZWxlbWVudHMgKGUuZy4gZHJvcGRvd25zKQogKiBVc2luZyBgOmZpcnN0LWNoaWxkYCBpbnN0ZWFkIG9mIGBhYCB0byBzdXBwb3J0IGBzcGFuYCBlbGVtZW50cyBmb3IgdGV4dAogKiAxLiBDZW50ZXIgY29udGVudCB2ZXJ0aWNhbGx5LCBlLmcuIGFuIGljb24KICogMi4gSW1pdGF0ZSB3aGl0ZSBzcGFjZSBnYXAgd2hlbiB1c2luZyBmbGV4Ym94CiAqIDMuIFN0eWxlCiAqLwoudWstc3VibmF2ID4gKiA+IDpmaXJzdC1jaGlsZCB7CiAgLyogMSAqLwogIGRpc3BsYXk6IGZsZXg7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAvKiAyICovCiAgY29sdW1uLWdhcDogMC4yNWVtOwogIC8qIDMgKi8KICBjb2xvcjogIzk5OTsKICBmb250LXNpemU6IDAuODc1cmVtOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgdHJhbnNpdGlvbjogMC4xcyBlYXNlLWluLW91dDsKICB0cmFuc2l0aW9uLXByb3BlcnR5OiBjb2xvciwgYmFja2dyb3VuZC1jb2xvcjsKfQovKiBIb3ZlciAqLwoudWstc3VibmF2ID4gKiA+IGE6aG92ZXIgewogIGNvbG9yOiAjNjY2OwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQovKiBBY3RpdmUgKi8KLnVrLXN1Ym5hdiA+IC51ay1hY3RpdmUgPiBhIHsKICBjb2xvcjogIzMzMzsKfQovKiBEaXZpZGVyIG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBTZXQgZ3V0dGVyCiAqLwoudWstc3VibmF2LWRpdmlkZXIgewogIG1hcmdpbi1yaWdodDogLTQxcHg7Cn0KLyoKICogQWxpZ24gaXRlbXMgYW5kIGRpdmlkZXIgdmVydGljYWxseQogKi8KLnVrLXN1Ym5hdi1kaXZpZGVyID4gKiB7CiAgZGlzcGxheTogZmxleDsKICBhbGlnbi1pdGVtczogY2VudGVyOwp9Ci8qCiAqIERpdmlkZXIKICogMS4gYG50aC1jaGlsZGAgbWFrZXMgaXQgYWxzbyB3b3JrIHdpdGhvdXQgSlMgaWYgaXQncyBvbmx5IG9uZSByb3cKICovCi51ay1zdWJuYXYtZGl2aWRlciA+IDo6YmVmb3JlIHsKICBjb250ZW50OiAiIjsKICBoZWlnaHQ6IDEuNWVtOwogIG1hcmdpbi1yaWdodDogMHB4OwogIG1hcmdpbi1sZWZ0OiAyMHB4OwogIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHRyYW5zcGFyZW50Owp9Ci8qIDEgKi8KLnVrLXN1Ym5hdi1kaXZpZGVyID4gOm50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlIHsKICBib3JkZXItcmlnaHQtY29sb3I6ICNlNWU1ZTU7Cn0KLyogUGlsbCBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXN1Ym5hdi1waWxsID4gKiA+IDpmaXJzdC1jaGlsZCB7CiAgcGFkZGluZzogNXB4IDEwcHg7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgY29sb3I6ICM5OTk7Cn0KLyogSG92ZXIgKi8KLnVrLXN1Ym5hdi1waWxsID4gKiA+IGE6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNmOGY4Zjg7CiAgY29sb3I6ICM2NjY7Cn0KLyogT25DbGljayAqLwoudWstc3VibmF2LXBpbGwgPiAqID4gYTphY3RpdmUgewogIGJhY2tncm91bmQtY29sb3I6ICNmOGY4Zjg7CiAgY29sb3I6ICM2NjY7Cn0KLyogQWN0aXZlICovCi51ay1zdWJuYXYtcGlsbCA+IC51ay1hY3RpdmUgPiBhIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWU4N2YwOwogIGNvbG9yOiAjZmZmOwp9Ci8qIERpc2FibGVkCiAqIFRoZSBzYW1lIGZvciBhbGwgc3R5bGUgbW9kaWZpZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstc3VibmF2ID4gLnVrLWRpc2FibGVkID4gYSB7CiAgY29sb3I6ICM5OTk7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogQnJlYWRjcnVtYgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogUmVzZXQgbGlzdAogKi8KLnVrLWJyZWFkY3J1bWIgewogIHBhZGRpbmc6IDA7CiAgbGlzdC1zdHlsZTogbm9uZTsKfQovKgogKiAxLiBEb2Vzbid0IGdlbmVyYXRlIGFueSBib3ggYW5kIHJlcGxhY2VkIGJ5IGNoaWxkIGJveGVzCiAqLwoudWstYnJlYWRjcnVtYiA+ICogewogIGRpc3BsYXk6IGNvbnRlbnRzOwp9Ci8qIEl0ZW1zCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstYnJlYWRjcnVtYiA+ICogPiAqIHsKICBmb250LXNpemU6IDAuODc1cmVtOwogIGNvbG9yOiAjOTk5Owp9Ci8qIEhvdmVyICovCi51ay1icmVhZGNydW1iID4gKiA+IDpob3ZlciB7CiAgY29sb3I6ICM2NjY7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci8qIERpc2FibGVkICovCi8qIEFjdGl2ZSAqLwoudWstYnJlYWRjcnVtYiA+IDpsYXN0LWNoaWxkID4gc3BhbiwKLnVrLWJyZWFkY3J1bWIgPiA6bGFzdC1jaGlsZCA+IGE6bm90KFtocmVmXSkgewogIGNvbG9yOiAjNjY2Owp9Ci8qCiAqIERpdmlkZXIKICogYG50aC1jaGlsZGAgbWFrZXMgaXQgYWxzbyB3b3JrIHdpdGhvdXQgSlMgaWYgaXQncyBvbmx5IG9uZSByb3cKICogMS4gUmVtb3ZlIHNwYWNlIGJldHdlZW4gaW5saW5lIGJsb2NrIGVsZW1lbnRzLgogKiAyLiBTdHlsZQogKi8KLnVrLWJyZWFkY3J1bWIgPiA6bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUgewogIGNvbnRlbnQ6ICIvIjsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgLyogMSAqLwogIG1hcmdpbjogMCBjYWxjKDIwcHggLSA0cHgpIDAgMjBweDsKICAvKiAyICovCiAgZm9udC1zaXplOiAwLjg3NXJlbTsKICBjb2xvcjogIzk5OTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBQYWdpbmF0aW9uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBBbGxvdyBpdGVtcyB0byB3cmFwIGludG8gdGhlIG5leHQgbGluZQogKiAyLiBHdXR0ZXIKICogMy4gUmVzZXQgbGlzdAogKi8KLnVrLXBhZ2luYXRpb24gewogIGRpc3BsYXk6IGZsZXg7CiAgLyogMSAqLwogIGZsZXgtd3JhcDogd3JhcDsKICAvKiAyICovCiAgbWFyZ2luLXJpZ2h0OiAwOwogIC8qIDMgKi8KICBwYWRkaW5nOiAwOwogIGxpc3Qtc3R5bGU6IG5vbmU7Cn0KLyoKICogMS4gU3BhY2UgaXMgYWxsb2NhdGVkIHNvbGVseSBiYXNlZCBvbiBjb250ZW50IGRpbWVuc2lvbnM6IDAgMCBhdXRvCiAqIDIuIEd1dHRlcgogKiAzLiBDcmVhdGUgcG9zaXRpb24gY29udGV4dCBmb3IgZHJvcGRvd25zCiAqLwoudWstcGFnaW5hdGlvbiA+ICogewogIC8qIDEgKi8KICBmbGV4OiBub25lOwogIC8qIDIgKi8KICBwYWRkaW5nLXJpZ2h0OiAwOwogIC8qIDMgKi8KICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KLyogSXRlbXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFByZXZlbnQgZ2FwIGlmIGNoaWxkIGVsZW1lbnQgaXMgYGlubGluZS1ibG9ja2AsIGUuZy4gYW4gaWNvbgogKiAyLiBTdHlsZQogKi8KLnVrLXBhZ2luYXRpb24gPiAqID4gKiB7CiAgLyogMSAqLwogIGRpc3BsYXk6IGJsb2NrOwogIC8qIDIgKi8KICBwYWRkaW5nOiA1cHggMTBweDsKICBjb2xvcjogIzk5OTsKICB0cmFuc2l0aW9uOiBjb2xvciAwLjFzIGVhc2UtaW4tb3V0Owp9Ci8qIEhvdmVyICovCi51ay1wYWdpbmF0aW9uID4gKiA+IDpob3ZlciB7CiAgY29sb3I6ICM2NjY7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci8qIEFjdGl2ZSAqLwoudWstcGFnaW5hdGlvbiA+IC51ay1hY3RpdmUgPiAqIHsKICBjb2xvcjogIzY2NjsKfQovKiBEaXNhYmxlZCAqLwoudWstcGFnaW5hdGlvbiA+IC51ay1kaXNhYmxlZCA+ICogewogIGNvbG9yOiAjOTk5Owp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IFRhYgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gQWxsb3cgaXRlbXMgdG8gd3JhcCBpbnRvIHRoZSBuZXh0IGxpbmUKICogMi4gR3V0dGVyCiAqIDMuIFJlc2V0IGxpc3QKICovCi51ay10YWIgewogIGRpc3BsYXk6IGZsZXg7CiAgLyogMSAqLwogIGZsZXgtd3JhcDogd3JhcDsKICAvKiAyICovCiAgbWFyZ2luLXJpZ2h0OiAtMjBweDsKICAvKiAzICovCiAgcGFkZGluZzogMDsKICBsaXN0LXN0eWxlOiBub25lOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoudWstdGFiOjpiZWZvcmUgewogIGNvbnRlbnQ6ICIiOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBib3R0b206IDA7CiAgcmlnaHQ6IDIwcHg7CiAgbGVmdDogMDsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTsKfQovKgogKiAxLiBTcGFjZSBpcyBhbGxvY2F0ZWQgc29sZWx5IGJhc2VkIG9uIGNvbnRlbnQgZGltZW5zaW9uczogMCAwIGF1dG8KICogMi4gR3V0dGVyCiAqIDMuIENyZWF0ZSBwb3NpdGlvbiBjb250ZXh0IGZvciBkcm9wZG93bnMKICovCi51ay10YWIgPiAqIHsKICAvKiAxICovCiAgZmxleDogbm9uZTsKICAvKiAyICovCiAgcGFkZGluZy1yaWdodDogMjBweDsKICAvKiAzICovCiAgcG9zaXRpb246IHJlbGF0aXZlOwp9Ci8qIEl0ZW1zCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBJdGVtcyBtdXN0IHRhcmdldCBgYWAgZWxlbWVudHMgdG8gZXhjbHVkZSBvdGhlciBlbGVtZW50cyAoZS5nLiBkcm9wZG93bnMpCiAqIDEuIENlbnRlciBjb250ZW50IHZlcnRpY2FsbHksIGUuZy4gYW4gaWNvbgogKiAyLiBJbWl0YXRlIHdoaXRlIHNwYWNlIGdhcCB3aGVuIHVzaW5nIGZsZXhib3gKICogMy4gQ2VudGVyIGNvbnRlbnQgaWYgYSB3aWR0aCBpcyBzZXQKICogNC4gU3R5bGUKICovCi51ay10YWIgPiAqID4gYSB7CiAgLyogMSAqLwogIGRpc3BsYXk6IGZsZXg7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAvKiAyICovCiAgY29sdW1uLWdhcDogMC4yNWVtOwogIC8qIDMgKi8KICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAvKiA0ICovCiAgcGFkZGluZzogNXB4IDEwcHg7CiAgY29sb3I6ICM5OTk7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICB0cmFuc2l0aW9uOiBjb2xvciAwLjFzIGVhc2UtaW4tb3V0Owp9Ci8qIEhvdmVyICovCi51ay10YWIgPiAqID4gYTpob3ZlciB7CiAgY29sb3I6ICM2NjY7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci8qIEFjdGl2ZSAqLwoudWstdGFiID4gLnVrLWFjdGl2ZSA+IGEgewogIGNvbG9yOiAjMzMzOwogIGJvcmRlci1jb2xvcjogIzFlODdmMDsKfQovKiBEaXNhYmxlZCAqLwoudWstdGFiID4gLnVrLWRpc2FibGVkID4gYSB7CiAgY29sb3I6ICM5OTk7Cn0KLyogUG9zaXRpb24gbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIEJvdHRvbQogKi8KLnVrLXRhYi1ib3R0b206OmJlZm9yZSB7CiAgdG9wOiAwOwogIGJvdHRvbTogYXV0bzsKfQoudWstdGFiLWJvdHRvbSA+ICogPiBhIHsKICBib3JkZXItdG9wOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgYm9yZGVyLWJvdHRvbTogbm9uZTsKfQovKgogKiBMZWZ0ICsgUmlnaHQKICogMS4gUmVzZXQgR3V0dGVyCiAqLwoudWstdGFiLXJpZ2h0LAoudWstdGFiLWxlZnQgewogIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgLyogMSAqLwogIG1hcmdpbi1yaWdodDogMDsKfQovKiAxICovCi51ay10YWItcmlnaHQgPiAqLAoudWstdGFiLWxlZnQgPiAqIHsKICBwYWRkaW5nLXJpZ2h0OiAwOwp9Ci51ay10YWItcmlnaHQ6OmJlZm9yZSB7CiAgdG9wOiAwOwogIGJvdHRvbTogMDsKICByaWdodDogYXV0bzsKICBsZWZ0OiAwOwogIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNlNWU1ZTU7CiAgYm9yZGVyLWJvdHRvbTogbm9uZTsKfQoudWstdGFiLWxlZnQ6OmJlZm9yZSB7CiAgdG9wOiAwOwogIGJvdHRvbTogMDsKICByaWdodDogMDsKICBsZWZ0OiBhdXRvOwogIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNlNWU1ZTU7CiAgYm9yZGVyLWJvdHRvbTogbm9uZTsKfQoudWstdGFiLXJpZ2h0ID4gKiA+IGEgewogIGp1c3RpZnktY29udGVudDogbGVmdDsKICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogIGJvcmRlci1ib3R0b206IG5vbmU7Cn0KLnVrLXRhYi1sZWZ0ID4gKiA+IGEgewogIGp1c3RpZnktY29udGVudDogbGVmdDsKICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICBib3JkZXItYm90dG9tOiBub25lOwp9Ci51ay10YWIgLnVrLWRyb3Bkb3duIHsKICBtYXJnaW4tcmlnaHQ6IDMwcHg7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogU2xpZGVuYXYKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIEFkb3B0cyBgdWstaWNvbmAKICovCi51ay1zbGlkZW5hdiB7CiAgcGFkZGluZzogNXB4IDEwcHg7CiAgY29sb3I6IHJnYmEoMTAyLCAxMDIsIDEwMiwgMC41KTsKICB0cmFuc2l0aW9uOiBjb2xvciAwLjFzIGVhc2UtaW4tb3V0Owp9Ci8qIEhvdmVyICovCi51ay1zbGlkZW5hdjpob3ZlciB7CiAgY29sb3I6IHJnYmEoMTAyLCAxMDIsIDEwMiwgMC45KTsKfQovKiBPbkNsaWNrICovCi51ay1zbGlkZW5hdjphY3RpdmUgewogIGNvbG9yOiByZ2JhKDEwMiwgMTAyLCAxMDIsIDAuNSk7Cn0KLyogSWNvbiBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogUHJldmlvdXMKICovCi8qCiAqIE5leHQKICovCi8qIFNpemUgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1zbGlkZW5hdi1sYXJnZSB7CiAgcGFkZGluZzogMTBweCAxMHB4Owp9Ci8qIENvbnRhaW5lcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXNsaWRlbmF2LWNvbnRhaW5lciB7CiAgZGlzcGxheTogZmxleDsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBEb3RuYXYKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIEFsbG93IGl0ZW1zIHRvIHdyYXAgaW50byB0aGUgbmV4dCBsaW5lCiAqIDIuIFJlc2V0IGxpc3QKICogMy4gR3V0dGVyCiAqLwoudWstZG90bmF2IHsKICBkaXNwbGF5OiBmbGV4OwogIC8qIDEgKi8KICBmbGV4LXdyYXA6IHdyYXA7CiAgLyogMiAqLwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgLyogMyAqLwogIG1hcmdpbi1yaWdodDogLTEycHg7Cn0KLyoKICogMS4gU3BhY2UgaXMgYWxsb2NhdGVkIHNvbGVseSBiYXNlZCBvbiBjb250ZW50IGRpbWVuc2lvbnM6IDAgMCBhdXRvCiAqIDIuIEd1dHRlcgogKi8KLnVrLWRvdG5hdiA+ICogewogIC8qIDEgKi8KICBmbGV4OiBub25lOwogIC8qIDIgKi8KICBwYWRkaW5nLXJpZ2h0OiAxMnB4Owp9Ci8qIEl0ZW1zCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBJdGVtcwogKiAxLiBIaWRlIHRleHQgaWYgcHJlc2VudAogKi8KLnVrLWRvdG5hdiA+ICogPiAqIHsKICBkaXNwbGF5OiBibG9jazsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIHdpZHRoOiAxMHB4OwogIGhlaWdodDogMTBweDsKICBib3JkZXItcmFkaXVzOiA1MCU7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgLyogMSAqLwogIHRleHQtaW5kZW50OiAxMDAlOwogIG92ZXJmbG93OiBoaWRkZW47CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEwMiwgMTAyLCAxMDIsIDAuNCk7CiAgdHJhbnNpdGlvbjogMC4ycyBlYXNlLWluLW91dDsKICB0cmFuc2l0aW9uLXByb3BlcnR5OiBiYWNrZ3JvdW5kLWNvbG9yLCBib3JkZXItY29sb3I7Cn0KLyogSG92ZXIgKi8KLnVrLWRvdG5hdiA+ICogPiA6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTAyLCAxMDIsIDEwMiwgMC42KTsKICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Owp9Ci8qIE9uQ2xpY2sgKi8KLnVrLWRvdG5hdiA+ICogPiA6YWN0aXZlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEwMiwgMTAyLCAxMDIsIDAuMik7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKfQovKiBBY3RpdmUgKi8KLnVrLWRvdG5hdiA+IC51ay1hY3RpdmUgPiAqIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEwMiwgMTAyLCAxMDIsIDAuNik7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKfQovKiBNb2RpZmllcjogJ3VrLWRvdG5hdi12ZXJ0aWNhbCcKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIENoYW5nZSBkaXJlY3Rpb24KICogMi4gR3V0dGVyCiAqLwoudWstZG90bmF2LXZlcnRpY2FsIHsKICAvKiAxICovCiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAvKiAyICovCiAgbWFyZ2luLXJpZ2h0OiAwOwogIG1hcmdpbi10b3A6IC0xMnB4Owp9Ci8qIDIgKi8KLnVrLWRvdG5hdi12ZXJ0aWNhbCA+ICogewogIHBhZGRpbmctcmlnaHQ6IDA7CiAgcGFkZGluZy10b3A6IDEycHg7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogVGh1bWJuYXYKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIEFsbG93IGl0ZW1zIHRvIHdyYXAgaW50byB0aGUgbmV4dCBsaW5lCiAqIDIuIFJlc2V0IGxpc3QKICogMy4gR3V0dGVyCiAqLwoudWstdGh1bWJuYXYgewogIGRpc3BsYXk6IGZsZXg7CiAgLyogMSAqLwogIGZsZXgtd3JhcDogd3JhcDsKICAvKiAyICovCiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7CiAgbGlzdC1zdHlsZTogbm9uZTsKICAvKiAzICovCiAgbWFyZ2luLXJpZ2h0OiAtMTVweDsKfQovKgogKiBTcGFjZSBpcyBhbGxvY2F0ZWQgYmFzZWQgb24gY29udGVudCBkaW1lbnNpb25zLCBidXQgc2hyaW5rczogMCAxIGF1dG8KICogMS4gR3V0dGVyCiAqLwoudWstdGh1bWJuYXYgPiAqIHsKICAvKiAxICovCiAgcGFkZGluZy1yaWdodDogMTVweDsKfQovKiBJdGVtcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogSXRlbXMKICovCi51ay10aHVtYm5hdiA+ICogPiAqIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9Ci51ay10aHVtYm5hdiA+ICogPiAqOjphZnRlciB7CiAgY29udGVudDogIiI7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsKICBib3R0b206IDA7CiAgcmlnaHQ6IDA7CiAgbGVmdDogMDsKICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNCk7CiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjFzIGVhc2UtaW4tb3V0Owp9Ci8qIEhvdmVyICovCi51ay10aHVtYm5hdiA+ICogPiA6aG92ZXI6OmFmdGVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKfQovKiBBY3RpdmUgKi8KLnVrLXRodW1ibmF2ID4gLnVrLWFjdGl2ZSA+ICo6OmFmdGVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKfQovKiBNb2RpZmllcjogJ3VrLXRodW1ibmF2LXZlcnRpY2FsJwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gQ2hhbmdlIGRpcmVjdGlvbgogKiAyLiBHdXR0ZXIKICovCi51ay10aHVtYm5hdi12ZXJ0aWNhbCB7CiAgLyogMSAqLwogIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgLyogMiAqLwogIG1hcmdpbi1yaWdodDogMDsKICBtYXJnaW4tdG9wOiAtMTVweDsKfQovKiAyICovCi51ay10aHVtYm5hdi12ZXJ0aWNhbCA+ICogewogIHBhZGRpbmctcmlnaHQ6IDA7CiAgcGFkZGluZy10b3A6IDE1cHg7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogSWNvbm5hdgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gQWxsb3cgaXRlbXMgdG8gd3JhcCBpbnRvIHRoZSBuZXh0IGxpbmUKICogMi4gUmVzZXQgbGlzdAogKiAzLiBHdXR0ZXIKICovCi51ay1pY29ubmF2IHsKICBkaXNwbGF5OiBmbGV4OwogIC8qIDEgKi8KICBmbGV4LXdyYXA6IHdyYXA7CiAgLyogMiAqLwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgLyogMyAqLwogIG1hcmdpbi1yaWdodDogLTEwcHg7Cn0KLyoKICogU3BhY2UgaXMgYWxsb2NhdGVkIGJhc2VkIG9uIGNvbnRlbnQgZGltZW5zaW9ucywgYnV0IHNocmlua3M6IDAgMSBhdXRvCiAqIDEuIEd1dHRlcgogKi8KLnVrLWljb25uYXYgPiAqIHsKICAvKiAxICovCiAgcGFkZGluZy1yaWdodDogMTBweDsKfQovKiBJdGVtcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogSXRlbXMgbXVzdCB0YXJnZXQgYGFgIGVsZW1lbnRzIHRvIGV4Y2x1ZGUgb3RoZXIgZWxlbWVudHMgKGUuZy4gZHJvcGRvd25zKQogKiAxLiBDZW50ZXIgY29udGVudCB2ZXJ0aWNhbGx5IGlmIHRoZXJlIGlzIHN0aWxsIHNvbWUgdGV4dAogKiAyLiBJbWl0YXRlIHdoaXRlIHNwYWNlIGdhcCB3aGVuIHVzaW5nIGZsZXhib3gKICogMy4gRm9yY2UgdGV4dCBub3QgdG8gYWZmZWN0IGl0ZW0gaGVpZ2h0CiAqIDQuIFN0eWxlCiAqIDUuIFJlcXVpcmVkIGZvciBgYWAgaWYgdGhlcmUgaXMgc3RpbGwgc29tZSB0ZXh0CiAqLwoudWstaWNvbm5hdiA+ICogPiBhIHsKICAvKiAxICovCiAgZGlzcGxheTogZmxleDsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIC8qIDIgKi8KICBjb2x1bW4tZ2FwOiAwLjI1ZW07CiAgLyogMyAqLwogIGxpbmUtaGVpZ2h0OiAwOwogIC8qIDQgKi8KICBjb2xvcjogIzk5OTsKICAvKiA1ICovCiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgdHJhbnNpdGlvbjogMC4xcyBlYXNlLWluLW91dDsKICB0cmFuc2l0aW9uLXByb3BlcnR5OiBjb2xvciwgYmFja2dyb3VuZC1jb2xvcjsKfQovKiBIb3ZlciAqLwoudWstaWNvbm5hdiA+ICogPiBhOmhvdmVyIHsKICBjb2xvcjogIzY2NjsKfQovKiBBY3RpdmUgKi8KLnVrLWljb25uYXYgPiAudWstYWN0aXZlID4gYSB7CiAgY29sb3I6ICM2NjY7Cn0KLyogTW9kaWZpZXI6ICd1ay1pY29ubmF2LXZlcnRpY2FsJwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gQ2hhbmdlIGRpcmVjdGlvbgogKiAyLiBHdXR0ZXIKICovCi51ay1pY29ubmF2LXZlcnRpY2FsIHsKICAvKiAxICovCiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAvKiAyICovCiAgbWFyZ2luLXJpZ2h0OiAwOwogIG1hcmdpbi10b3A6IC0xMHB4Owp9Ci8qIDIgKi8KLnVrLWljb25uYXYtdmVydGljYWwgPiAqIHsKICBwYWRkaW5nLXJpZ2h0OiAwOwogIHBhZGRpbmctdG9wOiAxMHB4Owp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IExpZ2h0Ym94CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBIaWRlIGJ5IGRlZmF1bHQKICogMi4gU2V0IHBvc2l0aW9uCiAqIDMuIEFsbG93IHNjcm9sbGluZyBmb3IgdGhlIG1vZGFsIGRpYWxvZwogKiA0LiBIb3Jpem9udGFsIHBhZGRpbmcKICogNS4gTWFzayB0aGUgYmFja2dyb3VuZCBwYWdlCiAqIDYuIEZhZGUtaW4gdHJhbnNpdGlvbgogKiA3LiBQcmV2ZW50IGNhbmNlbGxhdGlvbiBvZiBwb2ludGVyIGV2ZW50cyB3aGlsZSBkcmFnZ2luZwogKi8KLnVrLWxpZ2h0Ym94IHsKICAvKiAxICovCiAgZGlzcGxheTogbm9uZTsKICAvKiAyICovCiAgcG9zaXRpb246IGZpeGVkOwogIHRvcDogMDsKICBsZWZ0OiAwOwogIGJvdHRvbTogMDsKICByaWdodDogMDsKICB6LWluZGV4OiAxMDEwOwogIC8qIDUgKi8KICBiYWNrZ3JvdW5kOiAjMDAwOwogIC8qIDYgKi8KICBvcGFjaXR5OiAwOwogIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgbGluZWFyOwogIC8qIDcgKi8KICB0b3VjaC1hY3Rpb246IHBpbmNoLXpvb207Cn0KLyoKICogT3BlbgogKiAxLiBDZW50ZXIgY2hpbGQKICogMi4gRmFkZS1pbgogKi8KLnVrLWxpZ2h0Ym94LnVrLW9wZW4gewogIGRpc3BsYXk6IGJsb2NrOwogIC8qIDIgKi8KICBvcGFjaXR5OiAxOwp9Ci8qCiAqIEZvY3VzCiAqLwoudWstbGlnaHRib3ggOmZvY3VzIHsKICBvdXRsaW5lLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0Ym94IDpmb2N1cy12aXNpYmxlIHsKICBvdXRsaW5lLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLyogUGFnZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogUHJldmVudCBzY3JvbGxiYXJzCiAqLwoudWstbGlnaHRib3gtcGFnZSB7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQovKiBJdGVtCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBDZW50ZXIgY2hpbGQgd2l0aGluIHRoZSB2aWV3cG9ydAogKiAyLiBOb3QgdmlzaWJsZSBieSBkZWZhdWx0CiAqIDMuIENvbG9yIG5lZWRlZCBmb3Igc3Bpbm5lciBpY29uCiAqIDQuIE9wdGltaXplIGFuaW1hdGlvbgogKiA1LiBSZXNwb25zaXZlbmVzcwogKiAgICBVc2luZyBgdmhgIGZvciBgbWF4LWhlaWdodGAgdG8gZml4IGltYWdlIHByb3BvcnRpb25zIGFmdGVyIHJlc2l6ZSBpbiBTYWZhcmkgYW5kIE9wZXJhCiAqLwoudWstbGlnaHRib3gtaXRlbXMgPiAqIHsKICAvKiAxICovCiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsKICBsZWZ0OiAwOwogIGJvdHRvbTogMDsKICByaWdodDogMDsKICAvKiAyICovCiAgZGlzcGxheTogbm9uZTsKICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIC8qIDMgKi8KICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogIC8qIDQgKi8KICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtLCBvcGFjaXR5Owp9Ci8qIDUgKi8KLnVrLWxpZ2h0Ym94LWl0ZW1zID4gKiA+ICogewogIG1heC13aWR0aDogMTAwdnc7CiAgbWF4LWhlaWdodDogMTAwdmg7Cn0KLnVrLWxpZ2h0Ym94LWl0ZW1zID4gKiA+IDpub3QoaWZyYW1lKSB7CiAgd2lkdGg6IGF1dG87CiAgaGVpZ2h0OiBhdXRvOwp9Ci51ay1saWdodGJveC1pdGVtcyA+IC51ay1hY3RpdmUgewogIGRpc3BsYXk6IGZsZXg7Cn0KLyogVG9vbGJhcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWxpZ2h0Ym94LXRvb2xiYXIgewogIHBhZGRpbmc6IDEwcHggMTBweDsKICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHRib3gtdG9vbGJhciA+ICogewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLyogVG9vbGJhciBJY29uIChDbG9zZSkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1saWdodGJveC10b29sYmFyLWljb24gewogIHBhZGRpbmc6IDVweDsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci8qCiAqIEhvdmVyCiAqLwoudWstbGlnaHRib3gtdG9vbGJhci1pY29uOmhvdmVyIHsKICBjb2xvcjogI2ZmZjsKfQovKiBCdXR0b24gKFNsaWRlbmF2KQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gQ2VudGVyIGljb24gdmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGx5CiAqLwoudWstbGlnaHRib3gtYnV0dG9uIHsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIHdpZHRoOiA1MHB4OwogIGhlaWdodDogNTBweDsKICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAvKiAxICovCiAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQovKiBIb3ZlciAqLwoudWstbGlnaHRib3gtYnV0dG9uOmhvdmVyIHsKICBjb2xvcjogI2ZmZjsKfQovKiBPbkNsaWNrICovCi8qIENhcHRpb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1saWdodGJveC1jYXB0aW9uOmVtcHR5IHsKICBkaXNwbGF5OiBub25lOwp9Ci8qIElmcmFtZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWxpZ2h0Ym94LWlmcmFtZSB7CiAgd2lkdGg6IDgwJTsKICBoZWlnaHQ6IDgwJTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBBbmltYXRpb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCltjbGFzcyo9J3VrLWFuaW1hdGlvbi0nXSB7CiAgYW5pbWF0aW9uOiAwLjVzIGVhc2Utb3V0IGJvdGg7Cn0KLyogQW5pbWF0aW9ucwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogRmFkZQogKi8KLnVrLWFuaW1hdGlvbi1mYWRlIHsKICBhbmltYXRpb24tbmFtZTogdWstZmFkZTsKICBhbmltYXRpb24tZHVyYXRpb246IDAuOHM7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyOwp9Ci8qCiAqIFNjYWxlCiAqLwoudWstYW5pbWF0aW9uLXNjYWxlLXVwIHsKICBhbmltYXRpb24tbmFtZTogdWstZmFkZSwgdWstc2NhbGUtdXA7Cn0KLnVrLWFuaW1hdGlvbi1zY2FsZS1kb3duIHsKICBhbmltYXRpb24tbmFtZTogdWstZmFkZSwgdWstc2NhbGUtZG93bjsKfQovKgogKiBTbGlkZQogKi8KLnVrLWFuaW1hdGlvbi1zbGlkZS10b3AgewogIGFuaW1hdGlvbi1uYW1lOiB1ay1mYWRlLCB1ay1zbGlkZS10b3A7Cn0KLnVrLWFuaW1hdGlvbi1zbGlkZS1ib3R0b20gewogIGFuaW1hdGlvbi1uYW1lOiB1ay1mYWRlLCB1ay1zbGlkZS1ib3R0b207Cn0KLnVrLWFuaW1hdGlvbi1zbGlkZS1yaWdodCB7CiAgYW5pbWF0aW9uLW5hbWU6IHVrLWZhZGUsIHVrLXNsaWRlLWxlZnQ7Cn0KLnVrLWFuaW1hdGlvbi1zbGlkZS1sZWZ0IHsKICBhbmltYXRpb24tbmFtZTogdWstZmFkZSwgdWstc2xpZGUtcmlnaHQ7Cn0KLyoKICogU2xpZGUgU21hbGwKICovCi51ay1hbmltYXRpb24tc2xpZGUtdG9wLXNtYWxsIHsKICBhbmltYXRpb24tbmFtZTogdWstZmFkZSwgdWstc2xpZGUtdG9wLXNtYWxsOwp9Ci51ay1hbmltYXRpb24tc2xpZGUtYm90dG9tLXNtYWxsIHsKICBhbmltYXRpb24tbmFtZTogdWstZmFkZSwgdWstc2xpZGUtYm90dG9tLXNtYWxsOwp9Ci51ay1hbmltYXRpb24tc2xpZGUtcmlnaHQtc21hbGwgewogIGFuaW1hdGlvbi1uYW1lOiB1ay1mYWRlLCB1ay1zbGlkZS1sZWZ0LXNtYWxsOwp9Ci51ay1hbmltYXRpb24tc2xpZGUtbGVmdC1zbWFsbCB7CiAgYW5pbWF0aW9uLW5hbWU6IHVrLWZhZGUsIHVrLXNsaWRlLXJpZ2h0LXNtYWxsOwp9Ci8qCiAqIFNsaWRlIE1lZGl1bQogKi8KLnVrLWFuaW1hdGlvbi1zbGlkZS10b3AtbWVkaXVtIHsKICBhbmltYXRpb24tbmFtZTogdWstZmFkZSwgdWstc2xpZGUtdG9wLW1lZGl1bTsKfQoudWstYW5pbWF0aW9uLXNsaWRlLWJvdHRvbS1tZWRpdW0gewogIGFuaW1hdGlvbi1uYW1lOiB1ay1mYWRlLCB1ay1zbGlkZS1ib3R0b20tbWVkaXVtOwp9Ci51ay1hbmltYXRpb24tc2xpZGUtcmlnaHQtbWVkaXVtIHsKICBhbmltYXRpb24tbmFtZTogdWstZmFkZSwgdWstc2xpZGUtbGVmdC1tZWRpdW07Cn0KLnVrLWFuaW1hdGlvbi1zbGlkZS1sZWZ0LW1lZGl1bSB7CiAgYW5pbWF0aW9uLW5hbWU6IHVrLWZhZGUsIHVrLXNsaWRlLXJpZ2h0LW1lZGl1bTsKfQovKgogKiBLZW5idXJucwogKi8KLnVrLWFuaW1hdGlvbi1rZW5idXJucyB7CiAgYW5pbWF0aW9uLW5hbWU6IHVrLWtlbmJ1cm5zOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogMTVzOwp9Ci8qCiAqIFNoYWtlCiAqLwoudWstYW5pbWF0aW9uLXNoYWtlIHsKICBhbmltYXRpb24tbmFtZTogdWstc2hha2U7Cn0KLyoKICogU1ZHIFN0cm9rZQogKiBUaGUgYC0tdWstYW5pbWF0aW9uLXN0cm9rZWAgY3VzdG9tIHByb3BlcnR5IGNvbnRhaW5zIHRoZSBsb25nZXN0IHBhdGggbGVuZ3RoLgogKiBTZXQgaXQgbWFudWFsbHkgb3IgdXNlIGB1ay1zdmc9InN0cm9rZS1hbmltYXRpb246IHRydWUiYCB0byBzZXQgaXQgYXV0b21hdGljYWxseS4KICogQWxsIHN0cm9rZXMgYXJlIGFuaW1hdGVkIGJ5IHRoZSBzYW1lIHBhY2UgYW5kIGRvZXNuJ3QgZW5kIHNpbXVsdGFuZW91c2x5LgogKiBUbyBlbmQgc2ltdWx0YW5lb3VzbHksIGBwYXRoTGVuZ3RoPSIxImAgY291bGQgYmUgdXNlZCwgYnV0IGl0J3Mgbm90IHdvcmtpbmcgaW4gU2FmYXJpIHlldC4KICovCi51ay1hbmltYXRpb24tc3Ryb2tlIHsKICBhbmltYXRpb24tbmFtZTogdWstc3Ryb2tlOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogMnM7CiAgc3Ryb2tlLWRhc2hhcnJheTogdmFyKC0tdWstYW5pbWF0aW9uLXN0cm9rZSk7Cn0KLyogRGlyZWN0aW9uIG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstYW5pbWF0aW9uLXJldmVyc2UgewogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHJldmVyc2U7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKfQovKiBEdXJhdGlvbiBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWFuaW1hdGlvbi1mYXN0IHsKICBhbmltYXRpb24tZHVyYXRpb246IDAuMXM7Cn0KLyogVG9nZ2xlIGFuaW1hdGlvbiBiYXNlZCBvbiB0aGUgU3RhdGUgb2YgdGhlIFBhcmVudCBFbGVtZW50CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstYW5pbWF0aW9uLXRvZ2dsZTpub3QoOmhvdmVyKTpub3QoOmZvY3VzKSBbY2xhc3MqPSd1ay1hbmltYXRpb24tJ10gewogIGFuaW1hdGlvbi1uYW1lOiBub25lOwp9Ci8qIEtleWZyYW1lcyB1c2VkIGJ5IGFuaW1hdGlvbiBjbGFzc2VzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBGYWRlCiAqLwpAa2V5ZnJhbWVzIHVrLWZhZGUgewogIDAlIHsKICAgIG9wYWNpdHk6IDA7CiAgfQogIDEwMCUgewogICAgb3BhY2l0eTogMTsKICB9Cn0KLyoKICogU2NhbGUKICovCkBrZXlmcmFtZXMgdWstc2NhbGUtdXAgewogIDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogIH0KfQpAa2V5ZnJhbWVzIHVrLXNjYWxlLWRvd24gewogIDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogIH0KfQovKgogKiBTbGlkZQogKi8KQGtleWZyYW1lcyB1ay1zbGlkZS10b3AgewogIDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTAwJSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogIH0KfQpAa2V5ZnJhbWVzIHVrLXNsaWRlLWJvdHRvbSB7CiAgMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICB9Cn0KQGtleWZyYW1lcyB1ay1zbGlkZS1sZWZ0IHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOwogIH0KfQpAa2V5ZnJhbWVzIHVrLXNsaWRlLXJpZ2h0IHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKICB9Cn0KLyoKICogU2xpZGUgU21hbGwKICovCkBrZXlmcmFtZXMgdWstc2xpZGUtdG9wLXNtYWxsIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICB9Cn0KQGtleWZyYW1lcyB1ay1zbGlkZS1ib3R0b20tc21hbGwgewogIDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgfQp9CkBrZXlmcmFtZXMgdWstc2xpZGUtbGVmdC1zbWFsbCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwcHgpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKICB9Cn0KQGtleWZyYW1lcyB1ay1zbGlkZS1yaWdodC1zbWFsbCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMHB4KTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7CiAgfQp9Ci8qCiAqIFNsaWRlIE1lZGl1bQogKi8KQGtleWZyYW1lcyB1ay1zbGlkZS10b3AtbWVkaXVtIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwcHgpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICB9Cn0KQGtleWZyYW1lcyB1ay1zbGlkZS1ib3R0b20tbWVkaXVtIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNTBweCk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogIH0KfQpAa2V5ZnJhbWVzIHVrLXNsaWRlLWxlZnQtbWVkaXVtIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNTBweCk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOwogIH0KfQpAa2V5ZnJhbWVzIHVrLXNsaWRlLXJpZ2h0LW1lZGl1bSB7CiAgMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MHB4KTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7CiAgfQp9Ci8qCiAqIEtlbmJ1cm5zCiAqLwpAa2V5ZnJhbWVzIHVrLWtlbmJ1cm5zIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMS4yKTsKICB9Cn0KLyoKICogU2hha2UKICovCkBrZXlmcmFtZXMgdWstc2hha2UgewogIDAlLAogIDEwMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOwogIH0KICAxMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDlweCk7CiAgfQogIDIwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLThweCk7CiAgfQogIDMwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoN3B4KTsKICB9CiAgNDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNnB4KTsKICB9CiAgNTAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1cHgpOwogIH0KICA2MCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC00cHgpOwogIH0KICA3MCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDNweCk7CiAgfQogIDgwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTJweCk7CiAgfQogIDkwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMXB4KTsKICB9Cn0KLyoKICogU3Ryb2tlCiAqLwpAa2V5ZnJhbWVzIHVrLXN0cm9rZSB7CiAgMCUgewogICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IHZhcigtLXVrLWFuaW1hdGlvbi1zdHJva2UpOwogIH0KICAxMDAlIHsKICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwOwogIH0KfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBXaWR0aAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogRXF1YWwgY2hpbGQgd2lkdGhzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpbY2xhc3MqPSd1ay1jaGlsZC13aWR0aCddID4gKiB7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB3aWR0aDogMTAwJTsKfQoudWstY2hpbGQtd2lkdGgtMS0yID4gKiB7CiAgd2lkdGg6IDUwJTsKfQoudWstY2hpbGQtd2lkdGgtMS0zID4gKiB7CiAgd2lkdGg6IGNhbGMoMTAwJSAqIDEgLyAzLjAwMSk7Cn0KLnVrLWNoaWxkLXdpZHRoLTEtNCA+ICogewogIHdpZHRoOiAyNSU7Cn0KLnVrLWNoaWxkLXdpZHRoLTEtNSA+ICogewogIHdpZHRoOiAyMCU7Cn0KLnVrLWNoaWxkLXdpZHRoLTEtNiA+ICogewogIHdpZHRoOiBjYWxjKDEwMCUgKiAxIC8gNi4wMDEpOwp9Ci51ay1jaGlsZC13aWR0aC1hdXRvID4gKiB7CiAgd2lkdGg6IGF1dG87Cn0KLyoKICogMS4gUmVzZXQgdGhlIGBtaW4td2lkdGhgLCB3aGljaCBpcyBzZXQgdG8gYXV0byBieSBkZWZhdWx0LCBiZWNhdXNlCiAqICAgIGZsZXggaXRlbXMgd29uJ3Qgc2hyaW5rIGJlbG93IHRoZWlyIG1pbmltdW0gaW50cmluc2ljIGNvbnRlbnQgc2l6ZS4KICogICAgVXNpbmcgYDFweGAgaW5zdGVhZCBvZiBgMGAsIHNvIGl0ZW1zIHN0aWxsIHdyYXAgaW50byB0aGUgbmV4dCBsaW5lLAogKiAgICBpZiB0aGV5IGhhdmUgemVybyB3aWR0aCBhbmQgcGFkZGluZyBhbmQgdGhlIHByZWRlY2Vzc29yIGlzIDEwMCUgd2lkZS4KICovCi51ay1jaGlsZC13aWR0aC1leHBhbmQgPiA6bm90KFtjbGFzcyo9J3VrLXdpZHRoJ10pIHsKICBmbGV4OiAxOwogIC8qIDEgKi8KICBtaW4td2lkdGg6IDFweDsKfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAudWstY2hpbGQtd2lkdGgtMS0xXEBzID4gKiB7CiAgICB3aWR0aDogMTAwJTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLTEtMlxAcyA+ICogewogICAgd2lkdGg6IDUwJTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLTEtM1xAcyA+ICogewogICAgd2lkdGg6IGNhbGMoMTAwJSAqIDEgLyAzLjAwMSk7CiAgfQogIC51ay1jaGlsZC13aWR0aC0xLTRcQHMgPiAqIHsKICAgIHdpZHRoOiAyNSU7CiAgfQogIC51ay1jaGlsZC13aWR0aC0xLTVcQHMgPiAqIHsKICAgIHdpZHRoOiAyMCU7CiAgfQogIC51ay1jaGlsZC13aWR0aC0xLTZcQHMgPiAqIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgKiAxIC8gNi4wMDEpOwogIH0KICAudWstY2hpbGQtd2lkdGgtYXV0b1xAcyA+ICogewogICAgd2lkdGg6IGF1dG87CiAgfQogIC51ay1jaGlsZC13aWR0aC1leHBhbmRcQHMgPiA6bm90KFtjbGFzcyo9J3VrLXdpZHRoJ10pIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDFweDsKICB9Cn0KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogIC51ay1jaGlsZC13aWR0aC0xLTFcQG0gPiAqIHsKICAgIHdpZHRoOiAxMDAlOwogIH0KICAudWstY2hpbGQtd2lkdGgtMS0yXEBtID4gKiB7CiAgICB3aWR0aDogNTAlOwogIH0KICAudWstY2hpbGQtd2lkdGgtMS0zXEBtID4gKiB7CiAgICB3aWR0aDogY2FsYygxMDAlICogMSAvIDMuMDAxKTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLTEtNFxAbSA+ICogewogICAgd2lkdGg6IDI1JTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLTEtNVxAbSA+ICogewogICAgd2lkdGg6IDIwJTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLTEtNlxAbSA+ICogewogICAgd2lkdGg6IGNhbGMoMTAwJSAqIDEgLyA2LjAwMSk7CiAgfQogIC51ay1jaGlsZC13aWR0aC1hdXRvXEBtID4gKiB7CiAgICB3aWR0aDogYXV0bzsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLWV4cGFuZFxAbSA+IDpub3QoW2NsYXNzKj0ndWstd2lkdGgnXSkgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMXB4OwogIH0KfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC51ay1jaGlsZC13aWR0aC0xLTFcQGwgPiAqIHsKICAgIHdpZHRoOiAxMDAlOwogIH0KICAudWstY2hpbGQtd2lkdGgtMS0yXEBsID4gKiB7CiAgICB3aWR0aDogNTAlOwogIH0KICAudWstY2hpbGQtd2lkdGgtMS0zXEBsID4gKiB7CiAgICB3aWR0aDogY2FsYygxMDAlICogMSAvIDMuMDAxKTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLTEtNFxAbCA+ICogewogICAgd2lkdGg6IDI1JTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLTEtNVxAbCA+ICogewogICAgd2lkdGg6IDIwJTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLTEtNlxAbCA+ICogewogICAgd2lkdGg6IGNhbGMoMTAwJSAqIDEgLyA2LjAwMSk7CiAgfQogIC51ay1jaGlsZC13aWR0aC1hdXRvXEBsID4gKiB7CiAgICB3aWR0aDogYXV0bzsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLWV4cGFuZFxAbCA+IDpub3QoW2NsYXNzKj0ndWstd2lkdGgnXSkgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMXB4OwogIH0KfQovKiBMYXJnZSBzY3JlZW4gYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTYwMHB4KSB7CiAgLnVrLWNoaWxkLXdpZHRoLTEtMVxAeGwgPiAqIHsKICAgIHdpZHRoOiAxMDAlOwogIH0KICAudWstY2hpbGQtd2lkdGgtMS0yXEB4bCA+ICogewogICAgd2lkdGg6IDUwJTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLTEtM1xAeGwgPiAqIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgKiAxIC8gMy4wMDEpOwogIH0KICAudWstY2hpbGQtd2lkdGgtMS00XEB4bCA+ICogewogICAgd2lkdGg6IDI1JTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLTEtNVxAeGwgPiAqIHsKICAgIHdpZHRoOiAyMCU7CiAgfQogIC51ay1jaGlsZC13aWR0aC0xLTZcQHhsID4gKiB7CiAgICB3aWR0aDogY2FsYygxMDAlICogMSAvIDYuMDAxKTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLWF1dG9cQHhsID4gKiB7CiAgICB3aWR0aDogYXV0bzsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLWV4cGFuZFxAeGwgPiA6bm90KFtjbGFzcyo9J3VrLXdpZHRoJ10pIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDFweDsKICB9Cn0KLyogU2luZ2xlIFdpZHRocwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gYG1heC13aWR0aGAgaXMgbmVlZGVkIGZvciB0aGUgcGl4ZWwtYmFzZWQgY2xhc3NlcwogKi8KW2NsYXNzKj0ndWstd2lkdGgnXSB7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB3aWR0aDogMTAwJTsKICAvKiAxICovCiAgbWF4LXdpZHRoOiAxMDAlOwp9Ci8qIEhhbHZlcyAqLwoudWstd2lkdGgtMS0yIHsKICB3aWR0aDogNTAlOwp9Ci8qIFRoaXJkcyAqLwoudWstd2lkdGgtMS0zIHsKICB3aWR0aDogY2FsYygxMDAlICogMSAvIDMuMDAxKTsKfQoudWstd2lkdGgtMi0zIHsKICB3aWR0aDogY2FsYygxMDAlICogMiAvIDMuMDAxKTsKfQovKiBRdWFydGVycyAqLwoudWstd2lkdGgtMS00IHsKICB3aWR0aDogMjUlOwp9Ci51ay13aWR0aC0zLTQgewogIHdpZHRoOiA3NSU7Cn0KLyogRmlmdGhzICovCi51ay13aWR0aC0xLTUgewogIHdpZHRoOiAyMCU7Cn0KLnVrLXdpZHRoLTItNSB7CiAgd2lkdGg6IDQwJTsKfQoudWstd2lkdGgtMy01IHsKICB3aWR0aDogNjAlOwp9Ci51ay13aWR0aC00LTUgewogIHdpZHRoOiA4MCU7Cn0KLyogU2l4dGhzICovCi51ay13aWR0aC0xLTYgewogIHdpZHRoOiBjYWxjKDEwMCUgKiAxIC8gNi4wMDEpOwp9Ci51ay13aWR0aC01LTYgewogIHdpZHRoOiBjYWxjKDEwMCUgKiA1IC8gNi4wMDEpOwp9Ci8qIFBpeGVsICovCi51ay13aWR0aC1zbWFsbCB7CiAgd2lkdGg6IDE1MHB4Owp9Ci51ay13aWR0aC1tZWRpdW0gewogIHdpZHRoOiAzMDBweDsKfQoudWstd2lkdGgtbGFyZ2UgewogIHdpZHRoOiA0NTBweDsKfQoudWstd2lkdGgteGxhcmdlIHsKICB3aWR0aDogNjAwcHg7Cn0KLnVrLXdpZHRoLTJ4bGFyZ2UgewogIHdpZHRoOiA3NTBweDsKfQovKiBBdXRvICovCi51ay13aWR0aC1hdXRvIHsKICB3aWR0aDogYXV0bzsKfQovKiBFeHBhbmQgKi8KLnVrLXdpZHRoLWV4cGFuZCB7CiAgZmxleDogMTsKICBtaW4td2lkdGg6IDFweDsKfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAvKiBXaG9sZSAqLwogIC51ay13aWR0aC0xLTFcQHMgewogICAgd2lkdGg6IDEwMCU7CiAgfQogIC8qIEhhbHZlcyAqLwogIC51ay13aWR0aC0xLTJcQHMgewogICAgd2lkdGg6IDUwJTsKICB9CiAgLyogVGhpcmRzICovCiAgLnVrLXdpZHRoLTEtM1xAcyB7CiAgICB3aWR0aDogY2FsYygxMDAlICogMSAvIDMuMDAxKTsKICB9CiAgLnVrLXdpZHRoLTItM1xAcyB7CiAgICB3aWR0aDogY2FsYygxMDAlICogMiAvIDMuMDAxKTsKICB9CiAgLyogUXVhcnRlcnMgKi8KICAudWstd2lkdGgtMS00XEBzIHsKICAgIHdpZHRoOiAyNSU7CiAgfQogIC51ay13aWR0aC0zLTRcQHMgewogICAgd2lkdGg6IDc1JTsKICB9CiAgLyogRmlmdGhzICovCiAgLnVrLXdpZHRoLTEtNVxAcyB7CiAgICB3aWR0aDogMjAlOwogIH0KICAudWstd2lkdGgtMi01XEBzIHsKICAgIHdpZHRoOiA0MCU7CiAgfQogIC51ay13aWR0aC0zLTVcQHMgewogICAgd2lkdGg6IDYwJTsKICB9CiAgLnVrLXdpZHRoLTQtNVxAcyB7CiAgICB3aWR0aDogODAlOwogIH0KICAvKiBTaXh0aHMgKi8KICAudWstd2lkdGgtMS02XEBzIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgKiAxIC8gNi4wMDEpOwogIH0KICAudWstd2lkdGgtNS02XEBzIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgKiA1IC8gNi4wMDEpOwogIH0KICAvKiBQaXhlbCAqLwogIC51ay13aWR0aC1zbWFsbFxAcyB7CiAgICB3aWR0aDogMTUwcHg7CiAgfQogIC51ay13aWR0aC1tZWRpdW1cQHMgewogICAgd2lkdGg6IDMwMHB4OwogIH0KICAudWstd2lkdGgtbGFyZ2VcQHMgewogICAgd2lkdGg6IDQ1MHB4OwogIH0KICAudWstd2lkdGgteGxhcmdlXEBzIHsKICAgIHdpZHRoOiA2MDBweDsKICB9CiAgLnVrLXdpZHRoLTJ4bGFyZ2VcQHMgewogICAgd2lkdGg6IDc1MHB4OwogIH0KICAvKiBBdXRvICovCiAgLnVrLXdpZHRoLWF1dG9cQHMgewogICAgd2lkdGg6IGF1dG87CiAgfQogIC8qIEV4cGFuZCAqLwogIC51ay13aWR0aC1leHBhbmRcQHMgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMXB4OwogIH0KfQovKiBUYWJsZXQgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7CiAgLyogV2hvbGUgKi8KICAudWstd2lkdGgtMS0xXEBtIHsKICAgIHdpZHRoOiAxMDAlOwogIH0KICAvKiBIYWx2ZXMgKi8KICAudWstd2lkdGgtMS0yXEBtIHsKICAgIHdpZHRoOiA1MCU7CiAgfQogIC8qIFRoaXJkcyAqLwogIC51ay13aWR0aC0xLTNcQG0gewogICAgd2lkdGg6IGNhbGMoMTAwJSAqIDEgLyAzLjAwMSk7CiAgfQogIC51ay13aWR0aC0yLTNcQG0gewogICAgd2lkdGg6IGNhbGMoMTAwJSAqIDIgLyAzLjAwMSk7CiAgfQogIC8qIFF1YXJ0ZXJzICovCiAgLnVrLXdpZHRoLTEtNFxAbSB7CiAgICB3aWR0aDogMjUlOwogIH0KICAudWstd2lkdGgtMy00XEBtIHsKICAgIHdpZHRoOiA3NSU7CiAgfQogIC8qIEZpZnRocyAqLwogIC51ay13aWR0aC0xLTVcQG0gewogICAgd2lkdGg6IDIwJTsKICB9CiAgLnVrLXdpZHRoLTItNVxAbSB7CiAgICB3aWR0aDogNDAlOwogIH0KICAudWstd2lkdGgtMy01XEBtIHsKICAgIHdpZHRoOiA2MCU7CiAgfQogIC51ay13aWR0aC00LTVcQG0gewogICAgd2lkdGg6IDgwJTsKICB9CiAgLyogU2l4dGhzICovCiAgLnVrLXdpZHRoLTEtNlxAbSB7CiAgICB3aWR0aDogY2FsYygxMDAlICogMSAvIDYuMDAxKTsKICB9CiAgLnVrLXdpZHRoLTUtNlxAbSB7CiAgICB3aWR0aDogY2FsYygxMDAlICogNSAvIDYuMDAxKTsKICB9CiAgLyogUGl4ZWwgKi8KICAudWstd2lkdGgtc21hbGxcQG0gewogICAgd2lkdGg6IDE1MHB4OwogIH0KICAudWstd2lkdGgtbWVkaXVtXEBtIHsKICAgIHdpZHRoOiAzMDBweDsKICB9CiAgLnVrLXdpZHRoLWxhcmdlXEBtIHsKICAgIHdpZHRoOiA0NTBweDsKICB9CiAgLnVrLXdpZHRoLXhsYXJnZVxAbSB7CiAgICB3aWR0aDogNjAwcHg7CiAgfQogIC51ay13aWR0aC0yeGxhcmdlXEBtIHsKICAgIHdpZHRoOiA3NTBweDsKICB9CiAgLyogQXV0byAqLwogIC51ay13aWR0aC1hdXRvXEBtIHsKICAgIHdpZHRoOiBhdXRvOwogIH0KICAvKiBFeHBhbmQgKi8KICAudWstd2lkdGgtZXhwYW5kXEBtIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDFweDsKICB9Cn0KLyogRGVza3RvcCBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHsKICAvKiBXaG9sZSAqLwogIC51ay13aWR0aC0xLTFcQGwgewogICAgd2lkdGg6IDEwMCU7CiAgfQogIC8qIEhhbHZlcyAqLwogIC51ay13aWR0aC0xLTJcQGwgewogICAgd2lkdGg6IDUwJTsKICB9CiAgLyogVGhpcmRzICovCiAgLnVrLXdpZHRoLTEtM1xAbCB7CiAgICB3aWR0aDogY2FsYygxMDAlICogMSAvIDMuMDAxKTsKICB9CiAgLnVrLXdpZHRoLTItM1xAbCB7CiAgICB3aWR0aDogY2FsYygxMDAlICogMiAvIDMuMDAxKTsKICB9CiAgLyogUXVhcnRlcnMgKi8KICAudWstd2lkdGgtMS00XEBsIHsKICAgIHdpZHRoOiAyNSU7CiAgfQogIC51ay13aWR0aC0zLTRcQGwgewogICAgd2lkdGg6IDc1JTsKICB9CiAgLyogRmlmdGhzICovCiAgLnVrLXdpZHRoLTEtNVxAbCB7CiAgICB3aWR0aDogMjAlOwogIH0KICAudWstd2lkdGgtMi01XEBsIHsKICAgIHdpZHRoOiA0MCU7CiAgfQogIC51ay13aWR0aC0zLTVcQGwgewogICAgd2lkdGg6IDYwJTsKICB9CiAgLnVrLXdpZHRoLTQtNVxAbCB7CiAgICB3aWR0aDogODAlOwogIH0KICAvKiBTaXh0aHMgKi8KICAudWstd2lkdGgtMS02XEBsIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgKiAxIC8gNi4wMDEpOwogIH0KICAudWstd2lkdGgtNS02XEBsIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgKiA1IC8gNi4wMDEpOwogIH0KICAvKiBQaXhlbCAqLwogIC51ay13aWR0aC1zbWFsbFxAbCB7CiAgICB3aWR0aDogMTUwcHg7CiAgfQogIC51ay13aWR0aC1tZWRpdW1cQGwgewogICAgd2lkdGg6IDMwMHB4OwogIH0KICAudWstd2lkdGgtbGFyZ2VcQGwgewogICAgd2lkdGg6IDQ1MHB4OwogIH0KICAudWstd2lkdGgteGxhcmdlXEBsIHsKICAgIHdpZHRoOiA2MDBweDsKICB9CiAgLnVrLXdpZHRoLTJ4bGFyZ2VcQGwgewogICAgd2lkdGg6IDc1MHB4OwogIH0KICAvKiBBdXRvICovCiAgLnVrLXdpZHRoLWF1dG9cQGwgewogICAgd2lkdGg6IGF1dG87CiAgfQogIC8qIEV4cGFuZCAqLwogIC51ay13aWR0aC1leHBhbmRcQGwgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMXB4OwogIH0KfQovKiBMYXJnZSBzY3JlZW4gYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTYwMHB4KSB7CiAgLyogV2hvbGUgKi8KICAudWstd2lkdGgtMS0xXEB4bCB7CiAgICB3aWR0aDogMTAwJTsKICB9CiAgLyogSGFsdmVzICovCiAgLnVrLXdpZHRoLTEtMlxAeGwgewogICAgd2lkdGg6IDUwJTsKICB9CiAgLyogVGhpcmRzICovCiAgLnVrLXdpZHRoLTEtM1xAeGwgewogICAgd2lkdGg6IGNhbGMoMTAwJSAqIDEgLyAzLjAwMSk7CiAgfQogIC51ay13aWR0aC0yLTNcQHhsIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgKiAyIC8gMy4wMDEpOwogIH0KICAvKiBRdWFydGVycyAqLwogIC51ay13aWR0aC0xLTRcQHhsIHsKICAgIHdpZHRoOiAyNSU7CiAgfQogIC51ay13aWR0aC0zLTRcQHhsIHsKICAgIHdpZHRoOiA3NSU7CiAgfQogIC8qIEZpZnRocyAqLwogIC51ay13aWR0aC0xLTVcQHhsIHsKICAgIHdpZHRoOiAyMCU7CiAgfQogIC51ay13aWR0aC0yLTVcQHhsIHsKICAgIHdpZHRoOiA0MCU7CiAgfQogIC51ay13aWR0aC0zLTVcQHhsIHsKICAgIHdpZHRoOiA2MCU7CiAgfQogIC51ay13aWR0aC00LTVcQHhsIHsKICAgIHdpZHRoOiA4MCU7CiAgfQogIC8qIFNpeHRocyAqLwogIC51ay13aWR0aC0xLTZcQHhsIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgKiAxIC8gNi4wMDEpOwogIH0KICAudWstd2lkdGgtNS02XEB4bCB7CiAgICB3aWR0aDogY2FsYygxMDAlICogNSAvIDYuMDAxKTsKICB9CiAgLyogUGl4ZWwgKi8KICAudWstd2lkdGgtc21hbGxcQHhsIHsKICAgIHdpZHRoOiAxNTBweDsKICB9CiAgLnVrLXdpZHRoLW1lZGl1bVxAeGwgewogICAgd2lkdGg6IDMwMHB4OwogIH0KICAudWstd2lkdGgtbGFyZ2VcQHhsIHsKICAgIHdpZHRoOiA0NTBweDsKICB9CiAgLnVrLXdpZHRoLXhsYXJnZVxAeGwgewogICAgd2lkdGg6IDYwMHB4OwogIH0KICAudWstd2lkdGgtMnhsYXJnZVxAeGwgewogICAgd2lkdGg6IDc1MHB4OwogIH0KICAvKiBBdXRvICovCiAgLnVrLXdpZHRoLWF1dG9cQHhsIHsKICAgIHdpZHRoOiBhdXRvOwogIH0KICAvKiBFeHBhbmQgKi8KICAudWstd2lkdGgtZXhwYW5kXEB4bCB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAxcHg7CiAgfQp9Ci8qIEludHJpbnNpYyBXaWR0aHMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay13aWR0aC1tYXgtY29udGVudCB7CiAgd2lkdGg6IG1heC1jb250ZW50Owp9Ci51ay13aWR0aC1taW4tY29udGVudCB7CiAgd2lkdGg6IG1pbi1jb250ZW50Owp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IEhlaWdodAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KW2NsYXNzKj0ndWstaGVpZ2h0J10gewogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KLyoKICogT25seSB3b3JrcyBpZiBwYXJlbnQgZWxlbWVudCBoYXMgYSBoZWlnaHQgc2V0CiAqLwoudWstaGVpZ2h0LTEtMSB7CiAgaGVpZ2h0OiAxMDAlOwp9Ci8qCiAqIFVzZWZ1bCB0byBjcmVhdGUgaW1hZ2UgdGVhc2VycwogKi8KLnVrLWhlaWdodC12aWV3cG9ydCB7CiAgbWluLWhlaWdodDogMTAwdmg7Cn0KLnVrLWhlaWdodC12aWV3cG9ydC0yIHsKICBtaW4taGVpZ2h0OiAyMDB2aDsKfQoudWstaGVpZ2h0LXZpZXdwb3J0LTMgewogIG1pbi1oZWlnaHQ6IDMwMHZoOwp9Ci51ay1oZWlnaHQtdmlld3BvcnQtNCB7CiAgbWluLWhlaWdodDogNDAwdmg7Cn0KLyoKICogUGl4ZWwKICogVXNlZnVsIGZvciBgb3ZlcmZsb3c6IGF1dG9gCiAqLwoudWstaGVpZ2h0LXNtYWxsIHsKICBoZWlnaHQ6IDE1MHB4Owp9Ci51ay1oZWlnaHQtbWVkaXVtIHsKICBoZWlnaHQ6IDMwMHB4Owp9Ci51ay1oZWlnaHQtbGFyZ2UgewogIGhlaWdodDogNDUwcHg7Cn0KLnVrLWhlaWdodC1tYXgtc21hbGwgewogIG1heC1oZWlnaHQ6IDE1MHB4Owp9Ci51ay1oZWlnaHQtbWF4LW1lZGl1bSB7CiAgbWF4LWhlaWdodDogMzAwcHg7Cn0KLnVrLWhlaWdodC1tYXgtbGFyZ2UgewogIG1heC1oZWlnaHQ6IDQ1MHB4Owp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IFRleHQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIFN0eWxlIG1vZGlmaWVycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXRleHQtbGVhZCB7CiAgZm9udC1zaXplOiAxLjVyZW07CiAgbGluZS1oZWlnaHQ6IDEuNTsKICBjb2xvcjogIzMzMzsKfQoudWstdGV4dC1tZXRhIHsKICBmb250LXNpemU6IDAuODc1cmVtOwogIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgY29sb3I6ICM5OTk7Cn0KLnVrLXRleHQtbWV0YSBhIHsKICBjb2xvcjogIzk5OTsKfQoudWstdGV4dC1tZXRhIGE6aG92ZXIgewogIGNvbG9yOiAjNjY2OwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQovKiBTaXplIG1vZGlmaWVycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXRleHQtc21hbGwgewogIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgbGluZS1oZWlnaHQ6IDEuNTsKfQoudWstdGV4dC1sYXJnZSB7CiAgZm9udC1zaXplOiAxLjVyZW07CiAgbGluZS1oZWlnaHQ6IDEuNTsKfQoudWstdGV4dC1kZWZhdWx0IHsKICBmb250LXNpemU6IDE2cHg7CiAgbGluZS1oZWlnaHQ6IDEuNTsKfQovKiBXZWlnaHQgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay10ZXh0LWxpZ2h0IHsKICBmb250LXdlaWdodDogMzAwOwp9Ci51ay10ZXh0LW5vcm1hbCB7CiAgZm9udC13ZWlnaHQ6IDQwMDsKfQoudWstdGV4dC1ib2xkIHsKICBmb250LXdlaWdodDogNzAwOwp9Ci51ay10ZXh0LWxpZ2h0ZXIgewogIGZvbnQtd2VpZ2h0OiBsaWdodGVyOwp9Ci51ay10ZXh0LWJvbGRlciB7CiAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKfQovKiBTdHlsZSBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXRleHQtaXRhbGljIHsKICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KLyogVHJhbnNmb3JtIG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstdGV4dC1jYXBpdGFsaXplIHsKICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZSAhaW1wb3J0YW50Owp9Ci51ay10ZXh0LXVwcGVyY2FzZSB7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSAhaW1wb3J0YW50Owp9Ci51ay10ZXh0LWxvd2VyY2FzZSB7CiAgdGV4dC10cmFuc2Zvcm06IGxvd2VyY2FzZSAhaW1wb3J0YW50Owp9Ci8qIERlY29yYXRpb24gbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay10ZXh0LWRlY29yYXRpb24tbm9uZSB7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7Cn0KLyogQ29sb3IgbW9kaWZpZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstdGV4dC1tdXRlZCB7CiAgY29sb3I6ICM5OTkgIWltcG9ydGFudDsKfQoudWstdGV4dC1lbXBoYXNpcyB7CiAgY29sb3I6ICMzMzMgIWltcG9ydGFudDsKfQoudWstdGV4dC1wcmltYXJ5IHsKICBjb2xvcjogIzFlODdmMCAhaW1wb3J0YW50Owp9Ci51ay10ZXh0LXNlY29uZGFyeSB7CiAgY29sb3I6ICMyMjIgIWltcG9ydGFudDsKfQoudWstdGV4dC1zdWNjZXNzIHsKICBjb2xvcjogIzMyZDI5NiAhaW1wb3J0YW50Owp9Ci51ay10ZXh0LXdhcm5pbmcgewogIGNvbG9yOiAjZmFhMDVhICFpbXBvcnRhbnQ7Cn0KLnVrLXRleHQtZGFuZ2VyIHsKICBjb2xvcjogI2YwNTA2ZSAhaW1wb3J0YW50Owp9Ci8qIEJhY2tncm91bmQgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFRoZSBiYWNrZ3JvdW5kIGNsaXBzIHRvIHRoZSBmb3JlZ3JvdW5kIHRleHQuIFdvcmtzIGluIGFsbCBicm93c2Vycy4KICogMi4gRGVmYXVsdCBjb2xvciBpcyBzZXQgdG8gdHJhbnNwYXJlbnQuCiAqIDMuIENvbnRhaW5lciBmaXRzIHRoZSB0ZXh0CiAqIDQuIFN0eWxlCiAqLwoudWstdGV4dC1iYWNrZ3JvdW5kIHsKICAvKiAxICovCiAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7CiAgLyogMiAqLwogIGNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogIC8qIDMgKi8KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgLyogNCAqLwogIGJhY2tncm91bmQtY29sb3I6ICMxZTg3ZjA7Cn0KLyogQWxpZ25tZW50IG1vZGlmaWVycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXRleHQtcmlnaHQgewogIHRleHQtYWxpZ246IHJpZ2h0ICFpbXBvcnRhbnQ7Cn0KLnVrLXRleHQtbGVmdCB7CiAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50Owp9Ci51ay10ZXh0LWNlbnRlciB7CiAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7Cn0KLnVrLXRleHQtanVzdGlmeSB7CiAgdGV4dC1hbGlnbjoganVzdGlmeSAhaW1wb3J0YW50Owp9Ci8qIFBob25lIGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgewogIC51ay10ZXh0LXJpZ2h0XEBzIHsKICAgIHRleHQtYWxpZ246IHJpZ2h0ICFpbXBvcnRhbnQ7CiAgfQogIC51ay10ZXh0LWxlZnRcQHMgewogICAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50OwogIH0KICAudWstdGV4dC1jZW50ZXJcQHMgewogICAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstdGV4dC1yaWdodFxAbSB7CiAgICB0ZXh0LWFsaWduOiByaWdodCAhaW1wb3J0YW50OwogIH0KICAudWstdGV4dC1sZWZ0XEBtIHsKICAgIHRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDsKICB9CiAgLnVrLXRleHQtY2VudGVyXEBtIHsKICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OwogIH0KfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC51ay10ZXh0LXJpZ2h0XEBsIHsKICAgIHRleHQtYWxpZ246IHJpZ2h0ICFpbXBvcnRhbnQ7CiAgfQogIC51ay10ZXh0LWxlZnRcQGwgewogICAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50OwogIH0KICAudWstdGV4dC1jZW50ZXJcQGwgewogICAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7CiAgfQp9Ci8qIExhcmdlIHNjcmVlbiBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxNjAwcHgpIHsKICAudWstdGV4dC1yaWdodFxAeGwgewogICAgdGV4dC1hbGlnbjogcmlnaHQgIWltcG9ydGFudDsKICB9CiAgLnVrLXRleHQtbGVmdFxAeGwgewogICAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50OwogIH0KICAudWstdGV4dC1jZW50ZXJcQHhsIHsKICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OwogIH0KfQovKgogKiBWZXJ0aWNhbAogKi8KLnVrLXRleHQtdG9wIHsKICB2ZXJ0aWNhbC1hbGlnbjogdG9wICFpbXBvcnRhbnQ7Cn0KLnVrLXRleHQtbWlkZGxlIHsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlICFpbXBvcnRhbnQ7Cn0KLnVrLXRleHQtYm90dG9tIHsKICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tICFpbXBvcnRhbnQ7Cn0KLnVrLXRleHQtYmFzZWxpbmUgewogIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50Owp9Ci8qIFdyYXAgbW9kaWZpZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBQcmV2ZW50IHRleHQgZnJvbSB3cmFwcGluZyBvbnRvIG11bHRpcGxlIGxpbmVzCiAqLwoudWstdGV4dC1ub3dyYXAgewogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KLyoKICogMS4gTWFrZSBzdXJlIGEgbWF4LXdpZHRoIGlzIHNldCBhZnRlciB3aGljaCB0cnVuY2F0aW9uIGNhbiBvY2N1cgogKiAyLiBQcmV2ZW50IHRleHQgZnJvbSB3cmFwcGluZyBvbnRvIG11bHRpcGxlIGxpbmVzLCBhbmQgdHJ1bmNhdGUgd2l0aCBhbiBlbGxpcHNpcwogKiAzLiBGaXggZm9yIHRhYmxlIGNlbGxzCiAqLwoudWstdGV4dC10cnVuY2F0ZSB7CiAgLyogMSAqLwogIG1heC13aWR0aDogMTAwJTsKICAvKiAyICovCiAgb3ZlcmZsb3c6IGhpZGRlbjsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9Ci8qIDIgKi8KdGgudWstdGV4dC10cnVuY2F0ZSwKdGQudWstdGV4dC10cnVuY2F0ZSB7CiAgbWF4LXdpZHRoOiAwOwp9Ci8qCiAqIFdyYXAgbG9uZyB3b3JkcyBvbnRvIHRoZSBuZXh0IGxpbmUgYW5kIGJyZWFrIHRoZW0gaWYgdGhleSBhcmUgdG9vIGxvbmcgdG8gZml0LgogKiAxLiBNYWtlIGl0IHdvcmsgd2l0aCB0YWJsZSBjZWxscyBpbiBhbGwgYnJvd3NlcnMuCiAqIE5vdGU6IE5vdCB1c2luZyBgaHlwaGVuczogYXV0b2AgYmVjYXVzZSBpdCBoeXBoZW5hdGVzIHRleHQgZXZlbiBpZiBub3QgbmVlZGVkLgogKi8KLnVrLXRleHQtYnJlYWsgewogIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7Cn0KLyogMSAqLwp0aC51ay10ZXh0LWJyZWFrLAp0ZC51ay10ZXh0LWJyZWFrIHsKICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IENvbHVtbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KW2NsYXNzKj0ndWstY29sdW1uLSddIHsKICBjb2x1bW4tZ2FwOiAzMHB4Owp9Ci8qIERlc2t0b3AgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CiAgW2NsYXNzKj0ndWstY29sdW1uLSddIHsKICAgIGNvbHVtbi1nYXA6IDQwcHg7CiAgfQp9Ci8qCiAqIEZpeCBpbWFnZSAxcHggbGluZSB3cmFwcGluZyBpbnRvIHRoZSBuZXh0IGNvbHVtbiBpbiBDaHJvbWUKICovCltjbGFzcyo9J3VrLWNvbHVtbi0nXSBpbWcgewogIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7Cn0KLyogRGl2aWRlcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gRG91YmxlIHRoZSBjb2x1bW4gZ2FwCiAqLwoudWstY29sdW1uLWRpdmlkZXIgewogIGNvbHVtbi1ydWxlOiAxcHggc29saWQgI2U1ZTVlNTsKICAvKiAxICovCiAgY29sdW1uLWdhcDogNjBweDsKfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC51ay1jb2x1bW4tZGl2aWRlciB7CiAgICBjb2x1bW4tZ2FwOiA4MHB4OwogIH0KfQovKiBXaWR0aCBtb2RpZmllcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1jb2x1bW4tMS0yIHsKICBjb2x1bW4tY291bnQ6IDI7Cn0KLnVrLWNvbHVtbi0xLTMgewogIGNvbHVtbi1jb3VudDogMzsKfQoudWstY29sdW1uLTEtNCB7CiAgY29sdW1uLWNvdW50OiA0Owp9Ci51ay1jb2x1bW4tMS01IHsKICBjb2x1bW4tY291bnQ6IDU7Cn0KLnVrLWNvbHVtbi0xLTYgewogIGNvbHVtbi1jb3VudDogNjsKfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAudWstY29sdW1uLTEtMlxAcyB7CiAgICBjb2x1bW4tY291bnQ6IDI7CiAgfQogIC51ay1jb2x1bW4tMS0zXEBzIHsKICAgIGNvbHVtbi1jb3VudDogMzsKICB9CiAgLnVrLWNvbHVtbi0xLTRcQHMgewogICAgY29sdW1uLWNvdW50OiA0OwogIH0KICAudWstY29sdW1uLTEtNVxAcyB7CiAgICBjb2x1bW4tY291bnQ6IDU7CiAgfQogIC51ay1jb2x1bW4tMS02XEBzIHsKICAgIGNvbHVtbi1jb3VudDogNjsKICB9Cn0KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogIC51ay1jb2x1bW4tMS0yXEBtIHsKICAgIGNvbHVtbi1jb3VudDogMjsKICB9CiAgLnVrLWNvbHVtbi0xLTNcQG0gewogICAgY29sdW1uLWNvdW50OiAzOwogIH0KICAudWstY29sdW1uLTEtNFxAbSB7CiAgICBjb2x1bW4tY291bnQ6IDQ7CiAgfQogIC51ay1jb2x1bW4tMS01XEBtIHsKICAgIGNvbHVtbi1jb3VudDogNTsKICB9CiAgLnVrLWNvbHVtbi0xLTZcQG0gewogICAgY29sdW1uLWNvdW50OiA2OwogIH0KfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC51ay1jb2x1bW4tMS0yXEBsIHsKICAgIGNvbHVtbi1jb3VudDogMjsKICB9CiAgLnVrLWNvbHVtbi0xLTNcQGwgewogICAgY29sdW1uLWNvdW50OiAzOwogIH0KICAudWstY29sdW1uLTEtNFxAbCB7CiAgICBjb2x1bW4tY291bnQ6IDQ7CiAgfQogIC51ay1jb2x1bW4tMS01XEBsIHsKICAgIGNvbHVtbi1jb3VudDogNTsKICB9CiAgLnVrLWNvbHVtbi0xLTZcQGwgewogICAgY29sdW1uLWNvdW50OiA2OwogIH0KfQovKiBMYXJnZSBzY3JlZW4gYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTYwMHB4KSB7CiAgLnVrLWNvbHVtbi0xLTJcQHhsIHsKICAgIGNvbHVtbi1jb3VudDogMjsKICB9CiAgLnVrLWNvbHVtbi0xLTNcQHhsIHsKICAgIGNvbHVtbi1jb3VudDogMzsKICB9CiAgLnVrLWNvbHVtbi0xLTRcQHhsIHsKICAgIGNvbHVtbi1jb3VudDogNDsKICB9CiAgLnVrLWNvbHVtbi0xLTVcQHhsIHsKICAgIGNvbHVtbi1jb3VudDogNTsKICB9CiAgLnVrLWNvbHVtbi0xLTZcQHhsIHsKICAgIGNvbHVtbi1jb3VudDogNjsKICB9Cn0KLyogTWFrZSBlbGVtZW50IHNwYW4gYWNyb3NzIGFsbCBjb2x1bW5zCiAqIERvZXMgbm90IHdvcmsgaW4gRmlyZWZveCB5ZXQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1jb2x1bW4tc3BhbiB7CiAgY29sdW1uLXNwYW46IGFsbDsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBDb3ZlcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogV29ya3Mgd2l0aCBpZnJhbWVzIGFuZCBlbWJlZGRlZCBjb250ZW50CiAqIDEuIFVzZSBhdHRyaWJ1dGUgdG8gYXBwbHkgdHJhbnNmb3JtIGluc3RhbnRseS4gTmVlZGVkIGlmIHRyYW5zZm9ybSBpcyB0cmFuc2l0aW9uZWQuCiAqIDIuIFJlc2V0IHJlc3BvbnNpdmVuZXNzIGZvciBlbWJlZGRlZCBjb250ZW50CiAqIDMuIENlbnRlciBvYmplY3QKICogTm90ZTogUGVyY2VudCB2YWx1ZXMgb24gdGhlIGB0b3BgIHByb3BlcnR5IG9ubHkgd29ya3MgaWYgdGhpcyBlbGVtZW50CiAqICAgICAgIGlzIGFic29sdXRlIHBvc2l0aW9uZWQgb3IgaWYgdGhlIGNvbnRhaW5lciBoYXMgYSBoZWlnaHQKICovCi8qIDEgKi8KW3VrLWNvdmVyXSwKW2RhdGEtdWstY292ZXJdIHsKICAvKiAyICovCiAgbWF4LXdpZHRoOiBub25lOwogIC8qIDMgKi8KICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgcmlnaHQ6IDUwJTsKICB0b3A6IDUwJTsKICAtLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS14OiA1MCU7CiAgLS11ay1wb3NpdGlvbi10cmFuc2xhdGUteTogLTUwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSh2YXIoLS11ay1wb3NpdGlvbi10cmFuc2xhdGUteCksIHZhcigtLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS15KSk7Cn0KaWZyYW1lW3VrLWNvdmVyXSwKaWZyYW1lW2RhdGEtdWstY292ZXJdIHsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQovKiBDb250YWluZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFBhcmVudCBjb250YWluZXIgd2hpY2ggY2xpcHMgcmVzaXplZCBvYmplY3QKICogMi4gTmVlZGVkIGlmIHRoZSBjaGlsZCBpcyBwb3NpdGlvbmVkIGFic29sdXRlLiBTZWUgbm90ZSBhYm92ZQogKi8KLnVrLWNvdmVyLWNvbnRhaW5lciB7CiAgLyogMSAqLwogIG92ZXJmbG93OiBoaWRkZW47CiAgLyogMiAqLwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBCYWNrZ3JvdW5kCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBDb2xvcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWJhY2tncm91bmQtZGVmYXVsdCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKfQoudWstYmFja2dyb3VuZC1tdXRlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsKfQoudWstYmFja2dyb3VuZC1wcmltYXJ5IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWU4N2YwOwp9Ci51ay1iYWNrZ3JvdW5kLXNlY29uZGFyeSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsKfQovKiBTaXplCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstYmFja2dyb3VuZC1jb3ZlciwKLnVrLWJhY2tncm91bmQtY29udGFpbiwKLnVrLWJhY2tncm91bmQtd2lkdGgtMS0xLAoudWstYmFja2dyb3VuZC1oZWlnaHQtMS0xIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNTAlOwogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7Cn0KLnVrLWJhY2tncm91bmQtY292ZXIgewogIGJhY2tncm91bmQtc2l6ZTogY292ZXI7Cn0KLnVrLWJhY2tncm91bmQtY29udGFpbiB7CiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluOwp9Ci51ay1iYWNrZ3JvdW5kLXdpZHRoLTEtMSB7CiAgYmFja2dyb3VuZC1zaXplOiAxMDAlOwp9Ci51ay1iYWNrZ3JvdW5kLWhlaWdodC0xLTEgewogIGJhY2tncm91bmQtc2l6ZTogYXV0byAxMDAlOwp9Ci8qIFBvc2l0aW9uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstYmFja2dyb3VuZC10b3AtcmlnaHQgewogIGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgMDsKfQoudWstYmFja2dyb3VuZC10b3AtY2VudGVyIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgMDsKfQoudWstYmFja2dyb3VuZC10b3AtbGVmdCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCUgMDsKfQoudWstYmFja2dyb3VuZC1jZW50ZXItcmlnaHQgewogIGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgNTAlOwp9Ci51ay1iYWNrZ3JvdW5kLWNlbnRlci1jZW50ZXIgewogIGJhY2tncm91bmQtcG9zaXRpb246IDUwJSA1MCU7Cn0KLnVrLWJhY2tncm91bmQtY2VudGVyLWxlZnQgewogIGJhY2tncm91bmQtcG9zaXRpb246IDAlIDUwJTsKfQoudWstYmFja2dyb3VuZC1ib3R0b20tcmlnaHQgewogIGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgMTAwJTsKfQoudWstYmFja2dyb3VuZC1ib3R0b20tY2VudGVyIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgMTAwJTsKfQoudWstYmFja2dyb3VuZC1ib3R0b20tbGVmdCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCUgMTAwJTsKfQovKiBSZXBlYXQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1iYWNrZ3JvdW5kLW5vcmVwZWF0IHsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Owp9Ci8qIEF0dGFjaG1lbnQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIEZpeCBidWcgaW50cm9kdWNlZCBpbiBDaHJvbWUgNjc6IHRoZSBiYWNrZ3JvdW5kIGltYWdlIGlzIG5vdCB2aXNpYmxlIGlmIGFueSBlbGVtZW50IG9uIHRoZSBwYWdlIHVzZXMgYHRyYW5zbGF0ZTNkYAogKi8KLnVrLWJhY2tncm91bmQtZml4ZWQgewogIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CiAgLyogMSAqLwogIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjsKfQovKgogKiBFeGNsdWRlIHRvdWNoIGRldmljZXMgYmVjYXVzZSBgZml4ZWRgIGRvZXNuJ3Qgd29yayBvbiBpT1MgYW5kIEFuZHJvaWQKICovCkBtZWRpYSAocG9pbnRlcjogY29hcnNlKSB7CiAgLnVrLWJhY2tncm91bmQtZml4ZWQgewogICAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBzY3JvbGw7CiAgfQp9Ci8qIEltYWdlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBQaG9uZSBwb3J0cmFpdCBhbmQgc21hbGxlciAqLwpAbWVkaWEgKG1heC13aWR0aDogNjM5cHgpIHsKICAudWstYmFja2dyb3VuZC1pbWFnZVxAcyB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lICFpbXBvcnRhbnQ7CiAgfQp9Ci8qIFBob25lIGxhbmRzY2FwZSBhbmQgc21hbGxlciAqLwpAbWVkaWEgKG1heC13aWR0aDogOTU5cHgpIHsKICAudWstYmFja2dyb3VuZC1pbWFnZVxAbSB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lICFpbXBvcnRhbnQ7CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIHNtYWxsZXIgKi8KQG1lZGlhIChtYXgtd2lkdGg6IDExOTlweCkgewogIC51ay1iYWNrZ3JvdW5kLWltYWdlXEBsIHsKICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KLyogRGVza3RvcCBhbmQgc21hbGxlciAqLwpAbWVkaWEgKG1heC13aWR0aDogMTU5OXB4KSB7CiAgLnVrLWJhY2tncm91bmQtaW1hZ2VcQHhsIHsKICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KLyogQmxlbmQgbW9kZXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1iYWNrZ3JvdW5kLWJsZW5kLW11bHRpcGx5IHsKICBiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6IG11bHRpcGx5Owp9Ci51ay1iYWNrZ3JvdW5kLWJsZW5kLXNjcmVlbiB7CiAgYmFja2dyb3VuZC1ibGVuZC1tb2RlOiBzY3JlZW47Cn0KLnVrLWJhY2tncm91bmQtYmxlbmQtb3ZlcmxheSB7CiAgYmFja2dyb3VuZC1ibGVuZC1tb2RlOiBvdmVybGF5Owp9Ci51ay1iYWNrZ3JvdW5kLWJsZW5kLWRhcmtlbiB7CiAgYmFja2dyb3VuZC1ibGVuZC1tb2RlOiBkYXJrZW47Cn0KLnVrLWJhY2tncm91bmQtYmxlbmQtbGlnaHRlbiB7CiAgYmFja2dyb3VuZC1ibGVuZC1tb2RlOiBsaWdodGVuOwp9Ci51ay1iYWNrZ3JvdW5kLWJsZW5kLWNvbG9yLWRvZGdlIHsKICBiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6IGNvbG9yLWRvZGdlOwp9Ci51ay1iYWNrZ3JvdW5kLWJsZW5kLWNvbG9yLWJ1cm4gewogIGJhY2tncm91bmQtYmxlbmQtbW9kZTogY29sb3ItYnVybjsKfQoudWstYmFja2dyb3VuZC1ibGVuZC1oYXJkLWxpZ2h0IHsKICBiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6IGhhcmQtbGlnaHQ7Cn0KLnVrLWJhY2tncm91bmQtYmxlbmQtc29mdC1saWdodCB7CiAgYmFja2dyb3VuZC1ibGVuZC1tb2RlOiBzb2Z0LWxpZ2h0Owp9Ci51ay1iYWNrZ3JvdW5kLWJsZW5kLWRpZmZlcmVuY2UgewogIGJhY2tncm91bmQtYmxlbmQtbW9kZTogZGlmZmVyZW5jZTsKfQoudWstYmFja2dyb3VuZC1ibGVuZC1leGNsdXNpb24gewogIGJhY2tncm91bmQtYmxlbmQtbW9kZTogZXhjbHVzaW9uOwp9Ci51ay1iYWNrZ3JvdW5kLWJsZW5kLWh1ZSB7CiAgYmFja2dyb3VuZC1ibGVuZC1tb2RlOiBodWU7Cn0KLnVrLWJhY2tncm91bmQtYmxlbmQtc2F0dXJhdGlvbiB7CiAgYmFja2dyb3VuZC1ibGVuZC1tb2RlOiBzYXR1cmF0aW9uOwp9Ci51ay1iYWNrZ3JvdW5kLWJsZW5kLWNvbG9yIHsKICBiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6IGNvbG9yOwp9Ci51ay1iYWNrZ3JvdW5kLWJsZW5kLWx1bWlub3NpdHkgewogIGJhY2tncm91bmQtYmxlbmQtbW9kZTogbHVtaW5vc2l0eTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBBbGlnbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogRGVmYXVsdAogKi8KW2NsYXNzKj0ndWstYWxpZ24nXSB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luLWJvdHRvbTogMzBweDsKfQoqICsgW2NsYXNzKj0ndWstYWxpZ24nXSB7CiAgbWFyZ2luLXRvcDogMzBweDsKfQovKgogKiBDZW50ZXIKICovCi51ay1hbGlnbi1jZW50ZXIgewogIG1hcmdpbi1yaWdodDogYXV0bzsKICBtYXJnaW4tbGVmdDogYXV0bzsKfQovKgogKiBMZWZ0L1JpZ2h0CiAqLwoudWstYWxpZ24tcmlnaHQgewogIG1hcmdpbi10b3A6IDA7CiAgbWFyZ2luLWxlZnQ6IDMwcHg7CiAgZmxvYXQ6IHJpZ2h0Owp9Ci51ay1hbGlnbi1sZWZ0IHsKICBtYXJnaW4tdG9wOiAwOwogIG1hcmdpbi1yaWdodDogMzBweDsKICBmbG9hdDogbGVmdDsKfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAudWstYWxpZ24tcmlnaHRcQHMgewogICAgbWFyZ2luLXRvcDogMDsKICAgIG1hcmdpbi1sZWZ0OiAzMHB4OwogICAgZmxvYXQ6IHJpZ2h0OwogIH0KICAudWstYWxpZ24tbGVmdFxAcyB7CiAgICBtYXJnaW4tdG9wOiAwOwogICAgbWFyZ2luLXJpZ2h0OiAzMHB4OwogICAgZmxvYXQ6IGxlZnQ7CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstYWxpZ24tcmlnaHRcQG0gewogICAgbWFyZ2luLXRvcDogMDsKICAgIG1hcmdpbi1sZWZ0OiAzMHB4OwogICAgZmxvYXQ6IHJpZ2h0OwogIH0KICAudWstYWxpZ24tbGVmdFxAbSB7CiAgICBtYXJnaW4tdG9wOiAwOwogICAgbWFyZ2luLXJpZ2h0OiAzMHB4OwogICAgZmxvYXQ6IGxlZnQ7CiAgfQp9Ci8qIERlc2t0b3AgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CiAgLnVrLWFsaWduLXJpZ2h0XEBsIHsKICAgIG1hcmdpbi10b3A6IDA7CiAgICBmbG9hdDogcmlnaHQ7CiAgfQogIC51ay1hbGlnbi1sZWZ0XEBsIHsKICAgIG1hcmdpbi10b3A6IDA7CiAgICBmbG9hdDogbGVmdDsKICB9CiAgLnVrLWFsaWduLXJpZ2h0LAogIC51ay1hbGlnbi1yaWdodFxAcywKICAudWstYWxpZ24tcmlnaHRcQG0sCiAgLnVrLWFsaWduLXJpZ2h0XEBsIHsKICAgIG1hcmdpbi1sZWZ0OiA0MHB4OwogIH0KICAudWstYWxpZ24tbGVmdCwKICAudWstYWxpZ24tbGVmdFxAcywKICAudWstYWxpZ24tbGVmdFxAbSwKICAudWstYWxpZ24tbGVmdFxAbCB7CiAgICBtYXJnaW4tcmlnaHQ6IDQwcHg7CiAgfQp9Ci8qIExhcmdlIHNjcmVlbiBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxNjAwcHgpIHsKICAudWstYWxpZ24tcmlnaHRcQHhsIHsKICAgIG1hcmdpbi10b3A6IDA7CiAgICBtYXJnaW4tbGVmdDogNDBweDsKICAgIGZsb2F0OiByaWdodDsKICB9CiAgLnVrLWFsaWduLWxlZnRcQHhsIHsKICAgIG1hcmdpbi10b3A6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IDQwcHg7CiAgICBmbG9hdDogbGVmdDsKICB9Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogU1ZHCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBGaWxsIGFsbCBTVkcgZWxlbWVudHMgd2l0aCB0aGUgY3VycmVudCB0ZXh0IGNvbG9yIGlmIG5vIGBmaWxsYCBhdHRyaWJ1dGUgaXMgc2V0CiAqIDIuIFNldCB0aGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9yIG9mIGFsbCBTVkcgZWxlbWVudHMgdG8gdGhlIGN1cnJlbnQgdGV4dCBjb2xvcgogKi8KLyogMSAqLwoudWstc3ZnLAoudWstc3ZnOm5vdCgudWstcHJlc2VydmUpIFtmaWxsKj0nIyddOm5vdCgudWstcHJlc2VydmUpIHsKICBmaWxsOiBjdXJyZW50Y29sb3I7Cn0KLnVrLXN2Zzpub3QoLnVrLXByZXNlcnZlKSBbc3Ryb2tlKj0nIyddOm5vdCgudWstcHJlc2VydmUpIHsKICBzdHJva2U6IGN1cnJlbnRjb2xvcjsKfQovKgogKiBGaXggRmlyZWZveCBibHVycnkgU1ZHIHJlbmRlcmluZzogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0NjgzNQogKi8KLnVrLXN2ZyB7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogVXRpbGl0eQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogUGFuZWwKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1wYW5lbCB7CiAgZGlzcGxheTogZmxvdy1yb290OwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9Ci8qCiAqIFJlbW92ZSBtYXJnaW4gZnJvbSB0aGUgbGFzdC1jaGlsZAogKi8KLnVrLXBhbmVsID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KLyoKICogU2Nyb2xsYWJsZQogKi8KLnVrLXBhbmVsLXNjcm9sbGFibGUgewogIGhlaWdodDogMTcwcHg7CiAgcGFkZGluZzogMTBweDsKICBib3JkZXI6IDFweCBzb2xpZCAjZTVlNWU1OwogIG92ZXJmbG93OiBhdXRvOwogIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICByZXNpemU6IGJvdGg7Cn0KLyogQ2xlYXJmaXgKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIGB0YWJsZS1jZWxsYCBpcyB1c2VkIHdpdGggYDo6YmVmb3JlYCBiZWNhdXNlIGB0YWJsZWAgY3JlYXRlcyBhIDFweCBnYXAgd2hlbiBpdCBiZWNvbWVzIGEgZmxleCBpdGVtLCBvbmx5IGluIFdlYmtpdAogKiAyLiBgdGFibGVgIGlzIHVzZWQgYWdhaW4gd2l0aCBgOjphZnRlcmAgYmVjYXVzZSBgY2xlYXJgIG9ubHkgd29ya3Mgd2l0aCBibG9jayBlbGVtZW50cy4KICogTm90ZTogYGRpc3BsYXk6IGJsb2NrYCB3aXRoIGBvdmVyZmxvdzogaGlkZGVuYCBpcyBjdXJyZW50bHkgbm90IHdvcmtpbmcgaW4gdGhlIGxhdGVzdCBTYWZhcmkKICovCi8qIDEgKi8KLnVrLWNsZWFyZml4OjpiZWZvcmUgewogIGNvbnRlbnQ6ICIiOwogIGRpc3BsYXk6IHRhYmxlLWNlbGw7Cn0KLyogMiAqLwoudWstY2xlYXJmaXg6OmFmdGVyIHsKICBjb250ZW50OiAiIjsKICBkaXNwbGF5OiB0YWJsZTsKICBjbGVhcjogYm90aDsKfQovKiBGbG9hdAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gUHJldmVudCBjb250ZW50IG92ZXJmbG93CiAqLwoudWstZmxvYXQtcmlnaHQgewogIGZsb2F0OiByaWdodDsKfQoudWstZmxvYXQtbGVmdCB7CiAgZmxvYXQ6IGxlZnQ7Cn0KLyogMSAqLwpbY2xhc3MqPSd1ay1mbG9hdC0nXSB7CiAgbWF4LXdpZHRoOiAxMDAlOwp9Ci8qIE92ZXJmb3cKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1vdmVyZmxvdy1oaWRkZW4gewogIG92ZXJmbG93OiBoaWRkZW47Cn0KLyoKICogRW5hYmxlIHNjcm9sbGJhcnMgaWYgY29udGVudCBpcyBjbGlwcGVkCiAqLwoudWstb3ZlcmZsb3ctYXV0byB7CiAgb3ZlcmZsb3c6IGF1dG87CiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwp9Ci51ay1vdmVyZmxvdy1hdXRvID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KLyogQm94IFNpemluZwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWJveC1zaXppbmctY29udGVudCB7CiAgYm94LXNpemluZzogY29udGVudC1ib3g7Cn0KLnVrLWJveC1zaXppbmctYm9yZGVyIHsKICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9Ci8qIFJlc2l6ZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXJlc2l6ZSB7CiAgcmVzaXplOiBib3RoOwp9Ci51ay1yZXNpemUtaG9yaXpvbnRhbCB7CiAgcmVzaXplOiBob3Jpem9udGFsOwp9Ci51ay1yZXNpemUtdmVydGljYWwgewogIHJlc2l6ZTogdmVydGljYWw7Cn0KLyogRGlzcGxheQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWRpc3BsYXktYmxvY2sgewogIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7Cn0KLnVrLWRpc3BsYXktaW5saW5lIHsKICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsKfQoudWstZGlzcGxheS1pbmxpbmUtYmxvY2sgewogIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50Owp9Ci8qIElubGluZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gQ29udGFpbmVyIGZpdHMgaXRzIGNvbnRlbnQKICogMi4gQ3JlYXRlIHBvc2l0aW9uIGNvbnRleHQKICogMy4gUHJldmVudCBjb250ZW50IG92ZXJmbG93CiAqIDQuIEJlaGF2ZSBsaWtlIG1vc3QgaW5saW5lLWJsb2NrIGVsZW1lbnRzCiAqIDUuIEZvcmNlIG5ldyBsYXllciB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHN0YWNraW5nIGNvbnRleHQKICogICAgdG8gZml4IDFweCBnbGl0Y2ggd2hlbiBjb21iaW5lZCB3aXRoIG92ZXJsYXlzIGFuZCB0cmFuc2l0aW9ucyBpbiBXZWJraXQKICogNi4gQ2xpcCBjaGlsZCBlbGVtZW50cwogKi8KW2NsYXNzKj0ndWstaW5saW5lJ10gewogIC8qIDEgKi8KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgLyogMiAqLwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAvKiAzICovCiAgbWF4LXdpZHRoOiAxMDAlOwogIC8qIDQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIC8qIDUgKi8KICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjsKfQoudWstaW5saW5lLWNsaXAgewogIC8qIDYgKi8KICBvdmVyZmxvdzogaGlkZGVuOwp9Ci8qIFJlc3BvbnNpdmUgb2JqZWN0cwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogUHJlc2VydmUgb3JpZ2luYWwgZGltZW5zaW9ucwogKiBCZWNhdXNlIGBpbWcsIGB2aWRlb2AsIGBjYW52YXNgIGFuZCAgYGF1ZGlvYCBhcmUgYWxyZWFkeSByZXNwb25zaXZlIGJ5IGRlZmF1bHQsIHNlZSBCYXNlIGNvbXBvbmVudAogKi8KLnVrLXByZXNlcnZlLXdpZHRoLAoudWstcHJlc2VydmUtd2lkdGggY2FudmFzLAoudWstcHJlc2VydmUtd2lkdGggaW1nLAoudWstcHJlc2VydmUtd2lkdGggc3ZnLAoudWstcHJlc2VydmUtd2lkdGggdmlkZW8gewogIG1heC13aWR0aDogbm9uZTsKfQovKgogKiBSZXNwb25zaXZlbmVzcwogKiBDb3JyZWN0cyBgbWF4LXdpZHRoYCBhbmQgYG1heC1oZWlnaHRgIGJlaGF2aW9yIGlmIHBhZGRpbmcgYW5kIGJvcmRlciBhcmUgdXNlZAogKi8KLnVrLXJlc3BvbnNpdmUtd2lkdGgsCi51ay1yZXNwb25zaXZlLWhlaWdodCB7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQovKgogKiAxLiBTZXQgYSBtYXhpbXVtIHdpZHRoLiBgaW1wb3J0YW50YCBuZWVkZWQgdG8gb3ZlcnJpZGUgYHVrLXByZXNlcnZlLXdpZHRoIGltZ2AKICogMi4gQXV0byBzY2FsZSB0aGUgaGVpZ2h0LiBPbmx5IG5lZWRlZCBpZiBgaGVpZ2h0YCBhdHRyaWJ1dGUgaXMgcHJlc2VudAogKi8KLnVrLXJlc3BvbnNpdmUtd2lkdGggewogIC8qIDEgKi8KICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAvKiAyICovCiAgaGVpZ2h0OiBhdXRvOwp9Ci8qCiAqIDEuIFNldCBhIG1heGltdW0gaGVpZ2h0LiBPbmx5IHdvcmtzIGlmIHRoZSBwYXJlbnQgZWxlbWVudCBoYXMgYSBmaXhlZCBoZWlnaHQKICogMi4gQXV0byBzY2FsZSB0aGUgd2lkdGguIE9ubHkgbmVlZGVkIGlmIGB3aWR0aGAgYXR0cmlidXRlIGlzIHByZXNlbnQKICogMy4gUmVzZXQgbWF4LXdpZHRoLCB3aGljaCBgaW1nLCBgdmlkZW9gLCBgY2FudmFzYCBhbmQgIGBhdWRpb2AgYWxyZWFkeSBoYXZlIGJ5IGRlZmF1bHQKICovCi51ay1yZXNwb25zaXZlLWhlaWdodCB7CiAgLyogMSAqLwogIG1heC1oZWlnaHQ6IDEwMCU7CiAgLyogMiAqLwogIHdpZHRoOiBhdXRvOwogIC8qIDMgKi8KICBtYXgtd2lkdGg6IG5vbmU7Cn0KLyoKICogRml4IGluaXRpYWwgaWZyYW1lIHdpZHRoLiBXaXRob3V0IHRoZSB2aWV3cG9ydCBpcyBleHBhbmRlZCBvbiBpT1MgZGV2aWNlcwogKi8KW3VrLXJlc3BvbnNpdmVdLApbZGF0YS11ay1yZXNwb25zaXZlXSB7CiAgbWF4LXdpZHRoOiAxMDAlOwp9Ci8qIE9iamVjdAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLW9iamVjdC1jb3ZlciB7CiAgb2JqZWN0LWZpdDogY292ZXI7Cn0KLnVrLW9iamVjdC1jb250YWluIHsKICBvYmplY3QtZml0OiBjb250YWluOwp9Ci51ay1vYmplY3QtZmlsbCB7CiAgb2JqZWN0LWZpdDogZmlsbDsKfQoudWstb2JqZWN0LW5vbmUgewogIG9iamVjdC1maXQ6IG5vbmU7Cn0KLnVrLW9iamVjdC1zY2FsZS1kb3duIHsKICBvYmplY3QtZml0OiBzY2FsZS1kb3duOwp9Ci8qIAogKiBQb3NpdGlvbgogKi8KLnVrLW9iamVjdC10b3AtcmlnaHQgewogIG9iamVjdC1wb3NpdGlvbjogMTAwJSAwOwp9Ci51ay1vYmplY3QtdG9wLWNlbnRlciB7CiAgb2JqZWN0LXBvc2l0aW9uOiA1MCUgMDsKfQoudWstb2JqZWN0LXRvcC1sZWZ0IHsKICBvYmplY3QtcG9zaXRpb246IDAlIDA7Cn0KLnVrLW9iamVjdC1jZW50ZXItcmlnaHQgewogIG9iamVjdC1wb3NpdGlvbjogMTAwJSA1MCU7Cn0KLnVrLW9iamVjdC1jZW50ZXItY2VudGVyIHsKICBvYmplY3QtcG9zaXRpb246IDUwJSA1MCU7Cn0KLnVrLW9iamVjdC1jZW50ZXItbGVmdCB7CiAgb2JqZWN0LXBvc2l0aW9uOiAwJSA1MCU7Cn0KLnVrLW9iamVjdC1ib3R0b20tcmlnaHQgewogIG9iamVjdC1wb3NpdGlvbjogMTAwJSAxMDAlOwp9Ci51ay1vYmplY3QtYm90dG9tLWNlbnRlciB7CiAgb2JqZWN0LXBvc2l0aW9uOiA1MCUgMTAwJTsKfQoudWstb2JqZWN0LWJvdHRvbS1sZWZ0IHsKICBvYmplY3QtcG9zaXRpb246IDAlIDEwMCU7Cn0KLyogQm9yZGVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstYm9yZGVyLWNpcmNsZSB7CiAgYm9yZGVyLXJhZGl1czogNTAlOwp9Ci51ay1ib3JkZXItcGlsbCB7CiAgYm9yZGVyLXJhZGl1czogNTAwcHg7Cn0KLnVrLWJvcmRlci1yb3VuZGVkIHsKICBib3JkZXItcmFkaXVzOiA1cHg7Cn0KLyoKICogRml4IGBvdmVyZmxvdzogaGlkZGVuYCB0byBiZSBpZ25vcmVkIHdpdGggYm9yZGVyLXJhZGl1cyBhbmQgQ1NTIHRyYW5zZm9ybXMgaW4gV2Via2l0CiAqLwoudWstaW5saW5lLWNsaXBbY2xhc3MqPSd1ay1ib3JkZXItJ10gewogIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwp9Ci8qIEJveC1zaGFkb3cKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1ib3gtc2hhZG93LXNtYWxsIHsKICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjA4KTsKfQoudWstYm94LXNoYWRvdy1tZWRpdW0gewogIGJveC1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjA4KTsKfQoudWstYm94LXNoYWRvdy1sYXJnZSB7CiAgYm94LXNoYWRvdzogMCAxNHB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjE2KTsKfQoudWstYm94LXNoYWRvdy14bGFyZ2UgewogIGJveC1zaGFkb3c6IDAgMjhweCA1MHB4IHJnYmEoMCwgMCwgMCwgMC4xNik7Cn0KLyoKICogSG92ZXIKICovCltjbGFzcyo9J3VrLWJveC1zaGFkb3ctaG92ZXInXSB7CiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjFzIGVhc2UtaW4tb3V0Owp9Ci51ay1ib3gtc2hhZG93LWhvdmVyLXNtYWxsOmhvdmVyIHsKICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjA4KTsKfQoudWstYm94LXNoYWRvdy1ob3Zlci1tZWRpdW06aG92ZXIgewogIGJveC1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjA4KTsKfQoudWstYm94LXNoYWRvdy1ob3Zlci1sYXJnZTpob3ZlciB7CiAgYm94LXNoYWRvdzogMCAxNHB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjE2KTsKfQoudWstYm94LXNoYWRvdy1ob3Zlci14bGFyZ2U6aG92ZXIgewogIGJveC1zaGFkb3c6IDAgMjhweCA1MHB4IHJnYmEoMCwgMCwgMCwgMC4xNik7Cn0KLyogQm94LXNoYWRvdyBib3R0b20KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFNldCBwb3NpdGlvbi4KICogMi4gU2V0IHN0eWxlCiAqIDMuIEZpeCBzaGFkb3cgYmVpbmcgY2xpcHBlZCBpbiBTYWZhcmkgaWYgY29udGFpbmVyIGlzIGFuaW1hdGVkCiAqLwpAc3VwcG9ydHMgKGZpbHRlcjogYmx1cigwKSkgewogIC51ay1ib3gtc2hhZG93LWJvdHRvbSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAwOwogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICB9CiAgLnVrLWJveC1zaGFkb3ctYm90dG9tOjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIC8qIDEgKi8KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJvdHRvbTogLTMwcHg7CiAgICByaWdodDogMDsKICAgIGxlZnQ6IDA7CiAgICB6LWluZGV4OiAtMTsKICAgIC8qIDIgKi8KICAgIGhlaWdodDogMzBweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICBiYWNrZ3JvdW5kOiAjNDQ0OwogICAgZmlsdGVyOiBibHVyKDIwcHgpOwogICAgLyogMyAqLwogICAgd2lsbC1jaGFuZ2U6IGZpbHRlcjsKICB9Cn0KLyogRHJvcCBjYXAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIEZpcmVmb3ggZG9lc24ndCBhcHBseSBgOjpmaXJzdC1sZXR0ZXJgIGlmIHRoZSBmaXJzdCBsZXR0ZXIgaXMgaW5zaWRlIGNoaWxkIGVsZW1lbnRzCiAqICAgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDAwNAogKiAyLiBJbiBGaXJlZm94LCBhIGZsb2F0aW5nIGA6OmZpcnN0LWxldHRlcmAgZG9lc24ndCBoYXZlIGEgbGluZSBib3ggYW5kIHRoZXJlIGZvciBubyBgbGluZS1oZWlnaHRgCiAqICAgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTMxNzkzMwogKi8KLnVrLWRyb3BjYXA6OmZpcnN0LWxldHRlciwKLnVrLWRyb3BjYXAgPiBwOmZpcnN0LW9mLXR5cGU6OmZpcnN0LWxldHRlciB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgZmxvYXQ6IHJpZ2h0OwogIGZvbnQtc2l6ZTogNC41ZW07CiAgbGluZS1oZWlnaHQ6IDE7CiAgbWFyZ2luLWJvdHRvbTogLTJweDsKfQovKiAyICovCkAtbW96LWRvY3VtZW50IHVybC1wcmVmaXgoKSB7CiAgLnVrLWRyb3BjYXA6OmZpcnN0LWxldHRlciwKICAudWstZHJvcGNhcCA+IHA6Zmlyc3Qtb2YtdHlwZTo6Zmlyc3QtbGV0dGVyIHsKICAgIG1hcmdpbi10b3A6IDEuMSU7CiAgfQp9Ci8qIExvZ28KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFN0eWxlCiAqIDIuIFJlcXVpcmVkIGZvciBgYWAKICogMy4gQmVoYXZlIGxpa2UgaW1hZ2UgYnV0IGNhbiBiZSBvdmVycmlkZGVuIHRocm91Z2ggZmxleCB1dGlsaXR5IGNsYXNzZXMKICovCi51ay1sb2dvIHsKICAvKiAxICovCiAgZm9udC1zaXplOiAxLjVyZW07CiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBBcmlhbCwgIk5vdG8gU2FucyIsIHNhbnMtc2VyaWYsICJBcHBsZSBDb2xvciBFbW9qaSIsICJTZWdvZSBVSSBFbW9qaSIsICJTZWdvZSBVSSBTeW1ib2wiLCAiTm90byBDb2xvciBFbW9qaSI7CiAgY29sb3I6ICMzMzM7CiAgLyogMiAqLwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQovKiAzICovCjp3aGVyZSgudWstbG9nbykgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9Ci8qIEhvdmVyICovCi51ay1sb2dvOmhvdmVyIHsKICBjb2xvcjogIzMzMzsKICAvKiAxICovCiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci51ay1sb2dvIDp3aGVyZShpbWcsIHN2ZywgdmlkZW8pIHsKICBkaXNwbGF5OiBibG9jazsKfQoudWstbG9nby1pbnZlcnNlIHsKICBkaXNwbGF5OiBub25lOwp9Ci8qIERpc2FibGVkIFN0YXRlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstZGlzYWJsZWQgewogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Ci8qIERyYWcgU3RhdGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIE5lZWRlZCBpZiBtb3Zpbmcgb3ZlciBlbGVtZW50cyB3aXRoIGhhdmUgdGhlaXIgb3duIGN1cnNvciBvbiBob3ZlciwgZS5nLiBsaW5rcyBvciBidXR0b25zCiAqIDIuIEZpeCBkcmFnZ2luZyBvdmVyIGlmcmFtZXMKICovCi51ay1kcmFnLAoudWstZHJhZyAqIHsKICBjdXJzb3I6IG1vdmU7Cn0KLyogMiAqLwoudWstZHJhZyBpZnJhbWUgewogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Ci8qIERyYWdvdmVyIFN0YXRlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBDcmVhdGUgYSBib3gtc2hhZG93IHdoZW4gZHJhZ2dpbmcgYSBmaWxlIG92ZXIgdGhlIHVwbG9hZCBhcmVhCiAqLwoudWstZHJhZ292ZXIgewogIGJveC1zaGFkb3c6IDAgMCAyMHB4IHJnYmEoMTAwLCAxMDAsIDEwMCwgMC4zKTsKfQovKiBCbGVuZCBtb2RlcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWJsZW5kLW11bHRpcGx5IHsKICBtaXgtYmxlbmQtbW9kZTogbXVsdGlwbHk7Cn0KLnVrLWJsZW5kLXNjcmVlbiB7CiAgbWl4LWJsZW5kLW1vZGU6IHNjcmVlbjsKfQoudWstYmxlbmQtb3ZlcmxheSB7CiAgbWl4LWJsZW5kLW1vZGU6IG92ZXJsYXk7Cn0KLnVrLWJsZW5kLWRhcmtlbiB7CiAgbWl4LWJsZW5kLW1vZGU6IGRhcmtlbjsKfQoudWstYmxlbmQtbGlnaHRlbiB7CiAgbWl4LWJsZW5kLW1vZGU6IGxpZ2h0ZW47Cn0KLnVrLWJsZW5kLWNvbG9yLWRvZGdlIHsKICBtaXgtYmxlbmQtbW9kZTogY29sb3ItZG9kZ2U7Cn0KLnVrLWJsZW5kLWNvbG9yLWJ1cm4gewogIG1peC1ibGVuZC1tb2RlOiBjb2xvci1idXJuOwp9Ci51ay1ibGVuZC1oYXJkLWxpZ2h0IHsKICBtaXgtYmxlbmQtbW9kZTogaGFyZC1saWdodDsKfQoudWstYmxlbmQtc29mdC1saWdodCB7CiAgbWl4LWJsZW5kLW1vZGU6IHNvZnQtbGlnaHQ7Cn0KLnVrLWJsZW5kLWRpZmZlcmVuY2UgewogIG1peC1ibGVuZC1tb2RlOiBkaWZmZXJlbmNlOwp9Ci51ay1ibGVuZC1leGNsdXNpb24gewogIG1peC1ibGVuZC1tb2RlOiBleGNsdXNpb247Cn0KLnVrLWJsZW5kLWh1ZSB7CiAgbWl4LWJsZW5kLW1vZGU6IGh1ZTsKfQoudWstYmxlbmQtc2F0dXJhdGlvbiB7CiAgbWl4LWJsZW5kLW1vZGU6IHNhdHVyYXRpb247Cn0KLnVrLWJsZW5kLWNvbG9yIHsKICBtaXgtYmxlbmQtbW9kZTogY29sb3I7Cn0KLnVrLWJsZW5kLWx1bWlub3NpdHkgewogIG1peC1ibGVuZC1tb2RlOiBsdW1pbm9zaXR5Owp9Ci8qIFRyYW5zZm9ybQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstdHJhbnNmb3JtLWNlbnRlciB7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNTAlLCAtNTAlKTsKfQovKiBUcmFuc2Zvcm0gT3JpZ2luCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay10cmFuc2Zvcm0tb3JpZ2luLXRvcC1yaWdodCB7CiAgdHJhbnNmb3JtLW9yaWdpbjogMTAwJSAwOwp9Ci51ay10cmFuc2Zvcm0tb3JpZ2luLXRvcC1jZW50ZXIgewogIHRyYW5zZm9ybS1vcmlnaW46IDUwJSAwOwp9Ci51ay10cmFuc2Zvcm0tb3JpZ2luLXRvcC1sZWZ0IHsKICB0cmFuc2Zvcm0tb3JpZ2luOiAwJSAwOwp9Ci51ay10cmFuc2Zvcm0tb3JpZ2luLWNlbnRlci1yaWdodCB7CiAgdHJhbnNmb3JtLW9yaWdpbjogMTAwJSA1MCU7Cn0KLnVrLXRyYW5zZm9ybS1vcmlnaW4tY2VudGVyLWxlZnQgewogIHRyYW5zZm9ybS1vcmlnaW46IDAlIDUwJTsKfQoudWstdHJhbnNmb3JtLW9yaWdpbi1ib3R0b20tcmlnaHQgewogIHRyYW5zZm9ybS1vcmlnaW46IDEwMCUgMTAwJTsKfQoudWstdHJhbnNmb3JtLW9yaWdpbi1ib3R0b20tY2VudGVyIHsKICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMTAwJTsKfQoudWstdHJhbnNmb3JtLW9yaWdpbi1ib3R0b20tbGVmdCB7CiAgdHJhbnNmb3JtLW9yaWdpbjogMCUgMTAwJTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBGbGV4CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstZmxleCB7CiAgZGlzcGxheTogZmxleDsKfQoudWstZmxleC1pbmxpbmUgewogIGRpc3BsYXk6IGlubGluZS1mbGV4Owp9Ci8qIEFsaWdubWVudAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogQWxpZ24gaXRlbXMgYWxvbmcgdGhlIG1haW4gYXhpcyBvZiB0aGUgY3VycmVudCBsaW5lIG9mIHRoZSBmbGV4IGNvbnRhaW5lcgogKiBSb3c6IEhvcml6b250YWwKICovCi51ay1mbGV4LXJpZ2h0IHsKICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7Cn0KLnVrLWZsZXgtY2VudGVyIHsKICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKfQoudWstZmxleC1sZWZ0IHsKICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwp9Ci51ay1mbGV4LWJldHdlZW4gewogIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKfQoudWstZmxleC1hcm91bmQgewogIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwp9Ci8qIFBob25lIGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgewogIC51ay1mbGV4LXJpZ2h0XEBzIHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICB9CiAgLnVrLWZsZXgtY2VudGVyXEBzIHsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogIH0KICAudWstZmxleC1sZWZ0XEBzIHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgfQogIC51ay1mbGV4LWJldHdlZW5cQHMgewogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogIH0KICAudWstZmxleC1hcm91bmRcQHMgewogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstZmxleC1yaWdodFxAbSB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgfQogIC51ay1mbGV4LWNlbnRlclxAbSB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICB9CiAgLnVrLWZsZXgtbGVmdFxAbSB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogIH0KICAudWstZmxleC1iZXR3ZWVuXEBtIHsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICB9CiAgLnVrLWZsZXgtYXJvdW5kXEBtIHsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogIH0KfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC51ay1mbGV4LXJpZ2h0XEBsIHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICB9CiAgLnVrLWZsZXgtY2VudGVyXEBsIHsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogIH0KICAudWstZmxleC1sZWZ0XEBsIHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgfQogIC51ay1mbGV4LWJldHdlZW5cQGwgewogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogIH0KICAudWstZmxleC1hcm91bmRcQGwgewogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgfQp9Ci8qIExhcmdlIHNjcmVlbiBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxNjAwcHgpIHsKICAudWstZmxleC1yaWdodFxAeGwgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogIH0KICAudWstZmxleC1jZW50ZXJcQHhsIHsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogIH0KICAudWstZmxleC1sZWZ0XEB4bCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogIH0KICAudWstZmxleC1iZXR3ZWVuXEB4bCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgfQogIC51ay1mbGV4LWFyb3VuZFxAeGwgewogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgfQp9Ci8qCiAqIEFsaWduIGl0ZW1zIGluIHRoZSBjcm9zcyBheGlzIG9mIHRoZSBjdXJyZW50IGxpbmUgb2YgdGhlIGZsZXggY29udGFpbmVyCiAqIFJvdzogVmVydGljYWwKICovCi51ay1mbGV4LXN0cmV0Y2ggewogIGFsaWduLWl0ZW1zOiBzdHJldGNoOwp9Ci51ay1mbGV4LXRvcCB7CiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7Cn0KLnVrLWZsZXgtbWlkZGxlIHsKICBhbGlnbi1pdGVtczogY2VudGVyOwp9Ci51ay1mbGV4LWJvdHRvbSB7CiAgYWxpZ24taXRlbXM6IGZsZXgtZW5kOwp9Ci8qIERpcmVjdGlvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWZsZXgtcm93IHsKICBmbGV4LWRpcmVjdGlvbjogcm93Owp9Ci51ay1mbGV4LXJvdy1yZXZlcnNlIHsKICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7Cn0KLnVrLWZsZXgtY29sdW1uIHsKICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwp9Ci51ay1mbGV4LWNvbHVtbi1yZXZlcnNlIHsKICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7Cn0KLyogV3JhcAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWZsZXgtbm93cmFwIHsKICBmbGV4LXdyYXA6IG5vd3JhcDsKfQoudWstZmxleC13cmFwIHsKICBmbGV4LXdyYXA6IHdyYXA7Cn0KLnVrLWZsZXgtd3JhcC1yZXZlcnNlIHsKICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKfQovKgogKiBBbGlnbnMgaXRlbXMgd2l0aGluIHRoZSBmbGV4IGNvbnRhaW5lciB3aGVuIHRoZXJlIGlzIGV4dHJhIHNwYWNlIGluIHRoZSBjcm9zcy1heGlzCiAqIE9ubHkgd29ya3MgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBsaW5lIG9mIGZsZXggaXRlbXMKICovCi51ay1mbGV4LXdyYXAtc3RyZXRjaCB7CiAgYWxpZ24tY29udGVudDogc3RyZXRjaDsKfQoudWstZmxleC13cmFwLXRvcCB7CiAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKfQoudWstZmxleC13cmFwLW1pZGRsZSB7CiAgYWxpZ24tY29udGVudDogY2VudGVyOwp9Ci51ay1mbGV4LXdyYXAtYm90dG9tIHsKICBhbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKfQoudWstZmxleC13cmFwLWJldHdlZW4gewogIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47Cn0KLnVrLWZsZXgtd3JhcC1hcm91bmQgewogIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKfQovKiBJdGVtIG9yZGVyaW5nCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBEZWZhdWx0IGlzIDAKICovCi51ay1mbGV4LWZpcnN0IHsKICBvcmRlcjogLTE7Cn0KLnVrLWZsZXgtbGFzdCB7CiAgb3JkZXI6IDk5Owp9Ci8qIFBob25lIGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgewogIC51ay1mbGV4LWZpcnN0XEBzIHsKICAgIG9yZGVyOiAtMTsKICB9CiAgLnVrLWZsZXgtbGFzdFxAcyB7CiAgICBvcmRlcjogOTk7CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstZmxleC1maXJzdFxAbSB7CiAgICBvcmRlcjogLTE7CiAgfQogIC51ay1mbGV4LWxhc3RcQG0gewogICAgb3JkZXI6IDk5OwogIH0KfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC51ay1mbGV4LWZpcnN0XEBsIHsKICAgIG9yZGVyOiAtMTsKICB9CiAgLnVrLWZsZXgtbGFzdFxAbCB7CiAgICBvcmRlcjogOTk7CiAgfQp9Ci8qIExhcmdlIHNjcmVlbiBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxNjAwcHgpIHsKICAudWstZmxleC1maXJzdFxAeGwgewogICAgb3JkZXI6IC0xOwogIH0KICAudWstZmxleC1sYXN0XEB4bCB7CiAgICBvcmRlcjogOTk7CiAgfQp9Ci8qIEl0ZW0gZGltZW5zaW9ucwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogSW5pdGlhbDogMCAxIGF1dG8KICogQ29udGVudCBkaW1lbnNpb25zLCBidXQgc2hyaW5rcwogKi8KLyoKICogTm8gRmxleDogMCAwIGF1dG8KICogQ29udGVudCBkaW1lbnNpb25zCiAqLwoudWstZmxleC1ub25lIHsKICBmbGV4OiBub25lOwp9Ci8qCiAqIFJlbGF0aXZlIEZsZXg6IDEgMSBhdXRvCiAqIFNwYWNlIGlzIGFsbG9jYXRlZCBjb25zaWRlcmluZyBjb250ZW50CiAqLwoudWstZmxleC1hdXRvIHsKICBmbGV4OiBhdXRvOwp9Ci8qCiAqIEFic29sdXRlIEZsZXg6IDEgMSAwJQogKiBTcGFjZSBpcyBhbGxvY2F0ZWQgc29sZWx5IGJhc2VkIG9uIGZsZXgKICovCi51ay1mbGV4LTEgewogIGZsZXg6IDE7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogTWFyZ2luCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBEZWZhdWx0CiAqLwoudWstbWFyZ2luIHsKICBtYXJnaW4tYm90dG9tOiAyMHB4Owp9CiogKyAudWstbWFyZ2luIHsKICBtYXJnaW4tdG9wOiAyMHB4ICFpbXBvcnRhbnQ7Cn0KLnVrLW1hcmdpbi10b3AgewogIG1hcmdpbi10b3A6IDIwcHggIWltcG9ydGFudDsKfQoudWstbWFyZ2luLWJvdHRvbSB7CiAgbWFyZ2luLWJvdHRvbTogMjBweCAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4tcmlnaHQgewogIG1hcmdpbi1yaWdodDogMjBweCAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4tbGVmdCB7CiAgbWFyZ2luLWxlZnQ6IDIwcHggIWltcG9ydGFudDsKfQovKiBTbWFsbAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLW1hcmdpbi1zbWFsbCB7CiAgbWFyZ2luLWJvdHRvbTogMTBweDsKfQoqICsgLnVrLW1hcmdpbi1zbWFsbCB7CiAgbWFyZ2luLXRvcDogMTBweCAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4tc21hbGwtdG9wIHsKICBtYXJnaW4tdG9wOiAxMHB4ICFpbXBvcnRhbnQ7Cn0KLnVrLW1hcmdpbi1zbWFsbC1ib3R0b20gewogIG1hcmdpbi1ib3R0b206IDEwcHggIWltcG9ydGFudDsKfQoudWstbWFyZ2luLXNtYWxsLXJpZ2h0IHsKICBtYXJnaW4tcmlnaHQ6IDEwcHggIWltcG9ydGFudDsKfQoudWstbWFyZ2luLXNtYWxsLWxlZnQgewogIG1hcmdpbi1sZWZ0OiAxMHB4ICFpbXBvcnRhbnQ7Cn0KLyogTWVkaXVtCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstbWFyZ2luLW1lZGl1bSB7CiAgbWFyZ2luLWJvdHRvbTogNDBweDsKfQoqICsgLnVrLW1hcmdpbi1tZWRpdW0gewogIG1hcmdpbi10b3A6IDQwcHggIWltcG9ydGFudDsKfQoudWstbWFyZ2luLW1lZGl1bS10b3AgewogIG1hcmdpbi10b3A6IDQwcHggIWltcG9ydGFudDsKfQoudWstbWFyZ2luLW1lZGl1bS1ib3R0b20gewogIG1hcmdpbi1ib3R0b206IDQwcHggIWltcG9ydGFudDsKfQoudWstbWFyZ2luLW1lZGl1bS1yaWdodCB7CiAgbWFyZ2luLXJpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7Cn0KLnVrLW1hcmdpbi1tZWRpdW0tbGVmdCB7CiAgbWFyZ2luLWxlZnQ6IDQwcHggIWltcG9ydGFudDsKfQovKiBMYXJnZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLW1hcmdpbi1sYXJnZSB7CiAgbWFyZ2luLWJvdHRvbTogNDBweDsKfQoqICsgLnVrLW1hcmdpbi1sYXJnZSB7CiAgbWFyZ2luLXRvcDogNDBweCAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4tbGFyZ2UtdG9wIHsKICBtYXJnaW4tdG9wOiA0MHB4ICFpbXBvcnRhbnQ7Cn0KLnVrLW1hcmdpbi1sYXJnZS1ib3R0b20gewogIG1hcmdpbi1ib3R0b206IDQwcHggIWltcG9ydGFudDsKfQoudWstbWFyZ2luLWxhcmdlLXJpZ2h0IHsKICBtYXJnaW4tcmlnaHQ6IDQwcHggIWltcG9ydGFudDsKfQoudWstbWFyZ2luLWxhcmdlLWxlZnQgewogIG1hcmdpbi1sZWZ0OiA0MHB4ICFpbXBvcnRhbnQ7Cn0KLyogRGVza3RvcCBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHsKICAudWstbWFyZ2luLWxhcmdlIHsKICAgIG1hcmdpbi1ib3R0b206IDcwcHg7CiAgfQogICogKyAudWstbWFyZ2luLWxhcmdlIHsKICAgIG1hcmdpbi10b3A6IDcwcHggIWltcG9ydGFudDsKICB9CiAgLnVrLW1hcmdpbi1sYXJnZS10b3AgewogICAgbWFyZ2luLXRvcDogNzBweCAhaW1wb3J0YW50OwogIH0KICAudWstbWFyZ2luLWxhcmdlLWJvdHRvbSB7CiAgICBtYXJnaW4tYm90dG9tOiA3MHB4ICFpbXBvcnRhbnQ7CiAgfQogIC51ay1tYXJnaW4tbGFyZ2UtcmlnaHQgewogICAgbWFyZ2luLXJpZ2h0OiA3MHB4ICFpbXBvcnRhbnQ7CiAgfQogIC51ay1tYXJnaW4tbGFyZ2UtbGVmdCB7CiAgICBtYXJnaW4tbGVmdDogNzBweCAhaW1wb3J0YW50OwogIH0KfQovKiBYTGFyZ2UKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1tYXJnaW4teGxhcmdlIHsKICBtYXJnaW4tYm90dG9tOiA3MHB4Owp9CiogKyAudWstbWFyZ2luLXhsYXJnZSB7CiAgbWFyZ2luLXRvcDogNzBweCAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4teGxhcmdlLXRvcCB7CiAgbWFyZ2luLXRvcDogNzBweCAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4teGxhcmdlLWJvdHRvbSB7CiAgbWFyZ2luLWJvdHRvbTogNzBweCAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4teGxhcmdlLXJpZ2h0IHsKICBtYXJnaW4tcmlnaHQ6IDcwcHggIWltcG9ydGFudDsKfQoudWstbWFyZ2luLXhsYXJnZS1sZWZ0IHsKICBtYXJnaW4tbGVmdDogNzBweCAhaW1wb3J0YW50Owp9Ci8qIERlc2t0b3AgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CiAgLnVrLW1hcmdpbi14bGFyZ2UgewogICAgbWFyZ2luLWJvdHRvbTogMTQwcHg7CiAgfQogICogKyAudWstbWFyZ2luLXhsYXJnZSB7CiAgICBtYXJnaW4tdG9wOiAxNDBweCAhaW1wb3J0YW50OwogIH0KICAudWstbWFyZ2luLXhsYXJnZS10b3AgewogICAgbWFyZ2luLXRvcDogMTQwcHggIWltcG9ydGFudDsKICB9CiAgLnVrLW1hcmdpbi14bGFyZ2UtYm90dG9tIHsKICAgIG1hcmdpbi1ib3R0b206IDE0MHB4ICFpbXBvcnRhbnQ7CiAgfQogIC51ay1tYXJnaW4teGxhcmdlLXJpZ2h0IHsKICAgIG1hcmdpbi1yaWdodDogMTQwcHggIWltcG9ydGFudDsKICB9CiAgLnVrLW1hcmdpbi14bGFyZ2UtbGVmdCB7CiAgICBtYXJnaW4tbGVmdDogMTQwcHggIWltcG9ydGFudDsKICB9Cn0KLyogQXV0bwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLW1hcmdpbi1hdXRvIHsKICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4tYXV0by10b3AgewogIG1hcmdpbi10b3A6IGF1dG8gIWltcG9ydGFudDsKfQoudWstbWFyZ2luLWF1dG8tYm90dG9tIHsKICBtYXJnaW4tYm90dG9tOiBhdXRvICFpbXBvcnRhbnQ7Cn0KLnVrLW1hcmdpbi1hdXRvLXJpZ2h0IHsKICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsKfQoudWstbWFyZ2luLWF1dG8tbGVmdCB7CiAgbWFyZ2luLWxlZnQ6IGF1dG8gIWltcG9ydGFudDsKfQoudWstbWFyZ2luLWF1dG8tdmVydGljYWwgewogIG1hcmdpbi10b3A6IGF1dG8gIWltcG9ydGFudDsKICBtYXJnaW4tYm90dG9tOiBhdXRvICFpbXBvcnRhbnQ7Cn0KLyogUGhvbmUgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7CiAgLnVrLW1hcmdpbi1hdXRvXEBzIHsKICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50OwogICAgbWFyZ2luLWxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICB9CiAgLnVrLW1hcmdpbi1hdXRvLXJpZ2h0XEBzIHsKICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50OwogIH0KICAudWstbWFyZ2luLWF1dG8tbGVmdFxAcyB7CiAgICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50OwogIH0KfQovKiBUYWJsZXQgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7CiAgLnVrLW1hcmdpbi1hdXRvXEBtIHsKICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50OwogICAgbWFyZ2luLWxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICB9CiAgLnVrLW1hcmdpbi1hdXRvLXJpZ2h0XEBtIHsKICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50OwogIH0KICAudWstbWFyZ2luLWF1dG8tbGVmdFxAbSB7CiAgICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50OwogIH0KfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC51ay1tYXJnaW4tYXV0b1xAbCB7CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgfQogIC51ay1tYXJnaW4tYXV0by1yaWdodFxAbCB7CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICB9CiAgLnVrLW1hcmdpbi1hdXRvLWxlZnRcQGwgewogICAgbWFyZ2luLWxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICB9Cn0KLyogTGFyZ2Ugc2NyZWVuIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDE2MDBweCkgewogIC51ay1tYXJnaW4tYXV0b1xAeGwgewogICAgbWFyZ2luLXJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50OwogIH0KICAudWstbWFyZ2luLWF1dG8tcmlnaHRcQHhsIHsKICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50OwogIH0KICAudWstbWFyZ2luLWF1dG8tbGVmdFxAeGwgewogICAgbWFyZ2luLWxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICB9Cn0KLyogUmVtb3ZlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstbWFyZ2luLXJlbW92ZSB7CiAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7Cn0KLnVrLW1hcmdpbi1yZW1vdmUtdG9wIHsKICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7Cn0KLnVrLW1hcmdpbi1yZW1vdmUtYm90dG9tIHsKICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7Cn0KLnVrLW1hcmdpbi1yZW1vdmUtcmlnaHQgewogIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4tcmVtb3ZlLWxlZnQgewogIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7Cn0KLnVrLW1hcmdpbi1yZW1vdmUtdmVydGljYWwgewogIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7Cn0KLnVrLW1hcmdpbi1yZW1vdmUtYWRqYWNlbnQgKyAqLAoudWstbWFyZ2luLXJlbW92ZS1maXJzdC1jaGlsZCA+IDpmaXJzdC1jaGlsZCB7CiAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4tcmVtb3ZlLWxhc3QtY2hpbGQgPiA6bGFzdC1jaGlsZCB7CiAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50Owp9Ci8qIFBob25lIGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgewogIC51ay1tYXJnaW4tcmVtb3ZlLXJpZ2h0XEBzIHsKICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50OwogIH0KICAudWstbWFyZ2luLXJlbW92ZS1sZWZ0XEBzIHsKICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstbWFyZ2luLXJlbW92ZS1yaWdodFxAbSB7CiAgICBtYXJnaW4tcmlnaHQ6IDAgIWltcG9ydGFudDsKICB9CiAgLnVrLW1hcmdpbi1yZW1vdmUtbGVmdFxAbSB7CiAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OwogIH0KfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC51ay1tYXJnaW4tcmVtb3ZlLXJpZ2h0XEBsIHsKICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50OwogIH0KICAudWstbWFyZ2luLXJlbW92ZS1sZWZ0XEBsIHsKICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7CiAgfQp9Ci8qIExhcmdlIHNjcmVlbiBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxNjAwcHgpIHsKICAudWstbWFyZ2luLXJlbW92ZS1yaWdodFxAeGwgewogICAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgfQogIC51ay1tYXJnaW4tcmVtb3ZlLWxlZnRcQHhsIHsKICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7CiAgfQp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IFBhZGRpbmcKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1wYWRkaW5nIHsKICBwYWRkaW5nOiAzMHB4Owp9Ci8qIERlc2t0b3AgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CiAgLnVrLXBhZGRpbmcgewogICAgcGFkZGluZzogNDBweDsKICB9Cn0KLyogU21hbGwKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1wYWRkaW5nLXNtYWxsIHsKICBwYWRkaW5nOiAxNXB4Owp9Ci8qIExhcmdlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstcGFkZGluZy1sYXJnZSB7CiAgcGFkZGluZzogNDBweDsKfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC51ay1wYWRkaW5nLWxhcmdlIHsKICAgIHBhZGRpbmc6IDcwcHg7CiAgfQp9Ci8qIFJlbW92ZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXBhZGRpbmctcmVtb3ZlIHsKICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7Cn0KLnVrLXBhZGRpbmctcmVtb3ZlLXRvcCB7CiAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsKfQoudWstcGFkZGluZy1yZW1vdmUtYm90dG9tIHsKICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50Owp9Ci51ay1wYWRkaW5nLXJlbW92ZS1yaWdodCB7CiAgcGFkZGluZy1yaWdodDogMCAhaW1wb3J0YW50Owp9Ci51ay1wYWRkaW5nLXJlbW92ZS1sZWZ0IHsKICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDsKfQoudWstcGFkZGluZy1yZW1vdmUtdmVydGljYWwgewogIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7CiAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDsKfQoudWstcGFkZGluZy1yZW1vdmUtaG9yaXpvbnRhbCB7CiAgcGFkZGluZy1yaWdodDogMCAhaW1wb3J0YW50OwogIHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50Owp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IFBvc2l0aW9uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwo6cm9vdCB7CiAgLS11ay1wb3NpdGlvbi1tYXJnaW4tb2Zmc2V0OiAwcHg7Cn0KLyogRGlyZWN0aW9ucwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gUHJldmVudCBjb250ZW50IG92ZXJmbG93LgogKi8KW2NsYXNzKj0ndWstcG9zaXRpb24tdG9wJ10sCltjbGFzcyo9J3VrLXBvc2l0aW9uLWJvdHRvbSddLApbY2xhc3MqPSd1ay1wb3NpdGlvbi1yaWdodCddLApbY2xhc3MqPSd1ay1wb3NpdGlvbi1sZWZ0J10sCltjbGFzcyo9J3VrLXBvc2l0aW9uLWNlbnRlciddIHsKICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAvKiAxICovCiAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAodmFyKC0tdWstcG9zaXRpb24tbWFyZ2luLW9mZnNldCkgKiAyKSk7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQovKgogKiBFZGdlcwogKiBEb24ndCB1c2UgYHdpZHRoOiAxMDAlYCBiZWNhdXNlIGl0J3Mgd3JvbmcgaWYgdGhlIHBhcmVudCBoYXMgcGFkZGluZy4KICovCi51ay1wb3NpdGlvbi10b3AgewogIHRvcDogMDsKICByaWdodDogMDsKICBsZWZ0OiAwOwp9Ci51ay1wb3NpdGlvbi1ib3R0b20gewogIGJvdHRvbTogMDsKICByaWdodDogMDsKICBsZWZ0OiAwOwp9Ci51ay1wb3NpdGlvbi1yaWdodCB7CiAgdG9wOiAwOwogIGJvdHRvbTogMDsKICByaWdodDogMDsKfQoudWstcG9zaXRpb24tbGVmdCB7CiAgdG9wOiAwOwogIGJvdHRvbTogMDsKICBsZWZ0OiAwOwp9Ci8qCiAqIENvcm5lcnMKICovCi51ay1wb3NpdGlvbi10b3AtcmlnaHQgewogIHRvcDogMDsKICByaWdodDogMDsKfQoudWstcG9zaXRpb24tdG9wLWxlZnQgewogIHRvcDogMDsKICBsZWZ0OiAwOwp9Ci51ay1wb3NpdGlvbi1ib3R0b20tcmlnaHQgewogIGJvdHRvbTogMDsKICByaWdodDogMDsKfQoudWstcG9zaXRpb24tYm90dG9tLWxlZnQgewogIGJvdHRvbTogMDsKICBsZWZ0OiAwOwp9Ci8qCiAqIENlbnRlcgogKiAxLiBGaXggdGV4dCB3cmFwcGluZyBpZiBjb250ZW50IGlzIGxhcmdlciB0aGFuIDUwJSBvZiB0aGUgY29udGFpbmVyLgogKiAgICBVc2luZyBgbWF4LWNvbnRlbnRgIHJlcXVpcmVzIGBtYXgtd2lkdGhgIG9mIDEwMCUgd2hpY2ggaXMgc2V0IGdlbmVyYWxseS4KICovCi51ay1wb3NpdGlvbi1jZW50ZXIgewogIHRvcDogY2FsYyg1MCUgLSB2YXIoLS11ay1wb3NpdGlvbi1tYXJnaW4tb2Zmc2V0KSk7CiAgcmlnaHQ6IGNhbGMoNTAlIC0gdmFyKC0tdWstcG9zaXRpb24tbWFyZ2luLW9mZnNldCkpOwogIC0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXg6IDUwJTsKICAtLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS15OiAtNTAlOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKHZhcigtLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS14KSwgdmFyKC0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXkpKTsKICAvKiAxICovCiAgd2lkdGg6IG1heC1jb250ZW50Owp9Ci8qIFZlcnRpY2FsICovCltjbGFzcyo9J3VrLXBvc2l0aW9uLWNlbnRlci1yaWdodCddLApbY2xhc3MqPSd1ay1wb3NpdGlvbi1jZW50ZXItbGVmdCddIHsKICB0b3A6IGNhbGMoNTAlIC0gdmFyKC0tdWstcG9zaXRpb24tbWFyZ2luLW9mZnNldCkpOwogIC0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXk6IC01MCU7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgdmFyKC0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXkpKTsKfQoudWstcG9zaXRpb24tY2VudGVyLXJpZ2h0IHsKICByaWdodDogMDsKfQoudWstcG9zaXRpb24tY2VudGVyLWxlZnQgewogIGxlZnQ6IDA7Cn0KLnVrLXBvc2l0aW9uLWNlbnRlci1yaWdodC1vdXQgewogIGxlZnQ6IDEwMCU7CiAgd2lkdGg6IG1heC1jb250ZW50Owp9Ci51ay1wb3NpdGlvbi1jZW50ZXItbGVmdC1vdXQgewogIHJpZ2h0OiAxMDAlOwogIHdpZHRoOiBtYXgtY29udGVudDsKfQovKiBIb3Jpem9udGFsICovCi51ay1wb3NpdGlvbi10b3AtY2VudGVyLAoudWstcG9zaXRpb24tYm90dG9tLWNlbnRlciB7CiAgcmlnaHQ6IGNhbGMoNTAlIC0gdmFyKC0tdWstcG9zaXRpb24tbWFyZ2luLW9mZnNldCkpOwogIC0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXg6IDUwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSh2YXIoLS11ay1wb3NpdGlvbi10cmFuc2xhdGUteCksIDApOwogIC8qIDEgKi8KICB3aWR0aDogbWF4LWNvbnRlbnQ7Cn0KLnVrLXBvc2l0aW9uLXRvcC1jZW50ZXIgewogIHRvcDogMDsKfQoudWstcG9zaXRpb24tYm90dG9tLWNlbnRlciB7CiAgYm90dG9tOiAwOwp9Ci8qCiAqIENvdmVyCiAqLwoudWstcG9zaXRpb24tY292ZXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDA7CiAgYm90dG9tOiAwOwogIHJpZ2h0OiAwOwogIGxlZnQ6IDA7Cn0KLyogTWFyZ2luCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstcG9zaXRpb24tc21hbGwgewogIG1hcmdpbjogMTVweDsKICAtLXVrLXBvc2l0aW9uLW1hcmdpbi1vZmZzZXQ6IDE1cHg7Cn0KLnVrLXBvc2l0aW9uLW1lZGl1bSB7CiAgbWFyZ2luOiAzMHB4OwogIC0tdWstcG9zaXRpb24tbWFyZ2luLW9mZnNldDogMzBweDsKfQoudWstcG9zaXRpb24tbGFyZ2UgewogIG1hcmdpbjogMzBweDsKICAtLXVrLXBvc2l0aW9uLW1hcmdpbi1vZmZzZXQ6IDMwcHg7Cn0KLyogRGVza3RvcCBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHsKICAudWstcG9zaXRpb24tbGFyZ2UgewogICAgbWFyZ2luOiA1MHB4OwogICAgLS11ay1wb3NpdGlvbi1tYXJnaW4tb2Zmc2V0OiA1MHB4OwogIH0KfQovKiBTY2hlbWVzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstcG9zaXRpb24tcmVsYXRpdmUgewogIHBvc2l0aW9uOiByZWxhdGl2ZSAgIWltcG9ydGFudDsKfQoudWstcG9zaXRpb24tYWJzb2x1dGUgewogIHBvc2l0aW9uOiBhYnNvbHV0ZSAgIWltcG9ydGFudDsKfQoudWstcG9zaXRpb24tZml4ZWQgewogIHBvc2l0aW9uOiBmaXhlZCAgIWltcG9ydGFudDsKfQoudWstcG9zaXRpb24tc3RpY2t5IHsKICBwb3NpdGlvbjogc3RpY2t5ICAhaW1wb3J0YW50Owp9Ci8qIExheWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstcG9zaXRpb24tei1pbmRleCB7CiAgei1pbmRleDogMTsKfQoudWstcG9zaXRpb24tei1pbmRleC16ZXJvIHsKICB6LWluZGV4OiAwOwp9Ci51ay1wb3NpdGlvbi16LWluZGV4LW5lZ2F0aXZlIHsKICB6LWluZGV4OiAtMTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBUcmFuc2l0aW9uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBUcmFuc2l0aW9ucwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogVGhlIHRvZ2dsZSBpcyB0cmlnZ2VyZWQgb24gdG91Y2ggZGV2aWNlcyBieSB0d28gbWV0aG9kczoKICogMS4gVXNpbmcgYDpmb2N1c2AgYW5kIHRhYmluZGV4CiAqIDIuIFVzaW5nIGA6aG92ZXJgIGFuZCBhIGB0b3VjaHN0YXJ0YCBldmVudCBsaXN0ZW5lciByZWdpc3RlcmVkIG9uIHRoZSBkb2N1bWVudAogKiAgICAoRG9lc24ndCB3b3JrIG9uIFN1cmZhY2UgdG91Y2ggZGV2aWNlcykKICovCjp3aGVyZSgudWstdHJhbnNpdGlvbi1mYWRlKSwKOndoZXJlKFtjbGFzcyo9J3VrLXRyYW5zaXRpb24tc2NhbGUnXSksCjp3aGVyZShbY2xhc3MqPSd1ay10cmFuc2l0aW9uLXNsaWRlJ10pIHsKICAtLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS14OiAwOwogIC0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXk6IDA7Cn0KLnVrLXRyYW5zaXRpb24tZmFkZSwKW2NsYXNzKj0ndWstdHJhbnNpdGlvbi1zY2FsZSddLApbY2xhc3MqPSd1ay10cmFuc2l0aW9uLXNsaWRlJ10gewogIC0tdWstdHJhbnNsYXRlLXg6IDA7CiAgLS11ay10cmFuc2xhdGUteTogMDsKICAtLXVrLXNjYWxlLXg6IDE7CiAgLS11ay1zY2FsZS15OiAxOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKHZhcigtLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS14KSwgdmFyKC0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXkpKSB0cmFuc2xhdGUodmFyKC0tdWstdHJhbnNsYXRlLXgpLCB2YXIoLS11ay10cmFuc2xhdGUteSkpIHNjYWxlKHZhcigtLXVrLXNjYWxlLXgpLCB2YXIoLS11ay1zY2FsZS15KSk7CiAgdHJhbnNpdGlvbjogMC4zcyBlYXNlLW91dDsKICB0cmFuc2l0aW9uLXByb3BlcnR5OiBvcGFjaXR5LCB0cmFuc2Zvcm0sIGZpbHRlcjsKICBvcGFjaXR5OiAwOwp9Ci8qCiAqIEZhZGUKICovCi51ay10cmFuc2l0aW9uLXRvZ2dsZTpob3ZlciAudWstdHJhbnNpdGlvbi1mYWRlLAoudWstdHJhbnNpdGlvbi10b2dnbGU6Zm9jdXMgLnVrLXRyYW5zaXRpb24tZmFkZSwKLnVrLXRyYW5zaXRpb24tdG9nZ2xlIC51ay10cmFuc2l0aW9uLWZhZGU6Zm9jdXMtd2l0aGluLAoudWstdHJhbnNpdGlvbi1hY3RpdmUudWstYWN0aXZlIC51ay10cmFuc2l0aW9uLWZhZGUgewogIG9wYWNpdHk6IDE7Cn0KLyoKICogU2NhbGUKICogMS4gTWFrZSBpbWFnZSByZW5kZXJpbmcgdGhlIHNhbWUgZHVyaW5nIHRoZSB0cmFuc2l0aW9uIGFzIGJlZm9yZSBhbmQgYWZ0ZXIuIFByZWZpeGVkIGJlY2F1c2Ugb2YgU2FmYXJpLgogKi8KLyogMSAqLwpbY2xhc3MqPSd1ay10cmFuc2l0aW9uLXNjYWxlJ10gewogIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuOwp9Ci51ay10cmFuc2l0aW9uLXNjYWxlLXVwIHsKICAtLXVrLXNjYWxlLXg6IDE7CiAgLS11ay1zY2FsZS15OiAxOwp9Ci51ay10cmFuc2l0aW9uLXNjYWxlLWRvd24gewogIC0tdWstc2NhbGUteDogMS4wMzsKICAtLXVrLXNjYWxlLXk6IDEuMDM7Cn0KLyogU2hvdyAqLwoudWstdHJhbnNpdGlvbi10b2dnbGU6aG92ZXIgLnVrLXRyYW5zaXRpb24tc2NhbGUtdXAsCi51ay10cmFuc2l0aW9uLXRvZ2dsZTpmb2N1cyAudWstdHJhbnNpdGlvbi1zY2FsZS11cCwKLnVrLXRyYW5zaXRpb24tdG9nZ2xlIC51ay10cmFuc2l0aW9uLXNjYWxlLXVwOmZvY3VzLXdpdGhpbiwKLnVrLXRyYW5zaXRpb24tYWN0aXZlLnVrLWFjdGl2ZSAudWstdHJhbnNpdGlvbi1zY2FsZS11cCB7CiAgLS11ay1zY2FsZS14OiAxLjAzOwogIC0tdWstc2NhbGUteTogMS4wMzsKICBvcGFjaXR5OiAxOwp9Ci51ay10cmFuc2l0aW9uLXRvZ2dsZTpob3ZlciAudWstdHJhbnNpdGlvbi1zY2FsZS1kb3duLAoudWstdHJhbnNpdGlvbi10b2dnbGU6Zm9jdXMgLnVrLXRyYW5zaXRpb24tc2NhbGUtZG93biwKLnVrLXRyYW5zaXRpb24tdG9nZ2xlIC51ay10cmFuc2l0aW9uLXNjYWxlLWRvd246Zm9jdXMtd2l0aGluLAoudWstdHJhbnNpdGlvbi1hY3RpdmUudWstYWN0aXZlIC51ay10cmFuc2l0aW9uLXNjYWxlLWRvd24gewogIC0tdWstc2NhbGUteDogMTsKICAtLXVrLXNjYWxlLXk6IDE7CiAgb3BhY2l0eTogMTsKfQovKgogKiBTbGlkZQogKi8KLnVrLXRyYW5zaXRpb24tc2xpZGUtdG9wIHsKICAtLXVrLXRyYW5zbGF0ZS15OiAtMTAwJTsKfQoudWstdHJhbnNpdGlvbi1zbGlkZS1ib3R0b20gewogIC0tdWstdHJhbnNsYXRlLXk6IDEwMCU7Cn0KLnVrLXRyYW5zaXRpb24tc2xpZGUtcmlnaHQgewogIC0tdWstdHJhbnNsYXRlLXg6IC0xMDAlOwp9Ci51ay10cmFuc2l0aW9uLXNsaWRlLWxlZnQgewogIC0tdWstdHJhbnNsYXRlLXg6IDEwMCU7Cn0KLnVrLXRyYW5zaXRpb24tc2xpZGUtdG9wLXNtYWxsIHsKICAtLXVrLXRyYW5zbGF0ZS15OiBjYWxjKC0xICogMTBweCk7Cn0KLnVrLXRyYW5zaXRpb24tc2xpZGUtYm90dG9tLXNtYWxsIHsKICAtLXVrLXRyYW5zbGF0ZS15OiAxMHB4Owp9Ci51ay10cmFuc2l0aW9uLXNsaWRlLXJpZ2h0LXNtYWxsIHsKICAtLXVrLXRyYW5zbGF0ZS14OiBjYWxjKC0xICogMTBweCk7Cn0KLnVrLXRyYW5zaXRpb24tc2xpZGUtbGVmdC1zbWFsbCB7CiAgLS11ay10cmFuc2xhdGUteDogMTBweDsKfQoudWstdHJhbnNpdGlvbi1zbGlkZS10b3AtbWVkaXVtIHsKICAtLXVrLXRyYW5zbGF0ZS15OiBjYWxjKC0xICogNTBweCk7Cn0KLnVrLXRyYW5zaXRpb24tc2xpZGUtYm90dG9tLW1lZGl1bSB7CiAgLS11ay10cmFuc2xhdGUteTogNTBweDsKfQoudWstdHJhbnNpdGlvbi1zbGlkZS1yaWdodC1tZWRpdW0gewogIC0tdWstdHJhbnNsYXRlLXg6IGNhbGMoLTEgKiA1MHB4KTsKfQoudWstdHJhbnNpdGlvbi1zbGlkZS1sZWZ0LW1lZGl1bSB7CiAgLS11ay10cmFuc2xhdGUteDogNTBweDsKfQovKiBTaG93ICovCi51ay10cmFuc2l0aW9uLXRvZ2dsZTpob3ZlciBbY2xhc3MqPSd1ay10cmFuc2l0aW9uLXNsaWRlJ10sCi51ay10cmFuc2l0aW9uLXRvZ2dsZTpmb2N1cyBbY2xhc3MqPSd1ay10cmFuc2l0aW9uLXNsaWRlJ10sCi51ay10cmFuc2l0aW9uLXRvZ2dsZSBbY2xhc3MqPSd1ay10cmFuc2l0aW9uLXNsaWRlJ106Zm9jdXMtd2l0aGluLAoudWstdHJhbnNpdGlvbi1hY3RpdmUudWstYWN0aXZlIFtjbGFzcyo9J3VrLXRyYW5zaXRpb24tc2xpZGUnXSB7CiAgLS11ay10cmFuc2xhdGUteDogMDsKICAtLXVrLXRyYW5zbGF0ZS15OiAwOwogIG9wYWNpdHk6IDE7Cn0KLyogT3BhY2l0eSBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXRyYW5zaXRpb24tb3BhcXVlIHsKICBvcGFjaXR5OiAxOwp9Ci8qIER1cmF0aW9uIG1vZGlmaWVycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXRyYW5zaXRpb24tc2xvdyB7CiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC43czsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBWaXNpYmlsaXR5CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBIaWRkZW4KICogYGhpZGRlbmAgYXR0cmlidXRlIGFsc28gc2V0IGhlcmUgdG8gbWFrZSBpdCBzdHJvbmdlcgogKi8KW2hpZGRlbl0sCi51ay1oaWRkZW4gewogIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAudWstaGlkZGVuXEBzIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogIC51ay1oaWRkZW5cQG0gewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogIH0KfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC51ay1oaWRkZW5cQGwgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogIH0KfQovKiBMYXJnZSBzY3JlZW4gYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTYwMHB4KSB7CiAgLnVrLWhpZGRlblxAeGwgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogIH0KfQovKgogKiBWaXNpYmxlCiAqLwovKiBQaG9uZSBwb3J0cmFpdCBhbmQgc21hbGxlciAqLwpAbWVkaWEgKG1heC13aWR0aDogNjM5cHgpIHsKICAudWstdmlzaWJsZVxAcyB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQp9Ci8qIFBob25lIGxhbmRzY2FwZSBhbmQgc21hbGxlciAqLwpAbWVkaWEgKG1heC13aWR0aDogOTU5cHgpIHsKICAudWstdmlzaWJsZVxAbSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIHNtYWxsZXIgKi8KQG1lZGlhIChtYXgtd2lkdGg6IDExOTlweCkgewogIC51ay12aXNpYmxlXEBsIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KLyogRGVza3RvcCBhbmQgc21hbGxlciAqLwpAbWVkaWEgKG1heC13aWR0aDogMTU5OXB4KSB7CiAgLnVrLXZpc2libGVcQHhsIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KLyogVmlzaWJpbGl0eQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWludmlzaWJsZSB7CiAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7Cn0KLyogQmFzZWQgb24gdGhlIFN0YXRlIG9mIHRoZSBQYXJlbnQgRWxlbWVudAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogQ2FuJ3QgdXNlIGBkaXNwbGF5OiBub25lYCBub3IgYHZpc2liaWxpdHk6IGhpZGRlbmAgYmVjYXVzZSBib3RoIGFyZSBub3QgZm9jdXNhYmxlLgogKiBUaGUgdGFyZ2V0IHN0YXlzIHZpc2libGUgaWYgYW55IGVsZW1lbnQgd2l0aGluIHJlY2VpdmVzIGZvY3VzIHRocm91Z2gga2V5Ym9hcmQuCiAqLwovKgogKiBEaXNjYXJkIHNwYWNlIHdoZW4gaGlkZGVuLgogKi8KLnVrLXZpc2libGUtdG9nZ2xlOm5vdCg6aG92ZXIpOm5vdCg6Zm9jdXMpIC51ay1oaWRkZW4taG92ZXI6bm90KDpmb2N1cy13aXRoaW4pIHsKICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICB3aWR0aDogMCAhaW1wb3J0YW50OwogIGhlaWdodDogMCAhaW1wb3J0YW50OwogIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICBtYXJnaW46IDAgIWltcG9ydGFudDsKICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7Cn0KLyoKICogS2VlcCBzcGFjZSB3aGVuIGhpZGRlbi4KICovCi51ay12aXNpYmxlLXRvZ2dsZTpub3QoOmhvdmVyKTpub3QoOmZvY3VzKSAudWstaW52aXNpYmxlLWhvdmVyOm5vdCg6Zm9jdXMtd2l0aGluKSB7CiAgb3BhY2l0eTogMCAhaW1wb3J0YW50Owp9Ci8qIEJhc2VkIG9uIEhvdmVyIENhcGFiaWxpdHkgb2YgdGhlIFBvaW50aW5nIERldmljZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogSG92ZXIKICovCi8qIEhpZGUgaWYgcHJpbWFyeSBwb2ludGluZyBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IGhvdmVyLCBlLmcuIHRvdWNoIHNjcmVlbnMuICovCkBtZWRpYSAoaG92ZXI6IG5vbmUpIHsKICAudWstaGlkZGVuLXRvdWNoIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KLyogSGlkZSBpZiBwcmltYXJ5IHBvaW50aW5nIGRldmljZSBzdXBwb3J0cyBob3ZlciwgZS5nLiBtaWNlLiAqLwpAbWVkaWEgKGhvdmVyKSB7CiAgLnVrLWhpZGRlbi1ub3RvdWNoIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogSW52ZXJzZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogSW1wbGVtZW50ZWQgY2xhc3MgZGVwZW5kcyBvbiB0aGUgZ2VuZXJhbCB0aGVtZSBjb2xvcgogKiBgdWstbGlnaHRgIGlzIGZvciBsaWdodCBjb2xvcnMgb24gZGFyayBiYWNrZ3JvdW5kcwogKiBgdWstZGFya2AgaXMgb3IgZGFyayBjb2xvcnMgb24gbGlnaHQgYmFja2dyb3VuZHMKICovCi51ay1saWdodCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvciksCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5LAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5LAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSksCi51ay1vdmVybGF5LXByaW1hcnksCi51ay1vZmZjYW52YXMtYmFyIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCBhLAoudWstbGlnaHQgLnVrLWxpbmssCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluaywKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluaywKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGluaywKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBhLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saW5rLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGEsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmssCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBhLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpbmssCi51ay1vdmVybGF5LXByaW1hcnkgYSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGluaywKLnVrLW9mZmNhbnZhcy1iYXIgYSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpbmsgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCBhOmhvdmVyLAoudWstbGlnaHQgLnVrLWxpbms6aG92ZXIsCi51ay1saWdodCAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmssCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYTpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluazpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmssCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbms6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmssCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYTpob3ZlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluazpob3ZlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmssCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbms6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmssCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saW5rOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmssCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgYTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbGluazpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmssCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgYTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGluazpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmssCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpbms6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmssCi51ay1vdmVybGF5LXByaW1hcnkgYTpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGluazpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmssCi51ay1vZmZjYW52YXMtYmFyIGE6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1saW5rOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmsgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCA6bm90KHByZSkgPiBjb2RlLAoudWstbGlnaHQgOm5vdChwcmUpID4ga2JkLAoudWstbGlnaHQgOm5vdChwcmUpID4gc2FtcCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSkgPiBjb2RlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpub3QocHJlKSA+IGtiZCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSkgPiBzYW1wLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOm5vdChwcmUpID4gY29kZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpub3QocHJlKSA+IGtiZCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpub3QocHJlKSA+IHNhbXAsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOm5vdChwcmUpID4gY29kZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSkgPiBrYmQsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOm5vdChwcmUpID4gc2FtcCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpub3QocHJlKSA+IGNvZGUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSkgPiBrYmQsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSkgPiBzYW1wLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSA6bm90KHByZSkgPiBjb2RlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSA6bm90KHByZSkgPiBrYmQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IDpub3QocHJlKSA+IHNhbXAsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgOm5vdChwcmUpID4gY29kZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSA6bm90KHByZSkgPiBrYmQsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgOm5vdChwcmUpID4gc2FtcCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSA6bm90KHByZSkgPiBjb2RlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IDpub3QocHJlKSA+IGtiZCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSA6bm90KHByZSkgPiBzYW1wLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgOm5vdChwcmUpID4gY29kZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIDpub3QocHJlKSA+IGtiZCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIDpub3QocHJlKSA+IHNhbXAsCi51ay1vdmVybGF5LXByaW1hcnkgOm5vdChwcmUpID4gY29kZSwKLnVrLW92ZXJsYXktcHJpbWFyeSA6bm90KHByZSkgPiBrYmQsCi51ay1vdmVybGF5LXByaW1hcnkgOm5vdChwcmUpID4gc2FtcCwKLnVrLW9mZmNhbnZhcy1iYXIgOm5vdChwcmUpID4gY29kZSwKLnVrLW9mZmNhbnZhcy1iYXIgOm5vdChwcmUpID4ga2JkLAoudWstb2ZmY2FudmFzLWJhciA6bm90KHByZSkgPiBzYW1wIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKfQoudWstbGlnaHQgZW0sCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgZW0sCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBlbSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBlbSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGVtLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBlbSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBlbSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBlbSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIGVtLAoudWstb3ZlcmxheS1wcmltYXJ5IGVtLAoudWstb2ZmY2FudmFzLWJhciBlbSB7CiAgY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IGgxLAoudWstbGlnaHQgLnVrLWgxLAoudWstbGlnaHQgaDIsCi51ay1saWdodCAudWstaDIsCi51ay1saWdodCBoMywKLnVrLWxpZ2h0IC51ay1oMywKLnVrLWxpZ2h0IGg0LAoudWstbGlnaHQgLnVrLWg0LAoudWstbGlnaHQgaDUsCi51ay1saWdodCAudWstaDUsCi51ay1saWdodCBoNiwKLnVrLWxpZ2h0IC51ay1oNiwKLnVrLWxpZ2h0IC51ay1oZWFkaW5nLXNtYWxsLAoudWstbGlnaHQgLnVrLWhlYWRpbmctbWVkaXVtLAoudWstbGlnaHQgLnVrLWhlYWRpbmctbGFyZ2UsCi51ay1saWdodCAudWstaGVhZGluZy14bGFyZ2UsCi51ay1saWdodCAudWstaGVhZGluZy0yeGxhcmdlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGgxLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oMSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoMiwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDMsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWgzLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGg0LAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oNCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoNSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDYsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWg2LAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLXNtYWxsLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLW1lZGl1bSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1sYXJnZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy14bGFyZ2UsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctMnhsYXJnZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGgxLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWgxLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoMywKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oMywKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGg0LAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWg0LAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoNiwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oNiwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLXNtYWxsLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbWVkaXVtLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGFyZ2UsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy14bGFyZ2UsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy0yeGxhcmdlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGgxLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oMSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoMiwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDMsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWgzLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGg0LAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oNCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoNSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDYsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWg2LAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLXNtYWxsLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLW1lZGl1bSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1sYXJnZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy14bGFyZ2UsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctMnhsYXJnZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGgxLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWgxLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoMywKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oMywKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGg0LAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWg0LAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoNiwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oNiwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLXNtYWxsLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbWVkaXVtLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGFyZ2UsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy14bGFyZ2UsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy0yeGxhcmdlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBoMSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWgxLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBoMiwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWgyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBoMywKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWgzLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBoNCwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWg0LAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBoNSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWg1LAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBoNiwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWg2LAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1zbWFsbCwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctbWVkaXVtLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1sYXJnZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmcteGxhcmdlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy0yeGxhcmdlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIGgxLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1oMSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBoMiwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaDIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgaDMsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWgzLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIGg0LAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1oNCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBoNSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaDUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgaDYsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWg2LAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1oZWFkaW5nLXNtYWxsLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1oZWFkaW5nLW1lZGl1bSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaGVhZGluZy1sYXJnZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaGVhZGluZy14bGFyZ2UsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWhlYWRpbmctMnhsYXJnZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBoMSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaDEsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgaDIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWgyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGgzLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oMywKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBoNCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaDQsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgaDUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWg1LAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGg2LAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oNiwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1zbWFsbCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1tZWRpdW0sCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctbGFyZ2UsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmcteGxhcmdlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLTJ4bGFyZ2UsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBoMSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1oMSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIGgyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWgyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgaDMsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaDMsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBoNCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1oNCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIGg1LAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWg1LAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgaDYsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaDYsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaGVhZGluZy1zbWFsbCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1oZWFkaW5nLW1lZGl1bSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1oZWFkaW5nLWxhcmdlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWhlYWRpbmcteGxhcmdlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWhlYWRpbmctMnhsYXJnZSwKLnVrLW92ZXJsYXktcHJpbWFyeSBoMSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaDEsCi51ay1vdmVybGF5LXByaW1hcnkgaDIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWgyLAoudWstb3ZlcmxheS1wcmltYXJ5IGgzLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oMywKLnVrLW92ZXJsYXktcHJpbWFyeSBoNCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaDQsCi51ay1vdmVybGF5LXByaW1hcnkgaDUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWg1LAoudWstb3ZlcmxheS1wcmltYXJ5IGg2LAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oNiwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaGVhZGluZy1zbWFsbCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaGVhZGluZy1tZWRpdW0sCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWhlYWRpbmctbGFyZ2UsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWhlYWRpbmcteGxhcmdlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oZWFkaW5nLTJ4bGFyZ2UsCi51ay1vZmZjYW52YXMtYmFyIGgxLAoudWstb2ZmY2FudmFzLWJhciAudWstaDEsCi51ay1vZmZjYW52YXMtYmFyIGgyLAoudWstb2ZmY2FudmFzLWJhciAudWstaDIsCi51ay1vZmZjYW52YXMtYmFyIGgzLAoudWstb2ZmY2FudmFzLWJhciAudWstaDMsCi51ay1vZmZjYW52YXMtYmFyIGg0LAoudWstb2ZmY2FudmFzLWJhciAudWstaDQsCi51ay1vZmZjYW52YXMtYmFyIGg1LAoudWstb2ZmY2FudmFzLWJhciAudWstaDUsCi51ay1vZmZjYW52YXMtYmFyIGg2LAoudWstb2ZmY2FudmFzLWJhciAudWstaDYsCi51ay1vZmZjYW52YXMtYmFyIC51ay1oZWFkaW5nLXNtYWxsLAoudWstb2ZmY2FudmFzLWJhciAudWstaGVhZGluZy1tZWRpdW0sCi51ay1vZmZjYW52YXMtYmFyIC51ay1oZWFkaW5nLWxhcmdlLAoudWstb2ZmY2FudmFzLWJhciAudWstaGVhZGluZy14bGFyZ2UsCi51ay1vZmZjYW52YXMtYmFyIC51ay1oZWFkaW5nLTJ4bGFyZ2UgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCBibG9ja3F1b3RlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGJsb2NrcXVvdGUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBibG9ja3F1b3RlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGJsb2NrcXVvdGUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBibG9ja3F1b3RlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBibG9ja3F1b3RlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIGJsb2NrcXVvdGUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgYmxvY2txdW90ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIGJsb2NrcXVvdGUsCi51ay1vdmVybGF5LXByaW1hcnkgYmxvY2txdW90ZSwKLnVrLW9mZmNhbnZhcy1iYXIgYmxvY2txdW90ZSB7CiAgY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IGJsb2NrcXVvdGUgZm9vdGVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGJsb2NrcXVvdGUgZm9vdGVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYmxvY2txdW90ZSBmb290ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYmxvY2txdW90ZSBmb290ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBibG9ja3F1b3RlIGZvb3RlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgYmxvY2txdW90ZSBmb290ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgYmxvY2txdW90ZSBmb290ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgYmxvY2txdW90ZSBmb290ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBibG9ja3F1b3RlIGZvb3RlciwKLnVrLW92ZXJsYXktcHJpbWFyeSBibG9ja3F1b3RlIGZvb3RlciwKLnVrLW9mZmNhbnZhcy1iYXIgYmxvY2txdW90ZSBmb290ZXIgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IGhyLAoudWstbGlnaHQgLnVrLWhyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGhyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1ociwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGhyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGhyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1ociwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGhyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBociwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWhyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIGhyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1ociwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBociwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaHIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBociwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1ociwKLnVrLW92ZXJsYXktcHJpbWFyeSBociwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaHIsCi51ay1vZmZjYW52YXMtYmFyIGhyLAoudWstb2ZmY2FudmFzLWJhciAudWstaHIgewogIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKfQoudWstbGlnaHQgOmZvY3VzLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpmb2N1cywKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpmb2N1cywKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6Zm9jdXMsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6Zm9jdXMsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IDpmb2N1cywKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSA6Zm9jdXMsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgOmZvY3VzLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgOmZvY3VzLAoudWstb3ZlcmxheS1wcmltYXJ5IDpmb2N1cywKLnVrLW9mZmNhbnZhcy1iYXIgOmZvY3VzIHsKICBvdXRsaW5lLWNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCA6Zm9jdXMtdmlzaWJsZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6Zm9jdXMtdmlzaWJsZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpmb2N1cy12aXNpYmxlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpmb2N1cy12aXNpYmxlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOmZvY3VzLXZpc2libGUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IDpmb2N1cy12aXNpYmxlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIDpmb2N1cy12aXNpYmxlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IDpmb2N1cy12aXNpYmxlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgOmZvY3VzLXZpc2libGUsCi51ay1vdmVybGF5LXByaW1hcnkgOmZvY3VzLXZpc2libGUsCi51ay1vZmZjYW52YXMtYmFyIDpmb2N1cy12aXNpYmxlIHsKICBvdXRsaW5lLWNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCBhLnVrLWxpbmstbXV0ZWQsCi51ay1saWdodCAudWstbGluay1tdXRlZCBhLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay1tdXRlZCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1tdXRlZCBhLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLW11dGVkLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstbXV0ZWQgYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstbXV0ZWQsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstbXV0ZWQgYSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay1tdXRlZCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLW11dGVkIGEsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IGEudWstbGluay1tdXRlZCwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstbXV0ZWQgYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBhLnVrLWxpbmstbXV0ZWQsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpbmstbXV0ZWQgYSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBhLnVrLWxpbmstbXV0ZWQsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstbXV0ZWQgYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIGEudWstbGluay1tdXRlZCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saW5rLW11dGVkIGEsCi51ay1vdmVybGF5LXByaW1hcnkgYS51ay1saW5rLW11dGVkLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saW5rLW11dGVkIGEsCi51ay1vZmZjYW52YXMtYmFyIGEudWstbGluay1tdXRlZCwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpbmstbXV0ZWQgYSB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgYS51ay1saW5rLW11dGVkOmhvdmVyLAoudWstbGlnaHQgLnVrLWxpbmstbXV0ZWQgYTpob3ZlciwKLnVrLWxpZ2h0IC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1tdXRlZCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstbXV0ZWQ6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstbXV0ZWQgYTpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstbXV0ZWQsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstbXV0ZWQ6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1tdXRlZCBhOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLW11dGVkLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay1tdXRlZDpob3ZlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1tdXRlZCBhOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1tdXRlZCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay1tdXRlZDpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLW11dGVkIGE6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstbXV0ZWQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IGEudWstbGluay1tdXRlZDpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstbXV0ZWQgYTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLW11dGVkLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIGEudWstbGluay1tdXRlZDpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbGluay1tdXRlZCBhOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1tdXRlZCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBhLnVrLWxpbmstbXV0ZWQ6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstbXV0ZWQgYTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstbXV0ZWQsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBhLnVrLWxpbmstbXV0ZWQ6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbGluay1tdXRlZCBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLW11dGVkLAoudWstb3ZlcmxheS1wcmltYXJ5IGEudWstbGluay1tdXRlZDpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGluay1tdXRlZCBhOmhvdmVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1tdXRlZCwKLnVrLW9mZmNhbnZhcy1iYXIgYS51ay1saW5rLW11dGVkOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstbGluay1tdXRlZCBhOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstbXV0ZWQgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IGEudWstbGluay10ZXh0OmhvdmVyLAoudWstbGlnaHQgLnVrLWxpbmstdGV4dCBhOmhvdmVyLAoudWstbGlnaHQgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLXRleHQsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLXRleHQ6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdGV4dCBhOmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay10ZXh0LAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLXRleHQ6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10ZXh0IGE6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstdGV4dCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstdGV4dDpob3ZlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10ZXh0IGE6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLXRleHQsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstdGV4dDpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRleHQgYTpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay10ZXh0LAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBhLnVrLWxpbmstdGV4dDpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstdGV4dCBhOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstdGV4dCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBhLnVrLWxpbmstdGV4dDpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbGluay10ZXh0IGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLXRleHQsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgYS51ay1saW5rLXRleHQ6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstdGV4dCBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay10ZXh0LAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgYS51ay1saW5rLXRleHQ6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbGluay10ZXh0IGE6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstdGV4dCwKLnVrLW92ZXJsYXktcHJpbWFyeSBhLnVrLWxpbmstdGV4dDpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGluay10ZXh0IGE6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLXRleHQsCi51ay1vZmZjYW52YXMtYmFyIGEudWstbGluay10ZXh0OmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstbGluay10ZXh0IGE6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay10ZXh0IHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCBhLnVrLWxpbmstaGVhZGluZzpob3ZlciwKLnVrLWxpZ2h0IC51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwKLnVrLWxpZ2h0IC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1oZWFkaW5nLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay1oZWFkaW5nOmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstaGVhZGluZywKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay1oZWFkaW5nOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLWhlYWRpbmcsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLWhlYWRpbmc6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1oZWFkaW5nLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLWhlYWRpbmc6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1oZWFkaW5nIGE6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstaGVhZGluZywKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgYS51ay1saW5rLWhlYWRpbmc6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLWhlYWRpbmcsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgYS51ay1saW5rLWhlYWRpbmc6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1oZWFkaW5nLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGEudWstbGluay1oZWFkaW5nOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstaGVhZGluZywKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIGEudWstbGluay1oZWFkaW5nOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLWhlYWRpbmcsCi51ay1vdmVybGF5LXByaW1hcnkgYS51ay1saW5rLWhlYWRpbmc6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1oZWFkaW5nLAoudWstb2ZmY2FudmFzLWJhciBhLnVrLWxpbmstaGVhZGluZzpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstaGVhZGluZyB7CiAgY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IC51ay1oZWFkaW5nLWRpdmlkZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctZGl2aWRlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWRpdmlkZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctZGl2aWRlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWRpdmlkZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLWRpdmlkZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWhlYWRpbmctZGl2aWRlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1kaXZpZGVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWhlYWRpbmctZGl2aWRlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaGVhZGluZy1kaXZpZGVyLAoudWstb2ZmY2FudmFzLWJhciAudWstaGVhZGluZy1kaXZpZGVyIHsKICBib3JkZXItYm90dG9tLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Cn0KLnVrLWxpZ2h0IC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3JlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3JlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctYnVsbGV0OjpiZWZvcmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctYnVsbGV0OjpiZWZvcmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1idWxsZXQ6OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctYnVsbGV0OjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWhlYWRpbmctYnVsbGV0OjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctYnVsbGV0OjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaGVhZGluZy1idWxsZXQ6OmJlZm9yZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaGVhZGluZy1idWxsZXQ6OmJlZm9yZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWhlYWRpbmctYnVsbGV0OjpiZWZvcmUgewogIGJvcmRlci1yaWdodC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwp9Ci51ay1saWdodCAudWstaGVhZGluZy1saW5lID4gOjpiZWZvcmUsCi51ay1saWdodCAudWstaGVhZGluZy1saW5lID4gOjphZnRlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lID4gOjpiZWZvcmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGluZSA+IDo6YWZ0ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lID4gOjpiZWZvcmUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lID4gOjphZnRlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lID4gOjpiZWZvcmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGluZSA+IDo6YWZ0ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lID4gOjpiZWZvcmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lID4gOjphZnRlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctbGluZSA+IDo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1saW5lID4gOjphZnRlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaGVhZGluZy1saW5lID4gOjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWhlYWRpbmctbGluZSA+IDo6YWZ0ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctbGluZSA+IDo6YmVmb3JlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLWxpbmUgPiA6OmFmdGVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWhlYWRpbmctbGluZSA+IDo6YmVmb3JlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWhlYWRpbmctbGluZSA+IDo6YWZ0ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWhlYWRpbmctbGluZSA+IDo6YmVmb3JlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oZWFkaW5nLWxpbmUgPiA6OmFmdGVyLAoudWstb2ZmY2FudmFzLWJhciAudWstaGVhZGluZy1saW5lID4gOjpiZWZvcmUsCi51ay1vZmZjYW52YXMtYmFyIC51ay1oZWFkaW5nLWxpbmUgPiA6OmFmdGVyIHsKICBib3JkZXItYm90dG9tLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Cn0KLnVrLWxpZ2h0IC51ay1kaXZpZGVyLWljb24sCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItaWNvbiwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb24sCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItaWNvbiwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb24sCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kaXZpZGVyLWljb24sCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWRpdmlkZXItaWNvbiwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstZGl2aWRlci1pY29uLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWRpdmlkZXItaWNvbiwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZGl2aWRlci1pY29uLAoudWstb2ZmY2FudmFzLWJhciAudWstZGl2aWRlci1pY29uIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjAlMjIlMjBoZWlnaHQlM0QlMjIyMCUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDIwJTIwMjAlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2NpcmNsZSUyMGZpbGwlM0QlMjJub25lJTIyJTIwc3Ryb2tlJTNEJTIycmdiYSUyODI1NSwlMjAyNTUsJTIwMjU1LCUyMDAuMiUyOSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjIlMjIlMjBjeCUzRCUyMjEwJTIyJTIwY3klM0QlMjIxMCUyMiUyMHIlM0QlMjI3JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIik7Cn0KLnVrLWxpZ2h0IC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwKLnVrLWxpZ2h0IC51ay1kaXZpZGVyLWljb246OmFmdGVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1pY29uOjphZnRlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb246OmFmdGVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1pY29uOjphZnRlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb246OmFmdGVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstZGl2aWRlci1pY29uOjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kaXZpZGVyLWljb246OmFmdGVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZGl2aWRlci1pY29uOjphZnRlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstZGl2aWRlci1pY29uOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItaWNvbjo6YWZ0ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZGl2aWRlci1pY29uOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZGl2aWRlci1pY29uOjphZnRlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZGl2aWRlci1pY29uOjpiZWZvcmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWRpdmlkZXItaWNvbjo6YWZ0ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWRpdmlkZXItaWNvbjo6YWZ0ZXIgewogIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKfQoudWstbGlnaHQgLnVrLWRpdmlkZXItc21hbGw6OmFmdGVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1zbWFsbDo6YWZ0ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1zbWFsbDo6YWZ0ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZGl2aWRlci1zbWFsbDo6YWZ0ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItc21hbGw6OmFmdGVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWRpdmlkZXItc21hbGw6OmFmdGVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWRpdmlkZXItc21hbGw6OmFmdGVyIHsKICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Cn0KLnVrLWxpZ2h0IC51ay1kaXZpZGVyLXZlcnRpY2FsLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLXZlcnRpY2FsLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItdmVydGljYWwsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItdmVydGljYWwsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci12ZXJ0aWNhbCwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItdmVydGljYWwsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWRpdmlkZXItdmVydGljYWwsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItdmVydGljYWwsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZGl2aWRlci12ZXJ0aWNhbCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZGl2aWRlci12ZXJ0aWNhbCwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWRpdmlkZXItdmVydGljYWwgewogIGJvcmRlci1yaWdodC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwp9Ci51ay1saWdodCAudWstbGlzdC1tdXRlZCA+IDo6YmVmb3JlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LW11dGVkID4gOjpiZWZvcmUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1tdXRlZCA+IDo6YmVmb3JlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LW11dGVkID4gOjpiZWZvcmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1tdXRlZCA+IDo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGlzdC1tdXRlZCA+IDo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saXN0LW11dGVkID4gOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3QtbXV0ZWQgPiA6OmJlZm9yZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saXN0LW11dGVkID4gOjpiZWZvcmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpc3QtbXV0ZWQgPiA6OmJlZm9yZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpc3QtbXV0ZWQgPiA6OmJlZm9yZSB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSAhaW1wb3J0YW50Owp9Ci51ay1saWdodCAudWstbGlzdC1lbXBoYXNpcyA+IDo6YmVmb3JlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWVtcGhhc2lzID4gOjpiZWZvcmUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1lbXBoYXNpcyA+IDo6YmVmb3JlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWVtcGhhc2lzID4gOjpiZWZvcmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1lbXBoYXNpcyA+IDo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGlzdC1lbXBoYXNpcyA+IDo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saXN0LWVtcGhhc2lzID4gOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3QtZW1waGFzaXMgPiA6OmJlZm9yZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saXN0LWVtcGhhc2lzID4gOjpiZWZvcmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpc3QtZW1waGFzaXMgPiA6OmJlZm9yZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpc3QtZW1waGFzaXMgPiA6OmJlZm9yZSB7CiAgY29sb3I6ICNmZmYgIWltcG9ydGFudDsKfQoudWstbGlnaHQgLnVrLWxpc3QtcHJpbWFyeSA+IDo6YmVmb3JlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXByaW1hcnkgPiA6OmJlZm9yZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXByaW1hcnkgPiA6OmJlZm9yZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1wcmltYXJ5ID4gOjpiZWZvcmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1wcmltYXJ5ID4gOjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saXN0LXByaW1hcnkgPiA6OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbGlzdC1wcmltYXJ5ID4gOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3QtcHJpbWFyeSA+IDo6YmVmb3JlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpc3QtcHJpbWFyeSA+IDo6YmVmb3JlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saXN0LXByaW1hcnkgPiA6OmJlZm9yZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpc3QtcHJpbWFyeSA+IDo6YmVmb3JlIHsKICBjb2xvcjogI2ZmZiAhaW1wb3J0YW50Owp9Ci51ay1saWdodCAudWstbGlzdC1zZWNvbmRhcnkgPiA6OmJlZm9yZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1zZWNvbmRhcnkgPiA6OmJlZm9yZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXNlY29uZGFyeSA+IDo6YmVmb3JlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXNlY29uZGFyeSA+IDo6YmVmb3JlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3Qtc2Vjb25kYXJ5ID4gOjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saXN0LXNlY29uZGFyeSA+IDo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saXN0LXNlY29uZGFyeSA+IDo6YmVmb3JlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saXN0LXNlY29uZGFyeSA+IDo6YmVmb3JlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpc3Qtc2Vjb25kYXJ5ID4gOjpiZWZvcmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpc3Qtc2Vjb25kYXJ5ID4gOjpiZWZvcmUsCi51ay1vZmZjYW52YXMtYmFyIC51ay1saXN0LXNlY29uZGFyeSA+IDo6YmVmb3JlIHsKICBjb2xvcjogI2ZmZiAhaW1wb3J0YW50Owp9Ci51ay1saWdodCAudWstbGlzdC1idWxsZXQgPiA6OmJlZm9yZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1idWxsZXQgPiA6OmJlZm9yZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWJ1bGxldCA+IDo6YmVmb3JlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWJ1bGxldCA+IDo6YmVmb3JlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtYnVsbGV0ID4gOjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saXN0LWJ1bGxldCA+IDo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saXN0LWJ1bGxldCA+IDo6YmVmb3JlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saXN0LWJ1bGxldCA+IDo6YmVmb3JlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpc3QtYnVsbGV0ID4gOjpiZWZvcmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpc3QtYnVsbGV0ID4gOjpiZWZvcmUsCi51ay1vZmZjYW52YXMtYmFyIC51ay1saXN0LWJ1bGxldCA+IDo6YmVmb3JlIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyNiUyMiUyMGhlaWdodCUzRCUyMjYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjA2JTIwNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDY2lyY2xlJTIwZmlsbCUzRCUyMnJnYmElMjgyNTUsJTIwMjU1LCUyMDI1NSwlMjAwLjclMjklMjIlMjBjeCUzRCUyMjMlMjIlMjBjeSUzRCUyMjMlMjIlMjByJTNEJTIyMyUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpOwp9Ci51ay1saWdodCAudWstbGlzdC1kaXZpZGVyID4gOm50aC1jaGlsZChuKzIpLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWRpdmlkZXIgPiA6bnRoLWNoaWxkKG4rMiksCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1kaXZpZGVyID4gOm50aC1jaGlsZChuKzIpLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWRpdmlkZXIgPiA6bnRoLWNoaWxkKG4rMiksCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1kaXZpZGVyID4gOm50aC1jaGlsZChuKzIpLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGlzdC1kaXZpZGVyID4gOm50aC1jaGlsZChuKzIpLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saXN0LWRpdmlkZXIgPiA6bnRoLWNoaWxkKG4rMiksCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3QtZGl2aWRlciA+IDpudGgtY2hpbGQobisyKSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saXN0LWRpdmlkZXIgPiA6bnRoLWNoaWxkKG4rMiksCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpc3QtZGl2aWRlciA+IDpudGgtY2hpbGQobisyKSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpc3QtZGl2aWRlciA+IDpudGgtY2hpbGQobisyKSB7CiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwp9Ci51ay1saWdodCAudWstbGlzdC1zdHJpcGVkID4gKjpudGgtb2YtdHlwZShvZGQpLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXN0cmlwZWQgPiAqOm50aC1vZi10eXBlKG9kZCksCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1zdHJpcGVkID4gKjpudGgtb2YtdHlwZShvZGQpLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXN0cmlwZWQgPiAqOm50aC1vZi10eXBlKG9kZCksCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1zdHJpcGVkID4gKjpudGgtb2YtdHlwZShvZGQpLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGlzdC1zdHJpcGVkID4gKjpudGgtb2YtdHlwZShvZGQpLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saXN0LXN0cmlwZWQgPiAqOm50aC1vZi10eXBlKG9kZCksCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3Qtc3RyaXBlZCA+ICo6bnRoLW9mLXR5cGUob2RkKSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saXN0LXN0cmlwZWQgPiAqOm50aC1vZi10eXBlKG9kZCksCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpc3Qtc3RyaXBlZCA+ICo6bnRoLW9mLXR5cGUob2RkKSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpc3Qtc3RyaXBlZCA+ICo6bnRoLW9mLXR5cGUob2RkKSB7CiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwogIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKfQoudWstbGlnaHQgLnVrLWxpc3Qtc3RyaXBlZCA+IDpudGgtb2YtdHlwZShvZGQpLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXN0cmlwZWQgPiA6bnRoLW9mLXR5cGUob2RkKSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXN0cmlwZWQgPiA6bnRoLW9mLXR5cGUob2RkKSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1zdHJpcGVkID4gOm50aC1vZi10eXBlKG9kZCksCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1zdHJpcGVkID4gOm50aC1vZi10eXBlKG9kZCksCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saXN0LXN0cmlwZWQgPiA6bnRoLW9mLXR5cGUob2RkKSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbGlzdC1zdHJpcGVkID4gOm50aC1vZi10eXBlKG9kZCksCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3Qtc3RyaXBlZCA+IDpudGgtb2YtdHlwZShvZGQpLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpc3Qtc3RyaXBlZCA+IDpudGgtb2YtdHlwZShvZGQpLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saXN0LXN0cmlwZWQgPiA6bnRoLW9mLXR5cGUob2RkKSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpc3Qtc3RyaXBlZCA+IDpudGgtb2YtdHlwZShvZGQpIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7Cn0KLnVrLWxpZ2h0IC51ay10YWJsZSB0aCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUgdGgsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUgdGgsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlIHRoLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlIHRoLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUgdGgsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYmxlIHRoLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSB0aCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZSB0aCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUgdGgsCi51ay1vZmZjYW52YXMtYmFyIC51ay10YWJsZSB0aCB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLXRhYmxlIGNhcHRpb24sCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlIGNhcHRpb24sCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUgY2FwdGlvbiwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUgY2FwdGlvbiwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSBjYXB0aW9uLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUgY2FwdGlvbiwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGFibGUgY2FwdGlvbiwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUgY2FwdGlvbiwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZSBjYXB0aW9uLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWJsZSBjYXB0aW9uLAoudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUgY2FwdGlvbiB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLXRhYmxlID4gdHIudWstYWN0aXZlLAoudWstbGlnaHQgLnVrLXRhYmxlIHRib2R5IHRyLnVrLWFjdGl2ZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUgPiB0ci51ay1hY3RpdmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlIHRib2R5IHRyLnVrLWFjdGl2ZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSA+IHRyLnVrLWFjdGl2ZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlID4gdHIudWstYWN0aXZlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUgPiB0ci51ay1hY3RpdmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUgdGJvZHkgdHIudWstYWN0aXZlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUgPiB0ci51ay1hY3RpdmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYmxlID4gdHIudWstYWN0aXZlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlID4gdHIudWstYWN0aXZlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGFibGUgPiB0ci51ay1hY3RpdmUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGFibGUgdGJvZHkgdHIudWstYWN0aXZlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWJsZSA+IHRyLnVrLWFjdGl2ZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUgdGJvZHkgdHIudWstYWN0aXZlLAoudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUgPiB0ci51ay1hY3RpdmUsCi51ay1vZmZjYW52YXMtYmFyIC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUgewogIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7Cn0KLnVrLWxpZ2h0IC51ay10YWJsZS1kaXZpZGVyID4gdHI6bm90KDpmaXJzdC1jaGlsZCksCi51ay1saWdodCAudWstdGFibGUtZGl2aWRlciA+IDpub3QoOmZpcnN0LWNoaWxkKSA+IHRyLAoudWstbGlnaHQgLnVrLXRhYmxlLWRpdmlkZXIgPiA6Zmlyc3QtY2hpbGQgPiB0cjpub3QoOmZpcnN0LWNoaWxkKSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlciA+IHRyOm5vdCg6Zmlyc3QtY2hpbGQpLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyID4gOm5vdCg6Zmlyc3QtY2hpbGQpID4gdHIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWRpdmlkZXIgPiA6Zmlyc3QtY2hpbGQgPiB0cjpub3QoOmZpcnN0LWNoaWxkKSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyID4gdHI6bm90KDpmaXJzdC1jaGlsZCksCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlciA+IDpub3QoOmZpcnN0LWNoaWxkKSA+IHRyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWRpdmlkZXIgPiA6Zmlyc3QtY2hpbGQgPiB0cjpub3QoOmZpcnN0LWNoaWxkKSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlciA+IHRyOm5vdCg6Zmlyc3QtY2hpbGQpLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyID4gOm5vdCg6Zmlyc3QtY2hpbGQpID4gdHIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWRpdmlkZXIgPiA6Zmlyc3QtY2hpbGQgPiB0cjpub3QoOmZpcnN0LWNoaWxkKSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyID4gdHI6bm90KDpmaXJzdC1jaGlsZCksCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlciA+IDpub3QoOmZpcnN0LWNoaWxkKSA+IHRyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWRpdmlkZXIgPiA6Zmlyc3QtY2hpbGQgPiB0cjpub3QoOmZpcnN0LWNoaWxkKSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWRpdmlkZXIgPiB0cjpub3QoOmZpcnN0LWNoaWxkKSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWRpdmlkZXIgPiA6bm90KDpmaXJzdC1jaGlsZCkgPiB0ciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWRpdmlkZXIgPiA6Zmlyc3QtY2hpbGQgPiB0cjpub3QoOmZpcnN0LWNoaWxkKSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGFibGUtZGl2aWRlciA+IHRyOm5vdCg6Zmlyc3QtY2hpbGQpLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZS1kaXZpZGVyID4gOm5vdCg6Zmlyc3QtY2hpbGQpID4gdHIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYmxlLWRpdmlkZXIgPiA6Zmlyc3QtY2hpbGQgPiB0cjpub3QoOmZpcnN0LWNoaWxkKSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtZGl2aWRlciA+IHRyOm5vdCg6Zmlyc3QtY2hpbGQpLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1kaXZpZGVyID4gOm5vdCg6Zmlyc3QtY2hpbGQpID4gdHIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWRpdmlkZXIgPiA6Zmlyc3QtY2hpbGQgPiB0cjpub3QoOmZpcnN0LWNoaWxkKSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZS1kaXZpZGVyID4gdHI6bm90KDpmaXJzdC1jaGlsZCksCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGFibGUtZGl2aWRlciA+IDpub3QoOmZpcnN0LWNoaWxkKSA+IHRyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYmxlLWRpdmlkZXIgPiA6Zmlyc3QtY2hpbGQgPiB0cjpub3QoOmZpcnN0LWNoaWxkKSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUtZGl2aWRlciA+IHRyOm5vdCg6Zmlyc3QtY2hpbGQpLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWJsZS1kaXZpZGVyID4gOm5vdCg6Zmlyc3QtY2hpbGQpID4gdHIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYmxlLWRpdmlkZXIgPiA6Zmlyc3QtY2hpbGQgPiB0cjpub3QoOmZpcnN0LWNoaWxkKSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlLWRpdmlkZXIgPiB0cjpub3QoOmZpcnN0LWNoaWxkKSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlLWRpdmlkZXIgPiA6bm90KDpmaXJzdC1jaGlsZCkgPiB0ciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlLWRpdmlkZXIgPiA6Zmlyc3QtY2hpbGQgPiB0cjpub3QoOmZpcnN0LWNoaWxkKSB7CiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwp9Ci51ay1saWdodCAudWstdGFibGUtc3RyaXBlZCA+IHRyOm50aC1vZi10eXBlKG9kZCksCi51ay1saWdodCAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUob2RkKSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgPiB0cjpudGgtb2YtdHlwZShvZGQpLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtc3RyaXBlZCA+IHRyOm50aC1vZi10eXBlKG9kZCksCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUob2RkKSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKG9kZCksCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUob2RkKSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGFibGUtc3RyaXBlZCA+IHRyOm50aC1vZi10eXBlKG9kZCksCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtc3RyaXBlZCA+IHRyOm50aC1vZi10eXBlKG9kZCksCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUob2RkKSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKG9kZCksCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYmxlLXN0cmlwZWQgPiB0cjpudGgtb2YtdHlwZShvZGQpLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKG9kZCksCi51ay1vZmZjYW52YXMtYmFyIC51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUob2RkKSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSB7CiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICBib3JkZXItYm90dG9tLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Cn0KLnVrLWxpZ2h0IC51ay10YWJsZS1ob3ZlciA+IHRyOmhvdmVyLAoudWstbGlnaHQgLnVrLXRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1ob3ZlciA+IHRyOmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1ob3ZlciA+IHRyOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1ob3ZlciA+IHRyOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1ob3ZlciA+IHRyOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtaG92ZXIgPiB0cjpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZS1ob3ZlciA+IHRyOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtaG92ZXIgPiB0cjpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGFibGUtaG92ZXIgPiB0cjpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUtaG92ZXIgPiB0cjpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay10YWJsZS1ob3ZlciA+IHRyOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIgewogIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7Cn0KLnVrLWxpZ2h0IC51ay1pY29uLWxpbmssCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tbGluaywKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbmssCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tbGluaywKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbmssCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWxpbmssCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWljb24tbGluaywKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1saW5rLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWljb24tbGluaywKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaWNvbi1saW5rLAoudWstb2ZmY2FudmFzLWJhciAudWstaWNvbi1saW5rIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstaWNvbi1saW5rOmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbms6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbms6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1saW5rOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1pY29uLWxpbms6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWljb24tbGluazpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1pY29uLWxpbms6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWljb24tbGluazpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWljb24tbGluazpob3ZlciB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLWljb24tbGluazphY3RpdmUsCi51ay1saWdodCAudWstYWN0aXZlID4gLnVrLWljb24tbGluaywKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rOmFjdGl2ZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWN0aXZlID4gLnVrLWljb24tbGluaywKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbms6YWN0aXZlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjdGl2ZSA+IC51ay1pY29uLWxpbmssCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tbGluazphY3RpdmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjdGl2ZSA+IC51ay1pY29uLWxpbmssCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rOmFjdGl2ZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY3RpdmUgPiAudWstaWNvbi1saW5rLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1saW5rOmFjdGl2ZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWFjdGl2ZSA+IC51ay1pY29uLWxpbmssCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWljb24tbGluazphY3RpdmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWFjdGl2ZSA+IC51ay1pY29uLWxpbmssCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWljb24tbGluazphY3RpdmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWFjdGl2ZSA+IC51ay1pY29uLWxpbmssCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaWNvbi1saW5rOmFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1hY3RpdmUgPiAudWstaWNvbi1saW5rLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pY29uLWxpbms6YWN0aXZlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1hY3RpdmUgPiAudWstaWNvbi1saW5rLAoudWstb2ZmY2FudmFzLWJhciAudWstaWNvbi1saW5rOmFjdGl2ZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWFjdGl2ZSA+IC51ay1pY29uLWxpbmsgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay1pY29uLWJ1dHRvbiwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b24sCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b24sCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tYnV0dG9uLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tYnV0dG9uLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1idXR0b24sCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWljb24tYnV0dG9uLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWJ1dHRvbiwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1pY29uLWJ1dHRvbiwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaWNvbi1idXR0b24sCi51ay1vZmZjYW52YXMtYmFyIC51ay1pY29uLWJ1dHRvbiB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cn0KLnVrLWxpZ2h0IC51ay1pY29uLWJ1dHRvbjpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b246aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b246aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tYnV0dG9uOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tYnV0dG9uOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1idXR0b246aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWljb24tYnV0dG9uOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWJ1dHRvbjpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1pY29uLWJ1dHRvbjpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaWNvbi1idXR0b246aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1pY29uLWJ1dHRvbjpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCAudWstaWNvbi1idXR0b246YWN0aXZlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbjphY3RpdmUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b246YWN0aXZlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbjphY3RpdmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b246YWN0aXZlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1idXR0b246YWN0aXZlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1pY29uLWJ1dHRvbjphY3RpdmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWljb24tYnV0dG9uOmFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1pY29uLWJ1dHRvbjphY3RpdmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWljb24tYnV0dG9uOmFjdGl2ZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWljb24tYnV0dG9uOmFjdGl2ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay1pbnB1dCwKLnVrLWxpZ2h0IC51ay1zZWxlY3QsCi51ay1saWdodCAudWstdGV4dGFyZWEsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0LAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWxlY3QsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0LAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXQsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dGFyZWEsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXQsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0LAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWxlY3QsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10ZXh0YXJlYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaW5wdXQsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNlbGVjdCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGV4dGFyZWEsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWlucHV0LAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWxlY3QsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHRhcmVhLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWlucHV0LAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNlbGVjdCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10ZXh0YXJlYSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaW5wdXQsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlbGVjdCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGV4dGFyZWEsCi51ay1vZmZjYW52YXMtYmFyIC51ay1pbnB1dCwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXNlbGVjdCwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRleHRhcmVhIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OwogIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwp9Ci51ay1saWdodCAudWstaW5wdXQ6Zm9jdXMsCi51ay1saWdodCAudWstc2VsZWN0OmZvY3VzLAoudWstbGlnaHQgLnVrLXRleHRhcmVhOmZvY3VzLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dDpmb2N1cywKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0OmZvY3VzLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYTpmb2N1cywKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dDpmb2N1cywKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWxlY3Q6Zm9jdXMsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dGFyZWE6Zm9jdXMsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0OmZvY3VzLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWxlY3Q6Zm9jdXMsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhOmZvY3VzLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0OmZvY3VzLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdDpmb2N1cywKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYTpmb2N1cywKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWlucHV0OmZvY3VzLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VsZWN0OmZvY3VzLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dGFyZWE6Zm9jdXMsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWlucHV0OmZvY3VzLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zZWxlY3Q6Zm9jdXMsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRleHRhcmVhOmZvY3VzLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pbnB1dDpmb2N1cywKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VsZWN0OmZvY3VzLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10ZXh0YXJlYTpmb2N1cywKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1pbnB1dDpmb2N1cywKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zZWxlY3Q6Zm9jdXMsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGV4dGFyZWE6Zm9jdXMsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWlucHV0OmZvY3VzLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWxlY3Q6Zm9jdXMsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRleHRhcmVhOmZvY3VzLAoudWstb2ZmY2FudmFzLWJhciAudWstaW5wdXQ6Zm9jdXMsCi51ay1vZmZjYW52YXMtYmFyIC51ay1zZWxlY3Q6Zm9jdXMsCi51ay1vZmZjYW52YXMtYmFyIC51ay10ZXh0YXJlYTpmb2N1cyB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCAudWstaW5wdXQ6OnBsYWNlaG9sZGVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXQ6OnBsYWNlaG9sZGVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXQ6OnBsYWNlaG9sZGVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXQ6OnBsYWNlaG9sZGVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWlucHV0OjpwbGFjZWhvbGRlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWlucHV0OjpwbGFjZWhvbGRlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWlucHV0OjpwbGFjZWhvbGRlciB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLXRleHRhcmVhOjpwbGFjZWhvbGRlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhOjpwbGFjZWhvbGRlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhOjpwbGFjZWhvbGRlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHRhcmVhOjpwbGFjZWhvbGRlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10ZXh0YXJlYTo6cGxhY2Vob2xkZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10ZXh0YXJlYTo6cGxhY2Vob2xkZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay10ZXh0YXJlYTo6cGxhY2Vob2xkZXIgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cn0KLnVrLWxpZ2h0IC51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSkgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIyNCUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMjQlMjAxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjJyZ2JhJTI4MjU1LCUyMDI1NSwlMjAyNTUsJTIwMC43JTI5JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxJTIwOSUyMDYlMjAxNSUyMDYlMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMnJnYmElMjgyNTUsJTIwMjU1LCUyMDI1NSwlMjAwLjclMjklMjIlMjBwb2ludHMlM0QlMjIxMiUyMDEzJTIwOSUyMDglMjAxNSUyMDglMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEiKTsKfQoudWstbGlnaHQgLnVrLWlucHV0W2xpc3RdOmhvdmVyLAoudWstbGlnaHQgLnVrLWlucHV0W2xpc3RdOmZvY3VzLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dFtsaXN0XTpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXRbbGlzdF06Zm9jdXMsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXRbbGlzdF06aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXRbbGlzdF06Zm9jdXMsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0W2xpc3RdOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dFtsaXN0XTpmb2N1cywKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dFtsaXN0XTpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dFtsaXN0XTpmb2N1cywKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWlucHV0W2xpc3RdOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXRbbGlzdF06Zm9jdXMsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWlucHV0W2xpc3RdOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1pbnB1dFtsaXN0XTpmb2N1cywKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXRbbGlzdF06aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWlucHV0W2xpc3RdOmZvY3VzLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWlucHV0W2xpc3RdOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWlucHV0W2xpc3RdOmZvY3VzLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pbnB1dFtsaXN0XTpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaW5wdXRbbGlzdF06Zm9jdXMsCi51ay1vZmZjYW52YXMtYmFyIC51ay1pbnB1dFtsaXN0XTpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWlucHV0W2xpc3RdOmZvY3VzIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDI0JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIycmdiYSUyODI1NSwlMjAyNTUsJTIwMjU1LCUyMDAuNyUyOSUyMiUyMHBvaW50cyUzRCUyMjEyJTIwMTIlMjA4JTIwNiUyMDE2JTIwNiUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSIpOwp9Ci51ay1saWdodCAudWstcmFkaW8sCi51ay1saWdodCAudWstY2hlY2tib3gsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXJhZGlvLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbywKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW8sCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94LAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXJhZGlvLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94LAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW8sCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstcmFkaW8sCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWNoZWNrYm94LAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1yYWRpbywKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3gsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstcmFkaW8sCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstY2hlY2tib3gsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXJhZGlvLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1jaGVja2JveCwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXJhZGlvLAoudWstb2ZmY2FudmFzLWJhciAudWstY2hlY2tib3ggewogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKfQoudWstbGlnaHQgLnVrLXJhZGlvOmZvY3VzLAoudWstbGlnaHQgLnVrLWNoZWNrYm94OmZvY3VzLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpmb2N1cywKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Zm9jdXMsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Zm9jdXMsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Zm9jdXMsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXJhZGlvOmZvY3VzLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpmb2N1cywKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpmb2N1cywKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpmb2N1cywKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXJhZGlvOmZvY3VzLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6Zm9jdXMsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXJhZGlvOmZvY3VzLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1jaGVja2JveDpmb2N1cywKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Zm9jdXMsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmZvY3VzLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXJhZGlvOmZvY3VzLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWNoZWNrYm94OmZvY3VzLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1yYWRpbzpmb2N1cywKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstY2hlY2tib3g6Zm9jdXMsCi51ay1vZmZjYW52YXMtYmFyIC51ay1yYWRpbzpmb2N1cywKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWNoZWNrYm94OmZvY3VzIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpOwogIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCAudWstcmFkaW86Y2hlY2tlZCwKLnVrLWxpZ2h0IC51ay1jaGVja2JveDpjaGVja2VkLAoudWstbGlnaHQgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXJhZGlvOmNoZWNrZWQsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpjaGVja2VkLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXJhZGlvOmNoZWNrZWQsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpjaGVja2VkLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1yYWRpbzpjaGVja2VkLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6Y2hlY2tlZCwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXJhZGlvOmNoZWNrZWQsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWNoZWNrYm94OmNoZWNrZWQsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXJhZGlvOmNoZWNrZWQsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmNoZWNrZWQsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstcmFkaW86Y2hlY2tlZCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1jaGVja2JveDpjaGVja2VkLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXJhZGlvOmNoZWNrZWQsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNoZWNrYm94OmNoZWNrZWQsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsCi51ay1vZmZjYW52YXMtYmFyIC51ay1yYWRpbzpjaGVja2VkLAoudWstb2ZmY2FudmFzLWJhciAudWstY2hlY2tib3g6Y2hlY2tlZCwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUgewogIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLAoudWstbGlnaHQgLnVrLWNoZWNrYm94OmNoZWNrZWQ6Zm9jdXMsCi51ay1saWdodCAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZDpmb2N1cywKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQ6Zm9jdXMsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZDpmb2N1cywKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQ6Zm9jdXMsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXJhZGlvOmNoZWNrZWQ6Zm9jdXMsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveDpjaGVja2VkOmZvY3VzLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstcmFkaW86Y2hlY2tlZDpmb2N1cywKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Y2hlY2tlZDpmb2N1cywKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWNoZWNrYm94OmNoZWNrZWQ6Zm9jdXMsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstcmFkaW86Y2hlY2tlZDpmb2N1cywKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXJhZGlvOmNoZWNrZWQ6Zm9jdXMsCi51ay1vZmZjYW52YXMtYmFyIC51ay1jaGVja2JveDpjaGVja2VkOmZvY3VzLAoudWstb2ZmY2FudmFzLWJhciAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cyB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKfQoudWstbGlnaHQgLnVrLXJhZGlvOmNoZWNrZWQsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXJhZGlvOmNoZWNrZWQsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Y2hlY2tlZCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstcmFkaW86Y2hlY2tlZCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Y2hlY2tlZCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1yYWRpbzpjaGVja2VkLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1yYWRpbzpjaGVja2VkLAoudWstb2ZmY2FudmFzLWJhciAudWstcmFkaW86Y2hlY2tlZCB7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjE2JTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNiUyMDE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NjaXJjbGUlMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIwY3glM0QlMjI4JTIyJTIwY3klM0QlMjI4JTIyJTIwciUzRCUyMjIlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UiKTsKfQoudWstbGlnaHQgLnVrLWNoZWNrYm94OmNoZWNrZWQsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpjaGVja2VkLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6Y2hlY2tlZCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstY2hlY2tib3g6Y2hlY2tlZCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6Y2hlY2tlZCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1jaGVja2JveDpjaGVja2VkLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1jaGVja2JveDpjaGVja2VkLAoudWstb2ZmY2FudmFzLWJhciAudWstY2hlY2tib3g6Y2hlY2tlZCB7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjE0JTIyJTIwaGVpZ2h0JTNEJTIyMTElMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNCUyMDExJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzY2NiUyMiUyMHBvaW50cyUzRCUyMjEyJTIwMSUyMDUlMjA3LjUlMjAyJTIwNSUyMDElMjA1LjUlMjA1JTIwMTAlMjAxMyUyMDEuNSUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSIpOwp9Ci51ay1saWdodCAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDppbmRldGVybWluYXRlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDppbmRldGVybWluYXRlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveDppbmRldGVybWluYXRlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1jaGVja2JveDppbmRldGVybWluYXRlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveDppbmRldGVybWluYXRlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsCi51ay1vZmZjYW52YXMtYmFyIC51ay1jaGVja2JveDppbmRldGVybWluYXRlIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTYlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE2JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIweCUzRCUyMjMlMjIlMjB5JTNEJTIyOCUyMiUyMHdpZHRoJTNEJTIyMTAlMjIlMjBoZWlnaHQlM0QlMjIxJTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIik7Cn0KLnVrLWxpZ2h0IC51ay1mb3JtLWxhYmVsLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1mb3JtLWxhYmVsLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWZvcm0tbGFiZWwsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWZvcm0tbGFiZWwsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1sYWJlbCwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWZvcm0tbGFiZWwsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWZvcm0tbGFiZWwsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWZvcm0tbGFiZWwsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZm9ybS1sYWJlbCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZm9ybS1sYWJlbCwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWZvcm0tbGFiZWwgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCAudWstZm9ybS1pY29uLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1mb3JtLWljb24sCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1pY29uLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1mb3JtLWljb24sCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1pY29uLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstZm9ybS1pY29uLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1mb3JtLWljb24sCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWZvcm0taWNvbiwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1mb3JtLWljb24sCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWZvcm0taWNvbiwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWZvcm0taWNvbiB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLWZvcm0taWNvbjpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1pY29uOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWZvcm0taWNvbjpob3ZlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1pY29uOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWZvcm0taWNvbjpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWZvcm0taWNvbjpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZm9ybS1pY29uOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1mb3JtLWljb246aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZm9ybS1pY29uOmhvdmVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1mb3JtLWljb246aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1mb3JtLWljb246aG92ZXIgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay1idXR0b24tZGVmYXVsdCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0LAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0LAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWRlZmF1bHQsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi1kZWZhdWx0LAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tZGVmYXVsdCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tZGVmYXVsdCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLWRlZmF1bHQsCi51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tZGVmYXVsdCB7CiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgY29sb3I6ICNmZmY7CiAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQ6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQ6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0OmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0OmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWRlZmF1bHQ6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi1kZWZhdWx0OmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLWRlZmF1bHQ6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tZGVmYXVsdDpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgY29sb3I6ICNmZmY7CiAgYm9yZGVyLWNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCAudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZlLAoudWstbGlnaHQgLnVrLWJ1dHRvbi1kZWZhdWx0LnVrLWFjdGl2ZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdC51ay1hY3RpdmUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0LnVrLWFjdGl2ZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdC51ay1hY3RpdmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0LnVrLWFjdGl2ZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1kZWZhdWx0OmFjdGl2ZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1kZWZhdWx0LnVrLWFjdGl2ZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tZGVmYXVsdC51ay1hY3RpdmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1kZWZhdWx0OmFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi1kZWZhdWx0OmFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tZGVmYXVsdC51ay1hY3RpdmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1kZWZhdWx0OmFjdGl2ZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLAoudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZlLAoudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICBjb2xvcjogI2ZmZjsKICBib3JkZXItY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IC51ay1idXR0b24tcHJpbWFyeSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnksCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnksCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5LAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5LAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXByaW1hcnksCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi1wcmltYXJ5LAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tcHJpbWFyeSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tcHJpbWFyeSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXByaW1hcnksCi51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tcHJpbWFyeSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICBjb2xvcjogIzY2NjsKfQoudWstbGlnaHQgLnVrLWJ1dHRvbi1wcmltYXJ5OmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnk6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnk6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLXByaW1hcnk6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1wcmltYXJ5OmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi1wcmltYXJ5OmhvdmVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1wcmltYXJ5OmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOwogIGNvbG9yOiAjNjY2Owp9Ci51ay1saWdodCAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLAoudWstbGlnaHQgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1wcmltYXJ5OmFjdGl2ZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1wcmltYXJ5OmFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXByaW1hcnkudWstYWN0aXZlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi1wcmltYXJ5OmFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1wcmltYXJ5OmFjdGl2ZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXByaW1hcnkudWstYWN0aXZlLAoudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLAoudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLXByaW1hcnkudWstYWN0aXZlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2OwogIGNvbG9yOiAjNjY2Owp9Ci51ay1saWdodCAudWstYnV0dG9uLXNlY29uZGFyeSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5LAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5LAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnksCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tc2Vjb25kYXJ5LAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tc2Vjb25kYXJ5LAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tc2Vjb25kYXJ5LAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi1zZWNvbmRhcnksCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1zZWNvbmRhcnksCi51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tc2Vjb25kYXJ5IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogIGNvbG9yOiAjNjY2Owp9Ci51ay1saWdodCAudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5OmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5OmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tc2Vjb25kYXJ5OmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tc2Vjb25kYXJ5OmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tc2Vjb25kYXJ5OmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tc2Vjb25kYXJ5OmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyOwogIGNvbG9yOiAjNjY2Owp9Ci51ay1saWdodCAudWstYnV0dG9uLXNlY29uZGFyeTphY3RpdmUsCi51ay1saWdodCAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6YWN0aXZlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5LnVrLWFjdGl2ZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5LnVrLWFjdGl2ZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeTphY3RpdmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6YWN0aXZlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXNlY29uZGFyeTphY3RpdmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tc2Vjb25kYXJ5LnVrLWFjdGl2ZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLXNlY29uZGFyeTphY3RpdmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLXNlY29uZGFyeTphY3RpdmUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6YWN0aXZlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tc2Vjb25kYXJ5LnVrLWFjdGl2ZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6YWN0aXZlLAoudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUgewogIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7CiAgY29sb3I6ICM2NjY7Cn0KLnVrLWxpZ2h0IC51ay1idXR0b24tdGV4dCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0LAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0LAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXRleHQsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi10ZXh0LAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tdGV4dCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tdGV4dCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXRleHQsCi51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tdGV4dCB7CiAgY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IC51ay1idXR0b24tdGV4dDo6YmVmb3JlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDo6YmVmb3JlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0OjpiZWZvcmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0OjpiZWZvcmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi10ZXh0OjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi10ZXh0OjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi10ZXh0OjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLXRleHQ6OmJlZm9yZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXRleHQ6OmJlZm9yZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi10ZXh0OjpiZWZvcmUgewogIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IC51ay1idXR0b24tdGV4dDpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0OmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0OmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXRleHQ6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi10ZXh0OmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tdGV4dDpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tdGV4dDpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXRleHQ6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tdGV4dDpob3ZlciB7CiAgY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IC51ay1idXR0b24tdGV4dDpkaXNhYmxlZCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tdGV4dDpkaXNhYmxlZCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tdGV4dDpkaXNhYmxlZCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsCi51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tdGV4dDpkaXNhYmxlZCB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLWJ1dHRvbi1saW5rLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tbGluaywKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tbGluaywKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWxpbmssCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWxpbmssCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tbGluaywKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLWxpbmssCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1saW5rLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi1saW5rLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tbGluaywKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1saW5rIHsKICBjb2xvcjogI2ZmZjsKfQoudWstbGlnaHQgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tbGluazpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tbGluazpob3ZlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWxpbms6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWxpbms6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tbGluazpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLWxpbms6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tbGluazpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1saW5rOmhvdmVyIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodC51ay1jYXJkLWJhZGdlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpLnVrLWNhcmQtYmFkZ2UsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKS51ay1jYXJkLWJhZGdlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpLnVrLWNhcmQtYmFkZ2UsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKS51ay1jYXJkLWJhZGdlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keS51ay1jYXJkLWJhZGdlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pLnVrLWNhcmQtYmFkZ2UsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkudWstY2FyZC1iYWRnZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pLnVrLWNhcmQtYmFkZ2UsCi51ay1vdmVybGF5LXByaW1hcnkudWstY2FyZC1iYWRnZSwKLnVrLW9mZmNhbnZhcy1iYXIudWstY2FyZC1iYWRnZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICBjb2xvcjogIzY2NjsKfQoudWstbGlnaHQgLnVrLWNsb3NlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jbG9zZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jbG9zZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2xvc2UsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2xvc2UsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1jbG9zZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstY2xvc2UsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWNsb3NlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWNsb3NlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1jbG9zZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWNsb3NlIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstY2xvc2U6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNsb3NlOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNsb3NlOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jbG9zZTpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jbG9zZTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWNsb3NlOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1jbG9zZTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstY2xvc2U6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstY2xvc2U6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNsb3NlOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstY2xvc2U6aG92ZXIgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay10b3RvcCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdG90b3AsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdG90b3AsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRvdG9wLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRvdG9wLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdG90b3AsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRvdG9wLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10b3RvcCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10b3RvcCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdG90b3AsCi51ay1vZmZjYW52YXMtYmFyIC51ay10b3RvcCB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLXRvdG9wOmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcDpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcDpob3ZlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdG90b3A6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdG90b3A6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10b3RvcDpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdG90b3A6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRvdG9wOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRvdG9wOmhvdmVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10b3RvcDpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRvdG9wOmhvdmVyIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCAudWstdG90b3A6YWN0aXZlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcDphY3RpdmUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdG90b3A6YWN0aXZlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcDphY3RpdmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdG90b3A6YWN0aXZlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdG90b3A6YWN0aXZlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10b3RvcDphY3RpdmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRvdG9wOmFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10b3RvcDphY3RpdmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRvdG9wOmFjdGl2ZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRvdG9wOmFjdGl2ZSB7CiAgY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IC51ay1tYXJrZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW1hcmtlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1tYXJrZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW1hcmtlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1tYXJrZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1tYXJrZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW1hcmtlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbWFya2VyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW1hcmtlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbWFya2VyLAoudWstb2ZmY2FudmFzLWJhciAudWstbWFya2VyIHsKICBiYWNrZ3JvdW5kOiAjZjhmOGY4OwogIGNvbG9yOiAjNjY2Owp9Ci51ay1saWdodCAudWstbWFya2VyOmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1tYXJrZXI6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbWFya2VyOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1tYXJrZXI6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbWFya2VyOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbWFya2VyOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1tYXJrZXI6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW1hcmtlcjpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1tYXJrZXI6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW1hcmtlcjpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW1hcmtlcjpob3ZlciB7CiAgY29sb3I6ICM2NjY7Cn0KLnVrLWxpZ2h0IC51ay1iYWRnZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYmFkZ2UsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYmFkZ2UsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJhZGdlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJhZGdlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYmFkZ2UsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJhZGdlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1iYWRnZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1iYWRnZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYmFkZ2UsCi51ay1vZmZjYW52YXMtYmFyIC51ay1iYWRnZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICBjb2xvcjogIzY2NiAhaW1wb3J0YW50Owp9Ci51ay1saWdodCAudWstbGFiZWwsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxhYmVsLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxhYmVsLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sYWJlbCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sYWJlbCwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxhYmVsLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1sYWJlbCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGFiZWwsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbGFiZWwsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxhYmVsLAoudWstb2ZmY2FudmFzLWJhciAudWstbGFiZWwgewogIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgY29sb3I6ICM2NjY7Cn0KLnVrLWxpZ2h0IC51ay1hcnRpY2xlLW1ldGEsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFydGljbGUtbWV0YSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hcnRpY2xlLW1ldGEsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFydGljbGUtbWV0YSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hcnRpY2xlLW1ldGEsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1hcnRpY2xlLW1ldGEsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWFydGljbGUtbWV0YSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYXJ0aWNsZS1tZXRhLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWFydGljbGUtbWV0YSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYXJ0aWNsZS1tZXRhLAoudWstb2ZmY2FudmFzLWJhciAudWstYXJ0aWNsZS1tZXRhIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstc2VhcmNoLWlucHV0LAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtaW5wdXQsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWlucHV0LAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtaW5wdXQsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWlucHV0LAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLWlucHV0LAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zZWFyY2gtaW5wdXQsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zZWFyY2gtaW5wdXQsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXNlYXJjaC1pbnB1dCB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLXNlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWlucHV0OjpwbGFjZWhvbGRlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWlucHV0OjpwbGFjZWhvbGRlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLWlucHV0OjpwbGFjZWhvbGRlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc2VhcmNoLWlucHV0OjpwbGFjZWhvbGRlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLWlucHV0OjpwbGFjZWhvbGRlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLAoudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoLWlucHV0OjpwbGFjZWhvbGRlciB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb24sCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb24sCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbiwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbiwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbiwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbiwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbiwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLAoudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbiB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb246aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb246aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbjpob3ZlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbjpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbjpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbjpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbjpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbjpob3ZlciB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LAoudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dCB7CiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Cn0KLnVrLWxpZ2h0IC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3VzLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3VzLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQ6Zm9jdXMsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQ6Zm9jdXMsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dDpmb2N1cywKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQ6Zm9jdXMsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQ6Zm9jdXMsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQ6Zm9jdXMsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dDpmb2N1cywKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dDpmb2N1cywKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQ6Zm9jdXMgewogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7Cn0KLnVrLWxpZ2h0IC51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXQsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXQsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXQsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWlucHV0LAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWlucHV0LAoudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWlucHV0IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoudWstbGlnaHQgLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWlucHV0LAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaW5wdXQsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaW5wdXQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaW5wdXQsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWlucHV0LAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWlucHV0LAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWlucHV0IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoudWstbGlnaHQgLnVrLXNlYXJjaC10b2dnbGUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC10b2dnbGUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLXRvZ2dsZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLXRvZ2dsZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtdG9nZ2xlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLXRvZ2dsZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc2VhcmNoLXRvZ2dsZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLXRvZ2dsZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zZWFyY2gtdG9nZ2xlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2gtdG9nZ2xlLAoudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoLXRvZ2dsZSB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLXNlYXJjaC10b2dnbGU6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC10b2dnbGU6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtdG9nZ2xlOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zZWFyY2gtdG9nZ2xlOmhvdmVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2gtdG9nZ2xlOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLWFjY29yZGlvbi10aXRsZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWNjb3JkaW9uLXRpdGxlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWNjb3JkaW9uLXRpdGxlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWFjY29yZGlvbi10aXRsZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYWNjb3JkaW9uLXRpdGxlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1hY2NvcmRpb24tdGl0bGUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYWNjb3JkaW9uLXRpdGxlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1hY2NvcmRpb24tdGl0bGUsCi51ay1vZmZjYW52YXMtYmFyIC51ay1hY2NvcmRpb24tdGl0bGUgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGU6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGU6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1hY2NvcmRpb24tdGl0bGU6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWFjY29yZGlvbi10aXRsZTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1hY2NvcmRpb24tdGl0bGU6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWFjY29yZGlvbi10aXRsZTpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWFjY29yZGlvbi10aXRsZTpob3ZlciB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLWdyaWQtZGl2aWRlciA+IDpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZ3JpZC1kaXZpZGVyID4gOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWdyaWQtZGl2aWRlciA+IDpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZ3JpZC1kaXZpZGVyID4gOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWdyaWQtZGl2aWRlciA+IDpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWdyaWQtZGl2aWRlciA+IDpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZ3JpZC1kaXZpZGVyID4gOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1ncmlkLWRpdmlkZXIgPiA6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZ3JpZC1kaXZpZGVyID4gOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1ncmlkLWRpdmlkZXIgPiA6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsCi51ay1vZmZjYW52YXMtYmFyIC51ay1ncmlkLWRpdmlkZXIgPiA6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUgewogIGJvcmRlci1yaWdodC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwp9Ci51ay1saWdodCAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbjo6YmVmb3JlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbjo6YmVmb3JlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXN0YWNrID4gLnVrLWdyaWQtbWFyZ2luOjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbjo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbjo6YmVmb3JlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbjo6YmVmb3JlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXN0YWNrID4gLnVrLWdyaWQtbWFyZ2luOjpiZWZvcmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXN0YWNrID4gLnVrLWdyaWQtbWFyZ2luOjpiZWZvcmUsCi51ay1vZmZjYW52YXMtYmFyIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbjo6YmVmb3JlIHsKICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Cn0KLnVrLWxpZ2h0IC51ay1uYXYtZGVmYXVsdCA+IGxpID4gYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgPiBsaSA+IGEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgPiBsaSA+IGEsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0ID4gbGkgPiBhLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0ID4gbGkgPiBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQgPiBsaSA+IGEsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1kZWZhdWx0ID4gbGkgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCA+IGxpID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtZGVmYXVsdCA+IGxpID4gYSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LWRlZmF1bHQgPiBsaSA+IGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtZGVmYXVsdCA+IGxpID4gYSB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLW5hdi1kZWZhdWx0ID4gbGkgPiBhOmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCA+IGxpID4gYTpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCA+IGxpID4gYTpob3ZlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgPiBsaSA+IGE6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgPiBsaSA+IGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCA+IGxpID4gYTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LWRlZmF1bHQgPiBsaSA+IGE6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0ID4gbGkgPiBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1kZWZhdWx0ID4gbGkgPiBhOmhvdmVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtZGVmYXVsdCA+IGxpID4gYTpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1kZWZhdWx0ID4gbGkgPiBhOmhvdmVyIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCAudWstbmF2LWRlZmF1bHQgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtZGVmYXVsdCA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtZGVmYXVsdCA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1kZWZhdWx0ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1kZWZhdWx0ID4gbGkudWstYWN0aXZlID4gYSB7CiAgY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciB7CiAgY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyLAoudWstb2ZmY2FudmFzLWJhciAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyIHsKICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Cn0KLnVrLWxpZ2h0IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cn0KLnVrLWxpZ2h0IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYTpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYTpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCAudWstbmF2LXByaW1hcnkgPiBsaSA+IGEsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5ID4gbGkgPiBhLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5ID4gbGkgPiBhLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSA+IGxpID4gYSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSA+IGxpID4gYSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5ID4gbGkgPiBhLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtcHJpbWFyeSA+IGxpID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnkgPiBsaSA+IGEsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXByaW1hcnkgPiBsaSA+IGEsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1wcmltYXJ5ID4gbGkgPiBhLAoudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXByaW1hcnkgPiBsaSA+IGEgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cn0KLnVrLWxpZ2h0IC51ay1uYXYtcHJpbWFyeSA+IGxpID4gYTpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgPiBsaSA+IGE6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgPiBsaSA+IGE6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5ID4gbGkgPiBhOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5ID4gbGkgPiBhOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnkgPiBsaSA+IGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1wcmltYXJ5ID4gbGkgPiBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSA+IGxpID4gYTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtcHJpbWFyeSA+IGxpID4gYTpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXByaW1hcnkgPiBsaSA+IGE6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtcHJpbWFyeSA+IGxpID4gYTpob3ZlciB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLW5hdi1wcmltYXJ5ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXByaW1hcnkgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXByaW1hcnkgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtcHJpbWFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtcHJpbWFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtaGVhZGVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtaGVhZGVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWhlYWRlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWhlYWRlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtaGVhZGVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWhlYWRlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtaGVhZGVyLAoudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1kaXZpZGVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWRpdmlkZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1kaXZpZGVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWRpdmlkZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1kaXZpZGVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1kaXZpZGVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWRpdmlkZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWRpdmlkZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlciB7CiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwp9Ci51ay1saWdodCAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGEsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGEsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVyIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhIHsKICBjb2xvcjogI2ZmZjsKfQoudWstbGlnaHQgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGEsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhLAoudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYSB7CiAgY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhOmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGE6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGE6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGE6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGE6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYTpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYTpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGE6aG92ZXIgewogIGNvbG9yOiAjZmZmOwogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKfQoudWstbGlnaHQgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXNlY29uZGFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaS51ay1hY3RpdmUgPiBhIHsKICBjb2xvcjogI2ZmZjsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7Cn0KLnVrLWxpZ2h0IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3VidGl0bGUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWJ0aXRsZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3VidGl0bGUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWJ0aXRsZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3VidGl0bGUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3VidGl0bGUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWJ0aXRsZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YnRpdGxlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWJ0aXRsZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YnRpdGxlLAoudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YnRpdGxlIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYTpob3ZlciAudWstbmF2LXN1YnRpdGxlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhOmhvdmVyIC51ay1uYXYtc3VidGl0bGUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYTpob3ZlciAudWstbmF2LXN1YnRpdGxlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhOmhvdmVyIC51ay1uYXYtc3VidGl0bGUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYTpob3ZlciAudWstbmF2LXN1YnRpdGxlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYTpob3ZlciAudWstbmF2LXN1YnRpdGxlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhOmhvdmVyIC51ay1uYXYtc3VidGl0bGUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGE6aG92ZXIgLnVrLW5hdi1zdWJ0aXRsZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhOmhvdmVyIC51ay1uYXYtc3VidGl0bGUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGE6aG92ZXIgLnVrLW5hdi1zdWJ0aXRsZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGE6aG92ZXIgLnVrLW5hdi1zdWJ0aXRsZSB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaS51ay1hY3RpdmUgPiBhIC51ay1uYXYtc3VidGl0bGUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaS51ay1hY3RpdmUgPiBhIC51ay1uYXYtc3VidGl0bGUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEgLnVrLW5hdi1zdWJ0aXRsZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEgLnVrLW5hdi1zdWJ0aXRsZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkudWstYWN0aXZlID4gYSAudWstbmF2LXN1YnRpdGxlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEgLnVrLW5hdi1zdWJ0aXRsZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXNlY29uZGFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEgLnVrLW5hdi1zdWJ0aXRsZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEgLnVrLW5hdi1zdWJ0aXRsZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkudWstYWN0aXZlID4gYSAudWstbmF2LXN1YnRpdGxlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkudWstYWN0aXZlID4gYSAudWstbmF2LXN1YnRpdGxlLAoudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXNlY29uZGFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEgLnVrLW5hdi1zdWJ0aXRsZSB7CiAgY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtaGVhZGVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtaGVhZGVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1oZWFkZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1oZWFkZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWhlYWRlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1oZWFkZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1oZWFkZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1oZWFkZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWhlYWRlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWhlYWRlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1oZWFkZXIgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWRpdmlkZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1kaXZpZGVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1kaXZpZGVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtZGl2aWRlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtZGl2aWRlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1kaXZpZGVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtZGl2aWRlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWRpdmlkZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWRpdmlkZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1kaXZpZGVyLAoudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWRpdmlkZXIgewogIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKfQoudWstbGlnaHQgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGEsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGEgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cn0KLnVrLWxpZ2h0IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhOmhvdmVyIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSB7CiAgY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IC51ay1uYXYudWstbmF2LWRpdmlkZXIgPiA6bm90KC51ay1uYXYtZGl2aWRlcikgKyA6bm90KC51ay1uYXYtaGVhZGVyLCAudWstbmF2LWRpdmlkZXIpLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYudWstbmF2LWRpdmlkZXIgPiA6bm90KC51ay1uYXYtZGl2aWRlcikgKyA6bm90KC51ay1uYXYtaGVhZGVyLCAudWstbmF2LWRpdmlkZXIpLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi51ay1uYXYtZGl2aWRlciA+IDpub3QoLnVrLW5hdi1kaXZpZGVyKSArIDpub3QoLnVrLW5hdi1oZWFkZXIsIC51ay1uYXYtZGl2aWRlciksCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi51ay1uYXYtZGl2aWRlciA+IDpub3QoLnVrLW5hdi1kaXZpZGVyKSArIDpub3QoLnVrLW5hdi1oZWFkZXIsIC51ay1uYXYtZGl2aWRlciksCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LnVrLW5hdi1kaXZpZGVyID4gOm5vdCgudWstbmF2LWRpdmlkZXIpICsgOm5vdCgudWstbmF2LWhlYWRlciwgLnVrLW5hdi1kaXZpZGVyKSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi51ay1uYXYtZGl2aWRlciA+IDpub3QoLnVrLW5hdi1kaXZpZGVyKSArIDpub3QoLnVrLW5hdi1oZWFkZXIsIC51ay1uYXYtZGl2aWRlciksCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi51ay1uYXYtZGl2aWRlciA+IDpub3QoLnVrLW5hdi1kaXZpZGVyKSArIDpub3QoLnVrLW5hdi1oZWFkZXIsIC51ay1uYXYtZGl2aWRlciksCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi51ay1uYXYtZGl2aWRlciA+IDpub3QoLnVrLW5hdi1kaXZpZGVyKSArIDpub3QoLnVrLW5hdi1oZWFkZXIsIC51ay1uYXYtZGl2aWRlciksCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LnVrLW5hdi1kaXZpZGVyID4gOm5vdCgudWstbmF2LWRpdmlkZXIpICsgOm5vdCgudWstbmF2LWhlYWRlciwgLnVrLW5hdi1kaXZpZGVyKSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LnVrLW5hdi1kaXZpZGVyID4gOm5vdCgudWstbmF2LWRpdmlkZXIpICsgOm5vdCgudWstbmF2LWhlYWRlciwgLnVrLW5hdi1kaXZpZGVyKSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi51ay1uYXYtZGl2aWRlciA+IDpub3QoLnVrLW5hdi1kaXZpZGVyKSArIDpub3QoLnVrLW5hdi1oZWFkZXIsIC51ay1uYXYtZGl2aWRlcikgewogIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKfQoudWstbGlnaHQgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGEsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdiA+IGxpID4gYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdiA+IGxpID4gYSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2ID4gbGkgPiBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLW5hdiA+IGxpID4gYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2YmFyLW5hdiA+IGxpID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLW5hdiA+IGxpID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXZiYXItbmF2ID4gbGkgPiBhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXZiYXItbmF2ID4gbGkgPiBhLAoudWstb2ZmY2FudmFzLWJhciAudWstbmF2YmFyLW5hdiA+IGxpID4gYSB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLW5hdmJhci1uYXYgPiBsaTpob3ZlciA+IGEsCi51ay1saWdodCAudWstbmF2YmFyLW5hdiA+IGxpID4gYVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0sCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXYgPiBsaTpob3ZlciA+IGEsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGFbYXJpYS1leHBhbmRlZD0idHJ1ZSJdLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXYgPiBsaTpob3ZlciA+IGEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdiA+IGxpID4gYVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0sCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXYgPiBsaTpob3ZlciA+IGEsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGFbYXJpYS1leHBhbmRlZD0idHJ1ZSJdLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXYgPiBsaTpob3ZlciA+IGEsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdiA+IGxpID4gYVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0sCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItbmF2ID4gbGk6aG92ZXIgPiBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLW5hdiA+IGxpID4gYVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0sCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdmJhci1uYXYgPiBsaTpob3ZlciA+IGEsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGFbYXJpYS1leHBhbmRlZD0idHJ1ZSJdLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItbmF2ID4gbGk6aG92ZXIgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItbmF2ID4gbGkgPiBhW2FyaWEtZXhwYW5kZWQ9InRydWUiXSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXZiYXItbmF2ID4gbGk6aG92ZXIgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGFbYXJpYS1leHBhbmRlZD0idHJ1ZSJdLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXZiYXItbmF2ID4gbGk6aG92ZXIgPiBhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXZiYXItbmF2ID4gbGkgPiBhW2FyaWEtZXhwYW5kZWQ9InRydWUiXSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdmJhci1uYXYgPiBsaTpob3ZlciA+IGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXZiYXItbmF2ID4gbGkgPiBhW2FyaWEtZXhwYW5kZWQ9InRydWUiXSB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGE6YWN0aXZlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2ID4gbGkgPiBhOmFjdGl2ZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2ID4gbGkgPiBhOmFjdGl2ZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdiA+IGxpID4gYTphY3RpdmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdiA+IGxpID4gYTphY3RpdmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItbmF2ID4gbGkgPiBhOmFjdGl2ZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2YmFyLW5hdiA+IGxpID4gYTphY3RpdmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGE6YWN0aXZlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGE6YWN0aXZlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXZiYXItbmF2ID4gbGkgPiBhOmFjdGl2ZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGE6YWN0aXZlIHsKICBjb2xvcjogI2ZmZjsKfQoudWstbGlnaHQgLnVrLW5hdmJhci1uYXYgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdiA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdiA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItbmF2ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2YmFyLW5hdiA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci1uYXYgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdmJhci1uYXYgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXZiYXItbmF2ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdmJhci1uYXYgPiBsaS51ay1hY3RpdmUgPiBhIHsKICBjb2xvcjogI2ZmZjsKfQoudWstbGlnaHQgLnVrLW5hdmJhci1pdGVtLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItaXRlbSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItaXRlbSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLWl0ZW0sCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLWl0ZW0sCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItaXRlbSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2YmFyLWl0ZW0sCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci1pdGVtLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdmJhci1pdGVtLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXZiYXItaXRlbSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdmJhci1pdGVtIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCAudWstbmF2YmFyLXRvZ2dsZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItdG9nZ2xlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItdG9nZ2xlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItdG9nZ2xlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXZiYXItdG9nZ2xlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItdG9nZ2xlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdmJhci10b2dnbGUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdmJhci10b2dnbGUsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXZiYXItdG9nZ2xlIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstbmF2YmFyLXRvZ2dsZTpob3ZlciwKLnVrLWxpZ2h0IC51ay1uYXZiYXItdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9InRydWUiXSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZTpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0sCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZTpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9InRydWUiXSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZTpob3ZlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0sCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZTpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9InRydWUiXSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9InRydWUiXSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2YmFyLXRvZ2dsZTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2YmFyLXRvZ2dsZVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0sCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci10b2dnbGVbYXJpYS1leHBhbmRlZD0idHJ1ZSJdLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2YmFyLXRvZ2dsZVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0sCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdmJhci10b2dnbGVbYXJpYS1leHBhbmRlZD0idHJ1ZSJdLAoudWstb2ZmY2FudmFzLWJhciAudWstbmF2YmFyLXRvZ2dsZTpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdmJhci10b2dnbGVbYXJpYS1leHBhbmRlZD0idHJ1ZSJdIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCAudWstc3VibmF2ID4gKiA+IDpmaXJzdC1jaGlsZCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2ID4gKiA+IDpmaXJzdC1jaGlsZCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYgPiAqID4gOmZpcnN0LWNoaWxkLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYgPiAqID4gOmZpcnN0LWNoaWxkLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdiA+ICogPiA6Zmlyc3QtY2hpbGQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYgPiAqID4gOmZpcnN0LWNoaWxkLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zdWJuYXYgPiAqID4gOmZpcnN0LWNoaWxkLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYgPiAqID4gOmZpcnN0LWNoaWxkLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXN1Ym5hdiA+ICogPiA6Zmlyc3QtY2hpbGQsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXN1Ym5hdiA+ICogPiA6Zmlyc3QtY2hpbGQsCi51ay1vZmZjYW52YXMtYmFyIC51ay1zdWJuYXYgPiAqID4gOmZpcnN0LWNoaWxkIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstc3VibmF2ID4gKiA+IGE6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdiA+ICogPiBhOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdiA+ICogPiBhOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYgPiAqID4gYTpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYgPiAqID4gYTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdiA+ICogPiBhOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zdWJuYXYgPiAqID4gYTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2ID4gKiA+IGE6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc3VibmF2ID4gKiA+IGE6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXN1Ym5hdiA+ICogPiBhOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2ID4gKiA+IGE6aG92ZXIgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay1zdWJuYXYgPiAudWstYWN0aXZlID4gYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2ID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2ID4gLnVrLWFjdGl2ZSA+IGEsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdiA+IC51ay1hY3RpdmUgPiBhLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdiA+IC51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2ID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXN1Ym5hdiA+IC51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYgPiAudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zdWJuYXYgPiAudWstYWN0aXZlID4gYSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc3VibmF2ID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay1zdWJuYXYgPiAudWstYWN0aXZlID4gYSB7CiAgY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IC51ay1zdWJuYXYtZGl2aWRlciA+IDpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LWRpdmlkZXIgPiA6bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LWRpdmlkZXIgPiA6bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1kaXZpZGVyID4gOm50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1kaXZpZGVyID4gOm50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2LWRpdmlkZXIgPiA6bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXN1Ym5hdi1kaXZpZGVyID4gOm50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtZGl2aWRlciA+IDpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zdWJuYXYtZGl2aWRlciA+IDpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc3VibmF2LWRpdmlkZXIgPiA6bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsCi51ay1vZmZjYW52YXMtYmFyIC51ay1zdWJuYXYtZGl2aWRlciA+IDpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSB7CiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Cn0KLnVrLWxpZ2h0IC51ay1zdWJuYXYtcGlsbCA+ICogPiA6Zmlyc3QtY2hpbGQsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsID4gKiA+IDpmaXJzdC1jaGlsZCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbCA+ICogPiA6Zmlyc3QtY2hpbGQsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsID4gKiA+IDpmaXJzdC1jaGlsZCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbCA+ICogPiA6Zmlyc3QtY2hpbGQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtcGlsbCA+ICogPiA6Zmlyc3QtY2hpbGQsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXN1Ym5hdi1waWxsID4gKiA+IDpmaXJzdC1jaGlsZCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2LXBpbGwgPiAqID4gOmZpcnN0LWNoaWxkLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXN1Ym5hdi1waWxsID4gKiA+IDpmaXJzdC1jaGlsZCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc3VibmF2LXBpbGwgPiAqID4gOmZpcnN0LWNoaWxkLAoudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2LXBpbGwgPiAqID4gOmZpcnN0LWNoaWxkIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstc3VibmF2LXBpbGwgPiAqID4gYTpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGwgPiAqID4gYTpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsID4gKiA+IGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXN1Ym5hdi1waWxsID4gKiA+IGE6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXN1Ym5hdi1waWxsID4gKiA+IGE6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLXN1Ym5hdi1waWxsID4gKiA+IGE6YWN0aXZlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmFjdGl2ZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmFjdGl2ZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGwgPiAqID4gYTphY3RpdmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGwgPiAqID4gYTphY3RpdmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmFjdGl2ZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc3VibmF2LXBpbGwgPiAqID4gYTphY3RpdmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdi1waWxsID4gKiA+IGE6YWN0aXZlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXN1Ym5hdi1waWxsID4gKiA+IGE6YWN0aXZlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmFjdGl2ZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXN1Ym5hdi1waWxsID4gKiA+IGE6YWN0aXZlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLXN1Ym5hdi1waWxsID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGwgPiAudWstYWN0aXZlID4gYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGwgPiAudWstYWN0aXZlID4gYSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbCA+IC51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2LXBpbGwgPiAudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc3VibmF2LXBpbGwgPiAudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2LXBpbGwgPiAudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zdWJuYXYtcGlsbCA+IC51ay1hY3RpdmUgPiBhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zdWJuYXYtcGlsbCA+IC51ay1hY3RpdmUgPiBhLAoudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2LXBpbGwgPiAudWstYWN0aXZlID4gYSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICBjb2xvcjogIzY2NjsKfQoudWstbGlnaHQgLnVrLXN1Ym5hdiA+IC51ay1kaXNhYmxlZCA+IGEsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdiA+IC51ay1kaXNhYmxlZCA+IGEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2ID4gLnVrLWRpc2FibGVkID4gYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2ID4gLnVrLWRpc2FibGVkID4gYSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYgPiAudWstZGlzYWJsZWQgPiBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2ID4gLnVrLWRpc2FibGVkID4gYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc3VibmF2ID4gLnVrLWRpc2FibGVkID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2ID4gLnVrLWRpc2FibGVkID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zdWJuYXYgPiAudWstZGlzYWJsZWQgPiBhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zdWJuYXYgPiAudWstZGlzYWJsZWQgPiBhLAoudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2ID4gLnVrLWRpc2FibGVkID4gYSB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLWJyZWFkY3J1bWIgPiAqID4gKiwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYiA+ICogPiAqLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWIgPiAqID4gKiwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYiA+ICogPiAqLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWIgPiAqID4gKiwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJyZWFkY3J1bWIgPiAqID4gKiwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnJlYWRjcnVtYiA+ICogPiAqLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1icmVhZGNydW1iID4gKiA+ICosCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnJlYWRjcnVtYiA+ICogPiAqLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1icmVhZGNydW1iID4gKiA+ICosCi51ay1vZmZjYW52YXMtYmFyIC51ay1icmVhZGNydW1iID4gKiA+ICogewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cn0KLnVrLWxpZ2h0IC51ay1icmVhZGNydW1iID4gKiA+IDpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYiA+ICogPiA6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYiA+ICogPiA6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWIgPiAqID4gOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWIgPiAqID4gOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnJlYWRjcnVtYiA+ICogPiA6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJyZWFkY3J1bWIgPiAqID4gOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1icmVhZGNydW1iID4gKiA+IDpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1icmVhZGNydW1iID4gKiA+IDpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnJlYWRjcnVtYiA+ICogPiA6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1icmVhZGNydW1iID4gKiA+IDpob3ZlciB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLWJyZWFkY3J1bWIgPiA6bGFzdC1jaGlsZCA+ICosCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWIgPiA6bGFzdC1jaGlsZCA+ICosCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYiA+IDpsYXN0LWNoaWxkID4gKiwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYiA+IDpsYXN0LWNoaWxkID4gKiwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1icmVhZGNydW1iID4gOmxhc3QtY2hpbGQgPiAqLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnJlYWRjcnVtYiA+IDpsYXN0LWNoaWxkID4gKiwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnJlYWRjcnVtYiA+IDpsYXN0LWNoaWxkID4gKiwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnJlYWRjcnVtYiA+IDpsYXN0LWNoaWxkID4gKiwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1icmVhZGNydW1iID4gOmxhc3QtY2hpbGQgPiAqLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1icmVhZGNydW1iID4gOmxhc3QtY2hpbGQgPiAqLAoudWstb2ZmY2FudmFzLWJhciAudWstYnJlYWRjcnVtYiA+IDpsYXN0LWNoaWxkID4gKiB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLWJyZWFkY3J1bWIgPiA6bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWIgPiA6bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYiA+IDpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYiA+IDpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1icmVhZGNydW1iID4gOm50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnJlYWRjcnVtYiA+IDpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnJlYWRjcnVtYiA+IDpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnJlYWRjcnVtYiA+IDpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1icmVhZGNydW1iID4gOm50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1icmVhZGNydW1iID4gOm50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstb2ZmY2FudmFzLWJhciAudWstYnJlYWRjcnVtYiA+IDpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLXBhZ2luYXRpb24gPiAqID4gKiwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbiA+ICogPiAqLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24gPiAqID4gKiwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbiA+ICogPiAqLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24gPiAqID4gKiwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXBhZ2luYXRpb24gPiAqID4gKiwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstcGFnaW5hdGlvbiA+ICogPiAqLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1wYWdpbmF0aW9uID4gKiA+ICosCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstcGFnaW5hdGlvbiA+ICogPiAqLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1wYWdpbmF0aW9uID4gKiA+ICosCi51ay1vZmZjYW52YXMtYmFyIC51ay1wYWdpbmF0aW9uID4gKiA+ICogewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cn0KLnVrLWxpZ2h0IC51ay1wYWdpbmF0aW9uID4gKiA+IDpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbiA+ICogPiA6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbiA+ICogPiA6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24gPiAqID4gOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24gPiAqID4gOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstcGFnaW5hdGlvbiA+ICogPiA6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXBhZ2luYXRpb24gPiAqID4gOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1wYWdpbmF0aW9uID4gKiA+IDpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1wYWdpbmF0aW9uID4gKiA+IDpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstcGFnaW5hdGlvbiA+ICogPiA6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1wYWdpbmF0aW9uID4gKiA+IDpob3ZlciB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLXBhZ2luYXRpb24gPiAudWstYWN0aXZlID4gKiwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbiA+IC51ay1hY3RpdmUgPiAqLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24gPiAudWstYWN0aXZlID4gKiwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbiA+IC51ay1hY3RpdmUgPiAqLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24gPiAudWstYWN0aXZlID4gKiwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXBhZ2luYXRpb24gPiAudWstYWN0aXZlID4gKiwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstcGFnaW5hdGlvbiA+IC51ay1hY3RpdmUgPiAqLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1wYWdpbmF0aW9uID4gLnVrLWFjdGl2ZSA+ICosCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstcGFnaW5hdGlvbiA+IC51ay1hY3RpdmUgPiAqLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1wYWdpbmF0aW9uID4gLnVrLWFjdGl2ZSA+ICosCi51ay1vZmZjYW52YXMtYmFyIC51ay1wYWdpbmF0aW9uID4gLnVrLWFjdGl2ZSA+ICogewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay1wYWdpbmF0aW9uID4gLnVrLWRpc2FibGVkID4gKiwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbiA+IC51ay1kaXNhYmxlZCA+ICosCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbiA+IC51ay1kaXNhYmxlZCA+ICosCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24gPiAudWstZGlzYWJsZWQgPiAqLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24gPiAudWstZGlzYWJsZWQgPiAqLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstcGFnaW5hdGlvbiA+IC51ay1kaXNhYmxlZCA+ICosCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXBhZ2luYXRpb24gPiAudWstZGlzYWJsZWQgPiAqLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1wYWdpbmF0aW9uID4gLnVrLWRpc2FibGVkID4gKiwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1wYWdpbmF0aW9uID4gLnVrLWRpc2FibGVkID4gKiwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstcGFnaW5hdGlvbiA+IC51ay1kaXNhYmxlZCA+ICosCi51ay1vZmZjYW52YXMtYmFyIC51ay1wYWdpbmF0aW9uID4gLnVrLWRpc2FibGVkID4gKiB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLXRhYjo6YmVmb3JlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI6OmJlZm9yZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI6OmJlZm9yZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiOjpiZWZvcmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiOjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWI6OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGFiOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYjo6YmVmb3JlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYjo6YmVmb3JlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWI6OmJlZm9yZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYjo6YmVmb3JlIHsKICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKfQoudWstbGlnaHQgLnVrLXRhYiA+ICogPiBhLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWIgPiAqID4gYSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWIgPiAqID4gYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiID4gKiA+IGEsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiID4gKiA+IGEsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWIgPiAqID4gYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGFiID4gKiA+IGEsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYiA+ICogPiBhLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYiA+ICogPiBhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWIgPiAqID4gYSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYiA+ICogPiBhIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstdGFiID4gKiA+IGE6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYiA+ICogPiBhOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYiA+ICogPiBhOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWIgPiAqID4gYTpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWIgPiAqID4gYTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYiA+ICogPiBhOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWIgPiAqID4gYTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiID4gKiA+IGE6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGFiID4gKiA+IGE6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYiA+ICogPiBhOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstdGFiID4gKiA+IGE6aG92ZXIgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay10YWIgPiAudWstYWN0aXZlID4gYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiID4gLnVrLWFjdGl2ZSA+IGEsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYiA+IC51ay1hY3RpdmUgPiBhLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYiA+IC51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYiA+IC51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWIgPiAudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWIgPiAudWstYWN0aXZlID4gYSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFiID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay10YWIgPiAudWstYWN0aXZlID4gYSB7CiAgY29sb3I6ICNmZmY7CiAgYm9yZGVyLWNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCAudWstdGFiID4gLnVrLWRpc2FibGVkID4gYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiID4gLnVrLWRpc2FibGVkID4gYSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWIgPiAudWstZGlzYWJsZWQgPiBhLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWIgPiAudWstZGlzYWJsZWQgPiBhLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYiA+IC51ay1kaXNhYmxlZCA+IGEsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWIgPiAudWstZGlzYWJsZWQgPiBhLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWIgPiAudWstZGlzYWJsZWQgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWIgPiAudWstZGlzYWJsZWQgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYiA+IC51ay1kaXNhYmxlZCA+IGEsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYiA+IC51ay1kaXNhYmxlZCA+IGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay10YWIgPiAudWstZGlzYWJsZWQgPiBhIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstc2xpZGVuYXYsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2LAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2LAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdiwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdiwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNsaWRlbmF2LAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zbGlkZW5hdiwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2xpZGVuYXYsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc2xpZGVuYXYsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNsaWRlbmF2LAoudWstb2ZmY2FudmFzLWJhciAudWstc2xpZGVuYXYgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay1zbGlkZW5hdjpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2xpZGVuYXY6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2xpZGVuYXY6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2OmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2OmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2xpZGVuYXY6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNsaWRlbmF2OmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zbGlkZW5hdjpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zbGlkZW5hdjpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2xpZGVuYXY6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1zbGlkZW5hdjpob3ZlciB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7Cn0KLnVrLWxpZ2h0IC51ay1zbGlkZW5hdjphY3RpdmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2OmFjdGl2ZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdjphY3RpdmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2OmFjdGl2ZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdjphY3RpdmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zbGlkZW5hdjphY3RpdmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNsaWRlbmF2OmFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2xpZGVuYXY6YWN0aXZlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNsaWRlbmF2OmFjdGl2ZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2xpZGVuYXY6YWN0aXZlLAoudWstb2ZmY2FudmFzLWJhciAudWstc2xpZGVuYXY6YWN0aXZlIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCAudWstZG90bmF2ID4gKiA+ICosCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdiA+ICogPiAqLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdiA+ICogPiAqLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXYgPiAqID4gKiwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXYgPiAqID4gKiwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWRvdG5hdiA+ICogPiAqLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1kb3RuYXYgPiAqID4gKiwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstZG90bmF2ID4gKiA+ICosCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZG90bmF2ID4gKiA+ICosCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWRvdG5hdiA+ICogPiAqLAoudWstb2ZmY2FudmFzLWJhciAudWstZG90bmF2ID4gKiA+ICogewogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwp9Ci51ay1saWdodCAudWstZG90bmF2ID4gKiA+IDpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2ID4gKiA+IDpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXYgPiAqID4gOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXYgPiAqID4gOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdiA+ICogPiA6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kb3RuYXYgPiAqID4gOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1kb3RuYXYgPiAqID4gOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1kb3RuYXYgPiAqID4gOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWRvdG5hdiA+ICogPiA6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWRvdG5hdiA+ICogPiA6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1kb3RuYXYgPiAqID4gOmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoudWstbGlnaHQgLnVrLWRvdG5hdiA+ICogPiA6YWN0aXZlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXYgPiAqID4gOmFjdGl2ZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXYgPiAqID4gOmFjdGl2ZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2ID4gKiA+IDphY3RpdmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2ID4gKiA+IDphY3RpdmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kb3RuYXYgPiAqID4gOmFjdGl2ZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZG90bmF2ID4gKiA+IDphY3RpdmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRvdG5hdiA+ICogPiA6YWN0aXZlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWRvdG5hdiA+ICogPiA6YWN0aXZlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1kb3RuYXYgPiAqID4gOmFjdGl2ZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWRvdG5hdiA+ICogPiA6YWN0aXZlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoudWstbGlnaHQgLnVrLWRvdG5hdiA+IC51ay1hY3RpdmUgPiAqLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXYgPiAudWstYWN0aXZlID4gKiwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXYgPiAudWstYWN0aXZlID4gKiwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2ID4gLnVrLWFjdGl2ZSA+ICosCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2ID4gLnVrLWFjdGl2ZSA+ICosCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kb3RuYXYgPiAudWstYWN0aXZlID4gKiwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZG90bmF2ID4gLnVrLWFjdGl2ZSA+ICosCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRvdG5hdiA+IC51ay1hY3RpdmUgPiAqLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWRvdG5hdiA+IC51ay1hY3RpdmUgPiAqLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1kb3RuYXYgPiAudWstYWN0aXZlID4gKiwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWRvdG5hdiA+IC51ay1hY3RpdmUgPiAqIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoudWstbGlnaHQgLnVrLWljb25uYXYgPiAqID4gYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdiA+ICogPiBhLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXYgPiAqID4gYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdiA+ICogPiBhLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXYgPiAqID4gYSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWljb25uYXYgPiAqID4gYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaWNvbm5hdiA+ICogPiBhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pY29ubmF2ID4gKiA+IGEsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaWNvbm5hdiA+ICogPiBhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pY29ubmF2ID4gKiA+IGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay1pY29ubmF2ID4gKiA+IGEgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cn0KLnVrLWxpZ2h0IC51ay1pY29ubmF2ID4gKiA+IGE6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXYgPiAqID4gYTpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2ID4gKiA+IGE6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXYgPiAqID4gYTpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2ID4gKiA+IGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pY29ubmF2ID4gKiA+IGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWljb25uYXYgPiAqID4gYTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbm5hdiA+ICogPiBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWljb25uYXYgPiAqID4gYTpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaWNvbm5hdiA+ICogPiBhOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstaWNvbm5hdiA+ICogPiBhOmhvdmVyIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCAudWstaWNvbm5hdiA+IC51ay1hY3RpdmUgPiBhLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2ID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdiA+IC51ay1hY3RpdmUgPiBhLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2ID4gLnVrLWFjdGl2ZSA+IGEsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdiA+IC51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbm5hdiA+IC51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1pY29ubmF2ID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWljb25uYXYgPiAudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1pY29ubmF2ID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWljb25uYXYgPiAudWstYWN0aXZlID4gYSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWljb25uYXYgPiAudWstYWN0aXZlID4gYSB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLXRleHQtbGVhZCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1sZWFkLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbGVhZCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1sZWFkLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbGVhZCwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHQtbGVhZCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGV4dC1sZWFkLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LWxlYWQsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGV4dC1sZWFkLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10ZXh0LWxlYWQsCi51ay1vZmZjYW52YXMtYmFyIC51ay10ZXh0LWxlYWQgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay10ZXh0LW1ldGEsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbWV0YSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LW1ldGEsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbWV0YSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LW1ldGEsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LW1ldGEsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRleHQtbWV0YSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dC1tZXRhLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRleHQtbWV0YSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGV4dC1tZXRhLAoudWstb2ZmY2FudmFzLWJhciAudWstdGV4dC1tZXRhIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstdGV4dC1tdXRlZCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1tdXRlZCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LW11dGVkLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LW11dGVkLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbXV0ZWQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LW11dGVkLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10ZXh0LW11dGVkLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LW11dGVkLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRleHQtbXV0ZWQsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRleHQtbXV0ZWQsCi51ay1vZmZjYW52YXMtYmFyIC51ay10ZXh0LW11dGVkIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpICFpbXBvcnRhbnQ7Cn0KLnVrLWxpZ2h0IC51ay10ZXh0LWVtcGhhc2lzLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LWVtcGhhc2lzLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtZW1waGFzaXMsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtZW1waGFzaXMsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1lbXBoYXNpcywKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHQtZW1waGFzaXMsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRleHQtZW1waGFzaXMsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHQtZW1waGFzaXMsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGV4dC1lbXBoYXNpcywKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGV4dC1lbXBoYXNpcywKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRleHQtZW1waGFzaXMgewogIGNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7Cn0KLnVrLWxpZ2h0IC51ay10ZXh0LXByaW1hcnksCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtcHJpbWFyeSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LXByaW1hcnksCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtcHJpbWFyeSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LXByaW1hcnksCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LXByaW1hcnksCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRleHQtcHJpbWFyeSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dC1wcmltYXJ5LAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRleHQtcHJpbWFyeSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGV4dC1wcmltYXJ5LAoudWstb2ZmY2FudmFzLWJhciAudWstdGV4dC1wcmltYXJ5IHsKICBjb2xvcjogI2ZmZiAhaW1wb3J0YW50Owp9Ci51ay1saWdodCAudWstdGV4dC1zZWNvbmRhcnksCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtc2Vjb25kYXJ5LAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtc2Vjb25kYXJ5LAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LXNlY29uZGFyeSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LXNlY29uZGFyeSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHQtc2Vjb25kYXJ5LAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10ZXh0LXNlY29uZGFyeSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dC1zZWNvbmRhcnksCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGV4dC1zZWNvbmRhcnksCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRleHQtc2Vjb25kYXJ5LAoudWstb2ZmY2FudmFzLWJhciAudWstdGV4dC1zZWNvbmRhcnkgewogIGNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7Cn0KLnVrLWxpZ2h0IC51ay1jb2x1bW4tZGl2aWRlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY29sdW1uLWRpdmlkZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY29sdW1uLWRpdmlkZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNvbHVtbi1kaXZpZGVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNvbHVtbi1kaXZpZGVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY29sdW1uLWRpdmlkZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWNvbHVtbi1kaXZpZGVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1jb2x1bW4tZGl2aWRlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1jb2x1bW4tZGl2aWRlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstY29sdW1uLWRpdmlkZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1jb2x1bW4tZGl2aWRlciB7CiAgY29sdW1uLXJ1bGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKfQoudWstbGlnaHQgLnVrLWxvZ28sCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28sCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbywKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbywKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbG9nbywKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbG9nbywKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbG9nbywKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1sb2dvLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1sb2dvLAoudWstb2ZmY2FudmFzLWJhciAudWstbG9nbyB7CiAgY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IC51ay1sb2dvOmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ286aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ286aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbzpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxvZ286aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxvZ286aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxvZ286aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbG9nbzpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbG9nbzpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxvZ286aG92ZXIgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCAudWstbG9nbyA+IHBpY3R1cmU6bm90KDpvbmx5LW9mLXR5cGUpID4gOm5vdCgudWstbG9nby1pbnZlcnNlKSwKLnVrLWxpZ2h0IC51ay1sb2dvID4gOm5vdChwaWN0dXJlKTpub3QoLnVrLWxvZ28taW52ZXJzZSk6bm90KDpvbmx5LW9mLXR5cGUpLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvID4gcGljdHVyZTpub3QoOm9ubHktb2YtdHlwZSkgPiA6bm90KC51ay1sb2dvLWludmVyc2UpLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvID4gOm5vdChwaWN0dXJlKTpub3QoLnVrLWxvZ28taW52ZXJzZSk6bm90KDpvbmx5LW9mLXR5cGUpLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28gPiBwaWN0dXJlOm5vdCg6b25seS1vZi10eXBlKSA+IDpub3QoLnVrLWxvZ28taW52ZXJzZSksCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbyA+IDpub3QocGljdHVyZSk6bm90KC51ay1sb2dvLWludmVyc2UpOm5vdCg6b25seS1vZi10eXBlKSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbyA+IHBpY3R1cmU6bm90KDpvbmx5LW9mLXR5cGUpID4gOm5vdCgudWstbG9nby1pbnZlcnNlKSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbyA+IDpub3QocGljdHVyZSk6bm90KC51ay1sb2dvLWludmVyc2UpOm5vdCg6b25seS1vZi10eXBlKSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvID4gcGljdHVyZTpub3QoOm9ubHktb2YtdHlwZSkgPiA6bm90KC51ay1sb2dvLWludmVyc2UpLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28gPiA6bm90KHBpY3R1cmUpOm5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSksCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1sb2dvID4gcGljdHVyZTpub3QoOm9ubHktb2YtdHlwZSkgPiA6bm90KC51ay1sb2dvLWludmVyc2UpLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbG9nbyA+IDpub3QocGljdHVyZSk6bm90KC51ay1sb2dvLWludmVyc2UpOm5vdCg6b25seS1vZi10eXBlKSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbG9nbyA+IHBpY3R1cmU6bm90KDpvbmx5LW9mLXR5cGUpID4gOm5vdCgudWstbG9nby1pbnZlcnNlKSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbG9nbyA+IDpub3QocGljdHVyZSk6bm90KC51ay1sb2dvLWludmVyc2UpOm5vdCg6b25seS1vZi10eXBlKSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbG9nbyA+IHBpY3R1cmU6bm90KDpvbmx5LW9mLXR5cGUpID4gOm5vdCgudWstbG9nby1pbnZlcnNlKSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbG9nbyA+IDpub3QocGljdHVyZSk6bm90KC51ay1sb2dvLWludmVyc2UpOm5vdCg6b25seS1vZi10eXBlKSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1sb2dvID4gcGljdHVyZTpub3QoOm9ubHktb2YtdHlwZSkgPiA6bm90KC51ay1sb2dvLWludmVyc2UpLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxvZ28gPiA6bm90KHBpY3R1cmUpOm5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSksCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxvZ28gPiBwaWN0dXJlOm5vdCg6b25seS1vZi10eXBlKSA+IDpub3QoLnVrLWxvZ28taW52ZXJzZSksCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxvZ28gPiA6bm90KHBpY3R1cmUpOm5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSksCi51ay1vZmZjYW52YXMtYmFyIC51ay1sb2dvID4gcGljdHVyZTpub3QoOm9ubHktb2YtdHlwZSkgPiA6bm90KC51ay1sb2dvLWludmVyc2UpLAoudWstb2ZmY2FudmFzLWJhciAudWstbG9nbyA+IDpub3QocGljdHVyZSk6bm90KC51ay1sb2dvLWludmVyc2UpOm5vdCg6b25seS1vZi10eXBlKSB7CiAgZGlzcGxheTogbm9uZTsKfQoudWstbGlnaHQgLnVrLWxvZ28taW52ZXJzZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nby1pbnZlcnNlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28taW52ZXJzZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nby1pbnZlcnNlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28taW52ZXJzZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxvZ28taW52ZXJzZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbG9nby1pbnZlcnNlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1sb2dvLWludmVyc2UsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbG9nby1pbnZlcnNlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1sb2dvLWludmVyc2UsCi51ay1vZmZjYW52YXMtYmFyIC51ay1sb2dvLWludmVyc2UgewogIGRpc3BsYXk6IGJsb2NrOwp9Ci51ay1saWdodCAudWstdGFibGUtc3RyaXBlZCA+IHRyOm50aC1vZi10eXBlKGV2ZW4pOmxhc3QtY2hpbGQsCi51ay1saWdodCAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShldmVuKTpsYXN0LWNoaWxkLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShldmVuKTpsYXN0LWNoaWxkLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgPiB0cjpudGgtb2YtdHlwZShldmVuKTpsYXN0LWNoaWxkLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtc3RyaXBlZCA+IHRyOm50aC1vZi10eXBlKGV2ZW4pOmxhc3QtY2hpbGQsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKGV2ZW4pOmxhc3QtY2hpbGQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGFibGUtc3RyaXBlZCA+IHRyOm50aC1vZi10eXBlKGV2ZW4pOmxhc3QtY2hpbGQsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtc3RyaXBlZCA+IHRyOm50aC1vZi10eXBlKGV2ZW4pOmxhc3QtY2hpbGQsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKGV2ZW4pOmxhc3QtY2hpbGQsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYmxlLXN0cmlwZWQgPiB0cjpudGgtb2YtdHlwZShldmVuKTpsYXN0LWNoaWxkLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKGV2ZW4pOmxhc3QtY2hpbGQsCi51ay1vZmZjYW52YXMtYmFyIC51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCB7CiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwp9Ci51ay1saWdodCAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLAoudWstb2ZmY2FudmFzLWJhciAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxMyUyMiUyMGhlaWdodCUzRCUyMjEzJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTMlMjAxMyUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjJyZ2JhJTI4MjU1LCUyMDI1NSwlMjAyNTUsJTIwMC43JTI5JTIyJTIwd2lkdGglM0QlMjIxMyUyMiUyMGhlaWdodCUzRCUyMjElMjIlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjI2JTIyJTIwJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjJyZ2JhJTI4MjU1LCUyMDI1NSwlMjAyNTUsJTIwMC43JTI5JTIyJTIwd2lkdGglM0QlMjIxJTIyJTIwaGVpZ2h0JTNEJTIyMTMlMjIlMjB4JTNEJTIyNiUyMiUyMHklM0QlMjIwJTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIik7Cn0KLnVrLWxpZ2h0IC51ay1vcGVuID4gLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1vcGVuID4gLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW9wZW4gPiAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW9wZW4gPiAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstb3BlbiA+IC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW9wZW4gPiAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW9wZW4gPiAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW9wZW4gPiAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstb3BlbiA+IC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstb3BlbiA+IC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW9wZW4gPiAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxMyUyMiUyMGhlaWdodCUzRCUyMjEzJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTMlMjAxMyUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjJyZ2JhJTI4MjU1LCUyMDI1NSwlMjAyNTUsJTIwMC43JTI5JTIyJTIwd2lkdGglM0QlMjIxMyUyMiUyMGhlaWdodCUzRCUyMjElMjIlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjI2JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIik7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogUHJpbnQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCkBtZWRpYSBwcmludCB7CiAgKiwKICAqOjpiZWZvcmUsCiAgKjo6YWZ0ZXIgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIGNvbG9yOiBibGFjayAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OwogICAgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICB9CiAgYSwKICBhOnZpc2l0ZWQgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgfQogIHByZSwKICBibG9ja3F1b3RlIHsKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7CiAgfQogIHRoZWFkIHsKICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDsKICB9CiAgdHIsCiAgaW1nIHsKICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsKICB9CiAgaW1nIHsKICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OwogIH0KICBAcGFnZSB7CiAgICBtYXJnaW46IDAuNWNtOwogIH0KICBwLAogIGgyLAogIGgzIHsKICAgIG9ycGhhbnM6IDM7CiAgICB3aWRvd3M6IDM7CiAgfQogIGgyLAogIGgzIHsKICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkOwogIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/css/uikit/uikit-rtl.min.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIFVJa2l0IDMuMTUuMSB8IGh0dHBzOi8vd3d3LmdldHVpa2l0LmNvbSB8IChjKSAyMDE0IC0gMjAyMiBZT090aGVtZSB8IE1JVCBMaWNlbnNlICovaHRtbHtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwiU2Vnb2UgVUkiLFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLEFyaWFsLCJOb3RvIFNhbnMiLHNhbnMtc2VyaWYsIkFwcGxlIENvbG9yIEVtb2ppIiwiU2Vnb2UgVUkgRW1vamkiLCJTZWdvZSBVSSBTeW1ib2wiLCJOb3RvIENvbG9yIEVtb2ppIjtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS41Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojNjY2fWJvZHl7bWFyZ2luOjB9LnVrLWxpbmssYXtjb2xvcjojMWU4N2YwO3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyfS51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluaywudWstbGluazpob3ZlcixhOmhvdmVye2NvbG9yOiMwZjZlY2Q7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX1hYmJyW3RpdGxlXXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDstd2Via2l0LXRleHQtZGVjb3JhdGlvbi1zdHlsZTpkb3R0ZWR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfTpub3QocHJlKT5jb2RlLDpub3QocHJlKT5rYmQsOm5vdChwcmUpPnNhbXB7Zm9udC1mYW1pbHk6Q29uc29sYXMsbW9uYWNvLG1vbm9zcGFjZTtmb250LXNpemU6Ljg3NXJlbTtjb2xvcjojZjA1MDZlO3doaXRlLXNwYWNlOm5vd3JhcDtwYWRkaW5nOjJweCA2cHg7YmFja2dyb3VuZDojZjhmOGY4fWVte2NvbG9yOiNmMDUwNmV9aW5ze2JhY2tncm91bmQ6I2ZmZDtjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lfW1hcmt7YmFja2dyb3VuZDojZmZkO2NvbG9yOiM2NjZ9cXtmb250LXN0eWxlOml0YWxpY31zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXN1cHt0b3A6LS41ZW19c3Vie2JvdHRvbTotLjI1ZW19YXVkaW8sY2FudmFzLGlmcmFtZSxpbWcsc3ZnLHZpZGVve3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1jYW52YXMsaW1nLHN2Zyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3h9aW1nOm5vdChbc3JjXSl7dmlzaWJpbGl0eTpoaWRkZW47bWluLXdpZHRoOjFweH1pZnJhbWV7Ym9yZGVyOjB9YWRkcmVzcyxkbCxmaWVsZHNldCxmaWd1cmUsb2wscCxwcmUsdWx7bWFyZ2luOjAgMCAyMHB4IDB9KithZGRyZXNzLCorZGwsKitmaWVsZHNldCwqK2ZpZ3VyZSwqK29sLCorcCwqK3ByZSwqK3Vse21hcmdpbi10b3A6MjBweH0udWstaDEsLnVrLWgyLC51ay1oMywudWstaDQsLnVrLWg1LC51ay1oNiwudWstaGVhZGluZy0yeGxhcmdlLC51ay1oZWFkaW5nLWxhcmdlLC51ay1oZWFkaW5nLW1lZGl1bSwudWstaGVhZGluZy1zbWFsbCwudWstaGVhZGluZy14bGFyZ2UsaDEsaDIsaDMsaDQsaDUsaDZ7bWFyZ2luOjAgMCAyMHB4IDA7Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsIlNlZ29lIFVJIixSb2JvdG8sIkhlbHZldGljYSBOZXVlIixBcmlhbCwiTm90byBTYW5zIixzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiMzMzM7dGV4dC10cmFuc2Zvcm06bm9uZX0qKy51ay1oMSwqKy51ay1oMiwqKy51ay1oMywqKy51ay1oNCwqKy51ay1oNSwqKy51ay1oNiwqKy51ay1oZWFkaW5nLTJ4bGFyZ2UsKisudWstaGVhZGluZy1sYXJnZSwqKy51ay1oZWFkaW5nLW1lZGl1bSwqKy51ay1oZWFkaW5nLXNtYWxsLCorLnVrLWhlYWRpbmcteGxhcmdlLCoraDEsKitoMiwqK2gzLCoraDQsKitoNSwqK2g2e21hcmdpbi10b3A6NDBweH0udWstaDEsaDF7Zm9udC1zaXplOjIuMjMxMjVyZW07bGluZS1oZWlnaHQ6MS4yfS51ay1oMixoMntmb250LXNpemU6MS43cmVtO2xpbmUtaGVpZ2h0OjEuM30udWstaDMsaDN7Zm9udC1zaXplOjEuNXJlbTtsaW5lLWhlaWdodDoxLjR9LnVrLWg0LGg0e2ZvbnQtc2l6ZToxLjI1cmVtO2xpbmUtaGVpZ2h0OjEuNH0udWstaDUsaDV7Zm9udC1zaXplOjE2cHg7bGluZS1oZWlnaHQ6MS40fS51ay1oNixoNntmb250LXNpemU6Ljg3NXJlbTtsaW5lLWhlaWdodDoxLjR9QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1oMSxoMXtmb250LXNpemU6Mi42MjVyZW19LnVrLWgyLGgye2ZvbnQtc2l6ZToycmVtfX1vbCx1bHtwYWRkaW5nLXJpZ2h0OjMwcHh9b2w+bGk+b2wsb2w+bGk+dWwsdWw+bGk+b2wsdWw+bGk+dWx7bWFyZ2luOjB9ZHR7Zm9udC13ZWlnaHQ6NzAwfWRke21hcmdpbi1yaWdodDowfS51ay1ocixocntvdmVyZmxvdzp2aXNpYmxlO3RleHQtYWxpZ246aW5oZXJpdDttYXJnaW46MCAwIDIwcHggMDtib3JkZXI6MDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTVlNWU1fSorLnVrLWhyLCoraHJ7bWFyZ2luLXRvcDoyMHB4fWFkZHJlc3N7Zm9udC1zdHlsZTpub3JtYWx9YmxvY2txdW90ZXttYXJnaW46MCAwIDIwcHggMDtmb250LXNpemU6MS4yNXJlbTtsaW5lLWhlaWdodDoxLjU7Zm9udC1zdHlsZTppdGFsaWM7Y29sb3I6IzMzM30qK2Jsb2NrcXVvdGV7bWFyZ2luLXRvcDoyMHB4fWJsb2NrcXVvdGUgcDpsYXN0LW9mLXR5cGV7bWFyZ2luLWJvdHRvbTowfWJsb2NrcXVvdGUgZm9vdGVye21hcmdpbi10b3A6MTBweDtmb250LXNpemU6Ljg3NXJlbTtsaW5lLWhlaWdodDoxLjU7Y29sb3I6IzY2Nn1ibG9ja3F1b3RlIGZvb3Rlcjo6YmVmb3Jle2NvbnRlbnQ6IuKAlCAifXByZXtmb250OjAuODc1cmVtLzEuNSBDb25zb2xhcyxtb25hY28sbW9ub3NwYWNlO2NvbG9yOiM2NjY7LW1vei10YWItc2l6ZTo0O3RhYi1zaXplOjQ7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZTVlNWU1O2JvcmRlci1yYWRpdXM6M3B4O2JhY2tncm91bmQ6I2ZmZn1wcmUgY29kZXtmb250LWZhbWlseTpDb25zb2xhcyxtb25hY28sbW9ub3NwYWNlfTpmb2N1c3tvdXRsaW5lOjB9OmZvY3VzLXZpc2libGV7b3V0bGluZToycHggZG90dGVkICMzMzN9OjpzZWxlY3Rpb257YmFja2dyb3VuZDojMzlmO2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6bm9uZX1kZXRhaWxzLG1haW57ZGlzcGxheTpibG9ja31zdW1tYXJ5e2Rpc3BsYXk6bGlzdC1pdGVtfXRlbXBsYXRle2Rpc3BsYXk6bm9uZX06cm9vdHstLXVrLWJyZWFrcG9pbnQtczo2NDBweDstLXVrLWJyZWFrcG9pbnQtbTo5NjBweDstLXVrLWJyZWFrcG9pbnQtbDoxMjAwcHg7LS11ay1icmVha3BvaW50LXhsOjE2MDBweH0udWstbGluay1tdXRlZCBhLC51ay1saW5rLXRvZ2dsZSAudWstbGluay1tdXRlZCxhLnVrLWxpbmstbXV0ZWR7Y29sb3I6Izk5OX0udWstbGluay1tdXRlZCBhOmhvdmVyLC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1tdXRlZCxhLnVrLWxpbmstbXV0ZWQ6aG92ZXJ7Y29sb3I6IzY2Nn0udWstbGluay10ZXh0IGEsLnVrLWxpbmstdG9nZ2xlIC51ay1saW5rLXRleHQsYS51ay1saW5rLXRleHR7Y29sb3I6aW5oZXJpdH0udWstbGluay10ZXh0IGE6aG92ZXIsLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLXRleHQsYS51ay1saW5rLXRleHQ6aG92ZXJ7Y29sb3I6Izk5OX0udWstbGluay1oZWFkaW5nIGEsLnVrLWxpbmstdG9nZ2xlIC51ay1saW5rLWhlYWRpbmcsYS51ay1saW5rLWhlYWRpbmd7Y29sb3I6aW5oZXJpdH0udWstbGluay1oZWFkaW5nIGE6aG92ZXIsLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLWhlYWRpbmcsYS51ay1saW5rLWhlYWRpbmc6aG92ZXJ7Y29sb3I6IzFlODdmMDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstbGluay1yZXNldCBhLGEudWstbGluay1yZXNldHtjb2xvcjppbmhlcml0IWltcG9ydGFudDt0ZXh0LWRlY29yYXRpb246bm9uZSFpbXBvcnRhbnR9LnVrLWxpbmstdG9nZ2xle2NvbG9yOmluaGVyaXQhaW1wb3J0YW50O3RleHQtZGVjb3JhdGlvbjpub25lIWltcG9ydGFudH0udWstaGVhZGluZy1zbWFsbHtmb250LXNpemU6Mi42cmVtO2xpbmUtaGVpZ2h0OjEuMn0udWstaGVhZGluZy1tZWRpdW17Zm9udC1zaXplOjIuODg3NXJlbTtsaW5lLWhlaWdodDoxLjF9LnVrLWhlYWRpbmctbGFyZ2V7Zm9udC1zaXplOjMuNHJlbTtsaW5lLWhlaWdodDoxLjF9LnVrLWhlYWRpbmcteGxhcmdle2ZvbnQtc2l6ZTo0cmVtO2xpbmUtaGVpZ2h0OjF9LnVrLWhlYWRpbmctMnhsYXJnZXtmb250LXNpemU6NnJlbTtsaW5lLWhlaWdodDoxfUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstaGVhZGluZy1zbWFsbHtmb250LXNpemU6My4yNXJlbX0udWstaGVhZGluZy1tZWRpdW17Zm9udC1zaXplOjMuNXJlbX0udWstaGVhZGluZy1sYXJnZXtmb250LXNpemU6NHJlbX0udWstaGVhZGluZy14bGFyZ2V7Zm9udC1zaXplOjZyZW19LnVrLWhlYWRpbmctMnhsYXJnZXtmb250LXNpemU6OHJlbX19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstaGVhZGluZy1tZWRpdW17Zm9udC1zaXplOjRyZW19LnVrLWhlYWRpbmctbGFyZ2V7Zm9udC1zaXplOjZyZW19LnVrLWhlYWRpbmcteGxhcmdle2ZvbnQtc2l6ZTo4cmVtfS51ay1oZWFkaW5nLTJ4bGFyZ2V7Zm9udC1zaXplOjExcmVtfX0udWstaGVhZGluZy1kaXZpZGVye3BhZGRpbmctYm90dG9tOmNhbGMoNXB4ICsgLjFlbSk7Ym9yZGVyLWJvdHRvbTpjYWxjKC4ycHggKyAuMDVlbSkgc29saWQgI2U1ZTVlNX0udWstaGVhZGluZy1idWxsZXR7cG9zaXRpb246cmVsYXRpdmV9LnVrLWhlYWRpbmctYnVsbGV0OjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6Y2FsYygtLjEgKiAxZW0pO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtoZWlnaHQ6Y2FsYyg0cHggKyAuN2VtKTttYXJnaW4tbGVmdDpjYWxjKDVweCArIC4yZW0pO2JvcmRlci1yaWdodDpjYWxjKDVweCArIC4xZW0pIHNvbGlkICNlNWU1ZTV9LnVrLWhlYWRpbmctbGluZXtvdmVyZmxvdzpoaWRkZW59LnVrLWhlYWRpbmctbGluZT4qe2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlfS51ay1oZWFkaW5nLWxpbmU+OjphZnRlciwudWstaGVhZGluZy1saW5lPjo6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOmNhbGMoNTAlIC0gKGNhbGMoLjJweCArIC4wNWVtKS8gMikpO3dpZHRoOjIwMDBweDtib3JkZXItYm90dG9tOmNhbGMoLjJweCArIC4wNWVtKSBzb2xpZCAjZTVlNWU1fS51ay1oZWFkaW5nLWxpbmU+OjpiZWZvcmV7bGVmdDoxMDAlO21hcmdpbi1sZWZ0OmNhbGMoNXB4ICsgLjNlbSl9LnVrLWhlYWRpbmctbGluZT46OmFmdGVye3JpZ2h0OjEwMCU7bWFyZ2luLXJpZ2h0OmNhbGMoNXB4ICsgLjNlbSl9W2NsYXNzKj11ay1kaXZpZGVyXXtib3JkZXI6bm9uZTttYXJnaW4tYm90dG9tOjIwcHh9KitbY2xhc3MqPXVrLWRpdmlkZXJde21hcmdpbi10b3A6MjBweH0udWstZGl2aWRlci1pY29ue3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDoyMHB4O2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjIwJTIyJTIwaGVpZ2h0JTNEJTIyMjAlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAyMCUyMDIwJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NjaXJjbGUlMjBmaWxsJTNEJTIybm9uZSUyMiUyMHN0cm9rZSUzRCUyMiUyM2U1ZTVlNSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjIlMjIlMjBjeCUzRCUyMjEwJTIyJTIwY3klM0QlMjIxMCUyMiUyMHIlM0QlMjI3JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIik7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb246NTAlIDUwJX0udWstZGl2aWRlci1pY29uOjphZnRlciwudWstZGl2aWRlci1pY29uOjpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO21heC13aWR0aDpjYWxjKDUwJSAtICg1MHB4IC8gMikpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNWU1ZTV9LnVrLWRpdmlkZXItaWNvbjo6YmVmb3Jle2xlZnQ6Y2FsYyg1MCUgKyAoNTBweCAvIDIpKTt3aWR0aDoxMDAlfS51ay1kaXZpZGVyLWljb246OmFmdGVye3JpZ2h0OmNhbGMoNTAlICsgKDUwcHggLyAyKSk7d2lkdGg6MTAwJX0udWstZGl2aWRlci1zbWFsbHtsaW5lLWhlaWdodDowfS51ay1kaXZpZGVyLXNtYWxsOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwMHB4O21heC13aWR0aDoxMDAlO2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTU7dmVydGljYWwtYWxpZ246dG9wfS51ay1kaXZpZGVyLXZlcnRpY2Fse3dpZHRoOm1heC1jb250ZW50O2hlaWdodDoxMDBweDttYXJnaW4tcmlnaHQ6YXV0bzttYXJnaW4tbGVmdDphdXRvO2JvcmRlci1yaWdodDoxcHggc29saWQgI2U1ZTVlNX0udWstbGlzdHtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS51ay1saXN0Pio+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1saXN0Pio+dWwsLnVrLWxpc3Q+Om50aC1jaGlsZChuKzIpe21hcmdpbi10b3A6MTBweH0udWstbGlzdC1jaXJjbGU+KiwudWstbGlzdC1kZWNpbWFsPiosLnVrLWxpc3QtZGlzYz4qLC51ay1saXN0LWh5cGhlbj4qLC51ay1saXN0LXNxdWFyZT4qe3BhZGRpbmctcmlnaHQ6MzBweH0udWstbGlzdC1kZWNpbWFse2NvdW50ZXItcmVzZXQ6ZGVjaW1hbH0udWstbGlzdC1kZWNpbWFsPip7Y291bnRlci1pbmNyZW1lbnQ6ZGVjaW1hbH0udWstbGlzdC1jaXJjbGU+OjpiZWZvcmUsLnVrLWxpc3QtZGVjaW1hbD46OmJlZm9yZSwudWstbGlzdC1kaXNjPjo6YmVmb3JlLC51ay1saXN0LWh5cGhlbj46OmJlZm9yZSwudWstbGlzdC1zcXVhcmU+OjpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDotMzBweDt3aWR0aDozMHB4O2hlaWdodDoxLjVlbTttYXJnaW4tYm90dG9tOi0xLjVlbTtkaXNwbGF5Omxpc3QtaXRlbTtsaXN0LXN0eWxlLXBvc2l0aW9uOmluc2lkZTt0ZXh0LWFsaWduOmxlZnR9LnVrLWxpc3QtZGlzYz46OmJlZm9yZXtsaXN0LXN0eWxlLXR5cGU6ZGlzY30udWstbGlzdC1jaXJjbGU+OjpiZWZvcmV7bGlzdC1zdHlsZS10eXBlOmNpcmNsZX0udWstbGlzdC1zcXVhcmU+OjpiZWZvcmV7bGlzdC1zdHlsZS10eXBlOnNxdWFyZX0udWstbGlzdC1kZWNpbWFsPjo6YmVmb3Jle2NvbnRlbnQ6Y291bnRlcihkZWNpbWFsLGRlY2ltYWwpICdcMjAwQS5cMDBBMCd9LnVrLWxpc3QtaHlwaGVuPjo6YmVmb3Jle2NvbnRlbnQ6J+KAk1wwMEEwXDAwQTAnfS51ay1saXN0LW11dGVkPjo6YmVmb3Jle2NvbG9yOiM5OTkhaW1wb3J0YW50fS51ay1saXN0LWVtcGhhc2lzPjo6YmVmb3Jle2NvbG9yOiMzMzMhaW1wb3J0YW50fS51ay1saXN0LXByaW1hcnk+OjpiZWZvcmV7Y29sb3I6IzFlODdmMCFpbXBvcnRhbnR9LnVrLWxpc3Qtc2Vjb25kYXJ5Pjo6YmVmb3Jle2NvbG9yOiMyMjIhaW1wb3J0YW50fS51ay1saXN0LWJ1bGxldD4qe3BhZGRpbmctcmlnaHQ6MzBweH0udWstbGlzdC1idWxsZXQ+OjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5Omxpc3QtaXRlbTtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDotMzBweDt3aWR0aDozMHB4O2hlaWdodDoxLjVlbTttYXJnaW4tYm90dG9tOi0xLjVlbTtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjI2JTIyJTIwaGVpZ2h0JTNEJTIyNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDYlMjA2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NjaXJjbGUlMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIwY3glM0QlMjIzJTIyJTIwY3klM0QlMjIzJTIyJTIwciUzRCUyMjMlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UiKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCUgNTAlfS51ay1saXN0LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpe21hcmdpbi10b3A6MTBweDtwYWRkaW5nLXRvcDoxMHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTV9LnVrLWxpc3Qtc3RyaXBlZD4qe3BhZGRpbmc6MTBweCAxMHB4fS51ay1saXN0LXN0cmlwZWQ+Om50aC1vZi10eXBlKG9kZCl7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU1fS51ay1saXN0LXN0cmlwZWQ+Om50aC1vZi10eXBlKG9kZCl7YmFja2dyb3VuZDojZjhmOGY4fS51ay1saXN0LXN0cmlwZWQ+Om50aC1jaGlsZChuKzIpe21hcmdpbi10b3A6MH0udWstbGlzdC1sYXJnZT4qPnVsLC51ay1saXN0LWxhcmdlPjpudGgtY2hpbGQobisyKXttYXJnaW4tdG9wOjIwcHh9LnVrLWxpc3QtY29sbGFwc2U+Kj51bCwudWstbGlzdC1jb2xsYXBzZT46bnRoLWNoaWxkKG4rMil7bWFyZ2luLXRvcDowfS51ay1saXN0LWxhcmdlLnVrLWxpc3QtZGl2aWRlcj46bnRoLWNoaWxkKG4rMil7bWFyZ2luLXRvcDoyMHB4O3BhZGRpbmctdG9wOjIwcHh9LnVrLWxpc3QtY29sbGFwc2UudWstbGlzdC1kaXZpZGVyPjpudGgtY2hpbGQobisyKXttYXJnaW4tdG9wOjA7cGFkZGluZy10b3A6MH0udWstbGlzdC1sYXJnZS51ay1saXN0LXN0cmlwZWQ+KntwYWRkaW5nOjIwcHggMTBweH0udWstbGlzdC1jb2xsYXBzZS51ay1saXN0LXN0cmlwZWQ+KntwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjB9LnVrLWxpc3QtY29sbGFwc2UudWstbGlzdC1zdHJpcGVkPjpudGgtY2hpbGQobisyKSwudWstbGlzdC1sYXJnZS51ay1saXN0LXN0cmlwZWQ+Om50aC1jaGlsZChuKzIpe21hcmdpbi10b3A6MH0udWstZGVzY3JpcHRpb24tbGlzdD5kdHtjb2xvcjojMzMzO2ZvbnQtc2l6ZTouODc1cmVtO2ZvbnQtd2VpZ2h0OjQwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LnVrLWRlc2NyaXB0aW9uLWxpc3Q+ZHQ6bnRoLWNoaWxkKG4rMil7bWFyZ2luLXRvcDoyMHB4fS51ay1kZXNjcmlwdGlvbi1saXN0LWRpdmlkZXI+ZHQ6bnRoLWNoaWxkKG4rMil7bWFyZ2luLXRvcDoyMHB4O3BhZGRpbmctdG9wOjIwcHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNX0udWstdGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjA7d2lkdGg6MTAwJTttYXJnaW4tYm90dG9tOjIwcHh9KisudWstdGFibGV7bWFyZ2luLXRvcDoyMHB4fS51ay10YWJsZSB0aHtwYWRkaW5nOjE2cHggMTJweDt0ZXh0LWFsaWduOnJpZ2h0O3ZlcnRpY2FsLWFsaWduOmJvdHRvbTtmb250LXNpemU6Ljg3NXJlbTtmb250LXdlaWdodDo0MDA7Y29sb3I6Izk5OTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LnVrLXRhYmxlIHRke3BhZGRpbmc6MTZweCAxMnB4O3ZlcnRpY2FsLWFsaWduOnRvcH0udWstdGFibGUgdGQ+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay10YWJsZSB0Zm9vdHtmb250LXNpemU6Ljg3NXJlbX0udWstdGFibGUgY2FwdGlvbntmb250LXNpemU6Ljg3NXJlbTt0ZXh0LWFsaWduOnJpZ2h0O2NvbG9yOiM5OTl9LnVrLXRhYmxlLW1pZGRsZSwudWstdGFibGUtbWlkZGxlIHRke3ZlcnRpY2FsLWFsaWduOm1pZGRsZSFpbXBvcnRhbnR9LnVrLXRhYmxlLWRpdmlkZXI+OmZpcnN0LWNoaWxkPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay10YWJsZS1kaXZpZGVyPjpub3QoOmZpcnN0LWNoaWxkKT50ciwudWstdGFibGUtZGl2aWRlcj50cjpub3QoOmZpcnN0LWNoaWxkKXtib3JkZXItdG9wOjFweCBzb2xpZCAjZTVlNWU1fS51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKG9kZCksLnVrLXRhYmxlLXN0cmlwZWQ+dHI6bnRoLW9mLXR5cGUob2RkKXtiYWNrZ3JvdW5kOiNmOGY4Zjg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU1fS51ay10YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciwudWstdGFibGUtaG92ZXI+dHI6aG92ZXJ7YmFja2dyb3VuZDojZmZkfS51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsLnVrLXRhYmxlPnRyLnVrLWFjdGl2ZXtiYWNrZ3JvdW5kOiNmZmR9LnVrLXRhYmxlLXNtYWxsIHRkLC51ay10YWJsZS1zbWFsbCB0aHtwYWRkaW5nOjEwcHggMTJweH0udWstdGFibGUtbGFyZ2UgdGQsLnVrLXRhYmxlLWxhcmdlIHRoe3BhZGRpbmc6MjJweCAxMnB4fS51ay10YWJsZS1qdXN0aWZ5IHRkOmZpcnN0LWNoaWxkLC51ay10YWJsZS1qdXN0aWZ5IHRoOmZpcnN0LWNoaWxke3BhZGRpbmctcmlnaHQ6MH0udWstdGFibGUtanVzdGlmeSB0ZDpsYXN0LWNoaWxkLC51ay10YWJsZS1qdXN0aWZ5IHRoOmxhc3QtY2hpbGR7cGFkZGluZy1sZWZ0OjB9LnVrLXRhYmxlLXNocmlua3t3aWR0aDoxcHh9LnVrLXRhYmxlLWV4cGFuZHttaW4td2lkdGg6MTUwcHh9LnVrLXRhYmxlLWxpbmt7cGFkZGluZzowIWltcG9ydGFudH0udWstdGFibGUtbGluaz5he2Rpc3BsYXk6YmxvY2s7cGFkZGluZzoxNnB4IDEycHh9LnVrLXRhYmxlLXNtYWxsIC51ay10YWJsZS1saW5rPmF7cGFkZGluZzoxMHB4IDEycHh9QG1lZGlhIChtYXgtd2lkdGg6OTU5cHgpey51ay10YWJsZS1yZXNwb25zaXZlLC51ay10YWJsZS1yZXNwb25zaXZlIHRib2R5LC51ay10YWJsZS1yZXNwb25zaXZlIHRkLC51ay10YWJsZS1yZXNwb25zaXZlIHRoLC51ay10YWJsZS1yZXNwb25zaXZlIHRye2Rpc3BsYXk6YmxvY2t9LnVrLXRhYmxlLXJlc3BvbnNpdmUgdGhlYWR7ZGlzcGxheTpub25lfS51ay10YWJsZS1yZXNwb25zaXZlIHRkLC51ay10YWJsZS1yZXNwb25zaXZlIHRoe3dpZHRoOmF1dG8haW1wb3J0YW50O21heC13aWR0aDpub25lIWltcG9ydGFudDttaW4td2lkdGg6MCFpbXBvcnRhbnQ7b3ZlcmZsb3c6dmlzaWJsZSFpbXBvcnRhbnQ7d2hpdGUtc3BhY2U6bm9ybWFsIWltcG9ydGFudH0udWstdGFibGUtcmVzcG9uc2l2ZSAudWstdGFibGUtbGluazpub3QoOmZpcnN0LWNoaWxkKT5hLC51ay10YWJsZS1yZXNwb25zaXZlIHRkOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCgudWstdGFibGUtbGluayksLnVrLXRhYmxlLXJlc3BvbnNpdmUgdGg6bm90KDpmaXJzdC1jaGlsZCk6bm90KC51ay10YWJsZS1saW5rKXtwYWRkaW5nLXRvcDo1cHghaW1wb3J0YW50fS51ay10YWJsZS1yZXNwb25zaXZlIC51ay10YWJsZS1saW5rOm5vdCg6bGFzdC1jaGlsZCk+YSwudWstdGFibGUtcmVzcG9uc2l2ZSB0ZDpub3QoOmxhc3QtY2hpbGQpOm5vdCgudWstdGFibGUtbGluayksLnVrLXRhYmxlLXJlc3BvbnNpdmUgdGg6bm90KDpsYXN0LWNoaWxkKTpub3QoLnVrLXRhYmxlLWxpbmspe3BhZGRpbmctYm90dG9tOjVweCFpbXBvcnRhbnR9LnVrLXRhYmxlLWp1c3RpZnkudWstdGFibGUtcmVzcG9uc2l2ZSB0ZCwudWstdGFibGUtanVzdGlmeS51ay10YWJsZS1yZXNwb25zaXZlIHRoe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MH19LnVrLXRhYmxlIHRib2R5IHRye3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuMXMgbGluZWFyfS51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKDJuKTpsYXN0LWNoaWxkLC51ay10YWJsZS1zdHJpcGVkPnRyOm50aC1vZi10eXBlKDJuKTpsYXN0LWNoaWxke2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNWU1ZTV9LnVrLWljb257bWFyZ2luOjA7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czowO292ZXJmbG93OnZpc2libGU7Zm9udDppbmhlcml0O2NvbG9yOmluaGVyaXQ7dGV4dC10cmFuc2Zvcm06bm9uZTtwYWRkaW5nOjA7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtkaXNwbGF5OmlubGluZS1ibG9jaztmaWxsOmN1cnJlbnRjb2xvcjtsaW5lLWhlaWdodDowfWJ1dHRvbi51ay1pY29uOm5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS51ay1pY29uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowO3BhZGRpbmc6MH0udWstaWNvbjpub3QoLnVrLXByZXNlcnZlKSBbZmlsbCo9JyMnXTpub3QoLnVrLXByZXNlcnZlKXtmaWxsOmN1cnJlbnRjb2xvcn0udWstaWNvbjpub3QoLnVrLXByZXNlcnZlKSBbc3Ryb2tlKj0nIyddOm5vdCgudWstcHJlc2VydmUpe3N0cm9rZTpjdXJyZW50Y29sb3J9LnVrLWljb24+Knt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCl9LnVrLWljb24taW1hZ2V7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJSA1MCU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtvYmplY3QtZml0OnNjYWxlLWRvd247bWF4LXdpZHRoOm5vbmV9LnVrLWljb24tbGlua3tjb2xvcjojOTk5O3RleHQtZGVjb3JhdGlvbjpub25lIWltcG9ydGFudH0udWstaWNvbi1saW5rOmhvdmVye2NvbG9yOiM2NjZ9LnVrLWFjdGl2ZT4udWstaWNvbi1saW5rLC51ay1pY29uLWxpbms6YWN0aXZle2NvbG9yOiM1OTU5NTl9LnVrLWljb24tYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDozNnB4O2hlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6NTAwcHg7YmFja2dyb3VuZDojZjhmOGY4O2NvbG9yOiM5OTk7dmVydGljYWwtYWxpZ246bWlkZGxlO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7dHJhbnNpdGlvbjouMXMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS51ay1pY29uLWJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlYmViZWI7Y29sb3I6IzY2Nn0udWstYWN0aXZlPi51ay1pY29uLWJ1dHRvbiwudWstaWNvbi1idXR0b246YWN0aXZle2JhY2tncm91bmQtY29sb3I6I2RmZGZkZjtjb2xvcjojNjY2fS51ay1yYW5nZXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246bWlkZGxlO21heC13aWR0aDoxMDAlO3dpZHRoOjEwMCU7YmFja2dyb3VuZDowIDB9LnVrLXJhbmdlOmZvY3Vze291dGxpbmU6MH0udWstcmFuZ2U6Oi1tb3otZm9jdXMtb3V0ZXJ7Ym9yZGVyOm5vbmV9LnVrLXJhbmdlOm5vdCg6ZGlzYWJsZWQpOjotd2Via2l0LXNsaWRlci10aHVtYntjdXJzb3I6cG9pbnRlcn0udWstcmFuZ2U6bm90KDpkaXNhYmxlZCk6Oi1tb3otcmFuZ2UtdGh1bWJ7Y3Vyc29yOnBvaW50ZXJ9LnVrLXJhbmdlOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja3toZWlnaHQ6M3B4O2JhY2tncm91bmQ6I2ViZWJlYjtib3JkZXItcmFkaXVzOjUwMHB4fS51ay1yYW5nZTphY3RpdmU6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrLC51ay1yYW5nZTpmb2N1czo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7YmFja2dyb3VuZDojZGVkZWRlfS51ay1yYW5nZTo6LW1vei1yYW5nZS10cmFja3toZWlnaHQ6M3B4O2JhY2tncm91bmQ6I2ViZWJlYjtib3JkZXItcmFkaXVzOjUwMHB4fS51ay1yYW5nZTpmb2N1czo6LW1vei1yYW5nZS10cmFja3tiYWNrZ3JvdW5kOiNkZWRlZGV9LnVrLXJhbmdlOjotd2Via2l0LXNsaWRlci10aHVtYnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW4tdG9wOi03cHg7aGVpZ2h0OjE1cHg7d2lkdGg6MTVweDtib3JkZXItcmFkaXVzOjUwMHB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2N9LnVrLXJhbmdlOjotbW96LXJhbmdlLXRodW1ie2JvcmRlcjpub25lO2hlaWdodDoxNXB4O3dpZHRoOjE1cHg7bWFyZ2luLXRvcDotN3B4O2JvcmRlci1yYWRpdXM6NTAwcHg7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjY30udWstY2hlY2tib3gsLnVrLWlucHV0LC51ay1yYWRpbywudWstc2VsZWN0LC51ay10ZXh0YXJlYXtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7Ym9yZGVyLXJhZGl1czowO2ZvbnQ6aW5oZXJpdH0udWstaW5wdXR7b3ZlcmZsb3c6dmlzaWJsZX0udWstc2VsZWN0e3RleHQtdHJhbnNmb3JtOm5vbmV9LnVrLXNlbGVjdCBvcHRncm91cHtmb250OmluaGVyaXQ7Zm9udC13ZWlnaHQ6NzAwfS51ay10ZXh0YXJlYXtvdmVyZmxvdzphdXRvfS51ay1pbnB1dFt0eXBlPXNlYXJjaF06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sLnVrLWlucHV0W3R5cGU9c2VhcmNoXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0udWstaW5wdXRbdHlwZT1udW1iZXJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLC51ay1pbnB1dFt0eXBlPW51bWJlcl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99LnVrLWlucHV0OjotbW96LXBsYWNlaG9sZGVyLC51ay10ZXh0YXJlYTo6LW1vei1wbGFjZWhvbGRlcntvcGFjaXR5OjF9LnVrLWNoZWNrYm94Om5vdCg6ZGlzYWJsZWQpLC51ay1yYWRpbzpub3QoOmRpc2FibGVkKXtjdXJzb3I6cG9pbnRlcn0udWstZmllbGRzZXR7Ym9yZGVyOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowfS51ay1pbnB1dCwudWstdGV4dGFyZWF7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LnVrLWlucHV0LC51ay1zZWxlY3QsLnVrLXRleHRhcmVhe21heC13aWR0aDoxMDAlO3dpZHRoOjEwMCU7Ym9yZGVyOjAgbm9uZTtwYWRkaW5nOjAgMTBweDtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzY2Njtib3JkZXI6MXB4IHNvbGlkICNlNWU1ZTU7dHJhbnNpdGlvbjouMnMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlcn0udWstaW5wdXQsLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSl7aGVpZ2h0OjQwcHg7dmVydGljYWwtYWxpZ246bWlkZGxlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS51ay1pbnB1dDpub3QoaW5wdXQpLC51ay1zZWxlY3Q6bm90KHNlbGVjdCl7bGluZS1oZWlnaHQ6MzhweH0udWstc2VsZWN0W211bHRpcGxlXSwudWstc2VsZWN0W3NpemVdLC51ay10ZXh0YXJlYXtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4O3ZlcnRpY2FsLWFsaWduOnRvcH0udWstc2VsZWN0W211bHRpcGxlXSwudWstc2VsZWN0W3NpemVde3Jlc2l6ZTp2ZXJ0aWNhbH0udWstaW5wdXQ6Zm9jdXMsLnVrLXNlbGVjdDpmb2N1cywudWstdGV4dGFyZWE6Zm9jdXN7b3V0bGluZTowO2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojNjY2O2JvcmRlci1jb2xvcjojMWU4N2YwfS51ay1pbnB1dDpkaXNhYmxlZCwudWstc2VsZWN0OmRpc2FibGVkLC51ay10ZXh0YXJlYTpkaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmOGY4Zjg7Y29sb3I6Izk5OTtib3JkZXItY29sb3I6I2U1ZTVlNX0udWstaW5wdXQ6OnBsYWNlaG9sZGVye2NvbG9yOiM5OTl9LnVrLXRleHRhcmVhOjpwbGFjZWhvbGRlcntjb2xvcjojOTk5fS51ay1mb3JtLXNtYWxse2ZvbnQtc2l6ZTouODc1cmVtfS51ay1mb3JtLXNtYWxsOm5vdCh0ZXh0YXJlYSk6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pe2hlaWdodDozMHB4O3BhZGRpbmctcmlnaHQ6OHB4O3BhZGRpbmctbGVmdDo4cHh9W211bHRpcGxlXS51ay1mb3JtLXNtYWxsLFtzaXplXS51ay1mb3JtLXNtYWxsLHRleHRhcmVhLnVrLWZvcm0tc21hbGx7cGFkZGluZzo1cHggOHB4fS51ay1mb3JtLXNtYWxsOm5vdChzZWxlY3QpOm5vdChpbnB1dCk6bm90KHRleHRhcmVhKXtsaW5lLWhlaWdodDoyOHB4fS51ay1mb3JtLWxhcmdle2ZvbnQtc2l6ZToxLjI1cmVtfS51ay1mb3JtLWxhcmdlOm5vdCh0ZXh0YXJlYSk6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pe2hlaWdodDo1NXB4O3BhZGRpbmctcmlnaHQ6MTJweDtwYWRkaW5nLWxlZnQ6MTJweH1bbXVsdGlwbGVdLnVrLWZvcm0tbGFyZ2UsW3NpemVdLnVrLWZvcm0tbGFyZ2UsdGV4dGFyZWEudWstZm9ybS1sYXJnZXtwYWRkaW5nOjdweCAxMnB4fS51ay1mb3JtLWxhcmdlOm5vdChzZWxlY3QpOm5vdChpbnB1dCk6bm90KHRleHRhcmVhKXtsaW5lLWhlaWdodDo1M3B4fS51ay1mb3JtLWRhbmdlciwudWstZm9ybS1kYW5nZXI6Zm9jdXN7Y29sb3I6I2YwNTA2ZTtib3JkZXItY29sb3I6I2YwNTA2ZX0udWstZm9ybS1zdWNjZXNzLC51ay1mb3JtLXN1Y2Nlc3M6Zm9jdXN7Y29sb3I6IzMyZDI5Njtib3JkZXItY29sb3I6IzMyZDI5Nn0udWstZm9ybS1ibGFua3tiYWNrZ3JvdW5kOjAgMDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9LnVrLWZvcm0tYmxhbms6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNlNWU1ZTU7Ym9yZGVyLXN0eWxlOnNvbGlkfWlucHV0LnVrLWZvcm0td2lkdGgteHNtYWxse3dpZHRoOjUwcHh9c2VsZWN0LnVrLWZvcm0td2lkdGgteHNtYWxse3dpZHRoOjc1cHh9LnVrLWZvcm0td2lkdGgtc21hbGx7d2lkdGg6MTMwcHh9LnVrLWZvcm0td2lkdGgtbWVkaXVte3dpZHRoOjIwMHB4fS51ay1mb3JtLXdpZHRoLWxhcmdle3dpZHRoOjUwMHB4fS51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO3BhZGRpbmctbGVmdDoyMHB4O2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAyNCUyMDE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzY2NiUyMiUyMHBvaW50cyUzRCUyMjEyJTIwMSUyMDklMjA2JTIwMTUlMjA2JTIyJTIwJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM2NjYlMjIlMjBwb2ludHMlM0QlMjIxMiUyMDEzJTIwOSUyMDglMjAxNSUyMDglMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEiKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjowIDUwJX0udWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSBvcHRpb257Y29sb3I6IzY2Nn0udWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKTpkaXNhYmxlZHtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIyNCUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMjQlMjAxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5OTklMjIlMjBwb2ludHMlM0QlMjIxMiUyMDElMjA5JTIwNiUyMDE1JTIwNiUyMiUyMCUyRiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTk5JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxMyUyMDklMjA4JTIwMTUlMjA4JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIil9LnVrLWlucHV0W2xpc3Rde3BhZGRpbmctbGVmdDoyMHB4O2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgNTAlfS51ay1pbnB1dFtsaXN0XTpmb2N1cywudWstaW5wdXRbbGlzdF06aG92ZXJ7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDI0JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxMiUyMDglMjA2JTIwMTYlMjA2JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIil9LnVrLWlucHV0W2xpc3RdOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7ZGlzcGxheTpub25lIWltcG9ydGFudH0udWstY2hlY2tib3gsLnVrLXJhZGlve2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxNnB4O3dpZHRoOjE2cHg7b3ZlcmZsb3c6aGlkZGVuO21hcmdpbi10b3A6LTRweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCUgNTAlO2JvcmRlcjoxcHggc29saWQgI2NjYzt0cmFuc2l0aW9uOi4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uLXByb3BlcnR5OmJhY2tncm91bmQtY29sb3IsYm9yZGVyfS51ay1yYWRpb3tib3JkZXItcmFkaXVzOjUwJX0udWstY2hlY2tib3g6Zm9jdXMsLnVrLXJhZGlvOmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtvdXRsaW5lOjA7Ym9yZGVyLWNvbG9yOiMxZTg3ZjB9LnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLXJhZGlvOmNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojMWU4N2YwO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0udWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywudWstcmFkaW86Y2hlY2tlZDpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiMwZTZkY2R9LnVrLXJhZGlvOmNoZWNrZWR7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTYlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE2JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2NpcmNsZSUyMGZpbGwlM0QlMjIlMjNmZmYlMjIlMjBjeCUzRCUyMjglMjIlMjBjeSUzRCUyMjglMjIlMjByJTNEJTIyMiUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpfS51ay1jaGVja2JveDpjaGVja2Vke2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjE0JTIyJTIwaGVpZ2h0JTNEJTIyMTElMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNCUyMDExJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM2ZmZiUyMiUyMHBvaW50cyUzRCUyMjEyJTIwMSUyMDUlMjA3LjUlMjAyJTIwNSUyMDElMjA1LjUlMjA1JTIwMTAlMjAxMyUyMDEuNSUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSIpfS51ay1jaGVja2JveDppbmRldGVybWluYXRle2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjE2JTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNiUyMDE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyM2ZmZiUyMiUyMHglM0QlMjIzJTIyJTIweSUzRCUyMjglMjIlMjB3aWR0aCUzRCUyMjEwJTIyJTIwaGVpZ2h0JTNEJTIyMSUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpfS51ay1jaGVja2JveDpkaXNhYmxlZCwudWstcmFkaW86ZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZjhmOGY4O2JvcmRlci1jb2xvcjojZTVlNWU1fS51ay1yYWRpbzpkaXNhYmxlZDpjaGVja2Vke2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjE2JTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNiUyMDE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NjaXJjbGUlMjBmaWxsJTNEJTIyJTIzOTk5JTIyJTIwY3glM0QlMjI4JTIyJTIwY3klM0QlMjI4JTIyJTIwciUzRCUyMjIlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UiKX0udWstY2hlY2tib3g6ZGlzYWJsZWQ6Y2hlY2tlZHtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxNCUyMiUyMGhlaWdodCUzRCUyMjExJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTQlMjAxMSUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5OTklMjIlMjBwb2ludHMlM0QlMjIxMiUyMDElMjA1JTIwNy41JTIwMiUyMDUlMjAxJTIwNS41JTIwNSUyMDEwJTIwMTMlMjAxLjUlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEiKX0udWstY2hlY2tib3g6ZGlzYWJsZWQ6aW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxNiUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTYlMjAxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM5OTklMjIlMjB4JTNEJTIyMyUyMiUyMHklM0QlMjI4JTIyJTIwd2lkdGglM0QlMjIxMCUyMiUyMGhlaWdodCUzRCUyMjElMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UiKX0udWstbGVnZW5ke3dpZHRoOjEwMCU7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjA7Zm9udC1zaXplOjEuNXJlbTtsaW5lLWhlaWdodDoxLjR9LnVrLWZvcm0tY3VzdG9te2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO21heC13aWR0aDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0udWstZm9ybS1jdXN0b20gaW5wdXRbdHlwZT1maWxlXSwudWstZm9ybS1jdXN0b20gc2VsZWN0e3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3otaW5kZXg6MTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3JpZ2h0OjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7b3BhY2l0eTowO2N1cnNvcjpwb2ludGVyfS51ay1mb3JtLWN1c3RvbSBpbnB1dFt0eXBlPWZpbGVde2ZvbnQtc2l6ZTo1MDBweDtvdmVyZmxvdzpoaWRkZW59LnVrLWZvcm0tbGFiZWx7Y29sb3I6IzMzMztmb250LXNpemU6Ljg3NXJlbX0udWstZm9ybS1zdGFja2VkIC51ay1mb3JtLWxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo1cHh9QG1lZGlhIChtYXgtd2lkdGg6OTU5cHgpey51ay1mb3JtLWhvcml6b250YWwgLnVrLWZvcm0tbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjVweH19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1mb3JtLWhvcml6b250YWwgLnVrLWZvcm0tbGFiZWx7d2lkdGg6MjAwcHg7bWFyZ2luLXRvcDo3cHg7ZmxvYXQ6cmlnaHR9LnVrLWZvcm0taG9yaXpvbnRhbCAudWstZm9ybS1jb250cm9sc3ttYXJnaW4tcmlnaHQ6MjE1cHh9LnVrLWZvcm0taG9yaXpvbnRhbCAudWstZm9ybS1jb250cm9scy10ZXh0e3BhZGRpbmctdG9wOjdweH19LnVrLWZvcm0taWNvbntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO3dpZHRoOjQwcHg7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjojOTk5fS51ay1mb3JtLWljb246aG92ZXJ7Y29sb3I6IzY2Nn0udWstZm9ybS1pY29uOm5vdChhKTpub3QoYnV0dG9uKTpub3QoaW5wdXQpe3BvaW50ZXItZXZlbnRzOm5vbmV9LnVrLWZvcm0taWNvbjpub3QoLnVrLWZvcm0taWNvbi1mbGlwKX4udWstaW5wdXR7cGFkZGluZy1yaWdodDo0MHB4IWltcG9ydGFudH0udWstZm9ybS1pY29uLWZsaXB7bGVmdDowO3JpZ2h0OmF1dG99LnVrLWZvcm0taWNvbi1mbGlwfi51ay1pbnB1dHtwYWRkaW5nLWxlZnQ6NDBweCFpbXBvcnRhbnR9LnVrLWJ1dHRvbnttYXJnaW46MDtib3JkZXI6bm9uZTtvdmVyZmxvdzp2aXNpYmxlO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O3RleHQtdHJhbnNmb3JtOm5vbmU7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7Ym9yZGVyLXJhZGl1czowO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMzBweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Zm9udC1zaXplOi44NzVyZW07bGluZS1oZWlnaHQ6MzhweDt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7dHJhbnNpdGlvbjouMXMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcn0udWstYnV0dG9uOm5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS51ay1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjA7cGFkZGluZzowfS51ay1idXR0b246aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVrLWJ1dHRvbi1kZWZhdWx0e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6IzMzMztib3JkZXI6MXB4IHNvbGlkICNlNWU1ZTV9LnVrLWJ1dHRvbi1kZWZhdWx0OmhvdmVye2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6IzMzMztib3JkZXItY29sb3I6I2IyYjJiMn0udWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLC51ay1idXR0b24tZGVmYXVsdDphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojMzMzO2JvcmRlci1jb2xvcjojOTk5fS51ay1idXR0b24tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiMxZTg3ZjA7Y29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50fS51ay1idXR0b24tcHJpbWFyeTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwZjdhZTU7Y29sb3I6I2ZmZn0udWstYnV0dG9uLXByaW1hcnkudWstYWN0aXZlLC51ay1idXR0b24tcHJpbWFyeTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojMGU2ZGNkO2NvbG9yOiNmZmZ9LnVrLWJ1dHRvbi1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjojMjIyO2NvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudH0udWstYnV0dG9uLXNlY29uZGFyeTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMxNTE1MTU7Y29sb3I6I2ZmZn0udWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsLnVrLWJ1dHRvbi1zZWNvbmRhcnk6YWN0aXZle2JhY2tncm91bmQtY29sb3I6IzA4MDgwODtjb2xvcjojZmZmfS51ay1idXR0b24tZGFuZ2Vye2JhY2tncm91bmQtY29sb3I6I2YwNTA2ZTtjb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnR9LnVrLWJ1dHRvbi1kYW5nZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWUzOTViO2NvbG9yOiNmZmZ9LnVrLWJ1dHRvbi1kYW5nZXIudWstYWN0aXZlLC51ay1idXR0b24tZGFuZ2VyOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNlYzIxNDc7Y29sb3I6I2ZmZn0udWstYnV0dG9uLWRhbmdlcjpkaXNhYmxlZCwudWstYnV0dG9uLWRlZmF1bHQ6ZGlzYWJsZWQsLnVrLWJ1dHRvbi1wcmltYXJ5OmRpc2FibGVkLC51ay1idXR0b24tc2Vjb25kYXJ5OmRpc2FibGVke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6Izk5OTtib3JkZXItY29sb3I6I2U1ZTVlNX0udWstYnV0dG9uLXNtYWxse3BhZGRpbmc6MCAxNXB4O2xpbmUtaGVpZ2h0OjI4cHg7Zm9udC1zaXplOi44NzVyZW19LnVrLWJ1dHRvbi1sYXJnZXtwYWRkaW5nOjAgNDBweDtsaW5lLWhlaWdodDo1M3B4O2ZvbnQtc2l6ZTouODc1cmVtfS51ay1idXR0b24tdGV4dHtwYWRkaW5nOjA7bGluZS1oZWlnaHQ6MS41O2JhY2tncm91bmQ6MCAwO2NvbG9yOiMzMzM7cG9zaXRpb246cmVsYXRpdmV9LnVrLWJ1dHRvbi10ZXh0OjpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtyaWdodDowO2xlZnQ6MTAwJTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMzMzO3RyYW5zaXRpb246bGVmdCAuM3MgZWFzZS1vdXR9LnVrLWJ1dHRvbi10ZXh0OmhvdmVye2NvbG9yOiMzMzN9LnVrLWJ1dHRvbi10ZXh0OmhvdmVyOjpiZWZvcmV7bGVmdDowfS51ay1idXR0b24tdGV4dDpkaXNhYmxlZHtjb2xvcjojOTk5fS51ay1idXR0b24tdGV4dDpkaXNhYmxlZDo6YmVmb3Jle2Rpc3BsYXk6bm9uZX0udWstYnV0dG9uLWxpbmt7cGFkZGluZzowO2xpbmUtaGVpZ2h0OjEuNTtiYWNrZ3JvdW5kOjAgMDtjb2xvcjojMzMzfS51ay1idXR0b24tbGluazpob3Zlcntjb2xvcjojOTk5O3RleHQtZGVjb3JhdGlvbjpub25lfS51ay1idXR0b24tbGluazpkaXNhYmxlZHtjb2xvcjojOTk5O3RleHQtZGVjb3JhdGlvbjpub25lfS51ay1idXR0b24tZ3JvdXB7ZGlzcGxheTppbmxpbmUtZmxleDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7cG9zaXRpb246cmVsYXRpdmV9LnVrLWJ1dHRvbi1ncm91cD4udWstYnV0dG9uOm50aC1jaGlsZChuKzIpLC51ay1idXR0b24tZ3JvdXA+ZGl2Om50aC1jaGlsZChuKzIpIC51ay1idXR0b257bWFyZ2luLXJpZ2h0Oi0xcHh9LnVrLWJ1dHRvbi1ncm91cCAudWstYnV0dG9uLnVrLWFjdGl2ZSwudWstYnV0dG9uLWdyb3VwIC51ay1idXR0b246YWN0aXZlLC51ay1idXR0b24tZ3JvdXAgLnVrLWJ1dHRvbjpob3Zlcntwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjF9LnVrLXByb2dyZXNze3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtib3JkZXI6MDtiYWNrZ3JvdW5kLWNvbG9yOiNmOGY4Zjg7bWFyZ2luLWJvdHRvbToyMHB4O2hlaWdodDoxNXB4O2JvcmRlci1yYWRpdXM6NTAwcHg7b3ZlcmZsb3c6aGlkZGVufSorLnVrLXByb2dyZXNze21hcmdpbi10b3A6MjBweH0udWstcHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LnVrLXByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVle2JhY2tncm91bmQtY29sb3I6IzFlODdmMDt0cmFuc2l0aW9uOndpZHRoIC42cyBlYXNlfS51ay1wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjojMWU4N2YwO3RyYW5zaXRpb246d2lkdGggLjZzIGVhc2V9LnVrLXNlY3Rpb257ZGlzcGxheTpmbG93LXJvb3Q7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctdG9wOjQwcHg7cGFkZGluZy1ib3R0b206NDBweH1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLXNlY3Rpb257cGFkZGluZy10b3A6NzBweDtwYWRkaW5nLWJvdHRvbTo3MHB4fX0udWstc2VjdGlvbj46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLXNlY3Rpb24teHNtYWxse3BhZGRpbmctdG9wOjIwcHg7cGFkZGluZy1ib3R0b206MjBweH0udWstc2VjdGlvbi1zbWFsbHtwYWRkaW5nLXRvcDo0MHB4O3BhZGRpbmctYm90dG9tOjQwcHh9LnVrLXNlY3Rpb24tbGFyZ2V7cGFkZGluZy10b3A6NzBweDtwYWRkaW5nLWJvdHRvbTo3MHB4fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstc2VjdGlvbi1sYXJnZXtwYWRkaW5nLXRvcDoxNDBweDtwYWRkaW5nLWJvdHRvbToxNDBweH19LnVrLXNlY3Rpb24teGxhcmdle3BhZGRpbmctdG9wOjE0MHB4O3BhZGRpbmctYm90dG9tOjE0MHB4fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstc2VjdGlvbi14bGFyZ2V7cGFkZGluZy10b3A6MjEwcHg7cGFkZGluZy1ib3R0b206MjEwcHh9fS51ay1zZWN0aW9uLWRlZmF1bHR7YmFja2dyb3VuZDojZmZmfS51ay1zZWN0aW9uLW11dGVke2JhY2tncm91bmQ6I2Y4ZjhmOH0udWstc2VjdGlvbi1wcmltYXJ5e2JhY2tncm91bmQ6IzFlODdmMH0udWstc2VjdGlvbi1zZWNvbmRhcnl7YmFja2dyb3VuZDojMjIyfS51ay1jb250YWluZXJ7ZGlzcGxheTpmbG93LXJvb3Q7Ym94LXNpemluZzpjb250ZW50LWJveDttYXgtd2lkdGg6MTIwMHB4O21hcmdpbi1yaWdodDphdXRvO21hcmdpbi1sZWZ0OmF1dG87cGFkZGluZy1yaWdodDoxNXB4O3BhZGRpbmctbGVmdDoxNXB4fUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstY29udGFpbmVye3BhZGRpbmctcmlnaHQ6MzBweDtwYWRkaW5nLWxlZnQ6MzBweH19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1jb250YWluZXJ7cGFkZGluZy1yaWdodDo0MHB4O3BhZGRpbmctbGVmdDo0MHB4fX0udWstY29udGFpbmVyPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstY29udGFpbmVyIC51ay1jb250YWluZXJ7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDowfS51ay1jb250YWluZXIteHNtYWxse21heC13aWR0aDo3NTBweH0udWstY29udGFpbmVyLXNtYWxse21heC13aWR0aDo5MDBweH0udWstY29udGFpbmVyLWxhcmdle21heC13aWR0aDoxNDAwcHh9LnVrLWNvbnRhaW5lci14bGFyZ2V7bWF4LXdpZHRoOjE2MDBweH0udWstY29udGFpbmVyLWV4cGFuZHttYXgtd2lkdGg6bm9uZX0udWstY29udGFpbmVyLWV4cGFuZC1yaWdodHttYXJnaW4tcmlnaHQ6MH0udWstY29udGFpbmVyLWV4cGFuZC1sZWZ0e21hcmdpbi1sZWZ0OjB9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1jb250YWluZXItZXhwYW5kLWxlZnQudWstY29udGFpbmVyLXhzbWFsbCwudWstY29udGFpbmVyLWV4cGFuZC1yaWdodC51ay1jb250YWluZXIteHNtYWxse21heC13aWR0aDpjYWxjKDUwJSArICg3NTBweCAvIDIpIC0gMzBweCl9LnVrLWNvbnRhaW5lci1leHBhbmQtbGVmdC51ay1jb250YWluZXItc21hbGwsLnVrLWNvbnRhaW5lci1leHBhbmQtcmlnaHQudWstY29udGFpbmVyLXNtYWxse21heC13aWR0aDpjYWxjKDUwJSArICg5MDBweCAvIDIpIC0gMzBweCl9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstY29udGFpbmVyLWV4cGFuZC1sZWZ0LC51ay1jb250YWluZXItZXhwYW5kLXJpZ2h0e21heC13aWR0aDpjYWxjKDUwJSArICgxMjAwcHggLyAyKSAtIDQwcHgpfS51ay1jb250YWluZXItZXhwYW5kLWxlZnQudWstY29udGFpbmVyLXhzbWFsbCwudWstY29udGFpbmVyLWV4cGFuZC1yaWdodC51ay1jb250YWluZXIteHNtYWxse21heC13aWR0aDpjYWxjKDUwJSArICg3NTBweCAvIDIpIC0gNDBweCl9LnVrLWNvbnRhaW5lci1leHBhbmQtbGVmdC51ay1jb250YWluZXItc21hbGwsLnVrLWNvbnRhaW5lci1leHBhbmQtcmlnaHQudWstY29udGFpbmVyLXNtYWxse21heC13aWR0aDpjYWxjKDUwJSArICg5MDBweCAvIDIpIC0gNDBweCl9LnVrLWNvbnRhaW5lci1leHBhbmQtbGVmdC51ay1jb250YWluZXItbGFyZ2UsLnVrLWNvbnRhaW5lci1leHBhbmQtcmlnaHQudWstY29udGFpbmVyLWxhcmdle21heC13aWR0aDpjYWxjKDUwJSArICgxNDAwcHggLyAyKSAtIDQwcHgpfS51ay1jb250YWluZXItZXhwYW5kLWxlZnQudWstY29udGFpbmVyLXhsYXJnZSwudWstY29udGFpbmVyLWV4cGFuZC1yaWdodC51ay1jb250YWluZXIteGxhcmdle21heC13aWR0aDpjYWxjKDUwJSArICgxNjAwcHggLyAyKSAtIDQwcHgpfX0udWstY29udGFpbmVyLWl0ZW0tcGFkZGluZy1yZW1vdmUtbGVmdCwudWstY29udGFpbmVyLWl0ZW0tcGFkZGluZy1yZW1vdmUtcmlnaHR7d2lkdGg6Y2FsYygxMDAlICsgMTVweCl9LnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLXJpZ2h0e21hcmdpbi1yaWdodDotMTVweH0udWstY29udGFpbmVyLWl0ZW0tcGFkZGluZy1yZW1vdmUtbGVmdHttYXJnaW4tbGVmdDotMTVweH1AbWVkaWEgKG1pbi13aWR0aDo2NDBweCl7LnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLWxlZnQsLnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLXJpZ2h0e3dpZHRoOmNhbGMoMTAwJSArIDMwcHgpfS51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1yaWdodHttYXJnaW4tcmlnaHQ6LTMwcHh9LnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLWxlZnR7bWFyZ2luLWxlZnQ6LTMwcHh9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstY29udGFpbmVyLWl0ZW0tcGFkZGluZy1yZW1vdmUtbGVmdCwudWstY29udGFpbmVyLWl0ZW0tcGFkZGluZy1yZW1vdmUtcmlnaHR7d2lkdGg6Y2FsYygxMDAlICsgNDBweCl9LnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLXJpZ2h0e21hcmdpbi1yaWdodDotNDBweH0udWstY29udGFpbmVyLWl0ZW0tcGFkZGluZy1yZW1vdmUtbGVmdHttYXJnaW4tbGVmdDotNDBweH19LnVrLXRpbGV7ZGlzcGxheTpmbG93LXJvb3Q7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctcmlnaHQ6MTVweDtwYWRkaW5nLWxlZnQ6MTVweDtwYWRkaW5nLXRvcDo0MHB4O3BhZGRpbmctYm90dG9tOjQwcHh9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay10aWxle3BhZGRpbmctcmlnaHQ6MzBweDtwYWRkaW5nLWxlZnQ6MzBweH19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay10aWxle3BhZGRpbmctcmlnaHQ6NDBweDtwYWRkaW5nLWxlZnQ6NDBweDtwYWRkaW5nLXRvcDo3MHB4O3BhZGRpbmctYm90dG9tOjcwcHh9fS51ay10aWxlPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstdGlsZS14c21hbGx7cGFkZGluZy10b3A6MjBweDtwYWRkaW5nLWJvdHRvbToyMHB4fS51ay10aWxlLXNtYWxse3BhZGRpbmctdG9wOjQwcHg7cGFkZGluZy1ib3R0b206NDBweH0udWstdGlsZS1sYXJnZXtwYWRkaW5nLXRvcDo3MHB4O3BhZGRpbmctYm90dG9tOjcwcHh9QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay10aWxlLWxhcmdle3BhZGRpbmctdG9wOjE0MHB4O3BhZGRpbmctYm90dG9tOjE0MHB4fX0udWstdGlsZS14bGFyZ2V7cGFkZGluZy10b3A6MTQwcHg7cGFkZGluZy1ib3R0b206MTQwcHh9QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay10aWxlLXhsYXJnZXtwYWRkaW5nLXRvcDoyMTBweDtwYWRkaW5nLWJvdHRvbToyMTBweH19LnVrLXRpbGUtZGVmYXVsdHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LnVrLXRpbGUtbXV0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjhmOGY4fS51ay10aWxlLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojMWU4N2YwfS51ay10aWxlLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjJ9LnVrLWNhcmR7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94O3RyYW5zaXRpb246Ym94LXNoYWRvdyAuMXMgZWFzZS1pbi1vdXR9LnVrLWNhcmQtYm9keXtkaXNwbGF5OmZsb3ctcm9vdDtwYWRkaW5nOjMwcHggMzBweH0udWstY2FyZC1oZWFkZXJ7ZGlzcGxheTpmbG93LXJvb3Q7cGFkZGluZzoxNXB4IDMwcHh9LnVrLWNhcmQtZm9vdGVye2Rpc3BsYXk6Zmxvdy1yb290O3BhZGRpbmc6MTVweCAzMHB4fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LnVrLWNhcmQtYm9keXtwYWRkaW5nOjQwcHggNDBweH0udWstY2FyZC1oZWFkZXJ7cGFkZGluZzoyMHB4IDQwcHh9LnVrLWNhcmQtZm9vdGVye3BhZGRpbmc6MjBweCA0MHB4fX0udWstY2FyZC1ib2R5PjpsYXN0LWNoaWxkLC51ay1jYXJkLWZvb3Rlcj46bGFzdC1jaGlsZCwudWstY2FyZC1oZWFkZXI+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1jYXJkLXRpdGxle2ZvbnQtc2l6ZToxLjVyZW07bGluZS1oZWlnaHQ6MS40fS51ay1jYXJkLWJhZGdle3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxNXB4O2xlZnQ6MTVweDt6LWluZGV4OjE7aGVpZ2h0OjIycHg7cGFkZGluZzowIDEwcHg7YmFja2dyb3VuZDojMWU4N2YwO2NvbG9yOiNmZmY7Zm9udC1zaXplOi44NzVyZW07ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2xpbmUtaGVpZ2h0OjA7Ym9yZGVyLXJhZGl1czoycHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS51ay1jYXJkLWJhZGdlOmZpcnN0LWNoaWxkKyp7bWFyZ2luLXRvcDowfS51ay1jYXJkLWhvdmVyOm5vdCgudWstY2FyZC1kZWZhdWx0KTpub3QoLnVrLWNhcmQtcHJpbWFyeSk6bm90KC51ay1jYXJkLXNlY29uZGFyeSk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JveC1zaGFkb3c6MCAxNHB4IDI1cHggcmdiYSgwLDAsMCwuMTYpfS51ay1jYXJkLWRlZmF1bHR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiM2NjY7Ym94LXNoYWRvdzowIDVweCAxNXB4IHJnYmEoMCwwLDAsLjA4KX0udWstY2FyZC1kZWZhdWx0IC51ay1jYXJkLXRpdGxle2NvbG9yOiMzMzN9LnVrLWNhcmQtZGVmYXVsdC51ay1jYXJkLWhvdmVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2hhZG93OjAgMTRweCAyNXB4IHJnYmEoMCwwLDAsLjE2KX0udWstY2FyZC1kZWZhdWx0IC51ay1jYXJkLWhlYWRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU1fS51ay1jYXJkLWRlZmF1bHQgLnVrLWNhcmQtZm9vdGVye2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTV9LnVrLWNhcmQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiMxZTg3ZjA7Y29sb3I6I2ZmZjtib3gtc2hhZG93OjAgNXB4IDE1cHggcmdiYSgwLDAsMCwuMDgpfS51ay1jYXJkLXByaW1hcnkgLnVrLWNhcmQtdGl0bGV7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtaG92ZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMWU4N2YwO2JveC1zaGFkb3c6MCAxNHB4IDI1cHggcmdiYSgwLDAsMCwuMTYpfS51ay1jYXJkLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjI7Y29sb3I6I2ZmZjtib3gtc2hhZG93OjAgNXB4IDE1cHggcmdiYSgwLDAsMCwuMDgpfS51ay1jYXJkLXNlY29uZGFyeSAudWstY2FyZC10aXRsZXtjb2xvcjojZmZmfS51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWhvdmVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzIyMjtib3gtc2hhZG93OjAgMTRweCAyNXB4IHJnYmEoMCwwLDAsLjE2KX0udWstY2FyZC1zbWFsbCAudWstY2FyZC1ib2R5LC51ay1jYXJkLXNtYWxsLnVrLWNhcmQtYm9keXtwYWRkaW5nOjIwcHggMjBweH0udWstY2FyZC1zbWFsbCAudWstY2FyZC1oZWFkZXJ7cGFkZGluZzoxM3B4IDIwcHh9LnVrLWNhcmQtc21hbGwgLnVrLWNhcmQtZm9vdGVye3BhZGRpbmc6MTNweCAyMHB4fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LnVrLWNhcmQtbGFyZ2UgLnVrLWNhcmQtYm9keSwudWstY2FyZC1sYXJnZS51ay1jYXJkLWJvZHl7cGFkZGluZzo3MHB4IDcwcHh9LnVrLWNhcmQtbGFyZ2UgLnVrLWNhcmQtaGVhZGVye3BhZGRpbmc6MzVweCA3MHB4fS51ay1jYXJkLWxhcmdlIC51ay1jYXJkLWZvb3RlcntwYWRkaW5nOjM1cHggNzBweH19LnVrLWNhcmQtYm9keT4udWstbmF2LWRlZmF1bHR7bWFyZ2luLXJpZ2h0Oi0zMHB4O21hcmdpbi1sZWZ0Oi0zMHB4fS51ay1jYXJkLWJvZHk+LnVrLW5hdi1kZWZhdWx0Om9ubHktY2hpbGR7bWFyZ2luLXRvcDotMTVweDttYXJnaW4tYm90dG9tOi0xNXB4fS51ay1jYXJkLWJvZHk+LnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwudWstY2FyZC1ib2R5Pi51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwudWstY2FyZC1ib2R5Pi51ay1uYXYtZGVmYXVsdD5saT5he3BhZGRpbmctcmlnaHQ6MzBweDtwYWRkaW5nLWxlZnQ6MzBweH0udWstY2FyZC1ib2R5Pi51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YntwYWRkaW5nLXJpZ2h0OjQ1cHh9QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstY2FyZC1ib2R5Pi51ay1uYXYtZGVmYXVsdHttYXJnaW4tcmlnaHQ6LTQwcHg7bWFyZ2luLWxlZnQ6LTQwcHh9LnVrLWNhcmQtYm9keT4udWstbmF2LWRlZmF1bHQ6b25seS1jaGlsZHttYXJnaW4tdG9wOi0yNXB4O21hcmdpbi1ib3R0b206LTI1cHh9LnVrLWNhcmQtYm9keT4udWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyLC51ay1jYXJkLWJvZHk+LnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLC51ay1jYXJkLWJvZHk+LnVrLW5hdi1kZWZhdWx0PmxpPmF7cGFkZGluZy1yaWdodDo0MHB4O3BhZGRpbmctbGVmdDo0MHB4fS51ay1jYXJkLWJvZHk+LnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3Vie3BhZGRpbmctcmlnaHQ6NTVweH19LnVrLWNhcmQtc21hbGw+LnVrLW5hdi1kZWZhdWx0e21hcmdpbi1yaWdodDotMjBweDttYXJnaW4tbGVmdDotMjBweH0udWstY2FyZC1zbWFsbD4udWstbmF2LWRlZmF1bHQ6b25seS1jaGlsZHttYXJnaW4tdG9wOi01cHg7bWFyZ2luLWJvdHRvbTotNXB4fS51ay1jYXJkLXNtYWxsPi51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsLnVrLWNhcmQtc21hbGw+LnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLC51ay1jYXJkLXNtYWxsPi51ay1uYXYtZGVmYXVsdD5saT5he3BhZGRpbmctcmlnaHQ6MjBweDtwYWRkaW5nLWxlZnQ6MjBweH0udWstY2FyZC1zbWFsbD4udWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWJ7cGFkZGluZy1yaWdodDozNXB4fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LnVrLWNhcmQtbGFyZ2U+LnVrLW5hdi1kZWZhdWx0e21hcmdpbjowfS51ay1jYXJkLWxhcmdlPi51ay1uYXYtZGVmYXVsdDpvbmx5LWNoaWxke21hcmdpbjowfS51ay1jYXJkLWxhcmdlPi51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsLnVrLWNhcmQtbGFyZ2U+LnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLC51ay1jYXJkLWxhcmdlPi51ay1uYXYtZGVmYXVsdD5saT5he3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MH0udWstY2FyZC1sYXJnZT4udWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWJ7cGFkZGluZy1yaWdodDoxNXB4fX0udWstY2xvc2V7Y29sb3I6Izk5OTt0cmFuc2l0aW9uOi4xcyBlYXNlLWluLW91dDt0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLG9wYWNpdHl9LnVrLWNsb3NlOmhvdmVye2NvbG9yOiM2NjZ9LnVrLXNwaW5uZXI+KnthbmltYXRpb246dWstc3Bpbm5lci1yb3RhdGUgMS40cyBsaW5lYXIgaW5maW5pdGV9QGtleWZyYW1lcyB1ay1zcGlubmVyLXJvdGF0ZXswJXt0cmFuc2Zvcm06cm90YXRlKDApfTEwMCV7dHJhbnNmb3JtOnJvdGF0ZSgtMjcwZGVnKX19LnVrLXNwaW5uZXI+Kj4qe3N0cm9rZS1kYXNoYXJyYXk6ODhweDtzdHJva2UtZGFzaG9mZnNldDowO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO2FuaW1hdGlvbjp1ay1zcGlubmVyLWRhc2ggMS40cyBlYXNlLWluLW91dCBpbmZpbml0ZTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZH1Aa2V5ZnJhbWVzIHVrLXNwaW5uZXItZGFzaHswJXtzdHJva2UtZGFzaG9mZnNldDotODhweH01MCV7c3Ryb2tlLWRhc2hvZmZzZXQ6LTIycHg7dHJhbnNmb3JtOnJvdGF0ZSgtMTM1ZGVnKX0xMDAle3N0cm9rZS1kYXNob2Zmc2V0Oi04OHB4O3RyYW5zZm9ybTpyb3RhdGUoLTQ1MGRlZyl9fS51ay10b3RvcHtwYWRkaW5nOjVweDtjb2xvcjojOTk5O3RyYW5zaXRpb246Y29sb3IgLjFzIGVhc2UtaW4tb3V0fS51ay10b3RvcDpob3Zlcntjb2xvcjojNjY2fS51ay10b3RvcDphY3RpdmV7Y29sb3I6IzMzM30udWstbWFya2Vye3BhZGRpbmc6NXB4O2JhY2tncm91bmQ6IzIyMjtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6NTAwcHh9LnVrLW1hcmtlcjpob3Zlcntjb2xvcjojZmZmfS51ay1hbGVydHtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tYm90dG9tOjIwcHg7cGFkZGluZzoxNXB4IDE1cHggMTVweCAyOXB4O2JhY2tncm91bmQ6I2Y4ZjhmODtjb2xvcjojNjY2fSorLnVrLWFsZXJ0e21hcmdpbi10b3A6MjBweH0udWstYWxlcnQ+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1hbGVydC1jbG9zZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MjBweDtsZWZ0OjE1cHg7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi40fS51ay1hbGVydC1jbG9zZTpmaXJzdC1jaGlsZCsqe21hcmdpbi10b3A6MH0udWstYWxlcnQtY2xvc2U6aG92ZXJ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi44fS51ay1hbGVydC1wcmltYXJ5e2JhY2tncm91bmQ6I2Q4ZWFmYztjb2xvcjojMWU4N2YwfS51ay1hbGVydC1zdWNjZXNze2JhY2tncm91bmQ6I2VkZmJmNjtjb2xvcjojMzJkMjk2fS51ay1hbGVydC13YXJuaW5ne2JhY2tncm91bmQ6I2ZmZjZlZTtjb2xvcjojZmFhMDVhfS51ay1hbGVydC1kYW5nZXJ7YmFja2dyb3VuZDojZmVmNGY2O2NvbG9yOiNmMDUwNmV9LnVrLWFsZXJ0IGgxLC51ay1hbGVydCBoMiwudWstYWxlcnQgaDMsLnVrLWFsZXJ0IGg0LC51ay1hbGVydCBoNSwudWstYWxlcnQgaDZ7Y29sb3I6aW5oZXJpdH0udWstYWxlcnQgYTpub3QoW2NsYXNzXSl7Y29sb3I6aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS51ay1hbGVydCBhOm5vdChbY2xhc3NdKTpob3Zlcntjb2xvcjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LnVrLXBsYWNlaG9sZGVye21hcmdpbi1ib3R0b206MjBweDtwYWRkaW5nOjMwcHggMzBweDtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MXB4IGRhc2hlZCAjZTVlNWU1fSorLnVrLXBsYWNlaG9sZGVye21hcmdpbi10b3A6MjBweH0udWstcGxhY2Vob2xkZXI+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1iYWRnZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7cGFkZGluZzowIDVweDtib3JkZXItcmFkaXVzOjUwMHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtiYWNrZ3JvdW5kOiMxZTg3ZjA7Y29sb3I6I2ZmZiFpbXBvcnRhbnQ7Zm9udC1zaXplOjExcHg7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtsaW5lLWhlaWdodDowfS51ay1iYWRnZTpob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzowIDEwcHg7YmFja2dyb3VuZDojMWU4N2YwO2xpbmUtaGVpZ2h0OjEuNTtmb250LXNpemU6Ljg3NXJlbTtjb2xvcjojZmZmO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aGl0ZS1zcGFjZTpub3dyYXA7Ym9yZGVyLXJhZGl1czoycHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS51ay1sYWJlbC1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6IzMyZDI5Njtjb2xvcjojZmZmfS51ay1sYWJlbC13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2ZhYTA1YTtjb2xvcjojZmZmfS51ay1sYWJlbC1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojZjA1MDZlO2NvbG9yOiNmZmZ9LnVrLW92ZXJsYXl7cGFkZGluZzozMHB4IDMwcHh9LnVrLW92ZXJsYXk+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1vdmVybGF5LWRlZmF1bHR7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC44KX0udWstb3ZlcmxheS1wcmltYXJ5e2JhY2tncm91bmQ6cmdiYSgzNCwzNCwzNCwuOCl9LnVrLWFydGljbGV7ZGlzcGxheTpmbG93LXJvb3R9LnVrLWFydGljbGU+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1hcnRpY2xlKy51ay1hcnRpY2xle21hcmdpbi10b3A6NzBweH0udWstYXJ0aWNsZS10aXRsZXtmb250LXNpemU6Mi4yMzEyNXJlbTtsaW5lLWhlaWdodDoxLjJ9QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1hcnRpY2xlLXRpdGxle2ZvbnQtc2l6ZToyLjYyNXJlbX19LnVrLWFydGljbGUtbWV0YXtmb250LXNpemU6Ljg3NXJlbTtsaW5lLWhlaWdodDoxLjQ7Y29sb3I6Izk5OX0udWstYXJ0aWNsZS1tZXRhIGF7Y29sb3I6Izk5OX0udWstYXJ0aWNsZS1tZXRhIGE6aG92ZXJ7Y29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstY29tbWVudC1ib2R5e2Rpc3BsYXk6Zmxvdy1yb290O292ZXJmbG93LXdyYXA6YnJlYWstd29yZDt3b3JkLXdyYXA6YnJlYWstd29yZH0udWstY29tbWVudC1oZWFkZXJ7ZGlzcGxheTpmbG93LXJvb3Q7bWFyZ2luLWJvdHRvbToyMHB4fS51ay1jb21tZW50LWJvZHk+Omxhc3QtY2hpbGQsLnVrLWNvbW1lbnQtaGVhZGVyPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstY29tbWVudC10aXRsZXtmb250LXNpemU6MS4yNXJlbTtsaW5lLWhlaWdodDoxLjR9LnVrLWNvbW1lbnQtbWV0YXtmb250LXNpemU6Ljg3NXJlbTtsaW5lLWhlaWdodDoxLjQ7Y29sb3I6Izk5OX0udWstY29tbWVudC1saXN0e3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5vbmV9LnVrLWNvbW1lbnQtbGlzdD46bnRoLWNoaWxkKG4rMil7bWFyZ2luLXRvcDo3MHB4fS51ay1jb21tZW50LWxpc3QgLnVrLWNvbW1lbnR+dWx7bWFyZ2luOjcwcHggMCAwIDA7cGFkZGluZy1yaWdodDozMHB4O2xpc3Qtc3R5bGU6bm9uZX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWNvbW1lbnQtbGlzdCAudWstY29tbWVudH51bHtwYWRkaW5nLXJpZ2h0OjEwMHB4fX0udWstY29tbWVudC1saXN0IC51ay1jb21tZW50fnVsPjpudGgtY2hpbGQobisyKXttYXJnaW4tdG9wOjcwcHh9LnVrLWNvbW1lbnQtcHJpbWFyeXtwYWRkaW5nOjMwcHg7YmFja2dyb3VuZC1jb2xvcjojZjhmOGY4fS51ay1zZWFyY2h7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7bWF4LXdpZHRoOjEwMCU7bWFyZ2luOjB9LnVrLXNlYXJjaC1pbnB1dDo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwudWstc2VhcmNoLWlucHV0Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfS51ay1zZWFyY2gtaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXJ7b3BhY2l0eToxfS51ay1zZWFyY2gtaW5wdXR7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO2JvcmRlci1yYWRpdXM6MDtmb250OmluaGVyaXQ7b3ZlcmZsb3c6dmlzaWJsZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6MTAwJTtib3JkZXI6bm9uZTtjb2xvcjojNjY2fS51ay1zZWFyY2gtaW5wdXQ6Zm9jdXN7b3V0bGluZTowfS51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVye2NvbG9yOiM5OTl9LnVrLXNlYXJjaCAudWstc2VhcmNoLWljb257cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MDtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOiM5OTl9LnVrLXNlYXJjaCAudWstc2VhcmNoLWljb246aG92ZXJ7Y29sb3I6Izk5OX0udWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbjpub3QoYSk6bm90KGJ1dHRvbik6bm90KGlucHV0KXtwb2ludGVyLWV2ZW50czpub25lfS51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLWZsaXB7bGVmdDowO3JpZ2h0OmF1dG99LnVrLXNlYXJjaC1kZWZhdWx0e3dpZHRoOjI0MHB4fS51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0e2hlaWdodDo0MHB4O3BhZGRpbmctcmlnaHQ6MTBweDtwYWRkaW5nLWxlZnQ6MTBweDtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MXB4IHNvbGlkICNlNWU1ZTV9LnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2JvcmRlci1jb2xvcjojMWU4N2YwfS51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWljb257d2lkdGg6NDBweH0udWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pY29uOm5vdCgudWstc2VhcmNoLWljb24tZmxpcCl+LnVrLXNlYXJjaC1pbnB1dHtwYWRkaW5nLXJpZ2h0OjQwcHh9LnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaWNvbi1mbGlwfi51ay1zZWFyY2gtaW5wdXR7cGFkZGluZy1sZWZ0OjQwcHh9LnVrLXNlYXJjaC1uYXZiYXJ7d2lkdGg6NDAwcHh9LnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pbnB1dHtoZWlnaHQ6NDBweDtiYWNrZ3JvdW5kOjAgMDtmb250LXNpemU6MS41cmVtfS51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaWNvbnt3aWR0aDo0MHB4fS51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaWNvbjpub3QoLnVrLXNlYXJjaC1pY29uLWZsaXApfi51ay1zZWFyY2gtaW5wdXR7cGFkZGluZy1yaWdodDo0MHB4fS51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaWNvbi1mbGlwfi51ay1zZWFyY2gtaW5wdXR7cGFkZGluZy1sZWZ0OjQwcHh9LnVrLXNlYXJjaC1sYXJnZXt3aWR0aDo1MDBweH0udWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaW5wdXR7aGVpZ2h0OjgwcHg7YmFja2dyb3VuZDowIDA7Zm9udC1zaXplOjIuNjI1cmVtfS51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pY29ue3dpZHRoOjgwcHh9LnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWljb246bm90KC51ay1zZWFyY2gtaWNvbi1mbGlwKX4udWstc2VhcmNoLWlucHV0e3BhZGRpbmctcmlnaHQ6ODBweH0udWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaWNvbi1mbGlwfi51ay1zZWFyY2gtaW5wdXR7cGFkZGluZy1sZWZ0OjgwcHh9LnVrLXNlYXJjaC10b2dnbGV7Y29sb3I6Izk5OX0udWstc2VhcmNoLXRvZ2dsZTpob3Zlcntjb2xvcjojNjY2fS51ay1hY2NvcmRpb257cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZX0udWstYWNjb3JkaW9uPjpudGgtY2hpbGQobisyKXttYXJnaW4tdG9wOjIwcHh9LnVrLWFjY29yZGlvbi10aXRsZXtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxLjI1cmVtO2xpbmUtaGVpZ2h0OjEuNDtjb2xvcjojMzMzO292ZXJmbG93OmhpZGRlbn0udWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmV7Y29udGVudDoiIjt3aWR0aDoxLjRlbTtoZWlnaHQ6MS40ZW07bWFyZ2luLXJpZ2h0OjEwcHg7ZmxvYXQ6bGVmdDtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxMyUyMiUyMGhlaWdodCUzRCUyMjEzJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTMlMjAxMyUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM2NjYlMjIlMjB3aWR0aCUzRCUyMjEzJTIyJTIwaGVpZ2h0JTNEJTIyMSUyMiUyMHglM0QlMjIwJTIyJTIweSUzRCUyMjYlMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyMzY2NiUyMiUyMHdpZHRoJTNEJTIyMSUyMiUyMGhlaWdodCUzRCUyMjEzJTIyJTIweCUzRCUyMjYlMjIlMjB5JTNEJTIyMCUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJSA1MCV9LnVrLW9wZW4+LnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3Jle2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjEzJTIyJTIwaGVpZ2h0JTNEJTIyMTMlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMyUyMDEzJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyMzY2NiUyMiUyMHdpZHRoJTNEJTIyMTMlMjIlMjBoZWlnaHQlM0QlMjIxJTIyJTIweCUzRCUyMjAlMjIlMjB5JTNEJTIyNiUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpfS51ay1hY2NvcmRpb24tdGl0bGU6aG92ZXJ7Y29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstYWNjb3JkaW9uLWNvbnRlbnR7ZGlzcGxheTpmbG93LXJvb3Q7bWFyZ2luLXRvcDoyMHB4fS51ay1hY2NvcmRpb24tY29udGVudD46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLWRyb3B7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAyMDstLXVrLXBvc2l0aW9uLW9mZnNldDoyMHB4Oy0tdWstcG9zaXRpb24tdmlld3BvcnQtb2Zmc2V0OjE1cHg7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjMwMHB4fS51ay1kcm9wLnVrLW9wZW57ZGlzcGxheTpibG9ja30udWstZHJvcC1zdGFjayAudWstZHJvcC1ncmlkPip7d2lkdGg6MTAwJSFpbXBvcnRhbnR9LnVrLWRyb3Bkb3due2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMjA7LS11ay1wb3NpdGlvbi1vZmZzZXQ6MTBweDstLXVrLXBvc2l0aW9uLXZpZXdwb3J0LW9mZnNldDoxNXB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDttaW4td2lkdGg6MjAwcHg7cGFkZGluZzoyNXB4O2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojNjY2O2JveC1zaGFkb3c6MCA1cHggMTJweCByZ2JhKDAsMCwwLC4xNSl9LnVrLWRyb3Bkb3duLnVrLW9wZW57ZGlzcGxheTpibG9ja30udWstZHJvcGRvd24+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1kcm9wZG93bi1sYXJnZXtwYWRkaW5nOjQwcHh9LnVrLWRyb3Bkb3duLW5hdntmb250LXNpemU6Ljg3NXJlbX0udWstZHJvcGRvd24tbmF2PmxpPmF7Y29sb3I6Izk5OX0udWstZHJvcGRvd24tbmF2PmxpLnVrLWFjdGl2ZT5hLC51ay1kcm9wZG93bi1uYXY+bGk+YTpob3Zlcntjb2xvcjojNjY2fS51ay1kcm9wZG93bi1uYXYgLnVrLW5hdi1zdWJ0aXRsZXtmb250LXNpemU6MTJweH0udWstZHJvcGRvd24tbmF2IC51ay1uYXYtaGVhZGVye2NvbG9yOiMzMzN9LnVrLWRyb3Bkb3duLW5hdiAudWstbmF2LWRpdmlkZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNX0udWstZHJvcGRvd24tbmF2IC51ay1uYXYtc3ViIGF7Y29sb3I6Izk5OX0udWstZHJvcGRvd24tbmF2IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLWRyb3Bkb3duLW5hdiAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YXtjb2xvcjojNjY2fS51ay1kcm9wZG93bi1zdGFjayAudWstZHJvcGRvd24tZ3JpZD4qe3dpZHRoOjEwMCUhaW1wb3J0YW50fS51ay1kcm9wYmFyey0tdWstcG9zaXRpb24tb2Zmc2V0OjA7LS11ay1wb3NpdGlvbi1zaGlmdC1vZmZzZXQ6MDstLXVrLXBvc2l0aW9uLXZpZXdwb3J0LW9mZnNldDowO2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMjA7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MjVweCAxNXB4IDI1cHggMTVweDtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzY2Nn0udWstZHJvcGJhci51ay1vcGVue2Rpc3BsYXk6YmxvY2t9LnVrLWRyb3BiYXI+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstZHJvcGJhcntwYWRkaW5nLXJpZ2h0OjMwcHg7cGFkZGluZy1sZWZ0OjMwcHh9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstZHJvcGJhcntwYWRkaW5nLXJpZ2h0OjQwcHg7cGFkZGluZy1sZWZ0OjQwcHh9fS51ay1kcm9wYmFyLWxhcmdle3BhZGRpbmctdG9wOjQwcHg7cGFkZGluZy1ib3R0b206NDBweH0udWstZHJvcGJhci10b3B7Ym94LXNoYWRvdzowIDEycHggN3B4IC02cHggcmdiYSgwLDAsMCwuMDUpfS51ay1kcm9wYmFyLWJvdHRvbXtib3gtc2hhZG93OjAgLTEycHggN3B4IC02cHggcmdiYSgwLDAsMCwuMDUpfS51ay1kcm9wYmFyLXJpZ2h0e2JveC1zaGFkb3c6LTEycHggMCA3cHggLTZweCByZ2JhKDAsMCwwLC4wNSl9LnVrLWRyb3BiYXItbGVmdHtib3gtc2hhZG93OjEycHggMCA3cHggLTZweCByZ2JhKDAsMCwwLC4wNSl9LnVrLW1vZGFse2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MDt6LWluZGV4OjEwMTA7b3ZlcmZsb3cteTphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO3BhZGRpbmc6MTVweCAxNXB4O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuNik7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcn1AbWVkaWEgKG1pbi13aWR0aDo2NDBweCl7LnVrLW1vZGFse3BhZGRpbmc6NTBweCAzMHB4fX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLW1vZGFse3BhZGRpbmctcmlnaHQ6NDBweDtwYWRkaW5nLWxlZnQ6NDBweH19LnVrLW1vZGFsLnVrLW9wZW57b3BhY2l0eToxfS51ay1tb2RhbC1wYWdle292ZXJmbG93OmhpZGRlbn0udWstbW9kYWwtZGlhbG9ne3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MCBhdXRvO3dpZHRoOjYwMHB4O21heC13aWR0aDoxMDAlIWltcG9ydGFudDtiYWNrZ3JvdW5kOiNmZmY7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDBweCk7dHJhbnNpdGlvbjouM3MgbGluZWFyO3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eSx0cmFuc2Zvcm19LnVrLW9wZW4+LnVrLW1vZGFsLWRpYWxvZ3tvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCl9LnVrLW1vZGFsLWNvbnRhaW5lciAudWstbW9kYWwtZGlhbG9ne3dpZHRoOjEyMDBweH0udWstbW9kYWwtZnVsbHtwYWRkaW5nOjA7YmFja2dyb3VuZDowIDB9LnVrLW1vZGFsLWZ1bGwgLnVrLW1vZGFsLWRpYWxvZ3ttYXJnaW46MDt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApfS51ay1tb2RhbC1ib2R5e2Rpc3BsYXk6Zmxvdy1yb290O3BhZGRpbmc6MjBweCAyMHB4fS51ay1tb2RhbC1oZWFkZXJ7ZGlzcGxheTpmbG93LXJvb3Q7cGFkZGluZzoxMHB4IDIwcHg7YmFja2dyb3VuZDojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNWU1ZTV9LnVrLW1vZGFsLWZvb3RlcntkaXNwbGF5OmZsb3ctcm9vdDtwYWRkaW5nOjEwcHggMjBweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNX1AbWVkaWEgKG1pbi13aWR0aDo2NDBweCl7LnVrLW1vZGFsLWJvZHl7cGFkZGluZzozMHB4IDMwcHh9LnVrLW1vZGFsLWhlYWRlcntwYWRkaW5nOjE1cHggMzBweH0udWstbW9kYWwtZm9vdGVye3BhZGRpbmc6MTVweCAzMHB4fX0udWstbW9kYWwtYm9keT46bGFzdC1jaGlsZCwudWstbW9kYWwtZm9vdGVyPjpsYXN0LWNoaWxkLC51ay1tb2RhbC1oZWFkZXI+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1tb2RhbC10aXRsZXtmb250LXNpemU6MnJlbTtsaW5lLWhlaWdodDoxLjN9W2NsYXNzKj11ay1tb2RhbC1jbG9zZS1de3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAxMDt0b3A6MTBweDtsZWZ0OjEwcHg7cGFkZGluZzo1cHh9W2NsYXNzKj11ay1tb2RhbC1jbG9zZS1dOmZpcnN0LWNoaWxkKyp7bWFyZ2luLXRvcDowfS51ay1tb2RhbC1jbG9zZS1vdXRzaWRle3RvcDowO2xlZnQ6LTVweDt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsLTEwMCUpO2NvbG9yOiNmZmZ9LnVrLW1vZGFsLWNsb3NlLW91dHNpZGU6aG92ZXJ7Y29sb3I6I2ZmZn1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLW1vZGFsLWNsb3NlLW91dHNpZGV7bGVmdDowO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTEwMCUsLTEwMCUpfX0udWstbW9kYWwtY2xvc2UtZnVsbHt0b3A6MDtsZWZ0OjA7cGFkZGluZzoyMHB4O2JhY2tncm91bmQ6I2ZmZn0udWstc2xpZGVzaG93ey13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0udWstc2xpZGVzaG93LWl0ZW1ze3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MDttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lO292ZXJmbG93OmhpZGRlbjstd2Via2l0LXRvdWNoLWNhbGxvdXQ6bm9uZTt0b3VjaC1hY3Rpb246cGFuLXl9LnVrLXNsaWRlc2hvdy1pdGVtcz4qe3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjA7bGVmdDowO2JvdHRvbTowO292ZXJmbG93OmhpZGRlbjt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sb3BhY2l0eX0udWstc2xpZGVzaG93LWl0ZW1zPjpub3QoLnVrLWFjdGl2ZSl7ZGlzcGxheTpub25lfS51ay1zbGlkZXJ7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fS51ay1zbGlkZXItY29udGFpbmVye292ZXJmbG93OmhpZGRlbn0udWstc2xpZGVyLWNvbnRhaW5lci1vZmZzZXR7bWFyZ2luOi0xMXB4IC0yNXB4IC0zOXB4IC0yNXB4O3BhZGRpbmc6MTFweCAyNXB4IDM5cHggMjVweH0udWstc2xpZGVyLWl0ZW1ze3dpbGwtY2hhbmdlOnRyYW5zZm9ybTtwb3NpdGlvbjpyZWxhdGl2ZTt0b3VjaC1hY3Rpb246cGFuLXl9LnVrLXNsaWRlci1pdGVtczpub3QoLnVrLWdyaWQpe2Rpc3BsYXk6ZmxleDttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lOy13ZWJraXQtdG91Y2gtY2FsbG91dDpub25lfS51ay1zbGlkZXItaXRlbXMudWstZ3JpZHtmbGV4LXdyYXA6bm93cmFwfS51ay1zbGlkZXItaXRlbXM+KntmbGV4Om5vbmU7bWF4LXdpZHRoOjEwMCU7cG9zaXRpb246cmVsYXRpdmV9LnVrLXN0aWNreXtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5nOmJvcmRlci1ib3h9LnVrLXN0aWNreS1maXhlZHt6LWluZGV4Ojk4MDttYXJnaW46MCFpbXBvcnRhbnQ7LXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbn0udWstc3RpY2t5W2NsYXNzKj11ay1hbmltYXRpb24tXXthbmltYXRpb24tZHVyYXRpb246LjJzfS51ay1zdGlja3kudWstYW5pbWF0aW9uLXJldmVyc2V7YW5pbWF0aW9uLWR1cmF0aW9uOi4yc30udWstc3RpY2t5LXBsYWNlaG9sZGVye3BvaW50ZXItZXZlbnRzOm5vbmV9LnVrLW9mZmNhbnZhc3tkaXNwbGF5Om5vbmU7cG9zaXRpb246Zml4ZWQ7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MDt6LWluZGV4OjEwMDB9LnVrLW9mZmNhbnZhcy1mbGlwIC51ay1vZmZjYW52YXN7bGVmdDowO3JpZ2h0OmF1dG99LnVrLW9mZmNhbnZhcy1iYXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6LTI3MHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoyNzBweDtwYWRkaW5nOjIwcHggMjBweDtiYWNrZ3JvdW5kOiMyMjI7b3ZlcmZsb3cteTphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstb2ZmY2FudmFzLWJhcntyaWdodDotMzUwcHg7d2lkdGg6MzUwcHg7cGFkZGluZzozMHB4IDMwcHh9fS51ay1vZmZjYW52YXMtZmxpcCAudWstb2ZmY2FudmFzLWJhcntyaWdodDphdXRvO2xlZnQ6LTI3MHB4fUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstb2ZmY2FudmFzLWZsaXAgLnVrLW9mZmNhbnZhcy1iYXJ7bGVmdDotMzUwcHh9fS51ay1vcGVuPi51ay1vZmZjYW52YXMtYmFye3JpZ2h0OjB9LnVrLW9mZmNhbnZhcy1mbGlwIC51ay1vcGVuPi51ay1vZmZjYW52YXMtYmFye3JpZ2h0OmF1dG87bGVmdDowfS51ay1vZmZjYW52YXMtYmFyLWFuaW1hdGlvbnt0cmFuc2l0aW9uOnJpZ2h0IC4zcyBlYXNlLW91dH0udWstb2ZmY2FudmFzLWZsaXAgLnVrLW9mZmNhbnZhcy1iYXItYW5pbWF0aW9ue3RyYW5zaXRpb24tcHJvcGVydHk6bGVmdH0udWstb2ZmY2FudmFzLXJldmVhbHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO3dpZHRoOjA7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zaXRpb246d2lkdGggLjNzIGVhc2Utb3V0fS51ay1vZmZjYW52YXMtcmV2ZWFsIC51ay1vZmZjYW52YXMtYmFye3JpZ2h0OjB9LnVrLW9mZmNhbnZhcy1mbGlwIC51ay1vZmZjYW52YXMtcmV2ZWFsIC51ay1vZmZjYW52YXMtYmFye3JpZ2h0OmF1dG87bGVmdDowfS51ay1vcGVuPi51ay1vZmZjYW52YXMtcmV2ZWFse3dpZHRoOjI3MHB4fUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstb3Blbj4udWstb2ZmY2FudmFzLXJldmVhbHt3aWR0aDozNTBweH19LnVrLW9mZmNhbnZhcy1mbGlwIC51ay1vZmZjYW52YXMtcmV2ZWFse2xlZnQ6MDtyaWdodDphdXRvfS51ay1vZmZjYW52YXMtY2xvc2V7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO3RvcDo1cHg7bGVmdDo1cHg7cGFkZGluZzo1cHh9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1vZmZjYW52YXMtY2xvc2V7dG9wOjEwcHg7bGVmdDoxMHB4fX0udWstb2ZmY2FudmFzLWNsb3NlOmZpcnN0LWNoaWxkKyp7bWFyZ2luLXRvcDowfS51ay1vZmZjYW52YXMtb3ZlcmxheXt3aWR0aDoxMDB2dzt0b3VjaC1hY3Rpb246bm9uZX0udWstb2ZmY2FudmFzLW92ZXJsYXk6OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMSk7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcn0udWstb2ZmY2FudmFzLW92ZXJsYXkudWstb3Blbjo6YmVmb3Jle29wYWNpdHk6MX0udWstb2ZmY2FudmFzLWNvbnRhaW5lciwudWstb2ZmY2FudmFzLXBhZ2V7b3ZlcmZsb3cteDpoaWRkZW59LnVrLW9mZmNhbnZhcy1jb250YWluZXJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MDt0cmFuc2l0aW9uOnJpZ2h0IC4zcyBlYXNlLW91dDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJX06bm90KC51ay1vZmZjYW52YXMtZmxpcCkudWstb2ZmY2FudmFzLWNvbnRhaW5lci1hbmltYXRpb257cmlnaHQ6MjcwcHh9LnVrLW9mZmNhbnZhcy1mbGlwLnVrLW9mZmNhbnZhcy1jb250YWluZXItYW5pbWF0aW9ue3JpZ2h0Oi0yNzBweH1AbWVkaWEgKG1pbi13aWR0aDo2NDBweCl7Om5vdCgudWstb2ZmY2FudmFzLWZsaXApLnVrLW9mZmNhbnZhcy1jb250YWluZXItYW5pbWF0aW9ue3JpZ2h0OjM1MHB4fS51ay1vZmZjYW52YXMtZmxpcC51ay1vZmZjYW52YXMtY29udGFpbmVyLWFuaW1hdGlvbntyaWdodDotMzUwcHh9fS51ay1zd2l0Y2hlcnttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS51ay1zd2l0Y2hlcj46bm90KC51ay1hY3RpdmUpe2Rpc3BsYXk6bm9uZX0udWstc3dpdGNoZXI+Kj46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLWxlYWRlcntvdmVyZmxvdzpoaWRkZW59LnVrLWxlYWRlci1maWxsOjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTVweDt3aWR0aDowO2NvbnRlbnQ6YXR0cihkYXRhLWZpbGwpO3doaXRlLXNwYWNlOm5vd3JhcH0udWstbGVhZGVyLWZpbGwudWstbGVhZGVyLWhpZGU6OmFmdGVye2Rpc3BsYXk6bm9uZX06cm9vdHstLXVrLWxlYWRlci1maWxsLWNvbnRlbnQ6Ln0udWstbm90aWZpY2F0aW9ue3Bvc2l0aW9uOmZpeGVkO3RvcDoxMHB4O3JpZ2h0OjEwcHg7ei1pbmRleDoxMDQwO2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDozNTBweH0udWstbm90aWZpY2F0aW9uLWJvdHRvbS1sZWZ0LC51ay1ub3RpZmljYXRpb24tdG9wLWxlZnR7cmlnaHQ6YXV0bztsZWZ0OjEwcHh9LnVrLW5vdGlmaWNhdGlvbi1ib3R0b20tY2VudGVyLC51ay1ub3RpZmljYXRpb24tdG9wLWNlbnRlcntyaWdodDo1MCU7bWFyZ2luLXJpZ2h0Oi0xNzVweH0udWstbm90aWZpY2F0aW9uLWJvdHRvbS1jZW50ZXIsLnVrLW5vdGlmaWNhdGlvbi1ib3R0b20tbGVmdCwudWstbm90aWZpY2F0aW9uLWJvdHRvbS1yaWdodHt0b3A6YXV0bztib3R0b206MTBweH1AbWVkaWEgKG1heC13aWR0aDo2MzlweCl7LnVrLW5vdGlmaWNhdGlvbntyaWdodDoxMHB4O2xlZnQ6MTBweDt3aWR0aDphdXRvO21hcmdpbjowfX0udWstbm90aWZpY2F0aW9uLW1lc3NhZ2V7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzoxNXB4O2JhY2tncm91bmQ6I2Y4ZjhmODtjb2xvcjojNjY2O2ZvbnQtc2l6ZToxLjI1cmVtO2xpbmUtaGVpZ2h0OjEuNDtjdXJzb3I6cG9pbnRlcn0qKy51ay1ub3RpZmljYXRpb24tbWVzc2FnZXttYXJnaW4tdG9wOjEwcHh9LnVrLW5vdGlmaWNhdGlvbi1jbG9zZXtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjIwcHg7bGVmdDoxNXB4fS51ay1ub3RpZmljYXRpb24tbWVzc2FnZTpob3ZlciAudWstbm90aWZpY2F0aW9uLWNsb3Nle2Rpc3BsYXk6YmxvY2t9LnVrLW5vdGlmaWNhdGlvbi1tZXNzYWdlLXByaW1hcnl7Y29sb3I6IzFlODdmMH0udWstbm90aWZpY2F0aW9uLW1lc3NhZ2Utc3VjY2Vzc3tjb2xvcjojMzJkMjk2fS51ay1ub3RpZmljYXRpb24tbWVzc2FnZS13YXJuaW5ne2NvbG9yOiNmYWEwNWF9LnVrLW5vdGlmaWNhdGlvbi1tZXNzYWdlLWRhbmdlcntjb2xvcjojZjA1MDZlfS51ay10b29sdGlwe2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMzA7LS11ay1wb3NpdGlvbi1vZmZzZXQ6MTBweDstLXVrLXBvc2l0aW9uLXZpZXdwb3J0LW9mZnNldDoxMDt0b3A6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWF4LXdpZHRoOjIwMHB4O3BhZGRpbmc6M3B4IDZweDtiYWNrZ3JvdW5kOiM2NjY7Ym9yZGVyLXJhZGl1czoycHg7Y29sb3I6I2ZmZjtmb250LXNpemU6MTJweH0udWstdG9vbHRpcC51ay1hY3RpdmV7ZGlzcGxheTpibG9ja30udWstc29ydGFibGV7cG9zaXRpb246cmVsYXRpdmV9LnVrLXNvcnRhYmxlPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstc29ydGFibGUtZHJhZ3twb3NpdGlvbjpmaXhlZCFpbXBvcnRhbnQ7ei1pbmRleDoxMDUwIWltcG9ydGFudDtwb2ludGVyLWV2ZW50czpub25lfS51ay1zb3J0YWJsZS1wbGFjZWhvbGRlcntvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZX0udWstc29ydGFibGUtZW1wdHl7bWluLWhlaWdodDo1MHB4fS51ay1zb3J0YWJsZS1oYW5kbGU6aG92ZXJ7Y3Vyc29yOm1vdmV9LnVrLWNvdW50ZG93bi1udW1iZXJ7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zO2ZvbnQtc2l6ZToycmVtO2xpbmUtaGVpZ2h0Oi44fUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstY291bnRkb3duLW51bWJlcntmb250LXNpemU6NHJlbX19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1jb3VudGRvd24tbnVtYmVye2ZvbnQtc2l6ZTo2cmVtfX0udWstY291bnRkb3duLXNlcGFyYXRvcntmb250LXNpemU6MXJlbTtsaW5lLWhlaWdodDoxLjZ9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1jb3VudGRvd24tc2VwYXJhdG9ye2ZvbnQtc2l6ZToycmVtfX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWNvdW50ZG93bi1zZXBhcmF0b3J7Zm9udC1zaXplOjNyZW19fS51ay1ncmlke2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS51ay1ncmlkPip7bWFyZ2luOjB9LnVrLWdyaWQ+Kj46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLWdyaWR7bWFyZ2luLXJpZ2h0Oi0zMHB4fS51ay1ncmlkPip7cGFkZGluZy1yaWdodDozMHB4fSorLnVrLWdyaWQtbWFyZ2luLC51ay1ncmlkKy51ay1ncmlkLC51ay1ncmlkPi51ay1ncmlkLW1hcmdpbnttYXJnaW4tdG9wOjMwcHh9QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstZ3JpZHttYXJnaW4tcmlnaHQ6LTQwcHh9LnVrLWdyaWQ+KntwYWRkaW5nLXJpZ2h0OjQwcHh9KisudWstZ3JpZC1tYXJnaW4sLnVrLWdyaWQrLnVrLWdyaWQsLnVrLWdyaWQ+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6NDBweH19LnVrLWdyaWQtY29sdW1uLXNtYWxsLC51ay1ncmlkLXNtYWxse21hcmdpbi1yaWdodDotMTVweH0udWstZ3JpZC1jb2x1bW4tc21hbGw+KiwudWstZ3JpZC1zbWFsbD4qe3BhZGRpbmctcmlnaHQ6MTVweH0qKy51ay1ncmlkLW1hcmdpbi1zbWFsbCwudWstZ3JpZCsudWstZ3JpZC1yb3ctc21hbGwsLnVrLWdyaWQrLnVrLWdyaWQtc21hbGwsLnVrLWdyaWQtcm93LXNtYWxsPi51ay1ncmlkLW1hcmdpbiwudWstZ3JpZC1zbWFsbD4udWstZ3JpZC1tYXJnaW57bWFyZ2luLXRvcDoxNXB4fS51ay1ncmlkLWNvbHVtbi1tZWRpdW0sLnVrLWdyaWQtbWVkaXVte21hcmdpbi1yaWdodDotMzBweH0udWstZ3JpZC1jb2x1bW4tbWVkaXVtPiosLnVrLWdyaWQtbWVkaXVtPip7cGFkZGluZy1yaWdodDozMHB4fSorLnVrLWdyaWQtbWFyZ2luLW1lZGl1bSwudWstZ3JpZCsudWstZ3JpZC1tZWRpdW0sLnVrLWdyaWQrLnVrLWdyaWQtcm93LW1lZGl1bSwudWstZ3JpZC1tZWRpdW0+LnVrLWdyaWQtbWFyZ2luLC51ay1ncmlkLXJvdy1tZWRpdW0+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6MzBweH0udWstZ3JpZC1jb2x1bW4tbGFyZ2UsLnVrLWdyaWQtbGFyZ2V7bWFyZ2luLXJpZ2h0Oi00MHB4fS51ay1ncmlkLWNvbHVtbi1sYXJnZT4qLC51ay1ncmlkLWxhcmdlPip7cGFkZGluZy1yaWdodDo0MHB4fSorLnVrLWdyaWQtbWFyZ2luLWxhcmdlLC51ay1ncmlkKy51ay1ncmlkLWxhcmdlLC51ay1ncmlkKy51ay1ncmlkLXJvdy1sYXJnZSwudWstZ3JpZC1sYXJnZT4udWstZ3JpZC1tYXJnaW4sLnVrLWdyaWQtcm93LWxhcmdlPi51ay1ncmlkLW1hcmdpbnttYXJnaW4tdG9wOjQwcHh9QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstZ3JpZC1jb2x1bW4tbGFyZ2UsLnVrLWdyaWQtbGFyZ2V7bWFyZ2luLXJpZ2h0Oi03MHB4fS51ay1ncmlkLWNvbHVtbi1sYXJnZT4qLC51ay1ncmlkLWxhcmdlPip7cGFkZGluZy1yaWdodDo3MHB4fSorLnVrLWdyaWQtbWFyZ2luLWxhcmdlLC51ay1ncmlkKy51ay1ncmlkLWxhcmdlLC51ay1ncmlkKy51ay1ncmlkLXJvdy1sYXJnZSwudWstZ3JpZC1sYXJnZT4udWstZ3JpZC1tYXJnaW4sLnVrLWdyaWQtcm93LWxhcmdlPi51ay1ncmlkLW1hcmdpbnttYXJnaW4tdG9wOjcwcHh9fS51ay1ncmlkLWNvbGxhcHNlLC51ay1ncmlkLWNvbHVtbi1jb2xsYXBzZXttYXJnaW4tcmlnaHQ6MH0udWstZ3JpZC1jb2xsYXBzZT4qLC51ay1ncmlkLWNvbHVtbi1jb2xsYXBzZT4qe3BhZGRpbmctcmlnaHQ6MH0udWstZ3JpZCsudWstZ3JpZC1jb2xsYXBzZSwudWstZ3JpZCsudWstZ3JpZC1yb3ctY29sbGFwc2UsLnVrLWdyaWQtY29sbGFwc2U+LnVrLWdyaWQtbWFyZ2luLC51ay1ncmlkLXJvdy1jb2xsYXBzZT4udWstZ3JpZC1tYXJnaW57bWFyZ2luLXRvcDowfS51ay1ncmlkLWRpdmlkZXI+Kntwb3NpdGlvbjpyZWxhdGl2ZX0udWstZ3JpZC1kaXZpZGVyPjpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2JvcmRlci1yaWdodDoxcHggc29saWQgI2U1ZTVlNX0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO2xlZnQ6MDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTVlNWU1fS51ay1ncmlkLWRpdmlkZXJ7bWFyZ2luLXJpZ2h0Oi02MHB4fS51ay1ncmlkLWRpdmlkZXI+KntwYWRkaW5nLXJpZ2h0OjYwcHh9LnVrLWdyaWQtZGl2aWRlcj46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmV7cmlnaHQ6MzBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6NjBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmV7dG9wOi0zMHB4O3JpZ2h0OjYwcHh9QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstZ3JpZC1kaXZpZGVye21hcmdpbi1yaWdodDotODBweH0udWstZ3JpZC1kaXZpZGVyPip7cGFkZGluZy1yaWdodDo4MHB4fS51ay1ncmlkLWRpdmlkZXI+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3Jle3JpZ2h0OjQwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbnttYXJnaW4tdG9wOjgwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3Jle3RvcDotNDBweDtyaWdodDo4MHB4fX0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLXNtYWxsLC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zbWFsbHttYXJnaW4tcmlnaHQ6LTMwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1zbWFsbD4qLC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zbWFsbD4qe3BhZGRpbmctcmlnaHQ6MzBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLXNtYWxsPjpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc21hbGw+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3Jle3JpZ2h0OjE1cHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXJvdy1zbWFsbC51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbiwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc21hbGwudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW57bWFyZ2luLXRvcDozMHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zbWFsbC51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3Jle3RvcDotMTVweDtyaWdodDozMHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1yb3ctc21hbGwudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZXt0b3A6LTE1cHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1zbWFsbC51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3Jle3JpZ2h0OjMwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1tZWRpdW0sLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLW1lZGl1bXttYXJnaW4tcmlnaHQ6LTYwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1tZWRpdW0+KiwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbWVkaXVtPip7cGFkZGluZy1yaWdodDo2MHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tbWVkaXVtPjpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbWVkaXVtPjpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZXtyaWdodDozMHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1tZWRpdW0udWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW4sLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXJvdy1tZWRpdW0udWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW57bWFyZ2luLXRvcDo2MHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1tZWRpdW0udWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZXt0b3A6LTMwcHg7cmlnaHQ6NjBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtcm93LW1lZGl1bS51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3Jle3RvcDotMzBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLW1lZGl1bS51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3Jle3JpZ2h0OjYwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1sYXJnZSwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbGFyZ2V7bWFyZ2luLXJpZ2h0Oi04MHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tbGFyZ2U+KiwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbGFyZ2U+KntwYWRkaW5nLXJpZ2h0OjgwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1sYXJnZT46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWxhcmdlPjpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZXtyaWdodDo0MHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZS51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbiwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtcm93LWxhcmdlLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6ODBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbGFyZ2UudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZXt0b3A6LTQwcHg7cmlnaHQ6ODBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtcm93LWxhcmdlLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmV7dG9wOi00MHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tbGFyZ2UudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZXtyaWdodDo4MHB4fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1sYXJnZSwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbGFyZ2V7bWFyZ2luLXJpZ2h0Oi0xNDBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLWxhcmdlPiosLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWxhcmdlPip7cGFkZGluZy1yaWdodDoxNDBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLWxhcmdlPjpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbGFyZ2U+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3Jle3JpZ2h0OjcwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWxhcmdlLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luLC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1yb3ctbGFyZ2UudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW57bWFyZ2luLXRvcDoxNDBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbGFyZ2UudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZXt0b3A6LTcwcHg7cmlnaHQ6MTQwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXJvdy1sYXJnZS51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3Jle3RvcDotNzBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLWxhcmdlLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmV7cmlnaHQ6MTQwcHh9fS51ay1ncmlkLWl0ZW0tbWF0Y2gsLnVrLWdyaWQtbWF0Y2g+KntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXB9LnVrLWdyaWQtaXRlbS1tYXRjaD46bm90KFtjbGFzcyo9dWstd2lkdGhdKSwudWstZ3JpZC1tYXRjaD4qPjpub3QoW2NsYXNzKj11ay13aWR0aF0pe2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxMDAlO2ZsZXg6YXV0b30udWstbmF2LC51ay1uYXYgdWx7bWFyZ2luOjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZX0udWstbmF2IGxpPmF7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtjb2x1bW4tZ2FwOi4yNWVtO3RleHQtZGVjb3JhdGlvbjpub25lfS51ay1uYXY+bGk+YXtwYWRkaW5nOjVweCAwfXVsLnVrLW5hdi1zdWJ7cGFkZGluZzo1cHggMTVweCA1cHggMH0udWstbmF2LXN1YiB1bHtwYWRkaW5nLXJpZ2h0OjE1cHh9LnVrLW5hdi1zdWIgYXtwYWRkaW5nOjJweCAwfS51ay1uYXYtcGFyZW50LWljb257bWFyZ2luLXJpZ2h0OmF1dG99LnVrLW5hdj5saT5hW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gLnVrLW5hdi1wYXJlbnQtaWNvbnt0cmFuc2Zvcm06cm90YXRlKC0xODBkZWcpfS51ay1uYXYtaGVhZGVye3BhZGRpbmc6NXB4IDA7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2ZvbnQtc2l6ZTouODc1cmVtfS51ay1uYXYtaGVhZGVyOm5vdCg6Zmlyc3QtY2hpbGQpe21hcmdpbi10b3A6MjBweH0udWstbmF2IC51ay1uYXYtZGl2aWRlcnttYXJnaW46NXB4IDB9LnVrLW5hdi1kZWZhdWx0e2ZvbnQtc2l6ZTouODc1cmVtO2xpbmUtaGVpZ2h0OjEuNX0udWstbmF2LWRlZmF1bHQ+bGk+YXtjb2xvcjojOTk5fS51ay1uYXYtZGVmYXVsdD5saT5hOmhvdmVye2NvbG9yOiM2NjZ9LnVrLW5hdi1kZWZhdWx0PmxpLnVrLWFjdGl2ZT5he2NvbG9yOiMzMzN9LnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3VidGl0bGV7Zm9udC1zaXplOjEycHh9LnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVye2NvbG9yOiMzMzN9LnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlcntib3JkZXItdG9wOjFweCBzb2xpZCAjZTVlNWU1fS51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1Yntmb250LXNpemU6Ljg3NXJlbTtsaW5lLWhlaWdodDoxLjV9LnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGF7Y29sb3I6Izk5OX0udWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYTpob3Zlcntjb2xvcjojNjY2fS51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YXtjb2xvcjojMzMzfS51ay1uYXYtcHJpbWFyeXtmb250LXNpemU6MS41cmVtO2xpbmUtaGVpZ2h0OjEuNX0udWstbmF2LXByaW1hcnk+bGk+YXtjb2xvcjojOTk5fS51ay1uYXYtcHJpbWFyeT5saT5hOmhvdmVye2NvbG9yOiM2NjZ9LnVrLW5hdi1wcmltYXJ5PmxpLnVrLWFjdGl2ZT5he2NvbG9yOiMzMzN9LnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3VidGl0bGV7Zm9udC1zaXplOjEuMjVyZW19LnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtaGVhZGVye2NvbG9yOiMzMzN9LnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlcntib3JkZXItdG9wOjFweCBzb2xpZCAjZTVlNWU1fS51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1Yntmb250LXNpemU6MS4yNXJlbTtsaW5lLWhlaWdodDoxLjV9LnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGF7Y29sb3I6Izk5OX0udWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpob3Zlcntjb2xvcjojNjY2fS51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YXtjb2xvcjojMzMzfS51ay1uYXYtc2Vjb25kYXJ5e2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjEuNX0udWstbmF2LXNlY29uZGFyeT46bm90KC51ay1uYXYtZGl2aWRlcikrOm5vdCgudWstbmF2LWhlYWRlciwudWstbmF2LWRpdmlkZXIpe21hcmdpbi10b3A6MH0udWstbmF2LXNlY29uZGFyeT5saT5he2NvbG9yOiMzMzM7cGFkZGluZzoxMHB4IDEwcHh9LnVrLW5hdi1zZWNvbmRhcnk+bGk+YTpob3Zlcntjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2Y4ZjhmOH0udWstbmF2LXNlY29uZGFyeT5saS51ay1hY3RpdmU+YXtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2Y4ZjhmOH0udWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YnRpdGxle2ZvbnQtc2l6ZTouODc1cmVtO2NvbG9yOiM5OTl9LnVrLW5hdi1zZWNvbmRhcnk+bGk+YTpob3ZlciAudWstbmF2LXN1YnRpdGxle2NvbG9yOiM2NjZ9LnVrLW5hdi1zZWNvbmRhcnk+bGkudWstYWN0aXZlPmEgLnVrLW5hdi1zdWJ0aXRsZXtjb2xvcjojMzMzfS51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtaGVhZGVye2NvbG9yOiMzMzN9LnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1kaXZpZGVye2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTV9LnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWJ7Zm9udC1zaXplOi44NzVyZW07bGluZS1oZWlnaHQ6MS41fS51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGF7Y29sb3I6Izk5OX0udWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhOmhvdmVye2NvbG9yOiM2NjZ9LnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmF7Y29sb3I6IzMzM30udWstbmF2LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0udWstbmF2LWNlbnRlciBsaT5he2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnVrLW5hdi1jZW50ZXIgLnVrLW5hdi1zdWIsLnVrLW5hdi1jZW50ZXIgLnVrLW5hdi1zdWIgdWx7cGFkZGluZy1yaWdodDowfS51ay1uYXYtY2VudGVyIC51ay1uYXYtcGFyZW50LWljb257bWFyZ2luLXJpZ2h0OjRweH0udWstbmF2LnVrLW5hdi1kaXZpZGVyPjpub3QoLnVrLW5hdi1kaXZpZGVyKSs6bm90KC51ay1uYXYtaGVhZGVyLC51ay1uYXYtZGl2aWRlcil7bWFyZ2luLXRvcDo1cHg7cGFkZGluZy10b3A6NXB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTV9LnVrLW5hdmJhcntkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmV9LnVrLW5hdmJhci1jb250YWluZXI6bm90KC51ay1uYXZiYXItdHJhbnNwYXJlbnQpe2JhY2tncm91bmQ6I2Y4ZjhmOH0udWstbmF2YmFyLWxlZnQsLnVrLW5hdmJhci1yaWdodCxbY2xhc3MqPXVrLW5hdmJhci1jZW50ZXJde2Rpc3BsYXk6ZmxleDtnYXA6MzBweDthbGlnbi1pdGVtczpjZW50ZXJ9LnVrLW5hdmJhci1sZWZ0e21hcmdpbi1yaWdodDphdXRvfS51ay1uYXZiYXItY2VudGVyOm9ubHktY2hpbGR7bWFyZ2luLXJpZ2h0OmF1dG87bWFyZ2luLWxlZnQ6YXV0bztwb3NpdGlvbjpyZWxhdGl2ZX0udWstbmF2YmFyLWNlbnRlcjpub3QoOm9ubHktY2hpbGQpe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoNTAlLC01MCUpO3dpZHRoOm1heC1jb250ZW50O2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4Ojk5MH0udWstbmF2YmFyLWNlbnRlci1sZWZ0LC51ay1uYXZiYXItY2VudGVyLXJpZ2h0e3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS51ay1uYXZiYXItY2VudGVyLXJpZ2h0e2xlZnQ6Y2FsYygxMDAlICsgMzBweCl9LnVrLW5hdmJhci1jZW50ZXItbGVmdHtyaWdodDpjYWxjKDEwMCUgKyAzMHB4KX1bY2xhc3MqPXVrLW5hdmJhci1jZW50ZXItXXt3aWR0aDptYXgtY29udGVudDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LnVrLW5hdmJhci1uYXZ7ZGlzcGxheTpmbGV4O2dhcDozMHB4O21hcmdpbjowO3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5vbmV9LnVrLW5hdmJhci1jZW50ZXI6b25seS1jaGlsZCwudWstbmF2YmFyLWxlZnQsLnVrLW5hdmJhci1yaWdodHtmbGV4LXdyYXA6d3JhcH0udWstbmF2YmFyLWl0ZW0sLnVrLW5hdmJhci1uYXY+bGk+YSwudWstbmF2YmFyLXRvZ2dsZXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sdW1uLWdhcDouMjVlbTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLWhlaWdodDo4MHB4O2ZvbnQtc2l6ZTouODc1cmVtO2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCJTZWdvZSBVSSIsUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsQXJpYWwsIk5vdG8gU2FucyIsc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiO3RleHQtZGVjb3JhdGlvbjpub25lfS51ay1uYXZiYXItbmF2PmxpPmF7cGFkZGluZzowIDA7Y29sb3I6Izk5OTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7dHJhbnNpdGlvbjouMXMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS51ay1uYXZiYXItbmF2PmxpOmhvdmVyPmEsLnVrLW5hdmJhci1uYXY+bGk+YVthcmlhLWV4cGFuZGVkPXRydWVde2NvbG9yOiM2NjZ9LnVrLW5hdmJhci1uYXY+bGk+YTphY3RpdmV7Y29sb3I6IzMzM30udWstbmF2YmFyLW5hdj5saS51ay1hY3RpdmU+YXtjb2xvcjojMzMzfS51ay1uYXZiYXItcGFyZW50LWljb257bWFyZ2luLXJpZ2h0OjRweH0udWstbmF2YmFyLW5hdj5saT5hW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gLnVrLW5hdmJhci1wYXJlbnQtaWNvbnt0cmFuc2Zvcm06cm90YXRlKC0xODBkZWcpfS51ay1uYXZiYXItaXRlbXtwYWRkaW5nOjAgMDtjb2xvcjojNjY2fS51ay1uYXZiYXItaXRlbT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLW5hdmJhci10b2dnbGV7cGFkZGluZzowIDA7Y29sb3I6Izk5OX0udWstbmF2YmFyLXRvZ2dsZTpob3ZlciwudWstbmF2YmFyLXRvZ2dsZVthcmlhLWV4cGFuZGVkPXRydWVde2NvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVrLW5hdmJhci1zdWJ0aXRsZXtmb250LXNpemU6Ljg3NXJlbX0udWstbmF2YmFyLWp1c3RpZnkgLnVrLW5hdmJhci1pdGVtLC51ay1uYXZiYXItanVzdGlmeSAudWstbmF2YmFyLWxlZnQsLnVrLW5hdmJhci1qdXN0aWZ5IC51ay1uYXZiYXItbmF2LC51ay1uYXZiYXItanVzdGlmeSAudWstbmF2YmFyLW5hdj5saSwudWstbmF2YmFyLWp1c3RpZnkgLnVrLW5hdmJhci1yaWdodCwudWstbmF2YmFyLWp1c3RpZnkgLnVrLW5hdmJhci10b2dnbGV7ZmxleC1ncm93OjF9LnVrLW5hdmJhci1kcm9wZG93bntkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDIwOy0tdWstcG9zaXRpb24tb2Zmc2V0OjE1cHg7LS11ay1wb3NpdGlvbi1zaGlmdC1vZmZzZXQ6MDstLXVrLXBvc2l0aW9uLXZpZXdwb3J0LW9mZnNldDoxNXB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoyMDBweDtwYWRkaW5nOjI1cHg7YmFja2dyb3VuZDojZmZmO2NvbG9yOiM2NjY7Ym94LXNoYWRvdzowIDVweCAxMnB4IHJnYmEoMCwwLDAsLjE1KX0udWstbmF2YmFyLWRyb3Bkb3duLnVrLW9wZW57ZGlzcGxheTpibG9ja30udWstbmF2YmFyLWRyb3Bkb3duPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstbmF2YmFyLWRyb3Bkb3duLWdyaWR7bWFyZ2luLXJpZ2h0Oi0zMHB4fS51ay1uYXZiYXItZHJvcGRvd24tZ3JpZD4qe3BhZGRpbmctcmlnaHQ6MzBweH0udWstbmF2YmFyLWRyb3Bkb3duLWdyaWQ+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6MzBweH0udWstbmF2YmFyLWRyb3Bkb3duLXN0YWNrIC51ay1uYXZiYXItZHJvcGRvd24tZ3JpZD4qe3dpZHRoOjEwMCUhaW1wb3J0YW50fS51ay1uYXZiYXItZHJvcGRvd24td2lkdGgtMjpub3QoLnVrLW5hdmJhci1kcm9wZG93bi1zdGFjayl7d2lkdGg6NDAwcHh9LnVrLW5hdmJhci1kcm9wZG93bi13aWR0aC0zOm5vdCgudWstbmF2YmFyLWRyb3Bkb3duLXN0YWNrKXt3aWR0aDo2MDBweH0udWstbmF2YmFyLWRyb3Bkb3duLXdpZHRoLTQ6bm90KC51ay1uYXZiYXItZHJvcGRvd24tc3RhY2spe3dpZHRoOjgwMHB4fS51ay1uYXZiYXItZHJvcGRvd24td2lkdGgtNTpub3QoLnVrLW5hdmJhci1kcm9wZG93bi1zdGFjayl7d2lkdGg6MTAwMHB4fS51ay1uYXZiYXItZHJvcGRvd24tbGFyZ2V7LS11ay1wb3NpdGlvbi1zaGlmdC1vZmZzZXQ6MDtwYWRkaW5nOjQwcHh9LnVrLW5hdmJhci1kcm9wZG93bi1kcm9wYmFye3dpZHRoOmF1dG87YmFja2dyb3VuZDowIDA7cGFkZGluZzoyNXB4IDAgMjVweCAwOy0tdWstcG9zaXRpb24tb2Zmc2V0OjA7LS11ay1wb3NpdGlvbi1zaGlmdC1vZmZzZXQ6MDstLXVrLXBvc2l0aW9uLXZpZXdwb3J0LW9mZnNldDoxNXB4O2JveC1zaGFkb3c6bm9uZX1AbWVkaWEgKG1pbi13aWR0aDo2NDBweCl7LnVrLW5hdmJhci1kcm9wZG93bi1kcm9wYmFyey0tdWstcG9zaXRpb24tdmlld3BvcnQtb2Zmc2V0OjMwcHh9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstbmF2YmFyLWRyb3Bkb3duLWRyb3BiYXJ7LS11ay1wb3NpdGlvbi12aWV3cG9ydC1vZmZzZXQ6NDBweH19LnVrLW5hdmJhci1kcm9wZG93bi1kcm9wYmFyLWxhcmdley0tdWstcG9zaXRpb24tc2hpZnQtb2Zmc2V0OjA7cGFkZGluZy10b3A6NDBweDtwYWRkaW5nLWJvdHRvbTo0MHB4fS51ay1uYXZiYXItZHJvcGRvd24tbmF2e2ZvbnQtc2l6ZTouODc1cmVtfS51ay1uYXZiYXItZHJvcGRvd24tbmF2PmxpPmF7Y29sb3I6Izk5OX0udWstbmF2YmFyLWRyb3Bkb3duLW5hdj5saT5hOmhvdmVye2NvbG9yOiM2NjZ9LnVrLW5hdmJhci1kcm9wZG93bi1uYXY+bGkudWstYWN0aXZlPmF7Y29sb3I6IzMzM30udWstbmF2YmFyLWRyb3Bkb3duLW5hdiAudWstbmF2LXN1YnRpdGxle2ZvbnQtc2l6ZToxMnB4fS51ay1uYXZiYXItZHJvcGRvd24tbmF2IC51ay1uYXYtaGVhZGVye2NvbG9yOiMzMzN9LnVrLW5hdmJhci1kcm9wZG93bi1uYXYgLnVrLW5hdi1kaXZpZGVye2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTV9LnVrLW5hdmJhci1kcm9wZG93bi1uYXYgLnVrLW5hdi1zdWIgYXtjb2xvcjojOTk5fS51ay1uYXZiYXItZHJvcGRvd24tbmF2IC51ay1uYXYtc3ViIGE6aG92ZXJ7Y29sb3I6IzY2Nn0udWstbmF2YmFyLWRyb3Bkb3duLW5hdiAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YXtjb2xvcjojMzMzfS51ay1uYXZiYXItZHJvcGJhcntkaXNwbGF5OmJsb2NrIWltcG9ydGFudDt6LWluZGV4Ojk4MDtwYWRkaW5nOjA7cmlnaHQ6MDtsZWZ0OjB9LnVrLXN1Ym5hdntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDotMjBweDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS51ay1zdWJuYXY+KntmbGV4Om5vbmU7cGFkZGluZy1yaWdodDoyMHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS51ay1zdWJuYXY+Kj46Zmlyc3QtY2hpbGR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtjb2x1bW4tZ2FwOi4yNWVtO2NvbG9yOiM5OTk7Zm9udC1zaXplOi44NzVyZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3RyYW5zaXRpb246LjFzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcn0udWstc3VibmF2Pio+YTpob3Zlcntjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lfS51ay1zdWJuYXY+LnVrLWFjdGl2ZT5he2NvbG9yOiMzMzN9LnVrLXN1Ym5hdi1kaXZpZGVye21hcmdpbi1yaWdodDotNDFweH0udWstc3VibmF2LWRpdmlkZXI+KntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS51ay1zdWJuYXYtZGl2aWRlcj46OmJlZm9yZXtjb250ZW50OiIiO2hlaWdodDoxLjVlbTttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDoyMHB4O2JvcmRlci1yaWdodDoxcHggc29saWQgdHJhbnNwYXJlbnR9LnVrLXN1Ym5hdi1kaXZpZGVyPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZXtib3JkZXItcmlnaHQtY29sb3I6I2U1ZTVlNX0udWstc3VibmF2LXBpbGw+Kj46Zmlyc3QtY2hpbGR7cGFkZGluZzo1cHggMTBweDtiYWNrZ3JvdW5kOjAgMDtjb2xvcjojOTk5fS51ay1zdWJuYXYtcGlsbD4qPmE6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjhmOGY4O2NvbG9yOiM2NjZ9LnVrLXN1Ym5hdi1waWxsPio+YTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojZjhmOGY4O2NvbG9yOiM2NjZ9LnVrLXN1Ym5hdi1waWxsPi51ay1hY3RpdmU+YXtiYWNrZ3JvdW5kLWNvbG9yOiMxZTg3ZjA7Y29sb3I6I2ZmZn0udWstc3VibmF2Pi51ay1kaXNhYmxlZD5he2NvbG9yOiM5OTl9LnVrLWJyZWFkY3J1bWJ7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZX0udWstYnJlYWRjcnVtYj4qe2Rpc3BsYXk6Y29udGVudHN9LnVrLWJyZWFkY3J1bWI+Kj4qe2ZvbnQtc2l6ZTouODc1cmVtO2NvbG9yOiM5OTl9LnVrLWJyZWFkY3J1bWI+Kj46aG92ZXJ7Y29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstYnJlYWRjcnVtYj46bGFzdC1jaGlsZD5hOm5vdChbaHJlZl0pLC51ay1icmVhZGNydW1iPjpsYXN0LWNoaWxkPnNwYW57Y29sb3I6IzY2Nn0udWstYnJlYWRjcnVtYj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmV7Y29udGVudDoiLyI7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjAgY2FsYygyMHB4IC0gNHB4KSAwIDIwcHg7Zm9udC1zaXplOi44NzVyZW07Y29sb3I6Izk5OX0udWstcGFnaW5hdGlvbntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWFyZ2luLXJpZ2h0OjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZX0udWstcGFnaW5hdGlvbj4qe2ZsZXg6bm9uZTtwYWRkaW5nLXJpZ2h0OjA7cG9zaXRpb246cmVsYXRpdmV9LnVrLXBhZ2luYXRpb24+Kj4qe2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo1cHggMTBweDtjb2xvcjojOTk5O3RyYW5zaXRpb246Y29sb3IgLjFzIGVhc2UtaW4tb3V0fS51ay1wYWdpbmF0aW9uPio+OmhvdmVye2NvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVrLXBhZ2luYXRpb24+LnVrLWFjdGl2ZT4qe2NvbG9yOiM2NjZ9LnVrLXBhZ2luYXRpb24+LnVrLWRpc2FibGVkPip7Y29sb3I6Izk5OX0udWstdGFie2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tcmlnaHQ6LTIwcHg7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZX0udWstdGFiOjpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtyaWdodDoyMHB4O2xlZnQ6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU1fS51ay10YWI+KntmbGV4Om5vbmU7cGFkZGluZy1yaWdodDoyMHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS51ay10YWI+Kj5he2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Y29sdW1uLWdhcDouMjVlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6NXB4IDEwcHg7Y29sb3I6Izk5OTtib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudDtmb250LXNpemU6Ljg3NXJlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7dHJhbnNpdGlvbjpjb2xvciAuMXMgZWFzZS1pbi1vdXR9LnVrLXRhYj4qPmE6aG92ZXJ7Y29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstdGFiPi51ay1hY3RpdmU+YXtjb2xvcjojMzMzO2JvcmRlci1jb2xvcjojMWU4N2YwfS51ay10YWI+LnVrLWRpc2FibGVkPmF7Y29sb3I6Izk5OX0udWstdGFiLWJvdHRvbTo6YmVmb3Jle3RvcDowO2JvdHRvbTphdXRvfS51ay10YWItYm90dG9tPio+YXtib3JkZXItdG9wOjFweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOm5vbmV9LnVrLXRhYi1sZWZ0LC51ay10YWItcmlnaHR7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21hcmdpbi1yaWdodDowfS51ay10YWItbGVmdD4qLC51ay10YWItcmlnaHQ+KntwYWRkaW5nLXJpZ2h0OjB9LnVrLXRhYi1yaWdodDo6YmVmb3Jle3RvcDowO2JvdHRvbTowO3JpZ2h0OmF1dG87bGVmdDowO2JvcmRlci1yaWdodDoxcHggc29saWQgI2U1ZTVlNTtib3JkZXItYm90dG9tOm5vbmV9LnVrLXRhYi1sZWZ0OjpiZWZvcmV7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MDtsZWZ0OmF1dG87Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZTVlNWU1O2JvcmRlci1ib3R0b206bm9uZX0udWstdGFiLXJpZ2h0Pio+YXtqdXN0aWZ5LWNvbnRlbnQ6bGVmdDtib3JkZXItbGVmdDoxcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTpub25lfS51ay10YWItbGVmdD4qPmF7anVzdGlmeS1jb250ZW50OmxlZnQ7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOm5vbmV9LnVrLXRhYiAudWstZHJvcGRvd257bWFyZ2luLXJpZ2h0OjMwcHh9LnVrLXNsaWRlbmF2e3BhZGRpbmc6NXB4IDEwcHg7Y29sb3I6cmdiYSgxMDIsMTAyLDEwMiwuNSk7dHJhbnNpdGlvbjpjb2xvciAuMXMgZWFzZS1pbi1vdXR9LnVrLXNsaWRlbmF2OmhvdmVye2NvbG9yOnJnYmEoMTAyLDEwMiwxMDIsLjkpfS51ay1zbGlkZW5hdjphY3RpdmV7Y29sb3I6cmdiYSgxMDIsMTAyLDEwMiwuNSl9LnVrLXNsaWRlbmF2LWxhcmdle3BhZGRpbmc6MTBweCAxMHB4fS51ay1zbGlkZW5hdi1jb250YWluZXJ7ZGlzcGxheTpmbGV4fS51ay1kb3RuYXZ7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbjowO3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luLXJpZ2h0Oi0xMnB4fS51ay1kb3RuYXY+KntmbGV4Om5vbmU7cGFkZGluZy1yaWdodDoxMnB4fS51ay1kb3RuYXY+Kj4qe2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwcHg7aGVpZ2h0OjEwcHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDowIDA7dGV4dC1pbmRlbnQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlcjoxcHggc29saWQgcmdiYSgxMDIsMTAyLDEwMiwuNCk7dHJhbnNpdGlvbjouMnMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbi1wcm9wZXJ0eTpiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcn0udWstZG90bmF2Pio+OmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgxMDIsMTAyLDEwMiwuNik7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS51ay1kb3RuYXY+Kj46YWN0aXZle2JhY2tncm91bmQtY29sb3I6cmdiYSgxMDIsMTAyLDEwMiwuMik7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS51ay1kb3RuYXY+LnVrLWFjdGl2ZT4qe2JhY2tncm91bmQtY29sb3I6cmdiYSgxMDIsMTAyLDEwMiwuNik7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS51ay1kb3RuYXYtdmVydGljYWx7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21hcmdpbi1yaWdodDowO21hcmdpbi10b3A6LTEycHh9LnVrLWRvdG5hdi12ZXJ0aWNhbD4qe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLXRvcDoxMnB4fS51ay10aHVtYm5hdntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWFyZ2luOjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZTttYXJnaW4tcmlnaHQ6LTE1cHh9LnVrLXRodW1ibmF2Pip7cGFkZGluZy1yaWdodDoxNXB4fS51ay10aHVtYm5hdj4qPip7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmV9LnVrLXRodW1ibmF2Pio+OjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuNCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4xcyBlYXNlLWluLW91dH0udWstdGh1bWJuYXY+Kj46aG92ZXI6OmFmdGVye2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LnVrLXRodW1ibmF2Pi51ay1hY3RpdmU+OjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS51ay10aHVtYm5hdi12ZXJ0aWNhbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLXRvcDotMTVweH0udWstdGh1bWJuYXYtdmVydGljYWw+KntwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy10b3A6MTVweH0udWstaWNvbm5hdntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWFyZ2luOjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZTttYXJnaW4tcmlnaHQ6LTEwcHh9LnVrLWljb25uYXY+KntwYWRkaW5nLXJpZ2h0OjEwcHh9LnVrLWljb25uYXY+Kj5he2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Y29sdW1uLWdhcDouMjVlbTtsaW5lLWhlaWdodDowO2NvbG9yOiM5OTk7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC1zaXplOi44NzVyZW07dHJhbnNpdGlvbjouMXMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS51ay1pY29ubmF2Pio+YTpob3Zlcntjb2xvcjojNjY2fS51ay1pY29ubmF2Pi51ay1hY3RpdmU+YXtjb2xvcjojNjY2fS51ay1pY29ubmF2LXZlcnRpY2Fse2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttYXJnaW4tcmlnaHQ6MDttYXJnaW4tdG9wOi0xMHB4fS51ay1pY29ubmF2LXZlcnRpY2FsPip7cGFkZGluZy1yaWdodDowO3BhZGRpbmctdG9wOjEwcHh9LnVrLWxpZ2h0Ym94e2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MDt6LWluZGV4OjEwMTA7YmFja2dyb3VuZDojMDAwO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyBsaW5lYXI7dG91Y2gtYWN0aW9uOnBpbmNoLXpvb219LnVrLWxpZ2h0Ym94LnVrLW9wZW57ZGlzcGxheTpibG9jaztvcGFjaXR5OjF9LnVrLWxpZ2h0Ym94IDpmb2N1c3tvdXRsaW5lLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1saWdodGJveCA6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1saWdodGJveC1wYWdle292ZXJmbG93OmhpZGRlbn0udWstbGlnaHRib3gtaXRlbXM+Kntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MDtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyk7d2lsbC1jaGFuZ2U6dHJhbnNmb3JtLG9wYWNpdHl9LnVrLWxpZ2h0Ym94LWl0ZW1zPio+KnttYXgtd2lkdGg6MTAwdnc7bWF4LWhlaWdodDoxMDB2aH0udWstbGlnaHRib3gtaXRlbXM+Kj46bm90KGlmcmFtZSl7d2lkdGg6YXV0bztoZWlnaHQ6YXV0b30udWstbGlnaHRib3gtaXRlbXM+LnVrLWFjdGl2ZXtkaXNwbGF5OmZsZXh9LnVrLWxpZ2h0Ym94LXRvb2xiYXJ7cGFkZGluZzoxMHB4IDEwcHg7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zKTtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstbGlnaHRib3gtdG9vbGJhcj4qe2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1saWdodGJveC10b29sYmFyLWljb257cGFkZGluZzo1cHg7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWxpZ2h0Ym94LXRvb2xiYXItaWNvbjpob3Zlcntjb2xvcjojZmZmfS51ay1saWdodGJveC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zKTtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS51ay1saWdodGJveC1idXR0b246aG92ZXJ7Y29sb3I6I2ZmZn0udWstbGlnaHRib3gtY2FwdGlvbjplbXB0eXtkaXNwbGF5Om5vbmV9LnVrLWxpZ2h0Ym94LWlmcmFtZXt3aWR0aDo4MCU7aGVpZ2h0OjgwJX1bY2xhc3MqPXVrLWFuaW1hdGlvbi1de2FuaW1hdGlvbjouNXMgZWFzZS1vdXQgYm90aH0udWstYW5pbWF0aW9uLWZhZGV7YW5pbWF0aW9uLW5hbWU6dWstZmFkZTthbmltYXRpb24tZHVyYXRpb246LjhzO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246bGluZWFyfS51ay1hbmltYXRpb24tc2NhbGUtdXB7YW5pbWF0aW9uLW5hbWU6dWstZmFkZSx1ay1zY2FsZS11cH0udWstYW5pbWF0aW9uLXNjYWxlLWRvd257YW5pbWF0aW9uLW5hbWU6dWstZmFkZSx1ay1zY2FsZS1kb3dufS51ay1hbmltYXRpb24tc2xpZGUtdG9we2FuaW1hdGlvbi1uYW1lOnVrLWZhZGUsdWstc2xpZGUtdG9wfS51ay1hbmltYXRpb24tc2xpZGUtYm90dG9te2FuaW1hdGlvbi1uYW1lOnVrLWZhZGUsdWstc2xpZGUtYm90dG9tfS51ay1hbmltYXRpb24tc2xpZGUtcmlnaHR7YW5pbWF0aW9uLW5hbWU6dWstZmFkZSx1ay1zbGlkZS1sZWZ0fS51ay1hbmltYXRpb24tc2xpZGUtbGVmdHthbmltYXRpb24tbmFtZTp1ay1mYWRlLHVrLXNsaWRlLXJpZ2h0fS51ay1hbmltYXRpb24tc2xpZGUtdG9wLXNtYWxse2FuaW1hdGlvbi1uYW1lOnVrLWZhZGUsdWstc2xpZGUtdG9wLXNtYWxsfS51ay1hbmltYXRpb24tc2xpZGUtYm90dG9tLXNtYWxse2FuaW1hdGlvbi1uYW1lOnVrLWZhZGUsdWstc2xpZGUtYm90dG9tLXNtYWxsfS51ay1hbmltYXRpb24tc2xpZGUtcmlnaHQtc21hbGx7YW5pbWF0aW9uLW5hbWU6dWstZmFkZSx1ay1zbGlkZS1sZWZ0LXNtYWxsfS51ay1hbmltYXRpb24tc2xpZGUtbGVmdC1zbWFsbHthbmltYXRpb24tbmFtZTp1ay1mYWRlLHVrLXNsaWRlLXJpZ2h0LXNtYWxsfS51ay1hbmltYXRpb24tc2xpZGUtdG9wLW1lZGl1bXthbmltYXRpb24tbmFtZTp1ay1mYWRlLHVrLXNsaWRlLXRvcC1tZWRpdW19LnVrLWFuaW1hdGlvbi1zbGlkZS1ib3R0b20tbWVkaXVte2FuaW1hdGlvbi1uYW1lOnVrLWZhZGUsdWstc2xpZGUtYm90dG9tLW1lZGl1bX0udWstYW5pbWF0aW9uLXNsaWRlLXJpZ2h0LW1lZGl1bXthbmltYXRpb24tbmFtZTp1ay1mYWRlLHVrLXNsaWRlLWxlZnQtbWVkaXVtfS51ay1hbmltYXRpb24tc2xpZGUtbGVmdC1tZWRpdW17YW5pbWF0aW9uLW5hbWU6dWstZmFkZSx1ay1zbGlkZS1yaWdodC1tZWRpdW19LnVrLWFuaW1hdGlvbi1rZW5idXJuc3thbmltYXRpb24tbmFtZTp1ay1rZW5idXJuczthbmltYXRpb24tZHVyYXRpb246MTVzfS51ay1hbmltYXRpb24tc2hha2V7YW5pbWF0aW9uLW5hbWU6dWstc2hha2V9LnVrLWFuaW1hdGlvbi1zdHJva2V7YW5pbWF0aW9uLW5hbWU6dWstc3Ryb2tlO2FuaW1hdGlvbi1kdXJhdGlvbjoycztzdHJva2UtZGFzaGFycmF5OnZhcigtLXVrLWFuaW1hdGlvbi1zdHJva2UpfS51ay1hbmltYXRpb24tcmV2ZXJzZXthbmltYXRpb24tZGlyZWN0aW9uOnJldmVyc2U7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWlufS51ay1hbmltYXRpb24tZmFzdHthbmltYXRpb24tZHVyYXRpb246LjFzfS51ay1hbmltYXRpb24tdG9nZ2xlOm5vdCg6aG92ZXIpOm5vdCg6Zm9jdXMpIFtjbGFzcyo9dWstYW5pbWF0aW9uLV17YW5pbWF0aW9uLW5hbWU6bm9uZX1Aa2V5ZnJhbWVzIHVrLWZhZGV7MCV7b3BhY2l0eTowfTEwMCV7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIHVrLXNjYWxlLXVwezAle3RyYW5zZm9ybTpzY2FsZSguOSl9MTAwJXt0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgdWstc2NhbGUtZG93bnswJXt0cmFuc2Zvcm06c2NhbGUoMS4xKX0xMDAle3RyYW5zZm9ybTpzY2FsZSgxKX19QGtleWZyYW1lcyB1ay1zbGlkZS10b3B7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEwMCUpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCl9fUBrZXlmcmFtZXMgdWstc2xpZGUtYm90dG9tezAle3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCl9fUBrZXlmcmFtZXMgdWstc2xpZGUtbGVmdHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1Aa2V5ZnJhbWVzIHVrLXNsaWRlLXJpZ2h0ezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1Aa2V5ZnJhbWVzIHVrLXNsaWRlLXRvcC1zbWFsbHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTBweCl9MTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKX19QGtleWZyYW1lcyB1ay1zbGlkZS1ib3R0b20tc21hbGx7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTBweCl9MTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKX19QGtleWZyYW1lcyB1ay1zbGlkZS1sZWZ0LXNtYWxsezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwcHgpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9fUBrZXlmcmFtZXMgdWstc2xpZGUtcmlnaHQtc21hbGx7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwcHgpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9fUBrZXlmcmFtZXMgdWstc2xpZGUtdG9wLW1lZGl1bXswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTBweCl9MTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKX19QGtleWZyYW1lcyB1ay1zbGlkZS1ib3R0b20tbWVkaXVtezAle3RyYW5zZm9ybTp0cmFuc2xhdGVZKDUwcHgpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCl9fUBrZXlmcmFtZXMgdWstc2xpZGUtbGVmdC1tZWRpdW17MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoNTBweCl9MTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX19QGtleWZyYW1lcyB1ay1zbGlkZS1yaWdodC1tZWRpdW17MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwcHgpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9fUBrZXlmcmFtZXMgdWsta2VuYnVybnN7MCV7dHJhbnNmb3JtOnNjYWxlKDEpfTEwMCV7dHJhbnNmb3JtOnNjYWxlKDEuMil9fUBrZXlmcmFtZXMgdWstc2hha2V7MCUsMTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX0xMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoOXB4KX0yMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLThweCl9MzAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDdweCl9NDAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC02cHgpfTUwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCg1cHgpfTYwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNHB4KX03MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoM3B4KX04MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTJweCl9OTAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDFweCl9fUBrZXlmcmFtZXMgdWstc3Ryb2tlezAle3N0cm9rZS1kYXNob2Zmc2V0OnZhcigtLXVrLWFuaW1hdGlvbi1zdHJva2UpfTEwMCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MH19W2NsYXNzKj11ay1jaGlsZC13aWR0aF0+Kntib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJX0udWstY2hpbGQtd2lkdGgtMS0yPip7d2lkdGg6NTAlfS51ay1jaGlsZC13aWR0aC0xLTM+Knt3aWR0aDpjYWxjKDEwMCUgKiAxIC8gMy4wMDEpfS51ay1jaGlsZC13aWR0aC0xLTQ+Knt3aWR0aDoyNSV9LnVrLWNoaWxkLXdpZHRoLTEtNT4qe3dpZHRoOjIwJX0udWstY2hpbGQtd2lkdGgtMS02Pip7d2lkdGg6Y2FsYygxMDAlICogMSAvIDYuMDAxKX0udWstY2hpbGQtd2lkdGgtYXV0bz4qe3dpZHRoOmF1dG99LnVrLWNoaWxkLXdpZHRoLWV4cGFuZD46bm90KFtjbGFzcyo9dWstd2lkdGhdKXtmbGV4OjE7bWluLXdpZHRoOjFweH1AbWVkaWEgKG1pbi13aWR0aDo2NDBweCl7LnVrLWNoaWxkLXdpZHRoLTEtMVxAcz4qe3dpZHRoOjEwMCV9LnVrLWNoaWxkLXdpZHRoLTEtMlxAcz4qe3dpZHRoOjUwJX0udWstY2hpbGQtd2lkdGgtMS0zXEBzPip7d2lkdGg6Y2FsYygxMDAlICogMSAvIDMuMDAxKX0udWstY2hpbGQtd2lkdGgtMS00XEBzPip7d2lkdGg6MjUlfS51ay1jaGlsZC13aWR0aC0xLTVcQHM+Knt3aWR0aDoyMCV9LnVrLWNoaWxkLXdpZHRoLTEtNlxAcz4qe3dpZHRoOmNhbGMoMTAwJSAqIDEgLyA2LjAwMSl9LnVrLWNoaWxkLXdpZHRoLWF1dG9cQHM+Knt3aWR0aDphdXRvfS51ay1jaGlsZC13aWR0aC1leHBhbmRcQHM+Om5vdChbY2xhc3MqPXVrLXdpZHRoXSl7ZmxleDoxO21pbi13aWR0aDoxcHh9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstY2hpbGQtd2lkdGgtMS0xXEBtPip7d2lkdGg6MTAwJX0udWstY2hpbGQtd2lkdGgtMS0yXEBtPip7d2lkdGg6NTAlfS51ay1jaGlsZC13aWR0aC0xLTNcQG0+Knt3aWR0aDpjYWxjKDEwMCUgKiAxIC8gMy4wMDEpfS51ay1jaGlsZC13aWR0aC0xLTRcQG0+Knt3aWR0aDoyNSV9LnVrLWNoaWxkLXdpZHRoLTEtNVxAbT4qe3dpZHRoOjIwJX0udWstY2hpbGQtd2lkdGgtMS02XEBtPip7d2lkdGg6Y2FsYygxMDAlICogMSAvIDYuMDAxKX0udWstY2hpbGQtd2lkdGgtYXV0b1xAbT4qe3dpZHRoOmF1dG99LnVrLWNoaWxkLXdpZHRoLWV4cGFuZFxAbT46bm90KFtjbGFzcyo9dWstd2lkdGhdKXtmbGV4OjE7bWluLXdpZHRoOjFweH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstY2hpbGQtd2lkdGgtMS0xXEBsPip7d2lkdGg6MTAwJX0udWstY2hpbGQtd2lkdGgtMS0yXEBsPip7d2lkdGg6NTAlfS51ay1jaGlsZC13aWR0aC0xLTNcQGw+Knt3aWR0aDpjYWxjKDEwMCUgKiAxIC8gMy4wMDEpfS51ay1jaGlsZC13aWR0aC0xLTRcQGw+Knt3aWR0aDoyNSV9LnVrLWNoaWxkLXdpZHRoLTEtNVxAbD4qe3dpZHRoOjIwJX0udWstY2hpbGQtd2lkdGgtMS02XEBsPip7d2lkdGg6Y2FsYygxMDAlICogMSAvIDYuMDAxKX0udWstY2hpbGQtd2lkdGgtYXV0b1xAbD4qe3dpZHRoOmF1dG99LnVrLWNoaWxkLXdpZHRoLWV4cGFuZFxAbD46bm90KFtjbGFzcyo9dWstd2lkdGhdKXtmbGV4OjE7bWluLXdpZHRoOjFweH19QG1lZGlhIChtaW4td2lkdGg6MTYwMHB4KXsudWstY2hpbGQtd2lkdGgtMS0xXEB4bD4qe3dpZHRoOjEwMCV9LnVrLWNoaWxkLXdpZHRoLTEtMlxAeGw+Knt3aWR0aDo1MCV9LnVrLWNoaWxkLXdpZHRoLTEtM1xAeGw+Knt3aWR0aDpjYWxjKDEwMCUgKiAxIC8gMy4wMDEpfS51ay1jaGlsZC13aWR0aC0xLTRcQHhsPip7d2lkdGg6MjUlfS51ay1jaGlsZC13aWR0aC0xLTVcQHhsPip7d2lkdGg6MjAlfS51ay1jaGlsZC13aWR0aC0xLTZcQHhsPip7d2lkdGg6Y2FsYygxMDAlICogMSAvIDYuMDAxKX0udWstY2hpbGQtd2lkdGgtYXV0b1xAeGw+Knt3aWR0aDphdXRvfS51ay1jaGlsZC13aWR0aC1leHBhbmRcQHhsPjpub3QoW2NsYXNzKj11ay13aWR0aF0pe2ZsZXg6MTttaW4td2lkdGg6MXB4fX1bY2xhc3MqPXVrLXdpZHRoXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJX0udWstd2lkdGgtMS0ye3dpZHRoOjUwJX0udWstd2lkdGgtMS0ze3dpZHRoOmNhbGMoMTAwJSAqIDEgLyAzLjAwMSl9LnVrLXdpZHRoLTItM3t3aWR0aDpjYWxjKDEwMCUgKiAyIC8gMy4wMDEpfS51ay13aWR0aC0xLTR7d2lkdGg6MjUlfS51ay13aWR0aC0zLTR7d2lkdGg6NzUlfS51ay13aWR0aC0xLTV7d2lkdGg6MjAlfS51ay13aWR0aC0yLTV7d2lkdGg6NDAlfS51ay13aWR0aC0zLTV7d2lkdGg6NjAlfS51ay13aWR0aC00LTV7d2lkdGg6ODAlfS51ay13aWR0aC0xLTZ7d2lkdGg6Y2FsYygxMDAlICogMSAvIDYuMDAxKX0udWstd2lkdGgtNS02e3dpZHRoOmNhbGMoMTAwJSAqIDUgLyA2LjAwMSl9LnVrLXdpZHRoLXNtYWxse3dpZHRoOjE1MHB4fS51ay13aWR0aC1tZWRpdW17d2lkdGg6MzAwcHh9LnVrLXdpZHRoLWxhcmdle3dpZHRoOjQ1MHB4fS51ay13aWR0aC14bGFyZ2V7d2lkdGg6NjAwcHh9LnVrLXdpZHRoLTJ4bGFyZ2V7d2lkdGg6NzUwcHh9LnVrLXdpZHRoLWF1dG97d2lkdGg6YXV0b30udWstd2lkdGgtZXhwYW5ke2ZsZXg6MTttaW4td2lkdGg6MXB4fUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstd2lkdGgtMS0xXEBze3dpZHRoOjEwMCV9LnVrLXdpZHRoLTEtMlxAc3t3aWR0aDo1MCV9LnVrLXdpZHRoLTEtM1xAc3t3aWR0aDpjYWxjKDEwMCUgKiAxIC8gMy4wMDEpfS51ay13aWR0aC0yLTNcQHN7d2lkdGg6Y2FsYygxMDAlICogMiAvIDMuMDAxKX0udWstd2lkdGgtMS00XEBze3dpZHRoOjI1JX0udWstd2lkdGgtMy00XEBze3dpZHRoOjc1JX0udWstd2lkdGgtMS01XEBze3dpZHRoOjIwJX0udWstd2lkdGgtMi01XEBze3dpZHRoOjQwJX0udWstd2lkdGgtMy01XEBze3dpZHRoOjYwJX0udWstd2lkdGgtNC01XEBze3dpZHRoOjgwJX0udWstd2lkdGgtMS02XEBze3dpZHRoOmNhbGMoMTAwJSAqIDEgLyA2LjAwMSl9LnVrLXdpZHRoLTUtNlxAc3t3aWR0aDpjYWxjKDEwMCUgKiA1IC8gNi4wMDEpfS51ay13aWR0aC1zbWFsbFxAc3t3aWR0aDoxNTBweH0udWstd2lkdGgtbWVkaXVtXEBze3dpZHRoOjMwMHB4fS51ay13aWR0aC1sYXJnZVxAc3t3aWR0aDo0NTBweH0udWstd2lkdGgteGxhcmdlXEBze3dpZHRoOjYwMHB4fS51ay13aWR0aC0yeGxhcmdlXEBze3dpZHRoOjc1MHB4fS51ay13aWR0aC1hdXRvXEBze3dpZHRoOmF1dG99LnVrLXdpZHRoLWV4cGFuZFxAc3tmbGV4OjE7bWluLXdpZHRoOjFweH19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay13aWR0aC0xLTFcQG17d2lkdGg6MTAwJX0udWstd2lkdGgtMS0yXEBte3dpZHRoOjUwJX0udWstd2lkdGgtMS0zXEBte3dpZHRoOmNhbGMoMTAwJSAqIDEgLyAzLjAwMSl9LnVrLXdpZHRoLTItM1xAbXt3aWR0aDpjYWxjKDEwMCUgKiAyIC8gMy4wMDEpfS51ay13aWR0aC0xLTRcQG17d2lkdGg6MjUlfS51ay13aWR0aC0zLTRcQG17d2lkdGg6NzUlfS51ay13aWR0aC0xLTVcQG17d2lkdGg6MjAlfS51ay13aWR0aC0yLTVcQG17d2lkdGg6NDAlfS51ay13aWR0aC0zLTVcQG17d2lkdGg6NjAlfS51ay13aWR0aC00LTVcQG17d2lkdGg6ODAlfS51ay13aWR0aC0xLTZcQG17d2lkdGg6Y2FsYygxMDAlICogMSAvIDYuMDAxKX0udWstd2lkdGgtNS02XEBte3dpZHRoOmNhbGMoMTAwJSAqIDUgLyA2LjAwMSl9LnVrLXdpZHRoLXNtYWxsXEBte3dpZHRoOjE1MHB4fS51ay13aWR0aC1tZWRpdW1cQG17d2lkdGg6MzAwcHh9LnVrLXdpZHRoLWxhcmdlXEBte3dpZHRoOjQ1MHB4fS51ay13aWR0aC14bGFyZ2VcQG17d2lkdGg6NjAwcHh9LnVrLXdpZHRoLTJ4bGFyZ2VcQG17d2lkdGg6NzUwcHh9LnVrLXdpZHRoLWF1dG9cQG17d2lkdGg6YXV0b30udWstd2lkdGgtZXhwYW5kXEBte2ZsZXg6MTttaW4td2lkdGg6MXB4fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay13aWR0aC0xLTFcQGx7d2lkdGg6MTAwJX0udWstd2lkdGgtMS0yXEBse3dpZHRoOjUwJX0udWstd2lkdGgtMS0zXEBse3dpZHRoOmNhbGMoMTAwJSAqIDEgLyAzLjAwMSl9LnVrLXdpZHRoLTItM1xAbHt3aWR0aDpjYWxjKDEwMCUgKiAyIC8gMy4wMDEpfS51ay13aWR0aC0xLTRcQGx7d2lkdGg6MjUlfS51ay13aWR0aC0zLTRcQGx7d2lkdGg6NzUlfS51ay13aWR0aC0xLTVcQGx7d2lkdGg6MjAlfS51ay13aWR0aC0yLTVcQGx7d2lkdGg6NDAlfS51ay13aWR0aC0zLTVcQGx7d2lkdGg6NjAlfS51ay13aWR0aC00LTVcQGx7d2lkdGg6ODAlfS51ay13aWR0aC0xLTZcQGx7d2lkdGg6Y2FsYygxMDAlICogMSAvIDYuMDAxKX0udWstd2lkdGgtNS02XEBse3dpZHRoOmNhbGMoMTAwJSAqIDUgLyA2LjAwMSl9LnVrLXdpZHRoLXNtYWxsXEBse3dpZHRoOjE1MHB4fS51ay13aWR0aC1tZWRpdW1cQGx7d2lkdGg6MzAwcHh9LnVrLXdpZHRoLWxhcmdlXEBse3dpZHRoOjQ1MHB4fS51ay13aWR0aC14bGFyZ2VcQGx7d2lkdGg6NjAwcHh9LnVrLXdpZHRoLTJ4bGFyZ2VcQGx7d2lkdGg6NzUwcHh9LnVrLXdpZHRoLWF1dG9cQGx7d2lkdGg6YXV0b30udWstd2lkdGgtZXhwYW5kXEBse2ZsZXg6MTttaW4td2lkdGg6MXB4fX1AbWVkaWEgKG1pbi13aWR0aDoxNjAwcHgpey51ay13aWR0aC0xLTFcQHhse3dpZHRoOjEwMCV9LnVrLXdpZHRoLTEtMlxAeGx7d2lkdGg6NTAlfS51ay13aWR0aC0xLTNcQHhse3dpZHRoOmNhbGMoMTAwJSAqIDEgLyAzLjAwMSl9LnVrLXdpZHRoLTItM1xAeGx7d2lkdGg6Y2FsYygxMDAlICogMiAvIDMuMDAxKX0udWstd2lkdGgtMS00XEB4bHt3aWR0aDoyNSV9LnVrLXdpZHRoLTMtNFxAeGx7d2lkdGg6NzUlfS51ay13aWR0aC0xLTVcQHhse3dpZHRoOjIwJX0udWstd2lkdGgtMi01XEB4bHt3aWR0aDo0MCV9LnVrLXdpZHRoLTMtNVxAeGx7d2lkdGg6NjAlfS51ay13aWR0aC00LTVcQHhse3dpZHRoOjgwJX0udWstd2lkdGgtMS02XEB4bHt3aWR0aDpjYWxjKDEwMCUgKiAxIC8gNi4wMDEpfS51ay13aWR0aC01LTZcQHhse3dpZHRoOmNhbGMoMTAwJSAqIDUgLyA2LjAwMSl9LnVrLXdpZHRoLXNtYWxsXEB4bHt3aWR0aDoxNTBweH0udWstd2lkdGgtbWVkaXVtXEB4bHt3aWR0aDozMDBweH0udWstd2lkdGgtbGFyZ2VcQHhse3dpZHRoOjQ1MHB4fS51ay13aWR0aC14bGFyZ2VcQHhse3dpZHRoOjYwMHB4fS51ay13aWR0aC0yeGxhcmdlXEB4bHt3aWR0aDo3NTBweH0udWstd2lkdGgtYXV0b1xAeGx7d2lkdGg6YXV0b30udWstd2lkdGgtZXhwYW5kXEB4bHtmbGV4OjE7bWluLXdpZHRoOjFweH19LnVrLXdpZHRoLW1heC1jb250ZW50e3dpZHRoOm1heC1jb250ZW50fS51ay13aWR0aC1taW4tY29udGVudHt3aWR0aDptaW4tY29udGVudH1bY2xhc3MqPXVrLWhlaWdodF17Ym94LXNpemluZzpib3JkZXItYm94fS51ay1oZWlnaHQtMS0xe2hlaWdodDoxMDAlfS51ay1oZWlnaHQtdmlld3BvcnR7bWluLWhlaWdodDoxMDB2aH0udWstaGVpZ2h0LXZpZXdwb3J0LTJ7bWluLWhlaWdodDoyMDB2aH0udWstaGVpZ2h0LXZpZXdwb3J0LTN7bWluLWhlaWdodDozMDB2aH0udWstaGVpZ2h0LXZpZXdwb3J0LTR7bWluLWhlaWdodDo0MDB2aH0udWstaGVpZ2h0LXNtYWxse2hlaWdodDoxNTBweH0udWstaGVpZ2h0LW1lZGl1bXtoZWlnaHQ6MzAwcHh9LnVrLWhlaWdodC1sYXJnZXtoZWlnaHQ6NDUwcHh9LnVrLWhlaWdodC1tYXgtc21hbGx7bWF4LWhlaWdodDoxNTBweH0udWstaGVpZ2h0LW1heC1tZWRpdW17bWF4LWhlaWdodDozMDBweH0udWstaGVpZ2h0LW1heC1sYXJnZXttYXgtaGVpZ2h0OjQ1MHB4fS51ay10ZXh0LWxlYWR7Zm9udC1zaXplOjEuNXJlbTtsaW5lLWhlaWdodDoxLjU7Y29sb3I6IzMzM30udWstdGV4dC1tZXRhe2ZvbnQtc2l6ZTouODc1cmVtO2xpbmUtaGVpZ2h0OjEuNDtjb2xvcjojOTk5fS51ay10ZXh0LW1ldGEgYXtjb2xvcjojOTk5fS51ay10ZXh0LW1ldGEgYTpob3Zlcntjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lfS51ay10ZXh0LXNtYWxse2ZvbnQtc2l6ZTouODc1cmVtO2xpbmUtaGVpZ2h0OjEuNX0udWstdGV4dC1sYXJnZXtmb250LXNpemU6MS41cmVtO2xpbmUtaGVpZ2h0OjEuNX0udWstdGV4dC1kZWZhdWx0e2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjEuNX0udWstdGV4dC1saWdodHtmb250LXdlaWdodDozMDB9LnVrLXRleHQtbm9ybWFse2ZvbnQtd2VpZ2h0OjQwMH0udWstdGV4dC1ib2xke2ZvbnQtd2VpZ2h0OjcwMH0udWstdGV4dC1saWdodGVye2ZvbnQtd2VpZ2h0OmxpZ2h0ZXJ9LnVrLXRleHQtYm9sZGVye2ZvbnQtd2VpZ2h0OmJvbGRlcn0udWstdGV4dC1pdGFsaWN7Zm9udC1zdHlsZTppdGFsaWN9LnVrLXRleHQtY2FwaXRhbGl6ZXt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplIWltcG9ydGFudH0udWstdGV4dC11cHBlcmNhc2V7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlIWltcG9ydGFudH0udWstdGV4dC1sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlIWltcG9ydGFudH0udWstdGV4dC1kZWNvcmF0aW9uLW5vbmV7dGV4dC1kZWNvcmF0aW9uOm5vbmUhaW1wb3J0YW50fS51ay10ZXh0LW11dGVke2NvbG9yOiM5OTkhaW1wb3J0YW50fS51ay10ZXh0LWVtcGhhc2lze2NvbG9yOiMzMzMhaW1wb3J0YW50fS51ay10ZXh0LXByaW1hcnl7Y29sb3I6IzFlODdmMCFpbXBvcnRhbnR9LnVrLXRleHQtc2Vjb25kYXJ5e2NvbG9yOiMyMjIhaW1wb3J0YW50fS51ay10ZXh0LXN1Y2Nlc3N7Y29sb3I6IzMyZDI5NiFpbXBvcnRhbnR9LnVrLXRleHQtd2FybmluZ3tjb2xvcjojZmFhMDVhIWltcG9ydGFudH0udWstdGV4dC1kYW5nZXJ7Y29sb3I6I2YwNTA2ZSFpbXBvcnRhbnR9LnVrLXRleHQtYmFja2dyb3VuZHstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2NvbG9yOnRyYW5zcGFyZW50IWltcG9ydGFudDtkaXNwbGF5OmlubGluZS1ibG9jaztiYWNrZ3JvdW5kLWNvbG9yOiMxZTg3ZjB9LnVrLXRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9LnVrLXRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50fS51ay10ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlciFpbXBvcnRhbnR9LnVrLXRleHQtanVzdGlmeXt0ZXh0LWFsaWduOmp1c3RpZnkhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstdGV4dC1yaWdodFxAc3t0ZXh0LWFsaWduOnJpZ2h0IWltcG9ydGFudH0udWstdGV4dC1sZWZ0XEBze3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9LnVrLXRleHQtY2VudGVyXEBze3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay10ZXh0LXJpZ2h0XEBte3RleHQtYWxpZ246cmlnaHQhaW1wb3J0YW50fS51ay10ZXh0LWxlZnRcQG17dGV4dC1hbGlnbjpsZWZ0IWltcG9ydGFudH0udWstdGV4dC1jZW50ZXJcQG17dGV4dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay10ZXh0LXJpZ2h0XEBse3RleHQtYWxpZ246cmlnaHQhaW1wb3J0YW50fS51ay10ZXh0LWxlZnRcQGx7dGV4dC1hbGlnbjpsZWZ0IWltcG9ydGFudH0udWstdGV4dC1jZW50ZXJcQGx7dGV4dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxNjAwcHgpey51ay10ZXh0LXJpZ2h0XEB4bHt0ZXh0LWFsaWduOnJpZ2h0IWltcG9ydGFudH0udWstdGV4dC1sZWZ0XEB4bHt0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50fS51ay10ZXh0LWNlbnRlclxAeGx7dGV4dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50fX0udWstdGV4dC10b3B7dmVydGljYWwtYWxpZ246dG9wIWltcG9ydGFudH0udWstdGV4dC1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlIWltcG9ydGFudH0udWstdGV4dC1ib3R0b217dmVydGljYWwtYWxpZ246Ym90dG9tIWltcG9ydGFudH0udWstdGV4dC1iYXNlbGluZXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZSFpbXBvcnRhbnR9LnVrLXRleHQtbm93cmFwe3doaXRlLXNwYWNlOm5vd3JhcH0udWstdGV4dC10cnVuY2F0ZXttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9dGQudWstdGV4dC10cnVuY2F0ZSx0aC51ay10ZXh0LXRydW5jYXRle21heC13aWR0aDowfS51ay10ZXh0LWJyZWFre292ZXJmbG93LXdyYXA6YnJlYWstd29yZH10ZC51ay10ZXh0LWJyZWFrLHRoLnVrLXRleHQtYnJlYWt7d29yZC1icmVhazpicmVhay13b3JkfVtjbGFzcyo9dWstY29sdW1uLV17Y29sdW1uLWdhcDozMHB4fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2NsYXNzKj11ay1jb2x1bW4tXXtjb2x1bW4tZ2FwOjQwcHh9fVtjbGFzcyo9dWstY29sdW1uLV0gaW1ne3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCl9LnVrLWNvbHVtbi1kaXZpZGVye2NvbHVtbi1ydWxlOjFweCBzb2xpZCAjZTVlNWU1O2NvbHVtbi1nYXA6NjBweH1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1jb2x1bW4tZGl2aWRlcntjb2x1bW4tZ2FwOjgwcHh9fS51ay1jb2x1bW4tMS0ye2NvbHVtbi1jb3VudDoyfS51ay1jb2x1bW4tMS0ze2NvbHVtbi1jb3VudDozfS51ay1jb2x1bW4tMS00e2NvbHVtbi1jb3VudDo0fS51ay1jb2x1bW4tMS01e2NvbHVtbi1jb3VudDo1fS51ay1jb2x1bW4tMS02e2NvbHVtbi1jb3VudDo2fUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstY29sdW1uLTEtMlxAc3tjb2x1bW4tY291bnQ6Mn0udWstY29sdW1uLTEtM1xAc3tjb2x1bW4tY291bnQ6M30udWstY29sdW1uLTEtNFxAc3tjb2x1bW4tY291bnQ6NH0udWstY29sdW1uLTEtNVxAc3tjb2x1bW4tY291bnQ6NX0udWstY29sdW1uLTEtNlxAc3tjb2x1bW4tY291bnQ6Nn19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1jb2x1bW4tMS0yXEBte2NvbHVtbi1jb3VudDoyfS51ay1jb2x1bW4tMS0zXEBte2NvbHVtbi1jb3VudDozfS51ay1jb2x1bW4tMS00XEBte2NvbHVtbi1jb3VudDo0fS51ay1jb2x1bW4tMS01XEBte2NvbHVtbi1jb3VudDo1fS51ay1jb2x1bW4tMS02XEBte2NvbHVtbi1jb3VudDo2fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1jb2x1bW4tMS0yXEBse2NvbHVtbi1jb3VudDoyfS51ay1jb2x1bW4tMS0zXEBse2NvbHVtbi1jb3VudDozfS51ay1jb2x1bW4tMS00XEBse2NvbHVtbi1jb3VudDo0fS51ay1jb2x1bW4tMS01XEBse2NvbHVtbi1jb3VudDo1fS51ay1jb2x1bW4tMS02XEBse2NvbHVtbi1jb3VudDo2fX1AbWVkaWEgKG1pbi13aWR0aDoxNjAwcHgpey51ay1jb2x1bW4tMS0yXEB4bHtjb2x1bW4tY291bnQ6Mn0udWstY29sdW1uLTEtM1xAeGx7Y29sdW1uLWNvdW50OjN9LnVrLWNvbHVtbi0xLTRcQHhse2NvbHVtbi1jb3VudDo0fS51ay1jb2x1bW4tMS01XEB4bHtjb2x1bW4tY291bnQ6NX0udWstY29sdW1uLTEtNlxAeGx7Y29sdW1uLWNvdW50OjZ9fS51ay1jb2x1bW4tc3Bhbntjb2x1bW4tc3BhbjphbGx9W2RhdGEtdWstY292ZXJdLFt1ay1jb3Zlcl17bWF4LXdpZHRoOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NTAlO3RvcDo1MCU7LS11ay1wb3NpdGlvbi10cmFuc2xhdGUteDo1MCU7LS11ay1wb3NpdGlvbi10cmFuc2xhdGUteTotNTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXgpLHZhcigtLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS15KSl9aWZyYW1lW2RhdGEtdWstY292ZXJdLGlmcmFtZVt1ay1jb3Zlcl17cG9pbnRlci1ldmVudHM6bm9uZX0udWstY292ZXItY29udGFpbmVye292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0udWstYmFja2dyb3VuZC1kZWZhdWx0e2JhY2tncm91bmQtY29sb3I6I2ZmZn0udWstYmFja2dyb3VuZC1tdXRlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmOGY4Zjh9LnVrLWJhY2tncm91bmQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiMxZTg3ZjB9LnVrLWJhY2tncm91bmQtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6IzIyMn0udWstYmFja2dyb3VuZC1jb250YWluLC51ay1iYWNrZ3JvdW5kLWNvdmVyLC51ay1iYWNrZ3JvdW5kLWhlaWdodC0xLTEsLnVrLWJhY2tncm91bmQtd2lkdGgtMS0xe2JhY2tncm91bmQtcG9zaXRpb246NTAlIDUwJTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9LnVrLWJhY2tncm91bmQtY292ZXJ7YmFja2dyb3VuZC1zaXplOmNvdmVyfS51ay1iYWNrZ3JvdW5kLWNvbnRhaW57YmFja2dyb3VuZC1zaXplOmNvbnRhaW59LnVrLWJhY2tncm91bmQtd2lkdGgtMS0xe2JhY2tncm91bmQtc2l6ZToxMDAlfS51ay1iYWNrZ3JvdW5kLWhlaWdodC0xLTF7YmFja2dyb3VuZC1zaXplOmF1dG8gMTAwJX0udWstYmFja2dyb3VuZC10b3AtcmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjoxMDAlIDB9LnVrLWJhY2tncm91bmQtdG9wLWNlbnRlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJSAwfS51ay1iYWNrZ3JvdW5kLXRvcC1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246MCAwfS51ay1iYWNrZ3JvdW5kLWNlbnRlci1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCUgNTAlfS51ay1iYWNrZ3JvdW5kLWNlbnRlci1jZW50ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCUgNTAlfS51ay1iYWNrZ3JvdW5kLWNlbnRlci1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246MCA1MCV9LnVrLWJhY2tncm91bmQtYm90dG9tLXJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246MTAwJSAxMDAlfS51ay1iYWNrZ3JvdW5kLWJvdHRvbS1jZW50ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCUgMTAwJX0udWstYmFja2dyb3VuZC1ib3R0b20tbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMTAwJX0udWstYmFja2dyb3VuZC1ub3JlcGVhdHtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9LnVrLWJhY2tncm91bmQtZml4ZWR7YmFja2dyb3VuZC1hdHRhY2htZW50OmZpeGVkO2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVufUBtZWRpYSAocG9pbnRlcjpjb2Fyc2Upey51ay1iYWNrZ3JvdW5kLWZpeGVke2JhY2tncm91bmQtYXR0YWNobWVudDpzY3JvbGx9fUBtZWRpYSAobWF4LXdpZHRoOjYzOXB4KXsudWstYmFja2dyb3VuZC1pbWFnZVxAc3tiYWNrZ3JvdW5kLWltYWdlOm5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1heC13aWR0aDo5NTlweCl7LnVrLWJhY2tncm91bmQtaW1hZ2VcQG17YmFja2dyb3VuZC1pbWFnZTpub25lIWltcG9ydGFudH19QG1lZGlhIChtYXgtd2lkdGg6MTE5OXB4KXsudWstYmFja2dyb3VuZC1pbWFnZVxAbHtiYWNrZ3JvdW5kLWltYWdlOm5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1heC13aWR0aDoxNTk5cHgpey51ay1iYWNrZ3JvdW5kLWltYWdlXEB4bHtiYWNrZ3JvdW5kLWltYWdlOm5vbmUhaW1wb3J0YW50fX0udWstYmFja2dyb3VuZC1ibGVuZC1tdWx0aXBseXtiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6bXVsdGlwbHl9LnVrLWJhY2tncm91bmQtYmxlbmQtc2NyZWVue2JhY2tncm91bmQtYmxlbmQtbW9kZTpzY3JlZW59LnVrLWJhY2tncm91bmQtYmxlbmQtb3ZlcmxheXtiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6b3ZlcmxheX0udWstYmFja2dyb3VuZC1ibGVuZC1kYXJrZW57YmFja2dyb3VuZC1ibGVuZC1tb2RlOmRhcmtlbn0udWstYmFja2dyb3VuZC1ibGVuZC1saWdodGVue2JhY2tncm91bmQtYmxlbmQtbW9kZTpsaWdodGVufS51ay1iYWNrZ3JvdW5kLWJsZW5kLWNvbG9yLWRvZGdle2JhY2tncm91bmQtYmxlbmQtbW9kZTpjb2xvci1kb2RnZX0udWstYmFja2dyb3VuZC1ibGVuZC1jb2xvci1idXJue2JhY2tncm91bmQtYmxlbmQtbW9kZTpjb2xvci1idXJufS51ay1iYWNrZ3JvdW5kLWJsZW5kLWhhcmQtbGlnaHR7YmFja2dyb3VuZC1ibGVuZC1tb2RlOmhhcmQtbGlnaHR9LnVrLWJhY2tncm91bmQtYmxlbmQtc29mdC1saWdodHtiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6c29mdC1saWdodH0udWstYmFja2dyb3VuZC1ibGVuZC1kaWZmZXJlbmNle2JhY2tncm91bmQtYmxlbmQtbW9kZTpkaWZmZXJlbmNlfS51ay1iYWNrZ3JvdW5kLWJsZW5kLWV4Y2x1c2lvbntiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6ZXhjbHVzaW9ufS51ay1iYWNrZ3JvdW5kLWJsZW5kLWh1ZXtiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6aHVlfS51ay1iYWNrZ3JvdW5kLWJsZW5kLXNhdHVyYXRpb257YmFja2dyb3VuZC1ibGVuZC1tb2RlOnNhdHVyYXRpb259LnVrLWJhY2tncm91bmQtYmxlbmQtY29sb3J7YmFja2dyb3VuZC1ibGVuZC1tb2RlOmNvbG9yfS51ay1iYWNrZ3JvdW5kLWJsZW5kLWx1bWlub3NpdHl7YmFja2dyb3VuZC1ibGVuZC1tb2RlOmx1bWlub3NpdHl9W2NsYXNzKj11ay1hbGlnbl17ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjMwcHh9KitbY2xhc3MqPXVrLWFsaWduXXttYXJnaW4tdG9wOjMwcHh9LnVrLWFsaWduLWNlbnRlcnttYXJnaW4tcmlnaHQ6YXV0bzttYXJnaW4tbGVmdDphdXRvfS51ay1hbGlnbi1yaWdodHttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MzBweDtmbG9hdDpyaWdodH0udWstYWxpZ24tbGVmdHttYXJnaW4tdG9wOjA7bWFyZ2luLXJpZ2h0OjMwcHg7ZmxvYXQ6bGVmdH1AbWVkaWEgKG1pbi13aWR0aDo2NDBweCl7LnVrLWFsaWduLXJpZ2h0XEBze21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDozMHB4O2Zsb2F0OnJpZ2h0fS51ay1hbGlnbi1sZWZ0XEBze21hcmdpbi10b3A6MDttYXJnaW4tcmlnaHQ6MzBweDtmbG9hdDpsZWZ0fX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWFsaWduLXJpZ2h0XEBte21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDozMHB4O2Zsb2F0OnJpZ2h0fS51ay1hbGlnbi1sZWZ0XEBte21hcmdpbi10b3A6MDttYXJnaW4tcmlnaHQ6MzBweDtmbG9hdDpsZWZ0fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1hbGlnbi1yaWdodFxAbHttYXJnaW4tdG9wOjA7ZmxvYXQ6cmlnaHR9LnVrLWFsaWduLWxlZnRcQGx7bWFyZ2luLXRvcDowO2Zsb2F0OmxlZnR9LnVrLWFsaWduLXJpZ2h0LC51ay1hbGlnbi1yaWdodFxAbCwudWstYWxpZ24tcmlnaHRcQG0sLnVrLWFsaWduLXJpZ2h0XEBze21hcmdpbi1sZWZ0OjQwcHh9LnVrLWFsaWduLWxlZnQsLnVrLWFsaWduLWxlZnRcQGwsLnVrLWFsaWduLWxlZnRcQG0sLnVrLWFsaWduLWxlZnRcQHN7bWFyZ2luLXJpZ2h0OjQwcHh9fUBtZWRpYSAobWluLXdpZHRoOjE2MDBweCl7LnVrLWFsaWduLXJpZ2h0XEB4bHttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6NDBweDtmbG9hdDpyaWdodH0udWstYWxpZ24tbGVmdFxAeGx7bWFyZ2luLXRvcDowO21hcmdpbi1yaWdodDo0MHB4O2Zsb2F0OmxlZnR9fS51ay1zdmcsLnVrLXN2Zzpub3QoLnVrLXByZXNlcnZlKSBbZmlsbCo9JyMnXTpub3QoLnVrLXByZXNlcnZlKXtmaWxsOmN1cnJlbnRjb2xvcn0udWstc3ZnOm5vdCgudWstcHJlc2VydmUpIFtzdHJva2UqPScjJ106bm90KC51ay1wcmVzZXJ2ZSl7c3Ryb2tlOmN1cnJlbnRjb2xvcn0udWstc3Zne3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX0udWstcGFuZWx7ZGlzcGxheTpmbG93LXJvb3Q7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94fS51ay1wYW5lbD46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLXBhbmVsLXNjcm9sbGFibGV7aGVpZ2h0OjE3MHB4O3BhZGRpbmc6MTBweDtib3JkZXI6MXB4IHNvbGlkICNlNWU1ZTU7b3ZlcmZsb3c6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDtyZXNpemU6Ym90aH0udWstY2xlYXJmaXg6OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6dGFibGUtY2VsbH0udWstY2xlYXJmaXg6OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTp0YWJsZTtjbGVhcjpib3RofS51ay1mbG9hdC1yaWdodHtmbG9hdDpyaWdodH0udWstZmxvYXQtbGVmdHtmbG9hdDpsZWZ0fVtjbGFzcyo9dWstZmxvYXQtXXttYXgtd2lkdGg6MTAwJX0udWstb3ZlcmZsb3ctaGlkZGVue292ZXJmbG93OmhpZGRlbn0udWstb3ZlcmZsb3ctYXV0b3tvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS51ay1vdmVyZmxvdy1hdXRvPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstYm94LXNpemluZy1jb250ZW50e2JveC1zaXppbmc6Y29udGVudC1ib3h9LnVrLWJveC1zaXppbmctYm9yZGVye2JveC1zaXppbmc6Ym9yZGVyLWJveH0udWstcmVzaXple3Jlc2l6ZTpib3RofS51ay1yZXNpemUtaG9yaXpvbnRhbHtyZXNpemU6aG9yaXpvbnRhbH0udWstcmVzaXplLXZlcnRpY2Fse3Jlc2l6ZTp2ZXJ0aWNhbH0udWstZGlzcGxheS1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0udWstZGlzcGxheS1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fS51ay1kaXNwbGF5LWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9W2NsYXNzKj11ay1pbmxpbmVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO21heC13aWR0aDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTstd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVufS51ay1pbmxpbmUtY2xpcHtvdmVyZmxvdzpoaWRkZW59LnVrLXByZXNlcnZlLXdpZHRoLC51ay1wcmVzZXJ2ZS13aWR0aCBjYW52YXMsLnVrLXByZXNlcnZlLXdpZHRoIGltZywudWstcHJlc2VydmUtd2lkdGggc3ZnLC51ay1wcmVzZXJ2ZS13aWR0aCB2aWRlb3ttYXgtd2lkdGg6bm9uZX0udWstcmVzcG9uc2l2ZS1oZWlnaHQsLnVrLXJlc3BvbnNpdmUtd2lkdGh7Ym94LXNpemluZzpib3JkZXItYm94fS51ay1yZXNwb25zaXZlLXdpZHRoe21heC13aWR0aDoxMDAlIWltcG9ydGFudDtoZWlnaHQ6YXV0b30udWstcmVzcG9uc2l2ZS1oZWlnaHR7bWF4LWhlaWdodDoxMDAlO3dpZHRoOmF1dG87bWF4LXdpZHRoOm5vbmV9W2RhdGEtdWstcmVzcG9uc2l2ZV0sW3VrLXJlc3BvbnNpdmVde21heC13aWR0aDoxMDAlfS51ay1vYmplY3QtY292ZXJ7b2JqZWN0LWZpdDpjb3Zlcn0udWstb2JqZWN0LWNvbnRhaW57b2JqZWN0LWZpdDpjb250YWlufS51ay1vYmplY3QtZmlsbHtvYmplY3QtZml0OmZpbGx9LnVrLW9iamVjdC1ub25le29iamVjdC1maXQ6bm9uZX0udWstb2JqZWN0LXNjYWxlLWRvd257b2JqZWN0LWZpdDpzY2FsZS1kb3dufS51ay1vYmplY3QtdG9wLXJpZ2h0e29iamVjdC1wb3NpdGlvbjoxMDAlIDB9LnVrLW9iamVjdC10b3AtY2VudGVye29iamVjdC1wb3NpdGlvbjo1MCUgMH0udWstb2JqZWN0LXRvcC1sZWZ0e29iamVjdC1wb3NpdGlvbjowJSAwfS51ay1vYmplY3QtY2VudGVyLXJpZ2h0e29iamVjdC1wb3NpdGlvbjoxMDAlIDUwJX0udWstb2JqZWN0LWNlbnRlci1jZW50ZXJ7b2JqZWN0LXBvc2l0aW9uOjUwJSA1MCV9LnVrLW9iamVjdC1jZW50ZXItbGVmdHtvYmplY3QtcG9zaXRpb246MCUgNTAlfS51ay1vYmplY3QtYm90dG9tLXJpZ2h0e29iamVjdC1wb3NpdGlvbjoxMDAlIDEwMCV9LnVrLW9iamVjdC1ib3R0b20tY2VudGVye29iamVjdC1wb3NpdGlvbjo1MCUgMTAwJX0udWstb2JqZWN0LWJvdHRvbS1sZWZ0e29iamVjdC1wb3NpdGlvbjowJSAxMDAlfS51ay1ib3JkZXItY2lyY2xle2JvcmRlci1yYWRpdXM6NTAlfS51ay1ib3JkZXItcGlsbHtib3JkZXItcmFkaXVzOjUwMHB4fS51ay1ib3JkZXItcm91bmRlZHtib3JkZXItcmFkaXVzOjVweH0udWstaW5saW5lLWNsaXBbY2xhc3MqPXVrLWJvcmRlci1dey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9LnVrLWJveC1zaGFkb3ctc21hbGx7Ym94LXNoYWRvdzowIDJweCA4cHggcmdiYSgwLDAsMCwuMDgpfS51ay1ib3gtc2hhZG93LW1lZGl1bXtib3gtc2hhZG93OjAgNXB4IDE1cHggcmdiYSgwLDAsMCwuMDgpfS51ay1ib3gtc2hhZG93LWxhcmdle2JveC1zaGFkb3c6MCAxNHB4IDI1cHggcmdiYSgwLDAsMCwuMTYpfS51ay1ib3gtc2hhZG93LXhsYXJnZXtib3gtc2hhZG93OjAgMjhweCA1MHB4IHJnYmEoMCwwLDAsLjE2KX1bY2xhc3MqPXVrLWJveC1zaGFkb3ctaG92ZXJde3RyYW5zaXRpb246Ym94LXNoYWRvdyAuMXMgZWFzZS1pbi1vdXR9LnVrLWJveC1zaGFkb3ctaG92ZXItc21hbGw6aG92ZXJ7Ym94LXNoYWRvdzowIDJweCA4cHggcmdiYSgwLDAsMCwuMDgpfS51ay1ib3gtc2hhZG93LWhvdmVyLW1lZGl1bTpob3Zlcntib3gtc2hhZG93OjAgNXB4IDE1cHggcmdiYSgwLDAsMCwuMDgpfS51ay1ib3gtc2hhZG93LWhvdmVyLWxhcmdlOmhvdmVye2JveC1zaGFkb3c6MCAxNHB4IDI1cHggcmdiYSgwLDAsMCwuMTYpfS51ay1ib3gtc2hhZG93LWhvdmVyLXhsYXJnZTpob3Zlcntib3gtc2hhZG93OjAgMjhweCA1MHB4IHJnYmEoMCwwLDAsLjE2KX1Ac3VwcG9ydHMgKGZpbHRlcjpibHVyKDApKXsudWstYm94LXNoYWRvdy1ib3R0b217ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDowO21heC13aWR0aDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0udWstYm94LXNoYWRvdy1ib3R0b206OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOi0zMHB4O3JpZ2h0OjA7bGVmdDowO3otaW5kZXg6LTE7aGVpZ2h0OjMwcHg7Ym9yZGVyLXJhZGl1czoxMDAlO2JhY2tncm91bmQ6IzQ0NDtmaWx0ZXI6Ymx1cigyMHB4KTt3aWxsLWNoYW5nZTpmaWx0ZXJ9fS51ay1kcm9wY2FwOjpmaXJzdC1sZXR0ZXIsLnVrLWRyb3BjYXA+cDpmaXJzdC1vZi10eXBlOjpmaXJzdC1sZXR0ZXJ7ZGlzcGxheTpibG9jazttYXJnaW4tbGVmdDoxMHB4O2Zsb2F0OnJpZ2h0O2ZvbnQtc2l6ZTo0LjVlbTtsaW5lLWhlaWdodDoxO21hcmdpbi1ib3R0b206LTJweH1ALW1vei1kb2N1bWVudCB1cmwtcHJlZml4KCl7LnVrLWRyb3BjYXA6OmZpcnN0LWxldHRlciwudWstZHJvcGNhcD5wOmZpcnN0LW9mLXR5cGU6OmZpcnN0LWxldHRlcnttYXJnaW4tdG9wOjEuMSV9fS51ay1sb2dve2ZvbnQtc2l6ZToxLjVyZW07Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsIlNlZ29lIFVJIixSb2JvdG8sIkhlbHZldGljYSBOZXVlIixBcmlhbCwiTm90byBTYW5zIixzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7Y29sb3I6IzMzMzt0ZXh0LWRlY29yYXRpb246bm9uZX06d2hlcmUoLnVrLWxvZ28pe2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0udWstbG9nbzpob3Zlcntjb2xvcjojMzMzO3RleHQtZGVjb3JhdGlvbjpub25lfS51ay1sb2dvIDp3aGVyZShpbWcsc3ZnLHZpZGVvKXtkaXNwbGF5OmJsb2NrfS51ay1sb2dvLWludmVyc2V7ZGlzcGxheTpub25lfS51ay1kaXNhYmxlZHtwb2ludGVyLWV2ZW50czpub25lfS51ay1kcmFnLC51ay1kcmFnICp7Y3Vyc29yOm1vdmV9LnVrLWRyYWcgaWZyYW1le3BvaW50ZXItZXZlbnRzOm5vbmV9LnVrLWRyYWdvdmVye2JveC1zaGFkb3c6MCAwIDIwcHggcmdiYSgxMDAsMTAwLDEwMCwuMyl9LnVrLWJsZW5kLW11bHRpcGx5e21peC1ibGVuZC1tb2RlOm11bHRpcGx5fS51ay1ibGVuZC1zY3JlZW57bWl4LWJsZW5kLW1vZGU6c2NyZWVufS51ay1ibGVuZC1vdmVybGF5e21peC1ibGVuZC1tb2RlOm92ZXJsYXl9LnVrLWJsZW5kLWRhcmtlbnttaXgtYmxlbmQtbW9kZTpkYXJrZW59LnVrLWJsZW5kLWxpZ2h0ZW57bWl4LWJsZW5kLW1vZGU6bGlnaHRlbn0udWstYmxlbmQtY29sb3ItZG9kZ2V7bWl4LWJsZW5kLW1vZGU6Y29sb3ItZG9kZ2V9LnVrLWJsZW5kLWNvbG9yLWJ1cm57bWl4LWJsZW5kLW1vZGU6Y29sb3ItYnVybn0udWstYmxlbmQtaGFyZC1saWdodHttaXgtYmxlbmQtbW9kZTpoYXJkLWxpZ2h0fS51ay1ibGVuZC1zb2Z0LWxpZ2h0e21peC1ibGVuZC1tb2RlOnNvZnQtbGlnaHR9LnVrLWJsZW5kLWRpZmZlcmVuY2V7bWl4LWJsZW5kLW1vZGU6ZGlmZmVyZW5jZX0udWstYmxlbmQtZXhjbHVzaW9ue21peC1ibGVuZC1tb2RlOmV4Y2x1c2lvbn0udWstYmxlbmQtaHVle21peC1ibGVuZC1tb2RlOmh1ZX0udWstYmxlbmQtc2F0dXJhdGlvbnttaXgtYmxlbmQtbW9kZTpzYXR1cmF0aW9ufS51ay1ibGVuZC1jb2xvcnttaXgtYmxlbmQtbW9kZTpjb2xvcn0udWstYmxlbmQtbHVtaW5vc2l0eXttaXgtYmxlbmQtbW9kZTpsdW1pbm9zaXR5fS51ay10cmFuc2Zvcm0tY2VudGVye3RyYW5zZm9ybTp0cmFuc2xhdGUoNTAlLC01MCUpfS51ay10cmFuc2Zvcm0tb3JpZ2luLXRvcC1yaWdodHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMH0udWstdHJhbnNmb3JtLW9yaWdpbi10b3AtY2VudGVye3RyYW5zZm9ybS1vcmlnaW46NTAlIDB9LnVrLXRyYW5zZm9ybS1vcmlnaW4tdG9wLWxlZnR7dHJhbnNmb3JtLW9yaWdpbjowJSAwfS51ay10cmFuc2Zvcm0tb3JpZ2luLWNlbnRlci1yaWdodHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgNTAlfS51ay10cmFuc2Zvcm0tb3JpZ2luLWNlbnRlci1sZWZ0e3RyYW5zZm9ybS1vcmlnaW46MCUgNTAlfS51ay10cmFuc2Zvcm0tb3JpZ2luLWJvdHRvbS1yaWdodHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX0udWstdHJhbnNmb3JtLW9yaWdpbi1ib3R0b20tY2VudGVye3RyYW5zZm9ybS1vcmlnaW46NTAlIDEwMCV9LnVrLXRyYW5zZm9ybS1vcmlnaW4tYm90dG9tLWxlZnR7dHJhbnNmb3JtLW9yaWdpbjowJSAxMDAlfS51ay1mbGV4e2Rpc3BsYXk6ZmxleH0udWstZmxleC1pbmxpbmV7ZGlzcGxheTppbmxpbmUtZmxleH0udWstZmxleC1yaWdodHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0udWstZmxleC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0udWstZmxleC1sZWZ0e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0udWstZmxleC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS51ay1mbGV4LWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstZmxleC1yaWdodFxAc3tqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0udWstZmxleC1jZW50ZXJcQHN7anVzdGlmeS1jb250ZW50OmNlbnRlcn0udWstZmxleC1sZWZ0XEBze2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0udWstZmxleC1iZXR3ZWVuXEBze2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS51ay1mbGV4LWFyb3VuZFxAc3tqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWZsZXgtcmlnaHRcQG17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LnVrLWZsZXgtY2VudGVyXEBte2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnVrLWZsZXgtbGVmdFxAbXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LnVrLWZsZXgtYmV0d2VlblxAbXtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0udWstZmxleC1hcm91bmRcQG17anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstZmxleC1yaWdodFxAbHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0udWstZmxleC1jZW50ZXJcQGx7anVzdGlmeS1jb250ZW50OmNlbnRlcn0udWstZmxleC1sZWZ0XEBse2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0udWstZmxleC1iZXR3ZWVuXEBse2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS51ay1mbGV4LWFyb3VuZFxAbHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfX1AbWVkaWEgKG1pbi13aWR0aDoxNjAwcHgpey51ay1mbGV4LXJpZ2h0XEB4bHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0udWstZmxleC1jZW50ZXJcQHhse2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnVrLWZsZXgtbGVmdFxAeGx7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS51ay1mbGV4LWJldHdlZW5cQHhse2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS51ay1mbGV4LWFyb3VuZFxAeGx7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH19LnVrLWZsZXgtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS51ay1mbGV4LXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS51ay1mbGV4LW1pZGRsZXthbGlnbi1pdGVtczpjZW50ZXJ9LnVrLWZsZXgtYm90dG9te2FsaWduLWl0ZW1zOmZsZXgtZW5kfS51ay1mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LnVrLWZsZXgtcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9LnVrLWZsZXgtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0udWstZmxleC1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZX0udWstZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcH0udWstZmxleC13cmFwe2ZsZXgtd3JhcDp3cmFwfS51ay1mbGV4LXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlfS51ay1mbGV4LXdyYXAtc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2h9LnVrLWZsZXgtd3JhcC10b3B7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0fS51ay1mbGV4LXdyYXAtbWlkZGxle2FsaWduLWNvbnRlbnQ6Y2VudGVyfS51ay1mbGV4LXdyYXAtYm90dG9te2FsaWduLWNvbnRlbnQ6ZmxleC1lbmR9LnVrLWZsZXgtd3JhcC1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0udWstZmxleC13cmFwLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZH0udWstZmxleC1maXJzdHtvcmRlcjotMX0udWstZmxleC1sYXN0e29yZGVyOjk5fUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstZmxleC1maXJzdFxAc3tvcmRlcjotMX0udWstZmxleC1sYXN0XEBze29yZGVyOjk5fX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWZsZXgtZmlyc3RcQG17b3JkZXI6LTF9LnVrLWZsZXgtbGFzdFxAbXtvcmRlcjo5OX19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstZmxleC1maXJzdFxAbHtvcmRlcjotMX0udWstZmxleC1sYXN0XEBse29yZGVyOjk5fX1AbWVkaWEgKG1pbi13aWR0aDoxNjAwcHgpey51ay1mbGV4LWZpcnN0XEB4bHtvcmRlcjotMX0udWstZmxleC1sYXN0XEB4bHtvcmRlcjo5OX19LnVrLWZsZXgtbm9uZXtmbGV4Om5vbmV9LnVrLWZsZXgtYXV0b3tmbGV4OmF1dG99LnVrLWZsZXgtMXtmbGV4OjF9LnVrLW1hcmdpbnttYXJnaW4tYm90dG9tOjIwcHh9KisudWstbWFyZ2lue21hcmdpbi10b3A6MjBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi10b3B7bWFyZ2luLXRvcDoyMHB4IWltcG9ydGFudH0udWstbWFyZ2luLWJvdHRvbXttYXJnaW4tYm90dG9tOjIwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tcmlnaHR7bWFyZ2luLXJpZ2h0OjIwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tbGVmdHttYXJnaW4tbGVmdDoyMHB4IWltcG9ydGFudH0udWstbWFyZ2luLXNtYWxse21hcmdpbi1ib3R0b206MTBweH0qKy51ay1tYXJnaW4tc21hbGx7bWFyZ2luLXRvcDoxMHB4IWltcG9ydGFudH0udWstbWFyZ2luLXNtYWxsLXRvcHttYXJnaW4tdG9wOjEwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tc21hbGwtYm90dG9te21hcmdpbi1ib3R0b206MTBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1zbWFsbC1yaWdodHttYXJnaW4tcmlnaHQ6MTBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1zbWFsbC1sZWZ0e21hcmdpbi1sZWZ0OjEwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tbWVkaXVte21hcmdpbi1ib3R0b206NDBweH0qKy51ay1tYXJnaW4tbWVkaXVte21hcmdpbi10b3A6NDBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1tZWRpdW0tdG9we21hcmdpbi10b3A6NDBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1tZWRpdW0tYm90dG9te21hcmdpbi1ib3R0b206NDBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1tZWRpdW0tcmlnaHR7bWFyZ2luLXJpZ2h0OjQwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tbWVkaXVtLWxlZnR7bWFyZ2luLWxlZnQ6NDBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1sYXJnZXttYXJnaW4tYm90dG9tOjQwcHh9KisudWstbWFyZ2luLWxhcmdle21hcmdpbi10b3A6NDBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1sYXJnZS10b3B7bWFyZ2luLXRvcDo0MHB4IWltcG9ydGFudH0udWstbWFyZ2luLWxhcmdlLWJvdHRvbXttYXJnaW4tYm90dG9tOjQwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tbGFyZ2UtcmlnaHR7bWFyZ2luLXJpZ2h0OjQwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tbGFyZ2UtbGVmdHttYXJnaW4tbGVmdDo0MHB4IWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1tYXJnaW4tbGFyZ2V7bWFyZ2luLWJvdHRvbTo3MHB4fSorLnVrLW1hcmdpbi1sYXJnZXttYXJnaW4tdG9wOjcwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tbGFyZ2UtdG9we21hcmdpbi10b3A6NzBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1sYXJnZS1ib3R0b217bWFyZ2luLWJvdHRvbTo3MHB4IWltcG9ydGFudH0udWstbWFyZ2luLWxhcmdlLXJpZ2h0e21hcmdpbi1yaWdodDo3MHB4IWltcG9ydGFudH0udWstbWFyZ2luLWxhcmdlLWxlZnR7bWFyZ2luLWxlZnQ6NzBweCFpbXBvcnRhbnR9fS51ay1tYXJnaW4teGxhcmdle21hcmdpbi1ib3R0b206NzBweH0qKy51ay1tYXJnaW4teGxhcmdle21hcmdpbi10b3A6NzBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi14bGFyZ2UtdG9we21hcmdpbi10b3A6NzBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi14bGFyZ2UtYm90dG9te21hcmdpbi1ib3R0b206NzBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi14bGFyZ2UtcmlnaHR7bWFyZ2luLXJpZ2h0OjcwcHghaW1wb3J0YW50fS51ay1tYXJnaW4teGxhcmdlLWxlZnR7bWFyZ2luLWxlZnQ6NzBweCFpbXBvcnRhbnR9QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstbWFyZ2luLXhsYXJnZXttYXJnaW4tYm90dG9tOjE0MHB4fSorLnVrLW1hcmdpbi14bGFyZ2V7bWFyZ2luLXRvcDoxNDBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi14bGFyZ2UtdG9we21hcmdpbi10b3A6MTQwcHghaW1wb3J0YW50fS51ay1tYXJnaW4teGxhcmdlLWJvdHRvbXttYXJnaW4tYm90dG9tOjE0MHB4IWltcG9ydGFudH0udWstbWFyZ2luLXhsYXJnZS1yaWdodHttYXJnaW4tcmlnaHQ6MTQwcHghaW1wb3J0YW50fS51ay1tYXJnaW4teGxhcmdlLWxlZnR7bWFyZ2luLWxlZnQ6MTQwcHghaW1wb3J0YW50fX0udWstbWFyZ2luLWF1dG97bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50O21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fS51ay1tYXJnaW4tYXV0by10b3B7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH0udWstbWFyZ2luLWF1dG8tYm90dG9te21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9LnVrLW1hcmdpbi1hdXRvLXJpZ2h0e21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH0udWstbWFyZ2luLWF1dG8tbGVmdHttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH0udWstbWFyZ2luLWF1dG8tdmVydGljYWx7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudDttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstbWFyZ2luLWF1dG9cQHN7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50O21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fS51ay1tYXJnaW4tYXV0by1yaWdodFxAc3ttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9LnVrLW1hcmdpbi1hdXRvLWxlZnRcQHN7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstbWFyZ2luLWF1dG9cQG17bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50O21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fS51ay1tYXJnaW4tYXV0by1yaWdodFxAbXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9LnVrLW1hcmdpbi1hdXRvLWxlZnRcQG17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LnVrLW1hcmdpbi1hdXRvXEBse21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudDttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH0udWstbWFyZ2luLWF1dG8tcmlnaHRcQGx7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fS51ay1tYXJnaW4tYXV0by1sZWZ0XEBse21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxNjAwcHgpey51ay1tYXJnaW4tYXV0b1xAeGx7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50O21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fS51ay1tYXJnaW4tYXV0by1yaWdodFxAeGx7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fS51ay1tYXJnaW4tYXV0by1sZWZ0XEB4bHttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH19LnVrLW1hcmdpbi1yZW1vdmV7bWFyZ2luOjAhaW1wb3J0YW50fS51ay1tYXJnaW4tcmVtb3ZlLXRvcHttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS51ay1tYXJnaW4tcmVtb3ZlLWJvdHRvbXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fS51ay1tYXJnaW4tcmVtb3ZlLXJpZ2h0e21hcmdpbi1yaWdodDowIWltcG9ydGFudH0udWstbWFyZ2luLXJlbW92ZS1sZWZ0e21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fS51ay1tYXJnaW4tcmVtb3ZlLXZlcnRpY2Fse21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH0udWstbWFyZ2luLXJlbW92ZS1hZGphY2VudCsqLC51ay1tYXJnaW4tcmVtb3ZlLWZpcnN0LWNoaWxkPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS51ay1tYXJnaW4tcmVtb3ZlLWxhc3QtY2hpbGQ+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo2NDBweCl7LnVrLW1hcmdpbi1yZW1vdmUtcmlnaHRcQHN7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fS51ay1tYXJnaW4tcmVtb3ZlLWxlZnRcQHN7bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstbWFyZ2luLXJlbW92ZS1yaWdodFxAbXttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1yZW1vdmUtbGVmdFxAbXttYXJnaW4tbGVmdDowIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstbWFyZ2luLXJlbW92ZS1yaWdodFxAbHttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1yZW1vdmUtbGVmdFxAbHttYXJnaW4tbGVmdDowIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTYwMHB4KXsudWstbWFyZ2luLXJlbW92ZS1yaWdodFxAeGx7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fS51ay1tYXJnaW4tcmVtb3ZlLWxlZnRcQHhse21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fX0udWstcGFkZGluZ3twYWRkaW5nOjMwcHh9QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstcGFkZGluZ3twYWRkaW5nOjQwcHh9fS51ay1wYWRkaW5nLXNtYWxse3BhZGRpbmc6MTVweH0udWstcGFkZGluZy1sYXJnZXtwYWRkaW5nOjQwcHh9QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstcGFkZGluZy1sYXJnZXtwYWRkaW5nOjcwcHh9fS51ay1wYWRkaW5nLXJlbW92ZXtwYWRkaW5nOjAhaW1wb3J0YW50fS51ay1wYWRkaW5nLXJlbW92ZS10b3B7cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9LnVrLXBhZGRpbmctcmVtb3ZlLWJvdHRvbXtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH0udWstcGFkZGluZy1yZW1vdmUtcmlnaHR7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH0udWstcGFkZGluZy1yZW1vdmUtbGVmdHtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9LnVrLXBhZGRpbmctcmVtb3ZlLXZlcnRpY2Fse3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fS51ay1wYWRkaW5nLXJlbW92ZS1ob3Jpem9udGFse3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnQ7cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50fTpyb290ey0tdWstcG9zaXRpb24tbWFyZ2luLW9mZnNldDowcHh9W2NsYXNzKj11ay1wb3NpdGlvbi1ib3R0b21dLFtjbGFzcyo9dWstcG9zaXRpb24tY2VudGVyXSxbY2xhc3MqPXVrLXBvc2l0aW9uLWxlZnRdLFtjbGFzcyo9dWstcG9zaXRpb24tcmlnaHRdLFtjbGFzcyo9dWstcG9zaXRpb24tdG9wXXtwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7bWF4LXdpZHRoOmNhbGMoMTAwJSAtICh2YXIoLS11ay1wb3NpdGlvbi1tYXJnaW4tb2Zmc2V0KSAqIDIpKTtib3gtc2l6aW5nOmJvcmRlci1ib3h9LnVrLXBvc2l0aW9uLXRvcHt0b3A6MDtyaWdodDowO2xlZnQ6MH0udWstcG9zaXRpb24tYm90dG9te2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowfS51ay1wb3NpdGlvbi1yaWdodHt0b3A6MDtib3R0b206MDtyaWdodDowfS51ay1wb3NpdGlvbi1sZWZ0e3RvcDowO2JvdHRvbTowO2xlZnQ6MH0udWstcG9zaXRpb24tdG9wLXJpZ2h0e3RvcDowO3JpZ2h0OjB9LnVrLXBvc2l0aW9uLXRvcC1sZWZ0e3RvcDowO2xlZnQ6MH0udWstcG9zaXRpb24tYm90dG9tLXJpZ2h0e2JvdHRvbTowO3JpZ2h0OjB9LnVrLXBvc2l0aW9uLWJvdHRvbS1sZWZ0e2JvdHRvbTowO2xlZnQ6MH0udWstcG9zaXRpb24tY2VudGVye3RvcDpjYWxjKDUwJSAtIHZhcigtLXVrLXBvc2l0aW9uLW1hcmdpbi1vZmZzZXQpKTtyaWdodDpjYWxjKDUwJSAtIHZhcigtLXVrLXBvc2l0aW9uLW1hcmdpbi1vZmZzZXQpKTstLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS14OjUwJTstLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS15Oi01MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS11ay1wb3NpdGlvbi10cmFuc2xhdGUteCksdmFyKC0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXkpKTt3aWR0aDptYXgtY29udGVudH1bY2xhc3MqPXVrLXBvc2l0aW9uLWNlbnRlci1sZWZ0XSxbY2xhc3MqPXVrLXBvc2l0aW9uLWNlbnRlci1yaWdodF17dG9wOmNhbGMoNTAlIC0gdmFyKC0tdWstcG9zaXRpb24tbWFyZ2luLW9mZnNldCkpOy0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXk6LTUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsdmFyKC0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXkpKX0udWstcG9zaXRpb24tY2VudGVyLXJpZ2h0e3JpZ2h0OjB9LnVrLXBvc2l0aW9uLWNlbnRlci1sZWZ0e2xlZnQ6MH0udWstcG9zaXRpb24tY2VudGVyLXJpZ2h0LW91dHtsZWZ0OjEwMCU7d2lkdGg6bWF4LWNvbnRlbnR9LnVrLXBvc2l0aW9uLWNlbnRlci1sZWZ0LW91dHtyaWdodDoxMDAlO3dpZHRoOm1heC1jb250ZW50fS51ay1wb3NpdGlvbi1ib3R0b20tY2VudGVyLC51ay1wb3NpdGlvbi10b3AtY2VudGVye3JpZ2h0OmNhbGMoNTAlIC0gdmFyKC0tdWstcG9zaXRpb24tbWFyZ2luLW9mZnNldCkpOy0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXg6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXgpLDApO3dpZHRoOm1heC1jb250ZW50fS51ay1wb3NpdGlvbi10b3AtY2VudGVye3RvcDowfS51ay1wb3NpdGlvbi1ib3R0b20tY2VudGVye2JvdHRvbTowfS51ay1wb3NpdGlvbi1jb3Zlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MH0udWstcG9zaXRpb24tc21hbGx7bWFyZ2luOjE1cHg7LS11ay1wb3NpdGlvbi1tYXJnaW4tb2Zmc2V0OjE1cHh9LnVrLXBvc2l0aW9uLW1lZGl1bXttYXJnaW46MzBweDstLXVrLXBvc2l0aW9uLW1hcmdpbi1vZmZzZXQ6MzBweH0udWstcG9zaXRpb24tbGFyZ2V7bWFyZ2luOjMwcHg7LS11ay1wb3NpdGlvbi1tYXJnaW4tb2Zmc2V0OjMwcHh9QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstcG9zaXRpb24tbGFyZ2V7bWFyZ2luOjUwcHg7LS11ay1wb3NpdGlvbi1tYXJnaW4tb2Zmc2V0OjUwcHh9fS51ay1wb3NpdGlvbi1yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZSFpbXBvcnRhbnR9LnVrLXBvc2l0aW9uLWFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudH0udWstcG9zaXRpb24tZml4ZWR7cG9zaXRpb246Zml4ZWQhaW1wb3J0YW50fS51ay1wb3NpdGlvbi1zdGlja3l7cG9zaXRpb246c3RpY2t5IWltcG9ydGFudH0udWstcG9zaXRpb24tei1pbmRleHt6LWluZGV4OjF9LnVrLXBvc2l0aW9uLXotaW5kZXgtemVyb3t6LWluZGV4OjB9LnVrLXBvc2l0aW9uLXotaW5kZXgtbmVnYXRpdmV7ei1pbmRleDotMX06d2hlcmUoLnVrLXRyYW5zaXRpb24tZmFkZSksOndoZXJlKFtjbGFzcyo9dWstdHJhbnNpdGlvbi1zY2FsZV0pLDp3aGVyZShbY2xhc3MqPXVrLXRyYW5zaXRpb24tc2xpZGVdKXstLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS14OjA7LS11ay1wb3NpdGlvbi10cmFuc2xhdGUteTowfS51ay10cmFuc2l0aW9uLWZhZGUsW2NsYXNzKj11ay10cmFuc2l0aW9uLXNjYWxlXSxbY2xhc3MqPXVrLXRyYW5zaXRpb24tc2xpZGVdey0tdWstdHJhbnNsYXRlLXg6MDstLXVrLXRyYW5zbGF0ZS15OjA7LS11ay1zY2FsZS14OjE7LS11ay1zY2FsZS15OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS11ay1wb3NpdGlvbi10cmFuc2xhdGUteCksdmFyKC0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXkpKSB0cmFuc2xhdGUodmFyKC0tdWstdHJhbnNsYXRlLXgpLHZhcigtLXVrLXRyYW5zbGF0ZS15KSkgc2NhbGUodmFyKC0tdWstc2NhbGUteCksdmFyKC0tdWstc2NhbGUteSkpO3RyYW5zaXRpb246LjNzIGVhc2Utb3V0O3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eSx0cmFuc2Zvcm0sZmlsdGVyO29wYWNpdHk6MH0udWstdHJhbnNpdGlvbi1hY3RpdmUudWstYWN0aXZlIC51ay10cmFuc2l0aW9uLWZhZGUsLnVrLXRyYW5zaXRpb24tdG9nZ2xlIC51ay10cmFuc2l0aW9uLWZhZGU6Zm9jdXMtd2l0aGluLC51ay10cmFuc2l0aW9uLXRvZ2dsZTpmb2N1cyAudWstdHJhbnNpdGlvbi1mYWRlLC51ay10cmFuc2l0aW9uLXRvZ2dsZTpob3ZlciAudWstdHJhbnNpdGlvbi1mYWRle29wYWNpdHk6MX1bY2xhc3MqPXVrLXRyYW5zaXRpb24tc2NhbGVdey13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW59LnVrLXRyYW5zaXRpb24tc2NhbGUtdXB7LS11ay1zY2FsZS14OjE7LS11ay1zY2FsZS15OjF9LnVrLXRyYW5zaXRpb24tc2NhbGUtZG93bnstLXVrLXNjYWxlLXg6MS4wMzstLXVrLXNjYWxlLXk6MS4wM30udWstdHJhbnNpdGlvbi1hY3RpdmUudWstYWN0aXZlIC51ay10cmFuc2l0aW9uLXNjYWxlLXVwLC51ay10cmFuc2l0aW9uLXRvZ2dsZSAudWstdHJhbnNpdGlvbi1zY2FsZS11cDpmb2N1cy13aXRoaW4sLnVrLXRyYW5zaXRpb24tdG9nZ2xlOmZvY3VzIC51ay10cmFuc2l0aW9uLXNjYWxlLXVwLC51ay10cmFuc2l0aW9uLXRvZ2dsZTpob3ZlciAudWstdHJhbnNpdGlvbi1zY2FsZS11cHstLXVrLXNjYWxlLXg6MS4wMzstLXVrLXNjYWxlLXk6MS4wMztvcGFjaXR5OjF9LnVrLXRyYW5zaXRpb24tYWN0aXZlLnVrLWFjdGl2ZSAudWstdHJhbnNpdGlvbi1zY2FsZS1kb3duLC51ay10cmFuc2l0aW9uLXRvZ2dsZSAudWstdHJhbnNpdGlvbi1zY2FsZS1kb3duOmZvY3VzLXdpdGhpbiwudWstdHJhbnNpdGlvbi10b2dnbGU6Zm9jdXMgLnVrLXRyYW5zaXRpb24tc2NhbGUtZG93biwudWstdHJhbnNpdGlvbi10b2dnbGU6aG92ZXIgLnVrLXRyYW5zaXRpb24tc2NhbGUtZG93bnstLXVrLXNjYWxlLXg6MTstLXVrLXNjYWxlLXk6MTtvcGFjaXR5OjF9LnVrLXRyYW5zaXRpb24tc2xpZGUtdG9wey0tdWstdHJhbnNsYXRlLXk6LTEwMCV9LnVrLXRyYW5zaXRpb24tc2xpZGUtYm90dG9tey0tdWstdHJhbnNsYXRlLXk6MTAwJX0udWstdHJhbnNpdGlvbi1zbGlkZS1yaWdodHstLXVrLXRyYW5zbGF0ZS14Oi0xMDAlfS51ay10cmFuc2l0aW9uLXNsaWRlLWxlZnR7LS11ay10cmFuc2xhdGUteDoxMDAlfS51ay10cmFuc2l0aW9uLXNsaWRlLXRvcC1zbWFsbHstLXVrLXRyYW5zbGF0ZS15OmNhbGMoLTEgKiAxMHB4KX0udWstdHJhbnNpdGlvbi1zbGlkZS1ib3R0b20tc21hbGx7LS11ay10cmFuc2xhdGUteToxMHB4fS51ay10cmFuc2l0aW9uLXNsaWRlLXJpZ2h0LXNtYWxsey0tdWstdHJhbnNsYXRlLXg6Y2FsYygtMSAqIDEwcHgpfS51ay10cmFuc2l0aW9uLXNsaWRlLWxlZnQtc21hbGx7LS11ay10cmFuc2xhdGUteDoxMHB4fS51ay10cmFuc2l0aW9uLXNsaWRlLXRvcC1tZWRpdW17LS11ay10cmFuc2xhdGUteTpjYWxjKC0xICogNTBweCl9LnVrLXRyYW5zaXRpb24tc2xpZGUtYm90dG9tLW1lZGl1bXstLXVrLXRyYW5zbGF0ZS15OjUwcHh9LnVrLXRyYW5zaXRpb24tc2xpZGUtcmlnaHQtbWVkaXVtey0tdWstdHJhbnNsYXRlLXg6Y2FsYygtMSAqIDUwcHgpfS51ay10cmFuc2l0aW9uLXNsaWRlLWxlZnQtbWVkaXVtey0tdWstdHJhbnNsYXRlLXg6NTBweH0udWstdHJhbnNpdGlvbi1hY3RpdmUudWstYWN0aXZlIFtjbGFzcyo9dWstdHJhbnNpdGlvbi1zbGlkZV0sLnVrLXRyYW5zaXRpb24tdG9nZ2xlIFtjbGFzcyo9dWstdHJhbnNpdGlvbi1zbGlkZV06Zm9jdXMtd2l0aGluLC51ay10cmFuc2l0aW9uLXRvZ2dsZTpmb2N1cyBbY2xhc3MqPXVrLXRyYW5zaXRpb24tc2xpZGVdLC51ay10cmFuc2l0aW9uLXRvZ2dsZTpob3ZlciBbY2xhc3MqPXVrLXRyYW5zaXRpb24tc2xpZGVdey0tdWstdHJhbnNsYXRlLXg6MDstLXVrLXRyYW5zbGF0ZS15OjA7b3BhY2l0eToxfS51ay10cmFuc2l0aW9uLW9wYXF1ZXtvcGFjaXR5OjF9LnVrLXRyYW5zaXRpb24tc2xvd3t0cmFuc2l0aW9uLWR1cmF0aW9uOi43c30udWstaGlkZGVuLFtoaWRkZW5de2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1oaWRkZW5cQHN7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1oaWRkZW5cQG17ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstaGlkZGVuXEBse2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjE2MDBweCl7LnVrLWhpZGRlblxAeGx7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtYXgtd2lkdGg6NjM5cHgpey51ay12aXNpYmxlXEBze2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWF4LXdpZHRoOjk1OXB4KXsudWstdmlzaWJsZVxAbXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1heC13aWR0aDoxMTk5cHgpey51ay12aXNpYmxlXEBse2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWF4LXdpZHRoOjE1OTlweCl7LnVrLXZpc2libGVcQHhse2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fS51ay1pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50fS51ay12aXNpYmxlLXRvZ2dsZTpub3QoOmhvdmVyKTpub3QoOmZvY3VzKSAudWstaGlkZGVuLWhvdmVyOm5vdCg6Zm9jdXMtd2l0aGluKXtwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7d2lkdGg6MCFpbXBvcnRhbnQ7aGVpZ2h0OjAhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnR9LnVrLXZpc2libGUtdG9nZ2xlOm5vdCg6aG92ZXIpOm5vdCg6Zm9jdXMpIC51ay1pbnZpc2libGUtaG92ZXI6bm90KDpmb2N1cy13aXRoaW4pe29wYWNpdHk6MCFpbXBvcnRhbnR9QG1lZGlhIChob3Zlcjpub25lKXsudWstaGlkZGVuLXRvdWNoe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAoaG92ZXIpey51ay1oaWRkZW4tbm90b3VjaHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSksLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSwudWstbGlnaHQsLnVrLW9mZmNhbnZhcy1iYXIsLnVrLW92ZXJsYXktcHJpbWFyeSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGluaywudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBhLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluaywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgYSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saW5rLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgYSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluaywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBhLC51ay1saWdodCAudWstbGluaywudWstbGlnaHQgYSwudWstb2ZmY2FudmFzLWJhciAudWstbGluaywudWstb2ZmY2FudmFzLWJhciBhLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmssLnVrLW92ZXJsYXktcHJpbWFyeSBhLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmssLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluaywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmssLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGF7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmssLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbms6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgYTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluazpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgYTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluaywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saW5rOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgYTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmssLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpbms6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgYTpob3ZlciwudWstbGlnaHQgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLC51ay1saWdodCAudWstbGluazpob3ZlciwudWstbGlnaHQgYTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmssLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpbms6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgYTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluaywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saW5rOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgYTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluaywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluazpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluaywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYTpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluazpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYTpob3Zlcntjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IDpub3QocHJlKT5jb2RlLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IDpub3QocHJlKT5rYmQsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgOm5vdChwcmUpPnNhbXAsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIDpub3QocHJlKT5jb2RlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSA6bm90KHByZSk+a2JkLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSA6bm90KHByZSk+c2FtcCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IDpub3QocHJlKT5jb2RlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgOm5vdChwcmUpPmtiZCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IDpub3QocHJlKT5zYW1wLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIDpub3QocHJlKT5jb2RlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIDpub3QocHJlKT5rYmQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgOm5vdChwcmUpPnNhbXAsLnVrLWxpZ2h0IDpub3QocHJlKT5jb2RlLC51ay1saWdodCA6bm90KHByZSk+a2JkLC51ay1saWdodCA6bm90KHByZSk+c2FtcCwudWstb2ZmY2FudmFzLWJhciA6bm90KHByZSk+Y29kZSwudWstb2ZmY2FudmFzLWJhciA6bm90KHByZSk+a2JkLC51ay1vZmZjYW52YXMtYmFyIDpub3QocHJlKT5zYW1wLC51ay1vdmVybGF5LXByaW1hcnkgOm5vdChwcmUpPmNvZGUsLnVrLW92ZXJsYXktcHJpbWFyeSA6bm90KHByZSk+a2JkLC51ay1vdmVybGF5LXByaW1hcnkgOm5vdChwcmUpPnNhbXAsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSk+Y29kZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpub3QocHJlKT5rYmQsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSk+c2FtcCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOm5vdChwcmUpPmNvZGUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpub3QocHJlKT5rYmQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpub3QocHJlKT5zYW1wLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOm5vdChwcmUpPmNvZGUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSk+a2JkLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOm5vdChwcmUpPnNhbXAsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpub3QocHJlKT5jb2RlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSk+a2JkLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSk+c2FtcHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IGVtLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBlbSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGVtLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGVtLC51ay1saWdodCBlbSwudWstb2ZmY2FudmFzLWJhciBlbSwudWstb3ZlcmxheS1wcmltYXJ5IGVtLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgZW0sLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGVtLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgZW0sLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGVte2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWgxLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oMiwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaDMsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWg0LC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oNSwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaDYsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctMnhsYXJnZSwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1sYXJnZSwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1tZWRpdW0sLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctc21hbGwsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmcteGxhcmdlLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IGgxLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IGgyLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IGgzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IGg0LC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IGg1LC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IGg2LC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaDEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oMiwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWgzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaDQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oNSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWg2LC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaGVhZGluZy0yeGxhcmdlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaGVhZGluZy1sYXJnZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWhlYWRpbmctbWVkaXVtLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaGVhZGluZy1zbWFsbCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWhlYWRpbmcteGxhcmdlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBoMSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgaDIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGgzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBoNCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgaDUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGg2LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWgxLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWgyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWgzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWg0LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWg1LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWg2LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctMnhsYXJnZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLWxhcmdlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctbWVkaXVtLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctc21hbGwsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy14bGFyZ2UsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBoMSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGgyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgaDMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBoNCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGg1LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgaDYsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWgxLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oMiwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaDMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWg0LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oNSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaDYsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWhlYWRpbmctMnhsYXJnZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaGVhZGluZy1sYXJnZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaGVhZGluZy1tZWRpdW0sLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWhlYWRpbmctc21hbGwsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWhlYWRpbmcteGxhcmdlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGgxLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGgyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGgzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGg0LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGg1LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGg2LC51ay1saWdodCAudWstaDEsLnVrLWxpZ2h0IC51ay1oMiwudWstbGlnaHQgLnVrLWgzLC51ay1saWdodCAudWstaDQsLnVrLWxpZ2h0IC51ay1oNSwudWstbGlnaHQgLnVrLWg2LC51ay1saWdodCAudWstaGVhZGluZy0yeGxhcmdlLC51ay1saWdodCAudWstaGVhZGluZy1sYXJnZSwudWstbGlnaHQgLnVrLWhlYWRpbmctbWVkaXVtLC51ay1saWdodCAudWstaGVhZGluZy1zbWFsbCwudWstbGlnaHQgLnVrLWhlYWRpbmcteGxhcmdlLC51ay1saWdodCBoMSwudWstbGlnaHQgaDIsLnVrLWxpZ2h0IGgzLC51ay1saWdodCBoNCwudWstbGlnaHQgaDUsLnVrLWxpZ2h0IGg2LC51ay1vZmZjYW52YXMtYmFyIC51ay1oMSwudWstb2ZmY2FudmFzLWJhciAudWstaDIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWgzLC51ay1vZmZjYW52YXMtYmFyIC51ay1oNCwudWstb2ZmY2FudmFzLWJhciAudWstaDUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWg2LC51ay1vZmZjYW52YXMtYmFyIC51ay1oZWFkaW5nLTJ4bGFyZ2UsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWhlYWRpbmctbGFyZ2UsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWhlYWRpbmctbWVkaXVtLC51ay1vZmZjYW52YXMtYmFyIC51ay1oZWFkaW5nLXNtYWxsLC51ay1vZmZjYW52YXMtYmFyIC51ay1oZWFkaW5nLXhsYXJnZSwudWstb2ZmY2FudmFzLWJhciBoMSwudWstb2ZmY2FudmFzLWJhciBoMiwudWstb2ZmY2FudmFzLWJhciBoMywudWstb2ZmY2FudmFzLWJhciBoNCwudWstb2ZmY2FudmFzLWJhciBoNSwudWstb2ZmY2FudmFzLWJhciBoNiwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oMSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oMiwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oMywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oNCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oNSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oNiwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oZWFkaW5nLTJ4bGFyZ2UsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaGVhZGluZy1sYXJnZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oZWFkaW5nLW1lZGl1bSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oZWFkaW5nLXNtYWxsLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWhlYWRpbmcteGxhcmdlLC51ay1vdmVybGF5LXByaW1hcnkgaDEsLnVrLW92ZXJsYXktcHJpbWFyeSBoMiwudWstb3ZlcmxheS1wcmltYXJ5IGgzLC51ay1vdmVybGF5LXByaW1hcnkgaDQsLnVrLW92ZXJsYXktcHJpbWFyeSBoNSwudWstb3ZlcmxheS1wcmltYXJ5IGg2LC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWgxLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWgyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWgzLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWg0LC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWg1LC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWg2LC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctMnhsYXJnZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWxhcmdlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbWVkaXVtLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctc21hbGwsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy14bGFyZ2UsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoMSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGgyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDMsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoNCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGg1LC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDYsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oMSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWgyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDMsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oNCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWg1LC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDYsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLTJ4bGFyZ2UsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWxhcmdlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1tZWRpdW0sLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLXNtYWxsLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy14bGFyZ2UsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGgxLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoMiwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDMsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGg0LC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoNSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDYsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDYsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy0yeGxhcmdlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGFyZ2UsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1tZWRpdW0sLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1zbWFsbCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLXhsYXJnZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGgxLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoMywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGg0LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoNiwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWgxLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oMywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWg0LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oNiwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctMnhsYXJnZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGFyZ2UsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLW1lZGl1bSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctc21hbGwsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLXhsYXJnZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGgyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoMywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGg1LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoNntjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IGJsb2NrcXVvdGUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGJsb2NrcXVvdGUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBibG9ja3F1b3RlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGJsb2NrcXVvdGUsLnVrLWxpZ2h0IGJsb2NrcXVvdGUsLnVrLW9mZmNhbnZhcy1iYXIgYmxvY2txdW90ZSwudWstb3ZlcmxheS1wcmltYXJ5IGJsb2NrcXVvdGUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBibG9ja3F1b3RlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBibG9ja3F1b3RlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYmxvY2txdW90ZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYmxvY2txdW90ZXtjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IGJsb2NrcXVvdGUgZm9vdGVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBibG9ja3F1b3RlIGZvb3RlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGJsb2NrcXVvdGUgZm9vdGVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGJsb2NrcXVvdGUgZm9vdGVyLC51ay1saWdodCBibG9ja3F1b3RlIGZvb3RlciwudWstb2ZmY2FudmFzLWJhciBibG9ja3F1b3RlIGZvb3RlciwudWstb3ZlcmxheS1wcmltYXJ5IGJsb2NrcXVvdGUgZm9vdGVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYmxvY2txdW90ZSBmb290ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGJsb2NrcXVvdGUgZm9vdGVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYmxvY2txdW90ZSBmb290ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGJsb2NrcXVvdGUgZm9vdGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1ociwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBociwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWhyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBociwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1ociwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGhyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1ociwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBociwudWstbGlnaHQgLnVrLWhyLC51ay1saWdodCBociwudWstb2ZmY2FudmFzLWJhciAudWstaHIsLnVrLW9mZmNhbnZhcy1iYXIgaHIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaHIsLnVrLW92ZXJsYXktcHJpbWFyeSBociwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1ociwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGhyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaHIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGhyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaHIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1ociwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaHJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSA6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIDpmb2N1cywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IDpmb2N1cywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSA6Zm9jdXMsLnVrLWxpZ2h0IDpmb2N1cywudWstb2ZmY2FudmFzLWJhciA6Zm9jdXMsLnVrLW92ZXJsYXktcHJpbWFyeSA6Zm9jdXMsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6Zm9jdXMsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpmb2N1cywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOmZvY3Vze291dGxpbmUtY29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSA6Zm9jdXMtdmlzaWJsZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgOmZvY3VzLXZpc2libGUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSA6Zm9jdXMtdmlzaWJsZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSA6Zm9jdXMtdmlzaWJsZSwudWstbGlnaHQgOmZvY3VzLXZpc2libGUsLnVrLW9mZmNhbnZhcy1iYXIgOmZvY3VzLXZpc2libGUsLnVrLW92ZXJsYXktcHJpbWFyeSA6Zm9jdXMtdmlzaWJsZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpmb2N1cy12aXNpYmxlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6Zm9jdXMtdmlzaWJsZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpmb2N1cy12aXNpYmxlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLWNvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstbXV0ZWQgYSwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBhLnVrLWxpbmstbXV0ZWQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saW5rLW11dGVkIGEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGEudWstbGluay1tdXRlZCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saW5rLW11dGVkIGEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBhLnVrLWxpbmstbXV0ZWQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpbmstbXV0ZWQgYSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBhLnVrLWxpbmstbXV0ZWQsLnVrLWxpZ2h0IC51ay1saW5rLW11dGVkIGEsLnVrLWxpZ2h0IGEudWstbGluay1tdXRlZCwudWstb2ZmY2FudmFzLWJhciAudWstbGluay1tdXRlZCBhLC51ay1vZmZjYW52YXMtYmFyIGEudWstbGluay1tdXRlZCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saW5rLW11dGVkIGEsLnVrLW92ZXJsYXktcHJpbWFyeSBhLnVrLWxpbmstbXV0ZWQsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1tdXRlZCBhLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLW11dGVkLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1tdXRlZCBhLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstbXV0ZWQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1tdXRlZCBhLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLW11dGVkLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1tdXRlZCBhLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstbXV0ZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstbXV0ZWQgYTpob3ZlciwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstbXV0ZWQsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgYS51ay1saW5rLW11dGVkOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluay1tdXRlZCBhOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstbXV0ZWQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGEudWstbGluay1tdXRlZDpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saW5rLW11dGVkIGE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstbXV0ZWQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBhLnVrLWxpbmstbXV0ZWQ6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpbmstbXV0ZWQgYTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstbXV0ZWQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgYS51ay1saW5rLW11dGVkOmhvdmVyLC51ay1saWdodCAudWstbGluay1tdXRlZCBhOmhvdmVyLC51ay1saWdodCAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstbXV0ZWQsLnVrLWxpZ2h0IGEudWstbGluay1tdXRlZDpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstbGluay1tdXRlZCBhOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1tdXRlZCwudWstb2ZmY2FudmFzLWJhciBhLnVrLWxpbmstbXV0ZWQ6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGluay1tdXRlZCBhOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLW11dGVkLC51ay1vdmVybGF5LXByaW1hcnkgYS51ay1saW5rLW11dGVkOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstbXV0ZWQgYTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1tdXRlZCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay1tdXRlZDpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstbXV0ZWQgYTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLW11dGVkLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstbXV0ZWQ6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1tdXRlZCBhOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLW11dGVkLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLW11dGVkOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1tdXRlZCBhOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstbXV0ZWQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay1tdXRlZDpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay10ZXh0IGE6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLXRleHQsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgYS51ay1saW5rLXRleHQ6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saW5rLXRleHQgYTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLXRleHQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGEudWstbGluay10ZXh0OmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstdGV4dCBhOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLXRleHQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBhLnVrLWxpbmstdGV4dDpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluay10ZXh0IGE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLXRleHQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgYS51ay1saW5rLXRleHQ6aG92ZXIsLnVrLWxpZ2h0IC51ay1saW5rLXRleHQgYTpob3ZlciwudWstbGlnaHQgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLXRleHQsLnVrLWxpZ2h0IGEudWstbGluay10ZXh0OmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1saW5rLXRleHQgYTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstdGV4dCwudWstb2ZmY2FudmFzLWJhciBhLnVrLWxpbmstdGV4dDpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saW5rLXRleHQgYTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay10ZXh0LC51ay1vdmVybGF5LXByaW1hcnkgYS51ay1saW5rLXRleHQ6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10ZXh0IGE6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstdGV4dCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay10ZXh0OmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10ZXh0IGE6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay10ZXh0LC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstdGV4dDpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRleHQgYTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay10ZXh0LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLXRleHQ6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRleHQgYTpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLXRleHQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay10ZXh0OmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstaGVhZGluZywudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBhLnVrLWxpbmstaGVhZGluZzpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstaGVhZGluZywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgYS51ay1saW5rLWhlYWRpbmc6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay1oZWFkaW5nIGE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstaGVhZGluZywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGEudWstbGluay1oZWFkaW5nOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstaGVhZGluZywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBhLnVrLWxpbmstaGVhZGluZzpob3ZlciwudWstbGlnaHQgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLC51ay1saWdodCAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstaGVhZGluZywudWstbGlnaHQgYS51ay1saW5rLWhlYWRpbmc6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1oZWFkaW5nLC51ay1vZmZjYW52YXMtYmFyIGEudWstbGluay1oZWFkaW5nOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLWhlYWRpbmcsLnVrLW92ZXJsYXktcHJpbWFyeSBhLnVrLWxpbmstaGVhZGluZzpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1oZWFkaW5nLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLWhlYWRpbmc6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLWhlYWRpbmcsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay1oZWFkaW5nOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLWhlYWRpbmcsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstaGVhZGluZzpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstaGVhZGluZywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLWhlYWRpbmc6aG92ZXJ7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1kaXZpZGVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaGVhZGluZy1kaXZpZGVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctZGl2aWRlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaGVhZGluZy1kaXZpZGVyLC51ay1saWdodCAudWstaGVhZGluZy1kaXZpZGVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1oZWFkaW5nLWRpdmlkZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaGVhZGluZy1kaXZpZGVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctZGl2aWRlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctZGl2aWRlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWRpdmlkZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWRpdmlkZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1idWxsZXQ6OmJlZm9yZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWhlYWRpbmctYnVsbGV0OjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1idWxsZXQ6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaGVhZGluZy1idWxsZXQ6OmJlZm9yZSwudWstbGlnaHQgLnVrLWhlYWRpbmctYnVsbGV0OjpiZWZvcmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWhlYWRpbmctYnVsbGV0OjpiZWZvcmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaGVhZGluZy1idWxsZXQ6OmJlZm9yZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3JlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1idWxsZXQ6OmJlZm9yZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3JlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1idWxsZXQ6OmJlZm9yZXtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctbGluZT46OmFmdGVyLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLWxpbmU+OjpiZWZvcmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLWxpbmU+OjphZnRlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWhlYWRpbmctbGluZT46OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLWxpbmU+OjphZnRlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLWxpbmU+OjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWhlYWRpbmctbGluZT46OmFmdGVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLWxpbmU+OjpiZWZvcmUsLnVrLWxpZ2h0IC51ay1oZWFkaW5nLWxpbmU+OjphZnRlciwudWstbGlnaHQgLnVrLWhlYWRpbmctbGluZT46OmJlZm9yZSwudWstb2ZmY2FudmFzLWJhciAudWstaGVhZGluZy1saW5lPjo6YWZ0ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWhlYWRpbmctbGluZT46OmJlZm9yZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oZWFkaW5nLWxpbmU+OjphZnRlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oZWFkaW5nLWxpbmU+OjpiZWZvcmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lPjo6YWZ0ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lPjo6YmVmb3JlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lPjo6YWZ0ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWxpbmU+OjpiZWZvcmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lPjo6YWZ0ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lPjo6YmVmb3JlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lPjo6YWZ0ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWxpbmU+OjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstZGl2aWRlci1pY29uLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZGl2aWRlci1pY29uLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItaWNvbiwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZGl2aWRlci1pY29uLC51ay1saWdodCAudWstZGl2aWRlci1pY29uLC51ay1vZmZjYW52YXMtYmFyIC51ay1kaXZpZGVyLWljb24sLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZGl2aWRlci1pY29uLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItaWNvbiwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItaWNvbiwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb24sLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjAlMjIlMjBoZWlnaHQlM0QlMjIyMCUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDIwJTIwMjAlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2NpcmNsZSUyMGZpbGwlM0QlMjJub25lJTIyJTIwc3Ryb2tlJTNEJTIycmdiYSUyODI1NSwlMjAyNTUsJTIwMjU1LCUyMDAuMiUyOSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjIlMjIlMjBjeCUzRCUyMjEwJTIyJTIwY3klM0QlMjIxMCUyMiUyMHIlM0QlMjI3JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItaWNvbjo6YWZ0ZXIsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItaWNvbjo6YmVmb3JlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZGl2aWRlci1pY29uOjphZnRlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRpdmlkZXItaWNvbjo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItaWNvbjo6YWZ0ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstZGl2aWRlci1pY29uOjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRpdmlkZXItaWNvbjo6YWZ0ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRpdmlkZXItaWNvbjo6YmVmb3JlLC51ay1saWdodCAudWstZGl2aWRlci1pY29uOjphZnRlciwudWstbGlnaHQgLnVrLWRpdmlkZXItaWNvbjo6YmVmb3JlLC51ay1vZmZjYW52YXMtYmFyIC51ay1kaXZpZGVyLWljb246OmFmdGVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1kaXZpZGVyLWljb246OmFmdGVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWRpdmlkZXItaWNvbjo6YmVmb3JlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItaWNvbjo6YWZ0ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1pY29uOjpiZWZvcmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb246OmFmdGVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1pY29uOjpiZWZvcmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1pY29uOjphZnRlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItaWNvbjo6YWZ0ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb246OmJlZm9yZXtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRpdmlkZXItc21hbGw6OmFmdGVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItc21hbGw6OmFmdGVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwudWstbGlnaHQgLnVrLWRpdmlkZXItc21hbGw6OmFmdGVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItc21hbGw6OmFmdGVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItc21hbGw6OmFmdGVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1zbWFsbDo6YWZ0ZXJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstZGl2aWRlci12ZXJ0aWNhbCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRpdmlkZXItdmVydGljYWwsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstZGl2aWRlci12ZXJ0aWNhbCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZGl2aWRlci12ZXJ0aWNhbCwudWstbGlnaHQgLnVrLWRpdmlkZXItdmVydGljYWwsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWRpdmlkZXItdmVydGljYWwsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZGl2aWRlci12ZXJ0aWNhbCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLXZlcnRpY2FsLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci12ZXJ0aWNhbCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLXZlcnRpY2FsLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3QtbXV0ZWQ+OjpiZWZvcmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saXN0LW11dGVkPjo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3QtbXV0ZWQ+OjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpc3QtbXV0ZWQ+OjpiZWZvcmUsLnVrLWxpZ2h0IC51ay1saXN0LW11dGVkPjo6YmVmb3JlLC51ay1vZmZjYW52YXMtYmFyIC51ay1saXN0LW11dGVkPjo6YmVmb3JlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpc3QtbXV0ZWQ+OjpiZWZvcmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1tdXRlZD46OmJlZm9yZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtbXV0ZWQ+OjpiZWZvcmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1tdXRlZD46OmJlZm9yZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtbXV0ZWQ+OjpiZWZvcmV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSkhaW1wb3J0YW50fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saXN0LWVtcGhhc2lzPjo6YmVmb3JlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGlzdC1lbXBoYXNpcz46OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saXN0LWVtcGhhc2lzPjo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saXN0LWVtcGhhc2lzPjo6YmVmb3JlLC51ay1saWdodCAudWstbGlzdC1lbXBoYXNpcz46OmJlZm9yZSwudWstb2ZmY2FudmFzLWJhciAudWstbGlzdC1lbXBoYXNpcz46OmJlZm9yZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saXN0LWVtcGhhc2lzPjo6YmVmb3JlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtZW1waGFzaXM+OjpiZWZvcmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWVtcGhhc2lzPjo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtZW1waGFzaXM+OjpiZWZvcmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWVtcGhhc2lzPjo6YmVmb3Jle2NvbG9yOiNmZmYhaW1wb3J0YW50fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saXN0LXByaW1hcnk+OjpiZWZvcmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saXN0LXByaW1hcnk+OjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGlzdC1wcmltYXJ5Pjo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saXN0LXByaW1hcnk+OjpiZWZvcmUsLnVrLWxpZ2h0IC51ay1saXN0LXByaW1hcnk+OjpiZWZvcmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpc3QtcHJpbWFyeT46OmJlZm9yZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saXN0LXByaW1hcnk+OjpiZWZvcmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1wcmltYXJ5Pjo6YmVmb3JlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1wcmltYXJ5Pjo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtcHJpbWFyeT46OmJlZm9yZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtcHJpbWFyeT46OmJlZm9yZXtjb2xvcjojZmZmIWltcG9ydGFudH0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGlzdC1zZWNvbmRhcnk+OjpiZWZvcmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saXN0LXNlY29uZGFyeT46OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saXN0LXNlY29uZGFyeT46OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGlzdC1zZWNvbmRhcnk+OjpiZWZvcmUsLnVrLWxpZ2h0IC51ay1saXN0LXNlY29uZGFyeT46OmJlZm9yZSwudWstb2ZmY2FudmFzLWJhciAudWstbGlzdC1zZWNvbmRhcnk+OjpiZWZvcmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGlzdC1zZWNvbmRhcnk+OjpiZWZvcmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1zZWNvbmRhcnk+OjpiZWZvcmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXNlY29uZGFyeT46OmJlZm9yZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXNlY29uZGFyeT46OmJlZm9yZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3Qtc2Vjb25kYXJ5Pjo6YmVmb3Jle2NvbG9yOiNmZmYhaW1wb3J0YW50fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saXN0LWJ1bGxldD46OmJlZm9yZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpc3QtYnVsbGV0Pjo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3QtYnVsbGV0Pjo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saXN0LWJ1bGxldD46OmJlZm9yZSwudWstbGlnaHQgLnVrLWxpc3QtYnVsbGV0Pjo6YmVmb3JlLC51ay1vZmZjYW52YXMtYmFyIC51ay1saXN0LWJ1bGxldD46OmJlZm9yZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saXN0LWJ1bGxldD46OmJlZm9yZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWJ1bGxldD46OmJlZm9yZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtYnVsbGV0Pjo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtYnVsbGV0Pjo6YmVmb3JlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1idWxsZXQ+OjpiZWZvcmV7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyNiUyMiUyMGhlaWdodCUzRCUyMjYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjA2JTIwNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDY2lyY2xlJTIwZmlsbCUzRCUyMnJnYmElMjgyNTUsJTIwMjU1LCUyMDI1NSwlMjAwLjclMjklMjIlMjBjeCUzRCUyMjMlMjIlMjBjeSUzRCUyMjMlMjIlMjByJTNEJTIyMyUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saXN0LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGlzdC1kaXZpZGVyPjpudGgtY2hpbGQobisyKSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saXN0LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saXN0LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpLC51ay1saWdodCAudWstbGlzdC1kaXZpZGVyPjpudGgtY2hpbGQobisyKSwudWstb2ZmY2FudmFzLWJhciAudWstbGlzdC1kaXZpZGVyPjpudGgtY2hpbGQobisyKSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saXN0LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtZGl2aWRlcj46bnRoLWNoaWxkKG4rMiksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtZGl2aWRlcj46bnRoLWNoaWxkKG4rMiksLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpe2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3Qtc3RyaXBlZD46bnRoLW9mLXR5cGUob2RkKSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpc3Qtc3RyaXBlZD46bnRoLW9mLXR5cGUob2RkKSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saXN0LXN0cmlwZWQ+Om50aC1vZi10eXBlKG9kZCksLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpc3Qtc3RyaXBlZD46bnRoLW9mLXR5cGUob2RkKSwudWstbGlnaHQgLnVrLWxpc3Qtc3RyaXBlZD46bnRoLW9mLXR5cGUob2RkKSwudWstb2ZmY2FudmFzLWJhciAudWstbGlzdC1zdHJpcGVkPjpudGgtb2YtdHlwZShvZGQpLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpc3Qtc3RyaXBlZD46bnRoLW9mLXR5cGUob2RkKSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXN0cmlwZWQ+Om50aC1vZi10eXBlKG9kZCksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXN0cmlwZWQ+Om50aC1vZi10eXBlKG9kZCksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1zdHJpcGVkPjpudGgtb2YtdHlwZShvZGQpLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1zdHJpcGVkPjpudGgtb2YtdHlwZShvZGQpe2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMik7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGlzdC1zdHJpcGVkPjpudGgtb2YtdHlwZShvZGQpLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGlzdC1zdHJpcGVkPjpudGgtb2YtdHlwZShvZGQpLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3Qtc3RyaXBlZD46bnRoLW9mLXR5cGUob2RkKSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGlzdC1zdHJpcGVkPjpudGgtb2YtdHlwZShvZGQpLC51ay1saWdodCAudWstbGlzdC1zdHJpcGVkPjpudGgtb2YtdHlwZShvZGQpLC51ay1vZmZjYW52YXMtYmFyIC51ay1saXN0LXN0cmlwZWQ+Om50aC1vZi10eXBlKG9kZCksLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGlzdC1zdHJpcGVkPjpudGgtb2YtdHlwZShvZGQpLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3Qtc3RyaXBlZD46bnRoLW9mLXR5cGUob2RkKSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3Qtc3RyaXBlZD46bnRoLW9mLXR5cGUob2RkKSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXN0cmlwZWQ+Om50aC1vZi10eXBlKG9kZCksLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXN0cmlwZWQ+Om50aC1vZi10eXBlKG9kZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUgdGgsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZSB0aCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSB0aCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUgdGgsLnVrLWxpZ2h0IC51ay10YWJsZSB0aCwudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUgdGgsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUgdGgsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUgdGgsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSB0aCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSB0aCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlIHRoe2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSBjYXB0aW9uLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUgY2FwdGlvbiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSBjYXB0aW9uLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZSBjYXB0aW9uLC51ay1saWdodCAudWstdGFibGUgY2FwdGlvbiwudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUgY2FwdGlvbiwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWJsZSBjYXB0aW9uLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlIGNhcHRpb24sLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSBjYXB0aW9uLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlIGNhcHRpb24sLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSBjYXB0aW9ue2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlPnRyLnVrLWFjdGl2ZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlIHRib2R5IHRyLnVrLWFjdGl2ZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlPnRyLnVrLWFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGU+dHIudWstYWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlPnRyLnVrLWFjdGl2ZSwudWstbGlnaHQgLnVrLXRhYmxlIHRib2R5IHRyLnVrLWFjdGl2ZSwudWstbGlnaHQgLnVrLXRhYmxlPnRyLnVrLWFjdGl2ZSwudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUgdGJvZHkgdHIudWstYWN0aXZlLC51ay1vZmZjYW52YXMtYmFyIC51ay10YWJsZT50ci51ay1hY3RpdmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUgdGJvZHkgdHIudWstYWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYmxlPnRyLnVrLWFjdGl2ZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGU+dHIudWstYWN0aXZlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUgdGJvZHkgdHIudWstYWN0aXZlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGU+dHIudWstYWN0aXZlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlIHRib2R5IHRyLnVrLWFjdGl2ZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZT50ci51ay1hY3RpdmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZT50ci51ay1hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wOCl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWRpdmlkZXI+OmZpcnN0LWNoaWxkPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1kaXZpZGVyPjpub3QoOmZpcnN0LWNoaWxkKT50ciwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtZGl2aWRlcj50cjpub3QoOmZpcnN0LWNoaWxkKSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlLWRpdmlkZXI+OmZpcnN0LWNoaWxkPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtZGl2aWRlcj46bm90KDpmaXJzdC1jaGlsZCk+dHIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZS1kaXZpZGVyPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWRpdmlkZXI+OmZpcnN0LWNoaWxkPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWRpdmlkZXI+Om5vdCg6Zmlyc3QtY2hpbGQpPnRyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWRpdmlkZXI+dHI6bm90KDpmaXJzdC1jaGlsZCksLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlLWRpdmlkZXI+OmZpcnN0LWNoaWxkPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZS1kaXZpZGVyPjpub3QoOmZpcnN0LWNoaWxkKT50ciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtZGl2aWRlcj50cjpub3QoOmZpcnN0LWNoaWxkKSwudWstbGlnaHQgLnVrLXRhYmxlLWRpdmlkZXI+OmZpcnN0LWNoaWxkPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1saWdodCAudWstdGFibGUtZGl2aWRlcj46bm90KDpmaXJzdC1jaGlsZCk+dHIsLnVrLWxpZ2h0IC51ay10YWJsZS1kaXZpZGVyPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1vZmZjYW52YXMtYmFyIC51ay10YWJsZS1kaXZpZGVyPjpmaXJzdC1jaGlsZD50cjpub3QoOmZpcnN0LWNoaWxkKSwudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUtZGl2aWRlcj46bm90KDpmaXJzdC1jaGlsZCk+dHIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlLWRpdmlkZXI+dHI6bm90KDpmaXJzdC1jaGlsZCksLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUtZGl2aWRlcj46Zmlyc3QtY2hpbGQ+dHI6bm90KDpmaXJzdC1jaGlsZCksLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUtZGl2aWRlcj46bm90KDpmaXJzdC1jaGlsZCk+dHIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUtZGl2aWRlcj50cjpub3QoOmZpcnN0LWNoaWxkKSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyPjpmaXJzdC1jaGlsZD50cjpub3QoOmZpcnN0LWNoaWxkKSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyPjpub3QoOmZpcnN0LWNoaWxkKT50ciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlcj46Zmlyc3QtY2hpbGQ+dHI6bm90KDpmaXJzdC1jaGlsZCksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyPjpub3QoOmZpcnN0LWNoaWxkKT50ciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWRpdmlkZXI+dHI6bm90KDpmaXJzdC1jaGlsZCksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlcj46Zmlyc3QtY2hpbGQ+dHI6bm90KDpmaXJzdC1jaGlsZCksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlcj46bm90KDpmaXJzdC1jaGlsZCk+dHIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlcj50cjpub3QoOmZpcnN0LWNoaWxkKSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWRpdmlkZXI+OmZpcnN0LWNoaWxkPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlcj46bm90KDpmaXJzdC1jaGlsZCk+dHIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyPnRyOm5vdCg6Zmlyc3QtY2hpbGQpe2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZShvZGQpLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZShvZGQpLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1zdHJpcGVkPnRyOm50aC1vZi10eXBlKG9kZCksLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZShvZGQpLC51ay1saWdodCAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpLC51ay1saWdodCAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZShvZGQpLC51ay1vZmZjYW52YXMtYmFyIC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKG9kZCksLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlLXN0cmlwZWQ+dHI6bnRoLW9mLXR5cGUob2RkKSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKG9kZCksLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZShvZGQpLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkPnRyOm50aC1vZi10eXBlKG9kZCksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKG9kZCksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkPnRyOm50aC1vZi10eXBlKG9kZCksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQ+dHI6bnRoLW9mLXR5cGUob2RkKSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQ+dHI6bnRoLW9mLXR5cGUob2RkKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEpO2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMik7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWhvdmVyPnRyOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZS1ob3Zlcj50cjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1ob3Zlcj50cjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlLWhvdmVyPnRyOmhvdmVyLC51ay1saWdodCAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsLnVrLWxpZ2h0IC51ay10YWJsZS1ob3Zlcj50cjpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlLWhvdmVyPnRyOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYmxlLWhvdmVyPnRyOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWhvdmVyPnRyOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1ob3Zlcj50cjpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1ob3Zlcj50cjpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtaG92ZXI+dHI6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wOCl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWljb24tbGluaywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb24tbGluaywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWxpbmssLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb24tbGluaywudWstbGlnaHQgLnVrLWljb24tbGluaywudWstb2ZmY2FudmFzLWJhciAudWstaWNvbi1saW5rLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWljb24tbGluaywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbmssLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbmssLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5re2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWxpbms6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29uLWxpbms6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1saW5rOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29uLWxpbms6aG92ZXIsLnVrLWxpZ2h0IC51ay1pY29uLWxpbms6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWljb24tbGluazpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pY29uLWxpbms6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tbGluazpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tbGluazpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYWN0aXZlPi51ay1pY29uLWxpbmssLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWljb24tbGluazphY3RpdmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1hY3RpdmU+LnVrLWljb24tbGluaywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb24tbGluazphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYWN0aXZlPi51ay1pY29uLWxpbmssLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1saW5rOmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYWN0aXZlPi51ay1pY29uLWxpbmssLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb24tbGluazphY3RpdmUsLnVrLWxpZ2h0IC51ay1hY3RpdmU+LnVrLWljb24tbGluaywudWstbGlnaHQgLnVrLWljb24tbGluazphY3RpdmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWFjdGl2ZT4udWstaWNvbi1saW5rLC51ay1vZmZjYW52YXMtYmFyIC51ay1pY29uLWxpbms6YWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWFjdGl2ZT4udWstaWNvbi1saW5rLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWljb24tbGluazphY3RpdmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWN0aXZlPi51ay1pY29uLWxpbmssLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rOmFjdGl2ZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjdGl2ZT4udWstaWNvbi1saW5rLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rOmFjdGl2ZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY3RpdmU+LnVrLWljb24tbGluaywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbms6YWN0aXZlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWN0aXZlPi51ay1pY29uLWxpbmssLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbms6YWN0aXZle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWJ1dHRvbiwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb24tYnV0dG9uLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWljb24tYnV0dG9uLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29uLWJ1dHRvbiwudWstbGlnaHQgLnVrLWljb24tYnV0dG9uLC51ay1vZmZjYW52YXMtYmFyIC51ay1pY29uLWJ1dHRvbiwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pY29uLWJ1dHRvbiwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbiwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tYnV0dG9uLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tYnV0dG9uLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKTtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1idXR0b246aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29uLWJ1dHRvbjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWJ1dHRvbjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaWNvbi1idXR0b246aG92ZXIsLnVrLWxpZ2h0IC51ay1pY29uLWJ1dHRvbjpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstaWNvbi1idXR0b246aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaWNvbi1idXR0b246aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b246aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbjpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbjpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tYnV0dG9uOmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTUpO2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWJ1dHRvbjphY3RpdmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29uLWJ1dHRvbjphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1idXR0b246YWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29uLWJ1dHRvbjphY3RpdmUsLnVrLWxpZ2h0IC51ay1pY29uLWJ1dHRvbjphY3RpdmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWljb24tYnV0dG9uOmFjdGl2ZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pY29uLWJ1dHRvbjphY3RpdmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b246YWN0aXZlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b246YWN0aXZlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tYnV0dG9uOmFjdGl2ZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tYnV0dG9uOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpO2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pbnB1dCwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VsZWN0LC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10ZXh0YXJlYSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWlucHV0LC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VsZWN0LC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dGFyZWEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VsZWN0LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHRhcmVhLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pbnB1dCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VsZWN0LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10ZXh0YXJlYSwudWstbGlnaHQgLnVrLWlucHV0LC51ay1saWdodCAudWstc2VsZWN0LC51ay1saWdodCAudWstdGV4dGFyZWEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWlucHV0LC51ay1vZmZjYW52YXMtYmFyIC51ay1zZWxlY3QsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRleHRhcmVhLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWlucHV0LC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlbGVjdCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10ZXh0YXJlYSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWxlY3QsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dGFyZWEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dGFyZWF7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKTtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pbnB1dDpmb2N1cywudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VsZWN0OmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10ZXh0YXJlYTpmb2N1cywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWlucHV0OmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VsZWN0OmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dGFyZWE6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXQ6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VsZWN0OmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHRhcmVhOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pbnB1dDpmb2N1cywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VsZWN0OmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10ZXh0YXJlYTpmb2N1cywudWstbGlnaHQgLnVrLWlucHV0OmZvY3VzLC51ay1saWdodCAudWstc2VsZWN0OmZvY3VzLC51ay1saWdodCAudWstdGV4dGFyZWE6Zm9jdXMsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWlucHV0OmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1zZWxlY3Q6Zm9jdXMsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRleHRhcmVhOmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWlucHV0OmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlbGVjdDpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay10ZXh0YXJlYTpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dDpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWxlY3Q6Zm9jdXMsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dGFyZWE6Zm9jdXMsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dDpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdDpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhOmZvY3VzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0OmZvY3VzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdDpmb2N1cywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYTpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0OmZvY3VzLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0OmZvY3VzLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dGFyZWE6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xNSk7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLWxpZ2h0IC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWlucHV0OjpwbGFjZWhvbGRlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0OjpwbGFjZWhvbGRlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHRhcmVhOjpwbGFjZWhvbGRlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLC51ay1saWdodCAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLC51ay1vZmZjYW52YXMtYmFyIC51ay10ZXh0YXJlYTo6cGxhY2Vob2xkZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhOjpwbGFjZWhvbGRlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhOjpwbGFjZWhvbGRlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYTo6cGxhY2Vob2xkZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYTo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksLnVrLWxpZ2h0IC51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pLC51ay1vZmZjYW52YXMtYmFyIC51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSl7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDI0JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIycmdiYSUyODI1NSwlMjAyNTUsJTIwMjU1LCUyMDAuNyUyOSUyMiUyMHBvaW50cyUzRCUyMjEyJTIwMSUyMDklMjA2JTIwMTUlMjA2JTIyJTIwJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjJyZ2JhJTI4MjU1LCUyMDI1NSwlMjAyNTUsJTIwMC43JTI5JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxMyUyMDklMjA4JTIwMTUlMjA4JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWlucHV0W2xpc3RdOmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pbnB1dFtsaXN0XTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWlucHV0W2xpc3RdOmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaW5wdXRbbGlzdF06aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXRbbGlzdF06Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXRbbGlzdF06aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWlucHV0W2xpc3RdOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pbnB1dFtsaXN0XTpob3ZlciwudWstbGlnaHQgLnVrLWlucHV0W2xpc3RdOmZvY3VzLC51ay1saWdodCAudWstaW5wdXRbbGlzdF06aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWlucHV0W2xpc3RdOmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1pbnB1dFtsaXN0XTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pbnB1dFtsaXN0XTpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pbnB1dFtsaXN0XTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dFtsaXN0XTpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dFtsaXN0XTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0W2xpc3RdOmZvY3VzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXRbbGlzdF06aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXRbbGlzdF06Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXRbbGlzdF06aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dFtsaXN0XTpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0W2xpc3RdOmhvdmVye2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAyNCUyMDE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMnJnYmElMjgyNTUsJTIwMjU1LCUyMDI1NSwlMjAwLjclMjklMjIlMjBwb2ludHMlM0QlMjIxMiUyMDEyJTIwOCUyMDYlMjAxNiUyMDYlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEiKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3gsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXJhZGlvLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2hlY2tib3gsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1yYWRpbywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1yYWRpbywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2hlY2tib3gsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXJhZGlvLC51ay1saWdodCAudWstY2hlY2tib3gsLnVrLWxpZ2h0IC51ay1yYWRpbywudWstb2ZmY2FudmFzLWJhciAudWstY2hlY2tib3gsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXJhZGlvLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNoZWNrYm94LC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXJhZGlvLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94LC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXJhZGlvLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3gsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW97YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKTtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1yYWRpbzpmb2N1cywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNoZWNrYm94OmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcmFkaW86Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNoZWNrYm94OmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1yYWRpbzpmb2N1cywudWstbGlnaHQgLnVrLWNoZWNrYm94OmZvY3VzLC51ay1saWdodCAudWstcmFkaW86Zm9jdXMsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWNoZWNrYm94OmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1yYWRpbzpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1jaGVja2JveDpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1yYWRpbzpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmZvY3VzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXJhZGlvOmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTUpO2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6Y2hlY2tlZCwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Y2hlY2tlZCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcmFkaW86Y2hlY2tlZCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveDpjaGVja2VkLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Y2hlY2tlZCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2hlY2tib3g6Y2hlY2tlZCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcmFkaW86Y2hlY2tlZCwudWstbGlnaHQgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLWxpZ2h0IC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay1saWdodCAudWstcmFkaW86Y2hlY2tlZCwudWstb2ZmY2FudmFzLWJhciAudWstY2hlY2tib3g6Y2hlY2tlZCwudWstb2ZmY2FudmFzLWJhciAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwudWstb2ZmY2FudmFzLWJhciAudWstcmFkaW86Y2hlY2tlZCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1jaGVja2JveDpjaGVja2VkLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstcmFkaW86Y2hlY2tlZCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpjaGVja2VkLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpjaGVja2VkLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveDpjaGVja2VkOmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveDppbmRldGVybWluYXRlOmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGU6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmNoZWNrZWQ6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1jaGVja2JveDpjaGVja2VkOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1jaGVja2JveDppbmRldGVybWluYXRlOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1saWdodCAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywudWstbGlnaHQgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGU6Zm9jdXMsLnVrLWxpZ2h0IC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1jaGVja2JveDpjaGVja2VkOmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1jaGVja2JveDppbmRldGVybWluYXRlOmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNoZWNrYm94OmNoZWNrZWQ6Zm9jdXMsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQ6Zm9jdXMsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGU6Zm9jdXMsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQ6Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGU6Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkOmZvY3Vze2JhY2tncm91bmQtY29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Y2hlY2tlZCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXJhZGlvOmNoZWNrZWQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Y2hlY2tlZCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcmFkaW86Y2hlY2tlZCwudWstbGlnaHQgLnVrLXJhZGlvOmNoZWNrZWQsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXJhZGlvOmNoZWNrZWQsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstcmFkaW86Y2hlY2tlZCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZHtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxNiUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTYlMjAxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDY2lyY2xlJTIwZmlsbCUzRCUyMiUyMzY2NiUyMiUyMGN4JTNEJTIyOCUyMiUyMGN5JTNEJTIyOCUyMiUyMHIlM0QlMjIyJTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1jaGVja2JveDpjaGVja2VkLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLWxpZ2h0IC51ay1jaGVja2JveDpjaGVja2VkLC51ay1vZmZjYW52YXMtYmFyIC51ay1jaGVja2JveDpjaGVja2VkLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWR7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTQlMjIlMjBoZWlnaHQlM0QlMjIxMSUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE0JTIwMTElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxJTIwNSUyMDcuNSUyMDIlMjA1JTIwMSUyMDUuNSUyMDUlMjAxMCUyMDEzJTIwMS41JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLWxpZ2h0IC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay1vZmZjYW52YXMtYmFyIC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTYlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE2JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIweCUzRCUyMjMlMjIlMjB5JTNEJTIyOCUyMiUyMHdpZHRoJTNEJTIyMTAlMjIlMjBoZWlnaHQlM0QlMjIxJTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWZvcm0tbGFiZWwsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1mb3JtLWxhYmVsLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWZvcm0tbGFiZWwsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWZvcm0tbGFiZWwsLnVrLWxpZ2h0IC51ay1mb3JtLWxhYmVsLC51ay1vZmZjYW52YXMtYmFyIC51ay1mb3JtLWxhYmVsLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWZvcm0tbGFiZWwsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1sYWJlbCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWZvcm0tbGFiZWwsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1sYWJlbCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWZvcm0tbGFiZWx7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstZm9ybS1pY29uLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZm9ybS1pY29uLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWZvcm0taWNvbiwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZm9ybS1pY29uLC51ay1saWdodCAudWstZm9ybS1pY29uLC51ay1vZmZjYW52YXMtYmFyIC51ay1mb3JtLWljb24sLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZm9ybS1pY29uLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWZvcm0taWNvbiwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWZvcm0taWNvbiwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1mb3JtLWljb24sLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1mb3JtLWljb257Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWZvcm0taWNvbjpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWZvcm0taWNvbjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1mb3JtLWljb246aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWZvcm0taWNvbjpob3ZlciwudWstbGlnaHQgLnVrLWZvcm0taWNvbjpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstZm9ybS1pY29uOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWZvcm0taWNvbjpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1mb3JtLWljb246aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1mb3JtLWljb246aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1pY29uOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1pY29uOmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tZGVmYXVsdCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1kZWZhdWx0LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1kZWZhdWx0LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tZGVmYXVsdCwudWstbGlnaHQgLnVrLWJ1dHRvbi1kZWZhdWx0LC51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tZGVmYXVsdCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tZGVmYXVsdCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojZmZmO2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWRlZmF1bHQ6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLWRlZmF1bHQ6aG92ZXIsLnVrLWxpZ2h0IC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLWRlZmF1bHQ6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLWRlZmF1bHQ6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQ6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0OmhvdmVye2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tZGVmYXVsdDphY3RpdmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tZGVmYXVsdC51ay1hY3RpdmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tZGVmYXVsdDphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1kZWZhdWx0OmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tZGVmYXVsdDphY3RpdmUsLnVrLWxpZ2h0IC51ay1idXR0b24tZGVmYXVsdC51ay1hY3RpdmUsLnVrLWxpZ2h0IC51ay1idXR0b24tZGVmYXVsdDphY3RpdmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1kZWZhdWx0LnVrLWFjdGl2ZSwudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1kZWZhdWx0LnVrLWFjdGl2ZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tZGVmYXVsdDphY3RpdmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0OmFjdGl2ZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0LnVrLWFjdGl2ZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0OmFjdGl2ZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdC51ay1hY3RpdmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXByaW1hcnksLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tcHJpbWFyeSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tcHJpbWFyeSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXByaW1hcnksLnVrLWxpZ2h0IC51ay1idXR0b24tcHJpbWFyeSwudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLXByaW1hcnksLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXByaW1hcnksLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojNjY2fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1wcmltYXJ5OmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1wcmltYXJ5OmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwudWstbGlnaHQgLnVrLWJ1dHRvbi1wcmltYXJ5OmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5OmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5OmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjJmMmYyO2NvbG9yOiM2NjZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXByaW1hcnkudWstYWN0aXZlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tcHJpbWFyeTphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLC51ay1saWdodCAudWstYnV0dG9uLXByaW1hcnkudWstYWN0aXZlLC51ay1saWdodCAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLC51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1wcmltYXJ5OmFjdGl2ZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeTphY3RpdmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeTphY3RpdmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnkudWstYWN0aXZlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5OmFjdGl2ZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5OmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTY7Y29sb3I6IzY2Nn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXNlY29uZGFyeSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1zZWNvbmRhcnksLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXNlY29uZGFyeSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXNlY29uZGFyeSwudWstbGlnaHQgLnVrLWJ1dHRvbi1zZWNvbmRhcnksLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1zZWNvbmRhcnksLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXNlY29uZGFyeSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5LC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzY2Nn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlciwudWstbGlnaHQgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5OmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5OmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmMmYyZjI7Y29sb3I6IzY2Nn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6YWN0aXZlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tc2Vjb25kYXJ5LnVrLWFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6YWN0aXZlLC51ay1saWdodCAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsLnVrLWxpZ2h0IC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6YWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6YWN0aXZlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6YWN0aXZlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5LnVrLWFjdGl2ZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2O2NvbG9yOiM2NjZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi10ZXh0LC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXRleHQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXRleHQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi10ZXh0LC51ay1saWdodCAudWstYnV0dG9uLXRleHQsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi10ZXh0LC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi10ZXh0LC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0LC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dHtjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tdGV4dDo6YmVmb3JlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXRleHQ6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tdGV4dDo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tdGV4dDo6YmVmb3JlLC51ay1saWdodCAudWstYnV0dG9uLXRleHQ6OmJlZm9yZSwudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLXRleHQ6OmJlZm9yZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tdGV4dDo6YmVmb3JlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0OjpiZWZvcmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0OjpiZWZvcmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXRleHQ6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tdGV4dDpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tdGV4dDpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXRleHQ6aG92ZXIsLnVrLWxpZ2h0IC51ay1idXR0b24tdGV4dDpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLXRleHQ6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXRleHQ6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0OmhvdmVye2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLC51ay1saWdodCAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDpkaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWxpbmssLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tbGluaywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tbGluaywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLWxpbmssLnVrLWxpZ2h0IC51ay1idXR0b24tbGluaywudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLWxpbmssLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLWxpbmssLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWxpbmssLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tbGluaywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tbGluaywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1saW5re2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLWxpbms6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWxpbms6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLC51ay1saWdodCAudWstYnV0dG9uLWxpbms6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWxpbms6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWxpbms6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tbGluazpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keS51ay1jYXJkLWJhZGdlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKS51ay1jYXJkLWJhZGdlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkudWstY2FyZC1iYWRnZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKS51ay1jYXJkLWJhZGdlLC51ay1saWdodC51ay1jYXJkLWJhZGdlLC51ay1vZmZjYW52YXMtYmFyLnVrLWNhcmQtYmFkZ2UsLnVrLW92ZXJsYXktcHJpbWFyeS51ay1jYXJkLWJhZGdlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikudWstY2FyZC1iYWRnZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikudWstY2FyZC1iYWRnZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpLnVrLWNhcmQtYmFkZ2UsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpLnVrLWNhcmQtYmFkZ2V7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiM2NjZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWNsb3NlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2xvc2UsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstY2xvc2UsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNsb3NlLC51ay1saWdodCAudWstY2xvc2UsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWNsb3NlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNsb3NlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNsb3NlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2xvc2UsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2xvc2UsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jbG9zZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY2xvc2U6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1jbG9zZTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1jbG9zZTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2xvc2U6aG92ZXIsLnVrLWxpZ2h0IC51ay1jbG9zZTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstY2xvc2U6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstY2xvc2U6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2xvc2U6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jbG9zZTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jbG9zZTpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNsb3NlOmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10b3RvcCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRvdG9wLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRvdG9wLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10b3RvcCwudWstbGlnaHQgLnVrLXRvdG9wLC51ay1vZmZjYW52YXMtYmFyIC51ay10b3RvcCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10b3RvcCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRvdG9wLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRvdG9wLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdG90b3B7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRvdG9wOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdG90b3A6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdG90b3A6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRvdG9wOmhvdmVyLC51ay1saWdodCAudWstdG90b3A6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRvdG9wOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRvdG9wOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRvdG9wOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdG90b3A6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdG90b3A6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcDpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdG90b3A6YWN0aXZlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdG90b3A6YWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRvdG9wOmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdG90b3A6YWN0aXZlLC51ay1saWdodCAudWstdG90b3A6YWN0aXZlLC51ay1vZmZjYW52YXMtYmFyIC51ay10b3RvcDphY3RpdmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdG90b3A6YWN0aXZlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRvdG9wOmFjdGl2ZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRvdG9wOmFjdGl2ZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcDphY3RpdmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcDphY3RpdmV7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbWFya2VyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbWFya2VyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW1hcmtlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbWFya2VyLC51ay1saWdodCAudWstbWFya2VyLC51ay1vZmZjYW52YXMtYmFyIC51ay1tYXJrZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbWFya2VyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW1hcmtlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW1hcmtlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1tYXJrZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1tYXJrZXJ7YmFja2dyb3VuZDojZjhmOGY4O2NvbG9yOiM2NjZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW1hcmtlcjpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW1hcmtlcjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1tYXJrZXI6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW1hcmtlcjpob3ZlciwudWstbGlnaHQgLnVrLW1hcmtlcjpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstbWFya2VyOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW1hcmtlcjpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1tYXJrZXI6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1tYXJrZXI6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbWFya2VyOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbWFya2VyOmhvdmVye2NvbG9yOiM2NjZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJhZGdlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYmFkZ2UsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYmFkZ2UsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJhZGdlLC51ay1saWdodCAudWstYmFkZ2UsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJhZGdlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJhZGdlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJhZGdlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYmFkZ2UsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYmFkZ2UsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1iYWRnZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzY2NiFpbXBvcnRhbnR9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxhYmVsLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGFiZWwsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGFiZWwsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxhYmVsLC51ay1saWdodCAudWstbGFiZWwsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxhYmVsLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxhYmVsLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxhYmVsLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGFiZWwsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGFiZWwsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzY2Nn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYXJ0aWNsZS1tZXRhLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYXJ0aWNsZS1tZXRhLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWFydGljbGUtbWV0YSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYXJ0aWNsZS1tZXRhLC51ay1saWdodCAudWstYXJ0aWNsZS1tZXRhLC51ay1vZmZjYW52YXMtYmFyIC51ay1hcnRpY2xlLW1ldGEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYXJ0aWNsZS1tZXRhLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFydGljbGUtbWV0YSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFydGljbGUtbWV0YSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hcnRpY2xlLW1ldGEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hcnRpY2xlLW1ldGF7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC1pbnB1dCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlYXJjaC1pbnB1dCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtaW5wdXQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlYXJjaC1pbnB1dCwudWstbGlnaHQgLnVrLXNlYXJjaC1pbnB1dCwudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoLWlucHV0LC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlYXJjaC1pbnB1dCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtaW5wdXQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtaW5wdXQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWlucHV0LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWlucHV0e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VhcmNoLWlucHV0OjpwbGFjZWhvbGRlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay1saWdodCAudWstc2VhcmNoLWlucHV0OjpwbGFjZWhvbGRlciwudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoLWlucHV0OjpwbGFjZWhvbGRlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLC51ay1saWdodCAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbiwudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbiwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb24sLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb24sLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29ue2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLC51ay1saWdodCAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbjpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbjpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb246aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb246aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LC51ay1saWdodCAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dCwudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dDpmb2N1cywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3VzLC51ay1saWdodCAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dDpmb2N1cywudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dDpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3VzLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQ6Zm9jdXMsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3VzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQ6Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWlucHV0LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXQsLnVrLWxpZ2h0IC51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXQsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pbnB1dCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXQsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWlucHV0LC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWlucHV0LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pbnB1dCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWlucHV0LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWlucHV0LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwudWstbGlnaHQgLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWlucHV0LC51ay1vZmZjYW52YXMtYmFyIC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWlucHV0LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWlucHV0LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaW5wdXR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLXRvZ2dsZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlYXJjaC10b2dnbGUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLXRvZ2dsZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VhcmNoLXRvZ2dsZSwudWstbGlnaHQgLnVrLXNlYXJjaC10b2dnbGUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXNlYXJjaC10b2dnbGUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2VhcmNoLXRvZ2dsZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtdG9nZ2xlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLXRvZ2dsZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtdG9nZ2xlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLXRvZ2dsZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlYXJjaC10b2dnbGU6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciwudWstbGlnaHQgLnVrLXNlYXJjaC10b2dnbGU6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXNlYXJjaC10b2dnbGU6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtdG9nZ2xlOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtdG9nZ2xlOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLXRvZ2dsZTpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYWNjb3JkaW9uLXRpdGxlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYWNjb3JkaW9uLXRpdGxlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWFjY29yZGlvbi10aXRsZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYWNjb3JkaW9uLXRpdGxlLC51ay1saWdodCAudWstYWNjb3JkaW9uLXRpdGxlLC51ay1vZmZjYW52YXMtYmFyIC51ay1hY2NvcmRpb24tdGl0bGUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYWNjb3JkaW9uLXRpdGxlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGV7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWFjY29yZGlvbi10aXRsZTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLC51ay1saWdodCAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1hY2NvcmRpb24tdGl0bGU6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGU6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGU6aG92ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWdyaWQtZGl2aWRlcj46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1ncmlkLWRpdmlkZXI+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWdyaWQtZGl2aWRlcj46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWdyaWQtZGl2aWRlcj46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLWxpZ2h0IC51ay1ncmlkLWRpdmlkZXI+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1vZmZjYW52YXMtYmFyIC51ay1ncmlkLWRpdmlkZXI+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWdyaWQtZGl2aWRlcj46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZ3JpZC1kaXZpZGVyPjpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWdyaWQtZGl2aWRlcj46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZ3JpZC1kaXZpZGVyPjpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWdyaWQtZGl2aWRlcj46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmV7Ym9yZGVyLXJpZ2h0LWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZSwudWstbGlnaHQgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3JlLC51ay1vZmZjYW52YXMtYmFyIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3JlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmV7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQ+bGk+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1kZWZhdWx0PmxpPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQ+bGk+YSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LWRlZmF1bHQ+bGk+YSwudWstbGlnaHQgLnVrLW5hdi1kZWZhdWx0PmxpPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1kZWZhdWx0PmxpPmEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LWRlZmF1bHQ+bGk+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdD5saT5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQ+bGk+YSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdD5saT5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQ+bGk+YXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQ+bGk+YTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1kZWZhdWx0PmxpPmE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQ+bGk+YTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LWRlZmF1bHQ+bGk+YTpob3ZlciwudWstbGlnaHQgLnVrLW5hdi1kZWZhdWx0PmxpPmE6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1kZWZhdWx0PmxpPmE6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LWRlZmF1bHQ+bGk+YTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdD5saT5hOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQ+bGk+YTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdD5saT5hOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQ+bGk+YTpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQ+bGkudWstYWN0aXZlPmEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtZGVmYXVsdD5saS51ay1hY3RpdmU+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdD5saS51ay1hY3RpdmU+YSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LWRlZmF1bHQ+bGkudWstYWN0aXZlPmEsLnVrLWxpZ2h0IC51ay1uYXYtZGVmYXVsdD5saS51ay1hY3RpdmU+YSwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LWRlZmF1bHQ+bGkudWstYWN0aXZlPmEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LWRlZmF1bHQ+bGkudWstYWN0aXZlPmEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQ+bGkudWstYWN0aXZlPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdD5saS51ay1hY3RpdmU+YSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdD5saS51ay1hY3RpdmU+YSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0PmxpLnVrLWFjdGl2ZT5he2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLC51ay1saWdodCAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlcntjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsLnVrLWxpZ2h0IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlcntib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhLC51ay1saWdodCAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYSwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhe2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1saWdodCAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YSwudWstbGlnaHQgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmF7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnk+bGk+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1wcmltYXJ5PmxpPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnk+bGk+YSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXByaW1hcnk+bGk+YSwudWstbGlnaHQgLnVrLW5hdi1wcmltYXJ5PmxpPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1wcmltYXJ5PmxpPmEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXByaW1hcnk+bGk+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeT5saT5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnk+bGk+YSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeT5saT5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnk+bGk+YXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnk+bGk+YTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1wcmltYXJ5PmxpPmE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnk+bGk+YTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXByaW1hcnk+bGk+YTpob3ZlciwudWstbGlnaHQgLnVrLW5hdi1wcmltYXJ5PmxpPmE6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1wcmltYXJ5PmxpPmE6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXByaW1hcnk+bGk+YTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeT5saT5hOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnk+bGk+YTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeT5saT5hOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnk+bGk+YTpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnk+bGkudWstYWN0aXZlPmEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtcHJpbWFyeT5saS51ay1hY3RpdmU+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeT5saS51ay1hY3RpdmU+YSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXByaW1hcnk+bGkudWstYWN0aXZlPmEsLnVrLWxpZ2h0IC51ay1uYXYtcHJpbWFyeT5saS51ay1hY3RpdmU+YSwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXByaW1hcnk+bGkudWstYWN0aXZlPmEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXByaW1hcnk+bGkudWstYWN0aXZlPmEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnk+bGkudWstYWN0aXZlPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeT5saS51ay1hY3RpdmU+YSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeT5saS51ay1hY3RpdmU+YSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5PmxpLnVrLWFjdGl2ZT5he2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtaGVhZGVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtaGVhZGVyLC51ay1saWdodCAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtaGVhZGVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtaGVhZGVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtaGVhZGVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWhlYWRlcntjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWRpdmlkZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWRpdmlkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1kaXZpZGVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWRpdmlkZXIsLnVrLWxpZ2h0IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWRpdmlkZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWRpdmlkZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1kaXZpZGVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1kaXZpZGVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlcntib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhLC51ay1saWdodCAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYSwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhe2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1saWdodCAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YSwudWstbGlnaHQgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmF7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeT5saT5hLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXNlY29uZGFyeT5saT5hLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnk+bGk+YSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXNlY29uZGFyeT5saT5hLC51ay1saWdodCAudWstbmF2LXNlY29uZGFyeT5saT5hLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtc2Vjb25kYXJ5PmxpPmEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXNlY29uZGFyeT5saT5hLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnk+bGk+YSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnk+bGk+YSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5PmxpPmEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5PmxpPmF7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeT5saT5hOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXNlY29uZGFyeT5saT5hOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnk+bGk+YTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXNlY29uZGFyeT5saT5hOmhvdmVyLC51ay1saWdodCAudWstbmF2LXNlY29uZGFyeT5saT5hOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtc2Vjb25kYXJ5PmxpPmE6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXNlY29uZGFyeT5saT5hOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnk+bGk+YTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnk+bGk+YTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5PmxpPmE6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5PmxpPmE6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5PmxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXNlY29uZGFyeT5saS51ay1hY3RpdmU+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5PmxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtc2Vjb25kYXJ5PmxpLnVrLWFjdGl2ZT5hLC51ay1saWdodCAudWstbmF2LXNlY29uZGFyeT5saS51ay1hY3RpdmU+YSwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXNlY29uZGFyeT5saS51ay1hY3RpdmU+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtc2Vjb25kYXJ5PmxpLnVrLWFjdGl2ZT5hLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnk+bGkudWstYWN0aXZlPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5PmxpLnVrLWFjdGl2ZT5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnk+bGkudWstYWN0aXZlPmEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5PmxpLnVrLWFjdGl2ZT5he2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YnRpdGxlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YnRpdGxlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWJ0aXRsZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YnRpdGxlLC51ay1saWdodCAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YnRpdGxlLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3VidGl0bGUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YnRpdGxlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWJ0aXRsZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWJ0aXRsZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3VidGl0bGUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3VidGl0bGV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnk+bGk+YTpob3ZlciAudWstbmF2LXN1YnRpdGxlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXNlY29uZGFyeT5saT5hOmhvdmVyIC51ay1uYXYtc3VidGl0bGUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeT5saT5hOmhvdmVyIC51ay1uYXYtc3VidGl0bGUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1zZWNvbmRhcnk+bGk+YTpob3ZlciAudWstbmF2LXN1YnRpdGxlLC51ay1saWdodCAudWstbmF2LXNlY29uZGFyeT5saT5hOmhvdmVyIC51ay1uYXYtc3VidGl0bGUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1zZWNvbmRhcnk+bGk+YTpob3ZlciAudWstbmF2LXN1YnRpdGxlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1zZWNvbmRhcnk+bGk+YTpob3ZlciAudWstbmF2LXN1YnRpdGxlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnk+bGk+YTpob3ZlciAudWstbmF2LXN1YnRpdGxlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeT5saT5hOmhvdmVyIC51ay1uYXYtc3VidGl0bGUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeT5saT5hOmhvdmVyIC51ay1uYXYtc3VidGl0bGUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5PmxpPmE6aG92ZXIgLnVrLW5hdi1zdWJ0aXRsZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeT5saS51ay1hY3RpdmU+YSAudWstbmF2LXN1YnRpdGxlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXNlY29uZGFyeT5saS51ay1hY3RpdmU+YSAudWstbmF2LXN1YnRpdGxlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnk+bGkudWstYWN0aXZlPmEgLnVrLW5hdi1zdWJ0aXRsZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXNlY29uZGFyeT5saS51ay1hY3RpdmU+YSAudWstbmF2LXN1YnRpdGxlLC51ay1saWdodCAudWstbmF2LXNlY29uZGFyeT5saS51ay1hY3RpdmU+YSAudWstbmF2LXN1YnRpdGxlLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtc2Vjb25kYXJ5PmxpLnVrLWFjdGl2ZT5hIC51ay1uYXYtc3VidGl0bGUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXNlY29uZGFyeT5saS51ay1hY3RpdmU+YSAudWstbmF2LXN1YnRpdGxlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnk+bGkudWstYWN0aXZlPmEgLnVrLW5hdi1zdWJ0aXRsZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnk+bGkudWstYWN0aXZlPmEgLnVrLW5hdi1zdWJ0aXRsZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5PmxpLnVrLWFjdGl2ZT5hIC51ay1uYXYtc3VidGl0bGUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5PmxpLnVrLWFjdGl2ZT5hIC51ay1uYXYtc3VidGl0bGV7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWhlYWRlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1oZWFkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWhlYWRlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWhlYWRlciwudWstbGlnaHQgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1oZWFkZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1oZWFkZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWhlYWRlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtaGVhZGVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWhlYWRlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtaGVhZGVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWhlYWRlcntjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtZGl2aWRlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1kaXZpZGVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1kaXZpZGVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtZGl2aWRlciwudWstbGlnaHQgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1kaXZpZGVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtZGl2aWRlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtZGl2aWRlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtZGl2aWRlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1kaXZpZGVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1kaXZpZGVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWRpdmlkZXJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhLC51ay1saWdodCAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGF7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstbGlnaHQgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhOmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1saWdodCAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YSwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5he2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi51ay1uYXYtZGl2aWRlcj46bm90KC51ay1uYXYtZGl2aWRlcikrOm5vdCgudWstbmF2LWhlYWRlciwudWstbmF2LWRpdmlkZXIpLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LnVrLW5hdi1kaXZpZGVyPjpub3QoLnVrLW5hdi1kaXZpZGVyKSs6bm90KC51ay1uYXYtaGVhZGVyLC51ay1uYXYtZGl2aWRlciksLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LnVrLW5hdi1kaXZpZGVyPjpub3QoLnVrLW5hdi1kaXZpZGVyKSs6bm90KC51ay1uYXYtaGVhZGVyLC51ay1uYXYtZGl2aWRlciksLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi51ay1uYXYtZGl2aWRlcj46bm90KC51ay1uYXYtZGl2aWRlcikrOm5vdCgudWstbmF2LWhlYWRlciwudWstbmF2LWRpdmlkZXIpLC51ay1saWdodCAudWstbmF2LnVrLW5hdi1kaXZpZGVyPjpub3QoLnVrLW5hdi1kaXZpZGVyKSs6bm90KC51ay1uYXYtaGVhZGVyLC51ay1uYXYtZGl2aWRlciksLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi51ay1uYXYtZGl2aWRlcj46bm90KC51ay1uYXYtZGl2aWRlcikrOm5vdCgudWstbmF2LWhlYWRlciwudWstbmF2LWRpdmlkZXIpLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi51ay1uYXYtZGl2aWRlcj46bm90KC51ay1uYXYtZGl2aWRlcikrOm5vdCgudWstbmF2LWhlYWRlciwudWstbmF2LWRpdmlkZXIpLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi51ay1uYXYtZGl2aWRlcj46bm90KC51ay1uYXYtZGl2aWRlcikrOm5vdCgudWstbmF2LWhlYWRlciwudWstbmF2LWRpdmlkZXIpLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LnVrLW5hdi1kaXZpZGVyPjpub3QoLnVrLW5hdi1kaXZpZGVyKSs6bm90KC51ay1uYXYtaGVhZGVyLC51ay1uYXYtZGl2aWRlciksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LnVrLW5hdi1kaXZpZGVyPjpub3QoLnVrLW5hdi1kaXZpZGVyKSs6bm90KC51ay1uYXYtaGVhZGVyLC51ay1uYXYtZGl2aWRlciksLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYudWstbmF2LWRpdmlkZXI+Om5vdCgudWstbmF2LWRpdmlkZXIpKzpub3QoLnVrLW5hdi1oZWFkZXIsLnVrLW5hdi1kaXZpZGVyKXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItbmF2PmxpPmEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXZiYXItbmF2PmxpPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLW5hdj5saT5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXZiYXItbmF2PmxpPmEsLnVrLWxpZ2h0IC51ay1uYXZiYXItbmF2PmxpPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdmJhci1uYXY+bGk+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXZiYXItbmF2PmxpPmEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdj5saT5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdj5saT5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXY+bGk+YSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXY+bGk+YXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLW5hdj5saTpob3Zlcj5hLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItbmF2PmxpPmFbYXJpYS1leHBhbmRlZD10cnVlXSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdmJhci1uYXY+bGk6aG92ZXI+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdmJhci1uYXY+bGk+YVthcmlhLWV4cGFuZGVkPXRydWVdLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci1uYXY+bGk6aG92ZXI+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItbmF2PmxpPmFbYXJpYS1leHBhbmRlZD10cnVlXSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLW5hdj5saTpob3Zlcj5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXZiYXItbmF2PmxpPmFbYXJpYS1leHBhbmRlZD10cnVlXSwudWstbGlnaHQgLnVrLW5hdmJhci1uYXY+bGk6aG92ZXI+YSwudWstbGlnaHQgLnVrLW5hdmJhci1uYXY+bGk+YVthcmlhLWV4cGFuZGVkPXRydWVdLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXZiYXItbmF2PmxpOmhvdmVyPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdmJhci1uYXY+bGk+YVthcmlhLWV4cGFuZGVkPXRydWVdLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdmJhci1uYXY+bGk6aG92ZXI+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXZiYXItbmF2PmxpPmFbYXJpYS1leHBhbmRlZD10cnVlXSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpOmhvdmVyPmEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdj5saT5hW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0sLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpOmhvdmVyPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpPmFbYXJpYS1leHBhbmRlZD10cnVlXSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpOmhvdmVyPmEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdj5saT5hW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0sLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpOmhvdmVyPmEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpPmFbYXJpYS1leHBhbmRlZD10cnVlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLW5hdj5saT5hOmFjdGl2ZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdmJhci1uYXY+bGk+YTphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLW5hdj5saT5hOmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLW5hdj5saT5hOmFjdGl2ZSwudWstbGlnaHQgLnVrLW5hdmJhci1uYXY+bGk+YTphY3RpdmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdmJhci1uYXY+bGk+YTphY3RpdmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2YmFyLW5hdj5saT5hOmFjdGl2ZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpPmE6YWN0aXZlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdj5saT5hOmFjdGl2ZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpPmE6YWN0aXZlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdj5saT5hOmFjdGl2ZXtjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItbmF2PmxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLW5hdj5saS51ay1hY3RpdmU+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItbmF2PmxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXZiYXItbmF2PmxpLnVrLWFjdGl2ZT5hLC51ay1saWdodCAudWstbmF2YmFyLW5hdj5saS51ay1hY3RpdmU+YSwudWstb2ZmY2FudmFzLWJhciAudWstbmF2YmFyLW5hdj5saS51ay1hY3RpdmU+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXZiYXItbmF2PmxpLnVrLWFjdGl2ZT5hLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXY+bGkudWstYWN0aXZlPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpLnVrLWFjdGl2ZT5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXY+bGkudWstYWN0aXZlPmEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpLnVrLWFjdGl2ZT5he2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci1pdGVtLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLWl0ZW0sLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLWl0ZW0sLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdmJhci1pdGVtLC51ay1saWdodCAudWstbmF2YmFyLWl0ZW0sLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdmJhci1pdGVtLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdmJhci1pdGVtLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1pdGVtLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLWl0ZW0sLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLWl0ZW0sLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItaXRlbXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLXRvZ2dsZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdmJhci10b2dnbGUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLXRvZ2dsZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLXRvZ2dsZSwudWstbGlnaHQgLnVrLW5hdmJhci10b2dnbGUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdmJhci10b2dnbGUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2YmFyLXRvZ2dsZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItdG9nZ2xlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItdG9nZ2xlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLXRvZ2dsZTpob3ZlciwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLXRvZ2dsZVthcmlhLWV4cGFuZGVkPXRydWVdLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLXRvZ2dsZTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdmJhci10b2dnbGVbYXJpYS1leHBhbmRlZD10cnVlXSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItdG9nZ2xlOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci10b2dnbGVbYXJpYS1leHBhbmRlZD10cnVlXSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLXRvZ2dsZTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLXRvZ2dsZVthcmlhLWV4cGFuZGVkPXRydWVdLC51ay1saWdodCAudWstbmF2YmFyLXRvZ2dsZTpob3ZlciwudWstbGlnaHQgLnVrLW5hdmJhci10b2dnbGVbYXJpYS1leHBhbmRlZD10cnVlXSwudWstb2ZmY2FudmFzLWJhciAudWstbmF2YmFyLXRvZ2dsZTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstbmF2YmFyLXRvZ2dsZVthcmlhLWV4cGFuZGVkPXRydWVdLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2YmFyLXRvZ2dsZVthcmlhLWV4cGFuZGVkPXRydWVdLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZVthcmlhLWV4cGFuZGVkPXRydWVdLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGVbYXJpYS1leHBhbmRlZD10cnVlXSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItdG9nZ2xlOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGVbYXJpYS1leHBhbmRlZD10cnVlXSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9dHJ1ZV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdj4qPjpmaXJzdC1jaGlsZCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXN1Ym5hdj4qPjpmaXJzdC1jaGlsZCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXY+Kj46Zmlyc3QtY2hpbGQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXN1Ym5hdj4qPjpmaXJzdC1jaGlsZCwudWstbGlnaHQgLnVrLXN1Ym5hdj4qPjpmaXJzdC1jaGlsZCwudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2Pio+OmZpcnN0LWNoaWxkLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXN1Ym5hdj4qPjpmaXJzdC1jaGlsZCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXY+Kj46Zmlyc3QtY2hpbGQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXY+Kj46Zmlyc3QtY2hpbGQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2Pio+OmZpcnN0LWNoaWxkLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2Pio+OmZpcnN0LWNoaWxke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXY+Kj5hOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc3VibmF2Pio+YTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXY+Kj5hOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zdWJuYXY+Kj5hOmhvdmVyLC51ay1saWdodCAudWstc3VibmF2Pio+YTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2Pio+YTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zdWJuYXY+Kj5hOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdj4qPmE6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXY+Kj5hOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdj4qPmE6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXY+Kj5hOmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXY+LnVrLWFjdGl2ZT5hLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc3VibmF2Pi51ay1hY3RpdmU+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXY+LnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zdWJuYXY+LnVrLWFjdGl2ZT5hLC51ay1saWdodCAudWstc3VibmF2Pi51ay1hY3RpdmU+YSwudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2Pi51ay1hY3RpdmU+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zdWJuYXY+LnVrLWFjdGl2ZT5hLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdj4udWstYWN0aXZlPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXY+LnVrLWFjdGl2ZT5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdj4udWstYWN0aXZlPmEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXY+LnVrLWFjdGl2ZT5he2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdi1kaXZpZGVyPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXN1Ym5hdi1kaXZpZGVyPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtZGl2aWRlcj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXN1Ym5hdi1kaXZpZGVyPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstbGlnaHQgLnVrLXN1Ym5hdi1kaXZpZGVyPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXN1Ym5hdi1kaXZpZGVyPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtZGl2aWRlcj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtZGl2aWRlcj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3Jle2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2LXBpbGw+Kj46Zmlyc3QtY2hpbGQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zdWJuYXYtcGlsbD4qPjpmaXJzdC1jaGlsZCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtcGlsbD4qPjpmaXJzdC1jaGlsZCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc3VibmF2LXBpbGw+Kj46Zmlyc3QtY2hpbGQsLnVrLWxpZ2h0IC51ay1zdWJuYXYtcGlsbD4qPjpmaXJzdC1jaGlsZCwudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2LXBpbGw+Kj46Zmlyc3QtY2hpbGQsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc3VibmF2LXBpbGw+Kj46Zmlyc3QtY2hpbGQsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGw+Kj46Zmlyc3QtY2hpbGQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbD4qPjpmaXJzdC1jaGlsZCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbD4qPjpmaXJzdC1jaGlsZCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsPio+OmZpcnN0LWNoaWxke2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdi1waWxsPio+YTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXN1Ym5hdi1waWxsPio+YTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtcGlsbD4qPmE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXN1Ym5hdi1waWxsPio+YTpob3ZlciwudWstbGlnaHQgLnVrLXN1Ym5hdi1waWxsPio+YTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2LXBpbGw+Kj5hOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXN1Ym5hdi1waWxsPio+YTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbD4qPmE6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbD4qPmE6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGw+Kj5hOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGw+Kj5hOmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSk7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdi1waWxsPio+YTphY3RpdmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zdWJuYXYtcGlsbD4qPmE6YWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdi1waWxsPio+YTphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXN1Ym5hdi1waWxsPio+YTphY3RpdmUsLnVrLWxpZ2h0IC51ay1zdWJuYXYtcGlsbD4qPmE6YWN0aXZlLC51ay1vZmZjYW52YXMtYmFyIC51ay1zdWJuYXYtcGlsbD4qPmE6YWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXN1Ym5hdi1waWxsPio+YTphY3RpdmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGw+Kj5hOmFjdGl2ZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsPio+YTphY3RpdmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGw+Kj5hOmFjdGl2ZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsPio+YTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKTtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2LXBpbGw+LnVrLWFjdGl2ZT5hLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc3VibmF2LXBpbGw+LnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdi1waWxsPi51ay1hY3RpdmU+YSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc3VibmF2LXBpbGw+LnVrLWFjdGl2ZT5hLC51ay1saWdodCAudWstc3VibmF2LXBpbGw+LnVrLWFjdGl2ZT5hLC51ay1vZmZjYW52YXMtYmFyIC51ay1zdWJuYXYtcGlsbD4udWstYWN0aXZlPmEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc3VibmF2LXBpbGw+LnVrLWFjdGl2ZT5hLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsPi51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsPi51ay1hY3RpdmU+YSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbD4udWstYWN0aXZlPmEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbD4udWstYWN0aXZlPmF7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiM2NjZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdj4udWstZGlzYWJsZWQ+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXN1Ym5hdj4udWstZGlzYWJsZWQ+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXY+LnVrLWRpc2FibGVkPmEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXN1Ym5hdj4udWstZGlzYWJsZWQ+YSwudWstbGlnaHQgLnVrLXN1Ym5hdj4udWstZGlzYWJsZWQ+YSwudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2Pi51ay1kaXNhYmxlZD5hLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXN1Ym5hdj4udWstZGlzYWJsZWQ+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXY+LnVrLWRpc2FibGVkPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXY+LnVrLWRpc2FibGVkPmEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2Pi51ay1kaXNhYmxlZD5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2Pi51ay1kaXNhYmxlZD5he2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1icmVhZGNydW1iPio+KiwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJyZWFkY3J1bWI+Kj4qLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJyZWFkY3J1bWI+Kj4qLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1icmVhZGNydW1iPio+KiwudWstbGlnaHQgLnVrLWJyZWFkY3J1bWI+Kj4qLC51ay1vZmZjYW52YXMtYmFyIC51ay1icmVhZGNydW1iPio+KiwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1icmVhZGNydW1iPio+KiwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1icmVhZGNydW1iPio+KiwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWI+Kj4qLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWI+Kj4qLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYj4qPip7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJyZWFkY3J1bWI+Kj46aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1icmVhZGNydW1iPio+OmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJyZWFkY3J1bWI+Kj46aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJyZWFkY3J1bWI+Kj46aG92ZXIsLnVrLWxpZ2h0IC51ay1icmVhZGNydW1iPio+OmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1icmVhZGNydW1iPio+OmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJyZWFkY3J1bWI+Kj46aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYj4qPjpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWI+Kj46aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYj4qPjpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWI+Kj46aG92ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJyZWFkY3J1bWI+Omxhc3QtY2hpbGQ+KiwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJyZWFkY3J1bWI+Omxhc3QtY2hpbGQ+KiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1icmVhZGNydW1iPjpsYXN0LWNoaWxkPiosLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJyZWFkY3J1bWI+Omxhc3QtY2hpbGQ+KiwudWstbGlnaHQgLnVrLWJyZWFkY3J1bWI+Omxhc3QtY2hpbGQ+KiwudWstb2ZmY2FudmFzLWJhciAudWstYnJlYWRjcnVtYj46bGFzdC1jaGlsZD4qLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJyZWFkY3J1bWI+Omxhc3QtY2hpbGQ+KiwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1icmVhZGNydW1iPjpsYXN0LWNoaWxkPiosLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1icmVhZGNydW1iPjpsYXN0LWNoaWxkPiosLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYj46bGFzdC1jaGlsZD4qLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYj46bGFzdC1jaGlsZD4qe2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1icmVhZGNydW1iPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJyZWFkY3J1bWI+Om50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJyZWFkY3J1bWI+Om50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1icmVhZGNydW1iPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstbGlnaHQgLnVrLWJyZWFkY3J1bWI+Om50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1vZmZjYW52YXMtYmFyIC51ay1icmVhZGNydW1iPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1icmVhZGNydW1iPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1icmVhZGNydW1iPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWI+Om50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWI+Om50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXBhZ2luYXRpb24+Kj4qLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcGFnaW5hdGlvbj4qPiosLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstcGFnaW5hdGlvbj4qPiosLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXBhZ2luYXRpb24+Kj4qLC51ay1saWdodCAudWstcGFnaW5hdGlvbj4qPiosLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXBhZ2luYXRpb24+Kj4qLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXBhZ2luYXRpb24+Kj4qLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24+Kj4qLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4qPiosLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4qPiosLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1wYWdpbmF0aW9uPio+Kntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstcGFnaW5hdGlvbj4qPjpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXBhZ2luYXRpb24+Kj46aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstcGFnaW5hdGlvbj4qPjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcGFnaW5hdGlvbj4qPjpob3ZlciwudWstbGlnaHQgLnVrLXBhZ2luYXRpb24+Kj46aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXBhZ2luYXRpb24+Kj46aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstcGFnaW5hdGlvbj4qPjpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1wYWdpbmF0aW9uPio+OmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4qPjpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1wYWdpbmF0aW9uPio+OmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4qPjpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstcGFnaW5hdGlvbj4udWstYWN0aXZlPiosLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1wYWdpbmF0aW9uPi51ay1hY3RpdmU+KiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1wYWdpbmF0aW9uPi51ay1hY3RpdmU+KiwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcGFnaW5hdGlvbj4udWstYWN0aXZlPiosLnVrLWxpZ2h0IC51ay1wYWdpbmF0aW9uPi51ay1hY3RpdmU+KiwudWstb2ZmY2FudmFzLWJhciAudWstcGFnaW5hdGlvbj4udWstYWN0aXZlPiosLnVrLW92ZXJsYXktcHJpbWFyeSAudWstcGFnaW5hdGlvbj4udWstYWN0aXZlPiosLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4udWstYWN0aXZlPiosLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1wYWdpbmF0aW9uPi51ay1hY3RpdmU+KiwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1wYWdpbmF0aW9uPi51ay1hY3RpdmU+KiwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24+LnVrLWFjdGl2ZT4qe2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1wYWdpbmF0aW9uPi51ay1kaXNhYmxlZD4qLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcGFnaW5hdGlvbj4udWstZGlzYWJsZWQ+KiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1wYWdpbmF0aW9uPi51ay1kaXNhYmxlZD4qLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1wYWdpbmF0aW9uPi51ay1kaXNhYmxlZD4qLC51ay1saWdodCAudWstcGFnaW5hdGlvbj4udWstZGlzYWJsZWQ+KiwudWstb2ZmY2FudmFzLWJhciAudWstcGFnaW5hdGlvbj4udWstZGlzYWJsZWQ+KiwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1wYWdpbmF0aW9uPi51ay1kaXNhYmxlZD4qLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24+LnVrLWRpc2FibGVkPiosLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1wYWdpbmF0aW9uPi51ay1kaXNhYmxlZD4qLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24+LnVrLWRpc2FibGVkPiosLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1wYWdpbmF0aW9uPi51ay1kaXNhYmxlZD4qe2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWI6OmJlZm9yZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYjo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYjo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWI6OmJlZm9yZSwudWstbGlnaHQgLnVrLXRhYjo6YmVmb3JlLC51ay1vZmZjYW52YXMtYmFyIC51ay10YWI6OmJlZm9yZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWI6OmJlZm9yZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI6OmJlZm9yZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYjo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYjo6YmVmb3JlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWI+Kj5hLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFiPio+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWI+Kj5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWI+Kj5hLC51ay1saWdodCAudWstdGFiPio+YSwudWstb2ZmY2FudmFzLWJhciAudWstdGFiPio+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWI+Kj5hLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYj4qPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+Kj5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYj4qPmEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+Kj5he2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWI+Kj5hOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFiPio+YTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWI+Kj5hOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWI+Kj5hOmhvdmVyLC51ay1saWdodCAudWstdGFiPio+YTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstdGFiPio+YTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWI+Kj5hOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYj4qPmE6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+Kj5hOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYj4qPmE6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+Kj5hOmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWI+LnVrLWFjdGl2ZT5hLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFiPi51ay1hY3RpdmU+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWI+LnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWI+LnVrLWFjdGl2ZT5hLC51ay1saWdodCAudWstdGFiPi51ay1hY3RpdmU+YSwudWstb2ZmY2FudmFzLWJhciAudWstdGFiPi51ay1hY3RpdmU+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWI+LnVrLWFjdGl2ZT5hLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYj4udWstYWN0aXZlPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+LnVrLWFjdGl2ZT5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYj4udWstYWN0aXZlPmEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+LnVrLWFjdGl2ZT5he2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYj4udWstZGlzYWJsZWQ+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYj4udWstZGlzYWJsZWQ+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWI+LnVrLWRpc2FibGVkPmEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYj4udWstZGlzYWJsZWQ+YSwudWstbGlnaHQgLnVrLXRhYj4udWstZGlzYWJsZWQ+YSwudWstb2ZmY2FudmFzLWJhciAudWstdGFiPi51ay1kaXNhYmxlZD5hLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYj4udWstZGlzYWJsZWQ+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+LnVrLWRpc2FibGVkPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+LnVrLWRpc2FibGVkPmEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiPi51ay1kaXNhYmxlZD5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiPi51ay1kaXNhYmxlZD5he2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zbGlkZW5hdiwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNsaWRlbmF2LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNsaWRlbmF2LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zbGlkZW5hdiwudWstbGlnaHQgLnVrLXNsaWRlbmF2LC51ay1vZmZjYW52YXMtYmFyIC51ay1zbGlkZW5hdiwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zbGlkZW5hdiwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdiwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2xpZGVuYXZ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNsaWRlbmF2OmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2xpZGVuYXY6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2xpZGVuYXY6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNsaWRlbmF2OmhvdmVyLC51ay1saWdodCAudWstc2xpZGVuYXY6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXNsaWRlbmF2OmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNsaWRlbmF2OmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2OmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2xpZGVuYXY6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2xpZGVuYXY6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdjpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC45NSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNsaWRlbmF2OmFjdGl2ZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNsaWRlbmF2OmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zbGlkZW5hdjphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNsaWRlbmF2OmFjdGl2ZSwudWstbGlnaHQgLnVrLXNsaWRlbmF2OmFjdGl2ZSwudWstb2ZmY2FudmFzLWJhciAudWstc2xpZGVuYXY6YWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNsaWRlbmF2OmFjdGl2ZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdjphY3RpdmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdjphY3RpdmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2xpZGVuYXY6YWN0aXZlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2xpZGVuYXY6YWN0aXZle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kb3RuYXY+Kj4qLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZG90bmF2Pio+KiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1kb3RuYXY+Kj4qLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1kb3RuYXY+Kj4qLC51ay1saWdodCAudWstZG90bmF2Pio+KiwudWstb2ZmY2FudmFzLWJhciAudWstZG90bmF2Pio+KiwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1kb3RuYXY+Kj4qLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdj4qPiosLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXY+Kj4qLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdj4qPiosLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXY+Kj4qe2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjkpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kb3RuYXY+Kj46aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1kb3RuYXY+Kj46aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstZG90bmF2Pio+OmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1kb3RuYXY+Kj46aG92ZXIsLnVrLWxpZ2h0IC51ay1kb3RuYXY+Kj46aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWRvdG5hdj4qPjpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1kb3RuYXY+Kj46aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2Pio+OmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2Pio+OmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdj4qPjpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdj4qPjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjkpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstZG90bmF2Pio+OmFjdGl2ZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRvdG5hdj4qPjphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstZG90bmF2Pio+OmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZG90bmF2Pio+OmFjdGl2ZSwudWstbGlnaHQgLnVrLWRvdG5hdj4qPjphY3RpdmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWRvdG5hdj4qPjphY3RpdmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZG90bmF2Pio+OmFjdGl2ZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXY+Kj46YWN0aXZlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2Pio+OmFjdGl2ZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXY+Kj46YWN0aXZlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2Pio+OmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstZG90bmF2Pi51ay1hY3RpdmU+KiwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRvdG5hdj4udWstYWN0aXZlPiosLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstZG90bmF2Pi51ay1hY3RpdmU+KiwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZG90bmF2Pi51ay1hY3RpdmU+KiwudWstbGlnaHQgLnVrLWRvdG5hdj4udWstYWN0aXZlPiosLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWRvdG5hdj4udWstYWN0aXZlPiosLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZG90bmF2Pi51ay1hY3RpdmU+KiwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXY+LnVrLWFjdGl2ZT4qLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2Pi51ay1hY3RpdmU+KiwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXY+LnVrLWFjdGl2ZT4qLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2Pi51ay1hY3RpdmU+KntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjkpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbm5hdj4qPmEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29ubmF2Pio+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pY29ubmF2Pio+YSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaWNvbm5hdj4qPmEsLnVrLWxpZ2h0IC51ay1pY29ubmF2Pio+YSwudWstb2ZmY2FudmFzLWJhciAudWstaWNvbm5hdj4qPmEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaWNvbm5hdj4qPmEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdj4qPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2Pio+YSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2Pio+YSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXY+Kj5he2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pY29ubmF2Pio+YTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb25uYXY+Kj5hOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWljb25uYXY+Kj5hOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29ubmF2Pio+YTpob3ZlciwudWstbGlnaHQgLnVrLWljb25uYXY+Kj5hOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1pY29ubmF2Pio+YTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pY29ubmF2Pio+YTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2Pio+YTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXY+Kj5hOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXY+Kj5hOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdj4qPmE6aG92ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWljb25uYXY+LnVrLWFjdGl2ZT5hLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaWNvbm5hdj4udWstYWN0aXZlPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbm5hdj4udWstYWN0aXZlPmEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb25uYXY+LnVrLWFjdGl2ZT5hLC51ay1saWdodCAudWstaWNvbm5hdj4udWstYWN0aXZlPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWljb25uYXY+LnVrLWFjdGl2ZT5hLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWljb25uYXY+LnVrLWFjdGl2ZT5hLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXY+LnVrLWFjdGl2ZT5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdj4udWstYWN0aXZlPmEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdj4udWstYWN0aXZlPmEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2Pi51ay1hY3RpdmU+YXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dC1sZWFkLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dC1sZWFkLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHQtbGVhZCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dC1sZWFkLC51ay1saWdodCAudWstdGV4dC1sZWFkLC51ay1vZmZjYW52YXMtYmFyIC51ay10ZXh0LWxlYWQsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGV4dC1sZWFkLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbGVhZCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbGVhZCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LWxlYWQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LWxlYWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHQtbWV0YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRleHQtbWV0YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LW1ldGEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRleHQtbWV0YSwudWstbGlnaHQgLnVrLXRleHQtbWV0YSwudWstb2ZmY2FudmFzLWJhciAudWstdGV4dC1tZXRhLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRleHQtbWV0YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LW1ldGEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LW1ldGEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1tZXRhLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1tZXRhe2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LW11dGVkLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dC1tdXRlZCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LW11dGVkLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10ZXh0LW11dGVkLC51ay1saWdodCAudWstdGV4dC1tdXRlZCwudWstb2ZmY2FudmFzLWJhciAudWstdGV4dC1tdXRlZCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10ZXh0LW11dGVkLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbXV0ZWQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LW11dGVkLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbXV0ZWQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LW11dGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpIWltcG9ydGFudH0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dC1lbXBoYXNpcywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRleHQtZW1waGFzaXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dC1lbXBoYXNpcywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dC1lbXBoYXNpcywudWstbGlnaHQgLnVrLXRleHQtZW1waGFzaXMsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRleHQtZW1waGFzaXMsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGV4dC1lbXBoYXNpcywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LWVtcGhhc2lzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1lbXBoYXNpcywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LWVtcGhhc2lzLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1lbXBoYXNpc3tjb2xvcjojZmZmIWltcG9ydGFudH0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dC1wcmltYXJ5LC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dC1wcmltYXJ5LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHQtcHJpbWFyeSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dC1wcmltYXJ5LC51ay1saWdodCAudWstdGV4dC1wcmltYXJ5LC51ay1vZmZjYW52YXMtYmFyIC51ay10ZXh0LXByaW1hcnksLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGV4dC1wcmltYXJ5LC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtcHJpbWFyeSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtcHJpbWFyeSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LXByaW1hcnksLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LXByaW1hcnl7Y29sb3I6I2ZmZiFpbXBvcnRhbnR9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHQtc2Vjb25kYXJ5LC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dC1zZWNvbmRhcnksLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dC1zZWNvbmRhcnksLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRleHQtc2Vjb25kYXJ5LC51ay1saWdodCAudWstdGV4dC1zZWNvbmRhcnksLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRleHQtc2Vjb25kYXJ5LC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRleHQtc2Vjb25kYXJ5LC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtc2Vjb25kYXJ5LC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1zZWNvbmRhcnksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1zZWNvbmRhcnksLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LXNlY29uZGFyeXtjb2xvcjojZmZmIWltcG9ydGFudH0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY29sdW1uLWRpdmlkZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1jb2x1bW4tZGl2aWRlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1jb2x1bW4tZGl2aWRlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY29sdW1uLWRpdmlkZXIsLnVrLWxpZ2h0IC51ay1jb2x1bW4tZGl2aWRlciwudWstb2ZmY2FudmFzLWJhciAudWstY29sdW1uLWRpdmlkZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstY29sdW1uLWRpdmlkZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY29sdW1uLWRpdmlkZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jb2x1bW4tZGl2aWRlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jb2x1bW4tZGl2aWRlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNvbHVtbi1kaXZpZGVye2NvbHVtbi1ydWxlLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsMC4yKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbG9nbywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxvZ28sLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbG9nbywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbG9nbywudWstbGlnaHQgLnVrLWxvZ28sLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxvZ28sLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbG9nbywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nb3tjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1sb2dvOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbG9nbzpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1sb2dvOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1sb2dvOmhvdmVyLC51ay1saWdodCAudWstbG9nbzpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstbG9nbzpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1sb2dvOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ286aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ286aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvOmhvdmVye2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxvZ28+Om5vdChwaWN0dXJlKTpub3QoLnVrLWxvZ28taW52ZXJzZSk6bm90KDpvbmx5LW9mLXR5cGUpLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1sb2dvPnBpY3R1cmU6bm90KDpvbmx5LW9mLXR5cGUpPjpub3QoLnVrLWxvZ28taW52ZXJzZSksLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1sb2dvPjpub3QocGljdHVyZSk6bm90KC51ay1sb2dvLWludmVyc2UpOm5vdCg6b25seS1vZi10eXBlKSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxvZ28+cGljdHVyZTpub3QoOm9ubHktb2YtdHlwZSk+Om5vdCgudWstbG9nby1pbnZlcnNlKSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1sb2dvPjpub3QocGljdHVyZSk6bm90KC51ay1sb2dvLWludmVyc2UpOm5vdCg6b25seS1vZi10eXBlKSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1sb2dvPnBpY3R1cmU6bm90KDpvbmx5LW9mLXR5cGUpPjpub3QoLnVrLWxvZ28taW52ZXJzZSksLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxvZ28+Om5vdChwaWN0dXJlKTpub3QoLnVrLWxvZ28taW52ZXJzZSk6bm90KDpvbmx5LW9mLXR5cGUpLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1sb2dvPnBpY3R1cmU6bm90KDpvbmx5LW9mLXR5cGUpPjpub3QoLnVrLWxvZ28taW52ZXJzZSksLnVrLWxpZ2h0IC51ay1sb2dvPjpub3QocGljdHVyZSk6bm90KC51ay1sb2dvLWludmVyc2UpOm5vdCg6b25seS1vZi10eXBlKSwudWstbGlnaHQgLnVrLWxvZ28+cGljdHVyZTpub3QoOm9ubHktb2YtdHlwZSk+Om5vdCgudWstbG9nby1pbnZlcnNlKSwudWstb2ZmY2FudmFzLWJhciAudWstbG9nbz46bm90KHBpY3R1cmUpOm5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSksLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxvZ28+cGljdHVyZTpub3QoOm9ubHktb2YtdHlwZSk+Om5vdCgudWstbG9nby1pbnZlcnNlKSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1sb2dvPjpub3QocGljdHVyZSk6bm90KC51ay1sb2dvLWludmVyc2UpOm5vdCg6b25seS1vZi10eXBlKSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1sb2dvPnBpY3R1cmU6bm90KDpvbmx5LW9mLXR5cGUpPjpub3QoLnVrLWxvZ28taW52ZXJzZSksLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbz46bm90KHBpY3R1cmUpOm5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSksLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbz5waWN0dXJlOm5vdCg6b25seS1vZi10eXBlKT46bm90KC51ay1sb2dvLWludmVyc2UpLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbz46bm90KHBpY3R1cmUpOm5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvPnBpY3R1cmU6bm90KDpvbmx5LW9mLXR5cGUpPjpub3QoLnVrLWxvZ28taW52ZXJzZSksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbz46bm90KHBpY3R1cmUpOm5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbz5waWN0dXJlOm5vdCg6b25seS1vZi10eXBlKT46bm90KC51ay1sb2dvLWludmVyc2UpLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbz46bm90KHBpY3R1cmUpOm5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSksLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvPnBpY3R1cmU6bm90KDpvbmx5LW9mLXR5cGUpPjpub3QoLnVrLWxvZ28taW52ZXJzZSl7ZGlzcGxheTpub25lfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1sb2dvLWludmVyc2UsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1sb2dvLWludmVyc2UsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbG9nby1pbnZlcnNlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1sb2dvLWludmVyc2UsLnVrLWxpZ2h0IC51ay1sb2dvLWludmVyc2UsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxvZ28taW52ZXJzZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1sb2dvLWludmVyc2UsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nby1pbnZlcnNlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nby1pbnZlcnNlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28taW52ZXJzZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28taW52ZXJzZXtkaXNwbGF5OmJsb2NrfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKDJuKTpsYXN0LWNoaWxkLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1zdHJpcGVkPnRyOm50aC1vZi10eXBlKDJuKTpsYXN0LWNoaWxkLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZSgybik6bGFzdC1jaGlsZCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlLXN0cmlwZWQ+dHI6bnRoLW9mLXR5cGUoMm4pOmxhc3QtY2hpbGQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZSgybik6bGFzdC1jaGlsZCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1zdHJpcGVkPnRyOm50aC1vZi10eXBlKDJuKTpsYXN0LWNoaWxkLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKDJuKTpsYXN0LWNoaWxkLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZS1zdHJpcGVkPnRyOm50aC1vZi10eXBlKDJuKTpsYXN0LWNoaWxkLC51ay1saWdodCAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZSgybik6bGFzdC1jaGlsZCwudWstbGlnaHQgLnVrLXRhYmxlLXN0cmlwZWQ+dHI6bnRoLW9mLXR5cGUoMm4pOmxhc3QtY2hpbGQsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoMm4pOmxhc3QtY2hpbGQsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlLXN0cmlwZWQ+dHI6bnRoLW9mLXR5cGUoMm4pOmxhc3QtY2hpbGQsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZSgybik6bGFzdC1jaGlsZCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWJsZS1zdHJpcGVkPnRyOm50aC1vZi10eXBlKDJuKTpsYXN0LWNoaWxkLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoMm4pOmxhc3QtY2hpbGQsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZSgybik6bGFzdC1jaGlsZCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoMm4pOmxhc3QtY2hpbGQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkPnRyOm50aC1vZi10eXBlKDJuKTpsYXN0LWNoaWxkLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoMm4pOmxhc3QtY2hpbGQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZSgybik6bGFzdC1jaGlsZCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoMm4pOmxhc3QtY2hpbGQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkPnRyOm50aC1vZi10eXBlKDJuKTpsYXN0LWNoaWxke2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLC51ay1saWdodCAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZXtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxMyUyMiUyMGhlaWdodCUzRCUyMjEzJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTMlMjAxMyUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjJyZ2JhJTI4MjU1LCUyMDI1NSwlMjAyNTUsJTIwMC43JTI5JTIyJTIwd2lkdGglM0QlMjIxMyUyMiUyMGhlaWdodCUzRCUyMjElMjIlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjI2JTIyJTIwJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjJyZ2JhJTI4MjU1LCUyMDI1NSwlMjAyNTUsJTIwMC43JTI5JTIyJTIwd2lkdGglM0QlMjIxJTIyJTIwaGVpZ2h0JTNEJTIyMTMlMjIlMjB4JTNEJTIyNiUyMiUyMHklM0QlMjIwJTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW9wZW4+LnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstb3Blbj4udWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstb3Blbj4udWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW9wZW4+LnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLC51ay1saWdodCAudWstb3Blbj4udWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW9wZW4+LnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW9wZW4+LnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW9wZW4+LnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstb3Blbj4udWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstb3Blbj4udWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1vcGVuPi51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZXtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxMyUyMiUyMGhlaWdodCUzRCUyMjEzJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTMlMjAxMyUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjJyZ2JhJTI4MjU1LCUyMDI1NSwlMjAyNTUsJTIwMC43JTI5JTIyJTIwd2lkdGglM0QlMjIxMyUyMiUyMGhlaWdodCUzRCUyMjElMjIlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjI2JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIil9QG1lZGlhIHByaW50eyosOjphZnRlciw6OmJlZm9yZXtiYWNrZ3JvdW5kOjAgMCFpbXBvcnRhbnQ7Y29sb3I6IzAwMCFpbXBvcnRhbnQ7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudDt0ZXh0LXNoYWRvdzpub25lIWltcG9ydGFudH1hLGE6dmlzaXRlZHt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfWJsb2NrcXVvdGUscHJle2JvcmRlcjoxcHggc29saWQgIzk5OTtwYWdlLWJyZWFrLWluc2lkZTphdm9pZH10aGVhZHtkaXNwbGF5OnRhYmxlLWhlYWRlci1ncm91cH1pbWcsdHJ7cGFnZS1icmVhay1pbnNpZGU6YXZvaWR9aW1ne21heC13aWR0aDoxMDAlIWltcG9ydGFudH1AcGFnZXttYXJnaW46LjVjbX1oMixoMyxwe29ycGhhbnM6Mzt3aWRvd3M6M31oMixoM3twYWdlLWJyZWFrLWFmdGVyOmF2b2lkfX0=]]></data>
	</file>
	<file>
	  <filename>/css/uikit/uikit.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIFVJa2l0IDMuMTUuMSB8IGh0dHBzOi8vd3d3LmdldHVpa2l0LmNvbSB8IChjKSAyMDE0IC0gMjAyMiBZT090aGVtZSB8IE1JVCBMaWNlbnNlICovCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IEJhc2UKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFNldCBgZm9udC1zaXplYCB0byBzdXBwb3J0IGByZW1gIHVuaXRzCiAqIDIuIFByZXZlbnQgYWRqdXN0bWVudHMgb2YgZm9udCBzaXplIGFmdGVyIG9yaWVudGF0aW9uIGNoYW5nZXMgaW4gaU9TLgogKiAzLiBTdHlsZQogKi8KLypodG1sIHsqLwovKiAgISogMSAqISovCi8qICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAiU2Vnb2UgVUkiLCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIEFyaWFsLCAiTm90byBTYW5zIiwgc2Fucy1zZXJpZiwgIkFwcGxlIENvbG9yIEVtb2ppIiwgIlNlZ29lIFVJIEVtb2ppIiwgIlNlZ29lIFVJIFN5bWJvbCIsICJOb3RvIENvbG9yIEVtb2ppIjsqLwovKiAgZm9udC1zaXplOiAxNnB4OyovCi8qICBmb250LXdlaWdodDogbm9ybWFsOyovCi8qICBsaW5lLWhlaWdodDogMS41OyovCi8qICAhKiAyICohKi8KLyogIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsqLwovKiAgISogMyAqISovCi8qICBiYWNrZ3JvdW5kOiAjZmZmOyovCi8qICBjb2xvcjogIzY2NjsqLwovKn0qLwovKgogKiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBhbGwgYnJvd3NlcnMuCiAqLwpib2R5IHsKICBtYXJnaW46IDA7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBSRVNFVCBUSElTOiB0byB1c2Ugd2l0aCBvdGhlciBzaGl0CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstbWFpbiAqIHsKICBsaXN0LXN0eWxlOiBub25lOwp9CgovKiBMaW5rcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogU3R5bGUKICovCiN1ay1tYWluID4gYSwKI3VrLW1haW4gPiAudWstbGluayB7CiAgY29sb3I6ICMxZTg3ZjA7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIGN1cnNvcjogcG9pbnRlcjsKfQojdWstbWFpbiA+IGE6aG92ZXIsCiN1ay1tYWluID4gLnVrLWxpbms6aG92ZXIsCiN1ay1tYWluID4gLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rIHsKICBjb2xvcjogIzBmNmVjZDsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQovKiBUZXh0LWxldmVsIHNlbWFudGljcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gQWRkIHRoZSBjb3JyZWN0IHRleHQgZGVjb3JhdGlvbiBpbiBFZGdlLgogKiAyLiBUaGUgc2hvcnRoYW5kIGRlY2xhcmF0aW9uIGB1bmRlcmxpbmUgZG90dGVkYCBpcyBub3Qgc3VwcG9ydGVkIGluIFNhZmFyaS4KICovCiN1ay1tYWluID4gYWJiclt0aXRsZV0gewogIC8qIDEgKi8KICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQ7CiAgLyogMiAqLwogIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9uLXN0eWxlOiBkb3R0ZWQ7Cn0KLyoKICogQWRkIHRoZSBjb3JyZWN0IGZvbnQgd2VpZ2h0IGluIENocm9tZSwgRWRnZSwgYW5kIFNhZmFyaS4KICovCiN1ay1tYWluID4gYiwKI3VrLW1haW4gPiBzdHJvbmcgewogIGZvbnQtd2VpZ2h0OiBib2xkZXI7Cn0KLyoKICogMS4gQ29uc29sYXMgaGFzIGEgYmV0dGVyIGJhc2VsaW5lIGluIHJ1bm5pbmcgdGV4dCBjb21wYXJlZCB0byBgQ291cmllcmAKICogMi4gQ29ycmVjdCB0aGUgb2RkIGBlbWAgZm9udCBzaXppbmcgaW4gYWxsIGJyb3dzZXJzLgogKiAzLiBTdHlsZQogKi8KOm5vdChwcmUpID4gY29kZSwKOm5vdChwcmUpID4ga2JkLAo6bm90KHByZSkgPiBzYW1wIHsKICAvKiAxICovCiAgZm9udC1mYW1pbHk6IENvbnNvbGFzLCBtb25hY28sIG1vbm9zcGFjZTsKICAvKiAyICovCiAgZm9udC1zaXplOiAwLjg3NXJlbTsKICAvKiAzICovCiAgY29sb3I6ICNmMDUwNmU7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICBwYWRkaW5nOiAycHggNnB4OwogIGJhY2tncm91bmQ6ICNmOGY4Zjg7Cn0KLyoKICogRW1waGFzaXplCiAqLwojdWstbWFpbiA+IGVtIHsKICBjb2xvcjogI2YwNTA2ZTsKfQovKgogKiBJbnNlcnQKICovCiN1ay1tYWluID4gaW5zIHsKICBiYWNrZ3JvdW5kOiAjZmZkOwogIGNvbG9yOiAjNjY2OwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQovKgogKiBNYXJrCiAqLwojdWstbWFpbiA+IG1hcmsgewogIGJhY2tncm91bmQ6ICNmZmQ7CiAgY29sb3I6ICM2NjY7Cn0KLyoKICogUXVvdGUKICovCiN1ay1tYWluID4gcSB7CiAgZm9udC1zdHlsZTogaXRhbGljOwp9Ci8qCiAqIEFkZCB0aGUgY29ycmVjdCBmb250IHNpemUgaW4gYWxsIGJyb3dzZXJzLgogKi8KI3VrLW1haW4gPiBzbWFsbCB7CiAgZm9udC1zaXplOiA4MCU7Cn0KLyoKICogUHJldmVudHMgYHN1YmAgYW5kIGBzdXBgIGFmZmVjdGluZyBgbGluZS1oZWlnaHRgIGluIGFsbCBicm93c2Vycy4KICovCiN1ay1tYWluID4gc3ViLAojdWstbWFpbiA+IHN1cCB7CiAgZm9udC1zaXplOiA3NSU7CiAgbGluZS1oZWlnaHQ6IDA7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKfQojdWstbWFpbiA+IHN1cCB7CiAgdG9wOiAtMC41ZW07Cn0KI3VrLW1haW4gPiBzdWIgewogIGJvdHRvbTogLTAuMjVlbTsKfQovKiBFbWJlZGRlZCBjb250ZW50CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBSZW1vdmUgdGhlIGdhcCBiZXR3ZWVuIHRoZSBlbGVtZW50IGFuZCB0aGUgYm90dG9tIG9mIGl0cyBwYXJlbnQgY29udGFpbmVyLgogKi8KI3VrLW1haW4gPiBhdWRpbywKI3VrLW1haW4gPiBjYW52YXMsCiN1ay1tYWluID4gaWZyYW1lLAojdWstbWFpbiA+IGltZywKI3VrLW1haW4gPiBzdmcsCiN1ay1tYWluID4gdmlkZW8gewogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cn0KLyoKICogMS4gQ29uc3RyYWluIHRoZSBlbGVtZW50IHRvIGl0cyBwYXJlbnQgd2lkdGguCiAqIDIuIFByZXNlcnZlIHRoZSBpbnRyaW5zaWMgYXNwZWN0IHJhdGlvIGFuZCBhdXRvLXNjYWxlIHRoZSBoZWlnaHQgb2YgYW4gaW1hZ2UgaWYgdGhlIGBoZWlnaHRgIGF0dHJpYnV0ZSBpcyBwcmVzZW50LgogKiAzLiBUYWtlIGJvcmRlciBhbmQgcGFkZGluZyBpbnRvIGFjY291bnQuCiAqLwojdWstbWFpbiA+IGNhbnZhcywKI3VrLW1haW4gPiBpbWcsCiN1ay1tYWluID4gc3ZnLAojdWstbWFpbiA+IHZpZGVvIHsKICAvKiAxICovCiAgbWF4LXdpZHRoOiAxMDAlOwogIC8qIDIgKi8KICBoZWlnaHQ6IGF1dG87CiAgLyogMyAqLwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KLyoKICogRGVwcmVjYXRlZDogb25seSBuZWVkZWQgZm9yIGBpbWdgIGVsZW1lbnRzIHdpdGggYHVrLWltZ2AKICogMS4gSGlkZSBgYWx0YCB0ZXh0IGZvciBsYXp5IGxvYWQgaW1hZ2VzLgogKiAyLiBGaXggbGF6eSBsb2FkaW5nIGltYWdlcyBpZiBwYXJlbnQgZWxlbWVudCBpcyBzZXQgdG8gYGRpc3BsYXk6IGlubGluZWAgYW5kIGhhcyBgb3ZlcmZsb3c6IGhpZGRlbmAuCiAqLwojdWstbWFpbiA+IGltZzpub3QoW3NyY10pIHsKICAvKiAxICovCiAgdmlzaWJpbGl0eTogaGlkZGVuOwogIC8qIDIgKi8KICBtaW4td2lkdGg6IDFweDsKfQovKgogKiBJZnJhbWUKICogUmVtb3ZlIGJvcmRlciBpbiBhbGwgYnJvd3NlcnMKICovCiN1ay1tYWluID4gaWZyYW1lIHsKICBib3JkZXI6IDA7Cn0KLyogQmxvY2sgZWxlbWVudHMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIE1hcmdpbnMKICovCiN1ay1tYWluID4gcCwKI3VrLW1haW4gPiAudWstbGlzdCB1bCwgLnVrLXN1Ym5hdiB1bCwKI3VrLW1haW4gPiAudWstbGlzdCBvbCwgLnVrLXN1Ym5hdiBvbCwKI3VrLW1haW4gPiAudWstbGlzdCBkbCwgLnVrLXN1Ym5hdiBkbCwKI3VrLW1haW4gPiBwcmUsCiN1ay1tYWluID4gYWRkcmVzcywKI3VrLW1haW4gPiBmaWVsZHNldCwKI3VrLW1haW4gPiBmaWd1cmUgewogIG1hcmdpbjogMCAwIDIwcHggMCAhaW1wb3J0YW50Owp9CiBBZGQgbWFyZ2luIGlmIGFkamFjZW50IGVsZW1lbnQKI3VrLW1haW4gPiAqICsgcCwKI3VrLW1haW4gPiAqICsgLnVrLWxpc3QgdWwsCiN1ay1tYWluID4gKiArIC51ay1saXN0IG9sLAojdWstbWFpbiA+ICogKyAudWstbGlzdCBkbCwKI3VrLW1haW4gPiAqICsgLnVrLXN1Ym5hdiB1bCwKI3VrLW1haW4gPiAqICsgLnVrLXN1Ym5hdiBvbCwKI3VrLW1haW4gPiAqICsgLnVrLXN1Ym5hdiBkbCwKI3VrLW1haW4gPiAqICsgcHJlLAojdWstbWFpbiA+ICogKyBhZGRyZXNzLAojdWstbWFpbiA+ICogKyBmaWVsZHNldCwKI3VrLW1haW4gPiAqICsgZmlndXJlIHsKICBtYXJnaW4tdG9wOiAyMHB4ICFpbXBvcnRhbnQ7Cn0KLyogSGVhZGluZ3MKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiN1ay1tYWluID4gaDEsCi51ay1oMSwKI3VrLW1haW4gPiBoMiwKLnVrLWgyLAojdWstbWFpbiA+IGgzLAoudWstaDMsCiN1ay1tYWluID4gaDQsCi51ay1oNCwKI3VrLW1haW4gPiBoNSwKLnVrLWg1LAojdWstbWFpbiA+IGg2LAoudWstaDYsCi51ay1oZWFkaW5nLXNtYWxsLAoudWstaGVhZGluZy1tZWRpdW0sCi51ay1oZWFkaW5nLWxhcmdlLAoudWstaGVhZGluZy14bGFyZ2UsCi51ay1oZWFkaW5nLTJ4bGFyZ2UgewogIG1hcmdpbjogMCAwIDIwcHggMDsKICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAiU2Vnb2UgVUkiLCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIEFyaWFsLCAiTm90byBTYW5zIiwgc2Fucy1zZXJpZiwgIkFwcGxlIENvbG9yIEVtb2ppIiwgIlNlZ29lIFVJIEVtb2ppIiwgIlNlZ29lIFVJIFN5bWJvbCIsICJOb3RvIENvbG9yIEVtb2ppIjsKICBmb250LXdlaWdodDogbm9ybWFsOwogIGNvbG9yOiAjMzMzOwogIHRleHQtdHJhbnNmb3JtOiBub25lOwp9Ci8qIEFkZCBtYXJnaW4gaWYgYWRqYWNlbnQgZWxlbWVudCAqLwojdWstbWFpbiA+ICogKyBoMSwKKiArIC51ay1oMSwKI3VrLW1haW4gPiAqICsgaDIsCiogKyAudWstaDIsCiN1ay1tYWluID4gKiArIGgzLAoqICsgLnVrLWgzLAojdWstbWFpbiA+ICogKyBoNCwKKiArIC51ay1oNCwKI3VrLW1haW4gPiAqICsgaDUsCiogKyAudWstaDUsCiN1ay1tYWluID4gKiArIGg2LAoqICsgLnVrLWg2LAoqICsgLnVrLWhlYWRpbmctc21hbGwsCiogKyAudWstaGVhZGluZy1tZWRpdW0sCiogKyAudWstaGVhZGluZy1sYXJnZSwKKiArIC51ay1oZWFkaW5nLXhsYXJnZSwKKiArIC51ay1oZWFkaW5nLTJ4bGFyZ2UgewogIG1hcmdpbi10b3A6IDQwcHg7Cn0KLyoKICogU2l6ZXMKICovCiN1ay1tYWluID4gaDEsCi51ay1oMSB7CiAgZm9udC1zaXplOiAyLjIzMTI1cmVtOwogIGxpbmUtaGVpZ2h0OiAxLjI7Cn0KI3VrLW1haW4gPiBoMiwKLnVrLWgyIHsKICBmb250LXNpemU6IDEuN3JlbTsKICBsaW5lLWhlaWdodDogMS4zOwp9CiN1ay1tYWluID4gaDMsCi51ay1oMyB7CiAgZm9udC1zaXplOiAxLjVyZW07CiAgbGluZS1oZWlnaHQ6IDEuNDsKfQojdWstbWFpbiA+IGg0LAoudWstaDQgewogIGZvbnQtc2l6ZTogMS4yNXJlbTsKICBsaW5lLWhlaWdodDogMS40Owp9CiN1ay1tYWluID4gaDUsCi51ay1oNSB7CiAgZm9udC1zaXplOiAxNnB4OwogIGxpbmUtaGVpZ2h0OiAxLjQ7Cn0KI3VrLW1haW4gPiBoNiwKLnVrLWg2IHsKICBmb250LXNpemU6IDAuODc1cmVtOwogIGxpbmUtaGVpZ2h0OiAxLjQ7Cn0KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogICN1ay1tYWluID4gICBoMSwKICAudWstaDEgewogICAgZm9udC1zaXplOiAyLjYyNXJlbTsKICB9CiAgI3VrLW1haW4gPiBoMiwKICAudWstaDIgewogICAgZm9udC1zaXplOiAycmVtOwogIH0KfQovKiBMaXN0cwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KI3VrLW1haW4gPiB1bCwKI3VrLW1haW4gPiBvbAp7CiAgbGlzdC1zdHlsZTogbm9uZSAhaW1wb3J0YW50Owp9CgoudWstbGlzdCB1bCwKLnVrLXN1Ym5hdiB1bCwKLnVrLXN1Ym5hdiBvbCwKLnVrLWxpc3Qgb2wgewogIHBhZGRpbmctbGVmdDogMzBweDsKICBtYXJnaW46IDAgIWltcG9ydGFudDsKfQovKgogKiBSZXNldCBtYXJnaW4gZm9yIG5lc3RlZCBsaXN0cwogKi8KLnVrLWxpc3QgdWwgPiBsaSA+IHVsLAoudWstbGlzdCB1bCA+IGxpID4gb2wsCi51ay1saXN0IG9sID4gbGkgPiBvbCwKLnVrLWxpc3Qgb2wgPiBsaSA+IHVsLAoudWstc3VibmF2IHVsID4gbGkgPiB1bCwKLnVrLXN1Ym5hdiB1bCA+IGxpID4gb2wsCi51ay1zdWJuYXYgb2wgPiBsaSA+IG9sLAoudWstc3VibmF2IG9sID4gbGkgPiB1bAp7CiAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7Cn0KLyogRGVzY3JpcHRpb24gbGlzdHMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiN1ay1tYWluID4gZHQgewogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CiN1ay1tYWluID4gZGQgewogIG1hcmdpbi1sZWZ0OiAwOwp9Ci8qIEhvcml6b250YWwgcnVsZXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFNob3cgdGhlIG92ZXJmbG93IGluIENocm9tZSwgRWRnZSBhbmQgSUUuCiAqIDIuIEFkZCB0aGUgY29ycmVjdCB0ZXh0LWFsaWduIGluIEVkZ2UgYW5kIElFLgogKiAzLiBTdHlsZQogKi8KaHIsCi51ay1ociB7CiAgLyogMSAqLwogIG92ZXJmbG93OiB2aXNpYmxlOwogIC8qIDIgKi8KICB0ZXh0LWFsaWduOiBpbmhlcml0OwogIC8qIDMgKi8KICBtYXJnaW46IDAgMCAyMHB4IDA7CiAgYm9yZGVyOiAwOwogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1Owp9Ci8qIEFkZCBtYXJnaW4gaWYgYWRqYWNlbnQgZWxlbWVudCAqLwoqICsgaHIsCiogKyAudWstaHIgewogIG1hcmdpbi10b3A6IDIwcHg7Cn0KLyogQWRkcmVzcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KYWRkcmVzcyB7CiAgZm9udC1zdHlsZTogbm9ybWFsOwp9Ci8qIEJsb2NrcXVvdGVzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpibG9ja3F1b3RlIHsKICBtYXJnaW46IDAgMCAyMHB4IDA7CiAgZm9udC1zaXplOiAxLjI1cmVtOwogIGxpbmUtaGVpZ2h0OiAxLjU7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGNvbG9yOiAjMzMzOwp9Ci8qIEFkZCBtYXJnaW4gaWYgYWRqYWNlbnQgZWxlbWVudCAqLwoqICsgYmxvY2txdW90ZSB7CiAgbWFyZ2luLXRvcDogMjBweDsKfQovKgogKiBDb250ZW50CiAqLwpibG9ja3F1b3RlIHA6bGFzdC1vZi10eXBlIHsKICBtYXJnaW4tYm90dG9tOiAwOwp9CmJsb2NrcXVvdGUgZm9vdGVyIHsKICBtYXJnaW4tdG9wOiAxMHB4OwogIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgbGluZS1oZWlnaHQ6IDEuNTsKICBjb2xvcjogIzY2NjsKfQpibG9ja3F1b3RlIGZvb3Rlcjo6YmVmb3JlIHsKICBjb250ZW50OiAi4oCUICI7Cn0KLyogUHJlZm9ybWF0dGVkIHRleHQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIENvbnRhaW4gb3ZlcmZsb3cgaW4gYWxsIGJyb3dzZXJzLgogKi8KcHJlIHsKICBmb250OiAwLjg3NXJlbSAvIDEuNSBDb25zb2xhcywgbW9uYWNvLCBtb25vc3BhY2U7CiAgY29sb3I6ICM2NjY7CiAgLW1vei10YWItc2l6ZTogNDsKICB0YWItc2l6ZTogNDsKICAvKiAxICovCiAgb3ZlcmZsb3c6IGF1dG87CiAgcGFkZGluZzogMTBweDsKICBib3JkZXI6IDFweCBzb2xpZCAjZTVlNWU1OwogIGJvcmRlci1yYWRpdXM6IDNweDsKICBiYWNrZ3JvdW5kOiAjZmZmOwp9CnByZSBjb2RlIHsKICBmb250LWZhbWlseTogQ29uc29sYXMsIG1vbmFjbywgbW9ub3NwYWNlOwp9Ci8qIEZvY3VzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwo6Zm9jdXMgewogIG91dGxpbmU6IG5vbmU7Cn0KOmZvY3VzLXZpc2libGUgewogIG91dGxpbmU6IDJweCBkb3R0ZWQgIzMzMzsKfQovKiBTZWxlY3Rpb24gcHNldWRvLWVsZW1lbnQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCjo6c2VsZWN0aW9uIHsKICBiYWNrZ3JvdW5kOiAjMzlmOwogIGNvbG9yOiAjZmZmOwogIHRleHQtc2hhZG93OiBub25lOwp9Ci8qIEhUTUw1IGVsZW1lbnRzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBFZGdlLCBJRSAxMCssIGFuZCBGaXJlZm94LgogKiAyLiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRS4KICovCmRldGFpbHMsCm1haW4gewogIC8qIDIgKi8KICBkaXNwbGF5OiBibG9jazsKfQovKgogKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBhbGwgYnJvd3NlcnMuCiAqLwpzdW1tYXJ5IHsKICBkaXNwbGF5OiBsaXN0LWl0ZW07Cn0KLyoKICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUuCiAqLwp0ZW1wbGF0ZSB7CiAgZGlzcGxheTogbm9uZTsKfQovKiBQYXNzIG1lZGlhIGJyZWFrcG9pbnRzIHRvIEpTCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBCcmVha3BvaW50cwogKi8KOnJvb3QgewogIC0tdWstYnJlYWtwb2ludC1zOiA2NDBweDsKICAtLXVrLWJyZWFrcG9pbnQtbTogOTYwcHg7CiAgLS11ay1icmVha3BvaW50LWw6IDEyMDBweDsKICAtLXVrLWJyZWFrcG9pbnQteGw6IDE2MDBweDsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBMaW5rCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBNdXRlZAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KYS51ay1saW5rLW11dGVkLAoudWstbGluay1tdXRlZCBhLAoudWstbGluay10b2dnbGUgLnVrLWxpbmstbXV0ZWQgewogIGNvbG9yOiAjOTk5Owp9CmEudWstbGluay1tdXRlZDpob3ZlciwKLnVrLWxpbmstbXV0ZWQgYTpob3ZlciwKLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLW11dGVkIHsKICBjb2xvcjogIzY2NjsKfQovKiBUZXh0CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwphLnVrLWxpbmstdGV4dCwKLnVrLWxpbmstdGV4dCBhLAoudWstbGluay10b2dnbGUgLnVrLWxpbmstdGV4dCB7CiAgY29sb3I6IGluaGVyaXQ7Cn0KYS51ay1saW5rLXRleHQ6aG92ZXIsCi51ay1saW5rLXRleHQgYTpob3ZlciwKLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLXRleHQgewogIGNvbG9yOiAjOTk5Owp9Ci8qIEhlYWRpbmcKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmEudWstbGluay1oZWFkaW5nLAoudWstbGluay1oZWFkaW5nIGEsCi51ay1saW5rLXRvZ2dsZSAudWstbGluay1oZWFkaW5nIHsKICBjb2xvcjogaW5oZXJpdDsKfQphLnVrLWxpbmstaGVhZGluZzpob3ZlciwKLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLAoudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstaGVhZGluZyB7CiAgY29sb3I6ICMxZTg3ZjA7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci8qIFJlc2V0CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBgIWltcG9ydGFudGAgbmVlZGVkIHRvIG92ZXJyaWRlIGludmVyc2UgY29tcG9uZW50CiAqLwphLnVrLWxpbmstcmVzZXQsCi51ay1saW5rLXJlc2V0IGEgewogIGNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7Cn0KLyogVG9nZ2xlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstbGluay10b2dnbGUgewogIGNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogSGVhZGluZwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWhlYWRpbmctc21hbGwgewogIGZvbnQtc2l6ZTogMi42cmVtOwogIGxpbmUtaGVpZ2h0OiAxLjI7Cn0KLnVrLWhlYWRpbmctbWVkaXVtIHsKICBmb250LXNpemU6IDIuODg3NXJlbTsKICBsaW5lLWhlaWdodDogMS4xOwp9Ci51ay1oZWFkaW5nLWxhcmdlIHsKICBmb250LXNpemU6IDMuNHJlbTsKICBsaW5lLWhlaWdodDogMS4xOwp9Ci51ay1oZWFkaW5nLXhsYXJnZSB7CiAgZm9udC1zaXplOiA0cmVtOwogIGxpbmUtaGVpZ2h0OiAxOwp9Ci51ay1oZWFkaW5nLTJ4bGFyZ2UgewogIGZvbnQtc2l6ZTogNnJlbTsKICBsaW5lLWhlaWdodDogMTsKfQovKiBUYWJsZXQgTGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7CiAgLnVrLWhlYWRpbmctc21hbGwgewogICAgZm9udC1zaXplOiAzLjI1cmVtOwogIH0KICAudWstaGVhZGluZy1tZWRpdW0gewogICAgZm9udC1zaXplOiAzLjVyZW07CiAgfQogIC51ay1oZWFkaW5nLWxhcmdlIHsKICAgIGZvbnQtc2l6ZTogNHJlbTsKICB9CiAgLnVrLWhlYWRpbmcteGxhcmdlIHsKICAgIGZvbnQtc2l6ZTogNnJlbTsKICB9CiAgLnVrLWhlYWRpbmctMnhsYXJnZSB7CiAgICBmb250LXNpemU6IDhyZW07CiAgfQp9Ci8qIExhcHRvcCBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHsKICAudWstaGVhZGluZy1tZWRpdW0gewogICAgZm9udC1zaXplOiA0cmVtOwogIH0KICAudWstaGVhZGluZy1sYXJnZSB7CiAgICBmb250LXNpemU6IDZyZW07CiAgfQogIC51ay1oZWFkaW5nLXhsYXJnZSB7CiAgICBmb250LXNpemU6IDhyZW07CiAgfQogIC51ay1oZWFkaW5nLTJ4bGFyZ2UgewogICAgZm9udC1zaXplOiAxMXJlbTsKICB9Cn0KLyogUHJpbWFyeQogICBEZXByZWNhdGVkOiBVc2UgYHVrLWhlYWRpbmctbWVkaXVtYCBpbnN0ZWFkCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBUYWJsZXQgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KLyogRGVza3RvcCBhbmQgYmlnZ2VyICovCi8qIEhlcm8KICAgRGVwcmVjYXRlZDogVXNlIGB1ay1oZWFkaW5nLXhsYXJnZWAgaW5zdGVhZAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCi8qIERlc2t0b3AgYW5kIGJpZ2dlciAqLwovKiBEaXZpZGVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstaGVhZGluZy1kaXZpZGVyIHsKICBwYWRkaW5nLWJvdHRvbTogY2FsYyg1cHggKyAwLjFlbSk7CiAgYm9yZGVyLWJvdHRvbTogY2FsYygwLjJweCArIDAuMDVlbSkgc29saWQgI2U1ZTVlNTsKfQovKiBCdWxsZXQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1oZWFkaW5nLWJ1bGxldCB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9Ci8qCiAqIDEuIFVzaW5nIGBpbmxpbmUtYmxvY2tgIHRvIG1ha2UgaXQgd29yayB3aXRoIHRleHQgYWxpZ25tZW50CiAqIDIuIENlbnRlciB2ZXJ0aWNhbGx5CiAqIDMuIFN0eWxlCiAqLwoudWstaGVhZGluZy1idWxsZXQ6OmJlZm9yZSB7CiAgY29udGVudDogIiI7CiAgLyogMSAqLwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAvKiAyICovCiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHRvcDogY2FsYygtMC4xICogMWVtKTsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIC8qIDMgKi8KICBoZWlnaHQ6IGNhbGMoNHB4ICsgMC43ZW0pOwogIG1hcmdpbi1yaWdodDogY2FsYyg1cHggKyAwLjJlbSk7CiAgYm9yZGVyLWxlZnQ6IGNhbGMoNXB4ICsgMC4xZW0pIHNvbGlkICNlNWU1ZTU7Cn0KLyogTGluZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogQ2xpcCB0aGUgY2hpbGQgZWxlbWVudAogKi8KLnVrLWhlYWRpbmctbGluZSB7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQovKgogKiBFeHRyYSBtYXJrdXAgaXMgbmVlZGVkIHRvIG1ha2UgaXQgd29yayB3aXRoIHRleHQgYWxpZ24KICovCi51ay1oZWFkaW5nLWxpbmUgPiAqIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9Ci8qCiAqIDEuIENlbnRlciB2ZXJ0aWNhbGx5CiAqIDIuIE1ha2UgdGhlIGVsZW1lbnQgYXMgbGFyZ2UgYXMgcG9zc2libGUuIEl0J3MgY2xpcHBlZCBieSB0aGUgY29udGFpbmVyLgogKiAzLiBTdHlsZQogKi8KLnVrLWhlYWRpbmctbGluZSA+IDo6YmVmb3JlLAoudWstaGVhZGluZy1saW5lID4gOjphZnRlciB7CiAgY29udGVudDogIiI7CiAgLyogMSAqLwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IGNhbGMoNTAlIC0gKGNhbGMoMC4ycHggKyAwLjA1ZW0pIC8gMikpOwogIC8qIDIgKi8KICB3aWR0aDogMjAwMHB4OwogIC8qIDMgKi8KICBib3JkZXItYm90dG9tOiBjYWxjKDAuMnB4ICsgMC4wNWVtKSBzb2xpZCAjZTVlNWU1Owp9Ci51ay1oZWFkaW5nLWxpbmUgPiA6OmJlZm9yZSB7CiAgcmlnaHQ6IDEwMCU7CiAgbWFyZ2luLXJpZ2h0OiBjYWxjKDVweCArIDAuM2VtKTsKfQoudWstaGVhZGluZy1saW5lID4gOjphZnRlciB7CiAgbGVmdDogMTAwJTsKICBtYXJnaW4tbGVmdDogY2FsYyg1cHggKyAwLjNlbSk7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogRGl2aWRlcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gUmVzZXQgZGVmYXVsdCBgaHJgCiAqIDIuIFNldCBtYXJnaW4gaWYgYSBgZGl2YCBpcyB1c2VkIGZvciBzZW1hbnRpY2FsIHJlYXNvbgogKi8KW2NsYXNzKj0ndWstZGl2aWRlciddIHsKICAvKiAxICovCiAgYm9yZGVyOiBub25lOwogIC8qIDIgKi8KICBtYXJnaW4tYm90dG9tOiAyMHB4Owp9Ci8qIEFkZCBtYXJnaW4gaWYgYWRqYWNlbnQgZWxlbWVudCAqLwoqICsgW2NsYXNzKj0ndWstZGl2aWRlciddIHsKICBtYXJnaW4tdG9wOiAyMHB4Owp9Ci8qIEljb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1kaXZpZGVyLWljb24gewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBoZWlnaHQ6IDIwcHg7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjIwJTIyJTIwaGVpZ2h0JTNEJTIyMjAlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAyMCUyMDIwJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NjaXJjbGUlMjBmaWxsJTNEJTIybm9uZSUyMiUyMHN0cm9rZSUzRCUyMiUyM2U1ZTVlNSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjIlMjIlMjBjeCUzRCUyMjEwJTIyJTIwY3klM0QlMjIxMCUyMiUyMHIlM0QlMjI3JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIik7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNTAlOwp9Ci51ay1kaXZpZGVyLWljb246OmJlZm9yZSwKLnVrLWRpdmlkZXItaWNvbjo6YWZ0ZXIgewogIGNvbnRlbnQ6ICIiOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDUwJTsKICBtYXgtd2lkdGg6IGNhbGMoNTAlIC0gKDUwcHggLyAyKSk7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNWU1ZTU7Cn0KLnVrLWRpdmlkZXItaWNvbjo6YmVmb3JlIHsKICByaWdodDogY2FsYyg1MCUgKyAoNTBweCAvIDIpKTsKICB3aWR0aDogMTAwJTsKfQoudWstZGl2aWRlci1pY29uOjphZnRlciB7CiAgbGVmdDogY2FsYyg1MCUgKyAoNTBweCAvIDIpKTsKICB3aWR0aDogMTAwJTsKfQovKiBTbWFsbAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gRml4IGhlaWdodCBiZWNhdXNlIG9mIGBpbmxpbmUtYmxvY2tgCiAqIDIuIFVzaW5nIDo6YWZ0ZXIgYW5kIGlubGluZS1ibG9jayB0byBtYWtlIGB0ZXh0LWFsaWduYCB3b3JrCiAqLwovKiAxICovCi51ay1kaXZpZGVyLXNtYWxsIHsKICBsaW5lLWhlaWdodDogMDsKfQovKiAyICovCi51ay1kaXZpZGVyLXNtYWxsOjphZnRlciB7CiAgY29udGVudDogIiI7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHdpZHRoOiAxMDBweDsKICBtYXgtd2lkdGg6IDEwMCU7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNWU1ZTU7CiAgdmVydGljYWwtYWxpZ246IHRvcDsKfQovKiBWZXJ0aWNhbAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWRpdmlkZXItdmVydGljYWwgewogIHdpZHRoOiBtYXgtY29udGVudDsKICBoZWlnaHQ6IDEwMHB4OwogIG1hcmdpbi1sZWZ0OiBhdXRvOwogIG1hcmdpbi1yaWdodDogYXV0bzsKICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNlNWU1ZTU7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogTGlzdAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWxpc3QgewogIHBhZGRpbmc6IDA7CiAgbGlzdC1zdHlsZTogbm9uZSAhaW1wb3J0YW50Owp9Ci8qCiAqIFJlbW92ZSBtYXJnaW4gZnJvbSB0aGUgbGFzdC1jaGlsZAogKi8KLnVrLWxpc3QgPiAqID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KLyoKICogU3R5bGUKICovCi51ay1saXN0ID4gOm50aC1jaGlsZChuKzIpLAoudWstbGlzdCA+ICogPiB1bCB7CiAgbWFyZ2luLXRvcDogMTBweDsKfQovKiBNYXJrZXIgbW9kaWZpZXJzCiAqIE1vdmluZyBgOjptYXJrZXJgIGluc2lkZSBgOjpiZWZvcmVgIHRvIHN0eWxlIGl0IGRpZmZlcmVudGx5CiAqIFRvIHN0eWxlIHRoZSBgOjptYXJrZXJgIGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBpbiBGaXJlZm94IGFuZCBTYWZhcmkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1saXN0LWRpc2MgPiAqLAoudWstbGlzdC1jaXJjbGUgPiAqLAoudWstbGlzdC1zcXVhcmUgPiAqLAoudWstbGlzdC1kZWNpbWFsID4gKiwKLnVrLWxpc3QtaHlwaGVuID4gKiB7CiAgcGFkZGluZy1sZWZ0OiAzMHB4Owp9Ci8qCiAqIFR5cGUgbW9kaWZpZXJzCiAqLwoudWstbGlzdC1kZWNpbWFsIHsKICBjb3VudGVyLXJlc2V0OiBkZWNpbWFsOwp9Ci51ay1saXN0LWRlY2ltYWwgPiAqIHsKICBjb3VudGVyLWluY3JlbWVudDogZGVjaW1hbDsKfQoudWstbGlzdC1kaXNjID4gOjpiZWZvcmUsCi51ay1saXN0LWNpcmNsZSA+IDo6YmVmb3JlLAoudWstbGlzdC1zcXVhcmUgPiA6OmJlZm9yZSwKLnVrLWxpc3QtZGVjaW1hbCA+IDo6YmVmb3JlLAoudWstbGlzdC1oeXBoZW4gPiA6OmJlZm9yZSB7CiAgY29udGVudDogIiI7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGxlZnQ6IC0zMHB4OwogIHdpZHRoOiAzMHB4OwogIGhlaWdodDogMS41ZW07CiAgbWFyZ2luLWJvdHRvbTogLTEuNWVtOwogIGRpc3BsYXk6IGxpc3QtaXRlbTsKICBsaXN0LXN0eWxlLXBvc2l0aW9uOiBpbnNpZGU7CiAgdGV4dC1hbGlnbjogcmlnaHQ7Cn0KLnVrLWxpc3QtZGlzYyA+IDo6YmVmb3JlIHsKICBsaXN0LXN0eWxlLXR5cGU6IGRpc2M7Cn0KLnVrLWxpc3QtY2lyY2xlID4gOjpiZWZvcmUgewogIGxpc3Qtc3R5bGUtdHlwZTogY2lyY2xlOwp9Ci51ay1saXN0LXNxdWFyZSA+IDo6YmVmb3JlIHsKICBsaXN0LXN0eWxlLXR5cGU6IHNxdWFyZTsKfQoudWstbGlzdC1kZWNpbWFsID4gOjpiZWZvcmUgewogIGNvbnRlbnQ6IGNvdW50ZXIoZGVjaW1hbCwgZGVjaW1hbCkgJ1wyMDBBLlwwMEEwJzsKfQoudWstbGlzdC1oeXBoZW4gPiA6OmJlZm9yZSB7CiAgY29udGVudDogJ+KAk1wwMEEwXDAwQTAnOwp9Ci8qCiAqIENvbG9yIG1vZGlmaWVycwogKi8KLnVrLWxpc3QtbXV0ZWQgPiA6OmJlZm9yZSB7CiAgY29sb3I6ICM5OTkgIWltcG9ydGFudDsKfQoudWstbGlzdC1lbXBoYXNpcyA+IDo6YmVmb3JlIHsKICBjb2xvcjogIzMzMyAhaW1wb3J0YW50Owp9Ci51ay1saXN0LXByaW1hcnkgPiA6OmJlZm9yZSB7CiAgY29sb3I6ICMxZTg3ZjAgIWltcG9ydGFudDsKfQoudWstbGlzdC1zZWNvbmRhcnkgPiA6OmJlZm9yZSB7CiAgY29sb3I6ICMyMjIgIWltcG9ydGFudDsKfQovKiBJbWFnZSBidWxsZXQgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1saXN0LWJ1bGxldCA+ICogewogIHBhZGRpbmctbGVmdDogMzBweDsKfQoudWstbGlzdC1idWxsZXQgPiA6OmJlZm9yZSB7CiAgY29udGVudDogIiI7CiAgZGlzcGxheTogbGlzdC1pdGVtOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBsZWZ0OiAtMzBweDsKICB3aWR0aDogMzBweDsKICBoZWlnaHQ6IDEuNWVtOwogIG1hcmdpbi1ib3R0b206IC0xLjVlbTsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyNiUyMiUyMGhlaWdodCUzRCUyMjYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjA2JTIwNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDY2lyY2xlJTIwZmlsbCUzRCUyMiUyMzY2NiUyMiUyMGN4JTNEJTIyMyUyMiUyMGN5JTNEJTIyMyUyMiUyMHIlM0QlMjIzJTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIik7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNTAlOwp9Ci8qIFN0eWxlIG1vZGlmaWVycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogRGl2aWRlcgogKi8KLnVrLWxpc3QtZGl2aWRlciA+IDpudGgtY2hpbGQobisyKSB7CiAgbWFyZ2luLXRvcDogMTBweDsKICBwYWRkaW5nLXRvcDogMTBweDsKICBib3JkZXItdG9wOiAxcHggc29saWQgI2U1ZTVlNTsKfQovKgogKiBTdHJpcGVkCiAqLwoudWstbGlzdC1zdHJpcGVkID4gKiB7CiAgcGFkZGluZzogMTBweCAxMHB4Owp9Ci51ay1saXN0LXN0cmlwZWQgPiAqOm50aC1vZi10eXBlKG9kZCkgewogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1OwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTVlNWU1Owp9Ci51ay1saXN0LXN0cmlwZWQgPiA6bnRoLW9mLXR5cGUob2RkKSB7CiAgYmFja2dyb3VuZDogI2Y4ZjhmODsKfQoudWstbGlzdC1zdHJpcGVkID4gOm50aC1jaGlsZChuKzIpIHsKICBtYXJnaW4tdG9wOiAwOwp9Ci8qIFNpemUgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1saXN0LWxhcmdlID4gOm50aC1jaGlsZChuKzIpLAoudWstbGlzdC1sYXJnZSA+ICogPiB1bCB7CiAgbWFyZ2luLXRvcDogMjBweDsKfQoudWstbGlzdC1jb2xsYXBzZSA+IDpudGgtY2hpbGQobisyKSwKLnVrLWxpc3QtY29sbGFwc2UgPiAqID4gdWwgewogIG1hcmdpbi10b3A6IDA7Cn0KLyoKICogRGl2aWRlcgogKi8KLnVrLWxpc3QtbGFyZ2UudWstbGlzdC1kaXZpZGVyID4gOm50aC1jaGlsZChuKzIpIHsKICBtYXJnaW4tdG9wOiAyMHB4OwogIHBhZGRpbmctdG9wOiAyMHB4Owp9Ci51ay1saXN0LWNvbGxhcHNlLnVrLWxpc3QtZGl2aWRlciA+IDpudGgtY2hpbGQobisyKSB7CiAgbWFyZ2luLXRvcDogMDsKICBwYWRkaW5nLXRvcDogMDsKfQovKgogKiBTdHJpcGVkCiAqLwoudWstbGlzdC1sYXJnZS51ay1saXN0LXN0cmlwZWQgPiAqIHsKICBwYWRkaW5nOiAyMHB4IDEwcHg7Cn0KLnVrLWxpc3QtY29sbGFwc2UudWstbGlzdC1zdHJpcGVkID4gKiB7CiAgcGFkZGluZy10b3A6IDA7CiAgcGFkZGluZy1ib3R0b206IDA7Cn0KLnVrLWxpc3QtbGFyZ2UudWstbGlzdC1zdHJpcGVkID4gOm50aC1jaGlsZChuKzIpLAoudWstbGlzdC1jb2xsYXBzZS51ay1saXN0LXN0cmlwZWQgPiA6bnRoLWNoaWxkKG4rMikgewogIG1hcmdpbi10b3A6IDA7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogRGVzY3JpcHRpb24gbGlzdAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogVGVybQogKi8KLnVrLWRlc2NyaXB0aW9uLWxpc3QgPiBkdCB7CiAgY29sb3I6ICMzMzM7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKICBmb250LXdlaWdodDogbm9ybWFsOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KLnVrLWRlc2NyaXB0aW9uLWxpc3QgPiBkdDpudGgtY2hpbGQobisyKSB7CiAgbWFyZ2luLXRvcDogMjBweDsKfQovKgogKiBEZXNjcmlwdGlvbgogKi8KLyogU3R5bGUgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIExpbmUKICovCi51ay1kZXNjcmlwdGlvbi1saXN0LWRpdmlkZXIgPiBkdDpudGgtY2hpbGQobisyKSB7CiAgbWFyZ2luLXRvcDogMjBweDsKICBwYWRkaW5nLXRvcDogMjBweDsKICBib3JkZXItdG9wOiAxcHggc29saWQgI2U1ZTVlNTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBUYWJsZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gUmVtb3ZlIG1vc3Qgc3BhY2luZyBiZXR3ZWVuIHRhYmxlIGNlbGxzLgogKiAyLiBCZWhhdmUgbGlrZSBhIGJsb2NrIGVsZW1lbnQKICogMy4gU3R5bGUKICovCi51ay10YWJsZSB7CiAgLyogMSAqLwogIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgYm9yZGVyLXNwYWNpbmc6IDA7CiAgLyogMiAqLwogIHdpZHRoOiAxMDAlOwogIC8qIDMgKi8KICBtYXJnaW4tYm90dG9tOiAyMHB4Owp9Ci8qIEFkZCBtYXJnaW4gaWYgYWRqYWNlbnQgZWxlbWVudCAqLwoqICsgLnVrLXRhYmxlIHsKICBtYXJnaW4tdG9wOiAyMHB4Owp9Ci8qIEhlYWRlciBjZWxsCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBTdHlsZQogKi8KLnVrLXRhYmxlIHRoIHsKICBwYWRkaW5nOiAxNnB4IDEycHg7CiAgdGV4dC1hbGlnbjogbGVmdDsKICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOwogIC8qIDEgKi8KICBmb250LXNpemU6IDAuODc1cmVtOwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgY29sb3I6ICM5OTk7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQovKiBDZWxsCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstdGFibGUgdGQgewogIHBhZGRpbmc6IDE2cHggMTJweDsKICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwp9Ci8qCiAqIFJlbW92ZSBtYXJnaW4gZnJvbSB0aGUgbGFzdC1jaGlsZAogKi8KLnVrLXRhYmxlIHRkID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KLyogRm9vdGVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstdGFibGUgdGZvb3QgewogIGZvbnQtc2l6ZTogMC44NzVyZW07Cn0KLyogQ2FwdGlvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXRhYmxlIGNhcHRpb24gewogIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgdGV4dC1hbGlnbjogbGVmdDsKICBjb2xvcjogIzk5OTsKfQovKiBBbGlnbm1lbnQgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay10YWJsZS1taWRkbGUsCi51ay10YWJsZS1taWRkbGUgdGQgewogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGUgIWltcG9ydGFudDsKfQovKiBTdHlsZSBtb2RpZmllcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIERpdmlkZXIKICovCi51ay10YWJsZS1kaXZpZGVyID4gdHI6bm90KDpmaXJzdC1jaGlsZCksCi51ay10YWJsZS1kaXZpZGVyID4gOm5vdCg6Zmlyc3QtY2hpbGQpID4gdHIsCi51ay10YWJsZS1kaXZpZGVyID4gOmZpcnN0LWNoaWxkID4gdHI6bm90KDpmaXJzdC1jaGlsZCkgewogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1Owp9Ci8qCiAqIFN0cmlwZWQKICovCi51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUob2RkKSwKLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSB7CiAgYmFja2dyb3VuZDogI2Y4ZjhmODsKICBib3JkZXItdG9wOiAxcHggc29saWQgI2U1ZTVlNTsKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTsKfQovKgogKiBIb3ZlcgogKi8KLnVrLXRhYmxlLWhvdmVyID4gdHI6aG92ZXIsCi51ay10YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciB7CiAgYmFja2dyb3VuZDogI2ZmZDsKfQovKiBBY3RpdmUgc3RhdGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay10YWJsZSA+IHRyLnVrLWFjdGl2ZSwKLnVrLXRhYmxlIHRib2R5IHRyLnVrLWFjdGl2ZSB7CiAgYmFja2dyb3VuZDogI2ZmZDsKfQovKiBTaXplIG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstdGFibGUtc21hbGwgdGgsCi51ay10YWJsZS1zbWFsbCB0ZCB7CiAgcGFkZGluZzogMTBweCAxMnB4Owp9Ci51ay10YWJsZS1sYXJnZSB0aCwKLnVrLXRhYmxlLWxhcmdlIHRkIHsKICBwYWRkaW5nOiAyMnB4IDEycHg7Cn0KLyogSnVzdGlmeSBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXRhYmxlLWp1c3RpZnkgdGg6Zmlyc3QtY2hpbGQsCi51ay10YWJsZS1qdXN0aWZ5IHRkOmZpcnN0LWNoaWxkIHsKICBwYWRkaW5nLWxlZnQ6IDA7Cn0KLnVrLXRhYmxlLWp1c3RpZnkgdGg6bGFzdC1jaGlsZCwKLnVrLXRhYmxlLWp1c3RpZnkgdGQ6bGFzdC1jaGlsZCB7CiAgcGFkZGluZy1yaWdodDogMDsKfQovKiBDZWxsIHNpemUgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay10YWJsZS1zaHJpbmsgewogIHdpZHRoOiAxcHg7Cn0KLnVrLXRhYmxlLWV4cGFuZCB7CiAgbWluLXdpZHRoOiAxNTBweDsKfQovKiBDZWxsIGxpbmsgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIERvZXMgbm90IHdvcmsgd2l0aCBgdWstdGFibGUtanVzdGlmeWAgYXQgdGhlIG1vbWVudAogKi8KLnVrLXRhYmxlLWxpbmsgewogIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKfQoudWstdGFibGUtbGluayA+IGEgewogIGRpc3BsYXk6IGJsb2NrOwogIHBhZGRpbmc6IDE2cHggMTJweDsKfQoudWstdGFibGUtc21hbGwgLnVrLXRhYmxlLWxpbmsgPiBhIHsKICBwYWRkaW5nOiAxMHB4IDEycHg7Cn0KLyogUmVzcG9uc2l2ZSB0YWJsZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogUGhvbmUgbGFuZHNjYXBlIGFuZCBzbWFsbGVyICovCkBtZWRpYSAobWF4LXdpZHRoOiA5NTlweCkgewogIC51ay10YWJsZS1yZXNwb25zaXZlLAogIC51ay10YWJsZS1yZXNwb25zaXZlIHRib2R5LAogIC51ay10YWJsZS1yZXNwb25zaXZlIHRoLAogIC51ay10YWJsZS1yZXNwb25zaXZlIHRkLAogIC51ay10YWJsZS1yZXNwb25zaXZlIHRyIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogIH0KICAudWstdGFibGUtcmVzcG9uc2l2ZSB0aGVhZCB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KICAudWstdGFibGUtcmVzcG9uc2l2ZSB0aCwKICAudWstdGFibGUtcmVzcG9uc2l2ZSB0ZCB7CiAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50OwogICAgbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7CiAgICBtaW4td2lkdGg6IDAgIWltcG9ydGFudDsKICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7CiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsICFpbXBvcnRhbnQ7CiAgfQogIC51ay10YWJsZS1yZXNwb25zaXZlIHRoOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCgudWstdGFibGUtbGluayksCiAgLnVrLXRhYmxlLXJlc3BvbnNpdmUgdGQ6bm90KDpmaXJzdC1jaGlsZCk6bm90KC51ay10YWJsZS1saW5rKSwKICAudWstdGFibGUtcmVzcG9uc2l2ZSAudWstdGFibGUtbGluazpub3QoOmZpcnN0LWNoaWxkKSA+IGEgewogICAgcGFkZGluZy10b3A6IDVweCAhaW1wb3J0YW50OwogIH0KICAudWstdGFibGUtcmVzcG9uc2l2ZSB0aDpub3QoOmxhc3QtY2hpbGQpOm5vdCgudWstdGFibGUtbGluayksCiAgLnVrLXRhYmxlLXJlc3BvbnNpdmUgdGQ6bm90KDpsYXN0LWNoaWxkKTpub3QoLnVrLXRhYmxlLWxpbmspLAogIC51ay10YWJsZS1yZXNwb25zaXZlIC51ay10YWJsZS1saW5rOm5vdCg6bGFzdC1jaGlsZCkgPiBhIHsKICAgIHBhZGRpbmctYm90dG9tOiA1cHggIWltcG9ydGFudDsKICB9CiAgLnVrLXRhYmxlLWp1c3RpZnkudWstdGFibGUtcmVzcG9uc2l2ZSB0aCwKICAudWstdGFibGUtanVzdGlmeS51ay10YWJsZS1yZXNwb25zaXZlIHRkIHsKICAgIHBhZGRpbmctbGVmdDogMDsKICAgIHBhZGRpbmctcmlnaHQ6IDA7CiAgfQp9Ci51ay10YWJsZSB0Ym9keSB0ciB7CiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjFzIGxpbmVhcjsKfQoudWstdGFibGUtc3RyaXBlZCA+IHRyOm50aC1vZi10eXBlKGV2ZW4pOmxhc3QtY2hpbGQsCi51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKGV2ZW4pOmxhc3QtY2hpbGQgewogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTVlNWU1Owp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IEljb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIE5vdGU6IDEuIC0gNy4gaXMgcmVxdWlyZWQgZm9yIGBidXR0b25gIGVsZW1lbnRzLiBOZWVkZWQgZm9yIENsb3NlIGFuZCBGb3JtIEljb24gY29tcG9uZW50LgogKiAxLiBSZW1vdmUgbWFyZ2lucyBpbiBDaHJvbWUsIFNhZmFyaSBhbmQgT3BlcmEuCiAqIDIuIFJlbW92ZSBib3JkZXJzIGZvciBgYnV0dG9uYC4KICogMy4gUmVtb3ZlIGJvcmRlci1yYWRpdXMgaW4gQ2hyb21lLgogKiA0LiBBZGRyZXNzIGBvdmVyZmxvd2Agc2V0IHRvIGBoaWRkZW5gIGluIElFLgogKiA1LiBDb3JyZWN0IGBmb250YCBwcm9wZXJ0aWVzIGFuZCBgY29sb3JgIG5vdCBiZWluZyBpbmhlcml0ZWQgZm9yIGBidXR0b25gLgogKiA2LiBSZW1vdmUgdGhlIGluaGVyaXRhbmNlIG9mIHRleHQgdHJhbnNmb3JtIGluIEVkZ2UsIEZpcmVmb3gsIGFuZCBJRS4KICogNy4gUmVtb3ZlIGRlZmF1bHQgYGJ1dHRvbmAgcGFkZGluZyBhbmQgYmFja2dyb3VuZCBjb2xvcgogKiA4LiBTdHlsZQogKiA5LiBGaWxsIGFsbCBTVkcgZWxlbWVudHMgd2l0aCB0aGUgY3VycmVudCB0ZXh0IGNvbG9yIGlmIG5vIGBmaWxsYCBhdHRyaWJ1dGUgaXMgc2V0CiAqIDEwLiBMZXQgdGhlIGNvbnRhaW5lciBmaXQgdGhlIGhlaWdodCBvZiB0aGUgaWNvbgogKi8KLnVrLWljb24gewogIC8qIDEgKi8KICBtYXJnaW46IDA7CiAgLyogMiAqLwogIGJvcmRlcjogbm9uZTsKICAvKiAzICovCiAgYm9yZGVyLXJhZGl1czogMDsKICAvKiA0ICovCiAgb3ZlcmZsb3c6IHZpc2libGU7CiAgLyogNSAqLwogIGZvbnQ6IGluaGVyaXQ7CiAgY29sb3I6IGluaGVyaXQ7CiAgLyogNiAqLwogIHRleHQtdHJhbnNmb3JtOiBub25lOwogIC8qIDcuICovCiAgcGFkZGluZzogMDsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICAvKiA4ICovCiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIC8qIDkgKi8KICBmaWxsOiBjdXJyZW50Y29sb3I7CiAgLyogMTAgKi8KICBsaW5lLWhlaWdodDogMDsKfQovKiBSZXF1aXJlZCBmb3IgYGJ1dHRvbmAuICovCmJ1dHRvbi51ay1pY29uOm5vdCg6ZGlzYWJsZWQpIHsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KLyoKICogUmVtb3ZlIHRoZSBpbm5lciBib3JkZXIgYW5kIHBhZGRpbmcgaW4gRmlyZWZveC4KICovCi51ay1pY29uOjotbW96LWZvY3VzLWlubmVyIHsKICBib3JkZXI6IDA7CiAgcGFkZGluZzogMDsKfQovKgogKiBTZXQgdGhlIGZpbGwgYW5kIHN0cm9rZSBjb2xvciBvZiBhbGwgU1ZHIGVsZW1lbnRzIHRvIHRoZSBjdXJyZW50IHRleHQgY29sb3IKICovCi51ay1pY29uOm5vdCgudWstcHJlc2VydmUpIFtmaWxsKj0nIyddOm5vdCgudWstcHJlc2VydmUpIHsKICBmaWxsOiBjdXJyZW50Y29sb3I7Cn0KLnVrLWljb246bm90KC51ay1wcmVzZXJ2ZSkgW3N0cm9rZSo9JyMnXTpub3QoLnVrLXByZXNlcnZlKSB7CiAgc3Ryb2tlOiBjdXJyZW50Y29sb3I7Cn0KLyoKICogRml4IEZpcmVmb3ggYmx1cnJ5IFNWRyByZW5kZXJpbmc6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDY4MzUKICovCi51ay1pY29uID4gKiB7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7Cn0KLyogSW1hZ2UgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIERpc3BsYXkgaW1hZ2VzIGluIGljb24gZGltZW5zaW9ucwogKiAxLiBSZXF1aXJlZCBmb3IgYHNwYW5gIHdpdGggYmFja2dyb3VuZCBpbWFnZQogKiAyLiBSZXF1aXJlZCBmb3IgYGltYWdlYAogKi8KLnVrLWljb24taW1hZ2UgewogIHdpZHRoOiAyMHB4OwogIGhlaWdodDogMjBweDsKICAvKiAxICovCiAgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIC8qIDIgKi8KICBvYmplY3QtZml0OiBzY2FsZS1kb3duOwogIG1heC13aWR0aDogbm9uZTsKfQovKiBTdHlsZSBtb2RpZmllcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIExpbmsKICogMS4gQWxsb3cgdGV4dCB3aXRoaW4gbGluawogKi8KLnVrLWljb24tbGluayB7CiAgY29sb3I6ICM5OTk7CiAgLyogMSAqLwogIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50Owp9Ci51ay1pY29uLWxpbms6aG92ZXIgewogIGNvbG9yOiAjNjY2Owp9Ci8qIE9uQ2xpY2sgKyBBY3RpdmUgKi8KLnVrLWljb24tbGluazphY3RpdmUsCi51ay1hY3RpdmUgPiAudWstaWNvbi1saW5rIHsKICBjb2xvcjogIzU5NTk1OTsKfQovKgogKiBCdXR0b24KICogMS4gQ2VudGVyIGljb24gdmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGx5CiAqLwoudWstaWNvbi1idXR0b24gewogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgd2lkdGg6IDM2cHg7CiAgaGVpZ2h0OiAzNnB4OwogIGJvcmRlci1yYWRpdXM6IDUwMHB4OwogIGJhY2tncm91bmQ6ICNmOGY4Zjg7CiAgY29sb3I6ICM5OTk7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAvKiAxICovCiAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICB0cmFuc2l0aW9uOiAwLjFzIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb24tcHJvcGVydHk6IGNvbG9yLCBiYWNrZ3JvdW5kLWNvbG9yOwp9Ci8qIEhvdmVyICovCi51ay1pY29uLWJ1dHRvbjpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ViZWJlYjsKICBjb2xvcjogIzY2NjsKfQovKiBPbkNsaWNrICsgQWN0aXZlICovCi51ay1pY29uLWJ1dHRvbjphY3RpdmUsCi51ay1hY3RpdmUgPiAudWstaWNvbi1idXR0b24gewogIGJhY2tncm91bmQtY29sb3I6ICNkZmRmZGY7CiAgY29sb3I6ICM2NjY7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogRm9ybSBSYW5nZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gUmVtb3ZlIGRlZmF1bHQgc3R5bGUuCiAqIDIuIERlZmluZSBjb25zaXN0ZW50IGJveCBzaXppbmcuCiAqIDMuIFJlbW92ZSBgbWFyZ2luYCBpbiBhbGwgYnJvd3NlcnMuCiAqIDQuIEFsaWduIHRvIHRoZSBjZW50ZXIgb2YgdGhlIGxpbmUgYm94LgogKiA1LiBQcmV2ZW50IGNvbnRlbnQgb3ZlcmZsb3cgaWYgYSBmaXhlZCB3aWR0aCBpcyB1c2VkLgogKiA2LiBUYWtlIHRoZSBmdWxsIHdpZHRoLgogKiA3LiBSZW1vdmUgd2hpdGUgYmFja2dyb3VuZCBpbiBDaHJvbWUuCiAqLwoudWstcmFuZ2UgewogIC8qIDEgKi8KICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgLyogMiAqLwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgLyogMyAqLwogIG1hcmdpbjogMDsKICAvKiA0ICovCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAvKiA1ICovCiAgbWF4LXdpZHRoOiAxMDAlOwogIC8qIDYgKi8KICB3aWR0aDogMTAwJTsKICAvKiA3ICovCiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KLyogRm9jdXMgKi8KLnVrLXJhbmdlOmZvY3VzIHsKICBvdXRsaW5lOiBub25lOwp9Ci51ay1yYW5nZTo6LW1vei1mb2N1cy1vdXRlciB7CiAgYm9yZGVyOiBub25lOwp9Ci8qCiAqIEltcHJvdmVzIGNvbnNpc3RlbmN5IG9mIGN1cnNvciBzdHlsZSBmb3IgY2xpY2thYmxlIGVsZW1lbnRzCiAqLwoudWstcmFuZ2U6bm90KDpkaXNhYmxlZCk6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KLnVrLXJhbmdlOm5vdCg6ZGlzYWJsZWQpOjotbW96LXJhbmdlLXRodW1iIHsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KLyoKICogVHJhY2sKICogMS4gU2FmYXJpIGRvZXNuJ3QgaGF2ZSBhIGZvY3VzIHN0YXRlLiBVc2luZyBhY3RpdmUgaW5zdGVhZC4KICovCi8qIFdlYmtpdCAqLwoudWstcmFuZ2U6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrIHsKICBoZWlnaHQ6IDNweDsKICBiYWNrZ3JvdW5kOiAjZWJlYmViOwogIGJvcmRlci1yYWRpdXM6IDUwMHB4Owp9Ci51ay1yYW5nZTpmb2N1czo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2ssCi51ay1yYW5nZTphY3RpdmU6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrIHsKICBiYWNrZ3JvdW5kOiAjZGVkZWRlOwp9Ci8qIEZpcmVmb3ggKi8KLnVrLXJhbmdlOjotbW96LXJhbmdlLXRyYWNrIHsKICBoZWlnaHQ6IDNweDsKICBiYWNrZ3JvdW5kOiAjZWJlYmViOwogIGJvcmRlci1yYWRpdXM6IDUwMHB4Owp9Ci51ay1yYW5nZTpmb2N1czo6LW1vei1yYW5nZS10cmFjayB7CiAgYmFja2dyb3VuZDogI2RlZGVkZTsKfQovKgogKiBUaHVtYgogKiAxLiBSZXNldAogKiAyLiBTdHlsZQogKi8KLyogV2Via2l0ICovCi51ay1yYW5nZTo6LXdlYmtpdC1zbGlkZXItdGh1bWIgewogIC8qIDEgKi8KICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgbWFyZ2luLXRvcDogLTdweDsKICAvKiAyICovCiAgaGVpZ2h0OiAxNXB4OwogIHdpZHRoOiAxNXB4OwogIGJvcmRlci1yYWRpdXM6IDUwMHB4OwogIGJhY2tncm91bmQ6ICNmZmY7CiAgYm9yZGVyOiAxcHggc29saWQgI2NjY2NjYzsKfQovKiBGaXJlZm94ICovCi51ay1yYW5nZTo6LW1vei1yYW5nZS10aHVtYiB7CiAgLyogMSAqLwogIGJvcmRlcjogbm9uZTsKICAvKiAyICovCiAgaGVpZ2h0OiAxNXB4OwogIHdpZHRoOiAxNXB4OwogIG1hcmdpbi10b3A6IC03cHg7CiAgYm9yZGVyLXJhZGl1czogNTAwcHg7CiAgYmFja2dyb3VuZDogI2ZmZjsKICBib3JkZXI6IDFweCBzb2xpZCAjY2NjY2NjOwp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IEZvcm0KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIERlZmluZSBjb25zaXN0ZW50IGJveCBzaXppbmcuCiAqICAgIERlZmF1bHQgaXMgYGNvbnRlbnQtYm94YCB3aXRoIGZvbGxvd2luZyBleGNlcHRpb25zIHNldCB0byBgYm9yZGVyLWJveGAKICogICAgYHNlbGVjdGAsIGBpbnB1dFt0eXBlPSJjaGVja2JveCJdYCBhbmQgYGlucHV0W3R5cGU9InJhZGlvIl1gCiAqICAgIGBpbnB1dFt0eXBlPSJzZWFyY2giXWAgaW4gQ2hyb21lLCBTYWZhcmkgYW5kIE9wZXJhCiAqICAgIGBpbnB1dFt0eXBlPSJjb2xvciJdYCBpbiBGaXJlZm94CiAqIDIuIEFkZHJlc3MgbWFyZ2lucyBzZXQgZGlmZmVyZW50bHkgaW4gRmlyZWZveC9JRSBhbmQgQ2hyb21lL1NhZmFyaS9PcGVyYS4KICogMy4gUmVtb3ZlIGBib3JkZXItcmFkaXVzYCBpbiBpT1MuCiAqIDQuIENoYW5nZSBmb250IHByb3BlcnRpZXMgdG8gYGluaGVyaXRgIGluIGFsbCBicm93c2Vycy4KICovCi51ay1pbnB1dCwKLnVrLXNlbGVjdCwKLnVrLXRleHRhcmVhLAoudWstcmFkaW8sCi51ay1jaGVja2JveCB7CiAgLyogMSAqLwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgLyogMiAqLwogIG1hcmdpbjogMDsKICAvKiAzICovCiAgYm9yZGVyLXJhZGl1czogMDsKICAvKiA0ICovCiAgZm9udDogaW5oZXJpdDsKfQovKgogKiBTaG93IHRoZSBvdmVyZmxvdyBpbiBFZGdlLgogKi8KLnVrLWlucHV0IHsKICBvdmVyZmxvdzogdmlzaWJsZTsKfQovKgogKiBSZW1vdmUgdGhlIGluaGVyaXRhbmNlIG9mIHRleHQgdHJhbnNmb3JtIGluIEZpcmVmb3guCiAqLwoudWstc2VsZWN0IHsKICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKfQovKgogKiAxLiBDaGFuZ2UgZm9udCBwcm9wZXJ0aWVzIHRvIGBpbmhlcml0YCBpbiBhbGwgYnJvd3NlcnMKICogMi4gRG9uJ3QgaW5oZXJpdCB0aGUgYGZvbnQtd2VpZ2h0YCBhbmQgdXNlIGBib2xkYCBpbnN0ZWFkLgogKiBOT1RFOiBCb3RoIGRlY2xhcmF0aW9ucyBkb24ndCB3b3JrIGluIENocm9tZSwgU2FmYXJpIGFuZCBPcGVyYS4KICovCi51ay1zZWxlY3Qgb3B0Z3JvdXAgewogIC8qIDEgKi8KICBmb250OiBpbmhlcml0OwogIC8qIDIgKi8KICBmb250LXdlaWdodDogYm9sZDsKfQovKgogKiBSZW1vdmUgdGhlIGRlZmF1bHQgdmVydGljYWwgc2Nyb2xsYmFyIGluIElFIDEwKy4KICovCi51ay10ZXh0YXJlYSB7CiAgb3ZlcmZsb3c6IGF1dG87Cn0KLyoKICogUmVtb3ZlIHRoZSBpbm5lciBwYWRkaW5nIGFuZCBjYW5jZWwgYnV0dG9ucyBpbiBDaHJvbWUgb24gT1MgWCBhbmQgU2FmYXJpIG9uIE9TIFguCiAqLwoudWstaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sCi51ay1pbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7CiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwp9Ci8qCiAqIENvcnJlY3QgdGhlIGN1cnNvciBzdHlsZSBvZiBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCBidXR0b25zIGluIENocm9tZS4KICovCi51ay1pbnB1dFt0eXBlPSJudW1iZXIiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiwKLnVrLWlucHV0W3R5cGU9Im51bWJlciJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHsKICBoZWlnaHQ6IGF1dG87Cn0KLyoKICogUmVtb3ZlcyBwbGFjZWhvbGRlciB0cmFuc3BhcmVuY3kgaW4gRmlyZWZveC4KICovCi51ay1pbnB1dDo6LW1vei1wbGFjZWhvbGRlciwKLnVrLXRleHRhcmVhOjotbW96LXBsYWNlaG9sZGVyIHsKICBvcGFjaXR5OiAxOwp9Ci8qCiAqIEltcHJvdmVzIGNvbnNpc3RlbmN5IG9mIGN1cnNvciBzdHlsZSBmb3IgY2xpY2thYmxlIGVsZW1lbnRzCiAqLwoudWstcmFkaW86bm90KDpkaXNhYmxlZCksCi51ay1jaGVja2JveDpub3QoOmRpc2FibGVkKSB7CiAgY3Vyc29yOiBwb2ludGVyOwp9Ci8qCiAqIERlZmluZSBjb25zaXN0ZW50IGJvcmRlciwgbWFyZ2luLCBhbmQgcGFkZGluZy4KICovCi51ay1maWVsZHNldCB7CiAgYm9yZGVyOiBub25lOwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwp9Ci8qIElucHV0LCBzZWxlY3QgYW5kIHRleHRhcmVhCiAqIEFsbG93ZWQ6IGB0ZXh0YCwgYHBhc3N3b3JkYCwgYGRhdGV0aW1lYCwgYGRhdGV0aW1lLWxvY2FsYCwgYGRhdGVgLCAgYG1vbnRoYCwKICAgICAgICAgICAgYHRpbWVgLCBgd2Vla2AsIGBudW1iZXJgLCBgZW1haWxgLCBgdXJsYCwgYHNlYXJjaGAsIGB0ZWxgLCBgY29sb3JgCiAqIERpc2FsbG93ZWQ6IGByYW5nZWAsIGByYWRpb2AsIGBjaGVja2JveGAsIGBmaWxlYCwgYHN1Ym1pdGAsIGByZXNldGAgYW5kIGBpbWFnZWAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIFJlbW92ZSBkZWZhdWx0IHN0eWxlIGluIGlPUy4KICovCi51ay1pbnB1dCwKLnVrLXRleHRhcmVhIHsKICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Cn0KLyoKICogMS4gUHJldmVudCBjb250ZW50IG92ZXJmbG93IGlmIGEgZml4ZWQgd2lkdGggaXMgdXNlZAogKiAyLiBUYWtlIHRoZSBmdWxsIHdpZHRoCiAqIDMuIFJlc2V0IGRlZmF1bHQKICogNC4gU3R5bGUKICovCi51ay1pbnB1dCwKLnVrLXNlbGVjdCwKLnVrLXRleHRhcmVhIHsKICAvKiAxICovCiAgbWF4LXdpZHRoOiAxMDAlOwogIC8qIDIgKi8KICB3aWR0aDogMTAwJTsKICAvKiAzICovCiAgYm9yZGVyOiAwIG5vbmU7CiAgLyogNCAqLwogIHBhZGRpbmc6IDAgMTBweDsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGNvbG9yOiAjNjY2OwogIGJvcmRlcjogMXB4IHNvbGlkICNlNWU1ZTU7CiAgdHJhbnNpdGlvbjogMC4ycyBlYXNlLWluLW91dDsKICB0cmFuc2l0aW9uLXByb3BlcnR5OiBjb2xvciwgYmFja2dyb3VuZC1jb2xvciwgYm9yZGVyOwp9Ci8qCiAqIFNpbmdsZS1saW5lCiAqIDEuIEFsbG93IGFueSBlbGVtZW50IHRvIGxvb2sgbGlrZSBhbiBgaW5wdXRgIG9yIGBzZWxlY3RgIGVsZW1lbnQKICogMi4gTWFrZSBzdXJlIGxpbmUtaGVpZ2h0IGlzIG5vdCBsYXJnZXIgdGhhbiBoZWlnaHQKICogICAgQWxzbyBuZWVkZWQgdG8gY2VudGVyIHRoZSB0ZXh0IHZlcnRpY2FsbHkKICovCi51ay1pbnB1dCwKLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSkgewogIGhlaWdodDogNDBweDsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIC8qIDEgKi8KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KLyogMiAqLwoudWstaW5wdXQ6bm90KGlucHV0KSwKLnVrLXNlbGVjdDpub3Qoc2VsZWN0KSB7CiAgbGluZS1oZWlnaHQ6IDM4cHg7Cn0KLyoKICogTXVsdGktbGluZQogKi8KLnVrLXNlbGVjdFttdWx0aXBsZV0sCi51ay1zZWxlY3Rbc2l6ZV0sCi51ay10ZXh0YXJlYSB7CiAgcGFkZGluZy10b3A6IDZweDsKICBwYWRkaW5nLWJvdHRvbTogNnB4OwogIHZlcnRpY2FsLWFsaWduOiB0b3A7Cn0KLnVrLXNlbGVjdFttdWx0aXBsZV0sCi51ay1zZWxlY3Rbc2l6ZV0gewogIHJlc2l6ZTogdmVydGljYWw7Cn0KLyogRm9jdXMgKi8KLnVrLWlucHV0OmZvY3VzLAoudWstc2VsZWN0OmZvY3VzLAoudWstdGV4dGFyZWE6Zm9jdXMgewogIG91dGxpbmU6IG5vbmU7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICBjb2xvcjogIzY2NjsKICBib3JkZXItY29sb3I6ICMxZTg3ZjA7Cn0KLyogRGlzYWJsZWQgKi8KLnVrLWlucHV0OmRpc2FibGVkLAoudWstc2VsZWN0OmRpc2FibGVkLAoudWstdGV4dGFyZWE6ZGlzYWJsZWQgewogIGJhY2tncm91bmQtY29sb3I6ICNmOGY4Zjg7CiAgY29sb3I6ICM5OTk7CiAgYm9yZGVyLWNvbG9yOiAjZTVlNWU1Owp9Ci8qCiAqIFBsYWNlaG9sZGVyCiAqLwoudWstaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICBjb2xvcjogIzk5OTsKfQoudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyIHsKICBjb2xvcjogIzk5OTsKfQovKiBTdHlsZSBtb2RpZmllciAoYHVrLWlucHV0YCwgYHVrLXNlbGVjdGAgYW5kIGB1ay10ZXh0YXJlYWApCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBTbWFsbAogKi8KLnVrLWZvcm0tc21hbGwgewogIGZvbnQtc2l6ZTogMC44NzVyZW07Cn0KLyogU2luZ2xlLWxpbmUgKi8KLnVrLWZvcm0tc21hbGw6bm90KHRleHRhcmVhKTpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSkgewogIGhlaWdodDogMzBweDsKICBwYWRkaW5nLWxlZnQ6IDhweDsKICBwYWRkaW5nLXJpZ2h0OiA4cHg7Cn0KLyogTXVsdGktbGluZSAqLwp0ZXh0YXJlYS51ay1mb3JtLXNtYWxsLApbbXVsdGlwbGVdLnVrLWZvcm0tc21hbGwsCltzaXplXS51ay1mb3JtLXNtYWxsIHsKICBwYWRkaW5nOiA1cHggOHB4Owp9Ci51ay1mb3JtLXNtYWxsOm5vdChzZWxlY3QpOm5vdChpbnB1dCk6bm90KHRleHRhcmVhKSB7CiAgbGluZS1oZWlnaHQ6IDI4cHg7Cn0KLyoKICogTGFyZ2UKICovCi51ay1mb3JtLWxhcmdlIHsKICBmb250LXNpemU6IDEuMjVyZW07Cn0KLyogU2luZ2xlLWxpbmUgKi8KLnVrLWZvcm0tbGFyZ2U6bm90KHRleHRhcmVhKTpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSkgewogIGhlaWdodDogNTVweDsKICBwYWRkaW5nLWxlZnQ6IDEycHg7CiAgcGFkZGluZy1yaWdodDogMTJweDsKfQovKiBNdWx0aS1saW5lICovCnRleHRhcmVhLnVrLWZvcm0tbGFyZ2UsClttdWx0aXBsZV0udWstZm9ybS1sYXJnZSwKW3NpemVdLnVrLWZvcm0tbGFyZ2UgewogIHBhZGRpbmc6IDdweCAxMnB4Owp9Ci51ay1mb3JtLWxhcmdlOm5vdChzZWxlY3QpOm5vdChpbnB1dCk6bm90KHRleHRhcmVhKSB7CiAgbGluZS1oZWlnaHQ6IDUzcHg7Cn0KLyogU3R5bGUgbW9kaWZpZXIgKGB1ay1pbnB1dGAsIGB1ay1zZWxlY3RgIGFuZCBgdWstdGV4dGFyZWFgKQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogRXJyb3IKICovCi51ay1mb3JtLWRhbmdlciwKLnVrLWZvcm0tZGFuZ2VyOmZvY3VzIHsKICBjb2xvcjogI2YwNTA2ZTsKICBib3JkZXItY29sb3I6ICNmMDUwNmU7Cn0KLyoKICogU3VjY2VzcwogKi8KLnVrLWZvcm0tc3VjY2VzcywKLnVrLWZvcm0tc3VjY2Vzczpmb2N1cyB7CiAgY29sb3I6ICMzMmQyOTY7CiAgYm9yZGVyLWNvbG9yOiAjMzJkMjk2Owp9Ci8qCiAqIEJsYW5rCiAqLwoudWstZm9ybS1ibGFuayB7CiAgYmFja2dyb3VuZDogbm9uZTsKICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Owp9Ci51ay1mb3JtLWJsYW5rOmZvY3VzIHsKICBib3JkZXItY29sb3I6ICNlNWU1ZTU7CiAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKfQovKiBXaWR0aCBtb2RpZmllcnMgKGB1ay1pbnB1dGAsIGB1ay1zZWxlY3RgIGFuZCBgdWstdGV4dGFyZWFgKQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogRml4ZWQgd2lkdGhzCiAqIERpZmZlcmVudCB3aWR0aHMgZm9yIG1pbmkgc2l6ZWQgYGlucHV0YCBhbmQgYHNlbGVjdGAgZWxlbWVudHMKICovCmlucHV0LnVrLWZvcm0td2lkdGgteHNtYWxsIHsKICB3aWR0aDogNTBweDsKfQpzZWxlY3QudWstZm9ybS13aWR0aC14c21hbGwgewogIHdpZHRoOiA3NXB4Owp9Ci51ay1mb3JtLXdpZHRoLXNtYWxsIHsKICB3aWR0aDogMTMwcHg7Cn0KLnVrLWZvcm0td2lkdGgtbWVkaXVtIHsKICB3aWR0aDogMjAwcHg7Cn0KLnVrLWZvcm0td2lkdGgtbGFyZ2UgewogIHdpZHRoOiA1MDBweDsKfQovKiBTZWxlY3QKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFJlbW92ZSBkZWZhdWx0IHN0eWxlLiBBbHNvIHdvcmtzIGluIEZpcmVmb3gKICogMi4gU3R5bGUKICogMy4gU2V0IGBjb2xvcmAgZm9yIG9wdGlvbnMgaW4gdGhlIHNlbGVjdCBkcm9wZG93biwgYmVjYXVzZSB0aGUgaW5oZXJpdGVkIGBjb2xvcmAgbWlnaHQgYmUgdG9vIGxpZ2h0LgogKi8KLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSkgewogIC8qIDEgKi8KICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgLW1vei1hcHBlYXJhbmNlOiBub25lOwogIC8qIDIgKi8KICBwYWRkaW5nLXJpZ2h0OiAyMHB4OwogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIyNCUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMjQlMjAxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM2NjYlMjIlMjBwb2ludHMlM0QlMjIxMiUyMDElMjA5JTIwNiUyMDE1JTIwNiUyMiUyMCUyRiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxMyUyMDklMjA4JTIwMTUlMjA4JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIik7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxMDAlIDUwJTsKfQovKiAzICovCi51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pIG9wdGlvbiB7CiAgY29sb3I6ICM2NjY7Cn0KLyoKICogRGlzYWJsZWQKICovCi51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pOmRpc2FibGVkIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDI0JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTk5JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxJTIwOSUyMDYlMjAxNSUyMDYlMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk5OSUyMiUyMHBvaW50cyUzRCUyMjEyJTIwMTMlMjA5JTIwOCUyMDE1JTIwOCUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSIpOwp9Ci8qIERhdGFsaXN0CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBSZW1vdmUgZGVmYXVsdCBzdHlsZSBpbiBDaHJvbWUKICovCi51ay1pbnB1dFtsaXN0XSB7CiAgcGFkZGluZy1yaWdodDogMjBweDsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwogIGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgNTAlOwp9Ci51ay1pbnB1dFtsaXN0XTpob3ZlciwKLnVrLWlucHV0W2xpc3RdOmZvY3VzIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDI0JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxMiUyMDglMjA2JTIwMTYlMjA2JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIik7Cn0KLyogMSAqLwoudWstaW5wdXRbbGlzdF06Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7CiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Ci8qIFJhZGlvIGFuZCBjaGVja2JveAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gU3R5bGUKICogMi4gTWFrZSBib3ggbW9yZSByb2J1c3Qgc28gaXQgY2xpcHMgdGhlIGNoaWxkIGVsZW1lbnQKICogMy4gVmVydGljYWwgYWxpZ25tZW50CiAqIDQuIFJlbW92ZSBkZWZhdWx0IHN0eWxlCiAqIDUuIEZpeCBibGFjayBiYWNrZ3JvdW5kIG9uIGlPUwogKiA2LiBDZW50ZXIgaWNvbnMKICovCi51ay1yYWRpbywKLnVrLWNoZWNrYm94IHsKICAvKiAxICovCiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGhlaWdodDogMTZweDsKICB3aWR0aDogMTZweDsKICAvKiAyICovCiAgb3ZlcmZsb3c6IGhpZGRlbjsKICAvKiAzICovCiAgbWFyZ2luLXRvcDogLTRweDsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIC8qIDQgKi8KICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgLW1vei1hcHBlYXJhbmNlOiBub25lOwogIC8qIDUgKi8KICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICAvKiA2ICovCiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNTAlOwogIGJvcmRlcjogMXB4IHNvbGlkICNjY2NjY2M7CiAgdHJhbnNpdGlvbjogMC4ycyBlYXNlLWluLW91dDsKICB0cmFuc2l0aW9uLXByb3BlcnR5OiBiYWNrZ3JvdW5kLWNvbG9yLCBib3JkZXI7Cn0KLnVrLXJhZGlvIHsKICBib3JkZXItcmFkaXVzOiA1MCU7Cn0KLyogRm9jdXMgKi8KLnVrLXJhZGlvOmZvY3VzLAoudWstY2hlY2tib3g6Zm9jdXMgewogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgb3V0bGluZTogbm9uZTsKICBib3JkZXItY29sb3I6ICMxZTg3ZjA7Cn0KLyoKICogQ2hlY2tlZAogKi8KLnVrLXJhZGlvOmNoZWNrZWQsCi51ay1jaGVja2JveDpjaGVja2VkLAoudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzFlODdmMDsKICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Owp9Ci8qIEZvY3VzICovCi51ay1yYWRpbzpjaGVja2VkOmZvY3VzLAoudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywKLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGU6Zm9jdXMgewogIGJhY2tncm91bmQtY29sb3I6ICMwZTZkY2Q7Cn0KLyoKICogSWNvbnMKICovCi51ay1yYWRpbzpjaGVja2VkIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTYlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE2JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2NpcmNsZSUyMGZpbGwlM0QlMjIlMjNmZmYlMjIlMjBjeCUzRCUyMjglMjIlMjBjeSUzRCUyMjglMjIlMjByJTNEJTIyMiUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpOwp9Ci51ay1jaGVja2JveDpjaGVja2VkIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTQlMjIlMjBoZWlnaHQlM0QlMjIxMSUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE0JTIwMTElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzZmZmJTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxJTIwNSUyMDcuNSUyMDIlMjA1JTIwMSUyMDUuNSUyMDUlMjAxMCUyMDEzJTIwMS41JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIik7Cn0KLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxNiUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTYlMjAxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjNmZmYlMjIlMjB4JTNEJTIyMyUyMiUyMHklM0QlMjI4JTIyJTIwd2lkdGglM0QlMjIxMCUyMiUyMGhlaWdodCUzRCUyMjElMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UiKTsKfQovKgogKiBEaXNhYmxlZAogKi8KLnVrLXJhZGlvOmRpc2FibGVkLAoudWstY2hlY2tib3g6ZGlzYWJsZWQgewogIGJhY2tncm91bmQtY29sb3I6ICNmOGY4Zjg7CiAgYm9yZGVyLWNvbG9yOiAjZTVlNWU1Owp9Ci51ay1yYWRpbzpkaXNhYmxlZDpjaGVja2VkIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTYlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE2JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2NpcmNsZSUyMGZpbGwlM0QlMjIlMjM5OTklMjIlMjBjeCUzRCUyMjglMjIlMjBjeSUzRCUyMjglMjIlMjByJTNEJTIyMiUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpOwp9Ci51ay1jaGVja2JveDpkaXNhYmxlZDpjaGVja2VkIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTQlMjIlMjBoZWlnaHQlM0QlMjIxMSUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE0JTIwMTElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTk5JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxJTIwNSUyMDcuNSUyMDIlMjA1JTIwMSUyMDUuNSUyMDUlMjAxMCUyMDEzJTIwMS41JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIik7Cn0KLnVrLWNoZWNrYm94OmRpc2FibGVkOmluZGV0ZXJtaW5hdGUgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxNiUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTYlMjAxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM5OTklMjIlMjB4JTNEJTIyMyUyMiUyMHklM0QlMjI4JTIyJTIwd2lkdGglM0QlMjIxMCUyMiUyMGhlaWdodCUzRCUyMjElMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UiKTsKfQovKiBMZWdlbmQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIExlZ2VuZAogKiAxLiBCZWhhdmUgbGlrZSBibG9jayBlbGVtZW50CiAqIDIuIENvcnJlY3QgdGhlIGNvbG9yIGluaGVyaXRhbmNlIGZyb20gYGZpZWxkc2V0YCBlbGVtZW50cyBpbiBJRS4KICogMy4gUmVtb3ZlIHBhZGRpbmcgc28gcGVvcGxlIGFyZW4ndCBjYXVnaHQgb3V0IGlmIHRoZXkgemVybyBvdXQgZmllbGRzZXRzLgogKiA0LiBTdHlsZQogKi8KLnVrLWxlZ2VuZCB7CiAgLyogMSAqLwogIHdpZHRoOiAxMDAlOwogIC8qIDIgKi8KICBjb2xvcjogaW5oZXJpdDsKICAvKiAzICovCiAgcGFkZGluZzogMDsKICAvKiA0ICovCiAgZm9udC1zaXplOiAxLjVyZW07CiAgbGluZS1oZWlnaHQ6IDEuNDsKfQovKiBDdXN0b20gY29udHJvbHMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIENvbnRhaW5lciBmaXRzIGl0cyBjb250ZW50CiAqIDIuIENyZWF0ZSBwb3NpdGlvbiBjb250ZXh0CiAqIDMuIFByZXZlbnQgY29udGVudCBvdmVyZmxvdwogKiA0LiBCZWhhdmUgbGlrZSBtb3N0IGlubGluZS1ibG9jayBlbGVtZW50cwogKi8KLnVrLWZvcm0tY3VzdG9tIHsKICAvKiAxICovCiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIC8qIDIgKi8KICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgLyogMyAqLwogIG1heC13aWR0aDogMTAwJTsKICAvKiA0ICovCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKfQovKgogKiAxLiBQb3NpdGlvbiBhbmQgcmVzaXplIHRoZSBmb3JtIGNvbnRyb2wgdG8gYWx3YXlzIGNvdmVyIGl0cyBjb250YWluZXIKICogMi4gUmVxdWlyZWQgZm9yIEZpcmVmb3ggZm9yIHBvc2l0aW9uaW5nIHRvIHRoZSBsZWZ0CiAqIDMuIFJlcXVpcmVkIGZvciBXZWJraXQgdG8gbWFrZSBgaGVpZ2h0YCB3b3JrCiAqIDQuIEhpZGUgY29udHJvbGUgYW5kIHNob3cgY3Vyc29yCiAqIDUuIE5lZWRlZCBmb3IgdGhlIGN1cnNvcgogKiA2LiBDbGlwIGhlaWdodCBjYXVzZWQgYnkgNS4gTmVlZGVkIGZvciBXZWJraXQgb25seQogKi8KLnVrLWZvcm0tY3VzdG9tIHNlbGVjdCwKLnVrLWZvcm0tY3VzdG9tIGlucHV0W3R5cGU9ImZpbGUiXSB7CiAgLyogMSAqLwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDA7CiAgei1pbmRleDogMTsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgLyogMiAqLwogIGxlZnQ6IDA7CiAgLyogMyAqLwogIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAvKiA0ICovCiAgb3BhY2l0eTogMDsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KLnVrLWZvcm0tY3VzdG9tIGlucHV0W3R5cGU9ImZpbGUiXSB7CiAgLyogNSAqLwogIGZvbnQtc2l6ZTogNTAwcHg7CiAgLyogNiAqLwogIG92ZXJmbG93OiBoaWRkZW47Cn0KLyogTGFiZWwKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1mb3JtLWxhYmVsIHsKICBjb2xvcjogIzMzMzsKICBmb250LXNpemU6IDAuODc1cmVtOwp9Ci8qIExheW91dAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogU3RhY2tlZAogKi8KLnVrLWZvcm0tc3RhY2tlZCAudWstZm9ybS1sYWJlbCB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luLWJvdHRvbTogNXB4Owp9Ci8qCiAqIEhvcml6b250YWwKICovCi8qIFRhYmxldCBwb3J0cmFpdCBhbmQgc21hbGxlciAqLwpAbWVkaWEgKG1heC13aWR0aDogOTU5cHgpIHsKICAvKiBCZWhhdmUgbGlrZSBgdWstZm9ybS1zdGFja2VkYCAqLwogIC51ay1mb3JtLWhvcml6b250YWwgLnVrLWZvcm0tbGFiZWwgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstZm9ybS1ob3Jpem9udGFsIC51ay1mb3JtLWxhYmVsIHsKICAgIHdpZHRoOiAyMDBweDsKICAgIG1hcmdpbi10b3A6IDdweDsKICAgIGZsb2F0OiBsZWZ0OwogIH0KICAudWstZm9ybS1ob3Jpem9udGFsIC51ay1mb3JtLWNvbnRyb2xzIHsKICAgIG1hcmdpbi1sZWZ0OiAyMTVweDsKICB9CiAgLyogQmV0dGVyIHZlcnRpY2FsIGFsaWdubWVudCBpZiBjb250cm9scyBhcmUgY2hlY2tib3hlcyBhbmQgcmFkaW8gYnV0dG9ucyB3aXRoIHRleHQgKi8KICAudWstZm9ybS1ob3Jpem9udGFsIC51ay1mb3JtLWNvbnRyb2xzLXRleHQgewogICAgcGFkZGluZy10b3A6IDdweDsKICB9Cn0KLyogSWNvbnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFNldCBwb3NpdGlvbgogKiAyLiBTZXQgd2lkdGgKICogMy4gQ2VudGVyIGljb24gdmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGx5CiAqIDQuIFN0eWxlCiAqLwoudWstZm9ybS1pY29uIHsKICAvKiAxICovCiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsKICBib3R0b206IDA7CiAgbGVmdDogMDsKICAvKiAyICovCiAgd2lkdGg6IDQwcHg7CiAgLyogMyAqLwogIGRpc3BsYXk6IGlubGluZS1mbGV4OwogIGp1c3RpZnktY29udGVudDogY2VudGVyOwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgLyogNCAqLwogIGNvbG9yOiAjOTk5Owp9Ci8qCiAqIFJlcXVpcmVkIGZvciBgYWAuCiAqLwoudWstZm9ybS1pY29uOmhvdmVyIHsKICBjb2xvcjogIzY2NjsKfQovKgogKiBNYWtlIGBpbnB1dGAgZWxlbWVudCBjbGlja2FibGUgdGhyb3VnaCBpY29uLCBlLmcuIGlmIGl0J3MgYSBgc3BhbmAKICovCi51ay1mb3JtLWljb246bm90KGEpOm5vdChidXR0b24pOm5vdChpbnB1dCkgewogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Ci8qCiAqIElucHV0IHBhZGRpbmcKICovCi51ay1mb3JtLWljb246bm90KC51ay1mb3JtLWljb24tZmxpcCkgfiAudWstaW5wdXQgewogIHBhZGRpbmctbGVmdDogNDBweCAhaW1wb3J0YW50Owp9Ci8qCiAqIFBvc2l0aW9uIG1vZGlmaWVyCiAqLwoudWstZm9ybS1pY29uLWZsaXAgewogIHJpZ2h0OiAwOwogIGxlZnQ6IGF1dG87Cn0KLnVrLWZvcm0taWNvbi1mbGlwIH4gLnVrLWlucHV0IHsKICBwYWRkaW5nLXJpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogQnV0dG9uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBSZW1vdmUgbWFyZ2lucyBpbiBDaHJvbWUsIFNhZmFyaSBhbmQgT3BlcmEuCiAqIDIuIFJlbW92ZSBib3JkZXJzIGZvciBgYnV0dG9uYC4KICogMy4gQWRkcmVzcyBgb3ZlcmZsb3dgIHNldCB0byBgaGlkZGVuYCBpbiBJRS4KICogNC4gQ29ycmVjdCBgZm9udGAgcHJvcGVydGllcyBhbmQgYGNvbG9yYCBub3QgYmVpbmcgaW5oZXJpdGVkIGZvciBgYnV0dG9uYC4KICogNS4gUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB0ZXh0IHRyYW5zZm9ybSBpbiBFZGdlLCBGaXJlZm94LCBhbmQgSUUuCiAqIDYuIFJlbW92ZSBkZWZhdWx0IHN0eWxlIGZvciBgaW5wdXQgdHlwZT0ic3VibWl0ImBpbiBpT1MuCiAqIDcuIFN0eWxlCiAqIDguIGBsaW5lLWhlaWdodGAgaXMgdXNlZCB0byBjcmVhdGUgYSBoZWlnaHQgYmVjYXVzZSBpdCBhbHNvIGNlbnRlcnMgdGhlIHRleHQgdmVydGljYWxseSBmb3IgYGFgIGVsZW1lbnRzLgogKiAgICBCZXR0ZXIgd291bGQgYmUgdG8gdXNlIGhlaWdodCBhbmQgZmxleGJveCB0byBjZW50ZXIgdGhlIHRleHQgdmVydGljYWxseSBidXQgZmxleGJveCBkb2Vzbid0IHdvcmsgaW4gRmlyZWZveCBvbiBgYnV0dG9uYCBlbGVtZW50cy4KICogOS4gQWxpZ24gdGV4dCBpZiBidXR0b24gaGFzIGEgd2lkdGgKICogMTAuIFJlcXVpcmVkIGZvciBgYWAuCiAqLwoudWstYnV0dG9uIHsKICAvKiAxICovCiAgbWFyZ2luOiAwOwogIC8qIDIgKi8KICBib3JkZXI6IG5vbmU7CiAgLyogMyAqLwogIG92ZXJmbG93OiB2aXNpYmxlOwogIC8qIDQgKi8KICBmb250OiBpbmhlcml0OwogIGNvbG9yOiBpbmhlcml0OwogIC8qIDUgKi8KICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAvKiA2ICovCiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogIGJvcmRlci1yYWRpdXM6IDA7CiAgLyogNyAqLwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIHBhZGRpbmc6IDAgMzBweDsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgLyogOCAqLwogIGxpbmUtaGVpZ2h0OiAzOHB4OwogIC8qIDkgKi8KICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgLyogMTAgKi8KICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICB0cmFuc2l0aW9uOiAwLjFzIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb24tcHJvcGVydHk6IGNvbG9yLCBiYWNrZ3JvdW5kLWNvbG9yLCBib3JkZXItY29sb3I7Cn0KLnVrLWJ1dHRvbjpub3QoOmRpc2FibGVkKSB7CiAgY3Vyc29yOiBwb2ludGVyOwp9Ci8qCiAqIFJlbW92ZSB0aGUgaW5uZXIgYm9yZGVyIGFuZCBwYWRkaW5nIGluIEZpcmVmb3guCiAqLwoudWstYnV0dG9uOjotbW96LWZvY3VzLWlubmVyIHsKICBib3JkZXI6IDA7CiAgcGFkZGluZzogMDsKfQovKiBIb3ZlciAqLwoudWstYnV0dG9uOmhvdmVyIHsKICAvKiA5ICovCiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci8qIE9uQ2xpY2sgKyBBY3RpdmUgKi8KLyogU3R5bGUgbW9kaWZpZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBEZWZhdWx0CiAqLwoudWstYnV0dG9uLWRlZmF1bHQgewogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogIGNvbG9yOiAjMzMzOwogIGJvcmRlcjogMXB4IHNvbGlkICNlNWU1ZTU7Cn0KLyogSG92ZXIgKi8KLnVrLWJ1dHRvbi1kZWZhdWx0OmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICBjb2xvcjogIzMzMzsKICBib3JkZXItY29sb3I6ICNiMmIyYjI7Cn0KLyogT25DbGljayArIEFjdGl2ZSAqLwoudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZlLAoudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICBjb2xvcjogIzMzMzsKICBib3JkZXItY29sb3I6ICM5OTk5OTk7Cn0KLyoKICogUHJpbWFyeQogKi8KLnVrLWJ1dHRvbi1wcmltYXJ5IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWU4N2YwOwogIGNvbG9yOiAjZmZmOwogIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50Owp9Ci8qIEhvdmVyICovCi51ay1idXR0b24tcHJpbWFyeTpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzBmN2FlNTsKICBjb2xvcjogI2ZmZjsKfQovKiBPbkNsaWNrICsgQWN0aXZlICovCi51ay1idXR0b24tcHJpbWFyeTphY3RpdmUsCi51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUgewogIGJhY2tncm91bmQtY29sb3I6ICMwZTZkY2Q7CiAgY29sb3I6ICNmZmY7Cn0KLyoKICogU2Vjb25kYXJ5CiAqLwoudWstYnV0dG9uLXNlY29uZGFyeSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsKICBjb2xvcjogI2ZmZjsKICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKfQovKiBIb3ZlciAqLwoudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzE1MTUxNTsKICBjb2xvcjogI2ZmZjsKfQovKiBPbkNsaWNrICsgQWN0aXZlICovCi51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwKLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDgwODA4OwogIGNvbG9yOiAjZmZmOwp9Ci8qCiAqIERhbmdlcgogKi8KLnVrLWJ1dHRvbi1kYW5nZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNmMDUwNmU7CiAgY29sb3I6ICNmZmY7CiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7Cn0KLyogSG92ZXIgKi8KLnVrLWJ1dHRvbi1kYW5nZXI6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNlZTM5NWI7CiAgY29sb3I6ICNmZmY7Cn0KLyogT25DbGljayArIEFjdGl2ZSAqLwoudWstYnV0dG9uLWRhbmdlcjphY3RpdmUsCi51ay1idXR0b24tZGFuZ2VyLnVrLWFjdGl2ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2VjMjE0NzsKICBjb2xvcjogI2ZmZjsKfQovKgogKiBEaXNhYmxlZAogKiBUaGUgc2FtZSBmb3IgYWxsIHN0eWxlIG1vZGlmaWVycwogKi8KLnVrLWJ1dHRvbi1kZWZhdWx0OmRpc2FibGVkLAoudWstYnV0dG9uLXByaW1hcnk6ZGlzYWJsZWQsCi51ay1idXR0b24tc2Vjb25kYXJ5OmRpc2FibGVkLAoudWstYnV0dG9uLWRhbmdlcjpkaXNhYmxlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgY29sb3I6ICM5OTk7CiAgYm9yZGVyLWNvbG9yOiAjZTVlNWU1Owp9Ci8qIFNpemUgbW9kaWZpZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstYnV0dG9uLXNtYWxsIHsKICBwYWRkaW5nOiAwIDE1cHg7CiAgbGluZS1oZWlnaHQ6IDI4cHg7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKfQoudWstYnV0dG9uLWxhcmdlIHsKICBwYWRkaW5nOiAwIDQwcHg7CiAgbGluZS1oZWlnaHQ6IDUzcHg7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKfQovKiBUZXh0IG1vZGlmaWVycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogVGV4dAogKiAxLiBSZXNldAogKiAyLiBTdHlsZQogKi8KLnVrLWJ1dHRvbi10ZXh0IHsKICAvKiAxICovCiAgcGFkZGluZzogMDsKICBsaW5lLWhlaWdodDogMS41OwogIGJhY2tncm91bmQ6IG5vbmU7CiAgLyogMiAqLwogIGNvbG9yOiAjMzMzOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoudWstYnV0dG9uLXRleHQ6OmJlZm9yZSB7CiAgY29udGVudDogIiI7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGJvdHRvbTogMDsKICBsZWZ0OiAwOwogIHJpZ2h0OiAxMDAlOwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzOwogIHRyYW5zaXRpb246IHJpZ2h0IDAuM3MgZWFzZS1vdXQ7Cn0KLyogSG92ZXIgKi8KLnVrLWJ1dHRvbi10ZXh0OmhvdmVyIHsKICBjb2xvcjogIzMzMzsKfQoudWstYnV0dG9uLXRleHQ6aG92ZXI6OmJlZm9yZSB7CiAgcmlnaHQ6IDA7Cn0KLyogRGlzYWJsZWQgKi8KLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkIHsKICBjb2xvcjogIzk5OTsKfQoudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQ6OmJlZm9yZSB7CiAgZGlzcGxheTogbm9uZTsKfQovKgogKiBMaW5rCiAqIDEuIFJlc2V0CiAqIDIuIFN0eWxlCiAqLwoudWstYnV0dG9uLWxpbmsgewogIC8qIDEgKi8KICBwYWRkaW5nOiAwOwogIGxpbmUtaGVpZ2h0OiAxLjU7CiAgYmFja2dyb3VuZDogbm9uZTsKICAvKiAyICovCiAgY29sb3I6ICMzMzM7Cn0KLyogSG92ZXIgKi8KLnVrLWJ1dHRvbi1saW5rOmhvdmVyIHsKICBjb2xvcjogIzk5OTsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KLyogRGlzYWJsZWQgKi8KLnVrLWJ1dHRvbi1saW5rOmRpc2FibGVkIHsKICBjb2xvcjogIzk5OTsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KLyogR3JvdXAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFVzaW5nIGBmbGV4YCBpbnN0ZWFkIG9mIGBpbmxpbmUtYmxvY2tgIHRvIHByZXZlbnQgd2hpdGVzcGFjZSBiZXR3ZWVudCBjaGlsZCBlbGVtZW50cwogKiAyLiBCZWhhdmUgbGlrZSBidXR0b24KICogMy4gQ3JlYXRlIHBvc2l0aW9uIGNvbnRleHQKICovCi51ay1idXR0b24tZ3JvdXAgewogIC8qIDEgKi8KICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAvKiAyICovCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAvKiAzICovCiAgcG9zaXRpb246IHJlbGF0aXZlOwp9Ci8qIEdyb3VwCiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICAgICAqIENvbGxhcHNlIGJvcmRlcgogICAgICovCi51ay1idXR0b24tZ3JvdXAgPiAudWstYnV0dG9uOm50aC1jaGlsZChuKzIpLAoudWstYnV0dG9uLWdyb3VwID4gZGl2Om50aC1jaGlsZChuKzIpIC51ay1idXR0b24gewogIG1hcmdpbi1sZWZ0OiAtMXB4Owp9Ci8qCiAgICAgKiBDcmVhdGUgcG9zaXRpb24gY29udGV4dCB0byBzdXBlcmltcG9zZSB0aGUgc3VjY2Vzc29yIGVsZW1lbnRzIGJvcmRlcgogICAgICogS25vd24gaXNzdWU6IElmIHlvdSB1c2UgYW4gYGFgIGVsZW1lbnQgYXMgYnV0dG9uIGFuZCBhbiBpY29uIGluc2lkZSwKICAgICAqIHRoZSBhY3RpdmUgc3RhdGUgd2lsbCBub3Qgd29yayBpZiB5b3UgY2xpY2sgdGhlIGljb24gaW5zaWRlIHRoZSBidXR0b24KICAgICAqIFdvcmthcm91bmQ6IEp1c3QgdXNlIGEgYGJ1dHRvbmAgb3IgYGlucHV0YCBlbGVtZW50IGFzIGJ1dHRvbgogICAgICovCi51ay1idXR0b24tZ3JvdXAgLnVrLWJ1dHRvbjpob3ZlciwKLnVrLWJ1dHRvbi1ncm91cCAudWstYnV0dG9uOmFjdGl2ZSwKLnVrLWJ1dHRvbi1ncm91cCAudWstYnV0dG9uLnVrLWFjdGl2ZSB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHotaW5kZXg6IDE7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogUHJvZ3Jlc3MKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIEFkZCB0aGUgY29ycmVjdCB2ZXJ0aWNhbCBhbGlnbm1lbnQgaW4gYWxsIGJyb3dzZXJzLgogKiAyLiBCZWhhdmUgbGlrZSBhIGJsb2NrIGVsZW1lbnQuCiAqIDMuIFJlbW92ZSBib3JkZXJzIGluIEZpcmVmb3guCiAqIDQuIFJlbW92ZSBkZWZhdWx0IHN0eWxlIGluIENocm9tZSwgU2FmYXJpIGFuZCBFZGdlLgogKiA1LiBTdHlsZQogKi8KLnVrLXByb2dyZXNzIHsKICAvKiAxICovCiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOwogIC8qIDIgKi8KICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogMTAwJTsKICAvKiAzICovCiAgYm9yZGVyOiAwOwogIC8qIDQgKi8KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOGY4OwogIC8qIDUgKi8KICBtYXJnaW4tYm90dG9tOiAyMHB4OwogIGhlaWdodDogMTVweDsKICBib3JkZXItcmFkaXVzOiA1MDBweDsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci8qIEFkZCBtYXJnaW4gaWYgYWRqYWNlbnQgZWxlbWVudCAqLwoqICsgLnVrLXByb2dyZXNzIHsKICBtYXJnaW4tdG9wOiAyMHB4Owp9Ci8qCiAqIFNob3cgYmFja2dyb3VuZCBjb2xvciBzZXQgb24gYHVrLXByb2dyZXNzYCBpbiBDaHJvbWUsIFNhZmFyaSBhbmQgRWRnZS4KICovCi51ay1wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy1iYXIgewogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Owp9Ci8qCiAqIFByb2dyZXNzIEJhcgogKiAxLiBUcmFuc2l0aW9ucyBkb24ndCB3b3JrIG9uIGA6Oi1tb3otcHJvZ3Jlc3MtYmFyYCBwc2V1ZG8gZWxlbWVudCBpbiBGaXJlZm94IHlldC4KICogICAgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYyMzUxCiAqLwoudWstcHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWUgewogIGJhY2tncm91bmQtY29sb3I6ICMxZTg3ZjA7CiAgdHJhbnNpdGlvbjogd2lkdGggMC42cyBlYXNlOwp9Ci51ay1wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXIgewogIGJhY2tncm91bmQtY29sb3I6ICMxZTg3ZjA7CiAgLyogMSAqLwogIHRyYW5zaXRpb246IHdpZHRoIDAuNnMgZWFzZTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBTZWN0aW9uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBNYWtlIGl0IHdvcmsgd2l0aCBgMTAwdmhgIGFuZCBoZWlnaHQgaW4gZ2VuZXJhbAogKi8KLnVrLXNlY3Rpb24gewogIGRpc3BsYXk6IGZsb3ctcm9vdDsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIC8qIDEgKi8KICBwYWRkaW5nLXRvcDogNDBweDsKICBwYWRkaW5nLWJvdHRvbTogNDBweDsKfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7CiAgLnVrLXNlY3Rpb24gewogICAgcGFkZGluZy10b3A6IDcwcHg7CiAgICBwYWRkaW5nLWJvdHRvbTogNzBweDsKICB9Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIHRoZSBsYXN0LWNoaWxkCiAqLwoudWstc2VjdGlvbiA+IDpsYXN0LWNoaWxkIHsKICBtYXJnaW4tYm90dG9tOiAwOwp9Ci8qIFNpemUgbW9kaWZpZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBYU21hbGwKICovCi51ay1zZWN0aW9uLXhzbWFsbCB7CiAgcGFkZGluZy10b3A6IDIwcHg7CiAgcGFkZGluZy1ib3R0b206IDIwcHg7Cn0KLyoKICogU21hbGwKICovCi51ay1zZWN0aW9uLXNtYWxsIHsKICBwYWRkaW5nLXRvcDogNDBweDsKICBwYWRkaW5nLWJvdHRvbTogNDBweDsKfQovKgogKiBMYXJnZQogKi8KLnVrLXNlY3Rpb24tbGFyZ2UgewogIHBhZGRpbmctdG9wOiA3MHB4OwogIHBhZGRpbmctYm90dG9tOiA3MHB4Owp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstc2VjdGlvbi1sYXJnZSB7CiAgICBwYWRkaW5nLXRvcDogMTQwcHg7CiAgICBwYWRkaW5nLWJvdHRvbTogMTQwcHg7CiAgfQp9Ci8qCiAqIFhMYXJnZQogKi8KLnVrLXNlY3Rpb24teGxhcmdlIHsKICBwYWRkaW5nLXRvcDogMTQwcHg7CiAgcGFkZGluZy1ib3R0b206IDE0MHB4Owp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstc2VjdGlvbi14bGFyZ2UgewogICAgcGFkZGluZy10b3A6IDIxMHB4OwogICAgcGFkZGluZy1ib3R0b206IDIxMHB4OwogIH0KfQovKiBTdHlsZSBtb2RpZmllcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIERlZmF1bHQKICovCi51ay1zZWN0aW9uLWRlZmF1bHQgewogIGJhY2tncm91bmQ6ICNmZmY7Cn0KLyoKICogTXV0ZWQKICovCi51ay1zZWN0aW9uLW11dGVkIHsKICBiYWNrZ3JvdW5kOiAjZjhmOGY4Owp9Ci8qCiAqIFByaW1hcnkKICovCi51ay1zZWN0aW9uLXByaW1hcnkgewogIGJhY2tncm91bmQ6ICMxZTg3ZjA7Cn0KLyoKICogU2Vjb25kYXJ5CiAqLwoudWstc2VjdGlvbi1zZWNvbmRhcnkgewogIGJhY2tncm91bmQ6ICMyMjI7Cn0KLyogT3ZlcmxhcCBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogUmVzZXJ2ZWQgbW9kaWZpZXIgdG8gbWFrZSBhIHNlY3Rpb24gb3ZlcmxhcCBhbm90aGVyIHNlY3Rpb24gd2l0aCBhbiBib3JkZXIgaW1hZ2UKICogSW1wbGVtZW50ZWQgYnkgdGhlIHRoZW1lCiAqLwovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBDb250YWluZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIEJveCBzaXppbmcgaGFzIHRvIGJlIGBjb250ZW50LWJveGAgc28gdGhlIG1heC13aWR0aCBpcyBhbHdheXMgdGhlIHNhbWUgYW5kCiAqICAgIHVuYWZmZWN0ZWQgYnkgdGhlIHBhZGRpbmcgb24gZGlmZmVyZW50IGJyZWFrcG9pbnRzLiBJdCdzIGltcG9ydGFudCBmb3IgdGhlIHNpemUgbW9kaWZpZXJzLgogKi8KLnVrLWNvbnRhaW5lciB7CiAgZGlzcGxheTogZmxvdy1yb290OwogIC8qIDEgKi8KICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICBtYXgtd2lkdGg6IDEyMDBweDsKICBtYXJnaW4tbGVmdDogYXV0bzsKICBtYXJnaW4tcmlnaHQ6IGF1dG87CiAgcGFkZGluZy1sZWZ0OiAxNXB4OwogIHBhZGRpbmctcmlnaHQ6IDE1cHg7Cn0KLyogUGhvbmUgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7CiAgLnVrLWNvbnRhaW5lciB7CiAgICBwYWRkaW5nLWxlZnQ6IDMwcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiAzMHB4OwogIH0KfQovKiBUYWJsZXQgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7CiAgLnVrLWNvbnRhaW5lciB7CiAgICBwYWRkaW5nLWxlZnQ6IDQwcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiA0MHB4OwogIH0KfQovKgogKiBSZW1vdmUgbWFyZ2luIGZyb20gdGhlIGxhc3QtY2hpbGQKICovCi51ay1jb250YWluZXIgPiA6bGFzdC1jaGlsZCB7CiAgbWFyZ2luLWJvdHRvbTogMDsKfQovKgogKiBSZW1vdmUgcGFkZGluZyBmcm9tIG5lc3RlZCBjb250YWluZXJzCiAqLwoudWstY29udGFpbmVyIC51ay1jb250YWluZXIgewogIHBhZGRpbmctbGVmdDogMDsKICBwYWRkaW5nLXJpZ2h0OiAwOwp9Ci8qIFNpemUgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1jb250YWluZXIteHNtYWxsIHsKICBtYXgtd2lkdGg6IDc1MHB4Owp9Ci51ay1jb250YWluZXItc21hbGwgewogIG1heC13aWR0aDogOTAwcHg7Cn0KLnVrLWNvbnRhaW5lci1sYXJnZSB7CiAgbWF4LXdpZHRoOiAxNDAwcHg7Cn0KLnVrLWNvbnRhaW5lci14bGFyZ2UgewogIG1heC13aWR0aDogMTYwMHB4Owp9Ci51ay1jb250YWluZXItZXhwYW5kIHsKICBtYXgtd2lkdGg6IG5vbmU7Cn0KLyogRXhwYW5kIG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBFeHBhbmQgb25lIHNpZGUgb25seQogKi8KLnVrLWNvbnRhaW5lci1leHBhbmQtbGVmdCB7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KLnVrLWNvbnRhaW5lci1leHBhbmQtcmlnaHQgewogIG1hcmdpbi1yaWdodDogMDsKfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAudWstY29udGFpbmVyLWV4cGFuZC1sZWZ0LnVrLWNvbnRhaW5lci14c21hbGwsCiAgLnVrLWNvbnRhaW5lci1leHBhbmQtcmlnaHQudWstY29udGFpbmVyLXhzbWFsbCB7CiAgICBtYXgtd2lkdGg6IGNhbGMoNTAlICsgKDc1MHB4IC8gMikgLSAzMHB4KTsKICB9CiAgLnVrLWNvbnRhaW5lci1leHBhbmQtbGVmdC51ay1jb250YWluZXItc21hbGwsCiAgLnVrLWNvbnRhaW5lci1leHBhbmQtcmlnaHQudWstY29udGFpbmVyLXNtYWxsIHsKICAgIG1heC13aWR0aDogY2FsYyg1MCUgKyAoOTAwcHggLyAyKSAtIDMwcHgpOwogIH0KfQovKiBUYWJsZXQgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7CiAgLnVrLWNvbnRhaW5lci1leHBhbmQtbGVmdCwKICAudWstY29udGFpbmVyLWV4cGFuZC1yaWdodCB7CiAgICBtYXgtd2lkdGg6IGNhbGMoNTAlICsgKDEyMDBweCAvIDIpIC0gNDBweCk7CiAgfQogIC51ay1jb250YWluZXItZXhwYW5kLWxlZnQudWstY29udGFpbmVyLXhzbWFsbCwKICAudWstY29udGFpbmVyLWV4cGFuZC1yaWdodC51ay1jb250YWluZXIteHNtYWxsIHsKICAgIG1heC13aWR0aDogY2FsYyg1MCUgKyAoNzUwcHggLyAyKSAtIDQwcHgpOwogIH0KICAudWstY29udGFpbmVyLWV4cGFuZC1sZWZ0LnVrLWNvbnRhaW5lci1zbWFsbCwKICAudWstY29udGFpbmVyLWV4cGFuZC1yaWdodC51ay1jb250YWluZXItc21hbGwgewogICAgbWF4LXdpZHRoOiBjYWxjKDUwJSArICg5MDBweCAvIDIpIC0gNDBweCk7CiAgfQogIC51ay1jb250YWluZXItZXhwYW5kLWxlZnQudWstY29udGFpbmVyLWxhcmdlLAogIC51ay1jb250YWluZXItZXhwYW5kLXJpZ2h0LnVrLWNvbnRhaW5lci1sYXJnZSB7CiAgICBtYXgtd2lkdGg6IGNhbGMoNTAlICsgKDE0MDBweCAvIDIpIC0gNDBweCk7CiAgfQogIC51ay1jb250YWluZXItZXhwYW5kLWxlZnQudWstY29udGFpbmVyLXhsYXJnZSwKICAudWstY29udGFpbmVyLWV4cGFuZC1yaWdodC51ay1jb250YWluZXIteGxhcmdlIHsKICAgIG1heC13aWR0aDogY2FsYyg1MCUgKyAoMTYwMHB4IC8gMikgLSA0MHB4KTsKICB9Cn0KLyogSXRlbQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogVXRpbGl0eSBjbGFzc2VzIHRvIHJlc2V0IGNvbnRhaW5lciBwYWRkaW5nIG9uIHRoZSBsZWZ0IG9yIHJpZ2h0IHNpZGUKICogTm90ZTogSXQgaGFzIHRvIGJlIG5lZ2F0aXZlIG1hcmdpbiBvbiB0aGUgaXRlbSwgYmVjYXVzZSBpdCdzIHNwZWNpZmljIHRvIHRoZSBpdGVtLgogKi8KLnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLWxlZnQsCi51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1yaWdodCB7CiAgd2lkdGg6IGNhbGMoMTAwJSArIDE1cHgpOwp9Ci51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1sZWZ0IHsKICBtYXJnaW4tbGVmdDogLTE1cHg7Cn0KLnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLXJpZ2h0IHsKICBtYXJnaW4tcmlnaHQ6IC0xNXB4Owp9Ci8qIFBob25lIGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgewogIC51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1sZWZ0LAogIC51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1yaWdodCB7CiAgICB3aWR0aDogY2FsYygxMDAlICsgMzBweCk7CiAgfQogIC51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1sZWZ0IHsKICAgIG1hcmdpbi1sZWZ0OiAtMzBweDsKICB9CiAgLnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLXJpZ2h0IHsKICAgIG1hcmdpbi1yaWdodDogLTMwcHg7CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstY29udGFpbmVyLWl0ZW0tcGFkZGluZy1yZW1vdmUtbGVmdCwKICAudWstY29udGFpbmVyLWl0ZW0tcGFkZGluZy1yZW1vdmUtcmlnaHQgewogICAgd2lkdGg6IGNhbGMoMTAwJSArIDQwcHgpOwogIH0KICAudWstY29udGFpbmVyLWl0ZW0tcGFkZGluZy1yZW1vdmUtbGVmdCB7CiAgICBtYXJnaW4tbGVmdDogLTQwcHg7CiAgfQogIC51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1yaWdodCB7CiAgICBtYXJnaW4tcmlnaHQ6IC00MHB4OwogIH0KfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBUaWxlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstdGlsZSB7CiAgZGlzcGxheTogZmxvdy1yb290OwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIHBhZGRpbmctbGVmdDogMTVweDsKICBwYWRkaW5nLXJpZ2h0OiAxNXB4OwogIHBhZGRpbmctdG9wOiA0MHB4OwogIHBhZGRpbmctYm90dG9tOiA0MHB4Owp9Ci8qIFBob25lIGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgewogIC51ay10aWxlIHsKICAgIHBhZGRpbmctbGVmdDogMzBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstdGlsZSB7CiAgICBwYWRkaW5nLWxlZnQ6IDQwcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiA0MHB4OwogICAgcGFkZGluZy10b3A6IDcwcHg7CiAgICBwYWRkaW5nLWJvdHRvbTogNzBweDsKICB9Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIHRoZSBsYXN0LWNoaWxkCiAqLwoudWstdGlsZSA+IDpsYXN0LWNoaWxkIHsKICBtYXJnaW4tYm90dG9tOiAwOwp9Ci8qIFNpemUgbW9kaWZpZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBYU21hbGwKICovCi51ay10aWxlLXhzbWFsbCB7CiAgcGFkZGluZy10b3A6IDIwcHg7CiAgcGFkZGluZy1ib3R0b206IDIwcHg7Cn0KLyoKICogU21hbGwKICovCi51ay10aWxlLXNtYWxsIHsKICBwYWRkaW5nLXRvcDogNDBweDsKICBwYWRkaW5nLWJvdHRvbTogNDBweDsKfQovKgogKiBMYXJnZQogKi8KLnVrLXRpbGUtbGFyZ2UgewogIHBhZGRpbmctdG9wOiA3MHB4OwogIHBhZGRpbmctYm90dG9tOiA3MHB4Owp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstdGlsZS1sYXJnZSB7CiAgICBwYWRkaW5nLXRvcDogMTQwcHg7CiAgICBwYWRkaW5nLWJvdHRvbTogMTQwcHg7CiAgfQp9Ci8qCiAqIFhMYXJnZQogKi8KLnVrLXRpbGUteGxhcmdlIHsKICBwYWRkaW5nLXRvcDogMTQwcHg7CiAgcGFkZGluZy1ib3R0b206IDE0MHB4Owp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstdGlsZS14bGFyZ2UgewogICAgcGFkZGluZy10b3A6IDIxMHB4OwogICAgcGFkZGluZy1ib3R0b206IDIxMHB4OwogIH0KfQovKiBTdHlsZSBtb2RpZmllcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIERlZmF1bHQKICovCi51ay10aWxlLWRlZmF1bHQgewogIGJhY2tncm91bmQtY29sb3I6ICNmZmY7Cn0KLyoKICogTXV0ZWQKICovCi51ay10aWxlLW11dGVkIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOGY4Owp9Ci8qCiAqIFByaW1hcnkKICovCi51ay10aWxlLXByaW1hcnkgewogIGJhY2tncm91bmQtY29sb3I6ICMxZTg3ZjA7Cn0KLyoKICogU2Vjb25kYXJ5CiAqLwoudWstdGlsZS1zZWNvbmRhcnkgewogIGJhY2tncm91bmQtY29sb3I6ICMyMjI7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogQ2FyZAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWNhcmQgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4xcyBlYXNlLWluLW91dDsKfQovKiBTZWN0aW9ucwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWNhcmQtYm9keSB7CiAgZGlzcGxheTogZmxvdy1yb290OwogIHBhZGRpbmc6IDMwcHggMzBweDsKfQoudWstY2FyZC1oZWFkZXIgewogIGRpc3BsYXk6IGZsb3ctcm9vdDsKICBwYWRkaW5nOiAxNXB4IDMwcHg7Cn0KLnVrLWNhcmQtZm9vdGVyIHsKICBkaXNwbGF5OiBmbG93LXJvb3Q7CiAgcGFkZGluZzogMTVweCAzMHB4Owp9Ci8qIERlc2t0b3AgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CiAgLnVrLWNhcmQtYm9keSB7CiAgICBwYWRkaW5nOiA0MHB4IDQwcHg7CiAgfQogIC51ay1jYXJkLWhlYWRlciB7CiAgICBwYWRkaW5nOiAyMHB4IDQwcHg7CiAgfQogIC51ay1jYXJkLWZvb3RlciB7CiAgICBwYWRkaW5nOiAyMHB4IDQwcHg7CiAgfQp9Ci8qCiAqIFJlbW92ZSBtYXJnaW4gZnJvbSB0aGUgbGFzdC1jaGlsZAogKi8KLnVrLWNhcmQtYm9keSA+IDpsYXN0LWNoaWxkLAoudWstY2FyZC1oZWFkZXIgPiA6bGFzdC1jaGlsZCwKLnVrLWNhcmQtZm9vdGVyID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KLyogTWVkaWEKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIFJlc2VydmVkIGFsaWdubWVudCBtb2RpZmllciB0byBzdHlsZSB0aGUgbWVkaWEgZWxlbWVudCwgZS5nLiB3aXRoIGBib3JkZXItcmFkaXVzYAogKiBJbXBsZW1lbnRlZCBieSB0aGUgdGhlbWUKICovCi8qIFRpdGxlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstY2FyZC10aXRsZSB7CiAgZm9udC1zaXplOiAxLjVyZW07CiAgbGluZS1oZWlnaHQ6IDEuNDsKfQovKiBCYWRnZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gUG9zaXRpb24KICogMi4gU2l6ZQogKiAzLiBTdHlsZQogKiA0LiBDZW50ZXIgY2hpbGQgdmVydGljYWxseQogKi8KLnVrLWNhcmQtYmFkZ2UgewogIC8qIDEgKi8KICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAxNXB4OwogIHJpZ2h0OiAxNXB4OwogIHotaW5kZXg6IDE7CiAgLyogMiAqLwogIGhlaWdodDogMjJweDsKICBwYWRkaW5nOiAwIDEwcHg7CiAgLyogMyAqLwogIGJhY2tncm91bmQ6ICMxZTg3ZjA7CiAgY29sb3I6ICNmZmY7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKICAvKiA0ICovCiAgZGlzcGxheTogZmxleDsKICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIGxpbmUtaGVpZ2h0OiAwOwogIGJvcmRlci1yYWRpdXM6IDJweDsKICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9Ci8qCiAqIFJlbW92ZSBtYXJnaW4gZnJvbSBhZGphY2VudCBlbGVtZW50CiAqLwoudWstY2FyZC1iYWRnZTpmaXJzdC1jaGlsZCArICogewogIG1hcmdpbi10b3A6IDA7Cn0KLyogSG92ZXIgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1jYXJkLWhvdmVyOm5vdCgudWstY2FyZC1kZWZhdWx0KTpub3QoLnVrLWNhcmQtcHJpbWFyeSk6bm90KC51ay1jYXJkLXNlY29uZGFyeSk6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgYm94LXNoYWRvdzogMCAxNHB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjE2KTsKfQovKiBTdHlsZSBtb2RpZmllcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIERlZmF1bHQKICogTm90ZTogSGVhZGVyIGFuZCBGb290ZXIgYXJlIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBkZWZhdWx0IHN0eWxlCiAqLwoudWstY2FyZC1kZWZhdWx0IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogIGNvbG9yOiAjNjY2OwogIGJveC1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjA4KTsKfQoudWstY2FyZC1kZWZhdWx0IC51ay1jYXJkLXRpdGxlIHsKICBjb2xvcjogIzMzMzsKfQoudWstY2FyZC1kZWZhdWx0LnVrLWNhcmQtaG92ZXI6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgYm94LXNoYWRvdzogMCAxNHB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjE2KTsKfQoudWstY2FyZC1kZWZhdWx0IC51ay1jYXJkLWhlYWRlciB7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNWU1ZTU7Cn0KLnVrLWNhcmQtZGVmYXVsdCAudWstY2FyZC1mb290ZXIgewogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1Owp9Ci8qCiAqIFByaW1hcnkKICovCi51ay1jYXJkLXByaW1hcnkgewogIGJhY2tncm91bmQtY29sb3I6ICMxZTg3ZjA7CiAgY29sb3I6ICNmZmY7CiAgYm94LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIDAuMDgpOwp9Ci51ay1jYXJkLXByaW1hcnkgLnVrLWNhcmQtdGl0bGUgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ob3Zlcjpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzFlODdmMDsKICBib3gtc2hhZG93OiAwIDE0cHggMjVweCByZ2JhKDAsIDAsIDAsIDAuMTYpOwp9Ci8qCiAqIFNlY29uZGFyeQogKi8KLnVrLWNhcmQtc2Vjb25kYXJ5IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyOwogIGNvbG9yOiAjZmZmOwogIGJveC1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjA4KTsKfQoudWstY2FyZC1zZWNvbmRhcnkgLnVrLWNhcmQtdGl0bGUgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWhvdmVyOmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyOwogIGJveC1zaGFkb3c6IDAgMTRweCAyNXB4IHJnYmEoMCwgMCwgMCwgMC4xNik7Cn0KLyogU2l6ZSBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogU21hbGwKICovCi51ay1jYXJkLXNtYWxsLnVrLWNhcmQtYm9keSwKLnVrLWNhcmQtc21hbGwgLnVrLWNhcmQtYm9keSB7CiAgcGFkZGluZzogMjBweCAyMHB4Owp9Ci51ay1jYXJkLXNtYWxsIC51ay1jYXJkLWhlYWRlciB7CiAgcGFkZGluZzogMTNweCAyMHB4Owp9Ci51ay1jYXJkLXNtYWxsIC51ay1jYXJkLWZvb3RlciB7CiAgcGFkZGluZzogMTNweCAyMHB4Owp9Ci8qCiAqIExhcmdlCiAqLwovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC51ay1jYXJkLWxhcmdlLnVrLWNhcmQtYm9keSwKICAudWstY2FyZC1sYXJnZSAudWstY2FyZC1ib2R5IHsKICAgIHBhZGRpbmc6IDcwcHggNzBweDsKICB9CiAgLnVrLWNhcmQtbGFyZ2UgLnVrLWNhcmQtaGVhZGVyIHsKICAgIHBhZGRpbmc6IDM1cHggNzBweDsKICB9CiAgLnVrLWNhcmQtbGFyZ2UgLnVrLWNhcmQtZm9vdGVyIHsKICAgIHBhZGRpbmc6IDM1cHggNzBweDsKICB9Cn0KLyoKICAgICAqIERlZmF1bHQKICAgICAqLwoudWstY2FyZC1ib2R5ID4gLnVrLW5hdi1kZWZhdWx0IHsKICBtYXJnaW4tbGVmdDogLTMwcHg7CiAgbWFyZ2luLXJpZ2h0OiAtMzBweDsKfQoudWstY2FyZC1ib2R5ID4gLnVrLW5hdi1kZWZhdWx0Om9ubHktY2hpbGQgewogIG1hcmdpbi10b3A6IC0xNXB4OwogIG1hcmdpbi1ib3R0b206IC0xNXB4Owp9Ci51ay1jYXJkLWJvZHkgPiAudWstbmF2LWRlZmF1bHQgPiBsaSA+IGEsCi51ay1jYXJkLWJvZHkgPiAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsCi51ay1jYXJkLWJvZHkgPiAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyIHsKICBwYWRkaW5nLWxlZnQ6IDMwcHg7CiAgcGFkZGluZy1yaWdodDogMzBweDsKfQoudWstY2FyZC1ib2R5ID4gLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIHsKICBwYWRkaW5nLWxlZnQ6IDQ1cHg7Cn0KLyogRGVza3RvcCBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHsKICAudWstY2FyZC1ib2R5ID4gLnVrLW5hdi1kZWZhdWx0IHsKICAgIG1hcmdpbi1sZWZ0OiAtNDBweDsKICAgIG1hcmdpbi1yaWdodDogLTQwcHg7CiAgfQogIC51ay1jYXJkLWJvZHkgPiAudWstbmF2LWRlZmF1bHQ6b25seS1jaGlsZCB7CiAgICBtYXJnaW4tdG9wOiAtMjVweDsKICAgIG1hcmdpbi1ib3R0b206IC0yNXB4OwogIH0KICAudWstY2FyZC1ib2R5ID4gLnVrLW5hdi1kZWZhdWx0ID4gbGkgPiBhLAogIC51ay1jYXJkLWJvZHkgPiAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsCiAgLnVrLWNhcmQtYm9keSA+IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIgewogICAgcGFkZGluZy1sZWZ0OiA0MHB4OwogICAgcGFkZGluZy1yaWdodDogNDBweDsKICB9CiAgLnVrLWNhcmQtYm9keSA+IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiB7CiAgICBwYWRkaW5nLWxlZnQ6IDU1cHg7CiAgfQp9Ci8qCiAgICAgKiBTbWFsbAogICAgICovCi51ay1jYXJkLXNtYWxsID4gLnVrLW5hdi1kZWZhdWx0IHsKICBtYXJnaW4tbGVmdDogLTIwcHg7CiAgbWFyZ2luLXJpZ2h0OiAtMjBweDsKfQoudWstY2FyZC1zbWFsbCA+IC51ay1uYXYtZGVmYXVsdDpvbmx5LWNoaWxkIHsKICBtYXJnaW4tdG9wOiAtNXB4OwogIG1hcmdpbi1ib3R0b206IC01cHg7Cn0KLnVrLWNhcmQtc21hbGwgPiAudWstbmF2LWRlZmF1bHQgPiBsaSA+IGEsCi51ay1jYXJkLXNtYWxsID4gLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLAoudWstY2FyZC1zbWFsbCA+IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIgewogIHBhZGRpbmctbGVmdDogMjBweDsKICBwYWRkaW5nLXJpZ2h0OiAyMHB4Owp9Ci51ay1jYXJkLXNtYWxsID4gLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIHsKICBwYWRkaW5nLWxlZnQ6IDM1cHg7Cn0KLyoKICAgICAqIExhcmdlCiAgICAgKi8KLyogRGVza3RvcCBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHsKICAudWstY2FyZC1sYXJnZSA+IC51ay1uYXYtZGVmYXVsdCB7CiAgICBtYXJnaW46IDA7CiAgfQogIC51ay1jYXJkLWxhcmdlID4gLnVrLW5hdi1kZWZhdWx0Om9ubHktY2hpbGQgewogICAgbWFyZ2luOiAwOwogIH0KICAudWstY2FyZC1sYXJnZSA+IC51ay1uYXYtZGVmYXVsdCA+IGxpID4gYSwKICAudWstY2FyZC1sYXJnZSA+IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwKICAudWstY2FyZC1sYXJnZSA+IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIgewogICAgcGFkZGluZy1sZWZ0OiAwOwogICAgcGFkZGluZy1yaWdodDogMDsKICB9CiAgLnVrLWNhcmQtbGFyZ2UgPiAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgewogICAgcGFkZGluZy1sZWZ0OiAxNXB4OwogIH0KfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBDbG9zZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogQWRvcHRzIGB1ay1pY29uYAogKi8KLnVrLWNsb3NlIHsKICBjb2xvcjogIzk5OTsKICB0cmFuc2l0aW9uOiAwLjFzIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb24tcHJvcGVydHk6IGNvbG9yLCBvcGFjaXR5Owp9Ci8qIEhvdmVyICovCi51ay1jbG9zZTpob3ZlciB7CiAgY29sb3I6ICM2NjY7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogU3Bpbm5lcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogQWRvcHRzIGB1ay1pY29uYAogKi8KLyogU1ZHCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstc3Bpbm5lciA+ICogewogIGFuaW1hdGlvbjogdWstc3Bpbm5lci1yb3RhdGUgMS40cyBsaW5lYXIgaW5maW5pdGU7Cn0KQGtleWZyYW1lcyB1ay1zcGlubmVyLXJvdGF0ZSB7CiAgMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsKICB9Cn0KLyoKICogQ2lyY2xlCiAqLwoudWstc3Bpbm5lciA+ICogPiAqIHsKICBzdHJva2UtZGFzaGFycmF5OiA4OHB4OwogIHN0cm9rZS1kYXNob2Zmc2V0OiAwOwogIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjsKICBhbmltYXRpb246IHVrLXNwaW5uZXItZGFzaCAxLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogIHN0cm9rZS13aWR0aDogMTsKICBzdHJva2UtbGluZWNhcDogcm91bmQ7Cn0KQGtleWZyYW1lcyB1ay1zcGlubmVyLWRhc2ggewogIDAlIHsKICAgIHN0cm9rZS1kYXNob2Zmc2V0OiA4OHB4OwogIH0KICA1MCUgewogICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDIycHg7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpOwogIH0KICAxMDAlIHsKICAgIHN0cm9rZS1kYXNob2Zmc2V0OiA4OHB4OwogICAgdHJhbnNmb3JtOiByb3RhdGUoNDUwZGVnKTsKICB9Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogVG90b3AKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIEFkZG9wdHMgYHVrLWljb25gCiAqLwoudWstdG90b3AgewogIHBhZGRpbmc6IDVweDsKICBjb2xvcjogIzk5OTsKICB0cmFuc2l0aW9uOiBjb2xvciAwLjFzIGVhc2UtaW4tb3V0Owp9Ci8qIEhvdmVyICovCi51ay10b3RvcDpob3ZlciB7CiAgY29sb3I6ICM2NjY7Cn0KLyogT25DbGljayAqLwoudWstdG90b3A6YWN0aXZlIHsKICBjb2xvcjogIzMzMzsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBNYXJrZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIEFkZG9wdHMgYHVrLWljb25gCiAqLwoudWstbWFya2VyIHsKICBwYWRkaW5nOiA1cHg7CiAgYmFja2dyb3VuZDogIzIyMjsKICBjb2xvcjogI2ZmZjsKICBib3JkZXItcmFkaXVzOiA1MDBweDsKfQovKiBIb3ZlciAqLwoudWstbWFya2VyOmhvdmVyIHsKICBjb2xvcjogI2ZmZjsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBBbGVydAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWFsZXJ0IHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgbWFyZ2luLWJvdHRvbTogMjBweDsKICBwYWRkaW5nOiAxNXB4IDI5cHggMTVweCAxNXB4OwogIGJhY2tncm91bmQ6ICNmOGY4Zjg7CiAgY29sb3I6ICM2NjY7Cn0KLyogQWRkIG1hcmdpbiBpZiBhZGphY2VudCBlbGVtZW50ICovCiogKyAudWstYWxlcnQgewogIG1hcmdpbi10b3A6IDIwcHg7Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIHRoZSBsYXN0LWNoaWxkCiAqLwoudWstYWxlcnQgPiA6bGFzdC1jaGlsZCB7CiAgbWFyZ2luLWJvdHRvbTogMDsKfQovKiBDbG9zZQogKiBBZG9wdHMgYHVrLWNsb3NlYAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWFsZXJ0LWNsb3NlIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAyMHB4OwogIHJpZ2h0OiAxNXB4OwogIGNvbG9yOiBpbmhlcml0OwogIG9wYWNpdHk6IDAuNDsKfQovKgogKiBSZW1vdmUgbWFyZ2luIGZyb20gYWRqYWNlbnQgZWxlbWVudAogKi8KLnVrLWFsZXJ0LWNsb3NlOmZpcnN0LWNoaWxkICsgKiB7CiAgbWFyZ2luLXRvcDogMDsKfQovKgogKiBIb3ZlcgogKi8KLnVrLWFsZXJ0LWNsb3NlOmhvdmVyIHsKICBjb2xvcjogaW5oZXJpdDsKICBvcGFjaXR5OiAwLjg7Cn0KLyogU3R5bGUgbW9kaWZpZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBQcmltYXJ5CiAqLwoudWstYWxlcnQtcHJpbWFyeSB7CiAgYmFja2dyb3VuZDogI2Q4ZWFmYzsKICBjb2xvcjogIzFlODdmMDsKfQovKgogKiBTdWNjZXNzCiAqLwoudWstYWxlcnQtc3VjY2VzcyB7CiAgYmFja2dyb3VuZDogI2VkZmJmNjsKICBjb2xvcjogIzMyZDI5NjsKfQovKgogKiBXYXJuaW5nCiAqLwoudWstYWxlcnQtd2FybmluZyB7CiAgYmFja2dyb3VuZDogI2ZmZjZlZTsKICBjb2xvcjogI2ZhYTA1YTsKfQovKgogKiBEYW5nZXIKICovCi51ay1hbGVydC1kYW5nZXIgewogIGJhY2tncm91bmQ6ICNmZWY0ZjY7CiAgY29sb3I6ICNmMDUwNmU7Cn0KLyoKICAgICAqIENvbnRlbnQKICAgICAqLwoudWstYWxlcnQgaDEsCi51ay1hbGVydCBoMiwKLnVrLWFsZXJ0IGgzLAoudWstYWxlcnQgaDQsCi51ay1hbGVydCBoNSwKLnVrLWFsZXJ0IGg2IHsKICBjb2xvcjogaW5oZXJpdDsKfQoudWstYWxlcnQgYTpub3QoW2NsYXNzXSkgewogIGNvbG9yOiBpbmhlcml0OwogIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9Ci51ay1hbGVydCBhOm5vdChbY2xhc3NdKTpob3ZlciB7CiAgY29sb3I6IGluaGVyaXQ7CiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogUGxhY2Vob2xkZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1wbGFjZWhvbGRlciB7CiAgbWFyZ2luLWJvdHRvbTogMjBweDsKICBwYWRkaW5nOiAzMHB4IDMwcHg7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgYm9yZGVyOiAxcHggZGFzaGVkICNlNWU1ZTU7Cn0KLyogQWRkIG1hcmdpbiBpZiBhZGphY2VudCBlbGVtZW50ICovCiogKyAudWstcGxhY2Vob2xkZXIgewogIG1hcmdpbi10b3A6IDIwcHg7Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIHRoZSBsYXN0LWNoaWxkCiAqLwoudWstcGxhY2Vob2xkZXIgPiA6bGFzdC1jaGlsZCB7CiAgbWFyZ2luLWJvdHRvbTogMDsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBCYWRnZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gU3R5bGUKICogMi4gQ2VudGVyIGNoaWxkIHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseQogKi8KLnVrLWJhZGdlIHsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIG1pbi13aWR0aDogMThweDsKICBoZWlnaHQ6IDE4cHg7CiAgcGFkZGluZzogMCA1cHg7CiAgYm9yZGVyLXJhZGl1czogNTAwcHg7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAvKiAxICovCiAgYmFja2dyb3VuZDogIzFlODdmMDsKICBjb2xvcjogI2ZmZiAhaW1wb3J0YW50OwogIGZvbnQtc2l6ZTogMTFweDsKICAvKiAyICovCiAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICBsaW5lLWhlaWdodDogMDsKfQovKgogKiBSZXF1aXJlZCBmb3IgYGFgCiAqLwoudWstYmFkZ2U6aG92ZXIgewogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBMYWJlbAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWxhYmVsIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgcGFkZGluZzogMCAxMHB4OwogIGJhY2tncm91bmQ6ICMxZTg3ZjA7CiAgbGluZS1oZWlnaHQ6IDEuNTsKICBmb250LXNpemU6IDAuODc1cmVtOwogIGNvbG9yOiAjZmZmOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICBib3JkZXItcmFkaXVzOiAycHg7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQovKiBDb2xvciBtb2RpZmllcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIFN1Y2Nlc3MKICovCi51ay1sYWJlbC1zdWNjZXNzIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzJkMjk2OwogIGNvbG9yOiAjZmZmOwp9Ci8qCiAqIFdhcm5pbmcKICovCi51ay1sYWJlbC13YXJuaW5nIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFhMDVhOwogIGNvbG9yOiAjZmZmOwp9Ci8qCiAqIERhbmdlcgogKi8KLnVrLWxhYmVsLWRhbmdlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2YwNTA2ZTsKICBjb2xvcjogI2ZmZjsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBPdmVybGF5CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstb3ZlcmxheSB7CiAgcGFkZGluZzogMzBweCAzMHB4Owp9Ci8qCiAqIFJlbW92ZSBtYXJnaW4gZnJvbSB0aGUgbGFzdC1jaGlsZAogKi8KLnVrLW92ZXJsYXkgPiA6bGFzdC1jaGlsZCB7CiAgbWFyZ2luLWJvdHRvbTogMDsKfQovKiBJY29uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBTdHlsZSBtb2RpZmllcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIERlZmF1bHQKICovCi51ay1vdmVybGF5LWRlZmF1bHQgewogIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKfQovKgogKiBQcmltYXJ5CiAqLwoudWstb3ZlcmxheS1wcmltYXJ5IHsKICBiYWNrZ3JvdW5kOiByZ2JhKDM0LCAzNCwgMzQsIDAuOCk7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogQXJ0aWNsZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWFydGljbGUgewogIGRpc3BsYXk6IGZsb3ctcm9vdDsKfQovKgogKiBSZW1vdmUgbWFyZ2luIGZyb20gdGhlIGxhc3QtY2hpbGQKICovCi51ay1hcnRpY2xlID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KLyogQWRqYWNlbnQgc2libGluZwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWFydGljbGUgKyAudWstYXJ0aWNsZSB7CiAgbWFyZ2luLXRvcDogNzBweDsKfQovKiBUaXRsZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWFydGljbGUtdGl0bGUgewogIGZvbnQtc2l6ZTogMi4yMzEyNXJlbTsKICBsaW5lLWhlaWdodDogMS4yOwp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstYXJ0aWNsZS10aXRsZSB7CiAgICBmb250LXNpemU6IDIuNjI1cmVtOwogIH0KfQovKiBNZXRhCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstYXJ0aWNsZS1tZXRhIHsKICBmb250LXNpemU6IDAuODc1cmVtOwogIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgY29sb3I6ICM5OTk7Cn0KLnVrLWFydGljbGUtbWV0YSBhIHsKICBjb2xvcjogIzk5OTsKfQoudWstYXJ0aWNsZS1tZXRhIGE6aG92ZXIgewogIGNvbG9yOiAjNjY2OwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBDb21tZW50CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBTZWN0aW9ucwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWNvbW1lbnQtYm9keSB7CiAgZGlzcGxheTogZmxvdy1yb290OwogIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgd29yZC13cmFwOiBicmVhay13b3JkOwp9Ci51ay1jb21tZW50LWhlYWRlciB7CiAgZGlzcGxheTogZmxvdy1yb290OwogIG1hcmdpbi1ib3R0b206IDIwcHg7Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIHRoZSBsYXN0LWNoaWxkCiAqLwoudWstY29tbWVudC1ib2R5ID4gOmxhc3QtY2hpbGQsCi51ay1jb21tZW50LWhlYWRlciA+IDpsYXN0LWNoaWxkIHsKICBtYXJnaW4tYm90dG9tOiAwOwp9Ci8qIFRpdGxlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstY29tbWVudC10aXRsZSB7CiAgZm9udC1zaXplOiAxLjI1cmVtOwogIGxpbmUtaGVpZ2h0OiAxLjQ7Cn0KLyogTWV0YQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWNvbW1lbnQtbWV0YSB7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKICBsaW5lLWhlaWdodDogMS40OwogIGNvbG9yOiAjOTk5Owp9Ci8qIEF2YXRhcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogTGlzdAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWNvbW1lbnQtbGlzdCB7CiAgcGFkZGluZzogMDsKICBsaXN0LXN0eWxlOiBub25lOwp9Ci8qIEFkamFjZW50IHNpYmxpbmdzICovCi51ay1jb21tZW50LWxpc3QgPiA6bnRoLWNoaWxkKG4rMikgewogIG1hcmdpbi10b3A6IDcwcHg7Cn0KLyoKICogU3VibGlzdHMKICogTm90ZTogR2VuZXJhbCBzaWJsaW5nIHNlbGVjdG9yIGFsbG93cyByZXBseSBibG9jayBiZXR3ZWVuIGNvbW1lbnQgYW5kIHN1Ymxpc3QKICovCi51ay1jb21tZW50LWxpc3QgLnVrLWNvbW1lbnQgfiB1bCB7CiAgbWFyZ2luOiA3MHB4IDAgMCAwOwogIHBhZGRpbmctbGVmdDogMzBweDsKICBsaXN0LXN0eWxlOiBub25lOwp9Ci8qIFRhYmxldCBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogIC51ay1jb21tZW50LWxpc3QgLnVrLWNvbW1lbnQgfiB1bCB7CiAgICBwYWRkaW5nLWxlZnQ6IDEwMHB4OwogIH0KfQovKiBBZGphY2VudCBzaWJsaW5ncyAqLwoudWstY29tbWVudC1saXN0IC51ay1jb21tZW50IH4gdWwgPiA6bnRoLWNoaWxkKG4rMikgewogIG1hcmdpbi10b3A6IDcwcHg7Cn0KLyogU3R5bGUgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1jb21tZW50LXByaW1hcnkgewogIHBhZGRpbmc6IDMwcHg7CiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBTZWFyY2gKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIENvbnRhaW5lciBmaXRzIGl0cyBjb250ZW50CiAqIDIuIENyZWF0ZSBwb3NpdGlvbiBjb250ZXh0CiAqIDMuIFByZXZlbnQgY29udGVudCBvdmVyZmxvdwogKiA0LiBSZXNldCBgZm9ybWAKICovCi51ay1zZWFyY2ggewogIC8qIDEgKi8KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgLyogMiAqLwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAvKiAzICovCiAgbWF4LXdpZHRoOiAxMDAlOwogIC8qIDQgKi8KICBtYXJnaW46IDA7Cn0KLyogSW5wdXQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIFJlbW92ZSB0aGUgaW5uZXIgcGFkZGluZyBhbmQgY2FuY2VsIGJ1dHRvbnMgaW4gQ2hyb21lIG9uIE9TIFggYW5kIFNhZmFyaSBvbiBPUyBYLgogKi8KLnVrLXNlYXJjaC1pbnB1dDo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwKLnVrLXNlYXJjaC1pbnB1dDo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7CiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwp9Ci8qCiAqIFJlbW92ZXMgcGxhY2Vob2xkZXIgdHJhbnNwYXJlbmN5IGluIEZpcmVmb3guCiAqLwoudWstc2VhcmNoLWlucHV0OjotbW96LXBsYWNlaG9sZGVyIHsKICBvcGFjaXR5OiAxOwp9Ci8qCiAqIDEuIERlZmluZSBjb25zaXN0ZW50IGJveCBzaXppbmcuCiAqIDIuIEFkZHJlc3MgbWFyZ2lucyBzZXQgZGlmZmVyZW50bHkgaW4gRmlyZWZveC9JRSBhbmQgQ2hyb21lL1NhZmFyaS9PcGVyYS4KICogMy4gUmVtb3ZlIGBib3JkZXItcmFkaXVzYCBpbiBpT1MuCiAqIDQuIENoYW5nZSBmb250IHByb3BlcnRpZXMgdG8gYGluaGVyaXRgIGluIGFsbCBicm93c2VycwogKiA1LiBTaG93IHRoZSBvdmVyZmxvdyBpbiBFZGdlLgogKiA2LiBSZW1vdmUgZGVmYXVsdCBzdHlsZSBpbiBpT1MuCiAqIDcuIFZlcnRpY2FsIGFsaWdubWVudAogKiA4LiBUYWtlIHRoZSBmdWxsIGNvbnRhaW5lciB3aWR0aAogKiA5LiBTdHlsZQogKi8KLnVrLXNlYXJjaC1pbnB1dCB7CiAgLyogMSAqLwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgLyogMiAqLwogIG1hcmdpbjogMDsKICAvKiAzICovCiAgYm9yZGVyLXJhZGl1czogMDsKICAvKiA0ICovCiAgZm9udDogaW5oZXJpdDsKICAvKiA1ICovCiAgb3ZlcmZsb3c6IHZpc2libGU7CiAgLyogNiAqLwogIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAvKiA3ICovCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAvKiA4ICovCiAgd2lkdGg6IDEwMCU7CiAgLyogOSAqLwogIGJvcmRlcjogbm9uZTsKICBjb2xvcjogIzY2NjsKfQoudWstc2VhcmNoLWlucHV0OmZvY3VzIHsKICBvdXRsaW5lOiBub25lOwp9Ci8qIFBsYWNlaG9sZGVyICovCi51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICBjb2xvcjogIzk5OTsKfQovKiBJY29uIChBZG9wdHMgYHVrLWljb25gKQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogUG9zaXRpb24gYWJvdmUgaW5wdXQKICogMS4gU2V0IHBvc2l0aW9uCiAqIDIuIENlbnRlciBpY29uIHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseQogKiAzLiBTdHlsZQogKi8KLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb24gewogIC8qIDEgKi8KICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOwogIGJvdHRvbTogMDsKICBsZWZ0OiAwOwogIC8qIDIgKi8KICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIC8qIDMgKi8KICBjb2xvcjogIzk5OTsKfQovKgogKiBSZXF1aXJlZCBmb3IgYGFgLgogKi8KLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb246aG92ZXIgewogIGNvbG9yOiAjOTk5Owp9Ci8qCiAqIE1ha2UgYGlucHV0YCBlbGVtZW50IGNsaWNrYWJsZSB0aHJvdWdoIGljb24sIGUuZy4gaWYgaXQncyBhIGBzcGFuYAogKi8KLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb246bm90KGEpOm5vdChidXR0b24pOm5vdChpbnB1dCkgewogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Ci8qCiAqIFBvc2l0aW9uIG1vZGlmaWVyCiAqLwoudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbi1mbGlwIHsKICByaWdodDogMDsKICBsZWZ0OiBhdXRvOwp9Ci8qIERlZmF1bHQgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1zZWFyY2gtZGVmYXVsdCB7CiAgd2lkdGg6IDI0MHB4Owp9Ci8qCiAqIElucHV0CiAqLwoudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dCB7CiAgaGVpZ2h0OiA0MHB4OwogIHBhZGRpbmctbGVmdDogMTBweDsKICBwYWRkaW5nLXJpZ2h0OiAxMHB4OwogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogIGJvcmRlcjogMXB4IHNvbGlkICNlNWU1ZTU7Cn0KLyogRm9jdXMgKi8KLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQ6Zm9jdXMgewogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgYm9yZGVyLWNvbG9yOiAjMWU4N2YwOwp9Ci8qCiAqIEljb24KICovCi51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWljb24gewogIHdpZHRoOiA0MHB4Owp9Ci51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWljb246bm90KC51ay1zZWFyY2gtaWNvbi1mbGlwKSB+IC51ay1zZWFyY2gtaW5wdXQgewogIHBhZGRpbmctbGVmdDogNDBweDsKfQoudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pY29uLWZsaXAgfiAudWstc2VhcmNoLWlucHV0IHsKICBwYWRkaW5nLXJpZ2h0OiA0MHB4Owp9Ci8qIE5hdmJhciBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXNlYXJjaC1uYXZiYXIgewogIHdpZHRoOiA0MDBweDsKfQovKgogKiBJbnB1dAogKi8KLnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pbnB1dCB7CiAgaGVpZ2h0OiA0MHB4OwogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogIGZvbnQtc2l6ZTogMS41cmVtOwp9Ci8qIEZvY3VzICovCi8qCiAqIEljb24KICovCi51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaWNvbiB7CiAgd2lkdGg6IDQwcHg7Cn0KLnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pY29uOm5vdCgudWstc2VhcmNoLWljb24tZmxpcCkgfiAudWstc2VhcmNoLWlucHV0IHsKICBwYWRkaW5nLWxlZnQ6IDQwcHg7Cn0KLnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pY29uLWZsaXAgfiAudWstc2VhcmNoLWlucHV0IHsKICBwYWRkaW5nLXJpZ2h0OiA0MHB4Owp9Ci8qIExhcmdlIG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstc2VhcmNoLWxhcmdlIHsKICB3aWR0aDogNTAwcHg7Cn0KLyoKICogSW5wdXQKICovCi51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCB7CiAgaGVpZ2h0OiA4MHB4OwogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogIGZvbnQtc2l6ZTogMi42MjVyZW07Cn0KLyogRm9jdXMgKi8KLyoKICogSWNvbgogKi8KLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWljb24gewogIHdpZHRoOiA4MHB4Owp9Ci51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pY29uOm5vdCgudWstc2VhcmNoLWljb24tZmxpcCkgfiAudWstc2VhcmNoLWlucHV0IHsKICBwYWRkaW5nLWxlZnQ6IDgwcHg7Cn0KLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWljb24tZmxpcCB+IC51ay1zZWFyY2gtaW5wdXQgewogIHBhZGRpbmctcmlnaHQ6IDgwcHg7Cn0KLyogVG9nZ2xlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstc2VhcmNoLXRvZ2dsZSB7CiAgY29sb3I6ICM5OTk7Cn0KLyogSG92ZXIgKi8KLnVrLXNlYXJjaC10b2dnbGU6aG92ZXIgewogIGNvbG9yOiAjNjY2Owp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IEFjY29yZGlvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWFjY29yZGlvbiB7CiAgcGFkZGluZzogMDsKICBsaXN0LXN0eWxlOiBub25lOwp9Ci8qIEl0ZW0KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1hY2NvcmRpb24gPiA6bnRoLWNoaWxkKG4rMikgewogIG1hcmdpbi10b3A6IDIwcHg7Cn0KLyogVGl0bGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1hY2NvcmRpb24tdGl0bGUgewogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMS4yNXJlbTsKICBsaW5lLWhlaWdodDogMS40OwogIGNvbG9yOiAjMzMzOwogIG92ZXJmbG93OiBoaWRkZW47Cn0KLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlIHsKICBjb250ZW50OiAiIjsKICB3aWR0aDogMS40ZW07CiAgaGVpZ2h0OiAxLjRlbTsKICBtYXJnaW4tbGVmdDogMTBweDsKICBmbG9hdDogcmlnaHQ7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjEzJTIyJTIwaGVpZ2h0JTNEJTIyMTMlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMyUyMDEzJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyMzY2NiUyMiUyMHdpZHRoJTNEJTIyMTMlMjIlMjBoZWlnaHQlM0QlMjIxJTIyJTIweCUzRCUyMjAlMjIlMjB5JTNEJTIyNiUyMiUyMCUyRiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIwd2lkdGglM0QlMjIxJTIyJTIwaGVpZ2h0JTNEJTIyMTMlMjIlMjB4JTNEJTIyNiUyMiUyMHklM0QlMjIwJTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIik7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNTAlOwp9Ci51ay1vcGVuID4gLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTMlMjIlMjBoZWlnaHQlM0QlMjIxMyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEzJTIwMTMlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIwd2lkdGglM0QlMjIxMyUyMiUyMGhlaWdodCUzRCUyMjElMjIlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjI2JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIik7Cn0KLyogSG92ZXIgKi8KLnVrLWFjY29yZGlvbi10aXRsZTpob3ZlciB7CiAgY29sb3I6ICM2NjY7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci8qIENvbnRlbnQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1hY2NvcmRpb24tY29udGVudCB7CiAgZGlzcGxheTogZmxvdy1yb290OwogIG1hcmdpbi10b3A6IDIwcHg7Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIHRoZSBsYXN0LWNoaWxkCiAqLwoudWstYWNjb3JkaW9uLWNvbnRlbnQgPiA6bGFzdC1jaGlsZCB7CiAgbWFyZ2luLWJvdHRvbTogMDsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBEcm9wCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBIaWRlIGJ5IGRlZmF1bHQKICogMi4gU2V0IHBvc2l0aW9uCiAqIDMuIFNldCBhIGRlZmF1bHQgd2lkdGgKICovCi51ay1kcm9wIHsKICAvKiAxICovCiAgZGlzcGxheTogbm9uZTsKICAvKiAyICovCiAgcG9zaXRpb246IGFic29sdXRlOwogIHotaW5kZXg6IDEwMjA7CiAgLS11ay1wb3NpdGlvbi1vZmZzZXQ6IDIwcHg7CiAgLS11ay1wb3NpdGlvbi12aWV3cG9ydC1vZmZzZXQ6IDE1cHg7CiAgLyogMyAqLwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgd2lkdGg6IDMwMHB4Owp9Ci8qIFNob3cgKi8KLnVrLWRyb3AudWstb3BlbiB7CiAgZGlzcGxheTogYmxvY2s7Cn0KLyogR3JpZCBtb2RpZmllcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1kcm9wLXN0YWNrIC51ay1kcm9wLWdyaWQgPiAqIHsKICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Owp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IERyb3Bkb3duCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBIaWRlIGJ5IGRlZmF1bHQKICogMi4gU2V0IHBvc2l0aW9uCiAqIDMuIFNldCBhIGRlZmF1bHQgd2lkdGgKICogNC4gU3R5bGUKICovCi51ay1kcm9wZG93biB7CiAgLyogMSAqLwogIGRpc3BsYXk6IG5vbmU7CiAgLyogMiAqLwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiAxMDIwOwogIC0tdWstcG9zaXRpb24tb2Zmc2V0OiAxMHB4OwogIC0tdWstcG9zaXRpb24tdmlld3BvcnQtb2Zmc2V0OiAxNXB4OwogIC8qIDMgKi8KICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIG1pbi13aWR0aDogMjAwcHg7CiAgLyogNCAqLwogIHBhZGRpbmc6IDI1cHg7CiAgYmFja2dyb3VuZDogI2ZmZjsKICBjb2xvcjogIzY2NjsKICBib3gtc2hhZG93OiAwIDVweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7Cn0KLyogU2hvdyAqLwoudWstZHJvcGRvd24udWstb3BlbiB7CiAgZGlzcGxheTogYmxvY2s7Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIHRoZSBsYXN0LWNoaWxkCiAqLwoudWstZHJvcGRvd24gPiA6bGFzdC1jaGlsZCB7CiAgbWFyZ2luLWJvdHRvbTogMDsKfQovKiBTaXplIG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstZHJvcGRvd24tbGFyZ2UgewogIHBhZGRpbmc6IDQwcHg7Cn0KLyogTmF2CiAqIEFkb3B0cyBgdWstbmF2YAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWRyb3Bkb3duLW5hdiB7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKfQovKgogKiBJdGVtcwogKi8KLnVrLWRyb3Bkb3duLW5hdiA+IGxpID4gYSB7CiAgY29sb3I6ICM5OTk7Cn0KLyogSG92ZXIgKyBBY3RpdmUgKi8KLnVrLWRyb3Bkb3duLW5hdiA+IGxpID4gYTpob3ZlciwKLnVrLWRyb3Bkb3duLW5hdiA+IGxpLnVrLWFjdGl2ZSA+IGEgewogIGNvbG9yOiAjNjY2Owp9Ci8qCiAqIFN1YnRpdGxlCiAqLwoudWstZHJvcGRvd24tbmF2IC51ay1uYXYtc3VidGl0bGUgewogIGZvbnQtc2l6ZTogMTJweDsKfQovKgogKiBIZWFkZXIKICovCi51ay1kcm9wZG93bi1uYXYgLnVrLW5hdi1oZWFkZXIgewogIGNvbG9yOiAjMzMzOwp9Ci8qCiAqIERpdmlkZXIKICovCi51ay1kcm9wZG93bi1uYXYgLnVrLW5hdi1kaXZpZGVyIHsKICBib3JkZXItdG9wOiAxcHggc29saWQgI2U1ZTVlNTsKfQovKgogKiBTdWJsaXN0cwogKi8KLnVrLWRyb3Bkb3duLW5hdiAudWstbmF2LXN1YiBhIHsKICBjb2xvcjogIzk5OTsKfQoudWstZHJvcGRvd24tbmF2IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay1kcm9wZG93bi1uYXYgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSB7CiAgY29sb3I6ICM2NjY7Cn0KLyogR3JpZCBtb2RpZmllcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1kcm9wZG93bi1zdGFjayAudWstZHJvcGRvd24tZ3JpZCA+ICogewogIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogRHJvcGJhcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gSGlkZSBieSBkZWZhdWx0CiAqIDIuIFNldCBwb3NpdGlvbgogKiAzLiBTdHlsZQogKi8KLnVrLWRyb3BiYXIgewogIC0tdWstcG9zaXRpb24tb2Zmc2V0OiAwOwogIC0tdWstcG9zaXRpb24tc2hpZnQtb2Zmc2V0OiAwOwogIC0tdWstcG9zaXRpb24tdmlld3BvcnQtb2Zmc2V0OiAwOwogIC8qIDEgKi8KICBkaXNwbGF5OiBub25lOwogIC8qIDIgKi8KICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgei1pbmRleDogMTAyMDsKICAvKiAzICovCiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBwYWRkaW5nOiAyNXB4IDE1cHggMjVweCAxNXB4OwogIGJhY2tncm91bmQ6ICNmZmY7CiAgY29sb3I6ICM2NjY7Cn0KLyogU2hvdyAqLwoudWstZHJvcGJhci51ay1vcGVuIHsKICBkaXNwbGF5OiBibG9jazsKfQovKgogKiBSZW1vdmUgbWFyZ2luIGZyb20gdGhlIGxhc3QtY2hpbGQKICovCi51ay1kcm9wYmFyID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KLyogUGhvbmUgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7CiAgLnVrLWRyb3BiYXIgewogICAgcGFkZGluZy1sZWZ0OiAzMHB4OwogICAgcGFkZGluZy1yaWdodDogMzBweDsKICB9Cn0KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogIC51ay1kcm9wYmFyIHsKICAgIHBhZGRpbmctbGVmdDogNDBweDsKICAgIHBhZGRpbmctcmlnaHQ6IDQwcHg7CiAgfQp9Ci8qIFNpemUgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1kcm9wYmFyLWxhcmdlIHsKICBwYWRkaW5nLXRvcDogNDBweDsKICBwYWRkaW5nLWJvdHRvbTogNDBweDsKfQovKiBEaXJlY3Rpb24gbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1kcm9wYmFyLXRvcCB7CiAgYm94LXNoYWRvdzogMCAxMnB4IDdweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7Cn0KLnVrLWRyb3BiYXItYm90dG9tIHsKICBib3gtc2hhZG93OiAwIC0xMnB4IDdweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7Cn0KLnVrLWRyb3BiYXItbGVmdCB7CiAgYm94LXNoYWRvdzogMTJweCAwIDdweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7Cn0KLnVrLWRyb3BiYXItcmlnaHQgewogIGJveC1zaGFkb3c6IC0xMnB4IDAgN3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjA1KTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBNb2RhbAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gSGlkZSBieSBkZWZhdWx0CiAqIDIuIFNldCBwb3NpdGlvbgogKiAzLiBBbGxvdyBzY3JvbGxpbmcgZm9yIHRoZSBtb2RhbCBkaWFsb2cKICogNC4gSG9yaXpvbnRhbCBwYWRkaW5nCiAqIDUuIE1hc2sgdGhlIGJhY2tncm91bmQgcGFnZQogKiA2LiBGYWRlLWluIHRyYW5zaXRpb24KICovCi51ay1tb2RhbCB7CiAgLyogMSAqLwogIGRpc3BsYXk6IG5vbmU7CiAgLyogMiAqLwogIHBvc2l0aW9uOiBmaXhlZDsKICB0b3A6IDA7CiAgcmlnaHQ6IDA7CiAgYm90dG9tOiAwOwogIGxlZnQ6IDA7CiAgei1pbmRleDogMTAxMDsKICAvKiAzICovCiAgb3ZlcmZsb3cteTogYXV0bzsKICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgLyogNCAqLwogIHBhZGRpbmc6IDE1cHggMTVweDsKICAvKiA1ICovCiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYpOwogIC8qIDYgKi8KICBvcGFjaXR5OiAwOwogIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgbGluZWFyOwp9Ci8qIFBob25lIGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgewogIC51ay1tb2RhbCB7CiAgICBwYWRkaW5nOiA1MHB4IDMwcHg7CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstbW9kYWwgewogICAgcGFkZGluZy1sZWZ0OiA0MHB4OwogICAgcGFkZGluZy1yaWdodDogNDBweDsKICB9Cn0KLyoKICogT3BlbgogKi8KLnVrLW1vZGFsLnVrLW9wZW4gewogIG9wYWNpdHk6IDE7Cn0KLyogUGFnZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogUHJldmVudCBzY3JvbGxiYXJzCiAqLwoudWstbW9kYWwtcGFnZSB7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQovKiBEaWFsb2cKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIENyZWF0ZSBwb3NpdGlvbiBjb250ZXh0IGZvciBzcGlubmVyIGFuZCBjbG9zZSBidXR0b24KICogMi4gRGltZW5zaW9ucwogKiAzLiBgIWltcG9ydGFudGAgaXMgbmVlZGVkIHRvIG92ZXJ3cml0ZSBgdWstd2lkdGgtYXV0b2AuIFNlZSBgI21vZGFsLW1lZGlhLWltYWdlYCBpbiB0ZXN0cwogKiA0LiBTdHlsZQogKiA1LiBTbGlkZS1pbiB0cmFuc2l0aW9uCiAqLwoudWstbW9kYWwtZGlhbG9nIHsKICAvKiAxICovCiAgcG9zaXRpb246IHJlbGF0aXZlOwogIC8qIDIgKi8KICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIG1hcmdpbjogMCBhdXRvOwogIHdpZHRoOiA2MDBweDsKICAvKiAzICovCiAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgLyogNCAqLwogIGJhY2tncm91bmQ6ICNmZmY7CiAgLyogNSAqLwogIG9wYWNpdHk6IDA7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMDBweCk7CiAgdHJhbnNpdGlvbjogMC4zcyBsaW5lYXI7CiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogb3BhY2l0eSwgdHJhbnNmb3JtOwp9Ci8qCiAqIE9wZW4KICovCi51ay1vcGVuID4gLnVrLW1vZGFsLWRpYWxvZyB7CiAgb3BhY2l0eTogMTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7Cn0KLyogU2l6ZSBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogQ29udGFpbmVyIHNpemUKICogVGFrZSB0aGUgc2FtZSBzaXplIGFzIHRoZSBDb250YWluZXIgY29tcG9uZW50CiAqLwoudWstbW9kYWwtY29udGFpbmVyIC51ay1tb2RhbC1kaWFsb2cgewogIHdpZHRoOiAxMjAwcHg7Cn0KLyoKICogRnVsbCBzaXplCiAqIDEuIFJlbW92ZSBwYWRkaW5nIGFuZCBiYWNrZ3JvdW5kIGZyb20gbW9kYWwKICogMi4gUmVzZXQgYWxsIGRlZmF1bHQgZGVjbGFyYXRpb25zIGZyb20gbW9kYWwgZGlhbG9nCiAqLwovKiAxICovCi51ay1tb2RhbC1mdWxsIHsKICBwYWRkaW5nOiAwOwogIGJhY2tncm91bmQ6IG5vbmU7Cn0KLyogMiAqLwoudWstbW9kYWwtZnVsbCAudWstbW9kYWwtZGlhbG9nIHsKICBtYXJnaW46IDA7CiAgd2lkdGg6IDEwMCU7CiAgbWF4LXdpZHRoOiAxMDAlOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKfQovKiBTZWN0aW9ucwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLW1vZGFsLWJvZHkgewogIGRpc3BsYXk6IGZsb3ctcm9vdDsKICBwYWRkaW5nOiAyMHB4IDIwcHg7Cn0KLnVrLW1vZGFsLWhlYWRlciB7CiAgZGlzcGxheTogZmxvdy1yb290OwogIHBhZGRpbmc6IDEwcHggMjBweDsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTVlNWU1Owp9Ci51ay1tb2RhbC1mb290ZXIgewogIGRpc3BsYXk6IGZsb3ctcm9vdDsKICBwYWRkaW5nOiAxMHB4IDIwcHg7CiAgYmFja2dyb3VuZDogI2ZmZjsKICBib3JkZXItdG9wOiAxcHggc29saWQgI2U1ZTVlNTsKfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAudWstbW9kYWwtYm9keSB7CiAgICBwYWRkaW5nOiAzMHB4IDMwcHg7CiAgfQogIC51ay1tb2RhbC1oZWFkZXIgewogICAgcGFkZGluZzogMTVweCAzMHB4OwogIH0KICAudWstbW9kYWwtZm9vdGVyIHsKICAgIHBhZGRpbmc6IDE1cHggMzBweDsKICB9Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIHRoZSBsYXN0LWNoaWxkCiAqLwoudWstbW9kYWwtYm9keSA+IDpsYXN0LWNoaWxkLAoudWstbW9kYWwtaGVhZGVyID4gOmxhc3QtY2hpbGQsCi51ay1tb2RhbC1mb290ZXIgPiA6bGFzdC1jaGlsZCB7CiAgbWFyZ2luLWJvdHRvbTogMDsKfQovKiBUaXRsZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLW1vZGFsLXRpdGxlIHsKICBmb250LXNpemU6IDJyZW07CiAgbGluZS1oZWlnaHQ6IDEuMzsKfQovKiBDbG9zZQogKiBBZG9wdHMgYHVrLWNsb3NlYAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KW2NsYXNzKj0ndWstbW9kYWwtY2xvc2UtJ10gewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiAxMDEwOwogIHRvcDogMTBweDsKICByaWdodDogMTBweDsKICBwYWRkaW5nOiA1cHg7Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIGFkamFjZW50IGVsZW1lbnQKICovCltjbGFzcyo9J3VrLW1vZGFsLWNsb3NlLSddOmZpcnN0LWNoaWxkICsgKiB7CiAgbWFyZ2luLXRvcDogMDsKfQovKgogKiBIb3ZlcgogKi8KLyoKICogRGVmYXVsdAogKi8KLyoKICogT3V0c2lkZQogKiAxLiBQcmV2ZW50IHNjcm9sbGJhciBvbiBzbWFsbCBkZXZpY2VzCiAqLwoudWstbW9kYWwtY2xvc2Utb3V0c2lkZSB7CiAgdG9wOiAwOwogIC8qIDEgKi8KICByaWdodDogLTVweDsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMTAwJSk7CiAgY29sb3I6ICNmZmZmZmY7Cn0KLnVrLW1vZGFsLWNsb3NlLW91dHNpZGU6aG92ZXIgewogIGNvbG9yOiAjZmZmOwp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAvKiAxICovCiAgLnVrLW1vZGFsLWNsb3NlLW91dHNpZGUgewogICAgcmlnaHQ6IDA7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMDAlLCAtMTAwJSk7CiAgfQp9Ci8qCiAqIEZ1bGwKICovCi51ay1tb2RhbC1jbG9zZS1mdWxsIHsKICB0b3A6IDA7CiAgcmlnaHQ6IDA7CiAgcGFkZGluZzogMjBweDsKICBiYWNrZ3JvdW5kOiAjZmZmOwp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IFNsaWRlc2hvdwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gUHJldmVudCB0YWIgaGlnaGxpZ2h0aW5nIG9uIGlPUy4KICovCi51ay1zbGlkZXNob3cgewogIC8qIDEgKi8KICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50Owp9Ci8qIEl0ZW1zCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBDcmVhdGUgcG9zaXRpb24gYW5kIHN0YWNraW5nIGNvbnRleHQKICogMi4gUmVzZXQgbGlzdAogKiAzLiBDbGlwIGNoaWxkIGVsZW1lbnRzCiAqIDQuIFByZXZlbnQgZGlzcGxheWluZyB0aGUgY2FsbG91dCBpbmZvcm1hdGlvbiBvbiBpT1MuCiAqIDUuIERpc2FibGUgaG9yaXpvbnRhbCBwYW5uaW5nIGdlc3R1cmVzCiAqLwoudWstc2xpZGVzaG93LWl0ZW1zIHsKICAvKiAxICovCiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHotaW5kZXg6IDA7CiAgLyogMiAqLwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgLyogMyAqLwogIG92ZXJmbG93OiBoaWRkZW47CiAgLyogNCAqLwogIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTsKICAvKiA1ICovCiAgdG91Y2gtYWN0aW9uOiBwYW4teTsKfQovKiBJdGVtCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBQb3NpdGlvbiBpdGVtcyBhYm92ZSBlYWNoIG90aGVyCiAqIDIuIFRha2UgdGhlIGZ1bGwgd2lkdGgKICogMy4gQ2xpcCBjaGlsZCBlbGVtZW50cywgZS5nLiBmb3IgYHVrLWNvdmVyYAogKiA0LiBPcHRpbWl6ZSBhbmltYXRpb24KICovCi51ay1zbGlkZXNob3ctaXRlbXMgPiAqIHsKICAvKiAxICovCiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsKICBsZWZ0OiAwOwogIC8qIDIgKi8KICByaWdodDogMDsKICBib3R0b206IDA7CiAgLyogMyAqLwogIG92ZXJmbG93OiBoaWRkZW47CiAgLyogNCAqLwogIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm0sIG9wYWNpdHk7Cn0KLyoKICogSGlkZSBub3QgYWN0aXZlIGl0ZW1zCiAqLwoudWstc2xpZGVzaG93LWl0ZW1zID4gOm5vdCgudWstYWN0aXZlKSB7CiAgZGlzcGxheTogbm9uZTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBTbGlkZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFByZXZlbnQgdGFiIGhpZ2hsaWdodGluZyBvbiBpT1MuCiAqLwoudWstc2xpZGVyIHsKICAvKiAxICovCiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKfQovKiBDb250YWluZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIENsaXAgY2hpbGQgZWxlbWVudHMKICovCi51ay1zbGlkZXItY29udGFpbmVyIHsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci8qCiAqIFdpZGVuIGNvbnRhaW5lciB0byBwcmV2ZW50IGJveC1zaGFkb3dzIGZyb20gY2xpcHBpbmcsIGBsYXJnZS1ib3gtc2hhZG93YAogKi8KLnVrLXNsaWRlci1jb250YWluZXItb2Zmc2V0IHsKICBtYXJnaW46IC0xMXB4IC0yNXB4IC0zOXB4IC0yNXB4OwogIHBhZGRpbmc6IDExcHggMjVweCAzOXB4IDI1cHg7Cn0KLyogSXRlbXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIE9wdGltaXplIGFuaW1hdGlvbgogKiAyLiBDcmVhdGUgYSBjb250YWluaW5nIGJsb2NrLiBJbiBTYWZhcmkgaXQncyBuZWl0aGVyIGNyZWF0ZWQgYnkgYHRyYW5zZm9ybWAgbm9yIGB3aWxsLWNoYW5nZWAuCiAqIDMuIERpc2FibGUgaG9yaXpvbnRhbCBwYW5uaW5nIGdlc3R1cmVzCiAqLwoudWstc2xpZGVyLWl0ZW1zIHsKICAvKiAxICovCiAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAvKiAyICovCiAgcG9zaXRpb246IHJlbGF0aXZlOwogIC8qIDMgKi8KICB0b3VjaC1hY3Rpb246IHBhbi15Owp9Ci8qCiAqIDEuIFJlc2V0IGxpc3Qgc3R5bGUgd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIGdyaWQKICogMi4gUHJldmVudCBkaXNwbGF5aW5nIHRoZSBjYWxsb3V0IGluZm9ybWF0aW9uIG9uIGlPUy4KICovCi51ay1zbGlkZXItaXRlbXM6bm90KC51ay1ncmlkKSB7CiAgZGlzcGxheTogZmxleDsKICAvKiAxICovCiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7CiAgbGlzdC1zdHlsZTogbm9uZTsKICAvKiAyICovCiAgLXdlYmtpdC10b3VjaC1jYWxsb3V0OiBub25lOwp9Ci51ay1zbGlkZXItaXRlbXMudWstZ3JpZCB7CiAgZmxleC13cmFwOiBub3dyYXA7Cn0KLyogSXRlbQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gTGV0IGl0ZW1zIHRha2UgY29udGVudCBkaW1lbnNpb25zICgwIDAgYXV0bykKICogICAgYG1heC13aWR0aGAgbmVlZGVkIHRvIGtlZXAgaW1hZ2UgcmVzcG9uc2l2ZW5lc3MgYW5kIHByZXZlbnQgY29udGVudCBvdmVyZmxvdwogKiAzLiBDcmVhdGUgcG9zaXRpb24gY29udGV4dAogKi8KLnVrLXNsaWRlci1pdGVtcyA+ICogewogIC8qIDEgKi8KICBmbGV4OiBub25lOwogIG1heC13aWR0aDogMTAwJTsKICAvKiAzICovCiAgcG9zaXRpb246IHJlbGF0aXZlOwp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IFN0aWNreQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gQ3JlYXRlIHBvc2l0aW9uIGNvbnRleHQgc28gaXQncyB0IHRoZSBzYW1lIGxpa2Ugd2hlbiBmaXhlZC4KICogMi4gTW9yZSByb2J1c3QgaWYgcGFkZGluZyBhbmQgYm9yZGVyIGFyZSB1c2VkIGFuZCB0aGUgc3RpY2t5IGhlaWdodCBpcyB0cmFuc2l0aW9uZWQKICovCi51ay1zdGlja3kgewogIC8qIDEgKi8KICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgLyogMiAqLwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KLyoKICogMS4gRm9yY2UgbmV3IGxheWVyIHRvIHJlc29sdmUgZnJhbWUgcmF0ZSBpc3N1ZXMgb24gZGV2aWNlcyB3aXRoIGxvd2VyIGZyYW1lIHJhdGVzCiAqLwoudWstc3RpY2t5LWZpeGVkIHsKICB6LWluZGV4OiA5ODA7CiAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgLyogMSAqLwogIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuOwogIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjsKfQovKgogKiBGYXN0ZXIgYW5pbWF0aW9ucwogKi8KLnVrLXN0aWNreVtjbGFzcyo9J3VrLWFuaW1hdGlvbi0nXSB7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjJzOwp9Ci51ay1zdGlja3kudWstYW5pbWF0aW9uLXJldmVyc2UgewogIGFuaW1hdGlvbi1kdXJhdGlvbjogMC4yczsKfQovKgogKiBQbGFjZWhvbGRlcgogKiBNYWtlIGNvbnRlbnQgY2xpY2thYmxlIGZvciBzdGlja3kgY292ZXIgYW5kIHJldmVhbCBlZmZlY3RzCiAqLwoudWstc3RpY2t5LXBsYWNlaG9sZGVyIHsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBPZmYtY2FudmFzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBIaWRlIGJ5IGRlZmF1bHQKICogMi4gU2V0IHBvc2l0aW9uCiAqLwoudWstb2ZmY2FudmFzIHsKICAvKiAxICovCiAgZGlzcGxheTogbm9uZTsKICAvKiAyICovCiAgcG9zaXRpb246IGZpeGVkOwogIHRvcDogMDsKICBib3R0b206IDA7CiAgbGVmdDogMDsKICB6LWluZGV4OiAxMDAwOwp9Ci8qCiAqIEZsaXAgbW9kaWZpZXIKICovCi51ay1vZmZjYW52YXMtZmxpcCAudWstb2ZmY2FudmFzIHsKICByaWdodDogMDsKICBsZWZ0OiBhdXRvOwp9Ci8qIEJhcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gU2V0IHBvc2l0aW9uCiAqIDIuIFNpemUgYW5kIHN0eWxlCiAqIDMuIEFsbG93IHNjcm9sbGluZwogKi8KLnVrLW9mZmNhbnZhcy1iYXIgewogIC8qIDEgKi8KICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOwogIGJvdHRvbTogMDsKICBsZWZ0OiAtMjcwcHg7CiAgLyogMiAqLwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgd2lkdGg6IDI3MHB4OwogIHBhZGRpbmc6IDIwcHggMjBweDsKICBiYWNrZ3JvdW5kOiAjMjIyOwogIC8qIDMgKi8KICBvdmVyZmxvdy15OiBhdXRvOwogIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAudWstb2ZmY2FudmFzLWJhciB7CiAgICBsZWZ0OiAtMzUwcHg7CiAgICB3aWR0aDogMzUwcHg7CiAgICBwYWRkaW5nOiAzMHB4IDMwcHg7CiAgfQp9Ci8qIEZsaXAgbW9kaWZpZXIgKi8KLnVrLW9mZmNhbnZhcy1mbGlwIC51ay1vZmZjYW52YXMtYmFyIHsKICBsZWZ0OiBhdXRvOwogIHJpZ2h0OiAtMjcwcHg7Cn0KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgewogIC51ay1vZmZjYW52YXMtZmxpcCAudWstb2ZmY2FudmFzLWJhciB7CiAgICByaWdodDogLTM1MHB4OwogIH0KfQovKgogKiBPcGVuCiAqLwoudWstb3BlbiA+IC51ay1vZmZjYW52YXMtYmFyIHsKICBsZWZ0OiAwOwp9Ci51ay1vZmZjYW52YXMtZmxpcCAudWstb3BlbiA+IC51ay1vZmZjYW52YXMtYmFyIHsKICBsZWZ0OiBhdXRvOwogIHJpZ2h0OiAwOwp9Ci8qCiAqIFNsaWRlIEFuaW1hdGlvbiAoVXNlZCBpbiBzbGlkZSBhbmQgcHVzaCBtb2RlKQogKi8KLnVrLW9mZmNhbnZhcy1iYXItYW5pbWF0aW9uIHsKICB0cmFuc2l0aW9uOiBsZWZ0IDAuM3MgZWFzZS1vdXQ7Cn0KLnVrLW9mZmNhbnZhcy1mbGlwIC51ay1vZmZjYW52YXMtYmFyLWFuaW1hdGlvbiB7CiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogcmlnaHQ7Cn0KLyoKICogUmV2ZWFsIEFuaW1hdGlvbgogKiAxLiBTZXQgcG9zaXRpb24KICogMi4gQ2xpcCB0aGUgYmFyCiAqIDMuIEFuaW1hdGlvbgogKiA0LiBSZXNldCBwb3NpdGlvbgogKi8KLnVrLW9mZmNhbnZhcy1yZXZlYWwgewogIC8qIDEgKi8KICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOwogIGJvdHRvbTogMDsKICBsZWZ0OiAwOwogIC8qIDIgKi8KICB3aWR0aDogMDsKICBvdmVyZmxvdzogaGlkZGVuOwogIC8qIDMgKi8KICB0cmFuc2l0aW9uOiB3aWR0aCAwLjNzIGVhc2Utb3V0Owp9Ci51ay1vZmZjYW52YXMtcmV2ZWFsIC51ay1vZmZjYW52YXMtYmFyIHsKICAvKiA0ICovCiAgbGVmdDogMDsKfQoudWstb2ZmY2FudmFzLWZsaXAgLnVrLW9mZmNhbnZhcy1yZXZlYWwgLnVrLW9mZmNhbnZhcy1iYXIgewogIC8qIDQgKi8KICBsZWZ0OiBhdXRvOwogIHJpZ2h0OiAwOwp9Ci51ay1vcGVuID4gLnVrLW9mZmNhbnZhcy1yZXZlYWwgewogIHdpZHRoOiAyNzBweDsKfQovKiBUYWJsZXQgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7CiAgLnVrLW9wZW4gPiAudWstb2ZmY2FudmFzLXJldmVhbCB7CiAgICB3aWR0aDogMzUwcHg7CiAgfQp9Ci8qCiAqIEZsaXAgbW9kaWZpZXIKICovCi51ay1vZmZjYW52YXMtZmxpcCAudWstb2ZmY2FudmFzLXJldmVhbCB7CiAgcmlnaHQ6IDA7CiAgbGVmdDogYXV0bzsKfQovKiBDbG9zZQogKiBBZG9wdHMgYHVrLWNsb3NlYAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLW9mZmNhbnZhcy1jbG9zZSB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHotaW5kZXg6IDEwMDA7CiAgdG9wOiA1cHg7CiAgcmlnaHQ6IDVweDsKICBwYWRkaW5nOiA1cHg7Cn0KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgewogIC51ay1vZmZjYW52YXMtY2xvc2UgewogICAgdG9wOiAxMHB4OwogICAgcmlnaHQ6IDEwcHg7CiAgfQp9Ci8qCiAqIFJlbW92ZSBtYXJnaW4gZnJvbSBhZGphY2VudCBlbGVtZW50CiAqLwoudWstb2ZmY2FudmFzLWNsb3NlOmZpcnN0LWNoaWxkICsgKiB7CiAgbWFyZ2luLXRvcDogMDsKfQovKiBPdmVybGF5CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBPdmVybGF5IHRoZSB3aG9sZSBwYWdlLiBOZWVkZWQgZm9yIHRoZSBgOjpiZWZvcmVgCiAqIDEuIFVzaW5nIGAxMDB2d2Agc28gbm8gbW9kaWZpY2F0aW9uIGlzIG5lZWRlZCB3aGVuIG9mZi1jYW52YXMgaXMgZmxpcHBlZAogKiAyLiBBbGxvdyBmb3IgY2xvc2luZyB3aXRoIHN3aXBlIGdlc3R1cmUgb24gZGV2aWNlcyB3aXRoIHBvaW50ZXIgZXZlbnRzLgogKi8KLnVrLW9mZmNhbnZhcy1vdmVybGF5IHsKICAvKiAxICovCiAgd2lkdGg6IDEwMHZ3OwogIC8qIDIgKi8KICB0b3VjaC1hY3Rpb246IG5vbmU7Cn0KLyoKICogMS4gTWFzayB0aGUgd2hvbGUgcGFnZQogKiAyLiBGYWRlLWluIHRyYW5zaXRpb24KICovCi51ay1vZmZjYW52YXMtb3ZlcmxheTo6YmVmb3JlIHsKICAvKiAxICovCiAgY29udGVudDogIiI7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsKICBib3R0b206IDA7CiAgbGVmdDogMDsKICByaWdodDogMDsKICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgLyogMiAqLwogIG9wYWNpdHk6IDA7CiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBsaW5lYXI7Cn0KLnVrLW9mZmNhbnZhcy1vdmVybGF5LnVrLW9wZW46OmJlZm9yZSB7CiAgb3BhY2l0eTogMTsKfQovKiBQcmV2ZW50IHNjcm9sbGluZwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogUHJldmVudCBob3Jpem9udGFsIHNjcm9sbGJhciB3aGVuIHRoZSBjb250ZW50IGlzIHNsaWRlLW91dAogKiBIYXMgdG8gYmUgb24gdGhlIGBodG1sYCBlbGVtZW50IHRvbyB0byBtYWtlIGl0IHdvcmsgb24gdGhlIGBib2R5YAogKi8KLnVrLW9mZmNhbnZhcy1wYWdlLAoudWstb2ZmY2FudmFzLWNvbnRhaW5lciB7CiAgb3ZlcmZsb3cteDogaGlkZGVuOwp9Ci8qIENvbnRhaW5lcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogUHJlcGFyZSBzbGlkZS1vdXQgYW5pbWF0aW9uIChVc2VkIGluIHJldmVhbCBhbmQgcHVzaCBtb2RlKQogKiBVc2luZyBgcG9zaXRpb246IGxlZnRgIGluc3RlYWQgb2YgYHRyYW5zZm9ybWAgYmVjYXVzZSBwb3NpdGlvbiBgZml4ZWRgIGVsZW1lbnRzIGxpa2Ugc3RpY2t5IG5hdmJhcnMKICogbG9zZSB0aGVpciBmaXhlZCBzdGF0ZSBhbmQgYmVoYXZlcyBsaWtlIGBhYnNvbHV0ZWAgd2l0aGluIGEgdHJhbnNmb3JtZWQgY29udGFpbmVyCiAqIDEuIFByb3ZpZGUgYSBmaXhlZCB3aWR0aCBhbmQgcHJldmVudCBzaHJpbmtpbmcKICovCi51ay1vZmZjYW52YXMtY29udGFpbmVyIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgbGVmdDogMDsKICB0cmFuc2l0aW9uOiBsZWZ0IDAuM3MgZWFzZS1vdXQ7CiAgLyogMSAqLwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgd2lkdGg6IDEwMCU7Cn0KLyoKICogQWN0aXZhdGUgc2xpZGUtb3V0IGFuaW1hdGlvbgogKi8KOm5vdCgudWstb2ZmY2FudmFzLWZsaXApLnVrLW9mZmNhbnZhcy1jb250YWluZXItYW5pbWF0aW9uIHsKICBsZWZ0OiAyNzBweDsKfQoudWstb2ZmY2FudmFzLWZsaXAudWstb2ZmY2FudmFzLWNvbnRhaW5lci1hbmltYXRpb24gewogIGxlZnQ6IC0yNzBweDsKfQovKiBUYWJsZXQgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7CiAgOm5vdCgudWstb2ZmY2FudmFzLWZsaXApLnVrLW9mZmNhbnZhcy1jb250YWluZXItYW5pbWF0aW9uIHsKICAgIGxlZnQ6IDM1MHB4OwogIH0KICAudWstb2ZmY2FudmFzLWZsaXAudWstb2ZmY2FudmFzLWNvbnRhaW5lci1hbmltYXRpb24gewogICAgbGVmdDogLTM1MHB4OwogIH0KfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBTd2l0Y2hlcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogUmVzZXQgbGlzdAogKi8KLnVrLXN3aXRjaGVyIHsKICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKICBsaXN0LXN0eWxlOiBub25lOwp9Ci8qIEl0ZW1zCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBIaWRlIG5vdCBhY3RpdmUgaXRlbXMKICovCi51ay1zd2l0Y2hlciA+IDpub3QoLnVrLWFjdGl2ZSkgewogIGRpc3BsYXk6IG5vbmU7Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIHRoZSBsYXN0LWNoaWxkCiAqLwoudWstc3dpdGNoZXIgPiAqID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogTGVhZGVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstbGVhZGVyIHsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci8qCiAqIDEuIFBsYWNlIGVsZW1lbnQgaW4gdGV4dCBmbG93CiAqIDIuIE5ldmVyIGJyZWFrIGludG8gYSBuZXcgbGluZQogKiAzLiBHZXQgYSBzdHJpbmcgYmFjayB3aXRoIGFzIG1hbnkgcmVwZWF0aW5nIGNoYXJhY3RlcnMgdG8gZmlsbCB0aGUgY29udGFpbmVyCiAqIDQuIFByZXZlbnQgd3JhcHBpbmcuIE92ZXJmbG93aW5nIGNoYXJhY3RlcnMgd2lsbCBiZSBjbGlwcGVkIGJ5IHRoZSBjb250YWluZXIKICovCi51ay1sZWFkZXItZmlsbDo6YWZ0ZXIgewogIC8qIDEgKi8KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2luLWxlZnQ6IDE1cHg7CiAgLyogMiAqLwogIHdpZHRoOiAwOwogIC8qIDMgKi8KICBjb250ZW50OiBhdHRyKGRhdGEtZmlsbCk7CiAgLyogNCAqLwogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KLyoKICogSGlkZSBpZiBtZWRpYSBkb2VzIG5vdCBtYXRjaAogKi8KLnVrLWxlYWRlci1maWxsLnVrLWxlYWRlci1oaWRlOjphZnRlciB7CiAgZGlzcGxheTogbm9uZTsKfQovKgogKiBQYXNzIGZpbGwgY2hhcmFjdGVyIHRvIEpTCiAqLwo6cm9vdCB7CiAgLS11ay1sZWFkZXItZmlsbC1jb250ZW50OiAuOwp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IE5vdGlmaWNhdGlvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gU2V0IHBvc2l0aW9uCiAqIDIuIERpbWVuc2lvbnMKICovCi51ay1ub3RpZmljYXRpb24gewogIC8qIDEgKi8KICBwb3NpdGlvbjogZml4ZWQ7CiAgdG9wOiAxMHB4OwogIGxlZnQ6IDEwcHg7CiAgei1pbmRleDogMTA0MDsKICAvKiAyICovCiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB3aWR0aDogMzUwcHg7Cn0KLyogUG9zaXRpb24gbW9kaWZpZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1ub3RpZmljYXRpb24tdG9wLXJpZ2h0LAoudWstbm90aWZpY2F0aW9uLWJvdHRvbS1yaWdodCB7CiAgbGVmdDogYXV0bzsKICByaWdodDogMTBweDsKfQoudWstbm90aWZpY2F0aW9uLXRvcC1jZW50ZXIsCi51ay1ub3RpZmljYXRpb24tYm90dG9tLWNlbnRlciB7CiAgbGVmdDogNTAlOwogIG1hcmdpbi1sZWZ0OiAtMTc1cHg7Cn0KLnVrLW5vdGlmaWNhdGlvbi1ib3R0b20tbGVmdCwKLnVrLW5vdGlmaWNhdGlvbi1ib3R0b20tcmlnaHQsCi51ay1ub3RpZmljYXRpb24tYm90dG9tLWNlbnRlciB7CiAgdG9wOiBhdXRvOwogIGJvdHRvbTogMTBweDsKfQovKiBSZXNwb25zaXZlbmVzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBQaG9uZXMgcG9ydHJhaXQgYW5kIHNtYWxsZXIgKi8KQG1lZGlhIChtYXgtd2lkdGg6IDYzOXB4KSB7CiAgLnVrLW5vdGlmaWNhdGlvbiB7CiAgICBsZWZ0OiAxMHB4OwogICAgcmlnaHQ6IDEwcHg7CiAgICB3aWR0aDogYXV0bzsKICAgIG1hcmdpbjogMDsKICB9Cn0KLyogTWVzc2FnZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstbm90aWZpY2F0aW9uLW1lc3NhZ2UgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBwYWRkaW5nOiAxNXB4OwogIGJhY2tncm91bmQ6ICNmOGY4Zjg7CiAgY29sb3I6ICM2NjY7CiAgZm9udC1zaXplOiAxLjI1cmVtOwogIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgY3Vyc29yOiBwb2ludGVyOwp9CiogKyAudWstbm90aWZpY2F0aW9uLW1lc3NhZ2UgewogIG1hcmdpbi10b3A6IDEwcHg7Cn0KLyogQ2xvc2UKICogQWRvcHRzIGB1ay1jbG9zZWAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1ub3RpZmljYXRpb24tY2xvc2UgewogIGRpc3BsYXk6IG5vbmU7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMjBweDsKICByaWdodDogMTVweDsKfQoudWstbm90aWZpY2F0aW9uLW1lc3NhZ2U6aG92ZXIgLnVrLW5vdGlmaWNhdGlvbi1jbG9zZSB7CiAgZGlzcGxheTogYmxvY2s7Cn0KLyogU3R5bGUgbW9kaWZpZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBQcmltYXJ5CiAqLwoudWstbm90aWZpY2F0aW9uLW1lc3NhZ2UtcHJpbWFyeSB7CiAgY29sb3I6ICMxZTg3ZjA7Cn0KLyoKICogU3VjY2VzcwogKi8KLnVrLW5vdGlmaWNhdGlvbi1tZXNzYWdlLXN1Y2Nlc3MgewogIGNvbG9yOiAjMzJkMjk2Owp9Ci8qCiAqIFdhcm5pbmcKICovCi51ay1ub3RpZmljYXRpb24tbWVzc2FnZS13YXJuaW5nIHsKICBjb2xvcjogI2ZhYTA1YTsKfQovKgogKiBEYW5nZXIKICovCi51ay1ub3RpZmljYXRpb24tbWVzc2FnZS1kYW5nZXIgewogIGNvbG9yOiAjZjA1MDZlOwp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IFRvb2x0aXAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIEhpZGUgYnkgZGVmYXVsdAogKiAyLiBQb3NpdGlvbgogKiAzLiBSZW1vdmUgdG9vbHRpcCBmcm9tIGRvY3VtZW50IGZsb3cgdG8ga2VlcCB0aGUgVUlraXQgY29udGFpbmVyIGZyb20gY2hhbmdpbmcgaXRzIHNpemUgd2hlbiBpbmplY3RlZCBpbnRvIHRoZSBkb2N1bWVudCBpbml0aWFsbHkKICogNC4gRGltZW5zaW9ucwogKiA1LiBTdHlsZQogKi8KLnVrLXRvb2x0aXAgewogIC8qIDEgKi8KICBkaXNwbGF5OiBub25lOwogIC8qIDIgKi8KICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgei1pbmRleDogMTAzMDsKICAtLXVrLXBvc2l0aW9uLW9mZnNldDogMTBweDsKICAtLXVrLXBvc2l0aW9uLXZpZXdwb3J0LW9mZnNldDogMTA7CiAgLyogMyAqLwogIHRvcDogMDsKICAvKiA0ICovCiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICBtYXgtd2lkdGg6IDIwMHB4OwogIHBhZGRpbmc6IDNweCA2cHg7CiAgLyogNSAqLwogIGJhY2tncm91bmQ6ICM2NjY7CiAgYm9yZGVyLXJhZGl1czogMnB4OwogIGNvbG9yOiAjZmZmOwogIGZvbnQtc2l6ZTogMTJweDsKfQovKiBTaG93ICovCi51ay10b29sdGlwLnVrLWFjdGl2ZSB7CiAgZGlzcGxheTogYmxvY2s7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogU29ydGFibGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1zb3J0YWJsZSB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9Ci8qCiAqIFJlbW92ZSBtYXJnaW4gZnJvbSB0aGUgbGFzdC1jaGlsZAogKi8KLnVrLXNvcnRhYmxlID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KLyogRHJhZwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXNvcnRhYmxlLWRyYWcgewogIHBvc2l0aW9uOiBmaXhlZCAhaW1wb3J0YW50OwogIHotaW5kZXg6IDEwNTAgIWltcG9ydGFudDsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQovKiBQbGFjZWhvbGRlcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXNvcnRhYmxlLXBsYWNlaG9sZGVyIHsKICBvcGFjaXR5OiAwOwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Ci8qIEVtcHR5IG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstc29ydGFibGUtZW1wdHkgewogIG1pbi1oZWlnaHQ6IDUwcHg7Cn0KLyogSGFuZGxlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBIb3ZlciAqLwoudWstc29ydGFibGUtaGFuZGxlOmhvdmVyIHsKICBjdXJzb3I6IG1vdmU7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogQ291bnRkb3duCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBJdGVtCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBOdW1iZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIE1ha2UgbnVtYmVycyBhbGwgb2YgdGhlIHNhbWUgc2l6ZSB0byBwcmV2ZW50IGp1bXBpbmcuIE11c3QgYmUgc3VwcG9ydGVkIGJ5IHRoZSBmb250LgogKiAyLiBTdHlsZQogKi8KLnVrLWNvdW50ZG93bi1udW1iZXIgewogIC8qIDEgKi8KICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogIC8qIDIgKi8KICBmb250LXNpemU6IDJyZW07CiAgbGluZS1oZWlnaHQ6IDAuODsKfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAudWstY291bnRkb3duLW51bWJlciB7CiAgICBmb250LXNpemU6IDRyZW07CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstY291bnRkb3duLW51bWJlciB7CiAgICBmb250LXNpemU6IDZyZW07CiAgfQp9Ci8qIFNlcGFyYXRvcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWNvdW50ZG93bi1zZXBhcmF0b3IgewogIGZvbnQtc2l6ZTogMXJlbTsKICBsaW5lLWhlaWdodDogMS42Owp9Ci8qIFBob25lIGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgewogIC51ay1jb3VudGRvd24tc2VwYXJhdG9yIHsKICAgIGZvbnQtc2l6ZTogMnJlbTsKICB9Cn0KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogIC51ay1jb3VudGRvd24tc2VwYXJhdG9yIHsKICAgIGZvbnQtc2l6ZTogM3JlbTsKICB9Cn0KLyogTGFiZWwKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IEdyaWQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIEFsbG93IGNlbGxzIHRvIHdyYXAgaW50byB0aGUgbmV4dCBsaW5lCiAqIDIuIFJlc2V0IGxpc3QKICovCi51ay1ncmlkIHsKICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7CiAgLyogMSAqLwogIGZsZXgtd3JhcDogd3JhcCAhaW1wb3J0YW50OwogIC8qIDIgKi8KICBtYXJnaW46IDAgIWltcG9ydGFudDsKICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgbGlzdC1zdHlsZTogbm9uZSAhaW1wb3J0YW50Owp9Ci8qCiAqIEdyaWQgY2VsbAogKiBOb3RlOiBTcGFjZSBpcyBhbGxvY2F0ZWQgc29sZWx5IGJhc2VkIG9uIGNvbnRlbnQgZGltZW5zaW9ucywgYnV0IHNocmlua3M6IDAgMSBhdXRvCiAqIFJlc2V0IG1hcmdpbiBmb3IgZS5nLiBwYXJhZ3JhcGhzCiAqLwoudWstZ3JpZCA+ICogewogIG1hcmdpbjogMCAhaW1wb3J0YW50Owp9Ci8qCiAqIFJlbW92ZSBtYXJnaW4gZnJvbSB0aGUgbGFzdC1jaGlsZAogKi8KLnVrLWdyaWQgPiAqID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDsKfQovKiBHdXR0ZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIERlZmF1bHQKICovCi8qIEhvcml6b250YWwgKi8KLnVrLWdyaWQgewogIG1hcmdpbi1sZWZ0OiAtMzBweDsKfQoudWstZ3JpZCA+ICogewogIHBhZGRpbmctbGVmdDogMzBweDsKfQovKiBWZXJ0aWNhbCAqLwoudWstZ3JpZCArIC51ay1ncmlkLAoudWstZ3JpZCA+IC51ay1ncmlkLW1hcmdpbiwKKiArIC51ay1ncmlkLW1hcmdpbiB7CiAgbWFyZ2luLXRvcDogMzBweDsKfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC8qIEhvcml6b250YWwgKi8KICAudWstZ3JpZCB7CiAgICBtYXJnaW4tbGVmdDogLTQwcHg7CiAgfQogIC51ay1ncmlkID4gKiB7CiAgICBwYWRkaW5nLWxlZnQ6IDQwcHg7CiAgfQogIC8qIFZlcnRpY2FsICovCiAgLnVrLWdyaWQgKyAudWstZ3JpZCwKICAudWstZ3JpZCA+IC51ay1ncmlkLW1hcmdpbiwKICAqICsgLnVrLWdyaWQtbWFyZ2luIHsKICAgIG1hcmdpbi10b3A6IDQwcHg7CiAgfQp9Ci8qCiAqIFNtYWxsCiAqLwovKiBIb3Jpem9udGFsICovCi51ay1ncmlkLXNtYWxsLAoudWstZ3JpZC1jb2x1bW4tc21hbGwgewogIG1hcmdpbi1sZWZ0OiAtMTVweDsKfQoudWstZ3JpZC1zbWFsbCA+ICosCi51ay1ncmlkLWNvbHVtbi1zbWFsbCA+ICogewogIHBhZGRpbmctbGVmdDogMTVweDsKfQovKiBWZXJ0aWNhbCAqLwoudWstZ3JpZCArIC51ay1ncmlkLXNtYWxsLAoudWstZ3JpZCArIC51ay1ncmlkLXJvdy1zbWFsbCwKLnVrLWdyaWQtc21hbGwgPiAudWstZ3JpZC1tYXJnaW4sCi51ay1ncmlkLXJvdy1zbWFsbCA+IC51ay1ncmlkLW1hcmdpbiwKKiArIC51ay1ncmlkLW1hcmdpbi1zbWFsbCB7CiAgbWFyZ2luLXRvcDogMTVweDsKfQovKgogKiBNZWRpdW0KICovCi8qIEhvcml6b250YWwgKi8KLnVrLWdyaWQtbWVkaXVtLAoudWstZ3JpZC1jb2x1bW4tbWVkaXVtIHsKICBtYXJnaW4tbGVmdDogLTMwcHg7Cn0KLnVrLWdyaWQtbWVkaXVtID4gKiwKLnVrLWdyaWQtY29sdW1uLW1lZGl1bSA+ICogewogIHBhZGRpbmctbGVmdDogMzBweDsKfQovKiBWZXJ0aWNhbCAqLwoudWstZ3JpZCArIC51ay1ncmlkLW1lZGl1bSwKLnVrLWdyaWQgKyAudWstZ3JpZC1yb3ctbWVkaXVtLAoudWstZ3JpZC1tZWRpdW0gPiAudWstZ3JpZC1tYXJnaW4sCi51ay1ncmlkLXJvdy1tZWRpdW0gPiAudWstZ3JpZC1tYXJnaW4sCiogKyAudWstZ3JpZC1tYXJnaW4tbWVkaXVtIHsKICBtYXJnaW4tdG9wOiAzMHB4Owp9Ci8qCiAqIExhcmdlCiAqLwovKiBIb3Jpem9udGFsICovCi51ay1ncmlkLWxhcmdlLAoudWstZ3JpZC1jb2x1bW4tbGFyZ2UgewogIG1hcmdpbi1sZWZ0OiAtNDBweDsKfQoudWstZ3JpZC1sYXJnZSA+ICosCi51ay1ncmlkLWNvbHVtbi1sYXJnZSA+ICogewogIHBhZGRpbmctbGVmdDogNDBweDsKfQovKiBWZXJ0aWNhbCAqLwoudWstZ3JpZCArIC51ay1ncmlkLWxhcmdlLAoudWstZ3JpZCArIC51ay1ncmlkLXJvdy1sYXJnZSwKLnVrLWdyaWQtbGFyZ2UgPiAudWstZ3JpZC1tYXJnaW4sCi51ay1ncmlkLXJvdy1sYXJnZSA+IC51ay1ncmlkLW1hcmdpbiwKKiArIC51ay1ncmlkLW1hcmdpbi1sYXJnZSB7CiAgbWFyZ2luLXRvcDogNDBweDsKfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC8qIEhvcml6b250YWwgKi8KICAudWstZ3JpZC1sYXJnZSwKICAudWstZ3JpZC1jb2x1bW4tbGFyZ2UgewogICAgbWFyZ2luLWxlZnQ6IC03MHB4OwogIH0KICAudWstZ3JpZC1sYXJnZSA+ICosCiAgLnVrLWdyaWQtY29sdW1uLWxhcmdlID4gKiB7CiAgICBwYWRkaW5nLWxlZnQ6IDcwcHg7CiAgfQogIC8qIFZlcnRpY2FsICovCiAgLnVrLWdyaWQgKyAudWstZ3JpZC1sYXJnZSwKICAudWstZ3JpZCArIC51ay1ncmlkLXJvdy1sYXJnZSwKICAudWstZ3JpZC1sYXJnZSA+IC51ay1ncmlkLW1hcmdpbiwKICAudWstZ3JpZC1yb3ctbGFyZ2UgPiAudWstZ3JpZC1tYXJnaW4sCiAgKiArIC51ay1ncmlkLW1hcmdpbi1sYXJnZSB7CiAgICBtYXJnaW4tdG9wOiA3MHB4OwogIH0KfQovKgogKiBDb2xsYXBzZQogKi8KLyogSG9yaXpvbnRhbCAqLwoudWstZ3JpZC1jb2xsYXBzZSwKLnVrLWdyaWQtY29sdW1uLWNvbGxhcHNlIHsKICBtYXJnaW4tbGVmdDogMDsKfQoudWstZ3JpZC1jb2xsYXBzZSA+ICosCi51ay1ncmlkLWNvbHVtbi1jb2xsYXBzZSA+ICogewogIHBhZGRpbmctbGVmdDogMDsKfQovKiBWZXJ0aWNhbCAqLwoudWstZ3JpZCArIC51ay1ncmlkLWNvbGxhcHNlLAoudWstZ3JpZCArIC51ay1ncmlkLXJvdy1jb2xsYXBzZSwKLnVrLWdyaWQtY29sbGFwc2UgPiAudWstZ3JpZC1tYXJnaW4sCi51ay1ncmlkLXJvdy1jb2xsYXBzZSA+IC51ay1ncmlkLW1hcmdpbiB7CiAgbWFyZ2luLXRvcDogMDsKfQovKiBEaXZpZGVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstZ3JpZC1kaXZpZGVyID4gKiB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9Ci51ay1ncmlkLWRpdmlkZXIgPiA6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUgewogIGNvbnRlbnQ6ICIiOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDA7CiAgYm90dG9tOiAwOwogIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2U1ZTVlNTsKfQovKiBWZXJ0aWNhbCAqLwoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSB7CiAgY29udGVudDogIiI7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGxlZnQ6IDA7CiAgcmlnaHQ6IDA7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNWU1ZTU7Cn0KLyoKICogRGVmYXVsdAogKi8KLyogSG9yaXpvbnRhbCAqLwoudWstZ3JpZC1kaXZpZGVyIHsKICBtYXJnaW4tbGVmdDogLTYwcHg7Cn0KLnVrLWdyaWQtZGl2aWRlciA+ICogewogIHBhZGRpbmctbGVmdDogNjBweDsKfQoudWstZ3JpZC1kaXZpZGVyID4gOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlIHsKICBsZWZ0OiAzMHB4Owp9Ci8qIFZlcnRpY2FsICovCi51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbiB7CiAgbWFyZ2luLXRvcDogNjBweDsKfQoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSB7CiAgdG9wOiAtMzBweDsKICBsZWZ0OiA2MHB4Owp9Ci8qIERlc2t0b3AgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CiAgLyogSG9yaXpvbnRhbCAqLwogIC51ay1ncmlkLWRpdmlkZXIgewogICAgbWFyZ2luLWxlZnQ6IC04MHB4OwogIH0KICAudWstZ3JpZC1kaXZpZGVyID4gKiB7CiAgICBwYWRkaW5nLWxlZnQ6IDgwcHg7CiAgfQogIC51ay1ncmlkLWRpdmlkZXIgPiA6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUgewogICAgbGVmdDogNDBweDsKICB9CiAgLyogVmVydGljYWwgKi8KICAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW4gewogICAgbWFyZ2luLXRvcDogODBweDsKICB9CiAgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXN0YWNrID4gLnVrLWdyaWQtbWFyZ2luOjpiZWZvcmUgewogICAgdG9wOiAtNDBweDsKICAgIGxlZnQ6IDgwcHg7CiAgfQp9Ci8qCiAqIFNtYWxsCiAqLwovKiBIb3Jpem9udGFsICovCi51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zbWFsbCwKLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1zbWFsbCB7CiAgbWFyZ2luLWxlZnQ6IC0zMHB4Owp9Ci51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zbWFsbCA+ICosCi51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tc21hbGwgPiAqIHsKICBwYWRkaW5nLWxlZnQ6IDMwcHg7Cn0KLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXNtYWxsID4gOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLXNtYWxsID4gOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlIHsKICBsZWZ0OiAxNXB4Owp9Ci8qIFZlcnRpY2FsICovCi51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zbWFsbC51ay1ncmlkLXN0YWNrID4gLnVrLWdyaWQtbWFyZ2luLAoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtcm93LXNtYWxsLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW4gewogIG1hcmdpbi10b3A6IDMwcHg7Cn0KLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXNtYWxsLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSB7CiAgdG9wOiAtMTVweDsKICBsZWZ0OiAzMHB4Owp9Ci51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1yb3ctc21hbGwudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbjo6YmVmb3JlIHsKICB0b3A6IC0xNXB4Owp9Ci51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tc21hbGwudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbjo6YmVmb3JlIHsKICBsZWZ0OiAzMHB4Owp9Ci8qCiAqIE1lZGl1bQogKi8KLyogSG9yaXpvbnRhbCAqLwoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbWVkaXVtLAoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLW1lZGl1bSB7CiAgbWFyZ2luLWxlZnQ6IC02MHB4Owp9Ci51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1tZWRpdW0gPiAqLAoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLW1lZGl1bSA+ICogewogIHBhZGRpbmctbGVmdDogNjBweDsKfQoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbWVkaXVtID4gOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLW1lZGl1bSA+IDpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSB7CiAgbGVmdDogMzBweDsKfQovKiBWZXJ0aWNhbCAqLwoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbWVkaXVtLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW4sCi51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1yb3ctbWVkaXVtLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW4gewogIG1hcmdpbi10b3A6IDYwcHg7Cn0KLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLW1lZGl1bS51ay1ncmlkLXN0YWNrID4gLnVrLWdyaWQtbWFyZ2luOjpiZWZvcmUgewogIHRvcDogLTMwcHg7CiAgbGVmdDogNjBweDsKfQoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtcm93LW1lZGl1bS51ay1ncmlkLXN0YWNrID4gLnVrLWdyaWQtbWFyZ2luOjpiZWZvcmUgewogIHRvcDogLTMwcHg7Cn0KLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1tZWRpdW0udWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbjo6YmVmb3JlIHsKICBsZWZ0OiA2MHB4Owp9Ci8qCiAqIExhcmdlCiAqLwovKiBIb3Jpem9udGFsICovCi51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZSwKLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1sYXJnZSB7CiAgbWFyZ2luLWxlZnQ6IC04MHB4Owp9Ci51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZSA+ICosCi51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tbGFyZ2UgPiAqIHsKICBwYWRkaW5nLWxlZnQ6IDgwcHg7Cn0KLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWxhcmdlID4gOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLWxhcmdlID4gOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlIHsKICBsZWZ0OiA0MHB4Owp9Ci8qIFZlcnRpY2FsICovCi51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZS51ay1ncmlkLXN0YWNrID4gLnVrLWdyaWQtbWFyZ2luLAoudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtcm93LWxhcmdlLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW4gewogIG1hcmdpbi10b3A6IDgwcHg7Cn0KLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWxhcmdlLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSB7CiAgdG9wOiAtNDBweDsKICBsZWZ0OiA4MHB4Owp9Ci51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1yb3ctbGFyZ2UudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbjo6YmVmb3JlIHsKICB0b3A6IC00MHB4Owp9Ci51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tbGFyZ2UudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbjo6YmVmb3JlIHsKICBsZWZ0OiA4MHB4Owp9Ci8qIERlc2t0b3AgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CiAgLyogSG9yaXpvbnRhbCAqLwogIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZSwKICAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLWxhcmdlIHsKICAgIG1hcmdpbi1sZWZ0OiAtMTQwcHg7CiAgfQogIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZSA+ICosCiAgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1sYXJnZSA+ICogewogICAgcGFkZGluZy1sZWZ0OiAxNDBweDsKICB9CiAgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWxhcmdlID4gOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAogIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tbGFyZ2UgPiA6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUgewogICAgbGVmdDogNzBweDsKICB9CiAgLyogVmVydGljYWwgKi8KICAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbGFyZ2UudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbiwKICAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtcm93LWxhcmdlLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW4gewogICAgbWFyZ2luLXRvcDogMTQwcHg7CiAgfQogIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZS51ay1ncmlkLXN0YWNrID4gLnVrLWdyaWQtbWFyZ2luOjpiZWZvcmUgewogICAgdG9wOiAtNzBweDsKICAgIGxlZnQ6IDE0MHB4OwogIH0KICAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtcm93LWxhcmdlLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSB7CiAgICB0b3A6IC03MHB4OwogIH0KICAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLWxhcmdlLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSB7CiAgICBsZWZ0OiAxNDBweDsKICB9Cn0KLyogTWF0Y2ggY2hpbGQgb2YgYSBncmlkIGNlbGwKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIEJlaGF2ZSBsaWtlIGEgYmxvY2sgZWxlbWVudAogKiAxLiBXcmFwIGludG8gdGhlIG5leHQgbGluZQogKiAyLiBUYWtlIHRoZSBmdWxsIHdpZHRoLCBhdCBsZWFzdCAxMDAlLiBPbmx5IGlmIG5vIGNsYXNzIGZyb20gdGhlIFdpZHRoIGNvbXBvbmVudCBpcyBzZXQuCiAqIDMuIEV4cGFuZCB3aWR0aCBldmVuIGlmIGxhcmdlciB0aGFuIDEwMCUsIGUuZy4gYmVjYXVzZSBvZiBuZWdhdGl2ZSBtYXJnaW4gKE5lZWRlZCBmb3IgbmVzdGVkIGdyaWRzKQogKi8KLnVrLWdyaWQtbWF0Y2ggPiAqLAoudWstZ3JpZC1pdGVtLW1hdGNoIHsKICBkaXNwbGF5OiBmbGV4OwogIC8qIDEgKi8KICBmbGV4LXdyYXA6IHdyYXA7Cn0KLnVrLWdyaWQtbWF0Y2ggPiAqID4gOm5vdChbY2xhc3MqPSd1ay13aWR0aCddKSwKLnVrLWdyaWQtaXRlbS1tYXRjaCA+IDpub3QoW2NsYXNzKj0ndWstd2lkdGgnXSkgewogIC8qIDIgKi8KICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIHdpZHRoOiAxMDAlOwogIC8qIDMgKi8KICBmbGV4OiBhdXRvOwp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IE5hdgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogUmVzZXQKICovCi51ay1uYXYsCi51ay1uYXYgdWwgewogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwogIGxpc3Qtc3R5bGU6IG5vbmUgIWltcG9ydGFudDsKfQovKgoqIDEuIENlbnRlciBjb250ZW50IHZlcnRpY2FsbHksIGUuZy4gYW4gaWNvbgoqIDIuIEltaXRhdGUgd2hpdGUgc3BhY2UgZ2FwIHdoZW4gdXNpbmcgZmxleGJveAoqIDMuIFJlc2V0IGxpbmsKICovCi51ay1uYXYgbGkgPiBhIHsKICAvKiAxICovCiAgZGlzcGxheTogZmxleDsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIC8qIDIgKi8KICBjb2x1bW4tZ2FwOiAwLjI1ZW07CiAgLyogMyovCiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci8qCiAqIEl0ZW1zCiAqIE11c3QgdGFyZ2V0IGBhYCBlbGVtZW50cyB0byBleGNsdWRlIG90aGVyIGVsZW1lbnRzIChlLmcuIGxpc3RzKQogKi8KLnVrLW5hdiA+IGxpID4gYSB7CiAgcGFkZGluZzogNXB4IDA7Cn0KLyogU3VibGlzdHMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIExldmVsIDIKICogYHVsYCBuZWVkZWQgZm9yIGhpZ2hlciBzcGVjaWZpY2l0eSB0byBvdmVycmlkZSBwYWRkaW5nCiAqLwp1bC51ay1uYXYtc3ViIHsKICBwYWRkaW5nOiA1cHggMCA1cHggMTVweDsKfQovKgogKiBMZXZlbCAzIGFuZCBkZWVwZXIKICovCi51ay1uYXYtc3ViIHVsIHsKICBwYWRkaW5nLWxlZnQ6IDE1cHg7Cn0KLyoKICogSXRlbXMKICovCi51ay1uYXYtc3ViIGEgewogIHBhZGRpbmc6IDJweCAwOwp9Ci8qIFBhcmVudCBpY29uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstbmF2LXBhcmVudC1pY29uIHsKICBtYXJnaW4tbGVmdDogYXV0bzsKfQoudWstbmF2ID4gbGkgPiBhW2FyaWEtZXhwYW5kZWQ9InRydWUiXSAudWstbmF2LXBhcmVudC1pY29uIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOwp9Ci8qIEhlYWRlcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLW5hdi1oZWFkZXIgewogIHBhZGRpbmc6IDVweCAwOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKfQoudWstbmF2LWhlYWRlcjpub3QoOmZpcnN0LWNoaWxkKSB7CiAgbWFyZ2luLXRvcDogMjBweDsKfQovKiBEaXZpZGVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstbmF2IC51ay1uYXYtZGl2aWRlciB7CiAgbWFyZ2luOiA1cHggMDsKfQovKiBEZWZhdWx0IG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstbmF2LWRlZmF1bHQgewogIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgbGluZS1oZWlnaHQ6IDEuNTsKfQovKgogKiBJdGVtcwogKi8KLnVrLW5hdi1kZWZhdWx0ID4gbGkgPiBhIHsKICBjb2xvcjogIzk5OTsKfQovKiBIb3ZlciAqLwoudWstbmF2LWRlZmF1bHQgPiBsaSA+IGE6aG92ZXIgewogIGNvbG9yOiAjNjY2Owp9Ci8qIEFjdGl2ZSAqLwoudWstbmF2LWRlZmF1bHQgPiBsaS51ay1hY3RpdmUgPiBhIHsKICBjb2xvcjogIzMzMzsKfQovKgogKiBTdWJ0aXRsZQogKi8KLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3VidGl0bGUgewogIGZvbnQtc2l6ZTogMTJweDsKfQovKgogKiBIZWFkZXIKICovCi51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciB7CiAgY29sb3I6ICMzMzM7Cn0KLyoKICogRGl2aWRlcgogKi8KLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciB7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNWU1ZTU7Cn0KLyoKICogU3VibGlzdHMKICovCi51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiB7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKICBsaW5lLWhlaWdodDogMS41Owp9Ci51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhIHsKICBjb2xvcjogIzk5OTsKfQoudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYTpob3ZlciB7CiAgY29sb3I6ICM2NjY7Cn0KLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEgewogIGNvbG9yOiAjMzMzOwp9Ci8qIFByaW1hcnkgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1uYXYtcHJpbWFyeSB7CiAgZm9udC1zaXplOiAxLjVyZW07CiAgbGluZS1oZWlnaHQ6IDEuNTsKfQovKgogKiBJdGVtcwogKi8KLnVrLW5hdi1wcmltYXJ5ID4gbGkgPiBhIHsKICBjb2xvcjogIzk5OTsKfQovKiBIb3ZlciAqLwoudWstbmF2LXByaW1hcnkgPiBsaSA+IGE6aG92ZXIgewogIGNvbG9yOiAjNjY2Owp9Ci8qIEFjdGl2ZSAqLwoudWstbmF2LXByaW1hcnkgPiBsaS51ay1hY3RpdmUgPiBhIHsKICBjb2xvcjogIzMzMzsKfQovKgogKiBTdWJ0aXRsZQogKi8KLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3VidGl0bGUgewogIGZvbnQtc2l6ZTogMS4yNXJlbTsKfQovKgogKiBIZWFkZXIKICovCi51ay1uYXYtcHJpbWFyeSAudWstbmF2LWhlYWRlciB7CiAgY29sb3I6ICMzMzM7Cn0KLyoKICogRGl2aWRlcgogKi8KLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlciB7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNWU1ZTU7Cn0KLyoKICogU3VibGlzdHMKICovCi51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiB7CiAgZm9udC1zaXplOiAxLjI1cmVtOwogIGxpbmUtaGVpZ2h0OiAxLjU7Cn0KLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGEgewogIGNvbG9yOiAjOTk5Owp9Ci51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVyIHsKICBjb2xvcjogIzY2NjsKfQoudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSB7CiAgY29sb3I6ICMzMzM7Cn0KLyogU2Vjb25kYXJ5IG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstbmF2LXNlY29uZGFyeSB7CiAgZm9udC1zaXplOiAxNnB4OwogIGxpbmUtaGVpZ2h0OiAxLjU7Cn0KLnVrLW5hdi1zZWNvbmRhcnkgPiA6bm90KC51ay1uYXYtZGl2aWRlcikgKyA6bm90KC51ay1uYXYtaGVhZGVyLCAudWstbmF2LWRpdmlkZXIpIHsKICBtYXJnaW4tdG9wOiAwOwp9Ci8qCiAqIEl0ZW1zCiAqLwoudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYSB7CiAgY29sb3I6ICMzMzM7CiAgcGFkZGluZzogMTBweCAxMHB4Owp9Ci8qIEhvdmVyICovCi51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhOmhvdmVyIHsKICBjb2xvcjogIzMzMzsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOGY4Owp9Ci8qIEFjdGl2ZSAqLwoudWstbmF2LXNlY29uZGFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEgewogIGNvbG9yOiAjMzMzOwogIGJhY2tncm91bmQtY29sb3I6ICNmOGY4Zjg7Cn0KLyoKICogU3VidGl0bGUKICovCi51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3VidGl0bGUgewogIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgY29sb3I6ICM5OTk7Cn0KLyogSG92ZXIgKi8KLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGE6aG92ZXIgLnVrLW5hdi1zdWJ0aXRsZSB7CiAgY29sb3I6ICM2NjY7Cn0KLyogQWN0aXZlICovCi51ay1uYXYtc2Vjb25kYXJ5ID4gbGkudWstYWN0aXZlID4gYSAudWstbmF2LXN1YnRpdGxlIHsKICBjb2xvcjogIzMzMzsKfQovKgogKiBIZWFkZXIKICovCi51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtaGVhZGVyIHsKICBjb2xvcjogIzMzMzsKfQovKgogKiBEaXZpZGVyCiAqLwoudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWRpdmlkZXIgewogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1Owp9Ci8qCiAqIFN1Ymxpc3RzCiAqLwoudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiB7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKICBsaW5lLWhlaWdodDogMS41Owp9Ci51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGEgewogIGNvbG9yOiAjOTk5Owp9Ci51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIgewogIGNvbG9yOiAjNjY2Owp9Ci51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEgewogIGNvbG9yOiAjMzMzOwp9Ci8qIEFsaWdubWVudCBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gQ2VudGVyIGhlYWRlcgogKiAyLiBDZW50ZXIgaXRlbXMKICovCi8qIDEgKi8KLnVrLW5hdi1jZW50ZXIgewogIHRleHQtYWxpZ246IGNlbnRlcjsKfQovKiAyICovCi51ay1uYXYtY2VudGVyIGxpID4gYSB7CiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Cn0KLyogU3VibGlzdHMgKi8KLnVrLW5hdi1jZW50ZXIgLnVrLW5hdi1zdWIsCi51ay1uYXYtY2VudGVyIC51ay1uYXYtc3ViIHVsIHsKICBwYWRkaW5nLWxlZnQ6IDA7Cn0KLyogUGFyZW50IGljb24gICovCi51ay1uYXYtY2VudGVyIC51ay1uYXYtcGFyZW50LWljb24gewogIG1hcmdpbi1sZWZ0OiA0cHg7Cn0KLyogU3R5bGUgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIERpdmlkZXIKICogTmFtaW5nIGlzIGluIHBsdXJhbCB0byBwcmV2ZW50IGNvbmZsaWN0cyB3aXRoIGRpdmlkZXIgc3ViIG9iamVjdC4KICovCi51ay1uYXYudWstbmF2LWRpdmlkZXIgPiA6bm90KC51ay1uYXYtZGl2aWRlcikgKyA6bm90KC51ay1uYXYtaGVhZGVyLCAudWstbmF2LWRpdmlkZXIpIHsKICBtYXJnaW4tdG9wOiA1cHg7CiAgcGFkZGluZy10b3A6IDVweDsKICBib3JkZXItdG9wOiAxcHggc29saWQgI2U1ZTVlNTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBOYXZiYXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIENyZWF0ZSBwb3NpdGlvbiBjb250ZXh0IHRvIGNlbnRlciBuYXZiYXIgZ3JvdXAKICovCi51ay1uYXZiYXIgewogIGRpc3BsYXk6IGZsZXg7CiAgLyogMSAqLwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQovKiBDb250YWluZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1uYXZiYXItY29udGFpbmVyOm5vdCgudWstbmF2YmFyLXRyYW5zcGFyZW50KSB7CiAgYmFja2dyb3VuZDogI2Y4ZjhmODsKfQovKiBHcm91cHMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIEFsaWduIG5hdnMgYW5kIGl0ZW1zIHZlcnRpY2FsbHkgaWYgdGhleSBoYXZlIGEgZGlmZmVyZW50IGhlaWdodAogKi8KLnVrLW5hdmJhci1sZWZ0LAoudWstbmF2YmFyLXJpZ2h0LApbY2xhc3MqPSd1ay1uYXZiYXItY2VudGVyJ10gewogIGRpc3BsYXk6IGZsZXg7CiAgZ2FwOiAzMHB4OwogIC8qIDEgKi8KICBhbGlnbi1pdGVtczogY2VudGVyOwp9Ci8qCiAqIEhvcml6b250YWwgYWxpZ25tZW50CiAqIDEuIENyZWF0ZSBwb3NpdGlvbiBjb250ZXh0IGZvciBjZW50ZXJlZCBuYXZiYXIgd2l0aCBzdWIgZ3JvdXBzIChsZWZ0L3JpZ2h0KQogKiAyLiBGaXggdGV4dCB3cmFwcGluZyBpZiBjb250ZW50IGlzIGxhcmdlciB0aGFuIDUwJSBvZiB0aGUgY29udGFpbmVyLgogKiAzLiBOZWVkZWQgZm9yIGRyb3Bkb3ducyBiZWNhdXNlIGEgbmV3IHBvc2l0aW9uIGNvbnRleHQgaXMgY3JlYXRlZAogKiAgICBgei1pbmRleGAgbXVzdCBiZSBzbWFsbGVyIHRoYW4gb2ZmLWNhbnZhcwogKiA0LiBBbGlnbiBzdWIgZ3JvdXBzIGZvciBjZW50ZXJlZCBuYXZiYXIKICovCi51ay1uYXZiYXItcmlnaHQgewogIG1hcmdpbi1sZWZ0OiBhdXRvOwp9Ci51ay1uYXZiYXItY2VudGVyOm9ubHktY2hpbGQgewogIG1hcmdpbi1sZWZ0OiBhdXRvOwogIG1hcmdpbi1yaWdodDogYXV0bzsKICAvKiAxICovCiAgcG9zaXRpb246IHJlbGF0aXZlOwp9Ci51ay1uYXZiYXItY2VudGVyOm5vdCg6b25seS1jaGlsZCkgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDUwJTsKICBsZWZ0OiA1MCU7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgLyogMiAqLwogIHdpZHRoOiBtYXgtY29udGVudDsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIC8qIDMgKi8KICB6LWluZGV4OiA5OTA7Cn0KLyogNCAqLwoudWstbmF2YmFyLWNlbnRlci1sZWZ0LAoudWstbmF2YmFyLWNlbnRlci1yaWdodCB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsKfQoudWstbmF2YmFyLWNlbnRlci1sZWZ0IHsKICByaWdodDogY2FsYygxMDAlICsgMzBweCk7Cn0KLnVrLW5hdmJhci1jZW50ZXItcmlnaHQgewogIGxlZnQ6IGNhbGMoMTAwJSArIDMwcHgpOwp9CltjbGFzcyo9J3VrLW5hdmJhci1jZW50ZXItJ10gewogIHdpZHRoOiBtYXgtY29udGVudDsKICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9Ci8qIE5hdgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gUmVzZXQgbGlzdAogKi8KLnVrLW5hdmJhci1uYXYgewogIGRpc3BsYXk6IGZsZXg7CiAgZ2FwOiAzMHB4OwogIC8qIDEgKi8KICBtYXJnaW46IDA7CiAgcGFkZGluZzogMDsKICBsaXN0LXN0eWxlOiBub25lOwp9Ci8qCiAqIEFsbG93IGl0ZW1zIHRvIHdyYXAgaW50byB0aGUgbmV4dCBsaW5lCiAqIE9ubHkgbm90IGBhYnNvbHV0ZWAgcG9zaXRpb25lZCBncm91cHMKICovCi51ay1uYXZiYXItbGVmdCwKLnVrLW5hdmJhci1yaWdodCwKLnVrLW5hdmJhci1jZW50ZXI6b25seS1jaGlsZCB7CiAgZmxleC13cmFwOiB3cmFwOwp9Ci8qCiAqIEl0ZW1zCiAqIDEuIENlbnRlciBjb250ZW50IHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseQogKiAyLiBJbWl0YXRlIHdoaXRlIHNwYWNlIGdhcCB3aGVuIHVzaW5nIGZsZXhib3gKICogMy4gRGltZW5zaW9ucwogKiA0LiBTdHlsZQogKiA1LiBSZXF1aXJlZCBmb3IgYGFgCiAqLwoudWstbmF2YmFyLW5hdiA+IGxpID4gYSwKLnVrLW5hdmJhci1pdGVtLAoudWstbmF2YmFyLXRvZ2dsZSB7CiAgLyogMSAqLwogIGRpc3BsYXk6IGZsZXg7CiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAvKiAyICovCiAgY29sdW1uLWdhcDogMC4yNWVtOwogIC8qIDMgKi8KICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIG1pbi1oZWlnaHQ6IDgwcHg7CiAgLyogNCAqLwogIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBBcmlhbCwgIk5vdG8gU2FucyIsIHNhbnMtc2VyaWYsICJBcHBsZSBDb2xvciBFbW9qaSIsICJTZWdvZSBVSSBFbW9qaSIsICJTZWdvZSBVSSBTeW1ib2wiLCAiTm90byBDb2xvciBFbW9qaSI7CiAgLyogNSAqLwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQovKgogKiBOYXYgaXRlbXMKICovCi51ay1uYXZiYXItbmF2ID4gbGkgPiBhIHsKICBwYWRkaW5nOiAwIDA7CiAgY29sb3I6ICM5OTk7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICB0cmFuc2l0aW9uOiAwLjFzIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb24tcHJvcGVydHk6IGNvbG9yLCBiYWNrZ3JvdW5kLWNvbG9yOwp9Ci8qCiAqIEhvdmVyCiAqIEFwcGx5IGhvdmVyIHN0eWxlIGFsc28gaWYgZHJvcGRvd24gaXMgb3BlbmVkCiAqLwoudWstbmF2YmFyLW5hdiA+IGxpOmhvdmVyID4gYSwKLnVrLW5hdmJhci1uYXYgPiBsaSA+IGFbYXJpYS1leHBhbmRlZD0idHJ1ZSJdIHsKICBjb2xvcjogIzY2NjsKfQovKiBPbkNsaWNrICovCi51ay1uYXZiYXItbmF2ID4gbGkgPiBhOmFjdGl2ZSB7CiAgY29sb3I6ICMzMzM7Cn0KLyogQWN0aXZlICovCi51ay1uYXZiYXItbmF2ID4gbGkudWstYWN0aXZlID4gYSB7CiAgY29sb3I6ICMzMzM7Cn0KLyogUGFyZW50IGljb24gbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1uYXZiYXItcGFyZW50LWljb24gewogIG1hcmdpbi1sZWZ0OiA0cHg7Cn0KLnVrLW5hdmJhci1uYXYgPiBsaSA+IGFbYXJpYS1leHBhbmRlZD0idHJ1ZSJdIC51ay1uYXZiYXItcGFyZW50LWljb24gewogIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7Cn0KLyogSXRlbQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLW5hdmJhci1pdGVtIHsKICBwYWRkaW5nOiAwIDA7CiAgY29sb3I6ICM2NjY7Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIHRoZSBsYXN0LWNoaWxkCiAqLwoudWstbmF2YmFyLWl0ZW0gPiA6bGFzdC1jaGlsZCB7CiAgbWFyZ2luLWJvdHRvbTogMDsKfQovKiBUb2dnbGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1uYXZiYXItdG9nZ2xlIHsKICBwYWRkaW5nOiAwIDA7CiAgY29sb3I6ICM5OTk7Cn0KLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsCi51ay1uYXZiYXItdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9InRydWUiXSB7CiAgY29sb3I6ICM2NjY7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci8qCiAqIEljb24KICogQWRvcHRzIGB1ay1pY29uYAogKi8KLyogSG92ZXIgKi8KLyogU3VidGl0bGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1uYXZiYXItc3VidGl0bGUgewogIGZvbnQtc2l6ZTogMC44NzVyZW07Cn0KLyogSnVzdGlmeSBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLW5hdmJhci1qdXN0aWZ5IC51ay1uYXZiYXItbGVmdCwKLnVrLW5hdmJhci1qdXN0aWZ5IC51ay1uYXZiYXItcmlnaHQsCi51ay1uYXZiYXItanVzdGlmeSAudWstbmF2YmFyLW5hdiwKLnVrLW5hdmJhci1qdXN0aWZ5IC51ay1uYXZiYXItbmF2ID4gbGksCi51ay1uYXZiYXItanVzdGlmeSAudWstbmF2YmFyLWl0ZW0sCi51ay1uYXZiYXItanVzdGlmeSAudWstbmF2YmFyLXRvZ2dsZSB7CiAgZmxleC1ncm93OiAxOwp9Ci8qIFN0eWxlIG1vZGlmaWVycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogRHJvcGRvd24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIEFkb3B0cyBgdWstZHJvcGRvd25gCiAqIDEuIEhpZGUgYnkgZGVmYXVsdAogKiAyLiBTZXQgcG9zaXRpb24KICogMy4gU2V0IGEgZGVmYXVsdCB3aWR0aAogKiA0LiBTdHlsZQogKi8KLnVrLW5hdmJhci1kcm9wZG93biB7CiAgLyogMSAqLwogIGRpc3BsYXk6IG5vbmU7CiAgLyogMiAqLwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiAxMDIwOwogIC0tdWstcG9zaXRpb24tb2Zmc2V0OiAxNXB4OwogIC0tdWstcG9zaXRpb24tc2hpZnQtb2Zmc2V0OiAwOwogIC0tdWstcG9zaXRpb24tdmlld3BvcnQtb2Zmc2V0OiAxNXB4OwogIC8qIDMgKi8KICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIHdpZHRoOiAyMDBweDsKICAvKiA0ICovCiAgcGFkZGluZzogMjVweDsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIGNvbG9yOiAjNjY2OwogIGJveC1zaGFkb3c6IDAgNXB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKfQovKiBTaG93ICovCi51ay1uYXZiYXItZHJvcGRvd24udWstb3BlbiB7CiAgZGlzcGxheTogYmxvY2s7Cn0KLyoKICogUmVtb3ZlIG1hcmdpbiBmcm9tIHRoZSBsYXN0LWNoaWxkCiAqLwoudWstbmF2YmFyLWRyb3Bkb3duID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KLyoKICogR3JpZAogKiBBZG9wdHMgYHVrLWdyaWRgCiAqLwovKiBHdXR0ZXIgSG9yaXpvbnRhbCAqLwoudWstbmF2YmFyLWRyb3Bkb3duLWdyaWQgewogIG1hcmdpbi1sZWZ0OiAtMzBweDsKfQoudWstbmF2YmFyLWRyb3Bkb3duLWdyaWQgPiAqIHsKICBwYWRkaW5nLWxlZnQ6IDMwcHg7Cn0KLyogR3V0dGVyIFZlcnRpY2FsICovCi51ay1uYXZiYXItZHJvcGRvd24tZ3JpZCA+IC51ay1ncmlkLW1hcmdpbiB7CiAgbWFyZ2luLXRvcDogMzBweDsKfQovKiBTdGFjayAqLwoudWstbmF2YmFyLWRyb3Bkb3duLXN0YWNrIC51ay1uYXZiYXItZHJvcGRvd24tZ3JpZCA+ICogewogIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7Cn0KLyoKICogV2lkdGggbW9kaWZpZXIKICovCi51ay1uYXZiYXItZHJvcGRvd24td2lkdGgtMjpub3QoLnVrLW5hdmJhci1kcm9wZG93bi1zdGFjaykgewogIHdpZHRoOiA0MDBweDsKfQoudWstbmF2YmFyLWRyb3Bkb3duLXdpZHRoLTM6bm90KC51ay1uYXZiYXItZHJvcGRvd24tc3RhY2spIHsKICB3aWR0aDogNjAwcHg7Cn0KLnVrLW5hdmJhci1kcm9wZG93bi13aWR0aC00Om5vdCgudWstbmF2YmFyLWRyb3Bkb3duLXN0YWNrKSB7CiAgd2lkdGg6IDgwMHB4Owp9Ci51ay1uYXZiYXItZHJvcGRvd24td2lkdGgtNTpub3QoLnVrLW5hdmJhci1kcm9wZG93bi1zdGFjaykgewogIHdpZHRoOiAxMDAwcHg7Cn0KLyoKICogU2l6ZSBtb2RpZmllcgogKi8KLnVrLW5hdmJhci1kcm9wZG93bi1sYXJnZSB7CiAgLS11ay1wb3NpdGlvbi1zaGlmdC1vZmZzZXQ6IDA7CiAgcGFkZGluZzogNDBweDsKfQovKgogKiBEcm9wYmFyIG1vZGlmaWVyCiAqIDEuIFJlc2V0IGRyb3Bkb3duIHdpZHRoIHRvIHByZXZlbnQgdG8gZWFybHkgc2hpZnRpbmcKICogMi4gUmVzZXQgc3R5bGUKICogMy4gUGFkZGluZwogKi8KLnVrLW5hdmJhci1kcm9wZG93bi1kcm9wYmFyIHsKICAvKiAxICovCiAgd2lkdGg6IGF1dG87CiAgLyogMiAqLwogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogIC8qIDMgKi8KICBwYWRkaW5nOiAyNXB4IDAgMjVweCAwOwogIC0tdWstcG9zaXRpb24tb2Zmc2V0OiAwOwogIC0tdWstcG9zaXRpb24tc2hpZnQtb2Zmc2V0OiAwOwogIC0tdWstcG9zaXRpb24tdmlld3BvcnQtb2Zmc2V0OiAxNXB4OwogIGJveC1zaGFkb3c6IG5vbmU7Cn0KLyogUGhvbmUgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7CiAgLnVrLW5hdmJhci1kcm9wZG93bi1kcm9wYmFyIHsKICAgIC0tdWstcG9zaXRpb24tdmlld3BvcnQtb2Zmc2V0OiAzMHB4OwogIH0KfQovKiBUYWJsZXQgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7CiAgLnVrLW5hdmJhci1kcm9wZG93bi1kcm9wYmFyIHsKICAgIC0tdWstcG9zaXRpb24tdmlld3BvcnQtb2Zmc2V0OiA0MHB4OwogIH0KfQoudWstbmF2YmFyLWRyb3Bkb3duLWRyb3BiYXItbGFyZ2UgewogIC0tdWstcG9zaXRpb24tc2hpZnQtb2Zmc2V0OiAwOwogIHBhZGRpbmctdG9wOiA0MHB4OwogIHBhZGRpbmctYm90dG9tOiA0MHB4Owp9Ci8qIERyb3Bkb3duIE5hdgogKiBBZG9wdHMgYHVrLW5hdmAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1uYXZiYXItZHJvcGRvd24tbmF2IHsKICBmb250LXNpemU6IDAuODc1cmVtOwp9Ci8qCiAqIEl0ZW1zCiAqLwoudWstbmF2YmFyLWRyb3Bkb3duLW5hdiA+IGxpID4gYSB7CiAgY29sb3I6ICM5OTk7Cn0KLyogSG92ZXIgKi8KLnVrLW5hdmJhci1kcm9wZG93bi1uYXYgPiBsaSA+IGE6aG92ZXIgewogIGNvbG9yOiAjNjY2Owp9Ci8qIEFjdGl2ZSAqLwoudWstbmF2YmFyLWRyb3Bkb3duLW5hdiA+IGxpLnVrLWFjdGl2ZSA+IGEgewogIGNvbG9yOiAjMzMzOwp9Ci8qCiAqIFN1YnRpdGxlCiAqLwoudWstbmF2YmFyLWRyb3Bkb3duLW5hdiAudWstbmF2LXN1YnRpdGxlIHsKICBmb250LXNpemU6IDEycHg7Cn0KLyoKICogSGVhZGVyCiAqLwoudWstbmF2YmFyLWRyb3Bkb3duLW5hdiAudWstbmF2LWhlYWRlciB7CiAgY29sb3I6ICMzMzM7Cn0KLyoKICogRGl2aWRlcgogKi8KLnVrLW5hdmJhci1kcm9wZG93bi1uYXYgLnVrLW5hdi1kaXZpZGVyIHsKICBib3JkZXItdG9wOiAxcHggc29saWQgI2U1ZTVlNTsKfQovKgogKiBTdWJsaXN0cwogKi8KLnVrLW5hdmJhci1kcm9wZG93bi1uYXYgLnVrLW5hdi1zdWIgYSB7CiAgY29sb3I6ICM5OTk7Cn0KLnVrLW5hdmJhci1kcm9wZG93bi1uYXYgLnVrLW5hdi1zdWIgYTpob3ZlciB7CiAgY29sb3I6ICM2NjY7Cn0KLnVrLW5hdmJhci1kcm9wZG93bi1uYXYgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSB7CiAgY29sb3I6ICMzMzM7Cn0KLyogRHJvcGJhcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gUmVzZXQgZHJvcGJhcgogKiAyLiBXaWR0aAogKi8KLnVrLW5hdmJhci1kcm9wYmFyIHsKICAvKiAxICovCiAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICB6LWluZGV4OiA5ODA7CiAgcGFkZGluZzogMDsKICAvKiAyICovCiAgbGVmdDogMDsKICByaWdodDogMDsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBTdWJuYXYKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIEFsbG93IGl0ZW1zIHRvIHdyYXAgaW50byB0aGUgbmV4dCBsaW5lCiAqIDIuIENlbnRlciBpdGVtcyB2ZXJ0aWNhbGx5IGlmIHRoZXkgaGF2ZSBhIGRpZmZlcmVudCBoZWlnaHQKICogMy4gR3V0dGVyCiAqIDQuIFJlc2V0IGxpc3QKICovCi51ay1zdWJuYXYgewogIGRpc3BsYXk6IGZsZXg7CiAgLyogMSAqLwogIGZsZXgtd3JhcDogd3JhcDsKICAvKiAyICovCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAvKiAzICovCiAgbWFyZ2luLWxlZnQ6IC0yMHB4OwogIC8qIDQgKi8KICBwYWRkaW5nOiAwOwogIGxpc3Qtc3R5bGU6IG5vbmU7Cn0KLyoKICogMS4gU3BhY2UgaXMgYWxsb2NhdGVkIHNvbGVseSBiYXNlZCBvbiBjb250ZW50IGRpbWVuc2lvbnM6IDAgMCBhdXRvCiAqIDIuIEd1dHRlcgogKiAzLiBDcmVhdGUgcG9zaXRpb24gY29udGV4dCBmb3IgZHJvcGRvd25zCiAqLwoudWstc3VibmF2ID4gKiB7CiAgLyogMSAqLwogIGZsZXg6IG5vbmU7CiAgLyogMiAqLwogIHBhZGRpbmctbGVmdDogMjBweDsKICAvKiAzICovCiAgcG9zaXRpb246IHJlbGF0aXZlOwp9Ci8qIEl0ZW1zCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBJdGVtcyBtdXN0IHRhcmdldCBgYWAgZWxlbWVudHMgdG8gZXhjbHVkZSBvdGhlciBlbGVtZW50cyAoZS5nLiBkcm9wZG93bnMpCiAqIFVzaW5nIGA6Zmlyc3QtY2hpbGRgIGluc3RlYWQgb2YgYGFgIHRvIHN1cHBvcnQgYHNwYW5gIGVsZW1lbnRzIGZvciB0ZXh0CiAqIDEuIENlbnRlciBjb250ZW50IHZlcnRpY2FsbHksIGUuZy4gYW4gaWNvbgogKiAyLiBJbWl0YXRlIHdoaXRlIHNwYWNlIGdhcCB3aGVuIHVzaW5nIGZsZXhib3gKICogMy4gU3R5bGUKICovCi51ay1zdWJuYXYgPiAqID4gOmZpcnN0LWNoaWxkIHsKICAvKiAxICovCiAgZGlzcGxheTogZmxleDsKICBhbGlnbi1pdGVtczogY2VudGVyOwogIC8qIDIgKi8KICBjb2x1bW4tZ2FwOiAwLjI1ZW07CiAgLyogMyAqLwogIGNvbG9yOiAjOTk5OwogIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICB0cmFuc2l0aW9uOiAwLjFzIGVhc2UtaW4tb3V0OwogIHRyYW5zaXRpb24tcHJvcGVydHk6IGNvbG9yLCBiYWNrZ3JvdW5kLWNvbG9yOwp9Ci8qIEhvdmVyICovCi51ay1zdWJuYXYgPiAqID4gYTpob3ZlciB7CiAgY29sb3I6ICM2NjY7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci8qIEFjdGl2ZSAqLwoudWstc3VibmF2ID4gLnVrLWFjdGl2ZSA+IGEgewogIGNvbG9yOiAjMzMzOwp9Ci8qIERpdmlkZXIgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIFNldCBndXR0ZXIKICovCi51ay1zdWJuYXYtZGl2aWRlciB7CiAgbWFyZ2luLWxlZnQ6IC00MXB4Owp9Ci8qCiAqIEFsaWduIGl0ZW1zIGFuZCBkaXZpZGVyIHZlcnRpY2FsbHkKICovCi51ay1zdWJuYXYtZGl2aWRlciA+ICogewogIGRpc3BsYXk6IGZsZXg7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQovKgogKiBEaXZpZGVyCiAqIDEuIGBudGgtY2hpbGRgIG1ha2VzIGl0IGFsc28gd29yayB3aXRob3V0IEpTIGlmIGl0J3Mgb25seSBvbmUgcm93CiAqLwoudWstc3VibmF2LWRpdmlkZXIgPiA6OmJlZm9yZSB7CiAgY29udGVudDogIiI7CiAgaGVpZ2h0OiAxLjVlbTsKICBtYXJnaW4tbGVmdDogMHB4OwogIG1hcmdpbi1yaWdodDogMjBweDsKICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHRyYW5zcGFyZW50Owp9Ci8qIDEgKi8KLnVrLXN1Ym5hdi1kaXZpZGVyID4gOm50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlIHsKICBib3JkZXItbGVmdC1jb2xvcjogI2U1ZTVlNTsKfQovKiBQaWxsIG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstc3VibmF2LXBpbGwgPiAqID4gOmZpcnN0LWNoaWxkIHsKICBwYWRkaW5nOiA1cHggMTBweDsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICBjb2xvcjogIzk5OTsKfQovKiBIb3ZlciAqLwoudWstc3VibmF2LXBpbGwgPiAqID4gYTpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsKICBjb2xvcjogIzY2NjsKfQovKiBPbkNsaWNrICovCi51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmFjdGl2ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsKICBjb2xvcjogIzY2NjsKfQovKiBBY3RpdmUgKi8KLnVrLXN1Ym5hdi1waWxsID4gLnVrLWFjdGl2ZSA+IGEgewogIGJhY2tncm91bmQtY29sb3I6ICMxZTg3ZjA7CiAgY29sb3I6ICNmZmY7Cn0KLyogRGlzYWJsZWQKICogVGhlIHNhbWUgZm9yIGFsbCBzdHlsZSBtb2RpZmllcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1zdWJuYXYgPiAudWstZGlzYWJsZWQgPiBhIHsKICBjb2xvcjogIzk5OTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBCcmVhZGNydW1iCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBSZXNldCBsaXN0CiAqLwoudWstYnJlYWRjcnVtYiB7CiAgcGFkZGluZzogMDsKICBsaXN0LXN0eWxlOiBub25lOwp9Ci8qCiAqIDEuIERvZXNuJ3QgZ2VuZXJhdGUgYW55IGJveCBhbmQgcmVwbGFjZWQgYnkgY2hpbGQgYm94ZXMKICovCi51ay1icmVhZGNydW1iID4gKiB7CiAgZGlzcGxheTogY29udGVudHM7Cn0KLyogSXRlbXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1icmVhZGNydW1iID4gKiA+ICogewogIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgY29sb3I6ICM5OTk7Cn0KLyogSG92ZXIgKi8KLnVrLWJyZWFkY3J1bWIgPiAqID4gOmhvdmVyIHsKICBjb2xvcjogIzY2NjsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KLyogRGlzYWJsZWQgKi8KLyogQWN0aXZlICovCi51ay1icmVhZGNydW1iID4gOmxhc3QtY2hpbGQgPiBzcGFuLAoudWstYnJlYWRjcnVtYiA+IDpsYXN0LWNoaWxkID4gYTpub3QoW2hyZWZdKSB7CiAgY29sb3I6ICM2NjY7Cn0KLyoKICogRGl2aWRlcgogKiBgbnRoLWNoaWxkYCBtYWtlcyBpdCBhbHNvIHdvcmsgd2l0aG91dCBKUyBpZiBpdCdzIG9ubHkgb25lIHJvdwogKiAxLiBSZW1vdmUgc3BhY2UgYmV0d2VlbiBpbmxpbmUgYmxvY2sgZWxlbWVudHMuCiAqIDIuIFN0eWxlCiAqLwoudWstYnJlYWRjcnVtYiA+IDpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSB7CiAgY29udGVudDogIi8iOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAvKiAxICovCiAgbWFyZ2luOiAwIDIwcHggMCBjYWxjKDIwcHggLSA0cHgpOwogIC8qIDIgKi8KICBmb250LXNpemU6IDAuODc1cmVtOwogIGNvbG9yOiAjOTk5Owp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IFBhZ2luYXRpb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIEFsbG93IGl0ZW1zIHRvIHdyYXAgaW50byB0aGUgbmV4dCBsaW5lCiAqIDIuIEd1dHRlcgogKiAzLiBSZXNldCBsaXN0CiAqLwoudWstcGFnaW5hdGlvbiB7CiAgZGlzcGxheTogZmxleDsKICAvKiAxICovCiAgZmxleC13cmFwOiB3cmFwOwogIC8qIDIgKi8KICBtYXJnaW4tbGVmdDogMDsKICAvKiAzICovCiAgcGFkZGluZzogMDsKICBsaXN0LXN0eWxlOiBub25lOwp9Ci8qCiAqIDEuIFNwYWNlIGlzIGFsbG9jYXRlZCBzb2xlbHkgYmFzZWQgb24gY29udGVudCBkaW1lbnNpb25zOiAwIDAgYXV0bwogKiAyLiBHdXR0ZXIKICogMy4gQ3JlYXRlIHBvc2l0aW9uIGNvbnRleHQgZm9yIGRyb3Bkb3ducwogKi8KLnVrLXBhZ2luYXRpb24gPiAqIHsKICAvKiAxICovCiAgZmxleDogbm9uZTsKICAvKiAyICovCiAgcGFkZGluZy1sZWZ0OiAwOwogIC8qIDMgKi8KICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KLyogSXRlbXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFByZXZlbnQgZ2FwIGlmIGNoaWxkIGVsZW1lbnQgaXMgYGlubGluZS1ibG9ja2AsIGUuZy4gYW4gaWNvbgogKiAyLiBTdHlsZQogKi8KLnVrLXBhZ2luYXRpb24gPiAqID4gKiB7CiAgLyogMSAqLwogIGRpc3BsYXk6IGJsb2NrOwogIC8qIDIgKi8KICBwYWRkaW5nOiA1cHggMTBweDsKICBjb2xvcjogIzk5OTsKICB0cmFuc2l0aW9uOiBjb2xvciAwLjFzIGVhc2UtaW4tb3V0Owp9Ci8qIEhvdmVyICovCi51ay1wYWdpbmF0aW9uID4gKiA+IDpob3ZlciB7CiAgY29sb3I6ICM2NjY7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci8qIEFjdGl2ZSAqLwoudWstcGFnaW5hdGlvbiA+IC51ay1hY3RpdmUgPiAqIHsKICBjb2xvcjogIzY2NjsKfQovKiBEaXNhYmxlZCAqLwoudWstcGFnaW5hdGlvbiA+IC51ay1kaXNhYmxlZCA+ICogewogIGNvbG9yOiAjOTk5Owp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IFRhYgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gQWxsb3cgaXRlbXMgdG8gd3JhcCBpbnRvIHRoZSBuZXh0IGxpbmUKICogMi4gR3V0dGVyCiAqIDMuIFJlc2V0IGxpc3QKICovCi51ay10YWIgewogIGRpc3BsYXk6IGZsZXg7CiAgLyogMSAqLwogIGZsZXgtd3JhcDogd3JhcDsKICAvKiAyICovCiAgbWFyZ2luLWxlZnQ6IC0yMHB4OwogIC8qIDMgKi8KICBwYWRkaW5nOiAwOwogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9Ci51ay10YWI6OmJlZm9yZSB7CiAgY29udGVudDogIiI7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGJvdHRvbTogMDsKICBsZWZ0OiAyMHB4OwogIHJpZ2h0OiAwOwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTVlNWU1Owp9Ci8qCiAqIDEuIFNwYWNlIGlzIGFsbG9jYXRlZCBzb2xlbHkgYmFzZWQgb24gY29udGVudCBkaW1lbnNpb25zOiAwIDAgYXV0bwogKiAyLiBHdXR0ZXIKICogMy4gQ3JlYXRlIHBvc2l0aW9uIGNvbnRleHQgZm9yIGRyb3Bkb3ducwogKi8KLnVrLXRhYiA+ICogewogIC8qIDEgKi8KICBmbGV4OiBub25lOwogIC8qIDIgKi8KICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgLyogMyAqLwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQovKiBJdGVtcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogSXRlbXMgbXVzdCB0YXJnZXQgYGFgIGVsZW1lbnRzIHRvIGV4Y2x1ZGUgb3RoZXIgZWxlbWVudHMgKGUuZy4gZHJvcGRvd25zKQogKiAxLiBDZW50ZXIgY29udGVudCB2ZXJ0aWNhbGx5LCBlLmcuIGFuIGljb24KICogMi4gSW1pdGF0ZSB3aGl0ZSBzcGFjZSBnYXAgd2hlbiB1c2luZyBmbGV4Ym94CiAqIDMuIENlbnRlciBjb250ZW50IGlmIGEgd2lkdGggaXMgc2V0CiAqIDQuIFN0eWxlCiAqLwoudWstdGFiID4gKiA+IGEgewogIC8qIDEgKi8KICBkaXNwbGF5OiBmbGV4OwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgLyogMiAqLwogIGNvbHVtbi1nYXA6IDAuMjVlbTsKICAvKiAzICovCiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgLyogNCAqLwogIHBhZGRpbmc6IDVweCAxMHB4OwogIGNvbG9yOiAjOTk5OwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICBmb250LXNpemU6IDAuODc1cmVtOwogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgdHJhbnNpdGlvbjogY29sb3IgMC4xcyBlYXNlLWluLW91dDsKfQovKiBIb3ZlciAqLwoudWstdGFiID4gKiA+IGE6aG92ZXIgewogIGNvbG9yOiAjNjY2OwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQovKiBBY3RpdmUgKi8KLnVrLXRhYiA+IC51ay1hY3RpdmUgPiBhIHsKICBjb2xvcjogIzMzMzsKICBib3JkZXItY29sb3I6ICMxZTg3ZjA7Cn0KLyogRGlzYWJsZWQgKi8KLnVrLXRhYiA+IC51ay1kaXNhYmxlZCA+IGEgewogIGNvbG9yOiAjOTk5Owp9Ci8qIFBvc2l0aW9uIG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBCb3R0b20KICovCi51ay10YWItYm90dG9tOjpiZWZvcmUgewogIHRvcDogMDsKICBib3R0b206IGF1dG87Cn0KLnVrLXRhYi1ib3R0b20gPiAqID4gYSB7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogIGJvcmRlci1ib3R0b206IG5vbmU7Cn0KLyoKICogTGVmdCArIFJpZ2h0CiAqIDEuIFJlc2V0IEd1dHRlcgogKi8KLnVrLXRhYi1sZWZ0LAoudWstdGFiLXJpZ2h0IHsKICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogIC8qIDEgKi8KICBtYXJnaW4tbGVmdDogMDsKfQovKiAxICovCi51ay10YWItbGVmdCA+ICosCi51ay10YWItcmlnaHQgPiAqIHsKICBwYWRkaW5nLWxlZnQ6IDA7Cn0KLnVrLXRhYi1sZWZ0OjpiZWZvcmUgewogIHRvcDogMDsKICBib3R0b206IDA7CiAgbGVmdDogYXV0bzsKICByaWdodDogMDsKICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNlNWU1ZTU7CiAgYm9yZGVyLWJvdHRvbTogbm9uZTsKfQoudWstdGFiLXJpZ2h0OjpiZWZvcmUgewogIHRvcDogMDsKICBib3R0b206IDA7CiAgbGVmdDogMDsKICByaWdodDogYXV0bzsKICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNlNWU1ZTU7CiAgYm9yZGVyLWJvdHRvbTogbm9uZTsKfQoudWstdGFiLWxlZnQgPiAqID4gYSB7CiAganVzdGlmeS1jb250ZW50OiBsZWZ0OwogIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogIGJvcmRlci1ib3R0b206IG5vbmU7Cn0KLnVrLXRhYi1yaWdodCA+ICogPiBhIHsKICBqdXN0aWZ5LWNvbnRlbnQ6IGxlZnQ7CiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICBib3JkZXItYm90dG9tOiBub25lOwp9Ci51ay10YWIgLnVrLWRyb3Bkb3duIHsKICBtYXJnaW4tbGVmdDogMzBweDsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBTbGlkZW5hdgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogQWRvcHRzIGB1ay1pY29uYAogKi8KLnVrLXNsaWRlbmF2IHsKICBwYWRkaW5nOiA1cHggMTBweDsKICBjb2xvcjogcmdiYSgxMDIsIDEwMiwgMTAyLCAwLjUpOwogIHRyYW5zaXRpb246IGNvbG9yIDAuMXMgZWFzZS1pbi1vdXQ7Cn0KLyogSG92ZXIgKi8KLnVrLXNsaWRlbmF2OmhvdmVyIHsKICBjb2xvcjogcmdiYSgxMDIsIDEwMiwgMTAyLCAwLjkpOwp9Ci8qIE9uQ2xpY2sgKi8KLnVrLXNsaWRlbmF2OmFjdGl2ZSB7CiAgY29sb3I6IHJnYmEoMTAyLCAxMDIsIDEwMiwgMC41KTsKfQovKiBJY29uIG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBQcmV2aW91cwogKi8KLyoKICogTmV4dAogKi8KLyogU2l6ZSBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXNsaWRlbmF2LWxhcmdlIHsKICBwYWRkaW5nOiAxMHB4IDEwcHg7Cn0KLyogQ29udGFpbmVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstc2xpZGVuYXYtY29udGFpbmVyIHsKICBkaXNwbGF5OiBmbGV4Owp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IERvdG5hdgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gQWxsb3cgaXRlbXMgdG8gd3JhcCBpbnRvIHRoZSBuZXh0IGxpbmUKICogMi4gUmVzZXQgbGlzdAogKiAzLiBHdXR0ZXIKICovCi51ay1kb3RuYXYgewogIGRpc3BsYXk6IGZsZXg7CiAgLyogMSAqLwogIGZsZXgtd3JhcDogd3JhcDsKICAvKiAyICovCiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDA7CiAgbGlzdC1zdHlsZTogbm9uZTsKICAvKiAzICovCiAgbWFyZ2luLWxlZnQ6IC0xMnB4Owp9Ci8qCiAqIDEuIFNwYWNlIGlzIGFsbG9jYXRlZCBzb2xlbHkgYmFzZWQgb24gY29udGVudCBkaW1lbnNpb25zOiAwIDAgYXV0bwogKiAyLiBHdXR0ZXIKICovCi51ay1kb3RuYXYgPiAqIHsKICAvKiAxICovCiAgZmxleDogbm9uZTsKICAvKiAyICovCiAgcGFkZGluZy1sZWZ0OiAxMnB4Owp9Ci8qIEl0ZW1zCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBJdGVtcwogKiAxLiBIaWRlIHRleHQgaWYgcHJlc2VudAogKi8KLnVrLWRvdG5hdiA+ICogPiAqIHsKICBkaXNwbGF5OiBibG9jazsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIHdpZHRoOiAxMHB4OwogIGhlaWdodDogMTBweDsKICBib3JkZXItcmFkaXVzOiA1MCU7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgLyogMSAqLwogIHRleHQtaW5kZW50OiAxMDAlOwogIG92ZXJmbG93OiBoaWRkZW47CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEwMiwgMTAyLCAxMDIsIDAuNCk7CiAgdHJhbnNpdGlvbjogMC4ycyBlYXNlLWluLW91dDsKICB0cmFuc2l0aW9uLXByb3BlcnR5OiBiYWNrZ3JvdW5kLWNvbG9yLCBib3JkZXItY29sb3I7Cn0KLyogSG92ZXIgKi8KLnVrLWRvdG5hdiA+ICogPiA6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTAyLCAxMDIsIDEwMiwgMC42KTsKICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Owp9Ci8qIE9uQ2xpY2sgKi8KLnVrLWRvdG5hdiA+ICogPiA6YWN0aXZlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEwMiwgMTAyLCAxMDIsIDAuMik7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKfQovKiBBY3RpdmUgKi8KLnVrLWRvdG5hdiA+IC51ay1hY3RpdmUgPiAqIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEwMiwgMTAyLCAxMDIsIDAuNik7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKfQovKiBNb2RpZmllcjogJ3VrLWRvdG5hdi12ZXJ0aWNhbCcKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIENoYW5nZSBkaXJlY3Rpb24KICogMi4gR3V0dGVyCiAqLwoudWstZG90bmF2LXZlcnRpY2FsIHsKICAvKiAxICovCiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAvKiAyICovCiAgbWFyZ2luLWxlZnQ6IDA7CiAgbWFyZ2luLXRvcDogLTEycHg7Cn0KLyogMiAqLwoudWstZG90bmF2LXZlcnRpY2FsID4gKiB7CiAgcGFkZGluZy1sZWZ0OiAwOwogIHBhZGRpbmctdG9wOiAxMnB4Owp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IFRodW1ibmF2CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBBbGxvdyBpdGVtcyB0byB3cmFwIGludG8gdGhlIG5leHQgbGluZQogKiAyLiBSZXNldCBsaXN0CiAqIDMuIEd1dHRlcgogKi8KLnVrLXRodW1ibmF2IHsKICBkaXNwbGF5OiBmbGV4OwogIC8qIDEgKi8KICBmbGV4LXdyYXA6IHdyYXA7CiAgLyogMiAqLwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgLyogMyAqLwogIG1hcmdpbi1sZWZ0OiAtMTVweDsKfQovKgogKiBTcGFjZSBpcyBhbGxvY2F0ZWQgYmFzZWQgb24gY29udGVudCBkaW1lbnNpb25zLCBidXQgc2hyaW5rczogMCAxIGF1dG8KICogMS4gR3V0dGVyCiAqLwoudWstdGh1bWJuYXYgPiAqIHsKICAvKiAxICovCiAgcGFkZGluZy1sZWZ0OiAxNXB4Owp9Ci8qIEl0ZW1zCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBJdGVtcwogKi8KLnVrLXRodW1ibmF2ID4gKiA+ICogewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KLnVrLXRodW1ibmF2ID4gKiA+ICo6OmFmdGVyIHsKICBjb250ZW50OiAiIjsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOwogIGJvdHRvbTogMDsKICBsZWZ0OiAwOwogIHJpZ2h0OiAwOwogIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40KTsKICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMXMgZWFzZS1pbi1vdXQ7Cn0KLyogSG92ZXIgKi8KLnVrLXRodW1ibmF2ID4gKiA+IDpob3Zlcjo6YWZ0ZXIgewogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Owp9Ci8qIEFjdGl2ZSAqLwoudWstdGh1bWJuYXYgPiAudWstYWN0aXZlID4gKjo6YWZ0ZXIgewogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Owp9Ci8qIE1vZGlmaWVyOiAndWstdGh1bWJuYXYtdmVydGljYWwnCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBDaGFuZ2UgZGlyZWN0aW9uCiAqIDIuIEd1dHRlcgogKi8KLnVrLXRodW1ibmF2LXZlcnRpY2FsIHsKICAvKiAxICovCiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAvKiAyICovCiAgbWFyZ2luLWxlZnQ6IDA7CiAgbWFyZ2luLXRvcDogLTE1cHg7Cn0KLyogMiAqLwoudWstdGh1bWJuYXYtdmVydGljYWwgPiAqIHsKICBwYWRkaW5nLWxlZnQ6IDA7CiAgcGFkZGluZy10b3A6IDE1cHg7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogSWNvbm5hdgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gQWxsb3cgaXRlbXMgdG8gd3JhcCBpbnRvIHRoZSBuZXh0IGxpbmUKICogMi4gUmVzZXQgbGlzdAogKiAzLiBHdXR0ZXIKICovCi51ay1pY29ubmF2IHsKICBkaXNwbGF5OiBmbGV4OwogIC8qIDEgKi8KICBmbGV4LXdyYXA6IHdyYXA7CiAgLyogMiAqLwogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgLyogMyAqLwogIG1hcmdpbi1sZWZ0OiAtMTBweDsKfQovKgogKiBTcGFjZSBpcyBhbGxvY2F0ZWQgYmFzZWQgb24gY29udGVudCBkaW1lbnNpb25zLCBidXQgc2hyaW5rczogMCAxIGF1dG8KICogMS4gR3V0dGVyCiAqLwoudWstaWNvbm5hdiA+ICogewogIC8qIDEgKi8KICBwYWRkaW5nLWxlZnQ6IDEwcHg7Cn0KLyogSXRlbXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIEl0ZW1zIG11c3QgdGFyZ2V0IGBhYCBlbGVtZW50cyB0byBleGNsdWRlIG90aGVyIGVsZW1lbnRzIChlLmcuIGRyb3Bkb3ducykKICogMS4gQ2VudGVyIGNvbnRlbnQgdmVydGljYWxseSBpZiB0aGVyZSBpcyBzdGlsbCBzb21lIHRleHQKICogMi4gSW1pdGF0ZSB3aGl0ZSBzcGFjZSBnYXAgd2hlbiB1c2luZyBmbGV4Ym94CiAqIDMuIEZvcmNlIHRleHQgbm90IHRvIGFmZmVjdCBpdGVtIGhlaWdodAogKiA0LiBTdHlsZQogKiA1LiBSZXF1aXJlZCBmb3IgYGFgIGlmIHRoZXJlIGlzIHN0aWxsIHNvbWUgdGV4dAogKi8KLnVrLWljb25uYXYgPiAqID4gYSB7CiAgLyogMSAqLwogIGRpc3BsYXk6IGZsZXg7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAvKiAyICovCiAgY29sdW1uLWdhcDogMC4yNWVtOwogIC8qIDMgKi8KICBsaW5lLWhlaWdodDogMDsKICAvKiA0ICovCiAgY29sb3I6ICM5OTk7CiAgLyogNSAqLwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICBmb250LXNpemU6IDAuODc1cmVtOwogIHRyYW5zaXRpb246IDAuMXMgZWFzZS1pbi1vdXQ7CiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogY29sb3IsIGJhY2tncm91bmQtY29sb3I7Cn0KLyogSG92ZXIgKi8KLnVrLWljb25uYXYgPiAqID4gYTpob3ZlciB7CiAgY29sb3I6ICM2NjY7Cn0KLyogQWN0aXZlICovCi51ay1pY29ubmF2ID4gLnVrLWFjdGl2ZSA+IGEgewogIGNvbG9yOiAjNjY2Owp9Ci8qIE1vZGlmaWVyOiAndWstaWNvbm5hdi12ZXJ0aWNhbCcKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIENoYW5nZSBkaXJlY3Rpb24KICogMi4gR3V0dGVyCiAqLwoudWstaWNvbm5hdi12ZXJ0aWNhbCB7CiAgLyogMSAqLwogIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgLyogMiAqLwogIG1hcmdpbi1sZWZ0OiAwOwogIG1hcmdpbi10b3A6IC0xMHB4Owp9Ci8qIDIgKi8KLnVrLWljb25uYXYtdmVydGljYWwgPiAqIHsKICBwYWRkaW5nLWxlZnQ6IDA7CiAgcGFkZGluZy10b3A6IDEwcHg7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogTGlnaHRib3gKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIEhpZGUgYnkgZGVmYXVsdAogKiAyLiBTZXQgcG9zaXRpb24KICogMy4gQWxsb3cgc2Nyb2xsaW5nIGZvciB0aGUgbW9kYWwgZGlhbG9nCiAqIDQuIEhvcml6b250YWwgcGFkZGluZwogKiA1LiBNYXNrIHRoZSBiYWNrZ3JvdW5kIHBhZ2UKICogNi4gRmFkZS1pbiB0cmFuc2l0aW9uCiAqIDcuIFByZXZlbnQgY2FuY2VsbGF0aW9uIG9mIHBvaW50ZXIgZXZlbnRzIHdoaWxlIGRyYWdnaW5nCiAqLwoudWstbGlnaHRib3ggewogIC8qIDEgKi8KICBkaXNwbGF5OiBub25lOwogIC8qIDIgKi8KICBwb3NpdGlvbjogZml4ZWQ7CiAgdG9wOiAwOwogIHJpZ2h0OiAwOwogIGJvdHRvbTogMDsKICBsZWZ0OiAwOwogIHotaW5kZXg6IDEwMTA7CiAgLyogNSAqLwogIGJhY2tncm91bmQ6ICMwMDA7CiAgLyogNiAqLwogIG9wYWNpdHk6IDA7CiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBsaW5lYXI7CiAgLyogNyAqLwogIHRvdWNoLWFjdGlvbjogcGluY2gtem9vbTsKfQovKgogKiBPcGVuCiAqIDEuIENlbnRlciBjaGlsZAogKiAyLiBGYWRlLWluCiAqLwoudWstbGlnaHRib3gudWstb3BlbiB7CiAgZGlzcGxheTogYmxvY2s7CiAgLyogMiAqLwogIG9wYWNpdHk6IDE7Cn0KLyoKICogRm9jdXMKICovCi51ay1saWdodGJveCA6Zm9jdXMgewogIG91dGxpbmUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHRib3ggOmZvY3VzLXZpc2libGUgewogIG91dGxpbmUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQovKiBQYWdlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBQcmV2ZW50IHNjcm9sbGJhcnMKICovCi51ay1saWdodGJveC1wYWdlIHsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci8qIEl0ZW0KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIENlbnRlciBjaGlsZCB3aXRoaW4gdGhlIHZpZXdwb3J0CiAqIDIuIE5vdCB2aXNpYmxlIGJ5IGRlZmF1bHQKICogMy4gQ29sb3IgbmVlZGVkIGZvciBzcGlubmVyIGljb24KICogNC4gT3B0aW1pemUgYW5pbWF0aW9uCiAqIDUuIFJlc3BvbnNpdmVuZXNzCiAqICAgIFVzaW5nIGB2aGAgZm9yIGBtYXgtaGVpZ2h0YCB0byBmaXggaW1hZ2UgcHJvcG9ydGlvbnMgYWZ0ZXIgcmVzaXplIGluIFNhZmFyaSBhbmQgT3BlcmEKICovCi51ay1saWdodGJveC1pdGVtcyA+ICogewogIC8qIDEgKi8KICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOwogIHJpZ2h0OiAwOwogIGJvdHRvbTogMDsKICBsZWZ0OiAwOwogIC8qIDIgKi8KICBkaXNwbGF5OiBub25lOwogIGp1c3RpZnktY29udGVudDogY2VudGVyOwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgLyogMyAqLwogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7CiAgLyogNCAqLwogIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm0sIG9wYWNpdHk7Cn0KLyogNSAqLwoudWstbGlnaHRib3gtaXRlbXMgPiAqID4gKiB7CiAgbWF4LXdpZHRoOiAxMDB2dzsKICBtYXgtaGVpZ2h0OiAxMDB2aDsKfQoudWstbGlnaHRib3gtaXRlbXMgPiAqID4gOm5vdChpZnJhbWUpIHsKICB3aWR0aDogYXV0bzsKICBoZWlnaHQ6IGF1dG87Cn0KLnVrLWxpZ2h0Ym94LWl0ZW1zID4gLnVrLWFjdGl2ZSB7CiAgZGlzcGxheTogZmxleDsKfQovKiBUb29sYmFyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstbGlnaHRib3gtdG9vbGJhciB7CiAgcGFkZGluZzogMTBweCAxMHB4OwogIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zKTsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodGJveC10b29sYmFyID4gKiB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQovKiBUb29sYmFyIEljb24gKENsb3NlKQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWxpZ2h0Ym94LXRvb2xiYXItaWNvbiB7CiAgcGFkZGluZzogNXB4OwogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLyoKICogSG92ZXIKICovCi51ay1saWdodGJveC10b29sYmFyLWljb246aG92ZXIgewogIGNvbG9yOiAjZmZmOwp9Ci8qIEJ1dHRvbiAoU2xpZGVuYXYpCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBDZW50ZXIgaWNvbiB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFsbHkKICovCi51ay1saWdodGJveC1idXR0b24gewogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgd2lkdGg6IDUwcHg7CiAgaGVpZ2h0OiA1MHB4OwogIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zKTsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogIC8qIDEgKi8KICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICBhbGlnbi1pdGVtczogY2VudGVyOwp9Ci8qIEhvdmVyICovCi51ay1saWdodGJveC1idXR0b246aG92ZXIgewogIGNvbG9yOiAjZmZmOwp9Ci8qIE9uQ2xpY2sgKi8KLyogQ2FwdGlvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWxpZ2h0Ym94LWNhcHRpb246ZW1wdHkgewogIGRpc3BsYXk6IG5vbmU7Cn0KLyogSWZyYW1lCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstbGlnaHRib3gtaWZyYW1lIHsKICB3aWR0aDogODAlOwogIGhlaWdodDogODAlOwp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IEFuaW1hdGlvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KW2NsYXNzKj0ndWstYW5pbWF0aW9uLSddIHsKICBhbmltYXRpb246IDAuNXMgZWFzZS1vdXQgYm90aDsKfQovKiBBbmltYXRpb25zCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBGYWRlCiAqLwoudWstYW5pbWF0aW9uLWZhZGUgewogIGFuaW1hdGlvbi1uYW1lOiB1ay1mYWRlOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogMC44czsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXI7Cn0KLyoKICogU2NhbGUKICovCi51ay1hbmltYXRpb24tc2NhbGUtdXAgewogIGFuaW1hdGlvbi1uYW1lOiB1ay1mYWRlLCB1ay1zY2FsZS11cDsKfQoudWstYW5pbWF0aW9uLXNjYWxlLWRvd24gewogIGFuaW1hdGlvbi1uYW1lOiB1ay1mYWRlLCB1ay1zY2FsZS1kb3duOwp9Ci8qCiAqIFNsaWRlCiAqLwoudWstYW5pbWF0aW9uLXNsaWRlLXRvcCB7CiAgYW5pbWF0aW9uLW5hbWU6IHVrLWZhZGUsIHVrLXNsaWRlLXRvcDsKfQoudWstYW5pbWF0aW9uLXNsaWRlLWJvdHRvbSB7CiAgYW5pbWF0aW9uLW5hbWU6IHVrLWZhZGUsIHVrLXNsaWRlLWJvdHRvbTsKfQoudWstYW5pbWF0aW9uLXNsaWRlLWxlZnQgewogIGFuaW1hdGlvbi1uYW1lOiB1ay1mYWRlLCB1ay1zbGlkZS1sZWZ0Owp9Ci51ay1hbmltYXRpb24tc2xpZGUtcmlnaHQgewogIGFuaW1hdGlvbi1uYW1lOiB1ay1mYWRlLCB1ay1zbGlkZS1yaWdodDsKfQovKgogKiBTbGlkZSBTbWFsbAogKi8KLnVrLWFuaW1hdGlvbi1zbGlkZS10b3Atc21hbGwgewogIGFuaW1hdGlvbi1uYW1lOiB1ay1mYWRlLCB1ay1zbGlkZS10b3Atc21hbGw7Cn0KLnVrLWFuaW1hdGlvbi1zbGlkZS1ib3R0b20tc21hbGwgewogIGFuaW1hdGlvbi1uYW1lOiB1ay1mYWRlLCB1ay1zbGlkZS1ib3R0b20tc21hbGw7Cn0KLnVrLWFuaW1hdGlvbi1zbGlkZS1sZWZ0LXNtYWxsIHsKICBhbmltYXRpb24tbmFtZTogdWstZmFkZSwgdWstc2xpZGUtbGVmdC1zbWFsbDsKfQoudWstYW5pbWF0aW9uLXNsaWRlLXJpZ2h0LXNtYWxsIHsKICBhbmltYXRpb24tbmFtZTogdWstZmFkZSwgdWstc2xpZGUtcmlnaHQtc21hbGw7Cn0KLyoKICogU2xpZGUgTWVkaXVtCiAqLwoudWstYW5pbWF0aW9uLXNsaWRlLXRvcC1tZWRpdW0gewogIGFuaW1hdGlvbi1uYW1lOiB1ay1mYWRlLCB1ay1zbGlkZS10b3AtbWVkaXVtOwp9Ci51ay1hbmltYXRpb24tc2xpZGUtYm90dG9tLW1lZGl1bSB7CiAgYW5pbWF0aW9uLW5hbWU6IHVrLWZhZGUsIHVrLXNsaWRlLWJvdHRvbS1tZWRpdW07Cn0KLnVrLWFuaW1hdGlvbi1zbGlkZS1sZWZ0LW1lZGl1bSB7CiAgYW5pbWF0aW9uLW5hbWU6IHVrLWZhZGUsIHVrLXNsaWRlLWxlZnQtbWVkaXVtOwp9Ci51ay1hbmltYXRpb24tc2xpZGUtcmlnaHQtbWVkaXVtIHsKICBhbmltYXRpb24tbmFtZTogdWstZmFkZSwgdWstc2xpZGUtcmlnaHQtbWVkaXVtOwp9Ci8qCiAqIEtlbmJ1cm5zCiAqLwoudWstYW5pbWF0aW9uLWtlbmJ1cm5zIHsKICBhbmltYXRpb24tbmFtZTogdWsta2VuYnVybnM7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiAxNXM7Cn0KLyoKICogU2hha2UKICovCi51ay1hbmltYXRpb24tc2hha2UgewogIGFuaW1hdGlvbi1uYW1lOiB1ay1zaGFrZTsKfQovKgogKiBTVkcgU3Ryb2tlCiAqIFRoZSBgLS11ay1hbmltYXRpb24tc3Ryb2tlYCBjdXN0b20gcHJvcGVydHkgY29udGFpbnMgdGhlIGxvbmdlc3QgcGF0aCBsZW5ndGguCiAqIFNldCBpdCBtYW51YWxseSBvciB1c2UgYHVrLXN2Zz0ic3Ryb2tlLWFuaW1hdGlvbjogdHJ1ZSJgIHRvIHNldCBpdCBhdXRvbWF0aWNhbGx5LgogKiBBbGwgc3Ryb2tlcyBhcmUgYW5pbWF0ZWQgYnkgdGhlIHNhbWUgcGFjZSBhbmQgZG9lc24ndCBlbmQgc2ltdWx0YW5lb3VzbHkuCiAqIFRvIGVuZCBzaW11bHRhbmVvdXNseSwgYHBhdGhMZW5ndGg9IjEiYCBjb3VsZCBiZSB1c2VkLCBidXQgaXQncyBub3Qgd29ya2luZyBpbiBTYWZhcmkgeWV0LgogKi8KLnVrLWFuaW1hdGlvbi1zdHJva2UgewogIGFuaW1hdGlvbi1uYW1lOiB1ay1zdHJva2U7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiAyczsKICBzdHJva2UtZGFzaGFycmF5OiB2YXIoLS11ay1hbmltYXRpb24tc3Ryb2tlKTsKfQovKiBEaXJlY3Rpb24gbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1hbmltYXRpb24tcmV2ZXJzZSB7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogcmV2ZXJzZTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwp9Ci8qIER1cmF0aW9uIG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstYW5pbWF0aW9uLWZhc3QgewogIGFuaW1hdGlvbi1kdXJhdGlvbjogMC4xczsKfQovKiBUb2dnbGUgYW5pbWF0aW9uIGJhc2VkIG9uIHRoZSBTdGF0ZSBvZiB0aGUgUGFyZW50IEVsZW1lbnQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1hbmltYXRpb24tdG9nZ2xlOm5vdCg6aG92ZXIpOm5vdCg6Zm9jdXMpIFtjbGFzcyo9J3VrLWFuaW1hdGlvbi0nXSB7CiAgYW5pbWF0aW9uLW5hbWU6IG5vbmU7Cn0KLyogS2V5ZnJhbWVzIHVzZWQgYnkgYW5pbWF0aW9uIGNsYXNzZXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIEZhZGUKICovCkBrZXlmcmFtZXMgdWstZmFkZSB7CiAgMCUgewogICAgb3BhY2l0eTogMDsKICB9CiAgMTAwJSB7CiAgICBvcGFjaXR5OiAxOwogIH0KfQovKgogKiBTY2FsZQogKi8KQGtleWZyYW1lcyB1ay1zY2FsZS11cCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgfQp9CkBrZXlmcmFtZXMgdWstc2NhbGUtZG93biB7CiAgMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgfQp9Ci8qCiAqIFNsaWRlCiAqLwpAa2V5ZnJhbWVzIHVrLXNsaWRlLXRvcCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMDAlKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgfQp9CkBrZXlmcmFtZXMgdWstc2xpZGUtYm90dG9tIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogIH0KfQpAa2V5ZnJhbWVzIHVrLXNsaWRlLWxlZnQgewogIDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOwogIH0KfQpAa2V5ZnJhbWVzIHVrLXNsaWRlLXJpZ2h0IHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOwogIH0KfQovKgogKiBTbGlkZSBTbWFsbAogKi8KQGtleWZyYW1lcyB1ay1zbGlkZS10b3Atc21hbGwgewogIDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTBweCk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogIH0KfQpAa2V5ZnJhbWVzIHVrLXNsaWRlLWJvdHRvbS1zbWFsbCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICB9Cn0KQGtleWZyYW1lcyB1ay1zbGlkZS1sZWZ0LXNtYWxsIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwcHgpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKICB9Cn0KQGtleWZyYW1lcyB1ay1zbGlkZS1yaWdodC1zbWFsbCB7CiAgMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwcHgpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKICB9Cn0KLyoKICogU2xpZGUgTWVkaXVtCiAqLwpAa2V5ZnJhbWVzIHVrLXNsaWRlLXRvcC1tZWRpdW0gewogIDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTBweCk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogIH0KfQpAa2V5ZnJhbWVzIHVrLXNsaWRlLWJvdHRvbS1tZWRpdW0gewogIDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg1MHB4KTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgfQp9CkBrZXlmcmFtZXMgdWstc2xpZGUtbGVmdC1tZWRpdW0gewogIDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTBweCk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOwogIH0KfQpAa2V5ZnJhbWVzIHVrLXNsaWRlLXJpZ2h0LW1lZGl1bSB7CiAgMCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDUwcHgpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKICB9Cn0KLyoKICogS2VuYnVybnMKICovCkBrZXlmcmFtZXMgdWsta2VuYnVybnMgewogIDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpOwogIH0KfQovKgogKiBTaGFrZQogKi8KQGtleWZyYW1lcyB1ay1zaGFrZSB7CiAgMCUsCiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7CiAgfQogIDEwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTlweCk7CiAgfQogIDIwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoOHB4KTsKICB9CiAgMzAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtN3B4KTsKICB9CiAgNDAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg2cHgpOwogIH0KICA1MCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01cHgpOwogIH0KICA2MCUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDRweCk7CiAgfQogIDcwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTNweCk7CiAgfQogIDgwJSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMnB4KTsKICB9CiAgOTAlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMXB4KTsKICB9Cn0KLyoKICogU3Ryb2tlCiAqLwpAa2V5ZnJhbWVzIHVrLXN0cm9rZSB7CiAgMCUgewogICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IHZhcigtLXVrLWFuaW1hdGlvbi1zdHJva2UpOwogIH0KICAxMDAlIHsKICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwOwogIH0KfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBXaWR0aAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogRXF1YWwgY2hpbGQgd2lkdGhzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpbY2xhc3MqPSd1ay1jaGlsZC13aWR0aCddID4gKiB7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB3aWR0aDogMTAwJTsKfQoudWstY2hpbGQtd2lkdGgtMS0yID4gKiB7CiAgd2lkdGg6IDUwJTsKfQoudWstY2hpbGQtd2lkdGgtMS0zID4gKiB7CiAgd2lkdGg6IGNhbGMoMTAwJSAqIDEgLyAzLjAwMSk7Cn0KLnVrLWNoaWxkLXdpZHRoLTEtNCA+ICogewogIHdpZHRoOiAyNSU7Cn0KLnVrLWNoaWxkLXdpZHRoLTEtNSA+ICogewogIHdpZHRoOiAyMCU7Cn0KLnVrLWNoaWxkLXdpZHRoLTEtNiA+ICogewogIHdpZHRoOiBjYWxjKDEwMCUgKiAxIC8gNi4wMDEpOwp9Ci51ay1jaGlsZC13aWR0aC1hdXRvID4gKiB7CiAgd2lkdGg6IGF1dG87Cn0KLyoKICogMS4gUmVzZXQgdGhlIGBtaW4td2lkdGhgLCB3aGljaCBpcyBzZXQgdG8gYXV0byBieSBkZWZhdWx0LCBiZWNhdXNlCiAqICAgIGZsZXggaXRlbXMgd29uJ3Qgc2hyaW5rIGJlbG93IHRoZWlyIG1pbmltdW0gaW50cmluc2ljIGNvbnRlbnQgc2l6ZS4KICogICAgVXNpbmcgYDFweGAgaW5zdGVhZCBvZiBgMGAsIHNvIGl0ZW1zIHN0aWxsIHdyYXAgaW50byB0aGUgbmV4dCBsaW5lLAogKiAgICBpZiB0aGV5IGhhdmUgemVybyB3aWR0aCBhbmQgcGFkZGluZyBhbmQgdGhlIHByZWRlY2Vzc29yIGlzIDEwMCUgd2lkZS4KICovCi51ay1jaGlsZC13aWR0aC1leHBhbmQgPiA6bm90KFtjbGFzcyo9J3VrLXdpZHRoJ10pIHsKICBmbGV4OiAxOwogIC8qIDEgKi8KICBtaW4td2lkdGg6IDFweDsKfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAudWstY2hpbGQtd2lkdGgtMS0xXEBzID4gKiB7CiAgICB3aWR0aDogMTAwJTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLTEtMlxAcyA+ICogewogICAgd2lkdGg6IDUwJTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLTEtM1xAcyA+ICogewogICAgd2lkdGg6IGNhbGMoMTAwJSAqIDEgLyAzLjAwMSk7CiAgfQogIC51ay1jaGlsZC13aWR0aC0xLTRcQHMgPiAqIHsKICAgIHdpZHRoOiAyNSU7CiAgfQogIC51ay1jaGlsZC13aWR0aC0xLTVcQHMgPiAqIHsKICAgIHdpZHRoOiAyMCU7CiAgfQogIC51ay1jaGlsZC13aWR0aC0xLTZcQHMgPiAqIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgKiAxIC8gNi4wMDEpOwogIH0KICAudWstY2hpbGQtd2lkdGgtYXV0b1xAcyA+ICogewogICAgd2lkdGg6IGF1dG87CiAgfQogIC51ay1jaGlsZC13aWR0aC1leHBhbmRcQHMgPiA6bm90KFtjbGFzcyo9J3VrLXdpZHRoJ10pIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDFweDsKICB9Cn0KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogIC51ay1jaGlsZC13aWR0aC0xLTFcQG0gPiAqIHsKICAgIHdpZHRoOiAxMDAlOwogIH0KICAudWstY2hpbGQtd2lkdGgtMS0yXEBtID4gKiB7CiAgICB3aWR0aDogNTAlOwogIH0KICAudWstY2hpbGQtd2lkdGgtMS0zXEBtID4gKiB7CiAgICB3aWR0aDogY2FsYygxMDAlICogMSAvIDMuMDAxKTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLTEtNFxAbSA+ICogewogICAgd2lkdGg6IDI1JTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLTEtNVxAbSA+ICogewogICAgd2lkdGg6IDIwJTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLTEtNlxAbSA+ICogewogICAgd2lkdGg6IGNhbGMoMTAwJSAqIDEgLyA2LjAwMSk7CiAgfQogIC51ay1jaGlsZC13aWR0aC1hdXRvXEBtID4gKiB7CiAgICB3aWR0aDogYXV0bzsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLWV4cGFuZFxAbSA+IDpub3QoW2NsYXNzKj0ndWstd2lkdGgnXSkgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMXB4OwogIH0KfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC51ay1jaGlsZC13aWR0aC0xLTFcQGwgPiAqIHsKICAgIHdpZHRoOiAxMDAlOwogIH0KICAudWstY2hpbGQtd2lkdGgtMS0yXEBsID4gKiB7CiAgICB3aWR0aDogNTAlOwogIH0KICAudWstY2hpbGQtd2lkdGgtMS0zXEBsID4gKiB7CiAgICB3aWR0aDogY2FsYygxMDAlICogMSAvIDMuMDAxKTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLTEtNFxAbCA+ICogewogICAgd2lkdGg6IDI1JTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLTEtNVxAbCA+ICogewogICAgd2lkdGg6IDIwJTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLTEtNlxAbCA+ICogewogICAgd2lkdGg6IGNhbGMoMTAwJSAqIDEgLyA2LjAwMSk7CiAgfQogIC51ay1jaGlsZC13aWR0aC1hdXRvXEBsID4gKiB7CiAgICB3aWR0aDogYXV0bzsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLWV4cGFuZFxAbCA+IDpub3QoW2NsYXNzKj0ndWstd2lkdGgnXSkgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMXB4OwogIH0KfQovKiBMYXJnZSBzY3JlZW4gYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTYwMHB4KSB7CiAgLnVrLWNoaWxkLXdpZHRoLTEtMVxAeGwgPiAqIHsKICAgIHdpZHRoOiAxMDAlOwogIH0KICAudWstY2hpbGQtd2lkdGgtMS0yXEB4bCA+ICogewogICAgd2lkdGg6IDUwJTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLTEtM1xAeGwgPiAqIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgKiAxIC8gMy4wMDEpOwogIH0KICAudWstY2hpbGQtd2lkdGgtMS00XEB4bCA+ICogewogICAgd2lkdGg6IDI1JTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLTEtNVxAeGwgPiAqIHsKICAgIHdpZHRoOiAyMCU7CiAgfQogIC51ay1jaGlsZC13aWR0aC0xLTZcQHhsID4gKiB7CiAgICB3aWR0aDogY2FsYygxMDAlICogMSAvIDYuMDAxKTsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLWF1dG9cQHhsID4gKiB7CiAgICB3aWR0aDogYXV0bzsKICB9CiAgLnVrLWNoaWxkLXdpZHRoLWV4cGFuZFxAeGwgPiA6bm90KFtjbGFzcyo9J3VrLXdpZHRoJ10pIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDFweDsKICB9Cn0KLyogU2luZ2xlIFdpZHRocwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gYG1heC13aWR0aGAgaXMgbmVlZGVkIGZvciB0aGUgcGl4ZWwtYmFzZWQgY2xhc3NlcwogKi8KW2NsYXNzKj0ndWstd2lkdGgnXSB7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB3aWR0aDogMTAwJTsKICAvKiAxICovCiAgbWF4LXdpZHRoOiAxMDAlOwp9Ci8qIEhhbHZlcyAqLwoudWstd2lkdGgtMS0yIHsKICB3aWR0aDogNTAlOwp9Ci8qIFRoaXJkcyAqLwoudWstd2lkdGgtMS0zIHsKICB3aWR0aDogY2FsYygxMDAlICogMSAvIDMuMDAxKTsKfQoudWstd2lkdGgtMi0zIHsKICB3aWR0aDogY2FsYygxMDAlICogMiAvIDMuMDAxKTsKfQovKiBRdWFydGVycyAqLwoudWstd2lkdGgtMS00IHsKICB3aWR0aDogMjUlOwp9Ci51ay13aWR0aC0zLTQgewogIHdpZHRoOiA3NSU7Cn0KLyogRmlmdGhzICovCi51ay13aWR0aC0xLTUgewogIHdpZHRoOiAyMCU7Cn0KLnVrLXdpZHRoLTItNSB7CiAgd2lkdGg6IDQwJTsKfQoudWstd2lkdGgtMy01IHsKICB3aWR0aDogNjAlOwp9Ci51ay13aWR0aC00LTUgewogIHdpZHRoOiA4MCU7Cn0KLyogU2l4dGhzICovCi51ay13aWR0aC0xLTYgewogIHdpZHRoOiBjYWxjKDEwMCUgKiAxIC8gNi4wMDEpOwp9Ci51ay13aWR0aC01LTYgewogIHdpZHRoOiBjYWxjKDEwMCUgKiA1IC8gNi4wMDEpOwp9Ci8qIFBpeGVsICovCi51ay13aWR0aC1zbWFsbCB7CiAgd2lkdGg6IDE1MHB4Owp9Ci51ay13aWR0aC1tZWRpdW0gewogIHdpZHRoOiAzMDBweDsKfQoudWstd2lkdGgtbGFyZ2UgewogIHdpZHRoOiA0NTBweDsKfQoudWstd2lkdGgteGxhcmdlIHsKICB3aWR0aDogNjAwcHg7Cn0KLnVrLXdpZHRoLTJ4bGFyZ2UgewogIHdpZHRoOiA3NTBweDsKfQovKiBBdXRvICovCi51ay13aWR0aC1hdXRvIHsKICB3aWR0aDogYXV0bzsKfQovKiBFeHBhbmQgKi8KLnVrLXdpZHRoLWV4cGFuZCB7CiAgZmxleDogMTsKICBtaW4td2lkdGg6IDFweDsKfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAvKiBXaG9sZSAqLwogIC51ay13aWR0aC0xLTFcQHMgewogICAgd2lkdGg6IDEwMCU7CiAgfQogIC8qIEhhbHZlcyAqLwogIC51ay13aWR0aC0xLTJcQHMgewogICAgd2lkdGg6IDUwJTsKICB9CiAgLyogVGhpcmRzICovCiAgLnVrLXdpZHRoLTEtM1xAcyB7CiAgICB3aWR0aDogY2FsYygxMDAlICogMSAvIDMuMDAxKTsKICB9CiAgLnVrLXdpZHRoLTItM1xAcyB7CiAgICB3aWR0aDogY2FsYygxMDAlICogMiAvIDMuMDAxKTsKICB9CiAgLyogUXVhcnRlcnMgKi8KICAudWstd2lkdGgtMS00XEBzIHsKICAgIHdpZHRoOiAyNSU7CiAgfQogIC51ay13aWR0aC0zLTRcQHMgewogICAgd2lkdGg6IDc1JTsKICB9CiAgLyogRmlmdGhzICovCiAgLnVrLXdpZHRoLTEtNVxAcyB7CiAgICB3aWR0aDogMjAlOwogIH0KICAudWstd2lkdGgtMi01XEBzIHsKICAgIHdpZHRoOiA0MCU7CiAgfQogIC51ay13aWR0aC0zLTVcQHMgewogICAgd2lkdGg6IDYwJTsKICB9CiAgLnVrLXdpZHRoLTQtNVxAcyB7CiAgICB3aWR0aDogODAlOwogIH0KICAvKiBTaXh0aHMgKi8KICAudWstd2lkdGgtMS02XEBzIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgKiAxIC8gNi4wMDEpOwogIH0KICAudWstd2lkdGgtNS02XEBzIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgKiA1IC8gNi4wMDEpOwogIH0KICAvKiBQaXhlbCAqLwogIC51ay13aWR0aC1zbWFsbFxAcyB7CiAgICB3aWR0aDogMTUwcHg7CiAgfQogIC51ay13aWR0aC1tZWRpdW1cQHMgewogICAgd2lkdGg6IDMwMHB4OwogIH0KICAudWstd2lkdGgtbGFyZ2VcQHMgewogICAgd2lkdGg6IDQ1MHB4OwogIH0KICAudWstd2lkdGgteGxhcmdlXEBzIHsKICAgIHdpZHRoOiA2MDBweDsKICB9CiAgLnVrLXdpZHRoLTJ4bGFyZ2VcQHMgewogICAgd2lkdGg6IDc1MHB4OwogIH0KICAvKiBBdXRvICovCiAgLnVrLXdpZHRoLWF1dG9cQHMgewogICAgd2lkdGg6IGF1dG87CiAgfQogIC8qIEV4cGFuZCAqLwogIC51ay13aWR0aC1leHBhbmRcQHMgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMXB4OwogIH0KfQovKiBUYWJsZXQgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7CiAgLyogV2hvbGUgKi8KICAudWstd2lkdGgtMS0xXEBtIHsKICAgIHdpZHRoOiAxMDAlOwogIH0KICAvKiBIYWx2ZXMgKi8KICAudWstd2lkdGgtMS0yXEBtIHsKICAgIHdpZHRoOiA1MCU7CiAgfQogIC8qIFRoaXJkcyAqLwogIC51ay13aWR0aC0xLTNcQG0gewogICAgd2lkdGg6IGNhbGMoMTAwJSAqIDEgLyAzLjAwMSk7CiAgfQogIC51ay13aWR0aC0yLTNcQG0gewogICAgd2lkdGg6IGNhbGMoMTAwJSAqIDIgLyAzLjAwMSk7CiAgfQogIC8qIFF1YXJ0ZXJzICovCiAgLnVrLXdpZHRoLTEtNFxAbSB7CiAgICB3aWR0aDogMjUlOwogIH0KICAudWstd2lkdGgtMy00XEBtIHsKICAgIHdpZHRoOiA3NSU7CiAgfQogIC8qIEZpZnRocyAqLwogIC51ay13aWR0aC0xLTVcQG0gewogICAgd2lkdGg6IDIwJTsKICB9CiAgLnVrLXdpZHRoLTItNVxAbSB7CiAgICB3aWR0aDogNDAlOwogIH0KICAudWstd2lkdGgtMy01XEBtIHsKICAgIHdpZHRoOiA2MCU7CiAgfQogIC51ay13aWR0aC00LTVcQG0gewogICAgd2lkdGg6IDgwJTsKICB9CiAgLyogU2l4dGhzICovCiAgLnVrLXdpZHRoLTEtNlxAbSB7CiAgICB3aWR0aDogY2FsYygxMDAlICogMSAvIDYuMDAxKTsKICB9CiAgLnVrLXdpZHRoLTUtNlxAbSB7CiAgICB3aWR0aDogY2FsYygxMDAlICogNSAvIDYuMDAxKTsKICB9CiAgLyogUGl4ZWwgKi8KICAudWstd2lkdGgtc21hbGxcQG0gewogICAgd2lkdGg6IDE1MHB4OwogIH0KICAudWstd2lkdGgtbWVkaXVtXEBtIHsKICAgIHdpZHRoOiAzMDBweDsKICB9CiAgLnVrLXdpZHRoLWxhcmdlXEBtIHsKICAgIHdpZHRoOiA0NTBweDsKICB9CiAgLnVrLXdpZHRoLXhsYXJnZVxAbSB7CiAgICB3aWR0aDogNjAwcHg7CiAgfQogIC51ay13aWR0aC0yeGxhcmdlXEBtIHsKICAgIHdpZHRoOiA3NTBweDsKICB9CiAgLyogQXV0byAqLwogIC51ay13aWR0aC1hdXRvXEBtIHsKICAgIHdpZHRoOiBhdXRvOwogIH0KICAvKiBFeHBhbmQgKi8KICAudWstd2lkdGgtZXhwYW5kXEBtIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDFweDsKICB9Cn0KLyogRGVza3RvcCBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHsKICAvKiBXaG9sZSAqLwogIC51ay13aWR0aC0xLTFcQGwgewogICAgd2lkdGg6IDEwMCU7CiAgfQogIC8qIEhhbHZlcyAqLwogIC51ay13aWR0aC0xLTJcQGwgewogICAgd2lkdGg6IDUwJTsKICB9CiAgLyogVGhpcmRzICovCiAgLnVrLXdpZHRoLTEtM1xAbCB7CiAgICB3aWR0aDogY2FsYygxMDAlICogMSAvIDMuMDAxKTsKICB9CiAgLnVrLXdpZHRoLTItM1xAbCB7CiAgICB3aWR0aDogY2FsYygxMDAlICogMiAvIDMuMDAxKTsKICB9CiAgLyogUXVhcnRlcnMgKi8KICAudWstd2lkdGgtMS00XEBsIHsKICAgIHdpZHRoOiAyNSU7CiAgfQogIC51ay13aWR0aC0zLTRcQGwgewogICAgd2lkdGg6IDc1JTsKICB9CiAgLyogRmlmdGhzICovCiAgLnVrLXdpZHRoLTEtNVxAbCB7CiAgICB3aWR0aDogMjAlOwogIH0KICAudWstd2lkdGgtMi01XEBsIHsKICAgIHdpZHRoOiA0MCU7CiAgfQogIC51ay13aWR0aC0zLTVcQGwgewogICAgd2lkdGg6IDYwJTsKICB9CiAgLnVrLXdpZHRoLTQtNVxAbCB7CiAgICB3aWR0aDogODAlOwogIH0KICAvKiBTaXh0aHMgKi8KICAudWstd2lkdGgtMS02XEBsIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgKiAxIC8gNi4wMDEpOwogIH0KICAudWstd2lkdGgtNS02XEBsIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgKiA1IC8gNi4wMDEpOwogIH0KICAvKiBQaXhlbCAqLwogIC51ay13aWR0aC1zbWFsbFxAbCB7CiAgICB3aWR0aDogMTUwcHg7CiAgfQogIC51ay13aWR0aC1tZWRpdW1cQGwgewogICAgd2lkdGg6IDMwMHB4OwogIH0KICAudWstd2lkdGgtbGFyZ2VcQGwgewogICAgd2lkdGg6IDQ1MHB4OwogIH0KICAudWstd2lkdGgteGxhcmdlXEBsIHsKICAgIHdpZHRoOiA2MDBweDsKICB9CiAgLnVrLXdpZHRoLTJ4bGFyZ2VcQGwgewogICAgd2lkdGg6IDc1MHB4OwogIH0KICAvKiBBdXRvICovCiAgLnVrLXdpZHRoLWF1dG9cQGwgewogICAgd2lkdGg6IGF1dG87CiAgfQogIC8qIEV4cGFuZCAqLwogIC51ay13aWR0aC1leHBhbmRcQGwgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMXB4OwogIH0KfQovKiBMYXJnZSBzY3JlZW4gYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTYwMHB4KSB7CiAgLyogV2hvbGUgKi8KICAudWstd2lkdGgtMS0xXEB4bCB7CiAgICB3aWR0aDogMTAwJTsKICB9CiAgLyogSGFsdmVzICovCiAgLnVrLXdpZHRoLTEtMlxAeGwgewogICAgd2lkdGg6IDUwJTsKICB9CiAgLyogVGhpcmRzICovCiAgLnVrLXdpZHRoLTEtM1xAeGwgewogICAgd2lkdGg6IGNhbGMoMTAwJSAqIDEgLyAzLjAwMSk7CiAgfQogIC51ay13aWR0aC0yLTNcQHhsIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgKiAyIC8gMy4wMDEpOwogIH0KICAvKiBRdWFydGVycyAqLwogIC51ay13aWR0aC0xLTRcQHhsIHsKICAgIHdpZHRoOiAyNSU7CiAgfQogIC51ay13aWR0aC0zLTRcQHhsIHsKICAgIHdpZHRoOiA3NSU7CiAgfQogIC8qIEZpZnRocyAqLwogIC51ay13aWR0aC0xLTVcQHhsIHsKICAgIHdpZHRoOiAyMCU7CiAgfQogIC51ay13aWR0aC0yLTVcQHhsIHsKICAgIHdpZHRoOiA0MCU7CiAgfQogIC51ay13aWR0aC0zLTVcQHhsIHsKICAgIHdpZHRoOiA2MCU7CiAgfQogIC51ay13aWR0aC00LTVcQHhsIHsKICAgIHdpZHRoOiA4MCU7CiAgfQogIC8qIFNpeHRocyAqLwogIC51ay13aWR0aC0xLTZcQHhsIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgKiAxIC8gNi4wMDEpOwogIH0KICAudWstd2lkdGgtNS02XEB4bCB7CiAgICB3aWR0aDogY2FsYygxMDAlICogNSAvIDYuMDAxKTsKICB9CiAgLyogUGl4ZWwgKi8KICAudWstd2lkdGgtc21hbGxcQHhsIHsKICAgIHdpZHRoOiAxNTBweDsKICB9CiAgLnVrLXdpZHRoLW1lZGl1bVxAeGwgewogICAgd2lkdGg6IDMwMHB4OwogIH0KICAudWstd2lkdGgtbGFyZ2VcQHhsIHsKICAgIHdpZHRoOiA0NTBweDsKICB9CiAgLnVrLXdpZHRoLXhsYXJnZVxAeGwgewogICAgd2lkdGg6IDYwMHB4OwogIH0KICAudWstd2lkdGgtMnhsYXJnZVxAeGwgewogICAgd2lkdGg6IDc1MHB4OwogIH0KICAvKiBBdXRvICovCiAgLnVrLXdpZHRoLWF1dG9cQHhsIHsKICAgIHdpZHRoOiBhdXRvOwogIH0KICAvKiBFeHBhbmQgKi8KICAudWstd2lkdGgtZXhwYW5kXEB4bCB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAxcHg7CiAgfQp9Ci8qIEludHJpbnNpYyBXaWR0aHMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay13aWR0aC1tYXgtY29udGVudCB7CiAgd2lkdGg6IG1heC1jb250ZW50Owp9Ci51ay13aWR0aC1taW4tY29udGVudCB7CiAgd2lkdGg6IG1pbi1jb250ZW50Owp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IEhlaWdodAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KW2NsYXNzKj0ndWstaGVpZ2h0J10gewogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KLyoKICogT25seSB3b3JrcyBpZiBwYXJlbnQgZWxlbWVudCBoYXMgYSBoZWlnaHQgc2V0CiAqLwoudWstaGVpZ2h0LTEtMSB7CiAgaGVpZ2h0OiAxMDAlOwp9Ci8qCiAqIFVzZWZ1bCB0byBjcmVhdGUgaW1hZ2UgdGVhc2VycwogKi8KLnVrLWhlaWdodC12aWV3cG9ydCB7CiAgbWluLWhlaWdodDogMTAwdmg7Cn0KLnVrLWhlaWdodC12aWV3cG9ydC0yIHsKICBtaW4taGVpZ2h0OiAyMDB2aDsKfQoudWstaGVpZ2h0LXZpZXdwb3J0LTMgewogIG1pbi1oZWlnaHQ6IDMwMHZoOwp9Ci51ay1oZWlnaHQtdmlld3BvcnQtNCB7CiAgbWluLWhlaWdodDogNDAwdmg7Cn0KLyoKICogUGl4ZWwKICogVXNlZnVsIGZvciBgb3ZlcmZsb3c6IGF1dG9gCiAqLwoudWstaGVpZ2h0LXNtYWxsIHsKICBoZWlnaHQ6IDE1MHB4Owp9Ci51ay1oZWlnaHQtbWVkaXVtIHsKICBoZWlnaHQ6IDMwMHB4Owp9Ci51ay1oZWlnaHQtbGFyZ2UgewogIGhlaWdodDogNDUwcHg7Cn0KLnVrLWhlaWdodC1tYXgtc21hbGwgewogIG1heC1oZWlnaHQ6IDE1MHB4Owp9Ci51ay1oZWlnaHQtbWF4LW1lZGl1bSB7CiAgbWF4LWhlaWdodDogMzAwcHg7Cn0KLnVrLWhlaWdodC1tYXgtbGFyZ2UgewogIG1heC1oZWlnaHQ6IDQ1MHB4Owp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IFRleHQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIFN0eWxlIG1vZGlmaWVycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXRleHQtbGVhZCB7CiAgZm9udC1zaXplOiAxLjVyZW07CiAgbGluZS1oZWlnaHQ6IDEuNTsKICBjb2xvcjogIzMzMzsKfQoudWstdGV4dC1tZXRhIHsKICBmb250LXNpemU6IDAuODc1cmVtOwogIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgY29sb3I6ICM5OTk7Cn0KLnVrLXRleHQtbWV0YSBhIHsKICBjb2xvcjogIzk5OTsKfQoudWstdGV4dC1tZXRhIGE6aG92ZXIgewogIGNvbG9yOiAjNjY2OwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQovKiBTaXplIG1vZGlmaWVycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXRleHQtc21hbGwgewogIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgbGluZS1oZWlnaHQ6IDEuNTsKfQoudWstdGV4dC1sYXJnZSB7CiAgZm9udC1zaXplOiAxLjVyZW07CiAgbGluZS1oZWlnaHQ6IDEuNTsKfQoudWstdGV4dC1kZWZhdWx0IHsKICBmb250LXNpemU6IDE2cHg7CiAgbGluZS1oZWlnaHQ6IDEuNTsKfQovKiBXZWlnaHQgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay10ZXh0LWxpZ2h0IHsKICBmb250LXdlaWdodDogMzAwOwp9Ci51ay10ZXh0LW5vcm1hbCB7CiAgZm9udC13ZWlnaHQ6IDQwMDsKfQoudWstdGV4dC1ib2xkIHsKICBmb250LXdlaWdodDogNzAwOwp9Ci51ay10ZXh0LWxpZ2h0ZXIgewogIGZvbnQtd2VpZ2h0OiBsaWdodGVyOwp9Ci51ay10ZXh0LWJvbGRlciB7CiAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKfQovKiBTdHlsZSBtb2RpZmllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXRleHQtaXRhbGljIHsKICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KLyogVHJhbnNmb3JtIG1vZGlmaWVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstdGV4dC1jYXBpdGFsaXplIHsKICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZSAhaW1wb3J0YW50Owp9Ci51ay10ZXh0LXVwcGVyY2FzZSB7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSAhaW1wb3J0YW50Owp9Ci51ay10ZXh0LWxvd2VyY2FzZSB7CiAgdGV4dC10cmFuc2Zvcm06IGxvd2VyY2FzZSAhaW1wb3J0YW50Owp9Ci8qIERlY29yYXRpb24gbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay10ZXh0LWRlY29yYXRpb24tbm9uZSB7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7Cn0KLyogQ29sb3IgbW9kaWZpZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstdGV4dC1tdXRlZCB7CiAgY29sb3I6ICM5OTkgIWltcG9ydGFudDsKfQoudWstdGV4dC1lbXBoYXNpcyB7CiAgY29sb3I6ICMzMzMgIWltcG9ydGFudDsKfQoudWstdGV4dC1wcmltYXJ5IHsKICBjb2xvcjogIzFlODdmMCAhaW1wb3J0YW50Owp9Ci51ay10ZXh0LXNlY29uZGFyeSB7CiAgY29sb3I6ICMyMjIgIWltcG9ydGFudDsKfQoudWstdGV4dC1zdWNjZXNzIHsKICBjb2xvcjogIzMyZDI5NiAhaW1wb3J0YW50Owp9Ci51ay10ZXh0LXdhcm5pbmcgewogIGNvbG9yOiAjZmFhMDVhICFpbXBvcnRhbnQ7Cn0KLnVrLXRleHQtZGFuZ2VyIHsKICBjb2xvcjogI2YwNTA2ZSAhaW1wb3J0YW50Owp9Ci8qIEJhY2tncm91bmQgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFRoZSBiYWNrZ3JvdW5kIGNsaXBzIHRvIHRoZSBmb3JlZ3JvdW5kIHRleHQuIFdvcmtzIGluIGFsbCBicm93c2Vycy4KICogMi4gRGVmYXVsdCBjb2xvciBpcyBzZXQgdG8gdHJhbnNwYXJlbnQuCiAqIDMuIENvbnRhaW5lciBmaXRzIHRoZSB0ZXh0CiAqIDQuIFN0eWxlCiAqLwoudWstdGV4dC1iYWNrZ3JvdW5kIHsKICAvKiAxICovCiAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7CiAgLyogMiAqLwogIGNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogIC8qIDMgKi8KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgLyogNCAqLwogIGJhY2tncm91bmQtY29sb3I6ICMxZTg3ZjA7Cn0KLyogQWxpZ25tZW50IG1vZGlmaWVycwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXRleHQtbGVmdCB7CiAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50Owp9Ci51ay10ZXh0LXJpZ2h0IHsKICB0ZXh0LWFsaWduOiByaWdodCAhaW1wb3J0YW50Owp9Ci51ay10ZXh0LWNlbnRlciB7CiAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7Cn0KLnVrLXRleHQtanVzdGlmeSB7CiAgdGV4dC1hbGlnbjoganVzdGlmeSAhaW1wb3J0YW50Owp9Ci8qIFBob25lIGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgewogIC51ay10ZXh0LWxlZnRcQHMgewogICAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50OwogIH0KICAudWstdGV4dC1yaWdodFxAcyB7CiAgICB0ZXh0LWFsaWduOiByaWdodCAhaW1wb3J0YW50OwogIH0KICAudWstdGV4dC1jZW50ZXJcQHMgewogICAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstdGV4dC1sZWZ0XEBtIHsKICAgIHRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDsKICB9CiAgLnVrLXRleHQtcmlnaHRcQG0gewogICAgdGV4dC1hbGlnbjogcmlnaHQgIWltcG9ydGFudDsKICB9CiAgLnVrLXRleHQtY2VudGVyXEBtIHsKICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OwogIH0KfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC51ay10ZXh0LWxlZnRcQGwgewogICAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50OwogIH0KICAudWstdGV4dC1yaWdodFxAbCB7CiAgICB0ZXh0LWFsaWduOiByaWdodCAhaW1wb3J0YW50OwogIH0KICAudWstdGV4dC1jZW50ZXJcQGwgewogICAgdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7CiAgfQp9Ci8qIExhcmdlIHNjcmVlbiBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxNjAwcHgpIHsKICAudWstdGV4dC1sZWZ0XEB4bCB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7CiAgfQogIC51ay10ZXh0LXJpZ2h0XEB4bCB7CiAgICB0ZXh0LWFsaWduOiByaWdodCAhaW1wb3J0YW50OwogIH0KICAudWstdGV4dC1jZW50ZXJcQHhsIHsKICAgIHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50OwogIH0KfQovKgogKiBWZXJ0aWNhbAogKi8KLnVrLXRleHQtdG9wIHsKICB2ZXJ0aWNhbC1hbGlnbjogdG9wICFpbXBvcnRhbnQ7Cn0KLnVrLXRleHQtbWlkZGxlIHsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlICFpbXBvcnRhbnQ7Cn0KLnVrLXRleHQtYm90dG9tIHsKICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tICFpbXBvcnRhbnQ7Cn0KLnVrLXRleHQtYmFzZWxpbmUgewogIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50Owp9Ci8qIFdyYXAgbW9kaWZpZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBQcmV2ZW50IHRleHQgZnJvbSB3cmFwcGluZyBvbnRvIG11bHRpcGxlIGxpbmVzCiAqLwoudWstdGV4dC1ub3dyYXAgewogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KLyoKICogMS4gTWFrZSBzdXJlIGEgbWF4LXdpZHRoIGlzIHNldCBhZnRlciB3aGljaCB0cnVuY2F0aW9uIGNhbiBvY2N1cgogKiAyLiBQcmV2ZW50IHRleHQgZnJvbSB3cmFwcGluZyBvbnRvIG11bHRpcGxlIGxpbmVzLCBhbmQgdHJ1bmNhdGUgd2l0aCBhbiBlbGxpcHNpcwogKiAzLiBGaXggZm9yIHRhYmxlIGNlbGxzCiAqLwoudWstdGV4dC10cnVuY2F0ZSB7CiAgLyogMSAqLwogIG1heC13aWR0aDogMTAwJTsKICAvKiAyICovCiAgb3ZlcmZsb3c6IGhpZGRlbjsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9Ci8qIDIgKi8KdGgudWstdGV4dC10cnVuY2F0ZSwKdGQudWstdGV4dC10cnVuY2F0ZSB7CiAgbWF4LXdpZHRoOiAwOwp9Ci8qCiAqIFdyYXAgbG9uZyB3b3JkcyBvbnRvIHRoZSBuZXh0IGxpbmUgYW5kIGJyZWFrIHRoZW0gaWYgdGhleSBhcmUgdG9vIGxvbmcgdG8gZml0LgogKiAxLiBNYWtlIGl0IHdvcmsgd2l0aCB0YWJsZSBjZWxscyBpbiBhbGwgYnJvd3NlcnMuCiAqIE5vdGU6IE5vdCB1c2luZyBgaHlwaGVuczogYXV0b2AgYmVjYXVzZSBpdCBoeXBoZW5hdGVzIHRleHQgZXZlbiBpZiBub3QgbmVlZGVkLgogKi8KLnVrLXRleHQtYnJlYWsgewogIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7Cn0KLyogMSAqLwp0aC51ay10ZXh0LWJyZWFrLAp0ZC51ay10ZXh0LWJyZWFrIHsKICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IENvbHVtbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KW2NsYXNzKj0ndWstY29sdW1uLSddIHsKICBjb2x1bW4tZ2FwOiAzMHB4Owp9Ci8qIERlc2t0b3AgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CiAgW2NsYXNzKj0ndWstY29sdW1uLSddIHsKICAgIGNvbHVtbi1nYXA6IDQwcHg7CiAgfQp9Ci8qCiAqIEZpeCBpbWFnZSAxcHggbGluZSB3cmFwcGluZyBpbnRvIHRoZSBuZXh0IGNvbHVtbiBpbiBDaHJvbWUKICovCltjbGFzcyo9J3VrLWNvbHVtbi0nXSBpbWcgewogIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7Cn0KLyogRGl2aWRlcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogMS4gRG91YmxlIHRoZSBjb2x1bW4gZ2FwCiAqLwoudWstY29sdW1uLWRpdmlkZXIgewogIGNvbHVtbi1ydWxlOiAxcHggc29saWQgI2U1ZTVlNTsKICAvKiAxICovCiAgY29sdW1uLWdhcDogNjBweDsKfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC51ay1jb2x1bW4tZGl2aWRlciB7CiAgICBjb2x1bW4tZ2FwOiA4MHB4OwogIH0KfQovKiBXaWR0aCBtb2RpZmllcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1jb2x1bW4tMS0yIHsKICBjb2x1bW4tY291bnQ6IDI7Cn0KLnVrLWNvbHVtbi0xLTMgewogIGNvbHVtbi1jb3VudDogMzsKfQoudWstY29sdW1uLTEtNCB7CiAgY29sdW1uLWNvdW50OiA0Owp9Ci51ay1jb2x1bW4tMS01IHsKICBjb2x1bW4tY291bnQ6IDU7Cn0KLnVrLWNvbHVtbi0xLTYgewogIGNvbHVtbi1jb3VudDogNjsKfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAudWstY29sdW1uLTEtMlxAcyB7CiAgICBjb2x1bW4tY291bnQ6IDI7CiAgfQogIC51ay1jb2x1bW4tMS0zXEBzIHsKICAgIGNvbHVtbi1jb3VudDogMzsKICB9CiAgLnVrLWNvbHVtbi0xLTRcQHMgewogICAgY29sdW1uLWNvdW50OiA0OwogIH0KICAudWstY29sdW1uLTEtNVxAcyB7CiAgICBjb2x1bW4tY291bnQ6IDU7CiAgfQogIC51ay1jb2x1bW4tMS02XEBzIHsKICAgIGNvbHVtbi1jb3VudDogNjsKICB9Cn0KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogIC51ay1jb2x1bW4tMS0yXEBtIHsKICAgIGNvbHVtbi1jb3VudDogMjsKICB9CiAgLnVrLWNvbHVtbi0xLTNcQG0gewogICAgY29sdW1uLWNvdW50OiAzOwogIH0KICAudWstY29sdW1uLTEtNFxAbSB7CiAgICBjb2x1bW4tY291bnQ6IDQ7CiAgfQogIC51ay1jb2x1bW4tMS01XEBtIHsKICAgIGNvbHVtbi1jb3VudDogNTsKICB9CiAgLnVrLWNvbHVtbi0xLTZcQG0gewogICAgY29sdW1uLWNvdW50OiA2OwogIH0KfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC51ay1jb2x1bW4tMS0yXEBsIHsKICAgIGNvbHVtbi1jb3VudDogMjsKICB9CiAgLnVrLWNvbHVtbi0xLTNcQGwgewogICAgY29sdW1uLWNvdW50OiAzOwogIH0KICAudWstY29sdW1uLTEtNFxAbCB7CiAgICBjb2x1bW4tY291bnQ6IDQ7CiAgfQogIC51ay1jb2x1bW4tMS01XEBsIHsKICAgIGNvbHVtbi1jb3VudDogNTsKICB9CiAgLnVrLWNvbHVtbi0xLTZcQGwgewogICAgY29sdW1uLWNvdW50OiA2OwogIH0KfQovKiBMYXJnZSBzY3JlZW4gYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTYwMHB4KSB7CiAgLnVrLWNvbHVtbi0xLTJcQHhsIHsKICAgIGNvbHVtbi1jb3VudDogMjsKICB9CiAgLnVrLWNvbHVtbi0xLTNcQHhsIHsKICAgIGNvbHVtbi1jb3VudDogMzsKICB9CiAgLnVrLWNvbHVtbi0xLTRcQHhsIHsKICAgIGNvbHVtbi1jb3VudDogNDsKICB9CiAgLnVrLWNvbHVtbi0xLTVcQHhsIHsKICAgIGNvbHVtbi1jb3VudDogNTsKICB9CiAgLnVrLWNvbHVtbi0xLTZcQHhsIHsKICAgIGNvbHVtbi1jb3VudDogNjsKICB9Cn0KLyogTWFrZSBlbGVtZW50IHNwYW4gYWNyb3NzIGFsbCBjb2x1bW5zCiAqIERvZXMgbm90IHdvcmsgaW4gRmlyZWZveCB5ZXQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1jb2x1bW4tc3BhbiB7CiAgY29sdW1uLXNwYW46IGFsbDsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBDb3ZlcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogV29ya3Mgd2l0aCBpZnJhbWVzIGFuZCBlbWJlZGRlZCBjb250ZW50CiAqIDEuIFVzZSBhdHRyaWJ1dGUgdG8gYXBwbHkgdHJhbnNmb3JtIGluc3RhbnRseS4gTmVlZGVkIGlmIHRyYW5zZm9ybSBpcyB0cmFuc2l0aW9uZWQuCiAqIDIuIFJlc2V0IHJlc3BvbnNpdmVuZXNzIGZvciBlbWJlZGRlZCBjb250ZW50CiAqIDMuIENlbnRlciBvYmplY3QKICogTm90ZTogUGVyY2VudCB2YWx1ZXMgb24gdGhlIGB0b3BgIHByb3BlcnR5IG9ubHkgd29ya3MgaWYgdGhpcyBlbGVtZW50CiAqICAgICAgIGlzIGFic29sdXRlIHBvc2l0aW9uZWQgb3IgaWYgdGhlIGNvbnRhaW5lciBoYXMgYSBoZWlnaHQKICovCi8qIDEgKi8KW3VrLWNvdmVyXSwKW2RhdGEtdWstY292ZXJdIHsKICAvKiAyICovCiAgbWF4LXdpZHRoOiBub25lOwogIC8qIDMgKi8KICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgbGVmdDogNTAlOwogIHRvcDogNTAlOwogIC0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXg6IC01MCU7CiAgLS11ay1wb3NpdGlvbi10cmFuc2xhdGUteTogLTUwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSh2YXIoLS11ay1wb3NpdGlvbi10cmFuc2xhdGUteCksIHZhcigtLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS15KSk7Cn0KaWZyYW1lW3VrLWNvdmVyXSwKaWZyYW1lW2RhdGEtdWstY292ZXJdIHsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQovKiBDb250YWluZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFBhcmVudCBjb250YWluZXIgd2hpY2ggY2xpcHMgcmVzaXplZCBvYmplY3QKICogMi4gTmVlZGVkIGlmIHRoZSBjaGlsZCBpcyBwb3NpdGlvbmVkIGFic29sdXRlLiBTZWUgbm90ZSBhYm92ZQogKi8KLnVrLWNvdmVyLWNvbnRhaW5lciB7CiAgLyogMSAqLwogIG92ZXJmbG93OiBoaWRkZW47CiAgLyogMiAqLwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBCYWNrZ3JvdW5kCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBDb2xvcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWJhY2tncm91bmQtZGVmYXVsdCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKfQoudWstYmFja2dyb3VuZC1tdXRlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsKfQoudWstYmFja2dyb3VuZC1wcmltYXJ5IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWU4N2YwOwp9Ci51ay1iYWNrZ3JvdW5kLXNlY29uZGFyeSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsKfQovKiBTaXplCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstYmFja2dyb3VuZC1jb3ZlciwKLnVrLWJhY2tncm91bmQtY29udGFpbiwKLnVrLWJhY2tncm91bmQtd2lkdGgtMS0xLAoudWstYmFja2dyb3VuZC1oZWlnaHQtMS0xIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNTAlOwogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7Cn0KLnVrLWJhY2tncm91bmQtY292ZXIgewogIGJhY2tncm91bmQtc2l6ZTogY292ZXI7Cn0KLnVrLWJhY2tncm91bmQtY29udGFpbiB7CiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluOwp9Ci51ay1iYWNrZ3JvdW5kLXdpZHRoLTEtMSB7CiAgYmFja2dyb3VuZC1zaXplOiAxMDAlOwp9Ci51ay1iYWNrZ3JvdW5kLWhlaWdodC0xLTEgewogIGJhY2tncm91bmQtc2l6ZTogYXV0byAxMDAlOwp9Ci8qIFBvc2l0aW9uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstYmFja2dyb3VuZC10b3AtbGVmdCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOwp9Ci51ay1iYWNrZ3JvdW5kLXRvcC1jZW50ZXIgewogIGJhY2tncm91bmQtcG9zaXRpb246IDUwJSAwOwp9Ci51ay1iYWNrZ3JvdW5kLXRvcC1yaWdodCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSAwOwp9Ci51ay1iYWNrZ3JvdW5kLWNlbnRlci1sZWZ0IHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDUwJTsKfQoudWstYmFja2dyb3VuZC1jZW50ZXItY2VudGVyIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNTAlOwp9Ci51ay1iYWNrZ3JvdW5kLWNlbnRlci1yaWdodCB7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSA1MCU7Cn0KLnVrLWJhY2tncm91bmQtYm90dG9tLWxlZnQgewogIGJhY2tncm91bmQtcG9zaXRpb246IDAgMTAwJTsKfQoudWstYmFja2dyb3VuZC1ib3R0b20tY2VudGVyIHsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgMTAwJTsKfQoudWstYmFja2dyb3VuZC1ib3R0b20tcmlnaHQgewogIGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgMTAwJTsKfQovKiBSZXBlYXQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1iYWNrZ3JvdW5kLW5vcmVwZWF0IHsKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Owp9Ci8qIEF0dGFjaG1lbnQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIEZpeCBidWcgaW50cm9kdWNlZCBpbiBDaHJvbWUgNjc6IHRoZSBiYWNrZ3JvdW5kIGltYWdlIGlzIG5vdCB2aXNpYmxlIGlmIGFueSBlbGVtZW50IG9uIHRoZSBwYWdlIHVzZXMgYHRyYW5zbGF0ZTNkYAogKi8KLnVrLWJhY2tncm91bmQtZml4ZWQgewogIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CiAgLyogMSAqLwogIGJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjsKfQovKgogKiBFeGNsdWRlIHRvdWNoIGRldmljZXMgYmVjYXVzZSBgZml4ZWRgIGRvZXNuJ3Qgd29yayBvbiBpT1MgYW5kIEFuZHJvaWQKICovCkBtZWRpYSAocG9pbnRlcjogY29hcnNlKSB7CiAgLnVrLWJhY2tncm91bmQtZml4ZWQgewogICAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBzY3JvbGw7CiAgfQp9Ci8qIEltYWdlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBQaG9uZSBwb3J0cmFpdCBhbmQgc21hbGxlciAqLwpAbWVkaWEgKG1heC13aWR0aDogNjM5cHgpIHsKICAudWstYmFja2dyb3VuZC1pbWFnZVxAcyB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lICFpbXBvcnRhbnQ7CiAgfQp9Ci8qIFBob25lIGxhbmRzY2FwZSBhbmQgc21hbGxlciAqLwpAbWVkaWEgKG1heC13aWR0aDogOTU5cHgpIHsKICAudWstYmFja2dyb3VuZC1pbWFnZVxAbSB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lICFpbXBvcnRhbnQ7CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIHNtYWxsZXIgKi8KQG1lZGlhIChtYXgtd2lkdGg6IDExOTlweCkgewogIC51ay1iYWNrZ3JvdW5kLWltYWdlXEBsIHsKICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KLyogRGVza3RvcCBhbmQgc21hbGxlciAqLwpAbWVkaWEgKG1heC13aWR0aDogMTU5OXB4KSB7CiAgLnVrLWJhY2tncm91bmQtaW1hZ2VcQHhsIHsKICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KLyogQmxlbmQgbW9kZXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1iYWNrZ3JvdW5kLWJsZW5kLW11bHRpcGx5IHsKICBiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6IG11bHRpcGx5Owp9Ci51ay1iYWNrZ3JvdW5kLWJsZW5kLXNjcmVlbiB7CiAgYmFja2dyb3VuZC1ibGVuZC1tb2RlOiBzY3JlZW47Cn0KLnVrLWJhY2tncm91bmQtYmxlbmQtb3ZlcmxheSB7CiAgYmFja2dyb3VuZC1ibGVuZC1tb2RlOiBvdmVybGF5Owp9Ci51ay1iYWNrZ3JvdW5kLWJsZW5kLWRhcmtlbiB7CiAgYmFja2dyb3VuZC1ibGVuZC1tb2RlOiBkYXJrZW47Cn0KLnVrLWJhY2tncm91bmQtYmxlbmQtbGlnaHRlbiB7CiAgYmFja2dyb3VuZC1ibGVuZC1tb2RlOiBsaWdodGVuOwp9Ci51ay1iYWNrZ3JvdW5kLWJsZW5kLWNvbG9yLWRvZGdlIHsKICBiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6IGNvbG9yLWRvZGdlOwp9Ci51ay1iYWNrZ3JvdW5kLWJsZW5kLWNvbG9yLWJ1cm4gewogIGJhY2tncm91bmQtYmxlbmQtbW9kZTogY29sb3ItYnVybjsKfQoudWstYmFja2dyb3VuZC1ibGVuZC1oYXJkLWxpZ2h0IHsKICBiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6IGhhcmQtbGlnaHQ7Cn0KLnVrLWJhY2tncm91bmQtYmxlbmQtc29mdC1saWdodCB7CiAgYmFja2dyb3VuZC1ibGVuZC1tb2RlOiBzb2Z0LWxpZ2h0Owp9Ci51ay1iYWNrZ3JvdW5kLWJsZW5kLWRpZmZlcmVuY2UgewogIGJhY2tncm91bmQtYmxlbmQtbW9kZTogZGlmZmVyZW5jZTsKfQoudWstYmFja2dyb3VuZC1ibGVuZC1leGNsdXNpb24gewogIGJhY2tncm91bmQtYmxlbmQtbW9kZTogZXhjbHVzaW9uOwp9Ci51ay1iYWNrZ3JvdW5kLWJsZW5kLWh1ZSB7CiAgYmFja2dyb3VuZC1ibGVuZC1tb2RlOiBodWU7Cn0KLnVrLWJhY2tncm91bmQtYmxlbmQtc2F0dXJhdGlvbiB7CiAgYmFja2dyb3VuZC1ibGVuZC1tb2RlOiBzYXR1cmF0aW9uOwp9Ci51ay1iYWNrZ3JvdW5kLWJsZW5kLWNvbG9yIHsKICBiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6IGNvbG9yOwp9Ci51ay1iYWNrZ3JvdW5kLWJsZW5kLWx1bWlub3NpdHkgewogIGJhY2tncm91bmQtYmxlbmQtbW9kZTogbHVtaW5vc2l0eTsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBBbGlnbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogRGVmYXVsdAogKi8KW2NsYXNzKj0ndWstYWxpZ24nXSB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luLWJvdHRvbTogMzBweDsKfQoqICsgW2NsYXNzKj0ndWstYWxpZ24nXSB7CiAgbWFyZ2luLXRvcDogMzBweDsKfQovKgogKiBDZW50ZXIKICovCi51ay1hbGlnbi1jZW50ZXIgewogIG1hcmdpbi1sZWZ0OiBhdXRvOwogIG1hcmdpbi1yaWdodDogYXV0bzsKfQovKgogKiBMZWZ0L1JpZ2h0CiAqLwoudWstYWxpZ24tbGVmdCB7CiAgbWFyZ2luLXRvcDogMDsKICBtYXJnaW4tcmlnaHQ6IDMwcHg7CiAgZmxvYXQ6IGxlZnQ7Cn0KLnVrLWFsaWduLXJpZ2h0IHsKICBtYXJnaW4tdG9wOiAwOwogIG1hcmdpbi1sZWZ0OiAzMHB4OwogIGZsb2F0OiByaWdodDsKfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAudWstYWxpZ24tbGVmdFxAcyB7CiAgICBtYXJnaW4tdG9wOiAwOwogICAgbWFyZ2luLXJpZ2h0OiAzMHB4OwogICAgZmxvYXQ6IGxlZnQ7CiAgfQogIC51ay1hbGlnbi1yaWdodFxAcyB7CiAgICBtYXJnaW4tdG9wOiAwOwogICAgbWFyZ2luLWxlZnQ6IDMwcHg7CiAgICBmbG9hdDogcmlnaHQ7CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstYWxpZ24tbGVmdFxAbSB7CiAgICBtYXJnaW4tdG9wOiAwOwogICAgbWFyZ2luLXJpZ2h0OiAzMHB4OwogICAgZmxvYXQ6IGxlZnQ7CiAgfQogIC51ay1hbGlnbi1yaWdodFxAbSB7CiAgICBtYXJnaW4tdG9wOiAwOwogICAgbWFyZ2luLWxlZnQ6IDMwcHg7CiAgICBmbG9hdDogcmlnaHQ7CiAgfQp9Ci8qIERlc2t0b3AgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CiAgLnVrLWFsaWduLWxlZnRcQGwgewogICAgbWFyZ2luLXRvcDogMDsKICAgIGZsb2F0OiBsZWZ0OwogIH0KICAudWstYWxpZ24tcmlnaHRcQGwgewogICAgbWFyZ2luLXRvcDogMDsKICAgIGZsb2F0OiByaWdodDsKICB9CiAgLnVrLWFsaWduLWxlZnQsCiAgLnVrLWFsaWduLWxlZnRcQHMsCiAgLnVrLWFsaWduLWxlZnRcQG0sCiAgLnVrLWFsaWduLWxlZnRcQGwgewogICAgbWFyZ2luLXJpZ2h0OiA0MHB4OwogIH0KICAudWstYWxpZ24tcmlnaHQsCiAgLnVrLWFsaWduLXJpZ2h0XEBzLAogIC51ay1hbGlnbi1yaWdodFxAbSwKICAudWstYWxpZ24tcmlnaHRcQGwgewogICAgbWFyZ2luLWxlZnQ6IDQwcHg7CiAgfQp9Ci8qIExhcmdlIHNjcmVlbiBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxNjAwcHgpIHsKICAudWstYWxpZ24tbGVmdFxAeGwgewogICAgbWFyZ2luLXRvcDogMDsKICAgIG1hcmdpbi1yaWdodDogNDBweDsKICAgIGZsb2F0OiBsZWZ0OwogIH0KICAudWstYWxpZ24tcmlnaHRcQHhsIHsKICAgIG1hcmdpbi10b3A6IDA7CiAgICBtYXJnaW4tbGVmdDogNDBweDsKICAgIGZsb2F0OiByaWdodDsKICB9Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogU1ZHCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBGaWxsIGFsbCBTVkcgZWxlbWVudHMgd2l0aCB0aGUgY3VycmVudCB0ZXh0IGNvbG9yIGlmIG5vIGBmaWxsYCBhdHRyaWJ1dGUgaXMgc2V0CiAqIDIuIFNldCB0aGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9yIG9mIGFsbCBTVkcgZWxlbWVudHMgdG8gdGhlIGN1cnJlbnQgdGV4dCBjb2xvcgogKi8KLyogMSAqLwoudWstc3ZnLAoudWstc3ZnOm5vdCgudWstcHJlc2VydmUpIFtmaWxsKj0nIyddOm5vdCgudWstcHJlc2VydmUpIHsKICBmaWxsOiBjdXJyZW50Y29sb3I7Cn0KLnVrLXN2Zzpub3QoLnVrLXByZXNlcnZlKSBbc3Ryb2tlKj0nIyddOm5vdCgudWstcHJlc2VydmUpIHsKICBzdHJva2U6IGN1cnJlbnRjb2xvcjsKfQovKgogKiBGaXggRmlyZWZveCBibHVycnkgU1ZHIHJlbmRlcmluZzogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0NjgzNQogKi8KLnVrLXN2ZyB7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogU3dpdGNoCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKLnVrLXN3aXRjaCB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBoZWlnaHQ6IDE3cHg7CiAgd2lkdGg6IDMwcHg7Cn0KCi8qIEhpZGUgZGVmYXVsdCBIVE1MIGNoZWNrYm94ICovCi51ay1zd2l0Y2ggaW5wdXQgewogIGRpc3BsYXk6bm9uZTsKfQovKiBTbGlkZXIgKi8KLnVrLXN3aXRjaC1zbGlkZXIgewogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwwLDAsMC4yMik7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsKICBsZWZ0OiAwOwogIHJpZ2h0OiAwOwogIGJvcmRlci1yYWRpdXM6IDUwMHB4OwogIGJvdHRvbTogMDsKICBjdXJzb3I6IHBvaW50ZXI7CiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZC1jb2xvcjsKICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAuMnM7CiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDJweCByZ2JhKDAsMCwwLDAuMDcpOwp9Ci8qIFN3aXRjaCBwb2ludGVyICovCi51ay1zd2l0Y2gtc2xpZGVyOmJlZm9yZSB7CiAgY29udGVudDogJyc7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgd2lkdGg6IDE1cHg7CiAgaGVpZ2h0OiAxNXB4OwogIGxlZnQ6IDFweDsKICBib3R0b206IDFweDsKICBib3JkZXItcmFkaXVzOiA1MCU7CiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBib3gtc2hhZG93OwogIHRyYW5zaXRpb24tZHVyYXRpb246IC4yczsKfQovKiBTbGlkZXIgYWN0aXZlIGNvbG9yICovCmlucHV0OmNoZWNrZWQgKyAudWstc3dpdGNoLXNsaWRlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzM5ZiAhaW1wb3J0YW50Owp9Ci8qIFBvaW50ZXIgYWN0aXZlIGFuaW1hdGlvbiAqLwppbnB1dDpjaGVja2VkICsgLnVrLXN3aXRjaC1zbGlkZXI6YmVmb3JlIHsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTNweCk7Cn0KCi8qIE1vZGlmaWVycyAqLwoudWstc3dpdGNoLXNsaWRlci51ay1zd2l0Y2gtb24tb2ZmIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjA1MDZlOwp9CmlucHV0OmNoZWNrZWQgKyAudWstc3dpdGNoLXNsaWRlci51ay1zd2l0Y2gtb24tb2ZmIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzJkMjk2ICFpbXBvcnRhbnQ7Cn0KCi8qIFN0eWxlIE1vZGlmaWVyICovCi51ay1zd2l0Y2gtc2xpZGVyLnVrLXN3aXRjaC1iaWc6YmVmb3JlIHsKICB0cmFuc2Zvcm06IHNjYWxlKDEuMik7CiAgYm94LXNoYWRvdzogMCAwIDZweCByZ2JhKDAsMCwwLDAuMjIpOwp9Ci51ay1zd2l0Y2gtc2xpZGVyLnVrLXN3aXRjaC1zbWFsbDpiZWZvcmUgewogIGJveC1zaGFkb3c6IDAgMCA2cHggcmdiYSgwLDAsMCwwLjIyKTsKfQppbnB1dDpjaGVja2VkICsgLnVrLXN3aXRjaC1zbGlkZXIudWstc3dpdGNoLWJpZzpiZWZvcmUgewogIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxM3B4KSBzY2FsZSgxLjIpOwp9CgovKiBJbnZlcnNlIE1vZGlmaWVyIC0gYWZmZWN0cyBvbmx5IGRlZmF1bHQgKi8KLnVrLWxpZ2h0IC51ay1zd2l0Y2gtc2xpZGVyOm5vdCgudWstc3dpdGNoLW9uLW9mZikgewogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4yMik7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IFV0aWxpdHkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIFBhbmVsCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstcGFuZWwgewogIGRpc3BsYXk6IGZsb3ctcm9vdDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQovKgogKiBSZW1vdmUgbWFyZ2luIGZyb20gdGhlIGxhc3QtY2hpbGQKICovCi51ay1wYW5lbCA+IDpsYXN0LWNoaWxkIHsKICBtYXJnaW4tYm90dG9tOiAwOwp9Ci8qCiAqIFNjcm9sbGFibGUKICovCi51ay1wYW5lbC1zY3JvbGxhYmxlIHsKICBoZWlnaHQ6IDE3MHB4OwogIHBhZGRpbmc6IDEwcHg7CiAgYm9yZGVyOiAxcHggc29saWQgI2U1ZTVlNTsKICBvdmVyZmxvdzogYXV0bzsKICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgcmVzaXplOiBib3RoOwp9Ci8qIENsZWFyZml4CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiAxLiBgdGFibGUtY2VsbGAgaXMgdXNlZCB3aXRoIGA6OmJlZm9yZWAgYmVjYXVzZSBgdGFibGVgIGNyZWF0ZXMgYSAxcHggZ2FwIHdoZW4gaXQgYmVjb21lcyBhIGZsZXggaXRlbSwgb25seSBpbiBXZWJraXQKICogMi4gYHRhYmxlYCBpcyB1c2VkIGFnYWluIHdpdGggYDo6YWZ0ZXJgIGJlY2F1c2UgYGNsZWFyYCBvbmx5IHdvcmtzIHdpdGggYmxvY2sgZWxlbWVudHMuCiAqIE5vdGU6IGBkaXNwbGF5OiBibG9ja2Agd2l0aCBgb3ZlcmZsb3c6IGhpZGRlbmAgaXMgY3VycmVudGx5IG5vdCB3b3JraW5nIGluIHRoZSBsYXRlc3QgU2FmYXJpCiAqLwovKiAxICovCi51ay1jbGVhcmZpeDo6YmVmb3JlIHsKICBjb250ZW50OiAiIjsKICBkaXNwbGF5OiB0YWJsZS1jZWxsOwp9Ci8qIDIgKi8KLnVrLWNsZWFyZml4OjphZnRlciB7CiAgY29udGVudDogIiI7CiAgZGlzcGxheTogdGFibGU7CiAgY2xlYXI6IGJvdGg7Cn0KLyogRmxvYXQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFByZXZlbnQgY29udGVudCBvdmVyZmxvdwogKi8KLnVrLWZsb2F0LWxlZnQgewogIGZsb2F0OiBsZWZ0Owp9Ci51ay1mbG9hdC1yaWdodCB7CiAgZmxvYXQ6IHJpZ2h0Owp9Ci8qIDEgKi8KW2NsYXNzKj0ndWstZmxvYXQtJ10gewogIG1heC13aWR0aDogMTAwJTsKfQovKiBPdmVyZm93CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstb3ZlcmZsb3ctaGlkZGVuIHsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci8qCiAqIEVuYWJsZSBzY3JvbGxiYXJzIGlmIGNvbnRlbnQgaXMgY2xpcHBlZAogKi8KLnVrLW92ZXJmbG93LWF1dG8gewogIG92ZXJmbG93OiBhdXRvOwogIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKfQoudWstb3ZlcmZsb3ctYXV0byA+IDpsYXN0LWNoaWxkIHsKICBtYXJnaW4tYm90dG9tOiAwOwp9Ci8qIEJveCBTaXppbmcKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1ib3gtc2l6aW5nLWNvbnRlbnQgewogIGJveC1zaXppbmc6IGNvbnRlbnQtYm94Owp9Ci51ay1ib3gtc2l6aW5nLWJvcmRlciB7CiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQovKiBSZXNpemUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1yZXNpemUgewogIHJlc2l6ZTogYm90aDsKfQoudWstcmVzaXplLWhvcml6b250YWwgewogIHJlc2l6ZTogaG9yaXpvbnRhbDsKfQoudWstcmVzaXplLXZlcnRpY2FsIHsKICByZXNpemU6IHZlcnRpY2FsOwp9Ci8qIERpc3BsYXkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1kaXNwbGF5LWJsb2NrIHsKICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50Owp9Ci51ay1kaXNwbGF5LWlubGluZSB7CiAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7Cn0KLnVrLWRpc3BsYXktaW5saW5lLWJsb2NrIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsKfQovKiBJbmxpbmUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIENvbnRhaW5lciBmaXRzIGl0cyBjb250ZW50CiAqIDIuIENyZWF0ZSBwb3NpdGlvbiBjb250ZXh0CiAqIDMuIFByZXZlbnQgY29udGVudCBvdmVyZmxvdwogKiA0LiBCZWhhdmUgbGlrZSBtb3N0IGlubGluZS1ibG9jayBlbGVtZW50cwogKiA1LiBGb3JjZSBuZXcgbGF5ZXIgd2l0aG91dCBjcmVhdGluZyBhIG5ldyBzdGFja2luZyBjb250ZXh0CiAqICAgIHRvIGZpeCAxcHggZ2xpdGNoIHdoZW4gY29tYmluZWQgd2l0aCBvdmVybGF5cyBhbmQgdHJhbnNpdGlvbnMgaW4gV2Via2l0CiAqIDYuIENsaXAgY2hpbGQgZWxlbWVudHMKICovCltjbGFzcyo9J3VrLWlubGluZSddIHsKICAvKiAxICovCiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIC8qIDIgKi8KICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgLyogMyAqLwogIG1heC13aWR0aDogMTAwJTsKICAvKiA0ICovCiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAvKiA1ICovCiAgLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47Cn0KLnVrLWlubGluZS1jbGlwIHsKICAvKiA2ICovCiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQovKiBSZXNwb25zaXZlIG9iamVjdHMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIFByZXNlcnZlIG9yaWdpbmFsIGRpbWVuc2lvbnMKICogQmVjYXVzZSBgaW1nLCBgdmlkZW9gLCBgY2FudmFzYCBhbmQgIGBhdWRpb2AgYXJlIGFscmVhZHkgcmVzcG9uc2l2ZSBieSBkZWZhdWx0LCBzZWUgQmFzZSBjb21wb25lbnQKICovCi51ay1wcmVzZXJ2ZS13aWR0aCwKLnVrLXByZXNlcnZlLXdpZHRoIGNhbnZhcywKLnVrLXByZXNlcnZlLXdpZHRoIGltZywKLnVrLXByZXNlcnZlLXdpZHRoIHN2ZywKLnVrLXByZXNlcnZlLXdpZHRoIHZpZGVvIHsKICBtYXgtd2lkdGg6IG5vbmU7Cn0KLyoKICogUmVzcG9uc2l2ZW5lc3MKICogQ29ycmVjdHMgYG1heC13aWR0aGAgYW5kIGBtYXgtaGVpZ2h0YCBiZWhhdmlvciBpZiBwYWRkaW5nIGFuZCBib3JkZXIgYXJlIHVzZWQKICovCi51ay1yZXNwb25zaXZlLXdpZHRoLAoudWstcmVzcG9uc2l2ZS1oZWlnaHQgewogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KLyoKICogMS4gU2V0IGEgbWF4aW11bSB3aWR0aC4gYGltcG9ydGFudGAgbmVlZGVkIHRvIG92ZXJyaWRlIGB1ay1wcmVzZXJ2ZS13aWR0aCBpbWdgCiAqIDIuIEF1dG8gc2NhbGUgdGhlIGhlaWdodC4gT25seSBuZWVkZWQgaWYgYGhlaWdodGAgYXR0cmlidXRlIGlzIHByZXNlbnQKICovCi51ay1yZXNwb25zaXZlLXdpZHRoIHsKICAvKiAxICovCiAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7CiAgLyogMiAqLwogIGhlaWdodDogYXV0bzsKfQovKgogKiAxLiBTZXQgYSBtYXhpbXVtIGhlaWdodC4gT25seSB3b3JrcyBpZiB0aGUgcGFyZW50IGVsZW1lbnQgaGFzIGEgZml4ZWQgaGVpZ2h0CiAqIDIuIEF1dG8gc2NhbGUgdGhlIHdpZHRoLiBPbmx5IG5lZWRlZCBpZiBgd2lkdGhgIGF0dHJpYnV0ZSBpcyBwcmVzZW50CiAqIDMuIFJlc2V0IG1heC13aWR0aCwgd2hpY2ggYGltZywgYHZpZGVvYCwgYGNhbnZhc2AgYW5kICBgYXVkaW9gIGFscmVhZHkgaGF2ZSBieSBkZWZhdWx0CiAqLwoudWstcmVzcG9uc2l2ZS1oZWlnaHQgewogIC8qIDEgKi8KICBtYXgtaGVpZ2h0OiAxMDAlOwogIC8qIDIgKi8KICB3aWR0aDogYXV0bzsKICAvKiAzICovCiAgbWF4LXdpZHRoOiBub25lOwp9Ci8qCiAqIEZpeCBpbml0aWFsIGlmcmFtZSB3aWR0aC4gV2l0aG91dCB0aGUgdmlld3BvcnQgaXMgZXhwYW5kZWQgb24gaU9TIGRldmljZXMKICovClt1ay1yZXNwb25zaXZlXSwKW2RhdGEtdWstcmVzcG9uc2l2ZV0gewogIG1heC13aWR0aDogMTAwJTsKfQovKiBPYmplY3QKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1vYmplY3QtY292ZXIgewogIG9iamVjdC1maXQ6IGNvdmVyOwp9Ci51ay1vYmplY3QtY29udGFpbiB7CiAgb2JqZWN0LWZpdDogY29udGFpbjsKfQoudWstb2JqZWN0LWZpbGwgewogIG9iamVjdC1maXQ6IGZpbGw7Cn0KLnVrLW9iamVjdC1ub25lIHsKICBvYmplY3QtZml0OiBub25lOwp9Ci51ay1vYmplY3Qtc2NhbGUtZG93biB7CiAgb2JqZWN0LWZpdDogc2NhbGUtZG93bjsKfQovKgogKiBQb3NpdGlvbgogKi8KLnVrLW9iamVjdC10b3AtbGVmdCB7CiAgb2JqZWN0LXBvc2l0aW9uOiAwIDA7Cn0KLnVrLW9iamVjdC10b3AtY2VudGVyIHsKICBvYmplY3QtcG9zaXRpb246IDUwJSAwOwp9Ci51ay1vYmplY3QtdG9wLXJpZ2h0IHsKICBvYmplY3QtcG9zaXRpb246IDEwMCUgMDsKfQoudWstb2JqZWN0LWNlbnRlci1sZWZ0IHsKICBvYmplY3QtcG9zaXRpb246IDAgNTAlOwp9Ci51ay1vYmplY3QtY2VudGVyLWNlbnRlciB7CiAgb2JqZWN0LXBvc2l0aW9uOiA1MCUgNTAlOwp9Ci51ay1vYmplY3QtY2VudGVyLXJpZ2h0IHsKICBvYmplY3QtcG9zaXRpb246IDEwMCUgNTAlOwp9Ci51ay1vYmplY3QtYm90dG9tLWxlZnQgewogIG9iamVjdC1wb3NpdGlvbjogMCAxMDAlOwp9Ci51ay1vYmplY3QtYm90dG9tLWNlbnRlciB7CiAgb2JqZWN0LXBvc2l0aW9uOiA1MCUgMTAwJTsKfQoudWstb2JqZWN0LWJvdHRvbS1yaWdodCB7CiAgb2JqZWN0LXBvc2l0aW9uOiAxMDAlIDEwMCU7Cn0KLyogQm9yZGVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstYm9yZGVyLWNpcmNsZSB7CiAgYm9yZGVyLXJhZGl1czogNTAlOwp9Ci51ay1ib3JkZXItcGlsbCB7CiAgYm9yZGVyLXJhZGl1czogNTAwcHg7Cn0KLnVrLWJvcmRlci1yb3VuZGVkIHsKICBib3JkZXItcmFkaXVzOiA1cHg7Cn0KLyoKICogRml4IGBvdmVyZmxvdzogaGlkZGVuYCB0byBiZSBpZ25vcmVkIHdpdGggYm9yZGVyLXJhZGl1cyBhbmQgQ1NTIHRyYW5zZm9ybXMgaW4gV2Via2l0CiAqLwoudWstaW5saW5lLWNsaXBbY2xhc3MqPSd1ay1ib3JkZXItJ10gewogIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwp9Ci8qIEJveC1zaGFkb3cKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1ib3gtc2hhZG93LXNtYWxsIHsKICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjA4KTsKfQoudWstYm94LXNoYWRvdy1tZWRpdW0gewogIGJveC1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjA4KTsKfQoudWstYm94LXNoYWRvdy1sYXJnZSB7CiAgYm94LXNoYWRvdzogMCAxNHB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjE2KTsKfQoudWstYm94LXNoYWRvdy14bGFyZ2UgewogIGJveC1zaGFkb3c6IDAgMjhweCA1MHB4IHJnYmEoMCwgMCwgMCwgMC4xNik7Cn0KLyoKICogSG92ZXIKICovCltjbGFzcyo9J3VrLWJveC1zaGFkb3ctaG92ZXInXSB7CiAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjFzIGVhc2UtaW4tb3V0Owp9Ci51ay1ib3gtc2hhZG93LWhvdmVyLXNtYWxsOmhvdmVyIHsKICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjA4KTsKfQoudWstYm94LXNoYWRvdy1ob3Zlci1tZWRpdW06aG92ZXIgewogIGJveC1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjA4KTsKfQoudWstYm94LXNoYWRvdy1ob3Zlci1sYXJnZTpob3ZlciB7CiAgYm94LXNoYWRvdzogMCAxNHB4IDI1cHggcmdiYSgwLCAwLCAwLCAwLjE2KTsKfQoudWstYm94LXNoYWRvdy1ob3Zlci14bGFyZ2U6aG92ZXIgewogIGJveC1zaGFkb3c6IDAgMjhweCA1MHB4IHJnYmEoMCwgMCwgMCwgMC4xNik7Cn0KLyogQm94LXNoYWRvdyBib3R0b20KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFNldCBwb3NpdGlvbi4KICogMi4gU2V0IHN0eWxlCiAqIDMuIEZpeCBzaGFkb3cgYmVpbmcgY2xpcHBlZCBpbiBTYWZhcmkgaWYgY29udGFpbmVyIGlzIGFuaW1hdGVkCiAqLwpAc3VwcG9ydHMgKGZpbHRlcjogYmx1cigwKSkgewogIC51ay1ib3gtc2hhZG93LWJvdHRvbSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAwOwogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICB9CiAgLnVrLWJveC1zaGFkb3ctYm90dG9tOjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIC8qIDEgKi8KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJvdHRvbTogLTMwcHg7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICB6LWluZGV4OiAtMTsKICAgIC8qIDIgKi8KICAgIGhlaWdodDogMzBweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICBiYWNrZ3JvdW5kOiAjNDQ0OwogICAgZmlsdGVyOiBibHVyKDIwcHgpOwogICAgLyogMyAqLwogICAgd2lsbC1jaGFuZ2U6IGZpbHRlcjsKICB9Cn0KLyogRHJvcCBjYXAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIEZpcmVmb3ggZG9lc24ndCBhcHBseSBgOjpmaXJzdC1sZXR0ZXJgIGlmIHRoZSBmaXJzdCBsZXR0ZXIgaXMgaW5zaWRlIGNoaWxkIGVsZW1lbnRzCiAqICAgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDAwNAogKiAyLiBJbiBGaXJlZm94LCBhIGZsb2F0aW5nIGA6OmZpcnN0LWxldHRlcmAgZG9lc24ndCBoYXZlIGEgbGluZSBib3ggYW5kIHRoZXJlIGZvciBubyBgbGluZS1oZWlnaHRgCiAqICAgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTMxNzkzMwogKi8KLnVrLWRyb3BjYXA6OmZpcnN0LWxldHRlciwKLnVrLWRyb3BjYXAgPiBwOmZpcnN0LW9mLXR5cGU6OmZpcnN0LWxldHRlciB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogIGZsb2F0OiBsZWZ0OwogIGZvbnQtc2l6ZTogNC41ZW07CiAgbGluZS1oZWlnaHQ6IDE7CiAgbWFyZ2luLWJvdHRvbTogLTJweDsKfQovKiAyICovCkAtbW96LWRvY3VtZW50IHVybC1wcmVmaXgoKSB7CiAgLnVrLWRyb3BjYXA6OmZpcnN0LWxldHRlciwKICAudWstZHJvcGNhcCA+IHA6Zmlyc3Qtb2YtdHlwZTo6Zmlyc3QtbGV0dGVyIHsKICAgIG1hcmdpbi10b3A6IDEuMSU7CiAgfQp9Ci8qIExvZ28KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFN0eWxlCiAqIDIuIFJlcXVpcmVkIGZvciBgYWAKICogMy4gQmVoYXZlIGxpa2UgaW1hZ2UgYnV0IGNhbiBiZSBvdmVycmlkZGVuIHRocm91Z2ggZmxleCB1dGlsaXR5IGNsYXNzZXMKICovCi51ay1sb2dvIHsKICAvKiAxICovCiAgZm9udC1zaXplOiAxLjVyZW07CiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBBcmlhbCwgIk5vdG8gU2FucyIsIHNhbnMtc2VyaWYsICJBcHBsZSBDb2xvciBFbW9qaSIsICJTZWdvZSBVSSBFbW9qaSIsICJTZWdvZSBVSSBTeW1ib2wiLCAiTm90byBDb2xvciBFbW9qaSI7CiAgY29sb3I6ICMzMzM7CiAgLyogMiAqLwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQovKiAzICovCjp3aGVyZSgudWstbG9nbykgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwp9Ci8qIEhvdmVyICovCi51ay1sb2dvOmhvdmVyIHsKICBjb2xvcjogIzMzMzsKICAvKiAxICovCiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci51ay1sb2dvIDp3aGVyZShpbWcsIHN2ZywgdmlkZW8pIHsKICBkaXNwbGF5OiBibG9jazsKfQoudWstbG9nby1pbnZlcnNlIHsKICBkaXNwbGF5OiBub25lOwp9Ci8qIERpc2FibGVkIFN0YXRlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstZGlzYWJsZWQgewogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Ci8qIERyYWcgU3RhdGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIE5lZWRlZCBpZiBtb3Zpbmcgb3ZlciBlbGVtZW50cyB3aXRoIGhhdmUgdGhlaXIgb3duIGN1cnNvciBvbiBob3ZlciwgZS5nLiBsaW5rcyBvciBidXR0b25zCiAqIDIuIEZpeCBkcmFnZ2luZyBvdmVyIGlmcmFtZXMKICovCi51ay1kcmFnLAoudWstZHJhZyAqIHsKICBjdXJzb3I6IG1vdmU7Cn0KLyogMiAqLwoudWstZHJhZyBpZnJhbWUgewogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Ci8qIERyYWdvdmVyIFN0YXRlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKgogKiBDcmVhdGUgYSBib3gtc2hhZG93IHdoZW4gZHJhZ2dpbmcgYSBmaWxlIG92ZXIgdGhlIHVwbG9hZCBhcmVhCiAqLwoudWstZHJhZ292ZXIgewogIGJveC1zaGFkb3c6IDAgMCAyMHB4IHJnYmEoMTAwLCAxMDAsIDEwMCwgMC4zKTsKfQovKiBCbGVuZCBtb2RlcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWJsZW5kLW11bHRpcGx5IHsKICBtaXgtYmxlbmQtbW9kZTogbXVsdGlwbHk7Cn0KLnVrLWJsZW5kLXNjcmVlbiB7CiAgbWl4LWJsZW5kLW1vZGU6IHNjcmVlbjsKfQoudWstYmxlbmQtb3ZlcmxheSB7CiAgbWl4LWJsZW5kLW1vZGU6IG92ZXJsYXk7Cn0KLnVrLWJsZW5kLWRhcmtlbiB7CiAgbWl4LWJsZW5kLW1vZGU6IGRhcmtlbjsKfQoudWstYmxlbmQtbGlnaHRlbiB7CiAgbWl4LWJsZW5kLW1vZGU6IGxpZ2h0ZW47Cn0KLnVrLWJsZW5kLWNvbG9yLWRvZGdlIHsKICBtaXgtYmxlbmQtbW9kZTogY29sb3ItZG9kZ2U7Cn0KLnVrLWJsZW5kLWNvbG9yLWJ1cm4gewogIG1peC1ibGVuZC1tb2RlOiBjb2xvci1idXJuOwp9Ci51ay1ibGVuZC1oYXJkLWxpZ2h0IHsKICBtaXgtYmxlbmQtbW9kZTogaGFyZC1saWdodDsKfQoudWstYmxlbmQtc29mdC1saWdodCB7CiAgbWl4LWJsZW5kLW1vZGU6IHNvZnQtbGlnaHQ7Cn0KLnVrLWJsZW5kLWRpZmZlcmVuY2UgewogIG1peC1ibGVuZC1tb2RlOiBkaWZmZXJlbmNlOwp9Ci51ay1ibGVuZC1leGNsdXNpb24gewogIG1peC1ibGVuZC1tb2RlOiBleGNsdXNpb247Cn0KLnVrLWJsZW5kLWh1ZSB7CiAgbWl4LWJsZW5kLW1vZGU6IGh1ZTsKfQoudWstYmxlbmQtc2F0dXJhdGlvbiB7CiAgbWl4LWJsZW5kLW1vZGU6IHNhdHVyYXRpb247Cn0KLnVrLWJsZW5kLWNvbG9yIHsKICBtaXgtYmxlbmQtbW9kZTogY29sb3I7Cn0KLnVrLWJsZW5kLWx1bWlub3NpdHkgewogIG1peC1ibGVuZC1tb2RlOiBsdW1pbm9zaXR5Owp9Ci8qIFRyYW5zZm9ybQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstdHJhbnNmb3JtLWNlbnRlciB7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7Cn0KLyogVHJhbnNmb3JtIE9yaWdpbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstdHJhbnNmb3JtLW9yaWdpbi10b3AtbGVmdCB7CiAgdHJhbnNmb3JtLW9yaWdpbjogMCAwOwp9Ci51ay10cmFuc2Zvcm0tb3JpZ2luLXRvcC1jZW50ZXIgewogIHRyYW5zZm9ybS1vcmlnaW46IDUwJSAwOwp9Ci51ay10cmFuc2Zvcm0tb3JpZ2luLXRvcC1yaWdodCB7CiAgdHJhbnNmb3JtLW9yaWdpbjogMTAwJSAwOwp9Ci51ay10cmFuc2Zvcm0tb3JpZ2luLWNlbnRlci1sZWZ0IHsKICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDUwJTsKfQoudWstdHJhbnNmb3JtLW9yaWdpbi1jZW50ZXItcmlnaHQgewogIHRyYW5zZm9ybS1vcmlnaW46IDEwMCUgNTAlOwp9Ci51ay10cmFuc2Zvcm0tb3JpZ2luLWJvdHRvbS1sZWZ0IHsKICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDEwMCU7Cn0KLnVrLXRyYW5zZm9ybS1vcmlnaW4tYm90dG9tLWNlbnRlciB7CiAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDEwMCU7Cn0KLnVrLXRyYW5zZm9ybS1vcmlnaW4tYm90dG9tLXJpZ2h0IHsKICB0cmFuc2Zvcm0tb3JpZ2luOiAxMDAlIDEwMCU7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogRmxleAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLWZsZXggewogIGRpc3BsYXk6IGZsZXg7Cn0KLnVrLWZsZXgtaW5saW5lIHsKICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKfQovKiBBbGlnbm1lbnQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIEFsaWduIGl0ZW1zIGFsb25nIHRoZSBtYWluIGF4aXMgb2YgdGhlIGN1cnJlbnQgbGluZSBvZiB0aGUgZmxleCBjb250YWluZXIKICogUm93OiBIb3Jpem9udGFsCiAqLwoudWstZmxleC1sZWZ0IHsKICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7Cn0KLnVrLWZsZXgtY2VudGVyIHsKICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKfQoudWstZmxleC1yaWdodCB7CiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKfQoudWstZmxleC1iZXR3ZWVuIHsKICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47Cn0KLnVrLWZsZXgtYXJvdW5kIHsKICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAudWstZmxleC1sZWZ0XEBzIHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICB9CiAgLnVrLWZsZXgtY2VudGVyXEBzIHsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogIH0KICAudWstZmxleC1yaWdodFxAcyB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogIH0KICAudWstZmxleC1iZXR3ZWVuXEBzIHsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICB9CiAgLnVrLWZsZXgtYXJvdW5kXEBzIHsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogIH0KfQovKiBUYWJsZXQgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7CiAgLnVrLWZsZXgtbGVmdFxAbSB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgfQogIC51ay1mbGV4LWNlbnRlclxAbSB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICB9CiAgLnVrLWZsZXgtcmlnaHRcQG0gewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICB9CiAgLnVrLWZsZXgtYmV0d2VlblxAbSB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgfQogIC51ay1mbGV4LWFyb3VuZFxAbSB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICB9Cn0KLyogRGVza3RvcCBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHsKICAudWstZmxleC1sZWZ0XEBsIHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICB9CiAgLnVrLWZsZXgtY2VudGVyXEBsIHsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogIH0KICAudWstZmxleC1yaWdodFxAbCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogIH0KICAudWstZmxleC1iZXR3ZWVuXEBsIHsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICB9CiAgLnVrLWZsZXgtYXJvdW5kXEBsIHsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogIH0KfQovKiBMYXJnZSBzY3JlZW4gYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTYwMHB4KSB7CiAgLnVrLWZsZXgtbGVmdFxAeGwgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogIH0KICAudWstZmxleC1jZW50ZXJcQHhsIHsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogIH0KICAudWstZmxleC1yaWdodFxAeGwgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICB9CiAgLnVrLWZsZXgtYmV0d2VlblxAeGwgewogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogIH0KICAudWstZmxleC1hcm91bmRcQHhsIHsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogIH0KfQovKgogKiBBbGlnbiBpdGVtcyBpbiB0aGUgY3Jvc3MgYXhpcyBvZiB0aGUgY3VycmVudCBsaW5lIG9mIHRoZSBmbGV4IGNvbnRhaW5lcgogKiBSb3c6IFZlcnRpY2FsCiAqLwoudWstZmxleC1zdHJldGNoIHsKICBhbGlnbi1pdGVtczogc3RyZXRjaDsKfQoudWstZmxleC10b3AgewogIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0Owp9Ci51ay1mbGV4LW1pZGRsZSB7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoudWstZmxleC1ib3R0b20gewogIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKfQovKiBEaXJlY3Rpb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1mbGV4LXJvdyB7CiAgZmxleC1kaXJlY3Rpb246IHJvdzsKfQoudWstZmxleC1yb3ctcmV2ZXJzZSB7CiAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwp9Ci51ay1mbGV4LWNvbHVtbiB7CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKfQoudWstZmxleC1jb2x1bW4tcmV2ZXJzZSB7CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwp9Ci8qIFdyYXAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1mbGV4LW5vd3JhcCB7CiAgZmxleC13cmFwOiBub3dyYXA7Cn0KLnVrLWZsZXgtd3JhcCB7CiAgZmxleC13cmFwOiB3cmFwOwp9Ci51ay1mbGV4LXdyYXAtcmV2ZXJzZSB7CiAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7Cn0KLyoKICogQWxpZ25zIGl0ZW1zIHdpdGhpbiB0aGUgZmxleCBjb250YWluZXIgd2hlbiB0aGVyZSBpcyBleHRyYSBzcGFjZSBpbiB0aGUgY3Jvc3MtYXhpcwogKiBPbmx5IHdvcmtzIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgbGluZSBvZiBmbGV4IGl0ZW1zCiAqLwoudWstZmxleC13cmFwLXN0cmV0Y2ggewogIGFsaWduLWNvbnRlbnQ6IHN0cmV0Y2g7Cn0KLnVrLWZsZXgtd3JhcC10b3AgewogIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7Cn0KLnVrLWZsZXgtd3JhcC1taWRkbGUgewogIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKfQoudWstZmxleC13cmFwLWJvdHRvbSB7CiAgYWxpZ24tY29udGVudDogZmxleC1lbmQ7Cn0KLnVrLWZsZXgtd3JhcC1iZXR3ZWVuIHsKICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwp9Ci51ay1mbGV4LXdyYXAtYXJvdW5kIHsKICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7Cn0KLyogSXRlbSBvcmRlcmluZwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogRGVmYXVsdCBpcyAwCiAqLwoudWstZmxleC1maXJzdCB7CiAgb3JkZXI6IC0xOwp9Ci51ay1mbGV4LWxhc3QgewogIG9yZGVyOiA5OTsKfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAudWstZmxleC1maXJzdFxAcyB7CiAgICBvcmRlcjogLTE7CiAgfQogIC51ay1mbGV4LWxhc3RcQHMgewogICAgb3JkZXI6IDk5OwogIH0KfQovKiBUYWJsZXQgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7CiAgLnVrLWZsZXgtZmlyc3RcQG0gewogICAgb3JkZXI6IC0xOwogIH0KICAudWstZmxleC1sYXN0XEBtIHsKICAgIG9yZGVyOiA5OTsKICB9Cn0KLyogRGVza3RvcCBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHsKICAudWstZmxleC1maXJzdFxAbCB7CiAgICBvcmRlcjogLTE7CiAgfQogIC51ay1mbGV4LWxhc3RcQGwgewogICAgb3JkZXI6IDk5OwogIH0KfQovKiBMYXJnZSBzY3JlZW4gYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTYwMHB4KSB7CiAgLnVrLWZsZXgtZmlyc3RcQHhsIHsKICAgIG9yZGVyOiAtMTsKICB9CiAgLnVrLWZsZXgtbGFzdFxAeGwgewogICAgb3JkZXI6IDk5OwogIH0KfQovKiBJdGVtIGRpbWVuc2lvbnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIEluaXRpYWw6IDAgMSBhdXRvCiAqIENvbnRlbnQgZGltZW5zaW9ucywgYnV0IHNocmlua3MKICovCi8qCiAqIE5vIEZsZXg6IDAgMCBhdXRvCiAqIENvbnRlbnQgZGltZW5zaW9ucwogKi8KLnVrLWZsZXgtbm9uZSB7CiAgZmxleDogbm9uZTsKfQovKgogKiBSZWxhdGl2ZSBGbGV4OiAxIDEgYXV0bwogKiBTcGFjZSBpcyBhbGxvY2F0ZWQgY29uc2lkZXJpbmcgY29udGVudAogKi8KLnVrLWZsZXgtYXV0byB7CiAgZmxleDogYXV0bzsKfQovKgogKiBBYnNvbHV0ZSBGbGV4OiAxIDEgMCUKICogU3BhY2UgaXMgYWxsb2NhdGVkIHNvbGVseSBiYXNlZCBvbiBmbGV4CiAqLwoudWstZmxleC0xIHsKICBmbGV4OiAxOwp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IE1hcmdpbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogRGVmYXVsdAogKi8KLnVrLW1hcmdpbiB7CiAgbWFyZ2luLWJvdHRvbTogMjBweDsKfQoqICsgLnVrLW1hcmdpbiB7CiAgbWFyZ2luLXRvcDogMjBweCAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4tdG9wIHsKICBtYXJnaW4tdG9wOiAyMHB4ICFpbXBvcnRhbnQ7Cn0KLnVrLW1hcmdpbi1ib3R0b20gewogIG1hcmdpbi1ib3R0b206IDIwcHggIWltcG9ydGFudDsKfQoudWstbWFyZ2luLWxlZnQgewogIG1hcmdpbi1sZWZ0OiAyMHB4ICFpbXBvcnRhbnQ7Cn0KLnVrLW1hcmdpbi1yaWdodCB7CiAgbWFyZ2luLXJpZ2h0OiAyMHB4ICFpbXBvcnRhbnQ7Cn0KLyogU21hbGwKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1tYXJnaW4tc21hbGwgewogIG1hcmdpbi1ib3R0b206IDEwcHg7Cn0KKiArIC51ay1tYXJnaW4tc21hbGwgewogIG1hcmdpbi10b3A6IDEwcHggIWltcG9ydGFudDsKfQoudWstbWFyZ2luLXNtYWxsLXRvcCB7CiAgbWFyZ2luLXRvcDogMTBweCAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4tc21hbGwtYm90dG9tIHsKICBtYXJnaW4tYm90dG9tOiAxMHB4ICFpbXBvcnRhbnQ7Cn0KLnVrLW1hcmdpbi1zbWFsbC1sZWZ0IHsKICBtYXJnaW4tbGVmdDogMTBweCAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4tc21hbGwtcmlnaHQgewogIG1hcmdpbi1yaWdodDogMTBweCAhaW1wb3J0YW50Owp9Ci8qIE1lZGl1bQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLW1hcmdpbi1tZWRpdW0gewogIG1hcmdpbi1ib3R0b206IDQwcHg7Cn0KKiArIC51ay1tYXJnaW4tbWVkaXVtIHsKICBtYXJnaW4tdG9wOiA0MHB4ICFpbXBvcnRhbnQ7Cn0KLnVrLW1hcmdpbi1tZWRpdW0tdG9wIHsKICBtYXJnaW4tdG9wOiA0MHB4ICFpbXBvcnRhbnQ7Cn0KLnVrLW1hcmdpbi1tZWRpdW0tYm90dG9tIHsKICBtYXJnaW4tYm90dG9tOiA0MHB4ICFpbXBvcnRhbnQ7Cn0KLnVrLW1hcmdpbi1tZWRpdW0tbGVmdCB7CiAgbWFyZ2luLWxlZnQ6IDQwcHggIWltcG9ydGFudDsKfQoudWstbWFyZ2luLW1lZGl1bS1yaWdodCB7CiAgbWFyZ2luLXJpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7Cn0KLyogTGFyZ2UKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1tYXJnaW4tbGFyZ2UgewogIG1hcmdpbi1ib3R0b206IDQwcHg7Cn0KKiArIC51ay1tYXJnaW4tbGFyZ2UgewogIG1hcmdpbi10b3A6IDQwcHggIWltcG9ydGFudDsKfQoudWstbWFyZ2luLWxhcmdlLXRvcCB7CiAgbWFyZ2luLXRvcDogNDBweCAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4tbGFyZ2UtYm90dG9tIHsKICBtYXJnaW4tYm90dG9tOiA0MHB4ICFpbXBvcnRhbnQ7Cn0KLnVrLW1hcmdpbi1sYXJnZS1sZWZ0IHsKICBtYXJnaW4tbGVmdDogNDBweCAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4tbGFyZ2UtcmlnaHQgewogIG1hcmdpbi1yaWdodDogNDBweCAhaW1wb3J0YW50Owp9Ci8qIERlc2t0b3AgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CiAgLnVrLW1hcmdpbi1sYXJnZSB7CiAgICBtYXJnaW4tYm90dG9tOiA3MHB4OwogIH0KICAqICsgLnVrLW1hcmdpbi1sYXJnZSB7CiAgICBtYXJnaW4tdG9wOiA3MHB4ICFpbXBvcnRhbnQ7CiAgfQogIC51ay1tYXJnaW4tbGFyZ2UtdG9wIHsKICAgIG1hcmdpbi10b3A6IDcwcHggIWltcG9ydGFudDsKICB9CiAgLnVrLW1hcmdpbi1sYXJnZS1ib3R0b20gewogICAgbWFyZ2luLWJvdHRvbTogNzBweCAhaW1wb3J0YW50OwogIH0KICAudWstbWFyZ2luLWxhcmdlLWxlZnQgewogICAgbWFyZ2luLWxlZnQ6IDcwcHggIWltcG9ydGFudDsKICB9CiAgLnVrLW1hcmdpbi1sYXJnZS1yaWdodCB7CiAgICBtYXJnaW4tcmlnaHQ6IDcwcHggIWltcG9ydGFudDsKICB9Cn0KLyogWExhcmdlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstbWFyZ2luLXhsYXJnZSB7CiAgbWFyZ2luLWJvdHRvbTogNzBweDsKfQoqICsgLnVrLW1hcmdpbi14bGFyZ2UgewogIG1hcmdpbi10b3A6IDcwcHggIWltcG9ydGFudDsKfQoudWstbWFyZ2luLXhsYXJnZS10b3AgewogIG1hcmdpbi10b3A6IDcwcHggIWltcG9ydGFudDsKfQoudWstbWFyZ2luLXhsYXJnZS1ib3R0b20gewogIG1hcmdpbi1ib3R0b206IDcwcHggIWltcG9ydGFudDsKfQoudWstbWFyZ2luLXhsYXJnZS1sZWZ0IHsKICBtYXJnaW4tbGVmdDogNzBweCAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4teGxhcmdlLXJpZ2h0IHsKICBtYXJnaW4tcmlnaHQ6IDcwcHggIWltcG9ydGFudDsKfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC51ay1tYXJnaW4teGxhcmdlIHsKICAgIG1hcmdpbi1ib3R0b206IDE0MHB4OwogIH0KICAqICsgLnVrLW1hcmdpbi14bGFyZ2UgewogICAgbWFyZ2luLXRvcDogMTQwcHggIWltcG9ydGFudDsKICB9CiAgLnVrLW1hcmdpbi14bGFyZ2UtdG9wIHsKICAgIG1hcmdpbi10b3A6IDE0MHB4ICFpbXBvcnRhbnQ7CiAgfQogIC51ay1tYXJnaW4teGxhcmdlLWJvdHRvbSB7CiAgICBtYXJnaW4tYm90dG9tOiAxNDBweCAhaW1wb3J0YW50OwogIH0KICAudWstbWFyZ2luLXhsYXJnZS1sZWZ0IHsKICAgIG1hcmdpbi1sZWZ0OiAxNDBweCAhaW1wb3J0YW50OwogIH0KICAudWstbWFyZ2luLXhsYXJnZS1yaWdodCB7CiAgICBtYXJnaW4tcmlnaHQ6IDE0MHB4ICFpbXBvcnRhbnQ7CiAgfQp9Ci8qIEF1dG8KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1tYXJnaW4tYXV0byB7CiAgbWFyZ2luLWxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsKfQoudWstbWFyZ2luLWF1dG8tdG9wIHsKICBtYXJnaW4tdG9wOiBhdXRvICFpbXBvcnRhbnQ7Cn0KLnVrLW1hcmdpbi1hdXRvLWJvdHRvbSB7CiAgbWFyZ2luLWJvdHRvbTogYXV0byAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4tYXV0by1sZWZ0IHsKICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4tYXV0by1yaWdodCB7CiAgbWFyZ2luLXJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7Cn0KLnVrLW1hcmdpbi1hdXRvLXZlcnRpY2FsIHsKICBtYXJnaW4tdG9wOiBhdXRvICFpbXBvcnRhbnQ7CiAgbWFyZ2luLWJvdHRvbTogYXV0byAhaW1wb3J0YW50Owp9Ci8qIFBob25lIGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkgewogIC51ay1tYXJnaW4tYXV0b1xAcyB7CiAgICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50OwogICAgbWFyZ2luLXJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgfQogIC51ay1tYXJnaW4tYXV0by1sZWZ0XEBzIHsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgfQogIC51ay1tYXJnaW4tYXV0by1yaWdodFxAcyB7CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICB9Cn0KLyogVGFibGV0IGxhbmRzY2FwZSBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogIC51ay1tYXJnaW4tYXV0b1xAbSB7CiAgICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50OwogICAgbWFyZ2luLXJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgfQogIC51ay1tYXJnaW4tYXV0by1sZWZ0XEBtIHsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgfQogIC51ay1tYXJnaW4tYXV0by1yaWdodFxAbSB7CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICB9Cn0KLyogRGVza3RvcCBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHsKICAudWstbWFyZ2luLWF1dG9cQGwgewogICAgbWFyZ2luLWxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICAgIG1hcmdpbi1yaWdodDogYXV0byAhaW1wb3J0YW50OwogIH0KICAudWstbWFyZ2luLWF1dG8tbGVmdFxAbCB7CiAgICBtYXJnaW4tbGVmdDogYXV0byAhaW1wb3J0YW50OwogIH0KICAudWstbWFyZ2luLWF1dG8tcmlnaHRcQGwgewogICAgbWFyZ2luLXJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgfQp9Ci8qIExhcmdlIHNjcmVlbiBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxNjAwcHgpIHsKICAudWstbWFyZ2luLWF1dG9cQHhsIHsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICB9CiAgLnVrLW1hcmdpbi1hdXRvLWxlZnRcQHhsIHsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgfQogIC51ay1tYXJnaW4tYXV0by1yaWdodFxAeGwgewogICAgbWFyZ2luLXJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgfQp9Ci8qIFJlbW92ZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLW1hcmdpbi1yZW1vdmUgewogIG1hcmdpbjogMCAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4tcmVtb3ZlLXRvcCB7CiAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4tcmVtb3ZlLWJvdHRvbSB7CiAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4tcmVtb3ZlLWxlZnQgewogIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7Cn0KLnVrLW1hcmdpbi1yZW1vdmUtcmlnaHQgewogIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4tcmVtb3ZlLXZlcnRpY2FsIHsKICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50Owp9Ci51ay1tYXJnaW4tcmVtb3ZlLWFkamFjZW50ICsgKiwKLnVrLW1hcmdpbi1yZW1vdmUtZmlyc3QtY2hpbGQgPiA6Zmlyc3QtY2hpbGQgewogIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKfQoudWstbWFyZ2luLXJlbW92ZS1sYXN0LWNoaWxkID4gOmxhc3QtY2hpbGQgewogIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDsKfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogNjQwcHgpIHsKICAudWstbWFyZ2luLXJlbW92ZS1sZWZ0XEBzIHsKICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7CiAgfQogIC51ay1tYXJnaW4tcmVtb3ZlLXJpZ2h0XEBzIHsKICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50OwogIH0KfQovKiBUYWJsZXQgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7CiAgLnVrLW1hcmdpbi1yZW1vdmUtbGVmdFxAbSB7CiAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OwogIH0KICAudWstbWFyZ2luLXJlbW92ZS1yaWdodFxAbSB7CiAgICBtYXJnaW4tcmlnaHQ6IDAgIWltcG9ydGFudDsKICB9Cn0KLyogRGVza3RvcCBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHsKICAudWstbWFyZ2luLXJlbW92ZS1sZWZ0XEBsIHsKICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7CiAgfQogIC51ay1tYXJnaW4tcmVtb3ZlLXJpZ2h0XEBsIHsKICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50OwogIH0KfQovKiBMYXJnZSBzY3JlZW4gYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTYwMHB4KSB7CiAgLnVrLW1hcmdpbi1yZW1vdmUtbGVmdFxAeGwgewogICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsKICB9CiAgLnVrLW1hcmdpbi1yZW1vdmUtcmlnaHRcQHhsIHsKICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50OwogIH0KfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBQYWRkaW5nCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstcGFkZGluZyB7CiAgcGFkZGluZzogMzBweDsKfQovKiBEZXNrdG9wIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkgewogIC51ay1wYWRkaW5nIHsKICAgIHBhZGRpbmc6IDQwcHg7CiAgfQp9Ci8qIFNtYWxsCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoudWstcGFkZGluZy1zbWFsbCB7CiAgcGFkZGluZzogMTVweDsKfQovKiBMYXJnZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXBhZGRpbmctbGFyZ2UgewogIHBhZGRpbmc6IDQwcHg7Cn0KLyogRGVza3RvcCBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHsKICAudWstcGFkZGluZy1sYXJnZSB7CiAgICBwYWRkaW5nOiA3MHB4OwogIH0KfQovKiBSZW1vdmUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1wYWRkaW5nLXJlbW92ZSB7CiAgcGFkZGluZzogMCAhaW1wb3J0YW50Owp9Ci51ay1wYWRkaW5nLXJlbW92ZS10b3AgewogIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7Cn0KLnVrLXBhZGRpbmctcmVtb3ZlLWJvdHRvbSB7CiAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDsKfQoudWstcGFkZGluZy1yZW1vdmUtbGVmdCB7CiAgcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7Cn0KLnVrLXBhZGRpbmctcmVtb3ZlLXJpZ2h0IHsKICBwYWRkaW5nLXJpZ2h0OiAwICFpbXBvcnRhbnQ7Cn0KLnVrLXBhZGRpbmctcmVtb3ZlLXZlcnRpY2FsIHsKICBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50OwogIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7Cn0KLnVrLXBhZGRpbmctcmVtb3ZlLWhvcml6b250YWwgewogIHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50OwogIHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDsKfQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ29tcG9uZW50OiBQb3NpdGlvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KOnJvb3QgewogIC0tdWstcG9zaXRpb24tbWFyZ2luLW9mZnNldDogMHB4Owp9Ci8qIERpcmVjdGlvbnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIDEuIFByZXZlbnQgY29udGVudCBvdmVyZmxvdy4KICovCltjbGFzcyo9J3VrLXBvc2l0aW9uLXRvcCddLApbY2xhc3MqPSd1ay1wb3NpdGlvbi1ib3R0b20nXSwKW2NsYXNzKj0ndWstcG9zaXRpb24tbGVmdCddLApbY2xhc3MqPSd1ay1wb3NpdGlvbi1yaWdodCddLApbY2xhc3MqPSd1ay1wb3NpdGlvbi1jZW50ZXInXSB7CiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7CiAgLyogMSAqLwogIG1heC13aWR0aDogY2FsYygxMDAlIC0gKHZhcigtLXVrLXBvc2l0aW9uLW1hcmdpbi1vZmZzZXQpICogMikpOwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KLyoKICogRWRnZXMKICogRG9uJ3QgdXNlIGB3aWR0aDogMTAwJWAgYmVjYXVzZSBpdCdzIHdyb25nIGlmIHRoZSBwYXJlbnQgaGFzIHBhZGRpbmcuCiAqLwoudWstcG9zaXRpb24tdG9wIHsKICB0b3A6IDA7CiAgbGVmdDogMDsKICByaWdodDogMDsKfQoudWstcG9zaXRpb24tYm90dG9tIHsKICBib3R0b206IDA7CiAgbGVmdDogMDsKICByaWdodDogMDsKfQoudWstcG9zaXRpb24tbGVmdCB7CiAgdG9wOiAwOwogIGJvdHRvbTogMDsKICBsZWZ0OiAwOwp9Ci51ay1wb3NpdGlvbi1yaWdodCB7CiAgdG9wOiAwOwogIGJvdHRvbTogMDsKICByaWdodDogMDsKfQovKgogKiBDb3JuZXJzCiAqLwoudWstcG9zaXRpb24tdG9wLWxlZnQgewogIHRvcDogMDsKICBsZWZ0OiAwOwp9Ci51ay1wb3NpdGlvbi10b3AtcmlnaHQgewogIHRvcDogMDsKICByaWdodDogMDsKfQoudWstcG9zaXRpb24tYm90dG9tLWxlZnQgewogIGJvdHRvbTogMDsKICBsZWZ0OiAwOwp9Ci51ay1wb3NpdGlvbi1ib3R0b20tcmlnaHQgewogIGJvdHRvbTogMDsKICByaWdodDogMDsKfQovKgogKiBDZW50ZXIKICogMS4gRml4IHRleHQgd3JhcHBpbmcgaWYgY29udGVudCBpcyBsYXJnZXIgdGhhbiA1MCUgb2YgdGhlIGNvbnRhaW5lci4KICogICAgVXNpbmcgYG1heC1jb250ZW50YCByZXF1aXJlcyBgbWF4LXdpZHRoYCBvZiAxMDAlIHdoaWNoIGlzIHNldCBnZW5lcmFsbHkuCiAqLwoudWstcG9zaXRpb24tY2VudGVyIHsKICB0b3A6IGNhbGMoNTAlIC0gdmFyKC0tdWstcG9zaXRpb24tbWFyZ2luLW9mZnNldCkpOwogIGxlZnQ6IGNhbGMoNTAlIC0gdmFyKC0tdWstcG9zaXRpb24tbWFyZ2luLW9mZnNldCkpOwogIC0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXg6IC01MCU7CiAgLS11ay1wb3NpdGlvbi10cmFuc2xhdGUteTogLTUwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSh2YXIoLS11ay1wb3NpdGlvbi10cmFuc2xhdGUteCksIHZhcigtLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS15KSk7CiAgLyogMSAqLwogIHdpZHRoOiBtYXgtY29udGVudDsKfQovKiBWZXJ0aWNhbCAqLwpbY2xhc3MqPSd1ay1wb3NpdGlvbi1jZW50ZXItbGVmdCddLApbY2xhc3MqPSd1ay1wb3NpdGlvbi1jZW50ZXItcmlnaHQnXSB7CiAgdG9wOiBjYWxjKDUwJSAtIHZhcigtLXVrLXBvc2l0aW9uLW1hcmdpbi1vZmZzZXQpKTsKICAtLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS15OiAtNTAlOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIHZhcigtLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS15KSk7Cn0KLnVrLXBvc2l0aW9uLWNlbnRlci1sZWZ0IHsKICBsZWZ0OiAwOwp9Ci51ay1wb3NpdGlvbi1jZW50ZXItcmlnaHQgewogIHJpZ2h0OiAwOwp9Ci51ay1wb3NpdGlvbi1jZW50ZXItbGVmdC1vdXQgewogIHJpZ2h0OiAxMDAlOwogIHdpZHRoOiBtYXgtY29udGVudDsKfQoudWstcG9zaXRpb24tY2VudGVyLXJpZ2h0LW91dCB7CiAgbGVmdDogMTAwJTsKICB3aWR0aDogbWF4LWNvbnRlbnQ7Cn0KLyogSG9yaXpvbnRhbCAqLwoudWstcG9zaXRpb24tdG9wLWNlbnRlciwKLnVrLXBvc2l0aW9uLWJvdHRvbS1jZW50ZXIgewogIGxlZnQ6IGNhbGMoNTAlIC0gdmFyKC0tdWstcG9zaXRpb24tbWFyZ2luLW9mZnNldCkpOwogIC0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXg6IC01MCU7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUodmFyKC0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXgpLCAwKTsKICAvKiAxICovCiAgd2lkdGg6IG1heC1jb250ZW50Owp9Ci51ay1wb3NpdGlvbi10b3AtY2VudGVyIHsKICB0b3A6IDA7Cn0KLnVrLXBvc2l0aW9uLWJvdHRvbS1jZW50ZXIgewogIGJvdHRvbTogMDsKfQovKgogKiBDb3ZlcgogKi8KLnVrLXBvc2l0aW9uLWNvdmVyIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOwogIGJvdHRvbTogMDsKICBsZWZ0OiAwOwogIHJpZ2h0OiAwOwp9Ci8qIE1hcmdpbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXBvc2l0aW9uLXNtYWxsIHsKICBtYXJnaW46IDE1cHg7CiAgLS11ay1wb3NpdGlvbi1tYXJnaW4tb2Zmc2V0OiAxNXB4Owp9Ci51ay1wb3NpdGlvbi1tZWRpdW0gewogIG1hcmdpbjogMzBweDsKICAtLXVrLXBvc2l0aW9uLW1hcmdpbi1vZmZzZXQ6IDMwcHg7Cn0KLnVrLXBvc2l0aW9uLWxhcmdlIHsKICBtYXJnaW46IDMwcHg7CiAgLS11ay1wb3NpdGlvbi1tYXJnaW4tb2Zmc2V0OiAzMHB4Owp9Ci8qIERlc2t0b3AgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CiAgLnVrLXBvc2l0aW9uLWxhcmdlIHsKICAgIG1hcmdpbjogNTBweDsKICAgIC0tdWstcG9zaXRpb24tbWFyZ2luLW9mZnNldDogNTBweDsKICB9Cn0KLyogU2NoZW1lcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXBvc2l0aW9uLXJlbGF0aXZlIHsKICBwb3NpdGlvbjogcmVsYXRpdmUgICFpbXBvcnRhbnQ7Cn0KLnVrLXBvc2l0aW9uLWFic29sdXRlIHsKICBwb3NpdGlvbjogYWJzb2x1dGUgICFpbXBvcnRhbnQ7Cn0KLnVrLXBvc2l0aW9uLWZpeGVkIHsKICBwb3NpdGlvbjogZml4ZWQgICFpbXBvcnRhbnQ7Cn0KLnVrLXBvc2l0aW9uLXN0aWNreSB7CiAgcG9zaXRpb246IHN0aWNreSAgIWltcG9ydGFudDsKfQovKiBMYXllcgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLnVrLXBvc2l0aW9uLXotaW5kZXggewogIHotaW5kZXg6IDE7Cn0KLnVrLXBvc2l0aW9uLXotaW5kZXgtemVybyB7CiAgei1pbmRleDogMDsKfQoudWstcG9zaXRpb24tei1pbmRleC1uZWdhdGl2ZSB7CiAgei1pbmRleDogLTE7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogVHJhbnNpdGlvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogVHJhbnNpdGlvbnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIFRoZSB0b2dnbGUgaXMgdHJpZ2dlcmVkIG9uIHRvdWNoIGRldmljZXMgYnkgdHdvIG1ldGhvZHM6CiAqIDEuIFVzaW5nIGA6Zm9jdXNgIGFuZCB0YWJpbmRleAogKiAyLiBVc2luZyBgOmhvdmVyYCBhbmQgYSBgdG91Y2hzdGFydGAgZXZlbnQgbGlzdGVuZXIgcmVnaXN0ZXJlZCBvbiB0aGUgZG9jdW1lbnQKICogICAgKERvZXNuJ3Qgd29yayBvbiBTdXJmYWNlIHRvdWNoIGRldmljZXMpCiAqLwo6d2hlcmUoLnVrLXRyYW5zaXRpb24tZmFkZSksCjp3aGVyZShbY2xhc3MqPSd1ay10cmFuc2l0aW9uLXNjYWxlJ10pLAo6d2hlcmUoW2NsYXNzKj0ndWstdHJhbnNpdGlvbi1zbGlkZSddKSB7CiAgLS11ay1wb3NpdGlvbi10cmFuc2xhdGUteDogMDsKICAtLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS15OiAwOwp9Ci51ay10cmFuc2l0aW9uLWZhZGUsCltjbGFzcyo9J3VrLXRyYW5zaXRpb24tc2NhbGUnXSwKW2NsYXNzKj0ndWstdHJhbnNpdGlvbi1zbGlkZSddIHsKICAtLXVrLXRyYW5zbGF0ZS14OiAwOwogIC0tdWstdHJhbnNsYXRlLXk6IDA7CiAgLS11ay1zY2FsZS14OiAxOwogIC0tdWstc2NhbGUteTogMTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSh2YXIoLS11ay1wb3NpdGlvbi10cmFuc2xhdGUteCksIHZhcigtLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS15KSkgdHJhbnNsYXRlKHZhcigtLXVrLXRyYW5zbGF0ZS14KSwgdmFyKC0tdWstdHJhbnNsYXRlLXkpKSBzY2FsZSh2YXIoLS11ay1zY2FsZS14KSwgdmFyKC0tdWstc2NhbGUteSkpOwogIHRyYW5zaXRpb246IDAuM3MgZWFzZS1vdXQ7CiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogb3BhY2l0eSwgdHJhbnNmb3JtLCBmaWx0ZXI7CiAgb3BhY2l0eTogMDsKfQovKgogKiBGYWRlCiAqLwoudWstdHJhbnNpdGlvbi10b2dnbGU6aG92ZXIgLnVrLXRyYW5zaXRpb24tZmFkZSwKLnVrLXRyYW5zaXRpb24tdG9nZ2xlOmZvY3VzIC51ay10cmFuc2l0aW9uLWZhZGUsCi51ay10cmFuc2l0aW9uLXRvZ2dsZSAudWstdHJhbnNpdGlvbi1mYWRlOmZvY3VzLXdpdGhpbiwKLnVrLXRyYW5zaXRpb24tYWN0aXZlLnVrLWFjdGl2ZSAudWstdHJhbnNpdGlvbi1mYWRlIHsKICBvcGFjaXR5OiAxOwp9Ci8qCiAqIFNjYWxlCiAqIDEuIE1ha2UgaW1hZ2UgcmVuZGVyaW5nIHRoZSBzYW1lIGR1cmluZyB0aGUgdHJhbnNpdGlvbiBhcyBiZWZvcmUgYW5kIGFmdGVyLiBQcmVmaXhlZCBiZWNhdXNlIG9mIFNhZmFyaS4KICovCi8qIDEgKi8KW2NsYXNzKj0ndWstdHJhbnNpdGlvbi1zY2FsZSddIHsKICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjsKfQoudWstdHJhbnNpdGlvbi1zY2FsZS11cCB7CiAgLS11ay1zY2FsZS14OiAxOwogIC0tdWstc2NhbGUteTogMTsKfQoudWstdHJhbnNpdGlvbi1zY2FsZS1kb3duIHsKICAtLXVrLXNjYWxlLXg6IDEuMDM7CiAgLS11ay1zY2FsZS15OiAxLjAzOwp9Ci8qIFNob3cgKi8KLnVrLXRyYW5zaXRpb24tdG9nZ2xlOmhvdmVyIC51ay10cmFuc2l0aW9uLXNjYWxlLXVwLAoudWstdHJhbnNpdGlvbi10b2dnbGU6Zm9jdXMgLnVrLXRyYW5zaXRpb24tc2NhbGUtdXAsCi51ay10cmFuc2l0aW9uLXRvZ2dsZSAudWstdHJhbnNpdGlvbi1zY2FsZS11cDpmb2N1cy13aXRoaW4sCi51ay10cmFuc2l0aW9uLWFjdGl2ZS51ay1hY3RpdmUgLnVrLXRyYW5zaXRpb24tc2NhbGUtdXAgewogIC0tdWstc2NhbGUteDogMS4wMzsKICAtLXVrLXNjYWxlLXk6IDEuMDM7CiAgb3BhY2l0eTogMTsKfQoudWstdHJhbnNpdGlvbi10b2dnbGU6aG92ZXIgLnVrLXRyYW5zaXRpb24tc2NhbGUtZG93biwKLnVrLXRyYW5zaXRpb24tdG9nZ2xlOmZvY3VzIC51ay10cmFuc2l0aW9uLXNjYWxlLWRvd24sCi51ay10cmFuc2l0aW9uLXRvZ2dsZSAudWstdHJhbnNpdGlvbi1zY2FsZS1kb3duOmZvY3VzLXdpdGhpbiwKLnVrLXRyYW5zaXRpb24tYWN0aXZlLnVrLWFjdGl2ZSAudWstdHJhbnNpdGlvbi1zY2FsZS1kb3duIHsKICAtLXVrLXNjYWxlLXg6IDE7CiAgLS11ay1zY2FsZS15OiAxOwogIG9wYWNpdHk6IDE7Cn0KLyoKICogU2xpZGUKICovCi51ay10cmFuc2l0aW9uLXNsaWRlLXRvcCB7CiAgLS11ay10cmFuc2xhdGUteTogLTEwMCU7Cn0KLnVrLXRyYW5zaXRpb24tc2xpZGUtYm90dG9tIHsKICAtLXVrLXRyYW5zbGF0ZS15OiAxMDAlOwp9Ci51ay10cmFuc2l0aW9uLXNsaWRlLWxlZnQgewogIC0tdWstdHJhbnNsYXRlLXg6IC0xMDAlOwp9Ci51ay10cmFuc2l0aW9uLXNsaWRlLXJpZ2h0IHsKICAtLXVrLXRyYW5zbGF0ZS14OiAxMDAlOwp9Ci51ay10cmFuc2l0aW9uLXNsaWRlLXRvcC1zbWFsbCB7CiAgLS11ay10cmFuc2xhdGUteTogY2FsYygtMSAqIDEwcHgpOwp9Ci51ay10cmFuc2l0aW9uLXNsaWRlLWJvdHRvbS1zbWFsbCB7CiAgLS11ay10cmFuc2xhdGUteTogMTBweDsKfQoudWstdHJhbnNpdGlvbi1zbGlkZS1sZWZ0LXNtYWxsIHsKICAtLXVrLXRyYW5zbGF0ZS14OiBjYWxjKC0xICogMTBweCk7Cn0KLnVrLXRyYW5zaXRpb24tc2xpZGUtcmlnaHQtc21hbGwgewogIC0tdWstdHJhbnNsYXRlLXg6IDEwcHg7Cn0KLnVrLXRyYW5zaXRpb24tc2xpZGUtdG9wLW1lZGl1bSB7CiAgLS11ay10cmFuc2xhdGUteTogY2FsYygtMSAqIDUwcHgpOwp9Ci51ay10cmFuc2l0aW9uLXNsaWRlLWJvdHRvbS1tZWRpdW0gewogIC0tdWstdHJhbnNsYXRlLXk6IDUwcHg7Cn0KLnVrLXRyYW5zaXRpb24tc2xpZGUtbGVmdC1tZWRpdW0gewogIC0tdWstdHJhbnNsYXRlLXg6IGNhbGMoLTEgKiA1MHB4KTsKfQoudWstdHJhbnNpdGlvbi1zbGlkZS1yaWdodC1tZWRpdW0gewogIC0tdWstdHJhbnNsYXRlLXg6IDUwcHg7Cn0KLyogU2hvdyAqLwoudWstdHJhbnNpdGlvbi10b2dnbGU6aG92ZXIgW2NsYXNzKj0ndWstdHJhbnNpdGlvbi1zbGlkZSddLAoudWstdHJhbnNpdGlvbi10b2dnbGU6Zm9jdXMgW2NsYXNzKj0ndWstdHJhbnNpdGlvbi1zbGlkZSddLAoudWstdHJhbnNpdGlvbi10b2dnbGUgW2NsYXNzKj0ndWstdHJhbnNpdGlvbi1zbGlkZSddOmZvY3VzLXdpdGhpbiwKLnVrLXRyYW5zaXRpb24tYWN0aXZlLnVrLWFjdGl2ZSBbY2xhc3MqPSd1ay10cmFuc2l0aW9uLXNsaWRlJ10gewogIC0tdWstdHJhbnNsYXRlLXg6IDA7CiAgLS11ay10cmFuc2xhdGUteTogMDsKICBvcGFjaXR5OiAxOwp9Ci8qIE9wYWNpdHkgbW9kaWZpZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay10cmFuc2l0aW9uLW9wYXF1ZSB7CiAgb3BhY2l0eTogMTsKfQovKiBEdXJhdGlvbiBtb2RpZmllcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay10cmFuc2l0aW9uLXNsb3cgewogIHRyYW5zaXRpb24tZHVyYXRpb246IDAuN3M7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogVmlzaWJpbGl0eQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyoKICogSGlkZGVuCiAqIGBoaWRkZW5gIGF0dHJpYnV0ZSBhbHNvIHNldCBoZXJlIHRvIG1ha2UgaXQgc3Ryb25nZXIKICovCltoaWRkZW5dLAoudWstaGlkZGVuIHsKICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLyogUGhvbmUgbGFuZHNjYXBlIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7CiAgLnVrLWhpZGRlblxAcyB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQp9Ci8qIFRhYmxldCBsYW5kc2NhcGUgYW5kIGJpZ2dlciAqLwpAbWVkaWEgKG1pbi13aWR0aDogOTYwcHgpIHsKICAudWstaGlkZGVuXEBtIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KLyogRGVza3RvcCBhbmQgYmlnZ2VyICovCkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHsKICAudWstaGlkZGVuXEBsIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KLyogTGFyZ2Ugc2NyZWVuIGFuZCBiaWdnZXIgKi8KQG1lZGlhIChtaW4td2lkdGg6IDE2MDBweCkgewogIC51ay1oaWRkZW5cQHhsIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICB9Cn0KLyoKICogVmlzaWJsZQogKi8KLyogUGhvbmUgcG9ydHJhaXQgYW5kIHNtYWxsZXIgKi8KQG1lZGlhIChtYXgtd2lkdGg6IDYzOXB4KSB7CiAgLnVrLXZpc2libGVcQHMgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogIH0KfQovKiBQaG9uZSBsYW5kc2NhcGUgYW5kIHNtYWxsZXIgKi8KQG1lZGlhIChtYXgtd2lkdGg6IDk1OXB4KSB7CiAgLnVrLXZpc2libGVcQG0gewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogIH0KfQovKiBUYWJsZXQgbGFuZHNjYXBlIGFuZCBzbWFsbGVyICovCkBtZWRpYSAobWF4LXdpZHRoOiAxMTk5cHgpIHsKICAudWstdmlzaWJsZVxAbCB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQp9Ci8qIERlc2t0b3AgYW5kIHNtYWxsZXIgKi8KQG1lZGlhIChtYXgtd2lkdGg6IDE1OTlweCkgewogIC51ay12aXNpYmxlXEB4bCB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQp9Ci8qIFZpc2liaWxpdHkKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi51ay1pbnZpc2libGUgewogIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50Owp9Ci8qIEJhc2VkIG9uIHRoZSBTdGF0ZSBvZiB0aGUgUGFyZW50IEVsZW1lbnQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIENhbid0IHVzZSBgZGlzcGxheTogbm9uZWAgbm9yIGB2aXNpYmlsaXR5OiBoaWRkZW5gIGJlY2F1c2UgYm90aCBhcmUgbm90IGZvY3VzYWJsZS4KICogVGhlIHRhcmdldCBzdGF5cyB2aXNpYmxlIGlmIGFueSBlbGVtZW50IHdpdGhpbiByZWNlaXZlcyBmb2N1cyB0aHJvdWdoIGtleWJvYXJkLgogKi8KLyoKICogRGlzY2FyZCBzcGFjZSB3aGVuIGhpZGRlbi4KICovCi51ay12aXNpYmxlLXRvZ2dsZTpub3QoOmhvdmVyKTpub3QoOmZvY3VzKSAudWstaGlkZGVuLWhvdmVyOm5vdCg6Zm9jdXMtd2l0aGluKSB7CiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7CiAgd2lkdGg6IDAgIWltcG9ydGFudDsKICBoZWlnaHQ6IDAgIWltcG9ydGFudDsKICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50Owp9Ci8qCiAqIEtlZXAgc3BhY2Ugd2hlbiBoaWRkZW4uCiAqLwoudWstdmlzaWJsZS10b2dnbGU6bm90KDpob3Zlcik6bm90KDpmb2N1cykgLnVrLWludmlzaWJsZS1ob3Zlcjpub3QoOmZvY3VzLXdpdGhpbikgewogIG9wYWNpdHk6IDAgIWltcG9ydGFudDsKfQovKiBCYXNlZCBvbiBIb3ZlciBDYXBhYmlsaXR5IG9mIHRoZSBQb2ludGluZyBEZXZpY2UKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIEhvdmVyCiAqLwovKiBIaWRlIGlmIHByaW1hcnkgcG9pbnRpbmcgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBob3ZlciwgZS5nLiB0b3VjaCBzY3JlZW5zLiAqLwpAbWVkaWEgKGhvdmVyOiBub25lKSB7CiAgLnVrLWhpZGRlbi10b3VjaCB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQp9Ci8qIEhpZGUgaWYgcHJpbWFyeSBwb2ludGluZyBkZXZpY2Ugc3VwcG9ydHMgaG92ZXIsIGUuZy4gbWljZS4gKi8KQG1lZGlhIChob3ZlcikgewogIC51ay1oaWRkZW4tbm90b3VjaCB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQp9Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDb21wb25lbnQ6IEludmVyc2UKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qCiAqIEltcGxlbWVudGVkIGNsYXNzIGRlcGVuZHMgb24gdGhlIGdlbmVyYWwgdGhlbWUgY29sb3IKICogYHVrLWxpZ2h0YCBpcyBmb3IgbGlnaHQgY29sb3JzIG9uIGRhcmsgYmFja2dyb3VuZHMKICogYHVrLWRhcmtgIGlzIG9yIGRhcmsgY29sb3JzIG9uIGxpZ2h0IGJhY2tncm91bmRzCiAqLwoudWstbGlnaHQsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvciksCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pLAoudWstb3ZlcmxheS1wcmltYXJ5LAoudWstb2ZmY2FudmFzLWJhciB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgYSwKLnVrLWxpZ2h0IC51ay1saW5rLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmssCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmssCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluaywKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluaywKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgYSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmssCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbGluaywKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saW5rLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saW5rLAoudWstb3ZlcmxheS1wcmltYXJ5IGEsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmssCi51ay1vZmZjYW52YXMtYmFyIGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay1saW5rIHsKICBjb2xvcjogI2ZmZjsKfQoudWstbGlnaHQgYTpob3ZlciwKLnVrLWxpZ2h0IC51ay1saW5rOmhvdmVyLAoudWstbGlnaHQgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGE6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbms6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYTpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGE6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbms6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYTpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBhOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGluazpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpbms6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGE6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbms6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgYTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saW5rOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLAoudWstb3ZlcmxheS1wcmltYXJ5IGE6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbms6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLAoudWstb2ZmY2FudmFzLWJhciBhOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstbGluazpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rIHsKICBjb2xvcjogI2ZmZjsKfQoudWstbGlnaHQgOm5vdChwcmUpID4gY29kZSwKLnVrLWxpZ2h0IDpub3QocHJlKSA+IGtiZCwKLnVrLWxpZ2h0IDpub3QocHJlKSA+IHNhbXAsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOm5vdChwcmUpID4gY29kZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSkgPiBrYmQsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOm5vdChwcmUpID4gc2FtcCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpub3QocHJlKSA+IGNvZGUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSkgPiBrYmQsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSkgPiBzYW1wLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpub3QocHJlKSA+IGNvZGUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOm5vdChwcmUpID4ga2JkLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpub3QocHJlKSA+IHNhbXAsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSkgPiBjb2RlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOm5vdChwcmUpID4ga2JkLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOm5vdChwcmUpID4gc2FtcCwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgOm5vdChwcmUpID4gY29kZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgOm5vdChwcmUpID4ga2JkLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSA6bm90KHByZSkgPiBzYW1wLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIDpub3QocHJlKSA+IGNvZGUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgOm5vdChwcmUpID4ga2JkLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIDpub3QocHJlKSA+IHNhbXAsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgOm5vdChwcmUpID4gY29kZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSA6bm90KHByZSkgPiBrYmQsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgOm5vdChwcmUpID4gc2FtcCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIDpub3QocHJlKSA+IGNvZGUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSA6bm90KHByZSkgPiBrYmQsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSA6bm90KHByZSkgPiBzYW1wLAoudWstb3ZlcmxheS1wcmltYXJ5IDpub3QocHJlKSA+IGNvZGUsCi51ay1vdmVybGF5LXByaW1hcnkgOm5vdChwcmUpID4ga2JkLAoudWstb3ZlcmxheS1wcmltYXJ5IDpub3QocHJlKSA+IHNhbXAsCi51ay1vZmZjYW52YXMtYmFyIDpub3QocHJlKSA+IGNvZGUsCi51ay1vZmZjYW52YXMtYmFyIDpub3QocHJlKSA+IGtiZCwKLnVrLW9mZmNhbnZhcy1iYXIgOm5vdChwcmUpID4gc2FtcCB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7Cn0KLnVrLWxpZ2h0IGVtLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGVtLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgZW0sCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgZW0sCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBlbSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgZW0sCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgZW0sCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgZW0sCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBlbSwKLnVrLW92ZXJsYXktcHJpbWFyeSBlbSwKLnVrLW9mZmNhbnZhcy1iYXIgZW0gewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCBoMSwKLnVrLWxpZ2h0IC51ay1oMSwKLnVrLWxpZ2h0IGgyLAoudWstbGlnaHQgLnVrLWgyLAoudWstbGlnaHQgaDMsCi51ay1saWdodCAudWstaDMsCi51ay1saWdodCBoNCwKLnVrLWxpZ2h0IC51ay1oNCwKLnVrLWxpZ2h0IGg1LAoudWstbGlnaHQgLnVrLWg1LAoudWstbGlnaHQgaDYsCi51ay1saWdodCAudWstaDYsCi51ay1saWdodCAudWstaGVhZGluZy1zbWFsbCwKLnVrLWxpZ2h0IC51ay1oZWFkaW5nLW1lZGl1bSwKLnVrLWxpZ2h0IC51ay1oZWFkaW5nLWxhcmdlLAoudWstbGlnaHQgLnVrLWhlYWRpbmcteGxhcmdlLAoudWstbGlnaHQgLnVrLWhlYWRpbmctMnhsYXJnZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoMSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDEsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWgyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGgzLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oMywKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoNCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDQsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWg1LAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGg2LAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oNiwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1zbWFsbCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1tZWRpdW0sCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGFyZ2UsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmcteGxhcmdlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLTJ4bGFyZ2UsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoMSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oMSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGgyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWgyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDMsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDMsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoNCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oNCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGg1LAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWg1LAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDYsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDYsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1zbWFsbCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLW1lZGl1bSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWxhcmdlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmcteGxhcmdlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctMnhsYXJnZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoMSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDEsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWgyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGgzLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oMywKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoNCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDQsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWg1LAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGg2LAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oNiwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1zbWFsbCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1tZWRpdW0sCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGFyZ2UsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmcteGxhcmdlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLTJ4bGFyZ2UsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoMSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oMSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGgyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWgyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDMsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDMsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoNCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oNCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGg1LAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWg1LAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDYsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDYsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1zbWFsbCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLW1lZGl1bSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWxhcmdlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmcteGxhcmdlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctMnhsYXJnZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgaDEsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oMSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgaDIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oMiwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgaDMsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oMywKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgaDQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oNCwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgaDUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oNSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgaDYsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oNiwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctc21hbGwsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLW1lZGl1bSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctbGFyZ2UsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLXhsYXJnZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctMnhsYXJnZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBoMSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaDEsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgaDIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWgyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIGgzLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1oMywKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBoNCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaDQsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgaDUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWg1LAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIGg2LAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1oNiwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaGVhZGluZy1zbWFsbCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaGVhZGluZy1tZWRpdW0sCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWhlYWRpbmctbGFyZ2UsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWhlYWRpbmcteGxhcmdlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1oZWFkaW5nLTJ4bGFyZ2UsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgaDEsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWgxLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGgyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oMiwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBoMywKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaDMsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgaDQsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWg0LAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGg1LAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oNSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBoNiwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaDYsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctc21hbGwsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctbWVkaXVtLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLWxhcmdlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLXhsYXJnZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy0yeGxhcmdlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgaDEsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaDEsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBoMiwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1oMiwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIGgzLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWgzLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgaDQsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaDQsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBoNSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1oNSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIGg2LAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWg2LAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWhlYWRpbmctc21hbGwsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaGVhZGluZy1tZWRpdW0sCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaGVhZGluZy1sYXJnZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1oZWFkaW5nLXhsYXJnZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1oZWFkaW5nLTJ4bGFyZ2UsCi51ay1vdmVybGF5LXByaW1hcnkgaDEsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWgxLAoudWstb3ZlcmxheS1wcmltYXJ5IGgyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oMiwKLnVrLW92ZXJsYXktcHJpbWFyeSBoMywKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaDMsCi51ay1vdmVybGF5LXByaW1hcnkgaDQsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWg0LAoudWstb3ZlcmxheS1wcmltYXJ5IGg1LAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oNSwKLnVrLW92ZXJsYXktcHJpbWFyeSBoNiwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaDYsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWhlYWRpbmctc21hbGwsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWhlYWRpbmctbWVkaXVtLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oZWFkaW5nLWxhcmdlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oZWFkaW5nLXhsYXJnZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaGVhZGluZy0yeGxhcmdlLAoudWstb2ZmY2FudmFzLWJhciBoMSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWgxLAoudWstb2ZmY2FudmFzLWJhciBoMiwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWgyLAoudWstb2ZmY2FudmFzLWJhciBoMywKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWgzLAoudWstb2ZmY2FudmFzLWJhciBoNCwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWg0LAoudWstb2ZmY2FudmFzLWJhciBoNSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWg1LAoudWstb2ZmY2FudmFzLWJhciBoNiwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWg2LAoudWstb2ZmY2FudmFzLWJhciAudWstaGVhZGluZy1zbWFsbCwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWhlYWRpbmctbWVkaXVtLAoudWstb2ZmY2FudmFzLWJhciAudWstaGVhZGluZy1sYXJnZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWhlYWRpbmcteGxhcmdlLAoudWstb2ZmY2FudmFzLWJhciAudWstaGVhZGluZy0yeGxhcmdlIHsKICBjb2xvcjogI2ZmZjsKfQoudWstbGlnaHQgYmxvY2txdW90ZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBibG9ja3F1b3RlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYmxvY2txdW90ZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBibG9ja3F1b3RlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYmxvY2txdW90ZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgYmxvY2txdW90ZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBibG9ja3F1b3RlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGJsb2NrcXVvdGUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBibG9ja3F1b3RlLAoudWstb3ZlcmxheS1wcmltYXJ5IGJsb2NrcXVvdGUsCi51ay1vZmZjYW52YXMtYmFyIGJsb2NrcXVvdGUgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCBibG9ja3F1b3RlIGZvb3RlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBibG9ja3F1b3RlIGZvb3RlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGJsb2NrcXVvdGUgZm9vdGVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGJsb2NrcXVvdGUgZm9vdGVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYmxvY2txdW90ZSBmb290ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IGJsb2NrcXVvdGUgZm9vdGVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIGJsb2NrcXVvdGUgZm9vdGVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGJsb2NrcXVvdGUgZm9vdGVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgYmxvY2txdW90ZSBmb290ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgYmxvY2txdW90ZSBmb290ZXIsCi51ay1vZmZjYW52YXMtYmFyIGJsb2NrcXVvdGUgZm9vdGVyIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCBociwKLnVrLWxpZ2h0IC51ay1ociwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBociwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaHIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBociwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1ociwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBociwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaHIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBociwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1ociwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgaHIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1ociwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBociwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaHIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgaHIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWhyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgaHIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaHIsCi51ay1vdmVybGF5LXByaW1hcnkgaHIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWhyLAoudWstb2ZmY2FudmFzLWJhciBociwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWhyIHsKICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Cn0KLnVrLWxpZ2h0IDpmb2N1cywKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6Zm9jdXMsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6Zm9jdXMsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOmZvY3VzLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOmZvY3VzLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSA6Zm9jdXMsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgOmZvY3VzLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IDpmb2N1cywKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIDpmb2N1cywKLnVrLW92ZXJsYXktcHJpbWFyeSA6Zm9jdXMsCi51ay1vZmZjYW52YXMtYmFyIDpmb2N1cyB7CiAgb3V0bGluZS1jb2xvcjogI2ZmZjsKfQoudWstbGlnaHQgOmZvY3VzLXZpc2libGUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOmZvY3VzLXZpc2libGUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6Zm9jdXMtdmlzaWJsZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6Zm9jdXMtdmlzaWJsZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpmb2N1cy12aXNpYmxlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSA6Zm9jdXMtdmlzaWJsZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSA6Zm9jdXMtdmlzaWJsZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSA6Zm9jdXMtdmlzaWJsZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIDpmb2N1cy12aXNpYmxlLAoudWstb3ZlcmxheS1wcmltYXJ5IDpmb2N1cy12aXNpYmxlLAoudWstb2ZmY2FudmFzLWJhciA6Zm9jdXMtdmlzaWJsZSB7CiAgb3V0bGluZS1jb2xvcjogI2ZmZjsKfQoudWstbGlnaHQgYS51ay1saW5rLW11dGVkLAoudWstbGlnaHQgLnVrLWxpbmstbXV0ZWQgYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstbXV0ZWQsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstbXV0ZWQgYSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay1tdXRlZCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLW11dGVkIGEsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLW11dGVkLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLW11dGVkIGEsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstbXV0ZWQsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1tdXRlZCBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBhLnVrLWxpbmstbXV0ZWQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saW5rLW11dGVkIGEsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgYS51ay1saW5rLW11dGVkLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saW5rLW11dGVkIGEsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgYS51ay1saW5rLW11dGVkLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saW5rLW11dGVkIGEsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBhLnVrLWxpbmstbXV0ZWQsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbGluay1tdXRlZCBhLAoudWstb3ZlcmxheS1wcmltYXJ5IGEudWstbGluay1tdXRlZCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGluay1tdXRlZCBhLAoudWstb2ZmY2FudmFzLWJhciBhLnVrLWxpbmstbXV0ZWQsCi51ay1vZmZjYW52YXMtYmFyIC51ay1saW5rLW11dGVkIGEgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cn0KLnVrLWxpZ2h0IGEudWstbGluay1tdXRlZDpob3ZlciwKLnVrLWxpZ2h0IC51ay1saW5rLW11dGVkIGE6aG92ZXIsCi51ay1saWdodCAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstbXV0ZWQsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLW11dGVkOmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLW11dGVkIGE6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLW11dGVkLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLW11dGVkOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstbXV0ZWQgYTpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1tdXRlZCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstbXV0ZWQ6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstbXV0ZWQgYTpob3ZlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstbXV0ZWQsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstbXV0ZWQ6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1tdXRlZCBhOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLW11dGVkLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBhLnVrLWxpbmstbXV0ZWQ6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saW5rLW11dGVkIGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1tdXRlZCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBhLnVrLWxpbmstbXV0ZWQ6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpbmstbXV0ZWQgYTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstbXV0ZWQsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgYS51ay1saW5rLW11dGVkOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saW5rLW11dGVkIGE6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLW11dGVkLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgYS51ay1saW5rLW11dGVkOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpbmstbXV0ZWQgYTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1tdXRlZCwKLnVrLW92ZXJsYXktcHJpbWFyeSBhLnVrLWxpbmstbXV0ZWQ6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmstbXV0ZWQgYTpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstbXV0ZWQsCi51ay1vZmZjYW52YXMtYmFyIGEudWstbGluay1tdXRlZDpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpbmstbXV0ZWQgYTpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLW11dGVkIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCBhLnVrLWxpbmstdGV4dDpob3ZlciwKLnVrLWxpZ2h0IC51ay1saW5rLXRleHQgYTpob3ZlciwKLnVrLWxpZ2h0IC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay10ZXh0LAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay10ZXh0OmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRleHQgYTpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstdGV4dCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay10ZXh0OmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdGV4dCBhOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLXRleHQsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLXRleHQ6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdGV4dCBhOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay10ZXh0LAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLXRleHQ6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10ZXh0IGE6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstdGV4dCwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgYS51ay1saW5rLXRleHQ6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saW5rLXRleHQgYTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLXRleHQsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgYS51ay1saW5rLXRleHQ6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpbmstdGV4dCBhOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay10ZXh0LAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGEudWstbGluay10ZXh0OmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saW5rLXRleHQgYTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstdGV4dCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIGEudWstbGluay10ZXh0OmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpbmstdGV4dCBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLXRleHQsCi51ay1vdmVybGF5LXByaW1hcnkgYS51ay1saW5rLXRleHQ6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmstdGV4dCBhOmhvdmVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay10ZXh0LAoudWstb2ZmY2FudmFzLWJhciBhLnVrLWxpbmstdGV4dDpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpbmstdGV4dCBhOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstdGV4dCB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgYS51ay1saW5rLWhlYWRpbmc6aG92ZXIsCi51ay1saWdodCAudWstbGluay1oZWFkaW5nIGE6aG92ZXIsCi51ay1saWdodCAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstaGVhZGluZywKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstaGVhZGluZzpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1oZWFkaW5nIGE6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLWhlYWRpbmcsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstaGVhZGluZzpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1oZWFkaW5nLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay1oZWFkaW5nOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstaGVhZGluZywKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay1oZWFkaW5nOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLWhlYWRpbmcsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IGEudWstbGluay1oZWFkaW5nOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay1oZWFkaW5nIGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1oZWFkaW5nLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIGEudWstbGluay1oZWFkaW5nOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstaGVhZGluZywKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBhLnVrLWxpbmstaGVhZGluZzpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay1oZWFkaW5nIGE6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLWhlYWRpbmcsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSBhLnVrLWxpbmstaGVhZGluZzpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1oZWFkaW5nLAoudWstb3ZlcmxheS1wcmltYXJ5IGEudWstbGluay1oZWFkaW5nOmhvdmVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstaGVhZGluZywKLnVrLW9mZmNhbnZhcy1iYXIgYS51ay1saW5rLWhlYWRpbmc6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLWhlYWRpbmcgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCAudWstaGVhZGluZy1kaXZpZGVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWRpdmlkZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1kaXZpZGVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWRpdmlkZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1kaXZpZGVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1kaXZpZGVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1oZWFkaW5nLWRpdmlkZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctZGl2aWRlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1oZWFkaW5nLWRpdmlkZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWhlYWRpbmctZGl2aWRlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWhlYWRpbmctZGl2aWRlciB7CiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwp9Ci51ay1saWdodCAudWstaGVhZGluZy1idWxsZXQ6OmJlZm9yZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1idWxsZXQ6OmJlZm9yZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3JlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3JlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctYnVsbGV0OjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3JlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3JlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWhlYWRpbmctYnVsbGV0OjpiZWZvcmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWhlYWRpbmctYnVsbGV0OjpiZWZvcmUsCi51ay1vZmZjYW52YXMtYmFyIC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3JlIHsKICBib3JkZXItbGVmdC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwp9Ci51ay1saWdodCAudWstaGVhZGluZy1saW5lID4gOjpiZWZvcmUsCi51ay1saWdodCAudWstaGVhZGluZy1saW5lID4gOjphZnRlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lID4gOjpiZWZvcmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGluZSA+IDo6YWZ0ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lID4gOjpiZWZvcmUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lID4gOjphZnRlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lID4gOjpiZWZvcmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGluZSA+IDo6YWZ0ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lID4gOjpiZWZvcmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lID4gOjphZnRlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctbGluZSA+IDo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1saW5lID4gOjphZnRlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaGVhZGluZy1saW5lID4gOjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWhlYWRpbmctbGluZSA+IDo6YWZ0ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctbGluZSA+IDo6YmVmb3JlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLWxpbmUgPiA6OmFmdGVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWhlYWRpbmctbGluZSA+IDo6YmVmb3JlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWhlYWRpbmctbGluZSA+IDo6YWZ0ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWhlYWRpbmctbGluZSA+IDo6YmVmb3JlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oZWFkaW5nLWxpbmUgPiA6OmFmdGVyLAoudWstb2ZmY2FudmFzLWJhciAudWstaGVhZGluZy1saW5lID4gOjpiZWZvcmUsCi51ay1vZmZjYW52YXMtYmFyIC51ay1oZWFkaW5nLWxpbmUgPiA6OmFmdGVyIHsKICBib3JkZXItYm90dG9tLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Cn0KLnVrLWxpZ2h0IC51ay1kaXZpZGVyLWljb24sCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItaWNvbiwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb24sCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItaWNvbiwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb24sCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kaXZpZGVyLWljb24sCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWRpdmlkZXItaWNvbiwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstZGl2aWRlci1pY29uLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWRpdmlkZXItaWNvbiwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZGl2aWRlci1pY29uLAoudWstb2ZmY2FudmFzLWJhciAudWstZGl2aWRlci1pY29uIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjAlMjIlMjBoZWlnaHQlM0QlMjIyMCUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDIwJTIwMjAlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2NpcmNsZSUyMGZpbGwlM0QlMjJub25lJTIyJTIwc3Ryb2tlJTNEJTIycmdiYSUyODI1NSwlMjAyNTUsJTIwMjU1LCUyMDAuMiUyOSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjIlMjIlMjBjeCUzRCUyMjEwJTIyJTIwY3klM0QlMjIxMCUyMiUyMHIlM0QlMjI3JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIik7Cn0KLnVrLWxpZ2h0IC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwKLnVrLWxpZ2h0IC51ay1kaXZpZGVyLWljb246OmFmdGVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1pY29uOjphZnRlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb246OmFmdGVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1pY29uOjphZnRlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb246OmFmdGVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstZGl2aWRlci1pY29uOjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kaXZpZGVyLWljb246OmFmdGVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZGl2aWRlci1pY29uOjphZnRlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstZGl2aWRlci1pY29uOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItaWNvbjo6YWZ0ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZGl2aWRlci1pY29uOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZGl2aWRlci1pY29uOjphZnRlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZGl2aWRlci1pY29uOjpiZWZvcmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWRpdmlkZXItaWNvbjo6YWZ0ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWRpdmlkZXItaWNvbjo6YWZ0ZXIgewogIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKfQoudWstbGlnaHQgLnVrLWRpdmlkZXItc21hbGw6OmFmdGVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1zbWFsbDo6YWZ0ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1zbWFsbDo6YWZ0ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZGl2aWRlci1zbWFsbDo6YWZ0ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItc21hbGw6OmFmdGVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWRpdmlkZXItc21hbGw6OmFmdGVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWRpdmlkZXItc21hbGw6OmFmdGVyIHsKICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Cn0KLnVrLWxpZ2h0IC51ay1kaXZpZGVyLXZlcnRpY2FsLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLXZlcnRpY2FsLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItdmVydGljYWwsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItdmVydGljYWwsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci12ZXJ0aWNhbCwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItdmVydGljYWwsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWRpdmlkZXItdmVydGljYWwsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItdmVydGljYWwsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZGl2aWRlci12ZXJ0aWNhbCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZGl2aWRlci12ZXJ0aWNhbCwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWRpdmlkZXItdmVydGljYWwgewogIGJvcmRlci1sZWZ0LWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Cn0KLnVrLWxpZ2h0IC51ay1saXN0LW11dGVkID4gOjpiZWZvcmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtbXV0ZWQgPiA6OmJlZm9yZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LW11dGVkID4gOjpiZWZvcmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtbXV0ZWQgPiA6OmJlZm9yZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LW11dGVkID4gOjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saXN0LW11dGVkID4gOjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpc3QtbXV0ZWQgPiA6OmJlZm9yZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGlzdC1tdXRlZCA+IDo6YmVmb3JlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpc3QtbXV0ZWQgPiA6OmJlZm9yZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGlzdC1tdXRlZCA+IDo6YmVmb3JlLAoudWstb2ZmY2FudmFzLWJhciAudWstbGlzdC1tdXRlZCA+IDo6YmVmb3JlIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpICFpbXBvcnRhbnQ7Cn0KLnVrLWxpZ2h0IC51ay1saXN0LWVtcGhhc2lzID4gOjpiZWZvcmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtZW1waGFzaXMgPiA6OmJlZm9yZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWVtcGhhc2lzID4gOjpiZWZvcmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtZW1waGFzaXMgPiA6OmJlZm9yZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWVtcGhhc2lzID4gOjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saXN0LWVtcGhhc2lzID4gOjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpc3QtZW1waGFzaXMgPiA6OmJlZm9yZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGlzdC1lbXBoYXNpcyA+IDo6YmVmb3JlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpc3QtZW1waGFzaXMgPiA6OmJlZm9yZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGlzdC1lbXBoYXNpcyA+IDo6YmVmb3JlLAoudWstb2ZmY2FudmFzLWJhciAudWstbGlzdC1lbXBoYXNpcyA+IDo6YmVmb3JlIHsKICBjb2xvcjogI2ZmZiAhaW1wb3J0YW50Owp9Ci51ay1saWdodCAudWstbGlzdC1wcmltYXJ5ID4gOjpiZWZvcmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtcHJpbWFyeSA+IDo6YmVmb3JlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtcHJpbWFyeSA+IDo6YmVmb3JlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXByaW1hcnkgPiA6OmJlZm9yZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXByaW1hcnkgPiA6OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3QtcHJpbWFyeSA+IDo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saXN0LXByaW1hcnkgPiA6OmJlZm9yZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGlzdC1wcmltYXJ5ID4gOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbGlzdC1wcmltYXJ5ID4gOjpiZWZvcmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpc3QtcHJpbWFyeSA+IDo6YmVmb3JlLAoudWstb2ZmY2FudmFzLWJhciAudWstbGlzdC1wcmltYXJ5ID4gOjpiZWZvcmUgewogIGNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7Cn0KLnVrLWxpZ2h0IC51ay1saXN0LXNlY29uZGFyeSA+IDo6YmVmb3JlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXNlY29uZGFyeSA+IDo6YmVmb3JlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3Qtc2Vjb25kYXJ5ID4gOjpiZWZvcmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3Qtc2Vjb25kYXJ5ID4gOjpiZWZvcmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1zZWNvbmRhcnkgPiA6OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3Qtc2Vjb25kYXJ5ID4gOjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpc3Qtc2Vjb25kYXJ5ID4gOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3Qtc2Vjb25kYXJ5ID4gOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbGlzdC1zZWNvbmRhcnkgPiA6OmJlZm9yZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGlzdC1zZWNvbmRhcnkgPiA6OmJlZm9yZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpc3Qtc2Vjb25kYXJ5ID4gOjpiZWZvcmUgewogIGNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7Cn0KLnVrLWxpZ2h0IC51ay1saXN0LWJ1bGxldCA+IDo6YmVmb3JlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWJ1bGxldCA+IDo6YmVmb3JlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtYnVsbGV0ID4gOjpiZWZvcmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtYnVsbGV0ID4gOjpiZWZvcmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1idWxsZXQgPiA6OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3QtYnVsbGV0ID4gOjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpc3QtYnVsbGV0ID4gOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3QtYnVsbGV0ID4gOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbGlzdC1idWxsZXQgPiA6OmJlZm9yZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGlzdC1idWxsZXQgPiA6OmJlZm9yZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpc3QtYnVsbGV0ID4gOjpiZWZvcmUgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjI2JTIyJTIwaGVpZ2h0JTNEJTIyNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDYlMjA2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NjaXJjbGUlMjBmaWxsJTNEJTIycmdiYSUyODI1NSwlMjAyNTUsJTIwMjU1LCUyMDAuNyUyOSUyMiUyMGN4JTNEJTIyMyUyMiUyMGN5JTNEJTIyMyUyMiUyMHIlM0QlMjIzJTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIik7Cn0KLnVrLWxpZ2h0IC51ay1saXN0LWRpdmlkZXIgPiA6bnRoLWNoaWxkKG4rMiksCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtZGl2aWRlciA+IDpudGgtY2hpbGQobisyKSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWRpdmlkZXIgPiA6bnRoLWNoaWxkKG4rMiksCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtZGl2aWRlciA+IDpudGgtY2hpbGQobisyKSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWRpdmlkZXIgPiA6bnRoLWNoaWxkKG4rMiksCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saXN0LWRpdmlkZXIgPiA6bnRoLWNoaWxkKG4rMiksCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpc3QtZGl2aWRlciA+IDpudGgtY2hpbGQobisyKSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGlzdC1kaXZpZGVyID4gOm50aC1jaGlsZChuKzIpLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpc3QtZGl2aWRlciA+IDpudGgtY2hpbGQobisyKSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGlzdC1kaXZpZGVyID4gOm50aC1jaGlsZChuKzIpLAoudWstb2ZmY2FudmFzLWJhciAudWstbGlzdC1kaXZpZGVyID4gOm50aC1jaGlsZChuKzIpIHsKICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Cn0KLnVrLWxpZ2h0IC51ay1saXN0LXN0cmlwZWQgPiAqOm50aC1vZi10eXBlKG9kZCksCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3Qtc3RyaXBlZCA+ICo6bnRoLW9mLXR5cGUob2RkKSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXN0cmlwZWQgPiAqOm50aC1vZi10eXBlKG9kZCksCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3Qtc3RyaXBlZCA+ICo6bnRoLW9mLXR5cGUob2RkKSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXN0cmlwZWQgPiAqOm50aC1vZi10eXBlKG9kZCksCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saXN0LXN0cmlwZWQgPiAqOm50aC1vZi10eXBlKG9kZCksCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpc3Qtc3RyaXBlZCA+ICo6bnRoLW9mLXR5cGUob2RkKSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGlzdC1zdHJpcGVkID4gKjpudGgtb2YtdHlwZShvZGQpLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxpc3Qtc3RyaXBlZCA+ICo6bnRoLW9mLXR5cGUob2RkKSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGlzdC1zdHJpcGVkID4gKjpudGgtb2YtdHlwZShvZGQpLAoudWstb2ZmY2FudmFzLWJhciAudWstbGlzdC1zdHJpcGVkID4gKjpudGgtb2YtdHlwZShvZGQpIHsKICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwp9Ci51ay1saWdodCAudWstbGlzdC1zdHJpcGVkID4gOm50aC1vZi10eXBlKG9kZCksCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3Qtc3RyaXBlZCA+IDpudGgtb2YtdHlwZShvZGQpLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3Qtc3RyaXBlZCA+IDpudGgtb2YtdHlwZShvZGQpLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXN0cmlwZWQgPiA6bnRoLW9mLXR5cGUob2RkKSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXN0cmlwZWQgPiA6bnRoLW9mLXR5cGUob2RkKSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3Qtc3RyaXBlZCA+IDpudGgtb2YtdHlwZShvZGQpLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1saXN0LXN0cmlwZWQgPiA6bnRoLW9mLXR5cGUob2RkKSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGlzdC1zdHJpcGVkID4gOm50aC1vZi10eXBlKG9kZCksCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbGlzdC1zdHJpcGVkID4gOm50aC1vZi10eXBlKG9kZCksCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpc3Qtc3RyaXBlZCA+IDpudGgtb2YtdHlwZShvZGQpLAoudWstb2ZmY2FudmFzLWJhciAudWstbGlzdC1zdHJpcGVkID4gOm50aC1vZi10eXBlKG9kZCkgewogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKfQoudWstbGlnaHQgLnVrLXRhYmxlIHRoLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSB0aCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSB0aCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUgdGgsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUgdGgsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSB0aCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGFibGUgdGgsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlIHRoLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYmxlIHRoLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWJsZSB0aCwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlIHRoIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCAudWstdGFibGUgY2FwdGlvbiwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUgY2FwdGlvbiwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSBjYXB0aW9uLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSBjYXB0aW9uLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlIGNhcHRpb24sCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSBjYXB0aW9uLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZSBjYXB0aW9uLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSBjYXB0aW9uLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYmxlIGNhcHRpb24sCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYmxlIGNhcHRpb24sCi51ay1vZmZjYW52YXMtYmFyIC51ay10YWJsZSBjYXB0aW9uIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstdGFibGUgPiB0ci51ay1hY3RpdmUsCi51ay1saWdodCAudWstdGFibGUgdGJvZHkgdHIudWstYWN0aXZlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSA+IHRyLnVrLWFjdGl2ZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUgdGJvZHkgdHIudWstYWN0aXZlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlID4gdHIudWstYWN0aXZlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlIHRib2R5IHRyLnVrLWFjdGl2ZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUgPiB0ci51ay1hY3RpdmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlIHRib2R5IHRyLnVrLWFjdGl2ZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSA+IHRyLnVrLWFjdGl2ZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSA+IHRyLnVrLWFjdGl2ZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlIHRib2R5IHRyLnVrLWFjdGl2ZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGFibGUgPiB0ci51ay1hY3RpdmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYmxlIHRib2R5IHRyLnVrLWFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUgPiB0ci51ay1hY3RpdmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlIHRib2R5IHRyLnVrLWFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZSA+IHRyLnVrLWFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYmxlID4gdHIudWstYWN0aXZlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsCi51ay1vZmZjYW52YXMtYmFyIC51ay10YWJsZSA+IHRyLnVrLWFjdGl2ZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlIHRib2R5IHRyLnVrLWFjdGl2ZSB7CiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoudWstbGlnaHQgLnVrLXRhYmxlLWRpdmlkZXIgPiB0cjpub3QoOmZpcnN0LWNoaWxkKSwKLnVrLWxpZ2h0IC51ay10YWJsZS1kaXZpZGVyID4gOm5vdCg6Zmlyc3QtY2hpbGQpID4gdHIsCi51ay1saWdodCAudWstdGFibGUtZGl2aWRlciA+IDpmaXJzdC1jaGlsZCA+IHRyOm5vdCg6Zmlyc3QtY2hpbGQpLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyID4gdHI6bm90KDpmaXJzdC1jaGlsZCksCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWRpdmlkZXIgPiA6bm90KDpmaXJzdC1jaGlsZCkgPiB0ciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlciA+IDpmaXJzdC1jaGlsZCA+IHRyOm5vdCg6Zmlyc3QtY2hpbGQpLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWRpdmlkZXIgPiB0cjpub3QoOmZpcnN0LWNoaWxkKSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyID4gOm5vdCg6Zmlyc3QtY2hpbGQpID4gdHIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlciA+IDpmaXJzdC1jaGlsZCA+IHRyOm5vdCg6Zmlyc3QtY2hpbGQpLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyID4gdHI6bm90KDpmaXJzdC1jaGlsZCksCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWRpdmlkZXIgPiA6bm90KDpmaXJzdC1jaGlsZCkgPiB0ciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlciA+IDpmaXJzdC1jaGlsZCA+IHRyOm5vdCg6Zmlyc3QtY2hpbGQpLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWRpdmlkZXIgPiB0cjpub3QoOmZpcnN0LWNoaWxkKSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyID4gOm5vdCg6Zmlyc3QtY2hpbGQpID4gdHIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlciA+IDpmaXJzdC1jaGlsZCA+IHRyOm5vdCg6Zmlyc3QtY2hpbGQpLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtZGl2aWRlciA+IHRyOm5vdCg6Zmlyc3QtY2hpbGQpLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtZGl2aWRlciA+IDpub3QoOmZpcnN0LWNoaWxkKSA+IHRyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtZGl2aWRlciA+IDpmaXJzdC1jaGlsZCA+IHRyOm5vdCg6Zmlyc3QtY2hpbGQpLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZS1kaXZpZGVyID4gdHI6bm90KDpmaXJzdC1jaGlsZCksCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYmxlLWRpdmlkZXIgPiA6bm90KDpmaXJzdC1jaGlsZCkgPiB0ciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGFibGUtZGl2aWRlciA+IDpmaXJzdC1jaGlsZCA+IHRyOm5vdCg6Zmlyc3QtY2hpbGQpLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1kaXZpZGVyID4gdHI6bm90KDpmaXJzdC1jaGlsZCksCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWRpdmlkZXIgPiA6bm90KDpmaXJzdC1jaGlsZCkgPiB0ciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtZGl2aWRlciA+IDpmaXJzdC1jaGlsZCA+IHRyOm5vdCg6Zmlyc3QtY2hpbGQpLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYmxlLWRpdmlkZXIgPiB0cjpub3QoOmZpcnN0LWNoaWxkKSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZS1kaXZpZGVyID4gOm5vdCg6Zmlyc3QtY2hpbGQpID4gdHIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGFibGUtZGl2aWRlciA+IDpmaXJzdC1jaGlsZCA+IHRyOm5vdCg6Zmlyc3QtY2hpbGQpLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWJsZS1kaXZpZGVyID4gdHI6bm90KDpmaXJzdC1jaGlsZCksCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYmxlLWRpdmlkZXIgPiA6bm90KDpmaXJzdC1jaGlsZCkgPiB0ciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUtZGl2aWRlciA+IDpmaXJzdC1jaGlsZCA+IHRyOm5vdCg6Zmlyc3QtY2hpbGQpLAoudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUtZGl2aWRlciA+IHRyOm5vdCg6Zmlyc3QtY2hpbGQpLAoudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUtZGl2aWRlciA+IDpub3QoOmZpcnN0LWNoaWxkKSA+IHRyLAoudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUtZGl2aWRlciA+IDpmaXJzdC1jaGlsZCA+IHRyOm5vdCg6Zmlyc3QtY2hpbGQpIHsKICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Cn0KLnVrLWxpZ2h0IC51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUob2RkKSwKLnVrLWxpZ2h0IC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKG9kZCksCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgPiB0cjpudGgtb2YtdHlwZShvZGQpLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKG9kZCksCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtc3RyaXBlZCA+IHRyOm50aC1vZi10eXBlKG9kZCksCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUob2RkKSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgPiB0cjpudGgtb2YtdHlwZShvZGQpLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLXN0cmlwZWQgPiB0cjpudGgtb2YtdHlwZShvZGQpLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUob2RkKSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUob2RkKSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYmxlLXN0cmlwZWQgPiB0cjpudGgtb2YtdHlwZShvZGQpLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUtc3RyaXBlZCA+IHRyOm50aC1vZi10eXBlKG9kZCksCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlLXN0cmlwZWQgPiB0cjpudGgtb2YtdHlwZShvZGQpLAoudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpIHsKICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwogIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKfQoudWstbGlnaHQgLnVrLXRhYmxlLWhvdmVyID4gdHI6aG92ZXIsCi51ay1saWdodCAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWhvdmVyID4gdHI6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWhvdmVyID4gdHI6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWhvdmVyID4gdHI6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWhvdmVyID4gdHI6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1ob3ZlciA+IHRyOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYmxlLWhvdmVyID4gdHI6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1ob3ZlciA+IHRyOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZS1ob3ZlciA+IHRyOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWJsZS1ob3ZlciA+IHRyOmhvdmVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlLWhvdmVyID4gdHI6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay10YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciB7CiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoudWstbGlnaHQgLnVrLWljb24tbGluaywKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tbGluaywKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tbGluaywKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWljb24tbGluaywKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaWNvbi1saW5rLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWxpbmssCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaWNvbi1saW5rLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pY29uLWxpbmssCi51ay1vZmZjYW52YXMtYmFyIC51ay1pY29uLWxpbmsgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cn0KLnVrLWxpZ2h0IC51ay1pY29uLWxpbms6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tbGluazpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbms6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tbGluazpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbms6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWxpbms6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWljb24tbGluazpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1saW5rOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWljb24tbGluazpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaWNvbi1saW5rOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstaWNvbi1saW5rOmhvdmVyIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCAudWstaWNvbi1saW5rOmFjdGl2ZSwKLnVrLWxpZ2h0IC51ay1hY3RpdmUgPiAudWstaWNvbi1saW5rLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbms6YWN0aXZlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY3RpdmUgPiAudWstaWNvbi1saW5rLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tbGluazphY3RpdmUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWN0aXZlID4gLnVrLWljb24tbGluaywKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rOmFjdGl2ZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWN0aXZlID4gLnVrLWljb24tbGluaywKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbms6YWN0aXZlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjdGl2ZSA+IC51ay1pY29uLWxpbmssCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWxpbms6YWN0aXZlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYWN0aXZlID4gLnVrLWljb24tbGluaywKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaWNvbi1saW5rOmFjdGl2ZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYWN0aXZlID4gLnVrLWljb24tbGluaywKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1saW5rOmFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYWN0aXZlID4gLnVrLWljb24tbGluaywKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1pY29uLWxpbms6YWN0aXZlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWFjdGl2ZSA+IC51ay1pY29uLWxpbmssCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWljb24tbGluazphY3RpdmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWFjdGl2ZSA+IC51ay1pY29uLWxpbmssCi51ay1vZmZjYW52YXMtYmFyIC51ay1pY29uLWxpbms6YWN0aXZlLAoudWstb2ZmY2FudmFzLWJhciAudWstYWN0aXZlID4gLnVrLWljb24tbGluayB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLWljb24tYnV0dG9uLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbiwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbiwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b24sCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b24sCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWJ1dHRvbiwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaWNvbi1idXR0b24sCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWljb24tYnV0dG9uLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWljb24tYnV0dG9uLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pY29uLWJ1dHRvbiwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWljb24tYnV0dG9uIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLWljb24tYnV0dG9uOmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbjpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbjpob3ZlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b246aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b246aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWJ1dHRvbjpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaWNvbi1idXR0b246aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWljb24tYnV0dG9uOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWljb24tYnV0dG9uOmhvdmVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pY29uLWJ1dHRvbjpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWljb24tYnV0dG9uOmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpOwogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay1pY29uLWJ1dHRvbjphY3RpdmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tYnV0dG9uOmFjdGl2ZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbjphY3RpdmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tYnV0dG9uOmFjdGl2ZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbjphY3RpdmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWJ1dHRvbjphY3RpdmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWljb24tYnV0dG9uOmFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1idXR0b246YWN0aXZlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWljb24tYnV0dG9uOmFjdGl2ZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaWNvbi1idXR0b246YWN0aXZlLAoudWstb2ZmY2FudmFzLWJhciAudWstaWNvbi1idXR0b246YWN0aXZlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLWlucHV0LAoudWstbGlnaHQgLnVrLXNlbGVjdCwKLnVrLWxpZ2h0IC51ay10ZXh0YXJlYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXQsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dGFyZWEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXQsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0LAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0LAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWxlY3QsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dGFyZWEsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pbnB1dCwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNlbGVjdCwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHRhcmVhLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1pbnB1dCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc2VsZWN0LAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10ZXh0YXJlYSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXQsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNlbGVjdCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dGFyZWEsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaW5wdXQsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc2VsZWN0LAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRleHRhcmVhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pbnB1dCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2VsZWN0LAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10ZXh0YXJlYSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWlucHV0LAoudWstb2ZmY2FudmFzLWJhciAudWstc2VsZWN0LAoudWstb2ZmY2FudmFzLWJhciAudWstdGV4dGFyZWEgewogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7CiAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Cn0KLnVrLWxpZ2h0IC51ay1pbnB1dDpmb2N1cywKLnVrLWxpZ2h0IC51ay1zZWxlY3Q6Zm9jdXMsCi51ay1saWdodCAudWstdGV4dGFyZWE6Zm9jdXMsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0OmZvY3VzLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWxlY3Q6Zm9jdXMsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhOmZvY3VzLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0OmZvY3VzLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdDpmb2N1cywKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYTpmb2N1cywKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXQ6Zm9jdXMsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdDpmb2N1cywKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dGFyZWE6Zm9jdXMsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXQ6Zm9jdXMsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0OmZvY3VzLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhOmZvY3VzLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXQ6Zm9jdXMsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWxlY3Q6Zm9jdXMsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10ZXh0YXJlYTpmb2N1cywKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaW5wdXQ6Zm9jdXMsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNlbGVjdDpmb2N1cywKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGV4dGFyZWE6Zm9jdXMsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWlucHV0OmZvY3VzLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWxlY3Q6Zm9jdXMsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHRhcmVhOmZvY3VzLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWlucHV0OmZvY3VzLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNlbGVjdDpmb2N1cywKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10ZXh0YXJlYTpmb2N1cywKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaW5wdXQ6Zm9jdXMsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlbGVjdDpmb2N1cywKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGV4dGFyZWE6Zm9jdXMsCi51ay1vZmZjYW52YXMtYmFyIC51ay1pbnB1dDpmb2N1cywKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXNlbGVjdDpmb2N1cywKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRleHRhcmVhOmZvY3VzIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpOwogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7CiAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0OjpwbGFjZWhvbGRlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0OjpwbGFjZWhvbGRlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWlucHV0OjpwbGFjZWhvbGRlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXQ6OnBsYWNlaG9sZGVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWlucHV0OjpwbGFjZWhvbGRlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaW5wdXQ6OnBsYWNlaG9sZGVyLAoudWstb2ZmY2FudmFzLWJhciAudWstaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYTo6cGxhY2Vob2xkZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYTo6cGxhY2Vob2xkZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10ZXh0YXJlYTo6cGxhY2Vob2xkZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHRhcmVhOjpwbGFjZWhvbGRlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10ZXh0YXJlYTo6cGxhY2Vob2xkZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRleHRhcmVhOjpwbGFjZWhvbGRlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRleHRhcmVhOjpwbGFjZWhvbGRlciB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pLAoudWstb2ZmY2FudmFzLWJhciAudWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSB7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAyNCUyMDE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMnJnYmElMjgyNTUsJTIwMjU1LCUyMDI1NSwlMjAwLjclMjklMjIlMjBwb2ludHMlM0QlMjIxMiUyMDElMjA5JTIwNiUyMDE1JTIwNiUyMiUyMCUyRiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIycmdiYSUyODI1NSwlMjAyNTUsJTIwMjU1LCUyMDAuNyUyOSUyMiUyMHBvaW50cyUzRCUyMjEyJTIwMTMlMjA5JTIwOCUyMDE1JTIwOCUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSIpOwp9Ci51ay1saWdodCAudWstaW5wdXRbbGlzdF06aG92ZXIsCi51ay1saWdodCAudWstaW5wdXRbbGlzdF06Zm9jdXMsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0W2xpc3RdOmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dFtsaXN0XTpmb2N1cywKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dFtsaXN0XTpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dFtsaXN0XTpmb2N1cywKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXRbbGlzdF06aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0W2xpc3RdOmZvY3VzLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0W2xpc3RdOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0W2xpc3RdOmZvY3VzLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXRbbGlzdF06aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pbnB1dFtsaXN0XTpmb2N1cywKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaW5wdXRbbGlzdF06aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWlucHV0W2xpc3RdOmZvY3VzLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pbnB1dFtsaXN0XTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXRbbGlzdF06Zm9jdXMsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaW5wdXRbbGlzdF06aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaW5wdXRbbGlzdF06Zm9jdXMsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWlucHV0W2xpc3RdOmhvdmVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pbnB1dFtsaXN0XTpmb2N1cywKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWlucHV0W2xpc3RdOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstaW5wdXRbbGlzdF06Zm9jdXMgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIyNCUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMjQlMjAxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjJyZ2JhJTI4MjU1LCUyMDI1NSwlMjAyNTUsJTIwMC43JTI5JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxMiUyMDglMjA2JTIwMTYlMjA2JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIik7Cn0KLnVrLWxpZ2h0IC51ay1yYWRpbywKLnVrLWxpZ2h0IC51ay1jaGVja2JveCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW8sCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94LAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXJhZGlvLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94LAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbywKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3gsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW8sCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3gsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1yYWRpbywKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94LAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1yYWRpbywKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstY2hlY2tib3gsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXJhZGlvLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1yYWRpbywKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1jaGVja2JveCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstcmFkaW8sCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNoZWNrYm94LAoudWstb2ZmY2FudmFzLWJhciAudWstcmFkaW8sCi51ay1vZmZjYW52YXMtYmFyIC51ay1jaGVja2JveCB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwp9Ci51ay1saWdodCAudWstcmFkaW86Zm9jdXMsCi51ay1saWdodCAudWstY2hlY2tib3g6Zm9jdXMsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXJhZGlvOmZvY3VzLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpmb2N1cywKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpmb2N1cywKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpmb2N1cywKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Zm9jdXMsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmZvY3VzLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXJhZGlvOmZvY3VzLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmZvY3VzLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Zm9jdXMsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveDpmb2N1cywKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstcmFkaW86Zm9jdXMsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWNoZWNrYm94OmZvY3VzLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1yYWRpbzpmb2N1cywKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6Zm9jdXMsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstcmFkaW86Zm9jdXMsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstY2hlY2tib3g6Zm9jdXMsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXJhZGlvOmZvY3VzLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1jaGVja2JveDpmb2N1cywKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXJhZGlvOmZvY3VzLAoudWstb2ZmY2FudmFzLWJhciAudWstY2hlY2tib3g6Zm9jdXMgewogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7CiAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay1yYWRpbzpjaGVja2VkLAoudWstbGlnaHQgLnVrLWNoZWNrYm94OmNoZWNrZWQsCi51ay1saWdodCAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXJhZGlvOmNoZWNrZWQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveDpjaGVja2VkLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstcmFkaW86Y2hlY2tlZCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstY2hlY2tib3g6Y2hlY2tlZCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Y2hlY2tlZCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6Y2hlY2tlZCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1yYWRpbzpjaGVja2VkLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWNoZWNrYm94OmNoZWNrZWQsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstcmFkaW86Y2hlY2tlZCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstY2hlY2tib3g6Y2hlY2tlZCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXJhZGlvOmNoZWNrZWQsCi51ay1vZmZjYW52YXMtYmFyIC51ay1jaGVja2JveDpjaGVja2VkLAoudWstb2ZmY2FudmFzLWJhciAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLXJhZGlvOmNoZWNrZWQ6Zm9jdXMsCi51ay1saWdodCAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywKLnVrLWxpZ2h0IC51ay1jaGVja2JveDppbmRldGVybWluYXRlOmZvY3VzLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpjaGVja2VkOmZvY3VzLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDppbmRldGVybWluYXRlOmZvY3VzLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXJhZGlvOmNoZWNrZWQ6Zm9jdXMsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDppbmRldGVybWluYXRlOmZvY3VzLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpjaGVja2VkOmZvY3VzLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDppbmRldGVybWluYXRlOmZvY3VzLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXJhZGlvOmNoZWNrZWQ6Zm9jdXMsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDppbmRldGVybWluYXRlOmZvY3VzLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Y2hlY2tlZDpmb2N1cywKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmNoZWNrZWQ6Zm9jdXMsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveDppbmRldGVybWluYXRlOmZvY3VzLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1jaGVja2JveDpjaGVja2VkOmZvY3VzLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1jaGVja2JveDppbmRldGVybWluYXRlOmZvY3VzLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveDpjaGVja2VkOmZvY3VzLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveDppbmRldGVybWluYXRlOmZvY3VzLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXJhZGlvOmNoZWNrZWQ6Zm9jdXMsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1jaGVja2JveDppbmRldGVybWluYXRlOmZvY3VzLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1jaGVja2JveDpjaGVja2VkOmZvY3VzLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1jaGVja2JveDppbmRldGVybWluYXRlOmZvY3VzLAoudWstb2ZmY2FudmFzLWJhciAudWstcmFkaW86Y2hlY2tlZDpmb2N1cywKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWNoZWNrYm94OmNoZWNrZWQ6Zm9jdXMsCi51ay1vZmZjYW52YXMtYmFyIC51ay1jaGVja2JveDppbmRldGVybWluYXRlOmZvY3VzIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOwp9Ci51ay1saWdodCAudWstcmFkaW86Y2hlY2tlZCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXJhZGlvOmNoZWNrZWQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1yYWRpbzpjaGVja2VkLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1yYWRpbzpjaGVja2VkLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1yYWRpbzpjaGVja2VkLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXJhZGlvOmNoZWNrZWQsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXJhZGlvOmNoZWNrZWQsCi51ay1vZmZjYW52YXMtYmFyIC51ay1yYWRpbzpjaGVja2VkIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTYlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE2JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2NpcmNsZSUyMGZpbGwlM0QlMjIlMjM2NjYlMjIlMjBjeCUzRCUyMjglMjIlMjBjeSUzRCUyMjglMjIlMjByJTNEJTIyMiUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpOwp9Ci51ay1saWdodCAudWstY2hlY2tib3g6Y2hlY2tlZCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpjaGVja2VkLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpjaGVja2VkLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveDpjaGVja2VkLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1jaGVja2JveDpjaGVja2VkLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveDpjaGVja2VkLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWNoZWNrYm94OmNoZWNrZWQsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNoZWNrYm94OmNoZWNrZWQsCi51ay1vZmZjYW52YXMtYmFyIC51ay1jaGVja2JveDpjaGVja2VkIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTQlMjIlMjBoZWlnaHQlM0QlMjIxMSUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE0JTIwMTElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxJTIwNSUyMDcuNSUyMDIlMjA1JTIwMSUyMDUuNSUyMDUlMjAxMCUyMDEzJTIwMS41JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIik7Cn0KLnVrLWxpZ2h0IC51ay1jaGVja2JveDppbmRldGVybWluYXRlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDppbmRldGVybWluYXRlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxNiUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTYlMjAxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM2NjYlMjIlMjB4JTNEJTIyMyUyMiUyMHklM0QlMjI4JTIyJTIwd2lkdGglM0QlMjIxMCUyMiUyMGhlaWdodCUzRCUyMjElMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UiKTsKfQoudWstbGlnaHQgLnVrLWZvcm0tbGFiZWwsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWZvcm0tbGFiZWwsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1sYWJlbCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1sYWJlbCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1mb3JtLWxhYmVsLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstZm9ybS1sYWJlbCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZm9ybS1sYWJlbCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstZm9ybS1sYWJlbCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1mb3JtLWxhYmVsLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1mb3JtLWxhYmVsLAoudWstb2ZmY2FudmFzLWJhciAudWstZm9ybS1sYWJlbCB7CiAgY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IC51ay1mb3JtLWljb24sCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWZvcm0taWNvbiwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1mb3JtLWljb24sCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWZvcm0taWNvbiwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1mb3JtLWljb24sCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1mb3JtLWljb24sCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWZvcm0taWNvbiwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstZm9ybS1pY29uLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWZvcm0taWNvbiwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZm9ybS1pY29uLAoudWstb2ZmY2FudmFzLWJhciAudWstZm9ybS1pY29uIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstZm9ybS1pY29uOmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1mb3JtLWljb246aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1pY29uOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1mb3JtLWljb246aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1pY29uOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstZm9ybS1pY29uOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1mb3JtLWljb246aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWZvcm0taWNvbjpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1mb3JtLWljb246aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWZvcm0taWNvbjpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWZvcm0taWNvbjpob3ZlciB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLWJ1dHRvbi1kZWZhdWx0LAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tZGVmYXVsdCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLWRlZmF1bHQsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1kZWZhdWx0LAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi1kZWZhdWx0LAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tZGVmYXVsdCwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1kZWZhdWx0IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICBjb2xvcjogI2ZmZjsKICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLWJ1dHRvbi1kZWZhdWx0OmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQ6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQ6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLWRlZmF1bHQ6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1kZWZhdWx0OmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi1kZWZhdWx0OmhvdmVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1kZWZhdWx0OmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICBjb2xvcjogI2ZmZjsKICBib3JkZXItY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IC51ay1idXR0b24tZGVmYXVsdDphY3RpdmUsCi51ay1saWdodCAudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdDphY3RpdmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0LnVrLWFjdGl2ZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdDphY3RpdmUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdDphY3RpdmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0LnVrLWFjdGl2ZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdDphY3RpdmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tZGVmYXVsdDphY3RpdmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi1kZWZhdWx0LnVrLWFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tZGVmYXVsdC51ay1hY3RpdmUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi1kZWZhdWx0LnVrLWFjdGl2ZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tZGVmYXVsdC51ay1hY3RpdmUsCi51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tZGVmYXVsdDphY3RpdmUsCi51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tZGVmYXVsdC51ay1hY3RpdmUgewogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogIGNvbG9yOiAjZmZmOwogIGJvcmRlci1jb2xvcjogI2ZmZjsKfQoudWstbGlnaHQgLnVrLWJ1dHRvbi1wcmltYXJ5LAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnksCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnksCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tcHJpbWFyeSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLXByaW1hcnksCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1wcmltYXJ5LAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi1wcmltYXJ5LAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tcHJpbWFyeSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1wcmltYXJ5IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogIGNvbG9yOiAjNjY2Owp9Ci51ay1saWdodCAudWstYnV0dG9uLXByaW1hcnk6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5OmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5OmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1wcmltYXJ5OmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXByaW1hcnk6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLXByaW1hcnk6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1wcmltYXJ5OmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLXByaW1hcnk6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7CiAgY29sb3I6ICM2NjY7Cn0KLnVrLWxpZ2h0IC51ay1idXR0b24tcHJpbWFyeTphY3RpdmUsCi51ay1saWdodCAudWstYnV0dG9uLXByaW1hcnkudWstYWN0aXZlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeTphY3RpdmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeTphY3RpdmUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnkudWstYWN0aXZlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeTphY3RpdmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeTphY3RpdmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnkudWstYWN0aXZlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXByaW1hcnkudWstYWN0aXZlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tcHJpbWFyeTphY3RpdmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUsCi51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tcHJpbWFyeTphY3RpdmUsCi51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUgewogIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7CiAgY29sb3I6ICM2NjY7Cn0KLnVrLWxpZ2h0IC51ay1idXR0b24tc2Vjb25kYXJ5LAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5LAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnksCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnksCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1zZWNvbmRhcnksCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi1zZWNvbmRhcnksCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1zZWNvbmRhcnksCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLXNlY29uZGFyeSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXNlY29uZGFyeSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1zZWNvbmRhcnkgewogIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgY29sb3I6ICM2NjY7Cn0KLnVrLWxpZ2h0IC51ay1idXR0b24tc2Vjb25kYXJ5OmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5OmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7CiAgY29sb3I6ICM2NjY7Cn0KLnVrLWxpZ2h0IC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwKLnVrLWxpZ2h0IC51ay1idXR0b24tc2Vjb25kYXJ5LnVrLWFjdGl2ZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeTphY3RpdmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6YWN0aXZlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeTphY3RpdmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6YWN0aXZlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tc2Vjb25kYXJ5LnVrLWFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tc2Vjb25kYXJ5LnVrLWFjdGl2ZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXNlY29uZGFyeTphY3RpdmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlLAoudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLXNlY29uZGFyeTphY3RpdmUsCi51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tc2Vjb25kYXJ5LnVrLWFjdGl2ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjsKICBjb2xvcjogIzY2NjsKfQoudWstbGlnaHQgLnVrLWJ1dHRvbi10ZXh0LAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tdGV4dCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLXRleHQsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi10ZXh0LAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi10ZXh0LAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tdGV4dCwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi10ZXh0IHsKICBjb2xvcjogI2ZmZjsKfQoudWstbGlnaHQgLnVrLWJ1dHRvbi10ZXh0OjpiZWZvcmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0OjpiZWZvcmUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6OmJlZm9yZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6OmJlZm9yZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXRleHQ6OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLXRleHQ6OmJlZm9yZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXRleHQ6OmJlZm9yZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tdGV4dDo6YmVmb3JlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tdGV4dDo6YmVmb3JlLAoudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLXRleHQ6OmJlZm9yZSB7CiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjsKfQoudWstbGlnaHQgLnVrLWJ1dHRvbi10ZXh0OmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDpob3ZlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tdGV4dDpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLXRleHQ6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi10ZXh0OmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi10ZXh0OmhvdmVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tdGV4dDpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi10ZXh0OmhvdmVyIHsKICBjb2xvcjogI2ZmZjsKfQoudWstbGlnaHQgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDpkaXNhYmxlZCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDpkaXNhYmxlZCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tdGV4dDpkaXNhYmxlZCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tdGV4dDpkaXNhYmxlZCwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstYnV0dG9uLWxpbmssCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1saW5rLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1saW5rLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tbGluaywKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tbGluaywKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1saW5rLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tbGluaywKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWxpbmssCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLWxpbmssCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1saW5rLAoudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLWxpbmsgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCAudWstYnV0dG9uLWxpbms6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tbGluazpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tbGluazpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1idXR0b24tbGluazpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWxpbms6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnV0dG9uLWxpbms6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLWxpbms6aG92ZXIgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cn0KLnVrLWxpZ2h0LnVrLWNhcmQtYmFkZ2UsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikudWstY2FyZC1iYWRnZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpLnVrLWNhcmQtYmFkZ2UsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikudWstY2FyZC1iYWRnZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpLnVrLWNhcmQtYmFkZ2UsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5LnVrLWNhcmQtYmFkZ2UsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkudWstY2FyZC1iYWRnZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keS51ay1jYXJkLWJhZGdlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkudWstY2FyZC1iYWRnZSwKLnVrLW92ZXJsYXktcHJpbWFyeS51ay1jYXJkLWJhZGdlLAoudWstb2ZmY2FudmFzLWJhci51ay1jYXJkLWJhZGdlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogIGNvbG9yOiAjNjY2Owp9Ci51ay1saWdodCAudWstY2xvc2UsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNsb3NlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNsb3NlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jbG9zZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jbG9zZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWNsb3NlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1jbG9zZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstY2xvc2UsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstY2xvc2UsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNsb3NlLAoudWstb2ZmY2FudmFzLWJhciAudWstY2xvc2UgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cn0KLnVrLWxpZ2h0IC51ay1jbG9zZTpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2xvc2U6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2xvc2U6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNsb3NlOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNsb3NlOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY2xvc2U6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWNsb3NlOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1jbG9zZTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1jbG9zZTpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstY2xvc2U6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1jbG9zZTpob3ZlciB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLXRvdG9wLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdG90b3AsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdG90b3AsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10b3RvcCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdG90b3AsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRvdG9wLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRvdG9wLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10b3RvcCwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRvdG9wIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstdG90b3A6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRvdG9wOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRvdG9wOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcDpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcDpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRvdG9wOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10b3RvcDpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdG90b3A6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdG90b3A6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRvdG9wOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstdG90b3A6aG92ZXIgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay10b3RvcDphY3RpdmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRvdG9wOmFjdGl2ZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcDphY3RpdmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRvdG9wOmFjdGl2ZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcDphY3RpdmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10b3RvcDphY3RpdmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRvdG9wOmFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdG90b3A6YWN0aXZlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRvdG9wOmFjdGl2ZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdG90b3A6YWN0aXZlLAoudWstb2ZmY2FudmFzLWJhciAudWstdG90b3A6YWN0aXZlIHsKICBjb2xvcjogI2ZmZjsKfQoudWstbGlnaHQgLnVrLW1hcmtlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbWFya2VyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW1hcmtlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbWFya2VyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW1hcmtlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW1hcmtlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbWFya2VyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1tYXJrZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbWFya2VyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1tYXJrZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1tYXJrZXIgewogIGJhY2tncm91bmQ6ICNmOGY4Zjg7CiAgY29sb3I6ICM2NjY7Cn0KLnVrLWxpZ2h0IC51ay1tYXJrZXI6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW1hcmtlcjpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1tYXJrZXI6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW1hcmtlcjpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1tYXJrZXI6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1tYXJrZXI6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW1hcmtlcjpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbWFya2VyOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW1hcmtlcjpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbWFya2VyOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstbWFya2VyOmhvdmVyIHsKICBjb2xvcjogIzY2NjsKfQoudWstbGlnaHQgLnVrLWJhZGdlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1iYWRnZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1iYWRnZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYmFkZ2UsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYmFkZ2UsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1iYWRnZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYmFkZ2UsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJhZGdlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJhZGdlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1iYWRnZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJhZGdlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogIGNvbG9yOiAjNjY2ICFpbXBvcnRhbnQ7Cn0KLnVrLWxpZ2h0IC51ay1sYWJlbCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGFiZWwsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGFiZWwsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxhYmVsLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxhYmVsLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGFiZWwsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxhYmVsLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1sYWJlbCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1sYWJlbCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGFiZWwsCi51ay1vZmZjYW52YXMtYmFyIC51ay1sYWJlbCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICBjb2xvcjogIzY2NjsKfQoudWstbGlnaHQgLnVrLWFydGljbGUtbWV0YSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYXJ0aWNsZS1tZXRhLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFydGljbGUtbWV0YSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYXJ0aWNsZS1tZXRhLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFydGljbGUtbWV0YSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWFydGljbGUtbWV0YSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYXJ0aWNsZS1tZXRhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1hcnRpY2xlLW1ldGEsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYXJ0aWNsZS1tZXRhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1hcnRpY2xlLW1ldGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay1hcnRpY2xlLW1ldGEgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cn0KLnVrLWxpZ2h0IC51ay1zZWFyY2gtaW5wdXQsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtaW5wdXQsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtaW5wdXQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtaW5wdXQsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLWlucHV0LAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2VhcmNoLWlucHV0LAoudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoLWlucHV0IHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCAudWstc2VhcmNoLWlucHV0OjpwbGFjZWhvbGRlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWlucHV0OjpwbGFjZWhvbGRlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbiwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbiwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb24sCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb24sCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb24sCi51ay1vZmZjYW52YXMtYmFyIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbjpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbjpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb246aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb246aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb246aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQsCi51ay1vZmZjYW52YXMtYmFyIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKfQoudWstbGlnaHQgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQ6Zm9jdXMsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQ6Zm9jdXMsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dDpmb2N1cywKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dDpmb2N1cywKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3VzLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dDpmb2N1cywKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dDpmb2N1cywKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dDpmb2N1cywKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3VzLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3VzLAoudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dDpmb2N1cyB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTsKfQoudWstbGlnaHQgLnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWlucHV0LAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWlucHV0LAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWlucHV0LAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXQsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWlucHV0LAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXQsCi51ay1vZmZjYW52YXMtYmFyIC51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXQgewogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Owp9Ci51ay1saWdodCAudWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaW5wdXQsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWlucHV0LAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWlucHV0LAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWlucHV0LAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaW5wdXQsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaW5wdXQsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWlucHV0LAoudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaW5wdXQgewogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Owp9Ci51ay1saWdodCAudWstc2VhcmNoLXRvZ2dsZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLXRvZ2dsZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtdG9nZ2xlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtdG9nZ2xlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC10b2dnbGUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtdG9nZ2xlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zZWFyY2gtdG9nZ2xlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtdG9nZ2xlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNlYXJjaC10b2dnbGUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlYXJjaC10b2dnbGUsCi51ay1vZmZjYW52YXMtYmFyIC51ay1zZWFyY2gtdG9nZ2xlIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtdG9nZ2xlOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtdG9nZ2xlOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC10b2dnbGU6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtdG9nZ2xlOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zZWFyY2gtdG9nZ2xlOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtdG9nZ2xlOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNlYXJjaC10b2dnbGU6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlYXJjaC10b2dnbGU6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1zZWFyY2gtdG9nZ2xlOmhvdmVyIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCAudWstYWNjb3JkaW9uLXRpdGxlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWNjb3JkaW9uLXRpdGxlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWNjb3JkaW9uLXRpdGxlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYWNjb3JkaW9uLXRpdGxlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1hY2NvcmRpb24tdGl0bGUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWFjY29yZGlvbi10aXRsZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1hY2NvcmRpb24tdGl0bGUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWFjY29yZGlvbi10aXRsZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWFjY29yZGlvbi10aXRsZSB7CiAgY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IC51ay1hY2NvcmRpb24tdGl0bGU6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZTpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGU6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZTpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGU6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1hY2NvcmRpb24tdGl0bGU6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWFjY29yZGlvbi10aXRsZTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWFjY29yZGlvbi10aXRsZTpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCAudWstZ3JpZC1kaXZpZGVyID4gOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1ncmlkLWRpdmlkZXIgPiA6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZ3JpZC1kaXZpZGVyID4gOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1ncmlkLWRpdmlkZXIgPiA6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZ3JpZC1kaXZpZGVyID4gOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstZ3JpZC1kaXZpZGVyID4gOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1ncmlkLWRpdmlkZXIgPiA6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWdyaWQtZGl2aWRlciA+IDpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1ncmlkLWRpdmlkZXIgPiA6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWdyaWQtZGl2aWRlciA+IDpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWdyaWQtZGl2aWRlciA+IDpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSB7CiAgYm9yZGVyLWxlZnQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKfQoudWstbGlnaHQgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXN0YWNrID4gLnVrLWdyaWQtbWFyZ2luOjpiZWZvcmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXN0YWNrID4gLnVrLWdyaWQtbWFyZ2luOjpiZWZvcmUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbjo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbjo6YmVmb3JlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjayA+IC51ay1ncmlkLW1hcmdpbjo6YmVmb3JlLAoudWstb2ZmY2FudmFzLWJhciAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2sgPiAudWstZ3JpZC1tYXJnaW46OmJlZm9yZSB7CiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwp9Ci51ay1saWdodCAudWstbmF2LWRlZmF1bHQgPiBsaSA+IGEsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0ID4gbGkgPiBhLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0ID4gbGkgPiBhLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCA+IGxpID4gYSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCA+IGxpID4gYSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0ID4gbGkgPiBhLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtZGVmYXVsdCA+IGxpID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQgPiBsaSA+IGEsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LWRlZmF1bHQgPiBsaSA+IGEsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1kZWZhdWx0ID4gbGkgPiBhLAoudWstb2ZmY2FudmFzLWJhciAudWstbmF2LWRlZmF1bHQgPiBsaSA+IGEgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cn0KLnVrLWxpZ2h0IC51ay1uYXYtZGVmYXVsdCA+IGxpID4gYTpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgPiBsaSA+IGE6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgPiBsaSA+IGE6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0ID4gbGkgPiBhOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0ID4gbGkgPiBhOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQgPiBsaSA+IGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1kZWZhdWx0ID4gbGkgPiBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCA+IGxpID4gYTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtZGVmYXVsdCA+IGxpID4gYTpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LWRlZmF1bHQgPiBsaSA+IGE6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtZGVmYXVsdCA+IGxpID4gYTpob3ZlciB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLW5hdi1kZWZhdWx0ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LWRlZmF1bHQgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LWRlZmF1bHQgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtZGVmYXVsdCA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtZGVmYXVsdCA+IGxpLnVrLWFjdGl2ZSA+IGEgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLAoudWstb2ZmY2FudmFzLWJhciAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciB7CiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwp9Ci51ay1saWdodCAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYTpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYTpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVyIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhIHsKICBjb2xvcjogI2ZmZjsKfQoudWstbGlnaHQgLnVrLW5hdi1wcmltYXJ5ID4gbGkgPiBhLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSA+IGxpID4gYSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSA+IGxpID4gYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgPiBsaSA+IGEsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgPiBsaSA+IGEsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSA+IGxpID4gYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXByaW1hcnkgPiBsaSA+IGEsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5ID4gbGkgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1wcmltYXJ5ID4gbGkgPiBhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtcHJpbWFyeSA+IGxpID4gYSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1wcmltYXJ5ID4gbGkgPiBhIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstbmF2LXByaW1hcnkgPiBsaSA+IGE6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5ID4gbGkgPiBhOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5ID4gbGkgPiBhOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSA+IGxpID4gYTpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSA+IGxpID4gYTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5ID4gbGkgPiBhOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtcHJpbWFyeSA+IGxpID4gYTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnkgPiBsaSA+IGE6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXByaW1hcnkgPiBsaSA+IGE6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1wcmltYXJ5ID4gbGkgPiBhOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXByaW1hcnkgPiBsaSA+IGE6aG92ZXIgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay1uYXYtcHJpbWFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1wcmltYXJ5ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnkgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1wcmltYXJ5ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXByaW1hcnkgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXByaW1hcnkgPiBsaS51ay1hY3RpdmUgPiBhIHsKICBjb2xvcjogI2ZmZjsKfQoudWstbGlnaHQgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtaGVhZGVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWhlYWRlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWhlYWRlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWhlYWRlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtaGVhZGVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtaGVhZGVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWhlYWRlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtaGVhZGVyIHsKICBjb2xvcjogI2ZmZjsKfQoudWstbGlnaHQgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1kaXZpZGVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1kaXZpZGVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1kaXZpZGVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWRpdmlkZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1kaXZpZGVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWRpdmlkZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWRpdmlkZXIgewogIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKfQoudWstbGlnaHQgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGEsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhLAoudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYSB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpob3ZlciB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSB7CiAgY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGEsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGEsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGEsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGEsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGEsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGEgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYTpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYTpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGE6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGE6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhOmhvdmVyIHsKICBjb2xvcjogI2ZmZjsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7Cn0KLnVrLWxpZ2h0IC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXNlY29uZGFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkudWstYWN0aXZlID4gYSB7CiAgY29sb3I6ICNmZmY7CiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwp9Ci51ay1saWdodCAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YnRpdGxlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3VidGl0bGUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YnRpdGxlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3VidGl0bGUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YnRpdGxlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YnRpdGxlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3VidGl0bGUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWJ0aXRsZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3VidGl0bGUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWJ0aXRsZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWJ0aXRsZSB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGE6aG92ZXIgLnVrLW5hdi1zdWJ0aXRsZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYTpob3ZlciAudWstbmF2LXN1YnRpdGxlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGE6aG92ZXIgLnVrLW5hdi1zdWJ0aXRsZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYTpob3ZlciAudWstbmF2LXN1YnRpdGxlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGE6aG92ZXIgLnVrLW5hdi1zdWJ0aXRsZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaSA+IGE6aG92ZXIgLnVrLW5hdi1zdWJ0aXRsZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYTpob3ZlciAudWstbmF2LXN1YnRpdGxlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhOmhvdmVyIC51ay1uYXYtc3VidGl0bGUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXNlY29uZGFyeSA+IGxpID4gYTpob3ZlciAudWstbmF2LXN1YnRpdGxlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhOmhvdmVyIC51ay1uYXYtc3VidGl0bGUsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkgPiBhOmhvdmVyIC51ay1uYXYtc3VidGl0bGUgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkudWstYWN0aXZlID4gYSAudWstbmF2LXN1YnRpdGxlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5ID4gbGkudWstYWN0aXZlID4gYSAudWstbmF2LXN1YnRpdGxlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaS51ay1hY3RpdmUgPiBhIC51ay1uYXYtc3VidGl0bGUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaS51ay1hY3RpdmUgPiBhIC51ay1uYXYtc3VidGl0bGUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEgLnVrLW5hdi1zdWJ0aXRsZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaS51ay1hY3RpdmUgPiBhIC51ay1uYXYtc3VidGl0bGUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaS51ay1hY3RpdmUgPiBhIC51ay1uYXYtc3VidGl0bGUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaS51ay1hY3RpdmUgPiBhIC51ay1uYXYtc3VidGl0bGUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXNlY29uZGFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEgLnVrLW5hdi1zdWJ0aXRsZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXNlY29uZGFyeSA+IGxpLnVrLWFjdGl2ZSA+IGEgLnVrLW5hdi1zdWJ0aXRsZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1zZWNvbmRhcnkgPiBsaS51ay1hY3RpdmUgPiBhIC51ay1uYXYtc3VidGl0bGUgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWhlYWRlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWhlYWRlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtaGVhZGVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtaGVhZGVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1oZWFkZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtaGVhZGVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtaGVhZGVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtaGVhZGVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1oZWFkZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1oZWFkZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtaGVhZGVyIHsKICBjb2xvcjogI2ZmZjsKfQoudWstbGlnaHQgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1kaXZpZGVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtZGl2aWRlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtZGl2aWRlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWRpdmlkZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWRpdmlkZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtZGl2aWRlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWRpdmlkZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1kaXZpZGVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1kaXZpZGVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtZGl2aWRlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1kaXZpZGVyIHsKICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Cn0KLnVrLWxpZ2h0IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGEsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGEsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGEsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGEsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhLAoudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYTpob3ZlciB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmUgPiBhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZSA+IGEgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCAudWstbmF2LnVrLW5hdi1kaXZpZGVyID4gOm5vdCgudWstbmF2LWRpdmlkZXIpICsgOm5vdCgudWstbmF2LWhlYWRlciwgLnVrLW5hdi1kaXZpZGVyKSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LnVrLW5hdi1kaXZpZGVyID4gOm5vdCgudWstbmF2LWRpdmlkZXIpICsgOm5vdCgudWstbmF2LWhlYWRlciwgLnVrLW5hdi1kaXZpZGVyKSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYudWstbmF2LWRpdmlkZXIgPiA6bm90KC51ay1uYXYtZGl2aWRlcikgKyA6bm90KC51ay1uYXYtaGVhZGVyLCAudWstbmF2LWRpdmlkZXIpLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYudWstbmF2LWRpdmlkZXIgPiA6bm90KC51ay1uYXYtZGl2aWRlcikgKyA6bm90KC51ay1uYXYtaGVhZGVyLCAudWstbmF2LWRpdmlkZXIpLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi51ay1uYXYtZGl2aWRlciA+IDpub3QoLnVrLW5hdi1kaXZpZGVyKSArIDpub3QoLnVrLW5hdi1oZWFkZXIsIC51ay1uYXYtZGl2aWRlciksCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYudWstbmF2LWRpdmlkZXIgPiA6bm90KC51ay1uYXYtZGl2aWRlcikgKyA6bm90KC51ay1uYXYtaGVhZGVyLCAudWstbmF2LWRpdmlkZXIpLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXYudWstbmF2LWRpdmlkZXIgPiA6bm90KC51ay1uYXYtZGl2aWRlcikgKyA6bm90KC51ay1uYXYtaGVhZGVyLCAudWstbmF2LWRpdmlkZXIpLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYudWstbmF2LWRpdmlkZXIgPiA6bm90KC51ay1uYXYtZGl2aWRlcikgKyA6bm90KC51ay1uYXYtaGVhZGVyLCAudWstbmF2LWRpdmlkZXIpLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdi51ay1uYXYtZGl2aWRlciA+IDpub3QoLnVrLW5hdi1kaXZpZGVyKSArIDpub3QoLnVrLW5hdi1oZWFkZXIsIC51ay1uYXYtZGl2aWRlciksCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi51ay1uYXYtZGl2aWRlciA+IDpub3QoLnVrLW5hdi1kaXZpZGVyKSArIDpub3QoLnVrLW5hdi1oZWFkZXIsIC51ay1uYXYtZGl2aWRlciksCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYudWstbmF2LWRpdmlkZXIgPiA6bm90KC51ay1uYXYtZGl2aWRlcikgKyA6bm90KC51ay1uYXYtaGVhZGVyLCAudWstbmF2LWRpdmlkZXIpIHsKICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Cn0KLnVrLWxpZ2h0IC51ay1uYXZiYXItbmF2ID4gbGkgPiBhLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2ID4gbGkgPiBhLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGEsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGEsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdiA+IGxpID4gYSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGEsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGEsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGEsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2YmFyLW5hdiA+IGxpID4gYSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2YmFyLW5hdiA+IGxpID4gYSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGEgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cn0KLnVrLWxpZ2h0IC51ay1uYXZiYXItbmF2ID4gbGk6aG92ZXIgPiBhLAoudWstbGlnaHQgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGFbYXJpYS1leHBhbmRlZD0idHJ1ZSJdLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2ID4gbGk6aG92ZXIgPiBhLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2ID4gbGkgPiBhW2FyaWEtZXhwYW5kZWQ9InRydWUiXSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2ID4gbGk6aG92ZXIgPiBhLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGFbYXJpYS1leHBhbmRlZD0idHJ1ZSJdLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2ID4gbGk6aG92ZXIgPiBhLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2ID4gbGkgPiBhW2FyaWEtZXhwYW5kZWQ9InRydWUiXSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2ID4gbGk6aG92ZXIgPiBhLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGFbYXJpYS1leHBhbmRlZD0idHJ1ZSJdLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLW5hdiA+IGxpOmhvdmVyID4gYSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGFbYXJpYS1leHBhbmRlZD0idHJ1ZSJdLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXZiYXItbmF2ID4gbGk6aG92ZXIgPiBhLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXZiYXItbmF2ID4gbGkgPiBhW2FyaWEtZXhwYW5kZWQ9InRydWUiXSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLW5hdiA+IGxpOmhvdmVyID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLW5hdiA+IGxpID4gYVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0sCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2YmFyLW5hdiA+IGxpOmhvdmVyID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXZiYXItbmF2ID4gbGkgPiBhW2FyaWEtZXhwYW5kZWQ9InRydWUiXSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2YmFyLW5hdiA+IGxpOmhvdmVyID4gYSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2YmFyLW5hdiA+IGxpID4gYVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0sCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXZiYXItbmF2ID4gbGk6aG92ZXIgPiBhLAoudWstb2ZmY2FudmFzLWJhciAudWstbmF2YmFyLW5hdiA+IGxpID4gYVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0gewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay1uYXZiYXItbmF2ID4gbGkgPiBhOmFjdGl2ZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdiA+IGxpID4gYTphY3RpdmUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdiA+IGxpID4gYTphY3RpdmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGE6YWN0aXZlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGE6YWN0aXZlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLW5hdiA+IGxpID4gYTphY3RpdmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdmJhci1uYXYgPiBsaSA+IGE6YWN0aXZlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItbmF2ID4gbGkgPiBhOmFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXZiYXItbmF2ID4gbGkgPiBhOmFjdGl2ZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2YmFyLW5hdiA+IGxpID4gYTphY3RpdmUsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXZiYXItbmF2ID4gbGkgPiBhOmFjdGl2ZSB7CiAgY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IC51ay1uYXZiYXItbmF2ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdiA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdiA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXYgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXYgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLW5hdiA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdmJhci1uYXYgPiBsaS51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItbmF2ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXZiYXItbmF2ID4gbGkudWstYWN0aXZlID4gYSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2YmFyLW5hdiA+IGxpLnVrLWFjdGl2ZSA+IGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXZiYXItbmF2ID4gbGkudWstYWN0aXZlID4gYSB7CiAgY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IC51ay1uYXZiYXItaXRlbSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLWl0ZW0sCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLWl0ZW0sCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1pdGVtLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1pdGVtLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLWl0ZW0sCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdmJhci1pdGVtLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItaXRlbSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXZiYXItaXRlbSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2YmFyLWl0ZW0sCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXZiYXItaXRlbSB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLW5hdmJhci10b2dnbGUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItdG9nZ2xlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLXRvZ2dsZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbmF2YmFyLXRvZ2dsZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLXRvZ2dsZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXZiYXItdG9nZ2xlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXZiYXItdG9nZ2xlLAoudWstb2ZmY2FudmFzLWJhciAudWstbmF2YmFyLXRvZ2dsZSB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsCi51ay1saWdodCAudWstbmF2YmFyLXRvZ2dsZVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0sCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGVbYXJpYS1leHBhbmRlZD0idHJ1ZSJdLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0sCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGVbYXJpYS1leHBhbmRlZD0idHJ1ZSJdLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0sCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItdG9nZ2xlOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLXRvZ2dsZVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0sCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdmJhci10b2dnbGVbYXJpYS1leHBhbmRlZD0idHJ1ZSJdLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItdG9nZ2xlOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9InRydWUiXSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1uYXZiYXItdG9nZ2xlOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW5hdmJhci10b2dnbGVbYXJpYS1leHBhbmRlZD0idHJ1ZSJdLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXZiYXItdG9nZ2xlOmhvdmVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXZiYXItdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9InRydWUiXSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1uYXZiYXItdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9InRydWUiXSB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLXN1Ym5hdiA+ICogPiA6Zmlyc3QtY2hpbGQsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdiA+ICogPiA6Zmlyc3QtY2hpbGQsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2ID4gKiA+IDpmaXJzdC1jaGlsZCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2ID4gKiA+IDpmaXJzdC1jaGlsZCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYgPiAqID4gOmZpcnN0LWNoaWxkLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2ID4gKiA+IDpmaXJzdC1jaGlsZCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc3VibmF2ID4gKiA+IDpmaXJzdC1jaGlsZCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2ID4gKiA+IDpmaXJzdC1jaGlsZCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zdWJuYXYgPiAqID4gOmZpcnN0LWNoaWxkLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zdWJuYXYgPiAqID4gOmZpcnN0LWNoaWxkLAoudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2ID4gKiA+IDpmaXJzdC1jaGlsZCB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLXN1Ym5hdiA+ICogPiBhOmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYgPiAqID4gYTpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYgPiAqID4gYTpob3ZlciwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2ID4gKiA+IGE6aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2ID4gKiA+IGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYgPiAqID4gYTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc3VibmF2ID4gKiA+IGE6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdiA+ICogPiBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXN1Ym5hdiA+ICogPiBhOmhvdmVyLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zdWJuYXYgPiAqID4gYTpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXN1Ym5hdiA+ICogPiBhOmhvdmVyIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCAudWstc3VibmF2ID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdiA+IC51ay1hY3RpdmUgPiBhLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdiA+IC51ay1hY3RpdmUgPiBhLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYgPiAudWstYWN0aXZlID4gYSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYgPiAudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdiA+IC51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zdWJuYXYgPiAudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2ID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc3VibmF2ID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXN1Ym5hdiA+IC51ay1hY3RpdmUgPiBhLAoudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2ID4gLnVrLWFjdGl2ZSA+IGEgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCAudWstc3VibmF2LWRpdmlkZXIgPiA6bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1kaXZpZGVyID4gOm50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1kaXZpZGVyID4gOm50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtZGl2aWRlciA+IDpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtZGl2aWRlciA+IDpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdi1kaXZpZGVyID4gOm50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zdWJuYXYtZGl2aWRlciA+IDpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2LWRpdmlkZXIgPiA6bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc3VibmF2LWRpdmlkZXIgPiA6bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXN1Ym5hdi1kaXZpZGVyID4gOm50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2LWRpdmlkZXIgPiA6bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUgewogIGJvcmRlci1sZWZ0LWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Cn0KLnVrLWxpZ2h0IC51ay1zdWJuYXYtcGlsbCA+ICogPiA6Zmlyc3QtY2hpbGQsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsID4gKiA+IDpmaXJzdC1jaGlsZCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbCA+ICogPiA6Zmlyc3QtY2hpbGQsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsID4gKiA+IDpmaXJzdC1jaGlsZCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbCA+ICogPiA6Zmlyc3QtY2hpbGQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtcGlsbCA+ICogPiA6Zmlyc3QtY2hpbGQsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXN1Ym5hdi1waWxsID4gKiA+IDpmaXJzdC1jaGlsZCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2LXBpbGwgPiAqID4gOmZpcnN0LWNoaWxkLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXN1Ym5hdi1waWxsID4gKiA+IDpmaXJzdC1jaGlsZCwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc3VibmF2LXBpbGwgPiAqID4gOmZpcnN0LWNoaWxkLAoudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2LXBpbGwgPiAqID4gOmZpcnN0LWNoaWxkIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstc3VibmF2LXBpbGwgPiAqID4gYTpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGwgPiAqID4gYTpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsID4gKiA+IGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXN1Ym5hdi1waWxsID4gKiA+IGE6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXN1Ym5hdi1waWxsID4gKiA+IGE6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLXN1Ym5hdi1waWxsID4gKiA+IGE6YWN0aXZlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmFjdGl2ZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmFjdGl2ZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGwgPiAqID4gYTphY3RpdmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGwgPiAqID4gYTphY3RpdmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmFjdGl2ZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc3VibmF2LXBpbGwgPiAqID4gYTphY3RpdmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdi1waWxsID4gKiA+IGE6YWN0aXZlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXN1Ym5hdi1waWxsID4gKiA+IGE6YWN0aXZlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zdWJuYXYtcGlsbCA+ICogPiBhOmFjdGl2ZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXN1Ym5hdi1waWxsID4gKiA+IGE6YWN0aXZlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLXN1Ym5hdi1waWxsID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGwgPiAudWstYWN0aXZlID4gYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGwgPiAudWstYWN0aXZlID4gYSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbCA+IC51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2LXBpbGwgPiAudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc3VibmF2LXBpbGwgPiAudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2LXBpbGwgPiAudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zdWJuYXYtcGlsbCA+IC51ay1hY3RpdmUgPiBhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zdWJuYXYtcGlsbCA+IC51ay1hY3RpdmUgPiBhLAoudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2LXBpbGwgPiAudWstYWN0aXZlID4gYSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICBjb2xvcjogIzY2NjsKfQoudWstbGlnaHQgLnVrLXN1Ym5hdiA+IC51ay1kaXNhYmxlZCA+IGEsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdiA+IC51ay1kaXNhYmxlZCA+IGEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2ID4gLnVrLWRpc2FibGVkID4gYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2ID4gLnVrLWRpc2FibGVkID4gYSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYgPiAudWstZGlzYWJsZWQgPiBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2ID4gLnVrLWRpc2FibGVkID4gYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc3VibmF2ID4gLnVrLWRpc2FibGVkID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2ID4gLnVrLWRpc2FibGVkID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zdWJuYXYgPiAudWstZGlzYWJsZWQgPiBhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zdWJuYXYgPiAudWstZGlzYWJsZWQgPiBhLAoudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2ID4gLnVrLWRpc2FibGVkID4gYSB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLWJyZWFkY3J1bWIgPiAqID4gKiwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYiA+ICogPiAqLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWIgPiAqID4gKiwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYiA+ICogPiAqLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWIgPiAqID4gKiwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJyZWFkY3J1bWIgPiAqID4gKiwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnJlYWRjcnVtYiA+ICogPiAqLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1icmVhZGNydW1iID4gKiA+ICosCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnJlYWRjcnVtYiA+ICogPiAqLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1icmVhZGNydW1iID4gKiA+ICosCi51ay1vZmZjYW52YXMtYmFyIC51ay1icmVhZGNydW1iID4gKiA+ICogewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cn0KLnVrLWxpZ2h0IC51ay1icmVhZGNydW1iID4gKiA+IDpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYiA+ICogPiA6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYiA+ICogPiA6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWIgPiAqID4gOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWIgPiAqID4gOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnJlYWRjcnVtYiA+ICogPiA6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWJyZWFkY3J1bWIgPiAqID4gOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1icmVhZGNydW1iID4gKiA+IDpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1icmVhZGNydW1iID4gKiA+IDpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnJlYWRjcnVtYiA+ICogPiA6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1icmVhZGNydW1iID4gKiA+IDpob3ZlciB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLWJyZWFkY3J1bWIgPiA6bGFzdC1jaGlsZCA+ICosCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWIgPiA6bGFzdC1jaGlsZCA+ICosCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYiA+IDpsYXN0LWNoaWxkID4gKiwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYiA+IDpsYXN0LWNoaWxkID4gKiwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1icmVhZGNydW1iID4gOmxhc3QtY2hpbGQgPiAqLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnJlYWRjcnVtYiA+IDpsYXN0LWNoaWxkID4gKiwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnJlYWRjcnVtYiA+IDpsYXN0LWNoaWxkID4gKiwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnJlYWRjcnVtYiA+IDpsYXN0LWNoaWxkID4gKiwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1icmVhZGNydW1iID4gOmxhc3QtY2hpbGQgPiAqLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1icmVhZGNydW1iID4gOmxhc3QtY2hpbGQgPiAqLAoudWstb2ZmY2FudmFzLWJhciAudWstYnJlYWRjcnVtYiA+IDpsYXN0LWNoaWxkID4gKiB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLWJyZWFkY3J1bWIgPiA6bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWIgPiA6bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYiA+IDpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYiA+IDpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1icmVhZGNydW1iID4gOm50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnJlYWRjcnVtYiA+IDpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYnJlYWRjcnVtYiA+IDpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnJlYWRjcnVtYiA+IDpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1icmVhZGNydW1iID4gOm50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1icmVhZGNydW1iID4gOm50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLAoudWstb2ZmY2FudmFzLWJhciAudWstYnJlYWRjcnVtYiA+IDpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLXBhZ2luYXRpb24gPiAqID4gKiwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbiA+ICogPiAqLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24gPiAqID4gKiwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbiA+ICogPiAqLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24gPiAqID4gKiwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXBhZ2luYXRpb24gPiAqID4gKiwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstcGFnaW5hdGlvbiA+ICogPiAqLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1wYWdpbmF0aW9uID4gKiA+ICosCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstcGFnaW5hdGlvbiA+ICogPiAqLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1wYWdpbmF0aW9uID4gKiA+ICosCi51ay1vZmZjYW52YXMtYmFyIC51ay1wYWdpbmF0aW9uID4gKiA+ICogewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cn0KLnVrLWxpZ2h0IC51ay1wYWdpbmF0aW9uID4gKiA+IDpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbiA+ICogPiA6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbiA+ICogPiA6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24gPiAqID4gOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24gPiAqID4gOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstcGFnaW5hdGlvbiA+ICogPiA6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXBhZ2luYXRpb24gPiAqID4gOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1wYWdpbmF0aW9uID4gKiA+IDpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1wYWdpbmF0aW9uID4gKiA+IDpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstcGFnaW5hdGlvbiA+ICogPiA6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1wYWdpbmF0aW9uID4gKiA+IDpob3ZlciB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLXBhZ2luYXRpb24gPiAudWstYWN0aXZlID4gKiwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbiA+IC51ay1hY3RpdmUgPiAqLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24gPiAudWstYWN0aXZlID4gKiwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbiA+IC51ay1hY3RpdmUgPiAqLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24gPiAudWstYWN0aXZlID4gKiwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXBhZ2luYXRpb24gPiAudWstYWN0aXZlID4gKiwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstcGFnaW5hdGlvbiA+IC51ay1hY3RpdmUgPiAqLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1wYWdpbmF0aW9uID4gLnVrLWFjdGl2ZSA+ICosCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstcGFnaW5hdGlvbiA+IC51ay1hY3RpdmUgPiAqLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1wYWdpbmF0aW9uID4gLnVrLWFjdGl2ZSA+ICosCi51ay1vZmZjYW52YXMtYmFyIC51ay1wYWdpbmF0aW9uID4gLnVrLWFjdGl2ZSA+ICogewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay1wYWdpbmF0aW9uID4gLnVrLWRpc2FibGVkID4gKiwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbiA+IC51ay1kaXNhYmxlZCA+ICosCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbiA+IC51ay1kaXNhYmxlZCA+ICosCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24gPiAudWstZGlzYWJsZWQgPiAqLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24gPiAudWstZGlzYWJsZWQgPiAqLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstcGFnaW5hdGlvbiA+IC51ay1kaXNhYmxlZCA+ICosCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXBhZ2luYXRpb24gPiAudWstZGlzYWJsZWQgPiAqLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1wYWdpbmF0aW9uID4gLnVrLWRpc2FibGVkID4gKiwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1wYWdpbmF0aW9uID4gLnVrLWRpc2FibGVkID4gKiwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstcGFnaW5hdGlvbiA+IC51ay1kaXNhYmxlZCA+ICosCi51ay1vZmZjYW52YXMtYmFyIC51ay1wYWdpbmF0aW9uID4gLnVrLWRpc2FibGVkID4gKiB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQoudWstbGlnaHQgLnVrLXRhYjo6YmVmb3JlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI6OmJlZm9yZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI6OmJlZm9yZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiOjpiZWZvcmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiOjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWI6OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGFiOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYjo6YmVmb3JlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYjo6YmVmb3JlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWI6OmJlZm9yZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYjo6YmVmb3JlIHsKICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKfQoudWstbGlnaHQgLnVrLXRhYiA+ICogPiBhLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWIgPiAqID4gYSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWIgPiAqID4gYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiID4gKiA+IGEsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiID4gKiA+IGEsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWIgPiAqID4gYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGFiID4gKiA+IGEsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYiA+ICogPiBhLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYiA+ICogPiBhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWIgPiAqID4gYSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYiA+ICogPiBhIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstdGFiID4gKiA+IGE6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYiA+ICogPiBhOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYiA+ICogPiBhOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWIgPiAqID4gYTpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWIgPiAqID4gYTpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYiA+ICogPiBhOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWIgPiAqID4gYTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiID4gKiA+IGE6aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGFiID4gKiA+IGE6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYiA+ICogPiBhOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstdGFiID4gKiA+IGE6aG92ZXIgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay10YWIgPiAudWstYWN0aXZlID4gYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiID4gLnVrLWFjdGl2ZSA+IGEsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYiA+IC51ay1hY3RpdmUgPiBhLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYiA+IC51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYiA+IC51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWIgPiAudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWIgPiAudWstYWN0aXZlID4gYSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFiID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay10YWIgPiAudWstYWN0aXZlID4gYSB7CiAgY29sb3I6ICNmZmY7CiAgYm9yZGVyLWNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCAudWstdGFiID4gLnVrLWRpc2FibGVkID4gYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiID4gLnVrLWRpc2FibGVkID4gYSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWIgPiAudWstZGlzYWJsZWQgPiBhLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWIgPiAudWstZGlzYWJsZWQgPiBhLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYiA+IC51ay1kaXNhYmxlZCA+IGEsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWIgPiAudWstZGlzYWJsZWQgPiBhLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWIgPiAudWstZGlzYWJsZWQgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWIgPiAudWstZGlzYWJsZWQgPiBhLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYiA+IC51ay1kaXNhYmxlZCA+IGEsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYiA+IC51ay1kaXNhYmxlZCA+IGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay10YWIgPiAudWstZGlzYWJsZWQgPiBhIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstc2xpZGVuYXYsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2LAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2LAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdiwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdiwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNsaWRlbmF2LAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zbGlkZW5hdiwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2xpZGVuYXYsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstc2xpZGVuYXYsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNsaWRlbmF2LAoudWstb2ZmY2FudmFzLWJhciAudWstc2xpZGVuYXYgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay1zbGlkZW5hdjpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2xpZGVuYXY6aG92ZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2xpZGVuYXY6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2OmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2OmhvdmVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2xpZGVuYXY6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNsaWRlbmF2OmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zbGlkZW5hdjpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1zbGlkZW5hdjpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2xpZGVuYXY6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1zbGlkZW5hdjpob3ZlciB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7Cn0KLnVrLWxpZ2h0IC51ay1zbGlkZW5hdjphY3RpdmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2OmFjdGl2ZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdjphY3RpdmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2OmFjdGl2ZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdjphY3RpdmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zbGlkZW5hdjphY3RpdmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNsaWRlbmF2OmFjdGl2ZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2xpZGVuYXY6YWN0aXZlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXNsaWRlbmF2OmFjdGl2ZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2xpZGVuYXY6YWN0aXZlLAoudWstb2ZmY2FudmFzLWJhciAudWstc2xpZGVuYXY6YWN0aXZlIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCAudWstZG90bmF2ID4gKiA+ICosCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdiA+ICogPiAqLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdiA+ICogPiAqLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXYgPiAqID4gKiwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXYgPiAqID4gKiwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWRvdG5hdiA+ICogPiAqLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1kb3RuYXYgPiAqID4gKiwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstZG90bmF2ID4gKiA+ICosCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZG90bmF2ID4gKiA+ICosCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWRvdG5hdiA+ICogPiAqLAoudWstb2ZmY2FudmFzLWJhciAudWstZG90bmF2ID4gKiA+ICogewogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwp9Ci51ay1saWdodCAudWstZG90bmF2ID4gKiA+IDpob3ZlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2ID4gKiA+IDpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXYgPiAqID4gOmhvdmVyLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXYgPiAqID4gOmhvdmVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdiA+ICogPiA6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kb3RuYXYgPiAqID4gOmhvdmVyLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1kb3RuYXYgPiAqID4gOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1kb3RuYXYgPiAqID4gOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWRvdG5hdiA+ICogPiA6aG92ZXIsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWRvdG5hdiA+ICogPiA6aG92ZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1kb3RuYXYgPiAqID4gOmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoudWstbGlnaHQgLnVrLWRvdG5hdiA+ICogPiA6YWN0aXZlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXYgPiAqID4gOmFjdGl2ZSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXYgPiAqID4gOmFjdGl2ZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2ID4gKiA+IDphY3RpdmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2ID4gKiA+IDphY3RpdmUsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kb3RuYXYgPiAqID4gOmFjdGl2ZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZG90bmF2ID4gKiA+IDphY3RpdmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRvdG5hdiA+ICogPiA6YWN0aXZlLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWRvdG5hdiA+ICogPiA6YWN0aXZlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1kb3RuYXYgPiAqID4gOmFjdGl2ZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWRvdG5hdiA+ICogPiA6YWN0aXZlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoudWstbGlnaHQgLnVrLWRvdG5hdiA+IC51ay1hY3RpdmUgPiAqLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXYgPiAudWstYWN0aXZlID4gKiwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXYgPiAudWstYWN0aXZlID4gKiwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2ID4gLnVrLWFjdGl2ZSA+ICosCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2ID4gLnVrLWFjdGl2ZSA+ICosCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kb3RuYXYgPiAudWstYWN0aXZlID4gKiwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstZG90bmF2ID4gLnVrLWFjdGl2ZSA+ICosCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRvdG5hdiA+IC51ay1hY3RpdmUgPiAqLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWRvdG5hdiA+IC51ay1hY3RpdmUgPiAqLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1kb3RuYXYgPiAudWstYWN0aXZlID4gKiwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWRvdG5hdiA+IC51ay1hY3RpdmUgPiAqIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKfQoudWstbGlnaHQgLnVrLWljb25uYXYgPiAqID4gYSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdiA+ICogPiBhLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXYgPiAqID4gYSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdiA+ICogPiBhLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXYgPiAqID4gYSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWljb25uYXYgPiAqID4gYSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaWNvbm5hdiA+ICogPiBhLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pY29ubmF2ID4gKiA+IGEsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstaWNvbm5hdiA+ICogPiBhLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pY29ubmF2ID4gKiA+IGEsCi51ay1vZmZjYW52YXMtYmFyIC51ay1pY29ubmF2ID4gKiA+IGEgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cn0KLnVrLWxpZ2h0IC51ay1pY29ubmF2ID4gKiA+IGE6aG92ZXIsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXYgPiAqID4gYTpob3ZlciwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2ID4gKiA+IGE6aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXYgPiAqID4gYTpob3ZlciwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2ID4gKiA+IGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pY29ubmF2ID4gKiA+IGE6aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWljb25uYXYgPiAqID4gYTpob3ZlciwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbm5hdiA+ICogPiBhOmhvdmVyLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWljb25uYXYgPiAqID4gYTpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaWNvbm5hdiA+ICogPiBhOmhvdmVyLAoudWstb2ZmY2FudmFzLWJhciAudWstaWNvbm5hdiA+ICogPiBhOmhvdmVyIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwp9Ci51ay1saWdodCAudWstaWNvbm5hdiA+IC51ay1hY3RpdmUgPiBhLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2ID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdiA+IC51ay1hY3RpdmUgPiBhLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2ID4gLnVrLWFjdGl2ZSA+IGEsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdiA+IC51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbm5hdiA+IC51ay1hY3RpdmUgPiBhLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1pY29ubmF2ID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWljb25uYXYgPiAudWstYWN0aXZlID4gYSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1pY29ubmF2ID4gLnVrLWFjdGl2ZSA+IGEsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWljb25uYXYgPiAudWstYWN0aXZlID4gYSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWljb25uYXYgPiAudWstYWN0aXZlID4gYSB7CiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKfQoudWstbGlnaHQgLnVrLXRleHQtbGVhZCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1sZWFkLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbGVhZCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1sZWFkLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbGVhZCwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHQtbGVhZCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGV4dC1sZWFkLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LWxlYWQsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGV4dC1sZWFkLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10ZXh0LWxlYWQsCi51ay1vZmZjYW52YXMtYmFyIC51ay10ZXh0LWxlYWQgewogIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7Cn0KLnVrLWxpZ2h0IC51ay10ZXh0LW1ldGEsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbWV0YSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LW1ldGEsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbWV0YSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LW1ldGEsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LW1ldGEsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRleHQtbWV0YSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dC1tZXRhLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRleHQtbWV0YSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGV4dC1tZXRhLAoudWstb2ZmY2FudmFzLWJhciAudWstdGV4dC1tZXRhIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwp9Ci51ay1saWdodCAudWstdGV4dC1tdXRlZCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1tdXRlZCwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LW11dGVkLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LW11dGVkLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbXV0ZWQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LW11dGVkLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10ZXh0LW11dGVkLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LW11dGVkLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRleHQtbXV0ZWQsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRleHQtbXV0ZWQsCi51ay1vZmZjYW52YXMtYmFyIC51ay10ZXh0LW11dGVkIHsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpICFpbXBvcnRhbnQ7Cn0KLnVrLWxpZ2h0IC51ay10ZXh0LWVtcGhhc2lzLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LWVtcGhhc2lzLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtZW1waGFzaXMsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtZW1waGFzaXMsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1lbXBoYXNpcywKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHQtZW1waGFzaXMsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRleHQtZW1waGFzaXMsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHQtZW1waGFzaXMsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGV4dC1lbXBoYXNpcywKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGV4dC1lbXBoYXNpcywKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRleHQtZW1waGFzaXMgewogIGNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7Cn0KLnVrLWxpZ2h0IC51ay10ZXh0LXByaW1hcnksCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtcHJpbWFyeSwKLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LXByaW1hcnksCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtcHJpbWFyeSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LXByaW1hcnksCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LXByaW1hcnksCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRleHQtcHJpbWFyeSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dC1wcmltYXJ5LAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRleHQtcHJpbWFyeSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGV4dC1wcmltYXJ5LAoudWstb2ZmY2FudmFzLWJhciAudWstdGV4dC1wcmltYXJ5IHsKICBjb2xvcjogI2ZmZiAhaW1wb3J0YW50Owp9Ci51ay1saWdodCAudWstdGV4dC1zZWNvbmRhcnksCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtc2Vjb25kYXJ5LAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtc2Vjb25kYXJ5LAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LXNlY29uZGFyeSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LXNlY29uZGFyeSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHQtc2Vjb25kYXJ5LAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10ZXh0LXNlY29uZGFyeSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dC1zZWNvbmRhcnksCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGV4dC1zZWNvbmRhcnksCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRleHQtc2Vjb25kYXJ5LAoudWstb2ZmY2FudmFzLWJhciAudWstdGV4dC1zZWNvbmRhcnkgewogIGNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7Cn0KLnVrLWxpZ2h0IC51ay1jb2x1bW4tZGl2aWRlciwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY29sdW1uLWRpdmlkZXIsCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY29sdW1uLWRpdmlkZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNvbHVtbi1kaXZpZGVyLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNvbHVtbi1kaXZpZGVyLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY29sdW1uLWRpdmlkZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWNvbHVtbi1kaXZpZGVyLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1jb2x1bW4tZGl2aWRlciwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1jb2x1bW4tZGl2aWRlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstY29sdW1uLWRpdmlkZXIsCi51ay1vZmZjYW52YXMtYmFyIC51ay1jb2x1bW4tZGl2aWRlciB7CiAgY29sdW1uLXJ1bGUtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKfQoudWstbGlnaHQgLnVrLWxvZ28sCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28sCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbywKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbywKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbG9nbywKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbG9nbywKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbG9nbywKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1sb2dvLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1sb2dvLAoudWstb2ZmY2FudmFzLWJhciAudWstbG9nbyB7CiAgY29sb3I6ICNmZmY7Cn0KLnVrLWxpZ2h0IC51ay1sb2dvOmhvdmVyLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvOmhvdmVyLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ286aG92ZXIsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ286aG92ZXIsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbzpob3ZlciwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxvZ286aG92ZXIsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxvZ286aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxvZ286aG92ZXIsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbG9nbzpob3ZlciwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbG9nbzpob3ZlciwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxvZ286aG92ZXIgewogIGNvbG9yOiAjZmZmOwp9Ci51ay1saWdodCAudWstbG9nbyA+IHBpY3R1cmU6bm90KDpvbmx5LW9mLXR5cGUpID4gOm5vdCgudWstbG9nby1pbnZlcnNlKSwKLnVrLWxpZ2h0IC51ay1sb2dvID4gOm5vdChwaWN0dXJlKTpub3QoLnVrLWxvZ28taW52ZXJzZSk6bm90KDpvbmx5LW9mLXR5cGUpLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvID4gcGljdHVyZTpub3QoOm9ubHktb2YtdHlwZSkgPiA6bm90KC51ay1sb2dvLWludmVyc2UpLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvID4gOm5vdChwaWN0dXJlKTpub3QoLnVrLWxvZ28taW52ZXJzZSk6bm90KDpvbmx5LW9mLXR5cGUpLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28gPiBwaWN0dXJlOm5vdCg6b25seS1vZi10eXBlKSA+IDpub3QoLnVrLWxvZ28taW52ZXJzZSksCi51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbyA+IDpub3QocGljdHVyZSk6bm90KC51ay1sb2dvLWludmVyc2UpOm5vdCg6b25seS1vZi10eXBlKSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbyA+IHBpY3R1cmU6bm90KDpvbmx5LW9mLXR5cGUpID4gOm5vdCgudWstbG9nby1pbnZlcnNlKSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbyA+IDpub3QocGljdHVyZSk6bm90KC51ay1sb2dvLWludmVyc2UpOm5vdCg6b25seS1vZi10eXBlKSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvID4gcGljdHVyZTpub3QoOm9ubHktb2YtdHlwZSkgPiA6bm90KC51ay1sb2dvLWludmVyc2UpLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28gPiA6bm90KHBpY3R1cmUpOm5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSksCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1sb2dvID4gcGljdHVyZTpub3QoOm9ubHktb2YtdHlwZSkgPiA6bm90KC51ay1sb2dvLWludmVyc2UpLAoudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbG9nbyA+IDpub3QocGljdHVyZSk6bm90KC51ay1sb2dvLWludmVyc2UpOm5vdCg6b25seS1vZi10eXBlKSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbG9nbyA+IHBpY3R1cmU6bm90KDpvbmx5LW9mLXR5cGUpID4gOm5vdCgudWstbG9nby1pbnZlcnNlKSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbG9nbyA+IDpub3QocGljdHVyZSk6bm90KC51ay1sb2dvLWludmVyc2UpOm5vdCg6b25seS1vZi10eXBlKSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbG9nbyA+IHBpY3R1cmU6bm90KDpvbmx5LW9mLXR5cGUpID4gOm5vdCgudWstbG9nby1pbnZlcnNlKSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbG9nbyA+IDpub3QocGljdHVyZSk6bm90KC51ay1sb2dvLWludmVyc2UpOm5vdCg6b25seS1vZi10eXBlKSwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1sb2dvID4gcGljdHVyZTpub3QoOm9ubHktb2YtdHlwZSkgPiA6bm90KC51ay1sb2dvLWludmVyc2UpLAoudWstY2FyZC1zZWNvbmRhcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLWxvZ28gPiA6bm90KHBpY3R1cmUpOm5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSksCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxvZ28gPiBwaWN0dXJlOm5vdCg6b25seS1vZi10eXBlKSA+IDpub3QoLnVrLWxvZ28taW52ZXJzZSksCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxvZ28gPiA6bm90KHBpY3R1cmUpOm5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSksCi51ay1vZmZjYW52YXMtYmFyIC51ay1sb2dvID4gcGljdHVyZTpub3QoOm9ubHktb2YtdHlwZSkgPiA6bm90KC51ay1sb2dvLWludmVyc2UpLAoudWstb2ZmY2FudmFzLWJhciAudWstbG9nbyA+IDpub3QocGljdHVyZSk6bm90KC51ay1sb2dvLWludmVyc2UpOm5vdCg6b25seS1vZi10eXBlKSB7CiAgZGlzcGxheTogbm9uZTsKfQoudWstbGlnaHQgLnVrLWxvZ28taW52ZXJzZSwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nby1pbnZlcnNlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28taW52ZXJzZSwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nby1pbnZlcnNlLAoudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28taW52ZXJzZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxvZ28taW52ZXJzZSwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbG9nby1pbnZlcnNlLAoudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1sb2dvLWludmVyc2UsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstbG9nby1pbnZlcnNlLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay1sb2dvLWludmVyc2UsCi51ay1vZmZjYW52YXMtYmFyIC51ay1sb2dvLWludmVyc2UgewogIGRpc3BsYXk6IGJsb2NrOwp9Ci51ay1saWdodCAudWstdGFibGUtc3RyaXBlZCA+IHRyOm50aC1vZi10eXBlKGV2ZW4pOmxhc3QtY2hpbGQsCi51ay1saWdodCAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShldmVuKTpsYXN0LWNoaWxkLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShldmVuKTpsYXN0LWNoaWxkLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgPiB0cjpudGgtb2YtdHlwZShldmVuKTpsYXN0LWNoaWxkLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtc3RyaXBlZCA+IHRyOm50aC1vZi10eXBlKGV2ZW4pOmxhc3QtY2hpbGQsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKGV2ZW4pOmxhc3QtY2hpbGQsCi51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLWNhcmQtcHJpbWFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstdGFibGUtc3RyaXBlZCA+IHRyOm50aC1vZi10eXBlKGV2ZW4pOmxhc3QtY2hpbGQsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtc3RyaXBlZCA+IHRyOm50aC1vZi10eXBlKGV2ZW4pOmxhc3QtY2hpbGQsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLWNhcmQtc2Vjb25kYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKGV2ZW4pOmxhc3QtY2hpbGQsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYmxlLXN0cmlwZWQgPiB0cjpudGgtb2YtdHlwZShldmVuKTpsYXN0LWNoaWxkLAoudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKGV2ZW4pOmxhc3QtY2hpbGQsCi51ay1vZmZjYW52YXMtYmFyIC51ay10YWJsZS1zdHJpcGVkID4gdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoZXZlbik6bGFzdC1jaGlsZCB7CiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwp9Ci51ay1saWdodCAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsCi51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLAoudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwKLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLAoudWstY2FyZC1wcmltYXJ5ID4gOm5vdChbY2xhc3MqPSd1ay1jYXJkLW1lZGlhJ10pIC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwKLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsCi51ay1vdmVybGF5LXByaW1hcnkgLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLAoudWstb2ZmY2FudmFzLWJhciAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxMyUyMiUyMGhlaWdodCUzRCUyMjEzJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTMlMjAxMyUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjJyZ2JhJTI4MjU1LCUyMDI1NSwlMjAyNTUsJTIwMC43JTI5JTIyJTIwd2lkdGglM0QlMjIxMyUyMiUyMGhlaWdodCUzRCUyMjElMjIlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjI2JTIyJTIwJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjJyZ2JhJTI4MjU1LCUyMDI1NSwlMjAyNTUsJTIwMC43JTI5JTIyJTIwd2lkdGglM0QlMjIxJTIyJTIwaGVpZ2h0JTNEJTIyMTMlMjIlMjB4JTNEJTIyNiUyMiUyMHklM0QlMjIwJTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIik7Cn0KLnVrLWxpZ2h0IC51ay1vcGVuID4gLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLAoudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1vcGVuID4gLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLAoudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW9wZW4gPiAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsCi51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW9wZW4gPiAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsCi51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstb3BlbiA+IC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwKLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW9wZW4gPiAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsCi51ay1jYXJkLXByaW1hcnkgPiA6bm90KFtjbGFzcyo9J3VrLWNhcmQtbWVkaWEnXSkgLnVrLW9wZW4gPiAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW9wZW4gPiAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUsCi51ay1jYXJkLXNlY29uZGFyeSA+IDpub3QoW2NsYXNzKj0ndWstY2FyZC1tZWRpYSddKSAudWstb3BlbiA+IC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwKLnVrLW92ZXJsYXktcHJpbWFyeSAudWstb3BlbiA+IC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwKLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW9wZW4gPiAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmUgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxMyUyMiUyMGhlaWdodCUzRCUyMjEzJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTMlMjAxMyUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjJyZ2JhJTI4MjU1LCUyMDI1NSwlMjAyNTUsJTIwMC43JTI5JTIyJTIwd2lkdGglM0QlMjIxMyUyMiUyMGhlaWdodCUzRCUyMjElMjIlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjI2JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIik7Cn0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENvbXBvbmVudDogUHJpbnQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCkBtZWRpYSBwcmludCB7CiAgKiwKICAqOjpiZWZvcmUsCiAgKjo6YWZ0ZXIgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIGNvbG9yOiBibGFjayAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OwogICAgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICB9CiAgYSwKICBhOnZpc2l0ZWQgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgfQogIHByZSwKICBibG9ja3F1b3RlIHsKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7CiAgfQogIHRoZWFkIHsKICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDsKICB9CiAgdHIsCiAgaW1nIHsKICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsKICB9CiAgaW1nIHsKICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50OwogIH0KICBAcGFnZSB7CiAgICBtYXJnaW46IDAuNWNtOwogIH0KICBwLAogIGgyLAogIGgzIHsKICAgIG9ycGhhbnM6IDM7CiAgICB3aWRvd3M6IDM7CiAgfQogIGgyLAogIGgzIHsKICAgIHBhZ2UtYnJlYWstYWZ0ZXI6IGF2b2lkOwogIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/css/uikit/uikit.min.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIFVJa2l0IDMuMTUuMSB8IGh0dHBzOi8vd3d3LmdldHVpa2l0LmNvbSB8IChjKSAyMDE0IC0gMjAyMiBZT090aGVtZSB8IE1JVCBMaWNlbnNlICovaHRtbHtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwiU2Vnb2UgVUkiLFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLEFyaWFsLCJOb3RvIFNhbnMiLHNhbnMtc2VyaWYsIkFwcGxlIENvbG9yIEVtb2ppIiwiU2Vnb2UgVUkgRW1vamkiLCJTZWdvZSBVSSBTeW1ib2wiLCJOb3RvIENvbG9yIEVtb2ppIjtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS41Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojNjY2fWJvZHl7bWFyZ2luOjB9LnVrLWxpbmssYXtjb2xvcjojMWU4N2YwO3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyfS51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluaywudWstbGluazpob3ZlcixhOmhvdmVye2NvbG9yOiMwZjZlY2Q7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX1hYmJyW3RpdGxlXXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDstd2Via2l0LXRleHQtZGVjb3JhdGlvbi1zdHlsZTpkb3R0ZWR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfTpub3QocHJlKT5jb2RlLDpub3QocHJlKT5rYmQsOm5vdChwcmUpPnNhbXB7Zm9udC1mYW1pbHk6Q29uc29sYXMsbW9uYWNvLG1vbm9zcGFjZTtmb250LXNpemU6Ljg3NXJlbTtjb2xvcjojZjA1MDZlO3doaXRlLXNwYWNlOm5vd3JhcDtwYWRkaW5nOjJweCA2cHg7YmFja2dyb3VuZDojZjhmOGY4fWVte2NvbG9yOiNmMDUwNmV9aW5ze2JhY2tncm91bmQ6I2ZmZDtjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lfW1hcmt7YmFja2dyb3VuZDojZmZkO2NvbG9yOiM2NjZ9cXtmb250LXN0eWxlOml0YWxpY31zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXN1cHt0b3A6LS41ZW19c3Vie2JvdHRvbTotLjI1ZW19YXVkaW8sY2FudmFzLGlmcmFtZSxpbWcsc3ZnLHZpZGVve3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1jYW52YXMsaW1nLHN2Zyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3h9aW1nOm5vdChbc3JjXSl7dmlzaWJpbGl0eTpoaWRkZW47bWluLXdpZHRoOjFweH1pZnJhbWV7Ym9yZGVyOjB9YWRkcmVzcyxkbCxmaWVsZHNldCxmaWd1cmUsb2wscCxwcmUsdWx7bWFyZ2luOjAgMCAyMHB4IDB9KithZGRyZXNzLCorZGwsKitmaWVsZHNldCwqK2ZpZ3VyZSwqK29sLCorcCwqK3ByZSwqK3Vse21hcmdpbi10b3A6MjBweH0udWstaDEsLnVrLWgyLC51ay1oMywudWstaDQsLnVrLWg1LC51ay1oNiwudWstaGVhZGluZy0yeGxhcmdlLC51ay1oZWFkaW5nLWxhcmdlLC51ay1oZWFkaW5nLW1lZGl1bSwudWstaGVhZGluZy1zbWFsbCwudWstaGVhZGluZy14bGFyZ2UsaDEsaDIsaDMsaDQsaDUsaDZ7bWFyZ2luOjAgMCAyMHB4IDA7Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsIlNlZ29lIFVJIixSb2JvdG8sIkhlbHZldGljYSBOZXVlIixBcmlhbCwiTm90byBTYW5zIixzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiMzMzM7dGV4dC10cmFuc2Zvcm06bm9uZX0qKy51ay1oMSwqKy51ay1oMiwqKy51ay1oMywqKy51ay1oNCwqKy51ay1oNSwqKy51ay1oNiwqKy51ay1oZWFkaW5nLTJ4bGFyZ2UsKisudWstaGVhZGluZy1sYXJnZSwqKy51ay1oZWFkaW5nLW1lZGl1bSwqKy51ay1oZWFkaW5nLXNtYWxsLCorLnVrLWhlYWRpbmcteGxhcmdlLCoraDEsKitoMiwqK2gzLCoraDQsKitoNSwqK2g2e21hcmdpbi10b3A6NDBweH0udWstaDEsaDF7Zm9udC1zaXplOjIuMjMxMjVyZW07bGluZS1oZWlnaHQ6MS4yfS51ay1oMixoMntmb250LXNpemU6MS43cmVtO2xpbmUtaGVpZ2h0OjEuM30udWstaDMsaDN7Zm9udC1zaXplOjEuNXJlbTtsaW5lLWhlaWdodDoxLjR9LnVrLWg0LGg0e2ZvbnQtc2l6ZToxLjI1cmVtO2xpbmUtaGVpZ2h0OjEuNH0udWstaDUsaDV7Zm9udC1zaXplOjE2cHg7bGluZS1oZWlnaHQ6MS40fS51ay1oNixoNntmb250LXNpemU6Ljg3NXJlbTtsaW5lLWhlaWdodDoxLjR9QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1oMSxoMXtmb250LXNpemU6Mi42MjVyZW19LnVrLWgyLGgye2ZvbnQtc2l6ZToycmVtfX1vbCx1bHtwYWRkaW5nLWxlZnQ6MzBweH1vbD5saT5vbCxvbD5saT51bCx1bD5saT5vbCx1bD5saT51bHttYXJnaW46MH1kdHtmb250LXdlaWdodDo3MDB9ZGR7bWFyZ2luLWxlZnQ6MH0udWstaHIsaHJ7b3ZlcmZsb3c6dmlzaWJsZTt0ZXh0LWFsaWduOmluaGVyaXQ7bWFyZ2luOjAgMCAyMHB4IDA7Ym9yZGVyOjA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNX0qKy51ay1ociwqK2hye21hcmdpbi10b3A6MjBweH1hZGRyZXNze2ZvbnQtc3R5bGU6bm9ybWFsfWJsb2NrcXVvdGV7bWFyZ2luOjAgMCAyMHB4IDA7Zm9udC1zaXplOjEuMjVyZW07bGluZS1oZWlnaHQ6MS41O2ZvbnQtc3R5bGU6aXRhbGljO2NvbG9yOiMzMzN9KitibG9ja3F1b3Rle21hcmdpbi10b3A6MjBweH1ibG9ja3F1b3RlIHA6bGFzdC1vZi10eXBle21hcmdpbi1ib3R0b206MH1ibG9ja3F1b3RlIGZvb3RlcnttYXJnaW4tdG9wOjEwcHg7Zm9udC1zaXplOi44NzVyZW07bGluZS1oZWlnaHQ6MS41O2NvbG9yOiM2NjZ9YmxvY2txdW90ZSBmb290ZXI6OmJlZm9yZXtjb250ZW50OiLigJQgIn1wcmV7Zm9udDowLjg3NXJlbS8xLjUgQ29uc29sYXMsbW9uYWNvLG1vbm9zcGFjZTtjb2xvcjojNjY2Oy1tb3otdGFiLXNpemU6NDt0YWItc2l6ZTo0O292ZXJmbG93OmF1dG87cGFkZGluZzoxMHB4O2JvcmRlcjoxcHggc29saWQgI2U1ZTVlNTtib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kOiNmZmZ9cHJlIGNvZGV7Zm9udC1mYW1pbHk6Q29uc29sYXMsbW9uYWNvLG1vbm9zcGFjZX06Zm9jdXN7b3V0bGluZTowfTpmb2N1cy12aXNpYmxle291dGxpbmU6MnB4IGRvdHRlZCAjMzMzfTo6c2VsZWN0aW9ue2JhY2tncm91bmQ6IzM5Zjtjb2xvcjojZmZmO3RleHQtc2hhZG93Om5vbmV9ZGV0YWlscyxtYWlue2Rpc3BsYXk6YmxvY2t9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX10ZW1wbGF0ZXtkaXNwbGF5Om5vbmV9OnJvb3R7LS11ay1icmVha3BvaW50LXM6NjQwcHg7LS11ay1icmVha3BvaW50LW06OTYwcHg7LS11ay1icmVha3BvaW50LWw6MTIwMHB4Oy0tdWstYnJlYWtwb2ludC14bDoxNjAwcHh9LnVrLWxpbmstbXV0ZWQgYSwudWstbGluay10b2dnbGUgLnVrLWxpbmstbXV0ZWQsYS51ay1saW5rLW11dGVke2NvbG9yOiM5OTl9LnVrLWxpbmstbXV0ZWQgYTpob3ZlciwudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstbXV0ZWQsYS51ay1saW5rLW11dGVkOmhvdmVye2NvbG9yOiM2NjZ9LnVrLWxpbmstdGV4dCBhLC51ay1saW5rLXRvZ2dsZSAudWstbGluay10ZXh0LGEudWstbGluay10ZXh0e2NvbG9yOmluaGVyaXR9LnVrLWxpbmstdGV4dCBhOmhvdmVyLC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay10ZXh0LGEudWstbGluay10ZXh0OmhvdmVye2NvbG9yOiM5OTl9LnVrLWxpbmstaGVhZGluZyBhLC51ay1saW5rLXRvZ2dsZSAudWstbGluay1oZWFkaW5nLGEudWstbGluay1oZWFkaW5ne2NvbG9yOmluaGVyaXR9LnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1oZWFkaW5nLGEudWstbGluay1oZWFkaW5nOmhvdmVye2NvbG9yOiMxZTg3ZjA7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVrLWxpbmstcmVzZXQgYSxhLnVrLWxpbmstcmVzZXR7Y29sb3I6aW5oZXJpdCFpbXBvcnRhbnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmUhaW1wb3J0YW50fS51ay1saW5rLXRvZ2dsZXtjb2xvcjppbmhlcml0IWltcG9ydGFudDt0ZXh0LWRlY29yYXRpb246bm9uZSFpbXBvcnRhbnR9LnVrLWhlYWRpbmctc21hbGx7Zm9udC1zaXplOjIuNnJlbTtsaW5lLWhlaWdodDoxLjJ9LnVrLWhlYWRpbmctbWVkaXVte2ZvbnQtc2l6ZToyLjg4NzVyZW07bGluZS1oZWlnaHQ6MS4xfS51ay1oZWFkaW5nLWxhcmdle2ZvbnQtc2l6ZTozLjRyZW07bGluZS1oZWlnaHQ6MS4xfS51ay1oZWFkaW5nLXhsYXJnZXtmb250LXNpemU6NHJlbTtsaW5lLWhlaWdodDoxfS51ay1oZWFkaW5nLTJ4bGFyZ2V7Zm9udC1zaXplOjZyZW07bGluZS1oZWlnaHQ6MX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWhlYWRpbmctc21hbGx7Zm9udC1zaXplOjMuMjVyZW19LnVrLWhlYWRpbmctbWVkaXVte2ZvbnQtc2l6ZTozLjVyZW19LnVrLWhlYWRpbmctbGFyZ2V7Zm9udC1zaXplOjRyZW19LnVrLWhlYWRpbmcteGxhcmdle2ZvbnQtc2l6ZTo2cmVtfS51ay1oZWFkaW5nLTJ4bGFyZ2V7Zm9udC1zaXplOjhyZW19fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LnVrLWhlYWRpbmctbWVkaXVte2ZvbnQtc2l6ZTo0cmVtfS51ay1oZWFkaW5nLWxhcmdle2ZvbnQtc2l6ZTo2cmVtfS51ay1oZWFkaW5nLXhsYXJnZXtmb250LXNpemU6OHJlbX0udWstaGVhZGluZy0yeGxhcmdle2ZvbnQtc2l6ZToxMXJlbX19LnVrLWhlYWRpbmctZGl2aWRlcntwYWRkaW5nLWJvdHRvbTpjYWxjKDVweCArIC4xZW0pO2JvcmRlci1ib3R0b206Y2FsYyguMnB4ICsgLjA1ZW0pIHNvbGlkICNlNWU1ZTV9LnVrLWhlYWRpbmctYnVsbGV0e3Bvc2l0aW9uOnJlbGF0aXZlfS51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dG9wOmNhbGMoLS4xICogMWVtKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7aGVpZ2h0OmNhbGMoNHB4ICsgLjdlbSk7bWFyZ2luLXJpZ2h0OmNhbGMoNXB4ICsgLjJlbSk7Ym9yZGVyLWxlZnQ6Y2FsYyg1cHggKyAuMWVtKSBzb2xpZCAjZTVlNWU1fS51ay1oZWFkaW5nLWxpbmV7b3ZlcmZsb3c6aGlkZGVufS51ay1oZWFkaW5nLWxpbmU+KntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZX0udWstaGVhZGluZy1saW5lPjo6YWZ0ZXIsLnVrLWhlYWRpbmctbGluZT46OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDpjYWxjKDUwJSAtIChjYWxjKC4ycHggKyAuMDVlbSkvIDIpKTt3aWR0aDoyMDAwcHg7Ym9yZGVyLWJvdHRvbTpjYWxjKC4ycHggKyAuMDVlbSkgc29saWQgI2U1ZTVlNX0udWstaGVhZGluZy1saW5lPjo6YmVmb3Jle3JpZ2h0OjEwMCU7bWFyZ2luLXJpZ2h0OmNhbGMoNXB4ICsgLjNlbSl9LnVrLWhlYWRpbmctbGluZT46OmFmdGVye2xlZnQ6MTAwJTttYXJnaW4tbGVmdDpjYWxjKDVweCArIC4zZW0pfVtjbGFzcyo9dWstZGl2aWRlcl17Ym9yZGVyOm5vbmU7bWFyZ2luLWJvdHRvbToyMHB4fSorW2NsYXNzKj11ay1kaXZpZGVyXXttYXJnaW4tdG9wOjIwcHh9LnVrLWRpdmlkZXItaWNvbntwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6MjBweDtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIyMCUyMiUyMGhlaWdodCUzRCUyMjIwJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMjAlMjAyMCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDY2lyY2xlJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBzdHJva2UlM0QlMjIlMjNlNWU1ZTUlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIyJTIyJTIwY3glM0QlMjIxMCUyMiUyMGN5JTNEJTIyMTAlMjIlMjByJTNEJTIyNyUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSIpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJSA1MCV9LnVrLWRpdmlkZXItaWNvbjo6YWZ0ZXIsLnVrLWRpdmlkZXItaWNvbjo6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTttYXgtd2lkdGg6Y2FsYyg1MCUgLSAoNTBweCAvIDIpKTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU1fS51ay1kaXZpZGVyLWljb246OmJlZm9yZXtyaWdodDpjYWxjKDUwJSArICg1MHB4IC8gMikpO3dpZHRoOjEwMCV9LnVrLWRpdmlkZXItaWNvbjo6YWZ0ZXJ7bGVmdDpjYWxjKDUwJSArICg1MHB4IC8gMikpO3dpZHRoOjEwMCV9LnVrLWRpdmlkZXItc21hbGx7bGluZS1oZWlnaHQ6MH0udWstZGl2aWRlci1zbWFsbDo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxMDBweDttYXgtd2lkdGg6MTAwJTtib3JkZXItdG9wOjFweCBzb2xpZCAjZTVlNWU1O3ZlcnRpY2FsLWFsaWduOnRvcH0udWstZGl2aWRlci12ZXJ0aWNhbHt3aWR0aDptYXgtY29udGVudDtoZWlnaHQ6MTAwcHg7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6YXV0bztib3JkZXItbGVmdDoxcHggc29saWQgI2U1ZTVlNX0udWstbGlzdHtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS51ay1saXN0Pio+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1saXN0Pio+dWwsLnVrLWxpc3Q+Om50aC1jaGlsZChuKzIpe21hcmdpbi10b3A6MTBweH0udWstbGlzdC1jaXJjbGU+KiwudWstbGlzdC1kZWNpbWFsPiosLnVrLWxpc3QtZGlzYz4qLC51ay1saXN0LWh5cGhlbj4qLC51ay1saXN0LXNxdWFyZT4qe3BhZGRpbmctbGVmdDozMHB4fS51ay1saXN0LWRlY2ltYWx7Y291bnRlci1yZXNldDpkZWNpbWFsfS51ay1saXN0LWRlY2ltYWw+Kntjb3VudGVyLWluY3JlbWVudDpkZWNpbWFsfS51ay1saXN0LWNpcmNsZT46OmJlZm9yZSwudWstbGlzdC1kZWNpbWFsPjo6YmVmb3JlLC51ay1saXN0LWRpc2M+OjpiZWZvcmUsLnVrLWxpc3QtaHlwaGVuPjo6YmVmb3JlLC51ay1saXN0LXNxdWFyZT46OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6LTMwcHg7d2lkdGg6MzBweDtoZWlnaHQ6MS41ZW07bWFyZ2luLWJvdHRvbTotMS41ZW07ZGlzcGxheTpsaXN0LWl0ZW07bGlzdC1zdHlsZS1wb3NpdGlvbjppbnNpZGU7dGV4dC1hbGlnbjpyaWdodH0udWstbGlzdC1kaXNjPjo6YmVmb3Jle2xpc3Qtc3R5bGUtdHlwZTpkaXNjfS51ay1saXN0LWNpcmNsZT46OmJlZm9yZXtsaXN0LXN0eWxlLXR5cGU6Y2lyY2xlfS51ay1saXN0LXNxdWFyZT46OmJlZm9yZXtsaXN0LXN0eWxlLXR5cGU6c3F1YXJlfS51ay1saXN0LWRlY2ltYWw+OjpiZWZvcmV7Y29udGVudDpjb3VudGVyKGRlY2ltYWwsZGVjaW1hbCkgJ1wyMDBBLlwwMEEwJ30udWstbGlzdC1oeXBoZW4+OjpiZWZvcmV7Y29udGVudDon4oCTXDAwQTBcMDBBMCd9LnVrLWxpc3QtbXV0ZWQ+OjpiZWZvcmV7Y29sb3I6Izk5OSFpbXBvcnRhbnR9LnVrLWxpc3QtZW1waGFzaXM+OjpiZWZvcmV7Y29sb3I6IzMzMyFpbXBvcnRhbnR9LnVrLWxpc3QtcHJpbWFyeT46OmJlZm9yZXtjb2xvcjojMWU4N2YwIWltcG9ydGFudH0udWstbGlzdC1zZWNvbmRhcnk+OjpiZWZvcmV7Y29sb3I6IzIyMiFpbXBvcnRhbnR9LnVrLWxpc3QtYnVsbGV0Pip7cGFkZGluZy1sZWZ0OjMwcHh9LnVrLWxpc3QtYnVsbGV0Pjo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpsaXN0LWl0ZW07cG9zaXRpb246cmVsYXRpdmU7bGVmdDotMzBweDt3aWR0aDozMHB4O2hlaWdodDoxLjVlbTttYXJnaW4tYm90dG9tOi0xLjVlbTtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjI2JTIyJTIwaGVpZ2h0JTNEJTIyNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDYlMjA2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NjaXJjbGUlMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIwY3glM0QlMjIzJTIyJTIwY3klM0QlMjIzJTIyJTIwciUzRCUyMjMlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UiKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCUgNTAlfS51ay1saXN0LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpe21hcmdpbi10b3A6MTBweDtwYWRkaW5nLXRvcDoxMHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTV9LnVrLWxpc3Qtc3RyaXBlZD4qe3BhZGRpbmc6MTBweCAxMHB4fS51ay1saXN0LXN0cmlwZWQ+Om50aC1vZi10eXBlKG9kZCl7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU1fS51ay1saXN0LXN0cmlwZWQ+Om50aC1vZi10eXBlKG9kZCl7YmFja2dyb3VuZDojZjhmOGY4fS51ay1saXN0LXN0cmlwZWQ+Om50aC1jaGlsZChuKzIpe21hcmdpbi10b3A6MH0udWstbGlzdC1sYXJnZT4qPnVsLC51ay1saXN0LWxhcmdlPjpudGgtY2hpbGQobisyKXttYXJnaW4tdG9wOjIwcHh9LnVrLWxpc3QtY29sbGFwc2U+Kj51bCwudWstbGlzdC1jb2xsYXBzZT46bnRoLWNoaWxkKG4rMil7bWFyZ2luLXRvcDowfS51ay1saXN0LWxhcmdlLnVrLWxpc3QtZGl2aWRlcj46bnRoLWNoaWxkKG4rMil7bWFyZ2luLXRvcDoyMHB4O3BhZGRpbmctdG9wOjIwcHh9LnVrLWxpc3QtY29sbGFwc2UudWstbGlzdC1kaXZpZGVyPjpudGgtY2hpbGQobisyKXttYXJnaW4tdG9wOjA7cGFkZGluZy10b3A6MH0udWstbGlzdC1sYXJnZS51ay1saXN0LXN0cmlwZWQ+KntwYWRkaW5nOjIwcHggMTBweH0udWstbGlzdC1jb2xsYXBzZS51ay1saXN0LXN0cmlwZWQ+KntwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjB9LnVrLWxpc3QtY29sbGFwc2UudWstbGlzdC1zdHJpcGVkPjpudGgtY2hpbGQobisyKSwudWstbGlzdC1sYXJnZS51ay1saXN0LXN0cmlwZWQ+Om50aC1jaGlsZChuKzIpe21hcmdpbi10b3A6MH0udWstZGVzY3JpcHRpb24tbGlzdD5kdHtjb2xvcjojMzMzO2ZvbnQtc2l6ZTouODc1cmVtO2ZvbnQtd2VpZ2h0OjQwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9LnVrLWRlc2NyaXB0aW9uLWxpc3Q+ZHQ6bnRoLWNoaWxkKG4rMil7bWFyZ2luLXRvcDoyMHB4fS51ay1kZXNjcmlwdGlvbi1saXN0LWRpdmlkZXI+ZHQ6bnRoLWNoaWxkKG4rMil7bWFyZ2luLXRvcDoyMHB4O3BhZGRpbmctdG9wOjIwcHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNX0udWstdGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjA7d2lkdGg6MTAwJTttYXJnaW4tYm90dG9tOjIwcHh9KisudWstdGFibGV7bWFyZ2luLXRvcDoyMHB4fS51ay10YWJsZSB0aHtwYWRkaW5nOjE2cHggMTJweDt0ZXh0LWFsaWduOmxlZnQ7dmVydGljYWwtYWxpZ246Ym90dG9tO2ZvbnQtc2l6ZTouODc1cmVtO2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojOTk5O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0udWstdGFibGUgdGR7cGFkZGluZzoxNnB4IDEycHg7dmVydGljYWwtYWxpZ246dG9wfS51ay10YWJsZSB0ZD46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLXRhYmxlIHRmb290e2ZvbnQtc2l6ZTouODc1cmVtfS51ay10YWJsZSBjYXB0aW9ue2ZvbnQtc2l6ZTouODc1cmVtO3RleHQtYWxpZ246bGVmdDtjb2xvcjojOTk5fS51ay10YWJsZS1taWRkbGUsLnVrLXRhYmxlLW1pZGRsZSB0ZHt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUhaW1wb3J0YW50fS51ay10YWJsZS1kaXZpZGVyPjpmaXJzdC1jaGlsZD50cjpub3QoOmZpcnN0LWNoaWxkKSwudWstdGFibGUtZGl2aWRlcj46bm90KDpmaXJzdC1jaGlsZCk+dHIsLnVrLXRhYmxlLWRpdmlkZXI+dHI6bm90KDpmaXJzdC1jaGlsZCl7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNX0udWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpLC51ay10YWJsZS1zdHJpcGVkPnRyOm50aC1vZi10eXBlKG9kZCl7YmFja2dyb3VuZDojZjhmOGY4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U1ZTVlNX0udWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsLnVrLXRhYmxlLWhvdmVyPnRyOmhvdmVye2JhY2tncm91bmQ6I2ZmZH0udWstdGFibGUgdGJvZHkgdHIudWstYWN0aXZlLC51ay10YWJsZT50ci51ay1hY3RpdmV7YmFja2dyb3VuZDojZmZkfS51ay10YWJsZS1zbWFsbCB0ZCwudWstdGFibGUtc21hbGwgdGh7cGFkZGluZzoxMHB4IDEycHh9LnVrLXRhYmxlLWxhcmdlIHRkLC51ay10YWJsZS1sYXJnZSB0aHtwYWRkaW5nOjIycHggMTJweH0udWstdGFibGUtanVzdGlmeSB0ZDpmaXJzdC1jaGlsZCwudWstdGFibGUtanVzdGlmeSB0aDpmaXJzdC1jaGlsZHtwYWRkaW5nLWxlZnQ6MH0udWstdGFibGUtanVzdGlmeSB0ZDpsYXN0LWNoaWxkLC51ay10YWJsZS1qdXN0aWZ5IHRoOmxhc3QtY2hpbGR7cGFkZGluZy1yaWdodDowfS51ay10YWJsZS1zaHJpbmt7d2lkdGg6MXB4fS51ay10YWJsZS1leHBhbmR7bWluLXdpZHRoOjE1MHB4fS51ay10YWJsZS1saW5re3BhZGRpbmc6MCFpbXBvcnRhbnR9LnVrLXRhYmxlLWxpbms+YXtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MTZweCAxMnB4fS51ay10YWJsZS1zbWFsbCAudWstdGFibGUtbGluaz5he3BhZGRpbmc6MTBweCAxMnB4fUBtZWRpYSAobWF4LXdpZHRoOjk1OXB4KXsudWstdGFibGUtcmVzcG9uc2l2ZSwudWstdGFibGUtcmVzcG9uc2l2ZSB0Ym9keSwudWstdGFibGUtcmVzcG9uc2l2ZSB0ZCwudWstdGFibGUtcmVzcG9uc2l2ZSB0aCwudWstdGFibGUtcmVzcG9uc2l2ZSB0cntkaXNwbGF5OmJsb2NrfS51ay10YWJsZS1yZXNwb25zaXZlIHRoZWFke2Rpc3BsYXk6bm9uZX0udWstdGFibGUtcmVzcG9uc2l2ZSB0ZCwudWstdGFibGUtcmVzcG9uc2l2ZSB0aHt3aWR0aDphdXRvIWltcG9ydGFudDttYXgtd2lkdGg6bm9uZSFpbXBvcnRhbnQ7bWluLXdpZHRoOjAhaW1wb3J0YW50O292ZXJmbG93OnZpc2libGUhaW1wb3J0YW50O3doaXRlLXNwYWNlOm5vcm1hbCFpbXBvcnRhbnR9LnVrLXRhYmxlLXJlc3BvbnNpdmUgLnVrLXRhYmxlLWxpbms6bm90KDpmaXJzdC1jaGlsZCk+YSwudWstdGFibGUtcmVzcG9uc2l2ZSB0ZDpub3QoOmZpcnN0LWNoaWxkKTpub3QoLnVrLXRhYmxlLWxpbmspLC51ay10YWJsZS1yZXNwb25zaXZlIHRoOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCgudWstdGFibGUtbGluayl7cGFkZGluZy10b3A6NXB4IWltcG9ydGFudH0udWstdGFibGUtcmVzcG9uc2l2ZSAudWstdGFibGUtbGluazpub3QoOmxhc3QtY2hpbGQpPmEsLnVrLXRhYmxlLXJlc3BvbnNpdmUgdGQ6bm90KDpsYXN0LWNoaWxkKTpub3QoLnVrLXRhYmxlLWxpbmspLC51ay10YWJsZS1yZXNwb25zaXZlIHRoOm5vdCg6bGFzdC1jaGlsZCk6bm90KC51ay10YWJsZS1saW5rKXtwYWRkaW5nLWJvdHRvbTo1cHghaW1wb3J0YW50fS51ay10YWJsZS1qdXN0aWZ5LnVrLXRhYmxlLXJlc3BvbnNpdmUgdGQsLnVrLXRhYmxlLWp1c3RpZnkudWstdGFibGUtcmVzcG9uc2l2ZSB0aHtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjB9fS51ay10YWJsZSB0Ym9keSB0cnt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjFzIGxpbmVhcn0udWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZSgybik6bGFzdC1jaGlsZCwudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZSgybik6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU1fS51ay1pY29ue21hcmdpbjowO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6MDtvdmVyZmxvdzp2aXNpYmxlO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O3RleHQtdHJhbnNmb3JtOm5vbmU7cGFkZGluZzowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmlsbDpjdXJyZW50Y29sb3I7bGluZS1oZWlnaHQ6MH1idXR0b24udWstaWNvbjpub3QoOmRpc2FibGVkKXtjdXJzb3I6cG9pbnRlcn0udWstaWNvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MDtwYWRkaW5nOjB9LnVrLWljb246bm90KC51ay1wcmVzZXJ2ZSkgW2ZpbGwqPScjJ106bm90KC51ay1wcmVzZXJ2ZSl7ZmlsbDpjdXJyZW50Y29sb3J9LnVrLWljb246bm90KC51ay1wcmVzZXJ2ZSkgW3N0cm9rZSo9JyMnXTpub3QoLnVrLXByZXNlcnZlKXtzdHJva2U6Y3VycmVudGNvbG9yfS51ay1pY29uPip7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfS51ay1pY29uLWltYWdle3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCUgNTAlO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7b2JqZWN0LWZpdDpzY2FsZS1kb3duO21heC13aWR0aDpub25lfS51ay1pY29uLWxpbmt7Y29sb3I6Izk5OTt0ZXh0LWRlY29yYXRpb246bm9uZSFpbXBvcnRhbnR9LnVrLWljb24tbGluazpob3Zlcntjb2xvcjojNjY2fS51ay1hY3RpdmU+LnVrLWljb24tbGluaywudWstaWNvbi1saW5rOmFjdGl2ZXtjb2xvcjojNTk1OTU5fS51ay1pY29uLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtib3JkZXItcmFkaXVzOjUwMHB4O2JhY2tncm91bmQ6I2Y4ZjhmODtjb2xvcjojOTk5O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3RyYW5zaXRpb246LjFzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcn0udWstaWNvbi1idXR0b246aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWJlYmViO2NvbG9yOiM2NjZ9LnVrLWFjdGl2ZT4udWstaWNvbi1idXR0b24sLnVrLWljb24tYnV0dG9uOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNkZmRmZGY7Y29sb3I6IzY2Nn0udWstcmFuZ2V7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlO2JhY2tncm91bmQ6MCAwfS51ay1yYW5nZTpmb2N1c3tvdXRsaW5lOjB9LnVrLXJhbmdlOjotbW96LWZvY3VzLW91dGVye2JvcmRlcjpub25lfS51ay1yYW5nZTpub3QoOmRpc2FibGVkKTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7Y3Vyc29yOnBvaW50ZXJ9LnVrLXJhbmdlOm5vdCg6ZGlzYWJsZWQpOjotbW96LXJhbmdlLXRodW1ie2N1cnNvcjpwb2ludGVyfS51ay1yYW5nZTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7aGVpZ2h0OjNweDtiYWNrZ3JvdW5kOiNlYmViZWI7Ym9yZGVyLXJhZGl1czo1MDBweH0udWstcmFuZ2U6YWN0aXZlOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFjaywudWstcmFuZ2U6Zm9jdXM6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2JhY2tncm91bmQ6I2RlZGVkZX0udWstcmFuZ2U6Oi1tb3otcmFuZ2UtdHJhY2t7aGVpZ2h0OjNweDtiYWNrZ3JvdW5kOiNlYmViZWI7Ym9yZGVyLXJhZGl1czo1MDBweH0udWstcmFuZ2U6Zm9jdXM6Oi1tb3otcmFuZ2UtdHJhY2t7YmFja2dyb3VuZDojZGVkZWRlfS51ay1yYW5nZTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luLXRvcDotN3B4O2hlaWdodDoxNXB4O3dpZHRoOjE1cHg7Ym9yZGVyLXJhZGl1czo1MDBweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjfS51ay1yYW5nZTo6LW1vei1yYW5nZS10aHVtYntib3JkZXI6bm9uZTtoZWlnaHQ6MTVweDt3aWR0aDoxNXB4O21hcmdpbi10b3A6LTdweDtib3JkZXItcmFkaXVzOjUwMHB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2N9LnVrLWNoZWNrYm94LC51ay1pbnB1dCwudWstcmFkaW8sLnVrLXNlbGVjdCwudWstdGV4dGFyZWF7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO2JvcmRlci1yYWRpdXM6MDtmb250OmluaGVyaXR9LnVrLWlucHV0e292ZXJmbG93OnZpc2libGV9LnVrLXNlbGVjdHt0ZXh0LXRyYW5zZm9ybTpub25lfS51ay1zZWxlY3Qgb3B0Z3JvdXB7Zm9udDppbmhlcml0O2ZvbnQtd2VpZ2h0OjcwMH0udWstdGV4dGFyZWF7b3ZlcmZsb3c6YXV0b30udWstaW5wdXRbdHlwZT1zZWFyY2hdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLC51ay1pbnB1dFt0eXBlPXNlYXJjaF06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LnVrLWlucHV0W3R5cGU9bnVtYmVyXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiwudWstaW5wdXRbdHlwZT1udW1iZXJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfS51ay1pbnB1dDo6LW1vei1wbGFjZWhvbGRlciwudWstdGV4dGFyZWE6Oi1tb3otcGxhY2Vob2xkZXJ7b3BhY2l0eToxfS51ay1jaGVja2JveDpub3QoOmRpc2FibGVkKSwudWstcmFkaW86bm90KDpkaXNhYmxlZCl7Y3Vyc29yOnBvaW50ZXJ9LnVrLWZpZWxkc2V0e2JvcmRlcjpub25lO21hcmdpbjowO3BhZGRpbmc6MH0udWstaW5wdXQsLnVrLXRleHRhcmVhey13ZWJraXQtYXBwZWFyYW5jZTpub25lfS51ay1pbnB1dCwudWstc2VsZWN0LC51ay10ZXh0YXJlYXttYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlO2JvcmRlcjowIG5vbmU7cGFkZGluZzowIDEwcHg7YmFja2dyb3VuZDojZmZmO2NvbG9yOiM2NjY7Ym9yZGVyOjFweCBzb2xpZCAjZTVlNWU1O3RyYW5zaXRpb246LjJzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXJ9LnVrLWlucHV0LC51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pe2hlaWdodDo0MHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtkaXNwbGF5OmlubGluZS1ibG9ja30udWstaW5wdXQ6bm90KGlucHV0KSwudWstc2VsZWN0Om5vdChzZWxlY3Qpe2xpbmUtaGVpZ2h0OjM4cHh9LnVrLXNlbGVjdFttdWx0aXBsZV0sLnVrLXNlbGVjdFtzaXplXSwudWstdGV4dGFyZWF7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LnVrLXNlbGVjdFttdWx0aXBsZV0sLnVrLXNlbGVjdFtzaXplXXtyZXNpemU6dmVydGljYWx9LnVrLWlucHV0OmZvY3VzLC51ay1zZWxlY3Q6Zm9jdXMsLnVrLXRleHRhcmVhOmZvY3Vze291dGxpbmU6MDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzY2Njtib3JkZXItY29sb3I6IzFlODdmMH0udWstaW5wdXQ6ZGlzYWJsZWQsLnVrLXNlbGVjdDpkaXNhYmxlZCwudWstdGV4dGFyZWE6ZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZjhmOGY4O2NvbG9yOiM5OTk7Ym9yZGVyLWNvbG9yOiNlNWU1ZTV9LnVrLWlucHV0OjpwbGFjZWhvbGRlcntjb2xvcjojOTk5fS51ay10ZXh0YXJlYTo6cGxhY2Vob2xkZXJ7Y29sb3I6Izk5OX0udWstZm9ybS1zbWFsbHtmb250LXNpemU6Ljg3NXJlbX0udWstZm9ybS1zbWFsbDpub3QodGV4dGFyZWEpOm5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKXtoZWlnaHQ6MzBweDtwYWRkaW5nLWxlZnQ6OHB4O3BhZGRpbmctcmlnaHQ6OHB4fVttdWx0aXBsZV0udWstZm9ybS1zbWFsbCxbc2l6ZV0udWstZm9ybS1zbWFsbCx0ZXh0YXJlYS51ay1mb3JtLXNtYWxse3BhZGRpbmc6NXB4IDhweH0udWstZm9ybS1zbWFsbDpub3Qoc2VsZWN0KTpub3QoaW5wdXQpOm5vdCh0ZXh0YXJlYSl7bGluZS1oZWlnaHQ6MjhweH0udWstZm9ybS1sYXJnZXtmb250LXNpemU6MS4yNXJlbX0udWstZm9ybS1sYXJnZTpub3QodGV4dGFyZWEpOm5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKXtoZWlnaHQ6NTVweDtwYWRkaW5nLWxlZnQ6MTJweDtwYWRkaW5nLXJpZ2h0OjEycHh9W211bHRpcGxlXS51ay1mb3JtLWxhcmdlLFtzaXplXS51ay1mb3JtLWxhcmdlLHRleHRhcmVhLnVrLWZvcm0tbGFyZ2V7cGFkZGluZzo3cHggMTJweH0udWstZm9ybS1sYXJnZTpub3Qoc2VsZWN0KTpub3QoaW5wdXQpOm5vdCh0ZXh0YXJlYSl7bGluZS1oZWlnaHQ6NTNweH0udWstZm9ybS1kYW5nZXIsLnVrLWZvcm0tZGFuZ2VyOmZvY3Vze2NvbG9yOiNmMDUwNmU7Ym9yZGVyLWNvbG9yOiNmMDUwNmV9LnVrLWZvcm0tc3VjY2VzcywudWstZm9ybS1zdWNjZXNzOmZvY3Vze2NvbG9yOiMzMmQyOTY7Ym9yZGVyLWNvbG9yOiMzMmQyOTZ9LnVrLWZvcm0tYmxhbmt7YmFja2dyb3VuZDowIDA7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS51ay1mb3JtLWJsYW5rOmZvY3Vze2JvcmRlci1jb2xvcjojZTVlNWU1O2JvcmRlci1zdHlsZTpzb2xpZH1pbnB1dC51ay1mb3JtLXdpZHRoLXhzbWFsbHt3aWR0aDo1MHB4fXNlbGVjdC51ay1mb3JtLXdpZHRoLXhzbWFsbHt3aWR0aDo3NXB4fS51ay1mb3JtLXdpZHRoLXNtYWxse3dpZHRoOjEzMHB4fS51ay1mb3JtLXdpZHRoLW1lZGl1bXt3aWR0aDoyMDBweH0udWstZm9ybS13aWR0aC1sYXJnZXt3aWR0aDo1MDBweH0udWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTtwYWRkaW5nLXJpZ2h0OjIwcHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDI0JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxJTIwOSUyMDYlMjAxNSUyMDYlMjIlMjAlMkYlM0UlMEElMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzY2NiUyMiUyMHBvaW50cyUzRCUyMjEyJTIwMTMlMjA5JTIwOCUyMDE1JTIwOCUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSIpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCUgNTAlfS51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pIG9wdGlvbntjb2xvcjojNjY2fS51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pOmRpc2FibGVke2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAyNCUyMDE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk5OSUyMiUyMHBvaW50cyUzRCUyMjEyJTIwMSUyMDklMjA2JTIwMTUlMjA2JTIyJTIwJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5OTklMjIlMjBwb2ludHMlM0QlMjIxMiUyMDEzJTIwOSUyMDglMjAxNSUyMDglMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEiKX0udWstaW5wdXRbbGlzdF17cGFkZGluZy1yaWdodDoyMHB4O2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCUgNTAlfS51ay1pbnB1dFtsaXN0XTpmb2N1cywudWstaW5wdXRbbGlzdF06aG92ZXJ7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDI0JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxMiUyMDglMjA2JTIwMTYlMjA2JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIil9LnVrLWlucHV0W2xpc3RdOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7ZGlzcGxheTpub25lIWltcG9ydGFudH0udWstY2hlY2tib3gsLnVrLXJhZGlve2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxNnB4O3dpZHRoOjE2cHg7b3ZlcmZsb3c6aGlkZGVuO21hcmdpbi10b3A6LTRweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCUgNTAlO2JvcmRlcjoxcHggc29saWQgI2NjYzt0cmFuc2l0aW9uOi4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uLXByb3BlcnR5OmJhY2tncm91bmQtY29sb3IsYm9yZGVyfS51ay1yYWRpb3tib3JkZXItcmFkaXVzOjUwJX0udWstY2hlY2tib3g6Zm9jdXMsLnVrLXJhZGlvOmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtvdXRsaW5lOjA7Ym9yZGVyLWNvbG9yOiMxZTg3ZjB9LnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLXJhZGlvOmNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojMWU4N2YwO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0udWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywudWstcmFkaW86Y2hlY2tlZDpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiMwZTZkY2R9LnVrLXJhZGlvOmNoZWNrZWR7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTYlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE2JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2NpcmNsZSUyMGZpbGwlM0QlMjIlMjNmZmYlMjIlMjBjeCUzRCUyMjglMjIlMjBjeSUzRCUyMjglMjIlMjByJTNEJTIyMiUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpfS51ay1jaGVja2JveDpjaGVja2Vke2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjE0JTIyJTIwaGVpZ2h0JTNEJTIyMTElMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNCUyMDExJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM2ZmZiUyMiUyMHBvaW50cyUzRCUyMjEyJTIwMSUyMDUlMjA3LjUlMjAyJTIwNSUyMDElMjA1LjUlMjA1JTIwMTAlMjAxMyUyMDEuNSUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSIpfS51ay1jaGVja2JveDppbmRldGVybWluYXRle2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjE2JTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNiUyMDE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyM2ZmZiUyMiUyMHglM0QlMjIzJTIyJTIweSUzRCUyMjglMjIlMjB3aWR0aCUzRCUyMjEwJTIyJTIwaGVpZ2h0JTNEJTIyMSUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpfS51ay1jaGVja2JveDpkaXNhYmxlZCwudWstcmFkaW86ZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZjhmOGY4O2JvcmRlci1jb2xvcjojZTVlNWU1fS51ay1yYWRpbzpkaXNhYmxlZDpjaGVja2Vke2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjE2JTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNiUyMDE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NjaXJjbGUlMjBmaWxsJTNEJTIyJTIzOTk5JTIyJTIwY3glM0QlMjI4JTIyJTIwY3klM0QlMjI4JTIyJTIwciUzRCUyMjIlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UiKX0udWstY2hlY2tib3g6ZGlzYWJsZWQ6Y2hlY2tlZHtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxNCUyMiUyMGhlaWdodCUzRCUyMjExJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTQlMjAxMSUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5OTklMjIlMjBwb2ludHMlM0QlMjIxMiUyMDElMjA1JTIwNy41JTIwMiUyMDUlMjAxJTIwNS41JTIwNSUyMDEwJTIwMTMlMjAxLjUlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEiKX0udWstY2hlY2tib3g6ZGlzYWJsZWQ6aW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxNiUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTYlMjAxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM5OTklMjIlMjB4JTNEJTIyMyUyMiUyMHklM0QlMjI4JTIyJTIwd2lkdGglM0QlMjIxMCUyMiUyMGhlaWdodCUzRCUyMjElMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UiKX0udWstbGVnZW5ke3dpZHRoOjEwMCU7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjA7Zm9udC1zaXplOjEuNXJlbTtsaW5lLWhlaWdodDoxLjR9LnVrLWZvcm0tY3VzdG9te2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO21heC13aWR0aDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0udWstZm9ybS1jdXN0b20gaW5wdXRbdHlwZT1maWxlXSwudWstZm9ybS1jdXN0b20gc2VsZWN0e3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3otaW5kZXg6MTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2xlZnQ6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtvcGFjaXR5OjA7Y3Vyc29yOnBvaW50ZXJ9LnVrLWZvcm0tY3VzdG9tIGlucHV0W3R5cGU9ZmlsZV17Zm9udC1zaXplOjUwMHB4O292ZXJmbG93OmhpZGRlbn0udWstZm9ybS1sYWJlbHtjb2xvcjojMzMzO2ZvbnQtc2l6ZTouODc1cmVtfS51ay1mb3JtLXN0YWNrZWQgLnVrLWZvcm0tbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjVweH1AbWVkaWEgKG1heC13aWR0aDo5NTlweCl7LnVrLWZvcm0taG9yaXpvbnRhbCAudWstZm9ybS1sYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NXB4fX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWZvcm0taG9yaXpvbnRhbCAudWstZm9ybS1sYWJlbHt3aWR0aDoyMDBweDttYXJnaW4tdG9wOjdweDtmbG9hdDpsZWZ0fS51ay1mb3JtLWhvcml6b250YWwgLnVrLWZvcm0tY29udHJvbHN7bWFyZ2luLWxlZnQ6MjE1cHh9LnVrLWZvcm0taG9yaXpvbnRhbCAudWstZm9ybS1jb250cm9scy10ZXh0e3BhZGRpbmctdG9wOjdweH19LnVrLWZvcm0taWNvbntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6NDBweDtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOiM5OTl9LnVrLWZvcm0taWNvbjpob3Zlcntjb2xvcjojNjY2fS51ay1mb3JtLWljb246bm90KGEpOm5vdChidXR0b24pOm5vdChpbnB1dCl7cG9pbnRlci1ldmVudHM6bm9uZX0udWstZm9ybS1pY29uOm5vdCgudWstZm9ybS1pY29uLWZsaXApfi51ay1pbnB1dHtwYWRkaW5nLWxlZnQ6NDBweCFpbXBvcnRhbnR9LnVrLWZvcm0taWNvbi1mbGlwe3JpZ2h0OjA7bGVmdDphdXRvfS51ay1mb3JtLWljb24tZmxpcH4udWstaW5wdXR7cGFkZGluZy1yaWdodDo0MHB4IWltcG9ydGFudH0udWstYnV0dG9ue21hcmdpbjowO2JvcmRlcjpub25lO292ZXJmbG93OnZpc2libGU7Zm9udDppbmhlcml0O2NvbG9yOmluaGVyaXQ7dGV4dC10cmFuc2Zvcm06bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtib3JkZXItcmFkaXVzOjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MCAzMHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtmb250LXNpemU6Ljg3NXJlbTtsaW5lLWhlaWdodDozOHB4O3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt0cmFuc2l0aW9uOi4xcyBlYXNlLWluLW91dDt0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3IsYm9yZGVyLWNvbG9yfS51ay1idXR0b246bm90KDpkaXNhYmxlZCl7Y3Vyc29yOnBvaW50ZXJ9LnVrLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MDtwYWRkaW5nOjB9LnVrLWJ1dHRvbjpob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstYnV0dG9uLWRlZmF1bHR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojMzMzO2JvcmRlcjoxcHggc29saWQgI2U1ZTVlNX0udWstYnV0dG9uLWRlZmF1bHQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojMzMzO2JvcmRlci1jb2xvcjojYjJiMmIyfS51ay1idXR0b24tZGVmYXVsdC51ay1hY3RpdmUsLnVrLWJ1dHRvbi1kZWZhdWx0OmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOiMzMzM7Ym9yZGVyLWNvbG9yOiM5OTl9LnVrLWJ1dHRvbi1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6IzFlODdmMDtjb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnR9LnVrLWJ1dHRvbi1wcmltYXJ5OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzBmN2FlNTtjb2xvcjojZmZmfS51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUsLnVrLWJ1dHRvbi1wcmltYXJ5OmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwZTZkY2Q7Y29sb3I6I2ZmZn0udWstYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjI7Y29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50fS51ay1idXR0b24tc2Vjb25kYXJ5OmhvdmVye2JhY2tncm91bmQtY29sb3I6IzE1MTUxNTtjb2xvcjojZmZmfS51ay1idXR0b24tc2Vjb25kYXJ5LnVrLWFjdGl2ZSwudWstYnV0dG9uLXNlY29uZGFyeTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojMDgwODA4O2NvbG9yOiNmZmZ9LnVrLWJ1dHRvbi1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojZjA1MDZlO2NvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudH0udWstYnV0dG9uLWRhbmdlcjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZTM5NWI7Y29sb3I6I2ZmZn0udWstYnV0dG9uLWRhbmdlci51ay1hY3RpdmUsLnVrLWJ1dHRvbi1kYW5nZXI6YWN0aXZle2JhY2tncm91bmQtY29sb3I6I2VjMjE0Nztjb2xvcjojZmZmfS51ay1idXR0b24tZGFuZ2VyOmRpc2FibGVkLC51ay1idXR0b24tZGVmYXVsdDpkaXNhYmxlZCwudWstYnV0dG9uLXByaW1hcnk6ZGlzYWJsZWQsLnVrLWJ1dHRvbi1zZWNvbmRhcnk6ZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojOTk5O2JvcmRlci1jb2xvcjojZTVlNWU1fS51ay1idXR0b24tc21hbGx7cGFkZGluZzowIDE1cHg7bGluZS1oZWlnaHQ6MjhweDtmb250LXNpemU6Ljg3NXJlbX0udWstYnV0dG9uLWxhcmdle3BhZGRpbmc6MCA0MHB4O2xpbmUtaGVpZ2h0OjUzcHg7Zm9udC1zaXplOi44NzVyZW19LnVrLWJ1dHRvbi10ZXh0e3BhZGRpbmc6MDtsaW5lLWhlaWdodDoxLjU7YmFja2dyb3VuZDowIDA7Y29sb3I6IzMzMztwb3NpdGlvbjpyZWxhdGl2ZX0udWstYnV0dG9uLXRleHQ6OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDtyaWdodDoxMDAlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMzMzM7dHJhbnNpdGlvbjpyaWdodCAuM3MgZWFzZS1vdXR9LnVrLWJ1dHRvbi10ZXh0OmhvdmVye2NvbG9yOiMzMzN9LnVrLWJ1dHRvbi10ZXh0OmhvdmVyOjpiZWZvcmV7cmlnaHQ6MH0udWstYnV0dG9uLXRleHQ6ZGlzYWJsZWR7Y29sb3I6Izk5OX0udWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQ6OmJlZm9yZXtkaXNwbGF5Om5vbmV9LnVrLWJ1dHRvbi1saW5re3BhZGRpbmc6MDtsaW5lLWhlaWdodDoxLjU7YmFja2dyb3VuZDowIDA7Y29sb3I6IzMzM30udWstYnV0dG9uLWxpbms6aG92ZXJ7Y29sb3I6Izk5OTt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstYnV0dG9uLWxpbms6ZGlzYWJsZWR7Y29sb3I6Izk5OTt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstYnV0dG9uLWdyb3Vwe2Rpc3BsYXk6aW5saW5lLWZsZXg7dmVydGljYWwtYWxpZ246bWlkZGxlO3Bvc2l0aW9uOnJlbGF0aXZlfS51ay1idXR0b24tZ3JvdXA+LnVrLWJ1dHRvbjpudGgtY2hpbGQobisyKSwudWstYnV0dG9uLWdyb3VwPmRpdjpudGgtY2hpbGQobisyKSAudWstYnV0dG9ue21hcmdpbi1sZWZ0Oi0xcHh9LnVrLWJ1dHRvbi1ncm91cCAudWstYnV0dG9uLnVrLWFjdGl2ZSwudWstYnV0dG9uLWdyb3VwIC51ay1idXR0b246YWN0aXZlLC51ay1idXR0b24tZ3JvdXAgLnVrLWJ1dHRvbjpob3Zlcntwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjF9LnVrLXByb2dyZXNze3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtib3JkZXI6MDtiYWNrZ3JvdW5kLWNvbG9yOiNmOGY4Zjg7bWFyZ2luLWJvdHRvbToyMHB4O2hlaWdodDoxNXB4O2JvcmRlci1yYWRpdXM6NTAwcHg7b3ZlcmZsb3c6aGlkZGVufSorLnVrLXByb2dyZXNze21hcmdpbi10b3A6MjBweH0udWstcHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LnVrLXByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVle2JhY2tncm91bmQtY29sb3I6IzFlODdmMDt0cmFuc2l0aW9uOndpZHRoIC42cyBlYXNlfS51ay1wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjojMWU4N2YwO3RyYW5zaXRpb246d2lkdGggLjZzIGVhc2V9LnVrLXNlY3Rpb257ZGlzcGxheTpmbG93LXJvb3Q7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctdG9wOjQwcHg7cGFkZGluZy1ib3R0b206NDBweH1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLXNlY3Rpb257cGFkZGluZy10b3A6NzBweDtwYWRkaW5nLWJvdHRvbTo3MHB4fX0udWstc2VjdGlvbj46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLXNlY3Rpb24teHNtYWxse3BhZGRpbmctdG9wOjIwcHg7cGFkZGluZy1ib3R0b206MjBweH0udWstc2VjdGlvbi1zbWFsbHtwYWRkaW5nLXRvcDo0MHB4O3BhZGRpbmctYm90dG9tOjQwcHh9LnVrLXNlY3Rpb24tbGFyZ2V7cGFkZGluZy10b3A6NzBweDtwYWRkaW5nLWJvdHRvbTo3MHB4fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstc2VjdGlvbi1sYXJnZXtwYWRkaW5nLXRvcDoxNDBweDtwYWRkaW5nLWJvdHRvbToxNDBweH19LnVrLXNlY3Rpb24teGxhcmdle3BhZGRpbmctdG9wOjE0MHB4O3BhZGRpbmctYm90dG9tOjE0MHB4fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstc2VjdGlvbi14bGFyZ2V7cGFkZGluZy10b3A6MjEwcHg7cGFkZGluZy1ib3R0b206MjEwcHh9fS51ay1zZWN0aW9uLWRlZmF1bHR7YmFja2dyb3VuZDojZmZmfS51ay1zZWN0aW9uLW11dGVke2JhY2tncm91bmQ6I2Y4ZjhmOH0udWstc2VjdGlvbi1wcmltYXJ5e2JhY2tncm91bmQ6IzFlODdmMH0udWstc2VjdGlvbi1zZWNvbmRhcnl7YmFja2dyb3VuZDojMjIyfS51ay1jb250YWluZXJ7ZGlzcGxheTpmbG93LXJvb3Q7Ym94LXNpemluZzpjb250ZW50LWJveDttYXgtd2lkdGg6MTIwMHB4O21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG87cGFkZGluZy1sZWZ0OjE1cHg7cGFkZGluZy1yaWdodDoxNXB4fUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstY29udGFpbmVye3BhZGRpbmctbGVmdDozMHB4O3BhZGRpbmctcmlnaHQ6MzBweH19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1jb250YWluZXJ7cGFkZGluZy1sZWZ0OjQwcHg7cGFkZGluZy1yaWdodDo0MHB4fX0udWstY29udGFpbmVyPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstY29udGFpbmVyIC51ay1jb250YWluZXJ7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowfS51ay1jb250YWluZXIteHNtYWxse21heC13aWR0aDo3NTBweH0udWstY29udGFpbmVyLXNtYWxse21heC13aWR0aDo5MDBweH0udWstY29udGFpbmVyLWxhcmdle21heC13aWR0aDoxNDAwcHh9LnVrLWNvbnRhaW5lci14bGFyZ2V7bWF4LXdpZHRoOjE2MDBweH0udWstY29udGFpbmVyLWV4cGFuZHttYXgtd2lkdGg6bm9uZX0udWstY29udGFpbmVyLWV4cGFuZC1sZWZ0e21hcmdpbi1sZWZ0OjB9LnVrLWNvbnRhaW5lci1leHBhbmQtcmlnaHR7bWFyZ2luLXJpZ2h0OjB9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1jb250YWluZXItZXhwYW5kLWxlZnQudWstY29udGFpbmVyLXhzbWFsbCwudWstY29udGFpbmVyLWV4cGFuZC1yaWdodC51ay1jb250YWluZXIteHNtYWxse21heC13aWR0aDpjYWxjKDUwJSArICg3NTBweCAvIDIpIC0gMzBweCl9LnVrLWNvbnRhaW5lci1leHBhbmQtbGVmdC51ay1jb250YWluZXItc21hbGwsLnVrLWNvbnRhaW5lci1leHBhbmQtcmlnaHQudWstY29udGFpbmVyLXNtYWxse21heC13aWR0aDpjYWxjKDUwJSArICg5MDBweCAvIDIpIC0gMzBweCl9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstY29udGFpbmVyLWV4cGFuZC1sZWZ0LC51ay1jb250YWluZXItZXhwYW5kLXJpZ2h0e21heC13aWR0aDpjYWxjKDUwJSArICgxMjAwcHggLyAyKSAtIDQwcHgpfS51ay1jb250YWluZXItZXhwYW5kLWxlZnQudWstY29udGFpbmVyLXhzbWFsbCwudWstY29udGFpbmVyLWV4cGFuZC1yaWdodC51ay1jb250YWluZXIteHNtYWxse21heC13aWR0aDpjYWxjKDUwJSArICg3NTBweCAvIDIpIC0gNDBweCl9LnVrLWNvbnRhaW5lci1leHBhbmQtbGVmdC51ay1jb250YWluZXItc21hbGwsLnVrLWNvbnRhaW5lci1leHBhbmQtcmlnaHQudWstY29udGFpbmVyLXNtYWxse21heC13aWR0aDpjYWxjKDUwJSArICg5MDBweCAvIDIpIC0gNDBweCl9LnVrLWNvbnRhaW5lci1leHBhbmQtbGVmdC51ay1jb250YWluZXItbGFyZ2UsLnVrLWNvbnRhaW5lci1leHBhbmQtcmlnaHQudWstY29udGFpbmVyLWxhcmdle21heC13aWR0aDpjYWxjKDUwJSArICgxNDAwcHggLyAyKSAtIDQwcHgpfS51ay1jb250YWluZXItZXhwYW5kLWxlZnQudWstY29udGFpbmVyLXhsYXJnZSwudWstY29udGFpbmVyLWV4cGFuZC1yaWdodC51ay1jb250YWluZXIteGxhcmdle21heC13aWR0aDpjYWxjKDUwJSArICgxNjAwcHggLyAyKSAtIDQwcHgpfX0udWstY29udGFpbmVyLWl0ZW0tcGFkZGluZy1yZW1vdmUtbGVmdCwudWstY29udGFpbmVyLWl0ZW0tcGFkZGluZy1yZW1vdmUtcmlnaHR7d2lkdGg6Y2FsYygxMDAlICsgMTVweCl9LnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLWxlZnR7bWFyZ2luLWxlZnQ6LTE1cHh9LnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLXJpZ2h0e21hcmdpbi1yaWdodDotMTVweH1AbWVkaWEgKG1pbi13aWR0aDo2NDBweCl7LnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLWxlZnQsLnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLXJpZ2h0e3dpZHRoOmNhbGMoMTAwJSArIDMwcHgpfS51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1sZWZ0e21hcmdpbi1sZWZ0Oi0zMHB4fS51ay1jb250YWluZXItaXRlbS1wYWRkaW5nLXJlbW92ZS1yaWdodHttYXJnaW4tcmlnaHQ6LTMwcHh9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstY29udGFpbmVyLWl0ZW0tcGFkZGluZy1yZW1vdmUtbGVmdCwudWstY29udGFpbmVyLWl0ZW0tcGFkZGluZy1yZW1vdmUtcmlnaHR7d2lkdGg6Y2FsYygxMDAlICsgNDBweCl9LnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLWxlZnR7bWFyZ2luLWxlZnQ6LTQwcHh9LnVrLWNvbnRhaW5lci1pdGVtLXBhZGRpbmctcmVtb3ZlLXJpZ2h0e21hcmdpbi1yaWdodDotNDBweH19LnVrLXRpbGV7ZGlzcGxheTpmbG93LXJvb3Q7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctbGVmdDoxNXB4O3BhZGRpbmctcmlnaHQ6MTVweDtwYWRkaW5nLXRvcDo0MHB4O3BhZGRpbmctYm90dG9tOjQwcHh9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay10aWxle3BhZGRpbmctbGVmdDozMHB4O3BhZGRpbmctcmlnaHQ6MzBweH19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay10aWxle3BhZGRpbmctbGVmdDo0MHB4O3BhZGRpbmctcmlnaHQ6NDBweDtwYWRkaW5nLXRvcDo3MHB4O3BhZGRpbmctYm90dG9tOjcwcHh9fS51ay10aWxlPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstdGlsZS14c21hbGx7cGFkZGluZy10b3A6MjBweDtwYWRkaW5nLWJvdHRvbToyMHB4fS51ay10aWxlLXNtYWxse3BhZGRpbmctdG9wOjQwcHg7cGFkZGluZy1ib3R0b206NDBweH0udWstdGlsZS1sYXJnZXtwYWRkaW5nLXRvcDo3MHB4O3BhZGRpbmctYm90dG9tOjcwcHh9QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay10aWxlLWxhcmdle3BhZGRpbmctdG9wOjE0MHB4O3BhZGRpbmctYm90dG9tOjE0MHB4fX0udWstdGlsZS14bGFyZ2V7cGFkZGluZy10b3A6MTQwcHg7cGFkZGluZy1ib3R0b206MTQwcHh9QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay10aWxlLXhsYXJnZXtwYWRkaW5nLXRvcDoyMTBweDtwYWRkaW5nLWJvdHRvbToyMTBweH19LnVrLXRpbGUtZGVmYXVsdHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LnVrLXRpbGUtbXV0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjhmOGY4fS51ay10aWxlLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojMWU4N2YwfS51ay10aWxlLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjJ9LnVrLWNhcmR7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94O3RyYW5zaXRpb246Ym94LXNoYWRvdyAuMXMgZWFzZS1pbi1vdXR9LnVrLWNhcmQtYm9keXtkaXNwbGF5OmZsb3ctcm9vdDtwYWRkaW5nOjMwcHggMzBweH0udWstY2FyZC1oZWFkZXJ7ZGlzcGxheTpmbG93LXJvb3Q7cGFkZGluZzoxNXB4IDMwcHh9LnVrLWNhcmQtZm9vdGVye2Rpc3BsYXk6Zmxvdy1yb290O3BhZGRpbmc6MTVweCAzMHB4fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LnVrLWNhcmQtYm9keXtwYWRkaW5nOjQwcHggNDBweH0udWstY2FyZC1oZWFkZXJ7cGFkZGluZzoyMHB4IDQwcHh9LnVrLWNhcmQtZm9vdGVye3BhZGRpbmc6MjBweCA0MHB4fX0udWstY2FyZC1ib2R5PjpsYXN0LWNoaWxkLC51ay1jYXJkLWZvb3Rlcj46bGFzdC1jaGlsZCwudWstY2FyZC1oZWFkZXI+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1jYXJkLXRpdGxle2ZvbnQtc2l6ZToxLjVyZW07bGluZS1oZWlnaHQ6MS40fS51ay1jYXJkLWJhZGdle3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxNXB4O3JpZ2h0OjE1cHg7ei1pbmRleDoxO2hlaWdodDoyMnB4O3BhZGRpbmc6MCAxMHB4O2JhY2tncm91bmQ6IzFlODdmMDtjb2xvcjojZmZmO2ZvbnQtc2l6ZTouODc1cmVtO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtsaW5lLWhlaWdodDowO2JvcmRlci1yYWRpdXM6MnB4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0udWstY2FyZC1iYWRnZTpmaXJzdC1jaGlsZCsqe21hcmdpbi10b3A6MH0udWstY2FyZC1ob3Zlcjpub3QoLnVrLWNhcmQtZGVmYXVsdCk6bm90KC51ay1jYXJkLXByaW1hcnkpOm5vdCgudWstY2FyZC1zZWNvbmRhcnkpOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2hhZG93OjAgMTRweCAyNXB4IHJnYmEoMCwwLDAsLjE2KX0udWstY2FyZC1kZWZhdWx0e2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojNjY2O2JveC1zaGFkb3c6MCA1cHggMTVweCByZ2JhKDAsMCwwLC4wOCl9LnVrLWNhcmQtZGVmYXVsdCAudWstY2FyZC10aXRsZXtjb2xvcjojMzMzfS51ay1jYXJkLWRlZmF1bHQudWstY2FyZC1ob3Zlcjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym94LXNoYWRvdzowIDE0cHggMjVweCByZ2JhKDAsMCwwLC4xNil9LnVrLWNhcmQtZGVmYXVsdCAudWstY2FyZC1oZWFkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U1ZTVlNX0udWstY2FyZC1kZWZhdWx0IC51ay1jYXJkLWZvb3Rlcntib3JkZXItdG9wOjFweCBzb2xpZCAjZTVlNWU1fS51ay1jYXJkLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojMWU4N2YwO2NvbG9yOiNmZmY7Ym94LXNoYWRvdzowIDVweCAxNXB4IHJnYmEoMCwwLDAsLjA4KX0udWstY2FyZC1wcmltYXJ5IC51ay1jYXJkLXRpdGxle2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWhvdmVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzFlODdmMDtib3gtc2hhZG93OjAgMTRweCAyNXB4IHJnYmEoMCwwLDAsLjE2KX0udWstY2FyZC1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjojMjIyO2NvbG9yOiNmZmY7Ym94LXNoYWRvdzowIDVweCAxNXB4IHJnYmEoMCwwLDAsLjA4KX0udWstY2FyZC1zZWNvbmRhcnkgLnVrLWNhcmQtdGl0bGV7Y29sb3I6I2ZmZn0udWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ob3Zlcjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyMjI7Ym94LXNoYWRvdzowIDE0cHggMjVweCByZ2JhKDAsMCwwLC4xNil9LnVrLWNhcmQtc21hbGwgLnVrLWNhcmQtYm9keSwudWstY2FyZC1zbWFsbC51ay1jYXJkLWJvZHl7cGFkZGluZzoyMHB4IDIwcHh9LnVrLWNhcmQtc21hbGwgLnVrLWNhcmQtaGVhZGVye3BhZGRpbmc6MTNweCAyMHB4fS51ay1jYXJkLXNtYWxsIC51ay1jYXJkLWZvb3RlcntwYWRkaW5nOjEzcHggMjBweH1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1jYXJkLWxhcmdlIC51ay1jYXJkLWJvZHksLnVrLWNhcmQtbGFyZ2UudWstY2FyZC1ib2R5e3BhZGRpbmc6NzBweCA3MHB4fS51ay1jYXJkLWxhcmdlIC51ay1jYXJkLWhlYWRlcntwYWRkaW5nOjM1cHggNzBweH0udWstY2FyZC1sYXJnZSAudWstY2FyZC1mb290ZXJ7cGFkZGluZzozNXB4IDcwcHh9fS51ay1jYXJkLWJvZHk+LnVrLW5hdi1kZWZhdWx0e21hcmdpbi1sZWZ0Oi0zMHB4O21hcmdpbi1yaWdodDotMzBweH0udWstY2FyZC1ib2R5Pi51ay1uYXYtZGVmYXVsdDpvbmx5LWNoaWxke21hcmdpbi10b3A6LTE1cHg7bWFyZ2luLWJvdHRvbTotMTVweH0udWstY2FyZC1ib2R5Pi51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsLnVrLWNhcmQtYm9keT4udWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsLnVrLWNhcmQtYm9keT4udWstbmF2LWRlZmF1bHQ+bGk+YXtwYWRkaW5nLWxlZnQ6MzBweDtwYWRkaW5nLXJpZ2h0OjMwcHh9LnVrLWNhcmQtYm9keT4udWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWJ7cGFkZGluZy1sZWZ0OjQ1cHh9QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstY2FyZC1ib2R5Pi51ay1uYXYtZGVmYXVsdHttYXJnaW4tbGVmdDotNDBweDttYXJnaW4tcmlnaHQ6LTQwcHh9LnVrLWNhcmQtYm9keT4udWstbmF2LWRlZmF1bHQ6b25seS1jaGlsZHttYXJnaW4tdG9wOi0yNXB4O21hcmdpbi1ib3R0b206LTI1cHh9LnVrLWNhcmQtYm9keT4udWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyLC51ay1jYXJkLWJvZHk+LnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVyLC51ay1jYXJkLWJvZHk+LnVrLW5hdi1kZWZhdWx0PmxpPmF7cGFkZGluZy1sZWZ0OjQwcHg7cGFkZGluZy1yaWdodDo0MHB4fS51ay1jYXJkLWJvZHk+LnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3Vie3BhZGRpbmctbGVmdDo1NXB4fX0udWstY2FyZC1zbWFsbD4udWstbmF2LWRlZmF1bHR7bWFyZ2luLWxlZnQ6LTIwcHg7bWFyZ2luLXJpZ2h0Oi0yMHB4fS51ay1jYXJkLXNtYWxsPi51ay1uYXYtZGVmYXVsdDpvbmx5LWNoaWxke21hcmdpbi10b3A6LTVweDttYXJnaW4tYm90dG9tOi01cHh9LnVrLWNhcmQtc21hbGw+LnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwudWstY2FyZC1zbWFsbD4udWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsLnVrLWNhcmQtc21hbGw+LnVrLW5hdi1kZWZhdWx0PmxpPmF7cGFkZGluZy1sZWZ0OjIwcHg7cGFkZGluZy1yaWdodDoyMHB4fS51ay1jYXJkLXNtYWxsPi51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YntwYWRkaW5nLWxlZnQ6MzVweH1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1jYXJkLWxhcmdlPi51ay1uYXYtZGVmYXVsdHttYXJnaW46MH0udWstY2FyZC1sYXJnZT4udWstbmF2LWRlZmF1bHQ6b25seS1jaGlsZHttYXJnaW46MH0udWstY2FyZC1sYXJnZT4udWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyLC51ay1jYXJkLWxhcmdlPi51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwudWstY2FyZC1sYXJnZT4udWstbmF2LWRlZmF1bHQ+bGk+YXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjB9LnVrLWNhcmQtbGFyZ2U+LnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3Vie3BhZGRpbmctbGVmdDoxNXB4fX0udWstY2xvc2V7Y29sb3I6Izk5OTt0cmFuc2l0aW9uOi4xcyBlYXNlLWluLW91dDt0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLG9wYWNpdHl9LnVrLWNsb3NlOmhvdmVye2NvbG9yOiM2NjZ9LnVrLXNwaW5uZXI+KnthbmltYXRpb246dWstc3Bpbm5lci1yb3RhdGUgMS40cyBsaW5lYXIgaW5maW5pdGV9QGtleWZyYW1lcyB1ay1zcGlubmVyLXJvdGF0ZXswJXt0cmFuc2Zvcm06cm90YXRlKDApfTEwMCV7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfX0udWstc3Bpbm5lcj4qPip7c3Ryb2tlLWRhc2hhcnJheTo4OHB4O3N0cm9rZS1kYXNob2Zmc2V0OjA7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7YW5pbWF0aW9uOnVrLXNwaW5uZXItZGFzaCAxLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kfUBrZXlmcmFtZXMgdWstc3Bpbm5lci1kYXNoezAle3N0cm9rZS1kYXNob2Zmc2V0Ojg4cHh9NTAle3N0cm9rZS1kYXNob2Zmc2V0OjIycHg7dHJhbnNmb3JtOnJvdGF0ZSgxMzVkZWcpfTEwMCV7c3Ryb2tlLWRhc2hvZmZzZXQ6ODhweDt0cmFuc2Zvcm06cm90YXRlKDQ1MGRlZyl9fS51ay10b3RvcHtwYWRkaW5nOjVweDtjb2xvcjojOTk5O3RyYW5zaXRpb246Y29sb3IgLjFzIGVhc2UtaW4tb3V0fS51ay10b3RvcDpob3Zlcntjb2xvcjojNjY2fS51ay10b3RvcDphY3RpdmV7Y29sb3I6IzMzM30udWstbWFya2Vye3BhZGRpbmc6NXB4O2JhY2tncm91bmQ6IzIyMjtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6NTAwcHh9LnVrLW1hcmtlcjpob3Zlcntjb2xvcjojZmZmfS51ay1hbGVydHtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tYm90dG9tOjIwcHg7cGFkZGluZzoxNXB4IDI5cHggMTVweCAxNXB4O2JhY2tncm91bmQ6I2Y4ZjhmODtjb2xvcjojNjY2fSorLnVrLWFsZXJ0e21hcmdpbi10b3A6MjBweH0udWstYWxlcnQ+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1hbGVydC1jbG9zZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MjBweDtyaWdodDoxNXB4O2NvbG9yOmluaGVyaXQ7b3BhY2l0eTouNH0udWstYWxlcnQtY2xvc2U6Zmlyc3QtY2hpbGQrKnttYXJnaW4tdG9wOjB9LnVrLWFsZXJ0LWNsb3NlOmhvdmVye2NvbG9yOmluaGVyaXQ7b3BhY2l0eTouOH0udWstYWxlcnQtcHJpbWFyeXtiYWNrZ3JvdW5kOiNkOGVhZmM7Y29sb3I6IzFlODdmMH0udWstYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOiNlZGZiZjY7Y29sb3I6IzMyZDI5Nn0udWstYWxlcnQtd2FybmluZ3tiYWNrZ3JvdW5kOiNmZmY2ZWU7Y29sb3I6I2ZhYTA1YX0udWstYWxlcnQtZGFuZ2Vye2JhY2tncm91bmQ6I2ZlZjRmNjtjb2xvcjojZjA1MDZlfS51ay1hbGVydCBoMSwudWstYWxlcnQgaDIsLnVrLWFsZXJ0IGgzLC51ay1hbGVydCBoNCwudWstYWxlcnQgaDUsLnVrLWFsZXJ0IGg2e2NvbG9yOmluaGVyaXR9LnVrLWFsZXJ0IGE6bm90KFtjbGFzc10pe2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0udWstYWxlcnQgYTpub3QoW2NsYXNzXSk6aG92ZXJ7Y29sb3I6aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS51ay1wbGFjZWhvbGRlcnttYXJnaW4tYm90dG9tOjIwcHg7cGFkZGluZzozMHB4IDMwcHg7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjFweCBkYXNoZWQgI2U1ZTVlNX0qKy51ay1wbGFjZWhvbGRlcnttYXJnaW4tdG9wOjIwcHh9LnVrLXBsYWNlaG9sZGVyPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstYmFkZ2V7Ym94LXNpemluZzpib3JkZXItYm94O21pbi13aWR0aDoxOHB4O2hlaWdodDoxOHB4O3BhZGRpbmc6MCA1cHg7Ym9yZGVyLXJhZGl1czo1MDBweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7YmFja2dyb3VuZDojMWU4N2YwO2NvbG9yOiNmZmYhaW1wb3J0YW50O2ZvbnQtc2l6ZToxMXB4O2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bGluZS1oZWlnaHQ6MH0udWstYmFkZ2U6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVrLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAxMHB4O2JhY2tncm91bmQ6IzFlODdmMDtsaW5lLWhlaWdodDoxLjU7Zm9udC1zaXplOi44NzVyZW07Y29sb3I6I2ZmZjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlci1yYWRpdXM6MnB4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0udWstbGFiZWwtc3VjY2Vzc3tiYWNrZ3JvdW5kLWNvbG9yOiMzMmQyOTY7Y29sb3I6I2ZmZn0udWstbGFiZWwtd2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNmYWEwNWE7Y29sb3I6I2ZmZn0udWstbGFiZWwtZGFuZ2Vye2JhY2tncm91bmQtY29sb3I6I2YwNTA2ZTtjb2xvcjojZmZmfS51ay1vdmVybGF5e3BhZGRpbmc6MzBweCAzMHB4fS51ay1vdmVybGF5PjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstb3ZlcmxheS1kZWZhdWx0e2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuOCl9LnVrLW92ZXJsYXktcHJpbWFyeXtiYWNrZ3JvdW5kOnJnYmEoMzQsMzQsMzQsLjgpfS51ay1hcnRpY2xle2Rpc3BsYXk6Zmxvdy1yb290fS51ay1hcnRpY2xlPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstYXJ0aWNsZSsudWstYXJ0aWNsZXttYXJnaW4tdG9wOjcwcHh9LnVrLWFydGljbGUtdGl0bGV7Zm9udC1zaXplOjIuMjMxMjVyZW07bGluZS1oZWlnaHQ6MS4yfUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstYXJ0aWNsZS10aXRsZXtmb250LXNpemU6Mi42MjVyZW19fS51ay1hcnRpY2xlLW1ldGF7Zm9udC1zaXplOi44NzVyZW07bGluZS1oZWlnaHQ6MS40O2NvbG9yOiM5OTl9LnVrLWFydGljbGUtbWV0YSBhe2NvbG9yOiM5OTl9LnVrLWFydGljbGUtbWV0YSBhOmhvdmVye2NvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVrLWNvbW1lbnQtYm9keXtkaXNwbGF5OmZsb3ctcm9vdDtvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7d29yZC13cmFwOmJyZWFrLXdvcmR9LnVrLWNvbW1lbnQtaGVhZGVye2Rpc3BsYXk6Zmxvdy1yb290O21hcmdpbi1ib3R0b206MjBweH0udWstY29tbWVudC1ib2R5PjpsYXN0LWNoaWxkLC51ay1jb21tZW50LWhlYWRlcj46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLWNvbW1lbnQtdGl0bGV7Zm9udC1zaXplOjEuMjVyZW07bGluZS1oZWlnaHQ6MS40fS51ay1jb21tZW50LW1ldGF7Zm9udC1zaXplOi44NzVyZW07bGluZS1oZWlnaHQ6MS40O2NvbG9yOiM5OTl9LnVrLWNvbW1lbnQtbGlzdHtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS51ay1jb21tZW50LWxpc3Q+Om50aC1jaGlsZChuKzIpe21hcmdpbi10b3A6NzBweH0udWstY29tbWVudC1saXN0IC51ay1jb21tZW50fnVse21hcmdpbjo3MHB4IDAgMCAwO3BhZGRpbmctbGVmdDozMHB4O2xpc3Qtc3R5bGU6bm9uZX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWNvbW1lbnQtbGlzdCAudWstY29tbWVudH51bHtwYWRkaW5nLWxlZnQ6MTAwcHh9fS51ay1jb21tZW50LWxpc3QgLnVrLWNvbW1lbnR+dWw+Om50aC1jaGlsZChuKzIpe21hcmdpbi10b3A6NzBweH0udWstY29tbWVudC1wcmltYXJ5e3BhZGRpbmc6MzBweDtiYWNrZ3JvdW5kLWNvbG9yOiNmOGY4Zjh9LnVrLXNlYXJjaHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTttYXgtd2lkdGg6MTAwJTttYXJnaW46MH0udWstc2VhcmNoLWlucHV0Ojotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLC51ay1zZWFyY2gtaW5wdXQ6Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LnVrLXNlYXJjaC1pbnB1dDo6LW1vei1wbGFjZWhvbGRlcntvcGFjaXR5OjF9LnVrLXNlYXJjaC1pbnB1dHtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7Ym9yZGVyLXJhZGl1czowO2ZvbnQ6aW5oZXJpdDtvdmVyZmxvdzp2aXNpYmxlOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDoxMDAlO2JvcmRlcjpub25lO2NvbG9yOiM2NjZ9LnVrLXNlYXJjaC1pbnB1dDpmb2N1c3tvdXRsaW5lOjB9LnVrLXNlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6Izk5OX0udWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjojOTk5fS51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVye2NvbG9yOiM5OTl9LnVrLXNlYXJjaCAudWstc2VhcmNoLWljb246bm90KGEpOm5vdChidXR0b24pOm5vdChpbnB1dCl7cG9pbnRlci1ldmVudHM6bm9uZX0udWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbi1mbGlwe3JpZ2h0OjA7bGVmdDphdXRvfS51ay1zZWFyY2gtZGVmYXVsdHt3aWR0aDoyNDBweH0udWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dHtoZWlnaHQ6NDBweDtwYWRkaW5nLWxlZnQ6MTBweDtwYWRkaW5nLXJpZ2h0OjEwcHg7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjFweCBzb2xpZCAjZTVlNWU1fS51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtib3JkZXItY29sb3I6IzFlODdmMH0udWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pY29ue3dpZHRoOjQwcHh9LnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaWNvbjpub3QoLnVrLXNlYXJjaC1pY29uLWZsaXApfi51ay1zZWFyY2gtaW5wdXR7cGFkZGluZy1sZWZ0OjQwcHh9LnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaWNvbi1mbGlwfi51ay1zZWFyY2gtaW5wdXR7cGFkZGluZy1yaWdodDo0MHB4fS51ay1zZWFyY2gtbmF2YmFye3dpZHRoOjQwMHB4fS51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXR7aGVpZ2h0OjQwcHg7YmFja2dyb3VuZDowIDA7Zm9udC1zaXplOjEuNXJlbX0udWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWljb257d2lkdGg6NDBweH0udWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWljb246bm90KC51ay1zZWFyY2gtaWNvbi1mbGlwKX4udWstc2VhcmNoLWlucHV0e3BhZGRpbmctbGVmdDo0MHB4fS51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaWNvbi1mbGlwfi51ay1zZWFyY2gtaW5wdXR7cGFkZGluZy1yaWdodDo0MHB4fS51ay1zZWFyY2gtbGFyZ2V7d2lkdGg6NTAwcHh9LnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWlucHV0e2hlaWdodDo4MHB4O2JhY2tncm91bmQ6MCAwO2ZvbnQtc2l6ZToyLjYyNXJlbX0udWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaWNvbnt3aWR0aDo4MHB4fS51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pY29uOm5vdCgudWstc2VhcmNoLWljb24tZmxpcCl+LnVrLXNlYXJjaC1pbnB1dHtwYWRkaW5nLWxlZnQ6ODBweH0udWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaWNvbi1mbGlwfi51ay1zZWFyY2gtaW5wdXR7cGFkZGluZy1yaWdodDo4MHB4fS51ay1zZWFyY2gtdG9nZ2xle2NvbG9yOiM5OTl9LnVrLXNlYXJjaC10b2dnbGU6aG92ZXJ7Y29sb3I6IzY2Nn0udWstYWNjb3JkaW9ue3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5vbmV9LnVrLWFjY29yZGlvbj46bnRoLWNoaWxkKG4rMil7bWFyZ2luLXRvcDoyMHB4fS51ay1hY2NvcmRpb24tdGl0bGV7ZGlzcGxheTpibG9jaztmb250LXNpemU6MS4yNXJlbTtsaW5lLWhlaWdodDoxLjQ7Y29sb3I6IzMzMztvdmVyZmxvdzpoaWRkZW59LnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3Jle2NvbnRlbnQ6IiI7d2lkdGg6MS40ZW07aGVpZ2h0OjEuNGVtO21hcmdpbi1sZWZ0OjEwcHg7ZmxvYXQ6cmlnaHQ7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTMlMjIlMjBoZWlnaHQlM0QlMjIxMyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEzJTIwMTMlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIwd2lkdGglM0QlMjIxMyUyMiUyMGhlaWdodCUzRCUyMjElMjIlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjI2JTIyJTIwJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM2NjYlMjIlMjB3aWR0aCUzRCUyMjElMjIlMjBoZWlnaHQlM0QlMjIxMyUyMiUyMHglM0QlMjI2JTIyJTIweSUzRCUyMjAlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UiKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCUgNTAlfS51ay1vcGVuPi51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZXtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxMyUyMiUyMGhlaWdodCUzRCUyMjEzJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTMlMjAxMyUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM2NjYlMjIlMjB3aWR0aCUzRCUyMjEzJTIyJTIwaGVpZ2h0JTNEJTIyMSUyMiUyMHglM0QlMjIwJTIyJTIweSUzRCUyMjYlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UiKX0udWstYWNjb3JkaW9uLXRpdGxlOmhvdmVye2NvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVrLWFjY29yZGlvbi1jb250ZW50e2Rpc3BsYXk6Zmxvdy1yb290O21hcmdpbi10b3A6MjBweH0udWstYWNjb3JkaW9uLWNvbnRlbnQ+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1kcm9we2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMjA7LS11ay1wb3NpdGlvbi1vZmZzZXQ6MjBweDstLXVrLXBvc2l0aW9uLXZpZXdwb3J0LW9mZnNldDoxNXB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDozMDBweH0udWstZHJvcC51ay1vcGVue2Rpc3BsYXk6YmxvY2t9LnVrLWRyb3Atc3RhY2sgLnVrLWRyb3AtZ3JpZD4qe3dpZHRoOjEwMCUhaW1wb3J0YW50fS51ay1kcm9wZG93bntkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDIwOy0tdWstcG9zaXRpb24tb2Zmc2V0OjEwcHg7LS11ay1wb3NpdGlvbi12aWV3cG9ydC1vZmZzZXQ6MTVweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjIwMHB4O3BhZGRpbmc6MjVweDtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzY2Njtib3gtc2hhZG93OjAgNXB4IDEycHggcmdiYSgwLDAsMCwuMTUpfS51ay1kcm9wZG93bi51ay1vcGVue2Rpc3BsYXk6YmxvY2t9LnVrLWRyb3Bkb3duPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstZHJvcGRvd24tbGFyZ2V7cGFkZGluZzo0MHB4fS51ay1kcm9wZG93bi1uYXZ7Zm9udC1zaXplOi44NzVyZW19LnVrLWRyb3Bkb3duLW5hdj5saT5he2NvbG9yOiM5OTl9LnVrLWRyb3Bkb3duLW5hdj5saS51ay1hY3RpdmU+YSwudWstZHJvcGRvd24tbmF2PmxpPmE6aG92ZXJ7Y29sb3I6IzY2Nn0udWstZHJvcGRvd24tbmF2IC51ay1uYXYtc3VidGl0bGV7Zm9udC1zaXplOjEycHh9LnVrLWRyb3Bkb3duLW5hdiAudWstbmF2LWhlYWRlcntjb2xvcjojMzMzfS51ay1kcm9wZG93bi1uYXYgLnVrLW5hdi1kaXZpZGVye2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTV9LnVrLWRyb3Bkb3duLW5hdiAudWstbmF2LXN1YiBhe2NvbG9yOiM5OTl9LnVrLWRyb3Bkb3duLW5hdiAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1kcm9wZG93bi1uYXYgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmF7Y29sb3I6IzY2Nn0udWstZHJvcGRvd24tc3RhY2sgLnVrLWRyb3Bkb3duLWdyaWQ+Knt3aWR0aDoxMDAlIWltcG9ydGFudH0udWstZHJvcGJhcnstLXVrLXBvc2l0aW9uLW9mZnNldDowOy0tdWstcG9zaXRpb24tc2hpZnQtb2Zmc2V0OjA7LS11ay1wb3NpdGlvbi12aWV3cG9ydC1vZmZzZXQ6MDtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDIwO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjI1cHggMTVweCAyNXB4IDE1cHg7YmFja2dyb3VuZDojZmZmO2NvbG9yOiM2NjZ9LnVrLWRyb3BiYXIudWstb3BlbntkaXNwbGF5OmJsb2NrfS51ay1kcm9wYmFyPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH1AbWVkaWEgKG1pbi13aWR0aDo2NDBweCl7LnVrLWRyb3BiYXJ7cGFkZGluZy1sZWZ0OjMwcHg7cGFkZGluZy1yaWdodDozMHB4fX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWRyb3BiYXJ7cGFkZGluZy1sZWZ0OjQwcHg7cGFkZGluZy1yaWdodDo0MHB4fX0udWstZHJvcGJhci1sYXJnZXtwYWRkaW5nLXRvcDo0MHB4O3BhZGRpbmctYm90dG9tOjQwcHh9LnVrLWRyb3BiYXItdG9we2JveC1zaGFkb3c6MCAxMnB4IDdweCAtNnB4IHJnYmEoMCwwLDAsLjA1KX0udWstZHJvcGJhci1ib3R0b217Ym94LXNoYWRvdzowIC0xMnB4IDdweCAtNnB4IHJnYmEoMCwwLDAsLjA1KX0udWstZHJvcGJhci1sZWZ0e2JveC1zaGFkb3c6MTJweCAwIDdweCAtNnB4IHJnYmEoMCwwLDAsLjA1KX0udWstZHJvcGJhci1yaWdodHtib3gtc2hhZG93Oi0xMnB4IDAgN3B4IC02cHggcmdiYSgwLDAsMCwuMDUpfS51ay1tb2RhbHtkaXNwbGF5Om5vbmU7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7ei1pbmRleDoxMDEwO292ZXJmbG93LXk6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDtwYWRkaW5nOjE1cHggMTVweDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjYpO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyBsaW5lYXJ9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1tb2RhbHtwYWRkaW5nOjUwcHggMzBweH19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1tb2RhbHtwYWRkaW5nLWxlZnQ6NDBweDtwYWRkaW5nLXJpZ2h0OjQwcHh9fS51ay1tb2RhbC51ay1vcGVue29wYWNpdHk6MX0udWstbW9kYWwtcGFnZXtvdmVyZmxvdzpoaWRkZW59LnVrLW1vZGFsLWRpYWxvZ3twb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjAgYXV0bzt3aWR0aDo2MDBweDttYXgtd2lkdGg6MTAwJSFpbXBvcnRhbnQ7YmFja2dyb3VuZDojZmZmO29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwcHgpO3RyYW5zaXRpb246LjNzIGxpbmVhcjt0cmFuc2l0aW9uLXByb3BlcnR5Om9wYWNpdHksdHJhbnNmb3JtfS51ay1vcGVuPi51ay1tb2RhbC1kaWFsb2d7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApfS51ay1tb2RhbC1jb250YWluZXIgLnVrLW1vZGFsLWRpYWxvZ3t3aWR0aDoxMjAwcHh9LnVrLW1vZGFsLWZ1bGx7cGFkZGluZzowO2JhY2tncm91bmQ6MCAwfS51ay1tb2RhbC1mdWxsIC51ay1tb2RhbC1kaWFsb2d7bWFyZ2luOjA7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKX0udWstbW9kYWwtYm9keXtkaXNwbGF5OmZsb3ctcm9vdDtwYWRkaW5nOjIwcHggMjBweH0udWstbW9kYWwtaGVhZGVye2Rpc3BsYXk6Zmxvdy1yb290O3BhZGRpbmc6MTBweCAyMHB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU1fS51ay1tb2RhbC1mb290ZXJ7ZGlzcGxheTpmbG93LXJvb3Q7cGFkZGluZzoxMHB4IDIwcHg7YmFja2dyb3VuZDojZmZmO2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTV9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1tb2RhbC1ib2R5e3BhZGRpbmc6MzBweCAzMHB4fS51ay1tb2RhbC1oZWFkZXJ7cGFkZGluZzoxNXB4IDMwcHh9LnVrLW1vZGFsLWZvb3RlcntwYWRkaW5nOjE1cHggMzBweH19LnVrLW1vZGFsLWJvZHk+Omxhc3QtY2hpbGQsLnVrLW1vZGFsLWZvb3Rlcj46bGFzdC1jaGlsZCwudWstbW9kYWwtaGVhZGVyPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstbW9kYWwtdGl0bGV7Zm9udC1zaXplOjJyZW07bGluZS1oZWlnaHQ6MS4zfVtjbGFzcyo9dWstbW9kYWwtY2xvc2UtXXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMTA7dG9wOjEwcHg7cmlnaHQ6MTBweDtwYWRkaW5nOjVweH1bY2xhc3MqPXVrLW1vZGFsLWNsb3NlLV06Zmlyc3QtY2hpbGQrKnttYXJnaW4tdG9wOjB9LnVrLW1vZGFsLWNsb3NlLW91dHNpZGV7dG9wOjA7cmlnaHQ6LTVweDt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsLTEwMCUpO2NvbG9yOiNmZmZ9LnVrLW1vZGFsLWNsb3NlLW91dHNpZGU6aG92ZXJ7Y29sb3I6I2ZmZn1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLW1vZGFsLWNsb3NlLW91dHNpZGV7cmlnaHQ6MDt0cmFuc2Zvcm06dHJhbnNsYXRlKDEwMCUsLTEwMCUpfX0udWstbW9kYWwtY2xvc2UtZnVsbHt0b3A6MDtyaWdodDowO3BhZGRpbmc6MjBweDtiYWNrZ3JvdW5kOiNmZmZ9LnVrLXNsaWRlc2hvd3std2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9LnVrLXNsaWRlc2hvdy1pdGVtc3twb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjA7bWFyZ2luOjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZTtvdmVyZmxvdzpoaWRkZW47LXdlYmtpdC10b3VjaC1jYWxsb3V0Om5vbmU7dG91Y2gtYWN0aW9uOnBhbi15fS51ay1zbGlkZXNob3ctaXRlbXM+Kntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtvdmVyZmxvdzpoaWRkZW47d2lsbC1jaGFuZ2U6dHJhbnNmb3JtLG9wYWNpdHl9LnVrLXNsaWRlc2hvdy1pdGVtcz46bm90KC51ay1hY3RpdmUpe2Rpc3BsYXk6bm9uZX0udWstc2xpZGVyey13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjp0cmFuc3BhcmVudH0udWstc2xpZGVyLWNvbnRhaW5lcntvdmVyZmxvdzpoaWRkZW59LnVrLXNsaWRlci1jb250YWluZXItb2Zmc2V0e21hcmdpbjotMTFweCAtMjVweCAtMzlweCAtMjVweDtwYWRkaW5nOjExcHggMjVweCAzOXB4IDI1cHh9LnVrLXNsaWRlci1pdGVtc3t3aWxsLWNoYW5nZTp0cmFuc2Zvcm07cG9zaXRpb246cmVsYXRpdmU7dG91Y2gtYWN0aW9uOnBhbi15fS51ay1zbGlkZXItaXRlbXM6bm90KC51ay1ncmlkKXtkaXNwbGF5OmZsZXg7bWFyZ2luOjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZTstd2Via2l0LXRvdWNoLWNhbGxvdXQ6bm9uZX0udWstc2xpZGVyLWl0ZW1zLnVrLWdyaWR7ZmxleC13cmFwOm5vd3JhcH0udWstc2xpZGVyLWl0ZW1zPip7ZmxleDpub25lO21heC13aWR0aDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS51ay1zdGlja3l7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94fS51ay1zdGlja3ktZml4ZWR7ei1pbmRleDo5ODA7bWFyZ2luOjAhaW1wb3J0YW50Oy13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW59LnVrLXN0aWNreVtjbGFzcyo9dWstYW5pbWF0aW9uLV17YW5pbWF0aW9uLWR1cmF0aW9uOi4yc30udWstc3RpY2t5LnVrLWFuaW1hdGlvbi1yZXZlcnNle2FuaW1hdGlvbi1kdXJhdGlvbjouMnN9LnVrLXN0aWNreS1wbGFjZWhvbGRlcntwb2ludGVyLWV2ZW50czpub25lfS51ay1vZmZjYW52YXN7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmZpeGVkO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt6LWluZGV4OjEwMDB9LnVrLW9mZmNhbnZhcy1mbGlwIC51ay1vZmZjYW52YXN7cmlnaHQ6MDtsZWZ0OmF1dG99LnVrLW9mZmNhbnZhcy1iYXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDotMjcwcHg7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjI3MHB4O3BhZGRpbmc6MjBweCAyMHB4O2JhY2tncm91bmQ6IzIyMjtvdmVyZmxvdy15OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1vZmZjYW52YXMtYmFye2xlZnQ6LTM1MHB4O3dpZHRoOjM1MHB4O3BhZGRpbmc6MzBweCAzMHB4fX0udWstb2ZmY2FudmFzLWZsaXAgLnVrLW9mZmNhbnZhcy1iYXJ7bGVmdDphdXRvO3JpZ2h0Oi0yNzBweH1AbWVkaWEgKG1pbi13aWR0aDo2NDBweCl7LnVrLW9mZmNhbnZhcy1mbGlwIC51ay1vZmZjYW52YXMtYmFye3JpZ2h0Oi0zNTBweH19LnVrLW9wZW4+LnVrLW9mZmNhbnZhcy1iYXJ7bGVmdDowfS51ay1vZmZjYW52YXMtZmxpcCAudWstb3Blbj4udWstb2ZmY2FudmFzLWJhcntsZWZ0OmF1dG87cmlnaHQ6MH0udWstb2ZmY2FudmFzLWJhci1hbmltYXRpb257dHJhbnNpdGlvbjpsZWZ0IC4zcyBlYXNlLW91dH0udWstb2ZmY2FudmFzLWZsaXAgLnVrLW9mZmNhbnZhcy1iYXItYW5pbWF0aW9ue3RyYW5zaXRpb24tcHJvcGVydHk6cmlnaHR9LnVrLW9mZmNhbnZhcy1yZXZlYWx7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjA7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zaXRpb246d2lkdGggLjNzIGVhc2Utb3V0fS51ay1vZmZjYW52YXMtcmV2ZWFsIC51ay1vZmZjYW52YXMtYmFye2xlZnQ6MH0udWstb2ZmY2FudmFzLWZsaXAgLnVrLW9mZmNhbnZhcy1yZXZlYWwgLnVrLW9mZmNhbnZhcy1iYXJ7bGVmdDphdXRvO3JpZ2h0OjB9LnVrLW9wZW4+LnVrLW9mZmNhbnZhcy1yZXZlYWx7d2lkdGg6MjcwcHh9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1vcGVuPi51ay1vZmZjYW52YXMtcmV2ZWFse3dpZHRoOjM1MHB4fX0udWstb2ZmY2FudmFzLWZsaXAgLnVrLW9mZmNhbnZhcy1yZXZlYWx7cmlnaHQ6MDtsZWZ0OmF1dG99LnVrLW9mZmNhbnZhcy1jbG9zZXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7dG9wOjVweDtyaWdodDo1cHg7cGFkZGluZzo1cHh9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1vZmZjYW52YXMtY2xvc2V7dG9wOjEwcHg7cmlnaHQ6MTBweH19LnVrLW9mZmNhbnZhcy1jbG9zZTpmaXJzdC1jaGlsZCsqe21hcmdpbi10b3A6MH0udWstb2ZmY2FudmFzLW92ZXJsYXl7d2lkdGg6MTAwdnc7dG91Y2gtYWN0aW9uOm5vbmV9LnVrLW9mZmNhbnZhcy1vdmVybGF5OjpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEpO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyBsaW5lYXJ9LnVrLW9mZmNhbnZhcy1vdmVybGF5LnVrLW9wZW46OmJlZm9yZXtvcGFjaXR5OjF9LnVrLW9mZmNhbnZhcy1jb250YWluZXIsLnVrLW9mZmNhbnZhcy1wYWdle292ZXJmbG93LXg6aGlkZGVufS51ay1vZmZjYW52YXMtY29udGFpbmVye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MDt0cmFuc2l0aW9uOmxlZnQgLjNzIGVhc2Utb3V0O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxMDAlfTpub3QoLnVrLW9mZmNhbnZhcy1mbGlwKS51ay1vZmZjYW52YXMtY29udGFpbmVyLWFuaW1hdGlvbntsZWZ0OjI3MHB4fS51ay1vZmZjYW52YXMtZmxpcC51ay1vZmZjYW52YXMtY29udGFpbmVyLWFuaW1hdGlvbntsZWZ0Oi0yNzBweH1AbWVkaWEgKG1pbi13aWR0aDo2NDBweCl7Om5vdCgudWstb2ZmY2FudmFzLWZsaXApLnVrLW9mZmNhbnZhcy1jb250YWluZXItYW5pbWF0aW9ue2xlZnQ6MzUwcHh9LnVrLW9mZmNhbnZhcy1mbGlwLnVrLW9mZmNhbnZhcy1jb250YWluZXItYW5pbWF0aW9ue2xlZnQ6LTM1MHB4fX0udWstc3dpdGNoZXJ7bWFyZ2luOjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZX0udWstc3dpdGNoZXI+Om5vdCgudWstYWN0aXZlKXtkaXNwbGF5Om5vbmV9LnVrLXN3aXRjaGVyPio+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1sZWFkZXJ7b3ZlcmZsb3c6aGlkZGVufS51ay1sZWFkZXItZmlsbDo6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLWxlZnQ6MTVweDt3aWR0aDowO2NvbnRlbnQ6YXR0cihkYXRhLWZpbGwpO3doaXRlLXNwYWNlOm5vd3JhcH0udWstbGVhZGVyLWZpbGwudWstbGVhZGVyLWhpZGU6OmFmdGVye2Rpc3BsYXk6bm9uZX06cm9vdHstLXVrLWxlYWRlci1maWxsLWNvbnRlbnQ6Ln0udWstbm90aWZpY2F0aW9ue3Bvc2l0aW9uOmZpeGVkO3RvcDoxMHB4O2xlZnQ6MTBweDt6LWluZGV4OjEwNDA7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjM1MHB4fS51ay1ub3RpZmljYXRpb24tYm90dG9tLXJpZ2h0LC51ay1ub3RpZmljYXRpb24tdG9wLXJpZ2h0e2xlZnQ6YXV0bztyaWdodDoxMHB4fS51ay1ub3RpZmljYXRpb24tYm90dG9tLWNlbnRlciwudWstbm90aWZpY2F0aW9uLXRvcC1jZW50ZXJ7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTE3NXB4fS51ay1ub3RpZmljYXRpb24tYm90dG9tLWNlbnRlciwudWstbm90aWZpY2F0aW9uLWJvdHRvbS1sZWZ0LC51ay1ub3RpZmljYXRpb24tYm90dG9tLXJpZ2h0e3RvcDphdXRvO2JvdHRvbToxMHB4fUBtZWRpYSAobWF4LXdpZHRoOjYzOXB4KXsudWstbm90aWZpY2F0aW9ue2xlZnQ6MTBweDtyaWdodDoxMHB4O3dpZHRoOmF1dG87bWFyZ2luOjB9fS51ay1ub3RpZmljYXRpb24tbWVzc2FnZXtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjE1cHg7YmFja2dyb3VuZDojZjhmOGY4O2NvbG9yOiM2NjY7Zm9udC1zaXplOjEuMjVyZW07bGluZS1oZWlnaHQ6MS40O2N1cnNvcjpwb2ludGVyfSorLnVrLW5vdGlmaWNhdGlvbi1tZXNzYWdle21hcmdpbi10b3A6MTBweH0udWstbm90aWZpY2F0aW9uLWNsb3Nle2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MjBweDtyaWdodDoxNXB4fS51ay1ub3RpZmljYXRpb24tbWVzc2FnZTpob3ZlciAudWstbm90aWZpY2F0aW9uLWNsb3Nle2Rpc3BsYXk6YmxvY2t9LnVrLW5vdGlmaWNhdGlvbi1tZXNzYWdlLXByaW1hcnl7Y29sb3I6IzFlODdmMH0udWstbm90aWZpY2F0aW9uLW1lc3NhZ2Utc3VjY2Vzc3tjb2xvcjojMzJkMjk2fS51ay1ub3RpZmljYXRpb24tbWVzc2FnZS13YXJuaW5ne2NvbG9yOiNmYWEwNWF9LnVrLW5vdGlmaWNhdGlvbi1tZXNzYWdlLWRhbmdlcntjb2xvcjojZjA1MDZlfS51ay10b29sdGlwe2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMzA7LS11ay1wb3NpdGlvbi1vZmZzZXQ6MTBweDstLXVrLXBvc2l0aW9uLXZpZXdwb3J0LW9mZnNldDoxMDt0b3A6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWF4LXdpZHRoOjIwMHB4O3BhZGRpbmc6M3B4IDZweDtiYWNrZ3JvdW5kOiM2NjY7Ym9yZGVyLXJhZGl1czoycHg7Y29sb3I6I2ZmZjtmb250LXNpemU6MTJweH0udWstdG9vbHRpcC51ay1hY3RpdmV7ZGlzcGxheTpibG9ja30udWstc29ydGFibGV7cG9zaXRpb246cmVsYXRpdmV9LnVrLXNvcnRhYmxlPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0udWstc29ydGFibGUtZHJhZ3twb3NpdGlvbjpmaXhlZCFpbXBvcnRhbnQ7ei1pbmRleDoxMDUwIWltcG9ydGFudDtwb2ludGVyLWV2ZW50czpub25lfS51ay1zb3J0YWJsZS1wbGFjZWhvbGRlcntvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZX0udWstc29ydGFibGUtZW1wdHl7bWluLWhlaWdodDo1MHB4fS51ay1zb3J0YWJsZS1oYW5kbGU6aG92ZXJ7Y3Vyc29yOm1vdmV9LnVrLWNvdW50ZG93bi1udW1iZXJ7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zO2ZvbnQtc2l6ZToycmVtO2xpbmUtaGVpZ2h0Oi44fUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstY291bnRkb3duLW51bWJlcntmb250LXNpemU6NHJlbX19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1jb3VudGRvd24tbnVtYmVye2ZvbnQtc2l6ZTo2cmVtfX0udWstY291bnRkb3duLXNlcGFyYXRvcntmb250LXNpemU6MXJlbTtsaW5lLWhlaWdodDoxLjZ9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1jb3VudGRvd24tc2VwYXJhdG9ye2ZvbnQtc2l6ZToycmVtfX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWNvdW50ZG93bi1zZXBhcmF0b3J7Zm9udC1zaXplOjNyZW19fS51ay1ncmlke2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS51ay1ncmlkPip7bWFyZ2luOjB9LnVrLWdyaWQ+Kj46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLWdyaWR7bWFyZ2luLWxlZnQ6LTMwcHh9LnVrLWdyaWQ+KntwYWRkaW5nLWxlZnQ6MzBweH0qKy51ay1ncmlkLW1hcmdpbiwudWstZ3JpZCsudWstZ3JpZCwudWstZ3JpZD4udWstZ3JpZC1tYXJnaW57bWFyZ2luLXRvcDozMHB4fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LnVrLWdyaWR7bWFyZ2luLWxlZnQ6LTQwcHh9LnVrLWdyaWQ+KntwYWRkaW5nLWxlZnQ6NDBweH0qKy51ay1ncmlkLW1hcmdpbiwudWstZ3JpZCsudWstZ3JpZCwudWstZ3JpZD4udWstZ3JpZC1tYXJnaW57bWFyZ2luLXRvcDo0MHB4fX0udWstZ3JpZC1jb2x1bW4tc21hbGwsLnVrLWdyaWQtc21hbGx7bWFyZ2luLWxlZnQ6LTE1cHh9LnVrLWdyaWQtY29sdW1uLXNtYWxsPiosLnVrLWdyaWQtc21hbGw+KntwYWRkaW5nLWxlZnQ6MTVweH0qKy51ay1ncmlkLW1hcmdpbi1zbWFsbCwudWstZ3JpZCsudWstZ3JpZC1yb3ctc21hbGwsLnVrLWdyaWQrLnVrLWdyaWQtc21hbGwsLnVrLWdyaWQtcm93LXNtYWxsPi51ay1ncmlkLW1hcmdpbiwudWstZ3JpZC1zbWFsbD4udWstZ3JpZC1tYXJnaW57bWFyZ2luLXRvcDoxNXB4fS51ay1ncmlkLWNvbHVtbi1tZWRpdW0sLnVrLWdyaWQtbWVkaXVte21hcmdpbi1sZWZ0Oi0zMHB4fS51ay1ncmlkLWNvbHVtbi1tZWRpdW0+KiwudWstZ3JpZC1tZWRpdW0+KntwYWRkaW5nLWxlZnQ6MzBweH0qKy51ay1ncmlkLW1hcmdpbi1tZWRpdW0sLnVrLWdyaWQrLnVrLWdyaWQtbWVkaXVtLC51ay1ncmlkKy51ay1ncmlkLXJvdy1tZWRpdW0sLnVrLWdyaWQtbWVkaXVtPi51ay1ncmlkLW1hcmdpbiwudWstZ3JpZC1yb3ctbWVkaXVtPi51ay1ncmlkLW1hcmdpbnttYXJnaW4tdG9wOjMwcHh9LnVrLWdyaWQtY29sdW1uLWxhcmdlLC51ay1ncmlkLWxhcmdle21hcmdpbi1sZWZ0Oi00MHB4fS51ay1ncmlkLWNvbHVtbi1sYXJnZT4qLC51ay1ncmlkLWxhcmdlPip7cGFkZGluZy1sZWZ0OjQwcHh9KisudWstZ3JpZC1tYXJnaW4tbGFyZ2UsLnVrLWdyaWQrLnVrLWdyaWQtbGFyZ2UsLnVrLWdyaWQrLnVrLWdyaWQtcm93LWxhcmdlLC51ay1ncmlkLWxhcmdlPi51ay1ncmlkLW1hcmdpbiwudWstZ3JpZC1yb3ctbGFyZ2U+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6NDBweH1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1ncmlkLWNvbHVtbi1sYXJnZSwudWstZ3JpZC1sYXJnZXttYXJnaW4tbGVmdDotNzBweH0udWstZ3JpZC1jb2x1bW4tbGFyZ2U+KiwudWstZ3JpZC1sYXJnZT4qe3BhZGRpbmctbGVmdDo3MHB4fSorLnVrLWdyaWQtbWFyZ2luLWxhcmdlLC51ay1ncmlkKy51ay1ncmlkLWxhcmdlLC51ay1ncmlkKy51ay1ncmlkLXJvdy1sYXJnZSwudWstZ3JpZC1sYXJnZT4udWstZ3JpZC1tYXJnaW4sLnVrLWdyaWQtcm93LWxhcmdlPi51ay1ncmlkLW1hcmdpbnttYXJnaW4tdG9wOjcwcHh9fS51ay1ncmlkLWNvbGxhcHNlLC51ay1ncmlkLWNvbHVtbi1jb2xsYXBzZXttYXJnaW4tbGVmdDowfS51ay1ncmlkLWNvbGxhcHNlPiosLnVrLWdyaWQtY29sdW1uLWNvbGxhcHNlPip7cGFkZGluZy1sZWZ0OjB9LnVrLWdyaWQrLnVrLWdyaWQtY29sbGFwc2UsLnVrLWdyaWQrLnVrLWdyaWQtcm93LWNvbGxhcHNlLC51ay1ncmlkLWNvbGxhcHNlPi51ay1ncmlkLW1hcmdpbiwudWstZ3JpZC1yb3ctY29sbGFwc2U+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6MH0udWstZ3JpZC1kaXZpZGVyPip7cG9zaXRpb246cmVsYXRpdmV9LnVrLWdyaWQtZGl2aWRlcj46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtib3JkZXItbGVmdDoxcHggc29saWQgI2U1ZTVlNX0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7cmlnaHQ6MDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTVlNWU1fS51ay1ncmlkLWRpdmlkZXJ7bWFyZ2luLWxlZnQ6LTYwcHh9LnVrLWdyaWQtZGl2aWRlcj4qe3BhZGRpbmctbGVmdDo2MHB4fS51ay1ncmlkLWRpdmlkZXI+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3Jle2xlZnQ6MzBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6NjBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmV7dG9wOi0zMHB4O2xlZnQ6NjBweH1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1ncmlkLWRpdmlkZXJ7bWFyZ2luLWxlZnQ6LTgwcHh9LnVrLWdyaWQtZGl2aWRlcj4qe3BhZGRpbmctbGVmdDo4MHB4fS51ay1ncmlkLWRpdmlkZXI+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3Jle2xlZnQ6NDBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6ODBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmV7dG9wOi00MHB4O2xlZnQ6ODBweH19LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1zbWFsbCwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc21hbGx7bWFyZ2luLWxlZnQ6LTMwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1zbWFsbD4qLC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zbWFsbD4qe3BhZGRpbmctbGVmdDozMHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tc21hbGw+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zbWFsbD46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmV7bGVmdDoxNXB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1yb3ctc21hbGwudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW4sLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXNtYWxsLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6MzBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc21hbGwudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZXt0b3A6LTE1cHg7bGVmdDozMHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1yb3ctc21hbGwudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZXt0b3A6LTE1cHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1zbWFsbC51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3Jle2xlZnQ6MzBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLW1lZGl1bSwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbWVkaXVte21hcmdpbi1sZWZ0Oi02MHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tbWVkaXVtPiosLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLW1lZGl1bT4qe3BhZGRpbmctbGVmdDo2MHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tbWVkaXVtPjpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbWVkaXVtPjpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZXtsZWZ0OjMwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLW1lZGl1bS51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbiwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtcm93LW1lZGl1bS51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbnttYXJnaW4tdG9wOjYwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLW1lZGl1bS51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3Jle3RvcDotMzBweDtsZWZ0OjYwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXJvdy1tZWRpdW0udWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZXt0b3A6LTMwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1tZWRpdW0udWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZXtsZWZ0OjYwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1sYXJnZSwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbGFyZ2V7bWFyZ2luLWxlZnQ6LTgwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1sYXJnZT4qLC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZT4qe3BhZGRpbmctbGVmdDo4MHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tbGFyZ2U+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZT46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmV7bGVmdDo0MHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZS51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbiwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtcm93LWxhcmdlLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6ODBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtbGFyZ2UudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZXt0b3A6LTQwcHg7bGVmdDo4MHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1yb3ctbGFyZ2UudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZXt0b3A6LTQwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWNvbHVtbi1sYXJnZS51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3Jle2xlZnQ6ODBweH1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tbGFyZ2UsLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWxhcmdle21hcmdpbi1sZWZ0Oi0xNDBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLWxhcmdlPiosLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWxhcmdlPip7cGFkZGluZy1sZWZ0OjE0MHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1jb2x1bW4tbGFyZ2U+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZT46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmV7bGVmdDo3MHB4fS51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1sYXJnZS51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbiwudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtcm93LWxhcmdlLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2lue21hcmdpbi10b3A6MTQwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLWxhcmdlLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmV7dG9wOi03MHB4O2xlZnQ6MTQwcHh9LnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXJvdy1sYXJnZS51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3Jle3RvcDotNzBweH0udWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtY29sdW1uLWxhcmdlLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmV7bGVmdDoxNDBweH19LnVrLWdyaWQtaXRlbS1tYXRjaCwudWstZ3JpZC1tYXRjaD4qe2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcH0udWstZ3JpZC1pdGVtLW1hdGNoPjpub3QoW2NsYXNzKj11ay13aWR0aF0pLC51ay1ncmlkLW1hdGNoPio+Om5vdChbY2xhc3MqPXVrLXdpZHRoXSl7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7ZmxleDphdXRvfS51ay1uYXYsLnVrLW5hdiB1bHttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS51ay1uYXYgbGk+YXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2NvbHVtbi1nYXA6LjI1ZW07dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVrLW5hdj5saT5he3BhZGRpbmc6NXB4IDB9dWwudWstbmF2LXN1YntwYWRkaW5nOjVweCAwIDVweCAxNXB4fS51ay1uYXYtc3ViIHVse3BhZGRpbmctbGVmdDoxNXB4fS51ay1uYXYtc3ViIGF7cGFkZGluZzoycHggMH0udWstbmF2LXBhcmVudC1pY29ue21hcmdpbi1sZWZ0OmF1dG99LnVrLW5hdj5saT5hW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0gLnVrLW5hdi1wYXJlbnQtaWNvbnt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9LnVrLW5hdi1oZWFkZXJ7cGFkZGluZzo1cHggMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Zm9udC1zaXplOi44NzVyZW19LnVrLW5hdi1oZWFkZXI6bm90KDpmaXJzdC1jaGlsZCl7bWFyZ2luLXRvcDoyMHB4fS51ay1uYXYgLnVrLW5hdi1kaXZpZGVye21hcmdpbjo1cHggMH0udWstbmF2LWRlZmF1bHR7Zm9udC1zaXplOi44NzVyZW07bGluZS1oZWlnaHQ6MS41fS51ay1uYXYtZGVmYXVsdD5saT5he2NvbG9yOiM5OTl9LnVrLW5hdi1kZWZhdWx0PmxpPmE6aG92ZXJ7Y29sb3I6IzY2Nn0udWstbmF2LWRlZmF1bHQ+bGkudWstYWN0aXZlPmF7Y29sb3I6IzMzM30udWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWJ0aXRsZXtmb250LXNpemU6MTJweH0udWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXJ7Y29sb3I6IzMzM30udWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVye2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTV9LnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3Vie2ZvbnQtc2l6ZTouODc1cmVtO2xpbmUtaGVpZ2h0OjEuNX0udWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYXtjb2xvcjojOTk5fS51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVye2NvbG9yOiM2NjZ9LnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5he2NvbG9yOiMzMzN9LnVrLW5hdi1wcmltYXJ5e2ZvbnQtc2l6ZToxLjVyZW07bGluZS1oZWlnaHQ6MS41fS51ay1uYXYtcHJpbWFyeT5saT5he2NvbG9yOiM5OTl9LnVrLW5hdi1wcmltYXJ5PmxpPmE6aG92ZXJ7Y29sb3I6IzY2Nn0udWstbmF2LXByaW1hcnk+bGkudWstYWN0aXZlPmF7Y29sb3I6IzMzM30udWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWJ0aXRsZXtmb250LXNpemU6MS4yNXJlbX0udWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXJ7Y29sb3I6IzMzM30udWstbmF2LXByaW1hcnkgLnVrLW5hdi1kaXZpZGVye2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTV9LnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3Vie2ZvbnQtc2l6ZToxLjI1cmVtO2xpbmUtaGVpZ2h0OjEuNX0udWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYXtjb2xvcjojOTk5fS51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVye2NvbG9yOiM2NjZ9LnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5he2NvbG9yOiMzMzN9LnVrLW5hdi1zZWNvbmRhcnl7Zm9udC1zaXplOjE2cHg7bGluZS1oZWlnaHQ6MS41fS51ay1uYXYtc2Vjb25kYXJ5Pjpub3QoLnVrLW5hdi1kaXZpZGVyKSs6bm90KC51ay1uYXYtaGVhZGVyLC51ay1uYXYtZGl2aWRlcil7bWFyZ2luLXRvcDowfS51ay1uYXYtc2Vjb25kYXJ5PmxpPmF7Y29sb3I6IzMzMztwYWRkaW5nOjEwcHggMTBweH0udWstbmF2LXNlY29uZGFyeT5saT5hOmhvdmVye2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZjhmOGY4fS51ay1uYXYtc2Vjb25kYXJ5PmxpLnVrLWFjdGl2ZT5he2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZjhmOGY4fS51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3VidGl0bGV7Zm9udC1zaXplOi44NzVyZW07Y29sb3I6Izk5OX0udWstbmF2LXNlY29uZGFyeT5saT5hOmhvdmVyIC51ay1uYXYtc3VidGl0bGV7Y29sb3I6IzY2Nn0udWstbmF2LXNlY29uZGFyeT5saS51ay1hY3RpdmU+YSAudWstbmF2LXN1YnRpdGxle2NvbG9yOiMzMzN9LnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1oZWFkZXJ7Y29sb3I6IzMzM30udWstbmF2LXNlY29uZGFyeSAudWstbmF2LWRpdmlkZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNX0udWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1Yntmb250LXNpemU6Ljg3NXJlbTtsaW5lLWhlaWdodDoxLjV9LnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYXtjb2xvcjojOTk5fS51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXJ7Y29sb3I6IzY2Nn0udWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YXtjb2xvcjojMzMzfS51ay1uYXYtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS51ay1uYXYtY2VudGVyIGxpPmF7anVzdGlmeS1jb250ZW50OmNlbnRlcn0udWstbmF2LWNlbnRlciAudWstbmF2LXN1YiwudWstbmF2LWNlbnRlciAudWstbmF2LXN1YiB1bHtwYWRkaW5nLWxlZnQ6MH0udWstbmF2LWNlbnRlciAudWstbmF2LXBhcmVudC1pY29ue21hcmdpbi1sZWZ0OjRweH0udWstbmF2LnVrLW5hdi1kaXZpZGVyPjpub3QoLnVrLW5hdi1kaXZpZGVyKSs6bm90KC51ay1uYXYtaGVhZGVyLC51ay1uYXYtZGl2aWRlcil7bWFyZ2luLXRvcDo1cHg7cGFkZGluZy10b3A6NXB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTV9LnVrLW5hdmJhcntkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmV9LnVrLW5hdmJhci1jb250YWluZXI6bm90KC51ay1uYXZiYXItdHJhbnNwYXJlbnQpe2JhY2tncm91bmQ6I2Y4ZjhmOH0udWstbmF2YmFyLWxlZnQsLnVrLW5hdmJhci1yaWdodCxbY2xhc3MqPXVrLW5hdmJhci1jZW50ZXJde2Rpc3BsYXk6ZmxleDtnYXA6MzBweDthbGlnbi1pdGVtczpjZW50ZXJ9LnVrLW5hdmJhci1yaWdodHttYXJnaW4tbGVmdDphdXRvfS51ay1uYXZiYXItY2VudGVyOm9ubHktY2hpbGR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6YXV0bztwb3NpdGlvbjpyZWxhdGl2ZX0udWstbmF2YmFyLWNlbnRlcjpub3QoOm9ubHktY2hpbGQpe3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3dpZHRoOm1heC1jb250ZW50O2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4Ojk5MH0udWstbmF2YmFyLWNlbnRlci1sZWZ0LC51ay1uYXZiYXItY2VudGVyLXJpZ2h0e3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS51ay1uYXZiYXItY2VudGVyLWxlZnR7cmlnaHQ6Y2FsYygxMDAlICsgMzBweCl9LnVrLW5hdmJhci1jZW50ZXItcmlnaHR7bGVmdDpjYWxjKDEwMCUgKyAzMHB4KX1bY2xhc3MqPXVrLW5hdmJhci1jZW50ZXItXXt3aWR0aDptYXgtY29udGVudDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LnVrLW5hdmJhci1uYXZ7ZGlzcGxheTpmbGV4O2dhcDozMHB4O21hcmdpbjowO3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5vbmV9LnVrLW5hdmJhci1jZW50ZXI6b25seS1jaGlsZCwudWstbmF2YmFyLWxlZnQsLnVrLW5hdmJhci1yaWdodHtmbGV4LXdyYXA6d3JhcH0udWstbmF2YmFyLWl0ZW0sLnVrLW5hdmJhci1uYXY+bGk+YSwudWstbmF2YmFyLXRvZ2dsZXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sdW1uLWdhcDouMjVlbTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLWhlaWdodDo4MHB4O2ZvbnQtc2l6ZTouODc1cmVtO2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCJTZWdvZSBVSSIsUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsQXJpYWwsIk5vdG8gU2FucyIsc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiO3RleHQtZGVjb3JhdGlvbjpub25lfS51ay1uYXZiYXItbmF2PmxpPmF7cGFkZGluZzowIDA7Y29sb3I6Izk5OTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7dHJhbnNpdGlvbjouMXMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS51ay1uYXZiYXItbmF2PmxpOmhvdmVyPmEsLnVrLW5hdmJhci1uYXY+bGk+YVthcmlhLWV4cGFuZGVkPXRydWVde2NvbG9yOiM2NjZ9LnVrLW5hdmJhci1uYXY+bGk+YTphY3RpdmV7Y29sb3I6IzMzM30udWstbmF2YmFyLW5hdj5saS51ay1hY3RpdmU+YXtjb2xvcjojMzMzfS51ay1uYXZiYXItcGFyZW50LWljb257bWFyZ2luLWxlZnQ6NHB4fS51ay1uYXZiYXItbmF2PmxpPmFbYXJpYS1leHBhbmRlZD10cnVlXSAudWstbmF2YmFyLXBhcmVudC1pY29ue3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0udWstbmF2YmFyLWl0ZW17cGFkZGluZzowIDA7Y29sb3I6IzY2Nn0udWstbmF2YmFyLWl0ZW0+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1uYXZiYXItdG9nZ2xle3BhZGRpbmc6MCAwO2NvbG9yOiM5OTl9LnVrLW5hdmJhci10b2dnbGU6aG92ZXIsLnVrLW5hdmJhci10b2dnbGVbYXJpYS1leHBhbmRlZD10cnVlXXtjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lfS51ay1uYXZiYXItc3VidGl0bGV7Zm9udC1zaXplOi44NzVyZW19LnVrLW5hdmJhci1qdXN0aWZ5IC51ay1uYXZiYXItaXRlbSwudWstbmF2YmFyLWp1c3RpZnkgLnVrLW5hdmJhci1sZWZ0LC51ay1uYXZiYXItanVzdGlmeSAudWstbmF2YmFyLW5hdiwudWstbmF2YmFyLWp1c3RpZnkgLnVrLW5hdmJhci1uYXY+bGksLnVrLW5hdmJhci1qdXN0aWZ5IC51ay1uYXZiYXItcmlnaHQsLnVrLW5hdmJhci1qdXN0aWZ5IC51ay1uYXZiYXItdG9nZ2xle2ZsZXgtZ3JvdzoxfS51ay1uYXZiYXItZHJvcGRvd257ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAyMDstLXVrLXBvc2l0aW9uLW9mZnNldDoxNXB4Oy0tdWstcG9zaXRpb24tc2hpZnQtb2Zmc2V0OjA7LS11ay1wb3NpdGlvbi12aWV3cG9ydC1vZmZzZXQ6MTVweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MjAwcHg7cGFkZGluZzoyNXB4O2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojNjY2O2JveC1zaGFkb3c6MCA1cHggMTJweCByZ2JhKDAsMCwwLC4xNSl9LnVrLW5hdmJhci1kcm9wZG93bi51ay1vcGVue2Rpc3BsYXk6YmxvY2t9LnVrLW5hdmJhci1kcm9wZG93bj46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLW5hdmJhci1kcm9wZG93bi1ncmlke21hcmdpbi1sZWZ0Oi0zMHB4fS51ay1uYXZiYXItZHJvcGRvd24tZ3JpZD4qe3BhZGRpbmctbGVmdDozMHB4fS51ay1uYXZiYXItZHJvcGRvd24tZ3JpZD4udWstZ3JpZC1tYXJnaW57bWFyZ2luLXRvcDozMHB4fS51ay1uYXZiYXItZHJvcGRvd24tc3RhY2sgLnVrLW5hdmJhci1kcm9wZG93bi1ncmlkPip7d2lkdGg6MTAwJSFpbXBvcnRhbnR9LnVrLW5hdmJhci1kcm9wZG93bi13aWR0aC0yOm5vdCgudWstbmF2YmFyLWRyb3Bkb3duLXN0YWNrKXt3aWR0aDo0MDBweH0udWstbmF2YmFyLWRyb3Bkb3duLXdpZHRoLTM6bm90KC51ay1uYXZiYXItZHJvcGRvd24tc3RhY2spe3dpZHRoOjYwMHB4fS51ay1uYXZiYXItZHJvcGRvd24td2lkdGgtNDpub3QoLnVrLW5hdmJhci1kcm9wZG93bi1zdGFjayl7d2lkdGg6ODAwcHh9LnVrLW5hdmJhci1kcm9wZG93bi13aWR0aC01Om5vdCgudWstbmF2YmFyLWRyb3Bkb3duLXN0YWNrKXt3aWR0aDoxMDAwcHh9LnVrLW5hdmJhci1kcm9wZG93bi1sYXJnZXstLXVrLXBvc2l0aW9uLXNoaWZ0LW9mZnNldDowO3BhZGRpbmc6NDBweH0udWstbmF2YmFyLWRyb3Bkb3duLWRyb3BiYXJ7d2lkdGg6YXV0bztiYWNrZ3JvdW5kOjAgMDtwYWRkaW5nOjI1cHggMCAyNXB4IDA7LS11ay1wb3NpdGlvbi1vZmZzZXQ6MDstLXVrLXBvc2l0aW9uLXNoaWZ0LW9mZnNldDowOy0tdWstcG9zaXRpb24tdmlld3BvcnQtb2Zmc2V0OjE1cHg7Ym94LXNoYWRvdzpub25lfUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstbmF2YmFyLWRyb3Bkb3duLWRyb3BiYXJ7LS11ay1wb3NpdGlvbi12aWV3cG9ydC1vZmZzZXQ6MzBweH19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1uYXZiYXItZHJvcGRvd24tZHJvcGJhcnstLXVrLXBvc2l0aW9uLXZpZXdwb3J0LW9mZnNldDo0MHB4fX0udWstbmF2YmFyLWRyb3Bkb3duLWRyb3BiYXItbGFyZ2V7LS11ay1wb3NpdGlvbi1zaGlmdC1vZmZzZXQ6MDtwYWRkaW5nLXRvcDo0MHB4O3BhZGRpbmctYm90dG9tOjQwcHh9LnVrLW5hdmJhci1kcm9wZG93bi1uYXZ7Zm9udC1zaXplOi44NzVyZW19LnVrLW5hdmJhci1kcm9wZG93bi1uYXY+bGk+YXtjb2xvcjojOTk5fS51ay1uYXZiYXItZHJvcGRvd24tbmF2PmxpPmE6aG92ZXJ7Y29sb3I6IzY2Nn0udWstbmF2YmFyLWRyb3Bkb3duLW5hdj5saS51ay1hY3RpdmU+YXtjb2xvcjojMzMzfS51ay1uYXZiYXItZHJvcGRvd24tbmF2IC51ay1uYXYtc3VidGl0bGV7Zm9udC1zaXplOjEycHh9LnVrLW5hdmJhci1kcm9wZG93bi1uYXYgLnVrLW5hdi1oZWFkZXJ7Y29sb3I6IzMzM30udWstbmF2YmFyLWRyb3Bkb3duLW5hdiAudWstbmF2LWRpdmlkZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNX0udWstbmF2YmFyLWRyb3Bkb3duLW5hdiAudWstbmF2LXN1YiBhe2NvbG9yOiM5OTl9LnVrLW5hdmJhci1kcm9wZG93bi1uYXYgLnVrLW5hdi1zdWIgYTpob3Zlcntjb2xvcjojNjY2fS51ay1uYXZiYXItZHJvcGRvd24tbmF2IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5he2NvbG9yOiMzMzN9LnVrLW5hdmJhci1kcm9wYmFye2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50O3otaW5kZXg6OTgwO3BhZGRpbmc6MDtsZWZ0OjA7cmlnaHQ6MH0udWstc3VibmF2e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWxlZnQ6LTIwcHg7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZX0udWstc3VibmF2Pip7ZmxleDpub25lO3BhZGRpbmctbGVmdDoyMHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS51ay1zdWJuYXY+Kj46Zmlyc3QtY2hpbGR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtjb2x1bW4tZ2FwOi4yNWVtO2NvbG9yOiM5OTk7Zm9udC1zaXplOi44NzVyZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO3RyYW5zaXRpb246LjFzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcn0udWstc3VibmF2Pio+YTpob3Zlcntjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lfS51ay1zdWJuYXY+LnVrLWFjdGl2ZT5he2NvbG9yOiMzMzN9LnVrLXN1Ym5hdi1kaXZpZGVye21hcmdpbi1sZWZ0Oi00MXB4fS51ay1zdWJuYXYtZGl2aWRlcj4qe2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LnVrLXN1Ym5hdi1kaXZpZGVyPjo6YmVmb3Jle2NvbnRlbnQ6IiI7aGVpZ2h0OjEuNWVtO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjIwcHg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIHRyYW5zcGFyZW50fS51ay1zdWJuYXYtZGl2aWRlcj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmV7Ym9yZGVyLWxlZnQtY29sb3I6I2U1ZTVlNX0udWstc3VibmF2LXBpbGw+Kj46Zmlyc3QtY2hpbGR7cGFkZGluZzo1cHggMTBweDtiYWNrZ3JvdW5kOjAgMDtjb2xvcjojOTk5fS51ay1zdWJuYXYtcGlsbD4qPmE6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjhmOGY4O2NvbG9yOiM2NjZ9LnVrLXN1Ym5hdi1waWxsPio+YTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojZjhmOGY4O2NvbG9yOiM2NjZ9LnVrLXN1Ym5hdi1waWxsPi51ay1hY3RpdmU+YXtiYWNrZ3JvdW5kLWNvbG9yOiMxZTg3ZjA7Y29sb3I6I2ZmZn0udWstc3VibmF2Pi51ay1kaXNhYmxlZD5he2NvbG9yOiM5OTl9LnVrLWJyZWFkY3J1bWJ7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZX0udWstYnJlYWRjcnVtYj4qe2Rpc3BsYXk6Y29udGVudHN9LnVrLWJyZWFkY3J1bWI+Kj4qe2ZvbnQtc2l6ZTouODc1cmVtO2NvbG9yOiM5OTl9LnVrLWJyZWFkY3J1bWI+Kj46aG92ZXJ7Y29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstYnJlYWRjcnVtYj46bGFzdC1jaGlsZD5hOm5vdChbaHJlZl0pLC51ay1icmVhZGNydW1iPjpsYXN0LWNoaWxkPnNwYW57Y29sb3I6IzY2Nn0udWstYnJlYWRjcnVtYj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmV7Y29udGVudDoiLyI7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjAgMjBweCAwIGNhbGMoMjBweCAtIDRweCk7Zm9udC1zaXplOi44NzVyZW07Y29sb3I6Izk5OX0udWstcGFnaW5hdGlvbntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWFyZ2luLWxlZnQ6MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS51ay1wYWdpbmF0aW9uPip7ZmxleDpub25lO3BhZGRpbmctbGVmdDowO3Bvc2l0aW9uOnJlbGF0aXZlfS51ay1wYWdpbmF0aW9uPio+KntkaXNwbGF5OmJsb2NrO3BhZGRpbmc6NXB4IDEwcHg7Y29sb3I6Izk5OTt0cmFuc2l0aW9uOmNvbG9yIC4xcyBlYXNlLWluLW91dH0udWstcGFnaW5hdGlvbj4qPjpob3Zlcntjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lfS51ay1wYWdpbmF0aW9uPi51ay1hY3RpdmU+Kntjb2xvcjojNjY2fS51ay1wYWdpbmF0aW9uPi51ay1kaXNhYmxlZD4qe2NvbG9yOiM5OTl9LnVrLXRhYntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWFyZ2luLWxlZnQ6LTIwcHg7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZX0udWstdGFiOjpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjIwcHg7cmlnaHQ6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU1fS51ay10YWI+KntmbGV4Om5vbmU7cGFkZGluZy1sZWZ0OjIwcHg7cG9zaXRpb246cmVsYXRpdmV9LnVrLXRhYj4qPmF7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtjb2x1bW4tZ2FwOi4yNWVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzo1cHggMTBweDtjb2xvcjojOTk5O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50O2ZvbnQtc2l6ZTouODc1cmVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt0cmFuc2l0aW9uOmNvbG9yIC4xcyBlYXNlLWluLW91dH0udWstdGFiPio+YTpob3Zlcntjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lfS51ay10YWI+LnVrLWFjdGl2ZT5he2NvbG9yOiMzMzM7Ym9yZGVyLWNvbG9yOiMxZTg3ZjB9LnVrLXRhYj4udWstZGlzYWJsZWQ+YXtjb2xvcjojOTk5fS51ay10YWItYm90dG9tOjpiZWZvcmV7dG9wOjA7Ym90dG9tOmF1dG99LnVrLXRhYi1ib3R0b20+Kj5he2JvcmRlci10b3A6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206bm9uZX0udWstdGFiLWxlZnQsLnVrLXRhYi1yaWdodHtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWFyZ2luLWxlZnQ6MH0udWstdGFiLWxlZnQ+KiwudWstdGFiLXJpZ2h0Pip7cGFkZGluZy1sZWZ0OjB9LnVrLXRhYi1sZWZ0OjpiZWZvcmV7dG9wOjA7Ym90dG9tOjA7bGVmdDphdXRvO3JpZ2h0OjA7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlNWU1ZTU7Ym9yZGVyLWJvdHRvbTpub25lfS51ay10YWItcmlnaHQ6OmJlZm9yZXt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6YXV0bztib3JkZXItbGVmdDoxcHggc29saWQgI2U1ZTVlNTtib3JkZXItYm90dG9tOm5vbmV9LnVrLXRhYi1sZWZ0Pio+YXtqdXN0aWZ5LWNvbnRlbnQ6bGVmdDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206bm9uZX0udWstdGFiLXJpZ2h0Pio+YXtqdXN0aWZ5LWNvbnRlbnQ6bGVmdDtib3JkZXItbGVmdDoxcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTpub25lfS51ay10YWIgLnVrLWRyb3Bkb3due21hcmdpbi1sZWZ0OjMwcHh9LnVrLXNsaWRlbmF2e3BhZGRpbmc6NXB4IDEwcHg7Y29sb3I6cmdiYSgxMDIsMTAyLDEwMiwuNSk7dHJhbnNpdGlvbjpjb2xvciAuMXMgZWFzZS1pbi1vdXR9LnVrLXNsaWRlbmF2OmhvdmVye2NvbG9yOnJnYmEoMTAyLDEwMiwxMDIsLjkpfS51ay1zbGlkZW5hdjphY3RpdmV7Y29sb3I6cmdiYSgxMDIsMTAyLDEwMiwuNSl9LnVrLXNsaWRlbmF2LWxhcmdle3BhZGRpbmc6MTBweCAxMHB4fS51ay1zbGlkZW5hdi1jb250YWluZXJ7ZGlzcGxheTpmbGV4fS51ay1kb3RuYXZ7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbjowO3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luLWxlZnQ6LTEycHh9LnVrLWRvdG5hdj4qe2ZsZXg6bm9uZTtwYWRkaW5nLWxlZnQ6MTJweH0udWstZG90bmF2Pio+KntkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxMHB4O2hlaWdodDoxMHB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQ6MCAwO3RleHQtaW5kZW50OjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMTAyLDEwMiwxMDIsLjQpO3RyYW5zaXRpb246LjJzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb24tcHJvcGVydHk6YmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3J9LnVrLWRvdG5hdj4qPjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTAyLDEwMiwxMDIsLjYpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0udWstZG90bmF2Pio+OmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTAyLDEwMiwxMDIsLjIpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0udWstZG90bmF2Pi51ay1hY3RpdmU+KntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTAyLDEwMiwxMDIsLjYpO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0udWstZG90bmF2LXZlcnRpY2Fse2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttYXJnaW4tbGVmdDowO21hcmdpbi10b3A6LTEycHh9LnVrLWRvdG5hdi12ZXJ0aWNhbD4qe3BhZGRpbmctbGVmdDowO3BhZGRpbmctdG9wOjEycHh9LnVrLXRodW1ibmF2e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lO21hcmdpbi1sZWZ0Oi0xNXB4fS51ay10aHVtYm5hdj4qe3BhZGRpbmctbGVmdDoxNXB4fS51ay10aHVtYm5hdj4qPip7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmV9LnVrLXRodW1ibmF2Pio+OjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuNCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4xcyBlYXNlLWluLW91dH0udWstdGh1bWJuYXY+Kj46aG92ZXI6OmFmdGVye2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LnVrLXRodW1ibmF2Pi51ay1hY3RpdmU+OjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS51ay10aHVtYm5hdi12ZXJ0aWNhbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOi0xNXB4fS51ay10aHVtYm5hdi12ZXJ0aWNhbD4qe3BhZGRpbmctbGVmdDowO3BhZGRpbmctdG9wOjE1cHh9LnVrLWljb25uYXZ7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbjowO3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luLWxlZnQ6LTEwcHh9LnVrLWljb25uYXY+KntwYWRkaW5nLWxlZnQ6MTBweH0udWstaWNvbm5hdj4qPmF7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtjb2x1bW4tZ2FwOi4yNWVtO2xpbmUtaGVpZ2h0OjA7Y29sb3I6Izk5OTt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXNpemU6Ljg3NXJlbTt0cmFuc2l0aW9uOi4xcyBlYXNlLWluLW91dDt0cmFuc2l0aW9uLXByb3BlcnR5OmNvbG9yLGJhY2tncm91bmQtY29sb3J9LnVrLWljb25uYXY+Kj5hOmhvdmVye2NvbG9yOiM2NjZ9LnVrLWljb25uYXY+LnVrLWFjdGl2ZT5he2NvbG9yOiM2NjZ9LnVrLWljb25uYXYtdmVydGljYWx7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXRvcDotMTBweH0udWstaWNvbm5hdi12ZXJ0aWNhbD4qe3BhZGRpbmctbGVmdDowO3BhZGRpbmctdG9wOjEwcHh9LnVrLWxpZ2h0Ym94e2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDt6LWluZGV4OjEwMTA7YmFja2dyb3VuZDojMDAwO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyBsaW5lYXI7dG91Y2gtYWN0aW9uOnBpbmNoLXpvb219LnVrLWxpZ2h0Ym94LnVrLW9wZW57ZGlzcGxheTpibG9jaztvcGFjaXR5OjF9LnVrLWxpZ2h0Ym94IDpmb2N1c3tvdXRsaW5lLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1saWdodGJveCA6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1saWdodGJveC1wYWdle292ZXJmbG93OmhpZGRlbn0udWstbGlnaHRib3gtaXRlbXM+Kntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyk7d2lsbC1jaGFuZ2U6dHJhbnNmb3JtLG9wYWNpdHl9LnVrLWxpZ2h0Ym94LWl0ZW1zPio+KnttYXgtd2lkdGg6MTAwdnc7bWF4LWhlaWdodDoxMDB2aH0udWstbGlnaHRib3gtaXRlbXM+Kj46bm90KGlmcmFtZSl7d2lkdGg6YXV0bztoZWlnaHQ6YXV0b30udWstbGlnaHRib3gtaXRlbXM+LnVrLWFjdGl2ZXtkaXNwbGF5OmZsZXh9LnVrLWxpZ2h0Ym94LXRvb2xiYXJ7cGFkZGluZzoxMHB4IDEwcHg7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zKTtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstbGlnaHRib3gtdG9vbGJhcj4qe2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1saWdodGJveC10b29sYmFyLWljb257cGFkZGluZzo1cHg7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWxpZ2h0Ym94LXRvb2xiYXItaWNvbjpob3Zlcntjb2xvcjojZmZmfS51ay1saWdodGJveC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4zKTtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS51ay1saWdodGJveC1idXR0b246aG92ZXJ7Y29sb3I6I2ZmZn0udWstbGlnaHRib3gtY2FwdGlvbjplbXB0eXtkaXNwbGF5Om5vbmV9LnVrLWxpZ2h0Ym94LWlmcmFtZXt3aWR0aDo4MCU7aGVpZ2h0OjgwJX1bY2xhc3MqPXVrLWFuaW1hdGlvbi1de2FuaW1hdGlvbjouNXMgZWFzZS1vdXQgYm90aH0udWstYW5pbWF0aW9uLWZhZGV7YW5pbWF0aW9uLW5hbWU6dWstZmFkZTthbmltYXRpb24tZHVyYXRpb246LjhzO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246bGluZWFyfS51ay1hbmltYXRpb24tc2NhbGUtdXB7YW5pbWF0aW9uLW5hbWU6dWstZmFkZSx1ay1zY2FsZS11cH0udWstYW5pbWF0aW9uLXNjYWxlLWRvd257YW5pbWF0aW9uLW5hbWU6dWstZmFkZSx1ay1zY2FsZS1kb3dufS51ay1hbmltYXRpb24tc2xpZGUtdG9we2FuaW1hdGlvbi1uYW1lOnVrLWZhZGUsdWstc2xpZGUtdG9wfS51ay1hbmltYXRpb24tc2xpZGUtYm90dG9te2FuaW1hdGlvbi1uYW1lOnVrLWZhZGUsdWstc2xpZGUtYm90dG9tfS51ay1hbmltYXRpb24tc2xpZGUtbGVmdHthbmltYXRpb24tbmFtZTp1ay1mYWRlLHVrLXNsaWRlLWxlZnR9LnVrLWFuaW1hdGlvbi1zbGlkZS1yaWdodHthbmltYXRpb24tbmFtZTp1ay1mYWRlLHVrLXNsaWRlLXJpZ2h0fS51ay1hbmltYXRpb24tc2xpZGUtdG9wLXNtYWxse2FuaW1hdGlvbi1uYW1lOnVrLWZhZGUsdWstc2xpZGUtdG9wLXNtYWxsfS51ay1hbmltYXRpb24tc2xpZGUtYm90dG9tLXNtYWxse2FuaW1hdGlvbi1uYW1lOnVrLWZhZGUsdWstc2xpZGUtYm90dG9tLXNtYWxsfS51ay1hbmltYXRpb24tc2xpZGUtbGVmdC1zbWFsbHthbmltYXRpb24tbmFtZTp1ay1mYWRlLHVrLXNsaWRlLWxlZnQtc21hbGx9LnVrLWFuaW1hdGlvbi1zbGlkZS1yaWdodC1zbWFsbHthbmltYXRpb24tbmFtZTp1ay1mYWRlLHVrLXNsaWRlLXJpZ2h0LXNtYWxsfS51ay1hbmltYXRpb24tc2xpZGUtdG9wLW1lZGl1bXthbmltYXRpb24tbmFtZTp1ay1mYWRlLHVrLXNsaWRlLXRvcC1tZWRpdW19LnVrLWFuaW1hdGlvbi1zbGlkZS1ib3R0b20tbWVkaXVte2FuaW1hdGlvbi1uYW1lOnVrLWZhZGUsdWstc2xpZGUtYm90dG9tLW1lZGl1bX0udWstYW5pbWF0aW9uLXNsaWRlLWxlZnQtbWVkaXVte2FuaW1hdGlvbi1uYW1lOnVrLWZhZGUsdWstc2xpZGUtbGVmdC1tZWRpdW19LnVrLWFuaW1hdGlvbi1zbGlkZS1yaWdodC1tZWRpdW17YW5pbWF0aW9uLW5hbWU6dWstZmFkZSx1ay1zbGlkZS1yaWdodC1tZWRpdW19LnVrLWFuaW1hdGlvbi1rZW5idXJuc3thbmltYXRpb24tbmFtZTp1ay1rZW5idXJuczthbmltYXRpb24tZHVyYXRpb246MTVzfS51ay1hbmltYXRpb24tc2hha2V7YW5pbWF0aW9uLW5hbWU6dWstc2hha2V9LnVrLWFuaW1hdGlvbi1zdHJva2V7YW5pbWF0aW9uLW5hbWU6dWstc3Ryb2tlO2FuaW1hdGlvbi1kdXJhdGlvbjoycztzdHJva2UtZGFzaGFycmF5OnZhcigtLXVrLWFuaW1hdGlvbi1zdHJva2UpfS51ay1hbmltYXRpb24tcmV2ZXJzZXthbmltYXRpb24tZGlyZWN0aW9uOnJldmVyc2U7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWlufS51ay1hbmltYXRpb24tZmFzdHthbmltYXRpb24tZHVyYXRpb246LjFzfS51ay1hbmltYXRpb24tdG9nZ2xlOm5vdCg6aG92ZXIpOm5vdCg6Zm9jdXMpIFtjbGFzcyo9dWstYW5pbWF0aW9uLV17YW5pbWF0aW9uLW5hbWU6bm9uZX1Aa2V5ZnJhbWVzIHVrLWZhZGV7MCV7b3BhY2l0eTowfTEwMCV7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIHVrLXNjYWxlLXVwezAle3RyYW5zZm9ybTpzY2FsZSguOSl9MTAwJXt0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgdWstc2NhbGUtZG93bnswJXt0cmFuc2Zvcm06c2NhbGUoMS4xKX0xMDAle3RyYW5zZm9ybTpzY2FsZSgxKX19QGtleWZyYW1lcyB1ay1zbGlkZS10b3B7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEwMCUpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCl9fUBrZXlmcmFtZXMgdWstc2xpZGUtYm90dG9tezAle3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCl9fUBrZXlmcmFtZXMgdWstc2xpZGUtbGVmdHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9MTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX19QGtleWZyYW1lcyB1ay1zbGlkZS1yaWdodHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1Aa2V5ZnJhbWVzIHVrLXNsaWRlLXRvcC1zbWFsbHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTBweCl9MTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKX19QGtleWZyYW1lcyB1ay1zbGlkZS1ib3R0b20tc21hbGx7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTBweCl9MTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKX19QGtleWZyYW1lcyB1ay1zbGlkZS1sZWZ0LXNtYWxsezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMHB4KX0xMDAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1Aa2V5ZnJhbWVzIHVrLXNsaWRlLXJpZ2h0LXNtYWxsezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwcHgpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9fUBrZXlmcmFtZXMgdWstc2xpZGUtdG9wLW1lZGl1bXswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTBweCl9MTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKX19QGtleWZyYW1lcyB1ay1zbGlkZS1ib3R0b20tbWVkaXVtezAle3RyYW5zZm9ybTp0cmFuc2xhdGVZKDUwcHgpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCl9fUBrZXlmcmFtZXMgdWstc2xpZGUtbGVmdC1tZWRpdW17MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwcHgpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9fUBrZXlmcmFtZXMgdWstc2xpZGUtcmlnaHQtbWVkaXVtezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDUwcHgpfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9fUBrZXlmcmFtZXMgdWsta2VuYnVybnN7MCV7dHJhbnNmb3JtOnNjYWxlKDEpfTEwMCV7dHJhbnNmb3JtOnNjYWxlKDEuMil9fUBrZXlmcmFtZXMgdWstc2hha2V7MCUsMTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX0xMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTlweCl9MjAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDhweCl9MzAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC03cHgpfTQwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCg2cHgpfTUwJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNXB4KX02MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoNHB4KX03MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTNweCl9ODAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDJweCl9OTAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xcHgpfX1Aa2V5ZnJhbWVzIHVrLXN0cm9rZXswJXtzdHJva2UtZGFzaG9mZnNldDp2YXIoLS11ay1hbmltYXRpb24tc3Ryb2tlKX0xMDAle3N0cm9rZS1kYXNob2Zmc2V0OjB9fVtjbGFzcyo9dWstY2hpbGQtd2lkdGhdPip7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9LnVrLWNoaWxkLXdpZHRoLTEtMj4qe3dpZHRoOjUwJX0udWstY2hpbGQtd2lkdGgtMS0zPip7d2lkdGg6Y2FsYygxMDAlICogMSAvIDMuMDAxKX0udWstY2hpbGQtd2lkdGgtMS00Pip7d2lkdGg6MjUlfS51ay1jaGlsZC13aWR0aC0xLTU+Knt3aWR0aDoyMCV9LnVrLWNoaWxkLXdpZHRoLTEtNj4qe3dpZHRoOmNhbGMoMTAwJSAqIDEgLyA2LjAwMSl9LnVrLWNoaWxkLXdpZHRoLWF1dG8+Knt3aWR0aDphdXRvfS51ay1jaGlsZC13aWR0aC1leHBhbmQ+Om5vdChbY2xhc3MqPXVrLXdpZHRoXSl7ZmxleDoxO21pbi13aWR0aDoxcHh9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1jaGlsZC13aWR0aC0xLTFcQHM+Knt3aWR0aDoxMDAlfS51ay1jaGlsZC13aWR0aC0xLTJcQHM+Knt3aWR0aDo1MCV9LnVrLWNoaWxkLXdpZHRoLTEtM1xAcz4qe3dpZHRoOmNhbGMoMTAwJSAqIDEgLyAzLjAwMSl9LnVrLWNoaWxkLXdpZHRoLTEtNFxAcz4qe3dpZHRoOjI1JX0udWstY2hpbGQtd2lkdGgtMS01XEBzPip7d2lkdGg6MjAlfS51ay1jaGlsZC13aWR0aC0xLTZcQHM+Knt3aWR0aDpjYWxjKDEwMCUgKiAxIC8gNi4wMDEpfS51ay1jaGlsZC13aWR0aC1hdXRvXEBzPip7d2lkdGg6YXV0b30udWstY2hpbGQtd2lkdGgtZXhwYW5kXEBzPjpub3QoW2NsYXNzKj11ay13aWR0aF0pe2ZsZXg6MTttaW4td2lkdGg6MXB4fX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWNoaWxkLXdpZHRoLTEtMVxAbT4qe3dpZHRoOjEwMCV9LnVrLWNoaWxkLXdpZHRoLTEtMlxAbT4qe3dpZHRoOjUwJX0udWstY2hpbGQtd2lkdGgtMS0zXEBtPip7d2lkdGg6Y2FsYygxMDAlICogMSAvIDMuMDAxKX0udWstY2hpbGQtd2lkdGgtMS00XEBtPip7d2lkdGg6MjUlfS51ay1jaGlsZC13aWR0aC0xLTVcQG0+Knt3aWR0aDoyMCV9LnVrLWNoaWxkLXdpZHRoLTEtNlxAbT4qe3dpZHRoOmNhbGMoMTAwJSAqIDEgLyA2LjAwMSl9LnVrLWNoaWxkLXdpZHRoLWF1dG9cQG0+Knt3aWR0aDphdXRvfS51ay1jaGlsZC13aWR0aC1leHBhbmRcQG0+Om5vdChbY2xhc3MqPXVrLXdpZHRoXSl7ZmxleDoxO21pbi13aWR0aDoxcHh9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LnVrLWNoaWxkLXdpZHRoLTEtMVxAbD4qe3dpZHRoOjEwMCV9LnVrLWNoaWxkLXdpZHRoLTEtMlxAbD4qe3dpZHRoOjUwJX0udWstY2hpbGQtd2lkdGgtMS0zXEBsPip7d2lkdGg6Y2FsYygxMDAlICogMSAvIDMuMDAxKX0udWstY2hpbGQtd2lkdGgtMS00XEBsPip7d2lkdGg6MjUlfS51ay1jaGlsZC13aWR0aC0xLTVcQGw+Knt3aWR0aDoyMCV9LnVrLWNoaWxkLXdpZHRoLTEtNlxAbD4qe3dpZHRoOmNhbGMoMTAwJSAqIDEgLyA2LjAwMSl9LnVrLWNoaWxkLXdpZHRoLWF1dG9cQGw+Knt3aWR0aDphdXRvfS51ay1jaGlsZC13aWR0aC1leHBhbmRcQGw+Om5vdChbY2xhc3MqPXVrLXdpZHRoXSl7ZmxleDoxO21pbi13aWR0aDoxcHh9fUBtZWRpYSAobWluLXdpZHRoOjE2MDBweCl7LnVrLWNoaWxkLXdpZHRoLTEtMVxAeGw+Knt3aWR0aDoxMDAlfS51ay1jaGlsZC13aWR0aC0xLTJcQHhsPip7d2lkdGg6NTAlfS51ay1jaGlsZC13aWR0aC0xLTNcQHhsPip7d2lkdGg6Y2FsYygxMDAlICogMSAvIDMuMDAxKX0udWstY2hpbGQtd2lkdGgtMS00XEB4bD4qe3dpZHRoOjI1JX0udWstY2hpbGQtd2lkdGgtMS01XEB4bD4qe3dpZHRoOjIwJX0udWstY2hpbGQtd2lkdGgtMS02XEB4bD4qe3dpZHRoOmNhbGMoMTAwJSAqIDEgLyA2LjAwMSl9LnVrLWNoaWxkLXdpZHRoLWF1dG9cQHhsPip7d2lkdGg6YXV0b30udWstY2hpbGQtd2lkdGgtZXhwYW5kXEB4bD46bm90KFtjbGFzcyo9dWstd2lkdGhdKXtmbGV4OjE7bWluLXdpZHRoOjFweH19W2NsYXNzKj11ay13aWR0aF17Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCV9LnVrLXdpZHRoLTEtMnt3aWR0aDo1MCV9LnVrLXdpZHRoLTEtM3t3aWR0aDpjYWxjKDEwMCUgKiAxIC8gMy4wMDEpfS51ay13aWR0aC0yLTN7d2lkdGg6Y2FsYygxMDAlICogMiAvIDMuMDAxKX0udWstd2lkdGgtMS00e3dpZHRoOjI1JX0udWstd2lkdGgtMy00e3dpZHRoOjc1JX0udWstd2lkdGgtMS01e3dpZHRoOjIwJX0udWstd2lkdGgtMi01e3dpZHRoOjQwJX0udWstd2lkdGgtMy01e3dpZHRoOjYwJX0udWstd2lkdGgtNC01e3dpZHRoOjgwJX0udWstd2lkdGgtMS02e3dpZHRoOmNhbGMoMTAwJSAqIDEgLyA2LjAwMSl9LnVrLXdpZHRoLTUtNnt3aWR0aDpjYWxjKDEwMCUgKiA1IC8gNi4wMDEpfS51ay13aWR0aC1zbWFsbHt3aWR0aDoxNTBweH0udWstd2lkdGgtbWVkaXVte3dpZHRoOjMwMHB4fS51ay13aWR0aC1sYXJnZXt3aWR0aDo0NTBweH0udWstd2lkdGgteGxhcmdle3dpZHRoOjYwMHB4fS51ay13aWR0aC0yeGxhcmdle3dpZHRoOjc1MHB4fS51ay13aWR0aC1hdXRve3dpZHRoOmF1dG99LnVrLXdpZHRoLWV4cGFuZHtmbGV4OjE7bWluLXdpZHRoOjFweH1AbWVkaWEgKG1pbi13aWR0aDo2NDBweCl7LnVrLXdpZHRoLTEtMVxAc3t3aWR0aDoxMDAlfS51ay13aWR0aC0xLTJcQHN7d2lkdGg6NTAlfS51ay13aWR0aC0xLTNcQHN7d2lkdGg6Y2FsYygxMDAlICogMSAvIDMuMDAxKX0udWstd2lkdGgtMi0zXEBze3dpZHRoOmNhbGMoMTAwJSAqIDIgLyAzLjAwMSl9LnVrLXdpZHRoLTEtNFxAc3t3aWR0aDoyNSV9LnVrLXdpZHRoLTMtNFxAc3t3aWR0aDo3NSV9LnVrLXdpZHRoLTEtNVxAc3t3aWR0aDoyMCV9LnVrLXdpZHRoLTItNVxAc3t3aWR0aDo0MCV9LnVrLXdpZHRoLTMtNVxAc3t3aWR0aDo2MCV9LnVrLXdpZHRoLTQtNVxAc3t3aWR0aDo4MCV9LnVrLXdpZHRoLTEtNlxAc3t3aWR0aDpjYWxjKDEwMCUgKiAxIC8gNi4wMDEpfS51ay13aWR0aC01LTZcQHN7d2lkdGg6Y2FsYygxMDAlICogNSAvIDYuMDAxKX0udWstd2lkdGgtc21hbGxcQHN7d2lkdGg6MTUwcHh9LnVrLXdpZHRoLW1lZGl1bVxAc3t3aWR0aDozMDBweH0udWstd2lkdGgtbGFyZ2VcQHN7d2lkdGg6NDUwcHh9LnVrLXdpZHRoLXhsYXJnZVxAc3t3aWR0aDo2MDBweH0udWstd2lkdGgtMnhsYXJnZVxAc3t3aWR0aDo3NTBweH0udWstd2lkdGgtYXV0b1xAc3t3aWR0aDphdXRvfS51ay13aWR0aC1leHBhbmRcQHN7ZmxleDoxO21pbi13aWR0aDoxcHh9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstd2lkdGgtMS0xXEBte3dpZHRoOjEwMCV9LnVrLXdpZHRoLTEtMlxAbXt3aWR0aDo1MCV9LnVrLXdpZHRoLTEtM1xAbXt3aWR0aDpjYWxjKDEwMCUgKiAxIC8gMy4wMDEpfS51ay13aWR0aC0yLTNcQG17d2lkdGg6Y2FsYygxMDAlICogMiAvIDMuMDAxKX0udWstd2lkdGgtMS00XEBte3dpZHRoOjI1JX0udWstd2lkdGgtMy00XEBte3dpZHRoOjc1JX0udWstd2lkdGgtMS01XEBte3dpZHRoOjIwJX0udWstd2lkdGgtMi01XEBte3dpZHRoOjQwJX0udWstd2lkdGgtMy01XEBte3dpZHRoOjYwJX0udWstd2lkdGgtNC01XEBte3dpZHRoOjgwJX0udWstd2lkdGgtMS02XEBte3dpZHRoOmNhbGMoMTAwJSAqIDEgLyA2LjAwMSl9LnVrLXdpZHRoLTUtNlxAbXt3aWR0aDpjYWxjKDEwMCUgKiA1IC8gNi4wMDEpfS51ay13aWR0aC1zbWFsbFxAbXt3aWR0aDoxNTBweH0udWstd2lkdGgtbWVkaXVtXEBte3dpZHRoOjMwMHB4fS51ay13aWR0aC1sYXJnZVxAbXt3aWR0aDo0NTBweH0udWstd2lkdGgteGxhcmdlXEBte3dpZHRoOjYwMHB4fS51ay13aWR0aC0yeGxhcmdlXEBte3dpZHRoOjc1MHB4fS51ay13aWR0aC1hdXRvXEBte3dpZHRoOmF1dG99LnVrLXdpZHRoLWV4cGFuZFxAbXtmbGV4OjE7bWluLXdpZHRoOjFweH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstd2lkdGgtMS0xXEBse3dpZHRoOjEwMCV9LnVrLXdpZHRoLTEtMlxAbHt3aWR0aDo1MCV9LnVrLXdpZHRoLTEtM1xAbHt3aWR0aDpjYWxjKDEwMCUgKiAxIC8gMy4wMDEpfS51ay13aWR0aC0yLTNcQGx7d2lkdGg6Y2FsYygxMDAlICogMiAvIDMuMDAxKX0udWstd2lkdGgtMS00XEBse3dpZHRoOjI1JX0udWstd2lkdGgtMy00XEBse3dpZHRoOjc1JX0udWstd2lkdGgtMS01XEBse3dpZHRoOjIwJX0udWstd2lkdGgtMi01XEBse3dpZHRoOjQwJX0udWstd2lkdGgtMy01XEBse3dpZHRoOjYwJX0udWstd2lkdGgtNC01XEBse3dpZHRoOjgwJX0udWstd2lkdGgtMS02XEBse3dpZHRoOmNhbGMoMTAwJSAqIDEgLyA2LjAwMSl9LnVrLXdpZHRoLTUtNlxAbHt3aWR0aDpjYWxjKDEwMCUgKiA1IC8gNi4wMDEpfS51ay13aWR0aC1zbWFsbFxAbHt3aWR0aDoxNTBweH0udWstd2lkdGgtbWVkaXVtXEBse3dpZHRoOjMwMHB4fS51ay13aWR0aC1sYXJnZVxAbHt3aWR0aDo0NTBweH0udWstd2lkdGgteGxhcmdlXEBse3dpZHRoOjYwMHB4fS51ay13aWR0aC0yeGxhcmdlXEBse3dpZHRoOjc1MHB4fS51ay13aWR0aC1hdXRvXEBse3dpZHRoOmF1dG99LnVrLXdpZHRoLWV4cGFuZFxAbHtmbGV4OjE7bWluLXdpZHRoOjFweH19QG1lZGlhIChtaW4td2lkdGg6MTYwMHB4KXsudWstd2lkdGgtMS0xXEB4bHt3aWR0aDoxMDAlfS51ay13aWR0aC0xLTJcQHhse3dpZHRoOjUwJX0udWstd2lkdGgtMS0zXEB4bHt3aWR0aDpjYWxjKDEwMCUgKiAxIC8gMy4wMDEpfS51ay13aWR0aC0yLTNcQHhse3dpZHRoOmNhbGMoMTAwJSAqIDIgLyAzLjAwMSl9LnVrLXdpZHRoLTEtNFxAeGx7d2lkdGg6MjUlfS51ay13aWR0aC0zLTRcQHhse3dpZHRoOjc1JX0udWstd2lkdGgtMS01XEB4bHt3aWR0aDoyMCV9LnVrLXdpZHRoLTItNVxAeGx7d2lkdGg6NDAlfS51ay13aWR0aC0zLTVcQHhse3dpZHRoOjYwJX0udWstd2lkdGgtNC01XEB4bHt3aWR0aDo4MCV9LnVrLXdpZHRoLTEtNlxAeGx7d2lkdGg6Y2FsYygxMDAlICogMSAvIDYuMDAxKX0udWstd2lkdGgtNS02XEB4bHt3aWR0aDpjYWxjKDEwMCUgKiA1IC8gNi4wMDEpfS51ay13aWR0aC1zbWFsbFxAeGx7d2lkdGg6MTUwcHh9LnVrLXdpZHRoLW1lZGl1bVxAeGx7d2lkdGg6MzAwcHh9LnVrLXdpZHRoLWxhcmdlXEB4bHt3aWR0aDo0NTBweH0udWstd2lkdGgteGxhcmdlXEB4bHt3aWR0aDo2MDBweH0udWstd2lkdGgtMnhsYXJnZVxAeGx7d2lkdGg6NzUwcHh9LnVrLXdpZHRoLWF1dG9cQHhse3dpZHRoOmF1dG99LnVrLXdpZHRoLWV4cGFuZFxAeGx7ZmxleDoxO21pbi13aWR0aDoxcHh9fS51ay13aWR0aC1tYXgtY29udGVudHt3aWR0aDptYXgtY29udGVudH0udWstd2lkdGgtbWluLWNvbnRlbnR7d2lkdGg6bWluLWNvbnRlbnR9W2NsYXNzKj11ay1oZWlnaHRde2JveC1zaXppbmc6Ym9yZGVyLWJveH0udWstaGVpZ2h0LTEtMXtoZWlnaHQ6MTAwJX0udWstaGVpZ2h0LXZpZXdwb3J0e21pbi1oZWlnaHQ6MTAwdmh9LnVrLWhlaWdodC12aWV3cG9ydC0ye21pbi1oZWlnaHQ6MjAwdmh9LnVrLWhlaWdodC12aWV3cG9ydC0ze21pbi1oZWlnaHQ6MzAwdmh9LnVrLWhlaWdodC12aWV3cG9ydC00e21pbi1oZWlnaHQ6NDAwdmh9LnVrLWhlaWdodC1zbWFsbHtoZWlnaHQ6MTUwcHh9LnVrLWhlaWdodC1tZWRpdW17aGVpZ2h0OjMwMHB4fS51ay1oZWlnaHQtbGFyZ2V7aGVpZ2h0OjQ1MHB4fS51ay1oZWlnaHQtbWF4LXNtYWxse21heC1oZWlnaHQ6MTUwcHh9LnVrLWhlaWdodC1tYXgtbWVkaXVte21heC1oZWlnaHQ6MzAwcHh9LnVrLWhlaWdodC1tYXgtbGFyZ2V7bWF4LWhlaWdodDo0NTBweH0udWstdGV4dC1sZWFke2ZvbnQtc2l6ZToxLjVyZW07bGluZS1oZWlnaHQ6MS41O2NvbG9yOiMzMzN9LnVrLXRleHQtbWV0YXtmb250LXNpemU6Ljg3NXJlbTtsaW5lLWhlaWdodDoxLjQ7Y29sb3I6Izk5OX0udWstdGV4dC1tZXRhIGF7Y29sb3I6Izk5OX0udWstdGV4dC1tZXRhIGE6aG92ZXJ7Y29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstdGV4dC1zbWFsbHtmb250LXNpemU6Ljg3NXJlbTtsaW5lLWhlaWdodDoxLjV9LnVrLXRleHQtbGFyZ2V7Zm9udC1zaXplOjEuNXJlbTtsaW5lLWhlaWdodDoxLjV9LnVrLXRleHQtZGVmYXVsdHtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoxLjV9LnVrLXRleHQtbGlnaHR7Zm9udC13ZWlnaHQ6MzAwfS51ay10ZXh0LW5vcm1hbHtmb250LXdlaWdodDo0MDB9LnVrLXRleHQtYm9sZHtmb250LXdlaWdodDo3MDB9LnVrLXRleHQtbGlnaHRlcntmb250LXdlaWdodDpsaWdodGVyfS51ay10ZXh0LWJvbGRlcntmb250LXdlaWdodDpib2xkZXJ9LnVrLXRleHQtaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS51ay10ZXh0LWNhcGl0YWxpemV7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZSFpbXBvcnRhbnR9LnVrLXRleHQtdXBwZXJjYXNle3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZSFpbXBvcnRhbnR9LnVrLXRleHQtbG93ZXJjYXNle3RleHQtdHJhbnNmb3JtOmxvd2VyY2FzZSFpbXBvcnRhbnR9LnVrLXRleHQtZGVjb3JhdGlvbi1ub25le3RleHQtZGVjb3JhdGlvbjpub25lIWltcG9ydGFudH0udWstdGV4dC1tdXRlZHtjb2xvcjojOTk5IWltcG9ydGFudH0udWstdGV4dC1lbXBoYXNpc3tjb2xvcjojMzMzIWltcG9ydGFudH0udWstdGV4dC1wcmltYXJ5e2NvbG9yOiMxZTg3ZjAhaW1wb3J0YW50fS51ay10ZXh0LXNlY29uZGFyeXtjb2xvcjojMjIyIWltcG9ydGFudH0udWstdGV4dC1zdWNjZXNze2NvbG9yOiMzMmQyOTYhaW1wb3J0YW50fS51ay10ZXh0LXdhcm5pbmd7Y29sb3I6I2ZhYTA1YSFpbXBvcnRhbnR9LnVrLXRleHQtZGFuZ2Vye2NvbG9yOiNmMDUwNmUhaW1wb3J0YW50fS51ay10ZXh0LWJhY2tncm91bmR7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtjb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZC1jb2xvcjojMWU4N2YwfS51ay10ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0IWltcG9ydGFudH0udWstdGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0IWltcG9ydGFudH0udWstdGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50fS51ay10ZXh0LWp1c3RpZnl7dGV4dC1hbGlnbjpqdXN0aWZ5IWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo2NDBweCl7LnVrLXRleHQtbGVmdFxAc3t0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50fS51ay10ZXh0LXJpZ2h0XEBze3RleHQtYWxpZ246cmlnaHQhaW1wb3J0YW50fS51ay10ZXh0LWNlbnRlclxAc3t0ZXh0LWFsaWduOmNlbnRlciFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstdGV4dC1sZWZ0XEBte3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9LnVrLXRleHQtcmlnaHRcQG17dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9LnVrLXRleHQtY2VudGVyXEBte3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstdGV4dC1sZWZ0XEBse3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9LnVrLXRleHQtcmlnaHRcQGx7dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9LnVrLXRleHQtY2VudGVyXEBse3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTYwMHB4KXsudWstdGV4dC1sZWZ0XEB4bHt0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50fS51ay10ZXh0LXJpZ2h0XEB4bHt0ZXh0LWFsaWduOnJpZ2h0IWltcG9ydGFudH0udWstdGV4dC1jZW50ZXJcQHhse3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH19LnVrLXRleHQtdG9we3ZlcnRpY2FsLWFsaWduOnRvcCFpbXBvcnRhbnR9LnVrLXRleHQtbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZSFpbXBvcnRhbnR9LnVrLXRleHQtYm90dG9te3ZlcnRpY2FsLWFsaWduOmJvdHRvbSFpbXBvcnRhbnR9LnVrLXRleHQtYmFzZWxpbmV7dmVydGljYWwtYWxpZ246YmFzZWxpbmUhaW1wb3J0YW50fS51ay10ZXh0LW5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LnVrLXRleHQtdHJ1bmNhdGV7bWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfXRkLnVrLXRleHQtdHJ1bmNhdGUsdGgudWstdGV4dC10cnVuY2F0ZXttYXgtd2lkdGg6MH0udWstdGV4dC1icmVha3tvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmR9dGQudWstdGV4dC1icmVhayx0aC51ay10ZXh0LWJyZWFre3dvcmQtYnJlYWs6YnJlYWstd29yZH1bY2xhc3MqPXVrLWNvbHVtbi1de2NvbHVtbi1nYXA6MzBweH1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjbGFzcyo9dWstY29sdW1uLV17Y29sdW1uLWdhcDo0MHB4fX1bY2xhc3MqPXVrLWNvbHVtbi1dIGltZ3t0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApfS51ay1jb2x1bW4tZGl2aWRlcntjb2x1bW4tcnVsZToxcHggc29saWQgI2U1ZTVlNTtjb2x1bW4tZ2FwOjYwcHh9QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstY29sdW1uLWRpdmlkZXJ7Y29sdW1uLWdhcDo4MHB4fX0udWstY29sdW1uLTEtMntjb2x1bW4tY291bnQ6Mn0udWstY29sdW1uLTEtM3tjb2x1bW4tY291bnQ6M30udWstY29sdW1uLTEtNHtjb2x1bW4tY291bnQ6NH0udWstY29sdW1uLTEtNXtjb2x1bW4tY291bnQ6NX0udWstY29sdW1uLTEtNntjb2x1bW4tY291bnQ6Nn1AbWVkaWEgKG1pbi13aWR0aDo2NDBweCl7LnVrLWNvbHVtbi0xLTJcQHN7Y29sdW1uLWNvdW50OjJ9LnVrLWNvbHVtbi0xLTNcQHN7Y29sdW1uLWNvdW50OjN9LnVrLWNvbHVtbi0xLTRcQHN7Y29sdW1uLWNvdW50OjR9LnVrLWNvbHVtbi0xLTVcQHN7Y29sdW1uLWNvdW50OjV9LnVrLWNvbHVtbi0xLTZcQHN7Y29sdW1uLWNvdW50OjZ9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstY29sdW1uLTEtMlxAbXtjb2x1bW4tY291bnQ6Mn0udWstY29sdW1uLTEtM1xAbXtjb2x1bW4tY291bnQ6M30udWstY29sdW1uLTEtNFxAbXtjb2x1bW4tY291bnQ6NH0udWstY29sdW1uLTEtNVxAbXtjb2x1bW4tY291bnQ6NX0udWstY29sdW1uLTEtNlxAbXtjb2x1bW4tY291bnQ6Nn19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstY29sdW1uLTEtMlxAbHtjb2x1bW4tY291bnQ6Mn0udWstY29sdW1uLTEtM1xAbHtjb2x1bW4tY291bnQ6M30udWstY29sdW1uLTEtNFxAbHtjb2x1bW4tY291bnQ6NH0udWstY29sdW1uLTEtNVxAbHtjb2x1bW4tY291bnQ6NX0udWstY29sdW1uLTEtNlxAbHtjb2x1bW4tY291bnQ6Nn19QG1lZGlhIChtaW4td2lkdGg6MTYwMHB4KXsudWstY29sdW1uLTEtMlxAeGx7Y29sdW1uLWNvdW50OjJ9LnVrLWNvbHVtbi0xLTNcQHhse2NvbHVtbi1jb3VudDozfS51ay1jb2x1bW4tMS00XEB4bHtjb2x1bW4tY291bnQ6NH0udWstY29sdW1uLTEtNVxAeGx7Y29sdW1uLWNvdW50OjV9LnVrLWNvbHVtbi0xLTZcQHhse2NvbHVtbi1jb3VudDo2fX0udWstY29sdW1uLXNwYW57Y29sdW1uLXNwYW46YWxsfVtkYXRhLXVrLWNvdmVyXSxbdWstY292ZXJde21heC13aWR0aDpub25lO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTAlO3RvcDo1MCU7LS11ay1wb3NpdGlvbi10cmFuc2xhdGUteDotNTAlOy0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXk6LTUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS14KSx2YXIoLS11ay1wb3NpdGlvbi10cmFuc2xhdGUteSkpfWlmcmFtZVtkYXRhLXVrLWNvdmVyXSxpZnJhbWVbdWstY292ZXJde3BvaW50ZXItZXZlbnRzOm5vbmV9LnVrLWNvdmVyLWNvbnRhaW5lcntvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9LnVrLWJhY2tncm91bmQtZGVmYXVsdHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LnVrLWJhY2tncm91bmQtbXV0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjhmOGY4fS51ay1iYWNrZ3JvdW5kLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojMWU4N2YwfS51ay1iYWNrZ3JvdW5kLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjJ9LnVrLWJhY2tncm91bmQtY29udGFpbiwudWstYmFja2dyb3VuZC1jb3ZlciwudWstYmFja2dyb3VuZC1oZWlnaHQtMS0xLC51ay1iYWNrZ3JvdW5kLXdpZHRoLTEtMXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJSA1MCU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fS51ay1iYWNrZ3JvdW5kLWNvdmVye2JhY2tncm91bmQtc2l6ZTpjb3Zlcn0udWstYmFja2dyb3VuZC1jb250YWlue2JhY2tncm91bmQtc2l6ZTpjb250YWlufS51ay1iYWNrZ3JvdW5kLXdpZHRoLTEtMXtiYWNrZ3JvdW5kLXNpemU6MTAwJX0udWstYmFja2dyb3VuZC1oZWlnaHQtMS0xe2JhY2tncm91bmQtc2l6ZTphdXRvIDEwMCV9LnVrLWJhY2tncm91bmQtdG9wLWxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9LnVrLWJhY2tncm91bmQtdG9wLWNlbnRlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJSAwfS51ay1iYWNrZ3JvdW5kLXRvcC1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCUgMH0udWstYmFja2dyb3VuZC1jZW50ZXItbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgNTAlfS51ay1iYWNrZ3JvdW5kLWNlbnRlci1jZW50ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCUgNTAlfS51ay1iYWNrZ3JvdW5kLWNlbnRlci1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCUgNTAlfS51ay1iYWNrZ3JvdW5kLWJvdHRvbS1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246MCAxMDAlfS51ay1iYWNrZ3JvdW5kLWJvdHRvbS1jZW50ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCUgMTAwJX0udWstYmFja2dyb3VuZC1ib3R0b20tcmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjoxMDAlIDEwMCV9LnVrLWJhY2tncm91bmQtbm9yZXBlYXR7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fS51ay1iYWNrZ3JvdW5kLWZpeGVke2JhY2tncm91bmQtYXR0YWNobWVudDpmaXhlZDtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbn1AbWVkaWEgKHBvaW50ZXI6Y29hcnNlKXsudWstYmFja2dyb3VuZC1maXhlZHtiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6c2Nyb2xsfX1AbWVkaWEgKG1heC13aWR0aDo2MzlweCl7LnVrLWJhY2tncm91bmQtaW1hZ2VcQHN7YmFja2dyb3VuZC1pbWFnZTpub25lIWltcG9ydGFudH19QG1lZGlhIChtYXgtd2lkdGg6OTU5cHgpey51ay1iYWNrZ3JvdW5kLWltYWdlXEBte2JhY2tncm91bmQtaW1hZ2U6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWF4LXdpZHRoOjExOTlweCl7LnVrLWJhY2tncm91bmQtaW1hZ2VcQGx7YmFja2dyb3VuZC1pbWFnZTpub25lIWltcG9ydGFudH19QG1lZGlhIChtYXgtd2lkdGg6MTU5OXB4KXsudWstYmFja2dyb3VuZC1pbWFnZVxAeGx7YmFja2dyb3VuZC1pbWFnZTpub25lIWltcG9ydGFudH19LnVrLWJhY2tncm91bmQtYmxlbmQtbXVsdGlwbHl7YmFja2dyb3VuZC1ibGVuZC1tb2RlOm11bHRpcGx5fS51ay1iYWNrZ3JvdW5kLWJsZW5kLXNjcmVlbntiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6c2NyZWVufS51ay1iYWNrZ3JvdW5kLWJsZW5kLW92ZXJsYXl7YmFja2dyb3VuZC1ibGVuZC1tb2RlOm92ZXJsYXl9LnVrLWJhY2tncm91bmQtYmxlbmQtZGFya2Vue2JhY2tncm91bmQtYmxlbmQtbW9kZTpkYXJrZW59LnVrLWJhY2tncm91bmQtYmxlbmQtbGlnaHRlbntiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6bGlnaHRlbn0udWstYmFja2dyb3VuZC1ibGVuZC1jb2xvci1kb2RnZXtiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6Y29sb3ItZG9kZ2V9LnVrLWJhY2tncm91bmQtYmxlbmQtY29sb3ItYnVybntiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6Y29sb3ItYnVybn0udWstYmFja2dyb3VuZC1ibGVuZC1oYXJkLWxpZ2h0e2JhY2tncm91bmQtYmxlbmQtbW9kZTpoYXJkLWxpZ2h0fS51ay1iYWNrZ3JvdW5kLWJsZW5kLXNvZnQtbGlnaHR7YmFja2dyb3VuZC1ibGVuZC1tb2RlOnNvZnQtbGlnaHR9LnVrLWJhY2tncm91bmQtYmxlbmQtZGlmZmVyZW5jZXtiYWNrZ3JvdW5kLWJsZW5kLW1vZGU6ZGlmZmVyZW5jZX0udWstYmFja2dyb3VuZC1ibGVuZC1leGNsdXNpb257YmFja2dyb3VuZC1ibGVuZC1tb2RlOmV4Y2x1c2lvbn0udWstYmFja2dyb3VuZC1ibGVuZC1odWV7YmFja2dyb3VuZC1ibGVuZC1tb2RlOmh1ZX0udWstYmFja2dyb3VuZC1ibGVuZC1zYXR1cmF0aW9ue2JhY2tncm91bmQtYmxlbmQtbW9kZTpzYXR1cmF0aW9ufS51ay1iYWNrZ3JvdW5kLWJsZW5kLWNvbG9ye2JhY2tncm91bmQtYmxlbmQtbW9kZTpjb2xvcn0udWstYmFja2dyb3VuZC1ibGVuZC1sdW1pbm9zaXR5e2JhY2tncm91bmQtYmxlbmQtbW9kZTpsdW1pbm9zaXR5fVtjbGFzcyo9dWstYWxpZ25de2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTozMHB4fSorW2NsYXNzKj11ay1hbGlnbl17bWFyZ2luLXRvcDozMHB4fS51ay1hbGlnbi1jZW50ZXJ7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6YXV0b30udWstYWxpZ24tbGVmdHttYXJnaW4tdG9wOjA7bWFyZ2luLXJpZ2h0OjMwcHg7ZmxvYXQ6bGVmdH0udWstYWxpZ24tcmlnaHR7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjMwcHg7ZmxvYXQ6cmlnaHR9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1hbGlnbi1sZWZ0XEBze21hcmdpbi10b3A6MDttYXJnaW4tcmlnaHQ6MzBweDtmbG9hdDpsZWZ0fS51ay1hbGlnbi1yaWdodFxAc3ttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MzBweDtmbG9hdDpyaWdodH19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1hbGlnbi1sZWZ0XEBte21hcmdpbi10b3A6MDttYXJnaW4tcmlnaHQ6MzBweDtmbG9hdDpsZWZ0fS51ay1hbGlnbi1yaWdodFxAbXttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MzBweDtmbG9hdDpyaWdodH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstYWxpZ24tbGVmdFxAbHttYXJnaW4tdG9wOjA7ZmxvYXQ6bGVmdH0udWstYWxpZ24tcmlnaHRcQGx7bWFyZ2luLXRvcDowO2Zsb2F0OnJpZ2h0fS51ay1hbGlnbi1sZWZ0LC51ay1hbGlnbi1sZWZ0XEBsLC51ay1hbGlnbi1sZWZ0XEBtLC51ay1hbGlnbi1sZWZ0XEBze21hcmdpbi1yaWdodDo0MHB4fS51ay1hbGlnbi1yaWdodCwudWstYWxpZ24tcmlnaHRcQGwsLnVrLWFsaWduLXJpZ2h0XEBtLC51ay1hbGlnbi1yaWdodFxAc3ttYXJnaW4tbGVmdDo0MHB4fX1AbWVkaWEgKG1pbi13aWR0aDoxNjAwcHgpey51ay1hbGlnbi1sZWZ0XEB4bHttYXJnaW4tdG9wOjA7bWFyZ2luLXJpZ2h0OjQwcHg7ZmxvYXQ6bGVmdH0udWstYWxpZ24tcmlnaHRcQHhse21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDo0MHB4O2Zsb2F0OnJpZ2h0fX0udWstc3ZnLC51ay1zdmc6bm90KC51ay1wcmVzZXJ2ZSkgW2ZpbGwqPScjJ106bm90KC51ay1wcmVzZXJ2ZSl7ZmlsbDpjdXJyZW50Y29sb3J9LnVrLXN2Zzpub3QoLnVrLXByZXNlcnZlKSBbc3Ryb2tlKj0nIyddOm5vdCgudWstcHJlc2VydmUpe3N0cm9rZTpjdXJyZW50Y29sb3J9LnVrLXN2Z3t0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCl9LnVrLXBhbmVse2Rpc3BsYXk6Zmxvdy1yb290O3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0udWstcGFuZWw+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS51ay1wYW5lbC1zY3JvbGxhYmxle2hlaWdodDoxNzBweDtwYWRkaW5nOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZTVlNWU1O292ZXJmbG93OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cmVzaXplOmJvdGh9LnVrLWNsZWFyZml4OjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OnRhYmxlLWNlbGx9LnVrLWNsZWFyZml4OjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6dGFibGU7Y2xlYXI6Ym90aH0udWstZmxvYXQtbGVmdHtmbG9hdDpsZWZ0fS51ay1mbG9hdC1yaWdodHtmbG9hdDpyaWdodH1bY2xhc3MqPXVrLWZsb2F0LV17bWF4LXdpZHRoOjEwMCV9LnVrLW92ZXJmbG93LWhpZGRlbntvdmVyZmxvdzpoaWRkZW59LnVrLW92ZXJmbG93LWF1dG97b3ZlcmZsb3c6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH0udWstb3ZlcmZsb3ctYXV0bz46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnVrLWJveC1zaXppbmctY29udGVudHtib3gtc2l6aW5nOmNvbnRlbnQtYm94fS51ay1ib3gtc2l6aW5nLWJvcmRlcntib3gtc2l6aW5nOmJvcmRlci1ib3h9LnVrLXJlc2l6ZXtyZXNpemU6Ym90aH0udWstcmVzaXplLWhvcml6b250YWx7cmVzaXplOmhvcml6b250YWx9LnVrLXJlc2l6ZS12ZXJ0aWNhbHtyZXNpemU6dmVydGljYWx9LnVrLWRpc3BsYXktYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LnVrLWRpc3BsYXktaW5saW5le2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH0udWstZGlzcGxheS1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fVtjbGFzcyo9dWstaW5saW5lXXtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTttYXgtd2lkdGg6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7LXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbn0udWstaW5saW5lLWNsaXB7b3ZlcmZsb3c6aGlkZGVufS51ay1wcmVzZXJ2ZS13aWR0aCwudWstcHJlc2VydmUtd2lkdGggY2FudmFzLC51ay1wcmVzZXJ2ZS13aWR0aCBpbWcsLnVrLXByZXNlcnZlLXdpZHRoIHN2ZywudWstcHJlc2VydmUtd2lkdGggdmlkZW97bWF4LXdpZHRoOm5vbmV9LnVrLXJlc3BvbnNpdmUtaGVpZ2h0LC51ay1yZXNwb25zaXZlLXdpZHRoe2JveC1zaXppbmc6Ym9yZGVyLWJveH0udWstcmVzcG9uc2l2ZS13aWR0aHttYXgtd2lkdGg6MTAwJSFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG99LnVrLXJlc3BvbnNpdmUtaGVpZ2h0e21heC1oZWlnaHQ6MTAwJTt3aWR0aDphdXRvO21heC13aWR0aDpub25lfVtkYXRhLXVrLXJlc3BvbnNpdmVdLFt1ay1yZXNwb25zaXZlXXttYXgtd2lkdGg6MTAwJX0udWstb2JqZWN0LWNvdmVye29iamVjdC1maXQ6Y292ZXJ9LnVrLW9iamVjdC1jb250YWlue29iamVjdC1maXQ6Y29udGFpbn0udWstb2JqZWN0LWZpbGx7b2JqZWN0LWZpdDpmaWxsfS51ay1vYmplY3Qtbm9uZXtvYmplY3QtZml0Om5vbmV9LnVrLW9iamVjdC1zY2FsZS1kb3due29iamVjdC1maXQ6c2NhbGUtZG93bn0udWstb2JqZWN0LXRvcC1sZWZ0e29iamVjdC1wb3NpdGlvbjowIDB9LnVrLW9iamVjdC10b3AtY2VudGVye29iamVjdC1wb3NpdGlvbjo1MCUgMH0udWstb2JqZWN0LXRvcC1yaWdodHtvYmplY3QtcG9zaXRpb246MTAwJSAwfS51ay1vYmplY3QtY2VudGVyLWxlZnR7b2JqZWN0LXBvc2l0aW9uOjAgNTAlfS51ay1vYmplY3QtY2VudGVyLWNlbnRlcntvYmplY3QtcG9zaXRpb246NTAlIDUwJX0udWstb2JqZWN0LWNlbnRlci1yaWdodHtvYmplY3QtcG9zaXRpb246MTAwJSA1MCV9LnVrLW9iamVjdC1ib3R0b20tbGVmdHtvYmplY3QtcG9zaXRpb246MCAxMDAlfS51ay1vYmplY3QtYm90dG9tLWNlbnRlcntvYmplY3QtcG9zaXRpb246NTAlIDEwMCV9LnVrLW9iamVjdC1ib3R0b20tcmlnaHR7b2JqZWN0LXBvc2l0aW9uOjEwMCUgMTAwJX0udWstYm9yZGVyLWNpcmNsZXtib3JkZXItcmFkaXVzOjUwJX0udWstYm9yZGVyLXBpbGx7Ym9yZGVyLXJhZGl1czo1MDBweH0udWstYm9yZGVyLXJvdW5kZWR7Ym9yZGVyLXJhZGl1czo1cHh9LnVrLWlubGluZS1jbGlwW2NsYXNzKj11ay1ib3JkZXItXXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS51ay1ib3gtc2hhZG93LXNtYWxse2JveC1zaGFkb3c6MCAycHggOHB4IHJnYmEoMCwwLDAsLjA4KX0udWstYm94LXNoYWRvdy1tZWRpdW17Ym94LXNoYWRvdzowIDVweCAxNXB4IHJnYmEoMCwwLDAsLjA4KX0udWstYm94LXNoYWRvdy1sYXJnZXtib3gtc2hhZG93OjAgMTRweCAyNXB4IHJnYmEoMCwwLDAsLjE2KX0udWstYm94LXNoYWRvdy14bGFyZ2V7Ym94LXNoYWRvdzowIDI4cHggNTBweCByZ2JhKDAsMCwwLC4xNil9W2NsYXNzKj11ay1ib3gtc2hhZG93LWhvdmVyXXt0cmFuc2l0aW9uOmJveC1zaGFkb3cgLjFzIGVhc2UtaW4tb3V0fS51ay1ib3gtc2hhZG93LWhvdmVyLXNtYWxsOmhvdmVye2JveC1zaGFkb3c6MCAycHggOHB4IHJnYmEoMCwwLDAsLjA4KX0udWstYm94LXNoYWRvdy1ob3Zlci1tZWRpdW06aG92ZXJ7Ym94LXNoYWRvdzowIDVweCAxNXB4IHJnYmEoMCwwLDAsLjA4KX0udWstYm94LXNoYWRvdy1ob3Zlci1sYXJnZTpob3Zlcntib3gtc2hhZG93OjAgMTRweCAyNXB4IHJnYmEoMCwwLDAsLjE2KX0udWstYm94LXNoYWRvdy1ob3Zlci14bGFyZ2U6aG92ZXJ7Ym94LXNoYWRvdzowIDI4cHggNTBweCByZ2JhKDAsMCwwLC4xNil9QHN1cHBvcnRzIChmaWx0ZXI6Ymx1cigwKSl7LnVrLWJveC1zaGFkb3ctYm90dG9te2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MDttYXgtd2lkdGg6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LnVrLWJveC1zaGFkb3ctYm90dG9tOjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTotMzBweDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4Oi0xO2hlaWdodDozMHB4O2JvcmRlci1yYWRpdXM6MTAwJTtiYWNrZ3JvdW5kOiM0NDQ7ZmlsdGVyOmJsdXIoMjBweCk7d2lsbC1jaGFuZ2U6ZmlsdGVyfX0udWstZHJvcGNhcDo6Zmlyc3QtbGV0dGVyLC51ay1kcm9wY2FwPnA6Zmlyc3Qtb2YtdHlwZTo6Zmlyc3QtbGV0dGVye2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXJpZ2h0OjEwcHg7ZmxvYXQ6bGVmdDtmb250LXNpemU6NC41ZW07bGluZS1oZWlnaHQ6MTttYXJnaW4tYm90dG9tOi0ycHh9QC1tb3otZG9jdW1lbnQgdXJsLXByZWZpeCgpey51ay1kcm9wY2FwOjpmaXJzdC1sZXR0ZXIsLnVrLWRyb3BjYXA+cDpmaXJzdC1vZi10eXBlOjpmaXJzdC1sZXR0ZXJ7bWFyZ2luLXRvcDoxLjElfX0udWstbG9nb3tmb250LXNpemU6MS41cmVtO2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCJTZWdvZSBVSSIsUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsQXJpYWwsIk5vdG8gU2FucyIsc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiO2NvbG9yOiMzMzM7dGV4dC1kZWNvcmF0aW9uOm5vbmV9OndoZXJlKC51ay1sb2dvKXtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LnVrLWxvZ286aG92ZXJ7Y29sb3I6IzMzMzt0ZXh0LWRlY29yYXRpb246bm9uZX0udWstbG9nbyA6d2hlcmUoaW1nLHN2Zyx2aWRlbyl7ZGlzcGxheTpibG9ja30udWstbG9nby1pbnZlcnNle2Rpc3BsYXk6bm9uZX0udWstZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZX0udWstZHJhZywudWstZHJhZyAqe2N1cnNvcjptb3ZlfS51ay1kcmFnIGlmcmFtZXtwb2ludGVyLWV2ZW50czpub25lfS51ay1kcmFnb3Zlcntib3gtc2hhZG93OjAgMCAyMHB4IHJnYmEoMTAwLDEwMCwxMDAsLjMpfS51ay1ibGVuZC1tdWx0aXBseXttaXgtYmxlbmQtbW9kZTptdWx0aXBseX0udWstYmxlbmQtc2NyZWVue21peC1ibGVuZC1tb2RlOnNjcmVlbn0udWstYmxlbmQtb3ZlcmxheXttaXgtYmxlbmQtbW9kZTpvdmVybGF5fS51ay1ibGVuZC1kYXJrZW57bWl4LWJsZW5kLW1vZGU6ZGFya2VufS51ay1ibGVuZC1saWdodGVue21peC1ibGVuZC1tb2RlOmxpZ2h0ZW59LnVrLWJsZW5kLWNvbG9yLWRvZGdle21peC1ibGVuZC1tb2RlOmNvbG9yLWRvZGdlfS51ay1ibGVuZC1jb2xvci1idXJue21peC1ibGVuZC1tb2RlOmNvbG9yLWJ1cm59LnVrLWJsZW5kLWhhcmQtbGlnaHR7bWl4LWJsZW5kLW1vZGU6aGFyZC1saWdodH0udWstYmxlbmQtc29mdC1saWdodHttaXgtYmxlbmQtbW9kZTpzb2Z0LWxpZ2h0fS51ay1ibGVuZC1kaWZmZXJlbmNle21peC1ibGVuZC1tb2RlOmRpZmZlcmVuY2V9LnVrLWJsZW5kLWV4Y2x1c2lvbnttaXgtYmxlbmQtbW9kZTpleGNsdXNpb259LnVrLWJsZW5kLWh1ZXttaXgtYmxlbmQtbW9kZTpodWV9LnVrLWJsZW5kLXNhdHVyYXRpb257bWl4LWJsZW5kLW1vZGU6c2F0dXJhdGlvbn0udWstYmxlbmQtY29sb3J7bWl4LWJsZW5kLW1vZGU6Y29sb3J9LnVrLWJsZW5kLWx1bWlub3NpdHl7bWl4LWJsZW5kLW1vZGU6bHVtaW5vc2l0eX0udWstdHJhbnNmb3JtLWNlbnRlcnt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSl9LnVrLXRyYW5zZm9ybS1vcmlnaW4tdG9wLWxlZnR7dHJhbnNmb3JtLW9yaWdpbjowIDB9LnVrLXRyYW5zZm9ybS1vcmlnaW4tdG9wLWNlbnRlcnt0cmFuc2Zvcm0tb3JpZ2luOjUwJSAwfS51ay10cmFuc2Zvcm0tb3JpZ2luLXRvcC1yaWdodHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMH0udWstdHJhbnNmb3JtLW9yaWdpbi1jZW50ZXItbGVmdHt0cmFuc2Zvcm0tb3JpZ2luOjAgNTAlfS51ay10cmFuc2Zvcm0tb3JpZ2luLWNlbnRlci1yaWdodHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgNTAlfS51ay10cmFuc2Zvcm0tb3JpZ2luLWJvdHRvbS1sZWZ0e3RyYW5zZm9ybS1vcmlnaW46MCAxMDAlfS51ay10cmFuc2Zvcm0tb3JpZ2luLWJvdHRvbS1jZW50ZXJ7dHJhbnNmb3JtLW9yaWdpbjo1MCUgMTAwJX0udWstdHJhbnNmb3JtLW9yaWdpbi1ib3R0b20tcmlnaHR7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCV9LnVrLWZsZXh7ZGlzcGxheTpmbGV4fS51ay1mbGV4LWlubGluZXtkaXNwbGF5OmlubGluZS1mbGV4fS51ay1mbGV4LWxlZnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LnVrLWZsZXgtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnVrLWZsZXgtcmlnaHR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS51ay1mbGV4LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnVrLWZsZXgtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1mbGV4LWxlZnRcQHN7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LnVrLWZsZXgtY2VudGVyXEBze2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnVrLWZsZXgtcmlnaHRcQHN7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS51ay1mbGV4LWJldHdlZW5cQHN7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnVrLWZsZXgtYXJvdW5kXEBze2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstZmxleC1sZWZ0XEBte2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS51ay1mbGV4LWNlbnRlclxAbXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS51ay1mbGV4LXJpZ2h0XEBte2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0udWstZmxleC1iZXR3ZWVuXEBte2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS51ay1mbGV4LWFyb3VuZFxAbXtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1mbGV4LWxlZnRcQGx7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LnVrLWZsZXgtY2VudGVyXEBse2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnVrLWZsZXgtcmlnaHRcQGx7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS51ay1mbGV4LWJldHdlZW5cQGx7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnVrLWZsZXgtYXJvdW5kXEBse2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9fUBtZWRpYSAobWluLXdpZHRoOjE2MDBweCl7LnVrLWZsZXgtbGVmdFxAeGx7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LnVrLWZsZXgtY2VudGVyXEB4bHtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS51ay1mbGV4LXJpZ2h0XEB4bHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LnVrLWZsZXgtYmV0d2VlblxAeGx7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnVrLWZsZXgtYXJvdW5kXEB4bHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfX0udWstZmxleC1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2h9LnVrLWZsZXgtdG9we2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LnVrLWZsZXgtbWlkZGxle2FsaWduLWl0ZW1zOmNlbnRlcn0udWstZmxleC1ib3R0b217YWxpZ24taXRlbXM6ZmxleC1lbmR9LnVrLWZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30udWstZmxleC1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX0udWstZmxleC1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1ufS51ay1mbGV4LWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfS51ay1mbGV4LW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwfS51ay1mbGV4LXdyYXB7ZmxleC13cmFwOndyYXB9LnVrLWZsZXgtd3JhcC1yZXZlcnNle2ZsZXgtd3JhcDp3cmFwLXJldmVyc2V9LnVrLWZsZXgtd3JhcC1zdHJldGNoe2FsaWduLWNvbnRlbnQ6c3RyZXRjaH0udWstZmxleC13cmFwLXRvcHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnR9LnVrLWZsZXgtd3JhcC1taWRkbGV7YWxpZ24tY29udGVudDpjZW50ZXJ9LnVrLWZsZXgtd3JhcC1ib3R0b217YWxpZ24tY29udGVudDpmbGV4LWVuZH0udWstZmxleC13cmFwLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVufS51ay1mbGV4LXdyYXAtYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS51ay1mbGV4LWZpcnN0e29yZGVyOi0xfS51ay1mbGV4LWxhc3R7b3JkZXI6OTl9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1mbGV4LWZpcnN0XEBze29yZGVyOi0xfS51ay1mbGV4LWxhc3RcQHN7b3JkZXI6OTl9fUBtZWRpYSAobWluLXdpZHRoOjk2MHB4KXsudWstZmxleC1maXJzdFxAbXtvcmRlcjotMX0udWstZmxleC1sYXN0XEBte29yZGVyOjk5fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1mbGV4LWZpcnN0XEBse29yZGVyOi0xfS51ay1mbGV4LWxhc3RcQGx7b3JkZXI6OTl9fUBtZWRpYSAobWluLXdpZHRoOjE2MDBweCl7LnVrLWZsZXgtZmlyc3RcQHhse29yZGVyOi0xfS51ay1mbGV4LWxhc3RcQHhse29yZGVyOjk5fX0udWstZmxleC1ub25le2ZsZXg6bm9uZX0udWstZmxleC1hdXRve2ZsZXg6YXV0b30udWstZmxleC0xe2ZsZXg6MX0udWstbWFyZ2lue21hcmdpbi1ib3R0b206MjBweH0qKy51ay1tYXJnaW57bWFyZ2luLXRvcDoyMHB4IWltcG9ydGFudH0udWstbWFyZ2luLXRvcHttYXJnaW4tdG9wOjIwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tYm90dG9te21hcmdpbi1ib3R0b206MjBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1sZWZ0e21hcmdpbi1sZWZ0OjIwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tcmlnaHR7bWFyZ2luLXJpZ2h0OjIwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tc21hbGx7bWFyZ2luLWJvdHRvbToxMHB4fSorLnVrLW1hcmdpbi1zbWFsbHttYXJnaW4tdG9wOjEwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tc21hbGwtdG9we21hcmdpbi10b3A6MTBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1zbWFsbC1ib3R0b217bWFyZ2luLWJvdHRvbToxMHB4IWltcG9ydGFudH0udWstbWFyZ2luLXNtYWxsLWxlZnR7bWFyZ2luLWxlZnQ6MTBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1zbWFsbC1yaWdodHttYXJnaW4tcmlnaHQ6MTBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1tZWRpdW17bWFyZ2luLWJvdHRvbTo0MHB4fSorLnVrLW1hcmdpbi1tZWRpdW17bWFyZ2luLXRvcDo0MHB4IWltcG9ydGFudH0udWstbWFyZ2luLW1lZGl1bS10b3B7bWFyZ2luLXRvcDo0MHB4IWltcG9ydGFudH0udWstbWFyZ2luLW1lZGl1bS1ib3R0b217bWFyZ2luLWJvdHRvbTo0MHB4IWltcG9ydGFudH0udWstbWFyZ2luLW1lZGl1bS1sZWZ0e21hcmdpbi1sZWZ0OjQwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tbWVkaXVtLXJpZ2h0e21hcmdpbi1yaWdodDo0MHB4IWltcG9ydGFudH0udWstbWFyZ2luLWxhcmdle21hcmdpbi1ib3R0b206NDBweH0qKy51ay1tYXJnaW4tbGFyZ2V7bWFyZ2luLXRvcDo0MHB4IWltcG9ydGFudH0udWstbWFyZ2luLWxhcmdlLXRvcHttYXJnaW4tdG9wOjQwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tbGFyZ2UtYm90dG9te21hcmdpbi1ib3R0b206NDBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1sYXJnZS1sZWZ0e21hcmdpbi1sZWZ0OjQwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tbGFyZ2UtcmlnaHR7bWFyZ2luLXJpZ2h0OjQwcHghaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LnVrLW1hcmdpbi1sYXJnZXttYXJnaW4tYm90dG9tOjcwcHh9KisudWstbWFyZ2luLWxhcmdle21hcmdpbi10b3A6NzBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1sYXJnZS10b3B7bWFyZ2luLXRvcDo3MHB4IWltcG9ydGFudH0udWstbWFyZ2luLWxhcmdlLWJvdHRvbXttYXJnaW4tYm90dG9tOjcwcHghaW1wb3J0YW50fS51ay1tYXJnaW4tbGFyZ2UtbGVmdHttYXJnaW4tbGVmdDo3MHB4IWltcG9ydGFudH0udWstbWFyZ2luLWxhcmdlLXJpZ2h0e21hcmdpbi1yaWdodDo3MHB4IWltcG9ydGFudH19LnVrLW1hcmdpbi14bGFyZ2V7bWFyZ2luLWJvdHRvbTo3MHB4fSorLnVrLW1hcmdpbi14bGFyZ2V7bWFyZ2luLXRvcDo3MHB4IWltcG9ydGFudH0udWstbWFyZ2luLXhsYXJnZS10b3B7bWFyZ2luLXRvcDo3MHB4IWltcG9ydGFudH0udWstbWFyZ2luLXhsYXJnZS1ib3R0b217bWFyZ2luLWJvdHRvbTo3MHB4IWltcG9ydGFudH0udWstbWFyZ2luLXhsYXJnZS1sZWZ0e21hcmdpbi1sZWZ0OjcwcHghaW1wb3J0YW50fS51ay1tYXJnaW4teGxhcmdlLXJpZ2h0e21hcmdpbi1yaWdodDo3MHB4IWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1tYXJnaW4teGxhcmdle21hcmdpbi1ib3R0b206MTQwcHh9KisudWstbWFyZ2luLXhsYXJnZXttYXJnaW4tdG9wOjE0MHB4IWltcG9ydGFudH0udWstbWFyZ2luLXhsYXJnZS10b3B7bWFyZ2luLXRvcDoxNDBweCFpbXBvcnRhbnR9LnVrLW1hcmdpbi14bGFyZ2UtYm90dG9te21hcmdpbi1ib3R0b206MTQwcHghaW1wb3J0YW50fS51ay1tYXJnaW4teGxhcmdlLWxlZnR7bWFyZ2luLWxlZnQ6MTQwcHghaW1wb3J0YW50fS51ay1tYXJnaW4teGxhcmdlLXJpZ2h0e21hcmdpbi1yaWdodDoxNDBweCFpbXBvcnRhbnR9fS51ay1tYXJnaW4tYXV0b3ttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9LnVrLW1hcmdpbi1hdXRvLXRvcHttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fS51ay1tYXJnaW4tYXV0by1ib3R0b217bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH0udWstbWFyZ2luLWF1dG8tbGVmdHttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH0udWstbWFyZ2luLWF1dG8tcmlnaHR7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fS51ay1tYXJnaW4tYXV0by12ZXJ0aWNhbHttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50O21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9QG1lZGlhIChtaW4td2lkdGg6NjQwcHgpey51ay1tYXJnaW4tYXV0b1xAc3ttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9LnVrLW1hcmdpbi1hdXRvLWxlZnRcQHN7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9LnVrLW1hcmdpbi1hdXRvLXJpZ2h0XEBze21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1tYXJnaW4tYXV0b1xAbXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9LnVrLW1hcmdpbi1hdXRvLWxlZnRcQG17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9LnVrLW1hcmdpbi1hdXRvLXJpZ2h0XEBte21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsudWstbWFyZ2luLWF1dG9cQGx7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fS51ay1tYXJnaW4tYXV0by1sZWZ0XEBse21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fS51ay1tYXJnaW4tYXV0by1yaWdodFxAbHttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjE2MDBweCl7LnVrLW1hcmdpbi1hdXRvXEB4bHttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9LnVrLW1hcmdpbi1hdXRvLWxlZnRcQHhse21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fS51ay1tYXJnaW4tYXV0by1yaWdodFxAeGx7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX0udWstbWFyZ2luLXJlbW92ZXttYXJnaW46MCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1yZW1vdmUtdG9we21hcmdpbi10b3A6MCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1yZW1vdmUtYm90dG9te21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1yZW1vdmUtbGVmdHttYXJnaW4tbGVmdDowIWltcG9ydGFudH0udWstbWFyZ2luLXJlbW92ZS1yaWdodHttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1yZW1vdmUtdmVydGljYWx7bWFyZ2luLXRvcDowIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fS51ay1tYXJnaW4tcmVtb3ZlLWFkamFjZW50KyosLnVrLW1hcmdpbi1yZW1vdmUtZmlyc3QtY2hpbGQ+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6MCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1yZW1vdmUtbGFzdC1jaGlsZD46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjY0MHB4KXsudWstbWFyZ2luLXJlbW92ZS1sZWZ0XEBze21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fS51ay1tYXJnaW4tcmVtb3ZlLXJpZ2h0XEBze21hcmdpbi1yaWdodDowIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTYwcHgpey51ay1tYXJnaW4tcmVtb3ZlLWxlZnRcQG17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1yZW1vdmUtcmlnaHRcQG17bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1tYXJnaW4tcmVtb3ZlLWxlZnRcQGx7bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9LnVrLW1hcmdpbi1yZW1vdmUtcmlnaHRcQGx7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxNjAwcHgpey51ay1tYXJnaW4tcmVtb3ZlLWxlZnRcQHhse21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fS51ay1tYXJnaW4tcmVtb3ZlLXJpZ2h0XEB4bHttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9fS51ay1wYWRkaW5ne3BhZGRpbmc6MzBweH1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1wYWRkaW5ne3BhZGRpbmc6NDBweH19LnVrLXBhZGRpbmctc21hbGx7cGFkZGluZzoxNXB4fS51ay1wYWRkaW5nLWxhcmdle3BhZGRpbmc6NDBweH1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1wYWRkaW5nLWxhcmdle3BhZGRpbmc6NzBweH19LnVrLXBhZGRpbmctcmVtb3Zle3BhZGRpbmc6MCFpbXBvcnRhbnR9LnVrLXBhZGRpbmctcmVtb3ZlLXRvcHtwYWRkaW5nLXRvcDowIWltcG9ydGFudH0udWstcGFkZGluZy1yZW1vdmUtYm90dG9te3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fS51ay1wYWRkaW5nLXJlbW92ZS1sZWZ0e3BhZGRpbmctbGVmdDowIWltcG9ydGFudH0udWstcGFkZGluZy1yZW1vdmUtcmlnaHR7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH0udWstcGFkZGluZy1yZW1vdmUtdmVydGljYWx7cGFkZGluZy10b3A6MCFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9LnVrLXBhZGRpbmctcmVtb3ZlLWhvcml6b250YWx7cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9OnJvb3R7LS11ay1wb3NpdGlvbi1tYXJnaW4tb2Zmc2V0OjBweH1bY2xhc3MqPXVrLXBvc2l0aW9uLWJvdHRvbV0sW2NsYXNzKj11ay1wb3NpdGlvbi1jZW50ZXJdLFtjbGFzcyo9dWstcG9zaXRpb24tbGVmdF0sW2NsYXNzKj11ay1wb3NpdGlvbi1yaWdodF0sW2NsYXNzKj11ay1wb3NpdGlvbi10b3Bde3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDttYXgtd2lkdGg6Y2FsYygxMDAlIC0gKHZhcigtLXVrLXBvc2l0aW9uLW1hcmdpbi1vZmZzZXQpICogMikpO2JveC1zaXppbmc6Ym9yZGVyLWJveH0udWstcG9zaXRpb24tdG9we3RvcDowO2xlZnQ6MDtyaWdodDowfS51ay1wb3NpdGlvbi1ib3R0b217Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjB9LnVrLXBvc2l0aW9uLWxlZnR7dG9wOjA7Ym90dG9tOjA7bGVmdDowfS51ay1wb3NpdGlvbi1yaWdodHt0b3A6MDtib3R0b206MDtyaWdodDowfS51ay1wb3NpdGlvbi10b3AtbGVmdHt0b3A6MDtsZWZ0OjB9LnVrLXBvc2l0aW9uLXRvcC1yaWdodHt0b3A6MDtyaWdodDowfS51ay1wb3NpdGlvbi1ib3R0b20tbGVmdHtib3R0b206MDtsZWZ0OjB9LnVrLXBvc2l0aW9uLWJvdHRvbS1yaWdodHtib3R0b206MDtyaWdodDowfS51ay1wb3NpdGlvbi1jZW50ZXJ7dG9wOmNhbGMoNTAlIC0gdmFyKC0tdWstcG9zaXRpb24tbWFyZ2luLW9mZnNldCkpO2xlZnQ6Y2FsYyg1MCUgLSB2YXIoLS11ay1wb3NpdGlvbi1tYXJnaW4tb2Zmc2V0KSk7LS11ay1wb3NpdGlvbi10cmFuc2xhdGUteDotNTAlOy0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXk6LTUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS14KSx2YXIoLS11ay1wb3NpdGlvbi10cmFuc2xhdGUteSkpO3dpZHRoOm1heC1jb250ZW50fVtjbGFzcyo9dWstcG9zaXRpb24tY2VudGVyLWxlZnRdLFtjbGFzcyo9dWstcG9zaXRpb24tY2VudGVyLXJpZ2h0XXt0b3A6Y2FsYyg1MCUgLSB2YXIoLS11ay1wb3NpdGlvbi1tYXJnaW4tb2Zmc2V0KSk7LS11ay1wb3NpdGlvbi10cmFuc2xhdGUteTotNTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCx2YXIoLS11ay1wb3NpdGlvbi10cmFuc2xhdGUteSkpfS51ay1wb3NpdGlvbi1jZW50ZXItbGVmdHtsZWZ0OjB9LnVrLXBvc2l0aW9uLWNlbnRlci1yaWdodHtyaWdodDowfS51ay1wb3NpdGlvbi1jZW50ZXItbGVmdC1vdXR7cmlnaHQ6MTAwJTt3aWR0aDptYXgtY29udGVudH0udWstcG9zaXRpb24tY2VudGVyLXJpZ2h0LW91dHtsZWZ0OjEwMCU7d2lkdGg6bWF4LWNvbnRlbnR9LnVrLXBvc2l0aW9uLWJvdHRvbS1jZW50ZXIsLnVrLXBvc2l0aW9uLXRvcC1jZW50ZXJ7bGVmdDpjYWxjKDUwJSAtIHZhcigtLXVrLXBvc2l0aW9uLW1hcmdpbi1vZmZzZXQpKTstLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS14Oi01MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS11ay1wb3NpdGlvbi10cmFuc2xhdGUteCksMCk7d2lkdGg6bWF4LWNvbnRlbnR9LnVrLXBvc2l0aW9uLXRvcC1jZW50ZXJ7dG9wOjB9LnVrLXBvc2l0aW9uLWJvdHRvbS1jZW50ZXJ7Ym90dG9tOjB9LnVrLXBvc2l0aW9uLWNvdmVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowfS51ay1wb3NpdGlvbi1zbWFsbHttYXJnaW46MTVweDstLXVrLXBvc2l0aW9uLW1hcmdpbi1vZmZzZXQ6MTVweH0udWstcG9zaXRpb24tbWVkaXVte21hcmdpbjozMHB4Oy0tdWstcG9zaXRpb24tbWFyZ2luLW9mZnNldDozMHB4fS51ay1wb3NpdGlvbi1sYXJnZXttYXJnaW46MzBweDstLXVrLXBvc2l0aW9uLW1hcmdpbi1vZmZzZXQ6MzBweH1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1wb3NpdGlvbi1sYXJnZXttYXJnaW46NTBweDstLXVrLXBvc2l0aW9uLW1hcmdpbi1vZmZzZXQ6NTBweH19LnVrLXBvc2l0aW9uLXJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlIWltcG9ydGFudH0udWstcG9zaXRpb24tYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGUhaW1wb3J0YW50fS51ay1wb3NpdGlvbi1maXhlZHtwb3NpdGlvbjpmaXhlZCFpbXBvcnRhbnR9LnVrLXBvc2l0aW9uLXN0aWNreXtwb3NpdGlvbjpzdGlja3khaW1wb3J0YW50fS51ay1wb3NpdGlvbi16LWluZGV4e3otaW5kZXg6MX0udWstcG9zaXRpb24tei1pbmRleC16ZXJve3otaW5kZXg6MH0udWstcG9zaXRpb24tei1pbmRleC1uZWdhdGl2ZXt6LWluZGV4Oi0xfTp3aGVyZSgudWstdHJhbnNpdGlvbi1mYWRlKSw6d2hlcmUoW2NsYXNzKj11ay10cmFuc2l0aW9uLXNjYWxlXSksOndoZXJlKFtjbGFzcyo9dWstdHJhbnNpdGlvbi1zbGlkZV0pey0tdWstcG9zaXRpb24tdHJhbnNsYXRlLXg6MDstLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS15OjB9LnVrLXRyYW5zaXRpb24tZmFkZSxbY2xhc3MqPXVrLXRyYW5zaXRpb24tc2NhbGVdLFtjbGFzcyo9dWstdHJhbnNpdGlvbi1zbGlkZV17LS11ay10cmFuc2xhdGUteDowOy0tdWstdHJhbnNsYXRlLXk6MDstLXVrLXNjYWxlLXg6MTstLXVrLXNjYWxlLXk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXVrLXBvc2l0aW9uLXRyYW5zbGF0ZS14KSx2YXIoLS11ay1wb3NpdGlvbi10cmFuc2xhdGUteSkpIHRyYW5zbGF0ZSh2YXIoLS11ay10cmFuc2xhdGUteCksdmFyKC0tdWstdHJhbnNsYXRlLXkpKSBzY2FsZSh2YXIoLS11ay1zY2FsZS14KSx2YXIoLS11ay1zY2FsZS15KSk7dHJhbnNpdGlvbjouM3MgZWFzZS1vdXQ7dHJhbnNpdGlvbi1wcm9wZXJ0eTpvcGFjaXR5LHRyYW5zZm9ybSxmaWx0ZXI7b3BhY2l0eTowfS51ay10cmFuc2l0aW9uLWFjdGl2ZS51ay1hY3RpdmUgLnVrLXRyYW5zaXRpb24tZmFkZSwudWstdHJhbnNpdGlvbi10b2dnbGUgLnVrLXRyYW5zaXRpb24tZmFkZTpmb2N1cy13aXRoaW4sLnVrLXRyYW5zaXRpb24tdG9nZ2xlOmZvY3VzIC51ay10cmFuc2l0aW9uLWZhZGUsLnVrLXRyYW5zaXRpb24tdG9nZ2xlOmhvdmVyIC51ay10cmFuc2l0aW9uLWZhZGV7b3BhY2l0eToxfVtjbGFzcyo9dWstdHJhbnNpdGlvbi1zY2FsZV17LXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbn0udWstdHJhbnNpdGlvbi1zY2FsZS11cHstLXVrLXNjYWxlLXg6MTstLXVrLXNjYWxlLXk6MX0udWstdHJhbnNpdGlvbi1zY2FsZS1kb3duey0tdWstc2NhbGUteDoxLjAzOy0tdWstc2NhbGUteToxLjAzfS51ay10cmFuc2l0aW9uLWFjdGl2ZS51ay1hY3RpdmUgLnVrLXRyYW5zaXRpb24tc2NhbGUtdXAsLnVrLXRyYW5zaXRpb24tdG9nZ2xlIC51ay10cmFuc2l0aW9uLXNjYWxlLXVwOmZvY3VzLXdpdGhpbiwudWstdHJhbnNpdGlvbi10b2dnbGU6Zm9jdXMgLnVrLXRyYW5zaXRpb24tc2NhbGUtdXAsLnVrLXRyYW5zaXRpb24tdG9nZ2xlOmhvdmVyIC51ay10cmFuc2l0aW9uLXNjYWxlLXVwey0tdWstc2NhbGUteDoxLjAzOy0tdWstc2NhbGUteToxLjAzO29wYWNpdHk6MX0udWstdHJhbnNpdGlvbi1hY3RpdmUudWstYWN0aXZlIC51ay10cmFuc2l0aW9uLXNjYWxlLWRvd24sLnVrLXRyYW5zaXRpb24tdG9nZ2xlIC51ay10cmFuc2l0aW9uLXNjYWxlLWRvd246Zm9jdXMtd2l0aGluLC51ay10cmFuc2l0aW9uLXRvZ2dsZTpmb2N1cyAudWstdHJhbnNpdGlvbi1zY2FsZS1kb3duLC51ay10cmFuc2l0aW9uLXRvZ2dsZTpob3ZlciAudWstdHJhbnNpdGlvbi1zY2FsZS1kb3duey0tdWstc2NhbGUteDoxOy0tdWstc2NhbGUteToxO29wYWNpdHk6MX0udWstdHJhbnNpdGlvbi1zbGlkZS10b3B7LS11ay10cmFuc2xhdGUteTotMTAwJX0udWstdHJhbnNpdGlvbi1zbGlkZS1ib3R0b217LS11ay10cmFuc2xhdGUteToxMDAlfS51ay10cmFuc2l0aW9uLXNsaWRlLWxlZnR7LS11ay10cmFuc2xhdGUteDotMTAwJX0udWstdHJhbnNpdGlvbi1zbGlkZS1yaWdodHstLXVrLXRyYW5zbGF0ZS14OjEwMCV9LnVrLXRyYW5zaXRpb24tc2xpZGUtdG9wLXNtYWxsey0tdWstdHJhbnNsYXRlLXk6Y2FsYygtMSAqIDEwcHgpfS51ay10cmFuc2l0aW9uLXNsaWRlLWJvdHRvbS1zbWFsbHstLXVrLXRyYW5zbGF0ZS15OjEwcHh9LnVrLXRyYW5zaXRpb24tc2xpZGUtbGVmdC1zbWFsbHstLXVrLXRyYW5zbGF0ZS14OmNhbGMoLTEgKiAxMHB4KX0udWstdHJhbnNpdGlvbi1zbGlkZS1yaWdodC1zbWFsbHstLXVrLXRyYW5zbGF0ZS14OjEwcHh9LnVrLXRyYW5zaXRpb24tc2xpZGUtdG9wLW1lZGl1bXstLXVrLXRyYW5zbGF0ZS15OmNhbGMoLTEgKiA1MHB4KX0udWstdHJhbnNpdGlvbi1zbGlkZS1ib3R0b20tbWVkaXVtey0tdWstdHJhbnNsYXRlLXk6NTBweH0udWstdHJhbnNpdGlvbi1zbGlkZS1sZWZ0LW1lZGl1bXstLXVrLXRyYW5zbGF0ZS14OmNhbGMoLTEgKiA1MHB4KX0udWstdHJhbnNpdGlvbi1zbGlkZS1yaWdodC1tZWRpdW17LS11ay10cmFuc2xhdGUteDo1MHB4fS51ay10cmFuc2l0aW9uLWFjdGl2ZS51ay1hY3RpdmUgW2NsYXNzKj11ay10cmFuc2l0aW9uLXNsaWRlXSwudWstdHJhbnNpdGlvbi10b2dnbGUgW2NsYXNzKj11ay10cmFuc2l0aW9uLXNsaWRlXTpmb2N1cy13aXRoaW4sLnVrLXRyYW5zaXRpb24tdG9nZ2xlOmZvY3VzIFtjbGFzcyo9dWstdHJhbnNpdGlvbi1zbGlkZV0sLnVrLXRyYW5zaXRpb24tdG9nZ2xlOmhvdmVyIFtjbGFzcyo9dWstdHJhbnNpdGlvbi1zbGlkZV17LS11ay10cmFuc2xhdGUteDowOy0tdWstdHJhbnNsYXRlLXk6MDtvcGFjaXR5OjF9LnVrLXRyYW5zaXRpb24tb3BhcXVle29wYWNpdHk6MX0udWstdHJhbnNpdGlvbi1zbG93e3RyYW5zaXRpb24tZHVyYXRpb246LjdzfS51ay1oaWRkZW4sW2hpZGRlbl17ZGlzcGxheTpub25lIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo2NDBweCl7LnVrLWhpZGRlblxAc3tkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5NjBweCl7LnVrLWhpZGRlblxAbXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey51ay1oaWRkZW5cQGx7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTYwMHB4KXsudWstaGlkZGVuXEB4bHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1heC13aWR0aDo2MzlweCl7LnVrLXZpc2libGVcQHN7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtYXgtd2lkdGg6OTU5cHgpey51ay12aXNpYmxlXEBte2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWF4LXdpZHRoOjExOTlweCl7LnVrLXZpc2libGVcQGx7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtYXgtd2lkdGg6MTU5OXB4KXsudWstdmlzaWJsZVxAeGx7ZGlzcGxheTpub25lIWltcG9ydGFudH19LnVrLWludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbiFpbXBvcnRhbnR9LnVrLXZpc2libGUtdG9nZ2xlOm5vdCg6aG92ZXIpOm5vdCg6Zm9jdXMpIC51ay1oaWRkZW4taG92ZXI6bm90KDpmb2N1cy13aXRoaW4pe3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDt3aWR0aDowIWltcG9ydGFudDtoZWlnaHQ6MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudDttYXJnaW46MCFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudH0udWstdmlzaWJsZS10b2dnbGU6bm90KDpob3Zlcik6bm90KDpmb2N1cykgLnVrLWludmlzaWJsZS1ob3Zlcjpub3QoOmZvY3VzLXdpdGhpbil7b3BhY2l0eTowIWltcG9ydGFudH1AbWVkaWEgKGhvdmVyOm5vbmUpey51ay1oaWRkZW4tdG91Y2h7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChob3Zlcil7LnVrLWhpZGRlbi1ub3RvdWNoe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5LC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pLC51ay1saWdodCwudWstb2ZmY2FudmFzLWJhciwudWstb3ZlcmxheS1wcmltYXJ5LC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvciksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvciksLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3Ipe2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saW5rLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IGEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saW5rLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBhLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmssLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBhLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saW5rLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGEsLnVrLWxpZ2h0IC51ay1saW5rLC51ay1saWdodCBhLC51ay1vZmZjYW52YXMtYmFyIC51ay1saW5rLC51ay1vZmZjYW52YXMtYmFyIGEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGluaywudWstb3ZlcmxheS1wcmltYXJ5IGEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluaywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmssLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluaywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYXtjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluaywudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGluazpob3ZlciwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBhOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmssLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saW5rOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBhOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbms6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBhOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluaywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluazpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBhOmhvdmVyLC51ay1saWdodCAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmssLnVrLWxpZ2h0IC51ay1saW5rOmhvdmVyLC51ay1saWdodCBhOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluaywudWstb2ZmY2FudmFzLWJhciAudWstbGluazpob3ZlciwudWstb2ZmY2FudmFzLWJhciBhOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbms6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSBhOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbms6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmssLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbms6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmssLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhOmhvdmVye2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgOm5vdChwcmUpPmNvZGUsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgOm5vdChwcmUpPmtiZCwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSA6bm90KHByZSk+c2FtcCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgOm5vdChwcmUpPmNvZGUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIDpub3QocHJlKT5rYmQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIDpub3QocHJlKT5zYW1wLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgOm5vdChwcmUpPmNvZGUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSA6bm90KHByZSk+a2JkLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgOm5vdChwcmUpPnNhbXAsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgOm5vdChwcmUpPmNvZGUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgOm5vdChwcmUpPmtiZCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSA6bm90KHByZSk+c2FtcCwudWstbGlnaHQgOm5vdChwcmUpPmNvZGUsLnVrLWxpZ2h0IDpub3QocHJlKT5rYmQsLnVrLWxpZ2h0IDpub3QocHJlKT5zYW1wLC51ay1vZmZjYW52YXMtYmFyIDpub3QocHJlKT5jb2RlLC51ay1vZmZjYW52YXMtYmFyIDpub3QocHJlKT5rYmQsLnVrLW9mZmNhbnZhcy1iYXIgOm5vdChwcmUpPnNhbXAsLnVrLW92ZXJsYXktcHJpbWFyeSA6bm90KHByZSk+Y29kZSwudWstb3ZlcmxheS1wcmltYXJ5IDpub3QocHJlKT5rYmQsLnVrLW92ZXJsYXktcHJpbWFyeSA6bm90KHByZSk+c2FtcCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpub3QocHJlKT5jb2RlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOm5vdChwcmUpPmtiZCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpub3QocHJlKT5zYW1wLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSk+Y29kZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOm5vdChwcmUpPmtiZCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOm5vdChwcmUpPnNhbXAsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSk+Y29kZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpub3QocHJlKT5rYmQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6bm90KHByZSk+c2FtcCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOm5vdChwcmUpPmNvZGUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpub3QocHJlKT5rYmQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpub3QocHJlKT5zYW1we2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgZW0sLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGVtLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgZW0sLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgZW0sLnVrLWxpZ2h0IGVtLC51ay1vZmZjYW52YXMtYmFyIGVtLC51ay1vdmVybGF5LXByaW1hcnkgZW0sLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBlbSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgZW0sLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBlbSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgZW17Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaDEsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWgyLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oMywudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaDQsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWg1LC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oNiwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy0yeGxhcmdlLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLWxhcmdlLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLW1lZGl1bSwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1zbWFsbCwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy14bGFyZ2UsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgaDEsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgaDIsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgaDMsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgaDQsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgaDUsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgaDYsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oMSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWgyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaDMsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oNCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWg1LC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaDYsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLTJ4bGFyZ2UsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLWxhcmdlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaGVhZGluZy1tZWRpdW0sLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLXNtYWxsLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaGVhZGluZy14bGFyZ2UsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGgxLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBoMiwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgaDMsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGg0LC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBoNSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgaDYsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaDEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaDIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaDMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaDQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaDUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaDYsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy0yeGxhcmdlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWhlYWRpbmctbGFyZ2UsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1tZWRpdW0sLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1zbWFsbCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLXhsYXJnZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGgxLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgaDIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBoMywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGg0LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgaDUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSBoNiwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaDEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWgyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oMywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaDQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWg1LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oNiwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaGVhZGluZy0yeGxhcmdlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLWxhcmdlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLW1lZGl1bSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaGVhZGluZy1zbWFsbCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaGVhZGluZy14bGFyZ2UsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgaDEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgaDIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgaDMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgaDQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgaDUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgaDYsLnVrLWxpZ2h0IC51ay1oMSwudWstbGlnaHQgLnVrLWgyLC51ay1saWdodCAudWstaDMsLnVrLWxpZ2h0IC51ay1oNCwudWstbGlnaHQgLnVrLWg1LC51ay1saWdodCAudWstaDYsLnVrLWxpZ2h0IC51ay1oZWFkaW5nLTJ4bGFyZ2UsLnVrLWxpZ2h0IC51ay1oZWFkaW5nLWxhcmdlLC51ay1saWdodCAudWstaGVhZGluZy1tZWRpdW0sLnVrLWxpZ2h0IC51ay1oZWFkaW5nLXNtYWxsLC51ay1saWdodCAudWstaGVhZGluZy14bGFyZ2UsLnVrLWxpZ2h0IGgxLC51ay1saWdodCBoMiwudWstbGlnaHQgaDMsLnVrLWxpZ2h0IGg0LC51ay1saWdodCBoNSwudWstbGlnaHQgaDYsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWgxLC51ay1vZmZjYW52YXMtYmFyIC51ay1oMiwudWstb2ZmY2FudmFzLWJhciAudWstaDMsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWg0LC51ay1vZmZjYW52YXMtYmFyIC51ay1oNSwudWstb2ZmY2FudmFzLWJhciAudWstaDYsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWhlYWRpbmctMnhsYXJnZSwudWstb2ZmY2FudmFzLWJhciAudWstaGVhZGluZy1sYXJnZSwudWstb2ZmY2FudmFzLWJhciAudWstaGVhZGluZy1tZWRpdW0sLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWhlYWRpbmctc21hbGwsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWhlYWRpbmcteGxhcmdlLC51ay1vZmZjYW52YXMtYmFyIGgxLC51ay1vZmZjYW52YXMtYmFyIGgyLC51ay1vZmZjYW52YXMtYmFyIGgzLC51ay1vZmZjYW52YXMtYmFyIGg0LC51ay1vZmZjYW52YXMtYmFyIGg1LC51ay1vZmZjYW52YXMtYmFyIGg2LC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWgxLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWgyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWgzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWg0LC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWg1LC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWg2LC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWhlYWRpbmctMnhsYXJnZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oZWFkaW5nLWxhcmdlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWhlYWRpbmctbWVkaXVtLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWhlYWRpbmctc21hbGwsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaGVhZGluZy14bGFyZ2UsLnVrLW92ZXJsYXktcHJpbWFyeSBoMSwudWstb3ZlcmxheS1wcmltYXJ5IGgyLC51ay1vdmVybGF5LXByaW1hcnkgaDMsLnVrLW92ZXJsYXktcHJpbWFyeSBoNCwudWstb3ZlcmxheS1wcmltYXJ5IGg1LC51ay1vdmVybGF5LXByaW1hcnkgaDYsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDMsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDQsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDYsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy0yeGxhcmdlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGFyZ2UsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1tZWRpdW0sLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1zbWFsbCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLXhsYXJnZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGgxLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoMywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGg0LC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoNiwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWgxLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oMywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWg0LC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oNiwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctMnhsYXJnZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGFyZ2UsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLW1lZGl1bSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctc21hbGwsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLXhsYXJnZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGgyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoMywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGg1LC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoNiwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oMSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oMiwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oMywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oNCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oNSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oNiwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLTJ4bGFyZ2UsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1sYXJnZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLW1lZGl1bSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLXNtYWxsLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmcteGxhcmdlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoMiwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGgzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoNSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGg2LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oMiwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWgzLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaDQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oNSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWg2LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy0yeGxhcmdlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1sYXJnZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbWVkaXVtLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1zbWFsbCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmcteGxhcmdlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoMSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGgzLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBoNCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaDUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGg2e2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgYmxvY2txdW90ZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgYmxvY2txdW90ZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGJsb2NrcXVvdGUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgYmxvY2txdW90ZSwudWstbGlnaHQgYmxvY2txdW90ZSwudWstb2ZmY2FudmFzLWJhciBibG9ja3F1b3RlLC51ay1vdmVybGF5LXByaW1hcnkgYmxvY2txdW90ZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGJsb2NrcXVvdGUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGJsb2NrcXVvdGUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBibG9ja3F1b3RlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBibG9ja3F1b3Rle2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgYmxvY2txdW90ZSBmb290ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGJsb2NrcXVvdGUgZm9vdGVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgYmxvY2txdW90ZSBmb290ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgYmxvY2txdW90ZSBmb290ZXIsLnVrLWxpZ2h0IGJsb2NrcXVvdGUgZm9vdGVyLC51ay1vZmZjYW52YXMtYmFyIGJsb2NrcXVvdGUgZm9vdGVyLC51ay1vdmVybGF5LXByaW1hcnkgYmxvY2txdW90ZSBmb290ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBibG9ja3F1b3RlIGZvb3RlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYmxvY2txdW90ZSBmb290ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBibG9ja3F1b3RlIGZvb3RlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYmxvY2txdW90ZSBmb290ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWhyLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IGhyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaHIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGhyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWhyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgaHIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWhyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGhyLC51ay1saWdodCAudWstaHIsLnVrLWxpZ2h0IGhyLC51ay1vZmZjYW52YXMtYmFyIC51ay1ociwudWstb2ZmY2FudmFzLWJhciBociwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1ociwudWstb3ZlcmxheS1wcmltYXJ5IGhyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaHIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1ociwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgaHIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaHIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBociwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBocntib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IDpmb2N1cywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIDpmb2N1cywudWstbGlnaHQgOmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIDpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IDpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOmZvY3VzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOmZvY3VzLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSA6Zm9jdXN7b3V0bGluZS1jb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IDpmb2N1cy12aXNpYmxlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSA6Zm9jdXMtdmlzaWJsZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IDpmb2N1cy12aXNpYmxlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIDpmb2N1cy12aXNpYmxlLC51ay1saWdodCA6Zm9jdXMtdmlzaWJsZSwudWstb2ZmY2FudmFzLWJhciA6Zm9jdXMtdmlzaWJsZSwudWstb3ZlcmxheS1wcmltYXJ5IDpmb2N1cy12aXNpYmxlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOmZvY3VzLXZpc2libGUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpmb2N1cy12aXNpYmxlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgOmZvY3VzLXZpc2libGUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIDpmb2N1cy12aXNpYmxle291dGxpbmUtY29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay1tdXRlZCBhLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IGEudWstbGluay1tdXRlZCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpbmstbXV0ZWQgYSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgYS51ay1saW5rLW11dGVkLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstbXV0ZWQgYSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGEudWstbGluay1tdXRlZCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluay1tdXRlZCBhLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGEudWstbGluay1tdXRlZCwudWstbGlnaHQgLnVrLWxpbmstbXV0ZWQgYSwudWstbGlnaHQgYS51ay1saW5rLW11dGVkLC51ay1vZmZjYW52YXMtYmFyIC51ay1saW5rLW11dGVkIGEsLnVrLW9mZmNhbnZhcy1iYXIgYS51ay1saW5rLW11dGVkLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmstbXV0ZWQgYSwudWstb3ZlcmxheS1wcmltYXJ5IGEudWstbGluay1tdXRlZCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLW11dGVkIGEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstbXV0ZWQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLW11dGVkIGEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay1tdXRlZCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLW11dGVkIGEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstbXV0ZWQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLW11dGVkIGEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay1tdXRlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay1tdXRlZCBhOmhvdmVyLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1tdXRlZCwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBhLnVrLWxpbmstbXV0ZWQ6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saW5rLW11dGVkIGE6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1tdXRlZCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgYS51ay1saW5rLW11dGVkOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstbXV0ZWQgYTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1tdXRlZCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGEudWstbGluay1tdXRlZDpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluay1tdXRlZCBhOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1tdXRlZCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBhLnVrLWxpbmstbXV0ZWQ6aG92ZXIsLnVrLWxpZ2h0IC51ay1saW5rLW11dGVkIGE6aG92ZXIsLnVrLWxpZ2h0IC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1tdXRlZCwudWstbGlnaHQgYS51ay1saW5rLW11dGVkOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1saW5rLW11dGVkIGE6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLW11dGVkLC51ay1vZmZjYW52YXMtYmFyIGEudWstbGluay1tdXRlZDpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saW5rLW11dGVkIGE6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstbXV0ZWQsLnVrLW92ZXJsYXktcHJpbWFyeSBhLnVrLWxpbmstbXV0ZWQ6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1tdXRlZCBhOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLW11dGVkLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLW11dGVkOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1tdXRlZCBhOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstbXV0ZWQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay1tdXRlZDpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLW11dGVkIGE6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstbXV0ZWQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstbXV0ZWQ6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLW11dGVkIGE6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1tdXRlZCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLW11dGVkOmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saW5rLXRleHQgYTpob3ZlciwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstdGV4dCwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSBhLnVrLWxpbmstdGV4dDpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpbmstdGV4dCBhOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstdGV4dCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgYS51ay1saW5rLXRleHQ6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay10ZXh0IGE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstdGV4dCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IGEudWstbGluay10ZXh0OmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saW5rLXRleHQgYTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstdGV4dCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBhLnVrLWxpbmstdGV4dDpob3ZlciwudWstbGlnaHQgLnVrLWxpbmstdGV4dCBhOmhvdmVyLC51ay1saWdodCAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstdGV4dCwudWstbGlnaHQgYS51ay1saW5rLXRleHQ6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpbmstdGV4dCBhOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay10ZXh0LC51ay1vZmZjYW52YXMtYmFyIGEudWstbGluay10ZXh0OmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmstdGV4dCBhOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLXRleHQsLnVrLW92ZXJsYXktcHJpbWFyeSBhLnVrLWxpbmstdGV4dDpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRleHQgYTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay10ZXh0LC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLXRleHQ6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRleHQgYTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLXRleHQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay10ZXh0OmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdGV4dCBhOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLXRleHQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstdGV4dDpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdGV4dCBhOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstdGV4dCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLXRleHQ6aG92ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1oZWFkaW5nLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IGEudWstbGluay1oZWFkaW5nOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGluay1oZWFkaW5nIGE6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1oZWFkaW5nLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSBhLnVrLWxpbmstaGVhZGluZzpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saW5rLWhlYWRpbmcgYTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1oZWFkaW5nLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgYS51ay1saW5rLWhlYWRpbmc6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1oZWFkaW5nLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIGEudWstbGluay1oZWFkaW5nOmhvdmVyLC51ay1saWdodCAudWstbGluay1oZWFkaW5nIGE6aG92ZXIsLnVrLWxpZ2h0IC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1oZWFkaW5nLC51ay1saWdodCBhLnVrLWxpbmstaGVhZGluZzpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstbGluay1oZWFkaW5nIGE6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLWhlYWRpbmcsLnVrLW9mZmNhbnZhcy1iYXIgYS51ay1saW5rLWhlYWRpbmc6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGluay1oZWFkaW5nIGE6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstaGVhZGluZywudWstb3ZlcmxheS1wcmltYXJ5IGEudWstbGluay1oZWFkaW5nOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstdG9nZ2xlOmhvdmVyIC51ay1saW5rLWhlYWRpbmcsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstaGVhZGluZzpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpbmstaGVhZGluZyBhOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstaGVhZGluZywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgYS51ay1saW5rLWhlYWRpbmc6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1oZWFkaW5nIGE6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay10b2dnbGU6aG92ZXIgLnVrLWxpbmstaGVhZGluZywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIGEudWstbGluay1oZWFkaW5nOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGluay1oZWFkaW5nIGE6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saW5rLXRvZ2dsZTpob3ZlciAudWstbGluay1oZWFkaW5nLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSBhLnVrLWxpbmstaGVhZGluZzpob3Zlcntjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLWRpdmlkZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLWRpdmlkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1kaXZpZGVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLWRpdmlkZXIsLnVrLWxpZ2h0IC51ay1oZWFkaW5nLWRpdmlkZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWhlYWRpbmctZGl2aWRlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oZWFkaW5nLWRpdmlkZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1kaXZpZGVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1kaXZpZGVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctZGl2aWRlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctZGl2aWRlcntib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3JlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaGVhZGluZy1idWxsZXQ6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3JlLC51ay1saWdodCAudWstaGVhZGluZy1idWxsZXQ6OmJlZm9yZSwudWstb2ZmY2FudmFzLWJhciAudWstaGVhZGluZy1idWxsZXQ6OmJlZm9yZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3JlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctYnVsbGV0OjpiZWZvcmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctYnVsbGV0OjpiZWZvcmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1oZWFkaW5nLWJ1bGxldDo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1oZWFkaW5nLWxpbmU+OjphZnRlciwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1saW5lPjo6YmVmb3JlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaGVhZGluZy1saW5lPjo6YWZ0ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLWxpbmU+OjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1saW5lPjo6YWZ0ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaGVhZGluZy1saW5lPjo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1oZWFkaW5nLWxpbmU+OjphZnRlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaGVhZGluZy1saW5lPjo6YmVmb3JlLC51ay1saWdodCAudWstaGVhZGluZy1saW5lPjo6YWZ0ZXIsLnVrLWxpZ2h0IC51ay1oZWFkaW5nLWxpbmU+OjpiZWZvcmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWhlYWRpbmctbGluZT46OmFmdGVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1oZWFkaW5nLWxpbmU+OjpiZWZvcmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaGVhZGluZy1saW5lPjo6YWZ0ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaGVhZGluZy1saW5lPjo6YmVmb3JlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGluZT46OmFmdGVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGluZT46OmJlZm9yZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGluZT46OmFmdGVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lPjo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGluZT46OmFmdGVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGluZT46OmJlZm9yZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWhlYWRpbmctbGluZT46OmFmdGVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaGVhZGluZy1saW5lPjo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItaWNvbiwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRpdmlkZXItaWNvbiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1kaXZpZGVyLWljb24sLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRpdmlkZXItaWNvbiwudWstbGlnaHQgLnVrLWRpdmlkZXItaWNvbiwudWstb2ZmY2FudmFzLWJhciAudWstZGl2aWRlci1pY29uLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWRpdmlkZXItaWNvbiwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb24sLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb24sLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1pY29uLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjIwJTIyJTIwaGVpZ2h0JTNEJTIyMjAlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAyMCUyMDIwJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NjaXJjbGUlMjBmaWxsJTNEJTIybm9uZSUyMiUyMHN0cm9rZSUzRCUyMnJnYmElMjgyNTUsJTIwMjU1LCUyMDI1NSwlMjAwLjIlMjklMjIlMjBzdHJva2Utd2lkdGglM0QlMjIyJTIyJTIwY3glM0QlMjIxMCUyMiUyMGN5JTNEJTIyMTAlMjIlMjByJTNEJTIyNyUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kaXZpZGVyLWljb246OmFmdGVyLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRpdmlkZXItaWNvbjo6YWZ0ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1kaXZpZGVyLWljb246OmFmdGVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItaWNvbjo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1kaXZpZGVyLWljb246OmFmdGVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwudWstbGlnaHQgLnVrLWRpdmlkZXItaWNvbjo6YWZ0ZXIsLnVrLWxpZ2h0IC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwudWstb2ZmY2FudmFzLWJhciAudWstZGl2aWRlci1pY29uOjphZnRlciwudWstb2ZmY2FudmFzLWJhciAudWstZGl2aWRlci1pY29uOjpiZWZvcmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZGl2aWRlci1pY29uOjphZnRlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1kaXZpZGVyLWljb246OmJlZm9yZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb246OmFmdGVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItaWNvbjo6YmVmb3JlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1pY29uOjphZnRlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItaWNvbjo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItaWNvbjo6YWZ0ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1pY29uOjpiZWZvcmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLWljb246OmFmdGVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1pY29uOjpiZWZvcmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstZGl2aWRlci1zbWFsbDo6YWZ0ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZGl2aWRlci1zbWFsbDo6YWZ0ZXIsLnVrLWxpZ2h0IC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwudWstb2ZmY2FudmFzLWJhciAudWstZGl2aWRlci1zbWFsbDo6YWZ0ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZGl2aWRlci1zbWFsbDo6YWZ0ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci1zbWFsbDo6YWZ0ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kaXZpZGVyLXNtYWxsOjphZnRlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItc21hbGw6OmFmdGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItdmVydGljYWwsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1kaXZpZGVyLXZlcnRpY2FsLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRpdmlkZXItdmVydGljYWwsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRpdmlkZXItdmVydGljYWwsLnVrLWxpZ2h0IC51ay1kaXZpZGVyLXZlcnRpY2FsLC51ay1vZmZjYW52YXMtYmFyIC51ay1kaXZpZGVyLXZlcnRpY2FsLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWRpdmlkZXItdmVydGljYWwsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci12ZXJ0aWNhbCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItdmVydGljYWwsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZGl2aWRlci12ZXJ0aWNhbCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRpdmlkZXItdmVydGljYWx7Ym9yZGVyLWxlZnQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3QtbXV0ZWQ+OjpiZWZvcmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saXN0LW11dGVkPjo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3QtbXV0ZWQ+OjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpc3QtbXV0ZWQ+OjpiZWZvcmUsLnVrLWxpZ2h0IC51ay1saXN0LW11dGVkPjo6YmVmb3JlLC51ay1vZmZjYW52YXMtYmFyIC51ay1saXN0LW11dGVkPjo6YmVmb3JlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpc3QtbXV0ZWQ+OjpiZWZvcmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1tdXRlZD46OmJlZm9yZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtbXV0ZWQ+OjpiZWZvcmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1tdXRlZD46OmJlZm9yZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtbXV0ZWQ+OjpiZWZvcmV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSkhaW1wb3J0YW50fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saXN0LWVtcGhhc2lzPjo6YmVmb3JlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGlzdC1lbXBoYXNpcz46OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saXN0LWVtcGhhc2lzPjo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saXN0LWVtcGhhc2lzPjo6YmVmb3JlLC51ay1saWdodCAudWstbGlzdC1lbXBoYXNpcz46OmJlZm9yZSwudWstb2ZmY2FudmFzLWJhciAudWstbGlzdC1lbXBoYXNpcz46OmJlZm9yZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saXN0LWVtcGhhc2lzPjo6YmVmb3JlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtZW1waGFzaXM+OjpiZWZvcmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWVtcGhhc2lzPjo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtZW1waGFzaXM+OjpiZWZvcmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWVtcGhhc2lzPjo6YmVmb3Jle2NvbG9yOiNmZmYhaW1wb3J0YW50fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saXN0LXByaW1hcnk+OjpiZWZvcmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saXN0LXByaW1hcnk+OjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGlzdC1wcmltYXJ5Pjo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saXN0LXByaW1hcnk+OjpiZWZvcmUsLnVrLWxpZ2h0IC51ay1saXN0LXByaW1hcnk+OjpiZWZvcmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxpc3QtcHJpbWFyeT46OmJlZm9yZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saXN0LXByaW1hcnk+OjpiZWZvcmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1wcmltYXJ5Pjo6YmVmb3JlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1wcmltYXJ5Pjo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtcHJpbWFyeT46OmJlZm9yZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtcHJpbWFyeT46OmJlZm9yZXtjb2xvcjojZmZmIWltcG9ydGFudH0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGlzdC1zZWNvbmRhcnk+OjpiZWZvcmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saXN0LXNlY29uZGFyeT46OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saXN0LXNlY29uZGFyeT46OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGlzdC1zZWNvbmRhcnk+OjpiZWZvcmUsLnVrLWxpZ2h0IC51ay1saXN0LXNlY29uZGFyeT46OmJlZm9yZSwudWstb2ZmY2FudmFzLWJhciAudWstbGlzdC1zZWNvbmRhcnk+OjpiZWZvcmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGlzdC1zZWNvbmRhcnk+OjpiZWZvcmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1zZWNvbmRhcnk+OjpiZWZvcmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXNlY29uZGFyeT46OmJlZm9yZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXNlY29uZGFyeT46OmJlZm9yZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3Qtc2Vjb25kYXJ5Pjo6YmVmb3Jle2NvbG9yOiNmZmYhaW1wb3J0YW50fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saXN0LWJ1bGxldD46OmJlZm9yZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpc3QtYnVsbGV0Pjo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3QtYnVsbGV0Pjo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saXN0LWJ1bGxldD46OmJlZm9yZSwudWstbGlnaHQgLnVrLWxpc3QtYnVsbGV0Pjo6YmVmb3JlLC51ay1vZmZjYW52YXMtYmFyIC51ay1saXN0LWJ1bGxldD46OmJlZm9yZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saXN0LWJ1bGxldD46OmJlZm9yZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWJ1bGxldD46OmJlZm9yZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtYnVsbGV0Pjo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtYnVsbGV0Pjo6YmVmb3JlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1idWxsZXQ+OjpiZWZvcmV7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyNiUyMiUyMGhlaWdodCUzRCUyMjYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjA2JTIwNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDY2lyY2xlJTIwZmlsbCUzRCUyMnJnYmElMjgyNTUsJTIwMjU1LCUyMDI1NSwlMjAwLjclMjklMjIlMjBjeCUzRCUyMjMlMjIlMjBjeSUzRCUyMjMlMjIlMjByJTNEJTIyMyUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1saXN0LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGlzdC1kaXZpZGVyPjpudGgtY2hpbGQobisyKSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saXN0LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1saXN0LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpLC51ay1saWdodCAudWstbGlzdC1kaXZpZGVyPjpudGgtY2hpbGQobisyKSwudWstb2ZmY2FudmFzLWJhciAudWstbGlzdC1kaXZpZGVyPjpudGgtY2hpbGQobisyKSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1saXN0LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtZGl2aWRlcj46bnRoLWNoaWxkKG4rMiksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3QtZGl2aWRlcj46bnRoLWNoaWxkKG4rMiksLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpe2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3Qtc3RyaXBlZD46bnRoLW9mLXR5cGUob2RkKSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpc3Qtc3RyaXBlZD46bnRoLW9mLXR5cGUob2RkKSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1saXN0LXN0cmlwZWQ+Om50aC1vZi10eXBlKG9kZCksLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxpc3Qtc3RyaXBlZD46bnRoLW9mLXR5cGUob2RkKSwudWstbGlnaHQgLnVrLWxpc3Qtc3RyaXBlZD46bnRoLW9mLXR5cGUob2RkKSwudWstb2ZmY2FudmFzLWJhciAudWstbGlzdC1zdHJpcGVkPjpudGgtb2YtdHlwZShvZGQpLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxpc3Qtc3RyaXBlZD46bnRoLW9mLXR5cGUob2RkKSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXN0cmlwZWQ+Om50aC1vZi10eXBlKG9kZCksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXN0cmlwZWQ+Om50aC1vZi10eXBlKG9kZCksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1zdHJpcGVkPjpudGgtb2YtdHlwZShvZGQpLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGlzdC1zdHJpcGVkPjpudGgtb2YtdHlwZShvZGQpe2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMik7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbGlzdC1zdHJpcGVkPjpudGgtb2YtdHlwZShvZGQpLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGlzdC1zdHJpcGVkPjpudGgtb2YtdHlwZShvZGQpLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxpc3Qtc3RyaXBlZD46bnRoLW9mLXR5cGUob2RkKSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGlzdC1zdHJpcGVkPjpudGgtb2YtdHlwZShvZGQpLC51ay1saWdodCAudWstbGlzdC1zdHJpcGVkPjpudGgtb2YtdHlwZShvZGQpLC51ay1vZmZjYW52YXMtYmFyIC51ay1saXN0LXN0cmlwZWQ+Om50aC1vZi10eXBlKG9kZCksLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbGlzdC1zdHJpcGVkPjpudGgtb2YtdHlwZShvZGQpLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3Qtc3RyaXBlZD46bnRoLW9mLXR5cGUob2RkKSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxpc3Qtc3RyaXBlZD46bnRoLW9mLXR5cGUob2RkKSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXN0cmlwZWQ+Om50aC1vZi10eXBlKG9kZCksLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1saXN0LXN0cmlwZWQ+Om50aC1vZi10eXBlKG9kZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUgdGgsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZSB0aCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSB0aCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUgdGgsLnVrLWxpZ2h0IC51ay10YWJsZSB0aCwudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUgdGgsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUgdGgsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUgdGgsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSB0aCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSB0aCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlIHRoe2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSBjYXB0aW9uLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUgY2FwdGlvbiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSBjYXB0aW9uLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZSBjYXB0aW9uLC51ay1saWdodCAudWstdGFibGUgY2FwdGlvbiwudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUgY2FwdGlvbiwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWJsZSBjYXB0aW9uLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlIGNhcHRpb24sLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSBjYXB0aW9uLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlIGNhcHRpb24sLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSBjYXB0aW9ue2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlPnRyLnVrLWFjdGl2ZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlIHRib2R5IHRyLnVrLWFjdGl2ZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlPnRyLnVrLWFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGU+dHIudWstYWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlPnRyLnVrLWFjdGl2ZSwudWstbGlnaHQgLnVrLXRhYmxlIHRib2R5IHRyLnVrLWFjdGl2ZSwudWstbGlnaHQgLnVrLXRhYmxlPnRyLnVrLWFjdGl2ZSwudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUgdGJvZHkgdHIudWstYWN0aXZlLC51ay1vZmZjYW52YXMtYmFyIC51ay10YWJsZT50ci51ay1hY3RpdmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUgdGJvZHkgdHIudWstYWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYmxlPnRyLnVrLWFjdGl2ZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGU+dHIudWstYWN0aXZlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUgdGJvZHkgdHIudWstYWN0aXZlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGU+dHIudWstYWN0aXZlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlIHRib2R5IHRyLnVrLWFjdGl2ZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZT50ci51ay1hY3RpdmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZSB0Ym9keSB0ci51ay1hY3RpdmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZT50ci51ay1hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wOCl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWRpdmlkZXI+OmZpcnN0LWNoaWxkPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1kaXZpZGVyPjpub3QoOmZpcnN0LWNoaWxkKT50ciwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtZGl2aWRlcj50cjpub3QoOmZpcnN0LWNoaWxkKSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlLWRpdmlkZXI+OmZpcnN0LWNoaWxkPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtZGl2aWRlcj46bm90KDpmaXJzdC1jaGlsZCk+dHIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZS1kaXZpZGVyPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWRpdmlkZXI+OmZpcnN0LWNoaWxkPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWRpdmlkZXI+Om5vdCg6Zmlyc3QtY2hpbGQpPnRyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWRpdmlkZXI+dHI6bm90KDpmaXJzdC1jaGlsZCksLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlLWRpdmlkZXI+OmZpcnN0LWNoaWxkPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZS1kaXZpZGVyPjpub3QoOmZpcnN0LWNoaWxkKT50ciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtZGl2aWRlcj50cjpub3QoOmZpcnN0LWNoaWxkKSwudWstbGlnaHQgLnVrLXRhYmxlLWRpdmlkZXI+OmZpcnN0LWNoaWxkPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1saWdodCAudWstdGFibGUtZGl2aWRlcj46bm90KDpmaXJzdC1jaGlsZCk+dHIsLnVrLWxpZ2h0IC51ay10YWJsZS1kaXZpZGVyPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1vZmZjYW52YXMtYmFyIC51ay10YWJsZS1kaXZpZGVyPjpmaXJzdC1jaGlsZD50cjpub3QoOmZpcnN0LWNoaWxkKSwudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUtZGl2aWRlcj46bm90KDpmaXJzdC1jaGlsZCk+dHIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlLWRpdmlkZXI+dHI6bm90KDpmaXJzdC1jaGlsZCksLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUtZGl2aWRlcj46Zmlyc3QtY2hpbGQ+dHI6bm90KDpmaXJzdC1jaGlsZCksLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUtZGl2aWRlcj46bm90KDpmaXJzdC1jaGlsZCk+dHIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUtZGl2aWRlcj50cjpub3QoOmZpcnN0LWNoaWxkKSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyPjpmaXJzdC1jaGlsZD50cjpub3QoOmZpcnN0LWNoaWxkKSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyPjpub3QoOmZpcnN0LWNoaWxkKT50ciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlcj46Zmlyc3QtY2hpbGQ+dHI6bm90KDpmaXJzdC1jaGlsZCksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyPjpub3QoOmZpcnN0LWNoaWxkKT50ciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWRpdmlkZXI+dHI6bm90KDpmaXJzdC1jaGlsZCksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlcj46Zmlyc3QtY2hpbGQ+dHI6bm90KDpmaXJzdC1jaGlsZCksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlcj46bm90KDpmaXJzdC1jaGlsZCk+dHIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlcj50cjpub3QoOmZpcnN0LWNoaWxkKSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWRpdmlkZXI+OmZpcnN0LWNoaWxkPnRyOm5vdCg6Zmlyc3QtY2hpbGQpLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtZGl2aWRlcj46bm90KDpmaXJzdC1jaGlsZCk+dHIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1kaXZpZGVyPnRyOm5vdCg6Zmlyc3QtY2hpbGQpe2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZShvZGQpLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZShvZGQpLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1zdHJpcGVkPnRyOm50aC1vZi10eXBlKG9kZCksLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZShvZGQpLC51ay1saWdodCAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpLC51ay1saWdodCAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZShvZGQpLC51ay1vZmZjYW52YXMtYmFyIC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKG9kZCksLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlLXN0cmlwZWQ+dHI6bnRoLW9mLXR5cGUob2RkKSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKG9kZCksLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZShvZGQpLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkPnRyOm50aC1vZi10eXBlKG9kZCksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKG9kZCksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkPnRyOm50aC1vZi10eXBlKG9kZCksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZShvZGQpLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQ+dHI6bnRoLW9mLXR5cGUob2RkKSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUob2RkKSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQ+dHI6bnRoLW9mLXR5cGUob2RkKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEpO2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMik7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLWhvdmVyPnRyOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZS1ob3Zlcj50cjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWJsZS1ob3Zlcj50cjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlLWhvdmVyPnRyOmhvdmVyLC51ay1saWdodCAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsLnVrLWxpZ2h0IC51ay10YWJsZS1ob3Zlcj50cjpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYmxlLWhvdmVyPnRyOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYmxlLWhvdmVyPnRyOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWhvdmVyPnRyOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1ob3Zlcj50cjpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1ob3Zlcj50cjpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtaG92ZXI+dHI6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wOCl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWljb24tbGluaywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb24tbGluaywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWxpbmssLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb24tbGluaywudWstbGlnaHQgLnVrLWljb24tbGluaywudWstb2ZmY2FudmFzLWJhciAudWstaWNvbi1saW5rLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWljb24tbGluaywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbmssLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbmssLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5re2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWxpbms6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29uLWxpbms6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1saW5rOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29uLWxpbms6aG92ZXIsLnVrLWxpZ2h0IC51ay1pY29uLWxpbms6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWljb24tbGluazpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pY29uLWxpbms6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tbGluazpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tbGluazpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYWN0aXZlPi51ay1pY29uLWxpbmssLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWljb24tbGluazphY3RpdmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1hY3RpdmU+LnVrLWljb24tbGluaywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb24tbGluazphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYWN0aXZlPi51ay1pY29uLWxpbmssLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1saW5rOmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYWN0aXZlPi51ay1pY29uLWxpbmssLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb24tbGluazphY3RpdmUsLnVrLWxpZ2h0IC51ay1hY3RpdmU+LnVrLWljb24tbGluaywudWstbGlnaHQgLnVrLWljb24tbGluazphY3RpdmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWFjdGl2ZT4udWstaWNvbi1saW5rLC51ay1vZmZjYW52YXMtYmFyIC51ay1pY29uLWxpbms6YWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWFjdGl2ZT4udWstaWNvbi1saW5rLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWljb24tbGluazphY3RpdmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWN0aXZlPi51ay1pY29uLWxpbmssLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rOmFjdGl2ZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjdGl2ZT4udWstaWNvbi1saW5rLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1saW5rOmFjdGl2ZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY3RpdmU+LnVrLWljb24tbGluaywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbms6YWN0aXZlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWN0aXZlPi51ay1pY29uLWxpbmssLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWxpbms6YWN0aXZle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWJ1dHRvbiwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb24tYnV0dG9uLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWljb24tYnV0dG9uLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29uLWJ1dHRvbiwudWstbGlnaHQgLnVrLWljb24tYnV0dG9uLC51ay1vZmZjYW52YXMtYmFyIC51ay1pY29uLWJ1dHRvbiwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pY29uLWJ1dHRvbiwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbiwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tYnV0dG9uLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tYnV0dG9uLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKTtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1idXR0b246aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29uLWJ1dHRvbjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWJ1dHRvbjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaWNvbi1idXR0b246aG92ZXIsLnVrLWxpZ2h0IC51ay1pY29uLWJ1dHRvbjpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstaWNvbi1idXR0b246aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaWNvbi1idXR0b246aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b246aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbjpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29uLWJ1dHRvbjpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tYnV0dG9uOmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTUpO2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pY29uLWJ1dHRvbjphY3RpdmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29uLWJ1dHRvbjphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbi1idXR0b246YWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29uLWJ1dHRvbjphY3RpdmUsLnVrLWxpZ2h0IC51ay1pY29uLWJ1dHRvbjphY3RpdmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWljb24tYnV0dG9uOmFjdGl2ZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pY29uLWJ1dHRvbjphY3RpdmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b246YWN0aXZlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbi1idXR0b246YWN0aXZlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tYnV0dG9uOmFjdGl2ZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb24tYnV0dG9uOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpO2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pbnB1dCwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VsZWN0LC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10ZXh0YXJlYSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWlucHV0LC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VsZWN0LC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dGFyZWEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VsZWN0LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHRhcmVhLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pbnB1dCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VsZWN0LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10ZXh0YXJlYSwudWstbGlnaHQgLnVrLWlucHV0LC51ay1saWdodCAudWstc2VsZWN0LC51ay1saWdodCAudWstdGV4dGFyZWEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWlucHV0LC51ay1vZmZjYW52YXMtYmFyIC51ay1zZWxlY3QsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRleHRhcmVhLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWlucHV0LC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlbGVjdCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10ZXh0YXJlYSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWxlY3QsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dGFyZWEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dGFyZWF7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKTtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pbnB1dDpmb2N1cywudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VsZWN0OmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10ZXh0YXJlYTpmb2N1cywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWlucHV0OmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VsZWN0OmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dGFyZWE6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXQ6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VsZWN0OmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHRhcmVhOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pbnB1dDpmb2N1cywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VsZWN0OmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10ZXh0YXJlYTpmb2N1cywudWstbGlnaHQgLnVrLWlucHV0OmZvY3VzLC51ay1saWdodCAudWstc2VsZWN0OmZvY3VzLC51ay1saWdodCAudWstdGV4dGFyZWE6Zm9jdXMsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWlucHV0OmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1zZWxlY3Q6Zm9jdXMsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRleHRhcmVhOmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWlucHV0OmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlbGVjdDpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay10ZXh0YXJlYTpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dDpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWxlY3Q6Zm9jdXMsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dGFyZWE6Zm9jdXMsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dDpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdDpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhOmZvY3VzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0OmZvY3VzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdDpmb2N1cywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYTpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0OmZvY3VzLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0OmZvY3VzLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dGFyZWE6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xNSk7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyk7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLWxpZ2h0IC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWlucHV0OjpwbGFjZWhvbGRlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0OjpwbGFjZWhvbGRlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHRhcmVhOjpwbGFjZWhvbGRlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLC51ay1saWdodCAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLC51ay1vZmZjYW52YXMtYmFyIC51ay10ZXh0YXJlYTo6cGxhY2Vob2xkZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGV4dGFyZWE6OnBsYWNlaG9sZGVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhOjpwbGFjZWhvbGRlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHRhcmVhOjpwbGFjZWhvbGRlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYTo6cGxhY2Vob2xkZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0YXJlYTo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksLnVrLWxpZ2h0IC51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pLC51ay1vZmZjYW52YXMtYmFyIC51ay1zZWxlY3Q6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpub3QoW3NpemVdKSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlbGVjdDpub3QoW211bHRpcGxlXSk6bm90KFtzaXplXSl7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMjQlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDI0JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIycmdiYSUyODI1NSwlMjAyNTUsJTIwMjU1LCUyMDAuNyUyOSUyMiUyMHBvaW50cyUzRCUyMjEyJTIwMSUyMDklMjA2JTIwMTUlMjA2JTIyJTIwJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjJyZ2JhJTI4MjU1LCUyMDI1NSwlMjAyNTUsJTIwMC43JTI5JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxMyUyMDklMjA4JTIwMTUlMjA4JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWlucHV0W2xpc3RdOmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pbnB1dFtsaXN0XTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWlucHV0W2xpc3RdOmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaW5wdXRbbGlzdF06aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXRbbGlzdF06Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaW5wdXRbbGlzdF06aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWlucHV0W2xpc3RdOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pbnB1dFtsaXN0XTpob3ZlciwudWstbGlnaHQgLnVrLWlucHV0W2xpc3RdOmZvY3VzLC51ay1saWdodCAudWstaW5wdXRbbGlzdF06aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWlucHV0W2xpc3RdOmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1pbnB1dFtsaXN0XTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pbnB1dFtsaXN0XTpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pbnB1dFtsaXN0XTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dFtsaXN0XTpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dFtsaXN0XTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0W2xpc3RdOmZvY3VzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXRbbGlzdF06aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXRbbGlzdF06Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaW5wdXRbbGlzdF06aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pbnB1dFtsaXN0XTpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWlucHV0W2xpc3RdOmhvdmVye2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD1VVEYtOCwlM0NzdmclMjB3aWR0aCUzRCUyMjI0JTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAyNCUyMDE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMnJnYmElMjgyNTUsJTIwMjU1LCUyMDI1NSwlMjAwLjclMjklMjIlMjBwb2ludHMlM0QlMjIxMiUyMDEyJTIwOCUyMDYlMjAxNiUyMDYlMjIlMjAlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEiKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3gsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXJhZGlvLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2hlY2tib3gsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1yYWRpbywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1yYWRpbywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2hlY2tib3gsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXJhZGlvLC51ay1saWdodCAudWstY2hlY2tib3gsLnVrLWxpZ2h0IC51ay1yYWRpbywudWstb2ZmY2FudmFzLWJhciAudWstY2hlY2tib3gsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXJhZGlvLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNoZWNrYm94LC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXJhZGlvLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94LC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXJhZGlvLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3gsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW97YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKTtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1yYWRpbzpmb2N1cywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNoZWNrYm94OmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcmFkaW86Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNoZWNrYm94OmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1yYWRpbzpmb2N1cywudWstbGlnaHQgLnVrLWNoZWNrYm94OmZvY3VzLC51ay1saWdodCAudWstcmFkaW86Zm9jdXMsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWNoZWNrYm94OmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1yYWRpbzpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1jaGVja2JveDpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1yYWRpbzpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmZvY3VzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXJhZGlvOmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTUpO2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6Y2hlY2tlZCwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Y2hlY2tlZCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcmFkaW86Y2hlY2tlZCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveDpjaGVja2VkLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Y2hlY2tlZCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2hlY2tib3g6Y2hlY2tlZCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcmFkaW86Y2hlY2tlZCwudWstbGlnaHQgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLWxpZ2h0IC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay1saWdodCAudWstcmFkaW86Y2hlY2tlZCwudWstb2ZmY2FudmFzLWJhciAudWstY2hlY2tib3g6Y2hlY2tlZCwudWstb2ZmY2FudmFzLWJhciAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwudWstb2ZmY2FudmFzLWJhciAudWstcmFkaW86Y2hlY2tlZCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1jaGVja2JveDpjaGVja2VkLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstcmFkaW86Y2hlY2tlZCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpjaGVja2VkLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDpjaGVja2VkLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveDpjaGVja2VkOmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1jaGVja2JveDppbmRldGVybWluYXRlOmZvY3VzLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGU6Zm9jdXMsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmNoZWNrZWQ6Zm9jdXMsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1jaGVja2JveDpjaGVja2VkOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1jaGVja2JveDppbmRldGVybWluYXRlOmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1saWdodCAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywudWstbGlnaHQgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGU6Zm9jdXMsLnVrLWxpZ2h0IC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1jaGVja2JveDpjaGVja2VkOmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1jaGVja2JveDppbmRldGVybWluYXRlOmZvY3VzLC51ay1vZmZjYW52YXMtYmFyIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNoZWNrYm94OmNoZWNrZWQ6Zm9jdXMsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQ6Zm9jdXMsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGU6Zm9jdXMsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQ6Zm9jdXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZTpmb2N1cywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkOmZvY3VzLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZDpmb2N1cywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGU6Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkOmZvY3Vze2JhY2tncm91bmQtY29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Y2hlY2tlZCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXJhZGlvOmNoZWNrZWQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstcmFkaW86Y2hlY2tlZCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcmFkaW86Y2hlY2tlZCwudWstbGlnaHQgLnVrLXJhZGlvOmNoZWNrZWQsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXJhZGlvOmNoZWNrZWQsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstcmFkaW86Y2hlY2tlZCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1yYWRpbzpjaGVja2VkLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcmFkaW86Y2hlY2tlZHtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9VVRGLTgsJTNDc3ZnJTIwd2lkdGglM0QlMjIxNiUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTYlMjAxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDY2lyY2xlJTIwZmlsbCUzRCUyMiUyMzY2NiUyMiUyMGN4JTNEJTIyOCUyMiUyMGN5JTNEJTIyOCUyMiUyMHIlM0QlMjIyJTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1jaGVja2JveDpjaGVja2VkLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLWxpZ2h0IC51ay1jaGVja2JveDpjaGVja2VkLC51ay1vZmZjYW52YXMtYmFyIC51ay1jaGVja2JveDpjaGVja2VkLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6Y2hlY2tlZCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmNoZWNrZWR7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTQlMjIlMjBoZWlnaHQlM0QlMjIxMSUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE0JTIwMTElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIwcG9pbnRzJTNEJTIyMTIlMjAxJTIwNSUyMDcuNSUyMDIlMjA1JTIwMSUyMDUuNSUyMDUlMjAxMCUyMDEzJTIwMS41JTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLWxpZ2h0IC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay1vZmZjYW52YXMtYmFyIC51ay1jaGVja2JveDppbmRldGVybWluYXRlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2hlY2tib3g6aW5kZXRlcm1pbmF0ZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNoZWNrYm94OmluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTYlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE2JTIwMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzNjY2JTIyJTIweCUzRCUyMjMlMjIlMjB5JTNEJTIyOCUyMiUyMHdpZHRoJTNEJTIyMTAlMjIlMjBoZWlnaHQlM0QlMjIxJTIyJTIwJTJGJTNFJTBBJTNDJTJGc3ZnJTNFIil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWZvcm0tbGFiZWwsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1mb3JtLWxhYmVsLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWZvcm0tbGFiZWwsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWZvcm0tbGFiZWwsLnVrLWxpZ2h0IC51ay1mb3JtLWxhYmVsLC51ay1vZmZjYW52YXMtYmFyIC51ay1mb3JtLWxhYmVsLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWZvcm0tbGFiZWwsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1sYWJlbCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWZvcm0tbGFiZWwsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1sYWJlbCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWZvcm0tbGFiZWx7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstZm9ybS1pY29uLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZm9ybS1pY29uLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWZvcm0taWNvbiwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZm9ybS1pY29uLC51ay1saWdodCAudWstZm9ybS1pY29uLC51ay1vZmZjYW52YXMtYmFyIC51ay1mb3JtLWljb24sLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZm9ybS1pY29uLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWZvcm0taWNvbiwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWZvcm0taWNvbiwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1mb3JtLWljb24sLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1mb3JtLWljb257Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWZvcm0taWNvbjpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWZvcm0taWNvbjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1mb3JtLWljb246aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWZvcm0taWNvbjpob3ZlciwudWstbGlnaHQgLnVrLWZvcm0taWNvbjpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstZm9ybS1pY29uOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWZvcm0taWNvbjpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1mb3JtLWljb246aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1mb3JtLWljb246aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1pY29uOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZm9ybS1pY29uOmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tZGVmYXVsdCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1kZWZhdWx0LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1kZWZhdWx0LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tZGVmYXVsdCwudWstbGlnaHQgLnVrLWJ1dHRvbi1kZWZhdWx0LC51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tZGVmYXVsdCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tZGVmYXVsdCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojZmZmO2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWRlZmF1bHQ6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLWRlZmF1bHQ6aG92ZXIsLnVrLWxpZ2h0IC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLWRlZmF1bHQ6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLWRlZmF1bHQ6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQ6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdDpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0OmhvdmVye2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tZGVmYXVsdDphY3RpdmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tZGVmYXVsdC51ay1hY3RpdmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tZGVmYXVsdDphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1kZWZhdWx0OmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tZGVmYXVsdDphY3RpdmUsLnVrLWxpZ2h0IC51ay1idXR0b24tZGVmYXVsdC51ay1hY3RpdmUsLnVrLWxpZ2h0IC51ay1idXR0b24tZGVmYXVsdDphY3RpdmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1kZWZhdWx0LnVrLWFjdGl2ZSwudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1kZWZhdWx0LnVrLWFjdGl2ZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tZGVmYXVsdDphY3RpdmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0OmFjdGl2ZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0LnVrLWFjdGl2ZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1kZWZhdWx0OmFjdGl2ZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tZGVmYXVsdC51ay1hY3RpdmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQudWstYWN0aXZlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWRlZmF1bHQ6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXByaW1hcnksLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tcHJpbWFyeSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tcHJpbWFyeSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXByaW1hcnksLnVrLWxpZ2h0IC51ay1idXR0b24tcHJpbWFyeSwudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLXByaW1hcnksLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXByaW1hcnksLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojNjY2fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1wcmltYXJ5OmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1wcmltYXJ5OmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwudWstbGlnaHQgLnVrLWJ1dHRvbi1wcmltYXJ5OmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5OmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5OmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjJmMmYyO2NvbG9yOiM2NjZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXByaW1hcnkudWstYWN0aXZlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tcHJpbWFyeTphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLC51ay1saWdodCAudWstYnV0dG9uLXByaW1hcnkudWstYWN0aXZlLC51ay1saWdodCAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLC51ay1vZmZjYW52YXMtYmFyIC51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1wcmltYXJ5OmFjdGl2ZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXByaW1hcnk6YWN0aXZlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeTphY3RpdmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeS51ay1hY3RpdmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tcHJpbWFyeTphY3RpdmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXByaW1hcnkudWstYWN0aXZlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5OmFjdGl2ZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5LnVrLWFjdGl2ZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1wcmltYXJ5OmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTY7Y29sb3I6IzY2Nn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXNlY29uZGFyeSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1zZWNvbmRhcnksLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXNlY29uZGFyeSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXNlY29uZGFyeSwudWstbGlnaHQgLnVrLWJ1dHRvbi1zZWNvbmRhcnksLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1zZWNvbmRhcnksLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXNlY29uZGFyeSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5LC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzY2Nn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlciwudWstbGlnaHQgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5OmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5OmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmMmYyZjI7Y29sb3I6IzY2Nn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6YWN0aXZlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tc2Vjb25kYXJ5LnVrLWFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6YWN0aXZlLC51ay1saWdodCAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsLnVrLWxpZ2h0IC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6YWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6YWN0aXZlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnk6YWN0aXZlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeS51ay1hY3RpdmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5LnVrLWFjdGl2ZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1zZWNvbmRhcnkudWstYWN0aXZlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXNlY29uZGFyeTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2O2NvbG9yOiM2NjZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi10ZXh0LC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXRleHQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXRleHQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi10ZXh0LC51ay1saWdodCAudWstYnV0dG9uLXRleHQsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi10ZXh0LC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi10ZXh0LC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0LC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dHtjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tdGV4dDo6YmVmb3JlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXRleHQ6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tdGV4dDo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tdGV4dDo6YmVmb3JlLC51ay1saWdodCAudWstYnV0dG9uLXRleHQ6OmJlZm9yZSwudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLXRleHQ6OmJlZm9yZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1idXR0b24tdGV4dDo6YmVmb3JlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0OjpiZWZvcmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0OjpiZWZvcmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDo6YmVmb3Jle2JvcmRlci1ib3R0b20tY29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXRleHQ6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tdGV4dDpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tdGV4dDpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXRleHQ6aG92ZXIsLnVrLWxpZ2h0IC51ay1idXR0b24tdGV4dDpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLXRleHQ6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLXRleHQ6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0OmhvdmVye2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLC51ay1saWdodCAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi10ZXh0OmRpc2FibGVkLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLXRleHQ6ZGlzYWJsZWQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tdGV4dDpkaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWxpbmssLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1idXR0b24tbGluaywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1idXR0b24tbGluaywudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLWxpbmssLnVrLWxpZ2h0IC51ay1idXR0b24tbGluaywudWstb2ZmY2FudmFzLWJhciAudWstYnV0dG9uLWxpbmssLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnV0dG9uLWxpbmssLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWxpbmssLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tbGluaywudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tbGluaywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1saW5re2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnV0dG9uLWxpbms6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnV0dG9uLWxpbms6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLC51ay1saWdodCAudWstYnV0dG9uLWxpbms6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJ1dHRvbi1saW5rOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWxpbms6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnV0dG9uLWxpbms6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1idXR0b24tbGluazpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keS51ay1jYXJkLWJhZGdlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKS51ay1jYXJkLWJhZGdlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkudWstY2FyZC1iYWRnZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKS51ay1jYXJkLWJhZGdlLC51ay1saWdodC51ay1jYXJkLWJhZGdlLC51ay1vZmZjYW52YXMtYmFyLnVrLWNhcmQtYmFkZ2UsLnVrLW92ZXJsYXktcHJpbWFyeS51ay1jYXJkLWJhZGdlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikudWstY2FyZC1iYWRnZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikudWstY2FyZC1iYWRnZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpLnVrLWNhcmQtYmFkZ2UsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpLnVrLWNhcmQtYmFkZ2V7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiM2NjZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWNsb3NlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2xvc2UsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstY2xvc2UsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNsb3NlLC51ay1saWdodCAudWstY2xvc2UsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWNsb3NlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNsb3NlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNsb3NlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2xvc2UsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2xvc2UsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jbG9zZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstY2xvc2U6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1jbG9zZTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1jbG9zZTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY2xvc2U6aG92ZXIsLnVrLWxpZ2h0IC51ay1jbG9zZTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstY2xvc2U6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstY2xvc2U6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY2xvc2U6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jbG9zZTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jbG9zZTpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNsb3NlOmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10b3RvcCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRvdG9wLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRvdG9wLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10b3RvcCwudWstbGlnaHQgLnVrLXRvdG9wLC51ay1vZmZjYW52YXMtYmFyIC51ay10b3RvcCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10b3RvcCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRvdG9wLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRvdG9wLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdG90b3B7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRvdG9wOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdG90b3A6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdG90b3A6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRvdG9wOmhvdmVyLC51ay1saWdodCAudWstdG90b3A6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRvdG9wOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRvdG9wOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRvdG9wOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdG90b3A6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdG90b3A6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcDpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdG90b3A6YWN0aXZlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdG90b3A6YWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRvdG9wOmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdG90b3A6YWN0aXZlLC51ay1saWdodCAudWstdG90b3A6YWN0aXZlLC51ay1vZmZjYW52YXMtYmFyIC51ay10b3RvcDphY3RpdmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdG90b3A6YWN0aXZlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRvdG9wOmFjdGl2ZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRvdG9wOmFjdGl2ZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcDphY3RpdmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10b3RvcDphY3RpdmV7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbWFya2VyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbWFya2VyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW1hcmtlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbWFya2VyLC51ay1saWdodCAudWstbWFya2VyLC51ay1vZmZjYW52YXMtYmFyIC51ay1tYXJrZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbWFya2VyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW1hcmtlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW1hcmtlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1tYXJrZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1tYXJrZXJ7YmFja2dyb3VuZDojZjhmOGY4O2NvbG9yOiM2NjZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW1hcmtlcjpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW1hcmtlcjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1tYXJrZXI6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW1hcmtlcjpob3ZlciwudWstbGlnaHQgLnVrLW1hcmtlcjpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstbWFya2VyOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW1hcmtlcjpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1tYXJrZXI6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1tYXJrZXI6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbWFya2VyOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbWFya2VyOmhvdmVye2NvbG9yOiM2NjZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWJhZGdlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYmFkZ2UsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYmFkZ2UsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWJhZGdlLC51ay1saWdodCAudWstYmFkZ2UsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJhZGdlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWJhZGdlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJhZGdlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYmFkZ2UsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYmFkZ2UsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1iYWRnZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzY2NiFpbXBvcnRhbnR9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxhYmVsLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbGFiZWwsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbGFiZWwsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxhYmVsLC51ay1saWdodCAudWstbGFiZWwsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxhYmVsLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxhYmVsLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxhYmVsLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGFiZWwsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbGFiZWwsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzY2Nn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYXJ0aWNsZS1tZXRhLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYXJ0aWNsZS1tZXRhLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWFydGljbGUtbWV0YSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYXJ0aWNsZS1tZXRhLC51ay1saWdodCAudWstYXJ0aWNsZS1tZXRhLC51ay1vZmZjYW52YXMtYmFyIC51ay1hcnRpY2xlLW1ldGEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYXJ0aWNsZS1tZXRhLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFydGljbGUtbWV0YSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFydGljbGUtbWV0YSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hcnRpY2xlLW1ldGEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hcnRpY2xlLW1ldGF7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC1pbnB1dCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlYXJjaC1pbnB1dCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtaW5wdXQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlYXJjaC1pbnB1dCwudWstbGlnaHQgLnVrLXNlYXJjaC1pbnB1dCwudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoLWlucHV0LC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXNlYXJjaC1pbnB1dCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtaW5wdXQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtaW5wdXQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWlucHV0LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWlucHV0e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VhcmNoLWlucHV0OjpwbGFjZWhvbGRlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay1saWdodCAudWstc2VhcmNoLWlucHV0OjpwbGFjZWhvbGRlciwudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoLWlucHV0OjpwbGFjZWhvbGRlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLC51ay1saWdodCAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbiwudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbiwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb24sLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb24sLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29ue2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLC51ay1saWdodCAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbjpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoIC51ay1zZWFyY2gtaWNvbjpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb246aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaCAudWstc2VhcmNoLWljb246aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2ggLnVrLXNlYXJjaC1pY29uOmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LC51ay1saWdodCAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dCwudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3VzLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dDpmb2N1cywudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3VzLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3VzLC51ay1saWdodCAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dDpmb2N1cywudWstb2ZmY2FudmFzLWJhciAudWstc2VhcmNoLWRlZmF1bHQgLnVrLXNlYXJjaC1pbnB1dDpmb2N1cywudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3VzLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQ6Zm9jdXMsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3VzLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1kZWZhdWx0IC51ay1zZWFyY2gtaW5wdXQ6Zm9jdXMsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtZGVmYXVsdCAudWstc2VhcmNoLWlucHV0OmZvY3Vze2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWlucHV0LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXQsLnVrLWxpZ2h0IC51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXQsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pbnB1dCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2gtbmF2YmFyIC51ay1zZWFyY2gtaW5wdXQsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWlucHV0LC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLW5hdmJhciAudWstc2VhcmNoLWlucHV0LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pbnB1dCwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1uYXZiYXIgLnVrLXNlYXJjaC1pbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWlucHV0LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWlucHV0LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwudWstbGlnaHQgLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWlucHV0LC51ay1vZmZjYW52YXMtYmFyIC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtbGFyZ2UgLnVrLXNlYXJjaC1pbnB1dCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWlucHV0LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNlYXJjaC1sYXJnZSAudWstc2VhcmNoLWlucHV0LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLWxhcmdlIC51ay1zZWFyY2gtaW5wdXR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLXRvZ2dsZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlYXJjaC10b2dnbGUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLXRvZ2dsZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VhcmNoLXRvZ2dsZSwudWstbGlnaHQgLnVrLXNlYXJjaC10b2dnbGUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXNlYXJjaC10b2dnbGUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2VhcmNoLXRvZ2dsZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtdG9nZ2xlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLXRvZ2dsZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtdG9nZ2xlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLXRvZ2dsZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNlYXJjaC10b2dnbGU6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciwudWstbGlnaHQgLnVrLXNlYXJjaC10b2dnbGU6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXNlYXJjaC10b2dnbGU6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtdG9nZ2xlOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLXRvZ2dsZTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zZWFyY2gtdG9nZ2xlOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2VhcmNoLXRvZ2dsZTpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYWNjb3JkaW9uLXRpdGxlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYWNjb3JkaW9uLXRpdGxlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWFjY29yZGlvbi10aXRsZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYWNjb3JkaW9uLXRpdGxlLC51ay1saWdodCAudWstYWNjb3JkaW9uLXRpdGxlLC51ay1vZmZjYW52YXMtYmFyIC51ay1hY2NvcmRpb24tdGl0bGUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYWNjb3JkaW9uLXRpdGxlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGV7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWFjY29yZGlvbi10aXRsZTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLC51ay1saWdodCAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1hY2NvcmRpb24tdGl0bGU6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYWNjb3JkaW9uLXRpdGxlOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGU6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGU6aG92ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWdyaWQtZGl2aWRlcj46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1ncmlkLWRpdmlkZXI+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWdyaWQtZGl2aWRlcj46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWdyaWQtZGl2aWRlcj46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLWxpZ2h0IC51ay1ncmlkLWRpdmlkZXI+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1vZmZjYW52YXMtYmFyIC51ay1ncmlkLWRpdmlkZXI+Om5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWdyaWQtZGl2aWRlcj46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZ3JpZC1kaXZpZGVyPjpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWdyaWQtZGl2aWRlcj46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZ3JpZC1kaXZpZGVyPjpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWdyaWQtZGl2aWRlcj46bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmV7Ym9yZGVyLWxlZnQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3JlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3JlLC51ay1saWdodCAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3JlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3JlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWdyaWQtZGl2aWRlci51ay1ncmlkLXN0YWNrPi51ay1ncmlkLW1hcmdpbjo6YmVmb3JlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZ3JpZC1kaXZpZGVyLnVrLWdyaWQtc3RhY2s+LnVrLWdyaWQtbWFyZ2luOjpiZWZvcmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1ncmlkLWRpdmlkZXIudWstZ3JpZC1zdGFjaz4udWstZ3JpZC1tYXJnaW46OmJlZm9yZXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdD5saT5hLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LWRlZmF1bHQ+bGk+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdD5saT5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtZGVmYXVsdD5saT5hLC51ay1saWdodCAudWstbmF2LWRlZmF1bHQ+bGk+YSwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LWRlZmF1bHQ+bGk+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtZGVmYXVsdD5saT5hLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0PmxpPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdD5saT5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0PmxpPmEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdD5saT5he2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdD5saT5hOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LWRlZmF1bHQ+bGk+YTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdD5saT5hOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtZGVmYXVsdD5saT5hOmhvdmVyLC51ay1saWdodCAudWstbmF2LWRlZmF1bHQ+bGk+YTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LWRlZmF1bHQ+bGk+YTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtZGVmYXVsdD5saT5hOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0PmxpPmE6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdD5saT5hOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0PmxpPmE6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdD5saT5hOmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdD5saS51ay1hY3RpdmU+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1kZWZhdWx0PmxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0PmxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtZGVmYXVsdD5saS51ay1hY3RpdmU+YSwudWstbGlnaHQgLnVrLW5hdi1kZWZhdWx0PmxpLnVrLWFjdGl2ZT5hLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtZGVmYXVsdD5saS51ay1hY3RpdmU+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtZGVmYXVsdD5saS51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdD5saS51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0PmxpLnVrLWFjdGl2ZT5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0PmxpLnVrLWFjdGl2ZT5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQ+bGkudWstYWN0aXZlPmF7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsLnVrLWxpZ2h0IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1oZWFkZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWhlYWRlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtaGVhZGVye2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwudWstbGlnaHQgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtZGl2aWRlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LWRpdmlkZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEsLnVrLWxpZ2h0IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGF7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLWxpZ2h0IC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGE6aG92ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1saWdodCAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1kZWZhdWx0IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LWRlZmF1bHQgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtZGVmYXVsdCAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YXtjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeT5saT5hLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXByaW1hcnk+bGk+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeT5saT5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtcHJpbWFyeT5saT5hLC51ay1saWdodCAudWstbmF2LXByaW1hcnk+bGk+YSwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXByaW1hcnk+bGk+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtcHJpbWFyeT5saT5hLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5PmxpPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeT5saT5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5PmxpPmEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeT5saT5he2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeT5saT5hOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXByaW1hcnk+bGk+YTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeT5saT5hOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtcHJpbWFyeT5saT5hOmhvdmVyLC51ay1saWdodCAudWstbmF2LXByaW1hcnk+bGk+YTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXByaW1hcnk+bGk+YTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtcHJpbWFyeT5saT5hOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5PmxpPmE6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeT5saT5hOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5PmxpPmE6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeT5saT5hOmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeT5saS51ay1hY3RpdmU+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1wcmltYXJ5PmxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5PmxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtcHJpbWFyeT5saS51ay1hY3RpdmU+YSwudWstbGlnaHQgLnVrLW5hdi1wcmltYXJ5PmxpLnVrLWFjdGl2ZT5hLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtcHJpbWFyeT5saS51ay1hY3RpdmU+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtcHJpbWFyeT5saS51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeT5saS51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5PmxpLnVrLWFjdGl2ZT5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5PmxpLnVrLWFjdGl2ZT5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnk+bGkudWstYWN0aXZlPmF7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWhlYWRlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWhlYWRlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsLnVrLWxpZ2h0IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWhlYWRlciwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1oZWFkZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWhlYWRlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWhlYWRlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtaGVhZGVye2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWRpdmlkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlciwudWstbGlnaHQgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlciwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1kaXZpZGVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtZGl2aWRlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWRpdmlkZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LWRpdmlkZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1kaXZpZGVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGEsLnVrLWxpZ2h0IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGF7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLWxpZ2h0IC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1saWdodCAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1wcmltYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXByaW1hcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtcHJpbWFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YXtjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5PmxpPmEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtc2Vjb25kYXJ5PmxpPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeT5saT5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtc2Vjb25kYXJ5PmxpPmEsLnVrLWxpZ2h0IC51ay1uYXYtc2Vjb25kYXJ5PmxpPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1zZWNvbmRhcnk+bGk+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtc2Vjb25kYXJ5PmxpPmEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeT5saT5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeT5saT5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnk+bGk+YSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnk+bGk+YXtjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5PmxpPmE6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtc2Vjb25kYXJ5PmxpPmE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeT5saT5hOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtc2Vjb25kYXJ5PmxpPmE6aG92ZXIsLnVrLWxpZ2h0IC51ay1uYXYtc2Vjb25kYXJ5PmxpPmE6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1zZWNvbmRhcnk+bGk+YTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtc2Vjb25kYXJ5PmxpPmE6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeT5saT5hOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeT5saT5hOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnk+bGk+YTpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnk+bGk+YTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnk+bGkudWstYWN0aXZlPmEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtc2Vjb25kYXJ5PmxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnk+bGkudWstYWN0aXZlPmEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1zZWNvbmRhcnk+bGkudWstYWN0aXZlPmEsLnVrLWxpZ2h0IC51ay1uYXYtc2Vjb25kYXJ5PmxpLnVrLWFjdGl2ZT5hLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtc2Vjb25kYXJ5PmxpLnVrLWFjdGl2ZT5hLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1zZWNvbmRhcnk+bGkudWstYWN0aXZlPmEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeT5saS51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnk+bGkudWstYWN0aXZlPmEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeT5saS51ay1hY3RpdmU+YSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnk+bGkudWstYWN0aXZlPmF7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3VidGl0bGUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3VidGl0bGUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YnRpdGxlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3VidGl0bGUsLnVrLWxpZ2h0IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3VidGl0bGUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWJ0aXRsZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3VidGl0bGUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YnRpdGxlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YnRpdGxlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWJ0aXRsZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWJ0aXRsZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeT5saT5hOmhvdmVyIC51ay1uYXYtc3VidGl0bGUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtc2Vjb25kYXJ5PmxpPmE6aG92ZXIgLnVrLW5hdi1zdWJ0aXRsZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5PmxpPmE6aG92ZXIgLnVrLW5hdi1zdWJ0aXRsZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXNlY29uZGFyeT5saT5hOmhvdmVyIC51ay1uYXYtc3VidGl0bGUsLnVrLWxpZ2h0IC51ay1uYXYtc2Vjb25kYXJ5PmxpPmE6aG92ZXIgLnVrLW5hdi1zdWJ0aXRsZSwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXNlY29uZGFyeT5saT5hOmhvdmVyIC51ay1uYXYtc3VidGl0bGUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXNlY29uZGFyeT5saT5hOmhvdmVyIC51ay1uYXYtc3VidGl0bGUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeT5saT5hOmhvdmVyIC51ay1uYXYtc3VidGl0bGUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5PmxpPmE6aG92ZXIgLnVrLW5hdi1zdWJ0aXRsZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5PmxpPmE6aG92ZXIgLnVrLW5hdi1zdWJ0aXRsZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnk+bGk+YTpob3ZlciAudWstbmF2LXN1YnRpdGxle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5PmxpLnVrLWFjdGl2ZT5hIC51ay1uYXYtc3VidGl0bGUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtc2Vjb25kYXJ5PmxpLnVrLWFjdGl2ZT5hIC51ay1uYXYtc3VidGl0bGUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeT5saS51ay1hY3RpdmU+YSAudWstbmF2LXN1YnRpdGxlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtc2Vjb25kYXJ5PmxpLnVrLWFjdGl2ZT5hIC51ay1uYXYtc3VidGl0bGUsLnVrLWxpZ2h0IC51ay1uYXYtc2Vjb25kYXJ5PmxpLnVrLWFjdGl2ZT5hIC51ay1uYXYtc3VidGl0bGUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1zZWNvbmRhcnk+bGkudWstYWN0aXZlPmEgLnVrLW5hdi1zdWJ0aXRsZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtc2Vjb25kYXJ5PmxpLnVrLWFjdGl2ZT5hIC51ay1uYXYtc3VidGl0bGUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeT5saS51ay1hY3RpdmU+YSAudWstbmF2LXN1YnRpdGxlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeT5saS51ay1hY3RpdmU+YSAudWstbmF2LXN1YnRpdGxlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnk+bGkudWstYWN0aXZlPmEgLnVrLW5hdi1zdWJ0aXRsZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnk+bGkudWstYWN0aXZlPmEgLnVrLW5hdi1zdWJ0aXRsZXtjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtaGVhZGVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWhlYWRlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtaGVhZGVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtaGVhZGVyLC51ay1saWdodCAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWhlYWRlciwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWhlYWRlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtaGVhZGVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1oZWFkZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtaGVhZGVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1oZWFkZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtaGVhZGVye2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1kaXZpZGVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWRpdmlkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWRpdmlkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1kaXZpZGVyLC51ay1saWdodCAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWRpdmlkZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1kaXZpZGVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1kaXZpZGVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1kaXZpZGVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWRpdmlkZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LWRpdmlkZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtZGl2aWRlcntib3JkZXItdG9wLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGEsLnVrLWxpZ2h0IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1saWdodCAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBhOmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgYTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGE6aG92ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLWxpZ2h0IC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXYtc2Vjb25kYXJ5IC51ay1uYXYtc3ViIGxpLnVrLWFjdGl2ZT5hLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LXNlY29uZGFyeSAudWstbmF2LXN1YiBsaS51ay1hY3RpdmU+YSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi1zZWNvbmRhcnkgLnVrLW5hdi1zdWIgbGkudWstYWN0aXZlPmF7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2LnVrLW5hdi1kaXZpZGVyPjpub3QoLnVrLW5hdi1kaXZpZGVyKSs6bm90KC51ay1uYXYtaGVhZGVyLC51ay1uYXYtZGl2aWRlciksLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXYudWstbmF2LWRpdmlkZXI+Om5vdCgudWstbmF2LWRpdmlkZXIpKzpub3QoLnVrLW5hdi1oZWFkZXIsLnVrLW5hdi1kaXZpZGVyKSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXYudWstbmF2LWRpdmlkZXI+Om5vdCgudWstbmF2LWRpdmlkZXIpKzpub3QoLnVrLW5hdi1oZWFkZXIsLnVrLW5hdi1kaXZpZGVyKSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2LnVrLW5hdi1kaXZpZGVyPjpub3QoLnVrLW5hdi1kaXZpZGVyKSs6bm90KC51ay1uYXYtaGVhZGVyLC51ay1uYXYtZGl2aWRlciksLnVrLWxpZ2h0IC51ay1uYXYudWstbmF2LWRpdmlkZXI+Om5vdCgudWstbmF2LWRpdmlkZXIpKzpub3QoLnVrLW5hdi1oZWFkZXIsLnVrLW5hdi1kaXZpZGVyKSwudWstb2ZmY2FudmFzLWJhciAudWstbmF2LnVrLW5hdi1kaXZpZGVyPjpub3QoLnVrLW5hdi1kaXZpZGVyKSs6bm90KC51ay1uYXYtaGVhZGVyLC51ay1uYXYtZGl2aWRlciksLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2LnVrLW5hdi1kaXZpZGVyPjpub3QoLnVrLW5hdi1kaXZpZGVyKSs6bm90KC51ay1uYXYtaGVhZGVyLC51ay1uYXYtZGl2aWRlciksLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2LnVrLW5hdi1kaXZpZGVyPjpub3QoLnVrLW5hdi1kaXZpZGVyKSs6bm90KC51ay1uYXYtaGVhZGVyLC51ay1uYXYtZGl2aWRlciksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYudWstbmF2LWRpdmlkZXI+Om5vdCgudWstbmF2LWRpdmlkZXIpKzpub3QoLnVrLW5hdi1oZWFkZXIsLnVrLW5hdi1kaXZpZGVyKSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXYudWstbmF2LWRpdmlkZXI+Om5vdCgudWstbmF2LWRpdmlkZXIpKzpub3QoLnVrLW5hdi1oZWFkZXIsLnVrLW5hdi1kaXZpZGVyKSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdi51ay1uYXYtZGl2aWRlcj46bm90KC51ay1uYXYtZGl2aWRlcikrOm5vdCgudWstbmF2LWhlYWRlciwudWstbmF2LWRpdmlkZXIpe2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci1uYXY+bGk+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdmJhci1uYXY+bGk+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItbmF2PmxpPmEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdmJhci1uYXY+bGk+YSwudWstbGlnaHQgLnVrLW5hdmJhci1uYXY+bGk+YSwudWstb2ZmY2FudmFzLWJhciAudWstbmF2YmFyLW5hdj5saT5hLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdmJhci1uYXY+bGk+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpPmEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdj5saT5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdj5saT5he2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItbmF2PmxpOmhvdmVyPmEsLnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci1uYXY+bGk+YVthcmlhLWV4cGFuZGVkPXRydWVdLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLW5hdj5saTpob3Zlcj5hLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLW5hdj5saT5hW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0sLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLW5hdj5saTpob3Zlcj5hLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci1uYXY+bGk+YVthcmlhLWV4cGFuZGVkPXRydWVdLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXZiYXItbmF2PmxpOmhvdmVyPmEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdmJhci1uYXY+bGk+YVthcmlhLWV4cGFuZGVkPXRydWVdLC51ay1saWdodCAudWstbmF2YmFyLW5hdj5saTpob3Zlcj5hLC51ay1saWdodCAudWstbmF2YmFyLW5hdj5saT5hW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0sLnVrLW9mZmNhbnZhcy1iYXIgLnVrLW5hdmJhci1uYXY+bGk6aG92ZXI+YSwudWstb2ZmY2FudmFzLWJhciAudWstbmF2YmFyLW5hdj5saT5hW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0sLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2YmFyLW5hdj5saTpob3Zlcj5hLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdmJhci1uYXY+bGk+YVthcmlhLWV4cGFuZGVkPXRydWVdLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXY+bGk6aG92ZXI+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpPmFbYXJpYS1leHBhbmRlZD10cnVlXSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXY+bGk6aG92ZXI+YSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXY+bGk+YVthcmlhLWV4cGFuZGVkPXRydWVdLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXY+bGk6aG92ZXI+YSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpPmFbYXJpYS1leHBhbmRlZD10cnVlXSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXY+bGk6aG92ZXI+YSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXY+bGk+YVthcmlhLWV4cGFuZGVkPXRydWVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItbmF2PmxpPmE6YWN0aXZlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLW5hdj5saT5hOmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItbmF2PmxpPmE6YWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXZiYXItbmF2PmxpPmE6YWN0aXZlLC51ay1saWdodCAudWstbmF2YmFyLW5hdj5saT5hOmFjdGl2ZSwudWstb2ZmY2FudmFzLWJhciAudWstbmF2YmFyLW5hdj5saT5hOmFjdGl2ZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXZiYXItbmF2PmxpPmE6YWN0aXZlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXY+bGk+YTphY3RpdmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpPmE6YWN0aXZlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXY+bGk+YTphY3RpdmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItbmF2PmxpPmE6YWN0aXZle2NvbG9yOiNmZmZ9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci1uYXY+bGkudWstYWN0aXZlPmEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXZiYXItbmF2PmxpLnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci1uYXY+bGkudWstYWN0aXZlPmEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW5hdmJhci1uYXY+bGkudWstYWN0aXZlPmEsLnVrLWxpZ2h0IC51ay1uYXZiYXItbmF2PmxpLnVrLWFjdGl2ZT5hLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXZiYXItbmF2PmxpLnVrLWFjdGl2ZT5hLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLW5hdmJhci1uYXY+bGkudWstYWN0aXZlPmEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdj5saS51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXY+bGkudWstYWN0aXZlPmEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLW5hdj5saS51ay1hY3RpdmU+YSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1uYXY+bGkudWstYWN0aXZlPmF7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLWl0ZW0sLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXZiYXItaXRlbSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItaXRlbSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLWl0ZW0sLnVrLWxpZ2h0IC51ay1uYXZiYXItaXRlbSwudWstb2ZmY2FudmFzLWJhciAudWstbmF2YmFyLWl0ZW0sLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2YmFyLWl0ZW0sLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLWl0ZW0sLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItaXRlbSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItaXRlbSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci1pdGVte2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItdG9nZ2xlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLXRvZ2dsZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItdG9nZ2xlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXZiYXItdG9nZ2xlLC51ay1saWdodCAudWstbmF2YmFyLXRvZ2dsZSwudWstb2ZmY2FudmFzLWJhciAudWstbmF2YmFyLXRvZ2dsZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXZiYXItdG9nZ2xlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItdG9nZ2xlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItdG9nZ2xle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItdG9nZ2xlOmhvdmVyLC51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1uYXZiYXItdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0sLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXZiYXItdG9nZ2xlOmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbmF2YmFyLXRvZ2dsZVthcmlhLWV4cGFuZGVkPXRydWVdLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbmF2YmFyLXRvZ2dsZVthcmlhLWV4cGFuZGVkPXRydWVdLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXZiYXItdG9nZ2xlOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1uYXZiYXItdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0sLnVrLWxpZ2h0IC51ay1uYXZiYXItdG9nZ2xlOmhvdmVyLC51ay1saWdodCAudWstbmF2YmFyLXRvZ2dsZVthcmlhLWV4cGFuZGVkPXRydWVdLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXZiYXItdG9nZ2xlOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1uYXZiYXItdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0sLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbmF2YmFyLXRvZ2dsZTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1uYXZiYXItdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0sLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0sLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1uYXZiYXItdG9nZ2xlOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZVthcmlhLWV4cGFuZGVkPXRydWVdLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGU6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZVthcmlhLWV4cGFuZGVkPXRydWVdLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbmF2YmFyLXRvZ2dsZTpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW5hdmJhci10b2dnbGVbYXJpYS1leHBhbmRlZD10cnVlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2Pio+OmZpcnN0LWNoaWxkLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc3VibmF2Pio+OmZpcnN0LWNoaWxkLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdj4qPjpmaXJzdC1jaGlsZCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc3VibmF2Pio+OmZpcnN0LWNoaWxkLC51ay1saWdodCAudWstc3VibmF2Pio+OmZpcnN0LWNoaWxkLC51ay1vZmZjYW52YXMtYmFyIC51ay1zdWJuYXY+Kj46Zmlyc3QtY2hpbGQsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc3VibmF2Pio+OmZpcnN0LWNoaWxkLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdj4qPjpmaXJzdC1jaGlsZCwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdj4qPjpmaXJzdC1jaGlsZCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXY+Kj46Zmlyc3QtY2hpbGQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXY+Kj46Zmlyc3QtY2hpbGR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdj4qPmE6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zdWJuYXY+Kj5hOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdj4qPmE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXN1Ym5hdj4qPmE6aG92ZXIsLnVrLWxpZ2h0IC51ay1zdWJuYXY+Kj5hOmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1zdWJuYXY+Kj5hOmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXN1Ym5hdj4qPmE6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2Pio+YTpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdj4qPmE6aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2Pio+YTpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdj4qPmE6aG92ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdj4udWstYWN0aXZlPmEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zdWJuYXY+LnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdj4udWstYWN0aXZlPmEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXN1Ym5hdj4udWstYWN0aXZlPmEsLnVrLWxpZ2h0IC51ay1zdWJuYXY+LnVrLWFjdGl2ZT5hLC51ay1vZmZjYW52YXMtYmFyIC51ay1zdWJuYXY+LnVrLWFjdGl2ZT5hLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXN1Ym5hdj4udWstYWN0aXZlPmEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2Pi51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdj4udWstYWN0aXZlPmEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2Pi51ay1hY3RpdmU+YSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdj4udWstYWN0aXZlPmF7Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc3VibmF2LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdi1kaXZpZGVyPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc3VibmF2LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1saWdodCAudWstc3VibmF2LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1vZmZjYW52YXMtYmFyIC51ay1zdWJuYXYtZGl2aWRlcj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc3VibmF2LWRpdmlkZXI+Om50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3JlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1kaXZpZGVyPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1kaXZpZGVyPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtZGl2aWRlcj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtZGl2aWRlcj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmV7Ym9yZGVyLWxlZnQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdi1waWxsPio+OmZpcnN0LWNoaWxkLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc3VibmF2LXBpbGw+Kj46Zmlyc3QtY2hpbGQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2LXBpbGw+Kj46Zmlyc3QtY2hpbGQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXN1Ym5hdi1waWxsPio+OmZpcnN0LWNoaWxkLC51ay1saWdodCAudWstc3VibmF2LXBpbGw+Kj46Zmlyc3QtY2hpbGQsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXN1Ym5hdi1waWxsPio+OmZpcnN0LWNoaWxkLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXN1Ym5hdi1waWxsPio+OmZpcnN0LWNoaWxkLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsPio+OmZpcnN0LWNoaWxkLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGw+Kj46Zmlyc3QtY2hpbGQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGw+Kj46Zmlyc3QtY2hpbGQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbD4qPjpmaXJzdC1jaGlsZHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtcGlsbD4qPmE6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zdWJuYXYtcGlsbD4qPmE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2LXBpbGw+Kj5hOmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zdWJuYXYtcGlsbD4qPmE6aG92ZXIsLnVrLWxpZ2h0IC51ay1zdWJuYXYtcGlsbD4qPmE6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXN1Ym5hdi1waWxsPio+YTpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zdWJuYXYtcGlsbD4qPmE6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGw+Kj5hOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGw+Kj5hOmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsPio+YTpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsPio+YTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpO2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtcGlsbD4qPmE6YWN0aXZlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc3VibmF2LXBpbGw+Kj5hOmFjdGl2ZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtcGlsbD4qPmE6YWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zdWJuYXYtcGlsbD4qPmE6YWN0aXZlLC51ay1saWdodCAudWstc3VibmF2LXBpbGw+Kj5hOmFjdGl2ZSwudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2LXBpbGw+Kj5hOmFjdGl2ZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zdWJuYXYtcGlsbD4qPmE6YWN0aXZlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsPio+YTphY3RpdmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbD4qPmE6YWN0aXZlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdi1waWxsPio+YTphY3RpdmUsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbD4qPmE6YWN0aXZle2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSk7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXN1Ym5hdi1waWxsPi51ay1hY3RpdmU+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXN1Ym5hdi1waWxsPi51ay1hY3RpdmU+YSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXYtcGlsbD4udWstYWN0aXZlPmEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXN1Ym5hdi1waWxsPi51ay1hY3RpdmU+YSwudWstbGlnaHQgLnVrLXN1Ym5hdi1waWxsPi51ay1hY3RpdmU+YSwudWstb2ZmY2FudmFzLWJhciAudWstc3VibmF2LXBpbGw+LnVrLWFjdGl2ZT5hLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXN1Ym5hdi1waWxsPi51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbD4udWstYWN0aXZlPmEsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zdWJuYXYtcGlsbD4udWstYWN0aXZlPmEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGw+LnVrLWFjdGl2ZT5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2LXBpbGw+LnVrLWFjdGl2ZT5he2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojNjY2fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zdWJuYXY+LnVrLWRpc2FibGVkPmEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zdWJuYXY+LnVrLWRpc2FibGVkPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc3VibmF2Pi51ay1kaXNhYmxlZD5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zdWJuYXY+LnVrLWRpc2FibGVkPmEsLnVrLWxpZ2h0IC51ay1zdWJuYXY+LnVrLWRpc2FibGVkPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXN1Ym5hdj4udWstZGlzYWJsZWQ+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zdWJuYXY+LnVrLWRpc2FibGVkPmEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2Pi51ay1kaXNhYmxlZD5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc3VibmF2Pi51ay1kaXNhYmxlZD5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdj4udWstZGlzYWJsZWQ+YSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXN1Ym5hdj4udWstZGlzYWJsZWQ+YXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnJlYWRjcnVtYj4qPiosLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1icmVhZGNydW1iPio+KiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1icmVhZGNydW1iPio+KiwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnJlYWRjcnVtYj4qPiosLnVrLWxpZ2h0IC51ay1icmVhZGNydW1iPio+KiwudWstb2ZmY2FudmFzLWJhciAudWstYnJlYWRjcnVtYj4qPiosLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnJlYWRjcnVtYj4qPiosLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYj4qPiosLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1icmVhZGNydW1iPio+KiwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1icmVhZGNydW1iPio+KiwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWI+Kj4qe2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1icmVhZGNydW1iPio+OmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnJlYWRjcnVtYj4qPjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1icmVhZGNydW1iPio+OmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1icmVhZGNydW1iPio+OmhvdmVyLC51ay1saWdodCAudWstYnJlYWRjcnVtYj4qPjpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstYnJlYWRjcnVtYj4qPjpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1icmVhZGNydW1iPio+OmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWI+Kj46aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1icmVhZGNydW1iPio+OmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWI+Kj46aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1icmVhZGNydW1iPio+OmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1icmVhZGNydW1iPjpsYXN0LWNoaWxkPiosLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1icmVhZGNydW1iPjpsYXN0LWNoaWxkPiosLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstYnJlYWRjcnVtYj46bGFzdC1jaGlsZD4qLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1icmVhZGNydW1iPjpsYXN0LWNoaWxkPiosLnVrLWxpZ2h0IC51ay1icmVhZGNydW1iPjpsYXN0LWNoaWxkPiosLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWJyZWFkY3J1bWI+Omxhc3QtY2hpbGQ+KiwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1icmVhZGNydW1iPjpsYXN0LWNoaWxkPiosLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYj46bGFzdC1jaGlsZD4qLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYj46bGFzdC1jaGlsZD4qLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWI+Omxhc3QtY2hpbGQ+KiwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWI+Omxhc3QtY2hpbGQ+Kntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstYnJlYWRjcnVtYj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1icmVhZGNydW1iPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1icmVhZGNydW1iPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstYnJlYWRjcnVtYj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLWxpZ2h0IC51ay1icmVhZGNydW1iPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstb2ZmY2FudmFzLWJhciAudWstYnJlYWRjcnVtYj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstYnJlYWRjcnVtYj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYnJlYWRjcnVtYj46bnRoLWNoaWxkKG4rMik6bm90KC51ay1maXJzdC1jb2x1bW4pOjpiZWZvcmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1icmVhZGNydW1iPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1icmVhZGNydW1iPjpudGgtY2hpbGQobisyKTpub3QoLnVrLWZpcnN0LWNvbHVtbik6OmJlZm9yZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWJyZWFkY3J1bWI+Om50aC1jaGlsZChuKzIpOm5vdCgudWstZmlyc3QtY29sdW1uKTo6YmVmb3Jle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1wYWdpbmF0aW9uPio+KiwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXBhZ2luYXRpb24+Kj4qLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXBhZ2luYXRpb24+Kj4qLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1wYWdpbmF0aW9uPio+KiwudWstbGlnaHQgLnVrLXBhZ2luYXRpb24+Kj4qLC51ay1vZmZjYW52YXMtYmFyIC51ay1wYWdpbmF0aW9uPio+KiwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1wYWdpbmF0aW9uPio+KiwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1wYWdpbmF0aW9uPio+KiwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24+Kj4qLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24+Kj4qLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4qPip7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXBhZ2luYXRpb24+Kj46aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1wYWdpbmF0aW9uPio+OmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXBhZ2luYXRpb24+Kj46aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXBhZ2luYXRpb24+Kj46aG92ZXIsLnVrLWxpZ2h0IC51ay1wYWdpbmF0aW9uPio+OmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1wYWdpbmF0aW9uPio+OmhvdmVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXBhZ2luYXRpb24+Kj46aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4qPjpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24+Kj46aG92ZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4qPjpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24+Kj46aG92ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXBhZ2luYXRpb24+LnVrLWFjdGl2ZT4qLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcGFnaW5hdGlvbj4udWstYWN0aXZlPiosLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstcGFnaW5hdGlvbj4udWstYWN0aXZlPiosLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXBhZ2luYXRpb24+LnVrLWFjdGl2ZT4qLC51ay1saWdodCAudWstcGFnaW5hdGlvbj4udWstYWN0aXZlPiosLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXBhZ2luYXRpb24+LnVrLWFjdGl2ZT4qLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXBhZ2luYXRpb24+LnVrLWFjdGl2ZT4qLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXBhZ2luYXRpb24+LnVrLWFjdGl2ZT4qLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4udWstYWN0aXZlPiosLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4udWstYWN0aXZlPiosLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1wYWdpbmF0aW9uPi51ay1hY3RpdmU+Kntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstcGFnaW5hdGlvbj4udWstZGlzYWJsZWQ+KiwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXBhZ2luYXRpb24+LnVrLWRpc2FibGVkPiosLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstcGFnaW5hdGlvbj4udWstZGlzYWJsZWQ+KiwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstcGFnaW5hdGlvbj4udWstZGlzYWJsZWQ+KiwudWstbGlnaHQgLnVrLXBhZ2luYXRpb24+LnVrLWRpc2FibGVkPiosLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXBhZ2luYXRpb24+LnVrLWRpc2FibGVkPiosLnVrLW92ZXJsYXktcHJpbWFyeSAudWstcGFnaW5hdGlvbj4udWstZGlzYWJsZWQ+KiwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1wYWdpbmF0aW9uPi51ay1kaXNhYmxlZD4qLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4udWstZGlzYWJsZWQ+KiwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1wYWdpbmF0aW9uPi51ay1kaXNhYmxlZD4qLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstcGFnaW5hdGlvbj4udWstZGlzYWJsZWQ+Kntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiOjpiZWZvcmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWI6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10YWI6OmJlZm9yZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFiOjpiZWZvcmUsLnVrLWxpZ2h0IC51ay10YWI6OmJlZm9yZSwudWstb2ZmY2FudmFzLWJhciAudWstdGFiOjpiZWZvcmUsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFiOjpiZWZvcmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiOjpiZWZvcmUsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI6OmJlZm9yZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI6OmJlZm9yZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYjo6YmVmb3Jle2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yKX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiPio+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYj4qPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiPio+YSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFiPio+YSwudWstbGlnaHQgLnVrLXRhYj4qPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYj4qPmEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFiPio+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+Kj5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiPio+YSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+Kj5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiPio+YXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiPio+YTpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYj4qPmE6aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiPio+YTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFiPio+YTpob3ZlciwudWstbGlnaHQgLnVrLXRhYj4qPmE6aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYj4qPmE6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFiPio+YTpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+Kj5hOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiPio+YTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+Kj5hOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiPio+YTpob3Zlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiPi51ay1hY3RpdmU+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYj4udWstYWN0aXZlPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiPi51ay1hY3RpdmU+YSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFiPi51ay1hY3RpdmU+YSwudWstbGlnaHQgLnVrLXRhYj4udWstYWN0aXZlPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYj4udWstYWN0aXZlPmEsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFiPi51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+LnVrLWFjdGl2ZT5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiPi51ay1hY3RpdmU+YSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWI+LnVrLWFjdGl2ZT5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiPi51ay1hY3RpdmU+YXtjb2xvcjojZmZmO2JvcmRlci1jb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10YWI+LnVrLWRpc2FibGVkPmEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWI+LnVrLWRpc2FibGVkPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFiPi51ay1kaXNhYmxlZD5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWI+LnVrLWRpc2FibGVkPmEsLnVrLWxpZ2h0IC51ay10YWI+LnVrLWRpc2FibGVkPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRhYj4udWstZGlzYWJsZWQ+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10YWI+LnVrLWRpc2FibGVkPmEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiPi51ay1kaXNhYmxlZD5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFiPi51ay1kaXNhYmxlZD5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYj4udWstZGlzYWJsZWQ+YSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYj4udWstZGlzYWJsZWQ+YXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstc2xpZGVuYXYsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zbGlkZW5hdiwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1zbGlkZW5hdiwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstc2xpZGVuYXYsLnVrLWxpZ2h0IC51ay1zbGlkZW5hdiwudWstb2ZmY2FudmFzLWJhciAudWstc2xpZGVuYXYsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstc2xpZGVuYXYsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2xpZGVuYXYsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdiwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdiwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zbGlkZW5hdjpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXNsaWRlbmF2OmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXNsaWRlbmF2OmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zbGlkZW5hdjpob3ZlciwudWstbGlnaHQgLnVrLXNsaWRlbmF2OmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1zbGlkZW5hdjpob3ZlciwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zbGlkZW5hdjpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1zbGlkZW5hdjpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2OmhvdmVyLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2OmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2xpZGVuYXY6aG92ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuOTUpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1zbGlkZW5hdjphY3RpdmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zbGlkZW5hdjphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstc2xpZGVuYXY6YWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1zbGlkZW5hdjphY3RpdmUsLnVrLWxpZ2h0IC51ay1zbGlkZW5hdjphY3RpdmUsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXNsaWRlbmF2OmFjdGl2ZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1zbGlkZW5hdjphY3RpdmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2xpZGVuYXY6YWN0aXZlLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstc2xpZGVuYXY6YWN0aXZlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2OmFjdGl2ZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXNsaWRlbmF2OmFjdGl2ZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstZG90bmF2Pio+KiwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRvdG5hdj4qPiosLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstZG90bmF2Pio+KiwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZG90bmF2Pio+KiwudWstbGlnaHQgLnVrLWRvdG5hdj4qPiosLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWRvdG5hdj4qPiosLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZG90bmF2Pio+KiwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXY+Kj4qLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2Pio+KiwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXY+Kj4qLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2Pio+KntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC45KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstZG90bmF2Pio+OmhvdmVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZG90bmF2Pio+OmhvdmVyLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRvdG5hdj4qPjpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstZG90bmF2Pio+OmhvdmVyLC51ay1saWdodCAudWstZG90bmF2Pio+OmhvdmVyLC51ay1vZmZjYW52YXMtYmFyIC51ay1kb3RuYXY+Kj46aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstZG90bmF2Pio+OmhvdmVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdj4qPjpob3ZlciwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdj4qPjpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXY+Kj46aG92ZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1kb3RuYXY+Kj46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC45KTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWRvdG5hdj4qPjphY3RpdmUsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1kb3RuYXY+Kj46YWN0aXZlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRvdG5hdj4qPjphY3RpdmUsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRvdG5hdj4qPjphY3RpdmUsLnVrLWxpZ2h0IC51ay1kb3RuYXY+Kj46YWN0aXZlLC51ay1vZmZjYW52YXMtYmFyIC51ay1kb3RuYXY+Kj46YWN0aXZlLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWRvdG5hdj4qPjphY3RpdmUsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2Pio+OmFjdGl2ZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdj4qPjphY3RpdmUsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2Pio+OmFjdGl2ZSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdj4qPjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWRvdG5hdj4udWstYWN0aXZlPiosLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1kb3RuYXY+LnVrLWFjdGl2ZT4qLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWRvdG5hdj4udWstYWN0aXZlPiosLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWRvdG5hdj4udWstYWN0aXZlPiosLnVrLWxpZ2h0IC51ay1kb3RuYXY+LnVrLWFjdGl2ZT4qLC51ay1vZmZjYW52YXMtYmFyIC51ay1kb3RuYXY+LnVrLWFjdGl2ZT4qLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWRvdG5hdj4udWstYWN0aXZlPiosLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2Pi51ay1hY3RpdmU+KiwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdj4udWstYWN0aXZlPiosLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstZG90bmF2Pi51ay1hY3RpdmU+KiwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWRvdG5hdj4udWstYWN0aXZlPip7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC45KTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWljb25uYXY+Kj5hLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaWNvbm5hdj4qPmEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbm5hdj4qPmEsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb25uYXY+Kj5hLC51ay1saWdodCAudWstaWNvbm5hdj4qPmEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWljb25uYXY+Kj5hLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWljb25uYXY+Kj5hLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXY+Kj5hLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdj4qPmEsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdj4qPmEsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2Pio+YXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstaWNvbm5hdj4qPmE6aG92ZXIsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29ubmF2Pio+YTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay1pY29ubmF2Pio+YTpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstaWNvbm5hdj4qPmE6aG92ZXIsLnVrLWxpZ2h0IC51ay1pY29ubmF2Pio+YTpob3ZlciwudWstb2ZmY2FudmFzLWJhciAudWstaWNvbm5hdj4qPmE6aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstaWNvbm5hdj4qPmE6aG92ZXIsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdj4qPmE6aG92ZXIsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2Pio+YTpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2Pio+YTpob3ZlciwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXY+Kj5hOmhvdmVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1pY29ubmF2Pi51ay1hY3RpdmU+YSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWljb25uYXY+LnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWljb25uYXY+LnVrLWFjdGl2ZT5hLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1pY29ubmF2Pi51ay1hY3RpdmU+YSwudWstbGlnaHQgLnVrLWljb25uYXY+LnVrLWFjdGl2ZT5hLC51ay1vZmZjYW52YXMtYmFyIC51ay1pY29ubmF2Pi51ay1hY3RpdmU+YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1pY29ubmF2Pi51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1pY29ubmF2Pi51ay1hY3RpdmU+YSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXY+LnVrLWFjdGl2ZT5hLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWljb25uYXY+LnVrLWFjdGl2ZT5hLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstaWNvbm5hdj4udWstYWN0aXZlPmF7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHQtbGVhZCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRleHQtbGVhZCwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LWxlYWQsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRleHQtbGVhZCwudWstbGlnaHQgLnVrLXRleHQtbGVhZCwudWstb2ZmY2FudmFzLWJhciAudWstdGV4dC1sZWFkLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRleHQtbGVhZCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LWxlYWQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LWxlYWQsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1sZWFkLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1sZWFke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LW1ldGEsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10ZXh0LW1ldGEsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dC1tZXRhLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10ZXh0LW1ldGEsLnVrLWxpZ2h0IC51ay10ZXh0LW1ldGEsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRleHQtbWV0YSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10ZXh0LW1ldGEsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1tZXRhLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1tZXRhLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbWV0YSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtbWV0YXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dC1tdXRlZCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRleHQtbXV0ZWQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGV4dC1tdXRlZCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGV4dC1tdXRlZCwudWstbGlnaHQgLnVrLXRleHQtbXV0ZWQsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLXRleHQtbXV0ZWQsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGV4dC1tdXRlZCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LW11dGVkLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1tdXRlZCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LW11dGVkLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1tdXRlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KSFpbXBvcnRhbnR9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHQtZW1waGFzaXMsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10ZXh0LWVtcGhhc2lzLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHQtZW1waGFzaXMsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRleHQtZW1waGFzaXMsLnVrLWxpZ2h0IC51ay10ZXh0LWVtcGhhc2lzLC51ay1vZmZjYW52YXMtYmFyIC51ay10ZXh0LWVtcGhhc2lzLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRleHQtZW1waGFzaXMsLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1lbXBoYXNpcywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtZW1waGFzaXMsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1lbXBoYXNpcywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtZW1waGFzaXN7Y29sb3I6I2ZmZiFpbXBvcnRhbnR9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHQtcHJpbWFyeSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRleHQtcHJpbWFyeSwudWstY2FyZC1zZWNvbmRhcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LXByaW1hcnksLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRleHQtcHJpbWFyeSwudWstbGlnaHQgLnVrLXRleHQtcHJpbWFyeSwudWstb2ZmY2FudmFzLWJhciAudWstdGV4dC1wcmltYXJ5LC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRleHQtcHJpbWFyeSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LXByaW1hcnksLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LXByaW1hcnksLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1wcmltYXJ5LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1wcmltYXJ5e2NvbG9yOiNmZmYhaW1wb3J0YW50fS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay10ZXh0LXNlY29uZGFyeSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRleHQtc2Vjb25kYXJ5LC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRleHQtc2Vjb25kYXJ5LC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10ZXh0LXNlY29uZGFyeSwudWstbGlnaHQgLnVrLXRleHQtc2Vjb25kYXJ5LC51ay1vZmZjYW52YXMtYmFyIC51ay10ZXh0LXNlY29uZGFyeSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay10ZXh0LXNlY29uZGFyeSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10ZXh0LXNlY29uZGFyeSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtc2Vjb25kYXJ5LC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRleHQtc2Vjb25kYXJ5LC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGV4dC1zZWNvbmRhcnl7Y29sb3I6I2ZmZiFpbXBvcnRhbnR9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWNvbHVtbi1kaXZpZGVyLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstY29sdW1uLWRpdmlkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstY29sdW1uLWRpdmlkZXIsLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWNvbHVtbi1kaXZpZGVyLC51ay1saWdodCAudWstY29sdW1uLWRpdmlkZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWNvbHVtbi1kaXZpZGVyLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWNvbHVtbi1kaXZpZGVyLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWNvbHVtbi1kaXZpZGVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY29sdW1uLWRpdmlkZXIsLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstY29sdW1uLWRpdmlkZXIsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1jb2x1bW4tZGl2aWRlcntjb2x1bW4tcnVsZS1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LDAuMil9LnVrLWNhcmQtcHJpbWFyeS51ay1jYXJkLWJvZHkgLnVrLWxvZ28sLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1sb2dvLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxvZ28sLnVrLWNhcmQtc2Vjb25kYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxvZ28sLnVrLWxpZ2h0IC51ay1sb2dvLC51ay1vZmZjYW52YXMtYmFyIC51ay1sb2dvLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLWxvZ28sLnVrLXNlY3Rpb24tcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbywudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28sLnVrLXRpbGUtcHJpbWFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbywudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ297Y29sb3I6I2ZmZn0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbG9nbzpob3ZlciwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWxvZ286aG92ZXIsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbG9nbzpob3ZlciwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbG9nbzpob3ZlciwudWstbGlnaHQgLnVrLWxvZ286aG92ZXIsLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxvZ286aG92ZXIsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbG9nbzpob3ZlciwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvOmhvdmVyLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbzpob3ZlciwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvOmhvdmVyLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbzpob3Zlcntjb2xvcjojZmZmfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1sb2dvPjpub3QocGljdHVyZSk6bm90KC51ay1sb2dvLWludmVyc2UpOm5vdCg6b25seS1vZi10eXBlKSwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbG9nbz5waWN0dXJlOm5vdCg6b25seS1vZi10eXBlKT46bm90KC51ay1sb2dvLWludmVyc2UpLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbG9nbz46bm90KHBpY3R1cmUpOm5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSksLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1sb2dvPnBpY3R1cmU6bm90KDpvbmx5LW9mLXR5cGUpPjpub3QoLnVrLWxvZ28taW52ZXJzZSksLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbG9nbz46bm90KHBpY3R1cmUpOm5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSksLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstbG9nbz5waWN0dXJlOm5vdCg6b25seS1vZi10eXBlKT46bm90KC51ay1sb2dvLWludmVyc2UpLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1sb2dvPjpub3QocGljdHVyZSk6bm90KC51ay1sb2dvLWludmVyc2UpOm5vdCg6b25seS1vZi10eXBlKSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbG9nbz5waWN0dXJlOm5vdCg6b25seS1vZi10eXBlKT46bm90KC51ay1sb2dvLWludmVyc2UpLC51ay1saWdodCAudWstbG9nbz46bm90KHBpY3R1cmUpOm5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSksLnVrLWxpZ2h0IC51ay1sb2dvPnBpY3R1cmU6bm90KDpvbmx5LW9mLXR5cGUpPjpub3QoLnVrLWxvZ28taW52ZXJzZSksLnVrLW9mZmNhbnZhcy1iYXIgLnVrLWxvZ28+Om5vdChwaWN0dXJlKTpub3QoLnVrLWxvZ28taW52ZXJzZSk6bm90KDpvbmx5LW9mLXR5cGUpLC51ay1vZmZjYW52YXMtYmFyIC51ay1sb2dvPnBpY3R1cmU6bm90KDpvbmx5LW9mLXR5cGUpPjpub3QoLnVrLWxvZ28taW52ZXJzZSksLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbG9nbz46bm90KHBpY3R1cmUpOm5vdCgudWstbG9nby1pbnZlcnNlKTpub3QoOm9ubHktb2YtdHlwZSksLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbG9nbz5waWN0dXJlOm5vdCg6b25seS1vZi10eXBlKT46bm90KC51ay1sb2dvLWludmVyc2UpLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28+Om5vdChwaWN0dXJlKTpub3QoLnVrLWxvZ28taW52ZXJzZSk6bm90KDpvbmx5LW9mLXR5cGUpLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28+cGljdHVyZTpub3QoOm9ubHktb2YtdHlwZSk+Om5vdCgudWstbG9nby1pbnZlcnNlKSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28+Om5vdChwaWN0dXJlKTpub3QoLnVrLWxvZ28taW52ZXJzZSk6bm90KDpvbmx5LW9mLXR5cGUpLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbz5waWN0dXJlOm5vdCg6b25seS1vZi10eXBlKT46bm90KC51ay1sb2dvLWludmVyc2UpLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28+Om5vdChwaWN0dXJlKTpub3QoLnVrLWxvZ28taW52ZXJzZSk6bm90KDpvbmx5LW9mLXR5cGUpLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28+cGljdHVyZTpub3QoOm9ubHktb2YtdHlwZSk+Om5vdCgudWstbG9nby1pbnZlcnNlKSwudWstdGlsZS1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28+Om5vdChwaWN0dXJlKTpub3QoLnVrLWxvZ28taW52ZXJzZSk6bm90KDpvbmx5LW9mLXR5cGUpLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstbG9nbz5waWN0dXJlOm5vdCg6b25seS1vZi10eXBlKT46bm90KC51ay1sb2dvLWludmVyc2Upe2Rpc3BsYXk6bm9uZX0udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstbG9nby1pbnZlcnNlLC51ay1jYXJkLXByaW1hcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbG9nby1pbnZlcnNlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWxvZ28taW52ZXJzZSwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstbG9nby1pbnZlcnNlLC51ay1saWdodCAudWstbG9nby1pbnZlcnNlLC51ay1vZmZjYW52YXMtYmFyIC51ay1sb2dvLWludmVyc2UsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstbG9nby1pbnZlcnNlLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28taW52ZXJzZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWxvZ28taW52ZXJzZSwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvLWludmVyc2UsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1sb2dvLWludmVyc2V7ZGlzcGxheTpibG9ja30udWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZSgybik6bGFzdC1jaGlsZCwudWstY2FyZC1wcmltYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZSgybik6bGFzdC1jaGlsZCwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoMm4pOmxhc3QtY2hpbGQsLnVrLWNhcmQtcHJpbWFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay10YWJsZS1zdHJpcGVkPnRyOm50aC1vZi10eXBlKDJuKTpsYXN0LWNoaWxkLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoMm4pOmxhc3QtY2hpbGQsLnVrLWNhcmQtc2Vjb25kYXJ5LnVrLWNhcmQtYm9keSAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZSgybik6bGFzdC1jaGlsZCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtb2YtdHlwZSgybik6bGFzdC1jaGlsZCwudWstY2FyZC1zZWNvbmRhcnk+Om5vdChbY2xhc3MqPXVrLWNhcmQtbWVkaWFdKSAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZSgybik6bGFzdC1jaGlsZCwudWstbGlnaHQgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoMm4pOmxhc3QtY2hpbGQsLnVrLWxpZ2h0IC51ay10YWJsZS1zdHJpcGVkPnRyOm50aC1vZi10eXBlKDJuKTpsYXN0LWNoaWxkLC51ay1vZmZjYW52YXMtYmFyIC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKDJuKTpsYXN0LWNoaWxkLC51ay1vZmZjYW52YXMtYmFyIC51ay10YWJsZS1zdHJpcGVkPnRyOm50aC1vZi10eXBlKDJuKTpsYXN0LWNoaWxkLC51ay1vdmVybGF5LXByaW1hcnkgLnVrLXRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLW9mLXR5cGUoMm4pOmxhc3QtY2hpbGQsLnVrLW92ZXJsYXktcHJpbWFyeSAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZSgybik6bGFzdC1jaGlsZCwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKDJuKTpsYXN0LWNoaWxkLC51ay1zZWN0aW9uLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQ+dHI6bnRoLW9mLXR5cGUoMm4pOmxhc3QtY2hpbGQsLnVrLXNlY3Rpb24tc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKDJuKTpsYXN0LWNoaWxkLC51ay1zZWN0aW9uLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZSgybik6bGFzdC1jaGlsZCwudWstdGlsZS1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKDJuKTpsYXN0LWNoaWxkLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLXRhYmxlLXN0cmlwZWQ+dHI6bnRoLW9mLXR5cGUoMm4pOmxhc3QtY2hpbGQsLnVrLXRpbGUtc2Vjb25kYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay10YWJsZS1zdHJpcGVkIHRib2R5IHRyOm50aC1vZi10eXBlKDJuKTpsYXN0LWNoaWxkLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstdGFibGUtc3RyaXBlZD50cjpudGgtb2YtdHlwZSgybik6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwudWstbGlnaHQgLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLC51ay1vZmZjYW52YXMtYmFyIC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmV7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTMlMjIlMjBoZWlnaHQlM0QlMjIxMyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEzJTIwMTMlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIycmdiYSUyODI1NSwlMjAyNTUsJTIwMjU1LCUyMDAuNyUyOSUyMiUyMHdpZHRoJTNEJTIyMTMlMjIlMjBoZWlnaHQlM0QlMjIxJTIyJTIweCUzRCUyMjAlMjIlMjB5JTNEJTIyNiUyMiUyMCUyRiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIycmdiYSUyODI1NSwlMjAyNTUsJTIwMjU1LCUyMDAuNyUyOSUyMiUyMHdpZHRoJTNEJTIyMSUyMiUyMGhlaWdodCUzRCUyMjEzJTIyJTIweCUzRCUyMjYlMjIlMjB5JTNEJTIyMCUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpfS51ay1jYXJkLXByaW1hcnkudWstY2FyZC1ib2R5IC51ay1vcGVuPi51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwudWstY2FyZC1wcmltYXJ5Pjpub3QoW2NsYXNzKj11ay1jYXJkLW1lZGlhXSkgLnVrLW9wZW4+LnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeS51ay1jYXJkLWJvZHkgLnVrLW9wZW4+LnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLC51ay1jYXJkLXNlY29uZGFyeT46bm90KFtjbGFzcyo9dWstY2FyZC1tZWRpYV0pIC51ay1vcGVuPi51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwudWstbGlnaHQgLnVrLW9wZW4+LnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLC51ay1vZmZjYW52YXMtYmFyIC51ay1vcGVuPi51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwudWstb3ZlcmxheS1wcmltYXJ5IC51ay1vcGVuPi51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwudWstc2VjdGlvbi1wcmltYXJ5Om5vdCgudWstcHJlc2VydmUtY29sb3IpIC51ay1vcGVuPi51ay1hY2NvcmRpb24tdGl0bGU6OmJlZm9yZSwudWstc2VjdGlvbi1zZWNvbmRhcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW9wZW4+LnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLC51ay10aWxlLXByaW1hcnk6bm90KC51ay1wcmVzZXJ2ZS1jb2xvcikgLnVrLW9wZW4+LnVrLWFjY29yZGlvbi10aXRsZTo6YmVmb3JlLC51ay10aWxlLXNlY29uZGFyeTpub3QoLnVrLXByZXNlcnZlLWNvbG9yKSAudWstb3Blbj4udWstYWNjb3JkaW9uLXRpdGxlOjpiZWZvcmV7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PVVURi04LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTMlMjIlMjBoZWlnaHQlM0QlMjIxMyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEzJTIwMTMlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIycmdiYSUyODI1NSwlMjAyNTUsJTIwMjU1LCUyMDAuNyUyOSUyMiUyMHdpZHRoJTNEJTIyMTMlMjIlMjBoZWlnaHQlM0QlMjIxJTIyJTIweCUzRCUyMjAlMjIlMjB5JTNEJTIyNiUyMiUyMCUyRiUzRSUwQSUzQyUyRnN2ZyUzRSIpfUBtZWRpYSBwcmludHsqLDo6YWZ0ZXIsOjpiZWZvcmV7YmFja2dyb3VuZDowIDAhaW1wb3J0YW50O2NvbG9yOiMwMDAhaW1wb3J0YW50O2JveC1zaGFkb3c6bm9uZSFpbXBvcnRhbnQ7dGV4dC1zaGFkb3c6bm9uZSFpbXBvcnRhbnR9YSxhOnZpc2l0ZWR7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX1ibG9ja3F1b3RlLHByZXtib3JkZXI6MXB4IHNvbGlkICM5OTk7cGFnZS1icmVhay1pbnNpZGU6YXZvaWR9dGhlYWR7ZGlzcGxheTp0YWJsZS1oZWFkZXItZ3JvdXB9aW1nLHRye3BhZ2UtYnJlYWstaW5zaWRlOmF2b2lkfWltZ3ttYXgtd2lkdGg6MTAwJSFpbXBvcnRhbnR9QHBhZ2V7bWFyZ2luOi41Y219aDIsaDMscHtvcnBoYW5zOjM7d2lkb3dzOjN9aDIsaDN7cGFnZS1icmVhay1hZnRlcjphdm9pZH19]]></data>
	</file>
	<file>
	  <filename>/data</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/data/cfg_extended_modules_sample.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIHdoZXRoZXIgdG8gdXNlIGJhY2tzbGFzaCBjc3MKICogZGVmYXVsdDogMCBvciBmYWxzZQogKi8KJGNvbmZpZ1snYWRkX2JhY2tzbGFzaCddID0gMDsKCi8qKgogKiB3aGV0aGVyIHRvIHVzZSB1aWtpdCBjc3MgYW5kIGpzCiAqIGRlZmF1bHQ6IDAgb3IgZmFsc2UKICovCiRjb25maWdbJ2FkZF91aWtpdCddID0gMDsKCi8qKgogKiB3aGV0aGVyIHRvIHVzZSByaW90IGpzCiAqIGRlZmF1bHQ6IDAgb3IgZmFsc2UKICovCiRjb25maWdbJ2FkZF9yaW90J10gPSAwOwoKLyoqCiAqIHdoZXRoZXIgdG8gdXNlIGJhY2tib25lIGpzCiAqIGRlZmF1bHQ6IDAgb3IgZmFsc2UKICovCiRjb25maWdbJ2FkZF9iYWNrYm9uZSddID0gMDsKCi8qKgogKiBub3RlIHVuZGVyc2NvcmUgYW5kIGxvZGFzaCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlCiAqLwoKLyoqCiAqIHdoZXRoZXIgdG8gdXNlIHVuZGVyc2NvcmUganMKICogZGVmYXVsdDogMCBvciBmYWxzZQogKi8KJGNvbmZpZ1snYWRkX3VuZGVyc2NvcmUnXSA9IDA7CgoKLyoqCiAqIHdoZXRoZXIgdG8gdXNlIGxvZGFzaCBqcwogKiBkZWZhdWx0OiAwIG9yIGZhbHNlCiAqLwokY29uZmlnWydhZGRfbG9kYXNoJ10gPSAwOwoKLyoqKi8KCi8qKgogKiB3aGV0aGVyIHRvIGNhY2hlIGpzIChtYWlubHkgZm9yIGRlYnVnZ2luZykKICogZGVmYXVsdDogMCBvciBmYWxzZQogKi8KJGNvbmZpZ1snbm9fanNfY2FjaGUnXSA9IDA7CgovKioKICogd2hldGhlciB0byBkZWZlciBqcwogKiBkZWZhdWx0OiAwIG9yIGZhbHNlCiAqLwokY29uZmlnWydkZWZlcl9qcyddID0gMDsKCg==]]></data>
	</file>
	<file>
	  <filename>/data/cfg_sample.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoaXMgaXMgYSBzYW1wbGUgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBmaWxlIGZvciBDTVNNU0V4dAogKiBUaGUgZGVwcmVjYXRlZCBDTVNNUyBjb3JlIGNvbmZpZyBlbnRyaWVzIGZvciB0aGlzIG1vZHVsZQogKiBjYW4gYmUgZm91bmQgaGVyZSBzbyB0aGF0IHlvdSBjYW4gc2V0IHRoZW0gYXQgd2lsbC4KICogVGhpcyBmaWxlICgnY2ZnX3NhbXBsZS5pbmMnKSBpcyBub3QgdXNlZCB0aG91Z2gsCiAqIGl0cyBjb250ZW50cywgb3IgdGhlIGVudHJpZXMgbmVlZGVkLAogKiBtdXN0IGJlIGNvcGllZCB0byBhIGZpbGUgbmFtZWQgY2ZnLmluYwogKiB0aGF0IHNob3VsZCBleGlzdCBpbiB0aGlzIHNhbWUgZm9sZGVyIChkYXRhKS4KICogaWYgaXQgZG9lc24ndCBleGlzdCAoaXQgaXMgbm90IHJlcXVpcmVkIGZvciB0aGUgbW9kdWxlIHRvIHdvcmspCiAqIGNyZWF0ZSBvbmUgd2l0aCBqdXN0IHRoZSBlbnRyaWVzIHlvdSBuZWVkIHRvIGFsdGVyIGZyb20gdGhlIGRlZmF1bHQgYmVoYXZpb3VyCiAqCiAqIE5vdGU6IG1pZ3JhdGlvbiBmcm9tIENHRXh0ZW5zaW9ucyB3aXRoIGVudHJpZXMgaW4gdGhlIGNvcmUgY29uZmlnCiAqIHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUgYSBjZmcuaW5jCiAqLwovKioKICogTGVnYWN5IGVudHJpZXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBDR0V4dGVuc2lvbnMKICogSW4gdGhlIGZ1dHVyZSB0aGVzZSBzZXR0aW5nIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZQogKiBtb2R1bGUncyBhZG1pbiBjb25zb2xlCiAqLwokY29uZmlnWyd4dF9wcmV0dHlodG1sJ10gICAgICAgICAgICAgICA9IEZBTFNFOwokY29uZmlnWyd4dF9taW5odG1sJ10gICAgICAgICAgICAgICAgICA9IEZBTFNFOwokY29uZmlnWyd4dGpzX2NhY2hlbGlmZSddICAgICAgICAgICAgICA9IDI0OwokY29uZmlnWyd4dGpzX25vY2FjaGUnXSAgICAgICAgICAgICAgICA9IEZBTFNFOwokY29uZmlnWyd4dGpzX25vbWluaWZ5J10gICAgICAgICAgICAgICA9IEZBTFNFOwokY29uZmlnWyd4dF9yZWxheF9zcWwnXSAgICAgICAgICAgICAgICA9IEZBTFNFOwokY29uZmlnWyd4dF9pZ25vcmVfY3NyZiddICAgICAgICAgICAgICA9IEZBTFNFOwokY29uZmlnWyd4dF91cGxvYWRfYWxsb3dlZF9maWxldHlwZXMnXSA9ICdqcGcsanBlZyxwbmcnOwokY29uZmlnWyd4dF9pbWFnZWV4dGVuc2lvbnMnXSAgICAgICAgICA9ICdqcGcsanBlZyxwbmcnOwokY29uZmlnWyd4dF9hbGxvd193YXRlcm1hcmtpbmcnXSAgICAgICA9IFRSVUU7CiRjb25maWdbJ3h0X3dhdGVybWFya190ZXh0J10gICAgICAgICAgID0gJ1RFU1QnOwokY29uZmlnWyd4dF93YXRlcm1hcmtfdGV4dHNpemUnXSAgICAgICA9IDEyOwokY29uZmlnWyd4dF93YXRlcm1hcmtfYW5nbGUnXSAgICAgICAgICA9IDEwOwokY29uZmlnWyd4dF93YXRlcm1hcmtfZm9udCddICAgICAgICAgICA9ICdBUklBTC5UVEYnOwokY29uZmlnWyd4dF93YXRlcm1hcmtfdGV4dGNvbG9yJ10gICAgICA9ICcjRkZGRkZGJzsKJGNvbmZpZ1sneHRfd2F0ZXJtYXJrX2JnY29sb3InXSAgICAgICAgPSAnI0ZGRkZGRic7CiRjb25maWdbJ3h0X3dhdGVybWFya190cmFuc3BhcmVudCddICAgID0gVFJVRTsKJGNvbmZpZ1sneHRfd2F0ZXJtYXJrX2ZpbGUnXSAgICAgICAgICAgPSAndGVzdCc7CiRjb25maWdbJ3h0X3dhdGVybWFya19hbGlnbm1lbnQnXSAgICAgID0gNDsKJGNvbmZpZ1sneHRfd2F0ZXJtYXJrX3RyYW5zbHVjZW5jeSddICAgPSAxMDA7CiRjb25maWdbJ3h0X2FsbG93X3ByZXZpZXcnXSAgICAgICAgICAgID0gVFJVRTsKJGNvbmZpZ1sneHRfcHJldmlld19zaXplJ10gICAgICAgICAgICAgPSAxMDA7CiRjb25maWdbJ3h0X2RlbGV0ZV9vcmlnX2ltYWdlJ10gICAgICAgID0gVFJVRTsKJGNvbmZpZ1sneHRfYWxsb3dfdGh1bWJuYWlsaW5nJ10gICAgICAgPSBUUlVFOwokY29uZmlnWyd4dF90aHVtYm5haWxfc2l6ZSddICAgICAgICAgICA9IDc1OwokY29uZmlnWyd4dF9kZWZlcl9qcyddICAgICAgICAgICAgICAgICA9IFRSVUU7CiRjb25maWdbJ3h0X3ByZWxvYWRfY3NzJ10gICAgICAgICAgICAgID0gVFJVRTsKJGNvbmZpZ1sneHh4eHh4eHh4X2FkbWluc2VjdGlvbiddICAgICAgPSAnZXh0ZW5zaW9ucyc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/data/smartysafelist.dat</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[c3RybGVuCnN0cmNtcApzdHJuY21wCnN0cmNhc2VjbXAKc3RybmNhc2VjbXAKYmNhZGQKYmNzdWIKYmNtdWwKYmNkaXYKYmNtb2QKYmNwb3cKYmNzcXJ0CmJjc2NhbGUKYmNjb21wCmJjcG93bW9kCmpkdG9ncmVnb3JpYW4KZ3JlZ29yaWFudG9qZApqZHRvanVsaWFuCmp1bGlhbnRvamQKamR0b2pld2lzaApqZXdpc2h0b2pkCmpkdG9mcmVuY2gKZnJlbmNodG9qZApqZGRheW9md2VlawpqZG1vbnRobmFtZQplYXN0ZXJfZGF0ZQplYXN0ZXJfZGF5cwp1bml4dG9qZApqZHRvdW5peApjYWxfdG9famQKY2FsX2Zyb21famQKY2FsX2RheXNfaW5fbW9udGgKY2FsX2luZm8Kc3RydG90aW1lCmRhdGUKaWRhdGUKZ21kYXRlCm1rdGltZQpnbW1rdGltZQpjaGVja2RhdGUKc3RyZnRpbWUKZ21zdHJmdGltZQp0aW1lCmxvY2FsdGltZQpnZXRkYXRlCmRhdGVfY3JlYXRlCmRhdGVfY3JlYXRlX2ltbXV0YWJsZQpkYXRlX2NyZWF0ZV9mcm9tX2Zvcm1hdApkYXRlX2NyZWF0ZV9pbW11dGFibGVfZnJvbV9mb3JtYXQKZGF0ZV9wYXJzZQpkYXRlX3BhcnNlX2Zyb21fZm9ybWF0CmRhdGVfZ2V0X2xhc3RfZXJyb3JzCmRhdGVfZm9ybWF0CmRhdGVfbW9kaWZ5CmRhdGVfYWRkCmRhdGVfc3ViCmRhdGVfdGltZXpvbmVfZ2V0CmRhdGVfdGltZXpvbmVfc2V0CmRhdGVfb2Zmc2V0X2dldApkYXRlX2RpZmYKZGF0ZV90aW1lX3NldApkYXRlX2RhdGVfc2V0CmRhdGVfaXNvZGF0ZV9zZXQKZGF0ZV90aW1lc3RhbXBfc2V0CmRhdGVfdGltZXN0YW1wX2dldAp0aW1lem9uZV9vcGVuCnRpbWV6b25lX25hbWVfZ2V0CnRpbWV6b25lX25hbWVfZnJvbV9hYmJyCnRpbWV6b25lX29mZnNldF9nZXQKdGltZXpvbmVfdHJhbnNpdGlvbnNfZ2V0CnRpbWV6b25lX2xvY2F0aW9uX2dldAp0aW1lem9uZV9pZGVudGlmaWVyc19saXN0CnRpbWV6b25lX2FiYnJldmlhdGlvbnNfbGlzdAp0aW1lem9uZV92ZXJzaW9uX2dldApkYXRlX2ludGVydmFsX2NyZWF0ZV9mcm9tX2RhdGVfc3RyaW5nCmRhdGVfaW50ZXJ2YWxfZm9ybWF0CmRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQKZGF0ZV9kZWZhdWx0X3RpbWV6b25lX2dldApkYXRlX3N1bnJpc2UKZGF0ZV9zdW5zZXQKZGF0ZV9zdW5faW5mbwpmaWx0ZXJfaW5wdXQKZmlsdGVyX3ZhcgpmaWx0ZXJfaW5wdXRfYXJyYXkKZmlsdGVyX3Zhcl9hcnJheQpmaWx0ZXJfbGlzdApmaWx0ZXJfaGFzX3ZhcgpmaWx0ZXJfaWQKaGFzaApoYXNoX2ZpbGUKaGFzaF9obWFjCmhhc2hfaG1hY19maWxlCmhhc2hfaW5pdApoYXNoX3VwZGF0ZQpoYXNoX3VwZGF0ZV9zdHJlYW0KaGFzaF91cGRhdGVfZmlsZQpoYXNoX2ZpbmFsCmhhc2hfY29weQpoYXNoX2FsZ29zCmhhc2hfaG1hY19hbGdvcwpoYXNoX3Bia2RmMgpoYXNoX2VxdWFscwpoYXNoX2hrZGYKbWhhc2hfa2V5Z2VuX3MyawptaGFzaF9nZXRfYmxvY2tfc2l6ZQptaGFzaF9nZXRfaGFzaF9uYW1lCm1oYXNoX2NvdW50Cm1oYXNoCmljb252Cmljb252X2dldF9lbmNvZGluZwppY29udl9zZXRfZW5jb2RpbmcKaWNvbnZfc3RybGVuCmljb252X3N1YnN0cgppY29udl9zdHJwb3MKaWNvbnZfc3RycnBvcwppY29udl9taW1lX2VuY29kZQppY29udl9taW1lX2RlY29kZQppY29udl9taW1lX2RlY29kZV9oZWFkZXJzCmpzb25fZW5jb2RlCmpzb25fZGVjb2RlCmpzb25fbGFzdF9lcnJvcgpqc29uX2xhc3RfZXJyb3JfbXNnCnByZWdfbWF0Y2gKcHJlZ19tYXRjaF9hbGwKcHJlZ19yZXBsYWNlCnByZWdfcmVwbGFjZV9jYWxsYmFjawpwcmVnX3JlcGxhY2VfY2FsbGJhY2tfYXJyYXkKcHJlZ19maWx0ZXIKcHJlZ19zcGxpdApwcmVnX3F1b3RlCnByZWdfZ3JlcApwcmVnX2xhc3RfZXJyb3IKc3BsX29iamVjdF9oYXNoCnNwbF9vYmplY3RfaWQKaXRlcmF0b3JfdG9fYXJyYXkKaXRlcmF0b3JfY291bnQKaXRlcmF0b3JfYXBwbHkKY29uc3RhbnQKYmluMmhleApoZXgyYmluCndvcmR3cmFwCmh0bWxzcGVjaWFsY2hhcnMKaHRtbGVudGl0aWVzCmh0bWxfZW50aXR5X2RlY29kZQpodG1sc3BlY2lhbGNoYXJzX2RlY29kZQpnZXRfaHRtbF90cmFuc2xhdGlvbl90YWJsZQpzaGExCnNoYTFfZmlsZQptZDUKY3JjMzIKaXB0Y3BhcnNlCmlwdGNlbWJlZApnZXRpbWFnZXNpemUKZ2V0aW1hZ2VzaXplZnJvbXN0cmluZwppbWFnZV90eXBlX3RvX21pbWVfdHlwZQppbWFnZV90eXBlX3RvX2V4dGVuc2lvbgpzdHJuYXRjbXAKc3RybmF0Y2FzZWNtcApzdWJzdHJfY291bnQKc3Ryc3BuCnN0cmNzcG4Kc3RydG9rCnN0cnRvdXBwZXIKc3RydG9sb3dlcgpzdHJwb3MKc3RyaXBvcwpzdHJycG9zCnN0cnJpcG9zCnN0cnJldgpoZWJyZXYKaGVicmV2YwpubDJicgpzdHJpcHNsYXNoZXMKc3RyaXBjc2xhc2hlcwpzdHJzdHIKc3RyaXN0cgpzdHJyY2hyCnN0cl9zaHVmZmxlCnN0cl93b3JkX2NvdW50CnN0cl9zcGxpdApzdHJwYnJrCnN1YnN0cl9jb21wYXJlCnV0ZjhfZW5jb2RlCnV0ZjhfZGVjb2RlCnN0cmNvbGwKc3Vic3RyCnN1YnN0cl9yZXBsYWNlCnF1b3RlbWV0YQp1Y2ZpcnN0CmxjZmlyc3QKdWN3b3JkcwpzdHJ0cgphZGRzbGFzaGVzCmFkZGNzbGFzaGVzCnJ0cmltCnN0cl9yZXBsYWNlCnN0cl9pcmVwbGFjZQpzdHJfcmVwZWF0CmNvdW50X2NoYXJzCmNodW5rX3NwbGl0CnRyaW0KbHRyaW0Kc3RyaXBfdGFncwpzaW1pbGFyX3RleHQKZXhwbG9kZQppbXBsb2RlCmpvaW4Kc2V0bG9jYWxlCmxvY2FsZWNvbnYKc291bmRleApsZXZlbnNodGVpbgpjaHIKb3JkCnBhcnNlX3N0cgpzdHJfZ2V0Y3N2CnN0cl9wYWQKY2hvcApzdHJjaHIKc3ByaW50ZgpwcmludGYKdnByaW50Zgp2c3ByaW50ZgpmcHJpbnRmCnZmcHJpbnRmCnNzY2FuZgpmc2NhbmYKcGFyc2VfdXJsCnVybGVuY29kZQp1cmxkZWNvZGUKcmF3dXJsZW5jb2RlCnJhd3VybGRlY29kZQpodHRwX2J1aWxkX3F1ZXJ5CnJlYWRsaW5rCmxpbmtpbmZvCnJhbmQKc3JhbmQKZ2V0cmFuZG1heAptdF9yYW5kCm10X3NyYW5kCm10X2dldHJhbmRtYXgKcmFuZG9tX2J5dGVzCnJhbmRvbV9pbnQKYmFzZTY0X2RlY29kZQpiYXNlNjRfZW5jb2RlCnBhc3N3b3JkX2hhc2gKcGFzc3dvcmRfZ2V0X2luZm8KcGFzc3dvcmRfbmVlZHNfcmVoYXNoCnBhc3N3b3JkX3ZlcmlmeQpwYXNzd29yZF9hbGdvcwpjb252ZXJ0X3V1ZW5jb2RlCmNvbnZlcnRfdXVkZWNvZGUKYWJzCmNlaWwKZmxvb3IKcm91bmQKc2luCmNvcwp0YW4KYXNpbgphY29zCmF0YW4KYXRhbmgKYXRhbjIKc2luaApjb3NoCnRhbmgKYXNpbmgKYWNvc2gKZXhwbTEKbG9nMXAKcGkKaXNfZmluaXRlCmlzX25hbgppc19pbmZpbml0ZQpwb3cKZXhwCmxvZwpsb2cxMApzcXJ0Cmh5cG90CmRlZzJyYWQKcmFkMmRlZwpiaW5kZWMKaGV4ZGVjCm9jdGRlYwpkZWNiaW4KZGVjb2N0CmRlY2hleApiYXNlX2NvbnZlcnQKbnVtYmVyX2Zvcm1hdApmbW9kCmludGRpdgppbmV0X250b3AKaW5ldF9wdG9uCmlwMmxvbmcKbG9uZzJpcApnZXRlbnYKcHV0ZW52CmdldG9wdAptaWNyb3RpbWUKZ2V0dGltZW9mZGF5CmdldHJ1c2FnZQpocnRpbWUKdW5pcWlkCnNlcmlhbGl6ZQp1bnNlcmlhbGl6ZQp2YXJfZHVtcAp2YXJfZXhwb3J0CmRlYnVnX3p2YWxfZHVtcApwcmludF9yCmludHZhbApmbG9hdHZhbApkb3VibGV2YWwKc3RydmFsCmJvb2x2YWwKZ2V0dHlwZQpzZXR0eXBlCmlzX251bGwKaXNfcmVzb3VyY2UKaXNfYm9vbAppc19pbnQKaXNfZmxvYXQKaXNfaW50ZWdlcgppc19sb25nCmlzX2RvdWJsZQppc19yZWFsCmlzX251bWVyaWMKaXNfc3RyaW5nCmlzX2FycmF5CmlzX29iamVjdAppc19zY2FsYXIKaXNfY2FsbGFibGUKaXNfaXRlcmFibGUKaXNfY291bnRhYmxlCmtzb3J0Cmtyc29ydApuYXRzb3J0Cm5hdGNhc2Vzb3J0CmFzb3J0CmFyc29ydApzb3J0CnJzb3J0CnVzb3J0CnVhc29ydAp1a3NvcnQKc2h1ZmZsZQphcnJheV93YWxrCmFycmF5X3dhbGtfcmVjdXJzaXZlCmNvdW50CmN1cnJlbnQKa2V5Cm1pbgptYXgKaW5fYXJyYXkKYXJyYXlfc2VhcmNoCmFycmF5X2ZpbGwKYXJyYXlfZmlsbF9rZXlzCnJhbmdlCmFycmF5X211bHRpc29ydAphcnJheV9wdXNoCmFycmF5X3BvcAphcnJheV9zaGlmdAphcnJheV91bnNoaWZ0CmFycmF5X3NwbGljZQphcnJheV9zbGljZQphcnJheV9tZXJnZQphcnJheV9tZXJnZV9yZWN1cnNpdmUKYXJyYXlfcmVwbGFjZQphcnJheV9yZXBsYWNlX3JlY3Vyc2l2ZQphcnJheV9rZXlzCmFycmF5X2tleV9maXJzdAphcnJheV9rZXlfbGFzdAphcnJheV92YWx1ZXMKYXJyYXlfY291bnRfdmFsdWVzCmFycmF5X2NvbHVtbgphcnJheV9yZXZlcnNlCmFycmF5X3JlZHVjZQphcnJheV9wYWQKYXJyYXlfZmxpcAphcnJheV9jaGFuZ2Vfa2V5X2Nhc2UKYXJyYXlfcmFuZAphcnJheV91bmlxdWUKYXJyYXlfaW50ZXJzZWN0CmFycmF5X2ludGVyc2VjdF9rZXkKYXJyYXlfaW50ZXJzZWN0X3VrZXkKYXJyYXlfdWludGVyc2VjdAphcnJheV9pbnRlcnNlY3RfYXNzb2MKYXJyYXlfdWludGVyc2VjdF9hc3NvYwphcnJheV9pbnRlcnNlY3RfdWFzc29jCmFycmF5X3VpbnRlcnNlY3RfdWFzc29jCmFycmF5X2RpZmYKYXJyYXlfZGlmZl9rZXkKYXJyYXlfZGlmZl91a2V5CmFycmF5X3VkaWZmCmFycmF5X2RpZmZfYXNzb2MKYXJyYXlfdWRpZmZfYXNzb2MKYXJyYXlfZGlmZl91YXNzb2MKYXJyYXlfdWRpZmZfdWFzc29jCmFycmF5X3N1bQphcnJheV9wcm9kdWN0CmFycmF5X2ZpbHRlcgphcnJheV9tYXAKYXJyYXlfY2h1bmsKYXJyYXlfY29tYmluZQphcnJheV9rZXlfZXhpc3RzCnBvcwpzaXplb2YKa2V5X2V4aXN0cwphc3NlcnQKYXNzZXJ0X29wdGlvbnMKdmVyc2lvbl9jb21wYXJlCmZ0b2sKc3RyX3JvdDEzCnRleHRkb21haW4KZ2V0dGV4dApkZ2V0dGV4dApkY2dldHRleHQKYmluZHRleHRkb21haW4KbmdldHRleHQKZG5nZXR0ZXh0CmRjbmdldHRleHQKYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKZGF0ZWZtdF9jcmVhdGUKZGF0ZWZtdF9nZXRfZGF0ZXR5cGUKZGF0ZWZtdF9nZXRfdGltZXR5cGUKZGF0ZWZtdF9nZXRfY2FsZW5kYXIKZGF0ZWZtdF9nZXRfY2FsZW5kYXJfb2JqZWN0CmRhdGVmbXRfc2V0X2NhbGVuZGFyCmRhdGVmbXRfZ2V0X2xvY2FsZQpkYXRlZm10X2dldF90aW1lem9uZV9pZApkYXRlZm10X2dldF90aW1lem9uZQpkYXRlZm10X3NldF90aW1lem9uZQpkYXRlZm10X2dldF9wYXR0ZXJuCmRhdGVmbXRfc2V0X3BhdHRlcm4KZGF0ZWZtdF9pc19sZW5pZW50CmRhdGVmbXRfc2V0X2xlbmllbnQKZGF0ZWZtdF9mb3JtYXQKZGF0ZWZtdF9mb3JtYXRfb2JqZWN0CmRhdGVmbXRfcGFyc2UKZGF0ZWZtdF9sb2NhbHRpbWUKZGF0ZWZtdF9nZXRfZXJyb3JfY29kZQpkYXRlZm10X2dldF9lcnJvcl9tZXNzYWdlCmdyYXBoZW1lX3N0cmxlbgpncmFwaGVtZV9zdHJwb3MKZ3JhcGhlbWVfc3RyaXBvcwpncmFwaGVtZV9zdHJycG9zCmdyYXBoZW1lX3N0cnJpcG9zCmdyYXBoZW1lX3N1YnN0cgpncmFwaGVtZV9zdHJzdHIKZ3JhcGhlbWVfc3RyaXN0cgpncmFwaGVtZV9leHRyYWN0Cmlkbl90b19hc2NpaQppZG5fdG9fdXRmOAptYl9jb252ZXJ0X2Nhc2UKbWJfc3RydG91cHBlcgptYl9zdHJ0b2xvd2VyCm1iX2xhbmd1YWdlCm1iX2ludGVybmFsX2VuY29kaW5nCm1iX2h0dHBfaW5wdXQKbWJfaHR0cF9vdXRwdXQKbWJfZGV0ZWN0X29yZGVyCm1iX3N1YnN0aXR1dGVfY2hhcmFjdGVyCm1iX3BhcnNlX3N0cgptYl9vdXRwdXRfaGFuZGxlcgptYl9wcmVmZXJyZWRfbWltZV9uYW1lCm1iX3N0cl9zcGxpdAptYl9zdHJsZW4KbWJfc3RycG9zCm1iX3N0cnJwb3MKbWJfc3RyaXBvcwptYl9zdHJyaXBvcwptYl9zdHJzdHIKbWJfc3RycmNocgptYl9zdHJpc3RyCm1iX3N0cnJpY2hyCm1iX3N1YnN0cl9jb3VudAptYl9zdWJzdHIKbWJfc3RyY3V0Cm1iX3N0cndpZHRoCm1iX3N0cmltd2lkdGgKbWJfY29udmVydF9lbmNvZGluZwptYl9kZXRlY3RfZW5jb2RpbmcKbWJfbGlzdF9lbmNvZGluZ3MKbWJfZW5jb2RpbmdfYWxpYXNlcwptYl9jb252ZXJ0X2thbmEKbWJfZW5jb2RlX21pbWVoZWFkZXIKbWJfZGVjb2RlX21pbWVoZWFkZXIKbWJfY29udmVydF92YXJpYWJsZXMKbWJfZW5jb2RlX251bWVyaWNlbnRpdHkKbWJfZGVjb2RlX251bWVyaWNlbnRpdHkKbWJfc2VuZF9tYWlsCm1iX2dldF9pbmZvCm1iX2NoZWNrX2VuY29kaW5nCm1iX29yZAptYl9jaHIKbWJfc2NydWIKbWJfcmVnZXhfZW5jb2RpbmcKbWJfcmVnZXhfc2V0X29wdGlvbnMKbWJfZXJlZwptYl9lcmVnaQptYl9lcmVnX3JlcGxhY2UKbWJfZXJlZ2lfcmVwbGFjZQptYl9lcmVnX3JlcGxhY2VfY2FsbGJhY2sKbWJfc3BsaXQKbWJfZXJlZ19tYXRjaAptYl9lcmVnX3NlYXJjaAptYl9lcmVnX3NlYXJjaF9wb3MKbWJfZXJlZ19zZWFyY2hfcmVncwptYl9lcmVnX3NlYXJjaF9pbml0Cm1iX2VyZWdfc2VhcmNoX2dldHJlZ3MKbWJfZXJlZ19zZWFyY2hfZ2V0cG9zCm1iX2VyZWdfc2VhcmNoX3NldHBvcwptYnJlZ2V4X2VuY29kaW5nCm1iZXJlZwptYmVyZWdpCm1iZXJlZ19yZXBsYWNlCm1iZXJlZ2lfcmVwbGFjZQptYnNwbGl0Cm1iZXJlZ19tYXRjaAptYmVyZWdfc2VhcmNoCm1iZXJlZ19zZWFyY2hfcG9zCm1iZXJlZ19zZWFyY2hfcmVncwptYmVyZWdfc2VhcmNoX2luaXQKbWJlcmVnX3NlYXJjaF9nZXRyZWdzCm1iZXJlZ19zZWFyY2hfZ2V0cG9zCm1iZXJlZ19zZWFyY2hfc2V0cG9zCmV4aWZfcmVhZF9kYXRhCnJlYWRfZXhpZl9kYXRhCmV4aWZfdGFnbmFtZQpleGlmX3RodW1ibmFpbApleGlmX2ltYWdldHlwZQ==]]></data>
	</file>
	<file>
	  <filename>/docs</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/docs/COPYING</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQ0KICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNw0KDQogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPg0KIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcw0KIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUNCg0KICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcg0Kc29mdHdhcmUgYW5kIG90aGVyIGtpbmRzIG9mIHdvcmtzLg0KDQogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZA0KdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIHRoZSB3b3Jrcy4gIEJ5IGNvbnRyYXN0LA0KdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8NCnNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQ0Kc29mdHdhcmUgZm9yIGFsbCBpdHMgdXNlcnMuICBXZSwgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdXNlIHRoZQ0KR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vc3Qgb2Ygb3VyIHNvZnR3YXJlOyBpdCBhcHBsaWVzIGFsc28gdG8NCmFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNhbiBhcHBseSBpdCB0bw0KeW91ciBwcm9ncmFtcywgdG9vLg0KDQogIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QNCnByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UNCmhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3INCnRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91DQp3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldw0KZnJlZSBwcm9ncmFtcywgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuDQoNCiAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBwcmV2ZW50IG90aGVycyBmcm9tIGRlbnlpbmcgeW91DQp0aGVzZSByaWdodHMgb3IgYXNraW5nIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4gIFRoZXJlZm9yZSwgeW91IGhhdmUNCmNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZg0KeW91IG1vZGlmeSBpdDogcmVzcG9uc2liaWxpdGllcyB0byByZXNwZWN0IHRoZSBmcmVlZG9tIG9mIG90aGVycy4NCg0KICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyDQpncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBwYXNzIG9uIHRvIHRoZSByZWNpcGllbnRzIHRoZSBzYW1lDQpmcmVlZG9tcyB0aGF0IHlvdSByZWNlaXZlZC4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZQ0Kb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkNCmtub3cgdGhlaXIgcmlnaHRzLg0KDQogIERldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczoNCigxKSBhc3NlcnQgY29weXJpZ2h0IG9uIHRoZSBzb2Z0d2FyZSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBMaWNlbnNlDQpnaXZpbmcgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IGl0Lg0KDQogIEZvciB0aGUgZGV2ZWxvcGVycycgYW5kIGF1dGhvcnMnIHByb3RlY3Rpb24sIHRoZSBHUEwgY2xlYXJseSBleHBsYWlucw0KdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlIHNvZnR3YXJlLiAgRm9yIGJvdGggdXNlcnMnIGFuZA0KYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcw0KY2hhbmdlZCwgc28gdGhhdCB0aGVpciBwcm9ibGVtcyB3aWxsIG5vdCBiZSBhdHRyaWJ1dGVkIGVycm9uZW91c2x5IHRvDQphdXRob3JzIG9mIHByZXZpb3VzIHZlcnNpb25zLg0KDQogIFNvbWUgZGV2aWNlcyBhcmUgZGVzaWduZWQgdG8gZGVueSB1c2VycyBhY2Nlc3MgdG8gaW5zdGFsbCBvciBydW4NCm1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBzb2Z0d2FyZSBpbnNpZGUgdGhlbSwgYWx0aG91Z2ggdGhlIG1hbnVmYWN0dXJlcg0KY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBhaW0gb2YNCnByb3RlY3RpbmcgdXNlcnMnIGZyZWVkb20gdG8gY2hhbmdlIHRoZSBzb2Z0d2FyZS4gIFRoZSBzeXN0ZW1hdGljDQpwYXR0ZXJuIG9mIHN1Y2ggYWJ1c2Ugb2NjdXJzIGluIHRoZSBhcmVhIG9mIHByb2R1Y3RzIGZvciBpbmRpdmlkdWFscyB0bw0KdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuICBUaGVyZWZvcmUsIHdlDQpoYXZlIGRlc2lnbmVkIHRoaXMgdmVyc2lvbiBvZiB0aGUgR1BMIHRvIHByb2hpYml0IHRoZSBwcmFjdGljZSBmb3IgdGhvc2UNCnByb2R1Y3RzLiAgSWYgc3VjaCBwcm9ibGVtcyBhcmlzZSBzdWJzdGFudGlhbGx5IGluIG90aGVyIGRvbWFpbnMsIHdlDQpzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMNCm9mIHRoZSBHUEwsIGFzIG5lZWRlZCB0byBwcm90ZWN0IHRoZSBmcmVlZG9tIG9mIHVzZXJzLg0KDQogIEZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuDQpTdGF0ZXMgc2hvdWxkIG5vdCBhbGxvdyBwYXRlbnRzIHRvIHJlc3RyaWN0IGRldmVsb3BtZW50IGFuZCB1c2Ugb2YNCnNvZnR3YXJlIG9uIGdlbmVyYWwtcHVycG9zZSBjb21wdXRlcnMsIGJ1dCBpbiB0aG9zZSB0aGF0IGRvLCB3ZSB3aXNoIHRvDQphdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQNCm1ha2UgaXQgZWZmZWN0aXZlbHkgcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHRoZSBHUEwgYXNzdXJlcyB0aGF0DQpwYXRlbnRzIGNhbm5vdCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgcHJvZ3JhbSBub24tZnJlZS4NCg0KICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZA0KbW9kaWZpY2F0aW9uIGZvbGxvdy4NCg0KICAgICAgICAgICAgICAgICAgICAgICBURVJNUyBBTkQgQ09ORElUSU9OUw0KDQogIDAuIERlZmluaXRpb25zLg0KDQogICJUaGlzIExpY2Vuc2UiIHJlZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLg0KDQogICJDb3B5cmlnaHQiIGFsc28gbWVhbnMgY29weXJpZ2h0LWxpa2UgbGF3cyB0aGF0IGFwcGx5IHRvIG90aGVyIGtpbmRzIG9mDQp3b3Jrcywgc3VjaCBhcyBzZW1pY29uZHVjdG9yIG1hc2tzLg0KDQogICJUaGUgUHJvZ3JhbSIgcmVmZXJzIHRvIGFueSBjb3B5cmlnaHRhYmxlIHdvcmsgbGljZW5zZWQgdW5kZXIgdGhpcw0KTGljZW5zZS4gIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLiAgIkxpY2Vuc2VlcyIgYW5kDQoicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuDQoNCiAgVG8gIm1vZGlmeSIgYSB3b3JrIG1lYW5zIHRvIGNvcHkgZnJvbSBvciBhZGFwdCBhbGwgb3IgcGFydCBvZiB0aGUgd29yaw0KaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuDQpleGFjdCBjb3B5LiAgVGhlIHJlc3VsdGluZyB3b3JrIGlzIGNhbGxlZCBhICJtb2RpZmllZCB2ZXJzaW9uIiBvZiB0aGUNCmVhcmxpZXIgd29yayBvciBhIHdvcmsgImJhc2VkIG9uIiB0aGUgZWFybGllciB3b3JrLg0KDQogIEEgImNvdmVyZWQgd29yayIgbWVhbnMgZWl0aGVyIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0gb3IgYSB3b3JrIGJhc2VkDQpvbiB0aGUgUHJvZ3JhbS4NCg0KICBUbyAicHJvcGFnYXRlIiBhIHdvcmsgbWVhbnMgdG8gZG8gYW55dGhpbmcgd2l0aCBpdCB0aGF0LCB3aXRob3V0DQpwZXJtaXNzaW9uLCB3b3VsZCBtYWtlIHlvdSBkaXJlY3RseSBvciBzZWNvbmRhcmlseSBsaWFibGUgZm9yDQppbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGENCmNvbXB1dGVyIG9yIG1vZGlmeWluZyBhIHByaXZhdGUgY29weS4gIFByb3BhZ2F0aW9uIGluY2x1ZGVzIGNvcHlpbmcsDQpkaXN0cmlidXRpb24gKHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24pLCBtYWtpbmcgYXZhaWxhYmxlIHRvIHRoZQ0KcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLg0KDQogIFRvICJjb252ZXkiIGEgd29yayBtZWFucyBhbnkga2luZCBvZiBwcm9wYWdhdGlvbiB0aGF0IGVuYWJsZXMgb3RoZXINCnBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaA0KYSBjb21wdXRlciBuZXR3b3JrLCB3aXRoIG5vIHRyYW5zZmVyIG9mIGEgY29weSwgaXMgbm90IGNvbnZleWluZy4NCg0KICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyINCnRvIHRoZSBleHRlbnQgdGhhdCBpdCBpbmNsdWRlcyBhIGNvbnZlbmllbnQgYW5kIHByb21pbmVudGx5IHZpc2libGUNCmZlYXR1cmUgdGhhdCAoMSkgZGlzcGxheXMgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSwgYW5kICgyKQ0KdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUNCmV4dGVudCB0aGF0IHdhcnJhbnRpZXMgYXJlIHByb3ZpZGVkKSwgdGhhdCBsaWNlbnNlZXMgbWF5IGNvbnZleSB0aGUNCndvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmDQp0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIF9vcHRpb25zLCBzdWNoIGFzIGENCm1lbnUsIGEgcHJvbWluZW50IGl0ZW0gaW4gdGhlIGxpc3QgbWVldHMgdGhpcyBjcml0ZXJpb24uDQoNCiAgMS4gU291cmNlIENvZGUuDQoNCiAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsNCmZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gICJPYmplY3QgY29kZSIgbWVhbnMgYW55IG5vbi1zb3VyY2UNCmZvcm0gb2YgYSB3b3JrLg0KDQogIEEgIlN0YW5kYXJkIEludGVyZmFjZSIgbWVhbnMgYW4gaW50ZXJmYWNlIHRoYXQgZWl0aGVyIGlzIGFuIG9mZmljaWFsDQpzdGFuZGFyZCBkZWZpbmVkIGJ5IGEgcmVjb2duaXplZCBzdGFuZGFyZHMgYm9keSwgb3IsIGluIHRoZSBjYXNlIG9mDQppbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdA0KaXMgd2lkZWx5IHVzZWQgYW1vbmcgZGV2ZWxvcGVycyB3b3JraW5nIGluIHRoYXQgbGFuZ3VhZ2UuDQoNCiAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXINCnRoYW4gdGhlIHdvcmsgYXMgYSB3aG9sZSwgdGhhdCAoYSkgaXMgaW5jbHVkZWQgaW4gdGhlIG5vcm1hbCBmb3JtIG9mDQpwYWNrYWdpbmcgYSBNYWpvciBDb21wb25lbnQsIGJ1dCB3aGljaCBpcyBub3QgcGFydCBvZiB0aGF0IE1ham9yDQpDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQNCk1ham9yIENvbXBvbmVudCwgb3IgdG8gaW1wbGVtZW50IGEgU3RhbmRhcmQgSW50ZXJmYWNlIGZvciB3aGljaCBhbg0KaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4gc291cmNlIGNvZGUgZm9ybS4gIEENCiJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudA0KKGtlcm5lbCwgd2luZG93IHN5c3RlbSwgYW5kIHNvIG9uKSBvZiB0aGUgc3BlY2lmaWMgb3BlcmF0aW5nIHN5c3RlbQ0KKGlmIGFueSkgb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgd29yayBydW5zLCBvciBhIGNvbXBpbGVyIHVzZWQgdG8NCnByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0Lg0KDQogIFRoZSAiQ29ycmVzcG9uZGluZyBTb3VyY2UiIGZvciBhIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSBtZWFucyBhbGwNCnRoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUNCndvcmspIHJ1biB0aGUgb2JqZWN0IGNvZGUgYW5kIHRvIG1vZGlmeSB0aGUgd29yaywgaW5jbHVkaW5nIHNjcmlwdHMgdG8NCmNvbnRyb2wgdGhvc2UgYWN0aXZpdGllcy4gIEhvd2V2ZXIsIGl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIHdvcmsncw0KU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQ0KcHJvZ3JhbXMgd2hpY2ggYXJlIHVzZWQgdW5tb2RpZmllZCBpbiBwZXJmb3JtaW5nIHRob3NlIGFjdGl2aXRpZXMgYnV0DQp3aGljaCBhcmUgbm90IHBhcnQgb2YgdGhlIHdvcmsuICBGb3IgZXhhbXBsZSwgQ29ycmVzcG9uZGluZyBTb3VyY2UNCmluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yDQp0aGUgd29yaywgYW5kIHRoZSBzb3VyY2UgY29kZSBmb3Igc2hhcmVkIGxpYnJhcmllcyBhbmQgZHluYW1pY2FsbHkNCmxpbmtlZCBzdWJwcm9ncmFtcyB0aGF0IHRoZSB3b3JrIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byByZXF1aXJlLA0Kc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UNCnN1YnByb2dyYW1zIGFuZCBvdGhlciBwYXJ0cyBvZiB0aGUgd29yay4NCg0KICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzDQpjYW4gcmVnZW5lcmF0ZSBhdXRvbWF0aWNhbGx5IGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIENvcnJlc3BvbmRpbmcNClNvdXJjZS4NCg0KICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGEgd29yayBpbiBzb3VyY2UgY29kZSBmb3JtIGlzIHRoYXQNCnNhbWUgd29yay4NCg0KICAyLiBCYXNpYyBQZXJtaXNzaW9ucy4NCg0KICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZg0KY29weXJpZ2h0IG9uIHRoZSBQcm9ncmFtLCBhbmQgYXJlIGlycmV2b2NhYmxlIHByb3ZpZGVkIHRoZSBzdGF0ZWQNCmNvbmRpdGlvbnMgYXJlIG1ldC4gIFRoaXMgTGljZW5zZSBleHBsaWNpdGx5IGFmZmlybXMgeW91ciB1bmxpbWl0ZWQNCnBlcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhDQpjb3ZlcmVkIHdvcmsgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2Ugb25seSBpZiB0aGUgb3V0cHV0LCBnaXZlbiBpdHMNCmNvbnRlbnQsIGNvbnN0aXR1dGVzIGEgY292ZXJlZCB3b3JrLiAgVGhpcyBMaWNlbnNlIGFja25vd2xlZGdlcyB5b3VyDQpyaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4NCg0KICBZb3UgbWF5IG1ha2UsIHJ1biBhbmQgcHJvcGFnYXRlIGNvdmVyZWQgd29ya3MgdGhhdCB5b3UgZG8gbm90DQpjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucw0KaW4gZm9yY2UuICBZb3UgbWF5IGNvbnZleSBjb3ZlcmVkIHdvcmtzIHRvIG90aGVycyBmb3IgdGhlIHNvbGUgcHVycG9zZQ0Kb2YgaGF2aW5nIHRoZW0gbWFrZSBtb2RpZmljYXRpb25zIGV4Y2x1c2l2ZWx5IGZvciB5b3UsIG9yIHByb3ZpZGUgeW91DQp3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoDQp0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluIGNvbnZleWluZyBhbGwgbWF0ZXJpYWwgZm9yIHdoaWNoIHlvdSBkbw0Kbm90IGNvbnRyb2wgY29weXJpZ2h0LiAgVGhvc2UgdGh1cyBtYWtpbmcgb3IgcnVubmluZyB0aGUgY292ZXJlZCB3b3Jrcw0KZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbg0KYW5kIGNvbnRyb2wsIG9uIHRlcm1zIHRoYXQgcHJvaGliaXQgdGhlbSBmcm9tIG1ha2luZyBhbnkgY29waWVzIG9mDQp5b3VyIGNvcHlyaWdodGVkIG1hdGVyaWFsIG91dHNpZGUgdGhlaXIgcmVsYXRpb25zaGlwIHdpdGggeW91Lg0KDQogIENvbnZleWluZyB1bmRlciBhbnkgb3RoZXIgY2lyY3Vtc3RhbmNlcyBpcyBwZXJtaXR0ZWQgc29sZWx5IHVuZGVyDQp0aGUgY29uZGl0aW9ucyBzdGF0ZWQgYmVsb3cuICBTdWJsaWNlbnNpbmcgaXMgbm90IGFsbG93ZWQ7IHNlY3Rpb24gMTANCm1ha2VzIGl0IHVubmVjZXNzYXJ5Lg0KDQogIDMuIFByb3RlY3RpbmcgVXNlcnMnIExlZ2FsIFJpZ2h0cyBGcm9tIEFudGktQ2lyY3VtdmVudGlvbiBMYXcuDQoNCiAgTm8gY292ZXJlZCB3b3JrIHNoYWxsIGJlIGRlZW1lZCBwYXJ0IG9mIGFuIGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsDQptZWFzdXJlIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyBmdWxmaWxsaW5nIG9ibGlnYXRpb25zIHVuZGVyIGFydGljbGUNCjExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcg0Kc2ltaWxhciBsYXdzIHByb2hpYml0aW5nIG9yIHJlc3RyaWN0aW5nIGNpcmN1bXZlbnRpb24gb2Ygc3VjaA0KbWVhc3VyZXMuDQoNCiAgV2hlbiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB5b3Ugd2FpdmUgYW55IGxlZ2FsIHBvd2VyIHRvIGZvcmJpZA0KY2lyY3VtdmVudGlvbiBvZiB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRvIHRoZSBleHRlbnQgc3VjaCBjaXJjdW12ZW50aW9uDQppcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvDQp0aGUgY292ZXJlZCB3b3JrLCBhbmQgeW91IGRpc2NsYWltIGFueSBpbnRlbnRpb24gdG8gbGltaXQgb3BlcmF0aW9uIG9yDQptb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgYXMgYSBtZWFucyBvZiBlbmZvcmNpbmcsIGFnYWluc3QgdGhlIHdvcmsncw0KdXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mDQp0ZWNobm9sb2dpY2FsIG1lYXN1cmVzLg0KDQogIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuDQoNCiAgWW91IG1heSBjb252ZXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMgeW91DQpyZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZA0KYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlOw0Ka2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgc3RhdGluZyB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYW55DQpub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7DQprZWVwIGludGFjdCBhbGwgbm90aWNlcyBvZiB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFsbA0KcmVjaXBpZW50cyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uDQoNCiAgWW91IG1heSBjaGFyZ2UgYW55IHByaWNlIG9yIG5vIHByaWNlIGZvciBlYWNoIGNvcHkgdGhhdCB5b3UgY29udmV5LA0KYW5kIHlvdSBtYXkgb2ZmZXIgc3VwcG9ydCBvciB3YXJyYW50eSBwcm90ZWN0aW9uIGZvciBhIGZlZS4NCg0KICA1LiBDb252ZXlpbmcgTW9kaWZpZWQgU291cmNlIFZlcnNpb25zLg0KDQogIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8NCnByb2R1Y2UgaXQgZnJvbSB0aGUgUHJvZ3JhbSwgaW4gdGhlIGZvcm0gb2Ygc291cmNlIGNvZGUgdW5kZXIgdGhlDQp0ZXJtcyBvZiBzZWN0aW9uIDQsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoNCg0KICAgIGEpIFRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBtb2RpZmllZA0KICAgIGl0LCBhbmQgZ2l2aW5nIGEgcmVsZXZhbnQgZGF0ZS4NCg0KICAgIGIpIFRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IGl0IGlzDQogICAgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgY29uZGl0aW9ucyBhZGRlZCB1bmRlciBzZWN0aW9uDQogICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bw0KICAgICJrZWVwIGludGFjdCBhbGwgbm90aWNlcyIuDQoNCiAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcw0KICAgIExpY2Vuc2UgdG8gYW55b25lIHdobyBjb21lcyBpbnRvIHBvc3Nlc3Npb24gb2YgYSBjb3B5LiAgVGhpcw0KICAgIExpY2Vuc2Ugd2lsbCB0aGVyZWZvcmUgYXBwbHksIGFsb25nIHdpdGggYW55IGFwcGxpY2FibGUgc2VjdGlvbiA3DQogICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywNCiAgICByZWdhcmRsZXNzIG9mIGhvdyB0aGV5IGFyZSBwYWNrYWdlZC4gIFRoaXMgTGljZW5zZSBnaXZlcyBubw0KICAgIHBlcm1pc3Npb24gdG8gbGljZW5zZSB0aGUgd29yayBpbiBhbnkgb3RoZXIgd2F5LCBidXQgaXQgZG9lcyBub3QNCiAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0Lg0KDQogICAgZCkgSWYgdGhlIHdvcmsgaGFzIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlcywgZWFjaCBtdXN0IGRpc3BsYXkNCiAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUNCiAgICBpbnRlcmZhY2VzIHRoYXQgZG8gbm90IGRpc3BsYXkgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcywgeW91cg0KICAgIHdvcmsgbmVlZCBub3QgbWFrZSB0aGVtIGRvIHNvLg0KDQogIEEgY29tcGlsYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgd2l0aCBvdGhlciBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQNCndvcmtzLCB3aGljaCBhcmUgbm90IGJ5IHRoZWlyIG5hdHVyZSBleHRlbnNpb25zIG9mIHRoZSBjb3ZlcmVkIHdvcmssDQphbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLA0KaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbg0KImFnZ3JlZ2F0ZSIgaWYgdGhlIGNvbXBpbGF0aW9uIGFuZCBpdHMgcmVzdWx0aW5nIGNvcHlyaWdodCBhcmUgbm90DQp1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzDQpiZXlvbmQgd2hhdCB0aGUgaW5kaXZpZHVhbCB3b3JrcyBwZXJtaXQuICBJbmNsdXNpb24gb2YgYSBjb3ZlcmVkIHdvcmsNCmluIGFuIGFnZ3JlZ2F0ZSBkb2VzIG5vdCBjYXVzZSB0aGlzIExpY2Vuc2UgdG8gYXBwbHkgdG8gdGhlIG90aGVyDQpwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLg0KDQogIDYuIENvbnZleWluZyBOb24tU291cmNlIEZvcm1zLg0KDQogIFlvdSBtYXkgY29udmV5IGEgY292ZXJlZCB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zDQpvZiBzZWN0aW9ucyA0IGFuZCA1LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGNvbnZleSB0aGUNCm1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwNCmluIG9uZSBvZiB0aGVzZSB3YXlzOg0KDQogICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdA0KICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgdGhlDQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgZml4ZWQgb24gYSBkdXJhYmxlIHBoeXNpY2FsIG1lZGl1bQ0KICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLg0KDQogICAgYikgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdA0KICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQ0KICAgIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycyBhbmQgdmFsaWQgZm9yIGFzDQogICAgbG9uZyBhcyB5b3Ugb2ZmZXIgc3BhcmUgcGFydHMgb3IgY3VzdG9tZXIgc3VwcG9ydCBmb3IgdGhhdCBwcm9kdWN0DQogICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQ0KICAgIGNvcHkgb2YgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhbGwgdGhlIHNvZnR3YXJlIGluIHRoZQ0KICAgIHByb2R1Y3QgdGhhdCBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgb24gYSBkdXJhYmxlIHBoeXNpY2FsDQogICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubw0KICAgIG1vcmUgdGhhbiB5b3VyIHJlYXNvbmFibGUgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgdGhpcw0KICAgIGNvbnZleWluZyBvZiBzb3VyY2UsIG9yICgyKSBhY2Nlc3MgdG8gY29weSB0aGUNCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLg0KDQogICAgYykgQ29udmV5IGluZGl2aWR1YWwgY29waWVzIG9mIHRoZSBvYmplY3QgY29kZSB3aXRoIGEgY29weSBvZiB0aGUNCiAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcw0KICAgIGFsdGVybmF0aXZlIGlzIGFsbG93ZWQgb25seSBvY2Nhc2lvbmFsbHkgYW5kIG5vbmNvbW1lcmNpYWxseSwgYW5kDQogICAgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIG9iamVjdCBjb2RlIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkDQogICAgd2l0aCBzdWJzZWN0aW9uIDZiLg0KDQogICAgZCkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBieSBvZmZlcmluZyBhY2Nlc3MgZnJvbSBhIGRlc2lnbmF0ZWQNCiAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUNCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBpbiB0aGUgc2FtZSB3YXkgdGhyb3VnaCB0aGUgc2FtZSBwbGFjZSBhdCBubw0KICAgIGZ1cnRoZXIgY2hhcmdlLiAgWW91IG5lZWQgbm90IHJlcXVpcmUgcmVjaXBpZW50cyB0byBjb3B5IHRoZQ0KICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvDQogICAgY29weSB0aGUgb2JqZWN0IGNvZGUgaXMgYSBuZXR3b3JrIHNlcnZlciwgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlDQogICAgbWF5IGJlIG9uIGEgZGlmZmVyZW50IHNlcnZlciAob3BlcmF0ZWQgYnkgeW91IG9yIGEgdGhpcmQgcGFydHkpDQogICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluDQogICAgY2xlYXIgZGlyZWN0aW9ucyBuZXh0IHRvIHRoZSBvYmplY3QgY29kZSBzYXlpbmcgd2hlcmUgdG8gZmluZCB0aGUNCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFJlZ2FyZGxlc3Mgb2Ygd2hhdCBzZXJ2ZXIgaG9zdHMgdGhlDQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzDQogICAgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIG5lZWRlZCB0byBzYXRpc2Z5IHRoZXNlIHJlcXVpcmVtZW50cy4NCg0KICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQNCiAgICB5b3UgaW5mb3JtIG90aGVyIHBlZXJzIHdoZXJlIHRoZSBvYmplY3QgY29kZSBhbmQgQ29ycmVzcG9uZGluZw0KICAgIFNvdXJjZSBvZiB0aGUgd29yayBhcmUgYmVpbmcgb2ZmZXJlZCB0byB0aGUgZ2VuZXJhbCBwdWJsaWMgYXQgbm8NCiAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4NCg0KICBBIHNlcGFyYWJsZSBwb3J0aW9uIG9mIHRoZSBvYmplY3QgY29kZSwgd2hvc2Ugc291cmNlIGNvZGUgaXMgZXhjbHVkZWQNCmZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlDQppbmNsdWRlZCBpbiBjb252ZXlpbmcgdGhlIG9iamVjdCBjb2RlIHdvcmsuDQoNCiAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkNCnRhbmdpYmxlIHBlcnNvbmFsIHByb3BlcnR5IHdoaWNoIGlzIG5vcm1hbGx5IHVzZWQgZm9yIHBlcnNvbmFsLCBmYW1pbHksDQpvciBob3VzZWhvbGQgcHVycG9zZXMsIG9yICgyKSBhbnl0aGluZyBkZXNpZ25lZCBvciBzb2xkIGZvciBpbmNvcnBvcmF0aW9uDQppbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsDQpkb3VidGZ1bCBjYXNlcyBzaGFsbCBiZSByZXNvbHZlZCBpbiBmYXZvciBvZiBjb3ZlcmFnZS4gIEZvciBhIHBhcnRpY3VsYXINCnByb2R1Y3QgcmVjZWl2ZWQgYnkgYSBwYXJ0aWN1bGFyIHVzZXIsICJub3JtYWxseSB1c2VkIiByZWZlcnMgdG8gYQ0KdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzDQpvZiB0aGUgcGFydGljdWxhciB1c2VyIG9yIG9mIHRoZSB3YXkgaW4gd2hpY2ggdGhlIHBhcnRpY3VsYXIgdXNlcg0KYWN0dWFsbHkgdXNlcywgb3IgZXhwZWN0cyBvciBpcyBleHBlY3RlZCB0byB1c2UsIHRoZSBwcm9kdWN0LiAgQSBwcm9kdWN0DQppcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbA0KY29tbWVyY2lhbCwgaW5kdXN0cmlhbCBvciBub24tY29uc3VtZXIgdXNlcywgdW5sZXNzIHN1Y2ggdXNlcyByZXByZXNlbnQNCnRoZSBvbmx5IHNpZ25pZmljYW50IG1vZGUgb2YgdXNlIG9mIHRoZSBwcm9kdWN0Lg0KDQogICJJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24iIGZvciBhIFVzZXIgUHJvZHVjdCBtZWFucyBhbnkgbWV0aG9kcywNCnByb2NlZHVyZXMsIGF1dGhvcml6YXRpb24ga2V5cywgb3Igb3RoZXIgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gaW5zdGFsbA0KYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQ0KYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGl0cyBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoZSBpbmZvcm1hdGlvbiBtdXN0DQpzdWZmaWNlIHRvIGVuc3VyZSB0aGF0IHRoZSBjb250aW51ZWQgZnVuY3Rpb25pbmcgb2YgdGhlIG1vZGlmaWVkIG9iamVjdA0KY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UNCm1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlLg0KDQogIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yDQpzcGVjaWZpY2FsbHkgZm9yIHVzZSBpbiwgYSBVc2VyIFByb2R1Y3QsIGFuZCB0aGUgY29udmV5aW5nIG9jY3VycyBhcw0KcGFydCBvZiBhIHRyYW5zYWN0aW9uIGluIHdoaWNoIHRoZSByaWdodCBvZiBwb3NzZXNzaW9uIGFuZCB1c2Ugb2YgdGhlDQpVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhDQpmaXhlZCB0ZXJtIChyZWdhcmRsZXNzIG9mIGhvdyB0aGUgdHJhbnNhY3Rpb24gaXMgY2hhcmFjdGVyaXplZCksIHRoZQ0KQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQgdW5kZXIgdGhpcyBzZWN0aW9uIG11c3QgYmUgYWNjb21wYW5pZWQNCmJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQ0KaWYgbmVpdGhlciB5b3Ugbm9yIGFueSB0aGlyZCBwYXJ0eSByZXRhaW5zIHRoZSBhYmlsaXR5IHRvIGluc3RhbGwNCm1vZGlmaWVkIG9iamVjdCBjb2RlIG9uIHRoZSBVc2VyIFByb2R1Y3QgKGZvciBleGFtcGxlLCB0aGUgd29yayBoYXMNCmJlZW4gaW5zdGFsbGVkIGluIFJPTSkuDQoNCiAgVGhlIHJlcXVpcmVtZW50IHRvIHByb3ZpZGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIGRvZXMgbm90IGluY2x1ZGUgYQ0KcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzDQpmb3IgYSB3b3JrIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkIGJ5IHRoZSByZWNpcGllbnQsIG9yIGZvcg0KdGhlIFVzZXIgUHJvZHVjdCBpbiB3aGljaCBpdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQuICBBY2Nlc3MgdG8gYQ0KbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQNCmFkdmVyc2VseSBhZmZlY3RzIHRoZSBvcGVyYXRpb24gb2YgdGhlIG5ldHdvcmsgb3IgdmlvbGF0ZXMgdGhlIHJ1bGVzIGFuZA0KcHJvdG9jb2xzIGZvciBjb21tdW5pY2F0aW9uIGFjcm9zcyB0aGUgbmV0d29yay4NCg0KICBDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCwgYW5kIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBwcm92aWRlZCwNCmluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGluIGEgZm9ybWF0IHRoYXQgaXMgcHVibGljbHkNCmRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluDQpzb3VyY2UgY29kZSBmb3JtKSwgYW5kIG11c3QgcmVxdWlyZSBubyBzcGVjaWFsIHBhc3N3b3JkIG9yIGtleSBmb3INCnVucGFja2luZywgcmVhZGluZyBvciBjb3B5aW5nLg0KDQogIDcuIEFkZGl0aW9uYWwgVGVybXMuDQoNCiAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMNCkxpY2Vuc2UgYnkgbWFraW5nIGV4Y2VwdGlvbnMgZnJvbSBvbmUgb3IgbW9yZSBvZiBpdHMgY29uZGl0aW9ucy4NCkFkZGl0aW9uYWwgcGVybWlzc2lvbnMgdGhhdCBhcmUgYXBwbGljYWJsZSB0byB0aGUgZW50aXJlIFByb2dyYW0gc2hhbGwNCmJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQNCnRoYXQgdGhleSBhcmUgdmFsaWQgdW5kZXIgYXBwbGljYWJsZSBsYXcuICBJZiBhZGRpdGlvbmFsIHBlcm1pc3Npb25zDQphcHBseSBvbmx5IHRvIHBhcnQgb2YgdGhlIFByb2dyYW0sIHRoYXQgcGFydCBtYXkgYmUgdXNlZCBzZXBhcmF0ZWx5DQp1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5DQp0aGlzIExpY2Vuc2Ugd2l0aG91dCByZWdhcmQgdG8gdGhlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMuDQoNCiAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbg0KcmVtb3ZlIGFueSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGZyb20gdGhhdCBjb3B5LCBvciBmcm9tIGFueSBwYXJ0IG9mDQppdC4gIChBZGRpdGlvbmFsIHBlcm1pc3Npb25zIG1heSBiZSB3cml0dGVuIHRvIHJlcXVpcmUgdGhlaXIgb3duDQpyZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UNCmFkZGl0aW9uYWwgcGVybWlzc2lvbnMgb24gbWF0ZXJpYWwsIGFkZGVkIGJ5IHlvdSB0byBhIGNvdmVyZWQgd29yaywNCmZvciB3aGljaCB5b3UgaGF2ZSBvciBjYW4gZ2l2ZSBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgcGVybWlzc2lvbi4NCg0KICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIGZvciBtYXRlcmlhbCB5b3UNCmFkZCB0byBhIGNvdmVyZWQgd29yaywgeW91IG1heSAoaWYgYXV0aG9yaXplZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YNCnRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOg0KDQogICAgYSkgRGlzY2xhaW1pbmcgd2FycmFudHkgb3IgbGltaXRpbmcgbGlhYmlsaXR5IGRpZmZlcmVudGx5IGZyb20gdGhlDQogICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3INCg0KICAgIGIpIFJlcXVpcmluZyBwcmVzZXJ2YXRpb24gb2Ygc3BlY2lmaWVkIHJlYXNvbmFibGUgbGVnYWwgbm90aWNlcyBvcg0KICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwNCiAgICBOb3RpY2VzIGRpc3BsYXllZCBieSB3b3JrcyBjb250YWluaW5nIGl0OyBvcg0KDQogICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcg0KICAgIHJlcXVpcmluZyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIG9mIHN1Y2ggbWF0ZXJpYWwgYmUgbWFya2VkIGluDQogICAgcmVhc29uYWJsZSB3YXlzIGFzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCB2ZXJzaW9uOyBvcg0KDQogICAgZCkgTGltaXRpbmcgdGhlIHVzZSBmb3IgcHVibGljaXR5IHB1cnBvc2VzIG9mIG5hbWVzIG9mIGxpY2Vuc29ycyBvcg0KICAgIGF1dGhvcnMgb2YgdGhlIG1hdGVyaWFsOyBvcg0KDQogICAgZSkgRGVjbGluaW5nIHRvIGdyYW50IHJpZ2h0cyB1bmRlciB0cmFkZW1hcmsgbGF3IGZvciB1c2Ugb2Ygc29tZQ0KICAgIHRyYWRlIG5hbWVzLCB0cmFkZW1hcmtzLCBvciBzZXJ2aWNlIG1hcmtzOyBvcg0KDQogICAgZikgUmVxdWlyaW5nIGluZGVtbmlmaWNhdGlvbiBvZiBsaWNlbnNvcnMgYW5kIGF1dGhvcnMgb2YgdGhhdA0KICAgIG1hdGVyaWFsIGJ5IGFueW9uZSB3aG8gY29udmV5cyB0aGUgbWF0ZXJpYWwgKG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mDQogICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcg0KICAgIGFueSBsaWFiaWxpdHkgdGhhdCB0aGVzZSBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBkaXJlY3RseSBpbXBvc2Ugb24NCiAgICB0aG9zZSBsaWNlbnNvcnMgYW5kIGF1dGhvcnMuDQoNCiAgQWxsIG90aGVyIG5vbi1wZXJtaXNzaXZlIGFkZGl0aW9uYWwgdGVybXMgYXJlIGNvbnNpZGVyZWQgImZ1cnRoZXINCnJlc3RyaWN0aW9ucyIgd2l0aGluIHRoZSBtZWFuaW5nIG9mIHNlY3Rpb24gMTAuICBJZiB0aGUgUHJvZ3JhbSBhcyB5b3UNCnJlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzDQpnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCBhIHRlcm0gdGhhdCBpcyBhIGZ1cnRoZXINCnJlc3RyaWN0aW9uLCB5b3UgbWF5IHJlbW92ZSB0aGF0IHRlcm0uICBJZiBhIGxpY2Vuc2UgZG9jdW1lbnQgY29udGFpbnMNCmEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcw0KTGljZW5zZSwgeW91IG1heSBhZGQgdG8gYSBjb3ZlcmVkIHdvcmsgbWF0ZXJpYWwgZ292ZXJuZWQgYnkgdGhlIHRlcm1zDQpvZiB0aGF0IGxpY2Vuc2UgZG9jdW1lbnQsIHByb3ZpZGVkIHRoYXQgdGhlIGZ1cnRoZXIgcmVzdHJpY3Rpb24gZG9lcw0Kbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuDQoNCiAgSWYgeW91IGFkZCB0ZXJtcyB0byBhIGNvdmVyZWQgd29yayBpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24sIHlvdQ0KbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlDQphZGRpdGlvbmFsIHRlcm1zIHRoYXQgYXBwbHkgdG8gdGhvc2UgZmlsZXMsIG9yIGEgbm90aWNlIGluZGljYXRpbmcNCndoZXJlIHRvIGZpbmQgdGhlIGFwcGxpY2FibGUgdGVybXMuDQoNCiAgQWRkaXRpb25hbCB0ZXJtcywgcGVybWlzc2l2ZSBvciBub24tcGVybWlzc2l2ZSwgbWF5IGJlIHN0YXRlZCBpbiB0aGUNCmZvcm0gb2YgYSBzZXBhcmF0ZWx5IHdyaXR0ZW4gbGljZW5zZSwgb3Igc3RhdGVkIGFzIGV4Y2VwdGlvbnM7DQp0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuDQoNCiAgOC4gVGVybWluYXRpb24uDQoNCiAgWW91IG1heSBub3QgcHJvcGFnYXRlIG9yIG1vZGlmeSBhIGNvdmVyZWQgd29yayBleGNlcHQgYXMgZXhwcmVzc2x5DQpwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gcHJvcGFnYXRlIG9yDQptb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXINCnRoaXMgTGljZW5zZSAoaW5jbHVkaW5nIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGUgdGhpcmQNCnBhcmFncmFwaCBvZiBzZWN0aW9uIDExKS4NCg0KICBIb3dldmVyLCBpZiB5b3UgY2Vhc2UgYWxsIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHRoZW4geW91cg0KbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQgKGEpDQpwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kDQpmaW5hbGx5IHRlcm1pbmF0ZXMgeW91ciBsaWNlbnNlLCBhbmQgKGIpIHBlcm1hbmVudGx5LCBpZiB0aGUgY29weXJpZ2h0DQpob2xkZXIgZmFpbHMgdG8gbm90aWZ5IHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucw0KcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLg0KDQogIE1vcmVvdmVyLCB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcw0KcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlDQp2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBoYXZlDQpyZWNlaXZlZCBub3RpY2Ugb2YgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSAoZm9yIGFueSB3b3JrKSBmcm9tIHRoYXQNCmNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXINCnlvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLg0KDQogIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlDQpsaWNlbnNlcyBvZiBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcyBvciByaWdodHMgZnJvbSB5b3UgdW5kZXINCnRoaXMgTGljZW5zZS4gIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCBub3QgcGVybWFuZW50bHkNCnJlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUNCm1hdGVyaWFsIHVuZGVyIHNlY3Rpb24gMTAuDQoNCiAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuDQoNCiAgWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byByZWNlaXZlIG9yDQpydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrDQpvY2N1cnJpbmcgc29sZWx5IGFzIGEgY29uc2VxdWVuY2Ugb2YgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbg0KdG8gcmVjZWl2ZSBhIGNvcHkgbGlrZXdpc2UgZG9lcyBub3QgcmVxdWlyZSBhY2NlcHRhbmNlLiAgSG93ZXZlciwNCm5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcg0KbW9kaWZ5IGFueSBjb3ZlcmVkIHdvcmsuICBUaGVzZSBhY3Rpb25zIGluZnJpbmdlIGNvcHlyaWdodCBpZiB5b3UgZG8NCm5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgcHJvcGFnYXRpbmcgYQ0KY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4NCg0KICAxMC4gQXV0b21hdGljIExpY2Vuc2luZyBvZiBEb3duc3RyZWFtIFJlY2lwaWVudHMuDQoNCiAgRWFjaCB0aW1lIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseQ0KcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29ycywgdG8gcnVuLCBtb2RpZnkgYW5kDQpwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlDQpmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoIHRoaXMgTGljZW5zZS4NCg0KICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuDQpvcmdhbml6YXRpb24sIG9yIHN1YnN0YW50aWFsbHkgYWxsIGFzc2V0cyBvZiBvbmUsIG9yIHN1YmRpdmlkaW5nIGFuDQpvcmdhbml6YXRpb24sIG9yIG1lcmdpbmcgb3JnYW5pemF0aW9ucy4gIElmIHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZA0Kd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQNCnRyYW5zYWN0aW9uIHdobyByZWNlaXZlcyBhIGNvcHkgb2YgdGhlIHdvcmsgYWxzbyByZWNlaXZlcyB3aGF0ZXZlcg0KbGljZW5zZXMgdG8gdGhlIHdvcmsgdGhlIHBhcnR5J3MgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QgaGFkIG9yIGNvdWxkDQpnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQ0KQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgZnJvbSB0aGUgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QsIGlmDQp0aGUgcHJlZGVjZXNzb3IgaGFzIGl0IG9yIGNhbiBnZXQgaXQgd2l0aCByZWFzb25hYmxlIGVmZm9ydHMuDQoNCiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgdGhlDQpyaWdodHMgZ3JhbnRlZCBvciBhZmZpcm1lZCB1bmRlciB0aGlzIExpY2Vuc2UuICBGb3IgZXhhbXBsZSwgeW91IG1heQ0Kbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mDQpyaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB5b3UgbWF5IG5vdCBpbml0aWF0ZSBsaXRpZ2F0aW9uDQooaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdA0KYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yDQpzYWxlLCBvciBpbXBvcnRpbmcgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YgaXQuDQoNCiAgMTEuIFBhdGVudHMuDQoNCiAgQSAiY29udHJpYnV0b3IiIGlzIGEgY29weXJpZ2h0IGhvbGRlciB3aG8gYXV0aG9yaXplcyB1c2UgdW5kZXIgdGhpcw0KTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUNCndvcmsgdGh1cyBsaWNlbnNlZCBpcyBjYWxsZWQgdGhlIGNvbnRyaWJ1dG9yJ3MgImNvbnRyaWJ1dG9yIHZlcnNpb24iLg0KDQogIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcw0Kb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgY29udHJpYnV0b3IsIHdoZXRoZXIgYWxyZWFkeSBhY3F1aXJlZCBvcg0KaGVyZWFmdGVyIGFjcXVpcmVkLCB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBieSBzb21lIG1hbm5lciwgcGVybWl0dGVkDQpieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sDQpidXQgZG8gbm90IGluY2x1ZGUgY2xhaW1zIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIG9ubHkgYXMgYQ0KY29uc2VxdWVuY2Ugb2YgZnVydGhlciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRyaWJ1dG9yIHZlcnNpb24uICBGb3INCnB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudA0KcGF0ZW50IHN1YmxpY2Vuc2VzIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mDQp0aGlzIExpY2Vuc2UuDQoNCiAgRWFjaCBjb250cmlidXRvciBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUNCnBhdGVudCBsaWNlbnNlIHVuZGVyIHRoZSBjb250cmlidXRvcidzIGVzc2VudGlhbCBwYXRlbnQgY2xhaW1zLCB0bw0KbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kDQpwcm9wYWdhdGUgdGhlIGNvbnRlbnRzIG9mIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLg0KDQogIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzDQphZ3JlZW1lbnQgb3IgY29tbWl0bWVudCwgaG93ZXZlciBkZW5vbWluYXRlZCwgbm90IHRvIGVuZm9yY2UgYSBwYXRlbnQNCihzdWNoIGFzIGFuIGV4cHJlc3MgcGVybWlzc2lvbiB0byBwcmFjdGljZSBhIHBhdGVudCBvciBjb3ZlbmFudCBub3QgdG8NCnN1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhDQpwYXJ0eSBtZWFucyB0byBtYWtlIHN1Y2ggYW4gYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQgbm90IHRvIGVuZm9yY2UgYQ0KcGF0ZW50IGFnYWluc3QgdGhlIHBhcnR5Lg0KDQogIElmIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIGtub3dpbmdseSByZWx5aW5nIG9uIGEgcGF0ZW50IGxpY2Vuc2UsDQphbmQgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGlzIG5vdCBhdmFpbGFibGUgZm9yIGFueW9uZQ0KdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQ0KcHVibGljbHkgYXZhaWxhYmxlIG5ldHdvcmsgc2VydmVyIG9yIG90aGVyIHJlYWRpbHkgYWNjZXNzaWJsZSBtZWFucywNCnRoZW4geW91IG11c3QgZWl0aGVyICgxKSBjYXVzZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdG8gYmUgc28NCmF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUNCnBhdGVudCBsaWNlbnNlIGZvciB0aGlzIHBhcnRpY3VsYXIgd29yaywgb3IgKDMpIGFycmFuZ2UsIGluIGEgbWFubmVyDQpjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UsIHRvIGV4dGVuZCB0aGUgcGF0ZW50DQpsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUNCmFjdHVhbCBrbm93bGVkZ2UgdGhhdCwgYnV0IGZvciB0aGUgcGF0ZW50IGxpY2Vuc2UsIHlvdXIgY29udmV5aW5nIHRoZQ0KY292ZXJlZCB3b3JrIGluIGEgY291bnRyeSwgb3IgeW91ciByZWNpcGllbnQncyB1c2Ugb2YgdGhlIGNvdmVyZWQgd29yaw0KaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0DQpjb3VudHJ5IHRoYXQgeW91IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgYXJlIHZhbGlkLg0KDQogIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3INCmFycmFuZ2VtZW50LCB5b3UgY29udmV5LCBvciBwcm9wYWdhdGUgYnkgcHJvY3VyaW5nIGNvbnZleWFuY2Ugb2YsIGENCmNvdmVyZWQgd29yaywgYW5kIGdyYW50IGEgcGF0ZW50IGxpY2Vuc2UgdG8gc29tZSBvZiB0aGUgcGFydGllcw0KcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5DQpvciBjb252ZXkgYSBzcGVjaWZpYyBjb3B5IG9mIHRoZSBjb3ZlcmVkIHdvcmssIHRoZW4gdGhlIHBhdGVudCBsaWNlbnNlDQp5b3UgZ3JhbnQgaXMgYXV0b21hdGljYWxseSBleHRlbmRlZCB0byBhbGwgcmVjaXBpZW50cyBvZiB0aGUgY292ZXJlZA0Kd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuDQoNCiAgQSBwYXRlbnQgbGljZW5zZSBpcyAiZGlzY3JpbWluYXRvcnkiIGlmIGl0IGRvZXMgbm90IGluY2x1ZGUgd2l0aGluDQp0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcw0KY29uZGl0aW9uZWQgb24gdGhlIG5vbi1leGVyY2lzZSBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgcmlnaHRzIHRoYXQgYXJlDQpzcGVjaWZpY2FsbHkgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCBjb252ZXkgYSBjb3ZlcmVkDQp3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcw0KaW4gdGhlIGJ1c2luZXNzIG9mIGRpc3RyaWJ1dGluZyBzb2Z0d2FyZSwgdW5kZXIgd2hpY2ggeW91IG1ha2UgcGF5bWVudA0KdG8gdGhlIHRoaXJkIHBhcnR5IGJhc2VkIG9uIHRoZSBleHRlbnQgb2YgeW91ciBhY3Rpdml0eSBvZiBjb252ZXlpbmcNCnRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQ0KcGFydGllcyB3aG8gd291bGQgcmVjZWl2ZSB0aGUgY292ZXJlZCB3b3JrIGZyb20geW91LCBhIGRpc2NyaW1pbmF0b3J5DQpwYXRlbnQgbGljZW5zZSAoYSkgaW4gY29ubmVjdGlvbiB3aXRoIGNvcGllcyBvZiB0aGUgY292ZXJlZCB3b3JrDQpjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQ0KZm9yIGFuZCBpbiBjb25uZWN0aW9uIHdpdGggc3BlY2lmaWMgcHJvZHVjdHMgb3IgY29tcGlsYXRpb25zIHRoYXQNCmNvbnRhaW4gdGhlIGNvdmVyZWQgd29yaywgdW5sZXNzIHlvdSBlbnRlcmVkIGludG8gdGhhdCBhcnJhbmdlbWVudCwNCm9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuDQoNCiAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGFzIGV4Y2x1ZGluZyBvciBsaW1pdGluZw0KYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkNCm90aGVyd2lzZSBiZSBhdmFpbGFibGUgdG8geW91IHVuZGVyIGFwcGxpY2FibGUgcGF0ZW50IGxhdy4NCg0KICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4NCg0KICBJZiBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yDQpvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90DQpleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdCBjb252ZXkgYQ0KY292ZXJlZCB3b3JrIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzDQpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQ0Kbm90IGNvbnZleSBpdCBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgeW91IGFncmVlIHRvIHRlcm1zIHRoYXQgb2JsaWdhdGUgeW91DQp0byBjb2xsZWN0IGEgcm95YWx0eSBmb3IgZnVydGhlciBjb252ZXlpbmcgZnJvbSB0aG9zZSB0byB3aG9tIHlvdSBjb252ZXkNCnRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcw0KTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gY29udmV5aW5nIHRoZSBQcm9ncmFtLg0KDQogIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLg0KDQogIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgeW91IGhhdmUNCnBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQNCnVuZGVyIHZlcnNpb24gMyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGludG8gYSBzaW5nbGUNCmNvbWJpbmVkIHdvcmssIGFuZCB0byBjb252ZXkgdGhlIHJlc3VsdGluZyB3b3JrLiAgVGhlIHRlcm1zIG9mIHRoaXMNCkxpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLA0KYnV0IHRoZSBzcGVjaWFsIHJlcXVpcmVtZW50cyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLA0Kc2VjdGlvbiAxMywgY29uY2VybmluZyBpbnRlcmFjdGlvbiB0aHJvdWdoIGEgbmV0d29yayB3aWxsIGFwcGx5IHRvIHRoZQ0KY29tYmluYXRpb24gYXMgc3VjaC4NCg0KICAxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuDQoNCiAgVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YNCnRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwNCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bw0KYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuDQoNCiAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUNClByb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBjZXJ0YWluIG51bWJlcmVkIHZlcnNpb24gb2YgdGhlIEdOVSBHZW5lcmFsDQpQdWJsaWMgTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZQ0Kb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQNCnZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlDQpGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoZQ0KR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkDQpieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KDQogIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUNCnZlcnNpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjYW4gYmUgdXNlZCwgdGhhdCBwcm94eSdzDQpwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYSB2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91DQp0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4NCg0KICBMYXRlciBsaWNlbnNlIHZlcnNpb25zIG1heSBnaXZlIHlvdSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudA0KcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQ0KYXV0aG9yIG9yIGNvcHlyaWdodCBob2xkZXIgYXMgYSByZXN1bHQgb2YgeW91ciBjaG9vc2luZyB0byBmb2xsb3cgYQ0KbGF0ZXIgdmVyc2lvbi4NCg0KICAxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4NCg0KICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZDQpBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUDQpIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZDQpPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywNClRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVINClBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNDQpJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YNCkFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4NCg0KICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuDQoNCiAgSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HDQpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTDQpUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkNCkdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRQ0KVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRg0KREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQNClBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLA0KRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRg0KU1VDSCBEQU1BR0VTLg0KDQogIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuDQoNCiAgSWYgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkDQphYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywNCnJldmlld2luZyBjb3VydHMgc2hhbGwgYXBwbHkgbG9jYWwgbGF3IHRoYXQgbW9zdCBjbG9zZWx5IGFwcHJveGltYXRlcw0KYW4gYWJzb2x1dGUgd2FpdmVyIG9mIGFsbCBjaXZpbCBsaWFiaWxpdHkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZQ0KUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQ0KY29weSBvZiB0aGUgUHJvZ3JhbSBpbiByZXR1cm4gZm9yIGEgZmVlLg0KDQogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMNCg0KICAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zDQoNCiAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdA0KcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdA0KZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuDQoNCiAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QNCnRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkNCnN0YXRlIHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QNCnRoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLg0KDQogICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4NCiAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPg0KDQogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yDQogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCg0KICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQoNCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lg0KDQpBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4NCg0KICBJZiB0aGUgcHJvZ3JhbSBkb2VzIHRlcm1pbmFsIGludGVyYWN0aW9uLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0DQpub3RpY2UgbGlrZSB0aGlzIHdoZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6DQoNCiAgICA8cHJvZ3JhbT4gIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+DQogICAgVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4NCiAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0DQogICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLg0KDQpUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUNCnBhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB5b3VyIHByb2dyYW0ncyBjb21tYW5kcw0KbWlnaHQgYmUgZGlmZmVyZW50OyBmb3IgYSBHVUkgaW50ZXJmYWNlLCB5b3Ugd291bGQgdXNlIGFuICJhYm91dCBib3giLg0KDQogIFlvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciBzY2hvb2wsDQppZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYgbmVjZXNzYXJ5Lg0KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUNCjxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4NCg0KICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtDQppbnRvIHByb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UNCm1heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aA0KdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsDQpQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4gIEJ1dCBmaXJzdCwgcGxlYXNlIHJlYWQNCjxodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS93aHktbm90LWxncGwuaHRtbD4uDQo=]]></data>
	</file>
	<file>
	  <filename>/etc</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/etc/countries.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIkFGIjogIkFmZ2hhbmlzdGFuIiwKICAgICJBTCI6ICJBbGJhbmlhIiwKICAgICJEWiI6ICJBbGdlcmlhIiwKICAgICJBUyI6ICJBbWVyaWNhbiBTYW1vYSIsCiAgICAiQUQiOiAiQW5kb3JyYSIsCiAgICAiQU8iOiAiQW5nb2xhIiwKICAgICJBSSI6ICJBbmd1aWxsYSIsCiAgICAiQVEiOiAiQW50YXJjdGljYSIsCiAgICAiQUciOiAiQW50aWd1YSBBbmQgQmFyYnVkYSIsCiAgICAiQVIiOiAiQXJnZW50aW5hIiwKICAgICJBTSI6ICJBcm1lbmlhIiwKICAgICJBVyI6ICJBcnViYSIsCiAgICAiQVUiOiAiQXVzdHJhbGlhIiwKICAgICJBVCI6ICJBdXN0cmlhIiwKICAgICJBWiI6ICJBemVyYmFpamFuIiwKICAgICJCUyI6ICJCYWhhbWFzIiwKICAgICJCSCI6ICJCYWhyYWluIiwKICAgICJCRCI6ICJCYW5nbGFkZXNoIiwKICAgICJCQiI6ICJCYXJiYWRvcyIsCiAgICAiQlkiOiAiQmVsYXJ1cyIsCiAgICAiQkUiOiAiQmVsZ2l1bSIsCiAgICAiQloiOiAiQmVsaXplIiwKICAgICJCSiI6ICJCZW5pbiIsCiAgICAiQk0iOiAiQmVybXVkYSIsCiAgICAiQlQiOiAiQmh1dGFuIiwKICAgICJCTyI6ICJCb2xpdmlhIiwKICAgICJCQSI6ICJCb3NuaWEgQW5kIEhlcnplZ293aW5hIiwKICAgICJCVyI6ICJCb3Rzd2FuYSIsCiAgICAiQlYiOiAiQm91dmV0IElzbGFuZCIsCiAgICAiQlIiOiAiQnJhemlsIiwKICAgICJJTyI6ICJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnkiLAogICAgIkJOIjogIkJydW5laSBEYXJ1c3NhbGFtIiwKICAgICJCRyI6ICJCdWxnYXJpYSIsCiAgICAiQkYiOiAiQnVya2luYSBGYXNvIiwKICAgICJCSSI6ICJCdXJ1bmRpIiwKICAgICJLSCI6ICJDYW1ib2RpYSIsCiAgICAiQ00iOiAiQ2FtZXJvb24iLAogICAgIkNBIjogIkNhbmFkYSIsCiAgICAiQ1YiOiAiQ2FwZSBWZXJkZSIsCiAgICAiS1kiOiAiQ2F5bWFuIElzbGFuZHMiLAogICAgIkNGIjogIkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYyIsCiAgICAiVEQiOiAiQ2hhZCIsCiAgICAiQ0wiOiAiQ2hpbGUiLAogICAgIkNOIjogIkNoaW5hIiwKICAgICJDWCI6ICJDaHJpc3RtYXMgSXNsYW5kIiwKICAgICJDQyI6ICJDb2NvcyAoS2VlbGluZykgSXNsYW5kcyIsCiAgICAiQ08iOiAiQ29sb21iaWEiLAogICAgIktNIjogIkNvbW9yb3MiLAogICAgIkNHIjogIlJlcHVibGljIG9mIHRoZSBDb25nbyIsCiAgICAiQ0siOiAiQ29vayBJc2xhbmRzIiwKICAgICJDUiI6ICJDb3N0YSBSaWNhIiwKICAgICJDSSI6ICJDb3RlIEQnSXZvaXJlIiwKICAgICJIUiI6ICJDcm9hdGlhIChMb2NhbCBOYW1lOiBIcnZhdHNrYSkiLAogICAgIkNVIjogIkN1YmEiLAogICAgIkNZIjogIkN5cHJ1cyIsCiAgICAiQ1oiOiAiQ3plY2ggUmVwdWJsaWMiLAogICAgIkRLIjogIkRlbm1hcmsiLAogICAgIkRKIjogIkRqaWJvdXRpIiwKICAgICJETSI6ICJEb21pbmljYSIsCiAgICAiRE8iOiAiRG9taW5pY2FuIFJlcHVibGljIiwKICAgICJUUCI6ICJFYXN0IFRpbW9yIiwKICAgICJFQyI6ICJFY3VhZG9yIiwKICAgICJFRyI6ICJFZ3lwdCIsCiAgICAiU1YiOiAiRWwgU2FsdmFkb3IiLAogICAgIkdRIjogIkVxdWF0b3JpYWwgR3VpbmVhIiwKICAgICJFUiI6ICJFcml0cmVhIiwKICAgICJFRSI6ICJFc3RvbmlhIiwKICAgICJFVCI6ICJFdGhpb3BpYSIsCiAgICAiRksiOiAiRmFsa2xhbmQgSXNsYW5kcyAoTWFsdmluYXMpIiwKICAgICJGTyI6ICJGYXJvZSBJc2xhbmRzIiwKICAgICJGSiI6ICJGaWppIiwKICAgICJGSSI6ICJGaW5sYW5kIiwKICAgICJGUiI6ICJGcmFuY2UiLAogICAgIkdGIjogIkZyZW5jaCBHdWlhbmEiLAogICAgIlBGIjogIkZyZW5jaCBQb2x5bmVzaWEiLAogICAgIlRGIjogIkZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllcyIsCiAgICAiR0EiOiAiR2Fib24iLAogICAgIkdNIjogIkdhbWJpYSIsCiAgICAiR0UiOiAiR2VvcmdpYSIsCiAgICAiREUiOiAiR2VybWFueSIsCiAgICAiR0giOiAiR2hhbmEiLAogICAgIkdJIjogIkdpYnJhbHRhciIsCiAgICAiR1IiOiAiR3JlZWNlIiwKICAgICJHTCI6ICJHcmVlbmxhbmQiLAogICAgIkdEIjogIkdyZW5hZGEiLAogICAgIkdQIjogIkd1YWRlbG91cGUiLAogICAgIkdVIjogIkd1YW0iLAogICAgIkdUIjogIkd1YXRlbWFsYSIsCiAgICAiR04iOiAiR3VpbmVhIiwKICAgICJHVyI6ICJHdWluZWEtQmlzc2F1IiwKICAgICJHWSI6ICJHdXlhbmEiLAogICAgIkhUIjogIkhhaXRpIiwKICAgICJITSI6ICJIZWFyZCBBbmQgTWMgRG9uYWxkIElzbGFuZHMiLAogICAgIlZBIjogIkhvbHkgU2VlIChWYXRpY2FuIENpdHkgU3RhdGUpIiwKICAgICJITiI6ICJIb25kdXJhcyIsCiAgICAiSEsiOiAiSG9uZyBLb25nIiwKICAgICJIVSI6ICJIdW5nYXJ5IiwKICAgICJJUyI6ICJJY2VsYW5kIiwKICAgICJJTiI6ICJJbmRpYSIsCiAgICAiSUQiOiAiSW5kb25lc2lhIiwKICAgICJJUiI6ICJJcmFuIChJc2xhbWljIFJlcHVibGljIE9mKSIsCiAgICAiSVEiOiAiSXJhcSIsCiAgICAiSUUiOiAiSXJlbGFuZCIsCiAgICAiSUwiOiAiSXNyYWVsIiwKICAgICJJVCI6ICJJdGFseSIsCiAgICAiSk0iOiAiSmFtYWljYSIsCiAgICAiSlAiOiAiSmFwYW4iLAogICAgIkpPIjogIkpvcmRhbiIsCiAgICAiS1oiOiAiS2F6YWtoc3RhbiIsCiAgICAiS0UiOiAiS2VueWEiLAogICAgIktJIjogIktpcmliYXRpIiwKICAgICJLUCI6ICJLb3JlYSBEZW0gUGVvcGxlJ3MgUmVwdWJsaWMiLAogICAgIktSIjogIktvcmVhIFJlcHVibGljIE9mIiwKICAgICJLVyI6ICJLdXdhaXQiLAogICAgIktHIjogIkt5cmd5enN0YW4iLAogICAgIkxBIjogIkxhbyBQZW9wbGUncyBEZW0gUmVwdWJsaWMiLAogICAgIkxWIjogIkxhdHZpYSIsCiAgICAiTEIiOiAiTGViYW5vbiIsCiAgICAiTFMiOiAiTGVzb3RobyIsCiAgICAiTFIiOiAiTGliZXJpYSIsCiAgICAiTFkiOiAiTGlieWFuIEFyYWIgSmFtYWhpcml5YSIsCiAgICAiTEkiOiAiTGllY2h0ZW5zdGVpbiIsCiAgICAiTFQiOiAiTGl0aHVhbmlhIiwKICAgICJMVSI6ICJMdXhlbWJvdXJnIiwKICAgICJNTyI6ICJNYWNhdSIsCiAgICAiTUsiOiAiTWFjZWRvbmlhIiwKICAgICJNRyI6ICJNYWRhZ2FzY2FyIiwKICAgICJNVyI6ICJNYWxhd2kiLAogICAgIk1ZIjogIk1hbGF5c2lhIiwKICAgICJNViI6ICJNYWxkaXZlcyIsCiAgICAiTUwiOiAiTWFsaSIsCiAgICAiTVQiOiAiTWFsdGEiLAogICAgIk1IIjogIk1hcnNoYWxsIElzbGFuZHMiLAogICAgIk1RIjogIk1hcnRpbmlxdWUiLAogICAgIk1SIjogIk1hdXJpdGFuaWEiLAogICAgIk1VIjogIk1hdXJpdGl1cyIsCiAgICAiWVQiOiAiTWF5b3R0ZSIsCiAgICAiTVgiOiAiTWV4aWNvIiwKICAgICJGTSI6ICJNaWNyb25lc2lhID0gIEZlZGVyYXRlZCBTdGF0ZXMiLAogICAgIk1EIjogIk1vbGRvdmEgPSAgUmVwdWJsaWMgT2YiLAogICAgIk1DIjogIk1vbmFjbyIsCiAgICAiTU4iOiAiTW9uZ29saWEiLAogICAgIk1TIjogIk1vbnRzZXJyYXQiLAogICAgIk1BIjogIk1vcm9jY28iLAogICAgIk1aIjogIk1vemFtYmlxdWUiLAogICAgIk1NIjogIk15YW5tYXIiLAogICAgIk5BIjogIk5hbWliaWEiLAogICAgIk5SIjogIk5hdXJ1IiwKICAgICJOUCI6ICJOZXBhbCIsCiAgICAiTkwiOiAiTmV0aGVybGFuZHMiLAogICAgIkFOIjogIk5ldGhlcmxhbmRzIEFudGlsbGVzIiwKICAgICJOQyI6ICJOZXcgQ2FsZWRvbmlhIiwKICAgICJOWiI6ICJOZXcgWmVhbGFuZCIsCiAgICAiTkkiOiAiTmljYXJhZ3VhIiwKICAgICJORSI6ICJOaWdlciIsCiAgICAiTkciOiAiTmlnZXJpYSIsCiAgICAiTlUiOiAiTml1ZSIsCiAgICAiTkYiOiAiTm9yZm9sayBJc2xhbmQiLAogICAgIk1QIjogIk5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcyIsCiAgICAiTk8iOiAiTm9yd2F5IiwKICAgICJPTSI6ICJPbWFuIiwKICAgICJQSyI6ICJQYWtpc3RhbiIsCiAgICAiUFciOiAiUGFsYXUiLAogICAgIlBBIjogIlBhbmFtYSIsCiAgICAiUEciOiAiUGFwdWEgTmV3IEd1aW5lYSIsCiAgICAiUFkiOiAiUGFyYWd1YXkiLAogICAgIlBFIjogIlBlcnUiLAogICAgIlBIIjogIlBoaWxpcHBpbmVzIiwKICAgICJQTiI6ICJQaXRjYWlybiIsCiAgICAiUEwiOiAiUG9sYW5kIiwKICAgICJQVCI6ICJQb3J0dWdhbCIsCiAgICAiUFIiOiAiUHVlcnRvIFJpY28iLAogICAgIlFBIjogIlFhdGFyIiwKICAgICJSRSI6ICJSZXVuaW9uIiwKICAgICJSTyI6ICJSb21hbmlhIiwKICAgICJSVSI6ICJSdXNzaWFuIEZlZGVyYXRpb24iLAogICAgIlJXIjogIlJ3YW5kYSIsCiAgICAiS04iOiAiU2FpbnQgS2l0dHMgQW5kIE5ldmlzIiwKICAgICJMQyI6ICJTYWludCBMdWNpYSIsCiAgICAiVkMiOiAiU2FpbnQgVmluY2VudCA9ICBUaGUgR3JlbmFkaW5lcyIsCiAgICAiV1MiOiAiU2Ftb2EiLAogICAgIlNNIjogIlNhbiBNYXJpbm8iLAogICAgIlNUIjogIlPDo28gVG9tw6kgYW5kIFByw61uY2lwZSIsCiAgICAiU0EiOiAiU2F1ZGkgQXJhYmlhIiwKICAgICJTTiI6ICJTZW5lZ2FsIiwKICAgICJTQyI6ICJTZXljaGVsbGVzIiwKICAgICJTTCI6ICJTaWVycmEgTGVvbmUiLAogICAgIlNHIjogIlNpbmdhcG9yZSIsCiAgICAiU0siOiAiU2xvdmFraWEgKFNsb3ZhayBSZXB1YmxpYykiLAogICAgIlNJIjogIlNsb3ZlbmlhIiwKICAgICJTQiI6ICJTb2xvbW9uIElzbGFuZHMiLAogICAgIlNPIjogIlNvbWFsaWEiLAogICAgIlpBIjogIlNvdXRoIEFmcmljYSIsCiAgICAiR1MiOiAiU291dGggR2VvcmdpYSAgPSAgUyBTYW5kd2ljaCBJcy4iLAogICAgIkVTIjogIlNwYWluIiwKICAgICJMSyI6ICJTcmkgTGFua2EiLAogICAgIlNIIjogIlN0LiBIZWxlbmEiLAogICAgIlBNIjogIlN0LiBQaWVycmUgQW5kIE1pcXVlbG9uIiwKICAgICJTRCI6ICJTdWRhbiIsCiAgICAiU1IiOiAiU3VyaW5hbWUiLAogICAgIlNKIjogIlN2YWxiYXJkID0gIEphbiBNYXllbiBJc2xhbmRzIiwKICAgICJTWiI6ICJTd2F6aWxhbmQiLAogICAgIlNFIjogIlN3ZWRlbiIsCiAgICAiQ0giOiAiU3dpdHplcmxhbmQiLAogICAgIlNZIjogIlN5cmlhbiBBcmFiIFJlcHVibGljIiwKICAgICJUVyI6ICJUYWl3YW4iLAogICAgIlRKIjogIlRhamlraXN0YW4iLAogICAgIlRaIjogIlRhbnphbmlhID0gIFVuaXRlZCBSZXB1YmxpYyBPZiIsCiAgICAiVEgiOiAiVGhhaWxhbmQiLAogICAgIlRHIjogIlRvZ28iLAogICAgIlRLIjogIlRva2VsYXUiLAogICAgIlRPIjogIlRvbmdhIiwKICAgICJUVCI6ICJUcmluaWRhZCBBbmQgVG9iYWdvIiwKICAgICJUTiI6ICJUdW5pc2lhIiwKICAgICJUUiI6ICJUdXJrZXkiLAogICAgIlRNIjogIlR1cmttZW5pc3RhbiIsCiAgICAiVEMiOiAiVHVya3MgQW5kIENhaWNvcyBJc2xhbmRzIiwKICAgICJUViI6ICJUdXZhbHUiLAogICAgIlVHIjogIlVnYW5kYSIsCiAgICAiVUEiOiAiVWtyYWluZSIsCiAgICAiQUUiOiAiVW5pdGVkIEFyYWIgRW1pcmF0ZXMiLAogICAgIkdCIjogIlVuaXRlZCBLaW5nZG9tIiwKICAgICJVUyI6ICJVbml0ZWQgU3RhdGVzIiwKICAgICJVTSI6ICJVbml0ZWQgU3RhdGVzIE1pbm9yIElzLiIsCiAgICAiVVkiOiAiVXJ1Z3VheSIsCiAgICAiVVoiOiAiVXpiZWtpc3RhbiIsCiAgICAiVlUiOiAiVmFudWF0dSIsCiAgICAiVkUiOiAiVmVuZXp1ZWxhIiwKICAgICJWTiI6ICJWaWV0bmFtIiwKICAgICJWRyI6ICJWaXJnaW4gSXNsYW5kcyAoQnJpdGlzaCkiLAogICAgIlZJIjogIlZpcmdpbiBJc2xhbmRzIChVLlMuKSIsCiAgICAiV0YiOiAiV2FsbGlzIEFuZCBGdXR1bmEgSXNsYW5kcyIsCiAgICAiRUgiOiAiV2VzdGVybiBTYWhhcmEiLAogICAgIllFIjogIlllbWVuIiwKICAgICJZVSI6ICJZdWdvc2xhdmlhIiwKICAgICJaUiI6ICJaYWlyZSIsCiAgICAiWk0iOiAiWmFtYmlhIiwKICAgICJaVyI6ICJaaW1iYWJ3ZSIKfQo=]]></data>
	</file>
	<file>
	  <filename>/etc/currencies.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIkFEUCI6ICJBbmRvcnJhbiBQZXNldGEiLAogICAgIkFFRCI6ICJVQUUgRGlyaGFtIiwKICAgICJBRkEiOiAiQWZnaGFuaSIsCiAgICAiQUxMIjogIkxlayIsCiAgICAiQU1EIjogIkFybWVuaWFuIERyYW0iLAogICAgIkFORyI6ICJOZXRoZXJsYW5kcyBBbnRpbGxpYW4gR3VpbGRlciIsCiAgICAiQU9BIjogIkt3YW56YSIsCiAgICAiQVJTIjogIkFyZ2VudGluZSBQZXNvIiwKICAgICJBVFMiOiAiU2NoaWxsaW5nIiwKICAgICJBVUQiOiAiQXVzdHJhbGlhbiBEb2xsYXIiLAogICAgIkFXRyI6ICJBcnViYW4gR3VpbGRlciIsCiAgICAiQVpNIjogIkF6ZXJiYWlqYW5pYW4gTWFuYXQiLAogICAgIkJBTSI6ICJDb252ZXJ0aWJsZSBNYXJrcyIsCiAgICAiQkJEIjogIkJhcmJhZG9zIERvbGxhciIsCiAgICAiQkRUIjogIlRha2EiLAogICAgIkJFRiI6ICJCZWxnaWFuIEZyYW5jIiwKICAgICJCR0wiOiAiTGV2IiwKICAgICJCR04iOiAiTGV2IiwKICAgICJCSEQiOiAiQmFocmFpbmkgRGluYXIiLAogICAgIkJJRiI6ICJCdXJ1bmRpIEZyYW5jIiwKICAgICJCTUQiOiAiQmVybXVkaWFuIERvbGxhciAoY3VzdG9tYXJpbHkga25vd24gYXMgQmVybXVkYSBEb2xsYXIpIiwKICAgICJCTkQiOiAiQnJ1bmVpIERvbGxhciIsCiAgICAiQk9CIjogIkJvbGl2aWFubyIsCiAgICAiQk9WIjogIk12ZG9sIiwKICAgICJCUkwiOiAiQnJhemlsaWFuIFJlYWwiLAogICAgIkJTRCI6ICJCYWhhbWlhbiBEb2xsYXIiLAogICAgIkJUTiI6ICJOZ3VsdHJ1bSIsCiAgICAiQldQIjogIlB1bGEiLAogICAgIkJZQiI6ICJCZWxhcnVzc2lhbiBSdWJsZSIsCiAgICAiQllSIjogIkJlbGFydXNzaWFuIFJ1YmxlIiwKICAgICJCWkQiOiAiQmVsaXplIERvbGxhciIsCiAgICAiQ0FEIjogIkNhbmFkaWFuIERvbGxhciIsCiAgICAiQ0hGIjogIlN3aXNzIEZyYW5jIiwKICAgICJDTEYiOiAiVW5pZGFkZXMgZGUgZm9tZW50byIsCiAgICAiQ0xQIjogIkNoaWxlYW4gUGVzbyIsCiAgICAiQ05ZIjogIll1YW4gUmVubWluYmkiLAogICAgIkNPUCI6ICJDb2xvbWJpYW4gUGVzbyIsCiAgICAiQ1JDIjogIkNvc3RhIFJpY2FuIENvbG9uIiwKICAgICJDVVAiOiAiQ3ViYW4gUGVzbyIsCiAgICAiQ1ZFIjogIkNhcGUgVmVyZGUgRXNjdWRvIiwKICAgICJDWVAiOiAiQ3lwcnVzIFBvdW5kIiwKICAgICJDWksiOiAiQ3plY2ggS29ydW5hIiwKICAgICJERU0iOiAiRGV1dHNjaGUgTWFyayIsCiAgICAiREpGIjogIkRqaWJvdXRpIEZyYW5jIiwKICAgICJES0siOiAiRGFuaXNoIEtyb25lIiwKICAgICJET1AiOiAiRG9taW5pY2FuIFBlc28iLAogICAgIkRaRCI6ICJBbGdlcmlhbiBEaW5hciIsCiAgICAiRUVLIjogIktyb29uIiwKICAgICJFR1AiOiAiRWd5cHRpYW4gUG91bmQiLAogICAgIkVSTiI6ICJOYWtmYSIsCiAgICAiRVNQIjogIkZyZW5jaCBGcmFuYyIsCiAgICAiRVNQIjogIlNwYW5pc2ggUGVzZXRhIiwKICAgICJFVEIiOiAiRXRoaW9waWFuIEJpcnIiLAogICAgIkVVUiI6ICJFdXJvIiwKICAgICJGSU0iOiAiTWFya2thIiwKICAgICJGSkQiOiAiRmlqaSBEb2xsYXIiLAogICAgIkZLUCI6ICJGYWxrbGFuZCBJc2xhbmRzIFBvdW5kIiwKICAgICJGUkYiOiAiRnJlbmNoIEZyYW5jIiwKICAgICJHQlAiOiAiUG91bmQgU3RlcmxpbmciLAogICAgIkdFTCI6ICJMYXJpIiwKICAgICJHSEMiOiAiQ2VkaSIsCiAgICAiR0lQIjogIkdpYnJhbHRhciBQb3VuZCIsCiAgICAiR01EIjogIkRhbGFzaSIsCiAgICAiR05GIjogIkd1aW5lYSBGcmFuYyIsCiAgICAiR1JEIjogIkRyYWNobWEiLAogICAgIkdUUSI6ICJRdWV0emFsIiwKICAgICJHV1AiOiAiR3VpbmVhLUJpc3NhdSBQZXNvIiwKICAgICJHWUQiOiAiR3V5YW5hIERvbGxhciIsCiAgICAiSEtEIjogIkhvbmcgS29uZyBEb2xsYXIiLAogICAgIkhOTCI6ICJMZW1waXJhIiwKICAgICJIUksiOiAiQ3JvYXRpYW4ga3VuYSIsCiAgICAiSFRHIjogIkdvdXJkZSIsCiAgICAiSFVGIjogIkZvcmludCIsCiAgICAiSURSIjogIlJ1cGlhaCIsCiAgICAiSUVQIjogIklyaXNoIFBvdW5kIiwKICAgICJJTFMiOiAiTmV3IElzcmFlbGkgU2hlcWVsIiwKICAgICJJTlIiOiAiSW5kaWFuIFJ1cGVlIiwKICAgICJJUUQiOiAiSXJhcWkgRGluYXIiLAogICAgIklSUiI6ICJJcmFuaWFuIFJpYWwiLAogICAgIklTSyI6ICJJY2VsYW5kIEtyb25hIiwKICAgICJJVEwiOiAiSXRhbGlhbiBMaXJhIiwKICAgICJKTUQiOiAiSmFtYWljYW4gRG9sbGFyIiwKICAgICJKT0QiOiAiSm9yZGFuaWFuIERpbmFyIiwKICAgICJKUFkiOiAiWWVuIiwKICAgICJLRVMiOiAiS2VueWFuIFNoaWxsaW5nIiwKICAgICJLR1MiOiAiU29tIiwKICAgICJLSFIiOiAiUmllbCIsCiAgICAiS01GIjogIkNvbW9ybyBGcmFuYyIsCiAgICAiS1dEIjogIkt1d2FpdGkgRGluYXIiLAogICAgIktZRCI6ICJDYXltYW4gSXNsYW5kcyBEb2xsYXIiLAogICAgIktaVCI6ICJUZW5nZSIsCiAgICAiTEFLIjogIktpcCIsCiAgICAiTEJQIjogIkxlYmFuZXNlIFBvdW5kIiwKICAgICJMS1IiOiAiU3JpIExhbmthIFJ1cGVlIiwKICAgICJMUkQiOiAiTGliZXJpYW4gRG9sbGFyIiwKICAgICJMU0wiOiAiTG90aSIsCiAgICAiTFRMIjogIkxpdGh1YW5pYW4gTGl0dXMiLAogICAgIkxVRiI6ICJMdXhlbWJvdXJnIEZyYW5jIiwKICAgICJMVkwiOiAiTGF0dmlhbiBMYXRzIiwKICAgICJMWUQiOiAiTGlieWFuIERpbmFyIiwKICAgICJNQUQiOiAiTW9yb2NjYW4gRGlyaGFtIiwKICAgICJNR0YiOiAiTWFsYWdhc3kgRnJhbmMiLAogICAgIk1NSyI6ICJLeWF0IiwKICAgICJNTlQiOiAiVHVncmlrIiwKICAgICJNT1AiOiAiUGF0YWNhIiwKICAgICJNUk8iOiAiT3VndWl5YSIsCiAgICAiTVRMIjogIk1hbHRlc2UgTGlyYSIsCiAgICAiTVVSIjogIk1hdXJpdGl1cyBSdXBlZSIsCiAgICAiTVZSIjogIlJ1Zml5YWEiLAogICAgIk1XSyI6ICJLd2FjaGEiLAogICAgIk1YTiI6ICJNZXhpY2FuIFBlc28iLAogICAgIk1YViI6ICJNZXhpY2FuIFVuaWRhZCBkZSBJbnZlcnNpb24gKFVESSkiLAogICAgIk1ZUiI6ICJNYWxheXNpYW4gUmluZ2dpdCIsCiAgICAiTVpNIjogIk1ldGljYWwiLAogICAgIk5BRCI6ICJOYW1pYmlhIERvbGxhciIsCiAgICAiTkdOIjogIk5haXJhIiwKICAgICJOSU8iOiAiQ29yZG9iYSBPcm8iLAogICAgIk5MRyI6ICJOZXRoZXJsYW5kcyBHdWlsZGVyIiwKICAgICJOT0siOiAiTm9yd2VnaWFuIEtyb25lIiwKICAgICJOUFIiOiAiTmVwYWxlc2UgUnVwZWUiLAogICAgIk5aRCI6ICJOZXcgWmVhbGFuZCBEb2xsYXIiLAogICAgIk9NUiI6ICJSaWFsIE9tYW5pIiwKICAgICJQQUIiOiAiQmFsYm9hIiwKICAgICJQRU4iOiAiTnVldm8gU29sIiwKICAgICJQR0siOiAiS2luYSIsCiAgICAiUEhQIjogIlBoaWxpcHBpbmUgUGVzbyIsCiAgICAiUEtSIjogIlBha2lzdGFuIFJ1cGVlIiwKICAgICJQTE4iOiAiWmxvdHkiLAogICAgIlBURSI6ICJQb3J0dWd1ZXNlIEVzY3VkbyIsCiAgICAiUFlHIjogIkd1YXJhbmkiLAogICAgIlFBUiI6ICJRYXRhcmkgUmlhbCIsCiAgICAiUk9MIjogIkxldSIsCiAgICAiUlVCIjogIlJ1c3NpYW4gUnVibGUiLAogICAgIlJXRiI6ICJSd2FuZGEgRnJhbmMiLAogICAgIlNBUiI6ICJTYXVkaSBSaXlhbCIsCiAgICAiU0JEIjogIlNvbG9tb24gSXNsYW5kcyBEb2xsYXIiLAogICAgIlNDUiI6ICJTZXljaGVsbGVzIFJ1cGVlIiwKICAgICJTREQiOiAiU3VkYW5lc2UgRGluYXIiLAogICAgIlNFSyI6ICJTd2VkaXNoIEtyb25hIiwKICAgICJTR0QiOiAiU2luZ2Fwb3JlIERvbGxhciIsCiAgICAiU0hQIjogIlNhaW50IEhlbGVuYSBQb3VuZCIsCiAgICAiU0lUIjogIlRvbGFyIiwKICAgICJTS0siOiAiU2xvdmFrIEtvcnVuYSIsCiAgICAiU0xMIjogIkxlb25lIiwKICAgICJTT1MiOiAiU29tYWxpIFNoaWxsaW5nIiwKICAgICJTUkciOiAiU3VyaW5hbWUgR3VpbGRlciIsCiAgICAiU1REIjogIkRvYnJhIiwKICAgICJTVkMiOiAiRWwgU2FsdmFkb3IgQ29sb24iLAogICAgIlNZUCI6ICJTeXJpYW4gUG91bmQiLAogICAgIlNaTCI6ICJMaWxhbmdlbmkiLAogICAgIlRIQiI6ICJCYWh0IiwKICAgICJUSlIiOiAiVGFqaWsgUnVibGUiLAogICAgIlRNTSI6ICJNYW5hdCIsCiAgICAiVE5EIjogIlR1bmlzaWFuIERpbmFyIiwKICAgICJUT1AiOiAiUGHvvpJhbmdhIiwKICAgICJUUEUiOiAiVGltb3IgRXNjdWRvIiwKICAgICJUUkwiOiAiVHVya2lzaCBMaXJhIiwKICAgICJUVEQiOiAiVHJpbmlkYWQgYW5kIFRvYmFnbyBEb2xsYXIiLAogICAgIlVBSCI6ICJIcnl2bmlhIiwKICAgICJVR1giOiAiVWdhbmRhIFNoaWxsaW5nIiwKICAgICJVU0QiOiAiVVMgRG9sbGFyIiwKICAgICJVWVUiOiAiUGVzbyBVcnVndWF5byIsCiAgICAiVVpTIjogIlV6YmVraXN0YW4gU3VtIiwKICAgICJWRUIiOiAiQm9saXZhciIsCiAgICAiVk5EIjogIkRvbmciLAogICAgIlZVViI6ICJWYXR1IiwKICAgICJXU1QiOiAiVGFsYSIsCiAgICAiWEFGIjogIkNGQSBGcmFuYyBCRUFDIiwKICAgICJYQ0QiOiAiRWFzdCBDYXJpYmJlYW4gRG9sbGFyIiwKICAgICJYRFIiOiAiU0RSIiwKICAgICJYT0YiOiAiQ0ZBIEZyYW5jIEJDRUFPIiwKICAgICJYUEYiOiAiQ0ZQIEZyYW5jIiwKICAgICJZRVIiOiAiWWVtZW5pIFJpYWwiLAogICAgIllVTSI6ICJZdWdvc2xhdmlhbiBEaW5hciIsCiAgICAiWkFSIjogIlJhbmQiLAogICAgIlpNSyI6ICJLd2FjaGEiLAogICAgIlpXRCI6ICJaaW1iYWJ3ZSBEb2xsYXIiCn0K]]></data>
	</file>
	<file>
	  <filename>/etc/states.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIkFMIjogICJBbGFiYW1hIiwKICAgICJBSyI6ICAiQWxhc2thIiwKICAgICJBUyI6ICAiQW1lcmljYW4gU2Ftb2EiLAogICAgIkFaIjogICJBcml6b25hIiwKICAgICJBUiI6ICAiQXJrYW5zYXMiLAogICAgIkNBIjogICJDYWxpZm9ybmlhIiwKICAgICJDTyI6ICAiQ29sb3JhZG8iLAogICAgIkNUIjogICJDb25uZWN0aWN1dCIsCiAgICAiREUiOiAgIkRlbGF3YXJlIiwKICAgICJEQyI6ICAiRGlzdHJpY3Qgb2YgQ29sdW1iaWEiLAogICAgIkZNIjogICJGZWQuIFN0YXRlcyBvZiBNaWNyb25lc2lhIiwKICAgICJGTCI6ICAiRmxvcmlkYSIsCiAgICAiR0EiOiAgIkdlb3JnaWEiLAogICAgIkdVIjogICJHdWFtIiwKICAgICJISSI6ICAiSGF3YWlpIiwKICAgICJJRCI6ICAiSWRhaG8iLAogICAgIklMIjogICJJbGxpbm9pcyIsCiAgICAiSU4iOiAgIkluZGlhbmEiLAogICAgIklBIjogICJJb3dhIiwKICAgICJLUyI6ICAiS2Fuc2FzIiwKICAgICJLWSI6ICAiS2VudHVja3kiLAogICAgIkxBIjogICJMb3Vpc2lhbmEiLAogICAgIk1FIjogICJNYWluZSIsCiAgICAiTUgiOiAgIk1hcnNoYWxsIElzbGFuZHMiLAogICAgIk1EIjogICJNYXJ5bGFuZCIsCiAgICAiTUEiOiAgIk1hc3NhY2h1c2V0dHMiLAogICAgIk1JIjogICJNaWNoaWdhbiIsCiAgICAiTU4iOiAgIk1pbm5lc290YSIsCiAgICAiTVMiOiAgIk1pc3Npc3NpcHBpIiwKICAgICJNTyI6ICAiTWlzc291cmkiLAogICAgIk1UIjogICJNb250YW5hIiwKICAgICJORSI6ICAiTmVicmFza2EiLAogICAgIk5WIjogICJOZXZhZGEiLAogICAgIk5IIjogICJOZXcgSGFtcHNoaXJlIiwKICAgICJOSiI6ICAiTmV3IEplcnNleSIsCiAgICAiTk0iOiAgIk5ldyBNZXhpY28iLAogICAgIk5ZIjogICJOZXcgWW9yayIsCiAgICAiTkMiOiAgIk5vcnRoIENhcm9saW5hIiwKICAgICJORCI6ICAiTm9ydGggRGFrb3RhIiwKICAgICJNUCI6ICAiTm9ydGhlcm4gTWFyaWFuYSBJcy4iLAogICAgIk9IIjogICJPaGlvIiwKICAgICJPSyI6ICAiT2tsYWhvbWEiLAogICAgIk9SIjogICJPcmVnb24iLAogICAgIlBXIjogICJQYWxhdSIsCiAgICAiUEEiOiAgIlBlbm5zeWx2YW5pYSIsCiAgICAiUFIiOiAgIlB1ZXJ0byBSaWNvIiwKICAgICJSSSI6ICAiUmhvZGUgSXNsYW5kIiwKICAgICJTQyI6ICAiU291dGggQ2Fyb2xpbmEiLAogICAgIlNEIjogICJTb3V0aCBEYWtvdGEiLAogICAgIlROIjogICJUZW5uZXNzZWUiLAogICAgIlRYIjogICJUZXhhcyIsCiAgICAiVVQiOiAgIlV0YWgiLAogICAgIlZUIjogICJWZXJtb250IiwKICAgICJWQSI6ICAiVmlyZ2luaWEiLAogICAgIlZJIjogICJWaXJnaW4gSXNsYW5kcyIsCiAgICAiV0EiOiAgIldhc2hpbmd0b24iLAogICAgIldWIjogICJXZXN0IFZpcmdpbmlhIiwKICAgICJXSSI6ICAiV2lzY29uc2luIiwKICAgICJXWSI6ICAiV3lvbWluZyIsCiAgICAiQUIiOiAgIkFsYmVydGEiLAogICAgIkJDIjogICJCcml0aXNoIENvbHVtYmlhIiwKICAgICJNQiI6ICAiTWFuaXRvYmEiLAogICAgIk5CIjogICJOZXcgQnJ1bnN3aWNrIiwKICAgICJOVSI6ICAiTnVuYXZ1dCIsCiAgICAiTkwiOiAgIk5ld2ZvdW5kbGFuZCIsCiAgICAiTlQiOiAgIk5vcnRod2VzdCBUZXJyaXRvcmllcyIsCiAgICAiTlMiOiAgIk5vdmEgU2NvdGlhIiwKICAgICJPTiI6ICAiT250YXJpbyIsCiAgICAiUEUiOiAgIlByaW5jZSBFZHdhcmQgSXNsYW5kIiwKICAgICJRQyI6ICAiUXVlYmVjIiwKICAgICJTSyI6ICAiU2Fza2F0Y2hld2FuIiwKICAgICJZVCI6ICAiWXVrb24iCn0K]]></data>
	</file>
	<file>
	  <filename>/event.Core.ContentPostRender.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHRXh0ZW5zaW9ucyAoYykgMjAwOC0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKeHRfaGVhZGVyczo6b3V0cHV0X2hlYWRlcnMoKTsKJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwoKJHByZXR0eV9odG1sID0gXHh0X3BhcmFtOjpnZXRfYm9vbCgkY29uZmlnLCAneHRfcHJldHR5aHRtbCcsIGZhbHNlKTsKJG1pbl9odG1sID0gXHh0X3BhcmFtOjpnZXRfYm9vbCgkY29uZmlnLCAneHRfbWluaHRtbCcsIGZhbHNlKTsKaWYoICEkcHJldHR5X2h0bWwgJiYgISRtaW5faHRtbCApIHJldHVybjsgLy8gZG8gbm90aGluZwoKJGluID0gJHBhcmFtc1snY29udGVudCddOwppZiggc3RycG9zKCc8L2JvZHk+JywkaW4pID09PSBGQUxTRSApICRpbiA9IHN0cl9yZXBsYWNlKCc8L2h0bWw+JywnPC9ib2R5PjwvaHRtbD4nLCRpbik7CiR0aGVfaGVhZF9wYXJtID0gLTE7ICR0aGVfYm9keV9wYXJtID0gLTE7ICR0aGVfY29tbWVudHNfcGFybSA9IDM7CmlmKCAkcHJldHR5X2h0bWwgKSB7CiAgICAkdGhlX2hlYWRfcGFybSA9IDE7CiAgICAkdGhlX2JvZHlfcGFybSA9IDQ7Cn0KaWYoICRtaW5faHRtbCApIHsKICAgICR0aGVfY29tbWVudHNfcGFybSA9IDE7Cn0KCiRwYWdlX3RvcCA9ICRwYWdlX2JvdHRvbSA9ICRwYWdlX21pZGRsZSA9ICRoZWFkX3NlY3Rpb24gPSAkYm9keV9zZWN0aW9uID0gbnVsbDsKJG1hdGNoZXMgPSBudWxsOwokZG9fcGFyc2UgPSAwOwppZiggcHJlZ19tYXRjaCgnLzxoZWFkLj8+L2knLCRpbiwkbWF0Y2hlcyxQUkVHX09GRlNFVF9DQVBUVVJFKSApIHsKICAgICRwYWdlX3RvcCA9IHN1YnN0cigkaW4sMCwkbWF0Y2hlc1swXVsxXStzdHJsZW4oJG1hdGNoZXNbMF1bMF0pKTsKICAgIGlmKCAkdGhlX2hlYWRfcGFybSA8IDEgKSAkcGFnZV90b3AgPSB0cmltKHN0cl9yZXBsYWNlKCJcbiIsJycsJHBhZ2VfdG9wKSk7CiAgICAkaW4gPSBzdWJzdHIoJGluLCRtYXRjaGVzWzBdWzFdK3N0cmxlbigkbWF0Y2hlc1swXVswXSkpOwp9CmlmKCBwcmVnX21hdGNoKCd+PC9oZWFkPlxzKj88XHMqYm9keVtePl0qPn5pJywkaW4sJG1hdGNoZXMsUFJFR19PRkZTRVRfQ0FQVFVSRSkgKSB7CiAgICAkcGFnZV9taWRkbGUgPSBzdWJzdHIoJGluLCRtYXRjaGVzWzBdWzFdLHN0cmxlbigkbWF0Y2hlc1swXVswXSkpOwogICAgJGhlYWRfc2VjdGlvbiA9IHN1YnN0cigkaW4sMCwkbWF0Y2hlc1swXVsxXSk7CiAgICAkaW4gPSAkYm9keV9zZWN0aW9uID0gc3Vic3RyKCRpbiwkbWF0Y2hlc1swXVsxXStzdHJsZW4oJG1hdGNoZXNbMF1bMF0pKTsKICAgICRkb19wYXJzZSA9IDE7Cn0KaWYoIHByZWdfbWF0Y2goJys8Lyhib2R5fGh0bWwpPitpJywkaW4sJG1hdGNoZXMsUFJFR19PRkZTRVRfQ0FQVFVSRSkgKSB7CiAgICAkcGFnZV9ib3R0b20gPSBzdWJzdHIoJGluLCRtYXRjaGVzWzBdWzFdKTsKICAgICRib2R5X3NlY3Rpb24gPSBzdWJzdHIoJGluLDAsJG1hdGNoZXNbMF1bMV0pOwp9CmlmKCAhJGRvX3BhcnNlICkgcmV0dXJuOwoKcmVxdWlyZV9vbmNlKF9fRElSX18uJy9saWIvaHRtTGF3ZWQucGhwJyk7CiRvdXQgPSAkcGFnZV90b3A7CmlmKCAkdGhlX2hlYWRfcGFybSA8IDAgKSB7CiAgICAvLyBtaW5pZmllZCBoZWFkIG91dHB1dAogICAgJGhlYWRfc2VjdGlvbiA9IHByZWdfcmVwbGFjZSgnLz5ccys8LycsJz48JywkaGVhZF9zZWN0aW9uKTsKICAgICRoZWFkX3NlY3Rpb24gPSB0cmltKHN0cl9yZXBsYWNlKCJcbiIsJycsJGhlYWRfc2VjdGlvbikpOwp9CiRvdXQgLj0gJGhlYWRfc2VjdGlvbjsKJGh0bWxfY29uZiA9IGFycmF5KCd0aWR5Jz0+JHRoZV9ib2R5X3Bhcm0sJ3NjaGVtZXMnPT4nKjoqJywnY29tbWVudHMnPT4kdGhlX2NvbW1lbnRzX3Bhcm0pOwovLyRodG1sX2NvbmYgPSBhcnJheSgndGlkeSc9PiR0aGVfYm9keV9wYXJtLCdzY2hlbWVzJz0+Jyo6IG1haWx0byxodHRwLGh0dHBzLGZ0cCxmaWxlLHRlbCcpOwokb3V0IC49ICRwYWdlX21pZGRsZS5odG1MYXdlZCgkYm9keV9zZWN0aW9uLCRodG1sX2NvbmYpLic8L2JvZHk+PC9odG1sPic7CmlmKCAkdGhlX2NvbW1lbnRzX3Bhcm0gPiAwICkgewogICAkb3V0ID0gcHJlZ19yZXBsYWNlKCcvPCEtLSguKj8pLS0+LycsJycsJG91dCk7Cn0KJHBhcmFtc1snY29udGVudCddID0gJG91dDsKCiMKIyBFT0YKIwo=]]></data>
	</file>
	<file>
	  <filename>/examples</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/examples/sending_an_email.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEFuIGV4YW1wbGUgZnVuY3Rpb24gZGVtb25zdHJhdGluZyBob3cgdG8gcHJvY2VzcyBhbmQgc2VuZCBhIHRlbXBsYXRlZCBlbWFpbCBmcm9tIGEgbW9kdWxlIGFjdGlvbi4KICogQXNzdW1pbmcgdGhhdCB0aGlzIGlzIGEgbW9kdWxlIGFjdGlvbiBmaWxlLCBpbiBhIG1vZHVsZSBkZXJpdmVkIGZyb20gQ01TTVNFeHQKICogYW5kIGEgZmlsZSBlbnRpdGxlZCBlbWFpbHMvZm9vLmVtbCBleGlzdHMgaW4gdGhlIG1vZHVsZSBkaXJlY3RvcnkuCiAqCiAqIFRoZSBmb28uZW1sIGlzIGEgZm9ybWF0dGVkIHRleHQgZmlsZSB0aGF0IGxvb2tzIHNvbWV0aGluZyBsaW5lOgogKgogKiBlbmNvZGVfc3ViamVjdD10cnVlCiAqID09PT0gc3ViamVjdCB0ZW1wbGF0ZSA9PT09CiAqIE5vdGlmaWNhdGlvbiBmcm9tIHtzaXRlbmFtZX0KICogPT09PSBib2R5IHRlbXBsYXRlID09PQogKiA8aDI+SGVsbG8geyRteV9uYW1lfTwvaDM+CiAqIDxwPlRoaXMgbWVzc2FnZSB3YXMgc2VudCB0byB5b3UgYXQgPHN0cm9uZz57JHNtYXJ0eS5ub3d8ZGF0ZV9mb3JtYXQ6JyV4ICVYJ308L3N0cm9uZz48L3A+CiAqCiAqIFRoZSB0b3Agc2VjdGlvbiBvZiB0aGUgZmlsZSAoYWJvdmUgdGhlIHNlY3Rpb24gaGVhZGVyIHNlcGFyYXRvcikgaXMgaW4gLmluaSBmaWxlIGZvcm1hdAogKiBhbmQgYWxsb3dzIHNwZWNpZnlpbmcgbnVtZXJvdXMgb3B0aW9ucywgYW5kIGFkZHJlc3NlcwogKiBUaGUgc2Vjb25kIHNlY3Rpb24gb2YgdGhlIGZpbGUgaXMgYSBzbWFydHkgdGVtcGxhdGUgZm9yIHRoZSBlbWFpbCBzdWJqZWN0LiAgTm90ZSB0aGF0IGEgc3ViamVjdCBjYW5ub3Qgbm9ybWFsbHkgY29udGFpbiBleHRlbmRlZCBjaGFyYWN0ZXJzLCBhbmQgbXVzdCBiZSBvbmx5IG9uZSBsaW5lIGxvbmcsIHVubGVzcyBlbmNvZGVkLgogKiBUaGUgdGhpcmQgc2VjdGlvbiBvZiB0aGUgZW1sIGZpbGUgaXMgYSBzbWFydHkgdGVtcGxhdGUgZm9yIHRoZSBlbWFpbCBib2R5LiAgSXQgcGVybWl0cyBIVE1MIGVtYWlscywgYnV0IHJlbWVtYmVyIHRoYXQgc3R5bGVzaGVldHMgZG8gbm90IHdvcmsuCiAqLwppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgokZW1haWwgPSAkdGhpcy0+Z2V0X2VtYWlsX3N0b3JhZ2UoKS0+bG9hZCgnZm9vLmVtbCcpOwppZiggJGVtYWlsICkgewogICAgJGVtYWlsLT5hZGRfZGF0YSgnbXlfbmFtZScsJ2ZvbyBiYXInKTsKICAgICRlbWFpbC0+YWRkX2FkZHJlc3MoJ3NvbWVib2R5QGxvY2FsaG9zdC5sb2NhbGRvbWFpbicpOwogICAgJHRoaXMtPmNyZWF0ZV9uZXdfbWFpbHByb2Nlc3NvcigkZW1haWwpLT5zZW5kKCk7Cn0=]]></data>
	</file>
	<file>
	  <filename>/fonts</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/fonts/AARDV.TTF</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/fonts/ACTIVA.TTF</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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A9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAH0AAAD2gAAAfQAAAH0AAAB9AAAAk4AlwPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAA9oAAAPaAAAD2gAAAAAAAQAADAgAAQH/BgAACAX6AAMAA//RAAMAAwASAAMAA//RAAMAAwASAAMAJP91AAMAJP/bAAMAJAAlAAMAJv/RAAMAJv/bAAMAJ//lAAMAKv/bAAMAKv/bAAMALQASAAMALQAlAAMALf/bAAMAMv/JAAMAMv/JAAMANP/JAAMAN/+RAAMAN/9aAAMAN/91AAMAOQASAAMAOf+kAAMAOf9sAAMAOf9GAAMAOv+kAAMAOv+RAAMAOv+DAAMAO//JAAMAPP+RAAMAPP9sAAMAPP9sAAMASf/RAAMASQASAAMATf/JAAMATf+aAAMAUf/AAAMAUv+aAAMAVf/AAAMAVQASAAMAWf/lAAMAWf+2AAMAWv/lAAMAWv/DAAMAXP/lAAMAXP/bAAMAY/9DAAMAY//bAAMAif/bAAMAkP8YAAMAkAA3AAMAkf/JAAMA4v+aAAMA6P/lABAAJP/uABAAJgASABAAKgAlABAALf/uABAAMgAlABAANAAlABAAN//NABAAOf/DABAAOv/JABAAO//bABAAPP+NABAATQAlABAATQAlABAAUgAlABAAY//uABAAkAAbABAAkQAlABAA4gAlACQAA/9/ACQAA/91ACQAA//bACQAA//uACQAA//uACQAAwASACQACv+HACQAHQASACQAHgASACQAJP/JACQAJv/bACQAKv/bACQAMv/bACQANP/bACQAN/+RACQAOP/JACQAOf+eACQAOv/JACQAO//uACQAPP+kACQAQ/9/ACQARv/uACQAR//lACQASP/lACQASf/uACQATf/bACQATf/pACQAUv/pACQAVP/uACQAV//RACQAWP/RACQAWf/RACQAWv/lACQAXP/bACQAkf/bACQAqf/bACQA4v/pACUAA//bACUAA//uACUACgASACUAEAAbACUAJgASACUAKgASACUAMgASACUANgASACUAOf/uACUAOv/uACUAPP/uACUATQASACUAkQASACYAAwAlACYACgBAACYAEAAXACYAJP/uACYANgASACYAQwAlACYAY//uACcAAwAlACcAA//JACcACgApACcAEAAhACcAJP/uACcAOf/JACcAOv/bACcAPP/uACcAQwAlACcAY//uACkAAwASACkAA/+kACkAA/9/ACkACgA3ACkAD/9eACkAEf9eACkAHf/XACkAHv/XACkAJP/bACkAQwASACkARP/bACkASP/bACkATP/uACkATf/bACkAUv/bACkAVf/bACkAWP/bACkAXP/uACkAY//bACkAoP/bACkAqf+kACkA4v/bACoACgAbACoAEAAXACoAJP/uACoAN//JACoAY//uACsAAwASACsAA//uACsACgASACsAD//uACsAEf/uACsAQwASAC0AAwASAC0AA//uAC0AA//JAC0ACgASAC0AEP/uAC0AJP/uAC0AQwASAC0AY//uAC4AA//bAC4AA//lAC4AAwAhAC4ACv/bAC4AJP/JAC4AJv/lAC4AOv/bAC4APP/bAC4ATf/RAC4ATf/bAC4AXP/JAC4AY//JAC4Akf/RAC4Aqf/lAC4A4v/bAC8AA/81AC8AA/9UAC8ACv9UAC8AEAASAC8AN/9aAC8AOP/bAC8AOf+kAC8AOv+2AC8APP+2AC8AQ/81AC8AWP/uAC8AXP/JADIAAwASADIAA//uADIAA//JADIACgApADIAD//XADIAEAAlADIAEf/XADIAHQASADIAHgASADIAJP/bADIAOf/bADIAO//bADIAPP/bADIAQwASADIAY//bADMAAwA3ADMAA//JADMAA//bADMAA/81ADMACgBOADMAD/8hADMAEP+yADMAEf9GADMAHf/lADMAHv/lADMAJP+oADMAQwA3ADMARP+2ADMASP/bADMATP/uADMATf+2ADMAUf/uADMAUv/bADMAVf/uADMAVv/bADMAXAASADMAY/+oADMAoP/JADMAqf/JADMAqv/bADMA4v+2ADQAAwAlADQAA//uADQAAwASADQACgApADQAEAAlADQAQwAlADUAA//lADUAA/+2ADUACv+2ADUADwASADUAEP/AADUAEQASADUAJv/JADUAN/+kADUAOf+RADUAOv+kADUAPP+RADUAQ//lADUARP/uADUASP/bADUATf/bADUAUv/bADUAWP/JADUAXP/JADUAoP/uADUA4v/bADcAAwAlADcAA//uADcAA/9aADcAA/+RADcAA/+RADcACgAvADcAD/9GADcAEP/NADcAEf9GADcAHf9QADcAHv9QADcAJP+RADcAQwAlADcARP9GADcARv9GADcASP9GADcATP+2ADcATf9sADcAUv9GADcAVf9aADcAVv9aADcAWP9aADcAWv9GADcAXP9GADcAY/+2ADcAoP9sADcAqf9aADcAqv+RADcA4v9sADgAJP/JADgAY//bADkAA//uADkAA/9sADkAA/+kADkAA/81ADkACgAbADkAD/8hADkAEP/XADkAEf9GADkAHf+VADkAHv9eADkAJP+kADkAMv/bADkAQwASADkARP9eADkASP+RADkATP/JADkATf/bADkATf9/ADkAUv+RADkAWP+kADkAXP+kADkAY/+kADkAkf/bADkAoP+DADkAqf9sADkAqv+kADkA4v9/ADoAA//uADoAA/+RADoAA/+kADoAA/9aADoACgASADoAD/9MADoAEP/JADoAEf9MADoAHf+NADoAHv+NADoAJP+2ADoARP95ADoASP+eADoATP/bADoATf+eADoAUv+yADoAVf+RADoAWP+aADoAXP+2ADoAY/+2ADoAoP+eADoAqf+RADoAqv+kADoA4v+eADsAA//uADsAA//uADsAA//JADsAAwAlADsACv/uADsAEP/bADsAJP/bADsAJv/bADsAMv/bADsAQ//uADsASP/uADsATf/bADsAY//bADsAkf/bADsAqf/JADwAAwASADwAAwASADwAA/9sADwAA/+RADwAA/9/ADwACgASADwAD/95ADwAEP+yADwAEf95ADwAHf+DADwAHv+DADwAJP+kADwAJv/bADwAMv/bADwAQwASADwARP+RADwASP9/ADwATP/JADwATf/bADwATf9/ADwAUv9/ADwAWP+RADwAY//DADwAkf/bADwAoP+RADwAqf9sADwAqv+RADwA4v9/AD0AAwASAD0AA//bAD0ACgAlAD0AEAASAD0AQwASAEMAA//RAEMAA//RAEMAJP9DAEMAJf/lAEMAJv/JAEMAJ//lAEMAKf/lAEMAKv/JAEMAK//lAEMALf/lAEMALv/lAEMAMv/JAEMAM//lAEMANP/JAEMANf/lAEMAOQASAEMAO//lAEMAPf/RAEMASf/RAEMATf/JAEMATf+aAEMAUf/AAEMAUv+aAEMAVf/AAEMAWf/AAEMAWv/AAEMAXP/AAEMAY/9DAEMAif+2AEMAkP8YAEMAkf/JAEMA4v+aAEMA6P/lAEkAAwBYAEkAAwApAEkAA//bAEkACgBzAEkAD//bAEkAEP/uAEkAEf/bAEkAQwBYAEkAqf/bAE4ASP/uAE4ATf/uAE4AUv/uAE4AWP/uAE4AXP/bAE4A4v/uAFEAA//JAFEAA//bAFEAAwASAFEACv/bAFEAQ//JAFIAA//JAFIAA//uAFIACgASAFIAEAAlAFIAQ//JAFUAAwA3AFUAAwA9AFUAA//JAFUAAwASAFUAAwASAFUAAwASAFUAA//pAFUACgBiAFUAD/+aAFUAEP/bAFUAEf+aAFUAQwA3AFUASQASAFUAUAASAFUAUQASAFUAVQASAFUAWAASAFUAWQASAFUAWgASAFUAWwASAFUAXAASAFUAqf/JAFUAqgASAFkAAwA3AFkAAwAlAFkAA/+kAFkACgA3AFkAD/+eAFkAEf+eAFkAQwA3AFoAAwA3AFoAAwA3AFoAA/+yAFoACgA3AFoAD/+kAFoAEP/uAFoAEf+kAFoAQwA3AFsATf/uAFsAUgASAFsA4v/uAFwAAwA3AFwAAwA3AFwAA/+kAFwACgBKAFwAD/+oAFwAEP/uAFwAEf+oAFwAQwA3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADoAAABrgAAAhgAAARKAAAHCAAACxwAAAscAAALjAAADAAAAAwuAAAMYgAADXIAAA2MAAAN+AAADhgAABB2AAAQ1AAAEm4AABUaAAAV6AAAF3YAABlEAAAaZgAAHPQAAB7OAAAfmgAAIQoAACE0AAAhXgAAIYYAACPAAAAnoAAAJ+4AACncAAAr6gAALRQAAC4KAAAuwgAAMF4AADC6AAAw7AAAMUgAADHaAAAyXgAAMrYAADL+AAA0iAAANboAADe4AAA5ygAAPHIAAD0iAAA+/gAAPzwAAD+YAAA/+AAAQEIAAEEAAABBJgAAQUYAAEFsAABBlAAAQa4AAEIaAABE2AAARyIAAEl8AABLfgAATNAAAE4cAABSJgAAU0IAAFQeAABVDAAAVfgAAFaAAABYYgAAWYYAAFreAABcKAAAXe4AAF9mAABhpgAAYuIAAGOmAABj4gAAZDIAAGSKAABlsAAAZuAAAGe0AABn3gAAaKYAAGmAAABqegAAa3wAAG76AABwUAAAcSwAAHNiAAB16gAAeQYAAHwiAAB++AAAgmYAAIXAAACJJAAAjNoAAI6MAACQPAAAkaYAAJOoAACUhAAAlV4AAJXyAACXLAAAmOwAAJqkAACcWgAAncoAAJ/OAAChwgAAouQAAKQGAACk4gAAplYAAKlIAACpSAAAq/QAALB+AAC0CAAAtM4AALTOAAC39AAAuu4AALziAAC+HgAAvooAAL9GAAC/RgAAwIgAAMMsAADDLAAAw2oAAMNqAADDagAAw9AAAMccAADHHAAAxxwAAMccAADHHAAAxxwAAMnwAADLQgAAy0IAAM8qAADQ8gAA0w4AANPoAADT6AAA0+gAANbGAADWxgAA1sYAANe2AADYogAA2YQAANooAADbCgAA3SgAAN+4AADiOgAA4lQAAOJyAADkRAAA5loAAOZaAADnegAA53oAAOd6AADpUAAA6VAAAOlQAADqkgAA6xAAAOuOAADtRAAA7q4AAPO8AAD0KAAA9CgAAPY0AAD6WgAA+sAAAPvOAAD8fAAA/h4AAP9mAAD/+AABAEIAAQEgAAEBqAABA5IAAQU0AAEFNAABBTQAAQdwAAEJZAABC5gAAQwUAAEMOAABDOIAAQziAAENZAABDWQAAQ4OAAEPigABD4oAAQ+KAAEPigABD4oAAQ+KAAEPigABD4oAAQ+KAAEPigABD4oAARC2AAETEgABExIAARMSAAEURAABFhYAARYWAAEWFgABFhYAARYWAAEWFgABF/IAARfyAAEX8gABF/IAARfyAAEX8gABF/IAARfyAAEX8gABF/IAARfyAAEX8gABF/IAARfyAAEX8gABF/IAARgMAAEYDAABGAwAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABGNIAARjSAAEY0gABAAABjwIDAAcCAwAHAAEAAAACAAIAAQgMAAAAAQABAAAADgCuAAEAAAAAAAAAFAAAAAEAAAAAAAEABgAUAAEAAAAAAAIABwAaAAEAAAAAAAMAGwAhAAEAAAAA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YWFjdXRlBmFncmF2ZQthY2lyY3VtZmxleAlhZGllcmVzaXMGYXRpbGRlBWFyaW5nCGNjZWRpbGxhBmVhY3V0ZQZlZ3JhdmULZWNpcmN1bWZsZXgJZWRpZXJlc2lzBmlhY3V0ZQZpZ3JhdmULaWNpcmN1bWZsZXgJaWRpZXJlc2lzBm50aWxkZQZvYWN1dGUGb2dyYXZlC29jaXJjdW1mbGV4CW9kaWVyZXNpcwZvdGlsZGUGdWFjdXRlBnVncmF2ZQt1Y2lyY3VtZmxleAl1ZGllcmVzaXMGZGFnZ2VyBmRlZ3JlZQRjZW50CHN0ZXJsaW5nB3NlY3Rpb24GYnVsbGV0CXBhcmFncmFwaApnZXJtYW5kYmxzCnJlZ2lzdGVyZWQJY29weXJpZ2h0CXRyYWRlbWFyawVhY3V0ZQhkaWVyZXNpcwJBRQZPc2xhc2gJcGx1c21pbnVzA3llbgJtdQtvcmRmZW1pbmluZQxvcmRtYXNjdWxpbmUCYWUGb3NsYXNoDHF1ZXN0aW9uZG93bgpleGNsYW1kb3duBmZsb3Jpbg1ndWlsbGVtb3RsZWZ0Dmd1aWxsZW1vdHJpZ2h0CGVsbGlwc2lzBkFncmF2ZQZBdGlsZGUGT3RpbGRlAk9FAm9lBmVuZGFzaAZlbWRhc2gMcXVvdGVkYmxsZWZ0DXF1b3RlZGJscmlnaHQJcXVvdGVsZWZ0CnF1b3RlcmlnaHQJeWRpZXJlc2lzCVlkaWVyZXNpcwhmcmFjdGlvbghjdXJyZW5jeQ1ndWlsc2luZ2xsZWZ0Dmd1aWxzaW5nbHJpZ2h0AmZpAmZsCWRhZ2dlcmRibA5wZXJpb2RjZW50ZXJlZAxxdW90ZWRibGJhc2ULcGVydGhvdXNhbmQLQWNpcmN1bWZsZXgLRWNpcmN1bWZsZXgGQWFjdXRlCUVkaWVyZXNpcwZFZ3JhdmUGSWFjdXRlC0ljaXJjdW1mbGV4CUlkaWVyZXNpcwZJZ3JhdmUGT2FjdXRlC09jaXJjdW1mbGV4Bk9ncmF2ZQZVYWN1dGULVWNpcmN1bWZsZXgGVWdyYXZlCGRvdGxlc3NpCmNpcmN1bWZsZXgFdGlsZGUGbWFjcm9uBWJyZXZlCWRvdGFjY2VudARyaW5nB2NlZGlsbGEMaHVuZ2FydW1sYXV0Bm9nb25lawVjYXJvbgZMc2xhc2gGbHNsYXNoBlNjYXJvbgZzY2Fyb24DRXRoA2V0aAVUaG9ybgV0aG9ybgdvbmVoYWxmCmFycm93cmlnaHQFaG91c2UGZW5kYXNoCXNmdGh5cGhlbglmaWxsZWRib3gGYnVsbGV0ALgB/4UAAAGvAAUABQAAAu4C7gAAAMgC7gLuAAABLAAyAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQVRFQwAAACDwAgMF/yoBMwPAAOoAAA==]]></data>
	</file>
	<file>
	  <filename>/fonts/ARIAL.TTF</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAEAAAAXAQAABABwRFNJRyQ9+ecABX+MAAAafEdERUZeI11yAAV1GAAAAKZHU1VC1fDdzAAFdcAAAAmqSlNURm0qaQYABX9sAAAAHkxUU0iAZfo8AAAceAAABo5PUy8yDN8yawAAAfgAAABWUENMVP17PkMABXTgAAAANlZETVhQkmr1AAAjCAAAEZRjbWFw50BqOgAA0cQAABdqY3Z0IJYq0nYAAPqgAAAGMGZwZ23MeVmaAADpMAAABm5nYXNwABgACQAFdNAAAAAQZ2x5Zg73j+wAARr8AAPnYmhkbXi+u8OXAAA0nAAAnShoZWFkzpgmkgAAAXwAAAA2aGhlYRIzEv8AAAG0AAAAJGhtdHgONFhAAAACUAAAGihrZXJuN2E5NgAFAmAAABVgbG9jYQ5haTIAAQDQAAAaLG1heHALRwyoAAAB2AAAACBuYW1lwPJlOwAFF8AAABsNcG9zdI/p134ABTLQAABB/3ByZXBS/sTpAADvoAAACv8AAQAAAAMAAObouupfDzz1CBsIAAAAAACi4ycqAAAAALnVtPb6r/1nEAAIDAAAAAkAAQABAAAAAAABAAAHPv5OAEMQAPqv/iYQAAABAAAAAAAAAAAAAAAAAAAGigABAAAGigEAAD8AdgAHAAIAEAAvAFYAAAQNCv8AAwACAAEDiAGQAAUAAAWaBTMAAAEbBZoFMwAAA9EAZgISCAUCCwYEAgICAgIEAAB6h4AAAAAAAAAIAAAAAE1vbm8AQAAg//wF0/5RATMHPgGyQAAB////AAAAAAYAAQAAAAAAAjkAAAI5AAACOQCwAtcAXgRzABUEcwBJBx0AdwVWAFgBhwBaAqoAfAKqAHwDHQBABKwAcgI5AKoCqgBBAjkAugI5AAAEcwBVBHMA3wRzADwEcwBWBHMAGgRzAFUEcwBNBHMAYQRzAFMEcwBVAjkAuQI5AKoErABwBKwAcgSsAHAEcwBaCB8AbwVW//0FVgCWBccAZgXHAJ4FVgCiBOMAqAY5AG0FxwCkAjkAvwQAADcFVgCWBHMAlgaqAJgFxwCcBjkAYwVWAJ4GOQBYBccAoQVWAFwE4wAwBccAoQVWAAkHjQAZBVYACQVWAAYE4wApAjkAiwI5AAACOQAnA8EANgRz/+ECqgBZBHMASgRzAIYEAABQBHMARgRzAEsCOQATBHMAQgRzAIcBxwCIAcf/ogQAAIgBxwCDBqoAhwRzAIcEcwBEBHMAhwRzAEgCqgCFBAAAPwI5ACQEcwCDBAAAGgXHAAYEAAAPBAAAIQQAACgCrAA5AhQAvAKsAC8ErABXBVb//QVW//0FxwBoBVYAogXHAJwGOQBjBccAoQRzAEoEcwBKBHMASgRzAEoEcwBKBHMASgQAAFAEcwBLBHMASwRzAEsEcwBLAjkAvQI5ACMCOf/lAjkACQRzAIcEcwBEBHMARARzAEQEcwBEBHMARARzAIMEcwCDBHMAgwRzAIMEcwBJAzMAgARzAGsEcwAbBHMAUQLNAG0ETAABBOMAmQXlAAMF5QADCAAA4QKqAN4CqgA9BGQATggAAAEGOQBTBbQAmgRkAE4EZABNBGQATQRz//0EnACgA/QAOAW0AHoGlgChBGQAAAIxAAAC9gAvAuwALQYlAH8HHQBEBOMAgQTjAJ4CqgDoBKwAcgRkAFQEcwAuBGQAMwTlABoEcwCGBHMAjAgAAO8FVv/9BVb//QY5AGMIAACBB40AUgRz//wIAAAAAqoAUwKqAEcBxwCAAccAbARkAE4D9AAvBAAAIQVWAAYBVv45BHP/5AKqAFwCqgBcBAAAFwQAABcEcwBJAjkAuQHHAGwCqgBHCAAAJQVW//0FVgCiBVb//QVWAKIFVgCiAjkAjQI5/+ACOQAEAjkAFQY5AGMGOQBjBjkAYwXHAKEFxwChBccAoQI5AMYCqgAZAqoABgKqAB0CqgAuAqoA5QKqAKICqgBrAqoAOgKqALcCqgAoBHMAAAHHAAMFVgBcBAAAPwTjACkEAAAoAhQAvAXH//0EcwBJBVYABgQAACEFVgCeBHMAhwSsAHIErAChAqoAawKqABkCqgAhBqwAawasAGsGrAAhBHMAAAY5AG0EcwBCAjkAsQVWAFwEAAA/BccAZgQAAFAFxwBmBAAAUARzAEYEa//hAqoB8QVW//0EcwBKBVb//QRzAEoFxwCeBOsARwXH//0FVgCiBHMASwVWAKIEcwBLBHMAlgHHAEIEcwCWAlUAiARzAJoCrACDBccAnARzAIcFxwCcBHMAhwY5AGMEcwBEBccAoQKqAIUFxwChAqoAPAVWAFwEAAA/BOMAMAI5ACQE4wAwAwAAIwXHAKEEcwCDBccAoQRzAIME4wApBAAAKATjACkEAAAoBGgApAY5AGAGYgBVBKAASAR0AEgDkQBiBPAARAMpAC4FMABIBGv/4QQAALAC6wBSCMAAMwgAAE8EAACZCAAATwQAAJkIAABPBAAAmAQAAJgH1QFqBcAAngSrAHIE1QCdBKwAcQTVAiIE1QEFBav/6QUAAckFqwJ+Bav/6QWrAn4Fq//pBasCfgWr/+kFq//pBav/6QWr/+kFq//pBasBwAWrAn4FqwHABasBwAWr/+kFq//pBav/6QWrAn4FqwHABasBwAWr/+kFq//pBav/6QWrAn4FqwHABasBwAWr/+kFq//pBav/6QWr/+kFq//pBav/6QWr/+kFq//pBav/6QWr/+kFq//pBav/6QWr/+kFq//pBav/6QWr/+kFqwLWBasAZgWr/+oF1f//BNUAkggAAAAH6wEwB+sBIAfrATAH6wEgBNUAsgTVAIAE1QAqCCsBmAhrAbgHVQAQBgAA9AYAAG8EQAA6BUAANwTAAD8EFQBABAAAJQYAAFUF4QC/A40AiQTV/9kBgACAAtUAhgcVAGEClgAPBNUAkgLWAIMC1gCDBNUAsgLWAHAFVv/9BHMASgXHAGYEAABQBccAZgQAAFAFVgCiBHMASwVWAKIEcwBLBVYAogRzAEsGOQBtBHMAQgY5AG0EcwBCBjkAbQRzAEIFxwCkBHMAhwXHAB8EcwAGAjn/zgI5/84COf/kAjn/5AI5//YCOf/1AjkAowHHAGYEAAA3Acf/ogVWAJYEAACIBAAAhgRzAJYBx//6BccAnARzAIcFyQClBHMAiwY5AGMEcwBEBjkAYwRzAEQFxwChAqoAawVWAFwEAAA/BOMAMAI5AAwFxwChBHMAgwXHAKEEcwCDBccAoQRzAIMFxwChBHMAgweNABkFxwAGBVYABgQAACEBxwCJBVb//QRzAEoIAAABBx0ARAY5AFME4wCBAjkAuQeNABkFxwAGB40AGQXHAAYHjQAZBccABgVWAAYEAAAhAccAigKq/+EEcwAbBM0AWgasAGsGrAAiBqwAIgasAEoCqgDiAqoAawKqAN4Cqv/qBVf//wZG/6cGtP+oAxL/qAYy/6cG2P+nBgX/pwHH/3gFVv/9BVYAlgVY//4FVgCiBOMAKQXHAKQCOQC/BVYAlgVYAAsGqgCYBccAnAUzAG0GOQBjBccApAVWAJ4E8gCUBOMAMAVWAAYFVgAJBq8AfwX7AGECOQAEBVYABgSgAEgDkQBiBHMAiwHHAGsEYACIBJoAjAQAABkDhwBIBHMAiwRzAFwBxwCJBAAAhgQAABgEnACgBAAAGgOVAFwEcwBEBI0AgwPbAFYEYACIBDMAEQW0AHoGPwBXAcf/yQRgAIgEcwBIBGAAiAY/AFcFVwCiBusAMgRVAKEFwABkBVYAXAI5AL8COQAEBAAANwh1AA0IFQCkBtUAMQSpAKEFFQAKBcAAoAVW//0FQACnBVYAlgRVAKEFawAABVYAogdjAAcE1QBOBcAAoQXAAKEEqQChBUAAEgaqAJgFxwCkBjkAYwXAAKAFVgCeBccAZgTjADAFFQAKBhUAUgVWAAkF6wCfBVUAVwdVAKEHgAChBlUAAAcVAKgFQAClBcAAVQgVAKQFxwAaBHMASgSVAFsEQACIAusAiASrAAAEcwBLBVr/+wOrADIEeACHBHgAhwOAAIYEqwAYBYAAjARrAIgEcwBEBFUAiARzAIcEAABQA6oAJgQAACEGlQBLBAAADwSVAIoEKwBFBmsAjQaVAI0FAAAoBcAAiwQrAIQEFQAwBgAAiQRVAB8EcwBLBHMAAALrAIkEFQBLBAAAPwHHAIgCOQAJAcf/ogdAABMGgACDBHMAAAOAAIYEAAAhBGsAiAPpAKEDSgCICAAAQQiVAKAFhQAtAqoBAQKqAB4CqgAxAqoAMQKqAQECqgB+AqoAfgKqAIwCqgCMAqoBAQKqABACqgEBAqoBIQMQAH0CqgCMAjMA0gKqAwsCqv8EAjkAuQSBAGkEVgAyAzEAGQQRAC0E0QCWAfkAmwMPAF8EygCbBLgAjAH5AJsEEwAoA7AAUAO0ADwEygCbBM8AUAH5AJsC0gA8BJgAWgQ8ABkEiABuBF8AcwOxABkD1AAKBGYAlgQTACgFjgBkBSQAKAPyAJsD8gCbA/IAmwHjAFoDVgBaBoYAmwH5/6wEEwAoBBMAKAO0/1cDtP9XBEgALQWOAGQFjgBkBY4AZAWOAGQEgQBpBIEAaQSBAGkEVgAyAzEAGQQRAC0E0QCWAksAAANKAAAEuACMAksAAAQTACgDsABQA7QAPATPAFAC0gA8BJgAWgSIAG4EXwBzA9QACgRmAJYEEwAoBY4AZAUkACgB+QCbBFYAMgOwAFAEXwBzBJsAPAAA/9wAAP8lAAD/3AAA/lECjQCrAo0AoALaAEMDTQB5Aaj/ugGcAEYB5QBGAZwARgGcAEYBrQBIAZwARgGxAEYBUQBGBDUBfAQ1AS4ENQC3BDUAgQQ1ASwENQC+BDUArwQ1AIEENQCaBDUA2wQ1AIUCjQDBBDUAswYAAQAGAAEAAkIANgYAAQAENQCeBDUAmAQ1AMsGAAEABgABAAYAAQAGAAEABgABAAGxAEYGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAUb/7oGAAEABgABAAYAAQAFtQA6BbUAOgH0/7oB9P+6BgABAAYAAQAGAAEABgABAASBADYENQA2BD3/ugQ9/7oD6QBKA+kASgZ/ABQHdgAUAyf/ugQe/7oGfwAUB3YAFAMn/7oEHv+6BRsAMgS1ACQGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEAAc8AMAGxAEYBsQBGAbEAQAGxAEYGAAEABgABAAAA/9wAAP5RAAD/FgAA/xYAAP8WAAD/FgAA/xYAAP8WAAD/FgAA/xYAAP8WAAD/3AAA/xYAAP/cAAD/IAAA/9wEcwBKCAAAAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQACjQB/Ao0AXQYAAQAE7gAVA00AeQGoAA4B1v/cAagAVgHWABADdQAyA3UAMgGoAC0B1gATBRsAMgS1ACQB9P+6AfT/ugGoAJMB1gATBbUAOgW1ADoB9P+6AfT/ugJCAAADAP/3BbUAOgW1ADoB9P+6AfT/ugW1ADoFtQA6AfT/ugH0/7oEgQA2BDUANgQ9/7oEPf+6BIEANgQ1ADYEPf+6BD3/ugSBADYENQA2BD3/ugQ9/7oCswBfArMAXwKzAF8CswBfA+kASgPpAEoD6QBKA+kASgaSAD4GkgA+BD//ugQ//7oGkgA+BpIAPgQ//7oEP/+6CMkAPgjJAD4Gxf+6BsX/ugjJAD4IyQA+BsX/ugbF/7oEp/+6BKf/ugSn/7oEp/+6BKf/ugSn/7oEp/+6BKf/ugRaACoDmgA2BDX/ugMn/7oEWgAqA5oANgQ1/7oDJ/+6Bk8AJwZPACcCJP+6Ahr/ugSnAEYEpwBGAiT/ugIa/7oEzwAtBM8ALQMn/7oDJ/+6BA0ARwQNAEcBqP+6Aaj/ugK0ACMCtAAjAyf/ugMn/7oENQBFBDUARQH0/7oB9P+6AkIANgMA//cDmv+6Ayf/ugN1ADIDdQAyBRsAMgS1ACQFGwAyBLUAJAH0/7oB9P+6BFoAQATOAEkEWgAmBM4AOQRaAFMEzgBKBFoAUwTOAEoGAAEABgABAAGcAEYBnABGBgABAAYAAQAGAAEAAVEARgGxAEYGAAEABgABAAGtAEgB5QBGBgABAAYAAQAGAAEAAbEARgGxAEYBsQBGAbEARgGxAEABzwAwBgABAAGcAEYBnABGBgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEAAo0AygKNAMcCjQDGBgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEABgABAAYAAQAGAAEAAQD/uggA/7oQAP+6BtwAYwU/AEQG1QChBVsAgwAA/dwAAPwvAAD8pgAA/lQAAPzXAAD9cwAA/ikAAP4NAAD9EQAA/GcAAP2dAAD79QAA/HIAAP7VAAD+1QAA/wIEGwCgBqwAawasABkAAP62AAD9cwAA/ggAAPymAAD+UwAA/REAAPvIAAD69AAA+q8AAPxyAAD7qgAA+2oAAPzxAAD8fQAA+90AAPzBAAD7mAAA/eoAAP6EAAD9wgAA/PEAAP1fAAD+dgAA/rwAAPzrAAD9bAAA/VgAAPyQAAD9FQAA/CwAAPwTAAD8EgAA+5YAAPuWAccAiAVW//0EcwBKBVb//QRzAEoFVv/9BHMASgVW//0EcwBKBVb//QRzAEoFVv/9BHMASgVW//0EcwBKBVb//QRzAEoFVv/9BHMASgVW//0EcwBKBVb//QRzAEoFVv/9BHMASgVWAKIEcwBLBVYAogRzAEsFVgCiBHMASwVWAKIEcwBLBVYAogRzAEsFVgCiBHMASwVWAKIEcwBLBVYAogRzAEsCOQBjAccAHwI5ALoBxwB8BjkAYwRzAEQGOQBjBHMARAY5AGMEcwBEBjkAYwRzAEQGOQBjBHMARAY5AGMEcwBEBjkAYwRzAEQG3ABjBT8ARAbcAGMFPwBEBtwAYwU/AEQG3ABjBT8ARAbcAGMFPwBEBccAoQRzAIMFxwChBHMAgwbVAKEFWwCDBtUAoQVbAIMG1QChBVsAgwbVAKEFWwCDBtUAoQVbAIMFVgAGBAAAIQVWAAYEAAAhBVYABgQAACEFVv/9BHMASgI5/+IBx/+wBjkAYwRzAEQFxwChBHMAgwXHAKEEcwCDBccAoQRzAIMFxwChBHMAgwXHAKEEcwCDAAD+/gAA/v4AAP7+AAD+/gRV//0C6wAMB2MABwVa//sEqQChA4AAhgSpAKEDgACGBccApARrAIgEc//9BAAAFARz//0EAAAUBVYACQQAAA8FVQBXBCsARQVVAKEEcwCHBgUAYwRzAFUGOQBgBHMARAW1ADoB9P+6AiT/ugIa/7oEpwBGAfQAngH0ABAB9AAbAfQAEAH0AGsB9P/5Aif/zgGoAA8BqP/1AqoApAKqAKQBqAAOAagAVgGoAFYAAP/PAagADwHW/78BqP/1Adb/zQGoAB0B1v/1AagAkwHWABMDdQAyA3UAMgN1ADIDdQAyBRsAMgS1ACQFtQA6BbUAOgH0/7oB9P+6BbUAOgW1ADoB9P+6AfT/ugW1ADoFtQA6AfT/ugH0/7oFtQA6BbUAOgH0/7oB9P+6BbUAOgW1ADoB9P+6AfT/ugW1ADoFtQA6AfT/ugH0/7oFtQA6BbUAOgH0/7oB9P+6BIEANgQ1ADYEPf+6BD3/ugSBADYENQA2BD3/ugQ9/7oEgQA2BDUANgQ9/7oEPf+6BIEANgQ1ADYEPf+6BD3/ugSBADYENQA2BD3/ugQ9/7oEgQA2BDUANgQ9/7oEPf+6ArMAMgKzADICswBfArMAXwKzAF8CswBfArMAMgKzADICswBfArMAXwKzAF8CswBfArMAXwKzAF8CswA4ArMAOAKzAEkCswBJA+kASgPpAEoD6QBK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//4ACQAJ//0ACgAK//0ACwAL//0ADAAM//0ADQAN//0ADgAN//0ADwAO//0AEAAP//0AEQAP//wAEgAR//wAEwAS//wAFAAT//wAFQAT//sAFgAU//sAFwAV//sAGAAV//oAGQAX//sAGgAZ//oAGwAa//oAHAAa//oAHQAb//oAHgAc//kAHwAc//kAIAAd//kAIQAf//kAIgAg//kAIwAg//gAJAAh//gAJQAi//gAJgAi//cAJwAj//cAKAAk//cAKQAm//cAKgAm//cAKwAn//YALAAo//YALQAo//YALgAq//YALwAr//YAMAAt//YAMQAt//UAMgAu//UAMwAv//UANAAw//QANQAw//QANgAx//QANwAz//QAOAA0//MAOQA0//MAOgA1//MAOwA1//MAPAA2//MAPQA3//MAPgA4//MAPwA5//IAQAA6//IAQQA7//IAQgA8//IAQwA8//EARAA9//EARQA+//EARgA///AARwBA//AASABB//AASQBC//AASgBC//AASwBD//AATABE//AATQBG/+8ATgBG/+8ATwBH/+8AUABI/+8AUQBJ/+4AUgBJ/+4AUwBK/+4AVABL/+0AVQBN/+0AVgBN/+0AVwBO/+0AWABP/+wAWQBQ/+wAWgBQ/+0AWwBR/+wAXABT/+wAXQBU/+wAXgBU/+wAXwBV/+sAYABW/+sAYQBX/+sAYgBX/+oAYwBZ/+oAZABa/+oAZQBb/+oAZgBc/+kAZwBc/+kAaABd/+kAaQBe/+gAagBg/+kAawBg/+kAbABh/+kAbQBi/+gAbgBj/+gAbwBj/+gAcABk/+cAcQBl/+cAcgBn/+cAcwBn/+cAdABo/+YAdQBp/+YAdgBq/+YAdwBq/+UAeABr/+UAeQBt/+UAegBu/+UAewBu/+UAfABv/+UAfQBw/+UAfgBx/+QAfwBx/+QAgABz/+QAgQB0/+QAggB1/+MAgwB2/+MAhAB2/+MAhQB3/+IAhgB4/+IAhwB5/+IAiAB6/+IAiQB7/+EAigB8/+EAiwB9/+IAjAB9/+EAjQB+/+EAjgB//+EAjwCB/+EAkACB/+AAkQCC/+AAkgCD/+AAkwCE/98AlACE/98AlQCF/98AlgCH/98AlwCI/+AAmACI/98AmQCJ/98AmgCK/94AmwCL/94AnACM/94AnQCM/94AngCO/94AnwCP/94AoACQ/94AoQCQ/90AogCR/90AowCS/90ApACT/90ApQCU/9wApgCV/9sApwCW/9sAqACX/9sAqQCX/9sAqgCY/9sAqwCZ/9sArACb/9sArQCb/9sArgCc/9sArwCd/9sAsACe/9sAsQCe/9oAsgCf/9oAswCg/9oAtACi/9kAtQCj/9gAtgCj/9gAtwCk/9gAuACl/9gAuQCm/9gAugCm/9gAuwCo/9gAvACp/9cAvQCq/9cAvgCq/9cAvwCr/9cAwACs/9cAwQCt/9cAwgCu/9cAwwCv/9YAxACw/9YAxQCx/9UAxgCx/9UAxwCy/9UAyACz/9QAyQC0/9QAygC1/9QAywC2/9QAzAC3/9QAzQC4/9QAzgC5/9QAzwC5/9QA0AC6/9QA0QC8/9QA0gC9/9MA0wC9/9IA1AC+/9IA1QC//9IA1gDA/9EA1wDA/9EA2ADC/9EA2QDD/9EA2gDE/9EA2wDE/9EA3ADF/9EA3QDG/9EA3gDH/9AA3wDH/9AA4ADJ/88A4QDK/88A4gDL/88A4wDL/88A5ADM/88A5QDN/88A5gDO/88A5wDQ/84A6ADQ/84A6QDR/84A6gDS/80A6wDT/80A7ADT/80A7QDU/80A7gDW/8wA7wDX/8wA8ADX/8wA8QDY/8wA8gDZ/8wA8wDa/8wA9ADa/8wA9QDc/8sA9gDd/8sA9wDe/8sA+ADe/8oA+QDf/8oA+gDg/8oA+wDh/8oA/ADh/8oA/QDj/8kA/gDk/8kA/wDl/8kA+Aj/AAgACP/+AAkACf/9AAoACv/9AAsAC//9AAwADP/9AA0ADf/9AA4ADf/9AA8ADv/9ABAAD//9ABEAD//8ABIAEf/8ABMAEv/8ABQAE//8ABUAE//7ABYAFP/7ABcAFf/7ABgAFf/6ABkAF//7ABoAGf/6ABsAGv/6ABwAGv/6AB0AG//6AB4AHP/5AB8AHP/5ACAAHf/5ACEAH//5ACIAIP/5ACMAIP/4ACQAIf/4ACUAIv/4ACYAIv/3ACcAI//3ACgAJP/3ACkAJv/3ACoAJv/3ACsAJ//2ACwAKP/2AC0AKP/2AC4AKv/2AC8AK//2ADAALf/2ADEALf/1ADIALv/1ADMAL//1ADQAMP/0ADUAMP/0ADYAMf/0ADcAM//0ADgANP/zADkANP/zADoANf/zADsANf/zADwANv/zAD0AN//zAD4AOP/zAD8AOf/yAEAAOv/yAEEAO//yAEIAPP/xAEMAPP/xAEQAPf/xAEUAPv/xAEYAP//wAEcAQP/wAEgAQf/wAEkAQv/wAEoAQv/wAEsAQ//wAEwARP/wAE0ARv/vAE4ARv/vAE8AR//vAFAASP/vAFEASf/uAFIASf/uAFMASv/uAFQAS//tAFUATf/tAFYATf/tAFcATv/tAFgAT//sAFkAUP/sAFoAUP/tAFsAUf/sAFwAU//sAF0AVP/sAF4AVP/sAF8AVf/rAGAAVv/rAGEAV//rAGIAV//rAGMAWf/qAGQAWv/qAGUAW//qAGYAXP/pAGcAXP/pAGgAXf/pAGkAXv/pAGoAYP/pAGsAYP/pAGwAYf/pAG0AYv/pAG4AY//oAG8AY//oAHAAZP/oAHEAZf/nAHIAZ//nAHMAZ//nAHQAaP/nAHUAaf/mAHYAav/mAHcAav/mAHgAa//lAHkAbf/lAHoAbv/lAHsAbv/lAHwAb//lAH0AcP/kAH4Acf/kAH8Acv/kAIAAc//kAIEAdP/jAIIAdf/jAIMAdv/jAIQAdv/jAIUAd//jAIYAeP/jAIcAef/iAIgAev/iAIkAe//iAIoAfP/iAIsAff/iAIwAff/iAI0Afv/iAI4Af//iAI8Agf/hAJAAgf/hAJEAgv/gAJIAg//gAJMAhP/gAJQAhP/gAJUAhf/gAJYAh//fAJcAiP/gAJgAiP/fAJkAif/fAJoAiv/eAJsAi//eAJwAjP/eAJ0AjP/eAJ4Ajv/eAJ8Aj//eAKAAkP/eAKEAkP/dAKIAkf/dAKMAkv/dAKQAk//dAKUAlP/cAKYAlf/bAKcAlv/bAKgAl//bAKkAl//bAKoAmP/bAKsAmf/bAKwAm//bAK0Am//bAK4AnP/bAK8Anf/bALAAnv/bALEAnv/aALIAn//aALMAoP/ZALQAov/ZALUAo//YALYAo//YALcApP/YALgApf/YALkApv/YALoApv/YALsAqP/YALwAqf/XAL0Aqv/XAL4Aqv/XAL8Aq//XAMAArP/XAMEArf/XAMIArv/XAMMAr//WAMQAsP/WAMUAsf/VAMYAsf/VAMcAsv/UAMgAs//UAMkAtP/UAMoAtf/UAMsAtv/UAMwAt//UAM0AuP/UAM4Auf/UAM8Auf/UANAAuv/UANEAvP/UANIAvf/TANMAvf/SANQAvv/SANUAv//SANYAwP/RANcAwP/RANgAwv/RANkAw//RANoAxP/RANsAxP/RANwAxf/RAN0Axv/RAN4Ax//QAN8Ax//QAOAAyf/PAOEAyv/PAOIAy//PAOMAy//PAOQAzP/PAOUAzf/PAOYAzv/PAOcA0P/OAOgA0P/OAOkA0f/OAOoA0v/NAOsA0//NAOwA0//NAO0A1P/NAO4A1v/MAO8A1//MAPAA1//MAPEA2P/MAPIA2f/MAPMA2v/MAPQA2v/MAPUA3P/LAPYA3f/LAPcA3v/LAPgA3v/KAPkA3//KAPoA4P/KAPsA4f/KAPwA4f/KAP0A4//JAP4A5P/JAP8A5f/JAPgI/wAIAAj//gAJAAn//QAKAAr//QALAAv//QAMAAz//QANAA3//QAOAA3//QAPAA7//QAQAA///QARAA///AASABH//AATABL//AAUABP//AAVABP/+wAWABT/+wAXABX/+wAYABX/+gAZABf/+wAaABn/+gAbABr/+gAcABr/+gAdABv/+gAeABz/+QAfABz/+QAgAB3/+QAhAB//+QAiACD/+QAjACD/+AAkACH/+AAlACL/+AAmACL/9wAnACP/9wAoACT/9wApACb/9wAqACb/9wArACf/9gAsACj/9gAtACj/9gAuACr/9gAvACv/9gAwAC3/9gAxAC3/9QAyAC7/9QAzAC//9QA0ADD/9AA1ADD/9AA2ADH/9AA3ADP/9AA4ADT/8wA5ADT/8wA6ADX/8wA7ADX/8wA8ADb/8wA9ADf/8wA+ADj/8wA/ADn/8gBAADr/8gBBADv/8gBCADz/8gBDADz/8QBEAD3/8QBFAD7/8QBGAD//8ABHAED/8ABIAEH/8ABJAEL/8ABKAEL/8ABLAEP/8ABMAET/8ABNAEb/7wBOAEb/7wBPAEf/7wBQAEj/7wBRAEn/7gBSAEn/7gBTAEr/7gBUAEv/7QBVAE3/7QBWAE3/7QBXAE7/7QBYAE//7ABZAFD/7ABaAFD/7QBbAFH/7ABcAFP/7ABdAFT/7ABeAFT/7ABfAFX/6wBgAFb/6wBhAFf/6wBiAFf/6wBjAFn/6gBkAFr/6gBlAFv/6gBmAFz/6QBnAFz/6QBoAF3/6QBpAF7/6QBqAGD/6QBrAGD/6QBsAGH/6QBtAGL/6QBuAGP/6ABvAGP/6ABwAGT/6ABxAGX/5wByAGf/5wBzAGf/5wB0AGj/5wB1AGn/5gB2AGr/5gB3AGr/5gB4AGv/5QB5AG3/5QB6AG7/5QB7AG7/5QB8AG//5QB9AHD/5AB+AHH/5AB/AHL/5ACAAHP/5ACBAHT/5ACCAHX/4wCDAHb/4wCEAHb/4wCFAHf/4wCGAHj/4wCHAHn/4gCIAHr/4gCJAHv/4gCKAHz/4gCLAH3/4gCMAH3/4gCNAH7/4gCOAH//4gCPAIH/4QCQAIH/4QCRAIL/4ACSAIP/4ACTAIT/4ACUAIT/4ACVAIX/4ACWAIf/3wCXAIj/4ACYAIj/3wCZAIn/3wCaAIr/3gCbAIv/3gCcAIz/3gCdAIz/3gCeAI7/3gCfAI//3gCgAJD/3gChAJD/3QCiAJH/3QCjAJL/3QCkAJP/3QClAJT/3ACmAJX/2wCnAJb/2wCoAJf/2wCpAJf/2wCqAJj/2wCrAJn/2wCsAJv/2wCtAJv/2wCuAJz/2wCvAJ3/2wCwAJ7/2wCxAJ7/2gCyAJ//2gCzAKD/2QC0AKL/2QC1AKP/2AC2AKP/2AC3AKT/2AC4AKX/2AC5AKb/2AC6AKb/2AC7AKj/2AC8AKn/1wC9AKr/1wC+AKr/1wC/AKv/1wDAAKz/1wDBAK3/1wDCAK7/1wDDAK//1gDEALD/1gDFALH/1QDGALH/1QDHALL/1ADIALP/1ADJALT/1ADKALX/1ADLALb/1ADMALf/1ADNALj/1ADOALn/1ADPALn/1ADQALr/1ADRALz/1ADSAL3/0wDTAL3/0gDUAL7/0gDVAL//0gDWAMD/0QDXAMD/0QDYAML/0QDZAMP/0QDaAMT/0QDbAMT/0QDcAMX/0QDdAMb/0QDeAMf/0ADfAMj/0ADgAMn/zwDhAMr/zwDiAMv/zwDjAMv/zwDkAMz/zwDlAM3/zwDmAM7/zwDnAND/zgDoAND/zgDpANH/zgDqANL/zQDrANP/zQDsANP/zQDtANT/zQDuANb/zADvANf/zADwANf/zADxANj/zADyANn/zADzANr/zAD0ANr/zAD1ANz/ywD2AN3/ywD3AN7/ywD4AN7/ygD5AN//ygD6AOD/ygD7AOH/ygD8AOH/ygD9AOP/yQD+AOT/yQD/AOX/yQAAABgAAAaMCxYIAAMDAgQGBgoHAgQEBAYDBAMDBgYGBgYGBgYGBgMDBgYGBgsIBwcHBgYIBwIFBwYIBwgGCAcHBgcICgcIBwMDAwUGBAYGBgYGBAYGAgIFAggGBgYGBAYDBgYKBgYGBAIEBggIBwYHCAcGBgYGBgYGBgYGBgICAgIGBgYGBgYGBgYGBgQGBgYEBgcICAsEBAYLCAgGBgYGBgYHCQYDBAUICgYGAgYHBgcGBgYLCAgICwoGCwQEAgIGBQYIAgYEBAYGBgMCBAsIBggGBgICAgIICAgHBwcCBAQEBAQEBAQEBAYCBwYHBgIIBggGBwYGBgQEBAoJCgYIBgIHBgcGBwYGBgQIBggGBwcIBgYGBgYCBgQGBAcGBwYIBgcEBwQHBgYDBgQHBgcGBwYHBgYICAYGBQcEBwYGBAwLBgsGCwYGCwgGBwYHBwgHCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAcLCwsLCwcHBwsMCggIBgcHBgYICAUHAgQKBAcEBAcECAYHBgcGBgYGBgYGCAYIBggGBwYJBgICAgICAgICBQIHBQYGAgcGCAYIBggGBwQHBgYEBwYHBgcGCAYKCggGAggGCwoIBgMKCgoKCgoIBgIEBgYKCgoKBAQEBAgJCQUJCggCCAcIBgcHAgcICAcHCAcGBwYIBwgIAggGBQYCBgYGBQYGAgYGBgYFBgYFBgUICAIGBgYIBgoGBwcCAgUMCwkHBwcIBwcGCAYMBwkJBwcIBwgHBgcGBwgHBwYKCggJBwgLCAYGBwQGBggFBgYFBggGBgYGBgYGCAYGBggIBwgGBggGBgYEBgYCAgIKCQYFBgYFBQsNCQQEBAQEBAQEBAQEBAQEBAMEBAMGBgUGBwMDBwcDBgUFBwcDBQcGBgYGBgYGCQcGBgYDBQkDBgYFBQcJCQkJBgYGBgUGBwMFBwMGBQUHBQcGBgYGBgkHAwYFBgYAAAAABAQEBQICAwICAgICAgYGBgYGBgYGBgYGBAYICAMIBgYGCAgICAgCCAgICAgICAgHCAgICAgDAwgICAgGBgYGBQUJCgQGCQoEBgcGCAgICAgICAgICAgICAgICAICAgICCAgAAAAAAAAAAAAAAAAAAAAABwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIBAQIBwUCAwIDBQUCAwcGAwMCAwgIAwMDBAgIAwMICAMDBgYGBgYGBgYGBgYGBAQEBAUFBQUJCQYGCQkGBgwMCQkMDAkJBgYGBgYGBgYGBQYEBgUGBAkJAwMGBgMDBwcEBAYGAgIEBAQEBgYDAwMEBQQFBQcGBwYDAwYHBgcGBwYHCAgCAggICAICCAgCAwgICAICAgICAggCAggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAQEBAgICAgICAgICAgICAgICAgICAgICAgICAELFgkHCQcAAAAAAAAAAAAAAAAAAAAABgkJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIBggGCAYIBggGCAYIBggGCAYIBggGCAYGBgYGBgYGBgYGBgYGBgYGAgICAggGCAYIBggGCAYIBggGCQcJBwkHCQcJBwcGBwYJBwkHCQcJBwkHCAYIBggGCAYCAggGBwYHBgcGBwYHBgAAAAAGBAoHBgUGBQgGBgYGBgcGBwYHBggGCQYIAwMDBgMDAwMDAwMCAgQEAgICAAIDAgMCAwIDBQUFBQcGCAgDAwgIAwMICAMDCAgDAwgIAwMICAMDCAgDAwYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgQEBAQEBAQEBAQEBAQEBAQEBAUFBQUFBQUFBQUFBQUFBQUJCQYGCQkGBgkJBgYMDAkJDAwJCQYGBgUGBAkJCQMDCQkDAwkJAwMJCQMDCQkDAwYGBgYJCgQGCQoEBgcHBAQHBwQEBwcEBAkKBAYJCgQGCQoEBgkKBAYJCgQGBgYCAgYGAgIGBgICBgYCAgYGAwMGBgYGBgYDAwYGBgYGBgMEBAQEBQUFBQUFBQUFBQUFBQUFBQcGBwYDAwUFBwYDAwcGCQkJCQIAAAAAAAAADAwAAAAAAAACBAAABwAAAAkJBgYMDAkJBgUGBAUEAwMEAwMDAwMJCgMABAYGBwYHBgcGBwYHBgcGBwYGBgcMGAkAAwMDBAcHCwgCBAQFBwMEAwMHBwcHBwcHBwcHAwMHBwcHDAcICQkIBwkJAwYIBwkJCQgJCQgHCQcLBwcHAwMDBQcEBwcGBwcDBwcDAwYDCwcHBwcEBwMHBQkFBQUEAwQHBwcJCAkJCQcHBwcHBwYHBwcHAwMDAwcHBwcHBwcHBwcHBQcHBwQGCAkJDAQEBwwJCQcHBwcHBgkKBwMEBAkLBwcDBwcHBwcHBwwHBwkMCwcMBAQDAwcGBQcCBwQEBgYHAwMECwcIBwgIAwMDAwkJCQkJCQMEBAQEBAQEBAQEBwMIBwcFAwkHBwUIBwcHBAQECgoKBwkHAwgHCQYJBgcHBAcHBwcJBwkIBwgHBwMHBAcECQcJBwkHCQQJBAgHBwMHBQkHCQcHBQcFBwkJBwcFBwUIBwYEDQwGDAYMBgYMCQcHBwcHCQgJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJBwwMDAwMBwcHDA0LCQkGCAcGBgkJBQcCBAsEBwQEBwQHBwkGCQYIBwgHCAcJBwkHCQcJBwkHAwMDAwMDAwMGAwgGBwcDCQcJBwkHCQcJBAgHBwMJBwkHCQcJBwsJBwUDBwcMCwkHAwsJCwkLCQcFAwQHBwoKCgoEBAQEBwkKBAkJCQMHCAcIBwkDCAcJCQgJCQgHBwcHCQkDBwcFBwMHBwUFBwcDBwUHBQUHBwYHBgkJAwcHBwkICgcJCAMDBg0MCgcICQcICAcICAsHCQkHCAkJCQkICQcICQcJCAsLCgoICQwJBwcGBAcHCQYHBwYHCQcHBwcGBQUJBQcGCQkICQcGCQcHBwQGBwMDAwsKBwYFBwYFDA0IBAQEBAQEBAQEBAQEBAUEAwQEAwcHBQYHAwUHBwMGBgYHBwMEBwYHBwYGBwYICAYGBgMFCQMGBgYGBggICAgHBwcHBQYHAwUHAwYGBgcEBwcHBgcGCAgDBwYHBwAAAAAEBAQFAgIDAgIDAgMCBgYGBgYGBgYGBgYEBgkJAwkGBgYJCQkJCQMJCQkJCQkJCQgJCQkJCQMDCQkJCQcGBgYGBgoLBQYKCwUGCAcJCQkJCQkJCQkJCQkJCQkJAwMDAwMJCQAAAAAAAAAAAAAAAAAAAAAHDAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkEBAkHBQIDAgMFBQIDCAcDAwIDCQkDAwMFCQkDAwkJAwMHBgYGBwYGBgcGBgYEBAQEBgYGBgoKBgYKCgYGDQ0KCg0NCgoHBwcHBwcHBwcFBgUHBQYFCQkDAwcHAwMHBwUFBgYCAgQEBQUGBgMDAwUFBQUFCAcIBwMDBwcHBwcHBwcJCQICCQkJAgMJCQMDCQkJAwMDAwMDCQICCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJBAQECQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJAgwYCggKCAAAAAAAAAAAAAAAAAAAAAAGCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwgHCAcIBwgHCAcIBwgHCAcDAwMDCQcJBwkHCQcJBwkHCQcKCAoICggKCAoICQcJBwoICggKCAoICggHBQcFBwUHBwMDCQcJBwkHCQcJBwkHAAAAAAcECwgHBQcFCQcHBgcGCAYIBggHCQcJBwkDAwMHAwMDAwMDAwICBAQCAgIAAgMCAwIDAgMFBQUFCAcJCQMDCQkDAwkJAwMJCQMDCQkDAwkJAwMJCQMDBwYGBgcGBgYHBgYGBwYGBgcGBgYHBgYGBAQEBAQEBAQEBAQEBAQEBAQEBgYGBgYGBgYGBgYGBgYGBgoKBgYKCgYGCgoGBg0NCgoNDQoKBwcHBQYFCQkJAwMJCQMDCQkDAwkJAwMJCQMDBwcHBwoLBQYKCwUGBwcFBQcHBQUHBwUFCgsFBgoLBQYKCwUGCgsFBgoLBQYGBgICBgYCAgYGAgIGBgICBgYDAwYGBgYGBgMDBgYHBgYGAwUFBQUFBQUFBQUFBQUFBQUFBQUFCAcIBwMDBQUIBwMDCAcKCgoKAgAAAAAAAAANDQAAAAAAAAIEAAAHAAAACgoGBg0NCgoHBQYFBQQDAwQDAwMDAwoLAwAEBgcHBwcHBwcHBwcHBwcHBgYHBw0aCgAEBAMFBwcMCQIEBAUIBAQEBAcHBwcHBwcHBwcEBAgICAcNCQkJCQkICgkDBgkHCwkKCQoJCQcJCQ0HCQcEBAQFBwQHBwcHBwMHBwMDBwMLBwcHBwQHBAcFCQcHBwQDBAgJCQkJCQoJBwcHBwcHBwcHBwcDAwMDBwcHBwcHBwcHBwcFBwcHBQcJCgoNBAQHDQoJBwcHBwcGCQsHAwQFCgwHCAMICAcHCAcHDQkJCg0MBw0EBAMDBwYHCQIHBAQHBwcEAwQOCQkJCQkDAwMDCgoKCQkJAwQEBAQEBAQEBAQHAwkHBwcDCQcJBwkHCAgEBAQLCwsHCgcDCQcJBwkHBwcECQcJBwkICQkHCQcHAwcEBwQJBwkHCgcJBAkECQcHAwcFCQcJBwcHBwcHCgkIBwYIBQgHBwUPDQcNBw0HBw0JCAgICAgJCAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkIDQ0NDQ0ICAgNDgwKCgcJCAcHCgoGCAIFDAUIBQUIBQkHCQcJBwkHCQcJBwoHCgcKBwkHCQcDAwMDAwMDAwYDCQcHBwMJBwkHCgcKBwkECQcIBAkHCQcJBwkHDQkJBwMJBw0MCgcDDQkNCQ0JCQcDBAcICwsLCwQEBAQJCgsFCgsKAwkJCQkHCQMJCQsJCAoJCQgHCQcJCgMJCAYHAwcHBwYHBwMHBwcFBgcHBgcHCQkDBwcHCQkLBwkJAwMGDg0LCAgJCQkJBwkJCwgJCQgJCwkKCQkJBwgLBwoJCwsKCwgJDQkHBwcFCAcJBgcHBgcJBwcHBwcFBwkHBwcLDAgJBwcKBwcHBQcHAwMDDAsHBgcHBgUNDgkEBAQEBAQEBAQEBAQEBQQDBAQEBwcFBwgDBQgIAwcGBggIAwUHBwcHBgYHBwkIBgYGAwUJAwcHBgYHCQkJCQcHBwcFBwgEBQgEBwYGCAUHBwcGBwcJCAMHBgcHAAAAAAQEBQUDAwMDAwMDAwIHBwcHBwcHBwcHBwQHCgoECgcHBwoKCgoKAwoKCgoKCgoKCAoKCgkJAwMKCgoKBwcHBwYGCwwFBwsMBQcICAoKCgoKCgoKCgoKCgoKCgoDAwMDAwoKAAAAAAAAAAAAAAAAAAAAAAcNCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgQECggFAwMDAwYGAwMICAMDAwMJCQMDBAUJCQMDCQkDAwcHBwcHBwcHBwcHBwQEBAQGBgYGCwsHBwsLBwcODgsLDg4LCwgICAgICAgIBwYHBQcGBwUKCgMDCAgDAwgIBQUHBwMDBAQFBQcHAwMEBQYFBgYICAgIAwMHCAcIBwgHCAoKAwMKCgoCAwoKAwMKCgoDAwMDAwMKAwMKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoEBAQKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCDRoLCQsJAAAAAAAAAAAAAAAAAAAAAAcLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCQcJBwkHCQcJBwkHCQcJBwkHCQcJBwkHCQcJBwkHCQcJBwkHCQcJBwMDAwMKBwoHCgcKBwoHCgcKBwsJCwkLCQsJCwkJBwkHCwkLCQsJCwkLCQkHCQcJBwkHAwMKBwkHCQcJBwkHCQcAAAAABwUMCQgGCAYJBwcHBwcJBwkHCQcKBwoHCQMDAwgDAwMDAwMEAwMEBAMDAwADAwMDAwMDAwYGBgYICAkJAwMJCQMDCQkDAwkJAwMJCQMDCQkDAwkJAwMHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcEBAQEBAQEBAQEBAQEBAQEBAQGBgYGBgYGBgYGBgYGBgYGCwsHBwsLBwcLCwcHDg4LCw4OCwsICAcGBwUKCgoDAwoKAwMKCgMDCgoDAwoKAwMICAgICwwFBwsMBQcICAUFCAgFBQgIBQULDAUHCwwFBwsMBQcLDAUHCwwFBwcHAwMHBwMDBwcDAwcHAwMHBwMDBwcHBwcHAwMHBwcHBwcEBQUFBQYGBgYGBgYGBgYGBgYGBgYICAgIAwMGBggIAwMICAsLCwsDAAAAAAAAAA8OAAAAAAAAAwUAAAgAAAALCwcHDg4LCwcGBwUFBAQDBAMDAwMDCwwDAAQGBwgHCAcIBwgHCAcIBwgHBwcIDx4LAAQEBQUICA0KAwUFBgkEBQQECAgICAgICAgICAQECQkJCA8JCgsLCgkLCgMHCggLCgwKDAsKCQoJDwkJCAQEBAUIBQgICAgIBAgIAwMHAw0ICAgIBQgECAcLBwcIBQMFCQkJCwoKDAoICAgICAgICAgICAMDAwMICAgICAgICAgICAYICAgFCAkLCw8FBQgPDAsICAgICAcLDAgEBQUMDQgJBQkJCAgJCAgPCQkMDw4IDwUFAwMIBwcJAwgFBQgICAQDBQ4JCgkKCgMDAwMMDAwKCgoDBQQFBQUFBQUFBQgDCggICAMLCAkHCggJCQUFBQ0NDQgLCAMKCAsICwgICAUJCAkICwkLCggKCAgDCAQIBQoICggMCAsFCwUKCAkECQYKCAoICAgICAgMCwkIBwkFCggIBREPCA8IDwgIDwsJCQkJCQsJCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwkPDw8PDwkJCQ8QDgsLCAoJCAgLCwcJAwUNBQkFBQkFCQgLCAsICggKCAoICwgLCAsICggKCAMDAwMDAwMDBwMKBwgIAwoICwgMCAwICwUKCAkECggKCAoICwgPCwkHAwkIDw0MCAMPCw8LDwsJBwMFCAkNDQ0NBQUFBQkMDQYMDAsDCQoKCggKAwoLCwoKDAoKCQkJCQsLAwkJBwgDCAkHBwgIAwgHCAcHCAgHCAgLDAMICAgMCg0ICwoDAwcQDw0JCgsJCgoICgoOCQsLCQoLCgwKCgsJCgsJCwkODwwNCgsPCwgJCAUJCAkHCAgHCAoICAgICAcHCwcJCAsLCQsICAsICAgFCAgDAwMODAgHBwgHBg8QCgUFBQUFBQUFBQUFBQUGBQMFBQQICAYICQMGCQkDCAcHCQkDBQkICQgHBwgICgoGBgYEBgwDCAgHBwgKCgoKCAgICAYICQQGCQQIBwcJBQkJCAcICAoKAwgHCAkAAAAABQUFBgMDBAMDAwMDAggICAgICAgICAgIBQgLCwQLCAgICwsLCwsDCwsLCwsLCwsKCwsLCwsEBAsLCwsICAgIBwcMDgYIDA4GCAoJCwsLCwsLCwsLCwsLCwsLCwMDAwMDCwsAAAAAAAAAAAAAAAAAAAAACA8LCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLBQULCQYDAwMDBgYDAwoJBAQDAwsLBAQEBgsLBAQLCwQECAgICAgICAgICAgIBQUFBQcHBwcMDAgIDAwICBAQDQ0QEA0NCQkJCQkJCQkIBwgGCAcIBgwMBAQJCQQECQkGBggIAwMFBQYGCAgEBAQGBwYGBgoJCgkEBAgJCAkICQgJCwsDAwsLCwIDCwsDBAsLCwMDAwMDAwsDAwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwUFBQsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwIPHg0KDQoAAAAAAAAAAAAAAAAAAAAACA0NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMJCAkICQgJCAkICQgJCAkICQgJCAkICQgKCAoICggKCAoICggKCAoIAwMDAwwIDAgMCAwIDAgMCAwIDQoNCg0KDQoNCgoICggNCg0KDQoNCg0KCQcJBwkHCQgDAwwICggKCAoICggKCAAAAAAIBQ4KCQcJBwsICAgICAoICggKCAsIDAgLBAQECQQEBAQEBAQDAwUFAwMDAAMDAwMDAwMDBgYGBgoJCwsEBAsLBAQLCwQECwsEBAsLBAQLCwQECwsEBAgICAgICAgICAgICAgICAgICAgICAgICAUFBQUFBQUFBQUFBQUFBQUFBQcHBwcHBwcHBwcHBwcHBwcMDAgIDAwICAwMCAgQEA0NEBANDQkJCAcIBgwMDAQEDAwEBAwMBAQMDAQEDAwEBAkJCQkMDgYIDA4GCAkJBgYJCQYGCQkGBgwOBggMDgYIDA4GCAwOBggMDgYICAgDAwgIAwMICAMDCAgDAwgIBAQICAgICAgEBAgICAgICAQGBgYGBgYGBgYGBgYGBgYGBgYGBgoJCgkEBAYGCgkEBAoJDAwMDAMAAAAAAAAAERAAAAAAAAADBgAACQAAAAwMCAgQEA0NCAcIBgYFBAQFBAQEBAQMDgMABQYICQgJCAkICQgJCAkICQgICAkQIAwABAQFBgkJDgsDBQUGCQQFBAQJCQkJCQkJCQkJBAQJCQkJEAsLDAwLCgwLAwgLCQ0LDAsMCwsJCwsPCwkJBAQEBwkFCQkICQkECQgEAwgDDQgJCQkFCAQIBwsHBwcFAwUJCwsMCwsMCwkJCQkJCQgJCQkJAwMDAwgJCQkJCQgICAgJBgkJCQYJCQwMEAUFCRAMCwkJCQkJCAsNCQQFBQwOCQoFCQkJCQkJCRALCwwRDwkQBQUEBAkIBwkDCQUFCAgJBAQFEQsLCwsLAwMDAwwMDAsLCwMFBAUFBQUFBQUFCQMLCAkHAwwJCQcLCQkJBQUFDQ0NCQwJAwsIDAgMCAkJBQsJCwkMCgwLCQsJCQMJBAkFCwgLCAwJCwULBQsICQQJBgsICwgJBwkHCQwLCQkHCgUKCQgGEhAIEAgQCAgQDAkKCQoKCwoLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsMChAQEBAQCgoKEBEPDAwJCwoICAwMBwoDBg4FCgYGCgYLCQwIDAgLCQsJCwkMCQwJDAkLCAsIAwMDAwMDAwQIAwsICAkDCwgMCQwJDAkLBQsICgQLCAsICwgMCA8LCQcDCwkQDgwJAw8LDwsPCwkHBAUJCg0NDQ0FBQUFCw0NBgwMDAMLCwsLCQsDCwsNCwoMCwsKCQkLCwwDCQkHCAMICQgHCAkDCAgJBwcJCQgICAsNAwgJCA0LDgkMCwMDCBEQDQkKDAsLCwkLCw4KDAwJCw0LDAsLDAkKCwsMCg0ODQ4LDBAMCQkJBgkJCgcICAcICwgJCAkIBwcNBwkICwsKDAkIDAkJCAYICAQDAw8NCAcHCAgHEBELBQUFBQUFBQUFBQUFBQYFAwUFBAkJBggKAwYKCQMIBwcKCgMGCQgJCQcICQgLCgYGBgQHDAMICAcHCQsLCwsJCQkJBggKBQcJBQgHBwoGCQkJCAkICwoDCQcJCQAAAAAFBQYHAwMEAwMDAwMDCAgICAgICAgICAgFCAwMBQwICAgMDAwMDAMMDAwMDAwMDAoMDAwLCwQEDAwMDAkICAgICA0PBggNDwYICgkMDAwMDAwMDAwMDAwMDAwMBAMDAwMMDAAAAAAAAAAAAAAAAAAAAAAJEAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwFBQwKBwMEAwQHBwMECgkEBAMECwsEBAUGCwsEBAsLBAQJCAgICQgICAkICAgFBQUFCAgICA0NCQkNDQkJEhIODhISDg4JCQkJCQkJCQkHCAYJBwgGDQ0EBAkJBAQKCgYGCAgDAwUFBgYICAQEBQYHBgcHCgkKCQQECQoJCgkKCQoMDAMDDAwMAwMMDAMEDAwMAwMDAwMEDAMDDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMBQUFDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAhAgDgsOCwAAAAAAAAAAAAAAAAAAAAAIDQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAsJCwkLCQsJCwkLCQsJCwkLCQsJCwkLCQsJCwkLCQsJCwkLCQsJCwkDBAMEDAkMCQwJDAkMCQwJDAkOCw4LDgsOCw4LCwgLCA4LDgsOCw4LDgsJBwkHCQcLCQMEDAkLCAsICwgLCAsIAAAAAAkGDwsJBwkHDAkJCAkICwgLCAsIDAkMCQsEBAQJBAQEBAQEBAMDBQUDAwMAAwQDBAMEAwQHBwcHCgkLCwQECwsEBAsLBAQLCwQECwsEBAsLBAQLCwQECQgICAkICAgJCAgICQgICAkICAgJCAgIBQUFBQUFBQUFBQUFBQUFBQUFCAgICAgICAgICAgICAgICA0NCQkNDQkJDQ0JCRISDg4SEg4OCQkJBwgGDQ0NBAQNDQQEDQ0EBA0NBAQNDQQECQkJCQ0PBggNDwYICgoGBgoKBgYKCgYGDQ8GCA0PBggNDwYIDQ8GCA0PBggICAMDCAgDAwgIAwMICAMDCAgEBAgICAgICAQECAgJCAgIBQYGBgYHBwcHBwcHBwcHBwcHBwcHCgkKCQQEBwcKCQQECgkNDQ0NAwAAAAAAAAASEQAAAAAAAAMGAAAKAAAADQ0JCRISDg4JBwgGBwUFBAUEBAQEBA0PAwAFBgkKCQoJCgkKCQoJCgkKCAgJChEiDQAFBQUGCQkPCwMGBgcKBQYFBQkJCQkJCQkJCQkFBQoKCgkRCwsMDAsKDAsFCQsJDQsMCwwLCwkLCxELCwkFBQUHCQYJCQkJCQUJCQQDCAMNCQkJCQYIBAkHCwcJCAYFBgoLCwwLCwwLCQkJCQkJCQkJCQkFBQUFCQkJCQkJCQkJCQkHCQkJBgkKDQ0RBgYJEQ0MCQkJCQkIDA4JBAUFDQ8JCgUKCgkJCwkJEQsLDBEQCREGBgQECQgJCwMJBgYJCQkFBAYRCwsLCwsFBQUFDAwMCwsLBQYEBgYGBgYGBgYJAwsICQgFDAkLCQsJCgoGBgYODg4JDAkFCwgMCQwJCgkGCwkLCQwKDAsJCwkJAwkECQYLCQsJDAkLBgsGCwgJBAkGCwkLCQkICQgJDA0KCQgLBgsJCQYTEQkRCREJCREMCgoKCgoMCwwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwKEREREREKCgoREhANDQkLCgkJDQ0ICgMGDwYKBgYKBgsJDAkMCQsJCwkLCQwJDAkMCQsJCwkFBQUFBQUFBAkDCwgICQMLCQwJDAkMCQsGCwgKBAsJCwkLCQwJEQsLCQQLCREPDQkEEQsRCxELCwkEBgkKDg4ODgYGBgYLDQ0GDQ4NAwsLCwsJCwULCw0LCwwLCwsJCwsNDQULCggJAwkKCQgJCQMICQkHCAkJCAkJCw0DCQkJDQsPCQwLBQUJEhEPCgsLCwsLCQwLDwoMDAoKDQsMCwsMCQsNCw0KDw8NDgoMEAwJCQkGCgkLCAkJBwoLCQkJCQkICQ0HCgkODgsMCQkNCQkJBgkIBAUDDw4JBwkJCAcREgwGBgYGBgYGBgYGBgYGBwYDBgYFCgkHCQoDBwoKAwkICAoKAwYKCQoJCAgJCQwLBwcHBAcMAwkJCAgJDAwMDAoKCgkHCQoFBwoFCQgICgYKCgkICQkMCwMJCAkKAAAAAAUFBgcEAwQDAwQDBAMJCQkJCQkJCQkJCQUJDQ0FDQkJCQ0NDQ0NBA0NDQ0NDQ0NCw0NDQwMBAQNDQ0NCgkJCQgIDhAHCQ4QBwkLCg0NDQ0NDQ0NDQ0NDQ0NDQ0EBAQEBA0NAAAAAAAAAAAAAAAAAAAAAAkRDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQUFDQoHBAQEBAcHBAQLCgQEBAQMDAQEBQYMDAQEDAwEBAoJCQkKCQkJCgkJCQYGBgYICAgIDg4JCQ4OCQkTEw4OExMODgoKCgoKCgoKCQgJBwkICQcNDQUECgoFBAoKBwcJCQQEBgYHBwkJBAQFBggHBwcLCgsKBAQJCgkKCQoJCg0NAwMNDQ0DBA0NBAQNDQ0EBAQEBAQNAwMNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0FBQUNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0CESIPCw8LAAAAAAAAAAAAAAAAAAAAAAkODgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECwkLCQsJCwkLCQsJCwkLCQsJCwkLCQsJCwkLCQsJCwkLCQsJCwkLCQUEBQQMCQwJDAkMCQwJDAkMCQ8LDwsPCw8LDwsLCQsJDwsPCw8LDwsPCwsJCwkLCQsJBQQMCQsJCwkLCQsJCwkAAAAACQYQCwoHCgcMCQkJCQkLCQsJCwkNCQ0JDAQFBAoEBAQEBAQFBAQGBgQEBAAEBAQEBAQEBAcHBwcLCgwMBAQMDAQEDAwEBAwMBAQMDAQEDAwEBAwMBAQKCQkJCgkJCQoJCQkKCQkJCgkJCQoJCQkGBgYGBgYGBgYGBgYGBgYGBgYICAgICAgICAgICAgICAgIDg4JCQ4OCQkODgkJExMODhMTDg4KCgkICQcNDQ0FBA0NBQQNDQUEDQ0FBA0NBQQKCgoKDhAHCQ4QBwkKCgcHCgoHBwoKBwcOEAcJDhAHCQ4QBwkOEAcJDhAHCQkJBAQJCQQECQkEBAkJBAQJCQQECQkJCQkJBAQJCQoJCQkFBgcHBwcHBwcHBwcHBwcHBwcHBwcLCgsKBAQHBwsKBAQLCg4ODg4EAAAAAAAAABMSAAAAAAAAAwYAAAoAAAAODgkJExMODgkICQcHBgUEBQQEBAQEDhADAAYHCQoJCgkKCQoJCgkKCQoJCQkKEyYOAAUFBgcLCxENBAYGBwsFBgUFCwsLCwsLCwsLCwUFCwsLCxMNDQ4ODQwPDQYKDQsPDQ8NDw4NDA0NEw0MDAUFBQcLBgoLCgsLBgsKBAQJBBAKCwsLBgoFCgkNCQkJBgYGCw0NDg0NDw0KCgoKCgoKCwsLCwYGBgYKCwsLCwsKCgoKCwgLCwsHCgwODhMGBgoTDw4KCgoLCwkOEAoEBwcPEQsMBgsLCwoMCwsTDQ0PExILEwcHBAQKCQkMAwsGBgoKCwUEBxENDQ0NDQYGBgYPDw8NDQ0GBgUGBgYGBgYGBgsEDQoMCQYOCwwJDQsLCwYGBhAQEAsPCwYNCg4KDgoLCwYNCg0KDgwODQsNCwsECwYLBg0KDQoPCw4GDgYNCgwGDAcNCg0KDAkMCQoPDgsLCAwIDAsKBxUTChMKEwoKEw4LCwsLCw0MDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDgsTExMTEwsLCxMUEQ4OCgwLCgoODggLBAcRBgsHBwsHDQoOCg4KDQsNCw0LDwsPCw8LDQoNCgYGBgYGBgYECgQNCQoLBA0KDgsPCw8LDgYNCgwFDQoNCg0KDQoTDQwJBA0KExEPCwYTDRMNEw0MCQQGCwsQEBAQBgYGBg0PDwcPEA8EDQ0NDQwNBg0NDw0MDw0NDAwMDQ4OBgwLCAoECgsKCAoLBAoJCwkJCwsJCgoOEAQKCwoQDRAKDg0GBgoUEw8LDA4NDA0KDQ0SCw4OCwwPDQ8NDQ4MDA4NDg0REQ8RDQ4TDgoLCgcLCw4JCgoICg0KCwkLCggJEAkLCg4ODA4LCg4KCwoHCgoEBgQRDwoICQoJCBMUDQYGBgYGBgYGBgYGBgYHBgQGBgULCggKCwQHCwsECgkJCwsEBwsKCwoJCQoKDQwJCQkECBAECgoJCQoNDQ0NCwsLCggKCwUICwUKCQkLBwsLCgkKCg0MBAoJCgsAAAAABgYHCAQEBQQEBAQEAwoKCgoKCgoKCgoKBgoODgUOCgoKDg4ODg4EDg4ODg4ODg4MDg4ODg4FBQ4ODg4LCgoKCQkPEgcKDxIHCgwLDg4ODg4ODg4ODg4ODg4ODgQEBAQEDg4AAAAAAAAAAAAAAAAAAAAACxMODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OBgYODAgEBAQECAgEBAwLBQUEBA4OBQUFBw4OBQUODgUFCwoKCgsKCgoLCgoKBgYGBgkJCQkQEAoKEBAKChUVEBAVFRAQCwsLCwsLCwsKCQoHCgkKBw8PBQULCwUFCwsHBwoKBAQGBgcHCgoFBQUHCQcICAwLDAsFBQoLCgsKCwoLDg4EBA4ODgMEDg4EBQ4ODgQEBAQEBA4EBA4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODgYGBg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODgITJhAMEA0AAAAAAAAAAAAAAAAAAAAAChAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCw0LDQsNCw0LDQsNCw0LBgQGBA8LDwsPCw8LDwsPCw8LEAwQDBAMEAwQDA0KDQoQDRANEA0QDRANDAkMCQwJDQoGBA8LDQoNCg0KDQoNCgAAAAAKBxINCwgLCA4LCwoLCg0KDQoNCg4LDwsOBQUFCwUFBQUFBQUEBAYGBAQEAAQEBAQEBAQECAgICAwLDg4FBQ4OBQUODgUFDg4FBQ4OBQUODgUFDg4FBQsKCgoLCgoKCwoKCgsKCgoLCgoKCwoKCgYGBgYGBgYGBgYGBgYGBgYGBgkJCQkJCQkJCQkJCQkJCQkQEAoKEBAKChAQCgoVFRAQFRUQEAsLCgkKBw8PDwUFDw8FBQ8PBQUPDwUFDw8FBQsLCwsPEgcKDxIHCgsLBwcLCwcHCwsHBw8SBwoPEgcKDxIHCg8SBwoPEgcKCgoEBAoKBAQKCgQECgoEBAoKBQUKCgoKCgoFBQoKCwoKCgUHBwcHCAgICAgICAgICAgICAgICAwLDAsFBQgIDAsFBQwLDw8PDwQAAAAAAAAAFRUAAAAAAAAEBwAACwAAABAQCgoVFRAQCgkKBwgGBQUGBQUFBQUPEgQABwkKCwoLCgsKCwoLCgsKCwoKCgsVKhAABgYGBwwMEw4EBwcIDAYHBgYMDAwMDAwMDAwMBgYMDAwMFQ0ODw8ODRAOBgsODBEOEA4QDw4MDg0VDg4NBgYGCAwHDAsLCwwGCwsFBAoEEAsMCwsHCwYLCw8KCwkHBgcMDQ0PDg4QDgwMDAwMDAsMDAwMBgYGBgsMDAwMDAsLCwsMCAwMDAcLDQ8PFQcHDBUQDwwMDAwLCg8RDAYHCBATDA0GDAwMDA0MDBUNDRAVFAwVBwcFBQwKCw4EDAcHCwsMBgUHFQ0ODQ4OBgYGBhAQEA4ODgYHBwcHBwcHBwcHDAQOCw0JBg8MDgsODAwMBwcHEhISDBALBg4LDwsPCwwMBw0MDQwPDQ8ODA4MDAQMBgwHDgsOCxAMDwcPBw4LDAYMCA4LDgsNCQ0JDBAQDAwJDQgODAsIFxULFQsVCwsVDwwNDA0NDw0PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDRUVFRUVDQ0NFRYTEBALDgwLCxAPCQ0EBxMHDQcHDQcNDA8LDwsODA4MDgwQCxALEAwOCw4LBgYGBgYGBgULBA4KCgwEDgsPDBAMEAwPBw4LDQYOCw4LDgsOCxUPDgsFDQwVExAMBhUPFQ8VDw4LBQcMDRISEhIHBwcHDRARCBAREAQNDg4ODQ4GDg4RDg4QDg4NDA4OEhAGDgwJCwQKDAoJCwwECgsLCwkMDAoKCw4QBAoMChAOEgsPDgYGCxYVEgwNDw0ODgsODhMNDw8MDhEOEA4ODwwNEA4QDhIUERMODxUPDAwLCAwMDgoLCwkLDQsMCgsLCgsRCgwLEBANDwsLEAsMDAgLCwUGBBMRDAkLCwoJFRcOBwcHBwcHBwcHBwcHBwgHBgcHBgwLCAsNBggNDAYLCgoNDQYHDAsMCwoKDAsPDgsLCwUJEgYLCwoKCw8PDw8MDAwLCAsNBgkMBgsKCg0HDAwLCgwLDw4GCwoLDAAAAAAHBwcJBAQFBAQEBAQDCwsLCwsLCwsLCwsHCxAQBhALCwsQEBAQEAQQEBAQEBAQEA0QEBAPDwUFEBAQEAwLCwsKChEUCAsRFAgLDQwQEBAQEBAQEBAQEBAQEBAQBQQEBAQQEAAAAAAAAAAAAAAAAAAAAAAMFRAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAHBxANCQQFBAUJCQQFDQwFBQQFDw8FBQYIDw8FBQ8PBQUMCwsLDAsLCwwLCwsHBwcHCgoKChERCwsREQsLFxcSEhcXEhIMDAwMDAwMDAsJCwgLCQsIEREGBgwMBgYNDQgICwsEBAcHCAgLCwUFBggJCAkJDQwNDAUFCw0LDQsNCw0QEAQEEBAQAwQQEAQFEBAQBAQEBAQFEAQEEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBwcHEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAxUqEg4SDgAAAAAAAAAAAAAAAAAAAAALEhIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQ0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA4MDgwODA4MDgwODA4MDgwGBQYFEAwQDBAMEAwQDBAMEAwSDhIOEg4SDhIODgsOCxIOEg4SDhIOEg4OCw4LDgsNDAYFEAwOCw4LDgsOCw4LAAAAAAsIEw4MCQwJDwwMCwwLDgsOCw4LEAwQDA8FBgYMBQUFBQUFBgQEBwcEBAQABAUEBQQFBAUJCQkJDQwPDwUFDw8FBQ8PBQUPDwUFDw8FBQ8PBQUPDwUFDAsLCwwLCwsMCwsLDAsLCwwLCwsMCwsLBwcHBwcHBwcHBwcHBwcHBwcHCgoKCgoKCgoKCgoKCgoKChERCwsREQsLERELCxcXEhIXFxISDAwLCQsIERERBgYREQYGEREGBhERBgYREQYGDAwMDBEUCAsRFAgLDQ0ICA0NCAgNDQgIERQICxEUCAsRFAgLERQICxEUCAsLCwQECwsEBAsLBAQLCwQECwsFBQsLCwsLCwUFCwsMCwsLBggICAgJCQkJCQkJCQkJCQkJCQkJDQwNDAUFCQkNDAUFDQwRERERBAAAAAAAAAAYFwAAAAAAAAQIAAANAAAAERELCxcXEhILCQsICQcGBQcFBQUFBREUBgAHCwsNCw0LDQsNCw0LDQsNCwsLDRgwEgAHBwgJDQ0VEAUICAkOBwgHBw0NDQ0NDQ0NDQ0HBw4ODg0YDxARERAPExEGDBANExETEBMREA4RDxcPEA8HBwcMDQgNDgwODQcODgUGDAYUDg0ODggMBw4LEQsMDAgGCA4PDxEQERMRDQ0NDQ0NDA0NDQ0GBgYGDg0NDQ0NDg4ODg0KDQ0NCA0PEhIYCAgNGBMRDQ0NDQ4MERQNBgkJEhUPDwgODQ0NDw0NGA8PExgXDRgICAUFDQwMEAQNCAgMDA0HBQgaDxAPEBAGBgYGExMTERERBggICAgICAgICAgNBhAMDwwGEQ0QDBANDg4ICAgUFBQNEw4GEAwRDBEMDQ0IDw0PDREPERANEA0NBg0HDQgRDhEOEw0RCBEIEAwOBw4JEQ4RDg8MDwwNExIODQsPCRANDAkaGAwYDBgMDBgRDg8ODw8RDxERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERIPGBgYGBgPDw8ZGRYSEg0QDgwMEhILDwUJFQgPCQkPCQ8NEQwRDBANEA0QDRMOEw4TDREOEQ4GBgYGBgYGBQwGEAwMDQYRDhENEw0TDREIEAwPBxEOEQ4RDhEOFxEQDAUPDRgVEw8GFxEXERcREAwFCA0OFBQUFAgICAgPExQJExQSBg8QEBAPEQYQEBMREBMREA8OEA8TEgYQDgsOBg4OCwsODQYMDA4LCw0ODA4NEhIGDg0OEhAVDREQBgYMGRgWDg8RDxAQDRAQFg8REQ4QExETERARDg8SDxIQFhcTFRARGBENDg0JDg0QCw0NCw4RDQ0NDgwLDBQLDg0TFA8RDQwSDQ0OCQwMBQYGFhQOCwwNDAoYGhEICAgICAgICAgICAgICQgGCAgHDg0KDA4GCQ4OBgwLCw4OBggODQ4NCwsNDBEPDAwMBgoVBgwMCwsNEREREQ4ODg0KDA4HCg4HDAsLDggODg0LDQwRDwYNCw0OAAAAAAgICQoFBQYFBQUFBQQNDQ0NDQ0NDQ0NDQgNEhIHEg0NDRISEhISBRISEhISEhISDxISEhERBgYSEhISDg0NDQwMExYJDBMWCQwPDhISEhISEhISEhISEhISEhIFBQUFBRISAAAAAAAAAAAAAAAAAAAAAA0YEhISEhISEhISEhISEhISEhISEhISEhISEhISEggIEg8KBQYFBgoKBQYPDgYGBQYREQYGBwkREQYGEREGBg4NDQ0ODQ0NDg0NDQgICAgMDAwMFBQNDRQUDQ0aGhQUGhoUFA4ODg4ODg4ODQsNCQ0LDQkTEwYGDg4GBg4OCQkMDAUFCAgJCQ0NBgYHCQsJCgoPDg8OBgYNDg0ODQ4NDhISBQUSEhIEBRISBQYSEhIFBQUFBQUSBQUSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIICAgSEhISEhISEhISEhISEhISEhISEhISEhIDGDAVEBUQAAAAAAAAAAAAAAAAAAAAAAwUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFDw0PDQ8NDw0PDQ8NDw0PDQ8NDw0PDQ8NEA0QDRANEA0QDRANEA0QDQYFBgUTDRMNEw0TDRMNEw0TDRUQFRAVEBUQFRARDhEOFRAVEBUQFRAVEBAMEAwQDA8NBgUTDREOEQ4RDhEOEQ4AAAAADQkWEA4LDgsRDQ0MDQwQDBANEA4SDRMNEQYGBg4GBgYGBgYGBQUICAUFBQAFBgUGBQYFBgoKCgoPDhERBgYREQYGEREGBhERBgYREQYGEREGBhERBgYODQ0NDg0NDQ4NDQ0ODQ0NDg0NDQ4NDQ0ICAgICAgICAgICAgICAgICAgMDAwMDAwMDAwMDAwMDAwMFBQNDRQUDQ0UFA0NGhoUFBoaFBQODg0LDQkTExMGBhMTBgYTEwYGExMGBhMTBgYODg4OExYJDBMWCQwODgkJDg4JCQ4OCQkTFgkMExYJDBMWCQwTFgkMExYJDAwMBQUMDAUFDAwFBQwMBQUNDQYGDQ0NDQ0NBgYNDQ4NDQ0HCQkJCQoKCgoKCgoKCgoKCgoKCgoPDg8OBgYKCg8OBgYPDhMTExMFAAAAAAAAABsaAAAAAAAABQkAAA4AAAAUFA0NGhoUFA0LDQkKCAcGCAYGBgYGExYGAAgMDQ4NDg0ODQ4NDg0ODQ4NDQ0OGzYUAAgICAoPDxgSBQkJCxAICQgIDw8PDw8PDw8PDwgIEBAQDxsSEhQUEhEVEwgNEg8XExURFRQSEBMRHBESEQgICAwPCQ8PDg8PBw8PBgYOBhYPDw8PCQ4IDw0TDA4NCQYJEBISFBITFRMPDw8PDw8ODw8PDwYGBgYPDw8PDw8PDw8PDwsPDw8JDxEUFBsJCQ8bFRMPDw8PEA0TFg8HCgoVGBERCBAPDw8RDw8bEhIVGxkPGwkJBgYPDQ4SBQ8JCQ4ODwgGCR0SEhISEggICAgVFRUTExMGCQgJCQkJCQkJCQ8GEg4RDQYUDxIOEg8Q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AJ0AqQCkABAAigEAAIMAkwDwAPEAjQCXAIgAwgDcAO8AngCqAPMA8gD0AKIArADIAMYArQBiAGMAkABkAMoAZQDHAMkAzgDLAMwAzQDnAGYA0QDPANAArgBnAO4AkQDUANIA0wBoAOkA6wCJAGoAaQBrAG0AbABuAKAAbwBxAHAAcgBzAHUAdAB2AHcA6AB4AHoAeQB7AH0AfAC3AKEAfwB+AIAAgQDqAOwAuQGWAZcBAgEDAQQBBQD7APwBmAGZAZoBmwD9AP4BBgEHAQgA/wGcAZ0BngGfAaABoQEJAQoBCwEMAaIBowD2APcBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswD4ANUBigGLAbQBtQG2AbcBuAENAQ4BuQG6AQ8BEAERARIA4ADhARMBFAG7AbwBFQEWAYwBvQG+Ab8BwAHBAcIBFwEYAK8AsAEZARoBwwHEARsBHAEdAR4BxQHGAPkA+gDiAOMBHwEgASEBIgHHAcgByQHKAcsBzAHNAc4BIwEkASUBJgHPAdAB0QHSAdMB1AC6AScBKAEpASoA5ADlAdUA1gDfANkA2gDbAN4A1wDdAe8B8AHxAdwB8gHzAfQB9gH3AfgB+QH6ASsB+wH8Af0B/gEsAf8CAAIBAgICAwIEAgUCBgIHAggCCQIKAS0CCwIMAg0CDgIPAhACEQISAhMCFAEuAhUCFgEvATACFwIYAhkCGgIbAhwCHQIeAh8CIAKMAiECIgExATICIwEzAiQCJQImAicCKAIpAioCKwKIAokFEAURAo0CjgKPApACkQKSApMClAKVApYClgKXApgCmQKaApsCnAKdAp4CnwLvA4EDgwOFA4cDiQONA48DkwOVA5kDnQOhA6UDqQOrA60DrwOxA7UDuQO9A8EDxQPJA80C8APRA9UD2QPdA+ED5QPpA+0D7wPxAvEC8gLzAvQC9QL2AvcC+AU4BTkFOgL5AvoC+wL8Av0C/gL/AwADAQMCAwMDBALsAwUFKAUsBTsFPAU+BUAFOQVCBUQFRgVIBUoFTgVSBVYFWgMfBV4FYgVmBWoFbgVyBXYDJwV6BX4FgAWCBYQFhgWIBYoFjAWOBZAFkgWUBZYFmAWaBZwDKwWeBaAFpAWoBawFsAW0BbYFugW7Bb8FwwXHBcsFzwXRAy0F0wXXBdsF3wXjAzEF5wXrBe8F8wX3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AgICAwIEAgUCBgIHAggCCQIKAS0CCwIMAg0CDgIPAhACEQISAhMCFAEuAhUCFgEvATACFwIYAhkCGgIbAhwCHQIeAh8CIAKMAiECIgExATICIwEzAiQCJQImAicCKAIpAioCKwKIAokFEAURAo0CjgKPApACkQKSApMClAKVApYClgKXApgCmQKaApsCnAKdAp4CnwLvA4EDgwOFA4cDiQONA48DkwOVA5kDnQOhA6UDqQOrA60DrwOxA7UDuQO9A8EDxQPJA80C8APRA9UD2QPdA+ED5QPpA+0D7wPxAvEC8gLzAvQC9QL2AvcC+AU4BTkFOgL5AvoC+wL8Av0C/gL/AwADAQMCAwMDBALsAwUFKAUsBTsFPAU+BUAFOQVCBUQFRgVIBUoFTgVSBVYFWgMfBV4FYgVmBWoFbgVyBXYDJwV6BX4FgAWCBYQFhgWIBYoFjAWOBZAFkgWUBZYFmAWaBZwDKwWeBaAFpAWoBawFsAW0BbYFugW7Bb8FwwXHBcsFzwXRAy0F0wXXBdsF3wXjAzEF5wXrBe8F8wX3BfsF/wYDBgcGCwYPBhEGEwYXA+sGGQYdBh8GIAYhBiIGJAYmBigGKgYsBi4GMAM1BjIGNAY4BjoGPgZABkIGRAMIBkUGRgZHBkgGSQZKBksGTAZNBk4GTwZQBlEGUgZTBlQGVQZWBlcGWAZZBloGTgZbAvkC+gL7AvwDCgMLAwwDAAMBAwIGXAZgBmQGaAZpBKQEpQSmBKcEqASpBKoEqwSsBK0ErgSvBLAEsQSyBLMEtAS1BLYEtwS4BLkEugS7BLwEvQS+BL8EwATBBMIEwwTEBMUExgTHBMgEyQTKBMsEzATNBM4EzwTQBNEE0gTTBNQE1QTWBNcE2ATZBNoE2wTcBN0E3gTfBOAE4QTiBOME5ATlBOYE5wToBOkE6gTrBOwE7QTuBO8E8ATxBPIE8wT0BPUB4wHkBPYE9wT4BPkE+gT7ALEAsgKKATQAtQC2AMMB5QCzALQAxACCAMEAhwNOA08DUgNQA1EDVQNWA1cDWANTA1QA9QHnAsAEfgC8AJkA7QDCAKUAkgE/AI8BQQF2AZEBkgGTAXcAuAF8Ae0B7gRxBHIEgQRzA1kDWgNbA1wDXQSEBHUEdwSFBHYEhgR5BIcEiASJBIoEiwSMBHgElASNBI4EjwSQBJEElgSaBJsEnASdBJ4ElwSYBJkEfQSfBKAEoQSiBKMGdAZ1BncCxgLeAt8C4ALhAuIC4wLkAuUC5gLnBTwFPQVSBVMFVAVVAx8DIAMhAyIFYgVjBWQFZQVOBU8FUAVRBV4FXwVgBWEFSgVLBUwFTQXDBcQFxQXGBcsFzAXNBc4FcgVzBXQFdQVuBW8FcAVxAycDKAMpAyoFegV7BXwFfQWIBYkFhgWHBYoFiwV+BX8DKwMsBZAFkQMtAy4DLwMwAzEDMgMzAzQF8wX0BfUF9gXrBewF7QXuBg8GEAYRBhIFTAVNBh0GHgZqBh8GawZsA+sD6gPrA+wGQAZBBkIGQwXfBeAF4QXiBigGKQYmBicGKgYrBUYGMAYxBiQGJQYsBi0GOgY7BjwGPQM1AzYD8wP0AABAQ1VUQUA/Pj08Ozo5ODc1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAsRSNGYCCwJmCwBCYjSEgtLEUjRiNhILAmYbAEJiNISC0sRSNGYLAgYSCwRmCwBCYjSEgtLEUjRiNhsCBgILAmYbAgYbAEJiNISC0sRSNGYLBAYSCwZmCwBCYjSEgtLEUjRiNhsEBgILAmYbBAYbAEJiNISC0sARAgPAA8LSwgRSMgsM1EIyC4AVpRWCMgsI1EI1kgsO1RWCMgsE1EI1kgsJBRWCMgsA1EI1khIS0sICBFGGhEILABYCBFsEZ2aIpFYEQtLAGxCwpDI0NlCi0sALEKC0MjQwstLACwFyNwsQEXPgGwFyNwsQIXRTqxAgAIDS0sRbAaI0RFsBkjRC0sIEWwAyVFYWSwUFFYRUQbISFZLSywAUNjI2KwACNCsA8rLSwgRbAAQ2BELSwBsAZDsAdDZQotLCBpsEBhsACLILEswIqMuBAAYmArDGQjZGFcWLADYVktLEWwESuwFyNEsBd65BgtLEWwESuwFyNELSywEkNYh0WwESuwFyNEsBd65BsDikUYaSCwFyNEioqHILCgUViwESuwFyNEsBd65BshsBd65FlZGC0sLSywAiVGYIpGsEBhjEgtLEtTIFxYsAKFWViwAYVZLSwgsAMlRbAZI0RFsBojREVlI0UgsAMlYGogsAkjQiNoimpgYSCwGoqwAFJ5IbIaGkC5/+AAGkUgilRYIyGwPxsjWWFEHLEUAIpSebMZQCAZRSCKVFgjIbA/GyNZYUQtLLEQEUMjQwstLLEOD0MjQwstLLEMDUMjQwstLLEMDUMjQ2ULLSyxDg9DI0NlCy0ssRARQyNDZQstLEtSWEVEGyEhWS0sASCwAyUjSbBAYLAgYyCwAFJYI7ACJTgjsAIlZTgAimM4GyEhISEhWQEtLEuwZFFYRWmwCUNgihA6GyEhIVktLAGwBSUQIyCK9QCwAWAj7ewtLAGwBSUQIyCK9QCwAWEj7ewtLAGwBiUQ9QDt7C0sILABYAEQIDwAPC0sILABYQEQIDwAPC0ssCsrsCoqLSwAsAdDsAZDCy0sPrAqKi0sNS0sdrgCIyNwECC4AiNFILAAUFiwAWFZOi8YLSwhIQxkI2SLuEAAYi0sIbCAUVgMZCNki7ggAGIbsgBALytZsAJgLSwhsMBRWAxkI2SLuBVVYhuyAIAvK1mwAmAtLAxkI2SLuEAAYmAjIS0stAABAAAAFbAIJrAIJrAIJrAIJg8QFhNFaDqwARYtLLQAAQAAABWwCCawCCawCCawCCYPEBYTRWhlOrABFi0sS1MjS1FaWCBFimBEGyEhWS0sS1RYIEWKYEQbISFZLSxLUyNLUVpYOBshIVktLEtUWDgbISFZLSywE0NYAxsCWS0ssBNDWAIbA1ktLEtUsBJDXFpYOBshIVktLLASQ1xYDLAEJbAEJQYMZCNkYWS4BwhRWLAEJbAEJQEgRrAQYEggRrAQYEhZCiEhGyEhWS0ssBJDXFgMsAQlsAQlBgxkI2RhZLgHCFFYsAQlsAQlASBGuP/wYEggRrj/8GBIWQohIRshIVktLEtTI0tRWliwOisbISFZLSxLUyNLUVpYsDsrGyEhWS0sS1MjS1FasBJDXFpYOBshIVktLAyKA0tUsAQmAktUWoqKCrASQ1xaWDgbISFZLSxLUliwBCWwBCVJsAQlsAQlSWEgsABUWCEgQ7AAVViwAyWwAyW4/8A4uP/AOFkbsEBUWCBDsABUWLACJbj/wDhZGyBDsABUWLADJbADJbj/wDi4/8A4G7ADJbj/wDhZWVlZISEhIS0sRiNGYIqKRiMgRopgimG4/4BiIyAQI4q5AsICwopwRWAgsABQWLABYbj/uosbsEaMWbAQYGgBOi0ssQIAQrEjAYhRsUABiFNaWLkQAAAgiFRYsgIBAkNgQlmxJAGIUVi5IAAAQIhUWLICAgJDYEKxJAGIVFiyAiACQ2BCAEsBS1JYsgIIAkNgQlkbuUAAAICIVFiyAgQCQ2BCWblAAACAY7gBAIhUWLICCAJDYEJZuUAAAQBjuAIAiFRYsgIQAkNgQlm5QAACAGO4BACIVFiyAkACQ2BCWVlZWVktLLACQ1RYS1MjS1FaWDgbISFZGyEhISFZLQAAsVQPQSIDFwDvAxcA/wMXAAMAHwMXAC8DFwBPAxcAXwMXAI8DFwCfAxcABgAPAxcAXwMXAG8DFwB/AxcAvwMXAPADFwAGAEADF7KSM0C4AxeyizNAuAMXs2psMkC4AxeyYTNAuAMXs1xdMkC4AxezV1kyQLgDF7NNUTJAuAMXs0RJMkC4AxeyOjNAuAMXszE0MkC4AxezLkIyQLgDF7MnLDJAuAMXsxIlMoC4AxezCg0ywEEWAxYA0AMWAAIAcAMWAAECxAAPAQEAHwCgAxUAsAMVAAIDBgAPAQEAHwBAAxKzJCYyn78DBAABAwIDAQBkAB//wAMBsg0RMkEKAv8C7wASAB8C7gLtAGQAH//AAu2zDhEyn0FKAuIArwLiAL8C4gADAuIC4gLhAuEAfwLgAAEAEALgAD8C4ACfAuAAvwLgAM8C4ADvAuAABgLgAuAC3wLfAt4C3gAPAt0ALwLdAD8C3QBfAt0AnwLdAL8C3QDvAt0ABwLdAt0AEALcAAEAAALcAAEAEALcAD8C3AACAtwC3AAQAtsAAQLbAtsADwLaAAEC2gLa/8AC07I3OTK5/8AC07IrLzK5/8AC07IfJTK5/8AC07IXGzK5/8AC07ISFjK4AtKy+SkfuALjsyArH6BBMALUALAC1AACAAAC1AAQAtQAIALUAFAC1ABgAtQAcALUAAYAYALWAHAC1gCAAtYAkALWAKAC1gCwAtYABgAAAtYAEALWACACygAgAswAIALWADAC1gBAAtYAUALWAAgC0LIgKx+4As+yJkIfQRYCzgLHABcAHwLNAsgAFwAfAswCxgAXAB8CywLFABcAHwLJAsUAHgAfAsoCxrIeHwBBCwLGAAACxwAQAsYAEALHAC8CxQAFAsGzJBIf/0ERAr8AAQAfAr8ALwK/AD8CvwBPAr8AXwK/AI8CvwAGAr8CIrJkHxJBCwK7AMoIAAAfArIA6QgAAB8CpgCiCABAah9AJkNJMkAgQ0kyQCY6PTJAIDo9Mp8gnyYCQCaWmTJAIJaZMkAmjpIyQCCOkjJAJoSMMkAghIwyQCZ6gTJAIHqBMkAmbHYyQCBsdjJAJmRqMkAgZGoyQCZaXzJAIFpfMkAmT1QyQCBPVDK4Ap63JCcfN09rASBBDwJ3ADACdwBAAncAUAJ3AAQCdwJ3AncA+QQAAB8Cm7IqKh+4AppAKykqH4C6AYC8AYBSAYCiAYBlAYB+AYCBAYA8AYBeAYArAYAcAYAeAYBAAYC7ATgAAQCAAUC0AYBAAYC7ATgAAQCAATlAGAGAygGArQGAcwGAJgGAJQGAJAGAIAE3QLgCIbJJM0C4AiGyRTNAuAIhs0FCMkC4AiGzPT4yD0EPAiEAPwIhAH8CIQADAL8CIQDPAiEA/wIhAAMAQAIhsyAiMkC4AiGzGR4yQLgCIrMqPzJAuAIhsy46Mm9BSALDAH8CwwCPAsMA3wLDAAQALwLDAGACwwDPAsMAAwAPAsMAPwLDAF8CwwDAAsMA7wLDAP8CwwAGAN8CIgABAI8CIgABAA8CIgAvAiIAPwIiAF8CIgB/AiIA7wIiAAYAvwIhAO8CIQACAG8CIQB/AiEArwIhAAMALwIhAD8CIQBPAiEAAwLDAsMCIgIiAiECIUAdEBwQKxBIA48cAQ8eAU8e/x4CNwAWFgAAABIRCBG4AQ229w349w0ACUEJAo4CjwAdAB8CkAKPAB0AHwKPsvkdH7gBmLImux9BFQGXAB4EAQAfATkAJgElAB8BOABzBAEAHwE1ABwIAQAfATQAHAKrAB8BMrIcVh+4AQ+yJiwfugEOAB4EAbYf+RzkH+kcuAIBth/oHLsf1yC4BAGyH9UcuAKrth/UHIkfyS+4CAGyH7wmuAEBsh+6ILgCAbYfuRw4H63KuAQBsh+BJrgBmrIffia4AZq2H30cRx9rHLgEAbIfZSa4AZqyH15zuAQBQA8fUiZaH0gciR9EHGIfQHO4CAG2Hz8cXh88JrgBmrIfNRy4BAG2HzAcux8rHLgEAbYfKhxWHykcuAEBsh8jHrgEAbIfVTe4AWhALAeWB1gHTwc2BzIHLAchBx8HHQcbBxQIEggQCA4IDAgKCAgIBggECAIIAAgUuP/gQCsAAAEAFAYQAAABAAYEAAABAAQQAAABABACAAABAAIAAAABAAACAQgCAEoAsBMDSwJLU0IBS7DAYwBLYiCw9lMjuAEKUVqwBSNCAbASSwBLVEKwOCtLuAf/UrA3K0uwB1BbWLEBAY5ZsDgrsAKIuAEAVFi4Af+xAQGOhRuwEkNYuQABARGFjRu5AAEBKIWNWVkAGBZ2Pxg/Ej4ROUZEPhE5RkQ+ETlGRD4ROUZEPhE5RmBEPhE5RmBEKysrKysrKysrKysYKysrKysrKysrKysYKx2wlktTWLCqHVmwMktTWLD/HVlLsJNTIFxYuQHyAfBFRLkB8QHwRURZWLkDPgHyRVJYuQHyAz5EWVlLuAFWUyBcWLkAIAHxRUS5ACYB8UVEWVi5CB4AIEVSWLkAIAgeRFlZS7gBmlMgXFi5ACUB8kVEuQAkAfJFRFlYuQkJACVFUli5ACUJCURZWUu4BAFTIFxYsXMkRUSxJCRFRFlYuRcgAHNFUli5AHMXIERZWUu4BAFTIFxYscolRUSxJSVFRFlYuRaAAMpFUli5AMoWgERZWUuwPlMgXFixHBxFRLEeHEVEWVi5ARoAHEVSWLkAHAEaRFlZS7BWUyBcWLEcHEVEsS8cRURZWLkBiQAcRVJYuQAcAYlEWVlLuAMBUyBcWLEcHEVEsRwcRURZWLkN4AAcRVJYuQAcDeBEWVkrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrK2VCKysBsztZY1xFZSNFYCNFZWAjRWCwi3ZoGLCAYiAgsWNZRWUjRSCwAyZgYmNoILADJmFlsFkjZUSwYyNEILE7XEVlI0UgsAMmYGJjaCCwAyZhZbBcI2VEsDsjRLEAXEVUWLFcQGVEsjtAO0UjYURZs0dQNDdFZSNFYCNFZWAjRWCwiXZoGLCAYiAgsTRQRWUjRSCwAyZgYmNoILADJmFlsFAjZUSwNCNEILFHN0VlI0UgsAMmYGJjaCCwAyZhZbA3I2VEsEcjRLEAN0VUWLE3QGVEskdAR0UjYURZAEtTQgFLUFixCABCWUNcWLEIAEJZswILChJDWGAbIVlCFhBwPrASQ1i5OyEYfhu6BAABqAALK1mwDCNCsA0jQrASQ1i5LUEtQRu6BAAEAAALK1mwDiNCsA8jQrASQ1i5GH47IRu6AagEAAALK1mwECNCsBEjQgArdHVzdQAYRWlERWlERWlEc3Nzc3R1c3R1KysrK3R1KysrKytzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzKysrRbBAYURzdAAAS7AqU0uwP1FaWLEHB0WwQGBEWQBLsDpTS7A/UVpYsQsLRbj/wGBEWQBLsC5TS7A6UVpYsQMDRbBAYERZAEuwLlNLsDxRWlixCQlFuP/AYERZKysrKysrKysrKysrKysrKysrdSsrKysrKytDXFi5AIACu7MBQB4BdABzWQOwHktUArASS1RasBJDXFpYugCfAiIAAQBzWQArdHMBKwFzKysrKysrKytzc3NzKwArKysrKysARWlEc0VpRHNFaURzdHVFaURzRWlERWlERWlEc3RFaURFaURzKysrKytzKwArcyt0dSsrKysrKysrKysrKysrc3R1KwAFugAZBboAGgWnABkEJgAYAAD/5wAA/+gAAP/n/mn/6AW6ABn+af/oAuoAAAC4AAAAuAAAAAAAqACtAWkArQC/AMIB8AAYAK8AuQC0AMgAFwBEAJwAfACUAIcABgBaAMgAiQBSAFIABQBEAJQBGf+0AC8AoQADAKEAzQAXAFcAfgC6ABYBGP/pAH8AhQPTAIcAhQANACIAQQBQAG8AjQFM/3UAXADfBIMANwBMAG4AcAGA/1j/jv+S/6QApQC5A8j//QALABoAYwBjAM3/7gXY/9wALQBcAJUAmQDfAZIJtQBAAFcAgAC5A50AcgCaA10EAf9n//oAAwAhAHcAzQAEAE0AzQHAAisATABlAOcBGAF8A0MF2P+j/7D/xAADABwAXQBoAJoAugE1AUcCIQVc/03/zQAWAC0AeACAAJkAsgC2ALYAuAC9ANoBDAXw/6T/8AAZACwASQB/ALQAzgHAA/79gf4/AAAABQAYACkAOQBJAG8AvgDHANABIwHBAm8FDAUyBUAFev/UABQAMQBVAFcApwC0AOYB9wJ+An4CfwPGBEb/QgAOAIUAkQC/AMIAxQDhARoBLwFPAVYCKQJvAp4DcgAIACwAMQAxAGQAaQCJAJgAxwDeASsBtgIMAs8DowSrBPsGHf7g/w4ABgAmAJsAnQDBAQ0BGAEgAXMBggHWAeMCQwJfApsC4gOUBKkE0gdhABwAXgBtAI0AqwD3ARIBOAFRAVsBaAF8AYcBkQGZAc0B0AHoAkECVAJrAu8DaANxA70EQgRCBFMEcwSDBYYFiwbo/lj+xP7R/vf/Mv+GAFEAfACBAJEAlQCeALQAuQDPANkA2QDfAOIBBQELAQ4BDgEgASEBVQF7AXsBfgGNAaIBqAGpAbQB0AHQAeIB6QHyAfUB+wIAAgACBgIbAiECIgIiAiMCcgJ3ApQCnALPAs8C0ALsAvkDFwMiAysDNQM8A1kDbwNxA4cDkAOQA7UD4QQaBM8E/wUyBTIFlgWfBagFqwXCBfAGDAeCCAAIzPyj/Sr93v4A/oj+lv6y/rT/4QAVABkAGgAcAB8APABRAGEAYQBqAHgAlgClAK8A0wEMARgBGgEqAT4BTAFRAV8BagFxAXgBggGEAZoBpQGoAakBrgG8Ac0B1wHvAgACDQIcAiECIgIuAjUCQgJPAk8CXgJlAnECkAKSArQC1gL6AwcDCwMPAxUDKgNHA10DZQN0A3kDlgOwA8wD3QPiA/YD/AP8A/8ECgQfBCIEJgQrBEcEXwR1BJ4E5wTnBVwFywXlBgoGbQaGBrgG8Qc2Bz4HUAdRB10Hjwe2B9QIYAC2AMMAtQC3AAAAAAAAAAAAAAAAAeADgQNFA7UAjgIzBBkCzgLOAC0AXwBkA00CPwAAAqgBiAJ9AbQCJAV4BjsCOwFOAPAEJgKUAsYCnwL2AjsDTQFLAVMAagIxAAAAAAAABhQEqgAAADwEwwDtBLwCZQLOA7UAeAYMAX4C7wYMALIBAAI5AAABxQMwBCsDywDaA98BBwShANsECgEXAe0CpwNQAQsBvQQ+BVgAIQOcAK4DcQF9ALUCRQAACvsIjAErAU4BqgCHAFQBMgH4A/8AAwJOALQANwPjAIMAawLYAO0AdwCIAJcBZARnAI4AMwF8AOcApgKeAykFbgYqBhUByQJpBIoCEwG0AAIEqQAAAjkBJAEDBRQAhAFdA5oG7wLZAHUAzwQKAN4DrAS8As8CrgNNBPAFUgFoAG0AfQCGAHH/gQB5BVgE0gFnAAMBVgAlBOAAlAB8AzIEIQCUAH8AcgBcAC8AtgAYALoAuABBA00AcgAYAB8ATAFqAVUAmQCaAJoAmACyAAQAeABpABQAVwBuAM4AtAZUArgAZwUOAWUA5wAABMv+UgBa/6YAmf9nAG7/kgAt/9QAh/98ALgAqADlAI8AqAGF/nsAcAAeANkA3gFMBUYCzwVG/y0CigLZAlMClgC3AAAAAAAAAAAAAAAAAAABJQEYAOoA6gCuAAAAPgW7AIoE1wBTAD//jP/VABUAKAAiAJkAYgBKAOQAbQDuAOUASAPAADP+TgKx/0YDcAB5Bd8AUf+n/x8BCgBo/2wATwC8AKUHBQBhBysAAAAAAAAAKgAAACoAAAAqAAAAKgAAANYAAAF+AAADIAAABaYAAAdOAAAJOAAACX4AAAn+AAAKpAAAC4QAAAvsAAAMZAAADKoAAAzmAAANVgAADxIAAA/uAAASGAAAE/IAABVSAAAXDAAAGOIAABmOAAAcIgAAHlYAAB6yAAAfcAAAH/IAACBiAAAg6AAAIdoAACPaAAAlhAAAJxwAAChWAAApngAAKmIAACsYAAAsqAAALa4AAC6SAAAvegAAMbAAADI6AAA1ZAAANw4AADhCAAA5SAAAOzwAAD2oAABAUgAAQQAAAEIkAABDmAAARdYAAEjiAABKiAAAS8gAAEwyAABMnAAATQAAAE2IAABNvAAATjgAAFEKAABS6AAAVJwAAFZQAABYDgAAWWIAAFtSAABc9gAAXeoAAF8CAABhmgAAYpYAAGTGAABmjAAAaE4AAGoSAABrqAAAbK4AAHBWAABxegAAcxgAAHU2AAB5oAAAe8QAAH4cAACABAAAgQIAAIFOAACCUAAAgvAAAIM8AACDcAAAg6wAAIPuAACEVAAAhJoAAITOAACFBAAAhToAAIWKAACFzAAAhh4AAIZWAACGqAAAht4AAIceAACHYAAAh54AAIfoAACIKAAAiFYAAIiOAACI3gAAiRQAAIlUAACJjgAAidIAAIocAACKWAAAiogAAIrMAACLBAAAi5QAAIwaAACOKAAAj7wAAJFsAACRuAAAkkwAAJRwAACWxAAAmLQAAJmgAACaIgAAmowAAJuqAACdBgAAn04AAKCwAAChPgAAoegAAKKsAACj9AAApZ4AAKaMAACnUgAAp7YAAKgkAACpTgAAqnIAAKsCAACs5AAArz4AALKQAACzhgAAtCwAALR8AAC1MgAAtlIAALfwAAC4igAAuU4AALoOAAC6dgAAurIAALsKAAC7WAAAvXAAAL+2AAC/7gAAwCAAAMFKAADCdgAAwyQAAMPIAADEagAAxTwAAMWQAADFxgAAxh4AAMdwAADH4gAAyDwAAMm0AADLIAAAzAAAAMwyAADMzgAAzfIAANBoAADQogAA0OYAANEiAADRhAAA0cYAANIMAADSWAAA0ooAANLeAADTHAAA00wAANOKAADT0AAA1BIAANRQAADU0gAA1UAAANYmAADWYgAA1uIAANcWAADXuAAA2EAAANisAADZOAAA2aQAANqQAADbggAA27YAANvqAADcGgAA3F4AANzWAADeUAAA4GoAAOCcAADg1gAA4dAAAONeAADjlAAA5PgAAOV0AADmVAAA50oAAOjaAADqRAAA7DIAAO0uAADtdAAA7agAAO3qAADuJAAA7ngAAO7AAADvCgAA7zoAAO9qAADxUgAA8ZAAAPHKAADx+gAA8i4AAPJeAADyigAA8tIAAPSIAAD2AgAA9i4AAPZwAAD2tAAA9uQAAPcUAAD3agAA+EgAAPlaAAD5ngAA+dQAAPouAAD6bAAA+qAAAPrQAAD7DAAA+0wAAPuKAAD7xgAA/AgAAPw+AAD8egAA/LoAAP3IAAD/NAAA/4QAAQDgAAEBNgABAWoAAQG4AAECBAABAkYAAQJ+AAECtAABAvwAAQOeAAEFOgABBwIAAQiEAAEKdgABC8gAAQ1MAAEOLgABD8gAARAyAAEQWgABEPgAARN6AAETugABE/oAARQ6AAEUeAABFNYAARU0AAEVogABFcIAARasAAEXTAABF4IAARfQAAEYGgABGGQAARiAAAEYnAABGLwAARjcAAEY/AABGRwAARlCAAEZaAABGY4AARm0AAEZ5AABGgwAARo0AAEaYAABGowAARrAAAEa6gABGxYAARtMAAEbdgABG6IAARvYAAEcAgABHCwAARxgAAEckAABHMQAAR0IAAEdOAABHWwAAR2uAAEd4gABHhQAAR5WAAEeigABHroAAR78AAEfQAABH4YAAR/iAAEf/gABIBoAASA2AAEgUgABIG4AASHcAAEkrAABJxwAASc4AAEnUgABJ24AASeKAAEnpgABJ8IAASgeAAEoWAABKMIAASmMAAEqLAABKwIAASuCAAEsCgABLHoAAS0QAAEtbgABLbQAAS4SAAEudAABLywAAS/qAAEwFgABMHIAATC2AAEyIgABMxYAATNAAAEzXAABM4gAATPAAAE0DAABNEwAATSAAAE0sAABNOAAATUQAAE1VAABNYQAATW0AAE19AABNiQAATZUAAE2hAABNsQAATb0AAE3JAABN1QAATeCAAE5hgABObYAATnmAAE7NgABPOwAAT0cAAE9SgABPXoAAT2oAAE92AABPgYAAT80AAFAYgABQJIAAUICAAFCOgABQmoAAUP8AAFEKgABRFgAAUSGAAFErgABRgwAAUekAAFH3AABSBwAAUhYAAFIiAABSLYAAUjSAAFJAgABSTIAAUoiAAFLigABS7oAAUv0AAFMNAABTGQAAUyUAAFM1gABTnYAAVBWAAFQlgABUNYAAVEGAAFRRgABUjAAAVKwAAFTlAABU8QAAVP0AAFUJAABVFQAAVSQAAFUwgABVPQAAVUkAAFVVAABVZoAAVXMAAFV/AABVjIAAVakAAFW2AABWKYAAVmoAAFbOAABXWgAAV+4AAFhSgABYa4AAWI4AAFiSAABYtYAAWTUAAFmAAABZ2wAAWhcAAFp4AABa/oAAW4mAAFvGAABbygAAW84AAFwUAABcGAAAXBwAAFwgAABcJAAAXCgAAFxvgABcc4AAXHeAAFyUgABcmIAAXMyAAFzQgABdFQAAXRkAAF0dAABdIQAAXXiAAF3wAABeAIAAXg4AAF4bgABeJ4AAXjOAAF5IgABeUoAAXrUAAF8HAABfXAAAX7YAAGAXAABgMAAAYJSAAGDbgABg34AAYOOAAGFFAABhSQAAYaKAAGH5AABiRgAAYp2AAGL5AABjaoAAY3qAAGOIgABjlgAAY5+AAGOrgABjtQAAZBKAAGQegABkbAAAZHAAAGR0AABkhIAAZIiAAGTtgABlWIAAZbsAAGXFAABl0QAAZigAAGYsAABmegAAZn4AAGakgABm/IAAZwCAAGeaAABn/IAAaFaAAGhigABowAAAaQyAAGkQgABpFIAAaRiAAGlPAABpUwAAaVcAAGlbAABpmQAAafeAAGn7gABqRYAAapKAAGrnAABrTAAAa5OAAGv2gABsOwAAbEiAAGzWAABs/gAAbQIAAG1ngABt0AAAbfEAAG5RgABuVYAAbu+AAG9PgABvr4AAb7uAAHAjgABwhQAAcPYAAHFBAABxRQAAcZEAAHGVAABxmQAAcckAAHHNAAByRoAAckqAAHKYAABy24AAc0aAAHO0AAB0BIAAdGCAAHSygAB0xwAAdT+AAHWegAB1rgAAdheAAHYggAB2cIAAdnSAAHZ4gAB2hoAAdoqAAHbtgAB3SQAAd6YAAHevAAB3uwAAeBaAAHhDAAB4coAAeH4AAHjrgAB5KYAAeU0AAHmYAAB5xQAAefuAAHoOAAB6LYAAel8AAHppAAB6e4AAepEAAHrMAAB63oAAeuuAAHr1gAB6/4AAewyAAHsdgAB7LoAAez4AAHuNgAB7u4AAfAOAAHwhAAB8VIAAfGkAAHyNgAB8uYAAfPaAAH0LgAB9MQAAfWCAAH2bAAB9x4AAfg+AAH4kAAB+ToAAfpwAAH7SAAB/C4AAf00AAH+GgAB/vwAAf/wAAIAjgACAZQAAgKOAAIDBgACA34AAgP0AAIEKgACBIYAAgVOAAIF2gACBhIAAgZYAAIGiAACBvIAAgeyAAIH5gACCBYAAghKAAIIegACCKoAAgjaAAIKegACCrIAAgryAAILKgACC2IAAgv+AAIM+AACDSgAAg3MAAIN+gACDjoAAg6KAAIOugACDwYAAhCeAAISBAACE2QAAhOqAAIT/gACFDYAAhWoAAIV3gACFnAAAhauAAIW3AACFxoAAhhKAAIYcgACGa4AAho+AAIa6AACG2oAAhwmAAIdPgACHkwAAh6AAAIfBgACIGIAAiDkAAIhLgACIjgAAiKAAAIjhAACJAAAAiRYAAIk3AACJcYAAibcAAIn2AACKIIAAilyAAIqRAACKy4AAiwWAAIsxgACLUgAAi+mAAIv0AACL/oAAjCyAAIw3AACMh4AAjMkAAI0DgACNDgAAjRiAAI0jAACNLYAAjTgAAI2YAACNooAAja0AAI23gACNwgAAjcyAAI3XAACN4YAAjewAAI35AACOA4AAjg4AAI4YgACOdwAAjnsAAI7BgACOxYAAjtAAAI7agACO5QAAju+AAI9aAACP4QAAkCyAAJAwgACQj4AAkJOAAJDlAACRWAAAkZmAAJH5gACSYYAAkuqAAJNBAACTuYAAlAqAAJRWAACUYIAAlGsAAJR1gACUgAAAlIqAAJSVAACUn4AAlKoAAJS0gACUvwAAlMmAAJTUAACU3oAAlOkAAJTzgACU/gAAlY0AAJXsAACWPQAAlrcAAJcJAACXE4AAlx4AAJcqAACXNgAAl0oAAJdeAACXbgAAl4qAAJefgACXtwAAl8yAAJfaAACX6oAAl/wAAJgOgACYGoAAmCiAAJg0gACYgoAAmVQAAJlegACZaQAAmXOAAJl+AACZiIAAmZMAAJmdgACZqAAAmbKAAJm9AACZx4AAmdIAAJncgACZ5wAAmfGAAJn8AACaBoAAmhEAAJobgACaJgAAmjCAAJo7AACaRYAAmlAAAJpagACaZQAAmm+AAJp6AACaoYAAmqcAAJqxgACbaYAAm22AAJu0AACb/IAAnEwAAJycgACdBgAAnQoAAJ1agACdroAAniqAAJ6fgACe5YAAnumAAJ8KAACfLYAAn22AAJ9xgACfmYAAn52AAJ/jAACgN4AAoIOAAKCHgACguwAAoL8AAKEcgAChIIAAoWWAAKFpgAChtoAAohwAAKJLAACiTwAAoo6AAKLlAACjCAAAowwAAKNWgACjuYAAo+iAAKPsgACkE4AApBeAAKRLAACkTwAApIUAAKSJAACkywAApM8AAKVAgAClRIAApZqAAKWegACmOQAApj0AAKa7gACmv4AApxoAAKceAACnWgAAp14AAKfEAACnyAAAqA+AAKgTgACoY4AAqGeAAKhrgACob4AAqM2AAKjRgACo1YAAqNmAAKkuAACpgYAAqbUAAKnuAACqTgAAqq6AAKrugACrM4AAq4SAAKuIgACrxAAAq/qAAKxhgACsZYAArK0AAKzugACtbgAArXIAAK12AACtegAArcyAAK3QgACt/oAArgKAAK5GAACuSgAAroUAAK6JAACu0IAArtSAAK78AACvAAAArwQAAK8/gACvnIAAr+eAALAmAACwKgAAsC4AALAyAACwmYAAsQgAALE7gACxP4AAsdeAALJpAACzCoAAs6OAALREgAC04QAAtVUAALXCgAC1zQAAtdeAALXbgAC134AAteoAALX0gAC1/wAAtgMAALYHAAC2EYAAthwAALYgAAC2JAAAti6AALY5AAC2Q4AAtkeAALZLgAC2T4AAtlOAALZXgAC2W4AAtmYAALZqAAC2bgAAtniAALaDAAC2jYAAtpgAALaigAC2rQAAtreAALbCAAC2zIAAttcAALbhgAC27AAAtvaAALcBAAC3C4AAtxYAALcggAC3KwAAtzWAALdAAAC3SoAAt1UAALdfgAC3agAAt3SAALd/AAC3iYAAt5QAALeegAC3qQAAt7OAALe+AAC3yIAAt9MAALfdgAC36AAAt/KAALf9AAC4B4AAuBIAALgcgAC4JwAAuDGAALg8AAC4RoAAuFEAALhbgAC4ZgAAuHCAALh7AAC4hYAAuJAAALiagAC4pQAAuM0AALjeAAC4+4AAuQYAALkQgAC5GwAAuSWAALkwAAC5OoAAuUUAALlPgAC5WgAAuWSAALlvAAC5eYAAuYQAALmOgAC5mQAAuaOAALmuAAC5uIAAucMAALnNgAC52AAAueKAALntAAC594AAugSAALoRgAC6HoAAuoMAALrqAAC7UQAAu7QAALvFgAC71wAAu/KAALwJgAC8HgAAvDoAALxwAAC8owAAvNkAAL0MAAC9NAAAvXqAAL2ngAC9yAAAvd6AAL3ugAC+NgAAvoiAAL7ugAC/BYAAvx0AAL80AAC/SwAAv3gAAL+lgAC/0IAAv/uAAMAmgADAVIAAwIKAAMCwgADAtQAAwLmAAMC+AADAwoAAwMcAAMDigADA/gAAwSwAAMEwgADBNQAAwTmAAME9gADBQgAAwUaAAMFLAADBT4AAwVQAAMFYgADBhAAAwa8AAMHagADCBYAAwiuAAMI6AADCRIAAwk8AAMJkAADCeIAAwpeAAMKqAADCyQAAwt4AAML/AADDE4AAwzEAAMNHAADDYIAAw3YAAMOMgADDrAAAw78AAMPWgADD74AAxAMAAMQWgADELIAAxD6AAMRJAADEVIAAxF4AAMRrAADEdwAAxIMAAMSXgADEswAAxMiAAMTlgADE+oAAxReAAMUpAADFQwAAxVSAAMVrgADFd4AAxYYAAMWPgADFm4AAxaUAAMWugADFuwAAxccAAMXbgADF9QAAxgqAAMYkAADGOQAAxlSAAMZlAADGfQAAxo2AAMaggADGrwAAxr4AAMbMgADG24AAxuiAAMb1AADHAQAAxw0AAMcXgADHIQAAxyuAAMc3AADHQYAAx1SAAMdlgADHcwAAx4IAAMePAADHmoAAx6oAAMe2AADHxIAAx88AAMfagADH5AAAx+2AAMf4gADID4AAyBuAAMgngADIM4AAyEGAAMhOgADIWgAAyGYAAMhyAADIfgAAyIoAAMiXAADIrIAAyLmAAMjRgADI3oAAyPSAAMkBgADJGIAAyUAAAMlzgADJu4AAye2AAMoRgADKNwAAyrIAAMsxAADLjwAAy+4AAMxYgADMxQAAzP8AAM1MgADNioAAzc8AAM4WgADOZAAAzr6AAM8aAADPf4AAz96AANAigADQJoAA0HGAANDAgADREQAA0XIAANGogADRxgAA0fOAANIdAADSeQAA0ocAANKlgADS1gAA0wSAANMegADTYAAA062AANPhAADUOIAA1FcAANR1gADUp4AA1NYAANUDAADVGgAA1TCAANVCgADVXoAA1X2AANWQAADVnoAA1bAAANXBAADV1YAA1eoAANYKgADWKwAA1juAANZLgADWWQAA1maAANZyAADWfYAA1oqAANaXgADWqAAA1riAANbHgADW1oAA1uUAANbzgADXAAAA1wyAANcZAADXJYAA1zQAANdCgADXUwAA12OAANd0AADXhIAA15gAANergADXvAAA18yAANfcgADX7IAA1/sAANgJgADYHIAA2C+AANg/AADYTwAA2GCAANhyAADYgQAA2JaAANilgADYtIAA2MSAANjUgADY44AA2PKAANkCgADZEoAA2SOAANk0gADZSYAA2W0AANl9gADZjgAA2agAANnCAADZzoAA2dsAANnpAADZ9wAA2hyAANpCAADaVIAA2mcAANp2AADahQAA2pqAANqwAADawoAA2tUAANrrAADbAQAA2xEAANshAADbLwAA2z0AANtPgADbYgAA23GAANuBAADbkYAA26IAANu3AADbzAAA292AANvvAADcAIAA3BIAANwngADcPQAA3FKAANxoAADcewAA3I4AANyhAADctAAA3NEAANzuAADdCwAA3SgAAN03gADdRwAA3VaAAN1mAADddYAA3YUAAN2WAADdpwAA3boAAN3NAADd5QAA3fgAAN4HgADeGwAA3l8AAN5zAADehwAA3pUAAN6jAADeuIAA3s4AAN7rAADfBAAA3xSAAN8lAADfOoAA304AAN9hAADfdAAA34QAAN+UAADfpgAA37gAAN/TAADf6YAA3/eAAOAFgADgFYAA4CWAAOBsAADgvYAA4PmAAOE9gADhUwAA4WiAAOF9AADhkgAA4asAAOHEAADh2YAA4e8AAOIMgADiKgAA4jqAAOJLAADiW4AA4mwAAOJ8gADijQAA4qKAAOK4AADizIAA4uGAAOMDgADjJAAA40wAAON0gADjhAAA45OAAOOjAADjsgAA48GAAOPRAADj4IAA4++AAOQogADkY4AA5KkAAOTwAADlIoAA5VUAAOWTgADl0gAA5hGAAOZRAADmmIAA5uAAAOcpgADncwAA57OAAOf0AADoGIAA6D0AAOhMgADoXAAA6HKAAOiJAADolwAA6KUAAOjpAADo7QAA6P8AAOkRAADpJwAA6T0AAOlJgADpVgAA6WaAAOl3AADphYAA6ZQ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//8AS//oBB4FwwImAEgAAAEHAI4A3wAAACNAFAMCIkALCwJVryIBIgpkSCsCAwIluQIiACkAKwErXSs1NQD//wC9AAACLgXCAiYA1QAAAQYAjd8AADK3AQdACwsGVQe4/8CzFxk0B7j/wEAOIiU0LwcBBwFaSCsBAQe5AiIAKQArAStdKysrNf//ACMAAAGbBcICJgDVAAABBgBDygAAKEAQAQVAFxk0BUAiJTQgBQEFArj/prRIKwEBBbkCIgApACsBK10rKzX////vAAACaAXCAiYA1QAAAQYA1tYAABZACgEABgkBAkEBAQq5AiIAKQArASs1//8ACQAAAjoFwwImANUAAAEGAI7MAAAfQBECAQggCwsGVQgCAEgrAQICC7kCIgApACsBKys1NQD//wCHAAAD5gWqAiYAUQAAAQcA1wD/AAAANbMBAQEmuQIiACkAKwGxBgJDVFi1ABcjAQtBKxu5ACj/wLciJDRPKAEoErj/4rFIKytdK1k1AP//AET/6AQnBcICJgBSAAABBwCNAPQAAAAbQA4C4B3wHQIdBABIKwIBHbkCIgApACsBK101AP//AET/6AQnBcICJgBSAAABBwBDAN4AAAAmsQIbuP/AQBELDTQPGwFwGwEbBABIKwIBG7kCIgApACsBK11xKzX//wBE/+gEJwXCAiYAUgAAAQcA1gDgAAAAIEASAhxALjI0nxwBABwfAAdBAgEguQIiACkAKwErcis1//8ARP/oBCcFwwImAFIAAAEHAI4A4AAAACpACQMCHkAWFgZVHrj/wEANCgsGVR4EbkgrAgMCIbkCIgApACsBKysrNTX//wBE/+gEJwWqAiYAUgAAAQcA1wDgAAAAMEAXAi8rPysCfyv/KwJPK48rAi8rPysCKwS4/+y0SCsCASm5AiIAKQArAStdXV1xNf//AIP/6APgBcICJgBYAAABBwCNAOcAAAAhQBMBHEAOEDQfHE8cAhwRPEgrAQEcuQIiACkAKwErcSs1AP//AIP/6APgBcICJgBYAAABBwBDAQcAAAAVQAoBARoRAEgnAQEauQIiACkAKwErAP//AIP/6APgBcICJgBYAAABBwDWANwAAAApswEBAR+5AiIAKQArAbEGAkNUWLUAGx4LFkErG7ePGQEZESNIKytdWTUA//8Ag//oA+AFwwImAFgAAAEHAI4A3AAA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Amtu1Hb+/ra3/v521AP6ctRyt/7+AQK3c9NyAAACAHABqgJmA6AACwAXAAABMhYVFAYjIiY1NDYXIgYVFBYzMjY1NCYBa2iTk2hok5JpSWZnSEhnZgOgk2hok5NoaJNMZ0hJZmZJSGf////9AAAFWQa+AiYAJAAAAQcA2AFKAV8AJkAXAgAPARAP0A8CIA8wDwIADxIMDEECAQ+5AiEAKQArAStdcXI1//8ASv/oBBwFXwImAEQAAAEHANgA9QAAABpADQJwOAEAODsCAkECATi5AsMAKQArAStdNf//AGb/5wV2ByYCJgAmAAABBwDWAbABZAAWQAoBACAjCA9BAQEguQIhACkAKwErNf//AFD/6APtBcICJgBGAAABBwDWAPoAAAAWQAoBAB0gBw5BAQEduQIiACkAKwErNf//AGb/5wV2BxoCJgAmAAABBwDaAbABkAAVQAkBHgtkSCsBAR65AiEAKQArASs1AP//AFD/6APtBYoCJgBGAAABBwDaAPAAAAApswEBARu5AiIAKQArAbEGAkNUWLUAGx4LC0ErG7dvGwEbEyhIKytdWTUA//8AogAABOgGyQImACgAAAEHANgBgQFqABZACgEADA8BAkEBAQy5AiEAKQArASs1//8AS//oBB4FXwImAEgAAAEHANgA4AAAABZACgIAHiEHD0ECAR65AsMAKQArASs1//8AogAABOgHIgImACgAAAEHANkBawFqACWzAQEBELkCIQApACsBsQYCQ1RYtQATDQECQSsbtBMFRkgrK1k1AP//AEv/6AQeBbgCJgBIAAABBwDZAPQAAAAVQAoCASUWAEgnAgEiuQIiACkAKwErAP//AKIAAAToBvQCJgAoAAABBwDaAYEBagAWQAoBAAwPAQJBAQEMuQIhACkAKwErNf//AEv/6AQeBYoCJgBIAAABBwDaAPoAAAAWQAoCAB4hBw9BAgEeuQIiACkAKwErNf//AG3/5wW5ByECJgAqAAABBwDWAg4BXwAlswEBASi5AiEAKQArAbEGAkNUWLUAKCsODkErG7QmDgBIKytZNQD//wBC/lED6gXCAiYASgAAAQcA1gDIAAAAFkAKAgAtMA8XQQIBLbkCIgApACsBKzX//wBt/+cFuQbpAiYAKgAAAQcA2gIOAV8AFkAKAQAmKQoCQQEBJrkCIQApACsBKzX//wBC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BQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREh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ESEBAAQA/CADwPxABQD7ACAEwAD//wBG/9UBnACkABYC9gAA//8ARv72AZwAWwAWAvMAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAMoBGAHJBbcAEgAeAD65ABAC8rcHQAkKNAcHHLwC7gAWAuwABgLxtAcHExkAuALtsg0NE7kC7QAZL+0zL+0REjkv7QA//TIvKz8xMAEUBwYHBhUjNCcmJyY1NDYzMhYDFAYjIiY1NDYzMhYByRorBRo5GQolGkY3OUkGSDQySEg0MkgFHUN2wxySiH6ZOrZ+LT1dXPw3MkhIMjNKSgAAAQDHARgBzwIiAAsAFr4ACQLuAAMC7AAAAu0ABi/tAD/tMTABFAYjIiY1NDYzMhYBz083NkxNNThOAZ02T043Nk9OAAACAMYBGAHNBFcACwAXACq5AAkC7rIDAxW8Au4ADwLsAAAC7bIGBgy5Au0AEi/tMy/tAD/9Mi/tMTABFAYjIiY1NDYzMhYRFAYjIiY1NDYzMhYBzU44NUxKNzhOTzc1TEs2OE4D0jhOTjg3Tk79lDZPTjc2T04AAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUA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ABH++AAzACT/aAA1ADf/2wA1ADn/2wA1ADr/2wA1ADz/2wA3AAP/2wA3AA//HQA3ABD/jwA3ABH/HQA3AB3/HQA3AB7/HQA3ACT/aAA3ADL/2wA3AET/HQA3AEb/HQA3AEj/HQA3AEz/tAA3AFL/HQA3AFX/tAA3AFb/HQA3AFj/tAA3AFr/jwA3AFz/jwA5AA//RAA5ABD/jwA5ABH/RAA5AB3/tAA5AB7/tAA5ACT/aAA5AET/aAA5AEj/jwA5AEz/2wA5AFL/jwA5AFX/tAA5AFj/tAA5AFz/tAA6AA//jwA6ABD/2wA6ABH/jwA6AB3/2wA6AB7/2wA6ACT/tAA6AET/tAA6AEj/2wA6AEwAAAA6AFL/2wA6AFX/2wA6AFj/2wA6AFz/7gA8AAP/2wA8AA/++AA8ABD/RAA8ABH++AA8AB3/jwA8AB7/ewA8ACT/aAA8AET/aAA8AEj/RAA8AEz/tAA8AFL/RAA8AFP/aAA8AFT/RAA8AFj/jwA8AFn/jwBJAEn/2wBJALYAJQBVAA//jwBVABH/jwBVALYATABZAA//aABZABH/aABaAA//jwBaABH/jwBcAA//aABcABH/aAC1ALX/2wC2AAP/tAC2AFb/2wC2ALb/2wDEAi3/YADEAjb/YADEAkz/YADEAlH/vADEAlT/vAErAA//HwErABH/HwErAfgApAErAfn/RAErAfv/RAErAgH/RAErAhr/qAErAicAWAEsAfn/2wEsAfv/2wEsAgH/2wEsAgr/vgEsAg//vgEtAfn/xQEtAgr/vgEtAg//vgEvATL/4wEvAhz/2QEvAiT/yQEvAoz/4wEyAS7/4wEyAS//4wEyATH/4wEyATP/4wEyAhD/4wEyAhf/4wEyAiD/4wEyAiL/4wEyAib/4wEyAiv/4wEzATL/4wEzAhz/2QEzAiT/yQEzAoz/4wHxASz/1QHxAS3/xQHxAgX/1QHxAgn/aAHxAgr/aAHxAg//aAHxAhb/2wHxAh7/2wHxAiT/2wH1Agr/vgH2ASz/jQH2AS3/jQH2AS7/RgH2ATH/RgH2ATP/RgH2AfgAqgH2Afn/aAH2Afv/aAH2AgH/aAH2AgX/jQH2Ag3/ngH2AhL/aAH2AhP/tAH2Ahj/aAH2Ahr/tAH2Ahv/aAH2Ah3/aAH2AiD/RgH2AicAYgH2Ain/RgH3Agr/0QH3Ag//0QH5AAP/jwH5ALb/aAH5ASz/1QH5AS3/xQH5AgX/1QH5Agn/aAH5Agr/aAH5Ag//aAH5Ahb/2wH5Ah7/2wH5AiT/2wH7AAP/jwH7ASz/1QH7AgX/1QH7Agn/iQH7Agr/aAH7Ag//aAIAASz/wQIAAS3/jwIAAS7/5wIAAS//5wIAATH/5wIAATP/5wIAAgX/wQIAAhD/5wIAAhf/5wIAAhn/5wIAAh//5wIAAiD/5wIAAib/5wIAAin/5wIAAiv/5wIBAAP/jwIBASz/1QIBAgX/1QIBAgn/aAIBAgr/aAIBAg//aAIFAfn/2wIFAfv/1QIFAgH/2wIFAgr/vgIFAg//vgIHAAP/2wIHAA/++gIHABH++gIHAfn/aAIHAfv/aAIHAgH/aAIIATL/ngIIAoz/ngIJAAP/2wIJAA//HwIJABH/HwIJAB3/HwIJAB7/HwIJASz/2wIJAS3/2wIJAS7/HwIJATD/HwIJATH/HwIJATP/HwIJAfgAvAIJAfn/aAIJAfv/aAIJAgH/aAIJAgX/2wIJAg3/2wIJAhD/HwIJAhH/HwIJAhT/TgIJAhb/TgIJAhj/agIJAhr/tAIJAh3/agIJAh7/jwIJAiD/HwIJAiP/UAIJAiT/jwIJAiX/agIJAicAvAIJAij/TgIJAin/HwIJAir/TgIKAAP/2wIKAA/++gIKABD/RgIKABH++gIKAB3/jwIKAB7/jwIKASz/jQIKAS3/jQIKAS7/RgIKATH/RgIKATP/RgIKAfgAvAIKAfn/aAIKAfv/aAIKAgH/aAIKAgX/jQIKAg3/ngIKAhL/aAIKAhP/tAIKAhb/ngIKAhj/aAIKAhr/tAIKAhv/aAIKAh3/aAIKAiD/RgIKAicAeQIKAin/RgIMAS7/sgIMAS//sgIMATH/sgIMATP/sgIMAhD/sgIMAhn/2QIMAiD/sgIMAib/sgIMAin/sgIMAiv/sgINAgr/0QINAg//0QIPAAP/2wIPASz/jQIPAS3/jQIPAS7/RgIPATH/RgIPATP/RgIPAfgAqgIPAfn/aAIPAfv/aAIPAgH/aAIPAgX/jQIPAg3/ngIPAhL/aAIPAhP/tAIPAhj/aAIPAhr/tAIPAhv/aAIPAh3/aAIPAiD/RgIPAicAYgIPAin/RgIXAS7/dwIXAS//tAIXATH/dwIXATL/qgIXATP/dwIXAhD/dwIXAhL/2wIXAhb/qgIXAhj/2wIXAhn/ngIXAhr/2wIXAhv/2wIXAh7/qgIXAiD/dwIXAib/dwIXAin/dwIXAiv/dwIXAoz/qgIZAhz/2QIbAS7/5wIbAS//5wIbATH/5wIbATP/5wIbAhD/5wIbAhf/5wIbAhn/5wIbAh//5wIbAiD/5wIbAiL/5wIbAib/5wIbAin/5wIbAiv/5wIcAS7/4QIcAS//4QIcATH/4QIcATP/2wIcAhD/4QIcAh//4QIcAiD/4QIcAiL/0QIcAiP/zwIcAib/4QIcAin/4QIcAir/zwIcAiv/4QIfAS7/yQIfAS//yQIfATH/yQIfATP/yQIfAhD/yQIfAhf/yQIfAh//yQIfAiD/yQIfAiL/yQIfAin/yQIgATL/4wIgAhz/2QIgAiT/yQIgAoz/4wIhATL/4wIhAhz/2QIhAoz/4wIkAS7/yQIkAS//yQIkATH/yQIkATP/yQIkAhD/yQIkAhf/yQIkAiD/yQIkAiL/yQIkAib/yQIkAin/yQIkAiv/yQImATL/4wImAhz/2QImAiT/yQImAoz/4wIpATL/4wIpAhz/2QIpAiT/yQIpAoz/4wIrATL/4wIrAhz/2QIrAiT/yQIrAoz/4wIuAA//BgIuABH/BgIuAKn/dwIuAKr/dwIuALL/0wI0ALb/YAI1ALb/dwI6ALb/jQI6Aj4ARAI6AkH/6QI6AkUALQI6Akj/0wI6Akn/6QI6Akv/0wI6Akz/YAI6Ak3/pgI6Ak7/vAI6AlH/YAI6Alf/0wI6AloAFwI6Amz/0wI6Am3/6QI6Am4AFwI6AncALQI7Ajr/0wI7AkH/6QI7Akj/6QI7Akv/6QI7Akz/pAI7Ak3/0QI7Ak7/6QI7Ak//0wI7AlH/pAI7AlT/vAI7Alf/6QI7Aln/6QI7AmX/6QI7Am3/0wI8Ajr/vAI8Aj7/0wI8AkD/0wI8AkH/vAI8AkX/6QI8Akj/vAI8Akv/vAI8Akz/dwI8Ak3/vAI8Ak7/vAI8Ak//pgI8AlH/pAI8AlT/jQI8Aln/vAI8Al7/6QI8Amb/6QI8Amz/vAI8Am3/6QI8Am//6QI8AnH/vAI8Ann/6QI9AA//BgI9ABH/BgI9AKn/dwI9AKr/dwI9ALL/0wI9Ajr/dwI9Aj7/dwI9AkH/0wI9AkX/jQI9Akb/0QI9Akj/jQI9Akv/pAI9Aln/vAI9Alr/jQI9Alz/jQI9Al7/dwI9Al//dwI9AmL/jQI9AmX/jQI9Amb/jQI9Amf/jQI9Amj/dwI9Amr/jQI9Am3/dwI9AnX/jQI9Anb/jQI9Anj/jQI9Ann/dwI+Ak0AFwI+Ak7/0wI+AlH/ugI+AmEARAI+AmgAFwI+Am0ALQI/AkH/0wI/Amv/6QJAAkH/6QJAAkj/0wJAAkv/6QJAAkwAFwJAAk0ALQJAAlQALQJAAloAFwJAAl//5wJAAmj/6QJAAm3/6QJBAkX/6QJBAkj/6QJBAkv/6QJBAkz/0wJBAk3/6QJBAk7/6QJBAlH/0wJBAln/6QJEAkH/6QJEAkj/6QJEAkv/6QJEAk0AFwJEAk7/ugJFAk7/6QJFAlsAFwJFAm0AFwJGAk7/6QJGAlH/6QJGAloAFwJGAl8AFwJGAmgAFwJGAmsAFwJGAm0AFwJGAnH/6QJGAncAFwJIAjr/0wJIAj7/0wJIAkD/0wJIAkX/6QJIAk3/0wJIAk//pAJIAlH/0wJIAln/0wJIAl7/0wJIAmX/6QJIAm//6QJKAA/+fQJKABH+fQJKAB3/0wJKAB7/0wJKAKr/jQJKAjr/dwJKAj7/dwJKAkD/6QJKAkH/0wJKAkX/jQJKAkb/6QJKAkj/0wJKAkv/6QJKAkz/pAJKAk3/0wJKAk7/6QJKAk//pAJKAln/0wJKAlr/vAJKAl7/YAJKAl//pgJKAmj/pgJKAnf/0wJKAnn/vAJLAjr/0wJLAj7/0wJLAkH/6QJLAkX/vAJLAkb/6QJLAkj/0wJLAkz/vAJLAk3/vAJLAk//jQJLAlH/vAJLAlT/ugJLAlf/6QJLAloAFwJLAmAALQJLAnH/6QJMAA//HQJMABH/HQJMAKn/pgJMAKr/pgJMALL/0wJMAjr/vAJMAj7/vAJMAkAAFwJMAkH/6QJMAkX/0wJMAkj/pAJMAk7/vAJMAln/0wJMAlr/pAJMAlz/pgJMAl//jQJMAmL/pgJMAmT/pgJMAmX/pAJMAmb/pgJMAmj/YAJMAmn/pgJMAmr/jQJMAmv/jQJMAm3/jQJMAm//pgJMAnP/pgJMAnX/pgJMAnb/pgJMAnj/pgJMAnn/jQJNAA/+8AJNABH+8AJNAB3/0wJNAB7/0wJNAKn/pgJNAKr/pAJNALL/6QJNAjr/dwJNAj7/pAJNAkH/0wJNAkX/vAJNAkj/vAJNAk7/vAJNAlf/0wJNAln/0wJNAlv/0wJNAlz/jQJNAl3/pAJNAl7/YAJNAl//dwJNAmD/vAJNAmH/jQJNAmL/pAJNAmP/vAJNAmT/pAJNAmX/dwJNAmb/pAJNAmf/pAJNAmj/dwJNAmn/pAJNAmr/pAJNAmv/dwJNAm//pAJNAnD/pAJNAnL/pAJNAnP/pAJNAnj/pAJNAnn/dwJOAjr/0wJOAj7/vAJOAkX/vAJOAkz/jQJOAk3/pAJOAlH/0wJOAln/ugJOAmX/vAJPAkH/0wJPAkj/vAJPAkv/vAJPAk7/vAJPAlf/ugJPAmj/6QJPAm3/0wJQAkj/0wJQAloALQJTAloAFwJTAm0ALQJUALb/dwJUAln/vAJWALb/YAJWAjr/0wJWAj7/0wJWAkD/vAJWAkH/6QJWAkX/ugJWAkb/0wJWAkj/0wJWAkv/0wJWAkz/MwJWAk//pAJWAlH/YAJWAlf/6QJWAln/pAJXAj7/vAJXAkD/5wJXAkH/6QJXAkX/vAJXAk//ugJXAln/0wJXAl7/vAJXAmAAFwJXAmX/vAJXAmb/6QJXAnn/6QJYAjr/vAJYAj7/pgJYAkD/0wJYAkX/pAJYAkj/6QJYAkv/6QJYAkz/jQJYAk//pAJYAlH/vAJYAl7/pAJYAmX/pAJYAmb/6QJaAmH/6QJaAmz/0wJaAm3/6QJaAnH/0wJbAlr/0QJbAl7/pAJbAl//6QJbAmD/6QJbAmH/0wJbAmX/pAJbAmb/0wJbAmv/6QJbAm3/0wJbAm7/6QJbAm//vAJbAnH/vAJbAnT/vAJbAnf/6QJbAnn/0wJcAlr/6QJcAlv/6QJcAl7/6QJcAl//6QJcAmD/6QJcAmH/6QJcAmX/0QJcAmb/6QJcAmj/6QJcAmv/6QJcAmz/0wJcAm3/0wJcAm7/6QJcAnH/pAJcAnT/vAJcAnn/6QJdAA//BgJdABH/BgJdAlr/0wJdAl7/pAJdAl//0wJdAmH/6QJdAmX/0wJdAmj/0wJdAmv/0wJdAnn/6QJeAnT/0wJeAncAFwJfAlv/6QJfAl7/0wJfAmD/6QJfAmH/0wJfAmX/vAJfAmz/vAJfAm3/6QJfAm//0wJfAnH/vAJgAlsAFwJgAm0AFwJgAnH/6QJgAnQALQJhAlv/6QJhAl7/0wJhAl//6QJhAmH/6QJhAmX/6QJhAmj/6QJhAmv/6QJhAm3/6QJhAm7/6QJhAnH/vAJhAnT/0wJkAloALQJkAlsALQJkAl8AFwJkAmEAFwJkAmUAFwJkAmgAFwJkAmsAFwJkAmwAFwJkAm0AFwJkAncAFwJlAmgAFwJlAnH/0wJmAlv/6QJmAmH/6QJmAm0AFwJoAl7/0wJoAmD/6QJoAmH/6QJoAmX/0wJoAmz/0wJoAm3/6QJoAm//6QJoAnH/0wJqAl7/0QJqAmH/6QJqAmX/ugJqAmz/0wJqAm3/6QJqAm//6QJqAnH/0wJqAnn/6QJrAmAAFwJrAmgAFwJrAnH/6QJrAncAFwJsAA//HQJsABH/HQJsAlr/6QJsAl7/vAJsAl//6QJsAmAARAJsAmX/0wJsAmj/6QJsAmv/6QJsAm0AFwJtAA//MwJtABH/MwJtAKoAFwJtAlr/6QJtAlsAFwJtAl7/vAJtAl//6QJtAmAAFwJtAmX/0wJtAmb/6QJtAmj/5wJtAmr/6QJtAmv/6QJtAm7/6QJtAnf/6QJtAnn/6QJuAlv/6QJuAl7/0wJuAmX/0wJuAmz/0wJuAm3/6QJuAnH/0wJuAnn/6QJvAlr/6QJvAlv/6QJvAl//6QJvAmH/6QJvAmj/6QJvAmv/6QJvAmz/6QJvAm7/6QJvAnH/0wJwAl//6QJwAmH/6QJwAmj/6QJwAmv/6QJzAl//6QJzAmj/6QJzAm0AFwJ2Amz/YAJ2AnH/dwJ3Al7/0wJ3Al8AFwJ3AmH/6QJ3AmX/0wJ3AmgAFwJ3Amz/0wJ3Am//6QJ3Ann/6QJ4Al7/0wJ4AmD/6QJ4AmX/0wJ4Amb/6QJ4Amz/0wJ4Am//6QJ4AnH/0wKGAA//MwKGABH/MwKIAA//BgKIABH/BgKIAB3/0wKIAB7/0wKIAKn/YAKIAKr/YAKIALL/0wKMAS7/4wKMATH/4wKMATP/4wKMAhD/4wKMAhf/4wKMAiD/4wKMAiL/4wKMAib/4wKMAiv/4wAAAEYDTgAAAAMAAAAAAP4AAAAAAAMAAAABAAoBPgAAAAMAAAACAA4F3gAAAAMAAAADAF4FwAAAAAMAAAAEAAoBPgAAAAMAAAAFABgF7gAAAAMAAAAGAA4GHgAAAAMAAAAHAMQGLAAAAAMAAAAIACYHfAAAAAMAAAAJAIoNpAAAAAMAAAAKBMIA/gAAAAMAAAALAGIOLgAAAAMAAAAMAGYOkAAAAAMAAAANBrQG8AAAAAMAAAAOAFwO9gABAAAAAAAAAH8PUgABAAAAAAABAAUP8QABAAAAAAACAAcSQQABAAAAAAADAC8SMgABAAAAAAAEAAUP8QABAAAAAAAFAAwSSQABAAAAAAAGAAcSYQABAAAAAAAHAGISaAABAAAAAAAIABMTEAABAAAAAAAJAEUWJAABAAAAAAAKAmEP0QABAAAAAAALADEWaQABAAAAAAAMADMWmgABAAAAAAANA1oSygABAAAAAAAOAC4WzQADAAEEAwACAAwW+wADAAEEBQACABAXCwADAAEEBgACAAwXGwADAAEEBwACABAXJwADAAEECAACABAXNwADAAEECQAAAP4AAAADAAEECQABAAoBPgADAAEECQACAA4F3gADAAEECQADAF4FwAADAAEECQAEAAoBPgADAAEECQAFABgF7gADAAEECQAGAA4GHgADAAEECQAHAMQGLAADAAEECQAIACYHfAADAAEECQAJAIoNpAADAAEECQAKBMIA/gADAAEECQALAGIOLgADAAEECQAMAGYOkAADAAEECQANBrQG8AADAAEECQAOAFwO9gADAAEECgACAAwW+wADAAEECwACABAXRwADAAEEDAACAAwW+wADAAEEDgACAAwXVwADAAEEEAACAA4XZwADAAEEEwACABIXdQADAAEEFAACAAwW+wADAAEEFQACABAW+wADAAEEFgACAAwW+wADAAEEGQACAA4XhwADAAEEGwACABAXVwADAAEEHQACAAwW+wADAAEEHwACAAwW+wADAAEEJAACAA4XlQADAAEEKgACAA4XowADAAEELQACAA4XsQADAAEICgACAAwW+wADAAEIFgACAAwW+wADAAEMCgACAAwW+wADAAEMDAACAAwW+wBUAHkAcABlAGYAYQBjAGUAIACpACAAVABoAGUAIABNAG8AbgBvAHQAeQBwAGUAIABDAG8AcgBwAG8AcgBhAHQAaQBvAG4AIABwAGwAYwAuACAARABhAHQAYQAgAKkAIABUAGgAZQAgAE0AbwBuAG8AdAB5AHAAZQAgAEMAbwByAHAAbwByAGEAdABpAG8AbgAgAHAAbABjAC8AVAB5AHAAZQAgAFMAbwBsAHUAdABpAG8AbgBzACAASQBuAGMALgAgADEAOQA5ADAALQAxADkAOQAyAC4AIABBAGwAbAAgAFIAaQBnAGgAdABzACAAUgBlAHMAZQByAHYAZQBkAEMAbwBuAHQAZQBtAHAAbwByAGEAcgB5ACAAcwBhAG4AcwAgAHMAZQByAGkAZgAgAGQAZQBzAGkAZwBuACwAIABBAHIAaQBhAGwAIABjAG8AbgB0AGEAaQBuAHMAIABtAG8AcgBlACAAaAB1AG0AYQBuAGkAcwB0ACAAYwBoAGEAcgBhAGMAdABlAHIAaQBzAHQAaQBjAHMAIAB0AGgAYQBuACAAbQBhAG4AeQAgAG8AZgAgAGkAdABzACAAcAByAGUAZABlAGMAZQBzAHMAbwByAHMAIABhAG4AZAAgAGEAcwAgAHMAdQBjAGgAIABpAHMAIABtAG8AcgBlACAAaQBuACAAdAB1AG4AZQAgAHcAaQB0AGgAIAB0AGgAZQAgAG0AbwBvAGQAIABvAGYAIAB0AGgAZQAgAGwAYQBzAHQAIABkAGUAYwBhAGQAZQBzACAAbwBmACAAdABoAGUAIAB0AHcAZQBuAHQAaQBlAHQAaAAgAGMAZQBuAHQAdQByAHkALgAgACAAVABoAGUAIABvAHYAZQByAGEAbABsACAAdAByAGUAYQB0AG0AZQBuAHQAIABvAGYAIABjAHUAcgB2AGUAcwAgAGkAcwAgAHMAbwBmAHQAZQByACAAYQBuAGQAIABmAHUAbABsAGUAcgAgAHQAaABhAG4AIABpAG4AIABtAG8AcwB0ACAAaQBuAGQAdQBzAHQAcgBpAGEAbAAgAHMAdAB5AGwAZQAgAHMAYQBuAHMAIABzAGUAcgBpAGYAIABmAGEAYwBlAHMALgAgACAAVABlAHIAbQBpAG4AYQBsACAAcwB0AHIAbwBrAGUAcwAgAGEAcgBlACAAYwB1AHQAIABvAG4AIAB0AGgAZQAgAGQAaQBhAGcAbwBuAGEAbAAgAHcAaABpAGMAaAAgAGgAZQBsAHAAcwAgAHQAbwAgAGcAaQB2AGUAIAB0AGgAZQAgAGYAYQBjAGUAIABhACAAbABlAHMAcwAgAG0AZQBjAGgAYQBuAGkAYwBhAGwAIABhAHAAcABlAGEAcgBhAG4AYwBlAC4AIAAgAEEAcgBpAGEAbAAgAGkAcwAgAGEAbgAgAGUAeAB0AHIAZQBtAGUAbAB5ACAAdgBlAHIAcwBhAHQAaQBsAGUAIABmAGEAbQBpAGwAeQAgAG8AZgAgAHQAeQBwAGUAZgBhAGMAZQBzACAAdwBoAGkAYwBoACAAYwBhAG4AIABiAGUAIAB1AHMAZQBkACAAdwBpAHQAaAAgAGUAcQB1AGEAbAAgAHMAdQBjAGMAZQBzAHMAIABmAG8AcgAgAHQAZQB4AHQAIABzAGUAdAB0AGkAbgBnACAAaQBuACAAcgBlAHAAbwByAHQAcwAsACAAcAByAGUAcwBlAG4AdABhAHQAaQBvAG4AcwAsACAAbQBhAGcAYQB6AGkAbgBlAHMAIABlAHQAYwAsACAAYQBuAGQAIABmAG8AcgAgAGQAaQBzAHAAbABhAHkAIAB1AHMAZQAgAGkAbgAgAG4AZQB3AHMAcABhAHAAZQByAHMALAAgAGEAZAB2AGUAcgB0AGkAcwBpAG4AZwAgAGEAbgBkACAAcAByAG8AbQBvAHQAaQBvAG4AcwAuAE0AbwBuAG8AdAB5AHAAZQA6AEEAcgBpAGEAbAAgAFIAZQBnAHUAbABhAHIAOgBWAGUAcgBzAGkAbwBuACAAMwAuADAAMAAgACgATQBpAGMAcgBvAHMAbwBmAHQAKQBBAHIAaQBhAGwATQBUAEEAcgBpAGEAbACuACAAVAByAGEAZABlAG0AYQByAGsAIABvAGYAIABUAGgAZQAgAE0AbwBuAG8AdAB5AHAAZQAgAEMAbwByAHAAbwByAGEAdABpAG8AbgAgAHAAbABjACAAcgBlAGcAaQBzAHQAZQByAGUAZAAgAGkAbgAgAHQAaABlACAAVQBTACAAUABhAHQAIAAmACAAVABNACAATwBmAGYALgAgAGEAbgBkACAAZQBsAHMAZQB3AGgAZQByAGUALgBOAE8AVABJAEYASQBDAEEAVABJAE8ATgAgAE8ARgAgAEwASQBDAEUATgBTAEUAIABBAEcAUgBFAEUATQBFAE4AVAANAAoADQAKAFQAaABpAHMAIAB0AHkAcABlAGYAYQBjAGUAIABpAHMAIAB0AGgAZQAgAHAAcgBvAHAAZQByAHQAeQAgAG8AZgAgAE0AbwBuAG8AdAB5AHAAZQAgAFQAeQBwAG8AZwByAGEAcABoAHkAIABhAG4AZAAgAGkAdABzACAAdQBzAGUAIABiAHkAIAB5AG8AdQAgAGkAcwAgAGMAbwB2AGUAcgBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAHQAZQByAG0AcwAgAG8AZgAgAGEAIABsAGkAYwBlAG4AcwBlACAAYQBnAHIAZQBlAG0AZQBuAHQALgAgAFkAbwB1ACAAaABhAHYAZQAgAG8AYgB0AGEAaQBuAGUAZAAgAHQAaABpAHMAIAB0AHkAcABlAGYAYQBjAGUAIABzAG8AZgB0AHcAYQByAGUAIABlAGkAdABoAGUAcgAgAGQAaQByAGUAYwB0AGwAeQAgAGYAcgBvAG0AIABNAG8AbgBvAHQAeQBwAGUAIABvAHIAIAB0AG8AZwBlAHQAaABlAHIAIAB3AGkAdABoACAAcwBvAGYAdAB3AGEAcgBlACAAZABpAHMAdAByAGkAYgB1AHQAZQBkACAAYgB5ACAAbwBuAGUAIABvAGYAIABNAG8AbgBvAHQAeQBwAGUAJwBzACAAbABpAGMAZQBuAHMAZQBlAHMALgANAAoADQAKAFQAaABpAHMAIABzAG8AZgB0AHcAYQByAGUAIABpAHMAIABhACAAdgBhAGwAdQBhAGIAbABlACAAYQBzAHMAZQB0ACAAbwBmACAATQBvAG4AbwB0AHkAcABlAC4AIABVAG4AbABlAHMAcwAgAHkAbwB1ACAAaABhAHYAZQAgAGUAbgB0AGUAcgBlAGQAIABpAG4AdABvACAAYQAgAHMAcABlAGMAaQBmAGkAYwAgAGwAaQBjAGUAbgBzAGUAIABhAGcAcgBlAGUAbQBlAG4AdAAgAGcAcgBhAG4AdABpAG4AZwAgAHkAbwB1ACAAYQBkAGQAaQB0AGkAbwBuAGEAbAAgAHIAaQBnAGgAdABzACwAIAB5AG8AdQByACAAdQBzAGUAIABvAGYAIAB0AGgAaQBzACAAcwBvAGYAdAB3AGEAcgBlACAAaQBzACAAbABpAG0AaQB0AGUAZAAgAHQAbwAgAHkAbwB1AHIAIAB3AG8AcgBrAHMAdABhAHQAaQBvAG4AIABmAG8AcgAgAHkAbwB1AHIAIABvAHcAbgAgAHAAdQBiAGwAaQBzAGgAaQBuAGcAIAB1AHMAZQAuACAAWQBvAHUAIABtAGEAeQAgAG4AbwB0ACAAYwBvAHAAeQAgAG8AcgAgAGQAaQBzAHQAcgBpAGIAdQB0AGUAIAB0AGgAaQBzACAAcwBvAGYAdAB3AGEAcgBlAC4ADQAKAA0ACgBJAGYAIAB5AG8AdQAgAGgAYQB2AGUAIABhAG4AeQAgAHEAdQBlAHMAdABpAG8AbgAgAGMAbwBuAGMAZQByAG4AaQBuAGcAIAB5AG8AdQByACAAcgBpAGcAaAB0AHMAIAB5AG8AdQAgAHMAaABvAHUAbABkACAAcgBlAHYAaQBlAHcAIAB0AGgAZQAgAGwAaQBjAGUAbgBzAGUAIABhAGcAcgBlAGUAbQBlAG4AdAAgAHkAbwB1ACAAcgBlAGMAZQBpAHYAZQBkACAAdwBpAHQAaAAgAHQAaABlACAAcwBvAGYAdAB3AGEAcgBlACAAbwByACAAYwBvAG4AdABhAGMAdAAgAE0AbwBuAG8AdAB5AHAAZQAgAGYAbwByACAAYQAgAGMAbwBwAHkAIABvAGYAIAB0AGgAZQAgAGwAaQBjAGUAbgBzAGUAIABhAGcAcgBlAGUAbQBlAG4AdAAuAA0ACgANAAoATQBvAG4AbwB0AHkAcABlACAAYwBhAG4AIABiAGUAIABjAG8AbgB0AGEAYwB0AGUAZAAgAGEAdAA6AA0ACgANAAoAVQBTAEEAIAAtACAAKAA4ADQANwApACAANwAxADgALQAwADQAMAAwAAkACQBVAEsAIAAtACAAMAAxADEANAA0ACAAMAAxADcAMwA3ACAANwA2ADUAOQA1ADkADQAKAGgAdAB0AHAAOgAvAC8AdwB3AHcALgBtAG8AbgBvAHQAeQBwAGUALgBjAG8AbQBNAG8AbgBvAHQAeQBwAGUAIABUAHkAcABlACAARAByAGEAdwBpAG4AZwAgAE8AZgBmAGkAYwBlACAALQAgAFIAbwBiAGkAbgAgAE4AaQBjAGgAbwBsAGEAcwAsACAAUABhAHQAcgBpAGMAaQBhACAAUwBhAHUAbgBkAGUAcgBzACAAMQA5ADgAMgBoAHQAdABwADoALwAvAHcAdwB3AC4AbQBvAG4AbwB0AHkAcABlAC4AYwBvAG0ALwBoAHQAbQBsAC8AbQB0AG4AYQBtAGUALwBtAHMAXwBhAHIAaQBhAGwALgBoAHQAbQBsAGgAdAB0AHAAOgAvAC8AdwB3AHcALgBtAG8AbgBvAHQAeQBwAGUALgBjAG8AbQAvAGgAdABtAGwALwBtAHQAbgBhAG0AZQAvAG0AcwBfAHcAZQBsAGMAbwBtAGUALgBoAHQAbQBsAGgAdAB0AHAAOgAvAC8AdwB3AHcALgBtAG8AbgBvAHQAeQBwAGUALgBjAG8AbQAvAGgAdABtAGwALwB0AHkAcABlAC8AbABpAGMAZQBuAHMAZQAuAGgAdABtAGxUeXBlZmFjZSCpIFRoZSBNb25vdHlwZSBDb3Jwb3JhdGlvbiBwbGMuIERhdGEgqSBUaGUgTW9ub3R5cGUgQ29ycG9yYXRpb24gcGxjL1R5cGUgU29sdXRpb25zIEluYy4gMTk5MC0xOTkyLiBBbGwgUmlnaHRzIFJlc2VydmVkQ29udGVtcG9yYXJ5IHNhbnMgc2VyaWYgZGVzaWduLCBBcmlhbCBjb250YWlucyBtb3JlIGh1bWFuaXN0IGNoYXJhY3RlcmlzdGljcyB0aGFuIG1hbnkgb2YgaXRzIHByZWRlY2Vzc29ycyBhbmQgYXMgc3VjaCBpcyBtb3JlIGluIHR1bmUgd2l0aCB0aGUgbW9vZCBvZiB0aGUgbGFzdCBkZWNhZGVzIG9mIHRoZSB0d2VudGlldGggY2VudHVyeS4gIFRoZSBvdmVyYWxsIHRyZWF0bWVudCBvZiBjdXJ2ZXMgaXMgc29mdGVyIGFuZCBmdWxsZXIgdGhhbiBpbiBtb3N0IGluZHVzdHJpYWwgc3R5bGUgc2FucyBzZXJpZiBmYWNlcy4gIFRlcm1pbmFsIHN0cm9rZXMgYXJlIGN1dCBvbiB0aGUgZGlhZ29uYWwgd2hpY2ggaGVscHMgdG8gZ2l2ZSB0aGUgZmFjZSBhIGxlc3MgbWVjaGFuaWNhbCBhcHBlYXJhbmNlLiAgQXJpYWwgaXMgYW4gZXh0cmVtZWx5IHZlcnNhdGlsZSBmYW1pbHkgb2YgdHlwZWZhY2VzIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggZXF1YWwgc3VjY2VzcyBmb3IgdGV4dCBzZXR0aW5nIGluIHJlcG9ydHMsIHByZXNlbnRhdGlvbnMsIG1hZ2F6aW5lcyBldGMsIGFuZCBmb3IgZGlzcGxheSB1c2UgaW4gbmV3c3BhcGVycywgYWR2ZXJ0aXNpbmcgYW5kIHByb21vdGlvbnMuTW9ub3R5cGU6QXJpYWwgUmVndWxhcjpWZXJzaW9uIDMuMDAgKE1pY3Jvc29mdClBcmlhbE1UQXJpYWyoIFRyYWRlbWFyayBvZiBUaGUgTW9ub3R5cGUgQ29ycG9yYXRpb24gcGxjIHJlZ2lzdGVyZWQgaW4gdGhlIFVTIFBhdCAmIFRNIE9mZi4gYW5kIGVsc2V3aGVyZS5OT1RJRklDQVRJT04gT0YgTElDRU5TRSBBR1JFRU1FTlQNCg0KVGhpcyB0eXBlZmFjZSBpcyB0aGUgcHJvcGVydHkgb2YgTW9ub3R5cGUgVHlwb2dyYXBoeSBhbmQgaXRzIHVzZSBieSB5b3UgaXMgY292ZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgYSBsaWNlbnNlIGFncmVlbWVudC4gWW91IGhhdmUgb2J0YWluZWQgdGhpcyB0eXBlZmFjZSBzb2Z0d2FyZSBlaXRoZXIgZGlyZWN0bHkgZnJvbSBNb25vdHlwZSBvciB0b2dldGhlciB3aXRoIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGJ5IG9uZSBvZiBNb25vdHlwZSdzIGxpY2Vuc2Vlcy4NCg0KVGhpcyBzb2Z0d2FyZSBpcyBhIHZhbHVhYmxlIGFzc2V0IG9mIE1vbm90eXBlLiBVbmxlc3MgeW91IGhhdmUgZW50ZXJlZCBpbnRvIGEgc3BlY2lmaWMgbGljZW5zZSBhZ3JlZW1lbnQgZ3JhbnRpbmcgeW91IGFkZGl0aW9uYWwgcmlnaHRzLCB5b3VyIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGlzIGxpbWl0ZWQgdG8geW91ciB3b3Jrc3RhdGlvbiBmb3IgeW91ciBvd24gcHVibGlzaGluZyB1c2UuIFlvdSBtYXkgbm90IGNvcHkgb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlLg0KDQpJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb24gY29uY2VybmluZyB5b3VyIHJpZ2h0cyB5b3Ugc2hvdWxkIHJldmlldyB0aGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IHJlY2VpdmVkIHdpdGggdGhlIHNvZnR3YXJlIG9yIGNvbnRhY3QgTW9ub3R5cGUgZm9yIGEgY29weSBvZiB0aGUgbGljZW5zZSBhZ3JlZW1lbnQuDQoNCk1vbm90eXBlIGNhbiBiZSBjb250YWN0ZWQgYXQ6DQoNClVTQSAtICg4NDcpIDcxOC0wNDAwCQlVSyAtIDAxMTQ0IDAxNzM3IDc2NTk1OQ0KaHR0cDovL3d3dy5tb25vdHlwZS5jb21Nb25vdHlwZSBUeXBlIERyYXdpbmcgT2ZmaWNlIC0gUm9iaW4gTmljaG9sYXMsIFBhdHJpY2lhIFNhdW5kZXJzIDE5ODJodHRwOi8vd3d3Lm1vbm90eXBlLmNvbS9odG1sL210bmFtZS9tc19hcmlhbC5odG1saHR0cDovL3d3dy5tb25vdHlwZS5jb20vaHRtbC9tdG5hbWUvbXNfd2VsY29tZS5odG1saHR0cDovL3d3dy5tb25vdHlwZS5jb20vaHRtbC90eXBlL2xpY2Vuc2UuaHRtbABOAG8AcgBtAGEAbABuAHkAbwBiAHkBDQBlAGoAbgDpAG4AbwByAG0AYQBsAFMAdABhAG4AZABhAHIAZAOaA7EDvQO/A70DuQO6A6wATgBvAHIAbQBhAGEAbABpAE4AbwByAG0A4QBsAG4AZQBOAG8AcgBtAGEAbABlAFMAdABhAG4AZABhAGEAcgBkBB4EMQRLBEcEPQRLBDkATgBhAHYAYQBkAG4AbwB0AGgBsAGhAwAAbgBnAEEAcgByAHUAbgB0AGEAAAAAAgAAAAAAAP8nAJYAAAAAAAAAAAAAAAAAAAAAAAAAAAaKAAABAgEDAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQBiAGMAZABlAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAHIAcwB0AHUAdgB3AHgAeQB6AHsAfAB9AH4AfwCAAIEAggCDAIQAhQCGAIcAiACJAIoAiwCMAI0AjgCPAJAAkQCSAJMAlACVAJYBBACYAJkAmgEFAJwAnQCeAQYAoAChAKIAowCkAKUApgCnAKgAqQCqAKsArQCuAK8AsACxALIAswC0ALUAtgC3ALgAuQC6ALsAvAEHAL4AvwDAAMEAwgDDAMQAxQDGAMcAyADJAMoAywDMAM0AzgDPANAA0QDTANQA1QDWANcA2ADZANoA2wDcAN0A3gDfAOAA4QDiAOMA5ADlAOYA5wDoAOkA6gDrAOwA7QDuAO8A8ADxAPIA8wD0APUA9gD3APgA+QD6APsA/AD9AP4A/wEAAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETARQBFQEWARcBGAEZARoBGwEcAR0BHgEfASABIQEiASMBJAElASYBJwEoASkBKgErASwBLQEuAS8BMAExATIBMwE0ATUBNgE3ATgBOQE6ATsBPAE9AT4BPwFAAUEBQgFDAUQBRQFGAUcBSAFJAUoBSwFMAU0BTgFPAVABUQFSAVMBVAFVAVYBVwFYAVkBWgFbAVwBXQFeAV8BYAFhAWIBYwFkAWUBZgFnAWgBaQFqAWsBbAFtAW4BbwFwAXEBcgFzAXQBdQF2AXcBeAF5AXoBewF8AX0BfgF/AYABgQGCAYMBhAGFAYYBhwGIAYkBigGLAYwBjQGOAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAZsBnAGdAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwG4AbkBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAdQB1QHWAdcB2AHZAdoB2wHcAd0B3gHfAeAB4QHiAeMB5AHlAeYB5wHoAekB6gHrAewB7QHuAe8B8AHxAfIB8wH0AfUB9gH3AfgB+QH6AfsB/AH9Af4B/wIAAgECAgIDAgQCBQIGAgcCCAIJAgoCCwIMAg0CDgIPAhACEQISAhMCFAIVAJ8CFgIXAhgCGQIaAhsCHAIdAh4CHwIgAiECIgIjAiQAlwIlAiYCJwIoAikCKgIrAiwCLQIuAi8CMAIxAjICMwI0AjUCNgI3AjgCOQI6AjsCPAI9Aj4CPwJAAkECQgJDAkQCRQJGAkcCSAJJAkoCSwJMAk0CTgJPAlACUQJSAlMCVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigKLAowCjQKOAo8CkAKRApIAmwKTApQClQKWApcCmAKZApoCmwKcAp0CngKfAqACoQKiAqMCpAKlAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4CvwLAAsECwgLDAsQCxQLGAscCyALJAsoCywLMAs0CzgLPAtAC0QLSAtMC1ALVAtYC1wLYAtkC2gLbAtwC3QLeAt8C4ALhAuIC4wLkAuUC5gLnAugC6QLqAusC7ALtAu4C7wLwAvEC8gLzAvQC9QL2AvcC+AL5AvoC+wL8Av0C/gL/AwADAQMCAwMDBAMFAwYDBwMIAwkDCgMLAwwDDQMOAw8DEAMRAxIDEwMUAxUDFgMXAxgDGQMaAxsDHAMdAx4DHwMgAyEDIgMjAyQDJQMmAycDKAMpAyoDKwMsAy0DLgMvAzADMQMyAzMDNAM1AzYDNwM4AzkDOgM7AzwDPQM+Az8DQANBA0IDQwNEA0UDRgNHA0gDSQNKA0sDTANNA04DTwNQA1EDUgNTA1QDVQNWA1cDWANZA1oDWwNcA10DXgNfA2ADYQNiA2MAvQNkA2UDZgNnA2gDaQNqA2sDbANtA24DbwNwA3EDcgNzA3QDdQN2A3cDeAN5A3oDewN8A30DfgN/A4ADgQOCA4MDhAOFA4YDhwOIA4kDigOLA4wDjQOOA48DkAORA5IDkwOUA5UDlgOXA5gDmQOaA5sDnAOdA54DnwOgA6EDogOjA6QDpQOmA6cDqAOpA6oDqwOsA60DrgOvA7ADsQOyA7MDtAO1A7YDtwO4A7kDugO7A7wDvQO+A78DwAPBA8IDwwPEA8UDxgPHA8gDyQPKA8sDzAPNA84DzwPQA9ED0gPTA9QD1QPWA9cD2APZA9oD2wPcA90D3gPfA+AD4QPiA+MD5APlA+YD5wPoA+kD6gPrA+wD7QPuA+8D8APxA/ID8wP0A/UD9gP3A/gD+QP6A/sD/AP9A/4D/wQABAEEAgQDBAQEBQQGBAcECAQJBAoECwQMBA0EDgQPBBAEEQQSBBMEFAQVBBYEFwQYBBkEGgQbBBwEHQQeBB8EIAQhBCIEIwQkBCUEJgQnBCgEKQQqBCsELAQtBC4ELwQwBDEEMgQzBDQENQQ2BDcEOAQ5BDoEOwQ8BD0EPgQ/BEAEQQRCBEMERARFBEYERwRIBEkESgRLBEwETQROBE8EUARRBFIEUwRUBFUEVgRXBFgEWQRaBFsEXARdBF4EXwRgBGEEYgRjBGQEZQRmBGcEaARpBGoEawRsBG0EbgRvBHAEcQRyBHMEdAR1BHYEdwR4BHkEegR7BHwEfQR+BH8EgASBBIIEgwSEBIUEhgSHBIgEiQSKBIsEjASNBI4EjwSQBJEEkgSTBJQElQSWBJcEmASZBJoEmwScBJ0EngSfBKAEoQSiBKMEpASlBKYEpwSoBKkEqgSrBKwErQSuBK8EsASxBLIEswS0BLUEtgS3BLgEuQS6BLsEvAS9BL4EvwTABMEEwgTDBMQExQTGBMcEyATJBMoEywTMBM0EzgTPBNAE0QTSBNME1ATVBNYE1wTYBNkE2gTbBNwE3QTeBN8E4AThBOIE4wTkBOUE5gTnBOgE6QTqBOsE7ATtBO4E7wTwBPEE8gTzBPQE9QT2BPcE+AT5BPoE+wT8BP0E/gT/BQAFAQUCBQMFBAUFBQYFBwUIBQkFCgULBQwFDQUOBQ8FEAURBRIFEwUUBRUFFgUXBRgFGQUaBRsFHAUdBR4FHwUgBSEFIgUjBSQFJQUmBScFKAUpBSoFKwUsBS0FLgUvBTAFMQUyBTMFNAU1BTYFNwU4BTkFOgU7BTwFPQU+BT8FQAVBBUIFQwVEBUUFRgVHBUgFSQVKBUsFTAVNBU4FTwVQBVEFUgVTBVQFVQVWBVcFWAVZBVoFWwVcBV0FXgVfBWAFYQViBWMFZAVlBWYFZwVoBWkFagVrBWwFbQVuBW8FcAVxBXIFcwV0BXUFdgV3BXgFeQV6BXsFfAV9BX4FfwWABYEFggWDBYQFhQWGBYcFiAWJBYoFiwWMBY0FjgWPBZAFkQWSBZMFlAWVBZYFlwWYBZkFmgWbBZwFnQWeBZ8FoAWhBaIFowWkBaUFpgWnBagFqQWqBasFrAWtBa4FrwWwBbEFsgWzBbQFtQW2BbcFuAW5BboFuwW8Bb0FvgW/BcAFwQXCBcMFxAXFBcYFxwXIBckFygXLBcwFzQXOBc8F0AXRBdIF0wXUBdUF1gXXBdgF2QXaBdsF3AXdBd4F3wXgBeEF4gXjBeQF5QXmBecF6AXpBeoF6wXsBe0F7gXvBfAF8QXyBfMF9AX1BfYF9wX4BfkF+gX7BfwF/QX+Bf8GAAYBBgIGAwYEBgUGBgYHBggGCQYKBgsGDAYNBg4GDwYQBhEGEgYTBhQGFQYWBhcGGAYZBhoGGwYcBh0GHgYfBiAGIQYiBiMGJAYlBiYGJwYoBikGKgYrBiwGLQYuBi8GMAYxBjIGMwY0BjUGNgY3BjgGOQY6BjsGPAY9Bj4GPwZABkEGQgZDBkQGRQZGBkcGSAZJBkoGSwZMBk0GTgZPBlAGUQZSBlMGVAZVBlYGVwZYBlkGWgZbBlwGXQZeBl8GYAZhBmIGYwZkBmUGZgZnBmgGaQZqBmsGbAZtBm4GbwZwBnEGcgZzBnQGdQZ2BncGeAZ5BnoGewZ8Bn0GfgZ/BoAGgQaCBoMGhAaFBoYGhwaIBokGigaLBowGjQaOBS5udWxsEG5vbm1hcmtpbmdyZXR1cm4DbXUxA3BpMQNPaG0ERXVybwdkbWFjcm9uCW92ZXJzY29yZQZtaWRkb3QGQWJyZXZlBmFicmV2ZQdBb2dvbmVrB2FvZ29uZWsGRGNhcm9uBmRjYXJvbgZEc2xhc2gHRW9nb25lawdlb2dvbmVrBkVjYXJvbgZlY2Fyb24GTGFjdXRlBmxhY3V0ZQZMY2Fyb24GbGNhcm9uBExkb3QEbGRvdAZOYWN1dGUGbmFjdXRlBk5jYXJvbgZuY2Fyb24JT2RibGFjdXRlCW9kYmxhY3V0ZQZSYWN1dGUGcmFjdXRlBlJjYXJvbgZyY2Fyb24GU2FjdXRlBnNhY3V0ZQhUY2VkaWxsYQh0Y2VkaWxsYQZUY2Fyb24GdGNhcm9uBVVyaW5nBXVyaW5nCVVkYmxhY3V0ZQl1ZGJsYWN1dGUGWmFjdXRlBnphY3V0ZQRaZG90BHpkb3QFR2FtbWEFVGhldGEDUGhpBWFscGhhBWRlbHRhB2Vwc2lsb24Fc2lnbWEDdGF1A3BoaQ11bmRlcnNjb3JlZGJsCWV4Y2xhbWRibAluc3VwZXJpb3IGcGVzZXRhCWFycm93bGVmdAdhcnJvd3VwCmFycm93cmlnaHQJYXJyb3dkb3duCWFycm93Ym90aAlhcnJvd3VwZG4MYXJyb3d1cGRuYnNlCm9ydGhvZ29uYWwMaW50ZXJzZWN0aW9uC2VxdWl2YWxlbmNlBWhvdXNlDXJldmxvZ2ljYWxub3QKaW50ZWdyYWx0cAppbnRlZ3JhbGJ0CFNGMTAwMDAwCFNGMTEwMDAwCFNGMDEwMDAwCFNGMDMwMDAwCFNGMDIwMDAwCFNGMDQwMDAwCFNGMDgwMDAwCFNGMDkwMDAwCFNGMDYwMDAwCFNGMDcwMDAwCFNGMDUwMDAwCFNGNDMwMDAwCFNGMjQwMDAwCFNGNTEwMDAwCFNGNTIwMDAwCFNGMzkwMDAwCFNGMjIwMDAwCFNGMjEwMDAwCFNGMjUwMDAwCFNGNTAwMDAwCFNGNDkwMDAwCFNGMzgwMDAwCFNGMjgwMDAwCFNGMjcwMDAwCFNGMjYwMDAwCFNGMzYwMDAwCFNGMzcwMDAwCFNGNDIwMDAwCFNGMTkwMDAwCFNGMjAwMDAwCFNGMjMwMDAwCFNGNDcwMDAwCFNGNDgwMDAwCFNGNDEwMDAwCFNGNDUwMDAwCFNGNDYwMDAwCFNGNDAwMDAwCFNGNTQwMDAwCFNGNTMwMDAwCFNGNDQwMDAwB3VwYmxvY2sHZG5ibG9jawVibG9jawdsZmJsb2NrB3J0YmxvY2sHbHRzaGFkZQVzaGFkZQdka3NoYWRlCWZpbGxlZGJveApmaWxsZWRyZWN0B3RyaWFndXAHdHJpYWdydAd0cmlhZ2RuB3RyaWFnbGYGY2lyY2xlCWludmJ1bGxldAlpbnZjaXJjbGUJc21pbGVmYWNlDGludnNtaWxlZmFjZQNzdW4GZmVtYWxlBG1hbGUFc3BhZGUEY2x1YgVoZWFydAdkaWFtb25kC211c2ljYWxub3RlDm11c2ljYWxub3RlZGJsAklKAmlqC25hcG9zdHJvcGhlBm1pbnV0ZQZzZWNvbmQJYWZpaTYxMjQ4CWFmaWk2MTI4OQZIMjIwNzMGSDE4NTQzBkgxODU1MQZIMTg1MzMKb3BlbmJ1bGxldAdBbWFjcm9uB2FtYWNyb24LQ2NpcmN1bWZsZXgLY2NpcmN1bWZsZXgEQ2RvdARjZG90B0VtYWNyb24HZW1hY3JvbgZFYnJldmUGZWJyZXZlBEVkb3QEZWRvdAtHY2lyY3VtZmxleAtnY2lyY3VtZmxleARHZG90BGdkb3QIR2NlZGlsbGEIZ2NlZGlsbGELSGNpcmN1bWZsZXgLaGNpcmN1bWZsZXgESGJhcgRoYmFyBkl0aWxkZQZpdGlsZGUHSW1hY3JvbgdpbWFjcm9uBklicmV2ZQZpYnJldmUHSW9nb25lawdpb2dvbmVrC0pjaXJjdW1mbGV4C2pjaXJjdW1mbGV4CEtjZWRpbGxhCGtjZWRpbGxhDGtncmVlbmxhbmRpYwhMY2VkaWxsYQhsY2VkaWxsYQhOY2VkaWxsYQhuY2VkaWxsYQNFbmcDZW5nB09tYWNyb24Hb21hY3JvbgZPYnJldmUGb2JyZXZlCFJjZWRpbGxhCHJjZWRpbGxhC1NjaXJjdW1mbGV4C3NjaXJjdW1mbGV4BFRiYXIEdGJhcgZVdGlsZGUGdXRpbGRlB1VtYWNyb24HdW1hY3JvbgZVYnJldmUGdWJyZXZlB1VvZ29uZWsHdW9nb25lawtXY2lyY3VtZmxleAt3Y2lyY3VtZmxleAtZY2lyY3VtZmxleAt5Y2lyY3VtZmxleAVsb25ncwpBcmluZ2FjdXRlCmFyaW5nYWN1dGUHQUVhY3V0ZQdhZWFjdXRlC09zbGFzaGFjdXRlC29zbGFzaGFjdXRlCWFub3RlbGVpYQZXZ3JhdmUGd2dyYXZlBldhY3V0ZQZ3YWN1dGUJV2RpZXJlc2lzCXdkaWVyZXNpcwZZZ3JhdmUGeWdyYXZlDXF1b3RlcmV2ZXJzZWQJcmFkaWNhbGV4CWFmaWkwODk0MQllc3RpbWF0ZWQJb25lZWlnaHRoDHRocmVlZWlnaHRocwtmaXZlZWlnaHRocwxzZXZlbmVpZ2h0aHMLY29tbWFhY2NlbnQQdW5kZXJjb21tYWFjY2VudAV0b25vcw1kaWVyZXNpc3Rvbm9zCkFscGhhdG9ub3MMRXBzaWxvbnRvbm9zCEV0YXRvbm9zCUlvdGF0b25vcwxPbWljcm9udG9ub3MMVXBzaWxvbnRvbm9zCk9tZWdhdG9ub3MRaW90YWRpZXJlc2lzdG9ub3MFQWxwaGEEQmV0YQVEZWx0YQdFcHNpbG9uBFpldGEDRXRhBElvdGEFS2FwcGEGTGFtYmRhAk11Ak51AlhpB09taWNyb24CUGkDUmhvBVNpZ21hA1RhdQdVcHNpbG9uA0NoaQNQc2kMSW90YWRpZXJlc2lzD1Vwc2lsb25kaWVyZXNpcwphbHBoYXRvbm9zDGVwc2lsb250b25vcwhldGF0b25vcwlpb3RhdG9ub3MUdXBzaWxvbmRpZXJlc2lzdG9ub3MEYmV0YQVnYW1tYQR6ZXRhA2V0YQV0aGV0YQRpb3RhBWthcHBhBmxhbWJkYQJudQJ4aQdvbWljcm9uA3JobwZzaWdtYTEHdXBzaWxvbgNjaGkDcHNpBW9tZWdhDGlvdGFkaWVyZXNpcw91cHNpbG9uZGllcmVzaXMMb21pY3JvbnRvbm9zDHVwc2lsb250b25vcwpvbWVnYXRvbm9zCWFmaWkxMDAyMwlhZmlpMTAwNTEJYWZpaTEwMDUyCWFmaWkxMDA1MwlhZmlpMTAwNTQJYWZpaTEwMDU1CWFmaWkxMDA1NglhZmlpMTAwNTcJYWZpaTEwMDU4CWFmaWkxMDA1OQlhZmlpMTAwNjAJYWZpaTEwMDYxCWFmaWkxMDA2MglhZmlpMTAxNDUJYWZpaTEwMDE3CWFmaWkxMDAxOAlhZmlpMTAwMTkJYWZpaTEwMDIwCWFmaWkxMDAyMQlhZmlpMTAwMjIJYWZpaTEwMDI0CWFmaWkxMDAyNQlhZmlpMTAwMjYJYWZpaTEwMDI3CWFmaWkxMDAyOAlhZmlpMTAwMjkJYWZpaTEwMDMwCWFmaWkxMDAzMQlhZmlpMTAwMzIJYWZpaTEwMDMzCWFmaWkxMDAzNAlhZmlpMTAwMzUJYWZpaTEwMDM2CWFmaWkxMDAzNwlhZmlpMTAwMzgJYWZpaTEwMDM5CWFmaWkxMDA0MAlhZmlpMTAwNDEJYWZpaTEwMDQyCWFmaWkxMDA0MwlhZmlpMTAwNDQJYWZpaTEwMDQ1CWFmaWkxMDA0NglhZmlpMTAwNDcJYWZpaTEwMDQ4CWFmaWkxMDA0OQlhZmlpMTAwNjUJYWZpaTEwMDY2CWFmaWkxMDA2NwlhZmlpMTAwNjgJYWZpaTEwMDY5CWFmaWkxMDA3MAlhZmlpMTAwNzIJYWZpaTEwMDczCWFmaWkxMDA3NAlhZmlpMTAwNzUJYWZpaTEwMDc2CWFmaWkxMDA3NwlhZmlpMTAwNzgJYWZpaTEwMDc5CWFmaWkxMDA4MAlhZmlpMTAwODEJYWZpaTEwMDgyCWFmaWkxMDA4MwlhZmlpMTAwODQJYWZpaTEwMDg1CWFmaWkxMDA4NglhZmlpMTAwODcJYWZpaTEwMDg4CWFmaWkxMDA4OQlhZmlpMTAwOTAJYWZpaTEwMDkxCWFmaWkxMDA5MglhZmlpMTAwOTMJYWZpaTEwMDk0CWFmaWkxMDA5NQlhZmlpMTAwOTYJYWZpaTEwMDk3CWFmaWkxMDA3MQlhZmlpMTAwOTkJYWZpaTEwMTAwCWFmaWkxMDEwMQlhZmlpMTAxMDIJYWZpaTEwMTAzCWFmaWkxMDEwNAlhZmlpMTAxMDUJYWZpaTEwMTA2CWFmaWkxMDEwNwlhZmlpMTAxMDgJYWZpaTEwMTA5CWFmaWkxMDExMAlhZmlpMTAxOTMJYWZpaTEwMDUwCWFmaWkxMDA5OAlhZmlpMDAyMDgJYWZpaTYxMzUyBXNoZXZhCmhhdGFmc2Vnb2wKaGF0YWZwYXRhaAtoYXRhZnFhbWF0cwVoaXJpcQV0c2VyZQVzZWdvbAVwYXRhaAZxYW1hdHMFaG9sYW0GcXVidXRzBmRhZ2VzaAVtZXRlZwVtYXFhZgRyYWZlBXBhc2VxB3NoaW5kb3QGc2luZG90CHNvZnBhc3VxBGFsZWYDYmV0BWdpbWVsBWRhbGV0AmhlA3ZhdgV6YXlpbgNoZXQDdGV0A3lvZAhmaW5hbGthZgNrYWYFbGFtZWQIZmluYWxtZW0DbWVtCGZpbmFsbnVuA251bgZzYW1la2gEYXlpbgdmaW5hbHBlAnBlCmZpbmFsdHNhZGkFdHNhZGkDcW9mBHJlc2gEc2hpbgN0YXYJZG91YmxldmF2BnZhdnlvZAlkb3VibGV5b2QGZ2VyZXNoCWdlcnNoYXlpbQ1uZXdzaGVxZWxzaWduCnZhdnNoaW5kb3QNZmluYWxrYWZzaGV2YQ5maW5hbGthZnFhbWF0cwpsYW1lZGhvbGFtEGxhbWVkaG9sYW1kYWdlc2gHYWx0YXlpbgtzaGluc2hpbmRvdApzaGluc2luZG90EXNoaW5kYWdlc2hzaGluZG90EHNoaW5kYWdlc2hzaW5kb3QJYWxlZnBhdGFoCmFsZWZxYW1hdHMJYWxlZm1hcGlxCWJldGRhZ2VzaAtnaW1lbGRhZ2VzaAtkYWxldGRhZ2VzaAhoZWRhZ2VzaAl2YXZkYWdlc2gLemF5aW5kYWdlc2gJdGV0ZGFnZXNoCXlvZGRhZ2VzaA5maW5hbGthZmRhZ2VzaAlrYWZkYWdlc2gLbGFtZWRkYWdlc2gJbWVtZGFnZXNoCW51bmRhZ2VzaAxzYW1la2hkYWdlc2gNZmluYWxwZWRhZ2VzaAhwZWRhZ2VzaAt0c2FkaWRhZ2VzaAlxb2ZkYWdlc2gKcmVzaGRhZ2VzaApzaGluZGFnZXNoCHRhdmRhZ2VzCHZhdmhvbGFtB2JldHJhZmUHa2FmcmFmZQZwZXJhZmUJYWxlZmxhbWVkEnplcm93aWR0aG5vbmpvaW5lcg96ZXJvd2lkdGhqb2luZXIPbGVmdHRvcmlnaHRtYXJrD3JpZ2h0dG9sZWZ0bWFyawlhZmlpNTczODgJYWZpaTU3NDAzCWFmaWk1NzQwNwlhZmlpNTc0MDkJYWZpaTU3NDQwCWFmaWk1NzQ1MQlhZmlpNTc0NTIJYWZpaTU3NDUzCWFmaWk1NzQ1NAlhZmlpNTc0NTUJYWZpaTU3NDU2CWFmaWk1NzQ1NwlhZmlpNTc0NTgJYWZpaTU3MzkyCWFmaWk1NzM5MwlhZmlpNTczOTQJYWZpaTU3Mzk1CWFmaWk1NzM5NglhZmlpNTczOTcJYWZpaTU3Mzk4CWFmaWk1NzM5OQlhZmlpNTc0MDAJYWZpaTU3NDAxCWFmaWk1NzM4MQlhZmlpNTc0NjEJYWZpaTYzMTY3CWFmaWk1NzQ1OQlhZmlpNTc1NDMJYWZpaTU3NTM0CWFmaWk1NzQ5NAlhZmlpNjI4NDMJYWZpaTYyODQ0CWFmaWk2Mjg0NQlhZmlpNjQyNDAJYWZpaTY0MjQxCWFmaWk2Mzk1NAlhZmlpNTczODIJYWZpaTY0MjQyCWFmaWk2Mjg4MQlhZmlpNTc1MDQJYWZpaTU3MzY5CWFmaWk1NzM3MAlhZmlpNTczNzEJYWZpaTU3MzcyCWFmaWk1NzM3MwlhZmlpNTczNzQJYWZpaTU3Mzc1CWFmaWk1NzM5MQlhZmlpNTc0NzEJYWZpaTU3NDYwCWFmaWk1MjI1OAlhZmlpNTc1MDYJYWZpaTYyOTU4CWFmaWk2Mjk1NglhZmlpNTI5NTcJYWZpaTU3NTA1CWFmaWk2Mjg4OQlhZmlpNjI4ODcJYWZpaTYyODg4CWFmaWk1NzUwNwlhZmlpNjI5NjEJYWZpaTYyOTU5CWFmaWk2Mjk2MAlhZmlpNTc1MDgJYWZpaTYyOTYyCWFmaWk1NzU2NwlhZmlpNjI5NjQJYWZpaTUyMzA1CWFmaWk1MjMwNglhZmlpNTc1MDkJYWZpaTYyOTY3CWFmaWk2Mjk2NQlhZmlpNjI5NjYJYWZpaTU3NTU1CWFmaWk1MjM2NAlhZmlpNjM3NTMJYWZpaTYzNzU0CWFmaWk2Mzc1OQlhZmlpNjM3NjMJYWZpaTYzNzk1CWFmaWk2Mjg5MQlhZmlpNjM4MDgJYWZpaTYyOTM4CWFmaWk2MzgxMAlhZmlpNjI5NDIJYWZpaTYyOTQ3CWFmaWk2MzgxMwlhZmlpNjM4MjMJYWZpaTYzODI0CWFmaWk2MzgzMwlhZmlpNjM4NDQJYWZpaTYyODgyCWFmaWk2Mjg4MwlhZmlpNjI4ODQJYWZpaTYyODg1CWFmaWk2Mjg4NglhZmlpNjM4NDYJYWZpaTYzODQ5B3VuaTIwMkEHdW5pMjAyQgd1bmkyMDJEB3VuaTIwMkUHdW5pMjAyQwd1bmkyMDZFCHVuaTIwNkY7B3VuaTIwNkEHdW5pMjA2Qgh1bmkyMDZDOwd1bmkyMDZEB3VuaUYwMEEHdW5pRjAwQgd1bmlGMDBDB3VuaUYwMEQHdW5pRjAwRQd1bmlGRkZDCWFmaWk2MzkwNAlhZmlpNjM5MDUJYWZpaTYzOTA2CWFmaWk2MzkwOAlhZmlpNjM5MTAJYWZpaTYzOTEyCWFmaWk2MjkyNwlhZmlpNjM5NDEJYWZpaTYyOTM5CWFmaWk2Mzk0MwlhZmlpNjI5NDMJYWZpaTYyOTQ2CWFmaWk2Mzk0NglhZmlpNjI5NTEJYWZpaTYzOTQ4CWFmaWk2Mjk1MwlhZmlpNjM5NTAJYWZpaTYzOTUxCWFmaWk2Mzk1MglhZmlpNjM5NTMJYWZpaTYzOTU2CWFmaWk2Mzk1OAlhZmlpNjM5NTkJYWZpaTYzOTYwCWFmaWk2Mzk2MQlhZmlpNjQwNDYJYWZpaTY0MDU4CWFmaWk2NDA1OQlhZmlpNjQwNjAJYWZpaTY0MDYxCWFmaWk2Mjk0NQlhZmlpNjQxODQJYWZpaTUyMzk5CWFmaWk1MjQwMAlhZmlpNjI3NTMJYWZpaTU3NDExCWFmaWk2Mjc1NAlhZmlpNTc0MTIJYWZpaTYyNzU1CWFmaWk1NzQxMwlhZmlpNjI3NTYJYWZpaTU3NDE0CWFmaWk2Mjc1OQlhZmlpNjI3NTcJYWZpaTYyNzU4CWFmaWk1NzQxNQlhZmlpNjI3NjAJYWZpaTU3NDE2CWFmaWk2Mjc2MwlhZmlpNjI3NjEJYWZpaTYyNzYyCWFmaWk1NzQxNwlhZmlpNjI3NjQJYWZpaTU3NDE4CWFmaWk2Mjc2NwlhZmlpNjI3NjUJYWZpaTYyNzY2CWFmaWk1NzQxOQlhZmlpNjI3NzAJYWZpaTYyNzY4CWFmaWk2Mjc2OQlhZmlpNTc0MjAJYWZpaTYyNzczCWFmaWk2Mjc3MQlhZmlpNjI3NzIJYWZpaTU3NDIxCWFmaWk2Mjc3NglhZmlpNjI3NzQJYWZpaTYyNzc1CWFmaWk1NzQyMglhZmlpNjI3NzkJYWZpaTYyNzc3CWFmaWk2Mjc3OAlhZmlpNTc0MjMJYWZpaTYyNzgwCWFmaWk1NzQyNAlhZmlpNjI3ODEJYWZpaTU3NDI1CWFmaWk2Mjc4MglhZmlpNTc0MjYJYWZpaTYyNzgzCWFmaWk1NzQyNwlhZmlpNjI3ODYJYWZpaTYyNzg0CWFmaWk2Mjc4NQlhZmlpNTc0MjgJYWZpaTYyNzg5CWFmaWk2Mjc4NwlhZmlpNjI3ODgJYWZpaTU3NDI5CWFmaWk2Mjc5MglhZmlpNjI3OTAJYWZpaTYyNzkxCWFmaWk1NzQzMAlhZmlpNjI3OTUJYWZpaTYyNzkzCWFmaWk2Mjc5NAlhZmlpNTc0MzEJYWZpaTYyNzk4CWFmaWk2Mjc5NglhZmlpNjI3OTcJYWZpaTU3NDMyCWFmaWk2MjgwMQlhZmlpNjI3OTkJYWZpaTYyODAwCWFmaWk1NzQzMwlhZmlpNjI4MDQJYWZpaTYyODAyCWFmaWk2MjgwMwlhZmlpNTc0MzQJYWZpaTYyODA3CWFmaWk2MjgwNQlhZmlpNjI4MDYJYWZpaTU3NDQxCWFmaWk2MjgxMAlhZmlpNjI4MDgJYWZpaTYyODA5CWFmaWk1NzQ0MglhZmlpNjI4MTMJYWZpaTYyODExCWFmaWk2MjgxMglhZmlpNTc0NDMJYWZpaTYyODE2CWFmaWk1NzQxMAlhZmlpNjI4MTUJYWZpaTU3NDQ0CWFmaWk2MjgxOQlhZmlpNjI4MTcJYWZpaTYyODE4CWFmaWk1NzQ0NQlhZmlpNjI4MjIJYWZpaTYyODIwCWFmaWk2MjgyMQlhZmlpNTc0NDYJYWZpaTYyODI1CWFmaWk2MjgyMwlhZmlpNjI4MjQJYWZpaTU3NDQ3CWFmaWk2MjgyOAlhZmlpNTc0NzAJYWZpaTYyODI3CWFmaWk1NzQ0OAlhZmlpNjI4MjkJYWZpaTU3NDQ5CWFmaWk2MjgzMAlhZmlpNTc0NTAJYWZpaTYyODMzCWFmaWk2MjgzMQlhZmlpNjI4MzIJYWZpaTYyODM0CWFmaWk2MjgzNQlhZmlpNjI4MzYJYWZpaTYyODM3CWFmaWk2MjgzOAlhZmlpNjI4MzkJYWZpaTYyODQwCWFmaWk2Mjg0MQlnbHlwaDEwMjELYWZpaTU3NTQzLTILYWZpaTU3NDU0LTILYWZpaTU3NDUxLTIJZ2x5cGgxMDI1CWdseXBoMTAyNgthZmlpNTc0NzEtMgthZmlpNTc0NTgtMgthZmlpNTc0NTctMgthZmlpNTc0OTQtMgthZmlpNTc0NTktMgthZmlpNTc0NTUtMgthZmlpNTc0NTItMglnbHlwaDEwMzQJZ2x5cGgxMDM1CWdseXBoMTAzNgthZmlpNjI4ODQtMgthZmlpNjI4ODEtMgthZmlpNjI4ODYtMgthZmlpNjI4ODMtMgthZmlpNjI4ODUtMgthZmlpNjI4ODItMgthZmlpNTc1MDQtMgthZmlpNTc0NTYtMgthZmlpNTc0NTMtMglnbHlwaDEwNDYJZ2x5cGgxMDQ3C2FmaWk1NzU0My0zC2FmaWk1NzQ1NC0zC2FmaWk1NzQ1MS0zCWdseXBoMTA1MQlnbHlwaDEwNTILYWZpaTU3NDcxLTMLYWZpaTU3NDU4LTMLYWZpaTU3NDU3LTMLYWZpaTU3NDk0LTMLYWZpaTU3NDU5LTMLYWZpaTU3NDU1LTMLYWZpaTU3NDUyLTMJZ2x5cGgxMDYwCWdseXBoMTA2MQlnbHlwaDEwNjILYWZpaTYyODg0LTMLYWZpaTYyODgxLTMLYWZpaTYyODg2LTMLYWZpaTYyODgzLTMLYWZpaTYyODg1LTMLYWZpaTYyODgyLTMLYWZpaTU3NTA0LTMLYWZpaTU3NDU2LTMLYWZpaTU3NDUzLTMJZ2x5cGgxMDcyCWdseXBoMTA3MwthZmlpNTc1NDMtNAthZmlpNTc0NTQtNAthZmlpNTc0NTEtNAlnbHlwaDEwNzcJZ2x5cGgxMDc4C2FmaWk1NzQ3MS00C2FmaWk1NzQ1OC00C2FmaWk1NzQ1Ny00C2FmaWk1NzQ5NC00C2FmaWk1NzQ1OS00C2FmaWk1NzQ1NS00C2FmaWk1NzQ1Mi00CWdseXBoMTA4NglnbHlwaDEwODcJZ2x5cGgxMDg4C2FmaWk2Mjg4NC00C2FmaWk2Mjg4MS00C2FmaWk2Mjg4Ni00C2FmaWk2Mjg4My00C2FmaWk2Mjg4NS00C2FmaWk2Mjg4Mi00C2FmaWk1NzUwNC00C2FmaWk1NzQ1Ni00C2FmaWk1NzQ1My00CWdseXBoMTA5OAlnbHlwaDEwOTkJZ2x5cGgxMTAwCWdseXBoMTEwMQlnbHlwaDExMDIJZ2x5cGgxMTAzCWdseXBoMTEwNAlnbHlwaDExMDUJZ2x5cGgxMTA2CWdseXBoMTEwNwlnbHlwaDExMDgJZ2x5cGgxMTA5CWdseXBoMTExMAlnbHlwaDExMTEJZ2x5cGgxMTEyCWdseXBoMTExMwlnbHlwaDExMTQJZ2x5cGgxMTE1CWdseXBoMTExNglnbHlwaDExMTcJZ2x5cGgxMTE4CWdseXBoMTExOQlnbHlwaDExMjAJZ2x5cGgxMTIxCWdseXBoMTEyMglnbHlwaDExMjMJZ2x5cGgxMTI0CWdseXBoMTEyNQlnbHlwaDExMjYLYWZpaTU3NDQwLTILYWZpaTU3NDQwLTMLYWZpaTU3NDQwLTQFT2hvcm4Fb2hvcm4FVWhvcm4FdWhvcm4JZ2x5cGgxMTM0CWdseXBoMTEzNQlnbHlwaDExMzYHdW5pRjAwNgd1bmlGMDA3B3VuaUYwMDkSY29tYmluaW5naG9va2Fib3ZlB3VuaUYwMTAHdW5pRjAxMwd1bmlGMDExB3VuaUYwMUMHdW5pRjAxNRRjb21iaW5pbmd0aWxkZWFjY2VudAlnbHlwaDExNDcJZ2x5cGgxMTQ4B3VuaUYwMkMIZG9uZ3NpZ24Ib25ldGhpcmQJdHdvdGhpcmRzB3VuaUYwMDgJZ2x5cGgxMTU0CWdseXBoMTE1NQd1bmlGMDBGB3VuaUYwMTIHdW5pRjAxNAd1bmlGMDE2B3VuaUYwMTcHdW5pRjAxOAd1bmlGMDE5B3VuaUYwMUEHdW5pRjAxQgd1bmlGMDFFB3VuaUYwMUYHdW5pRjAyMAd1bmlGMDIxB3VuaUYwMjIUY29tYmluaW5nZ3JhdmVhY2NlbnQUY29tYmluaW5nYWN1dGVhY2NlbnQHdW5pRjAxRBFjb21iaW5pbmdkb3RiZWxvdwd1bmlGMDIzB3VuaUYwMjkHdW5pRjAyQQd1bmlGMDJCB3VuaUYwMjQHdW5pRjAyNQd1bmlGMDI2B3VuaUYwMjcHdW5pRjAyOAd1bmlGMDJEB3VuaUYwMkUHdW5pRjAyRgd1bmlGMDMwB3VuaUYwMzEJQWRvdGJlbG93CWFkb3RiZWxvdwpBaG9va2Fib3ZlCmFob29rYWJvdmUQQWNpcmN1bWZsZXhhY3V0ZRBhY2lyY3VtZmxleGFjdXRlEEFjaXJjdW1mbGV4Z3JhdmUQYWNpcmN1bWZsZXhncmF2ZRRBY2lyY3VtZmxleGhvb2thYm92ZRRhY2lyY3VtZmxleGhvb2thYm92ZRBBY2lyY3VtZmxleHRpbGRlEGFjaXJjdW1mbGV4dGlsZGUTQWNpcmN1bWZsZXhkb3RiZWxvdxNhY2lyY3VtZmxleGRvdGJlbG93C0FicmV2ZWFjdXRlC2FicmV2ZWFjdXRlC0FicmV2ZWdyYXZlC2FicmV2ZWdyYXZlD0FicmV2ZWhvb2thYm92ZQ9hYnJldmVob29rYWJvdmULQWJyZXZldGlsZGULYWJyZXZldGlsZGUOQWJyZXZlZG90YmVsb3cOYWJyZXZlZG90YmVsb3cJRWRvdGJlbG93CWVkb3RiZWxvdwpFaG9va2Fib3ZlCmVob29rYWJvdmUGRXRpbGRlBmV0aWxkZRBFY2lyY3VtZmxleGFjdXRlEGVjaXJjdW1mbGV4YWN1dGUQRWNpcmN1bWZsZXhncmF2ZRBlY2lyY3VtZmxleGdyYXZlFEVjaXJjdW1mbGV4aG9va2Fib3ZlFGVjaXJjdW1mbGV4aG9va2Fib3ZlEEVjaXJjdW1mbGV4dGlsZGUQZWNpcmN1bWZsZXh0aWxkZRNFY2lyY3VtZmxleGRvdGJlbG93E2VjaXJjdW1mbGV4ZG90YmVsb3cKSWhvb2thYm92ZQppaG9va2Fib3ZlCUlkb3RiZWxvdwlpZG90YmVsb3cJT2RvdGJlbG93CW9kb3RiZWxvdwpPaG9va2Fib3ZlCm9ob29rYWJvdmUQT2NpcmN1bWZsZXhhY3V0ZRBvY2lyY3VtZmxleGFjdXRlEE9jaXJjdW1mbGV4Z3JhdmUQb2NpcmN1bWZsZXhncmF2ZRRPY2lyY3VtZmxleGhvb2thYm92ZRRvY2lyY3VtZmxleGhvb2thYm92ZRBPY2lyY3VtZmxleHRpbGRlEG9jaXJjdW1mbGV4dGlsZGUTT2NpcmN1bWZsZXhkb3RiZWxvdxNvY2lyY3VtZmxleGRvdGJlbG93Ck9ob3JuYWN1dGUKb2hvcm5hY3V0ZQpPaG9ybmdyYXZlCm9ob3JuZ3JhdmUOT2hvcm5ob29rYWJvdmUOb2hvcm5ob29rYWJvdmUKT2hvcm50aWxkZQpvaG9ybnRpbGRlDU9ob3JuZG90YmVsb3cNb2hvcm5kb3RiZWxvdwlVZG90YmVsb3cJdWRvdGJlbG93ClVob29rYWJvdmUKdWhvb2thYm92ZQpVaG9ybmFjdXRlCnVob3JuYWN1dGUKVWhvcm5ncmF2ZQp1aG9ybmdyYXZlDlVob3JuaG9va2Fib3ZlDnVob3JuaG9va2Fib3ZlClVob3JudGlsZGUKdWhvcm50aWxkZQ1VaG9ybmRvdGJlbG93DXVob3JuZG90YmVsb3cJWWRvdGJlbG93CXlkb3RiZWxvdwpZaG9va2Fib3ZlCnlob29rYWJvdmUGWXRpbGRlBnl0aWxkZQd1bmkwMUNEB3VuaTAxQ0UHdW5pMDFDRgd1bmkwMUQwB3VuaTAxRDEHdW5pMDFEMgd1bmkwMUQzB3VuaTAxRDQHdW5pMDFENQd1bmkwMUQ2B3VuaTAxRDcHdW5pMDFEOAd1bmkwMUQ5B3VuaTAxREEHdW5pMDFEQgd1bmkwMURDCWdseXBoMTI5MglnbHlwaDEyOTMJZ2x5cGgxMjk0CWdseXBoMTI5NQd1bmkwNDkyB3VuaTA0OTMHdW5pMDQ5Ngd1bmkwNDk3B3VuaTA0OUEHdW5pMDQ5Qgd1bmkwNDlDB3VuaTA0OUQHdW5pMDRBMgd1bmkwNEEzB3VuaTA0QUUHdW5pMDRBRgd1bmkwNEIwB3VuaTA0QjEHdW5pMDRCMgd1bmkwNEIzB3VuaTA0QjgHdW5pMDRCOQd1bmkwNEJBB3VuaTA0QkIHdW5pMDE4Rgd1bmkwMjU5B3VuaTA0RTgHdW5pMDRFOQlnbHlwaDEzMjAJZ2x5cGgxMzIxCWdseXBoMTMyMglnbHlwaDEzMjMJZ2x5cGgxMzI0CWdseXBoMTMyNQlnbHlwaDEzMjYJZ2x5cGgxMzI3CWdseXBoMTMyOAlnbHlwaDEzMjkJZ2x5cGgxMzMwCWdseXBoMTMzMQlnbHlwaDEzMzIJZ2x5cGgxMzMzCWdseXBoMTMzNAlnbHlwaDEzMzUHdW5pMDY1Mwd1bmkwNjU0B3VuaTA2NTUHdW5pMDY3MAd1bmkwNjcxB3VuaUZCNTEHdW5pMDY3MglnbHlwaDEzNDMHdW5pMDY3MwlnbHlwaDEzNDUHdW5pMDY3NQdnbHlwaDQ3B3VuaTA2NzYJZ2x5cGgxMzQ5B3VuaTA2NzcJZ2x5cGgxMzUxB3VuaTA2NzgFZ2x5cGgHdW5pMDY3OQd1bmlGQjY3B3VuaUZCNjgHdW5pRkI2OQd1bmkwNjdBB3VuaUZCNUYHdW5pRkI2MAd1bmlGQjYxB3VuaTA2N0IHdW5pRkI1Mwd1bmlGQjU0B3VuaUZCNTUHdW5pMDY3QwlnbHlwaDEzNjcJZ2x5cGgxMzY4CWdseXBoMTM2OQd1bmkwNjdECWdseXBoMTM3MQlnbHlwaDEzNzIJZ2x5cGgxMzczB3VuaTA2N0YHdW5pRkI2Mwd1bmlGQjY0B3VuaUZCNjUHdW5pMDY4MAd1bmlGQjVCB3VuaUZCNUMHdW5pRkI1RAd1bmkwNjgxCWdseXBoMTM4MwlnbHlwaDEzODQJZ2x5cGgxMzg1B3VuaTA2ODIJZ2x5cGgxMzg3CWdseXBoMTM4OAlnbHlwaDEzODkHdW5pMDY4Mwd1bmlGQjc3B3VuaUZCNzgHdW5pRkI3OQd1bmkwNjg0B3VuaUZCNzMHdW5pRkI3NAd1bmlGQjc1B3VuaTA2ODUJZ2x5cGgxMzk5CWdseXBoMTQwMAlnbHlwaDE0MDEHdW5pMDY4Nwd1bmlGQjdmB3VuaUZCODAHdW5pRkI4MQd1bmkwNjg4B3VuaUZCODkHdW5pMDY4OQlnbHlwaDE0MDkHdW5pMDY4QQlnbHlwaDE0MTEHdW5pMDY4QglnbHlwaDE0MTMHdW5pMDY4Qwd1bmlGQjg1B3VuaTA2OEQHdW5pRkI4Mwd1bmkwNjhFB3VuaUZCODcHdW5pMDY4RglnbHlwaDE0MjEHdW5pMDY5MAlnbHlwaDE0MjMHdW5pMDY5MQd1bmlGQjhEB3VuaTA2OTIJZ2x5cGgxNDI2B3VuaTA2OTMJZ2x5cGgxNDI5B3VuaTA2OTQJZ2x5cGgxNDMxB3VuaTA2OTUJZ2x5cGgxNDMzB3VuaTA2OTYJZ2x5cGgxNDM1B3VuaTA2OTcJZ2x5cGgxNDM3B3VuaTA2OTkJZ2x5cGgxNDM5B3VuaTA2OUEJZ2x5cGgxNDQxCWdseXBoMTQ0MglnbHlwaDE0NDMHdW5pMDY5QglnbHlwaDE0NDUJZ2x5cGgxNDQ2CWdseXBoMTQ0Nwd1bmkwNjlDCWdseXBoMTQ0OQlnbHlwaDE0NTAJZ2x5cGgxNDUxB3VuaTA2OUQJZ2x5cGgxNDUzCWdseXBoMTQ1NAlnbHlwaDE0NTUHdW5pMDY5RQlnbHlwaDE0NTcJZ2x5cGgxNDU4CWdseXBoMTQ1OQd1bmkwNjlGCWdseXBoMTQ2MQd1bmkwNkEwCWdseXBoMTQ2MwlnbHlwaDE0NjQJZ2x5cGgxNDY1B3VuaTA2QTEHdW5pMDZBMglnbHlwaDE0NjgJZ2x5cGgxNDY5CWdseXBoMTQ3MAd1bmkwNkEzCWdseXBoMTQ3MglnbHlwaDE0NzMJZ2x5cGgxNDc0B3VuaTA2QTQHdW5pRkI2Qgd1bmlGQjZDB3VuaUZCNkQHdW5pMDZBNQlnbHlwaDE0ODAJZ2x5cGgxNDgxCWdseXBoMTQ4Mgd1bmkwNkE2B3VuaUZCNkYHdW5pRkI3MAd1bmlGQjcxB3VuaTA2QTcJZ2x5cGgxNDg4B3VuaTA2QTgJZ2x5cGgxNDkwB3VuaTA2QUEJZ2x5cGgxNDkyCWdseXBoMTQ5MwlnbHlwaDE0OTQHdW5pMDZBQglnbHlwaDE0OTYJZ2x5cGgxNDk3CWdseXBoMTQ5OAd1bmkwNkFDCWdseXBoMTUwMAlnbHlwaDE1MDEJZ2x5cGgxNTAyB3VuaTA2QUQHdW5pRkJENAd1bmlGQkQ1B3VuaUZCRDYHdW5pMDZBRQlnbHlwaDE1MDgJZ2x5cGgxNTA5CWdseXBoMTUxMAd1bmkwNkIwCWdseXBoMTUxMglnbHlwaDE1MTMJZ2x5cGgxNTE0B3VuaTA2QjEHdW5pRkI5Qgd1bmlGQjlDB3VuaUZCOUQHdW5pMDZCMglnbHlwaDE1MjAJZ2x5cGgxNTIxCWdseXBoMTUyMgd1bmkwNkIzB3VuaUZCOTcHdW5pRkI5OAd1bmlGQjk5B3VuaTA2QjQJZ2x5cGgxNTI4CWdseXBoMTUyOQlnbHlwaDE1MzAHdW5pMDZCNQlnbHlwaDE1MzIJZ2x5cGgxNTMzCWdseXBoMTUzNAd1bmkwNkI2CWdseXBoMTUzNglnbHlwaDE1MzcJZ2x5cGgxNTM4B3VuaTA2QjcJZ2x5cGgxNTQwCWdseXBoMTU0MQlnbHlwaDE1NDIHdW5pMDZCOAlnbHlwaDE1NDQJZ2x5cGgxNTQ1CWdseXBoMTU0Ngd1bmkwNkI5CWdseXBoMTU0OAlnbHlwaDE1NDkJZ2x5cGgxNTUwB3VuaTA2QkEHdW5pRkI5Rgd1bmkwNkJCB3VuaUZCQTEHdW5pMDZCQwlnbHlwaDE1NTYJZ2x5cGgxNTU3CWdseXBoMTU1OAd1bmkwNkJECWdseXBoMTU2MAd1bmkwNkJGCWdseXBoMTU2MglnbHlwaDE1NjMJZ2x5cGgxNTY0B3VuaTA2QzAHdW5pRkJBNQd1bmkwNkMxB3VuaTA2QzIHdW5pMDZDMwd1bmkwNkM0CWdseXBoMTU3MQd1bmkwNkM1B3VuaUZCRTEHdW5pMDZDNgd1bmlGQkRBB3VuaTA2QzcHdW5pRkJEOAd1bmkwNkM4B3VuaUZCREMHdW5pMDZDOQd1bmlGQkUzB3VuaTA2Q0EJZ2x5cGgxNTgzB3VuaTA2Q0IHdW5pRkJERgd1bmkwNkNECWdseXBoMTU4Nwd1bmkwNkNFCWdseXBoMTU4OQlnbHlwaDE1OTAJZ2x5cGgxNTkxB3VuaTA2Q0YJZ2x5cGgxNTkzB3VuaTA2RDAHdW5pRkJFNQd1bmlGQkU2B3VuaUZCRTcHdW5pMDZEMQlnbHlwaDE1OTkHdW5pMDZEMgd1bmlGQkFGB3VuaTA2RDMHdW5pRkJCMQd1bmkwNkQ0B3VuaTA2RDYHdW5pMDZENwd1bmkwNkQ4B3VuaTA2RDkHdW5pMDZEQQd1bmkwNkRCB3VuaTA2REMHdW5pMDZERAd1bmkwNkRFB3VuaTA2REYHdW5pMDZFMAd1bmkwNkUxB3VuaTA2RTIHdW5pMDZFMwd1bmkwNkU0B3VuaTA2RTUHdW5pMDZFNgd1bmkwNkU3B3VuaTA2RTgHdW5pMDZFOQd1bmkwNkVBB3VuaTA2RUIHdW5pMDZFRAd1bmkwNkZBCWdseXBoMTYyOQlnbHlwaDE2MzAJZ2x5cGgxNjMxB3VuaTA2RkIJZ2x5cGgxNjMzCWdseXBoMTYzNAlnbHlwaDE2MzUHdW5pMDZGQwlnbHlwaDE2MzcJZ2x5cGgxNjM4CWdseXBoMTYzOQd1bmkwNkZEB3VuaTA2RkUHdW5pRkJBNgd1bmlGQkE4B3VuaUZCQTkJZ2x5cGgxNjQ1CWdseXBoMTY0NglnbHlwaDE2NDcJZ2x5cGgxNjQ4CWdseXBoMTY0OQlnbHlwaDE2NTAJZ2x5cGgxNjUxB3VuaUZCMUQHdW5pRkIxRQlnbHlwaDE2NTQHdW5pRkIxRglnbHlwaDE2NTYJZ2x5cGgxNjU3CWdseXBoMTY1OAlnbHlwaDE2NTkJZ2x5cGgxNjYwCWdseXBoMTY2MQlnbHlwaDE2NjIJZ2x5cGgxNjYzCWdseXBoMTY2NAlnbHlwaDE2NjUJZ2x5cGgxNjY2CWdseXBoMTY2NwlnbHlwaDE2NjgJZ2x5cGgxNjY5CWdseXBoMTY3MAlnbHlwaDE2NzEJZ2x5cGgxNjcyCWdseXBoMTY3MwAAAAADAAgAAgARAAH//wADAAEAAE0CvyICOQQmAABA2gW6AABNIEFyaWFsICAgICAgICAg/////wA///5BUkxSMDAAAEAAAAAAAQAAAAwAAAAAAAAAAgAZAugC8AABAvEC+AADAvkDBQABAwgDCAABAwoDDAABAxIDEgADAxsDGwABAx8DIgABAycDNgABA0cDSwADA3wDfQABA38DfwACA4ADgAABA4EDjAACA40D9AABA/UD/AACA/8EAAADBAQEBQADBAgECQADBA0EEgADBBQEFQADBEwETgABBGcEaQABBSoGbAABBnIGiQABAAAAAQAAAAoAPgCiAAFhcmFiAAgACgABTUFSIAAaAAAABwAFAAEAAgADAAUABgAAAAcABgAAAAEAAgADAAQABgAIaXNvbAAyaXNvbAA4aW5pdAA+bWVkaQBEZmluYQBKZmluYQBQbGlnYQBWcmxpZwBeAAAAAQAAAAAAAQABAAAAAQACAAAAAQADAAAAAQAEAAAAAQAFAAAAAgAGAAcAAAABAAYACAASACgARgGoAwoFVAeeCMAAAQABAAEACAACAAgAAQZyAAEAAQXfAAEAAQABAAgAAgAMAAMGagYdA5MAAQADBh8GIAYhAAEAAQABAAgAAgCuAFQDIQMpAy8DMwPzA4sDkQOXA5sDnwOjA6cDswO3A7sDvwPDA8cDywPPA9MD1wPbA98D4wPnA+sD6wPzBSkFKgVMBVAFVAVYBVwFYAVkBWgFbAVwBXQFeAV8BaIFpgWqBa4FsgW0BbgFKgW9BcEFxQXJBc0D0wXFBdUF2QXdBeEF5QXpBe0F8QX1BfkF/QYBBgUGCQYNBUwGFQMhBhsGawY2BjwGXgZiBmYAAQBUAx8DJwMtAzEDNQOJA48DlQOZA50DoQOlA7EDtQO5A70DwQPFA8kDzQPRA9UD2QPdA+ED5QPpA+sD8QUoBSwFSgVOBVIFVgVaBV4FYgVmBWoFbgVyBXYFegWgBaQFqAWsBbAFtAW2BboFuwW/BcMFxwXLBc8F0QXTBdcF2wXfBeMF5wXrBe8F8wX3BfsF/wYDBgcGCwYRBhMGFwYZBh8GNAY6BlwGYAZkAAEAAQABAAgAAgCuAFQDIgMqAzADNAP0A4wDkgOYA5wDoAOkA6gDtAO4A7wDwAPEA8gDzAPQA9QD2APcA+AD5APoA+wD7AP0BSkFKwVNBVEFVQVZBV0FYQVlBWkFbQVxBXUFeQV9BaMFpwWrBa8FswW1BbkFKwW+BcIFxgXKBc4D1AXGBdYF2gXeBeIF5gXqBe4F8gX2BfoF/gYCBgYGCgYOBUwGFgMiBhwGbAY3Bj0GXwZjBmcAAQBUAx8DJwMtAzEDNQOJA48DlQOZA50DoQOlA7EDtQO5A70DwQPFA8kDzQPRA9UD2QPdA+ED5QPpA+sD8QUoBSwFSgVOBVIFVgVaBV4FYgVmBWoFbgVyBXYFegWgBaQFqAWsBbAFtAW2BboFuwW/BcMFxwXLBc8F0QXTBdcF2wXfBeMF5wXrBe8F8wX3BfsF/wYDBgcGCwYRBhMGFwYZBh8GNAY6BlwGYAZkAAEAAQABAAgAAgEiAI4DIAMoAywDLgMyAzYDggOEA4YDiAOKA44DkAOUA5YDmgOeA6IDpgOqA6wDrgOwA7IDtgO6A74DwgPGA8oDzgPSA9YD2gPeA+ID5gPqA+oD7gPwA/ID9gP4A/oD/AUoBSwFPQU/BUEFQwVFBUcFSQVLBU8FUwVXBVsFXwVjBWcFawVvBXMFdwV7BX8FgQWDBYUFhwWJBYsFjQWPBZEFkwWVBZcFmQWbBZ0FnwWhBaUFqQWtBbEFtQW3BboFvAXABcQFyAXMBdAF0gXUBdgF3AZzBeQF6AXsBfAF9AX4BfwGAAYEBggGDAYQBhIGFAYYBhoGHgYfBiAGIQYjBiUGJwYpBisGLQYvBjEGMwY1BjkGOwY/BkEGQwZdBmEGZQABAI4DHwMnAysDLQMxAzUDgQODA4UDhwOJA40DjwOTA5UDmQOdA6EDpQOpA6sDrQOvA7EDtQO5A70DwQPFA8kDzQPRA9UD2QPdA+ED5QPpA+sD7QPvA/ED9QP3A/kD+wUoBSwFPAU+BUAFQgVEBUYFSAVKBU4FUgVWBVoFXgViBWYFagVuBXIFdgV6BX4FgAWCBYQFhgWIBYoFjAWOBZAFkgWUBZYFmAWaBZwFngWgBaQFqAWsBbAFtAW2BboFuwW/BcMFxwXLBc8F0QXTBdcF2wXfBeMF5wXrBe8F8wX3BfsF/wYDBgcGCwYPBhEGEwYXBhkGHQYfBiAGIQYiBiQGJgYoBioGLAYuBjAGMgY0BjgGOgY+BkAGQgZcBmAGZAABAAEAAQAIAAIBIgCOAyADKAMsAy4DMgM2A4IDhAOGA4gDigOOA5ADlAOWA5oDngOiA6YDqgOsA64DsAOyA7YDugO+A8IDxgPKA84D0gPWA9oD3gPiA+YD6gPqA+4D8APyA/YD+AP6A/wFKAUsBT0FPwVBBUMFRQVHBUkFSwVPBVMFVwVbBV8FYwVnBWsFbwVzBXcFewV/BYEFgwWFBYcFiQWLBY0FjwWRBZMFlQWXBZkFmwWdBZ8FoQWlBakFrQWxBbUFtwW6BbwFwAXEBcgFzAXQBdIF1AXYBdwF4AXkBegF7AXwBfQF+AX8BgAGBAYIBgwGEAYSBhQGGAYaBh4GHwYgBiEGIwYlBicGKQYrBi0GLwYxBjMGNQY5BjsGPwZBBkMGXQZhBmUAAQCOAx8DJwMrAy0DMQM1A4EDgwOFA4cDiQONA48DkwOVA5kDnQOhA6UDqQOrA60DrwOxA7UDuQO9A8EDxQPJA80D0QPVA9kD3QPhA+UD6QPrA+0D7wPxA/UD9wP5A/sFKAUsBTwFPgVABUIFRAVGBUgFSgVOBVIFVgVaBV4FYgVmBWoFbgVyBXYFegV+BYAFggWEBYYFiAWKBYwFjgWQBZIFlAWWBZgFmgWcBZ4FoAWkBagFrAWwBbQFtgW6BbsFvwXDBccFywXPBdEF0wXXBdsF3wXjBecF6wXvBfMF9wX7Bf8GAwYHBgsGDwYRBhMGFwYZBh0GHwYgBiEGIgYkBiYGKAYqBiwGLgYwBjIGNAY4BjoGPgZABkIGXAZgBmQABAAJAAEACAABAQIACgAaAHAAsgC8AMYA0ADaAOQA7gD4AAoAFgAeACYALAAyADgAPgBEAEoAUAN/AAMD4APq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]]></data>
	</file>
	<file>
	  <filename>/fonts/GeosansLight.ttf</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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ANX/fgAbANj/bQAbANn/ZwAbANr/bQAbANv/bQAcABv/RAAcABz/2wAcAB3/xQAcAB7/OwAcAB//wwAcACD/1wAcACH/0wAcACL/4AAcACz/xgAcAC3/wwAcAC7/xgAcAC//ywAcADD/xgAcADH/wwAcADL/xgAcADP/xQAcADT/zQAcADX/0AAcADb/xgAcADj/xQAcADn/wwAcADr/xgAcADv/5wAcADz/xgAcAD3/3AAcAD7/vgAcAD//xQAcAED/4AAcAEH/4gAcAEP/ygAcAET/xAAcAEb/xwAcAEf/ugAcAEj/zwAcAEn+XQAcAEr/4wAcAEv/0AAcAE3/xwAcAE7/tAAcAE//1AAcAFD/xwAcAFH/0AAcAFL/yAAcAFP/zgAcAFT/zgAcAFX/zwAcAFb/xQAcAFf/xQAcAFj/xQAcAFn/0AAcAFr/xwAcAFv/1QAcAFz/xQAcAF3/yQAcAF7/0wAcAF//4AAcAGD/xgAcAGH/xAAcAGP/xQAcAGT/wQAcAGf/6AAcAGj/6AAcAKb/wwAcAKj/yQAcALD/xQAcALX/wwAcALv/wgAcAL//zgAcAMD/yQAcAMH/zgAcAML/2gAcAMP/zQAcAMT/0AAcAMb/xwAcAMf/0gAcAMj/zgAcAMn/0gAcAMr/0AAcAMz/wgAcAND/xwAcANH/zgAcANL/ygAcANP/zgAcANT/4QAcANX/zAAcANj/4gAcANn/3AAcANr/4QAcANv/4AAdABv/SQAdABz/xQAdAB3/xgAdAB7/1wAdAB//wQAdACH/yQAdACL/7AAdACP/zAAdACv/0gAdACz/6wAdAC3/6QAdAC7/6wAdAC//xAAdADD/6wAdADH/6QAdADL/6wAdADP/6gAdADT/1wAdADX/yQAdADb/6wAdADf/wgAdADj/5wAdADn/6QAdADr/6wAdADv/4QAdADz/6wAdAD3/xgAdAD7/wwAdAD//6QAdAED/2QAdAEH/2gAdAEL/ywAdAEP/xwAdAET/sgAdAEX/zwAdAEb/7AAdAEf/swAdAEj/1wAdAEn+SQAdAEr/zgAdAEz/0wAdAE3/0wAdAE7/5wAdAFD/1QAdAFL/6wAdAFP/xQAdAFT/xQAdAFX/yAAdAFb/6gAdAFf/yQAdAFj/yQAdAFr/ygAdAFz/yQAdAF3/ywAdAF7/4gAdAF//ywAdAGD/2gAdAGH/1wAdAGL/6AAdAGP/2QAdAGT/tQAdAGf/0AAdAGj/4gAdAKP/0gAdAKT/0gAdAKb/6QAdAKj/wgAdALD/5wAdALX/6QAdALv/5wAdAMD/0AAdAMb/0wAdAMj/0gAdAMz/6gAdAND/wgAdANL/0QAdANj/xQAdANn/6wAdANr/xAAdANv/xAAeABv/ZwAeABz/ygAeAB3/xAAeACH/wQAeACP/yQAeACv/0QAeADT/wQAeAD7/4QAeAED/xQAeAEH/xgAeAEL/ygAeAEP/wQAeAET/5QAeAEf/6wAeAEj/ygAeAEn+iQAeAEr/xgAeAFD/0AAeAGH/0QAeAGP/0wAeAGT/5wAeAKP/0QAeAKT/0QAfABv/YwAfABz/lAAfAB3/1QAfAB7/5gAfAB//0AAfACH/5AAfACP/zgAfACv/3gAfADT/3AAfADf/0QAfAD7/3QAfAED/7AAfAEH/wwAfAEL/6AAfAEP/6AAfAET/xwAfAEb/0AAfAEf/zAAfAEj/wwAfAEn+cQAfAEr/BgAfAGT/0AAfAKP/3gAfAKT/3gAfAM3/5wAgABv/LgAgABz/oAAgAB3/3QAgAB7/wgAgACH/1wAgACP/yAAgACv/5wAgADT/5wAgAD7/igAgAED/rAAgAEH/rgAgAEL/3QAgAEP/cgAgAET/wwAgAEb/xQAgAEf/zwAgAEj/5QAgAEn+dwAgAEr+7QAgAGT/ygAgAGf/wQAgAKP/5wAgAKT/5wAgAM3/7AAhABr/0gAhABv/eQAhABz/nwAhAB3/oQAhAB7+yQAhAB//hQAhACD/dQAhACL/ugAhACP/xgAhACv/NwAhACz/0wAhAC3/lwAhAC7/0wAhADD/0wAhADH/lgAhADL/0wAhADP/0gAhADT/eQAhADb/0wAhADf/kQAhADj/zwAhADn/lwAhADr/0wAhADv/jwAhADz/0wAhAD3/tgAhAD//0AAhAET/6wAhAEf/xgAhAEj/tQAhAEn+hAAhAEr/zAAhAEv/KwAhAE3/IQAhAE7/GwAhAE//LgAhAFD/3wAhAFH/KwAhAFL/0wAhAFP/pwAhAFT/pgAhAFb/0gAhAFf/XAAhAFj/XAAhAFn/KwAhAFr/XQAhAFv/MAAhAFz/XAAhAF3/OwAhAF7/twAhAF//XgAhAGD/cAAhAGH/bgAhAGL/fwAhAGP/bwAhAGT/SwAhAGj/ZwAhAKP/NwAhAKT/NwAhAKb/lwAhALD/zwAhALX/lwAhALv/0AAhAL//kAAhAMD/KgAhAMH/XQAhAML/fgAhAMP/XwAhAMT/YwAhAMb/IQAhAMf/igAhAMj/LgAhAMn/VgAhAMr/WQAhAMz/iQAhAM3/vgAhAM7/4AAhAND/mAAhANH/igAhANL/KgAhANP/XAAhANT/hgAhANX/WwAhANj/tAAhANn/XwAhANr/dwAhANv/dwAiABv/PgAiABz/uwAiAB3/zQAiAB7/3QAiAB//yAAiACH/zgAiACL/xgAiACP/wwAiACv/2gAiACz/xgAiAC3/wgAiAC7/xgAiAC//ywAiADD/xgAiADH/wgAiADL/xgAiADP/xQAiADT/4AAiADX/0AAiADb/xgAiADf/yQAiADj/wQAiADn/wgAiADr/xgAiADv/5gAiADz/xgAiAD3/zAAiAD7/uAAiAD//wwAiAED/zwAiAEH/0AAiAEL/0wAiAEP/vQAiAET/ugAiAEb/4gAiAEf/uQAiAEj/zQAiAEn+UQAiAEr/wgAiAE7/wQAiAFD/2wAiAFL/xgAiAFP/yAAiAFT/xwAiAFX/zgAiAFb/xAAiAFf/0AAiAFj/0AAiAFr/0gAiAFz/0AAiAF7/6QAiAF//0wAiAGD/2QAiAGH/1wAiAGL/6AAiAGP/2AAiAGT/ugAiAGf/1wAiAGj/4AAiAKP/2gAiAKT/2gAiAKb/wwAiAKj/yQAiALD/wQAiALX/wgAiALv/wQAiAMz/xAAiAND/yQAiANj/ywAiANn/xQAiANr/ywAiANv/ywAjABv/TQAjABz/6AAjAB3/2wAjAB7/mwAjAB//zgAjACH/zQAjACL/0QAjACv/qgAjADT/kQAjADf/3wAjAD3/zAAjAD7/xwAjAED/yQAjAEH/yQAjAEL/2AAjAEP/2QAjAET/sgAjAEf/2gAjAEn+eAAjAEr/wgAjAEv/0wAjAE3/yAAjAE7/3wAjAFH/0wAjAFn/0gAjAGf/ywAjAKP/qgAjAKT/qgAjAL//zgAjAMD/yQAjAMH/zgAjAML/0AAjAMP/zQAjAMT/zwAjAMb/yAAjAMf/0AAjAMj/zAAjAMn/0AAjAMr/zwAjAMsAWgAjANH/zQAjANL/yQAjANP/zgAjANX/zQArABr/4gArABv/JQArABz/6AArAB3/tAArAB7/xwArAB//3QArACD/wgArACL/1wArACP/lQArACz/0gArAC3/uQArAC7/0gArADD/0gArADH/uQArADL/0gArADP/0QArADT/0QArADb/0gArADj/0QArADn/uQArADr/0gArADv/sQArADz/0gArAD3/3wArAD7/gQArAD//1gArAED/XwArAEH/YAArAEP/aQArAET/0gArAEb/fwArAEf/xgArAEj/lAArAEn+cQArAEr/HgArAEv/0gArAE3/xgArAE7/ywArAFD/5wArAFH/0gArAFL/0wArAFb/0AArAFn/0gArAF7/zQArAF//zQArAGD/rQArAGH/qgArAGP/rAArAGf/yAArAGj/ugArAKb/uQArAKj/0wArALD/zgArALX/tgArALv/0gArAL//6gArAMD/5QArAMH/6wArAML/wgArAMP/wgArAMT/7AArAMb/xwArAMf/6wArAMj/5wArAMn/7AArAMr/wwArAMz/0wArAM3/4wArANH/6QArANL/5QArANP/6wArANT/wgArANX/wQArANj/6QArANn/4gArANr/6QArANv/7AAsABv/LQAsABz/oQAsAB3/3wAsAB7/xQAsACH/2QAsACP/4wAsACv/6gAsADT/6QAsAD7/lgAsAED/sQAsAEH/tAAsAEL/3wAsAEP/nQAsAET/xQAsAEb/xAAsAEf/zwAsAEj/0AAsAEn+bAAsAEr/nQAsAFD/xAAsAF7/0wAsAGD/zAAsAGH/ywAsAGL/ygAsAGP/ygAsAGT/zwAsAGf/7AAsAKP/6gAsAKT/6gAsAM3/wgAtABr/1wAtABv/OQAtABz/ogAtAB3/pwAtAB7+wAAtAB//zgAtACD/3wAtACH/xAAtACL/yQAtACP/zQAtACv/zAAtACz/zQAtAC3/oAAtAC7/zQAtAC//0gAtADD/zQAtADH/nwAtADL/zQAtADP/zAAtADT/1QAtADX/1wAtADb/zQAtADf/5AAtADj/zAAtADn/oAAtADr/zQAtADv/1QAtADz/zQAtAD3/0QAtAD7/swAtAD//zAAtAED/0AAtAEH/0wAtAEL/xwAtAEP/wAAtAET/rgAtAEX/4AAtAEb/4QAtAEf/mAAtAEj/kwAtAEn+bgAtAEr/sgAtAEv/3gAtAEz/4wAtAE3/0gAtAE7/wAAtAE//4AAtAFD/uAAtAFH/3gAtAFL/0AAtAFP/wgAtAFT/wgAtAFX/1wAtAFb/zQAtAFf/0QAtAFj/0QAtAFn/3gAtAFr/1QAtAFv/4wAtAFz/0QAtAF3/6QAtAF7/twAtAF//1AAtAGD/fwAtAGH/gQAtAGL/1AAtAGP/fAAtAGT/pgAtAGX/5wAtAGb/5QAtAGf/twAtAGj9+gAtAKP/zAAtAKT/zAAtAKb/nwAtAKj/0gAtALD/zAAtALX/oAAtALv/ywAtAL//0QAtAMD/zAAtAMH/zwAtAML/zQAtAMP/zAAtAMT/0QAtAMb/0wAtAMf/0gAtAMj/zgAtAMn/0QAtAMr/zgAtAMz/wwAtAM3/pQAtAM7/wgAtAND/wgAtANH/0QAtANL/zAAtANP/zwAtANT/zQAtANX/zAAtANj/ywAtANn/xAAtANr/yAAtANv/xQAuABv/HAAuABz/sAAuAB3/qgAuAB7/vAAuAB//0gAuACH/mQAuACL/6gAuACv/twAuACz/ygAuAC7/ygAuAC//zwAuADD/ygAuADL/ygAuADP/yQAuADT/ogAuADb/ygAuADf/3wAuADj/yQAuADr/ygAuADz/ygAuAD3/1gAuAD7/eQAuAD//yAAuAED/wgAuAEH/xQAuAEL/owAuAEP/mgAuAET/iAAuAEb/1wAuAEf/vgAuAEn+WQAuAEr/pQAuAE7/6AAuAFL/zAAuAFP/zwAuAFT/zgAuAFX/0wAuAFb/yQAuAGT/xAAuAGf/1wAuAKP/twAuAKT/twAuAKj/zwAuALD/yQAuALv/yAAuAMD/0wAuAMz/ygAuAND/zwAuANL/0wAuANj/0gAuANn/ywAuANr/0gAuANv/0wAvABv/VQAvABz/uQAvAB3/fwAvAB7/QwAvAB//oQAvACD/2wAvACH/3AAvACL/pAAvACP/4QAvACv/4AAvACz/zgAvAC3/3AAvAC7/zgAvAC//0wAvADD/zgAvADH/3AAvADL/zgAvADP/zQAvADT/1gAvADX/2AAvADb/zgAvADf/xQAvADj/zQAvADn/3AAvADr/zgAvADv/1AAvADz/zgAvAD3/qgAvAD7/0AAvAD//zQAvAED/3wAvAEH/4gAvAEL/5QAvAEP/2wAvAET/zgAvAEX/3wAvAEb/wwAvAEf/lgAvAEj/4gAvAEn+bgAvAEr+twAvAEv/vwAvAEz/4wAvAE3/tQAvAE7/mQAvAE//wwAvAFD/5QAvAFH/vwAvAFL/0AAvAFP/zwAvAFT/zgAvAFX/1wAvAFb/zQAvAFf/2wAvAFj/2wAvAFn/vwAvAFr/3QAvAFv/xAAvAFz/2wAvAF3/3wAvAF7/wwAvAF//3gAvAGD/xAAvAGH/wQAvAGP/wwAvAGT/1wAvAGb/5AAvAGf/zQAvAGj/xgAvAKP/4AAvAKT/4AAvAKb/3AAvAKj/0wAvALD/zQAvALX/3AAvALv/zQAvAL//rwAvAMD/qgAvAMH/sAAvAML/sgAvAMP/sQAvAMT/sQAvAMb/tgAvAMf/sgAvAMj/rgAvAMn/swAvAMr/tAAvAMv/0QAvAMz/yQAvAM3/rQAvAM7/zwAvAND/zwAvANH/rgAvANL/qgAvANP/rwAvANT/sQAvANX/sAAvANj/0QAvANn/ywAvANr/0QAvANv/0gAwABv/YwAwABz/ggAwAB3/iwAwAB7/UQAwAB//aQAwACD/6QAwACH/5AAwACL/qAAwACP/wgAwACv/fgAwACz/3AAwAC3/6QAwAC7/3AAwAC//4QAwADD/3AAwADH/6QAwADL/3AAwADP/2wAwADT/VgAwADX/5gAwADb/3AAwADf/tgAwADj/2wAwADn/6QAwADr/3AAwADv/4QAwADz/3AAwAD3/nAAwAD7/3QAwAD//2gAwAED/wQAwAEH/xAAwAEL/6QAwAEP/6QAwAET/yAAwAEX/wQAwAEb/0QAwAEf/pAAwAEj/xwAwAEn+mwAwAEr+4wAwAEv/ygAwAEz/xQAwAE3/wAAwAE7/pgAwAE//zgAwAFD/xgAwAFH/ygAwAFL/3gAwAFP/2wAwAFT/2wAwAFX/5QAwAFb/2wAwAFf/5gAwAFj/5gAwAFn/ygAwAFr/6AAwAFv/zwAwAFz/5gAwAF3/3gAwAF7/0AAwAF//6QAwAGD/zwAwAGH/zAAwAGP/zgAwAGT/1AAwAGb/xgAwAKP/fgAwAKT/fgAwAKb/6QAwAKj/4QAwALD/2wAwALX/6QAwALv/2gAwAL//vAAwAMD/twAwAMH/vQAwAML/vgAwAMP/vgAwAMT/vgAwAMb/wQAwAMf/wAAwAMj/uwAwAMn/wAAwAMr/wQAwAMv/3gAwAMz/1gAwAM3/ugAwAM7/3AAwAND/3AAwANH/uwAwANL/twAwANP/vAAwANT/vgAwANX/vQAwANj/3gAwANn/2AAwANr/3gAwANv/3wAxABv/CwAxABz/jAAxAB3/mQAxAB7/qQAxAB//wAAxACH/iAAxACL/2QAxACP/5QAxACv/pgAxACz/5AAxAC3/xAAxAC7/5AAxAC//6QAxADD/5AAxADH/xAAxADL/5AAxADP/4wAxADT/jgAxADX/wgAxADb/5AAxADf/zQAxADj/4QAxADn/xAAxADr/5AAxADv/6AAxADz/5AAxAD3/xQAxAD7/ZwAxAD//4gAxAED/oQAxAEH/ogAxAEL/kgAxAEP/hQAxAET/dwAxAEX/yQAxAEb/tAAxAEf/rQAxAEj/YAAxAEn+awAxAEr/egAxAEz/zAAxAE7/1wAxAFD/zgAxAFL/5QAxAFP/4AAxAFT/4AAxAFX/wQAxAFb/4wAxAFf/0wAxAFj/0wAxAFz/0wAxAF3/0gAxAF7/2AAxAGH/zgAxAGP/0gAxAGT/fAAxAGb/zgAxAGf/xgAxAGj/zwAxAKP/pgAxAKT/pgAxAKb/xAAxAKj/6AAxALD/4QAxALX/xAAxALv/4AAxAL//wwAxAMD/6gAxAMH/wwAxAML/wQAxAMP/7AAxAMT/xAAxAMf/xAAxAMj/7AAxAMn/xAAxAMr/wQAxAMz/4QAxAM3/xAAxAM7/4QAxAND/4gAxANH/wwAxANL/6wAxANP/wwAxANT/wgAxANX/6wAxANj/6AAxANn/4gAxANr/5wAxANv/5AAyABv/fwAyABz/4gAyAB3/1QAyAB7/6QAyAB//0QAyACL/zgAyACz/ywAyAC7/ywAyAC//0AAyADD/ywAyADL/ywAyADP/ygAyADb/ywAyADj/ygAyADr/ywAyADz/ywAyAD7/zQAyAD//ygAyAET/ywAyAEf/vwAyAEn+TwAyAEr/3wAyAE7/yQAyAFL/zQAyAFb/ygAyAGT/0gAyAKj/0AAyALD/ygAyALv/ygAyAMz/yQAyAND/0AAyANj/0QAyANn/ywAyANr/0QAyANv/0QAzABv/dQAzABz/2AAzAB3/ywAzAB7/3wAzAB//xwAzACH/zwAzACL/xAAzACz/wQAzAC3/zwAzAC7/wQAzAC//xgAzADD/wQAzADH/zwAzADL/wQAzADP/wAAzADT/zwAzADX/ywAzADb/wQAzADj/wAAzADn/zwAzADr/wQAzADv/zwAzADz/wQAzAD3/ywAzAD7/wwAzAD//7AAzAED/0wAzAEP/zwAzAET/wQAzAEX/0gAzAEf/SgAzAEn/jQAzAEr/1QAzAE7/6wAzAFL/wwAzAFP/zQAzAFT/zQAzAFX/ygAzAFb/wAAzAFf/ywAzAFj/ywAzAFr/zQAzAFz/ywAzAF//zwAzAGT/yAAzAKP/0wAzAKb/zwAzAKj/xgAzALD/wAAzALX/zwAzALv/7AAzAMD/0wAzAMz/6wAzAND/xgAzANL/0wAzANj/xwAzANn/wQAzANr/xwAzANv/xwA0ABv/gwA0ABz/2gA0AB3/2QA0AB7/wQA0ACL/0gA0ACv/ygA0ACz/0AA0AC7/0AA0ADD/0AA0ADL/0AA0ADP/zwA0ADb/0AA0ADj/zAA0ADr/0AA0ADz/0AA0AD7/0QA0AD//zgA0AET/6AA0AEf/xQA0AEn+4wA0AEr/5AA0AE7/zQA0AFL/0QA0AFb/zwA0AGT/yAA0AKP/ygA0AKT/ygA0ALD/zAA0ALv/zgA0AMsAWQA0AMz/zgA0ANn/zwA1ABr/yAA1ABv/aQA1ABz/yAA1AB3/oQA1AB7/lwA1AB//wwA1ACD/1wA1ACL/xgA1ACP/qAA1AC3/iAA1ADH/iAA1ADT/0QA1ADn/iAA1ADv/gAA1AD3/zAA1AD7/xwA1AD//xAA1AEP/0wA1AEf/0gA1AEj/gQA1AEn+hgA1AEr/jgA1AEv/2AA1AE3/zgA1AE7/tgA1AE//2wA1AFD/yAA1AFH/2AA1AFn/2AA1AFv/3QA1AF3/0QA1AF7/0AA1AF//5QA1AGD/lwA1AGH/mwA1AGP/qAA1AGj/CAA1AKb/hwA1ALX/iAA1ALv/xAA1AL//zAA1AMD/xwA1AMH/zAA1AML/zAA1AMP/ywA1AMT/zQA1AMb/zwA1AMf/zwA1AMj/ywA1AMn/zwA1AMr/zgA1AM3/5wA1ANH/zAA1ANL/xwA1ANP/zAA1ANT/zAA1ANX/ywA1ANj/3QA1ANn/1gA1ANr/3AA1ANv/2wA2ABr/wgA2ABv/EgA2ABz/1gA2AB3/nAA2AB7/PAA2AB//vgA2ACD/0gA2ACH/zQA2ACL/wQA2ACP/YQA2ACv/0gA2ACz/7AA2AC3/ewA2AC7/7AA2AC//xQA2ADD/7AA2ADH/egA2ADL/7AA2ADP/6wA2ADT/yAA2ADX/ygA2ADb/7AA2ADj/6wA2ADn/ewA2ADr/7AA2ADv/cwA2ADz/7AA2AD3/xwA2AD7/bwA2AD//wAA2AED/XAA2AEH/XwA2AEP/WAA2AET/6wA2AEX/0QA2AEb/dAA2AEf/tAA2AEj/YAA2AEn+6AA2AEr/MAA2AEv/1wA2AE3/zQA2AE7/sQA2AE//2wA2AFD/1gA2AFH/1wA2AFL/wgA2AFP/wwA2AFT/wgA2AFX/yQA2AFb/6wA2AFf/zAA2AFj/zAA2AFn/1wA2AFr/zgA2AFv/3AA2AFz/zAA2AF3/0AA2AF7/4wA2AF//4wA2AGD/iQA2AGH/jQA2AGP/jwA2AGT/yAA2AGf/4gA2AGj/bAA2AKP/0gA2AKT/0gA2AKb/ewA2AKj/xQA2ALD/6wA2ALX/ewA2ALv/wAA2AL//ygA2AMD/xQA2AMH/ywA2AML/zAA2AMP/ywA2AMT/zAA2AMb/zgA2AMf/zgA2AMj/ygA2AMn/zgA2AMr/zwA2AMv/xgA2AMz/6gA2AM3/zgA2AM7/wwA2AND/wwA2ANH/ygA2ANL/xQA2ANP/ygA2ANT/zAA2ANX/ywA2ANj/2gA2ANn/0wA2ANr/2gA2ANv/2gA3ABv/OAA3ABz/0AA3AB3/0gA3AB7/6QA3AB//0QA3ACL/yAA3ACP/0AA3AC3/4gA3ADH/4gA3ADn/4gA3ADv/1gA3AD3/0gA3AD7/lQA3AD//xwA3AED/kwA3AEH/lQA3AEP/kQA3AEb/pQA3AEf/1wA3AEj/1QA3AEn+ewA3AEr/dwA3AE7/6gA3AFD/zgA3AGD/4QA3AGH/3gA3AGP/4AA3AGj/xQA3AKb/4AA3ALX/3wA3ALv/wwA3AM3/yQA3ANn/zwA4ABv/gAA4ABz/4AA4AB3/1AA4AB7/5wA4AB//0wA4ACL/ywA4ACz/zAA4AC7/zAA4AC//0QA4ADD/zAA4ADL/zAA4ADP/ywA4ADb/zAA4ADj/xwA4ADr/zAA4ADz/zAA4AD7/zgA4AD//ygA4AET/zAA4AEf/ywA4AEn+UAA4AEr/4AA4AE7/xwA4AFL/ywA4AFX/0wA4AFb/yQA4AGT/0wA4AKj/zgA4ALD/xwA4ALv/xgA4AMz/ygA4AND/0QA4ANj/0gA4ANn/zAA4ANr/0gA4ANv/0gA5ABv/LgA5ABz/vwA5AB3/uQA5AB7/ygA5AB//4QA5ACH/qQA5ACL/zAA5ACv/xgA5ADT/rgA5ADf/wQA5ADn/5QA5AD3/5QA5AD7/igA5AED/0gA5AEH/0gA5AEL/swA5AEP/qgA5AET/mAA5AEb/6AA5AEf/zgA5AEn+awA5AEr/tQA5AE7/ywA5AGf/5wA5AKP/xgA5AKT/xgA6ABv/PAA6ABz/xQA6AB3/uwA6AB7/IgA6AB//mAA6ACD/xAA6ACH/vQA6ACL/1gA6ACP/zwA6ACv/YwA6ACz/5wA6AC3/5AA6AC7/5wA6AC//7AA6ADD/5wA6ADH/5AA6ADL/5wA6ADP/5gA6ADT/YgA6ADX/xQA6ADb/5wA6ADf/pgA6ADj/5gA6ADn/5AA6ADr/5wA6ADv/3AA6ADz/5wA6AD3/0QA6AD7/tgA6AD//5gA6AED/1wA6AEH/2gA6AEL/wQA6AEP/wgA6AET/oQA6AEX/zAA6AEb/6gA6AEf/rwA6AEj/zgA6AEn+YgA6AEr/6gA6AEv/dQA6AEz/0AA6AE3/awA6AE7/ZgA6AE//eQA6AFD/3QA6AFH/dQA6AFL/6QA6AFP/6wA6AFT/6wA6AFX/xAA6AFb/5gA6AFf/uwA6AFj/uwA6AFn/dAA6AFr/vQA6AFv/egA6AFz/uwA6AF3/lAA6AF7/5QA6AF//vwA6AGD/0QA6AGH/0AA6AGL/3gA6AGP/zwA6AGT/qgA6AGX/0wA6AGb/0QA6AGf/zAA6AGj/qgA6AKP/YwA6AKT/YwA6AKb/5AA6AKj/7AA6ALD/5gA6ALX/5AA6ALv/5gA6AL//qgA6AMD/dwA6AMH/sgA6AML/ywA6AMP/pAA6AMT/lwA6AMb/awA6AMf/pAA6AMj/fAA6AMn/qwA6AMr/nwA6AMz/3wA6AND/5AA6ANH/pAA6ANL/dwA6ANP/sQA6ANT/0gA6ANX/oQA6ANj/zgA6ANn/wwA6ANr/zAA6ANv/xAA7ABv/NgA7ABz/xwA7AB3/wQA7AB7/0gA7AB//6QA7ACH/sQA7ACL/zwA7ACv/zgA7ADT/tgA7ADf/wgA7AD3/vAA7AD7/kgA7AED/2gA7AEH/2gA7AEL/uwA7AEP/sgA7AET/oAA7AEb/vQA7AEf/0QA7AEr/vQA7AE7/zQA7AKP/zgA7AKT/zgA8ABv/WQA8ABz/xAA8AB3/2AA8AB7/rgA8AB//ygA8ACD/4QA8ACL/xgA8ADT/zwA8AD3/wQA8AD7/0wA8AED/yAA8AEH/ywA8AEP/3gA8AEf/zQA8AEn+bAA8AEr/xwA8AEv/2gA8AE3/0AA8AE7/vQA8AE//3QA8AFD/zwA8AFH/2gA8AFn/2gA8AFv/3wA8AF3/zgA8AF//6wA8AGD/0QA8AGH/zwA8AGP/0AA8AGf/0AA8AGj/vQA8AL//1gA8AMD/0QA8AMH/1gA8AML/7AA8AMP/1QA8AMT/1wA8AMb/0QA8AMf/2AA8AMj/1AA8AMn/2AA8AMr/1wA8AMsAWgA8ANH/1gA8ANL/0QA8ANP/1gA8ANT/yAA8ANX/1QA8ANj/wQA8ANn/5AA8ANr/7AA8ANv/6AA9ABv/VAA9ABz/ugA9AB3/1wA9AB7/6QA9AB//0gA9ACH/3AA9ACL/0QA9ACP/4gA9ACv/5wA9ACz/zwA9AC3/zQA9AC7/zwA9ADD/zwA9ADH/zQA9ADL/zwA9ADP/zgA9ADT/wgA9ADb/zwA9ADj/zAA9ADn/zQA9ADr/zwA9ADv/zQA9ADz/zwA9AD7/zgA9AD//zQA9AED/6QA9AEH/6wA9AEL/4QA9AEP/1gA9AET/yAA9AEb/zwA9AEf/wwA9AEj/ngA9AEn+aAA9AEr/sQA9AE7/zAA9AFD/5QA9AFL/0AA9AFP/0QA9AFT/0AA9AFb/zgA9AF7/wwA9AGD/6gA9AGH/6AA9AGP/6AA9AGT/1AA9AGf/4QA9AGj/xgA9AKP/5wA9AKT/5wA9AKb/zQA9ALD/zAA9ALX/zQA9ALv/zQA9AMz/zAA9AM3/2wA9AM7/0gA9AND/0AA9ANj/0wA9ANn/zQA9ANr/0wA+ABr/0gA+ABv/ewA+ABz/mgA+AB3/owA+AB7/ZwA+AB//gQA+ACD/lgA+ACH/0AA+ACL/vAA+ACP/vQA+ACv/hwA+ACz/yAA+AC3/gwA+AC7/yAA+AC//zQA+ADD/yAA+ADH/gwA+ADL/yAA+ADP/xwA+ADT/gwA+ADX/0gA+ADb/yAA+ADf/mQA+ADj/xwA+ADn/gwA+ADr/yAA+ADv/ewA+ADz/yAA+AD3/tAA+AD7/yQA+AD//xwA+AET/4AA+AEf/vAA+AEj/iwA+AEn+dAA+AEr/WwA+AEv/lQA+AE3/iQA+AE7/cwA+AE//lgA+AFD/3AA+AFH/lQA+AFL/ygA+AFP/fwA+AFT/fwA+AFX/0QA+AFb/xwA+AFf/fQA+AFj/fQA+AFn/lQA+AFr/fwA+AFv/mgA+AFz/fQA+AF3/lAA+AF7/lgA+AF//gQA+AGD/kwA+AGH/kAA+AGL/owA+AGP/kgA+AGT/egA+AGj/lwA+AKP/hwA+AKT/hwA+AKb/gwA+AKj/zQA+ALD/xwA+ALX/gwA+ALv/xwA+AL//igA+AMD/hQA+AMH/igA+AML/iwA+AMP/iwA+AMT/jAA+AMb/iQA+AMf/iwA+AMj/hwA+AMn/iwA+AMr/iwA+AMv/0gA+AMz/cQA+AM3/pAA+AM7/uAA+AND/eAA+ANH/iQA+ANL/hQA+ANP/igA+ANT/jAA+ANX/igA+ANj/eQA+ANn/cwA+ANr/eQA+ANv/eQA/ABv/fQA/ABz/1QA/AB3/0gA/AB7/5QA/AB//zQA/ACH/0gA/ACL/ywA/ACv/4QA/ACz/ygA/AC7/ygA/AC//zwA/ADD/ygA/ADL/ygA/ADP/yQA/ADT/5gA/ADb/ygA/ADf/0AA/ADj/xgA/ADr/ygA/ADz/ygA/AD3/0gA/AD7/ywA/AD//xwA/AET/4gA/AEf/vgA/AEn+TwA/AEr/3wA/AE7/xwA/AFL/ygA/AFX/0wA/AFb/yQA/AFf/0wA/AFj/0wA/AFz/0wA/AGT/wgA/AKP/4QA/AKT/4QA/AKj/zwA/ALD/xgA/ALv/xwA/AMz/xwA/AND/zgA/ANj/zwA/ANn/yAA/ANr/zgA/ANv/zgBAABr/ywBAABv/hgBAABz/wABAAB3/uwBAAB7/ZgBAAB//jABAACD/vABAACL/1ABAACP/7ABAACv/ZQBAAC3/zABAADH/zABAADT/gABAADf/mQBAADn/zABAADv/xABAAD3/0QBAAET/xgBAAEf/zQBAAEj/1QBAAEn+cwBAAEr/3wBAAEv/qABAAE3/nQBAAE7/jgBAAE//qgBAAFD/6ABAAFH/qABAAFP/4ABAAFT/3wBAAFf/vABAAFj/vABAAFn/qABAAFr/vQBAAFv/rQBAAFz/vABAAF3/qABAAF7/3QBAAF//vgBAAGD/0ABAAGH/zgBAAGL/3gBAAGP/zwBAAGT/qgBAAGj/zgBAAKP/ZQBAAKT/ZQBAAKb/zABAALX/zABAAL//tABAAMD/nwBAAMH/pABAAML/uwBAAMP/ogBAAMT/pQBAAMb/nQBAAMf/rQBAAMj/ogBAAMn/pgBAAMr/pABAAMz/ygBAAM3/0QBAAND/1QBAANH/rQBAANL/nwBAANP/pABAANT/wwBAANX/ogBAANj/2ABAANn/twBAANr/vQBAANv/uwBBABr/zgBBABv/igBBABz/wwBBAB3/vgBBAB7/aABBAB//kABBACD/vwBBACL/1wBBACP/wgBBACv/ZwBBAC3/zgBBADH/zQBBADT/hABBADf/mwBBADn/zgBBADv/xgBBAD3/1QBBAET/ygBBAEf/0ABBAEj/2ABBAEn+dwBBAEr/4wBBAEv/qwBBAE3/oABBAE7/jwBBAE//rQBBAFD/6wBBAFH/qwBBAFP/5ABBAFT/4wBBAFf/vwBBAFj/vwBBAFn/qwBBAFr/wQBBAFv/sABBAFz/vwBBAF3/rABBAF7/4QBBAF//wgBBAGD/1ABBAGH/0QBBAGL/4gBBAGP/0wBBAGT/rgBBAGj/0gBBAKP/ZwBBAKT/ZwBBAKb/zgBBALX/zgBBAL//twBBAMD/owBBAMH/qABBAML/vwBBAMP/pgBBAMT/qQBBAMb/oABBAMf/sQBBAMj/pQBBAMn/qQBBAMr/qABBAMz/zgBBAND/2QBBANH/sQBBANL/owBBANP/qABBANT/xgBBANX/pgBBANj/2wBBANn/uwBBANr/wABBANv/vwBCABr/3QBCABv/fABCABz/yABCAB3/swBCAB7/wgBCAB//2ABCACD/6wBCACL/1wBCACP/0ABCAC3/rQBCADH/rQBCADn/rQBCADv/pQBCAD3/3QBCAD//0wBCAEf/0gBCAEj/oQBCAEn+dgBCAEr/uwBCAEv/wQBCAE3/4gBCAE7/ywBCAE//xABCAFD/yABCAFH/wQBCAFn/wQBCAFv/xgBCAF7/0gBCAF//xABCAGD/mQBCAGH/nABCAGP/qQBCAGj/hABCAKb/rQBCALX/rQBCALv/0wBCAL//4gBCAMD/3QBCAMH/4gBCAML/4wBCAMP/4gBCAMT/5ABCAMb/4wBCAMf/5ABCAMj/4ABCAMn/5ABCAMr/5ABCAM3/6QBCANH/4gBCANL/3QBCANP/4gBCANT/4wBCANX/4QBCANj/6ABCANn/4QBCANr/5wBCANv/5wBDABr/1wBDABv/eABDABz/ogBDAB3/pABDAB7/SwBDAB//gwBDACD/egBDACL/vQBDACP/zABDACv/awBDACz/0QBDAC3/oABDAC7/0QBDADD/0QBDADH/nwBDADL/0QBDADP/0ABDADT/dwBDADb/0QBDADf/kQBDADj/0ABDADn/oABDADr/0QBDADv/mABDADz/0QBDAD3/uABDAD7/0gBDAD//zwBDAET/6QBDAEf/xQBDAEj/qQBDAEn+cgBDAEr/wwBDAEv/cQBDAE3/ZQBDAE7/VwBDAE//cgBDAFD/3QBDAFH/cQBDAFL/0wBDAFP/tABDAFT/tABDAFb/0ABDAFf/dwBDAFj/dwBDAFn/cQBDAFr/eQBDAFv/dgBDAFz/dwBDAF3/bwBDAF7/vgBDAF//egBDAGD/jABDAGH/igBDAGL/mgBDAGP/iwBDAGT/ZgBDAGj/dQBDAKP/awBDAKT/awBDAKb/oABDALD/0ABDALX/oABDALv/zwBDAL//lwBDAMD/ZwBDAMH/bABDAML/jQBDAMP/bQBDAMT/bgBDAMb/ZQBDAMf/kQBDAMj/aQBDAMn/bQBDAMr/awBDAMz/lgBDAM3/ywBDAM7/wQBDAND/pgBDANH/kQBDANL/aABDANP/bABDANT/lABDANX/agBDANj/uwBDANn/cwBDANr/hgBDANv/hQBEABr/ywBEABv/bgBEABz/3QBEAB3/owBEAB7+0gBEAB//xABEACD/2ABEACL/yABEACP/wABEACz/yABEAC3/kwBEAC7/yABEAC//zQBEADD/yABEADH/kgBEADL/yABEADP/xwBEADT/zgBEADX/0gBEADb/yABEADj/xwBEADn/kwBEADr/yABEADv/iwBEADz/yABEAD3/zQBEAD7/yQBEAD//xgBEAET/xQBEAEf/vABEAEj/pQBEAEn+cABEAEr/vQBEAEv/zQBEAE3/wwBEAE7/twBEAE//0QBEAFD/3ABEAFH/zQBEAFL/ygBEAFP/7ABEAFT/6wBEAFX/0QBEAFb/xwBEAFf/wgBEAFj/wgBEAFn/zQBEAFr/xABEAFv/0gBEAFz/wgBEAF3/xgBEAF7/4gBEAF//2QBEAGD/fwBEAGH/gwBEAGP/hQBEAGT/6gBEAGj/ZABEAKb/kwBEAKj/zQBEALD/xwBEALX/kwBEALv/xgBEAL//zABEAMD/xgBEAMH/ywBEAML/ygBEAMP/yQBEAMT/zQBEAMb/xABEAMf/zwBEAMj/ywBEAMn/zwBEAMr/zABEAMz/7ABEAM3/zwBEAM7/wQBEAND/wQBEANH/ywBEANL/xwBEANP/ywBEANT/ygBEANX/yABEANj/2wBEANn/1QBEANr/2gBEANv/1wBFABr/ywBFABv/TgBFABz/sQBFAB3/pQBFAB7/twBFAB//zQBFACD/5wBFACH/0ABFACL/yABFACP/3ABFACv/2ABFACz/xgBFAC3/0wBFAC7/xgBFAC//ywBFADD/xgBFADH/0wBFADL/xgBFADP/xQBFADT/2wBFADX/0ABFADb/xgBFADf/5wBFADj/zQBFADn/0wBFADr/xgBFADv/xgBFADz/xgBFAD3/0ABFAD7/yABFAD//xQBFAED/1wBFAEH/2QBFAEL/3QBFAEP/1ABFAET/xgBFAEb/6ABFAEj/3gBFAEr/rgBFAEv/6ABFAE3/3ABFAE7/wwBFAE//6QBFAFD/3QBFAFH/5ABFAFL/0gBFAFP/0gBFAFb/0ABFAFf/0ABFAFj/0ABFAFn/6ABFAFv/6QBFAFz/0ABFAF3/5wBFAF7/6QBFAF//1ABFAGD/5QBFAGH/4wBFAGL/ygBFAGP/5QBFAGT/zQBFAGj/6gBFAKP/2ABFAKT/2ABFAKb/0QBFAKj/yQBFALD/ywBFALX/0ABFALv/wgBFAL//3QBFAMD/2ABFAMH/3QBFAML/3gBFAMP/3gBFAMT/3wBFAMb/2wBFAMf/3gBFAMj/2gBFAMn/3gBFAMr/3wBFAMz/xABFAM3/ywBFAND/ywBFANH/3ABFANL/2ABFANP/3QBFANT/3wBFANX/3QBFANj/zABFANn/xgBFANr/zABFANv/zABGABv/PQBGAB3/1QBGAB7/6wBGACL/zABGACP/zQBGAC3/5ABGADH/5ABGADn/5ABGADv/3ABGAD7/mQBGAD//ywBGAED/iABGAEH/iwBGAEP/gwBGAEb/mABGAEf/3gBGAEj/zgBGAEn+/gBGAEr/awBGAE7/xABGAGD/4wBGAGH/3wBGAGP/4QBGAGj/wQBGAKb/5ABGALX/5ABG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AD3/xwBMAD7/cQBMAD//7ABMAED/iwBMAEH/iwBMAEL/yABMAEP/WABMAET/rgBMAEX/0QBMAEb/pQBMAEf/tQBMAEj/owBMAEn+aQBMAEr+ewBMAE7/6ABMAFD/1QBMAFL/wQBMAFP/zwBMAFT/zgBMAFX/yQBMAFb/6wBMAF7/6wBMAGD/yABMAGH/xQBMAGL/ygBMAGP/xgBMAGT/0ABMAGf/0gBMAKP/zwBMAKT/zwBMAKb/wgBMAKj/wgBMALD/5gBMALX/6gBMALv/5wBMAMv/zABMAMz/xABMAM3/1QBMAM7/zwBMAND/zgBMANj/zABMANn/xgBMANr/zQBMANv/0gBNABv/CgBNABz/xgBNAB3/sgBNAB7/dgBNAB//zABNACL/1wBNACP/5gBNACv/0gBNACz/5QBNAC3/yABNAC7/5QBNAC//6gBNADD/5QBNADH/yABNADL/5QBNADP/5ABNADT/ywBNADX/wwBNADb/5QBNADj/4QBNADn/yABNADr/5QBNADv/7ABNADz/5QBNAD3/0wBNAD7/ZgBNAD//4wBNAED/nABNAEH/ngBNAEL/xwBNAEP/VQBNAET/6gBNAEX/ywBNAEb/tABNAEf/swBNAEn+eQBNAEr+1gBNAEv/wgBNAEz/zgBNAE3/4wBNAE7/5gBNAE//xQBNAFD/0QBNAFH/wgBNAFL/5gBNAFP/6ABNAFT/6ABNAFX/wgBNAFb/5ABNAFf/wwBNAFj/wwBNAFn/wgBNAFr/xgBNAFv/xwBNAFz/wwBNAF//xwBNAGD/0QBNAGH/0ABNAGP/0ABNAGT/4gBNAGb/0ABNAGf/3QBNAKP/0gBNAKT/0gBNAKb/yABNAKj/6gBNALD/4QBNALX/yABNALv/4wBNAL//wgBNAMD/wgBNAMH/wgBNAML/wgBNAMP/wgBNAMT/wgBNAMb/5ABNAMf/xQBNAMj/xQBNAMn/xQBNAMr/xQBNAMv/6ABNAMz/6ABNAM3/xgBNAM7/6ABNAND/wwBNANH/wgBNANL/wgBNANP/wgBNANT/wgBNANX/wgBNANj/xwBNANn/xwBNANr/xwBNANv/xwBOABv/iABOABz/6wBOAB3/3gBOAB7/xQBOADj/0QBOAD//0gBOAEf/0wBOAEn+WABOAEr/6ABOAE7/zwBOALD/zgBOALv/zwBOAMsAXgBOAMz/0gBOANn/0wBPABv/LABPABz/qgBPAB3/xgBPAB7/3QBPAB//4QBPACH/7ABPACP/3ABPACv/ygBPADT/xgBPAD3/6ABPAD7/iABPAED/nQBPAEH/nwBPAEL/4QBPAEP/ZwBPAET/1wBPAEb/uABPAEf/zwBPAEj/wQBPAEn+cwBPAEr+7ABPAE8AJwBPAFD/xQBPAF7/0QBPAGD/yQBPAGH/yQBPAGL/ygBPAGP/xwBPAGT/0gBPAGf/6wBPAKP/ygBPAKT/ygBPAM3/6ABQABv/kABQABz/pgBQAB3/swBQAB7/qQBQAB//vgBQACL/0wBQACv/ygBQADT/xgBQADf/4QBQAD3/wgBQAET/0ABQAEn/HABQAEr/nQBQAEv/ygBQAE3/6wBQAE7/0ABQAE//zQBQAFD/3wBQAFH/ygBQAFP/0QBQAFb/2QBQAFn/yQBQAFv/zwBQAF7/4QBQAKP/ygBQAKT/ygBQAL//6QBQAMD/5ABQAMH/6gBQAML/6wBQAMP/6gBQAMT/6wBQAMb/7ABQAMf/wQBQAMj/6QBQAMn/wQBQAMr/wgBQAM3/6ABQANH/6QBQANL/5ABQANP/6QBQANT/6wBQANX/6gBRABv/JQBRABz/7ABRAB3/3QBRAB7/0ABRAB//zgBRADj/zwBRADv/zQBRAD7/gQBRAD//0QBRAED/vgBRAEH/wQBRAEP/fwBRAEb/1gBRAEr+0QBRALD/zwBRALv/0QBRAM3/4QBSABv/DwBSABz/0gBSAB3/xgBSAB7/2QBSAB//wwBSACH/ywBSACL/6gBSACP/2wBSACv/zABSACz/6QBSAC3/xABSAC7/6QBSAC//wgBSADD/6QBSADH/xABSADL/6QBSADP/6ABSADT/ywBSADX/xwBSADb/6QBSADj/5QBSADn/xABSADr/6QBSADv/6ABSADz/6QBSAD3/xwBSAD7/bABSAD//5wBSAED/kwBSAEH/lABSAEL/0wBSAEP/VABSAET/6ABSAEX/zQBSAEb/rABSAEf/6gBSAEj/xwBSAEn+ggBSAEr+ywBSAEz/0ABSAE7/5ABSAFD/6ABSAFL/6QBSAFP/yABSAFT/xwBSAFX/xABSAFb/5gBSAF7/0ABSAGD/0ABSAGH/zQBSAGP/zwBSAGb/0gBSAKP/zABSAKT/zABSAKb/xABSAKj/6gBSALD/4gBSALX/7ABSALv/4wBSAMD/0gBSAMv/xgBSAMz/6gBSAM3/zwBSAM7/yABSAND/xwBSANL/0wBSANj/xwBSANn/7ABSANr/xwBSANv/zABTABv+yQBTABz/1QBTAB3/xwBTAB7/6gBTAB//xwBTACL/yQBTACz/0ABTAC7/0ABTADD/0ABTADL/0ABTADP/zwBTADb/0ABTADj/zwBTADr/0ABTADz/0ABTAD3/ywBTAD7/QwBTAD//zgBTAED/2wBTAEH/3gBTAEP/SgBTAET/yQBTAEb/wwBTAEf/RABTAEn/hQBTAEr/swBTAE7/zgBTAFL/0gBTAFb/zwBTAFf/0ABTAFj/0ABTAFr/0gBTAFz/0ABTAGT/zQBTAGf/bgBTALD/zwBTALv/zgBTAMz/zABTANj/ywBTANn/yQBTANr/zQBTANv/ywBUABv+yABUABz/1QBUAB3/xwBUAB7/6gBUAB//yABUACL/yABUACz/zwBUAC7/zwBUADD/zwBUADL/zwBUADP/zgBUADb/zwBUADj/ywBUADr/zwBUADv/xQBUADz/zwBUAD3/ywBUAD7/QgBUAD//zQBUAED/2gBUAEH/3QBUAEP/SQBUAET/yQBUAEb/wgBUAEf/xwBUAEr/sgBUAE7/zgBUAFL/0ABUAFb/zgBUAFf/0ABUAFj/0ABUAFr/0gBUAFz/0ABUAGT/zQBUAKb/zABUALD/ywBUALv/zQBUAMz/ywBUAND/0wBUANj/ywBUANn/yQBUANr/zABUANv/ywBVABv/KQBVABz/7ABVAB3/mgBVAB7/jgBVAB//vABVACD/0ABVACL/vgBVACP/6QBVAC3/3gBVADH/3gBVADT/yQBVADn/3gBVADv/1gBVAD3/xQBVAD7/hQBVAD//1ABVAED/oQBVAEH/ogBVAEP/bQBVAEb/twBVAEf/ygBVAEj/0gBVAEn+ogBVAEr+6wBVAEv/4ABVAE3/1gBVAE7/rABVAE//4wBVAFD/6wBVAFH/4ABVAFn/4ABVAFv/5QBVAF7/0ABVAF//wQBVAGD/0ABVAGH/zgBVAGP/zwBVAGf/zQBVAGj/zgBVAKb/3gBVALD/0gBVALX/2wBVALv/0ABVAL//ygBVAMD/xQBVAMH/ywBVAML/zgBVAMP/zgBVAMT/zQBVAMb/1wBVAMf/zQBVAMj/yQBVAMn/zgBVAMr/0QBVAM3/5wBVANH/ygBVANL/xgBVANP/ywBVANT/zwBVANX/zgBVANj/2wBVANn/1QBVANr/2wBVANv/3gBWABv/dQBWABz/2ABWAB3/ywBWAB7/3gBWAB//xwBWACH/zwBWACL/wwBWACv/0gBWACz/wQBWAC3/zgBWAC7/wQBWAC//xgBWADD/wQBWADH/zgBWADL/wQBWADP/wABWADT/zwBWADX/ywBWADb/wQBWADj/wABWADn/zgBWADr/wQBWADv/zgBWADz/wQBWAD3/ywBWAD7/wwBWAD//7ABWAED/0wBWAEP/zwBWAET/wQBWAEX/0gBWAEf/7ABWAEn/jQBWAEr/1QBWAE7/6QBWAFL/wwBWAFP/zQBWAFT/zQBWAFX/ygBWAFb/wABWAFf/ywBWAFj/ywBWAFr/zQBWAFz/ywBWAF//zwBWAGT/yABWAKP/0gBWAKT/0gBWAKb/zgBWAKj/xABWALD/6gBWALX/ywBWALv/6QBWAMD/0wBWAMz/6wBWAND/xgBWANL/0wBWANj/xwBWANn/wQBWANr/xwBWANv/xwBXABv/GgBXABz/4QBXAB3/0QBXAB7/xQBXAB//wgBXACL/zABXACP/4wBXACz/yQBXAC7/yQBXAC//zgBXADD/yQBXADL/yQBXADP/yABXADX/0wBXADb/yQBXADj/yABXADr/yQBXADz/yQBXAD3/yABXAD7/dgBXAD//xwBXAED/mwBXAEH/ngBXAEP/VgBXAEb/tABXAEf/vQBXAEj/ywBXAEn+TgBXAEr+xwBXAFD/0gBXAFL/ywBXAFP/zABXAFT/ywBXAFX/0gBXAFb/yABXAFf/0wBXAFj/0wBXAFz/0wBXAGD/zQBXAGH/zQBXAGP/ywBXAGT/0ABXAGf/6wBXAKj/zgBXALD/yABXALv/xwBXAMv/zABXAMz/zABXAM3/1gBXAM7/zABXAND/0wBYABv/GgBYABz/4ABYAB3/0QBYAB7/xABYAB//wQBYACL/ywBYACP/2wBYACz/yQBYAC7/yQBYAC//zgBYADD/yQBYADL/yQBYADP/yABYADX/0wBYADb/yQBYADj/yABYADr/yQBYADz/yQBYAD3/yABYAD7/dgBYAD//xgBYAED/lABYAEH/lwBYAEP/VQBYAEb/rgBYAEf/vQBYAEj/6gBYAEn+fwBYAEr+xwBYAFD/yQBYAFL/ywBYAFP/zABYAFT/ywBYAFX/0gBYAFb/yABYAFf/0wBYAFj/0wBYAFz/0wBYAGD/xABYAGH/xQBYAGP/wwBYAGT/zwBYAGf/6gBYAKj/zgBYALD/yABYALv/xgBYAMv/zABYAMz/zABYAM3/1gBYAM7/zABYAND/0wBZABv/MQBZABz/rABZAB3/4wBZAB//0wBZACH/wgBZACP/3QBZACv/0ABZADT/yABZAD7/jQBZAED/nwBZAEH/ogBZAEL/5QBZAEP/bQBZAET/2gBZAEb/uwBZAEf/1ABZAEj/3gBZAEn+awBZAEr+5ABZAFD/ywBZAFkAKwBZAGD/ygBZAGH/ywBZAGL/zABZAGP/yQBZAGT/0gBZAGf/xABZAKP/0ABZAKT/0ABZAM3/wQBaABv/PQBaABz/uABaAB3/wwBaACH/zgBaACP/6ABaADv/zQBaAD7/mQBaAED/qwBaAEH/rgBaAEL/xQBaAEP/eQBaAET/5gBaAEb/xwBaAEf/3ABaAEj/6QBaAEn+7ABaAEr+8ABaAGD/0wBaAGP/6wBaAGT/3gBaAGf/ywBaAKb/0gBaAM3/zQBbABv/KwBbABz/xgBbAB3/4wBbAD7/hwBbAED/xABbAEH/xwBbAEP/hQBbAEb/3ABbAEr+1wBbAM3/5wBcABv/JgBcABz/YABcAB3/WQBcAB7/ewBcAB//bQBcACH/jwBcACL/vABcACv/qgBcADT/hQBcADf/4ABcAD3/kQBcAD7/ggBcAD//0gBcAED/twBcAEH/ugBcAEL/iQBcAEP/cgBcAET/gABcAEb/zwBcAEf/yQBcAEn/DABcAEr+7gBcAEv/7ABcAE3/4wBcAE7/5ABcAE//xQBcAFH/7ABcAFn/wQBcAFv/xQBcAF3/0QBcAGT/zQBcAGf/3ABcAKP/qgBcAKT/qgBcALv/0gBcAL//7ABcAMD/7ABcAMH/7ABcAML/7ABcAMP/7ABcAMT/7ABcAMb/5ABcAMf/xQBcAMj/xQBcAMn/xQBcAMr/xQBcAM3/4gBcANH/wQBcANL/wQBcANP/wQBcANT/wQBcANX/wQBdABv/OQBdABz/2wBdAB3/wgBdACP/0wBdAD7/lQBdAED/tQBdAEH/uABdAEP/dQBdAEb/zgBdAEf/3QBdAEn+0gBdAEr+8gBdAGT/0ABdAGf/0ABdAM3/yQBeABv/MgBeABz/pwBeAB3/mQBeAB7/twBeAB//xABeACH/zwBeACL/2gBeACv/1wBeADT/zwBeADf/6gBeAD3/yABeAD7/jgBeAED/0QBeAEH/1ABeAEL/1QBeAEP/mgBeAET/wQBeAEb/6ABeAEf/1QBeAEn/JQBeAEr/pABeAEv/0QBeAE3/xwBeAE7/3wBeAFH/0QBeAFn/0ABeAGf/xABeAKP/1wBeAKT/1wBeAL//xQBeAMD/wQBeAMH/xgBeAML/xgBeAMP/xgBeAMT/xwBeAMb/xwBeAMf/yABeAMj/xgBeAMn/yQBeAMr/yQBeAM3/xQBeANH/xABeANL/wgBeANP/xQBeANT/xgBeANX/xQBfABv/IABfABz/uQBfAB3/1wBfAB7/ygBfAB//yABfACH/ygBfACL/0QBfACv/zgBfACz/zwBfAC7/zwBfADD/zwBfADL/zwBfADP/zgBfADT/zwBfADb/zwBfADj/yQBfADr/zwBfADz/zwBfAD3/zgBfAD7/fABfAD//ywBfAED/uABfAEH/uwBfAEL/6gBfAEP/eQBfAET/4ABfAEb/0QBfAEf/wwBfAEn+kABfAEr+zQBfAFL/zgBfAFP/0gBfAFT/0ABfAFb/zgBfAGT/yABfAGf/4ABfAKP/zgBfAKT/zgBfALD/yQBfALv/ywBfAMv/0gBfAMz/0gBfAM3/3ABfAM7/0gBgABv/OwBgABz/cQBgAB3/lABgAB7/sQBgAB//sABgACH/pgBgACL/4QBgACv/uABgADT/pwBgADf/6ABgAD3/vwBgAD7/lwBgAED/0wBgAEH/1QBgAEL/mwBgAEP/lABgAET/kgBgAEb/6wBgAEf/3QBgAEn+fwBgAEr++ABgAE3/ywBgAE7/zgBgAFH/0wBgAGf/zQBgAKP/uABgAKT/uABgAMb/ygBgAM3/ywBhABj/qgBhABv/NABhABz/cABhAB3/kQBhAB7/rwBhAB//rwBhACH/pQBhACL/2gBhACv/sABhADT/pgBhADf/4gBhAD3/uQBhAD7/kABhAED/zABhAEH/zwBhAEL/mQBhAEP/jQBhAET/kABhAEb/5QBhAEf/1wBhAEn+eQBhAEr+8gBhAEv/0gBhAE3/xwBhAE7/xwBhAFH/0ABhAFn/0gBhAGf/xgBhAKP/sABhAKT/sABhAL//zgBhAMD/zgBhAMH/zgBhAML/zgBhAMP/zgBhAMT/zgBhAMb/xgBhAMf/0QBhAMj/0QBhAMn/0QBhAMr/0QBhAM3/wwBhANH/zgBhANL/zgBhANP/zgBhANT/zgBhANX/zgBiABv/QwBiAB3/wABiAB7/1gBiAB//2ABiACL/6ABiAD3/4gBiAD7/nwBiAED/2QBiAEH/3ABiAEP/mQBiAEb/xQBiAEf/5gBiAEn+pwBiAEr++wBiAEv/0QBiAE3/xgBiAE7/yQBiAFH/0QBiAFn/0QBiAL//0QBiAMD/0QBiAMH/0QBiAML/0QBiAMP/0QBiAMT/0QBiAMb/xwBiAM3/0wBiANH/0QBiANL/0QBiANP/0QBiANT/0QBiANX/0QBjABv/NQBjABz/aQBjAB3/jQBjAB7/qgBjAB//qQBjACH/ngBjACL/3ABjACv/sgBjADT/nwBjADf/4wBjAD3/ugBjAD7/kQBjAED/zQBjAEH/0ABjAEL/lQBjAEP/jwBjAET/iQBjAEb/5gBjAEf/2ABjAEn/XgBjAEr+8wBjAEv/0ABjAE3/xQBjAE7/yABjAE//0gBjAFH/wwBjAFn/zwBjAFv/5ABjAGf/xwBjAKP/sgBjAKT/sgBjAL//0ABjAMD/0ABjAMH/0ABjAML/0ABjAMP/0ABjAMT/0ABjAMb/5ABjAMf/0gBjAMj/0gBjAMn/0gBjAMr/0gBjAM3/xQBjANH/zwBjANL/zwBjANP/zwBjANT/zwBjANX/zwBkABv/JABkABz/5wBkAB3/qwBkAB7/aQBkAB//wQBkACL/0gBkADP/0gBkADj/0gBkAD3/zQBkAD7/gABkAD//0QBkAED/vQBkAEH/wABkAEP/fgBkAEb/1QBkAEf/xwBkAEn+bwBkAEr+6ABkAEv/5ABkAE3/2wBkAE7/3ABkAE//6QBkAFH/5ABkAFb/0gBkAFn/5ABkAFv/6QBkAGf/xQBkALD/0gBkALv/0QBkAL//5ABkAMD/5ABkAMH/5ABkAML/5ABkAMP/5ABkAMT/5ABkAMb/3ABkAMf/6QBkAMj/6QBkAMn/6QBkAMr/6QBkAM3/4ABkANH/5ABkANL/5ABkANP/5ABkANT/5ABkANX/5ABlABv/jwBlABz/zgBlAB3/sABlAB7/wwBlAB//2ABlACD/xgBlACL/1ABlACP/6ABlACv/yABlAC3/2gBlADH/2gBlADT/yQBlADn/2gBlADv/zQBlAD3/2wBlAEj/3wBlAEn/RwBlAEr/uQBlAEv/xgBlAE3/5wBlAE7/zgBlAE//yABlAFD/zABlAFP/5ABlAFf/7ABlAFj/7ABlAFn/xgBlAFv/xgBlAFz/7ABlAF3/xQBlAF7/xgBlAF//3wBlAGD/wgBlAGH/7ABlAGP/wwBlAGT/6QBlAGj/3wBlAKP/yABlAKT/yABlAKb/2ABlALX/1wBlAL//6ABlAMD/4gBlAMH/6ABlAML/6QBlAMP/6ABlAMT/6QBlAMb/5gBlAMf/6ABlAMj/5ABlAMn/6QBlAMr/6QBlAMz/4ABlAND/5QBlANH/5wBlANL/4wBlANP/6ABlANT/6QBlANX/6ABlANj/1wBlANn/0QBlANr/1wBlANv/1wBmABv/lABmABz/ywBmAB3/6gBmAB7/0QBmAEr/yABmAMsAagBnABv/iABnABz/6gBnAB3/4gBnAB7/yQBnAET/0wBnAEf/0gBnAEr/6wBnAGUAYABnAMsAYgBoABv/OABoABz++QBoAB3/ZgBoAB7/oABoAB/+RABoACH/bwBoACL/1gBoACv/uwBoADT/iQBoADf/xQBoAD3/ewBoAD7/lABoAED/zgBoAEH/0ABoAEL/fABoAEP/fABoAET/ZwBoAEb/5QBoAEf/2wBoAEn+dQBoAEr+7gBoAGf/4wBoAKP/uwBoAKT/uwBoAM3/yACjABr/5wCjABv/KgCjABz/wQCjAB3/uQCjAB7/zACjAB//4gCjACD/xwCjACL/3ACjACP/mgCjAC3/vgCjADH/vgCjADn/vgCjADv/tgCjAD3/5ACjAD7/hgCjAD//2wCjAED/ZACjAEH/ZQCjAEP/bgCjAEb/hACjAEf/ywCjAEj/mQCjAEn+dgCjAEr/IwCjAE3/ywCjAE7/0ACjAFD/7ACjAF7/0gCjAF//0gCjAGD/sgCjAGH/rwCjAGP/sQCjAGf/zQCjAGj/vwCjAKb/vgCjALD/zgCjALX/tQCjALv/1ACjAL//wwCjAMD/6gCjAMH/xACjAML/xwCjAMP/xwCjAMT/xQCjAMb/zACjAMf/xACjAMj/7ACjAMn/xQCjAMr/yACjAM3/6ACjANH/wgCjANL/6gCjANP/xACjANT/xwCjANX/xgCjANj/wgCjANn/5wCjANr/wgCjANv/xQCkABr/4gCkABv/JQCkABz/6ACkAB3/tACkAB7/xwCkAB//3QCkACD/wgCkACL/1wCkACP/lQCkACz/0gCkAC3/uQCkAC7/0gCkADD/0gCkADH/uQCkADL/0gCkADP/0QCkADT/0QCkADb/0gCkADj/0QCkADn/uQCkADr/0gCkADv/sQCkADz/0gCkAD3/3wCkAD7/gQCkAD//1gCkAED/XwCkAEH/YACkAEP/aQCkAET/0gCkAEb/fwCkAEf/xgCkAEj/lACkAEn+cQCkAEr/HgCkAEv/0gCkAE3/xgCkAE7/ywCkAFD/5wCkAFH/0gCkAFL/0wCkAFb/0ACkAFn/0gCkAF7/zQCkAF//zQCkAGD/rQCkAGH/qgCkAGP/rACkAGf/yACkAGj/ugCkAKb/uQCkAKj/ywCkALD/yQCkALX/sACkALv/zgCkAL//6gCkAMD/5QCkAMH/6wCkAML/wgCkAMP/wgCkAMT/7ACkAMb/xwCkAMf/6wCkAMj/5wCkAMn/7ACkAMr/wwCkAMz/0wCkAM3/4wCkANH/6QCkANL/5QCkANP/6wCkANT/wgCkANX/wQCkANj/6QCkANn/4gCkANr/6QCkANv/7ACmABr/1wCmABv/OQCmABz/ogCmAB3/pwCmAB7+wACmAB//zgCmACD/3wCmACH/xACmACL/yQCmACP/zQCmACv/zACmACz/zQCmAC3/oACmAC7/zQCmAC//0gCmADD/zQCmADH/nwCmADL/zQCmADP/zACmADT/1QCmADX/1wCmADb/zQCmADf/4wCmADj/zACmADn/oACmADr/zQCmADv/kQCmADz/zQCmAD3/0QCmAD7/swCmAD//zACmAED/0ACmAEH/0wCmAEL/xwCmAEP/wACmAET/rgCmAEX/4QCmAEb/4QCmAEf/mQCmAEj/kwCmAEn+bgCmAEr/sgCmAEv/3gCmAEz/4wCmAE3/0gCmAE7/wACmAE//4ACmAFD/uACmAFH/4gCmAFL/0ACmAFP/wgCmAFT/ygCmAFX/1wCmAFb/zQCmAFf/0QCmAFj/0QCmAFn/3gCmAFr/3QCmAFv/2gCmAFz/0QCmAF3/6QCmAF7/twCmAF//1ACmAGD/gACmAGH/gQCmAGL/1ACmAGP/gwCmAGT/pgCmAGX/6ACmAGb/5gCmAGf/ugCmAGj9+gCmAKP/zACmAKT/zACmAKb/nACmAKj/0gCmALD/zACmALX/oACmALv/ywCmAL//0QCmAMD/zACmAMH/zwCmAML/zQCmAMP/zACmAMT/0QCmAMb/1QCmAMf/0gCmAMj/zgCmAMn/0QCmAMr/zgCmAMz/wwCmAM3/pQCmAM7/wgCmAND/wgCmANH/0QCmANL/zACmANP/zwCmANT/zQCmANX/zACmANj/ywCmANn/xACmANr/yACmANv/xQCoABr/0gCoABv/VQCoABz/uACoAB3/fwCoAB7/QgCoAB//oQCoACD/2wCoACH/3ACoACL/owCoACP/4ACoACv/3gCoACz/zgCoAC3/2gCoAC7/zgCoAC//0wCoADD/zgCoADH/2gCoADL/zgCoADP/zQCoADT/1gCoADX/2ACoADb/zgCoADf/xACoADj/zQCoADn/2gCoADr/zgCoADv/0gCoADz/zgCoAD3/qgCoAD7/0ACoAD//zQCoAED/3wCoAEH/4QCoAEL/5QCoAEP/2wCoAET/zgCoAEX/3wCoAEb/wwCoAEf/lwCoAEj/4gCoAEn+bgCoAEr+twCoAEv/vwCoAEz/4gCoAE3/tQCoAE7/lgCoAE//wwCoAFD/5ACoAFH/vwCoAFL/zwCoAFP/zwCoAFT/zgCoAFX/1gCoAFb/zACoAFf/2wCoAFj/2wCoAFn/vwCoAFr/3QCoAFv/xACoAFz/2wCoAF3/3wCoAF7/wwCoAF//3gCoAGD/xACoAGH/wQCoAGP/wwCoAGT/1wCoAGb/5ACoAGf/zgCoAGj/xgCoAKP/4ACoAKT/4ACoAKb/2gCoAKj/zgCoALD/ygCoALX/1gCoALv/yQCoAL//rwCoAMD/qgCoAMH/sACoAML/sgCoAMP/sQCoAMT/sQCoAMb/tgCoAMf/sgCoAMj/rgCoAMn/swCoAMr/tACoAMv/0QCoAMz/yQCoAM3/rQCoAM7/zwCoAND/zwCoANH/rgCoANL/qgCoANP/rwCoANT/sQCoANX/sACoANj/0QCoANn/ywCoANr/0QCoANv/0gCwABv/gACwABz/4ACwAB3/1ACwAB7/5wCwAB//0wCwACL/ywCwACz/zACwAC7/zACwAC//0QCwADD/zACwADL/zACwADP/ywCwADb/zACwADj/xwCwADr/zACwADz/zACwAD7/zgCwAD//ygCwAET/zACwAEf/yQCwAEn+UACwAEr/4ACwAE7/wwCwAFL/yQCwAFX/0QCwAFb/xwCwAGT/0wCwAKT/0wCwAKj/wwCwALD/6ACwALX/yQCwALv/6QCwAMz/ygCwAND/0QCwANj/0gCwANn/zACwANr/0gCwANv/0gC1ABv/LgC1ABz/vwC1AB3/uQC1AB7/ygC1AB//4QC1ACH/qQC1ACL/zAC1ACv/wwC1ADT/rgC1ADf/6gC1AD3/5QC1AD7/igC1AED/0gC1AEH/0gC1AEL/swC1AEP/qgC1AET/mAC1AEb/6AC1AEf/ywC1AEn+awC1AEr/tQC1AE7/xwC1AGf/5QC1AKP/vQC1AKT/vQC1AKj/0gC1ALD/ygC1ALv/ywC7ABv/fQC7ABz/0wC7AB3/0QC7AB7/4gC7AB//zQC7ACH/0gC7ACL/yQC7ACv/3QC7ACz/ygC7AC7/ygC7AC//zwC7ADD/ygC7ADL/ygC7ADP/yQC7ADT/5gC7ADb/ygC7ADf/zAC7ADj/xAC7ADr/ygC7ADz/ygC7AD3/0gC7AD7/ywC7AD//xwC7AET/4gC7AEf/uwC7AEn+TwC7AEr/3wC7AE7/wgC7AFL/xwC7AFX/0AC7AFb/xgC7AFf/0wC7AFj/0wC7AFz/0wC7AGT/wgC7AKP/2QC7AKT/2QC7AKj/wwC7ALD/6AC7ALX/yQC7ALv/6QC7AMz/xwC7AND/zgC7ANj/zwC7ANn/yAC7ANr/zgC7ANv/zgDAABv/GADAABz/3ADAAB3/zgDAAB7/6ADAAB//zADAACL/ygDAACz/xwDAAC7/xwDAAC//zADAADD/xwDAADL/xwDAADP/xgDAADX/0QDAADb/xwDAADj/wwDAADr/xwDAADz/xwDAAD3/zwDAAD7/dADAAD//xQDAAED/twDAAEH/ugDAAEP/jgDAAET/xgDAAEb/zwDAAEf/uwDAAEj/zQDAAEn+WADAAEr/jADAAE7/yQDAAFL/yADAAFP/ygDAAFT/yQDAAFX/0ADAAFb/xgDAAGf/6QDAAKj/zADAALD/wwDAALv/xQDAAMz/xQDAAM3/1QDAAM7/ywDAAND/ygDAANj/zADAANn/xgDAANr/zADAANv/zQC/ABv/EwC/ABz/1gC/AB3/yQC/AB7/4wC/AB//xgC/ACH/0AC/ACL/xAC/ACz/wgC/AC3/0QC/AC7/wgC/AC//xwC/ADD/wgC/ADH/0QC/ADL/wgC/ADP/wQC/ADT/0AC/ADX/zAC/ADb/wgC/ADj/6gC/ADn/0QC/ADr/wgC/ADv/0QC/ADz/wgC/AD3/ygC/AD7/bwC/AD//7AC/AED/sgC/AEH/tQC/AEP/cwC/AET/wQC/AEX/0wC/AEb/ygC/AEf/tgC/AEj/wQC/AEn+WAC/AEr+6AC/AE7/xAC/AFL/wgC/AFP/yQC/AFT/yAC/AFX/ywC/AFb/wQC/AGf/5AC/AKb/0QC/AKj/xwC/ALD/6gC/ALX/0QC/ALv/7AC/AMD/0wC/AMv/yAC/AMz/7AC/AM3/0QC/AM7/ygC/AND/yQC/ANL/0wC/ANj/xwC/ANn/wQC/ANr/yAC/ANv/zADBABv/GADBABz/2wDBAB3/zQDBAB7/6QDBAB//ywDBACL/ygDBACz/xwDBAC7/xwDBAC//zADBADD/xwDBADL/xwDBADP/xgDBADX/0QDBADb/xwDBADj/wwDBADr/xwDBADz/xwDBAD3/zwDBAD7/dADBAD//xQDBAED/twDBAEH/ugDBAEP/eADBAET/xwDBAEb/zwDBAEf/uwDBAEj/zQDBAEn+WADBAEr/PgDBAE7/ygDBAFL/yADBAFP/zADBAFT/ygDBAFX/0ADBAFb/xgDBAGf/6QDBAKj/zADBALD/wwDBALv/xQDBAMv/zQDBAMz/xQDBAM3/3QDBAM7/zADBAND/zADBANj/zADBANn/xwDBANr/zADBANv/zwDDABv/GQDDABz/2ADDAB3/yQDDAB7/7ADDAB//yQDDACL/ygDDACz/yADDAC7/yADDAC//zQDDADD/yADDADL/yADDADP/xwDDADX/0gDDADb/yADDADj/wwDDADr/yADDADz/yADDAD3/zQDDAD7/dQDDAD//xQDDAED/tQDDAEH/uADDAEP/dgDDAET/zADDAEb/zQDDAEf/vADDAEj/ywDDAEn+WADDAEr/OwDDAE7/0ADDAFL/yADDAFP/ygDDAFT/yQDDAFX/0QDDAFb/xwDDAGf/6gDDAKj/zQDDALD/wwDDALv/xQDDAMv/ywDDAMz/yADDAM3/1QDDAM7/ygDDAND/ywDDANj/zQDDANn/ywDDANr/zgDDANv/zQDCABv/GgDCABz/2QDCAB3/ywDCAB7/7ADCAB//ywDCACL/ywDCACz/yQDCAC7/yQDCAC//zgDCADD/yQDCADL/yQDCADP/yADCADX/0wDCADb/yQDCADj/xADCADr/yQDCADz/yQDCAD3/zwDCAD7/dgDCAD//xgDCAED/twDCAEH/uQDCAEP/jgDCAET/ywDCAEb/zgDCAEf/vADCAEj/zgDCAEn+WADCAEr/ewDCAE7/zwDCAFL/yQDCAFP/zADCAFT/ygDCAFX/0gDCAFb/yADCAGf/6gDCAKj/zgDCALD/xADCALv/xgDCAMz/yADCAM3/xQDCAND/ywDCANj/zQDCANn/ywDCANr/zwDCANv/zgDEABv/GgDEABz/3ADEAB3/zgDEAB7/6gDEAB//zADEACL/ywDEACz/yQDEAC7/yQDEAC//zgDEADD/yQDEADL/yQDEADP/yADEADX/0wDEADb/yQDEADj/xADEADr/yQDEADz/yQDEAD3/0ADEAD7/dgDEAD//xgDEAED/uADEAEH/uwDEAEP/eQDEAET/yADEAEb/0ADEAEf/vADEAEj/0ADEAEn+WADEAEr/VwDEAE7/ywDEAFL/yQDEAFP/zADEAFT/ywDEAFX/0gDEAFb/yADEAGf/6gDEAKj/zgDEALD/xADEALv/xgDEAMv/zgDEAMz/xwDEAM3/1gDEAM7/zQDEAND/zADEANj/zQDEANn/yADEANr/zQDEANv/zwDGABv/CgDGABz/xwDGAB3/sgDGAB7/dgDGAB//zADGACL/1wDGACP/5gDGACv/0gDGACz/5QDGAC3/yADGAC7/5QDGAC//6gDGADD/5QDGADH/yADGADL/5QDGADP/5ADGADT/ywDGADX/wwDGADb/5QDGADj/4QDGADn/yADGADr/5QDGADv/3wDGADz/5QDGAD3/1ADGAD7/ZgDGAD//4wDGAED/nADGAEH/nwDGAEL/xwDGAEP/VQDGAET/6gDGAEX/zADGAEb/tADGAEf/uwDGAEn+eQDGAEr+1gDGAEv/wgDGAEz/zgDGAE3/5ADGAE7/5gDGAE//xQDGAFD/0QDGAFH/wgDGAFL/5gDGAFP/6ADGAFT/6wDGAFX/wgDGAFb/5ADGAFf/wwDGAFj/wwDGAFn/wgDGAFr/yQDGAFv/5gDGAFz/wwDGAF//xwDGAGD/0ADGAGH/0ADGAGP/0QDGAGT/4gDGAGb/0QDGAGf/5gDGAKP/0gDGAKT/0gDGAKb/6wDGAKj/6gDGALD/4QDGALX/yADGALv/4wDGAL//wgDGAMD/wgDGAMH/wgDGAML/wgDGAMP/wgDGAMT/wgDGAMb/4QDGAMf/xQDGAMj/xQDGAMn/xQDGAMr/xQDGAMv/6ADGAMz/6ADGAM3/xgDGAM7/6ADGAND/wwDGANH/wgDGANL/wgDGANP/wgDGANT/wgDGANX/wgDGANj/xwDGANn/xwDGANr/xwDGANv/xwDIABv/JADIABz/nwDIAB3/vQDIAB7/zwDIAB//5QDIACH/1gDIACP/4ADIACv/5gDIACz/0wDIAC7/0wDIADD/0wDIADL/0wDIADP/0gDIADT/6QDIADb/0wDIADf/0QDIADj/0ADIADr/0wDIADz/0wDIAD3/6gDIAD7/gADIAD//0QDIAED/nwDIAEH/ogDIAEL/2gDIAEP/hwDIAET/wgDIAEb/twDIAEf/yADIAEj/0gDIAEn+cwDIAEr/kADIAFD/6QDIAFb/0gDIAF7/yQDIAGD/yQDIAGH/xgDIAGL/ygDIAGP/xwDIAGT/0gDIAGf/5ADIAKP/5gDIAKT/5gDIALD/0ADIALv/0QDIAMz/0QDIAM3/4QDIANn/0gDHABv/IADHABz/mwDHAB3/uQDHAB7/ywDHAB//4QDHACH/0gDHACL/0QDHACP/3ADHACv/4gDHACz/zwDHAC7/zwDHADD/zwDHADL/zwDHADP/zgDHADT/5QDHADb/zwDHADf/zgDHADj/zADHADr/zwDHADz/zwDHAD3/5gDHAD7/fADHAD//zQDHAED/mQDHAEH/mwDHAEL/1gDHAEP/YwDHAET/vgDHAEb/swDHAEf/xADHAEj/yADHAEn+cwDHAEr/BADHAE7/0QDHAFD/5QDHAFL/0ADHAFb/zgDHAF7/xwDHAGD/yQDHAGH/xgDHAGL/ygDHAGP/xwDHAGT/0gDHAGf/4ADHAKP/4gDHAKT/4gDHALD/zADHALv/zQDHAMz/zQDHAM3/3QDHANn/zwDJABv/JQDJABz/oADJAB3/vQDJAB7/0ADJAB//5gDJACH/2ADJACP/4QDJACv/5wDJADP/0wDJADT/6gDJADf/0wDJADj/0ADJAD3/6gDJAD7/gQDJAD//0gDJAED/nQDJAEH/oADJAEL/2wDJAEP/ZwDJAET/xADJAEb/twDJAEf/yADJAEj/1ADJAEn+cwDJAEr/WQDJAFD/6gDJAFb/0wDJAF7/ywDJAGD/yQDJAGH/xgDJAGL/ygDJAGP/xwDJAGT/0gDJAGf/5QDJAKP/5wDJAKT/5wDJALD/0ADJALv/0gDJAMz/0gDJAM3/6gDKABv/JADKABz/mwDKAB3/uADKAB7/0gDKAB//4wDKACH/2wDKACP/3QDKACv/6QDKACz/0wDKAC7/0wDKADD/0wDKADL/0wDKADP/0gDKADT/6QDKADb/0wDKADf/0wDKADj/zwDKADr/0wDKADz/0wDKAD3/5wDKAD7/gADKAD//0ADKAED/mgDKAEH/nQDKAEL/2QDKAEP/ZADKAET/xwDKAEb/tADKAEf/xwDKAEj/0ADKAEn+cwDKAEr/VgDKAFD/6QDKAFb/0gDKAF7/yQDKAGD/yQDKAGH/xgDKAGL/ygDKAGP/xwDKAGT/0gDKAGf/5ADKAKP/6QDKAKT/6QDKALD/zwDKALv/0ADKAMz/0wDKAM3/4ADMABoAXADMABv/dwDMAB7/6gDMAB//zgDMADUAWwDMAD7/UADMAET/yQDMAEUAYgDMAEn/kQDMAEwAZgDMAE7/zADMAFUAWgDMAFf/0ADMAFj/0ADMAFr/0gDMAFz/0ADMAGT/zQDMAGUAaQDMAGYAZwDMAMsAsADMAM4AZwDMANn/yQDMANr/zwDLABv/FgDLABz/1gDLAB3/yADLAB7/4gDLAB//xgDLACH/zgDLACL/xADLACz/xQDLAC3/0gDLAC7/xQDLAC//ygDLADD/xQDLADH/0gDLADL/xQDLADP/xADLADT/0ADLADX/zwDLADb/xQDLADj/xADLADn/0gDLADr/xQDLADv/0gDLADz/xQDLAD3/ygDLAD7+7wDLAD//wwDLAED/yQDLAEH/zADLAEP/mgDLAET/7ADLAEb/3gDLAEf/uQDLAEj/0wDLAEn/IgDLAEr/iADLAE7/wwDLAFL/xwDLAFP/zADLAFT/zADLAFX/zgDLAFb/xADLAFf/0ADLAFj/0ADLAFr/0gDLAFz/0ADLAGT/zQDLAGf/4wDLAKb/0gDLAKj/ygDLALD/xADLALX/0gDLALv/wwDLAMD/0wDLAMz/wgDLAND/xgDLANL/0wDLANj/xwDLANn/wQDLANr/xwDLANv/yQDNABv/RQDNABz/0gDNAB3/vADNAB7/xADNAB//0gDNACD/zwDNACH/3ADNACv/5ADNADT/3ADNADf/yADNAD7/oQDNAED/zQDNAEH/zwDNAEL/4gDNAEP/zADNAET/zgDNAEf/6ADNAEn/CQDNAEr/ygDNAEv/wwDNAE3/4wDNAE7/0QDNAE//xADNAFH/wwDNAFf/1wDNAFj/1wDNAFn/wwDNAFr/2QDNAFv/yADNAFz/1wDNAF3/wgDNAF//2wDNAGD/wQDNAGH/6QDNAGL/0QDNAGP/7ADNAGT/1ADNAGj/xQDNAKP/5ADNAKT/5ADNAL//5QDNAMD/4ADNAMH/xADNAMP/5QDNAMT/5gDNAMb/4wDNAMf/5QDNAMj/4gDNAMn/6gDNAMr/5gDNAM4AXwDNANH/5ADNANL/4QDNANP/xADNANX/5QDNANj/1ADNANn/zgDNANv/zADOABv/VgDOABz/0QDOAB3/xwDOAB7/6gDOAB//xwDOAD7/sgDOAEP/6QDOAET/ygDOAEf/zQDOAEn/PgDOAEr/xQDOAE7/zgDOAFf/0ADOAFj/0ADOAFr/0gDOAFz/0ADOAGT/zQDOAMsAYQDOAM0AXQDOAM4AdQDOANj/ywDOANn/yQDQABv/EgDQABz/0QDQAB3/wwDQAB7/5ADQAB//wwDQACH/0gDQACL/xADQACP/0ADQACz/wQDQAC3/zQDQAC7/wQDQAC//xgDQADD/wQDQADH/zQDQADL/wQDQADP/7ADQADT/zwDQADX/ywDQADb/wQDQADj/7ADQADn/zQDQADr/wQDQADv/zQDQADz/wQDQAD3/xwDQAD7/bgDQAD//6wDQAED/zwDQAEH/0gDQAEP/qADQAET/wwDQAEX/0gDQAEb/4wDQAEf/tQDQAEj/1QDQAEn+fQDQAEr/nQDQAE7/yADQAFD/7ADQAFL/wwDQAFP/zADQAFT/ywDQAFX/ygDQAFb/7ADQAFf/0wDQAFj/0wDQAFz/0wDQAF7/zADQAGD/xADQAGH/wQDQAGP/wwDQAGT/zwDQAGf/4gDQAKb/zQDQAKj/xgDQALD/7ADQALX/zQDQALv/6wDQAMz/7ADQAND/wwDQANj/xgDQANn/wwDQANr/xwDQANv/xwDSABv/JQDSABz/nADSAB3/1wDSAB7/wgDSAB//0wDSACH/1QDSACP/3QDSACv/6ADSADT/5gDSADj/0ADSAD7/gQDSAD//0gDSAED/owDSAEH/pgDSAEL/2QDSAEP/jADSAET/wQDSAEb/tgDSAEf/yADSAEj/xADSAEn+awDSAEr/jADSAFD/6wDSAF7/ywDSAGD/ygDSAGH/xwDSAGL/zADSAGP/yQDSAGT/0gDSAGf/5QDSAKP/6ADSAKT/6ADSALD/0ADSALv/0gDSAMz/0gDSAM3/4gDSANn/0wDRABv/IQDRABz/mADRAB3/0gDRAB7/6gDRAB//zwDRACH/0ADRACL/0wDRACP/2QDRACv/4wDRACz/0ADRAC7/0ADRADD/0ADRADL/0ADRADP/zwDRADT/4gDRADb/0ADRADf/0wDRADj/zADRADr/0ADRADz/0ADRAD7/fQDRAD//zgDRAED/lwDRAEH/mQDRAEL/1QDRAEP/ZADRAET/vQDRAEb/sQDRAEf/xADRAEj/ugDRAEn+awDRAEr++wDRAE7/0gDRAFD/5gDRAFL/0QDRAFb/zwDRAF7/yADRAGD/ygDRAGH/xwDRAGL/zADRAGP/yQDRAGT/0gDRAGf/4QDRAKP/4wDRAKT/4wDRALD/zADRALv/zgDRAMz/zgDRAM3/3gDRANn/zwDTABv/JgDTABz/nADTAB3/1gDTAB7/xADTAB//0wDTACH/1gDTACP/3QDTACv/6QDTADT/5wDTADj/0QDTAD7/ggDTAD//0gDTAED/mwDTAEH/ngDTAEL/2QDTAEP/aADTAET/wgDTAEb/tgDTAEf/yQDTAEj/xQDTAEn+awDTAEr/SgDTAFD/6wDTAF7/zADTAGD/ygDTAGH/xwDTAGL/zADTAGP/yQDTAGT/0gDTAGf/5gDTAKP/6QDTAKT/6QDTALD/0QDTALv/0gDTAMz/0wDTAM3/5QDVABv/JgDVABz/mADVAB3/0gDVAB7/xgDVAB//0QDVACH/2gDVACP/2wDVACv/6wDVADT/6ADVADj/0QDVAD7/ggDVAD//0gDVAED/mQDVAEH/nADVAEL/2QDVAEP/ZgDVAET/xgDVAEb/tADVAEf/yQDVAEj/wgDVAEn+awDVAEr/SwDVAFD/6wDVAF7/ywDVAGD/ygDVAGH/xwDVAGL/zADVAGP/yQDVAGT/0gDVAGf/5gDVAKP/6wDVAKT/6wDVALD/0QDVALv/0gDVAM3/4gDUABv/JgDUABz/nwDUAB3/1ADUAB7/xgDUAB//0gDUACH/2gDUACP/4QDUACv/6wDUADT/6ADUADj/0QDUAD7/ggDUAD//0wDUAED/tQDUAEH/uADUAEL/2QDUAEP/jwDUAET/xgDUAEb/ygDUAEf/yQDUAEj/xADUAEn+awDUAEr/fgDUAFD/7ADUAF7/zADUAGD/ygDUAGH/xwDUAGL/zADUAGP/yQDUAGT/0gDUAGf/5gDUAKP/6wDUAKT/6wDUALD/0QDUALv/0wDUAM3/xgDZABv/GQDZABz/twDZAB3/zgDZAB7/6ADZAB//ywDZACH/4ADZACL/ygDZACv/6gDZACz/yADZAC7/yADZAC//zQDZADD/yADZADL/yADZADP/xwDZADT/xQDZADX/0gDZADb/yADZADj/xADZADr/yADZADz/yADZAD3/0ADZAD7/dQDZAD//xQDZAED/2QDZAEH/3ADZAEL/4gDZAEP/wQDZAET/ywDZAEb/7ADZAEf/vADZAEn+kADZAEr/yADZAE7/yQDZAFL/yADZAFP/yQDZAFT/yADZAFX/0QDZAFb/xwDZAGT/yADZAGf/2ADZAKP/6gDZAKT/6gDZAKj/zQDZALD/xADZALv/xQDZAMz/xQDZAM3/1QDZAM7/0QDZAND/ygDZANj/zQDZANn/xgDZANr/zADZANv/zADYABv/EgDYABz/pwDYAB3/yADYAB7/4gDYAB//xQDYACH/2gDYACL/xADYACP/0wDYACv/5ADYACz/wQDYAC3/0ADYAC7/wQDYAC//xgDYADD/wQDYADH/0ADYADL/wQDYADP/7ADYADT/6wDYADX/ywDYADb/wQDYADf/zgDYADj/6QDYADn/0ADYADr/wQDYADv/0ADYADz/wQDYAD3/ygDYAD7/bgDYAD//6wDYAED/sgDYAEH/tADYAEL/3ADYAEP/cgDYAET/xQDYAEX/0gDYAEb/yQDYAEf/tQDYAEj/xgDYAEn+kADYAEr/EQDYAE7/wwDYAFL/wgDYAFP/xwDYAFT/xgDYAFX/ygDYAFb/7ADYAGT/yADYAGf/0gDYAKP/5ADYAKT/5ADYAKb/0ADYAKj/xgDYALD/6QDYALX/0ADYALv/6wDYAMD/0gDYAMv/xwDYAMz/6wDYAM3/0ADYAM7/yADYAND/xwDYANL/0wDYANj/xgDYANn/7ADYANr/xwDYANv/ygDaABv/GADaABz/rADaAB3/zQDaAB7/6ADaAB//ygDaACH/4QDaACL/yQDaACv/6gDaACz/xwDaAC7/xwDaAC//zADaADD/xwDaADL/xwDaADP/xgDaADT/xQDaADX/0QDaADb/xwDaADj/wwDaADr/xwDaADz/xwDaAD3/zwDaAD7/dADaAD//xADaAED/twDaAEH/uQDaAEL/4QDaAEP/hADaAET/ywDaAEb/zgDaAEf/uwDaAEn+kADaAEr/cQDaAE7/ygDaAFL/xwDaAFP/ywDaAFT/yQDaAFX/0ADaAFb/xgDaAGT/yADaAGf/2ADaAKP/6gDaAKT/6gDaAKj/zADaALD/wwDaALv/xADaAMv/zADaAMz/xQDaAND/ywDaANj/zADaANn/xwDaANr/zADaANv/zgDbABv/GADbABz/qQDbAB3/yQDbAB7/6wDbAB//yADbACH/5QDbACL/yQDbACv/wQDbACz/xwDbAC7/xwDbAC//zADbADD/xwDbADL/xwDbADP/xgDbADT/xQDbADX/0QDbADb/xwDbADj/wwDbADr/xwDbADz/xwDbAD3/zQDbAD7/dADbAD//xADbAED/tQDbAEH/twDbAEL/4ADbAEP/gADbAET/zwDbAEb/zADbAEf/uwDbAEj/0wDbAEn+kADbAEr/dADbAE7/zwDbAFL/xwDbAFP/yQDbAFT/yADbAFX/0ADbAFb/xgDbAGT/yADbAGf/2ADbAKP/wQDbAKT/wQDbAKj/zADbALD/wwDbALv/xADbAMv/zQDbAMz/xwDbAM3/yQDbAND/ygDbANj/zADbANn/ygDbANr/zQDbANv/zAAAAAAADgCuAAEAAAAAAAAAEwAAAAEAAAAAAAEADAAaAAEAAAAAAAIABwATAAEAAAAAAAMADAAaAAEAAAAAAAQADAAaAAEAAAAAAAUABAAmAAEAAAAAAAYADAAaAAMAAQQJAAAAJgAqAAMAAQQJAAEAGABeAAMAAQQJAAIADgBQAAMAAQQJAAMAGABeAAMAAQQJAAQAGABeAAMAAQQJAAUACAB2AAMAAQQJAAYAGABeXDI1MSBNIEtsZWluICAgOS4wM1JlZ3VsYXJHZW9zYW5zTGlnaHQxLjAgAFwAMgA1ADEAIABNACAASwBsAGUAaQBuACAAIAAgADkALgAwADMAUgBlAGcAdQBsAGEAcgBHAGUAbwBzAGEAbgBzAEwAaQBnAGgAdAAxAC4AMAAgAAIAAAAAAAD/ewATAAAAAAAAAAAAAAAAAAAAAAAAAAAA6wAAANsA3ADdAOAA4QDXALwAwADBAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQDEAKYAxQCrAIIAwgDYAMYA5AC+ALAAtgC3ALQAtQCHALIAswDZAIwA5QC/ALEAuwCjAIQAhQC9AJYA6ACGAI4AiwCdAKkApACKANoAgwCTAPIA8wCNAJcAiADDAN4A8QCeAKoA9QD0APYAogCtAMkAxwCuAGIAYwCQAGQAywBlAMgAygDPAMwAzQDOAOkAZgDTANAA0QCvAGcA8ACRANYA1ADVAGgA6wDtAIkAagBpAGsAbQBsAG4AoABvAHEAcAByAHMAdQB0AHYAdwDqAHgAegB5AHsAfQB8ALgAoQB/AH4AgACBAOwA7gC6AO8AjwCYAJkAmgCbAJwAnwClAKcArAC5]]></data>
	</file>
	<file>
	  <filename>/fonts/HEADACHE.TTF</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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ABEAF//rABEAGAAZABEAGf62ABEAG/+jABEAHf/rABEAHv8ZABEAH/8YABEAI/+TABEAJf/mABEAN//HABEAOP96ABEAOv/AABEAO//VABEAPP+wABEAPf9uABEAPv/LABEAQP+oABEAQf/DABEASv/aABEAWP/aABEAWv/iABEAXP+uABEAXf/ZABEAXv+6ABEAyP8wABEAyf8zABEAyv7EABIABv8hABIAB//EABIAC/8iABIADf/RABIAEf8kABIAFf+CABIAG//YABIAI/+rABIAJP/qABIAJQAaABIAM//lABIANf/mABIAN//lABIAOP8mABIAOv8zABIAO/+xABIAPf8sABIAPgAdABIAQP8pABIAQf/JABIASv/gABIAWP/cABIAWv+uABIAW//CABIAXf+gABIAXgAbABIAyP84ABIAyf87ABIAyv8lABMAB//IABMADP/VABMAEP9uABMAEf+2ABMAEv9wABMAE/9qABMAFP/dABMAFf/HABMAFv/bABMAF//dABMAGP+cABMAGf/lABMAGv/fABMAHP/gABMAHv/KABMAH//KABMAI//kABMAJP+qABMAJf+FABMAJ//cABMAK//cABMALv+aABMAM//VABMANf/VABMAN//cABMAOgAbABMAOwAcABMARf+2ABMAR//CABMASP/CABMASf+5ABMASv/cABMAS//DABMAUf/bABMAUv/cABMAU/+3ABMAVP/gABMAVf/DABMAVv/aABMAV//GABMAWf/cABMAXP/qABMAXf/pABMAXv/oABMAyQAeABQADf+1ABQAEP/YABQAEv/dABQAE//QABQAJf/cABQAN//iABQAOP/TABQAOv/hABQAO//qABQAPP/DABQAPf/EABQAPv/aABQAQP/RABQAQf/PABUAFf/eABUAWwAWABYADf/ZABYAEf/KABYAJP/dABYAPf/jABYAQP/rABYAWwAWABYAygAXABcADf/OABcAEQAbABcAPf/fABcAQP/mABcASwAZABcAVQAZABcAWwAWABgABv/FABgAC//GABgADf+yABgAI/+2ABgAN//pABgAOP+6ABgAOv/QABgAO//RABgAPP/gABgAPf/HABgAQP/JABgAQf/IABgASv/eABgAWP/fABgAWv/SABgAW//iABgAXP/lABgAXf/NABgAyP++ABgAyf/BABgAyv/JABkABv/UABkAC//VABkADf/VABkAEQAkABkAI//ZABkAOP/hABkAPP/pABkASv/kABkASwAXABkAVQAXABkAWP/kABkAXf/mABkAyP/YABkAyf/bABkAyv/jABoADf/SABoAEQAaABoAPP/lABoAPf/jABoAQP/pABoAWwAXABsABgAhABsAB//bABsACwAiABsAEP9kABsAEf+uABsAEv9kABsAE/+JABsAHv/UABsAH//UABsAJP+zABsAJf+iABsALv+RABsAOgAjABsAOwAkABsAPQAaABsAQAAbABsAQQAbABsARf/AABsAR//KABsASP/NABsASf/AABsAS//MABsATQAbABsATgAbABsAU/+8ABsAVf/MABsAV//RABsAyAAnABsAyQAsABsAygAzABwADf/NABwAEQAXABwAN//qABwAOP/rABwAPf/eABwAQP/kAB0ADf/FAB0AEP/qAB0AEQAXAB0AE//bAB0AJf/nAB0AN//rAB0AOP/iAB0APP/SAB0APf/UAB0APv/pAB0AQP/eAB0AQf/hAB4ADf/PAB4AEAAcAB4AEf8sAB4AEgAcAB4AFf/PAB4AG//PAB4AN//kAB4AOP8lAB4AOv/fAB4APf+rAB4AQP/MAB4AQf/LAB4Ayf/kAB8ADf/WAB8AEf8hAB8AFf/FAB8AF//jAB8AG//MAB8AI//qAB8AJP/lAB8AN//aAB8AOP8aAB8AOv/VAB8AO//iAB8APf+hAB8AQP/CAB8ATgAgAB8AyP/qAB8Ayf/ZACMABgAaACMACwAbACMADf/YACMAEP+KACMAEf+0ACMAEv+KACMAE/+fACMAFf/gACMAGP+0ACMAG//qACMAJP/fACMAJf+zACMALv+PACMAPP/RACMAPf/pACMAPv/qACMAWwAYACMAygAeACQABv/HACQAC//IACQADf+uACQAEQAeACQAE//kACQAFf+xACQAG/+yACQAI//WACQAN//qACQAOP+PACQAOv/BACQAO//TACQAPP/hACQAPf+SACQAQP+uACQAQf/LACQARwAVACQASv/hACQAWv/mACQAXf/ZACQAyP/BACQAyf+6ACQAyv/NACUABv+ZACUAC/+aACUADf/nACUAEAAeACUAEgAeACUAEwAZACUAFf+QACUAF//mACUAG//gACUAI/+tACUAJP/eACUAJQAhACUAM//mACUANf/mACUAN//YACUAOP+PACUAOf/pACUAOv+WACUAO/+5ACUAPAAfACUAPf9+ACUAQP9/ACUAQf/VACUASv/rACUAWP/cACUAWv+0ACUAW//LACUAXAAoACUAXf+sACUAXgAcACUAhP/nACUAj//eACUAyP+VACUAyf+PACUAyv+gACYADf/LACYAEQAbACYAFf/VACYAG//dACYAOP/pACYAPf/bACYAQP/jACYAQf/pACYASwAZACYAVQAZACcABgAeACcACwAfACcADf/ZACcAE//mACcAFf/lACcAG//qACcAPP/dACcAPf/pACcAWAAZACcAWwAZACcAyAAjACcAyQAgACcAygAuACgADf/CACgAEQAXACgAE//gACgAFf/XACgAG//UACgAN//qACgAOP/fACgAPP/VACgAPf/RACgAQP/eACgAQf/bACkAB//NACkAEAAdACkAEf8fACkAEgAdACkAFf+sACkAGP/NACkAJP/mACkAJQAZACkAN//qACkAPAAXACkASv/jACkAWP/iACkAWv/kACkAXAAYACkAXf/dACoABgAWACoAB/+NACoACwAXACoAEP9GACoAEf9LACoAEv9GACoAE/+zACoAFf+9ACoAGP/WACoAJf/EACoALv9KACoAOgAkACoAOwAlACoAPQAbACoAQAAdACoAQQAbACoARf/oACoATQAbACoATgAbACoAWv/qACoAXP/MACoAXf/kACoAXv9+ACoAyAAeACoAyQAkACoAygAqACsADf/SACsAEAAZACsAEQAhACsAEgAbACsAFf/ZACsAG//eACsAOP/pACsAPf/dACsAQP/jACwAFf/ZACwAWwAWAC0AFf/ZAC0AWwAWAC4AFf/bAC4AWwAYAC8AB//RAC8AEf+5AC8AFP/SAC8AFf+hAC8AF//QAC8AGP/eAC8AGf/bAC8AGv/YAC8AG//rAC8AHP/nAC8AHf/fAC8AI//KAC8AJP/HAC8AJQAcAC8AJ//YAC8AK//YAC8ALv/dAC8AM//JAC8ANf/JAC8AN//HAC8APAAaAC8ARf/oAC8AR//gAC8ASP/YAC8ASf/VAC8ASv/mAC8AS//oAC8AU//XAC8AVf/oAC8AV//cAC8AWP/ZAC8AWv+9AC8AW//EAC8AXAAcAC8AXf+6AC8AyP/lADAABv9KADAAB//IADAAC/9LADAADf/aADAAEAAiADAAEf9PADAAEgAiADAAFP/pADAAFf+DADAAF//oADAAGP9NADAAG//SADAAI/+rADAAJP/eADAAM//hADAANf/hADAAN//cADAAOP+CADAAOv+ZADAAO/+4ADAAPf9vADAAQP94ADAAQf/IADAASv/eADAAWP/dADAAWv+1ADAAW//JADAAXAAZADAAXf+oADAAhP/vADAAj//nADAAyP9DADAAyf9GADAAyv9OADEAFf/ZADEAWwAWADIAFf/ZADIAWwAWADMADf+0ADMAEP/ZADMAEv/cADMAE//PADMAFf/RADMAG//FADMAJf/cADMAN//iADMAOP/RADMAOv/gADMAO//qADMAPP/BADMAPf/DADMAPv/ZADMAQP/QADMAQf/MADQABgAgADQACwAhADQADf/SADQAEP7sADQAEv7sADQAE/+rADQAFf/fADQAGP/LADQAG//jADQAJP/qADQAJf+9ADQALv88ADQAPP/MADQAPf/kADQAPv/jADQAQP/qADQAhP/4ADQAyAAaADQAyQAWADQAygAlADUADf/SADUAEP/iADUAEv/kADUAFf/SADUAG//GADUAN//jADUAOP/RADUAOv/hADUAO//qADUAPf/EADUAQP/SADUATgAZADYAEf/nADYAEwAeADYAFf/NADYAF//pADYAGf/kADYAG//jADYAI//pADYAJP/YADYAJQAkADYALv/kADYAN//hADYAOP/fADYAOf/qADYAOv/mADYAPAAiADYAPf/SADYAPgAWADYAQP/aADYAQf/hADYASP/kADYASf/lADYAU//qADYAXAAoADYAXgAcADcADf/JADcAEQAgADcAFf/YADcAG//bADcAOP/mADcAPf/aADcAQP/gADcAQf/pADcASwAYADcAVQAYADgAB/+SADgADP/pADgAEP+RADgAEf+WADgAEv+RADgAE/+VADgAFP/qADgAFf+0ADgAGP+SADgAHv+LADgAH/+LADgAJP+JADgAJf+dADgALv+MADgAM//hADgANf/hADgAOgAbADgAOwAbADgARf+KADgAR/+RADgASP+RADgASf+MADgASv/jADgAS/+XADgAUf+GADgAUv+HADgAU/+QADgAVP+HADgAVf+XADgAVv+FADgAV/+IADgAWP/kADgAWf+IADgAWv+ZADgAW/+fADgAXP+bADgAXf+WADgAXv+QADgAhP/4ADgAyQAZADgAygAfADkAE//hADkAFf/YADoAB//aADoADP/lADoAEP+UADoAEf/RADoAEv+UADoAE/+QADoAFf/XADoAFv/rADoAGP+5ADoAHv/gADoAH//gADoAJP/CADoAJf+YADoALv+3ADoAM//pADoANf/pADoAOgAmADoAOwAmADoAPQAdADoAQAAfADoAQQAdADoARf/MADoARgAVADoAR//ZADoASP/YADoASf/RADoAS//aADoATQAZADoATgAYADoAUAAUADoAU//PADoAVf/aADoAV//cADoAyQAmADoAygAcADsAB//dADsADP/nADsAEP+vADsAEf/fADsAEv+vADsAE/+rADsAFf/YADsAGP/LADsAHv/oADsAH//oADsAJP/MADsAJf+0ADsALv/IADsAOgAhADsAOwAiADsAPQAYADsAQAAaADsAQQAYADsARf/UADsAR//iADsASP/hADsASf/bADsAS//kADsATQAUADsAU//aADsAVf/kADsAV//kADsAyQAeADsAygAYADwAB//XADwAEf++ADwAEwAYADwAFP/XADwAFf+tADwAF//VADwAGP/jADwAGf/fADwAGv/dADwAHf/kADwAI//SADwAJP/LADwAJQAgADwAJ//dADwAK//dADwALv/hADwAM//PADwANf/PADwAN//LADwAPAAeADwAR//lADwASP/dADwASf/aADwASv/rADwAU//cADwAV//hADwAWP/cADwAWv/NADwAW//UADwAXAAhADwAXf/KADwAXgAVADwAyP/rAD0AB/+mAD0ADP/CAD0AEP9SAD0AEf9oAD0AEv9SAD0AE/9iAD0AFP/BAD0AFf+tAD0AFv/DAD0AF//JAD0AGP9cAD0AGf/dAD0AGv/HAD0AHP/LAD0AHf/WAD0AHv+bAD0AH/+bAD0AI//RAD0AJP96AD0AJf99AD0AJ//FAD0AK//FAD0ALv9WAD0AM/+5AD0ANf+5AD0AN//IAD0ARf+HAD0AR/+RAD0ASP+UAD0ASf+GAD0ASv/UAD0AS/+TAD0AUf+3AD0AUv+4AD0AU/+CAD0AVP+/AD0AVf+TAD0AVv+2AD0AV/+ZAD0AWP/bAD0AWf+5AD0AWv/JAD0AW//QAD0AXP/FAD0AXf/GAD0AXv/HAD0AhP/4AD0AyQAZAD4AB//PAD4AEf99AD4AFf/QAD4AGP90AD4AJP/mAD4AJQAbAD4AM//oAD4ANf/oAD4AN//pAD4APAAZAD4ASv/lAD4AXAAYAD4AXf/pAD4AyQAXAD4AygAdAEAABv+PAEAAC/+QAEAAEAAeAEAAEgAeAEAAEwAcAEAAFP/qAEAAFf+QAEAAF//kAEAAG//gAEAAI/+sAEAAJP/cAEAAJQAhAEAAM//jAEAANf/jAEAAN//XAEAAOP+PAEAAOf/oAEAAOv+WAEAAO/+5AEAAPAAfAEAAPf98AEAAQP9zAEAAQf/XAEAASP/rAEAAVAAVAEAAWP/cAEAAWv+1AEAAW//LAEAAXAApAEAAXf+mAEAAXgAdAEAAyP+LAEAAyf+FAEAAyv+WAEEAFf/XAEEAG//sAEEATgA/AEUABv/rAEUADf/gAEUAEwAZAEUAFf/MAEUAG//aAEUAQP/FAEUAQf/OAEUAXAAgAEUAyP/lAEUAyf/VAEYABv/WAEYAC//YAEYADf+uAEYAEQAdAEYAE//nAEYAFf/IAEYAG/+0AEYAQP/GAEYAQf/FAEYASwAYAEYAVQAYAEYAyP/NAEYAyf/BAEYAyv/YAEcADf+zAEcAEAAYAEcAEf8TAEcAEgAaAEcAFf/JAEcAG/++AEcAQP/DAEcAQf/KAEcAyf/kAEgAFf/VAEgAG//qAEkADf+5AEkAFAAaAEkAFf/HAEkAG//BAEkAQP/EAEkAQf/MAEkASAAYAEkASwAXAEkAVQAXAEkAyP/kAEkAyf/UAEoAEP/IAEoAEf/OAEoAEv/JAEoAE//LAEoAFf/cAEoAGP/HAEoAJP/bAEoAWwAaAEoAjwAIAEsADf/eAEsAFf/UAEsAG//HAEsAQP/bAEsATgAyAEwABv/ZAEwAC//aAEwADf/QAEwAFf/KAEwAG//JAEwAQP/IAEwAQf++AEwAXAAYAEwAyP/QAEwAyf/DAEwAyv/bAE0AFf/UAE4AFf/UAE4ATgA5AE8AB//dAE8ADf/kAE8AEAAYAE8AEf+8AE8AEgAYAE8AEwAVAE8AFf/RAE8AGP/dAE8AGf/kAE8AG//dAE8AJP/IAE8AQP/ZAE8AQf/SAE8ASP/YAE8ASf/hAE8AUgAVAE8AU//iAE8AV//oAE8AWwAYAE8AXAAqAE8AXgAdAE8AyP/lAE8Ayf/iAFAAFf/VAFAAG//qAFEABv/kAFEAC//mAFEADf/UAFEAFf/GAFEAG//NAFEAI//pAFEAQP/BAFEAQf/DAFEAyP/gAFEAyf/QAFEAyv/rAFIADf/TAFIAFf/OAFIAG//MAFIAQP/HAFIAQf/CAFIAyP/pAFIAyf/aAFMABv/RAFMAC//TAFMADf+ZAFMAE//hAFMAFf+zAFMAFv/jAFMAG/+pAFMAI//aAFMAQP+yAFMAQf/BAFMASv/cAFMAWv/qAFMAXP/ZAFMAXf/jAFMAyP/IAFMAyf+4AFMAyv/UAFQABv/pAFQAC//qAFQADf+3AFQAEQAcAFQAFAAYAFQAFf/MAFQAG/+/AFQAQP/GAFQAQf/IAFQASAAXAFQAyP/jAFQAyf/UAFUAFf/UAFUAG//HAFUAQP/cAFUATgA/AFYADf+YAFYAEP9UAFYAEf9ZAFYAEv9UAFYAE/+0AFYAFf/PAFYAF//qAFYAGP/TAFYAG/95AFYAQP/IAFYAQf+/AFYAjwARAFcABv/gAFcAC//iAFcADf+8AFcAFf++AFcAG//CAFcAI//gAFcAQP+3AFcAQf/JAFcASv/jAFcAXf/nAFcAyP/bAFcAyf/NAFcAyv/nAFgADf/aAFgAEf/HAFgAFf/ZAFgAGP/GAFgAG//OAFgAJP/aAFgAQP/kAFgAQf/GAFgAWwAXAFkADf/OAFkAFf/UAFkAG//JAFkAQP/XAFkAQf+9AFoABgAXAFoACwAYAFoADf+oAFoAEP+jAFoAEf/iAFoAEv+jAFoAE/+fAFoAFf/bAFoAGP/KAFoAG/9jAFoAJP/XAFoAQP/fAFoAQf/GAFoARf/fAFoASf/jAFoAU//iAFoAWwAaAFoAygAfAFsADf+lAFsAEP+tAFsAEf/mAFsAEv+tAFsAE/+rAFsAFf/ZAFsAGP/QAFsAGf/qAFsAG/9tAFsAJP/YAFsAQP/dAFsAQf/DAFsARf/fAFsASf/kAFsAU//jAFsAWwAXAFsAygAbAFwADf/hAFwAEf+0AFwAEwAaAFwAFf/ZAFwAGP/iAFwAGf/qAFwAG//bAFwAJP/PAFwAQP/dAFwAQf/QAFwAR//kAFwASP/lAFwASf/ZAFwAU//bAFwAV//hAFwAWwAXAFwAXAAgAFwAygAaAF0ABgAnAF0ACwAoAF0ADf+3AF0AEP+qAF0AEv+xAF0AE/+sAF0AFf/rAF0AGP/YAF0AG/9xAF0AHQAXAF0AJP/bAF0AQf/UAF0AWAAfAF0AWgAjAF0AWwApAF0AXAAfAF0AXQAaAF0AXgAZAF0AyAAkAF0AyQAfAF0AygAvAF4ADf/aAF4AEf+7AF4AFf/TAF4AGP+rAF4AG//UAF4AJP/oAF4AQP/bAF4AQf/JAF4AXAAZAF4AygAYAIQAJf/nAIQAOP/4AIQAPf/4AI4Ajv/4AI8AV//4AI8AhP/vAI8Aj//4AMgAB//bAMgAEP84AMgAEf87AMgAEv84AMgAE/87AMgAFf/gAMgAGP86AMgAG//mAMgAJP+yAMgAJf9DAMgALv8wAMgAPv/hAMgARf/SAMgAR//UAMgASP/AAMgASf/JAMgAS//YAMgAU//AAMgAVf/YAMgAV//oAMgAWgAfAMgAWwAjAMgAXAAZAMgAXQAdAMgAXgAXAMkAB//MAMkADP/mAMkAEP9BAMkAEf9EAMkAEv9BAMkAE/9EAMkAFf/lAMkAGP9EAMkAHv++AMkAH/++AMkAJP+VAMkAJf9NAMkALv85AMkAM//lAMkANf/lAMkAOgAlAMkAOwAjAMkAPQAiAMkAQAAhAMkARf+mAMkAR/+nAMkASP+dAMkASf89AMkAS/+wAMkAUf/iAMkAUv/jAMkAU/8+AMkAVf+wAMkAVv/iAMkAV/++AMoAB//bAMoAEP8ZAMoAEf7DAMoAEv8aAMoAE/9/AMoAFf/gAMoAGP+NAMoAG//mAMoAJP+xAMoAJf+WAMoALv8lAMoAPv/hAMoARf/SAMoAR//UAMoASP/AAMoASf/IAMoAS//YAMoAU//AAMoAVf/YAMoAV//oAMoAWgAfAMoAWwAjAMoAXAAYAMoAXQAdAMoAXgAXAAAAEAAAANgJCAUAAgIFAgMGBQUEAgMDBAQCAwIDBQMEBAUEBAQEBAICBAQEBAgFBQUFBAQFBQIEBQQGBQUFBQUFBAUFBwUFBAIDAgQEAgQEBAQEAwQEAgIEAgYEBAQEBAQDBAQGBAQEAwIDBQIEBQUCBAMFBQUFAwMDAgUCAgUFBQUEBQUFBQUFBwUEBAQEAgICAgUFBQUFBQUFBQUFBQUFBQUEBAQEBAQGBAQEBAQCAgMCBAQEBAQEBAQEBAQEBAQEBAIHBwUEBQQDAwQCBAUHAgIDAwUFAwYFAwMGAwIKCQUAAgIGAgQHBQYEAgMDBAUCAwIDBgQFBQUFBQUFBQICBQUFBQkGBQUGBQQGBgIEBgQHBgYFBgYFBQYFCAYGBQIDAgUEAgUFBAUFAwUFAgIFAgcFBQUFBAQDBQUHBQUEAwIDBgIFBQUCBQMGBgYGAwMDAwYDAgYGBgYFBgYGBgYGCAUFBQUFAgICAgYGBgYGBgYGBgYGBgYGBQUFBQUFBQUHBAUFBQUCAgMCBQUFBQUFBQUFBQUFBQUFBQIIBwUEBgQDBAQDBAUIAgIDAwUFAwcGAwMHAwILCgYAAwMHAwQIBgcEAgMDBQUCAwIEBwQFBQYFBQUFBQICBQUFBQoGBgYGBQUGBgMFBgUIBgYGBgYGBQYGCQYGBQMEAwUFAgUFBQUFAwUFAgIFAggFBQUFBAUEBQUIBQUFBAIEBwMFBgYDBQQGBgcHBAMDAwYDAwYGBwYFBgYGBgYGCAYFBQUFAwMDAwYGBgYGBgYGBwYGBgYGBgYFBQUFBQUIBQUFBQUDAwQDBQUFBQUFBQUFBQUFBQUFBQMICAYFBgUEBAUDBAYJAgIEBAYGAwgGBAQIAwMMCwYAAwMHAwUJBgcFAwMEBQYDBAMEBwQGBgYGBgUGBgMDBgYGBQsHBgYHBgUHBwMFBwUJBwcGBwcGBgcHCgcHBgMEAwYFAwYGBQYGBAYGAwMGAwgGBgYGBQUEBgYIBgYFBAMEBwMGBgYDBQQHBwcHBAQEAwcDAwcHBwcFBwcHBwcHCQYGBgYGAwMDAwcHBwcHBwcHBwcHBwcHBgYGBgYGBgYJBQYGBgYDAwQDBgYGBgYGBgYGBgUGBgYGBgMJCQYFBwUEBAUDBQYKAgIEBAYGBAgHBAQJBAMNDAcAAwMIAwUJBwgFAwQEBgYDBAMECAUGBgcGBgYGBgMDBgYGBgwHBwcHBgYHBwMGBwUJCAgHCAcHBgcHCgcHBgMEAwYGAwYGBgYGBAYGAwMGAwkGBgYGBQYEBgYJBgYGBAMECAMGBwcDBgQHBwgIBAQEAwgDAwcHCAcGBwcHBwcHCgcGBgYGAwMDAwcICAgICAgHCAcHBwcHBwcGBgYGBgYJBgYGBgYDAwQDBgYGBgYGBgYGBgYGBgYGBgMKCgcGBwYEBQYEBQcLAwMEBAcHBAkIBAQJBAMODQcAAwMIAwUKBwgGAwQEBgcDBAMFCAUHBwcHBwYHBwMDBwcHBg0IBwgIBwYICAMGCAYKCAgHCAgHBwgICwgIBwMFAwcGAwcHBgcHBAcHAwMHAwoHBwcHBgYFBwcKBwYGBQMFCAMGBwcDBgUICAgIBQQEBAgEAwgICAgGCAgICAgICwgHBwcHAwMDAwgICAgICAgICAgICAgIBwcHBwcHBwcKBgcHBwcDAwQDBwYHBwcHBwYHBwYGBgYHBgMLCgcGCAYFBQYEBgcLAwMFBQcHBAoIBQUKBAMPDggABAQJAwYLCAkGAwQFBgcDBQMFCQUHBwgHBwcHBwMDBwcHBw4JCAgIBwYICAQHCAYLCQkICQkIBwgIDAkJBwQFBAcGAwcHBwcHBQcHAwMHAwoHBwcHBgcFBwcKBwcHBQMFCQQHCAgDBwUJCAkJBQQFBAkEBAgICQgHCQkJCQgICwgHBwcHBAQEBAkJCQkJCQkICQgICAgJCAgHBwcHBwcLBwcHBwcDBAUEBwcHBwcHBwcHBwcHBwcHBwMLCwgHCQcFBQYEBggMAwMFBQgIBQsJBQULBAQQDwgABAQKBAYLCAoGBAUFBwgEBQQFCgYICAgICAcICAMECAgIBw8JCAkJCAcJCQQHCQcLCQkICQkICAkJDQkJCAQFBAgHBAcIBwgIBQgHBAQHBAsICAgIBgcFCAgLCAcHBQQGCgQHCAgEBwUJCQoKBQUFBAkEBAkJCgkHCQkJCQkJDAkICAgIBAQEBAkJCQkJCQkJCgkJCQkJCAkICAgICAgLBwgICAgEBAUECAcICAgICAcIBwcHBwcIBwQMDAgHCQcFBgcEBgkNAwMFBQgIBQsJBQULBQQREAkABAQKBAcMCQoHBAUFBwgEBQQGCgYICAkICAgICAQECAgICBAKCQkKCAcKCQQICQcMCgoJCgoJCAoJDgoKCAQFBAgHBAgICAgIBQgIBAQIBAwICAgIBwgGCAgMCAgIBgQGCgQICQkECAYKCgoKBgUFBAoEBAkKCgoICgoKCgoKDQkICAgIBAQEBAoKCgoKCgoJCgoKCgoKCQkICAgICAgMCAgICAgEBAUECAgICAgICAgICAgICAgICAQNDQkHCgcGBgcFBwkOBAMGBgkJBQwKBgYMBQQSEQkABAQLBAcNCQsHBAUGCAkEBgQGCwYJCQkJCQgJCQQECQkICBEKCQoKCQgKCgQICggNCgsJCwoJCQoKDgoKCQQGBAkIBAgICAkJBgkIBAQIBA0ICQgJBwgGCQgNCAgIBgQGCwQICQkECAYKCgsLBgUFBQoFBAoKCwoICgoKCgoKDgoJCQkJBAQEBAoKCwsLCwsKCwoKCgoKCQoICAkJCQkNCAkJCQkEBAYECQgJCQkJCQgJCAgICAgICAQODQkICggGBggFBwoPBAQGBgkJBg0KBgYNBQQTEgoABAQLBAcOCgsIBAUGCAkEBgQGCwcJCQoJCQkJCQQECQkJCRILCgoLCQgLCwUICwgNCwsKCwsKCQsKDwsLCQUGBQkIBAkJCQkJBgkJBAQJBA0JCQkJCAgGCQkNCQkIBgQHCwUJCgoECQYLCwsLBgYGBQsFBQsLCwsJCwsLCwsLDgoJCQkJBQUFBQsLCwsLCwsKCwsLCwsLCgoJCQkJCQkOCAkJCQkEBQYFCQkJCQkJCQkJCQkJCQkJCQQODgoICwgHBwgFBwoQBAQHBgoKBg0LBgYOBgQUEwoABQUMBQgOCgwIBQYGCQoEBgQHDAcJCQoJCgkKCgQECgoJCRMLCgsLCQkLCwUJCwgODAwKDAsKCgsLEAwLCgUGBQoJBAkJCQoKBgoJBAQJBA4JCgkKCAkHCQkOCQkJBwQHDAUJCgoFCQcLCwwMBwYGBQwFBQsLDAsJCwsLCwsLDwsJCQkJBQUFBQsMDAwMDAwLDAsLCwsLCgsJCQkJCQkOCQoKCgoFBQYFCgkKCgoKCgkKCQkJCQkJCQUPDwoJCwkHBwkFCAsQBAQHBwoKBg4MBwcOBgUVFAsABQUNBQgPCw0JBQYHCQoFBwUHDQcKCgsKCgoKCgQFCgoKChQMCwsMCgkMDAUJDAkPDAwLDAwLCgwMEQwMCgUHBQoJBQoKCQoKBwoKBQUKBQ8KCgoKCAkHCgoPCgoJBwUHDQUKCwsFCgcMDA0NBwYGBgwFBQwMDQwKDAwMDAwMEAsKCgoKBQUFBQwMDAwMDAwMDQwMDAwMCwsKCgoKCgoPCQoKCgoFBQcFCgoKCgoKCgoKCgoKCgoKCgUQEAsJDAkHCAkGCAsRBAQHBwsLBw8MBwcPBgUWFQsABQUNBQgQCw0JBQYHCQoFBwUHDQgKCgsKCwoLCwUFCwsKChUMDAwMCgkMDAUKDAkQDQ0LDQ0LCwwMEg0NCwUHBQsKBQoKCgsKBwsKBQUKBQ8KCwoLCQoHCgoPCgoKBwUIDQUKCwsFCgcNDA0NBwcHBg0GBQwMDQwKDAwMDAwMEQwKCgoKBQUFBQ0NDQ0NDQ0MDQwMDAwNCwwKCgoKCgoQCgsLCwsFBQcFCwoLCwsLCwoLCgoKCgoKCgUREAsKDQoICAkGCQwSBQQIBwsLBxANBwcQBgUXFgwABQUOBQkQDA4JBQcHCgsFBwUIDggLCwwLCwoLCwUFCwsLCxYNDAwNCwoNDQYKDQoQDQ4MDg0MCw0NEg0NCwUHBQsKBQsLCgsLBwsLBQULBRALCwsLCQoHCwsQCwsKCAUIDgYLDAwFCggNDQ4OCAcHBg0GBg0NDg0KDQ0NDQ0NEQwLCwsLBgYGBg0NDg4ODg4NDg0NDQ0NDAwLCwsLCwsQCgsLCwsFBgcGCwsLCwsLCwsLCwsLCwsLCwUREQwKDQoICAoGCQwTBQQICAwMBxANCAcRBwUYFgwABgYOBgkRDQ8KBQcICgsFCAUIDgkLCwwLCwsMDAUFDAwLCxYODQ0NCwoODQYLDQoRDg4MDg4NDA0NEw4ODAYIBgwKBQsLCwsLCAwLBQULBRELDAsLCgsICwsRCwsLCAUIDgYLDAwFCwgODg8OCAcHBg4GBg0ODw4LDg4ODg4OEg0LCwsLBgYGBg4ODg4ODg4NDg0NDQ0ODQ0LCwsLCwsRCwsMCwsFBggGDAsMDAwLDAsMCwsLCwsLCwYSEg0KDgoICQoHCQ0UBQUICAwMCBEOCAgRBwYAAQGNAZAABQACArwCigAAAI8CvAKKAAABxQAyAQMAAAAABAAAAAAAAAAAAAADAAAAAAAAAAAAAAAATUFDUgBAACAiGQOB/yQAAAOBANwAAAABAAAAAAAAAAEAAIAAAAAA6wIhAABgAALDAnVIZWFkYWNoZSAgICAgICAg/////zf///5IRUFSMDAAAAAAAAAAAQAAAAEAAMjr0XJfDzz1AAAD6AAAAACwqg/PAAAAALCqD8//0v8kA38DgQAAAAMAAgABAAAAAAABAAADgf8kAAADqP/S/+EDfwABAAAAAAAAAAAAAAAAAAAA1gABAAAA1gB7AAcASAAFAAIACABAAAoAAACxATgAAgAB]]></data>
	</file>
	<file>
	  <filename>/fonts/HECN.TTF</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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AAAAAQAwAOwBqgGqAawBrgGwAbABsgGyAbIBtAG8Ab4BwgHGAcoBygHKAcwBzAHMAcwAAAADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAnwCZAIQAhQCvAJIA2QCGAI4AiwCUAJwAmgDgAIoAywCDAJEA4wDkAI0AkwCIALUAzwDiAJUAnQDmAOUA5wCYAKAAuwC5AKEAYgBjAI8AZAC9AGUAugC8AMEAvgC/AMAA2gBmAMQAwgDDAKIAZwDhAJAAxwDFAMYAaADcAN4AiQBqAGkAawBtAGwAbgCWAG8AcQBwAHIAcwB1AHQAdgB3ANsAeAB6AHkAewB9AHwAqwCXAH8AfgCAAIEA3QDfAKwAyADTANQAowCkANUA1gCtANcA2ACbANAAyQDSAMwAzQDOANEAygClAKYAqQCqALYApwCoALcAggC0AIcAngC4ALAAsQCMAK4AtQCyALMADAAAAxEAMQAAAAAA+gAAAPoAAAFNAHkA+gAsAfQABQH0ACMDQQA3ApsASwD6AGMBTQBMAU0ALAH0AGAB9AAsAPoAUAFNAC0A+gBQARb/8wH0AC4B9ABKAfQALAH0ACYB9AAcAfQAKwH0ACsB9AAsAfQALgH0ACsA+gBQAPoAUAH0ACoB9AAsAfQAKgH0ADwDIAAkAiwACwIsAFACLAA1AmMAUgH0AEoBvABKAmMANgJjAE8BFgBiAbwAFQIsAE8B9ABTAwoATAJjAE0CYwA7AiwAVgJjADsCYwBWAiwAMwH0AA8CYwBRAiwACwNBABECLAARAiwACwH0ABwBTQBkAPr/4QFNADoB9ABGAfQAAAFNACMBvAAfAfQASwG8ACwB9AAwAbwAKwEWAAwB9AAtAfQASQDeAEgA3gANAbwARQDeAEgDCgBMAfQASQH0ADMB9ABIAfQANgFNAFEBvAArARYACQH0AE0BvAANApsAEwG8AAkBvAAFAYUAGAESAAcA+gBdARIACAH0ACwCLAALAiwACwIsADUB9ABKAmMATQJjADsCYwBRAbwAHwG8AB8BvAAfAbwAHwG8AB8BvAAfAbwALAG8ACsBvAArAbwAKwG8ACsA3gAtAN7/7ADe/94A3v/9AfQASQH0ADMB9AAzAfQAMwH0ADMB9AAzAfQATQH0AE0B9ABNAfQATQH0ACgBkAAyAfQAOgH0AB4B9AAjAU0ADwG4AAAB9ABHAyAACAMgAAgC7gAAAU0AZAFNADQDQQAAAmMAHQH0ACwB9P/vAfQASwEsABkBLAAUApsAGgH0ABkB9AAmAU0AeQH0ACwB9AAKAfQAVQH0AFUD6AB5AfQAAAIsAAsCLAALAmMAOwNBADgC0gAoAfQAAAPoAAABhQA+AYUAPgDeAEAA3gBAAfQALAG8AAUCLAALAKf/UgH0ABgBFgBAARYAPwH0AAwB9AAMAfQAJwD6AFAA3gBAAYUAPgRXAC8CLAALAfQASgIsAAsB9ABKAfQASgEWAEkBFv/6ARYAGQEWAAgCYwA7AmMAOwJjADsCYwBRAmMAUQJjAFEA3gBIAU0AFQFN//0BTQAKAU0ADAD6AFYA+gAXAU0AQgFNAD0BTQAAAU0AFQH0//MA3v/4AiwAMwG8ACsB9AAcAYUAGAD6AF0CY//6AfQAKgIsAAsBvAAFAiwAVgH0AEgB9AAsAfQALAEsAEMBLAATASwAEQLuACoC7gAiAu4AFQLyA7kCNQBkAfMBXAMcAAMBgALfAiUCCQMvAc0DAgPe/8MBKAKbAkYCxwAA//ECcv9DAHv/cAET/yT/oQKMAS4CBQH4/4v/T/8wADEA3AFL/9QApgHE/+IBIwDMAlEATwBLAFEABACKAGIAIwCcAKsAnQBQAMIBTQESAIYA3gEEAUIAiACwAHoATQBuAAYAuwBZAKIAxwCXADIAEQAmADoAAAGKAAUABQABArwCigAAAI8CvAKKAAABxQAyAQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQWx0cwBAACDwAgPe/yAAAAPeAOAAAAAAABAAAADsCQoHAAICAwIFBQcGAgMDBQUCAwIDBQUFBQUFBQUFBQICBQUFBQcFBQUFBQQFBQMEBQUHBQUFBQUFBQUFBwUFBQMCAwUFAwQFBAUEAwUFAgIEAgcFBQUFAwQDBQQGBAQEAgICBQUFBQUFBQUEBAQEBAQEBAQEBAICAgIFBQUFBQUFBQUFBQQFBQUDBAUHBwcDAwcFBQUFAwMGBQUDBQUFBQkFBQUFBwYFCQQEAgIFBAUCBQMDBQUFAgIECgUFBQUFAwMDAwUFBQUFBQIDAwMDAgIDAwMDBQIFBAUEAgUFBQQFBQUFAwMDBwcHAAAKCwgAAwMDAwUFCAcDAwMFBQMDAwMFBQUFBQUFBQUFAwMFBQUFCAYGBgYFBAYGAwQGBQgGBgYGBgYFBgYIBgYFAwMDBQUDBAUEBQQDBQUCAgQCCAUFBQUDBAMFBAcEBAQDAwMFBgYGBQYGBgQEBAQEBAQEBAQEAgICAgUFBQUFBQUFBQUFBAUFBQMEBQgICAMDCAYFBQUDAwcFBQMFBQUFCgUGBgYIBwUKBAQCAgUEBgIFAwMFBQUDAgQLBgUGBQUDAwMDBgYGBgYGAgMDAwMDAwMDAwMFAgYEBQQDBgUGBAYFBQUDAwMICAgAAAsMCQADAwQDBgYJBwMEBAYGAwQDAwYGBgYGBgYGBgYDAwYGBgYJBgYGBwYFBwcDBQYGCQcHBgcHBgYHBgkGBgYEAwQGBgQFBgUGBQMGBgICBQIJBgYGBgQFAwYFBwUFBAMDAwYGBgYGBwcHBQUFBQUFBQUFBQUCAgICBgYGBgYGBgYGBgYEBgYGBAUGCQkIBAQJBwYGBgMDBwYGBAYGBgYLBgYGBwkIBgsEBAICBgUGAgYDAwYGBgMCBAwGBgYGBgMDAwMHBwcHBwcCBAQEBAMDBAQEBAYCBgUGBAMHBgYFBgYGBgMDAwgICAAADA0JAAMDBAMGBgoIAwQEBgYDBAMDBgYGBgYGBgYGBgMDBgYGBgoHBwcHBgUHBwMFBwYJBwcHBwcHBgcHCgcHBgQDBAYGBAUGBQYFAwYGAwMFAwkGBgYGBAUDBgUIBQUFAwMDBgcHBwYHBwcFBQUFBQUFBQUFBQMDAwMGBgYGBgYGBgYGBgUGBgYEBQYKCgkEBAoHBgYGBAQIBgYEBgYGBgwGBwcHCgkGDAUFAwMGBQcCBgMDBgYGAwMFDQcGBwYGAwMDAwcHBwcHBwMEBAQEAwMEBAQEBgMHBQYFAwcGBwUHBgYGBAQECQkJAAANDgoAAwMEAwcHCwkDBAQHBwMEAwQHBwcHBwcHBwcHAwMHBwcHCgcHBwgHBggIBAYHBwoICAcICAcHCAcLBwcHBAMEBwcEBgcGBwYEBwcDAwYDCgcHBwcEBgQHBgkGBgUEAwQHBwcHBwgICAYGBgYGBgYGBgYGAwMDAwcHBwcHBwcHBwcHBQcHBwQGBwoKCgQECwgHBwcEBAkHBwQHBwcHDQcHBwgLCQcNBQUDAwcGBwIHBAQHBwcDAwUOBwcHBwcEBAQECAgICAgIAwQEBAQDAwQEBAQHAwcGBwUDCAcHBgcHBwcEBAQKCgoAAA4QCwAEBAUEBwcMCQQFBQcHBAUEBAcHBwcHBwcHBwcEBAcHBwcLCAgICQcGCQkEBggHCwkJCAkJCAcJCAwICAcFBAUHBwUGBwYHBgQHBwMDBgMLBwcHBwUGBAcGCQYGBQQEBAcICAgHCQkJBgYGBgYGBgYGBgYDAwMDBwcHBwcHBwcHBwcGBwcHBQYHCwsLBQUMCQcHBwQECQcHBQcHBwcOBwgICQwKBw4FBQMDBwYIAgcEBAcHBwQDBRAIBwgHBwQEBAQJCQkJCQkDBQUFBQQEBQUFBQcDCAYHBQQJBwgGCAcHBwQEBAsLCwAADxEMAAQEBQQICAwKBAUFCAgEBQQECAgICAgICAgICAQECAgICAwICAgJCAcJCQQHCAgMCQkICQkICAkIDAgICAUEBQgIBQcIBwgHBAgIAwMHAwwICAgIBQcECAcKBwcGBAQECAgICAgJCQkHBwcHBwcHBwcHBwMDAwMICAgICAgICAgICAYICAgFBwgMDAsFBQwJCAgIBQUKCAgFCAgICA8ICAgJDAsIDwYGAwMIBwgDCAQECAgIBAMGEQgICAgIBAQEBAkJCQkJCQMFBQUFBAQFBQUFCAMIBwgGBAkICAcICAgIBQUFCwsLAAAQEg0ABAQFBAgIDQsEBQUICAQFBAQICAgICAgICAgIBAQICAgIDQkJCQoIBwoKBAcJCAwKCgkKCgkICgkNCQkIBQQFCAgFBwgHCAcECAgEBAcEDAgICAgFBwQIBwsHBwYEBAQICQkJCAoKCgcHBwcHBwcHBwcHBAQEBAgICAgICAgICAgIBggICAUHCA0NDAUFDQoICAgFBQsICAUICAgIEAgJCQoNDAgQBgYEBAgHCQMIBAQICAgEBAYSCQgJCAgEBAQECgoKCgoKBAUFBQUEBAUFBQUIBAkHCAYECggJBwkICAgFBQUMDAwAABETDQAEBAYECQkOCwQGBgkJBAYEBQkJCQkJCQkJCQkEBAkJCQkOCQkJCgkICgoFCAkJDQoKCQoKCQkKCQ4JCQkGBAYJCQYICQgJCAUJCQQECAQNCQkJCQYIBQkICwgIBwUEBQkJCQkJCgoKCAgICAgICAgICAgEBAQECQkJCQkJCQkJCQkHCQkJBgcJDg4NBgYOCgkJCQUFCwkJBgkJCQkRCQkJCg4MCREHBwQECQgJAwkFBQkJCQQEBxMJCQkJCQUFBQUKCgoKCgoEBgYGBgQEBgYGBgkECQgJBwQKCQkICQkJCQUFBQ0NDQAAEhQOAAUFBgUJCQ8MBQYGCQkFBgUFCQkJCQkJCQkJCQUFCQkJCQ4KCgoLCQgLCwUICgkOCwsKCwsKCQsKDwoKCQYFBgkJBggJCAkIBQkJBAQIBA4JCQkJBggFCQgMCAgHBQUFCQoKCgkLCwsICAgICAgICAgICAQEBAQJCQkJCQkJCQkJCQcJCQkGCAkODg4GBg8LCQkJBQUMCQkGCQkJCRIJCgoLDw0JEgcHBAQJCAoDCQUFCQkJBQQHFAoJCgkJBQUFBQsLCwsLCwQGBgYGBQUGBgYGCQQKCAkHBQsJCggKCQkJBQUFDg4OAAATFQ8ABQUGBQoKEA0FBgYKCgUGBQUKCgoKCgoKCgoKBQUKCgoKDwsLCwwKCAwMBQgLCg8MDAsMDAsKDAsQCwsKBgUGCgoGCAoICggFCgoEBAgEDwoKCgoGCAUKCA0ICAcFBQUKCwsLCgwMDAgICAgICAgICAgIBAQEBAoKCgoKCgoKCgoKCAoKCgYICg8PDgYGEAwKCgoGBg0KCgYKCgoKEwoLCwwQDgoTBwcEBAoICwMKBQUKCgoFBAcVCwoLCgoFBQUFDAwMDAwMBAYGBgYFBQYGBgYKBAsICgcFDAoLCAsKCgoGBgYODg4AABQWEAAFBQcFCgoRDQUHBwoKBQcFBgoKCgoKCgoKCgoFBQoKCgoQCwsLDAoJDAwGCQsKEAwMCwwMCwoMCxELCwoHBQcKCgcJCgkKCQYKCgQECQQQCgoKCgcJBgoJDQkJCAUFBQoLCwsKDAwMCQkJCQkJCQkJCQkEBAQECgoKCgoKCgoKCgoICgoKBwkKEBAPBwcRDAoKCgYGDQoKBwoKCgoUCgsLDBEOChQICAQECgkLAwoGBgoKCgUECBYLCgsKCgYGBgYMDAwMDAwEBwcHBwUFBwcHBwoECwkKCAUMCgsJCwoKCgYGBg8PDwAAFRcQAAUFBwULCxEOBQcHCwsFBwUGCwsLCwsLCwsLCwUFCwsLCxEMDAwNCwkNDQYJDAsQDQ0MDQ0MCw0MEQwMCwcFBwsLBwkLCQsJBgsLBQUJBRALCwsLBwkGCwkOCQkIBgUGCwwMDAsNDQ0JCQkJCQkJCQkJCQUFBQULCwsLCwsLCwsLCwgLCwsHCQsRERAHBxENCwsLBgYOCwsHCwsLCxULDAwNEQ8LFQgIBQULCQwECwYGCwsLBQUIFwwLDAsLBgYGBg0NDQ0NDQUHBwcHBQUHBwcHCwUMCQsIBQ0LDAkMCwsLBgYGEBAQAAAWGBEABgYHBgsLEg8GBwcLCwYHBgYLCwsLCwsLCwsLBgYLCwsLEgwMDA0LCg0NBgoMCxENDQwNDQwLDQwSDAwLBwYHCwsHCgsKCwoGCwsFBQoFEQsLCwsHCgYLCg8KCgkGBgYLDAwMCw0NDQoKCgoKCgoKCgoKBQUFBQsLCwsLCwsLCwsLCQsLCwcKCxISEQcHEg0LCwsHBw8LCwcLCwsLFgsMDA0SEAsWCQkFBQsKDAQLBgYLCwsGBQkYDAsMCwsGBgYGDQ0NDQ0NBQcHBwcGBgcHBwcLBQwKCwkGDQsMCgwLCwsHBwcREREAABcaEgAGBggGDAwTDwYICAwMBggGBgwMDAwMDAwMDAwGBgwMDAwSDQ0NDgwKDg4GCg0MEg4ODQ4ODQwODRMNDQwIBggMDAgKDAoMCgYMDAUFCgUSDAwMDAgKBgwKDwoKCQYGBgwNDQ0MDg4OCgoKCgoKCgoKCgoFBQUFDAwMDAwMDAwMDAwJDAwMCAoMEhIRCAgTDgwMDAcHDwwMCAwMDAwXDA0NDhMRDBcJCQUFDAoNBAwGBgwMDAYFCRoNDA0MDAYGBgYODg4ODg4FCAgICAYGCAgICAwFDQoMCQYODA0KDQwMDAcHBxEREQAAGBsTAAYGCAYMDBQQBggIDAwGCAYHDAwMDAwMDAwMDAYGDAwMDBMNDQ0PDAsPDwcLDQwTDw8NDw8NDA8NFA0NDAgGCAwMCAsMCwwLBwwMBQULBRMMDAwMCAsHDAsQCwsJBwYHDA0NDQwPDw8LCwsLCwsLCwsLCwUFBQUMDAwMDAwMDAwMDAoMDAwICwwTExIICBQPDAwMBwcQDAwIDAwMDBgMDQ0PFBEMGAkJBQUMCw0EDAcHDAwMBgUJGw0MDQwMBwcHBw8PDw8PDwUICAgIBgYICAgIDAUNCwwJBg8MDQsNDAwMBwcHEhISAAAAAAABAAACKgABAFoAJAAGAfgAKQAP/5EAMwAP/38ANwAP/6QAOQAP/6QAOgAP/7YAPAAP/5EAVQAP/7YAWQAP/8kAWgAP/9sAXAAP/8kANwAQ/8kAVQAQ/9sAOgAQ/+4AOQAQ/+4APAAQ/7YAPAAR/5EANwAR/6QAKQAR/5EAVQAR/7YAOgAR/7YAWQAR/8kAMwAR/38AWgAR/9sAOQAR/6QAXAAR/8kANwAd/7YAOQAd/+4APAAd/9sAOQAe/+4ANwAe/7YAPAAe/9sAKQAk/9sAOgAk/+4APAAk/8kAOQAk/9sANwAk/8kAMwAk/9sAJAA3/8kANQA3/+4ALwA3/7YALwA5/7YAJAA5/9sALwA6/7YAJAA6/9sALwA8/6QANQA8/+4AJAA8/8kAOQBE/+4AOgBE/+4APABE/8kANwBE/7YANwBG/7YAVQBG/+wAOQBI/+4APABI/8kANwBI/7YAOgBI/+4AVQBJABQAPABM/+4ANwBM/+4APABS/8kANwBS/7YAOQBS/+4AOgBS/+4APABT/9sAPABU/8kANwBV/7YAOQBV/+4ANwBW/7YAqgBW/8kAOQBY/+4ANwBY/7YAPABY/9sAJABZ/+4AVQBZABIAPABZ/+4ANwBa/7YAVQBaABIAJABa/+4AVQBbABQAVQBcABIALwBc/9sANwBc/8kAJABc/+4AVQBdABQAqQCp/+4ALwCq/6QAJACq/8kASQCqABIAqgCq/+4ACALuAAA=]]></data>
	</file>
	<file>
	  <filename>/fonts/MankSans.ttf</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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ACAApP/bACAApf/bACAAyf++ACEAHv+UACEAH/+VACEAIP/NACEAIv/NACEAJP+UACEAJv+UACEALv+9ACEANv+1ACEAN/89ACEAQP+VACEAQf+UACEAQ/+UACEARP+sACEARf+VACEARv+UACEAR/+VACEASf+UACEASv+5ACEAS/+UACEATP21ACEATf9vACEAU//EACEAV/9QACEAYP/TACEAYf+8ACEAY//CACEAZP/ZACEAZf+VACEAZv+3ACEAZ/+VACEAaP/aACEAav/XACEAa/+UACEApP+9ACEApf+9ACEAv//jACEAyf++ACEAyv/IACEAy/+UACEAzP+wACIAHv/JACIAH//XACIAIP/kACIAIv/YACIAJv/AACIALv/ZACIANv/HACIAN/+dACIAQP/lACIARf/HACIAR//qACIAS/+TACIATP4zACIATf/MACIAU//EACIAV/9QACIAYP/sACIAYf+8ACIAY//DACIAZP/WACIAZf+9ACIAZv+7ACIAZ//JACIAaP/gACIAav/VACIAa//MACIApP/ZACIApf/ZACIAyf/MACIAyv/IACIAy/+TACIAzP+wACMAHv+gACMAH//PACMAIP/gACMAIv/VACMAJP/KACMAJv/PACMALv/VACMANv/EACMAN/9zACMAQP/iACMAQf/KACMAQ//KACMARP/KACMARf++ACMARv/KACMAR//NACMASf/KACMASv/FACMAS/9rACMATP3dACMATf+iACMAU//EACMAV/9QACMAYf+8ACMAY//MACMAZP/cACMAZf+6ACMAZv/FACMAZ//GACMAav/WACMAa/+jACMApP/VACMApf/VACMAyf++ACMAyv/IACMAy/9rACMAzP+wACQAHf+7ACQAIf9tACQAIv/oACQAI/+iACQAJf/YACQAJv/eACQALv8gACQAMP+/ACQANP+/ACQANv+1ACQAN/+zACQAPP++ACQAPv++ACQAQP/qACQARf/dACQAS//mACQATP4XACQATf/gACQATv+VACQAUP+EACQAUf+BACQAUv+EACQAU/+6ACQAVP98ACQAV/9LACQAWv+/ACQAW/+/ACQAXP+EACQAXf/AACQAXv9+ACQAX//AACQAYP+jACQAYf+6ACQAYv+8ACQAY//CACQAZP/BACQAZf+2ACQAZv/CACQAZ/+yACQAaP/cACQAav/eACQApP8gACQApf8wACQAp/+/ACQAtv++ACQAvf+VACQAvv+VACQAv//lACQAwf+9ACQAwv+VACQAxP+EACQAxf+EACQAxv+EACQAx//cACQAyP+mACQAyf/gACQAyv/kACQAy//mACQAzv/sACQAz/+EACQA0P+EACQA0f/lACQA0v/fACQA0/+VACQA1v+8ACQA1/+8ACQA2P/lACQA2f+8ACUAH//YACUAIP/oACUAIv/eACUALv/bACUANv/NACUAN/9zACUAQf/MACUAQ//RACUARP/cACUARf/GACUARv/KACUAR//WACUASf/PACUASv+5ACUATP3bACUATf+NACUAU//hACUAV/9QACUAYP/kACUAYf/hACUAY//pACUAZP/oACUAZf/dACUAZv/pACUAZ//ZACUAaP/bACUAav/VACUAa//pACUApP/bACUApf/bACUAyf++ACYAH/+2ACYAIP/EACYALv+oACYANv+1ACYAN/9rACYAQf/DACYAQ//SACYARP/jACYARf+PACYARv/JACYAR/+5ACYASf/QACYASv+5ACYATP3dACYATf+IACYATv/sACYAV/9QACYAav/WACYAa//pACYApP+oACYApf+oACYAvf/sACYAvv/sACYAwP/rACYAwf/sACYAwv/sACYAyf++AC4AHf+3AC4AHv/LAC4AIf/AAC4AI//KAC4AJP+yAC4AJf/dAC4AJv/CAC4AMP+0AC4ANP+0AC4AN/9FAC4APP+zAC4APv+0AC4AQf87AC4AQv/CAC4AQ/8dAC4ARP92AC4ARv9VAC4ASf8cAC4AS/9LAC4ATP13AC4ATf7tAC4AUP/VAC4AUf/ZAC4AUv/WAC4AU//EAC4AVP/UAC4AV/9QAC4AWf/iAC4AXP/UAC4AXv/dAC4AYf+kAC4AYv/iAC4AY/9tAC4AZP+dAC4AZv9sAC4AaP/WAC4Aa/81AC4Ap/+0AC4Atv+zAC4Au//CAC4Av//fAC4AxP/VAC4Axf/WAC4Axv/WAC4Ax//WAC4AyP/WAC4Ayf++AC4Ayv/IAC4Ay/9kAC4AzP+wAC4Az//UAC4A0P/UAC4A0f/TAC4A0v/UAC4A0//UAC4A1v/iAC4A1//iAC4A2P/gAC4A2f/iAC8AH//iAC8AIv/oAC8ALv/hAC8ANv/ZAC8AN/9/AC8AQf/YAC8AQ//cAC8ARP/nAC8ARf/PAC8ARv/VAC8AR//eAC8ASf/aAC8ASv/FAC8ATP47AC8ATf+ZAC8AV/9QAC8AaP/cAC8Aav/VAC8ApP/hAC8Apf/hAC8Ayf++ADAAHf+2ADAAIf7vADAAI//SADAAJf/pADAAJv/RADAALv/RADAAMP+nADAANP+mADAAN/+iADAAPP+nADAAPv+mADAAQf/PADAAS/+6ADAATP1lADAATf/BADAAUP/hADAAUf/nADAAUv/jADAAU//EADAAVP/YADAAV/9PADAAXP/eADAAYf+1ADAAY/97ADAAZP+rADAAZv9nADAAaP/bADAAp/+nADAAtv+nADAAxP/hADAAxf/jADAAxv/jADAAx//jADAAyP/jADAAyf/BADAAyv/NADAAy/+6ADAAz//eADAA0P/eADAA0f/dADAA0v/eADAA0//eADEAHv/IADEAH/+OADEAIP+eADEAJP/cADEALv+wADEANv+1ADEAN/9fADEAQf+DADEAQ/+5ADEARP/SADEARf+HADEARv+rADEAR/+WADEASf+3ADEASv+5ADEAS//nADEATP1eADEATf9iADEATv/sADEAV/9QADEAav/UADEAa//DADEApP+wADEApf+wADEAvf/sADEAvv/sADEAv//mADEAwP/qADEAwf/sADEAwv/sADEAyf++ADEAyv/nADEAy//nADEAzP/fADIAHf/WADIAHv/UADIAIf+WADIAI//TADIAJf/OADIAJv/FADIAMP/WADIANP/WADIAN/+mADIAPP/WADIAPv/WADIAS/+eADIATP5OADIATf/UADIAUP/JADIAUf/PADIAUv/KADIAU//EADIAVP/BADIAV/9PADIAXP/IADIAXv/YADIAYf+qADIAYv/fADIAY/+8ADIAZP/EADIAZv+4ADIAaP/aADIAa//XADIAp//WADIAtv/WADIAv//gADIAxP/JADIAxf/KADIAxv/KADIAx//LADIAyP/KADIAyf/UADIAyv/IADIAy/+eADIAzP+wADIAz//IADIA0P/IADIA0f/HADIA0v/IADIA0//IADIA1v/fADIA1//fADIA2P/cADIA2f/fADMAHf/sADMAHv/hADMAIf+1ADMAIv/oADMAI//pADMAJf/NADMAJv/ZADMALv92ADMAMP/sADMANP/sADMANv+1ADMAN/+zADMAPP/sADMAPv/sADMAQP/eADMAQf/PADMARf/dADMAS/+rADMATP5pADMATf/hADMATv8BADMAUP/hADMAUf/fADMAUv/iADMAU/+4ADMAVP/cADMAVv/mADMAV/8yADMAWv/sADMAW//sADMAXP/hADMAXf/sADMAXv/dADMAX//sADMAYP/rADMAYf+eADMAYv/rADMAY//QADMAZP/YADMAZf+lADMAZv/MADMAZ/8BADMAaP/sADMAav/fADMAa//kADMApP92ADMApf92ADMAp//sADMAtv/sADMAvf+OADMAvv9mADMAv/+qADMAwP/hADMAwf8BADMAwv9kADMAxP/hADMAxf/iADMAxv/iADMAx//iADMAyP/iADMAyf/hADMAyv/JADMAy/+rADMAzP+SADMAzv/sADMAz//hADMA0P/hADMA0f/gADMA0v/hADMA0//hADMA1v/rADMA1//rADMA2P/oADMA2f/rADQAJv/qADQAN/+lADQAS/+9ADQATP1nADQATf/EADQAU//EADQAV/9QADQAYf+8ADQAY//kADQAZv/fADQAyf/EADQAyv/QADQAy/+9ADUAN/+zADUATP15ADUATf/fADUAV/9WADUAyf/fADYAHf+2ADYAHv/LADYAIf+2ADYAI/+3ADYAJP+2ADYAJf/NADYAJv/CADYAMP/VADYANP+2ADYAN/9fADYAPP+2ADYAPv+2ADYAQf+2ADYAQv+2ADYAQ/+2ADYARP+2ADYARv+2ADYASf+2ADYAS/+2ADYATP7IADYATf+MADYAUP/HADYAUf/PADYAUv/KADYAU//EADYAVP+2ADYAV/9QADYAWf/jADYAXP/CADYAXv/XADYAYf+2ADYAYv/eADYAY/+2ADYAZP+1ADYAZv+2ADYAaP/ZADYAa/+2ADYAp/+2ADYAtv+2ADYAu/+2ADYAv//fADYAxP/HADYAxf/KADYAxv/KADYAx//KADYAyP/KADYAyf++ADYAyv/IADYAy/+2ADYAzP+2ADYAz//CADYA0P/CADYA0f/BADYA0v/CADYA0//CADYA1v/eADYA1//eADYA2P/cADYA2f/eADcAQgAVADcATP/GADcATf/eADcAV/9WADcAyf/eADgAHf+KADgAHv/LADgAIf9aADgAI/+nADgAJf++ADgAJv/CADgAMP99ADgANP98ADgAN/+WADgAPP98ADgAPv98ADgAS/+PADgATP4pADgATf/GADgATv/bADgAUP+3ADgAUf+9ADgAUv+5ADgAU//EADgAVP+sADgAV/9QADgAXP+yADgAXv/FADgAYf+aADgAYv/NADgAY/9kADgAZP+dADgAZv9PADgAaP/VADgAa//CADgAp/99ADgAtv98ADgAvf/bADgAvv/bADgAv//NADgAwP/bADgAwf/bADgAwv/bADgAxP+3ADgAxf+5ADgAxv+5ADgAx/+5ADgAyP+5ADgAyf/GADgAyv/IADgAy/+PADgAzP+9ADgAz/+yADgA0P+yADgA0f+xADgA0v+yADgA0/+yADgA1v/NADgA1//NADgA2P/KADgA2f/NADkAHf+YADkAHv/LADkAIf7zADkAI/+3ADkAJP+yADkAJf/OADkAJv/CADkAMP+AADkANP9+ADkAN/9FADkAPP+BADkAPv+BADkAQf87ADkAQv+wADkAQ/8iADkARP98ADkARv9VADkASf8bADkAS/7zADkATP5aADkATf7JADkAUP/IADkAUf/PADkAUv/KADkAU//EADkAVP+oADkAV/9PADkAWf/jADkAXP/CADkAXv/YADkAYf+qADkAYv/fADkAY/9vADkAZP+kADkAZv9aADkAaP/aADkAa/7zADkAp/+AADkAtv+BADkAu/+wADkAv//gADkAxP/IADkAxf/KADkAxv/KADkAx//KADkAyP/KADkAyf++ADkAyv/IADkAy/9kADkAzP+wADkAz//CADkA0P/CADkA0f/BADkA0v/CADkA0//CADkA1v/fADkA1//fADkA2P/cADkA2f/fADoAMgAfADoAN/+zADoATP1CADoATf/fADoAV/9WADoAyf/fADsAMgAjADsAN/+zADsATP2CADsATf/fADsAV/9WADsAyf/fADwAHv/MADwAH/+RADwAIP+jADwAJP/eADwALv+wADwANv+1ADwAN/83ADwAQf+QADwAQ/+6ADwARP/SADwARf+IADwARv+sADwAR/+YADwASf+4ADwASv+5ADwAS//oADwATP1CADwATf9lADwATv/sADwAV/9QADwAav/TADwAa//HADwApP+wADwApf+wADwAvf/sADwAvv/sADwAv//nADwAwP/qADwAwf/sADwAwv/sADwAyf++ADwAyv/oADwAy//oADwAzP/hAD0AH//PAD0AIP/bAD0AIf+MAD0AI//sAD0ALv9mAD0ANv+1AD0AN/+GAD0AQf+zAD0AQ//jAD0ARf+mAD0ARv/cAD0AR//UAD0ASf/iAD0ASv+5AD0ATP5SAD0ATf+gAD0ATv/hAD0AUP/KAD0AUf/HAD0AUv/KAD0AVP+9AD0AV/9QAD0AXP/KAD0AXv/BAD0AaP/gAD0Aav/WAD0ApP9mAD0Apf9lAD0Avf/hAD0Avv/hAD0Awf/hAD0Awv/hAD0AxP/KAD0Axf/KAD0Axv/KAD0AyP/KAD0Ayf+5AD0Az//KAD0A0P/KAD0A0v/cAD0A0//KAD4AHv/MAD4AH/+RAD4AIP++AD4AJP/eAD4ALv+wAD4AQf+QAD4AQ/+6AD4ARP/SAD4ARf+IAD4ARv+sAD4AR/+XAD4ASf+4AD4AS//oAD4ATf9lAD4ATv/sAD4AV//GAD4Aa//HAD4ApP+wAD4Apf+wAD4Avf/sAD4Avv/sAD4Av//nAD4AwP/qAD4Awf/sAD4Awv/sAD4Ayf++AD4Ayv/oAD4Ay//oAD4AzP/hAD8AHf+7AD8AHv/LAD8AIf+pAD8AI/+8AD8AJP/HAD8AJf/RAD8AJv/KAD8AMP++AD8ANP++AD8ANv/hAD8AN/9IAD8APP+9AD8APv+9AD8AQf+hAD8AQv/LAD8AQ/+lAD8ARP+xAD8ARv+eAD8ASf+kAD8AS//LAD8ATP4DAD8ATf9iAD8ATv/lAD8AUP/JAD8AUf/OAD8AUv/KAD8AU//EAD8AVP/GAD8AV/9QAD8AWf/bAD8AXP/HAD8AXv/TAD8AYf/CAD8AYv/ZAD8AY//HAD8AZP/GAD8AZv/HAD8AaP/WAD8Aa/++AD8Ap/++AD8Atv+9AD8Au//LAD8Avf/lAD8Avv/lAD8Av//XAD8AwP/lAD8Awf/lAD8Awv/lAD8AxP/JAD8Axf/KAD8Axv/KAD8Ax//KAD8AyP/KAD8Ayf++AD8Ayv/LAD8Ay//LAD8AzP/JAD8Az//HAD8A0P/HAD8A0f/KAD8A0v/HAD8A0//HAD8A1v/ZAD8A1//ZAD8A2P/XAD8A2f/ZAEAAHv/mAEAAH//jAEAAIv/pAEAAJP/rAEAAJv+3AEAALv/iAEAANv/ZAEAAN/+UAEAAQf/rAEAAQ//nAEAARP/rAEAARf/QAEAARv/nAEAAR//hAEAASf/oAEAASv/EAEAAS/+cAEAATP4dAEAATf+4AEAAU//EAEAAV/9QAEAAYf+8AEAAY/+xAEAAZP/LAEAAZf/NAEAAZv+mAEAAZ//ZAEAAaP/cAEAAav/VAEAAa//gAEAApP/iAEAApf/iAEAAyf++AEAAyv/IAEAAy/+cAEAAzP+wAEEAHf+ZAEEAHv/hAEEAIf88AEEAIv/oAEEAI/9WAEEAJf/NAEEAJv/HAEEALv88AEEAMP+PAEEANP+PAEEANv+1AEEAN/+zAEEAPP+QAEEAPv+QAEEAQP/eAEEAQv/ZAEEARf/dAEEARv/AAEEAS/+rAEEATP3VAEEATf/gAEEATv88AEEAUP88AEEAUf88AEEAUv88AEEAU/+4AEEAVP88AEEAVv88AEEAV/6IAEEAWv88AEEAW/88AEEAXP88AEEAXf88AEEAXv88AEEAX/88AEEAYP88AEEAYf88AEEAYv88AEEAY/88AEEAZP87AEEAZf88AEEAZv88AEEAZ/88AEEAaP/cAEEAav/eAEEAa//kAEEApP88AEEApf88AEEAp/+PAEEAtv+QAEEAvf+NAEEAvv9nAEEAv/+qAEEAwP/hAEEAwf88AEEAwv9kAEEAxP88AEEAxf9zAEEAxv9GAEEAx/+iAEEAyP88AEEAyf/gAEEAyv/JAEEAy/+rAEEAzP88AEEAzv/WAEEAz/9hAEEA0P88AEEA0f+qAEEA0v/JAEEA0/88AEEA1v96AEEA1/9QAEEA2P+qAEEA2f88AEIALv+9AEIANv+1AEIAN/+zAEIAOQAPAEIAOwAcAEIARf/dAEIATP2QAEIATf/gAEIAV/9WAEIAav/eAEIApP+9AEIApf+8AEIAyf/gAEMAHf+uAEMAH//pAEMAIf9YAEMAIv/nAEMAI/+UAEMAJf/MAEMAJv/RAEMALv8VAEMAMP+yAEMANP+xAEMANv+1AEMAN/+zAEMAPP+xAEMAPv+xAEMAQP/eAEMARf/dAEMAS//ZAEMATP1dAEMATf/jAEMATv+FAEMAUP9yAEMAUf9wAEMAUv9yAEMAU/+tAEMAVP9qAEMAV/8/AEMAWv+wAEMAW/+wAEMAXP9yAEMAXf+xAEMAXv9sAEMAX/+xAEMAYP+TAEMAYf+rAEMAYv+tAEMAY/+zAEMAZP+yAEMAZf+nAEMAZv+zAEMAZ/+jAEMAaP/bAEMAav/iAEMApP8VAEMApf80AEMAp/+yAEMAtv+xAEMAvf+QAEMAvv+FAEMAv//YAEMAwP/rAEMAwf+yAEMAwv+FAEMAxP9yAEMAxf92AEMAxv9yAEMAx//QAEMAyP+bAEMAyf/jAEMAyv/YAEMAy//ZAEMAzv/gAEMAz/9yAEMA0P9yAEMA0f/YAEMA0v/TAEMA0/+JAEMA1v+tAEMA1/+tAEMA2P/YAEMA2f+tAEQAHf/OAEQAH//rAEQAIf+rAEQAIv/mAEQAI//AAEQAJf/aAEQAJv/mAEQALv91AEQAMP/RAEQANP/RAEQANv+0AEQAN/+yAEQAPP/RAEQAPv/RAEQARf/cAEQATP1BAEQATf/iAEQATv+zAEQAUP+zAEQAUf+xAEQAUv+zAEQAU//VAEQAVP+vAEQAV/9JAEQAWv/YAEQAW//YAEQAXP+yAEQAXf/ZAEQAXv+vAEQAX//ZAEQAYP/HAEQAYf/VAEQAYv/VAEQAY//bAEQAZP/aAEQAZf/PAEQAZv/bAEQAZ//LAEQAaP/aAEQAav/gAEQApP91AEQApf91AEQAp//RAEQAtv/RAEQAvf+zAEQAvv+zAEQAwf+9AEQAwv+zAEQAxP+zAEQAxf+zAEQAxv+zAEQAx//lAEQAyP+zAEQAyf/iAEQAzv/qAEQAz/+yAEQA0P+yAEQA0v/dAEQA0/+yAEQA1v/VAEQA1//VAEQA2f/VAEUAHf+XAEUAHv/ZAEUAIf+FAEUAI/+xAEUAJf/IAEUAJv/CAEUAMP/HAEUANP+OAEUAN/+jAEUAPP+OAEUAPv+OAEUAS/+qAEUATP2OAEUATf/UAEUATv/fAEUAUP/AAEUAUf/GAEUAUv/CAEUAU//EAEUAVP+6AEUAV/9QAEUAXP+9AEUAXv/MAEUAYf+bAEUAYv/TAEUAY/9sAEUAZP+dAEUAZv9sAEUAaP/VAEUAa//UAEUAp/+PAEUAtv+OAEUAvf/fAEUAvv/fAEUAv//SAEUAwP/fAEUAwf/fAEUAwv/fAEUAxP/AAEUAxf/CAEUAxv/CAEUAx//CAEUAyP/CAEUAyf/UAEUAyv/IAEUAy/+qAEUAzP/RAEUAz/+9AEUA0P+9AEUA0f+8AEUA0v+9AEUA0/+9AEUA1v/TAEUA1//TAEUA2P/QAEUA2f/TAEYAHf+nAEYAH//oAEYAIf9QAEYAIv/nAEYAI/+KAEYAJf/JAEYAJv/MAEYALv9QAEYAMP+qAEYANP+qAEYANv+1AEYAN/+zAEYAPP+pAEYAPv+pAEYAQP/bAEYARf/dAEYAS//TAEYATP4BAEYATf/kAEYATv94AEYAUP9hAEYAUf9eAEYAUv9hAEYAU/+tAEYAVP9XAEYAV/8+AEYAWv+lAEYAW/+lAEYAXP9hAEYAXf+lAEYAXv9aAEYAX/+lAEYAYP+FAEYAYf+eAEYAYv+iAEYAY/+nAEYAZP+mAEYAZf+bAEYAZv+nAEYAZ/+YAEYAaP/bAEYAav/iAEYApP9QAEYApf9QAEYAp/+qAEYAtv+pAEYAvf+RAEYAvv94AEYAv//SAEYAwP/oAEYAwf+vAEYAwv94AEYAxP9hAEYAxf93AEYAxv9hAEYAx//JAEYAyP+YAEYAyf/kAEYAyv/RAEYAy//TAEYAzP/sAEYAzv/dAEYAz/9lAEYA0P9hAEYA0f/SAEYA0v/QAEYA0/+GAEYA1v+iAEYA1/+iAEYA2P/SAEYA2f+jAEcAHf+ZAEcAIf70AEcAI/+3AEcAJf/NAEcAJv/EAEcAMP+bAEcANP+bAEcAN/+sAEcAPP+aAEcAPv+aAEcAS//BAEcATP24AEcATf/ZAEcAUP/HAEcAUf/PAEcAUv/KAEcAU//EAEcAVP+nAEcAV/9PAEcAXP/CAEcAXv/XAEcAYf+pAEcAYv/eAEcAY/+DAEcAZP+jAEcAZv+DAEcAaP/ZAEcAa//rAEcAp/+bAEcAtv+aAEcAv//fAEcAxP/HAEcAxf/KAEcAxv/KAEcAx//KAEcAyP/KAEcAyf/ZAEcAyv/IAEcAy//BAEcAzP/oAEcAz//CAEcA0P/CAEcA0f/BAEcA0v/MAEcA0//CAEcA1v/eAEcA1//eAEcA2P/cAEcA2f/eAEgAHf+3AEgAHv/KAEgAIf+3AEgAI/+3AEgAJf+3AEgAJv/BAEgAMP+3AEgANP+3AEgAN/+qAEgAPP+3AEgAPv+3AEgAS/+3AEgATP8cAEgATv/cAEgAUP+3AEgAUf+6AEgAUv+3AEgAU//DAEgAVP+3AEgAV/8cAEgAXP+3AEgAXv/EAEgAYf+3AEgAYv/NAEgAY/+3AEgAZP+2AEgAZv+3AEgAaP/WAEgAa/+3AEgAp/+3AEgAtv+3AEgAvf/cAEgAvv/cAEgAv//PAEgAwP/cAEgAwf/cAEgAwv/cAEgAxP+3AEgAxf+3AEgAxv+3AEgAx/+3AEgAyP+3AEgAyv/HAEgAy/+3AEgAzP+3AEgAz/+3AEgA0P+3AEgA0f+2AEgA0v+3AEgA0/+3AEgA1v/NAEgA1//NAEgA2P/KAEgA2f/NAEkAHf+1AEkAHv/LAEkAIf++AEkAI//IAEkAJP+yAEkAJf/cAEkAJv/CAEkAMP+yAEkANP+yAEkAN/9FAEkAPP+xAEkAPv+xAEkAQf87AEkAQv/BAEkAQ/8aAEkARP92AEkARv9VAEkASf8VAEkAS/9FAEkATP5wAEkATf7kAEkATv/sAEkAUP/UAEkAUf/XAEkAUv/UAEkAU//EAEkAVP/SAEkAV/9QAEkAWf/hAEkAXP/SAEkAXv/bAEkAYf+jAEkAYv/hAEkAY/9qAEkAZP+eAEkAZv9oAEkAaP/XAEkAa/8uAEkAp/+yAEkAtv+xAEkAu//BAEkAvf/sAEkAvv/sAEkAv//eAEkAwP/sAEkAwf/sAEkAwv/sAEkAxP/UAEkAxf/UAEkAxv/UAEkAx//UAEkAyP/UAEkAyf++AEkAyv/IAEkAy/9kAEkAzP+wAEkAz//SAEkA0P/SAEkA0f/RAEkA0v/SAEkA0//SAEkA1v/hAEkA1//hAEkA2P/eAEkA2f/hAEoAN/+zAEoATP8eAEoAV/8eAEsAHf/lAEsAHv/rAEsAH/+hAEsAIP+0AEsAIf84AEsAIv/sAEsAI//EAEsALv9HAEsAMP/pAEsANP/oAEsANv+1AEsAN/9VAEsAPP/oAEsAPv/oAEsAQf+tAEsAQ//fAEsARf+TAEsARv/TAEsAR/+jAEsASf/dAEsASv+5AEsATP39AEsATf+LAEsATv5AAEsAUP4iAEsAUf6cAEsAUv4UAEsAU//GAEsAVP44AEsAV/9GAEsAWv39AEsAW/4VAEsAXP39AEsAXf4SAEsAXv4OAEsAX/62AEsAYP55AEsAYf+7AEsAYv4dAEsAY/4mAEsAZP38AEsAZf4CAEsAZv39AEsAZ/4cAEsAaP/bAEsAav/WAEsAa//lAEsApP9HAEsApf9GAEsAp//pAEsAtv/oAEsAvf84AEsAvv+nAEsAwP/fAEsAwf/MAEsAwv+WAEsAxP4iAEsAxf8eAEsAxv+HAEsAyP+1AEsAyf+LAEsAzv/UAEsAz/8MAEsA0P9vAEsA0v/IAEsA0/+kAEsA1v8lAEsA1/+RAEsA2f/BAEwAHf2VAEwAHv51AEwAH/4TAEwAIP4nAEwAIf21AEwAIv4zAEwAI/3dAEwAJP4XAEwAJf3bAEwAJv3dAEwALv13AEwAL/47AEwAMP1mAEwAMf1eAEwAMv5PAEwAM/5pAEwANP1nAEwANf15AEwANv7IAEwAOP4pAEwAOf5bAEwAOv1CAEwAO/2CAEwAPP1CAEwAPf5SAEwAPv7OAEwAP/4DAEwAQP4dAEwAQf3UAEwAQv2QAEwAQ/1dAEwARP1CAEwARf2OAEwARv4BAEwAR/25AEwASP8dAEwASf5wAEwASv8eAEwAS/39AEwATf7wAEwATv5AAEwAT/4LAEwAUP4iAEwAUf4FAEwAUv4UAEwAU/5sAEwAVP76AEwAVf4VAEwAVv9lAEwAV/9nAEwAWP5AAEwAWf65AEwAWv1CAEwAW/4VAEwAXP3hAEwAXv6lAEwAX/62AEwAYP55AEwAYf5lAEwAYv4dAEwAY/4mAEwAZP1BAEwAZf4CAEwAZv+NAEwAZ/4cAEwAaP8NAEwAav8JAEwAa/3yAEwApP13AEwApf13AEwAp/8RAEwAqf5PAEwAsf2CAEwAtv1CAEwAu/2QAEwAvf5AAEwAvv5AAEwAv/39AEwAwP4eAEwAwf5AAEwAwv5AAEwAxP9kAEwAxf4UAEwAxv4UAEwAx/30AEwAyP4UAEwAyf7wAEwAyv7bAEwAy/39AEwAzP61AEwAzv4SAEwAz/3hAEwA0P3hAEwA0f3hAEwA0v3hAEwA0/3hAEwA1v4dAEwA1/4dAEwA2P3+AEwA2f4dAE0AHf/lAE0AH//DAE0AIP/OAE0AIf7wAE0AIv/sAE0AI//EAE0ALv7wAE0AMP/pAE0ANP/oAE0ANv+1AE0AN/9+AE0APP/oAE0APv/oAE0AQf/WAE0AQ//fAE0ARf+bAE0ARv/TAE0AR//MAE0ASf/dAE0ASv+7AE0ATP7wAE0ATf+cAE0ATv7wAE0AUP7wAE0AUf7wAE0AUv7wAE0AU//GAE0AVP7wAE0AV/7wAE0AWv7wAE0AW/7wAE0AXP7wAE0AXf7wAE0AXv7wAE0AX/7wAE0AYP7wAE0AYf+7AE0AYv7wAE0AY/7wAE0AZP7vAE0AZf7wAE0AZv7wAE0AZ/7wAE0AaP/bAE0Aav/WAE0ApP7wAE0Apf7wAE0Ap//pAE0Atv/oAE0Avf7wAE0Avv+nAE0AwP/rAE0Awf/LAE0Awv+WAE0AxP7wAE0Axf7wAE0Axv+HAE0AyP+0AE0Ayf+cAE0Azv/gAE0Az/7wAE0A0P9vAE0A0v/UAE0A0/+jAE0A1v7wAE0A1/+RAE0A2f/AAE4AHv/LAE4AJP+yAE4AN/9FAE4AQf87AE4AQ/+eAE4ARP/GAE4ARv+EAE4ASf+cAE4AS/5AAE4ATP5AAE4ATf7wAE4AV/9QAE4AYf/ZAE4AZv/bAE4Aa/5AAE4Ayf++AE4Ayv/IAE4Ay/9kAE4AzP+wAE8AHv9tAE8AH/+1AE8AIP/HAE8AIv/pAE8AJP9qAE8AJv/pAE8ALv/EAE8ANv+1AE8AN/81AE8AQP/JAE8AQf87AE8AQ/+NAE8ARP+6AE8ARf+mAE8ARv9xAE8AR/+2AE8ASf+LAE8ASv+5AE8AS/6iAE8ATP4LAE8ATf6aAE8AU//jAE8AV/9QAE8AYf/jAE8AY//gAE8AZP/qAE8AZf++AE8AZv/cAE8AZ//LAE8Aav/XAE8Aa/6iAE8ApP/EAE8Apf/EAE8Ayf++AE8Ayv/IAE8Ay/9kAE8AzP+wAFAAHv/JAFAAIf+NAFAAJP+pAFAAJf/oAFAAN/86AFAAQf86AFAAQ/+nAFAARP/HAFAARv+RAFAASf+lAFAAS/4hAFAATP4hAFAATf7vAFAATv/bAFAAUP/gAFAAUf/mAFAAUv/iAFAAVP/XAFAAV/9PAFAAXP/dAFAAXv/sAFAAYf/AAFAAYv/gAFAAaP/aAFAAa/4hAFAAxP/gAFAAxf/iAFAAxv/iAFAAx//iAFAAyP/iAFAAyf+9AFAAyv/HAFAAy/9jAFAAzP+vAFAAz//dAFAA0P/dAFAA0f/cAFAA0v/dAFAA0//dAFEAN/+zAFEATP4FAFEAV/9WAFIAHv+4AFIAJP+YAFIAJv/mAFIAN/81AFIAQf87AFIAQ/+KAFIARP+3AFIARv9tAFIASf+HAFIAS/4UAFIATP4UAFIATf7wAFIAU//gAFIAV/9QAFIAX//MAFIAYf/gAFIAY//dAFIAZP/mAFIAZv/ZAFIAa/4UAFIAv//fAFIAyf++AFIAyv/IAFIAy/9kAFIAzP+wAFMAHv+8AFMAIf+FAFMAIv/nAFMAI//pAFMAJf/UAFMALv9jAFMANv+1AFMAN/+zAFMAQP/kAFMARf/dAFMAS/+bAFMATP5sAFMATf/rAFMATv+OAFMAUP/FAFMAUf/AAFMAUv/EAFMAU/+rAFMAVP+1AFMAVv/WAFMAV/8/AFMAXP/FAFMAXv+6AFMAYf+WAFMAZf/sAFMAaP/cAFMAa/+9AFMApP9jAFMApf9jAFMAvf/cAFMAvv/cAFMAv//NAFMAwP/bAFMAwf/cAFMAwv/cAFMAxP/FAFMAxf/EAFMAxv/EAFMAx//EAFMAyP/EAFMAyf/rAFMAyv++AFMAy/+bAFMAzP+fAFMAz//FAFMA0P/FAFMA0f/EAFMA0v/FAFMA0//FAFQAHv/LAFQAJP+yAFQAQf87AFQAQ/+5AFQARP/ZAFQARv+kAFQASf+3AFQAS/44AFQATf7wAFQAV//aAFQAa/44AFQAyf++AFQAyv/IAFQAy/9kAFQAzP+wAFUAHv/LAFUAJP+yAFUAN/9FAFUAQf87AFUAQ/+UAFUARP+/AFUARv94AFUASf+SAFUAS/6tAFUATP4VAFUATf6lAFUAU//sAFUAV/9QAFUAYf/sAFUAY//nAFUAZv/jAFUAa/6tAFUAyf++AFUAyv/IAFUAy/9kAFUAzP+wAFYAN/9lAFYAQf9lAFYATP9lAFYATf9lAFYAV/9lAFYAYf/WAFYAyf9lAFcAQf87AFcATf+4AFcAV//nAFcAyf+4AFgAHf/WAFgAHv/LAFgAIf9RAFgAI//GAFgAJP+yAFgAJf/FAFgAJv/iAFgAMP/ZAFgANP/ZAFgAN/9FAFgAPP/YAFgAPv/YAFgAQf87AFgAQv/hAFgAQ/+XAFgARP+0AFgARv+DAFgASf+VAFgAS/7XAFgATP5AAFgATf7PAFgATv/bAFgAUP+0AFgAUf+7AFgAUv+2AFgAU//eAFgAVP+jAFgAV/9QAFgAWf/iAFgAXP+uAFgAXv/DAFgAYf+sAFgAYv/dAFgAY//iAFgAZP/hAFgAZv/iAFgAaP/VAFgAa/7XAFgAp//ZAFgAtv/YAFgAu//hAFgAvf/bAFgAvv/bAFgAv//OAFgAwP/bAFgAwf/bAFgAwv/bAFgAxP+zAFgAxf+2AFgAxv+2AFgAx/+2AFgAyP+2AFgAyf++AFgAyv/IAFgAy/9kAFgAzP+wAFgAz/+uAFgA0P+uAFgA0f+tAFgA0v+uAFgA0/+uAFgA1v/dAFgA1//dAFgA2P/aAFgA2f/dAFkAHf+oAFkAHv/LAFkAIf9PAFkAI//FAFkAJP+vAFkAJf/cAFkAJv/CAFkAMP+UAFkANP+TAFkAN/9CAFkAPP+VAFkAPv+VAFkAQf9PAFkAQv+/AFkAQ/9PAFkARP9+AFkARv9VAFkASf9PAFkAS/9PAFkATP64AFkATf9HAFkAUP/VAFkAUf/cAFkAUv/XAFkAU//EAFkAVP/FAFkAV/9PAFkAWf/CAFkAXP/RAFkAXv/jAFkAYf+DAFkAYv+6AFkAY/91AFkAZP+nAFkAZv9gAFkAaP/aAFkAa/9PAFkAp/+UAFkAtv+VAFkAu/+/AFkAv//oAFkAxP/VAFkAxf/XAFkAxv/XAFkAx//XAFkAyP/XAFkAyf++AFkAyv/IAFkAy/9kAFkAzP+wAFkAz//RAFkA0P/RAFkA0f/QAFkA0v/RAFkA0//RAFkA1v/pAFkA1//pAFkA2P/nAFkA2f/pAFoAHv/LAFoAJP+yAFoAN/9FAFoAQf87AFoAQ/+VAFoARP+/AFoARv95AFoASf+SAFoAS/39AFoATP1CAFoATf7wAFoAV/9QAFoAY//oAFoAZv/kAFoAa/3yAFoAyf++AFoAyv/IAFoAy/9kAFoAzP+wAFsAHv/LAFsAJP+yAFsAN/9FAFsAQf87AFsAQ/+UAFsARP+/AFsARv94AFsASf+SAFsAS/4VAFsATP4VAFsATf7wAFsAU//rAFsAV/9QAFsAYf/rAFsAY//nAFsAZv/jAFsAa/4VAFsAyf++AFsAyv/IAFsAy/9kAFsAzP+wAFwAHv+EAFwAH//NAFwAIP/dAFwAIv/gAFwAJP95AFwAJv/fAFwALv/SAFwANv/DAFwAN/81AFwAQP/fAFwAQf87AFwAQ/+EAFwARP+0AFwARf+8AFwARv9mAFwAR//LAFwASf+CAFwASv+5AFwAS/39AFwATP3hAFwATf7wAFwAU//WAFwAV/9QAFwAYf/WAFwAY//XAFwAZP/jAFwAZf+3AFwAZv/SAFwAZ//EAFwAav/WAFwAa/3yAFwApP/SAFwApf/SAFwAyf++AFwAyv/IAFwAy/9kAFwAzP+wAF0AHv9tAF0AH/+2AF0AIP/JAF0AIv/nAF0AJP9sAF0AJv/mAF0ALv/GAF0ANv+1AF0AN/81AF0AQP/KAF0AQf87AF0AQ/+KAF0ARP+4AF0ARf+oAF0ARv9tAF0AR/+3AF0ASf+IAF0ASv+5AF0AS/4SAF0ATP6pAF0ATf7wAF0AU//fAF0AV/9QAF0AYf/fAF0AY//dAF0AZP/nAF0AZf+6AF0AZv/ZAF0AZ//HAF0Aav/XAF0Aa/4SAF0ApP/GAF0Apf/GAF0Ayf++AF0Ayv/IAF0Ay/9kAF0AzP+wAF4AHv/LAF4AJP+yAF4AQf87AF4AQ/++AF4ARP/cAF4ARv+qAF4ASf+8AF4AS/4OAF4ATf7wAF4Aa/4OAF4Ayf++AF4Ayv/IAF4Ay/9kAF4AzP+wAF8AHv9tAF8AH/9OAF8AIP9OAF8AIf+RAF8AJP62AF8AJf/sAF8ALv9zAF8ANv+1AF8AN/81AF8AQf87AF8AQ/++AF8ARP/cAF8ARf9aAF8ARv+qAF8AR/9OAF8ASf+8AF8ASv+5AF8AS/62AF8ATP62AF8ATf7wAF8ATv/sAF8AUP/PAF8AUf/JAF8AUv/OAF8AVP+8AF8AV/9QAF8AXP/PAF8AXv/CAF8AaP/aAF8Aav/WAF8Aa/62AF8ApP9zAF8Apf9zAF8Avf/sAF8Avv/sAF8Av//dAF8AwP/rAF8Awf/sAF8Awv/sAF8AxP/PAF8Axf/OAF8Axv/OAF8Ax//OAF8AyP/OAF8Ayf++AF8Ayv/IAF8Ay/9kAF8AzP+wAF8Az//PAF8A0P/PAF8A0f/OAF8A0v/PAF8A0//PAGAAHv+1AGAAIf/VAGAAJP+YAGAAN/81AGAAQf87AGAAQ/+pAGAARP/JAGAARf/lAGAARv+UAGAASf+nAGAASv/jAGAAS/55AGAATP55AGAATf7wAGAAV/9QAGAAaP/cAGAAav/fAGAAa/55AGAAyf++AGAAyv/IAGAAy/9kAGAAzP+wAGEAGv+kAGEAHv/LAGEAIf+GAGEAI//qAGEAJP+uAGEAJf/mAGEAN/8/AGEAQf87AGEAQ/+nAGEARP/GAGEARv+RAGEASf+lAGEAS/9IAGEATP5kAGEATf7fAGEAUP/eAGEAUf/kAGEAUv/HAGEAVP/UAGEAV/9PAGEAXP/aAGEAXv/pAGEAYf+rAGEAZv/IAGEAaP/aAGEAa/9BAGEAxP/eAGEAxf/fAGEAxv/fAGEAx//gAGEAyP/fAGEAyf++AGEAyv/IAGEAy/9kAGEAzP+wAGEAz//aAGEA0P/aAGEA0f/ZAGEA0v/aAGEA0//aAGIAHv/LAGIAJP+yAGIAN/9FAGIAQf87AGIAQ/+8AGIARP/ZAGIARv+oAGIASf+6AGIAS/4dAGIATP4dAGIATf7wAGIAV/9QAGIAa/4dAGIAyf++AGIAyv/IAGIAy/9kAGIAzP+wAGMAHv9tAGMAH/9sAGMAIP9/AGMAIf/AAGMAJP8LAGMAJf/sAGMALv9pAGMANv+1AGMAN/81AGMAQf87AGMAQ/+/AGMARP/cAGMARf9hAGMARv+rAGMAR/9sAGMASf+8AGMASv+5AGMAS/4mAGMATP4mAGMATf7wAGMATv/kAGMAUP/WAGMAUf/TAGMAUv/WAGMAVP/OAGMAV/9QAGMAXP/VAGMAXv/QAGMAaP/sAGMAav/WAGMAa/4mAGMApP9pAGMApf9pAGMAvf/kAGMAvv/kAGMAv//VAGMAwP/jAGMAwf/kAGMAwv/kAGMAxP/WAGMAxf/WAGMAxv/WAGMAx//WAGMAyP/WAGMAyf++AGMAyv/IAGMAy/9kAGMAzP+wAGMAz//VAGMA0P/VAGMA0f/UAGMA0v/VAGMA0//VAGQAHv9tAGQAH/+TAGQAIP+aAGQAIf/SAGQAJP8zAGQALv+LAGQANv+1AGQAN/81AGQAQf87AGQAQ/+/AGQARP/cAGQARf+KAGQARv+rAGQAR/+TAGQASf+9AGQASv+5AGQAS/39AGQATP1CAGQATf7wAGQATv/mAGQAUP/fAGQAUf/dAGQAUv/fAGQAVP/aAGQAV/9QAGQAXP/fAGQAXv/bAGQAav/WAGQAa/3yAGQApP+LAGQApf+LAGQAvf/mAGQAvv/mAGQAv//XAGQAwP/lAGQAwf/mAGQAwv/mAGQAxP/fAGQAxf/fAGQAxv/fAGQAx//fAGQAyP/fAGQAyf++AGQAyv/IAGQAy/9kAGQAzP+wAGQAz//fAGQA0P/fAGQA0f/eAGQA0v/fAGQA0//fAGUAHv/LAGUAIf9sAGUAI//gAGUAJP+yAGUAJf/bAGUAN/9FAGUAQf87AGUAQ/+tAGUARP/LAGUARv+ZAGUASf+rAGUAS/4CAGUATP4CAGUATf7wAGUATv/cAGUAUP+5AGUAUf+/AGUAUv+7AGUAVP+wAGUAV/9QAGUAXP+0AGUAXv/GAGUAaP/VAGUAa/4CAGUAvf/cAGUAvv/cAGUAv//OAGUAwP/cAGUAwf/cAGUAwv/cAGUAxP+5AGUAxf+7AGUAxv+7AGUAx/+7AGUAyP+7AGUAyf++AGUAyv/IAGUAy/9kAGUAzP+wAGUAz/+0AGUA0P+0AGUA0f+zAGUA0v+0AGUA0/+0AGYAHv9tAGYAH/9NAGYAIP95AGYAIf+wAGYAJP8FAGYALv9pAGYANv+1AGYAN/81AGYAQf87AGYAQ/+/AGYARP/cAGYARf9bAGYARv+rAGYAR/9MAGYASf+9AGYASv+5AGYAS/39AGYATP8OAGYATf7wAGYATv/jAGYAUP/OAGYAUf/MAGYAUv/OAGYAVP/FAGYAV/9QAGYAXP/OAGYAXv/IAGYAYP/bAGYAaP/mAGYAav/WAGYAa/3yAGYApP9pAGYApf9oAGYAvf/jAGYAvv/jAGYAv//UAGYAwP/iAGYAwf/jAGYAwv/jAGYAxP/OAGYAxf/OAGYAxv/OAGYAx//OAGYAyP/OAGYAyf++AGYAyv/IAGYAy/9kAGYAzP+wAGYAz//OAGYA0P/OAGYA0f/NAGYA0v/OAGYA0//OAGcAHv/LAGcAIf+GAGcAJP+yAGcAJf/lAGcAN/9FAGcAQf87AGcAQ/+3AGcARP/UAGcARv+jAGcASf+1AGcAS/4cAGcATP4cAGcATf7wAGcATv/sAGcAUP/GAGcAUf/OAGcAUv/JAGcAVP+2AGcAV/9QAGcAXP/FAGcAXv/WAGcAaP/ZAGcAa/4cAGcAvf/sAGcAvv/sAGcAv//eAGcAwP/sAGcAwf/sAGcAwv/sAGcAxP/GAGcAxf/JAGcAxv/JAGcAx//JAGcAyP/JAGcAyf++AGcAyv/IAGcAy/9kAGcAzP+wAGcAz//FAGcA0P/FAGcA0f/EAGcA0v/FAGcA0//FAGgAHf/WAGgAHv/WAGgAIf/ZAGgAI//ZAGgAJP/hAGgAJf/YAGgAJv/WAGgAMP/WAGgANP/WAGgAN/+HAGgAPP/WAGgAPv/WAGgAQf/eAGgAQv/fAGgAQ//iAGgARP/hAGgARv/jAGgASf/hAGgAS//XAGgATP8NAGgATv/ZAGgAUP/ZAGgAUf/ZAGgAUv/ZAGgAU//WAGgAVP/ZAGgAV/8NAGgAXP/ZAGgAXv/ZAGgAYf/WAGgAYv/ZAGgAY//WAGgAZP/VAGgAZv/WAGgAaP/WAGgAa//XAGgAp//WAGgAtv/WAGgAu//fAGgAvf/ZAGgAvv/ZAGgAv//WAGgAwP/ZAGgAwf/ZAGgAwv/ZAGgAxP/ZAGgAxf/ZAGgAxv/ZAGgAx//ZAGgAyP/ZAGgAyv/XAGgAy//XAGgAzP/XAGgAz//ZAGgA0P/ZAGgA0f/YAGgA0v/ZAGgA0//ZAGgA1v/ZAGgA1//ZAGgA2P/WAGgA2f/ZAGoAHv/WAGoAH//WAGoAIP/YAGoAIf/XAGoAJP/XAGoAJf/XAGoALv/PAGoANv/VAGoAN/99AGoAQP/YAGoAQf/UAGoAQ//UAGoARP/UAGoARf/PAGoARv/UAGoAR//WAGoASf/UAGoASv/SAGoAS//YAGoATP8JAGoATf+6AGoATv/YAGoAU//bAGoAV/8JAGoAYf/bAGoAZf/PAGoAZv/oAGoAZ//TAGoAav/SAGoAa//WAGoApP/PAGoApf/PAGoAvf/YAGoAvv/YAGoAv//XAGoAwP/YAGoAwf/YAGoAwv/YAGoAyf++AGoAyv/YAGoAy//YAGoAzP/XAGsAHf+uAGsAIf74AGsAIv/pAGsAI/94AGsAJf/aAGsAJv/aAGsALv8lAGsAMP+sAGsANP+rAGsANv+1AGsAN/+xAGsAPP+rAGsAPv+rAGsAQP/sAGsARf/NAGsASv+5AGsAS//DAGsATP3yAGsATf/JAGsATv5AAGsAUP4iAGsAUf6cAGsAUv4UAGsAU/+9AGsAVP44AGsAV/9RAGsAWv3yAGsAW/4VAGsAXP3yAGsAXf4SAGsAXv4OAGsAX/62AGsAYP55AGsAYf9+AGsAYv4dAGsAY/4mAGsAZP3xAGsAZf4CAGsAZv3yAGsAZ/4cAGsAaP/cAGsAav/WAGsApP8lAGsApf8kAGsAp/+sAGsAtv+rAGsAvf92AGsAvv9zAGsAv//CAGsAwf/BAGsAwv+DAGsAxP4iAGsAxf9cAGsAxv9TAGsAx/+5AGsAyP+qAGsAyf/JAGsAyv/WAGsAy//DAGsAz/9KAGsA0P87AGsA0f/CAGsA0v/iAGsA0/+YAGsA1v9jAGsA1/9dAGsA2P/CAGsA2f+1AKQAHf+3AKQAHv/LAKQAIf/AAKQAI//KAKQAJP+yAKQAJf/dAKQAJv/CAKQAMP+0AKQANP+0AKQAN/9FAKQAPP+zAKQAPv+0AKQAQf87AKQAQv/CAKQAQ/8dAKQARP92AKQARv9VAKQASf8cAKQAS/9LAKQATP13AKQATf9wAKQAUP/VAKQAUf/ZAKQAUv/WAKQAU//EAKQAVP/UAKQAV/9QAKQAWf/iAKQAXP/UAKQAXv/dAKQAYf+kAKQAYv/iAKQAY/9tAKQAZP+dAKQAZv9sAKQAaP/WAKQAa/81AKQAp/+0AKQAtv+zAKQAu//CAKQAv//fAKQAxP/VAKQAxf/WAKQAxv/WAKQAx//WAKQAyP/WAKQAyf++AKQAyv/IAKQAy/9kAKQAzP+wAKQAz//UAKQA0P/UAKQA0f/TAKQA0v/UAKQA0//UAKQA1v/iAKQA1//iAKQA2P/gAKQA2f/iAKUAHf+3AKUAHv/LAKUAIf/AAKUAI//KAKUAJP+yAKUAJf/dAKUAJv/CAKUAMP+0AKUANP+0AKUAN/9FAKUAPP+zAKUAPv+0AKUAQf87AKUAQv/CAKUAQ/87AKUARP92AKUARv9VAKUASf86AKUAS/9LAKUATP13AKUATf9CAKUAUP/VAKUAUf/ZAKUAUv/WAKUAU//EAKUAVP/UAKUAV/9QAKUAWf/iAKUAXP/UAKUAXv/dAKUAYf+kAKUAYv/iAKUAY/9tAKUAZP+dAKUAZv9sAKUAaP/WAKUAa/82AKUAp/+0AKUAtv+zAKUAu//CAKUAv//fAKUAxP/VAKUAxf/WAKUAxv/WAKUAx//WAKUAyP/WAKUAyf++AKUAyv/IAKUAy/9kAKUAzP+wAKUAz//UAKUA0P/UAKUA0f/TAKUA0v/UAKUA0//UAKUA1v/iAKUA1//iAKUA2P/gAKUA2f/iAKcAHf+2AKcAIf7vAKcAI//SAKcAJf/pAKcAJv/RAKcAMP+nAKcANP+mAKcAN/+iAKcAPP+nAKcAPv+mAKcAS/+6AKcATP9xAKcATf/BAKcAUP/hAKcAUf/nAKcAUv/jAKcAU//EAKcAVP/YAKcAV/9kAKcAXP/eAKcAYf+1AKcAY/97AKcAZP+rAKcAZv9nAKcAaP/bAKcAp/+nAKcAtv+nAKcAxP/hAKcAxf/jAKcAxv/jAKcAx//jAKcAyP/jAKcAyf/BAKcAyv/NAKcAy/+6AKcAz//eAKcA0P/eAKcA0f/dAKcA0v/eAKcA0//eAKkAHf/WAKkAHv/UAKkAIf+bAKkAI//TAKkAJf/OAKkAJv/FAKkAMP/WAKkANP/WAKkAN/+mAKkAPP/WAKkAPv/WAKkAS/+eAKkATP5OAKkATf/UAKkAUP/JAKkAUf/PAKkAUv/KAKkAU//EAKkAVP/BAKkAV/9PAKkAXP/IAKkAXv/YAKkAYf+qAKkAYv/fAKkAY/+8AKkAZP/EAKkAZv+4AKkAaP/aAKkAa//XAKkAp//WAKkAtv/WAKkAv//gAKkAxP/JAKkAxf/KAKkAxv/KAKkAx//LAKkAyP/KAKkAyf/UAKkAyv/IAKkAy/+eAKkAzP+wAKkAz//IAKkA0P/IAKkA0f/HAKkA0v/IAKkA0//IAKkA1v/fAKkA1//fAKkA2P/cAKkA2f/fALEAN/+zALEATP2CALEATf/fALEAV/9WALEAyf/fALYAHv/MALYAH/+RALYAIP+jALYAJP/eALYALv+wALYANv+1ALYAN/83ALYAQf+QALYAQ/+6ALYARP/SALYARf+IALYARv+sALYAR/+YALYASf+4ALYASv+5ALYAS//oALYATP1CALYATf9lALYATv/sALYAV/9QALYAav/TALYAa//HALYApP+wALYApf+wALYAvf/sALYAvv/sALYAv//nALYAwP/qALYAwf/sALYAwv/sALYAyf++ALYAyv/oALYAy//oALYAzP/hALsALv+9ALsANv+1ALsAN/+zALsARf/dALsATP2QALsATf/gALsAV/9WALsAav/eALsApP+9ALsApf+8ALsAyf/gAL4AHv/LAL4AJP+yAL4AN/9VAL4AQf+sAL4AQ/+wAL4ARP/GAL4ARv+xAL4ASf+vAL4AS/9EAL4ATP5AAL4ATf/RAL4AV/9QAL4Aa/92AL4Ayf/RAL4Ayv/IAL4Ay/9kAL4AzP+wAL0AHv/LAL0AJP+yAL0AN/9FAL0AQf95AL0AQ/+eAL0ARP/GAL0ARv+EAL0ASf+cAL0AS/+tAL0ATP5AAL0ATf8+AL0AV/9QAL0Aa/+UAL0Ayf++AL0Ayv/IAL0Ay/+tAL0AzP+wAL8AHf/lAL8AHv/rAL8AH//UAL8AIP/UAL8AIf/UAL8AIv/sAL8AI//UAL8ALv/UAL8AMP/pAL8ANP/oAL8ANv/UAL8AN/9WAL8APP/oAL8APv/oAL8AQf+uAL8AQ//fAL8ARf/UAL8ARv/TAL8AR//UAL8ASf/dAL8ASv/UAL8ATP3+AL8ATf+LAL8ATv/UAL8AUP/UAL8AUf/UAL8AUv/UAL8AU//GAL8AVP/UAL8AV/9GAL8AWv/UAL8AW//UAL8AXP/UAL8AXf/UAL8AXv/UAL8AX//UAL8AYP/UAL8AYf/DAL8AYv/UAL8AY/+7AL8AZP/AAL8AZf/UAL8AZv+4AL8AZ//UAL8AaP/bAL8Aav/WAL8Aa//mAL8ApP/UAL8Apf/UAL8Ap//pAL8Atv/oAL8Avf/UAL8Avv/UAL8AwP/fAL8Awf/UAL8Awv/UAL8AxP/UAL8Axf/UAL8Axv/UAL8AyP/UAL8Ayf+LAL8Azv/UAL8Az//UAL8A0P/UAL8A0v/UAL8A0//UAL8A1v/UAL8A1//UAL8A2f/UAMEAHv/SAMEAJP/SAMEAN/9FAMEAQf87AMEAQ/+6AMEARP/GAMEARv+zAMEASf+4AMEAS//SAMEATP5AAMEATf92AMEAV/9QAMEAa//SAMEAyf++AMEAyv/QAMEAy//SAMEAzP/SAMAAHf/nAMAAIf/nAMAAIv/pAMAAI//nAMAAJf/nAMAAJv/cAMAALv/nAMAAMP/nAMAANP/nAMAANv/nAMAAN/+xAMAAPP/nAMAAPv/nAMAARf/nAMAASv/nAMAAS//EAMAATP4eAMAATf/KAMAATv/nAMAAUP/nAMAAUf/nAMAAUv/nAMAAU//WAMAAVP/nAMAAV/9RAMAAWv/nAMAAW//nAMAAXP/nAMAAXf/nAMAAXv/nAMAAX//nAMAAYP/nAMAAYf/WAMAAYv/nAMAAY//OAMAAZP/TAMAAZf/nAMAAZv/LAMAAZ//nAMAAaP/nAMAAav/nAMAApP/nAMAApf/nAMAAp//nAMAAtv/nAMAAvf/nAMAAvv/nAMAAv//ZAMAAwf/nAMAAwv/nAMAAxP/nAMAAxf/nAMAAxv/nAMAAx//nAMAAyP/nAMAAyf/KAMAAyv/YAMAAy//EAMAAz//nAMAA0P/nAMAA0f/mAMAA0v/nAMAA0//nAMAA1v/nAMAA1//nAMAA2P/kAMAA2f/nAMIAHv/LAMIAJP++AMIAN/9FAMIAQf+JAMIAQ/+hAMIARP/GAMIARv+aAMIASf+fAMIAS/+9AMIATP5AAMIATf9cAMIAV/9QAMIAa/+6AMIAyf++AMIAyv/IAMIAy/+9AMIAzP++AMQAHv/JAMQAIf+NAMQAJP+pAMQAJf/oAMQAN//QAMQAQf86AMQAQ/+nAMQARP/HAMQARv+RAMQASf+lAMQAS/4hAMQATP/aAMQATf7vAMQAUP/gAMQAUf/mAMQAUv/iAMQAVP/XAMQAV//NAMQAXP/dAMQAXv/sAMQAaP/aAMQAa/4hAMQAxP/gAMQAxf/iAMQAxv/iAMQAx//iAMQAyP/iAMQAyf+9AMQAyv/HAMQAy/9jAMQAzP+vAMQAz//dAMQA0P/dAMQA0f/cAMQA0v/dAMQA0//dAMYAHv+4AMYAJP+jAMYAJv/mAMYAN/9JAMYAQf+gAMYAQ/+kAMYARP+3AMYARv+lAMYASf+kAMYAS/84AMYATP4UAMYATf/GAMYAU//gAMYAV/9QAMYAYf/gAMYAY//dAMYAZP/mAMYAZv/ZAMYAa/9rAMYAv//fAMYAyf/GAMYAyv/IAMYAy/9kAMYAzP+wAMUAHv+4AMUAJP+YAMUAJv/mAMUAN/81AMUAQf9nAMUAQ/+KAMUARP+3AMUARv9tAMUASf+HAMUAS/+bAMUATP4UAMUATf8tAMUAU//gAMUAV/9QAMUAYf/gAMUAY//dAMUAZP/mAMUAZv/ZAMUAa/+DAMUAv//fAMUAyf++AMUAyv/IAMUAy/+bAMUAzP+wAMcAHf/lAMcAHv/rAMcAH//XAMcAIP/XAMcAIf/pAMcAIv/sAMcAI//pAMcALv/PAMcAMP/pAMcANP/oAMcANv/WAMcAN/9WAMcAPP/oAMcAPv/oAMcAQf+uAMcAQ//fAMcARf/NAMcARv/TAMcAR//XAMcASf/dAMcASv/QAMcATP30AMcATf+LAMcATv/MAMcAUP/pAMcAUf/pAMcAUv/pAMcAU//GAMcAVP/pAMcAV/9GAMcAWv/pAMcAW//pAMcAXP/pAMcAXf/pAMcAXv/pAMcAX//pAMcAYP/fAMcAYf+/AMcAYv/pAMcAY/+8AMcAZP/FAMcAZf/NAMcAZv+4AMcAZ//TAMcAaP/gAMcAav/WAMcAa//mAMcApP/PAMcApf/PAMcAp//pAMcAtv/oAMcAvf/MAMcAvv/MAMcAwP/fAMcAwf/MAMcAwv/MAMcAxP/pAMcAxf/pAMcAxv/pAMcAyP/pAMcAyf+dAMcAzv/pAMcAz//pAMcA0P/pAMcA0v/pAMcA0//pAMcA1v/pAMcA1//pAMcA2f/pAMgAHv+8AMgAJP+8AMgAJv/mAMgAN/81AMgAQf87AMgAQ/+kAMgARP+3AMgARv+dAMgASf+iAMgAS/+8AMgATP4UAMgATf9hAMgAU//gAMgAV/9QAMgAYf/gAMgAY//dAMgAZP/mAMgAZv/ZAMgAa/+8AMgAv//fAMgAyf++AMgAyv/IAMgAy/+8AMgAzP+8AMoAHf+1AMoAHv+0AMoAH/+5AMoAIP/DAMoAIf+1AMoAIv+/AMoAI/+1AMoAJP/nAMoAJf+1AMoAJv+1AMoALv+1AMoAL//lAMoAMP+1AMoAMf/mAMoAMv/lAMoAM//mAMoANP+1AMoANf/lAMoANv+1AMoAN/+NAMoAOP/lAMoAOf/mAMoAOv/lAMoAO//lAMoAPP+1AMoAPf/lAMoAPv+1AMoAP//mAMoAQP+1AMoAQf/kAMoAQv/lAMoAQ//oAMoARP/nAMoARf+7AMoARv/pAMoAR//aAMoASf/oAMoAS/98AMoATP7bAMoATv+1AMoAUP+1AMoAUf+1AMoAUv+1AMoAU/+1AMoAVP+1AMoAVv+0AMoAV/7bAMoAWv+1AMoAW/+1AMoAXP+1AMoAXf+1AMoAXv+1AMoAX/+1AMoAYP+1AMoAYf+1AMoAYv+1AMoAY/+1AMoAZP+0AMoAZf+1AMoAZv+1AMoAZ/+1AMoAaP/HAMoAa/+vAMoApP+1AMoApf+1AMoAp/+1AMoAqf/lAMoAsf/lAMoAtv+1AMoAu//lAMoAvf+3AMoAvv+1AMoAv/+nAMoAwP+1AMoAwf+1AMoAwv+1AMoAxP+1AMoAxf+1AMoAxv+1AMoAx/+1AMoAyP+1AMoAyv+KAMoAy/98AMoAzP+pAMoAzv+1AMoAz/+1AMoA0P+1AMoA0f+0AMoA0v+1AMoA0/+1AMoA1v+1AMoA1/+1AMoA2P+yAMoA2f+1AMkAHf/lAMkAH//UAMkAIP/UAMkAIf/UAMkAIv/sAMkAI//UAMkALv/UAMkAMP/pAMkANP/oAMkANv/UAMkAN/9+AMkAPP/oAMkAPv/oAMkAQf/WAMkAQ//fAMkARf/UAMkARv/TAMkAR//UAMkASf/dAMkASv/UAMkATP7wAMkATf+cAMkATv/UAMkAUP/UAMkAUf/UAMkAUv/UAMkAU//UAMkAVP/UAMkAV/7wAMkAWv/UAMkAW//UAMkAXP/UAMkAXf/UAMkAXv/UAMkAX//UAMkAYP/UAMkAYf/UAMkAYv/UAMkAY//UAMkAZP/TAMkAZf/UAMkAZv/UAMkAZ//UAMkAaP/bAMkAav/WAMkApP/UAMkApf/UAMkAp//pAMkAtv/oAMkAvf/UAMkAvv/UAMkAwP/rAMkAwf/UAMkAwv/UAMkAxP/UAMkAxf/UAMkAxv/UAMkAyP/UAMkAyf+cAMkAzv/gAMkAz//UAMkA0P/UAMkA0v/UAMkA0//UAMkA1v/UAMkA1//UAMkA2f/UAMsAHf/lAMsAHv/rAMsAH/+hAMsAIP+0AMsAIf87AMsAIv/sAMsAI//EAMsALv9HAMsAMP/pAMsANP/oAMsANv+1AMsAN/9VAMsAPP/oAMsAPv/oAMsAQf+tAMsAQ//fAMsARf+TAMsARv/TAMsAR/+jAMsASf/dAMsASv+5AMsATP39AMsATf+LAMsATv87AMsAUP87AMsAUf87AMsAUv87AMsAU//GAMsAVP87AMsAV/9GAMsAWv87AMsAW/87AMsAXP87AMsAXf87AMsAXv87AMsAX/87AMsAYP87AMsAYf+7AMsAYv87AMsAY/87AMsAZP86AMsAZf87AMsAZv87AMsAZ/87AMsAaP/bAMsAav/WAMsAa//lAMsApP9HAMsApf9GAMsAp//pAMsAtv/oAMsAvf87AMsAvv+nAMsAwP/fAMsAwf/MAMsAwv+WAMsAxP87AMsAxf87AMsAxv+HAMsAyP+1AMsAyf+LAMsAzv/UAMsAz/87AMsA0P9vAMsA0v/IAMsA0/+kAMsA1v87AMsA1/+RAMsA2f/BAMwAHf/eAMwAH/+oAMwAIP/qAMwAIf+oAMwAIv/sAMwAI/+6AMwALv+oAMwAMP/hAMwANP/hAMwANv+1AMwAN/81AMwAPP/hAMwAPv/hAMwAQf87AMwARf+1AMwARv/rAMwAR/+oAMwASv+5AMwATP61AMwATf+vAMwATv+oAMwAUP+oAMwAUf+oAMwAUv+oAMwAU//GAMwAVP+oAMwAV/9WAMwAWv+oAMwAW/+oAMwAXP+oAMwAXf+oAMwAXv+oAMwAX/+oAMwAYP+oAMwAYf+7AMwAYv+oAMwAY/+oAMwAZP+nAMwAZf+oAMwAZv+oAMwAZ/+oAMwAaP/cAMwAav/WAMwApP+oAMwApf+oAMwAp//hAMwAtv/hAMwAvf+oAMwAvv+oAMwAwf/NAMwAwv+oAMwAxP+oAMwAxf+oAMwAxv+oAMwAyP+2AMwAyf+vAMwAz/+oAMwA0P+oAMwA0v/qAMwA0/+oAMwA1v+oAMwA1/+oAMwA2f/CAM4AJv/sAM4AN/+xAM4AS//EAM4ATP4SAM4ATf/KAM4AU//oAM4AV/9RAM4AYf/oAM4AY//jAM4AZP/rAM4AZv/fAM4Ayf/KAM4Ayv/YAM4Ay//EANAAHv+EANAAH//NANAAIP/dANAAIv/gANAAJP+IANAAJv/fANAALv/SANAANv/DANAAN/81ANAAQP/fANAAQf+GANAAQ/+KANAARP+0ANAARf+8ANAARv+LANAAR//LANAASf+JANAASv+5ANAAS/8eANAATP3hANAATf+rANAAU//WANAAV/9QANAAYf/WANAAY//XANAAZP/jANAAZf+3ANAAZv/SANAAZ//EANAAav/WANAAa/9QANAApP/SANAApf/SANAAyf++ANAAyv/IANAAy/9kANAAzP+wAM8AHv+EAM8AH//NAM8AIP/dAM8AIv/gAM8AJP95AM8AJv/fAM8ALv/SAM8ANv/DAM8AN/81AM8AQP/fAM8AQf9GAM8AQ/+EAM8ARP+0AM8ARf+8AM8ARv9mAM8AR//LAM8ASf+CAM8ASv+5AM8AS/96AM8ATP3hAM8ATf8LAM8AU//WAM8AV/9QAM8AYf/WAM8AY//XAM8AZP/jAM8AZf+3AM8AZv/SAM8AZ//EAM8Aav/WAM8Aa/9hAM8ApP/SAM8Apf/SAM8Ayf++AM8Ayv/IAM8Ay/96AM8AzP+wANEAHv/QANEAH//NANEAIP/dANEAIv/hANEAJP/rANEAJv/qANEALv/SANEANv/DANEAN/87ANEAQP/rANEAQf+TANEAQ//EANEARP/UANEARf+8ANEARv+4ANEAR//LANEASf/CANEASv+5ANEATP3iANEATf9wANEAU//WANEAV/9QANEAYf/WANEAY//XANEAZP/jANEAZf+3ANEAZv/SANEAZ//EANEAav/WANEAa//LANEApP/SANEApf/SANEAyf++ANMAHv+cANMAH//NANMAIP/dANMAIv/gANMAJP+cANMAJv/fANMALv/SANMANv/DANMAN/81ANMAQP/fANMAQf87ANMAQ/+EANMARP+0ANMARf+8ANMARv99ANMAR//LANMASf+CANMASv+5ANMAS/+cANMATP3hANMATf9BANMAU//WANMAV/9QANMAYf/WANMAY//XANMAZP/jANMAZf+3ANMAZv/SANMAZ//EANMAav/WANMAa/+cANMApP/SANMApf/SANMAyf++ANMAyv/IANMAy/+cANMAzP+wANIAHv/hANIAH//NANIAIP/dANIAIv/gANIAJP/mANIAJv/fANIALv/SANIANv/DANIAN/+NANIAQP/fANIAQf/mANIAQ//dANIARP/kANIARf+8ANIARv/bANIAR//bANIASf/dANIASv+5ANIAS/+gANIATP3hANIATf+mANIAU//WANIAV/9QANIAYf/WANIAY//XANIAZP/jANIAZf+3ANIAZv/SANIAZ//EANIAav/WANIAa//fANIApP/SANIApf/SANIAyf++ANIAyv/IANIAy/+gANIAzP/bANcAHv/LANcAJP+yANcAN/9IANcAQf+fANcAQ/+8ANcARP/ZANcARv+oANcASf+6ANcAS/83ANcATP4dANcATf/FANcAV/9QANcAa/9qANcAyf/FANcAyv/IANcAy/9kANcAzP+wANYAHv/LANYAJP+yANYAN/9FANYAQf9pANYAQ/+8ANYARP/ZANYARv+oANYASf+6ANYAS/+dANYATP4dANYATf8vANYAV/9QANYAa/+FANYAyf++ANYAyv/IANYAy/+dANYAzP+wANgAHv/rANgAN/9WANgAQf+uANgAQ//fANgARv/TANgASf/dANgATP3/ANgATf+LANgAV/9GANgAa//mANgAyf+hANkAHv/LANkAJP+5ANkAN/9FANkAQf87ANkAQ/+8ANkARP/ZANkARv+oANkASf+6ANkAS/+5ANkATP4dANkATf9eANkAV/9QANkAa/+5ANkAyf++ANkAyv/IANkAy/+5ANkAzP+5AAAAAAAOAK4AAQAAAAAAAAA2AAAAAQAAAAAAAQAIAD0AAQAAAAAAAgAHADYAAQAAAAAAAwAIAD0AAQAAAAAABAAIAD0AAQAAAAAABQAOAEUAAQAAAAAABgAIAD0AAwABBAkAAABsAFMAAwABBAkAAQAQAL8AAwABBAkAAgAOAM8AAwABBAkAAwAQAL8AAwABBAkABAAQAL8AAwABBAkABQAcAN0AAwABBAkABgAQAL9Db3B5cmlnaHQgXChjXCkgIE0uIEtsZWluLCwgMjAwNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5SZWd1bGFyTWFua1NhbnMxLjAgMjAwNC0wMy0zMQBDAG8AcAB5AHIAaQBnAGgAdAAgAFwAKABjAFwAKQAgACAATQAuACAASwBsAGUAaQBuACwALAAgADIAMAAwADQALgAgAEEAbABsACAAcgBpAGcAaAB0AHMAIAByAGUAcwBlAHIAdgBlAGQALgBNAGEAbgBrAFMAYQBuAHMAUgBlAGcAdQBsAGEAcgAxAC4AMAAgADIAMAAwADQALQAwADMALQAzADEAAAIAAAAAAAD/ewAUAAAAAAAAAAAAAAAAAAAAAAAAAAAA4wAAANsA3ADdAN8A4ADhANcAvADAAMEA4gDjAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQDEAKYAxQCrAIIAwgDYAMYA5AC+ALAAtgC3ALQAtQCHALIAswDZAIwAvwCxALsAowCEAIUAvQCWAOgAhgCOAIsAnQCpAKQAigDaAIMAkwDzAI0AlwCIAMMA3gDxAJ4AqgD1APQA9gCiAK0AyQDHAK4AYgBjAJAAZADLAGUAyADKAM8AzADNAM4A6QBmANMA0ADRAK8AZwCRANYA1ADVAGgAiQBqAGkAawBtAGwAbgCgAG8AcQBwAHIAcwB1AHQAdgB3AOoAeAB6AHkAewB9AHwAuAChAH8AfgCAAIEAugCPAJIAlACVAJkAmgCnAQIFRGVsdGEAAA==]]></data>
	</file>
	<file>
	  <filename>/fonts/pf_arma_five.ttf</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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AE4AWP/sAE8AWf/sAFAAWv/sAFEAXP/rAFIAXf/rAFMAXv/rAFQAX//rAFUAYP/qAFYAYf/qAFcAYv/qAFgAY//qAFkAZf/pAFoAZv/pAFsAZ//pAFwAaP/pAF0Aaf/oAF4Aav/oAF8Aa//oAGAAbP/oAGEAbv/nAGIAb//nAGMAcP/nAGQAcf/nAGUAcv/mAGYAc//mAGcAdP/mAGgAdf/mAGkAd//lAGoAeP/lAGsAef/lAGwAev/lAG0Ae//kAG4AfP/kAG8Aff/kAHAAfv/kAHEAgP/jAHIAgf/jAHMAgv/jAHQAg//jAHUAhP/iAHYAhf/iAHcAhv/iAHgAh//iAHkAif/hAHoAiv/hAHsAi//hAHwAjP/hAH0Ajf/gAH4Ajv/gAH8Aj//gAIAAkP/gAIEAkv/fAIIAk//fAIMAlP/fAIQAlf/fAIUAlv/eAIYAl//eAIcAmP/eAIgAmf/eAIkAm//dAIoAnP/dAIsAnf/dAIwAnv/dAI0An//cAI4AoP/cAI8Aof/cAJAAov/cAJEApP/bAJIApf/bAJMApv/bAJQAp//bAJUAqP/aAJYAqf/aAJcAqv/aAJgAq//aAJkArf/ZAJoArv/ZAJsAr//ZAJwAsP/ZAJ0Asf/YAJ4Asv/YAJ8As//YAKAAtP/YAKEAtv/XAKIAt//XAKMAuP/XAKQAuf/XAKUAuv/WAKYAu//WAKcAvP/WAKgAvf/WAKkAv//VAKoAwP/VAKsAwf/VAKwAwv/VAK0Aw//UAK4AxP/UAK8Axf/UALAAxv/UALEAyP/TALIAyf/TALMAyv/TALQAy//TALUAzP/SALYAzf/SALcAzv/SALgAz//SALkA0f/RALoA0v/RALsA0//RALwA1P/RAL0A1f/QAL4A1v/QAL8A1//QAMAA2P/QAMEA2v/PAMIA2//PAMMA3P/PAMQA3f/PAMUA3v/OAMYA3//OAMcA4P/OAMgA4f/OAMkA4//NAMoA5P/NAMsA5f/NAMwA5v/NAM0A5//MAM4A6P/MAM8A6f/MANAA6v/MANEA7P/LANIA7f/LANMA7v/LANQA7//LANUA8P/KANYA8f/KANcA8v/KANgA8//KANkA9f/JANoA9v/JANsA9//JANwA+P/JAN0A+f/IAN4A+v/IAN8A+//IAOAA/P/IAOEA/v/HAOIA///HAOMBAP/H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]]></data>
	</file>
	<file>
	  <filename>/fonts/Silkscreen.ttf</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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AnEC7gH0AH0AAAF3AAD/gwF3AH0A+gB9AH0AfQAAAx0CvAAFAAIC3AKoAAAAlgLcAqgAAAHaADQBDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBbHRzACAAIAB+AyAA9gAAAyAAfQAAAAEAAAAAAAACcQJxAABw+QJxAnVTaWxrc2NyZWVuABLFlQgC/////z////9TaWxSMDAAAAAAAAAAAAAQAAAAZAkJBQAFBQQGCQgJCAQFBQkJBAYDBggGCAgICAgICAgDBAYGBggJCAgICAYGCAgECAgGCQkICAgICAYICQkJCQYFBgUGCAUICAgIBgYICAQICAYJCQgICAgIBggJCQkJBgYEBggKCgUABgYFBwoICggFBgYKCgUHBAcIBwgICAgICAgIBAUHBwcICggICAgHBwgIBQgIBwoKCAgICAgHCAoKCgoHBgcGBwgGCAgICAcHCAgFCAgHCgoICAgICAcICgoKCgcHBQcICwoGAAcHBQgKCQoJBQcHCgoFCAQICQgJCQkJCQkJCQQFCAgICQoJCQkJCAgJCQUJCQgKCgkJCQkJCAkKCgoKCAcIBwgJBwkJCQkICAkJBQkJCAoKCQkJCQkICQoKCgoICAUICQwLBgAHBwYJCwoLCgYHBwsLBgkECQoJCgoKCgoKCgoEBgkJCQoLCgoKCgkJCgoGCgoJCwsKCgoKCgkKCwsLCwkHCQcJCgcKCgoKCQkKCgYKCgkLCwoKCgoKCQoLCwsLCQkGCQoNDAcACAgGCQwLDAsGCAgMDAYJBQkLCQsLCwsLCwsLBQYJCQkLDAsLCwsJCQsLBgsLCQwMCwsLCwsJCwwMDAwJCAkICQsICwsLCwkJCwsGCwsJDAwLCwsLCwkLDAwMDAkJBgkLDg0HAAgIBwoNDA0MBwgIDQ0HCgUKDAoMDAwMDAwMDAUHCgoKDA0MDAwMCgoMDAcMDAoNDQwMDAwMCgwNDQ0NCggKCAoMCAwMDAwKCgwMBwwMCg0NDAwMDAwKDA0NDQ0KCgcKDA8OCAAJCQcLDg0ODQcJCQ4OBwsFCw0LDQ0NDQ0NDQ0FBwsLCw0ODQ0NDQsLDQ0HDQ0LDg4NDQ0NDQsNDg4ODgsJCwkLDQkNDQ0NCwsNDQcNDQsODg0NDQ0NCw0ODg4OCwsHCw0QDwgACgoICw8NDw0ICgoPDwgLBgsNCw0NDQ0NDQ0NBggLCwsNDw0NDQ0LCw0NCA0NCw8PDQ0NDQ0LDQ8PDw8LCgsKCw0KDQ0NDQsLDQ0IDQ0LDw8NDQ0NDQsNDw8PDwsLCAsNERAJAAoKCAwQDhAOCAoKEBAIDAYMDgwODg4ODg4ODgYIDAwMDhAODg4ODAwODggODgwQEA4ODg4ODA4QEBAQDAoMCgwOCg4ODg4MDA4OCA4ODBAQDg4ODg4MDhAQEBAMDAgMDhIRCQALCwkNEQ8RDwkLCxERCQ0GDQ8NDw8PDw8PDw8GCQ0NDQ8RDw8PDw0NDw8JDw8NEREPDw8PDw0PEREREQ0LDQsNDwsPDw8PDQ0PDwkPDw0REQ8PDw8PDQ8RERERDQ0JDQ8TEgoACwsJDhIQEhAJCwsSEgkOBw4QDhAQEBAQEBAQBwkODg4QEhAQEBAODhAQCRAQDhISEBAQEBAOEBISEhIOCw4LDhALEBAQEA4OEBAJEBAOEhIQEBAQEA4QEhISEg4OCQ4QFBMKAAwMCg4TERMRCgwMExMKDgcOEQ4REREREREREQcKDg4OERMRERERDg4REQoREQ4TExERERERDhETExMTDgwODA4RDBEREREODhERChERDhMTEREREREOERMTExMODgoOERUUCwANDQoPFBIUEgoNDRQUCg8IDxIPEhISEhISEhIICg8PDxIUEhISEg8PEhIKEhIPFBQSEhISEg8SFBQUFA8NDw0PEg0SEhISDw8SEgoSEg8UFBISEhISDxIUFBQUDw8KDxIWFQsADQ0KEBUSFRIKDQ0VFQoQCBASEBISEhISEhISCAoQEBASFRISEhIQEBISChISEBUVEhISEhIQEhUVFRUQDRANEBINEhISEhAQEhIKEhIQFRUSEhISEhASFRUVFRAQChASFxYMAA4OCxAWExYTCw4OFhYLEAgQExATExMTExMTEwgLEBAQExYTExMTEBATEwsTExAWFhMTExMTEBMWFhYWEA4QDhATDhMTExMQEBMTCxMTEBYWExMTExMQExYWFhYQEAsQExgXDAAODgsRFxQXFAsODhcXCxEJERQRFBQUFBQUFBQJCxERERQXFBQUFBERFBQLFBQRFxcUFBQUFBEUFxcXFxEOEQ4RFA4UFBQUEREUFAsUFBEXFxQUFBQUERQXFxcXERELERQ=]]></data>
	</file>
	<file>
	  <filename>/fonts/tahoma.ttf</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAEAAAAVAQAABABQRFNJR8JjgWIABcAYAAAbJEdERUY4TzrTAAW5cAAAAHZHU1VCalNRVAAFuegAAAYuTFRTSFmehaUAACIAAAAH+E9TLzK/WpZjAAAB2AAAAFZWRE1Ydtl9VgAAKfgAAAXgY21hcA4ABRIAASboAAAOJmN2dCCI8JX/AAFBAAAAAwRmcGdtOgJg+AABNRAAAAY8Z2FzcAAXAAkABblgAAAAEGdseWaifpE4AAFj2AAD8FpoZG14PtIAlgAAL9gAAPcQaGVhZNFPkCsAAAFcAAAANmhoZWEN7QvoAAABlAAAACRobXR4QBaJCgAAAjAAAB/Qa2Vybq3ErwsABVQ0AAAP3mxvY2ESEGHYAAFEBAAAH9RtYXhwC8QHcAAAAbgAAAAgbmFtZbS9rbUABWQUAAAMrXBvc3QKiLlHAAVwxAAASJpwcmVw4ejaTAABO0wAAAWxAAEAAAADJmZTsjh1Xw889QAbCAAAAAAArsC6HAAAAAC9dGQM+zT+WAq1CEYAAAAJAAIAAQAAAAAAAQAACAH+WQAACyD7NPp6CrUAAQAAAAAAAAAAAAAAAAAAB/QAAQAAB/QAjAAQAGQACAACABAAQABVAAADTwY8AAMAAgABA44BkAAFAAgFmgUzAAABJQWaBTMAAAOgAIICsQgAAgsGBAMFBAQCBGEAeoeAAAAAAAAACAAAAABNUyAgAEAAIP/8Bh7+WQA7CAEBpyABAf8gKAAAAAAIAAEAAAAAAAKAAAACgAAAAqgA5AM2AHIF0gCOBF4AagfQAGYFZABDAbAAaQMQAGwDEABKBF4AcAXSAJ0CbABKAugAWgJsAL4DD//oBF4AUwReAOIEXgBtBF4AYQReACgEXgB8BF4AVQReAGMEXgBKBF4AQwLUAPMC1AB6BdIAyQXSAMAF0gDXA8oAbQdGAIQEzP/2BLcAlwTOAEIFbQCXBH0AlwQsAJcFVwBCBWcAlwL8AF0DVQAJBLQAlwP7AJcGKgCXBVcAlwWpAEIEaQCXBakAQgT3AJcEdQBNBKz//wU/AIUExv/4BzcAGgSlAAgEnP/1BHkAPAMQAKYDDwA0AxAAYgXSAIUEXv/wBF4A+AQzADoEbACIA7EAOwRsADsENgA7AowAHQRsADsEdgCIAdQAfwJB/6YD/ACIAdQAjAa4AIgEdgCIBFgAOQRsAIgEbAA7AuIAiAOSAEMCrQAVBHYAgAP8AAYF8AAeA/YACgP8AAYDjgAxA9gAPAMPATQD2ABiBdIAhgTM//YEzP/2BM4AQgR9AJcFVwCXBakAQgU/AIUEMwA6BDMAOgQzADoEMwA6BDMAOgQzADoDsQA7BDYAOwQ2ADsENgA7BDYAOwHUAHgB1P//AdT/ygHU/9oEdgCIBFgAOQRYADkEWAA5BFgAOQRYADkEdgCABHYAgAR2AIAEdgCABF4AhwPEAGUEXgByBF4AWQReAHcDowByBF4AOQRjAIgHbgBWB24AVgcCAGsEXgHBBF4A/QXSAMAHTv/ZBakAQgdGAG4F0gCiBdIAyQXSANcEXgA4BIsAiAReAEMFFwB+BXEAnASCAIgEXgBKA/IAcgPyAFUFngArBwoAOgRYACkDygA6AqgA5AXSAJ0F0gBRBF7/zwXSAL4E9P/2BJYAZwSWAIMGigCxBMz/9gTM//YFqQBCB9AAQgdFADkEXv/8B0b//AM2/8ADNgBrAbD/wAGwAGEF0gCdBdIAdwP8AAYEnP/1A3b/4wRe/+QDEAB7AxAAlwREAB0EPgAdBF4AhwJsAL4BsP/zAy7/+AsgAGYEzP/2BH0AlwTM//YEfQCXBH0AlwL8AF0C/AAqAvwATAL8AF0FqQBCBakAQgWpAEIFPwCFBT8AhQU/AIUB1ACMBF4A2gReAKEEXgC2BF4A5gReAcQEXgD9BF4BIQReAPoEXgFWBF4A1gQkABgCMgAYBHUATQOSAEMEeQA8A44AMQMPATQFlgAYBF4AOQSc//UD/AAGBIYAlwRsAIgF0gC2BdIA0APyAPgD8gC5A/IAuAgAAKsIAACrCAAAjAReACIFVwBCBGwAOwL8AF0EdQBNA5IAQwTOAEIDsQA7BM4AQgOxADsElgA7BF7/8ALUAPMEzP/2BDMAOgTM//YEMwA6BW0AlwV/ADsFlgAYBH0AlwQ2ADsEfQCXBDYAOwP7AJcB1AByA/sAlwLjAIwD+wCXA5AAjAVXAJcEdgCIBVcAlwR2AIgFqQBCBFgAOQT3AJcC4gCIBPcAlwLiADYEdQBNA5IAQwSs//8CrQAVBKz//wO/ABUFPwCFBHYAgAU/AIUEdgCABHkAPAOOADEEeQA8A44AMQQPAJcFqQBCBf0AQgRwADsEWAA5A6QAPASnADkDvAAEBaYAOQRe//AEeADk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AXkAAASTAVAEkwE7BJMAQgSTACUEkwCTBJMASASTAFwEkwAtBJMAKwSTAHsEkwBKAtUA7gReAD8DSP+6As//ugPFAFwC1QEQBJMAQgSTAEgEkwDdAm4A7QJuAGcCbgBZAm4AWQI9/7oCagACCAABAAQI/7oIAAEABz8AXANI/7oCAABYBAj/ugIA//wEAP+6B38AXAgAAQAHPwBcBnUAXAd/AFwCPf+6As//ugb2AFwHHQBcBnUAXAb2AFwE3wBQBZoAUAVG/7oFcf+6AuX/kwNW/5MHZABcB74AXAPX/7oEQv+6B2QAXAe+AFwD1/+6BEL/ugb6AFwH+gBcCAABAAgAAQAIAAEACAABAAgAAQAIAAEACAABAAgAAQAIAAEACAABAAgAAQAIAAEACAABAAgAAQAIAAEACAABAAJl/90CagACAmYAAAJmAAACZgAABakAQgRYADkFqQBCBFgAOQWpAEIEWAA5BakAQQRY/6YFqQBCBFgAOQWpAEIEWAA5BakAQgRYADkGAwBCBIAAOQYDAEIEgAA5BgMAQgSAADkGAwBCBIAAOQYDAEIEgAA5BT8AhQR2AIAFPwCFBHYAgAXBAIUE2gCABcEAhQTaAIAFwQCFBNoAgAXBAIUE2gCABcEAhQTaAIAEnP/1A/wABgSc//UD/AAGBJz/9QP8AAYEnP/1A/wABgSWADsAAPwzAxAAbAMQAEoIAAEAB8MAUgMOAGoB7v/yAl7//AHuAE8CXgB3A1b/iQON/4kB7gBSAl4ApAb6AFwH+gBcAj3/ugLP/7oB7gCkAl4ApAZ1AFwHfwBcAj3/ugLP/7oDxQBcBJgAUgZ1AFwHfwBcAj3/ugLP/7oGdQBcB38AXAI9/7oCz/+6BN8AUAWaAFAFRv+6BXH/ugTfAFAFmgBQBUb/ugVx/7oE3wBQBZoAUAVG/7oFcf+6A74AXAReAEYDvgBcBF4ARgLl/5MDVv+TAuX/kwNW/5MJrgBcClwAXAfX/7oIff+6Ca4AXApcAFwH1/+6CH3/ugk9AFwJUABcBhD/ugYj/7oJPQBcCVAAXAYQ/7oGI/+6BWT/ugWi/7oFZP+6BaL/ugVk/7oFov+6BWT/ugWi/7oE2QBSBLAAXAS+/7oD3f+6BNkAUgSwAFwEvv+6A93/ugb2AFwHPwBcA0j/ugQI/7oG9gBcBx0AXANI/7oECP+6Bc0AXAZmAFwD1/+6BEL/ugUtAFwFyQBcAj//ugLP/7oEuv9iBX//YAQU/7oE2/+6BUwAXAYGAFwCPf+6As//ugPFAFwEmABSBWD/ugRm/7oDVv+JA43/iQb6AFwH+gBcBvoAXAf6AFwCPf+6As//ugTf/6QFrv+kBN8AJQWuACEE3wA1Ba4ANQTfADUFrgA1A8UAWAPFAFgEmABSAAD+tQAA/SkAAP6hAAD9jgAA/WYAAP51AAD86QAA/goAAP0bAAD8wwAA/tgAAP0rAAD+lwAA/WMAAP1DAAD+/AAA/CYAAPs0AAD7TgAA/HgAAPweAAD7zQAA/QwAAP2VAAD+/AAA/GAAAP5mAAD7jgAA/YMAAPy1AAD8WwAA/O4AAPxsAAD9cAAA/boAAP1rAAD9QwAA/VUAAPzxAAD+IQAA/rUAAP1IAAD+rgR1AE0DkgBDBKz//wKtABUENgA7BH0AlwSCAIgFXACXAVoAYgTDAJME5wA9BT0APQTsAH8E7AB/BWIAPwPwAB0EcwBkBPYAUgUEAFIFgQBSBuUApgaoAHsE+ABSBPgAPQRzAFYGeQBSBvoAfwbTAH8E7AB/BOwAfwSuAH8FugBSBFIAVgTlAD0FCgBSBQoAUgUOAKgFDgCoBaoAPQWWAD0E+ABSBMsAPQSiAKgDbwApBIkAewTuAI8E+ABSA+EANwTsAH8F9ABSBN0AjwVcAD0FuAA9BMMAoATDAI0EOwA9A5YAXAAA/TsD4QA3A+H+ZAAA++AAAPvgAAD74AAA++AAAP5aAAD9LwAA/qYEtgCYAqgAqAS8AKgD8AA9A4kAPQQXACMD4QA3A/4APQAA/KgAAP6hAAD9sQAA/dUAAP5OAAD+AgAA/mQAAP3hBNEAdQTRAHUFDgB/BXsAqAWBAH8F3QB/Bd0AfwUrAAwGMQB/BjEAfwW4AH8FjQA9CIUAkQSmAFIAAPtCAAD7QgAA+0IAAPtCAAD9TwAA/DcAAPuZAAD82gAA/IIAAP7DAAD9CwAA/S8AAP5OAAD+AAamAHsAAPt3AAD83wAA+5oAAP4DAAD90wAA/OEAAP1YAAD9cgAA/loAAP0vAAD+pgGwAGsDHwC2Aj3/ugL8AF0DVQAJAdQAfwJB/6YEDwAjA1IALgdq//IGAgAIBRIAlwQvAIgE0gCXA/wAiAWFAJcEmgCIBJz/9QP8AAYEnP/1A/wABgToAAgEHgAKBRYAXQRYAGAFFgCXBHYAiAWpAEIENgA2BakAQgRYADkAAP/cAAD/FgAA/9wAAP8gAAD/3AAA/yACZgAsBnUAXAd/AFwCPf+6As//ugO+AFwEXgBGAuX/kwNW/5MFTABcBgYAXAQqAGQCPf+6A9z/ugQqAGQEKgBkB1AAEwdQABMHUAATB1AAEwIMACgDxQBcAAD/0gAA/jEAAP7aBHMAaQSdADIEzgBCBM4AQga4AIgFVwAACRwAlwc3AAAEtAAABKz//wgAACkCAAANAgAADwJuAO0CbgBnAa4AHQb2AFwCZAAyAgAAWAIAAFgB7gANAl4ADQHuAA8CXgAPAe4ADwJeAA8B7gCkAl4ApANW/4kDjf+JA1b/iQON/4kG+gBcB/oAXAZ1AFwHfwBcAj3/ugLP/7oGdQBcB38AXAI9/7oCz/+6BnUAXAd/AFwCPf+6As//ugZ1AFwHfwBcAj3/ugLP/7oGdQBcB38AXAI9/7oCz/+6BnUAXAd/AFwCPf+6As//ugTfAFAFmgBQBUb/ugVx/7oE3wBQBZoAUAVG/7oFcf+6BN8AUAWaAFAFRv+6BXH/ugTfAFAFmgBQBUb/ugVx/7oE3wBQBZoAUAVG/7oFcf+6BN8AUAWaAFAFRv+6BXH/ugO+AFwEXgBGA74AXAReAEYDvgBcBF4ARgO+AFwEXgBGA74AXAReAEYDvgBcBF4ARgO+AFwEXgBGAuX/kwNW/5MC5f+TA1b/kwLl/5MDVv+TAuX/kwNW/5MC5f+TA1b/kwLl/5MDVv+TAuX/kwNW/5MJrgBcClwAXAfX/7oIff+6Ca4AXApcAFwH1/+6CH3/ugmuAFwKXABcB9f/ugh9/7oJPQBcCVAAXAYQ/7oGI/+6CT0AXAlQAFwGEP+6BiP/ugVk/7oFov+6BNkAUgSwAFwEvv+6A93/ugb2AFwHPwBcA0j/ugQI/7oG9gBcBz8AXANI/7oECP+6BvYAXAc/AFwDSP+6BAj/ugb2AFwHPwBcA0j/ugQI/7oG9gBcBx0AXAb2AFwHHQBcCK4AXAiuAFwIrv+6CK7/ugdkAFwHvgBcA9f/ugRC/7oFzQBcBmYAXAPX/7oEQv+6Bc0AXAZmAFwD1/+6BEL/ugXNAFwGZgBcA9f/ugRC/7oHZABcB74AXAPX/7oEQv+6B2QAXAe+AFwD1/+6BEL/ugdkAFwHvgBcA9f/ugRC/7oHZABcB74AXAPX/7oEQv+6B2QAXAe+AFwD1/+6BEL/ugUtAFwFyQBcAj//ugLP/7oFLQBcBckAXAI//7oCz/+6BS0AXAXJAFwCP/+6As//ugUtAFwFyQBcAj//ugLP/7oFTABcBgYAXAI9/7oCz/+6BUwAXAYGAFwFTABcBgYAXAI9/7oCz/+6BUwAXAYGAFwE3wBQBZoAUAVG/7oFcf+6A1b/dAON/3QDVv+JA43/iQNW/4kDjf+JA1b/iQON/4kDVv+JA43/iQNW/4kDjf+JA1b/iQON/4kDVv+JA43/iQdkAAAIZAAABvoAXAf6AFwCPf+6As//ugNW/4kDjf+JBvoAXAf6AFwG+gBcB/oAXAAA/f4AAP8/AAD/MAAA/6cAAP4iCPwAMgitADIAAP+1AAD/tgAA/vsAAP7+AAD+IgAA/5cBzQAyA1MAKAAA/oQAAP8LBM0AMgAA/1gAAP9YAAD+/gmuAFwKXABcB9f/ugh9/7oJPQBcCVAAXAYQ/7oGI/+6BNkAUgSwAFwEvv+6A93/ugMOAGoEuv9iA74AXAReAEYEXgC2BF4AtgReALYEXgC2BF4A/QReAP0EXgDmBF4AoQReAOYEXgChBF4BxAReAcEEXgDaBF4A2gReALYEXgC2BH0AlwQ2ADsEXgF6BMz/9gQzADoEtwCXBGwAiAS3AJcEbACIBLcAlwRsAIgEzgBCA7EAOwVtAJcEbAA7BW0AlwRsADsFbQCXBGwAOwVtAJcEbAA7BW0AlwRsADsEfQCXBDYAOwR9AJcENgA7BH0AlwQ2ADsEfQCXBDYAOwR9AJcENgA7BCwAlwKMAB0FVwBCBGwAOwVnAJcEdgCIBWcAlwR2AIgFZwCXBHYAiAVn//4Edv/hBWcAlwR2AIgC/P/tAdT/VwL8AEwB1P+zBLQAlwP8AIgEtACXA/wAiAS0AJcD/ACIA/sAlwHUAHoD+wCXAdT/dgP7AJcB1P92A/sAlwHU/5AGKgCXBrgAiAYqAJcGuACIBioAlwa4AIgFVwCXBHYAiAVXAJcEdgCIBVcAlwR2AIgFVwCXBHYAiAWpAEIEWAA5BakAQgRYADkFqQBCBFgAOQWpAEIEWAA5BGkAlwRsAIgEaQCXBGwAiAT3AJcC4gCIBPcAlwLiAIgE9wCXAuIANAT3AJcC4gA0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//wADwAQ//wAEAAR//wAEQAS//wAEgAT//wAEwAV//wAFAAW//wAFQAX//wAFgAX//wAFwAY//sAGAAa//oAGQAa//oAGgAb//oAGwAd//oAHAAe//oAHQAe//oAHgAg//oAHwAh//oAIAAh//kAIQAi//kAIgAk//kAIwAl//kAJAAm//kAJQAn//gAJgAo//gAJwAo//gAKAAq//cAKQAr//cAKgAs//cAKwAt//cALAAu//YALQAu//YALgAw//YALwAx//YAMAAy//YAMQAz//YAMgA0//YAMwA2//YANAA2//UANQA3//UANgA4//UANwA4//UAOAA7//QAOQA8//QAOgA9//QAOwA9//QAPAA+//QAPQA///QAPgBA//MAPwBB//IAQABD//IAQQBD//IAQgBE//IAQwBG//IARABH//IARQBH//IARgBI//IARwBK//IASABL//EASQBM//AASgBN//AASwBN//AATABO//AATQBP//AATgBR//AATwBS//AAUABT//AAUQBU/+8AUgBU/+8AUwBW/+8AVABX/+8AVQBX/+8AVgBZ/+4AVwBa/+4AWABb/+0AWQBc/+0AWgBd/+0AWwBe/+0AXABe/+wAXQBf/+wAXgBi/+wAXwBi/+wAYABj/+wAYQBk/+sAYgBk/+sAYwBm/+sAZABn/+sAZQBp/+sAZgBp/+oAZwBq/+oAaABs/+oAaQBs/+oAagBt/+oAawBu/+kAbABu/+kAbQBx/+kAbgBy/+kAbwBz/+kAcABz/+gAcQB0/+gAcgB2/+gAcwB3/+gAdAB5/+gAdQB6/+cAdgB6/+cAdwB7/+cAeAB9/+cAeQB+/+cAegB+/+YAewB//+YAfACB/+YAfQCC/+YAfgCD/+YAfwCE/+UAgACE/+UAgQCF/+UAggCG/+UAgwCJ/+UAhACJ/+QAhQCK/+QAhgCL/+QAhwCL/+QAiACN/+QAiQCO/+MAigCO/+MAiwCQ/+MAjACR/+MAjQCT/+IAjgCT/+IAjwCU/+IAkACV/+IAkQCV/+IAkgCX/+IAkwCZ/+EAlACZ/+EAlQCa/+EAlgCb/+EAlwCc/+AAmACd/+AAmQCe/+AAmgCg/+AAmwCg/+AAnACh/+AAnQCj/98AngCj/98AnwCk/98AoACl/98AoQCn/98AogCn/94AowCp/94ApACq/94ApQCq/94ApgCr/94ApwCs/90AqACt/90AqQCv/90AqgCw/9wAqwCw/9wArACx/9wArQCz/9wArgC0/9wArwC0/9wAsAC2/9wAsQC3/9sAsgC3/9sAswC5/9sAtAC6/9sAtQC6/9sAtgC7/9oAtwC8/9oAuAC//9oAuQC//9oAugDA/9oAuwDB/9kAvADB/9kAvQDD/9kAvgDF/9gAvwDG/9gAwADH/9gAwQDI/9gAwgDJ/9gAwwDK/9gAxADL/9gAxQDM/9cAxgDM/9cAxwDO/9YAyADQ/9YAyQDQ/9YAygDR/9YAywDS/9YAzADT/9YAzQDU/9YAzgDW/9YAzwDX/9UA0ADX/9UA0QDY/9UA0gDZ/9UA0wDa/9UA1ADb/9QA1QDd/9QA1gDe/9QA1wDe/9MA2ADg/9MA2QDh/9MA2gDh/9MA2wDi/9IA3ADj/9IA3QDl/9IA3gDm/9IA3wDn/9IA4ADo/9IA4QDo/9IA4gDq/9IA4wDr/9EA5ADs/9EA5QDt/9EA5gDu/9EA5wDu/9AA6ADw/9AA6QDx/9AA6gDy/9AA6wDy/9AA7AD0/9AA7QD2/88A7gD2/84A7wD3/84A8AD4/84A8QD4/84A8gD6/84A8wD8/84A9AD8/84A9QD9/84A9gD+/80A9wD//80A+AEA/8wA+QEB/8wA+gEC/8wA+wED/8wA/AEE/8wA/QEG/8wA/gEG/8wA/wEH/8wAAAAfAAAH+AkNCQADAwIEBwYKBgIDAwYHAwMDAwUFBQUFBQUFBQUDAwcHBwQIBwYHBwYGBwcEBAYECAcIBggGBgYHBwgFBgUDAwMHBQUFBQQFBQMFBQIDBQIIBQUFBQMEAwUGCAQGBAQEBAcHBwcGBwgHBQUFBQUFBAUFBQUCAgICBQUFBQUFBQUFBQYEBQUFBAUFCAgIBQUHCAgIBwcHBQUFBgYFBQQEBggGBAIHBwUHBgUFBwcHCAkIBQgEBAICBwcGBgQFAwMFBQYDAgQNBwYHBgYEBAQECAgIBwcHAgUFBQUFBQUFBQUFAgYEBQQDBwUGBgUFBwcEBAQJCQkFBwUEBgQHBAcEBQUDBwUHBQcGBwYFBgUEAgQDBAQHBQcFCAUGAwYDBgQGAwYEBwUHBQUEBQQFCAgFBQQFBQgFBAQJBwUHAwQJAwUDAwUDBwUHBAcEBgUGBQYFBwUHBQcFBwUHBgQCBAIEAgQCBAMGBQUEAgcFBwUIBQgFBgMGBAYDBwUHBQcFBwUICAYGAgcFCAgIBgMICAgICAgGBgIFBQYJCQkJAgUFBQcICQYJCAgCBwYGBgUHBAYHCAcGCAcGBQYGBQgGBAYFBAUCBQUGBAUFAgQFBQYEBQUEBQQGCAIFBQUIBgcFBwYEBAQJCQcGBgYHBQYFBwYIBQcHBgYIBwgHBgcGBggFBwYICQcHBQcJBgUFBQQFBQgEBQUEBQYFBQUFBAYGCAQGBQYHBQYFBAcFBQYEBAQCAgMICAYEBgUFBAgKBQYJCQkJCQkJCQkJCAUHBQAAAAAFBQUFBQUFBQUFBQUFBQUHBQcFBwUHBQcFBwUHBQcFBwUHBQcFBwUGBQYFBgUGBQYFBgUGBQYFBAIEAgAACQkFBQUFBQUFBQUFBQUFAwUCBQUDBgcFBgYDBAYGAwUFBgYGBAQHBgYGBQUGBQgHBgYGAgQIAwUFBgYGCAgICAYGBgcFBgYEBQYEBQUGBgQHBgYFBgUIBwMHBQYHAAAAAAMDBAMCAwMDAwMDAwIFBQUFBQUFBQUFBQMFBAMEAwUFBQMDAwMDAwkFCQgEAgUCBQgJCAcIAwMICAcIBQYGBgMECAkEBQgJBAUICQkJCQkJCQkJCQkJCQkJCQkDAwMDAwgFCAUIBQgFCAUIBQgFCAUIBQgFCAUIBQcFBwUHBQcFBwUHBQcFBgYGBgYGBgYFAAMDCQkDAgMCAwQEAgMICQMDAgMHCAMDBAUHCAMDBwgDAwUGBgYFBgYGBQYGBgQFBAUDBAMECwwJCgsMCQoKCggICgoICAYGBgYGBgYGBQUFBQUFBQUICAQFCAgEBQcHBAUGBwMDBQYFBQYHAwMEBQcFBAQICQgJAwMFBgUGBQYFBgQEBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAYDBQYFBwIFBgYGBgYEBQYGBggHBgYFBwgIBgYFBwUGBgYGBgYGBgUFBAUGBQQGBwYGBgUFBQQABAQAAAAAAAAABgMFBAQFBAUAAAAAAAAAAAUFBgYGBwcGBwcGBgoFAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAACBAMEBAIDBQQIBwYFBQQGBQYEBQQGBQYFBgUGBQYFAAAAAAAAAwcIAwMEBQMEBgcFAwQFBQgICAgCBAAAAAUFBQUIBgoIBQUJAgIDAwIIAwICAgMCAwIDAgMEBAQECAkHCAMDBwgDAwcIAwMHCAMDBwgDAwcIAwMFBgYGBQYGBgUGBgYFBgYGBQYGBgUGBgYEBQQFBAUEBQQFBAUEBQMEAwQDBAMEAwQDBAMECwwJCgsMCQoLDAkKCgoICAoKCAgGBgUFBQUICAQFCAgEBQgIBAUICAQFCAgICAoKCgoICQQFBwcEBQcHBAUHBwQFCAkEBQgJBAUICQQFCAkEBQgJBAUGBwMDBgcDAwYHAwMGBwMDBgcDAwYHBgcDAwYHBQYGBgQEBAQEBAQEBAQEBAQEBAQICQgJAwMEBAgJCAkAAAAAAAoKAAAAAAAAAgQAAAUAAAALDAkKCgoICAUFBQUDBQQFBQUFBQUFBQUFBQUFBQUFBQUFBQcFBgUGBQYFBwQHBQcFBwUHBQcFBgUGBQYFBgUFBQYDBwUHBQcFBwUHBQcFBAIEAgYFBgUGBQQCBAIEAgQCCAgICAgIBwUHBQcFBwUIBQgFCAUIBQYFBgUGAwYDBgMGAwYEBgQGBAYEBgQGAwYDBgMGAwcFBwUHBQcFBwUHBgcGCAgICAUEBQQGBgUEBQQFBAUDCAYFAgUFBQUFBQUFBwcICAcHCAgEBAQEBAQHBwgICAgFBQUFBQUFBQgICQkJCQkJAgICAgICAgIFBQYGBgYGBgUFBQUFBQgICgoJCQUFBQUFBQUFBggICAgICAgICAgIBgYICAcHCAgFBQQEBQUCAgUFBQUICAUFBQUFBQUFBwcGBgYGBgYFBQUFBQUFBQcHCAgICAgICAgICAgICAgGBwgICAgICAUFBQUFBQUHBwcHBwMFAwUFBQUFBQUHBwgIBwMDBQICAgICAgQEBQUDAwUFBQUFBQUFBQYGCAcHBQUFCAgICAgJCAcGBgUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwUHBQYFCAUFBAUEBQUAAAoOCgADAwIEBwYKBwIEBAYHAwQDBAUFBQUFBQUFBQUEBAcHBwUJBwYHBwYGBwcEBAYFCAcIBggGBgYHBgoGBgYEBAQHBQUFBgUGBQMGBgIDBgIIBgYGBgQEAwYGCAUGBAUEBQcHBwcGBwgHBQUFBQUFBQUFBQUCAgICBgYGBgYGBgYGBgYFBQYFBQUFCQkJBQUHCQgJBwcHBQYFBgcGBQUFBwkGBQIHBwUHBgYGCAcHCAoJBQkEBAICBwcGBgQFBAQFBQYDAgQOBwYHBgYEBAQECAgIBwcHAgUFBQUFBQUFBQUFAgYEBgQEBwUGBgYGBwcFBQUKCgoFBwYEBgQHBQcFBgUEBwUHBQcHBwYFBgUFAgUEBQQHBgcGCAYGBAYEBgQGAwYFBwYHBgYEBgQFCAgGBQUGBQgFBQUKBwUHAwUKAwYEBAYEBwUHBQcFBgUGBQYFBwYHBgcGBwYHBgQCBAIEAgQCBAMGBgYFAgcGBwYIBggGBgQGBAYDBwYHBgcGBwYKCAYGAwcFCQkIBgQKCAoICggGBgIFBQYKCgoKAgUFBQcICQYJCAgCBwYGBgYHBAYHCAcGCAcGBgYGBggHBAYGBQYCBgYGBAYGAgUGBgYEBgYEBgYICAIGBgYIBggFBwYEBAQKCgcGBgcHBgYFBwYKBQcHBgcIBwgHBgcGBggGBwYKCwgIBgcKBgUGBQQGBQgFBgYGBgYGBgYGBQYGCAUGBQgJBgcFBQgFBQYEBQQCAgMICAYGBgYFBAkLBgYKCgoKCgoKCgoKCAYIBwAAAAAFBQUFBQUFBQUFBQUFBQUHBQcFBwUHBQcFBwUHBQcFBwUHBQcFBwUGBQYFBgUGBQYFBgUGBQYFBAIEAgAACgoFBQUFBQUFBQUFBQUFBAUCBQUEBwcGBwcDBAcHAwYGBgcHBAQIBgcHBgYHBggIBgYGAgQIAwYGBgYGCAgICAcHBwcGBwcEBQcEBgYGBwQIBwcGBwYICAMHBgcIAAAAAAQEBQQDAwMDAwMDAwIGBgYGBgYGBgYGBgQFBAQFBAYGBgMFAwMDAwoFCgkEAwUDBQkKCQgJAwQJCQgJBgcHBwQECQoFBQkKBQUJCgoKCgoKCgoKCgoKCgoKCgoDAwMDAwgGCAYIBggGCAYIBggGCAYIBggGCAYIBgcGBwYIBwgHCAcIBwgHBgYGBgYGBgYGAAQECgoEAgMCAwQEAgMJCgMEAgMICQMEBQYICQMECAkDBAYHBwcGBwcHBgcHBwUFBQUEBAQEDA0KCwwNCgsMDAkJDAwJCQcHBwcHBwcHBgYGBQYGBgUJCQQFCQkEBQcIBQUGBwMEBgcFBgcIAwQFBgcGBAQJCgkKAwQGBwYHBgcGBwUFBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAYDBQYGBwIGBgcGBgcFBgYGBwkIBgYGCAkJBgYGBwUGBgYGBgcHBgYGBAYGBgUGBwYHBwYGBQQABQUAAAAAAAAABgMGBQQFBQUAAAAAAAAAAAYGBgcHBwcGCAgHBwsGAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAACBAMEBAIDBQQJCAYFBgUHBgYFBgUGBQYFBgYHBQcFAAAAAAAAAwgJAwQFBQQEBwgFAwUFBQkJCQkDBQAAAAYGBgYIBwsJBgYKAwMDAwIJAwMDAgMCAwIDAgMEBAQECQoICQMECAkDBAgJAwQICQMECAkDBAgJAwQGBwcHBgcHBwYHBwcGBwcHBgcHBwYHBwcFBQUFBQUFBQUFBQUFBQQEBAQEBAQEBAQEBAQEDA0KCwwNCgsMDQoLDAwJCQwMCQkHBwYGBgUJCQQFCQkEBQkJBAUJCQQFCQkJCQsLCwsJCgUFBwgFBQcIBQUHCAUFCQoFBQkKBQUJCgUFCQoFBQkKBQUGBwMEBgcDBAYHAwQGBwMEBwgDBAcIBwgDBAcIBgcHBwQEBAQEBAQEBAQEBAQEBAQJCgkKAwQEBAkKCQoAAAAAAAsLAAAAAAAAAgQAAAYAAAAMDQoLDAwJCQYGBgUEBgUFBQUFBQUFBQUFBQUFBQUFBQYFBQcFBgYGBgYGBwUHBgcGBwYHBgcGBgUGBQYFBgUGBQYDBwYHBgcGBwYHBgcGBAIEAgYGBgYGBgUCBQIFAgUCCAgICAgIBwYHBgcGBwYIBggGCAYIBgYGBgYGBAYEBgQGBAYEBgQGBAYEBgQGAwYDBgMGAwcGBwYHBgcGBwYGBgYGCggKCAYFBgUGBgYEBgQGBAYDCAYFAwYGBgYGBgYGBwcICAgICAgFBQUFBQUHBwgICAgGBgYGBgYGBggICQkJCQkJAgICAgICAgIFBQYGBgYGBgYGBgYGBggICgoKCgYGBgYGBgYGBwkJCQgICAgICAgIBwcJCQkJCQkGBgUFBgYCAgYGBgYICAYGBgYGBgYGBwcHBwcHBwcGBgYGBgYGBgcHCQkJCQkJCAgICAgICAgHCAkJCQkJCQYGBgYGBgYHBwcHBwQFBAUFBgYGBgYHBwgIBwQEBQICAgICAgQEBQUEBAUGBgYGBgYGBgYGCAgHBQUFCAgICAgJCAgHBwUEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwYHBgYGCAYFBAUEBQYAAAsPCwADAwQECAYLBwIEBAYIBAQEBAYGBgYGBgYGBgYEBAgICAUKBwYHBwYGBwcEBQYFCAcIBggHBgYHBgoGBgYEBAQIBgYGBgUGBgQGBgIDBQIIBgYGBgQFBAYGCAYGBQUEBQgHBwcGBwgHBgYGBgYGBQYGBgYCAgICBgYGBgYGBgYGBgYFBgYGBQYGCgoKBgYICggKCAgIBgYGBwcGBgUFCAoGBQQICAYIBwYGCQcHCAsKBgoEBAICCAgGBgUGBAQGBgYDAgQPBwYHBgYEBAQECAgIBwcHAgYGBgYGBgYGBgYGAwYFBgUECAYGBgYGCAgFBQULCwsGBwYEBgUHBQcFBgYEBwYHBgcICAYGBgYFAgUEBQUHBgcGCAYHBAcEBgUGBAYFBwYHBgYFBgUGCAgGBgUGBQgGBgULCAYIAwULBAcEBAcEBwYHBQcFBgYGBgYGBwYHBgcGBwYIBgQCBAIEAgQCBQMGBQUFAgcGBwYIBggGBwQGBQYEBwYHBgcGBwYKCAYGAwcGCgoIBgQKCAoICggGBgIGBgcLCwsLAgYGBggICQYJCAkCBwYHBgYHBAYHCAcGCAcGBgYGBggIBAYGBQYCBgYGBAYGAgYGBgYFBgYFBgYICAIGBgYIBggGBwYEBAULCwgHBwcHBgYGCAYKBgcHBwcIBwgHBgcGBwgGCAcKCwgIBgcKBwYGBgUHBggFBgYGBgYGBgYGBQYGCAYGBggJBwgGBQkGBgcFBQUCAgMKCQYGBgYGBQoNBgYLCwsLCwsLCwsLCAYIBwAAAAAGBgYGBgYGBgYGBgYGBgYHBgcGBwYHBgcGBwYHBgcGBwYHBgcGBwYGBgYGBgYGBgYGBgYGBgYGBAIEAgAACwsGBgYGBgYGBgYGBgYGBAYCBgYECAgGCAgDBAgIAwcHBwgIBAQJBwcHBgcHBwkJBgYGAgQJAwcHBwcHCQkJCQgICAgGCAgEBQgEBwcHCAQJBwcHBwcJCQMIBwcJAAAAAAQEBQQDAwMDAwMDAwIGBgYGBgYGBgYGBgQGBQQFBAYGBgMFAwMDAwsGCwoFAwYDBgoLCgkKAwQKCgkKBwgHBwQFCgsFBgoLBQYKCwsLCwsLCwsLCwsLCwsLCwsDAwMDAwgGCAYIBggGCAYIBggGCAYIBggGCAYIBgcGBwYIBwgHCAcIBwgHBgYGBgYGBgYGAAQECwsEAwMDAwUFAwMKCwMEAwMJCgMEBQYJCgMECQoDBAcIBwcHCAcHBwgHBwUGBQYEBQQFDQ4LDA0OCwwNDQkJDQ0JCQcIBwgHCAcIBwYHBgcGBwYKCgUGCgoFBggJBQYHCAMEBwgGBwcIAwQFBggGBQUKCwoLAwQHCAcIBwgHCAUFBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBQYEBgYGBwIHBwcHBwcFBgcHCAkJBwcGCQoJBwcGCAYHBwcHBwcHBwcGBQYHBwUHCAcHCAcHBgUABQUAAAAAAAAABgQHBQUGBQUAAAAAAAAAAAcHBwgICAgHCQkICAwGAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAACBAMEBQIDBgUKCAcGBwUIBgYFBgUHBgcGBwYIBggGAAAAAAAAAwkKAwQFBgQFBwgGAwUGBgoKCgoDBQAAAAYGBwcJBw0KBgYLAwMDAwIKAwMDAwMDAwMDAwMFBQUFCgsJCgMECQoDBAkKAwQJCgMECQoDBAkKAwQHCAcHBwgHBwcIBwcHCAcHBwgHBwcIBwcFBgUGBQYFBgUGBQYFBgQFBAUEBQQFBAUEBQQFDQ4LDA0OCwwNDgsMDQ0JCQ0NCQkHCAcGBwYKCgUGCgoFBgoKBQYKCgUGCgoKCgwMDAwKCwUGCAkFBggJBQYICQUGCgsFBgoLBQYKCwUGCgsFBgoLBQYHCAMEBwgDBAcIAwQHCAMEBwgDBAcIBwgDBAcIBwgHBwUFBQUFBQUFBQUFBQUFBQUKDAoLAwQFBQoLCgsAAAAAAAwMAAAAAAAAAgUAAAcAAAANDgsMDQ0JCQcGBwYEBwUGBgYGBgYGBgYGBgYGBgYGBgYGBgcGBgYGBgYGBwUHBgcGBwYHBgcGBgYGBgYGBgYGBgYEBwYHBgcGBwYHBgcGBAIEAgYFBgUGBQUCBQIFAgUCCAgICAgIBwYHBgcGBwYIBggGCAYIBgYGBgYHBAcEBwQHBAYFBgUGBQYFBgUGBAYEBgQGBAcGBwYHBgcGBwYGBgYGCggKCAYGBgYGBgYFBgUGBQYECAYGAwYGBgYGBgYGBwcICAgICAgFBQUFBQUHBwkJCAgGBgYGBgYGBggICgoKCgoKAgICAgICAgIFBQcHBwcHBwYGBgYGBggJCgoKCgYGBgYGBgYGCAkJCQgICAgICAgICAkKCgoKCgoGBgUFBgYCAgYGBgYICAYGBgYGBgYGBwcICAcHBwcGBgYGBgYGBggICgoKCgoKCAgICAgICAgICAoKCQkKCgYGBgYGBgYHBwcHBwQGBAYGBgYGBgYHBwkIBwQEBgICAgICAgQEBgUEBAYGBgYGBgYGBgYGCAgHBgYGCAgICAgJCAkICAYEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwYHBgYFCAYGBQYFBgYAAAwRDAAEBAQFCQcMCAMFBQcIBAQEBQcHBwcHBwcHBwcEBAkJCQYLCAcHCAcGCAgEBQcGCQgJBwkHBwgICAwHCAcFBQUJBwcGBwYHBwQHBwIDBgIKBwcHBwQFBQcGCgYGBQYFBgkICAcHCAkIBgYGBgYGBgcHBwcCAgICBwcHBwcHBwcHBwcGBwcHBQcHCwsLBwcJCwkLCAkJBwcHCAgHBwYGCAsIBgQJCQcJBwcHCggICQwLBwsFBQMDCQkGCAUHBQUGBgcEAwURCAcIBwcEBAQECQkJCAgIAgcHBwcHBwcHBwcGAgcFBwUFCAcIBgcHCQkGBgYMDAwHCAcEBwUHBgcGBwcECAYIBggICAcGBwcGAgYEBgUIBwgHCQcHBAcEBwUIBQgGCAcIBwcFBwUGCQoHBwUHBgkHBwYLCQYIBAYMBAcEBAcECAYHBgcGBwcHBwcHCAcIBwgHCAcJBwQCBAIEAgQCBQMHBgYGAggHCAcJBwkHBwQHBQcECAcIBwgHCAcMCggGAwgGCwsJCAQMCgwKDAoIBgMHBwgMDAwMAwcHBwgJCgYKCgoCCAcHBwcIBAcICQgHCQgHBwgIBwoIBAgHBQcCBwcGBQcHAgYGBwYFBwcFBwYICAIHBwcIBwkGBwcEBAUMDAkHBwgIBwcGCAcMBggIBwgJCAkIBwcIBwoHCAgKCwgJBwcLBwYHBgUHBwoFBwcGBwgHBwcHBgYGCgYHBwgJBwgGBgkHBwgFBgUCAgMKCgcGBgcGBQsOBwcMDAwMDAwMDAwMCQcJCAAAAAAHBwcHBwcHBwcHBwcHBwcIBggGCAYIBggGCAYIBggGCAYIBggGCAYHBwcHBwcHBwcHBwcHBwcHBAIEAgAADAwGBgYGBgYGBgYGBgYGBQYDBgYECAkGCAgDBQgIAwcHBwgIBQUJCAgIBwcIBwoKBgYGAwUKAwcHBwcICgoKCggICAkGCAgEBggEBwcHCAUJCAgHCAcKCgMJBwgJAAAAAAQEBgUDAwYDAwMDBQMHBwcHBwcHBwcHBwQHBQQGBAcHBwMFBQUDBQwGDAsFAwYDBgsMCwoLAwQKCwoKBwgICAQFCwwGBgsMBgYKDAwMDAwMDAwMDAwMDAwMDAwFBQUFBQkHCQcJBwkHCQcJBwkHCQcJBwkHCQcJBwgHCAcJCAkICQgJCAkICAYIBggGCAYHAAUFDAwFAwQDBAUFAwQKDAMEAwQKCwMEBgcKCwMECgsDBAcICAgHCAgIBwgICAYHBgcEBQQFDxAMDQ8QDA0ODgkJDg4JCQgICAgICAgIBwcHBgcHBwYKCwUGCgsFBgkKBgYICQMEBwgGBwgJAwQGBwgHBQUKDAoMAwQHCQcJBwkHCQYGBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBQgFBwcHCAIHBwgHBwgGBwcICAoKBwcHCgoKBwcHCQYHCAgHBwcHBwcHBQcHBwYHCQcICAcHBgUABgYAAAAAAAAABwQHBgUGBgYAAAAAAAAAAAcHCAgICQkICQkJCA0HAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAADBQMEBQIDBgULCQgGBwYIBwgGBwYHBggHCAcIBggHAAAAAAAABAoLAwQGBwQFCAkGAwYGBgsLCwsDBgAAAAcHBwcKCA4LBwcMAwMEBAMKBAMDAwQDBAMEAwQFBQUFCgwKCwMECgsDBAoLAwQKCwMECgsDBAoLAwQHCAgIBwgICAcICAgHCAgIBwgICAcICAgGBwYHBgcGBwYHBgcGBwQFBAUEBQQFBAUEBQQFDxAMDQ8QDA0PEAwNDg4JCQ4OCQkICAcHBwYKCwUGCgsFBgoLBQYKCwUGCgsKCw0NDQ0LDAYGCQoGBgkKBgYJCgYGCwwGBgsMBgYLDAYGCwwGBgsMBgYICQMECAkDBAgJAwQICQMECAkDBAgJCAkDBAgJBwgICAUFBQUFBQUFBQUFBQUFBQULDQoMAwQFBQoMCgwAAAAAAA0NAAAAAAAAAwUAAAcAAAAPEAwNDg4JCQcHBwYFBwYHBwcHBwcHBwcHBwcHBwcHBwcHBwgGBwcHBwcHBwYIBwgHCAcIBwgHBwcHBwcHBwcHBwYECAcIBwgHCAcIBwgHBAIEAgcGBwYHBgYCBgIGAgYCCQoJCgkKCAcIBwgHCAcJBwkHCQcJBwcHBwcHBAcEBwQHBAcFBwUHBQcFBwUIBQgFCAUIBQgHCAcIBwgHCAcIBggGDAoMCgcGBwYIBgcFBwUHBQcFCgYGAwcHBwcHBwcHCAgJCQkJCQkFBQUFBQUICAoKCgoHBwcHBwcHBwkJCwsLCwsLAgICAgICAgIFBQcHBwcHBwcHBwcHBwkKDAwLCwcHBwcHBwcHCQoKCggICAgICAgICAkLCwoKCwsHBwUFBwcCAgcHBwcICAcHBwcHBwcHCAgICAgICAgHBwcHBwcHBwkJCwsLCwsLCAgICAgICAgICQsLCgoLCwcHBwcHBwcICAgICAQHBAcHBwcHBwcICAoJCAQEBwICAgICAgQEBgYEBAcHBwcHBwcHBwgICQkIBwcHCAgICAgKCQoICAcEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAcIBwcGCQcGBQYFBgcAAA0SDQAEBAQFCQcMCQMFBQgIBAUEBQcHBwcHBwcHBwcFBQkJCQYMCAcICAcHCAgEBQcGCggJBwkICAgICAwIBwcFBQUJBwcHBwYHBwQHBwMEBgMLBwcHBwUGBAcGCgYGBgYGBgkICAgHCAkIBwcHBwcHBgcHBwcDAwMDBwcHBwcHBwcHBwcGBwcHBgcHDAwLBwcJDAkMCAkJBwcHCAkHBwYGCQsHBgQJCQcJCAcHCwgICQ0MBwwFBQMDCQkGBwYHBQUHBwcEAwUSCAcIBwcEBAQECQkJCAgIAwcHBwcHBwcHBwcHBAgGBwYFCQcHBgcHCQkGBgYNDQ0HCAcECAYIBggGBwcFCAcIBwgJCQcHBwcGAwYFBgYIBwgHCQcIBQgFCAYIBAgGCAcIBwcGBwYHCQoHBwYIBgkHBwYMCgcIBAYNBAgFBQgFCAcIBggGBwcHBwcHCAcIBwgHCAcJCAQDBAMEAwQDBQQHBgUGAwgHCAcJBwkHCAUIBggECAcIBwgHCAcMCgcGAwgHDAsJBwUMCgwKDAoHBgMHBwgNDQ0NAwcHBwgJCgYKCQoDCAcIBwcIBAcICggHCQgHBwgHCAoJBAcHBgcDBwcGBQcHAwYGBwYGBwcGBwcICQMHBwcJBwkHCAgEBAUNDQkHBwkICAcHCQcMBwgIBwkKCAkIBwgIBwoICQgMDAkKCAgMCAcHBwUHBwoGBwcGBwgHBwcHBgYGCgYHBwoLBwkHBgoHBwgFBgYDAwQLCwgGBgcHBQwPBwcNDQ0NDQ0NDQ0NCQcJCAAAAAAHBwcHBwcHBwcHBwcHBwcIBwgHCAcIBwgHCAcIBwgHCAcIBwgHCAcHBwcHBwcHBwcHBwcHBwcHBAMEAwAADQ0HBwcHBwcHBwcHBwcHBQcDBwcFCQkGCQkEBQkJBAgICAkJBQUKCQkJBwgJCAsKCAgIAwULBAgICAgJCwsLCwkJCQkGCQkEBgkECAgICQUKCQkICQgLCgQJCAkKAAAAAAUFBgUDBAYEBAMEBQMHBwcHBwcHBwcHBwUHBQUGBQcHBwUFBQUEBQ0HDQwFAwcDBwwNDAsMBAULDAsLCAkJCQUFDA0GBwwNBgcLDQ0NDQ0NDQ0NDQ0NDQ0NDQ0FBQUFBQkHCQcJBwkHCQcJBwkHCQcJBwkHCQcJBwgHCAcJCAkICQgJCAkIBwYHBgcGBwYHAAUFDQ0FAwQDBAUGAwQLDQQFAwQLDAQFBgcLDAQFCwwEBQgJCQkICQkJCAkJCQYHBgcFBQUFEBENDhARDQ4PDwoKDw8KCgkJCQkJCQkJCAgIBggICAYLDAUHCwwFBwkKBgcICQQFCAkHCAkKBAUGBwkHBQYLDQsNBAUICQgJCAkICQYGBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBggEBwcHCAIICAkICAkGBwgICQsLCAgHCwsLCAgICQcICAgICAkJCAgIBgcICAYICggICQgIBwYABgYAAAAAAAAABwQIBgYHBgYAAAAAAAAAAAgICAkJCgoICgoJCQ4IAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAADBQQEBQMEBwUMCggHCAYJBwcGBwYIBwgHCAcJBwkHAAAAAAAABAsMBAUGBwUFCQoHBAYHBwwMDAwDBgAAAAcICAgLCQ8MCAgNAwMEBAMLBAMDAwQDBAMEAwQFBgUGCw0LDAQFCwwEBQsMBAULDAQFCwwEBQsMBAUICQkJCAkJCQgJCQkICQkJCAkJCQgJCQkGBwYHBgcGBwYHBgcGBwUFBQUFBQUFBQUFBQUFEBENDhARDQ4QEQ0ODw8KCg8PCgoJCQgICAYLDAUHCwwFBwsMBQcLDAUHCwwLDA4ODg4MDQYHCQoGBwkKBgcJCgYHDA0GBwwNBgcMDQYHDA0GBwwNBgcICQQFCAkEBQgJBAUICQQFCQoEBQkKCQoEBQkKCAkJCQUGBQYFBgUGBQYFBgUGBQYMDgsNBAUFBgsNCw0AAAAAAA8OAAAAAAAAAwUAAAgAAAAQEQ0ODw8KCggICAYFCAYHBwcHBwcHBwcHBwcHBwcHBwcHBwgHBwcHBwcHCAYIBwgHCAcIBwgHBwcHBwcHBwcHBwcECAcIBwgHCAcIBwgHBAMEAwcGBwYHBgYDBgMGAwYDCgsKCwoLCAcIBwgHCAcJBwkHCQcJBwcHBwcIBQgFCAUIBQgGCAYIBggGCAYIBAgECAQIBAgHCAcIBwgHCAcIBggGDAoMCggGCAYHBgcGBwYHBgcECgYHAwcHBwcHBwcHCAgJCQkJCQkGBgYGBgYICAoKCgoHBwcHBwcHBwoKDAwLCwwMAwMDAwMDAwMGBggICAgICAcHBwcHBwkKDAwLCwcHBwcHBwcHCQsLCwkJCQkJCQkJCQoMDAsLDAwHBwYGBwcDAwcHBwcJCQcHBwcHBwcHCAgJCQgICQkHBwcHBwcHBwoKDAwLCwwMCQkJCQkJCQkJCgwMCwsMDAcHBwcHBwcICAgICAUHBQcHBwcHBwcJCAoKCAUFBwMDAwMDAwQEBwYFBQcHBwcHBwcHBwcHCgoIBwcHCQkJCQkKCQoJCQcFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAcIBwcGCQcHBgcGBwcAAA4TDgAEBAQGCggOCQMFBQgKBAUEBQgICAgICAgICAgFBQoKCgcNCAgJCggHCQkEBggHCgkKCAoJCAgJCA4ICAgFBQUKCAgHCAcIBwQICAIEBwIMCAgICAUGBQgICggIBgcFBwoICAkICQoJBwcHBwcHBwcHBwcCAgICCAgICAgICAgICAgHCAgIBggIDQ0MCAgKDQoNCgoKCAgICQoICAcHCgwIBwQKCggKCQgICwgICg4NCA0GBgMDCgoICAYIBQUHBwgEAwYTCAgICAgEBAQECgoKCQkJAggICAgICAgICAgHBAgGCAYFCggICAgICgoHBwcODg4ICQgECAYJBwkHCAgFCAcIBwoKCggHCAcHAgcFBwYJCAkICggJBQkFCAYIBQgHCQgJCAgGCAYHCgoICAYIBwoICAcNCgcKBAcOBQgFBQgFCAcJBwkHCAcIBwgHCQgJCAkICQgKCAQCBAIEAgQCBgQIBwcHAgkICQgKCAoICQUIBggFCQgJCAkICQgOCggIBAgHDQwKCAUOCg4KDgoICAMICAkODg4OAwgICAgKCwcLCgwCCAgJCAgJBAgICgkICgkICAgICAoKBAgIBggCCAgIBQgIAgcHCAgGCAgGCAgKCgIICAgKCAoHCQgEBAYODgoICAkICAgHCggOBwkJCAkKCQoJCAkICAoICgkMDQoLCAkNCQcIBwYIBwoGCAgHCAkICAgIBwgICggICAoLCAoHBwsHBwkGBwYCAgQMDAgHCAgHBg0QCAgODg4ODg4ODg4OCggKCQAAAAAICAgICAgICAgICAgICAgIBwgHCAcIBwgHCAcIBwgHCAcIBwgHCAcIBwgHCAcIBwgHCAcIBwgHBAIEAgAADg4HBwcHBwcHBwcHBwcHBQcDBwcFCgkHCQoEBQoKBAkJCQoKBgYLCgkJBwgJCAsKCAgIAwYMBAkJCQkKCwsLCwoKCgkHCQoEBgoECQkJCgYLCQkICQgLCgQJCQkLAAAAAAUFBwUEBAYEBAQEBQMICAgICAgICAgICAUIBgUHBQgICAUFBQUEBQ4HDg0GBAcEBw0ODQsNBAUMDAsMCQoJCgUGDQ4HBw0OBwcMDg4ODg4ODg4ODg4ODg4ODg4FBQUFBQoICggKCAoICggKCAoICggKCAoICggKCAkICQgKCQoJCgkKCQoJCAgICAgICAgIAAUFDg4FAwQDBAYGAwQMDgQFAwQLDQQFBwgLDQQFCw0EBQkKCQoJCgkKCQoJCgcIBwgFBgUGERIODxESDg8QEAsLEBALCwkKCQoJCgkKCAgIBwgICAcMDQYHDAwGBwoLBwcJCgQFCAoHCQkLBAUHCAkIBgYMDgwOBAUJCgkKCQoJCgcHCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBggFBwgICQIICQkJCQkHCAkJCgwMCQkICwwMCQkICggJCQkJCQoKCQgIBggJCQcJCgkJCggIBwYABwcAAAAAAAAACAUIBwYHBwcAAAAAAAAAAAgICQoKCgoJCwsKCg8IAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAADBQQEBgIEBwYNCwkHCAcKCAgHCAcJBwkICQgKBwoIAAAAAAAABAsNBAUHCAUGCQsHBAcHBw0NDQ0EBwAAAAgICAgMCRANCAgOBAQEBAMMBAQEAwQDBAMEAwQGBgYGDA4LDQQFCw0EBQsNBAULDQQFCw0EBQsNBAUJCgkKCQoJCgkKCQoJCgkKCQoJCgkKCQoHCAcIBwgHCAcIBwgHCAUGBQYFBgUGBQYFBgUGERIODxESDg8REg4PEBALCxAQCwsJCggICAcMDQYHDA0GBwwNBgcMDQYHDAwMDA8PDw8NDgcHCgsHBwoLBwcKCwcHDQ4HBw0OBwcNDgcHDQ4HBw0OBwcJCgQFCQoEBQkKBAUJCgQFCQsEBQkLCQsEBQkLCQoJCgYGBgYGBgYGBgYGBgYGBgYNDwwOBAUGBgwODA4AAAAAABAPAAAAAAAAAwYAAAgAAAAREg4PEBALCwgICAcFCAcICAgICAgICAgICAgICAgICAgHCAgHCAgICAgICQcKCAoICggKCAoICAcIBwgHCAcIBwcECQgJCAkICQgJCAkIBAIEAggHCAcIBwcCBwIHAgcCCgwKDAoMCQgJCAkICQgKCAoICggKCAgICAgJBQkFCQUJBQgGCAYIBggGCAYIBQgFCAUIBQkICQgJCAkICQgICAgIDgoOCggICAgICAgGCAYIBggFCggHBAgICAgICAgICAgKCgkJCQkGBgYGBgYJCQsLCwsICAgICAgICAoKDQ0MDAwMAgICAgICAgIGBgkJCAgJCQgICAgICAoLDQ0MDAgICAgICAgICgwMDAoKCgoKCgoKCgsNDQwMDQ0ICAYGCAgCAggICAgKCggICAgICAgICAgKCgkJCQkICAgICAgICAoKDQ0MDAwMCgoKCgoKCgoKCw0NDAwNDQgICAgICAgICAgICAUIBQgICAgICAgKCQsLCQUFCAICAgICAgQEBwcFBQgICAgICAgICAgICwoJCAgICgoKCgoLCgsKCggFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQgJCAgHCggHBgcGBwgAAA8VDwAFBQQGCwgPCgMGBggLBQUFBggICAgICAgICAgFBQsLCwcOCQkJCggICgoGBgkHDAoLCAsJCAoKCQ4JCggGBgYLCAgICAcICAUICAIEBwINCAgICAUHBQgICggIBwcGBwsJCQkICgsKCAgICAgIBwgICAgCAgICCAgICAgICAgICAgHCAgIBwgIDg4NCAgLDgsOCwsLCAkICgoICAcHCw0JBwQLCwgLCQkJDAkJCw8OCA4GBgMDCwsICgYIBgYICAgFAwYVCQgJCAgGBgYGCwsLCgoKAggICAgICAgICAgIBAgHCAcGCggKCAgICwsHBwcPDw8ICggGCAcJBwkHCQgFCQgJCAoKCggICAgHAgcFBwcKCAoICwgJBQkFCAcKBQoHCggKCAgHCAcICwoICAcJBwsICAcOCwgKBAcPBQkFBQkFCQgJBwkHCAgICAgICggKCAoICggLCQYCBgIGAgYCBgQJBwcHAgoICggLCAsICQUIBwoFCggKCAoICggOCgoIBAkIDg0LCQUOCg4KDgoKCAMICAoPDw8PAwgICAkKDAcMDA0CCQkJCAgKBgkJDAoJCwoICAoKCQwLBgoIBwgCCAgIBggIAgcHCQgHCAgGCAgKCgIICAgKCAsICQgGBgYPDwsJCQoJCQkICggOCAoKCQoMCgsKCAkKCQoJCgoODwoMCQkOCQgICAYICAwHCAgHCAoICAgIBwgIDAgJCAwNCQoIBwsICAkGBwcCAgQMDAkHCAgIBg4RCAgPDw8PDw8PDw8PCwgLCQAAAAAICAgICAgICAgICAgICAgJCAkICQgJCAkICQgJCAkICQgJCAkICQgICAgICAgICAgICAgICAgIBgIGAgAADw8ICAgICAgICAgICAgIBggDCAgFCgoHCQoEBQoKBAkJCQoKBgYLCgoKBwkKCQwLCAgIAwYNBAkJCQkKDAwMDAoKCgoHCQoEBgoECQkJCgYLCgoJCgkMCwQKCQoLAAAAAAUFBwYEBAYEBAQEBQMJCQkJCQkJCQkJCQUIBgUHBQkJCQUFBQUEBQ8IDw4GBAgECA4PDgwOBAUNDQwNCQsKCgUGDg8HCA4PBwgNDw8PDw8PDw8PDw8PDw8PDw8FBQUFBQsICwgLCAsICwgLCAsICwgLCAsICwgLCAoICggLCQsJCwkLCQsJCggKCAoICggJAAYGDw8GBAQEBAYHBAQNDwQFBAQMDgQFBwkMDgQFDA4EBQkLCgoJCwoKCQsKCgcIBwgFBgUGEhMPEBITDxAREQwNEREMDQoLCgsKCwoLCQkJBwkJCQcNDgYIDQ0GCAsMBwgKCwQFCQoICQoLBAUHCQoIBgcNDw0PBAUJCwkLCQsJCwcHCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBwoFCAgICgMJCQoJCQoHCAkJCg0MCQkIDA0NCQkJCwgJCQkJCQsKCQkJBgkJCQcJCwkKCwkJCAcABwcAAAAAAAAACQUJBwcIBwcAAAAAAAAAAAkJCQoKCwsKDAwLChAJAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAADBgQGBgIECAYOCwoICQcKCQoHCQcJCAoICggLCAsIAAAAAAAABQwOBAUHCAUGCgsIBAcICA4ODg4EBwAAAAgJCQkNChEOCQkPBAQFBQMNBAQEBAQEBAQEBAQGBwYHDQ8MDgQFDA4EBQwOBAUMDgQFDA4EBQwOBAUJCwoKCQsKCgkLCgoJCwoKCQsKCgkLCgoHCAcIBwgHCAcIBwgHCAUGBQYFBgUGBQYFBgUGEhMPEBITDxASEw8QEREMDRERDA0KCwkJCQcNDgYIDQ4GCA0OBggNDgYIDQ0NDRAQEBAODwcICwwHCAsMBwgLDAcIDg8HCA4PBwgODwcIDg8HCA4PBwgKCwQFCgsEBQoLBAUKCwQFCgsEBQoLCgsEBQoLCQsKCgYHBgcGBwYHBgcGBwYHBgcOEA0PBAUGBw0PDQ8AAAAAABEQAAAAAAAAAwYAAAkAAAASEw8QEREMDQkJCQcGCQcICAgICAgICAgICAgICAgICAgICAkICQgJCAkICQcKCAoICggKCAoICAgICAgICAgICAgFCggKCAoICggKCAoIBgIGAgkHCQcJBwcCBwIHAgcCDA0MDQwNCggKCAoICggLCAsICwgLCAgICAgJBQkFCQUJBQgHCAcIBwgHCAcKBQoFCgUKBQoICggKCAoICggJCAkIDgoOCgkICQgKCAgHCAcIBwgFCggIBAgICAgICAgICQkLCwsLCgoHBwcHBwcJCQwMCwsICAgICAgICAsLDQ0NDQ0NAgICAgICAgIHBwkJCQkJCQgICAgICAsMDg4NDQgICAgICAgICw0NDQoKCgoKCgoKCwwODg0NDg4ICAcHCAgCAggICAgKCggICAgICAgICQkLCwoKCgoICAgICAgICAsLDQ0NDQ0NCgoKCgoKCgoLCw4ODQ0ODggICAgICAgJCQkJCQUIBQgICAgICAgKCgwLCgUFCAICAgICAgYGCAcFBQgICAgICAgICAoKDAsJCAgICgoKCgoMCwwLCwgFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACggKCAkHCwgIBwgHCAgAABAWEAAFBQQGDAkQCwMGBgkMBQYFBgkJCQkJCQkJCQkGBgwMDAgPCwkKCwkICwsGBwkIDAsMCQwKCQoLCg4JCgkGBgYMCQkICQcJCAUJCQQFCAQOCQkJCQYHBQkIDAgIBwgGCAwLCwoJCwwLCAgICAgIBwgICAgEBAQECQkJCQkJCQkJCQkICQkJBwkJDw8OCQkMDwwPDAwMCQkJCgsJCQgICw4JCAQMDAkMCgkJDQsLDBAPCQ8GBgMDDAwICgcJBgYJCAkFAwYWCwkLCQkGBgYGDAwMCwsLBAkJCQkJCQkJCQkIBAkHCQcGCwkKCAkJDAwICAgQEBAJCwkGCQcKBwoHCQkGCwgLCAsLCwkICQgIBAgGCAcLCQsJDAkKBgoGCQcKBQoICwkLCQkHCQcIDAwJCQcJCAwJCQgPDAgLBQgQBQoGBgoGCwgKBwoHCQgJCAkICwkLCQsJCwkLCQYEBgQGBAYEBwUJCAgIBAsJCwkMCQwJCgYJBwoFCwkLCQsJCwkODAoIBAsIDw4MCQYODA4MDgwKCAMJCQoQEBAQAwkJCQsLDQgODA0ECwkKCQkLBgkLDAsJDAsJCQoKCQwLBgoJBwkECQkIBgkJBAgICQgHCQkHCQgMDAQJCQkMCQwICgkGBgcQEAsKCQsLCQkICwkOCQsLCgsMCwwLCQoKCQwJCwoODwsNCQoPCggJCAcJCAwHCQkICQoJCQkJBwgIDAgJCQwNCQsICAwICAkHCAcEBAUNDQkICAkIBw8SCQkQEBAQEBAQEBAQDAkMCgAAAAAJCQkJCQkJCQkJCQkJCQkLCAsICwgLCAsICwgLCAsICwgLCAsICwgJCAkICQgJCAkICQgJCAkIBgQGBAAAEBAICAgICAgICAgICAgIBggECAgGCwoICgsEBQsLBAoKCgsLBgYMCgoKCAkLCQ0LCQkJAwYNBAoKCgoKDQ0NDQsLCwoICgsEBgsECgoKCwYMCgoJCwkNCwQKCgoMAAAAAAYGCAYEBAYEBAQEBQMJCQkJCQkJCQkJCQYJBwYIBgkJCQUFBQUEBRAIEA8HBAgECA8QDw0PBAYODg0OCgsLCwYHDw8ICQ8PCAkOEBAQEBAQEBAQEBAQEBAQEBAFBQUFBQwJDAkMCQwJDAkMCQwJDAkMCQwJDAkMCQsJCwkMCgwKDAoMCgwKCggKCAoICggJAAYGEBAGBAUEBQcHBAUOEAQGBAUNDwQGCAkNDwQGDQ8EBgoLCwsKCwsLCgsLCwcJBwkGBwYHExUQERMVEBESEwwMEhMMDAsLCwsLCwsLCgkJCAoJCQgODwcIDg4HCAwNCAkKDAUGCQsICgsMBAYICQsJBwcOEA4QBAYKCwoLCgsKCwgICQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJBwoFCAkJCwMJCgoKCgsICQoKCw4NCgoJDQ4OCgoJCwkKCgoKCgsLCgoJBwkKCggKDAoKCwoKCAcACAgAAAAAAAAACQUJCAcICAgAAAAAAAAAAAoKCgsLDAwKDAwLCxEJAAAAAAAAAAAAAAAAAAANAAAAAAAAAAAAAAADBgQGBwQFCAcPDAoICggLCQoICQgKCAoJCgkLCAsJAAAAAAAABQ0PBAYHCQYHCwwIBAgICA8PDw8ECAAAAAkJCgoNCxIOCQkQBAQFBQMOBQQEBAUEBQQFBAUHBwcHDhANDwQGDQ8EBg0PBAYNDwQGDQ8EBg0PBAYKCwsLCgsLCwoLCwsKCwsLCgsLCwoLCwsHCQcJBwkHCQcJBwkHCQYHBgcGBwYHBgcGBwYHExUQERMVEBETFRAREhMMDBITDAwLCwoJCQgODwcIDg8HCA4PBwgODwcIDg4ODhEREREPDwgJDA0ICQwNCAkMDQgJDw8ICQ8PCAkPDwgJDw8ICQ8PCAkKDAUGCgwFBgoMBQYKDAUGCwwEBgsMCwwEBgsMCgsLCwcHBwcHBwcHBwcHBwcHBwcPEQ4QBAYHBw4QDhAAAAAAABIRAAAAAAAABAcAAAoAAAATFRAREhMMDAoJCQgGCQcJCQkJCQkJCQkJCQkJCQkJCQkICQsICQkJCQkJCgcLCQsJCwkLCQsJCQgJCAkICQgJCAgFCwkLCQsJCwkLCQsJBgQGBAkICQgJCAgECAQIBAgEDA4MDgwOCwkLCQsJCwkMCQwJDAkMCQkJCQkKBgoGCgYKBgkHCQcJBwkHCQcKBQoFCgUKBQsJCwkLCQsJCwkKCAoIDgwODAkICQgKCAkHCQcJBwkFDAgIBAkJCQkJCQkJCwsNDQwMDAwHBwcHBwcKCg0NDQ0JCQkJCQkJCQwMDw8PDw8PBAQEBAQEBAQHBwoKCQkKCgkJCQkJCQwNEBAPDwkJCQkJCQkJCw4ODgwMDAwMDAwMCwwPDw4ODw8JCQcHCQkEBAkJCQkMDAkJCQkJCQkJCwsLCwoKCwsJCQkJCQkJCQwMDg4ODg4ODAwMDAwMDAwLDA8PDg4PDwkJCQkJCQkLCwsLCwYJBgkJCQkJCQkLCg0MCwYGCQQEBAQEBAYGCAgGBgkJCQkJCQkJCQoKDAwKCQkJDAwMDAwODA0LCwkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwkLCQkIDAkJBwkHCAkAABEYEQAFBQYHDAkRCwQHBwkMBQYFBwkJCQkJCQkJCQkGBgwMDAgPCwoKDAoJCwsGBwoIDQsMCQwLCQoLCg8KCgoHBwcMCQkJCQgJCQUJCQQFCAQOCQkJCQYIBgkIDQgICAgHCAwLCwoKCwwLCQkJCQkJCAkJCQkEBAQECQkJCQkJCQkJCQkICQkJCAkJEBAPCQkMEAwPDAwMCQoJCwwKCQgIDA8JCAYMDAkMCwoKDgsLDBEPCQ8HBwQEDAwICgcJBwcJCQkFBAcYCwoLCgoGBgYGDAwMCwsLBAkJCQkJCQkJCQkJBQkICggHDAkKCAoJDAwICAgREREJCwkGCQgKCAoICgkGCwkLCQwMDAoJCgkIBAgGCAgLCQsJDAkLBgsGCQgKBgoICwkLCQoICggJDA0JCQgKCAwJCggQDAkMBQgRBgoGBgoGCwkKCAoICgkKCQoJCwkLCQsJCwkMCgYEBgQGBAYEBwUKCAgIBAsJCwkMCQwJCwYJCAoGCwkLCQsJCwkPDQoIBAsJEA8MCQYPDQ8NDw0KCAQJCQsRERERBAkJCQsNDggODA4ECwoLCgoLBgoLDQsKDAsJCQoKCg0MBgoJCAkECQkIBwkJBAgICggHCQkHCQgMDQQJCQkNCgwJCgkGBgcREQwKCgsLCgoJDAoPCQsLCgwNCwwLCQoKCg0KDAsQEAwNCgoQCgkJCQcJCQwICgoICQsKCQoJCAgIDQgKCQ0NCgwJCA0JCQoHCAgEBAUODgoICAoJBw8TCgkRERERERERERERDQkMCgAAAAAJCQkJCQkJCQkJCQkJCQkLCQsJCwkLCQsJCwkLCQsJCwkLCQsJCwkKCQoJCgkKCQoJCgkKCQoJBgQGBAAAEREJCQkJCQkJCQkJCQkJBwkECQkGCwsICgsEBQsLBAoKCwsLBgcMCwsLCAoLCg4MCQkJBAcOBAoKCwsLDg4ODgsLCwsICgsEBgsECgoLCwcMCwsKCwoODAQLCgsMAAAAAAYGCAYEBQYFBQQFBQMKCgoKCgoKCgoKCgYJBwYIBgoKCgUFBQUFBREJEQ8HBAkECRARDw4QBQYPDw4PCgwLDAYHEBAICRAQCAkPEREREREREREREREREREREREFBQUFBQwJDAkMCQwJDAkMCQwJDQkNCQ0JDQkNCQsJCwkMCgwKDAoMCgwKCggKCAoICggKAAcHEREGBAUEBQcIBAUPEQUGBAUOEAUGCAoOEAUGDhAFBgoMCwwKDAsMCgwLDAgJCAkGBwYHFRYREhUWERIUFA0NFBQNDQsMCwwLDAsMCgoKCAoKCggPDwcJDw8HCQwOCAkLDAUGCgwJCgsNBQYICgsJBwgPEQ8RBQYKDAoMCgwKDAgICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCAoGCQoKCwMKCgsKCgsICQsLDA8OCwsJDg8PCgoKDAkKCwsLCwwMCwoKBwoKCwgKDQoLDAoKCQgACAgAAAAAAAAACgYKCAgJCAgAAAAAAAAAAAoKCwwMDAwLDQ0MDBIKAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAEBwUGBwQFCQcQDQsJCggMCgoICggKCQsJCwkMCQwJAAAAAAAABQ4QBQYICQYHCw0JBQgJCRAQEBAECAAAAAkKCgoOCxMPCgoRBAQFBQQPBQQEBAUEBQQFBAUHCAcIDxEOEAUGDhAFBg4QBQYOEAUGDhAFBg4QBQYKDAsMCgwLDAoMCwwKDAsMCgwLDAoMCwwICQgJCAkICQgJCAkICQYHBgcGBwYHBgcGBwYHFRYREhUWERIVFhESFBQNDRQUDQ0LDAoKCggPDwcJDw8HCQ8PBwkPDwcJDw8PDxISEhIQEAgJDA4ICQwOCAkMDggJEBAICRAQCAkQEAgJEBAICRAQCAkLDAUGCwwFBgsMBQYLDAUGCw0FBgsNCw0FBgsNCgwLDAcIBwgHCAcIBwgHCAcIBwgQEg8RBQYHCA8RDxEAAAAAABMSAAAAAAAABAcAAAoAAAAVFhESFBQNDQoKCggGCggJCQkJCQkJCQkJCQkJCQkJCQoJCQsJCgkKCQoJCggMCQwJDAkMCQwJCgkKCQoJCgkKCQkFCwkLCQsJCwkLCQsJBgQGBAoICggKCAgECAQIBAgEDQ4NDg0OCwkLCQsJCwkMCQwJDAkMCQkJCQkLBgsGCwYLBgkICQgJCAkICQgKBgoGCgYKBgsJCwkLCQsJCwkKCAoIDw0PDQoICggKCAoICggKCAkGDQgJBAkJCQkJCQkJCwsNDQwMCwsICAgICAgLCw4ODg4JCQkJCQkJCQ0NDw8PDw8PBAQEBAQEBAQICAsLCgoKCgkJCQkJCQwNEBAPDwkJCQkJCQkJDA8PDw0NDQ0NDQ0NDA0QEA8PDw8JCQgICQkEBAkJCQkNDQkJCQkJCQkJCwsMDAsLCwsJCQkJCQkJCQ0NDw8PDw8PDQ0NDQ0NDQ0MDRAQDw8PDwkJCQkJCQkLCwsLCwYJBgkJCQkJCQkMCw4NCwYGCQQEBAQEBAYGCQgGBgkJCQkJCQkJCQoKDQ0KCQkJDQ0NDQ0ODA4MDAkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwkLCQoIDAkJCAkICQkAABIZEgAGBgYHDQoSDAQHBwoNBQcFBwoKCgoKCgoKCgoGBg0NDQkQCwsLDAoJDAwHCAsJDgwNCg0LCgsMCxAKCgoHBwcNCgoJCggKCQYKCgQFCQQPCgoKCgYIBgoJDQkJCAkHCQ0LCwsKDA0MCQkJCQkJCAkJCQkEBAQECgoKCgoKCgoKCgoICgoKCAoKEREQCgoNEA0QDQ0NCgoKCwwKCgkJDRAKCQYNDQoNCwoKDwsLDRIQChAHBwQEDQ0JCggKBwcKCgoFBAcZCwoLCgoHBwcHDQ0NDAwMBAoKCgoKCgoKCgoJBQoICggHDQoKCQoKDQ0JCQkSEhIKDAoHCggLCAsICgoGCwkLCQwMDQoJCgkJBAkHCQgMCgwKDQoLBgsGCggLBgsIDAoMCgoICggJDQ0KCggKCA0KCgkRDQkMBQkSBgsGBgsGCwkLCAsICgkKCQoJDAoMCgwKDAoNCgcEBwQHBAcECAULCQkJBAwKDAoNCg0KCwYKCAsGDAoMCgwKDAoQDQoJBQsJEBANCgYQDRANEA0KCQQKCgsSEhISBAoKCgsMDgkODQ4ECwsLCgoMBwsLDgwKDQwKCgsKCg4NBwoKCAoECgoJBwoKBAkJCgkICgoICgkNDQQKCgoNCg0JCwoHBwgSEg0LCgwLCwsJDAoQCgwMCwwODA0MCgsLCg0KDAsREQwOCgsRCwkKCQcKCQ0ICgoJCgwKCgoKCAgJDgkKCg4OCgwJCA4KCQoHCAgEBAUPDwoJCQoJBxAVCgoSEhISEhISEhISDgoNCwAAAAAKCgoKCgoKCgoKCgoKCgoLCQsJCwkLCQsJCwkLCQsJCwkLCQsJCwkKCQoJCgkKCQoJCgkKCQoJBwQHBAAAEhIJCQkJCQkJCQkJCQkJBwkECQkGDAwICwwFBgwNBQsLCwwMBwcNDAwMCQsMCg8MCgoKBAcPBQsLCwsMDw8PDwwMDAwICwwFBg0FCwsLDAcNDAwLDAoPDAUMCwwMAAAAAAYGCQcFBQYFBQQFBQMKCgoKCgoKCgoKCgYKBwYIBgoKCgUFBQUFBRIJEhAHBQkFCRESEA8RBQYQEA8QCw0MDAcIEREJChERCQoQEhISEhISEhISEhISEhISEhIFBQUFBQ0KDQoNCg0KDQoNCg0KDgoOCg4KDgoOCgwKDAoNCw0LDQsNCw0LCgkKCQoJCgkKAAcHEhEHBAUEBQgIBAUQEgUGBAUPEQUGCAoPEQUGDxEFBgsNDAwLDQwMCw0MDAgKCAoHCAcIFhcSExYXEhMVFQ4OFRUODgwNDA0MDQwNCwsLCQsLCwkQEAcJEBAHCQ0OCQoMDQUGCwwJCwwOBQYICgwKCAgQEhASBQYLDQsNCw0LDQgICgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCAsGCQoKDAMLCwwLCwwJCgsLDBAPCwsKDxAPCwsLDQoLCwsLCw0NCwsKCAoLCwkLDQsMDQsLCggACQkAAAAAAAAACwYLCQgJCQkAAAAAAAAAAAsLCwwMDQ0MDg4NDBMKAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAEBwUHCAQFCQcRDgsJCwkMCgoJCgkLCQsKCwoNCQ0KAAAAAAAABQ8RBQYICgcIDA4JBQkJCRAQEBAFCAAAAAoKCwsPDBUQCwsSBQUFBQQQBQUFBAUEBQQFBAUICAgIEBIPEQUGDxEFBg8RBQYPEQUGDxEFBg8RBQYLDQwMCw0MDAsNDAwLDQwMCw0MDAsNDAwICggKCAoICggKCAoICgcIBwgHCAcIBwgHCAcIFhcSExYXEhMWFxITFRUODhUVDg4MDQsLCwkQEAcJEBAHCRAQBwkQEAcJEBAQEBQUFBQREQkKDQ4JCg0OCQoNDgkKEREJChERCQoREQkKEREJChERCQoMDQUGDA0FBgwNBQYMDQUGDA4FBgwODA4FBgwOCw0MDAgICAgICAgICAgICAgICAgRExASBQYICBASEBIAAAAAABQUAAAAAAAABAcAAAsAAAAWFxITFRUODgsLCwkHCwgKCgoKCgoKCgoKCgoKCgoKCgoJCgsJCwoLCgsKCwgMCgwKDAoMCgwKCgkKCQoJCgkKCQkGDAoMCgwKDAoMCgwKBwQHBAsJCwkLCQkECQQJBAkEDg8ODw4PDAoMCgwKDAoNCg0KDQoNCgoKCgoLBgsGCwYLBgoICggKCAoICggLBgsGCwYLBgwKDAoMCgwKDAoLCQsJEA0QDQoJCgkKCQoICggKCAoGDQkJBQoKCgoKCgoKCwsNDQwMDAwICAgICAgLCw4ODg4KCgoKCgoKCg0NEBAQEBAQBAQEBAQEBAQICAsLCwsLCwoKCgoKCg0OEREPDwoKCgoKCgoKDQ8PDw0NDQ0NDQ0NDQ4REQ8PEBAKCggICgoEBAoKCgoNDQoKCgoKCgoKCwsNDQwMDAwKCgoKCgoKCg0NEBAQEBAQDQ0NDQ0NDQ0NDhERDw8QEAoKCgoKCgoLCwsLCwYKBgoKCgoKCgoMDA4ODAYGCgQEBAQEBAcHCQkGBgoKCgoKCgoKCgoKDg0LCgoKDQ0NDQ0PDQ4NDQoGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAoMCgsJDQoKCAoICQoAABMaEwAGBgYIDgoTDQQHBwoOBgcGBwoKCgoKCgoKCgoHBw4ODgkRCwsLDQsKDQ0HCAsJDw0NCg0MCwsMCxELCwsHBwcOCgoKCwkLCgYLCwQFCQQQCwoLCwcIBgsJDgkJCAkHCQ4LCwsLDQ0MCgoKCgoKCQoKCgoEBAQECwoKCgoKCwsLCwoJCgoKCQoKEhIRCgoOEQ0RDg4OCgsKDA0LCgkJDREKCQYODgoODAsLEAsLDRMRChEICAQEDg4JCwgKBwcKCgoGBAgaCwsLCwsHBwcHDQ0NDAwMBAoKCgoKCgoKCgoKBQsICwgHDQoLCQsLDg4JCQkTExMKDQsHCwgLCQsJCwoHCwoLCg0NDQsKCwoJBAkHCQgNCw0LDQoMBwwHCwgLBgsJDAsMCwsICwgKDQ4LCgkLCQ0KCwkSDgoNBgkTBgsHBwsHCwoLCQsJCwoLCgsKDQsNCw0LDQsOCwcEBwQHBAcECAULCQkJBA0LDQsNCg0KDAcLCAsGDAsMCwwLDAsRDgsJBQsKERENCgcRDhEOEQ4LCQQKCgwTExMTBAoKCgsNDwkPDg8ECwsMCwsNBwsLDw0LDQ0KCwsLCw8NBwsLCQsECwsJBwsLBAkJCwkICgoICwkODgQLCgsOCw4KCwsHBwgTEw4LCw0LCwsKDQsRCg0NCw0PDQ0NCgsLCw4LDQwSEg0PCwsSDAoKCggLCg4JCwsJCwwLCgsLCQkJDgkLCg8PCw0KCQ4KCgsICQgEBAUQEAsJCQsKCBEWCwoTExMTExMTExMTDgoODAAAAAAKCgoKCgoKCgoKCgoKCgoLCgsKCwoLCgsKCwoLCgsKCwoLCgsKCwoLCgsKCwoLCgsKCwoLCgsKBwQHBAAAExMKCgoKCgoKCgoKCgoKBwoECgoHDQwJCw0FBg0NBQwMDA0NBwgODA0MCQsNCxANCgoKBAgQBQwMDAwMEBAQEA0NDQwJCw0FBw0FDAwMDQgODQwLDQsQDQUMDAwNAAAAAAcHCQcFBQYFBQQFBQQLCwsLCwsLCwsLCwcKCAcJBwsLCwUFBQUFBRMKExEIBQoFChITEQ8SBQcREQ8RDA0NDQcIEhIJChISCQoRExMTExMTExMTExMTExMTExMFBQUFBQ0KDQoNCg0KDQoNCg0KDgoOCg4KDgoOCgwLDAsODA4MDgwODA4MCwkLCQsJCwkLAAcHExIHBQYFBggIBQYREwUHBQYPEgUHCQsPEgUHDxIFBwwNDQ0MDQ0NDA0NDQkKCQoHCAcIFxkTFBcZExQWFg4PFhYODw0NDQ0NDQ0NDAsLCQwLCwkREQgKEREICg4PCQoMDgUHCw0KDA0OBQcJCw0KCAgRExETBQcMDQwNDA0MDQkJCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALCAsGCgsLDQMLDAwMDA0JCwwMDRAQDAwLDxEQDAwLDgoMDAwMDA0NDAsLCAsMDAkMDgwNDgsLCgkACQkAAAAAAAAACwYLCQgKCQkAAAAAAAAAAAsLDA0NDg4MDw8ODRQLAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAEBwUHCAQFCggSDgwKCwkNCwsJCwkMCgwKDAsNCg0KAAAAAAAABg8SBQcJCgcIDQ4KBQkKChEREREFCQAAAAsLCwsQDRYRCwsTBQUGBgQRBgUFBQYFBgUGBQYICAgIERMPEgUHDxIFBw8SBQcPEgUHDxIFBw8SBQcMDQ0NDA0NDQwNDQ0MDQ0NDA0NDQwNDQ0JCgkKCQoJCgkKCQoJCgcIBwgHCAcIBwgHCAcIFxkTFBcZExQXGRMUFhYODxYWDg8NDQwLCwkREQgKEREIChERCAoREQgKERERERUVFRUSEgkKDg8JCg4PCQoODwkKEhIJChISCQoSEgkKEhIJChISCQoMDgUHDA4FBwwOBQcMDgUHDQ4FBw0ODQ4FBw0ODA0NDQgICAgICAgICAgICAgICAgSFBETBQcICBETERMAAAAAABUVAAAAAAAABAgAAAsAAAAXGRMUFhYODwwLCwkHCwkKCgoKCgoKCgoKCgoKCgoKCgsKCgsKCwsLCwsLCwkNCw0LDQsNCw0LCwoLCgsKCwoLCgoGDQsNCw0LDQsNCw0LBwQHBAsJCwkLCQkECQQJBAkEDxAPEA8QDQsNCw0LDQsNCg0KDQoNCgoLCgsMBwwHDAcMBwsICwgLCAsICwgLBgsGCwYLBgwLDAsMCwwLDAsLCQsJEQ4RDgsJCwkLCQsICwgLCAsGDgkKBQsLCwsLCwsLCwsNDQwMDQ0JCQkJCQkMDA8PDg4LCwsLCwsLCw4OERERERERBAQEBAQEBAQJCQwMCwsMDAoKCgoKCg0OEhIQEAsLCwsLCwsLDRAQEA4ODg4ODg4ODQ4SEhAQERELCwkJCwsEBAoKCwsODgsLCwsLCwsLCwsNDQwMDQ0LCwsLCwsLCw4OERERERERDg4ODg4ODg4NDhISEBAREQsLCwsLCwsLCwsLCwcKBwoKCwsLCwsNDA8ODQcHCgQEBAQEBAcHCgkHBwoLCwsLCgoLCwsLDg4MCgoKDg4ODg4PDQ8NDQoHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQsNCwsJDQoKCAoICgoAABQcFAAGBgcIDwsUDQQICAsPBgcGCAsLCwsLCwsLCwsHBw8PDwkSDAwMDgsKDQ4HCAwKDw0OCw4MCwwNDBIMDAsICAgPCwsLCwkLCwYLCwUGCgURCwsLCwcJBwsKDwoKCQoICg8MDAwLDQ4NCwsLCwsLCQsLCwsFBQUFCwsLCwsLCwsLCwsJCwsLCQsLExMSCwsPEg4SDw8PCwsLDQ4LCwoKDhILCQcPDwsPDAsLEAwMDhQSCxIICAQEDw8KDAkLCAgLCwsGBAgcDAsMCwsHBwcHDg4ODQ0NBQsLCwsLCwsLCwsKBQsJCwkIDgsMCgsLDw8KCgoUFBQLDQsHCwkMCQwJCwsHDAsMCw4ODgsLCwsKBQoHCgkNCw0LDgsMBwwHCwkMBwwJDQsNCwsJCwkKDg8LCwkMCQ4LCwoTDwoOBgoUBgwHBwwHDAsMCQwJCwsLCwsLDQsNCw0LDgsODAcFBwUHBQcFCAYMCgoKBQ0LDQsOCw4LDAcLCQwHDQsNCw0LDQsSDwwKBQwLEhIOCwcSDxIPEg8MCgQLCw0UFBQUBAsLCwwOEAoQDhAFDAwMCwsOBwwMDw0LDg4LCwwMDBAOBwwLCQsFCwsKCAsLBQoKCwoJCwsJCwoODwULCwsPCw4KDAsHBwgUFA4MDA4MDAwKDgsSCw0NDA4PDg4OCwwMDA8MDg0TEw4QDAwTDAsLCggLCw8JCwsKCw0LCwsLCQkKDwoLCxAQCw4KCQ8LCwwICQkFBQYREAwKCgsKCBIXCwsUFBQUFBQUFBQUDwsODAAAAAALCwsLCwsLCwsLCwsLCwsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsLCwsLCwsLCwsLCwsLCwsLBwUHBQAAFBQKCgoKCgoKCgoKCgoKCAoFCgoHDQ0JDA4FBg4OBQwMDA4OBwgPDQ0NCgwOCxAOCwsLBAgRBQwMDAwNEBAQEA0NDQ0JDA4FBw4FDAwMDggPDQ0MDgsQDgUNDA0OAAAAAAcHCQgFBgcGBgQGBQQLCwsLCwsLCwsLCwcLCAcJBwsLCwUFBQUGBxQKFBIIBQoFChMUEhATBgcREhARDA4NDgcIEhMKCxITCgsRFBQUFBQUFBQUFBQUFBQUFBQHBwcHBw4LDgsOCw4LDgsOCw4LDwsPCw8LDwsPCw0LDQsODA4MDgwODA4MDAoMCgwKDAoLAAgIFBMIBQYFBggJBQYRFAYHBQYQEwYHCQsQEwYHEBMGBwwODQ4MDg0ODA4NDgkLCQsHCAcIGBoUFRgaFBUXFw8PFxcPDw0ODQ4NDg0ODAwMCgwMDAoREggKERIICg8QCgsNDgYHDA4KDA0PBgcJCw0LCAkRFBEUBgcMDgwODA4MDgkJCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALCQwHCwsLDQMMDA0MDA0KCwwNDhERDAwLEBERDAwMDgsMDQ0NDQ4ODAwMCQsMDAoMDwwNDgwMCwkACgoAAAAAAAAADAcMCgkKCgoAAAAAAAAAAAwMDQ4ODw8NDw8ODhUMAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAECAYHCAUGCggTDw0KDAoODAwKDAoMCg0LDQsOCw4LAAAAAAAABhATBgcJCwcIDQ8KBgoKChISEhIFCQAAAAsMDAwRDRcSDAwUBQUGBgQRBgUFBQYFBgUGBQYICQgJERQQEwYHEBMGBxATBgcQEwYHEBMGBxATBgcMDg0ODA4NDgwODQ4MDg0ODA4NDgwODQ4JCwkLCQsJCwkLCQsJCwcIBwgHCAcIBwgHCAcIGBoUFRgaFBUYGhQVFxcPDxcXDw8NDgwMDAoREggKERIIChESCAoREggKERIREhYWFhYSEwoLDxAKCw8QCgsPEAoLEhMKCxITCgsSEwoLEhMKCxITCgsNDgYHDQ4GBw0OBgcNDgYHDQ8GBw0PDQ8GBw0PDA4NDggJCAkICQgJCAkICQgJCAkSFREUBgcICREUERQAAAAAABYWAAAAAAAABQgAAAwAAAAYGhQVFxcPDwwMDAoIDAkLCwsLCwsLCwsLCwsLCwsLCwsLCwwLDAsMCwwLDAkOCw4LDgsOCw4LCwsLCwsLCwsLCwoGDQsOCw4LDgsOCw4LBwUHBQwKDAoMCgoFCgUKBQoFDxEPEQ8RDQsNCw0LDQsOCw4LDgsOCwsLCwsMBwwHDAcMBwsJCwkLCQsJCwkMBwwHDAcMBw0LDQsNCw0LDQsMCgwKEg8SDwwKDAoMCgsJCwkLCQsHDwoLBQsLCwsLCwsLDAwODg0NDQ0JCQkJCQkMDBAQDw8LCwsLCwsLCw8PEhIRERISBQUFBQUFBQUJCQwMDAwMDAsLCwsLCw4PExMREQsLCwsLCwsLDhEREQ8PDw8PDw8PDg8SEhEREhILCwkJCwsFBQsLCwsPDwsLCwsLCwsLDAwODg0NDQ0LCwsLCwsLCw8PEhIRERISDw8PDw8PDw8ODxISERESEgsLCwsLCwsMDAwMDAcLBwsLCwsLCwsODRAPDgcHCwUFBQUFBQcHCgoHBwsLCwsLCwsLCwwMDw8MCwsLDw8PDw8QDhAODgsHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQsNCwwKDgsLCQsJCgsAABUdFQAHBwcIDwsVDgQICAsPBggGCAsLCwsLCwsLCwsHBw8PDwoTDQ0NDgwLDg4ICQwKEA4PDA8NDAwODRMMDAwICAgPCwsLDAoMCwcMDAUGCgUSDAsMDAgJBwwKEAoKCQoICg8NDQ0MDg8OCwsLCwsLCgsLCwsFBQUFDAsLCwsLDAwMDAsKCwsLCgsMFBQSCwsPEw8TDw8PCwwLDQ4MCwoKDxILCgcPDwsPDQwMEQ0NDxUTCxMICAQEDw8KDAkLCAgLCwsGBAgdDQwNDAwICAgIDw8PDg4OBQsLCwsLCwsLCwsLBgwJDAkIDwsMCgwMDw8KCgoVFRULDgwIDAkNCg0KDAsHDQsNCw4ODwwLDAsKBQoICgkODA4MDwsNCA0IDAkMBwwKDgwODAwJDAkLDxAMCwoMCg8LDAoUDwsPBgoVBw0HBw0HDQsNCg0KDAsMCwwLDgwODA4MDgwPDAgFCAUIBQgFCQYMCgoKBQ4MDgwPCw8LDQgMCQwHDgwODA4MDgwTEAwKBQ0LExIPCwcTEBMQExAMCgQLCw0VFRUVBAsLCw0OEQoRDxEFDQ0NDAwOCAwNEA4MDw4MDAwMDBEPCAwMCgwFDAwKCAwMBQoKDAoJCwwJDAoPDwUMCwwPDA8LDQwICAkVFQ8NDA4NDA0LDgwTCw4ODQ4QDg8ODA0MDBAMDg0UFA4RDA0UDQsMCwkMCw8KDAwKDA0MCwwMCgoKEAoMCxARDA8LChALCwwJCgkFBQYREQwKCgwLCRMYDAsVFRUVFRUVFRUVEAwPDQAAAAALCwsLCwsLCwsLCwsLCwsNCw0LDQsNCw0LDQsNCw0LDQsNCw0LDQsMCwwLDAsMCwwLDAsMCwwLCAUIBQAAFRULCwsLCwsLCwsLCwsLCAsFCwsHDg0KDQ4GBw4PBg0NDQ4OCAgPDg4OCgwODBEPDAwMBAgSBg0NDQ0OEREREQ4ODg0KDQ4GBw8GDQ0NDggPDg4MDgwRDwYNDQ4OAAAAAAcHCggFBgcGBgUGCQQMDAwMDAwMDAwMDAcLCQcKBwwMDAYHBwcGBxULFRMJBQsFCxQVExEUBgcSExESDQ8ODggJExQKCxMUCgsSFRUVFRUVFRUVFRUVFRUVFRUHBwcHBw8LDwsPCw8LDwsPCw8LEAwQDBAMEAwQDA4MDgwPDQ8NDw0PDQ8NDAoMCgwKDAoMAAgIFRQIBQYFBgkJBQYSFQYHBQYRFAYHCgwRFAYHERQGBw0PDg4NDw4ODQ8ODgoLCgsICQgJGRsVFhkbFRYYGBAQGBgQEA4PDg8ODw4PDQwMCg0MDAoSEwkLEhMJCw8RCgsODwYHDA4LDQ4QBgcKDA4MCQkSFRIVBgcNDw0PDQ8NDwoKDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCQwHCwwMDgQNDQ4NDQ4KDA0NDhIRDQ0MERISDQ0MDwsNDQ0NDQ8PDQ0MCQwNDQoNEA0ODw0NCwkACgoAAAAAAAAADQcMCgkLCgoAAAAAAAAAAA0NDQ4ODw8OEBAPDxYMAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAECAYICQUGCwkTEA0LDQoODAwKDAoNCw0LDQwPCw8LAAAAAAAABhEUBgcKCwgJDhALBgoLCxMTExMFCgAAAAwMDQ0SDhgTDAwVBQUGBgQSBgUFBQYFBgUGBQYJCQkJEhURFAYHERQGBxEUBgcRFAYHERQGBxEUBgcNDw4ODQ8ODg0PDg4NDw4ODQ8ODg0PDg4KCwoLCgsKCwoLCgsKCwgJCAkICQgJCAkICQgJGRsVFhkbFRYZGxUWGBgQEBgYEBAODw0MDAoSEwkLEhMJCxITCQsSEwkLEhMSExcXFxcTFAoLDxEKCw8RCgsPEQoLExQKCxMUCgsTFAoLExQKCxMUCgsODwYHDg8GBw4PBgcODwYHDhAGBw4QDhAGBw4QDQ8ODgkJCQkJCQkJCQkJCQkJCQkTFhIVBgcJCRIVEhUAAAAAABgXAAAAAAAABQkAAA0AAAAZGxUWGBgQEA0MDAoIDAoLCwsLCwsLCwsLCwsLCwsLCwwLCw0LDQwNDA0MDQoODA4MDgwODA4MDAsMCwwLDAsMCwsHDgwODA4MDgwODA4MCAUIBQwKDAoMCgoFCgUKBQoFEBIQEhASDgwODA4MDgwPCw8LDwsPCwwMDAwNCA0IDQgNCAwJDAkMCQwJDAkMBwwHDAcMBw4MDgwODA4MDgwNCg0KExATEAwKDAoMCgwJDAkMCQwHEAoLBQwMDAwMDAwMDQ0PDw4ODg4KCgoKCgoNDRAQEBAMDAwMDAwMDBAQExMSEhMTBQUFBQUFBQUKCg0NDQ0NDQsLCwsLCw8QExMSEgwMDAwMDAwMDxISEg8PDw8PDw8PDxATExISExMMDAoKDAwFBQsLDAwPDwwMDAwMDAwMDQ0PDw4ODg4MDAwMDAwMDBAQExMSEhMTDw8PDw8PDw8PEBMTEhITEwwMDAwMDAwNDQ0NDQcLBwsLDAwMDAwODREQDgcHCwUFBQUFBQgICwoHBwsMDAwMDAwMDAwMEA8NCwsLDw8PDw8RDxEPDwsHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgwODAwKDwsLCQsJCwwAABYfFgAHBwcJEAwVDwUICAwQBwgHCAwMDAwMDAwMDAwICBAQEAoUDQ0NDwwLDw8ICQ0LEQ8QDBAODA0ODRQNDQwICAgQDAwMDAoMDAcMDAUGCwUSDAwMDAgKBwwLEAsLCgsICxANDQ0MDxAODAwMDAwMCgwMDAwFBQUFDAwMDAwMDAwMDAwKDAwMCgwMFBQTDAwQFBAUEBAQDA0MDg8MDAsLDxMMCgcQEAwQDg0NEg0NEBUUDBQJCQUFEBALDQoMCAgMDAwHBQkfDQwNDAwICAgIEBAQDg4OBQwMDAwMDAwMDAwLBgwKDAoIDwwNCwwMEBALCwsWFhYMDwwIDAoNCg0KDQwIDQwNDA8PDwwMDAwLBQsICwoPDA8MEAwOCA4IDAoNBw0KDgwODAwKDAoLEBAMDAoNChAMDAsVEAsPBgoVBw0ICA0IDQwNCg0KDAwMDAwMDwwPDA8MDwwQDQgFCAUIBQgFCQYNCwsLBQ8MDwwQDBAMDggMCg0HDgwODA4MDgwUEA0LBg0MFBMQDAgUEBQQFBANCwUMDA4WFhYWBQwMDA0PEQsSEBIFDQ0ODAwPCA0NEQ8MEA8MDA0NDREPCA0MCgwFDAwLCQwMBQsLDQsKDAwJDAsQEAUMDAwQDBALDQwICAkWFhANDQ8NDQ0LDwwUDA8PDQ8RDxAPDA0NDRANDw4VFQ8RDQ0VDQwMDAkMDBAKDAwLDA4MDAwMCgoLEQsNDBERDQ8LChEMDA0JCgoFBQYSEg0LCwwLCRQZDAwWFhYWFhYWFhYWEQwQDQAAAAAMDAwMDAwMDAwMDAwMDAwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwMDAwMDAwMDAwMDAwMDAwMCAUIBQAAFhYLCwsLCwsLCwsLCwsLCAsFCwsIDw4KDQ8GBw8PBg4ODg8PCAkQDg8OCg0PDRIQDAwMBQkSBg4ODg4OEhISEg8PDw4KDQ8GCA8GDg4ODwkQDw4NDw0SEAYODg4PAAAAAAgICggGBgcGBgYGCQQNDQ0NDQ0NDQ0NDQgMCQgKCA0NDQgHBwcGBxYLFhQJBgsGCxUWFBIVBggTFBITDQ8PDwgJFBULDBQVCwwTFhYWFhYWFhYWFhYWFhYWFhYHBwcHBxAMEAwQDBAMEAwQDBAMEQwRDBEMEQwRDA4MDgwQDRANEA0QDRANDQsNCw0LDQsNAAgIFhUIBQcFBwkKBQcTFgYIBQcSFQYICg0SFQYIEhUGCA0PDw8NDw8PDQ8PDwoMCgwICQgJGxwWFxscFhcZGhERGRoREQ8PDw8PDw8PDQ0NCw0NDQsTFAkLExQJCxASCwwOEAYIDQ8LDQ8RBggKDQ8MCQoTFhMWBggNEA0QDRANEAoKDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCg0HDAwMDwQNDQ4ODg8LDA4ODxMSDg4MEhMTDg4NEAwNDg4ODhAPDg0NCQwODgsOEA4PEA0NDAoACwsAAAAAAAAADQcNCwoLCwsAAAAAAAAAAA0NDg8PEBAOEREQDxcNAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAAFCQYICQUGCwkUEQ4MDQsPDQ0LDQsOCw4MDgwQDBAMAAAAAAAABxIVBggKDAgJDxELBgsLCxQUFBQGCgAAAAwNDQ0SDxkUDQ0WBgYHBwUTBwYGBQcFBwUHBQcJCgkKExYSFQYIEhUGCBIVBggSFQYIEhUGCBIVBggNDw8PDQ8PDw0PDw8NDw8PDQ8PDw0PDw8KDAoMCgwKDAoMCgwKDAgJCAkICQgJCAkICQgJGxwWFxscFhcbHBYXGRoRERkaEREPDw0NDQsTFAkLExQJCxMUCQsTFAkLExQTFBgYGBgUFQsMEBILDBASCwwQEgsMFBULDBQVCwwUFQsMFBULDBQVCwwOEAYIDhAGCA4QBggOEAYIDxEGCA8RDxEGCA8RDQ8PDwkKCQoJCgkKCQoJCgkKCQoUFxMWBggJChMWExYAAAAAABkYAAAAAAAABQkAAA0AAAAbHBYXGRoREQ0NDQsIDQoMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDQwNDA0MDQoPDA8MDwwPDA8MDAwMDAwMDAwMDAsHDwwPDA8MDwwPDA8MCAUIBQ0LDQsNCwsFCwULBQsFERIREhESDwwPDA8MDwwQDBAMEAwQDAwMDAwOCA4IDggOCAwKDAoMCgwKDAoNBw0HDQcNBw4MDgwODA4MDgwNCw0LFBAUEA0LDQsNCwwKDAoMCgwHEAsMBgwMDAwMDAwMDQ0PDw4ODw8KCgoKCgoODhEREREMDAwMDAwMDBAQFBQTExQUBQUFBQUFBQUKCg4ODQ0NDQwMDAwMDBARFBQTEwwMDAwMDAwMEBMTExAQEBAQEBAQDxEUFBMTFBQMDAoKDAwFBQwMDAwQEAwMDAwMDAwMDQ0PDw4ODw8MDAwMDAwMDBAQFBQTExQUEBAQEBAQEBAPERQUExMUFAwMDAwMDAwNDQ0NDQgMCAwMDAwMDAwPDhERDwgIDAUFBQUFBQgICwsICAwMDAwMDAwMDA0NERAODAwMEBAQEBASEBIPDwwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwwPDA0LEAwMCgwKCwwAABcgFwAHBwgJEQ0WEAUJCQ0RBwgHCQ0NDQ0NDQ0NDQ0ICBEREQsVDg4OEA0MDxAJCg4LEg8QDRAODQ0PDhUNDQ0JCQkRDQ0MDQsNDAcNDQUGCwUTDQwNDQgKCA0LEQsLCgsJCxEODg4NDxAPDAwMDAwMCwwMDAwFBQUFDQwMDAwMDQ0NDQ0LDQ0NCg0NFRUUDQ0RFRAVERERDQ0NDxANDQsLEBQMCwgREQ0RDg0NEw4OEBYVDRUJCQUFERELDQoNCQkMDA0HBQkgDg0ODQ0JCQkJEBAQDw8PBQ0NDQ0NDQ0NDQ0MBg0KDQoJEA0NCw0NERELCwsXFxcNDw0JDQoOCw4LDQ0IDgwODBAQEA0MDQwLBQsICwoPDQ8NEAwOCA4IDQoNCA0LDw0PDQ0KDQoMEBENDAoNCxANDQsWEQwQBwsWBw4ICA4IDgwOCw4LDQwNDA0MDw0PDQ8NEA0QDQkFCQUJBQkFCgYOCwsLBQ8NDw0QDBAMDggNCg0IDw0PDQ8NDw0VEQ0LBg4MFRQQDAgVERURFRENCwUNDQ8XFxcXBQ0NDQ4QEgsSERIFDg4ODQ0QCQ4OEg8NEBANDQ0NDRIQCQ0NCg0FDQ0LCQ0NBQsLDQsKDA0KDQsQEQUNDA0RDREMDg0JCQoXFxEODRAODg4MEA0VDA8PDhASEBAQDQ4NDRENEA8WFhASDQ4WDgwNDAoNDBELDQ0LDQ8NDA0NCwsLEQsNDBISDRAMCxIMDA0KCwoFBQYTEw0LCw0MChUaDQ0XFxcXFxcXFxcXEQ0RDgAAAAANDQ0NDQ0NDQ0NDQ0NDQ0ODA4MDgwODA4MDgwODA4MDgwODA4MDgwNDA0MDQwNDA0MDQwNDA0MCQUJBQAAFxcMDAwMDAwMDAwMDAwMCQwFDAwIDw8LDhAGBxAQBg4ODhAQCAkRDw8PCw4QDRMQDQ0NBQkTBg4ODg4PExMTEw8PDw8LDhAGCBAGDg4OEAkRDw8OEA0TEAYPDg8QAAAAAAgICwkGBgcGBgYGCQQNDQ0NDQ0NDQ0NDQgNCQgLCA0NDQgHCAgGBxcMFxUJBgwGDBYXFRMWBggUFBMUDhAPEAgKFRYLDBUWCwwUFxcXFxcXFxcXFxcXFxcXFxcHBwcHBxAMEAwQDBAMEAwQDBAMEQ0RDRENEQ0RDQ8NDw0RDhEOEQ4RDhEODQsNCw0LDQsNAAkJFxYJBgcGBwoKBgcUFwYIBgcTFgYICw0TFgYIExYGCA4QDxAOEA8QDhAPEAsNCw0ICggKHB4XGBweFxgbGxESGxsREhAQEBAQEBAQDg0OCw4NDgsUFQkMFBQJDBESCwwPEQYIDhAMDg8RBggLDQ8NCgoUFxQXBggOEA4QDhAOEAsLDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANCg0IDA0NDwQODg8ODg8LDQ4OEBQTDg4NExQUDg4NEAwODg4PDxAQDg4NCg0ODgsOEQ4PEA4ODAoACwsAAAAAAAAADggOCwoMCwsAAAAAAAAAAA4ODxAQEREPEhIQEBkNAAAAAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAFCQYJCgUGDAoVEQ8MDgsQDQ0LDQsODA8MDw0QDBAMAAAAAAAABxMWBggLDQgKDxEMBgsMDBUVFRUGCwAAAA0NDg4TDxoVDg0XBgYHBwUUBwYGBgcGBwYHBgcKCgoKFBcTFgYIExYGCBMWBggTFgYIExYGCBMWBggOEA8QDhAPEA4QDxAOEA8QDhAPEA4QDxALDQsNCw0LDQsNCw0LDQgKCAoICggKCAoICggKHB4XGBweFxgcHhcYGxsREhsbERIQEA4NDgsUFQkMFBUJDBQVCQwUFQkMFBQUFBkZGRkVFgsMERILDBESCwwREgsMFRYLDBUWCwwVFgsMFRYLDBUWCwwPEQYIDxEGCA8RBggPEQYIDxEGCA8RDxEGCA8RDhAPEAoKCgoKCgoKCgoKCgoKCgoVGBQXBggKChQXFBcAAAAAABoZAAAAAAAABQoAAA4AAAAcHhcYGxsREg4NDgsJDgsNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0MDQ4MDg0ODQ4NDgsQDRANEA0QDRANDQwNDA0MDQwNDAwHDw0QDRANEA0QDRANCQUJBQ4LDgsOCwsFCwULBQsFEhMSExITDw0PDQ8NDw0QDBAMEAwQDA0NDQ0OCA4IDggOCA0KDQoNCg0KDQoNCA0IDQgNCA8NDw0PDQ8NDw0OCw4LFREVEQ0LDQsNCw0KDQoNCg0IEQsMBg0NDQ0NDQ0NDg4QEA8PDw8KCgoKCgoODhISERENDQ0NDQ0NDRERFRUUFBQUBQUFBQUFBQUKCg4ODg4ODgwMDAwMDBARFRUUFA0NDQ0NDQ0NEBQUFBEREREREREREBEVFRQUFRUNDQoKDQ0FBQwMDQ0REQ0NDQ0NDQ0NDg4QEA8PDw8NDQ0NDQ0NDRERFRUUFBQUEREREREREREQERUVFBQVFQ0NDQ0NDQ0ODg4ODggNCA0NDQ0NDQ0QDxIREAgIDQUFBQUFBQkJDAsICA0NDQ0NDQ0NDQ0NEREODQ0NERERERETEBIQEA0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw0PDQ4LEAwMCgwKDA0AABghGAAICAgKEQ0XEAUJCQ0RBwkHCQ0NDQ0NDQ0NDQ0ICBEREQsWDg4OEA0NEBAJCg4MExARDREPDQ4QDhYODg0JCQkRDQ0NDQsNDQgNDQUHDAUUDQ0NDQkLCA0MEgwMCwwJDBEODg4NEBEQDQ0NDQ0NCw0NDQ0FBQUFDQ0NDQ0NDQ0NDQ0LDQ0NCw0NFhYVDQ0RFhEWERERDQ4NDxAODQwMERUNCwgREQ0RDw4OFA4OERcWDRYKCgUFEREMDgoNCQkNDQ0HBQohDg0ODQ0JCQkJEREREBAQBQ0NDQ0NDQ0NDQ0MBw0LDQsJEQ0ODA4NEREMDAwYGBgNEA0JDQsOCw4LDg0IDg0ODRAQEQ0NDQ0MBQwJDAsQDRANEQ0PCQ8JDQsOCA4LEA0QDQ0LDQsMERINDQsOCxENDQwXEgwRBwsXCA8JCQ8JDg0OCw4LDQ0NDQ0NEA0QDRANEA0RDgkFCQUJBQkFCgcODAwMBRANEA0RDRENDwkNCw4IEA0QDRANEA0WEg4MBg4NFhURDQgWEhYSFhIODAUNDQ8YGBgYBQ0NDQ4QEwwTERMFDg4PDQ0QCQ4OExAOERANDQ4ODhMRCQ4NCw0FDQ0MCQ0NBQwMDgwKDQ0KDQwREQUNDQ0RDREMDg0JCQoYGBEODhAODg4MEA0VDRAQDhATEBEQDQ4ODhIOEA8XFxETDg4XDw0NDQoNDRILDg4MDQ8ODQ4NCwsMEgwODRMTDhEMCxINDQ4KCwsFBQcUFA4MDA4MChYbDg0YGBgYGBgYGBgYEg4RDwAAAAANDQ0NDQ0NDQ0NDQ0NDQ0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0NDQ0NDQ0NDQ0NDQ0NDQ0NCQUJBQAAGBgNDQ0NDQ0NDQ0NDQ0NCQ0FDQ0IEA8LDhAHBxARBw8PDxAQCQoSEBAQCw4QDhQRDQ0NBQoUBw8PDw8QFBQUFBAQEA8LDhAHCBEHDw8PEAoSEBAOEA4UEQcPDxAQAAAAAAkJCwkGBwgHBwYHCQQODg4ODg4ODg4ODgkNCggLCQ4ODggHCAgHBxgMGBYKBgwGDBYYFhMWBwgVFRMVDxEQEAkKFhcMDRYXDA0VGBgYGBgYGBgYGBgYGBgYGBgHBwcHBxENEQ0RDRENEQ0RDRENEg4SDhIOEg4SDhANEA0RDxEPEQ8RDxEPDgwODA4MDgwOAAkJGBcJBgcGBwoLBgcVGAcIBgcTFgcICw4TFgcIExYHCA8REBAPERAQDxEQEAsNCw0JCgkKHR8YGR0fGBkcHBISHBwSEhAREBEQERARDw4ODA8ODgwVFgoMFRUKDBETDA0QEQcIDhAMDxASBwgLDhANCgsVGBUYBwgPEQ8RDxEPEQsLDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANCw4IDQ0OEAQODxAPDxAMDQ8PERUUDw8NExUUDw8OEQ0PDw8PDxERDw4OCg4PDwwPEg8QEQ4ODQsADAwAAAAAAAAADggODAsMDAwAAAAAAAAAAA4ODxAREhIQExMRERoOAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAFCQcJCgUHDAoWEg8NDgwRDg4MDgwPDA8NDw0RDRENAAAAAAAABxMWBwgLDQkKEBINBwwN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GRkODxYSHRkaFBoXFRYYFiEVFRUODg4bFBQTFBEUEwwUFQgKEggfFRQUFA0RDBUSGxISEBIOEhsWFhYVGRoYExMTExMTERMTExMICAgIFRQUFBQUFRUVFRQRFBQUERQUIiIgFBQbIhoiGxsbFBUUGBkVFBISGiEUEgwbGxQbFxUVHhYWGiQiFCIPDwgIGxsSFRAUDg4UFBQLCA8zFhUWFRUODg4OGhoaGBgYCBQUFBQUFBQUFBQTChURFRAOGhQVEhUUGxsSEhIlJSUUGRQOFREWERYRFRQNFhMWExkZGhUTFRMSCBINEhAZFRkVGhQXDRcNFREWDBYRGBUYFRUQFRATGhwVFBEWERoUFRIjGxMaCxIkDBYNDRYNFhMWERYRFRMVExUTGRQZFBkUGRUaFQ4IDggOCA4IDwoWEhISCBkVGRUaFBoUFw0VERYNGBUYFRgVGBUhGxUSCRYTIiEaFA0hGyEbIRsVEggUFBclJSUlCBQUFBYZHRIeGx4IFhYXFRUZDhYWHRkVGhkUFRYVFR0aDhUVERUIFRUSDhUVCBISFRIQFBQQFRIaGwgVFBUbFRsTFhUODg8lJBsWFRkWFhYTGRUhFBkZFhkdGRoZFBYWFRwVGRgjIxodFhYjFxMUEw8VExsRFRUSFRgVFBUUERESHBIVFB0dFRoTERwUExUPEREICAofHhUSEhUTDyIqFRQlJSUlJSUlJSUlHBUbFgAAAAAUFBQUFBQUFBQUFBQUFBQWExYTFhMWExYTFhMWExYTFhMWExYTFhMVExUTFRMVExUTFRMVExUTDggOCAAAJSUTExMTExMTExMTExMTDhMIExMNGRgRFhkKDBkaChcXFxkZDQ8bGBkYEhYZFR4aFBQUCA8fChcXFxcYHh4eHhkZGRgRFhkKDRoKFxcXGQ8bGRgWGRUeGgoYFxgZAAAAAA0NEg4JCgwKCgkKDQcVFRUVFRUVFRUVFQ0UDw0RDRUVFQsMDQ0KCyUTJSIPCRMJEyMlIh4jCg0gIR4gFxoYGQ0PIiQSFCIkEhQgJSUlJSUlJSUlJSUlJSUlJSULCwsLCxoUGhQaFBoUGhQaFBoUHBUcFRwVHBUcFRgVGBUbFhsWGxYbFhsWFRIVEhUSFRIVAA4OJSQOCQsJCw8QCQsgJQoNCQseIwoNERUeIwoNHiMKDRcaGBkXGhgZFxoYGREUERQN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IRwhHB0ZIxsbFhsWGhwAADZLNgARERIWJx01JAsVFR0nEBQQFR0dHR0dHR0dHR0TEycnJxoxICAgJR4cJCQUFiAbKiQmHiYiHiAjIDEfHx4VFRUnHR0cHhkeHBEeHgwPGwwtHh0eHhMYEh4bKBsbGBoVGicgICAeJCYjHBwcHBwcGRwcHBwMDAwMHh0dHR0dHh4eHh0ZHR0dGR0eMjIvHR0nMSYxJycnHR8dIiUeHRsbJjAdGhInJx0nIR8fLCAgJjUxHTEWFgsLJycbHxcdFRUdHR0QCxVLIB4gHh4UFBQUJiYmIyMjDB0dHR0dHR0dHR0cDx4YHhgVJh0fGx8eJycbGxs2NjYdJB4UHhggGSAZHx0TIBwgHCUlJh4cHhwbDBsTGxgkHiQeJh0iEyITHhggEiAZIx4jHh4YHhgbJigeHRkfGSYdHhs0JxwlEBo1ESETEyETIBwgGSAZHhweHB4cJB4kHiQeJB4nHxQMFAwUDBQMFg8gGxsbDCQeJB4mHSYdIhMeGCASIx4jHiMeIx4xKB8bDiAcMTAmHRMxKDEoMSgfGwsdHSI2NjY2Cx0dHSAlKxorJysMICAhHh4kFCAgKiQfJiQeHiAfHysmFB8eGR4MHh4bFR4eDBsbHxsXHR4XHhsnJwweHR4nHicbIB4UFBY2NSchHyQgICAbJR4wHSQkISUqJCYkHiAgHygfJSIzNCUrHyAzIRweHBYeHCcZHh4bHiIeHR4eGRkbKRsfHSorHyUbGSkdHB8WGRgMDA8tLB8bGx4bFjE+Hh02NjY2NjY2NjY2KR4nIQAAAAAdHR0dHR0dHR0dHR0dHR0gHCAcIBwgHCAcIBwgHCAcIBwgHCAcIBweHB4cHhweHB4cHhweHB4cFAwUDAAANjYcHBwcHBwcHBwcHBwcFRwMHBwTJCMZICUPESUmDyIiIiUlFBYnIyQjGiAlHywmHh4eCxYtDyIiIiIjLCwsLCQkJCMZICUPEyYPIiIiJRYnJCMgJR8sJg8jIiMlAAAAABMTGhUODxAPDw0PEgofHx8fHx8fHx8fHxMdFhMZEx8fHxAREBAPEDYbNjEWDhsOGzM2MSwzDxMvMCwvISYkJRQXMjQaHTI0Gh0vNjY2NjY2NjY2NjY2NjY2NjYQEBAQECYdJh0mHSYdJh0mHSYdKR4pHikeKR4pHiMeIx4nISchJyEnISch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B98H4AfhB+IBnQGeAZ8BigGgAaEBogGkAaUBpgGnAagBKwGpAaoBqwGsASwBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBLQG5AboBuwG8Ab0BvgG/AcABwQHCAS4BwwHEAS8BMAHFAcYBxwHIAckBygHLAcwBzQHOAjoBzwHQATEBMgHRATMB0gHTAdQB1QHWAdcB2AHZBDAB2gHbAdwB3QHeAd8B4AHhAeIB4wHkAeUEMgHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgITAhQCFQIWAhcCGAIZAhoCGwIcAh0CHgIfAiACIQIiAiMCJAIlAiYCJwQvAigCKQIqAisCLAItAi4CLwIwAjECMgIzBDECNAI1AjYCNwStBK4CjQKOAo8CkAKRApICkwKUApUClgQzApcCmAKZApoCmwKcAp0CngKfAu8DgQODA4UDhwOJA40DjwOTA5UDmQOdA6EDpQOpA6sDrQOvA7EDtQO5A70DwQPFA8kDzQLwA9ED1QPZA90D4QPlA+kD7QPvA/EC8QLyAvMC9AL1AvYC9wL4AxoE9gT3AvkC+gL7AvwC/QL+Av8DAAMBAwIDAwMEAuwDBQThBPgE+gT8BPYE/gUABQIFBATMBQYFCgUOBRIDHwUWBRoFHgUiBSYFKgUuAycFMgTQBTYGBwU4BToFPAU+BUAFQgTSBUQFRgVIBUoFTAVOAysFUAVSBVYFWgVeBWIFZgVoAyYFbAVwAyMFdAV4BXwFfgMtBYAFhAWIBYwFkAMxBZQFmAWcBaAFpAWoBawFsAW0BbgE1AW8Bb4FwgPrBcQD/QTWBNkE2gXIBcoFzAXOBdAF0gXUBdYDNQXYBdoF3gXgBeIE2wTdBN8DCATiBeQF5QTjBeYF5wXoBekF6gXrBewF7QXuBe8F8AXxBfIF8wX0BfUF9gX3BesF+AL5AvoC+wL8AwoDCwMMAwADAQMCBfkF/QYBBgUGBgYcBh0GHgYfBiAGIQYiBiMGJAYlBiYGJwYoBikGKgYrBiwGLQYuBi8GMAYxBjIGMwY0BjUGNgY3BjgGOQY6BjsGPAY9Bj4GPwZABkEGQgZDBkQGRQZGBkcGSAZJBkoGSwZMBk0GTgZPBlAGUQZSBlMGVAZVBlYGVwZYBlkGWgZbBlwGXQZeBl8GYAZhBmIGYwZkBmUGZgZnBmgGaQZqBmsGbAZtBm4GbwZwBnEGcgZzBnQGdQZ2BncGeAZ5BnoGewZ8Bn0GfgZ/BoAGgQaCBoMGhAaFBoYGhwaIBokGigaLBowGjQaOBo8GkAaRBpIGkwaUBpUGlgaXBpgGmQaaBpsBiwGMAY0BjgGPAZAGnAadBp4GnwagBqEGogajBqQGpQamBqcGqAapBqoGqwasBq0GrgavBrAGsQJdAl4CXwJgAmECYgJjAmQCZQJmAmcCaAJpAmoCawJsAm0CbgJvAnACcQJyAnMCdAJ1AnYCdwJ4AnkCegJ7AnwCfQJ+An8CgAKBAoICgwKEAoUChgKHAogDTANNA04DTwNQA1EDUgNTA1QDVQNWA1cDWANZA1oDWwNcA10DXgNfA2ADYQNiA2MDZANlA2YDZwNoA2kDagNrA2wDbQNuA28DcANxAZEBkgN0A3UDdgN3A3gDeQCxALICOAE0ALUAtgDDAZMAswC0AMQAggDBAIcE5QTmBOcA9QGVBOgE6QE3BOoE6wLAA3oAvATsBO0E7gfyB/MAmQDtAMIApQGbAZwEAAQBBAIEAwQEBAUEBgQHBAgECQQKBAsEDAQNBA4EDwQQBBEEEgQTBBQEFQQWBBcEHAQdBB4EHwQgBCEEIgQjBCQEJQQmBCcEKAQpBCoEGAQZBBoEGwDVAt4C3wLgAuEC4gLjAuQC5QLmAucE+AT5BQoFCwUMBQ0DHwMgAyEDIgUaBRsFHAUdBQYFBwUIBQkFFgUXBRgFGQTMBM0EzgTPAyMDFgMXAxQFeAV5BXoFewUqBSsFLAUtBSYFJwUoBSkDJwMoAykDKgUyBTMFNAU1BTwFPQU6BTsFPgU/BNAE0QMrAywE0gTTAy0DLgMvAzADMQMyAzMDNAWgBaEFogWjBZgFmQWaBZsE1ATVBbwFvQTOBM8D/gP/BOAE1gTXBNgD6wPsA+sD7ATbBNwE3QTeBYwFjQWOBY8FzgXPBcwFzQXQBdEFAgXWBdcFygXLBdIF0wXgBeEFDAUNAzUDNgSoA/QAAEA9VDs6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBACwBsBhDWLEZBysbISEhWS0s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AAEUTgABFHoAARTsAAEVMgABFZIAARXwAAEWXAABFq4AARcWAAEXcgABGFoAARhqAAEYegABGIoAARiaAAEYqgABGLoAARjKAAEY2gABGbAAARnAAAEZ0AABGlIAARpiAAEa/AABGwwAARvcAAEb7AABG/wAARwMAAEdKgABHToAAR2iAAEd1AABHfgAAR4cAAEeQAABHm4AAR6WAAEf4AABINwAASHeAAEimAABI+AAASRkAAElcAABJlIAASZiAAEmcgABKAYAASgWAAEpIgABKioAASryAAEsGAABLVoAAS7CAAEu0gABLvgAAS8cAAEvQAABL2YAAS+cAAEwvAABMOgAATIcAAEyLAABMjwAATKkAAEytAABNCoAATVaAAE2UAABNn4AATgAAAE4wAABONAAATm6AAE5ygABOiQAATsEAAE7FAABPL4AAT5EAAE/KgABQGIAAUGCAAFChgABQpYAAUKmAAFCtgABQ1AAAUNgAAFDcAABQ4AAAUS0AAFF7AABRfwAAUbAAAFHjAABSH4AAUlwAAFKeAABS4oAAUxgAAFNagABTr4AAU+2AAFPxgABUTQAAVJ6AAFS5gABU9AAAVPgAAFVkAABVsgAAVeOAAFXsAABWMoAAVm6AAFaugABW1oAAVtqAAFb6gABW/oAAVwKAAFcoAABXLAAAV5UAAFeZAABXyIAAV/yAAFgrgABYZgAAWKaAAFjrgABZIwAAWXCAAFm0gABZ8oAAWfwAAFphAABaagAAWq+AAFqzgABat4AAWruAAFq/gABbGAAAW2QAAFuuAABbu4AAW8QAAFvsAABcCYAAXCsAAFw2AABciIAAXIyAAFzHAABdygAAXdSAAF3fAABd6YAAXfQAAF3+gABeCQAAXhOAAF4eAABeKIAAXoOAAF7NgABfGQAAX2SAAF+GAABfkQAAX5WAAF+aAABftoAAX9MAAGAGAABgNQAAYFUAAGB0gABgqYAAYNyAAGD+AABhLIAAYU0AAGFwAABhpgAAYdwAAGIQAABiGIAAYiMAAGIuAABiOQAAYkaAAGJPgABiWQAAYmIAAGJugABid4AAYoIAAGKLAABimAAAYqYAAGKvAABiuAAAYsEAAGLKAABi0wAAYtwAAGLlAABi7gAAYv2AAGMLgABjFAAAYxyAAGMpgABjNAAAYz8AAGNHgABjU4AAY1yAAGNogABjcYAAY3qAAGOGAABjjwAAY5gAAGOngABjtAAAY8CAAGPLgABj1IAAY92AAGPkAABj9oAAZAEAAGQLgABkJ4AAZGuAAGSRgABkwQAAZNGAAGTwgABlHQAAZSoAAGVBAABlVYAAZYcAAGWaAABlp4AAZbIAAGXAgABlzgAAZeKAAGX3AABmBwAAZj0AAGZigABmmwAAZrGAAGbcgABm+QAAZy8AAGdSgABngoAAZ5sAAGe8gABn5gAAaBKAAGg1AABodQAAaJOAAGiwgABo6AAAaRoAAGlPgABpjYAAacYAAGoKAABqOgAAalyAAGqcAABq2YAAaw+AAGtGAABrfIAAa5EAAGuxgABr6gAAa++AAGv/gABsEIAAbBoAAGwsAABsWgAAbGMAAGxuAABsgoAAbJgAAGyhAABsqgAAbLoAAGzEgABs0QAAbNsAAGzpgABs9gAAbQOAAG0MgABtIQAAbSmAAG0yAABtPwAAbUsAAG1WgABtX4AAbW0AAG16gABtigAAbZQAAG2cgABtrIAAbbWAAG2+gABtxwAAbc+AAG3YAABuGAAAbiIAAG48gABuUoAAbmuAAG6LgABusoAAbveAAG8sAABvOAAAb1YAAG+cAABvu4AAb80AAG/+gABwEAAAcEwAAHBuAABwjAAAcK0AAHDjgABxH4AAcWwAAHGggABx0YAAcfOAAHIUAAByWYAAcq4AAHLKAABzHQAAc2CAAHOJgABz3IAAc/qAAHRCAAB0gwAAdL4AAHTJgAB02wAAdPkAAHUYAAB1MYAAdYMAAHWNgAB1nAAAdaaAAHWzgAB1wIAAdeyAAHZJgAB2dIAAdoCAAHa5gAB2xAAAdySAAHc2AAB3R4AAd1iAAHdpgAB3doAAd8aAAHf3AAB4PIAAeEwAAHhagAB4Z4AAeHkAAHiJAAB4mAAAePIAAHlXgAB5oAAAefYAAHpsAAB66oAAe00AAHu+gAB8H4AAfIOAAHyOAAB8mIAAfKMAAHytgAB8uAAAfMKAAHzNAAB814AAfOIAAHzsgAB89wAAfQGAAH0MAAB9FoAAfSEAAH0rgAB9pYAAffOAAH46gAB+owAAfumAAH7ygAB++wAAfwaAAH8QgAB/HQAAfyiAAH81AAB/PgAAf0oAAH9VgAB/XwAAf2gAAH94gAB/hQAAf5EAAH+ZgAB/pgAAf7CAAH+9AAB/xYAAf86AAH/aAAB/4wAAf+uAAH/0AAB//IAAgAmAAIASAACAIIAAgCkAAIA3AACAP4AAgE0AAIBVgACAXoAAgGcAAIBvgACAeAAAgIYAAICRAACAmYAAgKUAAICwgACAu4AAgMcAAIDPgACBKIAAgS0AAIExAACBNQAAgT+AAIHEgACByIAAgdMAAIHdgACB6IAAgfOAAIIDAACCEoAAgiOAAIIzgACCQIAAgkuAAIJYAACCZAAAgnMAAIKNgACCmYAAgqWAAIKxgACCvYAAgsqAAILXgACC5IAAgvGAAIL+gACDCoAAgxiAAIMmgACDNIAAg0KAAINNgACDWIAAg2OAAINwgACDsIAAhASAAIQngACEXwAAhGsAAIR2AACEgoAAhI8AAIS6AACE7oAAhPmAAIUEgACFJgAAhVsAAIVoAACFdQAAhc0AAIYzAACGd4AAhskAAIbWAACG4wAAhvAAAIb9AACHWIAAh8IAAIgJAACIZAAAiG8AAIh6AACIh4AAiJUAAIjWAACJJAAAiSgAAIksAACJNwAAiUIAAIlNAACJWAAAiaMAAIoygACKawAAisEAAIrMAACK1wAAiuIAAIrtAACK+AAAiwMAAIsOAACLGQAAi22AAIt5gACLhYAAi5GAAIvvgACMVIAAjFiAAIxcgACMi4AAjMCAAIzcgACNBYAAjVKAAI2vgACN7QAAjjYAAI5uAACOrwAAjroAAI7FAACOyQAAjv6AAI9BAACPiYAAj8aAAJAKAACQDgAAkBIAAJAgAACQnAAAkKkAAJC4AACQwoAAkM0AAJDbAACQ6QAAkPeAAJEGAACRM4AAkW8AAJF9gACRjAAAkZmAAJGkgACRr4AAkbQAAJG/gACRxAAAkc6AAJHZAACR3YAAkeiAAJHtAACSCAAAkiMAAJIngACSQoAAkkcAAJJeAACSYoAAkmcAAJJrgACScAAAknSAAJJ5AACSfYAAkoIAAJKZAACSnYAAkrSAAJK5AACSvYAAksIAAJLGgACSywAAks+AAJLUAACS2IAAkt0AAJLhgACS5gAAkuqAAJLvAACS84AAkvgAAJL8gACTBYAAkxCAAJMZgACTIwAAkyuAAJM3gACTQQAAk0yAAJNagACTlIAAk/MAAJRjAACUy4AAlUiAAJXeAACWNgAAlpSAAJcogACXn4AAmCcAAJimAACZWAAAmgCAAJrFAACbgYAAnBgAAJy3gACdU4AAndiAAJ58AACe5gAAn2QAAJ+uAACgIoAAoGqAAKCygAChEAAAoW2AAKHLAACiJ4AAooaAAKL0gACjVQAAo6cAAKQTgACkfwAApOCAAKUmAAClpwAApkAAAKbDgACnRIAAp8kAAKgbAACoqAAAqPWAAKmggACp9QAAqhUAAKoagACqPoAAqmmAAKq1gACq6QAAqymAAKtxAACrgoAAq9oAAKwNgACsE4AArG+AAKzwgACtZYAArYcAAK35gACuY4AArm4AAK7IgACvSYAAr2CAAK+mgACv14AAsBSAALBngACwlIAAsOwAALF7AACx2YAAsl2AALMSAACzd4AAs/yAALSDAAC0+wAAtUgAALW2gAC2OgAAtkMAALZMAAC2VYAAtl6AALZmAAC2bgAAtnYAALaBAAC2iQAAtpMAALabAAC2owAAtquAALazgAC3IAAAt2MAALeTgAC3mAAAt5yAALf3AAC3+4AAuAMAALhPgAC4kAAAuNeAALjpAAC4+YAAuRCAALkdgAC5IYAAuSWAALkpgAC5LYAAuVCAALl4AAC54wAAukaAALqNAAC624AAuyuAALtygAC7ngAAu88AALvTAAC8BYAAvD6AALyAgAC8u4AAvPwAAL07gAC9e4AAva0AAL2xAAC99wAAvjoAAL58gAC+vgAAvs+AAL7iAAC+7gAAvvwAAL8IAAC/GYAAvziAAL9EgAC/UIAAv14AAL9qAAC/dgAAv4IAAL+PAAC/nAAAv8mAAMAAAADAHYAAwEOAAMCmAADAs4AAwL+AAMDrAADBDIAAwRkAAMElgADBMIAAwTSAAME+gADBeIAAwZWAAMHggADCKAAAwp8AAMLpAADDMwAAw6EAAMOqgADEOgAAxG2AAMS3AADFPQAAxWOAAMWJAADFnIAAxb0AAMXVAADGHAAAxjGAAMY2AADGQIAAxkwAAMZXgADGYgAAxmyAAMZ3gADGgoAAxo2AAMaYgADGpQAAxrGAAMbEAADG1oAAxuUAAMbxgADG/YAAxwmAAMcVgADHIYAAxy8AAMc8gADHSgAAx1eAAMdsAADHgIAAx5UAAMepgADHtoAAx8OAAMfQgADH3oAAx+yAAMf6gADICIAAyBaAAMgkgADIMoAAyECAAMhOgADIWwAAyGeAAMh2AADIhIAAyJCAAMicgADIqIAAyLSAAMjAgADIzIAAyNiAAMjkgADI84AAyQKAAMkOgADJGoAAySeAAMk0gADJQYAAyU6AAMldgADJbIAAyXqAAMmIgADJlwAAyaWAAMm2gADJx4AAydOAAMnfgADJ64AAyfeAAMoEgADKEYAAyh6AAMorgADKOYAAykeAAMpTgADKX4AAymuAAMp3gADKgoAAyo6AAMqfgADKsIAAysEAAMrRgADK4AAAyu6AAMr/AADLD4AAyyCAAMsxgADLQoAAy1OAAMtjgADLc4AAy4OAAMuTgADLqoAAy8GAAMvYgADL74AAy/uAAMwHgADME4AAzB+AAMwsgADMOYAAzEaAAMxTgADMYIAAzG2AAMx6gADMh4AAzJSAAMyhgADMrIAAzLeAAMzCgADMzYAAzN2AAMztgADM/YAAzQ2AAM0dgADNLYAAzT0AAM1NAADNWwAAzWkAAM13AADNhQAAzZGAAM2cgADNqwAAzbgAAM30gADON4AAzmeAAM6dAADOq4AAzroAAM7JAADO2AAAzuQAAM7wAADO/QAAzwoAAM8XAADPJAAAzzIAAM9AAADPUAAAz2AAAM9vgADPfwAAz40AAM+bAADPqgAAz7kAAM/RAADP6QAAz/4AANATAADQHwAA0CsAANA3AADQQwAA0FCAANBeAADQa4AA0HkAANCfAADQxQAA0OiAANEMAADRFwAA0SIAANEtAADROAAA0UQAANFQAADRXAAA0WgAANF3AADRhgAA0ZUAANGkAADRtAAA0f8AANIOgADSHgAA0iwAANJtAADSfQAA0o0AANKZAADSpQAA0rSAANMHAADTGoAA0y4AANM7AADTSAAA01sAANNuAADTgIAA05WAANOnAADTuIAA0+qAANQkgADUMYAA1D6AANRMgADUWoAA1GeAANR0gADUgQAA1I2AANSbAADUqIAA1LcAANTFgADVC4AA1VeAANVigADVbYAA1X6AANWPgADVnAAA1aiAANW2AADWD4AA1h+AANZ5AADWygAA1vAAANceAADXMYAA12GAANf8AADYXYAA2G4AANh5gADYlYAA2LUAANjBgADY14AA2PqAANkYAADZHIAA2TyAANmbgADZoAAA2bYAANm6gADZzYAA2eCAANnzgADaBoAA2heAANoogADaOYAA2kqAANpbgADab4AA2oCAANqRgADayQAA2weAANsSgADbHYAA2zqAANtUAADbcAAA24oAANuwgADb0oAA2/8AANwoAADcW4AA3I8AANyvAADcwYAA3OwAAN0FAADdHoAA3TWAAN1qgADdy4AA3fAAAN35gADeAwAA3gyAAN4VgADeHoAA3ieAAN4zAADePoAA3kgAAN5RAADeWoAA3mSAAN5tgADedoAA3oIAAN6NgADelwAA3qCAAN6qAADes4AA3r0AAN7GgADe0AAA3tmAAN7jAADe7IAA3vgAAN8DgADfDQAA3xYAAN8fgADfMYAA3zsAAN9EAADfTYAA31cAAN9ggADfaYAA33OAAN99gADfxIAA4AoAAOAXAADgJAAA4C+AAOA7AADgRYAA4FAAAOBZgADgYwAA4GwAAOB1AADggIAA4IwAAOCVAADgnoAA4KwAAODCgADgzgAA4NmAAODjAADg7IAA4PYAAOD/gADhCQAA4RKAAOEcAADhJYAA4S8AAOE4AADhQYAA4UqAAOFWAADhYYAA4WsAAOF0gADhfoAA4YgAAOGSgADhnIAA4aaAAOGwAADhugAA4cOAAOHNAADh1gAA4d+AAOHogADh8gAA4fsAAOIEAADiDQAA4hqAAOIoAADiM4AA4j8AAOJIgADiUYAA4lqAAOJjgADibgAA4niAAOKCAADii4AA4pkAAOKmAADir4AA4rkAAOLCAADiywAA4taAAOLiAADi64AA4vUAAOMBgADjDgAA4xmAAOMlAADjLoAA4zgAAONBgADjSwAA41UAAONfAADjaoAA43OAAON8gADjhYAA448AAOOYgADjogAA46uAAOO1AADjvgAA48gAAOPRgADj2wAA4+QAAOPvgADj+IAA5AGAAOQKgADkFgAA5CGAAOQtAADkNwAA5EEAAORKgADktIAA5MaAAOTQAADk2YAA5OOAAOTtgADk94AA5QGAAOULAADlFIAA5SWAAOUzgADlQ4AA5VOAAOVigADlcYAA5YiAAOWfgADlqQAA5bKAAOXBAADlz4AA5d4AAOXsgADl/oAA5g4AAOYdAADmLAAA5joAAOZIAADmUYAA5lsAAOZlAADmbwAA5nkAAOaDAADmjIAA5pYAAOangADmuQAA5saAAObUAADm4IAA5u0AAOb9AADnDQAA5xaAAOcgAADnLoAA5z0AAOdLAADnWQAA52MAAOdtAADnewAA54kAAOeTgADnngAA56qAAOe3AADnxYAA59QAAOfdgADn5wAA5/EAAOf7AADoBQAA6A8AAOgbAADoKYAA6DcAAOhEgADoUoAA6GCAAOhqAADoc4AA6ISAAOiVgADopAAA6LKAAOi8AADoxYAA6NOAAOjgAADo6gAA6PUAAOj+gADpCAAA6RaAAOklAADpM4AA6UIAAOlMAADpVgAA6WQAAOlyAADpfAAA6YYAAOmUgADpowAA6bAAAOm9AADpxgAA6c8AAOnYAADp4QAA6eoAAOnzAADp/IAA6gYAAOoPAADqGAAA6iEAAOoqAADqMwAA6jyAAOpKAADqV4AA6mWAAOpzgADqgYAA6o+AAOqdAADqqoAA6r+AAOrRAADq4AAA6u8AAOr9gADrDAAA6yQAAOs8AADrSwAA61oAAOtpgADreQAA64iAAOuYAADrpwAA67YAAOvHgADr2QAA6+kAAOv5AADsCIAA7BgAAOwrAADsPgAA7EwAAOxaAADsbQAA7IAAAOyTAADspgAA7LSAAOzDAADs1YAA7OOAAOzyAADtAIAA7RIAAO0jgADtNQAA7UaAAO1PgADtWIAA7WWAAO1ugADte4AA7YSAAO2RgADtmwAA7aSAAO2xAADtuwAA7cQAAO3fAADt9oAA7hIAAO4vAADuXAAA7mqAAO51AADug4AA7oyAAO6bAADuqQAA7rSAAO7CgADuzYAA7tcAAO78AADvIoAA71kAAO9lAADvboAA73oAAO+EgADvjgAA75iAAO+jAADvrIAA77mAAO/EgADv6QAA8A2AAPBEgADwTYAA8FaAAPBggADwaoAA8HQAAPB9gADwhoAA8JCAAPCaAADwo4AA8LKAAPC+gADwzgAA8OiAAPEDgADxD4AA8R0AAPEmgADxNIAA8T4AAPFMAADxWYAA8WOAAPFtgADxegAA8YOAAPGQAADxqoAA8b2AAPHKgADx1oAA8fAAAPH7AADyC4AA8ioAAPJGgADyWoAA8mUAAPJ2AADyk4AA8rSAAPLKgADy5wAA8wMAAPMfgADzPAAA80wAAPNcAADzdAAA84yAAPOZAADzqwAA89AAAPPmgADz/YAA9ByAAPQmgAD0QwAA9F0AAPRugAD0mgAA9LsAAPTTAAD064AA9PYAAPUHAAD1LIAA9UMAAPVZgAD1d4AA9ZIAAPW8AAD1xgAA9dAAAPXlgAD2DwAA9hkAAPYjAAD2MQAA9kOAAPZpAAD2egAA9o6AAPa7AAD25YAA9wYAAPcZAAD3Q4AA91+AAPd6gAD3kgAA96UAAPe6gAD3y4AA99wAAPgzAAD4e4AA+MWAAPjyAAD5CwAA+SsAAPlAAAD5XoAA+ayAAPoSgAD6HwAA+igAAPo5gAD6R4AA+pWAAPrZAAD7E4AA+10AAPtpgAD7coAA+8aAAPwWgACAQAAAAcABgAAAwAHABS3BgIEAAYCBAAvzd3NAC/N3c0xMCERIRElIREhAQAGAPqABQD7AAYA+gCABQAAAAIA5AAAAcQF0QADAAcAWkAPAwMCAgZVBQgAYAQrA2AFuP/AQAkNEDcABRAFAgW4/960DQ0GOwW4/+K0DAwGOwW4/9y1CwsGOwUJuP/Atw4QNwAJEAkCXSsvKysrXSvk/eQAP+0zLz8xMAEDIwMTIzUzAcQcph7WzMwF0fvJBDf6L9MAAAIAcgPRAsQGFAADAAcAJEAUAgYGAAcBACwDAwQsAAcQByAHAwcvXe0zL+0APzwzLzwxMAEDIwMjAyMDAsQrhCueK4QrBhT9vQJD/b0CQwAAAgCOAAAFRAXRABsAHwC0QGYGAVcJVxZoHAQHCB8cFxgoBQIBGhkZBgoJHh0WFSgTEA8MFAsUHgIFCQQMvA8WGgEdBBC8Ez8PPxNPD08TBBMPFAYLCBkUAxsDBmIDGw8ZAZ8ZARkZIRINFGISDQALEAtwC+ALBAu4/8C2EBQ3IAsBCy9dK3EzM+QvLxEzL11xMzPkLy8APzw/PBI5OV0v7Rc5L+0XOTEwAYcQwMDAwP3AwMDAwIcQwMDAwP3AwMDAwAFdASEDIRUhAyMTIQMjEyE1IRMhNSETMwMhEzMDIQUhAyEFRP7bXAEM/tFpgWn+8mmBaf7+ASVc/vQBL2mBaQEOaYFpAQL+Xf7uXgESA6T+iIf+WwGl/lsBpYcBeIcBpv5aAab+WoX+hAAAAwBq/pcEAAYoACkAMAA3APFAmAwTACgcExAoJQw6CDoTNR0zKEMMSRNPIUMoWQhVHVUvWTJpCGQdZShpLXoIcx16LXM3GRIPNDMzEyQqMCgoMDA3EzMUExMzEzAzKCoPNCQIBhgfLxkBGR8ZGCOWK7cblhgYBjULBQMFCwMOtwYIEzMwKAQAFRskNAStGSoPQAUBBQUAFR4eMRMgAAEADzkfOQIAOQkJLhMVuP/AtgkLN0AVARUvXSvtMy8RM10vXe0zLxESOS9dPDw8/Tw8PBESFzkAP+0XMy8vMhEzL+T95BEzMy9dLxESFzmHDi4rDn0QxIcExMSHEDzEDsQxMABdARQGBxEjESYmJzUzFhYXESYmJyYmNTQ2NxEzERYWFxUjJiYnERYWFxYWJREGBhUUFgE0JicRNjYEAOGrcmzbUQ9PxnQZSBmWgd6zclvDPg9Gp2AhORWIlf4CWnpZAbxgb2ZpAXyT0xX+lgFlATAoyjtKCgGwBhEIKaZ5jtIRARD+8gMtG8YwSAj+UgcPBSCe6AGeCGVaWWH+W15aF/5hDGMABQBm/+MHaQXtAAsADwAbACcAMwC6QIgJCAYKCRgGGg81GAgXChgYFxopCCYKKRgmGkYNSA9ANVYNWA9pDhMPDA0NOA4PFA4OD3kfdiV5K3YxBCW8LwNPAwIDAx+8CQIPAw4IK7wgGUAZAhkZMbwTCiQMKw4CDA4uKgAWEBYCFhYoKgwOBg8QQBACEBwqDwAfAAIAIioQABAGIAYwBgMGL10zM+0vXe0vXRI5Oe0zL13tLy9dAD/tMy9d7T8/P+0zL13tXTEwhwUuK4d9xAFdARQGIyImNTQ2MzIWJQEjAQEUBiMiJjU0NjMyFgE0JiMiBhUUFjMyNgE0JiMiBhUUFjMyNgMntauus7arrrICmvz0pQMMAk21q66ztquusvsMR2dnSERrZ0cEQkdnZ0hEa2dHBDTh2dzd4NrcwPovBdH7zOHZ3N3g2twBupicnpeWnp7+AJicnpeWnp4AAwBD/+EFpQXwACkANgBIAJxAYQoBAxkPKAwpCioSGS0BIRkvKkoqQzJGOFUyVkdgIWcpYDJlNmU3dwB1OHo+eEIXJUAyJQ43KiAhKikCCQAXAjQzBQoACCQUJT0UGjcgISkEAEMUDisqAgEFABERGiUDCAC4/8BACRAUNwAASjEVCLj/wLMQFDcILyvtETMvKxIXOS8SFzn9ERc5L+0v7QA/P+0/Ehc57S8xMF0hIScGBiMiJDU0Njc2NjcmJjU0Njc2NjMyFhUUBgcGBgcBNjY1MxUUBgcHAQYGBwYGFRQWMzI2ATY2NzY2NTQmIyIGFRQWFxYWBaX/AMxm14jK/vkwKCdmL2VkOS4wmVum0hkhIWtZAWAOBsMxOL7+NBkyHhglqZBgmv7ROEkUEhJxS1lmDxgVS9WCcvPFVoY2NE8dRJZyR3kuLzyvhjFpMTFWIP6WUsGbYGDxbEMB1xAsLCNxP463UQK7E0AmI04tYWp4Wig5Jh9GAAEAaQPRAUcGFAADACO2AgIDAQAsA7j/wLMKCzcDuP/StAsLBjsDLysr7QA/My8xMAEDIwMBRyuIKwYU/b0CQwABAGz+ZALGBhQAFQBJQDUHQA0QNwFADRA3BxAJCjcBEAkKNygDKAVIA0gFdw13EQYHAQEMCDAAcAACAAAPHxAEIAQCBC9d7TMvXTwAPz8xMAFdKysrKwEjJgIREBI3MxUGBgcGAhUUEhcWFhcCxuWux8Ww5VGTPzxLST48mk3+ZM8BzgE7ATQB1c8KSb9/e/7YpKv+5IB7x0UAAQBK/mQCpAYUABUAXLkAE//Asw0QNwO4/8BAKw0QNwYDBhMVAxUTJgEmAyYTJhVHAUcVeAl4DQwSAQQMEj8EfwQCBAQLHwC4/85ACgsLBjsAAAEAABcRMy9dK+0zL108AD8/MTABXSsrARACByM1NjY3NhI1NAInJiYnNTMWEgKkxq/lTZw6PklKPT2aTOWuxwI8/sv+LM8KRcl5gQEfp6UBJnx8xkUKz/4uAAEAcAJ2A+8GFAARAI25AA7/4LMOEDcLuP/gQBYOEDcFIA4QNwIgDhA3TxMBEUAJEDcIuP/AQDkJEDcBBg8KCw4IEQUCBgwGTwRQBAIECg8MAQQMAQ8THxMCABENEAgHDAkQDgIDBAULBg0oCSAMAQwvXTPtFzkyLxI5OS8SOTldAD8zXTMvXTMSFzkvMy8zMTABKytdACsrKysBByUTIxMFJyUlNwUDMwMlFwUD70H+uQd9Bv67QgFi/p5CAUYHfQgBSEH+ngN3btn+lAFs2m7Pz27bAW3+k9puzQABAJ0AQwU1BNUACwBXQD4DrAEEvwisCg8HAQcwDUANAgCrCoABAQEqBRANDQY7BasHIAQwBEAEUAQEBBYNDQY7BBgMDAY7BA4LCwY7BC8rKytdPOQr/V085F0AL1085P085DEwASERIxEhNSERMxEhBTX+B6b+BwH5pgH5Ajz+BwH5oAH5/gcAAQBK/o4B9AEdAAMANUAlKgErAjUAOQJFAEgCVQBZAmQAdAAKAgIDVgQvBQEAAAoCGgICAi9dMy9dABD0Mi8xMAFdAQEjEwH0/uiSsAEd/XECjwAAAQBaAjECjgLmAAMAHUAJAUICfwABAAACuP/AswwRNwIvKzMvXQAv7TEwASE1IQKO/cwCNAIxtQABAL4AAAGtAR0AAwAlQAoCVgEILwUBAC0BuP/iQAoLCwY7bwF/AQIBL10r7V0AP+0xMCEjETMBre/vAR0AAAH/6P68AtgGFAADACZAFAMAAQE4AgMUAgIDAgMBIAABAAACLzMvXQA/LzEwhwUuK4d9xAEBIwEC2P25qQJEBhT4qAdYAAACAFP/4QQLBe8ACwAjAMJAFTQBOwtFAUoLehEFOhU1IUoVRSEECbj/8EAYDg83AxAODzcVuQkCIbkDCg8hEAB/AAIAuP/UtA0NAjsAuP/wtAwMAjsAuP/WtAsLAjsAuP/gtAwMBjsAuP/gtA0NBjsAuP/8QCwLCwY7AAAbIaAGwAYCBhANDQI7BhAMDAI7BhYLCwI7BgwNDQY7BgwMDAY7Brj/4rQLCwY7Brj/wLMNETcGLysrKysrKytd7TMvKysrKysrXe0AP+0/7SsrXTEwXQEQAiMiAhEQEjMyEgE2NjU0JicmJiMiBgcGBhUUFhcWFjMyNgQL6fP25unz9ub/AB0YGB4eaVRTax8eFhMgHWtWU2sC6f5v/okBfgGIAZMBdf5+/LZK4pqZ4ktMT09OTOiSnNJTTVNPAAEA4gAAA7gF1gAMAHtAJQW2BgYJAwsDuAEILwABrwABAAUBAAkLCAwMAjsLIAEgA4ADAgO4/+60DQ0COwO4//5ACwwMAjsDDAsLAjsDuP/0tAwMBjsDuP/0QA4NDQY7AwwLCwY7AwMODRESOS8rKysrKytdM+0rOTIvMy9dcQA//Tw/My/tMTAhITUhESE1MjY3MxEhA7j9KgEO/vKZkQmbAQiYA+aIV3n6wgABAG0AAAQEBfAAJgB6QDMaIiUXKx8rITwFNhc5I0wFRhdJI1QXWiFbImUXYBt0F3cbeyB/IhMUFA66GQICJboBCCW4/8BAHwsQNyYmCCE/HE8cAhwaDAwCOxwWJRYcAy8CAcACAQK4/8CzCg03Ai8rXXEXMy8vK13tMy8rAD/9Mj/tMy8xMF0hITU2Njc2NjU0JicmJiMiBgcGBgcjNTY2MzIWFRQGBwYGBwYGByEEBPxpY7BUqnwnIiNcNzVtMipOGAs+3WPQ7CkkJWg6XudFAtzRXqxdu+F4Pl4fHh4bFBEwEdQfO929V5Q/QYA+ZtxAAAEAYf/hA+oF8ABAALxAcBYOJgkpFSkjNgkyEjojNC01OkUJRBJKI0QtRDpVCVoWWiNVLFwxUzpjCWAOYw9kGWkjdQlwDnEPeSMdFRQ2NblgOAE4OCELBwcAugsCJSUpuiEKNjsIDQ0GOzshETYUEQMkLyE/G4AbAhsWDAwCOxu4//S0CwsCOxu4//hADA0NBjsbCBsIYCQBJLj/wLMLDTckLytdMzMvLysrK13tEhc5L+0rLwA/7TMvP+0zLxESOS9d7RI5OTEwXQEiBgcGBgcjNTY2MzIWFxYWFRQGBxUWFhcWFhUUBgcGBiMiJic1MxYWMzI2NzY2NTQmJyYmIyM1MzI2NTQmJyYmAf82bDQwRxwMQd9lZZc9QkOicS9rLi46RT9BuHVw3EsOP9RqPXspKCovKipzQ1VCh6ksIiZcBUMaFRQsE9MjOSkrMIhbe7oZDgksKyuHYWWpQURGNibTLlQnLCxqUVFoHh4XpoB6OFEYGhQAAgAoAAAEKwXRAAoADQB+QB0MDQ03BgcUBgYHDAYHCQ25AQEEBAMHAwMIAAQHDLj/+EAMDAwCOwwgAQAgCAEIuP/etA0NAjsIuP/ytAwMAjsIuP/gtAwMBjsIuP/mtw0NBjsICA0GLzMzLysrKytdMzz9Kzk8LwA/PxI5LzwQ/TwROTmHBS4rBH0QxDEwASMRIxEhNQEzETMhEQEEK7HA/W4Cmrix/o/+CgIA/gACANIC//zPAkb9ugAAAQB8/+ED8wXRAC0AnEAyKgg6CDYUORlKCEMUShlaCFQUWhlqCHoIDCAgHbkoKAYkuiEDCgoRugYKIyMXIT8AAQC4//BACw0NAjsADAwMAjsAuP/0tAsLAjsAuP/0twsLBjsAJSAguP/utA0NAjsguP/4QAsMDAI7IAAgYAkBCbj/wLMJDTcJLytdMzMvKyvtLysrKytd7TMvAD/tMy8/7RI5L/0yLzEwXQEUBgcGBiMiJic1MxYWFxYWMzI2NzY2NTQmJyYmIyIGBxEhFSERNjYzMhYXFhYD80U+P7t0a89MDhdWNDtiPTxyKSUnKykrfU1RpDEDMf2QJEYdcp5JSk8B2my4Q0ROLybTESsTFRcrMCx2UE9mISYfGQsC/6/+dAQEJjc4qAACAFX/4QQbBe0AJQA6AMlARQkcBSMXEBkcFSM5KDI0MjpJKEI0RDpZAlcQUiNSJGQjZCR0NBIdBiy5ICAGEhYWGroSAji5BgoVGA0NBjsVFSYhEAABALj/1rQNDQI7ALj/8LQMDAI7ALj/1rQLCwI7ALj/4EAQDQ0GOwAdLwAyIaAMwAwCDLj/wEAWDBE3DBANDQI7DBAMDAI7DBYLCwI7DLj/5EALCwsGOwwMDQ0GOwwvKysrKysrXe0zMjIvKysrK13tMy8rAD/tP/0yLxESOS/tEjkxMF0BFAYHBgYjIiYnJgI1NBI3NiQzMhYXFSMmJiMiBgc2NjMyFhcWFgc0JicmJiMiBgcGBhUUFhcWFjMyNgQbTEBDpmRlpT9NV1BTUQEAqDJWIQkbZjq65RVHlllXg0dSUMswNidjNEaEQAICPS0rWzV4lQHjc8JBRUdEQ1EBD8bCATl0cX8KC78PGfv3MjYjNT6+iFx8LCAUKigWKR+bvjEvJqwAAAEAYwAABBQF0QAGAExALwMAAQGeAgMUAgIDAAIDugUDAggDAQArAnQCAgICBBAAAQAAIAQwBEAEYASABAUEL10zL10SOS9dEjk5AD8//RE5MTCHBS4rh33EAQEjASE1IQQU/XzVAqr8/gOxBPL7DgUirwAAAwBK/94EFAXzAA4AHQA6AR+2FQwMDQY7DLj/9LQMDQY7C7j/9LQMDQY7Crj/9LQMDQY7Cbj/9EBjDA0GOyoRMAgwDjAZMjJACEAOQBlCMlkBWgVUCF8RWhJfF1QZVB1TKVMzXTdkCmUXbCFgJmMsYzBkNmk5fBJ2LHMwHycVDDUJEgYeA7cuAhu4HgoAIDExOBUoKw8hNAwQOAE4uP/gtA0NAjs4uP/StAsLAjs4uP/gtQ0NBjs4Brj/9LQNDQI7Brj//kARDQ0GOwYhKzgrGCGgJMAkAiS4/8BAFg4RNyQQDQ0COyQMDAwCOyQWCwsCOyS4/+BACwsLBjskDA0NBjskLysrKysrK13tMzMv7SsrLysrK105Oe0ROTkRMy/tAD/tP+0SFzkxMF0rKysrKwE0JiMiBhUUFhcWFhc2NhM0JicmJicGBhUUFjMyNgEiJicmJjU0Njc1JiY1NDYzMhYVFAYHFRYWFRQAAyuGd22LR0cffzRXPhxIZyJxR1NYo3t+mP7ob7ZAP0GBe25q/sPL9XVugob+6wR2ZIZ4ZkpmKRE8EUON/XFcbDgTLB43oWeHsJf+1EI+PKVcecs8BkCYcqjg1aZkxDcGPa6Jv/7+AAIAQ//jBAkF7wAUADoAxkBABDEKOBYxGjgpJT0CPQg1C00CSwhFC1QXWCVaOFs5azhsOXoCcCITMhsPuTU1Jwa5GwIrKy+6JwoyEgAhECEBIbj/1rQNDQI7Ibj/8LQMDAI7Ibj/1rQLCwI7Ibj/4LUNDQY7ISq4/+BAJQ0NBjsqISoJIXAVgBWgFcAVBBUWDQ0COxUWDAwCOxUWCwsCOxW4/+RACwsLBjsVEA0NBjsVLysrKysrXe0zMy8rLysrKytd/TIyAD/9Mi8/7RI5L+0SOTEwXQE0JicmJiMiBhUUFhcWFjMyNjc2NiU0Njc2NjMyFhcWEhUUAgcGBiMiJic1MxYWMzISNwYGIyImJyYmA0A4MSxaNnuSMDYmYDdAlDcBA/0DS0E+s1xnpz1NVVNRVvGxKFonChlqN8TgD1CRVVOIRVBSA22YvzQwJLCnXnosHxUtJQ8xnnO+RUJKRUFS/vbLuf61bXR6CQy/DhoBAvA2MiQ0PbsAAAIA8wAAAeIEXQADAAcAJEANAVYCBQZWBQgHAC0GAbj/4rQLCwY7AS8rPP08AD/tP+0xMAEjETMRIxEzAeLv7+/vA0ABHfujAR0AAgB6/o4CJARdAAMABwBKQCwsBCwFLQc0BDoHQwRJB1UEWgdiBHIECwYGB1YIAVYCBQQECgYaBgIGBgAtAbj/4rQLCwY7AS8r7TMvXTMvAD/tEPQyLzEwAV0BIxEzEwEjEwHi7+9C/uiSsANAAR38wP1xAo8AAAEAyQBPBPsEyQAGAFhALwYAAQE4BQYUBQUGBAMCAjgFBBQFBQQCBAUDAwYBBQUAYAVwBQIABgYEAwUDBQECLzwzMy8vPDwQPF0ALzMZLzk5MxgvEjk5hy4rh33Ehy4YK4d9xDEwJQE1ARUBAQT7+84EMvy/A0FPAgF4AgGy/nX+dQACAMABagUSA64AAwAHACNAEwW/BgYBvwIHAwYAAhACIAIDAwIvM108LzwAL+0zL+0xMAEhNSERITUhBRL7rgRS+64EUgMOoP28oAAAAQDXAE8FCQTJAAYAWEAvAgEAADgDAhQDAwIEBQYGOAMEFAMDBAYEAwUFAgABAwMBbwN/AwIDAwYAAAUEAgEvPDw8My88My9dAC8zGS8SOTkzGC8SOTmHLiuHfcSHLhgrh33EMTABATUBATUBBQn7zgNB/L8EMgJQ/f+yAYsBi7L9/wAAAgBtAAADkAXvABwAIACbQCYFChUKKwM0GEIKRBhUGGkQZRhzCnMYcxwMBgkICBofFhYSNBoCH7j/wEAPDQ0GOx9VHggdHR8fBioJuP/4tA0NBjsJuP/aQAoLCwY7CQkXDysAuP/gtA0NBjsAuP/WQA0LCwY7AF8AAQCAFwEXuP/AswoPNxcvK10zXS8rK+0SOS8rK+0zLzIvAD/tKz/tMy8REjkvOTkxMF0BFAYHBgYHFSMRNjY3NjY1NCYjIgYHIzU2NjMyFgEjNTMDkEE2NolMsziVKjY8jnJksTcLQ8xbzez+jszMBHNimTo6Yi7kATEiXykzeU1xb0MkzBsr0fri0wACAIT/HgbLBe4AMAA9AJhAXwsCCgkEDRsCGgosHSUfNjBGKkosUwxaKmoZaB1mH2M5fx10H3gsExRAFRo3FLsEBDu+CBMTNb0ODgguKCQkIbwoG7wuAiQkACsFEQURMSoUFBg4KgsLHhi8AAA/HrwruP/AswkONysvK+0RMy/tETkv7RI5L/05OS8vERI5LwA/7S/9Mi8REjk5L+0zLy/tMy/tKzEwXQEUAgchJwYGIyImNTQSMzIWFzUzETM2NjUQACEgABEQACEyNjcVBgYjIAAREAAhIAABESYmIyIGFRQWMzI2BstMR/5bGUNxYZrE8ZtIaDWf4yYh/rP+yP7Y/n8BdgEuUbNQVK1U/p7+MAHfAVgBcAGg/as4XjNximhyPXcCl4v+/Wx0OUP36+sBBiQeMPy2R+JcAUcBj/5R/s3+tv5nFhiOFBAB5gGDAW8B+P4l/YUCBh0ZqbGgqjoAAv/2AAAE1gXRAAcACgDgsQYCQ1RYuQAC//RAHw0NBjsBDA0NBjsICgUKNAYGCQABAwQIAAgDBAkABwm4/963CwsGOwkJDAsREjkvK9TNENTNAD8/PxI5OS/twBDAMTABKysbQEoFAAoDJQAqAwQJCQoIBYcEAQQUAwIDCQoGhwcBBxQAAAEFAQoCFQEaAiYBKQJFAEoBRQJKA3UAegMMBjQwCkAKAgoJCgEDAwAIA7j/wEAVCRE3AwMMDwwfDD8MfwyPDAUPDAEAL11dETMvKwA/PD85OS9d7TEwAV2HEP1dwMDAhxD9XcDACMABXVkjATMBIwMhAwEDAwoB9vQB9tGH/ceHAonm5QXR+i8BoP5gAkkCvv1CAAMAlwAABIkF0QAVACQAMwElQCAFDBUMJww5MUoUSjFVAlYVaSN6GQooDgsLBjsSESw0Hrj/wEBQDw8GOx4eBx00CAMtNAcIFgYNDQY7FhUSLAAPQA9QDwMPFhAQBjsPFg8PBjsPDAwMAjsPDA0NAjsPBgwMBjsPBg0NBjsPDgsLBjsPDwclFQC4/8CzCRY3ALj/6rQPDwY7ALj/4LQMDAI7ALj/8rQNDQI7ALj/5LQMDAY7ALj/3rQNDQY7ALj/ykASCwsGOwAANQ81QDXPNQMeLBQHuP/6tBAQBjsHuP/4tA8PBjsHuP/+QAsNDQI7Bw0NDQY7B7j/xLYLCwY7B2Q0EPYrKysrK/0yXREzLysrKysrKyvtEjkvKysrKysrK10SOe0rAD/tP+0SOS8r7Tk5MTArAV0BFAYHBgYjIREhMhYXFhYVFAYHFRYWATQmJyYmIyMRMzI2NzY2EzQmJyYmIyMRMzI2NzY2BIlUR1TAmP5VAYufn0lQSm9ihZL+7CQoMHZovuFdWC8tJkYwSS9vZuGhgpY5ODQByW+qN0I3BdEVJyuLXmmmLwgkvwINNk8XGwz+TBMeHV79oVRtJhkO/doYJydjAAEAQv/lBKwF7AAzAMFAOQgEBxEIMBgEGhYUKisWJCo6FjMqRhFIL1oCWgRXClcREG4TfxMCExMaNAwCYC1wLQItLSY0AAoTLrj/wLMJHjcuuP/MQBILCwY7Li41DzUBDzUfNV81AyC4//pANA0NBjsgFXcGAQYWDAwCOwYgCwsCOwYWDQ0COwYOEBAGOwYODw8GOwYWDAwGOwYWDQ0GOwa4/+C2CwsGOwZmNBD0KysrKysrKytd7StdXREzLysrPAA/7TMvXT/tMy9dMTBdBSImJyYCNTQSNzY2MzIWFxYWFxUjJiYnJiYjIgYHBgYVFBYXFhYzMjY3NjY3MxUGBgcGBgLdkvVZWWJfW1n0l0uDODBlMRAaUjs5hlhfqkA/RkpAPqheVpI5N1AXDzFXPkFvG2JhYQEivLsBFmdkaRYRDy0b7xhEIR8oTkxM5pCZ3UxKSyogH0EX7BcqFBUWAAACAJcAAAUtBdEADgAdAKRAIR9ACwsCOzgSNhtIEkYbZwIFFjQIAxc0BwgPFWgAdwACALj/4LQMDAI7ALj/9LQNDQI7ALj/6rQMDAY7ALj/6rQNDQY7ALj/2EAPCwsGOwBnHw8fQB8CFxQHuP/+tA0NAjsHuP/0tBAQBjsHuP/4QAsPDwY7Bw0NDQY7B7j/yLYLCwY7B2QeEPQrKysrK+1dEPYrKysrK13tAD/tP+0xMF0BKwEUAgcGBiMhESEyFhcWEgc0JicmJiMjETMyNjc2NgUtpYtx6bX+qQFT0u9UkJ7OcnBPtIaXl4TGUmdoAufM/rhcRzAF0T83X/7F16zzRDAq+4MqOUbpAAEAlwAABDoF0QALAHZAGAg1BQUABDUBAwk1AAgABhAGIAYDBgIGC7j/4EAOCwsGOwtnDQ8NAQUJFAC4//60DQ0COwC4//S0EBAGOwC4//xACwwMBjsABw0NBjsAuP/CtgsLBjsAZAwQ9isrKysr/TJdEPYrMjIvXQA/7T/tEjkv7TEwMxEhFSERIRUhESEVlwOj/SMCq/1VAt0F0bD+aLD917AAAQCXAAAEEgXRAAkAcUARBTUCAgcBNQgDBwgAAwEDAwC4/8CzCRE3ALj/zEAQCwsGOwAACw8LHwsCAgUUB7j//rQNDQI7B7j/+rQQEAY7B7j/+LQPDwY7B7j/wrYLCwY7B2QKEPYrKysr/TJdETMvKyszL10APz/tEjkv7TEwASERIRUhESMRIQQS/UsCmP1oxgN7BSH+XLD9MwXRAAABAEL/4wT1BewAMADuQEQyQAsLAjsKAwYRHQMaFioWNxE0LEcRWgJaBFYKaxVrFw0oNUApASkpDAB/EwETExo0DAIjNAAKEykpBhMnFAAqECoCKrj/6kALDAwCOyoCDQ0COyq4/+q0DAwGOyq4/+60DQ0GOyq4/9JADQsLBjsqKjIPMkAyAh24//hANA0NBjsdFXUGAQYWDAwCOwYgCwsCOwYWDQ0COwYOEBAGOwYODw8GOwYWDAwGOwYQDQ0GOwa4/+C2CwsGOwZmMRD0KysrKysrKytd7StdETMvKysrKytd7TMSOS8vAD/tP+0zL10REjkvXe0xMF0BKwUiJCcmAjU0Ejc2JDMyFhcWFhcVIyYmJyYmIyIAERQWFxYWMzI2NxEhNSERBgYHBgYDBp7++l5eZGVeWwEKnkuKPzJ7JhElT0g8nFrX/vdGQkC1cVSmOf6oAhwmfzdJdh1gYmMBJL60AR1lYmoWEw81E+8hOyIeKP68/vOW4E5NURgYAYGu/XYRNA8WFgAAAQCXAAAE0AXRAAsBL7UNQAsLAjuxBgJDVFiyAzUIuP/AQBAPDwY7CAgFCgcDAQUIAAEJuP/0tBAQBjsJuP/gtA8PBjsJuP/8tAwMBjsJuP//tA0NBjsJuP/qtgsLBjsJAAG4//S0EBAGOwG4/+K0Dw8GOwG4//q0DAwGOwG4//y0DQ0GOwG4/+ZACwsLBjsBAQ0MCAMFuP/0tBAQBjsFuP/4QAsPDwY7BQQNDQY7Bbj/xLcLCwY7BQUNDBESOS8rKysr3cAREjkvKysrKysQzSsrKysrEM0AP8A/wBI5LyvtMTAbQBUDNQgIBQoHAwEFCAkCFAAMCwsCOwC4//RAFgwMAjsADg0NAjsAZQ0PDUANAggDFAW4//62DQ0COwVkDBD2K/0yXRD2Kysr/TIAPzw/PBI5L+0xMFkBKyEjESERIxEzESERMwTQxv1TxsYCrcYC2f0nBdH9uAJIAAABAF0AAAKfBdEACwCjsQYCQ1RYQAwJBDIGAwoDMgEIAgO4//K0EBAGOwO4//RAEQ8PBjsDEAwMBjsDHA0NBjsDuP/UtwsLBjsDAw0MERI5LysrKysrzQA//cA//cAxMBtANgkEMgYDCgMyAQgIC6AKFAUCoJADoAOwAwMDDgsLAjsDBgwMAjsDAg0NAjsDAw0MDw1ADVANA10REjkvKysrXe0y/e0yAD/tMj/tMjEwWSEhNTMRIzUhFSMRMwKf/b6+vgJCvr6YBKGYmPtfAAEACf/rAsgF0QAVAHZAGwkBGAFzAXMOgwEFEjMVAwcHCzQDCRMTBxEUALj/9LQMDAI7ALj/5rQNDQI7ALj/8kALEBAGOwAODw8GOwC4//S0DAwGOwC4//60DQ0GOwC4//S3CwsGOwAAFwcvETMvKysrKysrK+0SOS8AP/0yLz/tMTBdARQGIyImJzUzFhYzMjY3NjY1ESE1IQLI78kwoTYLKXk/XG0aGw/+xQIBAYPE1BEMvQ4iKicodEwDZZ4AAAEAlwAABNQF0QALAOhAXBkJVgFcCQMoCTgJSgloCYkJ2AkGCgEeARkCKgEkCzkBOQk1C0kBSQlFC1wBZQt8AXsJDwICA2QBAQGzAAsACAkgCQ43CbMCCwoDCnQLAQgCBQoHAwEFCAsCCgoAuP/AswkQNwC4//C0DQ0GOwC4/+BAEAsLBjsAAA0PDUANAggDFAW4//60DQ0COwW4//q0EBAGOwW4//hACw8PBjsFDA0NBjsFuP/ItgsLBjsFZAwQ9isrKysr/TJdETMvKysrMy85OQA/PD88Ejk5MTBdAYcQwMB6/SsYBMABhxB6/V0YCMABXXFyISEBBxEjETMRATMBBNT+//3hV8bGAmLx/ZgCtWL9rQXR/VMCrf1nAAABAJcAAAP2BdEABQBVtgIDBDUBCAC4/8CzChE3ALj/vkAKCwsGOwAABwQUAbj//rQNDQI7Abj/9EALEBAGOwELDQ0GOwG4/8i2CwsGOwFkBhD2KysrK+0RMy8rKwA/7T8xMCEhETMRIQP2/KHGApkF0frfAAEAlwAABZMF0QAMARxAF1YKATgCOAU2Cm8CbwVgCn8CfwVwCgkDuP/ytAsLBjsEuP/yQDkLCwY7VQlWCloLA3YJAQUKAgMJAgQSBCkENQREBFQEawQHBCANDQI7BAQHCwkDAQcICQoLAwUCFAC4/+xAEQwMAjsABgsLAjsAAg0NAjsAuP/otBAQBjsAuP/qtA8PBjsAuP/6QAsMDAY7AAwNDQY7ALj/5kAbCwsGOwBlDg8OUA4CBQoMDAI7BQoMDAY7BRMHuP/0tBAQBjsHuP/+tA0NAjsHuP/4QBEPDwY7BwUMDAY7BwMNDQY7B7j/yLYLCwY7B2QNEPYrKysrKyvtKytdEPYrKysrKysrK+0RFzkAPzw/PBI5LytdEhc5MTABXXIAKytdciEjEQEjAREjESEBASEFk8b+fHj+f7kBDgF0AWcBEwUD/JcDafr9BdH8wwM9AAEAlwAABMAF0QAJATdATgtACwsCO3YHAQwHGwckBzQHRQdQB2kCYQd5AnEHCg8BAAYfAREGJgE0BkQGUwZrAWAGfAFwBgwMAQQGAloBVQYCAQYNEQY7AQwLDAY7Brj/9EARCxEGOwIHAQgGAwEECAYBAge4//y0DAwCOwe4//RADQwMBjsHEwAgDw8GOwC4//C0EBAGOwC4//ZAEQwMAjsADgsLAjsAFg0NAjsAuP/+tAwMBjsAuP/+tA0NBjsAuP/mQBsLCwY7AGULDwtACwICBAwMAjsCBAwMBjsCEwS4//C0EBAGOwS4//60DQ0COwS4//hAEQ8PBjsEAgwMBjsEDA0NBjsEuP/GtgsLBjsEZAoQ9isrKysrK+0rK10Q9isrKysrKysr/SsrETk5AD88PzwSOTkxMAErKytycV0AXV0BKyEjAREjESEBETMEwN79brkBGQJXuQUE+vwF0ftlBJsAAgBC/+EFZwXwABcAKQDFQCEKCQUVGgkVFVoJVRUGHjQVAic0CQoYBg0NBjsYFXgDAQO4/+q0CwsCOwO4/+C0DQ0COwO4/+y0DAwGOwO4/+y0DQ0GOwO4/9xAFAsLBjsDZysPKx8rPyt/KwQPKwEkuP/4QDQNDQY7JBV3DwEPFg0NAjsPFgwMAjsPIAsLAjsPDhAQBjsPDg8PBjsPFA0NBjsPFgwMBjsPuP/gtgsLBjsPZioQ9isrKysrKysrXe0rXV0Q9isrKysrXe0rAD/tP+1dMTABFhIVFAIHBgYjIiYnJgI1NBI3NjYzMhYTNCYnJiYjIgYHBgYVEBIzMhIEtFVeXFdb85KX8ldWXF1WVvOWmPQ5QDo7p2hsoT47P/bPz/UFJmL+3rq1/txjaGNmZWMBIre8ARxmY2dq/WKU5EtNTUtPTOaR/tv+yQE3AAIAlwAABEMF0QAQAB8Ar0AsOhQ6HUsUSx1QDlQPZQ94HAgZNAAHEAdPBwMHBwkYNAoDCQgREA0NBjsRFQC4/8CzCRE3ALj/9LQMDAI7ALj/1rQMDAY7ALj/zEAUCwsGOwAIDQ0GOwAAIQ8hARkHFAm4//60DQ0COwm4//JACxAQBjsJBg0NBjsJuP/8tAwMBjsJuP/GtgsLBjsJZCAQ9CsrKysr/TJdETMvKysrKyvtKwA/P+0SOS9d7TEwAV0BFAYHBgYjIxEjESEyFhcWFgc0JicmJiMjETMyNjc2NgRDRT1N0J+oxgF2hLpHU17ONTYvfV2kh3iUMSwoBBBhrT1MTv3VBdEsMTmvgU1yJB8a/a0nMi1qAAACAEL+eAVsBfAAKAA6APBAPFQhZSF1IQMoKCQ0AwseBgkJCQYVGQkWFVkJVhUGLzQVAjg0CQoeEwYAACkGDQ0GOykVGwkGHQMPeRsBG7j/6rQLCwI7G7j/4LQNDQI7G7j/7LQMDAY7G7j/5LQNDQY7G7j/3EAUCwsGOxtnPA88Hzw/PH88BA88ATW4//hANA0NBjs1FXcPAQ8OEBAGOw8ODw8GOw8WDAwCOw8gCwsCOw8WDQ0COw8WDAwGOw8cDQ0GOw+4/+C2CwsGOw9mOxD2KysrKysrKytd7StdXRDmKysrKytdERc5EO0rMy8v7QA/7T/tXRI5OT/9Mi8xMF0BBgYjIiYnIiIjIiYnJgI1NBI3NjYzMhYXFhIVEAIHFhYXFhYzMjY3MwM0JicmJiMiBgcGBhUQEjMyEgVsNnc7p9EKDRgJl/NWVlxdVlbzlpj0VFVe4sQFHRcbTUMobBgb00A6O6dobKE+Oz/2z8/1/pQODryuZ2NjASK3vAEcZmNnamBi/t66/t/+iEM4WRofHRkKA6CU5EtNTUtPTOaR/tv+yAE4AAIAlwAABRgF0QAQAB8A4EBQRQ9FHQIKARkBLAE6AD0BTAFKFFoBWRRZHWsBahR5AXcQexQPAQwNDQY7AgGzABAAEAcaNAJADw8GOwICBRg0BgMABQgRFQ8NAQ0MCwsCOw24//RAGwwMAjsNEA0NAjsNDAwMBjsNDA0NBjsNDRAFALj/wLMJETcAuP/IQAsLCwY7AAAhGQMUBbj//rQNDQI7Bbj/9EALEBAGOwUEDQ0GOwW4/8S2CwsGOwVkIBD0KysrK/0yETMvKysSOTkvKysrKytd7QA/PD/tEjkvK+0SOTEwAYcQev0YwAErXQBdISEBIxEjESEyFhcWFhUUBgcTNCYnJiYjIxEzMjY3NjYFGP7//ijixgGAgK1OTlumj2YuMCpwU8SuVYgwKykCUP2wBdEcMzKedaTcNQGmQWUgHBf9zh4vKnQAAAEATf/lBEIF7AAzAUxARi8NKRQrKzkCOQ02HDUnSgJFCkoMRRxJJEQnWgJWClkPWhhVHF4kZQZqE2wVZhhlHGYoYCxoMHYcHHoOdCgCKCsRDgQAGh64/8BAFQsLBjsfHi8efx4DHh4iNBoCcQUBBbj/wEAhCQs3BUALCwY7BQUINAAKKCsRDgQuFx4eCwwNDQY7CxUuuP/AQAoJFDcuDAsLAjsuuP/UtA0NAjsuuP/otA8PBjsuuP/utAwMBjsuuP/mtA0NBjsuuP/QQA8LCwY7Li41DzVPNQIEBCW4//RAMA0NBjslFaAXsBcCFxALCwI7FwwMDAI7FwwNDQI7Fw4PDwY7FwwMDAY7FwwNDQY7F7j/3LQLCwY7F7j/wLMMETcXLysrKysrKysrXe0rMy9dETMvKysrKysrK+0rMy8REhc5AD/tMy8rK10/7TMvXSsREhc5XTEwXQUiJic1MxYWMzI2NTQmJyYmJyYmJyYmNTQkMzIWFxUjJiYjIgYVFBYXFhYXFhYVFAYHBgYCNqLjZA5i+HOkqFhgRXJWTXovLjMBGtt9318PR956iqpkXz+2PJqOR0BItRtDMfhcZYlwWXAbFBoWFD4yMYVXtfUyLu1BYYFpX3AaESsSL76LV6o7QUYAAAH//wAABK0F0QAHAKqxBgJDVFhACwYBNQMDAAgFBwIAuP/0tBAQBjsAuP/0QAsPDwY7ACAMDAY7ALj/6bQNDQY7ALj/1LcLCwY7AAAJCBESOS8rKysrK8bdxgA/P/3AMTAbQBwGATUDAwAIDwk/CQIFWwcUAlsQACAAkACgAAQAuP/8QAsMDAI7AAwLCwI7ALj/7kANDQ0COwAACQhvCX8JAl0REjkvKysrXeT95F0APz/9MjEwWSERITUhFSERAfP+DASu/gwFIbCw+t8AAQCF/+EEugXRAB0A3UAMH0ALCwI7OgBKAAIAuP/otAwMAjsMuP/0tA0NBjsAuP/oQA0NDQY7FwcDJw8BDzQAuP/oQAkMDAY7AAoWFBe4//xAEQwMAjsXDgsLAjsXGg0NAjsXuP/utBAQBjsXuP/gtA8PBjsXuP/0tAwMBjsXuP/7tA0NBjsXuP/gQA8LCwY7FxcfDx9AHwIIFAe4/8BACgkRNwcGCwsCOwe4//ZACxAQBjsHDg0NBjsHuP/EtgsLBjsHBx4RMy8rKysrK+1dETMvKysrKysrKyvtAD8r7V0/PCsrK10xMAErBSImJyYmNREzERQWFxYWMzI2NzY2NREzERQGBwYGAp+DxEVOQMYaJiiJY12QKCUbxj9PR70fRURO2Z8DofxfZ404PD4+PDmKZAOm/F+b3k1FRAAAAf/4AAAEzgXRAAYA+rEGAkNUWLkABf/etAwRBjsBuP/0tA0NBjsBuP/6QBgLCwY7AgYLCwY7BQMCBgMDAwIIAAYDBAa4/+BADQsLBjsGBCALCwY7BAW4/+C3CwsGOwUFCAcREjkvK80rzSsQzRDNAD8/PxESOTEwASsrKwArG0A9BQQFBwY3BlcGhgYEBhQAAAEFBwQ3BFcEhgQEBBQDAgNMAEYBSQJDA1YBWQIGAAUCAwMCCHkAdgMCAgEDALj/wEAhDBQ3BQAVACQAnwAEAAAIDwggCD8IAw8IAQMDEwMkAwMDL11dXREzL10rETk5XQA/PxI5OTEwAV2HEP1dwIcQ/V0IwFkBASMBMwEBBM7+ANb+ANQBnAGcBdH6LwXR+ywE1AAAAQAaAAAHHQXRAAwBC7YDEAoRBjsLuP/wtAoRBjsIuP/wQJ4KEQY7BQMSAyIDNwNbA2sDfAMHCAQHCxkCFgQrAiQEJgo4AjYKSAJICUYKDA0BCwIEBAIFBAgMCxoEKAMnBCkJJgo8AjQENwpIBEcKSQtYAmgCZwh4BIoChgTYBNcF1wrnBecI9wH3Cx4LCAwPNwsKCwIMEwABAAgJCAQHFAYFBikAJwEoBSYGSgBLAUQFRQYICAMLAwUACQYDAQUIALj/wEAJCRE3oACwAAIAuP/UQA8LCwY7AAAOHw4/Dl8OAwa4/+C0CwsGOwYvK10RMy8rXSsAPzw/PDwSFzkxMAFdhxD9wAjAAYcQ/cAIwAErXXEAXSsrKwEBIwEBIwEzAQEzAQEHHf6K3/7R/tja/oPLASwBKskBLQEqBdH6LwTU+ywF0fsqBNb7HgTiAAEACAAABJ0F0QALARK5AAj/8EBKDxEGOwkLNgU5C0wDTAdIC1gCWAhaC2YFawsLCAgHBQQFBgQJAgIBCwoLAAoDCAgJCwALCgAHAgIDBQYFBAYBASAMDzcJIAwPNwO4/+CzDQ83B7j/4LYNDzcJCgMDuP/6QBANEQY7AxMECRQEBAkBAAcHuP/6QB4NEQY7B2gGARQGBgEICgACBAQIBgMBAwcJBAYAlgq4/8BADgkRN6AKsAoCDQotCgIKuP/UQA8LCwY7CgoNBpYCBCIEAgS4/+C0CwsGOwQvK13kETMvK11dK+QSFzkAPz8XOTEwhwUuKyuHfcSHLhgrK4d9xCsrKyuHCBDECMSHCBDECMSHCBDECMSHCBDECMQBXQArISMBASMBATMBATMBBJ3j/pX+j9YB2f414gFkAWnX/i4CVP2sAukC6P23Akn9IgAB//UAAASpBdEACACuuQAH//JANAsLBjskBzQHRAdmB3MHBQcGBwgTAAEABwYUBQQFAAcEAQQDBQMDCCQAKwUCBRYLCwY7BQC4/+pAGwsLBjsAAAEUBQ8KEAQgBD8KoAQFBAwLCwI7BLj/8rQNDQI7BLj/9EALDxAGOwQgDAwGOwS4/9ZADQsLBjsEBAoJbwp/CgJdERI5LysrKysrXTP9Mi8rLytdAD8/Ehc5MTABhxD9wIcQ/QjAAF0rAQERIxEBMwEBBKn+Ccb+CdwBgAGGBdH8wv1tAn4DU/1vApEAAAEAPAAABEwF0QAJAHZAJzoDNQhKA0UIWgNXCGoDZwgIAwcICBMCAxQCAgMCCDUBCAcDNQUDCbj/7rcLCwY7CQkDB7j/wLMJDzcHuP/gQAsLCwY7BwcLBAQIArj/6rQLCwY7Ai8rMzMvETMvKyszMy8rAD/tOT/9OYcFLiuHfcQxMAFdISE1ASE1IRUBIQRM+/ADHf0HA9j82gM6uARpsLP7kgAAAQCm/ngCrgYUAAcAJkAXBb0CAQa9AQsDAAAGHwABEAEgAVABBAEvXe0zLzwAP+0/7TEwASERIRUhESECrv34Agj+pwFZ/ngHnI/5ggAAAQA0/rwDJAYUAAMAMUAdRwNnA3oBAwEAAwM4AgEUAgIBAAIBIABIAAIAAAIvMy9dAD8vMTCHBS4rh33EAV0BIwEzAySp/bms/rwHWAAAAQBi/ngCagYUAAcALUAOBL0HAQO9AQsDHwAABQG4/7xACgsLBjsgAVABAgEvXSs8My/tAD/tP+0xMAEhNSERITUhAmr9+AFZ/qcCCP54jwZ+jwAAAQCFAqoFTQXRAAYAXEA5WAYBAgECAwE4AAYUAAAGAgMCAQM4BAUUBAQFAQIFDwMfAz8DTwNfA28DBgMDBQMAAAAEEAQgBAMEL10zLwA/My9dEjk5MTCHBS4rCH0QxIcFLhgrCH0QxAFdASMBASMBMwVNxv5h/mLFAiV+AqwCcf2NAycAAf/w/tQEbv9WAAMAEbYBqgIAAAUCLxEzLwAv7TEwASE1IQRu+4IEfv7UggABAPgFFgKeBowAAwAgQBJIAVkCaQJ5AgQCAmABAQEAAAIvMy8AL10zLzEwAV0BIwEzAp6V/u/zBRYBdgACADr/4QOzBHgADAA2AZOxBgJDVFi5AAz/6rQNDQY7ALj/6kAMDQ0GOwABDQoTHz0BuP/AQB0MDAY7EAEBAAEBAQETJj8uBApBEzYIEwo1Nh8ANrj/9EALDAwGOzYMDw8GOza4/+BAIgsLBjs2Njg3BxkMEBAGOxkMDw8GOxkMDAwGOxkWDQ0GOxm4/9y3CwsGOxkZODcREjkvKysrKyvNERI5LysrK9DAEM0APz8Q7T/tEjkvXV0r7RESORE5MTAAKysbtjhADAwCOwy4/+q0DQ0COw24/+q0DQ0COwC4/+q0DQ0COyy4//CzFhk3Lrj/8LMJCjcruP/AtQ4RNwE9H7j/wEAcDA03Hx8TLk8qASoqJj8uBAAOEzYICkETCh8ANrj/+EBJDAwCOzYaNRoPDwI7NRoMDAI7NQYNDQI7NW84GRAOEDcZEAkLNytACQs3KysHGxkWDw8COxkgCwsCOxkaDAwCOxkSDQ0COxlwNxD0KysrK+0zLysrKxD2Kysr/Ss8PAA/7T8RMzM/7TMvXRESOS8r7SsrMTArKysrAStZAREGBgcGBhUUFjMyNhcGBgcGBiMiJicmJjU0Njc2JDc1NCYnJiYjIgYHIzU2NjMyFhcWFhURIwL4Q80/S2JsaFmQPxdNJDJdVEV8Ly02YmpeAQCUKCQkaDdBsFgLNMJfc54/PTy7ARMBNgYVExdfVWBiTWQRPRIaHDQvLodLdKMwKyEIJEJRFhcPJyW/DyQkLy6Saf0EAAACAIj/4QQxBhQADAAdAT2xBgJDVFhAEgYYA0IbBBYBFQgHEwpAEAoADbj/8LQQEAY7Dbj/6LQPDwY7Dbj/2rQMDAY7Dbj/8LQNDQY7Dbj/0kALCwsGOw0NHx4YBxO4//y1DAwGOxMVuP/0QAsPDwY7FQgNDQY7Fbj/yrcLCwY7FRUfHhESOS8rKyvdK8DAERI5LysrKysrzQA/7TMzPz8/7TMzMTCwC0tUWLkADP/0OFkbQDAfQA8PAjsfQAsLAjs6ATMMNg5LAUIMRQ5WHGYcdQcJBhgDQhsEFgEVCAcTCkAQCgC4//hAEwwMAjsAGw0WDw8COw0WCwsCOw24//K0DAwCOw24/9ZAIA0NAjsNcR8YBxMIDAwCOxMaFQYLCwI7FQINDQI7FW4eEPYrK/0rPDwQ9CsrKyvtKwA/7TMzPz8/7TMzMTBdASsrWQE0JiMiBgcRFhYzMjY3EAAjIiYnByMRMxE2NjMyEgNveodNnUBHbkKQpML+9shbgT8MsLxHpmm92gIyyM9IN/2AIx3M6/7u/rItJjQGFP3UQFT+0QAAAQA7/+cDjgR3ACcBDLEGAkNUWEA2LxA/EAIQDxc/DAQiHSAhMCECIR0/AAkPIiIpKBoGEhAQBjsGFg8PBjsGHAwMBjsGFg0NBjsGuP/gtwsLBjsGBikoERI5LysrKysrzRESOS+wC0tUWLkAIv/qOFnAAD/tzV0SOT/tOc1dMTAbQA47GTEbTRlAG1kCVQoGIrj/wEAKDhECOyJADhA3Ibj/wEAJCw03EEALDTcPuP/AQBkOETcQEA9ADhECOw8XPwwEISEiHT8ACQ8iuP/AQCYJHTciIilfKQEaGwYWDw8COwYaCwsCOwYaDAwCOwYaDQ0COwZwKBD0KysrK+1dETMvKzwAP+0zMy8/7TMrMy8rKysrKzEwXVkFIiYnJiY1NDY3NjYzMhYXFSMmJicmJiMiBhUUFjMyNjczFQYGBwYGAkRzwEVFTE9CQsVxXKtDCxQ/LSdqMZKxq5hcpkALHFQiMEwZR0hI25ST1klJTzQi0xEsFxQe3crG3Uw80w0lCQ4PAAIAO//hA+QGFAAZACYBKLEGAkNUWEAUGiQCCBcXFBgAHkIUBAEIJEIICgC4//ZAFAwMBjsAFxoBEBAQBjsBBg8PBjsBuP/0tAwMBjsBuP/gQCILCwY7AQEoJyEOEBAQBjsOFA8PBjsOFAwMBjsOFg0NBjsOuP/ctwsLBjsODignERI5LysrKysrzRESOS8rKysrwMDNKwA/7T8/7T8RMzIRMxEzMTAbQCooQAsLAjs6Az0gNCI6Jk8gRCJ5HAcaAggbFxQYAB5BFAQBCCRCCAoXGgG4//hAEwwMAjsBGgAgCwsCOwAKDAwCOwC4/+5AJA0NAjsAbyghGw4WDw8COw4gCwsCOw4aDAwCOw4aDQ0COw5wJxD2KysrK+0Q9isrK/0rPDwAP+0/P+0/ETMzETMzMTBdAStZISM1BgYHBgYjIiYnJiY1NDY3NjYzMhYXETMDESYmIyIGFRQWMzI2A+S8LEArKFY5W5s2NzxMQz2tX1R8Rby8Rm9BkaR+i0qWciUwFBMVTElK2Y2T11BJUyUnAeT6/AKEIhrZzcXRQwAAAgA7/+YEAAR8AB4AKwFdsQYCQ1RYQBYrPA4OACU9BgQgGAEYGBkRPwAJGR8NuP/0tBAQBjsNuP/qtA8PBjsNuP/qtA0NBjsNuP/gtAwMBjsNuP/WQAoLCwY7DQ0tLCsOuP/4QB4PDwY7DgMQEBAGOwMWDw8GOwMSDQ0GOwMeDAwGOwO4/9y3CwsGOwMDLSwREjkvKysrKyvdK8AREjkvKysrKyvNxgA/7TMzL10/7RI5L+0xMBtAIC1ADAwCOyUPLRo0D0UPWSKZBKoEByUYDA03GTAMDzcGuP/4tQ8QNys8Drj/wEAaEhMCOw4OACU9BgQYGBkRPwAJZwwBGRkfGgy4/+S0EBACOwy4/+ZANA0NAjsMcS0/LQErDhAMDAI7DhoDFhAQAjsDFg8PAjsDGg0NAjsDGgwMAjsDIAsLAjsDcCwQ9isrKysr/Ss8XRD2KyvtMy9dAD/tMzMvP+0SOS8r7SsrKzEwXQErWQUgABEQADMyFhcWFhUVIRQWMzI2NzY2NzMVBgYHBgYTJiYnJiYjIgYHBgYHAm3+9f7ZAR7naKA8PED8+sStPncwM0YXCyFiJzdZmAIgHiFnTEtpKyosBhoBLQEVAREBQzxAQLmGZsPOHBYXKxPNDScLDxACxUxuJiosLSssa0cAAQAdAAAC1AYeABgA57EGAkNUWEAhGBUAAAQ/FQALDj4RCAURBQ0ICQkADgiWCwAPAA8RCxoOuP/2QBEQEAY7DiQPDwY7DgwMDAY7Drj/9LQLCwY7Di8rKysr7cAzMy8vEOUREjkvAD8/PxD9wD/tMi8ROTEwG0A8CBQ5FAIAAAQ/FQALDj4IEQUNCAkJAA4IlgsADw8fDy8PAw8ADxELCAwMAjsLGgAOEA4gDgMOFhAQAjsOuP/6tA8PAjsOuP/6tA0NAjsOuP/+tAwMAjsOLysrKytd7Ss8MzMvXS8Q5BESOS8APz88/Tw//TIvMTABXTEwWQEjJiYjIgYVFSEVIREjESM1MzU0NjMyFhcC1AoZXiV3ZQE3/s+8f3/CtTRkKQVgCRFrjCac/D8DwZwlytILBwACADv+WQPkBHwADAAzAT+xBgJDVFhAIyoFASkEQCYEABoKQR0HMzMTQC8NKQAaEBAQBjsaAg8PBjsauP/oQCMLCwY7Gho1NDIHIBAQEAY7IBQPDwY7IBANDQY7IBQMDAY7ILj/2rcLCwY7ICA1NBESOS8rKysrK83EERI5LysrK9DAAD/tMy8/7TMzP+0zMz8xMBtAPjVACwsCOz4GNAg8DDwbTAZFCEkMfQF9MQlAMwEvGA4PN0kdASoFASkEQCYEABoKQR0HMzMTQC8NDzIBKQAauP/4QA0MDAI7GhosGhAQAjssuP/uQDgNDQI7LAYMDAI7LCALCwI7LG81MjIHGyAWEBACOyAWDw8COyAaDQ0COyAaDAwCOyAgCwsCOyBwNBD0KysrKyvtMy8Q9CsrKyv9Kzw8XQA/7TMvP+0zMz/tMzM/XStdMTBdAStZAREmJiMiBhUUFjMyNgEWFhcWFjMyNjc2NjU1BgYjIgIRNDY3NjYzMhYXNzMREAIjIiYnNQMoRnc7j6R9jEmb/cYTSi80WDRXeSIgGkySbr/iTkI/rFxXf0ALsfj/UqtKAS8CZSId0sS6wjr+UggbDA0QLikpbEViQj8BHAEKi9dLSE4pJjD8Iv7k/vYaFsQAAQCIAAAD9gYUABYBILEGAkNUWEANCxAIQhMEDgEBCA0IALj/+LUMDAY7AAG4/+C0EBAGOwG4//i0DQ0GOwG4//S0DAwGOwG4/+RACgsLBjsBARgXEAy4//i1DAwGOwwNuP/0QAsPDwY7DQYNDQY7Dbj/yrcLCwY7DQ0YFxESOS8rKyvdK8AREjkvKysrK80rAD8/Pz/tOTIxMBtAEwMVFhV2FQMQDQhCEwQOAQENCAK4//hADQwMAjsCGgAWEBACOwC4//60Dw8COwC4/+pACw0NAjsABgwMAjsAuP/qQBELCwI7AG8YEAsIDAwCOwsaDbj/9kAZEBACOw0CDQ0COw0GDAwCOw0CCwsCOw1uFxD2KysrK/0rPBD0KysrKyvtKwA/PD8/7RI5MTBdWSEjETQmJyYmIyIGBxEjETMRNjYzMhYVA/a8DxUXUkdGlUe8vFSkW6W6AnxNhSgqKUs8/L4GFP3NS1DZzgACAH8AAAFVBdsAAwAHASuxBgJDVFhACQVEBgMCBQEIBLj//EAmCwsGOwQABQIQEAY7BQoPDwY7BQQNDQY7BQYMDAY7BQQLCwY7BQC4//K0Dw8GOwC4//i1DAwGOwABuP/0QBcQEAY7AQgPDwY7AQQNDQY7AQwMDAY7Abj/0rcLCwY7AQEJCBESOS8rKysrK80rK8YrKysrKxDGKwA/Pz/tMTAbQAkFRAYDAgUBCAS4//q0DxACOwS4//pAJgwMAjsEnwUCDxACOwUEDAwCOwVgAAgMDAI7ABpPAbABwAHQAQQBuP/AswkPNwG4//y0EBACOwG4//5AHg8PAjsBAg0NAjsBBgwMAjsBBAsLAjsBAQkITwkBCbj/wLILDzcrXRESOS8rKysrKytd7Sv0KyvtKysAPz8/7TEwWSEjETM3IzUzAUi8vA3W1gRdu8MAAv+m/lkBugXbABUAGQDUQDcbQAwMAjsLARsBKwEDF0QYAxM+FAUHBws/Aw0UHwcvBwIHFwYQEAI7FwwNDQY7Fw4LCwY7F58WuP/8QAoLCwY7FhYHFAMSuP/4tAwMAjsSuP/8tA0NAjsSuP/4QAoMDAY7EhqvFQEVuP/6QBEQEAI7FQ4NDQI7FRYMDAI7Fbj/6rQLCwI7Fbj/6kALEBAGOxUCDQ0GOxW4/+C0DAwGOxW4/9q2CwsGOxVvGxD0KysrKysrKytd7SsrKxczLyvtKysrL10vAD/9Mi8/7T/tMTBdASsFFAYjIiYnNTMWFjMyNjc2NjURIzUhNyM1MwG5zbQfTSYLFjUYS2EYFg/KAYYB1tYgv8gGBqgFCSUoJG5PA5Scu8MAAQCIAAAEJgYUAAsBOrEGAkNUWEAOAwIICwQFCgUHAQEFCAu4/+63EBAGOwkKAQC4/+S0DQ0GOwC4//pACQsLBjsAAAUIA7j/+LUMDAY7AwW4//pACw8PBjsFBg0NBjsFuP/KtwsLBjsFBQ0MERI5LysrK90rwBEzLysrzdbNKwA/wD8/Ehc5MTAbQBkoAtgB2wkDCQEfAR0CHw0tAUgBeQF2CQgLuP/AswwPNwu4//S0DQ0COwi4//RAPw0NAjs1C0ULAgICAwEaAAsACAm0AgsKAwoIAgUKBQcBAQUICwJQCmAKAgoKcAABAA8NAQANCAMIDAwCOwMaBbj/8EATEBACOwUCDQ0COwUECwsCOwVuDBD0Kysr/Ss8ETNdL10zL105OQA/PD8/Ejk5MTABhxDAwHr1GATAAYcQ/QjAAF0rASsrXXFZISMBBxEjETMRATMBBCb3/l9KvLwBuur+NQIbSP4tBhT8cQHY/i0AAQCMAAABSAYUAAMAwbEGAkNUWLQCAQEIALj/8rQPDwY7ALj/+LUMDAY7AAG4//RAFxAQBjsBCA8PBjsBBA0NBjsBDAwMBjsBuP/StwsLBjsBAQUEERI5LysrKysrzSsrAD8/MTAbQBYCAQEIAAgMDAI7ABpPAbABwAHQAQQBuP/AtgkPN08FAQG4//y0EBACOwG4//5AGw8PAjsBAg0NAjsBBgwMAjsBBAsLAjsBAQUEBbj/wLILDzcrERI5LysrKysrXStd7SsAPz8xMFkhIxEzAUi8vAYUAAABAIgAAAY4BHwALgHgsQYCQ1RYQBgeIQokFgdCJxZCIScEIQQcBgAIDwgbCC64//y2DAwGOy4ADrj//LYMDAY7Dg8auP/8tgwMBjsaGwC4/+hACxAQBjsACA8PBjsAuP/+QAsNDQY7ACoMDAY7ALj/0rcLCwY7AAAvD7j/9EAREBAGOw8EDQ0GOw8YDAwGOw+4/9C3CwsGOw8PLxu4//60EBAGOxu4//RAEQ8PBjsbBg0NBjsbAgwMBjsbuP/MtwsLBjsbGzAvERI5LysrKysrETkvKysrKxE5LysrKysrEM0rEM0rEM0rAD8/Pz8/PxDtEO0RMzMSOTEwG0A1MEAMDAI7BSMFKhUjFSomIyYqOR8HCiQnGR4HFkInIQQcBQAPGwgtCAwMAjstGgAWDw8COwC4//xACw0NAjsADAwMAjsAuP/qQBILCwI7AJcKJBoOCAwMAjsOGg+4//pAIRAQAjsPFg8PAjsPAg0NAjsPGAwMAjsPHhoIDAwCOxoaG7j/9LQQEAI7G7j//kAsDw8COxsGDQ0COxsIDAwCOxsGCwsCOxuXAA8QDyAPkA+wDwUPDzAvIDB/MAJdERI5L130KysrKyv9KzIQKysrK+0rETk59CsrKyvtKwA/PDw/Pzz9PDMzETMzMTBdAStZIRE0JicmJiMiBgcWFhURIxE0JicmJiMiBgcRIxEzFTY2MzIWFzY2MzIWFxYWFREFfAwTFEo/OoVHAQO8DBMUSj89hj+8vEqRV2OZKFWiX0h2LC0xAoZNgyUoJkdDES8g/SEChk2DJSgmTDv8vgRdfEpRWmdfYi0yM5hz/SEAAAEAiAAAA/YEfAAWASCxBgJDVFhADQsQCEITBA4GAQgNCAC4//i1DAwGOwABuP/gtBAQBjsBuP/6tA0NBjsBuP/0tAwMBjsBuP/kQAoLCwY7AQEYFxAMuP/4tQwMBjsMDbj/9EALDw8GOw0IDQ0GOw24/8q3CwsGOw0NGBcREjkvKysr3SvAERI5LysrKyvNKwA/Pz8/7TkyMTAbQBMDFRYVdhUDEA0IQhMEDgUBDQgBuP/4QA0MDAI7ARoAFhAQAjsAuP/+tA8PAjsAuP/qQAsNDQI7AAYMDAI7ALj/6kARCwsCOwBvGBALCAwMAjsLGg24//ZAGRAQAjsNAg0NAjsNBgwMAjsNAgsLAjsNbhcQ9isrKyv9KzIQ9CsrKysr7SsAPzw/P+0SOTEwXVkhIxE0JicmJiMiBgcRIxEzFTY2MzIWFQP2vA8VF1JHRpVHvLxUpFulugJ8TYUoKilLPPy+BF18S1DZzgAAAgA5/+EEHwR8AAsAFwEbsQYCQ1RYQA0VPwMIDz8JBAwAEgYAuP/wtBAQBjsAuP/stA8PBjsAuP/wtA0NBjsAuP/otAwMBjsAuP/SQCALCwY7AAAYBhAQEAY7BhQPDwY7BhINDQY7BhgMDAY7Brj/4LcLCwY7BgYZGBESOS8rKysrKxE5LysrKysrEM0QzQA/7T/tMTAbQDQZQA8PAjsZQAsLAjs7DjQQNBQ7FksORBBEFEsWCA8/CQQVPwMKDBsACBAQAjsAIg8PAjsAuP/gtA0NAjsAuP/6QDMMDAI7ABALCwI7AHEZHxkBEhsGFhAQAjsGFg8PAjsGGg0NAjsGGgwMAjsGIAsLAjsGcBgQ9isrKysr7V0Q9isrKysr7QA/7T/tMTABXSsrWQEQACMiABEQADMyAAM0JiMiBhUUFjMyNgQf/vDi6f71ARPh4gEQwp6Sk5+fk5GfAi7+5v7NAT0BEAEYATb+y/7n2dPT2dLZ1QAAAgCI/mQEMQR8ABAAHQE9sQYCQ1RYQBELBgMUQg4ECQUbQAMJCAwRALj/8LQQEAY7ALj/6LQPDwY7ALj/8LQNDQY7ALj/4LQMDAY7ALj/3kALCwsGOwAAHx4LFwe4//i1DAwGOwcIuP/0QAsPDwY7CAgNDQY7CLj/yrcLCwY7CAgfHhESOS8rKyvdK8DAERI5LysrKysrzQA/P+0/P+0SOTkxMBtALR9ADw8COx9ACwsCOzUBOxIxHUMBSxJAHVcPZg8ICwYDFEIOBAkFG0ADCQgMEbj/+EANDAwCOxEbABYPDwI7ALj/2rQNDQI7ALj/9EAYDAwCOwAOCwsCOwBxHwsXBwYMDAI7BxoIuP/wQBkQEAI7CAINDQI7CAYMDAI7CAYLCwI7CG4eEPYrKysr/SsyMhD2KysrK+0rAD8/7T8/7RI5OTEwXQErK1kBEAAjIiYnESMRMxU2NjMyEgM0JiMiBgcRFhYzMjYEMf71zFOAQ7y8RqtlwNfCeolQlUNKaUSSogJM/un+tSYo/iwF+XU/Vf7Q/uu/00c4/YckGtYAAAIAO/5kA+QEfAATACAA3kApIkALCwI7OwM9GjAcPSBMA0saRhxLIAgSBQIRBBhADgQBDB5CBQkRFAK4//hADQwMAjsCGgAaEBACOwC4/+5AEQ0NAjsACAwMAjsAIAsLAjsAuP/ktBAQBjsAuP/wtAwMBjsAuP/mQEALCwY7AG8iGxsIFhAQAjsIFg8PAjsIGg0NAjsIGgwMAjsIIAsLAjsIEBAQBjsIGA8PBjsIHA0NBjsIFgwMBjsIuP/otgsLBjsIcCEQ9CsrKysrKysrKyvtEPYrKysrKysr/SsyMgA/7T8/7RI5OT8xMF0BKwEjEQYGIyICETQ2NzY2MzIWFzczAxEmJiMiBhUUFjMyNgPkvFKcX77iT0E+rF1WfkIMsLxHcECUoICHT5b+ZAIWS0UBMQEQkN1LSVAoJzD8uwJ8IxzWycTTRAABAIgAAALYBF0AEgCeQBsADRANIA0wDQQMCQ8AAH8EjwQCBEQKDwUJCAC4/8CzChI3ALj/wEAPCwsGOwAAFAwHCAwMAjsHuP/6tgwMBjsHGgm4//BAERAQAjsJAg0NAjsJBAsLAjsJuP/8tBAQBjsJuP/+QAsPDwY7CQwMDAY7Cbj/yrYLCwY7CW4TEPYrKysrKysr/SsrPBEzLysrAD8/PP1dMi8REjkxMF0BIyYmIyIGBxEjETMVNjYzMhYXAtgKFS8hTJZDvLxnmUgdHRIDkwYDQkH85wRdpltLAwMAAAEAQ//lA2sEeAA2AZixBgJDVFhAHDERGigEHQAhISU+HQQEBAs+AAkgEQ4NDQY7ETG4/+q0EBAGOzG4/+ZACw8PBjsxDg0NBjsxuP/WQCMLCwY7MTE4NwMoGgQQEAY7GgwPDwY7GhYNDQY7GgwMDAY7Grj/4LcLCwY7Gho4NxESOS8rKysrK83EERI5LysrKyvNK8QAP+0zLz/tMy8REhc5MTAbQHo4QAwMAjs4QAsLAjsKGAYvGhgVLyYHKSM2BzkjSgJFH1kCWRhUH1AvaQJlH2UtYy95AnYfhB+EIxYZFBkXKRQpFzsUOxcGFBcXtCsuFCsrLnUriyuLLgMrLhcUBAAdkCEBISElPh0EBAQLPgAJAyArLhcUAyAGGhEbMbj/wLMJFjcxuP/gtBAQAjsxuP/0tA8PAjsxuP/uQBANDQI7MQwLCwI7MTE4KBsauP/AQBwOFTcaEg8PAjsaEg0NAjsaFgwMAjsaEgsLAjsaLysrKysr7REzLysrKysr7RIXOS8vAD/tMy8/7TMvXRESFzldhw4uKw59EMQAcTEwXQErK1kFIiYnNTMWFhcWFjMyNjc2NjU0JicmJicmJjU0NjMyFhcVIyYmIyIGFRQWFxYWFxYWFRQGBwYGAbZww0AKGEE2MHM+LWYZIx9JXSR0MYB05L1dvEAKSLFaXYBMVCpnOXx9OTc8lxs8ItMTLhkWIhUQFzQ0Q0QXCRgOJZtul74uI8k5Qk5PRkUWCxUOH5B8SIEuMjQAAAEAFf/qAqoFngAbALhAJR1AEBACOwEgCQs3CAgNBD4KBwUYGBQ/AAk/HQEYAAsQCyALAwu4//S0DAwGOwu4/+BACgsLBjsLCx0KDQa4/+hAHQwMBjsGDQgMDAI7DRoHDwYfBiADAwYDJhAQAjsDuP/+tA8PAjsDuP/+tA0NAjsDuP/yQAsPDwY7AwwNDQY7A7j//rYLCwY7A5gcEPQrKysrKysyXTztKy8rEDwRMy8rK108XQA//TIvPzz9PDMvMTAAKwErBSImNREjNTMRMxEhFSERFBYXFhYzMjY3MxUGBgHamqx/f7wBWv6mBhQRTEEuVhMLNW0Wr70Ca5wBQf6/nP3tVVwoIyMbCakPEQAAAQCA/+ED7gRdABkBMrEGAkNUWLkAAP/0tAwMBjsZuP/0QBIMDAY7GAUMBQEIFwIUQgUKFwG4/+ZACxAQBjsBAg8PBjsBuP/+tA0NBjsBuP/0tAwMBjsBuP/gQAoLCwY7AQEbGg4LuP/6QAsPDwY7CwwNDQY7C7j/yrcLCwY7CwsbGhESOS8rKyvNERI5LysrKysrwAA/7TMzPz8/MTABKysbuQAb/8BAHRAQAjsJCH0IeQl0FgS4BQEYDAUBCBcCFEIFChcBuP/4tgwMAjsBGgC4/960EBACOwC4//60Dw8COwC4/+q0DQ0COwC4/+pAEAsLAjsAbxsOCAwMAjsOGgu4//ZAGRAQAjsLBg0NAjsLBAwMAjsLBgsLAjsLbhoQ9isrKyvtKxD0KysrK/0rPAA/7TMzPz88XTEwXQErWSEjNQYGIyImJyYmNREzERQWFxYWMzI2NxEzA+68V5xgSYEwMDW8DRcXT0pFnEG8fExPMDQ0nnEC1f2EWXUsKyhOOQNCAAEABgAAA/YEXQAGAPKxBgJDVFi5AAX/6EAOChEGOwUDAgYFAwUCCAG4//xAGAsLBjsBAgQLCwY7AgUgAEAGBSADQAQgBbj/3rcLCwY7BQUIBxESORkvKxrdGhjNGhkQ3RoYzRoZEM0rzSsAGD8/PxESOTEwKxtAHwUEBQYaAAEApwUBBQQaAwIDGAAXAygAJwOYAagBBgG4/+pACQ4QNwIWDhA3A7j/6kAQDhA3ABYOEDcABQIDBQIIALj/wEAeCRU3AAAIDwgBDwgfCC8IXwhvCAXvAwEDFgsLAjsDLytdXV0RMy8rAD8/Ejk5MTABKysrK12HEP3AXYcQ/QjAWQEBIwEzAQED9v5bqf5eywEyAS8EXfujBF38ogNeAAABAB4AAAXSBF0ADAFxsQYCQ1RYtgMYChEGOwu4/+i0ChEGOwi4/+hAIQoRBjsICwMDBgUMBQkFBgUCCAUIAAwLBgcOCwsGOwcIA7j/3LcLCwY7AwMNC7j/4LcLCwY7CwsNBLj//7QNDQY7Crj//0ALDQ0GOwkMDQ0GOwi4//K0DQ0GOwi4/9K3CwsGOwgIDg0REjkvKysrKysROS8rETkvKxDdK80Q3bALS1RYuQAM//Q4Wc0APz8/Pz8REhc5MTArKysbuQAK//i0CwsCOwG4//RAdgsLAjsLAQUGBQcGCQkLGwEVBhUHFwkZCywBKgIlBCYFJAgrCzQBOwVEAUsFVwFZBVcLaQBmAWoCZARoBWQIaglkCmsLfAJzBHgFdgh6CXQKeQsnAAMQAycDAwwaAAEABxoGBQYICQsAAgMGBQYFBQgJCgMDBgC4/8BAEAkVNwAADg8OHw4/DmAOBAYvXREzLysSFzkAPz8RFzkxMAGHEP2HEP0AXQFdKytZAQEjAQEjATMTATMBEwXS/uWu/u/+8a3+4sTFAQmbARC6BF37owNd/KMEXfyfA2H8nwNhAAEACgAAA+wEXQALARuxBgJDVFi2AgwLEAY7CLj/9EAmCxAGOwIFCwgEBgQJBQYFAQgECAoJAgYHAgABAgQDCAIUDg8GOwK4//S2CwsGOwINDBD0KyvF3c0Q3c0Q3c0Q3c0APz8/PxESFzkxMCsrG0BQCAgHBQQFBgQJAgIBCwoLAAoDCAgJCwALCgAHAgIDBQYFBAYBCQoDA7QECRQEBAkBAAcHtAYBFAYGAQIFCwgEAAEDBAgKCQcGBQgLBQIEAAq4/8CzCRU3Crj/8EARCwsCOwoKDS8NXw1vDQMGlgS4//S0CwsCOwQvK+RdETMvKys8FzkAPzw8PD88PDwXOYcFLiuHfcSHLhgrh33EhwgQPAjEhwgQPAjEhwgQPAjEhwgQPAjEMTBZISMBASMBATMBATMBA+zn/vH+6dUBhP6A5wENARTW/n4Bpv5aAioCM/5eAaL92gAAAQAG/mQD9gRdAAcAyEApFgY5BlwGbAYEGQMmAQIDBAMGBQYCBwoPEQY7OQdZB2kHAwcaAAEABgW4//ZAGg8RBjs2BVYFZgUDBRoEAwQYABcEKQAmBAQBuP/qQAkOEDcDDg4QNwS4/+pAFw4QNwAWDhA3AwYAAwIEBQIMAwIBAwQAuP/AswkVNwC4/9RAGQsLBjsAAAkPCQEPCR8JLwlfCW8JBe8EAQQvXV1dETMvKysSFzkAPz8SFzkxMAErKysrXYcQ/V0rwIcQ/V0rwAjACMABXQBdAQEjEwEzAQED9v2nycj+assBMQEwBF36BwHSBCf8xQM7AAABADEAAANmBF0ACQBqQBlpBwEDBwgItAIDFAICAwIIPgEIBwM+BQUJuP/mQA0LCwY7CQQJAwQIAwIHuP/mtQsLBjsHB7j/wLUJFDcHCwK4/+60CwsGOwIvKxEzKy8rEhc5My8vKwA/7Tk//TmHBS4rh33EMTABXSEhNQEhNSEVASEDZvzLAkj90AMS/bUCVosDN5uG/MYAAAEAPP54A3YGFAA3AG65ABf/4EBKCQs3AiAJCzcaCBQRKgglEToINBFFEVkIVRFpCGYRaB5nM3gedjMPKSgMvg0NARq8GQE3vAELACAZARkZIS8fFQUoQAoMNygFKAwvMzMvKy88/TwzL108AD/tP+0SOS/tOTkxMF0rKwEjIiY1NTQmJyYmIyM1MzI2NzY2NTU0NjMzFSMiBgcGBhUVFAYHBgYHFRYWFxYWFRUUFhcWFjMzA3Z0s8saJSV3WBUVWHclJRrLs3RQO1YfIB8mJSFqOTlpIiUmHyAeVztQ/njFvpVFjDIyM5wzMjKMRZW+xYoYHR5qTa9ScDEsSRcYF0ksMXBSr01qHh0YAAABATT+eAHbBhQAAwAgQAwPBU8FAgIBAQsAHwG4/8CzCgs3AS8r7QA/PzEwAV0BIxEzAdunp/54B5wAAQBi/ngDnAYUADcAgrkALf/gQDwJCzcKIAkLNxMzJTM1M0QzXARUM2oEZhJpJmUzcxJ4JgwcGwC+NjYMKrwrAQ28DAsrLwwBDAwjFR8wBxu4/8C2Cg03GwcbALj/zkAQCwsGOwAAEAAgAEAAYAAFAC9dKzMzLysvPP08My9dPAA/7T/tEjkv/Tk5MTBdKysBIyIGBwYGFRUUBiMjNTMyNjc2NjU1NDY3NjY3NSYmJyYmNTU0JicmJiMjNTMyFhUVFBYXFhYzMwOcFVh3JSUay7N0UDtWHyAfJiUhajk5aiElJh8gH1Y7UHSzyxolJXdYFQH4MzIyjEWVvsWKGB0eak2vUnAxLEkXGBdJLDFwUq9Nah4dGIrFvpVFjDIyMwAAAQCGAYsFTAOfADEAe0AQCgQGHRsJFCJYHnoEdB0HK7j/6LMPDzcfuP/oQDYNDjcSEA8PNwYQDQ83DyUMKAQGAJYSvx8fGJYrvwYPGA8PNwwgDw83DyUMKAQZMSoAADMYKhm4/8CzCQs3GS8r7REzL+0SFzkrKwAv7eQzL+3mEhc5KysrKzEwXQEGBgcGBiMiJicmJicmJicmJiMiBgcGBgcjNjY3NjYzMhYXFhYXFhYXFhYzMjY3NjY3BUwCJikpemI5WyMjQBkbNBkbOiUyQhYVEQOoAicnKIRaPFsjIzscFj0VHTshMkUTFBMCA59mvUtJXB8ZGUYeIUQaHCI1NDKMTGi+SExZIBkZQCMbThYeIDgwModS////9gAABNYHPAI2ACQAAAEXAI4ALgFhACC2AwIDcBABELj/wEAKCQ43AgAQCwECJQErNStdNQA1NQAD//YAAATWB8IAEgAVACEBK0Bjwg3CEdQN1BEECwMFCCoDJQg5BHUeeiAHFBUUEwWHBAEEFAMCAxQVBocHAQcUCAgJCgIFCRoCFQkpAiYJRQJKA0UISgloAngCegN1CHcJDwYPFg82D0YPVg8FBjQVQAwNBjsVuP/AQDsQEAY7FRm8Dw8VFAkCBAgfAgMICBYpDxIfEi8SfxKPEv8SBhIcKQAMEAwgDHAMgAzwDAYMCQwSAgQIA7j/2LQQEAY7A7j/7LQMDAY7A7j/0LQLCwY7A7j/wEAhCRE3AwMjDyMfIz8jfyOPIwUPIwEIKBAQBjsIIAwMBjsIuP/utAsLBjsILysrK11dETMvKysrKxIXOS9d7S9d7QA/PD8SFzkzL+0vKyvtXTEwAV2HEP1dwMDAhxD9XcDACMABXQBdAAYHASMDIQMjASYmNTQ2MzIWFQsCATQmIyIGFRQWMzI2A5hbRwHg0Yf9x4fIAd9IWbKAgbFR5uUBiVhHRllaRUVaBkGKJvpvAaD+YAWOKIlWgK2sgfuzAsH9PwRLSWFhSUphYQAAAQBC/lkErAXsAEoA0UBTCAQHEQkwGAQaFhQqKxYkKjoWMypGEUowWgJaBFcKVxF3A3gJEjkqCQw3bhN/EwITExo0DAI0SABgLXAtAi0tJjQACj4+Qr46DT09RSo3NwAGEy64/8y0CwsGOy64/8BAEQkeNy4uTA9MAQ9MH0xfTAMguP/6QB8NDQY7IBUGDhAQBjsGDg8PBjsGFgwMBjsGFg0NBjsGuP/gtgsLBjsGZksQ9CsrKysr7StdXREzLysrPBI5OS/tMy8AP/0yLz/tMy9dEjk5P+0zL10xMCtdBSImJyYCNTQSNzY2MzIWFxYWFxUjJiYnJiYjIgYHBgYVFBYXFhYzMjY3NjY3MxUGBgcGBgcWFhUUBiMiJic1MxYWMzI2NTQmJwYGAt2S9VlZYl9bWfSXS4M4MGUxEBpSOzmGWF+qQD9GSkA+qF5Wkjk3UBcPMVc+CB4GAQSkkSVkKAkYTiheWAEBEh8bYmFhASK8uwEWZ2RpFhEPLRvvGEQhHyhOTEzmkJndTEpLKiAfQRfsFyoUAwkBDzAdlbkMDKALF09XEigZAQL//wCXAAAEOggBAjYAKAAAARcAjQAxAXUAE0ALAVAOAQEADg8BAiUBKzUAXTUA//8AlwAABMAHwQI2ADEAAAEXANcAlgFhAA63AQEAFwoFACUBKzUANf//AEL/4QVnB1ACNgAyAAABFwCOAKABdQAXQA0DAlAvAQMCAC8qDwMlASs1NQBdNTUA//8Ahf/hBLoHUAI2ADgAAAEXAI4AiQF1ACdADAIBUCMBAmAjcCMCI7j/wEAKCQ03AQAjHgcXJQErNStdNQBdNTUA//8AOv/hA7MGjAI2AEQAAAEWAI3eAAALtgIAOToZNCUBKzUA//8AOv/hA7MGjAI2AEQAAAEWAEP+AAALtgIAOjgZNCUBKzUA//8AOv/hA7MGjAI2AEQAAAEWANbnAAALtgIAOTkZNCUBKzUA//8AOv/hA7MF2wI2AEQAAAEWAI7gAAANtwMCADw3GTQlASs1NQD//wA6/+EDswZgAjYARAAAARYA1+UAAAu2AgBENxk0JQErNQAAAwA6/+EDswa6AAwARQBRAQC5AC7/8EAOFhk3SaovNz830DcDNz24//CzCQo3Lrj/wLUOETcBPR+4/8BASQwNNx8fEzFPLQEtT7s9Ny0DJj4xBAAOE0UICkETCgo0BToaNBU6BEwpPTE6IDQBNDRGKS86PzoCOjA+OgMZHwBFGkQMDw8GO0S4//S0DAwGO0S4/+BAMwsLBjtEb1MZEA4QNxkQCQs3LUAJCzctLQcbGQ4QEAY7GQoPDwY7GRYNDQY7GRAMDAY7Gbj/3LYLCwY7GXBSEPYrKysrK+0zLysrKxD2Kysr/Tw8Ehc5L13tMy9dEjk57V0AP+0/ETMzP+0XM+0vXRESOS8r7SsrL13tMTArAREGBgcGBhUUFjMyNhcGBgcGBiMiJicmJjU0Njc2JDc1NCYnJiYjIgYHBgYHIzU2NjcmJjU0NjMyFhUUBgcWFhcWFhURIwM0JiMiBhUUFjMyNgL4Q80/S2JsaFmQPxdNJDJdVEV8Ly41YmpeAQCUKCQkaDc0aSIuSBQLL41ZWnSygIGxeWFWeScrLLtLWEdGWVpFRVoBEwE2BhUTF19VYGJNZBE8ExocNC8uh0t0ozArIQgkQlEWFw8UCQwbCL8OGgYklGKArayBY5oiDDYpLn9a/QQFjElhYUlKYmIAAAEAO/5ZA44EdwA7ANJAEzsZMRtNGUAbWQJVCgYqKgkMNyK4/8BAEA4QBjsPQA4RBjsiQA4QNyG4/8BACQsNNxBACw03D7j/wEAlDhE3EBAPFz8MBDklACIhISIdPwAJLy8zvisNLi42KigPKAAGIrj/5rQLCwY7Irj/wEAkCR03IiI9Xz0BGhsGGRAQBjsGFA8PBjsGGgwMBjsGFg0NBjsGuP/gtgsLBjsGcDwQ9CsrKysr7V0RMy8rKxI5OTwv7TMvAD/9Mi8/7TMzLxESOTk/7TMzLysrKysrKzEwK10FIiYnJiY1NDY3NjYzMhYXFSMmJicmJiMiBhUUFjMyNjczFQYGBxYWFRQGIyImJzUzFhYzMjY1NCYnIgYCRHPARUVMT0JCxXFcq0MLFD8tJ2oxkrGrmFymQAscSh8BBKSRJWQoCRhOKF5YAQENExlHSEjblJPWSUlPNCLTESwXFB7dysbdTDzTDSAKEDQdlbkMDKALF09XEikZAgD//wA7/+YEAAaMAjYASAAAARYAjRIAABJADAIwLkAuAgAuLQMNJQErXTX//wA7/+YEAAaMAjYASAAAARYAQw8AAAu2AgAtLQMMJQErNQD//wA7/+YEAAaMAjYASAAAARYA1g4AAAu2AgAuLgMMJQErNQD//wA7/+YEAAXbAjYASAAAARYAjg0AAA23AwIAMSwDDCUBKzU1AP//AHgAAAIeBowCNgDVAAABFwCN/rcAAAALtgEABgcCAyUBKzUA/////wAAAaUGjAI2ANUAAAEXAEP/BwAAABWxAQe4/8BACQkQNwAHBwIDJQErKzUAAAL/ygAAAgkGjAADAAoAkUAcfQlwCgIIeQQBBAQGDwlACQIJCQIFAQgEBAgIALj/8kAQDw8GOwAaTwGwAcAB0AEEAbj/wLYJDzdPDAEBuP/0QBcQEAY7AQgPDwY7AQQNDQY7AQwMDAY7Abj/0kAJCwsGOwEBDAsMuP/AsgsPNysREjkvKysrKytdK13tKzMvMi8APz8zL10zMy9dPDEwAV0hIxEzNyMDAyMTMwFIvLzBl4uKk67jBF20AQf++QF7AAP/2gAAAfoF2wADAAcACwCoQDAFCUQGYAoBCgIFRAYDAgUBCAQUBSgPDwY7BRQMDAY7BUAaHjePBZ8FAgUJFAUICAC4//JAEA8PBjsAGk8BsAHAAdABBAG4/8C2CQ83Tw0BAbj/9EAXEBAGOwEIDw8GOwEEDQ0GOwEMDAwGOwG4/9JACQsLBjsBAQ0MDbj/wLILDzcrERI5LysrKysrXStd7SszLzPtL10rKyvtAD8/P+0/XTz9PDEwISMRMzcjNTMFIzUzAUi8vLK9vf6dvb0EXbvDw8MA//8AiAAAA/YGYAI2AFEAAAEWANcSAAALtgEAJBcNACUBKzUA//8AOf/hBB8GjAI2AFIAAAEWAI39AAALtgIAGhkGACUBKzUA//8AOf/hBB8GjAI2AFIAAAEWAEP9AAALtgIAGhoSEiUBKzUA//8AOf/hBB8GjAI2AFIAAAEWANb/AAALtgIAGhoGACUBKzUA//8AOf/hBB8F2wI2AFIAAAEWAI79AAAhQBYDAhgRJgMAHVAdYB1wHQQCAB0YBgAlASs1XTUAKzU1AP//ADn/4QQfBmACNgBSAAABFgDX/QAAC7YCACUYBgAlASs1AP//AID/4QPuBowCNgBYAAABFgCN/QAAC7YBABsbDBklASs1AP//AID/4QPuBowCNgBYAAABFgBDEQAAC7YBABsbDBklASs1AP//AID/4QPuBowCNgBYAAABFgDWBwAAC7YBAB4aDBklASs1AP//AID/4QPuBdsCNgBYAAABFgCODAAADbcCAQAfGgwZJQErNTUAAAEAhwCHA9cGFAALAD5AKAcKCwABBAYFqgYGCAMIAQ8NHw0CADoCBAcICQoBBgIoBTogA2ADAgMvXebtFzkQ5l0APy8SOS/tFzkxMAElEyMTBTUFAzMDJQPX/pUFhAX+lQFrBYQFAWsECgX8eAOIBYEFAY7+cgUAAAIAZQLzA18F6wALABcANkAlFb4DAw++CQIGAAkGagxlEnoMdRIGDCkAABIpEAYgBkAGYAYEBi9d7TMv7V0AP+0zL+0xMAEUBiMiJjU0NjMyFgc0JiMiBhUUFjMyNgNf3KGf3tyhodydgGBggINdYIAEb6Dc2qKg3NygYISEYGKChQACAHL+lwPPBcMAHwAmAHpAOSYWOg8zFksPQxZVC1kbZQtqG3QLeRt8I3QlDQcNDQcJICESETwABh0JBR8ZGR8SPB0ICBIerQYgH7j/wEAMCw03Hx8DGgwMJBsDuP/AswkLNwMvK+0zLzwSOS8rPDz9PDwAP+0zMy8vPxI5Of0ROTkRMzMvLzEwXSUmAjU0EjcRMxEWFhcVIyYmJxE2Njc2NjczFQYGBxEjEREGBhUUFgIt1+Tsz3JXoTgKPoxcMWMiJDgUCkGNYnJ0hokCGQEg8u4BKBgBaP6ZAy8dyDNMDfy8BSQUFSkRxh4vBf6WAfsDORXRuLzLAAEAWQAABAcF7gAhAGhAQwUKQQ5TDmMOaxZ2AnQOehYIGxgFtg8IHwhPCAMIEBAUuQgBDAICILoBCB8jAR8CGBsgCAUZBg8GBRkPBAIAADACAQIvXTMvEhc5Ly8vLzz9PBE5XQA//TI/EjntMy8vXe05OTEwXSEhNTY2NSM1MxE0NjMyFhcVIyYmIyIGFREhFSEVFAYHFSEEB/xSb1uhoei5YYo6CjqOQHt5AWz+lHVpAwLPIb63igFAyfYfEc4pLpqR/tOKPXW/PgsAAAIAd/5/A+YF7wAaAF8A60BDCxcJKA8tAUkATBsXGygfLRFJEEw/Kz4tPy4wTUQASS1PLkFNXgZeJlJHbw9uFWsmbipuLWkyaER0OHtXHl0wDRA3PLj/0EBjDRA3DDQ0CRgVUlIVFZ4qJxQqKidLSEieNAkUNDQJewl5NAJINAxLCSoVUicJOltfXyG5Wws+PkK5OgJINAxLCSoVUicJNyQgVT09VQMgTl5FIDc3Xk4DEiAAMBAwIDBAMAQwL13tFzMv7S8v7TMzLy/tEhc5AD/9Mi8//TIvERIXOV2HDi4rDn0QxIcOLhgrDn0QxIcOxIcOEMQAMTArK10BNjY1NCYnJiYnJiYnBgYHBgYVFBYXFhYXNjYBFhYXFhYzMjY1NCYnJiYnJiYnJiY1NDY3NSYmNTQkMzIWFxUjJiYjIgYVFBYXFhYXFhYVFAYHFRYWFRQGBwYGIyImJzUC9xgbHRkYQCohWDcUKxoUIUxsIlc2EzL91hpNJC9QPXKZJSkqe0lYdS8tLGJlW08BAOBVkFkKWptUcJspJyd5TbidbVpXUz86Pq17T5xTAZEjQTYxSBcXHw0KGRIMJCEaWC1RYCEKGxEMKv4KDSAMDw9dWzZDGhkjFRk0KylsSF6pPgcyjlqozBofwi0qW1g5SBcYJhQynYZsojYHLoxeSo4wNTocHsIAAAEAcgE3AzED9QALACFAFAMDCXAAoAACAAAABiAGMAZQBgQGL10zL10ALzMvMTABFAYjIiY1NDYzMhYDMc+Rkc7OkZHPApaRzs6Rkc7OAAEAOf6VA9YF0QANADZAIGQIagoCBgYCqg0DAQUEKQAFEAUCBQUJASnPAAEAbw8JLxD2Xe0SOS9d7QAvMz/tMy8xMF0BIxEjESMRJiY1NCQzIQPWjLuMzvwBBPMBpv6VBrr5RgO8BfjMz+gAAAEAiP/oBCwGHgA2AKFADio1UBdZNGAXaDR5GwYtuP/wsw4PNy24//BAFwkLNzQzFD4VHjwVAy0ABwcLPgMJJggAuP/wQBYMDTcYGy8wATA0ABQGERsABhQwAyUAuP/itA0NBjsAuP/YQBALCwY7AHE4JRomCg0NBjsmuP/EtgsLBjsmbjcQ9isr7RDmKysRFzkQ7S8vEjkvXe0rAD8//TIvPxI57S/tOTkrKzEwXQEUACMiJic1MxYWMzI2NzY2NTQmIzUyNjU0JicmJiMiBgcGBhURIxE0Njc2NjMyFhUUBgcVFhYELP7y2BlLFgocPh5NbSEjHc7JmKMUGBhMOzVWJiQpvEQ9PKVcqN+OcaS6AeHa/uEGBKYICTcvM3hRqZ+dc4UhRxwdIx0oJYRe+8IEOIKwPjw6qptwsiAJJdwABABW/y4HGAXvAAsAFwAoADcAzkCNBCMSIyoZJCM8GTYjRRhdGVIjaRkKKw4kECQUKxZrDmQQZBRrFns1CRp0GQEZKhgoGA4oHigCCA8HFQIoGBkaqjExHhlAHQEdMKoeFbsdHgkDAw+7CQIIDAcSAikMJhJ5DHYSBCkqDyUfJS8lAyUoGhklBBgxGyoAHRAdQB1wHYAdBR0MrRgdBgAAEq0GuP/AswwQNwYvK+0zLxI5Oe0vXf08Lxc5L13tXXEAP+0zLxI5Oe0v7S9dPBI5L+0QPDlxAV2HEP1dwDEwAV1dARAAISAAERAAISAAAxAAISAAERAAISAAByMBIxEjESEyFhcWFhUUBgc3NCYnJiYjIxEzMjY3NjYHGP4F/pr+mv4FAfsBZgFmAftz/kn+yv7K/kkBtwE2ATYBt/3j/uV7pQEXXm04PDZvWRIYHhk+MXNiMFQaGhcCj/6a/gUB+wFmAWYB+v4G/poBOQG5/kf+x/7H/kYBun8BY/6dA5MOICJgS2SAJP0lNhMQC/7LExcXPAADAFb/LgcYBe8ACwAXADMAqUB3Kw4kECQUKxYzGDIkMyozLkQYQSREKkQuVBhTJFQqVC5rDmQQZBRrFmIYah1kJHMYcyQZCA8HFQIQMyAzAjMzL70bHyUvJQIlJSm9IRW7GyEJAwMPuwkCCAwHEgIpDCYSeQx2EgQlbxgBGCwqGB4MrR4GAAASrQa4/8CzDBA3Bi8r7TMvEjntLzPtL108XXEAP+0zLxI5Oe0v/TIvXS/9Mi9dcTEwAV0BEAAhIAAREAAhIAADEAAhIAAREAAhIAAFBgYjIiY1NDYzMhYXFSMmJiMiBhUUFjMyNjczBxj+Bf6a/pr+BQH7AWYBZgH7c/5J/sr+yv5JAbcBNgE2Abf+VUOGW9Hy+slTmDkQK5hNe5OMglSWJhACj/6a/gUB+wFmAWYB+v4G/poBOQG5/kf+x/7H/kYBulceLffp5v0sHbUmRaSsoqtJIgACAGsDEQZiBdEADgAWAGxADRcLZwV3BQMNKAsQNwu4/8RAOgsQNwgMIwM1A0UDWQxlA3YDBwwBAwQGCAYVEhIQEw0LE7sVAwIoAAcoIAkBAAkPrhAoFK4QEyATAhMvXeT95C8zXe0v7QA/7Tw8EDwzLxIXOTEwXQErK10BIxEjAyMDIxEjETMTEzMFIxEjESM1IQZifBTMVc4Ze+6hoeP8UuV/5QJJAxECaP47Acz9kQLA/oIBfnX9tQJLdQAAAQHBBRYDZwaMAAMAIEASRwFWAGYAdgAEAwNgAQEBAAACLzMvAC9dMy8xMAFdAQEjEwNn/u+VswaM/ooBdgACAP0FGANjBdsAAwAHAB5ADwIGRAFgBQEFARQABBQABS8z7S/tAC9dPP08MTABIzUzBSM1MwNjycn+Y8nJBRjDw8MAAAEAwAAbBRIE/QATAHdARg4REgECAg0LCAcEAwwMDQICOAMMFAMDDAMNAwESBL4HEQ4Ivg0HDwsBCwQHCAsBEhEOCAMNAwkDDRAEBgAABhAGIAYDAAYvM10vEhc5Ly8SFzkAL10zM+05OS/tOTkyLy8xMIcFLiuHfcQHPDw8PAcQPDw8PAEhAyMTITUhEyE1IRMzAyEVIQMhBRL9yGmZaf5/AbJU/foCNmmZaQGD/kxTAgcBav6xAU+cAQycAU/+sZz+9AAC/9kAAAcKBdEADwATALZAIwYSDQ0GOxITAwQUBQUGBAYQBiYFIAZEBgUKEA4UAAEgAQIBuP/0QBEQEAY7ARYPDwY7ARINDQY7Abj/6kAXDAwGOwEWCwsGOwEgCwELCAYBCAsEBQC4/+C0CwsGOwC4/8BAHwkPNwAAFWUFdQUCBQM0Ew01CgoTBQg1EjQGAw41AQUALy/tP+3tEjk5L+0v7TABL10RMy8rKxIXOS8vXS8rKysrK13tOTkxMF2HEP3AwMABKyEhESEDIwEhFSERIRUhESEBESMDBwr8cP4H2c8CWwTW/TQCmv1mAsz8cML1Ai390wXRsP5osP3XAiMCWf2nAAMAQv+MBWcGLQAXACEAKwD1QG8CAggNFAIQCBkNHhRJEk8UaxR7GHQmCwkGDQgHEgAUGQYVEhcULgcgFDkGOAcyEzIUTwdaClgUVBZpFHMBeQ0UWgNVDwIYJSEmBCkbNBIVCQYEAw8CKTQDChglISYEHiIGDQ0GOyIVAAkGEhUEDAC4/+y0DAwGOwC4/+y0DQ0GOwC4/9xAFAsLBjsAZy0PLR8tPy1/LQQPLQEeuP/4QB8NDQY7HhUMDhAQBjsMDg8PBjsMFA0NBjsMFgwMBjsMuP/gtgsLBjsMZiwQ9isrKysr7StdXRDkKysrERc5EP0rERc5AD/tPxIXOf0RFzldMTBdAV0BEAAhIiYnByMTJgI1EAAhMhYXNzMHFhIBJiYjIgIRFBYXATQmJwEWFjMyEgVn/pj+1W69TYSUvVplAWkBKXKzUHOUq1tn/nw0iFLQ9zQvAyo3Lv2MOX9bzvgC6P6Q/mk6NcQBFmMBJL8BcAGYNzer+2T+4QE9LC3+zP7Xh9FMAaSK2Ef8Vy4uATcAAAMAbgCdBtgEfAAXACYANQCHQGcJMSMkKi08BTwHMxEzEzkxWh1UH1QkWihaLVQ1bAdiE2gXeAp1FnUkei0VM68DAyGvBhIPCSqvFRUbrwkPZQBqDAJpGGYwehh1MIYYijCWGJowphiqMAonKjAYDAAANx4qEAwgDAIML13tETMvEjk57V1dAC8z7TwQ7S8SOTntPBDtMTBdARQCIyImJwYGIyICNTQSMzIWFzY2MzISBSYmIyIGFRQWMzI2NzY2BTQmIyIGBwYGBxYWMzI2Btjjy3/WPU3HibbX68N/1j1LzIa21/yRPKlag499aVV0QhkxAtt+aFhyQiEnFzqrWoOPApfl/uuhipmSARLT7AEOoYqWlf7ukXV1pJ2OnUt0LGALkJtOcTdVN3R2owAAAQCiAJ8FMAV6AA8AR0AsDgO/DwEBAQENBL8IrAoHMBFAEQIMAKsKgA0BDSoEAQWrByAEMARABFAEBAQvXTz0PBD9XTz0PF0ALzzk/TwyL139PDEwJSE1IREhNSERMxEhFSERIQUw+3IB9P4MAfSmAfT+DAH0n54Bpp4B+f4Hnv5aAAIAyQAABPsFbwAGAAoAYUA0BgABATgFBhQFBQYEAwICOAUEFAUFBAIEBQMDBgEABQUACb8ICgAGBgQDcAUBBQUDCQMBAi88FzMvXS88PBA8PAAv7S8zGS8SOTkzGC8SOTmHLiuHfcSHLhgrh33EMTABATUBFQEBESE1IQT7+84EMvzUAyz7zgQyATEB43gB47X+lv6W/hqgAAACANcAAAUJBW8ABgAKAF9AMgIBAAA4AwIUAwMCBAUGBjgDBBQDAwQGBAMFBQIAAQMDAQm/CH8DAQMKAwYACQAFBAIBLzw8PDMzLzwzMy9dAC/tLzMZLxI5OTMYLxI5OYcuK4d9xIcuGCuHfcQxMAEBNQEBNQERITUhBQn7zgMs/NQEMvvOBDIDFP4dtQFqAWq1/h38dKAAAAEAOAAABCMF0QAQAJG5AA//9EBODhEGOzgNSQ14DQMPDg8QEwABAA8OEw0MDQUCCDILCwwBDwAFBw0DBwgDCgBcBQMMDwEDBRMNXAogCHAIgAiwCAQIDBAQBjsIBg0NBjsIuP/8tAwMBjsIuP/YtAsLBjsILysrKytdM+TtFzkyEOQvLwA/PxIXOS/tOTkxMAGHEP3AhxD9CMABXQArAQEVIRUhESMRITUhNQEzAQEEI/5oAVb+rLz+rAFW/mXSASYBKgXR/NVkiv5IAbiKTwNA/YECfwABAIj+ZAQDBF0AFgCVQB0TIAsQNwQgCxA3CQIGFgwFEUIGCQAICgwBAhQaALj/4LQQEAY7ALj/3LQPDwY7ALj/9rQNDQY7ALj/7LQMDAY7ALj/4EALCwsGOwBvGA0JGgu4//ZACw8PBjsLCg0NBjsLuP/IQA0LCwY7CwgKCgY7C24XEPYrKysr/TwQ9isrKysr/Tk5AD8/P+0/PBI5OTEwKyshIzUjBgYjIiYnESMRMxEWFjMyNjcRMwQDrAY8eVpcaji8vCp+Vlp7MLx0P0ZGPv3xBfn8tjI9OjUDSgACAEP/4QQJBe8AJQAxAIFAClQEVDF1HnMxBB64/+izCw03ILj/8LMODzcPuP/wQCgMDTcJEA4PNwkQCgs3EgkpPw8PCSAcHBg/IAIvPgkKHRImLBUbHQwAuP/AQA4JDDcAADMsFFkMAQxmMhD2Xe0RMy8rEjntETk5LwA/7T/tMy8REjkv7RI5KysrKzEwK10BFAYHBgYHBgYjIiY1NAAzMhYXNjY1NCYjIgYHIzU2NjMyFhcWFgMmJiMiBhUUFjMyEgQJDxISPCxSwW2+7QEFxFeYSwIBlpJPrEwNT8lXjME7KRzJOJJGhp9/ao+uA0VEq1VVqkR7YvfQ5AEhNEEaNh/Yyz44wiwtcHlW0v7ILjeyrpKYAR4AAQB+/0MEzAXRAAwAcUA4CAQDA2gJCBQJCQgLAgMDaAoLFAoKCwQDAgMICzUBCDUFAwQDMAlACWAJdgkECQcDBAsJCAcGAgC4/8BACQkNNwAADgSWAi/kETMvKxIXOS8vXTMvAD/tL+0RFzkxMIcOLiuHBX3Ehw4uGCuHBX3EBSE1AQE1IRUhARUBIQTM+7ICcv2YBB382QJZ/YwDab2/ApwCd7yw/apI/XAAAAEAnP9DBNUF0QAHAENADwIGBDUHAwIUAQoNDQY7Abj/5kAKCwsGOwFlCQUUBrj/+kANDQ0GOwYICwsGOwZkCBD2KyvtEPYrK+0AP+0vPDEwAREjESERIxEE1cb9U8YF0flyBd76IgaOAAABAIgAAAP6BF0ABwA5QAoBBQgDPwYFARoAuP/kQBgLCwY7AG8JBBoFCg0NBjsFCgsLBjsFbggQ9isr7RD2K+0AP+0/PDEwISMRIREjESED+rz+BrwDcgO7/EUEXQAAAQBK/lkEGAYeAB0AO0AcAAAEQBoADw8TQAsNAAAOBxoOIBYBFgYNDQY7Frj/2LQLCwY7Fi8rK10z7S8yLwA//TIvP/0yLzEwASMmJiMiBhURFAYjIiYnNTMWFjMyNjURNDYzMhYXBBgKHWcdf2HTsjBcMgomWB9/YdKzOl4qBVkKEXeY+53S1wkKsgsQd5gEY9LXCwgAAgByAh0DagXvACMAMABrQBIPCQAOHQktCToJWSlgDHAMCCG4/+BAKQkLNwIIJbwRESAIAQEuvgiaIBwcGL4gAh0RJQIqHQsAKyoAPwtfCwILuP/AswkPNwsvK10z7S8SOf0yMi8AP/0yLxD97TMvERI5L+0SOTEwK10BIzUGBgcGBiMiJjU0Njc2Njc1NCYnJiYjIgYHIzU2NjMyFhUDNQYGBwYGFRQWMzI2A2qmE0AfKU9GfKZWUEvkfSEgHVYuTqEnDyyvS8DHpkGsMzxKWFdMeQI2Ww8vDhMVp4NogyYkHgYTNEASEQsvDqoNIJms/njzBBAPEU1DS05CAAACAFUCHAOeBfAACwAXAEBAJl0BXQVSB1ILbQFtBWIHYgsIFb4Dmg++CQIMKiAAAQASKgCgBgEGuP/AswwRNwYvK10z7S9d7QA/7f3tMTBdARQCIyICNTQSMzIWBzQmIyIGFRQWMzI2A57qusHk6ru76bSBb2+CgHFvgQQG6v8AAQfj6QEB/uytp6WvqaurAAABACsAAAV7BfAAOQCmQBU5NEo0ZhYDDhAJCjcmK2oOaSsDAhq4/9pAKgwRNxoaNx8fGw40KwI4HjUBGwg3EgIeEgAaAYAakBqgGgMaAholCBU5Mbj/3rQLCwY7Mbj/wEAWCQ03MTE7FBUdJQoPDwY7JQoNDQY7Jbj/6LQLCwY7Jbj/wLMOETclLysrKyvE7REzLysrxO0SOTkvXXHtL+0APzz9PD/tEjkvMzMvKzNdKzEwXSEhETY2NzY2NTQmJyYmIyIGBwYGFRQWFxYWFxEhNSE1JiYnJiY1NDY3NjYzMhYXFhYVFAYHBgYHFSEFe/3RPXcoLS81NjWma22kOjU5NSwtdjz90QGJSYIyMjlXVVH2lJTwU1JWNy8vgEsBiQGDJls4Po51X6g9PUdGPzqtXG2dODlZJv59rnwqd0tMtWaL3ldTYF1VVOWIZ7VKSngrfAAAAwA6/+MG1QR8AA4ATgBbASJADHkYdSt0PHBG1DwFHbj/8LQLDwY7RLj/8LMMDzc7uP/AQDcODzc6QA0NNyYQDg83HRALDzcgAAxJlgM8W5YvLz4mVT1EOkE6Nj9Elj4ED5YMFhYMQB2WJgpHuP/wQBkMDzcpGA4PNykQCQo3ACBBAwNblkkaL5YDuP/yQB8QEAY7AwgPDwY7AwINDQY7AxALDAY7AwMpRxcXTxpHuP/ytA8PBjtHuP/otAwNBjtHuP/YQB4LCwY7R3FdOzsJGykODxAGOykODQ0GOykKDAwGOym4/9y2CwsGOylwXBD2KysrK+0zLxD2Kysr7TMvERI5LysrKyvk/eQSFzkrKysAP+TtMy8Q5D/k7TMzLxDtERI5L+T95BI5OSsrKysrKzEwXQEmJjUGBgcGBhUUFjMyNgUyNjc2NjczFQYGBwYGIyImJwYGBwYGIyImNTQ2NzYkNzU0JicmJiMiBgcjNTY2MzIWFzY2MzISFRUhFBYXFhYBJiYnJiYjIgYHBgYHAzETFF+9S0pecG9bugJNQXkuM0YXCyFjJzdZRqHmShVXMEGLbpLLamFcAReaKyckZ0FRvzkPMc1boMg1QsZ24OX87Dw1NYYBMgUfIB9sSU5nKygxCgEqNoNLAwsVFFxRX11YXB0VFysTzQ0nCw8QaGcTURwmLMKYgZYqJxoDOkFWGBYTNRm/DidgWFFp/vPuUnKjMzIrAjU7aycmLyspJm07AAMAKf9tBCAE2AAXACEAKwDUsycmAQ+4//BAKw0NNwMQDQ03ISYYJQQpDxQfFAIUFBs+BgkSFQQDDwQICCk+AwoMEAwNNwC4//BAEwwNNyEmGCUEHiIbAAkGEhUEDAC4//C0EBAGOwC4//a0Dw8GOwC4//C0DQ0GOwC4/+i0DAwGOwC4/9JAJQsLBjsAcS0PLR8tPy1vLQQeGwwQDxAGOwwSDQ0GOwwYDAwGOwy4/+C2CwsGOwxwLBD2KysrK+1dEOQrKysrKxEXORDtERc5KysAP+0zLz8SFzntMy9dERc5KysxMF0BEAAjIiYnByMTJiY1EAAzMhYXNzMHFhYlJiYjIgYVFBYXATQmJwEWFjMyNgQf/vDiT4Q6e3yoSFABE+FLhjlsfZhHUP7AIlg4k6IdHQIuHRz+UyZTOpGiAi7+5v7OKSTCAQVM3pIBGAE1KCWq7E3a3xoc19VhkTYBKGOUM/1jHRvVAAIAOv/iA10F0QADACAAYEAXVA9kGnsFfwl/FH8WBhITEAcSAVUDAyC4/8BAJAoMNwRADQ83ICAcNAcKChAMDTcCKwMDEB8TEwoEGRUEfwoBCi9dM+0vEjkv7TMv7SsAP/0yLysrP+0zEjk5LzEwXQEjNTMTBgYjIiY1NDY3NjY3NTMRBgYHBgYVFBYzMjY3MwJ4zMzlT7Brzew8OzWLS7NHeTczP45yY7gxCwT+0/pXHijRq16UQztfMOT+zytMMzB6T3FvRSIAAgDkAAABxAXRAAMABwBQQA8HBwBVAwMFCARgAysFYAK4/8BACQ0QNwACEAICArj/7LQNDQY7Arj/2LULCwY7Agm4/8C3DhA3AAkQCQJdKy8rK10r5P3kAD8/7TMvMTABIzUzEyMTMwG6zMwK4BymBP7T+i8ENwAAAQCdADkFKwL6AAUAI0ATAAACvw8EAQSPAQEBKgAAEAQBBC9dMy/tXQAvXf0yLzEwJSMRITUhBSur/B0EjjkCIaAAAQBR/2kGEgb9AAgASbkAAf/wswwPNwG4//hAHQkLNwcHCAYUAwIDAgcIAAEAAQEABANRBgYHCAIIAC8vEjk5L+0BLy8zLzEwhxDdwMCHEP0IwAErKwABASMBIzUhAQEGEvzqaP6q7QGJAQkCjQb9+GwD4Yv84wZFAAAB/8//NgQ/Be8AKABrQDoQDiEONQ5SBgQICwwMBxseHwwHB7QfGhQfHxoLGzwIHh4lDxMTFz8PAAAEPyUCCQkAACoSHR0aEgMfLxczLy8RMy8zLwA//TIvL/0yLxESOS88/Twwhw4uKw59EMQFEDw8BxA8PDEwAV0BIyYmIyIGBwchFSEDBgYjIiYnNTMWFjMyNjcTIzUzNzY2NzY2MzIWFwQ/ChtnJnBkFh0BJP7KRiDStSdfMgocYylwZhRIssQbEUo3NJNOMlI0BSgKG3mZx4r+AefOCQm1Cht6mAIAisZ7pzUxLQkJAAACAL4AygUTBFAAGQAzAHBACx4wDhA3BDAOEDcruP/Qsw4QNxG4/9BADg4QNycnML8dGiO/HRoquP/AQB4JCjcqDQ0WvwMACb8qAwAQGSkAADMpGgwpDSYpGicvM+087S/tMy/tAC8zMzPtLy/tMy8vKzMz7S8v7TMvMTArKysrAQYGIyImJyYmIyIGByM2NjMyFhcWFjMyNjcTBgYjIiYnJiYjIgYHIzY2MzIWFxYWMzI2NwUSE6OaRYc1HH0rSEIamxWmlkKJNiR1K0VKEp4Xn5xCiTYldCtIRxKdEaqVR4czH3YvRkQZBFDDxUouGFJefbXESS4eTWt//fy5wkouH0tvesDHSywaUWR5AAAC//YAAAT+BdEAAwAGAItAQykEJgY5BEgCRwNIBEcGWAJYBFcGaQRlBgwFKA8QBjsFFAwMBjtqBXUFAgUEaAAAAwZoAQECagJlA3oCdQMEAgMFAwC4/9C0CwsGOwC4/8C2CRE3AAAIAbj/7kAMCwsGOwEFAQIDBjQBAC/tPxI5AS8rETMvKysXOV0xMIcQ/YcQ/QTAAF0rKwFdISEBMxMBAQT++vgCCvT+/oP+hAXR+tsEYPugAAIAZwCiBBMEdgAGAA0AZ0AQWQNZCgIEQAwQNwtADBA3Brj/wLMMEDcNuP/AQCAMEDcDAAMABwoKB3QFdAwCBAUAHwABAQEAAAwLCAcHCLj/wLMKDTcILyszLxI5OTMvMy9dEjk5XQAvMy8SOTkvLzEwKysrK10lATUBFQEBBQE1ARUBAQQT/hgB6P7DAT3+Uv4CAf7+tQFLvwGjVQGivP7v/u/ZAb5ZAb3E/tr+2gAAAgCDAKIELwR2AAYADQBpQAsEQAwQNwtADBA3Arj/wLMMEDcJuP/AQCgMEDcMCAwIBQUBewN7CgIEAwFQAFkBAgAAAQoLCB8BHwdZCAMHAQcIuP/AswoNNwgvKzMzL10SOTkvMy9dEjk5XQAvMy85OS8vMTArKysrAQE1AQE1AQUBNQEBNQEEL/4CAUv+tQH+/jz+GAE9/sMB6AJg/kLEASYBJsT+Q1f+XbwBEQERvP5eAAMAsQAABdkA3wADAAcACwAlQBQFAQIGBApVCQgAKwEBBCsFBQgrCS/tMy/tMy/tAD/tFzkxMCEjNTMFIzUzBSM1MwXZzMz90szM/dLMzN/f39/f////9gAABNYIAQI2ACQAAAEXAEMAYwF1ABlAEAJQDAECQAxQDAIADAwBAiUBK101AF01AP////YAAATWB60CNgAkAAABFwDXADIBTQAVQA0CDxhvGAICABgLAQIlASs1AF01AP//AEL/4QVnB8ECNgAyAAABFwDXAJYBYQALtgIANyoPAyUBKzUAAAIAQgAAB4wF0QAWACUAs0AZBiJpBXkJAxQ1EREBGDQQNQ0DFzQVNQEIH7j/8EALDA03BR8BEhEUFBe4/+pAERAQBjsXEg8PBjsXEA0NBjsXuP/otAwMBjsXuP/2QAsLCwY7FxcOEgMHALj/4EAcCwsGOwBnJx8VBxAPEAY7Bw4NDQY7BxYMDAY7B7j/4EAMCwsGO2YHdQcCB2YmEPZdKysrK+0Q5isRFzkvKysrKyv9Mi9dKwA/7e0/7e0SOS/tMTBdISEiJicmAjU0Ejc2NjMhFSERIRUhESEFESMiBgcGBhUUFhcWFjMHjPv5uPhlkJ6piFnxxgQJ/S0Cof1fAtP8aHeUu09naHJwU7WBNEJfAT3Y0QFDWzw8sP5osP3XBQR7LTVE8Kms80QyJwAAAwA5/+EHEAR8AAYAEgA6ATO1WCNXNAIwuP/QQBgOEDckMA4QNxMbCw0GOzkKNhBJCkYQBDO4//izDg83Lbj/8EAODg83JxAODzcbIA0PNxO4/+VAKAsNNwUQDA03MAYKJBMGPDg4LSEDPTMKPzMtBBoaGxM/IRA/IZYnCje4//izDg83Dbj/8EAMDA03BxAMDTcwJAY4uP/yQBkPEAY7OBoHCg0NBjtfB38HAgcHDRsbABo3uP/qtA8PBjs3uP/qtA0NBjs3uP/ktAwMBjs3uP/WQCILCwY7N3E8DRsqEBAQBjsqEg8PBjsqEA0NBjsqGAwMBjsquP/gtgsLBjsqcDsQ9isrKysr7RD2KysrK+0zLxE5L10r/Ss8OTkrKysAP+TtEO0zMy8/PO0Q7RESOS/tEjkREjkrKysrKytdKzEwKytdASYmIyIGBwc0JiMiBhUUFjMyNgUyNjc2NjczFQYGBwYGIyImJwYGIyIAERAAMzIWFzY2MzISFRUhFBYGWQSGh4CtDLedkZSbnZKQngIjPncwM0YXCyFiJzdZRJPrR0PDiOf+9gEO44PPQEPTgdfm/P/CAqudmaSSfdnT3c/S2dfQHBYXKxPNDScLDxBpZGdrATwBEQEWAThuZWVu/vbxZsHQAAAB//wCPARiAtwAAwARtgG/AgAABQIvETMvAC/tMTABITUhBGL7mgRmAjygAAH//AI8B0oC3AADABG2Ab8CAAAFAi8RMy8AL+0xMAEhNSEHSviyB04CPKAAAv/AA+UC1QYUAAMABwBatQIYDRA3Abj/6LMJDDcAuP/oQAkJEDcGGA0QNwW4/+izCQw3BLj/6EAaCRA3AQAFAQUFAgYBAGMCAgRjQAZQBmAGAwYvXe0zL+0APzwzL108MTABKysrKysrASMBMwMjATMC1Yb+++7thv777gPlAi/90QIvAAACAGsD5QOABhQAAwAHAFW5AAT/6EAODRA3BRgJDDcGGAkQNwC4/+hAHQ0QNwEYCQw3AhgJEDcBAAUBBQUDBwEAYwICBGMGuP/AswoQNwYvK+0zL+0APzwzL108MTABKysrKysrAQEjEyMBIxMDgP77hp2c/vuGnQYU/dECL/3RAi8AAf/AA+UBTwYUAAMANrUCGA0QNwG4/+izCQw3ALj/6EAUCRA3AQABAQECAQBjQAJQAmACAwIvXe0APzNdLzEwASsrKwEjATMBT4r++/ID5QIvAAEAYQPlAfAGFAADADS5AAD/6EAXDRA3ARgJDDcCGAkQNwEAAQEBAwEAYwK4/8CzCxA3Ai8r7QA/M10vMTABKysrAQEjEwHw/vuKnQYU/dECLwADAJ0AEQU1BQcAAwAHAAsAPrkAC//AQCMJCjcLVgisBL8HAUAJCjcBVgKsDwcBBwSrAAstBasBQAoBCi9dPOT9POQAL1307SsQ/fTtKzEwASMRMwEhNSEBIxEzA2Du7gHV+2gEmP4r7u4D9AET/TWg/TUBEwAAAgB3/8gFWwVUAAMABwBpQBJIBEcGWARXBmgEZwZ4BHcGCAe4//BANQ0QNwcFAAMBAAMwA0ADYANwA5ADBgOyAAIwAkACYAJwApACBgKyIAEEBgIAAgACIAFQAQIBGS9dMzMYLy8SOTkALxoZ/l3uXREXOTEwKwFdCQcFW/2O/Y4CcgGY/mj+aAGYAo79OgLGAsb9OgHc/iT+JgD//wAG/mQD9gXbAjYAXAAAARYAjtoAAA23AgEADQgEACUBKzU1AP////UAAASpB1ACNgA8AAABFwCOACEBdQAXQA0CAVAOAQIBAA4JBQAlASs1NQBdNTUAAAH/4wAAA5QF0QADABtADzgDSANlAWkDBAEAAwAAAi8zLwA/LzEwAV0BASMBA5T89KUDDAXR+i8F0QAB/+T/5QQwBewALwCsQAsOIA8QNxwgDhA3ILj/4EBBDxE3IB5fIgEiIiQZCiAPETcKDAgIEQYpGSoYEgERABISBiQ0HgIGNAwKKikmKHYoAi8CKygBBQAAKSktIiEhCAq4/8BAFAkRNwoxExcQGgQtGRIRLRUVGBEVL9Q8EO0SOTkSFzkQ1isyPBEzEjkvOS8XOV0SOQA/7T/tETkvPN08ENY83TwREjkvEjkrERI5L10SOSsxMAErKwEHIRYXFjMyNzMVBiMgJyYnIzczJjU0NyM3MxI3NiEyFxUjJiMiBwYHIQchBhUUFwOxG/2ULGZ0rruJDqqp/u6qmjFyHEUDAV8cUy6hrgEQsp4QjbW4dmUnAsUb/UQCAwKWiqpicFzBRp6P+oooKR0cigEGmKRHw2F7arSKHB0pKAAAAQB7AKwCeQRsAAYANrUEQAwQNwa4/8BAGQwQNwMDAHAFAQQFAVcAAQAAAAEQASABAwEvXTMvXRI5OV0ALzMvMTArKyUBNQEVAQECef4CAf7+tQFLrAG0WQGzx/7n/ucAAQCXAKwClQRsAAYANrUEQAwQNwK4/8BAGQwQNwUFAX8DAQQDAVoBAQAAAAEQASABAwEvXTMvXRI5OV0ALzMvMTArKwEBNQEBNQEClf4CAUv+tQH+AmD+TMcBGQEZx/5NAAACAB0AAAO6Bh4AGgAeAKNAJ3sLfRcCBg0BHEQdAxERFT8NAAOWBj4ZCQUBBQgQEAQBHZ8eARoeALj/7kALEBAGOwAODw8GOwC4/+S0DAwGOwC4/+hAFwsLBjsAACAYlgQPCB8ILwgDCAgEGgoFuP/utA8QBjsFuP/AQAwLCwY7AAUQBSAFAwUvXSsrPO0zL10Q5BEzLysrKys87RDtERI5LwA/PD88/eQ//TIvP+1dMTBdISMRIREjESM1MzU0NjMyFhcVIyYmIyIGFRUhNSM1MwO6vP5avH9/wpk0VRwKEEoqaVMCaMrKA8T8PAPBnDm20gsErAYRbXY6u8MAAAEAHQAAA7QGHgAdAKNAMWsHewcCBxkBDA8+CRIFHB0cHQU9GQANAQgKCg0BGgAYEBAGOwAODw8GOwACDQ0GOwC4/+S0DAwGOwC4/+hAHgsLBjsAAB8Jlg0PEB8QLxADEBANGhMADhAOIA4DDrj/+LQQEAY7Drj/7rQPDwY7Drj/wLQLCwY7Di8rKytdPO0zL10Q5BEzLysrKysr/RE5LwA/PD/tMzMvLz88/TxdMTBdISMRJiYjIgYVFTMVIxEjESM1MzU0Njc2NjMyFhc3A7S8G08YooLz7bx/f0A6N69kPI4oYgV8AwRrjC+c/D8DwZwxZ5QzMDIOBAgAAAEAhwB8A9cGFAATAFxAPQsODxARCAYJqg8KAQoHEhMAAQQGBaoGCgYMAwwBDxUfFQIQADoCBAcICwwNDhESAQoCKAMJBTogA2ADAgMvXfYyEO0XORD2Ml0APy8SOTkv7Rc5L3HtFzkxMAElEyMTBTUFEQU1BQMzAyUVJRElA9f+lQWEBf6VAWv+lQFrBYQFAWv+lQFrAfsF/nwBhAWBBQGiBYEFAYT+fAWBBf5eBQAAAQC+AgQBrQMVAAMAD7YCVgEIAC0BL+0AP+0xMAEjETMBre/vAgQBEQAAAf/z/uwBggEbAAMALrkAAP/oQBkNEDcBGAkMNwIYCRA3AQ8DAQEfAwEDAGMCL+0AL10zXS8xMAErKysBASMTAYL++4qdARv90QIvAAL/+P7sAw0BGwADAAcAUbkABP/oQA4NEDcFGAkMNwYYCRA3ALj/6EAhDRA3ARgJDDcCGAkQNwEABQEFBQMPBx8HAgcAYwICBGMGL+0zL+0AL108My9dPDEwASsrKysrKwEBIxMjASMTAw3++4adnP77hp0BG/3RAi/90QIvAAcAZv/jCrUF7QALAA8AGwAnADMAPwBLAOhAHEYNAQ8MDQ04Dg8UDg4PeR92JXkrdjF5Q3ZJBj24//BACQkLNzcQCQs3Gbj/8EAJCQs3ExAJCzcJuP/wQGcJCzcDEAkLNyW8LwNPAwIDAx+8CQIPAw4IQyu8PSAZQBkCGRlJMbw3EwokDCsOAgwORioAOgE6QCo6ADQBNC4qABYBFjQWKCoMDgYPEEAQAhAcKg8AAQAAIioQEAYgBjAGUAZwBgUGL10z7TMvXe0vXRI5Oe0zMy9d7S9dM+0vXe0vL10APzz9PDMvXTz9PD8/P+0zL13tKysrKysrXTEwhwUuK4d9xAFdARQGIyImNTQ2MzIWJQEjAQEUBiMiJjU0NjMyFgE0JiMiBhUUFjMyNgE0JiMiBhUUFjMyNiUUBiMiJjU0NjMyFgc0JiMiBhUUFjMyNgMntauus7arrrICmvz0pQMMAk21q66ztquusvsMR2dnSERrZ0cEQkdnZ0hEa2dHA/61q66ztquusrJHZ2dIRGtnRwQ04dnc3eDa3MD6LwXR+8zh2dzd4NrcAbqYnJ6Xlp6e/gCYnJ6Xlp6el+HZ3N3g2tzdmJyel5aengD////2AAAE1gftAjYAJAAAARcA1gAnAWEAC7YCAA0NAQIlASs1AP//AJcAAAQ6CAECNgAoAAABFwDWADwBdQATQAsBUBABAQAQDAECJQErNQBdNQD////2AAAE1ggBAjYAJAAAARcAjf/3AXUAE0ALAlAMAQIADA4BAiUBKzUAXTUA//8AlwAABDoHUAI2ACgAAAEXAI4AYwF1ABtAEAIBUBEBAgFAEQEAEQwBAiUBK101NQBdNTUA//8AlwAABDoIAQI2ACgAAAEXAEMAVAF1ABdADgFQDwEBQA8BAA8NAQIlAStdNQBdNQD//wBdAAACnwgBAjYALAAAARcAjf8qAXUAE0ALAVANAQEADQ0GByUBKzUAXTUA//8AKgAAAtUIAQI2ACwAAAEXANb/UAF1ABNACwFQDgEBAA4OBgclASs1AF01AP//AEwAAAKyB1ACNgAsAAABFwCO/08BdQBOtgIBUBEBAhG4/8CzICM3Ebj/wEAUGhw3EUAWGTcRQAwPN4ARkBECARG4/8CzFhk3Ebj/wEAJDA83ABEMBgclASsrKzVdKysrKzUAXTU1//8AXQAAAp8IAQI2ACwAAAEXAEP/cwF1ABy1AVANAQENuP/AQAkNEDcADQ0GByUBKys1AF01//8AQv/hBWcIAQI2ADIAAAEXAI0AgwF1ABdADgJQKwECMCsBACsrDwMlAStdNQBdNQD//wBC/+EFZwgBAjYAMgAAARcA1gCaAXUAE0ALAlAsAQIALCwPAyUBKzUAXTUA//8AQv/hBWcIAQI2ADIAAAEXAEMAtQF1ABlAEAJQKwECUCtwKwIAKysPAyUBK101AF01AP//AIX/4QS6CAECNgA4AAABFwCNAHwBdQAfQBYBUCABAQAgECAgIFAgcCAFACAfBxclAStdNQBdNQD//wCF/+EEuggBAjYAOAAAARcA1gBpAXUAE0ALAVAgAQEAICAHFyUBKzUAXTUA//8Ahf/hBLoIAQI2ADgAAAEXAEMAuAF1AB1AFAFQIAEBMCBAIFAgcCAEACAeBxclAStdNQBdNQAAAQCMAAABSARdAAMAa7QCBQEIALj/8kAQDw8GOwAaTwGwAcAB0AEEAbj/wLYJDzdPBQEBuP/0QBcQEAY7AQgPDwY7AQQNDQY7AQwMDAY7Abj/0kAJCwsGOwEBBQQFuP/AsgsPNysREjkvKysrKytdK13tKwA/PzEwISMRMwFIvLwEXQAAAQDaBREDhQaMAAYAK7kABv/wQBQOEDcFEA4QNwECAwUFYAMBAwAABC8zLwAvXTMvEjk5MTABKysBIwMDIxMzA4Wfubib5OMFEQEA/wABewABAKEFJAPABmAAGQBat4gImAipCAMQuP/wQC8MDjcDEAwONwgSBRQEEAMZDRkJvQ8QHxACEBa9EA1gAwEDCBIFFAQNGSkADCkADS8z7S/tEhc5AC9dMzPtL13tMy8vERIXOSsrMTBdAQYGIyImJyYmIyIGByM2NjMyFhcWFjMyNjcDwAqBazRYKixAHzEnBIwHimQzVisrRR0vKwMGYJycJigpK1pMmp0nJicpWkgAAAEAtgU3A6gF0QADABpADgK+DwEBEAFgAQIBAAACLzMvAC9dce0xMAEhNSEDqP0OAvIFN5oAAAEA5gTnA3kGZAATACq5AAr/8EATExQ3DAAAEKo/BgEGEyoAAA0qDC/tMy/tAC9d7TMvPDEwASsBFAYHBgYjIiYnJiY1MxQWMzI2NQN5KictcllSeyopKqJUVE9YBmRWjTA1NTczMoxVh3d1iQAAAQHEBRgCmgXbAAMAE0AJAkRgAQEBABUBL+0AL13tMTABIzUzAprW1gUYwwACAP0EYANhBroACwAXADFADQ+qCQkVqgMGEAkLNwC4//BADQkLNwwp0AABAAASKQYv7TMvXe0rKwAv7TMv7TEwARQGIyImNTQ2MzIWBzQmIyIGFRQWMzI2A2GxgYCysoCBsZNZRkVaWUZGWQWNgaytgICtrIJKY2RJSWJjAAABASH+WQMFABQAFAAgQBEGEAsMNwAKCg6+Bg0UKgMDCS8zL+0AP/0yLy8rMTAlFhYVFAYjIiYnNTMWFjMyNjU0JicC/wEFroUlZCgJGE4oXlACAhQSNySirAwMoAsXT1caPicAAgD6BRYEGwaMAAMABwBNtUUARQQCBLj/6EAJDhA3BhgOEDcAuP/oQBwOEDcCGA4QNwcDAwVgAQEBnwCfBAIAAAIEAgQGLzMzLy8zL10AL10zMy8zMTABKysrK10BASMTIwEjEwQb/v6LqbD+/oupBoz+igF2/ooBdgABAVb+XwMOAAoAFAAiQBE4DgEACgoGvQ4NAAAKCgMqES/tMy8yLwA//TIvL10xMCUGBhUUFjMyNjczFQYGIyImNTQ2NwIFBglCWCFBEwkkUSKHmgwJChs3I1FQEwueCgufjSM6IgABANYFEQOBBowABgAqQBlUAVkCZAFrAnQBfAIGBgUCAwNgAgECAAADLzMvAC9dMy8SOTkxMAFdAQMjAzMTEwOB5OPkn7m4Boz+hQF7/wABAAAAAQAYAAAEHwXRAA0AkkAOLAMqCgIKCwIDCAUECQS4/+xAGgkPNwQ5AwMKCgQJAwkDCQEGAww1AQgKAwoAuP/AQAwKETcAAA8ICxQFAwK4/+S0DxAGOwK4/+q0DQ0GOwK4//S0DAwGOwK4//C2CwsGOwKZDhD2KysrKzIy/TIRMy8rOS8vAD/tPxI5OS8vEjk5MTCHEP0rh8DAEMDAwABdISERBzU3ETMRARUBESEEH/yhqKjGAUf+uQKZAh+KoYcDFP17AQyh/vj+AQAAAQAYAAACHAYUAAsAlkAoSQBJBVkAWQVpAGUGegBzBggEBwEKBAs/BQEFCwULAwgBAwgABQAKAbj/8kAJDw8GOwEaBQcEuP/AsxEUNwS4/8CzCQw3BLj/8EAREBAGOwQgDw8GOwQgDAwGOwS4/+S0DQ0GOwS4//hACgsLBjsEEA0wDQJdLysrKysrKyszM/0rMjIvLwA/PxI5OS8vXRIXOTEwXQEHESMRBzU3ETMRNwIcpbyjo7ylA1eC/SsCTYafggMs/VyGAP//AE3/5QRCCAECNgA2AAABFwDfACEBdQATQAsBUDkBAQA5ORcuJQErNQBdNQD//wBD/+UDawaMAjYAVgAAARYA364AAAu2AQA8PBoxJQErNQD//wA8AAAETAgBAjYAPQAAARcA3wANAXUAE0ALAVAMAQEADAsFBiUBKzUAXTUA//8AMQAAA2YGjAI2AF0AAAEWAN+fAAALtgEADAsFBiUBKzUAAAIBNP54AdsGFAADAAcALkATAQYBBgUCAQULAAQfARAFIAUCBbj/0LQLCwY7BS8rXTz9PAA/PxI5OS8vMTABIxEzESMRMwHbp6enpwL2Ax74ZAMeAAIAGAAABVYF0QASACUArUAiGwIeAxAQFBFJFkUjBh4IvRsLCwwfNAcIGjQMAxwcGxMVALj/6LQMDAY7ALj/8bQNDQY7ALj/4EAbCwsGO3kAAQBnJw8nARsfDwkBCQkLHxQABwEHuP/gtBAQBjsHuP/mtA8PBjsHuP/2tA0NBjsHuP/0tAwMBjsHuP/wtgsLBjsHmSYQ9isrKysrXe08My9dEDxdEPZdKysr7RE5LwA/7T/tEjkvPP08MTBdARQCBwYGIyERIzUzESEyFhcWEgc0JicmJiMjESEVIREzMjY3NjYFVqWLb+u1/qmoqAFT0u9UkJ7OcnBPtIaXAUf+uZeExlJnaALnzP64XEotAuSPAl4/N1/+xdes80QwKv5Mj/3GKzhG6QAAAgA5/+EEHQYeAB8AMQChQAxBIGUHZxtmHnchBRi4/9CzDhA3L7j/8EAhCww3DAMpPzAJQAkCCQ8SGh0EGxAQCQMWGxsWAi8+AwosuP/wQDIMDTcjEAwMNwwQDg43DBALCzcGEA4ONxwRGh0cAwAREg8MJgUWIxMWBgAAcTMsFAZwMhD27RD0LxI57S8XORIXOS8vKysrKysAP+0/My8REjk5LxIXOS9d7RI5KzEwK10BEAAjIgA1NAAzMhYXJiYnBSc3JiYnNSEWFhc3FwcWEgE2NjU0JicmJiMiBhUUFjMyNgQd/vDq1v7sARK7ZJRTH4VP/vpC7lKUVwEoJlMp1EK+grL+5C4xAwJJmlB/raCIQHMCff69/qcBBv3nAQM1NXDZRqFhj0RNLBUcPh2BYW+C/qH9dTupliA3Hi4qoKe0riz////1AAAEqQgBAjYAPAAAARcAjQAUAXUAE0ALAVAKAQEACgoFACUBKzUAXTUA//8ABv5kA/YGjAI2AFwAAAEWAI3EAAALtgEACQkEACUBKzUAAAIAlwAABEcF0QASACEAhUAkGzQABwEHGjQgDAEMDAcJCgMJCBMQDA03VgABExUABBAQBjsAuP/otAwNBjsAuP/WQA0LCwY7AG8jDBsHFAAJuP/2QAsQEAY7CQYNDQY7Cbj//rQMDAY7Cbj/xrYLCwY7CWQiEPYrKysrMv0yMhD2Kysr7V0rAD8/Ejk5L13tL13tMTABFAYHBgYjIxEjETMRMzIWFxYWBzQmJyYmIyMRMzI2NzY2BEdGPE7bl6jGxq+FwkNTXs40ODCAWqaJd5gvLCkDE1ypOUtI/r4F0f7yLSw1qn1IayMeGf3NKS0pZgAAAgCI/mQEMQYUABAAHQCIQCM1ATsSMR1DAUsSQB1XD2YPCAsGAxRCDgQJARtAAwkIDBEbALj/6LQPDwY7ALj/4rQMDQY7ALj/2kAMCwsGOwBxHwsXBxoIuP/8tBAQBjsIuP/2QAsPDwY7CAoNDQY7CLj/yrYLCwY7CG4eEPYrKysr/TIyEPYrKyvtAD8/7T8/7RI5OTEwXQEQACMiJicRIxEzETY2MzISAzQmIyIGBxEWFjMyNgQx/vXMU4BDvLxGq2XA18J6iVCVQ0ppRJKiAkz+6f61Jij+LAew/dQ/Vf7Q/uu/00c4/YckGtYAAAEAtgI8BRwC3AADABRACQC/DwIBAgAAAS8zLwAvXe0xMAEhNSEFHPuaBGYCPKAAAAEA0ABzBQIEpQALAC5AINcC2AgChwCHBJYCmQinAgXXBdgLApMFngulBagLBAUCGS8ALzEwAV1xAF1xJQcBAScBATcBARcBBQJv/lb+Vm8Brv5SbwGqAapv/lLibwGu/lJvAaoBqm/+UgGub/5WAAABAPgCNgMrBdUADwAuQBgOA6oBDgW7BgYMAwUFAg8PDA4qAnADAQMvXTPtOTIvLzMvAD8zL+0//TIxMAEhNTMRIzUyNjc2NjczETMDK/3VzNQtYhkfIwOHvwI2egI4cAwNECwo/NsAAAEAuQI2A2IF7wAdAFC5ABD/0LMNEDcTuP/wQBAJDTcCHL0BDg8PEAu9EwIWuP/4QBMKDTdmFnYWAgAAHAIIKhYQFhACLzMzLy/tEjkzL10rAD/tMzMvP/0yKysxMAEhNTY2NzY2NTQmIyIGByM1NjYzMhYVFAYHBgYHIQNi/VdNjSxqQlZMRY0pDz+ZSpynT2w0ijYB7QI2mDttK2ZzUUVLPCCzGyKde1WdYS5nKQAAAQC4Ah4DRQXvAC4AirU2JlYnAiW4//CzCgs3Irj/wEArDhA3CUAOEDcGEAkMNywrFbwPFk8WXxYDFhYlBgoKCQ68Bg8hISIdvCUCKLj/8LMNDTcouP/wQBYKCzcaKigWIhEqIhYoLAQJIAABAAAJLzMvXRIXOe0vLy/tKysAP+0zMy8/7TMzLxESOS9d7Tk5KysrKzEwXQEUBgcGBiMiJic1MxYWMzI2NTQmIyM1MzI2NTQmIyIGByM1NjYzMhYVFAYHFRYWA0U8MDV7T1KPQRElmk9UbldojH1XX1JXQpklEUCWT5iqYU1QdQM8R3EhJSAeHK8jO0lISEaLTEI8Rz4jrxsijGJXcRoIEG0AAwCrAAAHmgXVAAgADAAqAJBAChUkJiEkJSImBCC4//CzCQo3Hbj/wEAcDRA3HBwYvSCbKbwODgsMAwsIAZsHA7sEBAcDI7j/8EAUCQw3ZiN2IwINDSkPFSojHSMdDwm4//BAEQwNNw8JZgkCCQkLAwcAKgMBLzPtOS8vMy9dKy8zMy8v7RI5My9dKwA/My/tEO0/PxA8EO397TMvKysxMF0BIxEjNTI2NzMFASMBASE1NjY3NjY1NCYjIgYHIzU2NjMyFhUUBgcGBgchAiGl0WZ+CYkDYfz0pQMMAr39V02NLGpCVkxFjSkPP5lKnKdxSjiFNQHrAjUCqXUsVgT6LwXR+i+PO20rZnNRRUs8ILMbIp17cp9CMWEoAAAEAKsAAAc3BdUACAAMABcAGgBtQD84C0gLZgppDG0TfRMGExYOGrwSGRIUmxAQCwwDCwgBmwcDuwQEBwMNFBgRKhYNGhMODhMJCTALAQsDBwAqAwEvM+05Ly9dMy8vMy8SOTMz/Tk5LwA/My/tEO0/PxA8EO05OS/tOTkyMTABXQEjESM1MjY3MwUBIwEBIxUjNSE1ATMRMyERAQIhpdFmfgmJA2H89KUDDAJao5b+OQHIlaP+y/6pAjUCqXUsVgT6LwXR+wvc3LkCG/2xAZD+cAAEAIwAAAdvBe0ALgAyAD0AQADKQAsxEAwNN2kxezkCJbj/8LMKCzciuP/AQD0OEDcJQA4QNwYQCQw3OTw0QLw4Pzg6mzY2MS8DMQgsKxW8DxY/Fk8WAxYWJQYKCgkOvAaaJSEhIh28JQIouP/wQCgKDTczOj83KjwzQDk0NDkPLwEvL38xATEaKigWIhEqIhYoLAQJAAAJLzMvEhc57S8vL+0vXTMvXS8zLxI5MzPtOTkvKwA/7TMzLxD97TMzLxESOS9d7Tk5Pz8QPBDtOTkv7Tk5MisrKysxMAFdKwEUBgcGBiMiJic1MxYWMzI2NTQmIyM1MzI2NTQmIyIGByM1NjYzMhYVFAYHFRYWAQEjAQEjFSM1ITUBMxEzIREBAxk8MDV7T1KPQRElmk9UbmRbjH1XX1JXQpklEUCWT5iqYU1QdQLD/PSlAwwCOKOW/jkByJWj/sv+qQM6R3EhJSAeHK8jO0lIUzuLTEI8Rz4jrxsijGJXcRoIEG0COfovBdH7C9zcuQIb/bEBkP5wAAEAIgAABBMF0QARAIhAOgwJvA8GBgsCNU8FAQUFEAsIATUQAyADQAMCCAgDAzAAAQAAEwEFCg4KFA4PYAtwC4ALAwsQEBAGOwu4/960Dw8GOwu4/+i0DQ0GOwu4/+C0DAwGOwu4//K0CwsGOwsvKysrKytdPDPtLxA8PBEzL10zLzkvXQA/7T8SOS9d7RI5Lzz9PDEwASERIRUhESEVIREjESM1MxEhBBP9hwJc/aQBPf7DxrKyAz8FIf5csP7yi/7MATSLBBL//wBC/+ME9QfZAjYAKgAAARcA2QCzAXUAE0ALAVA9AQEAPTEGEiUBKzUAXTUA//8AO/5ZA+QGZAI2AEoAAAEWANkFAAALtgIAQDQgKyUBKzUA//8AXQAAAp8HUAI2ACwAAAEXANr/UAF1ABNACwFQDQEBAA0MBgclASs1AF01AAABAE3+WQRCBewASgFQsQYCQ1RYuQAu//a0Dw8GOy64/+a0DA0GOy64/+BAEQsLBjsXCg0NBjsXDgwMBjsXuP/qQBoLCwY7Fy4CTEsRDgIiACgrAggiNBoCCDQACgA/7T/tEhc5ERIXOQEREhc5KysrKysrMTAbQGYGBhUGGiAmBi8NKRQpICsrOQI5DTYcNCdKAkUKSgxFHEokRCdaAlYKWQ9aGFUcXiRlBmoTbBVmGGUcZihgLGgwdhwhOSAJDDd6DnQoAigrEQ40BQAaHx4vHn8eAx4eIjQaAnEFAQW4/8BAJQkLNwUFCDQACj4+Qr46DT09RSo3ADczAwQoKxEOBC4XHh4LFS64/8BAFQkUNy4uTA9MT0wCBAQlFaAXsBcCF7j/wLMMETcXLytd7TMvXREzLyvtMy8REhc5ERc5L+0zLwA//TIvP+0zLytdP+0zL10REhc5XTEwK11ZBSImJzUzFhYzMjY1NCYnJiYnJiYnJiY1NCQzMhYXFSMmJiMiBhUUFhcWFhcWFhUUBgcGBgcWFhUUBiMiJic1MxYWMzI2NTQmJwYGAjai42QOYvhzpKhYYEVyVk16Ly4zARrbfd9fD0feeoqqZF8/tjyajkdAJ1E1AQSwhSVkKAkYTiheWAEBER0aQjH4XGWJcFlwGxQaFhQ+MjGFV7X1Mi7tQWGBaV9wGhErEi++i1eqOyMwEhAzHaKsDAygCxdPVxIpGQECAAEAQ/5ZA2sEeABNATexBgJDVFi5ADH/4EALDxAGOzEKDQ0GOzG4/9hAEQsLBjsaBA8QBjsaEg0NBjsauP/oQBoLCwY7GjECT04XFAIlACsuAgslPh0ECz4ACQA/7T/tEhc5ERIXOQEREhc5KysrKysrMTAbQIMKGAYvGhgVLyYHKSM2BzkjSgJFH1kCWRhUH1AvaQJlH2UtYy95AnUfhB+EI4Q2kzYYGRQZFykUKRc7FDsXBhQXF7QrLhQrKy51K4sriy4DKy4XFDcFAB2QIQEhISU+HQQEBAs+AAlBQUW+PQ1AQEgqOgA6NQMxAyArLhcUAyAGGhEbMbj/wEAJCRY3MTFPKBsauP/Asw4VNxovK+0RMy8r7RIXOS8vEhc5L+0zLwA//TIvP+0zLz/tMy9dERIXOV2HDi4rDn0QxABxMTBdWQUiJic1MxYWFxYWMzI2NzY2NTQmJyYmJyYmNTQ2MzIWFxUjJiYjIgYVFBYXFhYXFhYVFAYHBgYHFhYVFAYjIiYnNTMWFjMyNjU0JicGBgG2cMNAChhBNjBzPi1mGSMfSV0kdDGAdOS9XbxACkixWl2ATFQqZzl8fTk3FywcAQWwhSVkKAkYTiheWAEBFSQaOyLTEy4ZFiIVEBc0NENEFwkYDiWbbpe+LiPJOUJOT0ZFFgsVDh+QfEiBLhMcDBI1IqKsDAygCxdPVxIqGQICAP//AEL/5QSsCAECNgAmAAABFwCNAGQBdQATQAsBUDYBAQA2NQYSJQErNQBdNQD//wA7/+cDjgaMAjYARgAAARYAjcQAAAu2AQAqKQYPJQErNQD//wBC/+UErAgBAjYAJgAAARcA3wCWAXUAE0ALAVA3AQEANzoGEiUBKzUAXTUA//8AO//nA44GjAI2AEYAAAEWAN/0AAAQQAoBACsBACsuBg8lAStdNQACADv/4QSKBhQAIQAuAL5ARDwDPCg0KjwuTANPKEQqSS4IIRi8Hu8bARsbFBwBAhcIJkEUBAEILEIIChkZDh8fHhsYIwQBGmAAgACfAAMAHhAQBjsAuP/mQAsPDwY7AAoNDQY7ALj/9rQMDAY7ALj/8EAiCwsGOwAAMCkbDhYQEAY7Dg8PDwY7DhgMDAY7DhoNDQY7Drj/4LYLCwY7DnAvEPQrKysrK+0RMy8rKysrK13tFzkzLxE5LwA/7T8/7RI5OT8SOS9dPP08MTBdISM1BgYHBgYjIiYnJiY1NDY3NjYzMhYXNSE1ITUzFTMVIwMRJiYjIgYVFBYzMjYD5LwsQCsoVjlbmzY3PExDPa1fVHxF/tMBLbymprxGb0GRpH6LSpZyJTAUExVMSUrZjZPXUElTJSfEhpqahvwcAoQiGtnNxdFDAAH/8AZ7BG4G/QADAA+1AaoCAAACLzMvAC/tMTABITUhBG77ggR+BnuCAAEA8wNAAeIEXQADAA+2AVYCBQMtAi/tAD/tMTABIxEzAeLv7wNAAR0A////9gAABNYH2QI2ACQAAAEXANkANgF1ABNACwJQFwECABcLAQIlASs1AF01AP//ADr/4QOzBmQCNgBEAAABFgDZ2wAAC7YCAEM3GTQlASs1AAAC//b+XwV8BdEAGwAeAP1ASgUICgslCCoLOQQFHR4dHAWHBAEEFAsKCx0eBocHAQcUCAgJBQkKChUJGgomCSkKRQhKCUUKSgt1CHoLDBYWEr0aBjQeQAwNBjseuP/AQBgQEAY7MB5AHgIeHR4ICQMLBAgIFxcPKgG4/8BAChATNwEJCgEDCAu4/9i0EBAGOwu4/+y0DAwGOwu4/9C0CwsGOwu4/8BAIQkRNwsLIA8gHyA/IH8gjyAFDyABCCgQEAY7CCAMDAY7CLj/7rQLCwY7CC8rKytdXREzLysrKysSFzkvK+0zLwA/MzM/Ejk5L10rK+0v/TIvMTABXYcQ/V3AwMCHEP1dwMAIwAFdADU0NjcDIQMjATMBIwYGFRQWMzI2NzMVBgYjIgEDAwPEHQtu/ceHyAH29AH2YwYJQlghQRMJJFEifP7e5uX+9ZY6ZyIBUv5gBdH6LxwpJlFQEwueCgsD6gK+/UIAAAIAOv5fBJwEeAAMAEoA0LkALv/wswkKNyu4/8BADA4RNwE9H0ANDQY7H7j/wEAvDA03Hx8TLk8qASoqJj8uBEo2CAAOCkETCkBAPL1EQEA5KkdHHwBKGjUKDw8GOzW4//a0DAwGOzW4/+BAMwsLBjs1b0wZEA4QNxkQCQs3K0AJCzcrKwcbGQ4QEAY7GQoPDwY7GRYNDQY7GRIMDAY7Gbj/3LYLCwY7GXBLEPYrKysrK+0zLysrKxD2Kysr/Tw8Mi/tMy8AL/0yLz/tMzM/Mz/tMy9dERI5Lysr7SsrMTABEQYGBwYGFRQWMzI2FwYGBwYGIyImJyYmNTQ2NzYkNzU0JicmJiMiBgcjNTY2MzIWFxYWFREjBgYVFBYzMjY3MxUGBiMiJjU0NjcC+EPNP0tibGhZkD8XTSQyXVRFfC8tNmJqXgEAlCgkJGg3QbBYCzTCX3OePz08IgYHQlghQRMJJFEie6YLCQETATYGFRMXX1VgYk1kET0SGhw0Ly6HS3SjMCshCCRCURYXDyclvw8kJC8ukmn9BBo2G1FQEwueCguUmCE8H///AJcAAAUtCAECNgAnAAABFwDfAFoBdQATQAsCUCMBAgAjIwgPJQErNQBdNQAAAwA7/+EFwQYUABkAJgAqALS5ACf/wEBDDhA3KBgJDTcpGAkQNzwgMyI5JkwgRSJ4HAYICAwONxoCCBsXFCgoKioYAB5BFAQBCCRCCAonJykXGgEaKV8AfwACALj/8rQPDwY7ALj/3rQNDQY7ALj/8kAbCwwGOwAAIRsOFg8QBjsOGgwMBjsOFA0NBjsOuP/gtgsLBjsOcCsQ9CsrKyvtMy8rKytdM/08PC8zLwA/7T8/7T88ETMvETMzETMzKzEwXQErKyshIzUGBgcGBiMiJicmJjU0Njc2NjMyFhcRMwMRJiYjIgYVFBYzMjYBAyMTA+S8LEArKFY5W5s2NzxMQz2tX1R8Rby8Rm9BkaR+i0qWAtvwf45yJTAUExVMSUrZjZPXUElTJScB5Pr8AoQiGtnNxdFDBT3+BwH5AAIAGAAABVYF0QASACUArUAiGwIeAxAQFBFJFkUjBh4IvRsLCwwfNAcIGjQMAxwcGxMVALj/6LQMDAY7ALj/8bQNDQY7ALj/4EAbCwsGO3kAAQBnJw8nARsfDwkBCQkLHxQABwEHuP/gtBAQBjsHuP/mtA8PBjsHuP/2tA0NBjsHuP/0tAwMBjsHuP/wtgsLBjsHmSYQ9isrKysrXe08My9dEDxdEPZdKysr7RE5LwA/7T/tEjkvPP08MTBdARQCBwYGIyERIzUzESEyFhcWEgc0JicmJiMjESEVIREzMjY3NjYFVqWLb+u1/qmoqAFT0u9UkJ7OcnBPtIaXAUf+uZeExlJnaALnzP64XEotAuSPAl4/N1/+xdes80QwKv5Mj/3GKzhG6QAAAQCX/l8EXwXRACAAi0ArFhYSvhoNCDUFBQEJNQwACAQ1AQMdHgkMNxcXDyodHQAABhAGIAYDBgYCCrj/4EAOCwsGOwpnIg8iAQUJFAC4//S0EBAGOwC4//xACwwMBjsABw0NBjsAuP/CtgsLBjsAZCEQ9isrKyv9Ml0Q9isyMi9dETkv7TMvKwA/7T887RI5L+0//TIvMTAzESEVIREhFSERIRUjBgYVFBYzMjY3MxUGBiMiJjU0NjeXA6P9IwKr/VUC3eQGCUJYIUETCSRRInylCQcF0bD+aLD917AcKSZRUBMLngoLlpYiNR4AAAIAO/5fBAAEfAAyAD8A0UASRg9YAVg2AzkYDA03GTAMDzcRuP/wswsNNwa4//hAMA8QNykpJT0tDT88Dg4AOT0GBBgfGRgDET8ACTAQDA03ZwwBKioiKjAwDAMZGTMaDLj/8rQQEAY7DLj/6rQPDwY7DLj/7rQNDQY7DLj/1kAjCwsGOwxxQT8OGgMYEBAGOwMWDw8GOwMQDQ0GOwMcDAwGOwO4/9y2CwsGOwNwQBD2KysrKyv9PBD2KysrK+0zLxESOS/tMy9dKwA/7RczLz/tEjkv7T/9Mi8rKysrMTBdBSYAERAAMzIWFxYWFRUhFBYzMjY3NjY3MxUGBgcGBgcGBhUUFjMyNjczFQYGIyImNTQ2ASYmJyYmIyIGBwYGBwI/9v7yAR7naKA8PED8+sStPncwM0YXCyFiJxg3FQQGQlghQRMJJFEie6YHAQ8CIB4hZ0xLaSsqLAYYDQEqAQkBEQFDPEBAuYZmw84cFhcrE80NJwsGDAMRMxdRUBMLngoLlJgZLwLYTG4mKiwtKyxrRwD//wCXAAAEOggBAjYAKAAAARcA3wBaAXUAF0AOAVARAQFgEQEAEREBAiUBK101AF01AP//ADv/5gQABowCNgBIAAABFgDfCgAAC7YCAC4tAw0lASs1AP//AJcAAAP2CAECNgAvAAABFwCN/0wBdQATQAsBUAgBAQAIBwMDJQErNQBdNQD//wByAAACGAgBAjYATwAAARcAjf6xAXUAJ0AdAW8GfwafBq8Gzwb/BgYGQAkNNwYRJgEABgQDAyUBKzUAKytdNQAAAgCXAAAD9gYUAAUACQB1uQAG/+hAGw4QNwcYCQ03CBgJEDcQCAEICAkBAgMENQEIALj/vrQLCwY7ALj/wEANChE3AAALBgYIBBQIAbj/9EALEBAGOwELDQ0GOwG4/8i2CwsGOwFkChD2KysrMu0vMy8RMy8rKwA/7T8/My9dMTABKysrISERMxEhAwMjEwP2/KHGApk/8H+OBdH63wVk/gcB+QACAIwAAAMlBhQAAwAHAF+5AAT/6EAiDhA3BRgJDTcGGAkQNxAGAQYGBAQCAQEIBAQGQBARNwYGALj/+LYPDwY7ABoBuP/0QA0PEAY7AQQMDAY7AW4IEPYrK+0rMy8rMy8APz8zETMvXTEwASsrKyEjETMhAyMTAUi8vAHd8H+OBhT+BwH5AAIAlwAAA/YF0QAFAAkAY0ASB1YIQAsLBjsICAECAwQ1AQgAuP++tAsLBjsAuP/AQA0KETcAAAsJLQgEFAgBuP/0QAsQEAY7AQsNDQY7Abj/yLYLCwY7AWQKEPYrKysy7S/tETMvKysAP+0/EjkvK+0xMCEhETMRIQMjETMD9vyhxgKZiunpBdH63wFXAQsAAAIAjAAAAyYGFAADAAcAUEAWBVYGBgECAQEIBy0GAAsLBjsGBgAaAbj/+rQQEAY7Abj/6kALDw8GOwEEDAwGOwG4/8a2CwsGOwFuCBD2KysrK+0zLyvtAD8/Ejkv7TEwISMRMwEjETMBSLy8Ad7n5wYU+/QBCf//AJcAAATACAECNgAxAAABFwCNAHUBdQATQAsBUAwBAQAMCwUJJQErNQBdNQD//wCIAAAD9gaMAjYAUQAAARYAjQAAAAu2AQAYGAsCJQErNQD//wCXAAAEwAgBAjYAMQAAARcA3wCRAXUAE0ALAVAMAQEADAsFCSUBKzUAXTUA//8AiAAAA/YGjAI2AFEAAAEWAN8cAAALtgEAGRgNFiUBKzUA//8AQv/hBWcIAQI2ADIAAAEXAN0AlgF1ABdADQMCUC4BAwIALiwPAyUBKzU1AF01NQD//wA5/+EEHwaMAjYAUgAAARYA3fQAAA23AwIAHRkGACUBKzU1AP//AJcAAAUYCAECNgA1AAABFwCNABQBdQATQAsCUCIBAgAiIQYNJQErNQBdNQD//wCIAAAC2AaMAjYAVQAAARcAjf9QAAAAC7YBABUUCgAlASs1AP//AJcAAAUYCAECNgA1AAABFwDfADIBdQATQAsCUCIBAgAiIRgRJQErNQBdNQD//wA2AAAC4QaMAjYAVQAAARcA3/9gAAAAC7YBABgYCgAlASs1AP//AE3/5QRCCAECNgA2AAABFwCNAAABdQATQAsBUDUBAQA1NRcuJQErNQBdNQD//wBD/+UDawaMAjYAVgAAARcAjf98AAAAC7YBADg4GjElASs1AAAB///+WQStBdEAHACJQBQHEhIWvg4NBgE1AwMACA8ePx4CC7j/8EAZCgw3ERELKhkFWxkHFAJbEAAgAJAAoAAEALj/9LQQEAY7ALj/9EALDw8GOwAgDAwGOwC4/+m0DQ0GOwC4/9RADQsLBjsAAB4dbx5/HgJdERI5LysrKysrXeT9OeQv/TIvK10APz/9Mj/9Mi8vMTAhESE1IRUhETMWFhUUBiMiJic1MxYWMzI2NTQmJwHz/gwErv4MfQEFroUlZCgJGE4oXlIBAgUhsLD68xI3JKKsDAygCxdPVxUzIwAAAQAV/lkCqgWeAC8Aq0AqASAJCzcmJioqviINCAgNBD4KBwUcABgYFD8ACT8xASUlLSkfHwEYAxgLuP/0tAwMBjsLuP/gQCMLCwY7AAsQCyALAwsLMQoNBg0IDAwCOw0aBw8GHwYgAwMGA7j/8kALDw8GOwMKDQ0GOwO4//y2CwsGOwOYMBD0KysrMl087SsvEDwRMy9dKys8ERI5OS/tMy9dAD/9Mi8SOT88/TwzLz/9LzMvMTAAKwUmJjURIzUzETMRIRUhERQWFxYWMzI2NzMVBgYHFhYVFAYjIiYnNTMWFjMyNjU0JgHSl6d/f7wBWv6mBhQRTEEuVhMLDCUUAQOuhSVkKAkYTiheWgEVA627AmucAUH+v5z97VVcKCMjGwmpAwoDDioboqwMDKALF09XEisA/////wAABK0IAQI2ADcAAAEXAN8ALAF1ABNACwFQCgEBAAoJAQYlASs1AF01AAACABX/6gQBBhQAGwAfAJG5ABz/6EA9DhA3HRgJDTceGAkQNwEgCQs3Hh4fAQgIDQQ+CgcFGBgUPwAJHBweHgsLAxgYAwoNBg0aBw8GHwYgAwMGA7j/8rQQEAY7A7j/8kATDw8GOwMEDQ0GOwMGCwsGOwOYIBD0KysrKzJdPO0vEDwRMy8SOS8zLzMvAD/9Mi8/PP08My8/My8xMCsBKysrBSImNREjNTMRMxEhFSERFBYXFhYzMjY3MxUGBgEDIxMB2pqsf3+8AST+3AYUEUxBLlYTCzVtAfnwf44Wr70Ca5wBQf6/nP3tVVwoIyMbCakPEQYq/gcB+QD//wCF/+EEuggYAjYAOAAAARcA2wBxAV4AF0ANAgEhBSYCAQAkHgcXJQErNTUAKzU1AP//AID/4QPuBroCNgBYAAABFgDbDQAAF0ANAgEdESYCAQAgGgwZJQErNTUAKzU1AP//AIX/4QS6CAECNgA4AAABFwDdAHABdQAjQBgCAVAjAQIBACMQIyAjQCNgIwUAIyAIFiUBK101NQBdNTUA//8AgP/hBBsGjAI2AFgAAAEWAN0AAAANtwIBACAaDBklASs1NQD//wA8AAAETAgBAjYAPQAAARcAjQAAAXUAE0ALAVALAQEACwsFCSUBKzUAXTUA//8AMQAAA2YGjAI2AF0AAAEXAI3/eAAAABJADAEgCzALAgALCwUJJQErXTX//wA8AAAETAdQAjYAPQAAARcA2gAUAXUAE0ALAVALAQEACwoFBiUBKzUAXTUA//8AMQAAA2YF2wI2AF0AAAEWANqSAAALtgEACwoFBiUBKzUAAAEAlwAABAoF0QAFADi1ATUEAwMAuP/AQAkJETcAAAcCFAO4//K0DxAGOwO4//y2DQ0GOwNkBhD2KyvtETMvKwAvP+0xMAEhESMRIQQK/VPGA3MFIfrfBdEAAAMAQv/hBWcF8AAXACkALQC4QC4KCQUVGgkVFVoJVRUGKzVgLAEsLCceNBUCJzQJCnAqASorKiskGAYNDQY7GBUDuP/stAwMBjsDuP/stA0NBjsDuP/cQBcLCwY7eAMBA2cvDy8fLz8vfy8EDy8BJLj/+EAfDQ0GOyQVDw4QEAY7Dw4PDwY7DxQNDQY7DxYMDAY7D7j/4EAKCwsGO3cPAQ9mLhD2XSsrKysr7StdXRD2XSsrK+0rETk5Ly9dAD/tP/0ROS9d7V0xMAEWEhUUAgcGBiMiJicmAjU0Ejc2NjMyFhM0JicmJiMiBgcGBhUQEjMyEgMhNSEEtFVeXFdb85KX8ldWXF1WVvOWmPQ5QDo7p2hsoT47P/bPz/Wf/bUCSwUmYv7eurX+3GNoY2ZlYwEit7wBHGZjZ2r9YpTkS01NS09M5pH+2/7JATcBBrMAAAMAQv/0BbsF3QAMACoANwCgQB83ADINoCgBKCgpAysMMhmvHAEcG3YTeSICMRAKCzcGuP/wQCEKCzcxFRMGEBAGOxOPGgwpKisEGhQbBhUiGBAQBjsijxu4//S0EBAGOxu4/+y0DQ0GOxu4/9hAGgsLBjuAG5AbsBsDGxs5DzkfOT85YDkEInA4EOZdEjkvXSsrK/Qr7RDtFzkQ9CvtKytdAC8vXTz9PD8zL108/TwxMAEGBgcGBhUUFhcWFhcTFhYXFhYVFAYHBgYHFSM1JiYnJiY1NDY3NjY3NTMRNjY3NjY1NCYnJiYnApxfijQ3ODo9Lo1axY3qTUhOVEtR7H7FfexTS1NQSE3ojcVajS49Ojg3NIpfBKYBNjU4pmF2rTssOgEECQNdT0rOhYvVSVBXA6ysBFJSSdiKgs9LUFwEnvtZAjcuPKx2Y6M5NjQCAAIAO//hA+gEfAAUACEAlUAnKxs8AzwbMR08IU8DTxtFHU8hCRMFAhIFGUEOBAEfQgUJE5YVARoAuP/mQAsQEAY7AAQPDwY7ALj/+rQNDQY7ALj/7LQMDAY7ALj/4kAcCwsGOwBvIxwbCBAQEAY7CBgPDwY7CBQMDQY7CLj/4rYLCwY7CHAiEPYrKysr7RD2KysrKyv9POQAP+0vP+0SOTk/MTBdISM1BgYjIgIRNDY3NjYzMhYXMzUzAxEmJiMiBhUUFjMyNgPovFCfYMDiS0Y9rl9UfUUEuLxGcEGbnYGLSpdySkcBNQEQit5SSVMnJy/8swKEIhrpvcXRQwAAAgA5/+EEHwYUABkAKADmQBs4DDIhSQxKJ2ULYR9gIH0OcBdwHHsnCxwWFBS4//ZADQwQBjsUtA8cFA8PHCa4/+izDA03Frj/8EAtDg83DxAMDzcUDwwdHBYGJhM+EAEmPwMKCQ8mDyYWRiMEFhwADx0MIxERGhsAuP/wtBAQBjsAuP/qtA8PBjsAuP/wtAwNBjsAuP/SQB8LCwY7AHEqFA8PIxsGEBAQBjsGFg8PBjsGEgwNBjsGuP/itgsLBjsGcCkQ9isrKyvtMy8zEPYrKysr7TMvETk5ERI5OV0AP+0//REXOSsrK4cFLisrhw59xDEwAV0BEAAjIgARNDY3NjY3JiYnNSEVIRUWFhcWFgc0JicGBgcGBhUUFjMyNgQf/vHj6P70SEE/rFxdo1UDCP3tPdNjlm3CbGlBhz09S5+TkZ8CJv7q/tEBLgEHf8pJR1MRUH8/s54KLpxcjPWfjuRPCDA1NK58ydDSAAEAPP/mA4gEeAA9AIBAOiYSJjs2O0kcRTtZAVQYagFvC2QYeQF6C3QYDQwsPysrAxYaGh4+FgQ9PTk/AwkZKyQbEBAMKxkECQC4/+K0CwsGOwC4/8BACQkUNwAAPzMbCbj/4rYLCwY7CXA+EPYr7REzLysrEhc5L+0vLwA/7TMvP+0zLxESOS/tOTEwXSUGBiMiJicmJjU0Njc1JiY1NDY3NjYzMhYXFSMmJiMiBgcGBhUUFhcWFjMzFSMiBgcGBhUUFhcWFjMyNjczA4hmunNKnUBBUWtzVWVVPz2bRlyaVQw9tFwqRicgLTMsKGQuWYQ4XSkmLjIjI14zYtFEDEAwKiEnJ4BdXpImBxeGW1d2IyIfIRzNMzYLFBBALj1EDw4DpggSEUo7OEgUExRIQAACADn/4QSqBHwAEQAdAIJAJToVNRsCAD8RBRU/DQQbPwcKRgRJCgIQAQoEAAASGwQSEBAGOwS4/960Dw8GOwS4/+JAIgsLBjsEBB8YGwoUEBAGOwoSDw8GOwogDQ0GOwoYDAwGOwq4/+C2CwsGOwpwHhD2KysrKyvtETMvKysr7TMvERI5OV0AP+0/7T/tXTEwASEWFhUQACMiABEQADMyFhchATQmIyIGFRQWMzI2BKr++ThE/vDi6f71ARPhMGMqAcD+s56SkqCfk5GfA7hGxX/+5v7NAT0BEAEYATYSDf3R2dPX1dLZ1QABAAQAAAO4BF0ABwBOQBQDCAEEPwYFADsCBTsCGqADsAMCA7j/8LQQEAY7A7j/9rQMDAY7A7j/1kANCwsGOwMDCQgPCX8JAl0REjkvKysrXe3kEOQAP/08PzEwASERIxEhNSEDuP6EvP6EA7QDuPxIA7ilAAIAOf5kBW0EegAdACQA4UAOeQIBD0AODzchEAsLNxq4//BADgwMNyE+GgQPBSJ3FwEXuP/wQCAJCzcXPgMGCQUMdRR6HgIMEAwNNwARAREhBBEEGheWBbj/8LQQEAY7Bbj//EAKDAwGOwUFDB4bALj/9LQQEAY7ALj/7rQPDwY7ALj/5rQMDQY7ALj/1EAiCwsGOwBxJg8mHyY/Jn8mBA8mARQbDBAPEAY7DBIMDQY7DLj/4kAKCwsGO28MAQxwJRD2XSsrK+1dXRD2KysrK+0SOS8rK+btMxA8L10rXQA/Pzz9K108Pz/tKysxMAErXQEUAAcRIxEmJicmJjU0EjczFQYCFRQWFxE2NjMgAAM0JiMRNjYFbf7D/7t10FBQWHJ5445+zK4hRycBIQFIwc6tvL8CQP3+vg/+cgGOBkxKScx/pQENiRFz/vmavuUGA+gCAf7U/vy42vyzCuwAAv/w/lkEbv+uAAMABwAqtQWq8AYBBrj/wEAOCQ43BgYBqgIEAAAJBQIvPBEzLzwAL+0zLytd7TEwBSE1IREhNSEEbvuCBH77ggR+1IL+q4IA//8A5AAAA5QF0QA2AAQAAAEXAAQB0AAAAB5AFAMCHw0gDV8Nbw0EDQEABQAREBECXS81NS9dNTUAAQB9AjYDegXvABYATrkAFP/gswkMNxW4/+CzCQw3E7j/+EAYFxs3ARATDQ2bCL4TAg4DASoAABgQCyoNuP/AswkRNw0vK/0yETMv7QA/P+39LxI5PCsxMCsBKwEjETQmJyYmIyIGBxEjETMVNjYzMhYVA3qsCBMSSDw/eT2rq0mIUZGfAjYCCkdmJSQiQTH9UAOaZD9Eta8AAAIAp//pBzcF0QBIAFcBK0AyChgKIgQsGBgcIhYsKCI5FTwYOUR6CHkYdTd2VQ5GQ0O0FxQUFxcUbwlgOAI5QA0ONwq4/8BANg0ONxdDFEYENQYvLx49MTk5MT08NS4hKFE0JTUlJ1A0KAMKCg48BgkgJwhJHw4QNxoQCww3ALj/8EAfCQw3F0MURgQAGkkODxAGO0kULzEfLx8aICAQEAY7ILj//rQPDwY7ILj/7EAfDQ0GOyAgGicJCUAaMh04PxoBGjgaOBEaAABZUCYTJ7j/8rQPEAY7J7j//LYLCwY7J2RYEPYrK/0yETMv7TMzLy9dEjk57TMvERI5LysrK+05EDwv7SsREhc5KysrAD88P+0zLz/tEjk5L+0SOTkv7TMzLy/tMy8REhc5Kytdhw4uKw59EMQxMABdARQGBwYGIyImJzUzFhYzMjY1NCYnJiYnJiY1NDY3IxEjEQYGIyMRIxEhMhYXFhYXMxUhNjYzMhYXFSMmJiMiBhUUFhcWFhcWFgE0JicmJiMjETMyNjc2Ngc3KyoueF5mlTEOPpJGUVs3SxxDJ2VYCQXEsT6/lmC8ASNvojc+TgZjAS8jbTlGlS8POnU+Rlc7OxpBK2Br+6wqKiZrRFc/WX4nJB8BEjluKCsvMRy7NkE8TDI6FAgVDSGDXRknEv0BA0tSX/1mBdEqKSyJYs8YHyQbtDIxSDo4NhIIFQ0dfgLIPl4dGhT+Gh8pJlYAAAIAXf/rBUwF0QALACEAnEAddhoBExMXNA8JCgIyAQgflggFMiAGAyAgExMdFAy4//C0EBAGOwy4/9lACw8PBjsMCA0NBjsMuP/6tAwMBjsMuP/mQBULCwY7DAwjB5YAEwoFAqAKFCADAQO4/+xACxAQBjsDBgwMBjsDuP/UtAsLBjsDLysrK13t9DwQ9OQRMy8rKysrK+0zLzMvAD88/TzkP/08P/0yLzEwXSEhNTMRIzUhFSMRMyUUBiMiJic1MxYWMzI2NzY2NREhNSEClf3Ivr4CQr60ArftyRpUKwshOBpcaxsbDv7uAdiYBKGYmPtf68TUBAaxCAkpKCh0TANlngAABAB//lkDmQXbABUAGQAdACEAoEAjHxtEIBwDEj4UFBgFFwgHBws/Aw0TEwYfnx6WAAYRGmAAAQC4/9xACxAQBjsADA8PBjsAuP/gtAwMBjsAuP/oQA8LCwY7AG8jGmAWG2AWGhe4/+xAEQ8PBjsXBA0NBjsXBAwMBjsXuP/JQAoLCwY7ABcQFwIXL10rKysr7eQQ5BD0KysrK139MhD07S8zLwA//TIvPz88EO0/PP08MTAFFAYjIiYnNTMWFjMyNjc2NjURIzUhASMRMzcjNTMFIzUzA5jNtB9XJgsWPxhLYRgWD9QBkP2wvLwN1tYCRNbWIL/IBgaoBQklKCRuTwOUnPujBF27w8PDAAIAIQAABQoGFAAWABoAwLkAF//oQBENEDcYGAkMNxkYCRA3dBUBE7j/8EAnCQo3GBgXARANCEITBA4FAQ0IFxcZGQ8MGlANYA1wDQMNEhAQBjsNuP/8tA8PBjsNuP/4tA0NBjsNuP/6QAkLCwY7DQ0BGgC4/+BACxAQBjsAAg8PBjsAuP/2tA0NBjsAuP/mtAwMBjsAuP/oQAwLCwY7AG8cDxxAHAJdEPYrKysrK+0zLysrKytd/TwzLzMvAD88Pz/tEjk/My8rMTBdASsrKyEjETQmJyYmIyIGBxEjETMVNjYzMhYVAQEjEwUKvA4WF1JHRpVHvLxUpFuluvym/vuKnQJ8TYUoKilLPPy+BF18S1DZzgM//dECLwAAAQCJA2YCOwXRAAMAJ7kAAP/oQBQNEDcBGAkMNwIYCRA3AQEDAwCxAi/tAD8zLzEwASsrKwEBIxMCO/7WiMIF0f2VAmsAAAIAiQNmA8EF0QADAAcAVbkABP/oQA4NEDcFGAkMNwYYCRA3ALj/6EAdDRA3ARgJDDcCGAkQN0YAAQEFBQMHAwCxAgIEsQa4/8CzCgs3Bi8r7TMv7QA/PDMvPDEwAV0rKysrKysBASMTIQEjEwI3/taEwgJ2/taEwgXR/ZUCa/2VAmsAAAQAZv/jB28F7QAtADEAPQBJAMxAI0IqWgJrAnsCBDgxSDECMS4vLzgwMRQwMDF5HXYmekF1RwQ7uP/4QAkJCjc1CAkKNxW4/8BAJQ4QNy4xAy0tJrxPBgEGBhIWFh28EgJBvEA7ATs7R7w1Ci8wCCC4//BAGQ4PN0AwAS8xMC4wLjAyDEQqHzgBODg+KjK4/8BADAkKNzIySwAVFSAqDC/tMy88ETMvK+0zL13tERI5OS8vEjk5XSsAPzw/7TMvXe0/7TMvETMvXe0zLz88KysrXYcFLiuHfcQxMAFdAF0BBgYHBgYjIiYnJiY1NDY3NjYzMhYXFSMmJicmJiMiBhUUFhcWFjMyNjc2NjczAQEjAQEUBiMiJjU0NjMyFgc0JiMiBhUUFjMyNgL6GDImJDsuWJg1Nzs7NzWZV0J7QA4SJSMdRSptfiMfHlU2Kk0ZHC0NDgLH/PSlAwwCU8ulqsbNo6bKsmNbWGZjW1pkAr4LGQoLCzY2OKNxa6M6OTohIasOHRQQFpecTnYlIyQXEBAjCwJq+i8F0fvN1ebvzNPl5dWbmpWgmpqbAAIAD//oAoYF0wAbACsAnkAiYBxwHAIaGxsLAQAcHAsbGzkAHBQAABwWGAwRNxNADQ83Bbj/8EApDA83ABoBCxwFBRsbEhITD70WCSWqBQNHCAESEh8pCBwLGwAIABoLKgG4/8CzEBA3Abj/9rQNDQY7Abj/7LQLCwY7AS8rKyvtPDMzLzMQPC/tMy9dAD/tP+0zMy8zLxIXOSsrK4cOLiuHBH3Eh8SHEMQxMABdEzcRNDYzMhYVFAIHERQWMzI2NxUGBiMiJjU1BxM2NjU0JicmJiMiBgcGBhUPsXtvYHx4pR0bGkRpN3E5XGtP+GIvDQ0KGQ8PGQYLDAGm6wHH4pmCbVz+9+b+YVkrIUqiLCtyf+FiAiupgDceMBEMDQwOFW5YAAACAJIAAARCA7AAAwAHACtADwSdAAAFnQMIBpwCAgWcA7j/wLYJCjcwAwEDL10r7TMv7QA/7TMv7TEwEyERIRMRIRGSA7D8UEwDGAOw/FADZPzoAxgAAAEAgwG9AlIDjAADABdACwICAwEBAAIwAgICL10zLwAvMy8xMAERIRECUv4xA4z+MQHPAAACAIMBvQJSA4wAAwAHACNAEwadAgIFnQMHnAEBBpwAAjACAgIvXe0zL+0AL+0zL+0xMAERIREFIREhAlL+MQGD/skBNwOM/jEBz0z+yQABALEAiAQiA/kACwAdQBAJCQ8DLwNPAwMDBgYAAAEAL10zLwAvXTMvMTATNAAzMgAVFAAjIgCxAQK3tgEC/v62t/7+AkC3AQL+/re2/v4BAgAAAgBwAaoCZgOgAAsAFwBrQAsGECMmNwYQFxo3ALj/8LMjJjcAuP/wQBUXGjcSnQYGDJ0ACRAXGjcJEAsONwO4//CzFxo3A7j/8EAKCw43FZwDAw+cCbj/wEAJCww3AAlgCQIJL10r7TMv7SsrKysAL+0zL+0rKysrMTABMhYVFAYjIiY1NDYXIgYVFBYzMjY1NCYBa2iTk2hok5JpSWZnSEhnZgOgk2hok5NoaJNMZ0hJZmZJSGcA////9gAABNYHPAI2ACQAAAEXANgANwFrAA63AgIADAsBAiUBKzUANf//ADr/4QOzBdECNgBEAAABFgDY4gAAC7YCADg3KzQlASs1AP//AEL/5QSsCAECNgAmAAABFwDWAJcBdQAXQA4BUDYBAVA2AQA2NgwMJQErXTUAXTUA//8AO//nA44GjAI2AEYAAAEWANb2AAALtgEALS4GDyUBKzUA//8AQv/lBKwHUAI2ACYAAAEXANoAkAF1ABNACwFQNQEBADU0BhIlASs1AF01AP//ADv/5wOOBdsCNgBGAAABFgDa9AAAC7YBACkoBg8lASs1AP//AJcAAAQ6BzwCNgAoAAABFwDYADgBawAOtwEBAA0MAQIlASs1ADX//wA7/+YEAAXRAjYASAAAARYA2BIAAAu2AgAtLAMNJQErNQD//wCXAAAEOgfZAjYAKAAAARcA2QA4AXUAE0ALAVAYAQEAGAwBAiUBKzUAXTUA//8AO//mBAAGZAI2AEgAAAEWANkNAAALtgIAOCwDDCUBKzUA//8AlwAABDoHUAI2ACgAAAEXANoAWgF1ABNACwFQDQEBAA0MAQIlASs1AF01AP//ADv/5gQABdsCNgBIAAABFgDaFAAAC7YCAC0sAw0lASs1AP//AEL/4wT1CAECNgAqAAABFwDWALQBdQATQAsBUDMBAQAzMygaJQErNQBdNQD//wA7/lkD5AaMAjYASgAAARYA1goAAAu2AgA2NgQEJQErNQD//wBC/+ME9QdQAjYAKgAAARcA2gCqAXUAE0ALAVAyAQEAMjEGEiUBKzUAXTUA//8AO/5ZA+QF2wI2AEoAAAEWANr5AAALtgIANTQgKyUBKzUAAAEAQv5ZBPUF7ABHAN1ASwoDBhEdAxoWKhY3ETQsRxFaAloEVgprFWsXeAQOOzs/vTcNMQAoNUApASkpDAB/EwETExo0DAIjNAAKOjpCKjQTKSkBNAMGEycUKrj/6rQMDAY7Krj/7rQNDQY7Krj/0kASCwsGOwAqECoCKipJD0lASQIduP/4QB8NDQY7HRUGDhAQBjsGDg8PBjsGFgwMBjsGEA0NBjsGuP/gQAoLCwY7dQYBBmZIEPRdKysrKyvtK10RMy9dKysr7TMSFzkvLy/tMy8AP+0/7TMvXRESOS9d7RI5P/0yLzEwXQUiJCcmAjU0Ejc2JDMyFhcWFhcVIyYmJyYmIyIAERQWFxYWMzI2NxEhNSERBgYHBgYHFBYVFAYjIiYnNTMWFjMyNjU0JiciIgMGnv76Xl5kZV5bAQqeS4o/MnsmESVPSDycWtf+90ZCQLVxVKY5/qgCHCZ+OCouFwOwhSVkKAkYTiheWgEBBQMcX2JjASS+tAEdZWJqFhMPNRPvITsiHij+vP7zluBOTVEYGAGBrv12ETERDQoFDiYZoqwMDKALF09XEScXAAMAO/5ZA+QGjAAMADMANwDTQFI2GA0QNzQYCQw3NxgJEDc+BjQIPAw8G0wGRQhJDEgbeQF9MQo3NzY2JkAzAS8YDg83SB0BKgUBKQRAJgQAGgpBHQczMxNALw00NDY2IA8yASkAuP/8QA4MDAY7ABoaLAgQEAY7LLj//LQMDAY7LLj/5EAeCwsGOyxvOTIyBxsgFg8QBjsgEA0NBjsgFgwMBjsguP/btgsLBjsgcDgQ9isrKyvtMy8Q9isrK/08KzxdEjkvMy8AP+0zLz/tMzM/7TMzP10rXREzLzMvMTBdASsrKwERJiYjIgYVFBYzMjYBFhYXFhYzMjY3NjY1NQYGIyICETQ2NzY2MzIWFzczERACIyImJzUBAyMBAyhGdzuPpH2MSZv9xhNKLzRYNFd5IiAaTJJuv+JOQj+sXFd/QAux+P9Sq0oChrPzAREBLwJlIh3SxLrCOv5SCBsMDRAuKSlsRWJCPwEcAQqL10tITikmMPwi/uT+9hoWxAc//ooBdv//AJcAAATQCAECNgArAAABFwDWAIUBdQATQAsBUBABAQAQDAYLJQErNQBdNQD//wCIAAAD9ggBAjYASwAAARcA1gAnAXUAIUAYAW8bfxufG68bzxsFG0AJDTcBABsaDw8lASs1ACtdNQAAAgAYAAAFoQXRABMAFwC4QA8TFga9EAxfCQEJCQoDNRe4/8BAFg8PBjsXFwUOCgMBBQgNFAESEgEUDwC4//pAEQ8PBjsAFA0NBjsADwwMBjsAuP/2QBwLCwY7AAAZDxkBCxcEBwcEFAkABRAFcAWABQQFuP/ktA8QBjsFuP/2tA0NBjsFuP/qtAwMBjsFuP/ytAsLBjsFLysrKytdPO0zLxA8PF0RMy8rKysrPO0zLxA8PAA/PD88EjkvK+0SOS9dPDz9PDwxMCEjESERIxEjNTM1MxUhNTMVMxUjBzUhFQT5xv1TxqioxgKtxqioxv1TAtn9JwRVjPDw8PCMzMzMAAEADAAABB8GFAAeAM6zcB0BHLj/4LMJCzcYuP/wQBsMDDcXDrwUERESGA0IQhsEEgEBDQgVFQ0CGgC4/+BAERAQBjsACg8PBjsABA0NBjsAuP/otAwMBjsAuP/cQCMLCwY7AG8gDyABFJYYCw8PEgsaEA0gDTANUA1wDZANoA0HDbj/7rQQEAY7Dbj/3rQPDwY7Dbj/7rQNDQY7Dbj/8rQMDAY7Dbj/wLQLCwY7DS8rKysrK13tPDMvEDzkXRD2KysrKyvtEjkvAD88Pz/tEjkSOS88/TwrMTArXSEjETQmJyYmIyIGBxEjEyM1MyczFyEVIQM2NjMyFhUEH7wOFhdSR0aVR7wBpqYBvAEBLf7TAVSkW6W6AnxNhSgqKUs8/L4E9Iaamob+7UtQ2c4AAgAKAAAC8wfIAAsAJQCHuQAc//BAQQwPNw8QDA83DAwWvRwZHBkivXAPAQ8PCQQyBgMKAzIBCCUpDAwKGCkZGQMIC6AKFAUCoJADoAOwAwMDHA0NBjsDuP/WQA8LCwY7AwMnJg8nQCdQJwNdERI5LysrXe0y/e0yETMv7REzL+0AP+0yP+0yMy9d7TMzLy/tMy8rKzEwISE1MxEjNSEVIxEzEwYGIyImJyYmIyIGByM2NjMyFhcWFjMyNjcCn/2+vr4CQr6+VAd4YjRNJSg/HS4rAoMEgVswTyYrPR0tLgGYBKGYmPtfBzCYlyMnKC1aTJeXJSQqJ1xGAAL/ygAAAg0GPAADAB0Ay7kAFP/wQEYVFzcHEBUXN5kHlhS1FAMEBA2qFEAJDDcUERQRGqpQB2AHcAcDBwcCBQEIHa0EKg4PBjsEFgwMBjsEQAkPNwQEABCtEREAuP/yQBAPDwY7ABpPAbABwAHQAQQBuP/AtgkPN08fAQG4//RAFxAQBjsBCA8PBjsBBA0NBjsBDAwMBjsBuP/SQAkLCwY7AQEfHh+4/8CyCw83KxESOS8rKysrK10rXe0rMy/tETMvKysr7QA/PzMvXe0zMy8vK+0zL10rKzEwISMRMxMUBiMiJicmJiMiBhUjNDYzMhYXFhYzMjY1AUi8vMVhUCg6HiAtFyMhamFPLzIgISwWJCEEXQHfgYIaICMiRUGAgxsfIyJIPgAAAgA3AAACxQc8AAsADwBlQC8OvmANcA0CDQ0JBDIGAwoDMgEIDAwKDg4DCAugChQFAqCQA6ADsAMDAx4NDQY7A7j/2EAPCwsGOwMDERAPEUARUBEDXRESOS8rK13tMv3tMhEzLxEzLwA/7TI/7TIzL13tMTAhITUzESM1IRUjETMTITUhAp/9vr6+AkK+vib9cgKOmAShmJj7XwYKmgAC/+AAAAH1BdEAAwAHAIFAEga+YAVwBQIFBQIFAQgEBQQFALj/8kAQDw8GOwAaTwGwAcAB0AEEAbj/wLYJDzdPCQEBuP/0QBcQEAY7AQgPDwY7AQQNDQY7AQwMDAY7Abj/0kAJCwsGOwEBCQgJuP/AsgsPNysREjkvKysrKytdK13tKzMyLy8APz8zL13tMTAhIxEzNyE1IQFIvLyt/esCFQRd2poAAgBUAAACqQfTAAsAGQBrQDEMEhIWqg8PCQS+BgMKA74BCBkpDAwKEykSEgMICysKKwUCK5ADoAOwAwMDHg0NBjsDuP/YQA8LCwY7AwMbGg8bQBtQGwNdERI5LysrXe0y/e0yETMv7REzL+0AP+0yP+0yMy/tMy88MTAhITUzESM1IRUjETMTFAYjIiY1MxQWMzI2NQKf/b6+vgJCvr4KkZmXlJ5CS0dFmAShmJj7Xwc7qM/PqIdxa40AAv/SAAACAQZLAAMAEQCXQCEKBAQOuwcHAgUBCBEpBDQODwY7BDQMDAY7BAQACykKCgC4//JAEA8PBjsAGk8BsAHAAdABBAG4/8C2CQ83TxMBAbj/9EAXEBAGOwEIDw8GOwEEDQ0GOwEMDAwGOwG4/9JACQsLBjsBARMSE7j/wLILDzcrERI5LysrKysrXStd7SszL+0RMy8rK+0APz8zL+0zLzwxMCEjETMTFAYjIiY1MxQWMzI2NQFIvLy5i4yKjpJBRUFEBF0B7prAvpx6a2KDAAABAF3+XwLmBdEAIACLQDEbEAkLNxcXE74bDAkEMgYDCgMyDQEIHhAJDTcYGBAqHggLoB4KFAUCoJADoAOwAwMDuP/wtBAQBjsDuP/0QBEPDwY7AxAMDAY7AwoNDQY7A7j/1EAPCwsGOwMDIiEPIkAiUCIDXRESOS8rKysrK13tMv057TIv7TMvKwA/M+0yP+0yP+0yLysxMCEjNTMRIzUhFSMRMxUjBgYVFBYzMjY3MxUGBiMiJjU0NgE+4b6+AkK+vsIGCUJYIUETCSRRInylCZgEoZiY+1+YHCkmUVATC54KC5aWIjUAAgBf/l8CFwXbABcAGwDGQBoDGAkMNxcXE70DDBlEGgMKBQkMCAAAECoGG7j/57QPDwY7G7j/8EAhCw0GOxufGQIQEAY7GTcPDwY7GQQNDQY7GRYMDAY7GWAMuP/yQBEPDwY7DBoGTwmwCcAJ0AkECbj/wLYJDzdPHQEJuP/0QBcQEAY7CQgPDwY7CQQNDQY7CQwMDAY7Cbj/0kAJCwsGOwkJHRwduP/AsgsPNysREjkvKysrKytdK10z7Sv0KysrK+0rKy/tMy8APzM/P+0//TIvKzEwAQYGIyImNTQ2NxEzESMGBhUUFjMyNjczAyM1MwIXJFEie6YlCLw8BgdCWCFBEwnC1tb+dAoLlJg/bxkEC/ujGjYbUVATCwYGwwD//wAJ/+sDKwgBAjYALQAAARcA1v+mAXUAE0ALAVAaAQEAGhYUFSUBKzUAXTUAAAL/pv5ZAj8GjAAVABwAi0Axext0HAILAQQYGwErAQQYGxsaFhYTPhQFBwcLPwMNFB8HLwcCBxkpGhoXKRYWBxQDErj/+EAKDAwGOxIarxUBFbj/6kALEBAGOxUCDQ0GOxW4/+C0DAwGOxW4/9q2CwsGOxVvHhD2KysrK13tKxczL+0zL+0vXS8AP/0yLz/tMy8zMy8zMTBdAV0FFAYjIiYnNTMWFjMyNjc2NjURIzUhNyMDAyMTMwG5zbQfTSYLFjUYS2EYFg/KAYaGl5WUk7jjIL/IBgaoBQklKCRuTwOUnLQBC/71AXsA//8Al/5ZBNQF0QI2AC4AAAEWANz3AAALtgEAIAwFCiUBKzUA//8AiP5ZBCYGFAI2AE4AAAEXANz/fwAAAAu2AQAgDAUKJQErNQAAAQCIAAAEJgRdAAsAzLkAC//qQCcNEAY7CRAREjcBKBARNygC2AHbCQMJAQ8NHwEdAh8NLQEvDUgBCAu4/8BALQwPNzULRQsCAgIDARoACwAICbQCCwoDCggCBQYKBQEFCAsCUApgCnAKAwoKALj/3EAUCwsGO3AAAQBADQEADSANAQgDGgW4//60Dw8GOwW4/9a0DQ0GOwW4/8i2CwsGOwVuDBD0Kysr/TxdETNdL10rMy9dOTkAPzw/PBI5OTEwAYcQwMB69RgEwAGHEP0IwABdAStdcSsrKyEjAQcRIxEzEQEzAQQm9/5fSry8Abrq/jUCG0j+LQRd/igB2P4tAAEAl/5ZA/YF0QAaAHVAEw0QCQw3EREVvg0NAgMENQcBCAq4//BACwkKNxAQGCoKCgEFuP++tAsLBjsFuP/AQAkKETcFBRwEFAG4//RACxAQBjsBCg0NBjsBuP/ItgsLBjsBZBsQ9CsrK+0RMy8rKxI5L+0zLysAPzztPz/9Mi8rMTAhIREzESEVIxYWFRQGIyImJzUzFhYzMjY1NCYCcv4lxgKZ7AEDsIUlZCgJGE4oXlgBBdH637AOLR6irAwMoAsXT1cVMwAAAf/W/lkBugYUABgAk0ARCxAJCjcPDxO+Cw0CAQQBCAi4//BACgkMNw4OCCoWFgS4//JAEA8PBjsEGk8BsAHAAdABBAG4/8C2CQ83TxoBAbj/9EAXEBAGOwEIDw8GOwEEDQ0GOwEMDAwGOwG4/9JACQsLBjsBARoZGrj/wLILDzcrERI5LysrKysrXStd7Ss5L/0yLysAPy8/P/0yLysxMCEjETMRMxYWFRQGIyImJzUzFhYzMjY1NCYBGo68bAEFroUlZCgJGE4oXlIBBhT6ABI3JKKsDAygCxdPVxUzAP//AJf+WQTABdECNgAxAAABFgDcFQAAC7YBAB4KBAAlASs1AP//AIj+WQP2BHwCNgBRAAABFgDcuQAAC7YBACgaDQAlASs1AAABAJf+WQTABdEAFgDyuQAG//RAHQsQBjt5AXMGAgwGGgYkBjIGQgZYAVAGYQZwBgkFuP/0QEILEAY7dgUBDwAABR8AEQUmADQFRAVTBWwAYAV4AHAFDAwABAUCWgBVBQIQEBS/DA0HBgEDAwUDCQADCA8PCQUAAQa4//y2DAwGOwYTCbj/7EALEBAGOwkcDw8GOwm4//a0DAwGOwm4/+JAFQsLBjsJZRgBBAwMBjsPGEAYAgETA7j/9kALDxAGOwMKDQ0GOwO4/8S2CwsGOwNkFxD2Kysr7V0rEPQrKysr/SsROTkRMy8APzMzPxIXOT/9Mi8xMAFycV1dKwBdXSsFAREjESEBETMRFAYjIiYnNTMWFjMyNgQI/Ui5ARkCV7nMtB9MJgsWNBiPXQsFD/r8BdH7ogRe+hS/zQYGqAUIewAAAQCI/lkD9gR8ACYAgbN1JQEjuP/wQBsJCjcYAwEHBwu/Aw0gHRhCIwQeBR0IBgYRGgC4/+C0EBAGOwC4/+60DAwGOwC4/+RACwsLBjsAbyggHBoduP/6QAsPDwY7HQYNDQY7Hbj/yLYLCwY7HW4nEPYrKyv9PBD0Kysr7TMvAD8/P+0SOT/9Mi9dKzEwXQUUBiMiJic1MxYWMzI2NzY2NRE0JicmJiMiBgcRIxEzFTY2MzIWFQP2zLQfTCYLFjQYTGEXFg4PFRdSR0aVR7y8VKRbpbogv8gGBqgFCSYmJmpWAktNhSgqKUs8/L4EXXxLUNnO//8AQv/hBWcHPAI2ADIAAAEXANgApQFrAAu2AgArKg8DJQErNQD//wA5/+EEHwXRAjYAUgAAARYA2P0AAAu2AgAZGAYAJQErNQD//wBC/+EFZwfZAjYAMgAAARcA2QCkAXUAE0ALAlA2AQIANioPAyUBKzUAXTUA//8AOf/hBB8GZAI2AFIAAAEWANn8AAALtgIAJBgGACUBKzUA//8Al/5ZBRgF0QI2ADUAAAEWANz/AAALtgIAMSMEASUBKzUAAAH/6v5ZAtgEXQAnAJlAGhMTF74PDSEeJAAAfwSPBAIERCQkHwUIHggMuP/wQAkLDDcSEgwqGgC4/8C0CwsGOwC4/8BACgoSNwAAKSEIGgi4//q2DAwGOwgaHrj//LQQEAY7Hrj//kALDw8GOx4MDAwGOx64/8q2CwsGOx5uKBD2KysrK+0rORA8ETMvKysv/TIvKwA/Lz88EP1dMi8REjk//TIvMTABIyYmIyIGBxEzFhYVFAYjIiYnNTMWFjMyNjU0JicjETMVNjYzMhYXAtgKFS8hTJZDhAEFroUlZCgJGE4oXlIBAqa8O65fHR0SA5MGA0JB/PsSNySirAwMoAsXT1cVMyMEXaYzcwMD//8ATf/lBEIIAQI2ADYAAAEXANYAHgF1ABNACwFQNgEBADY2Fy4lASs1AF01AP//AEP/5QNrBowCNgBWAAABFgDWtQAAC7YBADk5GjElASs1AAAB//8AAAStBdEADwCEQCgFCL0CCwsOBwENNQ4DDxEBAwMAWwEGCQkNBhQNWwwQByAHkAegBwQHuP/0tBAQBjsHuP/0tA8PBjsHuP/8tAwMBjsHuP/ptA0NBjsHuP/UQA0LCwY7BwcREG8RfxECXRESOS8rKysrK1085O0SOS8QPPQ5L10AP/08LxI5Lzz9PDEwASERIRUhESMRITUhESE1IQSt/gwBPf7Dxv7DAT3+DASuBSH+Uo/9HALkjwGusAABAB//6gK0BZ4AIwCjQB8BIAkNNxUEvBIHBwALDBEIPg4MCwUgIBw/AAkTEyAPuP/0tAwMBjsPuP/gQCkLCwY7AA8QDyAPAw8PJQ4SFggMDAI7FhoDCg8GHwYvBgMGBgsHIAMBA7j/8kALDw8GOwMMDQ0GOwO4//62CwsGOwOYJBD2KysrXTw8Mi9dMxD9Kzw8ETMvXSsrPDMvAD/9Mi8/Mzz9PC8REjkvPP08MTAAKwUiJjU1IzUzESM1MxEzESEVIREhFSEVFBYXFhYzMjY3MxUGBgHkmqx/f39/vAFa/qYBD/7xBhQRTEEuVhMLNW0Wr72/hgEmnAFB/r+c/tqGZ1VcKCMjGwmpDxH//wCF/+EEugfLAjYAOAAAARcA1wBuAWsAC7YBACseBxclASs1AP//AID/4QPuBmACNgBYAAABFgDXBgAAC7YBACcaDBklASs1AP//AIX/4QS6BzwCNgA4AAABFwDYAHABawALtgEAHx4HFiUBKzUA//8AgP/hA+4F0QI2AFgAAAEWANgMAAALtgEAGxoMGSUBKzUA//8Ahf/hBLoH2QI2ADgAAAEXANkAbwF1ABNACwFQKgEBACoeBxclASs1AF01AP//AID/4QPuBmQCNgBYAAABFgDZCwAAC7YBACYaDBklASs1AAABAIX+XwS6BdEANADMQCs4Gk8bAiYPASwQCgs3KCgkviwNHgAXBwMAGAwONw80AAopQAoLNykpISovuP/AQBELCwY7IC8BLwAvHQMYBhYUF7j/7rQQEAY7F7j/4LQPDwY7F7j/9LQMDAY7F7j/+7QNDQY7F7j/4EAPCwsGOxcXNg82QDYCCBQHuP/AswkRNwe4//ZACxAQBjsHDg0NBjsHuP/EtgsLBjsHBzURMy8rKysr7V0RMy8rKysrK+0REhc5L10r7TMvKwA/7Ss/PBI5P/0yLytdMTBdBSImJyYmNREzERQWFxYWMzI2NzY2NREzERQGBwYGBwYGFRQWMzI2NzMVBgYjIiY1NDY3IgYCn4PERU5AxhomKIljXZAoJRvGP08oWzsFCUJYIUETCSRRInylBQUJFh5ERE7ZnwOh/F9njTg8Pj48OYpkA6b8X5veTSY3EBQ4HFFQEwueCguWlhgnGQEAAQCA/l8E1QRdAC0Ai0AoCQg7K3QWA3oFASUlISG9KbgFARgMBQEaCAIUQgUKJiYeKiwsFwEaGbj/5LQQEAY7Gbj/7rQMDAY7Gbj/4EAKCwsGOxlvLw4aC7j//kALDw8GOwsKDQ0GOwu4/862CwsGOwtuLhD0Kysr7RD0Kysr/TwyL+0zLwA/7TM/Mz88XS/9LzMvXTEwAF0lNQYGIyImJyYmNREzERQWFxYWMzI2NxEzESMGBhUUFjMyNjczFQYGIyImNTQ2AzJXnGBJgTAwNbwNFxdPSkWcQbwkBgdCWCFBEwkkUSJ7pgwKckxPMDQ0nnEC1f2EWXUsKyhOOQNC+6MXOxlRUBMLngoLlJgjOv//ABoAAAcdCAECNgA6AAABFwDWAXMBdQATQAsBUBEBAQARDQYAJQErNQBdNQD//wAeAAAF0gaMAjYAWgAAARcA1gDQAAAAC7YBABENBgAlASs1AP////UAAASpCAECNgA8AAABFwDWACIBdQATQAsBUA0BAQANCQUAJQErNQBdNQD//wAG/mQD9gaMAjYAXAAAARYA1tUAAAu2AQAMCAQAJQErNQAAAQCMAAACxAYeABAAVkAMBg0BAAAEPw0ACQgAuP/IQA0LCwY7AAASCBoACQEJuP/+tBAQBjsJuP/uQAsPDwY7CRANDQY7Cbj/yLQLCwY7CS8rKysrXe0RMy8rAD8//TIvXTEwASMmJiMiBhURIxE0NjMyFhcCxAoZXiV1YbzKrTRkKQVgCRFvgft2BIDRzQsHAAAE//YAAATWCEUAEgAVACEAJQEhQJEVFAELAwUIKgMlCDkEBRQVFBMFhwQBBBQDAgMUFQaHBwEHFAgICQoCBQkaAhUJKQImCUUCSgNFCEoJCgYPFg82D0YPVg8FBjQVQAwMBjsVJSUkJEAPJTckGaoPDxUUCQIECB8DCAgiIiQWKQ8SHxIvEn8SjxL/EgYSHCkADBAMIAxwDIAM8AwGDAkMEgIkBQgDuP/YtBAQBjsDuP/stAwMBjsDuP/QtAsLBjsDuP/AQBMJETcDAycIKBAQBjsIIAwMBjsIuP/uQBMLCwY7DycfJz8nfyePJwUPJwEIL11dKysrETMvKysrKxIXOS9d7S9d7S8zLwA/PC8SFzkzL+0zKy8zLy8r7V0xMAFdhxD9XcDAwIcQ/V3AwAjAAV0AXQAGBwEjAyEDIwEmJjU0NjMyFhULAgE0JiMiBhUUFjMyNhMDIxMDeTszAcvRh/3Hh8gByzM8oXNzoDLm5QFqRzk5SEk4OEiV85WVBdxpH/qsAaD+YAVUH2ZCbZCQbfwtAsH9PwPTNktKNzlLTAJi/u4BEgAABAA6/+EDswczAAwAPwBLAE8BCEASBjs1MzU1VitSLFUtZSx0LAg0uP/iQBIJDTdPT05ADyU3Tk5DKDQBPR+4/8BASAwNNx8fE0lPKgEqKjQ6LgQmQkkEAA4TPggKQRMKGjEVNwJGKTouNzEAMQExQCkvNz83AjdMTE4tOzdOBBkfAD8aPgwPDwY7Prj/9LQMDAY7Prj/4EAzCwsGOz5vURkQDhA3GRAJCzcqQAkLNyoqBxsZDhAQBjsZCg8PBjsZFg0NBjsZEAwMBjsZuP/ctgsLBjsZcFAQ9isrKysr7TMvKysrEPYrKyv9PDwSFzkvMy8vXe0zXS8SOTntXQA/7T8RMzM/7RczL10REjkvK+0v7TMvKzMvKzEwXQERBgYHBgYVFBYzMjYXBgYHBgYjIiYnJiY1NDY3NiQ3NTQmJyYmIyIGByM1NjY3JiY1NDYzMhYVFAYHFhYVESMDNCYjIgYVFBYzMjYTAyMTAvhDzT9LYmxoWZA/F00kMl1URXwvLTZial4BAJQoJCRaRVSlUAseVzgfJ59zc54zJXB8u2pHOTlISTg4SJXzlZUBEwE2BhUTF19VYGJNZBE9EhocNC8uh0t0ozArIQgkQlEWFxEtIb8JDwggUjJtkJBtOF0eI52a/QQFCTZLSjc5S0wCYv7uARIA////2QAABwoIAQI2AJAAAAEXAI0B8wF1ABNACwJQFQECABUVAwglASs1AF01AP//ADr/4wbVBowCNgCgAAABFwCNAXoAAAAQQAoDAF4BAF5dKUglAStdNf//AEL/jAVnCAECNgCRAAABFwCNAKABdQAXQA4DUC4BA2AuAQAuLR4iJQErXTUAXTUA//8AKf9tBCAGjAI2AKEAAAEWAI0DAAALtgMALi0MACUBKzUAAAEA8wNAAeIEXQADAA+2AVYCBQMtAi/tAD/tMTABIxEzAeLv7wNAAR0A//8AGgAABx0IAQI2ADoAAAEXAEMBdgF1ABy1AVAOAQEOuP/AQAkNEDcADg4GACUBKys1AF01//8AHgAABdIGjAI2AFoAAAEXAEMA0QAAABWxAQ64/8BACQ0QNwAODgYAJQErKzUA//8AGgAABx0IAQI2ADoAAAEXAI0BbAF1ABNACwFQDwEBAA8OBgAlASs1AF01AP//AB4AAAXSBowCNgBaAAABFwCNAM0AAAALtgEADw4GACUBKzUA//8AGgAABx0HUAI2ADoAAAEXAI4BbwF1ABdADQIBUBIBAgEAEg0GACUBKzU1AF01NQD//wAeAAAF0gXbAjYAWgAAARcAjgDNAAAADbcCAQASDQYAJQErNTUA////9QAABKkIAQI2ADwAAAEXAEMAQAF1ABy1AVAKAQEKuP/AQAkNEDcACgoFACUBKys1AF01//8ABv5kA/YGjAI2AFwAAAEWAEP5AAAVsQEJuP/AQAkNEDcACQkEACUBKys1AAAB/8AD5QFPBhQAAwApuQAB/+i3DRA3AQEDAQC4/+hACQ0QNwAAfwIBAi9dMy8rAD8zLzEwASsBAyMBAU+d8gEFBhT90QIvAAAB/9AGegReBv0AAwAPtQGqAgAAAi8zLwAv7TEwASE1IQRe+3IEjgZ6gwABAFkAAAQHBe4AKAB+QE4CDhQOQxJUEmQSbBpyEnsaCCMFvCAICAEfCbwcDEAJCjcMDAEQFBQYuRACAgInugEIIycCHJYgIAyWBZYIEyEdCwYGCB0TBAIAADACAQIvXTMvEhc5LzwvPC8v5OT95BI5OQA//TIvP+0zLxESOS8rPP08EjkvPP08MTBdISE1NjY3IzUzNSM1MzU0NjMyFhcVIyYmIyIGFRUhFSEVIRUhBgYHFSEEB/xSWmMNoaOjoei5YYo6CiaKWHt5AWz+kgFu/o8PdlQDAs8bgXuGjIaxyfYfEc4ZPpqRnoaMhm+QMQsAAAIAWf/mBLkFMgAYACIAbEATOA05HEgcWA1oIXghBgwQCw03B7j/8EAjCQo3GR8pDyYVVhVpD3kPBgEyIiIPHzIVCwsHMw8JDAwZoAC4/8BADgkLNyYAAQAAJCKWARQSL/3kETMvXSvtMy8AP+0zLy/tEjkv7V0rKzEwXQEhFBYXFhYzMjY3MxUGBiMgABEQACEyABEnJiYnJiYjIgYHBLn8ZkI8OqNgmu41DWq2of7Q/qYBSgEL6wEgvgImKSiHWqvJDQJ4hLU+PDtzK9UqQwFWAUYBQgFu/uL+1CpUkTMzOt6nAAUAq//hB4MF1QAIAAwAJgA1AEQAxEAJfzgBEBgJCzcduP/oQC4JDTcDuwQEHwABAJsHCQyWBwN6PHVCAhk8MyMEECq8HZpCvBAKCgsINhANDTcjuP/oQCUKDTcZEAoNNxk8MyMEIC0qGho/Kk8TXxMCEycqIBMgNioNDUYJuP/wswwNNwm4/8BAFgsLNw8JZgkCCQkwC3ALAgsDBwAqAwEvM+05Ly9dMy9dKysRMy/tMzMv7S9d7TMv7RIXOSsrKwA/PD/t/e0SFzldP/Q8EO1dMy/tKysxMF0BIxEjNTI2NzMFASMBARQGIyImNTQ2NzUmJjU0NjMyFhUUBgcVFhYDNCYjIgYVFBYXFhYXNjYTNCYnJiYnBgYVFBYzMjYCIaXRZn4JiQNh/PSlAwwCpsubp79eWVJGuZCVtVBSYVu+V09GXTAtF0guOSYYN0IXWCo6OHZQUW0CNQKpdSxWBPovBdH7Knmhn3hPeCYEKWRHao2HaD99IwQnawFkM0g/NiY9FAwdCyVP/nkyOx4MGg8gXTBKX04AAAUAjP/hB6QF7QAuADIATABbAGoBFEAOMRAMDTdpMX9eAjQnAUO4/+hACQkNNzYYCQw3Irj/wEBGDhA3CUAOEDcGEAkMNxYlAXpidWgCPGJZSQQ2ULxDmmi8NgovAzEILCsVvA8WPxZPFgMWFiUGCgoJDrwGmiUhISIdvCUCSbj/6EAJDA03PBgMDTcouP/wQEcKCzcaPBVJRihGLwQ8YklZBEZTKkBAZSo5QA0ONzlNKkY5RlwqIDMBMzNsDy8BLy8gMQExGiooFiIiFigsBAkRKgAAIAkBCS9dMy/tEhc5Ly8v7S9dMy9dETMvXe0zMy/tLyvtMy/tEhc5XSsrKwA/7TMzLxD97TMzLxESOS9d7Tk5Pz8/7f3tEhc5XV0rKysrKzEwXQFdKwEUBgcGBiMiJic1MxYWMzI2NTQmIyM1MzI2NTQmIyIGByM1NjYzMhYVFAYHFRYWAQEjAQEUBiMiJjU0Njc1JiY1NDYzMhYVFAYHFRYWAzQmIyIGFRQWFxYWFzY2EzQmJyYmJwYGFRQWMzI2Axk8MDV7T1KPQRElmk9UbmRbjH1XX1JXQpklEUCWT5iqYU1QdQLD/PSlAwwCbcubp79eWVJGuZCVtVBSYVu+V09GXTAtF0guOSYYN0IXWCo6OHZQUW0DOkdxISUgHhyvIztJSFM7i0xCPEc+I68bIoxiV3EaCBBtAjn6LwXR+yp5oZ94T3gmBClkR2qNh2g/fSMEJ2sBZDNIPzYmPRQMHQslT/55MjseDBoPIF0wSl9OAAUAiv/hB6QF2gAqAC4ASABXAGYA3rN+WgE/uP/oQEEJDTcyGAkNNwYQCQs3bwl/CQIdHRoavGAkASQkHwYKCgkOvAYGILwfli4Del51ZAI5XlVGBDJMvD+aZLwyCi0IRrj/6EBHDA03ORgMDTcaORVGAjleVUYEQk8qPDxhKk81ATVJKkJCNVgqIC8BLy9oDys4K0YrZisEKysgLQEtHx8UKgAJCQAhKSAdAR0vXe0zMy8v7TMvL10zL10RMy9d7TMzL+0vXe0zL+0SFzldKysAPz/t/e0SFzldP/TtMy/tMzMvERI5L139LzMvXSsrKzEwXQEUBgcGBiMiJic1MxYWMzI2NzY2NTQmJyYmIyIGBxEhFSEVNjYzMhYXFhYBASMBARQGIyImNTQ2NzUmJjU0NjMyFhUUBgcVFhYDNCYjIgYVFBYXFhYXNjYTNCYnJiYnBgYVFBYzMjYDGTMuMIhXTpU8ECWSTixQHh0XHh4eWTU7bCYCVf5IFDEOVHY0NzwCw/z0pQMMAm3Lm6e/XllSRrmQlbVQUmFbvldPRl0wLRdILjkmGDdCF1gqOjh2UFFtA2NFeCwrMxwanxQ2GBsdQycqOhMVEQ4GAfCLzwICFiMkbwIZ+i8F0fsqeaGfeE94JgQpZEdqjYdoP30jBCdrAWQzSD82Jj0UDB0LJU/+eTI7HgwaDyBdMEpfTgAFAJn/4QdvBdoABgAKACQAMwBCAMCzeAMBAbj/8LYNEDd/NgEbuP/oQCkJDTcOGAkNNwCWAwKbA7wFlgcDejp1QAIUOjEhBA4ovBuaQLwOCgkIIbj/6EAJDA03FBgMDTcHuP/wQDcMDTcJBxoUFSEvBwQUOjEhBB4rKhgYPSoRQA0NNxElKh4RHjQqCwtEZgcBBwdwCQEJBAMABAACLzMzLzMvL10zL10RMy/tMzMv7S8r7TMv7RIXOV0rKysAPz/t/e0SFzldP/Xt5BD0KysxMF0BK10BASMBITUhBQEjAQEUBiMiJjU0Njc1JiY1NDYzMhYVFAYHFRYWAzQmIyIGFRQWFxYWFzY2EzQmJyYmJwYGFRQWMzI2A0v+KrkB8P3tArICMfz0pQMMApjLm6e/XllSRrmQlbVQUmFbvldPRl0wLRdILjkmGDdCF1gqOjh2UFFtBU785wMaiwn6LwXR+yp5oZ94T3gmBClkR2qNh2g/fSMEJ2sBZDNIPzYmPRQMHQslT/55MjseDBoPIF0wSl9OAAEAYf5ZAfAAiAADACy5AAL/6EAXDRA3AxgJDDcAGAkQNw8BAQEBAA0CAgAvMy8APzMvXTEwASsrKxMTMwFhnfL++/5ZAi/90QAAAQEh/lkDBQAUABQAJEAUBhAKCzcACgoOvgYNESofAwEDAwkvMy9d7QA//TIvLysxMCUWFhUUBiMiJic1MxYWMzI2NTQmJwL/AQWuhSVkKAkYTiheUAICFBI3JKKsDAygCxdPVxo+JwABAbYFDAKpBowAAwAPtQMDAgAtAy/tAC8zLzEwAQMjAwKpMZExBoz+gAGAAAMArgUMA7IGjAADAAcACwA7QBUGCq8FCQkCAAACBysGQAkMNwYKKwu4/8BACQkMNwsGAC0LAy8z/TIvK+0vK+0ALzMvEjkvPP08MTABAyMDASM1MwUjNTMCoTGAMQHzv7/9u7+/Boz+gAGA/ozDw8MA////9gAABNYF0QA2ACQAAAEXAZ3+Vv9FACxAHgIOAwEALwABAAIwCwELDxAfEC8QPxB/EI8QBg8QAV1dL101EV01NQA/Nf//AAAAAAUqBdEANwAoAPAAAAEXAZ3+Sv9FAEO0AQ8DAQ+4/8BAKwsLBjsPDxEfES8RPxGPEQUAAAgPEAY7ABYMDQY7DwAPER8ALwA/AI8ABgABL10rKzVdLys1AD81AP//AAAAAAXABdEANwArAPAAAAEXAZ3+Sv9FAEJAMwEPAwEMAAUGEBAGOwUPDw8GOwUODAwGOwUaCwsGOw8FDxEfBR8RLwU/BY8FBw8RjxECBS9dXSsrKys1LzUAPzX//wAAAAADhQXRADcALADmAAABFwGd/kr/RQBPtAEPAwEMuP/oQA0LCwY7DAACIA8PBjsCuP/UtA0NBjsCuP/iQBoMDAY7AiILCwY7AkAJDTcCDxEBDxEfES8RA11dLysrKysrNS8rNQA/NQD//wAA/+EGJQXwADcAMgC+AAABFwGd/kr/RQA1QA4CKgMCKgEADw4QEAY7D7j/8kASDw8GO38PAQ8PLx8vfy8DDy8BXV0BEV0rKzU1LzUAPzUA//8AAAAABcsF0QA3ADwBIgAAARcBnf5K/0UATLQBCQMBCbj/4LYPDwY7CQADuP/4QCcQEAY7AwQNDQY7Aw4LDAY7KQUBDwMfAwIDDw4fDj8Obw5/DgUPDgFdXS9dXSsrKzUvKzUAPzX//wAAAAAGQgXwADcAnwDHAAABFwGd/kr/RQBAtgE6AwE6ACW4/+y0EBAGOyW4//a0Dw8GOyW4/8BAFBEUNw8lPyVfJW8lBCUPP18/bz8DXQEvXSsrKzUvNQA/NQAE/5wAAAI4BowAAwAHAAsADwCkQBwGCkQFCQkCAAACAg4FDQgHKgZACQ83BgYACioLuP/AtwkQNwsLAwAMuP/yQBsPDwY7DBoDAA0QDSANMA1QDWANsA3ADdANCQ24//RAFxAQBjsNCA8PBjsNDAwMBjsNCA0NBjsNuP/OQBELCwY7DQ0RECARMBFQEWARBF0REjkvKysrKytdM/0rMi8zLyvtLzMvK+0APz8zLzMvEjkvPP08MTABAyMDASM1MwUjNTMBIxEzAUw4VDgBsKur/g+rqwEBvLwGjP6AAYD+jMPDw/olBF3////2AAAE1gXRAhYAJAAA//8AlwAABIkF0QIWACUAAP////YAAAT+BdECFgCoAAD//wCXAAAEOgXRAhYAKAAA//8APAAABEwF0QIWAD0AAP//AJcAAATQBdECFgArAAD//wBdAAACnwXRAhYALAAA//8AlwAABNQF0QIWAC4AAAAB//YAAATQBdEABgCwQGACFA8QBjsCBgwMBjsDBgwMBjsKAAUEKgArASUDJQQ4ATYDRwMJAgMCdwGHAQIBFAAGAAJ3A4YDAgMUBAQFBQUKBhUFGgYmBSkGSgBFBEoFRQZnBWgGdwV4Bg4FAwAECAC4/860CwsGOwC4/8BAFQkRNwAACA8IHwg/CH8IjwgFDwgBBLj/7rQLCwY7BC8rXV0RMy8rKwA/PD8xMAFdhxD9XcCHEP1dCMABXSsrACshIwEBIwEzBNDU/mb+XsoCBtYE1PssBdH//wCXAAAFkwXRAhYAMAAA//8AlwAABMAF0QIWADEAAAADAEMAAARFBdEAAwAHAAsASkAWBTUGBgkBNQIDCjUJCAQFBQQDAgQJCLj/4kALCwsGOwhnDQ8NAQm4/+K2CwsGOwlmDBDmK10Q5CsRFzkvLwA/7T/tEjkv7TEwASE1IQMhNSETITUhBEX7/gQCMvxiA54y+/4EAgUhsP0Hsfx3sAD//wBC/+EFZwXwAhYAMgAAAAEAlwAABNAF0QAHAHVACgM1BgMBBQgBFAC4//K0EBAGOwC4/+K0Dw8GOwC4//q0DAwGOwC4/+JADwsLBjsAZQkPCUAJAgQUBbj/8rQQEAY7Bbj/+EALDw8GOwUKDQ0GOwW4/8S2CwsGOwVkCBD2KysrK+1dEPYrKysr7QA/PD/tMTAhIxEhESMRIQTQxv1TxgQ5BSH63wXRAP//AJcAAARDBdECFgAzAAAAAQBBAAAEXQXRAAwAlkBFAwoNDQY7ZwmQAqgEuAQEAwkICLMEAxQEBAMDCgsLswIDFAICAwQDAgMICzUBCDUFAwQDNwlGCWcJAwkHAwQLCQgHBgIAuP/itAsLBjsAuP/AtgkQNwAADgK4/+K3CwsGO3ACAQIvXSsRMy8rKxIXOS8vXTMvAD/tL+0RFzkxMIcFLiuHDn3EhwUuGCuHDn3EAF0BKyEhNQEBNSEVIQEVASEEXfvkAiH98wPa/RwCAP3WAzy4AlsCC7Ow/gka/aAA/////wAABK0F0QIWADcAAP////UAAASpBdECFgA8AAD//wAIAAAEnQXRAhYAOwAAAAEAggAABdcF0QAjAKlAMEoRShwCBiYDNgNmA3YDBAM0FTYYbxgCGB8NGAMXBAMXCA0UDhgQEAY7DhkPDwY7Drj/9kATDAwGOz8Obw4CDiAUHwYNDQY7H7j/9EAhCwsGOzAfYB8CHw4GAxUUHxAYIBhwGIAYoBgFDyVwJQIYuP/WQA0LCwY7GBglJCAlUCUCXRESOS8rXV0z7Tk5Mi9dKyvtL10rKyvtAD8/Ehc5L108/V08MTBdARYWFxEzETY2NzY2NREzERQGBwYGBxEjESYmJyYmNREzERQWAa4ykFrFWpExMjTGTUpM1o/FjdhMSU7GNAJNKywHA+L8HggqLCyLagJj/bSc1EJDQwr+vQFDC0FEQdOeAkz9nWmNAP//ACsAAAV7BfACFgCfAAD//wBMAAACsgdQAjYALAAAARcAjv9PAXUATrYCAVARAQIRuP/AsyAjNxG4/8BAFBocNxFAFhk3EUAMDzeAEZARAgERuP/AsxYZNxG4/8BACQwPNwARDAYHJQErKys1XSsrKys1AF01Nf////UAAASpB1ACNgA8AAABFwCOACEBdQAXQA0CAVAOAQIBAA4JBQAlASs1NQBdNTUA//8AO//hA+gGjAI2AS4AAAEWAZ36AAALtgIAJSIIACUBKzUA//8APP/mA4gGjAI2ATAAAAEWAZ3XAAALtgEAQT4QACUBKzUA//8AiP5kA/YGjAI2AcYAAAEWAZ0xAAALtgEAGhcOFiUBKzUA//8AcQAAAWQGjAI2AcgAAAEXAZ3+uwAAABNACwEFESYBAAcEAgMlASs1ACs1AP//AID/4gPzBowCNgHRAAABFgGeCQAAEEAJAwIBACEfBxclASs1NTUAAgCI/mQEOgYUABgANwCkQCpQCloWYAppFnoFehZ5HHopezMJBgxIAwIWFSA+ISEDKz4MATVAAwkIDAC4/+xAGQsPNyAgAAcoGxIODQ0GOzASQBICEhIZGwC4//C0DA0GOwC4/+JACwsLBjsAcTkyBxoIuP/4QAsPDwY7CAoNDQY7CLj/xrYLCwY7CG44EPYrKyv9PBD2KyvtMy9dK+0REjkvKwA/P+0/7RI5L+05OV0xMF0BFAAjIiYnESMRNDYzMhYXFhYVFAYHFRYWBzQmJyYmIyM1MzI2NzY2NTQmIyIGBwYGFREWFjMyNgQ6/vzGTaI9vO7aU5g3O0CIepa5w0A3NYlKIyNAeyQtKIBqSGAfHRpAikWRkwG8yf74Kyr+JAXS3/8tLC6JWX6+JREZyZZZbx8fF6AdHiRpTHByNSsrdj38oCYdnAAAAQAG/mQD9gRdAAgAy0AXBwgHBggKDxAGOwi0AAEUAAABBwYHCAa4//a0DxAGOwa4//ZAIAwNBjsGtAUEFAUFBFkBWQRpAWkEBAcABAEECQUFAwwFuP/qQAkOEDcAFg4QNwW4//BAGwkLNwAQCQs3RABLBQIABQABGgVABJAEoAQDBLj/7rQPEAY7BLj/8rQMDQY7BLj/2EARCwsGOwQPCl8KbwoDCkAJCzcrXS8rKytdM/0yLy9dKysrKwA/PxIXOV0xMIcFLisrKwh9EMSHBS4YKysIfRDEAQERIxEBMwEBA/b+ZLz+aMsBMgEvBF37z/44AcoEL/y3A0kAAQA7/mQDcAYUAC8AdEAtGQUpBToFaR9pIHMWBh0aPhsBBwwtPw8IGSANETcIElYjAhoaGRIcBxwHCxoDuP/kQBYLDAY7AwMxIxsSEA8QBjsSGAwNBjsSuP/ktgsLBjsScDAQ9isrK+0RMy8r7TMzLy8SOTkvXSsAP+0/P+05MTBdJRYWFRQGByM1NjY1NCYjIyImNTQ2NzY2NzUhNSEVBgYHBgIVFBYXFhYXFhYzMzIWAzkaHVY8s1ZHOC5+2NFVSUW3Z/5UAsNr3FJTaQULCywmI34oRURgSyNeKlaqPA5PfEA6S+jljv14cMtgCZ6HS9Zzdv7pjyNDLCdKGBcENQAAAQCI/mQD9gR8ABYAb0AWcxUBBhMBEAwTDgUIQhMEAQwNCAEaALj/5LQQEAY7ALj/7rQMDAY7ALj/4kALCwsGOwBvGA8MGg24//ZACw8PBjsNCg0NBjsNuP/ItgsLBjsNbhcQ9isrK/08EPYrKyvtAD8/P+0/ERI5XTEwXQEjETQmJyYmIyIGBxEjETMVNjYzMhYVA/a8DxUXUkdGlUe8vFSkW6W6/mQEGE2FKCopSzz8vgRdfEtQ2c4AAwBY/+EEGAYUABcAJAAxAKNADWUoYDACFiwpHiYsAxW4//BAHgwNNwkQDA03Jj4PJB8kAiQkCR4+FQEsPgkKJRgaA7j/9rQPDwY7A7j/9rQNDQY7A7j/7LQMDAY7A7j/2LQLCwY7A7j/wEAWCQs3AwMzJCYaDwwPDwY7DxQMDAY7D7j/2LQLCwY7D7j/wLMMFTcPLysrKyv9PBEzLysrKysr/TwAP+0/7RI5L13tKytdMTBdARYSFRQCBwYGIyImJyYCNTQSNzY2MzIWAyYmJyYmIyIGBwYGBwUhFBIXFhYzMjY3NhIDyzEcIC40tqiivzIyGxwzMMOeo8A/AiErJGxGS2UmLh4CAkj9uCErJGpKSm8hKSEFA3b+64F0/tZreJWZd3cBH3mDAQx5c5mb/eFb9E1DOztEVPdQoVz++FFDQENETwEGAAEAjAAAAUgEXQADAGu0AgUBCAC4//JAEA8PBjsAGk8BsAHAAdABBAG4/8C2CQ83TwUBAbj/9EAXEBAGOwEIDw8GOwEMDAwGOwEIDQ0GOwG4/85ACQsLBjsBAQUEBbj/wLILDzcrERI5LysrKysrXStd7SsAPz8xMCEjETMBSLy8BF0AAAEAiAAABAsEXwAbALG5ABv/7kBLEBAGOykKUAhiCAMBAgK0GwAUGxsAChkbG7QIChQIGwAICjkZSRl5GQMKGRsIAgMGAQwQEBM/DJYGBQUAAQgKGRsCAQUPDwAvHQEAuP/eQAoLCwY7AB0IAxoFuP/8QAsPDwY7BQwNDQY7Bbj/xLYLCwY7BW4cEPYrKyv9PBEzK10vMy8XOQA/PDw/9P0yLxESFzldhwguK4cOfcSHDi4YKwV9EMQxMABdASshIwEHESMRMxEBNjYzMhYzFSMmIiMiBgcGBgcHBAvs/nNOvLwBNzZ9Pho8BgsPIAgFHBcWMRLUAhZX/kEEXf4TAXJBPAKkAgIGByIU9gABAAUAAAP2BhQABwC4QC8GBAsFCgcnACgFNwBHB1kBVgNYBQoFBAUCAgMGAQoNEQY7AQQKDAY7ARoHAAACA7j/9rQNEQY7A7j//EAuCgwGOwMaBAQFGwAWBBUHKwAmBCAHOQA1B2oAYwd3BAsFBAIDBgEACAcFBgMEALj/1rQLCwY7ALj/wLYJFTcAAAkEuP/iQAwLCwY7DwkfCS8JAwQvXSsRMy8rKxEXOQA/Pxc5MTABXYcQ/SsrwBCH/SsrwAjACMABXSEjAQEjAQMzA/bK/tj+xcQBosjNAz38wwQeAfb//wCI/mQEAwRdAhYAlwAA//8ABgAAA/YEXQIWAFkAAAABADf+ZAOnBhQARgDOQE0KFB4CGRQuAiIaIiYiLyI7OgI2JjYvOzxEP0RFUDNQP1ZFahpiM2I/ehoVHBs5Pzg4Distlio9KwFDPw4IAwwcKSI4KjEbIhoPDwY7Irj/8UARCw0GOyIEBAsaAAAiKjgDGCy4/+C0CwsGOyy4/8BAIQkUNywsSD0bGBQQEAY7GA4PDwY7GCIMDAY7GBANDQY7GLj/4LYLCwY7GHBHEPQrKysrK+0RMy8rKxIXOTMv7TMvLysr7S8vEjk5AD8/7T/95BESOS/tOTkxMF0FFAYHIzU2Njc2NjU0JiMjIiYnJiYnJiY1NDY3NSYmJyYmNTQ2NzY2NzUjNSEVIyIGFRQWFxYWMzMVISIGFRQWFxYWMzMyFgOnWDqzHj4UGRQ2LHoyXzEvVSc/QKSqOFsiIigXGBQ+JtcDAuCPoj0uK3FHkP77drBJOjqUUg9ximBXqzoOG0IfKEMkNk8HDQwqJT2VWZTPLQsNNiUlZTcuTCYfOhsGmp6Rd1BiGRgVpaB5aXAYGQeU//8AOf/hBB8EfAIWAFIAAAACAH7+ZAQvBHwAFAAnAI9AJDEFMRU8GzwgRAVBFUwbTCBWEWYRCgwJHj4SBCVACQkODBgbA7j/+LQQEAY7A7j/5rQPDwY7A7j/7LQNDQY7A7j/6LQMDAY7A7j/2EALCwsGOwNxKSINGg64//hACw8PBjsOCg0NBjsOuP/OtgsLBjsObigQ9isrK/08EPYrKysrK+0APz/tP+0SOTEwXQEWFhUUBgcGBiMiJicRIxE0EjMyFgM2NjU0JicmJiMiBhURFhYzMjYDyTguOzs+qn1AkUm8/tWLt2kiIBceIG9Zk4JIakZYfgPQUMxzbtpTVmYbMP4vBCDsAQxf/Ps5kFRHmzs9TL61/mYjGEsAAQA6/mQDlgR3ACkAjEA0CA8aAhoPKgIgEyAUIx87AjUUOhs1I0UXQiJUF2UXdRcQGRkdPxUEAwwmPwsIBBgYBAgaALj/4EApCwsGOwAAEAAgAAMAACsgGxISEBAGOxIcDw8GOxIiDAwGOxIQDQ0GOxK4/+C2CwsGOxJwKhD2KysrKyvtETMvXSvtMzMvLwA/7T8/7TMvMTBdBRQGByM1NjY1NCYjIyImJyYmNRAAMzIWFxUjJiYjIgYVFBYXFhYzMzIWA5ZYOrNTSjcrT229RUVPASP3Upk6C06WQ5O3NC0ueUNdbIVgV6s6Dkp8RTVQPUJC0JIBCwFHJxnTOjbhzmqULS0mmQAAAQCA/+ID8wRdABcAebkAA//oQBYOEAY7AxgOEDcIAwEWBwUPPwMKFRoAuP/itBAQBjsAuP/+tA0NBjsAuP/utAwMBjsAuP/iQAoLCwY7AG8ZCRoGuP/+QAsPDwY7BgoNDQY7Brj/zrYLCwY7Bm4YEPYrKyvtEPYrKysr7QA/7T88XSsrMTABFAYjIiY1ETMRFBYXFhYzMjY3NjY1ETMD8+XV0ei8ExwcYFNQZRsdELwBktrW090Cy/11WXspKicoKy59UAKLAAAB//v+ZAP/BF0ACwDnQCgICAcFBAUGBAkCAgELCgsACgMICAkLAAsKAAcCAgMFBgUEBgEJCgMDuP/2tAwRBjsDuP/8QBALCwY7A7QECRQEBAkBAAcHuP/4QCQLEQY7B7QGARQGBgECBQsIBAABAwQMCgkHBgUICwUCBAYAlgq4/+C3CwsGOysKAQq4/8BAFAkUNwoKDR8NLw1PDV8Nbw0FBpYEuP/gtwsLBjskBAEEL10r5F0RMy8rXSvkEhc5AD88PDw/PDw8FzmHBS4rK4d9xIcuGCsrK4d9xIcIEMQIxIcIEMQIxIcIEMQIxIcIEMQIxDEwASMBASMBATMBATMBA//U/s/+yskBlP511AEpAS/K/nP+ZAJl/ZsC/gL7/agCWP0QAAABAH/+ZAU4BF0AIwDOQB8bNhhGGAIYPQYJEA4PNwkIIhkQBQgMERoQCg8PBjsQuP/2tAwNBjsQuP/2QAoLCwY7EIwIIhojuP/wQCsQEAY7Iw4PDwY7IxoNDQY7IwoMDAY7IwoLCwY7I4wHGxgHGgAIkAjACAMIuP/2tBAQBjsIuP/0tA8PBjsIuP/mtA0NBjsIuP/stAwMBjsIuP/YQBMLCwY7CAglJB8lMCVAJWAlfyUFXRESOS8rKysrK13tOTkQ9CsrKysr7RD0Kysr7QA/Pzw8Pys8/V08MTABFAYHBgYHESMRJiYnJiY1ETMRFBYXFhYXETMRNjY3NjY1ETMFOExER7Vzu2+5R0RMvDMtLHRDu0RyLTAwvAG5cqYzNjUF/mYBmgYzNzWjcwKk/ZJugyQjGwQDxfw7BRcmJ4VpAm4AAQBA/+IFjARdADoAuEBCMxYzOEQWRh9GL0Q4XwNfBV8OXxBTFlM4bwNrBWsObxBkFmQ4eQR/Gn80FSUlBjgWBSEtPg0GChcXGxsTFBAQBjsTuP/2QBMPDwY7E40kNzczGwCNJgkKJhokuP/2tBAQBjskuP/qtA8PBjskuP/gQCALCwY7DzwfPCAkMCSPPJAksCTAJO8kCSQkPDswPGA8Al0REjkvXSsrK+05ORD07TMvEPQrK+0zLwA/PP08PzwSOS8xMF0BFAYHBgYjIiYnIwYGIyImJyYmNTQSNzMVBgIVFBYXFhYzMjY3ETMRFhYXFhYzMjY3NjY1NAInNTMWEgWMLiwwkG9cmCMMJpdaaZcvLS14eN+BjhIXF1RAUFgNugcdERc1NEBVFhYTkH/fd3kB9VnNRUxcYkRGYFxMSbpotgEelBFz/tq+OoA4NkpMKwJI/bgOMQ8TFko2NnxAvgEqbxGS/uj////aAAAB+gXbAhYAdwAA//8AgP/iA/MF2wI2AdEAAAEWAI4JAAANtwIBAB0YBxclASs1NQD//wA5/+EEHwaMAjYAUgAAARYBnf4AAAu2AgAbGAYAJQErNQD//wCA/+ID8waMAjYB0QAAARYBnQoAAAu2AQAbGAcXJQErNQD//wBA/+IFjAaMAjYB1AAAARcBnQC2AAAAC7YBAD47EwAlASs1AP//AJcAAAQ6B1ACNgAoAAABFwCOAGMBdQAbQBACAVARAQIBQBEBABEMAQIlAStdNTUAXTU1AAAB//8AAAWZBdEAJQCsQCMFI1UNWRJkIwQWNB8fBh4aNRsDCTUYBggfBy8HAgcHFw8VALj/8LQPDwY7ALj/4rQMDQY7ALj/2LQLCwY7ALj/wEATCRs3AAAnDycfJwIaHR0fFxQaGLj/4rQQEAY7GLj/+rQPDwY7GLj/2LQNDQY7GLj/07QMDAY7GLj/4rQLCwY7GC8rKysrKzP9PDIvL10RMy8rKysr7RI5L10APzztP/08Ejkv7TEwXQEUBgcGBiMjNTMyNjc2NjU0JicmJiMjESMRITUhFSERMzIWFxYWBZlTSVevijwrW3gvODQxNTKVg7HG/lwEXv4M75i/VUxJAcxssTpFMLEQIihvTktzIyIT/SIFIbCw/mgkQjuuAP//AJcAAAQKCAECNgHrAAABFwCNADsBdQASQAsBUAgBAQAIBwQFJSs1AF01AAEAQv/lBJ8F7AAhAMNAGkoBRgtZAVYLaQFmC3sBdAV6B3QLdBgLFzQUuP/AQAkPDwY7FBQJAyG4/8BAGwoMNyEhHTQDCQ1ACgw3DQ0RNAkCWAYBFRUMALj/zLQLCwY7ALj/wEATCRY3AAAjDyMBDyMfI18jAxSWF7j/+kAfDQ0GOxcUBg4QEAY7Bg4PDwY7BhYMDAY7BhYNDQY7Brj/4LYLCwY7BmYiEPQrKysrK/0r5F1dETMvKys8My9dAD/tMy8rP+0zLysREjkvK+0xMF0lBgYjIAAREAAhMhYXFSMmJiMiBAchFSEWFhcWFjMyNjczBJ9a2IX+y/6PAXUBMIbfUw9G3YC6/vsaAsv9KwFNQUOxY3zeRg9BJzUBlgFvAWQBnjUm30BS5+itjdVISUhMQQD//wBN/+UEQgXsAhYANgAA//8AXQAAAp8F0QIWACwAAP//AEwAAAKyB1ACNgAsAAABFwCO/08BdQBOtgIBUBEBAhG4/8CzICM3Ebj/wEAUGhw3EUAWGTcRQAwPN4ARkBECARG4/8CzFhk3Ebj/wEAJDA83ABEMBgclASsrKzVdKysrKzUAXTU1//8ACf/rAsgF0QIWAC0AAAACAA///QfdBdEALgA9ALZAHwcsYCJwIgMTGAwPNzY0KCgHCTUmAxkZHTUVNzQHCAC4//C2DhA3KDcUB7j/4LQPDwY7B7j/7LQNDQY7B7j/7EAKCwsGOwcHJi8VALj/wLMJETcAuP/0tA8QBjsAuP/itA0NBjsAuP/OQBALCwY7AAA/CRMmFA8QBjsmuP/8QAwMDAY7ECYgJgImJhkvMy9dKyvtETMvKysrK+0SOS8rKyv9PCsAP+0v/TIvP+0SOS/tMTArXQEUBgcGBiMhESEGBgcGAgcGBgcGBiMiJiM1MxYWMzI2NzYSEzYSNyERMzIWFxYWBzQmJyYmIyMRMzI2NzY2B91UR1TAmP5b/igDCgMIIxwbSSstZ0QVKwwOCg4OJD4WRD8NBQoEA1nlmMBVTEjPMTU3kIOnooWPNjgzAc1ssDdCOAUhcddV0/7sXVtwJikpA8ABAhYXQwFXASJiAUKH/bgjQjuucktyIyUQ/csaJSdpAAIAlwAAB7kF0QAYACcAskAiIAk0Eg4OBxAMAwohNAcISBlWAAISIRQPTwcBBxIQEAY7B7j/9rQPDwY7B7j/+EAQDQ0GOwcUCwsGOwcHCxkVALj/wLMJETcAuP/2tA8PBjsAuP/itA0NBjsAuP/OQAsLCwY7AAApDQkUC7j/8rQQEAY7C7j/+rQPDwY7C7j/xLYLCwY7C2QoEPYrKyv9PBEzLysrKyvtEjkvKysrK108/TxdAD/tPD88EjkvPP08MTABFAYHBgYjIREhESMRMxEhETMRMzIWFxYWBzQmJyYmIyMRMzI2NzY2B7lUR1TAmP5l/YbGxgJ6xtuYwFVMSM8xNTeQg52YhY82ODMBzWywN0I4At79IgXR/bgCSP24I0I7rnJLciMlEP3LGiUnaQAB//8AAAVhBdEAHQCXQC1gGmAbcBpwGwQFFxUXAhQBCDUXFwESDzUQAwwBCAEUAAAQACAAAwAIEBAGOwC4//K0DQ0GOwC4/+q0DAwGOwC4/9pAEgsLBjsAAB8PHwEPEhIUDBQPDbj/+LQPEAY7Dbj/1rQMDQY7Dbj/5rQLCwY7DS8rKysz/TwyLy9dETMvKysrK139AD88P/08Ejkv7RI5XTEwXSEjETQmJyYmIyIGBxEjESE1IRUhETY2MzIWFxYWFQVhxg0YGmtfP6FJxv5cBF7+DEu5TF+dNzg9AZxKhygrLBQS/ToFIbCw/koWHy0yMZ9yAP//AJcAAATkB+0CNgHyAAABFwCNAD4BYQATQAsBHAUmAQAcHAYSJQErNQArNQAAAv////sEpwePABoAKAD3uQAZ//BACwoRBjsZCg0NBjsZuP/wtAsMBjsZuP/qQBAJCQY7FxlXAWcBYwNzAwUDuP/AQE0LDTcHGYcZAhkZGhgUFxYXFhcWGRoTAAEAFhcYGgEFAAcLCw81BxsKHg8hGh4DISElqh4eAAMoKhsiKiEbIQAmFlYWZhd2FnYXhgEGCrj/wLMJDTcXuP/wQA8JEDcAEAkQNwoWCgEDFwC4/9i0CwsGOwC4/8BADAkUNwAAKg8qLyoCFy9dETMvKysSFzkvKysrXRE5OS/tL+0APzMv7TMvXTMv/TIvERIXOQGHEP3ACMABhxD9CMBdMTABK10rKysAKwEBBgYHBgYjIiYnNTMWFjMyNjc2Njc3ATMBAQMGBiMiJiczFhYzMjY3BKf95CJVLi5ZLShsDw4PPS8WPBkdMxUi/fXbAZQBbQoEtri4tgSyAmBeX18CBdH7Gk9gGBkQBAG5AgUFDA4vM08ET/yUA2wBvpa4uJZwY2JxAAABAJf+rwTQBdEACwCQQBsLBgMINAEFAwITAw4QEAY7HwMvAwIDAwUJFAC4//K0EBAGOwC4/+JACw8PBjsACA0NBjsAuP/6tAwMBjsAuP/iQAoLCwY7AGUNCBQFuP/ytBAQBjsFuP/4QAsPDwY7BQANDQY7Bbj/xLYLCwY7BWQMEPYrKysr7RD2KysrKyvtEjkvXSvtAC8vM+0/MzEwISERIxEhETMRIREzBND+Qbv+QcYCrcb+rwFRBdH62wUlAP////YAAATWBdECFgAkAAAAAgCXAAAEjQXRABIAIQB7QB4aNAwMBws1CAMbNAcIBwBIE1YAAx8KLwoCCgoTFQC4/8CzCRE3ALj/4rQNDQY7ALj/zkALCwsGOwAAIwsbFAe4//q0DxAGOwe4//y0DQ0GOwe4/8a2CwsGOwdkIhD2Kysr/TwRMy8rKyvtMy9dXQA/7T/tEjkv7TEwARQGBwYGIyERIRUhETMyFhcWFgc0JicmJiMjETMyNjc2NgSNVEdUwJj+UQOL/TvvmMBVTEjPMTU3kIOxrIWPNjgzAc1ssDdCOAXRsP5oI0I7rnJLciMlEP3LGiUnaQD//wCXAAAEiQXRAhYAJQAAAAEAlwAABAoF0QAFADi1ATUEAwMAuP/AQAkJETcAAAcCFAO4//K0DxAGOwO4//y2DQ0GOwNkBhD2KyvtETMvKwAvP+0xMAEhESMRIQQK/VPGA3MFIfrfBdEAAAIAEv6vBVAF0QANABMAk0A1UAkBEDQKAwwTBzQDAQUQEwoUDw8GOwoWDQ0GOwoADAwGOywKAQoKBw4UDBgNDQY7DAwBEwC4/+y0Dw8GOwC4/7a0CwsGOwC4/8BAFQkZNwAAFQ8VARMTBxgJDzcHBwQTBbj/zrQLCwY7BS8r7TkvK+1dETMvKysr7TkvK+0SOS9dKysr7QAvPC/9PDw/7TEwXQEjESERIxEzNhIRIREzIREhAgIHBVC8/Dq8UYKfAz+N/q3+QQ6Ydv6vAVX+qwIB1QKzAZn63wR1/pf9tMD//wCXAAAEOgXRAhYAKAAAAAH/8gAABzQF0QAxARBAoFMtZi10LQNaClAWWTFqCmAWaDEGWQpXFmkKZxYEJi0vL2ghJhQhISYVDgwMaBoVFBoaFQECAmgxABQxMQAHCAhoCQoUCQkKDBoOFSYtIS8IKDEKAgcyH5YcQAsLBjscHAUqETUoHRIDCQgEAQAIZzEBKSkBMQIhJi8tBwCOHgQUBa8SARISCAoHDhUaBgmOHQAFHzM/M18zbzOABaAFBwW4//K0DxAGOwW4/+y0DQ0GOwW4/9y0CwsGOwUvKysrXTP0FzkyL10Q/TL0FzkyL10APzw8PDw/PDz9PBI5Lyvk/Tw5ORIXOYcFLit9EMSHLhgrfRDEhw4uGCuHDn3Ehw4uGCuHDn3EAV0AXTEwXSEjASMRIxEjASMBJiYnJiYjIzUzMhYXFhYXFhYXETMRNjY3NjY3NjYzMxUjIgYHBgYHBzT0/hBgxGL+EOgCMkFhLihbgCgzp7c9Dx4LLHtWxFx9LhIdCTy6pTMogF0oKmw/Aq39UwKt/VMDACqAk4FisYCsLFQaa2cIAqD9XgljcC1RHKuBsWOAhYQoAAEAH//lBAwF7ABAAM1AHCYiKT8zIjo/QiJKP1k7YDdkOHoLdDJzOHs/DTG4/8BALwwPNwxADA83EA0gDQI+PR00YCABICAJNC8wATAwMSk0NAINDQwRNAkKFxAMDTcDuP/wQBYODzcjFToEDAwGOzo9Hh49OgMMFxUDuP/yQAsNDQY7AxoMDAY7A7j/4LQLCwY7A7j/wEAJCRI3AwNCMTEMuP/itAsLBjsMLyszLxEzLysrKyvtEhc5Ly8vK+0rKwA/7TMzLz/tMzMvXRESOS9d7Tk5XSsrMTBdARYWFRQGBwYGIyImJzUzFhYzMjY3NjY1NCYnJiYjIzUzMjY1NCYnJiYjIgYHBgYHIzU2NjMyFhcWFhUUBgcVFhYDmTJBUEZI1IKL6EYOUOVzSZExMS43MjGJTpyInsAvKy9nPUB8NzROGQ1E6nJzpkVLS6GCMnUCziuBZmSrQEJGNx7eNVEnLCxnTkxoICAbpn55N08ZGxMdFRUuD9sgNicsMYVcebQcDwkuAAEAlwAABMUF0QAJALlAKlsCVAcCCgIFBxkHAwYHFgdaAlQHbQJgB30CcAd3CJUCmQfmAucH9gcOB7j/6EAYCxA3AhAMEDcHBgECBAMIAwMIAwgHAhQAuP/uQAsQEAY7AB4PDwY7ALj/+rQMDAY7ALj/5EAPCwsGOwBlCw8LQAsCBxQEuP/utBAQBjsEuP/2QAsPDwY7BAoNDQY7BLj/xrYLCwY7BGQKEPUrKysr7V0Q9CsrKyv9ETk5AD8/Ehc5KysxMF1xciEjEQEjETMRATMExcX9X8jFApjRBJ77YgXR+3UEiwAAAgCXAAAExQePAAkAFwDkQDtbAlQHAgoCBQcZBwMGBxYHWgJUB20CYAd9AnAHdwh1EnUWlQKZB+YC5wf2BxAQDwoBCgoUqg8NAQ0NB7j/6EAiCxA3AhAMEDcHBgECBAMIAwMIFyoKESoQChAABAMIBwIUALj/7kALEBAGOwAeDw8GOwC4//q0DAwGOwC4/+RADwsLBjsAZRkPGUAZAgcUBLj/7rQQEAY7BLj/9kALDw8GOwQKDQ0GOwS4/8a2CwsGOwRkGBD2KysrK+1dEPYrKysr/RE5ORESOTkv7S/tAD8/Ehc5KyszL13tMy9dPDEwXXFyISMRASMRMxEBMwMGBiMiJiczFhYzMjY3BMXF/V/IxQKY0ZIEtri4tgSyAmBeX18CBJ77YgXR+3UEiwG+lri4lnBjYnEAAQCXAAAE5AXRABoAx0BMBxoXGiYaOBZIFlgWZxoHDwoKaBgWFBgYFgIBAWgAGhQAABoKGA8WBBEaArwvCAEICAAGFDURAwQBAAgoAlcAAgoYDxYEEgECEhoEALj/yLQLCwY7ALj/wEAPCQ83AAAcDxxAHAIIBBQFuP/xtBAQBjsFuP/8QAsPDwY7BQ4NDQY7Bbj/xLYLCwY7BWQbEPYrKysr/TxdETMvKysXOS8XOV0APzw8P+08EjkvXf05Ehc5hwUuK30QxIcOLhgrDn0QxDEwAF0hIwEjESMRMxE2Njc2Njc2NjMzFSMiBgcGBgcE5Pz98n3GxnWJKxIdCTy6pT0yemIpKWZIAqr9VgXR/WEEbmctURyrgbFfhIR7LwAAAQAP//0E1QXRACEAk7UzCnAcAg+4/+hAFwoPBjsPGAoPNwM1IAMBExMXNQ8IARQAuP/wtBAQBjsAuP/kQAsPDwY7AAoNDQY7ALj//LQMDAY7ALj/5EAQCwsGOwBlIwMTIAwQEAY7ILj//EAODAwGOxAgICAwIAMgIBK4/+K0CwsGOxIvKzMvXSsr7RD2KysrKyvtAD/9Mi8vP+0rKzEwXSEjESEGBgcGAgcGBgcGBiMiJiM1MxYWMzI2NzYSEzYSNyEE1cb+CgMKAwgjHBtJKy1nRBUrDA4KDg4kPhZEPw0FCgQDdwUhcddV0/7sXVtwJikpA8ABAhYXQwFXASJiAUKHAP//AJcAAAWTBdECFgAwAAD//wCXAAAE0AXRAhYAKwAA//8AQv/hBWcF8AIWADIAAAABAJcAAATQBdEABwB1QAoDNQYDBAAIARQAuP/ytBAQBjsAuP/itA8PBjsAuP/6tAwMBjsAuP/iQA8LCwY7AGUJDwlACQIEFAW4//K0EBAGOwW4//hACw8PBjsFCg0NBjsFuP/EtgsLBjsFZAgQ9isrKyvtXRD2KysrK+0APzw/7TEwISMRIREjESEE0Mb9U8YEOQUh+t8F0QD//wCXAAAEQwXRAhYAMwAA//8AQv/lBKwF7AIWACYAAP////8AAAStBdECFgA3AAAAAf////sEpwXRABoA0rkAGf/wQAsKEQY7GQoNDQY7Gbj/8LQLDAY7Gbj/6kAQCQkGOxcZVwFnAWMDcwMFA7j/wEA2Cw03BxmHGQIZGRoYFBcWFxYXFhkaEwABABYXGBoBBQAHCwsPNQcAAyYWVhZmF3YWdheGAQYKuP/AswkNNxe4//BADwkQNwAQCRA3ChYKAQMXALj/2LQLCwY7ALj/wEAMCRQ3AAAcDxwvHAIXL10RMy8rKxIXOS8rKytdAD8v/TIvERIXOQGHEP3ACMABhxD9CMBdMTABK10rKysAKwEBBgYHBgYjIiYnNTMWFjMyNjc2Njc3ATMBAQSn/eQiVS4uWS0obA8ODz0vFjwZHTMVIv312wGUAW0F0fsaT2AYGRAEAbkCBQUMDi8zTwRP/JQDbAADAEL/8AW7BekAHQAqADcAhUA+JCwyGBUVFgMlKzIGCQgqHiUyAh4VAAYQEAY7AI8HKxUYJQQHFAgyFQ8YEBAGOw+PDzkfOT85gAiQCLAIBgi4//S0EBAGOwi4/+y0DQ0GOwi4/9hACwsLBjsICDk4YDkBXRESOS8rKytd9CvtEO0XORD0K+1dAC8vPP08PzMvPP08MTABFAYHBgYHFSM1JiYnJiY1NDY3NjY3NTMVFhYXFhYHNCYnJiYnETY2NzY2AREGBgcGBhUUFhcWFgW7VEtR7H7FfexTS1NQSE3ojcWN6k1ITs44NzSKX1qNLj06/a9fijQ3ODo9Lo0C+IvVSVBXA7W1BFJSSdiKgs9LUFwEpaUDXU9Kzn1jozk2NAL8kAI3Ljys/rEDcAE2NTimYXatOyw6AP//AAgAAASdBdECFgA7AAAAAQCX/q8FUwXRAAsAk0AOCQQDCgYAAAY1AwgHFAq4//60EBAGOwq4/8S0Dw8GOwq4/8C0DQ0GOwq4//ZAFQsLBjsKCgETACgPDwY7ABQNDQY7ALj/xLQLCwY7ALj/wEAMCRk3AAANDw0BBhQDuP/0tBAQBjsDuP/EtgsLBjsDZAwQ9isr7V0RMy8rKysr7TkvKysrK+0AP+0zLxA8PzwxMAEjESERMxEhETMRMwVTvPwAxgKjxo3+rwFRBdH63QUj+t0AAAEAXQAABH8F0QAZAHlAGFYReBYCaQUBAgwUNQUFABgMAwAIFwEUALj/6kALDxAGOwAIDQ0GOwC4/+xACgsLBjsAZRsNFAu4/8BAFgsQNwsODxAGOwsaDQ0GOwsKDAwGOwu4/9q0CwsGOwsvKysrKyvtEPYrKyv9MgA/PzMSOS/tEjldMTBdISMRBgYjIiYnJiY1ETMRFBYXFhYzMjY3ETMEf8Z6vmhgoD08Q8YOIR1yX1XWTsYCdigoLzQ0pHACAP5jXm0yLC8nHQKxAAEAlwAABvUF0QALAMJADwoGAgMIBDQBCAgUBQkUALj/+LQPEAY7ALj/4rQNDQY7ALj/9kAqDAwGOwAKCwsGOwCQCBQFBBQBFhAQBjsBDA8PBjsBHA0NBjsBDgwMBjsBuP/sQA4LCwY7AZAABR8NkAUDBbj/6LQQEAY7Bbj/7LQPDwY7Bbj/7LQNDQY7Bbj/9rQMDAY7Bbj/2EAPCwsGOwUFDQwwDVANcA0DXRESOS8rKysrK130KysrKyvtEP30KysrK+0Q7QA//Tw/PDwxMCEhETMRIREzESERMwb1+aLGAgbGAgbGBdH62wUl+tsFJQAAAQCX/q8HggXRAA8At0AgDAgEAwAOCgYABjQDCA8TAgoNDQY7AhQLCwY7AgILFA64/+C0DxAGOw64/+S0DQ0GOw64//ZAIAsLBjsOkAoUBwYUAyAQEAY7AxgPDwY7AxwNDQY7A5AHuP/AQBMJEzdPBwEHGhAQBjsHGA8PBjsHuP/qtA0NBjsHuP/AQA8LCwY7BwcREB8RMBFvEQNdERI5LysrKytdK/QrKyvtEP30Kysr/TkvKyvtAD/tMxA8PC8/PDwxMAEjESERMxEhETMRIREzETMHgrz50cYCBsYCBsaN/q8BUQXR+tsFJfrbBSX62wAC//8AAAVeBdEAEgAhAJpADho0DAwHCTUKAxs0BwgAuP/sQAkPETdZEwETFQC4/8CzCRE3ALj/8LQPDwY7ALj/2LQNDQY7ALj/zkAQCwsGOwAAIyNACQo3DBsUB7j//rQQEAY7B7j/1LQPDwY7B7j/3rQNDQY7B7j/7rQMDAY7B7j/7LULCwY7BwovLysrKysr/TIrETMvKysrK+1dKwA/7T/tEjkv7TEwARQGBwYGIyERITUhETMyFhcWFgc0JicmJiMjETMyNjc2NgVeVEdUwJj+bP58AkrUmMBVTEjPMTU3kIOWkYWPNjgzAc1ssDdCOAUhsP24I0I7rnJLciMlEP3LGiUnaQADAJcAAAW4BdEAEAAfACMAm0AdRh4BGDQKCgciCAMhGTQHCBEVVgBwAAIAAAchFCC4//S0EBAGOyC4/+ZACw8PBjsgBg0NBjsguP/0tAwMBjsguP/iQA4LCwY7IGUlICUBChkUB7j/8LQQEAY7B7j/+kALDw8GOwcGDQ0GOwe4/8a2CwsGOwdkJBD2KysrK/0yXRD2KysrKyv9ETkvXe0AP+08PzwSOS/tMTBdARQGBwYGIyERMxEzMhYXFhYHNCYnJiYjIxEzMjY3NjYBIxEzBG1UR1TAmP5xxs+YwFVMSM8xNTeQg5GMhY82ODMCGsbGAc1ssDdCOAXR/bgjQjuucktyIyUQ/csaJSdp/ogF0QAAAgCXAAAEgwXRABAAHwBuQBUYNAoKBwgDGTQHCAcASBFWAAMRFQC4/8CzCRE3ALj/7LQNDQY7ALj/xEALCwsGOwAAIQkZFAe4//i0DxAGOwe4//60DQ0GOwe4/8a2CwsGOwdkIBD2Kysr/TIRMy8rKyvtXQA/7T8SOS/tMTABFAYHBgYjIREzETMyFhcWFgc0JicmJiMjETMyNjc2NgSDVEdUwJj+W8blmMBVTEjPMTU3kIOnooWPNjgzAc1ssDdCOAXR/bgjQjuucktyIyUQ/csaJSdpAAEAK//lBIoF7AAeAKG1WBpzAQIZuP/AQAkNDzcYQAoMNwi4/8BADgoMNwZADQ83VxwBDjQRuP/AQBwPDwY7EREDHBgYGRQ0HAIICAYLNAMJEQgNDjcAuP/4sw4PNwC4//BACgkKNxAQEQYOFAC4/+BAFAsLBjsAZyAPIAEPIB8gXyADGZYGL+RdXRD0K/0ROTkvKysrAD/tMzMvP+0zMy8REjkvK+1dKysrKzEwXQEQACEiJic1MxYWMzIAESE1ISYmIyIGByM1NjYzIAAEiv6J/tGA41YPSN5+1wEO/SoCzBf9x3vWTw9Q6X4BQgFiAu7+nf5aMyjbQU0BOgEBrdj3TETcJTf+cQAAAgCX/+EHWgXwABIAHgDdQCIJAwcQWQNWEGcDdgN5EAcHNAwMCAoWNBACCgMcNAMJCAgAuP/4sw4PNwC4//C3CQo3DQAZFAa4/960EBAGOwa4/+y0Dw8GOwa4/+y0DAwGOwa4//pAFAsLBjsGBA4PNwYQCQo3BgYIExUAuP/stA0NBjsAuP/ktAwMBjsAuP/OQAsLCwY7AGcgDAgUCbj/9rQQEAY7Cbj/+kALDw8GOwkGDQ0GOwm4/8a2CwsGOwlkHxD2KysrK/0yEPQrKyvtEjkvKysrKysr7RI5KysAPz/tPz/tERI5L+1dMTABEAAhIAADIxEjETMRMxIAISAAAxACIyICERASMzISB1r+nP7Y/tj+pwbqxsb0JAFQAQkBKAFkzvHMz/HyzszxAuj+kP5pAYwBY/0wBdH9rAEsAUf+a/6NASgBNf7L/tj+2/7JATYAAAL/+wAABE0F0QAQAB8AjrkABP/oQCIJEDcDBBMFBQYGDxE0A0APDwY7AwMAEjQPAwAFWQkBGRUJuP/sQA8QEAY7CQQDBgkEBRIBFAC4//K0EBAGOwC4/+JACw8PBjsACg0NBjsAuP/2tAwMBjsAuP/stgsLBjsAZSEQ9isrKysr/TIvFzkvK+1dAC8vP+0SOS8r7RI5MTABhxD9wCshIxEjASMBJiY1NDY3NjYzIQMRIyIGBwYGFRQWFxYWMwRNxuH+Q+4B3palX05HvnMBisbOVmgrLjQlKS2CVgJQ/bACbjPVs3KlNzIo/SQCMhYdH3BDUGopLB7//wA6/+EDswR4AhYARAAAAAIAQ//hBCkGHQAqADwAskAyNQU7LDI2NDcyPEQFSyxAN0M8UAByNgsmOlcbAjElLkEQKFAoAigoCRxBGwA6PwkKGyW4//RADA8PBjsbJTEDNCsaA7j/9LQQEAY7A7j/6LQPDwY7A7j/8LQNDQY7A7j/6rQMDAY7A7j/zkAWCwsGOwNxPjQbDxgPEAY7DxgMDQY7D7j/4LYLCwY7D3A9EPYrKyvtEPYrKysrK+0SFzkrLwA/7T/tEjkvXe0zM10xMF0BFhYVFAYHBgYjIiYnJgI1NDY3NjY3NjY3NjY3FQYGBwYGBwYGBzY2MzIWEzQmIyIGBwYGFRQWFxYWMzI2A6BBSFJGSK9naa8+TU0NFhREN0flvUOZKDR2TGXcOCoyCkqpYlukCaCUUZhDAgQ4Mi1kO5CgA7hCy4aB20tOT0lMXwEe00ubbGClOUpYEQYLA60DCQYINzoroGI1ST3+IbK+Ni0ZRRyu2j44K9oAAAMAiAAAA/QEXQAVACQAMwCjQAxlMnUyAggYCQsGOwi4/+hAGQkLNxIRLDweQB0dBjseHgcdPQgFLT0HCA+4//SzCQ83ALj/8EAZCQo3FhsSLA8IDRAGOw8MCwsGOw8PByUbALj/2EALCwsGOwBxNR4sGge4//JACw8PBjsHBAwMBjsHuP/EtgsLBjsHbjQQ9isrK/0yEPYr7RI5LysrEjntKysAP+0/7RI5LyvtOTkrKzEwXQEUBgcGBiMhESEyFhcWFhUUBgcXFhYDNCYnJiYjIxEzMjY3NjYTNCYnJiYjIxEzMjY3NjYD9D42RJVo/kkBmntyODs4WEkFW3v7GR8kWU+z2EU6IyEcOSE4I1BH3aNlcCgqJgFSUX0qNSUEXQ8fIGpJUH8jBxeMAX8mOBATB/7ODRUURP5COUUbEQj+kxAYGkQAAQCIAAADTgRdAAUAS7YBPwQFAwgAuP/AtAsLBjsAuP/AQAkJEjcAAAcCGgO4//ZACw8QBjsDDg0NBjsDuP/AtgsLBjsDbgYQ9isrK+0RMy8rKwA/P+0xMAEhESMRIQNO/fa8AsYDuPxIBF0AAgAI/vQERgRdAA0AEwCdQA8BBRA+CgUMEwc+AwgQGgq4//RAFxAQBjsvCj8KTwoDCgoHDhoMBA0NBjsMuP/2QAkMDAY7DAwBGgC4//RACxAQBjsAGg8PBjsAuP/AtAsLBjsAuP/AQBUKFTcAABUvFQETGgcYCQ83BwcEGgW4/+i0CwsGOwUvK+05LyvtXREzLysrKyvtOS8rK+0SOS9dK+0AP/08PD/tLzwxMAEjESERIxEzNhIRIREzIREhBgIHBEav/SCvSl95Aq1v/tX+wA1vVP70AQ/+8QGsnAH3ASr8QwMf+v5jiAD//wA7/+YEAAR8AhYASAAAAAEACAAABdQEXQAxARZAoQEVASYQFRAmJxQiJjcxRzFXMWkKCiYtLy+0ISYUISEmDBoVFbQODBQODgwCAQG0ADEUAAAxBwgItAkKFAkJCiYSAQwaDhUmLSEvCCgxCgIHPB8cQAsLBjscHAUqET8oHRIFCQgEAQAIDhAMDjcpKQExAiEmLy0HAJEEHh0EGgUPEh8SAhISCAoHDhUaBgmRDzMfMyAFPzNvM5AFsAXABQgFuP/ytA8QBjsFuP/ytA0NBjsFuP/QtwsLBjsFBTMyERI5LysrK130FzkyL3EQ7Tk5EPQXOTIvKwA/PDw8PD88PP08EjkvKzz9PDk5Ehc5XYcFLit9EMSHLhgrfRDEhw4uGCuHDn3Ehw4uGCuHDn3EMTAAXSEjASMRIxEjASMBJiYnJiYjIzUzMhYXFhYXFhYXETMRNjY3NjY3NjYzMxUjIgYHBgYHBdTj/qFJukn+m9kBpTFMHhtKVCsze58tCRsKIVhAukBbIAsbCCycfTMrT08bHEwuAgL9/gIC/f4CSRpjXlVComR9GkMXTEQEAen+FwVESxlCGXtmokFWV2QaAAEAIP/mA2wEeAA9AIZARBoCFjUlNTcMOStGDEkrWwhVL2oIZS97CHQvDSALATsbP78czxwCHBwGMS0tKT4xBAsLDj8GCRwuIxs3Lhw3OwQJFBsAuP/QtAsLBjsAuP/AtgkQNwAAPwm4/+y0CwsGOwkvKxEzLysr7RIXOS/tLy8AP+0zLz/tMy8REjkvXe05XTEwXQEUBgcGBiMiJic1MxYWMzI2NzY2NTQmJyYmIyM1MzI2NzY2NTQmJyYmIyIGByM1NjYzMhYXFhYVFAYHFRYWA2xSQD2cTm7EYQxEzWYsZSMuJy0nJ2E2hGUmciIrNCwhIlAlX68/DEivWEeTQj5UZ1VddwE1XoImJSQrL9A/SRMUHEA4PEkSEgmiBQ0QO0YxPBESDTU0yxkmHSMid1ZbiRYHIIQAAAEAiAAAA/oEXQAJAJlAIycIhgeoAqYHugK2BwYuAy8HNAdEB1wCUwdrAmIHfwJwBwoHuP/yQBgLEQY7Ag4LEQY7BwYBAgQDCAUDCAgCGgC4/+C0EBAGOwC4/+60DAwGOwC4/+RACwsLBjsAbwsDBxoEuP/8QAsPDwY7BAoNDQY7BLj/xrYLCwY7BG4KEPYrKyvtORD2Kysr/TkAPz8SFzkrKzEwXXEhIxEBIxEzEQEzA/q6/fKqugIIsANB/L8EXfzMAzQA//8AiAAAA/oGZAI2AhAAAAEWANktAAAKtgEAFgoFCSUrNQABAIgAAAQLBF0AGgDBQA0ED1oZahkDGhAODzcauP/wQEYMDzcPFhgYtAoPFAoKDwIBAbQAGhQAABp5FgEKGA8WBBEaArwuCAEICAAGFD8RBQQBAAgfHC8cAgoYDxYEEgEaAgMAEhIAuP/eQAsLCwY7AAAcCAQaBbj//EALDw8GOwUODQ0GOwW4/8S2CwsGOwVuGxD2Kysr/TwRMy8rMy8RFzkRFzldAD88PD/tPBI5L139ORIXOV2HBS4rfRDEhw4uGCuHDn3EMTABKwArXSEjASMRIxEzETY2NzY2NzY2MzMVIyIGBwYGBwQL6v6BXry8SWckCxsILJx9MytPTxscTC4CA/39BF3+GgE7VRlCGXtmokFWV2EaAAABAA///gPpBF0AIQCFuQAP/+hAFw0QBjsPGA0QNwI+IQUAExMXPw8IARoAuP/gQAsQEAY7AAYPDwY7ALj/+rQNDQY7ALj/7LQMDAY7ALj/4kAbCwsGOwBvIwMaIBkNDQY7IA4MDAY7QCABICASuP/itAsLBjsSLyszL10rK+0Q9isrKysr7QA//TIvLz/tKysxMCEjESEGBgcGBgcGBgcGBiMiJiM1MzIWMzI2NzY2NzY2NyED6bz+gAMGAwYdFhY1ISJOMRAyCgoHDwoYLhIyLgoEBwMC4AO/U5k+ndRAQkoeHh4CpAIOEzH13FLgZgABAIgAAASUBF0ADADHQCEJChkKKQpbAlsFbwJvBWYKfwJ/BXIKC1YDWQRmA2kEBAq4/+JAOQwRBjsCGAwRBjsFHgwRBjsFCgIDCQoEGgQqBAMEBAcLCQUBBwgJCgsDBQIaABQQEAY7ABAPDwY7ALj/+LQNDQY7ALj/7LQMDAY7ALj/0EANCwsGOwBvDiAOAQUaB7j/9kALDw8GOwcGDQ0GOwe4/8q2CwsGOwduDRD2Kysr7V0Q9CsrKysr7REXOQA/PD88EjkvXRIXOSsrKzEwAV0AXSEjEQEjAREjETMBATMElLr+9Iz+9rDjASYBHOcDbv3GAjr8kgRd/ZQCbAAAAQCIAAAD+gRdAAsAcUAPAz8ICAUKBwUBBQgJAhoAuP/itBAQBjsAuP/+tA0NBjsAuP/utAwMBjsAuP/iQAsLCwY7AG8NCAMaBbj//EALDw8GOwUKDQ0GOwW4/8a2CwsGOwVuDBD2Kysr/TIQ9isrKyv9MgA/PD88Ejkv7TEwISMRIREjETMRIREzA/q8/ga8vAH6vAH3/gkEXf48AcQA//8AOf/hBB8EfAIWAFIAAAABAIgAAAP6BF0ABwBbQAoDPwYFAAUIARoAuP/mtBAQBjsAuP/utAwMBjsAuP/iQAoLCwY7AG8JBBoFuP/8QAsPDwY7BQoNDQY7Bbj/xrYLCwY7BW4IEPYrKyvtEPYrKyvtAD88P+0xMCEjESERIxEhA/q8/ga8A3IDu/xFBF0A//8AiP5kBDEEfAIWAFMAAP//ADv/5wOOBHcCFgBGAAAAAQAEAAADuARdAAcAcEAhAQU/BgUDCAA7AgU7AhqgA7AD7wMDDwkfCS8JXwlvCQUDuP/4tBAQBjsDuP/qtA8PBjsDuP/stA0NBjsDuP/2tAwMBjsDuP/aQA0LCwY7AwMJCA8JfwkCXRESOS8rKysrK11d7eQQ5AA/P/08MTABIREjESE1IQO4/oS8/oQDtAO4/EgDuKX//wAG/mQD9gRdAhYAXAAAAAMAPv5kBdYGFAAjADAAPQDoQCA9JTMwPTczOUslQTBLN0E5ViIJHQEbHgwJBAYnNT8hGLj/8EATDg83GAQ7Lj8PBhAODzcGCQsMJLj/9rYLDAY7JBsAuP/tQBMQEAY7AAYNDQY7AJIJMRseKwQJuP/0QDYPDwY7CRoMOAoMDAY7OBsSERAQBjsSCg8PBjsSFAsMBjsSkhAMIAyADLAM7wwFDz8/P28/Awy4/+K0DQ0GOwy4//C0DAwGOwy4/9hACwsLBjsMDD8+UD8BXRESOS8rKytdXf0rKyvtKxDtKxc5EP0rK+0rAD8/KzP9Mj8rM/0yEhc5PzEwXQEUBgcGBiMiJicRIxEGBiMiAhE0Njc2NjMyFhcRMxE2NjMyEgM0JiMiBgcRFhYzMjYFESYmIyIGFRQWMzI2BdZJPD2aVD9fIbo7RlC84kg/OplTO18ouixyPLzZwYF+NE8sLDc1gpT9mCRILICWh34yUAJMleVKS00wEf4zAc0fIgExAQqM3E1HTykaAeH+Hxso/tP+7r/eGxD9FxUa1qcC6REaytbD4B4A//8ACgAAA+wEXQIWAFsAAAABAIj+9ARiBF0ACwCNQA4JBAUKBgAABj8DCAcaCrj/8LQQEAY7Crj/+LQPDwY7Crj/8rQMDAY7Crj/7EAJCwsGOwoKARoAuP/qtA8PBjsAuP/AQAwJFTcAAA0PDQEGGgO4//JACw8PBjsDCg0NBjsDuP/GtgsLBjsDbgwQ9isrK+1dETMvKyvtOS8rKysr7QA/7TMvEDw/PDEwASMRIREzESERMxEzBGKv/NW8AfO8b/70AQwEXfxFA7v8RQAAAQBgAAAD0ARdABkAfUAYdhEBBRAJCzcCDBQ/BQUAGAwFAAgXARoAuP/qQAsQEAY7AAoPDwY7ALj/7LQMDAY7ALj/4kAfCwsGOwBvGw0aIAsBCwoPEAY7CxQNDQY7CwoMDAY7C7j/2LQLCwY7Cy8rKysrXe0Q9isrKyv9MgA/PzMSOS/tEjkrMTBdISMRBgYjIiYnJiY1ETMRFBYXFhYzMjY3ETMD0LxYplFHhzExNbwMGxddTEKXOLwBtB0gJSoqg1kBkf7RSlcpIyYaEgIWAAEAiAAABbIEXQALAIxAJQoGAgUIBD4BCAkaABQQEAY7AA4PDwY7AAoLCwY7AJMIGgUEGgG4//a0EBAGOwG4//BACw8PBjsBCg0NBjsBuP/2QBQLCwY7AZMABRAFIAUwBYAFoAUGBbj/0EARCwsGOwUFDQwADSANMA1QDQRdERI5Lytd9CsrKyvtEP30Kysr7QA//Tw/PDwxMCEhETMRIREzESERMwWy+ta8AXu8AXu8BF38QgO+/EIDvgAAAQCI/vQGIQRdAA8Ar0AaDAgEBQAOCgYABj4DCA8aAhQLDwY7AgILGg64//y0Dw8GOw64//ZADAsMBjsOkwoaBwYaA7j/9kAqDQ0GOwMKDAwGOwMKCwsGOwOTAAcfESAHMAdPEVAHbxFwB4AHkAegBwsHuP/qQAsPEAY7Bw4NDQY7B7j//LQMDAY7B7j/vLcLCwY7BwcREBESOS8rKysrXfQrKyvtEP30Kyv9OS8r7QA/7TMQPDwvPzw8MTABIxEhETMRIREzESERMxEzBiGv+xa8AXu8AXu8b/70AQwEXfxCA778QgO+/EIAAgAEAAAEYgRdABIAIQCTQBEaPQwMBwk/CgUbPQcIeRMBALj/6LUJDTcTGwC4/8CzCRk3ALj/8LQPEAY7ALj/zkALCwsGOwAAIy8jAQq4/+BACQsLBjsKDBsaB7j/9rQQEAY7B7j/5kARDw8GOwcQDQ0GOwcGDAwGOwe4/8y0CwsGOwcvKysrKyv9Mi8rXREzLysrK+0rXQA/7T/tEjkv7TEwARQGBwYGIyERITUhETMyFhcWFgc0JicmJiMjETMyNjc2NgRiQThClnb+hf7kAdjEfotFOjrCIygqa2SAfGRuKCklAVpRhCkyKgO4pf5NGjMrhlUzTRgZCv6EERgaRwAAAwCIAAAFAwRdABAAHwAjAJ5AFlYeZR4CGD0KCgciCAUhGT0HCHoRAQC4/+i1CQw3ERsAuP/uQB8QEAY7ABgPDwY7cAABAAAHIRogGBAQBjsgAg8PBjsguP/gtAwMBjsguP/iQAsLCwY7IG8lChkaB7j/+kALDw8GOwcKDQ0GOwe4/8i2CwsGOwduJBD2Kysr/TIQ9CsrKyv9ETkvXSsr7StdAD/tPD88Ejkv7TEwXQEUBgcGBiMhETMRMzIWFxYWBzQmJyYmIyMRMzI2NzY2ASMRMwPFQThClnb+iry/fotFOjrCIygqa2R7d2RuKCklAgC8vAFaUYQpMioEXf5NGjMrhlUzTRgZCv6EERgaR/7gBF0AAgCIAAAD1gRdABAAHwB2QAwYPQoKBwgFGT0HCAC4//BACwkKN2gRehECERsAuP/ytA8QBjsAuP/stA0NBjsAuP/TtAsLBjsAuP/AQAoJGDcAACEJGRoHuP/wtA8PBjsHuP/EtgsLBjsHbiAQ9isr/TIRMy8rKysr7V0rAD/tPxI5L+0xMAEUBgcGBiMhETMRMzIWFxYWBzQmJyYmIyMRMzI2NzY2A9ZBOEKWdv55vNB+i0U6OsIjKCprZIyIZG4oKSUBWlGEKTIqBF3+TRozK4ZVM00YGQr+hBEYGkcAAQAq/+cDhwR3ACcAurkAJ//AQBAOEAY7GEAOEAY7J0AOEDcbuP/wswwNNxi4/8BACQ4QNxdADA03ALj/wEAYDA03Cz0MDCQbFxcYED4bBAAAJwc+JAkhuP/wQAsMDTcLCxgNlgoaIbj/6rQPDwY7Ibj/7rQNDQY7Ibj/4LQMDAY7Ibj/1EANCwsGOyFxKe8YARgYJ7j/4LQLCwY7Jy8rMy9dEPYrKysr/eQSOS8rAD/tMzMvP+0zMy8REjkv7SsrKysrKysxMBMzFhYXFhYzMjY3ITUhJiYjIgYHBgYHIzU2NjMyFhcWFhUQACMiJicqDBZBLDBYQJCuDf4EAfsSrYA5Yi4mOxsMNcFXcbxERUn+4fRbrUIBABMpEhQWwriXn54ZFRIqFs4XPERGSM2T/uj+ui8cAAIAiP/hBd8EfAASAB4ApkA1OhY1HEoWRRwEBz0MDAgKFj8QBAoFHD8DCQgIDRkaBg4PDwY7Bg4NDQY7LwaPBgIGBgkTGwC4/+i0Dw8GOwC4//a0DQ0GOwC4/+y0DAwGOwC4/9hADgsLBjsAcSAvIAEMCBoJuP/6QAsPDwY7CQYNDQY7Cbj/xLYLCwY7CW4fEPQrKyv9Ml0Q9isrKyvtEjkvXSsr7TkAPz/tPz/tERI5L+1dMTABEAAjIgAnIxEjETMRMzYAMzIAAzQmIyIGFRQWMzI2Bd/+8d/b/v8Mxby8yRcBAsvrAQPCnY+RnZ6Qj50CLv7n/swBIfr+BARd/jnkAQL+wP7y1tbY1NLZ0wAAAgAVAAADsQRdABAAHwCNQCwDBAS0BQYUBQUGBhE8AwMAEj0PBQAFBAh5BgEJEAkMNxkbIAkBCQQDBgkEBbj/3kAbCwsGOwUSARoAGhAQBjsAEg8PBjsABg0NBjsAuP/6tAwMBjsAuP/wQAoLCwY7AGUhPyEBXRD2KysrKyv9Mi8rFzkvXe0rXQA/PDw/7RI5L+05hwUuK30QxDEwISMRIwEjASYmNTQ2NzY2MyEDESMiBgcGBhUUFhcWFjMDsby6/rXbAWeLgUk+MpheAZK8zEFLIyQlGSEjZTwBu/5FAcwpoohTfSsiIf3yAXgOFBZLKzdFHR4TAP//ADv/5gQABdsCNgBIAAABFgCODQAADbcDAgAxLAMMJQErNTUAAAEADP5tBCIGFAA7AOlAFAY2LwYsB1QTWR1gBHkicDVwNwkzuP/wQC0KCzc5CTAwAi8mvCzvKQEpKTMqASMwIEIzBA4+CQwlCGcAaBcCLQwtDCUXGgC4/+BAERAQBjsACg8PBjsABA0NBjsAuP/2tAwMBjsAuP/uQCELCwY7AG89Dz0vPT89Xz0EKCwwJBopKBAlcCWQJaAlBCW4/+60EBAGOyW4/960Dw8GOyW4/+5ACw0NBjslHgwMBjsluP/2tAsLBjslLysrKysrXTMz/TIyL10Q9isrKysr7RI5OS8vXQA/P+0/7TMzPxI5L108/TxdKzEwXQEUBgcGBgcGBiMiIic1MzIyMzI2EzY2NTQmJyYmJyYmIyIGBxEjESM1MzUzFSEVIRE2NjMyFhcWFhUUFgQiAgECT0RGq2cVGyULCx0IuIoKAQEBAQEPFxdQRkaVR7ymprwBc/6NTqlcTn4tLTgDAfA6cDqx/1FUSgKe/QFJIksuGEsrUX0rKipLPPy+BPaEmpqE/utHVDMxMqZrL2v//wCIAAADTgaMAjYCCwAAARYAjaYAAAu2AQAHBwQFJQErNQAAAQA9/+cDkAR3ACEAq7YPQA4QBjsAuP/AtA4QBjshuP/AQAkMDTcQQAwNNw+4/8BAIQ4QNwBADhA3GT0YGAMMEBAPFD4MBCEhAB0+AwkYGAkPALj/5kAKCwsGOwBxIxeWGrj/6EAeDA03GhoJEBAQBjsJFg8PBjsJHAwMBjsJFg0NBjsJuP/gtgsLBjsJcCIQ9isrKysr/SvkEPQrPBE5LwA/7TMzLz/tMzMvERI5L+0rKysrKysxMCUGBiMiJicmJjUQADMyFhcVIyYmIyIGByEVIRYWMzI2NzMDkEymWHPARUVMARnwX6w/CzWvXn+xFwH8/gENtIlkqzMLMCUkR0hI25QBDwE7NiDLL1GhnJfAukguAP//AEP/5QNrBHgCFgBWAAD//wB/AAABVQXbAhYATAAA////2gAAAfoF2wIWAHcAAP///6b+WQG6BdsCFgBNAAAAAgAP//4GcQRdAC4APQCnuQAV/+hAJg0QBjsVGA0QNzY9KCgHCT4mBRk/FZY3PQcIeS8BKDcaB0AODzcHuP/ytBAQBjsHuP/2QA4NDQY7Bx4LCwY7BwcZALj/6LUJDTcvGwC4/8CzCRg3ALj/7LQNDQY7ALj/zkAXCwsGOwAAPw8/Lz8CCRomEAsNBjsmJhkvMy8r7V0RMy8rKyvtKxI5LysrKyv9PF0AP+307T/tEjkv7SsrMTABFAYHBgYjIREhBgYHBgYHBgYHBgYjIiYjNTMyFjMyNjc2Njc2NjchETMyFhcWFgc0JicmJiMjETMyNjc2NgZxQThClnb+g/6CAwgDBh0WFjUhIk4xEDIKCgcPChguEjIuCgQHAwLgxn6LRTo6wiMoKmtkgn5kbigpJQFaUYQpMioDv1OZPp3UQEJKHh4eAqQCDhMx9dxS4Gb+TRozK4ZVM00YGQr+hBEYGkcAAgCIAAAGYgRdABgAJwCxQBQglgk9Eg4OBxAMBQohPQcIehkBALj/8EALCQo3EiEaDyAHAQe4//ZAFhAQBjsHCg8PBjsHFAsLBjsHBwsZGwC4/8CzCRM3ALj/5EALDQ0GOwAWDAwGOwC4/85ADgsLBjsAACkPKQENCRoLuP/6QAsPDwY7CwINDQY7C7j/yrYLCwY7C24oEPYrKyv9Ml0RMy8rKysr7RI5LysrK10z/TIrXQA/7Tw/PBI5Lzz95DEwARQGBwYGIyERIREjETMRIREzETMyFhcWFgc0JicmJiMjETMyNjc2NgZiQThClnb+g/4mvLwB2rzGfotFOjrCIygqa2SCfmRuKCklAVpRhCkyKgIQ/fAEXf5NAbP+TRozK4ZVM00YGQr+hBEYGkcAAAEADAAABCAGFAAhAMNAJQMeFB4kHjYZcB1wHwYXDrwUERESGA0IQhsEEgEBDQgVFQ0BGgC4/+BAERAQBjsACg8PBjsABA0NBjsAuP/otAwMBjsAuP/cQCELCwY7AG8jDyMBDxQYCxoSDxANIA0wDVANcA2QDaANBw24/+60EBAGOw24/960Dw8GOw24/+60DQ0GOw24//K0DAwGOw24/8C0CwsGOw0vKysrKytdMzP9MjIvXRD0KysrKyvtEjkvAD88Pz/tEjkSOS88/TwxMF0hIxE0JicmJiMiBgcRIxEjNTM1MxUhFSERNjYzMhYXFhYVBCC8DxUXUkdGlUe8pqa8AXP+jVSkW0t/MC82AnxNhSgqKUs8/L4E9oSamoT+60tQMDQyom///wCIAAAECwaMAjYCEgAAARYAje0AAB1AFAEcESYBMB1AHVAdYB0EAB0eBhIlAStdNQArNQD//wAG/mQD9gZkAjYAXAAAARYA2dMAAAq2AQAUCAQAJSs1AAEAiP70A/oEXQALAHFAGAoGBQMDCD4ABQgCGgMKEBAGOwMDBQkaALj/5rQQEAY7ALj/7rQMDAY7ALj/4kAKCwsGOwBvDQgaBbj//EALDw8GOwUKDQ0GOwW4/8a2CwsGOwVuDBD2Kysr7RD2Kysr7RI5LyvtAD887TMvPzwxMCEhESMRIREzESERMwP6/p6u/p68Afq8/vQBDARd/EQDvAABAJcAAAQKB2sABwBPQBcGBgE1BAMDCAUTABgPEAY7ABINDQY7ALj/wEAJCRE3AAAJAhQDuP/ytA8QBjsDuP/8tg0NBjsDZAgQ9isr7REzLysrK+0APz/tMy8xMAEhESMRIREzBAr9U8YCuboFIfrfBdEBmgAAAQCIAAADTgXOAAcAYEAXBgMBPwQFAwgFDBAQBjsFBA8PBjsFGgC4/860CwsGOwC4/8BACQkRNwAACQIaA7j/9kALDxAGOwMODQ0GOwO4/8C2CwsGOwNuCBD2Kysr7REzLysr7SsrAD8/7T8xMAEhESMRIREzA0799rwCGK4DuPxIBF0BcQABAG4CPAbYAtwAAwARtgG/AgAABQEvETMvAC/tMTABITUhBtj5lgZqAjygAAQAlwAACJoF8AAJABUAGQAlAMpAVQ8HGwckBzUHRQdTB2EHBwsBBgYbARUGJgE3BkQGWAFTBmwBYQZ8AXAGDQwBBAYCWgFVBgIHAgAGGL+QFwEXFw4jPR8NAQ0NHT0TAgcCAAgGAwMBCCC4//BADgwNNxoQDA03EBAODzcKuP/wQCAODzcGAQIHGBYWGAogGhAQCgcTAAAEGhoKCicCEwRkJhD27REzL+0SOS/tEjkv7RI5OS8vERI5OSsrKysAPzw/PBI5OT/tMy9d7REzL13tERI5OTEwAXJxXQBdISMBESMRIQERMwEUAiMiAjU0EjMyEgMhNSEDNCYjIgYVFBYzMjYEld79mbkBGQIsuQQF6rrB5Oq7u+mD/b4CQjGBb2+CgHFxfwUE+vwF0ftlBJv+NeP++QEH4+kBAf7/+8GiArSvpaWvqaur//8AiAAAA/oEXQIWAJsAAAACAEEApAQhBIUAIwAvAFdAPAYABgoIEggcBC0pCwgCIx0aFBEIFy8FAQUnKQUPFwEXDzEfMQIkKQsIAiMdGhQRCA4gIAEgKikgYA4BDi9dM+0vXRIXOe1dAC9dM+0vXRIXOe0xMF0BBycGBiMiJicHJzcmJjU0NjcnNxc2NjMyFhc3FwcWFhUUBgcnNCYjIgYVFBYzMjYEIWrWLU42Ll0k12nUGRsbGtVr1iVcLTRbIdRt1hsaHRhbcU9Nc3FPTXMBEGrUGxkeF9dt1ShdKixZKdhq1RgcHxTUadgrUDQtXSWvUHVzUlB1cwAQAAAAAAgABcEABQAJAA0AGQAdACMALgA0ADgARABIAEwAUgBZAGAAaALDQP93D4cPlw+nD7cPBXomASMlMyVDJVMlYyUFAyg9OD1IPVg9aD0FKEE4QUhBWEFoQQUnOzc7RztXO2c7BSdDN0NHQ1dDZ0MFx2YBAsVoAcpiAQPIZAFXYGdgAlhbaFsCArUqxSrVKvUqBHUqhSqVKqUqtSoFMypDKlMqYyoEAwdjF2MCGEIoLVcIVxhXAl1dJwdWF1YCVygBKCg4KEgoAygvDEhHAUcBMjMHGwMvBy8XLwIIHAQzExUVZwhnGGcCEDwIXhheAggnSCdYJwOYJwEnJzcnRydXJwQnUgtGIk9NN0sgUghSGFICNkofTUc5VzlnOXc5hzmXOQY5J1deVydAhmcnAqcnAbgnAWgnAQAnDi0BAy2YKwErCBIYEigSOBJIElgSaBJ4EogSmBIKWBJoErgSyBLYEugS+BIHElckASSXDgFoDngOAg4hBzYJNSMDBx8BHyMBCyEHIRchAgAKIyNqaD94PwIIPzg/SD8DPxpJG0pOLwhNAU1OMUVRCFEYUQIAMkZOLzw8sE4QsFGxUU5KaTpfXRA8PBDdXTwQ1DzdPC9dcbA/ELBlsWU/Smk6EDwQPDywIxCwIbFOUUppOl0QPDwQ1F08ENQ83TwQ1nFdsA4QsBexP2VKaTrUXbAkELBasT9lSmk6xl1xxHGwKxCwU7E/ZUppOjJfXcRfXXFdcbBesWU/SmmwJxA6EDwQxl2wORCwYbE/ZUppOgAvPDw8sE0QsFIBsVFOSmkAOl0QPDw8ENQ81jwQ1l1dcbAnELBesV4nSmk6XdQ8sDwQsGexXidKaTpdEDwQxi88PDywMxCwLwGxTlFKaQA6XRA8PDwQ3TzWXTwQxl1xsCgQsFaxJ15KaTpdETkvsF0QsFexXidKaTpdEjkQxDywQhCwY7EnXkppOl0xMF9dXXFfcXFdX11dX10BXV1dXV9dcV0BIzUjNSEFITUhASMRMwEUIyInNxYzMjURMwEhNSEBITUzNTMBFCEjETMyFRQHFgEjFSMRIQEhNSEBFAYjIiY1NDYzMhYBIxEzASE1IQUhETMVMwE0IyMVMzIXNCMjFTMyJRAjIhEQMzIIAGTfAUP9wf69AUMCP2Rk/vbTVjRJGShfdPyM/r0BQwR+/r3fZP2P/u7w6/lZd/u032QBQwR+/r0BQ/2VpJmZoaGZmaT9DmRkAx7+vQFD/cH+vWTfA7qjWWWXHqtvfJ79x8nGxskEft9kZGT8fgFD/uHxLU8aigHkARtk+j9k3wEM0QLEuls2LgKU3wFD+j9kAnutwMCtr8DA/rEBQ/x+ZGQBQ98DGWPCz23c/wEN/vP+9QAAAgEAAAAHAAYAAAMABwAAIREhESUhESEBAAYA+oAFAPsABgD6AIAFAAAAAgEAAAAHAAYAAAMABwAAIREhESUhESEBAAYA+oAFAPsABgD6AIAFAAAAAgEAAAAHAAYAAAMABwAAIREhESUhESEBAAYA+oAFAPsABgD6AIAFAAAAAgEAAAAHAAYAAAMABwAAIREhESUhESEBAAYA+oAFAPsABgD6AIAFAAAAAgEAAAAHAAYAAAMABwAAIREhESUhESEBAAYA+oAFAPsABgD6AIAFAAAAAgEAAAAHAAYAAAMABwAAIREhESUhESEBAAYA+oAFAPsABgD6AIAFAAAAAgEAAAAHAAYAAAMABwAAIREhESUhESEBAAYA+oAFAPsABgD6AIAFAAAAAgEAAAAHAAYAAAMABwAAIREhESUhESEBAAYA+oAFAPsABgD6AIAFAAAAAgEAAAAHAAYAAAMABwAAIREhESUhESEBAAYA+oAFAPsABgD6AIAFAAAAAgBC/+EGHQXwACgAOgC1QEAoKgkQNxu8ACMCAxoJCgkFFRoJFRVaCVUVBi80FQI4NAkKIh4pJhUbAAMPKQgNDQY7KRUDFA8QBjsDDgwMBjsDuP/4tAsLBjsDuP/AQBAREzd4AwEDPA88QDxQPAM1uP/4QBkNDQY7NRUPFA8QBjsPGA0NBjsPGgwMBjsPuP/iQAoLCwY7dw8BD2Y7EPZdKysrK+0rXRDWXSsrKyvtKxIXOdT9xAA/7T/tXRI5OT/d7TEwKwEWFhUUAgcGBiMiJicmAjU0Ejc2NjMyFhcWFhc2NjU0Jic1MxYWFRQGATQmJyYmIyIGBwYGFRASMzISBTAbHFxXW/OSl/JXVlxdVlbzlpj0VBIhDk9DFgygDQt4/vRAOjunaGyhPjs/9s/P9QRJTq9ktf7cY2hjZmVjASK3vAEcZmNnamAVLxkEQEQkWxcJL0YybIL+jZTkS01NS09M5pH+2/7JATcAAAIAOf/hBHgFhAAdACkApEA3OyA0IjQmOyhLIEQiRCZLKAgaIAkMNxUbvA0FAAMhPwkEJz8DChQQKRgJDBsDBh4bAAgQEAY7ALj/+LQPDwY7ALj/+LQMDAY7ALj/1kAkCwsGOxAAMAACwADwAAIAK4AroCsCJBsGGA8QBjsGFgwNBjsGuP/ktgsLBjsGcCoQ9isrK+1dEN5dcSsrKyvtEhc53P3EAD/tP+0SOT/9zTEwKwFdARAAIyIAERAAMzIWFzMyNjU0Jic1MxYWFRQGBxYWBzQmIyIGFRQWMzI2BB/+8OLp/vUBE+EyWytZWkoWDKANC3NsQUXCnpKTn5+TkZ8CLv7m/s0BPQEQARgBNg8QQUckWxcJL0YyaoAUS9uL2dPT2dLZ1QAAAQCF/+EGBgb4ACsAq7UkKgkQNwC4/+hAIwwNBjs6AEoAAh8lvBYDBwMnDwEPNAAKHhopIhYUHy0gJQIluP/utBAQBjsluP/etA8PBjsluP/stAwMBjsluP/stA0NBjsluP/OQA0LCwY7JSUtDy0BCBQHuP/AswkRNwe4//ZACxAQBjsHCg0NBjsHuP/GtgsLBjsHBywRMy8rKysr7V0RMy8rKysrK13t3f3EAD/tXT8//cRdKzEwKwUiJicmJjURMxEUFhcWFjMyNjc2NjURMzI2NTQmJzUzFhYVFAYjERQGBwYGAp+DxEVOQMYaJiiJY12QKCUb2FpKFgygDQusoD9PR70fRURO2Z8DofxfZ404PD4+PDmKZAOmQUckWxcJL0Yyg4T85pveTUVEAAABAID/4QU8BYQAKAC4QCgJCH0IeQl0FgQmKgkQN7gFASEnvBgFDAUBCBcCFEIFCiAcKSQXARoAuP/AQBQTFTdAAAEfKiAAPyrfAO8A8AAGALj/5LQQEAY7ALj/+LQPDwY7ALj/7LQNDQY7ALj/3rQMDAY7ALj/zkAMCwsGOwAqXyoBDhoLuP/4QAsPDwY7CwoNDQY7C7j/xrYLCwY7C24pEPYrKyvtXRDWKysrKytdcSvtMtT9xAA/7TMzPz8//cRdMTArXSEjNQYGIyImJyYmNREzERQWFxYWMzI2NxEzMjY1NCYnNTMWFhUUBiMjA+68V5xgSYEwMDW8DRcXT0pFnEHQWkoWDKANC6ygAnxMTzA0NJ5xAtX9hFl1LCsoTjkDQkFHJFsXCS9GMoOEAAEBrQURAuYGjAAWADxAJL8DAQMGBgUMuxRgBQEFBK3ABdAFAgVACQ03BQURCSkPAAEAES/dXe0SOS8rXe0AL13U7RI5L8VdMTABFAYHFSM1NjY1NCYjIgYHIzU2NjMyFgLmQkJuLzAmIR8lGAMTSSZRZgX4QE4VRHkMJycYJwkJaQYMVgAAAQHE/oICmv9FAAMAE0AJAUSPAgECABUBL+0AL13tMTABIzUzAprW1v6Cw////P4FFv6kBowAFwBD/AYAAP///X8FFv8lBowAFwCN+74AAAACANoFEQS4BowABgAKAD65AAb/8EAiDhA3BRAOEDcIAgEHCAQDBQVgAwEDYAdwBwIHCQAAYAQBBC9dMy/WzV0AL10zLxIXOS8xMAErKwEjAwMjEzMhAyMTA4Wfubib5OMCF9qBfAURAQD/AAF7/vYBCgAC/6cFEQOFBowABgAKAD65AAb/8EAiDhA3BRAOEDcIAgEICQQDBQVgAwEDAG8JfwkCCQcAXwQBBC9dM9bNXS8AL10zLxIXOS8xMAErKwEjAwMjEzMBIwMzA4Wfubib5OP+YYHa3wURAQD/AAF7/vYBCgACANoFEQRkB1IABgAdAGq5AAb/8EA/DhA3BRAOEDe/CgEKDQ0ME7sbDAIBDAMDBQVgAwEDC63ADNAMAgxACQ03DAwYECkPBwEHGEAMEDcYAABgBAEEL10zL9Qr3V3tEjkvK13tAC9dMy8SFzkv1O0SOS/FXTEwASsrASMDAyMTMyUUBgcVIzU2NjU0JiMiBgcjNTY2MzIWA4Wfubib5OMBw0JCbi8wJiEfJRgDE0kmUWYFEQEA/wABezJAThVEeQwnJxgnCQlpBgxWAAACAMkFEQOXB94ABgAgAE+5AAb/8EAsDhA3BRAOEDcHEL0PFx8XAhcUHb0KQAwRNwoBAgMFBWADAQMgKQcAEykUAAQvM9btL9btAC9dMy8SOTnWK+083V3tPDEwASsrASMDAyMTMxMGBiMiJicmJiMiBgcjNjYzMhYXFhYzMjY3A4Wfubib5OP2BoZfNUkcGDoZKyIFjAWHXzZJHBY7GSokBAURAQD/AAF7AVKJkCkZFi0+R4iRKhkULj5HAAIA5gTnA3kG+wANABEAQEApERBADxo3EAAQBgqqPwOgA8ADAwNgDnAOAg4QDSoQDwAfAI8AAwAHKgYv7dRdOe0vzV0AL13tzTk5LyvNMTABFAYjIiY1MxQWMzI2NTcDIxMDebKYl7KiVVJTVV7agXwGRqO8vKN8ZGR8tf72AQoAAgDmBOcDeQb7AA0AEQBAQCkQD0APGjcPAA8GCqo/A6ADwAMDA28QfxACEA4NKg4PAB8AjwADAAcqBi/t1F057S/NXQAvXe3NOTkvK80xMAEUBiMiJjUzFBYzMjY1ByMDMwN5spiXsqJVUlNVUoHa3wZGo7y8o3xkZHxVAQoAAgDmBOcDeQceAA0AJABoQEYRFBQTGp0PIk8iXyJvIn8iBSITQAkaNxMAEwYKqj8DoAPAAwMDEhNACQw3ExMAHxAfIB8DHxcoDg0qDg8AHwCPAAMAByoGL+3UXTntL+3NXTkvK80AL13tzTk5LyvUXe0SOS/FMTABFAYjIiY1MxQWMzI2NScUBgcVIzU2NjU0JiMiBgcjNTY2MzIWA3mymJeyolVSU1USNzdcJygiGRweFAIQPCFCVwZGo7y8o3xkZHxbNEMSOGUKISAZHQgHVwYKRQACAMkE5wOXB94ADQAnAFJADQ4XvQ8eHx4CHhskvRG4/8BAJAkLNxEABgqqPwOgA8ADAwMaKRsGJykODSoPAB8AjwADAAcqBi/t1F3t1O0Q1u0AL13t3TnWK+083V3tPDEwARQGIyImNTMUFjMyNjUTBgYjIiYnJiYjIgYHIzY2MzIWFxYWMzI2NwN5spiXsqJVUlNVwAaGXzVJHBg6GSsiBYwFh182SRwWOxkqJAQGRqO8vKN8ZGR8AZiJkCkZFi0+R4iRKhkULj5HAAABAa0FEQLmBowAFgA8QCS/AwEDBgYFDLsUYAUBBQStwAXQBQIFQAkNNwUFEQkpDwABABEv3V3tEjkvK13tAC9d1O0SOS/FXTEwARQGBxUjNTY2NTQmIyIGByM1NjYzMhYC5kJCbi8wJiEfJRgDE0kmUWYF+EBOFUR5DCcnGCcJCWkGDFYAAAIA2gZUA4UIAQAGACAAT0AiBxC7LxcBF0AOEDcXFB27cAqACgIKAQIFQAwRNwUPAwEDALj/wEAMDhA3ICgHABMoFAAELzPW7S/W7SsAL13dKzk51l3tPN0rce08MTABIycHIzczEwYGIyImJyYmIyIGByM2NjMyFhcWFjMyNjcDhamvrqX4u+wLcFAlSRwaPxQdKAaGCm9SJ0MhIjAaGysFBlRZWa0BAFJrGQ0NGiAtTm8XEBAWIyoAAAIA5gZIA3kIAQANABEAREAsXxEBERAAED8GAQYKuw8DPwPPAwMDWQ5pDnIOAw4QDSoQDwAfAI8AAwAHKgYv7dRdOe0vzV0AL13tzV05OS/NXTEwARQGIyImNTMUFjMyNjU3ByM3A3mrnp6soktdWk1PxoFoBzhYmJlXMFhZL8nY2AACAOYGSAN5CAEADQARAE5AIV8QARAPAA8/BgEGCrsPAz8DzwMDA1YQZhB9EAMQDg0qDrj/wEAPCQ03Dg8AHwCPAAMAByoGL+3UXTkr7S/NXQAvXe3NXTk5L81dMTABFAYjIiY1MxQWMzI2NQcjJzMDeauenqyiS11aTVaBxt8HOFiYmVcwWFkvD9gAAAIA5gZIA3kIAQANACQAbEBIERQUExpfIm8ifyIDIhNADhU3EyIAE0AGAQYKuw8DPwPPAwMDEhNACRQ3ExMAHxAfIB8wH0AfBR8XDg0qDg8AHwCPAAMAByoGL+3UXTntL83NXTkvK80AL13tzV05OTMvKy9dzRI5L8UxMAEUBiMiJjUzFBYzMjY1JxQGBxUjNTY2NTQmIyIGByM1NjYzMhYDeauenqyiS11aTS4uLk0jHxwVGRoOAg4yGzZKBzhYmJlXMFhZL2ErOA8vVAkeGBcWCAVJBQg5AAIA5gZIA3kIAQANACcAYEBADhe7Lx4BHkAMEDceGyS7IBEBXxFvEX8RwBHwEQURAAYKuw8DPwPPAwMDGigbGwYnKA4ODSoPAB8AjwADAAcqBi/t1F3tPBDtEDwQ7QAvXe3dOdZdce083Stx7TwxMAEUBiMiJjUzFBYzMjY1NwYGIyImJyYmIyIGByM2NjMyFhcWFjMyNjcDea6bm6+ibDw8a6ILcFAlSRwaPxQdKAaGCm9SJ0MhIjAaGysFBwZUamdXLigoLvtSaxkNDRogLU5vFxAQFiMqAAIA2gZoBLQIAQAGAB0AcLkABv/wQEQOEDcFEA4QN78KAQoNDQwTuxsBAgMPBXAFAgUbBQ8DAQMLrcAM0AwCDEAJDTcMDBgQKQ8HAQdQAGAAcAADGAAAYAQBBC9dMy/UXd1d7RI5Lytd7QAvXTMzL10SOTkv7cQ5L8VdMTABKysBIycHIxMzBRQGBxUjNTY2NTQmIyIGByM1NjYzMhYDhZ+5uJvk4wITQkJuLzAmIR8lGAMTSSZRZgZozs4BSURAThVEeQwnJxgnCQlpBgxWAP////b+ggTWBdECNgAkAAABFgJLOwAACrYCAA0OAAMlKzX//wA6/oIDswR4AjYARAAAARYCS+EAABFADAJgOXA5AgA5Ohc1JStdNQD////2AAAE1ggBAjYAJAAAARcCVgAxAXUAEkALAlAcAQIAHAsBAiUrNQBdNf//ADr/4QOzBowCNgBEAAABFgJWyQAAE0AOAgBIEEhASAMASDcrMiUrXTUA////9gAABN8H7QI2ACQAAAEXAk4AJwFhABtAFQMCAA0QDTANQA1gDXANBgANDQECJStdNTUA//8AOv/hBJ8GjAI2AEQAAAEWAk7nAAAMtwMCADk5GTQlKzU1////zgAABNYH7QI2ACQAAAEXAk8AJwFhAAy3AwIADQ0BAiUrNTX///+O/+EDswaMAjYARAAAARYCT+cAAAy3AwIAOTkZNCUrNTX////2AAAE2wgBAjYAJAAAARYCXCcAABlAEwMCAA0QDTANQA1QDQUADQ0BAiUrXTU1AP//ADr/4QRLB1ICNgBEAAABFgJQ5wAADLcDAgA5ORk0JSs1Nf////YAAATWCAECNgAkAAABFgJXJwAAEUALAwIADQEADQ0BAiUrXTU1AP//ADr/4QOzB94CNgBEAAABFgJR5wAADLcDAgA5ORk0JSs1Nf////b+ggTWB+0CNgAkAAAANwDWACcBYQEWAks7AAAUQA4DABQVAAMlAgANDQECJSs1KzX//wA6/oIDswaMAjYARAAAADYA1ucAARYCS+EAABpAEwNgQHBAAgBAQRc1JQIAOTkZNCUrNStdNf////YAAATWCAECNgAkAAABFgJYJwAADLcDAgARCwADJSs1Nf//ADr/4QOzBvsCNgBEAAABFgJS5wAADLcDAgA9Nxk0JSs1Nf////YAAATWCAECNgAkAAABFgJZJwAADLcDAgARCwADJSs1Nf//ADr/4QOzBvsCNgBEAAABFgJT5wAADLcDAgA9Nxk0JSs1Nf////YAAATWCAECNgAkAAABFgJaJwAADLcDAgARCwADJSs1Nf//ADr/4QOzBx4CNgBEAAABFgJU5wAADLcDAgA9Nxk0JSs1Nf////YAAATWCAECNgAkAAABFgJbJwAADLcDAgARCwADJSs1Nf//ADr/4QOzB94CNgBEAAABFgJV5wAADLcDAgA9Nxk0JSs1Nf////b+ggTWB9kCNgAkAAAANwDZADYBdQEWAks7AAAdQBMCEVARAQMAISIAAyUCABcLAAMlKzUrNQBdETUA//8AOv6CA7MGZAI2AEQAAAA2ANnbAAEWAkvhAAAaQBMDYE1wTQIATU4XNSUCAEM3GTQlKzUrXTX//wCX/oIEOgXRAjYAKAAAARYCSzwAAAq2AQAODwECJSs1//8AO/6CBAAEfAI2AEgAAAEWAkssAAAKtgIALi8DDCUrNf//AJcAAAQ6CAECNgAoAAABFwJWAB4BdQAaQBIBUB0BAQAdEB0gHQMAHQwBAiUrXTUAXTX//wA7/+YEAAaMAjYASAAAARYCVvAAABFADAIgPV89AgA9LAYGJStdNQD//wCXAAAEOgfVAjYAKAAAARcA1wA8AXUAEkALAVAZAQEAGQwBAiUrNQBdNf//ADv/5gQABmACNgBIAAABFgDXDgAACrYCADksAwwlKzX//wCXAAAE9AgBAjYAKAAAARcCTgA8AXUAFkANAgFQEAECAQAQDAECJSs1NQBdNTX//wA7/+YExgaMAjYASAAAARYCTg4AAAy3AwIALi4DDCUrNTX////jAAAEOggBAjYAKAAAARcCTwA8AXUAFkANAgFQEAECAQAQDAECJSs1NQBdNTX///+1/+YEAAaMAjYASAAAARYCTw4AAAy3AwIALi4DDCUrNTX//wCXAAAE8AgBAjYAKAAAARYCXDwAAAy3AgEAEAwBAiUrNTX//wA7/+YEcgdSAjYASAAAARYCUA4AABVADwMCAC4QLiAuAwAuLgMMJStdNTUA//8AlwAABDoIAQI2ACgAAAEWAlc8AAAMtwIBABAMAQIlKzU1//8AO//mBAAH3gI2AEgAAAEWAlEOAAAMtwMCAC4uAwwlKzU1//8Al/6CBDoIAQI2ACgAAAA3ANYAPAF1ARYCSzwAAB1AEwEQUBABAgAVFgECJQEAEAwBAiUrNSs1AF0RNQD//wA7/oIEAAaMAjYASAAAADYA1g4AARYCSywAABRADgMANTYDDCUCAC4uAwwlKzUrNf//AF0AAAKfCAECNgAsAAABFwJW/08BdQAYQBABUBEBATARQBECABEQBAklK101AF01//8AaAAAAaEGjAI2ANUAAAEXAlb+uwAAABFADAEACTAJAgAJCAIDJStdNQD//wBd/oICnwXRAjYALAAAARcCS/9PAAAACrYBAA4PBAklKzX//wB//oIBVQXbAjYATAAAARcCS/67AAAACrYCAAoLAgMlKzUAAf0p/oL9//9FAAMAAAEjNTP9/9bW/oLDAAAB/XYGnv6vCBkAFgAAARQGBxUjNTY2NTQmIyIGByM1NjYzMhb+r0JCbi8wJiEfJRgDE0kmUWYHhUBOFUR5DCcnGCcJCWkGDFYAAAIBAAAABwAGAAADAAcAACERIRElIREhAQAGAPqABQD7AAYA+gCABQAAAAIBAAAABwAGAAADAAcAACERIRElIREhAQAGAPqABQD7AAYA+gCABQAAAAIB0/5kAln/pAALABcAJUAWBtkAQBcbNwBADRA3ABLZDAwVDwnTAy/tOTkAP+3UKyvtMTAFIiY1NDYzMhYVFAYHIiY1NDYzMhYVFAYCFh0mJh0dJiYdHSYmHR0mJuImHR0mJh0dJromHR0mJh0dJgAFAR3+ZAMP/6QACwAXACMALwA7AGpAQQwYHhIEBtkAQBcbNwBADRA3ACokNtkwDDnTMy0nIdPvGwEbQBccNxtACRA3GxXTM+8PAQ9AFxw3D0AJEDcPCdMDuP/AswkONwMvK+3UKytxOe3UKytx7Tk5L+0AP+05OdQrK+0XOTEwBSImNTQ2MzIWFRQGMyImNTQ2MzIWFRQGMyImNTQ2MzIWFRQGByImNTQ2MzIWFRQGISImNTQ2MzIWFRQGAWAdJiYdHSYmmR0mJh0dJiaZHSYmHR0mJh0dJiYdHSYm/tIdJiYdHSYm4iYdHSYmHR0mJh0dJiYdHSYmHR0mJh0dJromHR0mJh0dJiYdHSYmHR0mAAMBLf5kAwD/pAADAA8AGwBBQB8A2gEK2QRAFxs3BEANEDcEFtkQDBkTDdMHQAkPNwcBuP/AtwkLNwIwAQEBL13dK9Yr7Tk5AD/t1Csr/dTtMTAFNSEVFyImNTQ2MzIWFRQGByImNTQ2MzIWFRQGAS0BDIQdJiYdHSYmHR0mJh0dJia2U1MsJh0dJiYdHSa6Jh0dJiYdHSYAAwEt/mQDAP+kAAsAFwAfAF61kB+gHwIfuP/AQBoJDzcfGR3aHAbZAEAXGzcAQA0QNwAS2QwMGrj/wEAYGiI3GhnUHhUPCdMDQAkPNwMdQBoiNx0eL90r1ivtOTkQ/c0rAD/t1Csr/dTtMsQrcTEwBSImNTQ2MzIWFRQGByImNTQ2MzIWFRQGJTUjNSEVIxUCvR0mJh0dJiYdHSYmHR0mJv6rWAEMWOImHR0mJh0dJromHR0mJh0dJnB2U1N2AAEB0/8eAln/pAALABVACwDZAAYQBgIGCdMDL+0AL13tMTAFIiY1NDYzMhYVFAYCFh0mJh0dJibiJh0dJiYdHSYAAAIBbv8eAr7/pAALABcAMkAhEgwA2QAGEAYCBhXTD0AXGTcPQAkPNw8J0wADEANQAwMDL13t1Csr7QAvXe05OTEwBSImNTQ2MzIWFRQGMyImNTQ2MzIWFRQGAbEdJiYdHSYmrR0mJh0dJibiJh0dJiYdHSYmHR0mJh0dJgADAXj+ZAK0/6QACwAXACMASUAxEgwG2QBAFxs3AEANEDcAHtkYDCHTGxXTG+8PAQ9AFxw3D0AJEDcPCdMAAxADUAMDAy9d7dQrK3E57S/tAD/t1Csr7Tk5MTAFIiY1NDYzMhYVFAYzIiY1NDYzMhYVFAYHIiY1NDYzMhYVFAYBux0mJh0dJiaZHSYmHR0mJngdJiYdHSYm4iYdHSYmHR0mJh0dJiYdHSa6Jh0dJiYdHSYAAQGQ/0oCnP+dAAMAGkAPANoAARABAgECQAkLNwIBL80rAC9d7TEwBTUhFQGQAQy2U1MAAAEBdf7EArf/nQAHADmzjwABALj/wEATCQ43AAYB2i8DPwMCAwVAGBo3Arj/wLcYGjcFBtQCAS/N/c0rKwAvXe0yxCtxMTABNSM1IRUjFQHocwFCc/7EhlNThgAAAQHTBU4CWQXUAAsAJUAaCdkAAzADYAOvAwQPAy8DPwNfA48DBQMA0wYv7QAvXXHtMTABFAYjIiY1NDYzMhYCWSYdHSYmHR0mBZEdJiYdHSYmAAMBHf5kAw//pAALABcAIwBbQDgS2QwG2QwAQBcbNwBADRA3AB7ZGAwh0+8bARtAFxw3G0AJEDcbFdPvDwEPQBccNw9ACRA3DwnTA7j/wLMJDjcDLyvt1Csrce3UKytx7QA/7dQrKzntL+0xMAUiJjU0NjMyFhUUBhciJjU0NjMyFhUUBhciJjU0NjMyFhUUBgFgHSYmHR0mJpkdJiYdHSYmmR0mJh0dJibiJh0dJiYdHSZdJh0dJiYdHSZdJh0dJiYdHSYAAAEB0wJNAlkC0wALAB9AEwPZMAkBAAmwCQIPCT8JAgkA0wYv7QAvXXFy7TEwARQGIyImNTQ2MzIWAlkmHR0mJh0dJgKQHSYmHR0mJgABAej+xAJE/50AAwAduQAD/8BADQkONwMvAj8CAgIC1AEv7QAvXc0rMTABNTMVAehc/sTZ2QABAH0ELgKTBPIAAwARtwDXAcoD3QUALxDmAD/tMTATNSEVfQIWBC7ExAABAZAFlwKcBeoAAwAgQBUB2g8APwCQALAA3wAFAAJACQs3AgEvzSsAL13tMTABNSEVAZABDAWXU1MAAQCR/2oBPgWIAAMAHbQCAQDSAbj/zrcLCwY7AQEFBBESOS8r7QAvLzEwBSMRMwE+ra2WBh4AAQHTBU4CWQXUAAsAJUAaCdkAAzADYAOvAwQPAy8DPwNfA48DBQMA0wYv7QAvXXHtMTABFAYjIiY1NDYzMhYCWSYdHSYmHR0mBZEdJiYdHSYmAAH/jgVOABQF1AALACVAGgnZAAMwA2ADrwMEDwMvAz8DXwOPAwUDANMGL+0AL11x7TEwExQGIyImNTQ2MzIWFCYdHSYmHR0mBZEdJiYdHSYmAAACAPMAAAHiBPIAAwAHABpADQFWAsoGVgUIBwAtBgEvPP08AD/tP+0xMAEjETMRIxEzAeLv7+/vA9UBHfsOAR0AAQCIAAAE3wTyABcAfkA/BQEiCTYKOQ11FQUKAQsACw0WFxcMDAALANEXDBQXFwwWDQwAAQoGFwsF0gbdGS8ZXxkCFxHSEtwYDRYLETcBuP/WQBALETcBBgoLDA0WFwgSAMoSAC8/ERc5KysBEPbtxl0Q9u3GERc5hy4rh33EAYcQwMCHEMDAMTAAXQEBNjY1NTMVFAIHASMBBgYVESMRNBI3AQFpAZqcf624tgGC4f4SYmqtipL+1QTy/bZEza6Li9f+5U792QLCPcWh/uEBH7UBDmUBqwAAAQA8AAAE9gURABcARUAWIRYBEOEM1xTJAATXAwXSARlACQ03ALj/7LQNDQY7ALj/zkALCwsGOwAZEYAEAQQvXcYQ1CsrK83tAC/tMj/95DEwXSUzFSE1IRE0JicmJiMiBgcjNTY2MyAAEQQ9uftGA1QoMjOxiifvTgpL0WABQgElxMTEAfJemTQ1Nw0NxAwO/uz+vwAAAQAcAAADnAURABsAiUAJBBUUFQICAgEDuP/qQCQJETcD0gQEBQIB0gAbAAcbGRt5GwMbFgkRNxERGAUECNIbGAC4/8BADQkRNwAdDx0fHS8dAwS4//RAFwsQNwQZBXkFAhDhDNcbBQQDAgEGFMkAAC8/Fzn95F0BLytdENYr1jntETkSOS8rXYcQ/cCHEP0rCMAxMABdISMDASMBNjY1NTQmIyIGByM1NjYzMhYVFRQWFwOctHP+o/wB6iAaa4UqZBgKI4c3sroSCgGs/lQCLyU/QYmAcBMHxAwO0MefMWUkAAEAFAAABKEE8gAHADVACQTSAQoNDQY7Abj/6EAUCwsGOwEACUAJDjcJBQgBBK8GygMALz/9wAEQzhAr3t0rK+0xMAEjESMRITUhBKHXrfz3BI0ELvvSBC7EAAIAlwAABOkFEQAWABoAT0AkIQUhBzEFMQdGB3oPig8HDxo/Gl8akBoEGhbiEtcDyQoZC9IKuP/sQBALCwY7Ct0cgBwBABjSGdwbEPbtM10Q9ivtAC8vP/3kL10xMF0TNiQzMhYXFhYVESMRNCYnJiYjIgQHIxMRIxGXTgEPgL3yRUg5rS41Nq+Efv7xQgqtrQT0CxJJSErgm/1FArVqnjExLhkG/s39BQL7AAABABQAAAGgBREADwA7uQAN/9ZAEwkNNwjgBdcMyQEB0gAKDQ0GOwC4/+ZADQsLBjsA3REPEYARAgkvXRD2KyvtAC8//eYxMCshIxE0JiMiBgc1NjYzMhYVAaCtODwRPR0aVx96ggPTOz8FBcQEBp+MAAABADsAAAJpBS8AEgCSQDYACQQLAhgMAQYANgBmAAMADA0NEBANDdcODxQODg9PD18PAg88DRg3Dw0PEAMOyQUADwwD0ga4//K0DQ0GOwa4//ZACwsLBjsGDRAGAw4PuP/AQAsJEDcPFBRACQ43Drj/wLMSFDcOLysrEMYrERc5Lysr7TkROQAvPxczzStxhy4rfRDEAIcQwMBxMTAAXXEBIgYVESMRNDY3NjY3JTUFFSYmAc9APa0gGhc6GP7zAi45PgOMV0D9CwL5NlgfHB4DeNT41BkQAAABAJcAAATpBREAFwA+QBghBSEHMQUxB0YHeg+KDwcS1wPJChcL0gq4/+xADwsLBjsK3RmAGQEV0gDcGBD27V0Q9ivtAC8vP+0xMF0TNiQzMhYXFhYVESMRNCYnJiYjIgYHESOXTgEPgL3yRUg5rS41Nq+ES6o3rQT0CxJJSErgm/1FArVqnjExLgsE+8IAAQCV/+EFFwURACoAPUAoBSaBAYcIihgEKgY6BgIg4RzXJMkKyg/XBgohFdIA3yyALAEL0grcKxD27V0Q9u3EAD/tPz/95F0xMF0BFAYHBgYjIAARETMRFBYzMjY3NjY1NTQmJyYmIyIGByM1NjYzMhYXFhYVBRdMSkzQj/7a/uWtvtZZmzI2OCMdHkslMVYmCSt0PFeBKioqAl6l9k1PRgE+ATICof1h5cknMTSpjtZWax0eEw8MxwsNRD48pmUAAQAUAmMBoAURAA8AKbkADf/WQBUJDTcI4AXXDMkBAdIA3REPEYARAgkvXRD27QAvP/3mMTArASMRNCYjIgYHNTY2MzIWFQGgrTg8ET0dGlcfeoICYwFwOz8FBcQEBp+MAAABABX+ZARnBREAFgA4QBYgBSAGMAUwBkQGBRbiEtcDyQoMC9IKuP/sQA0LCwY7Ct0YABiAGAIAL10Q9ivtAD8//eQxMF0TNiQzMhYXFhYVESMRNCYnJiYjIgQHIxVOAQ+AvfJFSDmtLjU2r4R+/vFCCgT0CxJJSErgm/upBFFqnjExLhkGAAEAPf/nBHsFEQAjADdAJAfiA9cLyRziINcYCSURNRFGEXoABADSEd8lACWAJQIHgBsBGy9dM10Q9u1dAD/95D/95DEwATQmIyIEByM1NiQzMhYXFhYVFRQGBwYGIyIkJzUzFhYzMjY1A87X9Xn+/T8KSgENcqzuTEtERUpN665o/uNECk7vfvTYApfb2xkGxgsSUU9Q6ZtCme5NUFATCsYIF9zaAAABAEj/4QR0BooAHQBOQDAFAxQDNBFJCXIEcAdwEoUECBvIGtcdyg3VDAoNQA4QNw8NHw0CDQ0bE9IG3x8c0hu4/8CzDhA3Gy8r7RD27RI5L10rAD/tP+0/MTBdATIWFxYWFRQCBwYEBzU2Njc2NjU0JicmJiMhETMRArZxlzlAPXhpav7zm1zOUVpxGCQjX0/9jq0E8jAvNZhIo/70bm+5WNsshk9X0nwgUh8eHQJc/mgAAgCXAAAE6QURAAkAFQA9QBckBSAGMAZAB3kOiQ4GFNcCyRXXAQrSALj/7EAPCwsGOwDdF4AXARXSAdwWEPbtXRD2K+0AL+0/7TEwXSEhESEyFhcWFhUDETQmJyYmIyIiIxEE6fuuAd298kVIOa0uNTavhEOVVAURSUhK4Jv+CQHxap4xMS78dwAAAQBWAAAE6QURACIAjUA+AwAjASoRMAE8EVwYgwGGHwgAAAEi0iEgIRob0gEAIBwcHSIAASAdGhwbCAshykYDARTXA8kM1wsMDBwN0gq4/+xAGAsLBjsK3SSAJAFmHXkdAhsdGiEiIAAHHLj/wLMMETccLysXM11dEPYr7RI5LwAv7T/tXT8SFzkBhxDAwMD9wIcQ/QjAMTAAXQE2NjMyFhcWFhURITUhETQmJyYmIyIGBwYGBwMjEzY2NwMzAX9HzoB4qjw7PP1zAeAvKStwRESCOS8+FH2ylggSDLzZBFFeYkRMSuuk/VjEAelynzEyLDFEOaNm/WoC7ClCJQF2AAEAHv5kAlQFEQAQAEC5AA7/1kAUCQs3CeEF1w3JAQwB0gAKDQ0GOwC4/+ZAEQsLBjsA3RIPEj8SXxJvEgQJL10Q9isr7QA/P/3kMTArASMRNCYjIgYHIzU2NjMyFhUCVK1eeypkGAojhzesqf5kBPmJZxMHxAwOys0AAQAyAAACpAURABIANrkAEP/WQBIJCzcL4QfXD8kCrwEMDAID0gC4/9y3CwsGOwDdFAIvEPYr7RI5LwAv7T/95DEwKyEhNSERNCYjIgYHIzU2NjMyFhUCpP2OAcVeeypkGAojhzesqcQCmYlnEwfEDA7KzQACABT/4QVbBPIAEwApAFpAMBkPeRCEHwMWBwEAKNcVygfXIQoN0iYbehuJGwMb3ysfKy8rXysDANIpKHUohigDKLj/7LQNDQY7KLj/7LULCwY7KCkv3SsrXe1dEPZd7QA/7T/tMl0xMF0BERQWFxYWMzI2NzY2NTQmJyYmIyUhMhYXFhYVFAYHBgYjIiYnJiY1ESMBcEw9PJFJRJg6QElOPT6bT/0ZAueH2FRUWV9PUdR5dtlPUF6vBCv+PI+xMC8gIS4zoZyTsDAwIcdFUFH6q638Sk1GR0xM+K8BxAABADL/bQSwBPIAGQBoQD0VGSkPJRk6EUYEWw9sDwcAGdIYFxiFAAEZCQAXBBjKFNYTIAkQNxMJ0grfG08bXxsCCxcGGBkXKReZFwUYuP/oQAkMEDcZFwADGBQvxhcyK11dEPbtAC8r7T8XOV0BhxD9wDEwAF0lNjY3NjY3NhI1MxACBwYGBwYEBTU2NjcBMwJUJz4fQnAnKSmtOTAwgEWR/nr+93XFUf7Ksb0WKRw5l3F5ASf5/vr+j3t9pz2DkR7LCyAaBHUAAAEAaf5kBLsFEQAkAGRAKiAeIB8wHjAgQyB5A4oDBxYqCQs3EeAN1xUVJQbXHMkkDCTSIwQNDQY7I7j/4kATCwsGOyPdJnAmASAS4BICEgnSGbj/wLMKETcZLyvtxF1dEPYrK+0APz/tEjkv/eQxMCtdATQmJyYmIyIGBxUUFjMyNjczFQYGIyImJxE2JDMyFhcWFhURIwQOLjU2r4RPjFFcUhxYEgolViWmpAFOAQ+AvfJFSDmtArVqnjExLg0H1ElECAfECAempwGTCxJJSErgm/upAAABAGn/5wS7BREANABeQDoVMyYedTOFJwQWKgkLNxHgDdcVFTUG1xzJLeIx1ykJANIlIzYjRyOJIwQj3TZPNgEsIBLgEgISCdIZuP/AswoRNxkvK+3EXcRdEPZd7QA//eQ/7RI5L/3kMTArXQE0JicmJiMiBgcVFBYzMjY3MxUGBiMiJicRNiQzMhYXFhYVFRQGBwYGIyIkJzUzFhYzMjY1BA4uNTavhE+MUVxSHFgSCiVWJaakAU4BD4C98kVIOUVKTeuuaP7jRApO73702AK1ap4xMS4NB9RJRAgHxAgHpqcBkwsSSUhK4Jtgme5NUFATCsYIF9zaAAEAKP5kA5cE8gAdAH1ALiMMMhdAF3ITBBMU1xUVFjQQQhBmEHYQlhAFExQVFhAZARwIHgjKAAwZEAkd0gC4/+a0DQ0GOwC4//xADAsLBjsAAAgUFhMDFbj/wEANCRI3FR8fQAkNNwnXCC/tKxDGKxcyETkvKyvtETk5AD8/Ehc5XQGHEP3AMTAAXQERNCYnJgI1NTMVFBYXFhYXNjY3NzMDBgYHFhYVEQHcREusecJfeAQLBGdfEiXGLBuiezMj/mQCy0t3SacBBadlZaW6fQQMBTaufPb+8qPSQUdqTv01AAABAEYAAARpBPIAIgCfQFgNHBwcKgMtHEUMaRVpG3sCeRWKA4oEgg4MEBHXEhITNQ0BDRYX0gMDBEUEVwNVBGUDYgQFEBESEw0WFwQDCR4Iyh/XHjYaRhpWGmkNBAMECADSDRYXAwkauP/AQA8RFTcaERMQAxLdJB8J1wi4/8CzDxE3CC8r7cQQ9hcy1CsRFzntETk5XQAv7T8SFzldhxD9wMBdAYcQ/cAxMABdJTQmJyUkAjU1MxUUFhc2Njc3MwMGBgcXFhYVFAYjITUhMjYDrjhC/u3+8MvCtbpsZggUxhsNhXOHa2yTavz9AvooI/EgOiWZmAEvx1pazMhpPK12+f7vgtBISzuDU3N4vhoAAAIAl/5kBOcE8gAbAB8AU0A8BBkxC0ULcAFwDHQaigSJCoQaCQ8ePx5fHpAeBB4U1xXKB9UGCh0MBw3SAN8hgCEBFB/SHgYLCwY7HtwgEPYr7TNdEPbtxAA/P+0/7S9dMTBdARQCBwYGBzU2Njc2NjU0JicmJiMhNSEyFhcWFgEjETME52ddXO2OU7FGSloYJCNfT/1qApJxlzlAPfxdra0DfqX+8HFwtlHbKoFUWMyDIFIfHh3EMC81mPqeBJcAAAEAHgAAA/0FEQAWAD+zJxIBE7j/rEATCw03DOII1xDJAQHSAAYNDQY7ALj/9kANCwsGOwDdGC8YTxgCDS9dEPYrK+0ALz/95DEwK10hIxE0JicmJiMiBgcjNTY2MzIWFxYWFQP9rS02Nq+EW6ZbClGbfsLtRkc5ArVsnDExLhAQxw0QSUhJ4poAAAEAlwAABkkE8gAfAIpAOgoUHBQrAi4EJQ8uG0oTSxRFHVUdagFpBHMdgh4OHh/SAAEADxDSERISiREBEREYATkAWQB5AIgABAC4/8BAIwkQNwAhDyEBChjSB9wghgoBCtgvF38XAhcRABcDBwjKGNcHAC/tPxIXOS9d7V0wARD27TJdEMYrXTIROS9dM4f9wBCH/cAxAF0BAgAHBgQjIREzETY2NzYSEzMCAgcGBiMVMzI2NzYSEwZJTf7c0mr+87P+u69QfDJNcDO1OpRfTspeo5vJUbb9QwTy/mf9wI9IQgTy/VsCGixDAQkBEf7H/q9RQijpLzd7AfYBVwAAAQAe/+wFGwURACsAcEAoIwUgBjAGQAaJEAUZKgkNNycVK+IS1wPJIOAj1xwJCwvSCgoNDQY7Crj/9kAlCwsGOwrdLZAtAS1ACQ03FdIAJ0AJDTcnBg0NBjsnCgsLBjsnIC/WKysrze0rXRD2KyvtAC8//eY//eQ5OTEwK10TNiQzMhYXFhYVESMRNCYnJiYjJgYHERQGBwYGIyImJzUWFjMyNjURBgYHI1tbAUmdufdJST2tMDg4s4M5aUIbHiFcUB1YGxw/D0c4N1gTCgT0DRBISUnhm/1FArVsmzIxLgEFA/zmQHkpLjAFBcQFBTlJAwoDCQIAAgAUAAAD0QURAA8AHwB2uQAd/9azCQ03Dbj/1kAeCQ03GOAV1xzJCOAF1wzJEQGQGAEYEdIQCg0NBjsQuP/mQBgLCwY7EN0hDyEfITAhTyEECQEKDQ0GOwG4/+ZACwsLBjsB0p8AAQAJL9Rd7SsrL10Q9isr7cRdAC8vP/3mP/3mMTArKyEjETQmIyIGBzU2NjMyFhUBIxE0JiMiBgc1NjYzMhYVAaCtODwRPR0aVx93hQIxrTg8ET0dGlcfd4UD0zs/BQXEBAacj/waA9M7PwUFxAQGnI8AAgAUAAAD0QURAA8AHwB2uQAd/9azCQ03Dbj/1kAeCQ03GOAV1xzJCOAF1wzJEQGQGAEYEdIQCg0NBjsQuP/kQBgLCwY7EN0hDyEfITAhTyEECQEKDQ0GOwG4/+RACwsLBjsB0p8AAQAJL9Rd7SsrL10Q9isr7cRdAC8vP/3mP/3mMTArKwEjETQmIyIGBzU2NjMyFhUBIxE0JiMiBgc1NjYzMhYVAaCtODwRPR0aVx93hQIxrTg8ET0dGlcfd4UCYwFwOz8FBcQEBpyP/BoD0zs/BQXEBAacjwACABQCYwPRBREADwAfAHW5AB3/1rMJDTcNuP/WQB4JDTcY4BXXHMkI4AXXDMkRAZAYARgR0hAKDQ0GOxC4/+RAHQsLBjsQ3SEPIR8hMCFPIQQJAdKfAAEACg0NBjsAuP/ktQsLBjsACS/UKytd7S9dEPYrK+3EXQAvLz/95j/95jEwKysBIxE0JiMiBgc1NjYzMhYVASMRNCYjIgYHNTY2MzIWFQGgrTg8ET0dGlcfd4UCMa04PBE9HRpXH3eFAmMBcDs/BQXEBAacj/59AXA7PwUFxAQGnI8AAAEAYQPlAfAGFAADADS5AAD/6EAXDRA3ARgJDDcCGAkQNwEAAQEBAwEAYwK4/8CzCxA3Ai8r7QA/M10vMTABKysrAQEjEwHw/vuKnQYU/dECLwACAGsD5QOABhQAAwAHAFW5AAT/6EAODRA3BRgJDDcGGAkQNwC4/+hAHQ0QNwEYCQw3AhgJEDcBAAUBBQUDBwEAYwICBGMGuP/AswoQNwYvK+0zL+0APzwzL108MTABKysrKysrAQEjEyMBIxMDgP77hp2c/vuGnQYU/dECL/3RAi8AAgCXAAAGGwTyABMAJwBiQApZAlUlagJlJQQkuP+sQCMOEDcDVA4QNwgVEhUIHwQHHdcgygrXBxTSFQnSCBUIHxLSE7j/5EAMCwsGOxPdKR7SH9woEPbtEPYr7RE5OS/tL+0AL+0/7RIXOS8vMTArK10BFAYHBgYjIREzESEyNjc2NjURMwEjETQmJyYmIyERIxEhMhYXFhYVBhs6ODmnb/3arQF1Um0fIRmt/mOtGSEfcE/+i60CJm+oODo4Ab9+qjQ1LgL+/cYiISNZQgMt/QIBOT9dIiEi+9IE8i80Nq15////jgAAAaAF1AI2AqUAAAAWAp4AAP//ABX+ZARnBRECNgKqAAABFwKN/6wDOQAlsQImuP/AQA4JDDcCASZfJm8mryYDJrj/wLIJDDcrXRE1NQArNQD//wAV/mQEZwURAjYCqgAAARcClf+sAxYAKrUBXxoBARq4/8CzFBc3Grj/wEAOEBI3EBpAGgIAGhsADiUrXSsrNQBdNf///47/4QR0BooCNgKsAAABFgKeAAAADrIBJCS4/8CyCRA3KxE1////jv/hBHQGigI2AqwAAAA2Ap4AAAEWApjeRgApQBcCXzABAgAwEDBAMHAwBAAwKhoVJQEkJLj/wLIJEDcrETUrXTUAXTUAAAEAMv/2BLAE8gAZAFpAMRUZKw9GBFsPbA8FABnSGBcYGQkAFwQYyhTWEwnSCt8bTxtfGwILFwYYGRcpF5kXBRi4/+hACQwQNxkXAAMYFC/GFzIrXV0Q9u0AL+0/FzkBhxD9wDEwAF0BNjY3NjY3NhI1MxQCBwYGBwYEITUyNjcBMwJBMksaRHMlJyitNS8ueUqC/nj+4Xe5Qv7jsQEFEy0XOpJlbAEb3vP+n3Z1oEJ0Z8sODAQXAP//AJcAAAZJBdQCNgK5AAABFwKdA9gAAAAKtgEAJiAfACUrNf//AJcAAAZJBdQCNgK5AAABFwKW/tgAAAARQAwBcCaAJgIAJiAICSUrXTUA//8AlwAABkkF1AI2ArkAAAA3Ap0D2AAAARcClgG5/MwAMEAjAjVPNQFANVA1AgI1EDUBMDVANVA1gDWwNf81BgEAJiAfACUrNV1xETUAXXERNf//AJcAAAZJBdQCNgK5AAAANwKd/tgAAAEXApYBufzMADRAJwJPNQFANVA1AgI1EDUBMDVANVA1gDWwNf81BgFwJoAmAgAmIAgJJStdNV1xETUAXXE1//8AiP9KBN8E8gI2AqAAAAEXApQAoAAAAAq2AQAZGhILJSs1//8AiP7EBN8E8gI2AqAAAAEXApUAoAAAAAq2AQAbHBILJSs1//8AiAAABN8E8gI2AqAAAAEXApEALQGlACZAHwEbEBsBABsQGyAb4BsEIBswG3AbgBuvG88b3xvgGwhdcXIRNf//ADwAAAT2BRECNgKhAAABFgKY2AAAEUAMAbAewB4CAB4YEAglK101AP//ABwAAAOcBRECNgKiAAABFwKY/uIAAAAYQBABLyIBAQAiECICACIcEAwlK101AF01//8AFAAABKEE8gI2AqMAAAEWApilAAAQQAsBDgAOEA4gDrAOBF0RNf//AJcAAATpBRECNgKkAAABFwKYAKMAAAAgQBgCACEQIQICECFAIXAhgCGQIQUAIRsYCyUrXTUAXTX////+AAABoAURADYCpQAAARcCmP4rAAAAGEARAAAPHYAdAh1ACQw3AEAJDDcrK10RNf////4AAAK3BS8ANgKmTgABFwKY/isAAAAcQBQPID8gAiBACQ83AAXABQEFQAkMNytdETUrXf//AJX/4QUXBRECNgKoAAABFwKYAL4AAAAKtgEAMSsMFSUrNf////4CYwGgBREANgKpAAABFwKY/isAxwA3QCkBDxYgFjAWAwAWEBZfFm8W/xYFARbgFgEAAA8dgB0CHUAJDDcAQAkMNysrXRE1XRE1AF1xNQD//wAV/mQEZwURAjYCqgAAARYCmMAAAAq2AQAdFwAOJSs1//8APf/nBHsFEQI2AqsAAAEWApjAAAAKtgEAKiQIACUrNf//AEj/4QR0BooCNgKsAAABFgKY3kYAHEAUAV8kAQEAJBAkQCRwJAQAJB4aFSUrXTUAXTX//wBWAAAE6QURAjYCrgAAARcCmADQAAAAFkAOAQApAQEAKQEAKSMaDiUrXTUAXTX//wAyAAACpAURAjYCsAAAARcCmP7YAAAAFEAPARkAGRAZIBlwGa8Z4BkGXRE1//8AFP/hBVsE8gI2ArEAAAEXApgA+gAAAAq2AgAwKgENJSs1//8Aaf5kBLsFEQI2ArMAAAEXApgBFQAAABxAFAEQKzArQCtwKwQBACsBACslEgAlK101AF01//8Aaf/nBLsFEQI2ArQAAAEXApgBFQAAABxAFAEQOzA7QDtwOwQBADsBADs1EgAlK101AF01//8ARgAABGkE8gI2ArYAAAEXApj+q/9EACO0ASApASm4/8BACQwQNwEpACkBKbj/wLILEDcrXRE1ACtxNQD//wCX/mQE5wTyAjYCtwAAARYCmHRGAA9ACgIgJgEAJiAfESUrXTUA//8AHgAAA/0FEQI2ArgAAAEWApioAAAKtgEAHRcNAiUrNf//AJcAAAZJBPICNgK5AAABFwKWAbn8zAAlQBsBTyYBQCZQJgIBJhAmATAmQCZQJoAmsCb/JgZdcRE1AF1xNQD//wAe/+wFGwURAjYCugAAARcCmADmAAAACrYBADIsFgwlKzX//wAUAAABoAXUAjYCpQAAARcCnf8oAAAACrYBABYQAg8lKzX//wA8AAAE9gXqAjYCoQAAARYCm+AAAAq2AQAYGw0LJSs1//8APf/nBHsF6gI2AqsAAAEWApsAAAAKtgEAFBUMESUrNf//AGn/5wS7BeoCNgK0AAABFgKbKAAACrYBADY3GR4lKzUAAQApAAAE8waKABsAnkBUKQ6GAAIMCAwQNwMBIgk2CjkNdRUFCgELAAsNFhcXDAwACwDRFwwUFxcMFg0MAAEKBhcLBdIG3R0dQAkQNxcwCRA3FxvSGBHSkBKgEgISDRYLETcBuP/WQBMLETcZyAEGCgsMDRYHEhfaAMoSAC8/7RIXOT8rKwEvXe3W7TIrKxD27cYRFzmHLiuHfcQBhxDAwIcQwMAxMABdAStdAQE2NjU1MxUUAgcBIwEGBhURIxE0EjcDIxEzEQF9AZqcf624tgGC4f4SYmqtipLyrK0E8v22RM2ui4vX/uVO/dkCwj3Fof7hAR+1AQ5lAVkB6v5oAAH/3P7tACQFCQADAA20AwIBnAIv7QAvLzEwExEjESRIBQn55AYcAAAB/yX+7QDbBYUADgAvQBGLCosMAggJDQ4CBQNAGh43A7j/wEAJEhU3AwcBAJwBL+0ALy/EKysXOTEwAV0TIxEHJzcnNxc3FwcXByckSIYxq6sxqqoxq6sxhv7tBW2IMamoMaurMaipMYgAAf/c/u0BrgWFAAoAJ0AWAQOdCAoGAB4JCzcJkAKgAgICAAWcBi/t1M1dMisALy/d/c0xMAEHJzchESMRISc3Aa7ZMYn+9kcBUYkxBK7WMYL6YgXlgjEAAAH+Uf7tACMFhQAKADRADgcHFgciBwMFA50JBwEEuP/iQA4JCzcInwSvBAIEBgCcAS/91M1dMisALy/d/c0xMAFdEyMRIRcHJzcXByEjR/72iTHZ2TGJAVH+7QWegjHW1zGCAAABAPYAAAHjAicAEABFQBgHQBUVNwe8BkAWFjcGQAkJNwYGDVUQCAa4ASxACw8NDQ9ACRA3Dy0QuP/Asw0QNxAvK+0rOS8Q5AA/7TIvKyvtKzEwNzQ2NzY2NxUGBgcGBhUzFSP2SC4nRggHHBYUJXTt22N/KCIdA4kCCxMRTDrnAAIA9AAAAeEErAADABQAVEAgC0AVFTcLvApAFhY3CkAJCTcKChFVFBQDVQEIAxMCFAq4ASxACxMRERNACRA3Ey0UuP/Asw0QNxQvK+0rOS8Q5BA8EDwAP+0yL+0yLysr7SsxMCEjETMDNDY3NjY3FQYGBwYGFTMVIwHh7e3tSC4nRggHHBYUJXTtAR0CQ2N/KCIdA4kCCxMRTDrnAAIAVAAAA3cF7wAcACAAq7dICQFoBgECF7j/2EAOEBA3ExQNDTcTFAsLNw24/86zERE3Dbj/xLUNDTcNDQ+4/8BAChERNw8PH1UeCBy4/+KzGB03HLj/4kAVDRA3HABAEhI3AEALCzcAAAQ0GQIcuP/AQBUNDTccHCAgHx8OKg9ADA03Dw8HKxa4/8CzDQ03Fi8r7TMvK+0zLzIvMi8rAD/tMi8rKzMrKz/tMi8rMy8rKzEwACsrK19dXQEjJiYjIgYVFBYXFhYXESM1JiYnJiY1NDYzMhYXAyM1MwN3CzexZHKOPDYqlTizTIk2NkHszVvMQ+XMzATdJENvcU15MyhgIv7P5C5iOjqZYqvRKxv6V9MAAAEAagAGArgDBAAYAIK5ABX/wEAiDxA3AQgNDjcAGAkONxcDAgMEAhgAAhgC5wEAFAEBABgQAbj/8EAmDQ0RrwgJAQAJABgCAxcYCQUBCAYYCQs3FwMMDAAAGAECGAIUKgYv7TMzLzwvPBEzLzIyKwA/FzMvMy9fXe0yLzg4hy4rh33EBwgQPA48MTAAKysrJQU1NyYmNTQ2MzIWFxUjJiYjIgYVFBYXNwK4/eCbUHmzf1RnFg0YeipAVIR0sK6ouy8PiVWLnA4EuwcQPjM/Xw43AAH/ugAAAgwAvAADABdACgOvAAgDAwUCAgQRMy8RMy8AP+0xMCEhNSECDP2uAlK8AAIAAAVKAj0G1wADAAcATL0ABQE8AAYBPQAEATyyBwABugE8AAIBPbUACBkaNwC4ATxADgMJBAQHBwADBQECAgYFLzw8EDwQ1Dw8EDwQPAAv7Sv17RDe7fXtMTABBTUlEQU1JQI9/cMCPf3DAj0Gd2RkYP7XZGRgAAIAAAZxAmIIRgAnADMAf7kABv/otg4UNyW7Eii4//BAPxMaNygMLg0ADwYNuw4GG7scGLsfQAwNNx8uuwY1DgAoDwwECTGdKAMBVwMBAAMrnQ4JQAwPNwkSFZ0iJZ0bEi/O/dXtfBDUKxjE7dRfXXHtEhc5EDwAL+3UK+3V7RDU7RI5ORESOTkr1O0rMTABJiY1NDYzMhYVFAYHFxUnBgYHNjY1NCYjIgYHNTY2MzIWFRQGBzY2NzY2NTQmIyIGFRQWAYMzTl1PRGYlED9/XdFhAw8JExIsDAxIGSAtDAIqcYgUGy8dIy85BwwQUjpFWVtHIkkODFYcNTgHFM0WDRIDAWABBSUgLo0YBhlUES4jHSQhICIyAAACAAD+WAI9/+UAAwAHAFK9AAUBPAAGAT0ABAE8twdACQs3BwABugE8AAIBPbUACBkaNwC4ATxADgMJBAQHBwADAwECAgYFLzw8EDwzLzw8EDwQPAAv7Sv17RDeK+317TEwBQU1JREFNSUCPf3DAj39wwI9e2RkYP7XZGRgAAABAAAGOwI9BwAAAwApuwABATwAAgE9tQAIGRo3ALgBPLYDBQADAwIBLzwzLzw8AC/tK/XtMTABBTUlAj39wwI9BqBlZWAAAgAABnUB8AhGABUAIQBauQAO/+izDhQ3Frj/6EApFRo3FhQcFQgBDgAFuwQVuwAcuw4jFhkfCAEUAwsAGZxYEQEAER+cCwQv3O3UX13t1BIXORESOTwAL+3U7dTtERI5ORESOTkrKzEwAScGBgc1NjY3JiY1NDYzMhYVFAYHFyc2NjU0JiMiBhUUFgHwf1uzY0uEQTNOXU9FZSQRQJQVGi8dIy45BskcNDYGWAUcHhBTOUVZWkgiSQ4MJRItIx0kISAiMwAAAQAA/qoCPf9vAAMAKbsAAQE8AAIBPbUACBkaNwC4ATy2AwUAAwMCAS88My88PAAv7Sv17TEwBQU1JQI9/cMCPfJkZGEAAAEAMQaNApcH8AAqAHdAPyoYDBQ3BRgMFDcCGAoQNwIXKhO7BUAWGDcFHLtwKgEqJAtAFhg3CxgkLCcNDRAhIR+cJ0AMDjcnJxYCAhmcFrj/wLcUFDcWFhCcCC/tMy8r7TkZLxEzGC8r7TIvETMvEMYAL9TEKxDUXe3UK+0REjkrKysxMAAmJwYGIyImNTQ2NzMVBgYVFBYzMjY1NTMVFBYzMjY1NCYnNTMWFhUUBiMBukENCVE7TFoDAWABBSUjKzNeLSMpLQUBXgEFY1EGvCMZJkVYUBs9DQcLOBkkKExMRjw5OTc5IjAMBwoqM2JrAAIAAAY7AXkHtAALABcAO0AND50JQAwNNwkJFZ0DALj/7EAVDBI3BhQMEjcZDJwAQAwNNwAAEpwGL+0zLyvtPCsrAC/tMy8r7TEwARQGIyImNTQ2MzIWBzQmIyIGFRQWMzI2AXlwTU5ub01Ob1w4KSg4OiYnOgb4T25vTk1vbk8oODgoJjg4AAABAVABlgNOA5MAAwBasgMDALgBLEALAiAOEDcCAgEAAAG4ASxAFwMgEBA3AyAYGDcDICAgNwMgKCg3AwMCuP/AsxASNwK4/8CzCgs3Ai8rKzMZLysrKysY5TIvAC8yGS8rGOUzLzEwAQcBNwNO/P7+/gKT/QEC+wABATsAAALnBWAACwBUuQAH//BAIBYaNwQIGRo3BwkJ5wQGFAQEBgkEBgEIBwbjCQsH6AQGuP/wQAoGC+gHAhcCAgACL19d7d44Oe0ROQA/PD8SOTmHDi4rBX0QxAErKzEwISMRNCYnAzMTFhYVAuelJjWsuao4EQHhw7R5AY/+fYKxyQABAEIAAAQrBWAAGQCCQA0HBgbnERAUEQYEERAQuP/iswkJNxC4/+JAEwsLNwgQDAgGA68VFQAaChA3ABm4ASyyEeMAuP/Asw0NNwC4/8BAFBAQNwAAC+gMQAwMNwwSEAcGDAURuP/AsxAQNxEvKxczLyvtMy8rKwA/5DIrMy/tMj8zMysrhwguKw59EMQxMAEGBiMiJicXFhYVESMRNCYnATMWFjMyNjczBCtS1YVCfB1mQTymTUT+8qwt43+P1j8KBIcyNBwJs3Hbm/5UAayU0HcB2SZhVS4AAAEAJQAABHMFYAAiAIFAIAYeDxA3AhQJDjcKCQnnFBMUFBQTChMPCAYYrwkfrwkDuP/AQBMJCTcDAyIbFOMGBhytGxsUIigAuP/AQBQMDjcAAA7oD0AMDDcPFRMJCg8FFC8XMy8r7TMvK+0ROS/tORkvABg/PDwzLys87RDtMj8zM4cFLisOfRDEMTAAKysBBgYjIiYnBgYjFxYWFREjETQmJwEzFhYzMjY3MxYWMzI2NwRzEIRsNXIiJ4NiUEI6pU5E/vKuH3NFT2sNbg9TLi5HCgVgjbI4PDc9jnTVnv5UAayU0HcB2TBVVDEzUkk8AAEAkwAABDEFbwAwAJ1ANxsUDxA3KAgpBwQwDiIhDxIeBgweCgo3DB4RETcMDBkvrwEIGr8ZEBnjUR4BBVceAQIMEAkNNyW4//ZACRERNxIKERE3Hrj/7LcLDTcaGBsDGbj/wEAYDQ03EhQQEDcZGTAwBCUqDAweKxISLCsEL+0zL+0zL+0RMy8zLysrFzMrKysrX11fXQA/OO0/7RI5LysrFzkSFzkxMAArISEiJjU0NjclNjY1NCYnJyYmNTQ2NzY2NyUVBQYGFRQWFxcWFhUUBgcHBgYVFBYzIQQx/TNWezc0AQALEBYVjjdMKSombTsBaP67QTIsFo0lKywy5BIVGCICk2ZCO2Ez9gwWERAbEnswWj0zTR4bJhBhpFQRIB0bLRJ5H1IrNV0w3RIhDRESAAIASP/2BEoETgARAB0Ab7YHGwEIBgEbuP/2QAkODzcVCgwPNw+4//ZAGAoKNxWvDw8brwYJdwOHAwJ4CYgJAhIqA7j/wLMJCTcDuP/Asw0NNwO4/8C3Dw83AwMYKgm4/8CzDg43CS8r7TMvKysr7V1dAD/tMy/tKysrXXExMAEWFhUUBCMiJDU0Njc2NjMyFhM0AiMiAhUUFjMyNgOkSV3+8PLw/vBYR0a9Xlu4SfVnaPKitq+vA2Bm9m7D3cvSb/ZoZYmI/dCqAVH+qaR6amsAAAEAXAAABDkFZAAYAHNAJAIBAecAGBQAABgYAgEIDCgQEDcMFA4PNwwNCa8RFAkNNxERFLgBLEALDeMBAhgDAAAV6AW4/8CzERE3Bbj/wLUUFDcFBQy4/8CzCw43DC8rMy8rK+0yLxczAD/mMy8r7REzKys/MzOHBS4rDn0QxDEwISMDJiY1NQYGIyIkJzUzFhYzMjY3ERQWFwQ5rFwcFx5wSXb+9EkKQviJaclJGRoBi3rUiegOFzgu1S9UST79/onTagABAC0AAARoBWAABgBdQAsGAQAB5wUGFAUFBrj/wEAn5xERNgQCAwLnBQQUBQUEQOcRETYFAQIIAAYEA+MGAAIBAAMFBQQDLzMzGS8XMxgvMgA/PDw8PzwzK4cFLiuHfcQrhy4YK4d9xDEwAQEjATMBAQRo/jam/jWmAXcBeQVg+qAFYPuuBFIAAQArAAAEZgVgAAYAW7j/wEAy5xERNgEGAAbnAgEUAgIBQOcRETYDBQQF5wIDFAICAwABAwQIAgYF4wEABQYAAwICAwQvMzMZLxczGC8yAD88Mz88PDyHBS4rh33EK4cuGCuHfcQrMTAhIwEBIwEzBGal/on+h6YBy6YEUvuuBWAAAAIAewAABDkFYAAcACkAmUAYI0APEDcCFAoKN5gBAQIBAecAHBQAABwnuP/mQA0PEDchGg8QNwYdJ68JuP/AQBcRETcJCRIcAgABCCGvEuMBAhwDAAAYBrgBLLIe6Bi4/8CzDg43GLj/wLcMDDcYGCToDLj/wLMKCzcMLyvtMy8rK/3lETMvFzMAP+0/PDMzEjkvK+0yMisrhwUuKw59EMQxMAEBXSsAKyEjAyYmNTUGBiMiJjU0Njc2NjMyFhcWFhURFBYXAzU0JiMiBhUUFjMyNgQ5rFwfFCyNVZfeQzo4mVBLjzc4QhYd24hZbYt3VEyWASFfpH4MNzzSo2WjOTY5NzI0i1v+05KRXAIxYV6DhGpSbDkAAwBKAAAEUAVmAAMABwALARNAFwoLCzkICRQICAkHQBYWNwdAISE3BwcEuAEsQAkGBgUICwgFCAG4/8C1Cws3AQEAugEsAAL/wLMLCzcCuP/AsxYWNwK4/8C1ISE3AgIDuAEsswoJ4wa4/8CzQ0M3Brj/wLMLCzcGuP/AtSEhNwYGBboBLAAH/8CzISE3B7j/wLMWFjcHuP/AQBULCzcHBwQECQBACws3AEAhITcAAAG4ASxAHgNAQ0M3A0AWFjcDQAsLNwNAISE3AwMCCgkLCQIDCLj/wLMOEDcILysXMy8zLzMZLysrKysY5TMvKysRMy8zGS8rKysY5TMvKysrAD885jIZLysrKxjlMy8rPz88ETMZLxjlMi8rK4cFLit9EMQxMAEHJzcBByc3AQEzAQHBtbq2A0i0u7f8sgN7hfyFBJW2u7T7ebe7tP6BBWb6mgABAO7+vAHbAOMAEAAzsgedBrj/wEAKCQk3BgYPVQ4IBrgBLEALDg0NAEAJEDcALQ4v7Ss5LxDmAD/tMy8r7TEwJRQGBwYGBzU2Njc2NjUjNTMB20guJ0YIBxwWFCV07QhjfygiHQOJAgsTEUw65wAAAQA/AKgEIQSYABcA50AYBgkIDRUSEwwDDwAEDg1HCAEXCAEICgQLuAE+QA0gBYgKAWgKyAoCCgINuAE/tQ5AExEXELgBPkAYFggRAREBDgMAARQMDw4SCRUGBBQTARcFvAEsABYBPgAEASxACggX2BcCFxQOEAq9ASwAEQE+ACAACwEsQAkHEAEJABATBxS4AT+1QAgTGBkTuAE/sTI6KwEQPBoYTf08ENRfXl3kGhn9GOQQxhDUXeQZ/RjkEMYREhc5Ejk5ERI5OQAvPNRdPBn9PBgQxhoQ/TzUXXE8Ghn9PBgQxl1xERIXORE5ORESOTkxMAElFSUBBwETIxMBJwEFNQUnNxcDMwM3FwK2AWv+nQENWP71B30E/vZZARP+mQFl+lj0BH0H9FgC2QR7Av78WAET/o0Bc/7tWAEGBHsE9lr4AWf+lfxaAAAC/7oAAALuBF4AIAAvAH+1KR4QEDceuP/2sw4QNw+4/+JADQwNNyESLa8VFQknrx64AS1AEQuvCggbEgkKNyrSG0ARETcbuAEusyES0gO4/8CzCgo3A7j/wLMMDTcDuP/Asw8PNwO4/8C1FBQ3AwMLLzMvKysrK+0y9CvtKwA/7T/tEjkv7TMyKysxMAArARYWFRQGBwYGIyM1MzI2NzY2NQYGIyImJyYmNTQ2MzIWAzQmJyYmIyIGFRQWMzI2Ans1Pm1UVMph9PZEkDlARRpcJlmJMC4txXlJiBMYGRpBJkBeblskRwPGTuaUf8Q9Pz+8JCMnaUAPGjIvLXE+j+hO/n0cXTAyOmxIO00VAAAB/7oAAALPAiMAFABlQBd0EQEEHhAQNwQJDg4UCa8BCAgEBBDSDbj/wLMLDDcNuP/AsxIVNw24/8CzGRs3Dbj/wEAPICA3AA0BDQ0JFBQWCQkVETMvETMvETMvXSsrKyvtORkvABg/wP3AMy8RMysxMF0hIyImJwYGIyM1MzI2NTUzFRQWMzMCz3U+lSEjjEK7jlpwqHFcSEI5O0C8fHJ5eWyCAAIAXP/0A2gDywAPACAA4ECDBQgBBQgBBQ0BA1cNAQI3DUcNAnUKAQMXCgsLFRULC9IMDRQMDA1nHgEIA3gDAgIKFwEDFxUNA5cKpwoCALUKAQI3CkcKAgFVCmUKhQoDAwoKDAsLHq+XAwEDCDgGAQKYDbgNAg0YDA43DQAMmBcBARUXCgMLE9IAIgzSlwsBADcLAQu4//CzCxvSBrj/wLMLDTcGLyvt1DhdX13tEN7tERc5X10REjkrXV9dAD9d7TMvPDMvX11fXV9dX10XM19xX11dhwUuKw59EMQHEAU8PABfXV1fXTEwAV9dAF1xARQGIyImNTQ2NzcnMxMWFgM2NjU0JicnBwYGFRQWMzI2A2jbtKHcdJBEh+nuNT/vIihtOxVDVWyBVihaAZPD3OuydqxXKZj+8zuT/vYeTkE5pEIXKTN/W1mKHAAAAQEQA6gBzwVgABAAO0AkxwcBB7xABoAOVUAPDQ0QBhAtDoAHDkcOVw5nDgQAERIOLTI6K19dGhDtxhI5LwAvGv0a3hrtXTEwARQGBwYGBzU2Njc2NjUjNTMBzzwiJjEICBoNExtfvwSyUGkcHxQCbwEMCxEwOLgAAQBCAAAEKwWLAC4AkUAfCw0N5xQWFBQUFhQLDQMWEQgFrwQIrxsWAAAWJLslKbj/wEAZGBo3KbshFskeGAkRNy4bLK0eJAUFD+gSF7j/8LMNEDcXuP/wQBUJCzdYFAEDFxQBAgcUARcUCw0SBRYvFzNdX11fXSsrL+0yL9Tc7TMzKwA/3P0r1O0RMy8SOe3U7T8SFzmHDi4rfRDEMTABMjY3MxUGBiMiJicXFhYVESMRNCYnATMXFhYXJiY1NDYzMhYXFSMmJiMiBhUUFgNIP3MnChyiUkjNKy9HNqZNRP7ysggy4IgmLn1uPmgOBhplMTk6UgRKGBfBCxwwHk532Jb+VAGslNB3AdkOWJ0TEUYkVnAaBH8LHjYlMUEAAAIASAAABEoFaAAXADIAZ0BBNxJHEgIDeB4BAh6vVxIBAxIGJysrJzCvAwMnrwkIOAwBNwABaBgBGCoALGckAQIkKhgMKAwCDAYsrSszNCutMjorEO053F3tX10Q3O1dXV0AP+08EO0RMy8RMy9fXe1fXV9dMTABFAYjIiYnBgYjIiY1NBI3NjYzMhYXFhIHNAInJiYjIgYHBgIVFBYzMjY3NzMXFhYzMjYESomIToEgI35Rh4ljTEm7TU+3S0xlpkw2OXMuLnQ4NkpLPjxOCQprCAhKQjtOAZPJykU6O0TKyZYBWZSNxcOPkf6nlnABG3R7nJx7df7mcHRqNR8hISEzZAAAAQDdAAADtAVqACEAhUBQD0AKDjdnIQF4EAEACg8BAggTAQAAIQ0MDQ8MAQIDA+cMARQMDAECAA0DDAUBAQgUGBgcrxTJCAgXeAwBARgMARcCAA0MAwYBHyoRAREHKgkv7TMzL+0vFzNdX10vAD8/7TIvERI5Lxczhw4uKwR9EMQHCBA8CDwxMAFdX10AX11dACsBNxUHBgYVFSM1NBI3NycmJjU0NjMyFhcVIyYmIyIGFRQWAxmb+LiBpn+UmSWAhsiSTWwYDBJuPFdmnAM5cai2h+bTDA7TARJtcQokmW6XzQ0FugURZkhMYgABAO0AAAGBAJQAAwAWuQACATCyAQUAuQEvAAEv/cYAL+0xMCEjNTMBgZSUlAAAAgBnAAACBwCUAAMABwAksQYCuAEwswUBCQS4AS+yBQUAuQEvAAEv7TIv/cYALzz9PDEwMyM1MwUjNTP7lJQBDJSUlJSUAAMAWQAAAhUBZQADAAcACwBKuwAKATAACf/AtQkLNwkGArgBMLQFAQ0ECLgBL7MJCQAEugEvAAX/wLUVFjcFBQC5AS8AAS/tMi8r7REzL+0QxgAvwP3A3ivtMTAzIzUzBSM1MycjNTPtlJQBKJSUlJSUlJSUPZQAAAMAWf6bAhUAAAADAAcACwBMuwAJATAACv/Atg4QNwoKBQG4ATC0BgINBAi4AS+zCQkABLoBLwAF/8C1FRY3BQUAuQEvAAEv7TIvK+0RMy/tEMYALzz9PDIvK+0xMBcjNTMFIzUzAyM1M+2UlAEolJSUlJSUlJSU/puUAAAB/7oAAAG4As0ACwA7QAyWAgF1CAEJARkBAgq4ATG2Ba8DCArSC7j/wLMQEDcLuP/AtQwMNwsLBS8zLysr7QA/7T8xMF1dAV0BFAYjIzUzMjY1NTMBuMqxg4hmaqYBxdXwvJKD/AADAAIFUAJoCEQAKgAuADIArkArKhgMFDcFGAwUNwIYDxc3AioXE7sFQBYYNwUcu3AqASokC0AWGDcLGCQvMLwBPAAxAT0ALwE8sjIrLLoBPAAtAT21KwgZGjcruAE8QCUuNCcvMisuJzAxLC0IAggJCzcCJxYknSMfnScZnRYIC50MEJ0IL/3U7RDU/dT91O0REjkrENTA0MAQ1MDQwBDGAC/tK/XtEN7t9e0Q3tTEKxDUXe3UK+0REjkrKysxMAAmJwYGIyImNTQ2NzMVBgYVFBYzMjY1NTMVFBYzMjY1NCYnNTMWFhUUBiMTBTUlEQU1JQGLQQ0JUTtMWgMBYAEFJSMrM14tIyktBQFeAQVjUaL9wwI9/cMCPQV/IxkmRVhQGz0NBws4GSQoTExGPDk5NzkiMAwHCiozYmsCZGRkYf7XZWVgAAIBAAAABwAGAAADAAcAACERIRElIREhAQAGAPqABQD7AAYA+gCABQAA////ugAABAgFYwI2AxkAAAEXAw8AtgP+AB9AEgQDAgA3OhMZJQQDAg83LzcCNwAuXTU1NQErNTU1AAACAQAAAAcABgAAAwAHAAAhESERJSERIQEABgD6gAUA+wAGAPoAgAUAAP//AFwAAAc/BWUCNgMeAAABFwMPA/oEAAAZQA0EAwIAR0ojKSUEAwJHAC81NTUBKzU1NQD///+6AAAC7gZmAjYDBgAAARcDDwARBQEAGUANBAMCADE0GxIlBAMCMQAuNTU1ASs1NTUAAAEAWALNAagEMQAYAGJADhVAFRk3BBgVGTcYArsBuP/AQBELDjcBCQy7DRG7CQYYChQ3Abj/wEAaCxQ3DAgAAQAAARYUnANAJSc3A0AVGjcDBgEv1DIrK+0yEN1fXcQrKwAv/dTtENQr/TwxMAArKwEhNTMmJjU0NjMyFhcVIyYmIyIGFRQWMzMBqP6wShgfXlA1MwoGDkMZLCxcP0oCzV4NOh9AYAwEZQYRJB4tOQAAAv+6AAAECANCACMANQDWs2UvARa4//BAEQkKNwQoDBA3BA0fMwQJKq8WuAEytiIJrwEHCB+4/9hADhAQNw0oEBA3ExgQEDcZuP/oQC8QEDcNBB8zBBMn0hlAEhI3GUAQEDcZQBgYNxlAGho3GUAkJDcZQCsrNxkZIy3SE7j/wLMQEDcTuP/AsxISNxO4/8CzGBg3E7j/wLMaGjcTuP/AsyQkNxO4/8BADCsrNxMTCSMjNwkJNhEzLxEzLxEzLysrKysrK+0RMy8rKysrKyvtEhc5KysrKwA/wP3AP+0RFzMrKzEwXSEjIiYnBgYjIzUzMjY3JiYnJiY1NDYzMhYVFAYHBgYHFhYzMyU2NjU0JiMiBhUUFhcWFhc2NgQIpF+6S1OjcODkTmMLBy4fIDS3kYrCMSAfKggSczeo/kciL1xKRV01HiEqCAkrNSUnM7wXAgQdISFkP5nOzJk/aCEhHQQHEJodOy1AaGVDJkUZGxkEBRkAAf/8BosCCAcpABMAaLQ4AgECDbj/8rMJFTcKuP/oQAoJETcAuzgTAQETuAEsQAkNuwYQuwMKuwO4ASy2CQkUCRk3E7j/7EATCRk3CRMBGBMoEzgTSBMEABMTCi8zL19dXSsrAC/m7RDt3P30X13tKysxMF9dAQYGIyImIyIGBzU2NjMyFjMyNjcCCBNNMyeZJiFcFhFbJyOdJitbDQbDDyc+Mg5lDis9LgsAAAH/ugAABAAAvAADABdACgKvAQgDAwUCAgQRMy8RMy8AP+0xMCEhNSEEAPu6BEa8AAEAXAAAB38CvAArAGW1HR4QEDcXuP/isxAQNxa4/+JADAoNN3YVAX8EASMjDrgBNEAcBBmvCCqvAQgIBAQnIyMf0icnKystDtIPDxPSCy/tMi/tETMvMy/tMi8RORkvABg/0O0Q7TI/My9dMTBdASsrKyEjIiYnBgYjISAANTQ2NzMVBgYVFBYXFhYzMjIzMjY1NCYnNTMWFhUUFjMzB391PpQhKp5u/lj+kP6TEQSsBBc7Q0nelJHAKIyDCwKqAwdoZUhCOTpBAQTySWoTCg95KEV4KzAudngbQg0PEl8QYIYAAAIBAAAABwAGAAADAAcAACERIRElIREhAQAGAPqABQD7AAYA+gCABQAAAAIAXAAABz8DQgAzAEUAt7N5IQEXuP/YsxAQNya4//BADQkKNwQoDBA3cyYBBEO4/+hAEQ4PN0MdOhkEGAsMNy8EJggOuAExszIZrwi4//RACQwNNwEICDqvJrgBMkAUdC4Bfx0BHRgMDTcdBEMuBCk90iO4/8BADRAQNyMjN9IpKTMzRxO4/+xACgoNNw7SDw8T0gsv7TIv7SsRMy8zL+0zLyvtEhc5K11dAD/tP8Ar/cA/ERI5OSsREjk5K19dKysxMAErXSEjIiYnBgYjIyAANTQ2NzMVBgYVFBYXFhYzMzI2NyYmJyYmNTQ2MzIWFRQGBwYGBxYWMzMlNjY1NCYjIgYVFBYXFhYXNjYHP6NfukxTo3Cc/pP+lBABowIMOUNI3ZKgTmENCC0fIDS2kozAMSAfLQURakKn/kciL1xKQ181HiErBwYuNSUnMwEE8lxkBgoKbjhHdSwwLhYDBRwhIWQ/mM/Olz9oISEeAwYRmh07LUBoY0UmRRkbGQQDGwD//wBc/lkGGQKwAjYDJQAAARcDEAH8/74AK0AcAwIBACQpDhQlAwIBJEAyMzckQBUYNyRAEBE3JAAuKysrNTU1ASs1NTUA//8AXP5ZB38CvAI2AxwAAAEXAxACfv++ACtAHAMCAQAuMwsnJQMCAS5AMjM3LkAVGDcuQBARNy4ALisrKzU1NQErNTU1AP///7r+WQG4As0CNgMRAAABFgMQkL4AK0AcAwIBAA4TBQslAwIBDkAyMzcOQBUYNw5AEBE3DgAuKysrNTU1ASs1NTUA////uv5ZAs8CIwI2AwcAAAEWAxAAvgArQBwDAgEAFxwJEyUDAgEXQDIzNxdAFRg3F0AQETcXAC4rKys1NTUBKzU1NQD//wBc//QGoAZnAjYDJgAAARcDDwOKBQIAGUANBAMCADc6IRolBAMCLAAuNTU1ASs1NTUAAAIAXP5YBx0CxwApADUAnbkAFv/2sxAQNzW4/+xAHw4QN0AaATUURRQCJRU1FUUVA0QEAUQCAXYmAXQWASW4//a1Dg83MK8luAExQBstKBsorwEIDQ0YrwcNIhQJCjd3MwEzKiIiKBu4ASyyLdIBuAEsQAwoKCkpNw3oDg4S0gov7TIv7REzLzMv5f3lETMv7V0rAD/tMy8/7cAQwD/tKzEwAV1dAF1dXV1dKyshIwYGBwYEIyAANTQ2NzMVBgYVFBYXFhYzICQ3IyImJyYmNTQ2MzISFzMlFhYzJiYjIgYVFBYHHX0ShnJw/tTB/pD+kw8CowMLO0NJ3pQBbQE2FDpRpUJCUsV4ks4Phf37NW0vDmc/SFVMhKcvLSEBBPJkXwoLEnIyRXgrMC5vfSEnJ4Fgkeb+094ZDwqcsnBEND4AAQBc//QGGQKwACEAVrkAHv/sQAoNDTcCFA0NNwkWugE0ACH/7EAOCw03Ia8QCArSCQkF0g24/8BADwkLNw0NIxbSFxcb0hMTIhEzL+0yL+0RMy8r7TIv7QA/7Ss/wDEwASsrJDY3NjY1NCYnNTMWFhUUACEgADU0NjczFQYGFRQWFxYWMwPQ3ElEOhYFrAUQ/pX+i/6Q/pMQBawFFjlFSd6UsC4wLXRHH3caCiFvN/L+/QEE8TdvIQoadx9HdSwwLgACAFz/9AagBFgAJgA1AHW5ACX/4kAODhA3GFAMDTcYUBAQNxS4/+JACgsNNzOvHh4tryS6AS0ADQEzQAwXrwYIIRgJCjcw0iG4AS61ACcnG9IAuP/AQA0JDDcAADcM0g0NEdIJL+0yL+0RMy8r7TIvEPTtKwA/7T8/7TMv7TEwASsrKysBFAYHBgQjIAA1NDY3MxUGBhUUFhcWFjMgJDU1BgYjIiY1NDYzMhIHNCYnJiYjIgYVFBYzMjYGoIZ0cf7Fwf6Q/pMQAaMFCTlFSd6UAVwBXRJgKqjExHmpzrkYGRpBJklUa10mTAHTjrs1My4BBPFPdggKH24pR3UsMC6FjAwLHrOKkOf+o3QcXTAyOnRBO0wY//8AUP5YBGADvgI2A6EAAAEXAxABjgETACNAFgMCAQAoLQcAJQMCAR8oLyhAKI8oBCgALl01NTUBKzU1NQD//wBQ/lgFmgO+AjYDogAAARcDEAFeARgAH0ASBQQDADtACwQlBQQDQDuPOwI7AC5dNTU1ASs1NTUA////uv6bBQADLwI2A6MAAAEXAxACfAAAABlADQMCAQAWGxATJQMCARYALjU1NQErNTU1AP///7r+WQVxAy8CNgOkAAABFwMQATL/vgArQBwEAwIAIygFGyUEAwIjQDIzNyNAFRg3I0AQETcjAC4rKys1NTUBKzU1NQD///+T/lgCkwRfAjYDrQAAARcDDwBsAvoAJUAXAwIBMBUBABUaERIlAwIBDxYvFj8WAxYALl01NTUBK101NTUA////k/5YA1YEXwI2A64AAAEXAw8AUwL6ACFAFAUEAwAjKBgZJQUEAw8kLyQ/JAMkAC5dNTU1ASs1NTUAAAEAXAAABuwF+gAyAMpAGw8QFRY3FQUIBdIYFRQYGBUQDw/SDg0UDg4NMrj/6EAdCw03CCEYIQIYFRADDyEHDXcNAg0FCAMyD68OEA66AToAJwEztDKvIQgYuP/wQDMVFjcXGAECRxgBNxiXGAIYFRoTFwgBAwUIAxANDhPSCgokDw4D0ho0JtLIKAEAKCzSJDMQ1v3UX3HtEN7t1DwSOS/tEjk5Ejk5X10REjk5XXFfXSsAP+0/PzjtEhc5XRESFzldK4cuKw59EMSHDi4YK4cOfcQAKzEwJTI2NTQmJyUmJjU0NjcBFQEGBhUUFhcFFhYVFAYHBgYjISAANTQ2NzMVBgYVFBYXFhYzBP56ZVN4/u4uRVGMAoL90CBQVCcBCmBSLi0zlWD+M/6S/pcTAqwGFTlEQ8+ivFlBLXdi4SdRMD1fRAE1xf70Dy0QEkcg20+VTUWCLDIzAQTyTmsNChZyKEd1LC0xAAIAXAAAB74F+gA7ADwA4EAhKRAVFjcvHyIf0jIvFDIyLyopKdIoJxQoKCcEKDuvAAgZuP/oQCMLDTdJMlkyAhYyASovMgMIKQYndicCeSIBJyIfAxkprygQKLoBOgAOATNADRmvCAgEHQA+HyIdJDK4//BAKhUWN5cyATIvNC0qJygt0iQkCzQpKEAKCzcoBAsd0jQ8DtLPDwEPE9ILPRDW/dRx7S/c7RI51CvAERI5L+0SOTkREjk5XSsREjk5EMAROQA/7T8/OO0SFzldXRESFzldXSsQ0O0SOYcuKw59EMSHDi4YK4cOfcQAKzEwISMiJicGBiMhIAA1NDY3MxUGBhUUFhcWFjMhMjY1NCYnJSYmNTQ2NwEVAQYGFRQWFwUWFhUUFBUUFjMzBwe+dk+WMjOXZf4x/pL+lxMCrAYVOURDz6IBzXFubXL+7i9EanMCgf3RIFFLMAEKbVprVHpaOTQ4NQEE8k5rDQoWcihHdSwtMVNHK31e4SdRMEBpNwE1xf70Dy0QEEIn21mLTQMHBEFNvAAB/7oAAANeBfoAIgCtQDwAEBUWNwEAANIiIRQiIiEGGRwZ0gkGFAkJBkkJWQkCFgk2CQIJBgEDABIGIXYhAnkcASEcGQMTAK8iECK4ATpACROvEggZHBceCbj/8EAeFRY3RwkBlwkBCQYLBAEhHgAiF9ILJATSPx4BHhIjEMXQXe0Q3u3UwBI5ORESOTldcSsREjk5AD/tPzjtEhc5XV0REhc5XV2HDi4rhw59xIcELhgrDn0QxAArMTABAQYGFRQWFwUWFhUUBgcGBiMhNSEyNjU0JiclJiY1NDY3AQNe/dEgUUswAQtgUi4tM5Vg/kcBt29wU3j+7i9EcWwCgQU1/vQPLRAQQifbT5VNRYIsMjO8UUktd2LhJ1EwRmY0ATUAAAL/ugAABEIF+gApACoA0kBCGRAVFjcaGRnSGBcUGBgXDx8iH9ISDxQSEg8EGCmvAAhJIlkiAhYiNiICGh8iAwgZBhd2FwJ5EgEXEg8DCRmvGBAYuAE6QA0JrwgIBA0ALA8SDRQiuP/wQCwVFjdHIgGXIgEiHyQdGhcUGR8YLxgCGAQIDdJQJOAk8CQDJCod0j8UARQIKxDF0F3tL9xd7RI51F3AEjk5ERI5OV1xKxESOTkQwBE5AD/tPzjtEhc5XV0REhc5XV0Q0O0SOYcOLiuHDn3EhwQuGCsOfRDEACsxMCEjIiYnBgYjITUhMjY1NCYnJSYmNTQ2NwEVAQYGFRQWFwUWFhUVFBYzMwcEQnVPljIzl2X+MwHLcG9sc/7uL0R7YgKB/dEgUUswAQtwVmtUeWs5NDg1vFFJK31e4SdRMElpLgE1xf70Dy0QEEIn212ITA5BTbwAAgBcAAAG7AbDADIANgEmQE4PEBUWNzU2NjkzNBQzMzQ2MwUzAXUzAQTnMwEDNTRYNGg0Agc0FzQCApc0AQM0MxgJEgY7Mw4ODRUFCAXSGBUUGBgVEA8P0g4NFA4ODTK4/+hAHQsNNwghGCECGBUQAw8hBw13DQINBQgDMg+vDhAOugE6ACcBM0ALMq8hCDQ1CjM2Dhi4//BAMxUWNxcYAQJHGAE3GJcYAhgVGhMXCAEDBQgDEA0OE9IKCiQPDgPSGjgm0sgoAQAoLNIkNxDW/dRfce0Q3u3UPBI5L+0SOTkSOTlfXRESOTldcV9dKxDWPBDUPAA/7T8/OO0SFzldERIXOV0rhy4rDn0QxIcOLhgrhw59xAcEEN4rPABfXV9dXREzX11fXXERM4cuGCt9EMQAKzEwJTI2NTQmJyUmJjU0NjcBFQEGBhUUFhcFFhYVFAYHBgYjISAANTQ2NzMVBgYVFBYXFhYzAQE1AQT+emVTeP7uLkVRjAKC/dAgUFQnAQpgUi4tM5Vg/jP+kv6XEwKsBhU5REPPogOS/NUDK7xZQS13YuEnUTA9X0QBNcX+9A8tEBJHINtPlU1FgiwyMwEE8k5rDQoWcihHdSwtMQWi/mtkAZYAAAMAXAAAB74GwwA7AD8AQAExQFEpEBUWNz4/Pzk8PRQ8PD0/PAI8AXI8AQXnPAE+PVk9aT0CBj0WPQKXPQE9PCAJFAY7PCgoJy8fIh/SMi8UMjIvKikp0ignFCgoJwQoO68ACBm4/+hAIAsNN0kyWTICKi8yAwgpBid2JwJ5IgEnIh8DGSmvKBAougE6AA4BM0ATGa8ICD0+JDw/KAQdAEIfIh0kMrj/8EAqFRY3lzIBMi80LSonKC3SJCQLNCkoQAoLNygECx3SNEAO0s8PAQ8T0gtBENb91HHtL9ztEjnUK8AREjkv7RI5ORESOTldKxESOTkQwBE5ENbAENTAAD/tPz847RIXOV1dERIXOV0rENDtEjmHLisOfRDEhw4uGCuHDn3EBwQQ3is8AF1dXREzXV9dcREzhy4YK30QxAArMTAhIyImJwYGIyEgADU0NjczFQYGFRQWFxYWMyEyNjU0JiclJiY1NDY3ARUBBgYVFBYXBRYWFRQUFRQWMzMDATUBEwe+dk+WMjOXZf4x/pL+lxMCrAYVOURDz6IBzW9wbXL+7i9Ebm8Cgf3RIFFLMAEKbVprVHr5/NUDK585NDg1AQTyTmsNChZyKEd1LC0xUUkrfV7hJ1EwRWY1ATXF/vQPLRAQQifbWYtNAwcEQU0Fov5rZAGW+T0AAv+6AAADXgbDACIAJgEEQG8AEBUWNyUmJjkjJBQjIyQmIwYjATYjZiN2IwPnIwElJFgkAQYkFiTWJAOXJAEkIyAJEgY7IyIiIQEAANIiIRQiIiEGGRwZ0gkGFAkJBkkJWQkCFgk2CQIJBgEDABIGIXYhAnkcASEcGQMTAK8iECK4ATpADxOvEggjJiIkJR4ZHBceCbj/8EAeFRY3RwkBlwkBCQYLBAEhHgAiF9ILKATSPx4BHhInEMXUXe0Q3u3UwBI5ORESOTldcSsREjk5ENTAENbAAD/tPzjtEhc5XV0REhc5XV2HDi4rhw59xIcELhgrDn0QxAcEEN4rPABdXV0RM11dcREzhy4YK30QxAArMTABAQYGFRQWFwUWFhUUBgcGBiMhNSEyNjU0JiclJiY1NDY3AScBNQEDXv3QIFBUJwEKYFIuLTOVYP5IAbZ6ZVR3/u4uRVGMAoIn/NUDKwU1/vQPLRASRyDbT5VNRYIsMjO8WUEtd2LhJlIwPWBDATVk/mtkAZYAAAP/ugAABEIGwwArAC8AMAEpQHUZEBUWNy4vLzksLRQsLC0vLAYsATYsZix2LAPnLAEuLVgtAQYtFi3WLQOXLQEtLCAJFAY7LBgYFxoZGdIYFxQYGBcfDxIP0iIfFCIiHwQYKa8ACEkiWSICFiI2IgIaHyIDCBkGF3YXAnkSARcSDwMJGa8YEBi4ATpAEwmvCAgtLhQsLxgEDQAyDxINFCK4//BALBUWN0ciAZciASIfJB0aFxQZHxgvGAIYBAgN0lAk4CTwJAMkMB3SPxQBFAgxEMXQXe0v3F3tEjnUXcASOTkREjk5XXErERI5ORDAETkQ1sAQ1MAAP+0/OO0SFzldXRESFzldXRDQ7RI5hw4uK4cOfcSHBC4YKw59EMQHBBDeKzwAXV1dETNdXXERM4cuGCt9EMQAKzEwISMiJicGBiMhNSEyNjU0JiclJiY1NDY3ARUBBgYVFBYXBRYWFRQUFRQWMzMDATUBEwRCdU+WMjOXZf4zActvcG1y/u4vRG5vAoH90SBRSzABCm1aa1R5+PzVAyuNOTQ4NbxRSSt9XuEnUTBFZjUBNcX+9A8tEBBCJ9tZi00DBwRBTQWi/mtkAZb5PQABAFwAAAaiBHMAMwDpQC/XEQECeCIBARIwFBU3eBIBdwUBAhMUDhA3qCYBpwgBACcIAQgmKSbSDAgUDAwIMLj/6LMJCjcZuAEzQBMoKVgpaCkDAiYpITAMCBMEM68AuP/wQAwYAAEAAASvMAQhrxO4//C1DA03EwgQuP/wQC0ODzcmKSQtJwwBAgwIEAfSGC14LQItLR4zJNIQNRYQDhA3GdLIGgEAGh7SFjQQ1v3UX3HtKxDe7cQSOS9d7RE5OV9dERI5OSsAPyvtP/3UX1047RESOTkREjk5X10/K4cOLiuHBH3EAV1fXV0rMTBfXV0rX10AX10BIyYmIyIGFRQWFxYWFxYWFRQEISAkNTQ2NzMVBgYVFBYzICQ1NCYnJiYnJiY1NDYzMhYXBqIKRrxxXpTVVDNzJiwx/hz+Iv7B/tgTAqwDGM32AZEBidVUNm0pKjPosnq9RANOK0FQPzVUHxM3HSBKNbvC1eVOnBIKD6k4jHRlWi5QIBU2ICFTNYLEMCAAAQBc/rgH+gLlAEAA00AgRCkBRSUBRhcBNwULBdI9NxQ9PTcrERQR0i4rFC4uKzO4/+hAGwkLNwULAA09N0ArLiczFBEZDUCvAAgNrzMfJ7j/6EA9Cww3J68ZAEJ4PQEpN5k3Aj03MAULAEAUUBQCFBEWEDsuASsuKhDSMDAkKtIWQhwQDhA3H9LPIAEgJNIcQRDW/dRx7SsQ3O0SOS/tEjk5XRESOTldEjk5ETk5XV0QwAAv7SvE1O0/7RESOTkREjk5Ejk5ERI5OSuHLiuHfcSHDi4YK4cOfcQxMABdXV0hIyImJyYmJyYmJyYmIyIGFRQWFxYWFRQEISAkNTQ2NzMVBgYVFBYzICQ1NCYnJiY1NDYzMhYXFhYXFhYXFhYzMwf6CElwLzBKHxtIHSJPME1PbSdHTP59/mv+xP7VEwKsAxjK+QE3ATlkL1NBuIpCaSonUB0bTh4nTzgMLigpZDErcyEnLz4gHlsgO2cyzdnX6E+YEQsQojmLeWx1KVMkPmU0ZrIwJiNuLip0ICktAAIBAAAABwAGAAADAAcAACERIRElIREhAQAGAPqABQD7AAYA+gCABQAAAAIBAAAABwAGAAADAAcAACERIRElIREhAQAGAPqABQD7AAYA+gCABQAAAAIBAAAABwAGAAADAAcAACERIRElIREhAQAGAPqABQD7AAYA+gCABQAAAAIBAAAABwAGAAADAAcAACERIRElIREhAQAGAPqABQD7AAYA+gCABQAAAAIBAAAABwAGAAADAAcAACERIRElIREhAQAGAPqABQD7AAYA+gCABQAAAAIBAAAABwAGAAADAAcAACERIRElIREhAQAGAPqABQD7AAYA+gCABQAAAAIBAAAABwAGAAADAAcAACERIRElIREhAQAGAPqABQD7AAYA+gCABQAAAAIBAAAABwAGAAADAAcAACERIRElIREhAQAGAPqABQD7AAYA+gCABQAAAAIBAAAABwAGAAADAAcAACERIRElIREhAQAGAPqABQD7AAYA+gCABQAAAAIBAAAABwAGAAADAAcAACERIRElIREhAQAGAPqABQD7AAYA+gCABQAAAAIBAAAABwAGAAADAAcAACERIRElIREhAQAGAPqABQD7AAYA+gCABQAAAAIBAAAABwAGAAADAAcAACERIRElIREhAQAGAPqABQD7AAYA+gCABQAAAAIBAAAABwAGAAADAAcAACERIRElIREhAQAGAPqABQD7AAYA+gCABQAAAAIBAAAABwAGAAADAAcAACERIRElIREhAQAGAPqABQD7AAYA+gCABQAAAAIBAAAABwAGAAADAAcAACERIRElIREhAQAGAPqABQD7AAYA+gCABQAAAAIBAAAABwAGAAADAAcAACERIRElIREhAQAGAPqABQD7AAYA+gCABQAAAAP/3QUkAmUIRgAqAFUAYQDcQAsqGAwUNwUYDBQ3Mbj/7EAhDhQ3E7sFQBYYNwUCGAoSNwIXHLtwKgEqJAtAFhg3CxgkuP/AQAkMGDckOVO7PVa4//BASxMaN1Y3XDgrOjE4uzkxSbtKRrtNQAwNN01cuzFjJys6VjcENF+dLy4BUC4BLlmdOTQnQ51QU51JPQgknSMfnScCGZ0WCAudDBCdCC/91O0Q1P051P3U7RDUzv3V7X0Q1BjE7dRdce0SFzkQwAAv7dQr7dTtENTtEjk5ERI5OSvU7RDeK9TEKxDUXe0SOSvUK+0rKysxMAAmJwYGIyImNTQ2NzMVBgYVFBYzMjY1NTMVFBYzMjY1NCYnNTMWFhUUBiMDJiY1NDYzMhYVFAYHFxUnBgYHNzY3NjY1NCYjIgYHNTI2MzIWFRQHBzY2NzY2NTQm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IQAuNTUBKzU1AP//AFwAAANaBf8CNgOpAAABFwMPABkEmgAZQA0DAgEAGhoVFSUDAgEbAC41NTUBKzU1NQD//wBGAAAEXgYbAjYDqgAAARcDDwEBBLYAGUANAwIBACAgFhYlAwIBIQAuNTU1ASs1NTUA//8AXAAAA1oF/wI2A6kAAAEXAxAAGQX/ABlADQMCAQAjIxUVJQMCASMALjU1NQErNTU1AP//AEYAAAReBf8CNgOqAAABFwMQAQEF/wAZQA0DAgEAKSkWFiUDAgEpAC41NTUBKzU1NQD//wBcAAADWgX/AjYDqQAAARcE8gAZBJoAHUAPBAMCAQAmJhUVJQQDAgEnAC41NTU1ASs1NTU1AP//AEYAAAReBhsCNgOqAAABFwTyAQEEtgAdQA8EAwIBACwsFhYlBAMCAS0ALjU1NTUBKzU1NTUA////k/5YApMETQI2A60AAAEXBPMAoPz0ABVADAEAGBURESUBPxcBFwAuXTUBKzUA////k/5YA1YETQI2A64AAAEXBPMAoPz0ABVADAMAJiMYGCUDPyUBJQAuXTUBKzUA////k/5YAx0CBAI2A60AAAEXAvgBpPgdABVACwIBACcnDQAlAgEYAC41NQErNTUA////k/5YA1YCBAI2A64AAAEXAvgBpPgdABVACwQDADU1EQQlBAMmAC41NQErNTUA////k/5YAtUCBAI2A60AAAEXAw0BVP6YABFACQEAFhUAACUBFgAuNQErNQD///+T/lgDVgIEAjYDrgAAARcDDQFU/pgAFUAMAx8kAQAkIwQEJQMkAC41AStdNQD///+T/lgDrQIEAjYDrQAAARcE8wIc+B0AKUAdAQAYGA0AJQEXQB4fNxdAGRo3F0AVFjc/F38XAhcALl0rKys1ASs1AP///5P+WAOtAgQCNgOuAAABFwTzAhz4HQApQB0DACYmEQQlAyVAHh83JUAZGjclQBUWNz8lfyUCJQAuXSsrKzUBKzUA////k/5YAtUCBAI2A60AAAA3Aw0BVP6YARYDDdgAACJAFQKAGQEAGRkRESUBABYWDQAlAhoBFgAuNS41ASs1K101////k/5YA1YCBAI2A64AAAA3Aw0BVP6YARYDDdgAACJAFQSAJwEAJycYGCUDACQkEQQlBCgDJAAuNS41ASs1K101////k/5YApMDhAI2A60AAAEXAw4AYwLwAB9AEwIBABUVERElAgEWQAsMNw8WARYALl0rNTUBKzU1AP///5P+WANWA4QCNgOuAAABFwMOAG0C8AAfQBMEAwAjIxgYJQQDJEALDDcPJAEkAC5dKzU1ASs1NQD///+T/lgCkwRVAjYDrQAAARcE8gBjAvAAJ0AXBAMCAQAhIRERJQQDAgEiQAsMNw8iASIALl0rNTU1NQErNTU1NQD///+T/lgDVgRVAjYDrgAAARcE8gBtAvAAJ0AXBgUEAwAvLxgYJQYFBAMwQAsMNw8wATAALl0rNTU1NQErNTU1NQD//wBc/lgJRgO1AjYDsQAAADcDDQRfAyEBFwMNBF/+wQAiQBUCAEFAKjElAQA9PCoxJQIAQQFBAT0ALjUuXTUBKzUrNf//AFz+WApeA7UCNgOyAAAANwMNBGIDIQEXAw0EYv7BACJAFQMASEcrMiUCAERDKzIlAwBIAUgCRAAuNS5dNQErNSs1////uv7BB2gD3AI2A7MAAAA3Aw0DyQNIARcDDQPJ/sEAIkAVAgAxMCEiJQEALSwhIiUCADEBMQEtAC41Ll01ASs1KzX///+6/sEIfQPcAjYDtAAAADcDDQO/A0gBFwMNA7/+wQAiQBUDADs6ISIlAgA3NiEiJQMAOwE7AjcALjUuXTUBKzUrNf//AFz+WAlGAs0CNgOxAAABFwMQBZr/vgAlQBcDAgEAPUAxMiUDAgFFQBUbN0VAEBE3RQAuKys1NTUBKzU1NQD//wBc/lgKXgLNAjYDsgAAARcDEAWa/74AJUAXBAMCAERHMjMlBAMCTEAVGzdMQBARN0wALisrNTU1ASs1NTUA////uv5ZB2gCzQI2A7MAAAEXAxADwP++ACVAFwMCAQAtMCEiJQMCATVAFRs3NUAQETc1AC4rKzU1NQErNTU1AP///7r+WQh9As0CNgO0AAABFwMQA8D/vgAlQBcEAwIANzohIiUEAwI/QBUbNz9AEBE3PwAuKys1NTUBKzU1NQD//wBc/lgJRgSGAjYDsQAAADcDEAWa/74BFwMPBZoDIQA6QCQGBQQASUwxMiUDAgEAPUAxMiUGBQRJAwIBRUAVGzdFQBARN0UALisrNTU1LjU1NQErNTU1KzU1Nf//AFz+WApeBIYCNgOyAAAANwMQBZr/vgEXAw8FmgMhADpAJAcGBQBQUzIzJQQDAgBERzIzJQcGBVAEAwJMQBUbN0xAEBE3TAAuKys1NTUuNTU1ASs1NTUrNTU1////uv5ZB2gEhgI2A7MAAAA3AxADwP++ARcDDwPAAyEAOkAkBgUEADk8ISIlAwIBAC0wISIlBgUEOQMCATVAFRs3NUAQETc1AC4rKzU1NS41NTUBKzU1NSs1NTX///+6/lkIfQSGAjYDtAAAADcDEAPA/74BFwMPA8ADIQA6QCQHBgUAQ0YhIiUEAwIANzohIiUHBgVDBAMCP0AVGzc/QBARNz8ALisrNTU1LjU1NQErNTU1KzU1Nf//AFz+WAjhAy8CNgO5AAABFwMOBW/+wQAVQAsDAgA9QDgvJQMCPQAuNTUBKzU1AP//AFz+WAlQAy8CNgO6AAABFwMOBW/+wQAVQAsEAwBHSkE4JQQDRwAuNTUBKzU1AP///7r+wQW0Ay8CNgO7AAABFwMOAWj+wQAVQAsDAgAzMi4uJQMCMwAuNTUBKzU1AP///7r+wQYjAy8CNgO8AAABFwMOAWj+wQAVQAsEAwA9PDc3JQQDPQAuNTUBKzU1AP//AFz+WAjhBYwCNgO5AAABFwMPBW8EJwAZQA0EAwIAPUA4LyUEAwI9AC41NTUBKzU1NQD//wBc/lgJUAWMAjYDugAAARcDDwVvBCcAGUANBQQDAEdKQTglBQQDRwAuNTU1ASs1NTUA////ugAABbQFEAI2A7sAAAEXAw8A2AOrABlADQQDAgAzNi4uJQQDAjMALjU1NQErNTU1AP///7oAAAYjBRACNgO8AAABFwMPANgDqwAZQA0FBAMAPUA3NyUFBAM9AC41NTUBKzU1NQD///+6AAAFMQYUAjYDwQAAARcDDwG3BCcAGUANBAMCACksERglBAMCKQAuNTU1ASs1NTUA////ugAABaIGFAI2A8IAAAEXAw8BtwQnABlADQUEAwAzNhIkJQUEAzMALjU1NQErNTU1AP//AFL+WARGBjoCNgPJAAABFwMPAPAE1QAZQA0DAgEALC8PDyUDAgEsAC41NTUBKzU1NQD//wBc/lgEsAYRAjYDygAAARcDDwDyBKwAGUANBAMCAEtOFhYlBAMCSwAuNTU1ASs1NTUA////ugAABHEFvQI2A8sAAAEXAw8BYQRYABlADQMCAQAfIhcQJQMCAR8ALjU1NQErNTU1AP///7oAAAPdBWQCNgPMAAABFwMPALgD/wAZQA0EAwIAQEMTHyUEAwJAAC41NTUBKzU1NQD//wBc/sEGoARYAjYDJgAAARcDDQPo/sEAEUAJAgA3NiEAJQI3AC41ASs1AP//AFz+wQc/A0ICNgMeAAABFwMNA+j+wQARQAkCAEdGIyklAkcALjUBKzUA////uv7BAu4EXgI2AwYAAAEXAw0AAP7BABFACQIAMzMbAyUCMQAuNQErNQD///+6/sEECANCAjYDGQAAARcDDQDN/sEAEUAJAgA3NhMZJQI3AC41ASs1AP//AFz+wQagBbsCNgMmAAAANwMNA28FJwEXAw0CHP7BAB5AEgMAOzoJACUCADc2MDAlAzsCNwAuNS41ASs1KzX//wBc/sEHPwSUAjYDHgAAADcDDQP2BAABFwMNAhz+wQAeQBIDAEtKCyklAgBHRiMpJQNLAkcALjUuNQErNSs1////uv7BAu4FlQI2AwYAAAA3Aw0AAQUBARcDDQAA/sEAHkASAwA1NSoqJQIAMTEqKiUDNQIxAC41LjUBKzUrNf///7r+wQQIBJQCNgMZAAAANwMNAM0EAAEXAw0Azf7BAB5AEgMAOzoTGSUCADc2ExklAzsCNwAuNS41ASs1KzX//wBc/lkGoARYAjYDJgAAARcDEAPo/74AJUAXBAMCADc6IQAlBAMCP0AVGzc/QBARNz8ALisrNTU1ASs1NTUA//8AXP5ZBz8DQgI2Ax4AAAEXAxAD6P++ACVAFwQDAgBHSiMpJQQDAk9AFRs3T0AQETdPAC4rKzU1NQErNTU1AP///7r+WQLuBF4CNgMGAAABFgMQAL4AJUAXBAMCADMzKiolBAMCOUAVGzc5QBARNzkALisrNTU1ASs1NTUA////uv5ZBAgDQgI2AxkAAAEXAxAAzf++ACVAFwQDAgA3OhMZJQQDAj9AFRs3P0AQETc/AC4rKzU1NQErNTU1AP//AFz/9AagBowCNgMmAAABFwTyA28FJwAdQA8FBAMCAEM6MDAlBQQDAkMALjU1NTUBKzU1NTUA//8AXAAABz8FZQI2Ax4AAAEXBPID9gQAAB1ADwUEAwIAU0ojSiUFBAMCUwAuNTU1NQErNTU1NQD///+6AAAC7gZmAjYDBgAAARcE8gABBQEAHUAPBQQDAgA8PCoqJQUEAwI9AC41NTU1ASs1NTU1AP///7oAAAQIBWUCNgMZAAABFwTyAM0EAAAdQA8FBAMCAEM6ExklBQQDAkMALjU1NTUBKzU1NTUA//8AXP87BqAFlQI2BPQAAAEXAw0DwAUBABdADgIAPT02NiUCHz1vPQI9AC5dNQErNQD//wBc/lgHHQRdAjYDJAAAARcDDQPEA8kAEUAJAgA3NzMzJQI3AC41ASs1AP//AFz/OwagBmYCNgT0AAABFwMPA8AFAQAfQBIEAwIAPDw2NiUEAwIfPW89Aj0ALl01NTUBKzU1NQD//wBc/lgHHQUuAjYDJAAAARcDDwPEA8kAGUANBAMCADY2MzMlBAMCNwAuNTU1ASs1NTUAAAEAXAAACAsEkwAoAHBASDUnAQYnFicmJwMVJQEGJCYkAmYgASkGARoGAQsGATQCAQYCFgImAgMb0iIfIh8NFNIAKgoN0gkHCQkkH68eJK8XJa8WEK8FCAA//d7t3f3c7RI5LwEvM+0yENbtETk5Ly/tMTBdXV1dXV1dXV1dJRQHBiMhIBE0NzMVBhUQISEyNzY1NCclJicmNTQ3ARUFBhUUFwUWFxYIC2521fzh/SkVrBsCMQNdUTEroPyDVT1J2QH4/lpscAN0cE9k22I7PgH2PogKY03+uhUUGTkPVggyPWRtggEtxfpALDULUwo4RQAAAQBcAAAIrgSTAC4AfEBMNigBJSgBBigWKAImJjYmAgUmARYlAWYhATkHASoHARgHAQoHARzSIyAjIA4DFdIqLjALDtIKCAMBLREKChggrx8lrxgmrxcRrwEGCAA/wP3e7d393O0SOS8QwBE5AS8z7TIQxdTtORE5OS8v7TEwXV1dXV1dXV1dXV0hIyInBiEhIBE0NzMVBhUQISEyNzY1NCclJicmNTQ3ARUFBhUUFwUWFxYXFhYzMwiudollbf79/Vn9KRWsGwIxAuVRMSug/PtWPEnZAfj+WmxwAvxkTF4RBWM9eklJAfY+iApjTf66FRMaNhJWCjE8ZG2CAS3F+kAsNAxTCy05XR4tAAH/ugAACAsEkwAfAFdANyceNx4CBh4WHgIFHAEWGwFmFwElAjUCAhYCAQUCARLSGRYZFgYL0gAhBhavFRuvDhyvDQevBAgAP/3e7d393O0BLxDW7RE5OS8v7TEwXV1dXV1dXV0lFAcGIyE1ITI3NjU0JyUmJyY1NDcBFQUGFRQXBRYXFggLbnXW+WgG1lExK6D8g1U9SdkB+P5abHADdHBPZNtiOz68FRMaOQ9WCDI9ZG2CAS3F+kAsNQtTCjhFAAH/ugAACK4EkwAlAF1ANzYfARcfJx8CBh8BNh0BFR0BJhwBZhgBE9IaFxoXBwMM0iElJwcDASQIF68WHK8PHa8OCK8BBQgAP8D93u3d/dztEMAROQEvEMXU7TkROTkvL+0xMF1dXV1dXV0hIyInBiEhNSEyNzY1NCclJicmNTQ3ARUFBhUUFwUWFxYXFhYzMwiudollbf79+eAGXlExK6D8+1Y8SdkB+P5abHAC/GRMXhEFYz16SUm8FRMaNhJWCjE8ZG2CAS3F+kAsNAxTCy05XR4tAP//AFwAAAbsBfoCNgMtAAABFwL4BTz9XQAfQBMCAQ8zAQAzMw4OJQIBEDaPNgI2AC5dNTUBK101NQD//wBcAAAHvgX6AjYDLgAAARcC+AU8/WcAH0ATAwIPPQEAPT0oKCUDAhBAj0ACQAAuXTU1AStdNTUA////ugAAA14F+gI2Ay8AAAEXAvgB4P12ACFAFQIBDyMBACMjIiIlAgEQJiAmjyYDJgAuXTU1AStdNTUA////ugAABEIF+gI2AzAAAAEXAvgB4P12ACFAFQMCDysBACsrGBglAwIQLiAujy4DLgAuXTU1AStdNTUA//8AXAAABVIGFAI2A9kAAAEXAw0BkAV4ABVADAIAPDstMSUCDzwBPAAuXTUBKzUA//8AXAAABmYGFAI2A9oAAAEXAw0BkAV4ABVADAMARkU2OSUDD0YBRgAuXTUBKzUA////ugAAA14GDAI2A9sAAAEXAw0AAAV4ABlADwEAJAEAJCQEBCUBDyQBJAAuXTUBK101AP///7oAAARCBgwCNgPcAAABFwMNAAAFeAAZQA8CACwBACwsHR0lAg8sASwALl01AStdNQD//wBcAAAFUgbdAjYD2QAAARcDDwGQBXgAGUANBAMCADw/LTAlBAMCPAAuNTU1ASs1NTUA//8AXAAABmYG3QI2A9oAAAEXAw8BkAV4ABlADQUEAwBGSTY5JQUEA0YALjU1NQErNTU1AP///7oAAANeBt0CNgPbAAABFwMPAAAFeAAdQBADAgEAIwEAIyMEBCUDAgEkAC41NTUBK101NTUA////ugAABEIG3QI2A9wAAAEXAw8AAAV4AB1AEAQDAgArAQArKx0dJQQDAiwALjU1NQErXTU1NQD//wBc/lkFUgYUAjYD2QAAARcDEAGQ/74AJUAXBAMCADw/CgAlBAMCREAVGzdEQBARN0QALisrNTU1ASs1NTUA//8AXP5ZBmYGFAI2A9oAAAEXAxABkP++ACVAFwUEAwBGSQ4jJQUEA05AFRs3TkAQETdOAC4rKzU1NQErNTU1AP///7r+WQNeBfoCNgPbAAABFgMQ2L4AJUAXAwIBACQnExclAwIBLEAVGzcsQBARNywALisrNTU1ASs1NTUA////uv5ZBEIF+gI2A9wAAAEWAxDYvgAlQBcEAwIALC8JDSUEAwI0QBUbNzRAEBE3NAAuKys1NTUBKzU1NQD//wBcAAAG7AbDAjYDMQAAARcC+AVQ/WwAHUARAwIPNwEANzcODiUDAhA6AToALl01NQErXTU1AP//AFwAAAe+BsMCNgMyAAABFwL4BVD9bAAdQBEEAw9BAQBBQSgoJQQDEEQBRAAuXTU1AStdNTUA////ugAAA14GwwI2AzMAAAEXAvgB4P12ACFAFQMCDycBACcnIiIlAwIQKiAqjyoDKgAuXTU1AStdNTUA////ugAABEIGwwI2AzQAAAEXAvgB4P12ACFAFQQDDzEBADExGBglBAMQNCA0jzQDNAAuXTU1AStdNTUA//8AXAAABuwGwwI2AzEAAAEXAw4DIAYvAEayAwI3uP/otA0NBjs3uP/CtAwMBjs3uP/AtwkJBjsANwE3uP/AQBEJDTcANzwTEyUDAjhACR03OAAuKzU1ASsrXSsrKzU1//8AXAAAB74GwwI2AzIAAAEXAw4DIAYvAEayBANBuP/otA0NBjtBuP/AtAwMBjtBuP/AtwkJBjsAQQFBuP/AQBEJDTcAQUYtLSUEA0JACR03QgAuKzU1ASsrXSsrKzU1////ugAAA14GwwI2AzMAAAEXAw7/nAYvADqyAwInuP/oQA4MDQY7Jw4KCwY7ACcBJ7j/wEARCQ03ACcsBAQlAwIoQAkdNygALis1NQErK10rKzU1////ugAABEIGwwI2AzQAAAEXAw7/nAYvADqyBAMxuP/2QA4MDQY7MR4KCwY7ADEBMbj/wEARCQ03ADE2HR0lBAMyQAkdNzIALis1NQErK10rKzU1//8AXP7BBuwGwwI2AzEAAAEXAw4CvP7BABVACwMCADg7LBolAwI4AC41NQErNTUA//8AXP7BB74GwwI2AzIAAAEXAw4CvP7BABVACwQDAEJFEzclBANCAC41NQErNTUA////uv7BA14GwwI2AzMAAAEXAw7/xP7BABVACwMCACgrExclAwIoAC41NQErNTUA////uv7BBEIGwwI2AzQAAAEXAw7/xP7BABVACwQDADI1CSclBAMyAC41NQErNTUA//8AXP5ZBuwGwwI2AzEAAAEXBPECvP5ZABtAEAMCADw8LBolAwIwPI88AjwALl01NQErNTUA//8AXP5ZB74GwwI2AzIAAAEXBPECvP5ZABtAEAQDAEZGEzclBAMwRo9GAkYALl01NQErNTUA////uv5ZA14GwwI2AzMAAAEXBPH/xP5ZABtAEAMCACwrExclAwIwLI8sAiwALl01NQErNTUA////uv5ZBEIGwwI2AzQAAAEXBPH/xP5ZABtAEAQDADY1CQ0lBAMwNo82AjYALl01NQErNTUA//8AXAAABuwHlAI2AzEAAAEXAw8DIAYvAH2zBAMCN7j/4rcNDQY7ADcBN7j/gEALCQ03ADc8ExMlBEK4/8C0DA0GO0G4/8C0DA0GO0C4/8C0DA0GOz+4/8BAHgwNBjsDAjhAEBAGOzhADA0GOzhACQsGOzhAER03OLj/wLMJCzc4AC4rKysrKzU1KysrKzUBKytdKzU1NQD//wBcAAAHvgeUAjYDMgAAARcDDwMgBi8AfbMFBANBuP/itw0NBjsAQQFBuP+AQAsJDTcAQUYtLSUFTLj/wLQMDQY7S7j/wLQMDQY7Srj/wLQMDQY7Sbj/wEAeDA0GOwQDQkAQEAY7QkAMDQY7QkAJCwY7QkARHTdCuP/AswkLN0IALisrKysrNTUrKysrNQErK10rNTU1AP///7oAAANeB5QCNgMzAAABFwMP/5wGLwBztgQDAgAnASe4/4BACwkNNwAnLAQEJQQyuP/AtAwNBjsxuP/AtAwNBjswuP/AtAwNBjsvuP/AQB4MDQY7AwIoQBAQBjsoQAwNBjsoQAkLBjsoQBEdNyi4/8CzCQs3KAAuKysrKys1NSsrKys1ASsrXTU1NQD///+6AAAEQgeUAjYDNAAAARcDD/+cBi8Ac7YFBAMAMQExuP+AQAsJDTcAMTYdHSUFPLj/wLQMDQY7O7j/wLQMDQY7Orj/wLQMDQY7Obj/wEAeDA0GOwQDMkAQEAY7MkAMDQY7MkAJCwY7MkARHTcyuP/AswkLNzIALisrKysrNTUrKysrNQErK101NTUA//8AXP/0BRUHrAI2A90AAAEXBPMDhABTABFACQEAIB0bHCUBHwAuNQErNQD//wBc/lgFyQesAjYD3gAAARcE8wOEAFMAEUAJAgAoJR0eJQInAC41ASs1AP///7oAAAIdB6wCNgPfAAABFwTzAIwAUwARQAkBABIPDQ4lAREALjUBKzUA////ugAAAs8HrAI2A+AAAAEXBPMAjABTABFACQIAGRYODyUCGAAuNQErNQD//wBc//QEsgciAjYD3QAAARcDDQMqBo4AFUAMAQAeHRscJQEPHgEeAC5dNQErNQD//wBc/lgFyQciAjYD3gAAARcDDQMgBo4AFUAMAgAmJR0eJQIPJgEmAC5dNQErNQD///+6AAABugciAjYD3wAAARcDDQAyBo4AFUAMAQAQDw0OJQEPEAEQAC5dNQErNQD///+6AAACzwciAjYD4AAAARcDDQAyBo4AFUAMAgAXFg4PJQIPFwEXAC5dNQErNQD//wBc//QFNQfzAjYD3QAAARcDDwMgBo4AIkANAwIBAB4hGxwlAwIBHrj/wLMKDTceAC4rNTU1ASs1NTX//wBc/lgFyQfzAjYD3gAAARcDDwMgBo4AIkANBAMCACYpHR4lBAMCJrj/wLMKDTcmAC4rNTU1ASs1NTX///+6AAACRwfzAjYD3wAAARcDDwAyBo4AIkANAwIBABATDQ4lAwIBELj/wLMKDTcQAC4rNTU1ASs1NTX///+6AAACzwfzAjYD4AAAARcDDwAyBo4AIkANBAMCABcaDg8lBAMCF7j/wLMKDTcXAC4rNTU1ASs1NTX//wBc/lkEsgYUAjYD3QAAARcDEAEs/74AJUAXAwIBAB4hDholAwIBJkAVGzcmQBARNyYALisrNTU1ASs1NTUAAAQAXP5ZBckGFAAjACcAKwAvAJxADWsZAVkZAXUVASgLASm+AS8AKwAuAS8ALAAnAS+3JSwsEwUb0h64/+y0DQ0GOx64/9hADQsLBjseIzEQE9IPDSu7ATAAKQAnATCzJSUJLrgBMEAKjyyfLAIsDw8XHLgBOUAJBSKvARevCQEIAD/U7RDtOT8SOS8vXe0ROS/t0O0BLzPtMhDF1Csr7TkROS/Q7RD90O0xMF1dXV0hIyInJicGBwYjICcmNTQ3MxUGFRQXFjMyNzY1ETMRFBcWMzMBIzUzBSM1MxMjNTMFyXU7Rk4eM3yRz/75cYQVrBtkQ7GkcJ6mNjpfSP1plJT+2JSUlJSUISU0TTI7VmP7aZMKgm6jNCMsP4sEovuMX0BF/lCUlJT+uZQA////uv5ZAdkGFAI2A98AAAEWAxDEvgAlQBcDAgEAEBMMDCUDAgEYQBUbNxhAEBE3GAAuKys1NTUBKzU1NQD///+6/lkCzwYSAjYD4AAAARYDEDK+ACVAFwQDAgAXGg0QJQQDAh9AFRs3H0AQETcfAC4rKzU1NQErNTU1AP//AFz+wQTwBGQCNgPlAAABFwMNAXH+wQAeQBICACcmIyIlAQAjIhQaJQInASMALjUuNQErNSs1AAMAXP5ZBh0DqQADACgALAB7QBAYHQEXGQFJDwFJDwFICwEpuwEvACsAAwEvQBsBARciH9IjCSQoLhQX0hMRG6+PDZ8Nrw0DDSu4ATBACU8pjymfKQMpArgBMLcAEyMJJ68FCAA//TnewNbtL1391l3tAS8z7TIQxdQyMu0yETkv7dDtMTAAXV0BXV1dASM1MwEjIicmJwYHBiMgJyYRNDczFQYVFBcWMzI3NjU0JzUzFBcWMzMBIzUzAvKUlAMrjC85QRQek7LJ/uyXoRu2K4Rwrql1iB/HJy53X/zVlJQDFZT8VxoeKV5nfHuDAQZC8xCNmqVXSk1ZoIClEs9dcf2dlAD///+6/sEBuARcAjYDEQAAADcDDQAoA8gBFwMNACj+wQAeQBICABEQCgslAQANDAoLJQIRAQ0ALjUuNQErNSs1////uv7BAs8DwQI2AwcAAAA3Aw0AKAMtARcDDQAo/sEAHkASAgAaGQ4PJQEAFhUODyUCGgEWAC41LjUBKzUrNf//AFz/8gTwBjkCNgTUAAABFwTLAZAD0QAVQAsCAQAnIhQaJQIBJwAuNTUBKzU1AP//AFz+WAYGBKECNgTVAAABFwTLAZACOQAVQAsDAgArJhUbJQMCKwAuNTUBKzU1AP//AFz+2QTwBGQCNgPlAAABFwL4AfT4ngAjQBUDAgAsJhQaJQEAIyIUGiUDAjUIASMALjU+NTUBKzUrNTUAAAQAXP62BgYEXAADACgANABAAI5AKnYmAWsdAVwdAUodARkdAUUZARcZAVkQaRACdgkBCR8kKZxwNQE1L5w7A7gBL0AaAQEXIh/SIyQoQhQX0hMRfywBLJ0+Mp04CAK4ATBADAATIwkorwUbrw0FCAA/1OwQ/TnewNbtP+ze7XEBLzPtMhDF1DLtMhE5L+3U7dZd7RESOV0xMF1dXV1dXV1dASM1MwEjIicmJwYHBiMgJyYRNDczFQYVFBcWMzI3NjU0JzUzEBcWMzMBFAYjIiY1NDYzMhYHNCYjIgYVFBYzMjYC8pSUAxR1SEdBGzBwl8f+7JehG7YrhHCuqXWIH8caKYlI/WBuT09tbk5Pblw4KSg4OiYnOgPIlPukPDdHUkBVe4MBBkLzEI2apVdKTVmggKUS/stsr/63T25uT05ubk8pNzgoJjg3////uv7zAbgEXAI2AxEAAAA3Aw0AKAPIARcC+AAA+LgAK0ASAwIAFhAFCyUBAA0MCgslAwIZuP/AtQkLNxkBDQAuNS4rNTUBKzUrNTUA////uv7pAs8DwQI2AwcAAAA3Aw0AKAMtARcC+AAA+K4AK0ASAwIAHxkJDyUBABYVDg8lAwIiuP/AtQkLNyIBFgAuNS4rNTUBKzUrNTUA//8AXP/yBPAFNgI2BNQAAAEXAw8BkAPRABlADQMCAQAjJhQaJQMCASMALjU1NQErNTU1AP//AFz+WAYGA54CNgTVAAABFwMPAZACOQAZQA0EAwIAJyoVGyUEAwInAC41NTUBKzU1NQD//wBQ/lgEYATLAjYDoQAAADcDEAGOARMBFwMNAhUENwAqQBkEADMzICUlAwIBACcqBwAlBDMDAgGPLwEvAC5dNTU1LjUBKzU1NSs1//8AUP5YBZoE9AI2A6IAAAA3AxABXgEYARcDDQGvBGAAKkAZBgBGRScsJQUEAwA6PQsEJQZGBQQDj0IBQgAuXTU1NS41ASs1NTUrNf///7r+mwUABHECNgOjAAAANwMQAnwAAAEXAw0BDwPdACdAFwQAICAOEiUDAgEAFRgJCSUEIQMCARYIAD41NTUuNQErNTU1KzUA////uv5ZBXEEcQI2A6QAAAA3AxABMv++ARcDDQEPA90AMkAgBQAuLQ4SJQQDAgAiJQ4SJQUuBAMCKkAVGzcqQBARNyoALisrNTU1LjUBKzU1NSs1////dP5YAvgDJQI2A+0AAAEXAvj/dPiEACuyAwIuuP/AQA8JDzcALi4HByUDAo8xATG4/8CzDg83MQAuK101NQErKzU1AP///3T+WAONAyUCNgPuAAABFwL4/3T4hAArsgQDL7j/wEAPCQ83AC8vCAglBAOPMgEyuP/Asw4PNzIALitdNTUBKys1NQAAAv+J/lgC+AMlABsAKQBHQClUGXQZAhwMSQlpCQIJDtIAKwoKBSTSFBivIBworw4QCY8MAQwIBa8EDQA/7T9dzdYy/TLe7QEv7cY5LxDW7TJdMjIxMF0lEAUGITUgNzY3ITUhNjUGIyInJjU0NzYzMhcWBzQnJiMiBwYVFBcWMzIC+P6t6P7MARatQTP+QAIpI0BcmmVtWF+GxWVNuTE4SUQuK0U3TFO6/o+PYrxCGSNuQVkpUFeWinJ74atFS15rOTVGRSUdAAAD/4n+WAONAyUAGgAmACcAZ0BBcxYBRBZUFmQWA3oPAWsPAUoPWg8CTQIBNiUBDUsKawoCChvSARkaKQsLBiPSERWvHxsZrwEKPw2PDQINCAavBQ0AP+0/Xc3Q/cXc7QEv7cY5LxDF3TLtMl0yMTAAXQFdXV1dXV0hIwYFBiE1Mjc2NyE1ISQnJjU0NzYzMhcWFTMlJicmIyIHBhUUFxYFA42wUv7Tyv716JF3Tf46Aif+83dfWF+GxGZNlf6/BCAzaEQuKztbAdD+ZkS8JyA3biGKbpWKcnvgq94Cjm+tOTVGUjxcygD///+J/lgC+ATpAjYD7QAAARcE8wCg/ZAAGUAQAgArKBYWJQIPKj8qfyoDKgAuXTUBKzUA////if5YA40E6QI2A+4AAAEXBPMAoP2QABlAEAMALCkXFyUDDys/K38rAysALl01ASs1AP///4n+WAL4BZwCNgPtAAABFwL1AIz9VgAdQBIDAgAsKBYWJQMCDywvLF8sAywALl01NQErNTUA////if5YA40FnAI2A+4AAAEXAvUAjP1WAB1AEgQDAC0pFxclBAMPLS8tXy0DLQAuXTU1ASs1NQD///+J/lgC+AYzAjYD7QAAARcE4QDw/oEAGUAQAgApKBYWJQIPKS8pXykDKQAuXTUBKzUA////if5YA40GMwI2A+4AAAEXBOEA8P6BABlAEAMAKikXFyUDDyovKl8qAyoALl01ASs1AP///4n+WAL4BQcCNgPtAAABFwT1AGT9kAAXQA4CACsuFhYlAitACQw3KwAuKzUBKzUA////if5YA40FBwI2A+4AAAEXBPUAZP2QABdADgMALC8XFyUDLEAJDDcsAC4rNQErNQD///+J/lgC+ARfAjYD7QAAARcDDgBkA8sAG0AQAwIAKSwWFiUDAg8pLykCKQAuXTU1ASs1NQD///+J/lgDjQRfAjYD7gAAARcDDgBkA8sAG0AQBAMAKi0XFyUEAw8qLyoCKgAuXTU1ASs1NQD///+J/lgC+AUwAjYD7QAAARcDDwBkA8sAH0ASBAMCACksFhYlBAMCDykvKQIpAC5dNTU1ASs1NTUA////if5YA40FMAI2A+4AAAEXAw8AZAPLAB9AEgUEAwApLBYWJQUEAw8pLykCKQAuXTU1NQErNTU1AAABAAAAAAcMBHMAMQCCQFBpMAEKMAFmLAEzLEMsUywDcioBZykBBilWKQIJFwFUCQEV0iMjBw3SGyszBAfSAgExEBIuHygmChkBBAIDBAQfCq8uCBwfr2YbdhuGGwMbGQAvM13tMj/tETkv3c0RORESOTkREjk5AS8zzu0yENbE7RE5L+0xMF1dXV1dXV1dXRI3BTUlFQYVFBYzICQ1NCcmJyYnJjU0NzYzMhcVIyYjIgcGFRQXFhcWFxYVFAQhICQ1+An+/wG5G83YAX0BiX9VVYRIXYd4m9GqCrDDUUdafVZWg0ld/hz+Nv7f/tgB1EZHYIMKh2mMdGVaKjYfHzM4SWCVXlNQ1WwgKEcxNyAgMDdFWrvC1eUAAQAA/rgIZALlADcAi0BVChgBVTRlNHU0A3YwAVcwZzACNiYBJyYBZiIBeRgBNhQBKAM4AwIq0g4OISfSEzc5HiHSHRsZKCkWChseHB0WEQEEEQERJBAuHh4uJK8WCq8uN68ACAA//dztL+0ROS8SORI5XV3dzRE5ERI5OQEvM8TtMhDF1O0ROS/tMTAAXV1dXV1dXV1dAV0hIyInJicnJicmIyIHBhUUFxcWFRQEISAkNTQ3BzUlFQYVFBYzICQ1NCQ1NDc2MzIXFhcWFxYzMwhkCINlSFE/R0QnMDUtOjZek/59/n/+2f7VB/YBsBvK5AEjATn+2WhheXVgPlYrXFFdDFY9gWVwKRcUGy8eLU56Ws3Z1+gmNUdghAuQW4t5bHUx32d3U05WOIdGeFYA//8AXAAABqIEgQI2AzUAAAEXBPMBLP0oABFACQEANzQWLSUBNgAuNQErNQD//wBc/rgH+gPrAjYDNgAAARcE8wEs/JIAEUAJAQBEQRwwJQFDAC41ASs1AP///7r+wQIdBOkCNgMRAAAANwTzAIz9kAEXAw4AAP7BACJAFAMCABQXCgslAQAPDAoLJQMCFAEOAC41LjU1ASs1KzU1////uv7BAs8ETQI2AwcAAAA3BPMAjPz0ARcDDgA8/sEAIkAUAwIAHSAODyUBABgVDg8lAwIdARcALjUuNTUBKzUrNTX///+J/lgC+ARfAjYD7QAAARcDDQBkA8sAF0AOAgApKBMAJQIPKS8pAikALl01ASs1AP///4n+WAONBF8CNgPuAAABFwMNAGQDywAXQA4DACopFBolAw8qLyoCKgAuXTUBKzUA//8AXP5ZBqIEcwI2AzUAAAEXBPEBsv5ZABtAEAIBADk4FhAlAgEwOY85AjkALl01NQErNTUAAAMAXP5ZB/oDcQAzADcAOwC2QCBqJ3onAnskAWokAWoaehoCWRoBWRkBaQN5AwJaAwE3O7gBL0AbNjk5GxMo0h8NAQ0NISXSABMBEzM9HiHSHRs3uAEwQBHPNQGONQFfNW81fzUDNTUXO7gBMEAcTzmPOQI5WScBJicXCREPHR0sI68XCa8sM68ACAA//dztL+0ROS85ORESOTldL13tETkvXV1d7QEvM+0yEMXUXe0ROS9d7RESOS/A/cAxMABdAV1dXV1dXV0hIyInJicmJyYjIgcGFRQXFhcWFRQFBiEgJyY1NDczFQYVECEgNTQkNTQ3NjMyExYXFjMzASM1MxEjNTMH+giEXEQ+Ly9oejUtOkUnKJP+xqn+y/71nMAOrRUBwwJw/tlnYXrLnjU2UHoM+zmUlJSUWEGGaWnEFBsvHioUFVJk2EspXnT5EJoKdij+74gul2x4U03+13t6l/5ulP6blP//AFz+WQaiBHMCNgM1AAABFwMQAbL/vgAlQBcDAgEANTgWECUDAgE9QBUbNz1AEBE3PQAuKys1NTUBKzU1NQAABABc/lkH+gNxADMANwA7AD8AqUAYWidqJ3onA3skAWkkAVQiAWoaehoCM0E0vgEvADYAPwEvAD0AOgEvQBs4PT0bEyjSHw0BDQ0lHiHSHRsl0gATARMBOje4ATC0NDk5Fz+4ATBAG089Xz2PPQM9JicXCREPHR0sI68XCa8sM68ACAA//dztL+0ROS85ORESOTkvXe0ROS/A/MABL9xd7S8z7TIROS9d7RESOS/Q7RD90O0QxTEwXV1dXV0hIyInJicmJyYjIgcGFRQXFhcWFRQFBiEgJyY1NDczFQYVECEgNTQkNTQ3NjMyExYXFjMzASM1MwUjNTMTIzUzB/oIhFxEPi8vaHo1LTpFJyiT/sap/sv+9ZzADq0VAcMCcP7ZZ2F6y541NlB6DPvNlJT+2JSUlJSUWEGGaWnEFBsvHioUFVJk2EspXnT5EJoKdij+74gul2x4U03+13t6l/5ulJSU/puUAAT9/gSRAgEHsgADAAcAPwBKAHZAPQUHA0A1AQE1R5w5OS8ZCJw1Di+cLCgWnB8SJZwoLS1JDhIqnRAanRkQAwcEAAAnPJ1EQEmdNTc3RDOdDBAAL9D9zDkvM+0yEP3OOS/A3MAQ3u0Q7Tk5ETkvAS/9OdztEN79OdTtxBI5L+0ROS8SOc3ezTEwASM1MwcjNTMTFAcGIyInBiMiJwYHBhUUMyEVISInJjU0NzY3NjURMxEUMzI1NTMVFBcWMzI3BiMiNTQ2MzIXFgc0JyYjIgYVFDMyAbY7O2s8PLY9OV1dKylUYTM3gm1fAtP9T01BZF45dl5bYlJcFRglhgcdIohLNE8oH1QOEh0aJUYfB0o8PDz+kGI3MyEhODQdGBUXXBAaN0EiFSgtVQGe/mJvSAkJFxcaYBF/NWFXQyAiIistGzYAAAL/PwVKAMAGhgAVACMAK0AVAJwWHggeDA+cHhKdGiKdBAgMnQsEAC/U7TkQ/d7tAS/9zhI5EN7tMTATFAcGIyInJicGIyM1MzI3NjYzMhcWBzQnJiMiBwYVFBcWMzLAIyU6KScaEihODQ5OBQNEOWkqDUIUGSg2DQMxEBVFBdg7KCsXDxk4S147UWcgKyUdJC8LEDgbCQAAAv8wBJEA0AbYABsAHwBaQDfLEAGaEKoQuhADaRB5EIkQA5oTAYwTAWsTexMCExoPCRsfHQ+cFgMJC50IBRweF50WGhMbnQAeAC/e/TIy1O0Q3d4y7TIBL8zt3s3UxBI5OV1dXTEwXV1dEyMgFRQzMjczFQYjIicmNTQ3NjcmIyM1MzIXMwMjNTPQDP7CkGZIBExlZj9CYFNsRokeI4KsHZE7OwYbtHkuZCc4OmVpRj4GHl9r/ug7AAP/pwVKAFkF2QADAAcACwAgQA0KCAEEBgMBAwEGCgUIAC/A3cDWzQEv3dDNENDNMTATIzUzFyM1MwcjNTMePDw7Ozt3OzsFnjuPOzs7AAH+IgSjAd4GawArAEtAJhEPnBIVGwCcKgQknCIeCJwdGxERHggEIJ0GF50MBh4kJConnQIGAC/Q/c45L8AQ3O0Q7Tk5ETkvAS8z/TLc/Tne7RDeMu0yMTABFCMiJwYjIicGBwYjIiY1NDczFQYVFDMyNzY1NCczFDMyNTUzFRQzMjU1MwHem1AtMj8/JAZIQ1pregtcEY9TIh8EW2NMWz5KWgX/tSgoGlc3M2tjKFQHOT14KCVXTD6HWS48S2VnAAgAMv5/CMoHFgAzAD8ARABQAG4AegB/AIsA2kB9WTqcKUAudZxpC3tvnG0EBlU0nDA/LgEuLgEPLh8uAi5RrQCNWkWcJUQggJxoD3yGnGQWFF5LnB4wIAEhIAEAIBAgAiBirRpVPZ0wV15OnR5cWrtEN50pK0idJSMjJ0RCuyeDnWQWZnKdbQRrabt7iZ0PEXidCwkJDXt+uw0AL/3OETkvM+3QMu0Q/d0yMu3QMjLtL/3OETkvM+3QMu0Q/d0y7TPQMu0zAS/t1F1dXTLtM9AyMu3cMjLtENwy7TMQ1u3UXV1dMu0z0DIy7dwyMu0Q3DLtMzEwARQHBgcWFRQGIyInBiEgJwYjIiY1NDcmJyY1NDc2NyY1NDYzMhc2ISAXNjMyFhUUBxYXFgE0JiMiBhUUFjMyNicmIyIHBzQmIyIGFRQWMzI2ATQnJicGIyInIQYjIicGBwYVEAE2MzIXITYzMhcAATQmIyIGFRQWMzI2JyEWMzIlNCYjIgYVFBYzMjYIymhkswNONygh8P7t/u/wISg3TgOzZGhoZLMDTjcoIfABEwER8CEoN04Ds2Ro/k4uICAvLiEgLtbU7/HUOS8gIC4uICEuBdtcWJ8dIzgn/CgnOCMdn1hcAVMdIzgnA9gnOCMdAVP+vC4gIS4vICAu1vx41PHv/RMuISAuLiAgLwLL9tzWmg4PN00Wf38WTTcPDprW3Pb23NWaDg83TRZ/fxZNNw8OmtXcAmchLi8gIC4uM21tEyAvLiEgLi78wtvGvosQKSkQi77G2/4//tgQKSkQASj+ZCAuLiAgLy4ObYAgLi4gIS4vAAwAMv7JCHsHEwAPABIAFQAYABsAHgAhACQALAAvADsARwBwQDwtAA8CL5wZFiwwnCMMBB0EPEIgCAkGIZwVESk2nEIjDA0KJJwYFCc5nAggAC0EP0UdBAUCHpwZEisznEUAL/3ewMD9wMDNMhDeFzn93sDA/cDAzTIBL/3ewMD9wMDNMhDeFzn93sDA/cDAzTIxMAEBESEBASERAQERIQEBIREBESERIREhESEBEQEFFzcBBxcBJwcBASEBEQEhAQEnESUUBiMiJjU0NjMyFgc0JiMiBhUUFjMyNgh7/sr+SP7K/sn+Sf7JATcBtwE3ATYBuPpvASH+3wVG/t4BIv7e/bLNzPxGzc0DuszNA3D+dP3R/nUBiwIvAYwBF8z9639aWoCAWlp/S1Q7O1RUOztUAu7+yf5J/skBNwG3ATcBNwG3ATf+yf5J/Uf+3wVG/t8BIfq6ASH+30vNzQO7zc0Du83N/ioBi/51/dD+dQGLARjN/mbNWoCAWlp/f1o7U1M7O1RUAAH/tQVKAEsF4AALABW9AAABLwAGAAkBMAADAC/tAS/tMTATFAYjIiY1NDYzMhZLLB8fLCwfHywFlR8sLB8fLCwAAAH/tgVKAEoF3gADABW9AAMBLwABAAMBMAABAC/tAS/tMTATIzUzSpSUBUqUAAAB/vsFSgEEBrgAEQAzQBsJEC4RAQ8RHxECEQYMCRAHEZ0AAAcNnQsFnQcAL+3e7RI5L+0ROTkBL87MXV05OTEwAQYHBiMjNTMyNyYjIzUzMhc3AQRfi6dNKyx6wW6PLzN+zVAGAjk6RV9kTF+AKQAAAv7+BKcBAgaPABAAGQArQBUAnBEWBRYIDJwWDp0UBRidAwidBwMAL9ztEP053u0BL/3OEjkQ3u0xMAEUBiMiJwYHNTY3Njc2MzIWBzQmIyIVFDMyAQJPPmEnSqVnKyEhL1ZJYk0uJ0ZWRQXXQktRxy1mGFhYV2NpUyk9Q1n///4i/lkB3gAhAxcF6AAA+bYAHUAUAC8MAQxAKzE3DEAgIzcMQBQVNwwALisrK101AAAB/5cHRABpB4gADwAhuQAPAQBACgcIBwIADwoFDQIAL83c3d7NEN7NAS8azDEwEwYjIiYjIgc1NjMyFjMyN2kcHw4+EBIpHB8MQBAgGwddFhkcKxcZGwAAAgAyBJEBmwaGABYAIQAlQBIFD5weFwCcCROdGyCdCwSdBQsAL97tEP3e7QEv7TPc/cYxMAEUBwYjNTI3NjUGIyInJjU0NzYzMhcWBzQnJiMiBhUUMzIBm3ldk303ZhklPywwJys2Ty0kVBQWHRskUCIFhYY+MF8QHloQHyM8NzM2X0sVHyMoLRsxAAABACgEkQMhBhUAGwAdQA0DnBgbDgCdGw4LnRAOAC/W7RDe7QEvzt7tMTABISI1NDc2NzY3NjMyFxUmIyIHBgcGBwYVFDMhAyH9wruNPhUZQjQeITI0HAkoLyInTT1FAlcEkWdIKRINEEY3SV9VLjYVGRQQChL///6EBJEBfQYVABcF8v5cAAAAAv8LBUoA9AcRABcAGwAtQBUbGRkOFgCcFRIKCJwLDhoYFgoEnRAAL+3cwNbNAS8z7TLeMu0yEjkvzTEwExQHBiMiJyY1NDczFQYVFDMyNTQnNTMWJyM1M/RHQmpuQkYLXRGdnxFcC9Y7OwYkaTs2ODpoNUcHNz96ej83B0h+OwAGADIAAASbBowACAARABgAHwAmAC0AyEB1ICcnIR8PEQAGCRASIBIwEgMSGRkTBwARARFBE1ETAhATIBMwEwMTAB8BHyEtKCUpKRwkDgwBBAsfFy8XPxcDFxsbFgMPDAEMHxY/Fk8WAxZeHAEPHC8cAhwkKiYaGAoFKCgmGgUKGBoIAhANBAErIx0VDgEIAD/d1t3WzREXOS/d1s0Q1s0BGS8yMjIyMtYY3dZdXd1d1l3NETkv3V3W3cARORESOS/NGRDWGN3WXd1dXdZdzRE5L91d1t3AETkREjkvzTEwISETEQMBAQMREwEBFxEHIScRNwcRIREnCQMXESERNwcRIREnNxcnBxcRMxEEm/uX5OQCNAI15Jb+Gf4a0qADaaBolv4zlgF8ATT+zP7NfgFrJVj++1japqalSrYBBQJMAQMCOP3I/v39tANPAer+Fu39iLe3Anjtq/zaAyarAX3+gwE0/syM/PIDDoxh/RgC6GHf36qqUf0yAs4A////WP6mAKj/9QAXBfcAAPlcAAL/WAVKAKgGmQADAAcALkAZAwcFAQQGAARADxg3BAIGAAQCBgQHAwUBBwAvzd7NEhc5AS/N3ivNEhc5MTATByc3FycHF6ipp6lnaGhoBfKop6inaGloAP///v7+XQECAEUCFwXuAAD5tv//AFz+WAlGBIYCNgOxAAAANwMPBZoDIQEXAw0Fmv7BACpAGQQASUgxMiUDAgEAPUAxMiUEAEkBSQMCAT0ALjU1NS5dNQErNTU1KzX//wBc/lgKXgSGAjYDsgAAADcDDwWaAyEBFwMNBZr+wQAqQBkFAFBPMjMlBAMCAERHMjMlBQBQAVAEAwJEAC41NTUuXTUBKzU1NSs1////uv7BB2gEhgI2A7MAAAA3Aw8DwAMhARcDDQPA/sEAKkAZBAA5OCEiJQMCAQAtMCEiJQQAOQE5AwIBLQAuNTU1Ll01ASs1NTUrNf///7r+wQh9BIYCNgO0AAAANwMPA8ADIQEXAw0DwP7BACpAGQUAQ0IhIiUEAwIANzohIiUFAEMBQwQDAjcALjU1NS5dNQErNTU1KzX//wBc/lgI4QS7AjYDuQAAADcDDQVvBCcBFwMNBW/+wQAiQBUDAEFABwAlAgA9PAcAJQMAQQFBAj0ALjUuXTUBKzUrNf//AFz+WAlQBJQCNgO6AAAANwMNBhUEAAEXAw0GFf7BACJAFQQAS0oILSUDAEdGCC0lBABLAUsDRwAuNS5dNQErNSs1////uv7BBbQEPwI2A7sAAAA3Aw0A2AOrARcDDQDY/sEAIkAVAwA3Ni4uJQIAMzIuLiUDADcBNwIzAC41Ll01ASs1KzX///+6/sEGIwQ/AjYDvAAAADcDDQDYA6sBFwMNANj+wQAiQBUEAEFANzclAwA9PDc3JQQAQQFBAz0ALjUuXTUBKzUrNf//AFL+WARGBWkCNgPJAAAANwMNAPAE1QEXAw0BVAAAACJAFQIAMDAjHyUBACwrDw8lAjABDywBLAAuXTUuNQErNSs1//8AXP5YBLAFQAI2A8oAAAA3Aw0A8gSsARcDDQDI/9gALUAVA09ACQs3AE9ONDwlAgBLShYWJQNPuP/AtQkLN08CSwAuNS4rNQErNSsrNQD///+6/sEEcQTsAjYDywAAADcDDQFhBFgBFwMNAWH+wQAiQBUCACMiDAwlAQAfHgwMJQIAIwEjAR8ALjUuXTUBKzUrNf///7r+wQPdBJMCNgPMAAAANwMNALgD/wEXAw0AuP7BACJAFQMAREMZGSUCAEA/GRklAwBEAUQCQAAuNS5dNQErNSs1AAMAav6YArgDBAAYABwAIABzQEJWAQE3AUcBAmMVcxUCHBoeFwBQIAExIEEgAhAgICACICATAwYMACITKgIGGx8fARoeAK8DFwIYGAIMD68LCQKvAQgAP+0vM+0yETkvEjk57S/AEjkvwAEvxO0Q1sQSORI5L11dXRI5zd7NMTAAXQFdXSUFNTcmJjU0NjMyFxUjJiMiBwYVFBcWFzcDIxEzAyMRMwK4/eCbU3ashm5jDU9tOykwWkNbsItKSpVKSq6ouy8QiVSFohK7FxsfN00wJAs3/TABIv7eASIAAAT/Yv5YBFIDBAAYABwAIAAuAGNAIXojAWkjAUgjARwaHiAgKCHSADAIKNINEhwgIAQaHiWvFbgBO0AVDa8MDSyvfAgBawgBXQgBGQgBCAQGAD8zXV1dXe0/7T/tL8ASOS/AAS/O7TkQ1u0ROS/N3s0xMABdXV0BFAcGIyInJicGBwYHNSQTNjc2NzYzMhcWAyMRMwMjETMTNCcmIyIGFRQXFjMyNgRSWFySfGRPJVuBluQBEYMcLywhacqhdXvvSkqVSkreMjxnTWM5PmJLYQFSlWRpRzhN9I6kPs9AASY/jodF3nV7/IQBIv7eASIBjl1JWFxMZUZLVv//AFz+wQNaA7wCNgOpAAABFwMNAAD+wQARQAkBABsaCg8lARsALjUBKzUA//8ARv7BBF4DzQI2A6oAAAEXAw0AAP7BABFACQEAISAKEiUBIQAuNQErNQAAAgC2BkgDqAgBAAMABwBKQDADAgABAQcFXwMBTgMBHwMvAz8DAwNQAWABAkEBARABIAEwAQMBB88FASEFARAFAQUAL11dXd3WXV1dzV1dXQEvzTkvzd3NMTABIyczASE1IQKBgcbfAY/9DgLyBynY/kd8AAACALYFNwOoBvAAAwAHADxAJQMCAAEBBwVeAwE/A08DAi4DAQ8DHwMCA04AXgACLwA/AAIABwUAL93WXV3NXV1dXQEvzTkvzd3NMTABIyczASE1IQKBgcbfAY/9DgLyBhjY/keaAAACALYGSAOoCAEAAwAHAEZALgMAAgEBBwVOA14DAh8DLwM/AwMDQAFQAWABAzEBARABIAECAQfPBQEQBSAFAgUAL11d3dZdXV3NXV0BL805L83dzTEwAQcjNwEhNSEDDcaBaAF6/Q4C8ggB2Nj+R3wAAgC2BTcDqAbwAAMABwA+QCYDAAIBAQcFXgMBPwNPAwIuAwEPAx8DAgNfAQFOAQEvAT8BAgEHBQAv3dZdXV3NXV1dXQEvzTkvzd3NMTABByM3ASE1IQMNxoFoAXr9DgLyBvDY2P5HmgADAP0GSANjCAEAAwAHAAsAZkBCeAEBAyYAAQcAFwACAALQAeABAsEBAbABAaEBAYABkAECAQEIBBQGChQIXgABPwBPAAIAfwIBAgpwBgEGRATPCAEIAC9dwP5dwNZdzV1dAS/t3u0SOS9dXV1dXc3dXV3NMTAAXQEHIzcBIzUzBSM1MwM1xoFoAQ3Jyf5jyckIAdjY/ke5ubkAAwD9BTcDYwbwAAMABwALAFNANAMXAAEAAnABgAECAQEIBBQGChQIXwMBTgMBPwMBLgMBDwMfAwIDAAIQAgICCnAGAQZEBQgAL8D+XcDeXc1dXV1dXQEv7d7tEjkvXc3dXc0xMAEHIzcBIzUzBSM1MwM1xoFoAQ3Jyf5jyckG8NjY/kfDw8MAAAIA5gZIA3kIAQADABUAZ0BDlhIBhRIBVhJmEnYSAwMAAgEBDAQVDQxfAwEDHwEvAQIOAQH+AQHPAd8B7wEDARUKABABEBMMzwcBEAcgB1AHYAcEBwAvXV3A3dxdzcDWXV1xcc1dAS/N3M0SOS/N3c0xMABdXV0BByM3BQYGIyImIyIHIzY2MzIWMzI3AzXGgWgBIwtwUDugHEEKhgpxUDmiHEIJCAHY2PxRbE1NUWxNTQACAKEFJAPAB3wAAwAXAFFAMpQTpBMCRhMBFxMnEzcTAwMAAgEBDAQpFw0pDF8DAT4DTgMCHwMvAwIDARcKvREVvQwGAC/G/dztxtbNXV1dAS/t3O0SOS/N3c0xMABdXV0BByM3AQIjIicmIyIHIzY3NjMyFxYzMjcDNcaBaAFqFOJjU1kyUwmMBjZBeF5WWTRWBwd82Nj+5P7ITlSmgVJkTVCiAAMA5gZIA3kIAQADAAcAGQB4QE+WFgGFFgFWFmYWdhYDRRMBFhMmEzYTA0kKAToKARkKKQoCABRgAnACAgIGFAQEEAgZERAHcAMBA0QEcAEBARkOABQBFBcQzwsBEAsgCwILAC9dXcDd3F3NwNZdwP1dwAEvzdzNEjkv7d5d7TEwAF1dXV1dXV1dASM1MwUjNTMFBgYjIiYjIgcjNjYzMhYzMjcDY8nJ/mPJyQGzC3BQO6AcQQqGCnFQOaIcQgkHSLm5ufxRbE1NUWxNTQAAAwChBSQDwAd8AAMABwAbAHBASZUXpRcCRxcBNhcBFxcnFwIDFAFFEwEXEycTNxMDSQkBOgkBGQkpCQIMCQEAFAIGFAQEEAgpGxEpEAdwAwEDRAQBGw69FRm9EAoAL8b93O3G1sD9XcABL+3c7RI5L+3e7TEwAF1dXV1dXV1dXV1dASM1MwUjNTMBAiMiJyYjIgcjNjc2MzIXFjMyNwNjycn+Y8nJAfoU4mNTWTJTCYwGNkF4XlZZNFYHBrnDw8P+5P7ITlSmgVJkTVCiAAACAcQGSAMhCAEAAwAHAFpAPhkHAQgHAQcEBm4FAT8FTwVfBQMFAhRhAAEwAEAAUAADAHADAQNEAV8HAU4HAR8HLwc/BwMHzwYBEAYgBgIGAC9dXd1dXV3W7V0BL11d7dRdXc3dzTEwXV0BIzUzFwcjNwKa1taHxoFoB1Kv4djYAAIBwQUWA2cHrgADAAcAIEAPBwQGBQIUAHADAQNEAQQGAC/d1u1dAS/t1M3dzTEwASM1MxMBIxMCmtbWzf7vlbMG68P+3v6KAXYAAgDaBlQDhQgBAAMACgB7QFFHCQEWCSYJAgYFBwQKAhSJCQE2CUYJAgkIAAAKBwgJBgpwAwEDRHABAWEBAVABAQEIjgoBbwp/CgJOCl4KAh8KLwo/CgMKQQYBEAYgBjAGAwYAL11d3V1dXV3A1l1dXe1dERI5AS/NzjkvEjldXe0QzRE5OTEwAF1dASM1MxMHIyczFzcCmtbW6/i7+KWurwdSr/8Ara1ZWQACANoFEQOFB64AAwAKADBAFwUJBgMHBAoDFAEBCgcICQYKA0QBCAoGAC/cwNbtERI5AS/Nzjkv7RDNERc5MTABIzUzEwMjAzMTEwKa1tbr5OPkm7i5BuvD/t7+hQF7/wABAAAAAwC2BkgDqAgBAAMABwALADFAGwoGFAQLABQCBAdwAgECRAEABAEECxAJIAkCCQAvXd3eXcD+XcABL979xhD9xjEwASM1MwUjNTMBITUhA2PJyf5jyckB4v0OAvIHSLm5uf5HfAAAAwC2BTcDqAdKAAMABwALACdAEwoGFAQLABQCBAdwAgECRAEECwkAL93ewP5dwAEv3v3GEP3GMTABIzUzBSM1MwEhNSEDY8nJ/mPJyQHi/Q4C8gaHw8PD/e2aAAABAJf+WQQ6BdEAHAB7QAsBAyoRCQ8PGxkVHLj/4EALCwsGOxxnHhcbFBK4//S0EBAGOxK4//xACwwMBjsSBw0NBjsSuP/CQBsLCwY7EmQdFzUZGRsWNRMDGzUBEQgLDb4JBw0APzPtMj/A7T/tETkv7QEQ/isrKyv9wBD+K8DGEjkvzDPtMjEwISEWFRQHBiMiJzUzFjMyNTQnIREhFSERIRUhESEEOv74BE9UkmFQCUpEtgT9/gOj/SMCq/1VAt06H5VaXxigIqYlRgXRsP5osP3XAAIAO/5ZBAAEfAApADAA8kAjNS5FLgJFAwE2AwEnAwF2JwFkJwFYHgENDyodFRsbAQkqGgC4//a0EBAGOwC4//K0Dw8GOwC4//S0DA0GOwC4/+RAKAsLBjvvAAEAMj8yATABGiEUEBAGOyEWDw8GOyEQDQ0GOyEcDAwGOyG4/9xAPwsLBjvBIQGQIaAhsCEDISsNAYsJAXoJAWsJAVkJASsJOwlLCQMNCR0IKjwBCAEIAQUsPSUEBT8dCRYZvhUTDQA/M+0yP+0/7RE5OS8vEO0REjk5XV1dXV1dAS9dXSsrKysr7TJdEN5dKysrK+3GETkvzDPtMjEwAF1dXQFdXV1dASEUFxYzMjczFQYHBgcWFRQHBiMiJzUzFjMyNTQnJicmETQ3NjMyFxYVJwIhIgcGBwQA/PpbYLbSowteKUtAA09UkmFQCUpEtgT+hoCBjPjfdG23CP70jFRPDAIbuWlvh80lDhkJLByVWl8YoCKmDUYNnJUBAv+jsoyE6yoBNlhTiwACAXr+WQLk/70ACwAXAEZAMOcL9wsCtwrHCtcKA+gB+AECAAwGEgkQDyAPAmAPcA+ADwMxDwEADxAPIA8DDxUDDQA/3d5dXV1xzQEvzd7NMTAAcXFxBRQGIyImNTQ2MzIWBzQmIyIGFRQWMzI2AuRoTUxpaUxNaFc0Kio0NCoqNPVNZWZMTGZlTis8PCsrOjsA////9v5ZBNYF0QI2ACQAAAEWBhsyAAANtwMCABELAAMlASs1NQD//wA6/lkDswR4AjYARAAAARYGG8QAAA23AwIAPTcZNSUBKzU1AP//AJcAAASJB1ACNgAlAAABFwDaABQBdQALtgMANTQdFiUBKzUA//8AiP/hBDEGFAI2AEUAAAEWANpkAAALtgIAHx4bGyUBKzUA//8Al/6CBIkF0QI2ACUAAAEWAksUAAALtgMANTQtJSUBKzUA//8AiP6CBDEGFAI2AEUAAAEWAksyAAALtgIAHx4QECUBKzUA//8Al/6fBIkF0QI2ACUAAAEXANgAPPloABNACwMANQEDADU0BwAlASs1AF01AP//AIj+nwQxBhQCNgBFAAABFwDYABT5aAATQAsCAB8BAgAfHhUNJQErNQBdNQD//wBC/lkErAgBAjYAZAAAARcAjQBkAXUAC7YBAExMDAwlASs1AP//ADv+WQOOBowCNgBvAAABFgCN2AAAC7YBAD09DAwlASs1AP//AJcAAAUtB1ACNgAnAAABFwDaADwBdQALtgIAHx4WDyUBKzUA//8AO//hA+QGFAI2AEcAAAEWANrYAAAQQAoCACgBACgnFBQlAStdNf//AJf+ggUtBdECNgAnAAABFgJLPAAAC7YCAB8eFw8lASs1AP//ADv+ggPkBhQCNgBHAAABFgJLAAAAC7YCACgnDgAlASs1AP//AJf+nwUtBdECNgAnAAABFwDYAFD5aAATQAsCAB8BAgAfHgcAJQErNQBdNQD//wA7/p8D5AYUAjYARwAAARcA2AAA+WgAE0ALAgAoAQIAKCchASUBKzUAXTUA//8Al/5ZBS0F0QI2ACcAAAEXBKYBHgAAAAu2AgAeIBcPJQErNQD//wA7/lkD5AYUAjYARwAAARcEpgDwAAAAC7YCACcpDgAlASs1AP//AJf+WQUtBdECNgAnAAABFwDWAFD5SAALtgIAIh4HACUBKzUA//8AO/5ZA+QGFAI2AEcAAAEXANYAKPlIAAu2AgArJw4AJQErNQD//wCXAAAEOggBAjYAKAAAARYGCTwAAA23AgEAERABAiUBKzU1AP//ADv/5gQABvACNgBIAAABFgYKAAAADbcDAgAxMAMNJQErNTUA//8AlwAABDoIAQI2ACgAAAEWBgs8AAANtwIBABEQAQIlASs1NQD//wA7/+YEAAbwAjYASAAAARYGDAAAAA23AwIAMTADDSUBKzU1AP//AJf+WQQ6BdECNgAoAAABFwDWADz5SAALtgEAEAwACyUBKzUA//8AO/5ZBAAEfAI2AEgAAAEXANYAMvlIAAu2AgAwLAMNJQErNQD//wCX/mwEOgXRAjYAKAAAARcA1wAo+UgAE0ALAW8ZAQEAGQwACyUBKzUAXTUA//8AO/5sBAAEfAI2AEgAAAEXANcAHvlIABNACwJvOQECADksAw0lASs1AF01AP//AJf+WQQ6B9kCNgYZAAABFwDZADwBdQALtgEAKR0TFCUBKzUA//8AO/5ZBAAGZAI2BhoAAAEWANkNAAALtgIAPTElJSUBKzUA//8AlwAABBIHUAI2ACkAAAEXANoAPAF1AAu2AQALCggJJQErNQD//wAdAAAC1AdQAjYASQAAARcA2v+wAXUALUAhAc8a/xoCnxqvGgJvGn8aAj8aTxoCHxovGgIBABoaCAglASs1AF1dXV1dNQD//wBC/+ME9Qc8AjYAKgAAARcA2AClAWsAC7YBADIxDAwlASs1AP//ADv+WQPkBdECNgBKAAABFgDY/QAAC7YCADU0ICslASs1AP//AJcAAATQB1ACNgArAAABFwDaAIwBdQALtgEADQwHCiUBKzUA//8AiAAAA/YHUAI2AEsAAAEXANoAZAF1AAu2AQAYFxMTJQErNQD//wCX/oIE0AXRAjYAKwAAARcCSwCMAAAAC7YBAA0MBwolASs1AP//AIj+ggP2BhQCNgBLAAABFgJLFAAAC7YBABgXDQAlASs1AP//AJcAAATQB1ACNgArAAABFwCOAIwBdQANtwIBABEMBwolASs1NQD//wCIAAAD9gdQAjYASwAAARcAjgBkAXUADbcCAQAcFxMTJQErNTUAAAH//v5ZBNAF0QAcAMWzGgIUALj/8rQQEAY7ALj/4rQPDwY7ALj/+rQMDAY7ALj//LQNDQY7ALj/5kAZCwsGOwBlHkAeAQ8eAQUHKhUNExMWGQMUFrj/8rQQEAY7Frj/+EALDw8GOxYKDQ0GOxa4/8RAMAsLBjuAFgFxFgFAFlAWYBYDMRYBABYQFiAWAxZkHRo1AwMWGxgDBQEWCA4Rvg0LDQA/M+0yP8DNP8ASOS/tARD+XV1dXV0rKysr/cASOS/MM+0yXV0Q/isrKysr/cAxMCEjESERMxYVFAcGIyInNTMWMzI1NCcjETMRIREzBNDG/VN/Bk5TkmFQCUpErgOpxgKtxgLZ/TtWF5VaXxigIqYsPwXR/bgCSAAAAf/h/lkD9gYUACQArLV5BAECGgC4/+C0EBAGOwC4//i0DQ0GOwC4/+y0DAwGOwC4/+RAEwsLBjsAbyYKDCoaEhgYGx4IGhu4//pACw8PBjsbBg0NBjsbuP/KQDILCwY7gBuQGwJxGwFAG1AbYBsDMRsBABsQGyAbAxtuJQgGQh4gBB0BCQEbCBMWvhIQDQA/M+0yP8DNPz8z7TIBEP5dXV1dXSsrK/3AEjkvzDPtMhD+KysrK+0xMF0hIxE0JyYjIgcRMxYVFAcGIyInNTMWMzI1NCcjETMRNjMyFxYVA/a8JC2DgqB7Bk5TkmFQCUpErgObvK6ltVpQAny3Q1OH/NJiC5VaXxigIqYsPwYU/c2bfW68AP//AJf+WQTQBdECNgArAAABFwDZAIL5cgAZQBAB3xgBABhQGAIBABgMBQAlASs1AF1dNQD//wCI/lkD9gYUAjYASwAAARcA2QAK+XIAGUAQAd8jAQAjUCMCAQAjFw0AJQErNQBdXTUA////7f5sAwwF0QI2ACwAAAEXANf/TPlIABNACwFvGQEBABkMAQAlASs1AF01AP///1f+bAJ2BdsCNgBMAAABFwDX/rb5SAATQAsCbxUBAgAVCAEAJQErNQBdNQD//wBMAAACsggBAjYALAAAARcGDf9PAAAAEEAJAwIBABUQBAklASs1NTX///+zAAACGQbwAjYA1QAAARcGDv62AAAAEEAJAwIBAA0IAgMlASs1NTX//wCXAAAE1AgBAjYALgAAARcAjQBkAXUAC7YBAA0NBwklASs1AP//AIgAAAQmCAECNgBOAAABFwCNAAABdQALtgEADQ0HCSUBKzUA//8Al/6CBNQF0QI2AC4AAAEWAktkAAALtgEADQwEASUBKzUA//8AiP6CBCYGFAI2AE4AAAEWAksAAAALtgEADQwEASUBKzUA//8Al/6fBNQF0QI2AC4AAAEXANgAZPloABNACwEADQEBAA0MBAElASs1AF01AP//AIj+nwQmBhQCNgBOAAABFwDYAAD5aAATQAsBAA0BAQANDAQBJQErNQBdNQD//wCX/oID9gXRAjYALwAAARYCSxQAAAu2AQAHBgEAJQErNQD//wB6/oIBUAYUAjYATwAAARcCS/62AAAAC7YBAAUEAQAlASs1AP//AJf+ggP2BzwCNgAvAAAANgJLFAABFwDYADwBawAVQA4CAAsKAQAlAQAHBgEAJQErNSs1AP///3b+ggJoBzwCNgBPAAAANwJL/rYAAAEXANj+wAFrADhAKgLPCf8JAp8JrwkCXwlvCX8JAz8JTwkCHwkvCQICAAkIAQAlAQAFBAEAJQErNSs1AF1dXV1dNf//AJf+nwP2BdECNgAvAAABFwDYABT5aAATQAsBAAcBAQAHBgEAJQErNQBdNQD///92/p8CaAYUAjYATwAAARcA2P7A+WgAE0ALAQAFAQEABQQBACUBKzUAXTUA//8Al/5ZA/YF0QI2AC8AAAEXANYAKPlIAAu2AQAKBgEAJQErNQD///+Q/lkCOwYUAjYATwAAARcA1v62+UgAC7YBAAgEAQAlASs1AP//AJcAAAWTCAECNgAwAAABFwCNAMgBdQALtgEADg4IDCUBKzUA//8AiAAABjgGjAI2AFAAAAEXAI0BLAAAAAu2AQAwMA8OJQErNQD//wCXAAAFkwdQAjYAMAAAARcA2gDwAXUAC7YBAA4NCAwlASs1AP//AIgAAAY4BdsCNgBQAAABFwDaASwAAAALtgEAMC8PDiUBKzUA//8Al/6CBZMF0QI2ADAAAAEXAksA8AAAAAu2AQAODQgMJQErNQD//wCI/oIGOAR8AjYAUAAAARcCSwEsAAAAC7YBADAvDw4lASs1AP//AJcAAATAB1ACNgAxAAABFwDaAIwBdQALtgEACwoFCSUBKzUA//8AiAAAA/YF2wI2AFEAAAEWANpQAAALtgEAGBcTEyUBKzUA//8Al/6CBMAF0QI2ADEAAAEXAksAjAAAAAu2AQALCgQAJQErNQD//wCI/oID9gR8AjYAUQAAARYCSxQAAAu2AQAYFw0AJQErNQD//wCX/p8EwAXRAjYAMQAAARcA2ACM+WgAE0ALAQALAQEACwoEACUBKzUAXTUA//8AiP6fA/YEfAI2AFEAAAEXANgAFPloABNACwEAGAEBABgXDQAlASs1AF01AP//AJf+WQTABdECNgAxAAABFwDWAIz5SAALtgEADgoEACUBKzUA//8AiP5ZA/YEfAI2AFEAAAEXANYAFPlIAAu2AQAbFw0AJQErNQD//wBC/+EFZwgBAjYAMgAAARcGDwCqAAAADbcDAgA3LhUVJQErNTUA//8AOf/hBB8HfAI2AFIAAAEWBhAAAAANtwMCACUcCQklASs1NQD//wBC/+EFZwgBAjYAMgAAARcGEQCqAAAAEEAJBAMCADsyFRUlASs1NTX//wA5/+EEHwd8AjYAUgAAARYGEgAAABBACQQDAgApIAkJJQErNTU1//8AQv/hBWcIAQI2ADIAAAEXBgkAqgAAAA23AwIALy4VFSUBKzU1AP//ADn/4QQfBvACNgBSAAABFgYKAAAADbcDAgAdHAkJJQErNTUA//8AQv/hBWcIAQI2ADIAAAEXBgsAqgAAAA23AwIALy4VFSUBKzU1AP//ADn/4QQfBvACNgBSAAABFgYMAAAADbcDAgAdHAkJJQErNTUA//8AlwAABEMIAQI2ADMAAAEXAI0AKAF1AAu2AgAhIRgRJQErNQD//wCI/mQEMQaMAjYAUwAAARYAjSgAAAu2AgAfHw4OJQErNQD//wCXAAAEQwdQAjYAMwAAARcA2gAoAXUAC7YCACEgGBElASs1AP//AIj+ZAQxBdsCNgBTAAABFgDaKAAAC7YCAB8eCQAlASs1AP//AJcAAAUYB1ACNgA1AAABFwDaACgBdQALtgIAISAYESUBKzUA//8AiAAAAtgF2wI2AFUAAAEWANqIAAALtgEAFBQLCyUBKzUA//8Al/6CBRgF0QI2ADUAAAEWAktkAAALtgIAISAEASUBKzUA//8AiP6CAtgEXQI2AFUAAAEWAkuIAAALtgEAFBQICCUBKzUA//8Al/6CBRgHPAI2ADUAAAA2AktkAAEXANgAPAFrABVADgMAJSQYESUCACEgBAElASs1KzUA//8ANP6CAyYF0QI2AFUAAAA2AkuIAAEXANj/fgAAABVADgIAGBcKEiUBABQUCAglASs1KzUA//8Al/6fBRgF0QI2ADUAAAEXANgAjPloABNACwIAIQECACEgBAElASs1AF01AP//ADT+nwMmBF0CNgBVAAABFwDY/375aAATQAsBABQBAQAUEwoSJQErNQBdNQD//wBN/+UEQgdQAjYANgAAARcA2gAoAXUAC7YBADU0GholASs1AP//AEP/5QNrBdsCNgBWAAABFgDaugAAC7YBADg3HR0lASs1AP//AE3+ggRCBewCNgA2AAABFgJLFAAAC7YBADU0AAAlASs1AP//AEP+ggNrBHgCNgBWAAABFgJLnAAAC7YBADg3AAAlASs1AP//AE3/5QRCCAECNgA2AAABFgYTKAAAEkALAgEwNQEANTQaGiUBK101Nf//AEP/5QNrB64CNgBWAAABFgYUugAAEkALAgFQOAEAODcdHSUBK101Nf//AE3/5QRCCAECNgA2AAABFgYVKAAADbcCAQA7OBoaJQErNTUA//8AQ//lA2sHrgI2AFYAAAEWBha6AAANtwIBAD47HR0lASs1NQD//wBN/oIEQgdQAjYANgAAADcA2gAUAXUBFgJLAAAAFUAOAgA5OAAAJQEANTQaGiUBKzUrNQD//wBD/oIDawXbAjYAVgAAADYA2roAARYCS5wAABVADgIAPDsAACUBADg3HR0lASs1KzUA/////wAABK0HUAI2ADcAAAEXANoAKAF1AAu2AQAJCAEGJQErNQD//wAV/+oCqgdQAjYAVwAAARcA2v7UAXUAC7YBAB0dCAglASs1AP/////+ggStBdECNgA3AAABFgJLKAAAC7YBAAkIAAclASs1AP//ABX+ggKqBZ4CNgBXAAABFgJLiAAAC7YBAB0dDg4lASs1AP/////+nwStBdECNgA3AAABFwDYACj5aAATQAsBAAkBAQAJCAAHJQErNQBdNQD//wAV/p8DCAWeAjYAVwAAARcA2P9g+WgAE0ALAQAdAQEoHRwGCyUBKzUAXTUA//////5ZBK0F0QI2ADcAAAEXANYAKPlIAAu2AQAMCAAHJQErNQD//wAV/lkDIQWeAjYAVwAAARcA1v+c+UgAC7YBACAcAAAlASs1AP//AIX+gAS6BdECNgA4AAABFwCOAGT5aAAXQA0CAQAjAQIBACMeAAAlASs1NQBdNTUA//8AgP6AA+4EXQI2AFgAAAEXAI4AAPloABdADQIBAB8BAgEAHxoLACUBKzU1AF01NQD//wCF/mwEugXRAjYAOAAAARcA1wBk+UgAE0ALAW8rAQEAKx4AACUBKzUAXTUA//8AgP5sA+4EXQI2AFgAAAEXANcAAPlIABNACwFvJwEBACcaCwAlASs1AF01AP//AIX+WQS6BdECNgA4AAABFwDWAGT5SAALtgEAIh4AACUBKzUA//8AgP5ZA+4EXQI2AFgAAAEXANYAFPlIAAu2AQAeGgsAJQErNQD//wCF/+EEuggBAjYAOAAAARYGD24AAA23AgEAKyIHFyUBKzU1AP//AID/4QPuB3wCNgBYAAABFgYQAAAADbcCAQAnHgwZJQErNTUA//8Ahf/hBLoIAQI2ADgAAAEWBhduAAAQQAkDAgEAJyYHFyUBKzU1Nf//AID/4QPuB0oCNgBYAAABFgYYFAAAEEAJAwIBACMiDBklASs1NTX////4AAAEzgfBAjYAOQAAARcA1wBGAWEAE0ALAQAUAQEAFAcDACUBKzUAXTUA//8ABgAAA/YGYAI2AFkAAAEWANfYAAALtgEAFAcDACUBKzUA////+P6CBM4F0QI2ADkAAAEWAksyAAALtgEACAcCASUBKzUA//8ABv6CA/YEXQI2AFkAAAEWAkvEAAALtgEACAcCASUBKzUA//8AGgAABx0HUAI2ADoAAAEXANoBcgF1AAu2AQAODQkKJQErNQD//wAeAAAF0gXbAjYAWgAAARcA2gDSAAAAC7YBAA4NCQolASs1AP//ABr+ggcdBdECNgA6AAABFwJLAWgAAAALtgEADg0JCiUBKzUA//8AHv6CBdIEXQI2AFoAAAEXAksAyAAAAAu2AQAODQkKJQErNQD//wAIAAAEnQdQAjYAOwAAARcA2gA8AXUAC7YBAA0MBgolASs1AP//AAoAAAPsBdsCNgBbAAABFgDa7AAAC7YBAA0MBgolASs1AP//AAgAAASdB1ACNgA7AAABFwCOADwBdQANtwIBABEMBgolASs1NQD//wAKAAAD7AXbAjYAWwAAARYAjuwAAA23AgEAEQwGCiUBKzU1AP////UAAASpB1ACNgA8AAABFwDaADwBdQALtgEACgkFACUBKzUA//8ABv5kA/YF2wI2AFwAAAEWANrsAAALtgEACQgEACUBKzUA//8APAAABEwIAQI2AD0AAAEXANYAMgF1ABNACwEADgEBAA4KBQYlASs1AF01AP//ADEAAANmBowCNgBdAAABFgDWsAAAC7YBAA4KBQYlASs1AP//ADz+ggRMBdECNgA9AAABFgJLMgAAC7YBAAsKAQAlASs1AP//ADH+ggNmBF0CNgBdAAABFgJLnAAAC7YBAAsKAQAlASs1AP//ADz+nwRMBdECNgA9AAABFwDYABT5aAATQAsBAAsBAQALCgEAJQErNQBdNQD//wAx/p8DZgRdAjYAXQAAARcA2P+c+WgAE0ALAQALAQEACwoBACUBKzUAXTUA//8AiP6fA/YGFAI2AEsAAAEXANgAAPloABNACwEAGAEBABgXDQAlASs1AF01AP///9H/6gKqB1ACNgBXAAABFwCO/tQBdQANtwIBACEcCAklASs1NQD//wAeAAAF0gceAjYAWgAAARcA2wDSAGQADbcCAQATDQMDJQErNTUA//8ABv5kA/YHHgI2AFwAAAEWANvYZAANtwIBAA4IBAAlASs1NQAAAwA6/+EDswdaAA4ALgA5AP5ALQUoAfUoAecoAdYoAcom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AXAqASq4/8CyCRE3uP+otCoqBgYlASsrXTU1Xf//AAAAAAaHB9wANwArAbcAAAEXB37/XwAAACRACw8sfywCAgFwKgEquP/AsgkRN7j/qLQqKgYGJQErK101NV3//wCMAAABTQaMAjYByAAAARcHYP9+AAAAC7YBAA0OAgMlASs1AP//AIwAAAFNBowCNgHIAAABFwea/34AAAALtgEADQ4CAyUBKzUA////2gAAAgwGjAI2AcgAAAEXB2//fgAAACCyAgEGuP/Asw4QNwa4/8BACQkLNwAGBgIDJQErKys1Nf///9oAAAIMBowCNgHIAAABFwd8/34AAAAgsgIBBrj/wLMOEDcGuP/AQAkJCzcABgYCAyUBKysrNTX////4AAACKgaMAjYByAAAARYHcJwAACCyAgEGuP/Asw4QNwa4/8BACQkLNwAGBgIDJQErKys1Nf////gAAAIqBowCNgHIAAABFgd9nAAAILICAQa4/8CzDhA3Brj/wEAJCQs3AAYGAgMlASsrKzU1////YQAAAoAH3AI2AcgAAAEXB3H+wAAAAA23AgEAISICAyUBKzU1AP///2EAAAKAB9wCNgHIAAABFwd+/sAAAAANtwIBACEiAgMlASs1NQD//wAAAAADRwaMADcALACoAAABFwdg/vAAAAAbtA8YAQEWuP/AsgkWN7j/urQWFgYGJQErKzVdAP//AAAAAANHBowANwAsAKgAAAEXB5r+8AAAABu0DxgBARa4/8CyCRY3uP+6tBYWBgYlASsrNV0A//8AAAAABJsGjAA3ACwB/AAAARYHb6QAABCxAgG4/9m0DAwGBiUBKzU1//8AAAAABJsGjAA3ACwB/AAAARYHfKQAABCxAgG4/9m0DAwGBiUBKzU1//8AAAAABF8GjAA3ACwBwAAAARYHcKQAABhAEA8czxwCAgEgDAEADAwGBiUBK101NV3//wAAAAAEXwaMADcALAHAAAABFgd9pAAAGEAQDxzPHAICASAMAQAMDAYGJQErXTU1Xf//AAAAAAR+B9wANwAsAd8AAAEXB3H/XwAAAB21DywBAgEquP/AsgkWN7j/urQqKgYGJQErKzU1XQD//wAAAAAEfgfcADcALAHfAAABFwd+/18AAAAdtQ8sAQIBKrj/wLIJFje4/7q0KioGBiUBKys1NV0A//8AOf/hBB8GjAI2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ARYHfaQAAB+3AEovSgICATy4/8CyCQo3uP91tDw8JSUlASsrNTVdAP//AAAAAAceB9wANwCfAaMAAAEXB3H/XwAAABeyAgFYuP/AQAkQETcHWFglJSUBKys1NQD//wAAAAAHHgfcADcAnwGjAAABFwd+/18AAAAXsgIBWLj/wEAJEBE3B1hYJSUlASsrNTUA//8AO//hA+gGmAI2AS4AAAEWB47YAAALtgIAIyMODiUBKzUA//8AO//hA+gGmAI2AS4AAAEWB5koAAALtgIAJCMODiUBKzUA//8APP/mA4gGmAI2ATAAAAEWB46wAAALtgEAPz4WFiUBKzUA//8APP/mA4gGmAI2ATAAAAEWB5kAAAALtgEAPz8WFiUBKzUA//8AiP5kA/YGmAI2AcYAAAEWB44AAAALtgEAGBcTEyUBKzUA//8AiP5kA/YGmAI2AcYAAAEWB5lQAAALtgEAGBgTEyUBKzUA//8AEQAAAU4GmAI2AcgAAAEXB47+mAAAAAu2AQAFBAIDJQErNQD//wCJAAABxgaYAjYByAAAARcHmf7oAAAAC7YBAAYFAgMlASs1AP//ADn/4QQfBpgCNgBSAAABFgeO2AAAC7YCABkYCQklASs1AP//ADn/4QQfBpgCNgBSAAABFgeZKAAAC7YCABoZCQklASs1AP//AID/4gPzBpgCNgHRAAABFgeOAAAAC7YBABkYCBYlASs1AP//AID/4gPzBpgCNgHRAAABFgeZUAAAC7YBABoZCBYlASs1AP//AED/4gWMBpgCNgHUAAABFgeOeAAAC7YBADw7JSYlASs1AP//AED/4gWMBpgCNgHUAAABFweZAPAAAAALtgEAPTwlJiUBKzUA//8AO/5fA+gGjAI2AS4AAAA3B2AAyAAAARYHYQAAABVADgMALi0IACUCACssDg4lASs1KzUA//8AO/5fA+gGjAI2AS4AAAA3B5oAyAAAARYHYQAAABVADgMALi0IACUCACssDg4lASs1KzUA//8AO/5fA+gGjAI2AS4AAAA3B28AyAAAARYHYQAAABdADwQAMjEIACUDAgAkJA4OJQErNTUrNQD//wA7/l8D6AaMAjYBLgAAADcHfADIAAABFgdhAAAAF0APBAAyMQgAJQMCACQkDg4lASs1NSs1AP//ADv+XwPoBowCNgEuAAAANwdwAMgAAAEW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9ANAi0hC/dUDQHiMeAEV/ut4Fx0rLQEEa2uxHRyMKKBsAAAAAAAAAQAAD9oAAQKiDAAACQPMAAQAtP+iAAQAtv+iAAoAJP+iAAoAkP+iAAsANwAUAAsATQAxAA8ADP+mAA8AGv/PAA8AQP+mAA8AYP+mAA8AtP83AA8Atv83ABAAJP/RABAALP/jABAALf+iABAANv/uABAAN/9xABAAOf/RABAAOv/RABAAO/+0ABAAPP99ABAAPf/jABAARP/uABAAWf/ZABAAWv/uABAAW//RABAAXP/ZABAAXf/ZABAAkP/RABAAoP/uABEADP+cABEAD/97ABEAEP9eABEAGv/PABEAQP+cABEAYP+cABEAsf+NABEAsv+NABEAtP83ABEAtv83ABcAD//sABcAEf/sABoAD/9qABoAEf9qAB0Asv99ACQAEP/RACQANv/8ACQAN/+NACQAOP/2ACQAOf/JACQAOv/RACQAPP+0ACQAV//yACQAWP/2ACQAWf/lACQAWv/2ACQAXP/lACQAsf/RACQAsv/RACQAs//RACQAtP+NACQAtf/RACQAtv+NACUAD//uACUAEAAKACUAEf/uACUAJgAKACUAKgAKACUAMgAKACUANAAKACUAN//JACUARAAKACUASAAKACUASwAMACUATAAKACUATQAKACUATwAMACUAUgAKACUAVQAKACUAWAAKACUAWgAKACUAXAACACUAq//uACUAsQAKACUAsgAKACYAEP/RACYAr//nACYAsf/RACYAsv/RACcAD//RACcAEf/RACcALf/sACcAN//RACcAOv/uACcAO//2ACcAPP/uACcAPf/uACcAq//RACkAD/7jACkAEf7jACkAHf/JACkAHv/JACkAIgA3ACkAJP+iACkALf/FACkANwAdACkARP+iACkASP/RACkAUv/RACkAkP+YACkAoP+iACkAof/RACkAq/7jACkAsP/RACwAEP/jACwARP/sACwARv/nACwAR//sACwASP/nACwASv/sACwAUP/2ACwAUf/2ACwAUv/nACwAU//2ACwAVf/2ACwAVv/sACwAWf/hACwAsf/jACwAsv/jAC0AD//uAC0AEf/uAC0AJP/2AC0AkP/2AC0Aq//uAC4AEP+YAC4AMv/uAC4ARP/TAC4ASP/HAC4AUv/HAC4AWP/XAC4AWf/JAC4AWv/HAC4AXP/JAC4Akf/uAC4AoP/JAC4Aof+8AC4Ar//uAC4AsP+8AC4Asf+YAC4Asv+YAC8ACv+NAC8AEP9oAC8AJP/XAC8AJv/uAC8AKv/uAC8ALQBeAC8AMv/uAC8ANP/uAC8AN/9eAC8AOf+YAC8AOv+iAC8APP9oAC8AWf+YAC8AXP+YAC8AZP/uAC8AkP/XAC8Akf/uAC8Ar//uAC8Asf9oAC8Asv9oAC8AtP9oAC8Atv9oADIAD//jADIAEf/jADIALf/4ADIAN//RADIAO//2ADIAPP/uADIAPf/uADIAq//jADMAD/7jADMAEf7jADMAJP/RADMALf+6ADMAPAASADMARP/RADMASP/RADMAUv/RADMAkP+8ADMAoP/RADMAof/RADMAq/7jADMAsP/RADQAD//jADQAEf/jADQAq//jADUAEP+iADUAN//JADUAPP/uADUARP/uADUASP/bADUAUv/bADUAWP/0ADUAXP/RADUAoP/RADUAof/RADUAsP/JADUAsf+iADUAsv+iADUAtP+8ADUAtv+8ADYAD//uADYAEf/uADYAJP/yADYANv/pADYARgAEADYASAAEADYAUgAEADYAVAAGADYAWf/jADYAWv/uADYAXP/jADYAkP/uADYAq//uADcADAAUADcAD/7sADcAEP9xADcAEf7sADcAHf9CADcAHv9CADcAIgA3ADcAJP+NADcAJv/ZADcAKv/ZADcALf/FADcAMv/RADcANv/2ADcAN/+cADcAPP+6ADcAQAAUADcARP8dADcARv8vADcASP8vADcASv83ADcAUv8vADcAVf9CADcAVv9WADcAWP9CADcAWf9CADcAWv9CADcAXP9CADcAXf9eADcAYAAUADcAZP/ZADcAkP+FADcAkf/RADcAoP8dADcAof8vADcAq/7sADcAr//RADcAsP8vADcAsf9xADcAsv9xADgAD//uADgAEf/uADgAJP/2ADgAkP/uADgAq//uADkAD/7sADkAEP/RADkAEf7sADkAHf+0ADkAHv+0ADkAJP/JADkARP+iADkASP+iADkAUv+iADkAWP/JADkAXP/BADkAkP+8ADkAoP+iADkAof+iADkAq/7sADkAsP+iADkAsf/RADkAsv/RADoAD/7sADoAEP/RADoAEf8vADoAHf+0ADoAHv+0ADoAJP/RADoARP+0ADoASP+0ADoAUv+0ADoAVf/bADoAWP/bADoAXP/LADoAkP/bADoAoP+0ADoAof+0ADoAq/8vADoAsP+0ADoAsf/RADoAsv/RADsAEP+0ADsAJv/2ADsAKv/2ADsAMv/2ADsARP/bADsASP/TADsAUv/TADsAWP/jADsAXP++ADsAZP/2ADsAkf/2ADsAoP/RADsAof/JADsAr//2ADsAsP/JADsAsf+0ADsAsv+0ADwAD/7sADwAEP99ADwAEf7sADwAHf9CADwAHv9CADwAJP+0ADwALf/FADwAMv/uADwARP99ADwAR/+NADwASP+FADwASv+FADwAUP+iADwAUf+iADwAUv+FADwAU/+iADwAVP+FADwAVf+iADwAVv+YADwAWP+YADwAWf+iADwAkP+0ADwAkf/uADwAoP99ADwAof+FADwAq/7sADwAr//uADwAsP+FADwAsf99ADwAsv99AD0AEP/JAD0AJv/uAD0AKv/uAD0AMv/uAD0APf/2AD0ARP/RAD0ASP/JAD0AUv/JAD0AWv/ZAD0AXP/BAD0AZP/uAD0Akf/uAD0AoP/RAD0Aof/JAD0Ar//uAD0AsP/JAD0Asf/RAD0Asv/RAD4ANwAUAD4ATQAxAEQAWf/yAEQAWv/2AEQAXP/yAEUAD//jAEUAEf/uAEUAXP/8AEUAq//uAEYAEP/uAEYAN/+gAEYARv/6AEYAb//6AEYAsf/uAEYAsv/uAEgAN/99AEkABQBWAEkACgBWAEkADABkAEkADQBEAEkAD/9qAEkAEP+8AEkAEf9qAEkAIgBzAEkAPwBeAEkAQABkAEkARP/nAEkARv/sAEkASP/sAEkASf/yAEkASv/2AEkATf/sAEkAUP/2AEkAUf/2AEkAUv/sAEkAU//2AEkAVP/2AEkAVf/2AEkAVv/pAEkAWP/sAEkAXP/nAEkAYABkAEkAcP/sAEkAdgB5AEkAoP/nAEkAof/sAEkAq/+NAEkAsf+8AEkAsv+8AEkAtABEAEkAtgBEAEoATQAMAEsAWf/uAEsAWv/2AEsAXP/uAEwASQAEAEwATAACAEwATwACAEwAVwAEAE4AEP+iAE4ASP/uAE4AUv/uAE4Aof/uAE4AsP/uAE4Asf+iAE4Asv+iAE8ASQACAE8ATAACAE8ATwAGAE8AVwAEAE8AdgAKAE8AdwAKAE8Awv+sAFAAWf/uAFAAWv/2AFAAXP/uAFEAWf/uAFEAWv/2AFEAXP/uAFIAD//jAFIAEf/uAFIAWf/0AFIAW//uAFIAXP/0AFIAq//uAFMAD//jAFMAEf/uAFMAXP/8AFMAq//uAFUAD/7sAFUAEP/nAFUAEf7sAFUARP/dAFUARv/2AFUAR//2AFUASP/2AFUASv/2AFUAUv/2AFUAVP/2AFUAb//2AFUAcP/2AFUAoP/ZAFUAof/2AFUAq/7sAFUAsP/2AFUAsf/uAFUAsv/uAFUAtAAdAFUAtgAdAFcAEP/ZAFcATwAAAFcAV//wAFcAWf/sAFcAXP/sAFcAsf/ZAFcAsv/ZAFcAtAASAFcAtgASAFkAD/9WAFkAEP/ZAFkAEf9WAFkARP/ZAFkASP/wAFkAUv/wAFkAoP/ZAFkAof/wAFkAq/9WAFkAsP/0AFkAsf/ZAFkAsv/ZAFkAtgAfAFoAD/+8AFoAEP/uAFoAEf+8AFoARP/uAFoAoP/uAFoAq/+8AFoAsf/uAFoAsv/uAFoAtgAUAFsAEP/RAFsARv/uAFsAR//2AFsASP/nAFsASv/2AFsAUv/nAFsAb//uAFsAof/nAFsAsP/uAFsAsf/RAFsAsv/RAFwAD/9MAFwAEP/ZAFwAEf9MAFwARP/ZAFwARv/wAFwAR//2AFwASP/wAFwASv/2AFwAUv/wAFwAVP/2AFwAb//wAFwAoP/ZAFwAof/wAFwAq/9WAFwAsP/0AFwAsf/ZAFwAsv/ZAFwAtgAfAF0AEP/uAF0ARv/2AF0AR//2AF0ASP/2AF0ASv/2AF0AUv/2AF0AVP/2AF0Ab//2AF0Aof/2AF0Asf/uAF0Asv/uAF4ANwAUAF4ATQAxAGQAEP/RAGQAr//nAGQAsf/RAGQAsv/RAG8AEP/uAG8Asf/uAG8Asv/uAHQAtgAUAHYATwAKAHcASQAOAHcATwAKAHcAvwAOAHcAwAAOAJEAD//jAJEAEf/jAJEAN//RAJEAO//2AJEAPP/uAJEAPf/uAJEAq//jAKEAD//jAKEAEf/uAKEAWf/0AKEAW//uAKEAXP/0AKEAq//uAKIALQAfAKsAtP83AKsAtv83ALEAJP/RALEALP/jALEALf+iALEANv/uALEAN/9xALEAOf/RALEAOv/RALEAO/+0ALEAPP99ALEAPf/2ALEARP/uALEAWf/ZALEAWv/uALEAW//RALEAXP/ZALEAXf/ZALEAkP/RALEAoP/uALIAJP/RALIALP/jALIALf+iALIANv/uALIAN/9xALIAOf/RALIAOv/RALIAO/+0ALIAPP99ALIAPf/2ALIARP/uALIAWf/ZALIAWv/uALIAW//RALIAXP/ZALIAXf/ZALIAkP/RALIAoP/uALMAJP+iALMAkP+iALMAtQApALQAD/83ALQAEf83ALQAJP+iALQANwBoALQAOQBeALQAOgA3ALQAPABoALQAVv+8ALQAVwAnALQAkP+iALQAq/83ALQAtgApALUAJP+iALUAkP+iALUAswApALYAD/83ALYAEf83ALYAFQAUALYAFgAUALYAF/+6ALYAGAAKALYAGgApALYAGwAUALYAHAAUALYAJP+iALYANgAUALYANwBoALYAOQBeALYAOgA3ALYAPABoALYASwApALYATAApALYATwApALYAVv+8ALYAVwAnALYAdQBQALYAdgCgALYAdwCgALYAkP+iALYAq/83ALYAswC0ALYAtAApALYAtQC0AL8ATwAEAMAATAAEAMIAT/+sAMMAN/83AMMAOf83AMMAOv+iAMMAPP83AMQAN/83AMQAOf83AMQAOv+iAMQAPP83AAAAAAAtAiIAAQAAAAAAAAAyAAAAAQAAAAAAAQAGADIAAQAAAAAAAgAHAHIAAQAAAAAAAwAYAGEAAQAAAAAABAAGADIAAQAAAAAABQAMAHkAAQAAAAAABgAGADIAAQAAAAAABwAvADIAAwABBAMAAgAMAIUAAwABBAUAAgAQAJUAAwABBAYAAgAMAKUAAwABBAcAAgAQALEAAwABBAgAAgAQAMEAAwABBAkAAABkANEAAwABBAkAAQAMATUAAwABBAkAAgAOCSsAAwABBAkAAwAwCQkAAwABBAkABAAMATUAAwABBAkABQAYCTkAAwABBAkABgAMATUAAwABBAkABwBeCVEAAwABBAkACAAeCa8AAwABBAkACQAcBgcAAwABBAkACgfUATUAAwABBAkACwBGCc0AAwABBAoAAgAMAIUAAwABBAsAAgAQChMAAwABBAwAAgAMAIUAAwABBA4AAgAMCiMAAwABBBAAAgAOCjMAAwABBBMAAgASCkEAAwABBBQAAgAMAIUAAwABBBUAAgAQAIUAAwABBBYAAgAMAIUAAwABBBkAAgAOClMAAwABBBsAAgAQCiMAAwABBB0AAgAMAIUAAwABBB8AAgAMAIUAAwABBCQAAgAOCmEAAwABBCoAAgAOCm8AAwABBC0AAgAOCn0AAwABCAoAAgAMAIUAAwABCBYAAgAMAIUAAwABDAoAAgAMAIUAAwABDAwAAgAMAIWpIDIwMDQgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlRhaG9tYSBpcyBhIHRyYWRlbWFyayBvZiBNaWNyb3NvZnQgQ29ycG9yYXRpb24uTWljcm9zb2Z0IFRhaG9tYSBSZWd1bGFyVmVyc2lvbiAzLjE1AE4AbwByAG0AYQBsAG4AeQBvAGIAeQENAGUAagBuAOkAbgBvAHIAbQBhAGwAUwB0AGEAbgBkAGEAcgBkA5oDsQO9A78DvQO5A7oDrACpACAAMgAwADAANAAgAE0AaQBjAHIAbwBzAG8AZgB0ACAAQwBvAHIAcABvAHIAYQB0AGkAbwBuAC4AIABBAGwAbAAgAHIAaQBnAGgAdABzACAAcgBlAHMAZQByAHYAZQBkAC4AVABhAGgAbwBtAGEAIABpAHMAIABvAG4AZQAgAG8AZgAgAE0AaQBjAHIAbwBzAG8AZgB0ACcAcwAgAG4AZQB3ACAAcwBhAG4AcwAgAHMAZQByAGkAZgAgAHQAeQBwAGUAZgBhAGMAZQAgAGYAYQBtAGkAbABpAGUAcwAuACAASQB0ACAAYwBvAG4AcwBpAHMAdABzACAAbwBmACAAdAB3AG8AIABXAGkAbgBkAG8AdwBzACAAVAByAHUAZQBUAHkAcABlACAAZgBvAG4AdABzACAAKAByAGUAZwB1AGwAYQByACAAYQBuAGQAIABiAG8AbABkACkALAAgAGEAbgBkACAAdwBhAHMAIABjAHIAZQBhAHQAZQBkACAAdABvACAAYQBkAGQAcgBlAHMAcwAgAHQAaABlACAAYwBoAGEAbABsAGUAbgBnAGUAcwAgAG8AZgAgAG8AbgAtAHMAYwByAGUAZQBuACAAZABpAHMAcABsAGEAeQAsACAAcABhAHIAdABpAGMAdQBsAGEAcgBsAHkAIABhAHQAIABzAG0AYQBsAGwAIABzAGkAegBlAHMAIABpAG4AIABkAGkAYQBsAG8AZwAgAGIAbwB4AGUAcwAgAGEAbgBkACAAbQBlAG4AdQBzAC4ADQAKAA0ACgBTAGkAbgBjAGUAIAB0AGgAZQAgAFQAYQBoAG8AbQBhAHMAIABhAHIAZQAgAFQAcgB1AGUAVAB5AHAAZQAgAGYAbwBuAHQAcwAsACAAdABoAGUAeQAgAGMAYQBuACAAYgBlACAAcgBvAHQAYQB0AGUAZAAgAGEAbgBkACAAcwBjAGEAbABlAGQAIAB0AG8AIABhAG4AeQAgAHMAaQB6AGUALAAgAGEAbgBkACAAYQBuAHQAaQAtAGEAbABpAGEAcwBlAGQAIABiAHkAIAB0AGgAZQAgAHIAYQBzAHQAZQByAGkAegBlAHIAIABiAHUAaQBsAHQAIABpAG4AdABvACAATQBpAGMAcgBvAHMAbwBmAHQAIABXAGkAbgBkAG8AdwBzACAAOQA1ACAAYQBuAGQAIABNAGkAYwByAG8AcwBvAGYAdAAgAFcAaQBuAGQAbwB3AHMAIABOAFQAIAA0AC4AMAAuACAAVABoAGUAcwBlACAAZgBlAGEAdAB1AHIAZQBzACAAZwBpAHYAZQAgAHQAaABlACAAZgBvAG4AdABzACAAcwBpAGcAbgBpAGYAaQBjAGEAbgB0ACAAYQBkAHYAYQBuAHQAYQBnAGUAcwAgAG8AdgBlAHIAIABiAGkAdABtAGEAcAAgAHMAeQBzAHQAZQBtACAAZgBvAG4AdABzACAAcwB1AGMAaAAgAGEAcwAgAE0AUwAgAFMAYQBuAHMAIABTAGUAcgBpAGYALgANAAoADQAKAFQAaABlACAATABhAHQAaQBuACwAIABHAHIAZQBlAGsAIABhAG4AZAAgAEMAeQByAGkAbABsAGkAYwAgAGMAaABhAHIAYQBjAHQAZQByAHMAIAB3AGUAcgBlACAAZABlAHMAaQBnAG4AZQBkACAAYgB5ACAAdwBvAHIAbABkACAAcgBlAG4AbwB3AG4AZQBkACAAdAB5AHAAZQAgAGQAZQBzAGkAZwBuAGUAcgAgAE0AYQB0AHQAaABlAHcAIABDAGEAcgB0AGUAcgAsACAAYQBuAGQAIABoAGEAbgBkAC0AaQBuAHMAdAByAHUAYwB0AGUAZAAgAGIAeQAgAGwAZQBhAGQAaQBuAGcAIABoAGkAbgB0AGkAbgBnACAAZQB4AHAAZQByAHQALAAgAE0AbwBuAG8AdAB5AHAAZQAnAHMAIABUAG8AbQAgAFIAaQBjAGsAbgBlAHIALgAgAFQAaABlACAAQQByAGEAYgBpAGMALAAgAEgAZQBiAHIAZQB3ACAAYQBuAGQAIABUAGgAYQBpACAAYwBoAGEAcgBhAGMAdABlAHIAcwAgAHcAZQByAGUAIABkAGUAcwBpAGcAbgBlAGQAIABiAHkAIAB0AGgAZQAgAE0AbwBuAG8AdAB5AHAAZQAgAEQAcgBhAHcAaQBuAGcAIABPAGYAZgBpAGMAZQAgAHQAbwAgAGMAbwBtAHAAbABlAG0AZQBuAHQAIABDAGEAcgB0AGUAcgAnAHMAIABpAG4AaQB0AGkAYQBsACAAZABlAHMAaQBnAG4AcwAuACAAVABhAGgAbwBtAGEAIABzAGUAdABzACAAbgBlAHcAIABzAHQAYQBuAGQAYQByAGQAcwAgAGkAbgAgAHMAeQBzAHQAZQBtACAAZgBvAG4AdAAgAGQAZQBzAGkAZwBuAC4AIABJAHQAIABpAHMAIABpAGQAZQBhAGwAIABmAG8AcgAgAHUAcwBlACAAaQBuACAAVQBzAGUAcgAgAEkAbgB0AGUAcgBmAGEAYwBlACAAUwBjAGUAbgBhAHIAaQBvAHMAIABhAG4AZAAgAG8AdABoAGUAcgAgAHMAaQB0AHUAYQB0AGkAbwBuAHMAIAByAGUAcQB1AGkAcgBpAG4AZwAgAHQAaABlACAAcAByAGUAcwBlAG4AdABhAHQAaQBvAG4AIABvAGYAIABpAG4AZgBvAHIAbQBhAHQAaQBvAG4AIABvAG4AIAB0AGgAZQAgAHMAYwByAGUAZQBuAC4ATQBpAGMAcgBvAHMAbwBmAHQAIABUAGEAaABvAG0AYQAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADMALgAxADUAVABhAGgAbwBtAGEAIABpAHMAIABhACAAdAByAGEAZABlAG0AYQByAGsAIABvAGYAIABNAGkAYwByAG8AcwBvAGYAdAAgAEMAbwByAHAAbwByAGEAdABpAG8AbgAuAE0AaQBjAHIAbwBzAG8AZgB0ACAAQwBvAHIAcAAuAGgAdAB0AHAAOgAvAC8AdwB3AHcALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8AdAB5AHAAbwBnAHIAYQBwAGgAeQBOAG8AcgBtAGEAYQBsAGkATgBvAHIAbQDhAGwAbgBlAE4AbwByAG0AYQBsAGUAUwB0AGEAbgBkAGEAYQByAGQEHgQxBEsERwQ9BEsEOQBOAGEAdgBhAGQAbgBvAHQAaAGwAaEDAABuAGcAQQByAHIAdQBuAHQAYQAAAAACAAAAAAAA/1YAggAAAAAAAAAAAAAAAAAAAAAAAAAAB/QAAAECAQMAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkAGUAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAcgBzAHQAdQB2AHcAeAB5AHoAewB8AH0AfgB/AIAAgQCCAIMAhACFAIYAhwCIAIkAigCLAIwAjQCOAI8AkACRAJIAkwCUAJUAlgEEAJgAmQCaAQUAnACdAJ4BBgCgAKEAogCjAKQApQCmAKcAqACpAKoAqwCtAK4ArwCwALEAsgCzALQAtQC2ALcAuAC5ALoAuwC8AQcAvgC/AMAAwQDCAMMAxADFAMYAxwDIAMkAygDLAMwAzQDOAM8A0ADRANMA1ADVANYA1wDYANkA2gDbANwA3QDeAN8A4ADhAOIA4wDkAOUA5gDnAOgA6QDqAOsA7ADtAO4A7wDwAPEA8gDzAPQA9QD2APcA+AD5APoA+wD8AP0A/gD/AQABCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIBIwEkASUBJgEnASgBKQEqASsBLAEtAS4BLwEwATEBMgEzATQBNQE2ATcBOAE5AToBOwE8AT0BPgE/AUABQQFCAUMBRAFFAUYBRwFIAUkBSgFLAUwBTQFOAU8BUAFRAVIBUwFUAVUBVgFXAVgBWQFaAVsBXAFdAV4BXwFgAWEBYgFjAWQBZQFmAWcBaAFpAWoBawFsAW0BbgFvAXABcQFyAXMBdAF1AXYBdwF4AXkBegF7AXwBfQF+AX8BgAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAJ8BxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIAlwHTAdQB1QHWAdcB2AHZAdoB2wHcAd0B3gHfAeAB4QHiAeMB5AHlAeYB5wHoAekB6gHrAewB7QHuAe8B8AHxAfIB8wH0AfUB9gH3AfgB+QH6AfsB/AH9Af4B/wIAAgECAgIDAgQCBQIGAgcCCAIJAgoCCwIMAg0CDgIPAhACEQISAhMCFAIVAhYCFwIYAhkCGgIbAhwCHQIeAh8CIAIhAiICIwIkAiUCJgInAigCKQIqAisCLAItAi4CLwIwAjECMgIzAjQCNQI2AjcCOAI5AjoCOwI8Aj0CPgI/AkAAmwC9AkECQgJDAkQCRQJGAkcCSAJJAkoCSwJMAk0CTgJPAlACUQJSAlMCVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigKLAowCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogKjAqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtEC0gLTAtQC1QLWAtcC2ALZAtoC2wLcAt0C3gLfAuAC4QLiAuMC5ALlAuYC5wLoAukC6gLrAuwC7QLuAu8C8ALxAvIC8wL0AvUC9gL3AvgC+QL6AvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA68DsAOxA7IDswO0A7UDtgO3A7gDuQO6A7sDvAO9A74DvwPAA8EDwgPDA8QDxQPGA8cDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD1APVA9YD1wPYA9kD2gPbA9wD3QPeA98D4APhA+ID4wPkA+UD5gPnA+gD6QPqA+sD7APtA+4D7wPwA/ED8gPzA/QD9QP2A/cD+AP5A/oD+wP8A/0D/gP/BAAEAQQCBAMEBAQFBAYEBwQIBAkECgQLBAwEDQQOBA8EEAQRBBIEEwQUBBUEFgQXBBgEGQQaBBsEHAQdBB4EHwQgBCEEIgQjBCQEJQQmBCcEKAQpBCoEKwQsBC0ELgQvBDAEMQQyBDMENAQ1BDYENwQ4BDkEOgQ7BDwEPQQ+BD8EQARBBEIEQwREBEUERgRHBEgESQRKBEsETARNBE4ETwRQBFEEUgRTBFQEVQRWBFcEWARZBFoEWwRcBF0EXgRfBGAEYQRiBGMEZARlBGYEZwRoBGkEagRrBGwEbQRuBG8EcARxBHIEcwR0BHUEdgR3BHgEeQR6BHsEfAR9BH4EfwSABIEEggSDBIQEhQSGBIcEiASJBIoEiwSMBI0EjgSPBJAEkQSSBJMElASVBJYElwSYBJkEmgSbBJwEnQSeBJ8EoAShBKIEowSkBKUEpgSnBKgEqQSqBKsErAStAAAAAAAAAAAErgSvBLAEsQSyBLMEtAS1BLYEtwS4BLkEugS7BLwEvQS+BL8EwATBBMIEwwTEBMUAAAAAAAAAAAAAAAAAAATGBMcEyATJBMoEywTMBM0EzgTPBNAE0QTSBNME1ATVBNYE1wTYBNkE2gTbBNwE3QTeBN8E4AThBOIE4wTkBOUE5gTnBOgAAAAAAAAAAAAAAAAAAATpBOoE6wTsBO0AAATuAAAE7wAABPAAAATxAAAE8gAABPME9AT1BPYE9wT4BPkE+gT7AAAAAAAABPwAAAAAAAAE/QT+BP8FAAUBBQIFAwUEBQUAAAAAAAAFBgAAAAAAAAUHBQgFCQUKBQsFDAUNBQ4FDwAAAAAAAAUQBREFEgUTBRQAAAUVAAAFFgUXBRgFGQUaBRsFHAAABR0AAAUeAAAFHwAABSAAAAUhAAAFIgAABSMAAAUkAAAFJQAAAAAAAAUmAAAAAAAABScAAAAAAAAFKAAAAAAAAAUpAAAAAAAABSoAAAUrAAAAAAAABSwAAAAAAAAFLQAAAAAAAAUuAAAAAAAABS8FMAUxBTIFMwAABTQAAAU1AAAAAAAABTYAAAAAAAAFNwAAAAAAAAU4BTkFOgU7BTwAAAAAAAAFPQAAAAAAAAU+BT8FQAVBBUIAAAAAAAAFQwVEBUUFRgVHAAAAAAAABUgAAAAAAAAFSQAAAAAAAAVKAAAAAAAABUsAAAAAAAAFTAAAAAAAAAVNBU4FTwAAAAAAAAVQAAAFUQAAAAAAAAVSAAAFUwVUBVUFVgVXBVgFWQVaBVsFXAVdAAAFXgVfBWAAAAVhAAAAAAAABWIAAAVjBWQFZQAABWYFZwVoBWkFagVrBWwFbQVuBW8FcAVxBXIFcwV0BXUFdgV3BXgFeQV6BXsAAAAAAAAFfAAAAAAAAAV9AAAAAAAABX4FfwWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWBBYIAAAWDBYQFhQWGBYcFiAWJBYoFiwWMBY0FjgWPBZAFkQWSBZMFlAWVBZYFlwWYBZkFmgWbBZwFnQWeBZ8FoAWhBaIFowWkBaUFpgWnBagFqQWqBasFrAWtBa4FrwWwBbEFsgWzBbQFtQW2BbcFuAW5BboFuwW8Bb0FvgW/BcAFwQXCBcMFxAXFBcYFxwXIBckFygXLBcwFzQXOBc8F0AXRBdIF0wXUBdUF1gXXBdgF2QXaBdsF3AXdBd4F3wXgBeEF4gXjBeQF5QXmBecF6AXpBeoF6wXsBe0F7gXvBfAF8QXyBfMF9AX1BfYF9wX4BfkF+gX7BfwF/QX+Bf8GAAYBBgIGAwYEBgUGBgYHBggGCQYKBgsGDAYNBg4GDwYQBhEGEgYTBhQGFQYWBhcGGAYZBhoGGwYcBh0GHgYfBiAGIQYiBiMGJAYlBiYGJwYoBikGKgYrBiwGLQYuBi8GMAYxBjIGMwY0BjUGNgY3BjgGOQY6BjsGPAY9Bj4GPwZABkEGQgZDBkQGRQZGBkcGSAZJBkoGSwZMBk0GTgZPBlAGUQZSBlMGVAZVBlYGVwZYBlkGWgZbBlwGXQZeBl8GYAZhBmIGYwZkBmUGZgZnBmgGaQZqBmsGbAZtBm4GbwZwBnEGcgZzBnQGdQZ2BncGeAZ5BnoGewZ8Bn0GfgZ/BoAGgQaCBoMGhAaFBoYGhwaIBokGigaLBowGjQaOBo8GkAaRBpIGkwaUBpUGlgaXBpgGmQaaBpsGnAadBp4GnwagBqEGogajBqQGpQamBqcGqAapBqoGqwasBq0GrgavBrAGsQayBrMGtAa1BrYGtwa4BrkGuga7BrwGvQa+Br8GwAbBBsIGwwbEBsUGxgbHBsgGyQbKBssGzAbNBs4GzwbQBtEG0gbTBtQG1QbWBtcG2AbZBtoG2wbcBt0G3gbfBuAG4QbiBuMG5AblBuYG5wboBukG6gbrBuwG7QbuBu8G8AbxBvIG8wb0BvUG9gb3BvgG+Qb6BvsG/Ab9Bv4G/wcABwEHAgcDBwQHBQcGBwcHCAcJBwoHCwcMBw0HDgcPBxAHEQcSBxMHFAcVBxYHFwcYBxkHGgcbBxwHHQceBx8HIAchByIHIwckByUHJgcnBygHKQcqBysHLActBy4HLwcwBzEHMgczBzQHNQc2BzcHOAc5BzoHOwc8Bz0HPgc/B0AHQQdCB0MHRAdFB0YHRwdIB0kHSgdLB0wHTQdOB08HUAdRB1IHUwdUB1UHVgdXB1gHWQdaBS5udWxsEG5vbm1hcmtpbmdyZXR1cm4DbXUxA3BpMQNPaG0ERXVybwdkbWFjcm9uCW92ZXJzY29yZQZtaWRkb3QGQWJyZXZlBmFicmV2ZQdBb2dvbmVrB2FvZ29uZWsGRGNhcm9uBmRjYXJvbgZEc2xhc2gHRW9nb25lawdlb2dvbmVrBkVjYXJvbgZlY2Fyb24GTGFjdXRlBmxhY3V0ZQZMY2Fyb24GbGNhcm9uBExkb3QEbGRvdAZOYWN1dGUGbmFjdXRlBk5jYXJvbgZuY2Fyb24JT2RibGFjdXRlCW9kYmxhY3V0ZQZSYWN1dGUGcmFjdXRlBlJjYXJvbgZyY2Fyb24GU2FjdXRlBnNhY3V0ZQhUY2VkaWxsYQh0Y2VkaWxsYQZUY2Fyb24GdGNhcm9uBVVyaW5nBXVyaW5nCVVkYmxhY3V0ZQl1ZGJsYWN1dGUGWmFjdXRlBnphY3V0ZQRaZG90BHpkb3QFR2FtbWEFVGhldGEDUGhpBWFscGhhBWRlbHRhB2Vwc2lsb24Fc2lnbWEDdGF1A3BoaQ11bmRlcnNjb3JlZGJsCWV4Y2xhbWRibAluc3VwZXJpb3IGcGVzZXRhAklKAmlqC25hcG9zdHJvcGhlBm1pbnV0ZQZzZWNvbmQJYWZpaTYxMjQ4CWFmaWk2MTI4OQZIMjIwNzMGSDE4NTQzBkgxODU1MQZIMTg1MzMKb3BlbmJ1bGxldAdBbWFjcm9uB2FtYWNyb24LQ2NpcmN1bWZsZXgLY2NpcmN1bWZsZXgEQ2RvdARjZG90B0VtYWNyb24HZW1hY3JvbgZFYnJldmUGZWJyZXZlBEVkb3QEZWRvdAtHY2lyY3VtZmxleAtnY2lyY3VtZmxleARHZG90BGdkb3QIR2NlZGlsbGEIZ2NlZGlsbGELSGNpcmN1bWZsZXgLaGNpcmN1bWZsZXgESGJhcgRoYmFyBkl0aWxkZQZpdGlsZGUHSW1hY3JvbgdpbWFjcm9uBklicmV2ZQZpYnJldmUHSW9nb25lawdpb2dvbmVrC0pjaXJjdW1mbGV4C2pjaXJjdW1mbGV4CEtjZWRpbGxhCGtjZWRpbGxhDGtncmVlbmxhbmRpYwhMY2VkaWxsYQhsY2VkaWxsYQhOY2VkaWxsYQhuY2VkaWxsYQNFbmcDZW5nB09tYWNyb24Hb21hY3JvbgZPYnJldmUGb2JyZXZlCFJjZWRpbGxhCHJjZWRpbGxhC1NjaXJjdW1mbGV4C3NjaXJjdW1mbGV4BFRiYXIEdGJhcgZVdGlsZGUGdXRpbGRlB1VtYWNyb24HdW1hY3JvbgZVYnJldmUGdWJyZXZlB1VvZ29uZWsHdW9nb25lawtXY2lyY3VtZmxleAt3Y2lyY3VtZmxleAtZY2lyY3VtZmxleAt5Y2lyY3VtZmxleAVsb25ncwpBcmluZ2FjdXRlCmFyaW5nYWN1dGUHQUVhY3V0ZQdhZWFjdXRlC09zbGFzaGFjdXRlC29zbGFzaGFjdXRlCWFub3RlbGVpYQZXZ3JhdmUGd2dyYXZlBldhY3V0ZQZ3YWN1dGUJV2RpZXJlc2lzCXdkaWVyZXNpcwZZZ3JhdmUGeWdyYXZlDXF1b3RlcmV2ZXJzZWQJcmFkaWNhbGV4CWFmaWkwODk0MQllc3RpbWF0ZWQJb25lZWlnaHRoDHRocmVlZWlnaHRocwtmaXZlZWlnaHRocwxzZXZlbmVpZ2h0aHMLY29tbWFhY2NlbnQQdW5kZXJjb21tYWFjY2VudAV0b25vcw1kaWVyZXNpc3Rvbm9zCkFscGhhdG9ub3MMRXBzaWxvbnRvbm9zCEV0YXRvbm9zCUlvdGF0b25vcwxPbWljcm9udG9ub3MMVXBzaWxvbnRvbm9zCk9tZWdhdG9ub3MRaW90YWRpZXJlc2lzdG9ub3MFQWxwaGEEQmV0YQVEZWx0YQdFcHNpbG9uBFpldGEDRXRhBElvdGEFS2FwcGEGTGFtYmRhAk11Ak51AlhpB09taWNyb24CUGkDUmhvBVNpZ21hA1RhdQdVcHNpbG9uA0NoaQNQc2kMSW90YWRpZXJlc2lzD1Vwc2lsb25kaWVyZXNpcwphbHBoYXRvbm9zDGVwc2lsb250b25vcwhldGF0b25vcwlpb3RhdG9ub3MUdXBzaWxvbmRpZXJlc2lzdG9ub3MEYmV0YQVnYW1tYQR6ZXRhA2V0YQV0aGV0YQRpb3RhBWthcHBhBmxhbWJkYQJudQJ4aQdvbWljcm9uA3JobwZzaWdtYTEHdXBzaWxvbgNjaGkDcHNpBW9tZWdhDGlvdGFkaWVyZXNpcw91cHNpbG9uZGllcmVzaXMMb21pY3JvbnRvbm9zDHVwc2lsb250b25vcwpvbWVnYXRvbm9zCWFmaWkxMDAyMwlhZmlpMTAwNTEJYWZpaTEwMDUyCWFmaWkxMDA1MwlhZmlpMTAwNTQJYWZpaTEwMDU1CWFmaWkxMDA1NglhZmlpMTAwNTcJYWZpaTEwMDU4CWFmaWkxMDA1OQlhZmlpMTAwNjAJYWZpaTEwMDYxCWFmaWkxMDA2MglhZmlpMTAxNDUJYWZpaTEwMDE3CWFmaWkxMDAxOAlhZmlpMTAwMTkJYWZpaTEwMDIwCWFmaWkxMDAyMQlhZmlpMTAwMjIJYWZpaTEwMDI0CWFmaWkxMDAyNQlhZmlpMTAwMjYJYWZpaTEwMDI3CWFmaWkxMDAyOAlhZmlpMTAwMjkJYWZpaTEwMDMwCWFmaWkxMDAzMQlhZmlpMTAwMzIJYWZpaTEwMDMzCWFmaWkxMDAzNAlhZmlpMTAwMzUJYWZpaTEwMDM2CWFmaWkxMDAzNwlhZmlpMTAwMzgJYWZpaTEwMDM5CWFmaWkxMDA0MAlhZmlpMTAwNDEJYWZpaTEwMDQyCWFmaWkxMDA0MwlhZmlpMTAwNDQJYWZpaTEwMDQ1CWFmaWkxMDA0NglhZmlpMTAwNDcJYWZpaTEwMDQ4CWFmaWkxMDA0OQlhZmlpMTAwNjUJYWZpaTEwMDY2CWFmaWkxMDA2NwlhZmlpMTAwNjgJYWZpaTEwMDY5CWFmaWkxMDA3MAlhZmlpMTAwNzIJYWZpaTEwMDczCWFmaWkxMDA3NAlhZmlpMTAwNzUJYWZpaTEwMDc2CWFmaWkxMDA3NwlhZmlpMTAwNzgJYWZpaTEwMDc5CWFmaWkxMDA4MAlhZmlpMTAwODEJYWZpaTEwMDgyCWFmaWkxMDA4MwlhZmlpMTAwODQJYWZpaTEwMDg1CWFmaWkxMDA4NglhZmlpMTAwODcJYWZpaTEwMDg4CWFmaWkxMDA4OQlhZmlpMTAwOTAJYWZpaTEwMDkxCWFmaWkxMDA5MglhZmlpMTAwOTMJYWZpaTEwMDk0CWFmaWkxMDA5NQlhZmlpMTAwOTYJYWZpaTEwMDk3CWFmaWkxMDA3MQlhZmlpMTAwOTkJYWZpaTEwMTAwCWFmaWkxMDEwMQlhZmlpMTAxMDIJYWZpaTEwMTAzCWFmaWkxMDEwNAlhZmlpMTAxMDUJYWZpaTEwMTA2CWFmaWkxMDEwNwlhZmlpMTAxMDgJYWZpaTEwMTA5CWFmaWkxMDExMAlhZmlpMTAxOTMJYWZpaTEwMDUwCWFmaWkxMDA5OAlhZmlpMDAyMDgJYWZpaTYxMzUyB3VuaUZGRkMIZ2x5cGg1NzMIZ2x5cGg1NzQIZ2x5cGg1NzUIZ2x5cGg1NzYIZ2x5cGg1NzcIZ2x5cGg1NzgIZ2x5cGg1NzkIZ2x5cGg1ODAIZ2x5cGg1ODEFT2hvcm4Fb2hvcm4FVWhvcm4FdWhvcm4NaG9va2Fib3ZlY29tYgxkb3RiZWxvd2NvbWIJZ3JhdmVjb21iCWFjdXRlY29tYghnbHlwaDU5MAhnbHlwaDU5MQhnbHlwaDU5MghnbHlwaDU5MwhnbHlwaDU5NAhnbHlwaDU5NQhnbHlwaDU5NghnbHlwaDU5NwhnbHlwaDU5OAhnbHlwaDU5OQhnbHlwaDYwMAhnbHlwaDYwMQhnbHlwaDYwMghnbHlwaDYwMwhnbHlwaDYwNAlBZG90YmVsb3cJYWRvdGJlbG93CkFob29rYWJvdmUKYWhvb2thYm92ZRBBY2lyY3VtZmxleGFjdXRlEGFjaXJjdW1mbGV4YWN1dGUQQWNpcmN1bWZsZXhncmF2ZRBhY2lyY3VtZmxleGdyYXZlFEFjaXJjdW1mbGV4aG9va2Fib3ZlFGFjaXJjdW1mbGV4aG9va2Fib3ZlEEFjaXJjdW1mbGV4dGlsZGUQYWNpcmN1bWZsZXh0aWxkZRNBY2lyY3VtZmxleGRvdGJlbG93E2FjaXJjdW1mbGV4ZG90YmVsb3cLQWJyZXZlYWN1dGULYWJyZXZlYWN1dGULQWJyZXZlZ3JhdmULYWJyZXZlZ3JhdmUPQWJyZXZlaG9va2Fib3ZlD2FicmV2ZWhvb2thYm92ZQtBYnJldmV0aWxkZQthYnJldmV0aWxkZQ5BYnJldmVkb3RiZWxvdw5hYnJldmVkb3RiZWxvdwlFZG90YmVsb3cJZWRvdGJlbG93CkVob29rYWJvdmUKZWhvb2thYm92ZQZFdGlsZGUGZXRpbGRlEEVjaXJjdW1mbGV4YWN1dGUQZWNpcmN1bWZsZXhhY3V0ZRBFY2lyY3VtZmxleGdyYXZlEGVjaXJjdW1mbGV4Z3JhdmUURWNpcmN1bWZsZXhob29rYWJvdmUUZWNpcmN1bWZsZXhob29rYWJvdmUQRWNpcmN1bWZsZXh0aWxkZRBlY2lyY3VtZmxleHRpbGRlE0VjaXJjdW1mbGV4ZG90YmVsb3cTZWNpcmN1bWZsZXhkb3RiZWxvdwpJaG9va2Fib3ZlCmlob29rYWJvdmUJSWRvdGJlbG93CWlkb3RiZWxvdwhnbHlwaDY0OQhnbHlwaDY1MAhnbHlwaDY1MQhnbHlwaDY1MgVzaGV2YQpoYXRhZnNlZ29sCmhhdGFmcGF0YWgLaGF0YWZxYW1hdHMFaGlyaXEFdHNlcmUFc2Vnb2wFcGF0YWgGcWFtYXRzBWhvbGFtBnF1YnV0cwZkYWdlc2gFbWV0ZWcFbWFxYWYEcmFmZQVwYXNlcQdzaGluZG90BnNpbmRvdAhzb2ZwYXN1cQRhbGVmA2JldAVnaW1lbAVkYWxldAJoZQN2YXYFemF5aW4DaGV0A3RldAN5b2QIZmluYWxrYWYDa2FmBWxhbWVkCGZpbmFsbWVtA21lbQhmaW5hbG51bgNudW4Gc2FtZWtoBGF5aW4HZmluYWxwZQJwZQpmaW5hbHRzYWRpBXRzYWRpA3FvZgRyZXNoBHNoaW4DdGF2CWRvdWJsZXZhdgZ2YXZ5b2QJZG91YmxleW9kBmdlcmVzaAlnZXJzaGF5aW0NbmV3c2hlcWVsc2lnbgp2YXZzaGluZG90DWZpbmFsa2Fmc2hldmEOZmluYWxrYWZxYW1hdHMKbGFtZWRob2xhbRBsYW1lZGhvbGFtZGFnZXNoB2FsdGF5aW4Lc2hpbnNoaW5kb3QKc2hpbnNpbmRvdBFzaGluZGFnZXNoc2hpbmRvdBBzaGluZGFnZXNoc2luZG90CWFsZWZwYXRhaAphbGVmcWFtYXRzCWFsZWZtYXBpcQliZXRkYWdlc2gLZ2ltZWxkYWdlc2gLZGFsZXRkYWdlc2gIaGVkYWdlc2gJdmF2ZGFnZXNoC3pheWluZGFnZXNoCXRldGRhZ2VzaAl5b2RkYWdlc2gOZmluYWxrYWZkYWdlc2gJa2FmZGFnZXNoC2xhbWVkZGFnZXNoCW1lbWRhZ2VzaAludW5kYWdlc2gMc2FtZWtoZGFnZXNoDWZpbmFscGVkYWdlc2gIcGVkYWdlc2gLdHNhZGlkYWdlc2gJcW9mZGFnZXNoCnJlc2hkYWdlc2gKc2hpbmRhZ2VzaAh0YXZkYWdlcwh2YXZob2xhbQdiZXRyYWZlB2thZnJhZmUGcGVyYWZlCWFsZWZsYW1lZBJ6ZXJvd2lkdGhub25qb2luZXIPemVyb3dpZHRoam9pbmVyD2xlZnR0b3JpZ2h0bWFyaw9yaWdodHRvbGVmdG1hcmsJYWZpaTU3Mzg4CWFmaWk1NzQwMwlhZmlpNTc0MDcJYWZpaTU3NDA5CWFmaWk1NzQ0MAlhZmlpNTc0NTEJYWZpaTU3NDUyCWFmaWk1NzQ1MwlhZmlpNTc0NTQJYWZpaTU3NDU1CWFmaWk1NzQ1NglhZmlpNTc0NTcJYWZpaTU3NDU4CWFmaWk1NzM5MglhZmlpNTczOTMJYWZpaTU3Mzk0CWFmaWk1NzM5NQlhZmlpNTczOTYJYWZpaTU3Mzk3CWFmaWk1NzM5OAlhZmlpNTczOTkJYWZpaTU3NDAwCWFmaWk1NzQwMQlhZmlpNTczODEJYWZpaTU3NDYxCWFmaWk2MzE2NwlhZmlpNTc0NTkJYWZpaTU3NTQzCWFmaWk1NzUzNAlhZmlpNTc0OTQJYWZpaTYyODQzCWFmaWk2Mjg0NAlhZmlpNjI4NDUJYWZpaTY0MjQwCWFmaWk2NDI0MQlhZmlpNjM5NTQJYWZpaTU3MzgyCWFmaWk2NDI0MglhZmlpNjI4ODEJYWZpaTU3NTA0CWFmaWk1NzM2OQlhZmlpNTczNzAJYWZpaTU3MzcxCWFmaWk1NzM3MglhZmlpNTczNzMJYWZpaTU3Mzc0CWFmaWk1NzM3NQlhZmlpNTczOTEJYWZpaTU3NDcxCWFmaWk1NzQ2MAlhZmlpNTIyNTgJYWZpaTU3NTA2CWFmaWk2Mjk1OAlhZmlpNjI5NTYJYWZpaTUyOTU3CWFmaWk1NzUwNQlhZmlpNjI4ODkJYWZpaTYyODg3CWFmaWk2Mjg4OAlhZmlpNTc1MDcJYWZpaTYyOTYxCWFmaWk2Mjk1OQlhZmlpNjI5NjAJYWZpaTU3NTA4CWFmaWk2Mjk2MglhZmlpNTc1NjcJYWZpaTYyOTY0CWFmaWk1MjMwNQlhZmlpNTIzMDYJYWZpaTU3NTA5CWFmaWk2Mjk2NwlhZmlpNjI5NjUJYWZpaTYyOTY2CWFmaWk1NzU1NQlhZmlpNTIzNjQJYWZpaTYzNzUzCWFmaWk2Mzc1NAlhZmlpNjM3NTkJYWZpaTYzNzYzCWFmaWk2Mzc5NQlhZmlpNjI4OTEJYWZpaTYzODA4CWFmaWk2MjkzOAlhZmlpNjM4MTAJYWZpaTYyOTQyCWFmaWk2Mjk0NwlhZmlpNjM4MTMJYWZpaTYzODIzCWFmaWk2MzgyNAlhZmlpNjM4MzMJYWZpaTYzODQ0CWFmaWk2Mjg4MglhZmlpNjI4ODMJYWZpaTYyODg0CWFmaWk2Mjg4NQlhZmlpNjI4ODYJT2RvdGJlbG93CW9kb3RiZWxvdwpPaG9va2Fib3ZlCm9ob29rYWJvdmUQT2NpcmN1bWZsZXhhY3V0ZRBvY2lyY3VtZmxleGFjdXRlEE9jaXJjdW1mbGV4Z3JhdmUQb2NpcmN1bWZsZXhncmF2ZRRPY2lyY3VtZmxleGhvb2thYm92ZRRvY2lyY3VtZmxleGhvb2thYm92ZRBPY2lyY3VtZmxleHRpbGRlEG9jaXJjdW1mbGV4dGlsZGUTT2NpcmN1bWZsZXhkb3RiZWxvdxNvY2lyY3VtZmxleGRvdGJlbG93Ck9ob3JuYWN1dGUKb2hvcm5hY3V0ZQpPaG9ybmdyYXZlCm9ob3JuZ3JhdmUOT2hvcm5ob29rYWJvdmUOb2hvcm5ob29rYWJvdmUKT2hvcm50aWxkZQpvaG9ybnRpbGRlDU9ob3JuZG90YmVsb3cNb2hvcm5kb3RiZWxvdwlVZG90YmVsb3cJdWRvdGJlbG93ClVob29rYWJvdmUKdWhvb2thYm92ZQpVaG9ybmFjdXRlCnVob3JuYWN1dGUKVWhvcm5ncmF2ZQp1aG9ybmdyYXZlDlVob3JuaG9va2Fib3ZlDnVob3JuaG9va2Fib3ZlClVob3JudGlsZGUKdWhvcm50aWxkZQ1VaG9ybmRvdGJlbG93DXVob3JuZG90YmVsb3cIZ2x5cGg4ODIIZ2x5cGg4ODMJWWRvdGJlbG93CXlkb3RiZWxvdwpZaG9va2Fib3ZlCnlob29rYWJvdmUGWXRpbGRlBnl0aWxkZQRkb25nCXRpbGRlY29tYglhZmlpNjQwNjAJYWZpaTY0MDYxCWFmaWk2Mjk0NQlhZmlpNjQxODQJYWZpaTUyMzk5CWFmaWk1MjQwMAlhZmlpNjI3NTMJYWZpaTU3NDExCWFmaWk2Mjc1NAlhZmlpNTc0MTIJYWZpaTYyNzU1CWFmaWk1NzQxMwlhZmlpNjI3NTYJYWZpaTU3NDE0CWFmaWk2Mjc1OQlhZmlpNjI3NTcJYWZpaTYyNzU4CWFmaWk1NzQxNQlhZmlpNjI3NjAJYWZpaTU3NDE2CWFmaWk2Mjc2MwlhZmlpNjI3NjEJYWZpaTYyNzYyCWFmaWk1NzQxNwlhZmlpNjI3NjQJYWZpaTU3NDE4CWFmaWk2Mjc2NwlhZmlpNjI3NjUJYWZpaTYyNzY2CWFmaWk1NzQxOQlhZmlpNjI3NzAJYWZpaTYyNzY4CWFmaWk2Mjc2OQlhZmlpNTc0MjAJYWZpaTYyNzczCWFmaWk2Mjc3MQlhZmlpNjI3NzIJYWZpaTU3NDIxCWFmaWk2Mjc3NglhZmlpNjI3NzQJYWZpaTYyNzc1CWFmaWk1NzQyMglhZmlpNjI3NzkJYWZpaTYyNzc3CWFmaWk2Mjc3OAlhZmlpNTc0MjMJYWZpaTYyNzgwCWFmaWk1NzQyNAlhZmlpNjI3ODEJYWZpaTU3NDI1CWFmaWk2Mjc4MglhZmlpNTc0MjYJYWZpaTYyNzgzCWFmaWk1NzQyNwlhZmlpNjI3ODYJYWZpaTYyNzg0CWFmaWk2Mjc4NQlhZmlpNTc0MjgJYWZpaTYyNzg5CWFmaWk2Mjc4NwlhZmlpNjI3ODgJYWZpaTU3NDI5CWFmaWk2Mjc5MglhZmlpNjI3OTAJYWZpaTYyNzkxCWFmaWk1NzQzMAlhZmlpNjI3OTUJYWZpaTYyNzkzCWFmaWk2Mjc5NAlhZmlpNTc0MzEJYWZpaTYyNzk4CWFmaWk2Mjc5NglhZmlpNjI3OTcJYWZpaTU3NDMyCWFmaWk2MjgwMQlhZmlpNjI3OTkJYWZpaTYyODAwCWFmaWk1NzQzMwlhZmlpNjI4MDQJYWZpaTYyODAyCWFmaWk2MjgwMwlhZmlpNTc0MzQJYWZpaTYyODA3CWFmaWk2MjgwNQlhZmlpNjI4MDYJYWZpaTU3NDQxCWFmaWk2MjgxMAlhZmlpNjI4MDgJYWZpaTYyODA5CWFmaWk1NzQ0MglhZmlpNjI4MTMJYWZpaTYyODExCWFmaWk2MjgxMglhZmlpNTc0NDMJYWZpaTYyODE2CWFmaWk1NzQxMAlhZmlpNjI4MTUJYWZpaTU3NDQ0CWFmaWk2MjgxOQlhZmlpNjI4MTcJYWZpaTYyODE4CWFmaWk1NzQ0NQlhZmlpNjI4MjIJYWZpaTYyODIwCWFmaWk2MjgyMQlhZmlpNTc0NDYJYWZpaTYyODI1CWFmaWk2MjgyMwlhZmlpNjI4MjQJYWZpaTU3NDQ3CWFmaWk2MjgyOAlhZmlpNTc0NzAJYWZpaTYyODI3CWFmaWk1NzQ0OAlhZmlpNjI4MjkJYWZpaTU3NDQ5CWFmaWk2MjgzMAlhZmlpNTc0NTAJYWZpaTYyODMzCWFmaWk2MjgzMQlhZmlpNjI4MzIJYWZpaTYyODM0CWFmaWk2MjgzNQlhZmlpNjI4MzYJYWZpaTYyODM3CWFmaWk2MjgzOAlhZmlpNjI4MzkJYWZpaTYyODQwCWFmaWk2Mjg0MQd1bmkwNkMwB3VuaUZCQTQHdW5pRkJBNQd1bmlGMDA2B3VuaUYwMDcHdW5pRjAwOAd1bmlGMDA5B3VuaUYwMEEHdW5pRjAwQgd1bmlGMDBDB3VuaUYwMEQHdW5pRjAwRQd1bmlGMDBGB3VuaUYwMTAHdW5pRjAxMQd1bmlGMDEyB3VuaUYwMTMHdW5pRjAxNAd1bmlGMDE1B3VuaUYwMTYHdW5pRjAxNwd1bmlGMDE4B3VuaUYwMTkHdW5pRjAxQQd1bmlGMDFCB3VuaUYwMUMHdW5pRjAxRAd1bmlGMDJEB3VuaUYwMkUHdW5pRjAyRgd1bmlGMDMwB3VuaUYwMUUHdW5pRjAxRgd1bmlGMDIwB3VuaUYwMjEHdW5pRjAyMgd1bmlGMDIzB3VuaUYwMjQHdW5pRjAyNQd1bmlGMDI2B3VuaUYwMjcHdW5pRjAyOAd1bmlGMDI5B3VuaUYwMkEHdW5pRjAyQgd1bmlGMDJDDFNjb21tYWFjY2VudAxzY29tbWFhY2NlbnQHdW5pMDIxQQd1bmkwMjFCB3VuaTA0MDAHdW5pMDQwZAd1bmkwNDUwB3VuaTA0NUQJaG9sYW1sZWZ0CWFmaWk1OTY4MQlhZmlpNTk2ODIJYWZpaTU5NjgzCWFmaWk1OTY4NAlhZmlpNTk2ODUJYWZpaTU5Njg2CWFmaWk1OTY4NwlhZmlpNTk2ODgJYWZpaTU5Njg5CWFmaWk1OTY5MAlhZmlpNTk2OTEJYWZpaTU5NjkyCWFmaWk1OTY5MwlhZmlpNTk2OTQJYWZpaTU5Njk1CWFmaWk1OTY5NglhZmlpNTk2OTcJYWZpaTU5Njk4CWFmaWk1OTY5OQlhZmlpNTk3MDAJYWZpaTU5NzAxCWFmaWk1OTcwMglhZmlpNTk3MDMJYWZpaTU5NzA0CWFmaWk1OTcwNQlhZmlpNTk3MDYJYWZpaTU5NzA3CWFmaWk1OTcwOAlhZmlpNTk3MDkJYWZpaTU5NzEwCWFmaWk1OTcxMQlhZmlpNTk3MTIJYWZpaTU5NzEzCWFmaWk1OTcxNAlhZmlpNTk3MTUJYWZpaTU5NzE2CWFmaWk1OTcxNwlhZmlpNTk3MTgJYWZpaTU5NzE5CWFmaWk1OTcyMAlhZmlpNTk3MjEJYWZpaTU5NzIyCWFmaWk1OTcyMwlhZmlpNTk3MjQJYWZpaTU5NzI1CWFmaWk1OTcyNglhZmlpNTk3MjcJYWZpaTU5NzI5CWFmaWk1OTcyOAlhZmlpNTk3MzAJYWZpaTU5NzMxCWFmaWk1OTczMglhZmlpNTk3MzMJYWZpaTU5NzM0CWFmaWk1OTczNQlhZmlpNTk3MzYJYWZpaTU5NzM3CWFmaWk1OTczOAlhZmlpNTk3NDMJYWZpaTU5NzQ0CWFmaWk1OTc0NQlhZmlpNTk3NDYJYWZpaTU5NzQ3CWFmaWk1OTc0OAlhZmlpNTk3NDkJYWZpaTU5NzUwCWFmaWk1OTc1MQlhZmlpNTk3NTIJYWZpaTU5NzUzCWFmaWk1OTc1NAlhZmlpNTk3NTUJYWZpaTU5NzU2CWFmaWk1OTc1NwlhZmlpNTk3NTgJYWZpaTU5NzU5CWFmaWk1OTc2MAlhZmlpNTk3NjEJYWZpaTU5NzYyCWFmaWk1OTc2MwlhZmlpNTk3NjQJYWZpaTU5NzY1CWFmaWk1OTc2NglhZmlpNTk3NjcJYWZpaTU5NzY4CWFmaWk1OTc2OQlhZmlpNTk3NzAJYWZpaTU5NzcxB3VuaUY3MDAHdW5pRjcwMQd1bmlGNzAyB3VuaUY3MDMHdW5pRjcwNAd1bmlGNzA1B3VuaUY3MDYHdW5pRjcwNwd1bmlGNzA4B3VuaUY3MDkHdW5pRjcwQQd1bmlGNzBCB3VuaUY3MEMHdW5pRjcwRAd1bmlGNzBFB3VuaUY3MEYHdW5pRjcxMAd1bmlGNzExB3VuaUY3MTIHdW5pRjcxMwd1bmlGNzE0B3VuaUY3MTUHdW5pRjcxNgd1bmlGNzE3B3VuaUY3MTgHdW5pRjcxOQd1bmlGNzFBB3VuaUY3MUMHdW5pRjcxRAd1bmlGQkZFB3VuaTA0OTIHdW5pMDQ5Mwd1bmkwNDk2B3VuaTA0OTcHdW5pMDQ5QQd1bmkwNDlCB3VuaTA0OUMHdW5pMDQ5RAd1bmkwNEEyB3VuaTA0QTMHdW5pMDRBRQd1bmkwNEFmB3VuaTA0QjAHdW5pMDRCMQd1bmkwNEIyB3VuaTA0QjMHdW5pMDRCOAd1bmkwNEI5B3VuaTA0QkEHdW5pMDRCQgd1bmkwNEQ4B3VuaTA0RDkHdW5pMDRFOAd1bmkwNEU5B3VuaTA2NzkHdW5pRkI2Nwd1bmlGQjY4B3VuaUZCNjkHdW5pMDY4OAd1bmlGQjg5B3VuaTA2OTEHdW5pRkI4RAd1bmkwNkJBB3VuaUZCOUYHdW5pMDZDMQd1bmlGQkE4B3VuaUZCQTkHdW5pMDZDMgd1bmkwNkMzB3VuaTA2RDIHdW5pRkJBRgd1bmkwNkQzB3VuaWZiYjEHdW5pMDZENAd1bmlGQkE2B3VuaTA2NzAHdW5pMDZENgd1bmkwNkQ5B3VuaTI2NkYHdW5pMjBBMAd1bmkyMEExB3VuaTIwQTIHdW5pMjBBNQd1bmkyMEE2B3VuaTIwQTgHdW5pMjBBOQd1bmkyMEFEB3VuaTIwQUUHdW5pMjBBRgd1bmkwNjU0B3VuaTA2NTUHdW5pMDY3MQd1bmlGQjUxB3VuaTA2NzIHdW5pMDY3Mwd1bmkwNjc1B3VuaTA2NzYHdW5pMDY3Nwd1bmkwNjc4B3VuaTA2N0EHdW5pRkI1Rgd1bmlGQjYwB3VuaUZCNjEHdW5pMDY3Qgd1bmlGQjUzB3VuaUZCNTQHdW5pRkI1NQd1bmkwNjdDB3VuaTA2N0QHdW5pMDY3Rgd1bmlGQjYzB3VuaUZCNjQHdW5pRkI2NQd1bmkwNjgwB3VuaUZCNUIHdW5pRkI1Qwd1bmlGQjVEB3VuaTA2ODEHdW5pMDY4Mgd1bmkwNjgzB3VuaUZCNzcHdW5pRkI3OAd1bmlGQjc5B3VuaTA2ODQHdW5pRkI3Mwd1bmlGQjc0B3VuaUZCNzUHdW5pMDY4NQd1bmkwNjg3B3VuaUZCN0YHdW5pRkI4MAd1bmlGQjgxB3VuaTA2ODkHdW5pMDY4Ygd1bmkwNjhjB3VuaUZCODUHdW5pMDY4ZAd1bmlGQjgzB3VuaTA2OGUHdW5pRkI4Nwd1bmkwNjhGB3VuaTA2OTAHdW5pMDY5Mgd1bmkwNjkzB3VuaTA2OTQHdW5pMDY5NQd1bmkwNjk2B3VuaTA2OTcHdW5pMDY5OQd1bmkwNjlBB3VuaTA2OUIHdW5pMDY5Qwd1bmkwNjlEB3VuaTA2OUUHdW5pMDY5Rgd1bmkwNkEwB3VuaTA2QTIHdW5pMDZBMwd1bmkwNkE1B3VuaTA2QTYHdW5pRkI2Zgd1bmlGQjcwB3VuaUZCNzEHdW5pMDZBNwd1bmkwNkE4B3VuaTA2QUEHdW5pMDZBQgd1bmkwNkFCB3VuaTA2QUQHdW5pRkJENAd1bmlGQkQ1B3VuaUZCRDYHdW5pMDZBRQd1bmkwNkIwB3VuaTA2QjEHdW5pRkI5Qgd1bmlGQjlDB3VuaUZCOUQHdW5pMDZCMgd1bmkwNkIzB3VuaUZCOTcHdW5pRkI5OAd1bmlGQjk5B3VuaTA2QjQHdW5pMDZCNQd1bmkwNkI2B3VuaTA2QjcHdW5pMDZCOAd1bmkwNkI5B3VuaTA2QkIHdW5pRkJBMQd1bmkwNkJDB3VuaTA2QkQHdW5pMDZCRgd1bmkwNkM0B3VuaTA2QzUHdW5pRkJFMQd1bmkwNkM2B3VuaUZCREEHdW5pMDZDNwd1bmlGQkQ4B3VuaTA2QzgHdW5pRkJEQwd1bmkwNkM5B3VuaUZCRTMHdW5pMDZDQQd1bmkwNkNCB3VuaUZCREYHdW5pMDZDRAd1bmkwNkNFB3VuaTA2Q0YHdW5pMDZEMAd1bmlGQkU1B3VuaTA2RDEHdW5pMDZENwd1bmkwNkQ4B3VuaTA2REEHdW5pMDZEQgd1bmkwNkRDB3VuaTA2REQHdW5pMDZERQd1bmkwNkRGB3VuaTA2RTAHdW5pMDZFMQd1bmkwNkUyB3VuaTA2RTMHdW5pMDZFNAd1bmkwNkU1B3VuaTA2RTYHdW5pMDZFNwd1bmkwNkU4B3VuaTA2RTkHdW5pMDZFQQd1bmkwNkVCB3VuaTA2RUMHdW5pMDZGQQd1bmkwNkZCB3VuaTA2RkMHdW5pMDZGRAd1bmkwNkZFB3VuaTA2OEEHdW5pMDIyOAd1bmkwMjI5B3VuaTFFMDAHdW5pMUUwMQd1bmkxRTAyB3VuaTFFMDMHdW5pMUUwNAd1bmkxRTA1B3VuaTFFMDYHdW5pMUUwNwd1bmkxRTA4B3VuaTFFMDkHdW5pMUUwYQd1bmkxRTBiB3VuaTFFMGMHdW5pMUUwZAd1bmkxRTBlB3VuaTFFMGYHdW5pMUUxMAd1bmkxRTExB3VuaTFFMTIHdW5pMUUxMwd1bmkxRTE0B3VuaTFFMTUHdW5pMUUxNgd1bmkxRTE3B3VuaTFFMTgHdW5pMUUxOQd1bmkxRTFBB3VuaTFFMUIHdW5pMUUxQwd1bmkxRTFEB3VuaTFFMUUHdW5pMUUxRgd1bmkxRTIwB3VuaTFFMjEHdW5pMUUyMgd1bmkxZTIzB3VuaTFFMjQHdW5pMUUyNQd1bmkxRTI2B3VuaTFFMjcHdW5pMUUyOAd1bmkxRTI5B3VuaTFFMkEHdW5pMUUyQgd1bmkxRTJDB3VuaTFFMkQHdW5pMUUyRQd1bmkxRTJGB3VuaTFFMzAHdW5pMUUzMQd1bmkxRTMyB3VuaTFFMzMHdW5pMUUzNAd1bmkxRTM1B3VuaTFFMzYHdW5pMUUzNwd1bmkxRTM4B3VuaTFFMzkHdW5pMUUzQQd1bmkxRTNCB3VuaTFFM0MHdW5pMUUzRAd1bmkxRTNFB3VuaTFFM0YHdW5pMUU0MAd1bmkxRTQxB3VuaTFFNDIHdW5pMUU0Mwd1bmkxRTQ0B3VuaTFFNDUHdW5pMUU0Ngd1bmkxRTQ3B3VuaTFFNDgHdW5pMUU0OQd1bmkxRTRBB3VuaTFFNEIHdW5pMUU0Qwd1bmkxRTREB3VuaTFFNEUHdW5pMUU0Rgd1bmkxRTUwB3VuaTFFNTEHdW5pMUU1Mgd1bmkxRTUzB3VuaTFFNTQHdW5pMUU1NQd1bmkxRTU2B3VuaTFFNTcHdW5pMUU1OAd1bmkxRTU5B3VuaTFFNUEHdW5pMUU1Qgd1bmkxRTVDB3VuaTFFNUQHdW5pMUU1RQd1bmkxRTVGB3VuaTFFNjAHdW5pMUU2MQd1bmkxRTYyB3VuaTFFNjMHdW5pMUU2NAd1bmkxRTY1B3VuaTFFNjYHdW5pMUU2Nwd1bmkxRTY4B3VuaTFFNjkHdW5pMUU2QQd1bmkxRTZCB3VuaTFFNkMHdW5pMUU2RAd1bmkxRTZFB3VuaTFFNkYHdW5pMUU3MAd1bmkxRTcxB3VuaTFFNzIHdW5pMUU3Mwd1bmkxRTc0B3VuaTFFNzUHdW5pMUU3Ngd1bmkxRTc3B3VuaTFFNzgHdW5pMUU3OQd1bmkxRTdBB3VuaTFFN0IHdW5pMUU3Qwd1bmkxRTdEB3VuaTFFN0UHdW5pMUU3Rgd1bmkxRTg2B3VuaTFFODcHdW5pMUU4OAd1bmkxRTg5B3VuaTFFOEEHdW5pMUU4Qgd1bmkxRThDB3VuaTFFOEQHdW5pMUU4RQd1bmkxRThGB3VuaTFFOTAHdW5pMUU5MQd1bmkxRTkyB3VuaTFFOTMHdW5pMUU5NAd1bmkxRTk1B3VuaTFFOTYHdW5pMUU5Nwd1bmkxRTk4B3VuaTFFOTkHdW5pMUU5QQd1bmkxRTlCB3VuaTFGMDAHdW5pMUYwMQd1bmkxRjAyB3VuaTFGMDMHdW5pMUYwNAd1bmkxRjA1B3VuaTFGMDYHdW5pMUYwNwd1bmkxRjA4B3VuaTFGMDkHdW5pMUYwQQd1bmkxRjBCB3VuaTFGMEMHdW5pMUYwRAd1bmkxRjBFB3VuaTFGMEYHdW5pMUYxMAd1bmkxRjExB3VuaTFGMTIHdW5pMUYxMwd1bmkxRjE0B3VuaTFGMTUHdW5pMUYxOAd1bmkxRjE5B3VuaTFGMUEHdW5pMUYxQgd1bmkxRjFDB3VuaTFGMUQHdW5pMUYyMAd1bmkxRjIxB3VuaTFGMjIHdW5pMUYyMwd1bmkxRjI0B3VuaTFGMjUHdW5pMUYyNgd1bmkxRjI3B3VuaTFGMjgHdW5pMUYyOQd1bmkxRjJBB3VuaTFGMkIHdW5pMUYyQwd1bmkxRjJEB3VuaTFGMkUHdW5pMUYyRgd1bmkxRjMwB3VuaTFGMzEHdW5pMUYzMgd1bmkxRjMzB3VuaTFGMzQHdW5pMUYzNQd1bmkxRjM2B3VuaTFGMzcHdW5pMUYzOAd1bmkxRjM5B3VuaTFGM0EHdW5pMUYzQgd1bmkxRjNDB3VuaTFGM0QHdW5pMUYzRQd1bmkxRjNGB3VuaTFGNDAHdW5pMUY0MQd1bmkxRjQyB3VuaTFGNDMHdW5pMUY0NAd1bmkxRjQ1B3VuaTFGNDgHdW5pMUY0OQd1bmkxRjRBB3VuaTFGNEIHdW5pMUY0Qwd1bmkxRjREB3VuaTFGNTAHdW5pMUY1MQd1bmkxRjUyB3VuaTFGNTMHdW5pMUY1NAd1bmkxRjU1B3VuaTFGNTYHdW5pMUY1Nwd1bmkxRjU5B3VuaTFGNUIHdW5pMUY1RAd1bmkxRjVGB3VuaTFGNjAHdW5pMUY2MQd1bmkxRjYyB3VuaTFGNjMHdW5pMUY2NAd1bmkxRjY1B3VuaTFGNjYHdW5pMUY2Nwd1bmkxRjY4B3VuaTFGNjkHdW5pMUY2QQd1bmkxRjZCB3VuaTFGNkMHdW5pMUY2RAd1bmkxRjZFB3VuaTFGNkYHdW5pMUY3MAd1bmkxRjcxB3VuaTFGNzIHdW5pMUY3Mwd1bmkxRjc0B3VuaTFGNzUHdW5pMUY3Ngd1bmkxRjc3B3VuaTFGNzgHdW5pMUY3OQd1bmkxRjdBB3VuaTFGN0IHdW5pMUY3Qwd1bmkxRjdEB3VuaTFGODAHdW5pMUY4MQd1bmkxRjgyB3VuaTFGODMHdW5pMUY4NAd1bmkxRjg1B3VuaTFGODYHdW5pMUY4Nwd1bmkxRjg4B3VuaTFGODkHdW5pMUY4QQd1bmkxRjhCB3VuaTFGOEMHdW5pMUY4RAd1bmkxRjhFB3VuaTFGOEYHdW5pMUY5MAd1bmkxRjkxB3VuaTFGOTIHdW5pMUY5Mwd1bmkxRjk0B3VuaTFGOTUHdW5pMUY5Ngd1bmkxRjk3B3VuaTFGOTgHdW5pMUY5OQd1bmkxRjlBB3VuaTFGOUIHdW5pMUY5Qwd1bmkxRjlEB3VuaTFGOUUHdW5pMUY5Rgd1bmkxRkEwB3VuaTFGQTEHdW5pMUZBMgd1bmkxRkEzB3VuaTFGQTQHdW5pMUZBNQd1bmkxRkE2B3VuaTFGQTcHdW5pMUZBOAd1bmkxRkE5B3VuaTFGQUEHdW5pMUZBQgd1bmkxRkFDB3VuaTFGQUQHdW5pMUZBRQd1bmkxRkFGB3VuaTFGQjAHdW5pMUZCMQd1bmkxRkIyB3VuaTFGQjMHdW5pMUZCNAd1bmkxRkI2B3VuaTFGQjcHdW5pMUZCOAd1bmkxRkI5B3VuaTFGQkEHdW5pMUZCQgd1bmkxRkJDB3VuaTFGQkQHdW5pMUZCRQd1bmkxRkJGB3VuaTFGQzAHdW5pMUZDMQd1bmkxRkMyB3VuaTFGQzMHdW5pMUZDNAd1bmkxRkM2B3VuaTFGQzcHdW5pMUZDOAd1bmkxRkM5B3VuaTFGQ0EHdW5pMUZDQgd1bmkxRkNDB3VuaTFGQ0QHdW5pMUZDRQd1bmkxRkNGB3VuaTFGRDAHdW5pMUZEMQd1bmkxRkQyB3VuaTFGRDMHdW5pMUZENgd1bmkxRkQ3B3VuaTFGRDgHdW5pMUZEOQd1bmkxRkRBB3VuaTFGREIHdW5pMUZERAd1bmkxRkRFB3VuaTFGREYHdW5pMUZFMAd1bmkxRkUxB3VuaTFGRTIHdW5pMUZFMwd1bmkxRkU0B3VuaTFGRTUHdW5pMUZFNgd1bmkxRkU3B3VuaTFGRTgHdW5pMUZFOQd1bmkxRkVBB3VuaTFGRUIHdW5pMUZFQwd1bmkxRkVEB3VuaTFGRUUHdW5pMUZFRgd1bmkxRkYyB3VuaTFGRjMHdW5pMUZGNAd1bmkxRkY2B3VuaTFGRjcHdW5pMUZGOAd1bmkxRkY5B3VuaTFGRkEHdW5pMUZGQgd1bmkxRkZDB3VuaTFGRkQHdW5pMUZGRQd1bmkwMzAyB3VuaTAzMDQHdW5pMDMwNQd1bmkwMzA2B3VuaTAzMDcHdW5pMDMwOAd1bmkwMzBBB3VuaTAzMEIHdW5pMDMwQwd1bmkwMzBEB3VuaTAzMEUHdW5pMDMwRgd1bmkwMzEwB3VuaTAzMTEHdW5pMDMxMgd1bmkwMzEzB3VuaTAzMTQHdW5pMDMxNQd1bmkwMzE2B3VuaTAzMTcHdW5pMDMxOAd1bmkwMzE5B3VuaTAzMUEHdW5pMDMxQgd1bmkwMzFDB3VuaTAzMUQHdW5pMDMxRQd1bmkwMzFGB3VuaTAzMjAHdW5pMDMyMQd1bmkwMzIyB3VuaTAzMjQHdW5pMDMyNQd1bmkwMzI2B3VuaTAzMjcHdW5pMDMyOAd1bmkwMzI5B3VuaTAzMkEHdW5pMDMyQgd1bmkwMzJDB3VuaTAzMkQHdW5pMDMyRQd1bmkwMzJGB3VuaTAzMzAHdW5pMDMzMQd1bmkwMzMyB3VuaTAzMzMHdW5pMDMzNAd1bmkwMzM1B3VuaTAzMzYHdW5pMDMzNwd1bmkwMzM4B3VuaTAzMzkHdW5pMDMzQQd1bmkwMzNCB3VuaTAzM0MHdW5pMDMzRAd1bmkwMzNFB3VuaTAzM0YHdW5pMDM0Mgd1bmkwMzQzB3VuaTAzNDQHdW5pMDM0NQd1bmkwMzQ2B3VuaTAzNDcHdW5pMDM0OAd1bmkwMzQ5B3VuaTAzNEEHdW5pMDM0Qgd1bmkwMzRDB3VuaTAzNEQHdW5pMDM0RQd1bmkwMzYwB3VuaTAzNjEHdW5pMDM2Mgd1bmkwMUU0B3VuaTAxRTUHdW5pMDFFNgd1bmkwMUU3B3VuaTAxRTgHdW5pMDFFOQd1bmkwMUVBB3VuaTAxRUIHdW5pMDFCNwd1bmkwMjkyB3VuaTAxRUUHdW5pMDFFRgd1bmkyMEIwB3VuaTIwQjEAAAAAAAMACAACABAAAf//AAMAAQAAAAwAAAAAAAAAAgARAugC8AABAvEC+AADAvkDBgABAwgDCAABAwoDDAABAxIDEgADAxkDGwABAx4DIgABAyYDNgABA0cDSwADA3wDfQABA38DfwACA4ADgAABA4EDjAACA40D9AABA/UD/AACA/4GCAABAAAAAQAAAAoAJgBmAAFhcmFiAAgABAAAAAD//wAFAAAAAQACAAMABAAFaXNvbAAgaW5pdAAmbWVkaQAsZmluYQAybGlnYQA4AAAAAQAAAAAAAQABAAAAAQACAAAAAQADAAAAAgAEAAUABgAOACQBfgLYBQ4FgAABAAEAAQAIAAIACAABBOAAAQABBNYAAQABAAEACAACAKoAUgMhAxcDBgMpAy8DMwSoA4sDkQOXA5sDnwOjA6cDswO3A7sDvwPDA8cDywPPA9MD1wPbA98D4wPnA+sD6wPzBM4E1wUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAVUBVgFXAVgBWQFZgVqBW4FcgV2BXoD0wMXBYIFhgWKBY4FkgWWBZoFngWiBaYFqgWuBbIFtgW6BM4FwAObBcYF3AUMBfsF/wYDAAEAUgMfAyMDJgMnAy0DMQM1A4kDjwOVA5kDnQOhA6UDsQO1A7kDvQPBA8UDyQPNA9ED1QPZA90D4QPlA+kD6wPxBMwE1gUGBQoFDgUSBRYFGgUeBSIFJgUqBS4FMgVSBVYFWgVeBWIFZgVoBWwFcAV0BXgFfAV+BYAFhAWIBYwFkAWUBZgFnAWgBaQFqAWsBbAFtAW4BbwFvgXCBcQF2gXgBfkF/QYBAAEAAQABAAgAAgCqAFIDIgMUAxkDKgMwAzQD9AOMA5IDmAOcA6ADpAOoA7QDuAO8A8ADxAPIA8wD0APUA9gD3APgA+QD6APsA+wD9ATPBNgFCQUNBREFFQUZBR0FIQUlBSkFLQUxBTUFVQVZBV0FYQVlBWcFawVvBXMFdwV7A9QDFAWDBYcFiwWPBZMFlwWbBZ8FowWnBasFrwWzBbcFuwTPBcEDnAXHBd0FDQX8BgAGBAABAFIDHwMjAyYDJwMtAzEDNQOJA48DlQOZA50DoQOlA7EDtQO5A70DwQPFA8kDzQPRA9UD2QPdA+ED5QPpA+sD8QTMBNYFBgUKBQ4FEgUWBRoFHgUiBSYFKgUuBTIFUgVWBVoFXgViBWYFaAVsBXAFdAV4BXwFfgWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8Bb4FwgXEBdoF4AX5Bf0GAQABAAEAAQAIAAIBGACJAyADFgMeAygDLAMuAzIDNgOCA4QDhgOIA4oDjgOQA5QDlgOaA54DogOmA6oDrAOuA7ADsgO2A7oDvgPCA8YDygPOA9ID1gPaA94D4gPmA+oD7APuA/AD8gP2A/gD+gP8BM0E0QTTBNUE1gTcBN4E+QT7BP0E/wUBBQMFBQUHBQsFDwUTBRcFGwUfBSMFJwUrBS8FMwU3BTkFOwU9BT8FQQVDBUUFRwVJBUsFTQVPBVEFUwVXBVsFXwVjBWcFaQVtBXEFdQV5BX0FfwWBBYUFiQWNBZEFlQWZBZ0FoQWlBakFrQWxBbUFuQW9Bb8FwwXFBckFywXNBc8F0QXTBdUF1wXZBdsF3wXhBeMF+gX+BgIGCAABAIkDHwMjAyYDJwMrAy0DMQM1A4EDgwOFA4cDiQONA48DkwOVA5kDnQOhA6UDqQOrA60DrwOxA7UDuQO9A8EDxQPJA80D0QPVA9kD3QPhA+UD6QPrA+0D7wPxA/UD9wP5A/sEzATQBNIE1ATWBNsE3QT4BPoE/AT+BQAFAgUEBQYFCgUOBRIFFgUaBR4FIgUmBSoFLgUyBTYFOAU6BTwFPgVABUIFRAVGBUgFSgVMBU4FUAVSBVYFWgVeBWIFZgVoBWwFcAV0BXgFfAV+BYAFhAWIBYwFkAWUBZgFnAWgBaQFqAWsBbAFtAW4BbwFvgXCBcQFyAXKBcwFzgXQBdIF1AXWBdgF2gXeBeAF4gX5Bf0GAQYHAAQACQABAAgAAQBiAAIACgBAAAYADgAWAB4AJAAqADADfwADA+AD6gN/AAMD4ATWA/UAAgOCA/cAAgOEA/kAAgOIA/sAAgOOAAQACgAQABYAHAP2AAIDggP4AAIDhAP6AAIDiAP8AAIDjgABAAID3wPgAAQABwABAAgAAQA6AAEACAAGAA4AFAAaACAAJgAsAxIAAgLxA0cAAgLyA0gAAgLzA0kAAgL0A0oAAgL1A0sAAgL2AAEAAQL3AAAAAAABAAEAAQAAAAEAABsPAAAAFAAAAAAAABsHMIIbAwYJKoZIhvcNAQcCoIIa9DCCGvACAQExCzAJBgUrDgMCGgUAMGEGCisGAQQBgjcCAQSgUzBRMCwGCisGAQQBgjcCARyiHoAcADwAPAA8AE8AYgBzAG8AbABlAHQAZQA+AD4APjAhMAkGBSsOAwIaBQAEFGgIiir51EvZyf78XXjHd+e80XFWoIIVkzCCA8QwggMtoAMCAQICEEe/GZXfjVJGQ/fbbUgNMaQwDQYJKoZIhvcNAQEFBQAwgYsxCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQKEwZUaGF3dGUxHTAbBgNVBAsTFFRoYXd0ZSBDZXJ0aWZpY2F0aW9uMR8wHQYDVQQDExZUaGF3dGUgVGltZXN0YW1waW5nIENBMB4XDTAzMTIwNDAwMDAwMFoXDTEzMTIwMzIzNTk1OVowUzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMSswKQYDVQQDEyJWZXJpU2lnbiBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqcqypMzNIK8KfYmsh3XwtE7x38EPv2dhvaNkHNq7+cozq4QwiVh+jNtr3TaeD7/R7Hjyd6Z+bzy/k68Numj0bJTKvVItq0g99bbVXV8bAp/6L2sepPejmqYayALhf0xS4w5g7EAcfrkN3j/HtN+HvV96ajEuA5mBE6hHIM4xcw1XLc14NDOVEpkSud5oL6rm48KKjCrDiyGHZr2DWFdvdb88qiaHXcoQFTyfhOpUwQpuxP7FSt25BxGXInzbPifRHnjsnzHJ8eYiGdvEs0dDmhpfoB6Q5F717nzxfatiAY/1TQve0CJWqJXNroh2ru66DfPkTdmg+2igrhQ7s4fBuwIDAQABo4HbMIHYMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24uY29tMBIGA1UdEwEB/wQIMAYBAf8CAQAwQQYDVR0fBDowODA2oDSgMoYwaHR0cDovL2NybC52ZXJpc2lnbi5jb20vVGhhd3RlVGltZXN0YW1waW5nQ0EuY3JsMBMGA1UdJQQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIBBjAkBgNVHREEHTAbpBkwFzEVMBMGA1UEAxMMVFNBMjA0OC0xLTUzMA0GCSqGSIb3DQEBBQUAA4GBAEpr+epYwkQcMYl5mSuWv4KsAdYcTM2wilhu3wgpo17IypMT5wRSDe9HJy8AOLDkyZNOmtQiYhX3PzchT3AxgPGLOIez6OiXAP7PVZZOJNKpJ056rrdhQfMqzufJ2V7duyuFPrWdtdnhV/++tMV+9c8MnvCX/ivTO1IbGzgn9z9KMIID/zCCAuegAwIBAgIQDekr8NTYKYgYMgUJXpp2iDANBgkqhkiG9w0BAQUFADBTMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xKzApBgNVBAMTIlZlcmlTaWduIFRpbWUgU3RhbXBpbmcgU2VydmljZXMgQ0EwHhcNMDMxMjA0MDAwMDAwWhcNMDgxMjAzMjM1OTU5WjBXMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xLzAtBgNVBAMTJlZlcmlTaWduIFRpbWUgU3RhbXBpbmcgU2VydmljZXMgU2lnbmVyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAslAoSN3TaHqEGERmdV1+xLifYyb/PUOcfBE4ECVVc9l1J2n9TrkgXNMK+aAbKu1VViFh2B7b5Lwza8fv3aM3ZY4bkwy2Ux5cfGY1XwWKRf52Tt9TgKKBIJ2uiFyiCPflMPnuIjdMQgrO38YfxNZV6YE/tVKjLKoBevKiqo01/p/mXWoFnz1r47+WwP7MYPlA5wegROuBUW6lKvK2ihAo7Y/cBqCGUJp7SggNMB3KEJ5r9+lYrgSpQJmyKOiPFqw841NvS9M1nbVvZB2zliy7Ped56216+RbmJq2v75lTt0Aslbh5qv7UUqspdH5C7DkeomoW5lm7JGjYAIBDEIeAawIDAQABo4HKMIHHMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNpZ24uY29tMAwGA1UdEwEB/wQCMAAwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC52ZXJpc2lnbi5jb20vdHNzLWNhLmNybDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNVHQ8BAf8EBAMCBsAwJAYDVR0RBB0wG6QZMBcxFTATBgNVBAMTDFRTQTIwNDgtMS01NDANBgkqhkiG9w0BAQUFAAOCAQEAh3hw2k5SASBb4HnJgjDE/bkZlr2RAMO9zc3G9A7Y//lNwDNiMBHF9XQb1JLeX5wgE7F8Rb5QzYPngBeDpyeTZxNG+8q4mEEDzJtRWwWLf6hv8xtQGyQu8mmNbCL3u8oWle0MdMBod9nrmWKHwXOQ+Il0eiOro5h7l7H3jylxTS51G0hB2vC1DSBU1negl4Jjaf0Jz4rwdbsJm9n5EVUmmmEyvnoCsHuGvqLDiyIseNE1drySc1z5ueZMFQojzOTS1DQuSUAVPA9geiTGpWbvls9w6z7n9A1+3NF8o3ZxacGcT0cwNSGxoq8aYjwr2Y6qKgd72BizXHvinaVv/jyJrTCCBBIwggL6oAMCAQICDwDBAIs8PIgR0T72Y+zfQDANBgkqhkiG9w0BAQQFADBwMSswKQYDVQQLEyJDb3B5cmlnaHQgKGMpIDE5OTcgTWljcm9zb2Z0IENvcnAuMR4wHAYDVQQLExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAfBgNVBAMTGE1pY3Jvc29mdCBSb290IEF1dGhvcml0eTAeFw05NzAxMTAwNzAwMDBaFw0yMDEyMzEwNzAwMDBaMHAxKzApBgNVBAsTIkNvcHlyaWdodCAoYykgMTk5NyBNaWNyb3NvZnQgQ29ycC4xHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFJvb3QgQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqQK9wXDmO/JOGyifl3heMOqiqY0lX/j+lUyjt/6doiA+fFGim6KPYDJr0UJkee6sdslU2vLrnIYcj5+EZrPFa3piI9YdPN4PAZLolsS/LWaammgmmdA6LL8MtVgmwUbnCj44liypKDmo7EmDQuOED7uabFVhrIJ8oWAtd0zpmbRkO5pQHDEIJBSfqeeRKxjmPZhjFGBYBWWfHTdSh/en75QCxhvTv1VFs4mAvzrsVJROrv2nem10Tq8YzJYJKCEAV5BgaTe7SxIHPFb/W/ukZgoIptKBVlfvtjteFoF3BNr2vq6Alf6wzX/WpxpyXDzKvPAIoyIwswaFybMgdxOF3wIDAQABo4GoMIGlMIGiBgNVHQEEgZowgZeAEFvQcO9pcp4jUX4Usk2O/8uhcjBwMSswKQYDVQQLEyJDb3B5cmlnaHQgKGMpIDE5OTcgTWljcm9zb2Z0IENvcnAuMR4wHAYDVQQLExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAfBgNVBAMTGE1pY3Jvc29mdCBSb290IEF1dGhvcml0eYIPAMEAizw8iBHRPvZj7N9AMA0GCSqGSIb3DQEBBAUAA4IBAQCV6AvAjfOXGDXtuAEk2HcR81xgMp+eC8s+BZGIj8k65iHy8FeTLLWgR8hi7/zXzDs7Wqk2VGn+JG0/ycyq3gV83TGNPZ8QcGq7/hJPGGnA/NBD4xFaIE/qYnuvqhnIKzclLb5loRKKJQ9jo/dUHPkhydYV81KsbkMyB/2CF/jlZ2wNUfa98VLHvefEMPwgMQmIHZUpGk3VHQKl8YDgA7Rb9LHdyFfuZUnHUlS2tAMoEv+Q1vAIj364l8WrNyzkeuSod+N2oADQaj/B0jaK4EESqDVqG2rbNeHUHATkqEUEyFozOG5NHA1itwqijNPVVD9GzRxVpnDbEjqHk3Wfp9KgMIIEyTCCA7GgAwIBAgIQaguZT8AA3qoR1NhAmqi+5jANBgkqhkiG9w0BAQQFADBwMSswKQYDVQQLEyJDb3B5cmlnaHQgKGMpIDE5OTcgTWljcm9zb2Z0IENvcnAuMR4wHAYDVQQLExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAfBgNVBAMTGE1pY3Jvc29mdCBSb290IEF1dGhvcml0eTAeFw0wMDEyMTAwODAwMDBaFw0wNTExMTIwODAwMDBaMIGmMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSswKQYDVQQLEyJDb3B5cmlnaHQgKGMpIDIwMDAgTWljcm9zb2Z0IENvcnAuMSMwIQYDVQQDExpNaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAKKEFVPYCzAONJX/OhvC8y97bTcjTfPSjOX9r/3FAjQfJMflodxU7H4CdEer2zJYFhRRKTjxfrK0jDpHtTlOblTCMQw6bfvNzctQnBuup9jZSiY/tcXLj5biSfJt2OmWPt4Fz/CmVTetL2DNgGFCoUlUSg8Yt0vZk5kwWkd1ZLTTu922qwydT7hzOxg6qrSHjLCIsE1PH04RtTOA3w06ZG9ExzS9SpObvKYd+QUjTmApj8wq8oSama2o2wpwe9Y0QZClt2bHXBsdozMOm1QDGj+YkLjM5z0EdEMcj/c55rOsSHprKg5iAWE5dm79PpgHSxTxAUb9FQDgR9pP5AXkgCUCAQOjggEoMIIBJDATBgNVHSUEDDAKBggrBgEFBQcDAzCBogYDVR0BBIGaMIGXgBBb0HDvaXKeI1F+FLJNjv/LoXIwcDErMCkGA1UECxMiQ29weXJpZ2h0IChjKSAxOTk3IE1pY3Jvc29mdCBDb3JwLjEeMBwGA1UECxMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEwHwYDVQQDExhNaWNyb3NvZnQgUm9vdCBBdXRob3JpdHmCDwDBAIs8PIgR0T72Y+zfQDAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQUKVy5G7bNM+67nll99+XKLsQNNCgwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgFGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEBAEVY4ppBf/ydv0h3d66M2eYZxVe0Gr20uV8CoUVqOVn5uSecLU2e/KLkOIo4ZCJC37kvKs+31gbK6yq/4BqFfNtRCD30ItPUwG2IgRVEX2SDZMSplCyK25A3Sg+36NRhj3Z24dkl/ySElY0EVlSUoRw6PoK87qWHjByMS3lftUn6XjJpOh9UrXVN32TnMDzbZElE+/vEHEJx5qA9Re5rAJ+sQr26EbNW5PvVoiqB2B9OolW+J49wpqJsG/9UioK8gUumobFmeqkXp8sGwEfrprPpMRVTPSoEv/9zSNyLJ0P8Y+juJIdbvjbR6DH1Mtle33l6ujCsaYZK+4wRvxuNVFkwggThMIIDyaADAgECAgphDn2nAAAAAABIMA0GCSqGSIb3DQEBBQUAMIGmMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSswKQYDVQQLEyJDb3B5cmlnaHQgKGMpIDIwMDAgTWljcm9zb2Z0IENvcnAuMSMwIQYDVQQDExpNaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQTAeFw0wMzEwMjUwNTU5MTRaFw0wNTAxMjUwNjA5MTRaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xHjAcBgNVBAMTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALIthwm1XN9VmetSYufT9ONFcakyv5TyDukNrf6dxwRqWE6cpNHYREH7ZH4PZe7IF9pN29nWULQMVltsFohLvwPuUEiD7E+Ik5pR45QZf/qzl6XOYG2f3UyTOL3NNFlx5obO6YOZoJa46uBEWxNCuTpITlRy9wiW5ADEggF2Q69hwtv65cXwAhPd+DW0Dw1SNkZ0Q7GiypzdfpnxNRF3+xUmAY7P4LgEeCoV/XLGYHaRDOdPshgYG2mJtPEvIRtm6sqRx0YNuRdYcVhWhmUj0QIyrmSgb9pSlf373Y009cEMNaNH1+kbavoPRbToMh1wGb3R+eVkH+uHN+pv1A2Dj/0CAwEAAaOCAUAwggE8MA4GA1UdDwEB/wQEAwIGwDAdBgNVHQ4EFgQUgo+nF2RkckTVMK4WhOJTkMs+ntQwEwYDVR0lBAwwCgYIKwYBBQUHAwMwgakGA1UdIwSBoTCBnoAUKVy5G7bNM+67nll99+XKLsQNNCihdKRyMHAxKzApBgNVBAsTIkNvcHlyaWdodCAoYykgMTk5NyBNaWNyb3NvZnQgQ29ycC4xHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFJvb3QgQXV0aG9yaXR5ghBqC5lPwADeqhHU2ECaqL7mMEoGA1UdHwRDMEEwP6A9oDuGOWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL0NvZGVTaWduUENBLmNybDANBgkqhkiG9w0BAQUFAAOCAQEASkjcMrB6Zz+LKwG0DPXbeUFd4Dftv1Fzf9b5fmxtf5+8paRIHqjj7ab1PIZqkVlM1FMU697uzcPckKMIsYtFOv1qcPDOBAY2LjC0j0yr6t1DWc2DoNfupEmuECRPmf/VAvnshkyl2CLoARct6xOQmZoRgDMMGYh+BhnUMe1MyX67JMexveVUO+p3EImHbOCcgI3SEORKl6nqVxnXeCsNmzUnsTi+0r+tx/DmbVqfEPbK8fLgMKsBphPItjlkvQkJ7Yu2FBhqeinGdEs7R/EUycveF92yXNjMOYc8OUjFMHyOdVfu7RugDYVyNWRJvqFJOOKanEp8gmQNAXhfVv6IdDGCBOIwggTeAgEBMIG1MIGmMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSswKQYDVQQLEyJDb3B5cmlnaHQgKGMpIDIwMDAgTWljcm9zb2Z0IENvcnAuMSMwIQYDVQQDExpNaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQQIKYQ59pwAAAAAASDAJBgUrDgMCGgUAoIH/MBQGCSsGAQQBgjcoATEHAwUAAwAAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQUQriyoQ9pPtFUgd0Fz/p3zwSR+9UwgYgGCisGAQQBgjcCAQwxejB4oE6ATABNAGkAYwByAG8AcwBvAGYAdAAgAFMAYQBuAHMAIABTAGUAcgBpAGYAIABGAG8AbgB0ACAAVgBlAHIAcwBpAG8AbgAgADEALgA0ADKhJoAkaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkgMA0GCSqGSIb3DQEBAQUABIIBAGE5di5pDVUIU8oU4p/Rb7SoTsEtpWmRDRTzMkxIg75Sj0bNZqxenW24lZdkLW4xz8WuD0YI9kyft5/3IhknsbyjzTTptCqH+HkYlGbHHsTqEzwJvfKxlheflqX8nioRT8Y3ypKkKbJm8aNq4spYbcayTjEOmXLy8gJHhBOcQ8s0ynqpDVMq15TMgBpA++vebT+fr/pwYgp9QBJY4Yc/ogYk66Y7jX9etqJVyc6tAjDQovxmEWbDwqPImgzZCPtStjAsXLZ/VVDuVWRd4b7sZJps413hltbHZUKrp2Yr2BaoNDOxBdjPwDHyYcbuf7p5KihduUulV08AIei2XKqZ1PuhggH/MIIB+wYJKoZIhvcNAQkGMYIB7DCCAegCAQEwZzBTMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xKzApBgNVBAMTIlZlcmlTaWduIFRpbWUgU3RhbXBpbmcgU2VydmljZXMgQ0ECEA3pK/DU2CmIGDIFCV6adogwDAYIKoZIhvcNAgUFAKBZMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTA0MDkyMDIwMzYzNVowHwYJKoZIhvcNAQkEMRIEEB/9StsrAgy4tAHp/3vSG0wwDQYJKoZIhvcNAQEBBQAEggEAnVYtlI2GctFxDhm8AquPG2VjCkYoYTdN2kX751ijgMWzF3Aw9phBnqmzE2K8K2MePy9+8rxnamoDp3C3YdssRHLyphw0oIAa+B01KgZpjz3Nw78B9MyxjGnbEPVIiJ9tlmAUbVyGM2b55S1fwMHmR2+AzKwTyh5GkHat6YNDKJdiczRzO2LY+gyb9UI/k5dVpisU/0i6BWpOe2WPBgEfeOoHjV9qbULaIa5HX8TGBO7jpoVktjT0ZshM7cJl6ExaD8ueaKXj+2hXufUC5Ks/Na51hePWtMelFRI+wTL0dVZUs+rlRecQU1EG7Y2vQo6Cx38wpOb5oDoXeJlGDUc/fwA=]]></data>
	</file>
	<file>
	  <filename>/framework</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/framework/action.ajax__.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKiBAdmFyICAkcGFyYW1zIGFycmF5ICovDQokb3V0ID0gWw0KICAnbXNnJyAgICAgPT4gJ29rJywNCiAgJ2Vycm9yJyAgID0+IDAsDQogICdjb250ZW50JyA9PiAnJywNCiAgJ3R5cGUnID0+ICd0eHQnLA0KICAncGFyYW1zJyAgPT4gJHBhcmFtcw0KXTsNCg0KaWYoICFkZWZpbmVkKCdDTVNfVkVSU0lPTicpICkNCnsNCiAgaGVhZGVyKCdIVFRQLzEuMSA0MDMgRm9yYmlkZGVuIScpOw0KICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCcpOw0KICAkb3V0Wydtc2cnXSA9ICdGb3JiaWRkZW4nOw0KICAkb3V0WydlcnJvciddID0gODAwODU7DQogIGRpZSgganNvbl9lbmNvZGUoJG91dCkgKTsNCn0NCg0KaWYoIGlzc2V0KCRwYXJhbXNbJ2ZuYyddKSApDQp7DQogICRmbmMgPSB0cmltKCRwYXJhbXNbJ2ZuYyddKTsNCiAgJHBybXMgPSBbXTsNCg0KICBpZiggaXNzZXQoJHBhcmFtc1sncGFyYW1zJ10pICkNCiAgew0KICAgIGlmKCBpc19hcnJheSgkcGFyYW1zWydwYXJhbXMnXSkgKQ0KICAgIHsNCiAgICAgICRwcm1zID0gJHBhcmFtc1sncGFyYW1zJ107DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkcHJtcyA9IGV4cGxvZGUoJywnLCAkcGFyYW1zWydwYXJhbXMnXSk7DQogICAgfQ0KICB9DQoNCiAgYXJyYXlfdW5zaGlmdCgkcHJtcywgJHRoaXMtPkdldE5hbWUoKSk7DQoNCiAgaWYoIGNtc21zKCktPmlzX2Zyb250ZW5kX3JlcXVlc3QoKSApDQogIHsNCiAgICAjIGZyb250ZW5kIGFwaQ0KICAgICRjYWxsYWJsZSA9ICdcXE1BTVNcXGFqYXhfaGFuZGxlcjo6ZmVfJyAuICRmbmM7DQogIH0NCiAgZWxzZQ0KICB7DQogICAgIyBiYWNrZW5kIGFwaQ0KICAgICRjYWxsYWJsZSA9ICdcXE1BTVNcXGFqYXhfaGFuZGxlcjo6YmVfJyAuICRmbmM7DQogIH0NCg0KICBpZighaXNfY2FsbGFibGUoJGNhbGxhYmxlLCBGQUxTRSwgJGNhbGxhYmxlX25hbWUpKQ0KICB7DQogICAgaGVhZGVyKCdIVFRQLzEuMSA1MDAgUmVxdWVzdCBmdW5jdGlvbiBlcnJvciEnKTsNCiAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCcpOw0KICAgICRvdXRbJ21zZyddICAgPSAkZm5jIC4gJyBub3QgdmFsaWQgYXBpIGNhbGwhJzsNCiAgICAkb3V0WydlcnJvciddID0gODAwODU7DQogICAgZGllKGpzb25fZW5jb2RlKCRvdXQpKTsNCiAgfQ0KDQogIHRyeQ0KICB7DQogICAgJG91dFsnY29udGVudCddID0gQGNhbGxfdXNlcl9mdW5jX2FycmF5KCRjYWxsYWJsZSwgJHBybXMpOw0KICB9DQogIGNhdGNoKFxBcmd1bWVudENvdW50RXJyb3IgJGUpDQogIHsNCiAgICAkb3V0WydlcnJvciddICAgPSAkZS0+Z2V0Q29kZSgpOw0KICAgICRvdXRbJ21zZyddICAgICA9ICRlLT5nZXRNZXNzYWdlKCk7DQogICAgJG91dFsnY29udGVudCddID0gJ09vcHMhJzsNCiAgfQ0KICBjYXRjaChcRXhjZXB0aW9uICRlKQ0KICB7DQogICAgJG91dFsnZXJyb3InXSAgID0gJGUtPmdldENvZGUoKTsNCiAgICAkb3V0Wydtc2cnXSAgICAgPSAkZS0+Z2V0TWVzc2FnZSgpOw0KICAgICRvdXRbJ2NvbnRlbnQnXSA9ICdPb3BzISc7DQogIH0NCg0KICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCcpOw0KICBkaWUoanNvbl9lbmNvZGUoJG91dCkpOw0KfQ0KDQpoZWFkZXIoJ0hUVFAvMS4xIDUwMCBSZXF1ZXN0IGZ1bmN0aW9uIGVycm9yIScpOw0KaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsNCiRvdXRbJ21zZyddICAgPSAnd3Jvbmcgc2V0IG9mIHBhcmFtcyc7DQokb3V0WydlcnJvciddID0gODAwODU7DQoNCmRpZShqc29uX2VuY29kZSgkb3V0KSk7DQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/framework/action.deletetemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWRlZmluZWQoJ0NNU19WRVJTSU9OJykgKSBleGl0OwoKaWYoICEgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpICkKICB7CiAgICAvLyB0b2RvLCBwZXJtaXNzaW9ucyBtZXNzYWdlIGhlcmUKICAgIHJldHVybjsKICB9CgokdGhlX2FjdGlvbiA9ICdkZWZhdWx0YWRtaW4nOwppZiggaXNzZXQoJHBhcmFtc1snZGVzdGFjdGlvbiddKSApCnsKICAkdGhlX2FjdGlvbiA9IHRyaW0oJHBhcmFtc1snZGVzdGFjdGlvbiddKTsKfQoKaWYoICFpc3NldCggJHBhcmFtc1snbW9kbmFtZSddICkgfHwgIWlzc2V0KCAkcGFyYW1zWydwcmVmaXgnXSApICkKICB7CiAgICAkcGFyYW1zWydlcnJvcnMnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKTsKICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsJHRoZV9hY3Rpb24sJHJldHVybmlkLCRwYXJhbXMpOwogICAgcmV0dXJuOwogIH0KJG1vZHVsZSA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgkcGFyYW1zWydtb2RuYW1lJ10pOwppZiggISRtb2R1bGUgKQogIHsKICAgICRwYXJhbXNbJ2Vycm9ycyddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpOwogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwkdGhlX2FjdGlvbiwkcmV0dXJuaWQsJHBhcmFtcyk7CiAgICByZXR1cm47CiAgfQoKCmlmKCAhKGlzc2V0KCRwYXJhbXNbJ3RlbXBsYXRlJ10pKSApCiAgewogICAgJHBhcmFtc1snZXJyb3JzJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJyk7CiAgICAkbW9kdWxlLT5SZWRpcmVjdFRvVGFiKCRpZCwgJHBhcmFtc1sneHRfYWN0aXZldGFiJ10sJycsJHRoZV9hY3Rpb24pOwogICAgcmV0dXJuOwogIH0KJHRlbXBsYXRlID0gaHRtbF9lbnRpdHlfZGVjb2RlKHRyaW0oJHBhcmFtc1sncHJlZml4J10uJHBhcmFtc1sndGVtcGxhdGUnXSkpOwokbW9kdWxlLT5EZWxldGVUZW1wbGF0ZSgkdGVtcGxhdGUpOwokbW9kdWxlLT5SZWRpcmVjdFRvQWRtaW5UYWIoKTsK]]></data>
	</file>
	<file>
	  <filename>/framework/action.edittemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWRlZmluZWQoJ0NNU19WRVJTSU9OJykgKSBleGl0OwoKJHRlbXBsYXRlX25hbWUgICAgICAgPSBceHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywgJ3RlbXBsYXRlJyk7CiRwcmVmaXggICAgICAgICAgICAgID0gXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsICdwcmVmaXgnKTsKJG1vZGUgICAgICAgICAgICAgICAgPSBceHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywgJ21vZGUnLCAnYWRkJyk7CiR0aXRsZSAgICAgICAgICAgICAgID0gXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsICd0aXRsZScpOwokbW9kbmFtZSAgICAgICAgICAgICA9IFx4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCAnbW9kbmFtZScpOwokZGVzdGFjdGlvbiAgICAgICAgICA9IFx4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCAnZGVzdGFjdGlvbicsICdkZWZhdWx0YWRtaW4nKTsKJGFjdGl2ZXRhYiAgICAgICAgICAgPSBceHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywgJ2FjdGl2ZXRhYicpOwokaW5mbyAgICAgICAgICAgICAgICA9IFx4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCAnaW5mbycpOwokbW9kZGVzYyAgICAgICAgICAgICA9IFx4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCAnbW9kZGVzYycpOwokZGVmYXVsdHRlbXBsYXRlcHJlZiA9IFx4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCAnZGVmYXVsdHRlbXBsYXRlcHJlZicpOwokZGVmYXVsdHByZWZuYW1lICAgICA9IFx4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCAnZGVmYXVsdHByZWZuYW1lJyk7CgppZiggIWlzc2V0KCRwYXJhbXNbJ29yaWduYW1lJ10pICkKewogICRwYXJhbXNbJ29yaWduYW1lJ10gPSAkdGVtcGxhdGVfbmFtZTsKfQoKJHRlbXBsYXRlY29udGVudCA9IE5VTEw7CgokZ2V0X2ZhY3RvcnlfdGVtcGxhdGVfY29udGVudCA9IGZ1bmN0aW9uKCR0cGxuYW1lLCAkbW9kdWxlKSB7CiAgJGNvbnRlbnQgPSBOVUxMOwogIGlmKGVuZHN3aXRoKCR0cGxuYW1lLCAnLnRwbCcpKQogIHsKICAgICRmbiA9ICRtb2R1bGUtPmZpbmRfbW9kdWxlX2ZpbGUoJ3RlbXBsYXRlcy8nIC4gJHRwbG5hbWUpOwogICAgaWYoJGZuICYmIGlzX2ZpbGUoJGZuKSkKICAgIHsKICAgICAgJGNvbnRlbnQgPSBmaWxlX2dldF9jb250ZW50cygkZm4pOwogICAgfQogIH0KICBlbHNlCiAgewogICAgJGNvbnRlbnQgPSAkbW9kdWxlLT5HZXRUZW1wbGF0ZSgkdHBsbmFtZSk7CiAgICBpZighJGNvbnRlbnQpCiAgICB7CiAgICAgICRjb250ZW50ID0gJG1vZHVsZS0+R2V0UHJlZmVyZW5jZSgkdHBsbmFtZSk7CiAgICB9CiAgfQogIAogIHJldHVybiAkY29udGVudDsKfTsKCnRyeQp7CiAgaWYoISRtb2RuYW1lKQogIHsKICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKCR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5ncGFyYW0nKSk7CiAgfQogICRtb2R1bGUgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJG1vZG5hbWUpOwogIGlmKCEkbW9kdWxlKQogIHsKICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKCR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5ncGFyYW0nKSk7CiAgfQogIGlmKCEkcHJlZml4KQogIHsKICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKCR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5ncGFyYW0nKSk7CiAgfQogIGlmKCEkbW9kZSB8fCAhJHRpdGxlKQogIHsKICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKCR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5ncGFyYW0nKSk7CiAgfQogIHN3aXRjaCgkbW9kZSkKICB7CiAgICBjYXNlICdhZGQnOgogICAgICAkdGVtcGxhdGVjb250ZW50ID0gJGdldF9mYWN0b3J5X3RlbXBsYXRlX2NvbnRlbnQoJGRlZmF1bHR0ZW1wbGF0ZXByZWYsICRtb2R1bGUpOwogICAgYnJlYWs7CiAgICBjYXNlICdlZGl0JzoKICAgICAgJHRlbXBsYXRlY29udGVudCA9ICRtb2R1bGUtPkdldFRlbXBsYXRlKCRwcmVmaXggLiAkdGVtcGxhdGVfbmFtZSk7CiAgICBicmVhazsKICB9CiAgCiAgdHJ5CiAgewogICAgJG1vZHVsZS0+U2V0Q3VycmVudEFjdGlvbigkZGVzdGFjdGlvbik7CiAgICBpZihpc3NldCgkcGFyYW1zWyd4dF9jYW5jZWwnXSkpCiAgICB7CiAgICAgICRtb2R1bGUtPlJlZGlyZWN0VG9BZG1pblRhYigkYWN0aXZldGFiKTsKICAgIH0KICAgIGVsc2UgaWYoaXNzZXQoJHBhcmFtc1sneHRfcmVzZXQnXSkpCiAgICB7CiAgICAgICR0ZW1wbGF0ZWNvbnRlbnQgPSAkZ2V0X2ZhY3RvcnlfdGVtcGxhdGVfY29udGVudCgkZGVmYXVsdHRlbXBsYXRlcHJlZiwgJG1vZHVsZSk7CiAgICAgIGlmKCEkdGVtcGxhdGVjb250ZW50KQogICAgICB7CiAgICAgICAgJHRlbXBsYXRlY29udGVudCA9ICRtb2R1bGUtPkdldFByZWZlcmVuY2UoJGRlZmF1bHR0ZW1wbGF0ZXByZWYpOwogICAgICB9CiAgICAgIGVjaG8gJHRoaXMtPlNob3dNZXNzYWdlKCR0aGlzLT5MYW5nKCdtc2dfdGVtcGxhdGVfcmVzZXQnKSk7CiAgICB9CiAgICBpZihpc3NldCgkcGFyYW1zWyd4dF9zdWJtaXQnXSkgfHwgaXNzZXQoJHBhcmFtc1sneHRfYXBwbHknXSkpCiAgICB7CiAgICAgICR0ZW1wbGF0ZV9uYW1lID0gXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsICd0ZW1wbGF0ZScsICR0ZW1wbGF0ZV9uYW1lKTsKICAgICAgaWYoISR0ZW1wbGF0ZV9uYW1lKQogICAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxFeGNlcHRpb24oJHRoaXMtPkxhbmcoJ2Vycm9yX3RlbXBsYXRlbmFtZWJhZCcpKTsKICAgICAgfQogICAgICBpZighcHJlZ19tYXRjaCgnL1thLXpBLVowLTlcX10qLycsICRwYXJhbXNbJ3RlbXBsYXRlJ10pKQogICAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxFeGNlcHRpb24oJHRoaXMtPkxhbmcoJ2Vycm9yX3RlbXBsYXRlbmFtZWJhZCcpKTsKICAgICAgfQogICAgICAKICAgICAgJHRlbXBsYXRlY29udGVudCA9ICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudCddOwogICAgICAkb3JpZ25hbWUgICAgICAgID0gXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsICdvcmlnbmFtZScpOwogICAgICAkY3VycmVudF9kZmx0ICAgID0gJG1vZHVsZS0+R2V0UHJlZmVyZW5jZSgkZGVmYXVsdHByZWZuYW1lKTsKICAgICAgaWYoJHRlbXBsYXRlX25hbWUgIT0gJG9yaWduYW1lICYmICRvcmlnbmFtZSkKICAgICAgewogICAgICAgIC8vIHRlbXBsYXRlIHJlbmFtZWQKICAgICAgICAkbW9kdWxlLT5EZWxldGVUZW1wbGF0ZSgkcHJlZml4IC4gJG9yaWduYW1lKTsKICAgICAgICBpZigkb3JpZ25hbWUgJiYgJG9yaWduYW1lID09ICRjdXJyZW50X2RmbHQpCiAgICAgICAgewogICAgICAgICAgLy8gd2UgYXJlIGFkanVzdGluZyB0aGUgZGVmYXVsdCB0ZW1wbGF0ZQogICAgICAgICAgJG1vZHVsZS0+U2V0UHJlZmVyZW5jZSgkZGVmYXVsdHByZWZuYW1lLCAkdGVtcGxhdGVfbmFtZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgICRtb2R1bGUtPlNldFRlbXBsYXRlKCRwcmVmaXggLiAkdGVtcGxhdGVfbmFtZSwgJHRlbXBsYXRlY29udGVudCk7CiAgICAgIAogICAgICBpZihpc3NldCgkcGFyYW1zWyd4dF9zdWJtaXQnXSkpCiAgICAgIHsKICAgICAgICAkbW9kdWxlLT5TZXRNZXNzYWdlKCR0aGlzLT5MYW5nKCdtc2dfdGVtcGxhdGVzYXZlZCcpKTsKICAgICAgICAkbW9kdWxlLT5SZWRpcmVjdFRvQWRtaW5UYWIoJGFjdGl2ZXRhYik7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgZWNobyAkdGhpcy0+U2hvd01lc3NhZ2UoJHRoaXMtPkxhbmcoJ21zZ190ZW1wbGF0ZXNhdmVkJykpOwogICAgICB9CiAgICB9CiAgfQogIGNhdGNoKFxFeGNlcHRpb24gJGUpCiAgewogICAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkZS0+R2V0TWVzc2FnZSgpKTsKICB9Cn0KY2F0Y2goXEV4Y2VwdGlvbiAkZSkKewogICR0aGlzLT5TZXRFcnJvcigkZS0+R2V0TWVzc2FnZSgpKTsKICAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkcGFyYW1zKTsKfQoKCi8vIGhhbmRsZSBlcnJvcnMuCmlmKGlzc2V0KCRwYXJhbXNbJ2Vycm9ycyddKSkKewogIGVjaG8gJG1vZHVsZS0+U2hvd0Vycm9ycygkcGFyYW1zWydlcnJvcnMnXSk7Cn0KCnVuc2V0KCRwYXJhbXNbJ3h0X3N1Ym1pdCddLCAkcGFyYW1zWyd4dF9hcHBseSddLCAkcGFyYW1zWyd4dF9yZXNldCddLCAkcGFyYW1zWyd4dF9jYW5jZWwnXSwgJHBhcmFtc1sndGVtcGxhdGVjb250ZW50J10pOwokdGhlbWUgPSBcY21zX3V0aWxzOjpnZXRfdGhlbWVfb2JqZWN0KCk7CiRzbWFydHktPmFzc2lnbigndGl0bGUnLCBjbXNfaHRtbF9lbnRpdHlfZGVjb2RlKCR0aXRsZSkpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsICR0aGlzLT5YVENyZWF0ZUZvcm1TdGFydCgkaWQsICdlZGl0dGVtcGxhdGUnLCAkcmV0dXJuaWQsICRwYXJhbXMpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiRzbWFydHktPmFzc2lnbigndGVtcGxhdGVuYW1lJywgJHRlbXBsYXRlX25hbWUpOwokc21hcnR5LT5hc3NpZ24oJ3h0JywgJHRoaXMpOwokc21hcnR5LT5hc3NpZ24oJ2FjdGlvbmlkJywgJGlkKTsKJHNtYXJ0eS0+YXNzaWduKCdtb2RlJywgJG1vZGUpOwokc21hcnR5LT5hc3NpZ24oJ21vZG5hbWUnLCAkbW9kbmFtZSk7CiRzbWFydHktPmFzc2lnbigndGl0bGUnLCAkdGl0bGUpOwokc21hcnR5LT5hc3NpZ24oJ21vZGRlc2MnLCAkbW9kZGVzYyk7CiRzbWFydHktPmFzc2lnbignaW5mbycsICRpbmZvKTsKJHNtYXJ0eS0+YXNzaWduKCd0ZW1wbGF0ZWNvbnRlbnQnLCAkdGVtcGxhdGVjb250ZW50KTsKJHNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfdGVtcGxhdGVuYW1lJywgJHRoaXMtPkxhbmcoJ3Byb21wdF90ZW1wbGF0ZW5hbWUnKSk7CiRzbWFydHktPmFzc2lnbigncHJvbXB0X3RlbXBsYXRlJywgJHRoaXMtPkxhbmcoJ3Byb21wdF90ZW1wbGF0ZScpKTsKZWNobyAkdGhpcy0+TW9kUHJvY2Vzc1RlbXBsYXRlKCdlZGl0dGVtcGxhdGUudHBsJyk7Cg==]]></data>
	</file>
	<file>
	  <filename>/framework/action.makedefaulttemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKaWYoICFpc3NldCggJGdDbXMgKSApIGV4aXQoKTsKCi8vIGlmKCAhICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKSApCi8vICAgewovLyAgICAgLy8gdG9kbywgcGVybWlzc2lvbnMgbWVzc2FnZSBoZXJlCi8vICAgICByZXR1cm47Ci8vICAgfQoKJHRoZV9hY3Rpb24gPSAnZGVmYXVsdGFkbWluJzsKaWYoIGlzc2V0KCRwYXJhbXNbJ2Rlc3RhY3Rpb24nXSkgKQp7CiAgJHRoZV9hY3Rpb24gPSB0cmltKCRwYXJhbXNbJ2Rlc3RhY3Rpb24nXSk7Cn0KCmlmKCAhaXNzZXQoICRwYXJhbXNbJ21vZG5hbWUnXSApICkKICB7CiAgICAkcGFyYW1zWydlcnJvcnMnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKTsKICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsJHRoZV9hY3Rpb24sJHJldHVybmlkLCRwYXJhbXMpOwogICAgcmV0dXJuOwogIH0KJG1vZHVsZSA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgkcGFyYW1zWydtb2RuYW1lJ10pOwppZiggISRtb2R1bGUgKQogIHsKICAgICRwYXJhbXNbJ2Vycm9ycyddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpOwogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwkdGhlX2FjdGlvbiwkcmV0dXJuaWQsJHBhcmFtcyk7CiAgICByZXR1cm47CiAgfQoKaWYoICFpc3NldCggJHBhcmFtc1sndGVtcGxhdGUnXSApICkKICB7CiAgICAkcGFyYW1zWydlcnJvcnMnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKTsKICAgICRtb2R1bGUtPlJlZGlyZWN0VG9BZG1pblRhYigpOwogICAgcmV0dXJuOwogIH0KCmlmKCAhaXNzZXQoICRwYXJhbXNbJ2RlZmF1bHRwcmVmbmFtZSddICkgKQogIHsKICAgICRwYXJhbXNbJ2Vycm9ycyddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpOwogICAgJG1vZHVsZS0+UmVkaXJlY3RUb0FkbWluVGFiKCk7CiAgICByZXR1cm47CiAgfQokbW9kdWxlLT5TZXRQcmVmZXJlbmNlKCRwYXJhbXNbJ2RlZmF1bHRwcmVmbmFtZSddLCRwYXJhbXNbJ3RlbXBsYXRlJ10pOwoKJG1vZHVsZS0+UmVkaXJlY3RUb0FkbWluVGFiKCkKLy8gRU9GCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/framework/action.setdefaulttemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CiR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKTsgLy9Eb24ndCBhY3R1YWxseSBjYXJlLiAgSnVzdCBmb3JjZSBhIGxvZ2luLgoKaWYoICFpc3NldCgkcGFyYW1zWydkZXN0bW9kdWxlJ10pICkgewogIHN0YWNrX3RyYWNlKCk7CiAgZGllKCc8YnIvPkRlc3RpbmF0aW9uIG1vZHVsZSBub3Qgc2V0Jyk7Cn0KJG1vZHVsZSA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgkcGFyYW1zWydkZXN0bW9kdWxlJ10pOwppZiggIWlzX29iamVjdCgkbW9kdWxlKSApIHsKICBkaWUoJzxici8+Q291bGQgbm90IGZpbmQgZGVzdGluYXRpb24gbW9kdWxlJyk7Cn0KCmlmKCBpc3NldCgkcGFyYW1zWydyZXNldHRvZGVmYXVsdCddKSAmJgogICAgaXNzZXQoJHBhcmFtc1sncHJlZm5hbWUnXSkgJiYKICAgIGlzc2V0KCRwYXJhbXNbJ2ZpbGVuYW1lJ10pICkgewoKICAgICRwYXJhbXNbJ3ByZWZuYW1lJ10gPSBmaWx0ZXJfdmFyKCRwYXJhbXNbJ3ByZWZuYW1lJ10sRklMVEVSX1NBTklUSVpFX1NUUklORyk7CiAgICAkcGFyYW1zWydmaWxlbmFtZSddID0gZmlsdGVyX3ZhcigkcGFyYW1zWydmaWxlbmFtZSddLEZJTFRFUl9TQU5JVElaRV9TVFJJTkcpOwogICAgaWYoICRwYXJhbXNbJ2ZpbGVuYW1lJ10gKSAkcGFyYW1zWydmaWxlbmFtZSddID0gYmFzZW5hbWUoJHBhcmFtc1snZmlsZW5hbWUnXSk7CiAgICBpZiggJHBhcmFtc1sncHJlZm5hbWUnXSAmJiAkcGFyYW1zWydmaWxlbmFtZSddICkgewogICAgICAgICRmbiA9ICRtb2R1bGUtPkdldE1vZHVsZVBhdGgoKS4nL3RlbXBsYXRlcy8nLiRwYXJhbXNbJ2ZpbGVuYW1lJ107CiAgICAgICAgaWYoIGlzX2ZpbGUoICRmbiApICkgewogICAgICAgICAgICAkdGVtcGxhdGUgPSBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsKICAgICAgICAgICAgJG1vZHVsZS0+U2V0VGVtcGxhdGUoJHBhcmFtc1sncHJlZm5hbWUnXSwkdGVtcGxhdGUpOwogICAgICAgICAgICAkbW9kdWxlLT5SZW1vdmVQcmVmZXJlbmNlKCRwYXJhbXNbJ3ByZWZuYW1lJ10pOyAvLyBjbGVhciBvbGQgY3J1ZnQuCiAgICAgICAgICAgIGF1ZGl0KCcnLCRtb2R1bGUtPkdldE5hbWUoKSwnUmVzZXQgdGhlIGRlZmF1bHQgdGVtcGxhdGUgZm9yICcuJHBhcmFtc1sncHJlZm5hbWUnXSk7CiAgICAgICAgfQogICAgfQp9CmVsc2UgaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSAmJiBpc3NldCgkcGFyYW1zWydwcmVmbmFtZSddKSApIHsKICAgICRtb2R1bGUtPlNldFRlbXBsYXRlKCRwYXJhbXNbJ3ByZWZuYW1lJ10sJHBhcmFtc1snaW5wdXRfdGVtcGxhdGUnXSk7CiAgICAkbW9kdWxlLT5SZW1vdmVQcmVmZXJlbmNlKCRwYXJhbXNbJ3ByZWZuYW1lJ10pOyAvLyBjbGVhciBvbGQgY3J1ZnQuCiAgICBhdWRpdCgnJywkbW9kdWxlLT5HZXROYW1lKCksJ1RlbXBsYXRlICcuJHBhcmFtc1sncHJlZm5hbWUnXS4nIHdhcyBlZGl0ZWQnKTsKfQoKJHRoZV90YWIgPSB4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCd4dF9hY3RpdmV0YWInKTsKJHRoZV9hY3Rpb24gPSAnZGVmYXVsdGFkbWluJzsKaWYoIGlzc2V0KCRwYXJhbXNbJ2Rlc3RhY3Rpb24nXSkgKSAkdGhlX2FjdGlvbiA9IHRyaW0oJHBhcmFtc1snZGVzdGFjdGlvbiddKTsKCiRtb2R1bGUtPlNldE1lc3NhZ2UoJHRoaXMtPkxhbmcoJ21zZ190ZW1wbGF0ZXNhdmVkJykpOwokbW9kdWxlLT5SZWRpcmVjdFRvQWRtaW5UYWIoJHRoZV90YWIpOwoKCi8vIEVPRgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/framework/templates</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/framework/templates/editdefaulttemplate.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e3h0Y3NzX2FkZH0KaDQgewogIG1hcmdpbi1ib3R0b206IDAuMmVtOwp9CnsveHRjc3NfYWRkfQp7aWYgaXNzZXQoJHNpbXBsZSkgJiYgISRzaW1wbGUgJiYgaXNzZXQoJGRmbHRfdHBsX2NvdW50ZXIpICYmICRkZmx0X3RwbF9jb3VudGVyID09IDB9CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKICAkKCdoNC54dF9kZmx0X3RlbXBsYXRlX2hkcicpLmNsaWNrKGZ1bmN0aW9uKCl7CiAgICAkKCcueHRfZGZsdF90ZW1wbGF0ZScpLmhpZGUoKTsKICAgICQodGhpcykubmV4dCgnLnh0X2RmbHRfdGVtcGxhdGUnKS5zaG93KCk7CiAgICAkKCdodG1sLGJvZHknKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiAkKHRoaXMpLm9mZnNldCgpLnRvcCB9KTsKICB9KTsKICAkKCcueHRfZGZsdF90ZW1wbGF0ZScpLmhpZGUoKTsKICAkKCcueHRfZGZsdF90ZW1wbGF0ZScpLmZpcnN0KCkuc2hvdygpOwp9KTsKPC9zY3JpcHQ+CnsvaWZ9Cgp7aWYgaXNzZXQoJGRlZmF1bHR0ZW1wbGF0ZWZvcm1fdGl0bGUpfQogIHtpZiBpc3NldCgkc2ltcGxlKSAmJiAkc2ltcGxlfQogICAgPGg0PnskZGVmYXVsdHRlbXBsYXRlZm9ybV90aXRsZX08L2g0PgogIHtlbHNlfQogICAgPGg0IGlkPSJ7JHByZWZuYW1lfSIgY2xhc3M9Inh0X2RmbHRfdGVtcGxhdGVfaGRyIj48YSBocmVmPSJqYXZhc2NyaXB0OnJldHVybiBmYWxzZTsiPjxzcGFuIGNsYXNzPSJ4dF90b2dnbGUiPis8L3NwYW4+Jm5ic3A7eyRkZWZhdWx0dGVtcGxhdGVmb3JtX3RpdGxlfTwvYT48L2g0PgogIHsvaWZ9CnsvaWZ9Cgo8ZGl2IGNsYXNzPSJ4dF9kZmx0X3RlbXBsYXRlIj4KeyRzdGFydGZvcm19CntpZiBpc3NldCgkaW5mb190aXRsZSkgJiYgJGluZm9fdGl0bGV9CiAgPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPnskaW5mb190aXRsZX08L2Rpdj4Key9pZn0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IiBpZD0ieyRwcmVmbmFtZX1fdHBsIj4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X3RlbXBsYXRlfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICB7eHRfdGV4dGFyZWEgc3ludGF4PTEgcHJlZml4PSRhY3Rpb25pZCBuYW1lPWlucHV0X3RlbXBsYXRlIHZhbHVlPSR0ZW1wbGF0ZV9zcmN9CiAgICB7JHN1Ym1pdH17JHJlc2V0fQogIDwvcD4KPC9kaXY+CnskZW5kZm9ybX0KPC9kaXY+Cg==]]></data>
	</file>
	<file>
	  <filename>/framework/templates/edittemplate.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kbmFtZX0ge2lmICFlbXB0eSgkdGl0bGUpfS0geyR0aXRsZX17L2lmfTwvaDM+DQp7aWYgIWVtcHR5KCRpbmZvKX08ZGl2IGNsYXNzPSJpbmZvcm1hdGlvbiI+eyRpbmZvfTwvZGl2PnsvaWZ9DQoNCnskZm9ybXN0YXJ0fXskaGlkZGVufGRlZmF1bHQ6Jyd9DQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICA8cCBjbGFzcz0icGFnZXRleHQiPip7JHByb21wdF90ZW1wbGF0ZW5hbWV9OjwvcD4NCiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQogICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9dGVtcGxhdGUiIHZhbHVlPSJ7JHRlbXBsYXRlbmFtZX0iIHJlcXVpcmVkLz4NCiAgPC9wPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X3RlbXBsYXRlfTo8L3A+DQogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KICAgIHt4dF90ZXh0YXJlYSBzeW50YXg9MSBwcmVmaXg9JGFjdGlvbmlkIG5hbWU9dGVtcGxhdGVjb250ZW50IGNvbnRlbnQ9JHRlbXBsYXRlY29udGVudCByb3dzPTIwfQ0KICA8L3A+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9eHRfc3VibWl0IiB2YWx1ZT0ieyR4dC0+TGFuZygnc3VibWl0Jyl9Ii8+DQogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH14dF9jYW5jZWwiIHZhbHVlPSJ7JHh0LT5MYW5nKCdjYW5jZWwnKX0iIGZvcm1ub3ZhbGlkYXRlLz4NCiAgICB7aWYgJG1vZGUgPT0gJ2VkaXQnfQ0KICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH14dF9hcHBseSIgdmFsdWU9InskeHQtPkxhbmcoJ2FwcGx5Jyl9Ii8+DQogICAgey9pZn0NCiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXh0X3Jlc2V0IiB2YWx1ZT0ieyR4dC0+TGFuZygncmVzZXQnKX0iLz4NCiAgPC9wPg0KPC9kaXY+DQp7JGZvcm1lbmR9DQo=]]></data>
	</file>
	<file>
	  <filename>/internal</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/internal/function.api.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCm5hbWVzcGFjZSBDTVNNU0V4dDsNCg0KLyoqDQogKiBAaWdub3JlDQogKiBAd2lwDQogKi8NCg0KJGhhbmRsZXJzID0gXG9iX2xpc3RfaGFuZGxlcnMoKTsNCmZvcigkY250ID0gMDsgJGNudCA8IFxzaXplb2YoJGhhbmRsZXJzKTsgJGNudCsrKSB7IFxvYl9lbmRfY2xlYW4oKTsgfQ0KLy9pZiggZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSApDQovL3sNCi8vICBoZWFkZXIoJ0hUVFAvMS4xIDQwMyBGb3JiaWRkZW4hJyk7DQovLyAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgnKTsNCi8vICAkb3V0Wydtc2cnXSA9ICdGb3JiaWRkZW4nOw0KLy8gICRvdXRbJ2Vycm9yJ10gPSA4MDA4NTsNCi8vICBkaWUoIGpzb25fZW5jb2RlKCRvdXQpICk7DQovL30NCg0KJG91dCA9IFtdOw0KDQovKiogQHZhciBhcnJheSAkcGFyYW1zICovDQokZ2V0ID0gJF9HRVQ7DQokcG9zdCA9ICRfUE9TVDsNCiRwYXJhbXMgPSBcYXJyYXlfbWVyZ2UoJGdldCwgJHBvc3QsICRwYXJhbXMpOw0KDQppZiggaXNzZXQoJHBhcmFtc1snZm5jJ10pICkNCnsNCiAgJGZuYyA9IFx0cmltKCRwYXJhbXNbJ2ZuYyddKTsNCiAgDQogIHN3aXRjaCgkZm5jKQ0KICB7DQogICAgY2FzZSAnZ2V0X3Nlc3Npb25fc3RhcnQnOg0KICAgICAgIyRvdXRbJ3JldHVybiddID0gZ2V0X3Nlc3Npb25fc3RhdHVzX2ZsYWcoKTsNCiAgICAgIGJyZWFrOw0KICB9DQogIA0KICANCn0NCj8+]]></data>
	</file>
	<file>
	  <filename>/js</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/axios.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQXhpb3MgdjEuNy4yIENvcHlyaWdodCAoYykgMjAyNCBNYXR0IFphYnJpc2tpZSBhbmQgY29udHJpYnV0b3JzCihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7CiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOgogIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6CiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLmF4aW9zID0gZmFjdG9yeSgpKTsKfSkodGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOwoKICBmdW5jdGlvbiBfQXN5bmNHZW5lcmF0b3IoZSkgewogICAgdmFyIHIsIHQ7CiAgICBmdW5jdGlvbiByZXN1bWUociwgdCkgewogICAgICB0cnkgewogICAgICAgIHZhciBuID0gZVtyXSh0KSwKICAgICAgICAgIG8gPSBuLnZhbHVlLAogICAgICAgICAgdSA9IG8gaW5zdGFuY2VvZiBfT3ZlcmxvYWRZaWVsZDsKICAgICAgICBQcm9taXNlLnJlc29sdmUodSA/IG8udiA6IG8pLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgIGlmICh1KSB7CiAgICAgICAgICAgIHZhciBpID0gInJldHVybiIgPT09IHIgPyAicmV0dXJuIiA6ICJuZXh0IjsKICAgICAgICAgICAgaWYgKCFvLmsgfHwgdC5kb25lKSByZXR1cm4gcmVzdW1lKGksIHQpOwogICAgICAgICAgICB0ID0gZVtpXSh0KS52YWx1ZTsKICAgICAgICAgIH0KICAgICAgICAgIHNldHRsZShuLmRvbmUgPyAicmV0dXJuIiA6ICJub3JtYWwiLCB0KTsKICAgICAgICB9LCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgcmVzdW1lKCJ0aHJvdyIsIGUpOwogICAgICAgIH0pOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgc2V0dGxlKCJ0aHJvdyIsIGUpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBzZXR0bGUoZSwgbikgewogICAgICBzd2l0Y2ggKGUpIHsKICAgICAgICBjYXNlICJyZXR1cm4iOgogICAgICAgICAgci5yZXNvbHZlKHsKICAgICAgICAgICAgdmFsdWU6IG4sCiAgICAgICAgICAgIGRvbmU6ICEwCiAgICAgICAgICB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInRocm93IjoKICAgICAgICAgIHIucmVqZWN0KG4pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHIucmVzb2x2ZSh7CiAgICAgICAgICAgIHZhbHVlOiBuLAogICAgICAgICAgICBkb25lOiAhMQogICAgICAgICAgfSk7CiAgICAgIH0KICAgICAgKHIgPSByLm5leHQpID8gcmVzdW1lKHIua2V5LCByLmFyZykgOiB0ID0gbnVsbDsKICAgIH0KICAgIHRoaXMuX2ludm9rZSA9IGZ1bmN0aW9uIChlLCBuKSB7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAobywgdSkgewogICAgICAgIHZhciBpID0gewogICAgICAgICAga2V5OiBlLAogICAgICAgICAgYXJnOiBuLAogICAgICAgICAgcmVzb2x2ZTogbywKICAgICAgICAgIHJlamVjdDogdSwKICAgICAgICAgIG5leHQ6IG51bGwKICAgICAgICB9OwogICAgICAgIHQgPyB0ID0gdC5uZXh0ID0gaSA6IChyID0gdCA9IGksIHJlc3VtZShlLCBuKSk7CiAgICAgIH0pOwogICAgfSwgImZ1bmN0aW9uIiAhPSB0eXBlb2YgZS5yZXR1cm4gJiYgKHRoaXMucmV0dXJuID0gdm9pZCAwKTsKICB9CiAgX0FzeW5jR2VuZXJhdG9yLnByb3RvdHlwZVsiZnVuY3Rpb24iID09IHR5cGVvZiBTeW1ib2wgJiYgU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgIkBAYXN5bmNJdGVyYXRvciJdID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHRoaXM7CiAgfSwgX0FzeW5jR2VuZXJhdG9yLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKGUpIHsKICAgIHJldHVybiB0aGlzLl9pbnZva2UoIm5leHQiLCBlKTsKICB9LCBfQXN5bmNHZW5lcmF0b3IucHJvdG90eXBlLnRocm93ID0gZnVuY3Rpb24gKGUpIHsKICAgIHJldHVybiB0aGlzLl9pbnZva2UoInRocm93IiwgZSk7CiAgfSwgX0FzeW5jR2VuZXJhdG9yLnByb3RvdHlwZS5yZXR1cm4gPSBmdW5jdGlvbiAoZSkgewogICAgcmV0dXJuIHRoaXMuX2ludm9rZSgicmV0dXJuIiwgZSk7CiAgfTsKICBmdW5jdGlvbiBfT3ZlcmxvYWRZaWVsZCh0LCBlKSB7CiAgICB0aGlzLnYgPSB0LCB0aGlzLmsgPSBlOwogIH0KICBmdW5jdGlvbiBfYXN5bmNHZW5lcmF0b3JEZWxlZ2F0ZSh0KSB7CiAgICB2YXIgZSA9IHt9LAogICAgICBuID0gITE7CiAgICBmdW5jdGlvbiBwdW1wKGUsIHIpIHsKICAgICAgcmV0dXJuIG4gPSAhMCwgciA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChuKSB7CiAgICAgICAgbih0W2VdKHIpKTsKICAgICAgfSksIHsKICAgICAgICBkb25lOiAhMSwKICAgICAgICB2YWx1ZTogbmV3IF9PdmVybG9hZFlpZWxkKHIsIDEpCiAgICAgIH07CiAgICB9CiAgICByZXR1cm4gZVsidW5kZWZpbmVkIiAhPSB0eXBlb2YgU3ltYm9sICYmIFN5bWJvbC5pdGVyYXRvciB8fCAiQEBpdGVyYXRvciJdID0gZnVuY3Rpb24gKCkgewogICAgICByZXR1cm4gdGhpczsKICAgIH0sIGUubmV4dCA9IGZ1bmN0aW9uICh0KSB7CiAgICAgIHJldHVybiBuID8gKG4gPSAhMSwgdCkgOiBwdW1wKCJuZXh0IiwgdCk7CiAgICB9LCAiZnVuY3Rpb24iID09IHR5cGVvZiB0LnRocm93ICYmIChlLnRocm93ID0gZnVuY3Rpb24gKHQpIHsKICAgICAgaWYgKG4pIHRocm93IG4gPSAhMSwgdDsKICAgICAgcmV0dXJuIHB1bXAoInRocm93IiwgdCk7CiAgICB9KSwgImZ1bmN0aW9uIiA9PSB0eXBlb2YgdC5yZXR1cm4gJiYgKGUucmV0dXJuID0gZnVuY3Rpb24gKHQpIHsKICAgICAgcmV0dXJuIG4gPyAobiA9ICExLCB0KSA6IHB1bXAoInJldHVybiIsIHQpOwogICAgfSksIGU7CiAgfQogIGZ1bmN0aW9uIF9hc3luY0l0ZXJhdG9yKHIpIHsKICAgIHZhciBuLAogICAgICB0LAogICAgICBvLAogICAgICBlID0gMjsKICAgIGZvciAoInVuZGVmaW5lZCIgIT0gdHlwZW9mIFN5bWJvbCAmJiAodCA9IFN5bWJvbC5hc3luY0l0ZXJhdG9yLCBvID0gU3ltYm9sLml0ZXJhdG9yKTsgZS0tOykgewogICAgICBpZiAodCAmJiBudWxsICE9IChuID0gclt0XSkpIHJldHVybiBuLmNhbGwocik7CiAgICAgIGlmIChvICYmIG51bGwgIT0gKG4gPSByW29dKSkgcmV0dXJuIG5ldyBBc3luY0Zyb21TeW5jSXRlcmF0b3Iobi5jYWxsKHIpKTsKICAgICAgdCA9ICJAQGFzeW5jSXRlcmF0b3IiLCBvID0gIkBAaXRlcmF0b3IiOwogICAgfQogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGlzIG5vdCBhc3luYyBpdGVyYWJsZSIpOwogIH0KICBmdW5jdGlvbiBBc3luY0Zyb21TeW5jSXRlcmF0b3IocikgewogICAgZnVuY3Rpb24gQXN5bmNGcm9tU3luY0l0ZXJhdG9yQ29udGludWF0aW9uKHIpIHsKICAgICAgaWYgKE9iamVjdChyKSAhPT0gcikgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IociArICIgaXMgbm90IGFuIG9iamVjdC4iKSk7CiAgICAgIHZhciBuID0gci5kb25lOwogICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUpLnRoZW4oZnVuY3Rpb24gKHIpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgdmFsdWU6IHIsCiAgICAgICAgICBkb25lOiBuCiAgICAgICAgfTsKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gQXN5bmNGcm9tU3luY0l0ZXJhdG9yID0gZnVuY3Rpb24gKHIpIHsKICAgICAgdGhpcy5zID0gciwgdGhpcy5uID0gci5uZXh0OwogICAgfSwgQXN5bmNGcm9tU3luY0l0ZXJhdG9yLnByb3RvdHlwZSA9IHsKICAgICAgczogbnVsbCwKICAgICAgbjogbnVsbCwKICAgICAgbmV4dDogZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBBc3luY0Zyb21TeW5jSXRlcmF0b3JDb250aW51YXRpb24odGhpcy5uLmFwcGx5KHRoaXMucywgYXJndW1lbnRzKSk7CiAgICAgIH0sCiAgICAgIHJldHVybjogZnVuY3Rpb24gKHIpIHsKICAgICAgICB2YXIgbiA9IHRoaXMucy5yZXR1cm47CiAgICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gbiA/IFByb21pc2UucmVzb2x2ZSh7CiAgICAgICAgICB2YWx1ZTogciwKICAgICAgICAgIGRvbmU6ICEwCiAgICAgICAgfSkgOiBBc3luY0Zyb21TeW5jSXRlcmF0b3JDb250aW51YXRpb24obi5hcHBseSh0aGlzLnMsIGFyZ3VtZW50cykpOwogICAgICB9LAogICAgICB0aHJvdzogZnVuY3Rpb24gKHIpIHsKICAgICAgICB2YXIgbiA9IHRoaXMucy5yZXR1cm47CiAgICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gbiA/IFByb21pc2UucmVqZWN0KHIpIDogQXN5bmNGcm9tU3luY0l0ZXJhdG9yQ29udGludWF0aW9uKG4uYXBwbHkodGhpcy5zLCBhcmd1bWVudHMpKTsKICAgICAgfQogICAgfSwgbmV3IEFzeW5jRnJvbVN5bmNJdGVyYXRvcihyKTsKICB9CiAgZnVuY3Rpb24gX2F3YWl0QXN5bmNHZW5lcmF0b3IoZSkgewogICAgcmV0dXJuIG5ldyBfT3ZlcmxvYWRZaWVsZChlLCAwKTsKICB9CiAgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHsKICAgIHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6ICJ1bmRlZmluZWQiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbIkBAaXRlcmF0b3IiXTsKICAgIGlmIChudWxsICE9IHQpIHsKICAgICAgdmFyIGUsCiAgICAgICAgbiwKICAgICAgICBpLAogICAgICAgIHUsCiAgICAgICAgYSA9IFtdLAogICAgICAgIGYgPSAhMCwKICAgICAgICBvID0gITE7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkgewogICAgICAgICAgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuOwogICAgICAgICAgZiA9ICExOwogICAgICAgIH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTsKICAgICAgfSBjYXRjaCAocikgewogICAgICAgIG8gPSAhMCwgbiA9IHI7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGlmICghZiAmJiBudWxsICE9IHQucmV0dXJuICYmICh1ID0gdC5yZXR1cm4oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICBpZiAobykgdGhyb3cgbjsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGE7CiAgICB9CiAgfQogIGZ1bmN0aW9uIG93bktleXMoZSwgcikgewogICAgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsKICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7CiAgICAgIHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsKICAgICAgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsKICAgICAgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7CiAgICB9CiAgICByZXR1cm4gdDsKICB9CiAgZnVuY3Rpb24gX29iamVjdFNwcmVhZDIoZSkgewogICAgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsKICAgICAgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OwogICAgICByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgewogICAgICAgIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsKICAgICAgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOwogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBlOwogIH0KICBmdW5jdGlvbiBfcmVnZW5lcmF0b3JSdW50aW1lKCkgewogICAgX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgcmV0dXJuIGU7CiAgICB9OwogICAgdmFyIHQsCiAgICAgIGUgPSB7fSwKICAgICAgciA9IE9iamVjdC5wcm90b3R5cGUsCiAgICAgIG4gPSByLmhhc093blByb3BlcnR5LAogICAgICBvID0gT2JqZWN0LmRlZmluZVByb3BlcnR5IHx8IGZ1bmN0aW9uICh0LCBlLCByKSB7CiAgICAgICAgdFtlXSA9IHIudmFsdWU7CiAgICAgIH0sCiAgICAgIGkgPSAiZnVuY3Rpb24iID09IHR5cGVvZiBTeW1ib2wgPyBTeW1ib2wgOiB7fSwKICAgICAgYSA9IGkuaXRlcmF0b3IgfHwgIkBAaXRlcmF0b3IiLAogICAgICBjID0gaS5hc3luY0l0ZXJhdG9yIHx8ICJAQGFzeW5jSXRlcmF0b3IiLAogICAgICB1ID0gaS50b1N0cmluZ1RhZyB8fCAiQEB0b1N0cmluZ1RhZyI7CiAgICBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikgewogICAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIGUsIHsKICAgICAgICB2YWx1ZTogciwKICAgICAgICBlbnVtZXJhYmxlOiAhMCwKICAgICAgICBjb25maWd1cmFibGU6ICEwLAogICAgICAgIHdyaXRhYmxlOiAhMAogICAgICB9KSwgdFtlXTsKICAgIH0KICAgIHRyeSB7CiAgICAgIGRlZmluZSh7fSwgIiIpOwogICAgfSBjYXRjaCAodCkgewogICAgICBkZWZpbmUgPSBmdW5jdGlvbiAodCwgZSwgcikgewogICAgICAgIHJldHVybiB0W2VdID0gcjsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIHdyYXAodCwgZSwgciwgbikgewogICAgICB2YXIgaSA9IGUgJiYgZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBlIDogR2VuZXJhdG9yLAogICAgICAgIGEgPSBPYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSwKICAgICAgICBjID0gbmV3IENvbnRleHQobiB8fCBbXSk7CiAgICAgIHJldHVybiBvKGEsICJfaW52b2tlIiwgewogICAgICAgIHZhbHVlOiBtYWtlSW52b2tlTWV0aG9kKHQsIHIsIGMpCiAgICAgIH0pLCBhOwogICAgfQogICAgZnVuY3Rpb24gdHJ5Q2F0Y2godCwgZSwgcikgewogICAgICB0cnkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICB0eXBlOiAibm9ybWFsIiwKICAgICAgICAgIGFyZzogdC5jYWxsKGUsIHIpCiAgICAgICAgfTsKICAgICAgfSBjYXRjaCAodCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICB0eXBlOiAidGhyb3ciLAogICAgICAgICAgYXJnOiB0CiAgICAgICAgfTsKICAgICAgfQogICAgfQogICAgZS53cmFwID0gd3JhcDsKICAgIHZhciBoID0gInN1c3BlbmRlZFN0YXJ0IiwKICAgICAgbCA9ICJzdXNwZW5kZWRZaWVsZCIsCiAgICAgIGYgPSAiZXhlY3V0aW5nIiwKICAgICAgcyA9ICJjb21wbGV0ZWQiLAogICAgICB5ID0ge307CiAgICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fQogICAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fQogICAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fQogICAgdmFyIHAgPSB7fTsKICAgIGRlZmluZShwLCBhLCBmdW5jdGlvbiAoKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgICB2YXIgZCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiwKICAgICAgdiA9IGQgJiYgZChkKHZhbHVlcyhbXSkpKTsKICAgIHYgJiYgdiAhPT0gciAmJiBuLmNhbGwodiwgYSkgJiYgKHAgPSB2KTsKICAgIHZhciBnID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocCk7CiAgICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHModCkgewogICAgICBbIm5leHQiLCAidGhyb3ciLCAicmV0dXJuIl0uZm9yRWFjaChmdW5jdGlvbiAoZSkgewogICAgICAgIGRlZmluZSh0LCBlLCBmdW5jdGlvbiAodCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShlLCB0KTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKHQsIGUpIHsKICAgICAgZnVuY3Rpb24gaW52b2tlKHIsIG8sIGksIGEpIHsKICAgICAgICB2YXIgYyA9IHRyeUNhdGNoKHRbcl0sIHQsIG8pOwogICAgICAgIGlmICgidGhyb3ciICE9PSBjLnR5cGUpIHsKICAgICAgICAgIHZhciB1ID0gYy5hcmcsCiAgICAgICAgICAgIGggPSB1LnZhbHVlOwogICAgICAgICAgcmV0dXJuIGggJiYgIm9iamVjdCIgPT0gdHlwZW9mIGggJiYgbi5jYWxsKGgsICJfX2F3YWl0IikgPyBlLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgIGludm9rZSgibmV4dCIsIHQsIGksIGEpOwogICAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgaW52b2tlKCJ0aHJvdyIsIHQsIGksIGEpOwogICAgICAgICAgfSkgOiBlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICB1LnZhbHVlID0gdCwgaSh1KTsKICAgICAgICAgIH0sIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgIHJldHVybiBpbnZva2UoInRocm93IiwgdCwgaSwgYSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgYShjLmFyZyk7CiAgICAgIH0KICAgICAgdmFyIHI7CiAgICAgIG8odGhpcywgIl9pbnZva2UiLCB7CiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICh0LCBuKSB7CiAgICAgICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBlKGZ1bmN0aW9uIChlLCByKSB7CiAgICAgICAgICAgICAgaW52b2tlKHQsIG4sIGUsIHIpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiByID0gciA/IHIudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChlLCByLCBuKSB7CiAgICAgIHZhciBvID0gaDsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpLCBhKSB7CiAgICAgICAgaWYgKG8gPT09IGYpIHRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpOwogICAgICAgIGlmIChvID09PSBzKSB7CiAgICAgICAgICBpZiAoInRocm93IiA9PT0gaSkgdGhyb3cgYTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHZhbHVlOiB0LAogICAgICAgICAgICBkb25lOiAhMAogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgZm9yIChuLm1ldGhvZCA9IGksIG4uYXJnID0gYTs7KSB7CiAgICAgICAgICB2YXIgYyA9IG4uZGVsZWdhdGU7CiAgICAgICAgICBpZiAoYykgewogICAgICAgICAgICB2YXIgdSA9IG1heWJlSW52b2tlRGVsZWdhdGUoYywgbik7CiAgICAgICAgICAgIGlmICh1KSB7CiAgICAgICAgICAgICAgaWYgKHUgPT09IHkpIGNvbnRpbnVlOwogICAgICAgICAgICAgIHJldHVybiB1OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIm5leHQiID09PSBuLm1ldGhvZCkgbi5zZW50ID0gbi5fc2VudCA9IG4uYXJnO2Vsc2UgaWYgKCJ0aHJvdyIgPT09IG4ubWV0aG9kKSB7CiAgICAgICAgICAgIGlmIChvID09PSBoKSB0aHJvdyBvID0gcywgbi5hcmc7CiAgICAgICAgICAgIG4uZGlzcGF0Y2hFeGNlcHRpb24obi5hcmcpOwogICAgICAgICAgfSBlbHNlICJyZXR1cm4iID09PSBuLm1ldGhvZCAmJiBuLmFicnVwdCgicmV0dXJuIiwgbi5hcmcpOwogICAgICAgICAgbyA9IGY7CiAgICAgICAgICB2YXIgcCA9IHRyeUNhdGNoKGUsIHIsIG4pOwogICAgICAgICAgaWYgKCJub3JtYWwiID09PSBwLnR5cGUpIHsKICAgICAgICAgICAgaWYgKG8gPSBuLmRvbmUgPyBzIDogbCwgcC5hcmcgPT09IHkpIGNvbnRpbnVlOwogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHZhbHVlOiBwLmFyZywKICAgICAgICAgICAgICBkb25lOiBuLmRvbmUKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICAgICJ0aHJvdyIgPT09IHAudHlwZSAmJiAobyA9IHMsIG4ubWV0aG9kID0gInRocm93Iiwgbi5hcmcgPSBwLmFyZyk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSB7CiAgICAgIHZhciBuID0gci5tZXRob2QsCiAgICAgICAgbyA9IGUuaXRlcmF0b3Jbbl07CiAgICAgIGlmIChvID09PSB0KSByZXR1cm4gci5kZWxlZ2F0ZSA9IG51bGwsICJ0aHJvdyIgPT09IG4gJiYgZS5pdGVyYXRvci5yZXR1cm4gJiYgKHIubWV0aG9kID0gInJldHVybiIsIHIuYXJnID0gdCwgbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSwgInRocm93IiA9PT0gci5tZXRob2QpIHx8ICJyZXR1cm4iICE9PSBuICYmIChyLm1ldGhvZCA9ICJ0aHJvdyIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIiArIG4gKyAiJyBtZXRob2QiKSksIHk7CiAgICAgIHZhciBpID0gdHJ5Q2F0Y2gobywgZS5pdGVyYXRvciwgci5hcmcpOwogICAgICBpZiAoInRocm93IiA9PT0gaS50eXBlKSByZXR1cm4gci5tZXRob2QgPSAidGhyb3ciLCByLmFyZyA9IGkuYXJnLCByLmRlbGVnYXRlID0gbnVsbCwgeTsKICAgICAgdmFyIGEgPSBpLmFyZzsKICAgICAgcmV0dXJuIGEgPyBhLmRvbmUgPyAocltlLnJlc3VsdE5hbWVdID0gYS52YWx1ZSwgci5uZXh0ID0gZS5uZXh0TG9jLCAicmV0dXJuIiAhPT0gci5tZXRob2QgJiYgKHIubWV0aG9kID0gIm5leHQiLCByLmFyZyA9IHQpLCByLmRlbGVnYXRlID0gbnVsbCwgeSkgOiBhIDogKHIubWV0aG9kID0gInRocm93Iiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLCByLmRlbGVnYXRlID0gbnVsbCwgeSk7CiAgICB9CiAgICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkodCkgewogICAgICB2YXIgZSA9IHsKICAgICAgICB0cnlMb2M6IHRbMF0KICAgICAgfTsKICAgICAgMSBpbiB0ICYmIChlLmNhdGNoTG9jID0gdFsxXSksIDIgaW4gdCAmJiAoZS5maW5hbGx5TG9jID0gdFsyXSwgZS5hZnRlckxvYyA9IHRbM10pLCB0aGlzLnRyeUVudHJpZXMucHVzaChlKTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkodCkgewogICAgICB2YXIgZSA9IHQuY29tcGxldGlvbiB8fCB7fTsKICAgICAgZS50eXBlID0gIm5vcm1hbCIsIGRlbGV0ZSBlLmFyZywgdC5jb21wbGV0aW9uID0gZTsKICAgIH0KICAgIGZ1bmN0aW9uIENvbnRleHQodCkgewogICAgICB0aGlzLnRyeUVudHJpZXMgPSBbewogICAgICAgIHRyeUxvYzogInJvb3QiCiAgICAgIH1dLCB0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7CiAgICB9CiAgICBmdW5jdGlvbiB2YWx1ZXMoZSkgewogICAgICBpZiAoZSB8fCAiIiA9PT0gZSkgewogICAgICAgIHZhciByID0gZVthXTsKICAgICAgICBpZiAocikgcmV0dXJuIHIuY2FsbChlKTsKICAgICAgICBpZiAoImZ1bmN0aW9uIiA9PSB0eXBlb2YgZS5uZXh0KSByZXR1cm4gZTsKICAgICAgICBpZiAoIWlzTmFOKGUubGVuZ3RoKSkgewogICAgICAgICAgdmFyIG8gPSAtMSwKICAgICAgICAgICAgaSA9IGZ1bmN0aW9uIG5leHQoKSB7CiAgICAgICAgICAgICAgZm9yICg7ICsrbyA8IGUubGVuZ3RoOykgaWYgKG4uY2FsbChlLCBvKSkgcmV0dXJuIG5leHQudmFsdWUgPSBlW29dLCBuZXh0LmRvbmUgPSAhMSwgbmV4dDsKICAgICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICEwLCBuZXh0OwogICAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIGkubmV4dCA9IGk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IodHlwZW9mIGUgKyAiIGlzIG5vdCBpdGVyYWJsZSIpOwogICAgfQogICAgcmV0dXJuIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBvKGcsICJjb25zdHJ1Y3RvciIsIHsKICAgICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLAogICAgICBjb25maWd1cmFibGU6ICEwCiAgICB9KSwgbyhHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgImNvbnN0cnVjdG9yIiwgewogICAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb24sCiAgICAgIGNvbmZpZ3VyYWJsZTogITAKICAgIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdSwgIkdlbmVyYXRvckZ1bmN0aW9uIiksIGUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uICh0KSB7CiAgICAgIHZhciBlID0gImZ1bmN0aW9uIiA9PSB0eXBlb2YgdCAmJiB0LmNvbnN0cnVjdG9yOwogICAgICByZXR1cm4gISFlICYmIChlID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCAiR2VuZXJhdG9yRnVuY3Rpb24iID09PSAoZS5kaXNwbGF5TmFtZSB8fCBlLm5hbWUpKTsKICAgIH0sIGUubWFyayA9IGZ1bmN0aW9uICh0KSB7CiAgICAgIHJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YodCwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpIDogKHQuX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZSh0LCB1LCAiR2VuZXJhdG9yRnVuY3Rpb24iKSksIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShnKSwgdDsKICAgIH0sIGUuYXdyYXAgPSBmdW5jdGlvbiAodCkgewogICAgICByZXR1cm4gewogICAgICAgIF9fYXdhaXQ6IHQKICAgICAgfTsKICAgIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYywgZnVuY3Rpb24gKCkgewogICAgICByZXR1cm4gdGhpczsKICAgIH0pLCBlLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yLCBlLmFzeW5jID0gZnVuY3Rpb24gKHQsIHIsIG4sIG8sIGkpIHsKICAgICAgdm9pZCAwID09PSBpICYmIChpID0gUHJvbWlzZSk7CiAgICAgIHZhciBhID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcCh0LCByLCBuLCBvKSwgaSk7CiAgICAgIHJldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocikgPyBhIDogYS5uZXh0KCkudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgIHJldHVybiB0LmRvbmUgPyB0LnZhbHVlIDogYS5uZXh0KCk7CiAgICAgIH0pOwogICAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKGcpLCBkZWZpbmUoZywgdSwgIkdlbmVyYXRvciIpLCBkZWZpbmUoZywgYSwgZnVuY3Rpb24gKCkgewogICAgICByZXR1cm4gdGhpczsKICAgIH0pLCBkZWZpbmUoZywgInRvU3RyaW5nIiwgZnVuY3Rpb24gKCkgewogICAgICByZXR1cm4gIltvYmplY3QgR2VuZXJhdG9yXSI7CiAgICB9KSwgZS5rZXlzID0gZnVuY3Rpb24gKHQpIHsKICAgICAgdmFyIGUgPSBPYmplY3QodCksCiAgICAgICAgciA9IFtdOwogICAgICBmb3IgKHZhciBuIGluIGUpIHIucHVzaChuKTsKICAgICAgcmV0dXJuIHIucmV2ZXJzZSgpLCBmdW5jdGlvbiBuZXh0KCkgewogICAgICAgIGZvciAoOyByLmxlbmd0aDspIHsKICAgICAgICAgIHZhciB0ID0gci5wb3AoKTsKICAgICAgICAgIGlmICh0IGluIGUpIHJldHVybiBuZXh0LnZhbHVlID0gdCwgbmV4dC5kb25lID0gITEsIG5leHQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXh0LmRvbmUgPSAhMCwgbmV4dDsKICAgICAgfTsKICAgIH0sIGUudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHsKICAgICAgY29uc3RydWN0b3I6IENvbnRleHQsCiAgICAgIHJlc2V0OiBmdW5jdGlvbiAoZSkgewogICAgICAgIGlmICh0aGlzLnByZXYgPSAwLCB0aGlzLm5leHQgPSAwLCB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdCwgdGhpcy5kb25lID0gITEsIHRoaXMuZGVsZWdhdGUgPSBudWxsLCB0aGlzLm1ldGhvZCA9ICJuZXh0IiwgdGhpcy5hcmcgPSB0LCB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KSwgIWUpIGZvciAodmFyIHIgaW4gdGhpcykgInQiID09PSByLmNoYXJBdCgwKSAmJiBuLmNhbGwodGhpcywgcikgJiYgIWlzTmFOKCtyLnNsaWNlKDEpKSAmJiAodGhpc1tyXSA9IHQpOwogICAgICB9LAogICAgICBzdG9wOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdGhpcy5kb25lID0gITA7CiAgICAgICAgdmFyIHQgPSB0aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjsKICAgICAgICBpZiAoInRocm93IiA9PT0gdC50eXBlKSB0aHJvdyB0LmFyZzsKICAgICAgICByZXR1cm4gdGhpcy5ydmFsOwogICAgICB9LAogICAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gKGUpIHsKICAgICAgICBpZiAodGhpcy5kb25lKSB0aHJvdyBlOwogICAgICAgIHZhciByID0gdGhpczsKICAgICAgICBmdW5jdGlvbiBoYW5kbGUobiwgbykgewogICAgICAgICAgcmV0dXJuIGEudHlwZSA9ICJ0aHJvdyIsIGEuYXJnID0gZSwgci5uZXh0ID0gbiwgbyAmJiAoci5tZXRob2QgPSAibmV4dCIsIHIuYXJnID0gdCksICEhbzsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgbyA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBvID49IDA7IC0tbykgewogICAgICAgICAgdmFyIGkgPSB0aGlzLnRyeUVudHJpZXNbb10sCiAgICAgICAgICAgIGEgPSBpLmNvbXBsZXRpb247CiAgICAgICAgICBpZiAoInJvb3QiID09PSBpLnRyeUxvYykgcmV0dXJuIGhhbmRsZSgiZW5kIik7CiAgICAgICAgICBpZiAoaS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7CiAgICAgICAgICAgIHZhciBjID0gbi5jYWxsKGksICJjYXRjaExvYyIpLAogICAgICAgICAgICAgIHUgPSBuLmNhbGwoaSwgImZpbmFsbHlMb2MiKTsKICAgICAgICAgICAgaWYgKGMgJiYgdSkgewogICAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGkuY2F0Y2hMb2MsICEwKTsKICAgICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGkuZmluYWxseUxvYyk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoYykgewogICAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGkuY2F0Y2hMb2MsICEwKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBpZiAoIXUpIHRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTsKICAgICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGkuZmluYWxseUxvYyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIGFicnVwdDogZnVuY3Rpb24gKHQsIGUpIHsKICAgICAgICBmb3IgKHZhciByID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IHIgPj0gMDsgLS1yKSB7CiAgICAgICAgICB2YXIgbyA9IHRoaXMudHJ5RW50cmllc1tyXTsKICAgICAgICAgIGlmIChvLnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgbi5jYWxsKG8sICJmaW5hbGx5TG9jIikgJiYgdGhpcy5wcmV2IDwgby5maW5hbGx5TG9jKSB7CiAgICAgICAgICAgIHZhciBpID0gbzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGkgJiYgKCJicmVhayIgPT09IHQgfHwgImNvbnRpbnVlIiA9PT0gdCkgJiYgaS50cnlMb2MgPD0gZSAmJiBlIDw9IGkuZmluYWxseUxvYyAmJiAoaSA9IG51bGwpOwogICAgICAgIHZhciBhID0gaSA/IGkuY29tcGxldGlvbiA6IHt9OwogICAgICAgIHJldHVybiBhLnR5cGUgPSB0LCBhLmFyZyA9IGUsIGkgPyAodGhpcy5tZXRob2QgPSAibmV4dCIsIHRoaXMubmV4dCA9IGkuZmluYWxseUxvYywgeSkgOiB0aGlzLmNvbXBsZXRlKGEpOwogICAgICB9LAogICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKHQsIGUpIHsKICAgICAgICBpZiAoInRocm93IiA9PT0gdC50eXBlKSB0aHJvdyB0LmFyZzsKICAgICAgICByZXR1cm4gImJyZWFrIiA9PT0gdC50eXBlIHx8ICJjb250aW51ZSIgPT09IHQudHlwZSA/IHRoaXMubmV4dCA9IHQuYXJnIDogInJldHVybiIgPT09IHQudHlwZSA/ICh0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHQuYXJnLCB0aGlzLm1ldGhvZCA9ICJyZXR1cm4iLCB0aGlzLm5leHQgPSAiZW5kIikgOiAibm9ybWFsIiA9PT0gdC50eXBlICYmIGUgJiYgKHRoaXMubmV4dCA9IGUpLCB5OwogICAgICB9LAogICAgICBmaW5pc2g6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgZm9yICh2YXIgZSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBlID49IDA7IC0tZSkgewogICAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07CiAgICAgICAgICBpZiAoci5maW5hbGx5TG9jID09PSB0KSByZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sIHIuYWZ0ZXJMb2MpLCByZXNldFRyeUVudHJ5KHIpLCB5OwogICAgICAgIH0KICAgICAgfSwKICAgICAgY2F0Y2g6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgZm9yICh2YXIgZSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBlID49IDA7IC0tZSkgewogICAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07CiAgICAgICAgICBpZiAoci50cnlMb2MgPT09IHQpIHsKICAgICAgICAgICAgdmFyIG4gPSByLmNvbXBsZXRpb247CiAgICAgICAgICAgIGlmICgidGhyb3ciID09PSBuLnR5cGUpIHsKICAgICAgICAgICAgICB2YXIgbyA9IG4uYXJnOwogICAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkocik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIG87CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iik7CiAgICAgIH0sCiAgICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uIChlLCByLCBuKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUgPSB7CiAgICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGUpLAogICAgICAgICAgcmVzdWx0TmFtZTogciwKICAgICAgICAgIG5leHRMb2M6IG4KICAgICAgICB9LCAibmV4dCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHQpLCB5OwogICAgICB9CiAgICB9LCBlOwogIH0KICBmdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgewogICAgaWYgKCJvYmplY3QiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsKICAgIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOwogICAgaWYgKHZvaWQgMCAhPT0gZSkgewogICAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8ICJkZWZhdWx0Iik7CiAgICAgIGlmICgib2JqZWN0IiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIik7CiAgICB9CiAgICByZXR1cm4gKCJzdHJpbmciID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsKICB9CiAgZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgewogICAgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgInN0cmluZyIpOwogICAgcmV0dXJuICJzeW1ib2wiID09IHR5cGVvZiBpID8gaSA6IFN0cmluZyhpKTsKICB9CiAgZnVuY3Rpb24gX3R5cGVvZihvKSB7CiAgICAiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiOwoKICAgIHJldHVybiBfdHlwZW9mID0gImZ1bmN0aW9uIiA9PSB0eXBlb2YgU3ltYm9sICYmICJzeW1ib2wiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykgewogICAgICByZXR1cm4gdHlwZW9mIG87CiAgICB9IDogZnVuY3Rpb24gKG8pIHsKICAgICAgcmV0dXJuIG8gJiYgImZ1bmN0aW9uIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8uY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvICE9PSBTeW1ib2wucHJvdG90eXBlID8gInN5bWJvbCIgOiB0eXBlb2YgbzsKICAgIH0sIF90eXBlb2Yobyk7CiAgfQogIGZ1bmN0aW9uIF93cmFwQXN5bmNHZW5lcmF0b3IoZm4pIHsKICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CiAgICAgIHJldHVybiBuZXcgX0FzeW5jR2VuZXJhdG9yKGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpOwogICAgfTsKICB9CiAgZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykgewogICAgdHJ5IHsKICAgICAgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOwogICAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgcmVqZWN0KGVycm9yKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGluZm8uZG9uZSkgewogICAgICByZXNvbHZlKHZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTsKICAgIH0KICB9CiAgZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsKICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBzZWxmID0gdGhpcywKICAgICAgICBhcmdzID0gYXJndW1lbnRzOwogICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgewogICAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTsKICAgICAgICBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkgewogICAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCAibmV4dCIsIHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikgewogICAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCAidGhyb3ciLCBlcnIpOwogICAgICAgIH0KICAgICAgICBfbmV4dCh1bmRlZmluZWQpOwogICAgICB9KTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsKICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOwogICAgfQogIH0KICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07CiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsKICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOwogICAgICBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgX3RvUHJvcGVydHlLZXkoZGVzY3JpcHRvci5rZXkpLCBkZXNjcmlwdG9yKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgewogICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7CiAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsICJwcm90b3R5cGUiLCB7CiAgICAgIHdyaXRhYmxlOiBmYWxzZQogICAgfSk7CiAgICByZXR1cm4gQ29uc3RydWN0b3I7CiAgfQogIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsKICAgIGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7CiAgICBpZiAoa2V5IGluIG9iaikgewogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsKICAgICAgICB2YWx1ZTogdmFsdWUsCiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgd3JpdGFibGU6IHRydWUKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBvYmpba2V5XSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIG9iajsKICB9CiAgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7CiAgICByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOwogIH0KICBmdW5jdGlvbiBfdG9BcnJheShhcnIpIHsKICAgIHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOwogIH0KICBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7CiAgICByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOwogIH0KICBmdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7CiAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsKICB9CiAgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgewogICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsKICB9CiAgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7CiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gInVuZGVmaW5lZCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlclsiQEBpdGVyYXRvciJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOwogIH0KICBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7CiAgICBpZiAoIW8pIHJldHVybjsKICAgIGlmICh0eXBlb2YgbyA9PT0gInN0cmluZyIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOwogICAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOwogICAgaWYgKG4gPT09ICJPYmplY3QiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7CiAgICBpZiAobiA9PT0gIk1hcCIgfHwgbiA9PT0gIlNldCIpIHJldHVybiBBcnJheS5mcm9tKG8pOwogICAgaWYgKG4gPT09ICJBcmd1bWVudHMiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsKICB9CiAgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsKICAgIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldOwogICAgcmV0dXJuIGFycjI7CiAgfQogIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpOwogIH0KICBmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKTsKICB9CiAgZnVuY3Rpb24gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobywgYWxsb3dBcnJheUxpa2UpIHsKICAgIHZhciBpdCA9IHR5cGVvZiBTeW1ib2wgIT09ICJ1bmRlZmluZWQiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSB8fCBvWyJAQGl0ZXJhdG9yIl07CiAgICBpZiAoIWl0KSB7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KG8pIHx8IChpdCA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvKSkgfHwgYWxsb3dBcnJheUxpa2UgJiYgbyAmJiB0eXBlb2Ygby5sZW5ndGggPT09ICJudW1iZXIiKSB7CiAgICAgICAgaWYgKGl0KSBvID0gaXQ7CiAgICAgICAgdmFyIGkgPSAwOwogICAgICAgIHZhciBGID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHM6IEYsCiAgICAgICAgICBuOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmIChpID49IG8ubGVuZ3RoKSByZXR1cm4gewogICAgICAgICAgICAgIGRvbmU6IHRydWUKICAgICAgICAgICAgfTsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICBkb25lOiBmYWxzZSwKICAgICAgICAgICAgICB2YWx1ZTogb1tpKytdCiAgICAgICAgICAgIH07CiAgICAgICAgICB9LAogICAgICAgICAgZTogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdGhyb3cgZTsKICAgICAgICAgIH0sCiAgICAgICAgICBmOiBGCiAgICAgICAgfTsKICAgICAgfQogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIik7CiAgICB9CiAgICB2YXIgbm9ybWFsQ29tcGxldGlvbiA9IHRydWUsCiAgICAgIGRpZEVyciA9IGZhbHNlLAogICAgICBlcnI7CiAgICByZXR1cm4gewogICAgICBzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgaXQgPSBpdC5jYWxsKG8pOwogICAgICB9LAogICAgICBuOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHN0ZXAgPSBpdC5uZXh0KCk7CiAgICAgICAgbm9ybWFsQ29tcGxldGlvbiA9IHN0ZXAuZG9uZTsKICAgICAgICByZXR1cm4gc3RlcDsKICAgICAgfSwKICAgICAgZTogZnVuY3Rpb24gKGUpIHsKICAgICAgICBkaWRFcnIgPSB0cnVlOwogICAgICAgIGVyciA9IGU7CiAgICAgIH0sCiAgICAgIGY6IGZ1bmN0aW9uICgpIHsKICAgICAgICB0cnkgewogICAgICAgICAgaWYgKCFub3JtYWxDb21wbGV0aW9uICYmIGl0LnJldHVybiAhPSBudWxsKSBpdC5yZXR1cm4oKTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgaWYgKGRpZEVycikgdGhyb3cgZXJyOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9CgogIGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHsKICAgIHJldHVybiBmdW5jdGlvbiB3cmFwKCkgewogICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJndW1lbnRzKTsKICAgIH07CiAgfQoKICAvLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvcwoKICB2YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwogIHZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjsKICB2YXIga2luZE9mID0gZnVuY3Rpb24gKGNhY2hlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24gKHRoaW5nKSB7CiAgICAgIHZhciBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTsKICAgICAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpOwogICAgfTsKICB9KE9iamVjdC5jcmVhdGUobnVsbCkpOwogIHZhciBraW5kT2ZUZXN0ID0gZnVuY3Rpb24ga2luZE9mVGVzdCh0eXBlKSB7CiAgICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpOwogICAgcmV0dXJuIGZ1bmN0aW9uICh0aGluZykgewogICAgICByZXR1cm4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZTsKICAgIH07CiAgfTsKICB2YXIgdHlwZU9mVGVzdCA9IGZ1bmN0aW9uIHR5cGVPZlRlc3QodHlwZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uICh0aGluZykgewogICAgICByZXR1cm4gX3R5cGVvZih0aGluZykgPT09IHR5cGU7CiAgICB9OwogIH07CgogIC8qKgogICAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5CiAgICoKICAgKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0CiAgICoKICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlCiAgICovCiAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5OwoKICAvKioKICAgKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWQKICAgKgogICAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0CiAgICoKICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2UKICAgKi8KICB2YXIgaXNVbmRlZmluZWQgPSB0eXBlT2ZUZXN0KCd1bmRlZmluZWQnKTsKCiAgLyoqCiAgICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXIKICAgKgogICAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0CiAgICoKICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlCiAgICovCiAgZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7CiAgICByZXR1cm4gdmFsICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwpICYmIHZhbC5jb25zdHJ1Y3RvciAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsLmNvbnN0cnVjdG9yKSAmJiBpc0Z1bmN0aW9uKHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7CiAgfQoKICAvKioKICAgKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlcgogICAqCiAgICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3QKICAgKgogICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2UKICAgKi8KICB2YXIgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7CgogIC8qKgogICAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlcgogICAqCiAgICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3QKICAgKgogICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlCiAgICovCiAgZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7CiAgICB2YXIgcmVzdWx0OwogICAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KSB7CiAgICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpOwogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0ID0gdmFsICYmIHZhbC5idWZmZXIgJiYgaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZwogICAqCiAgICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3QKICAgKgogICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2UKICAgKi8KICB2YXIgaXNTdHJpbmcgPSB0eXBlT2ZUZXN0KCdzdHJpbmcnKTsKCiAgLyoqCiAgICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvbgogICAqCiAgICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3QKICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2UKICAgKi8KICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVPZlRlc3QoJ2Z1bmN0aW9uJyk7CgogIC8qKgogICAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyCiAgICoKICAgKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdAogICAqCiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZQogICAqLwogIHZhciBpc051bWJlciA9IHR5cGVPZlRlc3QoJ251bWJlcicpOwoKICAvKioKICAgKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3QKICAgKgogICAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3QKICAgKgogICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlCiAgICovCiAgdmFyIGlzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3QodGhpbmcpIHsKICAgIHJldHVybiB0aGluZyAhPT0gbnVsbCAmJiBfdHlwZW9mKHRoaW5nKSA9PT0gJ29iamVjdCc7CiAgfTsKCiAgLyoqCiAgICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCb29sZWFuCiAgICoKICAgKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0CiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCb29sZWFuLCBvdGhlcndpc2UgZmFsc2UKICAgKi8KICB2YXIgaXNCb29sZWFuID0gZnVuY3Rpb24gaXNCb29sZWFuKHRoaW5nKSB7CiAgICByZXR1cm4gdGhpbmcgPT09IHRydWUgfHwgdGhpbmcgPT09IGZhbHNlOwogIH07CgogIC8qKgogICAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0CiAgICoKICAgKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdAogICAqCiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZQogICAqLwogIHZhciBpc1BsYWluT2JqZWN0ID0gZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWwpIHsKICAgIGlmIChraW5kT2YodmFsKSAhPT0gJ29iamVjdCcpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdmFyIHByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKHZhbCk7CiAgICByZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbCkgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsKTsKICB9OwoKICAvKioKICAgKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGUKICAgKgogICAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0CiAgICoKICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZQogICAqLwogIHZhciBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7CgogIC8qKgogICAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZQogICAqCiAgICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3QKICAgKgogICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlCiAgICovCiAgdmFyIGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTsKCiAgLyoqCiAgICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iCiAgICoKICAgKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdAogICAqCiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2UKICAgKi8KICB2YXIgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpOwoKICAvKioKICAgKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0CiAgICoKICAgKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdAogICAqCiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2UKICAgKi8KICB2YXIgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7CgogIC8qKgogICAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtCiAgICoKICAgKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdAogICAqCiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZQogICAqLwogIHZhciBpc1N0cmVhbSA9IGZ1bmN0aW9uIGlzU3RyZWFtKHZhbCkgewogICAgcmV0dXJuIGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7CiAgfTsKCiAgLyoqCiAgICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YQogICAqCiAgICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdAogICAqCiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZQogICAqLwogIHZhciBpc0Zvcm1EYXRhID0gZnVuY3Rpb24gaXNGb3JtRGF0YSh0aGluZykgewogICAgdmFyIGtpbmQ7CiAgICByZXR1cm4gdGhpbmcgJiYgKHR5cGVvZiBGb3JtRGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGluZyBpbnN0YW5jZW9mIEZvcm1EYXRhIHx8IGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiAoKGtpbmQgPSBraW5kT2YodGhpbmcpKSA9PT0gJ2Zvcm1kYXRhJyB8fAogICAgLy8gZGV0ZWN0IGZvcm0tZGF0YSBpbnN0YW5jZQogICAga2luZCA9PT0gJ29iamVjdCcgJiYgaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgRm9ybURhdGFdJykpOwogIH07CgogIC8qKgogICAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdAogICAqCiAgICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3QKICAgKgogICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlCiAgICovCiAgdmFyIGlzVVJMU2VhcmNoUGFyYW1zID0ga2luZE9mVGVzdCgnVVJMU2VhcmNoUGFyYW1zJyk7CiAgdmFyIF9tYXAgPSBbJ1JlYWRhYmxlU3RyZWFtJywgJ1JlcXVlc3QnLCAnUmVzcG9uc2UnLCAnSGVhZGVycyddLm1hcChraW5kT2ZUZXN0KSwKICAgIF9tYXAyID0gX3NsaWNlZFRvQXJyYXkoX21hcCwgNCksCiAgICBpc1JlYWRhYmxlU3RyZWFtID0gX21hcDJbMF0sCiAgICBpc1JlcXVlc3QgPSBfbWFwMlsxXSwKICAgIGlzUmVzcG9uc2UgPSBfbWFwMlsyXSwKICAgIGlzSGVhZGVycyA9IF9tYXAyWzNdOwoKICAvKioKICAgKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmcKICAgKgogICAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltCiAgICoKICAgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlCiAgICovCiAgdmFyIHRyaW0gPSBmdW5jdGlvbiB0cmltKHN0cikgewogICAgcmV0dXJuIHN0ci50cmltID8gc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywgJycpOwogIH07CgogIC8qKgogICAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLgogICAqCiAgICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZwogICAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLgogICAqCiAgICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmcKICAgKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS4KICAgKgogICAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlCiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtCiAgICoKICAgKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzID0gZmFsc2VdCiAgICogQHJldHVybnMge2FueX0KICAgKi8KICBmdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4pIHsKICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fSwKICAgICAgX3JlZiRhbGxPd25LZXlzID0gX3JlZi5hbGxPd25LZXlzLAogICAgICBhbGxPd25LZXlzID0gX3JlZiRhbGxPd25LZXlzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkYWxsT3duS2V5czsKICAgIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZAogICAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykgewogICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgaTsKICAgIHZhciBsOwoKICAgIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZQogICAgaWYgKF90eXBlb2Yob2JqKSAhPT0gJ29iamVjdCcpIHsKICAgICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovCiAgICAgIG9iaiA9IFtvYmpdOwogICAgfQogICAgaWYgKGlzQXJyYXkob2JqKSkgewogICAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzCiAgICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5cwogICAgICB2YXIga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTsKICAgICAgdmFyIGxlbiA9IGtleXMubGVuZ3RoOwogICAgICB2YXIga2V5OwogICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICBrZXkgPSBrZXlzW2ldOwogICAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTsKICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7CiAgICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTsKICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTsKICAgIHZhciBpID0ga2V5cy5sZW5ndGg7CiAgICB2YXIgX2tleTsKICAgIHdoaWxlIChpLS0gPiAwKSB7CiAgICAgIF9rZXkgPSBrZXlzW2ldOwogICAgICBpZiAoa2V5ID09PSBfa2V5LnRvTG93ZXJDYXNlKCkpIHsKICAgICAgICByZXR1cm4gX2tleTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIHZhciBfZ2xvYmFsID0gZnVuY3Rpb24gKCkgewogICAgLyplc2xpbnQgbm8tdW5kZWY6MCovCiAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICJ1bmRlZmluZWQiKSByZXR1cm4gZ2xvYmFsVGhpczsKICAgIHJldHVybiB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWw7CiAgfSgpOwogIHZhciBpc0NvbnRleHREZWZpbmVkID0gZnVuY3Rpb24gaXNDb250ZXh0RGVmaW5lZChjb250ZXh0KSB7CiAgICByZXR1cm4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7CiAgfTsKCiAgLyoqCiAgICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlbgogICAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LgogICAqCiAgICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW4KICAgKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuCiAgICoKICAgKiBFeGFtcGxlOgogICAqCiAgICogYGBganMKICAgKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7CiAgICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2CiAgICogYGBgCiAgICoKICAgKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2UKICAgKgogICAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllcwogICAqLwogIGZ1bmN0aW9uIG1lcmdlKCAvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8KICApIHsKICAgIHZhciBfcmVmMiA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fSwKICAgICAgY2FzZWxlc3MgPSBfcmVmMi5jYXNlbGVzczsKICAgIHZhciByZXN1bHQgPSB7fTsKICAgIHZhciBhc3NpZ25WYWx1ZSA9IGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7CiAgICAgIHZhciB0YXJnZXRLZXkgPSBjYXNlbGVzcyAmJiBmaW5kS2V5KHJlc3VsdCwga2V5KSB8fCBrZXk7CiAgICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHsKICAgICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHJlc3VsdFt0YXJnZXRLZXldLCB2YWwpOwogICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkgewogICAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7CiAgICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7CiAgICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWwuc2xpY2UoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbDsKICAgICAgfQogICAgfTsKICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICBhcmd1bWVudHNbaV0gJiYgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLgogICAqCiAgICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZAogICAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb20KICAgKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG8KICAgKgogICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXNdCiAgICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYQogICAqLwogIHZhciBleHRlbmQgPSBmdW5jdGlvbiBleHRlbmQoYSwgYiwgdGhpc0FyZykgewogICAgdmFyIF9yZWYzID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB7fSwKICAgICAgYWxsT3duS2V5cyA9IF9yZWYzLmFsbE93bktleXM7CiAgICBmb3JFYWNoKGIsIGZ1bmN0aW9uICh2YWwsIGtleSkgewogICAgICBpZiAodGhpc0FyZyAmJiBpc0Z1bmN0aW9uKHZhbCkpIHsKICAgICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYVtrZXldID0gdmFsOwogICAgICB9CiAgICB9LCB7CiAgICAgIGFsbE93bktleXM6IGFsbE93bktleXMKICAgIH0pOwogICAgcmV0dXJuIGE7CiAgfTsKCiAgLyoqCiAgICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pCiAgICoKICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTQogICAqCiAgICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTQogICAqLwogIHZhciBzdHJpcEJPTSA9IGZ1bmN0aW9uIHN0cmlwQk9NKGNvbnRlbnQpIHsKICAgIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikgewogICAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTsKICAgIH0KICAgIHJldHVybiBjb250ZW50OwogIH07CgogIC8qKgogICAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlcgogICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yCiAgICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDb25zdHJ1Y3RvcgogICAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdCiAgICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc10KICAgKgogICAqIEByZXR1cm5zIHt2b2lkfQogICAqLwogIHZhciBpbmhlcml0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpIHsKICAgIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTsKICAgIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yOwogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLCAnc3VwZXInLCB7CiAgICAgIHZhbHVlOiBzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZQogICAgfSk7CiAgICBwcm9wcyAmJiBPYmplY3QuYXNzaWduKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcHMpOwogIH07CgogIC8qKgogICAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdAogICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdAogICAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial0KICAgKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW59IFtmaWx0ZXJdCiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BGaWx0ZXJdCiAgICoKICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAqLwogIHZhciB0b0ZsYXRPYmplY3QgPSBmdW5jdGlvbiB0b0ZsYXRPYmplY3Qoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIsIHByb3BGaWx0ZXIpIHsKICAgIHZhciBwcm9wczsKICAgIHZhciBpOwogICAgdmFyIHByb3A7CiAgICB2YXIgbWVyZ2VkID0ge307CiAgICBkZXN0T2JqID0gZGVzdE9iaiB8fCB7fTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcQogICAgaWYgKHNvdXJjZU9iaiA9PSBudWxsKSByZXR1cm4gZGVzdE9iajsKICAgIGRvIHsKICAgICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopOwogICAgICBpID0gcHJvcHMubGVuZ3RoOwogICAgICB3aGlsZSAoaS0tID4gMCkgewogICAgICAgIHByb3AgPSBwcm9wc1tpXTsKICAgICAgICBpZiAoKCFwcm9wRmlsdGVyIHx8IHByb3BGaWx0ZXIocHJvcCwgc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgIW1lcmdlZFtwcm9wXSkgewogICAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTsKICAgICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNvdXJjZU9iaiA9IGZpbHRlciAhPT0gZmFsc2UgJiYgZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTsKICAgIH0gd2hpbGUgKHNvdXJjZU9iaiAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlKTsKICAgIHJldHVybiBkZXN0T2JqOwogIH07CgogIC8qKgogICAqIERldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nCiAgICoKICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyCiAgICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZwogICAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdCiAgICoKICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0KICAgKi8KICB2YXIgZW5kc1dpdGggPSBmdW5jdGlvbiBlbmRzV2l0aChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pIHsKICAgIHN0ciA9IFN0cmluZyhzdHIpOwogICAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7CiAgICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDsKICAgIH0KICAgIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7CiAgICB2YXIgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7CiAgICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uOwogIH07CgogIC8qKgogICAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWQKICAgKgogICAqIEBwYXJhbSB7Kn0gW3RoaW5nXQogICAqCiAgICogQHJldHVybnMgez9BcnJheX0KICAgKi8KICB2YXIgdG9BcnJheSA9IGZ1bmN0aW9uIHRvQXJyYXkodGhpbmcpIHsKICAgIGlmICghdGhpbmcpIHJldHVybiBudWxsOwogICAgaWYgKGlzQXJyYXkodGhpbmcpKSByZXR1cm4gdGhpbmc7CiAgICB2YXIgaSA9IHRoaW5nLmxlbmd0aDsKICAgIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsOwogICAgdmFyIGFyciA9IG5ldyBBcnJheShpKTsKICAgIHdoaWxlIChpLS0gPiAwKSB7CiAgICAgIGFycltpXSA9IHRoaW5nW2ldOwogICAgfQogICAgcmV0dXJuIGFycjsKICB9OwoKICAvKioKICAgKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGUKICAgKiB0aGluZyBwYXNzZWQgaW4gaXMgYW4gaW5zdGFuY2Ugb2YgVWludDhBcnJheQogICAqCiAgICogQHBhcmFtIHtUeXBlZEFycmF5fQogICAqCiAgICogQHJldHVybnMge0FycmF5fQogICAqLwogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzCiAgdmFyIGlzVHlwZWRBcnJheSA9IGZ1bmN0aW9uIChUeXBlZEFycmF5KSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lcwogICAgcmV0dXJuIGZ1bmN0aW9uICh0aGluZykgewogICAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7CiAgICB9OwogIH0odHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTsKCiAgLyoqCiAgICogRm9yIGVhY2ggZW50cnkgaW4gdGhlIG9iamVjdCwgY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGUga2V5IGFuZCB2YWx1ZS4KICAgKgogICAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuCiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBlbnRyeS4KICAgKgogICAqIEByZXR1cm5zIHt2b2lkfQogICAqLwogIHZhciBmb3JFYWNoRW50cnkgPSBmdW5jdGlvbiBmb3JFYWNoRW50cnkob2JqLCBmbikgewogICAgdmFyIGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXTsKICAgIHZhciBpdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7CiAgICB2YXIgcmVzdWx0OwogICAgd2hpbGUgKChyZXN1bHQgPSBpdGVyYXRvci5uZXh0KCkpICYmICFyZXN1bHQuZG9uZSkgewogICAgICB2YXIgcGFpciA9IHJlc3VsdC52YWx1ZTsKICAgICAgZm4uY2FsbChvYmosIHBhaXJbMF0sIHBhaXJbMV0pOwogICAgfQogIH07CgogIC8qKgogICAqIEl0IHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFuZCBhIHN0cmluZywgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHRoZSBtYXRjaGVzCiAgICoKICAgKiBAcGFyYW0ge3N0cmluZ30gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBhZ2FpbnN0LgogICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIHNlYXJjaC4KICAgKgogICAqIEByZXR1cm5zIHtBcnJheTxib29sZWFuPn0KICAgKi8KICB2YXIgbWF0Y2hBbGwgPSBmdW5jdGlvbiBtYXRjaEFsbChyZWdFeHAsIHN0cikgewogICAgdmFyIG1hdGNoZXM7CiAgICB2YXIgYXJyID0gW107CiAgICB3aGlsZSAoKG1hdGNoZXMgPSByZWdFeHAuZXhlYyhzdHIpKSAhPT0gbnVsbCkgewogICAgICBhcnIucHVzaChtYXRjaGVzKTsKICAgIH0KICAgIHJldHVybiBhcnI7CiAgfTsKCiAgLyogQ2hlY2tpbmcgaWYgdGhlIGtpbmRPZlRlc3QgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGFuIEhUTUxGb3JtRWxlbWVudC4gKi8KICB2YXIgaXNIVE1MRm9ybSA9IGtpbmRPZlRlc3QoJ0hUTUxGb3JtRWxlbWVudCcpOwogIHZhciB0b0NhbWVsQ2FzZSA9IGZ1bmN0aW9uIHRvQ2FtZWxDYXNlKHN0cikgewogICAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG0sIHAxLCBwMikgewogICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyOwogICAgfSk7CiAgfTsKCiAgLyogQ3JlYXRpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY2hlY2sgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5LiAqLwogIHZhciBoYXNPd25Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChfcmVmNCkgewogICAgdmFyIGhhc093blByb3BlcnR5ID0gX3JlZjQuaGFzT3duUHJvcGVydHk7CiAgICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgcHJvcCkgewogICAgICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOwogICAgfTsKICB9KE9iamVjdC5wcm90b3R5cGUpOwoKICAvKioKICAgKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QKICAgKgogICAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0CiAgICoKICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIG90aGVyd2lzZSBmYWxzZQogICAqLwogIHZhciBpc1JlZ0V4cCA9IGtpbmRPZlRlc3QoJ1JlZ0V4cCcpOwogIHZhciByZWR1Y2VEZXNjcmlwdG9ycyA9IGZ1bmN0aW9uIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgcmVkdWNlcikgewogICAgdmFyIGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTsKICAgIHZhciByZWR1Y2VkRGVzY3JpcHRvcnMgPSB7fTsKICAgIGZvckVhY2goZGVzY3JpcHRvcnMsIGZ1bmN0aW9uIChkZXNjcmlwdG9yLCBuYW1lKSB7CiAgICAgIHZhciByZXQ7CiAgICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHsKICAgICAgICByZWR1Y2VkRGVzY3JpcHRvcnNbbmFtZV0gPSByZXQgfHwgZGVzY3JpcHRvcjsKICAgICAgfQogICAgfSk7CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmosIHJlZHVjZWREZXNjcmlwdG9ycyk7CiAgfTsKCiAgLyoqCiAgICogTWFrZXMgYWxsIG1ldGhvZHMgcmVhZC1vbmx5CiAgICogQHBhcmFtIHtPYmplY3R9IG9iagogICAqLwoKICB2YXIgZnJlZXplTWV0aG9kcyA9IGZ1bmN0aW9uIGZyZWV6ZU1ldGhvZHMob2JqKSB7CiAgICByZWR1Y2VEZXNjcmlwdG9ycyhvYmosIGZ1bmN0aW9uIChkZXNjcmlwdG9yLCBuYW1lKSB7CiAgICAgIC8vIHNraXAgcmVzdHJpY3RlZCBwcm9wcyBpbiBzdHJpY3QgbW9kZQogICAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICB2YXIgdmFsdWUgPSBvYmpbbmFtZV07CiAgICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybjsKICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7CiAgICAgIGlmICgnd3JpdGFibGUnIGluIGRlc2NyaXB0b3IpIHsKICAgICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghZGVzY3JpcHRvci5zZXQpIHsKICAgICAgICBkZXNjcmlwdG9yLnNldCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcJycgKyBuYW1lICsgJ1wnJyk7CiAgICAgICAgfTsKICAgICAgfQogICAgfSk7CiAgfTsKICB2YXIgdG9PYmplY3RTZXQgPSBmdW5jdGlvbiB0b09iamVjdFNldChhcnJheU9yU3RyaW5nLCBkZWxpbWl0ZXIpIHsKICAgIHZhciBvYmogPSB7fTsKICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUoYXJyKSB7CiAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgIG9ialt2YWx1ZV0gPSB0cnVlOwogICAgICB9KTsKICAgIH07CiAgICBpc0FycmF5KGFycmF5T3JTdHJpbmcpID8gZGVmaW5lKGFycmF5T3JTdHJpbmcpIDogZGVmaW5lKFN0cmluZyhhcnJheU9yU3RyaW5nKS5zcGxpdChkZWxpbWl0ZXIpKTsKICAgIHJldHVybiBvYmo7CiAgfTsKICB2YXIgbm9vcCA9IGZ1bmN0aW9uIG5vb3AoKSB7fTsKICB2YXIgdG9GaW5pdGVOdW1iZXIgPSBmdW5jdGlvbiB0b0Zpbml0ZU51bWJlcih2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUgPSArdmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7CiAgfTsKICB2YXIgQUxQSEEgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonOwogIHZhciBESUdJVCA9ICcwMTIzNDU2Nzg5JzsKICB2YXIgQUxQSEFCRVQgPSB7CiAgICBESUdJVDogRElHSVQsCiAgICBBTFBIQTogQUxQSEEsCiAgICBBTFBIQV9ESUdJVDogQUxQSEEgKyBBTFBIQS50b1VwcGVyQ2FzZSgpICsgRElHSVQKICB9OwogIHZhciBnZW5lcmF0ZVN0cmluZyA9IGZ1bmN0aW9uIGdlbmVyYXRlU3RyaW5nKCkgewogICAgdmFyIHNpemUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IDE2OwogICAgdmFyIGFscGhhYmV0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBBTFBIQUJFVC5BTFBIQV9ESUdJVDsKICAgIHZhciBzdHIgPSAnJzsKICAgIHZhciBsZW5ndGggPSBhbHBoYWJldC5sZW5ndGg7CiAgICB3aGlsZSAoc2l6ZS0tKSB7CiAgICAgIHN0ciArPSBhbHBoYWJldFtNYXRoLnJhbmRvbSgpICogbGVuZ3RoIHwgMF07CiAgICB9CiAgICByZXR1cm4gc3RyOwogIH07CgogIC8qKgogICAqIElmIHRoZSB0aGluZyBpcyBhIEZvcm1EYXRhIG9iamVjdCwgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuCiAgICoKICAgKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLgogICAqCiAgICogQHJldHVybnMge2Jvb2xlYW59CiAgICovCiAgZnVuY3Rpb24gaXNTcGVjQ29tcGxpYW50Rm9ybSh0aGluZykgewogICAgcmV0dXJuICEhKHRoaW5nICYmIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiB0aGluZ1tTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnICYmIHRoaW5nW1N5bWJvbC5pdGVyYXRvcl0pOwogIH0KICB2YXIgdG9KU09OT2JqZWN0ID0gZnVuY3Rpb24gdG9KU09OT2JqZWN0KG9iaikgewogICAgdmFyIHN0YWNrID0gbmV3IEFycmF5KDEwKTsKICAgIHZhciB2aXNpdCA9IGZ1bmN0aW9uIHZpc2l0KHNvdXJjZSwgaSkgewogICAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkgewogICAgICAgIGlmIChzdGFjay5pbmRleE9mKHNvdXJjZSkgPj0gMCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoISgndG9KU09OJyBpbiBzb3VyY2UpKSB7CiAgICAgICAgICBzdGFja1tpXSA9IHNvdXJjZTsKICAgICAgICAgIHZhciB0YXJnZXQgPSBpc0FycmF5KHNvdXJjZSkgPyBbXSA6IHt9OwogICAgICAgICAgZm9yRWFjaChzb3VyY2UsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7CiAgICAgICAgICAgIHZhciByZWR1Y2VkVmFsdWUgPSB2aXNpdCh2YWx1ZSwgaSArIDEpOwogICAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpOwogICAgICAgICAgfSk7CiAgICAgICAgICBzdGFja1tpXSA9IHVuZGVmaW5lZDsKICAgICAgICAgIHJldHVybiB0YXJnZXQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBzb3VyY2U7CiAgICB9OwogICAgcmV0dXJuIHZpc2l0KG9iaiwgMCk7CiAgfTsKICB2YXIgaXNBc3luY0ZuID0ga2luZE9mVGVzdCgnQXN5bmNGdW5jdGlvbicpOwogIHZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gaXNUaGVuYWJsZSh0aGluZykgewogICAgcmV0dXJuIHRoaW5nICYmIChpc09iamVjdCh0aGluZykgfHwgaXNGdW5jdGlvbih0aGluZykpICYmIGlzRnVuY3Rpb24odGhpbmcudGhlbikgJiYgaXNGdW5jdGlvbih0aGluZ1siY2F0Y2giXSk7CiAgfTsKICB2YXIgdXRpbHMkMSA9IHsKICAgIGlzQXJyYXk6IGlzQXJyYXksCiAgICBpc0FycmF5QnVmZmVyOiBpc0FycmF5QnVmZmVyLAogICAgaXNCdWZmZXI6IGlzQnVmZmVyLAogICAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSwKICAgIGlzQXJyYXlCdWZmZXJWaWV3OiBpc0FycmF5QnVmZmVyVmlldywKICAgIGlzU3RyaW5nOiBpc1N0cmluZywKICAgIGlzTnVtYmVyOiBpc051bWJlciwKICAgIGlzQm9vbGVhbjogaXNCb29sZWFuLAogICAgaXNPYmplY3Q6IGlzT2JqZWN0LAogICAgaXNQbGFpbk9iamVjdDogaXNQbGFpbk9iamVjdCwKICAgIGlzUmVhZGFibGVTdHJlYW06IGlzUmVhZGFibGVTdHJlYW0sCiAgICBpc1JlcXVlc3Q6IGlzUmVxdWVzdCwKICAgIGlzUmVzcG9uc2U6IGlzUmVzcG9uc2UsCiAgICBpc0hlYWRlcnM6IGlzSGVhZGVycywKICAgIGlzVW5kZWZpbmVkOiBpc1VuZGVmaW5lZCwKICAgIGlzRGF0ZTogaXNEYXRlLAogICAgaXNGaWxlOiBpc0ZpbGUsCiAgICBpc0Jsb2I6IGlzQmxvYiwKICAgIGlzUmVnRXhwOiBpc1JlZ0V4cCwKICAgIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sCiAgICBpc1N0cmVhbTogaXNTdHJlYW0sCiAgICBpc1VSTFNlYXJjaFBhcmFtczogaXNVUkxTZWFyY2hQYXJhbXMsCiAgICBpc1R5cGVkQXJyYXk6IGlzVHlwZWRBcnJheSwKICAgIGlzRmlsZUxpc3Q6IGlzRmlsZUxpc3QsCiAgICBmb3JFYWNoOiBmb3JFYWNoLAogICAgbWVyZ2U6IG1lcmdlLAogICAgZXh0ZW5kOiBleHRlbmQsCiAgICB0cmltOiB0cmltLAogICAgc3RyaXBCT006IHN0cmlwQk9NLAogICAgaW5oZXJpdHM6IGluaGVyaXRzLAogICAgdG9GbGF0T2JqZWN0OiB0b0ZsYXRPYmplY3QsCiAgICBraW5kT2Y6IGtpbmRPZiwKICAgIGtpbmRPZlRlc3Q6IGtpbmRPZlRlc3QsCiAgICBlbmRzV2l0aDogZW5kc1dpdGgsCiAgICB0b0FycmF5OiB0b0FycmF5LAogICAgZm9yRWFjaEVudHJ5OiBmb3JFYWNoRW50cnksCiAgICBtYXRjaEFsbDogbWF0Y2hBbGwsCiAgICBpc0hUTUxGb3JtOiBpc0hUTUxGb3JtLAogICAgaGFzT3duUHJvcGVydHk6IGhhc093blByb3BlcnR5LAogICAgaGFzT3duUHJvcDogaGFzT3duUHJvcGVydHksCiAgICAvLyBhbiBhbGlhcyB0byBhdm9pZCBFU0xpbnQgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIGRldGVjdGlvbgogICAgcmVkdWNlRGVzY3JpcHRvcnM6IHJlZHVjZURlc2NyaXB0b3JzLAogICAgZnJlZXplTWV0aG9kczogZnJlZXplTWV0aG9kcywKICAgIHRvT2JqZWN0U2V0OiB0b09iamVjdFNldCwKICAgIHRvQ2FtZWxDYXNlOiB0b0NhbWVsQ2FzZSwKICAgIG5vb3A6IG5vb3AsCiAgICB0b0Zpbml0ZU51bWJlcjogdG9GaW5pdGVOdW1iZXIsCiAgICBmaW5kS2V5OiBmaW5kS2V5LAogICAgZ2xvYmFsOiBfZ2xvYmFsLAogICAgaXNDb250ZXh0RGVmaW5lZDogaXNDb250ZXh0RGVmaW5lZCwKICAgIEFMUEhBQkVUOiBBTFBIQUJFVCwKICAgIGdlbmVyYXRlU3RyaW5nOiBnZW5lcmF0ZVN0cmluZywKICAgIGlzU3BlY0NvbXBsaWFudEZvcm06IGlzU3BlY0NvbXBsaWFudEZvcm0sCiAgICB0b0pTT05PYmplY3Q6IHRvSlNPTk9iamVjdCwKICAgIGlzQXN5bmNGbjogaXNBc3luY0ZuLAogICAgaXNUaGVuYWJsZTogaXNUaGVuYWJsZQogIH07CgogIC8qKgogICAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS4KICAgKgogICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLgogICAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuCiAgICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuCiAgICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC4KICAgKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuCiAgICoKICAgKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLgogICAqLwogIGZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkgewogICAgRXJyb3IuY2FsbCh0aGlzKTsKICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkgewogICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjazsKICAgIH0KICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7CiAgICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7CiAgICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTsKICAgIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpOwogICAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7CiAgICByZXNwb25zZSAmJiAodGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlKTsKICB9CiAgdXRpbHMkMS5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwgewogICAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgLy8gU3RhbmRhcmQKICAgICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsCiAgICAgICAgbmFtZTogdGhpcy5uYW1lLAogICAgICAgIC8vIE1pY3Jvc29mdAogICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLAogICAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsCiAgICAgICAgLy8gTW96aWxsYQogICAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLAogICAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlciwKICAgICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLAogICAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLAogICAgICAgIC8vIEF4aW9zCiAgICAgICAgY29uZmlnOiB1dGlscyQxLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksCiAgICAgICAgY29kZTogdGhpcy5jb2RlLAogICAgICAgIHN0YXR1czogdGhpcy5yZXNwb25zZSAmJiB0aGlzLnJlc3BvbnNlLnN0YXR1cyA/IHRoaXMucmVzcG9uc2Uuc3RhdHVzIDogbnVsbAogICAgICB9OwogICAgfQogIH0pOwogIHZhciBwcm90b3R5cGUkMSA9IEF4aW9zRXJyb3IucHJvdG90eXBlOwogIHZhciBkZXNjcmlwdG9ycyA9IHt9OwogIFsnRVJSX0JBRF9PUFRJT05fVkFMVUUnLCAnRVJSX0JBRF9PUFRJT04nLCAnRUNPTk5BQk9SVEVEJywgJ0VUSU1FRE9VVCcsICdFUlJfTkVUV09SSycsICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJywgJ0VSUl9ERVBSRUNBVEVEJywgJ0VSUl9CQURfUkVTUE9OU0UnLCAnRVJSX0JBRF9SRVFVRVNUJywgJ0VSUl9DQU5DRUxFRCcsICdFUlJfTk9UX1NVUFBPUlQnLCAnRVJSX0lOVkFMSURfVVJMJwogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzCiAgXS5mb3JFYWNoKGZ1bmN0aW9uIChjb2RlKSB7CiAgICBkZXNjcmlwdG9yc1tjb2RlXSA9IHsKICAgICAgdmFsdWU6IGNvZGUKICAgIH07CiAgfSk7CiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpOwogIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90b3R5cGUkMSwgJ2lzQXhpb3NFcnJvcicsIHsKICAgIHZhbHVlOiB0cnVlCiAgfSk7CgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzCiAgQXhpb3NFcnJvci5mcm9tID0gZnVuY3Rpb24gKGVycm9yLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlLCBjdXN0b21Qcm9wcykgewogICAgdmFyIGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSQxKTsKICAgIHV0aWxzJDEudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7CiAgICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTsKICAgIH0sIGZ1bmN0aW9uIChwcm9wKSB7CiAgICAgIHJldHVybiBwcm9wICE9PSAnaXNBeGlvc0Vycm9yJzsKICAgIH0pOwogICAgQXhpb3NFcnJvci5jYWxsKGF4aW9zRXJyb3IsIGVycm9yLm1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpOwogICAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yOwogICAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTsKICAgIGN1c3RvbVByb3BzICYmIE9iamVjdC5hc3NpZ24oYXhpb3NFcnJvciwgY3VzdG9tUHJvcHMpOwogICAgcmV0dXJuIGF4aW9zRXJyb3I7CiAgfTsKCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdAogIHZhciBodHRwQWRhcHRlciA9IG51bGw7CgogIC8qKgogICAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHRoaW5nIGlzIGEgYXJyYXkgb3IganMgb2JqZWN0LgogICAqCiAgICogQHBhcmFtIHtzdHJpbmd9IHRoaW5nIC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBiZSB2aXNpdGVkLgogICAqCiAgICogQHJldHVybnMge2Jvb2xlYW59CiAgICovCiAgZnVuY3Rpb24gaXNWaXNpdGFibGUodGhpbmcpIHsKICAgIHJldHVybiB1dGlscyQxLmlzUGxhaW5PYmplY3QodGhpbmcpIHx8IHV0aWxzJDEuaXNBcnJheSh0aGluZyk7CiAgfQoKICAvKioKICAgKiBJdCByZW1vdmVzIHRoZSBicmFja2V0cyBmcm9tIHRoZSBlbmQgb2YgYSBzdHJpbmcKICAgKgogICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwYXJhbWV0ZXIuCiAgICoKICAgKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUga2V5IHdpdGhvdXQgdGhlIGJyYWNrZXRzLgogICAqLwogIGZ1bmN0aW9uIHJlbW92ZUJyYWNrZXRzKGtleSkgewogICAgcmV0dXJuIHV0aWxzJDEuZW5kc1dpdGgoa2V5LCAnW10nKSA/IGtleS5zbGljZSgwLCAtMikgOiBrZXk7CiAgfQoKICAvKioKICAgKiBJdCB0YWtlcyBhIHBhdGgsIGEga2V5LCBhbmQgYSBib29sZWFuLCBhbmQgcmV0dXJucyBhIHN0cmluZwogICAqCiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuCiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGJlaW5nIGl0ZXJhdGVkIG92ZXIuCiAgICogQHBhcmFtIHtzdHJpbmd9IGRvdHMgLSBJZiB0cnVlLCB0aGUga2V5IHdpbGwgYmUgcmVuZGVyZWQgd2l0aCBkb3RzIGluc3RlYWQgb2YgYnJhY2tldHMuCiAgICoKICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuCiAgICovCiAgZnVuY3Rpb24gcmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cykgewogICAgaWYgKCFwYXRoKSByZXR1cm4ga2V5OwogICAgcmV0dXJuIHBhdGguY29uY2F0KGtleSkubWFwKGZ1bmN0aW9uIGVhY2godG9rZW4sIGkpIHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduCiAgICAgIHRva2VuID0gcmVtb3ZlQnJhY2tldHModG9rZW4pOwogICAgICByZXR1cm4gIWRvdHMgJiYgaSA/ICdbJyArIHRva2VuICsgJ10nIDogdG9rZW47CiAgICB9KS5qb2luKGRvdHMgPyAnLicgOiAnJyk7CiAgfQoKICAvKioKICAgKiBJZiB0aGUgYXJyYXkgaXMgYW4gYXJyYXkgYW5kIG5vbmUgb2YgaXRzIGVsZW1lbnRzIGFyZSB2aXNpdGFibGUsIHRoZW4gaXQncyBhIGZsYXQgYXJyYXkuCiAgICoKICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVjawogICAqCiAgICogQHJldHVybnMge2Jvb2xlYW59CiAgICovCiAgZnVuY3Rpb24gaXNGbGF0QXJyYXkoYXJyKSB7CiAgICByZXR1cm4gdXRpbHMkMS5pc0FycmF5KGFycikgJiYgIWFyci5zb21lKGlzVmlzaXRhYmxlKTsKICB9CiAgdmFyIHByZWRpY2F0ZXMgPSB1dGlscyQxLnRvRmxhdE9iamVjdCh1dGlscyQxLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHsKICAgIHJldHVybiAvXmlzW0EtWl0vLnRlc3QocHJvcCk7CiAgfSk7CgogIC8qKgogICAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YQogICAqCiAgICogQHBhcmFtIHtPYmplY3R9IG9iagogICAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXQogICAqIEBwYXJhbSB7P09iamVjdH0gW29wdGlvbnNdCiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMudmlzaXRvcl0KICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXQogICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZG90cyA9IGZhbHNlXQogICAqIEBwYXJhbSB7P0Jvb2xlYW59IFtvcHRpb25zLmluZGV4ZXMgPSBmYWxzZV0KICAgKgogICAqIEByZXR1cm5zIHtPYmplY3R9CiAgICoqLwoKICAvKioKICAgKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdAogICAqCiAgICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gZm9ybSBkYXRhLgogICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLgogICAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9ucwogICAqCiAgICogQHJldHVybnMKICAgKi8KICBmdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEsIG9wdGlvbnMpIHsKICAgIGlmICghdXRpbHMkMS5pc09iamVjdChvYmopKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpOwogICAgfQoKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnbgogICAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgKEZvcm1EYXRhKSgpOwoKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnbgogICAgb3B0aW9ucyA9IHV0aWxzJDEudG9GbGF0T2JqZWN0KG9wdGlvbnMsIHsKICAgICAgbWV0YVRva2VuczogdHJ1ZSwKICAgICAgZG90czogZmFsc2UsCiAgICAgIGluZGV4ZXM6IGZhbHNlCiAgICB9LCBmYWxzZSwgZnVuY3Rpb24gZGVmaW5lZChvcHRpb24sIHNvdXJjZSkgewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXEKICAgICAgcmV0dXJuICF1dGlscyQxLmlzVW5kZWZpbmVkKHNvdXJjZVtvcHRpb25dKTsKICAgIH0pOwogICAgdmFyIG1ldGFUb2tlbnMgPSBvcHRpb25zLm1ldGFUb2tlbnM7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmUKICAgIHZhciB2aXNpdG9yID0gb3B0aW9ucy52aXNpdG9yIHx8IGRlZmF1bHRWaXNpdG9yOwogICAgdmFyIGRvdHMgPSBvcHRpb25zLmRvdHM7CiAgICB2YXIgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlczsKICAgIHZhciBfQmxvYiA9IG9wdGlvbnMuQmxvYiB8fCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgQmxvYjsKICAgIHZhciB1c2VCbG9iID0gX0Jsb2IgJiYgdXRpbHMkMS5pc1NwZWNDb21wbGlhbnRGb3JtKGZvcm1EYXRhKTsKICAgIGlmICghdXRpbHMkMS5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Zpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7CiAgICB9CiAgICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHsKICAgICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJyc7CiAgICAgIGlmICh1dGlscyQxLmlzRGF0ZSh2YWx1ZSkpIHsKICAgICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTsKICAgICAgfQogICAgICBpZiAoIXVzZUJsb2IgJiYgdXRpbHMkMS5pc0Jsb2IodmFsdWUpKSB7CiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7CiAgICAgIH0KICAgICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMkMS5pc1R5cGVkQXJyYXkodmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIHVzZUJsb2IgJiYgdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTsKICAgICAgfQogICAgICByZXR1cm4gdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZWZhdWx0IHZpc2l0b3IuCiAgICAgKgogICAgICogQHBhcmFtIHsqfSB2YWx1ZQogICAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXkKICAgICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nfE51bWJlcj59IHBhdGgKICAgICAqIEB0aGlzIHtGb3JtRGF0YX0KICAgICAqCiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJuIHRydWUgdG8gdmlzaXQgdGhlIGVhY2ggcHJvcCBvZiB0aGUgdmFsdWUgcmVjdXJzaXZlbHkKICAgICAqLwogICAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkgewogICAgICB2YXIgYXJyID0gdmFsdWU7CiAgICAgIGlmICh2YWx1ZSAmJiAhcGF0aCAmJiBfdHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcpIHsKICAgICAgICBpZiAodXRpbHMkMS5lbmRzV2l0aChrZXksICd7fScpKSB7CiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ24KICAgICAgICAgIGtleSA9IG1ldGFUb2tlbnMgPyBrZXkgOiBrZXkuc2xpY2UoMCwgLTIpOwogICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduCiAgICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTsKICAgICAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpIHx8ICh1dGlscyQxLmlzRmlsZUxpc3QodmFsdWUpIHx8IHV0aWxzJDEuZW5kc1dpdGgoa2V5LCAnW10nKSkgJiYgKGFyciA9IHV0aWxzJDEudG9BcnJheSh2YWx1ZSkpKSB7CiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ24KICAgICAgICAgIGtleSA9IHJlbW92ZUJyYWNrZXRzKGtleSk7CiAgICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkgewogICAgICAgICAgICAhKHV0aWxzJDEuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiBmb3JtRGF0YS5hcHBlbmQoCiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeQogICAgICAgICAgICBpbmRleGVzID09PSB0cnVlID8gcmVuZGVyS2V5KFtrZXldLCBpbmRleCwgZG90cykgOiBpbmRleGVzID09PSBudWxsID8ga2V5IDoga2V5ICsgJ1tdJywgY29udmVydFZhbHVlKGVsKSk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGlzVmlzaXRhYmxlKHZhbHVlKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHZhciBzdGFjayA9IFtdOwogICAgdmFyIGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7CiAgICAgIGRlZmF1bHRWaXNpdG9yOiBkZWZhdWx0VmlzaXRvciwKICAgICAgY29udmVydFZhbHVlOiBjb252ZXJ0VmFsdWUsCiAgICAgIGlzVmlzaXRhYmxlOiBpc1Zpc2l0YWJsZQogICAgfSk7CiAgICBmdW5jdGlvbiBidWlsZCh2YWx1ZSwgcGF0aCkgewogICAgICBpZiAodXRpbHMkMS5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjsKICAgICAgaWYgKHN0YWNrLmluZGV4T2YodmFsdWUpICE9PSAtMSkgewogICAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhdGguam9pbignLicpKTsKICAgICAgfQogICAgICBzdGFjay5wdXNoKHZhbHVlKTsKICAgICAgdXRpbHMkMS5mb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiBlYWNoKGVsLCBrZXkpIHsKICAgICAgICB2YXIgcmVzdWx0ID0gISh1dGlscyQxLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgdmlzaXRvci5jYWxsKGZvcm1EYXRhLCBlbCwgdXRpbHMkMS5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnMpOwogICAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHsKICAgICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBzdGFjay5wb3AoKTsKICAgIH0KICAgIGlmICghdXRpbHMkMS5pc09iamVjdChvYmopKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RhdGEgbXVzdCBiZSBhbiBvYmplY3QnKTsKICAgIH0KICAgIGJ1aWxkKG9iaik7CiAgICByZXR1cm4gZm9ybURhdGE7CiAgfQoKICAvKioKICAgKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGgKICAgKiB0aGVpciBwZXJjZW50LWVuY29kZWQgZXF1aXZhbGVudHMKICAgKgogICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS4KICAgKgogICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHN0cmluZy4KICAgKi8KICBmdW5jdGlvbiBlbmNvZGUkMShzdHIpIHsKICAgIHZhciBjaGFyTWFwID0gewogICAgICAnISc6ICclMjEnLAogICAgICAiJyI6ICclMjcnLAogICAgICAnKCc6ICclMjgnLAogICAgICAnKSc6ICclMjknLAogICAgICAnfic6ICclN0UnLAogICAgICAnJTIwJzogJysnLAogICAgICAnJTAwJzogJ1x4MDAnCiAgICB9OwogICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkgewogICAgICByZXR1cm4gY2hhck1hcFttYXRjaF07CiAgICB9KTsKICB9CgogIC8qKgogICAqIEl0IHRha2VzIGEgcGFyYW1zIG9iamVjdCBhbmQgY29udmVydHMgaXQgdG8gYSBGb3JtRGF0YSBvYmplY3QKICAgKgogICAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LgogICAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBwYXNzZWQgdG8gdGhlIEF4aW9zIGNvbnN0cnVjdG9yLgogICAqCiAgICogQHJldHVybnMge3ZvaWR9CiAgICovCiAgZnVuY3Rpb24gQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKSB7CiAgICB0aGlzLl9wYWlycyA9IFtdOwogICAgcGFyYW1zICYmIHRvRm9ybURhdGEocGFyYW1zLCB0aGlzLCBvcHRpb25zKTsKICB9CiAgdmFyIHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTsKICBwcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKG5hbWUsIHZhbHVlKSB7CiAgICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pOwogIH07CiAgcHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2RlcikgewogICAgdmFyIF9lbmNvZGUgPSBlbmNvZGVyID8gZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgIHJldHVybiBlbmNvZGVyLmNhbGwodGhpcywgdmFsdWUsIGVuY29kZSQxKTsKICAgIH0gOiBlbmNvZGUkMTsKICAgIHJldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24gZWFjaChwYWlyKSB7CiAgICAgIHJldHVybiBfZW5jb2RlKHBhaXJbMF0pICsgJz0nICsgX2VuY29kZShwYWlyWzFdKTsKICAgIH0sICcnKS5qb2luKCcmJyk7CiAgfTsKCiAgLyoqCiAgICogSXQgcmVwbGFjZXMgYWxsIGluc3RhbmNlcyBvZiB0aGUgY2hhcmFjdGVycyBgOmAsIGAkYCwgYCxgLCBgK2AsIGBbYCwgYW5kIGBdYCB3aXRoIHRoZWlyCiAgICogVVJJIGVuY29kZWQgY291bnRlcnBhcnRzCiAgICoKICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsIFRoZSB2YWx1ZSB0byBiZSBlbmNvZGVkLgogICAqCiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgdmFsdWUuCiAgICovCiAgZnVuY3Rpb24gZW5jb2RlKHZhbCkgewogICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLnJlcGxhY2UoLyUzQS9naSwgJzonKS5yZXBsYWNlKC8lMjQvZywgJyQnKS5yZXBsYWNlKC8lMkMvZ2ksICcsJykucmVwbGFjZSgvJTIwL2csICcrJykucmVwbGFjZSgvJTVCL2dpLCAnWycpLnJlcGxhY2UoLyU1RC9naSwgJ10nKTsKICB9CgogIC8qKgogICAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZAogICAqCiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pCiAgICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWQKICAgKiBAcGFyYW0gez9vYmplY3R9IG9wdGlvbnMKICAgKgogICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsCiAgICovCiAgZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIG9wdGlvbnMpIHsKICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqLwogICAgaWYgKCFwYXJhbXMpIHsKICAgICAgcmV0dXJuIHVybDsKICAgIH0KICAgIHZhciBfZW5jb2RlID0gb3B0aW9ucyAmJiBvcHRpb25zLmVuY29kZSB8fCBlbmNvZGU7CiAgICB2YXIgc2VyaWFsaXplRm4gPSBvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplOwogICAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7CiAgICBpZiAoc2VyaWFsaXplRm4pIHsKICAgICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7CiAgICB9IGVsc2UgewogICAgICBzZXJpYWxpemVkUGFyYW1zID0gdXRpbHMkMS5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpID8gcGFyYW1zLnRvU3RyaW5nKCkgOiBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTsKICAgIH0KICAgIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7CiAgICAgIHZhciBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoIiMiKTsKICAgICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7CiAgICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpOwogICAgICB9CiAgICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtczsKICAgIH0KICAgIHJldHVybiB1cmw7CiAgfQoKICB2YXIgSW50ZXJjZXB0b3JNYW5hZ2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgIGZ1bmN0aW9uIEludGVyY2VwdG9yTWFuYWdlcigpIHsKICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEludGVyY2VwdG9yTWFuYWdlcik7CiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2sKICAgICAqCiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgCiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYAogICAgICoKICAgICAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXIKICAgICAqLwogICAgX2NyZWF0ZUNsYXNzKEludGVyY2VwdG9yTWFuYWdlciwgW3sKICAgICAga2V5OiAidXNlIiwKICAgICAgdmFsdWU6IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7CiAgICAgICAgdGhpcy5oYW5kbGVycy5wdXNoKHsKICAgICAgICAgIGZ1bGZpbGxlZDogZnVsZmlsbGVkLAogICAgICAgICAgcmVqZWN0ZWQ6IHJlamVjdGVkLAogICAgICAgICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsCiAgICAgICAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbAogICAgICAgIH0pOwogICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2sKICAgICAgICoKICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYAogICAgICAgKgogICAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnRlcmNlcHRvciB3YXMgcmVtb3ZlZCwgYGZhbHNlYCBvdGhlcndpc2UKICAgICAgICovCiAgICB9LCB7CiAgICAgIGtleTogImVqZWN0IiwKICAgICAgdmFsdWU6IGZ1bmN0aW9uIGVqZWN0KGlkKSB7CiAgICAgICAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7CiAgICAgICAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogQ2xlYXIgYWxsIGludGVyY2VwdG9ycyBmcm9tIHRoZSBzdGFjawogICAgICAgKgogICAgICAgKiBAcmV0dXJucyB7dm9pZH0KICAgICAgICovCiAgICB9LCB7CiAgICAgIGtleTogImNsZWFyIiwKICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyKCkgewogICAgICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7CiAgICAgICAgICB0aGlzLmhhbmRsZXJzID0gW107CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnMKICAgICAgICoKICAgICAgICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnkKICAgICAgICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yCiAgICAgICAqCiAgICAgICAqIEByZXR1cm5zIHt2b2lkfQogICAgICAgKi8KICAgIH0sIHsKICAgICAga2V5OiAiZm9yRWFjaCIsCiAgICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7CiAgICAgICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHsKICAgICAgICAgIGlmIChoICE9PSBudWxsKSB7CiAgICAgICAgICAgIGZuKGgpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9XSk7CiAgICByZXR1cm4gSW50ZXJjZXB0b3JNYW5hZ2VyOwogIH0oKTsKICB2YXIgSW50ZXJjZXB0b3JNYW5hZ2VyJDEgPSBJbnRlcmNlcHRvck1hbmFnZXI7CgogIHZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHsKICAgIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLAogICAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsCiAgICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZQogIH07CgogIHZhciBVUkxTZWFyY2hQYXJhbXMkMSA9IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnID8gVVJMU2VhcmNoUGFyYW1zIDogQXhpb3NVUkxTZWFyY2hQYXJhbXM7CgogIHZhciBGb3JtRGF0YSQxID0gdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyA/IEZvcm1EYXRhIDogbnVsbDsKCiAgdmFyIEJsb2IkMSA9IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyA/IEJsb2IgOiBudWxsOwoKICB2YXIgcGxhdGZvcm0kMSA9IHsKICAgIGlzQnJvd3NlcjogdHJ1ZSwKICAgIGNsYXNzZXM6IHsKICAgICAgVVJMU2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXMkMSwKICAgICAgRm9ybURhdGE6IEZvcm1EYXRhJDEsCiAgICAgIEJsb2I6IEJsb2IkMQogICAgfSwKICAgIHByb3RvY29sczogWydodHRwJywgJ2h0dHBzJywgJ2ZpbGUnLCAnYmxvYicsICd1cmwnLCAnZGF0YSddCiAgfTsKCiAgdmFyIGhhc0Jyb3dzZXJFbnYgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnOwoKICAvKioKICAgKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQKICAgKgogICAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuCiAgICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLgogICAqCiAgICogd2ViIHdvcmtlcnM6CiAgICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkCiAgICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWQKICAgKgogICAqIHJlYWN0LW5hdGl2ZToKICAgKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJwogICAqIG5hdGl2ZXNjcmlwdAogICAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnCiAgICoKICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0KICAgKi8KICB2YXIgaGFzU3RhbmRhcmRCcm93c2VyRW52ID0gZnVuY3Rpb24gKHByb2R1Y3QpIHsKICAgIHJldHVybiBoYXNCcm93c2VyRW52ICYmIFsnUmVhY3ROYXRpdmUnLCAnTmF0aXZlU2NyaXB0JywgJ05TJ10uaW5kZXhPZihwcm9kdWN0KSA8IDA7CiAgfSh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IucHJvZHVjdCk7CgogIC8qKgogICAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciB3ZWJXb3JrZXIgZW52aXJvbm1lbnQKICAgKgogICAqIEFsdGhvdWdoIHRoZSBgaXNTdGFuZGFyZEJyb3dzZXJFbnZgIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdAogICAqIGBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlcmAsIHRoZSBXZWJXb3JrZXIgd2lsbCBzdGlsbCBiZQogICAqIGZpbHRlcmVkIG91dCBkdWUgdG8gaXRzIGp1ZGdtZW50IHN0YW5kYXJkCiAgICogYHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdgLgogICAqIFRoaXMgbGVhZHMgdG8gYSBwcm9ibGVtIHdoZW4gYXhpb3MgcG9zdCBgRm9ybURhdGFgIGluIHdlYldvcmtlcgogICAqLwogIHZhciBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYgPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmCiAgICBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUgJiYgdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJzsKICB9KCk7CiAgdmFyIG9yaWdpbiA9IGhhc0Jyb3dzZXJFbnYgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYgfHwgJ2h0dHA6Ly9sb2NhbGhvc3QnOwoKICB2YXIgdXRpbHMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7CiAgICBfX3Byb3RvX186IG51bGwsCiAgICBoYXNCcm93c2VyRW52OiBoYXNCcm93c2VyRW52LAogICAgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OiBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYsCiAgICBoYXNTdGFuZGFyZEJyb3dzZXJFbnY6IGhhc1N0YW5kYXJkQnJvd3NlckVudiwKICAgIG9yaWdpbjogb3JpZ2luCiAgfSk7CgogIHZhciBwbGF0Zm9ybSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCB1dGlscyksIHBsYXRmb3JtJDEpOwoKICBmdW5jdGlvbiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIG9wdGlvbnMpIHsKICAgIHJldHVybiB0b0Zvcm1EYXRhKGRhdGEsIG5ldyBwbGF0Zm9ybS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcygpLCBPYmplY3QuYXNzaWduKHsKICAgICAgdmlzaXRvcjogZnVuY3Rpb24gdmlzaXRvcih2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7CiAgICAgICAgaWYgKHBsYXRmb3JtLmlzTm9kZSAmJiB1dGlscyQxLmlzQnVmZmVyKHZhbHVlKSkgewogICAgICAgICAgdGhpcy5hcHBlbmQoa2V5LCB2YWx1ZS50b1N0cmluZygnYmFzZTY0JykpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaGVscGVycy5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9LCBvcHRpb25zKSk7CiAgfQoKICAvKioKICAgKiBJdCB0YWtlcyBhIHN0cmluZyBsaWtlIGBmb29beF1beV1bel1gIGFuZCByZXR1cm5zIGFuIGFycmF5IGxpa2UgYFsnZm9vJywgJ3gnLCAneScsICd6J10KICAgKgogICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC4KICAgKgogICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MuCiAgICovCiAgZnVuY3Rpb24gcGFyc2VQcm9wUGF0aChuYW1lKSB7CiAgICAvLyBmb29beF1beV1bel0KICAgIC8vIGZvby54LnkuegogICAgLy8gZm9vLXgteS16CiAgICAvLyBmb28geCB5IHoKICAgIHJldHVybiB1dGlscyQxLm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZywgbmFtZSkubWFwKGZ1bmN0aW9uIChtYXRjaCkgewogICAgICByZXR1cm4gbWF0Y2hbMF0gPT09ICdbXScgPyAnJyA6IG1hdGNoWzFdIHx8IG1hdGNoWzBdOwogICAgfSk7CiAgfQoKICAvKioKICAgKiBDb252ZXJ0IGFuIGFycmF5IHRvIGFuIG9iamVjdC4KICAgKgogICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNvbnZlcnQgdG8gYW4gb2JqZWN0LgogICAqCiAgICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS4KICAgKi8KICBmdW5jdGlvbiBhcnJheVRvT2JqZWN0KGFycikgewogICAgdmFyIG9iaiA9IHt9OwogICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhcnIpOwogICAgdmFyIGk7CiAgICB2YXIgbGVuID0ga2V5cy5sZW5ndGg7CiAgICB2YXIga2V5OwogICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGtleSA9IGtleXNbaV07CiAgICAgIG9ialtrZXldID0gYXJyW2tleV07CiAgICB9CiAgICByZXR1cm4gb2JqOwogIH0KCiAgLyoqCiAgICogSXQgdGFrZXMgYSBGb3JtRGF0YSBvYmplY3QgYW5kIHJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdAogICAqCiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gY29udmVydCB0byBKU09OLgogICAqCiAgICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC4KICAgKi8KICBmdW5jdGlvbiBmb3JtRGF0YVRvSlNPTihmb3JtRGF0YSkgewogICAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7CiAgICAgIHZhciBuYW1lID0gcGF0aFtpbmRleCsrXTsKICAgICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTsKICAgICAgdmFyIGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7CiAgICAgIHZhciBpc0xhc3QgPSBpbmRleCA+PSBwYXRoLmxlbmd0aDsKICAgICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzJDEuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0Lmxlbmd0aCA6IG5hbWU7CiAgICAgIGlmIChpc0xhc3QpIHsKICAgICAgICBpZiAodXRpbHMkMS5oYXNPd25Qcm9wKHRhcmdldCwgbmFtZSkpIHsKICAgICAgICAgIHRhcmdldFtuYW1lXSA9IFt0YXJnZXRbbmFtZV0sIHZhbHVlXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiAhaXNOdW1lcmljS2V5OwogICAgICB9CiAgICAgIGlmICghdGFyZ2V0W25hbWVdIHx8ICF1dGlscyQxLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHsKICAgICAgICB0YXJnZXRbbmFtZV0gPSBbXTsKICAgICAgfQogICAgICB2YXIgcmVzdWx0ID0gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXRbbmFtZV0sIGluZGV4KTsKICAgICAgaWYgKHJlc3VsdCAmJiB1dGlscyQxLmlzQXJyYXkodGFyZ2V0W25hbWVdKSkgewogICAgICAgIHRhcmdldFtuYW1lXSA9IGFycmF5VG9PYmplY3QodGFyZ2V0W25hbWVdKTsKICAgICAgfQogICAgICByZXR1cm4gIWlzTnVtZXJpY0tleTsKICAgIH0KICAgIGlmICh1dGlscyQxLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzJDEuaXNGdW5jdGlvbihmb3JtRGF0YS5lbnRyaWVzKSkgewogICAgICB2YXIgb2JqID0ge307CiAgICAgIHV0aWxzJDEuZm9yRWFjaEVudHJ5KGZvcm1EYXRhLCBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKICAgICAgICBidWlsZFBhdGgocGFyc2VQcm9wUGF0aChuYW1lKSwgdmFsdWUsIG9iaiwgMCk7CiAgICAgIH0pOwogICAgICByZXR1cm4gb2JqOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvKioKICAgKiBJdCB0YWtlcyBhIHN0cmluZywgdHJpZXMgdG8gcGFyc2UgaXQsIGFuZCBpZiBpdCBmYWlscywgaXQgcmV0dXJucyB0aGUgc3RyaW5naWZpZWQgdmVyc2lvbgogICAqIG9mIHRoZSBpbnB1dAogICAqCiAgICogQHBhcmFtIHthbnl9IHJhd1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHN0cmluZ2lmaWVkLgogICAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcnNlciAtIEEgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzdHJpbmcgaW50byBhIEphdmFTY3JpcHQgb2JqZWN0LgogICAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy4KICAgKgogICAqIEByZXR1cm5zIHtzdHJpbmd9IEEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgcmF3VmFsdWUuCiAgICovCiAgZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHsKICAgIGlmICh1dGlscyQxLmlzU3RyaW5nKHJhd1ZhbHVlKSkgewogICAgICB0cnkgewogICAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpOwogICAgICAgIHJldHVybiB1dGlscyQxLnRyaW0ocmF3VmFsdWUpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykgewogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpOwogIH0KICB2YXIgZGVmYXVsdHMgPSB7CiAgICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLAogICAgYWRhcHRlcjogWyd4aHInLCAnaHR0cCcsICdmZXRjaCddLAogICAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykgewogICAgICB2YXIgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7CiAgICAgIHZhciBoYXNKU09OQ29udGVudFR5cGUgPSBjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi9qc29uJykgPiAtMTsKICAgICAgdmFyIGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzJDEuaXNPYmplY3QoZGF0YSk7CiAgICAgIGlmIChpc09iamVjdFBheWxvYWQgJiYgdXRpbHMkMS5pc0hUTUxGb3JtKGRhdGEpKSB7CiAgICAgICAgZGF0YSA9IG5ldyBGb3JtRGF0YShkYXRhKTsKICAgICAgfQogICAgICB2YXIgaXNGb3JtRGF0YSA9IHV0aWxzJDEuaXNGb3JtRGF0YShkYXRhKTsKICAgICAgaWYgKGlzRm9ybURhdGEpIHsKICAgICAgICByZXR1cm4gaGFzSlNPTkNvbnRlbnRUeXBlID8gSlNPTi5zdHJpbmdpZnkoZm9ybURhdGFUb0pTT04oZGF0YSkpIDogZGF0YTsKICAgICAgfQogICAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyKGRhdGEpIHx8IHV0aWxzJDEuaXNCdWZmZXIoZGF0YSkgfHwgdXRpbHMkMS5pc1N0cmVhbShkYXRhKSB8fCB1dGlscyQxLmlzRmlsZShkYXRhKSB8fCB1dGlscyQxLmlzQmxvYihkYXRhKSB8fCB1dGlscyQxLmlzUmVhZGFibGVTdHJlYW0oZGF0YSkpIHsKICAgICAgICByZXR1cm4gZGF0YTsKICAgICAgfQogICAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkgewogICAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjsKICAgICAgfQogICAgICBpZiAodXRpbHMkMS5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkgewogICAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04JywgZmFsc2UpOwogICAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7CiAgICAgIH0KICAgICAgdmFyIGlzRmlsZUxpc3Q7CiAgICAgIGlmIChpc09iamVjdFBheWxvYWQpIHsKICAgICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgPiAtMSkgewogICAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTsKICAgICAgICB9CiAgICAgICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMkMS5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkgewogICAgICAgICAgdmFyIF9Gb3JtRGF0YSA9IHRoaXMuZW52ICYmIHRoaXMuZW52LkZvcm1EYXRhOwogICAgICAgICAgcmV0dXJuIHRvRm9ybURhdGEoaXNGaWxlTGlzdCA/IHsKICAgICAgICAgICAgJ2ZpbGVzW10nOiBkYXRhCiAgICAgICAgICB9IDogZGF0YSwgX0Zvcm1EYXRhICYmIG5ldyBfRm9ybURhdGEoKSwgdGhpcy5mb3JtU2VyaWFsaXplcik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlKSB7CiAgICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTsKICAgICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpOwogICAgICB9CiAgICAgIHJldHVybiBkYXRhOwogICAgfV0sCiAgICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHsKICAgICAgdmFyIHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDsKICAgICAgdmFyIGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZzsKICAgICAgdmFyIEpTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nOwogICAgICBpZiAodXRpbHMkMS5pc1Jlc3BvbnNlKGRhdGEpIHx8IHV0aWxzJDEuaXNSZWFkYWJsZVN0cmVhbShkYXRhKSkgewogICAgICAgIHJldHVybiBkYXRhOwogICAgICB9CiAgICAgIGlmIChkYXRhICYmIHV0aWxzJDEuaXNTdHJpbmcoZGF0YSkgJiYgKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSB8fCBKU09OUmVxdWVzdGVkKSkgewogICAgICAgIHZhciBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7CiAgICAgICAgdmFyIHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykgewogICAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7CiAgICAgICAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGUsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgdGhpcywgbnVsbCwgdGhpcy5yZXNwb25zZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhyb3cgZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGRhdGE7CiAgICB9XSwKICAgIC8qKgogICAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhCiAgICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLgogICAgICovCiAgICB0aW1lb3V0OiAwLAogICAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJywKICAgIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJywKICAgIG1heENvbnRlbnRMZW5ndGg6IC0xLAogICAgbWF4Qm9keUxlbmd0aDogLTEsCiAgICBlbnY6IHsKICAgICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsCiAgICAgIEJsb2I6IHBsYXRmb3JtLmNsYXNzZXMuQmxvYgogICAgfSwKICAgIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHsKICAgICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwOwogICAgfSwKICAgIGhlYWRlcnM6IHsKICAgICAgY29tbW9uOiB7CiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLAogICAgICAgICdDb250ZW50LVR5cGUnOiB1bmRlZmluZWQKICAgICAgfQogICAgfQogIH07CiAgdXRpbHMkMS5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIChtZXRob2QpIHsKICAgIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9OwogIH0pOwogIHZhciBkZWZhdWx0cyQxID0gZGVmYXVsdHM7CgogIC8vIFJhd0F4aW9zSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGUKICAvLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzCiAgdmFyIGlnbm9yZUR1cGxpY2F0ZU9mID0gdXRpbHMkMS50b09iamVjdFNldChbJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJywgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLCAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXSk7CgogIC8qKgogICAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3QKICAgKgogICAqIGBgYAogICAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UCiAgICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uCiAgICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZQogICAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkCiAgICogYGBgCiAgICoKICAgKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkCiAgICoKICAgKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdAogICAqLwogIHZhciBwYXJzZUhlYWRlcnMgPSAoZnVuY3Rpb24gKHJhd0hlYWRlcnMpIHsKICAgIHZhciBwYXJzZWQgPSB7fTsKICAgIHZhciBrZXk7CiAgICB2YXIgdmFsOwogICAgdmFyIGk7CiAgICByYXdIZWFkZXJzICYmIHJhd0hlYWRlcnMuc3BsaXQoJ1xuJykuZm9yRWFjaChmdW5jdGlvbiBwYXJzZXIobGluZSkgewogICAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7CiAgICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpOwogICAgICB2YWwgPSBsaW5lLnN1YnN0cmluZyhpICsgMSkudHJpbSgpOwogICAgICBpZiAoIWtleSB8fCBwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZltrZXldKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykgewogICAgICAgIGlmIChwYXJzZWRba2V5XSkgewogICAgICAgICAgcGFyc2VkW2tleV0ucHVzaCh2YWwpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBwYXJzZWQ7CiAgfSk7CgogIHZhciAkaW50ZXJuYWxzID0gU3ltYm9sKCdpbnRlcm5hbHMnKTsKICBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7CiAgICByZXR1cm4gaGVhZGVyICYmIFN0cmluZyhoZWFkZXIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpOwogIH0KICBmdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkgewogICAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KICAgIHJldHVybiB1dGlscyQxLmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7CiAgfQogIGZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikgewogICAgdmFyIHRva2VucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICB2YXIgdG9rZW5zUkUgPSAvKFteXHMsOz1dKylccyooPzo9XHMqKFteLDtdKykpPy9nOwogICAgdmFyIG1hdGNoOwogICAgd2hpbGUgKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSB7CiAgICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTsKICAgIH0KICAgIHJldHVybiB0b2tlbnM7CiAgfQogIHZhciBpc1ZhbGlkSGVhZGVyTmFtZSA9IGZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJOYW1lKHN0cikgewogICAgcmV0dXJuIC9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3Qoc3RyLnRyaW0oKSk7CiAgfTsKICBmdW5jdGlvbiBtYXRjaEhlYWRlclZhbHVlKGNvbnRleHQsIHZhbHVlLCBoZWFkZXIsIGZpbHRlciwgaXNIZWFkZXJOYW1lRmlsdGVyKSB7CiAgICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKGZpbHRlcikpIHsKICAgICAgcmV0dXJuIGZpbHRlci5jYWxsKHRoaXMsIHZhbHVlLCBoZWFkZXIpOwogICAgfQogICAgaWYgKGlzSGVhZGVyTmFtZUZpbHRlcikgewogICAgICB2YWx1ZSA9IGhlYWRlcjsKICAgIH0KICAgIGlmICghdXRpbHMkMS5pc1N0cmluZyh2YWx1ZSkpIHJldHVybjsKICAgIGlmICh1dGlscyQxLmlzU3RyaW5nKGZpbHRlcikpIHsKICAgICAgcmV0dXJuIHZhbHVlLmluZGV4T2YoZmlsdGVyKSAhPT0gLTE7CiAgICB9CiAgICBpZiAodXRpbHMkMS5pc1JlZ0V4cChmaWx0ZXIpKSB7CiAgICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGZvcm1hdEhlYWRlcihoZWFkZXIpIHsKICAgIHJldHVybiBoZWFkZXIudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcZF0pKFx3KikvZywgZnVuY3Rpb24gKHcsIF9jaGFyLCBzdHIpIHsKICAgICAgcmV0dXJuIF9jaGFyLnRvVXBwZXJDYXNlKCkgKyBzdHI7CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHsKICAgIHZhciBhY2Nlc3Nvck5hbWUgPSB1dGlscyQxLnRvQ2FtZWxDYXNlKCcgJyArIGhlYWRlcik7CiAgICBbJ2dldCcsICdzZXQnLCAnaGFzJ10uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kTmFtZSkgewogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBtZXRob2ROYW1lICsgYWNjZXNzb3JOYW1lLCB7CiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKGFyZzEsIGFyZzIsIGFyZzMpIHsKICAgICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICB9LAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICB9KTsKICAgIH0pOwogIH0KICB2YXIgQXhpb3NIZWFkZXJzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfU3ltYm9sJGl0ZXJhdG9yLCBfU3ltYm9sJHRvU3RyaW5nVGFnKSB7CiAgICBmdW5jdGlvbiBBeGlvc0hlYWRlcnMoaGVhZGVycykgewogICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQXhpb3NIZWFkZXJzKTsKICAgICAgaGVhZGVycyAmJiB0aGlzLnNldChoZWFkZXJzKTsKICAgIH0KICAgIF9jcmVhdGVDbGFzcyhBeGlvc0hlYWRlcnMsIFt7CiAgICAgIGtleTogInNldCIsCiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXQoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSwgcmV3cml0ZSkgewogICAgICAgIHZhciBzZWxmID0gdGhpczsKICAgICAgICBmdW5jdGlvbiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkgewogICAgICAgICAgdmFyIGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7CiAgICAgICAgICBpZiAoIWxIZWFkZXIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpOwogICAgICAgICAgfQogICAgICAgICAgdmFyIGtleSA9IHV0aWxzJDEuZmluZEtleShzZWxmLCBsSGVhZGVyKTsKICAgICAgICAgIGlmICgha2V5IHx8IHNlbGZba2V5XSA9PT0gdW5kZWZpbmVkIHx8IF9yZXdyaXRlID09PSB0cnVlIHx8IF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSkgewogICAgICAgICAgICBzZWxmW2tleSB8fCBfaGVhZGVyXSA9IG5vcm1hbGl6ZVZhbHVlKF92YWx1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciBzZXRIZWFkZXJzID0gZnVuY3Rpb24gc2V0SGVhZGVycyhoZWFkZXJzLCBfcmV3cml0ZSkgewogICAgICAgICAgcmV0dXJuIHV0aWxzJDEuZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbiAoX3ZhbHVlLCBfaGVhZGVyKSB7CiAgICAgICAgICAgIHJldHVybiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSk7CiAgICAgICAgICB9KTsKICAgICAgICB9OwogICAgICAgIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7CiAgICAgICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpOwogICAgICAgIH0gZWxzZSBpZiAodXRpbHMkMS5pc1N0cmluZyhoZWFkZXIpICYmIChoZWFkZXIgPSBoZWFkZXIudHJpbSgpKSAmJiAhaXNWYWxpZEhlYWRlck5hbWUoaGVhZGVyKSkgewogICAgICAgICAgc2V0SGVhZGVycyhwYXJzZUhlYWRlcnMoaGVhZGVyKSwgdmFsdWVPclJld3JpdGUpOwogICAgICAgIH0gZWxzZSBpZiAodXRpbHMkMS5pc0hlYWRlcnMoaGVhZGVyKSkgewogICAgICAgICAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKGhlYWRlci5lbnRyaWVzKCkpLAogICAgICAgICAgICBfc3RlcDsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7CiAgICAgICAgICAgICAgdmFyIF9zdGVwJHZhbHVlID0gX3NsaWNlZFRvQXJyYXkoX3N0ZXAudmFsdWUsIDIpLAogICAgICAgICAgICAgICAga2V5ID0gX3N0ZXAkdmFsdWVbMF0sCiAgICAgICAgICAgICAgICB2YWx1ZSA9IF9zdGVwJHZhbHVlWzFdOwogICAgICAgICAgICAgIHNldEhlYWRlcih2YWx1ZSwga2V5LCByZXdyaXRlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIF9pdGVyYXRvci5lKGVycik7CiAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICBfaXRlcmF0b3IuZigpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoZWFkZXIgIT0gbnVsbCAmJiBzZXRIZWFkZXIodmFsdWVPclJld3JpdGUsIGhlYWRlciwgcmV3cml0ZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICB9LCB7CiAgICAgIGtleTogImdldCIsCiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXQoaGVhZGVyLCBwYXJzZXIpIHsKICAgICAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTsKICAgICAgICBpZiAoaGVhZGVyKSB7CiAgICAgICAgICB2YXIga2V5ID0gdXRpbHMkMS5maW5kS2V5KHRoaXMsIGhlYWRlcik7CiAgICAgICAgICBpZiAoa2V5KSB7CiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXNba2V5XTsKICAgICAgICAgICAgaWYgKCFwYXJzZXIpIHsKICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHBhcnNlciA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgIHJldHVybiBwYXJzZVRva2Vucyh2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihwYXJzZXIpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh1dGlscyQxLmlzUmVnRXhwKHBhcnNlcikpIHsKICAgICAgICAgICAgICByZXR1cm4gcGFyc2VyLmV4ZWModmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uJyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LCB7CiAgICAgIGtleTogImhhcyIsCiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYXMoaGVhZGVyLCBtYXRjaGVyKSB7CiAgICAgICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7CiAgICAgICAgaWYgKGhlYWRlcikgewogICAgICAgICAgdmFyIGtleSA9IHV0aWxzJDEuZmluZEtleSh0aGlzLCBoZWFkZXIpOwogICAgICAgICAgcmV0dXJuICEhKGtleSAmJiB0aGlzW2tleV0gIT09IHVuZGVmaW5lZCAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlcikpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9LCB7CiAgICAgIGtleTogImRlbGV0ZSIsCiAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZGVsZXRlKGhlYWRlciwgbWF0Y2hlcikgewogICAgICAgIHZhciBzZWxmID0gdGhpczsKICAgICAgICB2YXIgZGVsZXRlZCA9IGZhbHNlOwogICAgICAgIGZ1bmN0aW9uIGRlbGV0ZUhlYWRlcihfaGVhZGVyKSB7CiAgICAgICAgICBfaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpOwogICAgICAgICAgaWYgKF9oZWFkZXIpIHsKICAgICAgICAgICAgdmFyIGtleSA9IHV0aWxzJDEuZmluZEtleShzZWxmLCBfaGVhZGVyKTsKICAgICAgICAgICAgaWYgKGtleSAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZShzZWxmLCBzZWxmW2tleV0sIGtleSwgbWF0Y2hlcikpKSB7CiAgICAgICAgICAgICAgZGVsZXRlIHNlbGZba2V5XTsKICAgICAgICAgICAgICBkZWxldGVkID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodXRpbHMkMS5pc0FycmF5KGhlYWRlcikpIHsKICAgICAgICAgIGhlYWRlci5mb3JFYWNoKGRlbGV0ZUhlYWRlcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRlbGV0ZUhlYWRlcihoZWFkZXIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGVsZXRlZDsKICAgICAgfQogICAgfSwgewogICAgICBrZXk6ICJjbGVhciIsCiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhcihtYXRjaGVyKSB7CiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTsKICAgICAgICB2YXIgaSA9IGtleXMubGVuZ3RoOwogICAgICAgIHZhciBkZWxldGVkID0gZmFsc2U7CiAgICAgICAgd2hpbGUgKGktLSkgewogICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07CiAgICAgICAgICBpZiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlciwgdHJ1ZSkpIHsKICAgICAgICAgICAgZGVsZXRlIHRoaXNba2V5XTsKICAgICAgICAgICAgZGVsZXRlZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBkZWxldGVkOwogICAgICB9CiAgICB9LCB7CiAgICAgIGtleTogIm5vcm1hbGl6ZSIsCiAgICAgIHZhbHVlOiBmdW5jdGlvbiBub3JtYWxpemUoZm9ybWF0KSB7CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgIHZhciBoZWFkZXJzID0ge307CiAgICAgICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMsIGZ1bmN0aW9uICh2YWx1ZSwgaGVhZGVyKSB7CiAgICAgICAgICB2YXIga2V5ID0gdXRpbHMkMS5maW5kS2V5KGhlYWRlcnMsIGhlYWRlcik7CiAgICAgICAgICBpZiAoa2V5KSB7CiAgICAgICAgICAgIHNlbGZba2V5XSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTsKICAgICAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdmFyIG5vcm1hbGl6ZWQgPSBmb3JtYXQgPyBmb3JtYXRIZWFkZXIoaGVhZGVyKSA6IFN0cmluZyhoZWFkZXIpLnRyaW0oKTsKICAgICAgICAgIGlmIChub3JtYWxpemVkICE9PSBoZWFkZXIpIHsKICAgICAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTsKICAgICAgICAgIH0KICAgICAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7CiAgICAgICAgICBoZWFkZXJzW25vcm1hbGl6ZWRdID0gdHJ1ZTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfQogICAgfSwgewogICAgICBrZXk6ICJjb25jYXQiLAogICAgICB2YWx1ZTogZnVuY3Rpb24gY29uY2F0KCkgewogICAgICAgIHZhciBfdGhpcyRjb25zdHJ1Y3RvcjsKICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgdGFyZ2V0cyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKICAgICAgICAgIHRhcmdldHNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07CiAgICAgICAgfQogICAgICAgIHJldHVybiAoX3RoaXMkY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yKS5jb25jYXQuYXBwbHkoX3RoaXMkY29uc3RydWN0b3IsIFt0aGlzXS5jb25jYXQodGFyZ2V0cykpOwogICAgICB9CiAgICB9LCB7CiAgICAgIGtleTogInRvSlNPTiIsCiAgICAgIHZhbHVlOiBmdW5jdGlvbiB0b0pTT04oYXNTdHJpbmdzKSB7CiAgICAgICAgdmFyIG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICAgICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMsIGZ1bmN0aW9uICh2YWx1ZSwgaGVhZGVyKSB7CiAgICAgICAgICB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSBmYWxzZSAmJiAob2JqW2hlYWRlcl0gPSBhc1N0cmluZ3MgJiYgdXRpbHMkMS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiB2YWx1ZSk7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIG9iajsKICAgICAgfQogICAgfSwgewogICAgICBrZXk6IF9TeW1ib2wkaXRlcmF0b3IsCiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSgpIHsKICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpOwogICAgICB9CiAgICB9LCB7CiAgICAgIGtleTogInRvU3RyaW5nIiwKICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRvU3RyaW5nKCkgewogICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoZnVuY3Rpb24gKF9yZWYpIHsKICAgICAgICAgIHZhciBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDIpLAogICAgICAgICAgICBoZWFkZXIgPSBfcmVmMlswXSwKICAgICAgICAgICAgdmFsdWUgPSBfcmVmMlsxXTsKICAgICAgICAgIHJldHVybiBoZWFkZXIgKyAnOiAnICsgdmFsdWU7CiAgICAgICAgfSkuam9pbignXG4nKTsKICAgICAgfQogICAgfSwgewogICAgICBrZXk6IF9TeW1ib2wkdG9TdHJpbmdUYWcsCiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgIHJldHVybiAnQXhpb3NIZWFkZXJzJzsKICAgICAgfQogICAgfV0sIFt7CiAgICAgIGtleTogImZyb20iLAogICAgICB2YWx1ZTogZnVuY3Rpb24gZnJvbSh0aGluZykgewogICAgICAgIHJldHVybiB0aGluZyBpbnN0YW5jZW9mIHRoaXMgPyB0aGluZyA6IG5ldyB0aGlzKHRoaW5nKTsKICAgICAgfQogICAgfSwgewogICAgICBrZXk6ICJjb25jYXQiLAogICAgICB2YWx1ZTogZnVuY3Rpb24gY29uY2F0KGZpcnN0KSB7CiAgICAgICAgdmFyIGNvbXB1dGVkID0gbmV3IHRoaXMoZmlyc3QpOwogICAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgdGFyZ2V0cyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7CiAgICAgICAgICB0YXJnZXRzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdOwogICAgICAgIH0KICAgICAgICB0YXJnZXRzLmZvckVhY2goZnVuY3Rpb24gKHRhcmdldCkgewogICAgICAgICAgcmV0dXJuIGNvbXB1dGVkLnNldCh0YXJnZXQpOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBjb21wdXRlZDsKICAgICAgfQogICAgfSwgewogICAgICBrZXk6ICJhY2Nlc3NvciIsCiAgICAgIHZhbHVlOiBmdW5jdGlvbiBhY2Nlc3NvcihoZWFkZXIpIHsKICAgICAgICB2YXIgaW50ZXJuYWxzID0gdGhpc1skaW50ZXJuYWxzXSA9IHRoaXNbJGludGVybmFsc10gPSB7CiAgICAgICAgICBhY2Nlc3NvcnM6IHt9CiAgICAgICAgfTsKICAgICAgICB2YXIgYWNjZXNzb3JzID0gaW50ZXJuYWxzLmFjY2Vzc29yczsKICAgICAgICB2YXIgcHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7CiAgICAgICAgZnVuY3Rpb24gZGVmaW5lQWNjZXNzb3IoX2hlYWRlcikgewogICAgICAgICAgdmFyIGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7CiAgICAgICAgICBpZiAoIWFjY2Vzc29yc1tsSGVhZGVyXSkgewogICAgICAgICAgICBidWlsZEFjY2Vzc29ycyhwcm90b3R5cGUsIF9oZWFkZXIpOwogICAgICAgICAgICBhY2Nlc3NvcnNbbEhlYWRlcl0gPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB1dGlscyQxLmlzQXJyYXkoaGVhZGVyKSA/IGhlYWRlci5mb3JFYWNoKGRlZmluZUFjY2Vzc29yKSA6IGRlZmluZUFjY2Vzc29yKGhlYWRlcik7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgIH1dKTsKICAgIHJldHVybiBBeGlvc0hlYWRlcnM7CiAgfShTeW1ib2wuaXRlcmF0b3IsIFN5bWJvbC50b1N0cmluZ1RhZyk7CiAgQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFsnQ29udGVudC1UeXBlJywgJ0NvbnRlbnQtTGVuZ3RoJywgJ0FjY2VwdCcsICdBY2NlcHQtRW5jb2RpbmcnLCAnVXNlci1BZ2VudCcsICdBdXRob3JpemF0aW9uJ10pOwoKICAvLyByZXNlcnZlZCBuYW1lcyBob3RmaXgKICB1dGlscyQxLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsIGZ1bmN0aW9uIChfcmVmMywga2V5KSB7CiAgICB2YXIgdmFsdWUgPSBfcmVmMy52YWx1ZTsKICAgIHZhciBtYXBwZWQgPSBrZXlbMF0udG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTsgLy8gbWFwIGBzZXRgID0+IGBTZXRgCiAgICByZXR1cm4gewogICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgIH0sCiAgICAgIHNldDogZnVuY3Rpb24gc2V0KGhlYWRlclZhbHVlKSB7CiAgICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7CiAgICAgIH0KICAgIH07CiAgfSk7CiAgdXRpbHMkMS5mcmVlemVNZXRob2RzKEF4aW9zSGVhZGVycyk7CiAgdmFyIEF4aW9zSGVhZGVycyQxID0gQXhpb3NIZWFkZXJzOwoKICAvKioKICAgKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlCiAgICoKICAgKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zCiAgICogQHBhcmFtIHs/T2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0CiAgICoKICAgKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhCiAgICovCiAgZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShmbnMsIHJlc3BvbnNlKSB7CiAgICB2YXIgY29uZmlnID0gdGhpcyB8fCBkZWZhdWx0cyQxOwogICAgdmFyIGNvbnRleHQgPSByZXNwb25zZSB8fCBjb25maWc7CiAgICB2YXIgaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oY29udGV4dC5oZWFkZXJzKTsKICAgIHZhciBkYXRhID0gY29udGV4dC5kYXRhOwogICAgdXRpbHMkMS5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7CiAgICAgIGRhdGEgPSBmbi5jYWxsKGNvbmZpZywgZGF0YSwgaGVhZGVycy5ub3JtYWxpemUoKSwgcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiB1bmRlZmluZWQpOwogICAgfSk7CiAgICBoZWFkZXJzLm5vcm1hbGl6ZSgpOwogICAgcmV0dXJuIGRhdGE7CiAgfQoKICBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkgewogICAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pOwogIH0KCiAgLyoqCiAgICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLgogICAqCiAgICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLgogICAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIFRoZSBjb25maWcuCiAgICogQHBhcmFtIHtPYmplY3Q9fSByZXF1ZXN0IFRoZSByZXF1ZXN0LgogICAqCiAgICogQHJldHVybnMge0NhbmNlbGVkRXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLgogICAqLwogIGZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXEKICAgIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQsIGNvbmZpZywgcmVxdWVzdCk7CiAgICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7CiAgfQogIHV0aWxzJDEuaW5oZXJpdHMoQ2FuY2VsZWRFcnJvciwgQXhpb3NFcnJvciwgewogICAgX19DQU5DRUxfXzogdHJ1ZQogIH0pOwoKICAvKioKICAgKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLgogICAqCiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuCiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLgogICAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuCiAgICoKICAgKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgcmVzcG9uc2UuCiAgICovCiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHsKICAgIHZhciB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1czsKICAgIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7CiAgICAgIHJlc29sdmUocmVzcG9uc2UpOwogICAgfSBlbHNlIHsKICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSwgcmVzcG9uc2UuY29uZmlnLCByZXNwb25zZS5yZXF1ZXN0LCByZXNwb25zZSkpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHsKICAgIHZhciBtYXRjaCA9IC9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKHVybCk7CiAgICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7CiAgfQoKICAvKioKICAgKiBDYWxjdWxhdGUgZGF0YSBtYXhSYXRlCiAgICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXQogICAqIEBwYXJhbSB7TnVtYmVyfSBbbWluPSAxMDAwXQogICAqIEByZXR1cm5zIHtGdW5jdGlvbn0KICAgKi8KICBmdW5jdGlvbiBzcGVlZG9tZXRlcihzYW1wbGVzQ291bnQsIG1pbikgewogICAgc2FtcGxlc0NvdW50ID0gc2FtcGxlc0NvdW50IHx8IDEwOwogICAgdmFyIGJ5dGVzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7CiAgICB2YXIgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpOwogICAgdmFyIGhlYWQgPSAwOwogICAgdmFyIHRhaWwgPSAwOwogICAgdmFyIGZpcnN0U2FtcGxlVFM7CiAgICBtaW4gPSBtaW4gIT09IHVuZGVmaW5lZCA/IG1pbiA6IDEwMDA7CiAgICByZXR1cm4gZnVuY3Rpb24gcHVzaChjaHVua0xlbmd0aCkgewogICAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTsKICAgICAgdmFyIHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07CiAgICAgIGlmICghZmlyc3RTYW1wbGVUUykgewogICAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7CiAgICAgIH0KICAgICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDsKICAgICAgdGltZXN0YW1wc1toZWFkXSA9IG5vdzsKICAgICAgdmFyIGkgPSB0YWlsOwogICAgICB2YXIgYnl0ZXNDb3VudCA9IDA7CiAgICAgIHdoaWxlIChpICE9PSBoZWFkKSB7CiAgICAgICAgYnl0ZXNDb3VudCArPSBieXRlc1tpKytdOwogICAgICAgIGkgPSBpICUgc2FtcGxlc0NvdW50OwogICAgICB9CiAgICAgIGhlYWQgPSAoaGVhZCArIDEpICUgc2FtcGxlc0NvdW50OwogICAgICBpZiAoaGVhZCA9PT0gdGFpbCkgewogICAgICAgIHRhaWwgPSAodGFpbCArIDEpICUgc2FtcGxlc0NvdW50OwogICAgICB9CiAgICAgIGlmIChub3cgLSBmaXJzdFNhbXBsZVRTIDwgbWluKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHZhciBwYXNzZWQgPSBzdGFydGVkQXQgJiYgbm93IC0gc3RhcnRlZEF0OwogICAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7CiAgICB9OwogIH0KCiAgLyoqCiAgICogVGhyb3R0bGUgZGVjb3JhdG9yCiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4KICAgKiBAcGFyYW0ge051bWJlcn0gZnJlcQogICAqIEByZXR1cm4ge0Z1bmN0aW9ufQogICAqLwogIGZ1bmN0aW9uIHRocm90dGxlKGZuLCBmcmVxKSB7CiAgICB2YXIgdGltZXN0YW1wID0gMDsKICAgIHZhciB0aHJlc2hvbGQgPSAxMDAwIC8gZnJlcTsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICByZXR1cm4gZnVuY3Rpb24gdGhyb3R0bGVkKCkgewogICAgICB2YXIgX2FyZ3VtZW50cyA9IGFyZ3VtZW50czsKICAgICAgdmFyIGZvcmNlID0gdGhpcyA9PT0gdHJ1ZTsKICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7CiAgICAgIGlmIChmb3JjZSB8fCBub3cgLSB0aW1lc3RhbXAgPiB0aHJlc2hvbGQpIHsKICAgICAgICBpZiAodGltZXIpIHsKICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHRpbWVzdGFtcCA9IG5vdzsKICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgICAgfQogICAgICBpZiAoIXRpbWVyKSB7CiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRpbWVyID0gbnVsbDsKICAgICAgICAgIHRpbWVzdGFtcCA9IERhdGUubm93KCk7CiAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgX2FyZ3VtZW50cyk7CiAgICAgICAgfSwgdGhyZXNob2xkIC0gKG5vdyAtIHRpbWVzdGFtcCkpOwogICAgICB9CiAgICB9OwogIH0KCiAgdmFyIHByb2dyZXNzRXZlbnRSZWR1Y2VyID0gKGZ1bmN0aW9uIChsaXN0ZW5lciwgaXNEb3dubG9hZFN0cmVhbSkgewogICAgdmFyIGZyZXEgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDM7CiAgICB2YXIgYnl0ZXNOb3RpZmllZCA9IDA7CiAgICB2YXIgX3NwZWVkb21ldGVyID0gc3BlZWRvbWV0ZXIoNTAsIDI1MCk7CiAgICByZXR1cm4gdGhyb3R0bGUoZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIGxvYWRlZCA9IGUubG9hZGVkOwogICAgICB2YXIgdG90YWwgPSBlLmxlbmd0aENvbXB1dGFibGUgPyBlLnRvdGFsIDogdW5kZWZpbmVkOwogICAgICB2YXIgcHJvZ3Jlc3NCeXRlcyA9IGxvYWRlZCAtIGJ5dGVzTm90aWZpZWQ7CiAgICAgIHZhciByYXRlID0gX3NwZWVkb21ldGVyKHByb2dyZXNzQnl0ZXMpOwogICAgICB2YXIgaW5SYW5nZSA9IGxvYWRlZCA8PSB0b3RhbDsKICAgICAgYnl0ZXNOb3RpZmllZCA9IGxvYWRlZDsKICAgICAgdmFyIGRhdGEgPSB7CiAgICAgICAgbG9hZGVkOiBsb2FkZWQsCiAgICAgICAgdG90YWw6IHRvdGFsLAogICAgICAgIHByb2dyZXNzOiB0b3RhbCA/IGxvYWRlZCAvIHRvdGFsIDogdW5kZWZpbmVkLAogICAgICAgIGJ5dGVzOiBwcm9ncmVzc0J5dGVzLAogICAgICAgIHJhdGU6IHJhdGUgPyByYXRlIDogdW5kZWZpbmVkLAogICAgICAgIGVzdGltYXRlZDogcmF0ZSAmJiB0b3RhbCAmJiBpblJhbmdlID8gKHRvdGFsIC0gbG9hZGVkKSAvIHJhdGUgOiB1bmRlZmluZWQsCiAgICAgICAgZXZlbnQ6IGUsCiAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdG90YWwgIT0gbnVsbAogICAgICB9OwogICAgICBkYXRhW2lzRG93bmxvYWRTdHJlYW0gPyAnZG93bmxvYWQnIDogJ3VwbG9hZCddID0gdHJ1ZTsKICAgICAgbGlzdGVuZXIoZGF0YSk7CiAgICB9LCBmcmVxKTsKICB9KTsKCiAgdmFyIGlzVVJMU2FtZU9yaWdpbiA9IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/CiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0CiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uCiAgZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkgewogICAgdmFyIG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogICAgdmFyIHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwogICAgdmFyIG9yaWdpblVSTDsKCiAgICAvKioKICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXRzIGNvbXBvbmVudHMKICAgICoKICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZAogICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAgKi8KICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7CiAgICAgIHZhciBocmVmID0gdXJsOwogICAgICBpZiAobXNpZSkgewogICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXMKICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTsKICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjsKICAgICAgfQogICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTsKCiAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHMKICAgICAgcmV0dXJuIHsKICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLAogICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsCiAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCwKICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCAnJykgOiAnJywKICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLAogICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSwKICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LAogICAgICAgIHBhdGhuYW1lOiB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJyA/IHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDogJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUKICAgICAgfTsKICAgIH0KICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpOwoKICAgIC8qKgogICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvbgogICAgKgogICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3QKICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZQogICAgKi8KICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkgewogICAgICB2YXIgcGFyc2VkID0gdXRpbHMkMS5pc1N0cmluZyhyZXF1ZXN0VVJMKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMOwogICAgICByZXR1cm4gcGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiYgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0OwogICAgfTsKICB9KCkgOgogIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudnMgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuCiAgZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkgewogICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbigpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9OwogIH0oKTsKCiAgdmFyIGNvb2tpZXMgPSBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgPwogIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZQogIHsKICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHsKICAgICAgdmFyIGNvb2tpZSA9IFtuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKV07CiAgICAgIHV0aWxzJDEuaXNOdW1iZXIoZXhwaXJlcykgJiYgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpOwogICAgICB1dGlscyQxLmlzU3RyaW5nKHBhdGgpICYmIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTsKICAgICAgdXRpbHMkMS5pc1N0cmluZyhkb21haW4pICYmIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7CiAgICAgIHNlY3VyZSA9PT0gdHJ1ZSAmJiBjb29raWUucHVzaCgnc2VjdXJlJyk7CiAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpOwogICAgfSwKICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQobmFtZSkgewogICAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTsKICAgICAgcmV0dXJuIG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGw7CiAgICB9LAogICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobmFtZSkgewogICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApOwogICAgfQogIH0gOgogIC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC4KICB7CiAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoKSB7fSwKICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQoKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfSwKICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge30KICB9OwoKICAvKioKICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUKICAgKgogICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0CiAgICoKICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlCiAgICovCiAgZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHsKICAgIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggIjxzY2hlbWU+Oi8vIiBvciAiLy8iIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLgogICAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkCiAgICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi4KICAgIHJldHVybiAvXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KHVybCk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzCiAgICoKICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkwKICAgKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTAogICAqCiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTAogICAqLwogIGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7CiAgICByZXR1cm4gcmVsYXRpdmVVUkwgPyBiYXNlVVJMLnJlcGxhY2UoL1wvP1wvJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cLysvLCAnJykgOiBiYXNlVVJMOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCwKICAgKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuCiAgICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC4KICAgKgogICAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTAogICAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmUKICAgKgogICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGgKICAgKi8KICBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkgewogICAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkgewogICAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTsKICAgIH0KICAgIHJldHVybiByZXF1ZXN0ZWRVUkw7CiAgfQoKICB2YXIgaGVhZGVyc1RvT2JqZWN0ID0gZnVuY3Rpb24gaGVhZGVyc1RvT2JqZWN0KHRoaW5nKSB7CiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiBBeGlvc0hlYWRlcnMkMSA/IF9vYmplY3RTcHJlYWQyKHt9LCB0aGluZykgOiB0aGluZzsKICB9OwoKICAvKioKICAgKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0CiAgICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLgogICAqCiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzEKICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMgogICAqCiAgICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMQogICAqLwogIGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnbgogICAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307CiAgICB2YXIgY29uZmlnID0ge307CiAgICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSwgY2FzZWxlc3MpIHsKICAgICAgaWYgKHV0aWxzJDEuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzJDEuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7CiAgICAgICAgcmV0dXJuIHV0aWxzJDEubWVyZ2UuY2FsbCh7CiAgICAgICAgICBjYXNlbGVzczogY2FzZWxlc3MKICAgICAgICB9LCB0YXJnZXQsIHNvdXJjZSk7CiAgICAgIH0gZWxzZSBpZiAodXRpbHMkMS5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHsKICAgICAgICByZXR1cm4gdXRpbHMkMS5tZXJnZSh7fSwgc291cmNlKTsKICAgICAgfSBlbHNlIGlmICh1dGlscyQxLmlzQXJyYXkoc291cmNlKSkgewogICAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTsKICAgICAgfQogICAgICByZXR1cm4gc291cmNlOwogICAgfQoKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVybgogICAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhhLCBiLCBjYXNlbGVzcykgewogICAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHsKICAgICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYiwgY2FzZWxlc3MpOwogICAgICB9IGVsc2UgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGEpKSB7CiAgICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSwgY2FzZWxlc3MpOwogICAgICB9CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuCiAgICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKGEsIGIpIHsKICAgICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGIpKSB7CiAgICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7CiAgICAgIH0KICAgIH0KCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm4KICAgIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIoYSwgYikgewogICAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHsKICAgICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTsKICAgICAgfSBlbHNlIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChhKSkgewogICAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpOwogICAgICB9CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuCiAgICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMoYSwgYiwgcHJvcCkgewogICAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7CiAgICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIpOwogICAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkgewogICAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpOwogICAgICB9CiAgICB9CiAgICB2YXIgbWVyZ2VNYXAgPSB7CiAgICAgIHVybDogdmFsdWVGcm9tQ29uZmlnMiwKICAgICAgbWV0aG9kOiB2YWx1ZUZyb21Db25maWcyLAogICAgICBkYXRhOiB2YWx1ZUZyb21Db25maWcyLAogICAgICBiYXNlVVJMOiBkZWZhdWx0VG9Db25maWcyLAogICAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBkZWZhdWx0VG9Db25maWcyLAogICAgICB0cmFuc2Zvcm1SZXNwb25zZTogZGVmYXVsdFRvQ29uZmlnMiwKICAgICAgcGFyYW1zU2VyaWFsaXplcjogZGVmYXVsdFRvQ29uZmlnMiwKICAgICAgdGltZW91dDogZGVmYXVsdFRvQ29uZmlnMiwKICAgICAgdGltZW91dE1lc3NhZ2U6IGRlZmF1bHRUb0NvbmZpZzIsCiAgICAgIHdpdGhDcmVkZW50aWFsczogZGVmYXVsdFRvQ29uZmlnMiwKICAgICAgd2l0aFhTUkZUb2tlbjogZGVmYXVsdFRvQ29uZmlnMiwKICAgICAgYWRhcHRlcjogZGVmYXVsdFRvQ29uZmlnMiwKICAgICAgcmVzcG9uc2VUeXBlOiBkZWZhdWx0VG9Db25maWcyLAogICAgICB4c3JmQ29va2llTmFtZTogZGVmYXVsdFRvQ29uZmlnMiwKICAgICAgeHNyZkhlYWRlck5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsCiAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsCiAgICAgIG9uRG93bmxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMiwKICAgICAgZGVjb21wcmVzczogZGVmYXVsdFRvQ29uZmlnMiwKICAgICAgbWF4Q29udGVudExlbmd0aDogZGVmYXVsdFRvQ29uZmlnMiwKICAgICAgbWF4Qm9keUxlbmd0aDogZGVmYXVsdFRvQ29uZmlnMiwKICAgICAgYmVmb3JlUmVkaXJlY3Q6IGRlZmF1bHRUb0NvbmZpZzIsCiAgICAgIHRyYW5zcG9ydDogZGVmYXVsdFRvQ29uZmlnMiwKICAgICAgaHR0cEFnZW50OiBkZWZhdWx0VG9Db25maWcyLAogICAgICBodHRwc0FnZW50OiBkZWZhdWx0VG9Db25maWcyLAogICAgICBjYW5jZWxUb2tlbjogZGVmYXVsdFRvQ29uZmlnMiwKICAgICAgc29ja2V0UGF0aDogZGVmYXVsdFRvQ29uZmlnMiwKICAgICAgcmVzcG9uc2VFbmNvZGluZzogZGVmYXVsdFRvQ29uZmlnMiwKICAgICAgdmFsaWRhdGVTdGF0dXM6IG1lcmdlRGlyZWN0S2V5cywKICAgICAgaGVhZGVyczogZnVuY3Rpb24gaGVhZGVycyhhLCBiKSB7CiAgICAgICAgcmV0dXJuIG1lcmdlRGVlcFByb3BlcnRpZXMoaGVhZGVyc1RvT2JqZWN0KGEpLCBoZWFkZXJzVG9PYmplY3QoYiksIHRydWUpOwogICAgICB9CiAgICB9OwogICAgdXRpbHMkMS5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZzEsIGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHsKICAgICAgdmFyIG1lcmdlID0gbWVyZ2VNYXBbcHJvcF0gfHwgbWVyZ2VEZWVwUHJvcGVydGllczsKICAgICAgdmFyIGNvbmZpZ1ZhbHVlID0gbWVyZ2UoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSwgcHJvcCk7CiAgICAgIHV0aWxzJDEuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTsKICAgIH0pOwogICAgcmV0dXJuIGNvbmZpZzsKICB9CgogIHZhciByZXNvbHZlQ29uZmlnID0gKGZ1bmN0aW9uIChjb25maWcpIHsKICAgIHZhciBuZXdDb25maWcgPSBtZXJnZUNvbmZpZyh7fSwgY29uZmlnKTsKICAgIHZhciBkYXRhID0gbmV3Q29uZmlnLmRhdGEsCiAgICAgIHdpdGhYU1JGVG9rZW4gPSBuZXdDb25maWcud2l0aFhTUkZUb2tlbiwKICAgICAgeHNyZkhlYWRlck5hbWUgPSBuZXdDb25maWcueHNyZkhlYWRlck5hbWUsCiAgICAgIHhzcmZDb29raWVOYW1lID0gbmV3Q29uZmlnLnhzcmZDb29raWVOYW1lLAogICAgICBoZWFkZXJzID0gbmV3Q29uZmlnLmhlYWRlcnMsCiAgICAgIGF1dGggPSBuZXdDb25maWcuYXV0aDsKICAgIG5ld0NvbmZpZy5oZWFkZXJzID0gaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oaGVhZGVycyk7CiAgICBuZXdDb25maWcudXJsID0gYnVpbGRVUkwoYnVpbGRGdWxsUGF0aChuZXdDb25maWcuYmFzZVVSTCwgbmV3Q29uZmlnLnVybCksIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTsKCiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uCiAgICBpZiAoYXV0aCkgewogICAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICsgYnRvYSgoYXV0aC51c2VybmFtZSB8fCAnJykgKyAnOicgKyAoYXV0aC5wYXNzd29yZCA/IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChhdXRoLnBhc3N3b3JkKSkgOiAnJykpKTsKICAgIH0KICAgIHZhciBjb250ZW50VHlwZTsKICAgIGlmICh1dGlscyQxLmlzRm9ybURhdGEoZGF0YSkpIHsKICAgICAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiB8fCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpIHsKICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKHVuZGVmaW5lZCk7IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXQKICAgICAgfSBlbHNlIGlmICgoY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkpICE9PSBmYWxzZSkgewogICAgICAgIC8vIGZpeCBzZW1pY29sb24gZHVwbGljYXRpb24gaXNzdWUgZm9yIFJlYWN0TmF0aXZlIEZvcm1EYXRhIGltcGxlbWVudGF0aW9uCiAgICAgICAgdmFyIF9yZWYgPSBjb250ZW50VHlwZSA/IGNvbnRlbnRUeXBlLnNwbGl0KCc7JykubWFwKGZ1bmN0aW9uICh0b2tlbikgewogICAgICAgICAgICByZXR1cm4gdG9rZW4udHJpbSgpOwogICAgICAgICAgfSkuZmlsdGVyKEJvb2xlYW4pIDogW10sCiAgICAgICAgICBfcmVmMiA9IF90b0FycmF5KF9yZWYpLAogICAgICAgICAgdHlwZSA9IF9yZWYyWzBdLAogICAgICAgICAgdG9rZW5zID0gX3JlZjIuc2xpY2UoMSk7CiAgICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShbdHlwZSB8fCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSddLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkodG9rZW5zKSkuam9pbignOyAnKSk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBBZGQgeHNyZiBoZWFkZXIKICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LgogICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS4KCiAgICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52KSB7CiAgICAgIHdpdGhYU1JGVG9rZW4gJiYgdXRpbHMkMS5pc0Z1bmN0aW9uKHdpdGhYU1JGVG9rZW4pICYmICh3aXRoWFNSRlRva2VuID0gd2l0aFhTUkZUb2tlbihuZXdDb25maWcpKTsKICAgICAgaWYgKHdpdGhYU1JGVG9rZW4gfHwgd2l0aFhTUkZUb2tlbiAhPT0gZmFsc2UgJiYgaXNVUkxTYW1lT3JpZ2luKG5ld0NvbmZpZy51cmwpKSB7CiAgICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyCiAgICAgICAgdmFyIHhzcmZWYWx1ZSA9IHhzcmZIZWFkZXJOYW1lICYmIHhzcmZDb29raWVOYW1lICYmIGNvb2tpZXMucmVhZCh4c3JmQ29va2llTmFtZSk7CiAgICAgICAgaWYgKHhzcmZWYWx1ZSkgewogICAgICAgICAgaGVhZGVycy5zZXQoeHNyZkhlYWRlck5hbWUsIHhzcmZWYWx1ZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3Q29uZmlnOwogIH0pOwoKICB2YXIgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJzsKICB2YXIgeGhyQWRhcHRlciA9IGlzWEhSQWRhcHRlclN1cHBvcnRlZCAmJiBmdW5jdGlvbiAoY29uZmlnKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkgewogICAgICB2YXIgX2NvbmZpZyA9IHJlc29sdmVDb25maWcoY29uZmlnKTsKICAgICAgdmFyIHJlcXVlc3REYXRhID0gX2NvbmZpZy5kYXRhOwogICAgICB2YXIgcmVxdWVzdEhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKF9jb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7CiAgICAgIHZhciByZXNwb25zZVR5cGUgPSBfY29uZmlnLnJlc3BvbnNlVHlwZTsKICAgICAgdmFyIG9uQ2FuY2VsZWQ7CiAgICAgIGZ1bmN0aW9uIGRvbmUoKSB7CiAgICAgICAgaWYgKF9jb25maWcuY2FuY2VsVG9rZW4pIHsKICAgICAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7CiAgICAgICAgfQogICAgICAgIGlmIChfY29uZmlnLnNpZ25hbCkgewogICAgICAgICAgX2NvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgcmVxdWVzdC5vcGVuKF9jb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIF9jb25maWcudXJsLCB0cnVlKTsKCiAgICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TCiAgICAgIHJlcXVlc3QudGltZW91dCA9IF9jb25maWcudGltZW91dDsKICAgICAgZnVuY3Rpb24gb25sb2FkZW5kKCkgewogICAgICAgIGlmICghcmVxdWVzdCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZQogICAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKCdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk7CiAgICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbicgPyByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7CiAgICAgICAgdmFyIHJlc3BvbnNlID0gewogICAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLAogICAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cywKICAgICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCwKICAgICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycywKICAgICAgICAgIGNvbmZpZzogY29uZmlnLAogICAgICAgICAgcmVxdWVzdDogcmVxdWVzdAogICAgICAgIH07CiAgICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7CiAgICAgICAgICByZXNvbHZlKHZhbHVlKTsKICAgICAgICAgIGRvbmUoKTsKICAgICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikgewogICAgICAgICAgcmVqZWN0KGVycik7CiAgICAgICAgICBkb25lKCk7CiAgICAgICAgfSwgcmVzcG9uc2UpOwoKICAgICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0CiAgICAgICAgcmVxdWVzdCA9IG51bGw7CiAgICAgIH0KICAgICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHsKICAgICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZQogICAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmQKICAgICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7CiAgICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmUKICAgICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkCiAgICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2VycwogICAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdAogICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycywKICAgICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaycKICAgICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTsKICAgICAgICB9OwogICAgICB9CgogICAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pCiAgICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkgewogICAgICAgIGlmICghcmVxdWVzdCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBfY29uZmlnLCByZXF1ZXN0KSk7CgogICAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3QKICAgICAgICByZXF1ZXN0ID0gbnVsbDsKICAgICAgfTsKCiAgICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnMKICAgICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7CiAgICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyCiAgICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yCiAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgX2NvbmZpZywgcmVxdWVzdCkpOwoKICAgICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0CiAgICAgICAgcmVxdWVzdCA9IG51bGw7CiAgICAgIH07CgogICAgICAvLyBIYW5kbGUgdGltZW91dAogICAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7CiAgICAgICAgdmFyIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgX2NvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJzsKICAgICAgICB2YXIgdHJhbnNpdGlvbmFsID0gX2NvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7CiAgICAgICAgaWYgKF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZSkgewogICAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZTsKICAgICAgICB9CiAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKHRpbWVvdXRFcnJvck1lc3NhZ2UsIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gQXhpb3NFcnJvci5FVElNRURPVVQgOiBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgX2NvbmZpZywgcmVxdWVzdCkpOwoKICAgICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0CiAgICAgICAgcmVxdWVzdCA9IG51bGw7CiAgICAgIH07CgogICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkCiAgICAgIHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQgJiYgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUobnVsbCk7CgogICAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdAogICAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHsKICAgICAgICB1dGlscyQxLmZvckVhY2gocmVxdWVzdEhlYWRlcnMudG9KU09OKCksIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHsKICAgICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWQKICAgICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKF9jb25maWcud2l0aENyZWRlbnRpYWxzKSkgewogICAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFfY29uZmlnLndpdGhDcmVkZW50aWFsczsKICAgICAgfQoKICAgICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZAogICAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7CiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBfY29uZmlnLnJlc3BvbnNlVHlwZTsKICAgICAgfQoKICAgICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZAogICAgICBpZiAodHlwZW9mIF9jb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHByb2dyZXNzRXZlbnRSZWR1Y2VyKF9jb25maWcub25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKSk7CiAgICAgIH0KCiAgICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzCiAgICAgIGlmICh0eXBlb2YgX2NvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7CiAgICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBwcm9ncmVzc0V2ZW50UmVkdWNlcihfY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpKTsKICAgICAgfQogICAgICBpZiAoX2NvbmZpZy5jYW5jZWxUb2tlbiB8fCBfY29uZmlnLnNpZ25hbCkgewogICAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb24KICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lcwogICAgICAgIG9uQ2FuY2VsZWQgPSBmdW5jdGlvbiBvbkNhbmNlbGVkKGNhbmNlbCkgewogICAgICAgICAgaWYgKCFyZXF1ZXN0KSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHJlamVjdCghY2FuY2VsIHx8IGNhbmNlbC50eXBlID8gbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnLCByZXF1ZXN0KSA6IGNhbmNlbCk7CiAgICAgICAgICByZXF1ZXN0LmFib3J0KCk7CiAgICAgICAgICByZXF1ZXN0ID0gbnVsbDsKICAgICAgICB9OwogICAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7CiAgICAgICAgaWYgKF9jb25maWcuc2lnbmFsKSB7CiAgICAgICAgICBfY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogX2NvbmZpZy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIHByb3RvY29sID0gcGFyc2VQcm90b2NvbChfY29uZmlnLnVybCk7CiAgICAgIGlmIChwcm90b2NvbCAmJiBwbGF0Zm9ybS5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7CiAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIC8vIFNlbmQgdGhlIHJlcXVlc3QKICAgICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhIHx8IG51bGwpOwogICAgfSk7CiAgfTsKCiAgdmFyIGNvbXBvc2VTaWduYWxzID0gZnVuY3Rpb24gY29tcG9zZVNpZ25hbHMoc2lnbmFscywgdGltZW91dCkgewogICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7CiAgICB2YXIgYWJvcnRlZDsKICAgIHZhciBvbmFib3J0ID0gZnVuY3Rpb24gb25hYm9ydChjYW5jZWwpIHsKICAgICAgaWYgKCFhYm9ydGVkKSB7CiAgICAgICAgYWJvcnRlZCA9IHRydWU7CiAgICAgICAgdW5zdWJzY3JpYmUoKTsKICAgICAgICB2YXIgZXJyID0gY2FuY2VsIGluc3RhbmNlb2YgRXJyb3IgPyBjYW5jZWwgOiB0aGlzLnJlYXNvbjsKICAgICAgICBjb250cm9sbGVyLmFib3J0KGVyciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IgPyBlcnIgOiBuZXcgQ2FuY2VsZWRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyKSk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgdGltZXIgPSB0aW1lb3V0ICYmIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICBvbmFib3J0KG5ldyBBeGlvc0Vycm9yKCJ0aW1lb3V0ICIuY29uY2F0KHRpbWVvdXQsICIgb2YgbXMgZXhjZWVkZWQiKSwgQXhpb3NFcnJvci5FVElNRURPVVQpKTsKICAgIH0sIHRpbWVvdXQpOwogICAgdmFyIHVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7CiAgICAgIGlmIChzaWduYWxzKSB7CiAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgc2lnbmFscy5mb3JFYWNoKGZ1bmN0aW9uIChzaWduYWwpIHsKICAgICAgICAgIHNpZ25hbCAmJiAoc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIgPyBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KSA6IHNpZ25hbC51bnN1YnNjcmliZShvbmFib3J0KSk7CiAgICAgICAgfSk7CiAgICAgICAgc2lnbmFscyA9IG51bGw7CiAgICAgIH0KICAgIH07CiAgICBzaWduYWxzLmZvckVhY2goZnVuY3Rpb24gKHNpZ25hbCkgewogICAgICByZXR1cm4gc2lnbmFsICYmIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICYmIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uYWJvcnQpOwogICAgfSk7CiAgICB2YXIgc2lnbmFsID0gY29udHJvbGxlci5zaWduYWw7CiAgICBzaWduYWwudW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZTsKICAgIHJldHVybiBbc2lnbmFsLCBmdW5jdGlvbiAoKSB7CiAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgIHRpbWVyID0gbnVsbDsKICAgIH1dOwogIH07CiAgdmFyIGNvbXBvc2VTaWduYWxzJDEgPSBjb21wb3NlU2lnbmFsczsKCiAgdmFyIHN0cmVhbUNodW5rID0gLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIHN0cmVhbUNodW5rKGNodW5rLCBjaHVua1NpemUpIHsKICAgIHZhciBsZW4sIHBvcywgZW5kOwogICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIHN0cmVhbUNodW5rJChfY29udGV4dCkgewogICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkgewogICAgICAgIGNhc2UgMDoKICAgICAgICAgIGxlbiA9IGNodW5rLmJ5dGVMZW5ndGg7CiAgICAgICAgICBpZiAoISghY2h1bmtTaXplIHx8IGxlbiA8IGNodW5rU2l6ZSkpIHsKICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgX2NvbnRleHQubmV4dCA9IDQ7CiAgICAgICAgICByZXR1cm4gY2h1bms7CiAgICAgICAgY2FzZSA0OgogICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdCgicmV0dXJuIik7CiAgICAgICAgY2FzZSA1OgogICAgICAgICAgcG9zID0gMDsKICAgICAgICBjYXNlIDY6CiAgICAgICAgICBpZiAoIShwb3MgPCBsZW4pKSB7CiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxMzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBlbmQgPSBwb3MgKyBjaHVua1NpemU7CiAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTA7CiAgICAgICAgICByZXR1cm4gY2h1bmsuc2xpY2UocG9zLCBlbmQpOwogICAgICAgIGNhc2UgMTA6CiAgICAgICAgICBwb3MgPSBlbmQ7CiAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMTM6CiAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7CiAgICAgIH0KICAgIH0sIHN0cmVhbUNodW5rKTsKICB9KTsKICB2YXIgcmVhZEJ5dGVzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgIHZhciBfcmVmID0gX3dyYXBBc3luY0dlbmVyYXRvciggLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoaXRlcmFibGUsIGNodW5rU2l6ZSwgZW5jb2RlKSB7CiAgICAgIHZhciBfaXRlcmF0b3JBYnJ1cHRDb21wbGV0aW9uLCBfZGlkSXRlcmF0b3JFcnJvciwgX2l0ZXJhdG9yRXJyb3IsIF9pdGVyYXRvciwgX3N0ZXAsIGNodW5rOwogICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQyKSB7CiAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQyLnByZXYgPSBfY29udGV4dDIubmV4dCkgewogICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICBfaXRlcmF0b3JBYnJ1cHRDb21wbGV0aW9uID0gZmFsc2U7CiAgICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yID0gZmFsc2U7CiAgICAgICAgICAgIF9jb250ZXh0Mi5wcmV2ID0gMjsKICAgICAgICAgICAgX2l0ZXJhdG9yID0gX2FzeW5jSXRlcmF0b3IoaXRlcmFibGUpOwogICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDY7CiAgICAgICAgICAgIHJldHVybiBfYXdhaXRBc3luY0dlbmVyYXRvcihfaXRlcmF0b3IubmV4dCgpKTsKICAgICAgICAgIGNhc2UgNjoKICAgICAgICAgICAgaWYgKCEoX2l0ZXJhdG9yQWJydXB0Q29tcGxldGlvbiA9ICEoX3N0ZXAgPSBfY29udGV4dDIuc2VudCkuZG9uZSkpIHsKICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDI3OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNodW5rID0gX3N0ZXAudmFsdWU7CiAgICAgICAgICAgIF9jb250ZXh0Mi50MCA9IF9hc3luY0dlbmVyYXRvckRlbGVnYXRlOwogICAgICAgICAgICBfY29udGV4dDIudDEgPSBfYXN5bmNJdGVyYXRvcjsKICAgICAgICAgICAgX2NvbnRleHQyLnQyID0gc3RyZWFtQ2h1bms7CiAgICAgICAgICAgIGlmICghQXJyYXlCdWZmZXIuaXNWaWV3KGNodW5rKSkgewogICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTU7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX2NvbnRleHQyLnQzID0gY2h1bms7CiAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTg7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAxNToKICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAxNzsKICAgICAgICAgICAgcmV0dXJuIF9hd2FpdEFzeW5jR2VuZXJhdG9yKGVuY29kZShTdHJpbmcoY2h1bmspKSk7CiAgICAgICAgICBjYXNlIDE3OgogICAgICAgICAgICBfY29udGV4dDIudDMgPSBfY29udGV4dDIuc2VudDsKICAgICAgICAgIGNhc2UgMTg6CiAgICAgICAgICAgIF9jb250ZXh0Mi50NCA9IF9jb250ZXh0Mi50MzsKICAgICAgICAgICAgX2NvbnRleHQyLnQ1ID0gY2h1bmtTaXplOwogICAgICAgICAgICBfY29udGV4dDIudDYgPSAoMCwgX2NvbnRleHQyLnQyKShfY29udGV4dDIudDQsIF9jb250ZXh0Mi50NSk7CiAgICAgICAgICAgIF9jb250ZXh0Mi50NyA9ICgwLCBfY29udGV4dDIudDEpKF9jb250ZXh0Mi50Nik7CiAgICAgICAgICAgIF9jb250ZXh0Mi50OCA9IF9hd2FpdEFzeW5jR2VuZXJhdG9yOwogICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmRlbGVnYXRlWWllbGQoKDAsIF9jb250ZXh0Mi50MCkoX2NvbnRleHQyLnQ3LCBfY29udGV4dDIudDgpLCAidDkiLCAyNCk7CiAgICAgICAgICBjYXNlIDI0OgogICAgICAgICAgICBfaXRlcmF0b3JBYnJ1cHRDb21wbGV0aW9uID0gZmFsc2U7CiAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIDI3OgogICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDMzOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgMjk6CiAgICAgICAgICAgIF9jb250ZXh0Mi5wcmV2ID0gMjk7CiAgICAgICAgICAgIF9jb250ZXh0Mi50MTAgPSBfY29udGV4dDJbImNhdGNoIl0oMik7CiAgICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yID0gdHJ1ZTsKICAgICAgICAgICAgX2l0ZXJhdG9yRXJyb3IgPSBfY29udGV4dDIudDEwOwogICAgICAgICAgY2FzZSAzMzoKICAgICAgICAgICAgX2NvbnRleHQyLnByZXYgPSAzMzsKICAgICAgICAgICAgX2NvbnRleHQyLnByZXYgPSAzNDsKICAgICAgICAgICAgaWYgKCEoX2l0ZXJhdG9yQWJydXB0Q29tcGxldGlvbiAmJiBfaXRlcmF0b3JbInJldHVybiJdICE9IG51bGwpKSB7CiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAzODsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDM4OwogICAgICAgICAgICByZXR1cm4gX2F3YWl0QXN5bmNHZW5lcmF0b3IoX2l0ZXJhdG9yWyJyZXR1cm4iXSgpKTsKICAgICAgICAgIGNhc2UgMzg6CiAgICAgICAgICAgIF9jb250ZXh0Mi5wcmV2ID0gMzg7CiAgICAgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IpIHsKICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDQxOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yOwogICAgICAgICAgY2FzZSA0MToKICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5maW5pc2goMzgpOwogICAgICAgICAgY2FzZSA0MjoKICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5maW5pc2goMzMpOwogICAgICAgICAgY2FzZSA0MzoKICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpOwogICAgICAgIH0KICAgICAgfSwgX2NhbGxlZSwgbnVsbCwgW1syLCAyOSwgMzMsIDQzXSwgWzM0LCwgMzgsIDQyXV0pOwogICAgfSkpOwogICAgcmV0dXJuIGZ1bmN0aW9uIHJlYWRCeXRlcyhfeCwgX3gyLCBfeDMpIHsKICAgICAgcmV0dXJuIF9yZWYuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgIH07CiAgfSgpOwogIHZhciB0cmFja1N0cmVhbSA9IGZ1bmN0aW9uIHRyYWNrU3RyZWFtKHN0cmVhbSwgY2h1bmtTaXplLCBvblByb2dyZXNzLCBvbkZpbmlzaCwgZW5jb2RlKSB7CiAgICB2YXIgaXRlcmF0b3IgPSByZWFkQnl0ZXMoc3RyZWFtLCBjaHVua1NpemUsIGVuY29kZSk7CiAgICB2YXIgYnl0ZXMgPSAwOwogICAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7CiAgICAgIHR5cGU6ICdieXRlcycsCiAgICAgIHB1bGw6IGZ1bmN0aW9uIHB1bGwoY29udHJvbGxlcikgewogICAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvciggLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKCkgewogICAgICAgICAgdmFyIF95aWVsZCRpdGVyYXRvciRuZXh0LCBkb25lLCB2YWx1ZSwgbGVuOwogICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDMpIHsKICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQzLnByZXYgPSBfY29udGV4dDMubmV4dCkgewogICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMjsKICAgICAgICAgICAgICAgIHJldHVybiBpdGVyYXRvci5uZXh0KCk7CiAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgX3lpZWxkJGl0ZXJhdG9yJG5leHQgPSBfY29udGV4dDMuc2VudDsKICAgICAgICAgICAgICAgIGRvbmUgPSBfeWllbGQkaXRlcmF0b3IkbmV4dC5kb25lOwogICAgICAgICAgICAgICAgdmFsdWUgPSBfeWllbGQkaXRlcmF0b3IkbmV4dC52YWx1ZTsKICAgICAgICAgICAgICAgIGlmICghZG9uZSkgewogICAgICAgICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpOwogICAgICAgICAgICAgICAgb25GaW5pc2goKTsKICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuYWJydXB0KCJyZXR1cm4iKTsKICAgICAgICAgICAgICBjYXNlIDk6CiAgICAgICAgICAgICAgICBsZW4gPSB2YWx1ZS5ieXRlTGVuZ3RoOwogICAgICAgICAgICAgICAgb25Qcm9ncmVzcyAmJiBvblByb2dyZXNzKGJ5dGVzICs9IGxlbik7CiAgICAgICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpKTsKICAgICAgICAgICAgICBjYXNlIDEyOgogICAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLnN0b3AoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbGxlZTIpOwogICAgICAgIH0pKSgpOwogICAgICB9LAogICAgICBjYW5jZWw6IGZ1bmN0aW9uIGNhbmNlbChyZWFzb24pIHsKICAgICAgICBvbkZpbmlzaChyZWFzb24pOwogICAgICAgIHJldHVybiBpdGVyYXRvclsicmV0dXJuIl0oKTsKICAgICAgfQogICAgfSwgewogICAgICBoaWdoV2F0ZXJNYXJrOiAyCiAgICB9KTsKICB9OwoKICB2YXIgZmV0Y2hQcm9ncmVzc0RlY29yYXRvciA9IGZ1bmN0aW9uIGZldGNoUHJvZ3Jlc3NEZWNvcmF0b3IodG90YWwsIGZuKSB7CiAgICB2YXIgbGVuZ3RoQ29tcHV0YWJsZSA9IHRvdGFsICE9IG51bGw7CiAgICByZXR1cm4gZnVuY3Rpb24gKGxvYWRlZCkgewogICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIGZuKHsKICAgICAgICAgIGxlbmd0aENvbXB1dGFibGU6IGxlbmd0aENvbXB1dGFibGUsCiAgICAgICAgICB0b3RhbDogdG90YWwsCiAgICAgICAgICBsb2FkZWQ6IGxvYWRlZAogICAgICAgIH0pOwogICAgICB9KTsKICAgIH07CiAgfTsKICB2YXIgaXNGZXRjaFN1cHBvcnRlZCA9IHR5cGVvZiBmZXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgUmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgUmVzcG9uc2UgPT09ICdmdW5jdGlvbic7CiAgdmFyIGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgPSBpc0ZldGNoU3VwcG9ydGVkICYmIHR5cGVvZiBSZWFkYWJsZVN0cmVhbSA9PT0gJ2Z1bmN0aW9uJzsKCiAgLy8gdXNlZCBvbmx5IGluc2lkZSB0aGUgZmV0Y2ggYWRhcHRlcgogIHZhciBlbmNvZGVUZXh0ID0gaXNGZXRjaFN1cHBvcnRlZCAmJiAodHlwZW9mIFRleHRFbmNvZGVyID09PSAnZnVuY3Rpb24nID8gZnVuY3Rpb24gKGVuY29kZXIpIHsKICAgIHJldHVybiBmdW5jdGlvbiAoc3RyKSB7CiAgICAgIHJldHVybiBlbmNvZGVyLmVuY29kZShzdHIpOwogICAgfTsKICB9KG5ldyBUZXh0RW5jb2RlcigpKSA6ICggLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgIHZhciBfcmVmID0gX2FzeW5jVG9HZW5lcmF0b3IoIC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlKHN0cikgewogICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHsKICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkgewogICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICBfY29udGV4dC50MCA9IFVpbnQ4QXJyYXk7CiAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAzOwogICAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHN0cikuYXJyYXlCdWZmZXIoKTsKICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgX2NvbnRleHQudDEgPSBfY29udGV4dC5zZW50OwogICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KCJyZXR1cm4iLCBuZXcgX2NvbnRleHQudDAoX2NvbnRleHQudDEpKTsKICAgICAgICAgIGNhc2UgNToKICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7CiAgICAgICAgfQogICAgICB9LCBfY2FsbGVlKTsKICAgIH0pKTsKICAgIHJldHVybiBmdW5jdGlvbiAoX3gpIHsKICAgICAgcmV0dXJuIF9yZWYuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgIH07CiAgfSgpKSk7CiAgdmFyIHN1cHBvcnRzUmVxdWVzdFN0cmVhbSA9IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiYgZnVuY3Rpb24gKCkgewogICAgdmFyIGR1cGxleEFjY2Vzc2VkID0gZmFsc2U7CiAgICB2YXIgaGFzQ29udGVudFR5cGUgPSBuZXcgUmVxdWVzdChwbGF0Zm9ybS5vcmlnaW4sIHsKICAgICAgYm9keTogbmV3IFJlYWRhYmxlU3RyZWFtKCksCiAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICBnZXQgZHVwbGV4KCkgewogICAgICAgIGR1cGxleEFjY2Vzc2VkID0gdHJ1ZTsKICAgICAgICByZXR1cm4gJ2hhbGYnOwogICAgICB9CiAgICB9KS5oZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJyk7CiAgICByZXR1cm4gZHVwbGV4QWNjZXNzZWQgJiYgIWhhc0NvbnRlbnRUeXBlOwogIH0oKTsKICB2YXIgREVGQVVMVF9DSFVOS19TSVpFID0gNjQgKiAxMDI0OwogIHZhciBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtID0gaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCAmJiAhIWZ1bmN0aW9uICgpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiB1dGlscyQxLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCcnKS5ib2R5KTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICAvLyByZXR1cm4gdW5kZWZpbmVkCiAgICB9CiAgfSgpOwogIHZhciByZXNvbHZlcnMgPSB7CiAgICBzdHJlYW06IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgZnVuY3Rpb24gKHJlcykgewogICAgICByZXR1cm4gcmVzLmJvZHk7CiAgICB9CiAgfTsKICBpc0ZldGNoU3VwcG9ydGVkICYmIGZ1bmN0aW9uIChyZXMpIHsKICAgIFsndGV4dCcsICdhcnJheUJ1ZmZlcicsICdibG9iJywgJ2Zvcm1EYXRhJywgJ3N0cmVhbSddLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHsKICAgICAgIXJlc29sdmVyc1t0eXBlXSAmJiAocmVzb2x2ZXJzW3R5cGVdID0gdXRpbHMkMS5pc0Z1bmN0aW9uKHJlc1t0eXBlXSkgPyBmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgcmV0dXJuIHJlc1t0eXBlXSgpOwogICAgICB9IDogZnVuY3Rpb24gKF8sIGNvbmZpZykgewogICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCJSZXNwb25zZSB0eXBlICciLmNvbmNhdCh0eXBlLCAiJyBpcyBub3Qgc3VwcG9ydGVkIiksIEF4aW9zRXJyb3IuRVJSX05PVF9TVVBQT1JULCBjb25maWcpOwogICAgICB9KTsKICAgIH0pOwogIH0obmV3IFJlc3BvbnNlKCkpOwogIHZhciBnZXRCb2R5TGVuZ3RoID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgIHZhciBfcmVmMiA9IF9hc3luY1RvR2VuZXJhdG9yKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIoYm9keSkgewogICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0MikgewogICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHsKICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgaWYgKCEoYm9keSA9PSBudWxsKSkgewogICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMjsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdCgicmV0dXJuIiwgMCk7CiAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgIGlmICghdXRpbHMkMS5pc0Jsb2IoYm9keSkpIHsKICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDQ7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoInJldHVybiIsIGJvZHkuc2l6ZSk7CiAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgIGlmICghdXRpbHMkMS5pc1NwZWNDb21wbGlhbnRGb3JtKGJvZHkpKSB7CiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSA4OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNzsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXF1ZXN0KGJvZHkpLmFycmF5QnVmZmVyKCk7CiAgICAgICAgICBjYXNlIDc6CiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KCJyZXR1cm4iLCBfY29udGV4dDIuc2VudC5ieXRlTGVuZ3RoKTsKICAgICAgICAgIGNhc2UgODoKICAgICAgICAgICAgaWYgKCF1dGlscyQxLmlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSB7CiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAxMDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdCgicmV0dXJuIiwgYm9keS5ieXRlTGVuZ3RoKTsKICAgICAgICAgIGNhc2UgMTA6CiAgICAgICAgICAgIGlmICh1dGlscyQxLmlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7CiAgICAgICAgICAgICAgYm9keSA9IGJvZHkgKyAnJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIXV0aWxzJDEuaXNTdHJpbmcoYm9keSkpIHsKICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDE1OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTQ7CiAgICAgICAgICAgIHJldHVybiBlbmNvZGVUZXh0KGJvZHkpOwogICAgICAgICAgY2FzZSAxNDoKICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoInJldHVybiIsIF9jb250ZXh0Mi5zZW50LmJ5dGVMZW5ndGgpOwogICAgICAgICAgY2FzZSAxNToKICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpOwogICAgICAgIH0KICAgICAgfSwgX2NhbGxlZTIpOwogICAgfSkpOwogICAgcmV0dXJuIGZ1bmN0aW9uIGdldEJvZHlMZW5ndGgoX3gyKSB7CiAgICAgIHJldHVybiBfcmVmMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgfTsKICB9KCk7CiAgdmFyIHJlc29sdmVCb2R5TGVuZ3RoID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgIHZhciBfcmVmMyA9IF9hc3luY1RvR2VuZXJhdG9yKCAvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTMoaGVhZGVycywgYm9keSkgewogICAgICB2YXIgbGVuZ3RoOwogICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTMkKF9jb250ZXh0MykgewogICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0My5wcmV2ID0gX2NvbnRleHQzLm5leHQpIHsKICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgbGVuZ3RoID0gdXRpbHMkMS50b0Zpbml0ZU51bWJlcihoZWFkZXJzLmdldENvbnRlbnRMZW5ndGgoKSk7CiAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuYWJydXB0KCJyZXR1cm4iLCBsZW5ndGggPT0gbnVsbCA/IGdldEJvZHlMZW5ndGgoYm9keSkgOiBsZW5ndGgpOwogICAgICAgICAgY2FzZSAyOgogICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5zdG9wKCk7CiAgICAgICAgfQogICAgICB9LCBfY2FsbGVlMyk7CiAgICB9KSk7CiAgICByZXR1cm4gZnVuY3Rpb24gcmVzb2x2ZUJvZHlMZW5ndGgoX3gzLCBfeDQpIHsKICAgICAgcmV0dXJuIF9yZWYzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICB9OwogIH0oKTsKICB2YXIgZmV0Y2hBZGFwdGVyID0gaXNGZXRjaFN1cHBvcnRlZCAmJiAoIC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgICB2YXIgX3JlZjQgPSBfYXN5bmNUb0dlbmVyYXRvciggLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU0KGNvbmZpZykgewogICAgICB2YXIgX3Jlc29sdmVDb25maWcsIHVybCwgbWV0aG9kLCBkYXRhLCBzaWduYWwsIGNhbmNlbFRva2VuLCB0aW1lb3V0LCBvbkRvd25sb2FkUHJvZ3Jlc3MsIG9uVXBsb2FkUHJvZ3Jlc3MsIHJlc3BvbnNlVHlwZSwgaGVhZGVycywgX3Jlc29sdmVDb25maWckd2l0aENyLCB3aXRoQ3JlZGVudGlhbHMsIGZldGNoT3B0aW9ucywgX3JlZjUsIF9yZWY2LCBjb21wb3NlZFNpZ25hbCwgc3RvcFRpbWVvdXQsIGZpbmlzaGVkLCByZXF1ZXN0LCBvbkZpbmlzaCwgcmVxdWVzdENvbnRlbnRMZW5ndGgsIF9yZXF1ZXN0LCBjb250ZW50VHlwZUhlYWRlciwgcmVzcG9uc2UsIGlzU3RyZWFtUmVzcG9uc2UsIG9wdGlvbnMsIHJlc3BvbnNlQ29udGVudExlbmd0aCwgcmVzcG9uc2VEYXRhOwogICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTQkKF9jb250ZXh0NCkgewogICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0NC5wcmV2ID0gX2NvbnRleHQ0Lm5leHQpIHsKICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgX3Jlc29sdmVDb25maWcgPSByZXNvbHZlQ29uZmlnKGNvbmZpZyksIHVybCA9IF9yZXNvbHZlQ29uZmlnLnVybCwgbWV0aG9kID0gX3Jlc29sdmVDb25maWcubWV0aG9kLCBkYXRhID0gX3Jlc29sdmVDb25maWcuZGF0YSwgc2lnbmFsID0gX3Jlc29sdmVDb25maWcuc2lnbmFsLCBjYW5jZWxUb2tlbiA9IF9yZXNvbHZlQ29uZmlnLmNhbmNlbFRva2VuLCB0aW1lb3V0ID0gX3Jlc29sdmVDb25maWcudGltZW91dCwgb25Eb3dubG9hZFByb2dyZXNzID0gX3Jlc29sdmVDb25maWcub25Eb3dubG9hZFByb2dyZXNzLCBvblVwbG9hZFByb2dyZXNzID0gX3Jlc29sdmVDb25maWcub25VcGxvYWRQcm9ncmVzcywgcmVzcG9uc2VUeXBlID0gX3Jlc29sdmVDb25maWcucmVzcG9uc2VUeXBlLCBoZWFkZXJzID0gX3Jlc29sdmVDb25maWcuaGVhZGVycywgX3Jlc29sdmVDb25maWckd2l0aENyID0gX3Jlc29sdmVDb25maWcud2l0aENyZWRlbnRpYWxzLCB3aXRoQ3JlZGVudGlhbHMgPSBfcmVzb2x2ZUNvbmZpZyR3aXRoQ3IgPT09IHZvaWQgMCA/ICdzYW1lLW9yaWdpbicgOiBfcmVzb2x2ZUNvbmZpZyR3aXRoQ3IsIGZldGNoT3B0aW9ucyA9IF9yZXNvbHZlQ29uZmlnLmZldGNoT3B0aW9uczsKICAgICAgICAgICAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlID8gKHJlc3BvbnNlVHlwZSArICcnKS50b0xvd2VyQ2FzZSgpIDogJ3RleHQnOwogICAgICAgICAgICBfcmVmNSA9IHNpZ25hbCB8fCBjYW5jZWxUb2tlbiB8fCB0aW1lb3V0ID8gY29tcG9zZVNpZ25hbHMkMShbc2lnbmFsLCBjYW5jZWxUb2tlbl0sIHRpbWVvdXQpIDogW10sIF9yZWY2ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjUsIDIpLCBjb21wb3NlZFNpZ25hbCA9IF9yZWY2WzBdLCBzdG9wVGltZW91dCA9IF9yZWY2WzFdOwogICAgICAgICAgICBvbkZpbmlzaCA9IGZ1bmN0aW9uIG9uRmluaXNoKCkgewogICAgICAgICAgICAgICFmaW5pc2hlZCAmJiBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGNvbXBvc2VkU2lnbmFsICYmIGNvbXBvc2VkU2lnbmFsLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlOwogICAgICAgICAgICB9OwogICAgICAgICAgICBfY29udGV4dDQucHJldiA9IDQ7CiAgICAgICAgICAgIF9jb250ZXh0NC50MCA9IG9uVXBsb2FkUHJvZ3Jlc3MgJiYgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtICYmIG1ldGhvZCAhPT0gJ2dldCcgJiYgbWV0aG9kICE9PSAnaGVhZCc7CiAgICAgICAgICAgIGlmICghX2NvbnRleHQ0LnQwKSB7CiAgICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSAxMTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDk7CiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQm9keUxlbmd0aChoZWFkZXJzLCBkYXRhKTsKICAgICAgICAgIGNhc2UgOToKICAgICAgICAgICAgX2NvbnRleHQ0LnQxID0gcmVxdWVzdENvbnRlbnRMZW5ndGggPSBfY29udGV4dDQuc2VudDsKICAgICAgICAgICAgX2NvbnRleHQ0LnQwID0gX2NvbnRleHQ0LnQxICE9PSAwOwogICAgICAgICAgY2FzZSAxMToKICAgICAgICAgICAgaWYgKCFfY29udGV4dDQudDApIHsKICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDE1OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7CiAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICAgICAgYm9keTogZGF0YSwKICAgICAgICAgICAgICBkdXBsZXg6ICJoYWxmIgogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKHV0aWxzJDEuaXNGb3JtRGF0YShkYXRhKSAmJiAoY29udGVudFR5cGVIZWFkZXIgPSBfcmVxdWVzdC5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpKSB7CiAgICAgICAgICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShjb250ZW50VHlwZUhlYWRlcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKF9yZXF1ZXN0LmJvZHkpIHsKICAgICAgICAgICAgICBkYXRhID0gdHJhY2tTdHJlYW0oX3JlcXVlc3QuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBmZXRjaFByb2dyZXNzRGVjb3JhdG9yKHJlcXVlc3RDb250ZW50TGVuZ3RoLCBwcm9ncmVzc0V2ZW50UmVkdWNlcihvblVwbG9hZFByb2dyZXNzKSksIG51bGwsIGVuY29kZVRleHQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXNlIDE1OgogICAgICAgICAgICBpZiAoIXV0aWxzJDEuaXNTdHJpbmcod2l0aENyZWRlbnRpYWxzKSkgewogICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFscyA9IHdpdGhDcmVkZW50aWFscyA/ICdjb3JzJyA6ICdvbWl0JzsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgZmV0Y2hPcHRpb25zKSwge30sIHsKICAgICAgICAgICAgICBzaWduYWw6IGNvbXBvc2VkU2lnbmFsLAogICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksCiAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycy5ub3JtYWxpemUoKS50b0pTT04oKSwKICAgICAgICAgICAgICBib2R5OiBkYXRhLAogICAgICAgICAgICAgIGR1cGxleDogImhhbGYiLAogICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogd2l0aENyZWRlbnRpYWxzCiAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSAxOTsKICAgICAgICAgICAgcmV0dXJuIGZldGNoKHJlcXVlc3QpOwogICAgICAgICAgY2FzZSAxOToKICAgICAgICAgICAgcmVzcG9uc2UgPSBfY29udGV4dDQuc2VudDsKICAgICAgICAgICAgaXNTdHJlYW1SZXNwb25zZSA9IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKHJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScgfHwgcmVzcG9uc2VUeXBlID09PSAncmVzcG9uc2UnKTsKICAgICAgICAgICAgaWYgKHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKG9uRG93bmxvYWRQcm9ncmVzcyB8fCBpc1N0cmVhbVJlc3BvbnNlKSkgewogICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTsKICAgICAgICAgICAgICBbJ3N0YXR1cycsICdzdGF0dXNUZXh0JywgJ2hlYWRlcnMnXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7CiAgICAgICAgICAgICAgICBvcHRpb25zW3Byb3BdID0gcmVzcG9uc2VbcHJvcF07CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgcmVzcG9uc2VDb250ZW50TGVuZ3RoID0gdXRpbHMkMS50b0Zpbml0ZU51bWJlcihyZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1sZW5ndGgnKSk7CiAgICAgICAgICAgICAgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UodHJhY2tTdHJlYW0ocmVzcG9uc2UuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvbkRvd25sb2FkUHJvZ3Jlc3MgJiYgZmV0Y2hQcm9ncmVzc0RlY29yYXRvcihyZXNwb25zZUNvbnRlbnRMZW5ndGgsIHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSkpLCBpc1N0cmVhbVJlc3BvbnNlICYmIG9uRmluaXNoLCBlbmNvZGVUZXh0KSwgb3B0aW9ucyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlIHx8ICd0ZXh0JzsKICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSAyNTsKICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVyc1t1dGlscyQxLmZpbmRLZXkocmVzb2x2ZXJzLCByZXNwb25zZVR5cGUpIHx8ICd0ZXh0J10ocmVzcG9uc2UsIGNvbmZpZyk7CiAgICAgICAgICBjYXNlIDI1OgogICAgICAgICAgICByZXNwb25zZURhdGEgPSBfY29udGV4dDQuc2VudDsKICAgICAgICAgICAgIWlzU3RyZWFtUmVzcG9uc2UgJiYgb25GaW5pc2goKTsKICAgICAgICAgICAgc3RvcFRpbWVvdXQgJiYgc3RvcFRpbWVvdXQoKTsKICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSAzMDsKICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB7CiAgICAgICAgICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsCiAgICAgICAgICAgICAgICBoZWFkZXJzOiBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpLAogICAgICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsCiAgICAgICAgICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LAogICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcsCiAgICAgICAgICAgICAgICByZXF1ZXN0OiByZXF1ZXN0CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAzMDoKICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5hYnJ1cHQoInJldHVybiIsIF9jb250ZXh0NC5zZW50KTsKICAgICAgICAgIGNhc2UgMzM6CiAgICAgICAgICAgIF9jb250ZXh0NC5wcmV2ID0gMzM7CiAgICAgICAgICAgIF9jb250ZXh0NC50MiA9IF9jb250ZXh0NFsiY2F0Y2giXSg0KTsKICAgICAgICAgICAgb25GaW5pc2goKTsKICAgICAgICAgICAgaWYgKCEoX2NvbnRleHQ0LnQyICYmIF9jb250ZXh0NC50Mi5uYW1lID09PSAnVHlwZUVycm9yJyAmJiAvZmV0Y2gvaS50ZXN0KF9jb250ZXh0NC50Mi5tZXNzYWdlKSkpIHsKICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDM4OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpLCB7CiAgICAgICAgICAgICAgY2F1c2U6IF9jb250ZXh0NC50Mi5jYXVzZSB8fCBfY29udGV4dDQudDIKICAgICAgICAgICAgfSk7CiAgICAgICAgICBjYXNlIDM4OgogICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oX2NvbnRleHQ0LnQyLCBfY29udGV4dDQudDIgJiYgX2NvbnRleHQ0LnQyLmNvZGUsIGNvbmZpZywgcmVxdWVzdCk7CiAgICAgICAgICBjYXNlIDM5OgogICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5zdG9wKCk7CiAgICAgICAgfQogICAgICB9LCBfY2FsbGVlNCwgbnVsbCwgW1s0LCAzM11dKTsKICAgIH0pKTsKICAgIHJldHVybiBmdW5jdGlvbiAoX3g1KSB7CiAgICAgIHJldHVybiBfcmVmNC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgfTsKICB9KCkpOwoKICB2YXIga25vd25BZGFwdGVycyA9IHsKICAgIGh0dHA6IGh0dHBBZGFwdGVyLAogICAgeGhyOiB4aHJBZGFwdGVyLAogICAgZmV0Y2g6IGZldGNoQWRhcHRlcgogIH07CiAgdXRpbHMkMS5mb3JFYWNoKGtub3duQWRhcHRlcnMsIGZ1bmN0aW9uIChmbiwgdmFsdWUpIHsKICAgIGlmIChmbikgewogICAgICB0cnkgewogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7CiAgICAgICAgICB2YWx1ZTogdmFsdWUKICAgICAgICB9KTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eQogICAgICB9CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ2FkYXB0ZXJOYW1lJywgewogICAgICAgIHZhbHVlOiB2YWx1ZQogICAgICB9KTsKICAgIH0KICB9KTsKICB2YXIgcmVuZGVyUmVhc29uID0gZnVuY3Rpb24gcmVuZGVyUmVhc29uKHJlYXNvbikgewogICAgcmV0dXJuICItICIuY29uY2F0KHJlYXNvbik7CiAgfTsKICB2YXIgaXNSZXNvbHZlZEhhbmRsZSA9IGZ1bmN0aW9uIGlzUmVzb2x2ZWRIYW5kbGUoYWRhcHRlcikgewogICAgcmV0dXJuIHV0aWxzJDEuaXNGdW5jdGlvbihhZGFwdGVyKSB8fCBhZGFwdGVyID09PSBudWxsIHx8IGFkYXB0ZXIgPT09IGZhbHNlOwogIH07CiAgdmFyIGFkYXB0ZXJzID0gewogICAgZ2V0QWRhcHRlcjogZnVuY3Rpb24gZ2V0QWRhcHRlcihhZGFwdGVycykgewogICAgICBhZGFwdGVycyA9IHV0aWxzJDEuaXNBcnJheShhZGFwdGVycykgPyBhZGFwdGVycyA6IFthZGFwdGVyc107CiAgICAgIHZhciBfYWRhcHRlcnMgPSBhZGFwdGVycywKICAgICAgICBsZW5ndGggPSBfYWRhcHRlcnMubGVuZ3RoOwogICAgICB2YXIgbmFtZU9yQWRhcHRlcjsKICAgICAgdmFyIGFkYXB0ZXI7CiAgICAgIHZhciByZWplY3RlZFJlYXNvbnMgPSB7fTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIG5hbWVPckFkYXB0ZXIgPSBhZGFwdGVyc1tpXTsKICAgICAgICB2YXIgaWQgPSB2b2lkIDA7CiAgICAgICAgYWRhcHRlciA9IG5hbWVPckFkYXB0ZXI7CiAgICAgICAgaWYgKCFpc1Jlc29sdmVkSGFuZGxlKG5hbWVPckFkYXB0ZXIpKSB7CiAgICAgICAgICBhZGFwdGVyID0ga25vd25BZGFwdGVyc1soaWQgPSBTdHJpbmcobmFtZU9yQWRhcHRlcikpLnRvTG93ZXJDYXNlKCldOwogICAgICAgICAgaWYgKGFkYXB0ZXIgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcigiVW5rbm93biBhZGFwdGVyICciLmNvbmNhdChpZCwgIiciKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChhZGFwdGVyKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcmVqZWN0ZWRSZWFzb25zW2lkIHx8ICcjJyArIGldID0gYWRhcHRlcjsKICAgICAgfQogICAgICBpZiAoIWFkYXB0ZXIpIHsKICAgICAgICB2YXIgcmVhc29ucyA9IE9iamVjdC5lbnRyaWVzKHJlamVjdGVkUmVhc29ucykubWFwKGZ1bmN0aW9uIChfcmVmKSB7CiAgICAgICAgICB2YXIgX3JlZjIgPSBfc2xpY2VkVG9BcnJheShfcmVmLCAyKSwKICAgICAgICAgICAgaWQgPSBfcmVmMlswXSwKICAgICAgICAgICAgc3RhdGUgPSBfcmVmMlsxXTsKICAgICAgICAgIHJldHVybiAiYWRhcHRlciAiLmNvbmNhdChpZCwgIiAiKSArIChzdGF0ZSA9PT0gZmFsc2UgPyAnaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQnIDogJ2lzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkJyk7CiAgICAgICAgfSk7CiAgICAgICAgdmFyIHMgPSBsZW5ndGggPyByZWFzb25zLmxlbmd0aCA+IDEgPyAnc2luY2UgOlxuJyArIHJlYXNvbnMubWFwKHJlbmRlclJlYXNvbikuam9pbignXG4nKSA6ICcgJyArIHJlbmRlclJlYXNvbihyZWFzb25zWzBdKSA6ICdhcyBubyBhZGFwdGVyIHNwZWNpZmllZCc7CiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIiArIHMsICdFUlJfTk9UX1NVUFBPUlQnKTsKICAgICAgfQogICAgICByZXR1cm4gYWRhcHRlcjsKICAgIH0sCiAgICBhZGFwdGVyczoga25vd25BZGFwdGVycwogIH07CgogIC8qKgogICAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLgogICAqCiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3QKICAgKgogICAqIEByZXR1cm5zIHt2b2lkfQogICAqLwogIGZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7CiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7CiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7CiAgICB9CiAgICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgdGhyb3cgbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnKTsKICAgIH0KICB9CgogIC8qKgogICAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuCiAgICoKICAgKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdAogICAqCiAgICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZAogICAqLwogIGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHsKICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTsKICAgIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShjb25maWcuaGVhZGVycyk7CgogICAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YQogICAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoY29uZmlnLCBjb25maWcudHJhbnNmb3JtUmVxdWVzdCk7CiAgICBpZiAoWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgIT09IC0xKSB7CiAgICAgIGNvbmZpZy5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLCBmYWxzZSk7CiAgICB9CiAgICB2YXIgYWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXIoY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMkMS5hZGFwdGVyKTsKICAgIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7CiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTsKCiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhCiAgICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoY29uZmlnLCBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsIHJlc3BvbnNlKTsKICAgICAgcmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20ocmVzcG9uc2UuaGVhZGVycyk7CiAgICAgIHJldHVybiByZXNwb25zZTsKICAgIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHsKICAgICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7CiAgICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpOwoKICAgICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YQogICAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7CiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChjb25maWcsIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSwgcmVhc29uLnJlc3BvbnNlKTsKICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShyZWFzb24ucmVzcG9uc2UuaGVhZGVycyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pOwogICAgfSk7CiAgfQoKICB2YXIgVkVSU0lPTiA9ICIxLjcuMiI7CgogIHZhciB2YWxpZGF0b3JzJDEgPSB7fTsKCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXMKICBbJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaChmdW5jdGlvbiAodHlwZSwgaSkgewogICAgdmFsaWRhdG9ycyQxW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7CiAgICAgIHJldHVybiBfdHlwZW9mKHRoaW5nKSA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7CiAgICB9OwogIH0pOwogIHZhciBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTsKCiAgLyoqCiAgICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3IKICAgKgogICAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkCiAgICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uCiAgICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvCiAgICoKICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259CiAgICovCiAgdmFsaWRhdG9ycyQxLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHsKICAgIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7CiAgICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXCcnICsgb3B0ICsgJ1wnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpOwogICAgfQoKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzCiAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCBvcHQsIG9wdHMpIHsKICAgICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHsKICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURUQpOwogICAgICB9CiAgICAgIGlmICh2ZXJzaW9uICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkgewogICAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTsKICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZQogICAgICAgIGNvbnNvbGUud2Fybihmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7CiAgICB9OwogIH07CgogIC8qKgogICAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGUKICAgKgogICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zCiAgICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYQogICAqIEBwYXJhbSB7Ym9vbGVhbj99IGFsbG93VW5rbm93bgogICAqCiAgICogQHJldHVybnMge29iamVjdH0KICAgKi8KCiAgZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikgewogICAgaWYgKF90eXBlb2Yob3B0aW9ucykgIT09ICdvYmplY3QnKSB7CiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7CiAgICB9CiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpOwogICAgdmFyIGkgPSBrZXlzLmxlbmd0aDsKICAgIHdoaWxlIChpLS0gPiAwKSB7CiAgICAgIHZhciBvcHQgPSBrZXlzW2ldOwogICAgICB2YXIgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07CiAgICAgIGlmICh2YWxpZGF0b3IpIHsKICAgICAgICB2YXIgdmFsdWUgPSBvcHRpb25zW29wdF07CiAgICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpOwogICAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHsKICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTsKICAgICAgICB9CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkgewogICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTsKICAgICAgfQogICAgfQogIH0KICB2YXIgdmFsaWRhdG9yID0gewogICAgYXNzZXJ0T3B0aW9uczogYXNzZXJ0T3B0aW9ucywKICAgIHZhbGlkYXRvcnM6IHZhbGlkYXRvcnMkMQogIH07CgogIHZhciB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7CgogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvcwogICAqCiAgICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlCiAgICoKICAgKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3MKICAgKi8KICB2YXIgQXhpb3MgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHsKICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEF4aW9zKTsKICAgICAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnOwogICAgICB0aGlzLmludGVyY2VwdG9ycyA9IHsKICAgICAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyJDEoKSwKICAgICAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlciQxKCkKICAgICAgfTsKICAgIH0KCiAgICAvKioKICAgICAqIERpc3BhdGNoIGEgcmVxdWVzdAogICAgICoKICAgICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gY29uZmlnT3JVcmwgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKQogICAgICogQHBhcmFtIHs/T2JqZWN0fSBjb25maWcKICAgICAqCiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkCiAgICAgKi8KICAgIF9jcmVhdGVDbGFzcyhBeGlvcywgW3sKICAgICAga2V5OiAicmVxdWVzdCIsCiAgICAgIHZhbHVlOiAoZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBfcmVxdWVzdDIgPSBfYXN5bmNUb0dlbmVyYXRvciggLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoY29uZmlnT3JVcmwsIGNvbmZpZykgewogICAgICAgICAgdmFyIGR1bW15LCBzdGFjazsKICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkgewogICAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkgewogICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIF9jb250ZXh0LnByZXYgPSAwOwogICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDM7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKTsKICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KCJyZXR1cm4iLCBfY29udGV4dC5zZW50KTsKICAgICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgICAgICBfY29udGV4dC5wcmV2ID0gNjsKICAgICAgICAgICAgICAgIF9jb250ZXh0LnQwID0gX2NvbnRleHRbImNhdGNoIl0oMCk7CiAgICAgICAgICAgICAgICBpZiAoX2NvbnRleHQudDAgaW5zdGFuY2VvZiBFcnJvcikgewogICAgICAgICAgICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA/IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGR1bW15ID0ge30pIDogZHVtbXkgPSBuZXcgRXJyb3IoKTsKCiAgICAgICAgICAgICAgICAgIC8vIHNsaWNlIG9mZiB0aGUgRXJyb3I6IC4uLiBsaW5lCiAgICAgICAgICAgICAgICAgIHN0YWNrID0gZHVtbXkuc3RhY2sgPyBkdW1teS5zdGFjay5yZXBsYWNlKC9eLitcbi8sICcnKSA6ICcnOwogICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIGlmICghX2NvbnRleHQudDAuc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0LnQwLnN0YWNrID0gc3RhY2s7CiAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaCB3aXRob3V0IHRoZSAyIHRvcCBzdGFjayBsaW5lcwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhY2sgJiYgIVN0cmluZyhfY29udGV4dC50MC5zdGFjaykuZW5kc1dpdGgoc3RhY2sucmVwbGFjZSgvXi4rXG4uK1xuLywgJycpKSkgewogICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQudDAuc3RhY2sgKz0gJ1xuJyArIHN0YWNrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSB0aGUgY2FzZSB3aGVyZSAic3RhY2siIGlzIGFuIHVuLXdyaXRhYmxlIHByb3BlcnR5CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRocm93IF9jb250ZXh0LnQwOwogICAgICAgICAgICAgIGNhc2UgMTA6CiAgICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIF9jYWxsZWUsIHRoaXMsIFtbMCwgNl1dKTsKICAgICAgICB9KSk7CiAgICAgICAgZnVuY3Rpb24gcmVxdWVzdChfeCwgX3gyKSB7CiAgICAgICAgICByZXR1cm4gX3JlcXVlc3QyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXF1ZXN0OwogICAgICB9KCkpCiAgICB9LCB7CiAgICAgIGtleTogIl9yZXF1ZXN0IiwKICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHsKICAgICAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi8KICAgICAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJCiAgICAgICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTsKICAgICAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307CiAgICAgICAgfQogICAgICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7CiAgICAgICAgdmFyIF9jb25maWcgPSBjb25maWcsCiAgICAgICAgICB0cmFuc2l0aW9uYWwgPSBfY29uZmlnLnRyYW5zaXRpb25hbCwKICAgICAgICAgIHBhcmFtc1NlcmlhbGl6ZXIgPSBfY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIsCiAgICAgICAgICBoZWFkZXJzID0gX2NvbmZpZy5oZWFkZXJzOwogICAgICAgIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7CiAgICAgICAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzWyJib29sZWFuIl0pLAogICAgICAgICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9yc1siYm9vbGVhbiJdKSwKICAgICAgICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9yc1siYm9vbGVhbiJdKQogICAgICAgICAgfSwgZmFsc2UpOwogICAgICAgIH0KICAgICAgICBpZiAocGFyYW1zU2VyaWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKHBhcmFtc1NlcmlhbGl6ZXIpKSB7CiAgICAgICAgICAgIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyID0gewogICAgICAgICAgICAgIHNlcmlhbGl6ZTogcGFyYW1zU2VyaWFsaXplcgogICAgICAgICAgICB9OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMocGFyYW1zU2VyaWFsaXplciwgewogICAgICAgICAgICAgIGVuY29kZTogdmFsaWRhdG9yc1siZnVuY3Rpb24iXSwKICAgICAgICAgICAgICBzZXJpYWxpemU6IHZhbGlkYXRvcnNbImZ1bmN0aW9uIl0KICAgICAgICAgICAgfSwgdHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBTZXQgY29uZmlnLm1ldGhvZAogICAgICAgIGNvbmZpZy5tZXRob2QgPSAoY29uZmlnLm1ldGhvZCB8fCB0aGlzLmRlZmF1bHRzLm1ldGhvZCB8fCAnZ2V0JykudG9Mb3dlckNhc2UoKTsKCiAgICAgICAgLy8gRmxhdHRlbiBoZWFkZXJzCiAgICAgICAgdmFyIGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscyQxLm1lcmdlKGhlYWRlcnMuY29tbW9uLCBoZWFkZXJzW2NvbmZpZy5tZXRob2RdKTsKICAgICAgICBoZWFkZXJzICYmIHV0aWxzJDEuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSwgZnVuY3Rpb24gKG1ldGhvZCkgewogICAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTsKICAgICAgICB9KTsKICAgICAgICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmNvbmNhdChjb250ZXh0SGVhZGVycywgaGVhZGVycyk7CgogICAgICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnMKICAgICAgICB2YXIgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTsKICAgICAgICB2YXIgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTsKICAgICAgICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHsKICAgICAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91czsKICAgICAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7CiAgICAgICAgfSk7CiAgICAgICAgdmFyIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdOwogICAgICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7CiAgICAgICAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTsKICAgICAgICB9KTsKICAgICAgICB2YXIgcHJvbWlzZTsKICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgdmFyIGxlbjsKICAgICAgICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykgewogICAgICAgICAgdmFyIGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdC5iaW5kKHRoaXMpLCB1bmRlZmluZWRdOwogICAgICAgICAgY2hhaW4udW5zaGlmdC5hcHBseShjaGFpbiwgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pOwogICAgICAgICAgY2hhaW4ucHVzaC5hcHBseShjaGFpbiwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTsKICAgICAgICAgIGxlbiA9IGNoYWluLmxlbmd0aDsKICAgICAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTsKICAgICAgICAgIHdoaWxlIChpIDwgbGVuKSB7CiAgICAgICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW5baSsrXSwgY2hhaW5baSsrXSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcHJvbWlzZTsKICAgICAgICB9CiAgICAgICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoOwogICAgICAgIHZhciBuZXdDb25maWcgPSBjb25maWc7CiAgICAgICAgaSA9IDA7CiAgICAgICAgd2hpbGUgKGkgPCBsZW4pIHsKICAgICAgICAgIHZhciBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107CiAgICAgICAgICB2YXIgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgb25SZWplY3RlZC5jYWxsKHRoaXMsIGVycm9yKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTsKICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTsKICAgICAgICB9CiAgICAgICAgaSA9IDA7CiAgICAgICAgbGVuID0gcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aDsKICAgICAgICB3aGlsZSAoaSA8IGxlbikgewogICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcHJvbWlzZTsKICAgICAgfQogICAgfSwgewogICAgICBrZXk6ICJnZXRVcmkiLAogICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VXJpKGNvbmZpZykgewogICAgICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7CiAgICAgICAgdmFyIGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7CiAgICAgICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7CiAgICAgIH0KICAgIH1dKTsKICAgIHJldHVybiBBeGlvczsKICB9KCk7IC8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kcwogIHV0aWxzJDEuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7CiAgICAvKmVzbGludCBmdW5jLW5hbWVzOjAqLwogICAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAodXJsLCBjb25maWcpIHsKICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHsKICAgICAgICBtZXRob2Q6IG1ldGhvZCwKICAgICAgICB1cmw6IHVybCwKICAgICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhCiAgICAgIH0pKTsKICAgIH07CiAgfSk7CiAgdXRpbHMkMS5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkgewogICAgLyplc2xpbnQgZnVuYy1uYW1lczowKi8KCiAgICBmdW5jdGlvbiBnZW5lcmF0ZUhUVFBNZXRob2QoaXNGb3JtKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHsKICAgICAgICAgIG1ldGhvZDogbWV0aG9kLAogICAgICAgICAgaGVhZGVyczogaXNGb3JtID8gewogICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnCiAgICAgICAgICB9IDoge30sCiAgICAgICAgICB1cmw6IHVybCwKICAgICAgICAgIGRhdGE6IGRhdGEKICAgICAgICB9KSk7CiAgICAgIH07CiAgICB9CiAgICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpOwogICAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7CiAgfSk7CiAgdmFyIEF4aW9zJDEgPSBBeGlvczsKCiAgLyoqCiAgICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi4KICAgKgogICAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi4KICAgKgogICAqIEByZXR1cm5zIHtDYW5jZWxUb2tlbn0KICAgKi8KICB2YXIgQ2FuY2VsVG9rZW4gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgZnVuY3Rpb24gQ2FuY2VsVG9rZW4oZXhlY3V0b3IpIHsKICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENhbmNlbFRva2VuKTsKICAgICAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTsKICAgICAgfQogICAgICB2YXIgcmVzb2x2ZVByb21pc2U7CiAgICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7CiAgICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlOwogICAgICB9KTsKICAgICAgdmFyIHRva2VuID0gdGhpczsKCiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzCiAgICAgIHRoaXMucHJvbWlzZS50aGVuKGZ1bmN0aW9uIChjYW5jZWwpIHsKICAgICAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjsKICAgICAgICB2YXIgaSA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoOwogICAgICAgIHdoaWxlIChpLS0gPiAwKSB7CiAgICAgICAgICB0b2tlbi5fbGlzdGVuZXJzW2ldKGNhbmNlbCk7CiAgICAgICAgfQogICAgICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsOwogICAgICB9KTsKCiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzCiAgICAgIHRoaXMucHJvbWlzZS50aGVuID0gZnVuY3Rpb24gKG9uZnVsZmlsbGVkKSB7CiAgICAgICAgdmFyIF9yZXNvbHZlOwogICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzCiAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkgewogICAgICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpOwogICAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlOwogICAgICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpOwogICAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkgewogICAgICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpOwogICAgICAgIH07CiAgICAgICAgcmV0dXJuIHByb21pc2U7CiAgICAgIH07CiAgICAgIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHsKICAgICAgICBpZiAodG9rZW4ucmVhc29uKSB7CiAgICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWQKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KTsKICAgICAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pOwogICAgICB9KTsKICAgIH0KCiAgICAvKioKICAgICAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLgogICAgICovCiAgICBfY3JlYXRlQ2xhc3MoQ2FuY2VsVG9rZW4sIFt7CiAgICAgIGtleTogInRocm93SWZSZXF1ZXN0ZWQiLAogICAgICB2YWx1ZTogZnVuY3Rpb24gdGhyb3dJZlJlcXVlc3RlZCgpIHsKICAgICAgICBpZiAodGhpcy5yZWFzb24pIHsKICAgICAgICAgIHRocm93IHRoaXMucmVhc29uOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbAogICAgICAgKi8KICAgIH0sIHsKICAgICAga2V5OiAic3Vic2NyaWJlIiwKICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikgewogICAgICAgIGlmICh0aGlzLnJlYXNvbikgewogICAgICAgICAgbGlzdGVuZXIodGhpcy5yZWFzb24pOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5fbGlzdGVuZXJzKSB7CiAgICAgICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtsaXN0ZW5lcl07CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbAogICAgICAgKi8KICAgIH0sIHsKICAgICAga2V5OiAidW5zdWJzY3JpYmUiLAogICAgICB2YWx1ZTogZnVuY3Rpb24gdW5zdWJzY3JpYmUobGlzdGVuZXIpIHsKICAgICAgICBpZiAoIXRoaXMuX2xpc3RlbmVycykgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7CiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgewogICAgICAgICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKioKICAgICAgICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLAogICAgICAgKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLgogICAgICAgKi8KICAgIH1dLCBbewogICAgICBrZXk6ICJzb3VyY2UiLAogICAgICB2YWx1ZTogZnVuY3Rpb24gc291cmNlKCkgewogICAgICAgIHZhciBjYW5jZWw7CiAgICAgICAgdmFyIHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHsKICAgICAgICAgIGNhbmNlbCA9IGM7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHRva2VuOiB0b2tlbiwKICAgICAgICAgIGNhbmNlbDogY2FuY2VsCiAgICAgICAgfTsKICAgICAgfQogICAgfV0pOwogICAgcmV0dXJuIENhbmNlbFRva2VuOwogIH0oKTsKICB2YXIgQ2FuY2VsVG9rZW4kMSA9IENhbmNlbFRva2VuOwoKICAvKioKICAgKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLgogICAqCiAgICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC4KICAgKgogICAqICBgYGBqcwogICAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9CiAgICogIHZhciBhcmdzID0gWzEsIDIsIDNdOwogICAqICBmLmFwcGx5KG51bGwsIGFyZ3MpOwogICAqICBgYGAKICAgKgogICAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLgogICAqCiAgICogIGBgYGpzCiAgICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTsKICAgKiAgYGBgCiAgICoKICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjawogICAqCiAgICogQHJldHVybnMge0Z1bmN0aW9ufQogICAqLwogIGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykgewogICAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7CiAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpOwogICAgfTsKICB9CgogIC8qKgogICAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MKICAgKgogICAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdAogICAqCiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2UKICAgKi8KICBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkgewogICAgcmV0dXJuIHV0aWxzJDEuaXNPYmplY3QocGF5bG9hZCkgJiYgcGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWU7CiAgfQoKICB2YXIgSHR0cFN0YXR1c0NvZGUgPSB7CiAgICBDb250aW51ZTogMTAwLAogICAgU3dpdGNoaW5nUHJvdG9jb2xzOiAxMDEsCiAgICBQcm9jZXNzaW5nOiAxMDIsCiAgICBFYXJseUhpbnRzOiAxMDMsCiAgICBPazogMjAwLAogICAgQ3JlYXRlZDogMjAxLAogICAgQWNjZXB0ZWQ6IDIwMiwKICAgIE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjogMjAzLAogICAgTm9Db250ZW50OiAyMDQsCiAgICBSZXNldENvbnRlbnQ6IDIwNSwKICAgIFBhcnRpYWxDb250ZW50OiAyMDYsCiAgICBNdWx0aVN0YXR1czogMjA3LAogICAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsCiAgICBJbVVzZWQ6IDIyNiwKICAgIE11bHRpcGxlQ2hvaWNlczogMzAwLAogICAgTW92ZWRQZXJtYW5lbnRseTogMzAxLAogICAgRm91bmQ6IDMwMiwKICAgIFNlZU90aGVyOiAzMDMsCiAgICBOb3RNb2RpZmllZDogMzA0LAogICAgVXNlUHJveHk6IDMwNSwKICAgIFVudXNlZDogMzA2LAogICAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNywKICAgIFBlcm1hbmVudFJlZGlyZWN0OiAzMDgsCiAgICBCYWRSZXF1ZXN0OiA0MDAsCiAgICBVbmF1dGhvcml6ZWQ6IDQwMSwKICAgIFBheW1lbnRSZXF1aXJlZDogNDAyLAogICAgRm9yYmlkZGVuOiA0MDMsCiAgICBOb3RGb3VuZDogNDA0LAogICAgTWV0aG9kTm90QWxsb3dlZDogNDA1LAogICAgTm90QWNjZXB0YWJsZTogNDA2LAogICAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsCiAgICBSZXF1ZXN0VGltZW91dDogNDA4LAogICAgQ29uZmxpY3Q6IDQwOSwKICAgIEdvbmU6IDQxMCwKICAgIExlbmd0aFJlcXVpcmVkOiA0MTEsCiAgICBQcmVjb25kaXRpb25GYWlsZWQ6IDQxMiwKICAgIFBheWxvYWRUb29MYXJnZTogNDEzLAogICAgVXJpVG9vTG9uZzogNDE0LAogICAgVW5zdXBwb3J0ZWRNZWRpYVR5cGU6IDQxNSwKICAgIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNiwKICAgIEV4cGVjdGF0aW9uRmFpbGVkOiA0MTcsCiAgICBJbUFUZWFwb3Q6IDQxOCwKICAgIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLAogICAgVW5wcm9jZXNzYWJsZUVudGl0eTogNDIyLAogICAgTG9ja2VkOiA0MjMsCiAgICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsCiAgICBUb29FYXJseTogNDI1LAogICAgVXBncmFkZVJlcXVpcmVkOiA0MjYsCiAgICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LAogICAgVG9vTWFueVJlcXVlc3RzOiA0MjksCiAgICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSwKICAgIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsCiAgICBJbnRlcm5hbFNlcnZlckVycm9yOiA1MDAsCiAgICBOb3RJbXBsZW1lbnRlZDogNTAxLAogICAgQmFkR2F0ZXdheTogNTAyLAogICAgU2VydmljZVVuYXZhaWxhYmxlOiA1MDMsCiAgICBHYXRld2F5VGltZW91dDogNTA0LAogICAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSwKICAgIFZhcmlhbnRBbHNvTmVnb3RpYXRlczogNTA2LAogICAgSW5zdWZmaWNpZW50U3RvcmFnZTogNTA3LAogICAgTG9vcERldGVjdGVkOiA1MDgsCiAgICBOb3RFeHRlbmRlZDogNTEwLAogICAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMQogIH07CiAgT2JqZWN0LmVudHJpZXMoSHR0cFN0YXR1c0NvZGUpLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHsKICAgIHZhciBfcmVmMiA9IF9zbGljZWRUb0FycmF5KF9yZWYsIDIpLAogICAgICBrZXkgPSBfcmVmMlswXSwKICAgICAgdmFsdWUgPSBfcmVmMlsxXTsKICAgIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTsKICB9KTsKICB2YXIgSHR0cFN0YXR1c0NvZGUkMSA9IEh0dHBTdGF0dXNDb2RlOwoKICAvKioKICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3MKICAgKgogICAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlCiAgICoKICAgKiBAcmV0dXJucyB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zCiAgICovCiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykgewogICAgdmFyIGNvbnRleHQgPSBuZXcgQXhpb3MkMShkZWZhdWx0Q29uZmlnKTsKICAgIHZhciBpbnN0YW5jZSA9IGJpbmQoQXhpb3MkMS5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7CgogICAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2UKICAgIHV0aWxzJDEuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcyQxLnByb3RvdHlwZSwgY29udGV4dCwgewogICAgICBhbGxPd25LZXlzOiB0cnVlCiAgICB9KTsKCiAgICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2UKICAgIHV0aWxzJDEuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0LCBudWxsLCB7CiAgICAgIGFsbE93bktleXM6IHRydWUKICAgIH0pOwoKICAgIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXMKICAgIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykgewogICAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTsKICAgIH07CiAgICByZXR1cm4gaW5zdGFuY2U7CiAgfQoKICAvLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWQKICB2YXIgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyQxKTsKCiAgLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlCiAgYXhpb3MuQXhpb3MgPSBBeGlvcyQxOwoKICAvLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW4KICBheGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjsKICBheGlvcy5DYW5jZWxUb2tlbiA9IENhbmNlbFRva2VuJDE7CiAgYXhpb3MuaXNDYW5jZWwgPSBpc0NhbmNlbDsKICBheGlvcy5WRVJTSU9OID0gVkVSU0lPTjsKICBheGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTsKCiAgLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3MKICBheGlvcy5BeGlvc0Vycm9yID0gQXhpb3NFcnJvcjsKCiAgLy8gYWxpYXMgZm9yIENhbmNlbGVkRXJyb3IgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKICBheGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yOwoKICAvLyBFeHBvc2UgYWxsL3NwcmVhZAogIGF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykgewogICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTsKICB9OwogIGF4aW9zLnNwcmVhZCA9IHNwcmVhZDsKCiAgLy8gRXhwb3NlIGlzQXhpb3NFcnJvcgogIGF4aW9zLmlzQXhpb3NFcnJvciA9IGlzQXhpb3NFcnJvcjsKCiAgLy8gRXhwb3NlIG1lcmdlQ29uZmlnCiAgYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZzsKICBheGlvcy5BeGlvc0hlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMTsKICBheGlvcy5mb3JtVG9KU09OID0gZnVuY3Rpb24gKHRoaW5nKSB7CiAgICByZXR1cm4gZm9ybURhdGFUb0pTT04odXRpbHMkMS5pc0hUTUxGb3JtKHRoaW5nKSA/IG5ldyBGb3JtRGF0YSh0aGluZykgOiB0aGluZyk7CiAgfTsKICBheGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjsKICBheGlvcy5IdHRwU3RhdHVzQ29kZSA9IEh0dHBTdGF0dXNDb2RlJDE7CiAgYXhpb3NbImRlZmF1bHQiXSA9IGF4aW9zOwoKICByZXR1cm4gYXhpb3M7Cgp9KSk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPWF4aW9zLmpzLm1hcAo=]]></data>
	</file>
	<file>
	  <filename>/js/axios.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IWZ1bmN0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUodCk6KGU9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuYXhpb3M9dCgpfSh0aGlzLChmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKGUpe3ZhciByLG47ZnVuY3Rpb24gbyhyLG4pe3RyeXt2YXIgYT1lW3JdKG4pLHM9YS52YWx1ZSx1PXMgaW5zdGFuY2VvZiB0O1Byb21pc2UucmVzb2x2ZSh1P3MudjpzKS50aGVuKChmdW5jdGlvbih0KXtpZih1KXt2YXIgbj0icmV0dXJuIj09PXI/InJldHVybiI6Im5leHQiO2lmKCFzLmt8fHQuZG9uZSlyZXR1cm4gbyhuLHQpO3Q9ZVtuXSh0KS52YWx1ZX1pKGEuZG9uZT8icmV0dXJuIjoibm9ybWFsIix0KX0pLChmdW5jdGlvbihlKXtvKCJ0aHJvdyIsZSl9KSl9Y2F0Y2goZSl7aSgidGhyb3ciLGUpfX1mdW5jdGlvbiBpKGUsdCl7c3dpdGNoKGUpe2Nhc2UicmV0dXJuIjpyLnJlc29sdmUoe3ZhbHVlOnQsZG9uZTohMH0pO2JyZWFrO2Nhc2UidGhyb3ciOnIucmVqZWN0KHQpO2JyZWFrO2RlZmF1bHQ6ci5yZXNvbHZlKHt2YWx1ZTp0LGRvbmU6ITF9KX0ocj1yLm5leHQpP28oci5rZXksci5hcmcpOm49bnVsbH10aGlzLl9pbnZva2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGksYSl7dmFyIHM9e2tleTplLGFyZzp0LHJlc29sdmU6aSxyZWplY3Q6YSxuZXh0Om51bGx9O24/bj1uLm5leHQ9czoocj1uPXMsbyhlLHQpKX0pKX0sImZ1bmN0aW9uIiE9dHlwZW9mIGUucmV0dXJuJiYodGhpcy5yZXR1cm49dm9pZCAwKX1mdW5jdGlvbiB0KGUsdCl7dGhpcy52PWUsdGhpcy5rPXR9ZnVuY3Rpb24gcihlKXt2YXIgcj17fSxuPSExO2Z1bmN0aW9uIG8ocixvKXtyZXR1cm4gbj0hMCxvPW5ldyBQcm9taXNlKChmdW5jdGlvbih0KXt0KGVbcl0obykpfSkpLHtkb25lOiExLHZhbHVlOm5ldyB0KG8sMSl9fXJldHVybiByWyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sci5uZXh0PWZ1bmN0aW9uKGUpe3JldHVybiBuPyhuPSExLGUpOm8oIm5leHQiLGUpfSwiZnVuY3Rpb24iPT10eXBlb2YgZS50aHJvdyYmKHIudGhyb3c9ZnVuY3Rpb24oZSl7aWYobil0aHJvdyBuPSExLGU7cmV0dXJuIG8oInRocm93IixlKX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBlLnJldHVybiYmKHIucmV0dXJuPWZ1bmN0aW9uKGUpe3JldHVybiBuPyhuPSExLGUpOm8oInJldHVybiIsZSl9KSxyfWZ1bmN0aW9uIG4oZSl7dmFyIHQscixuLGk9Mjtmb3IoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJihyPVN5bWJvbC5hc3luY0l0ZXJhdG9yLG49U3ltYm9sLml0ZXJhdG9yKTtpLS07KXtpZihyJiZudWxsIT0odD1lW3JdKSlyZXR1cm4gdC5jYWxsKGUpO2lmKG4mJm51bGwhPSh0PWVbbl0pKXJldHVybiBuZXcgbyh0LmNhbGwoZSkpO3I9IkBAYXN5bmNJdGVyYXRvciIsbj0iQEBpdGVyYXRvciJ9dGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGlzIG5vdCBhc3luYyBpdGVyYWJsZSIpfWZ1bmN0aW9uIG8oZSl7ZnVuY3Rpb24gdChlKXtpZihPYmplY3QoZSkhPT1lKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKGUrIiBpcyBub3QgYW4gb2JqZWN0LiIpKTt2YXIgdD1lLmRvbmU7cmV0dXJuIFByb21pc2UucmVzb2x2ZShlLnZhbHVlKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm57dmFsdWU6ZSxkb25lOnR9fSkpfXJldHVybiBvPWZ1bmN0aW9uKGUpe3RoaXMucz1lLHRoaXMubj1lLm5leHR9LG8ucHJvdG90eXBlPXtzOm51bGwsbjpudWxsLG5leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLm4uYXBwbHkodGhpcy5zLGFyZ3VtZW50cykpfSxyZXR1cm46ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5zLnJldHVybjtyZXR1cm4gdm9pZCAwPT09cj9Qcm9taXNlLnJlc29sdmUoe3ZhbHVlOmUsZG9uZTohMH0pOnQoci5hcHBseSh0aGlzLnMsYXJndW1lbnRzKSl9LHRocm93OmZ1bmN0aW9uKGUpe3ZhciByPXRoaXMucy5yZXR1cm47cmV0dXJuIHZvaWQgMD09PXI/UHJvbWlzZS5yZWplY3QoZSk6dChyLmFwcGx5KHRoaXMucyxhcmd1bWVudHMpKX19LG5ldyBvKGUpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIG5ldyB0KGUsMCl9ZnVuY3Rpb24gYShlLHQpe3ZhciByPU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dCYmKG49bi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCkuZW51bWVyYWJsZX0pKSksci5wdXNoLmFwcGx5KHIsbil9cmV0dXJuIHJ9ZnVuY3Rpb24gcyhlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9O3QlMj9hKE9iamVjdChyKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dihlLHQsclt0XSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6YShPYmplY3QocikpLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHQpKX0pKX1yZXR1cm4gZX1mdW5jdGlvbiB1KCl7dT1mdW5jdGlvbigpe3JldHVybiB0fTt2YXIgZSx0PXt9LHI9T2JqZWN0LnByb3RvdHlwZSxuPXIuaGFzT3duUHJvcGVydHksbz1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKGUsdCxyKXtlW3RdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sYT1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLGM9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGYoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7Zih7fSwiIil9Y2F0Y2goZSl7Zj1mdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cn19ZnVuY3Rpb24gbChlLHQscixuKXt2YXIgaT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIG0/dDptLGE9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSkscz1uZXcgUChufHxbXSk7cmV0dXJuIG8oYSwiX2ludm9rZSIse3ZhbHVlOlQoZSxyLHMpfSksYX1mdW5jdGlvbiBoKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19dC53cmFwPWw7dmFyIHA9InN1c3BlbmRlZFN0YXJ0IixkPSJleGVjdXRpbmciLHk9ImNvbXBsZXRlZCIsdj17fTtmdW5jdGlvbiBtKCl7fWZ1bmN0aW9uIGIoKXt9ZnVuY3Rpb24gZygpe312YXIgdz17fTtmKHcsYSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgRT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsTz1FJiZFKEUoTChbXSkpKTtPJiZPIT09ciYmbi5jYWxsKE8sYSkmJih3PU8pO3ZhciBTPWcucHJvdG90eXBlPW0ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyk7ZnVuY3Rpb24geChlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2YoZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gUihlLHQpe2Z1bmN0aW9uIHIobyxpLGEscyl7dmFyIHU9aChlW29dLGUsaSk7aWYoInRocm93IiE9PXUudHlwZSl7dmFyIGM9dS5hcmcsZj1jLnZhbHVlO3JldHVybiBmJiYib2JqZWN0Ij09dHlwZW9mIGYmJm4uY2FsbChmLCJfX2F3YWl0Iik/dC5yZXNvbHZlKGYuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7cigibmV4dCIsZSxhLHMpfSksKGZ1bmN0aW9uKGUpe3IoInRocm93IixlLGEscyl9KSk6dC5yZXNvbHZlKGYpLnRoZW4oKGZ1bmN0aW9uKGUpe2MudmFsdWU9ZSxhKGMpfSksKGZ1bmN0aW9uKGUpe3JldHVybiByKCJ0aHJvdyIsZSxhLHMpfSkpfXModS5hcmcpfXZhciBpO28odGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGUsbil7ZnVuY3Rpb24gbygpe3JldHVybiBuZXcgdCgoZnVuY3Rpb24odCxvKXtyKGUsbix0LG8pfSkpfXJldHVybiBpPWk/aS50aGVuKG8sbyk6bygpfX0pfWZ1bmN0aW9uIFQodCxyLG4pe3ZhciBvPXA7cmV0dXJuIGZ1bmN0aW9uKGksYSl7aWYobz09PWQpdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYobz09PXkpe2lmKCJ0aHJvdyI9PT1pKXRocm93IGE7cmV0dXJue3ZhbHVlOmUsZG9uZTohMH19Zm9yKG4ubWV0aG9kPWksbi5hcmc9YTs7KXt2YXIgcz1uLmRlbGVnYXRlO2lmKHMpe3ZhciB1PWoocyxuKTtpZih1KXtpZih1PT09diljb250aW51ZTtyZXR1cm4gdX19aWYoIm5leHQiPT09bi5tZXRob2Qpbi5zZW50PW4uX3NlbnQ9bi5hcmc7ZWxzZSBpZigidGhyb3ciPT09bi5tZXRob2Qpe2lmKG89PT1wKXRocm93IG89eSxuLmFyZztuLmRpc3BhdGNoRXhjZXB0aW9uKG4uYXJnKX1lbHNlInJldHVybiI9PT1uLm1ldGhvZCYmbi5hYnJ1cHQoInJldHVybiIsbi5hcmcpO289ZDt2YXIgYz1oKHQscixuKTtpZigibm9ybWFsIj09PWMudHlwZSl7aWYobz1uLmRvbmU/eToic3VzcGVuZGVkWWllbGQiLGMuYXJnPT09diljb250aW51ZTtyZXR1cm57dmFsdWU6Yy5hcmcsZG9uZTpuLmRvbmV9fSJ0aHJvdyI9PT1jLnR5cGUmJihvPXksbi5tZXRob2Q9InRocm93IixuLmFyZz1jLmFyZyl9fX1mdW5jdGlvbiBqKHQscil7dmFyIG49ci5tZXRob2Qsbz10Lml0ZXJhdG9yW25dO2lmKG89PT1lKXJldHVybiByLmRlbGVnYXRlPW51bGwsInRocm93Ij09PW4mJnQuaXRlcmF0b3IucmV0dXJuJiYoci5tZXRob2Q9InJldHVybiIsci5hcmc9ZSxqKHQsciksInRocm93Ij09PXIubWV0aG9kKXx8InJldHVybiIhPT1uJiYoci5tZXRob2Q9InRocm93IixyLmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK24rIicgbWV0aG9kIikpLHY7dmFyIGk9aChvLHQuaXRlcmF0b3Isci5hcmcpO2lmKCJ0aHJvdyI9PT1pLnR5cGUpcmV0dXJuIHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9aS5hcmcsci5kZWxlZ2F0ZT1udWxsLHY7dmFyIGE9aS5hcmc7cmV0dXJuIGE/YS5kb25lPyhyW3QucmVzdWx0TmFtZV09YS52YWx1ZSxyLm5leHQ9dC5uZXh0TG9jLCJyZXR1cm4iIT09ci5tZXRob2QmJihyLm1ldGhvZD0ibmV4dCIsci5hcmc9ZSksci5kZWxlZ2F0ZT1udWxsLHYpOmE6KHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSxyLmRlbGVnYXRlPW51bGwsdil9ZnVuY3Rpb24gayhlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBBKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBQKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goayx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBMKHQpe2lmKHR8fCIiPT09dCl7dmFyIHI9dFthXTtpZihyKXJldHVybiByLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbz0tMSxpPWZ1bmN0aW9uIHIoKXtmb3IoOysrbzx0Lmxlbmd0aDspaWYobi5jYWxsKHQsbykpcmV0dXJuIHIudmFsdWU9dFtvXSxyLmRvbmU9ITEscjtyZXR1cm4gci52YWx1ZT1lLHIuZG9uZT0hMCxyfTtyZXR1cm4gaS5uZXh0PWl9fXRocm93IG5ldyBUeXBlRXJyb3IodHlwZW9mIHQrIiBpcyBub3QgaXRlcmFibGUiKX1yZXR1cm4gYi5wcm90b3R5cGU9ZyxvKFMsImNvbnN0cnVjdG9yIix7dmFsdWU6Zyxjb25maWd1cmFibGU6ITB9KSxvKGcsImNvbnN0cnVjdG9yIix7dmFsdWU6Yixjb25maWd1cmFibGU6ITB9KSxiLmRpc3BsYXlOYW1lPWYoZyxjLCJHZW5lcmF0b3JGdW5jdGlvbiIpLHQuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09Ynx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sdC5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsZyk6KGUuX19wcm90b19fPWcsZihlLGMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUyksZX0sdC5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0seChSLnByb3RvdHlwZSksZihSLnByb3RvdHlwZSxzLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLHQuQXN5bmNJdGVyYXRvcj1SLHQuYXN5bmM9ZnVuY3Rpb24oZSxyLG4sbyxpKXt2b2lkIDA9PT1pJiYoaT1Qcm9taXNlKTt2YXIgYT1uZXcgUihsKGUscixuLG8pLGkpO3JldHVybiB0LmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/YTphLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6YS5uZXh0KCl9KSl9LHgoUyksZihTLGMsIkdlbmVyYXRvciIpLGYoUyxhLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGYoUywidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkpLHQua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoZSkscj1bXTtmb3IodmFyIG4gaW4gdClyLnB1c2gobik7cmV0dXJuIHIucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO3IubGVuZ3RoOyl7dmFyIG49ci5wb3AoKTtpZihuIGluIHQpcmV0dXJuIGUudmFsdWU9bixlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSx0LnZhbHVlcz1MLFAucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQLHJlc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PWUsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9ZSx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChBKSwhdClmb3IodmFyIHIgaW4gdGhpcykidCI9PT1yLmNoYXJBdCgwKSYmbi5jYWxsKHRoaXMscikmJiFpc05hTigrci5zbGljZSgxKSkmJih0aGlzW3JdPWUpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7aWYodGhpcy5kb25lKXRocm93IHQ7dmFyIHI9dGhpcztmdW5jdGlvbiBvKG4sbyl7cmV0dXJuIHMudHlwZT0idGhyb3ciLHMuYXJnPXQsci5uZXh0PW4sbyYmKHIubWV0aG9kPSJuZXh0IixyLmFyZz1lKSwhIW99Zm9yKHZhciBpPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIGE9dGhpcy50cnlFbnRyaWVzW2ldLHM9YS5jb21wbGV0aW9uO2lmKCJyb290Ij09PWEudHJ5TG9jKXJldHVybiBvKCJlbmQiKTtpZihhLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgdT1uLmNhbGwoYSwiY2F0Y2hMb2MiKSxjPW4uY2FsbChhLCJmaW5hbGx5TG9jIik7aWYodSYmYyl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG8oYS5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbyhhLmZpbmFsbHlMb2MpfWVsc2UgaWYodSl7aWYodGhpcy5wcmV2PGEuY2F0Y2hMb2MpcmV0dXJuIG8oYS5jYXRjaExvYywhMCl9ZWxzZXtpZighYyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PGEuZmluYWxseUxvYylyZXR1cm4gbyhhLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3I+PTA7LS1yKXt2YXIgbz10aGlzLnRyeUVudHJpZXNbcl07aWYoby50cnlMb2M8PXRoaXMucHJldiYmbi5jYWxsKG8sImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PG8uZmluYWxseUxvYyl7dmFyIGk9bzticmVha319aSYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJmkudHJ5TG9jPD10JiZ0PD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBhPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBhLnR5cGU9ZSxhLmFyZz10LGk/KHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLHYpOnRoaXMuY29tcGxldGUoYSl9LGNvbXBsZXRlOmZ1bmN0aW9uKGUsdCl7aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4iYnJlYWsiPT09ZS50eXBlfHwiY29udGludWUiPT09ZS50eXBlP3RoaXMubmV4dD1lLmFyZzoicmV0dXJuIj09PWUudHlwZT8odGhpcy5ydmFsPXRoaXMuYXJnPWUuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Im5vcm1hbCI9PT1lLnR5cGUmJnQmJih0aGlzLm5leHQ9dCksdn0sZmluaXNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLmZpbmFsbHlMb2M9PT1lKXJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbixyLmFmdGVyTG9jKSxBKHIpLHZ9fSxjYXRjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci50cnlMb2M9PT1lKXt2YXIgbj1yLmNvbXBsZXRpb247aWYoInRocm93Ij09PW4udHlwZSl7dmFyIG89bi5hcmc7QShyKX1yZXR1cm4gb319dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LHIsbil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOkwodCkscmVzdWx0TmFtZTpyLG5leHRMb2M6bn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz1lKSx2fX0sdH1mdW5jdGlvbiBjKGUpe3ZhciB0PWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHwhZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsdHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIG4pcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10P1N0cmluZzpOdW1iZXIpKGUpfShlLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDpTdHJpbmcodCl9ZnVuY3Rpb24gZihlKXtyZXR1cm4gZj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sZihlKX1mdW5jdGlvbiBsKGUsdCxyLG4sbyxpLGEpe3RyeXt2YXIgcz1lW2ldKGEpLHU9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KHUpOlByb21pc2UucmVzb2x2ZSh1KS50aGVuKG4sbyl9ZnVuY3Rpb24gaChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixvKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gYShlKXtsKGksbixvLGEscywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtsKGksbixvLGEscywidGhyb3ciLGUpfWEodm9pZCAwKX0pKX19ZnVuY3Rpb24gcChlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGQoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGMobi5rZXkpLG4pfX1mdW5jdGlvbiB5KGUsdCxyKXtyZXR1cm4gdCYmZChlLnByb3RvdHlwZSx0KSxyJiZkKGUsciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksZX1mdW5jdGlvbiB2KGUsdCxyKXtyZXR1cm4odD1jKHQpKWluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09cixlfWZ1bmN0aW9uIG0oZSx0KXtyZXR1cm4gZyhlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1udWxsPT1lP251bGw6InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVsiQEBpdGVyYXRvciJdO2lmKG51bGwhPXIpe3ZhciBuLG8saSxhLHM9W10sdT0hMCxjPSExO3RyeXtpZihpPShyPXIuY2FsbChlKSkubmV4dCwwPT09dCl7aWYoT2JqZWN0KHIpIT09cilyZXR1cm47dT0hMX1lbHNlIGZvcig7ISh1PShuPWkuY2FsbChyKSkuZG9uZSkmJihzLnB1c2gobi52YWx1ZSkscy5sZW5ndGghPT10KTt1PSEwKTt9Y2F0Y2goZSl7Yz0hMCxvPWV9ZmluYWxseXt0cnl7aWYoIXUmJm51bGwhPXIucmV0dXJuJiYoYT1yLnJldHVybigpLE9iamVjdChhKSE9PWEpKXJldHVybn1maW5hbGx5e2lmKGMpdGhyb3cgb319cmV0dXJuIHN9fShlLHQpfHxFKGUsdCl8fFMoKX1mdW5jdGlvbiBiKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBPKGUpfShlKXx8dyhlKXx8RShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBnKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9ZnVuY3Rpb24gdyhlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oZSl9ZnVuY3Rpb24gRShlLHQpe2lmKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gTyhlLHQpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJmUuY29uc3RydWN0b3ImJihyPWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbShlKToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP08oZSx0KTp2b2lkIDB9fWZ1bmN0aW9uIE8oZSx0KXsobnVsbD09dHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheSh0KTtyPHQ7cisrKW5bcl09ZVtyXTtyZXR1cm4gbn1mdW5jdGlvbiBTKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX1mdW5jdGlvbiB4KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX1lLnByb3RvdHlwZVsiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciJdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSgibmV4dCIsZSl9LGUucHJvdG90eXBlLnRocm93PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UoInRocm93IixlKX0sZS5wcm90b3R5cGUucmV0dXJuPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnZva2UoInJldHVybiIsZSl9O3ZhciBSLFQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxqPU9iamVjdC5nZXRQcm90b3R5cGVPZixrPShSPU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oZSl7dmFyIHQ9VC5jYWxsKGUpO3JldHVybiBSW3RdfHwoUlt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSksQT1mdW5jdGlvbihlKXtyZXR1cm4gZT1lLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24odCl7cmV0dXJuIGsodCk9PT1lfX0sUD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCk9PT1lfX0sTD1BcnJheS5pc0FycmF5LE49UCgidW5kZWZpbmVkIik7dmFyIF89QSgiQXJyYXlCdWZmZXIiKTt2YXIgQz1QKCJzdHJpbmciKSxGPVAoImZ1bmN0aW9uIiksVT1QKCJudW1iZXIiKSxEPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIm9iamVjdCI9PT1mKGUpfSxCPWZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiIT09ayhlKSlyZXR1cm4hMTt2YXIgdD1qKGUpO3JldHVybiEobnVsbCE9PXQmJnQhPT1PYmplY3QucHJvdG90eXBlJiZudWxsIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpfHxTeW1ib2wudG9TdHJpbmdUYWcgaW4gZXx8U3ltYm9sLml0ZXJhdG9yIGluIGUpfSxJPUEoIkRhdGUiKSxxPUEoIkZpbGUiKSx6PUEoIkJsb2IiKSxNPUEoIkZpbGVMaXN0IiksSD1BKCJVUkxTZWFyY2hQYXJhbXMiKSxKPW0oWyJSZWFkYWJsZVN0cmVhbSIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIkhlYWRlcnMiXS5tYXAoQSksNCksVz1KWzBdLEc9SlsxXSxLPUpbMl0sVj1KWzNdO2Z1bmN0aW9uIFgoZSx0KXt2YXIgcixuLG89YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LGk9by5hbGxPd25LZXlzLGE9dm9pZCAwIT09aSYmaTtpZihudWxsIT1lKWlmKCJvYmplY3QiIT09ZihlKSYmKGU9W2VdKSxMKGUpKWZvcihyPTAsbj1lLmxlbmd0aDtyPG47cisrKXQuY2FsbChudWxsLGVbcl0scixlKTtlbHNle3ZhciBzLHU9YT9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKTpPYmplY3Qua2V5cyhlKSxjPXUubGVuZ3RoO2ZvcihyPTA7cjxjO3IrKylzPXVbcl0sdC5jYWxsKG51bGwsZVtzXSxzLGUpfX1mdW5jdGlvbiAkKGUsdCl7dD10LnRvTG93ZXJDYXNlKCk7Zm9yKHZhciByLG49T2JqZWN0LmtleXMoZSksbz1uLmxlbmd0aDtvLS0gPjA7KWlmKHQ9PT0ocj1uW29dKS50b0xvd2VyQ2FzZSgpKXJldHVybiByO3JldHVybiBudWxsfXZhciBZPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpnbG9iYWwsUT1mdW5jdGlvbihlKXtyZXR1cm4hTihlKSYmZSE9PVl9O3ZhciBaLGVlPShaPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheSYmaihVaW50OEFycmF5KSxmdW5jdGlvbihlKXtyZXR1cm4gWiYmZSBpbnN0YW5jZW9mIFp9KSx0ZT1BKCJIVE1MRm9ybUVsZW1lbnQiKSxyZT1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiB0LmNhbGwoZSxyKX19KCksbmU9QSgiUmVnRXhwIiksb2U9ZnVuY3Rpb24oZSx0KXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSxuPXt9O1gociwoZnVuY3Rpb24ocixvKXt2YXIgaTshMSE9PShpPXQocixvLGUpKSYmKG5bb109aXx8cil9KSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxuKX0saWU9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IixhZT0iMDEyMzQ1Njc4OSIsc2U9e0RJR0lUOmFlLEFMUEhBOmllLEFMUEhBX0RJR0lUOmllK2llLnRvVXBwZXJDYXNlKCkrYWV9O3ZhciB1ZT1BKCJBc3luY0Z1bmN0aW9uIiksY2U9e2lzQXJyYXk6TCxpc0FycmF5QnVmZmVyOl8saXNCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lJiYhTihlKSYmbnVsbCE9PWUuY29uc3RydWN0b3ImJiFOKGUuY29uc3RydWN0b3IpJiZGKGUuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfSxpc0Zvcm1EYXRhOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBlJiYoImZ1bmN0aW9uIj09dHlwZW9mIEZvcm1EYXRhJiZlIGluc3RhbmNlb2YgRm9ybURhdGF8fEYoZS5hcHBlbmQpJiYoImZvcm1kYXRhIj09PSh0PWsoZSkpfHwib2JqZWN0Ij09PXQmJkYoZS50b1N0cmluZykmJiJbb2JqZWN0IEZvcm1EYXRhXSI9PT1lLnRvU3RyaW5nKCkpKX0saXNBcnJheUJ1ZmZlclZpZXc6ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhlKTplJiZlLmJ1ZmZlciYmXyhlLmJ1ZmZlcil9LGlzU3RyaW5nOkMsaXNOdW1iZXI6VSxpc0Jvb2xlYW46ZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lfHwhMT09PWV9LGlzT2JqZWN0OkQsaXNQbGFpbk9iamVjdDpCLGlzUmVhZGFibGVTdHJlYW06Vyxpc1JlcXVlc3Q6Ryxpc1Jlc3BvbnNlOkssaXNIZWFkZXJzOlYsaXNVbmRlZmluZWQ6Tixpc0RhdGU6SSxpc0ZpbGU6cSxpc0Jsb2I6eixpc1JlZ0V4cDpuZSxpc0Z1bmN0aW9uOkYsaXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIEQoZSkmJkYoZS5waXBlKX0saXNVUkxTZWFyY2hQYXJhbXM6SCxpc1R5cGVkQXJyYXk6ZWUsaXNGaWxlTGlzdDpNLGZvckVhY2g6WCxtZXJnZTpmdW5jdGlvbiBlKCl7Zm9yKHZhciB0PVEodGhpcykmJnRoaXN8fHt9LHI9dC5jYXNlbGVzcyxuPXt9LG89ZnVuY3Rpb24odCxvKXt2YXIgaT1yJiYkKG4sbyl8fG87QihuW2ldKSYmQih0KT9uW2ldPWUobltpXSx0KTpCKHQpP25baV09ZSh7fSx0KTpMKHQpP25baV09dC5zbGljZSgpOm5baV09dH0saT0wLGE9YXJndW1lbnRzLmxlbmd0aDtpPGE7aSsrKWFyZ3VtZW50c1tpXSYmWChhcmd1bWVudHNbaV0sbyk7cmV0dXJuIG59LGV4dGVuZDpmdW5jdGlvbihlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9LG89bi5hbGxPd25LZXlzO3JldHVybiBYKHQsKGZ1bmN0aW9uKHQsbil7ciYmRih0KT9lW25dPXgodCxyKTplW25dPXR9KSx7YWxsT3duS2V5czpvfSksZX0sdHJpbTpmdW5jdGlvbihlKXtyZXR1cm4gZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpfSxzdHJpcEJPTTpmdW5jdGlvbihlKXtyZXR1cm4gNjUyNzk9PT1lLmNoYXJDb2RlQXQoMCkmJihlPWUuc2xpY2UoMSkpLGV9LGluaGVyaXRzOmZ1bmN0aW9uKGUsdCxyLG4pe2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUsbiksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic3VwZXIiLHt2YWx1ZTp0LnByb3RvdHlwZX0pLHImJk9iamVjdC5hc3NpZ24oZS5wcm90b3R5cGUscil9LHRvRmxhdE9iamVjdDpmdW5jdGlvbihlLHQscixuKXt2YXIgbyxpLGEscz17fTtpZih0PXR8fHt9LG51bGw9PWUpcmV0dXJuIHQ7ZG97Zm9yKGk9KG89T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkpLmxlbmd0aDtpLS0gPjA7KWE9b1tpXSxuJiYhbihhLGUsdCl8fHNbYV18fCh0W2FdPWVbYV0sc1thXT0hMCk7ZT0hMSE9PXImJmooZSl9d2hpbGUoZSYmKCFyfHxyKGUsdCkpJiZlIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIHR9LGtpbmRPZjprLGtpbmRPZlRlc3Q6QSxlbmRzV2l0aDpmdW5jdGlvbihlLHQscil7ZT1TdHJpbmcoZSksKHZvaWQgMD09PXJ8fHI+ZS5sZW5ndGgpJiYocj1lLmxlbmd0aCksci09dC5sZW5ndGg7dmFyIG49ZS5pbmRleE9mKHQscik7cmV0dXJuLTEhPT1uJiZuPT09cn0sdG9BcnJheTpmdW5jdGlvbihlKXtpZighZSlyZXR1cm4gbnVsbDtpZihMKGUpKXJldHVybiBlO3ZhciB0PWUubGVuZ3RoO2lmKCFVKHQpKXJldHVybiBudWxsO2Zvcih2YXIgcj1uZXcgQXJyYXkodCk7dC0tID4wOylyW3RdPWVbdF07cmV0dXJuIHJ9LGZvckVhY2hFbnRyeTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuPShlJiZlW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoZSk7KHI9bi5uZXh0KCkpJiYhci5kb25lOyl7dmFyIG89ci52YWx1ZTt0LmNhbGwoZSxvWzBdLG9bMV0pfX0sbWF0Y2hBbGw6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbj1bXTtudWxsIT09KHI9ZS5leGVjKHQpKTspbi5wdXNoKHIpO3JldHVybiBufSxpc0hUTUxGb3JtOnRlLGhhc093blByb3BlcnR5OnJlLGhhc093blByb3A6cmUscmVkdWNlRGVzY3JpcHRvcnM6b2UsZnJlZXplTWV0aG9kczpmdW5jdGlvbihlKXtvZShlLChmdW5jdGlvbih0LHIpe2lmKEYoZSkmJi0xIT09WyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHIpKXJldHVybiExO3ZhciBuPWVbcl07RihuKSYmKHQuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gdD90LndyaXRhYmxlPSExOnQuc2V0fHwodC5zZXQ9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrcisiJyIpfSkpfSkpfSx0b09iamVjdFNldDpmdW5jdGlvbihlLHQpe3ZhciByPXt9LG49ZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKChmdW5jdGlvbihlKXtyW2VdPSEwfSkpfTtyZXR1cm4gTChlKT9uKGUpOm4oU3RyaW5nKGUpLnNwbGl0KHQpKSxyfSx0b0NhbWVsQ2FzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csKGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpK3J9KSl9LG5vb3A6ZnVuY3Rpb24oKXt9LHRvRmluaXRlTnVtYmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGwhPWUmJk51bWJlci5pc0Zpbml0ZShlPStlKT9lOnR9LGZpbmRLZXk6JCxnbG9iYWw6WSxpc0NvbnRleHREZWZpbmVkOlEsQUxQSEFCRVQ6c2UsZ2VuZXJhdGVTdHJpbmc6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjE2LHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnNlLkFMUEhBX0RJR0lULHI9IiIsbj10Lmxlbmd0aDtlLS07KXIrPXRbTWF0aC5yYW5kb20oKSpufDBdO3JldHVybiByfSxpc1NwZWNDb21wbGlhbnRGb3JtOmZ1bmN0aW9uKGUpe3JldHVybiEhKGUmJkYoZS5hcHBlbmQpJiYiRm9ybURhdGEiPT09ZVtTeW1ib2wudG9TdHJpbmdUYWddJiZlW1N5bWJvbC5pdGVyYXRvcl0pfSx0b0pTT05PYmplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEFycmF5KDEwKTtyZXR1cm4gZnVuY3Rpb24gZShyLG4pe2lmKEQocikpe2lmKHQuaW5kZXhPZihyKT49MClyZXR1cm47aWYoISgidG9KU09OImluIHIpKXt0W25dPXI7dmFyIG89TChyKT9bXTp7fTtyZXR1cm4gWChyLChmdW5jdGlvbih0LHIpe3ZhciBpPWUodCxuKzEpOyFOKGkpJiYob1tyXT1pKX0pKSx0W25dPXZvaWQgMCxvfX1yZXR1cm4gcn0oZSwwKX0saXNBc3luY0ZuOnVlLGlzVGhlbmFibGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJihEKGUpfHxGKGUpKSYmRihlLnRoZW4pJiZGKGUuY2F0Y2gpfX07ZnVuY3Rpb24gZmUoZSx0LHIsbixvKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz0obmV3IEVycm9yKS5zdGFjayx0aGlzLm1lc3NhZ2U9ZSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLHQmJih0aGlzLmNvZGU9dCksciYmKHRoaXMuY29uZmlnPXIpLG4mJih0aGlzLnJlcXVlc3Q9biksbyYmKHRoaXMucmVzcG9uc2U9byl9Y2UuaW5oZXJpdHMoZmUsRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpjZS50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgbGU9ZmUucHJvdG90eXBlLGhlPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2hlW2VdPXt2YWx1ZTplfX0pKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhmZSxoZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGxlLCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pLGZlLmZyb209ZnVuY3Rpb24oZSx0LHIsbixvLGkpe3ZhciBhPU9iamVjdC5jcmVhdGUobGUpO3JldHVybiBjZS50b0ZsYXRPYmplY3QoZSxhLChmdW5jdGlvbihlKXtyZXR1cm4gZSE9PUVycm9yLnByb3RvdHlwZX0pLChmdW5jdGlvbihlKXtyZXR1cm4iaXNBeGlvc0Vycm9yIiE9PWV9KSksZmUuY2FsbChhLGUubWVzc2FnZSx0LHIsbixvKSxhLmNhdXNlPWUsYS5uYW1lPWUubmFtZSxpJiZPYmplY3QuYXNzaWduKGEsaSksYX07ZnVuY3Rpb24gcGUoZSl7cmV0dXJuIGNlLmlzUGxhaW5PYmplY3QoZSl8fGNlLmlzQXJyYXkoZSl9ZnVuY3Rpb24gZGUoZSl7cmV0dXJuIGNlLmVuZHNXaXRoKGUsIltdIik/ZS5zbGljZSgwLC0yKTplfWZ1bmN0aW9uIHllKGUsdCxyKXtyZXR1cm4gZT9lLmNvbmNhdCh0KS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9ZGUoZSksIXImJnQ/IlsiK2UrIl0iOmV9KSkuam9pbihyPyIuIjoiIik6dH12YXIgdmU9Y2UudG9GbGF0T2JqZWN0KGNlLHt9LG51bGwsKGZ1bmN0aW9uKGUpe3JldHVybi9eaXNbQS1aXS8udGVzdChlKX0pKTtmdW5jdGlvbiBtZShlLHQscil7aWYoIWNlLmlzT2JqZWN0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9dHx8bmV3IEZvcm1EYXRhO3ZhciBuPShyPWNlLnRvRmxhdE9iamVjdChyLHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIWNlLmlzVW5kZWZpbmVkKHRbZV0pfSkpKS5tZXRhVG9rZW5zLG89ci52aXNpdG9yfHxjLGk9ci5kb3RzLGE9ci5pbmRleGVzLHM9KHIuQmxvYnx8InVuZGVmaW5lZCIhPXR5cGVvZiBCbG9iJiZCbG9iKSYmY2UuaXNTcGVjQ29tcGxpYW50Rm9ybSh0KTtpZighY2UuaXNGdW5jdGlvbihvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIHUoZSl7aWYobnVsbD09PWUpcmV0dXJuIiI7aWYoY2UuaXNEYXRlKGUpKXJldHVybiBlLnRvSVNPU3RyaW5nKCk7aWYoIXMmJmNlLmlzQmxvYihlKSl0aHJvdyBuZXcgZmUoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIGNlLmlzQXJyYXlCdWZmZXIoZSl8fGNlLmlzVHlwZWRBcnJheShlKT9zJiYiZnVuY3Rpb24iPT10eXBlb2YgQmxvYj9uZXcgQmxvYihbZV0pOkJ1ZmZlci5mcm9tKGUpOmV9ZnVuY3Rpb24gYyhlLHIsbyl7dmFyIHM9ZTtpZihlJiYhbyYmIm9iamVjdCI9PT1mKGUpKWlmKGNlLmVuZHNXaXRoKHIsInt9Iikpcj1uP3I6ci5zbGljZSgwLC0yKSxlPUpTT04uc3RyaW5naWZ5KGUpO2Vsc2UgaWYoY2UuaXNBcnJheShlKSYmZnVuY3Rpb24oZSl7cmV0dXJuIGNlLmlzQXJyYXkoZSkmJiFlLnNvbWUocGUpfShlKXx8KGNlLmlzRmlsZUxpc3QoZSl8fGNlLmVuZHNXaXRoKHIsIltdIikpJiYocz1jZS50b0FycmF5KGUpKSlyZXR1cm4gcj1kZShyKSxzLmZvckVhY2goKGZ1bmN0aW9uKGUsbil7IWNlLmlzVW5kZWZpbmVkKGUpJiZudWxsIT09ZSYmdC5hcHBlbmQoITA9PT1hP3llKFtyXSxuLGkpOm51bGw9PT1hP3I6cisiW10iLHUoZSkpfSkpLCExO3JldHVybiEhcGUoZSl8fCh0LmFwcGVuZCh5ZShvLHIsaSksdShlKSksITEpfXZhciBsPVtdLGg9T2JqZWN0LmFzc2lnbih2ZSx7ZGVmYXVsdFZpc2l0b3I6Yyxjb252ZXJ0VmFsdWU6dSxpc1Zpc2l0YWJsZTpwZX0pO2lmKCFjZS5pc09iamVjdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIGZ1bmN0aW9uIGUocixuKXtpZighY2UuaXNVbmRlZmluZWQocikpe2lmKC0xIT09bC5pbmRleE9mKHIpKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIituLmpvaW4oIi4iKSk7bC5wdXNoKHIpLGNlLmZvckVhY2gociwoZnVuY3Rpb24ocixpKXshMD09PSghKGNlLmlzVW5kZWZpbmVkKHIpfHxudWxsPT09cikmJm8uY2FsbCh0LHIsY2UuaXNTdHJpbmcoaSk/aS50cmltKCk6aSxuLGgpKSYmZShyLG4/bi5jb25jYXQoaSk6W2ldKX0pKSxsLnBvcCgpfX0oZSksdH1mdW5jdGlvbiBiZShlKXt2YXIgdD17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyIsIiUwMCI6IlwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZywoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSl9ZnVuY3Rpb24gZ2UoZSx0KXt0aGlzLl9wYWlycz1bXSxlJiZtZShlLHRoaXMsdCl9dmFyIHdlPWdlLnByb3RvdHlwZTtmdW5jdGlvbiBFZShlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX1mdW5jdGlvbiBPZShlLHQscil7aWYoIXQpcmV0dXJuIGU7dmFyIG4sbz1yJiZyLmVuY29kZXx8RWUsaT1yJiZyLnNlcmlhbGl6ZTtpZihuPWk/aSh0LHIpOmNlLmlzVVJMU2VhcmNoUGFyYW1zKHQpP3QudG9TdHJpbmcoKTpuZXcgZ2UodCxyKS50b1N0cmluZyhvKSl7dmFyIGE9ZS5pbmRleE9mKCIjIik7LTEhPT1hJiYoZT1lLnNsaWNlKDAsYSkpLGUrPSgtMT09PWUuaW5kZXhPZigiPyIpPyI/IjoiJiIpK259cmV0dXJuIGV9d2UuYXBwZW5kPWZ1bmN0aW9uKGUsdCl7dGhpcy5fcGFpcnMucHVzaChbZSx0XSl9LHdlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWU/ZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsbCh0aGlzLHQsYmUpfTpiZTtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdChlWzBdKSsiPSIrdChlWzFdKX0pLCIiKS5qb2luKCImIil9O3ZhciBTZSx4ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtwKHRoaXMsZSksdGhpcy5oYW5kbGVycz1bXX1yZXR1cm4geShlLFt7a2V5OiJ1c2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6ZSxyZWplY3RlZDp0LHN5bmNocm9ub3VzOiEhciYmci5zeW5jaHJvbm91cyxydW5XaGVuOnI/ci5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfX0se2tleToiZWplY3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuaGFuZGxlcnNbZV0mJih0aGlzLmhhbmRsZXJzW2VdPW51bGwpfX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfX0se2tleToiZm9yRWFjaCIsdmFsdWU6ZnVuY3Rpb24oZSl7Y2UuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLChmdW5jdGlvbih0KXtudWxsIT09dCYmZSh0KX0pKX19XSksZX0oKSxSZT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX0sVGU9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6InVuZGVmaW5lZCIhPXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM/VVJMU2VhcmNoUGFyYW1zOmdlLEZvcm1EYXRhOiJ1bmRlZmluZWQiIT10eXBlb2YgRm9ybURhdGE/Rm9ybURhdGE6bnVsbCxCbG9iOiJ1bmRlZmluZWQiIT10eXBlb2YgQmxvYj9CbG9iOm51bGx9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfSxqZT0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCxrZT0oU2U9InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci5wcm9kdWN0LGplJiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKFNlKTwwKSxBZT0idW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMsUGU9amUmJndpbmRvdy5sb2NhdGlvbi5ocmVmfHwiaHR0cDovL2xvY2FsaG9zdCIsTGU9cyhzKHt9LE9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGhhc0Jyb3dzZXJFbnY6amUsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OkFlLGhhc1N0YW5kYXJkQnJvd3NlckVudjprZSxvcmlnaW46UGV9KSksVGUpO2Z1bmN0aW9uIE5lKGUpe2Z1bmN0aW9uIHQoZSxyLG4sbyl7dmFyIGk9ZVtvKytdO2lmKCJfX3Byb3RvX18iPT09aSlyZXR1cm4hMDt2YXIgYT1OdW1iZXIuaXNGaW5pdGUoK2kpLHM9bz49ZS5sZW5ndGg7cmV0dXJuIGk9IWkmJmNlLmlzQXJyYXkobik/bi5sZW5ndGg6aSxzPyhjZS5oYXNPd25Qcm9wKG4saSk/bltpXT1bbltpXSxyXTpuW2ldPXIsIWEpOihuW2ldJiZjZS5pc09iamVjdChuW2ldKXx8KG5baV09W10pLHQoZSxyLG5baV0sbykmJmNlLmlzQXJyYXkobltpXSkmJihuW2ldPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbj17fSxvPU9iamVjdC5rZXlzKGUpLGk9by5sZW5ndGg7Zm9yKHQ9MDt0PGk7dCsrKW5bcj1vW3RdXT1lW3JdO3JldHVybiBufShuW2ldKSksIWEpfWlmKGNlLmlzRm9ybURhdGEoZSkmJmNlLmlzRnVuY3Rpb24oZS5lbnRyaWVzKSl7dmFyIHI9e307cmV0dXJuIGNlLmZvckVhY2hFbnRyeShlLChmdW5jdGlvbihlLG4pe3QoZnVuY3Rpb24oZSl7cmV0dXJuIGNlLm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZyxlKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiJbXSI9PT1lWzBdPyIiOmVbMV18fGVbMF19KSl9KGUpLG4sciwwKX0pKSxyfXJldHVybiBudWxsfXZhciBfZT17dHJhbnNpdGlvbmFsOlJlLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIiwiZmV0Y2giXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe3ZhciByLG49dC5nZXRDb250ZW50VHlwZSgpfHwiIixvPW4uaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLGk9Y2UuaXNPYmplY3QoZSk7aWYoaSYmY2UuaXNIVE1MRm9ybShlKSYmKGU9bmV3IEZvcm1EYXRhKGUpKSxjZS5pc0Zvcm1EYXRhKGUpKXJldHVybiBvP0pTT04uc3RyaW5naWZ5KE5lKGUpKTplO2lmKGNlLmlzQXJyYXlCdWZmZXIoZSl8fGNlLmlzQnVmZmVyKGUpfHxjZS5pc1N0cmVhbShlKXx8Y2UuaXNGaWxlKGUpfHxjZS5pc0Jsb2IoZSl8fGNlLmlzUmVhZGFibGVTdHJlYW0oZSkpcmV0dXJuIGU7aWYoY2UuaXNBcnJheUJ1ZmZlclZpZXcoZSkpcmV0dXJuIGUuYnVmZmVyO2lmKGNlLmlzVVJMU2VhcmNoUGFyYW1zKGUpKXJldHVybiB0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLGUudG9TdHJpbmcoKTtpZihpKXtpZihuLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBtZShlLG5ldyBMZS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBMZS5pc05vZGUmJmNlLmlzQnVmZmVyKGUpPyh0aGlzLmFwcGVuZCh0LGUudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6bi5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx0KSl9KGUsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigocj1jZS5pc0ZpbGVMaXN0KGUpKXx8bi5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe3ZhciBhPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gbWUocj97ImZpbGVzW10iOmV9OmUsYSYmbmV3IGEsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiBpfHxvPyh0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSksZnVuY3Rpb24oZSx0LHIpe2lmKGNlLmlzU3RyaW5nKGUpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoZSksY2UudHJpbShlKX1jYXRjaChlKXtpZigiU3ludGF4RXJyb3IiIT09ZS5uYW1lKXRocm93IGV9cmV0dXJuKHJ8fEpTT04uc3RyaW5naWZ5KShlKX0oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50cmFuc2l0aW9uYWx8fF9lLnRyYW5zaXRpb25hbCxyPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsbj0ianNvbiI9PT10aGlzLnJlc3BvbnNlVHlwZTtpZihjZS5pc1Jlc3BvbnNlKGUpfHxjZS5pc1JlYWRhYmxlU3RyZWFtKGUpKXJldHVybiBlO2lmKGUmJmNlLmlzU3RyaW5nKGUpJiYociYmIXRoaXMucmVzcG9uc2VUeXBlfHxuKSl7dmFyIG89ISh0JiZ0LnNpbGVudEpTT05QYXJzaW5nKSYmbjt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2goZSl7aWYobyl7aWYoIlN5bnRheEVycm9yIj09PWUubmFtZSl0aHJvdyBmZS5mcm9tKGUsZmUuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk7dGhyb3cgZX19fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTpMZS5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6TGUuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O2NlLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe19lLmhlYWRlcnNbZV09e319KSk7dmFyIENlPV9lLEZlPWNlLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLFVlPVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24gRGUoZSl7cmV0dXJuIGUmJlN0cmluZyhlKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBCZShlKXtyZXR1cm4hMT09PWV8fG51bGw9PWU/ZTpjZS5pc0FycmF5KGUpP2UubWFwKEJlKTpTdHJpbmcoZSl9ZnVuY3Rpb24gSWUoZSx0LHIsbixvKXtyZXR1cm4gY2UuaXNGdW5jdGlvbihuKT9uLmNhbGwodGhpcyx0LHIpOihvJiYodD1yKSxjZS5pc1N0cmluZyh0KT9jZS5pc1N0cmluZyhuKT8tMSE9PXQuaW5kZXhPZihuKTpjZS5pc1JlZ0V4cChuKT9uLnRlc3QodCk6dm9pZCAwOnZvaWQgMCl9dmFyIHFlPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcihlKXtwKHRoaXMsciksZSYmdGhpcy5zZXQoZSl9cmV0dXJuIHkocixbe2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcztmdW5jdGlvbiBvKGUsdCxyKXt2YXIgbz1EZSh0KTtpZighbyl0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7dmFyIGk9Y2UuZmluZEtleShuLG8pOyghaXx8dm9pZCAwPT09bltpXXx8ITA9PT1yfHx2b2lkIDA9PT1yJiYhMSE9PW5baV0pJiYobltpfHx0XT1CZShlKSl9dmFyIGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY2UuZm9yRWFjaChlLChmdW5jdGlvbihlLHIpe3JldHVybiBvKGUscix0KX0pKX07aWYoY2UuaXNQbGFpbk9iamVjdChlKXx8ZSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpaShlLHQpO2Vsc2UgaWYoY2UuaXNTdHJpbmcoZSkmJihlPWUudHJpbSgpKSYmIS9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3QoZS50cmltKCkpKWkoZnVuY3Rpb24oZSl7dmFyIHQscixuLG89e307cmV0dXJuIGUmJmUuc3BsaXQoIlxuIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7bj1lLmluZGV4T2YoIjoiKSx0PWUuc3Vic3RyaW5nKDAsbikudHJpbSgpLnRvTG93ZXJDYXNlKCkscj1lLnN1YnN0cmluZyhuKzEpLnRyaW0oKSwhdHx8b1t0XSYmRmVbdF18fCgic2V0LWNvb2tpZSI9PT10P29bdF0/b1t0XS5wdXNoKHIpOm9bdF09W3JdOm9bdF09b1t0XT9vW3RdKyIsICIrcjpyKX0pKSxvfShlKSx0KTtlbHNlIGlmKGNlLmlzSGVhZGVycyhlKSl7dmFyIGEscz1mdW5jdGlvbihlLHQpe3ZhciByPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbIkBAaXRlcmF0b3IiXTtpZighcil7aWYoQXJyYXkuaXNBcnJheShlKXx8KHI9RShlKSl8fHQmJmUmJiJudW1iZXIiPT10eXBlb2YgZS5sZW5ndGgpe3ImJihlPXIpO3ZhciBuPTAsbz1mdW5jdGlvbigpe307cmV0dXJue3M6byxuOmZ1bmN0aW9uKCl7cmV0dXJuIG4+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW24rK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6b319dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBpLGE9ITAscz0hMTtyZXR1cm57czpmdW5jdGlvbigpe3I9ci5jYWxsKGUpfSxuOmZ1bmN0aW9uKCl7dmFyIGU9ci5uZXh0KCk7cmV0dXJuIGE9ZS5kb25lLGV9LGU6ZnVuY3Rpb24oZSl7cz0hMCxpPWV9LGY6ZnVuY3Rpb24oKXt0cnl7YXx8bnVsbD09ci5yZXR1cm58fHIucmV0dXJuKCl9ZmluYWxseXtpZihzKXRocm93IGl9fX19KGUuZW50cmllcygpKTt0cnl7Zm9yKHMucygpOyEoYT1zLm4oKSkuZG9uZTspe3ZhciB1PW0oYS52YWx1ZSwyKSxjPXVbMF07byh1WzFdLGMscil9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfX1lbHNlIG51bGwhPWUmJm8odCxlLHIpO3JldHVybiB0aGlzfX0se2tleToiZ2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKGU9RGUoZSkpe3ZhciByPWNlLmZpbmRLZXkodGhpcyxlKTtpZihyKXt2YXIgbj10aGlzW3JdO2lmKCF0KXJldHVybiBuO2lmKCEwPT09dClyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPS8oW15ccyw7PV0rKVxzKig/Oj1ccyooW14sO10rKSk/L2c7dD1uLmV4ZWMoZSk7KXJbdFsxXV09dFsyXTtyZXR1cm4gcn0obik7aWYoY2UuaXNGdW5jdGlvbih0KSlyZXR1cm4gdC5jYWxsKHRoaXMsbixyKTtpZihjZS5pc1JlZ0V4cCh0KSlyZXR1cm4gdC5leGVjKG4pO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX19LHtrZXk6ImhhcyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZihlPURlKGUpKXt2YXIgcj1jZS5maW5kS2V5KHRoaXMsZSk7cmV0dXJuISghcnx8dm9pZCAwPT09dGhpc1tyXXx8dCYmIUllKDAsdGhpc1tyXSxyLHQpKX1yZXR1cm4hMX19LHtrZXk6ImRlbGV0ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLG49ITE7ZnVuY3Rpb24gbyhlKXtpZihlPURlKGUpKXt2YXIgbz1jZS5maW5kS2V5KHIsZSk7IW98fHQmJiFJZSgwLHJbb10sbyx0KXx8KGRlbGV0ZSByW29dLG49ITApfX1yZXR1cm4gY2UuaXNBcnJheShlKT9lLmZvckVhY2gobyk6byhlKSxufX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1PYmplY3Qua2V5cyh0aGlzKSxyPXQubGVuZ3RoLG49ITE7ci0tOyl7dmFyIG89dFtyXTtlJiYhSWUoMCx0aGlzW29dLG8sZSwhMCl8fChkZWxldGUgdGhpc1tvXSxuPSEwKX1yZXR1cm4gbn19LHtrZXk6Im5vcm1hbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXt9O3JldHVybiBjZS5mb3JFYWNoKHRoaXMsKGZ1bmN0aW9uKG4sbyl7dmFyIGk9Y2UuZmluZEtleShyLG8pO2lmKGkpcmV0dXJuIHRbaV09QmUobiksdm9pZCBkZWxldGUgdFtvXTt2YXIgYT1lP2Z1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpK3J9KSl9KG8pOlN0cmluZyhvKS50cmltKCk7YSE9PW8mJmRlbGV0ZSB0W29dLHRbYV09QmUobiksclthXT0hMH0pKSx0aGlzfX0se2tleToiY29uY2F0Iix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkodCksbj0wO248dDtuKyspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuKGU9dGhpcy5jb25zdHJ1Y3RvcikuY29uY2F0LmFwcGx5KGUsW3RoaXNdLmNvbmNhdChyKSl9fSx7a2V5OiJ0b0pTT04iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGNlLmZvckVhY2godGhpcywoZnVuY3Rpb24ocixuKXtudWxsIT1yJiYhMSE9PXImJih0W25dPWUmJmNlLmlzQXJyYXkocik/ci5qb2luKCIsICIpOnIpfSkpLHR9fSx7a2V5OlN5bWJvbC5pdGVyYXRvcix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9fSx7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChmdW5jdGlvbihlKXt2YXIgdD1tKGUsMik7cmV0dXJuIHRbMF0rIjogIit0WzFdfSkpLmpvaW4oIlxuIil9fSx7a2V5OlN5bWJvbC50b1N0cmluZ1RhZyxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn19XSxbe2tleToiZnJvbSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0aGlzP2U6bmV3IHRoaXMoZSl9fSx7a2V5OiJjb25jYXQiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgdGhpcyhlKSxyPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkocj4xP3ItMTowKSxvPTE7bzxyO28rKyluW28tMV09YXJndW1lbnRzW29dO3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB0LnNldChlKX0pKSx0fX0se2tleToiYWNjZXNzb3IiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PSh0aGlzW1VlXT10aGlzW1VlXT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLHI9dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gbihlKXt2YXIgbj1EZShlKTt0W25dfHwoIWZ1bmN0aW9uKGUsdCl7dmFyIHI9Y2UudG9DYW1lbENhc2UoIiAiK3QpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaCgoZnVuY3Rpb24obil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbityLHt2YWx1ZTpmdW5jdGlvbihlLHIsbyl7cmV0dXJuIHRoaXNbbl0uY2FsbCh0aGlzLHQsZSxyLG8pfSxjb25maWd1cmFibGU6ITB9KX0pKX0ocixlKSx0W25dPSEwKX1yZXR1cm4gY2UuaXNBcnJheShlKT9lLmZvckVhY2gobik6bihlKSx0aGlzfX1dKSxyfSgpO3FlLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKSxjZS5yZWR1Y2VEZXNjcmlwdG9ycyhxZS5wcm90b3R5cGUsKGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS52YWx1ZSxuPXRbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO3JldHVybntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXNbbl09ZX19fSkpLGNlLmZyZWV6ZU1ldGhvZHMocWUpO3ZhciB6ZT1xZTtmdW5jdGlvbiBNZShlLHQpe3ZhciByPXRoaXN8fENlLG49dHx8cixvPXplLmZyb20obi5oZWFkZXJzKSxpPW4uZGF0YTtyZXR1cm4gY2UuZm9yRWFjaChlLChmdW5jdGlvbihlKXtpPWUuY2FsbChyLGksby5ub3JtYWxpemUoKSx0P3Quc3RhdHVzOnZvaWQgMCl9KSksby5ub3JtYWxpemUoKSxpfWZ1bmN0aW9uIEhlKGUpe3JldHVybiEoIWV8fCFlLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIEplKGUsdCxyKXtmZS5jYWxsKHRoaXMsbnVsbD09ZT8iY2FuY2VsZWQiOmUsZmUuRVJSX0NBTkNFTEVELHQsciksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1mdW5jdGlvbiBXZShlLHQscil7dmFyIG49ci5jb25maWcudmFsaWRhdGVTdGF0dXM7ci5zdGF0dXMmJm4mJiFuKHIuc3RhdHVzKT90KG5ldyBmZSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3Iuc3RhdHVzLFtmZS5FUlJfQkFEX1JFUVVFU1QsZmUuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihyLnN0YXR1cy8xMDApLTRdLHIuY29uZmlnLHIucmVxdWVzdCxyKSk6ZShyKX1mdW5jdGlvbiBHZShlLHQpe2U9ZXx8MTA7dmFyIHIsbj1uZXcgQXJyYXkoZSksbz1uZXcgQXJyYXkoZSksaT0wLGE9MDtyZXR1cm4gdD12b2lkIDAhPT10P3Q6MWUzLGZ1bmN0aW9uKHMpe3ZhciB1PURhdGUubm93KCksYz1vW2FdO3J8fChyPXUpLG5baV09cyxvW2ldPXU7Zm9yKHZhciBmPWEsbD0wO2YhPT1pOylsKz1uW2YrK10sZiU9ZTtpZigoaT0oaSsxKSVlKT09PWEmJihhPShhKzEpJWUpLCEodS1yPHQpKXt2YXIgaD1jJiZ1LWM7cmV0dXJuIGg/TWF0aC5yb3VuZCgxZTMqbC9oKTp2b2lkIDB9fX1mdW5jdGlvbiBLZShlLHQpe3ZhciByPTAsbj0xZTMvdCxvPW51bGw7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLGk9ITA9PT10aGlzLGE9RGF0ZS5ub3coKTtpZihpfHxhLXI+bilyZXR1cm4gbyYmKGNsZWFyVGltZW91dChvKSxvPW51bGwpLHI9YSxlLmFwcGx5KG51bGwsYXJndW1lbnRzKTtvfHwobz1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBvPW51bGwscj1EYXRlLm5vdygpLGUuYXBwbHkobnVsbCx0KX0pLG4tKGEtcikpKX19Y2UuaW5oZXJpdHMoSmUsZmUse19fQ0FOQ0VMX186ITB9KTt2YXIgVmU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MyxuPTAsbz1HZSg1MCwyNTApO3JldHVybiBLZSgoZnVuY3Rpb24ocil7dmFyIGk9ci5sb2FkZWQsYT1yLmxlbmd0aENvbXB1dGFibGU/ci50b3RhbDp2b2lkIDAscz1pLW4sdT1vKHMpO249aTt2YXIgYz17bG9hZGVkOmksdG90YWw6YSxwcm9ncmVzczphP2kvYTp2b2lkIDAsYnl0ZXM6cyxyYXRlOnV8fHZvaWQgMCxlc3RpbWF0ZWQ6dSYmYSYmaTw9YT8oYS1pKS91OnZvaWQgMCxldmVudDpyLGxlbmd0aENvbXB1dGFibGU6bnVsbCE9YX07Y1t0PyJkb3dubG9hZCI6InVwbG9hZCJdPSEwLGUoYyl9KSxyKX0sWGU9TGUuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7dmFyIGUsdD0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2Z1bmN0aW9uIG4oZSl7dmFyIG49ZTtyZXR1cm4gdCYmKHIuc2V0QXR0cmlidXRlKCJocmVmIixuKSxuPXIuaHJlZiksci5zZXRBdHRyaWJ1dGUoImhyZWYiLG4pLHtocmVmOnIuaHJlZixwcm90b2NvbDpyLnByb3RvY29sP3IucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnIuaG9zdCxzZWFyY2g6ci5zZWFyY2g/ci5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDpyLmhhc2g/ci5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6ci5ob3N0bmFtZSxwb3J0OnIucG9ydCxwYXRobmFtZToiLyI9PT1yLnBhdGhuYW1lLmNoYXJBdCgwKT9yLnBhdGhuYW1lOiIvIityLnBhdGhuYW1lfX1yZXR1cm4gZT1uKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbih0KXt2YXIgcj1jZS5pc1N0cmluZyh0KT9uKHQpOnQ7cmV0dXJuIHIucHJvdG9jb2w9PT1lLnByb3RvY29sJiZyLmhvc3Q9PT1lLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuITB9LCRlPUxlLmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGU6ZnVuY3Rpb24oZSx0LHIsbixvLGkpe3ZhciBhPVtlKyI9IitlbmNvZGVVUklDb21wb25lbnQodCldO2NlLmlzTnVtYmVyKHIpJiZhLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShyKS50b0dNVFN0cmluZygpKSxjZS5pc1N0cmluZyhuKSYmYS5wdXNoKCJwYXRoPSIrbiksY2UuaXNTdHJpbmcobykmJmEucHVzaCgiZG9tYWluPSIrbyksITA9PT1pJiZhLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1hLmpvaW4oIjsgIil9LHJlYWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK2UrIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3RoaXMud3JpdGUoZSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZTpmdW5jdGlvbigpe30scmVhZDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxyZW1vdmU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBZZShlLHQpe3JldHVybiBlJiYhL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdCh0KT9mdW5jdGlvbihlLHQpe3JldHVybiB0P2UucmVwbGFjZSgvXC8/XC8kLywiIikrIi8iK3QucmVwbGFjZSgvXlwvKy8sIiIpOmV9KGUsdCk6dH12YXIgUWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB6ZT9zKHt9LGUpOmV9O2Z1bmN0aW9uIFplKGUsdCl7dD10fHx7fTt2YXIgcj17fTtmdW5jdGlvbiBuKGUsdCxyKXtyZXR1cm4gY2UuaXNQbGFpbk9iamVjdChlKSYmY2UuaXNQbGFpbk9iamVjdCh0KT9jZS5tZXJnZS5jYWxsKHtjYXNlbGVzczpyfSxlLHQpOmNlLmlzUGxhaW5PYmplY3QodCk/Y2UubWVyZ2Uoe30sdCk6Y2UuaXNBcnJheSh0KT90LnNsaWNlKCk6dH1mdW5jdGlvbiBvKGUsdCxyKXtyZXR1cm4gY2UuaXNVbmRlZmluZWQodCk/Y2UuaXNVbmRlZmluZWQoZSk/dm9pZCAwOm4odm9pZCAwLGUscik6bihlLHQscil9ZnVuY3Rpb24gaShlLHQpe2lmKCFjZS5pc1VuZGVmaW5lZCh0KSlyZXR1cm4gbih2b2lkIDAsdCl9ZnVuY3Rpb24gYShlLHQpe3JldHVybiBjZS5pc1VuZGVmaW5lZCh0KT9jZS5pc1VuZGVmaW5lZChlKT92b2lkIDA6bih2b2lkIDAsZSk6bih2b2lkIDAsdCl9ZnVuY3Rpb24gcyhyLG8saSl7cmV0dXJuIGkgaW4gdD9uKHIsbyk6aSBpbiBlP24odm9pZCAwLHIpOnZvaWQgMH12YXIgdT17dXJsOmksbWV0aG9kOmksZGF0YTppLGJhc2VVUkw6YSx0cmFuc2Zvcm1SZXF1ZXN0OmEsdHJhbnNmb3JtUmVzcG9uc2U6YSxwYXJhbXNTZXJpYWxpemVyOmEsdGltZW91dDphLHRpbWVvdXRNZXNzYWdlOmEsd2l0aENyZWRlbnRpYWxzOmEsd2l0aFhTUkZUb2tlbjphLGFkYXB0ZXI6YSxyZXNwb25zZVR5cGU6YSx4c3JmQ29va2llTmFtZTphLHhzcmZIZWFkZXJOYW1lOmEsb25VcGxvYWRQcm9ncmVzczphLG9uRG93bmxvYWRQcm9ncmVzczphLGRlY29tcHJlc3M6YSxtYXhDb250ZW50TGVuZ3RoOmEsbWF4Qm9keUxlbmd0aDphLGJlZm9yZVJlZGlyZWN0OmEsdHJhbnNwb3J0OmEsaHR0cEFnZW50OmEsaHR0cHNBZ2VudDphLGNhbmNlbFRva2VuOmEsc29ja2V0UGF0aDphLHJlc3BvbnNlRW5jb2Rpbmc6YSx2YWxpZGF0ZVN0YXR1czpzLGhlYWRlcnM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhRZShlKSxRZSh0KSwhMCl9fTtyZXR1cm4gY2UuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LGUsdCkpLChmdW5jdGlvbihuKXt2YXIgaT11W25dfHxvLGE9aShlW25dLHRbbl0sbik7Y2UuaXNVbmRlZmluZWQoYSkmJmkhPT1zfHwocltuXT1hKX0pKSxyfXZhciBldCx0dCxydCxudCxvdD1mdW5jdGlvbihlKXt2YXIgdCxyLG49WmUoe30sZSksbz1uLmRhdGEsaT1uLndpdGhYU1JGVG9rZW4sYT1uLnhzcmZIZWFkZXJOYW1lLHM9bi54c3JmQ29va2llTmFtZSx1PW4uaGVhZGVycyxjPW4uYXV0aDtpZihuLmhlYWRlcnM9dT16ZS5mcm9tKHUpLG4udXJsPU9lKFllKG4uYmFzZVVSTCxuLnVybCksZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKSxjJiZ1LnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYSgoYy51c2VybmFtZXx8IiIpKyI6IisoYy5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYy5wYXNzd29yZCkpOiIiKSkpLGNlLmlzRm9ybURhdGEobykpaWYoTGUuaGFzU3RhbmRhcmRCcm93c2VyRW52fHxMZS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpdS5zZXRDb250ZW50VHlwZSh2b2lkIDApO2Vsc2UgaWYoITEhPT0odD11LmdldENvbnRlbnRUeXBlKCkpKXt2YXIgZj10P3Quc3BsaXQoIjsiKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0oKX0pKS5maWx0ZXIoQm9vbGVhbik6W10sbD1nKHI9Zil8fHcocil8fEUocil8fFMoKSxoPWxbMF0scD1sLnNsaWNlKDEpO3Uuc2V0Q29udGVudFR5cGUoW2h8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIl0uY29uY2F0KGIocCkpLmpvaW4oIjsgIikpfWlmKExlLmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKGkmJmNlLmlzRnVuY3Rpb24oaSkmJihpPWkobikpLGl8fCExIT09aSYmWGUobi51cmwpKSl7dmFyIGQ9YSYmcyYmJGUucmVhZChzKTtkJiZ1LnNldChhLGQpfXJldHVybiBufSxpdD0idW5kZWZpbmVkIiE9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0JiZmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7dmFyIG4sbz1vdChlKSxpPW8uZGF0YSxhPXplLmZyb20oby5oZWFkZXJzKS5ub3JtYWxpemUoKSxzPW8ucmVzcG9uc2VUeXBlO2Z1bmN0aW9uIHUoKXtvLmNhbmNlbFRva2VuJiZvLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG4pLG8uc2lnbmFsJiZvLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsbil9dmFyIGM9bmV3IFhNTEh0dHBSZXF1ZXN0O2Z1bmN0aW9uIGYoKXtpZihjKXt2YXIgbj16ZS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYyYmYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk7V2UoKGZ1bmN0aW9uKGUpe3QoZSksdSgpfSksKGZ1bmN0aW9uKGUpe3IoZSksdSgpfSkse2RhdGE6cyYmInRleHQiIT09cyYmImpzb24iIT09cz9jLnJlc3BvbnNlOmMucmVzcG9uc2VUZXh0LHN0YXR1czpjLnN0YXR1cyxzdGF0dXNUZXh0OmMuc3RhdHVzVGV4dCxoZWFkZXJzOm4sY29uZmlnOmUscmVxdWVzdDpjfSksYz1udWxsfX1jLm9wZW4oby5tZXRob2QudG9VcHBlckNhc2UoKSxvLnVybCwhMCksYy50aW1lb3V0PW8udGltZW91dCwib25sb2FkZW5kImluIGM/Yy5vbmxvYWRlbmQ9ZjpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2MmJjQ9PT1jLnJlYWR5U3RhdGUmJigwIT09Yy5zdGF0dXN8fGMucmVzcG9uc2VVUkwmJjA9PT1jLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6IikpJiZzZXRUaW1lb3V0KGYpfSxjLm9uYWJvcnQ9ZnVuY3Rpb24oKXtjJiYocihuZXcgZmUoIlJlcXVlc3QgYWJvcnRlZCIsZmUuRUNPTk5BQk9SVEVELG8sYykpLGM9bnVsbCl9LGMub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IGZlKCJOZXR3b3JrIEVycm9yIixmZS5FUlJfTkVUV09SSyxvLGMpKSxjPW51bGx9LGMub250aW1lb3V0PWZ1bmN0aW9uKCl7dmFyIGU9by50aW1lb3V0PyJ0aW1lb3V0IG9mICIrby50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLHQ9by50cmFuc2l0aW9uYWx8fFJlO28udGltZW91dEVycm9yTWVzc2FnZSYmKGU9by50aW1lb3V0RXJyb3JNZXNzYWdlKSxyKG5ldyBmZShlLHQuY2xhcmlmeVRpbWVvdXRFcnJvcj9mZS5FVElNRURPVVQ6ZmUuRUNPTk5BQk9SVEVELG8sYykpLGM9bnVsbH0sdm9pZCAwPT09aSYmYS5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBjJiZjZS5mb3JFYWNoKGEudG9KU09OKCksKGZ1bmN0aW9uKGUsdCl7Yy5zZXRSZXF1ZXN0SGVhZGVyKHQsZSl9KSksY2UuaXNVbmRlZmluZWQoby53aXRoQ3JlZGVudGlhbHMpfHwoYy53aXRoQ3JlZGVudGlhbHM9ISFvLndpdGhDcmVkZW50aWFscykscyYmImpzb24iIT09cyYmKGMucmVzcG9uc2VUeXBlPW8ucmVzcG9uc2VUeXBlKSwiZnVuY3Rpb24iPT10eXBlb2Ygby5vbkRvd25sb2FkUHJvZ3Jlc3MmJmMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLFZlKG8ub25Eb3dubG9hZFByb2dyZXNzLCEwKSksImZ1bmN0aW9uIj09dHlwZW9mIG8ub25VcGxvYWRQcm9ncmVzcyYmYy51cGxvYWQmJmMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixWZShvLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoby5jYW5jZWxUb2tlbnx8by5zaWduYWwpJiYobj1mdW5jdGlvbih0KXtjJiYocighdHx8dC50eXBlP25ldyBKZShudWxsLGUsYyk6dCksYy5hYm9ydCgpLGM9bnVsbCl9LG8uY2FuY2VsVG9rZW4mJm8uY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG4pLG8uc2lnbmFsJiYoby5zaWduYWwuYWJvcnRlZD9uKCk6by5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG4pKSk7dmFyIGwsaCxwPShsPW8udXJsLChoPS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKGwpKSYmaFsxXXx8IiIpO3AmJi0xPT09TGUucHJvdG9jb2xzLmluZGV4T2YocCk/cihuZXcgZmUoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrcCsiOiIsZmUuRVJSX0JBRF9SRVFVRVNULGUpKTpjLnNlbmQoaXx8bnVsbCl9KSl9LGF0PWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1uZXcgQWJvcnRDb250cm9sbGVyLG89ZnVuY3Rpb24oZSl7aWYoIXIpe3I9ITAsYSgpO3ZhciB0PWUgaW5zdGFuY2VvZiBFcnJvcj9lOnRoaXMucmVhc29uO24uYWJvcnQodCBpbnN0YW5jZW9mIGZlP3Q6bmV3IEplKHQgaW5zdGFuY2VvZiBFcnJvcj90Lm1lc3NhZ2U6dCkpfX0saT10JiZzZXRUaW1lb3V0KChmdW5jdGlvbigpe28obmV3IGZlKCJ0aW1lb3V0ICIuY29uY2F0KHQsIiBvZiBtcyBleGNlZWRlZCIpLGZlLkVUSU1FRE9VVCkpfSksdCksYT1mdW5jdGlvbigpe2UmJihpJiZjbGVhclRpbWVvdXQoaSksaT1udWxsLGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj9lLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixvKTplLnVuc3Vic2NyaWJlKG8pKX0pKSxlPW51bGwpfTtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmFkZEV2ZW50TGlzdGVuZXImJmUuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG8pfSkpO3ZhciBzPW4uc2lnbmFsO3JldHVybiBzLnVuc3Vic2NyaWJlPWEsW3MsZnVuY3Rpb24oKXtpJiZjbGVhclRpbWVvdXQoaSksaT1udWxsfV19LHN0PXUoKS5tYXJrKChmdW5jdGlvbiBlKHQscil7dmFyIG4sbyxpO3JldHVybiB1KCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYobj10LmJ5dGVMZW5ndGgsciYmIShuPHIpKXtlLm5leHQ9NTticmVha31yZXR1cm4gZS5uZXh0PTQsdDtjYXNlIDQ6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDU6bz0wO2Nhc2UgNjppZighKG88bikpe2UubmV4dD0xMzticmVha31yZXR1cm4gaT1vK3IsZS5uZXh0PTEwLHQuc2xpY2UobyxpKTtjYXNlIDEwOm89aSxlLm5leHQ9NjticmVhaztjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSksdXQ9ZnVuY3Rpb24oKXt2YXIgdCxvPSh0PXUoKS5tYXJrKChmdW5jdGlvbiBlKHQsbyxhKXt2YXIgcyxjLGYsbCxoLHA7cmV0dXJuIHUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpzPSExLGM9ITEsZS5wcmV2PTIsbD1uKHQpO2Nhc2UgNDpyZXR1cm4gZS5uZXh0PTYsaShsLm5leHQoKSk7Y2FzZSA2OmlmKCEocz0hKGg9ZS5zZW50KS5kb25lKSl7ZS5uZXh0PTI3O2JyZWFrfWlmKHA9aC52YWx1ZSxlLnQwPXIsZS50MT1uLGUudDI9c3QsIUFycmF5QnVmZmVyLmlzVmlldyhwKSl7ZS5uZXh0PTE1O2JyZWFrfWUudDM9cCxlLm5leHQ9MTg7YnJlYWs7Y2FzZSAxNTpyZXR1cm4gZS5uZXh0PTE3LGkoYShTdHJpbmcocCkpKTtjYXNlIDE3OmUudDM9ZS5zZW50O2Nhc2UgMTg6cmV0dXJuIGUudDQ9ZS50MyxlLnQ1PW8sZS50Nj0oMCxlLnQyKShlLnQ0LGUudDUpLGUudDc9KDAsZS50MSkoZS50NiksZS50OD1pLGUuZGVsZWdhdGVZaWVsZCgoMCxlLnQwKShlLnQ3LGUudDgpLCJ0OSIsMjQpO2Nhc2UgMjQ6cz0hMSxlLm5leHQ9NDticmVhaztjYXNlIDI3OmUubmV4dD0zMzticmVhaztjYXNlIDI5OmUucHJldj0yOSxlLnQxMD1lLmNhdGNoKDIpLGM9ITAsZj1lLnQxMDtjYXNlIDMzOmlmKGUucHJldj0zMyxlLnByZXY9MzQsIXN8fG51bGw9PWwucmV0dXJuKXtlLm5leHQ9Mzg7YnJlYWt9cmV0dXJuIGUubmV4dD0zOCxpKGwucmV0dXJuKCkpO2Nhc2UgMzg6aWYoZS5wcmV2PTM4LCFjKXtlLm5leHQ9NDE7YnJlYWt9dGhyb3cgZjtjYXNlIDQxOnJldHVybiBlLmZpbmlzaCgzOCk7Y2FzZSA0MjpyZXR1cm4gZS5maW5pc2goMzMpO2Nhc2UgNDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLG51bGwsW1syLDI5LDMzLDQzXSxbMzQsLDM4LDQyXV0pfSkpLGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pO3JldHVybiBmdW5jdGlvbihlLHQscil7cmV0dXJuIG8uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxjdD1mdW5jdGlvbihlLHQscixuLG8pe3ZhciBpPXV0KGUsdCxvKSxhPTA7cmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7dHlwZToiYnl0ZXMiLHB1bGw6ZnVuY3Rpb24oZSl7cmV0dXJuIGgodSgpLm1hcmsoKGZ1bmN0aW9uIHQoKXt2YXIgbyxzLGMsZjtyZXR1cm4gdSgpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0Lm5leHQ9MixpLm5leHQoKTtjYXNlIDI6aWYobz10LnNlbnQscz1vLmRvbmUsYz1vLnZhbHVlLCFzKXt0Lm5leHQ9OTticmVha31yZXR1cm4gZS5jbG9zZSgpLG4oKSx0LmFicnVwdCgicmV0dXJuIik7Y2FzZSA5OmY9Yy5ieXRlTGVuZ3RoLHImJnIoYSs9ZiksZS5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KGMpKTtjYXNlIDEyOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCl9KSkpKCl9LGNhbmNlbDpmdW5jdGlvbihlKXtyZXR1cm4gbihlKSxpLnJldHVybigpfX0se2hpZ2hXYXRlck1hcms6Mn0pfSxmdD1mdW5jdGlvbihlLHQpe3ZhciByPW51bGwhPWU7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiB0KHtsZW5ndGhDb21wdXRhYmxlOnIsdG90YWw6ZSxsb2FkZWQ6bn0pfSkpfX0sbHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGZldGNoJiYiZnVuY3Rpb24iPT10eXBlb2YgUmVxdWVzdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlc3BvbnNlLGh0PWx0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVhZGFibGVTdHJlYW0scHQ9bHQmJigiZnVuY3Rpb24iPT10eXBlb2YgVGV4dEVuY29kZXI/KGV0PW5ldyBUZXh0RW5jb2RlcixmdW5jdGlvbihlKXtyZXR1cm4gZXQuZW5jb2RlKGUpfSk6ZnVuY3Rpb24oKXt2YXIgZT1oKHUoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3JldHVybiB1KCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUudDA9VWludDhBcnJheSxlLm5leHQ9MyxuZXcgUmVzcG9uc2UodCkuYXJyYXlCdWZmZXIoKTtjYXNlIDM6cmV0dXJuIGUudDE9ZS5zZW50LGUuYWJydXB0KCJyZXR1cm4iLG5ldyBlLnQwKGUudDEpKTtjYXNlIDU6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlKX0pKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLGR0PWh0JiYodHQ9ITEscnQ9bmV3IFJlcXVlc3QoTGUub3JpZ2luLHtib2R5Om5ldyBSZWFkYWJsZVN0cmVhbSxtZXRob2Q6IlBPU1QiLGdldCBkdXBsZXgoKXtyZXR1cm4gdHQ9ITAsImhhbGYifX0pLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKSx0dCYmIXJ0KSx5dD1odCYmISFmdW5jdGlvbigpe3RyeXtyZXR1cm4gY2UuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoIiIpLmJvZHkpfWNhdGNoKGUpe319KCksdnQ9e3N0cmVhbTp5dCYmZnVuY3Rpb24oZSl7cmV0dXJuIGUuYm9keX19O2x0JiYobnQ9bmV3IFJlc3BvbnNlLFsidGV4dCIsImFycmF5QnVmZmVyIiwiYmxvYiIsImZvcm1EYXRhIiwic3RyZWFtIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7IXZ0W2VdJiYodnRbZV09Y2UuaXNGdW5jdGlvbihudFtlXSk/ZnVuY3Rpb24odCl7cmV0dXJuIHRbZV0oKX06ZnVuY3Rpb24odCxyKXt0aHJvdyBuZXcgZmUoIlJlc3BvbnNlIHR5cGUgJyIuY29uY2F0KGUsIicgaXMgbm90IHN1cHBvcnRlZCIpLGZlLkVSUl9OT1RfU1VQUE9SVCxyKX0pfSkpKTt2YXIgbXQ9ZnVuY3Rpb24oKXt2YXIgZT1oKHUoKS5tYXJrKChmdW5jdGlvbiBlKHQpe3JldHVybiB1KCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYobnVsbCE9dCl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLDApO2Nhc2UgMjppZighY2UuaXNCbG9iKHQpKXtlLm5leHQ9NDticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdC5zaXplKTtjYXNlIDQ6aWYoIWNlLmlzU3BlY0NvbXBsaWFudEZvcm0odCkpe2UubmV4dD04O2JyZWFrfXJldHVybiBlLm5leHQ9NyxuZXcgUmVxdWVzdCh0KS5hcnJheUJ1ZmZlcigpO2Nhc2UgNzpjYXNlIDE0OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixlLnNlbnQuYnl0ZUxlbmd0aCk7Y2FzZSA4OmlmKCFjZS5pc0FycmF5QnVmZmVyVmlldyh0KSl7ZS5uZXh0PTEwO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix0LmJ5dGVMZW5ndGgpO2Nhc2UgMTA6aWYoY2UuaXNVUkxTZWFyY2hQYXJhbXModCkmJih0Kz0iIiksIWNlLmlzU3RyaW5nKHQpKXtlLm5leHQ9MTU7YnJlYWt9cmV0dXJuIGUubmV4dD0xNCxwdCh0KTtjYXNlIDE1OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGJ0PWZ1bmN0aW9uKCl7dmFyIGU9aCh1KCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3ZhciBuO3JldHVybiB1KCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIG49Y2UudG9GaW5pdGVOdW1iZXIodC5nZXRDb250ZW50TGVuZ3RoKCkpLGUuYWJydXB0KCJyZXR1cm4iLG51bGw9PW4/bXQocik6bik7Y2FzZSAyOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSl9KSkpO3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksZ3Q9bHQmJmZ1bmN0aW9uKCl7dmFyIGU9aCh1KCkubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgcixuLG8saSxhLGMsZixsLGgscCxkLHksdixiLGcsdyxFLE8sUyx4LFIsVCxqLGssQSxQLEwsTixfO3JldHVybiB1KCkud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYocj1vdCh0KSxuPXIudXJsLG89ci5tZXRob2QsaT1yLmRhdGEsYT1yLnNpZ25hbCxjPXIuY2FuY2VsVG9rZW4sZj1yLnRpbWVvdXQsbD1yLm9uRG93bmxvYWRQcm9ncmVzcyxoPXIub25VcGxvYWRQcm9ncmVzcyxwPXIucmVzcG9uc2VUeXBlLGQ9ci5oZWFkZXJzLHk9ci53aXRoQ3JlZGVudGlhbHMsdj12b2lkIDA9PT15PyJzYW1lLW9yaWdpbiI6eSxiPXIuZmV0Y2hPcHRpb25zLHA9cD8ocCsiIikudG9Mb3dlckNhc2UoKToidGV4dCIsZz1hfHxjfHxmP2F0KFthLGNdLGYpOltdLHc9bShnLDIpLEU9d1swXSxPPXdbMV0sUj1mdW5jdGlvbigpeyFTJiZzZXRUaW1lb3V0KChmdW5jdGlvbigpe0UmJkUudW5zdWJzY3JpYmUoKX0pKSxTPSEwfSxlLnByZXY9NCxlLnQwPWgmJmR0JiYiZ2V0IiE9PW8mJiJoZWFkIiE9PW8sIWUudDApe2UubmV4dD0xMTticmVha31yZXR1cm4gZS5uZXh0PTksYnQoZCxpKTtjYXNlIDk6ZS50MT1UPWUuc2VudCxlLnQwPTAhPT1lLnQxO2Nhc2UgMTE6aWYoIWUudDApe2UubmV4dD0xNTticmVha31qPW5ldyBSZXF1ZXN0KG4se21ldGhvZDoiUE9TVCIsYm9keTppLGR1cGxleDoiaGFsZiJ9KSxjZS5pc0Zvcm1EYXRhKGkpJiYoaz1qLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKSkmJmQuc2V0Q29udGVudFR5cGUoayksai5ib2R5JiYoaT1jdChqLmJvZHksNjU1MzYsZnQoVCxWZShoKSksbnVsbCxwdCkpO2Nhc2UgMTU6cmV0dXJuIGNlLmlzU3RyaW5nKHYpfHwodj12PyJjb3JzIjoib21pdCIpLHg9bmV3IFJlcXVlc3QobixzKHMoe30sYikse30se3NpZ25hbDpFLG1ldGhvZDpvLnRvVXBwZXJDYXNlKCksaGVhZGVyczpkLm5vcm1hbGl6ZSgpLnRvSlNPTigpLGJvZHk6aSxkdXBsZXg6ImhhbGYiLHdpdGhDcmVkZW50aWFsczp2fSkpLGUubmV4dD0xOSxmZXRjaCh4KTtjYXNlIDE5OnJldHVybiBBPWUuc2VudCxQPXl0JiYoInN0cmVhbSI9PT1wfHwicmVzcG9uc2UiPT09cCkseXQmJihsfHxQKSYmKEw9e30sWyJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiaGVhZGVycyJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe0xbZV09QVtlXX0pKSxOPWNlLnRvRmluaXRlTnVtYmVyKEEuaGVhZGVycy5nZXQoImNvbnRlbnQtbGVuZ3RoIikpLEE9bmV3IFJlc3BvbnNlKGN0KEEuYm9keSw2NTUzNixsJiZmdChOLFZlKGwsITApKSxQJiZSLHB0KSxMKSkscD1wfHwidGV4dCIsZS5uZXh0PTI1LHZ0W2NlLmZpbmRLZXkodnQscCl8fCJ0ZXh0Il0oQSx0KTtjYXNlIDI1OnJldHVybiBfPWUuc2VudCwhUCYmUigpLE8mJk8oKSxlLm5leHQ9MzAsbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUscil7V2UoZSxyLHtkYXRhOl8saGVhZGVyczp6ZS5mcm9tKEEuaGVhZGVycyksc3RhdHVzOkEuc3RhdHVzLHN0YXR1c1RleHQ6QS5zdGF0dXNUZXh0LGNvbmZpZzp0LHJlcXVlc3Q6eH0pfSkpO2Nhc2UgMzA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGUuc2VudCk7Y2FzZSAzMzppZihlLnByZXY9MzMsZS50Mj1lLmNhdGNoKDQpLFIoKSwhZS50Mnx8IlR5cGVFcnJvciIhPT1lLnQyLm5hbWV8fCEvZmV0Y2gvaS50ZXN0KGUudDIubWVzc2FnZSkpe2UubmV4dD0zODticmVha310aHJvdyBPYmplY3QuYXNzaWduKG5ldyBmZSgiTmV0d29yayBFcnJvciIsZmUuRVJSX05FVFdPUkssdCx4KSx7Y2F1c2U6ZS50Mi5jYXVzZXx8ZS50Mn0pO2Nhc2UgMzg6dGhyb3cgZmUuZnJvbShlLnQyLGUudDImJmUudDIuY29kZSx0LHgpO2Nhc2UgMzk6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLG51bGwsW1s0LDMzXV0pfSkpKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSx3dD17aHR0cDpudWxsLHhocjppdCxmZXRjaDpndH07Y2UuZm9yRWFjaCh3dCwoZnVuY3Rpb24oZSx0KXtpZihlKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm5hbWUiLHt2YWx1ZTp0fSl9Y2F0Y2goZSl7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJhZGFwdGVyTmFtZSIse3ZhbHVlOnR9KX19KSk7dmFyIEV0PWZ1bmN0aW9uKGUpe3JldHVybiItICIuY29uY2F0KGUpfSxPdD1mdW5jdGlvbihlKXtyZXR1cm4gY2UuaXNGdW5jdGlvbihlKXx8bnVsbD09PWV8fCExPT09ZX0sU3Q9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbj0oZT1jZS5pc0FycmF5KGUpP2U6W2VdKS5sZW5ndGgsbz17fSxpPTA7aTxuO2krKyl7dmFyIGE9dm9pZCAwO2lmKHI9dD1lW2ldLCFPdCh0KSYmdm9pZCAwPT09KHI9d3RbKGE9U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSkpdGhyb3cgbmV3IGZlKCJVbmtub3duIGFkYXB0ZXIgJyIuY29uY2F0KGEsIiciKSk7aWYocilicmVhaztvW2F8fCIjIitpXT1yfWlmKCFyKXt2YXIgcz1PYmplY3QuZW50cmllcyhvKS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0PW0oZSwyKSxyPXRbMF0sbj10WzFdO3JldHVybiJhZGFwdGVyICIuY29uY2F0KHIsIiAiKSsoITE9PT1uPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIil9KSk7dGhyb3cgbmV3IGZlKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrKG4/cy5sZW5ndGg+MT8ic2luY2UgOlxuIitzLm1hcChFdCkuam9pbigiXG4iKToiICIrRXQoc1swXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIiksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfTtmdW5jdGlvbiB4dChlKXtpZihlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxlLnNpZ25hbCYmZS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgSmUobnVsbCxlKX1mdW5jdGlvbiBSdChlKXtyZXR1cm4geHQoZSksZS5oZWFkZXJzPXplLmZyb20oZS5oZWFkZXJzKSxlLmRhdGE9TWUuY2FsbChlLGUudHJhbnNmb3JtUmVxdWVzdCksLTEhPT1bInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoZS5tZXRob2QpJiZlLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLFN0KGUuYWRhcHRlcnx8Q2UuYWRhcHRlcikoZSkudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHh0KGUpLHQuZGF0YT1NZS5jYWxsKGUsZS50cmFuc2Zvcm1SZXNwb25zZSx0KSx0LmhlYWRlcnM9emUuZnJvbSh0LmhlYWRlcnMpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIEhlKHQpfHwoeHQoZSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT1NZS5jYWxsKGUsZS50cmFuc2Zvcm1SZXNwb25zZSx0LnJlc3BvbnNlKSx0LnJlc3BvbnNlLmhlYWRlcnM9emUuZnJvbSh0LnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3QodCl9KSl9dmFyIFR0PSIxLjcuMiIsanQ9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2p0W2VdPWZ1bmN0aW9uKHIpe3JldHVybiBmKHIpPT09ZXx8ImEiKyh0PDE/Im4gIjoiICIpK2V9fSkpO3ZhciBrdD17fTtqdC50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4iW0F4aW9zIHYxLjcuMl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitlKyInIit0KyhyPyIuICIrcjoiIil9cmV0dXJuIGZ1bmN0aW9uKHIsbyxpKXtpZighMT09PWUpdGhyb3cgbmV3IGZlKG4obywiIGhhcyBiZWVuIHJlbW92ZWQiKyh0PyIgaW4gIit0OiIiKSksZmUuRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYha3Rbb10mJihrdFtvXT0hMCxjb25zb2xlLndhcm4obihvLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLCFlfHxlKHIsbyxpKX19O3ZhciBBdD17YXNzZXJ0T3B0aW9uczpmdW5jdGlvbihlLHQscil7aWYoIm9iamVjdCIhPT1mKGUpKXRocm93IG5ldyBmZSgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsZmUuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2Zvcih2YXIgbj1PYmplY3Qua2V5cyhlKSxvPW4ubGVuZ3RoO28tLSA+MDspe3ZhciBpPW5bb10sYT10W2ldO2lmKGEpe3ZhciBzPWVbaV0sdT12b2lkIDA9PT1zfHxhKHMsaSxlKTtpZighMCE9PXUpdGhyb3cgbmV3IGZlKCJvcHRpb24gIitpKyIgbXVzdCBiZSAiK3UsZmUuRVJSX0JBRF9PUFRJT05fVkFMVUUpfWVsc2UgaWYoITAhPT1yKXRocm93IG5ldyBmZSgiVW5rbm93biBvcHRpb24gIitpLGZlLkVSUl9CQURfT1BUSU9OKX19LHZhbGlkYXRvcnM6anR9LFB0PUF0LnZhbGlkYXRvcnMsTHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3AodGhpcyxlKSx0aGlzLmRlZmF1bHRzPXQsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IHhlLHJlc3BvbnNlOm5ldyB4ZX19dmFyIHQ7cmV0dXJuIHkoZSxbe2tleToicmVxdWVzdCIsdmFsdWU6KHQ9aCh1KCkubWFyaygoZnVuY3Rpb24gZSh0LHIpe3ZhciBuLG87cmV0dXJuIHUoKS53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5wcmV2PTAsZS5uZXh0PTMsdGhpcy5fcmVxdWVzdCh0LHIpO2Nhc2UgMzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsZS5zZW50KTtjYXNlIDY6aWYoZS5wcmV2PTYsZS50MD1lLmNhdGNoKDApLGUudDAgaW5zdGFuY2VvZiBFcnJvcil7RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uobj17fSk6bj1uZXcgRXJyb3Isbz1uLnN0YWNrP24uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjt0cnl7ZS50MC5zdGFjaz9vJiYhU3RyaW5nKGUudDAuc3RhY2spLmVuZHNXaXRoKG8ucmVwbGFjZSgvXi4rXG4uK1xuLywiIikpJiYoZS50MC5zdGFjays9IlxuIitvKTplLnQwLnN0YWNrPW99Y2F0Y2goZSl7fX10aHJvdyBlLnQwO2Nhc2UgMTA6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMsW1swLDZdXSl9KSkpLGZ1bmN0aW9uKGUscil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9yZXF1ZXN0Iix2YWx1ZTpmdW5jdGlvbihlLHQpeyJzdHJpbmciPT10eXBlb2YgZT8odD10fHx7fSkudXJsPWU6dD1lfHx7fTt2YXIgcj10PVplKHRoaXMuZGVmYXVsdHMsdCksbj1yLnRyYW5zaXRpb25hbCxvPXIucGFyYW1zU2VyaWFsaXplcixpPXIuaGVhZGVyczt2b2lkIDAhPT1uJiZBdC5hc3NlcnRPcHRpb25zKG4se3NpbGVudEpTT05QYXJzaW5nOlB0LnRyYW5zaXRpb25hbChQdC5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpQdC50cmFuc2l0aW9uYWwoUHQuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpQdC50cmFuc2l0aW9uYWwoUHQuYm9vbGVhbil9LCExKSxudWxsIT1vJiYoY2UuaXNGdW5jdGlvbihvKT90LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpvfTpBdC5hc3NlcnRPcHRpb25zKG8se2VuY29kZTpQdC5mdW5jdGlvbixzZXJpYWxpemU6UHQuZnVuY3Rpb259LCEwKSksdC5tZXRob2Q9KHQubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7dmFyIGE9aSYmY2UubWVyZ2UoaS5jb21tb24saVt0Lm1ldGhvZF0pO2kmJmNlLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sKGZ1bmN0aW9uKGUpe2RlbGV0ZSBpW2VdfSkpLHQuaGVhZGVycz16ZS5jb25jYXQoYSxpKTt2YXIgcz1bXSx1PSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGUucnVuV2hlbiYmITE9PT1lLnJ1bldoZW4odCl8fCh1PXUmJmUuc3luY2hyb25vdXMscy51bnNoaWZ0KGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpKX0pKTt2YXIgYyxmPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2YucHVzaChlLmZ1bGZpbGxlZCxlLnJlamVjdGVkKX0pKTt2YXIgbCxoPTA7aWYoIXUpe3ZhciBwPVtSdC5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKHAudW5zaGlmdC5hcHBseShwLHMpLHAucHVzaC5hcHBseShwLGYpLGw9cC5sZW5ndGgsYz1Qcm9taXNlLnJlc29sdmUodCk7aDxsOyljPWMudGhlbihwW2grK10scFtoKytdKTtyZXR1cm4gY31sPXMubGVuZ3RoO3ZhciBkPXQ7Zm9yKGg9MDtoPGw7KXt2YXIgeT1zW2grK10sdj1zW2grK107dHJ5e2Q9eShkKX1jYXRjaChlKXt2LmNhbGwodGhpcyxlKTticmVha319dHJ5e2M9UnQuY2FsbCh0aGlzLGQpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX1mb3IoaD0wLGw9Zi5sZW5ndGg7aDxsOyljPWMudGhlbihmW2grK10sZltoKytdKTtyZXR1cm4gY319LHtrZXk6ImdldFVyaSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE9lKFllKChlPVplKHRoaXMuZGVmYXVsdHMsZSkpLmJhc2VVUkwsZS51cmwpLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcil9fV0pLGV9KCk7Y2UuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sKGZ1bmN0aW9uKGUpe0x0LnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoWmUocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6KHJ8fHt9KS5kYXRhfSkpfX0pKSxjZS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGZ1bmN0aW9uKHIsbixvKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KFplKG98fHt9LHttZXRob2Q6ZSxoZWFkZXJzOnQ/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOnIsZGF0YTpufSkpfX1MdC5wcm90b3R5cGVbZV09dCgpLEx0LnByb3RvdHlwZVtlKyJGb3JtIl09dCghMCl9KSk7dmFyIE50PUx0LF90PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtpZihwKHRoaXMsZSksImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO3ZhciByO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7cj1lfSkpO3ZhciBuPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKG4uX2xpc3RlbmVycyl7Zm9yKHZhciB0PW4uX2xpc3RlbmVycy5sZW5ndGg7dC0tID4wOyluLl9saXN0ZW5lcnNbdF0oZSk7bi5fbGlzdGVuZXJzPW51bGx9fSkpLHRoaXMucHJvbWlzZS50aGVuPWZ1bmN0aW9uKGUpe3ZhciB0LHI9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe24uc3Vic2NyaWJlKGUpLHQ9ZX0pKS50aGVuKGUpO3JldHVybiByLmNhbmNlbD1mdW5jdGlvbigpe24udW5zdWJzY3JpYmUodCl9LHJ9LHQoKGZ1bmN0aW9uKGUsdCxvKXtuLnJlYXNvbnx8KG4ucmVhc29uPW5ldyBKZShlLHQsbykscihuLnJlYXNvbikpfSkpfXJldHVybiB5KGUsW3trZXk6InRocm93SWZSZXF1ZXN0ZWQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259fSx7a2V5OiJzdWJzY3JpYmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucmVhc29uP2UodGhpcy5yZWFzb24pOnRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfX0se2tleToidW5zdWJzY3JpYmUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX2xpc3RlbmVycyl7dmFyIHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7LTEhPT10JiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9fX1dLFt7a2V5OiJzb3VyY2UiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJue3Rva2VuOm5ldyBlKChmdW5jdGlvbihlKXt0PWV9KSksY2FuY2VsOnR9fX1dKSxlfSgpO3ZhciBDdD17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoQ3QpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PW0oZSwyKSxyPXRbMF0sbj10WzFdO0N0W25dPXJ9KSk7dmFyIEZ0PUN0O3ZhciBVdD1mdW5jdGlvbiBlKHQpe3ZhciByPW5ldyBOdCh0KSxuPXgoTnQucHJvdG90eXBlLnJlcXVlc3Qscik7cmV0dXJuIGNlLmV4dGVuZChuLE50LnByb3RvdHlwZSxyLHthbGxPd25LZXlzOiEwfSksY2UuZXh0ZW5kKG4scixudWxsLHthbGxPd25LZXlzOiEwfSksbi5jcmVhdGU9ZnVuY3Rpb24ocil7cmV0dXJuIGUoWmUodCxyKSl9LG59KENlKTtyZXR1cm4gVXQuQXhpb3M9TnQsVXQuQ2FuY2VsZWRFcnJvcj1KZSxVdC5DYW5jZWxUb2tlbj1fdCxVdC5pc0NhbmNlbD1IZSxVdC5WRVJTSU9OPVR0LFV0LnRvRm9ybURhdGE9bWUsVXQuQXhpb3NFcnJvcj1mZSxVdC5DYW5jZWw9VXQuQ2FuY2VsZWRFcnJvcixVdC5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfSxVdC5zcHJlYWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KG51bGwsdCl9fSxVdC5pc0F4aW9zRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGNlLmlzT2JqZWN0KGUpJiYhMD09PWUuaXNBeGlvc0Vycm9yfSxVdC5tZXJnZUNvbmZpZz1aZSxVdC5BeGlvc0hlYWRlcnM9emUsVXQuZm9ybVRvSlNPTj1mdW5jdGlvbihlKXtyZXR1cm4gTmUoY2UuaXNIVE1MRm9ybShlKT9uZXcgRm9ybURhdGEoZSk6ZSl9LFV0LmdldEFkYXB0ZXI9U3QsVXQuSHR0cFN0YXR1c0NvZGU9RnQsVXQuZGVmYXVsdD1VdCxVdH0pKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXhpb3MubWluLmpzLm1hcAo=]]></data>
	</file>
	<file>
	  <filename>/js/backbone-min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKHIpe3ZhciBuPXR5cGVvZiBzZWxmPT0ib2JqZWN0IiYmc2VsZi5zZWxmPT09c2VsZiYmc2VsZnx8dHlwZW9mIGdsb2JhbD09Im9iamVjdCImJmdsb2JhbC5nbG9iYWw9PT1nbG9iYWwmJmdsb2JhbDtpZih0eXBlb2YgZGVmaW5lPT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZCl7ZGVmaW5lKFsidW5kZXJzY29yZSIsImpxdWVyeSIsImV4cG9ydHMiXSxmdW5jdGlvbih0LGUsaSl7bi5CYWNrYm9uZT1yKG4saSx0LGUpfSl9ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyE9PSJ1bmRlZmluZWQiKXt2YXIgdD1yZXF1aXJlKCJ1bmRlcnNjb3JlIiksZTt0cnl7ZT1yZXF1aXJlKCJqcXVlcnkiKX1jYXRjaCh0KXt9cihuLGV4cG9ydHMsdCxlKX1lbHNle24uQmFja2JvbmU9cihuLHt9LG4uXyxuLmpRdWVyeXx8bi5aZXB0b3x8bi5lbmRlcnx8bi4kKX19KShmdW5jdGlvbih0LGgseCxlKXt2YXIgaT10LkJhY2tib25lO3ZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZTtoLlZFUlNJT049IjEuNC4xIjtoLiQ9ZTtoLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXt0LkJhY2tib25lPWk7cmV0dXJuIHRoaXN9O2guZW11bGF0ZUhUVFA9ZmFsc2U7aC5lbXVsYXRlSlNPTj1mYWxzZTt2YXIgcj1oLkV2ZW50cz17fTt2YXIgbz0vXHMrLzt2YXIgbDt2YXIgdT1mdW5jdGlvbih0LGUsaSxyLG4pe3ZhciBzPTAsYTtpZihpJiZ0eXBlb2YgaT09PSJvYmplY3QiKXtpZihyIT09dm9pZCAwJiYiY29udGV4dCJpbiBuJiZuLmNvbnRleHQ9PT12b2lkIDApbi5jb250ZXh0PXI7Zm9yKGE9eC5rZXlzKGkpO3M8YS5sZW5ndGg7cysrKXtlPXUodCxlLGFbc10saVthW3NdXSxuKX19ZWxzZSBpZihpJiZvLnRlc3QoaSkpe2ZvcihhPWkuc3BsaXQobyk7czxhLmxlbmd0aDtzKyspe2U9dChlLGFbc10scixuKX19ZWxzZXtlPXQoZSxpLHIsbil9cmV0dXJuIGV9O3Iub249ZnVuY3Rpb24odCxlLGkpe3RoaXMuX2V2ZW50cz11KG4sdGhpcy5fZXZlbnRzfHx7fSx0LGUse2NvbnRleHQ6aSxjdHg6dGhpcyxsaXN0ZW5pbmc6bH0pO2lmKGwpe3ZhciByPXRoaXMuX2xpc3RlbmVyc3x8KHRoaXMuX2xpc3RlbmVycz17fSk7cltsLmlkXT1sO2wuaW50ZXJvcD1mYWxzZX1yZXR1cm4gdGhpc307ci5saXN0ZW5Ubz1mdW5jdGlvbih0LGUsaSl7aWYoIXQpcmV0dXJuIHRoaXM7dmFyIHI9dC5fbGlzdGVuSWR8fCh0Ll9saXN0ZW5JZD14LnVuaXF1ZUlkKCJsIikpO3ZhciBuPXRoaXMuX2xpc3RlbmluZ1RvfHwodGhpcy5fbGlzdGVuaW5nVG89e30pO3ZhciBzPWw9bltyXTtpZighcyl7dGhpcy5fbGlzdGVuSWR8fCh0aGlzLl9saXN0ZW5JZD14LnVuaXF1ZUlkKCJsIikpO3M9bD1uW3JdPW5ldyBwKHRoaXMsdCl9dmFyIGE9Yyh0LGUsaSx0aGlzKTtsPXZvaWQgMDtpZihhKXRocm93IGE7aWYocy5pbnRlcm9wKXMub24oZSxpKTtyZXR1cm4gdGhpc307dmFyIG49ZnVuY3Rpb24odCxlLGkscil7aWYoaSl7dmFyIG49dFtlXXx8KHRbZV09W10pO3ZhciBzPXIuY29udGV4dCxhPXIuY3R4LG89ci5saXN0ZW5pbmc7aWYobylvLmNvdW50Kys7bi5wdXNoKHtjYWxsYmFjazppLGNvbnRleHQ6cyxjdHg6c3x8YSxsaXN0ZW5pbmc6b30pfXJldHVybiB0fTt2YXIgYz1mdW5jdGlvbih0LGUsaSxyKXt0cnl7dC5vbihlLGkscil9Y2F0Y2godCl7cmV0dXJuIHR9fTtyLm9mZj1mdW5jdGlvbih0LGUsaSl7aWYoIXRoaXMuX2V2ZW50cylyZXR1cm4gdGhpczt0aGlzLl9ldmVudHM9dShzLHRoaXMuX2V2ZW50cyx0LGUse2NvbnRleHQ6aSxsaXN0ZW5lcnM6dGhpcy5fbGlzdGVuZXJzfSk7cmV0dXJuIHRoaXN9O3Iuc3RvcExpc3RlbmluZz1mdW5jdGlvbih0LGUsaSl7dmFyIHI9dGhpcy5fbGlzdGVuaW5nVG87aWYoIXIpcmV0dXJuIHRoaXM7dmFyIG49dD9bdC5fbGlzdGVuSWRdOngua2V5cyhyKTtmb3IodmFyIHM9MDtzPG4ubGVuZ3RoO3MrKyl7dmFyIGE9cltuW3NdXTtpZighYSlicmVhazthLm9iai5vZmYoZSxpLHRoaXMpO2lmKGEuaW50ZXJvcClhLm9mZihlLGkpfWlmKHguaXNFbXB0eShyKSl0aGlzLl9saXN0ZW5pbmdUbz12b2lkIDA7cmV0dXJuIHRoaXN9O3ZhciBzPWZ1bmN0aW9uKHQsZSxpLHIpe2lmKCF0KXJldHVybjt2YXIgbj1yLmNvbnRleHQscz1yLmxpc3RlbmVyczt2YXIgYT0wLG87aWYoIWUmJiFuJiYhaSl7Zm9yKG89eC5rZXlzKHMpO2E8by5sZW5ndGg7YSsrKXtzW29bYV1dLmNsZWFudXAoKX1yZXR1cm59bz1lP1tlXTp4LmtleXModCk7Zm9yKDthPG8ubGVuZ3RoO2ErKyl7ZT1vW2FdO3ZhciBoPXRbZV07aWYoIWgpYnJlYWs7dmFyIGw9W107Zm9yKHZhciB1PTA7dTxoLmxlbmd0aDt1Kyspe3ZhciBjPWhbdV07aWYoaSYmaSE9PWMuY2FsbGJhY2smJmkhPT1jLmNhbGxiYWNrLl9jYWxsYmFja3x8biYmbiE9PWMuY29udGV4dCl7bC5wdXNoKGMpfWVsc2V7dmFyIGY9Yy5saXN0ZW5pbmc7aWYoZilmLm9mZihlLGkpfX1pZihsLmxlbmd0aCl7dFtlXT1sfWVsc2V7ZGVsZXRlIHRbZV19fXJldHVybiB0fTtyLm9uY2U9ZnVuY3Rpb24odCxlLGkpe3ZhciByPXUoZix7fSx0LGUsdGhpcy5vZmYuYmluZCh0aGlzKSk7aWYodHlwZW9mIHQ9PT0ic3RyaW5nIiYmaT09bnVsbCllPXZvaWQgMDtyZXR1cm4gdGhpcy5vbihyLGUsaSl9O3IubGlzdGVuVG9PbmNlPWZ1bmN0aW9uKHQsZSxpKXt2YXIgcj11KGYse30sZSxpLHRoaXMuc3RvcExpc3RlbmluZy5iaW5kKHRoaXMsdCkpO3JldHVybiB0aGlzLmxpc3RlblRvKHQscil9O3ZhciBmPWZ1bmN0aW9uKHQsZSxpLHIpe2lmKGkpe3ZhciBuPXRbZV09eC5vbmNlKGZ1bmN0aW9uKCl7cihlLG4pO2kuYXBwbHkodGhpcyxhcmd1bWVudHMpfSk7bi5fY2FsbGJhY2s9aX1yZXR1cm4gdH07ci50cmlnZ2VyPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9ldmVudHMpcmV0dXJuIHRoaXM7dmFyIGU9TWF0aC5tYXgoMCxhcmd1bWVudHMubGVuZ3RoLTEpO3ZhciBpPUFycmF5KGUpO2Zvcih2YXIgcj0wO3I8ZTtyKyspaVtyXT1hcmd1bWVudHNbcisxXTt1KGQsdGhpcy5fZXZlbnRzLHQsdm9pZCAwLGkpO3JldHVybiB0aGlzfTt2YXIgZD1mdW5jdGlvbih0LGUsaSxyKXtpZih0KXt2YXIgbj10W2VdO3ZhciBzPXQuYWxsO2lmKG4mJnMpcz1zLnNsaWNlKCk7aWYobil2KG4scik7aWYocyl2KHMsW2VdLmNvbmNhdChyKSl9cmV0dXJuIHR9O3ZhciB2PWZ1bmN0aW9uKHQsZSl7dmFyIGkscj0tMSxuPXQubGVuZ3RoLHM9ZVswXSxhPWVbMV0sbz1lWzJdO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOndoaWxlKCsrcjxuKShpPXRbcl0pLmNhbGxiYWNrLmNhbGwoaS5jdHgpO3JldHVybjtjYXNlIDE6d2hpbGUoKytyPG4pKGk9dFtyXSkuY2FsbGJhY2suY2FsbChpLmN0eCxzKTtyZXR1cm47Y2FzZSAyOndoaWxlKCsrcjxuKShpPXRbcl0pLmNhbGxiYWNrLmNhbGwoaS5jdHgscyxhKTtyZXR1cm47Y2FzZSAzOndoaWxlKCsrcjxuKShpPXRbcl0pLmNhbGxiYWNrLmNhbGwoaS5jdHgscyxhLG8pO3JldHVybjtkZWZhdWx0OndoaWxlKCsrcjxuKShpPXRbcl0pLmNhbGxiYWNrLmFwcGx5KGkuY3R4LGUpO3JldHVybn19O3ZhciBwPWZ1bmN0aW9uKHQsZSl7dGhpcy5pZD10Ll9saXN0ZW5JZDt0aGlzLmxpc3RlbmVyPXQ7dGhpcy5vYmo9ZTt0aGlzLmludGVyb3A9dHJ1ZTt0aGlzLmNvdW50PTA7dGhpcy5fZXZlbnRzPXZvaWQgMH07cC5wcm90b3R5cGUub249ci5vbjtwLnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24odCxlKXt2YXIgaTtpZih0aGlzLmludGVyb3Ape3RoaXMuX2V2ZW50cz11KHMsdGhpcy5fZXZlbnRzLHQsZSx7Y29udGV4dDp2b2lkIDAsbGlzdGVuZXJzOnZvaWQgMH0pO2k9IXRoaXMuX2V2ZW50c31lbHNle3RoaXMuY291bnQtLTtpPXRoaXMuY291bnQ9PT0wfWlmKGkpdGhpcy5jbGVhbnVwKCl9O3AucHJvdG90eXBlLmNsZWFudXA9ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5saXN0ZW5lci5fbGlzdGVuaW5nVG9bdGhpcy5vYmouX2xpc3RlbklkXTtpZighdGhpcy5pbnRlcm9wKWRlbGV0ZSB0aGlzLm9iai5fbGlzdGVuZXJzW3RoaXMuaWRdfTtyLmJpbmQ9ci5vbjtyLnVuYmluZD1yLm9mZjt4LmV4dGVuZChoLHIpO3ZhciBnPWguTW9kZWw9ZnVuY3Rpb24odCxlKXt2YXIgaT10fHx7fTtlfHwoZT17fSk7dGhpcy5wcmVpbml0aWFsaXplLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmNpZD14LnVuaXF1ZUlkKHRoaXMuY2lkUHJlZml4KTt0aGlzLmF0dHJpYnV0ZXM9e307aWYoZS5jb2xsZWN0aW9uKXRoaXMuY29sbGVjdGlvbj1lLmNvbGxlY3Rpb247aWYoZS5wYXJzZSlpPXRoaXMucGFyc2UoaSxlKXx8e307dmFyIHI9eC5yZXN1bHQodGhpcywiZGVmYXVsdHMiKTtpPXguZGVmYXVsdHMoeC5leHRlbmQoe30scixpKSxyKTt0aGlzLnNldChpLGUpO3RoaXMuY2hhbmdlZD17fTt0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt4LmV4dGVuZChnLnByb3RvdHlwZSxyLHtjaGFuZ2VkOm51bGwsdmFsaWRhdGlvbkVycm9yOm51bGwsaWRBdHRyaWJ1dGU6ImlkIixjaWRQcmVmaXg6ImMiLHByZWluaXRpYWxpemU6ZnVuY3Rpb24oKXt9LGluaXRpYWxpemU6ZnVuY3Rpb24oKXt9LHRvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4geC5jbG9uZSh0aGlzLmF0dHJpYnV0ZXMpfSxzeW5jOmZ1bmN0aW9uKCl7cmV0dXJuIGguc3luYy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdfSxlc2NhcGU6ZnVuY3Rpb24odCl7cmV0dXJuIHguZXNjYXBlKHRoaXMuZ2V0KHQpKX0saGFzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldCh0KSE9bnVsbH0sbWF0Y2hlczpmdW5jdGlvbih0KXtyZXR1cm4hIXguaXRlcmF0ZWUodCx0aGlzKSh0aGlzLmF0dHJpYnV0ZXMpfSxzZXQ6ZnVuY3Rpb24odCxlLGkpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXM7dmFyIHI7aWYodHlwZW9mIHQ9PT0ib2JqZWN0Iil7cj10O2k9ZX1lbHNleyhyPXt9KVt0XT1lfWl8fChpPXt9KTtpZighdGhpcy5fdmFsaWRhdGUocixpKSlyZXR1cm4gZmFsc2U7dmFyIG49aS51bnNldDt2YXIgcz1pLnNpbGVudDt2YXIgYT1bXTt2YXIgbz10aGlzLl9jaGFuZ2luZzt0aGlzLl9jaGFuZ2luZz10cnVlO2lmKCFvKXt0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXM9eC5jbG9uZSh0aGlzLmF0dHJpYnV0ZXMpO3RoaXMuY2hhbmdlZD17fX12YXIgaD10aGlzLmF0dHJpYnV0ZXM7dmFyIGw9dGhpcy5jaGFuZ2VkO3ZhciB1PXRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcztmb3IodmFyIGMgaW4gcil7ZT1yW2NdO2lmKCF4LmlzRXF1YWwoaFtjXSxlKSlhLnB1c2goYyk7aWYoIXguaXNFcXVhbCh1W2NdLGUpKXtsW2NdPWV9ZWxzZXtkZWxldGUgbFtjXX1uP2RlbGV0ZSBoW2NdOmhbY109ZX1pZih0aGlzLmlkQXR0cmlidXRlIGluIHIpe3ZhciBmPXRoaXMuaWQ7dGhpcy5pZD10aGlzLmdldCh0aGlzLmlkQXR0cmlidXRlKTt0aGlzLnRyaWdnZXIoImNoYW5nZUlkIix0aGlzLGYsaSl9aWYoIXMpe2lmKGEubGVuZ3RoKXRoaXMuX3BlbmRpbmc9aTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyl7dGhpcy50cmlnZ2VyKCJjaGFuZ2U6IithW2RdLHRoaXMsaFthW2RdXSxpKX19aWYobylyZXR1cm4gdGhpcztpZighcyl7d2hpbGUodGhpcy5fcGVuZGluZyl7aT10aGlzLl9wZW5kaW5nO3RoaXMuX3BlbmRpbmc9ZmFsc2U7dGhpcy50cmlnZ2VyKCJjaGFuZ2UiLHRoaXMsaSl9fXRoaXMuX3BlbmRpbmc9ZmFsc2U7dGhpcy5fY2hhbmdpbmc9ZmFsc2U7cmV0dXJuIHRoaXN9LHVuc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2V0KHQsdm9pZCAwLHguZXh0ZW5kKHt9LGUse3Vuc2V0OnRydWV9KSl9LGNsZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Zvcih2YXIgaSBpbiB0aGlzLmF0dHJpYnV0ZXMpZVtpXT12b2lkIDA7cmV0dXJuIHRoaXMuc2V0KGUseC5leHRlbmQoe30sdCx7dW5zZXQ6dHJ1ZX0pKX0saGFzQ2hhbmdlZDpmdW5jdGlvbih0KXtpZih0PT1udWxsKXJldHVybiF4LmlzRW1wdHkodGhpcy5jaGFuZ2VkKTtyZXR1cm4geC5oYXModGhpcy5jaGFuZ2VkLHQpfSxjaGFuZ2VkQXR0cmlidXRlczpmdW5jdGlvbih0KXtpZighdClyZXR1cm4gdGhpcy5oYXNDaGFuZ2VkKCk/eC5jbG9uZSh0aGlzLmNoYW5nZWQpOmZhbHNlO3ZhciBlPXRoaXMuX2NoYW5naW5nP3RoaXMuX3ByZXZpb3VzQXR0cmlidXRlczp0aGlzLmF0dHJpYnV0ZXM7dmFyIGk9e307dmFyIHI7Zm9yKHZhciBuIGluIHQpe3ZhciBzPXRbbl07aWYoeC5pc0VxdWFsKGVbbl0scykpY29udGludWU7aVtuXT1zO3I9dHJ1ZX1yZXR1cm4gcj9pOmZhbHNlfSxwcmV2aW91czpmdW5jdGlvbih0KXtpZih0PT1udWxsfHwhdGhpcy5fcHJldmlvdXNBdHRyaWJ1dGVzKXJldHVybiBudWxsO3JldHVybiB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXNbdF19LHByZXZpb3VzQXR0cmlidXRlczpmdW5jdGlvbigpe3JldHVybiB4LmNsb25lKHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyl9LGZldGNoOmZ1bmN0aW9uKGkpe2k9eC5leHRlbmQoe3BhcnNlOnRydWV9LGkpO3ZhciByPXRoaXM7dmFyIG49aS5zdWNjZXNzO2kuc3VjY2Vzcz1mdW5jdGlvbih0KXt2YXIgZT1pLnBhcnNlP3IucGFyc2UodCxpKTp0O2lmKCFyLnNldChlLGkpKXJldHVybiBmYWxzZTtpZihuKW4uY2FsbChpLmNvbnRleHQscix0LGkpO3IudHJpZ2dlcigic3luYyIscix0LGkpfTtHKHRoaXMsaSk7cmV0dXJuIHRoaXMuc3luYygicmVhZCIsdGhpcyxpKX0sc2F2ZTpmdW5jdGlvbih0LGUsaSl7dmFyIHI7aWYodD09bnVsbHx8dHlwZW9mIHQ9PT0ib2JqZWN0Iil7cj10O2k9ZX1lbHNleyhyPXt9KVt0XT1lfWk9eC5leHRlbmQoe3ZhbGlkYXRlOnRydWUscGFyc2U6dHJ1ZX0saSk7dmFyIG49aS53YWl0O2lmKHImJiFuKXtpZighdGhpcy5zZXQocixpKSlyZXR1cm4gZmFsc2V9ZWxzZSBpZighdGhpcy5fdmFsaWRhdGUocixpKSl7cmV0dXJuIGZhbHNlfXZhciBzPXRoaXM7dmFyIGE9aS5zdWNjZXNzO3ZhciBvPXRoaXMuYXR0cmlidXRlcztpLnN1Y2Nlc3M9ZnVuY3Rpb24odCl7cy5hdHRyaWJ1dGVzPW87dmFyIGU9aS5wYXJzZT9zLnBhcnNlKHQsaSk6dDtpZihuKWU9eC5leHRlbmQoe30scixlKTtpZihlJiYhcy5zZXQoZSxpKSlyZXR1cm4gZmFsc2U7aWYoYSlhLmNhbGwoaS5jb250ZXh0LHMsdCxpKTtzLnRyaWdnZXIoInN5bmMiLHMsdCxpKX07Ryh0aGlzLGkpO2lmKHImJm4pdGhpcy5hdHRyaWJ1dGVzPXguZXh0ZW5kKHt9LG8scik7dmFyIGg9dGhpcy5pc05ldygpPyJjcmVhdGUiOmkucGF0Y2g/InBhdGNoIjoidXBkYXRlIjtpZihoPT09InBhdGNoIiYmIWkuYXR0cnMpaS5hdHRycz1yO3ZhciBsPXRoaXMuc3luYyhoLHRoaXMsaSk7dGhpcy5hdHRyaWJ1dGVzPW87cmV0dXJuIGx9LGRlc3Ryb3k6ZnVuY3Rpb24oZSl7ZT1lP3guY2xvbmUoZSk6e307dmFyIGk9dGhpczt2YXIgcj1lLnN1Y2Nlc3M7dmFyIG49ZS53YWl0O3ZhciBzPWZ1bmN0aW9uKCl7aS5zdG9wTGlzdGVuaW5nKCk7aS50cmlnZ2VyKCJkZXN0cm95IixpLGkuY29sbGVjdGlvbixlKX07ZS5zdWNjZXNzPWZ1bmN0aW9uKHQpe2lmKG4pcygpO2lmKHIpci5jYWxsKGUuY29udGV4dCxpLHQsZSk7aWYoIWkuaXNOZXcoKSlpLnRyaWdnZXIoInN5bmMiLGksdCxlKX07dmFyIHQ9ZmFsc2U7aWYodGhpcy5pc05ldygpKXt4LmRlZmVyKGUuc3VjY2Vzcyl9ZWxzZXtHKHRoaXMsZSk7dD10aGlzLnN5bmMoImRlbGV0ZSIsdGhpcyxlKX1pZighbilzKCk7cmV0dXJuIHR9LHVybDpmdW5jdGlvbigpe3ZhciB0PXgucmVzdWx0KHRoaXMsInVybFJvb3QiKXx8eC5yZXN1bHQodGhpcy5jb2xsZWN0aW9uLCJ1cmwiKXx8VigpO2lmKHRoaXMuaXNOZXcoKSlyZXR1cm4gdDt2YXIgZT10aGlzLmdldCh0aGlzLmlkQXR0cmlidXRlKTtyZXR1cm4gdC5yZXBsYWNlKC9bXlwvXSQvLCIkJi8iKStlbmNvZGVVUklDb21wb25lbnQoZSl9LHBhcnNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuYXR0cmlidXRlcyl9LGlzTmV3OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaGFzKHRoaXMuaWRBdHRyaWJ1dGUpfSxpc1ZhbGlkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh7fSx4LmV4dGVuZCh7fSx0LHt2YWxpZGF0ZTp0cnVlfSkpfSxfdmFsaWRhdGU6ZnVuY3Rpb24odCxlKXtpZighZS52YWxpZGF0ZXx8IXRoaXMudmFsaWRhdGUpcmV0dXJuIHRydWU7dD14LmV4dGVuZCh7fSx0aGlzLmF0dHJpYnV0ZXMsdCk7dmFyIGk9dGhpcy52YWxpZGF0aW9uRXJyb3I9dGhpcy52YWxpZGF0ZSh0LGUpfHxudWxsO2lmKCFpKXJldHVybiB0cnVlO3RoaXMudHJpZ2dlcigiaW52YWxpZCIsdGhpcyxpLHguZXh0ZW5kKGUse3ZhbGlkYXRpb25FcnJvcjppfSkpO3JldHVybiBmYWxzZX19KTt2YXIgbT1oLkNvbGxlY3Rpb249ZnVuY3Rpb24odCxlKXtlfHwoZT17fSk7dGhpcy5wcmVpbml0aWFsaXplLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihlLm1vZGVsKXRoaXMubW9kZWw9ZS5tb2RlbDtpZihlLmNvbXBhcmF0b3IhPT12b2lkIDApdGhpcy5jb21wYXJhdG9yPWUuY29tcGFyYXRvcjt0aGlzLl9yZXNldCgpO3RoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYodCl0aGlzLnJlc2V0KHQseC5leHRlbmQoe3NpbGVudDp0cnVlfSxlKSl9O3ZhciB3PXthZGQ6dHJ1ZSxyZW1vdmU6dHJ1ZSxtZXJnZTp0cnVlfTt2YXIgXz17YWRkOnRydWUscmVtb3ZlOmZhbHNlfTt2YXIgRT1mdW5jdGlvbih0LGUsaSl7aT1NYXRoLm1pbihNYXRoLm1heChpLDApLHQubGVuZ3RoKTt2YXIgcj1BcnJheSh0Lmxlbmd0aC1pKTt2YXIgbj1lLmxlbmd0aDt2YXIgcztmb3Iocz0wO3M8ci5sZW5ndGg7cysrKXJbc109dFtzK2ldO2ZvcihzPTA7czxuO3MrKyl0W3MraV09ZVtzXTtmb3Iocz0wO3M8ci5sZW5ndGg7cysrKXRbcytuK2ldPXJbc119O3guZXh0ZW5kKG0ucHJvdG90eXBlLHIse21vZGVsOmcscHJlaW5pdGlhbGl6ZTpmdW5jdGlvbigpe30saW5pdGlhbGl6ZTpmdW5jdGlvbigpe30sdG9KU09OOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC50b0pTT04oZSl9KX0sc3luYzpmdW5jdGlvbigpe3JldHVybiBoLnN5bmMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxhZGQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zZXQodCx4LmV4dGVuZCh7bWVyZ2U6ZmFsc2V9LGUsXykpfSxyZW1vdmU6ZnVuY3Rpb24odCxlKXtlPXguZXh0ZW5kKHt9LGUpO3ZhciBpPSF4LmlzQXJyYXkodCk7dD1pP1t0XTp0LnNsaWNlKCk7dmFyIHI9dGhpcy5fcmVtb3ZlTW9kZWxzKHQsZSk7aWYoIWUuc2lsZW50JiZyLmxlbmd0aCl7ZS5jaGFuZ2VzPXthZGRlZDpbXSxtZXJnZWQ6W10scmVtb3ZlZDpyfTt0aGlzLnRyaWdnZXIoInVwZGF0ZSIsdGhpcyxlKX1yZXR1cm4gaT9yWzBdOnJ9LHNldDpmdW5jdGlvbih0LGUpe2lmKHQ9PW51bGwpcmV0dXJuO2U9eC5leHRlbmQoe30sdyxlKTtpZihlLnBhcnNlJiYhdGhpcy5faXNNb2RlbCh0KSl7dD10aGlzLnBhcnNlKHQsZSl8fFtdfXZhciBpPSF4LmlzQXJyYXkodCk7dD1pP1t0XTp0LnNsaWNlKCk7dmFyIHI9ZS5hdDtpZihyIT1udWxsKXI9K3I7aWYocj50aGlzLmxlbmd0aClyPXRoaXMubGVuZ3RoO2lmKHI8MClyKz10aGlzLmxlbmd0aCsxO3ZhciBuPVtdO3ZhciBzPVtdO3ZhciBhPVtdO3ZhciBvPVtdO3ZhciBoPXt9O3ZhciBsPWUuYWRkO3ZhciB1PWUubWVyZ2U7dmFyIGM9ZS5yZW1vdmU7dmFyIGY9ZmFsc2U7dmFyIGQ9dGhpcy5jb21wYXJhdG9yJiZyPT1udWxsJiZlLnNvcnQhPT1mYWxzZTt2YXIgdj14LmlzU3RyaW5nKHRoaXMuY29tcGFyYXRvcik/dGhpcy5jb21wYXJhdG9yOm51bGw7dmFyIHAsZztmb3IoZz0wO2c8dC5sZW5ndGg7ZysrKXtwPXRbZ107dmFyIG09dGhpcy5nZXQocCk7aWYobSl7aWYodSYmcCE9PW0pe3ZhciBfPXRoaXMuX2lzTW9kZWwocCk/cC5hdHRyaWJ1dGVzOnA7aWYoZS5wYXJzZSlfPW0ucGFyc2UoXyxlKTttLnNldChfLGUpO2EucHVzaChtKTtpZihkJiYhZilmPW0uaGFzQ2hhbmdlZCh2KX1pZighaFttLmNpZF0pe2hbbS5jaWRdPXRydWU7bi5wdXNoKG0pfXRbZ109bX1lbHNlIGlmKGwpe3A9dFtnXT10aGlzLl9wcmVwYXJlTW9kZWwocCxlKTtpZihwKXtzLnB1c2gocCk7dGhpcy5fYWRkUmVmZXJlbmNlKHAsZSk7aFtwLmNpZF09dHJ1ZTtuLnB1c2gocCl9fX1pZihjKXtmb3IoZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXtwPXRoaXMubW9kZWxzW2ddO2lmKCFoW3AuY2lkXSlvLnB1c2gocCl9aWYoby5sZW5ndGgpdGhpcy5fcmVtb3ZlTW9kZWxzKG8sZSl9dmFyIHk9ZmFsc2U7dmFyIGI9IWQmJmwmJmM7aWYobi5sZW5ndGgmJmIpe3k9dGhpcy5sZW5ndGghPT1uLmxlbmd0aHx8eC5zb21lKHRoaXMubW9kZWxzLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQhPT1uW2VdfSk7dGhpcy5tb2RlbHMubGVuZ3RoPTA7RSh0aGlzLm1vZGVscyxuLDApO3RoaXMubGVuZ3RoPXRoaXMubW9kZWxzLmxlbmd0aH1lbHNlIGlmKHMubGVuZ3RoKXtpZihkKWY9dHJ1ZTtFKHRoaXMubW9kZWxzLHMscj09bnVsbD90aGlzLmxlbmd0aDpyKTt0aGlzLmxlbmd0aD10aGlzLm1vZGVscy5sZW5ndGh9aWYoZil0aGlzLnNvcnQoe3NpbGVudDp0cnVlfSk7aWYoIWUuc2lsZW50KXtmb3IoZz0wO2c8cy5sZW5ndGg7ZysrKXtpZihyIT1udWxsKWUuaW5kZXg9citnO3A9c1tnXTtwLnRyaWdnZXIoImFkZCIscCx0aGlzLGUpfWlmKGZ8fHkpdGhpcy50cmlnZ2VyKCJzb3J0Iix0aGlzLGUpO2lmKHMubGVuZ3RofHxvLmxlbmd0aHx8YS5sZW5ndGgpe2UuY2hhbmdlcz17YWRkZWQ6cyxyZW1vdmVkOm8sbWVyZ2VkOmF9O3RoaXMudHJpZ2dlcigidXBkYXRlIix0aGlzLGUpfX1yZXR1cm4gaT90WzBdOnR9LHJlc2V0OmZ1bmN0aW9uKHQsZSl7ZT1lP3guY2xvbmUoZSk6e307Zm9yKHZhciBpPTA7aTx0aGlzLm1vZGVscy5sZW5ndGg7aSsrKXt0aGlzLl9yZW1vdmVSZWZlcmVuY2UodGhpcy5tb2RlbHNbaV0sZSl9ZS5wcmV2aW91c01vZGVscz10aGlzLm1vZGVsczt0aGlzLl9yZXNldCgpO3Q9dGhpcy5hZGQodCx4LmV4dGVuZCh7c2lsZW50OnRydWV9LGUpKTtpZighZS5zaWxlbnQpdGhpcy50cmlnZ2VyKCJyZXNldCIsdGhpcyxlKTtyZXR1cm4gdH0scHVzaDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFkZCh0LHguZXh0ZW5kKHthdDp0aGlzLmxlbmd0aH0sZSkpfSxwb3A6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5hdCh0aGlzLmxlbmd0aC0xKTtyZXR1cm4gdGhpcy5yZW1vdmUoZSx0KX0sdW5zaGlmdDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFkZCh0LHguZXh0ZW5kKHthdDowfSxlKSl9LHNoaWZ0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYXQoMCk7cmV0dXJuIHRoaXMucmVtb3ZlKGUsdCl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkodGhpcy5tb2RlbHMsYXJndW1lbnRzKX0sZ2V0OmZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHZvaWQgMDtyZXR1cm4gdGhpcy5fYnlJZFt0XXx8dGhpcy5fYnlJZFt0aGlzLm1vZGVsSWQodGhpcy5faXNNb2RlbCh0KT90LmF0dHJpYnV0ZXM6dCx0LmlkQXR0cmlidXRlKV18fHQuY2lkJiZ0aGlzLl9ieUlkW3QuY2lkXX0saGFzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldCh0KSE9bnVsbH0sYXQ6ZnVuY3Rpb24odCl7aWYodDwwKXQrPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLm1vZGVsc1t0XX0sd2hlcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1tlPyJmaW5kIjoiZmlsdGVyIl0odCl9LGZpbmRXaGVyZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53aGVyZSh0LHRydWUpfSxzb3J0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29tcGFyYXRvcjtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzb3J0IGEgc2V0IHdpdGhvdXQgYSBjb21wYXJhdG9yIik7dHx8KHQ9e30pO3ZhciBpPWUubGVuZ3RoO2lmKHguaXNGdW5jdGlvbihlKSllPWUuYmluZCh0aGlzKTtpZihpPT09MXx8eC5pc1N0cmluZyhlKSl7dGhpcy5tb2RlbHM9dGhpcy5zb3J0QnkoZSl9ZWxzZXt0aGlzLm1vZGVscy5zb3J0KGUpfWlmKCF0LnNpbGVudCl0aGlzLnRyaWdnZXIoInNvcnQiLHRoaXMsdCk7cmV0dXJuIHRoaXN9LHBsdWNrOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcCh0KyIiKX0sZmV0Y2g6ZnVuY3Rpb24oaSl7aT14LmV4dGVuZCh7cGFyc2U6dHJ1ZX0saSk7dmFyIHI9aS5zdWNjZXNzO3ZhciBuPXRoaXM7aS5zdWNjZXNzPWZ1bmN0aW9uKHQpe3ZhciBlPWkucmVzZXQ/InJlc2V0Ijoic2V0IjtuW2VdKHQsaSk7aWYocilyLmNhbGwoaS5jb250ZXh0LG4sdCxpKTtuLnRyaWdnZXIoInN5bmMiLG4sdCxpKX07Ryh0aGlzLGkpO3JldHVybiB0aGlzLnN5bmMoInJlYWQiLHRoaXMsaSl9LGNyZWF0ZTpmdW5jdGlvbih0LGUpe2U9ZT94LmNsb25lKGUpOnt9O3ZhciByPWUud2FpdDt0PXRoaXMuX3ByZXBhcmVNb2RlbCh0LGUpO2lmKCF0KXJldHVybiBmYWxzZTtpZighcil0aGlzLmFkZCh0LGUpO3ZhciBuPXRoaXM7dmFyIHM9ZS5zdWNjZXNzO2Uuc3VjY2Vzcz1mdW5jdGlvbih0LGUsaSl7aWYociluLmFkZCh0LGkpO2lmKHMpcy5jYWxsKGkuY29udGV4dCx0LGUsaSl9O3Quc2F2ZShudWxsLGUpO3JldHVybiB0fSxwYXJzZTpmdW5jdGlvbih0LGUpe3JldHVybiB0fSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLm1vZGVscyx7bW9kZWw6dGhpcy5tb2RlbCxjb21wYXJhdG9yOnRoaXMuY29tcGFyYXRvcn0pfSxtb2RlbElkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZXx8dGhpcy5tb2RlbC5wcm90b3R5cGUuaWRBdHRyaWJ1dGV8fCJpZCJdfSx2YWx1ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGIodGhpcyxJKX0sa2V5czpmdW5jdGlvbigpe3JldHVybiBuZXcgYih0aGlzLGspfSxlbnRyaWVzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBiKHRoaXMsUyl9LF9yZXNldDpmdW5jdGlvbigpe3RoaXMubGVuZ3RoPTA7dGhpcy5tb2RlbHM9W107dGhpcy5fYnlJZD17fX0sX3ByZXBhcmVNb2RlbDpmdW5jdGlvbih0LGUpe2lmKHRoaXMuX2lzTW9kZWwodCkpe2lmKCF0LmNvbGxlY3Rpb24pdC5jb2xsZWN0aW9uPXRoaXM7cmV0dXJuIHR9ZT1lP3guY2xvbmUoZSk6e307ZS5jb2xsZWN0aW9uPXRoaXM7dmFyIGk7aWYodGhpcy5tb2RlbC5wcm90b3R5cGUpe2k9bmV3IHRoaXMubW9kZWwodCxlKX1lbHNle2k9dGhpcy5tb2RlbCh0LGUpfWlmKCFpLnZhbGlkYXRpb25FcnJvcilyZXR1cm4gaTt0aGlzLnRyaWdnZXIoImludmFsaWQiLHRoaXMsaS52YWxpZGF0aW9uRXJyb3IsZSk7cmV0dXJuIGZhbHNlfSxfcmVtb3ZlTW9kZWxzOmZ1bmN0aW9uKHQsZSl7dmFyIGk9W107Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRoaXMuZ2V0KHRbcl0pO2lmKCFuKWNvbnRpbnVlO3ZhciBzPXRoaXMuaW5kZXhPZihuKTt0aGlzLm1vZGVscy5zcGxpY2UocywxKTt0aGlzLmxlbmd0aC0tO2RlbGV0ZSB0aGlzLl9ieUlkW24uY2lkXTt2YXIgYT10aGlzLm1vZGVsSWQobi5hdHRyaWJ1dGVzLG4uaWRBdHRyaWJ1dGUpO2lmKGEhPW51bGwpZGVsZXRlIHRoaXMuX2J5SWRbYV07aWYoIWUuc2lsZW50KXtlLmluZGV4PXM7bi50cmlnZ2VyKCJyZW1vdmUiLG4sdGhpcyxlKX1pLnB1c2gobik7dGhpcy5fcmVtb3ZlUmVmZXJlbmNlKG4sZSl9cmV0dXJuIGl9LF9pc01vZGVsOmZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgZ30sX2FkZFJlZmVyZW5jZTpmdW5jdGlvbih0LGUpe3RoaXMuX2J5SWRbdC5jaWRdPXQ7dmFyIGk9dGhpcy5tb2RlbElkKHQuYXR0cmlidXRlcyx0LmlkQXR0cmlidXRlKTtpZihpIT1udWxsKXRoaXMuX2J5SWRbaV09dDt0Lm9uKCJhbGwiLHRoaXMuX29uTW9kZWxFdmVudCx0aGlzKX0sX3JlbW92ZVJlZmVyZW5jZTpmdW5jdGlvbih0LGUpe2RlbGV0ZSB0aGlzLl9ieUlkW3QuY2lkXTt2YXIgaT10aGlzLm1vZGVsSWQodC5hdHRyaWJ1dGVzLHQuaWRBdHRyaWJ1dGUpO2lmKGkhPW51bGwpZGVsZXRlIHRoaXMuX2J5SWRbaV07aWYodGhpcz09PXQuY29sbGVjdGlvbilkZWxldGUgdC5jb2xsZWN0aW9uO3Qub2ZmKCJhbGwiLHRoaXMuX29uTW9kZWxFdmVudCx0aGlzKX0sX29uTW9kZWxFdmVudDpmdW5jdGlvbih0LGUsaSxyKXtpZihlKXtpZigodD09PSJhZGQifHx0PT09InJlbW92ZSIpJiZpIT09dGhpcylyZXR1cm47aWYodD09PSJkZXN0cm95Iil0aGlzLnJlbW92ZShlLHIpO2lmKHQ9PT0iY2hhbmdlSWQiKXt2YXIgbj10aGlzLm1vZGVsSWQoZS5wcmV2aW91c0F0dHJpYnV0ZXMoKSxlLmlkQXR0cmlidXRlKTt2YXIgcz10aGlzLm1vZGVsSWQoZS5hdHRyaWJ1dGVzLGUuaWRBdHRyaWJ1dGUpO2lmKG4hPW51bGwpZGVsZXRlIHRoaXMuX2J5SWRbbl07aWYocyE9bnVsbCl0aGlzLl9ieUlkW3NdPWV9fXRoaXMudHJpZ2dlci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSk7dmFyIHk9dHlwZW9mIFN5bWJvbD09PSJmdW5jdGlvbiImJlN5bWJvbC5pdGVyYXRvcjtpZih5KXttLnByb3RvdHlwZVt5XT1tLnByb3RvdHlwZS52YWx1ZXN9dmFyIGI9ZnVuY3Rpb24odCxlKXt0aGlzLl9jb2xsZWN0aW9uPXQ7dGhpcy5fa2luZD1lO3RoaXMuX2luZGV4PTB9O3ZhciBJPTE7dmFyIGs9Mjt2YXIgUz0zO2lmKHkpe2IucHJvdG90eXBlW3ldPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fWIucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9jb2xsZWN0aW9uKXtpZih0aGlzLl9pbmRleDx0aGlzLl9jb2xsZWN0aW9uLmxlbmd0aCl7dmFyIHQ9dGhpcy5fY29sbGVjdGlvbi5hdCh0aGlzLl9pbmRleCk7dGhpcy5faW5kZXgrKzt2YXIgZTtpZih0aGlzLl9raW5kPT09SSl7ZT10fWVsc2V7dmFyIGk9dGhpcy5fY29sbGVjdGlvbi5tb2RlbElkKHQuYXR0cmlidXRlcyx0LmlkQXR0cmlidXRlKTtpZih0aGlzLl9raW5kPT09ayl7ZT1pfWVsc2V7ZT1baSx0XX19cmV0dXJue3ZhbHVlOmUsZG9uZTpmYWxzZX19dGhpcy5fY29sbGVjdGlvbj12b2lkIDB9cmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOnRydWV9fTt2YXIgQT1oLlZpZXc9ZnVuY3Rpb24odCl7dGhpcy5jaWQ9eC51bmlxdWVJZCgidmlldyIpO3RoaXMucHJlaW5pdGlhbGl6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7eC5leHRlbmQodGhpcyx4LnBpY2sodCxQKSk7dGhpcy5fZW5zdXJlRWxlbWVudCgpO3RoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3ZhciBUPS9eKFxTKylccyooLiopJC87dmFyIFA9WyJtb2RlbCIsImNvbGxlY3Rpb24iLCJlbCIsImlkIiwiYXR0cmlidXRlcyIsImNsYXNzTmFtZSIsInRhZ05hbWUiLCJldmVudHMiXTt4LmV4dGVuZChBLnByb3RvdHlwZSxyLHt0YWdOYW1lOiJkaXYiLCQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuJGVsLmZpbmQodCl9LHByZWluaXRpYWxpemU6ZnVuY3Rpb24oKXt9LGluaXRpYWxpemU6ZnVuY3Rpb24oKXt9LHJlbmRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVFbGVtZW50KCk7dGhpcy5zdG9wTGlzdGVuaW5nKCk7cmV0dXJuIHRoaXN9LF9yZW1vdmVFbGVtZW50OmZ1bmN0aW9uKCl7dGhpcy4kZWwucmVtb3ZlKCl9LHNldEVsZW1lbnQ6ZnVuY3Rpb24odCl7dGhpcy51bmRlbGVnYXRlRXZlbnRzKCk7dGhpcy5fc2V0RWxlbWVudCh0KTt0aGlzLmRlbGVnYXRlRXZlbnRzKCk7cmV0dXJuIHRoaXN9LF9zZXRFbGVtZW50OmZ1bmN0aW9uKHQpe3RoaXMuJGVsPXQgaW5zdGFuY2VvZiBoLiQ/dDpoLiQodCk7dGhpcy5lbD10aGlzLiRlbFswXX0sZGVsZWdhdGVFdmVudHM6ZnVuY3Rpb24odCl7dHx8KHQ9eC5yZXN1bHQodGhpcywiZXZlbnRzIikpO2lmKCF0KXJldHVybiB0aGlzO3RoaXMudW5kZWxlZ2F0ZUV2ZW50cygpO2Zvcih2YXIgZSBpbiB0KXt2YXIgaT10W2VdO2lmKCF4LmlzRnVuY3Rpb24oaSkpaT10aGlzW2ldO2lmKCFpKWNvbnRpbnVlO3ZhciByPWUubWF0Y2goVCk7dGhpcy5kZWxlZ2F0ZShyWzFdLHJbMl0saS5iaW5kKHRoaXMpKX1yZXR1cm4gdGhpc30sZGVsZWdhdGU6ZnVuY3Rpb24odCxlLGkpe3RoaXMuJGVsLm9uKHQrIi5kZWxlZ2F0ZUV2ZW50cyIrdGhpcy5jaWQsZSxpKTtyZXR1cm4gdGhpc30sdW5kZWxlZ2F0ZUV2ZW50czpmdW5jdGlvbigpe2lmKHRoaXMuJGVsKXRoaXMuJGVsLm9mZigiLmRlbGVnYXRlRXZlbnRzIit0aGlzLmNpZCk7cmV0dXJuIHRoaXN9LHVuZGVsZWdhdGU6ZnVuY3Rpb24odCxlLGkpe3RoaXMuJGVsLm9mZih0KyIuZGVsZWdhdGVFdmVudHMiK3RoaXMuY2lkLGUsaSk7cmV0dXJuIHRoaXN9LF9jcmVhdGVFbGVtZW50OmZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpfSxfZW5zdXJlRWxlbWVudDpmdW5jdGlvbigpe2lmKCF0aGlzLmVsKXt2YXIgdD14LmV4dGVuZCh7fSx4LnJlc3VsdCh0aGlzLCJhdHRyaWJ1dGVzIikpO2lmKHRoaXMuaWQpdC5pZD14LnJlc3VsdCh0aGlzLCJpZCIpO2lmKHRoaXMuY2xhc3NOYW1lKXRbImNsYXNzIl09eC5yZXN1bHQodGhpcywiY2xhc3NOYW1lIik7dGhpcy5zZXRFbGVtZW50KHRoaXMuX2NyZWF0ZUVsZW1lbnQoeC5yZXN1bHQodGhpcywidGFnTmFtZSIpKSk7dGhpcy5fc2V0QXR0cmlidXRlcyh0KX1lbHNle3RoaXMuc2V0RWxlbWVudCh4LnJlc3VsdCh0aGlzLCJlbCIpKX19LF9zZXRBdHRyaWJ1dGVzOmZ1bmN0aW9uKHQpe3RoaXMuJGVsLmF0dHIodCl9fSk7dmFyIEg9ZnVuY3Rpb24ocix0LG4scyl7c3dpdGNoKHQpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcltuXSh0aGlzW3NdKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gcltuXSh0aGlzW3NdLHQpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJbbl0odGhpc1tzXSxDKHQsdGhpcyksZSl9O2Nhc2UgNDpyZXR1cm4gZnVuY3Rpb24odCxlLGkpe3JldHVybiByW25dKHRoaXNbc10sQyh0LHRoaXMpLGUsaSl9O2RlZmF1bHQ6cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9YS5jYWxsKGFyZ3VtZW50cyk7dC51bnNoaWZ0KHRoaXNbc10pO3JldHVybiByW25dLmFwcGx5KHIsdCl9fX07dmFyICQ9ZnVuY3Rpb24oaSxyLHQsbil7eC5lYWNoKHQsZnVuY3Rpb24odCxlKXtpZihyW2VdKWkucHJvdG90eXBlW2VdPUgocix0LGUsbil9KX07dmFyIEM9ZnVuY3Rpb24oZSx0KXtpZih4LmlzRnVuY3Rpb24oZSkpcmV0dXJuIGU7aWYoeC5pc09iamVjdChlKSYmIXQuX2lzTW9kZWwoZSkpcmV0dXJuIFIoZSk7aWYoeC5pc1N0cmluZyhlKSlyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0KGUpfTtyZXR1cm4gZX07dmFyIFI9ZnVuY3Rpb24odCl7dmFyIGU9eC5tYXRjaGVzKHQpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0LmF0dHJpYnV0ZXMpfX07dmFyIE09e2ZvckVhY2g6MyxlYWNoOjMsbWFwOjMsY29sbGVjdDozLHJlZHVjZTowLGZvbGRsOjAsaW5qZWN0OjAscmVkdWNlUmlnaHQ6MCxmb2xkcjowLGZpbmQ6MyxkZXRlY3Q6MyxmaWx0ZXI6MyxzZWxlY3Q6MyxyZWplY3Q6MyxldmVyeTozLGFsbDozLHNvbWU6Myxhbnk6MyxpbmNsdWRlOjMsaW5jbHVkZXM6Myxjb250YWluczozLGludm9rZTowLG1heDozLG1pbjozLHRvQXJyYXk6MSxzaXplOjEsZmlyc3Q6MyxoZWFkOjMsdGFrZTozLGluaXRpYWw6MyxyZXN0OjMsdGFpbDozLGRyb3A6MyxsYXN0OjMsd2l0aG91dDowLGRpZmZlcmVuY2U6MCxpbmRleE9mOjMsc2h1ZmZsZToxLGxhc3RJbmRleE9mOjMsaXNFbXB0eToxLGNoYWluOjEsc2FtcGxlOjMscGFydGl0aW9uOjMsZ3JvdXBCeTozLGNvdW50Qnk6Myxzb3J0Qnk6MyxpbmRleEJ5OjMsZmluZEluZGV4OjMsZmluZExhc3RJbmRleDozfTt2YXIgTj17a2V5czoxLHZhbHVlczoxLHBhaXJzOjEsaW52ZXJ0OjEscGljazowLG9taXQ6MCxjaGFpbjoxLGlzRW1wdHk6MX07eC5lYWNoKFtbbSxNLCJtb2RlbHMiXSxbZyxOLCJhdHRyaWJ1dGVzIl1dLGZ1bmN0aW9uKHQpe3ZhciBpPXRbMF0sZT10WzFdLHI9dFsyXTtpLm1peGluPWZ1bmN0aW9uKHQpe3ZhciBlPXgucmVkdWNlKHguZnVuY3Rpb25zKHQpLGZ1bmN0aW9uKHQsZSl7dFtlXT0wO3JldHVybiB0fSx7fSk7JChpLHQsZSxyKX07JChpLHgsZSxyKX0pO2guc3luYz1mdW5jdGlvbih0LGUscil7dmFyIGk9alt0XTt4LmRlZmF1bHRzKHJ8fChyPXt9KSx7ZW11bGF0ZUhUVFA6aC5lbXVsYXRlSFRUUCxlbXVsYXRlSlNPTjpoLmVtdWxhdGVKU09OfSk7dmFyIG49e3R5cGU6aSxkYXRhVHlwZToianNvbiJ9O2lmKCFyLnVybCl7bi51cmw9eC5yZXN1bHQoZSwidXJsIil8fFYoKX1pZihyLmRhdGE9PW51bGwmJmUmJih0PT09ImNyZWF0ZSJ8fHQ9PT0idXBkYXRlInx8dD09PSJwYXRjaCIpKXtuLmNvbnRlbnRUeXBlPSJhcHBsaWNhdGlvbi9qc29uIjtuLmRhdGE9SlNPTi5zdHJpbmdpZnkoci5hdHRyc3x8ZS50b0pTT04ocikpfWlmKHIuZW11bGF0ZUpTT04pe24uY29udGVudFR5cGU9ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI7bi5kYXRhPW4uZGF0YT97bW9kZWw6bi5kYXRhfTp7fX1pZihyLmVtdWxhdGVIVFRQJiYoaT09PSJQVVQifHxpPT09IkRFTEVURSJ8fGk9PT0iUEFUQ0giKSl7bi50eXBlPSJQT1NUIjtpZihyLmVtdWxhdGVKU09OKW4uZGF0YS5fbWV0aG9kPWk7dmFyIHM9ci5iZWZvcmVTZW5kO3IuYmVmb3JlU2VuZD1mdW5jdGlvbih0KXt0LnNldFJlcXVlc3RIZWFkZXIoIlgtSFRUUC1NZXRob2QtT3ZlcnJpZGUiLGkpO2lmKHMpcmV0dXJuIHMuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1pZihuLnR5cGUhPT0iR0VUIiYmIXIuZW11bGF0ZUpTT04pe24ucHJvY2Vzc0RhdGE9ZmFsc2V9dmFyIGE9ci5lcnJvcjtyLmVycm9yPWZ1bmN0aW9uKHQsZSxpKXtyLnRleHRTdGF0dXM9ZTtyLmVycm9yVGhyb3duPWk7aWYoYSlhLmNhbGwoci5jb250ZXh0LHQsZSxpKX07dmFyIG89ci54aHI9aC5hamF4KHguZXh0ZW5kKG4scikpO2UudHJpZ2dlcigicmVxdWVzdCIsZSxvLHIpO3JldHVybiBvfTt2YXIgaj17Y3JlYXRlOiJQT1NUIix1cGRhdGU6IlBVVCIscGF0Y2g6IlBBVENIIixkZWxldGU6IkRFTEVURSIscmVhZDoiR0VUIn07aC5hamF4PWZ1bmN0aW9uKCl7cmV0dXJuIGguJC5hamF4LmFwcGx5KGguJCxhcmd1bWVudHMpfTt2YXIgTz1oLlJvdXRlcj1mdW5jdGlvbih0KXt0fHwodD17fSk7dGhpcy5wcmVpbml0aWFsaXplLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZih0LnJvdXRlcyl0aGlzLnJvdXRlcz10LnJvdXRlczt0aGlzLl9iaW5kUm91dGVzKCk7dGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIFU9L1woKC4qPylcKS9nO3ZhciB6PS8oXChcPyk/Olx3Ky9nO3ZhciBxPS9cKlx3Ky9nO3ZhciBGPS9bXC17fVxbXF0rPy4sXFxcXiR8I1xzXS9nO3guZXh0ZW5kKE8ucHJvdG90eXBlLHIse3ByZWluaXRpYWxpemU6ZnVuY3Rpb24oKXt9LGluaXRpYWxpemU6ZnVuY3Rpb24oKXt9LHJvdXRlOmZ1bmN0aW9uKGkscixuKXtpZigheC5pc1JlZ0V4cChpKSlpPXRoaXMuX3JvdXRlVG9SZWdFeHAoaSk7aWYoeC5pc0Z1bmN0aW9uKHIpKXtuPXI7cj0iIn1pZighbiluPXRoaXNbcl07dmFyIHM9dGhpcztoLmhpc3Rvcnkucm91dGUoaSxmdW5jdGlvbih0KXt2YXIgZT1zLl9leHRyYWN0UGFyYW1ldGVycyhpLHQpO2lmKHMuZXhlY3V0ZShuLGUscikhPT1mYWxzZSl7cy50cmlnZ2VyLmFwcGx5KHMsWyJyb3V0ZToiK3JdLmNvbmNhdChlKSk7cy50cmlnZ2VyKCJyb3V0ZSIscixlKTtoLmhpc3RvcnkudHJpZ2dlcigicm91dGUiLHMscixlKX19KTtyZXR1cm4gdGhpc30sZXhlY3V0ZTpmdW5jdGlvbih0LGUsaSl7aWYodCl0LmFwcGx5KHRoaXMsZSl9LG5hdmlnYXRlOmZ1bmN0aW9uKHQsZSl7aC5oaXN0b3J5Lm5hdmlnYXRlKHQsZSk7cmV0dXJuIHRoaXN9LF9iaW5kUm91dGVzOmZ1bmN0aW9uKCl7aWYoIXRoaXMucm91dGVzKXJldHVybjt0aGlzLnJvdXRlcz14LnJlc3VsdCh0aGlzLCJyb3V0ZXMiKTt2YXIgdCxlPXgua2V5cyh0aGlzLnJvdXRlcyk7d2hpbGUoKHQ9ZS5wb3AoKSkhPW51bGwpe3RoaXMucm91dGUodCx0aGlzLnJvdXRlc1t0XSl9fSxfcm91dGVUb1JlZ0V4cDpmdW5jdGlvbih0KXt0PXQucmVwbGFjZShGLCJcXCQmIikucmVwbGFjZShVLCIoPzokMSk/IikucmVwbGFjZSh6LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/dDoiKFteLz9dKykifSkucmVwbGFjZShxLCIoW14/XSo/KSIpO3JldHVybiBuZXcgUmVnRXhwKCJeIit0KyIoPzpcXD8oW1xcc1xcU10qKSk/JCIpfSxfZXh0cmFjdFBhcmFtZXRlcnM6ZnVuY3Rpb24odCxlKXt2YXIgaT10LmV4ZWMoZSkuc2xpY2UoMSk7cmV0dXJuIHgubWFwKGksZnVuY3Rpb24odCxlKXtpZihlPT09aS5sZW5ndGgtMSlyZXR1cm4gdHx8bnVsbDtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodCk6bnVsbH0pfX0pO3ZhciBCPWguSGlzdG9yeT1mdW5jdGlvbigpe3RoaXMuaGFuZGxlcnM9W107dGhpcy5jaGVja1VybD10aGlzLmNoZWNrVXJsLmJpbmQodGhpcyk7aWYodHlwZW9mIHdpbmRvdyE9PSJ1bmRlZmluZWQiKXt0aGlzLmxvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbjt0aGlzLmhpc3Rvcnk9d2luZG93Lmhpc3Rvcnl9fTt2YXIgSj0vXlsjXC9dfFxzKyQvZzt2YXIgTD0vXlwvK3xcLyskL2c7dmFyIFc9LyMuKiQvO0Iuc3RhcnRlZD1mYWxzZTt4LmV4dGVuZChCLnByb3RvdHlwZSxyLHtpbnRlcnZhbDo1MCxhdFJvb3Q6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1teXC9dJC8sIiQmLyIpO3JldHVybiB0PT09dGhpcy5yb290JiYhdGhpcy5nZXRTZWFyY2goKX0sbWF0Y2hSb290OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kZWNvZGVGcmFnbWVudCh0aGlzLmxvY2F0aW9uLnBhdGhuYW1lKTt2YXIgZT10LnNsaWNlKDAsdGhpcy5yb290Lmxlbmd0aC0xKSsiLyI7cmV0dXJuIGU9PT10aGlzLnJvb3R9LGRlY29kZUZyYWdtZW50OmZ1bmN0aW9uKHQpe3JldHVybiBkZWNvZGVVUkkodC5yZXBsYWNlKC8lMjUvZywiJTI1MjUiKSl9LGdldFNlYXJjaDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubG9jYXRpb24uaHJlZi5yZXBsYWNlKC8jLiovLCIiKS5tYXRjaCgvXD8uKy8pO3JldHVybiB0P3RbMF06IiJ9LGdldEhhc2g6ZnVuY3Rpb24odCl7dmFyIGU9KHR8fHRoaXMpLmxvY2F0aW9uLmhyZWYubWF0Y2goLyMoLiopJC8pO3JldHVybiBlP2VbMV06IiJ9LGdldFBhdGg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRlY29kZUZyYWdtZW50KHRoaXMubG9jYXRpb24ucGF0aG5hbWUrdGhpcy5nZXRTZWFyY2goKSkuc2xpY2UodGhpcy5yb290Lmxlbmd0aC0xKTtyZXR1cm4gdC5jaGFyQXQoMCk9PT0iLyI/dC5zbGljZSgxKTp0fSxnZXRGcmFnbWVudDpmdW5jdGlvbih0KXtpZih0PT1udWxsKXtpZih0aGlzLl91c2VQdXNoU3RhdGV8fCF0aGlzLl93YW50c0hhc2hDaGFuZ2Upe3Q9dGhpcy5nZXRQYXRoKCl9ZWxzZXt0PXRoaXMuZ2V0SGFzaCgpfX1yZXR1cm4gdC5yZXBsYWNlKEosIiIpfSxzdGFydDpmdW5jdGlvbih0KXtpZihCLnN0YXJ0ZWQpdGhyb3cgbmV3IEVycm9yKCJCYWNrYm9uZS5oaXN0b3J5IGhhcyBhbHJlYWR5IGJlZW4gc3RhcnRlZCIpO0Iuc3RhcnRlZD10cnVlO3RoaXMub3B0aW9ucz14LmV4dGVuZCh7cm9vdDoiLyJ9LHRoaXMub3B0aW9ucyx0KTt0aGlzLnJvb3Q9dGhpcy5vcHRpb25zLnJvb3Q7dGhpcy5fd2FudHNIYXNoQ2hhbmdlPXRoaXMub3B0aW9ucy5oYXNoQ2hhbmdlIT09ZmFsc2U7dGhpcy5faGFzSGFzaENoYW5nZT0ib25oYXNoY2hhbmdlImluIHdpbmRvdyYmKGRvY3VtZW50LmRvY3VtZW50TW9kZT09PXZvaWQgMHx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPjcpO3RoaXMuX3VzZUhhc2hDaGFuZ2U9dGhpcy5fd2FudHNIYXNoQ2hhbmdlJiZ0aGlzLl9oYXNIYXNoQ2hhbmdlO3RoaXMuX3dhbnRzUHVzaFN0YXRlPSEhdGhpcy5vcHRpb25zLnB1c2hTdGF0ZTt0aGlzLl9oYXNQdXNoU3RhdGU9ISEodGhpcy5oaXN0b3J5JiZ0aGlzLmhpc3RvcnkucHVzaFN0YXRlKTt0aGlzLl91c2VQdXNoU3RhdGU9dGhpcy5fd2FudHNQdXNoU3RhdGUmJnRoaXMuX2hhc1B1c2hTdGF0ZTt0aGlzLmZyYWdtZW50PXRoaXMuZ2V0RnJhZ21lbnQoKTt0aGlzLnJvb3Q9KCIvIit0aGlzLnJvb3QrIi8iKS5yZXBsYWNlKEwsIi8iKTtpZih0aGlzLl93YW50c0hhc2hDaGFuZ2UmJnRoaXMuX3dhbnRzUHVzaFN0YXRlKXtpZighdGhpcy5faGFzUHVzaFN0YXRlJiYhdGhpcy5hdFJvb3QoKSl7dmFyIGU9dGhpcy5yb290LnNsaWNlKDAsLTEpfHwiLyI7dGhpcy5sb2NhdGlvbi5yZXBsYWNlKGUrIiMiK3RoaXMuZ2V0UGF0aCgpKTtyZXR1cm4gdHJ1ZX1lbHNlIGlmKHRoaXMuX2hhc1B1c2hTdGF0ZSYmdGhpcy5hdFJvb3QoKSl7dGhpcy5uYXZpZ2F0ZSh0aGlzLmdldEhhc2goKSx7cmVwbGFjZTp0cnVlfSl9fWlmKCF0aGlzLl9oYXNIYXNoQ2hhbmdlJiZ0aGlzLl93YW50c0hhc2hDaGFuZ2UmJiF0aGlzLl91c2VQdXNoU3RhdGUpe3RoaXMuaWZyYW1lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO3RoaXMuaWZyYW1lLnNyYz0iamF2YXNjcmlwdDowIjt0aGlzLmlmcmFtZS5zdHlsZS5kaXNwbGF5PSJub25lIjt0aGlzLmlmcmFtZS50YWJJbmRleD0tMTt2YXIgaT1kb2N1bWVudC5ib2R5O3ZhciByPWkuaW5zZXJ0QmVmb3JlKHRoaXMuaWZyYW1lLGkuZmlyc3RDaGlsZCkuY29udGVudFdpbmRvdztyLmRvY3VtZW50Lm9wZW4oKTtyLmRvY3VtZW50LmNsb3NlKCk7ci5sb2NhdGlvbi5oYXNoPSIjIit0aGlzLmZyYWdtZW50fXZhciBuPXdpbmRvdy5hZGRFdmVudExpc3RlbmVyfHxmdW5jdGlvbih0LGUpe3JldHVybiBhdHRhY2hFdmVudCgib24iK3QsZSl9O2lmKHRoaXMuX3VzZVB1c2hTdGF0ZSl7bigicG9wc3RhdGUiLHRoaXMuY2hlY2tVcmwsZmFsc2UpfWVsc2UgaWYodGhpcy5fdXNlSGFzaENoYW5nZSYmIXRoaXMuaWZyYW1lKXtuKCJoYXNoY2hhbmdlIix0aGlzLmNoZWNrVXJsLGZhbHNlKX1lbHNlIGlmKHRoaXMuX3dhbnRzSGFzaENoYW5nZSl7dGhpcy5fY2hlY2tVcmxJbnRlcnZhbD1zZXRJbnRlcnZhbCh0aGlzLmNoZWNrVXJsLHRoaXMuaW50ZXJ2YWwpfWlmKCF0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiB0aGlzLmxvYWRVcmwoKX0sc3RvcDpmdW5jdGlvbigpe3ZhciB0PXdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyfHxmdW5jdGlvbih0LGUpe3JldHVybiBkZXRhY2hFdmVudCgib24iK3QsZSl9O2lmKHRoaXMuX3VzZVB1c2hTdGF0ZSl7dCgicG9wc3RhdGUiLHRoaXMuY2hlY2tVcmwsZmFsc2UpfWVsc2UgaWYodGhpcy5fdXNlSGFzaENoYW5nZSYmIXRoaXMuaWZyYW1lKXt0KCJoYXNoY2hhbmdlIix0aGlzLmNoZWNrVXJsLGZhbHNlKX1pZih0aGlzLmlmcmFtZSl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLmlmcmFtZSk7dGhpcy5pZnJhbWU9bnVsbH1pZih0aGlzLl9jaGVja1VybEludGVydmFsKWNsZWFySW50ZXJ2YWwodGhpcy5fY2hlY2tVcmxJbnRlcnZhbCk7Qi5zdGFydGVkPWZhbHNlfSxyb3V0ZTpmdW5jdGlvbih0LGUpe3RoaXMuaGFuZGxlcnMudW5zaGlmdCh7cm91dGU6dCxjYWxsYmFjazplfSl9LGNoZWNrVXJsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0RnJhZ21lbnQoKTtpZihlPT09dGhpcy5mcmFnbWVudCYmdGhpcy5pZnJhbWUpe2U9dGhpcy5nZXRIYXNoKHRoaXMuaWZyYW1lLmNvbnRlbnRXaW5kb3cpfWlmKGU9PT10aGlzLmZyYWdtZW50KXJldHVybiBmYWxzZTtpZih0aGlzLmlmcmFtZSl0aGlzLm5hdmlnYXRlKGUpO3RoaXMubG9hZFVybCgpfSxsb2FkVXJsOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLm1hdGNoUm9vdCgpKXJldHVybiBmYWxzZTtlPXRoaXMuZnJhZ21lbnQ9dGhpcy5nZXRGcmFnbWVudChlKTtyZXR1cm4geC5zb21lKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24odCl7aWYodC5yb3V0ZS50ZXN0KGUpKXt0LmNhbGxiYWNrKGUpO3JldHVybiB0cnVlfX0pfSxuYXZpZ2F0ZTpmdW5jdGlvbih0LGUpe2lmKCFCLnN0YXJ0ZWQpcmV0dXJuIGZhbHNlO2lmKCFlfHxlPT09dHJ1ZSllPXt0cmlnZ2VyOiEhZX07dD10aGlzLmdldEZyYWdtZW50KHR8fCIiKTt2YXIgaT10aGlzLnJvb3Q7aWYodD09PSIifHx0LmNoYXJBdCgwKT09PSI/Iil7aT1pLnNsaWNlKDAsLTEpfHwiLyJ9dmFyIHI9aSt0O3Q9dC5yZXBsYWNlKFcsIiIpO3ZhciBuPXRoaXMuZGVjb2RlRnJhZ21lbnQodCk7aWYodGhpcy5mcmFnbWVudD09PW4pcmV0dXJuO3RoaXMuZnJhZ21lbnQ9bjtpZih0aGlzLl91c2VQdXNoU3RhdGUpe3RoaXMuaGlzdG9yeVtlLnJlcGxhY2U/InJlcGxhY2VTdGF0ZSI6InB1c2hTdGF0ZSJdKHt9LGRvY3VtZW50LnRpdGxlLHIpfWVsc2UgaWYodGhpcy5fd2FudHNIYXNoQ2hhbmdlKXt0aGlzLl91cGRhdGVIYXNoKHRoaXMubG9jYXRpb24sdCxlLnJlcGxhY2UpO2lmKHRoaXMuaWZyYW1lJiZ0IT09dGhpcy5nZXRIYXNoKHRoaXMuaWZyYW1lLmNvbnRlbnRXaW5kb3cpKXt2YXIgcz10aGlzLmlmcmFtZS5jb250ZW50V2luZG93O2lmKCFlLnJlcGxhY2Upe3MuZG9jdW1lbnQub3BlbigpO3MuZG9jdW1lbnQuY2xvc2UoKX10aGlzLl91cGRhdGVIYXNoKHMubG9jYXRpb24sdCxlLnJlcGxhY2UpfX1lbHNle3JldHVybiB0aGlzLmxvY2F0aW9uLmFzc2lnbihyKX1pZihlLnRyaWdnZXIpcmV0dXJuIHRoaXMubG9hZFVybCh0KX0sX3VwZGF0ZUhhc2g6ZnVuY3Rpb24odCxlLGkpe2lmKGkpe3ZhciByPXQuaHJlZi5yZXBsYWNlKC8oamF2YXNjcmlwdDp8IykuKiQvLCIiKTt0LnJlcGxhY2UocisiIyIrZSl9ZWxzZXt0Lmhhc2g9IiMiK2V9fX0pO2guaGlzdG9yeT1uZXcgQjt2YXIgRD1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXM7dmFyIHI7aWYodCYmeC5oYXModCwiY29uc3RydWN0b3IiKSl7cj10LmNvbnN0cnVjdG9yfWVsc2V7cj1mdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19eC5leHRlbmQocixpLGUpO3IucHJvdG90eXBlPXguY3JlYXRlKGkucHJvdG90eXBlLHQpO3IucHJvdG90eXBlLmNvbnN0cnVjdG9yPXI7ci5fX3N1cGVyX189aS5wcm90b3R5cGU7cmV0dXJuIHJ9O2cuZXh0ZW5kPW0uZXh0ZW5kPU8uZXh0ZW5kPUEuZXh0ZW5kPUIuZXh0ZW5kPUQ7dmFyIFY9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoJ0EgInVybCIgcHJvcGVydHkgb3IgZnVuY3Rpb24gbXVzdCBiZSBzcGVjaWZpZWQnKX07dmFyIEc9ZnVuY3Rpb24oZSxpKXt2YXIgcj1pLmVycm9yO2kuZXJyb3I9ZnVuY3Rpb24odCl7aWYocilyLmNhbGwoaS5jb250ZXh0LGUsdCxpKTtlLnRyaWdnZXIoImVycm9yIixlLHQsaSl9fTtyZXR1cm4gaH0pOwovLyMgc291cmNlTWFwcGluZ1VSTD1iYWNrYm9uZS1taW4uanMubWFw]]></data>
	</file>
	<file>
	  <filename>/js/backbone.marionette.modals-min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShiLGFyZ3VtZW50cyl9fSxiPXt9Lmhhc093blByb3BlcnR5LGM9ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBkKCl7dGhpcy5jb25zdHJ1Y3Rvcj1hfWZvcih2YXIgZSBpbiBjKWIuY2FsbChjLGUpJiYoYVtlXT1jW2VdKTtyZXR1cm4gZC5wcm90b3R5cGU9Yy5wcm90b3R5cGUsYS5wcm90b3R5cGU9bmV3IGQsYS5fX3N1cGVyX189Yy5wcm90b3R5cGUsYX07IWZ1bmN0aW9uKGEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsidW5kZXJzY29yZSIsImJhY2tib25lIiwiYmFja2JvbmUubWFyaW9uZXR0ZSIsImV4cG9ydHMiXSxhKToib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHM/YShyZXF1aXJlKCJ1bmRlcnNjb3JlIikscmVxdWlyZSgiYmFja2JvbmUiKSxyZXF1aXJlKCJiYWNrYm9uZS5tYXJpb25ldHRlIiksZXhwb3J0cyk6YShfLEJhY2tib25lLEJhY2tib25lLk1hcmlvbmV0dGUse30pfShmdW5jdGlvbihiLGQsZSxmKXtyZXR1cm4gZj1mdW5jdGlvbihmKXtmdW5jdGlvbiBnKCl7cmV0dXJuIHRoaXMuZGVzdHJveT1hKHRoaXMuZGVzdHJveSx0aGlzKSxnLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIGMoZyxmKSxnLnByb3RvdHlwZS5tb2RhbHM9W10sZy5wcm90b3R5cGUuekluZGV4PTAsZy5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbihhLGMpe3ZhciBmLGcsaCxpLGosayxsLG0sbjtmb3IobnVsbD09YyYmKGM9e30pLHRoaXMuX2Vuc3VyZUVsZW1lbnQoKSxkLiQoImJvZHkiKS5jc3Moe292ZXJmbG93OiJoaWRkZW4ifSksdGhpcy5tb2RhbHMubGVuZ3RoPjAmJihmPWIubGFzdCh0aGlzLm1vZGFscyksZi5tb2RhbEVsLmFkZENsYXNzKCIiK2YucHJlZml4KyItdmlldy0tc3RhY2tlZCIpLGg9dGhpcy5tb2RhbHNbdGhpcy5tb2RhbHMubGVuZ3RoLTFdLG51bGwhPWgmJmgubW9kYWxFbC5yZW1vdmVDbGFzcygiIitoLnByZWZpeCsiLW1vZGFsLS1zdGFja2VkLXJldmVyc2UiKSksYS5yZW5kZXIoYyksYS5yZWdpb25FbmFibGVkPSEwLHRoaXMudHJpZ2dlck1ldGhvZCgiYmVmb3JlOnN3YXAiLGEpLHRoaXMudHJpZ2dlck1ldGhvZCgiYmVmb3JlOnNob3ciLGEpLGUudHJpZ2dlck1ldGhvZE9uKGEsImJlZm9yZTpzaG93IiksdGhpcy50cmlnZ2VyTWV0aG9kKCJzd2FwT3V0Iix0aGlzLmN1cnJlbnRWaWV3KSx0aGlzLiRlbC5hcHBlbmQoYS5lbCksdGhpcy5jdXJyZW50Vmlldz1hLHRoaXMudHJpZ2dlck1ldGhvZCgic3dhcCIsYSksbT10aGlzLm1vZGFscyxpPTAsaz1tLmxlbmd0aDtrPmk7aSsrKWc9bVtpXSxnLnVuZGVsZWdhdGVNb2RhbEV2ZW50cygpO2ZvcihuPXRoaXMubW9kYWxzLGo9MCxsPW4ubGVuZ3RoO2w+ajtqKyspZz1uW2pdLGcuJGVsLmNzcyh7YmFja2dyb3VuZDoibm9uZSJ9KTtyZXR1cm4gYS5vbigibW9kYWw6ZGVzdHJveSIsdGhpcy5kZXN0cm95KSx0aGlzLm1vZGFscy5wdXNoKGEpLHRoaXMuekluZGV4Kyt9LGcucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYSxjO3JldHVybihjPXRoaXMuY3VycmVudFZpZXcpPyhjLmRlc3Ryb3kmJiFjLmlzRGVzdHJveWVkP2MuZGVzdHJveSgpOmMucmVtb3ZlJiZjLnJlbW92ZSgpLGMub2ZmKCJtb2RhbDpkZXN0cm95Iix0aGlzLmRlc3Ryb3kpLHRoaXMubW9kYWxzLnNwbGljZShiLmluZGV4T2YodGhpcy5tb2RhbHMsYyksMSksdGhpcy56SW5kZXgtLSx0aGlzLmN1cnJlbnRWaWV3PXRoaXMubW9kYWxzW3RoaXMuekluZGV4LTFdLGE9Yi5sYXN0KHRoaXMubW9kYWxzKSxhJiYoYS4kZWwucmVtb3ZlQXR0cigic3R5bGUiKSxhLm1vZGFsRWwuYWRkQ2xhc3MoIiIrYS5wcmVmaXgrIi1tb2RhbC0tc3RhY2tlZC1yZXZlcnNlIiksYi5kZWxheShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhLm1vZGFsRWwucmVtb3ZlQ2xhc3MoIiIrYS5wcmVmaXgrIi1tb2RhbC0tc3RhY2tlZCIpfX0odGhpcyksMzAwKSwwIT09dGhpcy56SW5kZXgmJmEuZGVsZWdhdGVNb2RhbEV2ZW50cygpKSwwPT09dGhpcy56SW5kZXgmJmQuJCgiYm9keSIpLmNzcyh7b3ZlcmZsb3c6InZpc2libGUifSksdGhpcy50cmlnZ2VyTWV0aG9kKCJtb2RhbDpkZXN0cm95IixjKSk6dm9pZCAwfSxnLnByb3RvdHlwZS5kZXN0cm95QWxsPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZTtmb3IoZD10aGlzLm1vZGFscyxlPVtdLGI9MCxjPWQubGVuZ3RoO2M+YjtiKyspYT1kW2JdLGUucHVzaCh0aGlzLmRlc3Ryb3koKSk7cmV0dXJuIGV9LGd9KGUuUmVnaW9uKSxlLk1vZGFscz1mLGUuTW9kYWxzfSl9KS5jYWxsKHRoaXMpOw==]]></data>
	</file>
	<file>
	  <filename>/js/backbone.modal-bundled-min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShiLGFyZ3VtZW50cyl9fSxiPXt9Lmhhc093blByb3BlcnR5LGM9ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBkKCl7dGhpcy5jb25zdHJ1Y3Rvcj1hfWZvcih2YXIgZSBpbiBjKWIuY2FsbChjLGUpJiYoYVtlXT1jW2VdKTtyZXR1cm4gZC5wcm90b3R5cGU9Yy5wcm90b3R5cGUsYS5wcm90b3R5cGU9bmV3IGQsYS5fX3N1cGVyX189Yy5wcm90b3R5cGUsYX0sZD1bXS5pbmRleE9mfHxmdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPXRoaXMubGVuZ3RoO2M+YjtiKyspaWYoYiBpbiB0aGlzJiZ0aGlzW2JdPT09YSlyZXR1cm4gYjtyZXR1cm4tMX07IWZ1bmN0aW9uKGEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsidW5kZXJzY29yZSIsImJhY2tib25lIiwiZXhwb3J0cyJdLGEpOiJvYmplY3QiPT10eXBlb2YgZXhwb3J0cz9hKHJlcXVpcmUoInVuZGVyc2NvcmUiKSxyZXF1aXJlKCJiYWNrYm9uZSIpLGV4cG9ydHMpOmEoXyxCYWNrYm9uZSx7fSl9KGZ1bmN0aW9uKGIsZSxmKXtyZXR1cm4gZj1mdW5jdGlvbihmKXtmdW5jdGlvbiBnKCl7dGhpcy50cmlnZ2VyQ2FuY2VsPWEodGhpcy50cmlnZ2VyQ2FuY2VsLHRoaXMpLHRoaXMudHJpZ2dlclN1Ym1pdD1hKHRoaXMudHJpZ2dlclN1Ym1pdCx0aGlzKSx0aGlzLnRyaWdnZXJWaWV3PWEodGhpcy50cmlnZ2VyVmlldyx0aGlzKSx0aGlzLmNsaWNrT3V0c2lkZUVsZW1lbnQ9YSh0aGlzLmNsaWNrT3V0c2lkZUVsZW1lbnQsdGhpcyksdGhpcy5jbGlja091dHNpZGU9YSh0aGlzLmNsaWNrT3V0c2lkZSx0aGlzKSx0aGlzLmNoZWNrS2V5PWEodGhpcy5jaGVja0tleSx0aGlzKSx0aGlzLnJlbmRlcmVyQ29tcGxldGVkPWEodGhpcy5yZW5kZXJlckNvbXBsZXRlZCx0aGlzKSx0aGlzLmFyZ3M9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyksZS5WaWV3LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLHRoaXMuYXJncyksdGhpcy5zZXRVSUVsZW1lbnRzKCl9cmV0dXJuIGMoZyxmKSxnLnByb3RvdHlwZS5wcmVmaXg9ImJibSIsZy5wcm90b3R5cGUuYW5pbWF0ZT0hMCxnLnByb3RvdHlwZS5rZXlDb250cm9sPSEwLGcucHJvdG90eXBlLnNob3dWaWV3T25SZW5kZXI9ITAsZy5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGEpe3ZhciBjLGQ7cmV0dXJuIGM9dGhpcy5zZXJpYWxpemVEYXRhKCksKCFhfHxiLmlzRW1wdHkoYSkpJiYoYT0wKSx0aGlzLiRlbC5hZGRDbGFzcygiIit0aGlzLnByZWZpeCsiLXdyYXBwZXIiKSx0aGlzLm1vZGFsRWw9ZS4kKCI8ZGl2IC8+IikuYWRkQ2xhc3MoIiIrdGhpcy5wcmVmaXgrIi1tb2RhbCIpLHRoaXMudGVtcGxhdGUmJnRoaXMubW9kYWxFbC5odG1sKHRoaXMuYnVpbGRUZW1wbGF0ZSh0aGlzLnRlbXBsYXRlLGMpKSx0aGlzLiRlbC5odG1sKHRoaXMubW9kYWxFbCksdGhpcy52aWV3Q29udGFpbmVyPyh0aGlzLnZpZXdDb250YWluZXJFbD10aGlzLm1vZGFsRWwuZmluZCh0aGlzLnZpZXdDb250YWluZXIpLHRoaXMudmlld0NvbnRhaW5lckVsLmFkZENsYXNzKCIiK3RoaXMucHJlZml4KyItbW9kYWxfX3ZpZXdzIikpOnRoaXMudmlld0NvbnRhaW5lckVsPXRoaXMubW9kYWxFbCxlLiQoIjpmb2N1cyIpLmJsdXIoKSwobnVsbCE9KGQ9dGhpcy52aWV3cyk/ZC5sZW5ndGg6dm9pZCAwKT4wJiZ0aGlzLnNob3dWaWV3T25SZW5kZXImJnRoaXMub3BlbkF0KGEpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9uUmVuZGVyJiZ0aGlzLm9uUmVuZGVyKCksdGhpcy5kZWxlZ2F0ZU1vZGFsRXZlbnRzKCksdGhpcy4kZWwuZmFkZUluJiZ0aGlzLmFuaW1hdGU/KHRoaXMubW9kYWxFbC5jc3Moe29wYWNpdHk6MH0pLHRoaXMuJGVsLmZhZGVJbih7ZHVyYXRpb246MTAwLGNvbXBsZXRlOnRoaXMucmVuZGVyZXJDb21wbGV0ZWR9KSk6dGhpcy5yZW5kZXJlckNvbXBsZXRlZCgpLHRoaXN9LGcucHJvdG90eXBlLnJlbmRlcmVyQ29tcGxldGVkPWZ1bmN0aW9uKCl7dmFyIGE7cmV0dXJuIHRoaXMua2V5Q29udHJvbCYmKGUuJCgiYm9keSIpLm9uKCJrZXl1cC5iYm0iLHRoaXMuY2hlY2tLZXkpLHRoaXMuJGVsLm9uKCJtb3VzZXVwLmJibSIsdGhpcy5jbGlja091dHNpZGVFbGVtZW50KSx0aGlzLiRlbC5vbigiY2xpY2suYmJtIix0aGlzLmNsaWNrT3V0c2lkZSkpLHRoaXMubW9kYWxFbC5jc3Moe29wYWNpdHk6MX0pLmFkZENsYXNzKCIiK3RoaXMucHJlZml4KyItbW9kYWwtLW9wZW4iKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vblNob3cmJnRoaXMub25TaG93KCksbnVsbCE9KGE9dGhpcy5jdXJyZW50VmlldykmJiJmdW5jdGlvbiI9PXR5cGVvZiBhLm9uU2hvdz9hLm9uU2hvdygpOnZvaWQgMH0sZy5wcm90b3R5cGUuc2V0VUlFbGVtZW50cz1mdW5jdGlvbigpe3ZhciBhO2lmKHRoaXMudGVtcGxhdGU9dGhpcy5nZXRPcHRpb24oInRlbXBsYXRlIiksdGhpcy52aWV3cz10aGlzLmdldE9wdGlvbigidmlld3MiKSxudWxsIT0oYT10aGlzLnZpZXdzKSYmKGEubGVuZ3RoPWIuc2l6ZSh0aGlzLnZpZXdzKSksdGhpcy52aWV3Q29udGFpbmVyPXRoaXMuZ2V0T3B0aW9uKCJ2aWV3Q29udGFpbmVyIiksdGhpcy5hbmltYXRlPXRoaXMuZ2V0T3B0aW9uKCJhbmltYXRlIiksYi5pc1VuZGVmaW5lZCh0aGlzLnRlbXBsYXRlKSYmYi5pc1VuZGVmaW5lZCh0aGlzLnZpZXdzKSl0aHJvdyBuZXcgRXJyb3IoIk5vIHRlbXBsYXRlIG9yIHZpZXdzIGRlZmluZWQgZm9yIEJhY2tib25lLk1vZGFsIik7aWYodGhpcy50ZW1wbGF0ZSYmdGhpcy52aWV3cyYmYi5pc1VuZGVmaW5lZCh0aGlzLnZpZXdDb250YWluZXIpKXRocm93IG5ldyBFcnJvcigiTm8gdmlld0NvbnRhaW5lciBkZWZpbmVkIGZvciBCYWNrYm9uZS5Nb2RhbCIpfSxnLnByb3RvdHlwZS5nZXRPcHRpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5vcHRpb25zJiZkLmNhbGwodGhpcy5vcHRpb25zLGEpPj0wJiZudWxsIT10aGlzLm9wdGlvbnNbYV0/dGhpcy5vcHRpb25zW2FdOnRoaXNbYV06dm9pZCAwfSxnLnByb3RvdHlwZS5zZXJpYWxpemVEYXRhPWZ1bmN0aW9uKCl7dmFyIGE7cmV0dXJuIGE9e30sdGhpcy5tb2RlbCYmKGE9Yi5leHRlbmQoYSx0aGlzLm1vZGVsLnRvSlNPTigpKSksdGhpcy5jb2xsZWN0aW9uJiYoYT1iLmV4dGVuZChhLHtpdGVtczp0aGlzLmNvbGxlY3Rpb24udG9KU09OKCl9KSksYX0sZy5wcm90b3R5cGUuZGVsZWdhdGVNb2RhbEV2ZW50cz1mdW5jdGlvbigpe3ZhciBhLGMsZCxlLGYsZyxoO3RoaXMuYWN0aXZlPSEwLGE9dGhpcy5nZXRPcHRpb24oImNhbmNlbEVsIiksZj10aGlzLmdldE9wdGlvbigic3VibWl0RWwiKSxmJiZ0aGlzLiRlbC5vbigiY2xpY2siLGYsdGhpcy50cmlnZ2VyU3VibWl0KSxhJiZ0aGlzLiRlbC5vbigiY2xpY2siLGEsdGhpcy50cmlnZ2VyQ2FuY2VsKSxoPVtdO2ZvcihjIGluIHRoaXMudmlld3MpYi5pc1N0cmluZyhjKSYmImxlbmd0aCIhPT1jPyhkPWMubWF0Y2goL14oXFMrKVxzKiguKikkLyksZz1kWzFdLGU9ZFsyXSxoLnB1c2godGhpcy4kZWwub24oZyxlLHRoaXMudmlld3NbY10sdGhpcy50cmlnZ2VyVmlldykpKTpoLnB1c2godm9pZCAwKTtyZXR1cm4gaH0sZy5wcm90b3R5cGUudW5kZWxlZ2F0ZU1vZGFsRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIGEsYyxkLGUsZixnLGg7dGhpcy5hY3RpdmU9ITEsYT10aGlzLmdldE9wdGlvbigiY2FuY2VsRWwiKSxmPXRoaXMuZ2V0T3B0aW9uKCJzdWJtaXRFbCIpLGYmJnRoaXMuJGVsLm9mZigiY2xpY2siLGYsdGhpcy50cmlnZ2VyU3VibWl0KSxhJiZ0aGlzLiRlbC5vZmYoImNsaWNrIixhLHRoaXMudHJpZ2dlckNhbmNlbCksaD1bXTtmb3IoYyBpbiB0aGlzLnZpZXdzKWIuaXNTdHJpbmcoYykmJiJsZW5ndGgiIT09Yz8oZD1jLm1hdGNoKC9eKFxTKylccyooLiopJC8pLGc9ZFsxXSxlPWRbMl0saC5wdXNoKHRoaXMuJGVsLm9mZihnLGUsdGhpcy52aWV3c1tjXSx0aGlzLnRyaWdnZXJWaWV3KSkpOmgucHVzaCh2b2lkIDApO3JldHVybiBofSxnLnByb3RvdHlwZS5jaGVja0tleT1mdW5jdGlvbihhKXtpZih0aGlzLmFjdGl2ZSlzd2l0Y2goYS5rZXlDb2RlKXtjYXNlIDI3OnJldHVybiB0aGlzLnRyaWdnZXJDYW5jZWwoYSk7Y2FzZSAxMzpyZXR1cm4gdGhpcy50cmlnZ2VyU3VibWl0KGEpfX0sZy5wcm90b3R5cGUuY2xpY2tPdXRzaWRlPWZ1bmN0aW9uKCl7dmFyIGE7cmV0dXJuKG51bGwhPShhPXRoaXMub3V0c2lkZUVsZW1lbnQpP2EuaGFzQ2xhc3MoIiIrdGhpcy5wcmVmaXgrIi13cmFwcGVyIik6dm9pZCAwKSYmdGhpcy5hY3RpdmU/dGhpcy50cmlnZ2VyQ2FuY2VsKCk6dm9pZCAwfSxnLnByb3RvdHlwZS5jbGlja091dHNpZGVFbGVtZW50PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm91dHNpZGVFbGVtZW50PWUuJChhLnRhcmdldCl9LGcucHJvdG90eXBlLmJ1aWxkVGVtcGxhdGU9ZnVuY3Rpb24oYSxjKXt2YXIgZDtyZXR1cm4oZD0iZnVuY3Rpb24iPT10eXBlb2YgYT9hOmIudGVtcGxhdGUoZS4kKGEpLmh0bWwoKSkpKGMpfSxnLnByb3RvdHlwZS5idWlsZFZpZXc9ZnVuY3Rpb24oYSxjKXt2YXIgZDtpZihhKXJldHVybiBjJiZiLmlzRnVuY3Rpb24oYykmJihjPWMoKSksYi5pc0Z1bmN0aW9uKGEpPyhkPW5ldyBhKGN8fHRoaXMuYXJnc1swXSksZCBpbnN0YW5jZW9mIGUuVmlldz97ZWw6ZC5yZW5kZXIoKS4kZWwsdmlldzpkfTp7ZWw6YShjfHx0aGlzLmFyZ3NbMF0pfSk6e3ZpZXc6YSxlbDphLiRlbH19LGcucHJvdG90eXBlLnRyaWdnZXJWaWV3PWZ1bmN0aW9uKGEpe3ZhciBjLGQsZSxmLGcsaCxpO2lmKG51bGwhPWEmJiJmdW5jdGlvbiI9PXR5cGVvZiBhLnByZXZlbnREZWZhdWx0JiZhLnByZXZlbnREZWZhdWx0KCksZj1hLmRhdGEsZD10aGlzLmJ1aWxkVmlldyhmLnZpZXcsZi52aWV3T3B0aW9ucyksdGhpcy5jdXJyZW50VmlldyYmKHRoaXMucHJldmlvdXNWaWV3PXRoaXMuY3VycmVudFZpZXcsIShudWxsIT0oaT1mLm9wZW5PcHRpb25zKT9pLnNraXBTdWJtaXQ6dm9pZCAwKSkpe2lmKCgiZnVuY3Rpb24iPT10eXBlb2YoZz10aGlzLnByZXZpb3VzVmlldykuYmVmb3JlU3VibWl0P2cuYmVmb3JlU3VibWl0KGEpOnZvaWQgMCk9PT0hMSlyZXR1cm47ImZ1bmN0aW9uIj09dHlwZW9mKGg9dGhpcy5wcmV2aW91c1ZpZXcpLnN1Ym1pdCYmaC5zdWJtaXQoKX10aGlzLmN1cnJlbnRWaWV3PWQudmlld3x8ZC5lbCxjPTA7Zm9yKGUgaW4gdGhpcy52aWV3cylmLnZpZXc9PT10aGlzLnZpZXdzW2VdLnZpZXcmJih0aGlzLmN1cnJlbnRJbmRleD1jKSxjKys7cmV0dXJuIGYub25BY3RpdmUmJihiLmlzRnVuY3Rpb24oZi5vbkFjdGl2ZSk/Zi5vbkFjdGl2ZSh0aGlzKTpiLmlzU3RyaW5nKGYub25BY3RpdmUpJiZ0aGlzW2Yub25BY3RpdmVdLmNhbGwodGhpcyxmKSksdGhpcy5zaG91bGRBbmltYXRlP3RoaXMuYW5pbWF0ZVRvVmlldyhkLmVsKToodGhpcy5zaG91bGRBbmltYXRlPSEwLHRoaXMuJCh0aGlzLnZpZXdDb250YWluZXJFbCkuaHRtbChkLmVsKSl9LGcucHJvdG90eXBlLmFuaW1hdGVUb1ZpZXc9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGYsZyxoLGk7cmV0dXJuIGY9e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsdG9wOi05OTk5LGxlZnQ6LTk5OTl9LGc9ZS4kKCI8dGVzdGVyLz4iKS5jc3MoZiksZy5odG1sKHRoaXMuJGVsLmNsb25lKCkuY3NzKGYpKSwwIT09ZS4kKCJ0ZXN0ZXIiKS5sZW5ndGg/ZS4kKCJ0ZXN0ZXIiKS5yZXBsYWNlV2l0aChnKTplLiQoImJvZHkiKS5hcHBlbmQoZyksYj1nLmZpbmQodGhpcy52aWV3Q29udGFpbmVyP3RoaXMudmlld0NvbnRhaW5lcjoiLiIrdGhpcy5wcmVmaXgrIi1tb2RhbCIpLGIucmVtb3ZlQXR0cigic3R5bGUiKSxkPWIub3V0ZXJIZWlnaHQoKSxiLmh0bWwoYSksYz1iLm91dGVySGVpZ2h0KCksZD09PWM/KHRoaXMuJCh0aGlzLnZpZXdDb250YWluZXJFbCkuaHRtbChhKSwiZnVuY3Rpb24iPT10eXBlb2YoaD10aGlzLmN1cnJlbnRWaWV3KS5vblNob3cmJmgub25TaG93KCksbnVsbCE9KGk9dGhpcy5wcmV2aW91c1ZpZXcpJiYiZnVuY3Rpb24iPT10eXBlb2YgaS5kZXN0cm95P2kuZGVzdHJveSgpOnZvaWQgMCk6dGhpcy5hbmltYXRlPyh0aGlzLiQodGhpcy52aWV3Q29udGFpbmVyRWwpLmNzcyh7b3BhY2l0eTowfSksdGhpcy4kKHRoaXMudmlld0NvbnRhaW5lckVsKS5hbmltYXRlKHtoZWlnaHQ6Y30sMTAwLGZ1bmN0aW9uKGIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBjLGQ7cmV0dXJuIGIuJChiLnZpZXdDb250YWluZXJFbCkuY3NzKHtvcGFjaXR5OjF9KS5yZW1vdmVBdHRyKCJzdHlsZSIpLGIuJChiLnZpZXdDb250YWluZXJFbCkuaHRtbChhKSwiZnVuY3Rpb24iPT10eXBlb2YoYz1iLmN1cnJlbnRWaWV3KS5vblNob3cmJmMub25TaG93KCksbnVsbCE9KGQ9Yi5wcmV2aW91c1ZpZXcpJiYiZnVuY3Rpb24iPT10eXBlb2YgZC5kZXN0cm95P2QuZGVzdHJveSgpOnZvaWQgMH19KHRoaXMpKSk6dGhpcy4kKHRoaXMudmlld0NvbnRhaW5lckVsKS5jc3Moe2hlaWdodDpjfSkuaHRtbChhKX0sZy5wcm90b3R5cGUudHJpZ2dlclN1Ym1pdD1mdW5jdGlvbihhKXt2YXIgYixjO3JldHVybiBudWxsIT1hJiZhLnByZXZlbnREZWZhdWx0KCksZS4kKGEudGFyZ2V0KS5pcygidGV4dGFyZWEiKXx8dGhpcy5iZWZvcmVTdWJtaXQmJnRoaXMuYmVmb3JlU3VibWl0KGEpPT09ITF8fHRoaXMuY3VycmVudFZpZXcmJnRoaXMuY3VycmVudFZpZXcuYmVmb3JlU3VibWl0JiZ0aGlzLmN1cnJlbnRWaWV3LmJlZm9yZVN1Ym1pdChhKT09PSExP3ZvaWQgMDp0aGlzLnN1Ym1pdHx8KG51bGwhPShiPXRoaXMuY3VycmVudFZpZXcpP2Iuc3VibWl0OnZvaWQgMCl8fHRoaXMuZ2V0T3B0aW9uKCJzdWJtaXRFbCIpPyhudWxsIT0oYz10aGlzLmN1cnJlbnRWaWV3KSYmImZ1bmN0aW9uIj09dHlwZW9mIGMuc3VibWl0JiZjLnN1Ym1pdCgpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnN1Ym1pdCYmdGhpcy5zdWJtaXQoKSx0aGlzLnJlZ2lvbkVuYWJsZWQ/dGhpcy50cmlnZ2VyKCJtb2RhbDpkZXN0cm95Iik6dGhpcy5kZXN0cm95KCkpOnRoaXMudHJpZ2dlckNhbmNlbCgpfSxnLnByb3RvdHlwZS50cmlnZ2VyQ2FuY2VsPWZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hJiZhLnByZXZlbnREZWZhdWx0KCksdGhpcy5iZWZvcmVDYW5jZWwmJnRoaXMuYmVmb3JlQ2FuY2VsKCk9PT0hMT92b2lkIDA6KCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmNhbmNlbCYmdGhpcy5jYW5jZWwoKSx0aGlzLnJlZ2lvbkVuYWJsZWQ/dGhpcy50cmlnZ2VyKCJtb2RhbDpkZXN0cm95Iik6dGhpcy5kZXN0cm95KCkpfSxnLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGE7cmV0dXJuIGUuJCgiYm9keSIpLm9mZigia2V5dXAuYmJtIix0aGlzLmNoZWNrS2V5KSx0aGlzLiRlbC5vZmYoIm1vdXNldXAuYmJtIix0aGlzLmNsaWNrT3V0c2lkZUVsZW1lbnQpLHRoaXMuJGVsLm9mZigiY2xpY2suYmJtIix0aGlzLmNsaWNrT3V0c2lkZSksZS4kKCJ0ZXN0ZXIiKS5yZW1vdmUoKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vbkRlc3Ryb3kmJnRoaXMub25EZXN0cm95KCksdGhpcy5zaG91bGRBbmltYXRlPSExLHRoaXMubW9kYWxFbC5hZGRDbGFzcygiIit0aGlzLnByZWZpeCsiLW1vZGFsLS1kZXN0cm95IiksYT1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYjtyZXR1cm4gbnVsbCE9KGI9YS5jdXJyZW50VmlldykmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLnJlbW92ZSYmYi5yZW1vdmUoKSxhLnJlbW92ZSgpfX0odGhpcyksdGhpcy4kZWwuZmFkZU91dCYmdGhpcy5hbmltYXRlPyh0aGlzLiRlbC5mYWRlT3V0KHtkdXJhdGlvbjoyMDB9KSxiLmRlbGF5KGZ1bmN0aW9uKCl7cmV0dXJuIGEoKX0sMjAwKSk6YSgpfSxnLnByb3RvdHlwZS5vcGVuQXQ9ZnVuY3Rpb24oYSl7dmFyIGMsZCxlLGYsZztiLmlzTnVtYmVyKGEpP2M9YTpiLmlzTnVtYmVyKGEuX2luZGV4KSYmKGM9YS5faW5kZXgpLGU9MDtmb3IoZiBpbiB0aGlzLnZpZXdzKWlmKCJsZW5ndGgiIT09ZilpZihiLmlzTnVtYmVyKGMpKWU9PT1jJiYoZz10aGlzLnZpZXdzW2ZdKSxlKys7ZWxzZSBpZihiLmlzT2JqZWN0KGEpKWZvcihkIGluIHRoaXMudmlld3NbZl0pYVtkXT09PXRoaXMudmlld3NbZl1bZF0mJihnPXRoaXMudmlld3NbZl0pO3JldHVybiBnJiYodGhpcy5jdXJyZW50SW5kZXg9Yi5pbmRleE9mKHRoaXMudmlld3MsZyksdGhpcy50cmlnZ2VyVmlldyh7ZGF0YTpiLmV4dGVuZChnLHtvcGVuT3B0aW9uczphfSl9KSksdGhpc30sZy5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YSYmKGE9e30pLHRoaXMuY3VycmVudEluZGV4KzE8dGhpcy52aWV3cy5sZW5ndGg/dGhpcy5vcGVuQXQoYi5leHRlbmQoYSx7X2luZGV4OnRoaXMuY3VycmVudEluZGV4KzF9KSk6dm9pZCAwfSxnLnByb3RvdHlwZS5wcmV2aW91cz1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YSYmKGE9e30pLHRoaXMuY3VycmVudEluZGV4LTE8dGhpcy52aWV3cy5sZW5ndGgtMT90aGlzLm9wZW5BdChiLmV4dGVuZChhLHtfaW5kZXg6dGhpcy5jdXJyZW50SW5kZXgtMX0pKTp2b2lkIDB9LGd9KGUuVmlldyksZS5Nb2RhbD1mLGUuTW9kYWx9KX0pLmNhbGwodGhpcyksZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGIsYXJndW1lbnRzKX19LGI9e30uaGFzT3duUHJvcGVydHksYz1mdW5jdGlvbihhLGMpe2Z1bmN0aW9uIGQoKXt0aGlzLmNvbnN0cnVjdG9yPWF9Zm9yKHZhciBlIGluIGMpYi5jYWxsKGMsZSkmJihhW2VdPWNbZV0pO3JldHVybiBkLnByb3RvdHlwZT1jLnByb3RvdHlwZSxhLnByb3RvdHlwZT1uZXcgZCxhLl9fc3VwZXJfXz1jLnByb3RvdHlwZSxhfTshZnVuY3Rpb24oYSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJ1bmRlcnNjb3JlIiwiYmFja2JvbmUiLCJiYWNrYm9uZS5tYXJpb25ldHRlIiwiZXhwb3J0cyJdLGEpOiJvYmplY3QiPT10eXBlb2YgZXhwb3J0cz9hKHJlcXVpcmUoInVuZGVyc2NvcmUiKSxyZXF1aXJlKCJiYWNrYm9uZSIpLHJlcXVpcmUoImJhY2tib25lLm1hcmlvbmV0dGUiKSxleHBvcnRzKTphKF8sQmFja2JvbmUsQmFja2JvbmUuTWFyaW9uZXR0ZSx7fSl9KGZ1bmN0aW9uKGIsZCxlLGYpe3JldHVybiBmPWZ1bmN0aW9uKGYpe2Z1bmN0aW9uIGcoKXtyZXR1cm4gdGhpcy5kZXN0cm95PWEodGhpcy5kZXN0cm95LHRoaXMpLGcuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gYyhnLGYpLGcucHJvdG90eXBlLm1vZGFscz1bXSxnLnByb3RvdHlwZS56SW5kZXg9MCxnLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKGEsYyl7dmFyIGYsZyxoLGksaixrLGwsbSxuO2ZvcihudWxsPT1jJiYoYz17fSksdGhpcy5fZW5zdXJlRWxlbWVudCgpLGQuJCgiYm9keSIpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSx0aGlzLm1vZGFscy5sZW5ndGg+MCYmKGY9Yi5sYXN0KHRoaXMubW9kYWxzKSxmLm1vZGFsRWwuYWRkQ2xhc3MoIiIrZi5wcmVmaXgrIi12aWV3LS1zdGFja2VkIiksaD10aGlzLm1vZGFsc1t0aGlzLm1vZGFscy5sZW5ndGgtMV0sbnVsbCE9aCYmaC5tb2RhbEVsLnJlbW92ZUNsYXNzKCIiK2gucHJlZml4KyItbW9kYWwtLXN0YWNrZWQtcmV2ZXJzZSIpKSxhLnJlbmRlcihjKSxhLnJlZ2lvbkVuYWJsZWQ9ITAsdGhpcy50cmlnZ2VyTWV0aG9kKCJiZWZvcmU6c3dhcCIsYSksdGhpcy50cmlnZ2VyTWV0aG9kKCJiZWZvcmU6c2hvdyIsYSksZS50cmlnZ2VyTWV0aG9kT24oYSwiYmVmb3JlOnNob3ciKSx0aGlzLnRyaWdnZXJNZXRob2QoInN3YXBPdXQiLHRoaXMuY3VycmVudFZpZXcpLHRoaXMuJGVsLmFwcGVuZChhLmVsKSx0aGlzLmN1cnJlbnRWaWV3PWEsdGhpcy50cmlnZ2VyTWV0aG9kKCJzd2FwIixhKSxtPXRoaXMubW9kYWxzLGk9MCxrPW0ubGVuZ3RoO2s+aTtpKyspZz1tW2ldLGcudW5kZWxlZ2F0ZU1vZGFsRXZlbnRzKCk7Zm9yKG49dGhpcy5tb2RhbHMsaj0wLGw9bi5sZW5ndGg7bD5qO2orKylnPW5bal0sZy4kZWwuY3NzKHtiYWNrZ3JvdW5kOiJub25lIn0pO3JldHVybiBhLm9uKCJtb2RhbDpkZXN0cm95Iix0aGlzLmRlc3Ryb3kpLHRoaXMubW9kYWxzLnB1c2goYSksdGhpcy56SW5kZXgrK30sZy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBhLGM7cmV0dXJuKGM9dGhpcy5jdXJyZW50Vmlldyk/KGMuZGVzdHJveSYmIWMuaXNEZXN0cm95ZWQ/Yy5kZXN0cm95KCk6Yy5yZW1vdmUmJmMucmVtb3ZlKCksYy5vZmYoIm1vZGFsOmRlc3Ryb3kiLHRoaXMuZGVzdHJveSksdGhpcy5tb2RhbHMuc3BsaWNlKGIuaW5kZXhPZih0aGlzLm1vZGFscyxjKSwxKSx0aGlzLnpJbmRleC0tLHRoaXMuY3VycmVudFZpZXc9dGhpcy5tb2RhbHNbdGhpcy56SW5kZXgtMV0sYT1iLmxhc3QodGhpcy5tb2RhbHMpLGEmJihhLiRlbC5yZW1vdmVBdHRyKCJzdHlsZSIpLGEubW9kYWxFbC5hZGRDbGFzcygiIithLnByZWZpeCsiLW1vZGFsLS1zdGFja2VkLXJldmVyc2UiKSxiLmRlbGF5KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGEubW9kYWxFbC5yZW1vdmVDbGFzcygiIithLnByZWZpeCsiLW1vZGFsLS1zdGFja2VkIil9fSh0aGlzKSwzMDApLDAhPT10aGlzLnpJbmRleCYmYS5kZWxlZ2F0ZU1vZGFsRXZlbnRzKCkpLDA9PT10aGlzLnpJbmRleCYmZC4kKCJib2R5IikuY3NzKHtvdmVyZmxvdzoidmlzaWJsZSJ9KSx0aGlzLnRyaWdnZXJNZXRob2QoIm1vZGFsOmRlc3Ryb3kiLGMpKTp2b2lkIDB9LGcucHJvdG90eXBlLmRlc3Ryb3lBbGw9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlO2ZvcihkPXRoaXMubW9kYWxzLGU9W10sYj0wLGM9ZC5sZW5ndGg7Yz5iO2IrKylhPWRbYl0sZS5wdXNoKHRoaXMuZGVzdHJveSgpKTtyZXR1cm4gZX0sZ30oZS5SZWdpb24pLGUuTW9kYWxzPWYsZS5Nb2RhbHN9KX0uY2FsbCh0aGlzKTs=]]></data>
	</file>
	<file>
	  <filename>/js/backbone.modal-min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShiLGFyZ3VtZW50cyl9fSxiPXt9Lmhhc093blByb3BlcnR5LGM9ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBkKCl7dGhpcy5jb25zdHJ1Y3Rvcj1hfWZvcih2YXIgZSBpbiBjKWIuY2FsbChjLGUpJiYoYVtlXT1jW2VdKTtyZXR1cm4gZC5wcm90b3R5cGU9Yy5wcm90b3R5cGUsYS5wcm90b3R5cGU9bmV3IGQsYS5fX3N1cGVyX189Yy5wcm90b3R5cGUsYX0sZD1bXS5pbmRleE9mfHxmdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPXRoaXMubGVuZ3RoO2M+YjtiKyspaWYoYiBpbiB0aGlzJiZ0aGlzW2JdPT09YSlyZXR1cm4gYjtyZXR1cm4tMX07IWZ1bmN0aW9uKGEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsidW5kZXJzY29yZSIsImJhY2tib25lIiwiZXhwb3J0cyJdLGEpOiJvYmplY3QiPT10eXBlb2YgZXhwb3J0cz9hKHJlcXVpcmUoInVuZGVyc2NvcmUiKSxyZXF1aXJlKCJiYWNrYm9uZSIpLGV4cG9ydHMpOmEoXyxCYWNrYm9uZSx7fSl9KGZ1bmN0aW9uKGIsZSxmKXtyZXR1cm4gZj1mdW5jdGlvbihmKXtmdW5jdGlvbiBnKCl7dGhpcy50cmlnZ2VyQ2FuY2VsPWEodGhpcy50cmlnZ2VyQ2FuY2VsLHRoaXMpLHRoaXMudHJpZ2dlclN1Ym1pdD1hKHRoaXMudHJpZ2dlclN1Ym1pdCx0aGlzKSx0aGlzLnRyaWdnZXJWaWV3PWEodGhpcy50cmlnZ2VyVmlldyx0aGlzKSx0aGlzLmNsaWNrT3V0c2lkZUVsZW1lbnQ9YSh0aGlzLmNsaWNrT3V0c2lkZUVsZW1lbnQsdGhpcyksdGhpcy5jbGlja091dHNpZGU9YSh0aGlzLmNsaWNrT3V0c2lkZSx0aGlzKSx0aGlzLmNoZWNrS2V5PWEodGhpcy5jaGVja0tleSx0aGlzKSx0aGlzLnJlbmRlcmVyQ29tcGxldGVkPWEodGhpcy5yZW5kZXJlckNvbXBsZXRlZCx0aGlzKSx0aGlzLmFyZ3M9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyksZS5WaWV3LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLHRoaXMuYXJncyksdGhpcy5zZXRVSUVsZW1lbnRzKCl9cmV0dXJuIGMoZyxmKSxnLnByb3RvdHlwZS5wcmVmaXg9ImJibSIsZy5wcm90b3R5cGUuYW5pbWF0ZT0hMCxnLnByb3RvdHlwZS5rZXlDb250cm9sPSEwLGcucHJvdG90eXBlLnNob3dWaWV3T25SZW5kZXI9ITAsZy5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGEpe3ZhciBjLGQ7cmV0dXJuIGM9dGhpcy5zZXJpYWxpemVEYXRhKCksKCFhfHxiLmlzRW1wdHkoYSkpJiYoYT0wKSx0aGlzLiRlbC5hZGRDbGFzcygiIit0aGlzLnByZWZpeCsiLXdyYXBwZXIiKSx0aGlzLm1vZGFsRWw9ZS4kKCI8ZGl2IC8+IikuYWRkQ2xhc3MoIiIrdGhpcy5wcmVmaXgrIi1tb2RhbCIpLHRoaXMudGVtcGxhdGUmJnRoaXMubW9kYWxFbC5odG1sKHRoaXMuYnVpbGRUZW1wbGF0ZSh0aGlzLnRlbXBsYXRlLGMpKSx0aGlzLiRlbC5odG1sKHRoaXMubW9kYWxFbCksdGhpcy52aWV3Q29udGFpbmVyPyh0aGlzLnZpZXdDb250YWluZXJFbD10aGlzLm1vZGFsRWwuZmluZCh0aGlzLnZpZXdDb250YWluZXIpLHRoaXMudmlld0NvbnRhaW5lckVsLmFkZENsYXNzKCIiK3RoaXMucHJlZml4KyItbW9kYWxfX3ZpZXdzIikpOnRoaXMudmlld0NvbnRhaW5lckVsPXRoaXMubW9kYWxFbCxlLiQoIjpmb2N1cyIpLmJsdXIoKSwobnVsbCE9KGQ9dGhpcy52aWV3cyk/ZC5sZW5ndGg6dm9pZCAwKT4wJiZ0aGlzLnNob3dWaWV3T25SZW5kZXImJnRoaXMub3BlbkF0KGEpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9uUmVuZGVyJiZ0aGlzLm9uUmVuZGVyKCksdGhpcy5kZWxlZ2F0ZU1vZGFsRXZlbnRzKCksdGhpcy4kZWwuZmFkZUluJiZ0aGlzLmFuaW1hdGU/KHRoaXMubW9kYWxFbC5jc3Moe29wYWNpdHk6MH0pLHRoaXMuJGVsLmZhZGVJbih7ZHVyYXRpb246MTAwLGNvbXBsZXRlOnRoaXMucmVuZGVyZXJDb21wbGV0ZWR9KSk6dGhpcy5yZW5kZXJlckNvbXBsZXRlZCgpLHRoaXN9LGcucHJvdG90eXBlLnJlbmRlcmVyQ29tcGxldGVkPWZ1bmN0aW9uKCl7dmFyIGE7cmV0dXJuIHRoaXMua2V5Q29udHJvbCYmKGUuJCgiYm9keSIpLm9uKCJrZXl1cC5iYm0iLHRoaXMuY2hlY2tLZXkpLHRoaXMuJGVsLm9uKCJtb3VzZXVwLmJibSIsdGhpcy5jbGlja091dHNpZGVFbGVtZW50KSx0aGlzLiRlbC5vbigiY2xpY2suYmJtIix0aGlzLmNsaWNrT3V0c2lkZSkpLHRoaXMubW9kYWxFbC5jc3Moe29wYWNpdHk6MX0pLmFkZENsYXNzKCIiK3RoaXMucHJlZml4KyItbW9kYWwtLW9wZW4iKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vblNob3cmJnRoaXMub25TaG93KCksbnVsbCE9KGE9dGhpcy5jdXJyZW50VmlldykmJiJmdW5jdGlvbiI9PXR5cGVvZiBhLm9uU2hvdz9hLm9uU2hvdygpOnZvaWQgMH0sZy5wcm90b3R5cGUuc2V0VUlFbGVtZW50cz1mdW5jdGlvbigpe3ZhciBhO2lmKHRoaXMudGVtcGxhdGU9dGhpcy5nZXRPcHRpb24oInRlbXBsYXRlIiksdGhpcy52aWV3cz10aGlzLmdldE9wdGlvbigidmlld3MiKSxudWxsIT0oYT10aGlzLnZpZXdzKSYmKGEubGVuZ3RoPWIuc2l6ZSh0aGlzLnZpZXdzKSksdGhpcy52aWV3Q29udGFpbmVyPXRoaXMuZ2V0T3B0aW9uKCJ2aWV3Q29udGFpbmVyIiksdGhpcy5hbmltYXRlPXRoaXMuZ2V0T3B0aW9uKCJhbmltYXRlIiksYi5pc1VuZGVmaW5lZCh0aGlzLnRlbXBsYXRlKSYmYi5pc1VuZGVmaW5lZCh0aGlzLnZpZXdzKSl0aHJvdyBuZXcgRXJyb3IoIk5vIHRlbXBsYXRlIG9yIHZpZXdzIGRlZmluZWQgZm9yIEJhY2tib25lLk1vZGFsIik7aWYodGhpcy50ZW1wbGF0ZSYmdGhpcy52aWV3cyYmYi5pc1VuZGVmaW5lZCh0aGlzLnZpZXdDb250YWluZXIpKXRocm93IG5ldyBFcnJvcigiTm8gdmlld0NvbnRhaW5lciBkZWZpbmVkIGZvciBCYWNrYm9uZS5Nb2RhbCIpfSxnLnByb3RvdHlwZS5nZXRPcHRpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5vcHRpb25zJiZkLmNhbGwodGhpcy5vcHRpb25zLGEpPj0wJiZudWxsIT10aGlzLm9wdGlvbnNbYV0/dGhpcy5vcHRpb25zW2FdOnRoaXNbYV06dm9pZCAwfSxnLnByb3RvdHlwZS5zZXJpYWxpemVEYXRhPWZ1bmN0aW9uKCl7dmFyIGE7cmV0dXJuIGE9e30sdGhpcy5tb2RlbCYmKGE9Yi5leHRlbmQoYSx0aGlzLm1vZGVsLnRvSlNPTigpKSksdGhpcy5jb2xsZWN0aW9uJiYoYT1iLmV4dGVuZChhLHtpdGVtczp0aGlzLmNvbGxlY3Rpb24udG9KU09OKCl9KSksYX0sZy5wcm90b3R5cGUuZGVsZWdhdGVNb2RhbEV2ZW50cz1mdW5jdGlvbigpe3ZhciBhLGMsZCxlLGYsZyxoO3RoaXMuYWN0aXZlPSEwLGE9dGhpcy5nZXRPcHRpb24oImNhbmNlbEVsIiksZj10aGlzLmdldE9wdGlvbigic3VibWl0RWwiKSxmJiZ0aGlzLiRlbC5vbigiY2xpY2siLGYsdGhpcy50cmlnZ2VyU3VibWl0KSxhJiZ0aGlzLiRlbC5vbigiY2xpY2siLGEsdGhpcy50cmlnZ2VyQ2FuY2VsKSxoPVtdO2ZvcihjIGluIHRoaXMudmlld3MpYi5pc1N0cmluZyhjKSYmImxlbmd0aCIhPT1jPyhkPWMubWF0Y2goL14oXFMrKVxzKiguKikkLyksZz1kWzFdLGU9ZFsyXSxoLnB1c2godGhpcy4kZWwub24oZyxlLHRoaXMudmlld3NbY10sdGhpcy50cmlnZ2VyVmlldykpKTpoLnB1c2godm9pZCAwKTtyZXR1cm4gaH0sZy5wcm90b3R5cGUudW5kZWxlZ2F0ZU1vZGFsRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIGEsYyxkLGUsZixnLGg7dGhpcy5hY3RpdmU9ITEsYT10aGlzLmdldE9wdGlvbigiY2FuY2VsRWwiKSxmPXRoaXMuZ2V0T3B0aW9uKCJzdWJtaXRFbCIpLGYmJnRoaXMuJGVsLm9mZigiY2xpY2siLGYsdGhpcy50cmlnZ2VyU3VibWl0KSxhJiZ0aGlzLiRlbC5vZmYoImNsaWNrIixhLHRoaXMudHJpZ2dlckNhbmNlbCksaD1bXTtmb3IoYyBpbiB0aGlzLnZpZXdzKWIuaXNTdHJpbmcoYykmJiJsZW5ndGgiIT09Yz8oZD1jLm1hdGNoKC9eKFxTKylccyooLiopJC8pLGc9ZFsxXSxlPWRbMl0saC5wdXNoKHRoaXMuJGVsLm9mZihnLGUsdGhpcy52aWV3c1tjXSx0aGlzLnRyaWdnZXJWaWV3KSkpOmgucHVzaCh2b2lkIDApO3JldHVybiBofSxnLnByb3RvdHlwZS5jaGVja0tleT1mdW5jdGlvbihhKXtpZih0aGlzLmFjdGl2ZSlzd2l0Y2goYS5rZXlDb2RlKXtjYXNlIDI3OnJldHVybiB0aGlzLnRyaWdnZXJDYW5jZWwoYSk7Y2FzZSAxMzpyZXR1cm4gdGhpcy50cmlnZ2VyU3VibWl0KGEpfX0sZy5wcm90b3R5cGUuY2xpY2tPdXRzaWRlPWZ1bmN0aW9uKCl7dmFyIGE7cmV0dXJuKG51bGwhPShhPXRoaXMub3V0c2lkZUVsZW1lbnQpP2EuaGFzQ2xhc3MoIiIrdGhpcy5wcmVmaXgrIi13cmFwcGVyIik6dm9pZCAwKSYmdGhpcy5hY3RpdmU/dGhpcy50cmlnZ2VyQ2FuY2VsKCk6dm9pZCAwfSxnLnByb3RvdHlwZS5jbGlja091dHNpZGVFbGVtZW50PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm91dHNpZGVFbGVtZW50PWUuJChhLnRhcmdldCl9LGcucHJvdG90eXBlLmJ1aWxkVGVtcGxhdGU9ZnVuY3Rpb24oYSxjKXt2YXIgZDtyZXR1cm4oZD0iZnVuY3Rpb24iPT10eXBlb2YgYT9hOmIudGVtcGxhdGUoZS4kKGEpLmh0bWwoKSkpKGMpfSxnLnByb3RvdHlwZS5idWlsZFZpZXc9ZnVuY3Rpb24oYSxjKXt2YXIgZDtpZihhKXJldHVybiBjJiZiLmlzRnVuY3Rpb24oYykmJihjPWMoKSksYi5pc0Z1bmN0aW9uKGEpPyhkPW5ldyBhKGN8fHRoaXMuYXJnc1swXSksZCBpbnN0YW5jZW9mIGUuVmlldz97ZWw6ZC5yZW5kZXIoKS4kZWwsdmlldzpkfTp7ZWw6YShjfHx0aGlzLmFyZ3NbMF0pfSk6e3ZpZXc6YSxlbDphLiRlbH19LGcucHJvdG90eXBlLnRyaWdnZXJWaWV3PWZ1bmN0aW9uKGEpe3ZhciBjLGQsZSxmLGcsaCxpO2lmKG51bGwhPWEmJiJmdW5jdGlvbiI9PXR5cGVvZiBhLnByZXZlbnREZWZhdWx0JiZhLnByZXZlbnREZWZhdWx0KCksZj1hLmRhdGEsZD10aGlzLmJ1aWxkVmlldyhmLnZpZXcsZi52aWV3T3B0aW9ucyksdGhpcy5jdXJyZW50VmlldyYmKHRoaXMucHJldmlvdXNWaWV3PXRoaXMuY3VycmVudFZpZXcsIShudWxsIT0oaT1mLm9wZW5PcHRpb25zKT9pLnNraXBTdWJtaXQ6dm9pZCAwKSkpe2lmKCgiZnVuY3Rpb24iPT10eXBlb2YoZz10aGlzLnByZXZpb3VzVmlldykuYmVmb3JlU3VibWl0P2cuYmVmb3JlU3VibWl0KGEpOnZvaWQgMCk9PT0hMSlyZXR1cm47ImZ1bmN0aW9uIj09dHlwZW9mKGg9dGhpcy5wcmV2aW91c1ZpZXcpLnN1Ym1pdCYmaC5zdWJtaXQoKX10aGlzLmN1cnJlbnRWaWV3PWQudmlld3x8ZC5lbCxjPTA7Zm9yKGUgaW4gdGhpcy52aWV3cylmLnZpZXc9PT10aGlzLnZpZXdzW2VdLnZpZXcmJih0aGlzLmN1cnJlbnRJbmRleD1jKSxjKys7cmV0dXJuIGYub25BY3RpdmUmJihiLmlzRnVuY3Rpb24oZi5vbkFjdGl2ZSk/Zi5vbkFjdGl2ZSh0aGlzKTpiLmlzU3RyaW5nKGYub25BY3RpdmUpJiZ0aGlzW2Yub25BY3RpdmVdLmNhbGwodGhpcyxmKSksdGhpcy5zaG91bGRBbmltYXRlP3RoaXMuYW5pbWF0ZVRvVmlldyhkLmVsKToodGhpcy5zaG91bGRBbmltYXRlPSEwLHRoaXMuJCh0aGlzLnZpZXdDb250YWluZXJFbCkuaHRtbChkLmVsKSl9LGcucHJvdG90eXBlLmFuaW1hdGVUb1ZpZXc9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGYsZyxoLGk7cmV0dXJuIGY9e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsdG9wOi05OTk5LGxlZnQ6LTk5OTl9LGc9ZS4kKCI8dGVzdGVyLz4iKS5jc3MoZiksZy5odG1sKHRoaXMuJGVsLmNsb25lKCkuY3NzKGYpKSwwIT09ZS4kKCJ0ZXN0ZXIiKS5sZW5ndGg/ZS4kKCJ0ZXN0ZXIiKS5yZXBsYWNlV2l0aChnKTplLiQoImJvZHkiKS5hcHBlbmQoZyksYj1nLmZpbmQodGhpcy52aWV3Q29udGFpbmVyP3RoaXMudmlld0NvbnRhaW5lcjoiLiIrdGhpcy5wcmVmaXgrIi1tb2RhbCIpLGIucmVtb3ZlQXR0cigic3R5bGUiKSxkPWIub3V0ZXJIZWlnaHQoKSxiLmh0bWwoYSksYz1iLm91dGVySGVpZ2h0KCksZD09PWM/KHRoaXMuJCh0aGlzLnZpZXdDb250YWluZXJFbCkuaHRtbChhKSwiZnVuY3Rpb24iPT10eXBlb2YoaD10aGlzLmN1cnJlbnRWaWV3KS5vblNob3cmJmgub25TaG93KCksbnVsbCE9KGk9dGhpcy5wcmV2aW91c1ZpZXcpJiYiZnVuY3Rpb24iPT10eXBlb2YgaS5kZXN0cm95P2kuZGVzdHJveSgpOnZvaWQgMCk6dGhpcy5hbmltYXRlPyh0aGlzLiQodGhpcy52aWV3Q29udGFpbmVyRWwpLmNzcyh7b3BhY2l0eTowfSksdGhpcy4kKHRoaXMudmlld0NvbnRhaW5lckVsKS5hbmltYXRlKHtoZWlnaHQ6Y30sMTAwLGZ1bmN0aW9uKGIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBjLGQ7cmV0dXJuIGIuJChiLnZpZXdDb250YWluZXJFbCkuY3NzKHtvcGFjaXR5OjF9KS5yZW1vdmVBdHRyKCJzdHlsZSIpLGIuJChiLnZpZXdDb250YWluZXJFbCkuaHRtbChhKSwiZnVuY3Rpb24iPT10eXBlb2YoYz1iLmN1cnJlbnRWaWV3KS5vblNob3cmJmMub25TaG93KCksbnVsbCE9KGQ9Yi5wcmV2aW91c1ZpZXcpJiYiZnVuY3Rpb24iPT10eXBlb2YgZC5kZXN0cm95P2QuZGVzdHJveSgpOnZvaWQgMH19KHRoaXMpKSk6dGhpcy4kKHRoaXMudmlld0NvbnRhaW5lckVsKS5jc3Moe2hlaWdodDpjfSkuaHRtbChhKX0sZy5wcm90b3R5cGUudHJpZ2dlclN1Ym1pdD1mdW5jdGlvbihhKXt2YXIgYixjO3JldHVybiBudWxsIT1hJiZhLnByZXZlbnREZWZhdWx0KCksZS4kKGEudGFyZ2V0KS5pcygidGV4dGFyZWEiKXx8dGhpcy5iZWZvcmVTdWJtaXQmJnRoaXMuYmVmb3JlU3VibWl0KGEpPT09ITF8fHRoaXMuY3VycmVudFZpZXcmJnRoaXMuY3VycmVudFZpZXcuYmVmb3JlU3VibWl0JiZ0aGlzLmN1cnJlbnRWaWV3LmJlZm9yZVN1Ym1pdChhKT09PSExP3ZvaWQgMDp0aGlzLnN1Ym1pdHx8KG51bGwhPShiPXRoaXMuY3VycmVudFZpZXcpP2Iuc3VibWl0OnZvaWQgMCl8fHRoaXMuZ2V0T3B0aW9uKCJzdWJtaXRFbCIpPyhudWxsIT0oYz10aGlzLmN1cnJlbnRWaWV3KSYmImZ1bmN0aW9uIj09dHlwZW9mIGMuc3VibWl0JiZjLnN1Ym1pdCgpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnN1Ym1pdCYmdGhpcy5zdWJtaXQoKSx0aGlzLnJlZ2lvbkVuYWJsZWQ/dGhpcy50cmlnZ2VyKCJtb2RhbDpkZXN0cm95Iik6dGhpcy5kZXN0cm95KCkpOnRoaXMudHJpZ2dlckNhbmNlbCgpfSxnLnByb3RvdHlwZS50cmlnZ2VyQ2FuY2VsPWZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hJiZhLnByZXZlbnREZWZhdWx0KCksdGhpcy5iZWZvcmVDYW5jZWwmJnRoaXMuYmVmb3JlQ2FuY2VsKCk9PT0hMT92b2lkIDA6KCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmNhbmNlbCYmdGhpcy5jYW5jZWwoKSx0aGlzLnJlZ2lvbkVuYWJsZWQ/dGhpcy50cmlnZ2VyKCJtb2RhbDpkZXN0cm95Iik6dGhpcy5kZXN0cm95KCkpfSxnLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGE7cmV0dXJuIGUuJCgiYm9keSIpLm9mZigia2V5dXAuYmJtIix0aGlzLmNoZWNrS2V5KSx0aGlzLiRlbC5vZmYoIm1vdXNldXAuYmJtIix0aGlzLmNsaWNrT3V0c2lkZUVsZW1lbnQpLHRoaXMuJGVsLm9mZigiY2xpY2suYmJtIix0aGlzLmNsaWNrT3V0c2lkZSksZS4kKCJ0ZXN0ZXIiKS5yZW1vdmUoKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vbkRlc3Ryb3kmJnRoaXMub25EZXN0cm95KCksdGhpcy5zaG91bGRBbmltYXRlPSExLHRoaXMubW9kYWxFbC5hZGRDbGFzcygiIit0aGlzLnByZWZpeCsiLW1vZGFsLS1kZXN0cm95IiksYT1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYjtyZXR1cm4gbnVsbCE9KGI9YS5jdXJyZW50VmlldykmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLnJlbW92ZSYmYi5yZW1vdmUoKSxhLnJlbW92ZSgpfX0odGhpcyksdGhpcy4kZWwuZmFkZU91dCYmdGhpcy5hbmltYXRlPyh0aGlzLiRlbC5mYWRlT3V0KHtkdXJhdGlvbjoyMDB9KSxiLmRlbGF5KGZ1bmN0aW9uKCl7cmV0dXJuIGEoKX0sMjAwKSk6YSgpfSxnLnByb3RvdHlwZS5vcGVuQXQ9ZnVuY3Rpb24oYSl7dmFyIGMsZCxlLGYsZztiLmlzTnVtYmVyKGEpP2M9YTpiLmlzTnVtYmVyKGEuX2luZGV4KSYmKGM9YS5faW5kZXgpLGU9MDtmb3IoZiBpbiB0aGlzLnZpZXdzKWlmKCJsZW5ndGgiIT09ZilpZihiLmlzTnVtYmVyKGMpKWU9PT1jJiYoZz10aGlzLnZpZXdzW2ZdKSxlKys7ZWxzZSBpZihiLmlzT2JqZWN0KGEpKWZvcihkIGluIHRoaXMudmlld3NbZl0pYVtkXT09PXRoaXMudmlld3NbZl1bZF0mJihnPXRoaXMudmlld3NbZl0pO3JldHVybiBnJiYodGhpcy5jdXJyZW50SW5kZXg9Yi5pbmRleE9mKHRoaXMudmlld3MsZyksdGhpcy50cmlnZ2VyVmlldyh7ZGF0YTpiLmV4dGVuZChnLHtvcGVuT3B0aW9uczphfSl9KSksdGhpc30sZy5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YSYmKGE9e30pLHRoaXMuY3VycmVudEluZGV4KzE8dGhpcy52aWV3cy5sZW5ndGg/dGhpcy5vcGVuQXQoYi5leHRlbmQoYSx7X2luZGV4OnRoaXMuY3VycmVudEluZGV4KzF9KSk6dm9pZCAwfSxnLnByb3RvdHlwZS5wcmV2aW91cz1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YSYmKGE9e30pLHRoaXMuY3VycmVudEluZGV4LTE8dGhpcy52aWV3cy5sZW5ndGgtMT90aGlzLm9wZW5BdChiLmV4dGVuZChhLHtfaW5kZXg6dGhpcy5jdXJyZW50SW5kZXgtMX0pKTp2b2lkIDB9LGd9KGUuVmlldyksZS5Nb2RhbD1mLGUuTW9kYWx9KX0pLmNhbGwodGhpcyk7]]></data>
	</file>
	<file>
	  <filename>/js/chance.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBhKSlyZXR1cm4gZXx8KGU9bnVsbCksbnVsbD09PWU/bmV3IGE6bmV3IGEoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUpcmV0dXJuIHRoaXMucmFuZG9tPWUsdGhpczthcmd1bWVudHMubGVuZ3RoJiYodGhpcy5zZWVkPTApO2Zvcih2YXIgbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciBpPTA7aWYoIltvYmplY3QgU3RyaW5nXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnRzW25dKSlmb3IodmFyIHI9MDtyPGFyZ3VtZW50c1tuXS5sZW5ndGg7cisrKXtmb3IodmFyIG89MCx0PTA7dDxhcmd1bWVudHNbbl0ubGVuZ3RoO3QrKylvPWFyZ3VtZW50c1tuXS5jaGFyQ29kZUF0KHQpKyhvPDw2KSsobzw8MTYpLW87aSs9b31lbHNlIGk9YXJndW1lbnRzW25dO3RoaXMuc2VlZCs9KGFyZ3VtZW50cy5sZW5ndGgtbikqaX1yZXR1cm4gdGhpcy5tdD10aGlzLm1lcnNlbm5lX3R3aXN0ZXIodGhpcy5zZWVkKSx0aGlzLmJpbWQ1PXRoaXMuYmx1ZWltcF9tZDUoKSx0aGlzLnJhbmRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm10LnJhbmRvbSh0aGlzLnNlZWQpfSx0aGlzfWZ1bmN0aW9uIGUoYSxlKXtpZihhPWF8fHt9LGUpZm9yKHZhciBuIGluIGUpdm9pZCAwPT09YVtuXSYmKGFbbl09ZVtuXSk7cmV0dXJuIGF9ZnVuY3Rpb24gbihhLGUpe2lmKGEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoZSl9ZnVuY3Rpb24gaShhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYXR1cmFsKGEpfX1mdW5jdGlvbiByKGEsZSl7Zm9yKHZhciBuLGk9cChhKSxyPTAsbz1pLmxlbmd0aDtyPG87cisrKWVbbj1pW3JdXT1hW25dfHxlW25dfWZ1bmN0aW9uIG8oYSxlKXtmb3IodmFyIG49MCxpPWEubGVuZ3RoO248aTtuKyspZVtuXT1hW25dfWZ1bmN0aW9uIHQoYSxlKXt2YXIgbj1BcnJheS5pc0FycmF5KGEpLGk9ZXx8KG4/bmV3IEFycmF5KGEubGVuZ3RoKTp7fSk7cmV0dXJuIG4/byhhLGkpOnIoYSxpKSxpfXZhciBzPTkwMDcxOTkyNTQ3NDA5OTIsbD0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLGM9bC50b1VwcGVyQ2FzZSgpLG09IjAxMjM0NTY3ODlhYmNkZWYiLHU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2EucHJvdG90eXBlLlZFUlNJT049IjEuMC4xMyI7dmFyIGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vIEJhc2U2NCBlbmNvZGVyIGF2YWlsYWJsZS4iKX07ImZ1bmN0aW9uIj09dHlwZW9mIGJ0b2E/ZD1idG9hOiJmdW5jdGlvbiI9PXR5cGVvZiBCdWZmZXImJihkPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgQnVmZmVyKGEpLnRvU3RyaW5nKCJiYXNlNjQiKX0pLGEucHJvdG90eXBlLmJvb2w9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9ZShhLHtsaWtlbGlob29kOjUwfSksbihhLmxpa2VsaWhvb2Q8MHx8YS5saWtlbGlob29kPjEwMCwiQ2hhbmNlOiBMaWtlbGlob29kIGFjY2VwdHMgdmFsdWVzIGZyb20gMCB0byAxMDAuIiksMTAwKnRoaXMucmFuZG9tKCk8YS5saWtlbGlob29kfSxhLnByb3RvdHlwZS5hbmltYWw9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMCE9PShhPWUoYSkpLnR5cGU/KG4oIXRoaXMuZ2V0KCJhbmltYWxzIilbYS50eXBlLnRvTG93ZXJDYXNlKCldLCJQbGVhc2UgcGljayBmcm9tIGRlc2VydCwgb2NlYW4sIGdyYXNzbGFuZCwgZm9yZXN0LCB6b28sIHBldHMsIGZhcm0uIiksdGhpcy5waWNrKHRoaXMuZ2V0KCJhbmltYWxzIilbYS50eXBlLnRvTG93ZXJDYXNlKCldKSk6KGFuaW1hbFR5cGVBcnJheT1bImRlc2VydCIsImZvcmVzdCIsIm9jZWFuIiwiem9vIiwiZmFybSIsInBldCIsImdyYXNzbGFuZCJdLHRoaXMucGljayh0aGlzLmdldCgiYW5pbWFscyIpW3RoaXMucGljayhhbmltYWxUeXBlQXJyYXkpXSkpfSxhLnByb3RvdHlwZS5jaGFyYWN0ZXI9ZnVuY3Rpb24oYSl7bigoYT1lKGEpKS5hbHBoYSYmYS5zeW1ib2xzLCJDaGFuY2U6IENhbm5vdCBzcGVjaWZ5IGJvdGggYWxwaGEgYW5kIHN5bWJvbHMuIik7dmFyIGkscjtyZXR1cm4gaT0ibG93ZXIiPT09YS5jYXNpbmc/bDoidXBwZXIiPT09YS5jYXNpbmc/YzpsK2MsKHI9YS5wb29sP2EucG9vbDphLmFscGhhP2k6YS5zeW1ib2xzPyIhQCMkJV4mKigpW10iOmkrIjAxMjM0NTY3ODkhQCMkJV4mKigpW10iKS5jaGFyQXQodGhpcy5uYXR1cmFsKHttYXg6ci5sZW5ndGgtMX0pKX0sYS5wcm90b3R5cGUuZmxvYXRpbmc9ZnVuY3Rpb24oYSl7bigoYT1lKGEse2ZpeGVkOjR9KSkuZml4ZWQmJmEucHJlY2lzaW9uLCJDaGFuY2U6IENhbm5vdCBzcGVjaWZ5IGJvdGggZml4ZWQgYW5kIHByZWNpc2lvbi4iKTt2YXIgaSxyPU1hdGgucG93KDEwLGEuZml4ZWQpLG89cy9yLHQ9LW87bihhLm1pbiYmYS5maXhlZCYmYS5taW48dCwiQ2hhbmNlOiBNaW4gc3BlY2lmaWVkIGlzIG91dCBvZiByYW5nZSB3aXRoIGZpeGVkLiBNaW4gc2hvdWxkIGJlLCBhdCBsZWFzdCwgIit0KSxuKGEubWF4JiZhLmZpeGVkJiZhLm1heD5vLCJDaGFuY2U6IE1heCBzcGVjaWZpZWQgaXMgb3V0IG9mIHJhbmdlIHdpdGggZml4ZWQuIE1heCBzaG91bGQgYmUsIGF0IG1vc3QsICIrbyksYT1lKGEse21pbjp0LG1heDpvfSk7dmFyIGw9KChpPXRoaXMuaW50ZWdlcih7bWluOmEubWluKnIsbWF4OmEubWF4KnJ9KSkvcikudG9GaXhlZChhLmZpeGVkKTtyZXR1cm4gcGFyc2VGbG9hdChsKX0sYS5wcm90b3R5cGUuaW50ZWdlcj1mdW5jdGlvbihhKXtyZXR1cm4gYT1lKGEse21pbjotOTAwNzE5OTI1NDc0MDk5MixtYXg6c30pLG4oYS5taW4+YS5tYXgsIkNoYW5jZTogTWluIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gTWF4LiIpLE1hdGguZmxvb3IodGhpcy5yYW5kb20oKSooYS5tYXgtYS5taW4rMSkrYS5taW4pfSxhLnByb3RvdHlwZS5uYXR1cmFsPWZ1bmN0aW9uKGEpe3JldHVybiJudW1iZXIiPT10eXBlb2YoYT1lKGEse21pbjowLG1heDpzfSkpLm51bWVyYWxzJiYobihhLm51bWVyYWxzPDEsIkNoYW5jZTogTnVtZXJhbHMgY2Fubm90IGJlIGxlc3MgdGhhbiBvbmUuIiksYS5taW49TWF0aC5wb3coMTAsYS5udW1lcmFscy0xKSxhLm1heD1NYXRoLnBvdygxMCxhLm51bWVyYWxzKS0xKSxuKGEubWluPDAsIkNoYW5jZTogTWluIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVyby4iKSx0aGlzLmludGVnZXIoYSl9LGEucHJvdG90eXBlLmhleD1mdW5jdGlvbihhKXtuKChhPWUoYSx7bWluOjAsbWF4OnMsY2FzaW5nOiJsb3dlciJ9KSkubWluPDAsIkNoYW5jZTogTWluIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVyby4iKTt2YXIgaT10aGlzLm5hdHVyYWwoe21pbjphLm1pbixtYXg6YS5tYXh9KTtyZXR1cm4idXBwZXIiPT09YS5jYXNpbmc/aS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTppLnRvU3RyaW5nKDE2KX0sYS5wcm90b3R5cGUubGV0dGVyPWZ1bmN0aW9uKGEpe2E9ZShhLHtjYXNpbmc6Imxvd2VyIn0pO3ZhciBuPXRoaXMuY2hhcmFjdGVyKHtwb29sOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiJ9KTtyZXR1cm4idXBwZXIiPT09YS5jYXNpbmcmJihuPW4udG9VcHBlckNhc2UoKSksbn0sYS5wcm90b3R5cGUuc3RyaW5nPWZ1bmN0aW9uKGEpe24oKGE9ZShhLHtsZW5ndGg6dGhpcy5uYXR1cmFsKHttaW46NSxtYXg6MjB9KX0pKS5sZW5ndGg8MCwiQ2hhbmNlOiBMZW5ndGggY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvLiIpO3ZhciBpPWEubGVuZ3RoO3JldHVybiB0aGlzLm4odGhpcy5jaGFyYWN0ZXIsaSxhKS5qb2luKCIiKX0sYS5wcm90b3R5cGUuY2FwaXRhbGl6ZT1mdW5jdGlvbihhKXtyZXR1cm4gYS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSthLnN1YnN0cigxKX0sYS5wcm90b3R5cGUubWl4aW49ZnVuY3Rpb24oZSl7Zm9yKHZhciBuIGluIGUpYS5wcm90b3R5cGVbbl09ZVtuXTtyZXR1cm4gdGhpc30sYS5wcm90b3R5cGUudW5pcXVlPWZ1bmN0aW9uKGEsZSxpKXtuKCJmdW5jdGlvbiIhPXR5cGVvZiBhLCJDaGFuY2U6IFRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24uIik7dmFyIHI9ZnVuY3Rpb24oYSxlKXtyZXR1cm4tMSE9PWEuaW5kZXhPZihlKX07aSYmKHI9aS5jb21wYXJhdG9yfHxyKTtmb3IodmFyIG8sdD1bXSxzPTAsbD01MCplLGM9dS5jYWxsKGFyZ3VtZW50cywyKTt0Lmxlbmd0aDxlOyl7dmFyIG09SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjKSk7aWYobz1hLmFwcGx5KHRoaXMsbSkscih0LG8pfHwodC5wdXNoKG8pLHM9MCksKytzPmwpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNoYW5jZTogbnVtIGlzIGxpa2VseSB0b28gbGFyZ2UgZm9yIHNhbXBsZSBzZXQiKX1yZXR1cm4gdH0sYS5wcm90b3R5cGUubj1mdW5jdGlvbihhLGUpe24oImZ1bmN0aW9uIiE9dHlwZW9mIGEsIkNoYW5jZTogVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbi4iKSx2b2lkIDA9PT1lJiYoZT0xKTt2YXIgaT1lLHI9W10sbz11LmNhbGwoYXJndW1lbnRzLDIpO2ZvcihpPU1hdGgubWF4KDAsaSksbnVsbDtpLS07bnVsbClyLnB1c2goYS5hcHBseSh0aGlzLG8pKTtyZXR1cm4gcn0sYS5wcm90b3R5cGUucGFkPWZ1bmN0aW9uKGEsZSxuKXtyZXR1cm4gbj1ufHwiMCIsKGErPSIiKS5sZW5ndGg+PWU/YTpuZXcgQXJyYXkoZS1hLmxlbmd0aCsxKS5qb2luKG4pK2F9LGEucHJvdG90eXBlLnBpY2s9ZnVuY3Rpb24oYSxlKXtpZigwPT09YS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNoYW5jZTogQ2Fubm90IHBpY2soKSBmcm9tIGFuIGVtcHR5IGFycmF5Iik7cmV0dXJuIGUmJjEhPT1lP3RoaXMuc2h1ZmZsZShhKS5zbGljZSgwLGUpOmFbdGhpcy5uYXR1cmFsKHttYXg6YS5sZW5ndGgtMX0pXX0sYS5wcm90b3R5cGUucGlja29uZT1mdW5jdGlvbihhKXtpZigwPT09YS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNoYW5jZTogQ2Fubm90IHBpY2tvbmUoKSBmcm9tIGFuIGVtcHR5IGFycmF5Iik7cmV0dXJuIGFbdGhpcy5uYXR1cmFsKHttYXg6YS5sZW5ndGgtMX0pXX0sYS5wcm90b3R5cGUucGlja3NldD1mdW5jdGlvbihhLGUpe2lmKDA9PT1lKXJldHVybltdO2lmKDA9PT1hLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ2hhbmNlOiBDYW5ub3QgcGlja3NldCgpIGZyb20gYW4gZW1wdHkgYXJyYXkiKTtpZihlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNoYW5jZTogQ291bnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciIpO3JldHVybiBlJiYxIT09ZT90aGlzLnNodWZmbGUoYSkuc2xpY2UoMCxlKTpbdGhpcy5waWNrb25lKGEpXX0sYS5wcm90b3R5cGUuc2h1ZmZsZT1mdW5jdGlvbihhKXtmb3IodmFyIGU9YS5zbGljZSgwKSxuPVtdLGk9MCxyPU51bWJlcihlLmxlbmd0aCksbz0wO288cjtvKyspaT10aGlzLm5hdHVyYWwoe21heDplLmxlbmd0aC0xfSksbltvXT1lW2ldLGUuc3BsaWNlKGksMSk7cmV0dXJuIG59LGEucHJvdG90eXBlLndlaWdodGVkPWZ1bmN0aW9uKGEsZSxuKXtpZihhLmxlbmd0aCE9PWUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJDaGFuY2U6IExlbmd0aCBvZiBhcnJheSBhbmQgd2VpZ2h0cyBtdXN0IG1hdGNoIik7Zm9yKHZhciBpLHI9MCxvPTA7bzxlLmxlbmd0aDsrK28pe2lmKGk9ZVtvXSxpc05hTihpKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ2hhbmNlOiBBbGwgd2VpZ2h0cyBtdXN0IGJlIG51bWJlcnMiKTtpPjAmJihyKz1pKX1pZigwPT09cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ2hhbmNlOiBObyB2YWxpZCBlbnRyaWVzIGluIGFycmF5IHdlaWdodHMiKTt2YXIgdCxzPXRoaXMucmFuZG9tKCkqcixsPTAsYz0tMTtmb3Iobz0wO288ZS5sZW5ndGg7KytvKXtpZihpPWVbb10sbCs9aSxpPjApe2lmKHM8PWwpe3Q9bzticmVha31jPW99bz09PWUubGVuZ3RoLTEmJih0PWMpfXZhciBtPWFbdF07cmV0dXJuKG49dm9pZCAwIT09biYmbikmJihhLnNwbGljZSh0LDEpLGUuc3BsaWNlKHQsMSkpLG19LGEucHJvdG90eXBlLnBhcmFncmFwaD1mdW5jdGlvbihhKXt2YXIgbj0oYT1lKGEpKS5zZW50ZW5jZXN8fHRoaXMubmF0dXJhbCh7bWluOjMsbWF4Ojd9KTtyZXR1cm4gdGhpcy5uKHRoaXMuc2VudGVuY2Usbikuam9pbigiICIpfSxhLnByb3RvdHlwZS5zZW50ZW5jZT1mdW5jdGlvbihhKXt2YXIgbixpPShhPWUoYSkpLndvcmRzfHx0aGlzLm5hdHVyYWwoe21pbjoxMixtYXg6MTh9KSxyPWEucHVuY3R1YXRpb247cmV0dXJuIG49dGhpcy5uKHRoaXMud29yZCxpKS5qb2luKCIgIiksbj10aGlzLmNhcGl0YWxpemUobiksITE9PT1yfHwvXltcLlw/OyE6XSQvLnRlc3Qocil8fChyPSIuIiksciYmKG4rPXIpLG59LGEucHJvdG90eXBlLnN5bGxhYmxlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgbixpPShhPWUoYSkpLmxlbmd0aHx8dGhpcy5uYXR1cmFsKHttaW46MixtYXg6M30pLHI9IiIsbz0wO288aTtvKyspcis9bj0wPT09bz90aGlzLmNoYXJhY3Rlcih7cG9vbDoiYmNkZmdoamtsbW5wcnN0dnd6YWVpb3UifSk6LTE9PT0iYmNkZmdoamtsbW5wcnN0dnd6Ii5pbmRleE9mKG4pP3RoaXMuY2hhcmFjdGVyKHtwb29sOiJiY2RmZ2hqa2xtbnByc3R2d3oifSk6dGhpcy5jaGFyYWN0ZXIoe3Bvb2w6ImFlaW91In0pO3JldHVybiBhLmNhcGl0YWxpemUmJihyPXRoaXMuY2FwaXRhbGl6ZShyKSkscn0sYS5wcm90b3R5cGUud29yZD1mdW5jdGlvbihhKXtuKChhPWUoYSkpLnN5bGxhYmxlcyYmYS5sZW5ndGgsIkNoYW5jZTogQ2Fubm90IHNwZWNpZnkgYm90aCBzeWxsYWJsZXMgQU5EIGxlbmd0aC4iKTt2YXIgaT1hLnN5bGxhYmxlc3x8dGhpcy5uYXR1cmFsKHttaW46MSxtYXg6M30pLHI9IiI7aWYoYS5sZW5ndGgpe2Rve3IrPXRoaXMuc3lsbGFibGUoKX13aGlsZShyLmxlbmd0aDxhLmxlbmd0aCk7cj1yLnN1YnN0cmluZygwLGEubGVuZ3RoKX1lbHNlIGZvcih2YXIgbz0wO288aTtvKyspcis9dGhpcy5zeWxsYWJsZSgpO3JldHVybiBhLmNhcGl0YWxpemUmJihyPXRoaXMuY2FwaXRhbGl6ZShyKSkscn0sYS5wcm90b3R5cGUuYWdlPWZ1bmN0aW9uKGEpe3ZhciBuO3N3aXRjaCgoYT1lKGEpKS50eXBlKXtjYXNlImNoaWxkIjpuPXttaW46MCxtYXg6MTJ9O2JyZWFrO2Nhc2UidGVlbiI6bj17bWluOjEzLG1heDoxOX07YnJlYWs7Y2FzZSJhZHVsdCI6bj17bWluOjE4LG1heDo2NX07YnJlYWs7Y2FzZSJzZW5pb3IiOm49e21pbjo2NSxtYXg6MTAwfTticmVhaztjYXNlImFsbCI6bj17bWluOjAsbWF4OjEwMH07YnJlYWs7ZGVmYXVsdDpuPXttaW46MTgsbWF4OjY1fX1yZXR1cm4gdGhpcy5uYXR1cmFsKG4pfSxhLnByb3RvdHlwZS5iaXJ0aGRheT1mdW5jdGlvbihhKXt2YXIgbj10aGlzLmFnZShhKSxpPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKTtpZihhJiZhLnR5cGUpe3ZhciByPW5ldyBEYXRlLG89bmV3IERhdGU7ci5zZXRGdWxsWWVhcihpLW4tMSksby5zZXRGdWxsWWVhcihpLW4pLGE9ZShhLHttaW46cixtYXg6b30pfWVsc2UgYT1lKGEse3llYXI6aS1ufSk7cmV0dXJuIHRoaXMuZGF0ZShhKX0sYS5wcm90b3R5cGUuY3BmPWZ1bmN0aW9uKGEpe2E9ZShhLHtmb3JtYXR0ZWQ6ITB9KTt2YXIgbj10aGlzLm4odGhpcy5uYXR1cmFsLDkse21heDo5fSksaT0yKm5bOF0rMypuWzddKzQqbls2XSs1Km5bNV0rNipuWzRdKzcqblszXSs4Km5bMl0rOSpuWzFdKzEwKm5bMF07KGk9MTEtaSUxMSk+PTEwJiYoaT0wKTt2YXIgcj0yKmkrMypuWzhdKzQqbls3XSs1Km5bNl0rNipuWzVdKzcqbls0XSs4Km5bM10rOSpuWzJdKzEwKm5bMV0rMTEqblswXTsocj0xMS1yJTExKT49MTAmJihyPTApO3ZhciBvPSIiK25bMF0rblsxXStuWzJdKyIuIituWzNdK25bNF0rbls1XSsiLiIrbls2XStuWzddK25bOF0rIi0iK2krcjtyZXR1cm4gYS5mb3JtYXR0ZWQ/bzpvLnJlcGxhY2UoL1xEL2csIiIpfSxhLnByb3RvdHlwZS5jbnBqPWZ1bmN0aW9uKGEpe2E9ZShhLHtmb3JtYXR0ZWQ6ITB9KTt2YXIgbj10aGlzLm4odGhpcy5uYXR1cmFsLDEyLHttYXg6MTJ9KSxpPTIqblsxMV0rMypuWzEwXSs0Km5bOV0rNSpuWzhdKzYqbls3XSs3Km5bNl0rOCpuWzVdKzkqbls0XSsyKm5bM10rMypuWzJdKzQqblsxXSs1Km5bMF07KGk9MTEtaSUxMSk8MiYmKGk9MCk7dmFyIHI9MippKzMqblsxMV0rNCpuWzEwXSs1Km5bOV0rNipuWzhdKzcqbls3XSs4Km5bNl0rOSpuWzVdKzIqbls0XSszKm5bM10rNCpuWzJdKzUqblsxXSs2Km5bMF07KHI9MTEtciUxMSk8MiYmKHI9MCk7dmFyIG89IiIrblswXStuWzFdKyIuIituWzJdK25bM10rbls0XSsiLiIrbls1XStuWzZdK25bN10rIi8iK25bOF0rbls5XStuWzEwXStuWzExXSsiLSIraStyO3JldHVybiBhLmZvcm1hdHRlZD9vOm8ucmVwbGFjZSgvXEQvZywiIil9LGEucHJvdG90eXBlLmZpcnN0PWZ1bmN0aW9uKGEpe3JldHVybiBhPWUoYSx7Z2VuZGVyOnRoaXMuZ2VuZGVyKCksbmF0aW9uYWxpdHk6ImVuIn0pLHRoaXMucGljayh0aGlzLmdldCgiZmlyc3ROYW1lcyIpW2EuZ2VuZGVyLnRvTG93ZXJDYXNlKCldW2EubmF0aW9uYWxpdHkudG9Mb3dlckNhc2UoKV0pfSxhLnByb3RvdHlwZS5wcm9mZXNzaW9uPWZ1bmN0aW9uKGEpe3JldHVybihhPWUoYSkpLnJhbms/dGhpcy5waWNrKFsiQXBwcmVudGljZSAiLCJKdW5pb3IgIiwiU2VuaW9yICIsIkxlYWQgIl0pK3RoaXMucGljayh0aGlzLmdldCgicHJvZmVzc2lvbiIpKTp0aGlzLnBpY2sodGhpcy5nZXQoInByb2Zlc3Npb24iKSl9LGEucHJvdG90eXBlLmNvbXBhbnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5waWNrKHRoaXMuZ2V0KCJjb21wYW55IikpfSxhLnByb3RvdHlwZS5nZW5kZXI9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9ZShhLHtleHRyYUdlbmRlcnM6W119KSx0aGlzLnBpY2soWyJNYWxlIiwiRmVtYWxlIl0uY29uY2F0KGEuZXh0cmFHZW5kZXJzKSl9LGEucHJvdG90eXBlLmxhc3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9ZShhLHtuYXRpb25hbGl0eToiZW4ifSksdGhpcy5waWNrKHRoaXMuZ2V0KCJsYXN0TmFtZXMiKVthLm5hdGlvbmFsaXR5LnRvTG93ZXJDYXNlKCldKX0sYS5wcm90b3R5cGUuaXNyYWVsSWQ9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5zdHJpbmcoe3Bvb2w6IjAxMjM0NTY3ODkiLGxlbmd0aDo4fSksZT0wLG49MDtuPGEubGVuZ3RoO24rKyl7dmFyIGk9YVtuXSoobi8yPT09cGFyc2VJbnQobi8yKT8xOjIpO2k9dGhpcy5wYWQoaSwyKS50b1N0cmluZygpLGUrPWk9cGFyc2VJbnQoaVswXSkrcGFyc2VJbnQoaVsxXSl9cmV0dXJuIGErPSgxMC1wYXJzZUludChlLnRvU3RyaW5nKCkuc2xpY2UoLTEpKSkudG9TdHJpbmcoKS5zbGljZSgtMSl9LGEucHJvdG90eXBlLm1yej1mdW5jdGlvbihhKXt2YXIgbj1mdW5jdGlvbihhKXt2YXIgZT0iPEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlYWiIuc3BsaXQoIiIpLG49WzcsMywxXSxpPTA7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoYT1hLnRvU3RyaW5nKCkpLGEuc3BsaXQoIiIpLmZvckVhY2goZnVuY3Rpb24oYSxyKXt2YXIgbz1lLmluZGV4T2YoYSk7YT0tMSE9PW8/MD09PW8/MDpvKzk6cGFyc2VJbnQoYSwxMCksaSs9YSo9bltyJW4ubGVuZ3RoXX0pLGklMTB9LGk9dGhpcztyZXR1cm4gYT1lKGEse2ZpcnN0OnRoaXMuZmlyc3QoKSxsYXN0OnRoaXMubGFzdCgpLHBhc3Nwb3J0TnVtYmVyOnRoaXMuaW50ZWdlcih7bWluOjFlOCxtYXg6OTk5OTk5OTk5fSksZG9iOmZ1bmN0aW9uKCl7dmFyIGE9aS5iaXJ0aGRheSh7dHlwZToiYWR1bHQifSk7cmV0dXJuW2EuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpLnN1YnN0cigyKSxpLnBhZChhLmdldE1vbnRoKCkrMSwyKSxpLnBhZChhLmdldERhdGUoKSwyKV0uam9pbigiIil9KCksZXhwaXJ5OmZ1bmN0aW9uKCl7dmFyIGE9bmV3IERhdGU7cmV0dXJuWyhhLmdldEZ1bGxZZWFyKCkrNSkudG9TdHJpbmcoKS5zdWJzdHIoMiksaS5wYWQoYS5nZXRNb250aCgpKzEsMiksaS5wYWQoYS5nZXREYXRlKCksMildLmpvaW4oIiIpfSgpLGdlbmRlcjoiRmVtYWxlIj09PXRoaXMuZ2VuZGVyKCk/IkYiOiJNIixpc3N1ZXI6IkdCUiIsbmF0aW9uYWxpdHk6IkdCUiJ9KSxmdW5jdGlvbihhKXt2YXIgZT1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IEFycmF5KGErMSkuam9pbigiPCIpfSxpPVsiUDwiLGEuaXNzdWVyLGEubGFzdC50b1VwcGVyQ2FzZSgpLCI8PCIsYS5maXJzdC50b1VwcGVyQ2FzZSgpLGUoMzktKGEubGFzdC5sZW5ndGgrYS5maXJzdC5sZW5ndGgrMikpLGEucGFzc3BvcnROdW1iZXIsbihhLnBhc3Nwb3J0TnVtYmVyKSxhLm5hdGlvbmFsaXR5LGEuZG9iLG4oYS5kb2IpLGEuZ2VuZGVyLGEuZXhwaXJ5LG4oYS5leHBpcnkpLGUoMTQpLG4oZSgxNCkpXS5qb2luKCIiKTtyZXR1cm4gaStuKGkuc3Vic3RyKDQ0LDEwKStpLnN1YnN0cig1Nyw3KStpLnN1YnN0cig2NSw3KSl9KGEpfSxhLnByb3RvdHlwZS5uYW1lPWZ1bmN0aW9uKGEpe2E9ZShhKTt2YXIgbixpPXRoaXMuZmlyc3QoYSkscj10aGlzLmxhc3QoYSk7cmV0dXJuIG49YS5taWRkbGU/aSsiICIrdGhpcy5maXJzdChhKSsiICIrcjphLm1pZGRsZV9pbml0aWFsP2krIiAiK3RoaXMuY2hhcmFjdGVyKHthbHBoYTohMCxjYXNpbmc6InVwcGVyIn0pKyIuICIrcjppKyIgIityLGEucHJlZml4JiYobj10aGlzLnByZWZpeChhKSsiICIrbiksYS5zdWZmaXgmJihuPW4rIiAiK3RoaXMuc3VmZml4KGEpKSxufSxhLnByb3RvdHlwZS5uYW1lX3ByZWZpeGVzPWZ1bmN0aW9uKGEpe3ZhciBlPVt7bmFtZToiRG9jdG9yIixhYmJyZXZpYXRpb246IkRyLiJ9XTtyZXR1cm4ibWFsZSIhPT0oYT0oYT1hfHwiYWxsIikudG9Mb3dlckNhc2UoKSkmJiJhbGwiIT09YXx8ZS5wdXNoKHtuYW1lOiJNaXN0ZXIiLGFiYnJldmlhdGlvbjoiTXIuIn0pLCJmZW1hbGUiIT09YSYmImFsbCIhPT1hfHwoZS5wdXNoKHtuYW1lOiJNaXNzIixhYmJyZXZpYXRpb246Ik1pc3MifSksZS5wdXNoKHtuYW1lOiJNaXNzZXMiLGFiYnJldmlhdGlvbjoiTXJzLiJ9KSksZX0sYS5wcm90b3R5cGUucHJlZml4PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5hbWVfcHJlZml4KGEpfSxhLnByb3RvdHlwZS5uYW1lX3ByZWZpeD1mdW5jdGlvbihhKXtyZXR1cm4oYT1lKGEse2dlbmRlcjoiYWxsIn0pKS5mdWxsP3RoaXMucGljayh0aGlzLm5hbWVfcHJlZml4ZXMoYS5nZW5kZXIpKS5uYW1lOnRoaXMucGljayh0aGlzLm5hbWVfcHJlZml4ZXMoYS5nZW5kZXIpKS5hYmJyZXZpYXRpb259LGEucHJvdG90eXBlLkhJRE49ZnVuY3Rpb24oKXt2YXIgYT0iIjtyZXR1cm4gYSs9dGhpcy5zdHJpbmcoe3Bvb2w6IjAxMjM0NTY3ODkiLGxlbmd0aDo2fSksYSs9dGhpcy5zdHJpbmcoe3Bvb2w6IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlYWiIsbGVuZ3RoOjJ9KX0sYS5wcm90b3R5cGUuc3NuPWZ1bmN0aW9uKGEpe3ZhciBuPShhPWUoYSx7c3NuRm91cjohMSxkYXNoZXM6ITB9KSkuZGFzaGVzPyItIjoiIjtyZXR1cm4gYS5zc25Gb3VyP3RoaXMuc3RyaW5nKHtwb29sOiIxMjM0NTY3ODkwIixsZW5ndGg6NH0pOnRoaXMuc3RyaW5nKHtwb29sOiIxMjM0NTY3ODkwIixsZW5ndGg6M30pK24rdGhpcy5zdHJpbmcoe3Bvb2w6IjEyMzQ1Njc4OTAiLGxlbmd0aDoyfSkrbit0aGlzLnN0cmluZyh7cG9vbDoiMTIzNDU2Nzg5MCIsbGVuZ3RoOjR9KX0sYS5wcm90b3R5cGUubmFtZV9zdWZmaXhlcz1mdW5jdGlvbigpe3JldHVyblt7bmFtZToiRG9jdG9yIG9mIE9zdGVvcGF0aGljIE1lZGljaW5lIixhYmJyZXZpYXRpb246IkQuTy4ifSx7bmFtZToiRG9jdG9yIG9mIFBoaWxvc29waHkiLGFiYnJldmlhdGlvbjoiUGguRC4ifSx7bmFtZToiRXNxdWlyZSIsYWJicmV2aWF0aW9uOiJFc3EuIn0se25hbWU6Ikp1bmlvciIsYWJicmV2aWF0aW9uOiJKci4ifSx7bmFtZToiSnVyaXMgRG9jdG9yIixhYmJyZXZpYXRpb246IkouRC4ifSx7bmFtZToiTWFzdGVyIG9mIEFydHMiLGFiYnJldmlhdGlvbjoiTS5BLiJ9LHtuYW1lOiJNYXN0ZXIgb2YgQnVzaW5lc3MgQWRtaW5pc3RyYXRpb24iLGFiYnJldmlhdGlvbjoiTS5CLkEuIn0se25hbWU6Ik1hc3RlciBvZiBTY2llbmNlIixhYmJyZXZpYXRpb246Ik0uUy4ifSx7bmFtZToiTWVkaWNhbCBEb2N0b3IiLGFiYnJldmlhdGlvbjoiTS5ELiJ9LHtuYW1lOiJTZW5pb3IiLGFiYnJldmlhdGlvbjoiU3IuIn0se25hbWU6IlRoZSBUaGlyZCIsYWJicmV2aWF0aW9uOiJJSUkifSx7bmFtZToiVGhlIEZvdXJ0aCIsYWJicmV2aWF0aW9uOiJJViJ9LHtuYW1lOiJCYWNoZWxvciBvZiBFbmdpbmVlcmluZyIsYWJicmV2aWF0aW9uOiJCLkUifSx7bmFtZToiQmFjaGVsb3Igb2YgVGVjaG5vbG9neSIsYWJicmV2aWF0aW9uOiJCLlRFQ0gifV19LGEucHJvdG90eXBlLnN1ZmZpeD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5uYW1lX3N1ZmZpeChhKX0sYS5wcm90b3R5cGUubmFtZV9zdWZmaXg9ZnVuY3Rpb24oYSl7cmV0dXJuKGE9ZShhKSkuZnVsbD90aGlzLnBpY2sodGhpcy5uYW1lX3N1ZmZpeGVzKCkpLm5hbWU6dGhpcy5waWNrKHRoaXMubmFtZV9zdWZmaXhlcygpKS5hYmJyZXZpYXRpb259LGEucHJvdG90eXBlLm5hdGlvbmFsaXRpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoIm5hdGlvbmFsaXRpZXMiKX0sYS5wcm90b3R5cGUubmF0aW9uYWxpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5waWNrKHRoaXMubmF0aW9uYWxpdGllcygpKS5uYW1lfSxhLnByb3RvdHlwZS5hbmRyb2lkX2lkPWZ1bmN0aW9uKCl7cmV0dXJuIkFQQTkxIit0aGlzLnN0cmluZyh7cG9vbDoiMDEyMzQ1Njc4OWFiY2VmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi1fIixsZW5ndGg6MTc4fSl9LGEucHJvdG90eXBlLmFwcGxlX3Rva2VuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nKHtwb29sOiJhYmNkZWYxMjM0NTY3ODkwIixsZW5ndGg6NjR9KX0sYS5wcm90b3R5cGUud3A4X2FuaWQyPWZ1bmN0aW9uKCl7cmV0dXJuIGQodGhpcy5oYXNoKHtsZW5ndGg6MzJ9KSl9LGEucHJvdG90eXBlLndwN19hbmlkPWZ1bmN0aW9uKCl7cmV0dXJuIkE9Iit0aGlzLmd1aWQoKS5yZXBsYWNlKC8tL2csIiIpLnRvVXBwZXJDYXNlKCkrIiZFPSIrdGhpcy5oYXNoKHtsZW5ndGg6M30pKyImVz0iK3RoaXMuaW50ZWdlcih7bWluOjAsbWF4Ojl9KX0sYS5wcm90b3R5cGUuYmJfcGluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzaCh7bGVuZ3RoOjh9KX0sYS5wcm90b3R5cGUuYXZhdGFyPWZ1bmN0aW9uKGEpe3ZhciBuPXtwcm90b2NvbDpudWxsLGVtYWlsOm51bGwsZmlsZUV4dGVuc2lvbjpudWxsLHNpemU6bnVsbCxmYWxsYmFjazpudWxsLHJhdGluZzpudWxsfTtpZihhKWlmKCJzdHJpbmciPT10eXBlb2YgYSluLmVtYWlsPWEsYT17fTtlbHNle2lmKCJvYmplY3QiIT10eXBlb2YgYSlyZXR1cm4gbnVsbDtpZigiQXJyYXkiPT09YS5jb25zdHJ1Y3RvcilyZXR1cm4gbnVsbH1lbHNlIG4uZW1haWw9dGhpcy5lbWFpbCgpLGE9e307cmV0dXJuKG49ZShhLG4pKS5lbWFpbHx8KG4uZW1haWw9dGhpcy5lbWFpbCgpKSxuLnByb3RvY29sPXtodHRwOiJodHRwIixodHRwczoiaHR0cHMifVtuLnByb3RvY29sXT9uLnByb3RvY29sKyI6IjoiIixuLnNpemU9cGFyc2VJbnQobi5zaXplLDApP24uc2l6ZToiIixuLnJhdGluZz17ZzoiZyIscGc6InBnIixyOiJyIix4OiJ4In1bbi5yYXRpbmddP24ucmF0aW5nOiIiLG4uZmFsbGJhY2s9ezQwNDoiNDA0IixtbToibW0iLGlkZW50aWNvbjoiaWRlbnRpY29uIixtb25zdGVyaWQ6Im1vbnN0ZXJpZCIsd2F2YXRhcjoid2F2YXRhciIscmV0cm86InJldHJvIixibGFuazoiYmxhbmsifVtuLmZhbGxiYWNrXT9uLmZhbGxiYWNrOiIiLG4uZmlsZUV4dGVuc2lvbj17Ym1wOiJibXAiLGdpZjoiZ2lmIixqcGc6ImpwZyIscG5nOiJwbmcifVtuLmZpbGVFeHRlbnNpb25dP24uZmlsZUV4dGVuc2lvbjoiIixuLnByb3RvY29sKyIvL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyLyIrdGhpcy5iaW1kNS5tZDUobi5lbWFpbCkrKG4uZmlsZUV4dGVuc2lvbj8iLiIrbi5maWxlRXh0ZW5zaW9uOiIiKSsobi5zaXplfHxuLnJhdGluZ3x8bi5mYWxsYmFjaz8iPyI6IiIpKyhuLnNpemU/IiZzPSIrbi5zaXplLnRvU3RyaW5nKCk6IiIpKyhuLnJhdGluZz8iJnI9IituLnJhdGluZzoiIikrKG4uZmFsbGJhY2s/IiZkPSIrbi5mYWxsYmFjazoiIil9LGEucHJvdG90eXBlLmNvbG9yPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIG4oYSxlKXtyZXR1cm5bYSxhLGFdLmpvaW4oZXx8IiIpfWZ1bmN0aW9uIGkoYSl7dmFyIGU9YT8icmdiYSI6InJnYiIsaT1hPyIsIit0aGlzLmZsb2F0aW5nKHttaW46YixtYXg6cH0pOiIiO3JldHVybiBlKyIoIisobz9uKHRoaXMubmF0dXJhbCh7bWluOnQsbWF4OnN9KSwiLCIpOnRoaXMubmF0dXJhbCh7bWluOm0sbWF4OnV9KSsiLCIrdGhpcy5uYXR1cmFsKHttaW46ZCxtYXg6aH0pKyIsIit0aGlzLm5hdHVyYWwoe21heDoyNTV9KSkraSsiKSJ9ZnVuY3Rpb24gcihlLGkscil7dmFyIGI9cj8iIyI6IiIscD0iIjtyZXR1cm4gbz8ocD1uKHRoaXMucGFkKHRoaXMuaGV4KHttaW46dCxtYXg6c30pLDIpKSwic2hvcnRoZXgiPT09YS5mb3JtYXQmJihwPW4odGhpcy5oZXgoe21pbjowLG1heDoxNX0pKSkpOnA9InNob3J0aGV4Ij09PWEuZm9ybWF0P3RoaXMucGFkKHRoaXMuaGV4KHttaW46TWF0aC5mbG9vcihsLzE2KSxtYXg6TWF0aC5mbG9vcihjLzE2KX0pLDEpK3RoaXMucGFkKHRoaXMuaGV4KHttaW46TWF0aC5mbG9vcihtLzE2KSxtYXg6TWF0aC5mbG9vcih1LzE2KX0pLDEpK3RoaXMucGFkKHRoaXMuaGV4KHttaW46TWF0aC5mbG9vcihkLzE2KSxtYXg6TWF0aC5mbG9vcihoLzE2KX0pLDEpOnZvaWQgMCE9PWx8fHZvaWQgMCE9PWN8fHZvaWQgMCE9PW18fHZvaWQgMCE9PXV8fHZvaWQgMCE9PWR8fHZvaWQgMCE9PWg/dGhpcy5wYWQodGhpcy5oZXgoe21pbjpsLG1heDpjfSksMikrdGhpcy5wYWQodGhpcy5oZXgoe21pbjptLG1heDp1fSksMikrdGhpcy5wYWQodGhpcy5oZXgoe21pbjpkLG1heDpofSksMik6dGhpcy5wYWQodGhpcy5oZXgoe21pbjp0LG1heDpzfSksMikrdGhpcy5wYWQodGhpcy5oZXgoe21pbjp0LG1heDpzfSksMikrdGhpcy5wYWQodGhpcy5oZXgoe21pbjp0LG1heDpzfSksMiksYitwfXZhciBvPShhPWUoYSx7Zm9ybWF0OnRoaXMucGljayhbImhleCIsInNob3J0aGV4IiwicmdiIiwicmdiYSIsIjB4IiwibmFtZSJdKSxncmF5c2NhbGU6ITEsY2FzaW5nOiJsb3dlciIsbWluOjAsbWF4OjI1NSxtaW5fcmVkOnZvaWQgMCxtYXhfcmVkOnZvaWQgMCxtaW5fZ3JlZW46dm9pZCAwLG1heF9ncmVlbjp2b2lkIDAsbWluX2JsdWU6dm9pZCAwLG1heF9ibHVlOnZvaWQgMCxtaW5fYWxwaGE6MCxtYXhfYWxwaGE6MX0pKS5ncmF5c2NhbGUsdD1hLm1pbixzPWEubWF4LGw9YS5taW5fcmVkLGM9YS5tYXhfcmVkLG09YS5taW5fZ3JlZW4sdT1hLm1heF9ncmVlbixkPWEubWluX2JsdWUsaD1hLm1heF9ibHVlLGI9YS5taW5fYWxwaGEscD1hLm1heF9hbHBoYTt2b2lkIDA9PT1hLm1pbl9yZWQmJihsPXQpLHZvaWQgMD09PWEubWF4X3JlZCYmKGM9cyksdm9pZCAwPT09YS5taW5fZ3JlZW4mJihtPXQpLHZvaWQgMD09PWEubWF4X2dyZWVuJiYodT1zKSx2b2lkIDA9PT1hLm1pbl9ibHVlJiYoZD10KSx2b2lkIDA9PT1hLm1heF9ibHVlJiYoaD1zKSx2b2lkIDA9PT1hLm1pbl9hbHBoYSYmKGI9MCksdm9pZCAwPT09YS5tYXhfYWxwaGEmJihwPTEpLG8mJjA9PT10JiYyNTU9PT1zJiZ2b2lkIDAhPT1sJiZ2b2lkIDAhPT1jJiYodD0obCttK2QpLzMscz0oYyt1K2gpLzMpO3ZhciBDO2lmKCJoZXgiPT09YS5mb3JtYXQpQz1yLmNhbGwodGhpcywyLDYsITApO2Vsc2UgaWYoInNob3J0aGV4Ij09PWEuZm9ybWF0KUM9ci5jYWxsKHRoaXMsMSwzLCEwKTtlbHNlIGlmKCJyZ2IiPT09YS5mb3JtYXQpQz1pLmNhbGwodGhpcywhMSk7ZWxzZSBpZigicmdiYSI9PT1hLmZvcm1hdClDPWkuY2FsbCh0aGlzLCEwKTtlbHNle2lmKCIweCIhPT1hLmZvcm1hdCl7aWYoIm5hbWUiPT09YS5mb3JtYXQpcmV0dXJuIHRoaXMucGljayh0aGlzLmdldCgiY29sb3JOYW1lcyIpKTt0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBmb3JtYXQgcHJvdmlkZWQuIFBsZWFzZSBwcm92aWRlIG9uZSBvZiAiaGV4IiwgInNob3J0aGV4IiwgInJnYiIsICJyZ2JhIiwgIjB4IiBvciAibmFtZSIuJyl9Qz0iMHgiK3IuY2FsbCh0aGlzLDIsNil9cmV0dXJuInVwcGVyIj09PWEuY2FzaW5nJiYoQz1DLnRvVXBwZXJDYXNlKCkpLEN9LGEucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYT1lKGEpLHRoaXMud29yZCgpKyIuIisoYS50bGR8fHRoaXMudGxkKCkpfSxhLnByb3RvdHlwZS5lbWFpbD1mdW5jdGlvbihhKXtyZXR1cm4gYT1lKGEpLHRoaXMud29yZCh7bGVuZ3RoOmEubGVuZ3RofSkrIkAiKyhhLmRvbWFpbnx8dGhpcy5kb21haW4oKSl9LGEucHJvdG90eXBlLmZiaWQ9ZnVuY3Rpb24oKXtyZXR1cm4iMTAwMDAiK3RoaXMuc3RyaW5nKHtwb29sOiIxMjM0NTY3ODkwIixsZW5ndGg6MTF9KX0sYS5wcm90b3R5cGUuZ29vZ2xlX2FuYWx5dGljcz1mdW5jdGlvbigpe3JldHVybiJVQS0iK3RoaXMucGFkKHRoaXMubmF0dXJhbCh7bWF4Ojk5OTk5OX0pLDYpKyItIit0aGlzLnBhZCh0aGlzLm5hdHVyYWwoe21heDo5OX0pLDIpfSxhLnByb3RvdHlwZS5oYXNodGFnPWZ1bmN0aW9uKCl7cmV0dXJuIiMiK3RoaXMud29yZCgpfSxhLnByb3RvdHlwZS5pcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hdHVyYWwoe21pbjoxLG1heDoyNTR9KSsiLiIrdGhpcy5uYXR1cmFsKHttYXg6MjU1fSkrIi4iK3RoaXMubmF0dXJhbCh7bWF4OjI1NX0pKyIuIit0aGlzLm5hdHVyYWwoe21pbjoxLG1heDoyNTR9KX0sYS5wcm90b3R5cGUuaXB2Nj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm4odGhpcy5oYXNoLDgse2xlbmd0aDo0fSkuam9pbigiOiIpfSxhLnByb3RvdHlwZS5rbG91dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hdHVyYWwoe21pbjoxLG1heDo5OX0pfSxhLnByb3RvdHlwZS5zZW12ZXI9ZnVuY3Rpb24oYSl7YT1lKGEse2luY2x1ZGVfcHJlcmVsZWFzZTohMH0pO3ZhciBuPXRoaXMucGlja29uZShbIl4iLCJ+IiwiPCIsIj4iLCI8PSIsIj49IiwiPSJdKTthLnJhbmdlJiYobj1hLnJhbmdlKTt2YXIgaT0iIjtyZXR1cm4gYS5pbmNsdWRlX3ByZXJlbGVhc2UmJihpPXRoaXMud2VpZ2h0ZWQoWyIiLCItZGV2IiwiLWJldGEiLCItYWxwaGEiXSxbNTAsMTAsNSwxXSkpLG4rdGhpcy5ycGcoIjNkMTAiKS5qb2luKCIuIikraX0sYS5wcm90b3R5cGUudGxkcz1mdW5jdGlvbigpe3JldHVyblsiY29tIiwib3JnIiwiZWR1IiwiZ292IiwiY28udWsiLCJuZXQiLCJpbyIsImFjIiwiYWQiLCJhZSIsImFmIiwiYWciLCJhaSIsImFsIiwiYW0iLCJhbiIsImFvIiwiYXEiLCJhciIsImFzIiwiYXQiLCJhdSIsImF3IiwiYXgiLCJheiIsImJhIiwiYmIiLCJiZCIsImJlIiwiYmYiLCJiZyIsImJoIiwiYmkiLCJiaiIsImJtIiwiYm4iLCJibyIsImJxIiwiYnIiLCJicyIsImJ0IiwiYnYiLCJidyIsImJ5IiwiYnoiLCJjYSIsImNjIiwiY2QiLCJjZiIsImNnIiwiY2giLCJjaSIsImNrIiwiY2wiLCJjbSIsImNuIiwiY28iLCJjciIsImN1IiwiY3YiLCJjdyIsImN4IiwiY3kiLCJjeiIsImRlIiwiZGoiLCJkayIsImRtIiwiZG8iLCJkeiIsImVjIiwiZWUiLCJlZyIsImVoIiwiZXIiLCJlcyIsImV0IiwiZXUiLCJmaSIsImZqIiwiZmsiLCJmbSIsImZvIiwiZnIiLCJnYSIsImdiIiwiZ2QiLCJnZSIsImdmIiwiZ2ciLCJnaCIsImdpIiwiZ2wiLCJnbSIsImduIiwiZ3AiLCJncSIsImdyIiwiZ3MiLCJndCIsImd1IiwiZ3ciLCJneSIsImhrIiwiaG0iLCJobiIsImhyIiwiaHQiLCJodSIsImlkIiwiaWUiLCJpbCIsImltIiwiaW4iLCJpbyIsImlxIiwiaXIiLCJpcyIsIml0IiwiamUiLCJqbSIsImpvIiwianAiLCJrZSIsImtnIiwia2giLCJraSIsImttIiwia24iLCJrcCIsImtyIiwia3ciLCJreSIsImt6IiwibGEiLCJsYiIsImxjIiwibGkiLCJsayIsImxyIiwibHMiLCJsdCIsImx1IiwibHYiLCJseSIsIm1hIiwibWMiLCJtZCIsIm1lIiwibWciLCJtaCIsIm1rIiwibWwiLCJtbSIsIm1uIiwibW8iLCJtcCIsIm1xIiwibXIiLCJtcyIsIm10IiwibXUiLCJtdiIsIm13IiwibXgiLCJteSIsIm16IiwibmEiLCJuYyIsIm5lIiwibmYiLCJuZyIsIm5pIiwibmwiLCJubyIsIm5wIiwibnIiLCJudSIsIm56Iiwib20iLCJwYSIsInBlIiwicGYiLCJwZyIsInBoIiwicGsiLCJwbCIsInBtIiwicG4iLCJwciIsInBzIiwicHQiLCJwdyIsInB5IiwicWEiLCJyZSIsInJvIiwicnMiLCJydSIsInJ3Iiwic2EiLCJzYiIsInNjIiwic2QiLCJzZSIsInNnIiwic2giLCJzaSIsInNqIiwic2siLCJzbCIsInNtIiwic24iLCJzbyIsInNyIiwic3MiLCJzdCIsInN1Iiwic3YiLCJzeCIsInN5Iiwic3oiLCJ0YyIsInRkIiwidGYiLCJ0ZyIsInRoIiwidGoiLCJ0ayIsInRsIiwidG0iLCJ0biIsInRvIiwidHAiLCJ0ciIsInR0IiwidHYiLCJ0dyIsInR6IiwidWEiLCJ1ZyIsInVrIiwidXMiLCJ1eSIsInV6IiwidmEiLCJ2YyIsInZlIiwidmciLCJ2aSIsInZuIiwidnUiLCJ3ZiIsIndzIiwieWUiLCJ5dCIsInphIiwiem0iLCJ6dyJdfSxhLnByb3RvdHlwZS50bGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5waWNrKHRoaXMudGxkcygpKX0sYS5wcm90b3R5cGUudHdpdHRlcj1mdW5jdGlvbigpe3JldHVybiJAIit0aGlzLndvcmQoKX0sYS5wcm90b3R5cGUudXJsPWZ1bmN0aW9uKGEpe3ZhciBuPShhPWUoYSx7cHJvdG9jb2w6Imh0dHAiLGRvbWFpbjp0aGlzLmRvbWFpbihhKSxkb21haW5fcHJlZml4OiIiLHBhdGg6dGhpcy53b3JkKCksZXh0ZW5zaW9uczpbXX0pKS5leHRlbnNpb25zLmxlbmd0aD4wPyIuIit0aGlzLnBpY2soYS5leHRlbnNpb25zKToiIixpPWEuZG9tYWluX3ByZWZpeD9hLmRvbWFpbl9wcmVmaXgrIi4iK2EuZG9tYWluOmEuZG9tYWluO3JldHVybiBhLnByb3RvY29sKyI6Ly8iK2krIi8iK2EucGF0aCtufSxhLnByb3RvdHlwZS5wb3J0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW50ZWdlcih7bWluOjAsbWF4OjY1NTM1fSl9LGEucHJvdG90eXBlLmxvY2FsZT1mdW5jdGlvbihhKXtyZXR1cm4oYT1lKGEpKS5yZWdpb24/dGhpcy5waWNrKHRoaXMuZ2V0KCJsb2NhbGVfcmVnaW9ucyIpKTp0aGlzLnBpY2sodGhpcy5nZXQoImxvY2FsZV9sYW5ndWFnZXMiKSl9LGEucHJvdG90eXBlLmxvY2FsZXM9ZnVuY3Rpb24oYSl7cmV0dXJuKGE9ZShhKSkucmVnaW9uP3RoaXMuZ2V0KCJsb2NhbGVfcmVnaW9ucyIpOnRoaXMuZ2V0KCJsb2NhbGVfbGFuZ3VhZ2VzIil9LGEucHJvdG90eXBlLmFkZHJlc3M9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9ZShhKSx0aGlzLm5hdHVyYWwoe21pbjo1LG1heDoyZTN9KSsiICIrdGhpcy5zdHJlZXQoYSl9LGEucHJvdG90eXBlLmFsdGl0dWRlPWZ1bmN0aW9uKGEpe3JldHVybiBhPWUoYSx7Zml4ZWQ6NSxtaW46MCxtYXg6ODg0OH0pLHRoaXMuZmxvYXRpbmcoe21pbjphLm1pbixtYXg6YS5tYXgsZml4ZWQ6YS5maXhlZH0pfSxhLnByb3RvdHlwZS5hcmVhY29kZT1mdW5jdGlvbihhKXthPWUoYSx7cGFyZW5zOiEwfSk7dmFyIG49dGhpcy5uYXR1cmFsKHttaW46MixtYXg6OX0pLnRvU3RyaW5nKCkrdGhpcy5uYXR1cmFsKHttaW46MCxtYXg6OH0pLnRvU3RyaW5nKCkrdGhpcy5uYXR1cmFsKHttaW46MCxtYXg6OX0pLnRvU3RyaW5nKCk7cmV0dXJuIGEucGFyZW5zPyIoIituKyIpIjpufSxhLnByb3RvdHlwZS5jaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FwaXRhbGl6ZSh0aGlzLndvcmQoe3N5bGxhYmxlczozfSkpfSxhLnByb3RvdHlwZS5jb29yZGluYXRlcz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5sYXRpdHVkZShhKSsiLCAiK3RoaXMubG9uZ2l0dWRlKGEpfSxhLnByb3RvdHlwZS5jb3VudHJpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoImNvdW50cmllcyIpfSxhLnByb3RvdHlwZS5jb3VudHJ5PWZ1bmN0aW9uKGEpe2E9ZShhKTt2YXIgbj10aGlzLnBpY2sodGhpcy5jb3VudHJpZXMoKSk7cmV0dXJuIGEuZnVsbD9uLm5hbWU6bi5hYmJyZXZpYXRpb259LGEucHJvdG90eXBlLmRlcHRoPWZ1bmN0aW9uKGEpe3JldHVybiBhPWUoYSx7Zml4ZWQ6NSxtaW46LTEwOTk0LG1heDowfSksdGhpcy5mbG9hdGluZyh7bWluOmEubWluLG1heDphLm1heCxmaXhlZDphLmZpeGVkfSl9LGEucHJvdG90eXBlLmdlb2hhc2g9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9ZShhLHtsZW5ndGg6N30pLHRoaXMuc3RyaW5nKHtsZW5ndGg6YS5sZW5ndGgscG9vbDoiMDEyMzQ1Njc4OWJjZGVmZ2hqa21ucHFyc3R1dnd4eXoifSl9LGEucHJvdG90eXBlLmdlb2pzb249ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubGF0aXR1ZGUoYSkrIiwgIit0aGlzLmxvbmdpdHVkZShhKSsiLCAiK3RoaXMuYWx0aXR1ZGUoYSl9LGEucHJvdG90eXBlLmxhdGl0dWRlPWZ1bmN0aW9uKGEpe3JldHVybiBhPWUoYSx7Zml4ZWQ6NSxtaW46LTkwLG1heDo5MH0pLHRoaXMuZmxvYXRpbmcoe21pbjphLm1pbixtYXg6YS5tYXgsZml4ZWQ6YS5maXhlZH0pfSxhLnByb3RvdHlwZS5sb25naXR1ZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9ZShhLHtmaXhlZDo1LG1pbjotMTgwLG1heDoxODB9KSx0aGlzLmZsb2F0aW5nKHttaW46YS5taW4sbWF4OmEubWF4LGZpeGVkOmEuZml4ZWR9KX0sYS5wcm90b3R5cGUucGhvbmU9ZnVuY3Rpb24oYSl7dmFyIG4saT10aGlzLHI9ZnVuY3Rpb24oYSl7dmFyIGU9W107cmV0dXJuIGEuc2VjdGlvbnMuZm9yRWFjaChmdW5jdGlvbihhKXtlLnB1c2goaS5zdHJpbmcoe3Bvb2w6IjAxMjM0NTY3ODkiLGxlbmd0aDphfSkpfSksYS5hcmVhK2Uuam9pbigiICIpfTsoYT1lKGEse2Zvcm1hdHRlZDohMCxjb3VudHJ5OiJ1cyIsbW9iaWxlOiExfSkpLmZvcm1hdHRlZHx8KGEucGFyZW5zPSExKTt2YXIgbztzd2l0Y2goYS5jb3VudHJ5KXtjYXNlImZyIjphLm1vYmlsZT8obj10aGlzLnBpY2soWyIwNiIsIjA3Il0pK2kuc3RyaW5nKHtwb29sOiIwMTIzNDU2Nzg5IixsZW5ndGg6OH0pLG89YS5mb3JtYXR0ZWQ/bi5tYXRjaCgvLi4vZykuam9pbigiICIpOm4pOihuPXRoaXMucGljayhbIjAxIit0aGlzLnBpY2soWyIzMCIsIjM0IiwiMzkiLCI0MCIsIjQxIiwiNDIiLCI0MyIsIjQ0IiwiNDUiLCI0NiIsIjQ3IiwiNDgiLCI0OSIsIjUzIiwiNTUiLCI1NiIsIjU4IiwiNjAiLCI2NCIsIjY5IiwiNzAiLCI3MiIsIjczIiwiNzQiLCI3NSIsIjc2IiwiNzciLCI3OCIsIjc5IiwiODAiLCI4MSIsIjgyIiwiODMiXSkraS5zdHJpbmcoe3Bvb2w6IjAxMjM0NTY3ODkiLGxlbmd0aDo2fSksIjAyIit0aGlzLnBpY2soWyIxNCIsIjE4IiwiMjIiLCIyMyIsIjI4IiwiMjkiLCIzMCIsIjMxIiwiMzIiLCIzMyIsIjM0IiwiMzUiLCIzNiIsIjM3IiwiMzgiLCI0MCIsIjQxIiwiNDMiLCI0NCIsIjQ1IiwiNDYiLCI0NyIsIjQ4IiwiNDkiLCI1MCIsIjUxIiwiNTIiLCI1MyIsIjU0IiwiNTYiLCI1NyIsIjYxIiwiNjIiLCI2OSIsIjcyIiwiNzYiLCI3NyIsIjc4IiwiODUiLCI5MCIsIjk2IiwiOTciLCI5OCIsIjk5Il0pK2kuc3RyaW5nKHtwb29sOiIwMTIzNDU2Nzg5IixsZW5ndGg6Nn0pLCIwMyIrdGhpcy5waWNrKFsiMTAiLCIyMCIsIjIxIiwiMjIiLCIyMyIsIjI0IiwiMjUiLCIyNiIsIjI3IiwiMjgiLCIyOSIsIjM5IiwiNDQiLCI0NSIsIjUxIiwiNTIiLCI1NCIsIjU1IiwiNTciLCI1OCIsIjU5IiwiNjAiLCI2MSIsIjYyIiwiNjMiLCI2NCIsIjY1IiwiNjYiLCI2NyIsIjY4IiwiNjkiLCI3MCIsIjcxIiwiNzIiLCI3MyIsIjgwIiwiODEiLCI4MiIsIjgzIiwiODQiLCI4NSIsIjg2IiwiODciLCI4OCIsIjg5IiwiOTAiXSkraS5zdHJpbmcoe3Bvb2w6IjAxMjM0NTY3ODkiLGxlbmd0aDo2fSksIjA0Iit0aGlzLnBpY2soWyIxMSIsIjEzIiwiMTUiLCIyMCIsIjIyIiwiMjYiLCIyNyIsIjMwIiwiMzIiLCIzNCIsIjM3IiwiNDIiLCI0MyIsIjQ0IiwiNTAiLCI1NiIsIjU3IiwiNjMiLCI2NiIsIjY3IiwiNjgiLCI2OSIsIjcwIiwiNzEiLCI3MiIsIjczIiwiNzQiLCI3NSIsIjc2IiwiNzciLCI3OCIsIjc5IiwiODAiLCI4MSIsIjgyIiwiODMiLCI4NCIsIjg1IiwiODYiLCI4OCIsIjg5IiwiOTAiLCI5MSIsIjkyIiwiOTMiLCI5NCIsIjk1IiwiOTciLCI5OCJdKStpLnN0cmluZyh7cG9vbDoiMDEyMzQ1Njc4OSIsbGVuZ3RoOjZ9KSwiMDUiK3RoaXMucGljayhbIjA4IiwiMTYiLCIxNyIsIjE5IiwiMjQiLCIzMSIsIjMyIiwiMzMiLCIzNCIsIjM1IiwiNDAiLCI0NSIsIjQ2IiwiNDciLCI0OSIsIjUzIiwiNTUiLCI1NiIsIjU3IiwiNTgiLCI1OSIsIjYxIiwiNjIiLCI2MyIsIjY0IiwiNjUiLCI2NyIsIjc5IiwiODEiLCI4MiIsIjg2IiwiODciLCI5MCIsIjk0Il0pK2kuc3RyaW5nKHtwb29sOiIwMTIzNDU2Nzg5IixsZW5ndGg6Nn0pLCIwOSIraS5zdHJpbmcoe3Bvb2w6IjAxMjM0NTY3ODkiLGxlbmd0aDo4fSldKSxvPWEuZm9ybWF0dGVkP24ubWF0Y2goLy4uL2cpLmpvaW4oIiAiKTpuKTticmVhaztjYXNlInVrIjphLm1vYmlsZT8obj10aGlzLnBpY2soW3thcmVhOiIwNyIrdGhpcy5waWNrKFsiNCIsIjUiLCI3IiwiOCIsIjkiXSksc2VjdGlvbnM6WzIsNl19LHthcmVhOiIwNzYyNCAiLHNlY3Rpb25zOls2XX1dKSxvPWEuZm9ybWF0dGVkP3Iobik6cihuKS5yZXBsYWNlKCIgIiwiIikpOihuPXRoaXMucGljayhbe2FyZWE6IjAxIit0aGlzLmNoYXJhY3Rlcih7cG9vbDoiMjM0NTY5In0pKyIxICIsc2VjdGlvbnM6WzMsNF19LHthcmVhOiIwMjAgIit0aGlzLmNoYXJhY3Rlcih7cG9vbDoiMzc4In0pLHNlY3Rpb25zOlszLDRdfSx7YXJlYToiMDIzICIrdGhpcy5jaGFyYWN0ZXIoe3Bvb2w6Ijg5In0pLHNlY3Rpb25zOlszLDRdfSx7YXJlYToiMDI0IDciLHNlY3Rpb25zOlszLDRdfSx7YXJlYToiMDI4ICIrdGhpcy5waWNrKFsiMjUiLCIyOCIsIjM3IiwiNzEiLCI4MiIsIjkwIiwiOTIiLCI5NSJdKSxzZWN0aW9uczpbMiw0XX0se2FyZWE6IjAxMiIrdGhpcy5waWNrKFsiMDQiLCIwOCIsIjU0IiwiNzYiLCI5NyIsIjk4Il0pKyIgIixzZWN0aW9uczpbNl19LHthcmVhOiIwMTMiK3RoaXMucGljayhbIjYzIiwiNjQiLCI4NCIsIjg2Il0pKyIgIixzZWN0aW9uczpbNl19LHthcmVhOiIwMTQiK3RoaXMucGljayhbIjA0IiwiMjAiLCI2MCIsIjYxIiwiODAiLCI4OCJdKSsiICIsc2VjdGlvbnM6WzZdfSx7YXJlYToiMDE1Iit0aGlzLnBpY2soWyIyNCIsIjI3IiwiNjIiLCI2NiJdKSsiICIsc2VjdGlvbnM6WzZdfSx7YXJlYToiMDE2Iit0aGlzLnBpY2soWyIwNiIsIjI5IiwiMzUiLCI0NyIsIjU5IiwiOTUiXSkrIiAiLHNlY3Rpb25zOls2XX0se2FyZWE6IjAxNyIrdGhpcy5waWNrKFsiMjYiLCI0NCIsIjUwIiwiNjgiXSkrIiAiLHNlY3Rpb25zOls2XX0se2FyZWE6IjAxOCIrdGhpcy5waWNrKFsiMjciLCIzNyIsIjg0IiwiOTciXSkrIiAiLHNlY3Rpb25zOls2XX0se2FyZWE6IjAxOSIrdGhpcy5waWNrKFsiMDAiLCIwNSIsIjM1IiwiNDYiLCI0OSIsIjYzIiwiOTUiXSkrIiAiLHNlY3Rpb25zOls2XX1dKSxvPWEuZm9ybWF0dGVkP3Iobik6cihuKS5yZXBsYWNlKCIgIiwiIiwiZyIpKTticmVhaztjYXNlInphIjphLm1vYmlsZT8obj10aGlzLnBpY2soWyIwNjAiK3RoaXMucGljayhbIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiXSkraS5zdHJpbmcoe3Bvb2w6IjAxMjM0NTY3ODkiLGxlbmd0aDo2fSksIjA2MSIrdGhpcy5waWNrKFsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiOCJdKStpLnN0cmluZyh7cG9vbDoiMDEyMzQ1Njc4OSIsbGVuZ3RoOjZ9KSwiMDYiK2kuc3RyaW5nKHtwb29sOiIwMTIzNDU2Nzg5IixsZW5ndGg6N30pLCIwNzEiK3RoaXMucGljayhbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiXSkraS5zdHJpbmcoe3Bvb2w6IjAxMjM0NTY3ODkiLGxlbmd0aDo2fSksIjA3Iit0aGlzLnBpY2soWyIyIiwiMyIsIjQiLCI2IiwiNyIsIjgiLCI5Il0pK2kuc3RyaW5nKHtwb29sOiIwMTIzNDU2Nzg5IixsZW5ndGg6N30pLCIwOCIrdGhpcy5waWNrKFsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1Il0pK2kuc3RyaW5nKHtwb29sOiIwMTIzNDU2Nzg5IixsZW5ndGg6N30pXSksbz1hLmZvcm1hdHRlZHx8bik6KG49dGhpcy5waWNrKFsiMDEiK3RoaXMucGljayhbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCJdKStpLnN0cmluZyh7cG9vbDoiMDEyMzQ1Njc4OSIsbGVuZ3RoOjd9KSwiMDIiK3RoaXMucGljayhbIjEiLCIyIiwiMyIsIjQiLCI3IiwiOCJdKStpLnN0cmluZyh7cG9vbDoiMDEyMzQ1Njc4OSIsbGVuZ3RoOjd9KSwiMDMiK3RoaXMucGljayhbIjEiLCIyIiwiMyIsIjUiLCI2IiwiOSJdKStpLnN0cmluZyh7cG9vbDoiMDEyMzQ1Njc4OSIsbGVuZ3RoOjd9KSwiMDQiK3RoaXMucGljayhbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSJdKStpLnN0cmluZyh7cG9vbDoiMDEyMzQ1Njc4OSIsbGVuZ3RoOjd9KSwiMDUiK3RoaXMucGljayhbIjEiLCIzIiwiNCIsIjYiLCI3IiwiOCJdKStpLnN0cmluZyh7cG9vbDoiMDEyMzQ1Njc4OSIsbGVuZ3RoOjd9KV0pLG89YS5mb3JtYXR0ZWR8fG4pO2JyZWFrO2Nhc2UidXMiOnZhciB0PXRoaXMuYXJlYWNvZGUoYSkudG9TdHJpbmcoKSxzPXRoaXMubmF0dXJhbCh7bWluOjIsbWF4Ojl9KS50b1N0cmluZygpK3RoaXMubmF0dXJhbCh7bWluOjAsbWF4Ojl9KS50b1N0cmluZygpK3RoaXMubmF0dXJhbCh7bWluOjAsbWF4Ojl9KS50b1N0cmluZygpLGw9dGhpcy5uYXR1cmFsKHttaW46MWUzLG1heDo5OTk5fSkudG9TdHJpbmcoKTtvPWEuZm9ybWF0dGVkP3QrIiAiK3MrIi0iK2w6dCtzK2x9cmV0dXJuIG99LGEucHJvdG90eXBlLnBvc3RhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoYXJhY3Rlcih7cG9vbDoiWFZUU1JQTktMTUhKR0VDQkEifSkrdGhpcy5uYXR1cmFsKHttYXg6OX0pK3RoaXMuY2hhcmFjdGVyKHthbHBoYTohMCxjYXNpbmc6InVwcGVyIn0pKyIgIisodGhpcy5uYXR1cmFsKHttYXg6OX0pK3RoaXMuY2hhcmFjdGVyKHthbHBoYTohMCxjYXNpbmc6InVwcGVyIn0pK3RoaXMubmF0dXJhbCh7bWF4Ojl9KSl9LGEucHJvdG90eXBlLmNvdW50aWVzPWZ1bmN0aW9uKGEpe3JldHVybiBhPWUoYSx7Y291bnRyeToidWsifSksdGhpcy5nZXQoImNvdW50aWVzIilbYS5jb3VudHJ5LnRvTG93ZXJDYXNlKCldfSxhLnByb3RvdHlwZS5jb3VudHk9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucGljayh0aGlzLmNvdW50aWVzKGEpKS5uYW1lfSxhLnByb3RvdHlwZS5wcm92aW5jZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9ZShhLHtjb3VudHJ5OiJjYSJ9KSx0aGlzLmdldCgicHJvdmluY2VzIilbYS5jb3VudHJ5LnRvTG93ZXJDYXNlKCldfSxhLnByb3RvdHlwZS5wcm92aW5jZT1mdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5mdWxsP3RoaXMucGljayh0aGlzLnByb3ZpbmNlcyhhKSkubmFtZTp0aGlzLnBpY2sodGhpcy5wcm92aW5jZXMoYSkpLmFiYnJldmlhdGlvbn0sYS5wcm90b3R5cGUuc3RhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmEuZnVsbD90aGlzLnBpY2sodGhpcy5zdGF0ZXMoYSkpLm5hbWU6dGhpcy5waWNrKHRoaXMuc3RhdGVzKGEpKS5hYmJyZXZpYXRpb259LGEucHJvdG90eXBlLnN0YXRlcz1mdW5jdGlvbihhKXt2YXIgbjtzd2l0Y2goKGE9ZShhLHtjb3VudHJ5OiJ1cyIsdXNfc3RhdGVzX2FuZF9kYzohMH0pKS5jb3VudHJ5LnRvTG93ZXJDYXNlKCkpe2Nhc2UidXMiOnZhciBpPXRoaXMuZ2V0KCJ1c19zdGF0ZXNfYW5kX2RjIikscj10aGlzLmdldCgidGVycml0b3JpZXMiKSxvPXRoaXMuZ2V0KCJhcm1lZF9mb3JjZXMiKTtuPVtdLGEudXNfc3RhdGVzX2FuZF9kYyYmKG49bi5jb25jYXQoaSkpLGEudGVycml0b3JpZXMmJihuPW4uY29uY2F0KHIpKSxhLmFybWVkX2ZvcmNlcyYmKG49bi5jb25jYXQobykpO2JyZWFrO2Nhc2UiaXQiOm49dGhpcy5nZXQoImNvdW50cnlfcmVnaW9ucyIpW2EuY291bnRyeS50b0xvd2VyQ2FzZSgpXTticmVhaztjYXNlInVrIjpuPXRoaXMuZ2V0KCJjb3VudGllcyIpW2EuY291bnRyeS50b0xvd2VyQ2FzZSgpXX1yZXR1cm4gbn0sYS5wcm90b3R5cGUuc3RyZWV0PWZ1bmN0aW9uKGEpe3ZhciBuO3N3aXRjaCgoYT1lKGEse2NvdW50cnk6InVzIixzeWxsYWJsZXM6Mn0pKS5jb3VudHJ5LnRvTG93ZXJDYXNlKCkpe2Nhc2UidXMiOm49dGhpcy53b3JkKHtzeWxsYWJsZXM6YS5zeWxsYWJsZXN9KSxuPXRoaXMuY2FwaXRhbGl6ZShuKSxuKz0iICIsbis9YS5zaG9ydF9zdWZmaXg/dGhpcy5zdHJlZXRfc3VmZml4KGEpLmFiYnJldmlhdGlvbjp0aGlzLnN0cmVldF9zdWZmaXgoYSkubmFtZTticmVhaztjYXNlIml0IjpuPXRoaXMud29yZCh7c3lsbGFibGVzOmEuc3lsbGFibGVzfSksbj10aGlzLmNhcGl0YWxpemUobiksbj0oYS5zaG9ydF9zdWZmaXg/dGhpcy5zdHJlZXRfc3VmZml4KGEpLmFiYnJldmlhdGlvbjp0aGlzLnN0cmVldF9zdWZmaXgoYSkubmFtZSkrIiAiK259cmV0dXJuIG59LGEucHJvdG90eXBlLnN0cmVldF9zdWZmaXg9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9ZShhLHtjb3VudHJ5OiJ1cyJ9KSx0aGlzLnBpY2sodGhpcy5zdHJlZXRfc3VmZml4ZXMoYSkpfSxhLnByb3RvdHlwZS5zdHJlZXRfc3VmZml4ZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9ZShhLHtjb3VudHJ5OiJ1cyJ9KSx0aGlzLmdldCgic3RyZWV0X3N1ZmZpeGVzIilbYS5jb3VudHJ5LnRvTG93ZXJDYXNlKCldfSxhLnByb3RvdHlwZS56aXA9ZnVuY3Rpb24oYSl7dmFyIGU9dGhpcy5uKHRoaXMubmF0dXJhbCw1LHttYXg6OX0pO3JldHVybiBhJiYhMD09PWEucGx1c2ZvdXImJihlLnB1c2goIi0iKSxlPWUuY29uY2F0KHRoaXMubih0aGlzLm5hdHVyYWwsNCx7bWF4Ojl9KSkpLGUuam9pbigiIil9LGEucHJvdG90eXBlLmFtcG09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib29sKCk/ImFtIjoicG0ifSxhLnByb3RvdHlwZS5kYXRlPWZ1bmN0aW9uKGEpe3ZhciBuLGk7aWYoYSYmKGEubWlufHxhLm1heCkpe3ZhciByPXZvaWQgMCE9PShhPWUoYSx7YW1lcmljYW46ITAsc3RyaW5nOiExfSkpLm1pbj9hLm1pbi5nZXRUaW1lKCk6MSxvPXZvaWQgMCE9PWEubWF4P2EubWF4LmdldFRpbWUoKTo4NjRlMTM7aT1uZXcgRGF0ZSh0aGlzLmludGVnZXIoe21pbjpyLG1heDpvfSkpfWVsc2V7dmFyIHQ9dGhpcy5tb250aCh7cmF3OiEwfSkscz10LmRheXM7YSYmYS5tb250aCYmKHM9dGhpcy5nZXQoIm1vbnRocyIpWyhhLm1vbnRoJTEyKzEyKSUxMl0uZGF5cyksYT1lKGEse3llYXI6cGFyc2VJbnQodGhpcy55ZWFyKCksMTApLG1vbnRoOnQubnVtZXJpYy0xLGRheTp0aGlzLm5hdHVyYWwoe21pbjoxLG1heDpzfSksaG91cjp0aGlzLmhvdXIoe3R3ZW50eWZvdXI6ITB9KSxtaW51dGU6dGhpcy5taW51dGUoKSxzZWNvbmQ6dGhpcy5zZWNvbmQoKSxtaWxsaXNlY29uZDp0aGlzLm1pbGxpc2Vjb25kKCksYW1lcmljYW46ITAsc3RyaW5nOiExfSksaT1uZXcgRGF0ZShhLnllYXIsYS5tb250aCxhLmRheSxhLmhvdXIsYS5taW51dGUsYS5zZWNvbmQsYS5taWxsaXNlY29uZCl9cmV0dXJuIG49YS5hbWVyaWNhbj9pLmdldE1vbnRoKCkrMSsiLyIraS5nZXREYXRlKCkrIi8iK2kuZ2V0RnVsbFllYXIoKTppLmdldERhdGUoKSsiLyIrKGkuZ2V0TW9udGgoKSsxKSsiLyIraS5nZXRGdWxsWWVhcigpLGEuc3RyaW5nP246aX0sYS5wcm90b3R5cGUuaGFtbWVydGltZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kYXRlKGEpLmdldFRpbWUoKX0sYS5wcm90b3R5cGUuaG91cj1mdW5jdGlvbihhKXtyZXR1cm4gYT1lKGEse21pbjphJiZhLnR3ZW50eWZvdXI/MDoxLG1heDphJiZhLnR3ZW50eWZvdXI/MjM6MTJ9KSxuKGEubWluPDAsIkNoYW5jZTogTWluIGNhbm5vdCBiZSBsZXNzIHRoYW4gMC4iKSxuKGEudHdlbnR5Zm91ciYmYS5tYXg+MjMsIkNoYW5jZTogTWF4IGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gMjMgZm9yIHR3ZW50eWZvdXIgb3B0aW9uLiIpLG4oIWEudHdlbnR5Zm91ciYmYS5tYXg+MTIsIkNoYW5jZTogTWF4IGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gMTIuIiksbihhLm1pbj5hLm1heCwiQ2hhbmNlOiBNaW4gY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBNYXguIiksdGhpcy5uYXR1cmFsKHttaW46YS5taW4sbWF4OmEubWF4fSl9LGEucHJvdG90eXBlLm1pbGxpc2Vjb25kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmF0dXJhbCh7bWF4Ojk5OX0pfSxhLnByb3RvdHlwZS5taW51dGU9YS5wcm90b3R5cGUuc2Vjb25kPWZ1bmN0aW9uKGEpe3JldHVybiBhPWUoYSx7bWluOjAsbWF4OjU5fSksbihhLm1pbjwwLCJDaGFuY2U6IE1pbiBjYW5ub3QgYmUgbGVzcyB0aGFuIDAuIiksbihhLm1heD41OSwiQ2hhbmNlOiBNYXggY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiA1OS4iKSxuKGEubWluPmEubWF4LCJDaGFuY2U6IE1pbiBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIE1heC4iKSx0aGlzLm5hdHVyYWwoe21pbjphLm1pbixtYXg6YS5tYXh9KX0sYS5wcm90b3R5cGUubW9udGg9ZnVuY3Rpb24oYSl7bigoYT1lKGEse21pbjoxLG1heDoxMn0pKS5taW48MSwiQ2hhbmNlOiBNaW4gY2Fubm90IGJlIGxlc3MgdGhhbiAxLiIpLG4oYS5tYXg+MTIsIkNoYW5jZTogTWF4IGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gMTIuIiksbihhLm1pbj5hLm1heCwiQ2hhbmNlOiBNaW4gY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBNYXguIik7dmFyIGk9dGhpcy5waWNrKHRoaXMubW9udGhzKCkuc2xpY2UoYS5taW4tMSxhLm1heCkpO3JldHVybiBhLnJhdz9pOmkubmFtZX0sYS5wcm90b3R5cGUubW9udGhzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCJtb250aHMiKX0sYS5wcm90b3R5cGUuc2Vjb25kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmF0dXJhbCh7bWF4OjU5fSl9LGEucHJvdG90eXBlLnRpbWVzdGFtcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hdHVyYWwoe21pbjoxLG1heDpwYXJzZUludCgobmV3IERhdGUpLmdldFRpbWUoKS8xZTMsMTApfSl9LGEucHJvdG90eXBlLndlZWtkYXk9ZnVuY3Rpb24oYSl7dmFyIG49WyJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiXTtyZXR1cm4oYT1lKGEse3dlZWtkYXlfb25seTohMX0pKS53ZWVrZGF5X29ubHl8fChuLnB1c2goIlNhdHVyZGF5Iiksbi5wdXNoKCJTdW5kYXkiKSksdGhpcy5waWNrb25lKG4pfSxhLnByb3RvdHlwZS55ZWFyPWZ1bmN0aW9uKGEpe3JldHVybiBhPWUoYSx7bWluOihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKX0pLGEubWF4PXZvaWQgMCE9PWEubWF4P2EubWF4OmEubWluKzEwMCx0aGlzLm5hdHVyYWwoYSkudG9TdHJpbmcoKX0sYS5wcm90b3R5cGUuY2M9ZnVuY3Rpb24oYSl7dmFyIG4saSxyO3JldHVybiBuPShhPWUoYSkpLnR5cGU/dGhpcy5jY190eXBlKHtuYW1lOmEudHlwZSxyYXc6ITB9KTp0aGlzLmNjX3R5cGUoe3JhdzohMH0pLGk9bi5wcmVmaXguc3BsaXQoIiIpLHI9bi5sZW5ndGgtbi5wcmVmaXgubGVuZ3RoLTEsKGk9aS5jb25jYXQodGhpcy5uKHRoaXMuaW50ZWdlcixyLHttaW46MCxtYXg6OX0pKSkucHVzaCh0aGlzLmx1aG5fY2FsY3VsYXRlKGkuam9pbigiIikpKSxpLmpvaW4oIiIpfSxhLnByb3RvdHlwZS5jY190eXBlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCgiY2NfdHlwZXMiKX0sYS5wcm90b3R5cGUuY2NfdHlwZT1mdW5jdGlvbihhKXthPWUoYSk7dmFyIG49dGhpcy5jY190eXBlcygpLGk9bnVsbDtpZihhLm5hbWUpe2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKWlmKG5bcl0ubmFtZT09PWEubmFtZXx8bltyXS5zaG9ydF9uYW1lPT09YS5uYW1lKXtpPW5bcl07YnJlYWt9aWYobnVsbD09PWkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNoYW5jZTogQ3JlZGl0IGNhcmQgdHlwZSAnIithLm5hbWUrIicgaXMgbm90IHN1cHBvcnRlZCIpfWVsc2UgaT10aGlzLnBpY2sobik7cmV0dXJuIGEucmF3P2k6aS5uYW1lfSxhLnByb3RvdHlwZS5jdXJyZW5jeV90eXBlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCgiY3VycmVuY3lfdHlwZXMiKX0sYS5wcm90b3R5cGUuY3VycmVuY3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5waWNrKHRoaXMuY3VycmVuY3lfdHlwZXMoKSl9LGEucHJvdG90eXBlLnRpbWV6b25lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCgidGltZXpvbmVzIil9LGEucHJvdG90eXBlLnRpbWV6b25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGljayh0aGlzLnRpbWV6b25lcygpKX0sYS5wcm90b3R5cGUuY3VycmVuY3lfcGFpcj1mdW5jdGlvbihhKXt2YXIgZT10aGlzLnVuaXF1ZSh0aGlzLmN1cnJlbmN5LDIse2NvbXBhcmF0b3I6ZnVuY3Rpb24oYSxlKXtyZXR1cm4gYS5yZWR1Y2UoZnVuY3Rpb24oYSxuKXtyZXR1cm4gYXx8bi5jb2RlPT09ZS5jb2RlfSwhMSl9fSk7cmV0dXJuIGE/ZVswXS5jb2RlKyIvIitlWzFdLmNvZGU6ZX0sYS5wcm90b3R5cGUuZG9sbGFyPWZ1bmN0aW9uKGEpe2E9ZShhLHttYXg6MWU0LG1pbjowfSk7dmFyIG49dGhpcy5mbG9hdGluZyh7bWluOmEubWluLG1heDphLm1heCxmaXhlZDoyfSkudG9TdHJpbmcoKSxpPW4uc3BsaXQoIi4iKVsxXTtyZXR1cm4gdm9pZCAwPT09aT9uKz0iLjAwIjppLmxlbmd0aDwyJiYobis9IjAiKSxuPDA/Ii0kIituLnJlcGxhY2UoIi0iLCIiKToiJCIrbn0sYS5wcm90b3R5cGUuZXVybz1mdW5jdGlvbihhKXtyZXR1cm4gTnVtYmVyKHRoaXMuZG9sbGFyKGEpLnJlcGxhY2UoIiQiLCIiKSkudG9Mb2NhbGVTdHJpbmcoKSsi4oKsIn0sYS5wcm90b3R5cGUuZXhwPWZ1bmN0aW9uKGEpe2E9ZShhKTt2YXIgbj17fTtyZXR1cm4gbi55ZWFyPXRoaXMuZXhwX3llYXIoKSxuLnllYXI9PT0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKT9uLm1vbnRoPXRoaXMuZXhwX21vbnRoKHtmdXR1cmU6ITB9KTpuLm1vbnRoPXRoaXMuZXhwX21vbnRoKCksYS5yYXc/bjpuLm1vbnRoKyIvIituLnllYXJ9LGEucHJvdG90eXBlLmV4cF9tb250aD1mdW5jdGlvbihhKXthPWUoYSk7dmFyIG4saSxyPShuZXcgRGF0ZSkuZ2V0TW9udGgoKSsxO2lmKGEuZnV0dXJlJiYxMiE9PXIpZG97bj10aGlzLm1vbnRoKHtyYXc6ITB9KS5udW1lcmljLGk9cGFyc2VJbnQobiwxMCl9d2hpbGUoaTw9cik7ZWxzZSBuPXRoaXMubW9udGgoe3JhdzohMH0pLm51bWVyaWM7cmV0dXJuIG59LGEucHJvdG90eXBlLmV4cF95ZWFyPWZ1bmN0aW9uKCl7dmFyIGE9KG5ldyBEYXRlKS5nZXRNb250aCgpKzEsZT0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCk7cmV0dXJuIHRoaXMueWVhcih7bWluOjEyPT09YT9lKzE6ZSxtYXg6ZSsxMH0pfSxhLnByb3RvdHlwZS52YXQ9ZnVuY3Rpb24oYSl7c3dpdGNoKChhPWUoYSx7Y291bnRyeToiaXQifSkpLmNvdW50cnkudG9Mb3dlckNhc2UoKSl7Y2FzZSJpdCI6cmV0dXJuIHRoaXMuaXRfdmF0KCl9fSxhLnByb3RvdHlwZS5pYmFuPWZ1bmN0aW9uKCl7dmFyIGE9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjtyZXR1cm4gdGhpcy5zdHJpbmcoe2xlbmd0aDoyLHBvb2w6YX0pK3RoaXMucGFkKHRoaXMuaW50ZWdlcih7bWluOjAsbWF4Ojk5fSksMikrdGhpcy5zdHJpbmcoe2xlbmd0aDo0LHBvb2w6IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OSJ9KSt0aGlzLnBhZCh0aGlzLm5hdHVyYWwoKSx0aGlzLm5hdHVyYWwoe21pbjo2LG1heDoyNn0pKX0sYS5wcm90b3R5cGUuaXRfdmF0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5uYXR1cmFsKHttaW46MSxtYXg6MThlNX0pO3JldHVybihhPXRoaXMucGFkKGEsNykrdGhpcy5wYWQodGhpcy5waWNrKHRoaXMucHJvdmluY2VzKHtjb3VudHJ5OiJpdCJ9KSkuY29kZSwzKSkrdGhpcy5sdWhuX2NhbGN1bGF0ZShhKX0sYS5wcm90b3R5cGUuY2Y9ZnVuY3Rpb24oYSl7dmFyIGU9KGE9YXx8e30pLmdlbmRlcj9hLmdlbmRlcjp0aGlzLmdlbmRlcigpLG49YS5maXJzdD9hLmZpcnN0OnRoaXMuZmlyc3Qoe2dlbmRlcjplLG5hdGlvbmFsaXR5OiJpdCJ9KSxpPWEubGFzdD9hLmxhc3Q6dGhpcy5sYXN0KHtuYXRpb25hbGl0eToiaXQifSkscj1hLmJpcnRoZGF5P2EuYmlydGhkYXk6dGhpcy5iaXJ0aGRheSgpLG89YS5jaXR5P2EuY2l0eTp0aGlzLnBpY2tvbmUoWyJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJMIiwiTSIsIloiXSkrdGhpcy5wYWQodGhpcy5uYXR1cmFsKHttYXg6OTk5fSksMyksdD1bXSxzPWZ1bmN0aW9uKGEsZSl7dmFyIG4saT1bXTtyZXR1cm4gYS5sZW5ndGg8Mz9pPWEuc3BsaXQoIiIpLmNvbmNhdCgiWFhYIi5zcGxpdCgiIikpLnNwbGljZSgwLDMpOigobj1hLnRvVXBwZXJDYXNlKCkuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4tMSE9PSJCQ0RGR0hKS0xNTlBSU1RWV1oiLmluZGV4T2YoYSk/YTp2b2lkIDB9KS5qb2luKCIiKSkubGVuZ3RoPjMmJihuPWU/bi5zdWJzdHIoMCwzKTpuWzBdK24uc3Vic3RyKDIsMikpLG4ubGVuZ3RoPDMmJihpPW4sbj1hLnRvVXBwZXJDYXNlKCkuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4tMSE9PSJBRUlPVSIuaW5kZXhPZihhKT9hOnZvaWQgMH0pLmpvaW4oIiIpLnN1YnN0cigwLDMtaS5sZW5ndGgpKSxpKz1uKSxpfTtyZXR1cm4gdD10LmNvbmNhdChzKGksITApLHMobiksZnVuY3Rpb24oYSxlLG4pe3JldHVybiBhLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKS5zdWJzdHIoMikrWyJBIiwiQiIsIkMiLCJEIiwiRSIsIkgiLCJMIiwiTSIsIlAiLCJSIiwiUyIsIlQiXVthLmdldE1vbnRoKCldK24ucGFkKGEuZ2V0RGF0ZSgpKygiZmVtYWxlIj09PWUudG9Mb3dlckNhc2UoKT80MDowKSwyKX0ocixlLHRoaXMpLG8udG9VcHBlckNhc2UoKS5zcGxpdCgiIikpLmpvaW4oIiIpLCh0Kz1mdW5jdGlvbihhKXtmb3IodmFyIGU9IjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIsbj0iQUJDREVGR0hJSkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIixpPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIscj0wLG89MDtvPDE1O28rKylyKz1vJTIhPTA/aS5pbmRleE9mKG5bZS5pbmRleE9mKGFbb10pXSk6IkJBS1BMQ1FEUkVWT1NGVEdVSE1JTkpXWllYIi5pbmRleE9mKG5bZS5pbmRleE9mKGFbb10pXSk7cmV0dXJuIGlbciUyNl19KHQudG9VcHBlckNhc2UoKSkpLnRvVXBwZXJDYXNlKCl9LGEucHJvdG90eXBlLnBsX3Blc2VsPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMubmF0dXJhbCh7bWluOjEsbWF4Ojk5OTk5OTk5OTl9KSxlPXRoaXMucGFkKGEsMTApLnNwbGl0KCIiKSxuPTA7bjxlLmxlbmd0aDtuKyspZVtuXT1wYXJzZUludChlW25dKTt2YXIgaT0oMSplWzBdKzMqZVsxXSs3KmVbMl0rOSplWzNdKzEqZVs0XSszKmVbNV0rNyplWzZdKzkqZVs3XSsxKmVbOF0rMyplWzldKSUxMDtyZXR1cm4gMCE9PWkmJihpPTEwLWkpLGUuam9pbigiIikraX0sYS5wcm90b3R5cGUucGxfbmlwPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMubmF0dXJhbCh7bWluOjEsbWF4Ojk5OTk5OTk5OX0pLGU9dGhpcy5wYWQoYSw5KS5zcGxpdCgiIiksbj0wO248ZS5sZW5ndGg7bisrKWVbbl09cGFyc2VJbnQoZVtuXSk7dmFyIGk9KDYqZVswXSs1KmVbMV0rNyplWzJdKzIqZVszXSszKmVbNF0rNCplWzVdKzUqZVs2XSs2KmVbN10rNyplWzhdKSUxMTtyZXR1cm4gMTA9PT1pP3RoaXMucGxfbmlwKCk6ZS5qb2luKCIiKStpfSxhLnByb3RvdHlwZS5wbF9yZWdvbj1mdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLm5hdHVyYWwoe21pbjoxLG1heDo5OTk5OTk5OX0pLGU9dGhpcy5wYWQoYSw4KS5zcGxpdCgiIiksbj0wO248ZS5sZW5ndGg7bisrKWVbbl09cGFyc2VJbnQoZVtuXSk7dmFyIGk9KDgqZVswXSs5KmVbMV0rMiplWzJdKzMqZVszXSs0KmVbNF0rNSplWzVdKzYqZVs2XSs3KmVbN10pJTExO3JldHVybiAxMD09PWkmJihpPTApLGUuam9pbigiIikraX0sYS5wcm90b3R5cGUubm90ZT1mdW5jdGlvbihhKXthPWUoYSx7bm90ZXM6ImZsYXRLZXkifSk7dmFyIG49e25hdHVyYWxzOlsiQyIsIkQiLCJFIiwiRiIsIkciLCJBIiwiQiJdLGZsYXRzOlsiROKZrSIsIkXima0iLCJH4pmtIiwiQeKZrSIsIkLima0iXSxzaGFycHM6WyJD4pmvIiwiROKZryIsIkbima8iLCJH4pmvIiwiQeKZryJdfTtyZXR1cm4gbi5hbGw9bi5uYXR1cmFscy5jb25jYXQobi5mbGF0cy5jb25jYXQobi5zaGFycHMpKSxuLmZsYXRLZXk9bi5uYXR1cmFscy5jb25jYXQobi5mbGF0cyksbi5zaGFycEtleT1uLm5hdHVyYWxzLmNvbmNhdChuLnNoYXJwcyksdGhpcy5waWNrb25lKG5bYS5ub3Rlc10pfSxhLnByb3RvdHlwZS5taWRpX25vdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9ZShhLHttaW46MCxtYXg6MTI3fSksdGhpcy5pbnRlZ2VyKHttaW46YS5taW4sbWF4OmEubWF4fSl9LGEucHJvdG90eXBlLmNob3JkX3F1YWxpdHk9ZnVuY3Rpb24oYSl7dmFyIG49WyJtYWoiLCJtaW4iLCJhdWciLCJkaW0iXTtyZXR1cm4oYT1lKGEse2pheno6ITB9KSkuamF6eiYmKG49WyJtYWo3IiwibWluNyIsIjciLCJzdXMiLCJkaW0iLCLDuCJdKSx0aGlzLnBpY2tvbmUobil9LGEucHJvdG90eXBlLmNob3JkPWZ1bmN0aW9uKGEpe3JldHVybiBhPWUoYSksdGhpcy5ub3RlKGEpK3RoaXMuY2hvcmRfcXVhbGl0eShhKX0sYS5wcm90b3R5cGUudGVtcG89ZnVuY3Rpb24oYSl7cmV0dXJuIGE9ZShhLHttaW46NDAsbWF4OjMyMH0pLHRoaXMuaW50ZWdlcih7bWluOmEubWluLG1heDphLm1heH0pfSxhLnByb3RvdHlwZS5jb2luPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmJvb2woKT8iaGVhZHMiOiJ0YWlscyJ9LGEucHJvdG90eXBlLmQ0PWkoe21pbjoxLG1heDo0fSksYS5wcm90b3R5cGUuZDY9aSh7bWluOjEsbWF4OjZ9KSxhLnByb3RvdHlwZS5kOD1pKHttaW46MSxtYXg6OH0pLGEucHJvdG90eXBlLmQxMD1pKHttaW46MSxtYXg6MTB9KSxhLnByb3RvdHlwZS5kMTI9aSh7bWluOjEsbWF4OjEyfSksYS5wcm90b3R5cGUuZDIwPWkoe21pbjoxLG1heDoyMH0pLGEucHJvdG90eXBlLmQzMD1pKHttaW46MSxtYXg6MzB9KSxhLnByb3RvdHlwZS5kMTAwPWkoe21pbjoxLG1heDoxMDB9KSxhLnByb3RvdHlwZS5ycGc9ZnVuY3Rpb24oYSxuKXtpZihuPWUobiksYSl7dmFyIGk9YS50b0xvd2VyQ2FzZSgpLnNwbGl0KCJkIikscj1bXTtpZigyIT09aS5sZW5ndGh8fCFwYXJzZUludChpWzBdLDEwKXx8IXBhcnNlSW50KGlbMV0sMTApKXRocm93IG5ldyBFcnJvcigiQ2hhbmNlOiBJbnZhbGlkIGZvcm1hdCBwcm92aWRlZC4gUGxlYXNlIHByb3ZpZGUgI2QjIHdoZXJlIHRoZSBmaXJzdCAjIGlzIHRoZSBudW1iZXIgb2YgZGljZSB0byByb2xsLCB0aGUgc2Vjb25kICMgaXMgdGhlIG1heCBvZiBlYWNoIGRpZSIpO2Zvcih2YXIgbz1pWzBdO28+MDtvLS0pcltvLTFdPXRoaXMubmF0dXJhbCh7bWluOjEsbWF4OmlbMV19KTtyZXR1cm4gdm9pZCAwIT09bi5zdW0mJm4uc3VtP3IucmVkdWNlKGZ1bmN0aW9uKGEsZSl7cmV0dXJuIGErZX0pOnJ9dGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNoYW5jZTogQSB0eXBlIG9mIGRpZSByb2xsIG11c3QgYmUgaW5jbHVkZWQiKX0sYS5wcm90b3R5cGUuZ3VpZD1mdW5jdGlvbihhKXthPWUoYSx7dmVyc2lvbjo1fSk7dmFyIG49ImFiY2RlZjEyMzQ1Njc4OTAiO3JldHVybiB0aGlzLnN0cmluZyh7cG9vbDpuLGxlbmd0aDo4fSkrIi0iK3RoaXMuc3RyaW5nKHtwb29sOm4sbGVuZ3RoOjR9KSsiLSIrYS52ZXJzaW9uK3RoaXMuc3RyaW5nKHtwb29sOm4sbGVuZ3RoOjN9KSsiLSIrdGhpcy5zdHJpbmcoe3Bvb2w6ImFiODkiLGxlbmd0aDoxfSkrdGhpcy5zdHJpbmcoe3Bvb2w6bixsZW5ndGg6M30pKyItIit0aGlzLnN0cmluZyh7cG9vbDpuLGxlbmd0aDoxMn0pfSxhLnByb3RvdHlwZS5oYXNoPWZ1bmN0aW9uKGEpe3ZhciBuPSJ1cHBlciI9PT0oYT1lKGEse2xlbmd0aDo0MCxjYXNpbmc6Imxvd2VyIn0pKS5jYXNpbmc/bS50b1VwcGVyQ2FzZSgpOm07cmV0dXJuIHRoaXMuc3RyaW5nKHtwb29sOm4sbGVuZ3RoOmEubGVuZ3RofSl9LGEucHJvdG90eXBlLmx1aG5fY2hlY2s9ZnVuY3Rpb24oYSl7dmFyIGU9YS50b1N0cmluZygpO3JldHVybitlLnN1YnN0cmluZyhlLmxlbmd0aC0xKT09PXRoaXMubHVobl9jYWxjdWxhdGUoK2Uuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMSkpfSxhLnByb3RvdHlwZS5sdWhuX2NhbGN1bGF0ZT1mdW5jdGlvbihhKXtmb3IodmFyIGUsbj1hLnRvU3RyaW5nKCkuc3BsaXQoIiIpLnJldmVyc2UoKSxpPTAscj0wLG89bi5sZW5ndGg7bz5yOysrcillPStuW3JdLHIlMj09MCYmKGUqPTIpPjkmJihlLT05KSxpKz1lO3JldHVybiA5KmklMTB9LGEucHJvdG90eXBlLm1kNT1mdW5jdGlvbihhKXt2YXIgbj17c3RyOiIiLGtleTpudWxsLHJhdzohMX07aWYoYSlpZigic3RyaW5nIj09dHlwZW9mIGEpbi5zdHI9YSxhPXt9O2Vsc2V7aWYoIm9iamVjdCIhPXR5cGVvZiBhKXJldHVybiBudWxsO2lmKCJBcnJheSI9PT1hLmNvbnN0cnVjdG9yKXJldHVybiBudWxsfWVsc2Ugbi5zdHI9dGhpcy5zdHJpbmcoKSxhPXt9O2lmKCEobj1lKGEsbikpLnN0cil0aHJvdyBuZXcgRXJyb3IoIkEgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIHRvIHJldHVybiBhbiBtZDUgaGFzaC4iKTtyZXR1cm4gdGhpcy5iaW1kNS5tZDUobi5zdHIsbi5rZXksbi5yYXcpfSxhLnByb3RvdHlwZS5maWxlPWZ1bmN0aW9uKGEpe3ZhciBlLG4saT1hfHx7fSxyPU9iamVjdC5rZXlzKHRoaXMuZ2V0KCJmaWxlRXh0ZW5zaW9uIikpO2lmKGU9dGhpcy53b3JkKHtsZW5ndGg6aS5sZW5ndGh9KSxpLmV4dGVuc2lvbilyZXR1cm4gbj1pLmV4dGVuc2lvbixlKyIuIituO2lmKGkuZXh0ZW5zaW9ucyl7aWYoQXJyYXkuaXNBcnJheShpLmV4dGVuc2lvbnMpKXJldHVybiBuPXRoaXMucGlja29uZShpLmV4dGVuc2lvbnMpLGUrIi4iK247aWYoaS5leHRlbnNpb25zLmNvbnN0cnVjdG9yPT09T2JqZWN0KXt2YXIgbz1pLmV4dGVuc2lvbnMsdD1PYmplY3Qua2V5cyhvKTtyZXR1cm4gbj10aGlzLnBpY2tvbmUob1t0aGlzLnBpY2tvbmUodCldKSxlKyIuIitufXRocm93IG5ldyBFcnJvcigiQ2hhbmNlOiBFeHRlbnNpb25zIG11c3QgYmUgYW4gQXJyYXkgb3IgT2JqZWN0Iil9aWYoaS5maWxlVHlwZSl7dmFyIHM9aS5maWxlVHlwZTtpZigtMSE9PXIuaW5kZXhPZihzKSlyZXR1cm4gbj10aGlzLnBpY2tvbmUodGhpcy5nZXQoImZpbGVFeHRlbnNpb24iKVtzXSksZSsiLiIrbjt0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ2hhbmNlOiBFeHBlY3QgZmlsZSB0eXBlIHZhbHVlIHRvIGJlICdyYXN0ZXInLCAndmVjdG9yJywgJzNkJyBvciAnZG9jdW1lbnQnIil9cmV0dXJuIG49dGhpcy5waWNrb25lKHRoaXMuZ2V0KCJmaWxlRXh0ZW5zaW9uIilbdGhpcy5waWNrb25lKHIpXSksZSsiLiIrbn07dmFyIGg9e2ZpcnN0TmFtZXM6e21hbGU6e2VuOlsiSmFtZXMiLCJKb2huIiwiUm9iZXJ0IiwiTWljaGFlbCIsIldpbGxpYW0iLCJEYXZpZCIsIlJpY2hhcmQiLCJKb3NlcGgiLCJDaGFybGVzIiwiVGhvbWFzIiwiQ2hyaXN0b3BoZXIiLCJEYW5pZWwiLCJNYXR0aGV3IiwiR2VvcmdlIiwiRG9uYWxkIiwiQW50aG9ueSIsIlBhdWwiLCJNYXJrIiwiRWR3YXJkIiwiU3RldmVuIiwiS2VubmV0aCIsIkFuZHJldyIsIkJyaWFuIiwiSm9zaHVhIiwiS2V2aW4iLCJSb25hbGQiLCJUaW1vdGh5IiwiSmFzb24iLCJKZWZmcmV5IiwiRnJhbmsiLCJHYXJ5IiwiUnlhbiIsIk5pY2hvbGFzIiwiRXJpYyIsIlN0ZXBoZW4iLCJKYWNvYiIsIkxhcnJ5IiwiSm9uYXRoYW4iLCJTY290dCIsIlJheW1vbmQiLCJKdXN0aW4iLCJCcmFuZG9uIiwiR3JlZ29yeSIsIlNhbXVlbCIsIkJlbmphbWluIiwiUGF0cmljayIsIkphY2siLCJIZW5yeSIsIldhbHRlciIsIkRlbm5pcyIsIkplcnJ5IiwiQWxleGFuZGVyIiwiUGV0ZXIiLCJUeWxlciIsIkRvdWdsYXMiLCJIYXJvbGQiLCJBYXJvbiIsIkpvc2UiLCJBZGFtIiwiQXJ0aHVyIiwiWmFjaGFyeSIsIkNhcmwiLCJOYXRoYW4iLCJBbGJlcnQiLCJLeWxlIiwiTGF3cmVuY2UiLCJKb2UiLCJXaWxsaWUiLCJHZXJhbGQiLCJSb2dlciIsIktlaXRoIiwiSmVyZW15IiwiVGVycnkiLCJIYXJyeSIsIlJhbHBoIiwiU2VhbiIsIkplc3NlIiwiUm95IiwiTG91aXMiLCJCaWxseSIsIkF1c3RpbiIsIkJydWNlIiwiRXVnZW5lIiwiQ2hyaXN0aWFuIiwiQnJ5YW4iLCJXYXluZSIsIlJ1c3NlbGwiLCJIb3dhcmQiLCJGcmVkIiwiRXRoYW4iLCJKb3JkYW4iLCJQaGlsaXAiLCJBbGFuIiwiSnVhbiIsIlJhbmR5IiwiVmluY2VudCIsIkJvYmJ5IiwiRHlsYW4iLCJKb2hubnkiLCJQaGlsbGlwIiwiVmljdG9yIiwiQ2xhcmVuY2UiLCJFcm5lc3QiLCJNYXJ0aW4iLCJDcmFpZyIsIlN0YW5sZXkiLCJTaGF3biIsIlRyYXZpcyIsIkJyYWRsZXkiLCJMZW9uYXJkIiwiRWFybCIsIkdhYnJpZWwiLCJKaW1teSIsIkZyYW5jaXMiLCJUb2RkIiwiTm9haCIsIkRhbm55IiwiRGFsZSIsIkNvZHkiLCJDYXJsb3MiLCJBbGxlbiIsIkZyZWRlcmljayIsIkxvZ2FuIiwiQ3VydGlzIiwiQWxleCIsIkpvZWwiLCJMdWlzIiwiTm9ybWFuIiwiTWFydmluIiwiR2xlbm4iLCJUb255IiwiTmF0aGFuaWVsIiwiUm9kbmV5IiwiTWVsdmluIiwiQWxmcmVkIiwiU3RldmUiLCJDYW1lcm9uIiwiQ2hhZCIsIkVkd2luIiwiQ2FsZWIiLCJFdmFuIiwiQW50b25pbyIsIkxlZSIsIkhlcmJlcnQiLCJKZWZmZXJ5IiwiSXNhYWMiLCJEZXJlayIsIlJpY2t5IiwiTWFyY3VzIiwiVGhlb2RvcmUiLCJFbGlqYWgiLCJMdWtlIiwiSmVzdXMiLCJFZGRpZSIsIlRyb3kiLCJNaWtlIiwiRHVzdGluIiwiUmF5IiwiQWRyaWFuIiwiQmVybmFyZCIsIkxlcm95IiwiQW5nZWwiLCJSYW5kYWxsIiwiV2VzbGV5IiwiSWFuIiwiSmFyZWQiLCJNYXNvbiIsIkh1bnRlciIsIkNhbHZpbiIsIk9zY2FyIiwiQ2xpZmZvcmQiLCJKYXkiLCJTaGFuZSIsIlJvbm5pZSIsIkJhcnJ5IiwiTHVjYXMiLCJDb3JleSIsIk1hbnVlbCIsIkxlbyIsIlRvbW15IiwiV2FycmVuIiwiSmFja3NvbiIsIklzYWlhaCIsIkNvbm5vciIsIkRvbiIsIkRlYW4iLCJKb24iLCJKdWxpYW4iLCJNaWd1ZWwiLCJCaWxsIiwiTGxveWQiLCJDaGFybGllIiwiTWl0Y2hlbGwiLCJMZW9uIiwiSmVyb21lIiwiRGFycmVsbCIsIkplcmVtaWFoIiwiQWx2aW4iLCJCcmV0dCIsIlNldGgiLCJGbG95ZCIsIkppbSIsIkJsYWtlIiwiTWljaGVhbCIsIkdvcmRvbiIsIlRyZXZvciIsIkxld2lzIiwiRXJpayIsIkVkZ2FyIiwiVmVybm9uIiwiRGV2aW4iLCJHYXZpbiIsIkpheWRlbiIsIkNocmlzIiwiQ2x5ZGUiLCJUb20iLCJEZXJyaWNrIiwiTWFyaW8iLCJCcmVudCIsIk1hcmMiLCJIZXJtYW4iLCJDaGFzZSIsIkRvbWluaWMiLCJSaWNhcmRvIiwiRnJhbmtsaW4iLCJNYXVyaWNlIiwiTWF4IiwiQWlkZW4iLCJPd2VuIiwiTGVzdGVyIiwiR2lsYmVydCIsIkVsbWVyIiwiR2VuZSIsIkZyYW5jaXNjbyIsIkdsZW4iLCJDb3J5IiwiR2FycmV0dCIsIkNsYXl0b24iLCJTYW0iLCJKb3JnZSIsIkNoZXN0ZXIiLCJBbGVqYW5kcm8iLCJKZWZmIiwiSGFydmV5IiwiTWlsdG9uIiwiQ29sZSIsIkl2YW4iLCJBbmRyZSIsIkR1YW5lIiwiTGFuZG9uIl0saXQ6WyJBZG9sZm8iLCJBbGJlcnRvIiwiQWxkbyIsIkFsZXNzYW5kcm8iLCJBbGVzc2lvIiwiQWxmcmVkbyIsIkFsdmFybyIsIkFuZHJlYSIsIkFuZ2VsbyIsIkFuZ2lvbG8iLCJBbnRvbmlubyIsIkFudG9uaW8iLCJBdHRpbGlvIiwiQmVuaXRvIiwiQmVybmFyZG8iLCJCcnVubyIsIkNhcmxvIiwiQ2VzYXJlIiwiQ2hyaXN0aWFuIiwiQ2xhdWRpbyIsIkNvcnJhZG8iLCJDb3NpbW8iLCJDcmlzdGlhbiIsIkNyaXN0aWFubyIsIkRhbmllbGUiLCJEYXJpbyIsIkRhdmlkIiwiRGF2aWRlIiwiRGllZ28iLCJEaW5vIiwiRG9tZW5pY28iLCJEdWNjaW8iLCJFZG9hcmRvIiwiRWxpYSIsIkVsaW8iLCJFbWFudWVsZSIsIkVtaWxpYW5vIiwiRW1pbGlvIiwiRW5yaWNvIiwiRW56byIsIkV0dG9yZSIsIkZhYmlvIiwiRmFicml6aW8iLCJGZWRlcmljbyIsIkZlcmRpbmFuZG8iLCJGZXJuYW5kbyIsIkZpbGlwcG8iLCJGcmFuY2VzY28iLCJGcmFuY28iLCJHYWJyaWVsZSIsIkdpYWNvbW8iLCJHaWFtcGFvbG8iLCJHaWFtcGllcm8iLCJHaWFuY2FybG8iLCJHaWFuZnJhbmNvIiwiR2lhbmx1Y2EiLCJHaWFubWFyY28iLCJHaWFubmkiLCJHaW5vIiwiR2lvcmdpbyIsIkdpb3Zhbm5pIiwiR2l1bGlhbm8iLCJHaXVsaW8iLCJHaXVzZXBwZSIsIkdyYXppYW5vIiwiR3JlZ29yaW8iLCJHdWlkbyIsIklhY29wbyIsIkphY29wbyIsIkxhcG8iLCJMZW9uYXJkbyIsIkxvcmVuem8iLCJMdWNhIiwiTHVjaWFubyIsIkx1aWdpIiwiTWFudWVsIiwiTWFyY2VsbG8iLCJNYXJjbyIsIk1hcmlubyIsIk1hcmlvIiwiTWFzc2ltaWxpYW5vIiwiTWFzc2ltbyIsIk1hdHRlbyIsIk1hdHRpYSIsIk1hdXJpemlvIiwiTWF1cm8iLCJNaWNoZWxlIiwiTWlya28iLCJNb2hhbWVkIiwiTmVsbG8iLCJOZXJpIiwiTmljY29sw7IiLCJOaWNvbGEiLCJPc3ZhbGRvIiwiT3RlbGxvIiwiUGFvbG8iLCJQaWVyIEx1aWdpIiwiUGllcm8iLCJQaWV0cm8iLCJSYWZmYWVsZSIsIlJlbW8iLCJSZW5hdG8iLCJSZW56byIsIlJpY2NhcmRvIiwiUm9iZXJ0byIsIlJvbGFuZG8iLCJSb21hbm8iLCJTYWx2YXRvcmUiLCJTYW11ZWxlIiwiU2FuZHJvIiwiU2VyZ2lvIiwiU2lsdmFubyIsIlNpbW9uZSIsIlN0ZWZhbm8iLCJUaG9tYXMiLCJUb21tYXNvIiwiVWJhbGRvIiwiVWdvIiwiVW1iZXJ0byIsIlZhbGVyaW8iLCJWYWx0ZXIiLCJWYXNjbyIsIlZpbmNlbnpvIiwiVml0dG9yaW8iXSxubDpbIkFhcm9uIiwiQWJlbCIsIkFkYW0iLCJBZHJpYWFuIiwiQWxiZXJ0IiwiQWxleGFuZGVyIiwiQWxpIiwiQXJqZW4iLCJBcm5vIiwiQmFydCIsIkJhcyIsIkJhc3RpYWFuIiwiQmVuamFtaW4iLCJCb2IiLCJCb3JpcyIsIkJyYW0iLCJCcmVudCIsIkNhcyIsIkNhc3BlciIsIkNocmlzIiwiQ2hyaXN0aWFhbiIsIkNvcm5lbGlzIiwiRGFhbiIsIkRhbGV5IiwiRGFtaWFuIiwiRGFuaSIsIkRhbmllbCIsIkRhbmnDq2wiLCJEYXZpZCIsIkRlYW4iLCJEaXJrIiwiRHlsYW4iLCJFZ2JlcnQiLCJFbGlqYWgiLCJFcmlrIiwiRXJ3aW4iLCJFdmVydCIsIkV6cmEiLCJGYWJpYW4iLCJGZWRkZSIsIkZpbm4iLCJGbG9yaWFuIiwiRmxvcmlzIiwiRnJhbmsiLCJGcmFucyIsIkZyZWRlcmlrIiwiRnJlZWsiLCJHZWVydCIsIkdlcmFyZCIsIkdlcmJlbiIsIkdlcnJpdCIsIkdpanMiLCJHdXVzIiwiSGFucyIsIkhlbmRyaWsiLCJIZW5rIiwiSGVybWFuIiwiSGlkZGUiLCJIdWdvIiwiSmFhcCIsIkphbiBKYWFwIiwiSmFuLVdpbGxlbSIsIkphY2siLCJKYWNvYiIsIkphbiIsIkphc29uIiwiSmFzcGVyIiwiSmF5ZGVuIiwiSmVsbGUiLCJKZWx0ZSIsIkplbnMiLCJKZXJvZW4iLCJKZXNzZSIsIkppbSIsIkpvYiIsIkpvZXAiLCJKb2hhbm5lcyIsIkpvaG4iLCJKb25hdGhhbiIsIkpvcmlzIiwiSm9zaHVhIiwiSm/Dq2wiLCJKdWxpYW4iLCJLZWVzIiwiS2V2aW4iLCJLb2VuIiwiTGFycyIsIkxhdXJlbnMiLCJMZWVuZGVydCIsIkxlbm5hcmQiLCJMb2Rld2lqayIsIkx1YyIsIkx1Y2EiLCJMdWNhcyIsIkx1a2FzIiwiTHV1ayIsIk1hYXJ0ZW4iLCJNYXJjdXMiLCJNYXJ0aWpuIiwiTWFydGluIiwiTWF0dGhpanMiLCJNYXVyaXRzIiwiTWF4IiwiTWVlcyIsIk1lbGxlIiwiTWljayIsIk1pa2EiLCJNaWxhbiIsIk1vaGFtZWQiLCJNb2hhbW1lZCIsIk1vcnJpcyIsIk11aGFtbWVkIiwiTmF0aGFuIiwiTmljayIsIk5pY28iLCJOaWVrIiwiTmllbHMiLCJOb2FoIiwiTm91ZCIsIk9saXZpZXIiLCJPc2NhciIsIk93ZW4iLCJQYXVsIiwiUGVwaWpuIiwiUGV0ZXIiLCJQaWV0ZXIiLCJQaW0iLCJRdWludGVuIiwiUmVpbmllciIsIlJlbnMiLCJSb2JpbiIsIlJ1YmVuIiwiU2FtIiwiU2FtdWVsIiwiU2FuZGVyIiwiU2ViYXN0aWFhbiIsIlNlbSIsIlNlcCIsIlNlcHAiLCJTaWVtIiwiU2ltb24iLCJTdGFuIiwiU3RlZiIsIlN0ZXZlbiIsIlN0aWpuIiwiU3ZlbiIsIlRldW4iLCJUaGlqbWVuIiwiVGhpanMiLCJUaG9tYXMiLCJUaWpuIiwiVGltIiwiVGltbyIsIlRvYmlhcyIsIlRvbSIsIlZpY3RvciIsIlZpbmNlIiwiV2lsbGVtIiwiV2ltIiwiV291dGVyIiwiWXVzdWYiXX0sZmVtYWxlOntlbjpbIk1hcnkiLCJFbW1hIiwiRWxpemFiZXRoIiwiTWlubmllIiwiTWFyZ2FyZXQiLCJJZGEiLCJBbGljZSIsIkJlcnRoYSIsIlNhcmFoIiwiQW5uaWUiLCJDbGFyYSIsIkVsbGEiLCJGbG9yZW5jZSIsIkNvcmEiLCJNYXJ0aGEiLCJMYXVyYSIsIk5lbGxpZSIsIkdyYWNlIiwiQ2FycmllIiwiTWF1ZGUiLCJNYWJlbCIsIkJlc3NpZSIsIkplbm5pZSIsIkdlcnRydWRlIiwiSnVsaWEiLCJIYXR0aWUiLCJFZGl0aCIsIk1hdHRpZSIsIlJvc2UiLCJDYXRoZXJpbmUiLCJMaWxsaWFuIiwiQWRhIiwiTGlsbGllIiwiSGVsZW4iLCJKZXNzaWUiLCJMb3Vpc2UiLCJFdGhlbCIsIkx1bGEiLCJNeXJ0bGUiLCJFdmEiLCJGcmFuY2VzIiwiTGVuYSIsIkx1Y3kiLCJFZG5hIiwiTWFnZ2llIiwiUGVhcmwiLCJEYWlzeSIsIkZhbm5pZSIsIkpvc2VwaGluZSIsIkRvcmEiLCJSb3NhIiwiS2F0aGVyaW5lIiwiQWduZXMiLCJNYXJpZSIsIk5vcmEiLCJNYXkiLCJNYW1pZSIsIkJsYW5jaGUiLCJTdGVsbGEiLCJFbGxlbiIsIk5hbmN5IiwiRWZmaWUiLCJTYWxsaWUiLCJOZXR0aWUiLCJEZWxsYSIsIkxpenppZSIsIkZsb3JhIiwiU3VzaWUiLCJNYXVkIiwiTWFlIiwiRXR0YSIsIkhhcnJpZXQiLCJTYWRpZSIsIkNhcm9saW5lIiwiS2F0aWUiLCJMeWRpYSIsIkVsc2llIiwiS2F0ZSIsIlN1c2FuIiwiTW9sbGllIiwiQWxtYSIsIkFkZGllIiwiR2VvcmdpYSIsIkVsaXphIiwiTHVsdSIsIk5hbm5pZSIsIkxvdHRpZSIsIkFtYW5kYSIsIkJlbGxlIiwiQ2hhcmxvdHRlIiwiUmViZWNjYSIsIlJ1dGgiLCJWaW9sYSIsIk9saXZlIiwiQW1lbGlhIiwiSGFubmFoIiwiSmFuZSIsIlZpcmdpbmlhIiwiRW1pbHkiLCJNYXRpbGRhIiwiSXJlbmUiLCJLYXRocnluIiwiRXN0aGVyIiwiV2lsbGllIiwiSGVucmlldHRhIiwiT2xsaWUiLCJBbXkiLCJSYWNoZWwiLCJTYXJhIiwiRXN0ZWxsYSIsIlRoZXJlc2EiLCJBdWd1c3RhIiwiT3JhIiwiUGF1bGluZSIsIkpvc2llIiwiTG9sYSIsIlNvcGhpYSIsIkxlb25hIiwiQW5uZSIsIk1pbGRyZWQiLCJBbm4iLCJCZXVsYWgiLCJDYWxsaWUiLCJMb3UiLCJEZWxpYSIsIkVsZWFub3IiLCJCYXJiYXJhIiwiSXZhIiwiTG91aXNhIiwiTWFyaWEiLCJNYXltZSIsIkV2ZWx5biIsIkVzdGVsbGUiLCJOaW5hIiwiQmV0dHkiLCJNYXJpb24iLCJCZXR0aWUiLCJEb3JvdGh5IiwiTHVlbGxhIiwiSW5leiIsIkxlbGEiLCJSb3NpZSIsIkFsbGllIiwiTWlsbGllIiwiSmFuaWUiLCJDb3JuZWxpYSIsIlZpY3RvcmlhIiwiUnVieSIsIldpbmlmcmVkIiwiQWx0YSIsIkNlbGlhIiwiQ2hyaXN0aW5lIiwiQmVhdHJpY2UiLCJCaXJkaWUiLCJIYXJyaWV0dCIsIk1hYmxlIiwiTXlyYSIsIlNvcGhpZSIsIlRpbGxpZSIsIklzYWJlbCIsIlN5bHZpYSIsIkNhcm9seW4iLCJJc2FiZWxsZSIsIkxlaWxhIiwiU2FsbHkiLCJJbmEiLCJFc3NpZSIsIkJlcnRpZSIsIk5lbGwiLCJBbGJlcnRhIiwiS2F0aGFyaW5lIiwiTG9yYSIsIlJlbmEiLCJNaW5hIiwiUmhvZGEiLCJNYXRoaWxkYSIsIkFiYmllIiwiRXVsYSIsIkRvbGxpZSIsIkhldHRpZSIsIkV1bmljZSIsIkZhbm55IiwiT2xhIiwiTGVub3JhIiwiQWRlbGFpZGUiLCJDaHJpc3RpbmEiLCJMZWxpYSIsIk5lbGxlIiwiU3VlIiwiSm9oYW5uYSIsIkxpbGx5IiwiTHVjaW5kYSIsIk1pbmVydmEiLCJMZXR0aWUiLCJSb3hpZSIsIkN5bnRoaWEiLCJIZWxlbmEiLCJIaWxkYSIsIkh1bGRhIiwiQmVybmljZSIsIkdlbmV2aWV2ZSIsIkplYW4iLCJDb3JkZWxpYSIsIk1hcmlhbiIsIkZyYW5jaXMiLCJKZWFuZXR0ZSIsIkFkZWxpbmUiLCJHdXNzaWUiLCJMZWFoIiwiTG9pcyIsIkx1cmEiLCJNaXR0aWUiLCJIYWxsaWUiLCJJc2FiZWxsYSIsIk9sZ2EiLCJQaG9lYmUiLCJUZXJlc2EiLCJIZXN0ZXIiLCJMaWRhIiwiTGluYSIsIldpbm5pZSIsIkNsYXVkaWEiLCJNYXJndWVyaXRlIiwiVmVyYSIsIkNlY2VsaWEiLCJCZXNzIiwiRW1pbGllIiwiUm9zZXR0YSIsIlZlcm5hIiwiTXlydGllIiwiQ2VjaWxpYSIsIkVsdmEiLCJPbGl2aWEiLCJPcGhlbGlhIiwiR2VvcmdpZSIsIkVsbm9yYSIsIlZpb2xldCIsIkFkZWxlIiwiTGlseSIsIkxpbm5pZSIsIkxvcmV0dGEiLCJNYWRnZSIsIlBvbGx5IiwiVmlyZ2llIiwiRXVnZW5pYSIsIkx1Y2lsZSIsIkx1Y2lsbGUiLCJNYWJlbGxlIiwiUm9zYWxpZSJdLGl0OlsiQWRhIiwiQWRyaWFuYSIsIkFsZXNzYW5kcmEiLCJBbGVzc2lhIiwiQWxpY2UiLCJBbmdlbGEiLCJBbm5hIiwiQW5uYSBNYXJpYSIsIkFubmFsaXNhIiwiQW5uaXRhIiwiQW5udW56aWF0YSIsIkFudG9uZWxsYSIsIkFyaWFubmEiLCJBc2lhIiwiQXNzdW50YSIsIkF1cm9yYSIsIkJhcmJhcmEiLCJCZWF0cmljZSIsIkJlbmVkZXR0YSIsIkJpYW5jYSIsIkJydW5hIiwiQ2FtaWxsYSIsIkNhcmxhIiwiQ2FybG90dGEiLCJDYXJtZWxhIiwiQ2Fyb2xpbmEiLCJDYXRlcmluYSIsIkNhdGlhIiwiQ2VjaWxpYSIsIkNoaWFyYSIsIkNpbnppYSIsIkNsYXJhIiwiQ2xhdWRpYSIsIkNvc3RhbnphIiwiQ3Jpc3RpbmEiLCJEYW5pZWxhIiwiRGVib3JhIiwiRGlsZXR0YSIsIkRpbmEiLCJEb25hdGVsbGEiLCJFbGVuYSIsIkVsZW9ub3JhIiwiRWxpc2EiLCJFbGlzYWJldHRhIiwiRW1hbnVlbGEiLCJFbW1hIiwiRXZhIiwiRmVkZXJpY2EiLCJGZXJuYW5kYSIsIkZpb3JlbGxhIiwiRmlvcmVuemEiLCJGbG9yYSIsIkZyYW5jYSIsIkZyYW5jZXNjYSIsIkdhYnJpZWxsYSIsIkdhaWEiLCJHZW1tYSIsIkdpYWRhIiwiR2lhbm5hIiwiR2luYSIsIkdpbmV2cmEiLCJHaW9yZ2lhIiwiR2lvdmFubmEiLCJHaXVsaWEiLCJHaXVsaWFuYSIsIkdpdXNlcHBhIiwiR2l1c2VwcGluYSIsIkdyYXppYSIsIkdyYXppZWxsYSIsIkdyZXRhIiwiSWRhIiwiSWxhcmlhIiwiSW5lcyIsIklvbGFuZGEiLCJJcmVuZSIsIklybWEiLCJJc2FiZWxsYSIsIkplc3NpY2EiLCJMYXVyYSIsIkxlYSIsIkxldGl6aWEiLCJMaWNpYSIsIkxpZGlhIiwiTGlsaWFuYSIsIkxpbmEiLCJMaW5kYSIsIkxpc2EiLCJMaXZpYSIsIkxvcmV0dGEiLCJMdWFuYSIsIkx1Y2lhIiwiTHVjaWFuYSIsIkx1Y3JlemlhIiwiTHVpc2EiLCJNYW51ZWxhIiwiTWFyYSIsIk1hcmNlbGxhIiwiTWFyZ2hlcml0YSIsIk1hcmlhIiwiTWFyaWEgQ3Jpc3RpbmEiLCJNYXJpYSBHcmF6aWEiLCJNYXJpYSBMdWlzYSIsIk1hcmlhIFBpYSIsIk1hcmlhIFRlcmVzYSIsIk1hcmluYSIsIk1hcmlzYSIsIk1hcnRhIiwiTWFydGluYSIsIk1hcnppYSIsIk1hdGlsZGUiLCJNZWxpc3NhIiwiTWljaGVsYSIsIk1pbGVuYSIsIk1pcmVsbGEiLCJNb25pY2EiLCJOYXRhbGluYSIsIk5lbGxhIiwiTmljb2xldHRhIiwiTm9lbWkiLCJPbGdhIiwiUGFvbGEiLCJQYXRyaXppYSIsIlBpZXJhIiwiUGllcmluYSIsIlJhZmZhZWxsYSIsIlJlYmVjY2EiLCJSZW5hdGEiLCJSaW5hIiwiUml0YSIsIlJvYmVydGEiLCJSb3NhIiwiUm9zYW5uYSIsIlJvc3NhbmEiLCJSb3NzZWxsYSIsIlNhYnJpbmEiLCJTYW5kcmEiLCJTYXJhIiwiU2VyZW5hIiwiU2lsdmFuYSIsIlNpbHZpYSIsIlNpbW9uYSIsIlNpbW9uZXR0YSIsIlNvZmlhIiwiU29uaWEiLCJTdGVmYW5pYSIsIlN1c2FubmEiLCJUZXJlc2EiLCJUaW5hIiwiVGl6aWFuYSIsIlRvc2NhIiwiVmFsZW50aW5hIiwiVmFsZXJpYSIsIlZhbmRhIiwiVmFuZXNzYSIsIlZhbm5hIiwiVmVyYSIsIlZlcm9uaWNhIiwiVmlsbWEiLCJWaW9sYSIsIlZpcmdpbmlhIiwiVml0dG9yaWEiXSxubDpbIkFkYSIsIkFyaWFubmUiLCJBZmtlIiwiQW1hbmRhIiwiQW1iZXIiLCJBbXkiLCJBbmllayIsIkFuaXRhIiwiQW5qYSIsIkFubmEiLCJBbm5lIiwiQW5uZWxpZXMiLCJBbm5lbWFyaWUiLCJBbm5ldHRlIiwiQW5vdWsiLCJBc3RyaWQiLCJBdWtqZSIsIkJhcmJhcmEiLCJCaWFuY2EiLCJDYXJsYSIsIkNhcmxpam4iLCJDYXJvbGllbiIsIkNoYW50YWwiLCJDaGFybG90dGUiLCJDbGF1ZGlhIiwiRGFuacOrbGxlIiwiRGVib3JhIiwiRGlhbmUiLCJEb3JhIiwiRWxpbmUiLCJFbGlzZSIsIkVsbGEiLCJFbGxlbiIsIkVtbWEiLCJFc21lZSIsIkV2ZWxpZW4iLCJFc3RoZXIiLCJFcmljYSIsIkV2YSIsIkZlbWtlIiwiRmxldXIiLCJGbG9vciIsIkZyb3VramUiLCJHZWEiLCJHZXJkYSIsIkhhbm5hIiwiSGFubmVrZSIsIkhlbGVlbiIsIkhpbGRlIiwiSWxvbmEiLCJJbmEiLCJJbmdlIiwiSW5ncmlkIiwiSXJpcyIsIklzYWJlbCIsIklzYWJlbGxlIiwiSmFubmVrZSIsIkphc21pam4iLCJKZWFuaW5lIiwiSmVubmlmZXIiLCJKZXNzaWNhIiwiSm9oYW5uYSIsIkpva2UiLCJKdWxpYSIsIkp1bGllIiwiS2FyZW4iLCJLYXJpbiIsIkthdGphIiwiS2ltIiwiTGFyYSIsIkxhdXJhIiwiTGVuYSIsIkxpYW5uZSIsIkxpZWtlIiwiTGlsaWFuIiwiTGluZGEiLCJMaXNhIiwiTGlzYW5uZSIsIkxvdHRlIiwiTG91aXNlIiwiTWFhaWtlIiwiTWFub24iLCJNYXJnYSIsIk1hcmlhIiwiTWFyaXNzYSIsIk1hcml0IiwiTWFyam9sZWluIiwiTWFydGluZSIsIk1hcmxlZW4iLCJNZWxpc3NhIiwiTWVyZWwiLCJNaXJhbmRhIiwiTWljaGVsbGUiLCJNaXJqYW0iLCJNaXJ0aGUiLCJOYW9taSIsIk5hdGFsaWUiLCJOaWVua2UiLCJOaW5hIiwiTm9vcnRqZSIsIk9saXZpYSIsIlBhdHJpY2lhIiwiUGF1bGEiLCJQYXVsaWVuIiwiUmFtb25hIiwiUmlhIiwiUmlhbm5lIiwiUm9vcyIsIlJvc2FubmUiLCJSdXRoIiwiU2FicmluYSIsIlNhbmRyYSIsIlNhbm5lIiwiU2FyYSIsIlNhc2tpYSIsIlNpbHZpYSIsIlNvZmlhIiwiU29waGllIiwiU29uamEiLCJTdXphbm5lIiwiVGFtYXJhIiwiVGVzcyIsIlRlc3NhIiwiVGluZWtlIiwiVmFsZXJpZSIsIlZhbmVzc2EiLCJWZWVybGUiLCJWZXJhIiwiVmljdG9yaWEiLCJXZW5keSIsIldpbGxla2UiLCJZdm9ubmUiLCJab8OrIl19fSxsYXN0TmFtZXM6e2VuOlsiU21pdGgiLCJKb2huc29uIiwiV2lsbGlhbXMiLCJKb25lcyIsIkJyb3duIiwiRGF2aXMiLCJNaWxsZXIiLCJXaWxzb24iLCJNb29yZSIsIlRheWxvciIsIkFuZGVyc29uIiwiVGhvbWFzIiwiSmFja3NvbiIsIldoaXRlIiwiSGFycmlzIiwiTWFydGluIiwiVGhvbXBzb24iLCJHYXJjaWEiLCJNYXJ0aW5leiIsIlJvYmluc29uIiwiQ2xhcmsiLCJSb2RyaWd1ZXoiLCJMZXdpcyIsIkxlZSIsIldhbGtlciIsIkhhbGwiLCJBbGxlbiIsIllvdW5nIiwiSGVybmFuZGV6IiwiS2luZyIsIldyaWdodCIsIkxvcGV6IiwiSGlsbCIsIlNjb3R0IiwiR3JlZW4iLCJBZGFtcyIsIkJha2VyIiwiR29uemFsZXoiLCJOZWxzb24iLCJDYXJ0ZXIiLCJNaXRjaGVsbCIsIlBlcmV6IiwiUm9iZXJ0cyIsIlR1cm5lciIsIlBoaWxsaXBzIiwiQ2FtcGJlbGwiLCJQYXJrZXIiLCJFdmFucyIsIkVkd2FyZHMiLCJDb2xsaW5zIiwiU3Rld2FydCIsIlNhbmNoZXoiLCJNb3JyaXMiLCJSb2dlcnMiLCJSZWVkIiwiQ29vayIsIk1vcmdhbiIsIkJlbGwiLCJNdXJwaHkiLCJCYWlsZXkiLCJSaXZlcmEiLCJDb29wZXIiLCJSaWNoYXJkc29uIiwiQ294IiwiSG93YXJkIiwiV2FyZCIsIlRvcnJlcyIsIlBldGVyc29uIiwiR3JheSIsIlJhbWlyZXoiLCJKYW1lcyIsIldhdHNvbiIsIkJyb29rcyIsIktlbGx5IiwiU2FuZGVycyIsIlByaWNlIiwiQmVubmV0dCIsIldvb2QiLCJCYXJuZXMiLCJSb3NzIiwiSGVuZGVyc29uIiwiQ29sZW1hbiIsIkplbmtpbnMiLCJQZXJyeSIsIlBvd2VsbCIsIkxvbmciLCJQYXR0ZXJzb24iLCJIdWdoZXMiLCJGbG9yZXMiLCJXYXNoaW5ndG9uIiwiQnV0bGVyIiwiU2ltbW9ucyIsIkZvc3RlciIsIkdvbnphbGVzIiwiQnJ5YW50IiwiQWxleGFuZGVyIiwiUnVzc2VsbCIsIkdyaWZmaW4iLCJEaWF6IiwiSGF5ZXMiLCJNeWVycyIsIkZvcmQiLCJIYW1pbHRvbiIsIkdyYWhhbSIsIlN1bGxpdmFuIiwiV2FsbGFjZSIsIldvb2RzIiwiQ29sZSIsIldlc3QiLCJKb3JkYW4iLCJPd2VucyIsIlJleW5vbGRzIiwiRmlzaGVyIiwiRWxsaXMiLCJIYXJyaXNvbiIsIkdpYnNvbiIsIk1jRG9uYWxkIiwiQ3J1eiIsIk1hcnNoYWxsIiwiT3J0aXoiLCJHb21leiIsIk11cnJheSIsIkZyZWVtYW4iLCJXZWxscyIsIldlYmIiLCJTaW1wc29uIiwiU3RldmVucyIsIlR1Y2tlciIsIlBvcnRlciIsIkh1bnRlciIsIkhpY2tzIiwiQ3Jhd2ZvcmQiLCJIZW5yeSIsIkJveWQiLCJNYXNvbiIsIk1vcmFsZXMiLCJLZW5uZWR5IiwiV2FycmVuIiwiRGl4b24iLCJSYW1vcyIsIlJleWVzIiwiQnVybnMiLCJHb3Jkb24iLCJTaGF3IiwiSG9sbWVzIiwiUmljZSIsIlJvYmVydHNvbiIsIkh1bnQiLCJCbGFjayIsIkRhbmllbHMiLCJQYWxtZXIiLCJNaWxscyIsIk5pY2hvbHMiLCJHcmFudCIsIktuaWdodCIsIkZlcmd1c29uIiwiUm9zZSIsIlN0b25lIiwiSGF3a2lucyIsIkR1bm4iLCJQZXJraW5zIiwiSHVkc29uIiwiU3BlbmNlciIsIkdhcmRuZXIiLCJTdGVwaGVucyIsIlBheW5lIiwiUGllcmNlIiwiQmVycnkiLCJNYXR0aGV3cyIsIkFybm9sZCIsIldhZ25lciIsIldpbGxpcyIsIlJheSIsIldhdGtpbnMiLCJPbHNvbiIsIkNhcnJvbGwiLCJEdW5jYW4iLCJTbnlkZXIiLCJIYXJ0IiwiQ3VubmluZ2hhbSIsIkJyYWRsZXkiLCJMYW5lIiwiQW5kcmV3cyIsIlJ1aXoiLCJIYXJwZXIiLCJGb3giLCJSaWxleSIsIkFybXN0cm9uZyIsIkNhcnBlbnRlciIsIldlYXZlciIsIkdyZWVuZSIsIkxhd3JlbmNlIiwiRWxsaW90dCIsIkNoYXZleiIsIlNpbXMiLCJBdXN0aW4iLCJQZXRlcnMiLCJLZWxsZXkiLCJGcmFua2xpbiIsIkxhd3NvbiIsIkZpZWxkcyIsIkd1dGllcnJleiIsIlJ5YW4iLCJTY2htaWR0IiwiQ2FyciIsIlZhc3F1ZXoiLCJDYXN0aWxsbyIsIldoZWVsZXIiLCJDaGFwbWFuIiwiT2xpdmVyIiwiTW9udGdvbWVyeSIsIlJpY2hhcmRzIiwiV2lsbGlhbXNvbiIsIkpvaG5zdG9uIiwiQmFua3MiLCJNZXllciIsIkJpc2hvcCIsIk1jQ295IiwiSG93ZWxsIiwiQWx2YXJleiIsIk1vcnJpc29uIiwiSGFuc2VuIiwiRmVybmFuZGV6IiwiR2FyemEiLCJIYXJ2ZXkiLCJMaXR0bGUiLCJCdXJ0b24iLCJTdGFubGV5IiwiTmd1eWVuIiwiR2VvcmdlIiwiSmFjb2JzIiwiUmVpZCIsIktpbSIsIkZ1bGxlciIsIkx5bmNoIiwiRGVhbiIsIkdpbGJlcnQiLCJHYXJyZXR0IiwiUm9tZXJvIiwiV2VsY2giLCJMYXJzb24iLCJGcmF6aWVyIiwiQnVya2UiLCJIYW5zb24iLCJEYXkiLCJNZW5kb3phIiwiTW9yZW5vIiwiQm93bWFuIiwiTWVkaW5hIiwiRm93bGVyIiwiQnJld2VyIiwiSG9mZm1hbiIsIkNhcmxzb24iLCJTaWx2YSIsIlBlYXJzb24iLCJIb2xsYW5kIiwiRG91Z2xhcyIsIkZsZW1pbmciLCJKZW5zZW4iLCJWYXJnYXMiLCJCeXJkIiwiRGF2aWRzb24iLCJIb3BraW5zIiwiTWF5IiwiVGVycnkiLCJIZXJyZXJhIiwiV2FkZSIsIlNvdG8iLCJXYWx0ZXJzIiwiQ3VydGlzIiwiTmVhbCIsIkNhbGR3ZWxsIiwiTG93ZSIsIkplbm5pbmdzIiwiQmFybmV0dCIsIkdyYXZlcyIsIkppbWVuZXoiLCJIb3J0b24iLCJTaGVsdG9uIiwiQmFycmV0dCIsIk9icmllbiIsIkNhc3RybyIsIlN1dHRvbiIsIkdyZWdvcnkiLCJNY0tpbm5leSIsIkx1Y2FzIiwiTWlsZXMiLCJDcmFpZyIsIlJvZHJpcXVleiIsIkNoYW1iZXJzIiwiSG9sdCIsIkxhbWJlcnQiLCJGbGV0Y2hlciIsIldhdHRzIiwiQmF0ZXMiLCJIYWxlIiwiUmhvZGVzIiwiUGVuYSIsIkJlY2siLCJOZXdtYW4iLCJIYXluZXMiLCJNY0RhbmllbCIsIk1lbmRleiIsIkJ1c2giLCJWYXVnaG4iLCJQYXJrcyIsIkRhd3NvbiIsIlNhbnRpYWdvIiwiTm9ycmlzIiwiSGFyZHkiLCJMb3ZlIiwiU3RlZWxlIiwiQ3VycnkiLCJQb3dlcnMiLCJTY2h1bHR6IiwiQmFya2VyIiwiR3V6bWFuIiwiUGFnZSIsIk11bm96IiwiQmFsbCIsIktlbGxlciIsIkNoYW5kbGVyIiwiV2ViZXIiLCJMZW9uYXJkIiwiV2Fsc2giLCJMeW9ucyIsIlJhbXNleSIsIldvbGZlIiwiU2NobmVpZGVyIiwiTXVsbGlucyIsIkJlbnNvbiIsIlNoYXJwIiwiQm93ZW4iLCJEYW5pZWwiLCJCYXJiZXIiLCJDdW1taW5ncyIsIkhpbmVzIiwiQmFsZHdpbiIsIkdyaWZmaXRoIiwiVmFsZGV6IiwiSHViYmFyZCIsIlNhbGF6YXIiLCJSZWV2ZXMiLCJXYXJuZXIiLCJTdGV2ZW5zb24iLCJCdXJnZXNzIiwiU2FudG9zIiwiVGF0ZSIsIkNyb3NzIiwiR2FybmVyIiwiTWFubiIsIk1hY2siLCJNb3NzIiwiVGhvcm50b24iLCJEZW5uaXMiLCJNY0dlZSIsIkZhcm1lciIsIkRlbGdhZG8iLCJBZ3VpbGFyIiwiVmVnYSIsIkdsb3ZlciIsIk1hbm5pbmciLCJDb2hlbiIsIkhhcm1vbiIsIlJvZGdlcnMiLCJSb2JiaW5zIiwiTmV3dG9uIiwiVG9kZCIsIkJsYWlyIiwiSGlnZ2lucyIsIkluZ3JhbSIsIlJlZXNlIiwiQ2Fubm9uIiwiU3RyaWNrbGFuZCIsIlRvd25zZW5kIiwiUG90dGVyIiwiR29vZHdpbiIsIldhbHRvbiIsIlJvd2UiLCJIYW1wdG9uIiwiT3J0ZWdhIiwiUGF0dG9uIiwiU3dhbnNvbiIsIkpvc2VwaCIsIkZyYW5jaXMiLCJHb29kbWFuIiwiTWFsZG9uYWRvIiwiWWF0ZXMiLCJCZWNrZXIiLCJFcmlja3NvbiIsIkhvZGdlcyIsIlJpb3MiLCJDb25uZXIiLCJBZGtpbnMiLCJXZWJzdGVyIiwiTm9ybWFuIiwiTWFsb25lIiwiSGFtbW9uZCIsIkZsb3dlcnMiLCJDb2JiIiwiTW9vZHkiLCJRdWlubiIsIkJsYWtlIiwiTWF4d2VsbCIsIlBvcGUiLCJGbG95ZCIsIk9zYm9ybmUiLCJQYXVsIiwiTWNDYXJ0aHkiLCJHdWVycmVybyIsIkxpbmRzZXkiLCJFc3RyYWRhIiwiU2FuZG92YWwiLCJHaWJicyIsIlR5bGVyIiwiR3Jvc3MiLCJGaXR6Z2VyYWxkIiwiU3Rva2VzIiwiRG95bGUiLCJTaGVybWFuIiwiU2F1bmRlcnMiLCJXaXNlIiwiQ29sb24iLCJHaWxsIiwiQWx2YXJhZG8iLCJHcmVlciIsIlBhZGlsbGEiLCJTaW1vbiIsIldhdGVycyIsIk51bmV6IiwiQmFsbGFyZCIsIlNjaHdhcnR6IiwiTWNCcmlkZSIsIkhvdXN0b24iLCJDaHJpc3RlbnNlbiIsIktsZWluIiwiUHJhdHQiLCJCcmlnZ3MiLCJQYXJzb25zIiwiTWNMYXVnaGxpbiIsIlppbW1lcm1hbiIsIkZyZW5jaCIsIkJ1Y2hhbmFuIiwiTW9yYW4iLCJDb3BlbGFuZCIsIlJveSIsIlBpdHRtYW4iLCJCcmFkeSIsIk1jQ29ybWljayIsIkhvbGxvd2F5IiwiQnJvY2siLCJQb29sZSIsIkZyYW5rIiwiTG9nYW4iLCJPd2VuIiwiQmFzcyIsIk1hcnNoIiwiRHJha2UiLCJXb25nIiwiSmVmZmVyc29uIiwiUGFyayIsIk1vcnRvbiIsIkFiYm90dCIsIlNwYXJrcyIsIlBhdHJpY2siLCJOb3J0b24iLCJIdWZmIiwiQ2xheXRvbiIsIk1hc3NleSIsIkxsb3lkIiwiRmlndWVyb2EiLCJDYXJzb24iLCJCb3dlcnMiLCJSb2JlcnNvbiIsIkJhcnRvbiIsIlRyYW4iLCJMYW1iIiwiSGFycmluZ3RvbiIsIkNhc2V5IiwiQm9vbmUiLCJDb3J0ZXoiLCJDbGFya2UiLCJNYXRoaXMiLCJTaW5nbGV0b24iLCJXaWxraW5zIiwiQ2FpbiIsIkJyeWFuIiwiVW5kZXJ3b29kIiwiSG9nYW4iLCJNY0tlbnppZSIsIkNvbGxpZXIiLCJMdW5hIiwiUGhlbHBzIiwiTWNHdWlyZSIsIkFsbGlzb24iLCJCcmlkZ2VzIiwiV2lsa2Vyc29uIiwiTmFzaCIsIlN1bW1lcnMiLCJBdGtpbnMiXSxpdDpbIkFjY2lhaSIsIkFnbGlldHRpIiwiQWdvc3RpbmkiLCJBZ3Jlc3RpIiwiQWhtZWQiLCJBaWF6emkiLCJBbGJhbmVzZSIsIkFsYmVydGkiLCJBbGVzc2kiLCJBbGZhbmkiLCJBbGluYXJpIiwiQWx0ZXJpbmkiLCJBbWF0byIsIkFtbWFubmF0aSIsIkFuY2lsbG90dGkiLCJBbmRyZWkiLCJBbmRyZWluaSIsIkFuZHJlb25pIiwiQW5nZWxpIiwiQW5pY2hpbmkiLCJBbnRvbmVsbGkiLCJBbnRvbmluaSIsIkFyZW5hIiwiQXJpYW5pIiwiQXJuZXRvbGkiLCJBcnJpZ2hpIiwiQmFjY2FuaSIsIkJhY2NldHRpIiwiQmFjY2kiLCJCYWNoZXJpbmkiLCJCYWRpaSIsIkJhZ2dpYW5pIiwiQmFnbGlvbmkiLCJCYWduaSIsIkJhZ25vbGkiLCJCYWxkYXNzaW5pIiwiQmFsZGkiLCJCYWxkaW5pIiwiQmFsbGVyaW5pIiwiQmFsbGkiLCJCYWxsaW5pIiwiQmFsbG9uaSIsIkJhbWJpIiwiQmFuY2hpIiwiQmFuZGluZWxsaSIsIkJhbmRpbmkiLCJCYW5pIiwiQmFyYmV0dGkiLCJCYXJiaWVyaSIsIkJhcmNoaWVsbGkiLCJCYXJkYXp6aSIsIkJhcmRlbGxpIiwiQmFyZGkiLCJCYXJkdWNjaSIsIkJhcmdlbGxpbmkiLCJCYXJnaWFjY2hpIiwiQmFybmkiLCJCYXJvbmNlbGxpIiwiQmFyb25jaW5pIiwiQmFyb25lIiwiQmFyb25pIiwiQmFyb250aSIsIkJhcnRhbGVzaSIsIkJhcnRvbGV0dGkiLCJCYXJ0b2xpIiwiQmFydG9saW5pIiwiQmFydG9sb25pIiwiQmFydG9sb3p6aSIsIkJhc2FnbmkiLCJCYXNpbGUiLCJCYXNzaSIsIkJhdGFjY2hpIiwiQmF0dGFnbGlhIiwiQmF0dGFnbGluaSIsIkJhdXNpIiwiQmVjYWdsaSIsIkJlY2F0dGluaSIsIkJlY2NoaSIsIkJlY3VjY2kiLCJCZWxsYW5kaSIsIkJlbGxlc2kiLCJCZWxsaSIsIkJlbGxpbmkiLCJCZWxsdWNjaSIsIkJlbmNpbmkiLCJCZW5lZGV0dGkiLCJCZW5lbGxpIiwiQmVuaSIsIkJlbmluaSIsIkJlbnNpIiwiQmVudWNjaSIsIkJlbnZlbnV0aSIsIkJlcmxpbmNpb25pIiwiQmVybmFjY2hpb25pIiwiQmVybmFyZGkiLCJCZXJuYXJkaW5pIiwiQmVybmkiLCJCZXJuaW5pIiwiQmVydGVsbGkiLCJCZXJ0aSIsIkJlcnRpbmkiLCJCZXNzaSIsIkJldHRpIiwiQmV0dGluaSIsIkJpYWdpIiwiQmlhZ2luaSIsIkJpYWdpb25pIiwiQmlhZ2lvdHRpIiwiQmlhbmNhbGFuaSIsIkJpYW5jaGkiLCJCaWFuY2hpbmkiLCJCaWFuY28iLCJCaWZmb2xpIiwiQmlnYXp6aSIsIkJpZ2kiLCJCaWxpb3R0aSIsIkJpbGxpIiwiQmluYXp6aSIsIkJpbmRpIiwiQmluaSIsIkJpb25kaSIsIkJpenphcnJpIiwiQm9jY2kiLCJCb2dhbmkiLCJCb2xvZ25lc2kiLCJCb25haXV0aSIsIkJvbmFubmkiLCJCb25jaWFuaSIsIkJvbmNpbmVsbGkiLCJCb25kaSIsIkJvbmVjaGkiLCJCb25naW5pIiwiQm9uaSIsIkJvbmluaSIsIkJvcmNoaSIsIkJvcmV0dGkiLCJCb3JnaGkiLCJCb3JnaGluaSIsIkJvcmdpb2xpIiwiQm9ycmkiLCJCb3JzZWxsaSIsIkJvc2NoaSIsIkJvdHRhaSIsIkJyYWNjaSIsIkJyYWNjaW5pIiwiQnJhbmRpIiwiQnJhc2NoaSIsIkJyYXZpIiwiQnJhenppbmkiLCJCcmVzY2hpIiwiQnJpbGxpIiwiQnJpenppIiwiQnJvZ2VsbGkiLCJCcm9naSIsIkJyb2dpb25pIiwiQnJ1bmVsbGkiLCJCcnVuZXR0aSIsIkJydW5pIiwiQnJ1bm8iLCJCcnVub3JpIiwiQnJ1c2NoaSIsIkJ1Y2NpIiwiQnVjY2lhcmVsbGkiLCJCdWNjaW9uaSIsIkJ1Y2VsbGkiLCJCdWxsaSIsIkJ1cmJlcmkiLCJCdXJjaGkiLCJCdXJnYXNzaSIsIkJ1cnJvbmkiLCJCdXNzb3R0aSIsIkJ1dGkiLCJDYWNpb2xsaSIsIkNhaWFuaSIsIkNhbGFicmVzZSIsIkNhbGFtYWkiLCJDYWxhbWFuZHJlaSIsIkNhbGRpbmkiLCJDYWxvJyIsIkNhbG9uYWNpIiwiQ2Fsb3NpIiwiQ2FsdmVsbGkiLCJDYW1iaSIsIkNhbWljaW90dG9saSIsIkNhbW1lbGxpIiwiQ2FtbWlsbGkiLCJDYW1wb2xtaSIsIkNhbnRpbmkiLCJDYXBhbm5pIiwiQ2FwZWNjaGkiLCJDYXBvbmkiLCJDYXBwZWxsZXR0aSIsIkNhcHBlbGxpIiwiQ2FwcGVsbGluaSIsIkNhcHB1Z2kiLCJDYXByZXR0aSIsIkNhcHV0byIsIkNhcmJvbmUiLCJDYXJib25pIiwiQ2FyZGluaSIsIkNhcmxlc2kiLCJDYXJsZXR0aSIsIkNhcmxpIiwiQ2Fyb3RpIiwiQ2Fyb3R0aSIsIkNhcnJhaSIsIkNhcnJhcmVzaSIsIkNhcnRhIiwiQ2FydXNvIiwiQ2FzYWxpbmkiLCJDYXNhdGkiLCJDYXNlbGxpIiwiQ2FzaW5pIiwiQ2FzdGFnbm9saSIsIkNhc3RlbGxhbmkiLCJDYXN0ZWxsaSIsIkNhc3RlbGx1Y2NpIiwiQ2F0YWxhbm8iLCJDYXRhcnppIiwiQ2F0ZWxhbmkiLCJDYXZhY2lvY2NoaSIsIkNhdmFsbGFybyIsIkNhdmFsbGluaSIsIkNhdmljY2hpIiwiQ2F2aW5pIiwiQ2VjY2FyZWxsaSIsIkNlY2NhdGVsbGkiLCJDZWNjaGVyZWxsaSIsIkNlY2NoZXJpbmkiLCJDZWNjaGkiLCJDZWNjaGluaSIsIkNlY2NvbmkiLCJDZWkiLCJDZWxsYWkiLCJDZWxsaSIsIkNlbGxpbmkiLCJDZW5jZXR0aSIsIkNlbmkiLCJDZW5uaSIsIkNlcmJhaSIsIkNlc2FyaSIsIkNlc2VyaSIsIkNoZWNjYWNjaSIsIkNoZWNjaGkiLCJDaGVjY3VjY2kiLCJDaGVsaSIsIkNoZWxsaW5pIiwiQ2hlbiIsIkNoZW5nIiwiQ2hlcmljaSIsIkNoZXJ1YmluaSIsIkNoaWFyYW1vbnRpIiwiQ2hpYXJhbnRpbmkiLCJDaGlhcmVsbGkiLCJDaGlhcmkiLCJDaGlhcmluaSIsIkNoaWFydWdpIiwiQ2hpYXZhY2NpIiwiQ2hpZXNpIiwiQ2hpbWVudGkiLCJDaGluaSIsIkNoaXJpY2kiLCJDaGl0aSIsIkNpYWJhdHRpIiwiQ2lhbXBpIiwiQ2lhbmNoaSIsIkNpYW5mYW5lbGxpIiwiQ2lhbmZlcm9uaSIsIkNpYW5pIiwiQ2lhcGV0dGkiLCJDaWFwcGkiLCJDaWFyZGkiLCJDaWF0dGkiLCJDaWNhbGkiLCJDaWNjb25lIiwiQ2luZWxsaSIsIkNpbmkiLCJDaW9iYW51IiwiQ2lvbGxpIiwiQ2lvbmkiLCJDaXByaWFuaSIsIkNpcmlsbG8iLCJDaXJyaSIsIkNpdWNjaGkiLCJDaXVmZmkiLCJDaXVsbGkiLCJDaXVsbGluaSIsIkNsZW1lbnRlIiwiQ29jY2hpIiwiQ29nbm9tZSIsIkNvbGkiLCJDb2xsaW5pIiwiQ29sb21ibyIsIkNvbHppIiwiQ29tcGFyaW5pIiwiQ29uZm9ydGkiLCJDb25zaWdsaSIsIkNvbnRlIiwiQ29udGkiLCJDb250aW5pIiwiQ29wcGluaSIsIkNvcHBvbGEiLCJDb3JzaSIsIkNvcnNpbmkiLCJDb3J0aSIsIkNvcnRpbmkiLCJDb3NpIiwiQ29zdGEiLCJDb3N0YW50aW5pIiwiQ29zdGFudGlubyIsIkNvenppIiwiQ3Jlc2NpIiwiQ3Jlc2Npb2xpIiwiQ3Jlc3RpIiwiQ3JpbmkiLCJDdXJyYWRpIiwiRCdBZ29zdGlubyIsIkQnQWxlc3NhbmRybyIsIkQnQW1pY28iLCJEJ0FuZ2VsbyIsIkRhZGRpIiwiRGFpbmVsbGkiLCJEYWxsYWkiLCJEYW50aSIsIkRhdml0dGkiLCJEZSBBbmdlbGlzIiwiRGUgTHVjYSIsIkRlIE1hcmNvIiwiRGUgUm9zYSIsIkRlIFNhbnRpcyIsIkRlIFNpbW9uZSIsIkRlIFZpdGEiLCJEZWdsJ0lubm9jZW50aSIsIkRlZ2xpIElubm9jZW50aSIsIkRlaSIsIkRlbCBMdW5nbyIsIkRlbCBSZSIsIkRpIE1hcmNvIiwiRGkgU3RlZmFubyIsIkRpbmkiLCJEaW9wIiwiRG9icmUiLCJEb2xmaSIsIkRvbmF0aSIsIkRvbmRvbGkiLCJEb25nIiwiRG9ubmluaSIsIkR1Y2NpIiwiRHVtaXRydSIsIkVybWluaSIsIkVzcG9zaXRvIiwiRXZhbmdlbGlzdGkiLCJGYWJicmkiLCJGYWJicmluaSIsIkZhYmJyaXp6aSIsIkZhYmJyb25pIiwiRmFiYnJ1Y2NpIiwiRmFiaWFuaSIsIkZhY2NoaW5pIiwiRmFnZ2kiLCJGYWdpb2xpIiwiRmFpbGxpIiwiRmFpbmkiLCJGYWxjaWFuaSIsIkZhbGNpbmkiLCJGYWxjb25lIiwiRmFsbGFuaSIsIkZhbG9ybmkiLCJGYWxzaW5pIiwiRmFsdWdpYW5pIiwiRmFuY2VsbGkiLCJGYW5lbGxpIiwiRmFuZXR0aSIsIkZhbmZhbmkiLCJGYW5pIiwiRmFudGFwcGllJyIsIkZhbnRlY2hpIiwiRmFudGkiLCJGYW50aW5pIiwiRmFudG9uaSIsIkZhcmluYSIsIkZhdHRvcmkiLCJGYXZpbGxpIiwiRmVkaSIsIkZlaSIsIkZlcnJhbnRlIiwiRmVycmFyYSIsIkZlcnJhcmkiLCJGZXJyYXJvIiwiRmVycmV0dGkiLCJGZXJyaSIsIkZlcnJpbmkiLCJGZXJyb25pIiwiRmlhc2NoaSIsIkZpYmJpIiwiRmllc29saSIsIkZpbGlwcGkiLCJGaWxpcHBpbmkiLCJGaW5pIiwiRmlvcmF2YW50aSIsIkZpb3JlIiwiRmlvcmVudGluaSIsIkZpb3JpbmkiLCJGaXNzaSIsIkZvY2FyZGkiLCJGb2dnaSIsIkZvbnRhbmEiLCJGb250YW5lbGxpIiwiRm9udGFuaSIsIkZvcmNvbmkiLCJGb3JtaWdsaSIsIkZvcnRlIiwiRm9ydGkiLCJGb3J0aW5pIiwiRm9zc2F0aSIsIkZvc3NpIiwiRnJhbmNhbGFuY2kiLCJGcmFuY2VzY2hpIiwiRnJhbmNlc2NoaW5pIiwiRnJhbmNoaSIsIkZyYW5jaGluaSIsIkZyYW5jaSIsIkZyYW5jaW5pIiwiRnJhbmNpb25pIiwiRnJhbmNvIiwiRnJhc3NpbmV0aSIsIkZyYXRpIiwiRnJhdGluaSIsIkZyaWxsaSIsIkZyaXp6aSIsIkZyb3NhbGkiLCJGcm9zaW5pIiwiRnJ1bGxpbmkiLCJGdXNjbyIsIkZ1c2kiLCJHYWJicmllbGxpIiwiR2FiZWxsaW5pIiwiR2FnbGlhcmRpIiwiR2FsYW50aSIsIkdhbGFyZGkiLCJHYWxlb3R0aSIsIkdhbGxldHRpIiwiR2FsbGkiLCJHYWxsbyIsIkdhbGxvcmkiLCJHYW1iYWNjaWFuaSIsIkdhcmdhbmkiLCJHYXJvZmFsbyIsIkdhcnVnbGllcmkiLCJHYXNoaSIsIkdhc3BlcmluaSIsIkdhdHRpIiwiR2VsbGkiLCJHZW5zaW5pIiwiR2VudGlsZSIsIkdlbnRpbGkiLCJHZXJpIiwiR2VyaW5pIiwiR2hlcmkiLCJHaGluaSIsIkdpYWNoZXR0aSIsIkdpYWNoaSIsIkdpYWNvbWVsbGkiLCJHaWFuYXNzaSIsIkdpYW5pIiwiR2lhbm5lbGxpIiwiR2lhbm5ldHRpIiwiR2lhbm5pIiwiR2lhbm5pbmkiLCJHaWFubm9uaSIsIkdpYW5ub3R0aSIsIkdpYW5ub3p6aSIsIkdpZ2xpIiwiR2lvcmRhbm8iLCJHaW9yZ2V0dGkiLCJHaW9yZ2kiLCJHaW92YWNjaGluaSIsIkdpb3Zhbm5lbGxpIiwiR2lvdmFubmV0dGkiLCJHaW92YW5uaW5pIiwiR2lvdmFubm9uaSIsIkdpdWxpYW5pIiwiR2l1bnRpIiwiR2l1bnRpbmkiLCJHaXVzdGkiLCJHb25uZWxsaSIsIkdvcmV0dGkiLCJHb3JpIiwiR3JhZGkiLCJHcmFtaWduaSIsIkdyYXNzaSIsIkdyYXNzbyIsIkdyYXppYW5pIiwiR3JhenppbmkiLCJHcmVjbyIsIkdyaWZvbmkiLCJHcmlsbG8iLCJHcmltYWxkaSIsIkdyb3NzaSIsIkd1YWx0aWVyaSIsIkd1YXJkdWNjaSIsIkd1YXJpbm8iLCJHdWFybmllcmkiLCJHdWFzdGkiLCJHdWVycmEiLCJHdWVycmkiLCJHdWVycmluaSIsIkd1aWRpIiwiR3VpZG90dGkiLCJIZSIsIkhveGhhIiwiSHUiLCJIdWFuZyIsIklhbmRlbGxpIiwiSWduZXN0aSIsIklubm9jZW50aSIsIkppbiIsIkxhIFJvc2EiLCJMYWkiLCJMYW5kaSIsIkxhbmRpbmkiLCJMYW5pbmkiLCJMYXBpIiwiTGFwaW5pIiwiTGFyaSIsIkxhc2NpYWxmYXJpIiwiTGFzdHJ1Y2NpIiwiTGF0aW5pIiwiTGF6emVyaSIsIkxhenplcmluaSIsIkxlbGxpIiwiTGVuemkiLCJMZW9uYXJkaSIsIkxlb25jaW5pIiwiTGVvbmUiLCJMZW9uaSIsIkxlcHJpIiwiTGkiLCJMaWFvIiwiTGluIiwiTGluYXJpIiwiTGlwcGkiLCJMaXNpIiwiTGl2aSIsIkxvbWJhcmRpIiwiTG9tYmFyZGluaSIsIkxvbWJhcmRvIiwiTG9uZ28iLCJMb3BleiIsIkxvcmVuemkiLCJMb3JlbnppbmkiLCJMb3JpbmkiLCJMb3R0aSIsIkx1IiwiTHVjY2hlc2kiLCJMdWNoZXJpbmkiLCJMdW5naGkiLCJMdXBpIiwiTWFkaWFpIiwiTWFlc3RyaW5pIiwiTWFmZmVpIiwiTWFnZ2kiLCJNYWdnaW5pIiwiTWFnaGVyaW5pIiwiTWFnaW5pIiwiTWFnbmFuaSIsIk1hZ25lbGxpIiwiTWFnbmkiLCJNYWdub2xmaSIsIk1hZ3JpbmkiLCJNYWxhdm9sdGkiLCJNYWxldm9sdGkiLCJNYW5jYSIsIk1hbmNpbmkiLCJNYW5ldHRpIiwiTWFuZnJlZGkiLCJNYW5nYW5pIiwiTWFubmVsbGkiLCJNYW5uaSIsIk1hbm5pbmkiLCJNYW5udWNjaSIsIk1hbnVlbGxpIiwiTWFuemluaSIsIk1hcmNlbGxpIiwiTWFyY2hlc2UiLCJNYXJjaGV0dGkiLCJNYXJjaGkiLCJNYXJjaGlhbmkiLCJNYXJjaGlvbm5pIiwiTWFyY29uaSIsIk1hcmN1Y2NpIiwiTWFyZ2hlcmkiLCJNYXJpIiwiTWFyaWFuaSIsIk1hcmlsbGkiLCJNYXJpbmFpIiwiTWFyaW5hcmkiLCJNYXJpbmVsbGkiLCJNYXJpbmkiLCJNYXJpbm8iLCJNYXJpb3R0aSIsIk1hcnNpbGkiLCJNYXJ0ZWxsaSIsIk1hcnRpbmVsbGkiLCJNYXJ0aW5pIiwiTWFydGlubyIsIk1hcnppIiwiTWFzaSIsIk1hc2luaSIsIk1hc29uaSIsIk1hc3NhaSIsIk1hdGVyYXNzaSIsIk1hdHRlaSIsIk1hdHRlaW5pIiwiTWF0dGV1Y2NpIiwiTWF0dGV1enppIiwiTWF0dGlvbGkiLCJNYXR0b2xpbmkiLCJNYXR1Y2NpIiwiTWF1cm8iLCJNYXp6YW50aSIsIk1henplaSIsIk1henpldHRpIiwiTWF6emkiLCJNYXp6aW5pIiwiTWF6em9jY2hpIiwiTWF6em9saSIsIk1henpvbmkiLCJNYXp6dW9saSIsIk1lYWNjaSIsIk1lY29jY2kiLCJNZWluaSIsIk1lbGFuaSIsIk1lbGUiLCJNZWxpIiwiTWVuZ29uaSIsIk1lbmljaGV0dGkiLCJNZW9uaSIsIk1lcmxpbmkiLCJNZXNzZXJpIiwiTWVzc2luYSIsIk1ldWNjaSIsIk1pY2NpbmVzaSIsIk1pY2VsaSIsIk1pY2hlbGkiLCJNaWNoZWxpbmkiLCJNaWNoZWxvenppIiwiTWlnbGlvcmkiLCJNaWdsaW9yaW5pIiwiTWlsYW5pIiwiTWluaWF0aSIsIk1pc3VyaSIsIk1vbmFjbyIsIk1vbnRhZ25hbmkiLCJNb250YWduaSIsIk1vbnRhbmFyaSIsIk1vbnRlbGF0aWNpIiwiTW9udGkiLCJNb250aWdpYW5pIiwiTW9udGluaSIsIk1vcmFuZGkiLCJNb3JhbmRpbmkiLCJNb3JlbGxpIiwiTW9yZXR0aSIsIk1vcmdhbnRpIiwiTW9yaSIsIk1vcmluaSIsIk1vcm9uaSIsIk1vcm96emkiLCJNdWduYWkiLCJNdWduYWluaSIsIk11c3RhZmEiLCJOYWxkaSIsIk5hbGRpbmkiLCJOYW5uZWxsaSIsIk5hbm5pIiwiTmFubmluaSIsIk5hbm51Y2NpIiwiTmFyZGkiLCJOYXJkaW5pIiwiTmFyZG9uaSIsIk5hdGFsaSIsIk5kaWF5ZSIsIk5lbmNldHRpIiwiTmVuY2luaSIsIk5lbmNpb25pIiwiTmVyaSIsIk5lc2kiLCJOZXN0aSIsIk5pY2NvbGFpIiwiTmljY29saSIsIk5pY2NvbGluaSIsIk5pZ2kiLCJOaXN0cmkiLCJOb2NlbnRpbmkiLCJOb2ZlcmluaSIsIk5vdmVsbGkiLCJOdWNjaSIsIk51dGkiLCJOdXRpbmkiLCJPbGl2YSIsIk9saXZpZXJpIiwiT2xtaSIsIk9ybGFuZGkiLCJPcmxhbmRpbmkiLCJPcmxhbmRvIiwiT3JzaW5pIiwiT3J0b2xhbmkiLCJPdHRhbmVsbGkiLCJQYWNjaWFuaSIsIlBhY2UiLCJQYWNpIiwiUGFjaW5pIiwiUGFnYW5pIiwiUGFnYW5vIiwiUGFnZ2V0dGkiLCJQYWdsaWFpIiwiUGFnbmkiLCJQYWduaW5pIiwiUGFsYWRpbmkiLCJQYWxhZ2kiLCJQYWxjaGV0dGkiLCJQYWxsb25pIiwiUGFsbWllcmkiLCJQYWx1bWJvIiwiUGFtcGFsb25pIiwiUGFuY2FuaSIsIlBhbmRvbGZpIiwiUGFuZG9sZmluaSIsIlBhbmVyYWkiLCJQYW5pY2hpIiwiUGFvbGV0dGkiLCJQYW9saSIsIlBhb2xpbmkiLCJQYXBpIiwiUGFwaW5pIiwiUGFwdWNjaSIsIlBhcmVudGkiLCJQYXJpZ2kiLCJQYXJpc2kiLCJQYXJyaSIsIlBhcnJpbmkiLCJQYXNxdWluaSIsIlBhc3NlcmkiLCJQZWNjaGlvbGkiLCJQZWNvcmluaSIsIlBlbGxlZ3JpbmkiLCJQZXBpIiwiUGVyaW5pIiwiUGVycm9uZSIsIlBlcnV6emkiLCJQZXNjaSIsIlBlc3RlbGxpIiwiUGV0cmkiLCJQZXRyaW5pIiwiUGV0cnVjY2kiLCJQZXR0aW5pIiwiUGV6emF0aSIsIlBlenphdGluaSIsIlBpYW5pIiwiUGlhenphIiwiUGlhenplc2kiLCJQaWF6emluaSIsIlBpY2NhcmRpIiwiUGljY2hpIiwiUGljY2luaSIsIlBpY2Npb2xpIiwiUGllcmFjY2luaSIsIlBpZXJhY2Npb25pIiwiUGllcmFsbGkiLCJQaWVyYXR0aW5pIiwiUGllcmkiLCJQaWVyaW5pIiwiUGllcm9uaSIsIlBpZXRyaW5pIiwiUGluaSIsIlBpbm5hIiwiUGludG8iLCJQaW56YW5pIiwiUGluemF1dGkiLCJQaXJhcyIsIlBpc2FuaSIsIlBpc3RvbGVzaSIsIlBvZ2dlc2kiLCJQb2dnaSIsIlBvZ2dpYWxpIiwiUG9nZ2lvbGluaSIsIlBvbGkiLCJQb2xsYXN0cmkiLCJQb3JjaWFuaSIsIlBvenppIiwiUHJhdGVsbGVzaSIsIlByYXRlc2kiLCJQcm9zcGVyaSIsIlBydW5ldGkiLCJQdWNjaSIsIlB1Y2NpbmkiLCJQdWNjaW9uaSIsIlB1Z2kiLCJQdWdsaWVzZSIsIlB1bGl0aSIsIlF1ZXJjaSIsIlF1ZXJjaW9saSIsIlJhZGRpIiwiUmFkdSIsIlJhZmZhZWxsaSIsIlJhZ2F6emluaSIsIlJhbmZhZ25pIiwiUmFuaWVyaSIsIlJhc3RyZWxsaSIsIlJhdWdlaSIsIlJhdmVnZ2kiLCJSZW5haSIsIlJlbnppIiwiUmV0dG9yaSIsIlJpY2NpIiwiUmljY2lhcmRpIiwiUmlkaSIsIlJpZG9sZmkiLCJSaWdhY2NpIiwiUmlnaGkiLCJSaWdoaW5pIiwiUmluYWxkaSIsIlJpc2FsaXRpIiwiUmlzdG9yaSIsIlJpenpvIiwiUm9jY2hpIiwiUm9jY2hpbmkiLCJSb2dhaSIsIlJvbWFnbm9saSIsIlJvbWFuZWxsaSIsIlJvbWFuaSIsIlJvbWFubyIsIlJvbWVpIiwiUm9tZW8iLCJSb21pdGkiLCJSb21vbGkiLCJSb21vbGluaSIsIlJvbnRpbmkiLCJSb3NhdGkiLCJSb3NlbGxpIiwiUm9zaSIsIlJvc3NldHRpIiwiUm9zc2kiLCJSb3NzaW5pIiwiUm92YWkiLCJSdWdnZXJpIiwiUnVnZ2llcm8iLCJSdXNzbyIsIlNhYmF0aW5pIiwiU2FjY2FyZGkiLCJTYWNjaGV0dGkiLCJTYWNjaGkiLCJTYWNjbyIsIlNhbGVybm8iLCJTYWxpbWJlbmkiLCJTYWx1Y2NpIiwiU2FsdmFkb3JpIiwiU2FsdmVzdHJpbmkiLCJTYWx2aSIsIlNhbHZpbmkiLCJTYW5lc2kiLCJTYW5pIiwiU2FubmEiLCJTYW50aSIsIlNhbnRpbmkiLCJTYW50b25pIiwiU2FudG9ybyIsIlNhbnR1Y2NpIiwiU2FyZGkiLCJTYXJyaSIsIlNhcnRpIiwiU2Fzc2kiLCJTYm9sY2kiLCJTY2FsaSIsIlNjYXJwZWxsaSIsIlNjYXJzZWxsaSIsIlNjb3BldGFuaSIsIlNlY2NpIiwiU2VsdmkiLCJTZW5hdG9yaSIsIlNlbmVzaSIsIlNlcmFmaW5pIiwiU2VyZW5pIiwiU2VycmEiLCJTZXN0aW5pIiwiU2d1YW5jaSIsIlNpZW5pIiwiU2lnbm9yaW5pIiwiU2lsdmVzdHJpIiwiU2ltb25jaW5pIiwiU2ltb25ldHRpIiwiU2ltb25pIiwiU2luZ2giLCJTb2RpIiwiU29sZGkiLCJTb21pZ2xpIiwiU29yYmkiLCJTb3JlbGxpIiwiU29ycmVudGlubyIsIlNvdHRpbGkiLCJTcGluYSIsIlNwaW5lbGxpIiwiU3RhY2Npb2xpIiwiU3RhZGVyaW5pIiwiU3RlZmFuZWxsaSIsIlN0ZWZhbmkiLCJTdGVmYW5pbmkiLCJTdGVsbGEiLCJTdXNpbmkiLCJUYWNjaGkiLCJUYWNjb25pIiwiVGFkZGVpIiwiVGFnbGlhZmVycmkiLCJUYW1idXJpbmkiLCJUYW5nYW5lbGxpIiwiVGFuaSIsIlRhbmluaSIsIlRhcGluYXNzaSIsIlRhcmNoaSIsIlRhcmNoaWFuaSIsIlRhcmdpb25pIiwiVGFzc2kiLCJUYXNzaW5pIiwiVGVtcGVzdGkiLCJUZXJ6YW5pIiwiVGVzaSIsIlRlc3RhIiwiVGVzdGkiLCJUaWxsaSIsIlRpbnRpIiwiVGlyaW5uYW56aSIsIlRvY2NhZm9uZGkiLCJUb2ZhbmFyaSIsIlRvZmFuaSIsIlRvZ25hY2NpbmkiLCJUb25lbGxpIiwiVG9uaW5pIiwiVG9yZWxsaSIsIlRvcnJpbmkiLCJUb3NpIiwiVG90aSIsIlRvenppIiwiVHJhbWJ1c3RpIiwiVHJhcGFuaSIsIlR1Y2NpIiwiVHVyY2hpIiwiVWdvbGluaSIsIlVsaXZpIiwiVmFsZW50ZSIsIlZhbGVudGkiLCJWYWxlbnRpbmkiLCJWYW5nZWxpc3RpIiwiVmFubmkiLCJWYW5uaW5pIiwiVmFubm9uaSIsIlZhbm5venppIiwiVmFubnVjY2hpIiwiVmFubnVjY2kiLCJWZW50dXJhIiwiVmVudHVyaSIsIlZlbnR1cmluaSIsIlZlc3RyaSIsIlZldHRvcmkiLCJWaWNoaSIsIlZpY2lhbmkiLCJWaWVyaSIsIlZpZ2lhbmkiLCJWaWdub2xpIiwiVmlnbm9saW5pIiwiVmlnbm96emkiLCJWaWxsYW5pIiwiVmluY2kiLCJWaXNhbmkiLCJWaXRhbGUiLCJWaXRhbGkiLCJWaXRpIiwiVml2aWFuaSIsIlZpdm9saSIsIlZvbHBlIiwiVm9scGkiLCJXYW5nIiwiV3UiLCJYdSIsIllhbmciLCJZZSIsIlphZ2xpIiwiWmFuaSIsIlphbmllcmkiLCJaYW5vYmluaSIsIlplY2NoaSIsIlpldHRpIiwiWmhhbmciLCJaaGVuZyIsIlpob3UiLCJaaHUiLCJaaW5nb25pIiwiWmluaSIsIlpvcHBpIl0sbmw6WyJBbGJlcnMiLCJBbGJsYXMiLCJBcHBlbG1hbiIsIkJhYXJzIiwiQmFhcyIsIkJha2tlciIsIkJsYW5rIiwiQmxlZWtlciIsIkJsb2siLCJCbG9tIiwiQm9lciIsIkJvZXJzIiwiQm9sZGV3aWpuIiwiQm9vbiIsIkJvb3QiLCJCb3MiLCJCb3NjaCIsIkJvc21hIiwiQm9zbWFuIiwiQm91bWEiLCJCb3VtYW4iLCJCb3V3bWFuIiwiQnJhbmRzIiwiQnJvdXdlciIsIkJ1cmdlciIsIkJ1aWpzIiwiQnVpdGVuaHVpcyIsIkNlZGVyIiwiQ29oZW4iLCJEZWtrZXIiLCJEZWtrZXJzIiwiRGlqa21hbiIsIkRpamtzdHJhIiwiRHJpZXNzZW4iLCJEcm9zdCIsIkVuZ2VsIiwiRXZlcnMiLCJGYWJlciIsIkZyYW5rZSIsIkdlcnJpdHNlbiIsIkdvZWRoYXJ0IiwiR29vc3NlbnMiLCJHcm9lbiIsIkdyb2VuZW5iZXJnIiwiR3Jvb3QiLCJIYWFuIiwiSGFydCIsIkhlZW1za2VyayIsIkhlbmRyaWtzIiwiSGVybWFucyIsIkhvZWtzdHJhIiwiSG9mbWFuIiwiSG9wbWFuIiwiSHVpc21hbiIsIkphY29icyIsIkphbnNlbiIsIkphbnNzZW4iLCJKb25rZXIiLCJKYXNwZXJzIiwiS2VpanplciIsIktsYWFzc2VuIiwiS2xlaW4iLCJLb2VrIiwiS29lbmRlcnMiLCJLb2siLCJLb29sIiwiS29vcG1hbiIsIktvb3BtYW5zIiwiS29uaW5nIiwiS29zdGVyIiwiS3JhbWVyIiwiS3Jvb24iLCJLdWlqcGVycyIsIkt1aXBlciIsIkt1aXBlcnMiLCJLdXJ0IiwiS29zdGVyIiwiS3dha21hbiIsIkxvcyIsIkx1YmJlcnMiLCJNYWFzIiwiTWFya3VzIiwiTWFydGVucyIsIk1laWplciIsIk1vbCIsIk1vbGVuYWFyIiwiTXVsZGVyIiwiTmlldXdlbmh1aXMiLCJQZWV0ZXJzIiwiUGV0ZXJzIiwiUGVuZ2VsIiwiUGlldGVycyIsIlBvb2wiLCJQb3N0IiwiUG9zdG1hIiwiUHJpbnMiLCJQcm9uayIsIlJlaWpuZGVycyIsIlJpZXR2ZWxkIiwiUm9lc3QiLCJSb29zIiwiU2FuZGVycyIsIlNjaGFhcCIsIlNjaGVmZmVyIiwiU2NoZW5rIiwiU2NoaWxkZXIiLCJTY2hpcHBlciIsIlNjaG1pZHQiLCJTY2hvbHRlbiIsIlNjaG91dGVuIiwiU2NodXQiLCJTY2h1dHRlIiwiU2NodXVybWFuIiwiU2ltb25zIiwiU21lZXRzIiwiU21pdCIsIlNtaXRzIiwiU25lbCIsIlN3aW5rZWxzIiwiVGFzIiwiVGVycHN0cmEiLCJUaW1tZXJtYW5zIiwiVG9sIiwiVHJvbXAiLCJUcm9vc3QiLCJWYWxrIiwiVmVlbnN0cmEiLCJWZWxka2FtcCIsIlZlcmJlZWsiLCJWZXJoZXVsIiwiVmVyaG9ldmVuIiwiVmVybWVlciIsIlZlcm1ldWxlbiIsIlZlcndlaWoiLCJWaW5rIiwiVmlzc2VyIiwiVm9vcm4iLCJWb3MiLCJXYWdlbmFhciIsIldpZXJzZW1hIiwiV2lsbGVtcyIsIldpbGxlbXNlbiIsIldpdHRldmVlbiIsIldvbGZmIiwiV29sdGVycyIsIlppamxzdHJhIiwiWndhcnQiLCJkZSBCZWVyIiwiZGUgQm9lciIsImRlIEJydWlqbiIsImRlIEJydWluIiwiZGUgR3JhYWYiLCJkZSBHcm9vdCIsImRlIEhhYW4iLCJkZSBIYWFzIiwiZGUgSmFnZXIiLCJkZSBKb25nIiwiZGUgSm9uZ2UiLCJkZSBLb25pbmciLCJkZSBMYW5nZSIsImRlIExlZXV3IiwiZGUgUmlkZGVyIiwiZGUgUm9vaWoiLCJkZSBSdWl0ZXIiLCJkZSBWb3MiLCJkZSBWcmllcyIsImRlIFdhYWwiLCJkZSBXaXQiLCJkZSBad2FydCIsInZhbiBCZWVrIiwidmFuIEJvdmVuIiwidmFuIERhbSIsInZhbiBEaWprIiwidmFuIERvbmdlbiIsInZhbiBEb29ybiIsInZhbiBFZ21vbmQiLCJ2YW4gRWlqayIsInZhbiBFcyIsInZhbiBHZWxkZXIiLCJ2YW4gR2VsZGVyZW4iLCJ2YW4gSG91dGVuIiwidmFuIEh1bHN0IiwidmFuIEtlbXBlbiIsInZhbiBLZXN0ZXJlbiIsInZhbiBMZWV1d2VuIiwidmFuIExvb24iLCJ2YW4gTWlsbCIsInZhbiBOb29yZCIsInZhbiBPbW1lbiIsInZhbiBPbW1lcmVuIiwidmFuIE9vc3RlbiIsInZhbiBPb3N0dmVlbiIsInZhbiBSaWpuIiwidmFuIFNjaGFpayIsInZhbiBWZWVuIiwidmFuIFZsaWV0IiwidmFuIFdpamsiLCJ2YW4gV2lqbmdhYXJkZW4iLCJ2YW4gZGVuIFBvZWwiLCJ2YW4gZGUgUG9sIiwidmFuIGRlbiBQbG9lZyIsInZhbiBkZSBWZW4iLCJ2YW4gZGVuIEJlcmciLCJ2YW4gZGVuIEJvc2NoIiwidmFuIGRlbiBCcmluayIsInZhbiBkZW4gQnJvZWsiLCJ2YW4gZGVuIEhldXZlbCIsInZhbiBkZXIgSGVpamRlbiIsInZhbiBkZXIgSG9yc3QiLCJ2YW4gZGVyIEh1bHN0IiwidmFuIGRlciBLcm9vbiIsInZhbiBkZXIgTGFhbiIsInZhbiBkZXIgTGluZGVuIiwidmFuIGRlciBNZWVyIiwidmFuIGRlciBNZWlqIiwidmFuIGRlciBNZXVsZW4iLCJ2YW4gZGVyIE1vbGVuIiwidmFuIGRlciBTbHVpcyIsInZhbiBkZXIgU3BlayIsInZhbiBkZXIgVmVlbiIsInZhbiBkZXIgVmVsZGUiLCJ2YW4gZGVyIFZlbGRlbiIsInZhbiBkZXIgVmxpZXQiLCJ2YW4gZGVyIFdhbCJdfSxjb3VudHJpZXM6W3tuYW1lOiJBZmdoYW5pc3RhbiIsYWJicmV2aWF0aW9uOiJBRiJ9LHtuYW1lOiLDhWxhbmQgSXNsYW5kcyIsYWJicmV2aWF0aW9uOiJBWCJ9LHtuYW1lOiJBbGJhbmlhIixhYmJyZXZpYXRpb246IkFMIn0se25hbWU6IkFsZ2VyaWEiLGFiYnJldmlhdGlvbjoiRFoifSx7bmFtZToiQW1lcmljYW4gU2Ftb2EiLGFiYnJldmlhdGlvbjoiQVMifSx7bmFtZToiQW5kb3JyYSIsYWJicmV2aWF0aW9uOiJBRCJ9LHtuYW1lOiJBbmdvbGEiLGFiYnJldmlhdGlvbjoiQU8ifSx7bmFtZToiQW5ndWlsbGEiLGFiYnJldmlhdGlvbjoiQUkifSx7bmFtZToiQW50YXJjdGljYSIsYWJicmV2aWF0aW9uOiJBUSJ9LHtuYW1lOiJBbnRpZ3VhICYgQmFyYnVkYSIsYWJicmV2aWF0aW9uOiJBRyJ9LHtuYW1lOiJBcmdlbnRpbmEiLGFiYnJldmlhdGlvbjoiQVIifSx7bmFtZToiQXJtZW5pYSIsYWJicmV2aWF0aW9uOiJBTSJ9LHtuYW1lOiJBcnViYSIsYWJicmV2aWF0aW9uOiJBVyJ9LHtuYW1lOiJBc2NlbnNpb24gSXNsYW5kIixhYmJyZXZpYXRpb246IkFDIn0se25hbWU6IkF1c3RyYWxpYSIsYWJicmV2aWF0aW9uOiJBVSJ9LHtuYW1lOiJBdXN0cmlhIixhYmJyZXZpYXRpb246IkFUIn0se25hbWU6IkF6ZXJiYWlqYW4iLGFiYnJldmlhdGlvbjoiQVoifSx7bmFtZToiQmFoYW1hcyIsYWJicmV2aWF0aW9uOiJCUyJ9LHtuYW1lOiJCYWhyYWluIixhYmJyZXZpYXRpb246IkJIIn0se25hbWU6IkJhbmdsYWRlc2giLGFiYnJldmlhdGlvbjoiQkQifSx7bmFtZToiQmFyYmFkb3MiLGFiYnJldmlhdGlvbjoiQkIifSx7bmFtZToiQmVsYXJ1cyIsYWJicmV2aWF0aW9uOiJCWSJ9LHtuYW1lOiJCZWxnaXVtIixhYmJyZXZpYXRpb246IkJFIn0se25hbWU6IkJlbGl6ZSIsYWJicmV2aWF0aW9uOiJCWiJ9LHtuYW1lOiJCZW5pbiIsYWJicmV2aWF0aW9uOiJCSiJ9LHtuYW1lOiJCZXJtdWRhIixhYmJyZXZpYXRpb246IkJNIn0se25hbWU6IkJodXRhbiIsYWJicmV2aWF0aW9uOiJCVCJ9LHtuYW1lOiJCb2xpdmlhIixhYmJyZXZpYXRpb246IkJPIn0se25hbWU6IkJvc25pYSAmIEhlcnplZ292aW5hIixhYmJyZXZpYXRpb246IkJBIn0se25hbWU6IkJvdHN3YW5hIixhYmJyZXZpYXRpb246IkJXIn0se25hbWU6IkJyYXppbCIsYWJicmV2aWF0aW9uOiJCUiJ9LHtuYW1lOiJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnkiLGFiYnJldmlhdGlvbjoiSU8ifSx7bmFtZToiQnJpdGlzaCBWaXJnaW4gSXNsYW5kcyIsYWJicmV2aWF0aW9uOiJWRyJ9LHtuYW1lOiJCcnVuZWkiLGFiYnJldmlhdGlvbjoiQk4ifSx7bmFtZToiQnVsZ2FyaWEiLGFiYnJldmlhdGlvbjoiQkcifSx7bmFtZToiQnVya2luYSBGYXNvIixhYmJyZXZpYXRpb246IkJGIn0se25hbWU6IkJ1cnVuZGkiLGFiYnJldmlhdGlvbjoiQkkifSx7bmFtZToiQ2FtYm9kaWEiLGFiYnJldmlhdGlvbjoiS0gifSx7bmFtZToiQ2FtZXJvb24iLGFiYnJldmlhdGlvbjoiQ00ifSx7bmFtZToiQ2FuYWRhIixhYmJyZXZpYXRpb246IkNBIn0se25hbWU6IkNhbmFyeSBJc2xhbmRzIixhYmJyZXZpYXRpb246IklDIn0se25hbWU6IkNhcGUgVmVyZGUiLGFiYnJldmlhdGlvbjoiQ1YifSx7bmFtZToiQ2FyaWJiZWFuIE5ldGhlcmxhbmRzIixhYmJyZXZpYXRpb246IkJRIn0se25hbWU6IkNheW1hbiBJc2xhbmRzIixhYmJyZXZpYXRpb246IktZIn0se25hbWU6IkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYyIsYWJicmV2aWF0aW9uOiJDRiJ9LHtuYW1lOiJDZXV0YSAmIE1lbGlsbGEiLGFiYnJldmlhdGlvbjoiRUEifSx7bmFtZToiQ2hhZCIsYWJicmV2aWF0aW9uOiJURCJ9LHtuYW1lOiJDaGlsZSIsYWJicmV2aWF0aW9uOiJDTCJ9LHtuYW1lOiJDaGluYSIsYWJicmV2aWF0aW9uOiJDTiJ9LHtuYW1lOiJDaHJpc3RtYXMgSXNsYW5kIixhYmJyZXZpYXRpb246IkNYIn0se25hbWU6IkNvY29zIChLZWVsaW5nKSBJc2xhbmRzIixhYmJyZXZpYXRpb246IkNDIn0se25hbWU6IkNvbG9tYmlhIixhYmJyZXZpYXRpb246IkNPIn0se25hbWU6IkNvbW9yb3MiLGFiYnJldmlhdGlvbjoiS00ifSx7bmFtZToiQ29uZ28gLSBCcmF6emF2aWxsZSIsYWJicmV2aWF0aW9uOiJDRyJ9LHtuYW1lOiJDb25nbyAtIEtpbnNoYXNhIixhYmJyZXZpYXRpb246IkNEIn0se25hbWU6IkNvb2sgSXNsYW5kcyIsYWJicmV2aWF0aW9uOiJDSyJ9LHtuYW1lOiJDb3N0YSBSaWNhIixhYmJyZXZpYXRpb246IkNSIn0se25hbWU6IkPDtHRlIGQnSXZvaXJlIixhYmJyZXZpYXRpb246IkNJIn0se25hbWU6IkNyb2F0aWEiLGFiYnJldmlhdGlvbjoiSFIifSx7bmFtZToiQ3ViYSIsYWJicmV2aWF0aW9uOiJDVSJ9LHtuYW1lOiJDdXJhw6dhbyIsYWJicmV2aWF0aW9uOiJDVyJ9LHtuYW1lOiJDeXBydXMiLGFiYnJldmlhdGlvbjoiQ1kifSx7bmFtZToiQ3plY2ggUmVwdWJsaWMiLGFiYnJldmlhdGlvbjoiQ1oifSx7bmFtZToiRGVubWFyayIsYWJicmV2aWF0aW9uOiJESyJ9LHtuYW1lOiJEaWVnbyBHYXJjaWEiLGFiYnJldmlhdGlvbjoiREcifSx7bmFtZToiRGppYm91dGkiLGFiYnJldmlhdGlvbjoiREoifSx7bmFtZToiRG9taW5pY2EiLGFiYnJldmlhdGlvbjoiRE0ifSx7bmFtZToiRG9taW5pY2FuIFJlcHVibGljIixhYmJyZXZpYXRpb246IkRPIn0se25hbWU6IkVjdWFkb3IiLGFiYnJldmlhdGlvbjoiRUMifSx7bmFtZToiRWd5cHQiLGFiYnJldmlhdGlvbjoiRUcifSx7bmFtZToiRWwgU2FsdmFkb3IiLGFiYnJldmlhdGlvbjoiU1YifSx7bmFtZToiRXF1YXRvcmlhbCBHdWluZWEiLGFiYnJldmlhdGlvbjoiR1EifSx7bmFtZToiRXJpdHJlYSIsYWJicmV2aWF0aW9uOiJFUiJ9LHtuYW1lOiJFc3RvbmlhIixhYmJyZXZpYXRpb246IkVFIn0se25hbWU6IkV0aGlvcGlhIixhYmJyZXZpYXRpb246IkVUIn0se25hbWU6IkZhbGtsYW5kIElzbGFuZHMiLGFiYnJldmlhdGlvbjoiRksifSx7bmFtZToiRmFyb2UgSXNsYW5kcyIsYWJicmV2aWF0aW9uOiJGTyJ9LHtuYW1lOiJGaWppIixhYmJyZXZpYXRpb246IkZKIn0se25hbWU6IkZpbmxhbmQiLGFiYnJldmlhdGlvbjoiRkkifSx7bmFtZToiRnJhbmNlIixhYmJyZXZpYXRpb246IkZSIn0se25hbWU6IkZyZW5jaCBHdWlhbmEiLGFiYnJldmlhdGlvbjoiR0YifSx7bmFtZToiRnJlbmNoIFBvbHluZXNpYSIsYWJicmV2aWF0aW9uOiJQRiJ9LHtuYW1lOiJGcmVuY2ggU291dGhlcm4gVGVycml0b3JpZXMiLGFiYnJldmlhdGlvbjoiVEYifSx7bmFtZToiR2Fib24iLGFiYnJldmlhdGlvbjoiR0EifSx7bmFtZToiR2FtYmlhIixhYmJyZXZpYXRpb246IkdNIn0se25hbWU6Ikdlb3JnaWEiLGFiYnJldmlhdGlvbjoiR0UifSx7bmFtZToiR2VybWFueSIsYWJicmV2aWF0aW9uOiJERSJ9LHtuYW1lOiJHaGFuYSIsYWJicmV2aWF0aW9uOiJHSCJ9LHtuYW1lOiJHaWJyYWx0YXIiLGFiYnJldmlhdGlvbjoiR0kifSx7bmFtZToiR3JlZWNlIixhYmJyZXZpYXRpb246IkdSIn0se25hbWU6IkdyZWVubGFuZCIsYWJicmV2aWF0aW9uOiJHTCJ9LHtuYW1lOiJHcmVuYWRhIixhYmJyZXZpYXRpb246IkdEIn0se25hbWU6Ikd1YWRlbG91cGUiLGFiYnJldmlhdGlvbjoiR1AifSx7bmFtZToiR3VhbSIsYWJicmV2aWF0aW9uOiJHVSJ9LHtuYW1lOiJHdWF0ZW1hbGEiLGFiYnJldmlhdGlvbjoiR1QifSx7bmFtZToiR3Vlcm5zZXkiLGFiYnJldmlhdGlvbjoiR0cifSx7bmFtZToiR3VpbmVhIixhYmJyZXZpYXRpb246IkdOIn0se25hbWU6Ikd1aW5lYS1CaXNzYXUiLGFiYnJldmlhdGlvbjoiR1cifSx7bmFtZToiR3V5YW5hIixhYmJyZXZpYXRpb246IkdZIn0se25hbWU6IkhhaXRpIixhYmJyZXZpYXRpb246IkhUIn0se25hbWU6IkhvbmR1cmFzIixhYmJyZXZpYXRpb246IkhOIn0se25hbWU6IkhvbmcgS29uZyBTQVIgQ2hpbmEiLGFiYnJldmlhdGlvbjoiSEsifSx7bmFtZToiSHVuZ2FyeSIsYWJicmV2aWF0aW9uOiJIVSJ9LHtuYW1lOiJJY2VsYW5kIixhYmJyZXZpYXRpb246IklTIn0se25hbWU6IkluZGlhIixhYmJyZXZpYXRpb246IklOIn0se25hbWU6IkluZG9uZXNpYSIsYWJicmV2aWF0aW9uOiJJRCJ9LHtuYW1lOiJJcmFuIixhYmJyZXZpYXRpb246IklSIn0se25hbWU6IklyYXEiLGFiYnJldmlhdGlvbjoiSVEifSx7bmFtZToiSXJlbGFuZCIsYWJicmV2aWF0aW9uOiJJRSJ9LHtuYW1lOiJJc2xlIG9mIE1hbiIsYWJicmV2aWF0aW9uOiJJTSJ9LHtuYW1lOiJJc3JhZWwiLGFiYnJldmlhdGlvbjoiSUwifSx7bmFtZToiSXRhbHkiLGFiYnJldmlhdGlvbjoiSVQifSx7bmFtZToiSmFtYWljYSIsYWJicmV2aWF0aW9uOiJKTSJ9LHtuYW1lOiJKYXBhbiIsYWJicmV2aWF0aW9uOiJKUCJ9LHtuYW1lOiJKZXJzZXkiLGFiYnJldmlhdGlvbjoiSkUifSx7bmFtZToiSm9yZGFuIixhYmJyZXZpYXRpb246IkpPIn0se25hbWU6IkthemFraHN0YW4iLGFiYnJldmlhdGlvbjoiS1oifSx7bmFtZToiS2VueWEiLGFiYnJldmlhdGlvbjoiS0UifSx7bmFtZToiS2lyaWJhdGkiLGFiYnJldmlhdGlvbjoiS0kifSx7bmFtZToiS29zb3ZvIixhYmJyZXZpYXRpb246IlhLIn0se25hbWU6Ikt1d2FpdCIsYWJicmV2aWF0aW9uOiJLVyJ9LHtuYW1lOiJLeXJneXpzdGFuIixhYmJyZXZpYXRpb246IktHIn0se25hbWU6Ikxhb3MiLGFiYnJldmlhdGlvbjoiTEEifSx7bmFtZToiTGF0dmlhIixhYmJyZXZpYXRpb246IkxWIn0se25hbWU6IkxlYmFub24iLGFiYnJldmlhdGlvbjoiTEIifSx7bmFtZToiTGVzb3RobyIsYWJicmV2aWF0aW9uOiJMUyJ9LHtuYW1lOiJMaWJlcmlhIixhYmJyZXZpYXRpb246IkxSIn0se25hbWU6IkxpYnlhIixhYmJyZXZpYXRpb246IkxZIn0se25hbWU6IkxpZWNodGVuc3RlaW4iLGFiYnJldmlhdGlvbjoiTEkifSx7bmFtZToiTGl0aHVhbmlhIixhYmJyZXZpYXRpb246IkxUIn0se25hbWU6Ikx1eGVtYm91cmciLGFiYnJldmlhdGlvbjoiTFUifSx7bmFtZToiTWFjYXUgU0FSIENoaW5hIixhYmJyZXZpYXRpb246Ik1PIn0se25hbWU6Ik1hY2Vkb25pYSIsYWJicmV2aWF0aW9uOiJNSyJ9LHtuYW1lOiJNYWRhZ2FzY2FyIixhYmJyZXZpYXRpb246Ik1HIn0se25hbWU6Ik1hbGF3aSIsYWJicmV2aWF0aW9uOiJNVyJ9LHtuYW1lOiJNYWxheXNpYSIsYWJicmV2aWF0aW9uOiJNWSJ9LHtuYW1lOiJNYWxkaXZlcyIsYWJicmV2aWF0aW9uOiJNViJ9LHtuYW1lOiJNYWxpIixhYmJyZXZpYXRpb246Ik1MIn0se25hbWU6Ik1hbHRhIixhYmJyZXZpYXRpb246Ik1UIn0se25hbWU6Ik1hcnNoYWxsIElzbGFuZHMiLGFiYnJldmlhdGlvbjoiTUgifSx7bmFtZToiTWFydGluaXF1ZSIsYWJicmV2aWF0aW9uOiJNUSJ9LHtuYW1lOiJNYXVyaXRhbmlhIixhYmJyZXZpYXRpb246Ik1SIn0se25hbWU6Ik1hdXJpdGl1cyIsYWJicmV2aWF0aW9uOiJNVSJ9LHtuYW1lOiJNYXlvdHRlIixhYmJyZXZpYXRpb246IllUIn0se25hbWU6Ik1leGljbyIsYWJicmV2aWF0aW9uOiJNWCJ9LHtuYW1lOiJNaWNyb25lc2lhIixhYmJyZXZpYXRpb246IkZNIn0se25hbWU6Ik1vbGRvdmEiLGFiYnJldmlhdGlvbjoiTUQifSx7bmFtZToiTW9uYWNvIixhYmJyZXZpYXRpb246Ik1DIn0se25hbWU6Ik1vbmdvbGlhIixhYmJyZXZpYXRpb246Ik1OIn0se25hbWU6Ik1vbnRlbmVncm8iLGFiYnJldmlhdGlvbjoiTUUifSx7bmFtZToiTW9udHNlcnJhdCIsYWJicmV2aWF0aW9uOiJNUyJ9LHtuYW1lOiJNb3JvY2NvIixhYmJyZXZpYXRpb246Ik1BIn0se25hbWU6Ik1vemFtYmlxdWUiLGFiYnJldmlhdGlvbjoiTVoifSx7bmFtZToiTXlhbm1hciAoQnVybWEpIixhYmJyZXZpYXRpb246Ik1NIn0se25hbWU6Ik5hbWliaWEiLGFiYnJldmlhdGlvbjoiTkEifSx7bmFtZToiTmF1cnUiLGFiYnJldmlhdGlvbjoiTlIifSx7bmFtZToiTmVwYWwiLGFiYnJldmlhdGlvbjoiTlAifSx7bmFtZToiTmV0aGVybGFuZHMiLGFiYnJldmlhdGlvbjoiTkwifSx7bmFtZToiTmV3IENhbGVkb25pYSIsYWJicmV2aWF0aW9uOiJOQyJ9LHtuYW1lOiJOZXcgWmVhbGFuZCIsYWJicmV2aWF0aW9uOiJOWiJ9LHtuYW1lOiJOaWNhcmFndWEiLGFiYnJldmlhdGlvbjoiTkkifSx7bmFtZToiTmlnZXIiLGFiYnJldmlhdGlvbjoiTkUifSx7bmFtZToiTmlnZXJpYSIsYWJicmV2aWF0aW9uOiJORyJ9LHtuYW1lOiJOaXVlIixhYmJyZXZpYXRpb246Ik5VIn0se25hbWU6Ik5vcmZvbGsgSXNsYW5kIixhYmJyZXZpYXRpb246Ik5GIn0se25hbWU6Ik5vcnRoIEtvcmVhIixhYmJyZXZpYXRpb246IktQIn0se25hbWU6Ik5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcyIsYWJicmV2aWF0aW9uOiJNUCJ9LHtuYW1lOiJOb3J3YXkiLGFiYnJldmlhdGlvbjoiTk8ifSx7bmFtZToiT21hbiIsYWJicmV2aWF0aW9uOiJPTSJ9LHtuYW1lOiJQYWtpc3RhbiIsYWJicmV2aWF0aW9uOiJQSyJ9LHtuYW1lOiJQYWxhdSIsYWJicmV2aWF0aW9uOiJQVyJ9LHtuYW1lOiJQYWxlc3RpbmlhbiBUZXJyaXRvcmllcyIsYWJicmV2aWF0aW9uOiJQUyJ9LHtuYW1lOiJQYW5hbWEiLGFiYnJldmlhdGlvbjoiUEEifSx7bmFtZToiUGFwdWEgTmV3IEd1aW5lYSIsYWJicmV2aWF0aW9uOiJQRyJ9LHtuYW1lOiJQYXJhZ3VheSIsYWJicmV2aWF0aW9uOiJQWSJ9LHtuYW1lOiJQZXJ1IixhYmJyZXZpYXRpb246IlBFIn0se25hbWU6IlBoaWxpcHBpbmVzIixhYmJyZXZpYXRpb246IlBIIn0se25hbWU6IlBpdGNhaXJuIElzbGFuZHMiLGFiYnJldmlhdGlvbjoiUE4ifSx7bmFtZToiUG9sYW5kIixhYmJyZXZpYXRpb246IlBMIn0se25hbWU6IlBvcnR1Z2FsIixhYmJyZXZpYXRpb246IlBUIn0se25hbWU6IlB1ZXJ0byBSaWNvIixhYmJyZXZpYXRpb246IlBSIn0se25hbWU6IlFhdGFyIixhYmJyZXZpYXRpb246IlFBIn0se25hbWU6IlLDqXVuaW9uIixhYmJyZXZpYXRpb246IlJFIn0se25hbWU6IlJvbWFuaWEiLGFiYnJldmlhdGlvbjoiUk8ifSx7bmFtZToiUnVzc2lhIixhYmJyZXZpYXRpb246IlJVIn0se25hbWU6IlJ3YW5kYSIsYWJicmV2aWF0aW9uOiJSVyJ9LHtuYW1lOiJTYW1vYSIsYWJicmV2aWF0aW9uOiJXUyJ9LHtuYW1lOiJTYW4gTWFyaW5vIixhYmJyZXZpYXRpb246IlNNIn0se25hbWU6IlPDo28gVG9tw6kgYW5kIFByw61uY2lwZSIsYWJicmV2aWF0aW9uOiJTVCJ9LHtuYW1lOiJTYXVkaSBBcmFiaWEiLGFiYnJldmlhdGlvbjoiU0EifSx7bmFtZToiU2VuZWdhbCIsYWJicmV2aWF0aW9uOiJTTiJ9LHtuYW1lOiJTZXJiaWEiLGFiYnJldmlhdGlvbjoiUlMifSx7bmFtZToiU2V5Y2hlbGxlcyIsYWJicmV2aWF0aW9uOiJTQyJ9LHtuYW1lOiJTaWVycmEgTGVvbmUiLGFiYnJldmlhdGlvbjoiU0wifSx7bmFtZToiU2luZ2Fwb3JlIixhYmJyZXZpYXRpb246IlNHIn0se25hbWU6IlNpbnQgTWFhcnRlbiIsYWJicmV2aWF0aW9uOiJTWCJ9LHtuYW1lOiJTbG92YWtpYSIsYWJicmV2aWF0aW9uOiJTSyJ9LHtuYW1lOiJTbG92ZW5pYSIsYWJicmV2aWF0aW9uOiJTSSJ9LHtuYW1lOiJTb2xvbW9uIElzbGFuZHMiLGFiYnJldmlhdGlvbjoiU0IifSx7bmFtZToiU29tYWxpYSIsYWJicmV2aWF0aW9uOiJTTyJ9LHtuYW1lOiJTb3V0aCBBZnJpY2EiLGFiYnJldmlhdGlvbjoiWkEifSx7bmFtZToiU291dGggR2VvcmdpYSAmIFNvdXRoIFNhbmR3aWNoIElzbGFuZHMiLGFiYnJldmlhdGlvbjoiR1MifSx7bmFtZToiU291dGggS29yZWEiLGFiYnJldmlhdGlvbjoiS1IifSx7bmFtZToiU291dGggU3VkYW4iLGFiYnJldmlhdGlvbjoiU1MifSx7bmFtZToiU3BhaW4iLGFiYnJldmlhdGlvbjoiRVMifSx7bmFtZToiU3JpIExhbmthIixhYmJyZXZpYXRpb246IkxLIn0se25hbWU6IlN0LiBCYXJ0aMOpbGVteSIsYWJicmV2aWF0aW9uOiJCTCJ9LHtuYW1lOiJTdC4gSGVsZW5hIixhYmJyZXZpYXRpb246IlNIIn0se25hbWU6IlN0LiBLaXR0cyAmIE5ldmlzIixhYmJyZXZpYXRpb246IktOIn0se25hbWU6IlN0LiBMdWNpYSIsYWJicmV2aWF0aW9uOiJMQyJ9LHtuYW1lOiJTdC4gTWFydGluIixhYmJyZXZpYXRpb246Ik1GIn0se25hbWU6IlN0LiBQaWVycmUgJiBNaXF1ZWxvbiIsYWJicmV2aWF0aW9uOiJQTSJ9LHtuYW1lOiJTdC4gVmluY2VudCAmIEdyZW5hZGluZXMiLGFiYnJldmlhdGlvbjoiVkMifSx7bmFtZToiU3VkYW4iLGFiYnJldmlhdGlvbjoiU0QifSx7bmFtZToiU3VyaW5hbWUiLGFiYnJldmlhdGlvbjoiU1IifSx7bmFtZToiU3ZhbGJhcmQgJiBKYW4gTWF5ZW4iLGFiYnJldmlhdGlvbjoiU0oifSx7bmFtZToiU3dhemlsYW5kIixhYmJyZXZpYXRpb246IlNaIn0se25hbWU6IlN3ZWRlbiIsYWJicmV2aWF0aW9uOiJTRSJ9LHtuYW1lOiJTd2l0emVybGFuZCIsYWJicmV2aWF0aW9uOiJDSCJ9LHtuYW1lOiJTeXJpYSIsYWJicmV2aWF0aW9uOiJTWSJ9LHtuYW1lOiJUYWl3YW4iLGFiYnJldmlhdGlvbjoiVFcifSx7bmFtZToiVGFqaWtpc3RhbiIsYWJicmV2aWF0aW9uOiJUSiJ9LHtuYW1lOiJUYW56YW5pYSIsYWJicmV2aWF0aW9uOiJUWiJ9LHtuYW1lOiJUaGFpbGFuZCIsYWJicmV2aWF0aW9uOiJUSCJ9LHtuYW1lOiJUaW1vci1MZXN0ZSIsYWJicmV2aWF0aW9uOiJUTCJ9LHtuYW1lOiJUb2dvIixhYmJyZXZpYXRpb246IlRHIn0se25hbWU6IlRva2VsYXUiLGFiYnJldmlhdGlvbjoiVEsifSx7bmFtZToiVG9uZ2EiLGFiYnJldmlhdGlvbjoiVE8ifSx7bmFtZToiVHJpbmlkYWQgJiBUb2JhZ28iLGFiYnJldmlhdGlvbjoiVFQifSx7bmFtZToiVHJpc3RhbiBkYSBDdW5oYSIsYWJicmV2aWF0aW9uOiJUQSJ9LHtuYW1lOiJUdW5pc2lhIixhYmJyZXZpYXRpb246IlROIn0se25hbWU6IlR1cmtleSIsYWJicmV2aWF0aW9uOiJUUiJ9LHtuYW1lOiJUdXJrbWVuaXN0YW4iLGFiYnJldmlhdGlvbjoiVE0ifSx7bmFtZToiVHVya3MgJiBDYWljb3MgSXNsYW5kcyIsYWJicmV2aWF0aW9uOiJUQyJ9LHtuYW1lOiJUdXZhbHUiLGFiYnJldmlhdGlvbjoiVFYifSx7bmFtZToiVS5TLiBPdXRseWluZyBJc2xhbmRzIixhYmJyZXZpYXRpb246IlVNIn0se25hbWU6IlUuUy4gVmlyZ2luIElzbGFuZHMiLGFiYnJldmlhdGlvbjoiVkkifSx7bmFtZToiVWdhbmRhIixhYmJyZXZpYXRpb246IlVHIn0se25hbWU6IlVrcmFpbmUiLGFiYnJldmlhdGlvbjoiVUEifSx7bmFtZToiVW5pdGVkIEFyYWIgRW1pcmF0ZXMiLGFiYnJldmlhdGlvbjoiQUUifSx7bmFtZToiVW5pdGVkIEtpbmdkb20iLGFiYnJldmlhdGlvbjoiR0IifSx7bmFtZToiVW5pdGVkIFN0YXRlcyIsYWJicmV2aWF0aW9uOiJVUyJ9LHtuYW1lOiJVcnVndWF5IixhYmJyZXZpYXRpb246IlVZIn0se25hbWU6IlV6YmVraXN0YW4iLGFiYnJldmlhdGlvbjoiVVoifSx7bmFtZToiVmFudWF0dSIsYWJicmV2aWF0aW9uOiJWVSJ9LHtuYW1lOiJWYXRpY2FuIENpdHkiLGFiYnJldmlhdGlvbjoiVkEifSx7bmFtZToiVmVuZXp1ZWxhIixhYmJyZXZpYXRpb246IlZFIn0se25hbWU6IlZpZXRuYW0iLGFiYnJldmlhdGlvbjoiVk4ifSx7bmFtZToiV2FsbGlzICYgRnV0dW5hIixhYmJyZXZpYXRpb246IldGIn0se25hbWU6Ildlc3Rlcm4gU2FoYXJhIixhYmJyZXZpYXRpb246IkVIIn0se25hbWU6IlllbWVuIixhYmJyZXZpYXRpb246IllFIn0se25hbWU6IlphbWJpYSIsYWJicmV2aWF0aW9uOiJaTSJ9LHtuYW1lOiJaaW1iYWJ3ZSIsYWJicmV2aWF0aW9uOiJaVyJ9XSxjb3VudGllczp7dWs6W3tuYW1lOiJCYXRoIGFuZCBOb3J0aCBFYXN0IFNvbWVyc2V0In0se25hbWU6IkFiZXJkZWVuc2hpcmUifSx7bmFtZToiQW5nbGVzZXkifSx7bmFtZToiQW5ndXMifSx7bmFtZToiQmVkZm9yZCJ9LHtuYW1lOiJCbGFja2J1cm4gd2l0aCBEYXJ3ZW4ifSx7bmFtZToiQmxhY2twb29sIn0se25hbWU6IkJvdXJuZW1vdXRoIn0se25hbWU6IkJyYWNrbmVsbCBGb3Jlc3QifSx7bmFtZToiQnJpZ2h0b24gJiBIb3ZlIn0se25hbWU6IkJyaXN0b2wifSx7bmFtZToiQnVja2luZ2hhbXNoaXJlIn0se25hbWU6IkNhbWJyaWRnZXNoaXJlIn0se25hbWU6IkNhcm1hcnRoZW5zaGlyZSJ9LHtuYW1lOiJDZW50cmFsIEJlZGZvcmRzaGlyZSJ9LHtuYW1lOiJDZXJlZGlnaW9uIn0se25hbWU6IkNoZXNoaXJlIEVhc3QifSx7bmFtZToiQ2hlc2hpcmUgV2VzdCBhbmQgQ2hlc3RlciJ9LHtuYW1lOiJDbGFja21hbm5hbnNoaXJlIn0se25hbWU6IkNvbnd5In0se25hbWU6IkNvcm53YWxsIn0se25hbWU6IkNvdW50eSBBbnRyaW0ifSx7bmFtZToiQ291bnR5IEFybWFnaCJ9LHtuYW1lOiJDb3VudHkgRG93biJ9LHtuYW1lOiJDb3VudHkgRHVyaGFtIn0se25hbWU6IkNvdW50eSBGZXJtYW5hZ2gifSx7bmFtZToiQ291bnR5IExvbmRvbmRlcnJ5In0se25hbWU6IkNvdW50eSBUeXJvbmUifSx7bmFtZToiQ3VtYnJpYSJ9LHtuYW1lOiJEYXJsaW5ndG9uIn0se25hbWU6IkRlbmJpZ2hzaGlyZSJ9LHtuYW1lOiJEZXJieSJ9LHtuYW1lOiJEZXJieXNoaXJlIn0se25hbWU6IkRldm9uIn0se25hbWU6IkRvcnNldCJ9LHtuYW1lOiJEdW1mcmllcyBhbmQgR2FsbG93YXkifSx7bmFtZToiRHVuZGVlIn0se25hbWU6IkVhc3QgTG90aGlhbiJ9LHtuYW1lOiJFYXN0IFJpZGluZyBvZiBZb3Jrc2hpcmUifSx7bmFtZToiRWFzdCBTdXNzZXgifSx7bmFtZToiRWRpbmJ1cmdoPyJ9LHtuYW1lOiJFc3NleCJ9LHtuYW1lOiJGYWxraXJrIn0se25hbWU6IkZpZmUifSx7bmFtZToiRmxpbnRzaGlyZSJ9LHtuYW1lOiJHbG91Y2VzdGVyc2hpcmUifSx7bmFtZToiR3JlYXRlciBMb25kb24ifSx7bmFtZToiR3JlYXRlciBNYW5jaGVzdGVyIn0se25hbWU6Ikd3ZW50In0se25hbWU6Ikd3eW5lZGQifSx7bmFtZToiSGFsdG9uIn0se25hbWU6IkhhbXBzaGlyZSJ9LHtuYW1lOiJIYXJ0bGVwb29sIn0se25hbWU6IkhlcmVmb3Jkc2hpcmUifSx7bmFtZToiSGVydGZvcmRzaGlyZSJ9LHtuYW1lOiJIaWdobGFuZHMifSx7bmFtZToiSHVsbCJ9LHtuYW1lOiJJc2xlIG9mIFdpZ2h0In0se25hbWU6IklzbGVzIG9mIFNjaWxseSJ9LHtuYW1lOiJLZW50In0se25hbWU6IkxhbmNhc2hpcmUifSx7bmFtZToiTGVpY2VzdGVyIn0se25hbWU6IkxlaWNlc3RlcnNoaXJlIn0se25hbWU6IkxpbmNvbG5zaGlyZSJ9LHtuYW1lOiJMb3RoaWFuIn0se25hbWU6Ikx1dG9uIn0se25hbWU6Ik1lZHdheSJ9LHtuYW1lOiJNZXJzZXlzaWRlIn0se25hbWU6Ik1pZCBHbGFtb3JnYW4ifSx7bmFtZToiTWlkZGxlc2Jyb3VnaCJ9LHtuYW1lOiJNaWx0b24gS2V5bmVzIn0se25hbWU6Ik1vbm1vdXRoc2hpcmUifSx7bmFtZToiTW9yYXkifSx7bmFtZToiTm9yZm9sayJ9LHtuYW1lOiJOb3J0aCBFYXN0IExpbmNvbG5zaGlyZSJ9LHtuYW1lOiJOb3J0aCBMaW5jb2xuc2hpcmUifSx7bmFtZToiTm9ydGggU29tZXJzZXQifSx7bmFtZToiTm9ydGggWW9ya3NoaXJlIn0se25hbWU6Ik5vcnRoYW1wdG9uc2hpcmUifSx7bmFtZToiTm9ydGh1bWJlcmxhbmQifSx7bmFtZToiTm90dGluZ2hhbSJ9LHtuYW1lOiJOb3R0aW5naGFtc2hpcmUifSx7bmFtZToiT3hmb3Jkc2hpcmUifSx7bmFtZToiUGVtYnJva2VzaGlyZSJ9LHtuYW1lOiJQZXJ0aCBhbmQgS2lucm9zcyJ9LHtuYW1lOiJQZXRlcmJvcm91Z2gifSx7bmFtZToiUGx5bW91dGgifSx7bmFtZToiUG9vbGUifSx7bmFtZToiUG9ydHNtb3V0aCJ9LHtuYW1lOiJQb3d5cyJ9LHtuYW1lOiJSZWFkaW5nIn0se25hbWU6IlJlZGNhciBhbmQgQ2xldmVsYW5kIn0se25hbWU6IlJ1dGxhbmQifSx7bmFtZToiU2NvdHRpc2ggQm9yZGVycyJ9LHtuYW1lOiJTaHJvcHNoaXJlIn0se25hbWU6IlNsb3VnaCJ9LHtuYW1lOiJTb21lcnNldCJ9LHtuYW1lOiJTb3V0aCBHbGFtb3JnYW4ifSx7bmFtZToiU291dGggR2xvdWNlc3RlcnNoaXJlIn0se25hbWU6IlNvdXRoIFlvcmtzaGlyZSJ9LHtuYW1lOiJTb3V0aGFtcHRvbiJ9LHtuYW1lOiJTb3V0aGVuZC1vbi1TZWEifSx7bmFtZToiU3RhZmZvcmRzaGlyZSJ9LHtuYW1lOiJTdGlybGluZ3NoaXJlIn0se25hbWU6IlN0b2NrdG9uLW9uLVRlZXMifSx7bmFtZToiU3Rva2Utb24tVHJlbnQifSx7bmFtZToiU3RyYXRoY2x5ZGUifSx7bmFtZToiU3VmZm9sayJ9LHtuYW1lOiJTdXJyZXkifSx7bmFtZToiU3dpbmRvbiJ9LHtuYW1lOiJUZWxmb3JkIGFuZCBXcmVraW4ifSx7bmFtZToiVGh1cnJvY2sifSx7bmFtZToiVG9yYmF5In0se25hbWU6IlR5bmUgYW5kIFdlYXIifSx7bmFtZToiV2FycmluZ3RvbiJ9LHtuYW1lOiJXYXJ3aWNrc2hpcmUifSx7bmFtZToiV2VzdCBCZXJrc2hpcmUifSx7bmFtZToiV2VzdCBHbGFtb3JnYW4ifSx7bmFtZToiV2VzdCBMb3RoaWFuIn0se25hbWU6Ildlc3QgTWlkbGFuZHMifSx7bmFtZToiV2VzdCBTdXNzZXgifSx7bmFtZToiV2VzdCBZb3Jrc2hpcmUifSx7bmFtZToiV2VzdGVybiBJc2xlcyJ9LHtuYW1lOiJXaWx0c2hpcmUifSx7bmFtZToiV2luZHNvciBhbmQgTWFpZGVuaGVhZCJ9LHtuYW1lOiJXb2tpbmdoYW0ifSx7bmFtZToiV29yY2VzdGVyc2hpcmUifSx7bmFtZToiV3JleGhhbSJ9LHtuYW1lOiJZb3JrIn1dfSxwcm92aW5jZXM6e2NhOlt7bmFtZToiQWxiZXJ0YSIsYWJicmV2aWF0aW9uOiJBQiJ9LHtuYW1lOiJCcml0aXNoIENvbHVtYmlhIixhYmJyZXZpYXRpb246IkJDIn0se25hbWU6Ik1hbml0b2JhIixhYmJyZXZpYXRpb246Ik1CIn0se25hbWU6Ik5ldyBCcnVuc3dpY2siLGFiYnJldmlhdGlvbjoiTkIifSx7bmFtZToiTmV3Zm91bmRsYW5kIGFuZCBMYWJyYWRvciIsYWJicmV2aWF0aW9uOiJOTCJ9LHtuYW1lOiJOb3ZhIFNjb3RpYSIsYWJicmV2aWF0aW9uOiJOUyJ9LHtuYW1lOiJPbnRhcmlvIixhYmJyZXZpYXRpb246Ik9OIn0se25hbWU6IlByaW5jZSBFZHdhcmQgSXNsYW5kIixhYmJyZXZpYXRpb246IlBFIn0se25hbWU6IlF1ZWJlYyIsYWJicmV2aWF0aW9uOiJRQyJ9LHtuYW1lOiJTYXNrYXRjaGV3YW4iLGFiYnJldmlhdGlvbjoiU0sifSx7bmFtZToiTm9ydGh3ZXN0IFRlcnJpdG9yaWVzIixhYmJyZXZpYXRpb246Ik5UIn0se25hbWU6Ik51bmF2dXQiLGFiYnJldmlhdGlvbjoiTlUifSx7bmFtZToiWXVrb24iLGFiYnJldmlhdGlvbjoiWVQifV0saXQ6W3tuYW1lOiJBZ3JpZ2VudG8iLGFiYnJldmlhdGlvbjoiQUciLGNvZGU6ODR9LHtuYW1lOiJBbGVzc2FuZHJpYSIsYWJicmV2aWF0aW9uOiJBTCIsY29kZTo2fSx7bmFtZToiQW5jb25hIixhYmJyZXZpYXRpb246IkFOIixjb2RlOjQyfSx7bmFtZToiQW9zdGEiLGFiYnJldmlhdGlvbjoiQU8iLGNvZGU6N30se25hbWU6IkwnQXF1aWxhIixhYmJyZXZpYXRpb246IkFRIixjb2RlOjY2fSx7bmFtZToiQXJlenpvIixhYmJyZXZpYXRpb246IkFSIixjb2RlOjUxfSx7bmFtZToiQXNjb2xpLVBpY2VubyIsYWJicmV2aWF0aW9uOiJBUCIsY29kZTo0NH0se25hbWU6IkFzdGkiLGFiYnJldmlhdGlvbjoiQVQiLGNvZGU6NX0se25hbWU6IkF2ZWxsaW5vIixhYmJyZXZpYXRpb246IkFWIixjb2RlOjY0fSx7bmFtZToiQmFyaSIsYWJicmV2aWF0aW9uOiJCQSIsY29kZTo3Mn0se25hbWU6IkJhcmxldHRhLUFuZHJpYS1UcmFuaSIsYWJicmV2aWF0aW9uOiJCVCIsY29kZTo3Mn0se25hbWU6IkJlbGx1bm8iLGFiYnJldmlhdGlvbjoiQkwiLGNvZGU6MjV9LHtuYW1lOiJCZW5ldmVudG8iLGFiYnJldmlhdGlvbjoiQk4iLGNvZGU6NjJ9LHtuYW1lOiJCZXJnYW1vIixhYmJyZXZpYXRpb246IkJHIixjb2RlOjE2fSx7bmFtZToiQmllbGxhIixhYmJyZXZpYXRpb246IkJJIixjb2RlOjk2fSx7bmFtZToiQm9sb2duYSIsYWJicmV2aWF0aW9uOiJCTyIsY29kZTozN30se25hbWU6IkJvbHphbm8iLGFiYnJldmlhdGlvbjoiQloiLGNvZGU6MjF9LHtuYW1lOiJCcmVzY2lhIixhYmJyZXZpYXRpb246IkJTIixjb2RlOjE3fSx7bmFtZToiQnJpbmRpc2kiLGFiYnJldmlhdGlvbjoiQlIiLGNvZGU6NzR9LHtuYW1lOiJDYWdsaWFyaSIsYWJicmV2aWF0aW9uOiJDQSIsY29kZTo5Mn0se25hbWU6IkNhbHRhbmlzc2V0dGEiLGFiYnJldmlhdGlvbjoiQ0wiLGNvZGU6ODV9LHtuYW1lOiJDYW1wb2Jhc3NvIixhYmJyZXZpYXRpb246IkNCIixjb2RlOjcwfSx7bmFtZToiQ2FyYm9uaWEgSWdsZXNpYXMiLGFiYnJldmlhdGlvbjoiQ0kiLGNvZGU6NzB9LHtuYW1lOiJDYXNlcnRhIixhYmJyZXZpYXRpb246IkNFIixjb2RlOjYxfSx7bmFtZToiQ2F0YW5pYSIsYWJicmV2aWF0aW9uOiJDVCIsY29kZTo4N30se25hbWU6IkNhdGFuemFybyIsYWJicmV2aWF0aW9uOiJDWiIsY29kZTo3OX0se25hbWU6IkNoaWV0aSIsYWJicmV2aWF0aW9uOiJDSCIsY29kZTo2OX0se25hbWU6IkNvbW8iLGFiYnJldmlhdGlvbjoiQ08iLGNvZGU6MTN9LHtuYW1lOiJDb3NlbnphIixhYmJyZXZpYXRpb246IkNTIixjb2RlOjc4fSx7bmFtZToiQ3JlbW9uYSIsYWJicmV2aWF0aW9uOiJDUiIsY29kZToxOX0se25hbWU6IkNyb3RvbmUiLGFiYnJldmlhdGlvbjoiS1IiLGNvZGU6MTAxfSx7bmFtZToiQ3VuZW8iLGFiYnJldmlhdGlvbjoiQ04iLGNvZGU6NH0se25hbWU6IkVubmEiLGFiYnJldmlhdGlvbjoiRU4iLGNvZGU6ODZ9LHtuYW1lOiJGZXJtbyIsYWJicmV2aWF0aW9uOiJGTSIsY29kZTo4Nn0se25hbWU6IkZlcnJhcmEiLGFiYnJldmlhdGlvbjoiRkUiLGNvZGU6Mzh9LHtuYW1lOiJGaXJlbnplIixhYmJyZXZpYXRpb246IkZJIixjb2RlOjQ4fSx7bmFtZToiRm9nZ2lhIixhYmJyZXZpYXRpb246IkZHIixjb2RlOjcxfSx7bmFtZToiRm9ybGktQ2VzZW5hIixhYmJyZXZpYXRpb246IkZDIixjb2RlOjcxfSx7bmFtZToiRnJvc2lub25lIixhYmJyZXZpYXRpb246IkZSIixjb2RlOjYwfSx7bmFtZToiR2Vub3ZhIixhYmJyZXZpYXRpb246IkdFIixjb2RlOjEwfSx7bmFtZToiR29yaXppYSIsYWJicmV2aWF0aW9uOiJHTyIsY29kZTozMX0se25hbWU6Ikdyb3NzZXRvIixhYmJyZXZpYXRpb246IkdSIixjb2RlOjUzfSx7bmFtZToiSW1wZXJpYSIsYWJicmV2aWF0aW9uOiJJTSIsY29kZTo4fSx7bmFtZToiSXNlcm5pYSIsYWJicmV2aWF0aW9uOiJJUyIsY29kZTo5NH0se25hbWU6IkxhLVNwZXppYSIsYWJicmV2aWF0aW9uOiJTUCIsY29kZTo2Nn0se25hbWU6IkxhdGluYSIsYWJicmV2aWF0aW9uOiJMVCIsY29kZTo1OX0se25hbWU6IkxlY2NlIixhYmJyZXZpYXRpb246IkxFIixjb2RlOjc1fSx7bmFtZToiTGVjY28iLGFiYnJldmlhdGlvbjoiTEMiLGNvZGU6OTd9LHtuYW1lOiJMaXZvcm5vIixhYmJyZXZpYXRpb246IkxJIixjb2RlOjQ5fSx7bmFtZToiTG9kaSIsYWJicmV2aWF0aW9uOiJMTyIsY29kZTo5OH0se25hbWU6Ikx1Y2NhIixhYmJyZXZpYXRpb246IkxVIixjb2RlOjQ2fSx7bmFtZToiTWFjZXJhdGEiLGFiYnJldmlhdGlvbjoiTUMiLGNvZGU6NDN9LHtuYW1lOiJNYW50b3ZhIixhYmJyZXZpYXRpb246Ik1OIixjb2RlOjIwfSx7bmFtZToiTWFzc2EtQ2FycmFyYSIsYWJicmV2aWF0aW9uOiJNUyIsY29kZTo0NX0se25hbWU6Ik1hdGVyYSIsYWJicmV2aWF0aW9uOiJNVCIsY29kZTo3N30se25hbWU6Ik1lZGlvIENhbXBpZGFubyIsYWJicmV2aWF0aW9uOiJWUyIsY29kZTo3N30se25hbWU6Ik1lc3NpbmEiLGFiYnJldmlhdGlvbjoiTUUiLGNvZGU6ODN9LHtuYW1lOiJNaWxhbm8iLGFiYnJldmlhdGlvbjoiTUkiLGNvZGU6MTV9LHtuYW1lOiJNb2RlbmEiLGFiYnJldmlhdGlvbjoiTU8iLGNvZGU6MzZ9LHtuYW1lOiJNb256YS1CcmlhbnphIixhYmJyZXZpYXRpb246Ik1CIixjb2RlOjM2fSx7bmFtZToiTmFwb2xpIixhYmJyZXZpYXRpb246Ik5BIixjb2RlOjYzfSx7bmFtZToiTm92YXJhIixhYmJyZXZpYXRpb246Ik5PIixjb2RlOjN9LHtuYW1lOiJOdW9ybyIsYWJicmV2aWF0aW9uOiJOVSIsY29kZTo5MX0se25hbWU6Ik9nbGlhc3RyYSIsYWJicmV2aWF0aW9uOiJPRyIsY29kZTo5MX0se25hbWU6Ik9sYmlhIFRlbXBpbyIsYWJicmV2aWF0aW9uOiJPVCIsY29kZTo5MX0se25hbWU6Ik9yaXN0YW5vIixhYmJyZXZpYXRpb246Ik9SIixjb2RlOjk1fSx7bmFtZToiUGFkb3ZhIixhYmJyZXZpYXRpb246IlBEIixjb2RlOjI4fSx7bmFtZToiUGFsZXJtbyIsYWJicmV2aWF0aW9uOiJQQSIsY29kZTo4Mn0se25hbWU6IlBhcm1hIixhYmJyZXZpYXRpb246IlBSIixjb2RlOjM0fSx7bmFtZToiUGF2aWEiLGFiYnJldmlhdGlvbjoiUFYiLGNvZGU6MTh9LHtuYW1lOiJQZXJ1Z2lhIixhYmJyZXZpYXRpb246IlBHIixjb2RlOjU0fSx7bmFtZToiUGVzYXJvLVVyYmlubyIsYWJicmV2aWF0aW9uOiJQVSIsY29kZTo0MX0se25hbWU6IlBlc2NhcmEiLGFiYnJldmlhdGlvbjoiUEUiLGNvZGU6Njh9LHtuYW1lOiJQaWFjZW56YSIsYWJicmV2aWF0aW9uOiJQQyIsY29kZTozM30se25hbWU6IlBpc2EiLGFiYnJldmlhdGlvbjoiUEkiLGNvZGU6NTB9LHtuYW1lOiJQaXN0b2lhIixhYmJyZXZpYXRpb246IlBUIixjb2RlOjQ3fSx7bmFtZToiUG9yZGVub25lIixhYmJyZXZpYXRpb246IlBOIixjb2RlOjkzfSx7bmFtZToiUG90ZW56YSIsYWJicmV2aWF0aW9uOiJQWiIsY29kZTo3Nn0se25hbWU6IlByYXRvIixhYmJyZXZpYXRpb246IlBPIixjb2RlOjEwMH0se25hbWU6IlJhZ3VzYSIsYWJicmV2aWF0aW9uOiJSRyIsY29kZTo4OH0se25hbWU6IlJhdmVubmEiLGFiYnJldmlhdGlvbjoiUkEiLGNvZGU6Mzl9LHtuYW1lOiJSZWdnaW8tQ2FsYWJyaWEiLGFiYnJldmlhdGlvbjoiUkMiLGNvZGU6MzV9LHtuYW1lOiJSZWdnaW8tRW1pbGlhIixhYmJyZXZpYXRpb246IlJFIixjb2RlOjM1fSx7bmFtZToiUmlldGkiLGFiYnJldmlhdGlvbjoiUkkiLGNvZGU6NTd9LHtuYW1lOiJSaW1pbmkiLGFiYnJldmlhdGlvbjoiUk4iLGNvZGU6OTl9LHtuYW1lOiJSb21hIixhYmJyZXZpYXRpb246IlJvbWEiLGNvZGU6NTh9LHtuYW1lOiJSb3ZpZ28iLGFiYnJldmlhdGlvbjoiUk8iLGNvZGU6Mjl9LHtuYW1lOiJTYWxlcm5vIixhYmJyZXZpYXRpb246IlNBIixjb2RlOjY1fSx7bmFtZToiU2Fzc2FyaSIsYWJicmV2aWF0aW9uOiJTUyIsY29kZTo5MH0se25hbWU6IlNhdm9uYSIsYWJicmV2aWF0aW9uOiJTViIsY29kZTo5fSx7bmFtZToiU2llbmEiLGFiYnJldmlhdGlvbjoiU0kiLGNvZGU6NTJ9LHtuYW1lOiJTaXJhY3VzYSIsYWJicmV2aWF0aW9uOiJTUiIsY29kZTo4OX0se25hbWU6IlNvbmRyaW8iLGFiYnJldmlhdGlvbjoiU08iLGNvZGU6MTR9LHtuYW1lOiJUYXJhbnRvIixhYmJyZXZpYXRpb246IlRBIixjb2RlOjczfSx7bmFtZToiVGVyYW1vIixhYmJyZXZpYXRpb246IlRFIixjb2RlOjY3fSx7bmFtZToiVGVybmkiLGFiYnJldmlhdGlvbjoiVFIiLGNvZGU6NTV9LHtuYW1lOiJUb3Jpbm8iLGFiYnJldmlhdGlvbjoiVE8iLGNvZGU6MX0se25hbWU6IlRyYXBhbmkiLGFiYnJldmlhdGlvbjoiVFAiLGNvZGU6ODF9LHtuYW1lOiJUcmVudG8iLGFiYnJldmlhdGlvbjoiVE4iLGNvZGU6MjJ9LHtuYW1lOiJUcmV2aXNvIixhYmJyZXZpYXRpb246IlRWIixjb2RlOjI2fSx7bmFtZToiVHJpZXN0ZSIsYWJicmV2aWF0aW9uOiJUUyIsY29kZTozMn0se25hbWU6IlVkaW5lIixhYmJyZXZpYXRpb246IlVEIixjb2RlOjMwfSx7bmFtZToiVmFyZXNlIixhYmJyZXZpYXRpb246IlZBIixjb2RlOjEyfSx7bmFtZToiVmVuZXppYSIsYWJicmV2aWF0aW9uOiJWRSIsY29kZToyN30se25hbWU6IlZlcmJhbmlhIixhYmJyZXZpYXRpb246IlZCIixjb2RlOjI3fSx7bmFtZToiVmVyY2VsbGkiLGFiYnJldmlhdGlvbjoiVkMiLGNvZGU6Mn0se25hbWU6IlZlcm9uYSIsYWJicmV2aWF0aW9uOiJWUiIsY29kZToyM30se25hbWU6IlZpYm8tVmFsZW50aWEiLGFiYnJldmlhdGlvbjoiVlYiLGNvZGU6MTAyfSx7bmFtZToiVmljZW56YSIsYWJicmV2aWF0aW9uOiJWSSIsY29kZToyNH0se25hbWU6IlZpdGVyYm8iLGFiYnJldmlhdGlvbjoiVlQiLGNvZGU6NTZ9XX0sbmF0aW9uYWxpdGllczpbe25hbWU6IkFmZ2hhbiJ9LHtuYW1lOiJBbGJhbmlhbiJ9LHtuYW1lOiJBbGdlcmlhbiJ9LHtuYW1lOiJBbWVyaWNhbiJ9LHtuYW1lOiJBbmRvcnJhbiJ9LHtuYW1lOiJBbmdvbGFuIn0se25hbWU6IkFudGlndWFucyJ9LHtuYW1lOiJBcmdlbnRpbmVhbiJ9LHtuYW1lOiJBcm1lbmlhbiJ9LHtuYW1lOiJBdXN0cmFsaWFuIn0se25hbWU6IkF1c3RyaWFuIn0se25hbWU6IkF6ZXJiYWlqYW5pIn0se25hbWU6IkJhaGFtaSJ9LHtuYW1lOiJCYWhyYWluaSJ9LHtuYW1lOiJCYW5nbGFkZXNoaSJ9LHtuYW1lOiJCYXJiYWRpYW4ifSx7bmFtZToiQmFyYnVkYW5zIn0se25hbWU6IkJhdHN3YW5hIn0se25hbWU6IkJlbGFydXNpYW4ifSx7bmFtZToiQmVsZ2lhbiJ9LHtuYW1lOiJCZWxpemVhbiJ9LHtuYW1lOiJCZW5pbmVzZSJ9LHtuYW1lOiJCaHV0YW5lc2UifSx7bmFtZToiQm9saXZpYW4ifSx7bmFtZToiQm9zbmlhbiJ9LHtuYW1lOiJCcmF6aWxpYW4ifSx7bmFtZToiQnJpdGlzaCJ9LHtuYW1lOiJCcnVuZWlhbiJ9LHtuYW1lOiJCdWxnYXJpYW4ifSx7bmFtZToiQnVya2luYWJlIn0se25hbWU6IkJ1cm1lc2UifSx7bmFtZToiQnVydW5kaWFuIn0se25hbWU6IkNhbWJvZGlhbiJ9LHtuYW1lOiJDYW1lcm9vbmlhbiJ9LHtuYW1lOiJDYW5hZGlhbiJ9LHtuYW1lOiJDYXBlIFZlcmRlYW4ifSx7bmFtZToiQ2VudHJhbCBBZnJpY2FuIn0se25hbWU6IkNoYWRpYW4ifSx7bmFtZToiQ2hpbGVhbiJ9LHtuYW1lOiJDaGluZXNlIn0se25hbWU6IkNvbG9tYmlhbiJ9LHtuYW1lOiJDb21vcmFuIn0se25hbWU6IkNvbmdvbGVzZSJ9LHtuYW1lOiJDb3N0YSBSaWNhbiJ9LHtuYW1lOiJDcm9hdGlhbiJ9LHtuYW1lOiJDdWJhbiJ9LHtuYW1lOiJDeXByaW90In0se25hbWU6IkN6ZWNoIn0se25hbWU6IkRhbmlzaCJ9LHtuYW1lOiJEamlib3V0aSJ9LHtuYW1lOiJEb21pbmljYW4ifSx7bmFtZToiRHV0Y2gifSx7bmFtZToiRWFzdCBUaW1vcmVzZSJ9LHtuYW1lOiJFY3VhZG9yZWFuIn0se25hbWU6IkVneXB0aWFuIn0se25hbWU6IkVtaXJpYW4ifSx7bmFtZToiRXF1YXRvcmlhbCBHdWluZWFuIn0se25hbWU6IkVyaXRyZWFuIn0se25hbWU6IkVzdG9uaWFuIn0se25hbWU6IkV0aGlvcGlhbiJ9LHtuYW1lOiJGaWppYW4ifSx7bmFtZToiRmlsaXBpbm8ifSx7bmFtZToiRmlubmlzaCJ9LHtuYW1lOiJGcmVuY2gifSx7bmFtZToiR2Fib25lc2UifSx7bmFtZToiR2FtYmlhbiJ9LHtuYW1lOiJHZW9yZ2lhbiJ9LHtuYW1lOiJHZXJtYW4ifSx7bmFtZToiR2hhbmFpYW4ifSx7bmFtZToiR3JlZWsifSx7bmFtZToiR3JlbmFkaWFuIn0se25hbWU6Ikd1YXRlbWFsYW4ifSx7bmFtZToiR3VpbmVhLUJpc3NhdWFuIn0se25hbWU6Ikd1aW5lYW4ifSx7bmFtZToiR3V5YW5lc2UifSx7bmFtZToiSGFpdGlhbiJ9LHtuYW1lOiJIZXJ6ZWdvdmluaWFuIn0se25hbWU6IkhvbmR1cmFuIn0se25hbWU6Ikh1bmdhcmlhbiJ9LHtuYW1lOiJJLUtpcmliYXRpIn0se25hbWU6IkljZWxhbmRlciJ9LHtuYW1lOiJJbmRpYW4ifSx7bmFtZToiSW5kb25lc2lhbiJ9LHtuYW1lOiJJcmFuaWFuIn0se25hbWU6IklyYXFpIn0se25hbWU6IklyaXNoIn0se25hbWU6IklzcmFlbGkifSx7bmFtZToiSXRhbGlhbiJ9LHtuYW1lOiJJdm9yaWFuIn0se25hbWU6IkphbWFpY2FuIn0se25hbWU6IkphcGFuZXNlIn0se25hbWU6IkpvcmRhbmlhbiJ9LHtuYW1lOiJLYXpha2hzdGFuaSJ9LHtuYW1lOiJLZW55YW4ifSx7bmFtZToiS2l0dGlhbiBhbmQgTmV2aXNpYW4ifSx7bmFtZToiS3V3YWl0aSJ9LHtuYW1lOiJLeXJneXoifSx7bmFtZToiTGFvdGlhbiJ9LHtuYW1lOiJMYXR2aWFuIn0se25hbWU6IkxlYmFuZXNlIn0se25hbWU6IkxpYmVyaWFuIn0se25hbWU6IkxpYnlhbiJ9LHtuYW1lOiJMaWVjaHRlbnN0ZWluZXIifSx7bmFtZToiTGl0aHVhbmlhbiJ9LHtuYW1lOiJMdXhlbWJvdXJnZXIifSx7bmFtZToiTWFjZWRvbmlhbiJ9LHtuYW1lOiJNYWxhZ2FzeSJ9LHtuYW1lOiJNYWxhd2lhbiJ9LHtuYW1lOiJNYWxheXNpYW4ifSx7bmFtZToiTWFsZGl2YW4ifSx7bmFtZToiTWFsaWFuIn0se25hbWU6Ik1hbHRlc2UifSx7bmFtZToiTWFyc2hhbGxlc2UifSx7bmFtZToiTWF1cml0YW5pYW4ifSx7bmFtZToiTWF1cml0aWFuIn0se25hbWU6Ik1leGljYW4ifSx7bmFtZToiTWljcm9uZXNpYW4ifSx7bmFtZToiTW9sZG92YW4ifSx7bmFtZToiTW9uYWNhbiJ9LHtuYW1lOiJNb25nb2xpYW4ifSx7bmFtZToiTW9yb2NjYW4ifSx7bmFtZToiTW9zb3RobyJ9LHtuYW1lOiJNb3Rzd2FuYSJ9LHtuYW1lOiJNb3phbWJpY2FuIn0se25hbWU6Ik5hbWliaWFuIn0se25hbWU6Ik5hdXJ1YW4ifSx7bmFtZToiTmVwYWxlc2UifSx7bmFtZToiTmV3IFplYWxhbmRlciJ9LHtuYW1lOiJOaWNhcmFndWFuIn0se25hbWU6Ik5pZ2VyaWFuIn0se25hbWU6Ik5pZ2VyaWVuIn0se25hbWU6Ik5vcnRoIEtvcmVhbiJ9LHtuYW1lOiJOb3J0aGVybiBJcmlzaCJ9LHtuYW1lOiJOb3J3ZWdpYW4ifSx7bmFtZToiT21hbmkifSx7bmFtZToiUGFraXN0YW5pIn0se25hbWU6IlBhbGF1YW4ifSx7bmFtZToiUGFuYW1hbmlhbiJ9LHtuYW1lOiJQYXB1YSBOZXcgR3VpbmVhbiJ9LHtuYW1lOiJQYXJhZ3VheWFuIn0se25hbWU6IlBlcnV2aWFuIn0se25hbWU6IlBvbGlzaCJ9LHtuYW1lOiJQb3J0dWd1ZXNlIn0se25hbWU6IlFhdGFyaSJ9LHtuYW1lOiJSb21hbmkifSx7bmFtZToiUnVzc2lhbiJ9LHtuYW1lOiJSd2FuZGFuIn0se25hbWU6IlNhaW50IEx1Y2lhbiJ9LHtuYW1lOiJTYWx2YWRvcmFuIn0se25hbWU6IlNhbW9hbiJ9LHtuYW1lOiJTYW4gTWFyaW5lc2UifSx7bmFtZToiU2FvIFRvbWVhbiJ9LHtuYW1lOiJTYXVkaSJ9LHtuYW1lOiJTY290dGlzaCJ9LHtuYW1lOiJTZW5lZ2FsZXNlIn0se25hbWU6IlNlcmJpYW4ifSx7bmFtZToiU2V5Y2hlbGxvaXMifSx7bmFtZToiU2llcnJhIExlb25lYW4ifSx7bmFtZToiU2luZ2Fwb3JlYW4ifSx7bmFtZToiU2xvdmFraWFuIn0se25hbWU6IlNsb3ZlbmlhbiJ9LHtuYW1lOiJTb2xvbW9uIElzbGFuZGVyIn0se25hbWU6IlNvbWFsaSJ9LHtuYW1lOiJTb3V0aCBBZnJpY2FuIn0se25hbWU6IlNvdXRoIEtvcmVhbiJ9LHtuYW1lOiJTcGFuaXNoIn0se25hbWU6IlNyaSBMYW5rYW4ifSx7bmFtZToiU3VkYW5lc2UifSx7bmFtZToiU3VyaW5hbWVyIn0se25hbWU6IlN3YXppIn0se25hbWU6IlN3ZWRpc2gifSx7bmFtZToiU3dpc3MifSx7bmFtZToiU3lyaWFuIn0se25hbWU6IlRhaXdhbmVzZSJ9LHtuYW1lOiJUYWppayJ9LHtuYW1lOiJUYW56YW5pYW4ifSx7bmFtZToiVGhhaSJ9LHtuYW1lOiJUb2dvbGVzZSJ9LHtuYW1lOiJUb25nYW4ifSx7bmFtZToiVHJpbmlkYWRpYW4gb3IgVG9iYWdvbmlhbiJ9LHtuYW1lOiJUdW5pc2lhbiJ9LHtuYW1lOiJUdXJraXNoIn0se25hbWU6IlR1dmFsdWFuIn0se25hbWU6IlVnYW5kYW4ifSx7bmFtZToiVWtyYWluaWFuIn0se25hbWU6IlVydWd1YXlhIn0se25hbWU6IlV6YmVraXN0YW5pIn0se25hbWU6IlZlbmV6dWVsYSJ9LHtuYW1lOiJWaWV0bmFtZXNlIn0se25hbWU6IldlbHMifSx7bmFtZToiWWVtZW5pdCJ9LHtuYW1lOiJaYW1iaWEifSx7bmFtZToiWmltYmFid2UifV0sbG9jYWxlX2xhbmd1YWdlczpbImFhIiwiYWIiLCJhZSIsImFmIiwiYWsiLCJhbSIsImFuIiwiYXIiLCJhcyIsImF2IiwiYXkiLCJheiIsImJhIiwiYmUiLCJiZyIsImJoIiwiYmkiLCJibSIsImJuIiwiYm8iLCJiciIsImJzIiwiY2EiLCJjZSIsImNoIiwiY28iLCJjciIsImNzIiwiY3UiLCJjdiIsImN5IiwiZGEiLCJkZSIsImR2IiwiZHoiLCJlZSIsImVsIiwiZW4iLCJlbyIsImVzIiwiZXQiLCJldSIsImZhIiwiZmYiLCJmaSIsImZqIiwiZm8iLCJmciIsImZ5IiwiZ2EiLCJnZCIsImdsIiwiZ24iLCJndSIsImd2IiwiaGEiLCJoZSIsImhpIiwiaG8iLCJociIsImh0IiwiaHUiLCJoeSIsImh6IiwiaWEiLCJpZCIsImllIiwiaWciLCJpaSIsImlrIiwiaW8iLCJpcyIsIml0IiwiaXUiLCJqYSIsImp2Iiwia2EiLCJrZyIsImtpIiwia2oiLCJrayIsImtsIiwia20iLCJrbiIsImtvIiwia3IiLCJrcyIsImt1Iiwia3YiLCJrdyIsImt5IiwibGEiLCJsYiIsImxnIiwibGkiLCJsbiIsImxvIiwibHQiLCJsdSIsImx2IiwibWciLCJtaCIsIm1pIiwibWsiLCJtbCIsIm1uIiwibXIiLCJtcyIsIm10IiwibXkiLCJuYSIsIm5iIiwibmQiLCJuZSIsIm5nIiwibmwiLCJubiIsIm5vIiwibnIiLCJudiIsIm55Iiwib2MiLCJvaiIsIm9tIiwib3IiLCJvcyIsInBhIiwicGkiLCJwbCIsInBzIiwicHQiLCJxdSIsInJtIiwicm4iLCJybyIsInJ1IiwicnciLCJzYSIsInNjIiwic2QiLCJzZSIsInNnIiwic2kiLCJzayIsInNsIiwic20iLCJzbiIsInNvIiwic3EiLCJzciIsInNzIiwic3QiLCJzdSIsInN2Iiwic3ciLCJ0YSIsInRlIiwidGciLCJ0aCIsInRpIiwidGsiLCJ0bCIsInRuIiwidG8iLCJ0ciIsInRzIiwidHQiLCJ0dyIsInR5IiwidWciLCJ1ayIsInVyIiwidXoiLCJ2ZSIsInZpIiwidm8iLCJ3YSIsIndvIiwieGgiLCJ5aSIsInlvIiwiemEiLCJ6aCIsInp1Il0sbG9jYWxlX3JlZ2lvbnM6WyJhZ3EtQ00iLCJhc2EtVFoiLCJhc3QtRVMiLCJiYXMtQ00iLCJiZW0tWk0iLCJiZXotVFoiLCJicngtSU4iLCJjZ2ctVUciLCJjaHItVVMiLCJkYXYtS0UiLCJkamUtTkUiLCJkc2ItREUiLCJkdWEtQ00iLCJkeW8tU04iLCJlYnUtS0UiLCJld28tQ00iLCJmaWwtUEgiLCJmdXItSVQiLCJnc3ctQ0giLCJnc3ctRlIiLCJnc3ctTEkiLCJndXotS0UiLCJoYXctVVMiLCJoc2ItREUiLCJqZ28tQ00iLCJqbWMtVFoiLCJrYWItRFoiLCJrYW0tS0UiLCJrZGUtVFoiLCJrZWEtQ1YiLCJraHEtTUwiLCJra2otQ00iLCJrbG4tS0UiLCJrb2stSU4iLCJrc2ItVFoiLCJrc2YtQ00iLCJrc2gtREUiLCJsYWctVFoiLCJsa3QtVVMiLCJsdW8tS0UiLCJsdXktS0UiLCJtYXMtS0UiLCJtYXMtVFoiLCJtZXItS0UiLCJtZmUtTVUiLCJtZ2gtTVoiLCJtZ28tQ00iLCJtdWEtQ00iLCJuYXEtTkEiLCJubWctQ00iLCJubmgtQ00iLCJudXMtU0QiLCJueW4tVUciLCJyb2YtVFoiLCJyd2stVFoiLCJzYWgtUlUiLCJzYXEtS0UiLCJzYnAtVFoiLCJzZWgtTVoiLCJzZXMtTUwiLCJzaGktTGF0biIsInNoaS1MYXRuLU1BIiwic2hpLVRmbmciLCJzaGktVGZuZy1NQSIsInNtbi1GSSIsInRlby1LRSIsInRlby1VRyIsInR3cS1ORSIsInR6bS1MYXRuIiwidHptLUxhdG4tTUEiLCJ2YWktTGF0biIsInZhaS1MYXRuLUxSIiwidmFpLVZhaWkiLCJ2YWktVmFpaS1MUiIsInZ1bi1UWiIsIndhZS1DSCIsInhvZy1VRyIsInlhdi1DTSIsInpnaC1NQSIsImFmLU5BIiwiYWYtWkEiLCJhay1HSCIsImFtLUVUIiwiYXItMDAxIiwiYXItQUUiLCJhci1CSCIsImFyLURKIiwiYXItRFoiLCJhci1FRyIsImFyLUVIIiwiYXItRVIiLCJhci1JTCIsImFyLUlRIiwiYXItSk8iLCJhci1LTSIsImFyLUtXIiwiYXItTEIiLCJhci1MWSIsImFyLU1BIiwiYXItTVIiLCJhci1PTSIsImFyLVBTIiwiYXItUUEiLCJhci1TQSIsImFyLVNEIiwiYXItU08iLCJhci1TUyIsImFyLVNZIiwiYXItVEQiLCJhci1UTiIsImFyLVlFIiwiYXMtSU4iLCJhei1DeXJsIiwiYXotQ3lybC1BWiIsImF6LUxhdG4iLCJhei1MYXRuLUFaIiwiYmUtQlkiLCJiZy1CRyIsImJtLUxhdG4iLCJibS1MYXRuLU1MIiwiYm4tQkQiLCJibi1JTiIsImJvLUNOIiwiYm8tSU4iLCJici1GUiIsImJzLUN5cmwiLCJicy1DeXJsLUJBIiwiYnMtTGF0biIsImJzLUxhdG4tQkEiLCJjYS1BRCIsImNhLUVTIiwiY2EtRVMtVkFMRU5DSUEiLCJjYS1GUiIsImNhLUlUIiwiY3MtQ1oiLCJjeS1HQiIsImRhLURLIiwiZGEtR0wiLCJkZS1BVCIsImRlLUJFIiwiZGUtQ0giLCJkZS1ERSIsImRlLUxJIiwiZGUtTFUiLCJkei1CVCIsImVlLUdIIiwiZWUtVEciLCJlbC1DWSIsImVsLUdSIiwiZW4tMDAxIiwiZW4tMTUwIiwiZW4tQUciLCJlbi1BSSIsImVuLUFTIiwiZW4tQVUiLCJlbi1CQiIsImVuLUJFIiwiZW4tQk0iLCJlbi1CUyIsImVuLUJXIiwiZW4tQloiLCJlbi1DQSIsImVuLUNDIiwiZW4tQ0siLCJlbi1DTSIsImVuLUNYIiwiZW4tREciLCJlbi1ETSIsImVuLUVSIiwiZW4tRkoiLCJlbi1GSyIsImVuLUZNIiwiZW4tR0IiLCJlbi1HRCIsImVuLUdHIiwiZW4tR0giLCJlbi1HSSIsImVuLUdNIiwiZW4tR1UiLCJlbi1HWSIsImVuLUhLIiwiZW4tSUUiLCJlbi1JTSIsImVuLUlOIiwiZW4tSU8iLCJlbi1KRSIsImVuLUpNIiwiZW4tS0UiLCJlbi1LSSIsImVuLUtOIiwiZW4tS1kiLCJlbi1MQyIsImVuLUxSIiwiZW4tTFMiLCJlbi1NRyIsImVuLU1IIiwiZW4tTU8iLCJlbi1NUCIsImVuLU1TIiwiZW4tTVQiLCJlbi1NVSIsImVuLU1XIiwiZW4tTVkiLCJlbi1OQSIsImVuLU5GIiwiZW4tTkciLCJlbi1OUiIsImVuLU5VIiwiZW4tTloiLCJlbi1QRyIsImVuLVBIIiwiZW4tUEsiLCJlbi1QTiIsImVuLVBSIiwiZW4tUFciLCJlbi1SVyIsImVuLVNCIiwiZW4tU0MiLCJlbi1TRCIsImVuLVNHIiwiZW4tU0giLCJlbi1TTCIsImVuLVNTIiwiZW4tU1giLCJlbi1TWiIsImVuLVRDIiwiZW4tVEsiLCJlbi1UTyIsImVuLVRUIiwiZW4tVFYiLCJlbi1UWiIsImVuLVVHIiwiZW4tVU0iLCJlbi1VUyIsImVuLVVTLVBPU0lYIiwiZW4tVkMiLCJlbi1WRyIsImVuLVZJIiwiZW4tVlUiLCJlbi1XUyIsImVuLVpBIiwiZW4tWk0iLCJlbi1aVyIsImVvLTAwMSIsImVzLTQxOSIsImVzLUFSIiwiZXMtQk8iLCJlcy1DTCIsImVzLUNPIiwiZXMtQ1IiLCJlcy1DVSIsImVzLURPIiwiZXMtRUEiLCJlcy1FQyIsImVzLUVTIiwiZXMtR1EiLCJlcy1HVCIsImVzLUhOIiwiZXMtSUMiLCJlcy1NWCIsImVzLU5JIiwiZXMtUEEiLCJlcy1QRSIsImVzLVBIIiwiZXMtUFIiLCJlcy1QWSIsImVzLVNWIiwiZXMtVVMiLCJlcy1VWSIsImVzLVZFIiwiZXQtRUUiLCJldS1FUyIsImZhLUFGIiwiZmEtSVIiLCJmZi1DTSIsImZmLUdOIiwiZmYtTVIiLCJmZi1TTiIsImZpLUZJIiwiZm8tRk8iLCJmci1CRSIsImZyLUJGIiwiZnItQkkiLCJmci1CSiIsImZyLUJMIiwiZnItQ0EiLCJmci1DRCIsImZyLUNGIiwiZnItQ0ciLCJmci1DSCIsImZyLUNJIiwiZnItQ00iLCJmci1ESiIsImZyLURaIiwiZnItRlIiLCJmci1HQSIsImZyLUdGIiwiZnItR04iLCJmci1HUCIsImZyLUdRIiwiZnItSFQiLCJmci1LTSIsImZyLUxVIiwiZnItTUEiLCJmci1NQyIsImZyLU1GIiwiZnItTUciLCJmci1NTCIsImZyLU1RIiwiZnItTVIiLCJmci1NVSIsImZyLU5DIiwiZnItTkUiLCJmci1QRiIsImZyLVBNIiwiZnItUkUiLCJmci1SVyIsImZyLVNDIiwiZnItU04iLCJmci1TWSIsImZyLVREIiwiZnItVEciLCJmci1UTiIsImZyLVZVIiwiZnItV0YiLCJmci1ZVCIsImZ5LU5MIiwiZ2EtSUUiLCJnZC1HQiIsImdsLUVTIiwiZ3UtSU4iLCJndi1JTSIsImhhLUxhdG4iLCJoYS1MYXRuLUdIIiwiaGEtTGF0bi1ORSIsImhhLUxhdG4tTkciLCJoZS1JTCIsImhpLUlOIiwiaHItQkEiLCJoci1IUiIsImh1LUhVIiwiaHktQU0iLCJpZC1JRCIsImlnLU5HIiwiaWktQ04iLCJpcy1JUyIsIml0LUNIIiwiaXQtSVQiLCJpdC1TTSIsImphLUpQIiwia2EtR0UiLCJraS1LRSIsImtrLUN5cmwiLCJray1DeXJsLUtaIiwia2wtR0wiLCJrbS1LSCIsImtuLUlOIiwia28tS1AiLCJrby1LUiIsImtzLUFyYWIiLCJrcy1BcmFiLUlOIiwia3ctR0IiLCJreS1DeXJsIiwia3ktQ3lybC1LRyIsImxiLUxVIiwibGctVUciLCJsbi1BTyIsImxuLUNEIiwibG4tQ0YiLCJsbi1DRyIsImxvLUxBIiwibHQtTFQiLCJsdS1DRCIsImx2LUxWIiwibWctTUciLCJtay1NSyIsIm1sLUlOIiwibW4tQ3lybCIsIm1uLUN5cmwtTU4iLCJtci1JTiIsIm1zLUxhdG4iLCJtcy1MYXRuLUJOIiwibXMtTGF0bi1NWSIsIm1zLUxhdG4tU0ciLCJtdC1NVCIsIm15LU1NIiwibmItTk8iLCJuYi1TSiIsIm5kLVpXIiwibmUtSU4iLCJuZS1OUCIsIm5sLUFXIiwibmwtQkUiLCJubC1CUSIsIm5sLUNXIiwibmwtTkwiLCJubC1TUiIsIm5sLVNYIiwibm4tTk8iLCJvbS1FVCIsIm9tLUtFIiwib3ItSU4iLCJvcy1HRSIsIm9zLVJVIiwicGEtQXJhYiIsInBhLUFyYWItUEsiLCJwYS1HdXJ1IiwicGEtR3VydS1JTiIsInBsLVBMIiwicHMtQUYiLCJwdC1BTyIsInB0LUJSIiwicHQtQ1YiLCJwdC1HVyIsInB0LU1PIiwicHQtTVoiLCJwdC1QVCIsInB0LVNUIiwicHQtVEwiLCJxdS1CTyIsInF1LUVDIiwicXUtUEUiLCJybS1DSCIsInJuLUJJIiwicm8tTUQiLCJyby1STyIsInJ1LUJZIiwicnUtS0ciLCJydS1LWiIsInJ1LU1EIiwicnUtUlUiLCJydS1VQSIsInJ3LVJXIiwic2UtRkkiLCJzZS1OTyIsInNlLVNFIiwic2ctQ0YiLCJzaS1MSyIsInNrLVNLIiwic2wtU0kiLCJzbi1aVyIsInNvLURKIiwic28tRVQiLCJzby1LRSIsInNvLVNPIiwic3EtQUwiLCJzcS1NSyIsInNxLVhLIiwic3ItQ3lybCIsInNyLUN5cmwtQkEiLCJzci1DeXJsLU1FIiwic3ItQ3lybC1SUyIsInNyLUN5cmwtWEsiLCJzci1MYXRuIiwic3ItTGF0bi1CQSIsInNyLUxhdG4tTUUiLCJzci1MYXRuLVJTIiwic3ItTGF0bi1YSyIsInN2LUFYIiwic3YtRkkiLCJzdi1TRSIsInN3LUNEIiwic3ctS0UiLCJzdy1UWiIsInN3LVVHIiwidGEtSU4iLCJ0YS1MSyIsInRhLU1ZIiwidGEtU0ciLCJ0ZS1JTiIsInRoLVRIIiwidGktRVIiLCJ0aS1FVCIsInRvLVRPIiwidHItQ1kiLCJ0ci1UUiIsInVnLUFyYWIiLCJ1Zy1BcmFiLUNOIiwidWstVUEiLCJ1ci1JTiIsInVyLVBLIiwidXotQXJhYiIsInV6LUFyYWItQUYiLCJ1ei1DeXJsIiwidXotQ3lybC1VWiIsInV6LUxhdG4iLCJ1ei1MYXRuLVVaIiwidmktVk4iLCJ5aS0wMDEiLCJ5by1CSiIsInlvLU5HIiwiemgtSGFucyIsInpoLUhhbnMtQ04iLCJ6aC1IYW5zLUhLIiwiemgtSGFucy1NTyIsInpoLUhhbnMtU0ciLCJ6aC1IYW50IiwiemgtSGFudC1ISyIsInpoLUhhbnQtTU8iLCJ6aC1IYW50LVRXIiwienUtWkEiXSx1c19zdGF0ZXNfYW5kX2RjOlt7bmFtZToiQWxhYmFtYSIsYWJicmV2aWF0aW9uOiJBTCJ9LHtuYW1lOiJBbGFza2EiLGFiYnJldmlhdGlvbjoiQUsifSx7bmFtZToiQXJpem9uYSIsYWJicmV2aWF0aW9uOiJBWiJ9LHtuYW1lOiJBcmthbnNhcyIsYWJicmV2aWF0aW9uOiJBUiJ9LHtuYW1lOiJDYWxpZm9ybmlhIixhYmJyZXZpYXRpb246IkNBIn0se25hbWU6IkNvbG9yYWRvIixhYmJyZXZpYXRpb246IkNPIn0se25hbWU6IkNvbm5lY3RpY3V0IixhYmJyZXZpYXRpb246IkNUIn0se25hbWU6IkRlbGF3YXJlIixhYmJyZXZpYXRpb246IkRFIn0se25hbWU6IkRpc3RyaWN0IG9mIENvbHVtYmlhIixhYmJyZXZpYXRpb246IkRDIn0se25hbWU6IkZsb3JpZGEiLGFiYnJldmlhdGlvbjoiRkwifSx7bmFtZToiR2VvcmdpYSIsYWJicmV2aWF0aW9uOiJHQSJ9LHtuYW1lOiJIYXdhaWkiLGFiYnJldmlhdGlvbjoiSEkifSx7bmFtZToiSWRhaG8iLGFiYnJldmlhdGlvbjoiSUQifSx7bmFtZToiSWxsaW5vaXMiLGFiYnJldmlhdGlvbjoiSUwifSx7bmFtZToiSW5kaWFuYSIsYWJicmV2aWF0aW9uOiJJTiJ9LHtuYW1lOiJJb3dhIixhYmJyZXZpYXRpb246IklBIn0se25hbWU6IkthbnNhcyIsYWJicmV2aWF0aW9uOiJLUyJ9LHtuYW1lOiJLZW50dWNreSIsYWJicmV2aWF0aW9uOiJLWSJ9LHtuYW1lOiJMb3Vpc2lhbmEiLGFiYnJldmlhdGlvbjoiTEEifSx7bmFtZToiTWFpbmUiLGFiYnJldmlhdGlvbjoiTUUifSx7bmFtZToiTWFyeWxhbmQiLGFiYnJldmlhdGlvbjoiTUQifSx7bmFtZToiTWFzc2FjaHVzZXR0cyIsYWJicmV2aWF0aW9uOiJNQSJ9LHtuYW1lOiJNaWNoaWdhbiIsYWJicmV2aWF0aW9uOiJNSSJ9LHtuYW1lOiJNaW5uZXNvdGEiLGFiYnJldmlhdGlvbjoiTU4ifSx7bmFtZToiTWlzc2lzc2lwcGkiLGFiYnJldmlhdGlvbjoiTVMifSx7bmFtZToiTWlzc291cmkiLGFiYnJldmlhdGlvbjoiTU8ifSx7bmFtZToiTW9udGFuYSIsYWJicmV2aWF0aW9uOiJNVCJ9LHtuYW1lOiJOZWJyYXNrYSIsYWJicmV2aWF0aW9uOiJORSJ9LHtuYW1lOiJOZXZhZGEiLGFiYnJldmlhdGlvbjoiTlYifSx7bmFtZToiTmV3IEhhbXBzaGlyZSIsYWJicmV2aWF0aW9uOiJOSCJ9LHtuYW1lOiJOZXcgSmVyc2V5IixhYmJyZXZpYXRpb246Ik5KIn0se25hbWU6Ik5ldyBNZXhpY28iLGFiYnJldmlhdGlvbjoiTk0ifSx7bmFtZToiTmV3IFlvcmsiLGFiYnJldmlhdGlvbjoiTlkifSx7bmFtZToiTm9ydGggQ2Fyb2xpbmEiLGFiYnJldmlhdGlvbjoiTkMifSx7bmFtZToiTm9ydGggRGFrb3RhIixhYmJyZXZpYXRpb246Ik5EIn0se25hbWU6Ik9oaW8iLGFiYnJldmlhdGlvbjoiT0gifSx7bmFtZToiT2tsYWhvbWEiLGFiYnJldmlhdGlvbjoiT0sifSx7bmFtZToiT3JlZ29uIixhYmJyZXZpYXRpb246Ik9SIn0se25hbWU6IlBlbm5zeWx2YW5pYSIsYWJicmV2aWF0aW9uOiJQQSJ9LHtuYW1lOiJSaG9kZSBJc2xhbmQiLGFiYnJldmlhdGlvbjoiUkkifSx7bmFtZToiU291dGggQ2Fyb2xpbmEiLGFiYnJldmlhdGlvbjoiU0MifSx7bmFtZToiU291dGggRGFrb3RhIixhYmJyZXZpYXRpb246IlNEIn0se25hbWU6IlRlbm5lc3NlZSIsYWJicmV2aWF0aW9uOiJUTiJ9LHtuYW1lOiJUZXhhcyIsYWJicmV2aWF0aW9uOiJUWCJ9LHtuYW1lOiJVdGFoIixhYmJyZXZpYXRpb246IlVUIn0se25hbWU6IlZlcm1vbnQiLGFiYnJldmlhdGlvbjoiVlQifSx7bmFtZToiVmlyZ2luaWEiLGFiYnJldmlhdGlvbjoiVkEifSx7bmFtZToiV2FzaGluZ3RvbiIsYWJicmV2aWF0aW9uOiJXQSJ9LHtuYW1lOiJXZXN0IFZpcmdpbmlhIixhYmJyZXZpYXRpb246IldWIn0se25hbWU6Ildpc2NvbnNpbiIsYWJicmV2aWF0aW9uOiJXSSJ9LHtuYW1lOiJXeW9taW5nIixhYmJyZXZpYXRpb246IldZIn1dLHRlcnJpdG9yaWVzOlt7bmFtZToiQW1lcmljYW4gU2Ftb2EiLGFiYnJldmlhdGlvbjoiQVMifSx7bmFtZToiRmVkZXJhdGVkIFN0YXRlcyBvZiBNaWNyb25lc2lhIixhYmJyZXZpYXRpb246IkZNIn0se25hbWU6Ikd1YW0iLGFiYnJldmlhdGlvbjoiR1UifSx7bmFtZToiTWFyc2hhbGwgSXNsYW5kcyIsYWJicmV2aWF0aW9uOiJNSCJ9LHtuYW1lOiJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMiLGFiYnJldmlhdGlvbjoiTVAifSx7bmFtZToiUHVlcnRvIFJpY28iLGFiYnJldmlhdGlvbjoiUFIifSx7bmFtZToiVmlyZ2luIElzbGFuZHMsIFUuUy4iLGFiYnJldmlhdGlvbjoiVkkifV0sYXJtZWRfZm9yY2VzOlt7bmFtZToiQXJtZWQgRm9yY2VzIEV1cm9wZSIsYWJicmV2aWF0aW9uOiJBRSJ9LHtuYW1lOiJBcm1lZCBGb3JjZXMgUGFjaWZpYyIsYWJicmV2aWF0aW9uOiJBUCJ9LHtuYW1lOiJBcm1lZCBGb3JjZXMgdGhlIEFtZXJpY2FzIixhYmJyZXZpYXRpb246IkFBIn1dLGNvdW50cnlfcmVnaW9uczp7aXQ6W3tuYW1lOiJWYWxsZSBkJ0Fvc3RhIixhYmJyZXZpYXRpb246IlZEQSJ9LHtuYW1lOiJQaWVtb250ZSIsYWJicmV2aWF0aW9uOiJQSUUifSx7bmFtZToiTG9tYmFyZGlhIixhYmJyZXZpYXRpb246IkxPTSJ9LHtuYW1lOiJWZW5ldG8iLGFiYnJldmlhdGlvbjoiVkVOIn0se25hbWU6IlRyZW50aW5vIEFsdG8gQWRpZ2UiLGFiYnJldmlhdGlvbjoiVEFBIn0se25hbWU6IkZyaXVsaSBWZW5lemlhIEdpdWxpYSIsYWJicmV2aWF0aW9uOiJGVkcifSx7bmFtZToiTGlndXJpYSIsYWJicmV2aWF0aW9uOiJMSUcifSx7bmFtZToiRW1pbGlhIFJvbWFnbmEiLGFiYnJldmlhdGlvbjoiRU1SIn0se25hbWU6IlRvc2NhbmEiLGFiYnJldmlhdGlvbjoiVE9TIn0se25hbWU6IlVtYnJpYSIsYWJicmV2aWF0aW9uOiJVTUIifSx7bmFtZToiTWFyY2hlIixhYmJyZXZpYXRpb246Ik1BUiJ9LHtuYW1lOiJBYnJ1enpvIixhYmJyZXZpYXRpb246IkFCUiJ9LHtuYW1lOiJMYXppbyIsYWJicmV2aWF0aW9uOiJMQVoifSx7bmFtZToiQ2FtcGFuaWEiLGFiYnJldmlhdGlvbjoiQ0FNIn0se25hbWU6IlB1Z2xpYSIsYWJicmV2aWF0aW9uOiJQVUcifSx7bmFtZToiQmFzaWxpY2F0YSIsYWJicmV2aWF0aW9uOiJCQVMifSx7bmFtZToiTW9saXNlIixhYmJyZXZpYXRpb246Ik1PTCJ9LHtuYW1lOiJDYWxhYnJpYSIsYWJicmV2aWF0aW9uOiJDQUwifSx7bmFtZToiU2ljaWxpYSIsYWJicmV2aWF0aW9uOiJTSUMifSx7bmFtZToiU2FyZGVnbmEiLGFiYnJldmlhdGlvbjoiU0FSIn1dfSxzdHJlZXRfc3VmZml4ZXM6e3VzOlt7bmFtZToiQXZlbnVlIixhYmJyZXZpYXRpb246IkF2ZSJ9LHtuYW1lOiJCb3VsZXZhcmQiLGFiYnJldmlhdGlvbjoiQmx2ZCJ9LHtuYW1lOiJDZW50ZXIiLGFiYnJldmlhdGlvbjoiQ3RyIn0se25hbWU6IkNpcmNsZSIsYWJicmV2aWF0aW9uOiJDaXIifSx7bmFtZToiQ291cnQiLGFiYnJldmlhdGlvbjoiQ3QifSx7bmFtZToiRHJpdmUiLGFiYnJldmlhdGlvbjoiRHIifSx7bmFtZToiRXh0ZW5zaW9uIixhYmJyZXZpYXRpb246IkV4dCJ9LHtuYW1lOiJHbGVuIixhYmJyZXZpYXRpb246IkdsbiJ9LHtuYW1lOiJHcm92ZSIsYWJicmV2aWF0aW9uOiJHcnYifSx7bmFtZToiSGVpZ2h0cyIsYWJicmV2aWF0aW9uOiJIdHMifSx7bmFtZToiSGlnaHdheSIsYWJicmV2aWF0aW9uOiJId3kifSx7bmFtZToiSnVuY3Rpb24iLGFiYnJldmlhdGlvbjoiSmN0In0se25hbWU6IktleSIsYWJicmV2aWF0aW9uOiJLZXkifSx7bmFtZToiTGFuZSIsYWJicmV2aWF0aW9uOiJMbiJ9LHtuYW1lOiJMb29wIixhYmJyZXZpYXRpb246Ikxvb3AifSx7bmFtZToiTWFub3IiLGFiYnJldmlhdGlvbjoiTW5yIn0se25hbWU6Ik1pbGwiLGFiYnJldmlhdGlvbjoiTWlsbCJ9LHtuYW1lOiJQYXJrIixhYmJyZXZpYXRpb246IlBhcmsifSx7bmFtZToiUGFya3dheSIsYWJicmV2aWF0aW9uOiJQa3d5In0se25hbWU6IlBhc3MiLGFiYnJldmlhdGlvbjoiUGFzcyJ9LHtuYW1lOiJQYXRoIixhYmJyZXZpYXRpb246IlBhdGgifSx7bmFtZToiUGlrZSIsYWJicmV2aWF0aW9uOiJQaWtlIn0se25hbWU6IlBsYWNlIixhYmJyZXZpYXRpb246IlBsIn0se25hbWU6IlBsYXphIixhYmJyZXZpYXRpb246IlBseiJ9LHtuYW1lOiJQb2ludCIsYWJicmV2aWF0aW9uOiJQdCJ9LHtuYW1lOiJSaWRnZSIsYWJicmV2aWF0aW9uOiJSZGcifSx7bmFtZToiUml2ZXIiLGFiYnJldmlhdGlvbjoiUml2In0se25hbWU6IlJvYWQiLGFiYnJldmlhdGlvbjoiUmQifSx7bmFtZToiU3F1YXJlIixhYmJyZXZpYXRpb246IlNxIn0se25hbWU6IlN0cmVldCIsYWJicmV2aWF0aW9uOiJTdCJ9LHtuYW1lOiJUZXJyYWNlIixhYmJyZXZpYXRpb246IlRlciJ9LHtuYW1lOiJUcmFpbCIsYWJicmV2aWF0aW9uOiJUcmwifSx7bmFtZToiVHVybnBpa2UiLGFiYnJldmlhdGlvbjoiVHBrZSJ9LHtuYW1lOiJWaWV3IixhYmJyZXZpYXRpb246IlZ3In0se25hbWU6IldheSIsYWJicmV2aWF0aW9uOiJXYXkifV0saXQ6W3tuYW1lOiJBY2Nlc3NvIixhYmJyZXZpYXRpb246IkFjYy4ifSx7bmFtZToiQWx6YWlhIixhYmJyZXZpYXRpb246IkFsei4ifSx7bmFtZToiQXJjbyIsYWJicmV2aWF0aW9uOiJBcmNvIn0se25hbWU6IkFyY2hpdm9sdG8iLGFiYnJldmlhdGlvbjoiQWN2LiJ9LHtuYW1lOiJBcmVuYSIsYWJicmV2aWF0aW9uOiJBcmVuYSJ9LHtuYW1lOiJBcmdpbmUiLGFiYnJldmlhdGlvbjoiQXJnaW5lIn0se25hbWU6IkJhY2lubyIsYWJicmV2aWF0aW9uOiJCYWNpbm8ifSx7bmFtZToiQmFuY2hpIixhYmJyZXZpYXRpb246IkJhbmNoaSJ9LHtuYW1lOiJCYW5jaGluYSIsYWJicmV2aWF0aW9uOiJCYW4uIn0se25hbWU6IkJhc3Rpb25pIixhYmJyZXZpYXRpb246IkJhcy4ifSx7bmFtZToiQmVsdmVkZXJlIixhYmJyZXZpYXRpb246IkJlbHYuIn0se25hbWU6IkJvcmdhdGEiLGFiYnJldmlhdGlvbjoiQi50YSJ9LHtuYW1lOiJCb3JnbyIsYWJicmV2aWF0aW9uOiJCLmdvIn0se25hbWU6IkNhbGF0YSIsYWJicmV2aWF0aW9uOiJDYWwuIn0se25hbWU6IkNhbGxlIixhYmJyZXZpYXRpb246IkNhbGxlIn0se25hbWU6IkNhbXBpZWxsbyIsYWJicmV2aWF0aW9uOiJDYW0uIn0se25hbWU6IkNhbXBvIixhYmJyZXZpYXRpb246IkNhbS4ifSx7bmFtZToiQ2FuYWxlIixhYmJyZXZpYXRpb246IkNhbi4ifSx7bmFtZToiQ2FycmFpYSIsYWJicmV2aWF0aW9uOiJDYXJyLiJ9LHtuYW1lOiJDYXNjaW5hIixhYmJyZXZpYXRpb246IkNhc2NpbmEifSx7bmFtZToiQ2FzZSBzcGFyc2UiLGFiYnJldmlhdGlvbjoiYy5zLiJ9LHtuYW1lOiJDYXZhbGNhdmlhIixhYmJyZXZpYXRpb246IkN2LiJ9LHtuYW1lOiJDaXJjb252YWxsYXppb25lIixhYmJyZXZpYXRpb246IkN2LiJ9LHtuYW1lOiJDb21wbGFuYXJlIixhYmJyZXZpYXRpb246IkMucmUifSx7bmFtZToiQ29udHJhZGEiLGFiYnJldmlhdGlvbjoiQy5kYSJ9LHtuYW1lOiJDb3JzbyIsYWJicmV2aWF0aW9uOiJDLnNvIn0se25hbWU6IkNvcnRlIixhYmJyZXZpYXRpb246IkMudGUifSx7bmFtZToiQ29ydGlsZSIsYWJicmV2aWF0aW9uOiJDLmxlIn0se25hbWU6IkRpcmFtYXppb25lIixhYmJyZXZpYXRpb246IkRpci4ifSx7bmFtZToiRm9uZGFjbyIsYWJicmV2aWF0aW9uOiJGLmNvIn0se25hbWU6IkZvbmRhbWVudGEiLGFiYnJldmlhdGlvbjoiRi50YSJ9LHtuYW1lOiJGb25kbyIsYWJicmV2aWF0aW9uOiJGLmRvIn0se25hbWU6IkZyYXppb25lIixhYmJyZXZpYXRpb246IkZyLiJ9LHtuYW1lOiJJc29sYSIsYWJicmV2aWF0aW9uOiJJcy4ifSx7bmFtZToiTGFyZ28iLGFiYnJldmlhdGlvbjoiTC5nbyJ9LHtuYW1lOiJMaXRvcmFuZWEiLGFiYnJldmlhdGlvbjoiTGl0LiJ9LHtuYW1lOiJMdW5nb2xhZ28iLGFiYnJldmlhdGlvbjoiTC5nbyBsYWdvIn0se25hbWU6Ikx1bmdvIFBvIixhYmJyZXZpYXRpb246ImwuZ28gUG8ifSx7bmFtZToiTW9sbyIsYWJicmV2aWF0aW9uOiJNb2xvIn0se25hbWU6Ik11cmEiLGFiYnJldmlhdGlvbjoiTXVyYSJ9LHtuYW1lOiJQYXNzYWdnaW8gcHJpdmF0byIsYWJicmV2aWF0aW9uOiJwYXNzLiBwcml2LiJ9LHtuYW1lOiJQYXNzZWdnaWF0YSIsYWJicmV2aWF0aW9uOiJQYXNzLiJ9LHtuYW1lOiJQaWF6emEiLGFiYnJldmlhdGlvbjoiUC56emEifSx7bmFtZToiUGlhenphbGUiLGFiYnJldmlhdGlvbjoiUC5sZSJ9LHtuYW1lOiJQb250ZSIsYWJicmV2aWF0aW9uOiJQLnRlIn0se25hbWU6IlBvcnRpY28iLGFiYnJldmlhdGlvbjoiUC5jbyJ9LHtuYW1lOiJSYW1wYSIsYWJicmV2aWF0aW9uOiJSYW1wYSJ9LHtuYW1lOiJSZWdpb25lIixhYmJyZXZpYXRpb246IlJlZy4ifSx7bmFtZToiUmlvbmUiLGFiYnJldmlhdGlvbjoiUi5uZSJ9LHtuYW1lOiJSaW8iLGFiYnJldmlhdGlvbjoiUmlvIn0se25hbWU6IlJpcGEiLGFiYnJldmlhdGlvbjoiUmlwYSJ9LHtuYW1lOiJSaXZhIixhYmJyZXZpYXRpb246IlJpdmEifSx7bmFtZToiUm9uZMOyIixhYmJyZXZpYXRpb246IlJvbmTDsiJ9LHtuYW1lOiJSb3RvbmRhIixhYmJyZXZpYXRpb246IlJvdC4ifSx7bmFtZToiU2FncmF0byIsYWJicmV2aWF0aW9uOiJTYWdyLiJ9LHtuYW1lOiJTYWxpdGEiLGFiYnJldmlhdGlvbjoiU2FsLiJ9LHtuYW1lOiJTY2FsaW5hdGEiLGFiYnJldmlhdGlvbjoiU2NhbC4ifSx7bmFtZToiU2NhbG9uZSIsYWJicmV2aWF0aW9uOiJTY2FsLiJ9LHtuYW1lOiJTbGFyZ28iLGFiYnJldmlhdGlvbjoiU2wuIn0se25hbWU6IlNvdHRvcG9ydGljbyIsYWJicmV2aWF0aW9uOiJTb3R0LiJ9LHtuYW1lOiJTdHJhZGEiLGFiYnJldmlhdGlvbjoiU3RyLiJ9LHtuYW1lOiJTdHJhZGFsZSIsYWJicmV2aWF0aW9uOiJTdHIubGUifSx7bmFtZToiU3RyZXR0b2lhIixhYmJyZXZpYXRpb246IlN0cmV0dC4ifSx7bmFtZToiVHJhdmVyc2EiLGFiYnJldmlhdGlvbjoiVHJhdi4ifSx7bmFtZToiVmlhIixhYmJyZXZpYXRpb246IlYuIn0se25hbWU6IlZpYWxlIixhYmJyZXZpYXRpb246IlYubGUifSx7bmFtZToiVmljaW5hbGUiLGFiYnJldmlhdGlvbjoiVmljLmxlIn0se25hbWU6IlZpY29sbyIsYWJicmV2aWF0aW9uOiJWaWMuIn1dLHVrOlt7bmFtZToiQXZlbnVlIixhYmJyZXZpYXRpb246IkF2ZSJ9LHtuYW1lOiJDbG9zZSIsYWJicmV2aWF0aW9uOiJDbCJ9LHtuYW1lOiJDb3VydCIsYWJicmV2aWF0aW9uOiJDdCJ9LHtuYW1lOiJDcmVzY2VudCIsYWJicmV2aWF0aW9uOiJDciJ9LHtuYW1lOiJEcml2ZSIsYWJicmV2aWF0aW9uOiJEciJ9LHtuYW1lOiJHYXJkZW4iLGFiYnJldmlhdGlvbjoiR2RuIn0se25hbWU6IkdhcmRlbnMiLGFiYnJldmlhdGlvbjoiR2RucyJ9LHtuYW1lOiJHcmVlbiIsYWJicmV2aWF0aW9uOiJHbiJ9LHtuYW1lOiJHcm92ZSIsYWJicmV2aWF0aW9uOiJHciJ9LHtuYW1lOiJMYW5lIixhYmJyZXZpYXRpb246IkxuIn0se25hbWU6Ik1vdW50IixhYmJyZXZpYXRpb246Ik10In0se25hbWU6IlBsYWNlIixhYmJyZXZpYXRpb246IlBsIn0se25hbWU6IlBhcmsiLGFiYnJldmlhdGlvbjoiUGsifSx7bmFtZToiUmlkZ2UiLGFiYnJldmlhdGlvbjoiUmRnIn0se25hbWU6IlJvYWQiLGFiYnJldmlhdGlvbjoiUmQifSx7bmFtZToiU3F1YXJlIixhYmJyZXZpYXRpb246IlNxIn0se25hbWU6IlN0cmVldCIsYWJicmV2aWF0aW9uOiJTdCJ9LHtuYW1lOiJUZXJyYWNlIixhYmJyZXZpYXRpb246IlRlciJ9LHtuYW1lOiJWYWxsZXkiLGFiYnJldmlhdGlvbjoiVmFsIn1dfSxtb250aHM6W3tuYW1lOiJKYW51YXJ5IixzaG9ydF9uYW1lOiJKYW4iLG51bWVyaWM6IjAxIixkYXlzOjMxfSx7bmFtZToiRmVicnVhcnkiLHNob3J0X25hbWU6IkZlYiIsbnVtZXJpYzoiMDIiLGRheXM6Mjh9LHtuYW1lOiJNYXJjaCIsc2hvcnRfbmFtZToiTWFyIixudW1lcmljOiIwMyIsZGF5czozMX0se25hbWU6IkFwcmlsIixzaG9ydF9uYW1lOiJBcHIiLG51bWVyaWM6IjA0IixkYXlzOjMwfSx7bmFtZToiTWF5IixzaG9ydF9uYW1lOiJNYXkiLG51bWVyaWM6IjA1IixkYXlzOjMxfSx7bmFtZToiSnVuZSIsc2hvcnRfbmFtZToiSnVuIixudW1lcmljOiIwNiIsZGF5czozMH0se25hbWU6Ikp1bHkiLHNob3J0X25hbWU6Ikp1bCIsbnVtZXJpYzoiMDciLGRheXM6MzF9LHtuYW1lOiJBdWd1c3QiLHNob3J0X25hbWU6IkF1ZyIsbnVtZXJpYzoiMDgiLGRheXM6MzF9LHtuYW1lOiJTZXB0ZW1iZXIiLHNob3J0X25hbWU6IlNlcCIsbnVtZXJpYzoiMDkiLGRheXM6MzB9LHtuYW1lOiJPY3RvYmVyIixzaG9ydF9uYW1lOiJPY3QiLG51bWVyaWM6IjEwIixkYXlzOjMxfSx7bmFtZToiTm92ZW1iZXIiLHNob3J0X25hbWU6Ik5vdiIsbnVtZXJpYzoiMTEiLGRheXM6MzB9LHtuYW1lOiJEZWNlbWJlciIsc2hvcnRfbmFtZToiRGVjIixudW1lcmljOiIxMiIsZGF5czozMX1dLGNjX3R5cGVzOlt7bmFtZToiQW1lcmljYW4gRXhwcmVzcyIsc2hvcnRfbmFtZToiYW1leCIscHJlZml4OiIzNCIsbGVuZ3RoOjE1fSx7bmFtZToiQmFua2NhcmQiLHNob3J0X25hbWU6ImJhbmtjYXJkIixwcmVmaXg6IjU2MTAiLGxlbmd0aDoxNn0se25hbWU6IkNoaW5hIFVuaW9uUGF5IixzaG9ydF9uYW1lOiJjaGluYXVuaW9uIixwcmVmaXg6IjYyIixsZW5ndGg6MTZ9LHtuYW1lOiJEaW5lcnMgQ2x1YiBDYXJ0ZSBCbGFuY2hlIixzaG9ydF9uYW1lOiJkY2NhcnRlIixwcmVmaXg6IjMwMCIsbGVuZ3RoOjE0fSx7bmFtZToiRGluZXJzIENsdWIgZW5Sb3V0ZSIsc2hvcnRfbmFtZToiZGNlbnJvdXRlIixwcmVmaXg6IjIwMTQiLGxlbmd0aDoxNX0se25hbWU6IkRpbmVycyBDbHViIEludGVybmF0aW9uYWwiLHNob3J0X25hbWU6ImRjaW50bCIscHJlZml4OiIzNiIsbGVuZ3RoOjE0fSx7bmFtZToiRGluZXJzIENsdWIgVW5pdGVkIFN0YXRlcyAmIENhbmFkYSIsc2hvcnRfbmFtZToiZGN1c2MiLHByZWZpeDoiNTQiLGxlbmd0aDoxNn0se25hbWU6IkRpc2NvdmVyIENhcmQiLHNob3J0X25hbWU6ImRpc2NvdmVyIixwcmVmaXg6IjYwMTEiLGxlbmd0aDoxNn0se25hbWU6Ikluc3RhUGF5bWVudCIsc2hvcnRfbmFtZToiaW5zdGFwYXkiLHByZWZpeDoiNjM3IixsZW5ndGg6MTZ9LHtuYW1lOiJKQ0IiLHNob3J0X25hbWU6ImpjYiIscHJlZml4OiIzNTI4IixsZW5ndGg6MTZ9LHtuYW1lOiJMYXNlciIsc2hvcnRfbmFtZToibGFzZXIiLHByZWZpeDoiNjMwNCIsbGVuZ3RoOjE2fSx7bmFtZToiTWFlc3RybyIsc2hvcnRfbmFtZToibWFlc3RybyIscHJlZml4OiI1MDE4IixsZW5ndGg6MTZ9LHtuYW1lOiJNYXN0ZXJjYXJkIixzaG9ydF9uYW1lOiJtYyIscHJlZml4OiI1MSIsbGVuZ3RoOjE2fSx7bmFtZToiU29sbyIsc2hvcnRfbmFtZToic29sbyIscHJlZml4OiI2MzM0IixsZW5ndGg6MTZ9LHtuYW1lOiJTd2l0Y2giLHNob3J0X25hbWU6InN3aXRjaCIscHJlZml4OiI0OTAzIixsZW5ndGg6MTZ9LHtuYW1lOiJWaXNhIixzaG9ydF9uYW1lOiJ2aXNhIixwcmVmaXg6IjQiLGxlbmd0aDoxNn0se25hbWU6IlZpc2EgRWxlY3Ryb24iLHNob3J0X25hbWU6ImVsZWN0cm9uIixwcmVmaXg6IjQwMjYiLGxlbmd0aDoxNn1dLGN1cnJlbmN5X3R5cGVzOlt7Y29kZToiQUVEIixuYW1lOiJVbml0ZWQgQXJhYiBFbWlyYXRlcyBEaXJoYW0ifSx7Y29kZToiQUZOIixuYW1lOiJBZmdoYW5pc3RhbiBBZmdoYW5pIn0se2NvZGU6IkFMTCIsbmFtZToiQWxiYW5pYSBMZWsifSx7Y29kZToiQU1EIixuYW1lOiJBcm1lbmlhIERyYW0ifSx7Y29kZToiQU5HIixuYW1lOiJOZXRoZXJsYW5kcyBBbnRpbGxlcyBHdWlsZGVyIn0se2NvZGU6IkFPQSIsbmFtZToiQW5nb2xhIEt3YW56YSJ9LHtjb2RlOiJBUlMiLG5hbWU6IkFyZ2VudGluYSBQZXNvIn0se2NvZGU6IkFVRCIsbmFtZToiQXVzdHJhbGlhIERvbGxhciJ9LHtjb2RlOiJBV0ciLG5hbWU6IkFydWJhIEd1aWxkZXIifSx7Y29kZToiQVpOIixuYW1lOiJBemVyYmFpamFuIE5ldyBNYW5hdCJ9LHtjb2RlOiJCQU0iLG5hbWU6IkJvc25pYSBhbmQgSGVyemVnb3ZpbmEgQ29udmVydGlibGUgTWFya2EifSx7Y29kZToiQkJEIixuYW1lOiJCYXJiYWRvcyBEb2xsYXIifSx7Y29kZToiQkRUIixuYW1lOiJCYW5nbGFkZXNoIFRha2EifSx7Y29kZToiQkdOIixuYW1lOiJCdWxnYXJpYSBMZXYifSx7Y29kZToiQkhEIixuYW1lOiJCYWhyYWluIERpbmFyIn0se2NvZGU6IkJJRiIsbmFtZToiQnVydW5kaSBGcmFuYyJ9LHtjb2RlOiJCTUQiLG5hbWU6IkJlcm11ZGEgRG9sbGFyIn0se2NvZGU6IkJORCIsbmFtZToiQnJ1bmVpIERhcnVzc2FsYW0gRG9sbGFyIn0se2NvZGU6IkJPQiIsbmFtZToiQm9saXZpYSBCb2xpdmlhbm8ifSx7Y29kZToiQlJMIixuYW1lOiJCcmF6aWwgUmVhbCJ9LHtjb2RlOiJCU0QiLG5hbWU6IkJhaGFtYXMgRG9sbGFyIn0se2NvZGU6IkJUTiIsbmFtZToiQmh1dGFuIE5ndWx0cnVtIn0se2NvZGU6IkJXUCIsbmFtZToiQm90c3dhbmEgUHVsYSJ9LHtjb2RlOiJCWVIiLG5hbWU6IkJlbGFydXMgUnVibGUifSx7Y29kZToiQlpEIixuYW1lOiJCZWxpemUgRG9sbGFyIn0se2NvZGU6IkNBRCIsbmFtZToiQ2FuYWRhIERvbGxhciJ9LHtjb2RlOiJDREYiLG5hbWU6IkNvbmdvL0tpbnNoYXNhIEZyYW5jIn0se2NvZGU6IkNIRiIsbmFtZToiU3dpdHplcmxhbmQgRnJhbmMifSx7Y29kZToiQ0xQIixuYW1lOiJDaGlsZSBQZXNvIn0se2NvZGU6IkNOWSIsbmFtZToiQ2hpbmEgWXVhbiBSZW5taW5iaSJ9LHtjb2RlOiJDT1AiLG5hbWU6IkNvbG9tYmlhIFBlc28ifSx7Y29kZToiQ1JDIixuYW1lOiJDb3N0YSBSaWNhIENvbG9uIn0se2NvZGU6IkNVQyIsbmFtZToiQ3ViYSBDb252ZXJ0aWJsZSBQZXNvIn0se2NvZGU6IkNVUCIsbmFtZToiQ3ViYSBQZXNvIn0se2NvZGU6IkNWRSIsbmFtZToiQ2FwZSBWZXJkZSBFc2N1ZG8ifSx7Y29kZToiQ1pLIixuYW1lOiJDemVjaCBSZXB1YmxpYyBLb3J1bmEifSx7Y29kZToiREpGIixuYW1lOiJEamlib3V0aSBGcmFuYyJ9LHtjb2RlOiJES0siLG5hbWU6IkRlbm1hcmsgS3JvbmUifSx7Y29kZToiRE9QIixuYW1lOiJEb21pbmljYW4gUmVwdWJsaWMgUGVzbyJ9LHtjb2RlOiJEWkQiLG5hbWU6IkFsZ2VyaWEgRGluYXIifSx7Y29kZToiRUdQIixuYW1lOiJFZ3lwdCBQb3VuZCJ9LHtjb2RlOiJFUk4iLG5hbWU6IkVyaXRyZWEgTmFrZmEifSx7Y29kZToiRVRCIixuYW1lOiJFdGhpb3BpYSBCaXJyIn0se2NvZGU6IkVVUiIsbmFtZToiRXVybyBNZW1iZXIgQ291bnRyaWVzIn0se2NvZGU6IkZKRCIsbmFtZToiRmlqaSBEb2xsYXIifSx7Y29kZToiRktQIixuYW1lOiJGYWxrbGFuZCBJc2xhbmRzIChNYWx2aW5hcykgUG91bmQifSx7Y29kZToiR0JQIixuYW1lOiJVbml0ZWQgS2luZ2RvbSBQb3VuZCJ9LHtjb2RlOiJHRUwiLG5hbWU6Ikdlb3JnaWEgTGFyaSJ9LHtjb2RlOiJHR1AiLG5hbWU6Ikd1ZXJuc2V5IFBvdW5kIn0se2NvZGU6IkdIUyIsbmFtZToiR2hhbmEgQ2VkaSJ9LHtjb2RlOiJHSVAiLG5hbWU6IkdpYnJhbHRhciBQb3VuZCJ9LHtjb2RlOiJHTUQiLG5hbWU6IkdhbWJpYSBEYWxhc2kifSx7Y29kZToiR05GIixuYW1lOiJHdWluZWEgRnJhbmMifSx7Y29kZToiR1RRIixuYW1lOiJHdWF0ZW1hbGEgUXVldHphbCJ9LHtjb2RlOiJHWUQiLG5hbWU6Ikd1eWFuYSBEb2xsYXIifSx7Y29kZToiSEtEIixuYW1lOiJIb25nIEtvbmcgRG9sbGFyIn0se2NvZGU6IkhOTCIsbmFtZToiSG9uZHVyYXMgTGVtcGlyYSJ9LHtjb2RlOiJIUksiLG5hbWU6IkNyb2F0aWEgS3VuYSJ9LHtjb2RlOiJIVEciLG5hbWU6IkhhaXRpIEdvdXJkZSJ9LHtjb2RlOiJIVUYiLG5hbWU6Ikh1bmdhcnkgRm9yaW50In0se2NvZGU6IklEUiIsbmFtZToiSW5kb25lc2lhIFJ1cGlhaCJ9LHtjb2RlOiJJTFMiLG5hbWU6IklzcmFlbCBTaGVrZWwifSx7Y29kZToiSU1QIixuYW1lOiJJc2xlIG9mIE1hbiBQb3VuZCJ9LHtjb2RlOiJJTlIiLG5hbWU6IkluZGlhIFJ1cGVlIn0se2NvZGU6IklRRCIsbmFtZToiSXJhcSBEaW5hciJ9LHtjb2RlOiJJUlIiLG5hbWU6IklyYW4gUmlhbCJ9LHtjb2RlOiJJU0siLG5hbWU6IkljZWxhbmQgS3JvbmEifSx7Y29kZToiSkVQIixuYW1lOiJKZXJzZXkgUG91bmQifSx7Y29kZToiSk1EIixuYW1lOiJKYW1haWNhIERvbGxhciJ9LHtjb2RlOiJKT0QiLG5hbWU6IkpvcmRhbiBEaW5hciJ9LHtjb2RlOiJKUFkiLG5hbWU6IkphcGFuIFllbiJ9LHtjb2RlOiJLRVMiLG5hbWU6IktlbnlhIFNoaWxsaW5nIn0se2NvZGU6IktHUyIsbmFtZToiS3lyZ3l6c3RhbiBTb20ifSx7Y29kZToiS0hSIixuYW1lOiJDYW1ib2RpYSBSaWVsIn0se2NvZGU6IktNRiIsbmFtZToiQ29tb3JvcyBGcmFuYyJ9LHtjb2RlOiJLUFciLG5hbWU6IktvcmVhIChOb3J0aCkgV29uIn0se2NvZGU6IktSVyIsbmFtZToiS29yZWEgKFNvdXRoKSBXb24ifSx7Y29kZToiS1dEIixuYW1lOiJLdXdhaXQgRGluYXIifSx7Y29kZToiS1lEIixuYW1lOiJDYXltYW4gSXNsYW5kcyBEb2xsYXIifSx7Y29kZToiS1pUIixuYW1lOiJLYXpha2hzdGFuIFRlbmdlIn0se2NvZGU6IkxBSyIsbmFtZToiTGFvcyBLaXAifSx7Y29kZToiTEJQIixuYW1lOiJMZWJhbm9uIFBvdW5kIn0se2NvZGU6IkxLUiIsbmFtZToiU3JpIExhbmthIFJ1cGVlIn0se2NvZGU6IkxSRCIsbmFtZToiTGliZXJpYSBEb2xsYXIifSx7Y29kZToiTFNMIixuYW1lOiJMZXNvdGhvIExvdGkifSx7Y29kZToiTFRMIixuYW1lOiJMaXRodWFuaWEgTGl0YXMifSx7Y29kZToiTFlEIixuYW1lOiJMaWJ5YSBEaW5hciJ9LHtjb2RlOiJNQUQiLG5hbWU6Ik1vcm9jY28gRGlyaGFtIn0se2NvZGU6Ik1ETCIsbmFtZToiTW9sZG92YSBMZXUifSx7Y29kZToiTUdBIixuYW1lOiJNYWRhZ2FzY2FyIEFyaWFyeSJ9LHtjb2RlOiJNS0QiLG5hbWU6Ik1hY2Vkb25pYSBEZW5hciJ9LHtjb2RlOiJNTUsiLG5hbWU6Ik15YW5tYXIgKEJ1cm1hKSBLeWF0In0se2NvZGU6Ik1OVCIsbmFtZToiTW9uZ29saWEgVHVnaHJpayJ9LHtjb2RlOiJNT1AiLG5hbWU6Ik1hY2F1IFBhdGFjYSJ9LHtjb2RlOiJNUk8iLG5hbWU6Ik1hdXJpdGFuaWEgT3VndWl5YSJ9LHtjb2RlOiJNVVIiLG5hbWU6Ik1hdXJpdGl1cyBSdXBlZSJ9LHtjb2RlOiJNVlIiLG5hbWU6Ik1hbGRpdmVzIChNYWxkaXZlIElzbGFuZHMpIFJ1Zml5YWEifSx7Y29kZToiTVdLIixuYW1lOiJNYWxhd2kgS3dhY2hhIn0se2NvZGU6Ik1YTiIsbmFtZToiTWV4aWNvIFBlc28ifSx7Y29kZToiTVlSIixuYW1lOiJNYWxheXNpYSBSaW5nZ2l0In0se2NvZGU6Ik1aTiIsbmFtZToiTW96YW1iaXF1ZSBNZXRpY2FsIn0se2NvZGU6Ik5BRCIsbmFtZToiTmFtaWJpYSBEb2xsYXIifSx7Y29kZToiTkdOIixuYW1lOiJOaWdlcmlhIE5haXJhIn0se2NvZGU6Ik5JTyIsbmFtZToiTmljYXJhZ3VhIENvcmRvYmEifSx7Y29kZToiTk9LIixuYW1lOiJOb3J3YXkgS3JvbmUifSx7Y29kZToiTlBSIixuYW1lOiJOZXBhbCBSdXBlZSJ9LHtjb2RlOiJOWkQiLG5hbWU6Ik5ldyBaZWFsYW5kIERvbGxhciJ9LHtjb2RlOiJPTVIiLG5hbWU6Ik9tYW4gUmlhbCJ9LHtjb2RlOiJQQUIiLG5hbWU6IlBhbmFtYSBCYWxib2EifSx7Y29kZToiUEVOIixuYW1lOiJQZXJ1IE51ZXZvIFNvbCJ9LHtjb2RlOiJQR0siLG5hbWU6IlBhcHVhIE5ldyBHdWluZWEgS2luYSJ9LHtjb2RlOiJQSFAiLG5hbWU6IlBoaWxpcHBpbmVzIFBlc28ifSx7Y29kZToiUEtSIixuYW1lOiJQYWtpc3RhbiBSdXBlZSJ9LHtjb2RlOiJQTE4iLG5hbWU6IlBvbGFuZCBabG90eSJ9LHtjb2RlOiJQWUciLG5hbWU6IlBhcmFndWF5IEd1YXJhbmkifSx7Y29kZToiUUFSIixuYW1lOiJRYXRhciBSaXlhbCJ9LHtjb2RlOiJST04iLG5hbWU6IlJvbWFuaWEgTmV3IExldSJ9LHtjb2RlOiJSU0QiLG5hbWU6IlNlcmJpYSBEaW5hciJ9LHtjb2RlOiJSVUIiLG5hbWU6IlJ1c3NpYSBSdWJsZSJ9LHtjb2RlOiJSV0YiLG5hbWU6IlJ3YW5kYSBGcmFuYyJ9LHtjb2RlOiJTQVIiLG5hbWU6IlNhdWRpIEFyYWJpYSBSaXlhbCJ9LHtjb2RlOiJTQkQiLG5hbWU6IlNvbG9tb24gSXNsYW5kcyBEb2xsYXIifSx7Y29kZToiU0NSIixuYW1lOiJTZXljaGVsbGVzIFJ1cGVlIn0se2NvZGU6IlNERyIsbmFtZToiU3VkYW4gUG91bmQifSx7Y29kZToiU0VLIixuYW1lOiJTd2VkZW4gS3JvbmEifSx7Y29kZToiU0dEIixuYW1lOiJTaW5nYXBvcmUgRG9sbGFyIn0se2NvZGU6IlNIUCIsbmFtZToiU2FpbnQgSGVsZW5hIFBvdW5kIn0se2NvZGU6IlNMTCIsbmFtZToiU2llcnJhIExlb25lIExlb25lIn0se2NvZGU6IlNPUyIsbmFtZToiU29tYWxpYSBTaGlsbGluZyJ9LHtjb2RlOiJTUEwiLG5hbWU6IlNlYm9yZ2EgTHVpZ2lubyJ9LHtjb2RlOiJTUkQiLG5hbWU6IlN1cmluYW1lIERvbGxhciJ9LHtjb2RlOiJTVEQiLG5hbWU6IlPDo28gVG9tw6kgYW5kIFByw61uY2lwZSBEb2JyYSJ9LHtjb2RlOiJTVkMiLG5hbWU6IkVsIFNhbHZhZG9yIENvbG9uIn0se2NvZGU6IlNZUCIsbmFtZToiU3lyaWEgUG91bmQifSx7Y29kZToiU1pMIixuYW1lOiJTd2F6aWxhbmQgTGlsYW5nZW5pIn0se2NvZGU6IlRIQiIsbmFtZToiVGhhaWxhbmQgQmFodCJ9LHtjb2RlOiJUSlMiLG5hbWU6IlRhamlraXN0YW4gU29tb25pIn0se2NvZGU6IlRNVCIsbmFtZToiVHVya21lbmlzdGFuIE1hbmF0In0se2NvZGU6IlRORCIsbmFtZToiVHVuaXNpYSBEaW5hciJ9LHtjb2RlOiJUT1AiLG5hbWU6IlRvbmdhIFBhJ2FuZ2EifSx7Y29kZToiVFJZIixuYW1lOiJUdXJrZXkgTGlyYSJ9LHtjb2RlOiJUVEQiLG5hbWU6IlRyaW5pZGFkIGFuZCBUb2JhZ28gRG9sbGFyIn0se2NvZGU6IlRWRCIsbmFtZToiVHV2YWx1IERvbGxhciJ9LHtjb2RlOiJUV0QiLG5hbWU6IlRhaXdhbiBOZXcgRG9sbGFyIn0se2NvZGU6IlRaUyIsbmFtZToiVGFuemFuaWEgU2hpbGxpbmcifSx7Y29kZToiVUFIIixuYW1lOiJVa3JhaW5lIEhyeXZuaWEifSx7Y29kZToiVUdYIixuYW1lOiJVZ2FuZGEgU2hpbGxpbmcifSx7Y29kZToiVVNEIixuYW1lOiJVbml0ZWQgU3RhdGVzIERvbGxhciJ9LHtjb2RlOiJVWVUiLG5hbWU6IlVydWd1YXkgUGVzbyJ9LHtjb2RlOiJVWlMiLG5hbWU6IlV6YmVraXN0YW4gU29tIn0se2NvZGU6IlZFRiIsbmFtZToiVmVuZXp1ZWxhIEJvbGl2YXIifSx7Y29kZToiVk5EIixuYW1lOiJWaWV0IE5hbSBEb25nIn0se2NvZGU6IlZVViIsbmFtZToiVmFudWF0dSBWYXR1In0se2NvZGU6IldTVCIsbmFtZToiU2Ftb2EgVGFsYSJ9LHtjb2RlOiJYQUYiLG5hbWU6IkNvbW11bmF1dMOpIEZpbmFuY2nDqHJlIEFmcmljYWluZSAoQkVBQykgQ0ZBIEZyYW5jIEJFQUMifSx7Y29kZToiWENEIixuYW1lOiJFYXN0IENhcmliYmVhbiBEb2xsYXIifSx7Y29kZToiWERSIixuYW1lOiJJbnRlcm5hdGlvbmFsIE1vbmV0YXJ5IEZ1bmQgKElNRikgU3BlY2lhbCBEcmF3aW5nIFJpZ2h0cyJ9LHtjb2RlOiJYT0YiLG5hbWU6IkNvbW11bmF1dMOpIEZpbmFuY2nDqHJlIEFmcmljYWluZSAoQkNFQU8pIEZyYW5jIn0se2NvZGU6IlhQRiIsbmFtZToiQ29tcHRvaXJzIEZyYW7Dp2FpcyBkdSBQYWNpZmlxdWUgKENGUCkgRnJhbmMifSx7Y29kZToiWUVSIixuYW1lOiJZZW1lbiBSaWFsIn0se2NvZGU6IlpBUiIsbmFtZToiU291dGggQWZyaWNhIFJhbmQifSx7Y29kZToiWk1XIixuYW1lOiJaYW1iaWEgS3dhY2hhIn0se2NvZGU6IlpXRCIsbmFtZToiWmltYmFid2UgRG9sbGFyIn1dLGNvbG9yTmFtZXM6WyJBbGljZUJsdWUiLCJCbGFjayIsIk5hdnkiLCJEYXJrQmx1ZSIsIk1lZGl1bUJsdWUiLCJCbHVlIiwiRGFya0dyZWVuIiwiR3JlZW4iLCJUZWFsIiwiRGFya0N5YW4iLCJEZWVwU2t5Qmx1ZSIsIkRhcmtUdXJxdW9pc2UiLCJNZWRpdW1TcHJpbmdHcmVlbiIsIkxpbWUiLCJTcHJpbmdHcmVlbiIsIkFxdWEiLCJDeWFuIiwiTWlkbmlnaHRCbHVlIiwiRG9kZ2VyQmx1ZSIsIkxpZ2h0U2VhR3JlZW4iLCJGb3Jlc3RHcmVlbiIsIlNlYUdyZWVuIiwiRGFya1NsYXRlR3JheSIsIkxpbWVHcmVlbiIsIk1lZGl1bVNlYUdyZWVuIiwiVHVycXVvaXNlIiwiUm95YWxCbHVlIiwiU3RlZWxCbHVlIiwiRGFya1NsYXRlQmx1ZSIsIk1lZGl1bVR1cnF1b2lzZSIsIkluZGlnbyIsIkRhcmtPbGl2ZUdyZWVuIiwiQ2FkZXRCbHVlIiwiQ29ybmZsb3dlckJsdWUiLCJSZWJlY2NhUHVycGxlIiwiTWVkaXVtQXF1YU1hcmluZSIsIkRpbUdyYXkiLCJTbGF0ZUJsdWUiLCJPbGl2ZURyYWIiLCJTbGF0ZUdyYXkiLCJMaWdodFNsYXRlR3JheSIsIk1lZGl1bVNsYXRlQmx1ZSIsIkxhd25HcmVlbiIsIkNoYXJ0cmV1c2UiLCJBcXVhbWFyaW5lIiwiTWFyb29uIiwiUHVycGxlIiwiT2xpdmUiLCJHcmF5IiwiU2t5Qmx1ZSIsIkxpZ2h0U2t5Qmx1ZSIsIkJsdWVWaW9sZXQiLCJEYXJrUmVkIiwiRGFya01hZ2VudGEiLCJTYWRkbGVCcm93biIsIkl2b3J5IiwiV2hpdGUiLCJEYXJrU2VhR3JlZW4iLCJMaWdodEdyZWVuIiwiTWVkaXVtUHVycGxlIiwiRGFya1Zpb2xldCIsIlBhbGVHcmVlbiIsIkRhcmtPcmNoaWQiLCJZZWxsb3dHcmVlbiIsIlNpZW5uYSIsIkJyb3duIiwiRGFya0dyYXkiLCJMaWdodEJsdWUiLCJHcmVlblllbGxvdyIsIlBhbGVUdXJxdW9pc2UiLCJMaWdodFN0ZWVsQmx1ZSIsIlBvd2RlckJsdWUiLCJGaXJlQnJpY2siLCJEYXJrR29sZGVuUm9kIiwiTWVkaXVtT3JjaGlkIiwiUm9zeUJyb3duIiwiRGFya0toYWtpIiwiU2lsdmVyIiwiTWVkaXVtVmlvbGV0UmVkIiwiSW5kaWFuUmVkIiwiUGVydSIsIkNob2NvbGF0ZSIsIlRhbiIsIkxpZ2h0R3JheSIsIlRoaXN0bGUiLCJPcmNoaWQiLCJHb2xkZW5Sb2QiLCJQYWxlVmlvbGV0UmVkIiwiQ3JpbXNvbiIsIkdhaW5zYm9ybyIsIlBsdW0iLCJCdXJseVdvb2QiLCJMaWdodEN5YW4iLCJMYXZlbmRlciIsIkRhcmtTYWxtb24iLCJWaW9sZXQiLCJQYWxlR29sZGVuUm9kIiwiTGlnaHRDb3JhbCIsIktoYWtpIiwiQWxpY2VCbHVlIiwiSG9uZXlEZXciLCJBenVyZSIsIlNhbmR5QnJvd24iLCJXaGVhdCIsIkJlaWdlIiwiV2hpdGVTbW9rZSIsIk1pbnRDcmVhbSIsIkdob3N0V2hpdGUiLCJTYWxtb24iLCJBbnRpcXVlV2hpdGUiLCJMaW5lbiIsIkxpZ2h0R29sZGVuUm9kWWVsbG93IiwiT2xkTGFjZSIsIlJlZCIsIkZ1Y2hzaWEiLCJNYWdlbnRhIiwiRGVlcFBpbmsiLCJPcmFuZ2VSZWQiLCJUb21hdG8iLCJIb3RQaW5rIiwiQ29yYWwiLCJEYXJrT3JhbmdlIiwiTGlnaHRTYWxtb24iLCJPcmFuZ2UiLCJMaWdodFBpbmsiLCJQaW5rIiwiR29sZCIsIlBlYWNoUHVmZiIsIk5hdmFqb1doaXRlIiwiTW9jY2FzaW4iLCJCaXNxdWUiLCJNaXN0eVJvc2UiLCJCbGFuY2hlZEFsbW9uZCIsIlBhcGF5YVdoaXAiLCJMYXZlbmRlckJsdXNoIiwiU2VhU2hlbGwiLCJDb3Juc2lsayIsIkxlbW9uQ2hpZmZvbiIsIkZsb3JhbFdoaXRlIiwiU25vdyIsIlllbGxvdyIsIkxpZ2h0WWVsbG93Il0sY29tcGFueTpbIjNDb20gQ29ycCIsIjNNIENvbXBhbnkiLCJBLkcuIEVkd2FyZHMgSW5jLiIsIkFiYm90dCBMYWJvcmF0b3JpZXMiLCJBYmVyY3JvbWJpZSAmIEZpdGNoIENvLiIsIkFCTSBJbmR1c3RyaWVzIEluY29ycG9yYXRlZCIsIkFjZSBIYXJkd2FyZSBDb3Jwb3JhdGlvbiIsIkFDVCBNYW51ZmFjdHVyaW5nIEluYy4iLCJBY3Rlcm5hIENvcnAuIiwiQWRhbXMgUmVzb3VyY2VzICYgRW5lcmd5LCBJbmMuIiwiQURDIFRlbGVjb21tdW5pY2F0aW9ucywgSW5jLiIsIkFkZWxwaGlhIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uIiwiQWRtaW5pc3RhZmYsIEluYy4iLCJBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZCIsIkFkb2xwaCBDb29ycyBDb21wYW55IiwiQWR2YW5jZSBBdXRvIFBhcnRzLCBJbmMuIiwiQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiIsIkFkdmFuY2VQQ1MsIEluYy4iLCJBZHZhbnRpY2EgUmVzdGF1cmFudCBHcm91cCwgSW5jLiIsIlRoZSBBRVMgQ29ycG9yYXRpb24iLCJBZXRuYSBJbmMuIiwiQWZmaWxpYXRlZCBDb21wdXRlciBTZXJ2aWNlcywgSW5jLiIsIkFGTEFDIEluY29ycG9yYXRlZCIsIkFHQ08gQ29ycG9yYXRpb24iLCJBZ2lsZW50IFRlY2hub2xvZ2llcywgSW5jLiIsIkFnd2F5IEluYy4iLCJBcGFydG1lbnQgSW52ZXN0bWVudCBhbmQgTWFuYWdlbWVudCBDb21wYW55IiwiQWlyIFByb2R1Y3RzIGFuZCBDaGVtaWNhbHMsIEluYy4iLCJBaXJib3JuZSwgSW5jLiIsIkFpcmdhcywgSW5jLiIsIkFLIFN0ZWVsIEhvbGRpbmcgQ29ycG9yYXRpb24iLCJBbGFza2EgQWlyIEdyb3VwLCBJbmMuIiwiQWxiZXJ0by1DdWx2ZXIgQ29tcGFueSIsIkFsYmVydHNvbidzLCBJbmMuIiwiQWxjb2EgSW5jLiIsIkFsbGVnaGFueSBDb3Jwb3JhdGlvbiIsIkFsbGVnaGVueSBFbmVyZ3ksIEluYy4iLCJBbGxlZ2hlbnkgVGVjaG5vbG9naWVzIEluY29ycG9yYXRlZCIsIkFsbGVyZ2FuLCBJbmMuIiwiQUxMRVRFLCBJbmMuIiwiQWxsaWFudCBFbmVyZ3kgQ29ycG9yYXRpb24iLCJBbGxpZWQgV2FzdGUgSW5kdXN0cmllcywgSW5jLiIsIkFsbG1lcmljYSBGaW5hbmNpYWwgQ29ycG9yYXRpb24iLCJUaGUgQWxsc3RhdGUgQ29ycG9yYXRpb24iLCJBTExURUwgQ29ycG9yYXRpb24iLCJUaGUgQWxwaW5lIEdyb3VwLCBJbmMuIiwiQW1hem9uLmNvbSwgSW5jLiIsIkFNQyBFbnRlcnRhaW5tZW50IEluYy4iLCJBbWVyaWNhbiBQb3dlciBDb252ZXJzaW9uIENvcnBvcmF0aW9uIiwiQW1lcmFkYSBIZXNzIENvcnBvcmF0aW9uIiwiQU1FUkNPIiwiQW1lcmVuIENvcnBvcmF0aW9uIiwiQW1lcmljYSBXZXN0IEhvbGRpbmdzIENvcnBvcmF0aW9uIiwiQW1lcmljYW4gQXhsZSAmIE1hbnVmYWN0dXJpbmcgSG9sZGluZ3MsIEluYy4iLCJBbWVyaWNhbiBFYWdsZSBPdXRmaXR0ZXJzLCBJbmMuIiwiQW1lcmljYW4gRWxlY3RyaWMgUG93ZXIgQ29tcGFueSwgSW5jLiIsIkFtZXJpY2FuIEV4cHJlc3MgQ29tcGFueSIsIkFtZXJpY2FuIEZpbmFuY2lhbCBHcm91cCwgSW5jLiIsIkFtZXJpY2FuIEdyZWV0aW5ncyBDb3Jwb3JhdGlvbiIsIkFtZXJpY2FuIEludGVybmF0aW9uYWwgR3JvdXAsIEluYy4iLCJBbWVyaWNhbiBTdGFuZGFyZCBDb21wYW5pZXMgSW5jLiIsIkFtZXJpY2FuIFdhdGVyIFdvcmtzIENvbXBhbnksIEluYy4iLCJBbWVyaXNvdXJjZUJlcmdlbiBDb3Jwb3JhdGlvbiIsIkFtZXMgRGVwYXJ0bWVudCBTdG9yZXMsIEluYy4iLCJBbWdlbiBJbmMuIiwiQW1rb3IgVGVjaG5vbG9neSwgSW5jLiIsIkFNUiBDb3Jwb3JhdGlvbiIsIkFtU291dGggQmFuY29ycC4iLCJBbXRyYW4sIEluYy4iLCJBbmFkYXJrbyBQZXRyb2xldW0gQ29ycG9yYXRpb24iLCJBbmFsb2cgRGV2aWNlcywgSW5jLiIsIkFuaGV1c2VyLUJ1c2NoIENvbXBhbmllcywgSW5jLiIsIkFuaXh0ZXIgSW50ZXJuYXRpb25hbCBJbmMuIiwiQW5uVGF5bG9yIEluYy4iLCJBbnRoZW0sIEluYy4iLCJBT0wgVGltZSBXYXJuZXIgSW5jLiIsIkFvbiBDb3Jwb3JhdGlvbiIsIkFwYWNoZSBDb3Jwb3JhdGlvbiIsIkFwcGxlIENvbXB1dGVyLCBJbmMuIiwiQXBwbGVyYSBDb3Jwb3JhdGlvbiIsIkFwcGxpZWQgSW5kdXN0cmlhbCBUZWNobm9sb2dpZXMsIEluYy4iLCJBcHBsaWVkIE1hdGVyaWFscywgSW5jLiIsIkFxdWlsYSwgSW5jLiIsIkFSQU1BUksgQ29ycG9yYXRpb24iLCJBcmNoIENvYWwsIEluYy4iLCJBcmNoZXIgRGFuaWVscyBNaWRsYW5kIENvbXBhbnkiLCJBcmthbnNhcyBCZXN0IENvcnBvcmF0aW9uIiwiQXJtc3Ryb25nIEhvbGRpbmdzLCBJbmMuIiwiQXJyb3cgRWxlY3Ryb25pY3MsIEluYy4iLCJBcnZpbk1lcml0b3IsIEluYy4iLCJBc2hsYW5kIEluYy4iLCJBc3RvcmlhIEZpbmFuY2lhbCBDb3Jwb3JhdGlvbiIsIkFUJlQgQ29ycC4iLCJBdG1lbCBDb3Jwb3JhdGlvbiIsIkF0bW9zIEVuZXJneSBDb3Jwb3JhdGlvbiIsIkF1ZGlvdm94IENvcnBvcmF0aW9uIiwiQXV0b2xpdiwgSW5jLiIsIkF1dG9tYXRpYyBEYXRhIFByb2Nlc3NpbmcsIEluYy4iLCJBdXRvTmF0aW9uLCBJbmMuIiwiQXV0b1pvbmUsIEluYy4iLCJBdmF5YSBJbmMuIiwiQXZlcnkgRGVubmlzb24gQ29ycG9yYXRpb24iLCJBdmlzdGEgQ29ycG9yYXRpb24iLCJBdm5ldCwgSW5jLiIsIkF2b24gUHJvZHVjdHMsIEluYy4iLCJCYWtlciBIdWdoZXMgSW5jb3Jwb3JhdGVkIiwiQmFsbCBDb3Jwb3JhdGlvbiIsIkJhbmsgb2YgQW1lcmljYSBDb3Jwb3JhdGlvbiIsIlRoZSBCYW5rIG9mIE5ldyBZb3JrIENvbXBhbnksIEluYy4iLCJCYW5rIE9uZSBDb3Jwb3JhdGlvbiIsIkJhbmtub3J0aCBHcm91cCwgSW5jLiIsIkJhbnRhIENvcnBvcmF0aW9uIiwiQmFybmVzICYgTm9ibGUsIEluYy4iLCJCYXVzY2ggJiBMb21iIEluY29ycG9yYXRlZCIsIkJheHRlciBJbnRlcm5hdGlvbmFsIEluYy4iLCJCQiZUIENvcnBvcmF0aW9uIiwiVGhlIEJlYXIgU3RlYXJucyBDb21wYW5pZXMgSW5jLiIsIkJlYXplciBIb21lcyBVU0EsIEluYy4iLCJCZWNrbWFuIENvdWx0ZXIsIEluYy4iLCJCZWN0b24sIERpY2tpbnNvbiBhbmQgQ29tcGFueSIsIkJlZCBCYXRoICYgQmV5b25kIEluYy4iLCJCZWxrLCBJbmMuIiwiQmVsbCBNaWNyb3Byb2R1Y3RzIEluYy4iLCJCZWxsU291dGggQ29ycG9yYXRpb24iLCJCZWxvIENvcnAuIiwiQmVtaXMgQ29tcGFueSwgSW5jLiIsIkJlbmNobWFyayBFbGVjdHJvbmljcywgSW5jLiIsIkJlcmtzaGlyZSBIYXRoYXdheSBJbmMuIiwiQmVzdCBCdXkgQ28uLCBJbmMuIiwiQmV0aGxlaGVtIFN0ZWVsIENvcnBvcmF0aW9uIiwiQmV2ZXJseSBFbnRlcnByaXNlcywgSW5jLiIsIkJpZyBMb3RzLCBJbmMuIiwiQkogU2VydmljZXMgQ29tcGFueSIsIkJKJ3MgV2hvbGVzYWxlIENsdWIsIEluYy4iLCJUaGUgQmxhY2sgJiBEZWNrZXIgQ29ycG9yYXRpb24iLCJCbGFjayBIaWxscyBDb3Jwb3JhdGlvbiIsIkJNQyBTb2Z0d2FyZSwgSW5jLiIsIlRoZSBCb2VpbmcgQ29tcGFueSIsIkJvaXNlIENhc2NhZGUgQ29ycG9yYXRpb24iLCJCb3JkZXJzIEdyb3VwLCBJbmMuIiwiQm9yZ1dhcm5lciBJbmMuIiwiQm9zdG9uIFNjaWVudGlmaWMgQ29ycG9yYXRpb24iLCJCb3dhdGVyIEluY29ycG9yYXRlZCIsIkJyaWdncyAmIFN0cmF0dG9uIENvcnBvcmF0aW9uIiwiQnJpZ2h0cG9pbnQsIEluYy4iLCJCcmlua2VyIEludGVybmF0aW9uYWwsIEluYy4iLCJCcmlzdG9sLU15ZXJzIFNxdWliYiBDb21wYW55IiwiQnJvYWR3aW5nLCBJbmMuIiwiQnJvd24gU2hvZSBDb21wYW55LCBJbmMuIiwiQnJvd24tRm9ybWFuIENvcnBvcmF0aW9uIiwiQnJ1bnN3aWNrIENvcnBvcmF0aW9uIiwiQnVkZ2V0IEdyb3VwLCBJbmMuIiwiQnVybGluZ3RvbiBDb2F0IEZhY3RvcnkgV2FyZWhvdXNlIENvcnBvcmF0aW9uIiwiQnVybGluZ3RvbiBJbmR1c3RyaWVzLCBJbmMuIiwiQnVybGluZ3RvbiBOb3J0aGVybiBTYW50YSBGZSBDb3Jwb3JhdGlvbiIsIkJ1cmxpbmd0b24gUmVzb3VyY2VzIEluYy4iLCJDLiBILiBSb2JpbnNvbiBXb3JsZHdpZGUgSW5jLiIsIkNhYmxldmlzaW9uIFN5c3RlbXMgQ29ycCIsIkNhYm90IENvcnAiLCJDYWRlbmNlIERlc2lnbiBTeXN0ZW1zLCBJbmMuIiwiQ2FscGluZSBDb3JwLiIsIkNhbXBiZWxsIFNvdXAgQ28uIiwiQ2FwaXRhbCBPbmUgRmluYW5jaWFsIENvcnAuIiwiQ2FyZGluYWwgSGVhbHRoIEluYy4iLCJDYXJlbWFyayBSeCBJbmMuIiwiQ2FybGlzbGUgQ29zLiBJbmMuIiwiQ2FycGVudGVyIFRlY2hub2xvZ3kgQ29ycC4iLCJDYXNleSdzIEdlbmVyYWwgU3RvcmVzIEluYy4iLCJDYXRlcnBpbGxhciBJbmMuIiwiQ0JSTCBHcm91cCBJbmMuIiwiQ0RJIENvcnAuIiwiQ0RXIENvbXB1dGVyIENlbnRlcnMgSW5jLiIsIkNlbGxTdGFyIENvcnAuIiwiQ2VuZGFudCBDb3JwIiwiQ2VuZXggSGFydmVzdCBTdGF0ZXMgQ29vcGVyYXRpdmVzIiwiQ2VudGV4IENvcnAuIiwiQ2VudHVyeVRlbCBJbmMuIiwiQ2VyaWRpYW4gQ29ycC4iLCJDSDJNIEhpbGwgQ29zLiBMdGQuIiwiQ2hhbXBpb24gRW50ZXJwcmlzZXMgSW5jLiIsIkNoYXJsZXMgU2Nod2FiIENvcnAuIiwiQ2hhcm1pbmcgU2hvcHBlcyBJbmMuIiwiQ2hhcnRlciBDb21tdW5pY2F0aW9ucyBJbmMuIiwiQ2hhcnRlciBPbmUgRmluYW5jaWFsIEluYy4iLCJDaGV2cm9uVGV4YWNvIENvcnAuIiwiQ2hpcXVpdGEgQnJhbmRzIEludGVybmF0aW9uYWwgSW5jLiIsIkNodWJiIENvcnAiLCJDaWVuYSBDb3JwLiIsIkNpZ25hIENvcnAiLCJDaW5jaW5uYXRpIEZpbmFuY2lhbCBDb3JwLiIsIkNpbmVyZ3kgQ29ycC4iLCJDaW50YXMgQ29ycC4iLCJDaXJjdWl0IENpdHkgU3RvcmVzIEluYy4iLCJDaXNjbyBTeXN0ZW1zIEluYy4iLCJDaXRpZ3JvdXAsIEluYyIsIkNpdGl6ZW5zIENvbW11bmljYXRpb25zIENvLiIsIkNLRSBSZXN0YXVyYW50cyBJbmMuIiwiQ2xlYXIgQ2hhbm5lbCBDb21tdW5pY2F0aW9ucyBJbmMuIiwiVGhlIENsb3JveCBDby4iLCJDTUdJIEluYy4iLCJDTVMgRW5lcmd5IENvcnAuIiwiQ05GIEluYy4iLCJDb2NhLUNvbGEgQ28uIiwiQ29jYS1Db2xhIEVudGVycHJpc2VzIEluYy4iLCJDb2xnYXRlLVBhbG1vbGl2ZSBDby4iLCJDb2xsaW5zICYgQWlrbWFuIENvcnAuIiwiQ29tY2FzdCBDb3JwLiIsIkNvbWRpc2NvIEluYy4iLCJDb21lcmljYSBJbmMuIiwiQ29tZm9ydCBTeXN0ZW1zIFVTQSBJbmMuIiwiQ29tbWVyY2lhbCBNZXRhbHMgQ28uIiwiQ29tbXVuaXR5IEhlYWx0aCBTeXN0ZW1zIEluYy4iLCJDb21wYXNzIEJhbmNzaGFyZXMgSW5jIiwiQ29tcHV0ZXIgQXNzb2NpYXRlcyBJbnRlcm5hdGlvbmFsIEluYy4iLCJDb21wdXRlciBTY2llbmNlcyBDb3JwLiIsIkNvbXB1d2FyZSBDb3JwLiIsIkNvbXZlcnNlIFRlY2hub2xvZ3kgSW5jLiIsIkNvbkFncmEgRm9vZHMgSW5jLiIsIkNvbmNvcmQgRUZTIEluYy4iLCJDb25lY3RpdiwgSW5jIiwiQ29ub2NvIEluYyIsIkNvbnNlY28gSW5jLiIsIkNvbnNvbGlkYXRlZCBGcmVpZ2h0d2F5cyBDb3JwLiIsIkNvbnNvbGlkYXRlZCBFZGlzb24gSW5jLiIsIkNvbnN0ZWxsYXRpb24gQnJhbmRzIEluYy4iLCJDb25zdGVsbGF0aW9uIEVtZXJneSBHcm91cCBJbmMuIiwiQ29udGluZW50YWwgQWlybGluZXMgSW5jLiIsIkNvbnZlcmd5cyBDb3JwLiIsIkNvb3BlciBDYW1lcm9uIENvcnAuIiwiQ29vcGVyIEluZHVzdHJpZXMgTHRkLiIsIkNvb3BlciBUaXJlICYgUnViYmVyIENvLiIsIkNvcm4gUHJvZHVjdHMgSW50ZXJuYXRpb25hbCBJbmMuIiwiQ29ybmluZyBJbmMuIiwiQ29zdGNvIFdob2xlc2FsZSBDb3JwLiIsIkNvdW50cnl3aWRlIENyZWRpdCBJbmR1c3RyaWVzIEluYy4iLCJDb3ZlbnRyeSBIZWFsdGggQ2FyZSBJbmMuIiwiQ294IENvbW11bmljYXRpb25zIEluYy4iLCJDcmFuZSBDby4iLCJDcm9tcHRvbiBDb3JwLiIsIkNyb3duIENvcmsgJiBTZWFsIENvLiBJbmMuIiwiQ1NLIEF1dG8gQ29ycC4iLCJDU1ggQ29ycC4iLCJDdW1taW5zIEluYy4iLCJDVlMgQ29ycC4iLCJDeXRlYyBJbmR1c3RyaWVzIEluYy4iLCJEJksgSGVhbHRoY2FyZSBSZXNvdXJjZXMsIEluYy4iLCJELlIuIEhvcnRvbiBJbmMuIiwiRGFuYSBDb3Jwb3JhdGlvbiIsIkRhbmFoZXIgQ29ycG9yYXRpb24iLCJEYXJkZW4gUmVzdGF1cmFudHMgSW5jLiIsIkRhVml0YSBJbmMuIiwiRGVhbiBGb29kcyBDb21wYW55IiwiRGVlcmUgJiBDb21wYW55IiwiRGVsIE1vbnRlIEZvb2RzIENvIiwiRGVsbCBDb21wdXRlciBDb3Jwb3JhdGlvbiIsIkRlbHBoaSBDb3JwLiIsIkRlbHRhIEFpciBMaW5lcyBJbmMuIiwiRGVsdXhlIENvcnBvcmF0aW9uIiwiRGV2b24gRW5lcmd5IENvcnBvcmF0aW9uIiwiRGkgR2lvcmdpbyBDb3Jwb3JhdGlvbiIsIkRpYWwgQ29ycG9yYXRpb24iLCJEaWVib2xkIEluY29ycG9yYXRlZCIsIkRpbGxhcmQncyBJbmMuIiwiRElNT04gSW5jb3Jwb3JhdGVkIiwiRG9sZSBGb29kIENvbXBhbnksIEluYy4iLCJEb2xsYXIgR2VuZXJhbCBDb3Jwb3JhdGlvbiIsIkRvbGxhciBUcmVlIFN0b3JlcywgSW5jLiIsIkRvbWluaW9uIFJlc291cmNlcywgSW5jLiIsIkRvbWlubydzIFBpenphIExMQyIsIkRvdmVyIENvcnBvcmF0aW9uLCBJbmMuIiwiRG93IENoZW1pY2FsIENvbXBhbnkiLCJEb3cgSm9uZXMgJiBDb21wYW55LCBJbmMuIiwiRFBMIEluYy4iLCJEUUUgSW5jLiIsIkRyZXllcidzIEdyYW5kIEljZSBDcmVhbSwgSW5jLiIsIkRTVCBTeXN0ZW1zLCBJbmMuIiwiRFRFIEVuZXJneSBDby4iLCJFLkkuIER1IFBvbnQgZGUgTmVtb3VycyBhbmQgQ29tcGFueSIsIkR1a2UgRW5lcmd5IENvcnAiLCJEdW4gJiBCcmFkc3RyZWV0IEluYy4iLCJEVVJBIEF1dG9tb3RpdmUgU3lzdGVtcyBJbmMuIiwiRHluQ29ycCIsIkR5bmVneSBJbmMuIiwiRSpUcmFkZSBHcm91cCwgSW5jLiIsIkUuVy4gU2NyaXBwcyBDb21wYW55IiwiRWFydGhsaW5rLCBJbmMuIiwiRWFzdG1hbiBDaGVtaWNhbCBDb21wYW55IiwiRWFzdG1hbiBLb2RhayBDb21wYW55IiwiRWF0b24gQ29ycG9yYXRpb24iLCJFY2hvc3RhciBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbiIsIkVjb2xhYiBJbmMuIiwiRWRpc29uIEludGVybmF0aW9uYWwiLCJFR0wgSW5jLiIsIkVsIFBhc28gQ29ycG9yYXRpb24iLCJFbGVjdHJvbmljIEFydHMgSW5jLiIsIkVsZWN0cm9uaWMgRGF0YSBTeXN0ZW1zIENvcnAuIiwiRWxpIExpbGx5IGFuZCBDb21wYW55IiwiRU1DIENvcnBvcmF0aW9uIiwiRW1jb3IgR3JvdXAgSW5jLiIsIkVtZXJzb24gRWxlY3RyaWMgQ28uIiwiRW5jb21wYXNzIFNlcnZpY2VzIENvcnBvcmF0aW9uIiwiRW5lcmdpemVyIEhvbGRpbmdzIEluYy4iLCJFbmVyZ3kgRWFzdCBDb3Jwb3JhdGlvbiIsIkVuZ2VsaGFyZCBDb3Jwb3JhdGlvbiIsIkVucm9uIENvcnAuIiwiRW50ZXJneSBDb3Jwb3JhdGlvbiIsIkVudGVycHJpc2UgUHJvZHVjdHMgUGFydG5lcnMgTC5QLiIsIkVPRyBSZXNvdXJjZXMsIEluYy4iLCJFcXVpZmF4IEluYy4iLCJFcXVpdGFibGUgUmVzb3VyY2VzIEluYy4iLCJFcXVpdHkgT2ZmaWNlIFByb3BlcnRpZXMgVHJ1c3QiLCJFcXVpdHkgUmVzaWRlbnRpYWwgUHJvcGVydGllcyBUcnVzdCIsIkVzdGVlIExhdWRlciBDb21wYW5pZXMgSW5jLiIsIkV4ZWxvbiBDb3Jwb3JhdGlvbiIsIkV4aWRlIFRlY2hub2xvZ2llcyIsIkV4cGVkaXRvcnMgSW50ZXJuYXRpb25hbCBvZiBXYXNoaW5ndG9uIEluYy4iLCJFeHByZXNzIFNjcmlwdHMgSW5jLiIsIkV4eG9uTW9iaWwgQ29ycG9yYXRpb24iLCJGYWlyY2hpbGQgU2VtaWNvbmR1Y3RvciBJbnRlcm5hdGlvbmFsIEluYy4iLCJGYW1pbHkgRG9sbGFyIFN0b3JlcyBJbmMuIiwiRmFybWxhbmQgSW5kdXN0cmllcyBJbmMuIiwiRmVkZXJhbCBNb2d1bCBDb3JwLiIsIkZlZGVyYXRlZCBEZXBhcnRtZW50IFN0b3JlcyBJbmMuIiwiRmVkZXJhbCBFeHByZXNzIENvcnAuIiwiRmVsY29yIExvZGdpbmcgVHJ1c3QgSW5jLiIsIkZlcnJvIENvcnAuIiwiRmlkZWxpdHkgTmF0aW9uYWwgRmluYW5jaWFsIEluYy4iLCJGaWZ0aCBUaGlyZCBCYW5jb3JwIiwiRmlyc3QgQW1lcmljYW4gRmluYW5jaWFsIENvcnAuIiwiRmlyc3QgRGF0YSBDb3JwLiIsIkZpcnN0IE5hdGlvbmFsIG9mIE5lYnJhc2thIEluYy4iLCJGaXJzdCBUZW5uZXNzZWUgTmF0aW9uYWwgQ29ycC4iLCJGaXJzdEVuZXJneSBDb3JwLiIsIkZpc2VydiBJbmMuIiwiRmlzaGVyIFNjaWVudGlmaWMgSW50ZXJuYXRpb25hbCBJbmMuIiwiRmxlZXRCb3N0b24gRmluYW5jaWFsIENvLiIsIkZsZWV0d29vZCBFbnRlcnByaXNlcyBJbmMuIiwiRmxlbWluZyBDb21wYW5pZXMgSW5jLiIsIkZsb3dlcnMgRm9vZHMgSW5jLiIsIkZsb3dzZXJ2IENvcnAiLCJGbHVvciBDb3JwIiwiRk1DIENvcnAiLCJGb2FtZXggSW50ZXJuYXRpb25hbCBJbmMiLCJGb290IExvY2tlciBJbmMiLCJGb290c3RhciBJbmMuIiwiRm9yZCBNb3RvciBDbyIsIkZvcmVzdCBMYWJvcmF0b3JpZXMgSW5jLiIsIkZvcnR1bmUgQnJhbmRzIEluYy4iLCJGb3N0ZXIgV2hlZWxlciBMdGQuIiwiRlBMIEdyb3VwIEluYy4iLCJGcmFua2xpbiBSZXNvdXJjZXMgSW5jLiIsIkZyZWVwb3J0IE1jTW9yYW4gQ29wcGVyICYgR29sZCBJbmMuIiwiRnJvbnRpZXIgT2lsIENvcnAiLCJGdXJuaXR1cmUgQnJhbmRzIEludGVybmF0aW9uYWwgSW5jLiIsIkdhbm5ldHQgQ28uLCBJbmMuIiwiR2FwIEluYy4iLCJHYXRld2F5IEluYy4iLCJHQVRYIENvcnBvcmF0aW9uIiwiR2Vtc3Rhci1UViBHdWlkZSBJbnRlcm5hdGlvbmFsIEluYy4iLCJHZW5Db3JwIEluYy4iLCJHZW5lcmFsIENhYmxlIENvcnBvcmF0aW9uIiwiR2VuZXJhbCBEeW5hbWljcyBDb3Jwb3JhdGlvbiIsIkdlbmVyYWwgRWxlY3RyaWMgQ29tcGFueSIsIkdlbmVyYWwgTWlsbHMgSW5jIiwiR2VuZXJhbCBNb3RvcnMgQ29ycG9yYXRpb24iLCJHZW5lc2lzIEhlYWx0aCBWZW50dXJlcyBJbmMuIiwiR2VudGVrIEluYy4iLCJHZW50aXZhIEhlYWx0aCBTZXJ2aWNlcyBJbmMuIiwiR2VudWluZSBQYXJ0cyBDb21wYW55IiwiR2VudWl0eSBJbmMuIiwiR2VuenltZSBDb3Jwb3JhdGlvbiIsIkdlb3JnaWEgR3VsZiBDb3Jwb3JhdGlvbiIsIkdlb3JnaWEtUGFjaWZpYyBDb3Jwb3JhdGlvbiIsIkdpbGxldHRlIENvbXBhbnkiLCJHb2xkIEtpc3QgSW5jLiIsIkdvbGRlbiBTdGF0ZSBCYW5jb3JwIEluYy4iLCJHb2xkZW4gV2VzdCBGaW5hbmNpYWwgQ29ycG9yYXRpb24iLCJHb2xkbWFuIFNhY2hzIEdyb3VwIEluYy4iLCJHb29kcmljaCBDb3Jwb3JhdGlvbiIsIlRoZSBHb29keWVhciBUaXJlICYgUnViYmVyIENvbXBhbnkiLCJHcmFuaXRlIENvbnN0cnVjdGlvbiBJbmNvcnBvcmF0ZWQiLCJHcmF5YmFyIEVsZWN0cmljIENvbXBhbnkgSW5jLiIsIkdyZWF0IExha2VzIENoZW1pY2FsIENvcnBvcmF0aW9uIiwiR3JlYXQgUGxhaW5zIEVuZXJneSBJbmMuIiwiR3JlZW5Qb2ludCBGaW5hbmNpYWwgQ29ycC4iLCJHcmVpZiBCcm9zLiBDb3Jwb3JhdGlvbiIsIkdyZXkgR2xvYmFsIEdyb3VwIEluYy4iLCJHcm91cCAxIEF1dG9tb3RpdmUgSW5jLiIsIkd1aWRhbnQgQ29ycG9yYXRpb24iLCJIJlIgQmxvY2sgSW5jLiIsIkguQi4gRnVsbGVyIENvbXBhbnkiLCJILkouIEhlaW56IENvbXBhbnkiLCJIYWxsaWJ1cnRvbiBDby4iLCJIYXJsZXktRGF2aWRzb24gSW5jLiIsIkhhcm1hbiBJbnRlcm5hdGlvbmFsIEluZHVzdHJpZXMgSW5jLiIsIkhhcnJhaCdzIEVudGVydGFpbm1lbnQgSW5jLiIsIkhhcnJpcyBDb3JwLiIsIkhhcnNjbyBDb3JwLiIsIkhhcnRmb3JkIEZpbmFuY2lhbCBTZXJ2aWNlcyBHcm91cCBJbmMuIiwiSGFzYnJvIEluYy4iLCJIYXdhaWlhbiBFbGVjdHJpYyBJbmR1c3RyaWVzIEluYy4iLCJIQ0EgSW5jLiIsIkhlYWx0aCBNYW5hZ2VtZW50IEFzc29jaWF0ZXMgSW5jLiIsIkhlYWx0aCBOZXQgSW5jLiIsIkhlYWx0aHNvdXRoIENvcnAiLCJIZW5yeSBTY2hlaW4gSW5jLiIsIkhlcmN1bGVzIEluYy4iLCJIZXJtYW4gTWlsbGVyIEluYy4iLCJIZXJzaGV5IEZvb2RzIENvcnAuIiwiSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkiLCJIaWJlcm5pYSBDb3JwLiIsIkhpbGxlbmJyYW5kIEluZHVzdHJpZXMgSW5jLiIsIkhpbHRvbiBIb3RlbHMgQ29ycC4iLCJIb2xseXdvb2QgRW50ZXJ0YWlubWVudCBDb3JwLiIsIkhvbWUgRGVwb3QgSW5jLiIsIkhvbiBJbmR1c3RyaWVzIEluYy4iLCJIb25leXdlbGwgSW50ZXJuYXRpb25hbCBJbmMuIiwiSG9ybWVsIEZvb2RzIENvcnAuIiwiSG9zdCBNYXJyaW90dCBDb3JwLiIsIkhvdXNlaG9sZCBJbnRlcm5hdGlvbmFsIENvcnAuIiwiSG92bmFuaWFuIEVudGVycHJpc2VzIEluYy4iLCJIdWIgR3JvdXAgSW5jLiIsIkh1YmJlbGwgSW5jLiIsIkh1Z2hlcyBTdXBwbHkgSW5jLiIsIkh1bWFuYSBJbmMuIiwiSHVudGluZ3RvbiBCYW5jc2hhcmVzIEluYy4iLCJJZGFjb3JwIEluYy4iLCJJRFQgQ29ycG9yYXRpb24iLCJJS09OIE9mZmljZSBTb2x1dGlvbnMgSW5jLiIsIklsbGlub2lzIFRvb2wgV29ya3MgSW5jLiIsIklNQyBHbG9iYWwgSW5jLiIsIkltcGVyaWFsIFN1Z2FyIENvbXBhbnkiLCJJTVMgSGVhbHRoIEluYy4iLCJJbmdsZXMgTWFya2V0IEluYyIsIkluZ3JhbSBNaWNybyBJbmMuIiwiSW5zaWdodCBFbnRlcnByaXNlcyBJbmMuIiwiSW50ZWdyYXRlZCBFbGVjdHJpY2FsIFNlcnZpY2VzIEluYy4iLCJJbnRlbCBDb3Jwb3JhdGlvbiIsIkludGVybmF0aW9uYWwgUGFwZXIgQ28uIiwiSW50ZXJwdWJsaWMgR3JvdXAgb2YgQ29tcGFuaWVzIEluYy4iLCJJbnRlcnN0YXRlIEJha2VyaWVzIENvcnBvcmF0aW9uIiwiSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3JwLiIsIkludGVybmF0aW9uYWwgRmxhdm9ycyAmIEZyYWdyYW5jZXMgSW5jLiIsIkludGVybmF0aW9uYWwgTXVsdGlmb29kcyBDb3Jwb3JhdGlvbiIsIkludHVpdCBJbmMuIiwiSVQgR3JvdXAgSW5jLiIsIklUVCBJbmR1c3RyaWVzIEluYy4iLCJJdmF4IENvcnAuIiwiSi5CLiBIdW50IFRyYW5zcG9ydCBTZXJ2aWNlcyBJbmMuIiwiSi5DLiBQZW5ueSBDby4iLCJKLlAuIE1vcmdhbiBDaGFzZSAmIENvLiIsIkphYmlsIENpcmN1aXQgSW5jLiIsIkphY2sgSW4gVGhlIEJveCBJbmMuIiwiSmFjb2JzIEVuZ2luZWVyaW5nIEdyb3VwIEluYy4iLCJKRFMgVW5pcGhhc2UgQ29ycC4iLCJKZWZmZXJzb24tUGlsb3QgQ28uIiwiSm9obiBIYW5jb2NrIEZpbmFuY2lhbCBTZXJ2aWNlcyBJbmMuIiwiSm9obnNvbiAmIEpvaG5zb24iLCJKb2huc29uIENvbnRyb2xzIEluYy4iLCJKb25lcyBBcHBhcmVsIEdyb3VwIEluYy4iLCJLQiBIb21lIiwiS2VsbG9nZyBDb21wYW55IiwiS2VsbHdvb2QgQ29tcGFueSIsIktlbGx5IFNlcnZpY2VzIEluYy4iLCJLZW1ldCBDb3JwLiIsIktlbm5hbWV0YWwgSW5jLiIsIktlcnItTWNHZWUgQ29ycG9yYXRpb24iLCJLZXlDb3JwIiwiS2V5U3BhbiBDb3JwLiIsIktpbWJhbGwgSW50ZXJuYXRpb25hbCBJbmMuIiwiS2ltYmVybHktQ2xhcmsgQ29ycG9yYXRpb24iLCJLaW5kcmVkIEhlYWx0aGNhcmUgSW5jLiIsIktMQS1UZW5jb3IgQ29ycG9yYXRpb24iLCJLLU1hcnQgQ29ycC4iLCJLbmlnaHQtUmlkZGVyIEluYy4iLCJLb2hsJ3MgQ29ycC4iLCJLUE1HIENvbnN1bHRpbmcgSW5jLiIsIktyb2dlciBDby4iLCJMLTMgQ29tbXVuaWNhdGlvbnMgSG9sZGluZ3MgSW5jLiIsIkxhYm9yYXRvcnkgQ29ycG9yYXRpb24gb2YgQW1lcmljYSBIb2xkaW5ncyIsIkxhbSBSZXNlYXJjaCBDb3Jwb3JhdGlvbiIsIkxhbmRBbWVyaWNhIEZpbmFuY2lhbCBHcm91cCBJbmMuIiwiTGFuZHMnIEVuZCBJbmMuIiwiTGFuZHN0YXIgU3lzdGVtIEluYy4iLCJMYS1aLUJveSBJbmMuIiwiTGVhciBDb3Jwb3JhdGlvbiIsIkxlZ2cgTWFzb24gSW5jLiIsIkxlZ2dldHQgJiBQbGF0dCBJbmMuIiwiTGVobWFuIEJyb3RoZXJzIEhvbGRpbmdzIEluYy4iLCJMZW5uYXIgQ29ycG9yYXRpb24iLCJMZW5ub3ggSW50ZXJuYXRpb25hbCBJbmMuIiwiTGV2ZWwgMyBDb21tdW5pY2F0aW9ucyBJbmMuIiwiTGV2aSBTdHJhdXNzICYgQ28uIiwiTGV4bWFyayBJbnRlcm5hdGlvbmFsIEluYy4iLCJMaW1pdGVkIEluYy4iLCJMaW5jb2xuIE5hdGlvbmFsIENvcnBvcmF0aW9uIiwiTGluZW5zICduIFRoaW5ncyBJbmMuIiwiTGl0aGlhIE1vdG9ycyBJbmMuIiwiTGl6IENsYWlib3JuZSBJbmMuIiwiTG9ja2hlZWQgTWFydGluIENvcnBvcmF0aW9uIiwiTG9ld3MgQ29ycG9yYXRpb24iLCJMb25ncyBEcnVnIFN0b3JlcyBDb3Jwb3JhdGlvbiIsIkxvdWlzaWFuYS1QYWNpZmljIENvcnBvcmF0aW9uIiwiTG93ZSdzIENvbXBhbmllcyBJbmMuIiwiTFNJIExvZ2ljIENvcnBvcmF0aW9uIiwiVGhlIExUViBDb3Jwb3JhdGlvbiIsIlRoZSBMdWJyaXpvbCBDb3Jwb3JhdGlvbiIsIkx1Y2VudCBUZWNobm9sb2dpZXMgSW5jLiIsIkx5b25kZWxsIENoZW1pY2FsIENvbXBhbnkiLCJNICYgVCBCYW5rIENvcnBvcmF0aW9uIiwiTWFnZWxsYW4gSGVhbHRoIFNlcnZpY2VzIEluYy4iLCJNYWlsLVdlbGwgSW5jLiIsIk1hbmRhbGF5IFJlc29ydCBHcm91cCIsIk1hbm9yIENhcmUgSW5jLiIsIk1hbnBvd2VyIEluYy4iLCJNYXJhdGhvbiBPaWwgQ29ycG9yYXRpb24iLCJNYXJpbmVyIEhlYWx0aCBDYXJlIEluYy4iLCJNYXJrZWwgQ29ycG9yYXRpb24iLCJNYXJyaW90dCBJbnRlcm5hdGlvbmFsIEluYy4iLCJNYXJzaCAmIE1jTGVubmFuIENvbXBhbmllcyBJbmMuIiwiTWFyc2ggU3VwZXJtYXJrZXRzIEluYy4iLCJNYXJzaGFsbCAmIElsc2xleSBDb3Jwb3JhdGlvbiIsIk1hcnRpbiBNYXJpZXR0YSBNYXRlcmlhbHMgSW5jLiIsIk1hc2NvIENvcnBvcmF0aW9uIiwiTWFzc2V5IEVuZXJneSBDb21wYW55IiwiTWFzVGVjIEluYy4iLCJNYXR0ZWwgSW5jLiIsIk1heGltIEludGVncmF0ZWQgUHJvZHVjdHMgSW5jLiIsIk1heHRvciBDb3Jwb3JhdGlvbiIsIk1heHhhbSBJbmMuIiwiVGhlIE1heSBEZXBhcnRtZW50IFN0b3JlcyBDb21wYW55IiwiTWF5dGFnIENvcnBvcmF0aW9uIiwiTUJOQSBDb3Jwb3JhdGlvbiIsIk1jQ29ybWljayAmIENvbXBhbnkgSW5jb3Jwb3JhdGVkIiwiTWNEb25hbGQncyBDb3Jwb3JhdGlvbiIsIlRoZSBNY0dyYXctSGlsbCBDb21wYW5pZXMgSW5jLiIsIk1jS2Vzc29uIENvcnBvcmF0aW9uIiwiTWNMZW9kVVNBIEluY29ycG9yYXRlZCIsIk0uRC5DLiBIb2xkaW5ncyBJbmMuIiwiTURVIFJlc291cmNlcyBHcm91cCBJbmMuIiwiTWVhZFdlc3R2YWNvIENvcnBvcmF0aW9uIiwiTWVkdHJvbmljIEluYy4iLCJNZWxsb24gRmluYW5jaWFsIENvcnBvcmF0aW9uIiwiVGhlIE1lbidzIFdlYXJob3VzZSBJbmMuIiwiTWVyY2sgJiBDby4sIEluYy4iLCJNZXJjdXJ5IEdlbmVyYWwgQ29ycG9yYXRpb24iLCJNZXJyaWxsIEx5bmNoICYgQ28uIEluYy4iLCJNZXRhbGR5bmUgQ29ycG9yYXRpb24iLCJNZXRhbHMgVVNBIEluYy4iLCJNZXRMaWZlIEluYy4iLCJNZXRyaXMgQ29tcGFuaWVzIEluYyIsIk1HSUMgSW52ZXN0bWVudCBDb3Jwb3JhdGlvbiIsIk1HTSBNaXJhZ2UiLCJNaWNoYWVscyBTdG9yZXMgSW5jLiIsIk1pY3JvbiBUZWNobm9sb2d5IEluYy4iLCJNaWNyb3NvZnQgQ29ycG9yYXRpb24iLCJNaWxhY3JvbiBJbmMuIiwiTWlsbGVubml1bSBDaGVtaWNhbHMgSW5jLiIsIk1pcmFudCBDb3Jwb3JhdGlvbiIsIk1vaGF3ayBJbmR1c3RyaWVzIEluYy4iLCJNb2xleCBJbmNvcnBvcmF0ZWQiLCJUaGUgTU9OWSBHcm91cCBJbmMuIiwiTW9yZ2FuIFN0YW5sZXkgRGVhbiBXaXR0ZXIgJiBDby4iLCJNb3Rvcm9sYSBJbmMuIiwiTVBTIEdyb3VwIEluYy4iLCJNdXJwaHkgT2lsIENvcnBvcmF0aW9uIiwiTmFib3JzIEluZHVzdHJpZXMgSW5jIiwiTmFjY28gSW5kdXN0cmllcyBJbmMiLCJOYXNoIEZpbmNoIENvbXBhbnkiLCJOYXRpb25hbCBDaXR5IENvcnAuIiwiTmF0aW9uYWwgQ29tbWVyY2UgRmluYW5jaWFsIENvcnBvcmF0aW9uIiwiTmF0aW9uYWwgRnVlbCBHYXMgQ29tcGFueSIsIk5hdGlvbmFsIE9pbHdlbGwgSW5jIiwiTmF0aW9uYWwgUnVyYWwgVXRpbGl0aWVzIENvb3BlcmF0aXZlIEZpbmFuY2UgQ29ycG9yYXRpb24iLCJOYXRpb25hbCBTZW1pY29uZHVjdG9yIENvcnBvcmF0aW9uIiwiTmF0aW9uYWwgU2VydmljZSBJbmR1c3RyaWVzIEluYyIsIk5hdmlzdGFyIEludGVybmF0aW9uYWwgQ29ycG9yYXRpb24iLCJOQ1IgQ29ycG9yYXRpb24iLCJUaGUgTmVpbWFuIE1hcmN1cyBHcm91cCBJbmMuIiwiTmV3IEplcnNleSBSZXNvdXJjZXMgQ29ycG9yYXRpb24iLCJOZXcgWW9yayBUaW1lcyBDb21wYW55IiwiTmV3ZWxsIFJ1YmJlcm1haWQgSW5jIiwiTmV3bW9udCBNaW5pbmcgQ29ycG9yYXRpb24iLCJOZXh0ZWwgQ29tbXVuaWNhdGlvbnMgSW5jIiwiTmljb3IgSW5jIiwiTmlrZSBJbmMiLCJOaVNvdXJjZSBJbmMiLCJOb2JsZSBFbmVyZ3kgSW5jIiwiTm9yZHN0cm9tIEluYyIsIk5vcmZvbGsgU291dGhlcm4gQ29ycG9yYXRpb24iLCJOb3J0ZWsgSW5jIiwiTm9ydGggRm9yayBCYW5jb3Jwb3JhdGlvbiBJbmMiLCJOb3J0aGVhc3QgVXRpbGl0aWVzIFN5c3RlbSIsIk5vcnRoZXJuIFRydXN0IENvcnBvcmF0aW9uIiwiTm9ydGhyb3AgR3J1bW1hbiBDb3Jwb3JhdGlvbiIsIk5vcnRoV2VzdGVybiBDb3Jwb3JhdGlvbiIsIk5vdmVsbHVzIFN5c3RlbXMgSW5jIiwiTlNUQVIiLCJOVEwgSW5jb3Jwb3JhdGVkIiwiTnVjb3IgQ29ycCIsIk52aWRpYSBDb3JwIiwiTlZSIEluYyIsIk5vcnRod2VzdCBBaXJsaW5lcyBDb3JwIiwiT2NjaWRlbnRhbCBQZXRyb2xldW0gQ29ycCIsIk9jZWFuIEVuZXJneSBJbmMiLCJPZmZpY2UgRGVwb3QgSW5jLiIsIk9mZmljZU1heCBJbmMiLCJPR0UgRW5lcmd5IENvcnAiLCJPZ2xldGhvcnBlIFBvd2VyIENvcnAuIiwiT2hpbyBDYXN1YWx0eSBDb3JwLiIsIk9sZCBSZXB1YmxpYyBJbnRlcm5hdGlvbmFsIENvcnAuIiwiT2xpbiBDb3JwLiIsIk9NIEdyb3VwIEluYyIsIk9tbmljYXJlIEluYyIsIk9tbmljb20gR3JvdXAiLCJPbiBTZW1pY29uZHVjdG9yIENvcnAiLCJPTkVPSyBJbmMiLCJPcmFjbGUgQ29ycCIsIk9zaGtvc2ggVHJ1Y2sgQ29ycCIsIk91dGJhY2sgU3RlYWtob3VzZSBJbmMuIiwiT3dlbnMgJiBNaW5vciBJbmMuIiwiT3dlbnMgQ29ybmluZyIsIk93ZW5zLUlsbGlub2lzIEluYyIsIk94Zm9yZCBIZWFsdGggUGxhbnMgSW5jIiwiUGFjY2FyIEluYyIsIlBhY2lmaUNhcmUgSGVhbHRoIFN5c3RlbXMgSW5jIiwiUGFja2FnaW5nIENvcnAuIG9mIEFtZXJpY2EiLCJQYWN0aXYgQ29ycCIsIlBhbGwgQ29ycCIsIlBhbnRyeSBJbmMiLCJQYXJrIFBsYWNlIEVudGVydGFpbm1lbnQgQ29ycCIsIlBhcmtlciBIYW5uaWZpbiBDb3JwLiIsIlBhdGhtYXJrIFN0b3JlcyBJbmMuIiwiUGF5Y2hleCBJbmMiLCJQYXlsZXNzIFNob2Vzb3VyY2UgSW5jIiwiUGVubiBUcmFmZmljIENvLiIsIlBlbm56b2lsLVF1YWtlciBTdGF0ZSBDb21wYW55IiwiUGVudGFpciBJbmMiLCJQZW9wbGVzIEVuZXJneSBDb3JwLiIsIlBlb3BsZVNvZnQgSW5jIiwiUGVwIEJveXMgTWFubnksIE1vZSAmIEphY2siLCJQb3RvbWFjIEVsZWN0cmljIFBvd2VyIENvLiIsIlBlcHNpIEJvdHRsaW5nIEdyb3VwIEluYy4iLCJQZXBzaUFtZXJpY2FzIEluYy4iLCJQZXBzaUNvIEluYy4iLCJQZXJmb3JtYW5jZSBGb29kIEdyb3VwIENvLiIsIlBlcmluaSBDb3JwIiwiUGVya2luRWxtZXIgSW5jIiwiUGVyb3QgU3lzdGVtcyBDb3JwIiwiUGV0Y28gQW5pbWFsIFN1cHBsaWVzIEluYy4iLCJQZXRlciBLaWV3aXQgU29ucycsIEluYy4iLCJQRVRzTUFSVCBJbmMiLCJQZml6ZXIgSW5jIiwiUGFjaWZpYyBHYXMgJiBFbGVjdHJpYyBDb3JwLiIsIlBoYXJtYWNpYSBDb3JwIiwiUGhhciBNb3IgSW5jLiIsIlBoZWxwcyBEb2RnZSBDb3JwLiIsIlBoaWxpcCBNb3JyaXMgQ29tcGFuaWVzIEluYy4iLCJQaGlsbGlwcyBQZXRyb2xldW0gQ28iLCJQaGlsbGlwcyBWYW4gSGV1c2VuIENvcnAuIiwiUGhvZW5peCBDb21wYW5pZXMgSW5jIiwiUGllciAxIEltcG9ydHMgSW5jLiIsIlBpbGdyaW0ncyBQcmlkZSBDb3Jwb3JhdGlvbiIsIlBpbm5hY2xlIFdlc3QgQ2FwaXRhbCBDb3JwIiwiUGlvbmVlci1TdGFuZGFyZCBFbGVjdHJvbmljcyBJbmMuIiwiUGl0bmV5IEJvd2VzIEluYy4iLCJQaXR0c3RvbiBCcmlua3MgR3JvdXAiLCJQbGFpbnMgQWxsIEFtZXJpY2FuIFBpcGVsaW5lIExQIiwiUE5DIEZpbmFuY2lhbCBTZXJ2aWNlcyBHcm91cCBJbmMuIiwiUE5NIFJlc291cmNlcyBJbmMiLCJQb2xhcmlzIEluZHVzdHJpZXMgSW5jLiIsIlBvbG8gUmFscGggTGF1cmVuIENvcnAiLCJQb2x5T25lIENvcnAiLCJQb3B1bGFyIEluYyIsIlBvdGxhdGNoIENvcnAiLCJQUEcgSW5kdXN0cmllcyBJbmMiLCJQUEwgQ29ycCIsIlByYXhhaXIgSW5jIiwiUHJlY2lzaW9uIENhc3RwYXJ0cyBDb3JwIiwiUHJlbWNvciBJbmMuIiwiUHJpZGUgSW50ZXJuYXRpb25hbCBJbmMiLCJQcmltZWRpYSBJbmMiLCJQcmluY2lwYWwgRmluYW5jaWFsIEdyb3VwIEluYy4iLCJQcm9jdGVyICYgR2FtYmxlIENvLiIsIlByby1GYWMgQ29vcGVyYXRpdmUgSW5jLiIsIlByb2dyZXNzIEVuZXJneSBJbmMiLCJQcm9ncmVzc2l2ZSBDb3Jwb3JhdGlvbiIsIlByb3RlY3RpdmUgTGlmZSBDb3JwIiwiUHJvdmlkZW50IEZpbmFuY2lhbCBHcm91cCIsIlByb3ZpZGlhbiBGaW5hbmNpYWwgQ29ycC4iLCJQcnVkZW50aWFsIEZpbmFuY2lhbCBJbmMuIiwiUFNTIFdvcmxkIE1lZGljYWwgSW5jIiwiUHVibGljIFNlcnZpY2UgRW50ZXJwcmlzZSBHcm91cCBJbmMuIiwiUHVibGl4IFN1cGVyIE1hcmtldHMgSW5jLiIsIlB1Z2V0IEVuZXJneSBJbmMuIiwiUHVsdGUgSG9tZXMgSW5jIiwiUXVhbGNvbW0gSW5jIiwiUXVhbnRhIFNlcnZpY2VzIEluYy4iLCJRdWFudHVtIENvcnAiLCJRdWVzdCBEaWFnbm9zdGljcyBJbmMuIiwiUXVlc3RhciBDb3JwIiwiUXVpbnRpbGVzIFRyYW5zbmF0aW9uYWwiLCJRd2VzdCBDb21tdW5pY2F0aW9ucyBJbnRsIEluYyIsIlIuSi4gUmV5bm9sZHMgVG9iYWNjbyBDb21wYW55IiwiUi5SLiBEb25uZWxsZXkgJiBTb25zIENvbXBhbnkiLCJSYWRpbyBTaGFjayBDb3Jwb3JhdGlvbiIsIlJheW1vbmQgSmFtZXMgRmluYW5jaWFsIEluYy4iLCJSYXl0aGVvbiBDb21wYW55IiwiUmVhZGVyJ3MgRGlnZXN0IEFzc29jaWF0aW9uIEluYy4iLCJSZWVib2sgSW50ZXJuYXRpb25hbCBMdGQuIiwiUmVnaW9ucyBGaW5hbmNpYWwgQ29ycC4iLCJSZWdpcyBDb3Jwb3JhdGlvbiIsIlJlbGlhbmNlIFN0ZWVsICYgQWx1bWludW0gQ28uIiwiUmVsaWFudCBFbmVyZ3kgSW5jLiIsIlJlbnQgQSBDZW50ZXIgSW5jIiwiUmVwdWJsaWMgU2VydmljZXMgSW5jIiwiUmV2bG9uIEluYyIsIlJHUyBFbmVyZ3kgR3JvdXAgSW5jIiwiUml0ZSBBaWQgQ29ycCIsIlJpdmVyd29vZCBIb2xkaW5nIEluYy4iLCJSb2Fkd2F5Q29ycCIsIlJvYmVydCBIYWxmIEludGVybmF0aW9uYWwgSW5jLiIsIlJvY2stVGVubiBDbyIsIlJvY2t3ZWxsIEF1dG9tYXRpb24gSW5jIiwiUm9ja3dlbGwgQ29sbGlucyBJbmMiLCJSb2htICYgSGFhcyBDby4iLCJSb3NzIFN0b3JlcyBJbmMiLCJSUE0gSW5jLiIsIlJ1ZGRpY2sgQ29ycCIsIlJ5ZGVyIFN5c3RlbSBJbmMiLCJSeWVyc29uIFR1bGwgSW5jIiwiUnlsYW5kIEdyb3VwIEluYy4iLCJTYWJyZSBIb2xkaW5ncyBDb3JwIiwiU2FmZWNvIENvcnAiLCJTYWZlZ3VhcmQgU2NpZW50aWZpY3MgSW5jLiIsIlNhZmV3YXkgSW5jIiwiU2FrcyBJbmMiLCJTYW5taW5hLVNDSSBJbmMiLCJTYXJhIExlZSBDb3JwIiwiU0JDIENvbW11bmljYXRpb25zIEluYyIsIlNjYW5hIENvcnAuIiwiU2NoZXJpbmctUGxvdWdoIENvcnAiLCJTY2hvbGFzdGljIENvcnAiLCJTQ0kgU3lzdGVtcyBPbmMuIiwiU2NpZW5jZSBBcHBsaWNhdGlvbnMgSW50bC4gSW5jLiIsIlNjaWVudGlmaWMtQXRsYW50YSBJbmMiLCJTY290dHMgQ29tcGFueSIsIlNlYWJvYXJkIENvcnAiLCJTZWFsZWQgQWlyIENvcnAiLCJTZWFycyBSb2VidWNrICYgQ28iLCJTZW1wcmEgRW5lcmd5IiwiU2VxdWEgQ29ycCIsIlNlcnZpY2UgQ29ycC4gSW50ZXJuYXRpb25hbCIsIlNlcnZpY2VNYXN0ZXIgQ28iLCJTaGF3IEdyb3VwIEluYyIsIlNoZXJ3aW4tV2lsbGlhbXMgQ29tcGFueSIsIlNob3BrbyBTdG9yZXMgSW5jIiwiU2llYmVsIFN5c3RlbXMgSW5jIiwiU2llcnJhIEhlYWx0aCBTZXJ2aWNlcyBJbmMiLCJTaWVycmEgUGFjaWZpYyBSZXNvdXJjZXMiLCJTaWxnYW4gSG9sZGluZ3MgSW5jLiIsIlNpbGljb24gR3JhcGhpY3MgSW5jIiwiU2ltb24gUHJvcGVydHkgR3JvdXAgSW5jIiwiU0xNIENvcnBvcmF0aW9uIiwiU21pdGggSW50ZXJuYXRpb25hbCBJbmMiLCJTbWl0aGZpZWxkIEZvb2RzIEluYyIsIlNtdXJmaXQtU3RvbmUgQ29udGFpbmVyIENvcnAiLCJTbmFwLU9uIEluYyIsIlNvbGVjdHJvbiBDb3JwIiwiU29sdXRpYSBJbmMiLCJTb25pYyBBdXRvbW90aXZlIEluYy4iLCJTb25vY28gUHJvZHVjdHMgQ28uIiwiU291dGhlcm4gQ29tcGFueSIsIlNvdXRoZXJuIFVuaW9uIENvbXBhbnkiLCJTb3V0aFRydXN0IENvcnAuIiwiU291dGh3ZXN0IEFpcmxpbmVzIENvIiwiU291dGh3ZXN0IEdhcyBDb3JwIiwiU292ZXJlaWduIEJhbmNvcnAgSW5jLiIsIlNwYXJ0YW4gU3RvcmVzIEluYyIsIlNwaGVyaW9uIENvcnAiLCJTcG9ydHMgQXV0aG9yaXR5IEluYyIsIlNwcmludCBDb3JwLiIsIlNQWCBDb3JwIiwiU3QuIEp1ZGUgTWVkaWNhbCBJbmMiLCJTdC4gUGF1bCBDb3MuIiwiU3RhZmYgTGVhc2luZyBJbmMuIiwiU3RhbkNvcnAgRmluYW5jaWFsIEdyb3VwIEluYyIsIlN0YW5kYXJkIFBhY2lmaWMgQ29ycC4iLCJTdGFubGV5IFdvcmtzIiwiU3RhcGxlcyBJbmMiLCJTdGFyYnVja3MgQ29ycCIsIlN0YXJ3b29kIEhvdGVscyAmIFJlc29ydHMgV29ybGR3aWRlIEluYyIsIlN0YXRlIFN0cmVldCBDb3JwLiIsIlN0YXRlciBCcm9zLiBIb2xkaW5ncyBJbmMuIiwiU3RlZWxjYXNlIEluYyIsIlN0ZWluIE1hcnQgSW5jIiwiU3Rld2FydCAmIFN0ZXZlbnNvbiBTZXJ2aWNlcyBJbmMiLCJTdGV3YXJ0IEluZm9ybWF0aW9uIFNlcnZpY2VzIENvcnAiLCJTdGlsd2VsbCBGaW5hbmNpYWwgSW5jIiwiU3RvcmFnZSBUZWNobm9sb2d5IENvcnBvcmF0aW9uIiwiU3RyeWtlciBDb3JwIiwiU3VuIEhlYWx0aGNhcmUgR3JvdXAgSW5jLiIsIlN1biBNaWNyb3N5c3RlbXMgSW5jLiIsIlN1bkdhcmQgRGF0YSBTeXN0ZW1zIEluYy4iLCJTdW5vY28gSW5jLiIsIlN1blRydXN0IEJhbmtzIEluYyIsIlN1cGVydmFsdSBJbmMiLCJTd2lmdCBUcmFuc3BvcnRhdGlvbiwgQ28uLCBJbmMiLCJTeW1ib2wgVGVjaG5vbG9naWVzIEluYyIsIlN5bm92dXMgRmluYW5jaWFsIENvcnAuIiwiU3lzY28gQ29ycCIsIlN5c3RlbWF4IEluYy4iLCJUYXJnZXQgQ29ycC4iLCJUZWNoIERhdGEgQ29ycG9yYXRpb24iLCJURUNPIEVuZXJneSBJbmMiLCJUZWN1bXNlaCBQcm9kdWN0cyBDb21wYW55IiwiVGVrdHJvbml4IEluYyIsIlRlbGVmbGV4IEluY29ycG9yYXRlZCIsIlRlbGVwaG9uZSAmIERhdGEgU3lzdGVtcyBJbmMiLCJUZWxsYWJzIEluYy4iLCJUZW1wbGUtSW5sYW5kIEluYyIsIlRlbmV0IEhlYWx0aGNhcmUgQ29ycG9yYXRpb24iLCJUZW5uZWNvIEF1dG9tb3RpdmUgSW5jLiIsIlRlcmFkeW5lIEluYyIsIlRlcmV4IENvcnAiLCJUZXNvcm8gUGV0cm9sZXVtIENvcnAuIiwiVGV4YXMgSW5kdXN0cmllcyBJbmMuIiwiVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkIiwiVGV4dHJvbiBJbmMiLCJUaGVybW8gRWxlY3Ryb24gQ29ycG9yYXRpb24iLCJUaG9tYXMgJiBCZXR0cyBDb3Jwb3JhdGlvbiIsIlRpZmZhbnkgJiBDbyIsIlRpbWtlbiBDb21wYW55IiwiVEpYIENvbXBhbmllcyBJbmMiLCJUTVAgV29ybGR3aWRlIEluYyIsIlRvbGwgQnJvdGhlcnMgSW5jIiwiVG9yY2htYXJrIENvcnBvcmF0aW9uIiwiVG9ybyBDb21wYW55IiwiVG93ZXIgQXV0b21vdGl2ZSBJbmMuIiwiVG95cyAnUicgVXMgSW5jIiwiVHJhbnMgV29ybGQgRW50ZXJ0YWlubWVudCBDb3JwLiIsIlRyYW5zTW9udGFpZ25lIEluYyIsIlRyYW5zb2NlYW4gSW5jIiwiVHJhdmVsQ2VudGVycyBvZiBBbWVyaWNhIEluYy4iLCJUcmlhZCBIb3NwaXRhbHMgSW5jIiwiVHJpYnVuZSBDb21wYW55IiwiVHJpZ29uIEhlYWx0aGNhcmUgSW5jLiIsIlRyaW5pdHkgSW5kdXN0cmllcyBJbmMiLCJUcnVtcCBIb3RlbHMgJiBDYXNpbm8gUmVzb3J0cyBJbmMuIiwiVHJ1U2VydiBDb3Jwb3JhdGlvbiIsIlRSVyBJbmMiLCJUWFUgQ29ycCIsIlR5c29uIEZvb2RzIEluYyIsIlUuUy4gQmFuY29ycCIsIlUuUy4gSW5kdXN0cmllcyBJbmMuIiwiVUFMIENvcnBvcmF0aW9uIiwiVUdJIENvcnBvcmF0aW9uIiwiVW5pZmllZCBXZXN0ZXJuIEdyb2NlcnMgSW5jIiwiVW5pb24gUGFjaWZpYyBDb3Jwb3JhdGlvbiIsIlVuaW9uIFBsYW50ZXJzIENvcnAiLCJVbmlzb3VyY2UgRW5lcmd5IENvcnAiLCJVbmlzeXMgQ29ycG9yYXRpb24iLCJVbml0ZWQgQXV0byBHcm91cCBJbmMiLCJVbml0ZWQgRGVmZW5zZSBJbmR1c3RyaWVzIEluYy4iLCJVbml0ZWQgUGFyY2VsIFNlcnZpY2UgSW5jIiwiVW5pdGVkIFJlbnRhbHMgSW5jIiwiVW5pdGVkIFN0YXRpb25lcnMgSW5jIiwiVW5pdGVkIFRlY2hub2xvZ2llcyBDb3Jwb3JhdGlvbiIsIlVuaXRlZEhlYWx0aCBHcm91cCBJbmNvcnBvcmF0ZWQiLCJVbml0cmluIEluYyIsIlVuaXZlcnNhbCBDb3Jwb3JhdGlvbiIsIlVuaXZlcnNhbCBGb3Jlc3QgUHJvZHVjdHMgSW5jIiwiVW5pdmVyc2FsIEhlYWx0aCBTZXJ2aWNlcyBJbmMiLCJVbm9jYWwgQ29ycG9yYXRpb24iLCJVbm92YSBJbmMiLCJVbnVtUHJvdmlkZW50IENvcnBvcmF0aW9uIiwiVVJTIENvcnBvcmF0aW9uIiwiVVMgQWlyd2F5cyBHcm91cCBJbmMiLCJVUyBPbmNvbG9neSBJbmMiLCJVU0EgSW50ZXJhY3RpdmUiLCJVU0ZyZWlnaHdheXMgQ29ycG9yYXRpb24iLCJVU0cgQ29ycG9yYXRpb24iLCJVU1QgSW5jIiwiVmFsZXJvIEVuZXJneSBDb3Jwb3JhdGlvbiIsIlZhbHNwYXIgQ29ycG9yYXRpb24iLCJWYWx1ZSBDaXR5IERlcGFydG1lbnQgU3RvcmVzIEluYyIsIlZhcmNvIEludGVybmF0aW9uYWwgSW5jIiwiVmVjdHJlbiBDb3Jwb3JhdGlvbiIsIlZlcml0YXMgU29mdHdhcmUgQ29ycG9yYXRpb24iLCJWZXJpem9uIENvbW11bmljYXRpb25zIEluYyIsIlZGIENvcnBvcmF0aW9uIiwiVmlhY29tIEluYyIsIlZpYWQgQ29ycCIsIlZpYXN5c3RlbXMgR3JvdXAgSW5jIiwiVmlzaGF5IEludGVydGVjaG5vbG9neSBJbmMiLCJWaXN0ZW9uIENvcnBvcmF0aW9uIiwiVm9sdCBJbmZvcm1hdGlvbiBTY2llbmNlcyBJbmMiLCJWdWxjYW4gTWF0ZXJpYWxzIENvbXBhbnkiLCJXLlIuIEJlcmtsZXkgQ29ycG9yYXRpb24iLCJXLlIuIEdyYWNlICYgQ28iLCJXLlcuIEdyYWluZ2VyIEluYyIsIldhY2hvdmlhIENvcnBvcmF0aW9uIiwiV2FrZW5odXQgQ29ycG9yYXRpb24iLCJXYWxncmVlbiBDbyIsIldhbGxhY2UgQ29tcHV0ZXIgU2VydmljZXMgSW5jIiwiV2FsLU1hcnQgU3RvcmVzIEluYyIsIldhbHQgRGlzbmV5IENvIiwiV2FsdGVyIEluZHVzdHJpZXMgSW5jIiwiV2FzaGluZ3RvbiBNdXR1YWwgSW5jIiwiV2FzaGluZ3RvbiBQb3N0IENvLiIsIldhc3RlIE1hbmFnZW1lbnQgSW5jIiwiV2F0c2NvIEluYyIsIldlYXRoZXJmb3JkIEludGVybmF0aW9uYWwgSW5jIiwiV2VpcyBNYXJrZXRzIEluYy4iLCJXZWxscG9pbnQgSGVhbHRoIE5ldHdvcmtzIEluYyIsIldlbGxzIEZhcmdvICYgQ29tcGFueSIsIldlbmR5J3MgSW50ZXJuYXRpb25hbCBJbmMiLCJXZXJuZXIgRW50ZXJwcmlzZXMgSW5jIiwiV0VTQ08gSW50ZXJuYXRpb25hbCBJbmMiLCJXZXN0ZXJuIERpZ2l0YWwgSW5jIiwiV2VzdGVybiBHYXMgUmVzb3VyY2VzIEluYyIsIldlc3RQb2ludCBTdGV2ZW5zIEluYyIsIldleWVyaGF1c2VyIENvbXBhbnkiLCJXR0wgSG9sZGluZ3MgSW5jIiwiV2hpcmxwb29sIENvcnBvcmF0aW9uIiwiV2hvbGUgRm9vZHMgTWFya2V0IEluYyIsIldpbGxhbWV0dGUgSW5kdXN0cmllcyBJbmMuIiwiV2lsbGlhbXMgQ29tcGFuaWVzIEluYyIsIldpbGxpYW1zIFNvbm9tYSBJbmMiLCJXaW5uIERpeGllIFN0b3JlcyBJbmMiLCJXaXNjb25zaW4gRW5lcmd5IENvcnBvcmF0aW9uIiwiV20gV3JpZ2xleSBKciBDb21wYW55IiwiV29ybGQgRnVlbCBTZXJ2aWNlcyBDb3Jwb3JhdGlvbiIsIldvcmxkQ29tIEluYyIsIldvcnRoaW5ndG9uIEluZHVzdHJpZXMgSW5jIiwiV1BTIFJlc291cmNlcyBDb3Jwb3JhdGlvbiIsIld5ZXRoIiwiV3luZGhhbSBJbnRlcm5hdGlvbmFsIEluYyIsIlhjZWwgRW5lcmd5IEluYyIsIlhlcm94IENvcnAiLCJYaWxpbnggSW5jIiwiWE8gQ29tbXVuaWNhdGlvbnMgSW5jIiwiWWVsbG93IENvcnBvcmF0aW9uIiwiWW9yayBJbnRlcm5hdGlvbmFsIENvcnAiLCJZdW0gQnJhbmRzIEluYy4iLCJaYWxlIENvcnBvcmF0aW9uIiwiWmlvbnMgQmFuY29ycG9yYXRpb24iXSxmaWxlRXh0ZW5zaW9uOntyYXN0ZXI6WyJibXAiLCJnaWYiLCJncGwiLCJpY28iLCJqcGVnIiwicHNkIiwicG5nIiwicHNwIiwicmF3IiwidGlmZiJdLHZlY3RvcjpbIjNkdiIsImFtZiIsImF3ZyIsImFpIiwiY2dtIiwiY2RyIiwiY214IiwiZHhmIiwiZTJkIiwiZWd0IiwiZXBzIiwiZnMiLCJvZGciLCJzdmciLCJ4YXIiXSwiM2QiOlsiM2RtZiIsIjNkbSIsIjNtZiIsIjNkcyIsImFuOCIsImFvaSIsImJsZW5kIiwiY2FsM2QiLCJjb2IiLCJjdG0iLCJpb2IiLCJqYXMiLCJtYXgiLCJtYiIsIm1keCIsIm9iaiIsIngiLCJ4M2QiXSxkb2N1bWVudDpbImRvYyIsImRvY3giLCJkb3QiLCJodG1sIiwieG1sIiwib2R0Iiwib2RtIiwib3R0IiwiY3N2IiwicnRmIiwidGV4IiwieGh0bWwiLCJ4cHMiXX0sdGltZXpvbmVzOlt7bmFtZToiRGF0ZWxpbmUgU3RhbmRhcmQgVGltZSIsYWJicjoiRFNUIixvZmZzZXQ6LTEyLGlzZHN0OiExLHRleHQ6IihVVEMtMTI6MDApIEludGVybmF0aW9uYWwgRGF0ZSBMaW5lIFdlc3QiLHV0YzpbIkV0Yy9HTVQrMTIiXX0se25hbWU6IlVUQy0xMSIsYWJicjoiVSIsb2Zmc2V0Oi0xMSxpc2RzdDohMSx0ZXh0OiIoVVRDLTExOjAwKSBDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZS0xMSIsdXRjOlsiRXRjL0dNVCsxMSIsIlBhY2lmaWMvTWlkd2F5IiwiUGFjaWZpYy9OaXVlIiwiUGFjaWZpYy9QYWdvX1BhZ28iXX0se25hbWU6Ikhhd2FpaWFuIFN0YW5kYXJkIFRpbWUiLGFiYnI6IkhTVCIsb2Zmc2V0Oi0xMCxpc2RzdDohMSx0ZXh0OiIoVVRDLTEwOjAwKSBIYXdhaWkiLHV0YzpbIkV0Yy9HTVQrMTAiLCJQYWNpZmljL0hvbm9sdWx1IiwiUGFjaWZpYy9Kb2huc3RvbiIsIlBhY2lmaWMvUmFyb3RvbmdhIiwiUGFjaWZpYy9UYWhpdGkiXX0se25hbWU6IkFsYXNrYW4gU3RhbmRhcmQgVGltZSIsYWJicjoiQUtEVCIsb2Zmc2V0Oi04LGlzZHN0OiEwLHRleHQ6IihVVEMtMDk6MDApIEFsYXNrYSIsdXRjOlsiQW1lcmljYS9BbmNob3JhZ2UiLCJBbWVyaWNhL0p1bmVhdSIsIkFtZXJpY2EvTm9tZSIsIkFtZXJpY2EvU2l0a2EiLCJBbWVyaWNhL1lha3V0YXQiXX0se25hbWU6IlBhY2lmaWMgU3RhbmRhcmQgVGltZSAoTWV4aWNvKSIsYWJicjoiUERUIixvZmZzZXQ6LTcsaXNkc3Q6ITAsdGV4dDoiKFVUQy0wODowMCkgQmFqYSBDYWxpZm9ybmlhIix1dGM6WyJBbWVyaWNhL1NhbnRhX0lzYWJlbCJdfSx7bmFtZToiUGFjaWZpYyBTdGFuZGFyZCBUaW1lIixhYmJyOiJQRFQiLG9mZnNldDotNyxpc2RzdDohMCx0ZXh0OiIoVVRDLTA4OjAwKSBQYWNpZmljIFRpbWUgKFVTICYgQ2FuYWRhKSIsdXRjOlsiQW1lcmljYS9EYXdzb24iLCJBbWVyaWNhL0xvc19BbmdlbGVzIiwiQW1lcmljYS9UaWp1YW5hIiwiQW1lcmljYS9WYW5jb3V2ZXIiLCJBbWVyaWNhL1doaXRlaG9yc2UiLCJQU1Q4UERUIl19LHtuYW1lOiJVUyBNb3VudGFpbiBTdGFuZGFyZCBUaW1lIixhYmJyOiJVTVNUIixvZmZzZXQ6LTcsaXNkc3Q6ITEsdGV4dDoiKFVUQy0wNzowMCkgQXJpem9uYSIsdXRjOlsiQW1lcmljYS9DcmVzdG9uIiwiQW1lcmljYS9EYXdzb25fQ3JlZWsiLCJBbWVyaWNhL0hlcm1vc2lsbG8iLCJBbWVyaWNhL1Bob2VuaXgiLCJFdGMvR01UKzciXX0se25hbWU6Ik1vdW50YWluIFN0YW5kYXJkIFRpbWUgKE1leGljbykiLGFiYnI6Ik1EVCIsb2Zmc2V0Oi02LGlzZHN0OiEwLHRleHQ6IihVVEMtMDc6MDApIENoaWh1YWh1YSwgTGEgUGF6LCBNYXphdGxhbiIsdXRjOlsiQW1lcmljYS9DaGlodWFodWEiLCJBbWVyaWNhL01hemF0bGFuIl19LHtuYW1lOiJNb3VudGFpbiBTdGFuZGFyZCBUaW1lIixhYmJyOiJNRFQiLG9mZnNldDotNixpc2RzdDohMCx0ZXh0OiIoVVRDLTA3OjAwKSBNb3VudGFpbiBUaW1lIChVUyAmIENhbmFkYSkiLHV0YzpbIkFtZXJpY2EvQm9pc2UiLCJBbWVyaWNhL0NhbWJyaWRnZV9CYXkiLCJBbWVyaWNhL0RlbnZlciIsIkFtZXJpY2EvRWRtb250b24iLCJBbWVyaWNhL0ludXZpayIsIkFtZXJpY2EvT2ppbmFnYSIsIkFtZXJpY2EvWWVsbG93a25pZmUiLCJNU1Q3TURUIl19LHtuYW1lOiJDZW50cmFsIEFtZXJpY2EgU3RhbmRhcmQgVGltZSIsYWJicjoiQ0FTVCIsb2Zmc2V0Oi02LGlzZHN0OiExLHRleHQ6IihVVEMtMDY6MDApIENlbnRyYWwgQW1lcmljYSIsdXRjOlsiQW1lcmljYS9CZWxpemUiLCJBbWVyaWNhL0Nvc3RhX1JpY2EiLCJBbWVyaWNhL0VsX1NhbHZhZG9yIiwiQW1lcmljYS9HdWF0ZW1hbGEiLCJBbWVyaWNhL01hbmFndWEiLCJBbWVyaWNhL1RlZ3VjaWdhbHBhIiwiRXRjL0dNVCs2IiwiUGFjaWZpYy9HYWxhcGFnb3MiXX0se25hbWU6IkNlbnRyYWwgU3RhbmRhcmQgVGltZSIsYWJicjoiQ0RUIixvZmZzZXQ6LTUsaXNkc3Q6ITAsdGV4dDoiKFVUQy0wNjowMCkgQ2VudHJhbCBUaW1lIChVUyAmIENhbmFkYSkiLHV0YzpbIkFtZXJpY2EvQ2hpY2FnbyIsIkFtZXJpY2EvSW5kaWFuYS9Lbm94IiwiQW1lcmljYS9JbmRpYW5hL1RlbGxfQ2l0eSIsIkFtZXJpY2EvTWF0YW1vcm9zIiwiQW1lcmljYS9NZW5vbWluZWUiLCJBbWVyaWNhL05vcnRoX0Rha290YS9CZXVsYWgiLCJBbWVyaWNhL05vcnRoX0Rha290YS9DZW50ZXIiLCJBbWVyaWNhL05vcnRoX0Rha290YS9OZXdfU2FsZW0iLCJBbWVyaWNhL1JhaW55X1JpdmVyIiwiQW1lcmljYS9SYW5raW5fSW5sZXQiLCJBbWVyaWNhL1Jlc29sdXRlIiwiQW1lcmljYS9XaW5uaXBlZyIsIkNTVDZDRFQiXX0se25hbWU6IkNlbnRyYWwgU3RhbmRhcmQgVGltZSAoTWV4aWNvKSIsYWJicjoiQ0RUIixvZmZzZXQ6LTUsaXNkc3Q6ITAsdGV4dDoiKFVUQy0wNjowMCkgR3VhZGFsYWphcmEsIE1leGljbyBDaXR5LCBNb250ZXJyZXkiLHV0YzpbIkFtZXJpY2EvQmFoaWFfQmFuZGVyYXMiLCJBbWVyaWNhL0NhbmN1biIsIkFtZXJpY2EvTWVyaWRhIiwiQW1lcmljYS9NZXhpY29fQ2l0eSIsIkFtZXJpY2EvTW9udGVycmV5Il19LHtuYW1lOiJDYW5hZGEgQ2VudHJhbCBTdGFuZGFyZCBUaW1lIixhYmJyOiJDQ1NUIixvZmZzZXQ6LTYsaXNkc3Q6ITEsdGV4dDoiKFVUQy0wNjowMCkgU2Fza2F0Y2hld2FuIix1dGM6WyJBbWVyaWNhL1JlZ2luYSIsIkFtZXJpY2EvU3dpZnRfQ3VycmVudCJdfSx7bmFtZToiU0EgUGFjaWZpYyBTdGFuZGFyZCBUaW1lIixhYmJyOiJTUFNUIixvZmZzZXQ6LTUsaXNkc3Q6ITEsdGV4dDoiKFVUQy0wNTowMCkgQm9nb3RhLCBMaW1hLCBRdWl0byIsdXRjOlsiQW1lcmljYS9Cb2dvdGEiLCJBbWVyaWNhL0NheW1hbiIsIkFtZXJpY2EvQ29yYWxfSGFyYm91ciIsIkFtZXJpY2EvRWlydW5lcGUiLCJBbWVyaWNhL0d1YXlhcXVpbCIsIkFtZXJpY2EvSmFtYWljYSIsIkFtZXJpY2EvTGltYSIsIkFtZXJpY2EvUGFuYW1hIiwiQW1lcmljYS9SaW9fQnJhbmNvIiwiRXRjL0dNVCs1Il19LHtuYW1lOiJFYXN0ZXJuIFN0YW5kYXJkIFRpbWUiLGFiYnI6IkVEVCIsb2Zmc2V0Oi00LGlzZHN0OiEwLHRleHQ6IihVVEMtMDU6MDApIEVhc3Rlcm4gVGltZSAoVVMgJiBDYW5hZGEpIix1dGM6WyJBbWVyaWNhL0RldHJvaXQiLCJBbWVyaWNhL0hhdmFuYSIsIkFtZXJpY2EvSW5kaWFuYS9QZXRlcnNidXJnIiwiQW1lcmljYS9JbmRpYW5hL1ZpbmNlbm5lcyIsIkFtZXJpY2EvSW5kaWFuYS9XaW5hbWFjIiwiQW1lcmljYS9JcWFsdWl0IiwiQW1lcmljYS9LZW50dWNreS9Nb250aWNlbGxvIiwiQW1lcmljYS9Mb3Vpc3ZpbGxlIiwiQW1lcmljYS9Nb250cmVhbCIsIkFtZXJpY2EvTmFzc2F1IiwiQW1lcmljYS9OZXdfWW9yayIsIkFtZXJpY2EvTmlwaWdvbiIsIkFtZXJpY2EvUGFuZ25pcnR1bmciLCJBbWVyaWNhL1BvcnQtYXUtUHJpbmNlIiwiQW1lcmljYS9UaHVuZGVyX0JheSIsIkFtZXJpY2EvVG9yb250byIsIkVTVDVFRFQiXX0se25hbWU6IlVTIEVhc3Rlcm4gU3RhbmRhcmQgVGltZSIsYWJicjoiVUVEVCIsb2Zmc2V0Oi00LGlzZHN0OiEwLHRleHQ6IihVVEMtMDU6MDApIEluZGlhbmEgKEVhc3QpIix1dGM6WyJBbWVyaWNhL0luZGlhbmEvTWFyZW5nbyIsIkFtZXJpY2EvSW5kaWFuYS9WZXZheSIsIkFtZXJpY2EvSW5kaWFuYXBvbGlzIl19LHtuYW1lOiJWZW5lenVlbGEgU3RhbmRhcmQgVGltZSIsYWJicjoiVlNUIixvZmZzZXQ6LTQuNSxpc2RzdDohMSx0ZXh0OiIoVVRDLTA0OjMwKSBDYXJhY2FzIix1dGM6WyJBbWVyaWNhL0NhcmFjYXMiXX0se25hbWU6IlBhcmFndWF5IFN0YW5kYXJkIFRpbWUiLGFiYnI6IlBTVCIsb2Zmc2V0Oi00LGlzZHN0OiExLHRleHQ6IihVVEMtMDQ6MDApIEFzdW5jaW9uIix1dGM6WyJBbWVyaWNhL0FzdW5jaW9uIl19LHtuYW1lOiJBdGxhbnRpYyBTdGFuZGFyZCBUaW1lIixhYmJyOiJBRFQiLG9mZnNldDotMyxpc2RzdDohMCx0ZXh0OiIoVVRDLTA0OjAwKSBBdGxhbnRpYyBUaW1lIChDYW5hZGEpIix1dGM6WyJBbWVyaWNhL0dsYWNlX0JheSIsIkFtZXJpY2EvR29vc2VfQmF5IiwiQW1lcmljYS9IYWxpZmF4IiwiQW1lcmljYS9Nb25jdG9uIiwiQW1lcmljYS9UaHVsZSIsIkF0bGFudGljL0Jlcm11ZGEiXX0se25hbWU6IkNlbnRyYWwgQnJhemlsaWFuIFN0YW5kYXJkIFRpbWUiLGFiYnI6IkNCU1QiLG9mZnNldDotNCxpc2RzdDohMSx0ZXh0OiIoVVRDLTA0OjAwKSBDdWlhYmEiLHV0YzpbIkFtZXJpY2EvQ2FtcG9fR3JhbmRlIiwiQW1lcmljYS9DdWlhYmEiXX0se25hbWU6IlNBIFdlc3Rlcm4gU3RhbmRhcmQgVGltZSIsYWJicjoiU1dTVCIsb2Zmc2V0Oi00LGlzZHN0OiExLHRleHQ6IihVVEMtMDQ6MDApIEdlb3JnZXRvd24sIExhIFBheiwgTWFuYXVzLCBTYW4gSnVhbiIsdXRjOlsiQW1lcmljYS9Bbmd1aWxsYSIsIkFtZXJpY2EvQW50aWd1YSIsIkFtZXJpY2EvQXJ1YmEiLCJBbWVyaWNhL0JhcmJhZG9zIiwiQW1lcmljYS9CbGFuYy1TYWJsb24iLCJBbWVyaWNhL0JvYV9WaXN0YSIsIkFtZXJpY2EvQ3VyYWNhbyIsIkFtZXJpY2EvRG9taW5pY2EiLCJBbWVyaWNhL0dyYW5kX1R1cmsiLCJBbWVyaWNhL0dyZW5hZGEiLCJBbWVyaWNhL0d1YWRlbG91cGUiLCJBbWVyaWNhL0d1eWFuYSIsIkFtZXJpY2EvS3JhbGVuZGlqayIsIkFtZXJpY2EvTGFfUGF6IiwiQW1lcmljYS9Mb3dlcl9QcmluY2VzIiwiQW1lcmljYS9NYW5hdXMiLCJBbWVyaWNhL01hcmlnb3QiLCJBbWVyaWNhL01hcnRpbmlxdWUiLCJBbWVyaWNhL01vbnRzZXJyYXQiLCJBbWVyaWNhL1BvcnRfb2ZfU3BhaW4iLCJBbWVyaWNhL1BvcnRvX1ZlbGhvIiwiQW1lcmljYS9QdWVydG9fUmljbyIsIkFtZXJpY2EvU2FudG9fRG9taW5nbyIsIkFtZXJpY2EvU3RfQmFydGhlbGVteSIsIkFtZXJpY2EvU3RfS2l0dHMiLCJBbWVyaWNhL1N0X0x1Y2lhIiwiQW1lcmljYS9TdF9UaG9tYXMiLCJBbWVyaWNhL1N0X1ZpbmNlbnQiLCJBbWVyaWNhL1RvcnRvbGEiLCJFdGMvR01UKzQiXX0se25hbWU6IlBhY2lmaWMgU0EgU3RhbmRhcmQgVGltZSIsYWJicjoiUFNTVCIsb2Zmc2V0Oi00LGlzZHN0OiExLHRleHQ6IihVVEMtMDQ6MDApIFNhbnRpYWdvIix1dGM6WyJBbWVyaWNhL1NhbnRpYWdvIiwiQW50YXJjdGljYS9QYWxtZXIiXX0se25hbWU6Ik5ld2ZvdW5kbGFuZCBTdGFuZGFyZCBUaW1lIixhYmJyOiJORFQiLG9mZnNldDotMi41LGlzZHN0OiEwLHRleHQ6IihVVEMtMDM6MzApIE5ld2ZvdW5kbGFuZCIsdXRjOlsiQW1lcmljYS9TdF9Kb2hucyJdfSx7bmFtZToiRS4gU291dGggQW1lcmljYSBTdGFuZGFyZCBUaW1lIixhYmJyOiJFU0FTVCIsb2Zmc2V0Oi0zLGlzZHN0OiExLHRleHQ6IihVVEMtMDM6MDApIEJyYXNpbGlhIix1dGM6WyJBbWVyaWNhL1Nhb19QYXVsbyJdfSx7bmFtZToiQXJnZW50aW5hIFN0YW5kYXJkIFRpbWUiLGFiYnI6IkFTVCIsb2Zmc2V0Oi0zLGlzZHN0OiExLHRleHQ6IihVVEMtMDM6MDApIEJ1ZW5vcyBBaXJlcyIsdXRjOlsiQW1lcmljYS9BcmdlbnRpbmEvTGFfUmlvamEiLCJBbWVyaWNhL0FyZ2VudGluYS9SaW9fR2FsbGVnb3MiLCJBbWVyaWNhL0FyZ2VudGluYS9TYWx0YSIsIkFtZXJpY2EvQXJnZW50aW5hL1Nhbl9KdWFuIiwiQW1lcmljYS9BcmdlbnRpbmEvU2FuX0x1aXMiLCJBbWVyaWNhL0FyZ2VudGluYS9UdWN1bWFuIiwiQW1lcmljYS9BcmdlbnRpbmEvVXNodWFpYSIsIkFtZXJpY2EvQnVlbm9zX0FpcmVzIiwiQW1lcmljYS9DYXRhbWFyY2EiLCJBbWVyaWNhL0NvcmRvYmEiLCJBbWVyaWNhL0p1anV5IiwiQW1lcmljYS9NZW5kb3phIl19LHtuYW1lOiJTQSBFYXN0ZXJuIFN0YW5kYXJkIFRpbWUiLGFiYnI6IlNFU1QiLG9mZnNldDotMyxpc2RzdDohMSx0ZXh0OiIoVVRDLTAzOjAwKSBDYXllbm5lLCBGb3J0YWxlemEiLHV0YzpbIkFtZXJpY2EvQXJhZ3VhaW5hIiwiQW1lcmljYS9CZWxlbSIsIkFtZXJpY2EvQ2F5ZW5uZSIsIkFtZXJpY2EvRm9ydGFsZXphIiwiQW1lcmljYS9NYWNlaW8iLCJBbWVyaWNhL1BhcmFtYXJpYm8iLCJBbWVyaWNhL1JlY2lmZSIsIkFtZXJpY2EvU2FudGFyZW0iLCJBbnRhcmN0aWNhL1JvdGhlcmEiLCJBdGxhbnRpYy9TdGFubGV5IiwiRXRjL0dNVCszIl19LHtuYW1lOiJHcmVlbmxhbmQgU3RhbmRhcmQgVGltZSIsYWJicjoiR0RUIixvZmZzZXQ6LTIsaXNkc3Q6ITAsdGV4dDoiKFVUQy0wMzowMCkgR3JlZW5sYW5kIix1dGM6WyJBbWVyaWNhL0dvZHRoYWIiXX0se25hbWU6Ik1vbnRldmlkZW8gU3RhbmRhcmQgVGltZSIsYWJicjoiTVNUIixvZmZzZXQ6LTMsaXNkc3Q6ITEsdGV4dDoiKFVUQy0wMzowMCkgTW9udGV2aWRlbyIsdXRjOlsiQW1lcmljYS9Nb250ZXZpZGVvIl19LHtuYW1lOiJCYWhpYSBTdGFuZGFyZCBUaW1lIixhYmJyOiJCU1QiLG9mZnNldDotMyxpc2RzdDohMSx0ZXh0OiIoVVRDLTAzOjAwKSBTYWx2YWRvciIsdXRjOlsiQW1lcmljYS9CYWhpYSJdfSx7bmFtZToiVVRDLTAyIixhYmJyOiJVIixvZmZzZXQ6LTIsaXNkc3Q6ITEsdGV4dDoiKFVUQy0wMjowMCkgQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUtMDIiLHV0YzpbIkFtZXJpY2EvTm9yb25oYSIsIkF0bGFudGljL1NvdXRoX0dlb3JnaWEiLCJFdGMvR01UKzIiXX0se25hbWU6Ik1pZC1BdGxhbnRpYyBTdGFuZGFyZCBUaW1lIixhYmJyOiJNRFQiLG9mZnNldDotMSxpc2RzdDohMCx0ZXh0OiIoVVRDLTAyOjAwKSBNaWQtQXRsYW50aWMgLSBPbGQifSx7bmFtZToiQXpvcmVzIFN0YW5kYXJkIFRpbWUiLGFiYnI6IkFEVCIsb2Zmc2V0OjAsaXNkc3Q6ITAsdGV4dDoiKFVUQy0wMTowMCkgQXpvcmVzIix1dGM6WyJBbWVyaWNhL1Njb3Jlc2J5c3VuZCIsIkF0bGFudGljL0F6b3JlcyJdfSx7bmFtZToiQ2FwZSBWZXJkZSBTdGFuZGFyZCBUaW1lIixhYmJyOiJDVlNUIixvZmZzZXQ6LTEsaXNkc3Q6ITEsdGV4dDoiKFVUQy0wMTowMCkgQ2FwZSBWZXJkZSBJcy4iLHV0YzpbIkF0bGFudGljL0NhcGVfVmVyZGUiLCJFdGMvR01UKzEiXX0se25hbWU6Ik1vcm9jY28gU3RhbmRhcmQgVGltZSIsYWJicjoiTURUIixvZmZzZXQ6MSxpc2RzdDohMCx0ZXh0OiIoVVRDKSBDYXNhYmxhbmNhIix1dGM6WyJBZnJpY2EvQ2FzYWJsYW5jYSIsIkFmcmljYS9FbF9BYWl1biJdfSx7bmFtZToiVVRDIixhYmJyOiJDVVQiLG9mZnNldDowLGlzZHN0OiExLHRleHQ6IihVVEMpIENvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lIix1dGM6WyJBbWVyaWNhL0Rhbm1hcmtzaGF2biIsIkV0Yy9HTVQiXX0se25hbWU6IkdNVCBTdGFuZGFyZCBUaW1lIixhYmJyOiJHRFQiLG9mZnNldDoxLGlzZHN0OiEwLHRleHQ6IihVVEMpIER1YmxpbiwgRWRpbmJ1cmdoLCBMaXNib24sIExvbmRvbiIsdXRjOlsiQXRsYW50aWMvQ2FuYXJ5IiwiQXRsYW50aWMvRmFlcm9lIiwiQXRsYW50aWMvTWFkZWlyYSIsIkV1cm9wZS9EdWJsaW4iLCJFdXJvcGUvR3Vlcm5zZXkiLCJFdXJvcGUvSXNsZV9vZl9NYW4iLCJFdXJvcGUvSmVyc2V5IiwiRXVyb3BlL0xpc2JvbiIsIkV1cm9wZS9Mb25kb24iXX0se25hbWU6IkdyZWVud2ljaCBTdGFuZGFyZCBUaW1lIixhYmJyOiJHU1QiLG9mZnNldDowLGlzZHN0OiExLHRleHQ6IihVVEMpIE1vbnJvdmlhLCBSZXlramF2aWsiLHV0YzpbIkFmcmljYS9BYmlkamFuIiwiQWZyaWNhL0FjY3JhIiwiQWZyaWNhL0JhbWFrbyIsIkFmcmljYS9CYW5qdWwiLCJBZnJpY2EvQmlzc2F1IiwiQWZyaWNhL0NvbmFrcnkiLCJBZnJpY2EvRGFrYXIiLCJBZnJpY2EvRnJlZXRvd24iLCJBZnJpY2EvTG9tZSIsIkFmcmljYS9Nb25yb3ZpYSIsIkFmcmljYS9Ob3Vha2Nob3R0IiwiQWZyaWNhL091YWdhZG91Z291IiwiQWZyaWNhL1Nhb19Ub21lIiwiQXRsYW50aWMvUmV5a2phdmlrIiwiQXRsYW50aWMvU3RfSGVsZW5hIl19LHtuYW1lOiJXLiBFdXJvcGUgU3RhbmRhcmQgVGltZSIsYWJicjoiV0VEVCIsb2Zmc2V0OjIsaXNkc3Q6ITAsdGV4dDoiKFVUQyswMTowMCkgQW1zdGVyZGFtLCBCZXJsaW4sIEJlcm4sIFJvbWUsIFN0b2NraG9sbSwgVmllbm5hIix1dGM6WyJBcmN0aWMvTG9uZ3llYXJieWVuIiwiRXVyb3BlL0Ftc3RlcmRhbSIsIkV1cm9wZS9BbmRvcnJhIiwiRXVyb3BlL0JlcmxpbiIsIkV1cm9wZS9CdXNpbmdlbiIsIkV1cm9wZS9HaWJyYWx0YXIiLCJFdXJvcGUvTHV4ZW1ib3VyZyIsIkV1cm9wZS9NYWx0YSIsIkV1cm9wZS9Nb25hY28iLCJFdXJvcGUvT3NsbyIsIkV1cm9wZS9Sb21lIiwiRXVyb3BlL1Nhbl9NYXJpbm8iLCJFdXJvcGUvU3RvY2tob2xtIiwiRXVyb3BlL1ZhZHV6IiwiRXVyb3BlL1ZhdGljYW4iLCJFdXJvcGUvVmllbm5hIiwiRXVyb3BlL1p1cmljaCJdfSx7bmFtZToiQ2VudHJhbCBFdXJvcGUgU3RhbmRhcmQgVGltZSIsYWJicjoiQ0VEVCIsb2Zmc2V0OjIsaXNkc3Q6ITAsdGV4dDoiKFVUQyswMTowMCkgQmVsZ3JhZGUsIEJyYXRpc2xhdmEsIEJ1ZGFwZXN0LCBManVibGphbmEsIFByYWd1ZSIsdXRjOlsiRXVyb3BlL0JlbGdyYWRlIiwiRXVyb3BlL0JyYXRpc2xhdmEiLCJFdXJvcGUvQnVkYXBlc3QiLCJFdXJvcGUvTGp1YmxqYW5hIiwiRXVyb3BlL1BvZGdvcmljYSIsIkV1cm9wZS9QcmFndWUiLCJFdXJvcGUvVGlyYW5lIl19LHtuYW1lOiJSb21hbmNlIFN0YW5kYXJkIFRpbWUiLGFiYnI6IlJEVCIsb2Zmc2V0OjIsaXNkc3Q6ITAsdGV4dDoiKFVUQyswMTowMCkgQnJ1c3NlbHMsIENvcGVuaGFnZW4sIE1hZHJpZCwgUGFyaXMiLHV0YzpbIkFmcmljYS9DZXV0YSIsIkV1cm9wZS9CcnVzc2VscyIsIkV1cm9wZS9Db3BlbmhhZ2VuIiwiRXVyb3BlL01hZHJpZCIsIkV1cm9wZS9QYXJpcyJdfSx7bmFtZToiQ2VudHJhbCBFdXJvcGVhbiBTdGFuZGFyZCBUaW1lIixhYmJyOiJDRURUIixvZmZzZXQ6Mixpc2RzdDohMCx0ZXh0OiIoVVRDKzAxOjAwKSBTYXJhamV2bywgU2tvcGplLCBXYXJzYXcsIFphZ3JlYiIsdXRjOlsiRXVyb3BlL1NhcmFqZXZvIiwiRXVyb3BlL1Nrb3BqZSIsIkV1cm9wZS9XYXJzYXciLCJFdXJvcGUvWmFncmViIl19LHtuYW1lOiJXLiBDZW50cmFsIEFmcmljYSBTdGFuZGFyZCBUaW1lIixhYmJyOiJXQ0FTVCIsb2Zmc2V0OjEsaXNkc3Q6ITEsdGV4dDoiKFVUQyswMTowMCkgV2VzdCBDZW50cmFsIEFmcmljYSIsdXRjOlsiQWZyaWNhL0FsZ2llcnMiLCJBZnJpY2EvQmFuZ3VpIiwiQWZyaWNhL0JyYXp6YXZpbGxlIiwiQWZyaWNhL0RvdWFsYSIsIkFmcmljYS9LaW5zaGFzYSIsIkFmcmljYS9MYWdvcyIsIkFmcmljYS9MaWJyZXZpbGxlIiwiQWZyaWNhL0x1YW5kYSIsIkFmcmljYS9NYWxhYm8iLCJBZnJpY2EvTmRqYW1lbmEiLCJBZnJpY2EvTmlhbWV5IiwiQWZyaWNhL1BvcnRvLU5vdm8iLCJBZnJpY2EvVHVuaXMiLCJFdGMvR01ULTEiXX0se25hbWU6Ik5hbWliaWEgU3RhbmRhcmQgVGltZSIsYWJicjoiTlNUIixvZmZzZXQ6MSxpc2RzdDohMSx0ZXh0OiIoVVRDKzAxOjAwKSBXaW5kaG9layIsdXRjOlsiQWZyaWNhL1dpbmRob2VrIl19LHtuYW1lOiJHVEIgU3RhbmRhcmQgVGltZSIsYWJicjoiR0RUIixvZmZzZXQ6Myxpc2RzdDohMCx0ZXh0OiIoVVRDKzAyOjAwKSBBdGhlbnMsIEJ1Y2hhcmVzdCIsdXRjOlsiQXNpYS9OaWNvc2lhIiwiRXVyb3BlL0F0aGVucyIsIkV1cm9wZS9CdWNoYXJlc3QiLCJFdXJvcGUvQ2hpc2luYXUiXX0se25hbWU6Ik1pZGRsZSBFYXN0IFN0YW5kYXJkIFRpbWUiLGFiYnI6Ik1FRFQiLG9mZnNldDozLGlzZHN0OiEwLHRleHQ6IihVVEMrMDI6MDApIEJlaXJ1dCIsdXRjOlsiQXNpYS9CZWlydXQiXX0se25hbWU6IkVneXB0IFN0YW5kYXJkIFRpbWUiLGFiYnI6IkVTVCIsb2Zmc2V0OjIsaXNkc3Q6ITEsdGV4dDoiKFVUQyswMjowMCkgQ2Fpcm8iLHV0YzpbIkFmcmljYS9DYWlybyJdfSx7bmFtZToiU3lyaWEgU3RhbmRhcmQgVGltZSIsYWJicjoiU0RUIixvZmZzZXQ6Myxpc2RzdDohMCx0ZXh0OiIoVVRDKzAyOjAwKSBEYW1hc2N1cyIsdXRjOlsiQXNpYS9EYW1hc2N1cyJdfSx7bmFtZToiRS4gRXVyb3BlIFN0YW5kYXJkIFRpbWUiLGFiYnI6IkVFRFQiLG9mZnNldDozLGlzZHN0OiEwLHRleHQ6IihVVEMrMDI6MDApIEUuIEV1cm9wZSJ9LHtuYW1lOiJTb3V0aCBBZnJpY2EgU3RhbmRhcmQgVGltZSIsYWJicjoiU0FTVCIsb2Zmc2V0OjIsaXNkc3Q6ITEsdGV4dDoiKFVUQyswMjowMCkgSGFyYXJlLCBQcmV0b3JpYSIsdXRjOlsiQWZyaWNhL0JsYW50eXJlIiwiQWZyaWNhL0J1anVtYnVyYSIsIkFmcmljYS9HYWJvcm9uZSIsIkFmcmljYS9IYXJhcmUiLCJBZnJpY2EvSm9oYW5uZXNidXJnIiwiQWZyaWNhL0tpZ2FsaSIsIkFmcmljYS9MdWJ1bWJhc2hpIiwiQWZyaWNhL0x1c2FrYSIsIkFmcmljYS9NYXB1dG8iLCJBZnJpY2EvTWFzZXJ1IiwiQWZyaWNhL01iYWJhbmUiLCJFdGMvR01ULTIiXX0se25hbWU6IkZMRSBTdGFuZGFyZCBUaW1lIixhYmJyOiJGRFQiLG9mZnNldDozLGlzZHN0OiEwLHRleHQ6IihVVEMrMDI6MDApIEhlbHNpbmtpLCBLeWl2LCBSaWdhLCBTb2ZpYSwgVGFsbGlubiwgVmlsbml1cyIsdXRjOlsiRXVyb3BlL0hlbHNpbmtpIiwiRXVyb3BlL0tpZXYiLCJFdXJvcGUvTWFyaWVoYW1uIiwiRXVyb3BlL1JpZ2EiLCJFdXJvcGUvU29maWEiLCJFdXJvcGUvVGFsbGlubiIsIkV1cm9wZS9Vemhnb3JvZCIsIkV1cm9wZS9WaWxuaXVzIiwiRXVyb3BlL1phcG9yb3poeWUiXX0se25hbWU6IlR1cmtleSBTdGFuZGFyZCBUaW1lIixhYmJyOiJURFQiLG9mZnNldDozLGlzZHN0OiEwLHRleHQ6IihVVEMrMDI6MDApIElzdGFuYnVsIix1dGM6WyJFdXJvcGUvSXN0YW5idWwiXX0se25hbWU6IklzcmFlbCBTdGFuZGFyZCBUaW1lIixhYmJyOiJKRFQiLG9mZnNldDozLGlzZHN0OiEwLHRleHQ6IihVVEMrMDI6MDApIEplcnVzYWxlbSIsdXRjOlsiQXNpYS9KZXJ1c2FsZW0iXX0se25hbWU6IkxpYnlhIFN0YW5kYXJkIFRpbWUiLGFiYnI6IkxTVCIsb2Zmc2V0OjIsaXNkc3Q6ITEsdGV4dDoiKFVUQyswMjowMCkgVHJpcG9saSIsdXRjOlsiQWZyaWNhL1RyaXBvbGkiXX0se25hbWU6IkpvcmRhbiBTdGFuZGFyZCBUaW1lIixhYmJyOiJKU1QiLG9mZnNldDozLGlzZHN0OiExLHRleHQ6IihVVEMrMDM6MDApIEFtbWFuIix1dGM6WyJBc2lhL0FtbWFuIl19LHtuYW1lOiJBcmFiaWMgU3RhbmRhcmQgVGltZSIsYWJicjoiQVNUIixvZmZzZXQ6Myxpc2RzdDohMSx0ZXh0OiIoVVRDKzAzOjAwKSBCYWdoZGFkIix1dGM6WyJBc2lhL0JhZ2hkYWQiXX0se25hbWU6IkthbGluaW5ncmFkIFN0YW5kYXJkIFRpbWUiLGFiYnI6IktTVCIsb2Zmc2V0OjMsaXNkc3Q6ITEsdGV4dDoiKFVUQyswMzowMCkgS2FsaW5pbmdyYWQsIE1pbnNrIix1dGM6WyJFdXJvcGUvS2FsaW5pbmdyYWQiLCJFdXJvcGUvTWluc2siXX0se25hbWU6IkFyYWIgU3RhbmRhcmQgVGltZSIsYWJicjoiQVNUIixvZmZzZXQ6Myxpc2RzdDohMSx0ZXh0OiIoVVRDKzAzOjAwKSBLdXdhaXQsIFJpeWFkaCIsdXRjOlsiQXNpYS9BZGVuIiwiQXNpYS9CYWhyYWluIiwiQXNpYS9LdXdhaXQiLCJBc2lhL1FhdGFyIiwiQXNpYS9SaXlhZGgiXX0se25hbWU6IkUuIEFmcmljYSBTdGFuZGFyZCBUaW1lIixhYmJyOiJFQVNUIixvZmZzZXQ6Myxpc2RzdDohMSx0ZXh0OiIoVVRDKzAzOjAwKSBOYWlyb2JpIix1dGM6WyJBZnJpY2EvQWRkaXNfQWJhYmEiLCJBZnJpY2EvQXNtZXJhIiwiQWZyaWNhL0Rhcl9lc19TYWxhYW0iLCJBZnJpY2EvRGppYm91dGkiLCJBZnJpY2EvSnViYSIsIkFmcmljYS9LYW1wYWxhIiwiQWZyaWNhL0toYXJ0b3VtIiwiQWZyaWNhL01vZ2FkaXNodSIsIkFmcmljYS9OYWlyb2JpIiwiQW50YXJjdGljYS9TeW93YSIsIkV0Yy9HTVQtMyIsIkluZGlhbi9BbnRhbmFuYXJpdm8iLCJJbmRpYW4vQ29tb3JvIiwiSW5kaWFuL01heW90dGUiXX0se25hbWU6IklyYW4gU3RhbmRhcmQgVGltZSIsYWJicjoiSURUIixvZmZzZXQ6NC41LGlzZHN0OiEwLHRleHQ6IihVVEMrMDM6MzApIFRlaHJhbiIsdXRjOlsiQXNpYS9UZWhyYW4iXX0se25hbWU6IkFyYWJpYW4gU3RhbmRhcmQgVGltZSIsYWJicjoiQVNUIixvZmZzZXQ6NCxpc2RzdDohMSx0ZXh0OiIoVVRDKzA0OjAwKSBBYnUgRGhhYmksIE11c2NhdCIsdXRjOlsiQXNpYS9EdWJhaSIsIkFzaWEvTXVzY2F0IiwiRXRjL0dNVC00Il19LHtuYW1lOiJBemVyYmFpamFuIFN0YW5kYXJkIFRpbWUiLGFiYnI6IkFEVCIsb2Zmc2V0OjUsaXNkc3Q6ITAsdGV4dDoiKFVUQyswNDowMCkgQmFrdSIsdXRjOlsiQXNpYS9CYWt1Il19LHtuYW1lOiJSdXNzaWFuIFN0YW5kYXJkIFRpbWUiLGFiYnI6IlJTVCIsb2Zmc2V0OjQsaXNkc3Q6ITEsdGV4dDoiKFVUQyswNDowMCkgTW9zY293LCBTdC4gUGV0ZXJzYnVyZywgVm9sZ29ncmFkIix1dGM6WyJFdXJvcGUvTW9zY293IiwiRXVyb3BlL1NhbWFyYSIsIkV1cm9wZS9TaW1mZXJvcG9sIiwiRXVyb3BlL1ZvbGdvZ3JhZCJdfSx7bmFtZToiTWF1cml0aXVzIFN0YW5kYXJkIFRpbWUiLGFiYnI6Ik1TVCIsb2Zmc2V0OjQsaXNkc3Q6ITEsdGV4dDoiKFVUQyswNDowMCkgUG9ydCBMb3VpcyIsdXRjOlsiSW5kaWFuL01haGUiLCJJbmRpYW4vTWF1cml0aXVzIiwiSW5kaWFuL1JldW5pb24iXX0se25hbWU6Ikdlb3JnaWFuIFN0YW5kYXJkIFRpbWUiLGFiYnI6IkdTVCIsb2Zmc2V0OjQsaXNkc3Q6ITEsdGV4dDoiKFVUQyswNDowMCkgVGJpbGlzaSIsdXRjOlsiQXNpYS9UYmlsaXNpIl19LHtuYW1lOiJDYXVjYXN1cyBTdGFuZGFyZCBUaW1lIixhYmJyOiJDU1QiLG9mZnNldDo0LGlzZHN0OiExLHRleHQ6IihVVEMrMDQ6MDApIFllcmV2YW4iLHV0YzpbIkFzaWEvWWVyZXZhbiJdfSx7bmFtZToiQWZnaGFuaXN0YW4gU3RhbmRhcmQgVGltZSIsYWJicjoiQVNUIixvZmZzZXQ6NC41LGlzZHN0OiExLHRleHQ6IihVVEMrMDQ6MzApIEthYnVsIix1dGM6WyJBc2lhL0thYnVsIl19LHtuYW1lOiJXZXN0IEFzaWEgU3RhbmRhcmQgVGltZSIsYWJicjoiV0FTVCIsb2Zmc2V0OjUsaXNkc3Q6ITEsdGV4dDoiKFVUQyswNTowMCkgQXNoZ2FiYXQsIFRhc2hrZW50Iix1dGM6WyJBbnRhcmN0aWNhL01hd3NvbiIsIkFzaWEvQXF0YXUiLCJBc2lhL0FxdG9iZSIsIkFzaWEvQXNoZ2FiYXQiLCJBc2lhL0R1c2hhbmJlIiwiQXNpYS9PcmFsIiwiQXNpYS9TYW1hcmthbmQiLCJBc2lhL1Rhc2hrZW50IiwiRXRjL0dNVC01IiwiSW5kaWFuL0tlcmd1ZWxlbiIsIkluZGlhbi9NYWxkaXZlcyJdfSx7bmFtZToiUGFraXN0YW4gU3RhbmRhcmQgVGltZSIsYWJicjoiUFNUIixvZmZzZXQ6NSxpc2RzdDohMSx0ZXh0OiIoVVRDKzA1OjAwKSBJc2xhbWFiYWQsIEthcmFjaGkiLHV0YzpbIkFzaWEvS2FyYWNoaSJdfSx7bmFtZToiSW5kaWEgU3RhbmRhcmQgVGltZSIsYWJicjoiSVNUIixvZmZzZXQ6NS41LGlzZHN0OiExLHRleHQ6IihVVEMrMDU6MzApIENoZW5uYWksIEtvbGthdGEsIE11bWJhaSwgTmV3IERlbGhpIix1dGM6WyJBc2lhL0NhbGN1dHRhIl19LHtuYW1lOiJTcmkgTGFua2EgU3RhbmRhcmQgVGltZSIsYWJicjoiU0xTVCIsb2Zmc2V0OjUuNSxpc2RzdDohMSx0ZXh0OiIoVVRDKzA1OjMwKSBTcmkgSmF5YXdhcmRlbmVwdXJhIix1dGM6WyJBc2lhL0NvbG9tYm8iXX0se25hbWU6Ik5lcGFsIFN0YW5kYXJkIFRpbWUiLGFiYnI6Ik5TVCIsb2Zmc2V0OjUuNzUsaXNkc3Q6ITEsdGV4dDoiKFVUQyswNTo0NSkgS2F0aG1hbmR1Iix1dGM6WyJBc2lhL0thdG1hbmR1Il19LHtuYW1lOiJDZW50cmFsIEFzaWEgU3RhbmRhcmQgVGltZSIsYWJicjoiQ0FTVCIsb2Zmc2V0OjYsaXNkc3Q6ITEsdGV4dDoiKFVUQyswNjowMCkgQXN0YW5hIix1dGM6WyJBbnRhcmN0aWNhL1Zvc3RvayIsIkFzaWEvQWxtYXR5IiwiQXNpYS9CaXNoa2VrIiwiQXNpYS9ReXp5bG9yZGEiLCJBc2lhL1VydW1xaSIsIkV0Yy9HTVQtNiIsIkluZGlhbi9DaGFnb3MiXX0se25hbWU6IkJhbmdsYWRlc2ggU3RhbmRhcmQgVGltZSIsYWJicjoiQlNUIixvZmZzZXQ6Nixpc2RzdDohMSx0ZXh0OiIoVVRDKzA2OjAwKSBEaGFrYSIsdXRjOlsiQXNpYS9EaGFrYSIsIkFzaWEvVGhpbXBodSJdfSx7bmFtZToiRWthdGVyaW5idXJnIFN0YW5kYXJkIFRpbWUiLGFiYnI6IkVTVCIsb2Zmc2V0OjYsaXNkc3Q6ITEsdGV4dDoiKFVUQyswNjowMCkgRWthdGVyaW5idXJnIix1dGM6WyJBc2lhL1lla2F0ZXJpbmJ1cmciXX0se25hbWU6Ik15YW5tYXIgU3RhbmRhcmQgVGltZSIsYWJicjoiTVNUIixvZmZzZXQ6Ni41LGlzZHN0OiExLHRleHQ6IihVVEMrMDY6MzApIFlhbmdvbiAoUmFuZ29vbikiLHV0YzpbIkFzaWEvUmFuZ29vbiIsIkluZGlhbi9Db2NvcyJdfSx7bmFtZToiU0UgQXNpYSBTdGFuZGFyZCBUaW1lIixhYmJyOiJTQVNUIixvZmZzZXQ6Nyxpc2RzdDohMSx0ZXh0OiIoVVRDKzA3OjAwKSBCYW5na29rLCBIYW5vaSwgSmFrYXJ0YSIsdXRjOlsiQW50YXJjdGljYS9EYXZpcyIsIkFzaWEvQmFuZ2tvayIsIkFzaWEvSG92ZCIsIkFzaWEvSmFrYXJ0YSIsIkFzaWEvUGhub21fUGVuaCIsIkFzaWEvUG9udGlhbmFrIiwiQXNpYS9TYWlnb24iLCJBc2lhL1ZpZW50aWFuZSIsIkV0Yy9HTVQtNyIsIkluZGlhbi9DaHJpc3RtYXMiXX0se25hbWU6Ik4uIENlbnRyYWwgQXNpYSBTdGFuZGFyZCBUaW1lIixhYmJyOiJOQ0FTVCIsb2Zmc2V0OjcsaXNkc3Q6ITEsdGV4dDoiKFVUQyswNzowMCkgTm92b3NpYmlyc2siLHV0YzpbIkFzaWEvTm92b2t1em5ldHNrIiwiQXNpYS9Ob3Zvc2liaXJzayIsIkFzaWEvT21zayJdfSx7bmFtZToiQ2hpbmEgU3RhbmRhcmQgVGltZSIsYWJicjoiQ1NUIixvZmZzZXQ6OCxpc2RzdDohMSx0ZXh0OiIoVVRDKzA4OjAwKSBCZWlqaW5nLCBDaG9uZ3FpbmcsIEhvbmcgS29uZywgVXJ1bXFpIix1dGM6WyJBc2lhL0hvbmdfS29uZyIsIkFzaWEvTWFjYXUiLCJBc2lhL1NoYW5naGFpIl19LHtuYW1lOiJOb3J0aCBBc2lhIFN0YW5kYXJkIFRpbWUiLGFiYnI6Ik5BU1QiLG9mZnNldDo4LGlzZHN0OiExLHRleHQ6IihVVEMrMDg6MDApIEtyYXNub3lhcnNrIix1dGM6WyJBc2lhL0tyYXNub3lhcnNrIl19LHtuYW1lOiJTaW5nYXBvcmUgU3RhbmRhcmQgVGltZSIsYWJicjoiTVBTVCIsb2Zmc2V0OjgsaXNkc3Q6ITEsdGV4dDoiKFVUQyswODowMCkgS3VhbGEgTHVtcHVyLCBTaW5nYXBvcmUiLHV0YzpbIkFzaWEvQnJ1bmVpIiwiQXNpYS9LdWFsYV9MdW1wdXIiLCJBc2lhL0t1Y2hpbmciLCJBc2lhL01ha2Fzc2FyIiwiQXNpYS9NYW5pbGEiLCJBc2lhL1NpbmdhcG9yZSIsIkV0Yy9HTVQtOCJdfSx7bmFtZToiVy4gQXVzdHJhbGlhIFN0YW5kYXJkIFRpbWUiLGFiYnI6IldBU1QiLG9mZnNldDo4LGlzZHN0OiExLHRleHQ6IihVVEMrMDg6MDApIFBlcnRoIix1dGM6WyJBbnRhcmN0aWNhL0Nhc2V5IiwiQXVzdHJhbGlhL1BlcnRoIl19LHtuYW1lOiJUYWlwZWkgU3RhbmRhcmQgVGltZSIsYWJicjoiVFNUIixvZmZzZXQ6OCxpc2RzdDohMSx0ZXh0OiIoVVRDKzA4OjAwKSBUYWlwZWkiLHV0YzpbIkFzaWEvVGFpcGVpIl19LHtuYW1lOiJVbGFhbmJhYXRhciBTdGFuZGFyZCBUaW1lIixhYmJyOiJVU1QiLG9mZnNldDo4LGlzZHN0OiExLHRleHQ6IihVVEMrMDg6MDApIFVsYWFuYmFhdGFyIix1dGM6WyJBc2lhL0Nob2liYWxzYW4iLCJBc2lhL1VsYWFuYmFhdGFyIl19LHtuYW1lOiJOb3J0aCBBc2lhIEVhc3QgU3RhbmRhcmQgVGltZSIsYWJicjoiTkFFU1QiLG9mZnNldDo5LGlzZHN0OiExLHRleHQ6IihVVEMrMDk6MDApIElya3V0c2siLHV0YzpbIkFzaWEvSXJrdXRzayJdfSx7bmFtZToiVG9reW8gU3RhbmRhcmQgVGltZSIsYWJicjoiVFNUIixvZmZzZXQ6OSxpc2RzdDohMSx0ZXh0OiIoVVRDKzA5OjAwKSBPc2FrYSwgU2FwcG9ybywgVG9reW8iLHV0YzpbIkFzaWEvRGlsaSIsIkFzaWEvSmF5YXB1cmEiLCJBc2lhL1Rva3lvIiwiRXRjL0dNVC05IiwiUGFjaWZpYy9QYWxhdSJdfSx7bmFtZToiS29yZWEgU3RhbmRhcmQgVGltZSIsYWJicjoiS1NUIixvZmZzZXQ6OSxpc2RzdDohMSx0ZXh0OiIoVVRDKzA5OjAwKSBTZW91bCIsdXRjOlsiQXNpYS9QeW9uZ3lhbmciLCJBc2lhL1Nlb3VsIl19LHtuYW1lOiJDZW4uIEF1c3RyYWxpYSBTdGFuZGFyZCBUaW1lIixhYmJyOiJDQVNUIixvZmZzZXQ6OS41LGlzZHN0OiExLHRleHQ6IihVVEMrMDk6MzApIEFkZWxhaWRlIix1dGM6WyJBdXN0cmFsaWEvQWRlbGFpZGUiLCJBdXN0cmFsaWEvQnJva2VuX0hpbGwiXX0se25hbWU6IkFVUyBDZW50cmFsIFN0YW5kYXJkIFRpbWUiLGFiYnI6IkFDU1QiLG9mZnNldDo5LjUsaXNkc3Q6ITEsdGV4dDoiKFVUQyswOTozMCkgRGFyd2luIix1dGM6WyJBdXN0cmFsaWEvRGFyd2luIl19LHtuYW1lOiJFLiBBdXN0cmFsaWEgU3RhbmRhcmQgVGltZSIsYWJicjoiRUFTVCIsb2Zmc2V0OjEwLGlzZHN0OiExLHRleHQ6IihVVEMrMTA6MDApIEJyaXNiYW5lIix1dGM6WyJBdXN0cmFsaWEvQnJpc2JhbmUiLCJBdXN0cmFsaWEvTGluZGVtYW4iXX0se25hbWU6IkFVUyBFYXN0ZXJuIFN0YW5kYXJkIFRpbWUiLGFiYnI6IkFFU1QiLG9mZnNldDoxMCxpc2RzdDohMSx0ZXh0OiIoVVRDKzEwOjAwKSBDYW5iZXJyYSwgTWVsYm91cm5lLCBTeWRuZXkiLHV0YzpbIkF1c3RyYWxpYS9NZWxib3VybmUiLCJBdXN0cmFsaWEvU3lkbmV5Il19LHtuYW1lOiJXZXN0IFBhY2lmaWMgU3RhbmRhcmQgVGltZSIsYWJicjoiV1BTVCIsb2Zmc2V0OjEwLGlzZHN0OiExLHRleHQ6IihVVEMrMTA6MDApIEd1YW0sIFBvcnQgTW9yZXNieSIsdXRjOlsiQW50YXJjdGljYS9EdW1vbnREVXJ2aWxsZSIsIkV0Yy9HTVQtMTAiLCJQYWNpZmljL0d1YW0iLCJQYWNpZmljL1BvcnRfTW9yZXNieSIsIlBhY2lmaWMvU2FpcGFuIiwiUGFjaWZpYy9UcnVrIl19LHtuYW1lOiJUYXNtYW5pYSBTdGFuZGFyZCBUaW1lIixhYmJyOiJUU1QiLG9mZnNldDoxMCxpc2RzdDohMSx0ZXh0OiIoVVRDKzEwOjAwKSBIb2JhcnQiLHV0YzpbIkF1c3RyYWxpYS9DdXJyaWUiLCJBdXN0cmFsaWEvSG9iYXJ0Il19LHtuYW1lOiJZYWt1dHNrIFN0YW5kYXJkIFRpbWUiLGFiYnI6IllTVCIsb2Zmc2V0OjEwLGlzZHN0OiExLHRleHQ6IihVVEMrMTA6MDApIFlha3V0c2siLHV0YzpbIkFzaWEvQ2hpdGEiLCJBc2lhL0toYW5keWdhIiwiQXNpYS9ZYWt1dHNrIl19LHtuYW1lOiJDZW50cmFsIFBhY2lmaWMgU3RhbmRhcmQgVGltZSIsYWJicjoiQ1BTVCIsb2Zmc2V0OjExLGlzZHN0OiExLHRleHQ6IihVVEMrMTE6MDApIFNvbG9tb24gSXMuLCBOZXcgQ2FsZWRvbmlhIix1dGM6WyJBbnRhcmN0aWNhL01hY3F1YXJpZSIsIkV0Yy9HTVQtMTEiLCJQYWNpZmljL0VmYXRlIiwiUGFjaWZpYy9HdWFkYWxjYW5hbCIsIlBhY2lmaWMvS29zcmFlIiwiUGFjaWZpYy9Ob3VtZWEiLCJQYWNpZmljL1BvbmFwZSJdfSx7bmFtZToiVmxhZGl2b3N0b2sgU3RhbmRhcmQgVGltZSIsYWJicjoiVlNUIixvZmZzZXQ6MTEsaXNkc3Q6ITEsdGV4dDoiKFVUQysxMTowMCkgVmxhZGl2b3N0b2siLHV0YzpbIkFzaWEvU2FraGFsaW4iLCJBc2lhL1VzdC1OZXJhIiwiQXNpYS9WbGFkaXZvc3RvayJdfSx7bmFtZToiTmV3IFplYWxhbmQgU3RhbmRhcmQgVGltZSIsYWJicjoiTlpTVCIsb2Zmc2V0OjEyLGlzZHN0OiExLHRleHQ6IihVVEMrMTI6MDApIEF1Y2tsYW5kLCBXZWxsaW5ndG9uIix1dGM6WyJBbnRhcmN0aWNhL01jTXVyZG8iLCJQYWNpZmljL0F1Y2tsYW5kIl19LHtuYW1lOiJVVEMrMTIiLGFiYnI6IlUiLG9mZnNldDoxMixpc2RzdDohMSx0ZXh0OiIoVVRDKzEyOjAwKSBDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSsxMiIsdXRjOlsiRXRjL0dNVC0xMiIsIlBhY2lmaWMvRnVuYWZ1dGkiLCJQYWNpZmljL0t3YWphbGVpbiIsIlBhY2lmaWMvTWFqdXJvIiwiUGFjaWZpYy9OYXVydSIsIlBhY2lmaWMvVGFyYXdhIiwiUGFjaWZpYy9XYWtlIiwiUGFjaWZpYy9XYWxsaXMiXX0se25hbWU6IkZpamkgU3RhbmRhcmQgVGltZSIsYWJicjoiRlNUIixvZmZzZXQ6MTIsaXNkc3Q6ITEsdGV4dDoiKFVUQysxMjowMCkgRmlqaSIsdXRjOlsiUGFjaWZpYy9GaWppIl19LHtuYW1lOiJNYWdhZGFuIFN0YW5kYXJkIFRpbWUiLGFiYnI6Ik1TVCIsb2Zmc2V0OjEyLGlzZHN0OiExLHRleHQ6IihVVEMrMTI6MDApIE1hZ2FkYW4iLHV0YzpbIkFzaWEvQW5hZHlyIiwiQXNpYS9LYW1jaGF0a2EiLCJBc2lhL01hZ2FkYW4iLCJBc2lhL1NyZWRuZWtvbHltc2siXX0se25hbWU6IkthbWNoYXRrYSBTdGFuZGFyZCBUaW1lIixhYmJyOiJLRFQiLG9mZnNldDoxMyxpc2RzdDohMCx0ZXh0OiIoVVRDKzEyOjAwKSBQZXRyb3BhdmxvdnNrLUthbWNoYXRza3kgLSBPbGQifSx7bmFtZToiVG9uZ2EgU3RhbmRhcmQgVGltZSIsYWJicjoiVFNUIixvZmZzZXQ6MTMsaXNkc3Q6ITEsdGV4dDoiKFVUQysxMzowMCkgTnVrdSdhbG9mYSIsdXRjOlsiRXRjL0dNVC0xMyIsIlBhY2lmaWMvRW5kZXJidXJ5IiwiUGFjaWZpYy9GYWthb2ZvIiwiUGFjaWZpYy9Ub25nYXRhcHUiXX0se25hbWU6IlNhbW9hIFN0YW5kYXJkIFRpbWUiLGFiYnI6IlNTVCIsb2Zmc2V0OjEzLGlzZHN0OiExLHRleHQ6IihVVEMrMTM6MDApIFNhbW9hIix1dGM6WyJQYWNpZmljL0FwaWEiXX1dLHByb2Zlc3Npb246WyJBaXJsaW5lIFBpbG90IiwiQWNhZGVtaWMgVGVhbSIsIkFjY291bnRhbnQiLCJBY2NvdW50IEV4ZWN1dGl2ZSIsIkFjdG9yIiwiQWN0dWFyeSIsIkFjcXVpc2l0aW9uIEFuYWx5c3QiLCJBZG1pbmlzdHJhdGl2ZSBBc3N0LiIsIkFkbWluaXN0cmF0aXZlIEFuYWx5c3QiLCJBZG1pbmlzdHJhdG9yIiwiQWR2ZXJ0aXNpbmcgRGlyZWN0b3IiLCJBZXJvc3BhY2UgRW5naW5lZXIiLCJBZ2VudCIsIkFncmljdWx0dXJhbCBJbnNwZWN0b3IiLCJBZ3JpY3VsdHVyYWwgU2NpZW50aXN0IiwiQWlyIFRyYWZmaWMgQ29udHJvbGxlciIsIkFuaW1hbCBUcmFpbmVyIiwiQW50aHJvcG9sb2dpc3QiLCJBcHByYWlzZXIiLCJBcmNoaXRlY3QiLCJBcnQgRGlyZWN0b3IiLCJBcnRpc3QiLCJBc3Ryb25vbWVyIiwiQXRobGV0aWMgQ29hY2giLCJBdWRpdG9yIiwiQXV0aG9yIiwiQmFrZXIiLCJCYW5rZXIiLCJCYW5rcnVwdGN5IEF0dG9ybmV5IiwiQmVuZWZpdHMgTWFuYWdlciIsIkJpb2xvZ2lzdCIsIkJpby1mZWVkYmFjayBTcGVjaWFsaXN0IiwiQmlvbWVkaWNhbCBFbmdpbmVlciIsIkJpb3RlY2huaWNhbCBSZXNlYXJjaGVyIiwiQnJvYWRjYXN0ZXIiLCJCcm9rZXIiLCJCdWlsZGluZyBNYW5hZ2VyIiwiQnVpbGRpbmcgQ29udHJhY3RvciIsIkJ1aWxkaW5nIEluc3BlY3RvciIsIkJ1c2luZXNzIEFuYWx5c3QiLCJCdXNpbmVzcyBQbGFubmVyIiwiQnVzaW5lc3MgTWFuYWdlciIsIkJ1eWVyIiwiQ2FsbCBDZW50ZXIgTWFuYWdlciIsIkNhcmVlciBDb3Vuc2Vsb3IiLCJDYXNoIE1hbmFnZXIiLCJDZXJhbWljIEVuZ2luZWVyIiwiQ2hpZWYgRXhlY3V0aXZlIE9mZmljZXIiLCJDaGllZiBPcGVyYXRpb24gT2ZmaWNlciIsIkNoZWYiLCJDaGVtaWNhbCBFbmdpbmVlciIsIkNoZW1pc3QiLCJDaGlsZCBDYXJlIE1hbmFnZXIiLCJDaGllZiBNZWRpY2FsIE9mZmljZXIiLCJDaGlyb3ByYWN0b3IiLCJDaW5lbWF0b2dyYXBoZXIiLCJDaXR5IEhvdXNpbmcgTWFuYWdlciIsIkNpdHkgTWFuYWdlciIsIkNpdmlsIEVuZ2luZWVyIiwiQ2xhaW1zIE1hbmFnZXIiLCJDbGluaWNhbCBSZXNlYXJjaCBBc3Npc3RhbnQiLCJDb2xsZWN0aW9ucyBNYW5hZ2VyLiIsIkNvbXBsaWFuY2UgTWFuYWdlciIsIkNvbXB0cm9sbGVyIiwiQ29tcHV0ZXIgTWFuYWdlciIsIkNvbW1lcmNpYWwgQXJ0aXN0IiwiQ29tbXVuaWNhdGlvbnMgQWZmYWlycyBEaXJlY3RvciIsIkNvbW11bmljYXRpb25zIERpcmVjdG9yIiwiQ29tbXVuaWNhdGlvbnMgRW5naW5lZXIiLCJDb21wZW5zYXRpb24gQW5hbHlzdCIsIkNvbXB1dGVyIFByb2dyYW1tZXIiLCJDb21wdXRlciBPcHMuIE1hbmFnZXIiLCJDb21wdXRlciBFbmdpbmVlciIsIkNvbXB1dGVyIE9wZXJhdG9yIiwiQ29tcHV0ZXIgR3JhcGhpY3MgU3BlY2lhbGlzdCIsIkNvbnN0cnVjdGlvbiBFbmdpbmVlciIsIkNvbnN0cnVjdGlvbiBNYW5hZ2VyIiwiQ29uc3VsdGFudCIsIkNvbnN1bWVyIFJlbGF0aW9ucyBNYW5hZ2VyIiwiQ29udHJhY3QgQWRtaW5pc3RyYXRvciIsIkNvcHlyaWdodCBBdHRvcm5leSIsIkNvcHl3cml0ZXIiLCJDb3Jwb3JhdGUgUGxhbm5lciIsIkNvcnJlY3Rpb25zIE9mZmljZXIiLCJDb3NtZXRvbG9naXN0IiwiQ3JlZGl0IEFuYWx5c3QiLCJDcnVpc2UgRGlyZWN0b3IiLCJDaGllZiBJbmZvcm1hdGlvbiBPZmZpY2VyIiwiQ2hpZWYgVGVjaG5vbG9neSBPZmZpY2VyIiwiQ3VzdG9tZXIgU2VydmljZSBNYW5hZ2VyIiwiQ3J5cHRvbG9naXN0IiwiRGFuY2VyIiwiRGF0YSBTZWN1cml0eSBNYW5hZ2VyIiwiRGF0YWJhc2UgTWFuYWdlciIsIkRheSBDYXJlIEluc3RydWN0b3IiLCJEZW50aXN0IiwiRGVzaWduZXIiLCJEZXNpZ24gRW5naW5lZXIiLCJEZXNrdG9wIFB1Ymxpc2hlciIsIkRldmVsb3BlciIsIkRldmVsb3BtZW50IE9mZmljZXIiLCJEaWFtb25kIE1lcmNoYW50IiwiRGlldGl0aWFuIiwiRGlyZWN0IE1hcmtldGVyIiwiRGlyZWN0b3IiLCJEaXN0cmlidXRpb24gTWFuYWdlciIsIkRpdmVyc2l0eSBNYW5hZ2VyIiwiRWNvbm9taXN0IiwiRUVPIENvbXBsaWFuY2UgTWFuYWdlciIsIkVkaXRvciIsIkVkdWNhdGlvbiBBZG1pbmF0b3IiLCJFbGVjdHJpY2FsIEVuZ2luZWVyIiwiRWxlY3RybyBPcHRpY2FsIEVuZ2luZWVyIiwiRWxlY3Ryb25pY3MgRW5naW5lZXIiLCJFbWJhc3N5IE1hbmFnZW1lbnQiLCJFbXBsb3ltZW50IEFnZW50IiwiRW5naW5lZXIgVGVjaG5pY2lhbiIsIkVudHJlcHJlbmV1ciIsIkVudmlyb25tZW50YWwgQW5hbHlzdCIsIkVudmlyb25tZW50YWwgQXR0b3JuZXkiLCJFbnZpcm9ubWVudGFsIEVuZ2luZWVyIiwiRW52aXJvbm1lbnRhbCBTcGVjaWFsaXN0IiwiRXNjcm93IE9mZmljZXIiLCJFc3RpbWF0b3IiLCJFeGVjdXRpdmUgQXNzaXN0YW50IiwiRXhlY3V0aXZlIERpcmVjdG9yIiwiRXhlY3V0aXZlIFJlY3J1aXRlciIsIkZhY2lsaXRpZXMgTWFuYWdlciIsIkZhbWlseSBDb3Vuc2Vsb3IiLCJGYXNoaW9uIEV2ZW50cyBNYW5hZ2VyIiwiRmFzaGlvbiBNZXJjaGFuZGlzZXIiLCJGYXN0IEZvb2QgTWFuYWdlciIsIkZpbG0gUHJvZHVjZXIiLCJGaWxtIFByb2R1Y3Rpb24gQXNzaXN0YW50IiwiRmluYW5jaWFsIEFuYWx5c3QiLCJGaW5hbmNpYWwgUGxhbm5lciIsIkZpbmFuY2llciIsIkZpbmUgQXJ0aXN0IiwiV2lsZGxpZmUgU3BlY2lhbGlzdCIsIkZpdG5lc3MgQ29uc3VsdGFudCIsIkZsaWdodCBBdHRlbmRhbnQiLCJGbGlnaHQgRW5naW5lZXIiLCJGbG9yYWwgRGVzaWduZXIiLCJGb29kICYgQmV2ZXJhZ2UgRGlyZWN0b3IiLCJGb29kIFNlcnZpY2UgTWFuYWdlciIsIkZvcmVzdHJ5IFRlY2huaWNpYW4iLCJGcmFuY2hpc2UgTWFuYWdlbWVudCIsIkZyYW5jaGlzZSBTYWxlcyIsIkZyYXVkIEludmVzdGlnYXRvciIsIkZyZWVsYW5jZSBXcml0ZXIiLCJGdW5kIFJhaXNlciIsIkdlbmVyYWwgTWFuYWdlciIsIkdlb2xvZ2lzdCIsIkdlbmVyYWwgQ291bnNlbCIsIkdlcmlhdHJpYyBTcGVjaWFsaXN0IiwiR2Vyb250b2xvZ2lzdCIsIkdsYW1vdXIgUGhvdG9ncmFwaGVyIiwiR29sZiBDbHViIE1hbmFnZXIiLCJHb3VybWV0IENoZWYiLCJHcmFwaGljIERlc2lnbmVyIiwiR3JvdW5kcyBLZWVwZXIiLCJIYXphcmRvdXMgV2FzdGUgTWFuYWdlciIsIkhlYWx0aCBDYXJlIE1hbmFnZXIiLCJIZWFsdGggVGhlcmFwaXN0IiwiSGVhbHRoIFNlcnZpY2UgQWRtaW5pc3RyYXRvciIsIkhlYXJpbmcgT2ZmaWNlciIsIkhvbWUgRWNvbm9taXN0IiwiSG9ydGljdWx0dXJpc3QiLCJIb3NwaXRhbCBBZG1pbmlzdHJhdG9yIiwiSG90ZWwgTWFuYWdlciIsIkh1bWFuIFJlc291cmNlcyBNYW5hZ2VyIiwiSW1wb3J0ZXIiLCJJbmR1c3RyaWFsIERlc2lnbmVyIiwiSW5kdXN0cmlhbCBFbmdpbmVlciIsIkluZm9ybWF0aW9uIERpcmVjdG9yIiwiSW5zaWRlIFNhbGVzIiwiSW5zdXJhbmNlIEFkanVzdGVyIiwiSW50ZXJpb3IgRGVjb3JhdG9yIiwiSW50ZXJuYWwgQ29udHJvbHMgRGlyZWN0b3IiLCJJbnRlcm5hdGlvbmFsIEFjY3QuIiwiSW50ZXJuYXRpb25hbCBDb3VyaWVyIiwiSW50ZXJuYXRpb25hbCBMYXd5ZXIiLCJJbnRlcnByZXRlciIsIkludmVzdGlnYXRvciIsIkludmVzdG1lbnQgQmFua2VyIiwiSW52ZXN0bWVudCBNYW5hZ2VyIiwiSVQgQXJjaGl0ZWN0IiwiSVQgUHJvamVjdCBNYW5hZ2VyIiwiSVQgU3lzdGVtcyBBbmFseXN0IiwiSmV3ZWxlciIsIkpvaW50IFZlbnR1cmUgTWFuYWdlciIsIkpvdXJuYWxpc3QiLCJMYWJvciBOZWdvdGlhdG9yIiwiTGFib3IgT3JnYW5pemVyIiwiTGFib3IgUmVsYXRpb25zIE1hbmFnZXIiLCJMYWIgU2VydmljZXMgRGlyZWN0b3IiLCJMYWIgVGVjaG5pY2lhbiIsIkxhbmQgRGV2ZWxvcGVyIiwiTGFuZHNjYXBlIEFyY2hpdGVjdCIsIkxhdyBFbmZvcmNlbWVudCBPZmZpY2VyIiwiTGF3eWVyIiwiTGVhZCBTb2Z0d2FyZSBFbmdpbmVlciIsIkxlYWQgU29mdHdhcmUgVGVzdCBFbmdpbmVlciIsIkxlYXNpbmcgTWFuYWdlciIsIkxlZ2FsIFNlY3JldGFyeSIsIkxpYnJhcnkgTWFuYWdlciIsIkxpdGlnYXRpb24gQXR0b3JuZXkiLCJMb2FuIE9mZmljZXIiLCJMb2JieWlzdCIsIkxvZ2lzdGljcyBNYW5hZ2VyIiwiTWFpbnRlbmFuY2UgTWFuYWdlciIsIk1hbmFnZW1lbnQgQ29uc3VsdGFudCIsIk1hbmFnZWQgQ2FyZSBEaXJlY3RvciIsIk1hbmFnaW5nIFBhcnRuZXIiLCJNYW51ZmFjdHVyaW5nIERpcmVjdG9yIiwiTWFucG93ZXIgUGxhbm5lciIsIk1hcmluZSBCaW9sb2dpc3QiLCJNYXJrZXQgUmVzLiBBbmFseXN0IiwiTWFya2V0aW5nIERpcmVjdG9yIiwiTWF0ZXJpYWxzIE1hbmFnZXIiLCJNYXRoZW1hdGljaWFuIiwiTWVtYmVyc2hpcCBDaGFpcm1hbiIsIk1lY2hhbmljIiwiTWVjaGFuaWNhbCBFbmdpbmVlciIsIk1lZGlhIEJ1eWVyIiwiTWVkaWNhbCBJbnZlc3RvciIsIk1lZGljYWwgU2VjcmV0YXJ5IiwiTWVkaWNhbCBUZWNobmljaWFuIiwiTWVudGFsIEhlYWx0aCBDb3Vuc2Vsb3IiLCJNZXJjaGFuZGlzZXIiLCJNZXRhbGx1cmdpY2FsIEVuZ2luZWVyaW5nIiwiTWV0ZW9yb2xvZ2lzdCIsIk1pY3JvYmlvbG9naXN0IiwiTUlTIE1hbmFnZXIiLCJNb3Rpb24gUGljdHVyZSBEaXJlY3RvciIsIk11bHRpbWVkaWEgRGlyZWN0b3IiLCJNdXNpY2lhbiIsIk5ldHdvcmsgQWRtaW5pc3RyYXRvciIsIk5ldHdvcmsgU3BlY2lhbGlzdCIsIk5ldHdvcmsgT3BlcmF0b3IiLCJOZXcgUHJvZHVjdCBNYW5hZ2VyIiwiTm92ZWxpc3QiLCJOdWNsZWFyIEVuZ2luZWVyIiwiTnVjbGVhciBTcGVjaWFsaXN0IiwiTnV0cml0aW9uaXN0IiwiTnVyc2luZyBBZG1pbmlzdHJhdG9yIiwiT2NjdXBhdGlvbmFsIFRoZXJhcGlzdCIsIk9jZWFub2dyYXBoZXIiLCJPZmZpY2UgTWFuYWdlciIsIk9wZXJhdGlvbnMgTWFuYWdlciIsIk9wZXJhdGlvbnMgUmVzZWFyY2ggRGlyZWN0b3IiLCJPcHRpY2FsIFRlY2huaWNpYW4iLCJPcHRvbWV0cmlzdCIsIk9yZ2FuaXphdGlvbmFsIERldmVsb3BtZW50IE1hbmFnZXIiLCJPdXRwbGFjZW1lbnQgU3BlY2lhbGlzdCIsIlBhcmFsZWdhbCIsIlBhcmsgUmFuZ2VyIiwiUGF0ZW50IEF0dG9ybmV5IiwiUGF5cm9sbCBTcGVjaWFsaXN0IiwiUGVyc29ubmVsIFNwZWNpYWxpc3QiLCJQZXRyb2xldW0gRW5naW5lZXIiLCJQaGFybWFjaXN0IiwiUGhvdG9ncmFwaGVyIiwiUGh5c2ljYWwgVGhlcmFwaXN0IiwiUGh5c2ljaWFuIiwiUGh5c2ljaWFuIEFzc2lzdGFudCIsIlBoeXNpY2lzdCIsIlBsYW5uaW5nIERpcmVjdG9yIiwiUG9kaWF0cmlzdCIsIlBvbGl0aWNhbCBBbmFseXN0IiwiUG9saXRpY2FsIFNjaWVudGlzdCIsIlBvbGl0aWNpYW4iLCJQb3J0Zm9saW8gTWFuYWdlciIsIlByZXNjaG9vbCBNYW5hZ2VtZW50IiwiUHJlc2Nob29sIFRlYWNoZXIiLCJQcmluY2lwYWwiLCJQcml2YXRlIEJhbmtlciIsIlByaXZhdGUgSW52ZXN0aWdhdG9yIiwiUHJvYmF0aW9uIE9mZmljZXIiLCJQcm9jZXNzIEVuZ2luZWVyIiwiUHJvZHVjZXIiLCJQcm9kdWN0IE1hbmFnZXIiLCJQcm9kdWN0IEVuZ2luZWVyIiwiUHJvZHVjdGlvbiBFbmdpbmVlciIsIlByb2R1Y3Rpb24gUGxhbm5lciIsIlByb2Zlc3Npb25hbCBBdGhsZXRlIiwiUHJvZmVzc2lvbmFsIENvYWNoIiwiUHJvZmVzc29yIiwiUHJvamVjdCBFbmdpbmVlciIsIlByb2plY3QgTWFuYWdlciIsIlByb2dyYW0gTWFuYWdlciIsIlByb3BlcnR5IE1hbmFnZXIiLCJQdWJsaWMgQWRtaW5pc3RyYXRvciIsIlB1YmxpYyBTYWZldHkgRGlyZWN0b3IiLCJQUiBTcGVjaWFsaXN0IiwiUHVibGlzaGVyIiwiUHVyY2hhc2luZyBBZ2VudCIsIlB1Ymxpc2hpbmcgRGlyZWN0b3IiLCJRdWFsaXR5IEFzc3VyYW5jZSBTcGVjaWFsaXN0IiwiUXVhbGl0eSBDb250cm9sIEVuZ2luZWVyIiwiUXVhbGl0eSBDb250cm9sIEluc3BlY3RvciIsIlJhZGlvbG9neSBNYW5hZ2VyIiwiUmFpbHJvYWQgRW5naW5lZXIiLCJSZWFsIEVzdGF0ZSBCcm9rZXIiLCJSZWNyZWF0aW9uYWwgRGlyZWN0b3IiLCJSZWNydWl0ZXIiLCJSZWRldmVsb3BtZW50IFNwZWNpYWxpc3QiLCJSZWd1bGF0b3J5IEFmZmFpcnMgTWFuYWdlciIsIlJlZ2lzdGVyZWQgTnVyc2UiLCJSZWhhYmlsaXRhdGlvbiBDb3Vuc2Vsb3IiLCJSZWxvY2F0aW9uIE1hbmFnZXIiLCJSZXBvcnRlciIsIlJlc2VhcmNoIFNwZWNpYWxpc3QiLCJSZXN0YXVyYW50IE1hbmFnZXIiLCJSZXRhaWwgU3RvcmUgTWFuYWdlciIsIlJpc2sgQW5hbHlzdCIsIlNhZmV0eSBFbmdpbmVlciIsIlNhbGVzIEVuZ2luZWVyIiwiU2FsZXMgVHJhaW5lciIsIlNhbGVzIFByb21vdGlvbiBNYW5hZ2VyIiwiU2FsZXMgUmVwcmVzZW50YXRpdmUiLCJTYWxlcyBNYW5hZ2VyIiwiU2VydmljZSBNYW5hZ2VyIiwiU2FuaXRhdGlvbiBFbmdpbmVlciIsIlNjaWVudGlmaWMgUHJvZ3JhbW1lciIsIlNjaWVudGlmaWMgV3JpdGVyIiwiU2VjdXJpdGllcyBBbmFseXN0IiwiU2VjdXJpdHkgQ29uc3VsdGFudCIsIlNlY3VyaXR5IERpcmVjdG9yIiwiU2VtaW5hciBQcmVzZW50ZXIiLCJTaGlwJ3MgT2ZmaWNlciIsIlNpbmdlciIsIlNvY2lhbCBEaXJlY3RvciIsIlNvY2lhbCBQcm9ncmFtIFBsYW5uZXIiLCJTb2NpYWwgUmVzZWFyY2giLCJTb2NpYWwgU2NpZW50aXN0IiwiU29jaWFsIFdvcmtlciIsIlNvY2lvbG9naXN0IiwiU29mdHdhcmUgRGV2ZWxvcGVyIiwiU29mdHdhcmUgRW5naW5lZXIiLCJTb2Z0d2FyZSBUZXN0IEVuZ2luZWVyIiwiU29pbCBTY2llbnRpc3QiLCJTcGVjaWFsIEV2ZW50cyBNYW5hZ2VyIiwiU3BlY2lhbCBFZHVjYXRpb24gVGVhY2hlciIsIlNwZWNpYWwgUHJvamVjdHMgRGlyZWN0b3IiLCJTcGVlY2ggUGF0aG9sb2dpc3QiLCJTcGVlY2ggV3JpdGVyIiwiU3BvcnRzIEV2ZW50IE1hbmFnZXIiLCJTdGF0aXN0aWNpYW4iLCJTdG9yZSBNYW5hZ2VyIiwiU3RyYXRlZ2ljIEFsbGlhbmNlIERpcmVjdG9yIiwiU3RyYXRlZ2ljIFBsYW5uaW5nIERpcmVjdG9yIiwiU3RyZXNzIFJlZHVjdGlvbiBTcGVjaWFsaXN0IiwiU3RvY2ticm9rZXIiLCJTdXJ2ZXlvciIsIlN0cnVjdHVyYWwgRW5naW5lZXIiLCJTdXBlcmludGVuZGVudCIsIlN1cHBseSBDaGFpbiBEaXJlY3RvciIsIlN5c3RlbSBFbmdpbmVlciIsIlN5c3RlbXMgQW5hbHlzdCIsIlN5c3RlbXMgUHJvZ3JhbW1lciIsIlN5c3RlbSBBZG1pbmlzdHJhdG9yIiwiVGF4IFNwZWNpYWxpc3QiLCJUZWFjaGVyIiwiVGVjaG5pY2FsIFN1cHBvcnQgU3BlY2lhbGlzdCIsIlRlY2huaWNhbCBJbGx1c3RyYXRvciIsIlRlY2huaWNhbCBXcml0ZXIiLCJUZWNobm9sb2d5IERpcmVjdG9yIiwiVGVsZWNvbSBBbmFseXN0IiwiVGVsZW1hcmtldGVyIiwiVGhlYXRyaWNhbCBEaXJlY3RvciIsIlRpdGxlIEV4YW1pbmVyIiwiVG91ciBFc2NvcnQiLCJUb3VyIEd1aWRlIERpcmVjdG9yIiwiVHJhZmZpYyBNYW5hZ2VyIiwiVHJhaW5lciBUcmFuc2xhdG9yIiwiVHJhbnNwb3J0YXRpb24gTWFuYWdlciIsIlRyYXZlbCBBZ2VudCIsIlRyZWFzdXJlciIsIlRWIFByb2dyYW1tZXIiLCJVbmRlcndyaXRlciIsIlVuaW9uIFJlcHJlc2VudGF0aXZlIiwiVW5pdmVyc2l0eSBBZG1pbmlzdHJhdG9yIiwiVW5pdmVyc2l0eSBEZWFuIiwiVXJiYW4gUGxhbm5lciIsIlZldGVyaW5hcmlhbiIsIlZlbmRvciBSZWxhdGlvbnMgRGlyZWN0b3IiLCJWaXRpY3VsdHVyaXN0IiwiV2FyZWhvdXNlIE1hbmFnZXIiXSxhbmltYWxzOntvY2VhbjpbIkFjYW50aGFyZWEiLCJBbmVtb25lIiwiQW5nZWxmaXNoIEtpbmciLCJBaGkgVHVuYSIsIkFsYmFjb3JlIiwiQW1lcmljYW4gT3lzdGVyIiwiQW5jaG92eSIsIkFybW9yZWQgU25haWwiLCJBcmN0aWMgQ2hhciIsIkF0bGFudGljIEJsdWVmaW4gVHVuYSIsIkF0bGFudGljIENvZCIsIkF0bGFudGljIEdvbGlhdGggR3JvdXBlciIsIkF0bGFudGljIFRydW1wZXRmaXNoIiwiQXRsYW50aWMgV29sZmZpc2giLCJCYWxlZW4gV2hhbGUiLCJCYW5kZWQgQnV0dGVyZmx5ZmlzaCIsIkJhbmRlZCBDb3JhbCBTaHJpbXAiLCJCYW5kZWQgU2VhIEtyYWl0IiwiQmFybmFjbGUiLCJCYXJuZG9vciBTa2F0ZSIsIkJhcnJhY3VkYSIsIkJhc2tpbmcgU2hhcmsiLCJCYXNzIiwiQmVsdWdhIFdoYWxlIiwiQmx1ZWJhbmRlZCBHb2J5IiwiQmx1ZWhlYWQgV3Jhc3NlIiwiQmx1ZWZpc2giLCJCbHVlc3RyZWFrIENsZWFuZXItV3Jhc3NlIiwiQmx1ZSBNYXJsaW4iLCJCbHVlIFNoYXJrIiwiQmx1ZSBTcGlueSBMb2JzdGVyIiwiQmx1ZSBUYW5nIiwiQmx1ZSBXaGFsZSIsIkJyb2FkY2x1YiBDdXR0bGVmaXNoIiwiQnVsbCBTaGFyayIsIkNoYW1iZXJlZCBOYXV0aWx1cyIsIkNoaWxlYW4gQmFza2V0IFN0YXIiLCJDaGlsZWFuIEphY2sgTWFja2VyZWwiLCJDaGlub29rIFNhbG1vbiIsIkNocmlzdG1hcyBUcmVlIFdvcm0iLCJDbGFtIiwiQ2xvd24gQW5lbW9uZWZpc2giLCJDbG93biBUcmlnZ2VyZmlzaCIsIkNvZCIsIkNvZWxhY2FudGgiLCJDb2Nrc2NvbWIgQ3VwIENvcmFsIiwiQ29tbW9uIEZhbmd0b290aCIsIkNvbmNoIiwiQ29va2llY3V0dGVyIFNoYXJrIiwiQ29wZXBvZCIsIkNvcmFsIiwiQ29yeWRvcmFzIiwiQ293bm9zZSBSYXkiLCJDcmFiIiwiQ3Jvd24tb2YtVGhvcm5zIFN0YXJmaXNoIiwiQ3VzaGlvbiBTdGFyIiwiQ3V0dGxlZmlzaCIsIkNhbGlmb3JuaWEgU2VhIE90dGVycyIsIkRvbHBoaW4iLCJEb2xwaGluZmlzaCIsIkRvcnkiLCJEZXZpbCBGaXNoIiwiRHVnb25nIiwiRHVtYm8gT2N0b3B1cyIsIkR1bmdlbmVzcyBDcmFiIiwiRWNjZW50cmljIFNhbmQgRG9sbGFyIiwiRWRpYmxlIFNlYSBDdWN1bWJlciIsIkVlbCIsIkVsZXBoYW50IFNlYWwiLCJFbGtob3JuIENvcmFsIiwiRW1wZXJvciBTaHJpbXAiLCJFc3R1YXJpbmUgQ3JvY29kaWxlIiwiRmF0aGVhZCBTY3VscGluIiwiRmlkZGxlciBDcmFiIiwiRmluIFdoYWxlIiwiRmxhbWViYWNrIiwiRmxhbWluZ28gVG9uZ3VlIFNuYWlsIiwiRmxhc2hsaWdodCBGaXNoIiwiRmxhdGJhY2sgVHVydGxlIiwiRmxhdGZpc2giLCJGbHlpbmcgRmlzaCIsIkZsb3VuZGVyIiwiRmx1a2UiLCJGcmVuY2ggQW5nZWxmaXNoIiwiRnJpbGxlZCBTaGFyayIsIkZ1Z3UgKGFsc28gY2FsbGVkIFB1ZmZlcmZpc2gpIiwiR2FyIiwiR2VvZHVjayIsIkdpYW50IEJhcnJlbCBTcG9uZ2UiLCJHaWFudCBDYXJpYmJlYW4gU2VhIEFuZW1vbmUiLCJHaWFudCBDbGFtIiwiR2lhbnQgSXNvcG9kIiwiR2lhbnQgS2luZ2Zpc2giLCJHaWFudCBPYXJmaXNoIiwiR2lhbnQgUGFjaWZpYyBPY3RvcHVzIiwiR2lhbnQgUHlyb3NvbWUiLCJHaWFudCBTZWEgU3RhciIsIkdpYW50IFNxdWlkIiwiR2xvd2luZyBTdWNrZXIgT2N0b3B1cyIsIkdpYW50IFR1YmUgV29ybSIsIkdvYmxpbiBTaGFyayIsIkdvb3NlZmlzaCIsIkdyZWF0IFdoaXRlIFNoYXJrIiwiR3JlZW5sYW5kIFNoYXJrIiwiR3JleSBBdGxhbnRpYyBTZWFsIiwiR3JvdXBlciIsIkdydW5pb24iLCJHdWluZWFmb3dsIFB1ZmZlciIsIkhhZGRvY2siLCJIYWtlIiwiSGFsaWJ1dCIsIkhhbW1lcmhlYWQgU2hhcmsiLCJIYXB1a2EiLCJIYXJib3IgUG9ycG9pc2UiLCJIYXJib3IgU2VhbCIsIkhhdGNoZXRmaXNoIiwiSGF3YWlpYW4gTW9uayBTZWFsIiwiSGF3a3NiaWxsIFR1cnRsZSIsIkhlY3RvcidzIERvbHBoaW4iLCJIZXJtaXQgQ3JhYiIsIkhlcnJpbmciLCJIb2tpIiwiSG9ybiBTaGFyayIsIkhvcnNlc2hvZSBDcmFiIiwiSHVtcGJhY2sgQW5nbGVyZmlzaCIsIkh1bXBiYWNrIFdoYWxlIiwiSWNlZmlzaCIsIkltcGVyYXRvciBBbmdlbGZpc2giLCJJcnVrYW5kamkgSmVsbHlmaXNoIiwiSXNvcG9kIiwiSXZvcnkgQnVzaCBDb3JhbCIsIkphcGFuZXNlIFNwaWRlciBDcmFiIiwiSmVsbHlmaXNoIiwiSm9obiBEb3J5IiwiSnVhbiBGZXJuYW5kZXogRnVyIFNlYWwiLCJLaWxsZXIgV2hhbGUiLCJLaXdhIEhpcnN1dGEiLCJLcmlsbCIsIkxhZ29vbiBUcmlnZ2VyZmlzaCIsIkxhbXByZXkiLCJMZWFmeSBTZWFkcmFnb24iLCJMZW9wYXJkIFNlYWwiLCJMaW1wZXQiLCJMaW5nIiwiTGlvbmZpc2giLCJMaW9ucyBNYW5lIEplbGx5ZmlzaCIsIkxvYmUgQ29yYWwiLCJMb2JzdGVyIiwiTG9nZ2VyaGVhZCBUdXJ0bGUiLCJMb25nbm9zZSBTYXdzaGFyayIsIkxvbmdzbm91dCBTZWFob3JzZSIsIkxvcGhlbGlhIENvcmFsIiwiTWFycnVzIE9ydGhvY2FubmEiLCJNYW5hdGVlIiwiTWFudGEgUmF5IiwiTWFybGluIiwiTWVnYW1vdXRoIFNoYXJrIiwiTWV4aWNhbiBMb29rZG93biIsIk1pbWljIE9jdG9wdXMiLCJNb29uIEplbGx5IiwiTW9sbHVzayIsIk1vbmtmaXNoIiwiTW9yYXkgRWVsIiwiTXVsbGV0IiwiTXVzc2VsIiwiTWVnYWxhZG9uIiwiTmFwb2xlb24gV3Jhc3NlIiwiTmFzc2F1IEdyb3VwZXIiLCJOYXJ3aGFsIiwiTmF1dGlsdXMiLCJOZWVkbGVmaXNoIiwiTm9ydGhlcm4gU2VhaG9yc2UiLCJOb3J0aCBBdGxhbnRpYyBSaWdodCBXaGFsZSIsIk5vcnRoZXJuIFJlZCBTbmFwcGVyIiwiTm9yd2F5IExvYnN0ZXIiLCJOdWRpYnJhbmNoIiwiTnVyc2UgU2hhcmsiLCJPYXJmaXNoIiwiT2NlYW4gU3VuZmlzaCIsIk9jZWFuaWMgV2hpdGV0aXAgU2hhcmsiLCJPY3RvcHVzIiwiT2xpdmUgU2VhIFNuYWtlIiwiT3JhbmdlIFJvdWdoeSIsIk9zdHJhY29kIiwiT3R0ZXIiLCJPeXN0ZXIiLCJQYWNpZmljIEFuZ2Vsc2hhcmsiLCJQYWNpZmljIEJsYWNrZHJhZ29uIiwiUGFjaWZpYyBIYWxpYnV0IiwiUGFjaWZpYyBTYXJkaW5lIiwiUGFjaWZpYyBTZWEgTmV0dGxlIEplbGx5ZmlzaCIsIlBhY2lmaWMgV2hpdGUgU2lkZWQgRG9scGhpbiIsIlBhbnRyb3BpY2FsIFNwb3R0ZWQgRG9scGhpbiIsIlBhdGFnb25pYW4gVG9vdGhmaXNoIiwiUGVhY29jayBNYW50aXMgU2hyaW1wIiwiUGVsYWdpYyBUaHJlc2hlciBTaGFyayIsIlBlbmd1aW4iLCJQZXJ1dmlhbiBBbmNob3ZldGEiLCJQaWxjaGFyZCIsIlBpbmsgU2FsbW9uIiwiUGlubmlwZWQiLCJQbGFua3RvbiIsIlBvcnBvaXNlIiwiUG9sYXIgQmVhciIsIlBvcnR1Z3Vlc2UgTWFuIG8nIFdhciIsIlB5Y25vZ29uaWQgU2VhIFNwaWRlciIsIlF1YWhvZyIsIlF1ZWVuIEFuZ2VsZmlzaCIsIlF1ZWVuIENvbmNoIiwiUXVlZW4gUGFycm90ZmlzaCIsIlF1ZWVuc2xhbmQgR3JvdXBlciIsIlJhZ2Zpc2giLCJSYXRmaXNoIiwiUmF0dGFpbCBGaXNoIiwiUmF5IiwiUmVkIERydW0iLCJSZWQgS2luZyBDcmFiIiwiUmluZ2VkIFNlYWwiLCJSaXNzbydzIERvbHBoaW4iLCJSb3NzIFNlYWxzIiwiU2FibGVmaXNoIiwiU2FsbW9uIiwiU2FuZCBEb2xsYXIiLCJTYW5kYmFyIFNoYXJrIiwiU2F3ZmlzaCIsIlNhcmNhc3RpYyBGcmluZ2VoZWFkIiwiU2NhbGxvcGVkIEhhbW1lcmhlYWQgU2hhcmsiLCJTZWFob3JzZSIsIlNlYSBDdWN1bWJlciIsIlNlYSBMaW9uIiwiU2VhIFVyY2hpbiIsIlNlYWwiLCJTaGFyayIsIlNob3J0ZmluIE1ha28gU2hhcmsiLCJTaG92ZWxub3NlIEd1aXRhcmZpc2giLCJTaHJpbXAiLCJTaWx2ZXJzaWRlIEZpc2giLCJTa2lwamFjayBUdW5hIiwiU2xlbmRlciBTbmlwZSBFZWwiLCJTbWFsbHRvb3RoIFNhd2Zpc2giLCJTbWVsdHMiLCJTb2NrZXllIFNhbG1vbiIsIlNvdXRoZXJuIFN0aW5ncmF5IiwiU3BvbmdlIiwiU3BvdHRlZCBQb3JjdXBpbmVmaXNoIiwiU3BvdHRlZCBEb2xwaGluIiwiU3BvdHRlZCBFYWdsZSBSYXkiLCJTcG90dGVkIE1vcmF5IiwiU3F1aWQiLCJTcXVpZHdvcm0iLCJTdGFyZmlzaCIsIlN0aWNrbGViYWNrIiwiU3RvbmVmaXNoIiwiU3RvcGxpZ2h0IExvb3NlamF3IiwiU3R1cmdlb24iLCJTd29yZGZpc2giLCJUYW4gQnJpc3RsZW1vdXRoIiwiVGFzc2VsZWQgV29iYmVnb25nIiwiVGVycmlibGUgQ2xhdyBMb2JzdGVyIiwiVGhyZWVzcG90IERhbXNlbGZpc2giLCJUaWdlciBQcmF3biIsIlRpZ2VyIFNoYXJrIiwiVGlsZWZpc2giLCJUb2FkZmlzaCIsIlRyb3BpY2FsIFR3by1XaW5nIEZseWZpc2giLCJUdW5hIiwiVW1icmVsbGEgU3F1aWQiLCJWZWx2ZXQgQ3JhYiIsIlZlbnVzIEZseXRyYXAgU2VhIEFuZW1vbmUiLCJWaWd0b3JuaWVsbGEgV29ybSIsIlZpcGVyZmlzaCIsIlZhbXBpcmUgU3F1aWQiLCJWYXF1aXRhIiwiV2Fob28iLCJXYWxydXMiLCJXZXN0IEluZGlhbiBNYW5hdGVlIiwiV2hhbGUiLCJXaGFsZSBTaGFyayIsIldoaXB0YWlsIEd1bHBlciIsIldoaXRlLUJlYWtlZCBEb2xwaGluIiwiV2hpdGUtUmluZyBHYXJkZW4gRWVsIiwiV2hpdGUgU2hyaW1wIiwiV29iYmVnb25nIiwiV3Jhc3NlIiwiV3JlY2tmaXNoIiwiWGlwaG9zdXJhIiwiWWVsbG93dGFpbCBEYW1zZWxmaXNoIiwiWWVsbG93ZXllIFJvY2tmaXNoIiwiWWVsbG93IEN1cCBCbGFjayBDb3JhbCIsIlllbGxvdyBUdWJlIFNwb25nZSIsIlllbGxvd2ZpbiBUdW5hIiwiWmVicmFzaGFyayIsIlpvb3BsYW5rdG9uIl0sZGVzZXJ0OlsiQWFyZHdvbGYiLCJBZGRheCIsIkFmcmljYW4gV2lsZCBBc3MiLCJBbnQiLCJBbnRlbG9wZSIsIkFybWFkaWxsbyIsIkJhYm9vbiIsIkJhZGdlciIsIkJhdCIsIkJlYXJkZWQgRHJhZ29uIiwiQmVldGxlIiwiQmlyZCIsIkJsYWNrLWZvb3RlZCBDYXQiLCJCb2EiLCJCcm93biBCZWFyIiwiQnVzdGFyZCIsIkJ1dHRlcmZseSIsIkNhbWVsIiwiQ2FyYWNhbCIsIkNhcmFjYXJhIiwiQ2F0ZXJwaWxsYXIiLCJDZW50aXBlZGUiLCJDaGVldGFoIiwiQ2hpcG11bmsiLCJDaHVja3dhbGxhIiwiQ2xpbWJpbmcgTW91c2UiLCJDb2F0aSIsIkNvYnJhIiwiQ290dG9uIFJhdCIsIkNvdWdhciIsIkNvdXJzZXIiLCJDcmFuZSBGbHkiLCJDcm93IiwiRGFzc2llIFJhdCIsIkRvdmUiLCJEdW5uYXJ0IiwiRWFnbGUiLCJFY2hpZG5hIiwiRWxlcGhhbnQiLCJFbXUiLCJGYWxjb24iLCJGbHkiLCJGb3giLCJGcm9nbW91dGgiLCJHZWNrbyIsIkdlb2Zmcm95J3MgQ2F0IiwiR2VyYmlsIiwiR3Jhc3Nob3BwZXIiLCJHdWFuYWNvIiwiR3VuZGkiLCJIYW1zdGVyIiwiSGF3ayIsIkhlZGdlaG9nIiwiSHllbmEiLCJIeXJheCIsIkphY2thbCIsIkthbmdhcm9vIiwiS2FuZ2Fyb28gUmF0IiwiS2VzdHJlbCIsIktvd2FyaSIsIkt1bHRhcnIiLCJMZW9wYXJkIiwiTGlvbiIsIk1hY2F3IiwiTWVlcmthdCIsIk1vdXNlIiwiT3J5eCIsIk9zdHJpY2giLCJPd2wiLCJQcm9uZ2hvcm4iLCJQeXRob24iLCJSYWJiaXQiLCJSYWNjb29uIiwiUmF0dGxlc25ha2UiLCJSaGlub2Nlcm9zIiwiU2FuZCBDYXQiLCJTcGVjdGFjbGVkIEJlYXIiLCJTcGlueSBNb3VzZSIsIlN0YXJsaW5nIiwiU3RpY2sgQnVnIiwiVGFyYW50dWxhIiwiVGl0IiwiVG9hZCIsIlRvcnRvaXNlIiwiVHlyYW50IEZseWNhdGNoZXIiLCJWaXBlciIsIlZ1bHR1cmUiLCJXYXh3aW5nIiwiWGVydXMiLCJaZWJyYSJdLGdyYXNzbGFuZDpbIkFhcmR2YXJrIiwiQWFyZHdvbGYiLCJBY2NlbnRvciIsIkFmcmljYW4gQnVmZmFsbyIsIkFmcmljYW4gV2lsZCBEb2ciLCJBbHBhY2EiLCJBbmFjb25kYSIsIkFudCIsIkFudGVhdGVyIiwiQW50ZWxvcGUiLCJBcm1hZGlsbG8iLCJCYWJvb24iLCJCYWRnZXIiLCJCYW5kaWNvb3QiLCJCYXJiZXQiLCJCYXQiLCJCZWUiLCJCZWUtZWF0ZXIiLCJCZWV0bGUiLCJCaXJkIiwiQmlzb24iLCJCbGFjay1mb290ZWQgQ2F0IiwiQmxhY2stZm9vdGVkIEZlcnJldCIsIkJsdWViaXJkIiwiQm9hIiwiQm93ZXJiaXJkIiwiQnJvd24gQmVhciIsIkJ1c2ggRG9nIiwiQnVzaHNocmlrZSIsIkJ1c3RhcmQiLCJCdXR0ZXJmbHkiLCJCdXp6YXJkIiwiQ2FyYWNhbCIsIkNhcmFjYXJhIiwiQ2FyZGluYWwiLCJDYXRlcnBpbGxhciIsIkNoZWV0YWgiLCJDaGlwbXVuayIsIkNpdmV0IiwiQ2xpbWJpbmcgTW91c2UiLCJDbG91ZGVkIExlb3BhcmQiLCJDb2F0aSIsIkNvYnJhIiwiQ29ja2F0b28iLCJDb2Nrcm9hY2giLCJDb21tb24gR2VuZXQiLCJDb3R0b24gUmF0IiwiQ291Z2FyIiwiQ291cnNlciIsIkNveW90ZSIsIkNyYW5lIiwiQ3JhbmUgRmx5IiwiQ3JpY2tldCIsIkNyb3ciLCJDdWxwZW8iLCJEZWF0aCBBZGRlciIsIkRlZXIiLCJEZWVyIE1vdXNlIiwiRGluZ28iLCJEaW5vc2F1ciIsIkRvdmUiLCJEcm9uZ28iLCJEdWNrIiwiRHVpa2VyIiwiRHVubmFydCIsIkVhZ2xlIiwiRWNoaWRuYSIsIkVsZXBoYW50IiwiRWxrIiwiRW11IiwiRmFsY29uIiwiRmluY2giLCJGbGVhIiwiRmx5IiwiRmx5aW5nIEZyb2ciLCJGb3giLCJGcm9nIiwiRnJvZ21vdXRoIiwiR2FydGVyIFNuYWtlIiwiR2F6ZWxsZSIsIkdlY2tvIiwiR2VvZmZyb3kncyBDYXQiLCJHZXJiaWwiLCJHaWFudCBUb3J0b2lzZSIsIkdpcmFmZmUiLCJHcmFzc2hvcHBlciIsIkdyaXNvbiIsIkdyb3VuZGhvZyIsIkdyb3VzZSIsIkd1YW5hY28iLCJHdWluZWEgUGlnIiwiSGFtc3RlciIsIkhhcnJpZXIiLCJIYXJ0ZWJlZXN0IiwiSGF3ayIsIkhlZGdlaG9nIiwiSGVsbWV0c2hyaWtlIiwiSGlwcG9wb3RhbXVzIiwiSG9ybmJpbGwiLCJIeWVuYSIsIkh5cmF4IiwiSW1wYWxhIiwiSmFja2FsIiwiSmFndWFyIiwiSmFndWFydW5kaSIsIkthbmdhcm9vIiwiS2FuZ2Fyb28gUmF0IiwiS2VzdHJlbCIsIkt1bHRhcnIiLCJMYWR5YnVnIiwiTGVvcGFyZCIsIkxpb24iLCJNYWNhdyIsIk1lZXJrYXQiLCJNb3VzZSIsIk5ld3QiLCJPcnl4IiwiT3N0cmljaCIsIk93bCIsIlBhbmdvbGluIiwiUGhlYXNhbnQiLCJQcmFpcmllIERvZyIsIlByb25naG9ybiIsIlByemV3YWxza2kncyBIb3JzZSIsIlB5dGhvbiIsIlF1b2xsIiwiUmFiYml0IiwiUmF2ZW4iLCJSaGlub2Nlcm9zIiwiU2hlbGR1Y2siLCJTbG90aCBCZWFyIiwiU3BlY3RhY2xlZCBCZWFyIiwiU3F1aXJyZWwiLCJTdGFybGluZyIsIlN0aWNrIEJ1ZyIsIlRhbWFuZHVhIiwiVGFzbWFuaWFuIERldmlsIiwiVGhvcm5iaWxsIiwiVGhydXNoIiwiVG9hZCIsIlRvcnRvaXNlIl0sZm9yZXN0OlsiQWdvdXRpIiwiQW5hY29uZGEiLCJBbm9hIiwiQW50IiwiQW50ZWF0ZXIiLCJBbnRlbG9wZSIsIkFybWFkaWxsbyIsIkFzaWFuIEJsYWNrIEJlYXIiLCJBeWUtYXllIiwiQmFiaXJ1c2EiLCJCYWJvb24iLCJCYWRnZXIiLCJCYW5kaWNvb3QiLCJCYW50ZW5nIiwiQmFyYmV0IiwiQmFzaWxpc2siLCJCYXQiLCJCZWFyZGVkIERyYWdvbiIsIkJlZSIsIkJlZS1lYXRlciIsIkJlZXRsZSIsIkJldHRvbmciLCJCaW50dXJvbmciLCJCaXJkLW9mLXBhcmFkaXNlIiwiQm9uZ28iLCJCb3dlcmJpcmQiLCJCdWxidWwiLCJCdXNoIERvZyIsIkJ1c2hiYWJ5IiwiQnVzaHNocmlrZSIsIkJ1dHRlcmZseSIsIkJ1enphcmQiLCJDYWVjaWxpYW4iLCJDYXJkaW5hbCIsIkNhc3Nvd2FyeSIsIkNhdGVycGlsbGFyIiwiQ2VudGlwZWRlIiwiQ2hhbWVsZW9uIiwiQ2hpbXBhbnplZSIsIkNpY2FkYSIsIkNpdmV0IiwiQ2xvdWRlZCBMZW9wYXJkIiwiQ29hdGkiLCJDb2JyYSIsIkNvY2thdG9vIiwiQ29ja3JvYWNoIiwiQ29sdWdvIiwiQ290aW5nYSIsIkNvdHRvbiBSYXQiLCJDb3VnYXIiLCJDcmFuZSBGbHkiLCJDcmlja2V0IiwiQ3JvY29kaWxlIiwiQ3JvdyIsIkN1Y2tvbyIsIkN1c2N1cyIsIkRlYXRoIEFkZGVyIiwiRGVlciIsIkRob2xlIiwiRGluZ28iLCJEaW5vc2F1ciIsIkRyb25nbyIsIkR1Y2siLCJEdWlrZXIiLCJFYWdsZSIsIkVjaGlkbmEiLCJFbGVwaGFudCIsIkZpbmNoIiwiRmxhdC1oZWFkZWQgQ2F0IiwiRmxlYSIsIkZsb3dlcnBlY2tlciIsIkZseSIsIkZseWluZyBGcm9nIiwiRm9zc2EiLCJGcm9nIiwiRnJvZ21vdXRoIiwiR2F1ciIsIkdlY2tvIiwiR29yaWxsYSIsIkdyaXNvbiIsIkhhd2FpaWFuIEhvbmV5Y3JlZXBlciIsIkhhd2siLCJIZWRnZWhvZyIsIkhlbG1ldHNocmlrZSIsIkhvcm5iaWxsIiwiSHlyYXgiLCJJZ3VhbmEiLCJKYWNrYWwiLCJKYWd1YXIiLCJKYWd1YXJ1bmRpIiwiS2VzdHJlbCIsIkxhZHlidWciLCJMZW11ciIsIkxlb3BhcmQiLCJMaW9uIiwiTWFjYXciLCJNYW5kcmlsbCIsIk1hcmdheSIsIk1vbmtleSIsIk1vdXNlIiwiTW91c2UgRGVlciIsIk5ld3QiLCJPa2FwaSIsIk9sZCBXb3JsZCBGbHljYXRjaGVyIiwiT3Jhbmd1dGFuIiwiT3dsIiwiUGFuZ29saW4iLCJQZWFmb3dsIiwiUGhlYXNhbnQiLCJQb3NzdW0iLCJQeXRob24iLCJRdW9ra2EiLCJSYWJiaXQiLCJSYWNjb29uIiwiUmVkIFBhbmRhIiwiUmVkIFJpdmVyIEhvZyIsIlJoaW5vY2Vyb3MiLCJTbG90aCBCZWFyIiwiU3BlY3RhY2xlZCBCZWFyIiwiU3F1aXJyZWwiLCJTdGFybGluZyIsIlN0aWNrIEJ1ZyIsIlN1biBCZWFyIiwiVGFtYW5kdWEiLCJUYW1hcmluIiwiVGFwaXIiLCJUYXJhbnR1bGEiLCJUaHJ1c2giLCJUaWdlciIsIlRpdCIsIlRvYWQiLCJUb3J0b2lzZSIsIlRvdWNhbiIsIlRyb2dvbiIsIlRydW1wZXRlciIsIlR1cmFjbyIsIlR1cnRsZSIsIlR5cmFudCBGbHljYXRjaGVyIiwiVmlwZXIiLCJWdWx0dXJlIiwiV2FsbGFieSIsIldhcmJsZXIiLCJXYXNwIiwiV2F4d2luZyIsIldlYXZlciIsIldlYXZlci1maW5jaCIsIldoaXN0bGVyIiwiV2hpdGUtZXllIiwiV2h5ZGFoIiwiV29vZHN3YWxsb3ciLCJXb3JtIiwiV3JlbiIsIlhlbm9wcyIsIlllbGxvd2phY2tldCIsIkFjY2VudG9yIiwiQWZyaWNhbiBCdWZmYWxvIiwiQW1lcmljYW4gQmxhY2sgQmVhciIsIkFub2xlIiwiQmlyZCIsIkJpc29uIiwiQm9hIiwiQnJvd24gQmVhciIsIkNoaXBtdW5rIiwiQ29tbW9uIEdlbmV0IiwiQ29wcGVyaGVhZCIsIkNveW90ZSIsIkRlZXIgTW91c2UiLCJEb3Jtb3VzZSIsIkVsayIsIkVtdSIsIkZpc2hlciIsIkZveCIsIkdhcnRlciBTbmFrZSIsIkdpYW50IFBhbmRhIiwiR2lhbnQgVG9ydG9pc2UiLCJHcm91bmRob2ciLCJHcm91c2UiLCJHdWFuYWNvIiwiSGltYWxheWFuIFRhaHIiLCJLYW5nYXJvbyIsIktvYWxhIiwiTnVtYmF0IiwiUXVvbGwiLCJSYWNjb29uIGRvZyIsIlRhc21hbmlhbiBEZXZpbCIsIlRob3JuYmlsbCIsIlR1cmtleSIsIlZvbGUiLCJXZWFzZWwiLCJXaWxkY2F0IiwiV29sZiIsIldvbWJhdCIsIldvb2RjaHVjayIsIldvb2RwZWNrZXIiXSxmYXJtOlsiQWxwYWNhIiwiQnVmZmFsbyIsIkJhbnRlbmciLCJDb3ciLCJDYXQiLCJDaGlja2VuIiwiQ2FycCIsIkNhbWVsIiwiRG9ua2V5IiwiRG9nIiwiRHVjayIsIkVtdSIsIkdvYXQiLCJHYXlhbCIsIkd1aW5lYSIsIkdvb3NlIiwiSG9yc2UiLCJIb25leSIsIkxsYW1hIiwiUGlnIiwiUGlnZW9uIiwiUmhlYSIsIlJhYmJpdCIsIlNoZWVwIiwiU2lsa3dvcm0iLCJUdXJrZXkiLCJZYWsiLCJaZWJ1Il0scGV0OlsiQmVhcmRlZCBEcmFnb24iLCJCaXJkcyIsIkJ1cnJvIiwiQ2F0cyIsIkNoYW1lbGVvbnMiLCJDaGlja2VucyIsIkNoaW5jaGlsbGFzIiwiQ2hpbmVzZSBXYXRlciBEcmFnb24iLCJDb3dzIiwiRG9ncyIsIkRvbmtleSIsIkR1Y2tzIiwiRmVycmV0cyIsIkZpc2giLCJHZWNrb3MiLCJHZWVzZSIsIkdlcmJpbHMiLCJHb2F0cyIsIkd1aW5lYSBGb3dsIiwiR3VpbmVhIFBpZ3MiLCJIYW1zdGVycyIsIkhlZGdlaG9ncyIsIkhvcnNlcyIsIklndWFuYXMiLCJMbGFtYXMiLCJMaXphcmRzIiwiTWljZSIsIk11bGUiLCJQZWFmb3dsIiwiUGlncyBhbmQgSG9ncyIsIlBpZ2VvbnMiLCJQb25pZXMiLCJQb3QgQmVsbGllZCBQaWciLCJSYWJiaXRzIiwiUmF0cyIsIlNoZWVwIiwiU2tpbmtzIiwiU25ha2VzIiwiU3RpY2sgSW5zZWN0cyIsIlN1Z2FyIEdsaWRlcnMiLCJUYXJhbnR1bGEiLCJUdXJrZXlzIiwiVHVydGxlcyJdLHpvbzpbIkFhcmR2YXJrIiwiQWZyaWNhbiBXaWxkIERvZyIsIkFsZGFicmEgVG9ydG9pc2UiLCJBbWVyaWNhbiBBbGxpZ2F0b3IiLCJBbWVyaWNhbiBCaXNvbiIsIkFtdXIgVGlnZXIiLCJBbmFjb25kYSIsIkFuZGVhbiBDb25kb3IiLCJBc2lhbiBFbGVwaGFudCIsIkJhYnkgRG9sbCBTaGVlcCIsIkJhbGQgRWFnbGUiLCJCYXJyZWQgT3dsIiwiQmx1ZSBJZ3VhbmEiLCJCb2VyIEdvYXQiLCJDYWxpZm9ybmlhIFNlYSBMaW9uIiwiQ2FyaWJiZWFuIEZsYW1pbmdvIiwiQ2hpbmNoaWxsYSIsIkNvbGxhcmVkIExlbXVyIiwiQ29xdWVyZWwncyBTaWZha2EiLCJDdWJhbiBBbWF6b24gUGFycm90IiwiRWJvbnkgTGFuZ3VyIiwiRmVubmVjIEZveCIsIkZvc3NhIiwiR2VsYWRhIiwiR2lhbnQgQW50ZWF0ZXIiLCJHaXJhZmZlIiwiR29yaWxsYSIsIkdyaXp6bHkgQmVhciIsIkhlbmtlbCdzIExlYWYtdGFpbGVkIEdlY2tvIiwiSW5kaWFuIEdoYXJpYWwiLCJJbmRpYW4gUmhpbm9jZXJvcyIsIktpbmcgQ29icmEiLCJLaW5nIFZ1bHR1cmUiLCJLb21vZG8gRHJhZ29uIiwiTGlubmUncyBUd28tdG9lZCBTbG90aCIsIkxpb24iLCJMaXR0bGUgUGVuZ3VpbiIsIk1hZGFnYXNjYXIgVHJlZSBCb2EiLCJNYWdlbGxhbmljIFBlbmd1aW4iLCJNYWxheWFuIFRhcGlyIiwiTWFsYXlhbiBUaWdlciIsIk1hdHNjaGllcyBUcmVlIEthbmdhcm9vIiwiTWluaSBEb25rZXkiLCJNb25hcmNoIEJ1dHRlcmZseSIsIk5pbGUgY3JvY29kaWxlIiwiTm9ydGggQW1lcmljYW4gUG9yY3VwaW5lIiwiTnViaWFuIEliZXgiLCJPa2FwaSIsIlBvaXNvbiBEYXJ0IEZyb2ciLCJQb2xhciBCZWFyIiwiUHlnbXkgTWFybW9zZXQiLCJSYWRpYXRlZCBUb3J0b2lzZSIsIlJlZCBQYW5kYSIsIlJlZCBSdWZmZWQgTGVtdXIiLCJSaW5nLXRhaWxlZCBMZW11ciIsIlJpbmctdGFpbGVkIE1vbmdvb3NlIiwiUm9jayBIeXJheCIsIlNtYWxsIENsYXdlZCBBc2lhbiBPdHRlciIsIlNub3cgTGVvcGFyZCIsIlNub3d5IE93bCIsIlNvdXRoZXJuIFdoaXRlLWZhY2VkIE93bCIsIlNvdXRoZXJuIFdoaXRlIFJoaW5vY2Vyb3VzIiwiU3F1aXJyZWwgTW9ua2V5IiwiVHVmdGVkIFB1ZmZpbiIsIldoaXRlIENoZWVrZWQgR2liYm9uIiwiV2hpdGUtdGhyb2F0ZWQgQmVlIEVhdGVyIiwiWmVicmEiXX19LGI9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxwPU9iamVjdC5rZXlzfHxmdW5jdGlvbihhKXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gYSliLmNhbGwoYSxuKSYmZS5wdXNoKG4pO3JldHVybiBlfTthLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHQoaFthXSl9LGEucHJvdG90eXBlLm1hY19hZGRyZXNzPWZ1bmN0aW9uKGEpeyhhPWUoYSkpLnNlcGFyYXRvcnx8KGEuc2VwYXJhdG9yPWEubmV0d29ya1ZlcnNpb24/Ii4iOiI6Iik7cmV0dXJuIGEubmV0d29ya1ZlcnNpb24/dGhpcy5uKHRoaXMuc3RyaW5nLDMse3Bvb2w6IkFCQ0RFRjEyMzQ1Njc4OTAiLGxlbmd0aDo0fSkuam9pbihhLnNlcGFyYXRvcik6dGhpcy5uKHRoaXMuc3RyaW5nLDYse3Bvb2w6IkFCQ0RFRjEyMzQ1Njc4OTAiLGxlbmd0aDoyfSkuam9pbihhLnNlcGFyYXRvcil9LGEucHJvdG90eXBlLm5vcm1hbD1mdW5jdGlvbihhKXtpZihhPWUoYSx7bWVhbjowLGRldjoxLHBvb2w6W119KSxuKGEucG9vbC5jb25zdHJ1Y3RvciE9PUFycmF5LCJDaGFuY2U6IFRoZSBwb29sIG9wdGlvbiBtdXN0IGJlIGEgdmFsaWQgYXJyYXkuIiksbigibnVtYmVyIiE9dHlwZW9mIGEubWVhbiwiQ2hhbmNlOiBNZWFuIChtZWFuKSBtdXN0IGJlIGEgbnVtYmVyIiksbigibnVtYmVyIiE9dHlwZW9mIGEuZGV2LCJDaGFuY2U6IFN0YW5kYXJkIGRldmlhdGlvbiAoZGV2KSBtdXN0IGJlIGEgbnVtYmVyIiksYS5wb29sLmxlbmd0aD4wKXJldHVybiB0aGlzLm5vcm1hbF9wb29sKGEpO3ZhciBpLHIsbyx0LHM9YS5tZWFuLGw9YS5kZXY7ZG97aT0ocj0yKnRoaXMucmFuZG9tKCktMSkqcisobz0yKnRoaXMucmFuZG9tKCktMSkqb313aGlsZShpPj0xKTtyZXR1cm4gdD1yKk1hdGguc3FydCgtMipNYXRoLmxvZyhpKS9pKSxsKnQrc30sYS5wcm90b3R5cGUubm9ybWFsX3Bvb2w9ZnVuY3Rpb24oYSl7dmFyIGU9MDtkb3t2YXIgbj1NYXRoLnJvdW5kKHRoaXMubm9ybWFsKHttZWFuOmEubWVhbixkZXY6YS5kZXZ9KSk7aWYobjxhLnBvb2wubGVuZ3RoJiZuPj0wKXJldHVybiBhLnBvb2xbbl07ZSsrfXdoaWxlKGU8MTAwKTt0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ2hhbmNlOiBZb3VyIHBvb2wgaXMgdG9vIHNtYWxsIGZvciB0aGUgZ2l2ZW4gbWVhbiBhbmQgc3RhbmRhcmQgZGV2aWF0aW9uLiBQbGVhc2UgYWRqdXN0LiIpfSxhLnByb3RvdHlwZS5yYWRpbz1mdW5jdGlvbihhKXt2YXIgbj0iIjtzd2l0Y2goKGE9ZShhLHtzaWRlOiI/In0pKS5zaWRlLnRvTG93ZXJDYXNlKCkpe2Nhc2UiZWFzdCI6Y2FzZSJlIjpuPSJXIjticmVhaztjYXNlIndlc3QiOmNhc2UidyI6bj0iSyI7YnJlYWs7ZGVmYXVsdDpuPXRoaXMuY2hhcmFjdGVyKHtwb29sOiJLVyJ9KX1yZXR1cm4gbit0aGlzLmNoYXJhY3Rlcih7YWxwaGE6ITAsY2FzaW5nOiJ1cHBlciJ9KSt0aGlzLmNoYXJhY3Rlcih7YWxwaGE6ITAsY2FzaW5nOiJ1cHBlciJ9KSt0aGlzLmNoYXJhY3Rlcih7YWxwaGE6ITAsY2FzaW5nOiJ1cHBlciJ9KX0sYS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsZSl7InN0cmluZyI9PXR5cGVvZiBhP2hbYV09ZTpoPXQoYSxoKX0sYS5wcm90b3R5cGUudHY9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucmFkaW8oYSl9LGEucHJvdG90eXBlLmNucGo9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm4odGhpcy5uYXR1cmFsLDgse21heDo5fSksZT0yKzYqYVs3XSs3KmFbNl0rOCphWzVdKzkqYVs0XSsyKmFbM10rMyphWzJdKzQqYVsxXSs1KmFbMF07KGU9MTEtZSUxMSk+PTEwJiYoZT0wKTt2YXIgbj0yKmUrMys3KmFbN10rOCphWzZdKzkqYVs1XSsyKmFbNF0rMyphWzNdKzQqYVsyXSs1KmFbMV0rNiphWzBdO3JldHVybihuPTExLW4lMTEpPj0xMCYmKG49MCksIiIrYVswXSthWzFdKyIuIithWzJdK2FbM10rYVs0XSsiLiIrYVs1XSthWzZdK2FbN10rIi8wMDAxLSIrZStufSxhLnByb3RvdHlwZS5tZXJzZW5uZV90d2lzdGVyPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgQyhhKX0sYS5wcm90b3R5cGUuYmx1ZWltcF9tZDU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGd9O3ZhciBDPWZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpNYXRoLnBvdygxMCwxMykpKSx0aGlzLk49NjI0LHRoaXMuTT0zOTcsdGhpcy5NQVRSSVhfQT0yNTY3NDgzNjE1LHRoaXMuVVBQRVJfTUFTSz0yMTQ3NDgzNjQ4LHRoaXMuTE9XRVJfTUFTSz0yMTQ3NDgzNjQ3LHRoaXMubXQ9bmV3IEFycmF5KHRoaXMuTiksdGhpcy5tdGk9dGhpcy5OKzEsdGhpcy5pbml0X2dlbnJhbmQoYSl9O0MucHJvdG90eXBlLmluaXRfZ2VucmFuZD1mdW5jdGlvbihhKXtmb3IodGhpcy5tdFswXT1hPj4+MCx0aGlzLm10aT0xO3RoaXMubXRpPHRoaXMuTjt0aGlzLm10aSsrKWE9dGhpcy5tdFt0aGlzLm10aS0xXV50aGlzLm10W3RoaXMubXRpLTFdPj4+MzAsdGhpcy5tdFt0aGlzLm10aV09KDE4MTI0MzMyNTMqKCg0Mjk0OTAxNzYwJmEpPj4+MTYpPDwxNikrMTgxMjQzMzI1MyooNjU1MzUmYSkrdGhpcy5tdGksdGhpcy5tdFt0aGlzLm10aV0+Pj49MH0sQy5wcm90b3R5cGUuaW5pdF9ieV9hcnJheT1mdW5jdGlvbihhLGUpe3ZhciBuLGkscj0xLG89MDtmb3IodGhpcy5pbml0X2dlbnJhbmQoMTk2NTAyMTgpLG49dGhpcy5OPmU/dGhpcy5OOmU7bjtuLS0paT10aGlzLm10W3ItMV1edGhpcy5tdFtyLTFdPj4+MzAsdGhpcy5tdFtyXT0odGhpcy5tdFtyXV4oMTY2NDUyNSooKDQyOTQ5MDE3NjAmaSk+Pj4xNik8PDE2KSsxNjY0NTI1Kig2NTUzNSZpKSkrYVtvXStvLHRoaXMubXRbcl0+Pj49MCxvKyssKytyPj10aGlzLk4mJih0aGlzLm10WzBdPXRoaXMubXRbdGhpcy5OLTFdLHI9MSksbz49ZSYmKG89MCk7Zm9yKG49dGhpcy5OLTE7bjtuLS0paT10aGlzLm10W3ItMV1edGhpcy5tdFtyLTFdPj4+MzAsdGhpcy5tdFtyXT0odGhpcy5tdFtyXV4oMTU2NjA4Mzk0MSooKDQyOTQ5MDE3NjAmaSk+Pj4xNik8PDE2KSsxNTY2MDgzOTQxKig2NTUzNSZpKSktcix0aGlzLm10W3JdPj4+PTAsKytyPj10aGlzLk4mJih0aGlzLm10WzBdPXRoaXMubXRbdGhpcy5OLTFdLHI9MSk7dGhpcy5tdFswXT0yMTQ3NDgzNjQ4fSxDLnByb3RvdHlwZS5nZW5yYW5kX2ludDMyPWZ1bmN0aW9uKCl7dmFyIGEsZT1uZXcgQXJyYXkoMCx0aGlzLk1BVFJJWF9BKTtpZih0aGlzLm10aT49dGhpcy5OKXt2YXIgbjtmb3IodGhpcy5tdGk9PT10aGlzLk4rMSYmdGhpcy5pbml0X2dlbnJhbmQoNTQ4OSksbj0wO248dGhpcy5OLXRoaXMuTTtuKyspYT10aGlzLm10W25dJnRoaXMuVVBQRVJfTUFTS3x0aGlzLm10W24rMV0mdGhpcy5MT1dFUl9NQVNLLHRoaXMubXRbbl09dGhpcy5tdFtuK3RoaXMuTV1eYT4+PjFeZVsxJmFdO2Zvcig7bjx0aGlzLk4tMTtuKyspYT10aGlzLm10W25dJnRoaXMuVVBQRVJfTUFTS3x0aGlzLm10W24rMV0mdGhpcy5MT1dFUl9NQVNLLHRoaXMubXRbbl09dGhpcy5tdFtuKyh0aGlzLk0tdGhpcy5OKV1eYT4+PjFeZVsxJmFdO2E9dGhpcy5tdFt0aGlzLk4tMV0mdGhpcy5VUFBFUl9NQVNLfHRoaXMubXRbMF0mdGhpcy5MT1dFUl9NQVNLLHRoaXMubXRbdGhpcy5OLTFdPXRoaXMubXRbdGhpcy5NLTFdXmE+Pj4xXmVbMSZhXSx0aGlzLm10aT0wfXJldHVybiBhPXRoaXMubXRbdGhpcy5tdGkrK10sYV49YT4+PjExLGFePWE8PDcmMjYzNjkyODY0MCxhXj1hPDwxNSY0MDIyNzMwNzUyLChhXj1hPj4+MTgpPj4+MH0sQy5wcm90b3R5cGUuZ2VucmFuZF9pbnQzMT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdlbnJhbmRfaW50MzIoKT4+PjF9LEMucHJvdG90eXBlLmdlbnJhbmRfcmVhbDE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZW5yYW5kX2ludDMyKCkqKDEvNDI5NDk2NzI5NSl9LEMucHJvdG90eXBlLnJhbmRvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdlbnJhbmRfaW50MzIoKSooMS80Mjk0OTY3Mjk2KX0sQy5wcm90b3R5cGUuZ2VucmFuZF9yZWFsMz1mdW5jdGlvbigpe3JldHVybih0aGlzLmdlbnJhbmRfaW50MzIoKSsuNSkqKDEvNDI5NDk2NzI5Nil9LEMucHJvdG90eXBlLmdlbnJhbmRfcmVzNTM9ZnVuY3Rpb24oKXtyZXR1cm4oNjcxMDg4NjQqKHRoaXMuZ2VucmFuZF9pbnQzMigpPj4+NSkrKHRoaXMuZ2VucmFuZF9pbnQzMigpPj4+NikpKigxLzkwMDcxOTkyNTQ3NDA5OTIpfTt2YXIgZz1mdW5jdGlvbigpe307Zy5wcm90b3R5cGUuVkVSU0lPTj0iMS4wLjEiLGcucHJvdG90eXBlLnNhZmVfYWRkPWZ1bmN0aW9uKGEsZSl7dmFyIG49KDY1NTM1JmEpKyg2NTUzNSZlKTtyZXR1cm4oYT4+MTYpKyhlPj4xNikrKG4+PjE2KTw8MTZ8NjU1MzUmbn0sZy5wcm90b3R5cGUuYml0X3JvbGw9ZnVuY3Rpb24oYSxlKXtyZXR1cm4gYTw8ZXxhPj4+MzItZX0sZy5wcm90b3R5cGUubWQ1X2Ntbj1mdW5jdGlvbihhLGUsbixpLHIsbyl7cmV0dXJuIHRoaXMuc2FmZV9hZGQodGhpcy5iaXRfcm9sbCh0aGlzLnNhZmVfYWRkKHRoaXMuc2FmZV9hZGQoZSxhKSx0aGlzLnNhZmVfYWRkKGksbykpLHIpLG4pfSxnLnByb3RvdHlwZS5tZDVfZmY9ZnVuY3Rpb24oYSxlLG4saSxyLG8sdCl7cmV0dXJuIHRoaXMubWQ1X2NtbihlJm58fmUmaSxhLGUscixvLHQpfSxnLnByb3RvdHlwZS5tZDVfZ2c9ZnVuY3Rpb24oYSxlLG4saSxyLG8sdCl7cmV0dXJuIHRoaXMubWQ1X2NtbihlJml8biZ+aSxhLGUscixvLHQpfSxnLnByb3RvdHlwZS5tZDVfaGg9ZnVuY3Rpb24oYSxlLG4saSxyLG8sdCl7cmV0dXJuIHRoaXMubWQ1X2NtbihlXm5eaSxhLGUscixvLHQpfSxnLnByb3RvdHlwZS5tZDVfaWk9ZnVuY3Rpb24oYSxlLG4saSxyLG8sdCl7cmV0dXJuIHRoaXMubWQ1X2NtbihuXihlfH5pKSxhLGUscixvLHQpfSxnLnByb3RvdHlwZS5iaW5sX21kNT1mdW5jdGlvbihhLGUpe2FbZT4+NV18PTEyODw8ZSUzMixhWzE0KyhlKzY0Pj4+OTw8NCldPWU7dmFyIG4saSxyLG8sdCxzPTE3MzI1ODQxOTMsbD0tMjcxNzMzODc5LGM9LTE3MzI1ODQxOTQsbT0yNzE3MzM4Nzg7Zm9yKG49MDtuPGEubGVuZ3RoO24rPTE2KWk9cyxyPWwsbz1jLHQ9bSxzPXRoaXMubWQ1X2ZmKHMsbCxjLG0sYVtuXSw3LC02ODA4NzY5MzYpLG09dGhpcy5tZDVfZmYobSxzLGwsYyxhW24rMV0sMTIsLTM4OTU2NDU4NiksYz10aGlzLm1kNV9mZihjLG0scyxsLGFbbisyXSwxNyw2MDYxMDU4MTkpLGw9dGhpcy5tZDVfZmYobCxjLG0scyxhW24rM10sMjIsLTEwNDQ1MjUzMzApLHM9dGhpcy5tZDVfZmYocyxsLGMsbSxhW24rNF0sNywtMTc2NDE4ODk3KSxtPXRoaXMubWQ1X2ZmKG0scyxsLGMsYVtuKzVdLDEyLDEyMDAwODA0MjYpLGM9dGhpcy5tZDVfZmYoYyxtLHMsbCxhW24rNl0sMTcsLTE0NzMyMzEzNDEpLGw9dGhpcy5tZDVfZmYobCxjLG0scyxhW24rN10sMjIsLTQ1NzA1OTgzKSxzPXRoaXMubWQ1X2ZmKHMsbCxjLG0sYVtuKzhdLDcsMTc3MDAzNTQxNiksbT10aGlzLm1kNV9mZihtLHMsbCxjLGFbbis5XSwxMiwtMTk1ODQxNDQxNyksYz10aGlzLm1kNV9mZihjLG0scyxsLGFbbisxMF0sMTcsLTQyMDYzKSxsPXRoaXMubWQ1X2ZmKGwsYyxtLHMsYVtuKzExXSwyMiwtMTk5MDQwNDE2Mikscz10aGlzLm1kNV9mZihzLGwsYyxtLGFbbisxMl0sNywxODA0NjAzNjgyKSxtPXRoaXMubWQ1X2ZmKG0scyxsLGMsYVtuKzEzXSwxMiwtNDAzNDExMDEpLGM9dGhpcy5tZDVfZmYoYyxtLHMsbCxhW24rMTRdLDE3LC0xNTAyMDAyMjkwKSxsPXRoaXMubWQ1X2ZmKGwsYyxtLHMsYVtuKzE1XSwyMiwxMjM2NTM1MzI5KSxzPXRoaXMubWQ1X2dnKHMsbCxjLG0sYVtuKzFdLDUsLTE2NTc5NjUxMCksbT10aGlzLm1kNV9nZyhtLHMsbCxjLGFbbis2XSw5LC0xMDY5NTAxNjMyKSxjPXRoaXMubWQ1X2dnKGMsbSxzLGwsYVtuKzExXSwxNCw2NDM3MTc3MTMpLGw9dGhpcy5tZDVfZ2cobCxjLG0scyxhW25dLDIwLC0zNzM4OTczMDIpLHM9dGhpcy5tZDVfZ2cocyxsLGMsbSxhW24rNV0sNSwtNzAxNTU4NjkxKSxtPXRoaXMubWQ1X2dnKG0scyxsLGMsYVtuKzEwXSw5LDM4MDE2MDgzKSxjPXRoaXMubWQ1X2dnKGMsbSxzLGwsYVtuKzE1XSwxNCwtNjYwNDc4MzM1KSxsPXRoaXMubWQ1X2dnKGwsYyxtLHMsYVtuKzRdLDIwLC00MDU1Mzc4NDgpLHM9dGhpcy5tZDVfZ2cocyxsLGMsbSxhW24rOV0sNSw1Njg0NDY0MzgpLG09dGhpcy5tZDVfZ2cobSxzLGwsYyxhW24rMTRdLDksLTEwMTk4MDM2OTApLGM9dGhpcy5tZDVfZ2coYyxtLHMsbCxhW24rM10sMTQsLTE4NzM2Mzk2MSksbD10aGlzLm1kNV9nZyhsLGMsbSxzLGFbbis4XSwyMCwxMTYzNTMxNTAxKSxzPXRoaXMubWQ1X2dnKHMsbCxjLG0sYVtuKzEzXSw1LC0xNDQ0NjgxNDY3KSxtPXRoaXMubWQ1X2dnKG0scyxsLGMsYVtuKzJdLDksLTUxNDAzNzg0KSxjPXRoaXMubWQ1X2dnKGMsbSxzLGwsYVtuKzddLDE0LDE3MzUzMjg0NzMpLGw9dGhpcy5tZDVfZ2cobCxjLG0scyxhW24rMTJdLDIwLC0xOTI2NjA3NzM0KSxzPXRoaXMubWQ1X2hoKHMsbCxjLG0sYVtuKzVdLDQsLTM3ODU1OCksbT10aGlzLm1kNV9oaChtLHMsbCxjLGFbbis4XSwxMSwtMjAyMjU3NDQ2MyksYz10aGlzLm1kNV9oaChjLG0scyxsLGFbbisxMV0sMTYsMTgzOTAzMDU2MiksbD10aGlzLm1kNV9oaChsLGMsbSxzLGFbbisxNF0sMjMsLTM1MzA5NTU2KSxzPXRoaXMubWQ1X2hoKHMsbCxjLG0sYVtuKzFdLDQsLTE1MzA5OTIwNjApLG09dGhpcy5tZDVfaGgobSxzLGwsYyxhW24rNF0sMTEsMTI3Mjg5MzM1MyksYz10aGlzLm1kNV9oaChjLG0scyxsLGFbbis3XSwxNiwtMTU1NDk3NjMyKSxsPXRoaXMubWQ1X2hoKGwsYyxtLHMsYVtuKzEwXSwyMywtMTA5NDczMDY0MCkscz10aGlzLm1kNV9oaChzLGwsYyxtLGFbbisxM10sNCw2ODEyNzkxNzQpLG09dGhpcy5tZDVfaGgobSxzLGwsYyxhW25dLDExLC0zNTg1MzcyMjIpLGM9dGhpcy5tZDVfaGgoYyxtLHMsbCxhW24rM10sMTYsLTcyMjUyMTk3OSksbD10aGlzLm1kNV9oaChsLGMsbSxzLGFbbis2XSwyMyw3NjAyOTE4OSkscz10aGlzLm1kNV9oaChzLGwsYyxtLGFbbis5XSw0LC02NDAzNjQ0ODcpLG09dGhpcy5tZDVfaGgobSxzLGwsYyxhW24rMTJdLDExLC00MjE4MTU4MzUpLGM9dGhpcy5tZDVfaGgoYyxtLHMsbCxhW24rMTVdLDE2LDUzMDc0MjUyMCksbD10aGlzLm1kNV9oaChsLGMsbSxzLGFbbisyXSwyMywtOTk1MzM4NjUxKSxzPXRoaXMubWQ1X2lpKHMsbCxjLG0sYVtuXSw2LC0xOTg2MzA4NDQpLG09dGhpcy5tZDVfaWkobSxzLGwsYyxhW24rN10sMTAsMTEyNjg5MTQxNSksYz10aGlzLm1kNV9paShjLG0scyxsLGFbbisxNF0sMTUsLTE0MTYzNTQ5MDUpLGw9dGhpcy5tZDVfaWkobCxjLG0scyxhW24rNV0sMjEsLTU3NDM0MDU1KSxzPXRoaXMubWQ1X2lpKHMsbCxjLG0sYVtuKzEyXSw2LDE3MDA0ODU1NzEpLG09dGhpcy5tZDVfaWkobSxzLGwsYyxhW24rM10sMTAsLTE4OTQ5ODY2MDYpLGM9dGhpcy5tZDVfaWkoYyxtLHMsbCxhW24rMTBdLDE1LC0xMDUxNTIzKSxsPXRoaXMubWQ1X2lpKGwsYyxtLHMsYVtuKzFdLDIxLC0yMDU0OTIyNzk5KSxzPXRoaXMubWQ1X2lpKHMsbCxjLG0sYVtuKzhdLDYsMTg3MzMxMzM1OSksbT10aGlzLm1kNV9paShtLHMsbCxjLGFbbisxNV0sMTAsLTMwNjExNzQ0KSxjPXRoaXMubWQ1X2lpKGMsbSxzLGwsYVtuKzZdLDE1LC0xNTYwMTk4MzgwKSxsPXRoaXMubWQ1X2lpKGwsYyxtLHMsYVtuKzEzXSwyMSwxMzA5MTUxNjQ5KSxzPXRoaXMubWQ1X2lpKHMsbCxjLG0sYVtuKzRdLDYsLTE0NTUyMzA3MCksbT10aGlzLm1kNV9paShtLHMsbCxjLGFbbisxMV0sMTAsLTExMjAyMTAzNzkpLGM9dGhpcy5tZDVfaWkoYyxtLHMsbCxhW24rMl0sMTUsNzE4Nzg3MjU5KSxsPXRoaXMubWQ1X2lpKGwsYyxtLHMsYVtuKzldLDIxLC0zNDM0ODU1NTEpLHM9dGhpcy5zYWZlX2FkZChzLGkpLGw9dGhpcy5zYWZlX2FkZChsLHIpLGM9dGhpcy5zYWZlX2FkZChjLG8pLG09dGhpcy5zYWZlX2FkZChtLHQpO3JldHVybltzLGwsYyxtXX0sZy5wcm90b3R5cGUuYmlubDJyc3RyPWZ1bmN0aW9uKGEpe3ZhciBlLG49IiI7Zm9yKGU9MDtlPDMyKmEubGVuZ3RoO2UrPTgpbis9U3RyaW5nLmZyb21DaGFyQ29kZShhW2U+PjVdPj4+ZSUzMiYyNTUpO3JldHVybiBufSxnLnByb3RvdHlwZS5yc3RyMmJpbmw9ZnVuY3Rpb24oYSl7dmFyIGUsbj1bXTtmb3IoblsoYS5sZW5ndGg+PjIpLTFdPXZvaWQgMCxlPTA7ZTxuLmxlbmd0aDtlKz0xKW5bZV09MDtmb3IoZT0wO2U8OCphLmxlbmd0aDtlKz04KW5bZT4+NV18PSgyNTUmYS5jaGFyQ29kZUF0KGUvOCkpPDxlJTMyO3JldHVybiBufSxnLnByb3RvdHlwZS5yc3RyX21kNT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5iaW5sMnJzdHIodGhpcy5iaW5sX21kNSh0aGlzLnJzdHIyYmlubChhKSw4KmEubGVuZ3RoKSl9LGcucHJvdG90eXBlLnJzdHJfaG1hY19tZDU9ZnVuY3Rpb24oYSxlKXt2YXIgbixpLHI9dGhpcy5yc3RyMmJpbmwoYSksbz1bXSx0PVtdO2ZvcihvWzE1XT10WzE1XT12b2lkIDAsci5sZW5ndGg+MTYmJihyPXRoaXMuYmlubF9tZDUociw4KmEubGVuZ3RoKSksbj0wO248MTY7bis9MSlvW25dPTkwOTUyMjQ4Nl5yW25dLHRbbl09MTU0OTU1NjgyOF5yW25dO3JldHVybiBpPXRoaXMuYmlubF9tZDUoby5jb25jYXQodGhpcy5yc3RyMmJpbmwoZSkpLDUxMis4KmUubGVuZ3RoKSx0aGlzLmJpbmwycnN0cih0aGlzLmJpbmxfbWQ1KHQuY29uY2F0KGkpLDY0MCkpfSxnLnByb3RvdHlwZS5yc3RyMmhleD1mdW5jdGlvbihhKXt2YXIgZSxuLGk9IiI7Zm9yKG49MDtuPGEubGVuZ3RoO24rPTEpZT1hLmNoYXJDb2RlQXQobiksaSs9IjAxMjM0NTY3ODlhYmNkZWYiLmNoYXJBdChlPj4+NCYxNSkrIjAxMjM0NTY3ODlhYmNkZWYiLmNoYXJBdCgxNSZlKTtyZXR1cm4gaX0sZy5wcm90b3R5cGUuc3RyMnJzdHJfdXRmOD1mdW5jdGlvbihhKXtyZXR1cm4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGEpKX0sZy5wcm90b3R5cGUucmF3X21kNT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yc3RyX21kNSh0aGlzLnN0cjJyc3RyX3V0ZjgoYSkpfSxnLnByb3RvdHlwZS5oZXhfbWQ1PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJzdHIyaGV4KHRoaXMucmF3X21kNShhKSl9LGcucHJvdG90eXBlLnJhd19obWFjX21kNT1mdW5jdGlvbihhLGUpe3JldHVybiB0aGlzLnJzdHJfaG1hY19tZDUodGhpcy5zdHIycnN0cl91dGY4KGEpLHRoaXMuc3RyMnJzdHJfdXRmOChlKSl9LGcucHJvdG90eXBlLmhleF9obWFjX21kNT1mdW5jdGlvbihhLGUpe3JldHVybiB0aGlzLnJzdHIyaGV4KHRoaXMucmF3X2htYWNfbWQ1KGEsZSkpfSxnLnByb3RvdHlwZS5tZDU9ZnVuY3Rpb24oYSxlLG4pe3JldHVybiBlP24/dGhpcy5yYXdfaG1hY19tZDUoZSxhKTp0aGlzLmhleF9obWFjX21kNShlLGEpOm4/dGhpcy5yYXdfbWQ1KGEpOnRoaXMuaGV4X21kNShhKX0sInVuZGVmaW5lZCIhPXR5cGVvZiBleHBvcnRzJiYoInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzJiYoZXhwb3J0cz1tb2R1bGUuZXhwb3J0cz1hKSxleHBvcnRzLkNoYW5jZT1hKSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm4gYX0pLCJ1bmRlZmluZWQiIT10eXBlb2YgaW1wb3J0U2NyaXB0cyYmKGNoYW5jZT1uZXcgYSxzZWxmLkNoYW5jZT1hKSwib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cuZG9jdW1lbnQmJih3aW5kb3cuQ2hhbmNlPWEsd2luZG93LmNoYW5jZT1uZXcgYSl9KCk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPWNoYW5jZS5taW4uanMubWFwCg==]]></data>
	</file>
	<file>
	  <filename>/js/cmsmsext.functions.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqDQogKiBDTVNNU0V4dCBqcyBmdW5jdGlvbnMNCiAqLw0KKA0KICBmdW5jdGlvbihnbG9iYWwpDQogIHsNCiAgICAvKioNCiAgICAgKiBzb21lIGhlbHBlciBmdW5jdGlvbnMNCiAgICAgKi8NCg0KICAgIC8qKg0KICAgICAqIENoZWNrcyBpZiBhIHN0cmluZyBlbmRzIHdpdGggYSBzcGVjaWZpZWQgc3VmZml4Lg0KICAgICAqDQogICAgICogQHBhcmFtIHtzdHJpbmd9IHN1ZmZpeCAtIFRoZSBzdWZmaXggdG8gY2hlY2suDQogICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBzcGVjaWZpZWQgc3VmZml4LCBvdGhlcndpc2UgcmV0dXJucyBmYWxzZS4NCiAgICAgKi8NCiAgICBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoID0gZnVuY3Rpb24gKHN1ZmZpeCkNCiAgICB7DQogICAgICByZXR1cm4gKHRoaXMuc3Vic3RyaW5nKHRoaXMubGVuZ3RocyAtIHN1ZmZpeC5sZW5ndGgpID09PSBzdWZmaXgpOw0KICAgIH07DQoNCiAgICAvKioNCiAgICAgKiBDaGVja3MgaWYgYSBzdHJpbmcgc3RhcnRzIHdpdGggYSBnaXZlbiBwcmVmaXguDQogICAgICoNCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IC0gVGhlIHByZWZpeCB0byBjaGVjayBmb3IuDQogICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIHByZWZpeCwgb3RoZXJ3aXNlIGZhbHNlLg0KICAgICAqLw0KICAgIFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aCA9IGZ1bmN0aW9uKHByZWZpeCkNCiAgICB7DQogICAgICByZXR1cm4gKHRoaXMuc3Vic3RyaW5nKDAsIHByZWZpeC5sZW5ndGgpID09PSBwcmVmaXgpOw0KICAgIH07DQoNCiAgICAvKioNCiAgICAgKiBGb3JtYXRzIGEgc3RyaW5nIGluIGEgdGVtcGxhdGUgbGlrZSB3YXkNCiAgICAgKiBVc2FnZToNCiAgICAgKiAnQWRkZWQgezB9IGJ5IHsxfSB0byB5b3VyIGNvbGxlY3Rpb24nLmYodGl0bGUsIGFydGlzdCkNCiAgICAgKiAnWW91ciBiYWxhbmNlIGlzIHswfSBVU0QnLmYoNzcuNykNCiAgICAgKiBAdHlwZSB7ZnVuY3Rpb24oKTogU3RyaW5nfQ0KICAgICAqLw0KICAgIFN0cmluZy5wcm90b3R5cGUuZm9ybWF0ID0gU3RyaW5nLnByb3RvdHlwZS5mb3JtYXQgPSBmdW5jdGlvbigpDQogICAgew0KICAgICAgdmFyIHMgPSB0aGlzLA0KICAgICAgICAgIGkgPSBhcmd1bWVudHMubGVuZ3RoOw0KDQogICAgICB3aGlsZSAoaS0tKQ0KICAgICAgew0KICAgICAgICBzID0gcy5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xceycgKyBpICsgJ1xcfScsICdnbScpLCBhcmd1bWVudHNbaV0pOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIHM7DQogICAgfTsNCiAgICANCiAgICAvKioNCiAgICAgKiBDTVNNU0VYVCBjb25maWd1cmF0aW9uIGRlZmF1bHRzDQogICAgICovDQogICAgDQogICAgdmFyIGRlZmF1bHRfQ09ORklHID0gew0KICAgICAgYWN0aW9uX2lkOiAnbTFfJywNCiAgICAgIGFqYXhfcHJlZml4OiB0cnVlLA0KICAgICAgYWN0aW9uX25hbWU6ICcnLA0KICAgICAgYWRtaW5fdGhlbWU6ICdPRScsDQogICAgICB0b2FzdHNfdGltZW91dDogNTAwMCwNCiAgICB9Ow0KICAgIA0KICAgIC8qKg0KICAgICAqIEBuYW1lc3BhY2UgQ01TTVNFWFQNCiAgICAgKi8NCiAgICANCiAgICBnbG9iYWwuQ01TTVNFWFQgPSBnbG9iYWwuQ01TTVNFWFQgfHwge307DQoNCiAgICAvKioNCiAgICAgKiBjaGVjayBmb3IgZGVwZW5kZW5jaWVzDQogICAgICovDQoNCiAgICBpZih0eXBlb2YgIGdsb2JhbC5fICE9PSAndW5kZWZpbmVkJykNCiAgICB7DQogICAgICB2YXIgXyA9IGdsb2JhbC5fOw0KDQogICAgICAvLyBZb3VyIHVuZGVyc2NvcmUtZGVwZW5kZW50IGNvZGUgaGVyZQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgY29uc29sZS5sb2coJ3VuZGVyc2NvcmUgaXMgbm90IGF2YWlsYWJsZS4nKTsNCiAgICB9DQoNCiAgICBpZih0eXBlb2YgIGdsb2JhbC5CYWNrYm9uZSAhPT0gJ3VuZGVmaW5lZCcpDQogICAgew0KICAgICAgdmFyIEJhY2tib25lID0gZ2xvYmFsLkJhY2tib25lOw0KDQogICAgICAvLyBZb3VyIGJhY2tib25lLWRlcGVuZGVudCBjb2RlIGhlcmUNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgIGNvbnNvbGUubG9nKCdCYWNrYm9uZSBpcyBub3QgYXZhaWxhYmxlLicpOw0KICAgIH0NCg0KICAgIGlmKHR5cGVvZiAgZ2xvYmFsLmpTbWFydCAhPT0gJ3VuZGVmaW5lZCcpDQogICAgew0KICAgICAgdmFyIGpTbWFydCA9IGdsb2JhbC5qU21hcnQ7DQoNCiAgICAgIC8vIFlvdXIgalNtYXJ0LWRlcGVuZGVudCBjb2RlIGhlcmUNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgIGNvbnNvbGUubG9nKCdqU21hcnQgaXMgbm90IGF2YWlsYWJsZS4nKTsNCiAgICB9DQoNCiAgICBpZih0eXBlb2YgIGdsb2JhbC5VSWtpdCAhPT0gJ3VuZGVmaW5lZCcpDQogICAgew0KICAgICAgdmFyIFVJa2l0ID0gZ2xvYmFsLlVJa2l0Ow0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgY29uc29sZS5sb2coJ1VJa2l0IGlzIG5vdCBhdmFpbGFibGUuJyk7DQogICAgfQ0KDQogICAgaWYodHlwZW9mIGdsb2JhbC5qUXVlcnkgIT09ICd1bmRlZmluZWQnKQ0KICAgIHsNCiAgICAgIHZhciAkID0gZ2xvYmFsLmpRdWVyeTsNCg0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgY29uc29sZS5sb2coJ2pRdWVyeSBpcyBub3QgYXZhaWxhYmxlLicpOw0KICAgIH0NCg0KICAgIGlmKCB0eXBlb2YgIGdsb2JhbC5DTVNNU0VYVF9DT05GSUcgIT09ICd1bmRlZmluZWQnKQ0KICAgIHsNCiAgICAgIC8vIE1lcmdlIGRlZmF1bHQgb3B0aW9ucyB3aXRoIHVzZXItcHJvdmlkZWQgb3B0aW9ucw0KICAgICAgdmFyIENNU01TRVhUX0NPTkZJRyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRfQ09ORklHLCBnbG9iYWwuQ01TTVNFWFRfQ09ORklHKTsNCiAgICAgIA0KICAgICAgLy9hY3Rpb25faWQgd2lsbCBhbHdheXMgYmUgbTFfIHdoZW4gaW4gYmFja2VuZCBjb250ZXh0IGZvciBub3cgc28sIGFzc3VtZSBpdCBpcw0KICAgICAgQ01TTVNFWFQuYWN0aW9uX2lkICAgPSAodHlwZW9mIENNU01TRVhUX0NPTkZJRy5hY3Rpb25faWQgPT09ICd1bmRlZmluZWQnID8gJ20xXycgOiBDTVNNU0VYVF9DT05GSUcuYWN0aW9uX2lkKTsNCiAgICAgIENNU01TRVhULmFjdGlvbl9uYW1lID0gQ01TTVNFWFRfQ09ORklHLmFjdGlvbl9uYW1lOw0KICAgICAgQ01TTVNFWFQuYWRtaW5fdGhlbWUgPSBDTVNNU0VYVF9DT05GSUcuYWRtaW5fdGhlbWU7DQogICAgfQ0KDQogICAgQ01TTVNFWFQuVklFVyA9IGZ1bmN0aW9uKCl7fTsNCg0KICAgIENNU01TRVhULkFKQVggPSBmdW5jdGlvbigpe307DQoNCiAgICBDTVNNU0VYVC5BSkFYLmluaXQgPSBmdW5jdGlvbigpDQogICAgew0KICAgICAgLyoqDQogICAgICAgKiBBbiBBSkFYIHJlcXVlc3QgZnVuY3Rpb24gbWVhbnQgdG8gZHVtYiBkb3duIHRoZSBhamF4IHByb2Nlc3MgcXVpdGUgYSBiaXQNCiAgICAgICAqIC0gZGF0YSAodGhlIHBhcmFtcykgd2lsbCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBhY3Rpb24gaWQgdG8gY29uZm9ybSB3aXRoIENNU01TIG93biBzeXN0ZW0NCiAgICAgICAqIC0gdHlwaWNhbGx5IG9ubHkgdXJsIGFuZCBkYXRhIHdpbGwgYmUgbmVlZGVkLCBpbiBzb21lIGNhc2VzIG5vdCBldmVuIHRoYXQNCiAgICAgICAqDQogICAgICAgKiB0aGlzIGlzIGFuIGludGVybmFsIGZ1bmN0aW9uDQogICAgICAgKg0KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIFRoZSBVUkwgZm9yIHRoZSByZXF1ZXN0DQogICAgICAgKiBAcGFyYW0ge29iamVjdH0gZGF0YSAtIFRoZSBkYXRhIHRvIHNlbmQgd2l0aCB0aGUgcmVxdWVzdA0KICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gc3VjY2VzcyAtIFRoZSBzdWNjZXNzIGNhbGxiYWNrIGZ1bmN0aW9uDQogICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBlcnJvciAtIFRoZSBlcnJvciBjYWxsYmFjayBmdW5jdGlvbg0KICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGxldGUgLSBUaGUgY29tcGxldGUgY2FsbGJhY2sgZnVuY3Rpb24NCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhdHlwZSAtIFRoZSBkYXRhIHR5cGUgdG8gZXhwZWN0IGluIHRoZSByZXNwb25zZQ0KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZCAtIFRoZSBIVFRQIG1ldGhvZCAoZS5nLiwgR0VULCBQT1NULCBQVVQsIERFTEVURSkNCiAgICAgICAqDQogICAgICAgKiBAZGVwcmVjYXRlZA0KICAgICAgICovDQogICAgICB2YXIgX19hamF4MiA9IGZ1bmN0aW9uICh1cmwsIGRhdGEsIHN1Y2Nlc3MsIGVycm9yLCBjb21wbGV0ZSwgZGF0YXR5cGUsIG1ldGhvZCkNCiAgICAgIHsNCiAgICAgICAgY29uc3QgZGVmYXVsdHMgPSB7DQogICAgICAgICAgdXJsOiAnJywgICAgICAgICAgICAgICAgLy8gVVJMIGZvciB0aGUgcmVxdWVzdA0KICAgICAgICAgIG1ldGhvZDogJ0dFVCcsICAgICAgICAgIC8vIEhUVFAgbWV0aG9kIChlLmcuLCBHRVQsIFBPU1QsIFBVVCwgREVMRVRFKQ0KICAgICAgICAgIGRhdGE6IG51bGwsICAgICAgICAgICAgIC8vIERhdGEgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0DQogICAgICAgICAgZGF0YVR5cGU6ICdqc29uJywgICAgICAgLy8gRGF0YSB0eXBlIHRvIGV4cGVjdCBpbiB0aGUgcmVzcG9uc2UgKGUuZy4sIGpzb24sIGh0bWwpDQogICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkgew0KICAgICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3M6JywgZGF0YSk7DQogICAgICAgICAgfSwgICAgICAgICAgICAgICAgICAgICAgLy8gU3VjY2VzcyBjYWxsYmFjayBmdW5jdGlvbg0KICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIsIHN0YXR1cywgZXJyb3IpIHsNCiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIHN0YXR1cywgZXJyb3IpOw0KICAgICAgICAgIH0sICAgICAgICAgICAgICAgICAgICAgIC8vIEVycm9yIGNhbGxiYWNrIGZ1bmN0aW9uDQogICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKHhociwgc3RhdHVzKSB7DQogICAgICAgICAgICBjb25zb2xlLmxvZygnUmVxdWVzdCBjb21wbGV0ZWQgd2l0aCBzdGF0dXM6Jywgc3RhdHVzKTsNCiAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvLyBDb21wbGV0ZSBjYWxsYmFjayBmdW5jdGlvbg0KICAgICAgICB9Ow0KICAgICAgICANCiAgICAgICAgdmFyIHRtcF9vcHRpb25zID0gew0KICAgICAgICAgIHVybDogdXJsLA0KICAgICAgICAgIG1ldGhvZDogbWV0aG9kLA0KICAgICAgICAgIGRhdGE6IGRhdGEsDQogICAgICAgICAgZGF0YVR5cGU6IGRhdGF0eXBlLA0KICAgICAgICAgIHN1Y2Nlc3M6IHN1Y2Nlc3MsDQogICAgICAgICAgZXJyb3I6IGVycm9yLA0KICAgICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZSwNCiAgICAgICAgfTsNCiAgICAgICAgDQogICAgICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoe30sIGRlZmF1bHRzLCB0bXBfb3B0aW9ucyk7DQogICAgICAgIA0KICAgICAgICAvLyBQcmVmaXggZWFjaCBkYXRhIHBhcmFtZXRlciB3aXRoIGFjdGlvbl9pZA0KICAgICAgICBpZihDTVNNU0VYVC5hY3Rpb25faWQgJiYgQ01TTVNFWFRfQ09ORklHLmFqYXhfcHJlZml4KQ0KICAgICAgICB7DQogICAgICAgICAgY29uc3QgcHJlZml4ZWREYXRhID0ge307DQogICAgICAgICAgZm9yKGNvbnN0IGtleSBpbiBvcHRpb25zLmRhdGEpDQogICAgICAgICAgew0KICAgICAgICAgICAgaWYob3B0aW9ucy5kYXRhLmhhc093blByb3BlcnR5KGtleSkpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHByZWZpeGVkRGF0YVtvcHRpb25zLmRhdGFQcmVmaXggKyBrZXldID0gb3B0aW9ucy5kYXRhW2tleV07DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICAgIG9wdGlvbnMuZGF0YSA9IHByZWZpeGVkRGF0YTsNCiAgICAgICAgfQ0KDQogICAgICAgICQuYWpheCgNCiAgICAgICAgICB7DQogICAgICAgICAgICBtZXRob2Q6IG9wdGlvbnMubWV0aG9kLA0KICAgICAgICAgICAgZGF0YVR5cGU6IG9wdGlvbnMuZGF0YVR5cGUsDQogICAgICAgICAgICBkYXRhOiBvcHRpb25zLmRhdGEsDQogICAgICAgICAgICB1cmw6IG9wdGlvbnMudXJsLA0KICAgICAgICAgICAgc3VjY2Vzczogb3B0aW9ucy5zdWNjZXNzLA0KICAgICAgICAgICAgZXJyb3I6IG9wdGlvbnMuZXJyb3IsDQogICAgICAgICAgICBjb21wbGV0ZTogb3B0aW9ucy5jb21wbGV0ZSwNCiAgICAgICAgICB9KTsNCiAgICAgIH07DQogICAgICANCiAgICAgIC8qKg0KICAgICAgICogQW4gQUpBWCByZXF1ZXN0IGZ1bmN0aW9uIG1lYW50IHRvIGR1bWIgZG93biB0aGUgYWpheCBwcm9jZXNzIHF1aXRlIGEgYml0DQogICAgICAgKiAtIGRhdGEgKHRoZSBwYXJhbXMpIHdpbGwgYmUgcHJlZml4ZWQgd2l0aCB0aGUgYWN0aW9uIGlkIHRvIGNvbmZvcm0gd2l0aCBDTVNNUyBvd24gc3lzdGVtDQogICAgICAgKiAtIHR5cGljYWxseSBvbmx5IHVybCBhbmQgZGF0YSB3aWxsIGJlIG5lZWRlZCwgaW4gc29tZSBjYXNlcyBub3QgZXZlbiB0aGF0DQogICAgICAgKg0KICAgICAgICogdGhpcyBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbg0KICAgICAgICoNCiAgICAgICAqIEBwYXJhbSBvcHRpb25zDQogICAgICAgKi8NCiAgICAgIHZhciBfX2FqYXggPSBmdW5jdGlvbiAob3B0aW9ucykNCiAgICAgIHsNCiAgICAgICAgY29uc3QgZGVmYXVsdHMgPSB7DQogICAgICAgICAgdXJsOiAnJywgICAgICAgICAgICAgICAgLy8gVVJMIGZvciB0aGUgcmVxdWVzdA0KICAgICAgICAgIG1ldGhvZDogJ0dFVCcsICAgICAgICAgIC8vIEhUVFAgbWV0aG9kIChlLmcuLCBHRVQsIFBPU1QsIFBVVCwgREVMRVRFKQ0KICAgICAgICAgIGRhdGE6IG51bGwsICAgICAgICAgICAgIC8vIERhdGEgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0DQogICAgICAgICAgZGF0YVR5cGU6ICdqc29uJywgICAgICAgLy8gRGF0YSB0eXBlIHRvIGV4cGVjdCBpbiB0aGUgcmVzcG9uc2UgKGUuZy4sIGpzb24sIGh0bWwpDQogICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkgew0KICAgICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3M6JywgZGF0YSk7DQogICAgICAgICAgfSwgICAgICAgICAgICAgICAgICAgICAgLy8gU3VjY2VzcyBjYWxsYmFjayBmdW5jdGlvbg0KICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIsIHN0YXR1cywgZXJyb3IpIHsNCiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIHN0YXR1cywgZXJyb3IpOw0KICAgICAgICAgIH0sICAgICAgICAgICAgICAgICAgICAgIC8vIEVycm9yIGNhbGxiYWNrIGZ1bmN0aW9uDQogICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKHhociwgc3RhdHVzKSB7DQogICAgICAgICAgICBjb25zb2xlLmxvZygnUmVxdWVzdCBjb21wbGV0ZWQgd2l0aCBzdGF0dXM6Jywgc3RhdHVzKTsNCiAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvLyBDb21wbGV0ZSBjYWxsYmFjayBmdW5jdGlvbg0KICAgICAgICB9Ow0KICAgICAgICANCiAgICAgICAgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBkZWZhdWx0cywgb3B0aW9ucyk7DQogICAgICAgIA0KICAgICAgICBjb25zb2xlLmxvZyhvcHRpb25zKTsNCiAgICAgICAgDQogICAgICAgIC8vIFByZWZpeCBlYWNoIGRhdGEgcGFyYW1ldGVyIHdpdGggYWN0aW9uX2lkDQogICAgICAgIGlmKENNU01TRVhULmFjdGlvbl9pZCAmJiBDTVNNU0VYVF9DT05GSUcuYWpheF9wcmVmaXgpDQogICAgICAgIHsNCiAgICAgICAgICBjb25zdCBwcmVmaXhlZERhdGEgPSB7fTsNCiAgICAgICAgICBmb3IoY29uc3Qga2V5IGluIG9wdGlvbnMuZGF0YSkNCiAgICAgICAgICB7DQogICAgICAgICAgICBpZihvcHRpb25zLmRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgcHJlZml4ZWREYXRhW29wdGlvbnMuZGF0YVByZWZpeCArIGtleV0gPSBvcHRpb25zLmRhdGFba2V5XTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgICAgb3B0aW9ucy5kYXRhID0gcHJlZml4ZWREYXRhOw0KICAgICAgICB9DQoNCiAgICAgICAgJC5hamF4KG9wdGlvbnMpOw0KICAgICAgfTsNCiAgICAgIA0KICAgICAgLyoqDQogICAgICAgKiB0aGUgbWFpbiBqc29uIGFqYXggZnVuY3Rpb24NCiAgICAgICAqIGl0IGFzc3VtZXMgYSBidW5jaCBvZiBwYXJhbWV0ZXIgZGVmYXVsdHMNCiAgICAgICAqDQogICAgICAgKiBAcGFyYW0gdXJsDQogICAgICAgKiBAcGFyYW0gZGF0YQ0KICAgICAgICogQHBhcmFtIHN1Y2Nlc3MNCiAgICAgICAqIEBwYXJhbSBlcnJvcg0KICAgICAgICogQHBhcmFtIGNvbXBsZXRlDQogICAgICAgKi8NCiAgICAgIENNU01TRVhULkFKQVguY21zbXNfanNvbl9hamF4ID0gZnVuY3Rpb24odXJsLCBkYXRhLCBzdWNjZXNzLCBlcnJvciwgY29tcGxldGUpDQogICAgICB7DQogICAgICAgIHZhciBvcHRpb25zID0gew0KICAgICAgICAgIHVybDogdXJsLA0KICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLA0KICAgICAgICAgIGRhdGE6IGRhdGEsDQogICAgICAgICAgZGF0YVR5cGU6ICdqc29uJywNCiAgICAgICAgICBzdWNjZXNzOiBzdWNjZXNzLA0KICAgICAgICAgIGVycm9yOiBlcnJvciwNCiAgICAgICAgICBjb21wbGV0ZTogY29tcGxldGUNCiAgICAgICAgfQ0KICAgICAgICBfX2FqYXgob3B0aW9ucyk7DQogICAgICB9Ow0KICAgICAgDQogICAgICAvKioNCiAgICAgICAqIHRoZSBtYWluIHR4dCBhamF4IGZ1bmN0aW9uDQogICAgICAgKiBpdCBhc3N1bWVzIGEgYnVuY2ggb2YgcGFyYW1ldGVyIGRlZmF1bHRzDQogICAgICAgKg0KICAgICAgICogQHBhcmFtIHVybA0KICAgICAgICogQHBhcmFtIGRhdGENCiAgICAgICAqIEBwYXJhbSBzdWNjZXNzDQogICAgICAgKiBAcGFyYW0gZXJyb3INCiAgICAgICAqIEBwYXJhbSBjb21wbGV0ZQ0KICAgICAgICovDQogICAgICBDTVNNU0VYVC5BSkFYLmNtc21zX3R4dF9hamF4ID0gZnVuY3Rpb24odXJsLCBkYXRhLCBzdWNjZXNzLCBlcnJvciwgY29tcGxldGUpDQogICAgICB7DQogICAgICAgIHZhciBvcHRpb25zID0gew0KICAgICAgICAgIHVybDogdXJsLA0KICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLA0KICAgICAgICAgIGRhdGE6IGRhdGEsDQogICAgICAgICAgZGF0YVR5cGU6ICd0ZXh0JywNCiAgICAgICAgICBzdWNjZXNzOiBzdWNjZXNzLA0KICAgICAgICAgIGVycm9yOiBlcnJvciwNCiAgICAgICAgICBjb21wbGV0ZTogY29tcGxldGUNCiAgICAgICAgfQ0KICAgICAgICBfX2FqYXgob3B0aW9ucyk7DQogICAgICB9Ow0KICAgIH07DQoNCiAgICBDTVNNU0VYVC5VVElMUyA9IHsNCiAgICAgIHJuZDogZnVuY3Rpb24oKSB7IHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7IH0NCiAgICB9Ow0KDQogICAgQ01TTVNFWFQuVklFVy5pbml0ID0gZnVuY3Rpb24oKQ0KICAgIHsNCiAgICAgIENNU01TRVhULlZJRVcubWVzc2FnZXNfdGVtcGxhdGUgPSAnPGFzaWRlIGlkPSJoZWxwZXJfbWVzc2FnZSIgY2xhc3M9Im1lc3NhZ2UgcGFnZW1jb250YWluZXIiIHJvbGU9InN0YXR1cyI+PHA+ezB9PC9wPjwvYXNpZGU+JzsNCiAgICAgIENNU01TRVhULlZJRVcuZXJyb3JzX3RlbXBsYXRlID0gJzxhc2lkZSBpZD0iaGVscGVyX2Vycm9yIiBjbGFzcz0ibWVzc2FnZSBwYWdlZXJyb3Jjb250YWluZXIiIHJvbGU9ImFsZXJ0Ij48cD57MH08L3A+PC9hc2lkZT4nOw0KICAgICAgDQogICAgICBpZihVSWtpdCkNCiAgICAgIHsNCiAgICAgICAgLyoqDQogICAgICAgICAqIG5vdGlmaWNhdGlvbiBzdHVmZg0KICAgICAgICAgKi8NCiAgICAgICAgLyoqDQogICAgICAgICAqIEBwYXJhbSBtZXNzYWdlDQogICAgICAgICAqIEBwYXJhbSBzdGF0dXMNCiAgICAgICAgICovDQogICAgICAgIENNU01TRVhULlZJRVcubm90aWZ5ID0gZnVuY3Rpb24obWVzc2FnZSwgc3RhdHVzKQ0KICAgICAgICB7DQogICAgICAgICAgLy8gVE9ETyBtYWtlIHBvcyBhbmQgdGltZW91dCBjb25maWd1cmFibGUNCiAgICAgICAgICBVSWtpdC5ub3RpZmljYXRpb24oew0KICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSwNCiAgICAgICAgICAgIHN0YXR1czogc3RhdHVzLA0KICAgICAgICAgICAgcG9zOiAndG9wLXJpZ2h0JywNCiAgICAgICAgICAgIHRpbWVvdXQ6IDUwMDANCiAgICAgICAgICB9KTsNCiAgICAgICAgfTsNCg0KICAgICAgICBDTVNNU0VYVC5WSUVXLm5vdGlmeV9zdWNjZXNzID0gZnVuY3Rpb24obWVzc2FnZSkNCiAgICAgICAgew0KICAgICAgICAgIG1lc3NhZ2UgPSAnPGRpdiBjbGFzcz0idWstYWxlcnQtc3VjY2VzcyIgdWstYWxlcnQ+JyArIG1lc3NhZ2UgKyAnPC9kaXY+JzsNCiAgICAgICAgICB0aGlzLm5vdGlmeShtZXNzYWdlLCAnc3VjY2VzcycpOw0KICAgICAgICB9Ow0KDQogICAgICAgIENNU01TRVhULlZJRVcubm90aWZ5X2Vycm9yID0gZnVuY3Rpb24obWVzc2FnZSkNCiAgICAgICAgew0KICAgICAgICAgIG1lc3NhZ2UgPSAnPGRpdiBjbGFzcz0idWstYWxlcnQtZGFuZ2VyIiB1ay1hbGVydD4nICsgbWVzc2FnZSArICc8L2Rpdj4nOw0KICAgICAgICAgIHRoaXMubm90aWZ5KG1lc3NhZ2UsICdkYW5nZXInKTsNCiAgICAgICAgfTsNCg0KICAgICAgICBDTVNNU0VYVC5WSUVXLm5vdGlmeV93YXJuaW5nID0gZnVuY3Rpb24obWVzc2FnZSkNCiAgICAgICAgew0KICAgICAgICAgIG1lc3NhZ2UgPSAnPGRpdiBjbGFzcz0idWstYWxlcnQtd2FybmluZyIgdWstYWxlcnQ+JyArIG1lc3NhZ2UgKyAnPC9kaXY+JzsNCiAgICAgICAgICB0aGlzLm5vdGlmeShtZXNzYWdlLCAnd2FybmluZycpOw0KICAgICAgICB9Ow0KICAgICAgfQ0KDQogICAgICBpZihDTVNNU0VYVC5hZG1pbl90aGVtZSkNCiAgICAgIHsNCiAgICAgICAgLyoqDQogICAgICAgICAqIHRhcHMgaW50byB0aGUgY29yZSBmdW5jdGlvbiB0byBzaG93IGEgbWVzc2FnZSB3aGVuIG5lZWRlZA0KICAgICAgICAgKiB0aGVtZSBkZXBlbmRlbnQgT25lRWxldmVuIGluIHRoaXMgY2FzZTogT0UNCiAgICAgICAgICoNCiAgICAgICAgICogQHBhcmFtIG1lc3NhZ2UNCiAgICAgICAgICovDQogICAgICAgIENNU01TRVhULlZJRVcuY29yZV9zdWNjZXNzX21zZyA9IGZ1bmN0aW9uKG1lc3NhZ2UpDQogICAgICAgIHsNCiAgICAgICAgICBsZXQgb3V0cHV0ID0gdGhpcy5tZXNzYWdlc190ZW1wbGF0ZS5mb3JtYXQobWVzc2FnZSk7DQogICAgICAgICAgJCgnI2hlbHBlcl9tZXNzYWdlJykuZGV0YWNoKCk7DQogICAgICAgICAgJCgnI29lX21haW5hcmVhJykucHJlcGVuZChvdXRwdXQpOw0KICAgICAgICAgICQoJyNoZWxwZXJfbWVzc2FnZScpLmhpZGUoKTsNCiAgICAgICAgICBDTVNNU0VYVC5hZG1pbl90aGVtZS52aWV3LnNob3dOb3RpZmljYXRpb25zKCk7DQogICAgICAgIH07DQoNCiAgICAgICAgLyoqDQogICAgICAgICAqIHRhcHMgaW50byB0aGUgY29yZSBmdW5jdGlvbiB0byBzaG93IGFuIGVycm9yIHdoZW4gbmVlZGVkDQogICAgICAgICAqIHRoZW1lIGRlcGVuZGVudCBPbmVFbGV2ZW4gaW4gdGhpcyBjYXNlOiBPRQ0KICAgICAgICAgKg0KICAgICAgICAgKiBAcGFyYW0gbWVzc2FnZQ0KICAgICAgICAgKi8NCiAgICAgICAgQ01TTVNFWFQuVklFVy5jb3JlX2Vycm9yX21zZyA9IGZ1bmN0aW9uKG1lc3NhZ2UpDQogICAgICAgIHsNCiAgICAgICAgICBsZXQgb3V0cHV0ID0gdGhpcy5lcnJvcnNfdGVtcGxhdGUuZm9ybWF0KG1lc3NhZ2UpOw0KICAgICAgICAgICQoJyNoZWxwZXJfZXJyb3InKS5kZXRhY2goKTsNCiAgICAgICAgICAkKCcjb2VfbWFpbmFyZWEnKS5wcmVwZW5kKG91dHB1dCk7DQogICAgICAgICAgJCgnI2hlbHBlcl9lcnJvcicpLmhpZGUoKTsNCiAgICAgICAgICBDTVNNU0VYVC5hZG1pbl90aGVtZS52aWV3LnNob3dOb3RpZmljYXRpb25zKCk7DQogICAgICAgIH07DQogICAgICB9DQogICAgfTsNCg0KICAgIC8vIEluaXRpYWxpemUNCiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZnVuY3Rpb24oKQ0KICAgIHsNCiAgICAgIENNU01TRVhULkFKQVguaW5pdCgpOw0KICAgICAgQ01TTVNFWFQuVklFVy5pbml0KCk7DQogICAgfSk7DQoNCiAgfSh0aGlzKQ0KKTsNCg0K]]></data>
	</file>
	<file>
	  <filename>/js/common.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogbWFrZSBidXR0b25zIHdpdGggbGlua3MgaW5zaWRlIGJlaGF2ZSBwcm9wZXJseSAqLwokKGZ1bmN0aW9uKCl7CiAgICAkKCdidXR0b25bZGF0YS1ocmVmXScpLmNsaWNrKGZ1bmN0aW9uKGV2KXsKCWV2LnByZXZlbnREZWZhdWx0KCk7CglsZXQgaHJlZiA9ICQodGhpcykuZGF0YSgnaHJlZicpOwoJaWYoIGhyZWYubGVuZ3RoID4gMCApIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gaHJlZjsKICAgIH0pCn0pOwo=]]></data>
	</file>
	<file>
	  <filename>/js/datatables.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogVGhpcyBjb21iaW5lZCBmaWxlIHdhcyBjcmVhdGVkIGJ5IHRoZSBEYXRhVGFibGVzIGRvd25sb2FkZXIgYnVpbGRlcjoKICogICBodHRwczovL2RhdGF0YWJsZXMubmV0L2Rvd25sb2FkCiAqCiAqIFRvIHJlYnVpbGQgb3IgbW9kaWZ5IHRoaXMgZmlsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbnMgb2YgdGhlIGluY2x1ZGVkCiAqIHNvZnR3YXJlIHBsZWFzZSB2aXNpdDoKICogICBodHRwczovL2RhdGF0YWJsZXMubmV0L2Rvd25sb2FkLyNiczQvanN6aXAtMi41LjAvZHQtMS4xMC4yMC9iLTEuNi4xL2ItY29sdmlzLTEuNi4xL2ItZmxhc2gtMS42LjEvYi1odG1sNS0xLjYuMS9iLXByaW50LTEuNi4xL2NyLTEuNS4yL2ZjLTMuMy4wL2ZoLTMuMS42L2t0LTIuNS4xL3ItMi4yLjMvcmctMS4xLjEvcnItMS4yLjYvc2MtMi4wLjEvc3AtMS4wLjEvc2wtMS4zLjEKICoKICogSW5jbHVkZWQgbGlicmFyaWVzOgogKiAgIEpTWmlwIDIuNS4wLCBEYXRhVGFibGVzIDEuMTAuMjAsIEJ1dHRvbnMgMS42LjEsIENvbHVtbiB2aXNpYmlsaXR5IDEuNi4xLCBGbGFzaCBleHBvcnQgMS42LjEsIEhUTUw1IGV4cG9ydCAxLjYuMSwgUHJpbnQgdmlldyAxLjYuMSwgQ29sUmVvcmRlciAxLjUuMiwgRml4ZWRDb2x1bW5zIDMuMy4wLCBGaXhlZEhlYWRlciAzLjEuNiwgS2V5VGFibGUgMi41LjEsIFJlc3BvbnNpdmUgMi4yLjMsIFJvd0dyb3VwIDEuMS4xLCBSb3dSZW9yZGVyIDEuMi42LCBTY3JvbGxlciAyLjAuMSwgU2VhcmNoUGFuZXMgMS4wLjEsIFNlbGVjdCAxLjMuMQogKi8KCi8qIQoKSlNaaXAgLSBBIEphdmFzY3JpcHQgY2xhc3MgZm9yIGdlbmVyYXRpbmcgYW5kIHJlYWRpbmcgemlwIGZpbGVzCjxodHRwOi8vc3R1YXJ0ay5jb20vanN6aXA+CgooYykgMjAwOS0yMDE0IFN0dWFydCBLbmlnaHRsZXkgPHN0dWFydCBbYXRdIHN0dWFydGsuY29tPgpEdWFsIGxpY2VuY2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBvciBHUEx2My4gU2VlIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vU3R1ay9qc3ppcC9tYXN0ZXIvTElDRU5TRS5tYXJrZG93bi4KCkpTWmlwIHVzZXMgdGhlIGxpYnJhcnkgcGFrbyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgOgpodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL3Bha28vYmxvYi9tYXN0ZXIvTElDRU5TRQoqLwohZnVuY3Rpb24oYSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1hKCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxhKTtlbHNle3ZhciBiOyJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P2I9d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2I9Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmKGI9c2VsZiksYi5KU1ppcD1hKCl9fShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBhKGIsYyxkKXtmdW5jdGlvbiBlKGcsaCl7aWYoIWNbZ10pe2lmKCFiW2ddKXt2YXIgaT0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighaCYmaSlyZXR1cm4gaShnLCEwKTtpZihmKXJldHVybiBmKGcsITApO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2crIiciKX12YXIgaj1jW2ddPXtleHBvcnRzOnt9fTtiW2ddWzBdLmNhbGwoai5leHBvcnRzLGZ1bmN0aW9uKGEpe3ZhciBjPWJbZ11bMV1bYV07cmV0dXJuIGUoYz9jOmEpfSxqLGouZXhwb3J0cyxhLGIsYyxkKX1yZXR1cm4gY1tnXS5leHBvcnRzfWZvcih2YXIgZj0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxnPTA7ZzxkLmxlbmd0aDtnKyspZShkW2ddKTtyZXR1cm4gZX0oezE6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89IjtjLmVuY29kZT1mdW5jdGlvbihhKXtmb3IodmFyIGIsYyxlLGYsZyxoLGksaj0iIixrPTA7azxhLmxlbmd0aDspYj1hLmNoYXJDb2RlQXQoaysrKSxjPWEuY2hhckNvZGVBdChrKyspLGU9YS5jaGFyQ29kZUF0KGsrKyksZj1iPj4yLGc9KDMmYik8PDR8Yz4+NCxoPSgxNSZjKTw8MnxlPj42LGk9NjMmZSxpc05hTihjKT9oPWk9NjQ6aXNOYU4oZSkmJihpPTY0KSxqPWorZC5jaGFyQXQoZikrZC5jaGFyQXQoZykrZC5jaGFyQXQoaCkrZC5jaGFyQXQoaSk7cmV0dXJuIGp9LGMuZGVjb2RlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxmLGcsaCxpLGo9IiIsaz0wO2ZvcihhPWEucmVwbGFjZSgvW15BLVphLXowLTlcK1wvXD1dL2csIiIpO2s8YS5sZW5ndGg7KWY9ZC5pbmRleE9mKGEuY2hhckF0KGsrKykpLGc9ZC5pbmRleE9mKGEuY2hhckF0KGsrKykpLGg9ZC5pbmRleE9mKGEuY2hhckF0KGsrKykpLGk9ZC5pbmRleE9mKGEuY2hhckF0KGsrKykpLGI9Zjw8MnxnPj40LGM9KDE1JmcpPDw0fGg+PjIsZT0oMyZoKTw8NnxpLGorPVN0cmluZy5mcm9tQ2hhckNvZGUoYiksNjQhPWgmJihqKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGMpKSw2NCE9aSYmKGorPVN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO3JldHVybiBqfX0se31dLDI6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoKXt0aGlzLmNvbXByZXNzZWRTaXplPTAsdGhpcy51bmNvbXByZXNzZWRTaXplPTAsdGhpcy5jcmMzMj0wLHRoaXMuY29tcHJlc3Npb25NZXRob2Q9bnVsbCx0aGlzLmNvbXByZXNzZWRDb250ZW50PW51bGx9Yy5wcm90b3R5cGU9e2dldENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZ2V0Q29tcHJlc3NlZENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19LGIuZXhwb3J0cz1jfSx7fV0sMzpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IjtjLlNUT1JFPXttYWdpYzoiXHgwMFx4MDAiLGNvbXByZXNzOmZ1bmN0aW9uKGEpe3JldHVybiBhfSx1bmNvbXByZXNzOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxjb21wcmVzc0lucHV0VHlwZTpudWxsLHVuY29tcHJlc3NJbnB1dFR5cGU6bnVsbH0sYy5ERUZMQVRFPWEoIi4vZmxhdGUiKX0seyIuL2ZsYXRlIjo4fV0sNDpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7dmFyIGM9YSgiLi91dGlscyIpLGQ9WzAsMTk5Njk1OTg5NCwzOTkzOTE5Nzg4LDI1Njc1MjQ3OTQsMTI0NjM0MTM3LDE4ODYwNTc2MTUsMzkxNTYyMTY4NSwyNjU3MzkyMDM1LDI0OTI2ODI3NCwyMDQ0NTA4MzI0LDM3NzIxMTUyMzAsMjU0NzE3Nzg2NCwxNjI5NDE5OTUsMjEyNTU2MTAyMSwzODg3NjA3MDQ3LDI0Mjg0NDQwNDksNDk4NTM2NTQ4LDE3ODk5Mjc2NjYsNDA4OTAxNjY0OCwyMjI3MDYxMjE0LDQ1MDU0ODg2MSwxODQzMjU4NjAzLDQxMDc1ODA3NTMsMjIxMTY3NzYzOSwzMjU4ODM5OTAsMTY4NDc3NzE1Miw0MjUxMTIyMDQyLDIzMjE5MjY2MzYsMzM1NjMzNDg3LDE2NjEzNjU0NjUsNDE5NTMwMjc1NSwyMzY2MTE1MzE3LDk5NzA3MzA5NiwxMjgxOTUzODg2LDM1Nzk4NTUzMzIsMjcyNDY4ODI0MiwxMDA2ODg4MTQ1LDEyNTg2MDc2ODcsMzUyNDEwMTYyOSwyNzY4OTQyNDQzLDkwMTA5NzcyMiwxMTE5MDAwNjg0LDM2ODY1MTcyMDYsMjg5ODA2NTcyOCw4NTMwNDQ0NTEsMTE3MjI2NjEwMSwzNzA1MDE1NzU5LDI4ODI2MTY2NjUsNjUxNzY3OTgwLDEzNzM1MDM1NDYsMzM2OTU1NDMwNCwzMjE4MTA0NTk4LDU2NTUwNzI1MywxNDU0NjIxNzMxLDM0ODUxMTE3MDUsMzA5OTQzNjMwMyw2NzEyNjY5NzQsMTU5NDE5ODAyNCwzMzIyNzMwOTMwLDI5NzAzNDc4MTIsNzk1ODM1NTI3LDE0ODMyMzAyMjUsMzI0NDM2NzI3NSwzMDYwMTQ5NTY1LDE5OTQxNDYxOTIsMzExNTg1MzQsMjU2MzkwNzc3Miw0MDIzNzE3OTMwLDE5MDc0NTk0NjUsMTEyNjM3MjE1LDI2ODAxNTMyNTMsMzkwNDQyNzA1OSwyMDEzNzc2MjkwLDI1MTcyMjAzNiwyNTE3MjE1Mzc0LDM3NzU4MzAwNDAsMjEzNzY1Njc2MywxNDEzNzY4MTMsMjQzOTI3NzcxOSwzODY1MjcxMjk3LDE4MDIxOTU0NDQsNDc2ODY0ODY2LDIyMzgwMDEzNjgsNDA2NjUwODg3OCwxODEyMzcwOTI1LDQ1MzA5MjczMSwyMTgxNjI1MDI1LDQxMTE0NTEyMjMsMTcwNjA4ODkwMiwzMTQwNDI3MDQsMjM0NDUzMjIwMiw0MjQwMDE3NTMyLDE2NTg2NTgyNzEsMzY2NjE5OTc3LDIzNjI2NzAzMjMsNDIyNDk5NDQwNSwxMzAzNTM1OTYwLDk4NDk2MTQ4NiwyNzQ3MDA3MDkyLDM1NjkwMzc1MzgsMTI1NjE3MDgxNywxMDM3NjA0MzExLDI3NjUyMTA3MzMsMzU1NDA3OTk5NSwxMTMxMDE0NTA2LDg3OTY3OTk5NiwyOTA5MjQzNDYyLDM2NjM3NzE4NTYsMTE0MTEyNDQ2Nyw4NTU4NDIyNzcsMjg1MjgwMTYzMSwzNzA4NjQ4NjQ5LDEzNDI1MzM5NDgsNjU0NDU5MzA2LDMxODgzOTYwNDgsMzM3MzAxNTE3NCwxNDY2NDc5OTA5LDU0NDE3OTYzNSwzMTEwNTIzOTEzLDM0NjI1MjIwMTUsMTU5MTY3MTA1NCw3MDIxMzg3NzYsMjk2NjQ2MDQ1MCwzMzUyNzk5NDEyLDE1MDQ5MTg4MDcsNzgzNTUxODczLDMwODI2NDA0NDMsMzIzMzQ0Mjk4OSwzOTg4MjkyMzg0LDI1OTYyNTQ2NDYsNjIzMTcwNjgsMTk1NzgxMDg0MiwzOTM5ODQ1OTQ1LDI2NDc4MTYxMTEsODE0NzA5OTcsMTk0MzgwMzUyMywzODE0OTE4OTMwLDI0ODk1OTY4MDQsMjI1Mjc0NDMwLDIwNTM3OTAzNzYsMzgyNjE3NTc1NSwyNDY2OTA2MDEzLDE2NzgxNjc0MywyMDk3NjUxMzc3LDQwMjc1NTI1ODAsMjI2NTQ5MDM4Niw1MDM0NDQwNzIsMTc2MjA1MDgxNCw0MTUwNDE3MjQ1LDIxNTQxMjkzNTUsNDI2NTIyMjI1LDE4NTI1MDc4NzksNDI3NTMxMzUyNiwyMzEyMzE3OTIwLDI4Mjc1MzYyNiwxNzQyNTU1ODUyLDQxODk3MDgxNDMsMjM5NDg3Nzk0NSwzOTc5MTc3NjMsMTYyMjE4MzYzNywzNjA0MzkwODg4LDI3MTQ4NjY1NTgsOTUzNzI5NzMyLDEzNDAwNzY2MjYsMzUxODcxOTk4NSwyNzk3MzYwOTk5LDEwNjg4MjgzODEsMTIxOTYzODg1OSwzNjI0NzQxODUwLDI5MzY2NzUxNDgsOTA2MTg1NDYyLDEwOTA4MTI1MTIsMzc0NzY3MjAwMywyODI1Mzc5NjY5LDgyOTMyOTEzNSwxMTgxMzM1MTYxLDM0MTIxNzc4MDQsMzE2MDgzNDg0Miw2MjgwODU0MDgsMTM4MjYwNTM2NiwzNDIzMzY5MTA5LDMxMzgwNzg0NjcsNTcwNTYyMjMzLDE0MjY0MDA4MTUsMzMxNzMxNjU0MiwyOTk4NzMzNjA4LDczMzIzOTk1NCwxNTU1MjYxOTU2LDMyNjg5MzU1OTEsMzA1MDM2MDYyNSw3NTI0NTk0MDMsMTU0MTMyMDIyMSwyNjA3MDcxOTIwLDM5NjU5NzMwMzAsMTk2OTkyMjk3Miw0MDczNTQ5OCwyNjE3ODM3MjI1LDM5NDM1NzcxNTEsMTkxMzA4Nzg3Nyw4MzkwODM3MSwyNTEyMzQxNjM0LDM4MDM3NDA2OTIsMjA3NTIwODYyMiwyMTMyNjExMTIsMjQ2MzI3MjYwMywzODU1OTkwMjg1LDIwOTQ4NTQwNzEsMTk4OTU4ODgxLDIyNjIwMjkwMTIsNDA1NzI2MDYxMCwxNzU5MzU5OTkyLDUzNDQxNDE5MCwyMTc2NzE4NTQxLDQxMzkzMjkxMTUsMTg3MzgzNjAwMSw0MTQ2NjQ1NjcsMjI4MjI0ODkzNCw0Mjc5MjAwMzY4LDE3MTE2ODQ1NTQsMjg1MjgxMTE2LDI0MDU4MDE3MjcsNDE2NzIxNjc0NSwxNjM0NDY3Nzk1LDM3NjIyOTcwMSwyNjg1MDY3ODk2LDM2MDgwMDc0MDYsMTMwODkxODYxMiw5NTY1NDM5MzgsMjgwODU1NTEwNSwzNDk1OTU4MjYzLDEyMzE2MzYzMDEsMTA0NzQyNzAzNSwyOTMyOTU5ODE4LDM2NTQ3MDM4MzYsMTA4ODM1OTI3MCw5MzY5MThlMywyODQ3NzE0ODk5LDM3MzY4Mzc4MjksMTIwMjkwMDg2Myw4MTcyMzM4OTcsMzE4MzM0MjEwOCwzNDAxMjM3MTMwLDE0MDQyNzc1NTIsNjE1ODE4MTUwLDMxMzQyMDc0OTMsMzQ1MzQyMTIwMywxNDIzODU3NDQ5LDYwMTQ1MDQzMSwzMDA5ODM3NjE0LDMyOTQ3MTA0NTYsMTU2NzEwMzc0Niw3MTE5Mjg3MjQsMzAyMDY2ODQ3MSwzMjcyMzgwMDY1LDE1MTAzMzQyMzUsNzU1MTY3MTE3XTtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIGF8fCFhLmxlbmd0aClyZXR1cm4gMDt2YXIgZT0ic3RyaW5nIiE9PWMuZ2V0VHlwZU9mKGEpOyJ1bmRlZmluZWQiPT10eXBlb2YgYiYmKGI9MCk7dmFyIGY9MCxnPTAsaD0wO2I9LTFeYjtmb3IodmFyIGk9MCxqPWEubGVuZ3RoO2o+aTtpKyspaD1lP2FbaV06YS5jaGFyQ29kZUF0KGkpLGc9MjU1JihiXmgpLGY9ZFtnXSxiPWI+Pj44XmY7cmV0dXJuLTFeYn19LHsiLi91dGlscyI6MjF9XSw1OltmdW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjKCl7dGhpcy5kYXRhPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLmluZGV4PTB9dmFyIGQ9YSgiLi91dGlscyIpO2MucHJvdG90eXBlPXtjaGVja09mZnNldDpmdW5jdGlvbihhKXt0aGlzLmNoZWNrSW5kZXgodGhpcy5pbmRleCthKX0sY2hlY2tJbmRleDpmdW5jdGlvbihhKXtpZih0aGlzLmxlbmd0aDxhfHwwPmEpdGhyb3cgbmV3IEVycm9yKCJFbmQgb2YgZGF0YSByZWFjaGVkIChkYXRhIGxlbmd0aCA9ICIrdGhpcy5sZW5ndGgrIiwgYXNrZWQgaW5kZXggPSAiK2ErIikuIENvcnJ1cHRlZCB6aXAgPyIpfSxzZXRJbmRleDpmdW5jdGlvbihhKXt0aGlzLmNoZWNrSW5kZXgoYSksdGhpcy5pbmRleD1hfSxza2lwOmZ1bmN0aW9uKGEpe3RoaXMuc2V0SW5kZXgodGhpcy5pbmRleCthKX0sYnl0ZUF0OmZ1bmN0aW9uKCl7fSxyZWFkSW50OmZ1bmN0aW9uKGEpe3ZhciBiLGM9MDtmb3IodGhpcy5jaGVja09mZnNldChhKSxiPXRoaXMuaW5kZXgrYS0xO2I+PXRoaXMuaW5kZXg7Yi0tKWM9KGM8PDgpK3RoaXMuYnl0ZUF0KGIpO3JldHVybiB0aGlzLmluZGV4Kz1hLGN9LHJlYWRTdHJpbmc6ZnVuY3Rpb24oYSl7cmV0dXJuIGQudHJhbnNmb3JtVG8oInN0cmluZyIsdGhpcy5yZWFkRGF0YShhKSl9LHJlYWREYXRhOmZ1bmN0aW9uKCl7fSxsYXN0SW5kZXhPZlNpZ25hdHVyZTpmdW5jdGlvbigpe30scmVhZERhdGU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRJbnQoNCk7cmV0dXJuIG5ldyBEYXRlKChhPj4yNSYxMjcpKzE5ODAsKGE+PjIxJjE1KS0xLGE+PjE2JjMxLGE+PjExJjMxLGE+PjUmNjMsKDMxJmEpPDwxKX19LGIuZXhwb3J0cz1jfSx7Ii4vdXRpbHMiOjIxfV0sNjpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IjtjLmJhc2U2ND0hMSxjLmJpbmFyeT0hMSxjLmRpcj0hMSxjLmNyZWF0ZUZvbGRlcnM9ITEsYy5kYXRlPW51bGwsYy5jb21wcmVzc2lvbj1udWxsLGMuY29tcHJlc3Npb25PcHRpb25zPW51bGwsYy5jb21tZW50PW51bGwsYy51bml4UGVybWlzc2lvbnM9bnVsbCxjLmRvc1Blcm1pc3Npb25zPW51bGx9LHt9XSw3OltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4vdXRpbHMiKTtjLnN0cmluZzJiaW5hcnk9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuc3RyaW5nMmJpbmFyeShhKX0sYy5zdHJpbmcyVWludDhBcnJheT1mdW5jdGlvbihhKXtyZXR1cm4gZC50cmFuc2Zvcm1UbygidWludDhhcnJheSIsYSl9LGMudWludDhBcnJheTJTdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuIGQudHJhbnNmb3JtVG8oInN0cmluZyIsYSl9LGMuc3RyaW5nMkJsb2I9ZnVuY3Rpb24oYSl7dmFyIGI9ZC50cmFuc2Zvcm1UbygiYXJyYXlidWZmZXIiLGEpO3JldHVybiBkLmFycmF5QnVmZmVyMkJsb2IoYil9LGMuYXJyYXlCdWZmZXIyQmxvYj1mdW5jdGlvbihhKXtyZXR1cm4gZC5hcnJheUJ1ZmZlcjJCbG9iKGEpfSxjLnRyYW5zZm9ybVRvPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQudHJhbnNmb3JtVG8oYSxiKX0sYy5nZXRUeXBlT2Y9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuZ2V0VHlwZU9mKGEpfSxjLmNoZWNrU3VwcG9ydD1mdW5jdGlvbihhKXtyZXR1cm4gZC5jaGVja1N1cHBvcnQoYSl9LGMuTUFYX1ZBTFVFXzE2QklUUz1kLk1BWF9WQUxVRV8xNkJJVFMsYy5NQVhfVkFMVUVfMzJCSVRTPWQuTUFYX1ZBTFVFXzMyQklUUyxjLnByZXR0eT1mdW5jdGlvbihhKXtyZXR1cm4gZC5wcmV0dHkoYSl9LGMuZmluZENvbXByZXNzaW9uPWZ1bmN0aW9uKGEpe3JldHVybiBkLmZpbmRDb21wcmVzc2lvbihhKX0sYy5pc1JlZ0V4cD1mdW5jdGlvbihhKXtyZXR1cm4gZC5pc1JlZ0V4cChhKX19LHsiLi91dGlscyI6MjF9XSw4OltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheSYmInVuZGVmaW5lZCIhPXR5cGVvZiBVaW50MTZBcnJheSYmInVuZGVmaW5lZCIhPXR5cGVvZiBVaW50MzJBcnJheSxlPWEoInBha28iKTtjLnVuY29tcHJlc3NJbnB1dFR5cGU9ZD8idWludDhhcnJheSI6ImFycmF5IixjLmNvbXByZXNzSW5wdXRUeXBlPWQ/InVpbnQ4YXJyYXkiOiJhcnJheSIsYy5tYWdpYz0iXGJceDAwIixjLmNvbXByZXNzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGUuZGVmbGF0ZVJhdyhhLHtsZXZlbDpiLmxldmVsfHwtMX0pfSxjLnVuY29tcHJlc3M9ZnVuY3Rpb24oYSl7cmV0dXJuIGUuaW5mbGF0ZVJhdyhhKX19LHtwYWtvOjI0fV0sOTpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyhhLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgYz8odGhpcy5maWxlcz17fSx0aGlzLmNvbW1lbnQ9bnVsbCx0aGlzLnJvb3Q9IiIsYSYmdGhpcy5sb2FkKGEsYiksdm9pZCh0aGlzLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGE9bmV3IGM7Zm9yKHZhciBiIGluIHRoaXMpImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXNbYl0mJihhW2JdPXRoaXNbYl0pO3JldHVybiBhfSkpOm5ldyBjKGEsYil9dmFyIGQ9YSgiLi9iYXNlNjQiKTtjLnByb3RvdHlwZT1hKCIuL29iamVjdCIpLGMucHJvdG90eXBlLmxvYWQ9YSgiLi9sb2FkIiksYy5zdXBwb3J0PWEoIi4vc3VwcG9ydCIpLGMuZGVmYXVsdHM9YSgiLi9kZWZhdWx0cyIpLGMudXRpbHM9YSgiLi9kZXByZWNhdGVkUHVibGljVXRpbHMiKSxjLmJhc2U2ND17ZW5jb2RlOmZ1bmN0aW9uKGEpe3JldHVybiBkLmVuY29kZShhKX0sZGVjb2RlOmZ1bmN0aW9uKGEpe3JldHVybiBkLmRlY29kZShhKX19LGMuY29tcHJlc3Npb25zPWEoIi4vY29tcHJlc3Npb25zIiksYi5leHBvcnRzPWN9LHsiLi9iYXNlNjQiOjEsIi4vY29tcHJlc3Npb25zIjozLCIuL2RlZmF1bHRzIjo2LCIuL2RlcHJlY2F0ZWRQdWJsaWNVdGlscyI6NywiLi9sb2FkIjoxMCwiLi9vYmplY3QiOjEzLCIuL3N1cHBvcnQiOjE3fV0sMTA6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO3ZhciBjPWEoIi4vYmFzZTY0IiksZD1hKCIuL3ppcEVudHJpZXMiKTtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiKXt2YXIgZSxmLGcsaDtmb3IoYj1ifHx7fSxiLmJhc2U2NCYmKGE9Yy5kZWNvZGUoYSkpLGY9bmV3IGQoYSxiKSxlPWYuZmlsZXMsZz0wO2c8ZS5sZW5ndGg7ZysrKWg9ZVtnXSx0aGlzLmZpbGUoaC5maWxlTmFtZSxoLmRlY29tcHJlc3NlZCx7YmluYXJ5OiEwLG9wdGltaXplZEJpbmFyeVN0cmluZzohMCxkYXRlOmguZGF0ZSxkaXI6aC5kaXIsY29tbWVudDpoLmZpbGVDb21tZW50Lmxlbmd0aD9oLmZpbGVDb21tZW50Om51bGwsdW5peFBlcm1pc3Npb25zOmgudW5peFBlcm1pc3Npb25zLGRvc1Blcm1pc3Npb25zOmguZG9zUGVybWlzc2lvbnMsY3JlYXRlRm9sZGVyczpiLmNyZWF0ZUZvbGRlcnN9KTtyZXR1cm4gZi56aXBDb21tZW50Lmxlbmd0aCYmKHRoaXMuY29tbWVudD1mLnppcENvbW1lbnQpLHRoaXN9fSx7Ii4vYmFzZTY0IjoxLCIuL3ppcEVudHJpZXMiOjIyfV0sMTE6W2Z1bmN0aW9uKGEsYil7KGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtiLmV4cG9ydHM9ZnVuY3Rpb24oYixjKXtyZXR1cm4gbmV3IGEoYixjKX0sYi5leHBvcnRzLnRlc3Q9ZnVuY3Rpb24oYil7cmV0dXJuIGEuaXNCdWZmZXIoYil9fSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgQnVmZmVyP0J1ZmZlcjp2b2lkIDApfSx7fV0sMTI6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoYSl7dGhpcy5kYXRhPWEsdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTB9dmFyIGQ9YSgiLi91aW50OEFycmF5UmVhZGVyIik7Yy5wcm90b3R5cGU9bmV3IGQsYy5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oYSl7dGhpcy5jaGVja09mZnNldChhKTt2YXIgYj10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCx0aGlzLmluZGV4K2EpO3JldHVybiB0aGlzLmluZGV4Kz1hLGJ9LGIuZXhwb3J0cz1jfSx7Ii4vdWludDhBcnJheVJlYWRlciI6MTh9XSwxMzpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7dmFyIGM9YSgiLi9zdXBwb3J0IiksZD1hKCIuL3V0aWxzIiksZT1hKCIuL2NyYzMyIiksZj1hKCIuL3NpZ25hdHVyZSIpLGc9YSgiLi9kZWZhdWx0cyIpLGg9YSgiLi9iYXNlNjQiKSxpPWEoIi4vY29tcHJlc3Npb25zIiksaj1hKCIuL2NvbXByZXNzZWRPYmplY3QiKSxrPWEoIi4vbm9kZUJ1ZmZlciIpLGw9YSgiLi91dGY4IiksbT1hKCIuL3N0cmluZ1dyaXRlciIpLG49YSgiLi91aW50OEFycmF5V3JpdGVyIiksbz1mdW5jdGlvbihhKXtpZihhLl9kYXRhIGluc3RhbmNlb2YgaiYmKGEuX2RhdGE9YS5fZGF0YS5nZXRDb250ZW50KCksYS5vcHRpb25zLmJpbmFyeT0hMCxhLm9wdGlvbnMuYmFzZTY0PSExLCJ1aW50OGFycmF5Ij09PWQuZ2V0VHlwZU9mKGEuX2RhdGEpKSl7dmFyIGI9YS5fZGF0YTthLl9kYXRhPW5ldyBVaW50OEFycmF5KGIubGVuZ3RoKSwwIT09Yi5sZW5ndGgmJmEuX2RhdGEuc2V0KGIsMCl9cmV0dXJuIGEuX2RhdGF9LHA9ZnVuY3Rpb24oYSl7dmFyIGI9byhhKSxlPWQuZ2V0VHlwZU9mKGIpO3JldHVybiJzdHJpbmciPT09ZT8hYS5vcHRpb25zLmJpbmFyeSYmYy5ub2RlYnVmZmVyP2soYiwidXRmLTgiKTphLmFzQmluYXJ5KCk6Yn0scT1mdW5jdGlvbihhKXt2YXIgYj1vKHRoaXMpO3JldHVybiBudWxsPT09Ynx8InVuZGVmaW5lZCI9PXR5cGVvZiBiPyIiOih0aGlzLm9wdGlvbnMuYmFzZTY0JiYoYj1oLmRlY29kZShiKSksYj1hJiZ0aGlzLm9wdGlvbnMuYmluYXJ5P0QudXRmOGRlY29kZShiKTpkLnRyYW5zZm9ybVRvKCJzdHJpbmciLGIpLGF8fHRoaXMub3B0aW9ucy5iaW5hcnl8fChiPWQudHJhbnNmb3JtVG8oInN0cmluZyIsRC51dGY4ZW5jb2RlKGIpKSksYil9LHI9ZnVuY3Rpb24oYSxiLGMpe3RoaXMubmFtZT1hLHRoaXMuZGlyPWMuZGlyLHRoaXMuZGF0ZT1jLmRhdGUsdGhpcy5jb21tZW50PWMuY29tbWVudCx0aGlzLnVuaXhQZXJtaXNzaW9ucz1jLnVuaXhQZXJtaXNzaW9ucyx0aGlzLmRvc1Blcm1pc3Npb25zPWMuZG9zUGVybWlzc2lvbnMsdGhpcy5fZGF0YT1iLHRoaXMub3B0aW9ucz1jLHRoaXMuX2luaXRpYWxNZXRhZGF0YT17ZGlyOmMuZGlyLGRhdGU6Yy5kYXRlfX07ci5wcm90b3R5cGU9e2FzVGV4dDpmdW5jdGlvbigpe3JldHVybiBxLmNhbGwodGhpcywhMCl9LGFzQmluYXJ5OmZ1bmN0aW9uKCl7cmV0dXJuIHEuY2FsbCh0aGlzLCExKX0sYXNOb2RlQnVmZmVyOmZ1bmN0aW9uKCl7dmFyIGE9cCh0aGlzKTtyZXR1cm4gZC50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIsYSl9LGFzVWludDhBcnJheTpmdW5jdGlvbigpe3ZhciBhPXAodGhpcyk7cmV0dXJuIGQudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLGEpfSxhc0FycmF5QnVmZmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXNVaW50OEFycmF5KCkuYnVmZmVyfX07dmFyIHM9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPSIiO2ZvcihjPTA7Yj5jO2MrKylkKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZhKSxhPj4+PTg7cmV0dXJuIGR9LHQ9ZnVuY3Rpb24oKXt2YXIgYSxiLGM9e307Zm9yKGE9MDthPGFyZ3VtZW50cy5sZW5ndGg7YSsrKWZvcihiIGluIGFyZ3VtZW50c1thXSlhcmd1bWVudHNbYV0uaGFzT3duUHJvcGVydHkoYikmJiJ1bmRlZmluZWQiPT10eXBlb2YgY1tiXSYmKGNbYl09YXJndW1lbnRzW2FdW2JdKTtyZXR1cm4gY30sdT1mdW5jdGlvbihhKXtyZXR1cm4gYT1hfHx7fSxhLmJhc2U2NCE9PSEwfHxudWxsIT09YS5iaW5hcnkmJnZvaWQgMCE9PWEuYmluYXJ5fHwoYS5iaW5hcnk9ITApLGE9dChhLGcpLGEuZGF0ZT1hLmRhdGV8fG5ldyBEYXRlLG51bGwhPT1hLmNvbXByZXNzaW9uJiYoYS5jb21wcmVzc2lvbj1hLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCkpLGF9LHY9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlLGY9ZC5nZXRUeXBlT2YoYik7aWYoYz11KGMpLCJzdHJpbmciPT10eXBlb2YgYy51bml4UGVybWlzc2lvbnMmJihjLnVuaXhQZXJtaXNzaW9ucz1wYXJzZUludChjLnVuaXhQZXJtaXNzaW9ucyw4KSksYy51bml4UGVybWlzc2lvbnMmJjE2Mzg0JmMudW5peFBlcm1pc3Npb25zJiYoYy5kaXI9ITApLGMuZG9zUGVybWlzc2lvbnMmJjE2JmMuZG9zUGVybWlzc2lvbnMmJihjLmRpcj0hMCksYy5kaXImJihhPXgoYSkpLGMuY3JlYXRlRm9sZGVycyYmKGU9dyhhKSkmJnkuY2FsbCh0aGlzLGUsITApLGMuZGlyfHxudWxsPT09Ynx8InVuZGVmaW5lZCI9PXR5cGVvZiBiKWMuYmFzZTY0PSExLGMuYmluYXJ5PSExLGI9bnVsbCxmPW51bGw7ZWxzZSBpZigic3RyaW5nIj09PWYpYy5iaW5hcnkmJiFjLmJhc2U2NCYmYy5vcHRpbWl6ZWRCaW5hcnlTdHJpbmchPT0hMCYmKGI9ZC5zdHJpbmcyYmluYXJ5KGIpKTtlbHNle2lmKGMuYmFzZTY0PSExLGMuYmluYXJ5PSEwLCEoZnx8YiBpbnN0YW5jZW9mIGopKXRocm93IG5ldyBFcnJvcigiVGhlIGRhdGEgb2YgJyIrYSsiJyBpcyBpbiBhbiB1bnN1cHBvcnRlZCBmb3JtYXQgISIpOyJhcnJheWJ1ZmZlciI9PT1mJiYoYj1kLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixiKSl9dmFyIGc9bmV3IHIoYSxiLGMpO3JldHVybiB0aGlzLmZpbGVzW2FdPWcsZ30sdz1mdW5jdGlvbihhKXsiLyI9PWEuc2xpY2UoLTEpJiYoYT1hLnN1YnN0cmluZygwLGEubGVuZ3RoLTEpKTt2YXIgYj1hLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIGI+MD9hLnN1YnN0cmluZygwLGIpOiIifSx4PWZ1bmN0aW9uKGEpe3JldHVybiIvIiE9YS5zbGljZSgtMSkmJihhKz0iLyIpLGF9LHk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj0idW5kZWZpbmVkIiE9dHlwZW9mIGI/YjohMSxhPXgoYSksdGhpcy5maWxlc1thXXx8di5jYWxsKHRoaXMsYSxudWxsLHtkaXI6ITAsY3JlYXRlRm9sZGVyczpifSksdGhpcy5maWxlc1thXX0sej1mdW5jdGlvbihhLGIsYyl7dmFyIGYsZz1uZXcgajtyZXR1cm4gYS5fZGF0YSBpbnN0YW5jZW9mIGo/KGcudW5jb21wcmVzc2VkU2l6ZT1hLl9kYXRhLnVuY29tcHJlc3NlZFNpemUsZy5jcmMzMj1hLl9kYXRhLmNyYzMyLDA9PT1nLnVuY29tcHJlc3NlZFNpemV8fGEuZGlyPyhiPWkuU1RPUkUsZy5jb21wcmVzc2VkQ29udGVudD0iIixnLmNyYzMyPTApOmEuX2RhdGEuY29tcHJlc3Npb25NZXRob2Q9PT1iLm1hZ2ljP2cuY29tcHJlc3NlZENvbnRlbnQ9YS5fZGF0YS5nZXRDb21wcmVzc2VkQ29udGVudCgpOihmPWEuX2RhdGEuZ2V0Q29udGVudCgpLGcuY29tcHJlc3NlZENvbnRlbnQ9Yi5jb21wcmVzcyhkLnRyYW5zZm9ybVRvKGIuY29tcHJlc3NJbnB1dFR5cGUsZiksYykpKTooZj1wKGEpLCghZnx8MD09PWYubGVuZ3RofHxhLmRpcikmJihiPWkuU1RPUkUsZj0iIiksZy51bmNvbXByZXNzZWRTaXplPWYubGVuZ3RoLGcuY3JjMzI9ZShmKSxnLmNvbXByZXNzZWRDb250ZW50PWIuY29tcHJlc3MoZC50cmFuc2Zvcm1UbyhiLmNvbXByZXNzSW5wdXRUeXBlLGYpLGMpKSxnLmNvbXByZXNzZWRTaXplPWcuY29tcHJlc3NlZENvbnRlbnQubGVuZ3RoLGcuY29tcHJlc3Npb25NZXRob2Q9Yi5tYWdpYyxnfSxBPWZ1bmN0aW9uKGEsYil7dmFyIGM9YTtyZXR1cm4gYXx8KGM9Yj8xNjg5MzozMzIwNCksKDY1NTM1JmMpPDwxNn0sQj1mdW5jdGlvbihhKXtyZXR1cm4gNjMmKGF8fDApfSxDPWZ1bmN0aW9uKGEsYixjLGcsaCl7dmFyIGksaixrLG0sbj0oYy5jb21wcmVzc2VkQ29udGVudCxkLnRyYW5zZm9ybVRvKCJzdHJpbmciLGwudXRmOGVuY29kZShiLm5hbWUpKSksbz1iLmNvbW1lbnR8fCIiLHA9ZC50cmFuc2Zvcm1Ubygic3RyaW5nIixsLnV0ZjhlbmNvZGUobykpLHE9bi5sZW5ndGghPT1iLm5hbWUubGVuZ3RoLHI9cC5sZW5ndGghPT1vLmxlbmd0aCx0PWIub3B0aW9ucyx1PSIiLHY9IiIsdz0iIjtrPWIuX2luaXRpYWxNZXRhZGF0YS5kaXIhPT1iLmRpcj9iLmRpcjp0LmRpcixtPWIuX2luaXRpYWxNZXRhZGF0YS5kYXRlIT09Yi5kYXRlP2IuZGF0ZTp0LmRhdGU7dmFyIHg9MCx5PTA7ayYmKHh8PTE2KSwiVU5JWCI9PT1oPyh5PTc5OCx4fD1BKGIudW5peFBlcm1pc3Npb25zLGspKTooeT0yMCx4fD1CKGIuZG9zUGVybWlzc2lvbnMsaykpLGk9bS5nZXRIb3VycygpLGk8PD02LGl8PW0uZ2V0TWludXRlcygpLGk8PD01LGl8PW0uZ2V0U2Vjb25kcygpLzIsaj1tLmdldEZ1bGxZZWFyKCktMTk4MCxqPDw9NCxqfD1tLmdldE1vbnRoKCkrMSxqPDw9NSxqfD1tLmdldERhdGUoKSxxJiYodj1zKDEsMSkrcyhlKG4pLDQpK24sdSs9InVwIitzKHYubGVuZ3RoLDIpK3YpLHImJih3PXMoMSwxKStzKHRoaXMuY3JjMzIocCksNCkrcCx1Kz0idWMiK3Mody5sZW5ndGgsMikrdyk7dmFyIHo9IiI7eis9IlxuXHgwMCIseis9cXx8cj8iXHgwMFxiIjoiXHgwMFx4MDAiLHorPWMuY29tcHJlc3Npb25NZXRob2Qseis9cyhpLDIpLHorPXMoaiwyKSx6Kz1zKGMuY3JjMzIsNCkseis9cyhjLmNvbXByZXNzZWRTaXplLDQpLHorPXMoYy51bmNvbXByZXNzZWRTaXplLDQpLHorPXMobi5sZW5ndGgsMikseis9cyh1Lmxlbmd0aCwyKTt2YXIgQz1mLkxPQ0FMX0ZJTEVfSEVBREVSK3orbit1LEQ9Zi5DRU5UUkFMX0ZJTEVfSEVBREVSK3MoeSwyKSt6K3MocC5sZW5ndGgsMikrIlx4MDBceDAwXHgwMFx4MDAiK3MoeCw0KStzKGcsNCkrbit1K3A7cmV0dXJue2ZpbGVSZWNvcmQ6QyxkaXJSZWNvcmQ6RCxjb21wcmVzc2VkT2JqZWN0OmN9fSxEPXtsb2FkOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJMb2FkIG1ldGhvZCBpcyBub3QgZGVmaW5lZC4gSXMgdGhlIGZpbGUganN6aXAtbG9hZC5qcyBpbmNsdWRlZCA/Iil9LGZpbHRlcjpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmPVtdO2ZvcihiIGluIHRoaXMuZmlsZXMpdGhpcy5maWxlcy5oYXNPd25Qcm9wZXJ0eShiKSYmKGQ9dGhpcy5maWxlc1tiXSxlPW5ldyByKGQubmFtZSxkLl9kYXRhLHQoZC5vcHRpb25zKSksYz1iLnNsaWNlKHRoaXMucm9vdC5sZW5ndGgsYi5sZW5ndGgpLGIuc2xpY2UoMCx0aGlzLnJvb3QubGVuZ3RoKT09PXRoaXMucm9vdCYmYShjLGUpJiZmLnB1c2goZSkpO3JldHVybiBmfSxmaWxlOmZ1bmN0aW9uKGEsYixjKXtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7aWYoZC5pc1JlZ0V4cChhKSl7dmFyIGU9YTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oYSxiKXtyZXR1cm4hYi5kaXImJmUudGVzdChhKX0pfXJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihiLGMpe3JldHVybiFjLmRpciYmYj09PWF9KVswXXx8bnVsbH1yZXR1cm4gYT10aGlzLnJvb3QrYSx2LmNhbGwodGhpcyxhLGIsYyksdGhpc30sZm9sZGVyOmZ1bmN0aW9uKGEpe2lmKCFhKXJldHVybiB0aGlzO2lmKGQuaXNSZWdFeHAoYSkpcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGMuZGlyJiZhLnRlc3QoYil9KTt2YXIgYj10aGlzLnJvb3QrYSxjPXkuY2FsbCh0aGlzLGIpLGU9dGhpcy5jbG9uZSgpO3JldHVybiBlLnJvb3Q9Yy5uYW1lLGV9LHJlbW92ZTpmdW5jdGlvbihhKXthPXRoaXMucm9vdCthO3ZhciBiPXRoaXMuZmlsZXNbYV07aWYoYnx8KCIvIiE9YS5zbGljZSgtMSkmJihhKz0iLyIpLGI9dGhpcy5maWxlc1thXSksYiYmIWIuZGlyKWRlbGV0ZSB0aGlzLmZpbGVzW2FdO2Vsc2UgZm9yKHZhciBjPXRoaXMuZmlsdGVyKGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGMubmFtZS5zbGljZSgwLGEubGVuZ3RoKT09PWF9KSxkPTA7ZDxjLmxlbmd0aDtkKyspZGVsZXRlIHRoaXMuZmlsZXNbY1tkXS5uYW1lXTtyZXR1cm4gdGhpc30sZ2VuZXJhdGU6ZnVuY3Rpb24oYSl7YT10KGF8fHt9LHtiYXNlNjQ6ITAsY29tcHJlc3Npb246IlNUT1JFIixjb21wcmVzc2lvbk9wdGlvbnM6bnVsbCx0eXBlOiJiYXNlNjQiLHBsYXRmb3JtOiJET1MiLGNvbW1lbnQ6bnVsbCxtaW1lVHlwZToiYXBwbGljYXRpb24vemlwIn0pLGQuY2hlY2tTdXBwb3J0KGEudHlwZSksKCJkYXJ3aW4iPT09YS5wbGF0Zm9ybXx8ImZyZWVic2QiPT09YS5wbGF0Zm9ybXx8ImxpbnV4Ij09PWEucGxhdGZvcm18fCJzdW5vcyI9PT1hLnBsYXRmb3JtKSYmKGEucGxhdGZvcm09IlVOSVgiKSwid2luMzIiPT09YS5wbGF0Zm9ybSYmKGEucGxhdGZvcm09IkRPUyIpO3ZhciBiLGMsZT1bXSxnPTAsaj0wLGs9ZC50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLnV0ZjhlbmNvZGUoYS5jb21tZW50fHx0aGlzLmNvbW1lbnR8fCIiKSk7Zm9yKHZhciBsIGluIHRoaXMuZmlsZXMpaWYodGhpcy5maWxlcy5oYXNPd25Qcm9wZXJ0eShsKSl7dmFyIG89dGhpcy5maWxlc1tsXSxwPW8ub3B0aW9ucy5jb21wcmVzc2lvbnx8YS5jb21wcmVzc2lvbi50b1VwcGVyQ2FzZSgpLHE9aVtwXTtpZighcSl0aHJvdyBuZXcgRXJyb3IocCsiIGlzIG5vdCBhIHZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCAhIik7dmFyIHI9by5vcHRpb25zLmNvbXByZXNzaW9uT3B0aW9uc3x8YS5jb21wcmVzc2lvbk9wdGlvbnN8fHt9LHU9ei5jYWxsKHRoaXMsbyxxLHIpLHY9Qy5jYWxsKHRoaXMsbCxvLHUsZyxhLnBsYXRmb3JtKTtnKz12LmZpbGVSZWNvcmQubGVuZ3RoK3UuY29tcHJlc3NlZFNpemUsais9di5kaXJSZWNvcmQubGVuZ3RoLGUucHVzaCh2KX12YXIgdz0iIjt3PWYuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKyJceDAwXHgwMFx4MDBceDAwIitzKGUubGVuZ3RoLDIpK3MoZS5sZW5ndGgsMikrcyhqLDQpK3MoZyw0KStzKGsubGVuZ3RoLDIpK2s7dmFyIHg9YS50eXBlLnRvTG93ZXJDYXNlKCk7Zm9yKGI9InVpbnQ4YXJyYXkiPT09eHx8ImFycmF5YnVmZmVyIj09PXh8fCJibG9iIj09PXh8fCJub2RlYnVmZmVyIj09PXg/bmV3IG4oZytqK3cubGVuZ3RoKTpuZXcgbShnK2ordy5sZW5ndGgpLGM9MDtjPGUubGVuZ3RoO2MrKyliLmFwcGVuZChlW2NdLmZpbGVSZWNvcmQpLGIuYXBwZW5kKGVbY10uY29tcHJlc3NlZE9iamVjdC5jb21wcmVzc2VkQ29udGVudCk7Zm9yKGM9MDtjPGUubGVuZ3RoO2MrKyliLmFwcGVuZChlW2NdLmRpclJlY29yZCk7Yi5hcHBlbmQodyk7dmFyIHk9Yi5maW5hbGl6ZSgpO3N3aXRjaChhLnR5cGUudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1aW50OGFycmF5IjpjYXNlImFycmF5YnVmZmVyIjpjYXNlIm5vZGVidWZmZXIiOnJldHVybiBkLnRyYW5zZm9ybVRvKGEudHlwZS50b0xvd2VyQ2FzZSgpLHkpO2Nhc2UiYmxvYiI6cmV0dXJuIGQuYXJyYXlCdWZmZXIyQmxvYihkLnRyYW5zZm9ybVRvKCJhcnJheWJ1ZmZlciIseSksYS5taW1lVHlwZSk7Y2FzZSJiYXNlNjQiOnJldHVybiBhLmJhc2U2ND9oLmVuY29kZSh5KTp5O2RlZmF1bHQ6cmV0dXJuIHl9fSxjcmMzMjpmdW5jdGlvbihhLGIpe3JldHVybiBlKGEsYil9LHV0ZjhlbmNvZGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGQudHJhbnNmb3JtVG8oInN0cmluZyIsbC51dGY4ZW5jb2RlKGEpKX0sdXRmOGRlY29kZTpmdW5jdGlvbihhKXtyZXR1cm4gbC51dGY4ZGVjb2RlKGEpfX07Yi5leHBvcnRzPUR9LHsiLi9iYXNlNjQiOjEsIi4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9jb21wcmVzc2lvbnMiOjMsIi4vY3JjMzIiOjQsIi4vZGVmYXVsdHMiOjYsIi4vbm9kZUJ1ZmZlciI6MTEsIi4vc2lnbmF0dXJlIjoxNCwiLi9zdHJpbmdXcml0ZXIiOjE2LCIuL3N1cHBvcnQiOjE3LCIuL3VpbnQ4QXJyYXlXcml0ZXIiOjE5LCIuL3V0ZjgiOjIwLCIuL3V0aWxzIjoyMX1dLDE0OltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2MuTE9DQUxfRklMRV9IRUFERVI9IlBLAwQiLGMuQ0VOVFJBTF9GSUxFX0hFQURFUj0iUEsBAiIsYy5DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9IlBLBQYiLGMuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUj0iUEsGByIsYy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9IlBLBgYiLGMuREFUQV9ERVNDUklQVE9SPSJQSwdcYiJ9LHt9XSwxNTpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyhhLGIpe3RoaXMuZGF0YT1hLGJ8fCh0aGlzLmRhdGE9ZS5zdHJpbmcyYmluYXJ5KHRoaXMuZGF0YSkpLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wfXZhciBkPWEoIi4vZGF0YVJlYWRlciIpLGU9YSgiLi91dGlscyIpO2MucHJvdG90eXBlPW5ldyBkLGMucHJvdG90eXBlLmJ5dGVBdD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kYXRhLmNoYXJDb2RlQXQoYSl9LGMucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRhdGEubGFzdEluZGV4T2YoYSl9LGMucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKGEpe3RoaXMuY2hlY2tPZmZzZXQoYSk7dmFyIGI9dGhpcy5kYXRhLnNsaWNlKHRoaXMuaW5kZXgsdGhpcy5pbmRleCthKTtyZXR1cm4gdGhpcy5pbmRleCs9YSxifSxiLmV4cG9ydHM9Y30seyIuL2RhdGFSZWFkZXIiOjUsIi4vdXRpbHMiOjIxfV0sMTY6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO3ZhciBjPWEoIi4vdXRpbHMiKSxkPWZ1bmN0aW9uKCl7dGhpcy5kYXRhPVtdfTtkLnByb3RvdHlwZT17YXBwZW5kOmZ1bmN0aW9uKGEpe2E9Yy50cmFuc2Zvcm1Ubygic3RyaW5nIixhKSx0aGlzLmRhdGEucHVzaChhKX0sZmluYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmpvaW4oIiIpfX0sYi5leHBvcnRzPWR9LHsiLi91dGlscyI6MjF9XSwxNzpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7aWYoYy5iYXNlNjQ9ITAsYy5hcnJheT0hMCxjLnN0cmluZz0hMCxjLmFycmF5YnVmZmVyPSJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheSxjLm5vZGVidWZmZXI9InVuZGVmaW5lZCIhPXR5cGVvZiBhLGMudWludDhhcnJheT0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXksInVuZGVmaW5lZCI9PXR5cGVvZiBBcnJheUJ1ZmZlciljLmJsb2I9ITE7ZWxzZXt2YXIgYj1uZXcgQXJyYXlCdWZmZXIoMCk7dHJ5e2MuYmxvYj0wPT09bmV3IEJsb2IoW2JdLHt0eXBlOiJhcHBsaWNhdGlvbi96aXAifSkuc2l6ZX1jYXRjaChkKXt0cnl7dmFyIGU9d2luZG93LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRlcnx8d2luZG93Lk1TQmxvYkJ1aWxkZXIsZj1uZXcgZTtmLmFwcGVuZChiKSxjLmJsb2I9MD09PWYuZ2V0QmxvYigiYXBwbGljYXRpb24vemlwIikuc2l6ZX1jYXRjaChkKXtjLmJsb2I9ITF9fX19KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBCdWZmZXI/QnVmZmVyOnZvaWQgMCl9LHt9XSwxODpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyhhKXthJiYodGhpcy5kYXRhPWEsdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTApfXZhciBkPWEoIi4vZGF0YVJlYWRlciIpO2MucHJvdG90eXBlPW5ldyBkLGMucHJvdG90eXBlLmJ5dGVBdD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kYXRhW2FdfSxjLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9YS5jaGFyQ29kZUF0KDApLGM9YS5jaGFyQ29kZUF0KDEpLGQ9YS5jaGFyQ29kZUF0KDIpLGU9YS5jaGFyQ29kZUF0KDMpLGY9dGhpcy5sZW5ndGgtNDtmPj0wOy0tZilpZih0aGlzLmRhdGFbZl09PT1iJiZ0aGlzLmRhdGFbZisxXT09PWMmJnRoaXMuZGF0YVtmKzJdPT09ZCYmdGhpcy5kYXRhW2YrM109PT1lKXJldHVybiBmO3JldHVybi0xfSxjLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihhKXtpZih0aGlzLmNoZWNrT2Zmc2V0KGEpLDA9PT1hKXJldHVybiBuZXcgVWludDhBcnJheSgwKTt2YXIgYj10aGlzLmRhdGEuc3ViYXJyYXkodGhpcy5pbmRleCx0aGlzLmluZGV4K2EpO3JldHVybiB0aGlzLmluZGV4Kz1hLGJ9LGIuZXhwb3J0cz1jfSx7Ii4vZGF0YVJlYWRlciI6NX1dLDE5OltmdW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz1hKCIuL3V0aWxzIiksZD1mdW5jdGlvbihhKXt0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkoYSksdGhpcy5pbmRleD0wfTtkLnByb3RvdHlwZT17YXBwZW5kOmZ1bmN0aW9uKGEpezAhPT1hLmxlbmd0aCYmKGE9Yy50cmFuc2Zvcm1UbygidWludDhhcnJheSIsYSksdGhpcy5kYXRhLnNldChhLHRoaXMuaW5kZXgpLHRoaXMuaW5kZXgrPWEubGVuZ3RoKX0sZmluYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfX0sYi5leHBvcnRzPWR9LHsiLi91dGlscyI6MjF9XSwyMDpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIGQ9YSgiLi91dGlscyIpLGU9YSgiLi9zdXBwb3J0IiksZj1hKCIuL25vZGVCdWZmZXIiKSxnPW5ldyBBcnJheSgyNTYpLGg9MDsyNTY+aDtoKyspZ1toXT1oPj0yNTI/NjpoPj0yNDg/NTpoPj0yNDA/NDpoPj0yMjQ/MzpoPj0xOTI/MjoxO2dbMjU0XT1nWzI1NF09MTt2YXIgaT1mdW5jdGlvbihhKXt2YXIgYixjLGQsZixnLGg9YS5sZW5ndGgsaT0wO2ZvcihmPTA7aD5mO2YrKyljPWEuY2hhckNvZGVBdChmKSw1NTI5Nj09PSg2NDUxMiZjKSYmaD5mKzEmJihkPWEuY2hhckNvZGVBdChmKzEpLDU2MzIwPT09KDY0NTEyJmQpJiYoYz02NTUzNisoYy01NTI5Njw8MTApKyhkLTU2MzIwKSxmKyspKSxpKz0xMjg+Yz8xOjIwNDg+Yz8yOjY1NTM2PmM/Mzo0O2ZvcihiPWUudWludDhhcnJheT9uZXcgVWludDhBcnJheShpKTpuZXcgQXJyYXkoaSksZz0wLGY9MDtpPmc7ZisrKWM9YS5jaGFyQ29kZUF0KGYpLDU1Mjk2PT09KDY0NTEyJmMpJiZoPmYrMSYmKGQ9YS5jaGFyQ29kZUF0KGYrMSksNTYzMjA9PT0oNjQ1MTImZCkmJihjPTY1NTM2KyhjLTU1Mjk2PDwxMCkrKGQtNTYzMjApLGYrKykpLDEyOD5jP2JbZysrXT1jOjIwNDg+Yz8oYltnKytdPTE5MnxjPj4+NixiW2crK109MTI4fDYzJmMpOjY1NTM2PmM/KGJbZysrXT0yMjR8Yz4+PjEyLGJbZysrXT0xMjh8Yz4+PjYmNjMsYltnKytdPTEyOHw2MyZjKTooYltnKytdPTI0MHxjPj4+MTgsYltnKytdPTEyOHxjPj4+MTImNjMsYltnKytdPTEyOHxjPj4+NiY2MyxiW2crK109MTI4fDYzJmMpO3JldHVybiBifSxqPWZ1bmN0aW9uKGEsYil7dmFyIGM7Zm9yKGI9Ynx8YS5sZW5ndGgsYj5hLmxlbmd0aCYmKGI9YS5sZW5ndGgpLGM9Yi0xO2M+PTAmJjEyOD09PSgxOTImYVtjXSk7KWMtLTtyZXR1cm4gMD5jP2I6MD09PWM/YjpjK2dbYVtjXV0+Yj9jOmJ9LGs9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlLGYsaD1hLmxlbmd0aCxpPW5ldyBBcnJheSgyKmgpO2ZvcihjPTAsYj0wO2g+YjspaWYoZT1hW2IrK10sMTI4PmUpaVtjKytdPWU7ZWxzZSBpZihmPWdbZV0sZj40KWlbYysrXT02NTUzMyxiKz1mLTE7ZWxzZXtmb3IoZSY9Mj09PWY/MzE6Mz09PWY/MTU6NztmPjEmJmg+YjspZT1lPDw2fDYzJmFbYisrXSxmLS07Zj4xP2lbYysrXT02NTUzMzo2NTUzNj5lP2lbYysrXT1lOihlLT02NTUzNixpW2MrK109NTUyOTZ8ZT4+MTAmMTAyMyxpW2MrK109NTYzMjB8MTAyMyZlKX1yZXR1cm4gaS5sZW5ndGghPT1jJiYoaS5zdWJhcnJheT9pPWkuc3ViYXJyYXkoMCxjKTppLmxlbmd0aD1jKSxkLmFwcGx5RnJvbUNoYXJDb2RlKGkpfTtjLnV0ZjhlbmNvZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGUubm9kZWJ1ZmZlcj9mKGEsInV0Zi04Iik6aShhKX0sYy51dGY4ZGVjb2RlPWZ1bmN0aW9uKGEpe2lmKGUubm9kZWJ1ZmZlcilyZXR1cm4gZC50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIsYSkudG9TdHJpbmcoInV0Zi04Iik7YT1kLnRyYW5zZm9ybVRvKGUudWludDhhcnJheT8idWludDhhcnJheSI6ImFycmF5IixhKTtmb3IodmFyIGI9W10sYz0wLGY9YS5sZW5ndGgsZz02NTUzNjtmPmM7KXt2YXIgaD1qKGEsTWF0aC5taW4oYytnLGYpKTtiLnB1c2goZS51aW50OGFycmF5P2soYS5zdWJhcnJheShjLGgpKTprKGEuc2xpY2UoYyxoKSkpLGM9aH1yZXR1cm4gYi5qb2luKCIiKX19LHsiLi9ub2RlQnVmZmVyIjoxMSwiLi9zdXBwb3J0IjoxNywiLi91dGlscyI6MjF9XSwyMTpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEpe3JldHVybiBhfWZ1bmN0aW9uIGUoYSxiKXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoOysrYyliW2NdPTI1NSZhLmNoYXJDb2RlQXQoYyk7cmV0dXJuIGJ9ZnVuY3Rpb24gZihhKXt2YXIgYj02NTUzNixkPVtdLGU9YS5sZW5ndGgsZj1jLmdldFR5cGVPZihhKSxnPTAsaD0hMDt0cnl7c3dpdGNoKGYpe2Nhc2UidWludDhhcnJheSI6U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDApKTticmVhaztjYXNlIm5vZGVidWZmZXIiOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxqKDApKX19Y2F0Y2goaSl7aD0hMX1pZighaCl7Zm9yKHZhciBrPSIiLGw9MDtsPGEubGVuZ3RoO2wrKylrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGFbbF0pO3JldHVybiBrfWZvcig7ZT5nJiZiPjE7KXRyeXtkLnB1c2goImFycmF5Ij09PWZ8fCJub2RlYnVmZmVyIj09PWY/U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGEuc2xpY2UoZyxNYXRoLm1pbihnK2IsZSkpKTpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsYS5zdWJhcnJheShnLE1hdGgubWluKGcrYixlKSkpKSxnKz1ifWNhdGNoKGkpe2I9TWF0aC5mbG9vcihiLzIpfXJldHVybiBkLmpvaW4oIiIpfWZ1bmN0aW9uIGcoYSxiKXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyliW2NdPWFbY107cmV0dXJuIGJ9dmFyIGg9YSgiLi9zdXBwb3J0IiksaT1hKCIuL2NvbXByZXNzaW9ucyIpLGo9YSgiLi9ub2RlQnVmZmVyIik7Yy5zdHJpbmcyYmluYXJ5PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iIixjPTA7YzxhLmxlbmd0aDtjKyspYis9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmYS5jaGFyQ29kZUF0KGMpKTtyZXR1cm4gYn0sYy5hcnJheUJ1ZmZlcjJCbG9iPWZ1bmN0aW9uKGEsYil7Yy5jaGVja1N1cHBvcnQoImJsb2IiKSxiPWJ8fCJhcHBsaWNhdGlvbi96aXAiO3RyeXtyZXR1cm4gbmV3IEJsb2IoW2FdLHt0eXBlOmJ9KX1jYXRjaChkKXt0cnl7dmFyIGU9d2luZG93LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRlcnx8d2luZG93Lk1TQmxvYkJ1aWxkZXIsZj1uZXcgZTtyZXR1cm4gZi5hcHBlbmQoYSksZi5nZXRCbG9iKGIpfWNhdGNoKGQpe3Rocm93IG5ldyBFcnJvcigiQnVnIDogY2FuJ3QgY29uc3RydWN0IHRoZSBCbG9iLiIpfX19LGMuYXBwbHlGcm9tQ2hhckNvZGU9Zjt2YXIgaz17fTtrLnN0cmluZz17c3RyaW5nOmQsYXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSxuZXcgQXJyYXkoYS5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGsuc3RyaW5nLnVpbnQ4YXJyYXkoYSkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKGEpe3JldHVybiBlKGEsbmV3IFVpbnQ4QXJyYXkoYS5sZW5ndGgpKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihhKXtyZXR1cm4gZShhLGooYS5sZW5ndGgpKX19LGsuYXJyYXk9e3N0cmluZzpmLGFycmF5OmQsYXJyYXlidWZmZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGEpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGooYSl9fSxrLmFycmF5YnVmZmVyPXtzdHJpbmc6ZnVuY3Rpb24oYSl7cmV0dXJuIGYobmV3IFVpbnQ4QXJyYXkoYSkpfSxhcnJheTpmdW5jdGlvbihhKXtyZXR1cm4gZyhuZXcgVWludDhBcnJheShhKSxuZXcgQXJyYXkoYS5ieXRlTGVuZ3RoKSl9LGFycmF5YnVmZmVyOmQsdWludDhhcnJheTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGoobmV3IFVpbnQ4QXJyYXkoYSkpfX0say51aW50OGFycmF5PXtzdHJpbmc6ZixhcnJheTpmdW5jdGlvbihhKXtyZXR1cm4gZyhhLG5ldyBBcnJheShhLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihhKXtyZXR1cm4gYS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZCxub2RlYnVmZmVyOmZ1bmN0aW9uKGEpe3JldHVybiBqKGEpfX0say5ub2RlYnVmZmVyPXtzdHJpbmc6ZixhcnJheTpmdW5jdGlvbihhKXtyZXR1cm4gZyhhLG5ldyBBcnJheShhLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihhKXtyZXR1cm4gay5ub2RlYnVmZmVyLnVpbnQ4YXJyYXkoYSkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKGEpe3JldHVybiBnKGEsbmV3IFVpbnQ4QXJyYXkoYS5sZW5ndGgpKX0sbm9kZWJ1ZmZlcjpkfSxjLnRyYW5zZm9ybVRvPWZ1bmN0aW9uKGEsYil7aWYoYnx8KGI9IiIpLCFhKXJldHVybiBiO2MuY2hlY2tTdXBwb3J0KGEpO3ZhciBkPWMuZ2V0VHlwZU9mKGIpLGU9a1tkXVthXShiKTtyZXR1cm4gZX0sYy5nZXRUeXBlT2Y9ZnVuY3Rpb24oYSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhPyJzdHJpbmciOiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSk/ImFycmF5IjpoLm5vZGVidWZmZXImJmoudGVzdChhKT8ibm9kZWJ1ZmZlciI6aC51aW50OGFycmF5JiZhIGluc3RhbmNlb2YgVWludDhBcnJheT8idWludDhhcnJheSI6aC5hcnJheWJ1ZmZlciYmYSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyPyJhcnJheWJ1ZmZlciI6dm9pZCAwfSxjLmNoZWNrU3VwcG9ydD1mdW5jdGlvbihhKXt2YXIgYj1oW2EudG9Mb3dlckNhc2UoKV07aWYoIWIpdGhyb3cgbmV3IEVycm9yKGErIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlciIpfSxjLk1BWF9WQUxVRV8xNkJJVFM9NjU1MzUsYy5NQVhfVkFMVUVfMzJCSVRTPS0xLGMucHJldHR5PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD0iIjtmb3IoYz0wO2M8KGF8fCIiKS5sZW5ndGg7YysrKWI9YS5jaGFyQ29kZUF0KGMpLGQrPSJcXHgiKygxNj5iPyIwIjoiIikrYi50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gZH0sYy5maW5kQ29tcHJlc3Npb249ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGkpaWYoaS5oYXNPd25Qcm9wZXJ0eShiKSYmaVtiXS5tYWdpYz09PWEpcmV0dXJuIGlbYl07cmV0dXJuIG51bGx9LGMuaXNSZWdFeHA9ZnVuY3Rpb24oYSl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSl9fSx7Ii4vY29tcHJlc3Npb25zIjozLCIuL25vZGVCdWZmZXIiOjExLCIuL3N1cHBvcnQiOjE3fV0sMjI6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoYSxiKXt0aGlzLmZpbGVzPVtdLHRoaXMubG9hZE9wdGlvbnM9YixhJiZ0aGlzLmxvYWQoYSl9dmFyIGQ9YSgiLi9zdHJpbmdSZWFkZXIiKSxlPWEoIi4vbm9kZUJ1ZmZlclJlYWRlciIpLGY9YSgiLi91aW50OEFycmF5UmVhZGVyIiksZz1hKCIuL3V0aWxzIiksaD1hKCIuL3NpZ25hdHVyZSIpLGk9YSgiLi96aXBFbnRyeSIpLGo9YSgiLi9zdXBwb3J0Iiksaz1hKCIuL29iamVjdCIpO2MucHJvdG90eXBlPXtjaGVja1NpZ25hdHVyZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpO2lmKGIhPT1hKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCBvciBidWcgOiB1bmV4cGVjdGVkIHNpZ25hdHVyZSAoIitnLnByZXR0eShiKSsiLCBleHBlY3RlZCAiK2cucHJldHR5KGEpKyIpIil9LHJlYWRCbG9ja0VuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuZGlza051bWJlcj10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclJlY29yZHM9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5jZW50cmFsRGlyT2Zmc2V0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy56aXBDb21tZW50TGVuZ3RoPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy56aXBDb21tZW50PXRoaXMucmVhZGVyLnJlYWRTdHJpbmcodGhpcy56aXBDb21tZW50TGVuZ3RoKSx0aGlzLnppcENvbW1lbnQ9ay51dGY4ZGVjb2RlKHRoaXMuemlwQ29tbWVudCl9LHJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dGhpcy56aXA2NEVuZE9mQ2VudHJhbFNpemU9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLnZlcnNpb25NYWRlQnk9dGhpcy5yZWFkZXIucmVhZFN0cmluZygyKSx0aGlzLnZlcnNpb25OZWVkZWQ9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpck9mZnNldD10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YT17fTtmb3IodmFyIGEsYixjLGQ9dGhpcy56aXA2NEVuZE9mQ2VudHJhbFNpemUtNDQsZT0wO2Q+ZTspYT10aGlzLnJlYWRlci5yZWFkSW50KDIpLGI9dGhpcy5yZWFkZXIucmVhZEludCg0KSxjPXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoYiksdGhpcy56aXA2NEV4dGVuc2libGVEYXRhW2FdPXtpZDphLGxlbmd0aDpiLHZhbHVlOmN9fSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3I6ZnVuY3Rpb24oKXtpZih0aGlzLmRpc2tXaXRoWmlwNjRDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXI9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmRpc2tzQ291bnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmRpc2tzQ291bnQ+MSl0aHJvdyBuZXcgRXJyb3IoIk11bHRpLXZvbHVtZXMgemlwIGFyZSBub3Qgc3VwcG9ydGVkIil9LHJlYWRMb2NhbEZpbGVzOmZ1bmN0aW9uKCl7dmFyIGEsYjtmb3IoYT0wO2E8dGhpcy5maWxlcy5sZW5ndGg7YSsrKWI9dGhpcy5maWxlc1thXSx0aGlzLnJlYWRlci5zZXRJbmRleChiLmxvY2FsSGVhZGVyT2Zmc2V0KSx0aGlzLmNoZWNrU2lnbmF0dXJlKGguTE9DQUxfRklMRV9IRUFERVIpLGIucmVhZExvY2FsUGFydCh0aGlzLnJlYWRlciksYi5oYW5kbGVVVEY4KCksYi5wcm9jZXNzQXR0cmlidXRlcygpfSxyZWFkQ2VudHJhbERpcjpmdW5jdGlvbigpe3ZhciBhO2Zvcih0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLmNlbnRyYWxEaXJPZmZzZXQpO3RoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk9PT1oLkNFTlRSQUxfRklMRV9IRUFERVI7KWE9bmV3IGkoe3ppcDY0OnRoaXMuemlwNjR9LHRoaXMubG9hZE9wdGlvbnMpLGEucmVhZENlbnRyYWxQYXJ0KHRoaXMucmVhZGVyKSx0aGlzLmZpbGVzLnB1c2goYSl9LHJlYWRFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShoLkNFTlRSQUxfRElSRUNUT1JZX0VORCk7aWYoLTE9PT1hKXt2YXIgYj0hMDt0cnl7dGhpcy5yZWFkZXIuc2V0SW5kZXgoMCksdGhpcy5jaGVja1NpZ25hdHVyZShoLkxPQ0FMX0ZJTEVfSEVBREVSKSxiPSExfWNhdGNoKGMpe310aHJvdyBuZXcgRXJyb3IoYj8iQ2FuJ3QgZmluZCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgOiBpcyB0aGlzIGEgemlwIGZpbGUgPyBJZiBpdCBpcywgc2VlIGh0dHA6Ly9zdHVrLmdpdGh1Yi5pby9qc3ppcC9kb2N1bWVudGF0aW9uL2hvd3RvL3JlYWRfemlwLmh0bWwiOiJDb3JydXB0ZWQgemlwIDogY2FuJ3QgZmluZCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkiKX1pZih0aGlzLnJlYWRlci5zZXRJbmRleChhKSx0aGlzLmNoZWNrU2lnbmF0dXJlKGguQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlYWRCbG9ja0VuZE9mQ2VudHJhbCgpLHRoaXMuZGlza051bWJlcj09PWcuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD09PWcuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9PT1nLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclJlY29yZHM9PT1nLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclNpemU9PT1nLk1BWF9WQUxVRV8zMkJJVFN8fHRoaXMuY2VudHJhbERpck9mZnNldD09PWcuTUFYX1ZBTFVFXzMyQklUUyl7aWYodGhpcy56aXA2ND0hMCxhPXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKGguWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUiksLTE9PT1hKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IGNhbid0IGZpbmQgdGhlIFpJUDY0IGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSBsb2NhdG9yIik7dGhpcy5yZWFkZXIuc2V0SW5kZXgoYSksdGhpcy5jaGVja1NpZ25hdHVyZShoLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpLHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWxMb2NhdG9yKCksdGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyKSx0aGlzLmNoZWNrU2lnbmF0dXJlKGguWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsKCl9fSxwcmVwYXJlUmVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBiPWcuZ2V0VHlwZU9mKGEpO3RoaXMucmVhZGVyPSJzdHJpbmciIT09Ynx8ai51aW50OGFycmF5PyJub2RlYnVmZmVyIj09PWI/bmV3IGUoYSk6bmV3IGYoZy50cmFuc2Zvcm1UbygidWludDhhcnJheSIsYSkpOm5ldyBkKGEsdGhpcy5sb2FkT3B0aW9ucy5vcHRpbWl6ZWRCaW5hcnlTdHJpbmcpfSxsb2FkOmZ1bmN0aW9uKGEpe3RoaXMucHJlcGFyZVJlYWRlcihhKSx0aGlzLnJlYWRFbmRPZkNlbnRyYWwoKSx0aGlzLnJlYWRDZW50cmFsRGlyKCksdGhpcy5yZWFkTG9jYWxGaWxlcygpfX0sYi5leHBvcnRzPWN9LHsiLi9ub2RlQnVmZmVyUmVhZGVyIjoxMiwiLi9vYmplY3QiOjEzLCIuL3NpZ25hdHVyZSI6MTQsIi4vc3RyaW5nUmVhZGVyIjoxNSwiLi9zdXBwb3J0IjoxNywiLi91aW50OEFycmF5UmVhZGVyIjoxOCwiLi91dGlscyI6MjEsIi4vemlwRW50cnkiOjIzfV0sMjM6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoYSxiKXt0aGlzLm9wdGlvbnM9YSx0aGlzLmxvYWRPcHRpb25zPWJ9dmFyIGQ9YSgiLi9zdHJpbmdSZWFkZXIiKSxlPWEoIi4vdXRpbHMiKSxmPWEoIi4vY29tcHJlc3NlZE9iamVjdCIpLGc9YSgiLi9vYmplY3QiKSxoPTAsaT0zO2MucHJvdG90eXBlPXtpc0VuY3J5cHRlZDpmdW5jdGlvbigpe3JldHVybiAxPT09KDEmdGhpcy5iaXRGbGFnKX0sdXNlVVRGODpmdW5jdGlvbigpe3JldHVybiAyMDQ4PT09KDIwNDgmdGhpcy5iaXRGbGFnKX0scHJlcGFyZUNvbXByZXNzZWRDb250ZW50OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZD1hLmluZGV4O2Euc2V0SW5kZXgoYik7dmFyIGU9YS5yZWFkRGF0YShjKTtyZXR1cm4gYS5zZXRJbmRleChkKSxlfX0scHJlcGFyZUNvbnRlbnQ6ZnVuY3Rpb24oYSxiLGMsZCxmKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1lLnRyYW5zZm9ybVRvKGQudW5jb21wcmVzc0lucHV0VHlwZSx0aGlzLmdldENvbXByZXNzZWRDb250ZW50KCkpLGI9ZC51bmNvbXByZXNzKGEpO2lmKGIubGVuZ3RoIT09Zil0aHJvdyBuZXcgRXJyb3IoIkJ1ZyA6IHVuY29tcHJlc3NlZCBkYXRhIHNpemUgbWlzbWF0Y2giKTtyZXR1cm4gYn19LHJlYWRMb2NhbFBhcnQ6ZnVuY3Rpb24oYSl7dmFyIGIsYztpZihhLnNraXAoMjIpLHRoaXMuZmlsZU5hbWVMZW5ndGg9YS5yZWFkSW50KDIpLGM9YS5yZWFkSW50KDIpLHRoaXMuZmlsZU5hbWU9YS5yZWFkU3RyaW5nKHRoaXMuZmlsZU5hbWVMZW5ndGgpLGEuc2tpcChjKSwtMT09dGhpcy5jb21wcmVzc2VkU2l6ZXx8LTE9PXRoaXMudW5jb21wcmVzc2VkU2l6ZSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZyBvciBjb3JydXB0ZWQgemlwIDogZGlkbid0IGdldCBlbm91Z2ggaW5mb3JtYXRpb25zIGZyb20gdGhlIGNlbnRyYWwgZGlyZWN0b3J5IChjb21wcmVzc2VkU2l6ZSA9PSAtMSB8fCB1bmNvbXByZXNzZWRTaXplID09IC0xKSIpO2lmKGI9ZS5maW5kQ29tcHJlc3Npb24odGhpcy5jb21wcmVzc2lvbk1ldGhvZCksbnVsbD09PWIpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY29tcHJlc3Npb24gIitlLnByZXR0eSh0aGlzLmNvbXByZXNzaW9uTWV0aG9kKSsiIHVua25vd24gKGlubmVyIGZpbGUgOiAiK3RoaXMuZmlsZU5hbWUrIikiKTtpZih0aGlzLmRlY29tcHJlc3NlZD1uZXcgZix0aGlzLmRlY29tcHJlc3NlZC5jb21wcmVzc2VkU2l6ZT10aGlzLmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLnVuY29tcHJlc3NlZFNpemU9dGhpcy51bmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLmNyYzMyPXRoaXMuY3JjMzIsdGhpcy5kZWNvbXByZXNzZWQuY29tcHJlc3Npb25NZXRob2Q9dGhpcy5jb21wcmVzc2lvbk1ldGhvZCx0aGlzLmRlY29tcHJlc3NlZC5nZXRDb21wcmVzc2VkQ29udGVudD10aGlzLnByZXBhcmVDb21wcmVzc2VkQ29udGVudChhLGEuaW5kZXgsdGhpcy5jb21wcmVzc2VkU2l6ZSxiKSx0aGlzLmRlY29tcHJlc3NlZC5nZXRDb250ZW50PXRoaXMucHJlcGFyZUNvbnRlbnQoYSxhLmluZGV4LHRoaXMuY29tcHJlc3NlZFNpemUsYix0aGlzLnVuY29tcHJlc3NlZFNpemUpLHRoaXMubG9hZE9wdGlvbnMuY2hlY2tDUkMzMiYmKHRoaXMuZGVjb21wcmVzc2VkPWUudHJhbnNmb3JtVG8oInN0cmluZyIsdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29udGVudCgpKSxnLmNyYzMyKHRoaXMuZGVjb21wcmVzc2VkKSE9PXRoaXMuY3JjMzIpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IENSQzMyIG1pc21hdGNoIil9LHJlYWRDZW50cmFsUGFydDpmdW5jdGlvbihhKXtpZih0aGlzLnZlcnNpb25NYWRlQnk9YS5yZWFkSW50KDIpLHRoaXMudmVyc2lvbk5lZWRlZD1hLnJlYWRJbnQoMiksdGhpcy5iaXRGbGFnPWEucmVhZEludCgyKSx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPWEucmVhZFN0cmluZygyKSx0aGlzLmRhdGU9YS5yZWFkRGF0ZSgpLHRoaXMuY3JjMzI9YS5yZWFkSW50KDQpLHRoaXMuY29tcHJlc3NlZFNpemU9YS5yZWFkSW50KDQpLHRoaXMudW5jb21wcmVzc2VkU2l6ZT1hLnJlYWRJbnQoNCksdGhpcy5maWxlTmFtZUxlbmd0aD1hLnJlYWRJbnQoMiksdGhpcy5leHRyYUZpZWxkc0xlbmd0aD1hLnJlYWRJbnQoMiksdGhpcy5maWxlQ29tbWVudExlbmd0aD1hLnJlYWRJbnQoMiksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9YS5yZWFkSW50KDIpLHRoaXMuaW50ZXJuYWxGaWxlQXR0cmlidXRlcz1hLnJlYWRJbnQoMiksdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzPWEucmVhZEludCg0KSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PWEucmVhZEludCg0KSx0aGlzLmlzRW5jcnlwdGVkKCkpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0ZWQgemlwIGFyZSBub3Qgc3VwcG9ydGVkIik7dGhpcy5maWxlTmFtZT1hLnJlYWRTdHJpbmcodGhpcy5maWxlTmFtZUxlbmd0aCksdGhpcy5yZWFkRXh0cmFGaWVsZHMoYSksdGhpcy5wYXJzZVpJUDY0RXh0cmFGaWVsZChhKSx0aGlzLmZpbGVDb21tZW50PWEucmVhZFN0cmluZyh0aGlzLmZpbGVDb21tZW50TGVuZ3RoKX0scHJvY2Vzc0F0dHJpYnV0ZXM6ZnVuY3Rpb24oKXt0aGlzLnVuaXhQZXJtaXNzaW9ucz1udWxsLHRoaXMuZG9zUGVybWlzc2lvbnM9bnVsbDt2YXIgYT10aGlzLnZlcnNpb25NYWRlQnk+Pjg7dGhpcy5kaXI9MTYmdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzPyEwOiExLGE9PT1oJiYodGhpcy5kb3NQZXJtaXNzaW9ucz02MyZ0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMpLGE9PT1pJiYodGhpcy51bml4UGVybWlzc2lvbnM9dGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzPj4xNiY2NTUzNSksdGhpcy5kaXJ8fCIvIiE9PXRoaXMuZmlsZU5hbWUuc2xpY2UoLTEpfHwodGhpcy5kaXI9ITApfSxwYXJzZVpJUDY0RXh0cmFGaWVsZDpmdW5jdGlvbigpe2lmKHRoaXMuZXh0cmFGaWVsZHNbMV0pe3ZhciBhPW5ldyBkKHRoaXMuZXh0cmFGaWVsZHNbMV0udmFsdWUpO3RoaXMudW5jb21wcmVzc2VkU2l6ZT09PWUuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMudW5jb21wcmVzc2VkU2l6ZT1hLnJlYWRJbnQoOCkpLHRoaXMuY29tcHJlc3NlZFNpemU9PT1lLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmNvbXByZXNzZWRTaXplPWEucmVhZEludCg4KSksdGhpcy5sb2NhbEhlYWRlck9mZnNldD09PWUuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9YS5yZWFkSW50KDgpKSx0aGlzLmRpc2tOdW1iZXJTdGFydD09PWUuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMuZGlza051bWJlclN0YXJ0PWEucmVhZEludCg0KSl9fSxyZWFkRXh0cmFGaWVsZHM6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU9YS5pbmRleDtmb3IodGhpcy5leHRyYUZpZWxkcz10aGlzLmV4dHJhRmllbGRzfHx7fTthLmluZGV4PGUrdGhpcy5leHRyYUZpZWxkc0xlbmd0aDspYj1hLnJlYWRJbnQoMiksYz1hLnJlYWRJbnQoMiksZD1hLnJlYWRTdHJpbmcoYyksdGhpcy5leHRyYUZpZWxkc1tiXT17aWQ6YixsZW5ndGg6Yyx2YWx1ZTpkfX0saGFuZGxlVVRGODpmdW5jdGlvbigpe2lmKHRoaXMudXNlVVRGOCgpKXRoaXMuZmlsZU5hbWU9Zy51dGY4ZGVjb2RlKHRoaXMuZmlsZU5hbWUpLHRoaXMuZmlsZUNvbW1lbnQ9Zy51dGY4ZGVjb2RlKHRoaXMuZmlsZUNvbW1lbnQpO2Vsc2V7dmFyIGE9dGhpcy5maW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRoKCk7bnVsbCE9PWEmJih0aGlzLmZpbGVOYW1lPWEpO3ZhciBiPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudCgpO251bGwhPT1iJiYodGhpcy5maWxlQ29tbWVudD1iKX19LGZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGg6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmV4dHJhRmllbGRzWzI4Nzg5XTtpZihhKXt2YXIgYj1uZXcgZChhLnZhbHVlKTtyZXR1cm4gMSE9PWIucmVhZEludCgxKT9udWxsOmcuY3JjMzIodGhpcy5maWxlTmFtZSkhPT1iLnJlYWRJbnQoNCk/bnVsbDpnLnV0ZjhkZWNvZGUoYi5yZWFkU3RyaW5nKGEubGVuZ3RoLTUpKQp9cmV0dXJuIG51bGx9LGZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmV4dHJhRmllbGRzWzI1NDYxXTtpZihhKXt2YXIgYj1uZXcgZChhLnZhbHVlKTtyZXR1cm4gMSE9PWIucmVhZEludCgxKT9udWxsOmcuY3JjMzIodGhpcy5maWxlQ29tbWVudCkhPT1iLnJlYWRJbnQoNCk/bnVsbDpnLnV0ZjhkZWNvZGUoYi5yZWFkU3RyaW5nKGEubGVuZ3RoLTUpKX1yZXR1cm4gbnVsbH19LGIuZXhwb3J0cz1jfSx7Ii4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9vYmplY3QiOjEzLCIuL3N0cmluZ1JlYWRlciI6MTUsIi4vdXRpbHMiOjIxfV0sMjQ6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO3ZhciBjPWEoIi4vbGliL3V0aWxzL2NvbW1vbiIpLmFzc2lnbixkPWEoIi4vbGliL2RlZmxhdGUiKSxlPWEoIi4vbGliL2luZmxhdGUiKSxmPWEoIi4vbGliL3psaWIvY29uc3RhbnRzIiksZz17fTtjKGcsZCxlLGYpLGIuZXhwb3J0cz1nfSx7Ii4vbGliL2RlZmxhdGUiOjI1LCIuL2xpYi9pbmZsYXRlIjoyNiwiLi9saWIvdXRpbHMvY29tbW9uIjoyNywiLi9saWIvemxpYi9jb25zdGFudHMiOjMwfV0sMjU6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhLGIpe3ZhciBjPW5ldyBzKGIpO2lmKGMucHVzaChhLCEwKSxjLmVycil0aHJvdyBjLm1zZztyZXR1cm4gYy5yZXN1bHR9ZnVuY3Rpb24gZShhLGIpe3JldHVybiBiPWJ8fHt9LGIucmF3PSEwLGQoYSxiKX1mdW5jdGlvbiBmKGEsYil7cmV0dXJuIGI9Ynx8e30sYi5nemlwPSEwLGQoYSxiKX12YXIgZz1hKCIuL3psaWIvZGVmbGF0ZS5qcyIpLGg9YSgiLi91dGlscy9jb21tb24iKSxpPWEoIi4vdXRpbHMvc3RyaW5ncyIpLGo9YSgiLi96bGliL21lc3NhZ2VzIiksaz1hKCIuL3psaWIvenN0cmVhbSIpLGw9MCxtPTQsbj0wLG89MSxwPS0xLHE9MCxyPTgscz1mdW5jdGlvbihhKXt0aGlzLm9wdGlvbnM9aC5hc3NpZ24oe2xldmVsOnAsbWV0aG9kOnIsY2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MTUsbWVtTGV2ZWw6OCxzdHJhdGVneTpxLHRvOiIifSxhfHx7fSk7dmFyIGI9dGhpcy5vcHRpb25zO2IucmF3JiZiLndpbmRvd0JpdHM+MD9iLndpbmRvd0JpdHM9LWIud2luZG93Qml0czpiLmd6aXAmJmIud2luZG93Qml0cz4wJiZiLndpbmRvd0JpdHM8MTYmJihiLndpbmRvd0JpdHMrPTE2KSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBrLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgYz1nLmRlZmxhdGVJbml0Mih0aGlzLnN0cm0sYi5sZXZlbCxiLm1ldGhvZCxiLndpbmRvd0JpdHMsYi5tZW1MZXZlbCxiLnN0cmF0ZWd5KTtpZihjIT09bil0aHJvdyBuZXcgRXJyb3IoaltjXSk7Yi5oZWFkZXImJmcuZGVmbGF0ZVNldEhlYWRlcih0aGlzLnN0cm0sYi5oZWFkZXIpfTtzLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPXRoaXMuc3RybSxmPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtkPWI9PT1+fmI/YjpiPT09ITA/bTpsLGUuaW5wdXQ9InN0cmluZyI9PXR5cGVvZiBhP2kuc3RyaW5nMmJ1ZihhKTphLGUubmV4dF9pbj0wLGUuYXZhaWxfaW49ZS5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PWUuYXZhaWxfb3V0JiYoZS5vdXRwdXQ9bmV3IGguQnVmOChmKSxlLm5leHRfb3V0PTAsZS5hdmFpbF9vdXQ9ZiksYz1nLmRlZmxhdGUoZSxkKSxjIT09byYmYyE9PW4pcmV0dXJuIHRoaXMub25FbmQoYyksdGhpcy5lbmRlZD0hMCwhMTsoMD09PWUuYXZhaWxfb3V0fHwwPT09ZS5hdmFpbF9pbiYmZD09PW0pJiZ0aGlzLm9uRGF0YSgic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz9pLmJ1ZjJiaW5zdHJpbmcoaC5zaHJpbmtCdWYoZS5vdXRwdXQsZS5uZXh0X291dCkpOmguc2hyaW5rQnVmKGUub3V0cHV0LGUubmV4dF9vdXQpKX13aGlsZSgoZS5hdmFpbF9pbj4wfHwwPT09ZS5hdmFpbF9vdXQpJiZjIT09byk7cmV0dXJuIGQ9PT1tPyhjPWcuZGVmbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQoYyksdGhpcy5lbmRlZD0hMCxjPT09bik6ITB9LHMucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihhKXt0aGlzLmNodW5rcy5wdXNoKGEpfSxzLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihhKXthPT09biYmKHRoaXMucmVzdWx0PSJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMuY2h1bmtzLmpvaW4oIiIpOmguZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPWEsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sYy5EZWZsYXRlPXMsYy5kZWZsYXRlPWQsYy5kZWZsYXRlUmF3PWUsYy5nemlwPWZ9LHsiLi91dGlscy9jb21tb24iOjI3LCIuL3V0aWxzL3N0cmluZ3MiOjI4LCIuL3psaWIvZGVmbGF0ZS5qcyI6MzIsIi4vemxpYi9tZXNzYWdlcyI6MzcsIi4vemxpYi96c3RyZWFtIjozOX1dLDI2OltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGQoYSxiKXt2YXIgYz1uZXcgbShiKTtpZihjLnB1c2goYSwhMCksYy5lcnIpdGhyb3cgYy5tc2c7cmV0dXJuIGMucmVzdWx0fWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gYj1ifHx7fSxiLnJhdz0hMCxkKGEsYil9dmFyIGY9YSgiLi96bGliL2luZmxhdGUuanMiKSxnPWEoIi4vdXRpbHMvY29tbW9uIiksaD1hKCIuL3V0aWxzL3N0cmluZ3MiKSxpPWEoIi4vemxpYi9jb25zdGFudHMiKSxqPWEoIi4vemxpYi9tZXNzYWdlcyIpLGs9YSgiLi96bGliL3pzdHJlYW0iKSxsPWEoIi4vemxpYi9nemhlYWRlciIpLG09ZnVuY3Rpb24oYSl7dGhpcy5vcHRpb25zPWcuYXNzaWduKHtjaHVua1NpemU6MTYzODQsd2luZG93Qml0czowLHRvOiIifSxhfHx7fSk7dmFyIGI9dGhpcy5vcHRpb25zO2IucmF3JiZiLndpbmRvd0JpdHM+PTAmJmIud2luZG93Qml0czwxNiYmKGIud2luZG93Qml0cz0tYi53aW5kb3dCaXRzLDA9PT1iLndpbmRvd0JpdHMmJihiLndpbmRvd0JpdHM9LTE1KSksIShiLndpbmRvd0JpdHM+PTAmJmIud2luZG93Qml0czwxNil8fGEmJmEud2luZG93Qml0c3x8KGIud2luZG93Qml0cys9MzIpLGIud2luZG93Qml0cz4xNSYmYi53aW5kb3dCaXRzPDQ4JiYwPT09KDE1JmIud2luZG93Qml0cykmJihiLndpbmRvd0JpdHN8PTE1KSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBrLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgYz1mLmluZmxhdGVJbml0Mih0aGlzLnN0cm0sYi53aW5kb3dCaXRzKTtpZihjIT09aS5aX09LKXRocm93IG5ldyBFcnJvcihqW2NdKTt0aGlzLmhlYWRlcj1uZXcgbCxmLmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLHRoaXMuaGVhZGVyKX07bS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxqLGssbD10aGlzLnN0cm0sbT10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7ZD1iPT09fn5iP2I6Yj09PSEwP2kuWl9GSU5JU0g6aS5aX05PX0ZMVVNILGwuaW5wdXQ9InN0cmluZyI9PXR5cGVvZiBhP2guYmluc3RyaW5nMmJ1ZihhKTphLGwubmV4dF9pbj0wLGwuYXZhaWxfaW49bC5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PWwuYXZhaWxfb3V0JiYobC5vdXRwdXQ9bmV3IGcuQnVmOChtKSxsLm5leHRfb3V0PTAsbC5hdmFpbF9vdXQ9bSksYz1mLmluZmxhdGUobCxpLlpfTk9fRkxVU0gpLGMhPT1pLlpfU1RSRUFNX0VORCYmYyE9PWkuWl9PSylyZXR1cm4gdGhpcy5vbkVuZChjKSx0aGlzLmVuZGVkPSEwLCExO2wubmV4dF9vdXQmJigwPT09bC5hdmFpbF9vdXR8fGM9PT1pLlpfU1RSRUFNX0VORHx8MD09PWwuYXZhaWxfaW4mJmQ9PT1pLlpfRklOSVNIKSYmKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvPyhlPWgudXRmOGJvcmRlcihsLm91dHB1dCxsLm5leHRfb3V0KSxqPWwubmV4dF9vdXQtZSxrPWguYnVmMnN0cmluZyhsLm91dHB1dCxlKSxsLm5leHRfb3V0PWosbC5hdmFpbF9vdXQ9bS1qLGomJmcuYXJyYXlTZXQobC5vdXRwdXQsbC5vdXRwdXQsZSxqLDApLHRoaXMub25EYXRhKGspKTp0aGlzLm9uRGF0YShnLnNocmlua0J1ZihsLm91dHB1dCxsLm5leHRfb3V0KSkpfXdoaWxlKGwuYXZhaWxfaW4+MCYmYyE9PWkuWl9TVFJFQU1fRU5EKTtyZXR1cm4gYz09PWkuWl9TVFJFQU1fRU5EJiYoZD1pLlpfRklOSVNIKSxkPT09aS5aX0ZJTklTSD8oYz1mLmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKGMpLHRoaXMuZW5kZWQ9ITAsYz09PWkuWl9PSyk6ITB9LG0ucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihhKXt0aGlzLmNodW5rcy5wdXNoKGEpfSxtLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihhKXthPT09aS5aX09LJiYodGhpcy5yZXN1bHQ9InN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5jaHVua3Muam9pbigiIik6Zy5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKSksdGhpcy5jaHVua3M9W10sdGhpcy5lcnI9YSx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSxjLkluZmxhdGU9bSxjLmluZmxhdGU9ZCxjLmluZmxhdGVSYXc9ZSxjLnVuZ3ppcD1kfSx7Ii4vdXRpbHMvY29tbW9uIjoyNywiLi91dGlscy9zdHJpbmdzIjoyOCwiLi96bGliL2NvbnN0YW50cyI6MzAsIi4vemxpYi9nemhlYWRlciI6MzMsIi4vemxpYi9pbmZsYXRlLmpzIjozNSwiLi96bGliL21lc3NhZ2VzIjozNywiLi96bGliL3pzdHJlYW0iOjM5fV0sMjc6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5JiYidW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQxNkFycmF5JiYidW5kZWZpbmVkIiE9dHlwZW9mIEludDMyQXJyYXk7Yy5hc3NpZ249ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtiLmxlbmd0aDspe3ZhciBjPWIuc2hpZnQoKTtpZihjKXtpZigib2JqZWN0IiE9dHlwZW9mIGMpdGhyb3cgbmV3IFR5cGVFcnJvcihjKyJtdXN0IGJlIG5vbi1vYmplY3QiKTtmb3IodmFyIGQgaW4gYyljLmhhc093blByb3BlcnR5KGQpJiYoYVtkXT1jW2RdKX19cmV0dXJuIGF9LGMuc2hyaW5rQnVmPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEubGVuZ3RoPT09Yj9hOmEuc3ViYXJyYXk/YS5zdWJhcnJheSgwLGIpOihhLmxlbmd0aD1iLGEpfTt2YXIgZT17YXJyYXlTZXQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihiLnN1YmFycmF5JiZhLnN1YmFycmF5KXJldHVybiB2b2lkIGEuc2V0KGIuc3ViYXJyYXkoYyxjK2QpLGUpO2Zvcih2YXIgZj0wO2Q+ZjtmKyspYVtlK2ZdPWJbYytmXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGc7Zm9yKGQ9MCxiPTAsYz1hLmxlbmd0aDtjPmI7YisrKWQrPWFbYl0ubGVuZ3RoO2ZvcihnPW5ldyBVaW50OEFycmF5KGQpLGU9MCxiPTAsYz1hLmxlbmd0aDtjPmI7YisrKWY9YVtiXSxnLnNldChmLGUpLGUrPWYubGVuZ3RoO3JldHVybiBnfX0sZj17YXJyYXlTZXQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXtmb3IodmFyIGY9MDtkPmY7ZisrKWFbZStmXT1iW2MrZl19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oYSl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLGEpfX07Yy5zZXRUeXBlZD1mdW5jdGlvbihhKXthPyhjLkJ1Zjg9VWludDhBcnJheSxjLkJ1ZjE2PVVpbnQxNkFycmF5LGMuQnVmMzI9SW50MzJBcnJheSxjLmFzc2lnbihjLGUpKTooYy5CdWY4PUFycmF5LGMuQnVmMTY9QXJyYXksYy5CdWYzMj1BcnJheSxjLmFzc2lnbihjLGYpKX0sYy5zZXRUeXBlZChkKX0se31dLDI4OltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGQoYSxiKXtpZig2NTUzNz5iJiYoYS5zdWJhcnJheSYmZ3x8IWEuc3ViYXJyYXkmJmYpKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZS5zaHJpbmtCdWYoYSxiKSk7Zm9yKHZhciBjPSIiLGQ9MDtiPmQ7ZCsrKWMrPVN0cmluZy5mcm9tQ2hhckNvZGUoYVtkXSk7cmV0dXJuIGN9dmFyIGU9YSgiLi9jb21tb24iKSxmPSEwLGc9ITA7dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxbMF0pfWNhdGNoKGgpe2Y9ITF9dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgxKSl9Y2F0Y2goaCl7Zz0hMX1mb3IodmFyIGk9bmV3IGUuQnVmOCgyNTYpLGo9MDsyNTY+ajtqKyspaVtqXT1qPj0yNTI/NjpqPj0yNDg/NTpqPj0yNDA/NDpqPj0yMjQ/MzpqPj0xOTI/MjoxO2lbMjU0XT1pWzI1NF09MSxjLnN0cmluZzJidWY9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGYsZyxoPWEubGVuZ3RoLGk9MDtmb3IoZj0wO2g+ZjtmKyspYz1hLmNoYXJDb2RlQXQoZiksNTUyOTY9PT0oNjQ1MTImYykmJmg+ZisxJiYoZD1hLmNoYXJDb2RlQXQoZisxKSw1NjMyMD09PSg2NDUxMiZkKSYmKGM9NjU1MzYrKGMtNTUyOTY8PDEwKSsoZC01NjMyMCksZisrKSksaSs9MTI4PmM/MToyMDQ4PmM/Mjo2NTUzNj5jPzM6NDtmb3IoYj1uZXcgZS5CdWY4KGkpLGc9MCxmPTA7aT5nO2YrKyljPWEuY2hhckNvZGVBdChmKSw1NTI5Nj09PSg2NDUxMiZjKSYmaD5mKzEmJihkPWEuY2hhckNvZGVBdChmKzEpLDU2MzIwPT09KDY0NTEyJmQpJiYoYz02NTUzNisoYy01NTI5Njw8MTApKyhkLTU2MzIwKSxmKyspKSwxMjg+Yz9iW2crK109YzoyMDQ4PmM/KGJbZysrXT0xOTJ8Yz4+PjYsYltnKytdPTEyOHw2MyZjKTo2NTUzNj5jPyhiW2crK109MjI0fGM+Pj4xMixiW2crK109MTI4fGM+Pj42JjYzLGJbZysrXT0xMjh8NjMmYyk6KGJbZysrXT0yNDB8Yz4+PjE4LGJbZysrXT0xMjh8Yz4+PjEyJjYzLGJbZysrXT0xMjh8Yz4+PjYmNjMsYltnKytdPTEyOHw2MyZjKTtyZXR1cm4gYn0sYy5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBkKGEsYS5sZW5ndGgpfSxjLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPW5ldyBlLkJ1ZjgoYS5sZW5ndGgpLGM9MCxkPWIubGVuZ3RoO2Q+YztjKyspYltjXT1hLmNoYXJDb2RlQXQoYyk7cmV0dXJuIGJ9LGMuYnVmMnN0cmluZz1mdW5jdGlvbihhLGIpe3ZhciBjLGUsZixnLGg9Ynx8YS5sZW5ndGgsaj1uZXcgQXJyYXkoMipoKTtmb3IoZT0wLGM9MDtoPmM7KWlmKGY9YVtjKytdLDEyOD5mKWpbZSsrXT1mO2Vsc2UgaWYoZz1pW2ZdLGc+NClqW2UrK109NjU1MzMsYys9Zy0xO2Vsc2V7Zm9yKGYmPTI9PT1nPzMxOjM9PT1nPzE1Ojc7Zz4xJiZoPmM7KWY9Zjw8Nnw2MyZhW2MrK10sZy0tO2c+MT9qW2UrK109NjU1MzM6NjU1MzY+Zj9qW2UrK109ZjooZi09NjU1MzYsaltlKytdPTU1Mjk2fGY+PjEwJjEwMjMsaltlKytdPTU2MzIwfDEwMjMmZil9cmV0dXJuIGQoaixlKX0sYy51dGY4Ym9yZGVyPWZ1bmN0aW9uKGEsYil7dmFyIGM7Zm9yKGI9Ynx8YS5sZW5ndGgsYj5hLmxlbmd0aCYmKGI9YS5sZW5ndGgpLGM9Yi0xO2M+PTAmJjEyOD09PSgxOTImYVtjXSk7KWMtLTtyZXR1cm4gMD5jP2I6MD09PWM/YjpjK2lbYVtjXV0+Yj9jOmJ9fSx7Ii4vY29tbW9uIjoyN31dLDI5OltmdW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjKGEsYixjLGQpe2Zvcih2YXIgZT02NTUzNSZhfDAsZj1hPj4+MTYmNjU1MzV8MCxnPTA7MCE9PWM7KXtnPWM+MmUzPzJlMzpjLGMtPWc7ZG8gZT1lK2JbZCsrXXwwLGY9ZitlfDA7d2hpbGUoLS1nKTtlJT02NTUyMSxmJT02NTUyMX1yZXR1cm4gZXxmPDwxNnwwfWIuZXhwb3J0cz1jfSx7fV0sMzA6W2Z1bmN0aW9uKGEsYil7Yi5leHBvcnRzPXtaX05PX0ZMVVNIOjAsWl9QQVJUSUFMX0ZMVVNIOjEsWl9TWU5DX0ZMVVNIOjIsWl9GVUxMX0ZMVVNIOjMsWl9GSU5JU0g6NCxaX0JMT0NLOjUsWl9UUkVFUzo2LFpfT0s6MCxaX1NUUkVBTV9FTkQ6MSxaX05FRURfRElDVDoyLFpfRVJSTk86LTEsWl9TVFJFQU1fRVJST1I6LTIsWl9EQVRBX0VSUk9SOi0zLFpfQlVGX0VSUk9SOi01LFpfTk9fQ09NUFJFU1NJT046MCxaX0JFU1RfU1BFRUQ6MSxaX0JFU1RfQ09NUFJFU1NJT046OSxaX0RFRkFVTFRfQ09NUFJFU1NJT046LTEsWl9GSUxURVJFRDoxLFpfSFVGRk1BTl9PTkxZOjIsWl9STEU6MyxaX0ZJWEVEOjQsWl9ERUZBVUxUX1NUUkFURUdZOjAsWl9CSU5BUlk6MCxaX1RFWFQ6MSxaX1VOS05PV046MixaX0RFRkxBVEVEOjh9fSx7fV0sMzE6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoKXtmb3IodmFyIGEsYj1bXSxjPTA7MjU2PmM7YysrKXthPWM7Zm9yKHZhciBkPTA7OD5kO2QrKylhPTEmYT8zOTg4MjkyMzg0XmE+Pj4xOmE+Pj4xO2JbY109YX1yZXR1cm4gYn1mdW5jdGlvbiBkKGEsYixjLGQpe3ZhciBmPWUsZz1kK2M7YT0tMV5hO2Zvcih2YXIgaD1kO2c+aDtoKyspYT1hPj4+OF5mWzI1NSYoYV5iW2hdKV07cmV0dXJuLTFeYX12YXIgZT1jKCk7Yi5leHBvcnRzPWR9LHt9XSwzMjpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEsYil7cmV0dXJuIGEubXNnPUdbYl0sYn1mdW5jdGlvbiBlKGEpe3JldHVybihhPDwxKS0oYT40Pzk6MCl9ZnVuY3Rpb24gZihhKXtmb3IodmFyIGI9YS5sZW5ndGg7LS1iPj0wOylhW2JdPTB9ZnVuY3Rpb24gZyhhKXt2YXIgYj1hLnN0YXRlLGM9Yi5wZW5kaW5nO2M+YS5hdmFpbF9vdXQmJihjPWEuYXZhaWxfb3V0KSwwIT09YyYmKEMuYXJyYXlTZXQoYS5vdXRwdXQsYi5wZW5kaW5nX2J1ZixiLnBlbmRpbmdfb3V0LGMsYS5uZXh0X291dCksYS5uZXh0X291dCs9YyxiLnBlbmRpbmdfb3V0Kz1jLGEudG90YWxfb3V0Kz1jLGEuYXZhaWxfb3V0LT1jLGIucGVuZGluZy09YywwPT09Yi5wZW5kaW5nJiYoYi5wZW5kaW5nX291dD0wKSl9ZnVuY3Rpb24gaChhLGIpe0QuX3RyX2ZsdXNoX2Jsb2NrKGEsYS5ibG9ja19zdGFydD49MD9hLmJsb2NrX3N0YXJ0Oi0xLGEuc3Ryc3RhcnQtYS5ibG9ja19zdGFydCxiKSxhLmJsb2NrX3N0YXJ0PWEuc3Ryc3RhcnQsZyhhLnN0cm0pfWZ1bmN0aW9uIGkoYSxiKXthLnBlbmRpbmdfYnVmW2EucGVuZGluZysrXT1ifWZ1bmN0aW9uIGooYSxiKXthLnBlbmRpbmdfYnVmW2EucGVuZGluZysrXT1iPj4+OCYyNTUsYS5wZW5kaW5nX2J1ZlthLnBlbmRpbmcrK109MjU1JmJ9ZnVuY3Rpb24gayhhLGIsYyxkKXt2YXIgZT1hLmF2YWlsX2luO3JldHVybiBlPmQmJihlPWQpLDA9PT1lPzA6KGEuYXZhaWxfaW4tPWUsQy5hcnJheVNldChiLGEuaW5wdXQsYS5uZXh0X2luLGUsYyksMT09PWEuc3RhdGUud3JhcD9hLmFkbGVyPUUoYS5hZGxlcixiLGUsYyk6Mj09PWEuc3RhdGUud3JhcCYmKGEuYWRsZXI9RihhLmFkbGVyLGIsZSxjKSksYS5uZXh0X2luKz1lLGEudG90YWxfaW4rPWUsZSl9ZnVuY3Rpb24gbChhLGIpe3ZhciBjLGQsZT1hLm1heF9jaGFpbl9sZW5ndGgsZj1hLnN0cnN0YXJ0LGc9YS5wcmV2X2xlbmd0aCxoPWEubmljZV9tYXRjaCxpPWEuc3Ryc3RhcnQ+YS53X3NpemUtamI/YS5zdHJzdGFydC0oYS53X3NpemUtamIpOjAsaj1hLndpbmRvdyxrPWEud19tYXNrLGw9YS5wcmV2LG09YS5zdHJzdGFydCtpYixuPWpbZitnLTFdLG89altmK2ddO2EucHJldl9sZW5ndGg+PWEuZ29vZF9tYXRjaCYmKGU+Pj0yKSxoPmEubG9va2FoZWFkJiYoaD1hLmxvb2thaGVhZCk7ZG8gaWYoYz1iLGpbYytnXT09PW8mJmpbYytnLTFdPT09biYmaltjXT09PWpbZl0mJmpbKytjXT09PWpbZisxXSl7Zis9MixjKys7ZG87d2hpbGUoalsrK2ZdPT09alsrK2NdJiZqWysrZl09PT1qWysrY10mJmpbKytmXT09PWpbKytjXSYmalsrK2ZdPT09alsrK2NdJiZqWysrZl09PT1qWysrY10mJmpbKytmXT09PWpbKytjXSYmalsrK2ZdPT09alsrK2NdJiZqWysrZl09PT1qWysrY10mJm0+Zik7aWYoZD1pYi0obS1mKSxmPW0taWIsZD5nKXtpZihhLm1hdGNoX3N0YXJ0PWIsZz1kLGQ+PWgpYnJlYWs7bj1qW2YrZy0xXSxvPWpbZitnXX19d2hpbGUoKGI9bFtiJmtdKT5pJiYwIT09LS1lKTtyZXR1cm4gZzw9YS5sb29rYWhlYWQ/ZzphLmxvb2thaGVhZH1mdW5jdGlvbiBtKGEpe3ZhciBiLGMsZCxlLGYsZz1hLndfc2l6ZTtkb3tpZihlPWEud2luZG93X3NpemUtYS5sb29rYWhlYWQtYS5zdHJzdGFydCxhLnN0cnN0YXJ0Pj1nKyhnLWpiKSl7Qy5hcnJheVNldChhLndpbmRvdyxhLndpbmRvdyxnLGcsMCksYS5tYXRjaF9zdGFydC09ZyxhLnN0cnN0YXJ0LT1nLGEuYmxvY2tfc3RhcnQtPWcsYz1hLmhhc2hfc2l6ZSxiPWM7ZG8gZD1hLmhlYWRbLS1iXSxhLmhlYWRbYl09ZD49Zz9kLWc6MDt3aGlsZSgtLWMpO2M9ZyxiPWM7ZG8gZD1hLnByZXZbLS1iXSxhLnByZXZbYl09ZD49Zz9kLWc6MDt3aGlsZSgtLWMpO2UrPWd9aWYoMD09PWEuc3RybS5hdmFpbF9pbilicmVhaztpZihjPWsoYS5zdHJtLGEud2luZG93LGEuc3Ryc3RhcnQrYS5sb29rYWhlYWQsZSksYS5sb29rYWhlYWQrPWMsYS5sb29rYWhlYWQrYS5pbnNlcnQ+PWhiKWZvcihmPWEuc3Ryc3RhcnQtYS5pbnNlcnQsYS5pbnNfaD1hLndpbmRvd1tmXSxhLmluc19oPShhLmluc19oPDxhLmhhc2hfc2hpZnReYS53aW5kb3dbZisxXSkmYS5oYXNoX21hc2s7YS5pbnNlcnQmJihhLmluc19oPShhLmluc19oPDxhLmhhc2hfc2hpZnReYS53aW5kb3dbZitoYi0xXSkmYS5oYXNoX21hc2ssYS5wcmV2W2YmYS53X21hc2tdPWEuaGVhZFthLmluc19oXSxhLmhlYWRbYS5pbnNfaF09ZixmKyssYS5pbnNlcnQtLSwhKGEubG9va2FoZWFkK2EuaW5zZXJ0PGhiKSk7KTt9d2hpbGUoYS5sb29rYWhlYWQ8amImJjAhPT1hLnN0cm0uYXZhaWxfaW4pfWZ1bmN0aW9uIG4oYSxiKXt2YXIgYz02NTUzNTtmb3IoYz5hLnBlbmRpbmdfYnVmX3NpemUtNSYmKGM9YS5wZW5kaW5nX2J1Zl9zaXplLTUpOzspe2lmKGEubG9va2FoZWFkPD0xKXtpZihtKGEpLDA9PT1hLmxvb2thaGVhZCYmYj09PUgpcmV0dXJuIHNiO2lmKDA9PT1hLmxvb2thaGVhZClicmVha31hLnN0cnN0YXJ0Kz1hLmxvb2thaGVhZCxhLmxvb2thaGVhZD0wO3ZhciBkPWEuYmxvY2tfc3RhcnQrYztpZigoMD09PWEuc3Ryc3RhcnR8fGEuc3Ryc3RhcnQ+PWQpJiYoYS5sb29rYWhlYWQ9YS5zdHJzdGFydC1kLGEuc3Ryc3RhcnQ9ZCxoKGEsITEpLDA9PT1hLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gc2I7aWYoYS5zdHJzdGFydC1hLmJsb2NrX3N0YXJ0Pj1hLndfc2l6ZS1qYiYmKGgoYSwhMSksMD09PWEuc3RybS5hdmFpbF9vdXQpKXJldHVybiBzYn1yZXR1cm4gYS5pbnNlcnQ9MCxiPT09Sz8oaChhLCEwKSwwPT09YS5zdHJtLmF2YWlsX291dD91Yjp2Yik6YS5zdHJzdGFydD5hLmJsb2NrX3N0YXJ0JiYoaChhLCExKSwwPT09YS5zdHJtLmF2YWlsX291dCk/c2I6c2J9ZnVuY3Rpb24gbyhhLGIpe2Zvcih2YXIgYyxkOzspe2lmKGEubG9va2FoZWFkPGpiKXtpZihtKGEpLGEubG9va2FoZWFkPGpiJiZiPT09SClyZXR1cm4gc2I7aWYoMD09PWEubG9va2FoZWFkKWJyZWFrfWlmKGM9MCxhLmxvb2thaGVhZD49aGImJihhLmluc19oPShhLmluc19oPDxhLmhhc2hfc2hpZnReYS53aW5kb3dbYS5zdHJzdGFydCtoYi0xXSkmYS5oYXNoX21hc2ssYz1hLnByZXZbYS5zdHJzdGFydCZhLndfbWFza109YS5oZWFkW2EuaW5zX2hdLGEuaGVhZFthLmluc19oXT1hLnN0cnN0YXJ0KSwwIT09YyYmYS5zdHJzdGFydC1jPD1hLndfc2l6ZS1qYiYmKGEubWF0Y2hfbGVuZ3RoPWwoYSxjKSksYS5tYXRjaF9sZW5ndGg+PWhiKWlmKGQ9RC5fdHJfdGFsbHkoYSxhLnN0cnN0YXJ0LWEubWF0Y2hfc3RhcnQsYS5tYXRjaF9sZW5ndGgtaGIpLGEubG9va2FoZWFkLT1hLm1hdGNoX2xlbmd0aCxhLm1hdGNoX2xlbmd0aDw9YS5tYXhfbGF6eV9tYXRjaCYmYS5sb29rYWhlYWQ+PWhiKXthLm1hdGNoX2xlbmd0aC0tO2RvIGEuc3Ryc3RhcnQrKyxhLmluc19oPShhLmluc19oPDxhLmhhc2hfc2hpZnReYS53aW5kb3dbYS5zdHJzdGFydCtoYi0xXSkmYS5oYXNoX21hc2ssYz1hLnByZXZbYS5zdHJzdGFydCZhLndfbWFza109YS5oZWFkW2EuaW5zX2hdLGEuaGVhZFthLmluc19oXT1hLnN0cnN0YXJ0O3doaWxlKDAhPT0tLWEubWF0Y2hfbGVuZ3RoKTthLnN0cnN0YXJ0Kyt9ZWxzZSBhLnN0cnN0YXJ0Kz1hLm1hdGNoX2xlbmd0aCxhLm1hdGNoX2xlbmd0aD0wLGEuaW5zX2g9YS53aW5kb3dbYS5zdHJzdGFydF0sYS5pbnNfaD0oYS5pbnNfaDw8YS5oYXNoX3NoaWZ0XmEud2luZG93W2Euc3Ryc3RhcnQrMV0pJmEuaGFzaF9tYXNrO2Vsc2UgZD1ELl90cl90YWxseShhLDAsYS53aW5kb3dbYS5zdHJzdGFydF0pLGEubG9va2FoZWFkLS0sYS5zdHJzdGFydCsrO2lmKGQmJihoKGEsITEpLDA9PT1hLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gc2J9cmV0dXJuIGEuaW5zZXJ0PWEuc3Ryc3RhcnQ8aGItMT9hLnN0cnN0YXJ0OmhiLTEsYj09PUs/KGgoYSwhMCksMD09PWEuc3RybS5hdmFpbF9vdXQ/dWI6dmIpOmEubGFzdF9saXQmJihoKGEsITEpLDA9PT1hLnN0cm0uYXZhaWxfb3V0KT9zYjp0Yn1mdW5jdGlvbiBwKGEsYil7Zm9yKHZhciBjLGQsZTs7KXtpZihhLmxvb2thaGVhZDxqYil7aWYobShhKSxhLmxvb2thaGVhZDxqYiYmYj09PUgpcmV0dXJuIHNiO2lmKDA9PT1hLmxvb2thaGVhZClicmVha31pZihjPTAsYS5sb29rYWhlYWQ+PWhiJiYoYS5pbnNfaD0oYS5pbnNfaDw8YS5oYXNoX3NoaWZ0XmEud2luZG93W2Euc3Ryc3RhcnQraGItMV0pJmEuaGFzaF9tYXNrLGM9YS5wcmV2W2Euc3Ryc3RhcnQmYS53X21hc2tdPWEuaGVhZFthLmluc19oXSxhLmhlYWRbYS5pbnNfaF09YS5zdHJzdGFydCksYS5wcmV2X2xlbmd0aD1hLm1hdGNoX2xlbmd0aCxhLnByZXZfbWF0Y2g9YS5tYXRjaF9zdGFydCxhLm1hdGNoX2xlbmd0aD1oYi0xLDAhPT1jJiZhLnByZXZfbGVuZ3RoPGEubWF4X2xhenlfbWF0Y2gmJmEuc3Ryc3RhcnQtYzw9YS53X3NpemUtamImJihhLm1hdGNoX2xlbmd0aD1sKGEsYyksYS5tYXRjaF9sZW5ndGg8PTUmJihhLnN0cmF0ZWd5PT09U3x8YS5tYXRjaF9sZW5ndGg9PT1oYiYmYS5zdHJzdGFydC1hLm1hdGNoX3N0YXJ0PjQwOTYpJiYoYS5tYXRjaF9sZW5ndGg9aGItMSkpLGEucHJldl9sZW5ndGg+PWhiJiZhLm1hdGNoX2xlbmd0aDw9YS5wcmV2X2xlbmd0aCl7ZT1hLnN0cnN0YXJ0K2EubG9va2FoZWFkLWhiLGQ9RC5fdHJfdGFsbHkoYSxhLnN0cnN0YXJ0LTEtYS5wcmV2X21hdGNoLGEucHJldl9sZW5ndGgtaGIpLGEubG9va2FoZWFkLT1hLnByZXZfbGVuZ3RoLTEsYS5wcmV2X2xlbmd0aC09MjtkbysrYS5zdHJzdGFydDw9ZSYmKGEuaW5zX2g9KGEuaW5zX2g8PGEuaGFzaF9zaGlmdF5hLndpbmRvd1thLnN0cnN0YXJ0K2hiLTFdKSZhLmhhc2hfbWFzayxjPWEucHJldlthLnN0cnN0YXJ0JmEud19tYXNrXT1hLmhlYWRbYS5pbnNfaF0sYS5oZWFkW2EuaW5zX2hdPWEuc3Ryc3RhcnQpO3doaWxlKDAhPT0tLWEucHJldl9sZW5ndGgpO2lmKGEubWF0Y2hfYXZhaWxhYmxlPTAsYS5tYXRjaF9sZW5ndGg9aGItMSxhLnN0cnN0YXJ0KyssZCYmKGgoYSwhMSksMD09PWEuc3RybS5hdmFpbF9vdXQpKXJldHVybiBzYn1lbHNlIGlmKGEubWF0Y2hfYXZhaWxhYmxlKXtpZihkPUQuX3RyX3RhbGx5KGEsMCxhLndpbmRvd1thLnN0cnN0YXJ0LTFdKSxkJiZoKGEsITEpLGEuc3Ryc3RhcnQrKyxhLmxvb2thaGVhZC0tLDA9PT1hLnN0cm0uYXZhaWxfb3V0KXJldHVybiBzYn1lbHNlIGEubWF0Y2hfYXZhaWxhYmxlPTEsYS5zdHJzdGFydCsrLGEubG9va2FoZWFkLS19cmV0dXJuIGEubWF0Y2hfYXZhaWxhYmxlJiYoZD1ELl90cl90YWxseShhLDAsYS53aW5kb3dbYS5zdHJzdGFydC0xXSksYS5tYXRjaF9hdmFpbGFibGU9MCksYS5pbnNlcnQ9YS5zdHJzdGFydDxoYi0xP2Euc3Ryc3RhcnQ6aGItMSxiPT09Sz8oaChhLCEwKSwwPT09YS5zdHJtLmF2YWlsX291dD91Yjp2Yik6YS5sYXN0X2xpdCYmKGgoYSwhMSksMD09PWEuc3RybS5hdmFpbF9vdXQpP3NiOnRifWZ1bmN0aW9uIHEoYSxiKXtmb3IodmFyIGMsZCxlLGYsZz1hLndpbmRvdzs7KXtpZihhLmxvb2thaGVhZDw9aWIpe2lmKG0oYSksYS5sb29rYWhlYWQ8PWliJiZiPT09SClyZXR1cm4gc2I7aWYoMD09PWEubG9va2FoZWFkKWJyZWFrfWlmKGEubWF0Y2hfbGVuZ3RoPTAsYS5sb29rYWhlYWQ+PWhiJiZhLnN0cnN0YXJ0PjAmJihlPWEuc3Ryc3RhcnQtMSxkPWdbZV0sZD09PWdbKytlXSYmZD09PWdbKytlXSYmZD09PWdbKytlXSkpe2Y9YS5zdHJzdGFydCtpYjtkbzt3aGlsZShkPT09Z1srK2VdJiZkPT09Z1srK2VdJiZkPT09Z1srK2VdJiZkPT09Z1srK2VdJiZkPT09Z1srK2VdJiZkPT09Z1srK2VdJiZkPT09Z1srK2VdJiZkPT09Z1srK2VdJiZmPmUpO2EubWF0Y2hfbGVuZ3RoPWliLShmLWUpLGEubWF0Y2hfbGVuZ3RoPmEubG9va2FoZWFkJiYoYS5tYXRjaF9sZW5ndGg9YS5sb29rYWhlYWQpfWlmKGEubWF0Y2hfbGVuZ3RoPj1oYj8oYz1ELl90cl90YWxseShhLDEsYS5tYXRjaF9sZW5ndGgtaGIpLGEubG9va2FoZWFkLT1hLm1hdGNoX2xlbmd0aCxhLnN0cnN0YXJ0Kz1hLm1hdGNoX2xlbmd0aCxhLm1hdGNoX2xlbmd0aD0wKTooYz1ELl90cl90YWxseShhLDAsYS53aW5kb3dbYS5zdHJzdGFydF0pLGEubG9va2FoZWFkLS0sYS5zdHJzdGFydCsrKSxjJiYoaChhLCExKSwwPT09YS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIHNifXJldHVybiBhLmluc2VydD0wLGI9PT1LPyhoKGEsITApLDA9PT1hLnN0cm0uYXZhaWxfb3V0P3ViOnZiKTphLmxhc3RfbGl0JiYoaChhLCExKSwwPT09YS5zdHJtLmF2YWlsX291dCk/c2I6dGJ9ZnVuY3Rpb24gcihhLGIpe2Zvcih2YXIgYzs7KXtpZigwPT09YS5sb29rYWhlYWQmJihtKGEpLDA9PT1hLmxvb2thaGVhZCkpe2lmKGI9PT1IKXJldHVybiBzYjticmVha31pZihhLm1hdGNoX2xlbmd0aD0wLGM9RC5fdHJfdGFsbHkoYSwwLGEud2luZG93W2Euc3Ryc3RhcnRdKSxhLmxvb2thaGVhZC0tLGEuc3Ryc3RhcnQrKyxjJiYoaChhLCExKSwwPT09YS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIHNifXJldHVybiBhLmluc2VydD0wLGI9PT1LPyhoKGEsITApLDA9PT1hLnN0cm0uYXZhaWxfb3V0P3ViOnZiKTphLmxhc3RfbGl0JiYoaChhLCExKSwwPT09YS5zdHJtLmF2YWlsX291dCk/c2I6dGJ9ZnVuY3Rpb24gcyhhKXthLndpbmRvd19zaXplPTIqYS53X3NpemUsZihhLmhlYWQpLGEubWF4X2xhenlfbWF0Y2g9QlthLmxldmVsXS5tYXhfbGF6eSxhLmdvb2RfbWF0Y2g9QlthLmxldmVsXS5nb29kX2xlbmd0aCxhLm5pY2VfbWF0Y2g9QlthLmxldmVsXS5uaWNlX2xlbmd0aCxhLm1heF9jaGFpbl9sZW5ndGg9QlthLmxldmVsXS5tYXhfY2hhaW4sYS5zdHJzdGFydD0wLGEuYmxvY2tfc3RhcnQ9MCxhLmxvb2thaGVhZD0wLGEuaW5zZXJ0PTAsYS5tYXRjaF9sZW5ndGg9YS5wcmV2X2xlbmd0aD1oYi0xLGEubWF0Y2hfYXZhaWxhYmxlPTAsYS5pbnNfaD0wfWZ1bmN0aW9uIHQoKXt0aGlzLnN0cm09bnVsbCx0aGlzLnN0YXR1cz0wLHRoaXMucGVuZGluZ19idWY9bnVsbCx0aGlzLnBlbmRpbmdfYnVmX3NpemU9MCx0aGlzLnBlbmRpbmdfb3V0PTAsdGhpcy5wZW5kaW5nPTAsdGhpcy53cmFwPTAsdGhpcy5nemhlYWQ9bnVsbCx0aGlzLmd6aW5kZXg9MCx0aGlzLm1ldGhvZD1ZLHRoaXMubGFzdF9mbHVzaD0tMSx0aGlzLndfc2l6ZT0wLHRoaXMud19iaXRzPTAsdGhpcy53X21hc2s9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMud2luZG93X3NpemU9MCx0aGlzLnByZXY9bnVsbCx0aGlzLmhlYWQ9bnVsbCx0aGlzLmluc19oPTAsdGhpcy5oYXNoX3NpemU9MCx0aGlzLmhhc2hfYml0cz0wLHRoaXMuaGFzaF9tYXNrPTAsdGhpcy5oYXNoX3NoaWZ0PTAsdGhpcy5ibG9ja19zdGFydD0wLHRoaXMubWF0Y2hfbGVuZ3RoPTAsdGhpcy5wcmV2X21hdGNoPTAsdGhpcy5tYXRjaF9hdmFpbGFibGU9MCx0aGlzLnN0cnN0YXJ0PTAsdGhpcy5tYXRjaF9zdGFydD0wLHRoaXMubG9va2FoZWFkPTAsdGhpcy5wcmV2X2xlbmd0aD0wLHRoaXMubWF4X2NoYWluX2xlbmd0aD0wLHRoaXMubWF4X2xhenlfbWF0Y2g9MCx0aGlzLmxldmVsPTAsdGhpcy5zdHJhdGVneT0wLHRoaXMuZ29vZF9tYXRjaD0wLHRoaXMubmljZV9tYXRjaD0wLHRoaXMuZHluX2x0cmVlPW5ldyBDLkJ1ZjE2KDIqZmIpLHRoaXMuZHluX2R0cmVlPW5ldyBDLkJ1ZjE2KDIqKDIqZGIrMSkpLHRoaXMuYmxfdHJlZT1uZXcgQy5CdWYxNigyKigyKmViKzEpKSxmKHRoaXMuZHluX2x0cmVlKSxmKHRoaXMuZHluX2R0cmVlKSxmKHRoaXMuYmxfdHJlZSksdGhpcy5sX2Rlc2M9bnVsbCx0aGlzLmRfZGVzYz1udWxsLHRoaXMuYmxfZGVzYz1udWxsLHRoaXMuYmxfY291bnQ9bmV3IEMuQnVmMTYoZ2IrMSksdGhpcy5oZWFwPW5ldyBDLkJ1ZjE2KDIqY2IrMSksZih0aGlzLmhlYXApLHRoaXMuaGVhcF9sZW49MCx0aGlzLmhlYXBfbWF4PTAsdGhpcy5kZXB0aD1uZXcgQy5CdWYxNigyKmNiKzEpLGYodGhpcy5kZXB0aCksdGhpcy5sX2J1Zj0wLHRoaXMubGl0X2J1ZnNpemU9MCx0aGlzLmxhc3RfbGl0PTAsdGhpcy5kX2J1Zj0wLHRoaXMub3B0X2xlbj0wLHRoaXMuc3RhdGljX2xlbj0wLHRoaXMubWF0Y2hlcz0wLHRoaXMuaW5zZXJ0PTAsdGhpcy5iaV9idWY9MCx0aGlzLmJpX3ZhbGlkPTB9ZnVuY3Rpb24gdShhKXt2YXIgYjtyZXR1cm4gYSYmYS5zdGF0ZT8oYS50b3RhbF9pbj1hLnRvdGFsX291dD0wLGEuZGF0YV90eXBlPVgsYj1hLnN0YXRlLGIucGVuZGluZz0wLGIucGVuZGluZ19vdXQ9MCxiLndyYXA8MCYmKGIud3JhcD0tYi53cmFwKSxiLnN0YXR1cz1iLndyYXA/bGI6cWIsYS5hZGxlcj0yPT09Yi53cmFwPzA6MSxiLmxhc3RfZmx1c2g9SCxELl90cl9pbml0KGIpLE0pOmQoYSxPKX1mdW5jdGlvbiB2KGEpe3ZhciBiPXUoYSk7cmV0dXJuIGI9PT1NJiZzKGEuc3RhdGUpLGJ9ZnVuY3Rpb24gdyhhLGIpe3JldHVybiBhJiZhLnN0YXRlPzIhPT1hLnN0YXRlLndyYXA/TzooYS5zdGF0ZS5nemhlYWQ9YixNKTpPfWZ1bmN0aW9uIHgoYSxiLGMsZSxmLGcpe2lmKCFhKXJldHVybiBPO3ZhciBoPTE7aWYoYj09PVImJihiPTYpLDA+ZT8oaD0wLGU9LWUpOmU+MTUmJihoPTIsZS09MTYpLDE+Znx8Zj5afHxjIT09WXx8OD5lfHxlPjE1fHwwPmJ8fGI+OXx8MD5nfHxnPlYpcmV0dXJuIGQoYSxPKTs4PT09ZSYmKGU9OSk7dmFyIGk9bmV3IHQ7cmV0dXJuIGEuc3RhdGU9aSxpLnN0cm09YSxpLndyYXA9aCxpLmd6aGVhZD1udWxsLGkud19iaXRzPWUsaS53X3NpemU9MTw8aS53X2JpdHMsaS53X21hc2s9aS53X3NpemUtMSxpLmhhc2hfYml0cz1mKzcsaS5oYXNoX3NpemU9MTw8aS5oYXNoX2JpdHMsaS5oYXNoX21hc2s9aS5oYXNoX3NpemUtMSxpLmhhc2hfc2hpZnQ9fn4oKGkuaGFzaF9iaXRzK2hiLTEpL2hiKSxpLndpbmRvdz1uZXcgQy5CdWY4KDIqaS53X3NpemUpLGkuaGVhZD1uZXcgQy5CdWYxNihpLmhhc2hfc2l6ZSksaS5wcmV2PW5ldyBDLkJ1ZjE2KGkud19zaXplKSxpLmxpdF9idWZzaXplPTE8PGYrNixpLnBlbmRpbmdfYnVmX3NpemU9NCppLmxpdF9idWZzaXplLGkucGVuZGluZ19idWY9bmV3IEMuQnVmOChpLnBlbmRpbmdfYnVmX3NpemUpLGkuZF9idWY9aS5saXRfYnVmc2l6ZT4+MSxpLmxfYnVmPTMqaS5saXRfYnVmc2l6ZSxpLmxldmVsPWIsaS5zdHJhdGVneT1nLGkubWV0aG9kPWMsdihhKX1mdW5jdGlvbiB5KGEsYil7cmV0dXJuIHgoYSxiLFksJCxfLFcpfWZ1bmN0aW9uIHooYSxiKXt2YXIgYyxoLGssbDtpZighYXx8IWEuc3RhdGV8fGI+THx8MD5iKXJldHVybiBhP2QoYSxPKTpPO2lmKGg9YS5zdGF0ZSwhYS5vdXRwdXR8fCFhLmlucHV0JiYwIT09YS5hdmFpbF9pbnx8aC5zdGF0dXM9PT1yYiYmYiE9PUspcmV0dXJuIGQoYSwwPT09YS5hdmFpbF9vdXQ/UTpPKTtpZihoLnN0cm09YSxjPWgubGFzdF9mbHVzaCxoLmxhc3RfZmx1c2g9YixoLnN0YXR1cz09PWxiKWlmKDI9PT1oLndyYXApYS5hZGxlcj0wLGkoaCwzMSksaShoLDEzOSksaShoLDgpLGguZ3poZWFkPyhpKGgsKGguZ3poZWFkLnRleHQ/MTowKSsoaC5nemhlYWQuaGNyYz8yOjApKyhoLmd6aGVhZC5leHRyYT80OjApKyhoLmd6aGVhZC5uYW1lPzg6MCkrKGguZ3poZWFkLmNvbW1lbnQ/MTY6MCkpLGkoaCwyNTUmaC5nemhlYWQudGltZSksaShoLGguZ3poZWFkLnRpbWU+PjgmMjU1KSxpKGgsaC5nemhlYWQudGltZT4+MTYmMjU1KSxpKGgsaC5nemhlYWQudGltZT4+MjQmMjU1KSxpKGgsOT09PWgubGV2ZWw/MjpoLnN0cmF0ZWd5Pj1UfHxoLmxldmVsPDI/NDowKSxpKGgsMjU1JmguZ3poZWFkLm9zKSxoLmd6aGVhZC5leHRyYSYmaC5nemhlYWQuZXh0cmEubGVuZ3RoJiYoaShoLDI1NSZoLmd6aGVhZC5leHRyYS5sZW5ndGgpLGkoaCxoLmd6aGVhZC5leHRyYS5sZW5ndGg+PjgmMjU1KSksaC5nemhlYWQuaGNyYyYmKGEuYWRsZXI9RihhLmFkbGVyLGgucGVuZGluZ19idWYsaC5wZW5kaW5nLDApKSxoLmd6aW5kZXg9MCxoLnN0YXR1cz1tYik6KGkoaCwwKSxpKGgsMCksaShoLDApLGkoaCwwKSxpKGgsMCksaShoLDk9PT1oLmxldmVsPzI6aC5zdHJhdGVneT49VHx8aC5sZXZlbDwyPzQ6MCksaShoLHdiKSxoLnN0YXR1cz1xYik7ZWxzZXt2YXIgbT1ZKyhoLndfYml0cy04PDw0KTw8OCxuPS0xO249aC5zdHJhdGVneT49VHx8aC5sZXZlbDwyPzA6aC5sZXZlbDw2PzE6Nj09PWgubGV2ZWw/MjozLG18PW48PDYsMCE9PWguc3Ryc3RhcnQmJihtfD1rYiksbSs9MzEtbSUzMSxoLnN0YXR1cz1xYixqKGgsbSksMCE9PWguc3Ryc3RhcnQmJihqKGgsYS5hZGxlcj4+PjE2KSxqKGgsNjU1MzUmYS5hZGxlcikpLGEuYWRsZXI9MX1pZihoLnN0YXR1cz09PW1iKWlmKGguZ3poZWFkLmV4dHJhKXtmb3Ioaz1oLnBlbmRpbmc7aC5nemluZGV4PCg2NTUzNSZoLmd6aGVhZC5leHRyYS5sZW5ndGgpJiYoaC5wZW5kaW5nIT09aC5wZW5kaW5nX2J1Zl9zaXplfHwoaC5nemhlYWQuaGNyYyYmaC5wZW5kaW5nPmsmJihhLmFkbGVyPUYoYS5hZGxlcixoLnBlbmRpbmdfYnVmLGgucGVuZGluZy1rLGspKSxnKGEpLGs9aC5wZW5kaW5nLGgucGVuZGluZyE9PWgucGVuZGluZ19idWZfc2l6ZSkpOylpKGgsMjU1JmguZ3poZWFkLmV4dHJhW2guZ3ppbmRleF0pLGguZ3ppbmRleCsrO2guZ3poZWFkLmhjcmMmJmgucGVuZGluZz5rJiYoYS5hZGxlcj1GKGEuYWRsZXIsaC5wZW5kaW5nX2J1ZixoLnBlbmRpbmctayxrKSksaC5nemluZGV4PT09aC5nemhlYWQuZXh0cmEubGVuZ3RoJiYoaC5nemluZGV4PTAsaC5zdGF0dXM9bmIpfWVsc2UgaC5zdGF0dXM9bmI7aWYoaC5zdGF0dXM9PT1uYilpZihoLmd6aGVhZC5uYW1lKXtrPWgucGVuZGluZztkb3tpZihoLnBlbmRpbmc9PT1oLnBlbmRpbmdfYnVmX3NpemUmJihoLmd6aGVhZC5oY3JjJiZoLnBlbmRpbmc+ayYmKGEuYWRsZXI9RihhLmFkbGVyLGgucGVuZGluZ19idWYsaC5wZW5kaW5nLWssaykpLGcoYSksaz1oLnBlbmRpbmcsaC5wZW5kaW5nPT09aC5wZW5kaW5nX2J1Zl9zaXplKSl7bD0xO2JyZWFrfWw9aC5nemluZGV4PGguZ3poZWFkLm5hbWUubGVuZ3RoPzI1NSZoLmd6aGVhZC5uYW1lLmNoYXJDb2RlQXQoaC5nemluZGV4KyspOjAsaShoLGwpfXdoaWxlKDAhPT1sKTtoLmd6aGVhZC5oY3JjJiZoLnBlbmRpbmc+ayYmKGEuYWRsZXI9RihhLmFkbGVyLGgucGVuZGluZ19idWYsaC5wZW5kaW5nLWssaykpLDA9PT1sJiYoaC5nemluZGV4PTAsaC5zdGF0dXM9b2IpfWVsc2UgaC5zdGF0dXM9b2I7aWYoaC5zdGF0dXM9PT1vYilpZihoLmd6aGVhZC5jb21tZW50KXtrPWgucGVuZGluZztkb3tpZihoLnBlbmRpbmc9PT1oLnBlbmRpbmdfYnVmX3NpemUmJihoLmd6aGVhZC5oY3JjJiZoLnBlbmRpbmc+ayYmKGEuYWRsZXI9RihhLmFkbGVyLGgucGVuZGluZ19idWYsaC5wZW5kaW5nLWssaykpLGcoYSksaz1oLnBlbmRpbmcsaC5wZW5kaW5nPT09aC5wZW5kaW5nX2J1Zl9zaXplKSl7bD0xO2JyZWFrfWw9aC5nemluZGV4PGguZ3poZWFkLmNvbW1lbnQubGVuZ3RoPzI1NSZoLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQoaC5nemluZGV4KyspOjAsaShoLGwpfXdoaWxlKDAhPT1sKTtoLmd6aGVhZC5oY3JjJiZoLnBlbmRpbmc+ayYmKGEuYWRsZXI9RihhLmFkbGVyLGgucGVuZGluZ19idWYsaC5wZW5kaW5nLWssaykpLDA9PT1sJiYoaC5zdGF0dXM9cGIpfWVsc2UgaC5zdGF0dXM9cGI7aWYoaC5zdGF0dXM9PT1wYiYmKGguZ3poZWFkLmhjcmM/KGgucGVuZGluZysyPmgucGVuZGluZ19idWZfc2l6ZSYmZyhhKSxoLnBlbmRpbmcrMjw9aC5wZW5kaW5nX2J1Zl9zaXplJiYoaShoLDI1NSZhLmFkbGVyKSxpKGgsYS5hZGxlcj4+OCYyNTUpLGEuYWRsZXI9MCxoLnN0YXR1cz1xYikpOmguc3RhdHVzPXFiKSwwIT09aC5wZW5kaW5nKXtpZihnKGEpLDA9PT1hLmF2YWlsX291dClyZXR1cm4gaC5sYXN0X2ZsdXNoPS0xLE19ZWxzZSBpZigwPT09YS5hdmFpbF9pbiYmZShiKTw9ZShjKSYmYiE9PUspcmV0dXJuIGQoYSxRKTtpZihoLnN0YXR1cz09PXJiJiYwIT09YS5hdmFpbF9pbilyZXR1cm4gZChhLFEpO2lmKDAhPT1hLmF2YWlsX2lufHwwIT09aC5sb29rYWhlYWR8fGIhPT1IJiZoLnN0YXR1cyE9PXJiKXt2YXIgbz1oLnN0cmF0ZWd5PT09VD9yKGgsYik6aC5zdHJhdGVneT09PVU/cShoLGIpOkJbaC5sZXZlbF0uZnVuYyhoLGIpO2lmKChvPT09dWJ8fG89PT12YikmJihoLnN0YXR1cz1yYiksbz09PXNifHxvPT09dWIpcmV0dXJuIDA9PT1hLmF2YWlsX291dCYmKGgubGFzdF9mbHVzaD0tMSksTTtpZihvPT09dGImJihiPT09ST9ELl90cl9hbGlnbihoKTpiIT09TCYmKEQuX3RyX3N0b3JlZF9ibG9jayhoLDAsMCwhMSksYj09PUomJihmKGguaGVhZCksMD09PWgubG9va2FoZWFkJiYoaC5zdHJzdGFydD0wLGguYmxvY2tfc3RhcnQ9MCxoLmluc2VydD0wKSkpLGcoYSksMD09PWEuYXZhaWxfb3V0KSlyZXR1cm4gaC5sYXN0X2ZsdXNoPS0xLE19cmV0dXJuIGIhPT1LP006aC53cmFwPD0wP046KDI9PT1oLndyYXA/KGkoaCwyNTUmYS5hZGxlciksaShoLGEuYWRsZXI+PjgmMjU1KSxpKGgsYS5hZGxlcj4+MTYmMjU1KSxpKGgsYS5hZGxlcj4+MjQmMjU1KSxpKGgsMjU1JmEudG90YWxfaW4pLGkoaCxhLnRvdGFsX2luPj44JjI1NSksaShoLGEudG90YWxfaW4+PjE2JjI1NSksaShoLGEudG90YWxfaW4+PjI0JjI1NSkpOihqKGgsYS5hZGxlcj4+PjE2KSxqKGgsNjU1MzUmYS5hZGxlcikpLGcoYSksaC53cmFwPjAmJihoLndyYXA9LWgud3JhcCksMCE9PWgucGVuZGluZz9NOk4pfWZ1bmN0aW9uIEEoYSl7dmFyIGI7cmV0dXJuIGEmJmEuc3RhdGU/KGI9YS5zdGF0ZS5zdGF0dXMsYiE9PWxiJiZiIT09bWImJmIhPT1uYiYmYiE9PW9iJiZiIT09cGImJmIhPT1xYiYmYiE9PXJiP2QoYSxPKTooYS5zdGF0ZT1udWxsLGI9PT1xYj9kKGEsUCk6TSkpOk99dmFyIEIsQz1hKCIuLi91dGlscy9jb21tb24iKSxEPWEoIi4vdHJlZXMiKSxFPWEoIi4vYWRsZXIzMiIpLEY9YSgiLi9jcmMzMiIpLEc9YSgiLi9tZXNzYWdlcyIpLEg9MCxJPTEsSj0zLEs9NCxMPTUsTT0wLE49MSxPPS0yLFA9LTMsUT0tNSxSPS0xLFM9MSxUPTIsVT0zLFY9NCxXPTAsWD0yLFk9OCxaPTksJD0xNSxfPTgsYWI9MjksYmI9MjU2LGNiPWJiKzErYWIsZGI9MzAsZWI9MTksZmI9MipjYisxLGdiPTE1LGhiPTMsaWI9MjU4LGpiPWliK2hiKzEsa2I9MzIsbGI9NDIsbWI9NjksbmI9NzMsb2I9OTEscGI9MTAzLHFiPTExMyxyYj02NjYsc2I9MSx0Yj0yLHViPTMsdmI9NCx3Yj0zLHhiPWZ1bmN0aW9uKGEsYixjLGQsZSl7dGhpcy5nb29kX2xlbmd0aD1hLHRoaXMubWF4X2xhenk9Yix0aGlzLm5pY2VfbGVuZ3RoPWMsdGhpcy5tYXhfY2hhaW49ZCx0aGlzLmZ1bmM9ZX07Qj1bbmV3IHhiKDAsMCwwLDAsbiksbmV3IHhiKDQsNCw4LDQsbyksbmV3IHhiKDQsNSwxNiw4LG8pLG5ldyB4Yig0LDYsMzIsMzIsbyksbmV3IHhiKDQsNCwxNiwxNixwKSxuZXcgeGIoOCwxNiwzMiwzMixwKSxuZXcgeGIoOCwxNiwxMjgsMTI4LHApLG5ldyB4Yig4LDMyLDEyOCwyNTYscCksbmV3IHhiKDMyLDEyOCwyNTgsMTAyNCxwKSxuZXcgeGIoMzIsMjU4LDI1OCw0MDk2LHApXSxjLmRlZmxhdGVJbml0PXksYy5kZWZsYXRlSW5pdDI9eCxjLmRlZmxhdGVSZXNldD12LGMuZGVmbGF0ZVJlc2V0S2VlcD11LGMuZGVmbGF0ZVNldEhlYWRlcj13LGMuZGVmbGF0ZT16LGMuZGVmbGF0ZUVuZD1BLGMuZGVmbGF0ZUluZm89InBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkifSx7Ii4uL3V0aWxzL2NvbW1vbiI6MjcsIi4vYWRsZXIzMiI6MjksIi4vY3JjMzIiOjMxLCIuL21lc3NhZ2VzIjozNywiLi90cmVlcyI6Mzh9XSwzMzpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYygpe3RoaXMudGV4dD0wLHRoaXMudGltZT0wLHRoaXMueGZsYWdzPTAsdGhpcy5vcz0wLHRoaXMuZXh0cmE9bnVsbCx0aGlzLmV4dHJhX2xlbj0wLHRoaXMubmFtZT0iIix0aGlzLmNvbW1lbnQ9IiIsdGhpcy5oY3JjPTAsdGhpcy5kb25lPSExfWIuZXhwb3J0cz1jfSx7fV0sMzQ6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO3ZhciBjPTMwLGQ9MTI7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYil7dmFyIGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcseCx5LHosQSxCLEM7ZT1hLnN0YXRlLGY9YS5uZXh0X2luLEI9YS5pbnB1dCxnPWYrKGEuYXZhaWxfaW4tNSksaD1hLm5leHRfb3V0LEM9YS5vdXRwdXQsaT1oLShiLWEuYXZhaWxfb3V0KSxqPWgrKGEuYXZhaWxfb3V0LTI1Nyksaz1lLmRtYXgsbD1lLndzaXplLG09ZS53aGF2ZSxuPWUud25leHQsbz1lLndpbmRvdyxwPWUuaG9sZCxxPWUuYml0cyxyPWUubGVuY29kZSxzPWUuZGlzdGNvZGUsdD0oMTw8ZS5sZW5iaXRzKS0xLHU9KDE8PGUuZGlzdGJpdHMpLTE7YTpkb3sxNT5xJiYocCs9QltmKytdPDxxLHErPTgscCs9QltmKytdPDxxLHErPTgpLHY9cltwJnRdO2I6Zm9yKDs7KXtpZih3PXY+Pj4yNCxwPj4+PXcscS09dyx3PXY+Pj4xNiYyNTUsMD09PXcpQ1toKytdPTY1NTM1JnY7ZWxzZXtpZighKDE2JncpKXtpZigwPT09KDY0JncpKXt2PXJbKDY1NTM1JnYpKyhwJigxPDx3KS0xKV07Y29udGludWUgYn1pZigzMiZ3KXtlLm1vZGU9ZDticmVhayBhfWEubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLGUubW9kZT1jO2JyZWFrIGF9eD02NTUzNSZ2LHcmPTE1LHcmJih3PnEmJihwKz1CW2YrK108PHEscSs9OCkseCs9cCYoMTw8dyktMSxwPj4+PXcscS09dyksMTU+cSYmKHArPUJbZisrXTw8cSxxKz04LHArPUJbZisrXTw8cSxxKz04KSx2PXNbcCZ1XTtjOmZvcig7Oyl7aWYodz12Pj4+MjQscD4+Pj13LHEtPXcsdz12Pj4+MTYmMjU1LCEoMTYmdykpe2lmKDA9PT0oNjQmdykpe3Y9c1soNjU1MzUmdikrKHAmKDE8PHcpLTEpXTtjb250aW51ZSBjfWEubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLGUubW9kZT1jO2JyZWFrIGF9aWYoeT02NTUzNSZ2LHcmPTE1LHc+cSYmKHArPUJbZisrXTw8cSxxKz04LHc+cSYmKHArPUJbZisrXTw8cSxxKz04KSkseSs9cCYoMTw8dyktMSx5Pmspe2EubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsZS5tb2RlPWM7YnJlYWsgYX1pZihwPj4+PXcscS09dyx3PWgtaSx5Pncpe2lmKHc9eS13LHc+bSYmZS5zYW5lKXthLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLGUubW9kZT1jO2JyZWFrIGF9aWYoej0wLEE9bywwPT09bil7aWYoeis9bC13LHg+dyl7eC09dztkbyBDW2grK109b1t6KytdO3doaWxlKC0tdyk7ej1oLXksQT1DfX1lbHNlIGlmKHc+bil7aWYoeis9bCtuLXcsdy09bix4Pncpe3gtPXc7ZG8gQ1toKytdPW9beisrXTt3aGlsZSgtLXcpO2lmKHo9MCx4Pm4pe3c9bix4LT13O2RvIENbaCsrXT1vW3orK107d2hpbGUoLS13KTt6PWgteSxBPUN9fX1lbHNlIGlmKHorPW4tdyx4Pncpe3gtPXc7ZG8gQ1toKytdPW9beisrXTt3aGlsZSgtLXcpO3o9aC15LEE9Q31mb3IoO3g+MjspQ1toKytdPUFbeisrXSxDW2grK109QVt6KytdLENbaCsrXT1BW3orK10seC09Mzt4JiYoQ1toKytdPUFbeisrXSx4PjEmJihDW2grK109QVt6KytdKSl9ZWxzZXt6PWgteTtkbyBDW2grK109Q1t6KytdLENbaCsrXT1DW3orK10sQ1toKytdPUNbeisrXSx4LT0zO3doaWxlKHg+Mik7eCYmKENbaCsrXT1DW3orK10seD4xJiYoQ1toKytdPUNbeisrXSkpfWJyZWFrfX1icmVha319d2hpbGUoZz5mJiZqPmgpO3g9cT4+MyxmLT14LHEtPXg8PDMscCY9KDE8PHEpLTEsYS5uZXh0X2luPWYsYS5uZXh0X291dD1oLGEuYXZhaWxfaW49Zz5mPzUrKGctZik6NS0oZi1nKSxhLmF2YWlsX291dD1qPmg/MjU3KyhqLWgpOjI1Ny0oaC1qKSxlLmhvbGQ9cCxlLmJpdHM9cX19LHt9XSwzNTpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEpe3JldHVybihhPj4+MjQmMjU1KSsoYT4+PjgmNjUyODApKygoNjUyODAmYSk8PDgpKygoMjU1JmEpPDwyNCl9ZnVuY3Rpb24gZSgpe3RoaXMubW9kZT0wLHRoaXMubGFzdD0hMSx0aGlzLndyYXA9MCx0aGlzLmhhdmVkaWN0PSExLHRoaXMuZmxhZ3M9MCx0aGlzLmRtYXg9MCx0aGlzLmNoZWNrPTAsdGhpcy50b3RhbD0wLHRoaXMuaGVhZD1udWxsLHRoaXMud2JpdHM9MCx0aGlzLndzaXplPTAsdGhpcy53aGF2ZT0wLHRoaXMud25leHQ9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMuaG9sZD0wLHRoaXMuYml0cz0wLHRoaXMubGVuZ3RoPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmV4dHJhPTAsdGhpcy5sZW5jb2RlPW51bGwsdGhpcy5kaXN0Y29kZT1udWxsLHRoaXMubGVuYml0cz0wLHRoaXMuZGlzdGJpdHM9MCx0aGlzLm5jb2RlPTAsdGhpcy5ubGVuPTAsdGhpcy5uZGlzdD0wLHRoaXMuaGF2ZT0wLHRoaXMubmV4dD1udWxsLHRoaXMubGVucz1uZXcgci5CdWYxNigzMjApLHRoaXMud29yaz1uZXcgci5CdWYxNigyODgpLHRoaXMubGVuZHluPW51bGwsdGhpcy5kaXN0ZHluPW51bGwsdGhpcy5zYW5lPTAsdGhpcy5iYWNrPTAsdGhpcy53YXM9MH1mdW5jdGlvbiBmKGEpe3ZhciBiO3JldHVybiBhJiZhLnN0YXRlPyhiPWEuc3RhdGUsYS50b3RhbF9pbj1hLnRvdGFsX291dD1iLnRvdGFsPTAsYS5tc2c9IiIsYi53cmFwJiYoYS5hZGxlcj0xJmIud3JhcCksYi5tb2RlPUssYi5sYXN0PTAsYi5oYXZlZGljdD0wLGIuZG1heD0zMjc2OCxiLmhlYWQ9bnVsbCxiLmhvbGQ9MCxiLmJpdHM9MCxiLmxlbmNvZGU9Yi5sZW5keW49bmV3IHIuQnVmMzIob2IpLGIuZGlzdGNvZGU9Yi5kaXN0ZHluPW5ldyByLkJ1ZjMyKHBiKSxiLnNhbmU9MSxiLmJhY2s9LTEsQyk6Rn1mdW5jdGlvbiBnKGEpe3ZhciBiO3JldHVybiBhJiZhLnN0YXRlPyhiPWEuc3RhdGUsYi53c2l6ZT0wLGIud2hhdmU9MCxiLnduZXh0PTAsZihhKSk6Rn1mdW5jdGlvbiBoKGEsYil7dmFyIGMsZDtyZXR1cm4gYSYmYS5zdGF0ZT8oZD1hLnN0YXRlLDA+Yj8oYz0wLGI9LWIpOihjPShiPj40KSsxLDQ4PmImJihiJj0xNSkpLGImJig4PmJ8fGI+MTUpP0Y6KG51bGwhPT1kLndpbmRvdyYmZC53Yml0cyE9PWImJihkLndpbmRvdz1udWxsKSxkLndyYXA9YyxkLndiaXRzPWIsZyhhKSkpOkZ9ZnVuY3Rpb24gaShhLGIpe3ZhciBjLGQ7cmV0dXJuIGE/KGQ9bmV3IGUsYS5zdGF0ZT1kLGQud2luZG93PW51bGwsYz1oKGEsYiksYyE9PUMmJihhLnN0YXRlPW51bGwpLGMpOkZ9ZnVuY3Rpb24gaihhKXtyZXR1cm4gaShhLHJiKX1mdW5jdGlvbiBrKGEpe2lmKHNiKXt2YXIgYjtmb3IocD1uZXcgci5CdWYzMig1MTIpLHE9bmV3IHIuQnVmMzIoMzIpLGI9MDsxNDQ+YjspYS5sZW5zW2IrK109ODtmb3IoOzI1Nj5iOylhLmxlbnNbYisrXT05O2Zvcig7MjgwPmI7KWEubGVuc1tiKytdPTc7Zm9yKDsyODg+YjspYS5sZW5zW2IrK109ODtmb3Iodih4LGEubGVucywwLDI4OCxwLDAsYS53b3JrLHtiaXRzOjl9KSxiPTA7MzI+YjspYS5sZW5zW2IrK109NTt2KHksYS5sZW5zLDAsMzIscSwwLGEud29yayx7Yml0czo1fSksc2I9ITF9YS5sZW5jb2RlPXAsYS5sZW5iaXRzPTksYS5kaXN0Y29kZT1xLGEuZGlzdGJpdHM9NX1mdW5jdGlvbiBsKGEsYixjLGQpe3ZhciBlLGY9YS5zdGF0ZTtyZXR1cm4gbnVsbD09PWYud2luZG93JiYoZi53c2l6ZT0xPDxmLndiaXRzLGYud25leHQ9MCxmLndoYXZlPTAsZi53aW5kb3c9bmV3IHIuQnVmOChmLndzaXplKSksZD49Zi53c2l6ZT8oci5hcnJheVNldChmLndpbmRvdyxiLGMtZi53c2l6ZSxmLndzaXplLDApLGYud25leHQ9MCxmLndoYXZlPWYud3NpemUpOihlPWYud3NpemUtZi53bmV4dCxlPmQmJihlPWQpLHIuYXJyYXlTZXQoZi53aW5kb3csYixjLWQsZSxmLnduZXh0KSxkLT1lLGQ/KHIuYXJyYXlTZXQoZi53aW5kb3csYixjLWQsZCwwKSxmLnduZXh0PWQsZi53aGF2ZT1mLndzaXplKTooZi53bmV4dCs9ZSxmLnduZXh0PT09Zi53c2l6ZSYmKGYud25leHQ9MCksZi53aGF2ZTxmLndzaXplJiYoZi53aGF2ZSs9ZSkpKSwwfWZ1bmN0aW9uIG0oYSxiKXt2YXIgYyxlLGYsZyxoLGksaixtLG4sbyxwLHEsb2IscGIscWIscmIsc2IsdGIsdWIsdmIsd2IseGIseWIsemIsQWI9MCxCYj1uZXcgci5CdWY4KDQpLENiPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XTtpZighYXx8IWEuc3RhdGV8fCFhLm91dHB1dHx8IWEuaW5wdXQmJjAhPT1hLmF2YWlsX2luKXJldHVybiBGO2M9YS5zdGF0ZSxjLm1vZGU9PT1WJiYoYy5tb2RlPVcpLGg9YS5uZXh0X291dCxmPWEub3V0cHV0LGo9YS5hdmFpbF9vdXQsZz1hLm5leHRfaW4sZT1hLmlucHV0LGk9YS5hdmFpbF9pbixtPWMuaG9sZCxuPWMuYml0cyxvPWkscD1qLHhiPUM7YTpmb3IoOzspc3dpdGNoKGMubW9kZSl7Y2FzZSBLOmlmKDA9PT1jLndyYXApe2MubW9kZT1XO2JyZWFrfWZvcig7MTY+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fWlmKDImYy53cmFwJiYzNTYxNT09PW0pe2MuY2hlY2s9MCxCYlswXT0yNTUmbSxCYlsxXT1tPj4+OCYyNTUsYy5jaGVjaz10KGMuY2hlY2ssQmIsMiwwKSxtPTAsbj0wLGMubW9kZT1MO2JyZWFrfWlmKGMuZmxhZ3M9MCxjLmhlYWQmJihjLmhlYWQuZG9uZT0hMSksISgxJmMud3JhcCl8fCgoKDI1NSZtKTw8OCkrKG0+PjgpKSUzMSl7YS5tc2c9ImluY29ycmVjdCBoZWFkZXIgY2hlY2siLGMubW9kZT1sYjticmVha31pZigoMTUmbSkhPT1KKXthLm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLGMubW9kZT1sYjticmVha31pZihtPj4+PTQsbi09NCx3Yj0oMTUmbSkrOCwwPT09Yy53Yml0cyljLndiaXRzPXdiO2Vsc2UgaWYod2I+Yy53Yml0cyl7YS5tc2c9ImludmFsaWQgd2luZG93IHNpemUiLGMubW9kZT1sYjticmVha31jLmRtYXg9MTw8d2IsYS5hZGxlcj1jLmNoZWNrPTEsYy5tb2RlPTUxMiZtP1Q6VixtPTAsbj0wO2JyZWFrO2Nhc2UgTDpmb3IoOzE2Pm47KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1pZihjLmZsYWdzPW0sKDI1NSZjLmZsYWdzKSE9PUope2EubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsYy5tb2RlPWxiO2JyZWFrfWlmKDU3MzQ0JmMuZmxhZ3Mpe2EubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLGMubW9kZT1sYjticmVha31jLmhlYWQmJihjLmhlYWQudGV4dD1tPj44JjEpLDUxMiZjLmZsYWdzJiYoQmJbMF09MjU1Jm0sQmJbMV09bT4+PjgmMjU1LGMuY2hlY2s9dChjLmNoZWNrLEJiLDIsMCkpLG09MCxuPTAsYy5tb2RlPU07Y2FzZSBNOmZvcig7MzI+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fWMuaGVhZCYmKGMuaGVhZC50aW1lPW0pLDUxMiZjLmZsYWdzJiYoQmJbMF09MjU1Jm0sQmJbMV09bT4+PjgmMjU1LEJiWzJdPW0+Pj4xNiYyNTUsQmJbM109bT4+PjI0JjI1NSxjLmNoZWNrPXQoYy5jaGVjayxCYiw0LDApKSxtPTAsbj0wLGMubW9kZT1OO2Nhc2UgTjpmb3IoOzE2Pm47KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1jLmhlYWQmJihjLmhlYWQueGZsYWdzPTI1NSZtLGMuaGVhZC5vcz1tPj44KSw1MTImYy5mbGFncyYmKEJiWzBdPTI1NSZtLEJiWzFdPW0+Pj44JjI1NSxjLmNoZWNrPXQoYy5jaGVjayxCYiwyLDApKSxtPTAsbj0wLGMubW9kZT1PO2Nhc2UgTzppZigxMDI0JmMuZmxhZ3Mpe2Zvcig7MTY+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fWMubGVuZ3RoPW0sYy5oZWFkJiYoYy5oZWFkLmV4dHJhX2xlbj1tKSw1MTImYy5mbGFncyYmKEJiWzBdPTI1NSZtLEJiWzFdPW0+Pj44JjI1NSxjLmNoZWNrPXQoYy5jaGVjayxCYiwyLDApKSxtPTAsbj0wfWVsc2UgYy5oZWFkJiYoYy5oZWFkLmV4dHJhPW51bGwpO2MubW9kZT1QO2Nhc2UgUDppZigxMDI0JmMuZmxhZ3MmJihxPWMubGVuZ3RoLHE+aSYmKHE9aSkscSYmKGMuaGVhZCYmKHdiPWMuaGVhZC5leHRyYV9sZW4tYy5sZW5ndGgsYy5oZWFkLmV4dHJhfHwoYy5oZWFkLmV4dHJhPW5ldyBBcnJheShjLmhlYWQuZXh0cmFfbGVuKSksci5hcnJheVNldChjLmhlYWQuZXh0cmEsZSxnLHEsd2IpKSw1MTImYy5mbGFncyYmKGMuY2hlY2s9dChjLmNoZWNrLGUscSxnKSksaS09cSxnKz1xLGMubGVuZ3RoLT1xKSxjLmxlbmd0aCkpYnJlYWsgYTtjLmxlbmd0aD0wLGMubW9kZT1RO2Nhc2UgUTppZigyMDQ4JmMuZmxhZ3Mpe2lmKDA9PT1pKWJyZWFrIGE7cT0wO2RvIHdiPWVbZytxKytdLGMuaGVhZCYmd2ImJmMubGVuZ3RoPDY1NTM2JiYoYy5oZWFkLm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUod2IpKTt3aGlsZSh3YiYmaT5xKTtpZig1MTImYy5mbGFncyYmKGMuY2hlY2s9dChjLmNoZWNrLGUscSxnKSksaS09cSxnKz1xLHdiKWJyZWFrIGF9ZWxzZSBjLmhlYWQmJihjLmhlYWQubmFtZT1udWxsKTtjLmxlbmd0aD0wLGMubW9kZT1SO2Nhc2UgUjppZig0MDk2JmMuZmxhZ3Mpe2lmKDA9PT1pKWJyZWFrIGE7cT0wO2RvIHdiPWVbZytxKytdLGMuaGVhZCYmd2ImJmMubGVuZ3RoPDY1NTM2JiYoYy5oZWFkLmNvbW1lbnQrPVN0cmluZy5mcm9tQ2hhckNvZGUod2IpKTt3aGlsZSh3YiYmaT5xKTtpZig1MTImYy5mbGFncyYmKGMuY2hlY2s9dChjLmNoZWNrLGUscSxnKSksaS09cSxnKz1xLHdiKWJyZWFrIGF9ZWxzZSBjLmhlYWQmJihjLmhlYWQuY29tbWVudD1udWxsKTtjLm1vZGU9UztjYXNlIFM6aWYoNTEyJmMuZmxhZ3Mpe2Zvcig7MTY+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fWlmKG0hPT0oNjU1MzUmYy5jaGVjaykpe2EubXNnPSJoZWFkZXIgY3JjIG1pc21hdGNoIixjLm1vZGU9bGI7YnJlYWt9bT0wLG49MH1jLmhlYWQmJihjLmhlYWQuaGNyYz1jLmZsYWdzPj45JjEsYy5oZWFkLmRvbmU9ITApLGEuYWRsZXI9Yy5jaGVjaz0wLGMubW9kZT1WO2JyZWFrO2Nhc2UgVDpmb3IoOzMyPm47KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1hLmFkbGVyPWMuY2hlY2s9ZChtKSxtPTAsbj0wLGMubW9kZT1VO2Nhc2UgVTppZigwPT09Yy5oYXZlZGljdClyZXR1cm4gYS5uZXh0X291dD1oLGEuYXZhaWxfb3V0PWosYS5uZXh0X2luPWcsYS5hdmFpbF9pbj1pLGMuaG9sZD1tLGMuYml0cz1uLEU7YS5hZGxlcj1jLmNoZWNrPTEsYy5tb2RlPVY7Y2FzZSBWOmlmKGI9PT1BfHxiPT09QilicmVhayBhO2Nhc2UgVzppZihjLmxhc3Qpe20+Pj49NyZuLG4tPTcmbixjLm1vZGU9aWI7YnJlYWt9Zm9yKDszPm47KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1zd2l0Y2goYy5sYXN0PTEmbSxtPj4+PTEsbi09MSwzJm0pe2Nhc2UgMDpjLm1vZGU9WDticmVhaztjYXNlIDE6aWYoayhjKSxjLm1vZGU9YmIsYj09PUIpe20+Pj49MixuLT0yO2JyZWFrIGF9YnJlYWs7Y2FzZSAyOmMubW9kZT0kO2JyZWFrO2Nhc2UgMzphLm1zZz0iaW52YWxpZCBibG9jayB0eXBlIixjLm1vZGU9bGJ9bT4+Pj0yLG4tPTI7YnJlYWs7Y2FzZSBYOmZvcihtPj4+PTcmbixuLT03Jm47MzI+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fWlmKCg2NTUzNSZtKSE9PShtPj4+MTZeNjU1MzUpKXthLm1zZz0iaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocyIsYy5tb2RlPWxiO2JyZWFrfWlmKGMubGVuZ3RoPTY1NTM1Jm0sbT0wLG49MCxjLm1vZGU9WSxiPT09QilicmVhayBhO2Nhc2UgWTpjLm1vZGU9WjtjYXNlIFo6aWYocT1jLmxlbmd0aCl7aWYocT5pJiYocT1pKSxxPmomJihxPWopLDA9PT1xKWJyZWFrIGE7ci5hcnJheVNldChmLGUsZyxxLGgpLGktPXEsZys9cSxqLT1xLGgrPXEsYy5sZW5ndGgtPXE7YnJlYWt9Yy5tb2RlPVY7YnJlYWs7Y2FzZSAkOmZvcig7MTQ+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fWlmKGMubmxlbj0oMzEmbSkrMjU3LG0+Pj49NSxuLT01LGMubmRpc3Q9KDMxJm0pKzEsbT4+Pj01LG4tPTUsYy5uY29kZT0oMTUmbSkrNCxtPj4+PTQsbi09NCxjLm5sZW4+Mjg2fHxjLm5kaXN0PjMwKXthLm1zZz0idG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMiLGMubW9kZT1sYjticmVha31jLmhhdmU9MCxjLm1vZGU9XztjYXNlIF86Zm9yKDtjLmhhdmU8Yy5uY29kZTspe2Zvcig7Mz5uOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9Yy5sZW5zW0NiW2MuaGF2ZSsrXV09NyZtLG0+Pj49MyxuLT0zfWZvcig7Yy5oYXZlPDE5OyljLmxlbnNbQ2JbYy5oYXZlKytdXT0wO2lmKGMubGVuY29kZT1jLmxlbmR5bixjLmxlbmJpdHM9Nyx5Yj17Yml0czpjLmxlbmJpdHN9LHhiPXYodyxjLmxlbnMsMCwxOSxjLmxlbmNvZGUsMCxjLndvcmsseWIpLGMubGVuYml0cz15Yi5iaXRzLHhiKXthLm1zZz0iaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IixjLm1vZGU9bGI7YnJlYWt9Yy5oYXZlPTAsYy5tb2RlPWFiO2Nhc2UgYWI6Zm9yKDtjLmhhdmU8Yy5ubGVuK2MubmRpc3Q7KXtmb3IoO0FiPWMubGVuY29kZVttJigxPDxjLmxlbmJpdHMpLTFdLHFiPUFiPj4+MjQscmI9QWI+Pj4xNiYyNTUsc2I9NjU1MzUmQWIsIShuPj1xYik7KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1pZigxNj5zYiltPj4+PXFiLG4tPXFiLGMubGVuc1tjLmhhdmUrK109c2I7ZWxzZXtpZigxNj09PXNiKXtmb3IoemI9cWIrMjt6Yj5uOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9aWYobT4+Pj1xYixuLT1xYiwwPT09Yy5oYXZlKXthLm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsYy5tb2RlPWxiO2JyZWFrfXdiPWMubGVuc1tjLmhhdmUtMV0scT0zKygzJm0pLG0+Pj49MixuLT0yfWVsc2UgaWYoMTc9PT1zYil7Zm9yKHpiPXFiKzM7emI+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fW0+Pj49cWIsbi09cWIsd2I9MCxxPTMrKDcmbSksbT4+Pj0zLG4tPTN9ZWxzZXtmb3IoemI9cWIrNzt6Yj5uOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9bT4+Pj1xYixuLT1xYix3Yj0wLHE9MTErKDEyNyZtKSxtPj4+PTcsbi09N31pZihjLmhhdmUrcT5jLm5sZW4rYy5uZGlzdCl7YS5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLGMubW9kZT1sYjticmVha31mb3IoO3EtLTspYy5sZW5zW2MuaGF2ZSsrXT13Yn19aWYoYy5tb2RlPT09bGIpYnJlYWs7aWYoMD09PWMubGVuc1syNTZdKXthLm1zZz0iaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIixjLm1vZGU9bGI7YnJlYWt9aWYoYy5sZW5iaXRzPTkseWI9e2JpdHM6Yy5sZW5iaXRzfSx4Yj12KHgsYy5sZW5zLDAsYy5ubGVuLGMubGVuY29kZSwwLGMud29yayx5YiksYy5sZW5iaXRzPXliLmJpdHMseGIpe2EubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiLGMubW9kZT1sYjticmVha31pZihjLmRpc3RiaXRzPTYsYy5kaXN0Y29kZT1jLmRpc3RkeW4seWI9e2JpdHM6Yy5kaXN0Yml0c30seGI9dih5LGMubGVucyxjLm5sZW4sYy5uZGlzdCxjLmRpc3Rjb2RlLDAsYy53b3JrLHliKSxjLmRpc3RiaXRzPXliLmJpdHMseGIpe2EubXNnPSJpbnZhbGlkIGRpc3RhbmNlcyBzZXQiLGMubW9kZT1sYjticmVha31pZihjLm1vZGU9YmIsYj09PUIpYnJlYWsgYTtjYXNlIGJiOmMubW9kZT1jYjtjYXNlIGNiOmlmKGk+PTYmJmo+PTI1OCl7YS5uZXh0X291dD1oLGEuYXZhaWxfb3V0PWosYS5uZXh0X2luPWcsYS5hdmFpbF9pbj1pLGMuaG9sZD1tLGMuYml0cz1uLHUoYSxwKSxoPWEubmV4dF9vdXQsZj1hLm91dHB1dCxqPWEuYXZhaWxfb3V0LGc9YS5uZXh0X2luLGU9YS5pbnB1dCxpPWEuYXZhaWxfaW4sbT1jLmhvbGQsbj1jLmJpdHMsYy5tb2RlPT09ViYmKGMuYmFjaz0tMSk7CmJyZWFrfWZvcihjLmJhY2s9MDtBYj1jLmxlbmNvZGVbbSYoMTw8Yy5sZW5iaXRzKS0xXSxxYj1BYj4+PjI0LHJiPUFiPj4+MTYmMjU1LHNiPTY1NTM1JkFiLCEobj49cWIpOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9aWYocmImJjA9PT0oMjQwJnJiKSl7Zm9yKHRiPXFiLHViPXJiLHZiPXNiO0FiPWMubGVuY29kZVt2YisoKG0mKDE8PHRiK3ViKS0xKT4+dGIpXSxxYj1BYj4+PjI0LHJiPUFiPj4+MTYmMjU1LHNiPTY1NTM1JkFiLCEobj49dGIrcWIpOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9bT4+Pj10YixuLT10YixjLmJhY2srPXRifWlmKG0+Pj49cWIsbi09cWIsYy5iYWNrKz1xYixjLmxlbmd0aD1zYiwwPT09cmIpe2MubW9kZT1oYjticmVha31pZigzMiZyYil7Yy5iYWNrPS0xLGMubW9kZT1WO2JyZWFrfWlmKDY0JnJiKXthLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixjLm1vZGU9bGI7YnJlYWt9Yy5leHRyYT0xNSZyYixjLm1vZGU9ZGI7Y2FzZSBkYjppZihjLmV4dHJhKXtmb3IoemI9Yy5leHRyYTt6Yj5uOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9Yy5sZW5ndGgrPW0mKDE8PGMuZXh0cmEpLTEsbT4+Pj1jLmV4dHJhLG4tPWMuZXh0cmEsYy5iYWNrKz1jLmV4dHJhfWMud2FzPWMubGVuZ3RoLGMubW9kZT1lYjtjYXNlIGViOmZvcig7QWI9Yy5kaXN0Y29kZVttJigxPDxjLmRpc3RiaXRzKS0xXSxxYj1BYj4+PjI0LHJiPUFiPj4+MTYmMjU1LHNiPTY1NTM1JkFiLCEobj49cWIpOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9aWYoMD09PSgyNDAmcmIpKXtmb3IodGI9cWIsdWI9cmIsdmI9c2I7QWI9Yy5kaXN0Y29kZVt2YisoKG0mKDE8PHRiK3ViKS0xKT4+dGIpXSxxYj1BYj4+PjI0LHJiPUFiPj4+MTYmMjU1LHNiPTY1NTM1JkFiLCEobj49dGIrcWIpOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9bT4+Pj10YixuLT10YixjLmJhY2srPXRifWlmKG0+Pj49cWIsbi09cWIsYy5iYWNrKz1xYiw2NCZyYil7YS5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsYy5tb2RlPWxiO2JyZWFrfWMub2Zmc2V0PXNiLGMuZXh0cmE9MTUmcmIsYy5tb2RlPWZiO2Nhc2UgZmI6aWYoYy5leHRyYSl7Zm9yKHpiPWMuZXh0cmE7emI+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fWMub2Zmc2V0Kz1tJigxPDxjLmV4dHJhKS0xLG0+Pj49Yy5leHRyYSxuLT1jLmV4dHJhLGMuYmFjays9Yy5leHRyYX1pZihjLm9mZnNldD5jLmRtYXgpe2EubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsYy5tb2RlPWxiO2JyZWFrfWMubW9kZT1nYjtjYXNlIGdiOmlmKDA9PT1qKWJyZWFrIGE7aWYocT1wLWosYy5vZmZzZXQ+cSl7aWYocT1jLm9mZnNldC1xLHE+Yy53aGF2ZSYmYy5zYW5lKXthLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLGMubW9kZT1sYjticmVha31xPmMud25leHQ/KHEtPWMud25leHQsb2I9Yy53c2l6ZS1xKTpvYj1jLnduZXh0LXEscT5jLmxlbmd0aCYmKHE9Yy5sZW5ndGgpLHBiPWMud2luZG93fWVsc2UgcGI9ZixvYj1oLWMub2Zmc2V0LHE9Yy5sZW5ndGg7cT5qJiYocT1qKSxqLT1xLGMubGVuZ3RoLT1xO2RvIGZbaCsrXT1wYltvYisrXTt3aGlsZSgtLXEpOzA9PT1jLmxlbmd0aCYmKGMubW9kZT1jYik7YnJlYWs7Y2FzZSBoYjppZigwPT09ailicmVhayBhO2ZbaCsrXT1jLmxlbmd0aCxqLS0sYy5tb2RlPWNiO2JyZWFrO2Nhc2UgaWI6aWYoYy53cmFwKXtmb3IoOzMyPm47KXtpZigwPT09aSlicmVhayBhO2ktLSxtfD1lW2crK108PG4sbis9OH1pZihwLT1qLGEudG90YWxfb3V0Kz1wLGMudG90YWwrPXAscCYmKGEuYWRsZXI9Yy5jaGVjaz1jLmZsYWdzP3QoYy5jaGVjayxmLHAsaC1wKTpzKGMuY2hlY2ssZixwLGgtcCkpLHA9aiwoYy5mbGFncz9tOmQobSkpIT09Yy5jaGVjayl7YS5tc2c9ImluY29ycmVjdCBkYXRhIGNoZWNrIixjLm1vZGU9bGI7YnJlYWt9bT0wLG49MH1jLm1vZGU9amI7Y2FzZSBqYjppZihjLndyYXAmJmMuZmxhZ3Mpe2Zvcig7MzI+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fWlmKG0hPT0oNDI5NDk2NzI5NSZjLnRvdGFsKSl7YS5tc2c9ImluY29ycmVjdCBsZW5ndGggY2hlY2siLGMubW9kZT1sYjticmVha31tPTAsbj0wfWMubW9kZT1rYjtjYXNlIGtiOnhiPUQ7YnJlYWsgYTtjYXNlIGxiOnhiPUc7YnJlYWsgYTtjYXNlIG1iOnJldHVybiBIO2Nhc2UgbmI6ZGVmYXVsdDpyZXR1cm4gRn1yZXR1cm4gYS5uZXh0X291dD1oLGEuYXZhaWxfb3V0PWosYS5uZXh0X2luPWcsYS5hdmFpbF9pbj1pLGMuaG9sZD1tLGMuYml0cz1uLChjLndzaXplfHxwIT09YS5hdmFpbF9vdXQmJmMubW9kZTxsYiYmKGMubW9kZTxpYnx8YiE9PXopKSYmbChhLGEub3V0cHV0LGEubmV4dF9vdXQscC1hLmF2YWlsX291dCk/KGMubW9kZT1tYixIKTooby09YS5hdmFpbF9pbixwLT1hLmF2YWlsX291dCxhLnRvdGFsX2luKz1vLGEudG90YWxfb3V0Kz1wLGMudG90YWwrPXAsYy53cmFwJiZwJiYoYS5hZGxlcj1jLmNoZWNrPWMuZmxhZ3M/dChjLmNoZWNrLGYscCxhLm5leHRfb3V0LXApOnMoYy5jaGVjayxmLHAsYS5uZXh0X291dC1wKSksYS5kYXRhX3R5cGU9Yy5iaXRzKyhjLmxhc3Q/NjQ6MCkrKGMubW9kZT09PVY/MTI4OjApKyhjLm1vZGU9PT1iYnx8Yy5tb2RlPT09WT8yNTY6MCksKDA9PT1vJiYwPT09cHx8Yj09PXopJiZ4Yj09PUMmJih4Yj1JKSx4Yil9ZnVuY3Rpb24gbihhKXtpZighYXx8IWEuc3RhdGUpcmV0dXJuIEY7dmFyIGI9YS5zdGF0ZTtyZXR1cm4gYi53aW5kb3cmJihiLndpbmRvdz1udWxsKSxhLnN0YXRlPW51bGwsQ31mdW5jdGlvbiBvKGEsYil7dmFyIGM7cmV0dXJuIGEmJmEuc3RhdGU/KGM9YS5zdGF0ZSwwPT09KDImYy53cmFwKT9GOihjLmhlYWQ9YixiLmRvbmU9ITEsQykpOkZ9dmFyIHAscSxyPWEoIi4uL3V0aWxzL2NvbW1vbiIpLHM9YSgiLi9hZGxlcjMyIiksdD1hKCIuL2NyYzMyIiksdT1hKCIuL2luZmZhc3QiKSx2PWEoIi4vaW5mdHJlZXMiKSx3PTAseD0xLHk9Mix6PTQsQT01LEI9NixDPTAsRD0xLEU9MixGPS0yLEc9LTMsSD0tNCxJPS01LEo9OCxLPTEsTD0yLE09MyxOPTQsTz01LFA9NixRPTcsUj04LFM9OSxUPTEwLFU9MTEsVj0xMixXPTEzLFg9MTQsWT0xNSxaPTE2LCQ9MTcsXz0xOCxhYj0xOSxiYj0yMCxjYj0yMSxkYj0yMixlYj0yMyxmYj0yNCxnYj0yNSxoYj0yNixpYj0yNyxqYj0yOCxrYj0yOSxsYj0zMCxtYj0zMSxuYj0zMixvYj04NTIscGI9NTkyLHFiPTE1LHJiPXFiLHNiPSEwO2MuaW5mbGF0ZVJlc2V0PWcsYy5pbmZsYXRlUmVzZXQyPWgsYy5pbmZsYXRlUmVzZXRLZWVwPWYsYy5pbmZsYXRlSW5pdD1qLGMuaW5mbGF0ZUluaXQyPWksYy5pbmZsYXRlPW0sYy5pbmZsYXRlRW5kPW4sYy5pbmZsYXRlR2V0SGVhZGVyPW8sYy5pbmZsYXRlSW5mbz0icGFrbyBpbmZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSJ9LHsiLi4vdXRpbHMvY29tbW9uIjoyNywiLi9hZGxlcjMyIjoyOSwiLi9jcmMzMiI6MzEsIi4vaW5mZmFzdCI6MzQsIi4vaW5mdHJlZXMiOjM2fV0sMzY6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO3ZhciBjPWEoIi4uL3V0aWxzL2NvbW1vbiIpLGQ9MTUsZT04NTIsZj01OTIsZz0wLGg9MSxpPTIsaj1bMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OCwwLDBdLGs9WzE2LDE2LDE2LDE2LDE2LDE2LDE2LDE2LDE3LDE3LDE3LDE3LDE4LDE4LDE4LDE4LDE5LDE5LDE5LDE5LDIwLDIwLDIwLDIwLDIxLDIxLDIxLDIxLDE2LDcyLDc4XSxsPVsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzcsMCwwXSxtPVsxNiwxNiwxNiwxNiwxNywxNywxOCwxOCwxOSwxOSwyMCwyMCwyMSwyMSwyMiwyMiwyMywyMywyNCwyNCwyNSwyNSwyNiwyNiwyNywyNywyOCwyOCwyOSwyOSw2NCw2NF07Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixuLG8scCxxLHIscyl7dmFyIHQsdSx2LHcseCx5LHosQSxCLEM9cy5iaXRzLEQ9MCxFPTAsRj0wLEc9MCxIPTAsST0wLEo9MCxLPTAsTD0wLE09MCxOPW51bGwsTz0wLFA9bmV3IGMuQnVmMTYoZCsxKSxRPW5ldyBjLkJ1ZjE2KGQrMSksUj1udWxsLFM9MDtmb3IoRD0wO2Q+PUQ7RCsrKVBbRF09MDtmb3IoRT0wO28+RTtFKyspUFtiW24rRV1dKys7Zm9yKEg9QyxHPWQ7Rz49MSYmMD09PVBbR107Ry0tKTtpZihIPkcmJihIPUcpLDA9PT1HKXJldHVybiBwW3ErK109MjA5NzE1MjAscFtxKytdPTIwOTcxNTIwLHMuYml0cz0xLDA7Zm9yKEY9MTtHPkYmJjA9PT1QW0ZdO0YrKyk7Zm9yKEY+SCYmKEg9RiksSz0xLEQ9MTtkPj1EO0QrKylpZihLPDw9MSxLLT1QW0RdLDA+SylyZXR1cm4tMTtpZihLPjAmJihhPT09Z3x8MSE9PUcpKXJldHVybi0xO2ZvcihRWzFdPTAsRD0xO2Q+RDtEKyspUVtEKzFdPVFbRF0rUFtEXTtmb3IoRT0wO28+RTtFKyspMCE9PWJbbitFXSYmKHJbUVtiW24rRV1dKytdPUUpO2lmKGE9PT1nPyhOPVI9cix5PTE5KTphPT09aD8oTj1qLE8tPTI1NyxSPWssUy09MjU3LHk9MjU2KTooTj1sLFI9bSx5PS0xKSxNPTAsRT0wLEQ9Rix4PXEsST1ILEo9MCx2PS0xLEw9MTw8SCx3PUwtMSxhPT09aCYmTD5lfHxhPT09aSYmTD5mKXJldHVybiAxO2Zvcih2YXIgVD0wOzspe1QrKyx6PUQtSixyW0VdPHk/KEE9MCxCPXJbRV0pOnJbRV0+eT8oQT1SW1MrcltFXV0sQj1OW08rcltFXV0pOihBPTk2LEI9MCksdD0xPDxELUosdT0xPDxJLEY9dTtkbyB1LT10LHBbeCsoTT4+SikrdV09ejw8MjR8QTw8MTZ8QnwwO3doaWxlKDAhPT11KTtmb3IodD0xPDxELTE7TSZ0Oyl0Pj49MTtpZigwIT09dD8oTSY9dC0xLE0rPXQpOk09MCxFKyssMD09PS0tUFtEXSl7aWYoRD09PUcpYnJlYWs7RD1iW24rcltFXV19aWYoRD5IJiYoTSZ3KSE9PXYpe2ZvcigwPT09SiYmKEo9SCkseCs9RixJPUQtSixLPTE8PEk7Rz5JK0omJihLLT1QW0krSl0sISgwPj1LKSk7KUkrKyxLPDw9MTtpZihMKz0xPDxJLGE9PT1oJiZMPmV8fGE9PT1pJiZMPmYpcmV0dXJuIDE7dj1NJncscFt2XT1IPDwyNHxJPDwxNnx4LXF8MH19cmV0dXJuIDAhPT1NJiYocFt4K01dPUQtSjw8MjR8NjQ8PDE2fDApLHMuYml0cz1ILDB9fSx7Ii4uL3V0aWxzL2NvbW1vbiI6Mjd9XSwzNzpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7Yi5leHBvcnRzPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn19LHt9XSwzODpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEpe2Zvcih2YXIgYj1hLmxlbmd0aDstLWI+PTA7KWFbYl09MH1mdW5jdGlvbiBlKGEpe3JldHVybiAyNTY+YT9nYlthXTpnYlsyNTYrKGE+Pj43KV19ZnVuY3Rpb24gZihhLGIpe2EucGVuZGluZ19idWZbYS5wZW5kaW5nKytdPTI1NSZiLGEucGVuZGluZ19idWZbYS5wZW5kaW5nKytdPWI+Pj44JjI1NX1mdW5jdGlvbiBnKGEsYixjKXthLmJpX3ZhbGlkPlYtYz8oYS5iaV9idWZ8PWI8PGEuYmlfdmFsaWQmNjU1MzUsZihhLGEuYmlfYnVmKSxhLmJpX2J1Zj1iPj5WLWEuYmlfdmFsaWQsYS5iaV92YWxpZCs9Yy1WKTooYS5iaV9idWZ8PWI8PGEuYmlfdmFsaWQmNjU1MzUsYS5iaV92YWxpZCs9Yyl9ZnVuY3Rpb24gaChhLGIsYyl7ZyhhLGNbMipiXSxjWzIqYisxXSl9ZnVuY3Rpb24gaShhLGIpe3ZhciBjPTA7ZG8gY3w9MSZhLGE+Pj49MSxjPDw9MTt3aGlsZSgtLWI+MCk7cmV0dXJuIGM+Pj4xfWZ1bmN0aW9uIGooYSl7MTY9PT1hLmJpX3ZhbGlkPyhmKGEsYS5iaV9idWYpLGEuYmlfYnVmPTAsYS5iaV92YWxpZD0wKTphLmJpX3ZhbGlkPj04JiYoYS5wZW5kaW5nX2J1ZlthLnBlbmRpbmcrK109MjU1JmEuYmlfYnVmLGEuYmlfYnVmPj49OCxhLmJpX3ZhbGlkLT04KX1mdW5jdGlvbiBrKGEsYil7dmFyIGMsZCxlLGYsZyxoLGk9Yi5keW5fdHJlZSxqPWIubWF4X2NvZGUsaz1iLnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxsPWIuc3RhdF9kZXNjLmhhc19zdHJlZSxtPWIuc3RhdF9kZXNjLmV4dHJhX2JpdHMsbj1iLnN0YXRfZGVzYy5leHRyYV9iYXNlLG89Yi5zdGF0X2Rlc2MubWF4X2xlbmd0aCxwPTA7Zm9yKGY9MDtVPj1mO2YrKylhLmJsX2NvdW50W2ZdPTA7Zm9yKGlbMiphLmhlYXBbYS5oZWFwX21heF0rMV09MCxjPWEuaGVhcF9tYXgrMTtUPmM7YysrKWQ9YS5oZWFwW2NdLGY9aVsyKmlbMipkKzFdKzFdKzEsZj5vJiYoZj1vLHArKyksaVsyKmQrMV09ZixkPmp8fChhLmJsX2NvdW50W2ZdKyssZz0wLGQ+PW4mJihnPW1bZC1uXSksaD1pWzIqZF0sYS5vcHRfbGVuKz1oKihmK2cpLGwmJihhLnN0YXRpY19sZW4rPWgqKGtbMipkKzFdK2cpKSk7aWYoMCE9PXApe2Rve2ZvcihmPW8tMTswPT09YS5ibF9jb3VudFtmXTspZi0tO2EuYmxfY291bnRbZl0tLSxhLmJsX2NvdW50W2YrMV0rPTIsYS5ibF9jb3VudFtvXS0tLHAtPTJ9d2hpbGUocD4wKTtmb3IoZj1vOzAhPT1mO2YtLSlmb3IoZD1hLmJsX2NvdW50W2ZdOzAhPT1kOyllPWEuaGVhcFstLWNdLGU+anx8KGlbMiplKzFdIT09ZiYmKGEub3B0X2xlbis9KGYtaVsyKmUrMV0pKmlbMiplXSxpWzIqZSsxXT1mKSxkLS0pfX1mdW5jdGlvbiBsKGEsYixjKXt2YXIgZCxlLGY9bmV3IEFycmF5KFUrMSksZz0wO2ZvcihkPTE7VT49ZDtkKyspZltkXT1nPWcrY1tkLTFdPDwxO2ZvcihlPTA7Yj49ZTtlKyspe3ZhciBoPWFbMiplKzFdOzAhPT1oJiYoYVsyKmVdPWkoZltoXSsrLGgpKX19ZnVuY3Rpb24gbSgpe3ZhciBhLGIsYyxkLGUsZj1uZXcgQXJyYXkoVSsxKTtmb3IoYz0wLGQ9MDtPLTE+ZDtkKyspZm9yKGliW2RdPWMsYT0wO2E8MTw8X1tkXTthKyspaGJbYysrXT1kO2ZvcihoYltjLTFdPWQsZT0wLGQ9MDsxNj5kO2QrKylmb3IoamJbZF09ZSxhPTA7YTwxPDxhYltkXTthKyspZ2JbZSsrXT1kO2ZvcihlPj49NztSPmQ7ZCsrKWZvcihqYltkXT1lPDw3LGE9MDthPDE8PGFiW2RdLTc7YSsrKWdiWzI1NitlKytdPWQ7Zm9yKGI9MDtVPj1iO2IrKylmW2JdPTA7Zm9yKGE9MDsxNDM+PWE7KWViWzIqYSsxXT04LGErKyxmWzhdKys7Zm9yKDsyNTU+PWE7KWViWzIqYSsxXT05LGErKyxmWzldKys7Zm9yKDsyNzk+PWE7KWViWzIqYSsxXT03LGErKyxmWzddKys7Zm9yKDsyODc+PWE7KWViWzIqYSsxXT04LGErKyxmWzhdKys7Zm9yKGwoZWIsUSsxLGYpLGE9MDtSPmE7YSsrKWZiWzIqYSsxXT01LGZiWzIqYV09aShhLDUpO2tiPW5ldyBuYihlYixfLFArMSxRLFUpLGxiPW5ldyBuYihmYixhYiwwLFIsVSksbWI9bmV3IG5iKG5ldyBBcnJheSgwKSxiYiwwLFMsVyl9ZnVuY3Rpb24gbihhKXt2YXIgYjtmb3IoYj0wO1E+YjtiKyspYS5keW5fbHRyZWVbMipiXT0wO2ZvcihiPTA7Uj5iO2IrKylhLmR5bl9kdHJlZVsyKmJdPTA7Zm9yKGI9MDtTPmI7YisrKWEuYmxfdHJlZVsyKmJdPTA7YS5keW5fbHRyZWVbMipYXT0xLGEub3B0X2xlbj1hLnN0YXRpY19sZW49MCxhLmxhc3RfbGl0PWEubWF0Y2hlcz0wfWZ1bmN0aW9uIG8oYSl7YS5iaV92YWxpZD44P2YoYSxhLmJpX2J1Zik6YS5iaV92YWxpZD4wJiYoYS5wZW5kaW5nX2J1ZlthLnBlbmRpbmcrK109YS5iaV9idWYpLGEuYmlfYnVmPTAsYS5iaV92YWxpZD0wfWZ1bmN0aW9uIHAoYSxiLGMsZCl7byhhKSxkJiYoZihhLGMpLGYoYSx+YykpLEUuYXJyYXlTZXQoYS5wZW5kaW5nX2J1ZixhLndpbmRvdyxiLGMsYS5wZW5kaW5nKSxhLnBlbmRpbmcrPWN9ZnVuY3Rpb24gcShhLGIsYyxkKXt2YXIgZT0yKmIsZj0yKmM7cmV0dXJuIGFbZV08YVtmXXx8YVtlXT09PWFbZl0mJmRbYl08PWRbY119ZnVuY3Rpb24gcihhLGIsYyl7Zm9yKHZhciBkPWEuaGVhcFtjXSxlPWM8PDE7ZTw9YS5oZWFwX2xlbiYmKGU8YS5oZWFwX2xlbiYmcShiLGEuaGVhcFtlKzFdLGEuaGVhcFtlXSxhLmRlcHRoKSYmZSsrLCFxKGIsZCxhLmhlYXBbZV0sYS5kZXB0aCkpOylhLmhlYXBbY109YS5oZWFwW2VdLGM9ZSxlPDw9MTthLmhlYXBbY109ZH1mdW5jdGlvbiBzKGEsYixjKXt2YXIgZCxmLGksaixrPTA7aWYoMCE9PWEubGFzdF9saXQpZG8gZD1hLnBlbmRpbmdfYnVmW2EuZF9idWYrMiprXTw8OHxhLnBlbmRpbmdfYnVmW2EuZF9idWYrMiprKzFdLGY9YS5wZW5kaW5nX2J1ZlthLmxfYnVmK2tdLGsrKywwPT09ZD9oKGEsZixiKTooaT1oYltmXSxoKGEsaStQKzEsYiksaj1fW2ldLDAhPT1qJiYoZi09aWJbaV0sZyhhLGYsaikpLGQtLSxpPWUoZCksaChhLGksYyksaj1hYltpXSwwIT09aiYmKGQtPWpiW2ldLGcoYSxkLGopKSk7d2hpbGUoazxhLmxhc3RfbGl0KTtoKGEsWCxiKX1mdW5jdGlvbiB0KGEsYil7dmFyIGMsZCxlLGY9Yi5keW5fdHJlZSxnPWIuc3RhdF9kZXNjLnN0YXRpY190cmVlLGg9Yi5zdGF0X2Rlc2MuaGFzX3N0cmVlLGk9Yi5zdGF0X2Rlc2MuZWxlbXMsaj0tMTtmb3IoYS5oZWFwX2xlbj0wLGEuaGVhcF9tYXg9VCxjPTA7aT5jO2MrKykwIT09ZlsyKmNdPyhhLmhlYXBbKythLmhlYXBfbGVuXT1qPWMsYS5kZXB0aFtjXT0wKTpmWzIqYysxXT0wO2Zvcig7YS5oZWFwX2xlbjwyOyllPWEuaGVhcFsrK2EuaGVhcF9sZW5dPTI+aj8rK2o6MCxmWzIqZV09MSxhLmRlcHRoW2VdPTAsYS5vcHRfbGVuLS0saCYmKGEuc3RhdGljX2xlbi09Z1syKmUrMV0pO2ZvcihiLm1heF9jb2RlPWosYz1hLmhlYXBfbGVuPj4xO2M+PTE7Yy0tKXIoYSxmLGMpO2U9aTtkbyBjPWEuaGVhcFsxXSxhLmhlYXBbMV09YS5oZWFwW2EuaGVhcF9sZW4tLV0scihhLGYsMSksZD1hLmhlYXBbMV0sYS5oZWFwWy0tYS5oZWFwX21heF09YyxhLmhlYXBbLS1hLmhlYXBfbWF4XT1kLGZbMiplXT1mWzIqY10rZlsyKmRdLGEuZGVwdGhbZV09KGEuZGVwdGhbY10+PWEuZGVwdGhbZF0/YS5kZXB0aFtjXTphLmRlcHRoW2RdKSsxLGZbMipjKzFdPWZbMipkKzFdPWUsYS5oZWFwWzFdPWUrKyxyKGEsZiwxKTt3aGlsZShhLmhlYXBfbGVuPj0yKTthLmhlYXBbLS1hLmhlYXBfbWF4XT1hLmhlYXBbMV0sayhhLGIpLGwoZixqLGEuYmxfY291bnQpfWZ1bmN0aW9uIHUoYSxiLGMpe3ZhciBkLGUsZj0tMSxnPWJbMV0saD0wLGk9NyxqPTQ7Zm9yKDA9PT1nJiYoaT0xMzgsaj0zKSxiWzIqKGMrMSkrMV09NjU1MzUsZD0wO2M+PWQ7ZCsrKWU9ZyxnPWJbMiooZCsxKSsxXSwrK2g8aSYmZT09PWd8fChqPmg/YS5ibF90cmVlWzIqZV0rPWg6MCE9PWU/KGUhPT1mJiZhLmJsX3RyZWVbMiplXSsrLGEuYmxfdHJlZVsyKlldKyspOjEwPj1oP2EuYmxfdHJlZVsyKlpdKys6YS5ibF90cmVlWzIqJF0rKyxoPTAsZj1lLDA9PT1nPyhpPTEzOCxqPTMpOmU9PT1nPyhpPTYsaj0zKTooaT03LGo9NCkpfWZ1bmN0aW9uIHYoYSxiLGMpe3ZhciBkLGUsZj0tMSxpPWJbMV0saj0wLGs9NyxsPTQ7Zm9yKDA9PT1pJiYoaz0xMzgsbD0zKSxkPTA7Yz49ZDtkKyspaWYoZT1pLGk9YlsyKihkKzEpKzFdLCEoKytqPGsmJmU9PT1pKSl7aWYobD5qKXtkbyBoKGEsZSxhLmJsX3RyZWUpO3doaWxlKDAhPT0tLWopfWVsc2UgMCE9PWU/KGUhPT1mJiYoaChhLGUsYS5ibF90cmVlKSxqLS0pLGgoYSxZLGEuYmxfdHJlZSksZyhhLGotMywyKSk6MTA+PWo/KGgoYSxaLGEuYmxfdHJlZSksZyhhLGotMywzKSk6KGgoYSwkLGEuYmxfdHJlZSksZyhhLGotMTEsNykpO2o9MCxmPWUsMD09PWk/KGs9MTM4LGw9Myk6ZT09PWk/KGs9NixsPTMpOihrPTcsbD00KX19ZnVuY3Rpb24gdyhhKXt2YXIgYjtmb3IodShhLGEuZHluX2x0cmVlLGEubF9kZXNjLm1heF9jb2RlKSx1KGEsYS5keW5fZHRyZWUsYS5kX2Rlc2MubWF4X2NvZGUpLHQoYSxhLmJsX2Rlc2MpLGI9Uy0xO2I+PTMmJjA9PT1hLmJsX3RyZWVbMipjYltiXSsxXTtiLS0pO3JldHVybiBhLm9wdF9sZW4rPTMqKGIrMSkrNSs1KzQsYn1mdW5jdGlvbiB4KGEsYixjLGQpe3ZhciBlO2ZvcihnKGEsYi0yNTcsNSksZyhhLGMtMSw1KSxnKGEsZC00LDQpLGU9MDtkPmU7ZSsrKWcoYSxhLmJsX3RyZWVbMipjYltlXSsxXSwzKTt2KGEsYS5keW5fbHRyZWUsYi0xKSx2KGEsYS5keW5fZHRyZWUsYy0xKX1mdW5jdGlvbiB5KGEpe3ZhciBiLGM9NDA5MzYyNDQ0Nztmb3IoYj0wOzMxPj1iO2IrKyxjPj4+PTEpaWYoMSZjJiYwIT09YS5keW5fbHRyZWVbMipiXSlyZXR1cm4gRztpZigwIT09YS5keW5fbHRyZWVbMThdfHwwIT09YS5keW5fbHRyZWVbMjBdfHwwIT09YS5keW5fbHRyZWVbMjZdKXJldHVybiBIO2ZvcihiPTMyO1A+YjtiKyspaWYoMCE9PWEuZHluX2x0cmVlWzIqYl0pcmV0dXJuIEg7cmV0dXJuIEd9ZnVuY3Rpb24geihhKXtwYnx8KG0oKSxwYj0hMCksYS5sX2Rlc2M9bmV3IG9iKGEuZHluX2x0cmVlLGtiKSxhLmRfZGVzYz1uZXcgb2IoYS5keW5fZHRyZWUsbGIpLGEuYmxfZGVzYz1uZXcgb2IoYS5ibF90cmVlLG1iKSxhLmJpX2J1Zj0wLGEuYmlfdmFsaWQ9MCxuKGEpfWZ1bmN0aW9uIEEoYSxiLGMsZCl7ZyhhLChKPDwxKSsoZD8xOjApLDMpLHAoYSxiLGMsITApfWZ1bmN0aW9uIEIoYSl7ZyhhLEs8PDEsMyksaChhLFgsZWIpLGooYSl9ZnVuY3Rpb24gQyhhLGIsYyxkKXt2YXIgZSxmLGg9MDthLmxldmVsPjA/KGEuc3RybS5kYXRhX3R5cGU9PT1JJiYoYS5zdHJtLmRhdGFfdHlwZT15KGEpKSx0KGEsYS5sX2Rlc2MpLHQoYSxhLmRfZGVzYyksaD13KGEpLGU9YS5vcHRfbGVuKzMrNz4+PjMsZj1hLnN0YXRpY19sZW4rMys3Pj4+MyxlPj1mJiYoZT1mKSk6ZT1mPWMrNSxlPj1jKzQmJi0xIT09Yj9BKGEsYixjLGQpOmEuc3RyYXRlZ3k9PT1GfHxmPT09ZT8oZyhhLChLPDwxKSsoZD8xOjApLDMpLHMoYSxlYixmYikpOihnKGEsKEw8PDEpKyhkPzE6MCksMykseChhLGEubF9kZXNjLm1heF9jb2RlKzEsYS5kX2Rlc2MubWF4X2NvZGUrMSxoKzEpLHMoYSxhLmR5bl9sdHJlZSxhLmR5bl9kdHJlZSkpLG4oYSksZCYmbyhhKX1mdW5jdGlvbiBEKGEsYixjKXtyZXR1cm4gYS5wZW5kaW5nX2J1ZlthLmRfYnVmKzIqYS5sYXN0X2xpdF09Yj4+PjgmMjU1LGEucGVuZGluZ19idWZbYS5kX2J1ZisyKmEubGFzdF9saXQrMV09MjU1JmIsYS5wZW5kaW5nX2J1ZlthLmxfYnVmK2EubGFzdF9saXRdPTI1NSZjLGEubGFzdF9saXQrKywwPT09Yj9hLmR5bl9sdHJlZVsyKmNdKys6KGEubWF0Y2hlcysrLGItLSxhLmR5bl9sdHJlZVsyKihoYltjXStQKzEpXSsrLGEuZHluX2R0cmVlWzIqZShiKV0rKyksYS5sYXN0X2xpdD09PWEubGl0X2J1ZnNpemUtMX12YXIgRT1hKCIuLi91dGlscy9jb21tb24iKSxGPTQsRz0wLEg9MSxJPTIsSj0wLEs9MSxMPTIsTT0zLE49MjU4LE89MjksUD0yNTYsUT1QKzErTyxSPTMwLFM9MTksVD0yKlErMSxVPTE1LFY9MTYsVz03LFg9MjU2LFk9MTYsWj0xNywkPTE4LF89WzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMF0sYWI9WzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNdLGJiPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XSxjYj1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0sZGI9NTEyLGViPW5ldyBBcnJheSgyKihRKzIpKTtkKGViKTt2YXIgZmI9bmV3IEFycmF5KDIqUik7ZChmYik7dmFyIGdiPW5ldyBBcnJheShkYik7ZChnYik7dmFyIGhiPW5ldyBBcnJheShOLU0rMSk7ZChoYik7dmFyIGliPW5ldyBBcnJheShPKTtkKGliKTt2YXIgamI9bmV3IEFycmF5KFIpO2QoamIpO3ZhciBrYixsYixtYixuYj1mdW5jdGlvbihhLGIsYyxkLGUpe3RoaXMuc3RhdGljX3RyZWU9YSx0aGlzLmV4dHJhX2JpdHM9Yix0aGlzLmV4dHJhX2Jhc2U9Yyx0aGlzLmVsZW1zPWQsdGhpcy5tYXhfbGVuZ3RoPWUsdGhpcy5oYXNfc3RyZWU9YSYmYS5sZW5ndGh9LG9iPWZ1bmN0aW9uKGEsYil7dGhpcy5keW5fdHJlZT1hLHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz1ifSxwYj0hMTtjLl90cl9pbml0PXosYy5fdHJfc3RvcmVkX2Jsb2NrPUEsYy5fdHJfZmx1c2hfYmxvY2s9QyxjLl90cl90YWxseT1ELGMuX3RyX2FsaWduPUJ9LHsiLi4vdXRpbHMvY29tbW9uIjoyN31dLDM5OltmdW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjKCl7dGhpcy5pbnB1dD1udWxsLHRoaXMubmV4dF9pbj0wLHRoaXMuYXZhaWxfaW49MCx0aGlzLnRvdGFsX2luPTAsdGhpcy5vdXRwdXQ9bnVsbCx0aGlzLm5leHRfb3V0PTAsdGhpcy5hdmFpbF9vdXQ9MCx0aGlzLnRvdGFsX291dD0wLHRoaXMubXNnPSIiLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmRhdGFfdHlwZT0yLHRoaXMuYWRsZXI9MH1iLmV4cG9ydHM9Y30se31dfSx7fSxbOV0pKDkpfSk7CgovKiEKICAgQ29weXJpZ2h0IDIwMDgtMjAxOSBTcHJ5TWVkaWEgTHRkLgoKIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgYXZhaWxhYmxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKICAgTUlUIGxpY2Vuc2UgLSBodHRwOi8vZGF0YXRhYmxlcy5uZXQvbGljZW5zZQoKIFRoaXMgc291cmNlIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgbGljZW5zZSBmaWxlcyBmb3IgZGV0YWlscy4KCiBGb3IgZGV0YWlscyBwbGVhc2UgcmVmZXIgdG86IGh0dHA6Ly93d3cuZGF0YXRhYmxlcy5uZXQKIERhdGFUYWJsZXMgMS4xMC4yMAogwqkyMDA4LTIwMTkgU3ByeU1lZGlhIEx0ZCAtIGRhdGF0YWJsZXMubmV0L2xpY2Vuc2UKKi8KdmFyICRqc2NvbXA9JGpzY29tcHx8e307JGpzY29tcC5zY29wZT17fTskanNjb21wLmZpbmRJbnRlcm5hbD1mdW5jdGlvbihmLHoseSl7ZiBpbnN0YW5jZW9mIFN0cmluZyYmKGY9U3RyaW5nKGYpKTtmb3IodmFyIHA9Zi5sZW5ndGgsSD0wO0g8cDtIKyspe3ZhciBMPWZbSF07aWYoei5jYWxsKHksTCxILGYpKXJldHVybntpOkgsdjpMfX1yZXR1cm57aTotMSx2OnZvaWQgMH19OyRqc2NvbXAuQVNTVU1FX0VTNT0hMTskanNjb21wLkFTU1VNRV9OT19OQVRJVkVfTUFQPSExOyRqc2NvbXAuQVNTVU1FX05PX05BVElWRV9TRVQ9ITE7JGpzY29tcC5TSU1QTEVfRlJPVU5EX1BPTFlGSUxMPSExOwokanNjb21wLmRlZmluZVByb3BlcnR5PSRqc2NvbXAuQVNTVU1FX0VTNXx8ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihmLHoseSl7ZiE9QXJyYXkucHJvdG90eXBlJiZmIT1PYmplY3QucHJvdG90eXBlJiYoZlt6XT15LnZhbHVlKX07JGpzY29tcC5nZXRHbG9iYWw9ZnVuY3Rpb24oZil7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdz09PWY/ZjoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmbnVsbCE9Z2xvYmFsP2dsb2JhbDpmfTskanNjb21wLmdsb2JhbD0kanNjb21wLmdldEdsb2JhbCh0aGlzKTsKJGpzY29tcC5wb2x5ZmlsbD1mdW5jdGlvbihmLHoseSxwKXtpZih6KXt5PSRqc2NvbXAuZ2xvYmFsO2Y9Zi5zcGxpdCgiLiIpO2ZvcihwPTA7cDxmLmxlbmd0aC0xO3ArKyl7dmFyIEg9ZltwXTtIIGluIHl8fCh5W0hdPXt9KTt5PXlbSF19Zj1mW2YubGVuZ3RoLTFdO3A9eVtmXTt6PXoocCk7eiE9cCYmbnVsbCE9eiYmJGpzY29tcC5kZWZpbmVQcm9wZXJ0eSh5LGYse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp6fSl9fTskanNjb21wLnBvbHlmaWxsKCJBcnJheS5wcm90b3R5cGUuZmluZCIsZnVuY3Rpb24oZil7cmV0dXJuIGY/ZjpmdW5jdGlvbihmLHkpe3JldHVybiAkanNjb21wLmZpbmRJbnRlcm5hbCh0aGlzLGYseSkudn19LCJlczYiLCJlczMiKTsKKGZ1bmN0aW9uKGYpeyJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImpxdWVyeSJdLGZ1bmN0aW9uKHope3JldHVybiBmKHosd2luZG93LGRvY3VtZW50KX0pOiJvYmplY3QiPT09dHlwZW9mIGV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24oeix5KXt6fHwoej13aW5kb3cpO3l8fCh5PSJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdz9yZXF1aXJlKCJqcXVlcnkiKTpyZXF1aXJlKCJqcXVlcnkiKSh6KSk7cmV0dXJuIGYoeSx6LHouZG9jdW1lbnQpfTpmKGpRdWVyeSx3aW5kb3csZG9jdW1lbnQpfSkoZnVuY3Rpb24oZix6LHkscCl7ZnVuY3Rpb24gSChhKXt2YXIgYixjLGQ9e307Zi5lYWNoKGEsZnVuY3Rpb24oZSxoKXsoYj1lLm1hdGNoKC9eKFteQS1aXSs/KShbQS1aXSkvKSkmJi0xIT09ImEgYWEgYWkgYW8gYXMgYiBmbiBpIG0gbyBzICIuaW5kZXhPZihiWzFdKyIgIikmJihjPWUucmVwbGFjZShiWzBdLGJbMl0udG9Mb3dlckNhc2UoKSksCmRbY109ZSwibyI9PT1iWzFdJiZIKGFbZV0pKX0pO2EuX2h1bmdhcmlhbk1hcD1kfWZ1bmN0aW9uIEwoYSxiLGMpe2EuX2h1bmdhcmlhbk1hcHx8SChhKTt2YXIgZDtmLmVhY2goYixmdW5jdGlvbihlLGgpe2Q9YS5faHVuZ2FyaWFuTWFwW2VdO2Q9PT1wfHwhYyYmYltkXSE9PXB8fCgibyI9PT1kLmNoYXJBdCgwKT8oYltkXXx8KGJbZF09e30pLGYuZXh0ZW5kKCEwLGJbZF0sYltlXSksTChhW2RdLGJbZF0sYykpOmJbZF09YltlXSl9KX1mdW5jdGlvbiBHYShhKXt2YXIgYj1xLmRlZmF1bHRzLm9MYW5ndWFnZSxjPWIuc0RlY2ltYWw7YyYmSGEoYyk7aWYoYSl7dmFyIGQ9YS5zWmVyb1JlY29yZHM7IWEuc0VtcHR5VGFibGUmJmQmJiJObyBkYXRhIGF2YWlsYWJsZSBpbiB0YWJsZSI9PT1iLnNFbXB0eVRhYmxlJiZNKGEsYSwic1plcm9SZWNvcmRzIiwic0VtcHR5VGFibGUiKTshYS5zTG9hZGluZ1JlY29yZHMmJmQmJiJMb2FkaW5nLi4uIj09PWIuc0xvYWRpbmdSZWNvcmRzJiZNKGEsYSwKInNaZXJvUmVjb3JkcyIsInNMb2FkaW5nUmVjb3JkcyIpO2Euc0luZm9UaG91c2FuZHMmJihhLnNUaG91c2FuZHM9YS5zSW5mb1Rob3VzYW5kcyk7KGE9YS5zRGVjaW1hbCkmJmMhPT1hJiZIYShhKX19ZnVuY3Rpb24gamIoYSl7RihhLCJvcmRlcmluZyIsImJTb3J0Iik7RihhLCJvcmRlck11bHRpIiwiYlNvcnRNdWx0aSIpO0YoYSwib3JkZXJDbGFzc2VzIiwiYlNvcnRDbGFzc2VzIik7RihhLCJvcmRlckNlbGxzVG9wIiwiYlNvcnRDZWxsc1RvcCIpO0YoYSwib3JkZXIiLCJhYVNvcnRpbmciKTtGKGEsIm9yZGVyRml4ZWQiLCJhYVNvcnRpbmdGaXhlZCIpO0YoYSwicGFnaW5nIiwiYlBhZ2luYXRlIik7RihhLCJwYWdpbmdUeXBlIiwic1BhZ2luYXRpb25UeXBlIik7RihhLCJwYWdlTGVuZ3RoIiwiaURpc3BsYXlMZW5ndGgiKTtGKGEsInNlYXJjaGluZyIsImJGaWx0ZXIiKTsiYm9vbGVhbiI9PT10eXBlb2YgYS5zU2Nyb2xsWCYmKGEuc1Njcm9sbFg9YS5zU2Nyb2xsWD8iMTAwJSI6CiIiKTsiYm9vbGVhbiI9PT10eXBlb2YgYS5zY3JvbGxYJiYoYS5zY3JvbGxYPWEuc2Nyb2xsWD8iMTAwJSI6IiIpO2lmKGE9YS5hb1NlYXJjaENvbHMpZm9yKHZhciBiPTAsYz1hLmxlbmd0aDtiPGM7YisrKWFbYl0mJkwocS5tb2RlbHMub1NlYXJjaCxhW2JdKX1mdW5jdGlvbiBrYihhKXtGKGEsIm9yZGVyYWJsZSIsImJTb3J0YWJsZSIpO0YoYSwib3JkZXJEYXRhIiwiYURhdGFTb3J0Iik7RihhLCJvcmRlclNlcXVlbmNlIiwiYXNTb3J0aW5nIik7RihhLCJvcmRlckRhdGFUeXBlIiwic29ydERhdGFUeXBlIik7dmFyIGI9YS5hRGF0YVNvcnQ7Im51bWJlciIhPT10eXBlb2YgYnx8Zi5pc0FycmF5KGIpfHwoYS5hRGF0YVNvcnQ9W2JdKX1mdW5jdGlvbiBsYihhKXtpZighcS5fX2Jyb3dzZXIpe3ZhciBiPXt9O3EuX19icm93c2VyPWI7dmFyIGM9ZigiPGRpdi8+IikuY3NzKHtwb3NpdGlvbjoiZml4ZWQiLHRvcDowLGxlZnQ6LTEqZih6KS5zY3JvbGxMZWZ0KCksaGVpZ2h0OjEsd2lkdGg6MSwKb3ZlcmZsb3c6ImhpZGRlbiJ9KS5hcHBlbmQoZigiPGRpdi8+IikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoxLGxlZnQ6MSx3aWR0aDoxMDAsb3ZlcmZsb3c6InNjcm9sbCJ9KS5hcHBlbmQoZigiPGRpdi8+IikuY3NzKHt3aWR0aDoiMTAwJSIsaGVpZ2h0OjEwfSkpKS5hcHBlbmRUbygiYm9keSIpLGQ9Yy5jaGlsZHJlbigpLGU9ZC5jaGlsZHJlbigpO2IuYmFyV2lkdGg9ZFswXS5vZmZzZXRXaWR0aC1kWzBdLmNsaWVudFdpZHRoO2IuYlNjcm9sbE92ZXJzaXplPTEwMD09PWVbMF0ub2Zmc2V0V2lkdGgmJjEwMCE9PWRbMF0uY2xpZW50V2lkdGg7Yi5iU2Nyb2xsYmFyTGVmdD0xIT09TWF0aC5yb3VuZChlLm9mZnNldCgpLmxlZnQpO2IuYkJvdW5kaW5nPWNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg/ITA6ITE7Yy5yZW1vdmUoKX1mLmV4dGVuZChhLm9Ccm93c2VyLHEuX19icm93c2VyKTthLm9TY3JvbGwuaUJhcldpZHRoPXEuX19icm93c2VyLmJhcldpZHRofQpmdW5jdGlvbiBtYihhLGIsYyxkLGUsaCl7dmFyIGc9ITE7aWYoYyE9PXApe3ZhciBrPWM7Zz0hMH1mb3IoO2QhPT1lOylhLmhhc093blByb3BlcnR5KGQpJiYoaz1nP2IoayxhW2RdLGQsYSk6YVtkXSxnPSEwLGQrPWgpO3JldHVybiBrfWZ1bmN0aW9uIElhKGEsYil7dmFyIGM9cS5kZWZhdWx0cy5jb2x1bW4sZD1hLmFvQ29sdW1ucy5sZW5ndGg7Yz1mLmV4dGVuZCh7fSxxLm1vZGVscy5vQ29sdW1uLGMse25UaDpiP2I6eS5jcmVhdGVFbGVtZW50KCJ0aCIpLHNUaXRsZTpjLnNUaXRsZT9jLnNUaXRsZTpiP2IuaW5uZXJIVE1MOiIiLGFEYXRhU29ydDpjLmFEYXRhU29ydD9jLmFEYXRhU29ydDpbZF0sbURhdGE6Yy5tRGF0YT9jLm1EYXRhOmQsaWR4OmR9KTthLmFvQ29sdW1ucy5wdXNoKGMpO2M9YS5hb1ByZVNlYXJjaENvbHM7Y1tkXT1mLmV4dGVuZCh7fSxxLm1vZGVscy5vU2VhcmNoLGNbZF0pO21hKGEsZCxmKGIpLmRhdGEoKSl9ZnVuY3Rpb24gbWEoYSxiLGMpe2I9YS5hb0NvbHVtbnNbYl07CnZhciBkPWEub0NsYXNzZXMsZT1mKGIublRoKTtpZighYi5zV2lkdGhPcmlnKXtiLnNXaWR0aE9yaWc9ZS5hdHRyKCJ3aWR0aCIpfHxudWxsO3ZhciBoPShlLmF0dHIoInN0eWxlIil8fCIiKS5tYXRjaCgvd2lkdGg6XHMqKFxkK1tweGVtJV0rKS8pO2gmJihiLnNXaWR0aE9yaWc9aFsxXSl9YyE9PXAmJm51bGwhPT1jJiYoa2IoYyksTChxLmRlZmF1bHRzLmNvbHVtbixjLCEwKSxjLm1EYXRhUHJvcD09PXB8fGMubURhdGF8fChjLm1EYXRhPWMubURhdGFQcm9wKSxjLnNUeXBlJiYoYi5fc01hbnVhbFR5cGU9Yy5zVHlwZSksYy5jbGFzc05hbWUmJiFjLnNDbGFzcyYmKGMuc0NsYXNzPWMuY2xhc3NOYW1lKSxjLnNDbGFzcyYmZS5hZGRDbGFzcyhjLnNDbGFzcyksZi5leHRlbmQoYixjKSxNKGIsYywic1dpZHRoIiwic1dpZHRoT3JpZyIpLGMuaURhdGFTb3J0IT09cCYmKGIuYURhdGFTb3J0PVtjLmlEYXRhU29ydF0pLE0oYixjLCJhRGF0YVNvcnQiKSk7dmFyIGc9Yi5tRGF0YSxrPVUoZyksCmw9Yi5tUmVuZGVyP1UoYi5tUmVuZGVyKTpudWxsO2M9ZnVuY3Rpb24oYSl7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgYSYmLTEhPT1hLmluZGV4T2YoIkAiKX07Yi5fYkF0dHJTcmM9Zi5pc1BsYWluT2JqZWN0KGcpJiYoYyhnLnNvcnQpfHxjKGcudHlwZSl8fGMoZy5maWx0ZXIpKTtiLl9zZXR0ZXI9bnVsbDtiLmZuR2V0RGF0YT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9ayhhLGIscCxjKTtyZXR1cm4gbCYmYj9sKGQsYixhLGMpOmR9O2IuZm5TZXREYXRhPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gUShnKShhLGIsYyl9OyJudW1iZXIiIT09dHlwZW9mIGcmJihhLl9yb3dSZWFkT2JqZWN0PSEwKTthLm9GZWF0dXJlcy5iU29ydHx8KGIuYlNvcnRhYmxlPSExLGUuYWRkQ2xhc3MoZC5zU29ydGFibGVOb25lKSk7YT0tMSE9PWYuaW5BcnJheSgiYXNjIixiLmFzU29ydGluZyk7Yz0tMSE9PWYuaW5BcnJheSgiZGVzYyIsYi5hc1NvcnRpbmcpO2IuYlNvcnRhYmxlJiYoYXx8Yyk/YSYmIWM/KGIuc1NvcnRpbmdDbGFzcz0KZC5zU29ydGFibGVBc2MsYi5zU29ydGluZ0NsYXNzSlVJPWQuc1NvcnRKVUlBc2NBbGxvd2VkKTohYSYmYz8oYi5zU29ydGluZ0NsYXNzPWQuc1NvcnRhYmxlRGVzYyxiLnNTb3J0aW5nQ2xhc3NKVUk9ZC5zU29ydEpVSURlc2NBbGxvd2VkKTooYi5zU29ydGluZ0NsYXNzPWQuc1NvcnRhYmxlLGIuc1NvcnRpbmdDbGFzc0pVST1kLnNTb3J0SlVJKTooYi5zU29ydGluZ0NsYXNzPWQuc1NvcnRhYmxlTm9uZSxiLnNTb3J0aW5nQ2xhc3NKVUk9IiIpfWZ1bmN0aW9uIGFhKGEpe2lmKCExIT09YS5vRmVhdHVyZXMuYkF1dG9XaWR0aCl7dmFyIGI9YS5hb0NvbHVtbnM7SmEoYSk7Zm9yKHZhciBjPTAsZD1iLmxlbmd0aDtjPGQ7YysrKWJbY10ublRoLnN0eWxlLndpZHRoPWJbY10uc1dpZHRofWI9YS5vU2Nyb2xsOyIiPT09Yi5zWSYmIiI9PT1iLnNYfHxuYShhKTtBKGEsbnVsbCwiY29sdW1uLXNpemluZyIsW2FdKX1mdW5jdGlvbiBiYShhLGIpe2E9b2EoYSwiYlZpc2libGUiKTtyZXR1cm4ibnVtYmVyIj09PQp0eXBlb2YgYVtiXT9hW2JdOm51bGx9ZnVuY3Rpb24gY2EoYSxiKXthPW9hKGEsImJWaXNpYmxlIik7Yj1mLmluQXJyYXkoYixhKTtyZXR1cm4tMSE9PWI/YjpudWxsfWZ1bmN0aW9uIFcoYSl7dmFyIGI9MDtmLmVhY2goYS5hb0NvbHVtbnMsZnVuY3Rpb24oYSxkKXtkLmJWaXNpYmxlJiYibm9uZSIhPT1mKGQublRoKS5jc3MoImRpc3BsYXkiKSYmYisrfSk7cmV0dXJuIGJ9ZnVuY3Rpb24gb2EoYSxiKXt2YXIgYz1bXTtmLm1hcChhLmFvQ29sdW1ucyxmdW5jdGlvbihhLGUpe2FbYl0mJmMucHVzaChlKX0pO3JldHVybiBjfWZ1bmN0aW9uIEthKGEpe3ZhciBiPWEuYW9Db2x1bW5zLGM9YS5hb0RhdGEsZD1xLmV4dC50eXBlLmRldGVjdCxlLGgsZzt2YXIgaz0wO2ZvcihlPWIubGVuZ3RoO2s8ZTtrKyspe3ZhciBmPWJba107dmFyIG49W107aWYoIWYuc1R5cGUmJmYuX3NNYW51YWxUeXBlKWYuc1R5cGU9Zi5fc01hbnVhbFR5cGU7ZWxzZSBpZighZi5zVHlwZSl7dmFyIG09MDtmb3IoaD0KZC5sZW5ndGg7bTxoO20rKyl7dmFyIHc9MDtmb3IoZz1jLmxlbmd0aDt3PGc7dysrKXtuW3ddPT09cCYmKG5bd109SShhLHcsaywidHlwZSIpKTt2YXIgdT1kW21dKG5bd10sYSk7aWYoIXUmJm0hPT1kLmxlbmd0aC0xKWJyZWFrO2lmKCJodG1sIj09PXUpYnJlYWt9aWYodSl7Zi5zVHlwZT11O2JyZWFrfX1mLnNUeXBlfHwoZi5zVHlwZT0ic3RyaW5nIil9fX1mdW5jdGlvbiBuYihhLGIsYyxkKXt2YXIgZSxoLGcsaz1hLmFvQ29sdW1ucztpZihiKWZvcihlPWIubGVuZ3RoLTE7MDw9ZTtlLS0pe3ZhciBsPWJbZV07dmFyIG49bC50YXJnZXRzIT09cD9sLnRhcmdldHM6bC5hVGFyZ2V0cztmLmlzQXJyYXkobil8fChuPVtuXSk7dmFyIG09MDtmb3IoaD1uLmxlbmd0aDttPGg7bSsrKWlmKCJudW1iZXIiPT09dHlwZW9mIG5bbV0mJjA8PW5bbV0pe2Zvcig7ay5sZW5ndGg8PW5bbV07KUlhKGEpO2QoblttXSxsKX1lbHNlIGlmKCJudW1iZXIiPT09dHlwZW9mIG5bbV0mJjA+blttXSlkKGsubGVuZ3RoKwpuW21dLGwpO2Vsc2UgaWYoInN0cmluZyI9PT10eXBlb2YgblttXSl7dmFyIHc9MDtmb3IoZz1rLmxlbmd0aDt3PGc7dysrKSgiX2FsbCI9PW5bbV18fGYoa1t3XS5uVGgpLmhhc0NsYXNzKG5bbV0pKSYmZCh3LGwpfX1pZihjKWZvcihlPTAsYT1jLmxlbmd0aDtlPGE7ZSsrKWQoZSxjW2VdKX1mdW5jdGlvbiBSKGEsYixjLGQpe3ZhciBlPWEuYW9EYXRhLmxlbmd0aCxoPWYuZXh0ZW5kKCEwLHt9LHEubW9kZWxzLm9Sb3cse3NyYzpjPyJkb20iOiJkYXRhIixpZHg6ZX0pO2guX2FEYXRhPWI7YS5hb0RhdGEucHVzaChoKTtmb3IodmFyIGc9YS5hb0NvbHVtbnMsaz0wLGw9Zy5sZW5ndGg7azxsO2srKylnW2tdLnNUeXBlPW51bGw7YS5haURpc3BsYXlNYXN0ZXIucHVzaChlKTtiPWEucm93SWRGbihiKTtiIT09cCYmKGEuYUlkc1tiXT1oKTshYyYmYS5vRmVhdHVyZXMuYkRlZmVyUmVuZGVyfHxMYShhLGUsYyxkKTtyZXR1cm4gZX1mdW5jdGlvbiBwYShhLGIpe3ZhciBjO2IgaW5zdGFuY2VvZgpmfHwoYj1mKGIpKTtyZXR1cm4gYi5tYXAoZnVuY3Rpb24oYixlKXtjPU1hKGEsZSk7cmV0dXJuIFIoYSxjLmRhdGEsZSxjLmNlbGxzKX0pfWZ1bmN0aW9uIEkoYSxiLGMsZCl7dmFyIGU9YS5pRHJhdyxoPWEuYW9Db2x1bW5zW2NdLGc9YS5hb0RhdGFbYl0uX2FEYXRhLGs9aC5zRGVmYXVsdENvbnRlbnQsZj1oLmZuR2V0RGF0YShnLGQse3NldHRpbmdzOmEscm93OmIsY29sOmN9KTtpZihmPT09cClyZXR1cm4gYS5pRHJhd0Vycm9yIT1lJiZudWxsPT09ayYmKE8oYSwwLCJSZXF1ZXN0ZWQgdW5rbm93biBwYXJhbWV0ZXIgIisoImZ1bmN0aW9uIj09dHlwZW9mIGgubURhdGE/IntmdW5jdGlvbn0iOiInIitoLm1EYXRhKyInIikrIiBmb3Igcm93ICIrYisiLCBjb2x1bW4gIitjLDQpLGEuaURyYXdFcnJvcj1lKSxrO2lmKChmPT09Z3x8bnVsbD09PWYpJiZudWxsIT09ayYmZCE9PXApZj1rO2Vsc2UgaWYoImZ1bmN0aW9uIj09PXR5cGVvZiBmKXJldHVybiBmLmNhbGwoZyk7cmV0dXJuIG51bGw9PT0KZiYmImRpc3BsYXkiPT1kPyIiOmZ9ZnVuY3Rpb24gb2IoYSxiLGMsZCl7YS5hb0NvbHVtbnNbY10uZm5TZXREYXRhKGEuYW9EYXRhW2JdLl9hRGF0YSxkLHtzZXR0aW5nczphLHJvdzpiLGNvbDpjfSl9ZnVuY3Rpb24gTmEoYSl7cmV0dXJuIGYubWFwKGEubWF0Y2goLyhcXC58W15cLl0pKy9nKXx8WyIiXSxmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKC9cXFwuL2csIi4iKX0pfWZ1bmN0aW9uIFUoYSl7aWYoZi5pc1BsYWluT2JqZWN0KGEpKXt2YXIgYj17fTtmLmVhY2goYSxmdW5jdGlvbihhLGMpe2MmJihiW2FdPVUoYykpfSk7cmV0dXJuIGZ1bmN0aW9uKGEsYyxoLGcpe3ZhciBkPWJbY118fGIuXztyZXR1cm4gZCE9PXA/ZChhLGMsaCxnKTphfX1pZihudWxsPT09YSlyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGF9O2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYSlyZXR1cm4gZnVuY3Rpb24oYixjLGgsZyl7cmV0dXJuIGEoYixjLGgsZyl9O2lmKCJzdHJpbmciIT09dHlwZW9mIGF8fAotMT09PWEuaW5kZXhPZigiLiIpJiYtMT09PWEuaW5kZXhPZigiWyIpJiYtMT09PWEuaW5kZXhPZigiKCIpKXJldHVybiBmdW5jdGlvbihiLGMpe3JldHVybiBiW2FdfTt2YXIgYz1mdW5jdGlvbihhLGIsaCl7aWYoIiIhPT1oKXt2YXIgZD1OYShoKTtmb3IodmFyIGU9MCxsPWQubGVuZ3RoO2U8bDtlKyspe2g9ZFtlXS5tYXRjaChkYSk7dmFyIG49ZFtlXS5tYXRjaChYKTtpZihoKXtkW2VdPWRbZV0ucmVwbGFjZShkYSwiIik7IiIhPT1kW2VdJiYoYT1hW2RbZV1dKTtuPVtdO2Quc3BsaWNlKDAsZSsxKTtkPWQuam9pbigiLiIpO2lmKGYuaXNBcnJheShhKSlmb3IoZT0wLGw9YS5sZW5ndGg7ZTxsO2UrKyluLnB1c2goYyhhW2VdLGIsZCkpO2E9aFswXS5zdWJzdHJpbmcoMSxoWzBdLmxlbmd0aC0xKTthPSIiPT09YT9uOm4uam9pbihhKTticmVha31lbHNlIGlmKG4pe2RbZV09ZFtlXS5yZXBsYWNlKFgsIiIpO2E9YVtkW2VdXSgpO2NvbnRpbnVlfWlmKG51bGw9PT1hfHxhW2RbZV1dPT09CnApcmV0dXJuIHA7YT1hW2RbZV1dfX1yZXR1cm4gYX07cmV0dXJuIGZ1bmN0aW9uKGIsZSl7cmV0dXJuIGMoYixlLGEpfX1mdW5jdGlvbiBRKGEpe2lmKGYuaXNQbGFpbk9iamVjdChhKSlyZXR1cm4gUShhLl8pO2lmKG51bGw9PT1hKXJldHVybiBmdW5jdGlvbigpe307aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBhKXJldHVybiBmdW5jdGlvbihiLGQsZSl7YShiLCJzZXQiLGQsZSl9O2lmKCJzdHJpbmciIT09dHlwZW9mIGF8fC0xPT09YS5pbmRleE9mKCIuIikmJi0xPT09YS5pbmRleE9mKCJbIikmJi0xPT09YS5pbmRleE9mKCIoIikpcmV0dXJuIGZ1bmN0aW9uKGIsZCl7YlthXT1kfTt2YXIgYj1mdW5jdGlvbihhLGQsZSl7ZT1OYShlKTt2YXIgYz1lW2UubGVuZ3RoLTFdO2Zvcih2YXIgZyxrLGw9MCxuPWUubGVuZ3RoLTE7bDxuO2wrKyl7Zz1lW2xdLm1hdGNoKGRhKTtrPWVbbF0ubWF0Y2goWCk7aWYoZyl7ZVtsXT1lW2xdLnJlcGxhY2UoZGEsIiIpO2FbZVtsXV09W107Yz1lLnNsaWNlKCk7CmMuc3BsaWNlKDAsbCsxKTtnPWMuam9pbigiLiIpO2lmKGYuaXNBcnJheShkKSlmb3Ioaz0wLG49ZC5sZW5ndGg7azxuO2srKyljPXt9LGIoYyxkW2tdLGcpLGFbZVtsXV0ucHVzaChjKTtlbHNlIGFbZVtsXV09ZDtyZXR1cm59ayYmKGVbbF09ZVtsXS5yZXBsYWNlKFgsIiIpLGE9YVtlW2xdXShkKSk7aWYobnVsbD09PWFbZVtsXV18fGFbZVtsXV09PT1wKWFbZVtsXV09e307YT1hW2VbbF1dfWlmKGMubWF0Y2goWCkpYVtjLnJlcGxhY2UoWCwiIildKGQpO2Vsc2UgYVtjLnJlcGxhY2UoZGEsIiIpXT1kfTtyZXR1cm4gZnVuY3Rpb24oYyxkKXtyZXR1cm4gYihjLGQsYSl9fWZ1bmN0aW9uIE9hKGEpe3JldHVybiBKKGEuYW9EYXRhLCJfYURhdGEiKX1mdW5jdGlvbiBxYShhKXthLmFvRGF0YS5sZW5ndGg9MDthLmFpRGlzcGxheU1hc3Rlci5sZW5ndGg9MDthLmFpRGlzcGxheS5sZW5ndGg9MDthLmFJZHM9e319ZnVuY3Rpb24gcmEoYSxiLGMpe2Zvcih2YXIgZD0tMSxlPTAsaD1hLmxlbmd0aDtlPApoO2UrKylhW2VdPT1iP2Q9ZTphW2VdPmImJmFbZV0tLTsgLTEhPWQmJmM9PT1wJiZhLnNwbGljZShkLDEpfWZ1bmN0aW9uIGVhKGEsYixjLGQpe3ZhciBlPWEuYW9EYXRhW2JdLGgsZz1mdW5jdGlvbihjLGQpe2Zvcig7Yy5jaGlsZE5vZGVzLmxlbmd0aDspYy5yZW1vdmVDaGlsZChjLmZpcnN0Q2hpbGQpO2MuaW5uZXJIVE1MPUkoYSxiLGQsImRpc3BsYXkiKX07aWYoImRvbSIhPT1jJiYoYyYmImF1dG8iIT09Y3x8ImRvbSIhPT1lLnNyYykpe3ZhciBrPWUuYW5DZWxscztpZihrKWlmKGQhPT1wKWcoa1tkXSxkKTtlbHNlIGZvcihjPTAsaD1rLmxlbmd0aDtjPGg7YysrKWcoa1tjXSxjKX1lbHNlIGUuX2FEYXRhPU1hKGEsZSxkLGQ9PT1wP3A6ZS5fYURhdGEpLmRhdGE7ZS5fYVNvcnREYXRhPW51bGw7ZS5fYUZpbHRlckRhdGE9bnVsbDtnPWEuYW9Db2x1bW5zO2lmKGQhPT1wKWdbZF0uc1R5cGU9bnVsbDtlbHNle2M9MDtmb3IoaD1nLmxlbmd0aDtjPGg7YysrKWdbY10uc1R5cGU9bnVsbDsKUGEoYSxlKX19ZnVuY3Rpb24gTWEoYSxiLGMsZCl7dmFyIGU9W10saD1iLmZpcnN0Q2hpbGQsZyxrPTAsbCxuPWEuYW9Db2x1bW5zLG09YS5fcm93UmVhZE9iamVjdDtkPWQhPT1wP2Q6bT97fTpbXTt2YXIgdz1mdW5jdGlvbihhLGIpe2lmKCJzdHJpbmciPT09dHlwZW9mIGEpe3ZhciBjPWEuaW5kZXhPZigiQCIpOy0xIT09YyYmKGM9YS5zdWJzdHJpbmcoYysxKSxRKGEpKGQsYi5nZXRBdHRyaWJ1dGUoYykpKX19LHU9ZnVuY3Rpb24oYSl7aWYoYz09PXB8fGM9PT1rKWc9bltrXSxsPWYudHJpbShhLmlubmVySFRNTCksZyYmZy5fYkF0dHJTcmM/KFEoZy5tRGF0YS5fKShkLGwpLHcoZy5tRGF0YS5zb3J0LGEpLHcoZy5tRGF0YS50eXBlLGEpLHcoZy5tRGF0YS5maWx0ZXIsYSkpOm0/KGcuX3NldHRlcnx8KGcuX3NldHRlcj1RKGcubURhdGEpKSxnLl9zZXR0ZXIoZCxsKSk6ZFtrXT1sO2srK307aWYoaClmb3IoO2g7KXt2YXIgcT1oLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7aWYoIlREIj09CnF8fCJUSCI9PXEpdShoKSxlLnB1c2goaCk7aD1oLm5leHRTaWJsaW5nfWVsc2UgZm9yKGU9Yi5hbkNlbGxzLGg9MCxxPWUubGVuZ3RoO2g8cTtoKyspdShlW2hdKTsoYj1iLmZpcnN0Q2hpbGQ/YjpiLm5UcikmJihiPWIuZ2V0QXR0cmlidXRlKCJpZCIpKSYmUShhLnJvd0lkKShkLGIpO3JldHVybntkYXRhOmQsY2VsbHM6ZX19ZnVuY3Rpb24gTGEoYSxiLGMsZCl7dmFyIGU9YS5hb0RhdGFbYl0saD1lLl9hRGF0YSxnPVtdLGssbDtpZihudWxsPT09ZS5uVHIpe3ZhciBuPWN8fHkuY3JlYXRlRWxlbWVudCgidHIiKTtlLm5Ucj1uO2UuYW5DZWxscz1nO24uX0RUX1Jvd0luZGV4PWI7UGEoYSxlKTt2YXIgbT0wO2ZvcihrPWEuYW9Db2x1bW5zLmxlbmd0aDttPGs7bSsrKXt2YXIgdz1hLmFvQ29sdW1uc1ttXTt2YXIgcD0obD1jPyExOiEwKT95LmNyZWF0ZUVsZW1lbnQody5zQ2VsbFR5cGUpOmRbbV07cC5fRFRfQ2VsbEluZGV4PXtyb3c6Yixjb2x1bW46bX07Zy5wdXNoKHApO2lmKGx8fAohKGMmJiF3Lm1SZW5kZXImJncubURhdGE9PT1tfHxmLmlzUGxhaW5PYmplY3Qody5tRGF0YSkmJncubURhdGEuXz09PW0rIi5kaXNwbGF5IikpcC5pbm5lckhUTUw9SShhLGIsbSwiZGlzcGxheSIpO3cuc0NsYXNzJiYocC5jbGFzc05hbWUrPSIgIit3LnNDbGFzcyk7dy5iVmlzaWJsZSYmIWM/bi5hcHBlbmRDaGlsZChwKTohdy5iVmlzaWJsZSYmYyYmcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHApO3cuZm5DcmVhdGVkQ2VsbCYmdy5mbkNyZWF0ZWRDZWxsLmNhbGwoYS5vSW5zdGFuY2UscCxJKGEsYixtKSxoLGIsbSl9QShhLCJhb1Jvd0NyZWF0ZWRDYWxsYmFjayIsbnVsbCxbbixoLGIsZ10pfWUublRyLnNldEF0dHJpYnV0ZSgicm9sZSIsInJvdyIpfWZ1bmN0aW9uIFBhKGEsYil7dmFyIGM9Yi5uVHIsZD1iLl9hRGF0YTtpZihjKXtpZihhPWEucm93SWRGbihkKSljLmlkPWE7ZC5EVF9Sb3dDbGFzcyYmKGE9ZC5EVF9Sb3dDbGFzcy5zcGxpdCgiICIpLGIuX19yb3djPWIuX19yb3djPwp0YShiLl9fcm93Yy5jb25jYXQoYSkpOmEsZihjKS5yZW1vdmVDbGFzcyhiLl9fcm93Yy5qb2luKCIgIikpLmFkZENsYXNzKGQuRFRfUm93Q2xhc3MpKTtkLkRUX1Jvd0F0dHImJmYoYykuYXR0cihkLkRUX1Jvd0F0dHIpO2QuRFRfUm93RGF0YSYmZihjKS5kYXRhKGQuRFRfUm93RGF0YSl9fWZ1bmN0aW9uIHBiKGEpe3ZhciBiLGMsZD1hLm5USGVhZCxlPWEublRGb290LGg9MD09PWYoInRoLCB0ZCIsZCkubGVuZ3RoLGc9YS5vQ2xhc3NlcyxrPWEuYW9Db2x1bW5zO2gmJihjPWYoIjx0ci8+IikuYXBwZW5kVG8oZCkpO3ZhciBsPTA7Zm9yKGI9ay5sZW5ndGg7bDxiO2wrKyl7dmFyIG49a1tsXTt2YXIgbT1mKG4ublRoKS5hZGRDbGFzcyhuLnNDbGFzcyk7aCYmbS5hcHBlbmRUbyhjKTthLm9GZWF0dXJlcy5iU29ydCYmKG0uYWRkQ2xhc3Mobi5zU29ydGluZ0NsYXNzKSwhMSE9PW4uYlNvcnRhYmxlJiYobS5hdHRyKCJ0YWJpbmRleCIsYS5pVGFiSW5kZXgpLmF0dHIoImFyaWEtY29udHJvbHMiLAphLnNUYWJsZUlkKSxRYShhLG4ublRoLGwpKSk7bi5zVGl0bGUhPW1bMF0uaW5uZXJIVE1MJiZtLmh0bWwobi5zVGl0bGUpO1JhKGEsImhlYWRlciIpKGEsbSxuLGcpfWgmJmZhKGEuYW9IZWFkZXIsZCk7ZihkKS5maW5kKCI+dHIiKS5hdHRyKCJyb2xlIiwicm93Iik7ZihkKS5maW5kKCI+dHI+dGgsID50cj50ZCIpLmFkZENsYXNzKGcuc0hlYWRlclRIKTtmKGUpLmZpbmQoIj50cj50aCwgPnRyPnRkIikuYWRkQ2xhc3MoZy5zRm9vdGVyVEgpO2lmKG51bGwhPT1lKWZvcihhPWEuYW9Gb290ZXJbMF0sbD0wLGI9YS5sZW5ndGg7bDxiO2wrKyluPWtbbF0sbi5uVGY9YVtsXS5jZWxsLG4uc0NsYXNzJiZmKG4ublRmKS5hZGRDbGFzcyhuLnNDbGFzcyl9ZnVuY3Rpb24gaGEoYSxiLGMpe3ZhciBkLGUsaD1bXSxnPVtdLGs9YS5hb0NvbHVtbnMubGVuZ3RoO2lmKGIpe2M9PT1wJiYoYz0hMSk7dmFyIGw9MDtmb3IoZD1iLmxlbmd0aDtsPGQ7bCsrKXtoW2xdPWJbbF0uc2xpY2UoKTtoW2xdLm5Ucj0KYltsXS5uVHI7Zm9yKGU9ay0xOzA8PWU7ZS0tKWEuYW9Db2x1bW5zW2VdLmJWaXNpYmxlfHxjfHxoW2xdLnNwbGljZShlLDEpO2cucHVzaChbXSl9bD0wO2ZvcihkPWgubGVuZ3RoO2w8ZDtsKyspe2lmKGE9aFtsXS5uVHIpZm9yKDtlPWEuZmlyc3RDaGlsZDspYS5yZW1vdmVDaGlsZChlKTtlPTA7Zm9yKGI9aFtsXS5sZW5ndGg7ZTxiO2UrKyl7dmFyIG49az0xO2lmKGdbbF1bZV09PT1wKXthLmFwcGVuZENoaWxkKGhbbF1bZV0uY2VsbCk7Zm9yKGdbbF1bZV09MTtoW2wra10hPT1wJiZoW2xdW2VdLmNlbGw9PWhbbCtrXVtlXS5jZWxsOylnW2wra11bZV09MSxrKys7Zm9yKDtoW2xdW2Urbl0hPT1wJiZoW2xdW2VdLmNlbGw9PWhbbF1bZStuXS5jZWxsOyl7Zm9yKGM9MDtjPGs7YysrKWdbbCtjXVtlK25dPTE7bisrfWYoaFtsXVtlXS5jZWxsKS5hdHRyKCJyb3dzcGFuIixrKS5hdHRyKCJjb2xzcGFuIixuKX19fX19ZnVuY3Rpb24gUyhhKXt2YXIgYj1BKGEsImFvUHJlRHJhd0NhbGxiYWNrIiwKInByZURyYXciLFthXSk7aWYoLTEhPT1mLmluQXJyYXkoITEsYikpSyhhLCExKTtlbHNle2I9W107dmFyIGM9MCxkPWEuYXNTdHJpcGVDbGFzc2VzLGU9ZC5sZW5ndGgsaD1hLm9MYW5ndWFnZSxnPWEuaUluaXREaXNwbGF5U3RhcnQsaz0ic3NwIj09RChhKSxsPWEuYWlEaXNwbGF5O2EuYkRyYXdpbmc9ITA7ZyE9PXAmJi0xIT09ZyYmKGEuX2lEaXNwbGF5U3RhcnQ9az9nOmc+PWEuZm5SZWNvcmRzRGlzcGxheSgpPzA6ZyxhLmlJbml0RGlzcGxheVN0YXJ0PS0xKTtnPWEuX2lEaXNwbGF5U3RhcnQ7dmFyIG49YS5mbkRpc3BsYXlFbmQoKTtpZihhLmJEZWZlckxvYWRpbmcpYS5iRGVmZXJMb2FkaW5nPSExLGEuaURyYXcrKyxLKGEsITEpO2Vsc2UgaWYoIWspYS5pRHJhdysrO2Vsc2UgaWYoIWEuYkRlc3Ryb3lpbmcmJiFxYihhKSlyZXR1cm47aWYoMCE9PWwubGVuZ3RoKWZvcihoPWs/YS5hb0RhdGEubGVuZ3RoOm4saz1rPzA6ZztrPGg7aysrKXt2YXIgbT1sW2tdLHc9YS5hb0RhdGFbbV07Cm51bGw9PT13Lm5UciYmTGEoYSxtKTt2YXIgdT13Lm5UcjtpZigwIT09ZSl7dmFyIHE9ZFtjJWVdO3cuX3NSb3dTdHJpcGUhPXEmJihmKHUpLnJlbW92ZUNsYXNzKHcuX3NSb3dTdHJpcGUpLmFkZENsYXNzKHEpLHcuX3NSb3dTdHJpcGU9cSl9QShhLCJhb1Jvd0NhbGxiYWNrIixudWxsLFt1LHcuX2FEYXRhLGMsayxtXSk7Yi5wdXNoKHUpO2MrK31lbHNlIGM9aC5zWmVyb1JlY29yZHMsMT09YS5pRHJhdyYmImFqYXgiPT1EKGEpP2M9aC5zTG9hZGluZ1JlY29yZHM6aC5zRW1wdHlUYWJsZSYmMD09PWEuZm5SZWNvcmRzVG90YWwoKSYmKGM9aC5zRW1wdHlUYWJsZSksYlswXT1mKCI8dHIvPiIseyJjbGFzcyI6ZT9kWzBdOiIifSkuYXBwZW5kKGYoIjx0ZCAvPiIse3ZhbGlnbjoidG9wIixjb2xTcGFuOlcoYSksImNsYXNzIjphLm9DbGFzc2VzLnNSb3dFbXB0eX0pLmh0bWwoYykpWzBdO0EoYSwiYW9IZWFkZXJDYWxsYmFjayIsImhlYWRlciIsW2YoYS5uVEhlYWQpLmNoaWxkcmVuKCJ0ciIpWzBdLApPYShhKSxnLG4sbF0pO0EoYSwiYW9Gb290ZXJDYWxsYmFjayIsImZvb3RlciIsW2YoYS5uVEZvb3QpLmNoaWxkcmVuKCJ0ciIpWzBdLE9hKGEpLGcsbixsXSk7ZD1mKGEublRCb2R5KTtkLmNoaWxkcmVuKCkuZGV0YWNoKCk7ZC5hcHBlbmQoZihiKSk7QShhLCJhb0RyYXdDYWxsYmFjayIsImRyYXciLFthXSk7YS5iU29ydGVkPSExO2EuYkZpbHRlcmVkPSExO2EuYkRyYXdpbmc9ITF9fWZ1bmN0aW9uIFYoYSxiKXt2YXIgYz1hLm9GZWF0dXJlcyxkPWMuYkZpbHRlcjtjLmJTb3J0JiZyYihhKTtkP2lhKGEsYS5vUHJldmlvdXNTZWFyY2gpOmEuYWlEaXNwbGF5PWEuYWlEaXNwbGF5TWFzdGVyLnNsaWNlKCk7ITAhPT1iJiYoYS5faURpc3BsYXlTdGFydD0wKTthLl9kcmF3SG9sZD1iO1MoYSk7YS5fZHJhd0hvbGQ9ITF9ZnVuY3Rpb24gc2IoYSl7dmFyIGI9YS5vQ2xhc3NlcyxjPWYoYS5uVGFibGUpO2M9ZigiPGRpdi8+IikuaW5zZXJ0QmVmb3JlKGMpO3ZhciBkPWEub0ZlYXR1cmVzLGU9CmYoIjxkaXYvPiIse2lkOmEuc1RhYmxlSWQrIl93cmFwcGVyIiwiY2xhc3MiOmIuc1dyYXBwZXIrKGEublRGb290PyIiOiIgIitiLnNOb0Zvb3Rlcil9KTthLm5Ib2xkaW5nPWNbMF07YS5uVGFibGVXcmFwcGVyPWVbMF07YS5uVGFibGVSZWluc2VydEJlZm9yZT1hLm5UYWJsZS5uZXh0U2libGluZztmb3IodmFyIGg9YS5zRG9tLnNwbGl0KCIiKSxnLGssbCxuLG0scCx1PTA7dTxoLmxlbmd0aDt1Kyspe2c9bnVsbDtrPWhbdV07aWYoIjwiPT1rKXtsPWYoIjxkaXYvPiIpWzBdO249aFt1KzFdO2lmKCInIj09bnx8JyInPT1uKXttPSIiO2ZvcihwPTI7aFt1K3BdIT1uOyltKz1oW3UrcF0scCsrOyJIIj09bT9tPWIuc0pVSUhlYWRlcjoiRiI9PW0mJihtPWIuc0pVSUZvb3Rlcik7LTEhPW0uaW5kZXhPZigiLiIpPyhuPW0uc3BsaXQoIi4iKSxsLmlkPW5bMF0uc3Vic3RyKDEsblswXS5sZW5ndGgtMSksbC5jbGFzc05hbWU9blsxXSk6IiMiPT1tLmNoYXJBdCgwKT9sLmlkPW0uc3Vic3RyKDEsCm0ubGVuZ3RoLTEpOmwuY2xhc3NOYW1lPW07dSs9cH1lLmFwcGVuZChsKTtlPWYobCl9ZWxzZSBpZigiPiI9PWspZT1lLnBhcmVudCgpO2Vsc2UgaWYoImwiPT1rJiZkLmJQYWdpbmF0ZSYmZC5iTGVuZ3RoQ2hhbmdlKWc9dGIoYSk7ZWxzZSBpZigiZiI9PWsmJmQuYkZpbHRlcilnPXViKGEpO2Vsc2UgaWYoInIiPT1rJiZkLmJQcm9jZXNzaW5nKWc9dmIoYSk7ZWxzZSBpZigidCI9PWspZz13YihhKTtlbHNlIGlmKCJpIj09ayYmZC5iSW5mbylnPXhiKGEpO2Vsc2UgaWYoInAiPT1rJiZkLmJQYWdpbmF0ZSlnPXliKGEpO2Vsc2UgaWYoMCE9PXEuZXh0LmZlYXR1cmUubGVuZ3RoKWZvcihsPXEuZXh0LmZlYXR1cmUscD0wLG49bC5sZW5ndGg7cDxuO3ArKylpZihrPT1sW3BdLmNGZWF0dXJlKXtnPWxbcF0uZm5Jbml0KGEpO2JyZWFrfWcmJihsPWEuYWFuRmVhdHVyZXMsbFtrXXx8KGxba109W10pLGxba10ucHVzaChnKSxlLmFwcGVuZChnKSl9Yy5yZXBsYWNlV2l0aChlKTthLm5Ib2xkaW5nPQpudWxsfWZ1bmN0aW9uIGZhKGEsYil7Yj1mKGIpLmNoaWxkcmVuKCJ0ciIpO3ZhciBjLGQsZTthLnNwbGljZSgwLGEubGVuZ3RoKTt2YXIgaD0wO2ZvcihlPWIubGVuZ3RoO2g8ZTtoKyspYS5wdXNoKFtdKTtoPTA7Zm9yKGU9Yi5sZW5ndGg7aDxlO2grKyl7dmFyIGc9YltoXTtmb3IoYz1nLmZpcnN0Q2hpbGQ7Yzspe2lmKCJURCI9PWMubm9kZU5hbWUudG9VcHBlckNhc2UoKXx8IlRIIj09Yy5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpKXt2YXIgaz0xKmMuZ2V0QXR0cmlidXRlKCJjb2xzcGFuIik7dmFyIGw9MSpjLmdldEF0dHJpYnV0ZSgicm93c3BhbiIpO2s9ayYmMCE9PWsmJjEhPT1rP2s6MTtsPWwmJjAhPT1sJiYxIT09bD9sOjE7dmFyIG49MDtmb3IoZD1hW2hdO2Rbbl07KW4rKzt2YXIgbT1uO3ZhciBwPTE9PT1rPyEwOiExO2ZvcihkPTA7ZDxrO2QrKylmb3Iobj0wO248bDtuKyspYVtoK25dW20rZF09e2NlbGw6Yyx1bmlxdWU6cH0sYVtoK25dLm5Ucj1nfWM9Yy5uZXh0U2libGluZ319fQpmdW5jdGlvbiB1YShhLGIsYyl7dmFyIGQ9W107Y3x8KGM9YS5hb0hlYWRlcixiJiYoYz1bXSxmYShjLGIpKSk7Yj0wO2Zvcih2YXIgZT1jLmxlbmd0aDtiPGU7YisrKWZvcih2YXIgaD0wLGc9Y1tiXS5sZW5ndGg7aDxnO2grKykhY1tiXVtoXS51bmlxdWV8fGRbaF0mJmEuYlNvcnRDZWxsc1RvcHx8KGRbaF09Y1tiXVtoXS5jZWxsKTtyZXR1cm4gZH1mdW5jdGlvbiB2YShhLGIsYyl7QShhLCJhb1NlcnZlclBhcmFtcyIsInNlcnZlclBhcmFtcyIsW2JdKTtpZihiJiZmLmlzQXJyYXkoYikpe3ZhciBkPXt9LGU9LyguKj8pXFtcXSQvO2YuZWFjaChiLGZ1bmN0aW9uKGEsYil7KGE9Yi5uYW1lLm1hdGNoKGUpKT8oYT1hWzBdLGRbYV18fChkW2FdPVtdKSxkW2FdLnB1c2goYi52YWx1ZSkpOmRbYi5uYW1lXT1iLnZhbHVlfSk7Yj1kfXZhciBoPWEuYWpheCxnPWEub0luc3RhbmNlLGs9ZnVuY3Rpb24oYil7QShhLG51bGwsInhociIsW2EsYixhLmpxWEhSXSk7YyhiKX07aWYoZi5pc1BsYWluT2JqZWN0KGgpJiYKaC5kYXRhKXt2YXIgbD1oLmRhdGE7dmFyIG49ImZ1bmN0aW9uIj09PXR5cGVvZiBsP2woYixhKTpsO2I9ImZ1bmN0aW9uIj09PXR5cGVvZiBsJiZuP246Zi5leHRlbmQoITAsYixuKTtkZWxldGUgaC5kYXRhfW49e2RhdGE6YixzdWNjZXNzOmZ1bmN0aW9uKGIpe3ZhciBjPWIuZXJyb3J8fGIuc0Vycm9yO2MmJk8oYSwwLGMpO2EuanNvbj1iO2soYil9LGRhdGFUeXBlOiJqc29uIixjYWNoZTohMSx0eXBlOmEuc1NlcnZlck1ldGhvZCxlcnJvcjpmdW5jdGlvbihiLGMsZCl7ZD1BKGEsbnVsbCwieGhyIixbYSxudWxsLGEuanFYSFJdKTstMT09PWYuaW5BcnJheSghMCxkKSYmKCJwYXJzZXJlcnJvciI9PWM/TyhhLDAsIkludmFsaWQgSlNPTiByZXNwb25zZSIsMSk6ND09PWIucmVhZHlTdGF0ZSYmTyhhLDAsIkFqYXggZXJyb3IiLDcpKTtLKGEsITEpfX07YS5vQWpheERhdGE9YjtBKGEsbnVsbCwicHJlWGhyIixbYSxiXSk7YS5mblNlcnZlckRhdGE/YS5mblNlcnZlckRhdGEuY2FsbChnLAphLnNBamF4U291cmNlLGYubWFwKGIsZnVuY3Rpb24oYSxiKXtyZXR1cm57bmFtZTpiLHZhbHVlOmF9fSksayxhKTphLnNBamF4U291cmNlfHwic3RyaW5nIj09PXR5cGVvZiBoP2EuanFYSFI9Zi5hamF4KGYuZXh0ZW5kKG4se3VybDpofHxhLnNBamF4U291cmNlfSkpOiJmdW5jdGlvbiI9PT10eXBlb2YgaD9hLmpxWEhSPWguY2FsbChnLGIsayxhKTooYS5qcVhIUj1mLmFqYXgoZi5leHRlbmQobixoKSksaC5kYXRhPWwpfWZ1bmN0aW9uIHFiKGEpe3JldHVybiBhLmJBamF4RGF0YUdldD8oYS5pRHJhdysrLEsoYSwhMCksdmEoYSx6YihhKSxmdW5jdGlvbihiKXtBYihhLGIpfSksITEpOiEwfWZ1bmN0aW9uIHpiKGEpe3ZhciBiPWEuYW9Db2x1bW5zLGM9Yi5sZW5ndGgsZD1hLm9GZWF0dXJlcyxlPWEub1ByZXZpb3VzU2VhcmNoLGg9YS5hb1ByZVNlYXJjaENvbHMsZz1bXSxrPVkoYSk7dmFyIGw9YS5faURpc3BsYXlTdGFydDt2YXIgbj0hMSE9PWQuYlBhZ2luYXRlP2EuX2lEaXNwbGF5TGVuZ3RoOgotMTt2YXIgbT1mdW5jdGlvbihhLGIpe2cucHVzaCh7bmFtZTphLHZhbHVlOmJ9KX07bSgic0VjaG8iLGEuaURyYXcpO20oImlDb2x1bW5zIixjKTttKCJzQ29sdW1ucyIsSihiLCJzTmFtZSIpLmpvaW4oIiwiKSk7bSgiaURpc3BsYXlTdGFydCIsbCk7bSgiaURpc3BsYXlMZW5ndGgiLG4pO3ZhciBwPXtkcmF3OmEuaURyYXcsY29sdW1uczpbXSxvcmRlcjpbXSxzdGFydDpsLGxlbmd0aDpuLHNlYXJjaDp7dmFsdWU6ZS5zU2VhcmNoLHJlZ2V4OmUuYlJlZ2V4fX07Zm9yKGw9MDtsPGM7bCsrKXt2YXIgdT1iW2xdO3ZhciBzYT1oW2xdO249ImZ1bmN0aW9uIj09dHlwZW9mIHUubURhdGE/ImZ1bmN0aW9uIjp1Lm1EYXRhO3AuY29sdW1ucy5wdXNoKHtkYXRhOm4sbmFtZTp1LnNOYW1lLHNlYXJjaGFibGU6dS5iU2VhcmNoYWJsZSxvcmRlcmFibGU6dS5iU29ydGFibGUsc2VhcmNoOnt2YWx1ZTpzYS5zU2VhcmNoLHJlZ2V4OnNhLmJSZWdleH19KTttKCJtRGF0YVByb3BfIitsLG4pO2QuYkZpbHRlciYmCihtKCJzU2VhcmNoXyIrbCxzYS5zU2VhcmNoKSxtKCJiUmVnZXhfIitsLHNhLmJSZWdleCksbSgiYlNlYXJjaGFibGVfIitsLHUuYlNlYXJjaGFibGUpKTtkLmJTb3J0JiZtKCJiU29ydGFibGVfIitsLHUuYlNvcnRhYmxlKX1kLmJGaWx0ZXImJihtKCJzU2VhcmNoIixlLnNTZWFyY2gpLG0oImJSZWdleCIsZS5iUmVnZXgpKTtkLmJTb3J0JiYoZi5lYWNoKGssZnVuY3Rpb24oYSxiKXtwLm9yZGVyLnB1c2goe2NvbHVtbjpiLmNvbCxkaXI6Yi5kaXJ9KTttKCJpU29ydENvbF8iK2EsYi5jb2wpO20oInNTb3J0RGlyXyIrYSxiLmRpcil9KSxtKCJpU29ydGluZ0NvbHMiLGsubGVuZ3RoKSk7Yj1xLmV4dC5sZWdhY3kuYWpheDtyZXR1cm4gbnVsbD09PWI/YS5zQWpheFNvdXJjZT9nOnA6Yj9nOnB9ZnVuY3Rpb24gQWIoYSxiKXt2YXIgYz1mdW5jdGlvbihhLGMpe3JldHVybiBiW2FdIT09cD9iW2FdOmJbY119LGQ9d2EoYSxiKSxlPWMoInNFY2hvIiwiZHJhdyIpLGg9YygiaVRvdGFsUmVjb3JkcyIsCiJyZWNvcmRzVG90YWwiKTtjPWMoImlUb3RhbERpc3BsYXlSZWNvcmRzIiwicmVjb3Jkc0ZpbHRlcmVkIik7aWYoZSl7aWYoMSplPGEuaURyYXcpcmV0dXJuO2EuaURyYXc9MSplfXFhKGEpO2EuX2lSZWNvcmRzVG90YWw9cGFyc2VJbnQoaCwxMCk7YS5faVJlY29yZHNEaXNwbGF5PXBhcnNlSW50KGMsMTApO2U9MDtmb3IoaD1kLmxlbmd0aDtlPGg7ZSsrKVIoYSxkW2VdKTthLmFpRGlzcGxheT1hLmFpRGlzcGxheU1hc3Rlci5zbGljZSgpO2EuYkFqYXhEYXRhR2V0PSExO1MoYSk7YS5fYkluaXRDb21wbGV0ZXx8eGEoYSxiKTthLmJBamF4RGF0YUdldD0hMDtLKGEsITEpfWZ1bmN0aW9uIHdhKGEsYil7YT1mLmlzUGxhaW5PYmplY3QoYS5hamF4KSYmYS5hamF4LmRhdGFTcmMhPT1wP2EuYWpheC5kYXRhU3JjOmEuc0FqYXhEYXRhUHJvcDtyZXR1cm4iZGF0YSI9PT1hP2IuYWFEYXRhfHxiW2FdOiIiIT09YT9VKGEpKGIpOmJ9ZnVuY3Rpb24gdWIoYSl7dmFyIGI9YS5vQ2xhc3NlcyxjPQphLnNUYWJsZUlkLGQ9YS5vTGFuZ3VhZ2UsZT1hLm9QcmV2aW91c1NlYXJjaCxoPWEuYWFuRmVhdHVyZXMsZz0nPGlucHV0IHR5cGU9InNlYXJjaCIgY2xhc3M9IicrYi5zRmlsdGVySW5wdXQrJyIvPicsaz1kLnNTZWFyY2g7az1rLm1hdGNoKC9fSU5QVVRfLyk/ay5yZXBsYWNlKCJfSU5QVVRfIixnKTprK2c7Yj1mKCI8ZGl2Lz4iLHtpZDpoLmY/bnVsbDpjKyJfZmlsdGVyIiwiY2xhc3MiOmIuc0ZpbHRlcn0pLmFwcGVuZChmKCI8bGFiZWwvPiIpLmFwcGVuZChrKSk7aD1mdW5jdGlvbigpe3ZhciBiPXRoaXMudmFsdWU/dGhpcy52YWx1ZToiIjtiIT1lLnNTZWFyY2gmJihpYShhLHtzU2VhcmNoOmIsYlJlZ2V4OmUuYlJlZ2V4LGJTbWFydDplLmJTbWFydCxiQ2FzZUluc2Vuc2l0aXZlOmUuYkNhc2VJbnNlbnNpdGl2ZX0pLGEuX2lEaXNwbGF5U3RhcnQ9MCxTKGEpKX07Zz1udWxsIT09YS5zZWFyY2hEZWxheT9hLnNlYXJjaERlbGF5OiJzc3AiPT09RChhKT80MDA6MDt2YXIgbD1mKCJpbnB1dCIsCmIpLnZhbChlLnNTZWFyY2gpLmF0dHIoInBsYWNlaG9sZGVyIixkLnNTZWFyY2hQbGFjZWhvbGRlcikub24oImtleXVwLkRUIHNlYXJjaC5EVCBpbnB1dC5EVCBwYXN0ZS5EVCBjdXQuRFQiLGc/U2EoaCxnKTpoKS5vbigia2V5cHJlc3MuRFQiLGZ1bmN0aW9uKGEpe2lmKDEzPT1hLmtleUNvZGUpcmV0dXJuITF9KS5hdHRyKCJhcmlhLWNvbnRyb2xzIixjKTtmKGEublRhYmxlKS5vbigic2VhcmNoLmR0LkRUIixmdW5jdGlvbihiLGMpe2lmKGE9PT1jKXRyeXtsWzBdIT09eS5hY3RpdmVFbGVtZW50JiZsLnZhbChlLnNTZWFyY2gpfWNhdGNoKHcpe319KTtyZXR1cm4gYlswXX1mdW5jdGlvbiBpYShhLGIsYyl7dmFyIGQ9YS5vUHJldmlvdXNTZWFyY2gsZT1hLmFvUHJlU2VhcmNoQ29scyxoPWZ1bmN0aW9uKGEpe2Quc1NlYXJjaD1hLnNTZWFyY2g7ZC5iUmVnZXg9YS5iUmVnZXg7ZC5iU21hcnQ9YS5iU21hcnQ7ZC5iQ2FzZUluc2Vuc2l0aXZlPWEuYkNhc2VJbnNlbnNpdGl2ZX0sZz1mdW5jdGlvbihhKXtyZXR1cm4gYS5iRXNjYXBlUmVnZXghPT0KcD8hYS5iRXNjYXBlUmVnZXg6YS5iUmVnZXh9O0thKGEpO2lmKCJzc3AiIT1EKGEpKXtCYihhLGIuc1NlYXJjaCxjLGcoYiksYi5iU21hcnQsYi5iQ2FzZUluc2Vuc2l0aXZlKTtoKGIpO2ZvcihiPTA7YjxlLmxlbmd0aDtiKyspQ2IoYSxlW2JdLnNTZWFyY2gsYixnKGVbYl0pLGVbYl0uYlNtYXJ0LGVbYl0uYkNhc2VJbnNlbnNpdGl2ZSk7RGIoYSl9ZWxzZSBoKGIpO2EuYkZpbHRlcmVkPSEwO0EoYSxudWxsLCJzZWFyY2giLFthXSl9ZnVuY3Rpb24gRGIoYSl7Zm9yKHZhciBiPXEuZXh0LnNlYXJjaCxjPWEuYWlEaXNwbGF5LGQsZSxoPTAsZz1iLmxlbmd0aDtoPGc7aCsrKXtmb3IodmFyIGs9W10sbD0wLG49Yy5sZW5ndGg7bDxuO2wrKyllPWNbbF0sZD1hLmFvRGF0YVtlXSxiW2hdKGEsZC5fYUZpbHRlckRhdGEsZSxkLl9hRGF0YSxsKSYmay5wdXNoKGUpO2MubGVuZ3RoPTA7Zi5tZXJnZShjLGspfX1mdW5jdGlvbiBDYihhLGIsYyxkLGUsaCl7aWYoIiIhPT1iKXt2YXIgZz1bXSxrPQphLmFpRGlzcGxheTtkPVRhKGIsZCxlLGgpO2ZvcihlPTA7ZTxrLmxlbmd0aDtlKyspYj1hLmFvRGF0YVtrW2VdXS5fYUZpbHRlckRhdGFbY10sZC50ZXN0KGIpJiZnLnB1c2goa1tlXSk7YS5haURpc3BsYXk9Z319ZnVuY3Rpb24gQmIoYSxiLGMsZCxlLGgpe2U9VGEoYixkLGUsaCk7dmFyIGc9YS5vUHJldmlvdXNTZWFyY2guc1NlYXJjaCxrPWEuYWlEaXNwbGF5TWFzdGVyO2g9W107MCE9PXEuZXh0LnNlYXJjaC5sZW5ndGgmJihjPSEwKTt2YXIgZj1FYihhKTtpZigwPj1iLmxlbmd0aClhLmFpRGlzcGxheT1rLnNsaWNlKCk7ZWxzZXtpZihmfHxjfHxkfHxnLmxlbmd0aD5iLmxlbmd0aHx8MCE9PWIuaW5kZXhPZihnKXx8YS5iU29ydGVkKWEuYWlEaXNwbGF5PWsuc2xpY2UoKTtiPWEuYWlEaXNwbGF5O2ZvcihjPTA7YzxiLmxlbmd0aDtjKyspZS50ZXN0KGEuYW9EYXRhW2JbY11dLl9zRmlsdGVyUm93KSYmaC5wdXNoKGJbY10pO2EuYWlEaXNwbGF5PWh9fWZ1bmN0aW9uIFRhKGEsYiwKYyxkKXthPWI/YTpVYShhKTtjJiYoYT0iXig/PS4qPyIrZi5tYXAoYS5tYXRjaCgvIlteIl0rInxbXiBdKy9nKXx8WyIiXSxmdW5jdGlvbihhKXtpZignIic9PT1hLmNoYXJBdCgwKSl7dmFyIGI9YS5tYXRjaCgvXiIoLiopIiQvKTthPWI/YlsxXTphfXJldHVybiBhLnJlcGxhY2UoJyInLCIiKX0pLmpvaW4oIikoPz0uKj8iKSsiKS4qJCIpO3JldHVybiBuZXcgUmVnRXhwKGEsZD8iaSI6IiIpfWZ1bmN0aW9uIEViKGEpe3ZhciBiPWEuYW9Db2x1bW5zLGMsZCxlPXEuZXh0LnR5cGUuc2VhcmNoO3ZhciBoPSExO3ZhciBnPTA7Zm9yKGM9YS5hb0RhdGEubGVuZ3RoO2c8YztnKyspe3ZhciBrPWEuYW9EYXRhW2ddO2lmKCFrLl9hRmlsdGVyRGF0YSl7dmFyIGY9W107dmFyIG49MDtmb3IoZD1iLmxlbmd0aDtuPGQ7bisrKXtoPWJbbl07aWYoaC5iU2VhcmNoYWJsZSl7dmFyIG09SShhLGcsbiwiZmlsdGVyIik7ZVtoLnNUeXBlXSYmKG09ZVtoLnNUeXBlXShtKSk7bnVsbD09PW0mJihtPSIiKTsKInN0cmluZyIhPT10eXBlb2YgbSYmbS50b1N0cmluZyYmKG09bS50b1N0cmluZygpKX1lbHNlIG09IiI7bS5pbmRleE9mJiYtMSE9PW0uaW5kZXhPZigiJiIpJiYoeWEuaW5uZXJIVE1MPW0sbT0kYj95YS50ZXh0Q29udGVudDp5YS5pbm5lclRleHQpO20ucmVwbGFjZSYmKG09bS5yZXBsYWNlKC9bXHJcblx1MjAyOF0vZywiIikpO2YucHVzaChtKX1rLl9hRmlsdGVyRGF0YT1mO2suX3NGaWx0ZXJSb3c9Zi5qb2luKCIgICIpO2g9ITB9fXJldHVybiBofWZ1bmN0aW9uIEZiKGEpe3JldHVybntzZWFyY2g6YS5zU2VhcmNoLHNtYXJ0OmEuYlNtYXJ0LHJlZ2V4OmEuYlJlZ2V4LGNhc2VJbnNlbnNpdGl2ZTphLmJDYXNlSW5zZW5zaXRpdmV9fWZ1bmN0aW9uIEdiKGEpe3JldHVybntzU2VhcmNoOmEuc2VhcmNoLGJTbWFydDphLnNtYXJ0LGJSZWdleDphLnJlZ2V4LGJDYXNlSW5zZW5zaXRpdmU6YS5jYXNlSW5zZW5zaXRpdmV9fWZ1bmN0aW9uIHhiKGEpe3ZhciBiPWEuc1RhYmxlSWQsYz1hLmFhbkZlYXR1cmVzLmksCmQ9ZigiPGRpdi8+Iix7ImNsYXNzIjphLm9DbGFzc2VzLnNJbmZvLGlkOmM/bnVsbDpiKyJfaW5mbyJ9KTtjfHwoYS5hb0RyYXdDYWxsYmFjay5wdXNoKHtmbjpIYixzTmFtZToiaW5mb3JtYXRpb24ifSksZC5hdHRyKCJyb2xlIiwic3RhdHVzIikuYXR0cigiYXJpYS1saXZlIiwicG9saXRlIiksZihhLm5UYWJsZSkuYXR0cigiYXJpYS1kZXNjcmliZWRieSIsYisiX2luZm8iKSk7cmV0dXJuIGRbMF19ZnVuY3Rpb24gSGIoYSl7dmFyIGI9YS5hYW5GZWF0dXJlcy5pO2lmKDAhPT1iLmxlbmd0aCl7dmFyIGM9YS5vTGFuZ3VhZ2UsZD1hLl9pRGlzcGxheVN0YXJ0KzEsZT1hLmZuRGlzcGxheUVuZCgpLGg9YS5mblJlY29yZHNUb3RhbCgpLGc9YS5mblJlY29yZHNEaXNwbGF5KCksaz1nP2Muc0luZm86Yy5zSW5mb0VtcHR5O2chPT1oJiYoays9IiAiK2Muc0luZm9GaWx0ZXJlZCk7ays9Yy5zSW5mb1Bvc3RGaXg7az1JYihhLGspO2M9Yy5mbkluZm9DYWxsYmFjaztudWxsIT09YyYmKGs9Yy5jYWxsKGEub0luc3RhbmNlLAphLGQsZSxoLGcsaykpO2YoYikuaHRtbChrKX19ZnVuY3Rpb24gSWIoYSxiKXt2YXIgYz1hLmZuRm9ybWF0TnVtYmVyLGQ9YS5faURpc3BsYXlTdGFydCsxLGU9YS5faURpc3BsYXlMZW5ndGgsaD1hLmZuUmVjb3Jkc0Rpc3BsYXkoKSxnPS0xPT09ZTtyZXR1cm4gYi5yZXBsYWNlKC9fU1RBUlRfL2csYy5jYWxsKGEsZCkpLnJlcGxhY2UoL19FTkRfL2csYy5jYWxsKGEsYS5mbkRpc3BsYXlFbmQoKSkpLnJlcGxhY2UoL19NQVhfL2csYy5jYWxsKGEsYS5mblJlY29yZHNUb3RhbCgpKSkucmVwbGFjZSgvX1RPVEFMXy9nLGMuY2FsbChhLGgpKS5yZXBsYWNlKC9fUEFHRV8vZyxjLmNhbGwoYSxnPzE6TWF0aC5jZWlsKGQvZSkpKS5yZXBsYWNlKC9fUEFHRVNfL2csYy5jYWxsKGEsZz8xOk1hdGguY2VpbChoL2UpKSl9ZnVuY3Rpb24gamEoYSl7dmFyIGI9YS5pSW5pdERpc3BsYXlTdGFydCxjPWEuYW9Db2x1bW5zO3ZhciBkPWEub0ZlYXR1cmVzO3ZhciBlPWEuYkRlZmVyTG9hZGluZztpZihhLmJJbml0aWFsaXNlZCl7c2IoYSk7CnBiKGEpO2hhKGEsYS5hb0hlYWRlcik7aGEoYSxhLmFvRm9vdGVyKTtLKGEsITApO2QuYkF1dG9XaWR0aCYmSmEoYSk7dmFyIGg9MDtmb3IoZD1jLmxlbmd0aDtoPGQ7aCsrKXt2YXIgZz1jW2hdO2cuc1dpZHRoJiYoZy5uVGguc3R5bGUud2lkdGg9QihnLnNXaWR0aCkpfUEoYSxudWxsLCJwcmVJbml0IixbYV0pO1YoYSk7Yz1EKGEpO2lmKCJzc3AiIT1jfHxlKSJhamF4Ij09Yz92YShhLFtdLGZ1bmN0aW9uKGMpe3ZhciBkPXdhKGEsYyk7Zm9yKGg9MDtoPGQubGVuZ3RoO2grKylSKGEsZFtoXSk7YS5pSW5pdERpc3BsYXlTdGFydD1iO1YoYSk7SyhhLCExKTt4YShhLGMpfSxhKTooSyhhLCExKSx4YShhKSl9ZWxzZSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7amEoYSl9LDIwMCl9ZnVuY3Rpb24geGEoYSxiKXthLl9iSW5pdENvbXBsZXRlPSEwOyhifHxhLm9Jbml0LmFhRGF0YSkmJmFhKGEpO0EoYSxudWxsLCJwbHVnaW4taW5pdCIsW2EsYl0pO0EoYSwiYW9Jbml0Q29tcGxldGUiLCJpbml0IiwKW2EsYl0pfWZ1bmN0aW9uIFZhKGEsYil7Yj1wYXJzZUludChiLDEwKTthLl9pRGlzcGxheUxlbmd0aD1iO1dhKGEpO0EoYSxudWxsLCJsZW5ndGgiLFthLGJdKX1mdW5jdGlvbiB0YihhKXt2YXIgYj1hLm9DbGFzc2VzLGM9YS5zVGFibGVJZCxkPWEuYUxlbmd0aE1lbnUsZT1mLmlzQXJyYXkoZFswXSksaD1lP2RbMF06ZDtkPWU/ZFsxXTpkO2U9ZigiPHNlbGVjdC8+Iix7bmFtZTpjKyJfbGVuZ3RoIiwiYXJpYS1jb250cm9scyI6YywiY2xhc3MiOmIuc0xlbmd0aFNlbGVjdH0pO2Zvcih2YXIgZz0wLGs9aC5sZW5ndGg7ZzxrO2crKyllWzBdW2ddPW5ldyBPcHRpb24oIm51bWJlciI9PT10eXBlb2YgZFtnXT9hLmZuRm9ybWF0TnVtYmVyKGRbZ10pOmRbZ10saFtnXSk7dmFyIGw9ZigiPGRpdj48bGFiZWwvPjwvZGl2PiIpLmFkZENsYXNzKGIuc0xlbmd0aCk7YS5hYW5GZWF0dXJlcy5sfHwobFswXS5pZD1jKyJfbGVuZ3RoIik7bC5jaGlsZHJlbigpLmFwcGVuZChhLm9MYW5ndWFnZS5zTGVuZ3RoTWVudS5yZXBsYWNlKCJfTUVOVV8iLAplWzBdLm91dGVySFRNTCkpO2YoInNlbGVjdCIsbCkudmFsKGEuX2lEaXNwbGF5TGVuZ3RoKS5vbigiY2hhbmdlLkRUIixmdW5jdGlvbihiKXtWYShhLGYodGhpcykudmFsKCkpO1MoYSl9KTtmKGEublRhYmxlKS5vbigibGVuZ3RoLmR0LkRUIixmdW5jdGlvbihiLGMsZCl7YT09PWMmJmYoInNlbGVjdCIsbCkudmFsKGQpfSk7cmV0dXJuIGxbMF19ZnVuY3Rpb24geWIoYSl7dmFyIGI9YS5zUGFnaW5hdGlvblR5cGUsYz1xLmV4dC5wYWdlcltiXSxkPSJmdW5jdGlvbiI9PT10eXBlb2YgYyxlPWZ1bmN0aW9uKGEpe1MoYSl9O2I9ZigiPGRpdi8+IikuYWRkQ2xhc3MoYS5vQ2xhc3Nlcy5zUGFnaW5nK2IpWzBdO3ZhciBoPWEuYWFuRmVhdHVyZXM7ZHx8Yy5mbkluaXQoYSxiLGUpO2gucHx8KGIuaWQ9YS5zVGFibGVJZCsiX3BhZ2luYXRlIixhLmFvRHJhd0NhbGxiYWNrLnB1c2goe2ZuOmZ1bmN0aW9uKGEpe2lmKGQpe3ZhciBiPWEuX2lEaXNwbGF5U3RhcnQsZz1hLl9pRGlzcGxheUxlbmd0aCwKZj1hLmZuUmVjb3Jkc0Rpc3BsYXkoKSxtPS0xPT09ZztiPW0/MDpNYXRoLmNlaWwoYi9nKTtnPW0/MTpNYXRoLmNlaWwoZi9nKTtmPWMoYixnKTt2YXIgcDttPTA7Zm9yKHA9aC5wLmxlbmd0aDttPHA7bSsrKVJhKGEsInBhZ2VCdXR0b24iKShhLGgucFttXSxtLGYsYixnKX1lbHNlIGMuZm5VcGRhdGUoYSxlKX0sc05hbWU6InBhZ2luYXRpb24ifSkpO3JldHVybiBifWZ1bmN0aW9uIFhhKGEsYixjKXt2YXIgZD1hLl9pRGlzcGxheVN0YXJ0LGU9YS5faURpc3BsYXlMZW5ndGgsaD1hLmZuUmVjb3Jkc0Rpc3BsYXkoKTswPT09aHx8LTE9PT1lP2Q9MDoibnVtYmVyIj09PXR5cGVvZiBiPyhkPWIqZSxkPmgmJihkPTApKToiZmlyc3QiPT1iP2Q9MDoicHJldmlvdXMiPT1iPyhkPTA8PWU/ZC1lOjAsMD5kJiYoZD0wKSk6Im5leHQiPT1iP2QrZTxoJiYoZCs9ZSk6Imxhc3QiPT1iP2Q9TWF0aC5mbG9vcigoaC0xKS9lKSplOk8oYSwwLCJVbmtub3duIHBhZ2luZyBhY3Rpb246ICIrYiw1KTtiPQphLl9pRGlzcGxheVN0YXJ0IT09ZDthLl9pRGlzcGxheVN0YXJ0PWQ7YiYmKEEoYSxudWxsLCJwYWdlIixbYV0pLGMmJlMoYSkpO3JldHVybiBifWZ1bmN0aW9uIHZiKGEpe3JldHVybiBmKCI8ZGl2Lz4iLHtpZDphLmFhbkZlYXR1cmVzLnI/bnVsbDphLnNUYWJsZUlkKyJfcHJvY2Vzc2luZyIsImNsYXNzIjphLm9DbGFzc2VzLnNQcm9jZXNzaW5nfSkuaHRtbChhLm9MYW5ndWFnZS5zUHJvY2Vzc2luZykuaW5zZXJ0QmVmb3JlKGEublRhYmxlKVswXX1mdW5jdGlvbiBLKGEsYil7YS5vRmVhdHVyZXMuYlByb2Nlc3NpbmcmJmYoYS5hYW5GZWF0dXJlcy5yKS5jc3MoImRpc3BsYXkiLGI/ImJsb2NrIjoibm9uZSIpO0EoYSxudWxsLCJwcm9jZXNzaW5nIixbYSxiXSl9ZnVuY3Rpb24gd2IoYSl7dmFyIGI9ZihhLm5UYWJsZSk7Yi5hdHRyKCJyb2xlIiwiZ3JpZCIpO3ZhciBjPWEub1Njcm9sbDtpZigiIj09PWMuc1gmJiIiPT09Yy5zWSlyZXR1cm4gYS5uVGFibGU7dmFyIGQ9Yy5zWCxlPWMuc1ksCmg9YS5vQ2xhc3NlcyxnPWIuY2hpbGRyZW4oImNhcHRpb24iKSxrPWcubGVuZ3RoP2dbMF0uX2NhcHRpb25TaWRlOm51bGwsbD1mKGJbMF0uY2xvbmVOb2RlKCExKSksbj1mKGJbMF0uY2xvbmVOb2RlKCExKSksbT1iLmNoaWxkcmVuKCJ0Zm9vdCIpO20ubGVuZ3RofHwobT1udWxsKTtsPWYoIjxkaXYvPiIseyJjbGFzcyI6aC5zU2Nyb2xsV3JhcHBlcn0pLmFwcGVuZChmKCI8ZGl2Lz4iLHsiY2xhc3MiOmguc1Njcm9sbEhlYWR9KS5jc3Moe292ZXJmbG93OiJoaWRkZW4iLHBvc2l0aW9uOiJyZWxhdGl2ZSIsYm9yZGVyOjAsd2lkdGg6ZD9kP0IoZCk6bnVsbDoiMTAwJSJ9KS5hcHBlbmQoZigiPGRpdi8+Iix7ImNsYXNzIjpoLnNTY3JvbGxIZWFkSW5uZXJ9KS5jc3MoeyJib3gtc2l6aW5nIjoiY29udGVudC1ib3giLHdpZHRoOmMuc1hJbm5lcnx8IjEwMCUifSkuYXBwZW5kKGwucmVtb3ZlQXR0cigiaWQiKS5jc3MoIm1hcmdpbi1sZWZ0IiwwKS5hcHBlbmQoInRvcCI9PT1rP2c6bnVsbCkuYXBwZW5kKGIuY2hpbGRyZW4oInRoZWFkIikpKSkpLmFwcGVuZChmKCI8ZGl2Lz4iLAp7ImNsYXNzIjpoLnNTY3JvbGxCb2R5fSkuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUiLG92ZXJmbG93OiJhdXRvIix3aWR0aDpkP0IoZCk6bnVsbH0pLmFwcGVuZChiKSk7bSYmbC5hcHBlbmQoZigiPGRpdi8+Iix7ImNsYXNzIjpoLnNTY3JvbGxGb290fSkuY3NzKHtvdmVyZmxvdzoiaGlkZGVuIixib3JkZXI6MCx3aWR0aDpkP2Q/QihkKTpudWxsOiIxMDAlIn0pLmFwcGVuZChmKCI8ZGl2Lz4iLHsiY2xhc3MiOmguc1Njcm9sbEZvb3RJbm5lcn0pLmFwcGVuZChuLnJlbW92ZUF0dHIoImlkIikuY3NzKCJtYXJnaW4tbGVmdCIsMCkuYXBwZW5kKCJib3R0b20iPT09az9nOm51bGwpLmFwcGVuZChiLmNoaWxkcmVuKCJ0Zm9vdCIpKSkpKTtiPWwuY2hpbGRyZW4oKTt2YXIgcD1iWzBdO2g9YlsxXTt2YXIgdT1tP2JbMl06bnVsbDtpZihkKWYoaCkub24oInNjcm9sbC5EVCIsZnVuY3Rpb24oYSl7YT10aGlzLnNjcm9sbExlZnQ7cC5zY3JvbGxMZWZ0PWE7bSYmKHUuc2Nyb2xsTGVmdD1hKX0pOwpmKGgpLmNzcyhlJiZjLmJDb2xsYXBzZT8ibWF4LWhlaWdodCI6ImhlaWdodCIsZSk7YS5uU2Nyb2xsSGVhZD1wO2EublNjcm9sbEJvZHk9aDthLm5TY3JvbGxGb290PXU7YS5hb0RyYXdDYWxsYmFjay5wdXNoKHtmbjpuYSxzTmFtZToic2Nyb2xsaW5nIn0pO3JldHVybiBsWzBdfWZ1bmN0aW9uIG5hKGEpe3ZhciBiPWEub1Njcm9sbCxjPWIuc1gsZD1iLnNYSW5uZXIsZT1iLnNZO2I9Yi5pQmFyV2lkdGg7dmFyIGg9ZihhLm5TY3JvbGxIZWFkKSxnPWhbMF0uc3R5bGUsaz1oLmNoaWxkcmVuKCJkaXYiKSxsPWtbMF0uc3R5bGUsbj1rLmNoaWxkcmVuKCJ0YWJsZSIpO2s9YS5uU2Nyb2xsQm9keTt2YXIgbT1mKGspLHc9ay5zdHlsZSx1PWYoYS5uU2Nyb2xsRm9vdCkuY2hpbGRyZW4oImRpdiIpLHE9dS5jaGlsZHJlbigidGFibGUiKSx0PWYoYS5uVEhlYWQpLHI9ZihhLm5UYWJsZSksdj1yWzBdLHphPXYuc3R5bGUsVD1hLm5URm9vdD9mKGEublRGb290KTpudWxsLEE9YS5vQnJvd3NlciwKeD1BLmJTY3JvbGxPdmVyc2l6ZSxhYz1KKGEuYW9Db2x1bW5zLCJuVGgiKSxZYT1bXSx5PVtdLHo9W10sQz1bXSxHLEg9ZnVuY3Rpb24oYSl7YT1hLnN0eWxlO2EucGFkZGluZ1RvcD0iMCI7YS5wYWRkaW5nQm90dG9tPSIwIjthLmJvcmRlclRvcFdpZHRoPSIwIjthLmJvcmRlckJvdHRvbVdpZHRoPSIwIjthLmhlaWdodD0wfTt2YXIgRD1rLnNjcm9sbEhlaWdodD5rLmNsaWVudEhlaWdodDtpZihhLnNjcm9sbEJhclZpcyE9PUQmJmEuc2Nyb2xsQmFyVmlzIT09cClhLnNjcm9sbEJhclZpcz1ELGFhKGEpO2Vsc2V7YS5zY3JvbGxCYXJWaXM9RDtyLmNoaWxkcmVuKCJ0aGVhZCwgdGZvb3QiKS5yZW1vdmUoKTtpZihUKXt2YXIgRT1ULmNsb25lKCkucHJlcGVuZFRvKHIpO3ZhciBGPVQuZmluZCgidHIiKTtFPUUuZmluZCgidHIiKX12YXIgST10LmNsb25lKCkucHJlcGVuZFRvKHIpO3Q9dC5maW5kKCJ0ciIpO0Q9SS5maW5kKCJ0ciIpO0kuZmluZCgidGgsIHRkIikucmVtb3ZlQXR0cigidGFiaW5kZXgiKTsKY3x8KHcud2lkdGg9IjEwMCUiLGhbMF0uc3R5bGUud2lkdGg9IjEwMCUiKTtmLmVhY2godWEoYSxJKSxmdW5jdGlvbihiLGMpe0c9YmEoYSxiKTtjLnN0eWxlLndpZHRoPWEuYW9Db2x1bW5zW0ddLnNXaWR0aH0pO1QmJk4oZnVuY3Rpb24oYSl7YS5zdHlsZS53aWR0aD0iIn0sRSk7aD1yLm91dGVyV2lkdGgoKTsiIj09PWM/KHphLndpZHRoPSIxMDAlIix4JiYoci5maW5kKCJ0Ym9keSIpLmhlaWdodCgpPmsub2Zmc2V0SGVpZ2h0fHwic2Nyb2xsIj09bS5jc3MoIm92ZXJmbG93LXkiKSkmJih6YS53aWR0aD1CKHIub3V0ZXJXaWR0aCgpLWIpKSxoPXIub3V0ZXJXaWR0aCgpKToiIiE9PWQmJih6YS53aWR0aD1CKGQpLGg9ci5vdXRlcldpZHRoKCkpO04oSCxEKTtOKGZ1bmN0aW9uKGEpe3oucHVzaChhLmlubmVySFRNTCk7WWEucHVzaChCKGYoYSkuY3NzKCJ3aWR0aCIpKSl9LEQpO04oZnVuY3Rpb24oYSxiKXstMSE9PWYuaW5BcnJheShhLGFjKSYmKGEuc3R5bGUud2lkdGg9WWFbYl0pfSwKdCk7ZihEKS5oZWlnaHQoMCk7VCYmKE4oSCxFKSxOKGZ1bmN0aW9uKGEpe0MucHVzaChhLmlubmVySFRNTCk7eS5wdXNoKEIoZihhKS5jc3MoIndpZHRoIikpKX0sRSksTihmdW5jdGlvbihhLGIpe2Euc3R5bGUud2lkdGg9eVtiXX0sRiksZihFKS5oZWlnaHQoMCkpO04oZnVuY3Rpb24oYSxiKXthLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZGF0YVRhYmxlc19zaXppbmciPicreltiXSsiPC9kaXY+IjthLmNoaWxkTm9kZXNbMF0uc3R5bGUuaGVpZ2h0PSIwIjthLmNoaWxkTm9kZXNbMF0uc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiI7YS5zdHlsZS53aWR0aD1ZYVtiXX0sRCk7VCYmTihmdW5jdGlvbihhLGIpe2EuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJkYXRhVGFibGVzX3NpemluZyI+JytDW2JdKyI8L2Rpdj4iO2EuY2hpbGROb2Rlc1swXS5zdHlsZS5oZWlnaHQ9IjAiO2EuY2hpbGROb2Rlc1swXS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIjthLnN0eWxlLndpZHRoPXlbYl19LEUpO3Iub3V0ZXJXaWR0aCgpPApoPyhGPWsuc2Nyb2xsSGVpZ2h0Pmsub2Zmc2V0SGVpZ2h0fHwic2Nyb2xsIj09bS5jc3MoIm92ZXJmbG93LXkiKT9oK2I6aCx4JiYoay5zY3JvbGxIZWlnaHQ+ay5vZmZzZXRIZWlnaHR8fCJzY3JvbGwiPT1tLmNzcygib3ZlcmZsb3cteSIpKSYmKHphLndpZHRoPUIoRi1iKSksIiIhPT1jJiYiIj09PWR8fE8oYSwxLCJQb3NzaWJsZSBjb2x1bW4gbWlzYWxpZ25tZW50Iiw2KSk6Rj0iMTAwJSI7dy53aWR0aD1CKEYpO2cud2lkdGg9QihGKTtUJiYoYS5uU2Nyb2xsRm9vdC5zdHlsZS53aWR0aD1CKEYpKTshZSYmeCYmKHcuaGVpZ2h0PUIodi5vZmZzZXRIZWlnaHQrYikpO2M9ci5vdXRlcldpZHRoKCk7blswXS5zdHlsZS53aWR0aD1CKGMpO2wud2lkdGg9QihjKTtkPXIuaGVpZ2h0KCk+ay5jbGllbnRIZWlnaHR8fCJzY3JvbGwiPT1tLmNzcygib3ZlcmZsb3cteSIpO2U9InBhZGRpbmciKyhBLmJTY3JvbGxiYXJMZWZ0PyJMZWZ0IjoiUmlnaHQiKTtsW2VdPWQ/YisicHgiOiIwcHgiO1QmJgoocVswXS5zdHlsZS53aWR0aD1CKGMpLHVbMF0uc3R5bGUud2lkdGg9QihjKSx1WzBdLnN0eWxlW2VdPWQ/YisicHgiOiIwcHgiKTtyLmNoaWxkcmVuKCJjb2xncm91cCIpLmluc2VydEJlZm9yZShyLmNoaWxkcmVuKCJ0aGVhZCIpKTttLnRyaWdnZXIoInNjcm9sbCIpOyFhLmJTb3J0ZWQmJiFhLmJGaWx0ZXJlZHx8YS5fZHJhd0hvbGR8fChrLnNjcm9sbFRvcD0wKX19ZnVuY3Rpb24gTihhLGIsYyl7Zm9yKHZhciBkPTAsZT0wLGg9Yi5sZW5ndGgsZyxrO2U8aDspe2c9YltlXS5maXJzdENoaWxkO2ZvcihrPWM/Y1tlXS5maXJzdENoaWxkOm51bGw7ZzspMT09PWcubm9kZVR5cGUmJihjP2EoZyxrLGQpOmEoZyxkKSxkKyspLGc9Zy5uZXh0U2libGluZyxrPWM/ay5uZXh0U2libGluZzpudWxsO2UrK319ZnVuY3Rpb24gSmEoYSl7dmFyIGI9YS5uVGFibGUsYz1hLmFvQ29sdW1ucyxkPWEub1Njcm9sbCxlPWQuc1ksaD1kLnNYLGc9ZC5zWElubmVyLGs9Yy5sZW5ndGgsbD1vYShhLCJiVmlzaWJsZSIpLApuPWYoInRoIixhLm5USGVhZCksbT1iLmdldEF0dHJpYnV0ZSgid2lkdGgiKSxwPWIucGFyZW50Tm9kZSx1PSExLHEsdD1hLm9Ccm93c2VyO2Q9dC5iU2Nyb2xsT3ZlcnNpemU7KHE9Yi5zdHlsZS53aWR0aCkmJi0xIT09cS5pbmRleE9mKCIlIikmJihtPXEpO2ZvcihxPTA7cTxsLmxlbmd0aDtxKyspe3ZhciByPWNbbFtxXV07bnVsbCE9PXIuc1dpZHRoJiYoci5zV2lkdGg9SmIoci5zV2lkdGhPcmlnLHApLHU9ITApfWlmKGR8fCF1JiYhaCYmIWUmJms9PVcoYSkmJms9PW4ubGVuZ3RoKWZvcihxPTA7cTxrO3ErKylsPWJhKGEscSksbnVsbCE9PWwmJihjW2xdLnNXaWR0aD1CKG4uZXEocSkud2lkdGgoKSkpO2Vsc2V7az1mKGIpLmNsb25lKCkuY3NzKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikucmVtb3ZlQXR0cigiaWQiKTtrLmZpbmQoInRib2R5IHRyIikucmVtb3ZlKCk7dmFyIHY9ZigiPHRyLz4iKS5hcHBlbmRUbyhrLmZpbmQoInRib2R5IikpO2suZmluZCgidGhlYWQsIHRmb290IikucmVtb3ZlKCk7CmsuYXBwZW5kKGYoYS5uVEhlYWQpLmNsb25lKCkpLmFwcGVuZChmKGEublRGb290KS5jbG9uZSgpKTtrLmZpbmQoInRmb290IHRoLCB0Zm9vdCB0ZCIpLmNzcygid2lkdGgiLCIiKTtuPXVhKGEsay5maW5kKCJ0aGVhZCIpWzBdKTtmb3IocT0wO3E8bC5sZW5ndGg7cSsrKXI9Y1tsW3FdXSxuW3FdLnN0eWxlLndpZHRoPW51bGwhPT1yLnNXaWR0aE9yaWcmJiIiIT09ci5zV2lkdGhPcmlnP0Ioci5zV2lkdGhPcmlnKToiIixyLnNXaWR0aE9yaWcmJmgmJmYobltxXSkuYXBwZW5kKGYoIjxkaXYvPiIpLmNzcyh7d2lkdGg6ci5zV2lkdGhPcmlnLG1hcmdpbjowLHBhZGRpbmc6MCxib3JkZXI6MCxoZWlnaHQ6MX0pKTtpZihhLmFvRGF0YS5sZW5ndGgpZm9yKHE9MDtxPGwubGVuZ3RoO3ErKyl1PWxbcV0scj1jW3VdLGYoS2IoYSx1KSkuY2xvbmUoITEpLmFwcGVuZChyLnNDb250ZW50UGFkZGluZykuYXBwZW5kVG8odik7ZigiW25hbWVdIixrKS5yZW1vdmVBdHRyKCJuYW1lIik7cj1mKCI8ZGl2Lz4iKS5jc3MoaHx8CmU/e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLGhlaWdodDoxLHJpZ2h0OjAsb3ZlcmZsb3c6ImhpZGRlbiJ9Ont9KS5hcHBlbmQoaykuYXBwZW5kVG8ocCk7aCYmZz9rLndpZHRoKGcpOmg/KGsuY3NzKCJ3aWR0aCIsImF1dG8iKSxrLnJlbW92ZUF0dHIoIndpZHRoIiksay53aWR0aCgpPHAuY2xpZW50V2lkdGgmJm0mJmsud2lkdGgocC5jbGllbnRXaWR0aCkpOmU/ay53aWR0aChwLmNsaWVudFdpZHRoKTptJiZrLndpZHRoKG0pO2ZvcihxPWU9MDtxPGwubGVuZ3RoO3ErKylwPWYobltxXSksZz1wLm91dGVyV2lkdGgoKS1wLndpZHRoKCkscD10LmJCb3VuZGluZz9NYXRoLmNlaWwobltxXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk6cC5vdXRlcldpZHRoKCksZSs9cCxjW2xbcV1dLnNXaWR0aD1CKHAtZyk7Yi5zdHlsZS53aWR0aD1CKGUpO3IucmVtb3ZlKCl9bSYmKGIuc3R5bGUud2lkdGg9QihtKSk7IW0mJiFofHxhLl9yZXN6RXZ0fHwoYj1mdW5jdGlvbigpe2Yoeikub24oInJlc2l6ZS5EVC0iKwphLnNJbnN0YW5jZSxTYShmdW5jdGlvbigpe2FhKGEpfSkpfSxkP3NldFRpbWVvdXQoYiwxRTMpOmIoKSxhLl9yZXN6RXZ0PSEwKX1mdW5jdGlvbiBKYihhLGIpe2lmKCFhKXJldHVybiAwO2E9ZigiPGRpdi8+IikuY3NzKCJ3aWR0aCIsQihhKSkuYXBwZW5kVG8oYnx8eS5ib2R5KTtiPWFbMF0ub2Zmc2V0V2lkdGg7YS5yZW1vdmUoKTtyZXR1cm4gYn1mdW5jdGlvbiBLYihhLGIpe3ZhciBjPUxiKGEsYik7aWYoMD5jKXJldHVybiBudWxsO3ZhciBkPWEuYW9EYXRhW2NdO3JldHVybiBkLm5Ucj9kLmFuQ2VsbHNbYl06ZigiPHRkLz4iKS5odG1sKEkoYSxjLGIsImRpc3BsYXkiKSlbMF19ZnVuY3Rpb24gTGIoYSxiKXtmb3IodmFyIGMsZD0tMSxlPS0xLGg9MCxnPWEuYW9EYXRhLmxlbmd0aDtoPGc7aCsrKWM9SShhLGgsYiwiZGlzcGxheSIpKyIiLGM9Yy5yZXBsYWNlKGJjLCIiKSxjPWMucmVwbGFjZSgvJm5ic3A7L2csIiAiKSxjLmxlbmd0aD5kJiYoZD1jLmxlbmd0aCxlPWgpO3JldHVybiBlfQpmdW5jdGlvbiBCKGEpe3JldHVybiBudWxsPT09YT8iMHB4IjoibnVtYmVyIj09dHlwZW9mIGE/MD5hPyIwcHgiOmErInB4IjphLm1hdGNoKC9cZCQvKT9hKyJweCI6YX1mdW5jdGlvbiBZKGEpe3ZhciBiPVtdLGM9YS5hb0NvbHVtbnM7dmFyIGQ9YS5hYVNvcnRpbmdGaXhlZDt2YXIgZT1mLmlzUGxhaW5PYmplY3QoZCk7dmFyIGg9W107dmFyIGc9ZnVuY3Rpb24oYSl7YS5sZW5ndGgmJiFmLmlzQXJyYXkoYVswXSk/aC5wdXNoKGEpOmYubWVyZ2UoaCxhKX07Zi5pc0FycmF5KGQpJiZnKGQpO2UmJmQucHJlJiZnKGQucHJlKTtnKGEuYWFTb3J0aW5nKTtlJiZkLnBvc3QmJmcoZC5wb3N0KTtmb3IoYT0wO2E8aC5sZW5ndGg7YSsrKXt2YXIgaz1oW2FdWzBdO2c9Y1trXS5hRGF0YVNvcnQ7ZD0wO2ZvcihlPWcubGVuZ3RoO2Q8ZTtkKyspe3ZhciBsPWdbZF07dmFyIG49Y1tsXS5zVHlwZXx8InN0cmluZyI7aFthXS5faWR4PT09cCYmKGhbYV0uX2lkeD1mLmluQXJyYXkoaFthXVsxXSxjW2xdLmFzU29ydGluZykpOwpiLnB1c2goe3NyYzprLGNvbDpsLGRpcjpoW2FdWzFdLGluZGV4OmhbYV0uX2lkeCx0eXBlOm4sZm9ybWF0dGVyOnEuZXh0LnR5cGUub3JkZXJbbisiLXByZSJdfSl9fXJldHVybiBifWZ1bmN0aW9uIHJiKGEpe3ZhciBiLGM9W10sZD1xLmV4dC50eXBlLm9yZGVyLGU9YS5hb0RhdGEsaD0wLGc9YS5haURpc3BsYXlNYXN0ZXI7S2EoYSk7dmFyIGs9WShhKTt2YXIgZj0wO2ZvcihiPWsubGVuZ3RoO2Y8YjtmKyspe3ZhciBuPWtbZl07bi5mb3JtYXR0ZXImJmgrKztNYihhLG4uY29sKX1pZigic3NwIiE9RChhKSYmMCE9PWsubGVuZ3RoKXtmPTA7Zm9yKGI9Zy5sZW5ndGg7ZjxiO2YrKyljW2dbZl1dPWY7aD09PWsubGVuZ3RoP2cuc29ydChmdW5jdGlvbihhLGIpe3ZhciBkLGg9ay5sZW5ndGgsZz1lW2FdLl9hU29ydERhdGEsZj1lW2JdLl9hU29ydERhdGE7Zm9yKGQ9MDtkPGg7ZCsrKXt2YXIgbD1rW2RdO3ZhciBtPWdbbC5jb2xdO3ZhciBuPWZbbC5jb2xdO209bTxuPy0xOm0+bj8xOjA7CmlmKDAhPT1tKXJldHVybiJhc2MiPT09bC5kaXI/bTotbX1tPWNbYV07bj1jW2JdO3JldHVybiBtPG4/LTE6bT5uPzE6MH0pOmcuc29ydChmdW5jdGlvbihhLGIpe3ZhciBoLGc9ay5sZW5ndGgsZj1lW2FdLl9hU29ydERhdGEsbD1lW2JdLl9hU29ydERhdGE7Zm9yKGg9MDtoPGc7aCsrKXt2YXIgbT1rW2hdO3ZhciBuPWZbbS5jb2xdO3ZhciBwPWxbbS5jb2xdO209ZFttLnR5cGUrIi0iK20uZGlyXXx8ZFsic3RyaW5nLSIrbS5kaXJdO249bShuLHApO2lmKDAhPT1uKXJldHVybiBufW49Y1thXTtwPWNbYl07cmV0dXJuIG48cD8tMTpuPnA/MTowfSl9YS5iU29ydGVkPSEwfWZ1bmN0aW9uIE5iKGEpe3ZhciBiPWEuYW9Db2x1bW5zLGM9WShhKTthPWEub0xhbmd1YWdlLm9BcmlhO2Zvcih2YXIgZD0wLGU9Yi5sZW5ndGg7ZDxlO2QrKyl7dmFyIGg9YltkXTt2YXIgZz1oLmFzU29ydGluZzt2YXIgaz1oLnNUaXRsZS5yZXBsYWNlKC88Lio/Pi9nLCIiKTt2YXIgZj1oLm5UaDtmLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1zb3J0Iik7CmguYlNvcnRhYmxlJiYoMDxjLmxlbmd0aCYmY1swXS5jb2w9PWQ/KGYuc2V0QXR0cmlidXRlKCJhcmlhLXNvcnQiLCJhc2MiPT1jWzBdLmRpcj8iYXNjZW5kaW5nIjoiZGVzY2VuZGluZyIpLGg9Z1tjWzBdLmluZGV4KzFdfHxnWzBdKTpoPWdbMF0says9ImFzYyI9PT1oP2Euc1NvcnRBc2NlbmRpbmc6YS5zU29ydERlc2NlbmRpbmcpO2Yuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixrKX19ZnVuY3Rpb24gWmEoYSxiLGMsZCl7dmFyIGU9YS5hYVNvcnRpbmcsaD1hLmFvQ29sdW1uc1tiXS5hc1NvcnRpbmcsZz1mdW5jdGlvbihhLGIpe3ZhciBjPWEuX2lkeDtjPT09cCYmKGM9Zi5pbkFycmF5KGFbMV0saCkpO3JldHVybiBjKzE8aC5sZW5ndGg/YysxOmI/bnVsbDowfTsibnVtYmVyIj09PXR5cGVvZiBlWzBdJiYoZT1hLmFhU29ydGluZz1bZV0pO2MmJmEub0ZlYXR1cmVzLmJTb3J0TXVsdGk/KGM9Zi5pbkFycmF5KGIsSihlLCIwIikpLC0xIT09Yz8oYj1nKGVbY10sITApLG51bGw9PT0KYiYmMT09PWUubGVuZ3RoJiYoYj0wKSxudWxsPT09Yj9lLnNwbGljZShjLDEpOihlW2NdWzFdPWhbYl0sZVtjXS5faWR4PWIpKTooZS5wdXNoKFtiLGhbMF0sMF0pLGVbZS5sZW5ndGgtMV0uX2lkeD0wKSk6ZS5sZW5ndGgmJmVbMF1bMF09PWI/KGI9ZyhlWzBdKSxlLmxlbmd0aD0xLGVbMF1bMV09aFtiXSxlWzBdLl9pZHg9Yik6KGUubGVuZ3RoPTAsZS5wdXNoKFtiLGhbMF1dKSxlWzBdLl9pZHg9MCk7VihhKTsiZnVuY3Rpb24iPT10eXBlb2YgZCYmZChhKX1mdW5jdGlvbiBRYShhLGIsYyxkKXt2YXIgZT1hLmFvQ29sdW1uc1tjXTskYShiLHt9LGZ1bmN0aW9uKGIpeyExIT09ZS5iU29ydGFibGUmJihhLm9GZWF0dXJlcy5iUHJvY2Vzc2luZz8oSyhhLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7WmEoYSxjLGIuc2hpZnRLZXksZCk7InNzcCIhPT1EKGEpJiZLKGEsITEpfSwwKSk6WmEoYSxjLGIuc2hpZnRLZXksZCkpfSl9ZnVuY3Rpb24gQWEoYSl7dmFyIGI9YS5hTGFzdFNvcnQsCmM9YS5vQ2xhc3Nlcy5zU29ydENvbHVtbixkPVkoYSksZT1hLm9GZWF0dXJlcyxoO2lmKGUuYlNvcnQmJmUuYlNvcnRDbGFzc2VzKXtlPTA7Zm9yKGg9Yi5sZW5ndGg7ZTxoO2UrKyl7dmFyIGc9YltlXS5zcmM7ZihKKGEuYW9EYXRhLCJhbkNlbGxzIixnKSkucmVtb3ZlQ2xhc3MoYysoMj5lP2UrMTozKSl9ZT0wO2ZvcihoPWQubGVuZ3RoO2U8aDtlKyspZz1kW2VdLnNyYyxmKEooYS5hb0RhdGEsImFuQ2VsbHMiLGcpKS5hZGRDbGFzcyhjKygyPmU/ZSsxOjMpKX1hLmFMYXN0U29ydD1kfWZ1bmN0aW9uIE1iKGEsYil7dmFyIGM9YS5hb0NvbHVtbnNbYl0sZD1xLmV4dC5vcmRlcltjLnNTb3J0RGF0YVR5cGVdLGU7ZCYmKGU9ZC5jYWxsKGEub0luc3RhbmNlLGEsYixjYShhLGIpKSk7Zm9yKHZhciBoLGc9cS5leHQudHlwZS5vcmRlcltjLnNUeXBlKyItcHJlIl0saz0wLGY9YS5hb0RhdGEubGVuZ3RoO2s8ZjtrKyspaWYoYz1hLmFvRGF0YVtrXSxjLl9hU29ydERhdGF8fChjLl9hU29ydERhdGE9CltdKSwhYy5fYVNvcnREYXRhW2JdfHxkKWg9ZD9lW2tdOkkoYSxrLGIsInNvcnQiKSxjLl9hU29ydERhdGFbYl09Zz9nKGgpOmh9ZnVuY3Rpb24gQmEoYSl7aWYoYS5vRmVhdHVyZXMuYlN0YXRlU2F2ZSYmIWEuYkRlc3Ryb3lpbmcpe3ZhciBiPXt0aW1lOituZXcgRGF0ZSxzdGFydDphLl9pRGlzcGxheVN0YXJ0LGxlbmd0aDphLl9pRGlzcGxheUxlbmd0aCxvcmRlcjpmLmV4dGVuZCghMCxbXSxhLmFhU29ydGluZyksc2VhcmNoOkZiKGEub1ByZXZpb3VzU2VhcmNoKSxjb2x1bW5zOmYubWFwKGEuYW9Db2x1bW5zLGZ1bmN0aW9uKGIsZCl7cmV0dXJue3Zpc2libGU6Yi5iVmlzaWJsZSxzZWFyY2g6RmIoYS5hb1ByZVNlYXJjaENvbHNbZF0pfX0pfTtBKGEsImFvU3RhdGVTYXZlUGFyYW1zIiwic3RhdGVTYXZlUGFyYW1zIixbYSxiXSk7YS5vU2F2ZWRTdGF0ZT1iO2EuZm5TdGF0ZVNhdmVDYWxsYmFjay5jYWxsKGEub0luc3RhbmNlLGEsYil9fWZ1bmN0aW9uIE9iKGEsYixjKXt2YXIgZCwKZSxoPWEuYW9Db2x1bW5zO2I9ZnVuY3Rpb24oYil7aWYoYiYmYi50aW1lKXt2YXIgZz1BKGEsImFvU3RhdGVMb2FkUGFyYW1zIiwic3RhdGVMb2FkUGFyYW1zIixbYSxiXSk7aWYoLTE9PT1mLmluQXJyYXkoITEsZykmJihnPWEuaVN0YXRlRHVyYXRpb24sISgwPGcmJmIudGltZTwrbmV3IERhdGUtMUUzKmd8fGIuY29sdW1ucyYmaC5sZW5ndGghPT1iLmNvbHVtbnMubGVuZ3RoKSkpe2Eub0xvYWRlZFN0YXRlPWYuZXh0ZW5kKCEwLHt9LGIpO2Iuc3RhcnQhPT1wJiYoYS5faURpc3BsYXlTdGFydD1iLnN0YXJ0LGEuaUluaXREaXNwbGF5U3RhcnQ9Yi5zdGFydCk7Yi5sZW5ndGghPT1wJiYoYS5faURpc3BsYXlMZW5ndGg9Yi5sZW5ndGgpO2Iub3JkZXIhPT1wJiYoYS5hYVNvcnRpbmc9W10sZi5lYWNoKGIub3JkZXIsZnVuY3Rpb24oYixjKXthLmFhU29ydGluZy5wdXNoKGNbMF0+PWgubGVuZ3RoP1swLGNbMV1dOmMpfSkpO2Iuc2VhcmNoIT09cCYmZi5leHRlbmQoYS5vUHJldmlvdXNTZWFyY2gsCkdiKGIuc2VhcmNoKSk7aWYoYi5jb2x1bW5zKWZvcihkPTAsZT1iLmNvbHVtbnMubGVuZ3RoO2Q8ZTtkKyspZz1iLmNvbHVtbnNbZF0sZy52aXNpYmxlIT09cCYmKGhbZF0uYlZpc2libGU9Zy52aXNpYmxlKSxnLnNlYXJjaCE9PXAmJmYuZXh0ZW5kKGEuYW9QcmVTZWFyY2hDb2xzW2RdLEdiKGcuc2VhcmNoKSk7QShhLCJhb1N0YXRlTG9hZGVkIiwic3RhdGVMb2FkZWQiLFthLGJdKX19YygpfTtpZihhLm9GZWF0dXJlcy5iU3RhdGVTYXZlKXt2YXIgZz1hLmZuU3RhdGVMb2FkQ2FsbGJhY2suY2FsbChhLm9JbnN0YW5jZSxhLGIpO2chPT1wJiZiKGcpfWVsc2UgYygpfWZ1bmN0aW9uIENhKGEpe3ZhciBiPXEuc2V0dGluZ3M7YT1mLmluQXJyYXkoYSxKKGIsIm5UYWJsZSIpKTtyZXR1cm4tMSE9PWE/YlthXTpudWxsfWZ1bmN0aW9uIE8oYSxiLGMsZCl7Yz0iRGF0YVRhYmxlcyB3YXJuaW5nOiAiKyhhPyJ0YWJsZSBpZD0iK2Euc1RhYmxlSWQrIiAtICI6IiIpK2M7ZCYmKGMrPSIuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZXJyb3IsIHBsZWFzZSBzZWUgaHR0cDovL2RhdGF0YWJsZXMubmV0L3RuLyIrCmQpO2lmKGIpei5jb25zb2xlJiZjb25zb2xlLmxvZyYmY29uc29sZS5sb2coYyk7ZWxzZSBpZihiPXEuZXh0LGI9Yi5zRXJyTW9kZXx8Yi5lcnJNb2RlLGEmJkEoYSxudWxsLCJlcnJvciIsW2EsZCxjXSksImFsZXJ0Ij09YilhbGVydChjKTtlbHNle2lmKCJ0aHJvdyI9PWIpdGhyb3cgRXJyb3IoYyk7ImZ1bmN0aW9uIj09dHlwZW9mIGImJmIoYSxkLGMpfX1mdW5jdGlvbiBNKGEsYixjLGQpe2YuaXNBcnJheShjKT9mLmVhY2goYyxmdW5jdGlvbihjLGQpe2YuaXNBcnJheShkKT9NKGEsYixkWzBdLGRbMV0pOk0oYSxiLGQpfSk6KGQ9PT1wJiYoZD1jKSxiW2NdIT09cCYmKGFbZF09YltjXSkpfWZ1bmN0aW9uIGFiKGEsYixjKXt2YXIgZDtmb3IoZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkpe3ZhciBlPWJbZF07Zi5pc1BsYWluT2JqZWN0KGUpPyhmLmlzUGxhaW5PYmplY3QoYVtkXSl8fChhW2RdPXt9KSxmLmV4dGVuZCghMCxhW2RdLGUpKTpjJiYiZGF0YSIhPT1kJiYiYWFEYXRhIiE9PQpkJiZmLmlzQXJyYXkoZSk/YVtkXT1lLnNsaWNlKCk6YVtkXT1lfXJldHVybiBhfWZ1bmN0aW9uICRhKGEsYixjKXtmKGEpLm9uKCJjbGljay5EVCIsYixmdW5jdGlvbihiKXtmKGEpLmJsdXIoKTtjKGIpfSkub24oImtleXByZXNzLkRUIixiLGZ1bmN0aW9uKGEpezEzPT09YS53aGljaCYmKGEucHJldmVudERlZmF1bHQoKSxjKGEpKX0pLm9uKCJzZWxlY3RzdGFydC5EVCIsZnVuY3Rpb24oKXtyZXR1cm4hMX0pfWZ1bmN0aW9uIEUoYSxiLGMsZCl7YyYmYVtiXS5wdXNoKHtmbjpjLHNOYW1lOmR9KX1mdW5jdGlvbiBBKGEsYixjLGQpe3ZhciBlPVtdO2ImJihlPWYubWFwKGFbYl0uc2xpY2UoKS5yZXZlcnNlKCksZnVuY3Rpb24oYixjKXtyZXR1cm4gYi5mbi5hcHBseShhLm9JbnN0YW5jZSxkKX0pKTtudWxsIT09YyYmKGI9Zi5FdmVudChjKyIuZHQiKSxmKGEublRhYmxlKS50cmlnZ2VyKGIsZCksZS5wdXNoKGIucmVzdWx0KSk7cmV0dXJuIGV9ZnVuY3Rpb24gV2EoYSl7dmFyIGI9YS5faURpc3BsYXlTdGFydCwKYz1hLmZuRGlzcGxheUVuZCgpLGQ9YS5faURpc3BsYXlMZW5ndGg7Yj49YyYmKGI9Yy1kKTtiLT1iJWQ7aWYoLTE9PT1kfHwwPmIpYj0wO2EuX2lEaXNwbGF5U3RhcnQ9Yn1mdW5jdGlvbiBSYShhLGIpe2E9YS5yZW5kZXJlcjt2YXIgYz1xLmV4dC5yZW5kZXJlcltiXTtyZXR1cm4gZi5pc1BsYWluT2JqZWN0KGEpJiZhW2JdP2NbYVtiXV18fGMuXzoic3RyaW5nIj09PXR5cGVvZiBhP2NbYV18fGMuXzpjLl99ZnVuY3Rpb24gRChhKXtyZXR1cm4gYS5vRmVhdHVyZXMuYlNlcnZlclNpZGU/InNzcCI6YS5hamF4fHxhLnNBamF4U291cmNlPyJhamF4IjoiZG9tIn1mdW5jdGlvbiBrYShhLGIpe3ZhciBjPVBiLm51bWJlcnNfbGVuZ3RoLGQ9TWF0aC5mbG9vcihjLzIpO2I8PWM/YT1aKDAsYik6YTw9ZD8oYT1aKDAsYy0yKSxhLnB1c2goImVsbGlwc2lzIiksYS5wdXNoKGItMSkpOihhPj1iLTEtZD9hPVooYi0oYy0yKSxiKTooYT1aKGEtZCsyLGErZC0xKSxhLnB1c2goImVsbGlwc2lzIiksCmEucHVzaChiLTEpKSxhLnNwbGljZSgwLDAsImVsbGlwc2lzIiksYS5zcGxpY2UoMCwwLDApKTthLkRUX2VsPSJzcGFuIjtyZXR1cm4gYX1mdW5jdGlvbiBIYShhKXtmLmVhY2goe251bTpmdW5jdGlvbihiKXtyZXR1cm4gRGEoYixhKX0sIm51bS1mbXQiOmZ1bmN0aW9uKGIpe3JldHVybiBEYShiLGEsYmIpfSwiaHRtbC1udW0iOmZ1bmN0aW9uKGIpe3JldHVybiBEYShiLGEsRWEpfSwiaHRtbC1udW0tZm10IjpmdW5jdGlvbihiKXtyZXR1cm4gRGEoYixhLEVhLGJiKX19LGZ1bmN0aW9uKGIsYyl7Qy50eXBlLm9yZGVyW2IrYSsiLXByZSJdPWM7Yi5tYXRjaCgvXmh0bWxcLS8pJiYoQy50eXBlLnNlYXJjaFtiK2FdPUMudHlwZS5zZWFyY2guaHRtbCl9KX1mdW5jdGlvbiBRYihhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj1bQ2EodGhpc1txLmV4dC5pQXBpSW5kZXhdKV0uY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO3JldHVybiBxLmV4dC5pbnRlcm5hbFthXS5hcHBseSh0aGlzLApiKX19dmFyIHE9ZnVuY3Rpb24oYSl7dGhpcy4kPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuYXBpKCEwKS4kKGEsYil9O3RoaXMuXz1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmFwaSghMCkucm93cyhhLGIpLmRhdGEoKX07dGhpcy5hcGk9ZnVuY3Rpb24oYSl7cmV0dXJuIGE/bmV3IHYoQ2EodGhpc1tDLmlBcGlJbmRleF0pKTpuZXcgdih0aGlzKX07dGhpcy5mbkFkZERhdGE9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmFwaSghMCk7YT1mLmlzQXJyYXkoYSkmJihmLmlzQXJyYXkoYVswXSl8fGYuaXNQbGFpbk9iamVjdChhWzBdKSk/Yy5yb3dzLmFkZChhKTpjLnJvdy5hZGQoYSk7KGI9PT1wfHxiKSYmYy5kcmF3KCk7cmV0dXJuIGEuZmxhdHRlbigpLnRvQXJyYXkoKX07dGhpcy5mbkFkanVzdENvbHVtblNpemluZz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmFwaSghMCkuY29sdW1ucy5hZGp1c3QoKSxjPWIuc2V0dGluZ3MoKVswXSxkPWMub1Njcm9sbDthPT09cHx8YT9iLmRyYXcoITEpOgooIiIhPT1kLnNYfHwiIiE9PWQuc1kpJiZuYShjKX07dGhpcy5mbkNsZWFyVGFibGU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5hcGkoITApLmNsZWFyKCk7KGE9PT1wfHxhKSYmYi5kcmF3KCl9O3RoaXMuZm5DbG9zZT1mdW5jdGlvbihhKXt0aGlzLmFwaSghMCkucm93KGEpLmNoaWxkLmhpZGUoKX07dGhpcy5mbkRlbGV0ZVJvdz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5hcGkoITApO2E9ZC5yb3dzKGEpO3ZhciBlPWEuc2V0dGluZ3MoKVswXSxoPWUuYW9EYXRhW2FbMF1bMF1dO2EucmVtb3ZlKCk7YiYmYi5jYWxsKHRoaXMsZSxoKTsoYz09PXB8fGMpJiZkLmRyYXcoKTtyZXR1cm4gaH07dGhpcy5mbkRlc3Ryb3k9ZnVuY3Rpb24oYSl7dGhpcy5hcGkoITApLmRlc3Ryb3koYSl9O3RoaXMuZm5EcmF3PWZ1bmN0aW9uKGEpe3RoaXMuYXBpKCEwKS5kcmF3KGEpfTt0aGlzLmZuRmlsdGVyPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXtlPXRoaXMuYXBpKCEwKTtudWxsPT09Ynx8Yj09PXA/CmUuc2VhcmNoKGEsYyxkLGYpOmUuY29sdW1uKGIpLnNlYXJjaChhLGMsZCxmKTtlLmRyYXcoKX07dGhpcy5mbkdldERhdGE9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmFwaSghMCk7aWYoYSE9PXApe3ZhciBkPWEubm9kZU5hbWU/YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOiIiO3JldHVybiBiIT09cHx8InRkIj09ZHx8InRoIj09ZD9jLmNlbGwoYSxiKS5kYXRhKCk6Yy5yb3coYSkuZGF0YSgpfHxudWxsfXJldHVybiBjLmRhdGEoKS50b0FycmF5KCl9O3RoaXMuZm5HZXROb2Rlcz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmFwaSghMCk7cmV0dXJuIGEhPT1wP2Iucm93KGEpLm5vZGUoKTpiLnJvd3MoKS5ub2RlcygpLmZsYXR0ZW4oKS50b0FycmF5KCl9O3RoaXMuZm5HZXRQb3NpdGlvbj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmFwaSghMCksYz1hLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7cmV0dXJuIlRSIj09Yz9iLnJvdyhhKS5pbmRleCgpOiJURCI9PWN8fCJUSCI9PWM/KGE9Yi5jZWxsKGEpLmluZGV4KCksClthLnJvdyxhLmNvbHVtblZpc2libGUsYS5jb2x1bW5dKTpudWxsfTt0aGlzLmZuSXNPcGVuPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmFwaSghMCkucm93KGEpLmNoaWxkLmlzU2hvd24oKX07dGhpcy5mbk9wZW49ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLmFwaSghMCkucm93KGEpLmNoaWxkKGIsYykuc2hvdygpLmNoaWxkKClbMF19O3RoaXMuZm5QYWdlQ2hhbmdlPWZ1bmN0aW9uKGEsYil7YT10aGlzLmFwaSghMCkucGFnZShhKTsoYj09PXB8fGIpJiZhLmRyYXcoITEpfTt0aGlzLmZuU2V0Q29sdW1uVmlzPWZ1bmN0aW9uKGEsYixjKXthPXRoaXMuYXBpKCEwKS5jb2x1bW4oYSkudmlzaWJsZShiKTsoYz09PXB8fGMpJiZhLmNvbHVtbnMuYWRqdXN0KCkuZHJhdygpfTt0aGlzLmZuU2V0dGluZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gQ2EodGhpc1tDLmlBcGlJbmRleF0pfTt0aGlzLmZuU29ydD1mdW5jdGlvbihhKXt0aGlzLmFwaSghMCkub3JkZXIoYSkuZHJhdygpfTt0aGlzLmZuU29ydExpc3RlbmVyPQpmdW5jdGlvbihhLGIsYyl7dGhpcy5hcGkoITApLm9yZGVyLmxpc3RlbmVyKGEsYixjKX07dGhpcy5mblVwZGF0ZT1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBoPXRoaXMuYXBpKCEwKTtjPT09cHx8bnVsbD09PWM/aC5yb3coYikuZGF0YShhKTpoLmNlbGwoYixjKS5kYXRhKGEpOyhlPT09cHx8ZSkmJmguY29sdW1ucy5hZGp1c3QoKTsoZD09PXB8fGQpJiZoLmRyYXcoKTtyZXR1cm4gMH07dGhpcy5mblZlcnNpb25DaGVjaz1DLmZuVmVyc2lvbkNoZWNrO3ZhciBiPXRoaXMsYz1hPT09cCxkPXRoaXMubGVuZ3RoO2MmJihhPXt9KTt0aGlzLm9BcGk9dGhpcy5pbnRlcm5hbD1DLmludGVybmFsO2Zvcih2YXIgZSBpbiBxLmV4dC5pbnRlcm5hbCllJiYodGhpc1tlXT1RYihlKSk7dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9e30sZz0xPGQ/YWIoZSxhLCEwKTphLGs9MCxsO2U9dGhpcy5nZXRBdHRyaWJ1dGUoImlkIik7dmFyIG49ITEsbT1xLmRlZmF1bHRzLHc9Zih0aGlzKTtpZigidGFibGUiIT0KdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKU8obnVsbCwwLCJOb24tdGFibGUgbm9kZSBpbml0aWFsaXNhdGlvbiAoIit0aGlzLm5vZGVOYW1lKyIpIiwyKTtlbHNle2piKG0pO2tiKG0uY29sdW1uKTtMKG0sbSwhMCk7TChtLmNvbHVtbixtLmNvbHVtbiwhMCk7TChtLGYuZXh0ZW5kKGcsdy5kYXRhKCkpLCEwKTt2YXIgdT1xLnNldHRpbmdzO2s9MDtmb3IobD11Lmxlbmd0aDtrPGw7aysrKXt2YXIgdD11W2tdO2lmKHQublRhYmxlPT10aGlzfHx0Lm5USGVhZCYmdC5uVEhlYWQucGFyZW50Tm9kZT09dGhpc3x8dC5uVEZvb3QmJnQublRGb290LnBhcmVudE5vZGU9PXRoaXMpe3ZhciB2PWcuYlJldHJpZXZlIT09cD9nLmJSZXRyaWV2ZTptLmJSZXRyaWV2ZTtpZihjfHx2KXJldHVybiB0Lm9JbnN0YW5jZTtpZihnLmJEZXN0cm95IT09cD9nLmJEZXN0cm95Om0uYkRlc3Ryb3kpe3Qub0luc3RhbmNlLmZuRGVzdHJveSgpO2JyZWFrfWVsc2V7Tyh0LDAsIkNhbm5vdCByZWluaXRpYWxpc2UgRGF0YVRhYmxlIiwKMyk7cmV0dXJufX1pZih0LnNUYWJsZUlkPT10aGlzLmlkKXt1LnNwbGljZShrLDEpO2JyZWFrfX1pZihudWxsPT09ZXx8IiI9PT1lKXRoaXMuaWQ9ZT0iRGF0YVRhYmxlc19UYWJsZV8iK3EuZXh0Ll91bmlxdWUrKzt2YXIgcj1mLmV4dGVuZCghMCx7fSxxLm1vZGVscy5vU2V0dGluZ3Mse3NEZXN0cm95V2lkdGg6d1swXS5zdHlsZS53aWR0aCxzSW5zdGFuY2U6ZSxzVGFibGVJZDplfSk7ci5uVGFibGU9dGhpcztyLm9BcGk9Yi5pbnRlcm5hbDtyLm9Jbml0PWc7dS5wdXNoKHIpO3Iub0luc3RhbmNlPTE9PT1iLmxlbmd0aD9iOncuZGF0YVRhYmxlKCk7amIoZyk7R2EoZy5vTGFuZ3VhZ2UpO2cuYUxlbmd0aE1lbnUmJiFnLmlEaXNwbGF5TGVuZ3RoJiYoZy5pRGlzcGxheUxlbmd0aD1mLmlzQXJyYXkoZy5hTGVuZ3RoTWVudVswXSk/Zy5hTGVuZ3RoTWVudVswXVswXTpnLmFMZW5ndGhNZW51WzBdKTtnPWFiKGYuZXh0ZW5kKCEwLHt9LG0pLGcpO00oci5vRmVhdHVyZXMsZywiYlBhZ2luYXRlIGJMZW5ndGhDaGFuZ2UgYkZpbHRlciBiU29ydCBiU29ydE11bHRpIGJJbmZvIGJQcm9jZXNzaW5nIGJBdXRvV2lkdGggYlNvcnRDbGFzc2VzIGJTZXJ2ZXJTaWRlIGJEZWZlclJlbmRlciIuc3BsaXQoIiAiKSk7Ck0ocixnLFsiYXNTdHJpcGVDbGFzc2VzIiwiYWpheCIsImZuU2VydmVyRGF0YSIsImZuRm9ybWF0TnVtYmVyIiwic1NlcnZlck1ldGhvZCIsImFhU29ydGluZyIsImFhU29ydGluZ0ZpeGVkIiwiYUxlbmd0aE1lbnUiLCJzUGFnaW5hdGlvblR5cGUiLCJzQWpheFNvdXJjZSIsInNBamF4RGF0YVByb3AiLCJpU3RhdGVEdXJhdGlvbiIsInNEb20iLCJiU29ydENlbGxzVG9wIiwiaVRhYkluZGV4IiwiZm5TdGF0ZUxvYWRDYWxsYmFjayIsImZuU3RhdGVTYXZlQ2FsbGJhY2siLCJyZW5kZXJlciIsInNlYXJjaERlbGF5Iiwicm93SWQiLFsiaUNvb2tpZUR1cmF0aW9uIiwiaVN0YXRlRHVyYXRpb24iXSxbIm9TZWFyY2giLCJvUHJldmlvdXNTZWFyY2giXSxbImFvU2VhcmNoQ29scyIsImFvUHJlU2VhcmNoQ29scyJdLFsiaURpc3BsYXlMZW5ndGgiLCJfaURpc3BsYXlMZW5ndGgiXV0pO00oci5vU2Nyb2xsLGcsW1sic1Njcm9sbFgiLCJzWCJdLFsic1Njcm9sbFhJbm5lciIsInNYSW5uZXIiXSwKWyJzU2Nyb2xsWSIsInNZIl0sWyJiU2Nyb2xsQ29sbGFwc2UiLCJiQ29sbGFwc2UiXV0pO00oci5vTGFuZ3VhZ2UsZywiZm5JbmZvQ2FsbGJhY2siKTtFKHIsImFvRHJhd0NhbGxiYWNrIixnLmZuRHJhd0NhbGxiYWNrLCJ1c2VyIik7RShyLCJhb1NlcnZlclBhcmFtcyIsZy5mblNlcnZlclBhcmFtcywidXNlciIpO0UociwiYW9TdGF0ZVNhdmVQYXJhbXMiLGcuZm5TdGF0ZVNhdmVQYXJhbXMsInVzZXIiKTtFKHIsImFvU3RhdGVMb2FkUGFyYW1zIixnLmZuU3RhdGVMb2FkUGFyYW1zLCJ1c2VyIik7RShyLCJhb1N0YXRlTG9hZGVkIixnLmZuU3RhdGVMb2FkZWQsInVzZXIiKTtFKHIsImFvUm93Q2FsbGJhY2siLGcuZm5Sb3dDYWxsYmFjaywidXNlciIpO0UociwiYW9Sb3dDcmVhdGVkQ2FsbGJhY2siLGcuZm5DcmVhdGVkUm93LCJ1c2VyIik7RShyLCJhb0hlYWRlckNhbGxiYWNrIixnLmZuSGVhZGVyQ2FsbGJhY2ssInVzZXIiKTtFKHIsImFvRm9vdGVyQ2FsbGJhY2siLGcuZm5Gb290ZXJDYWxsYmFjaywKInVzZXIiKTtFKHIsImFvSW5pdENvbXBsZXRlIixnLmZuSW5pdENvbXBsZXRlLCJ1c2VyIik7RShyLCJhb1ByZURyYXdDYWxsYmFjayIsZy5mblByZURyYXdDYWxsYmFjaywidXNlciIpO3Iucm93SWRGbj1VKGcucm93SWQpO2xiKHIpO3ZhciB4PXIub0NsYXNzZXM7Zi5leHRlbmQoeCxxLmV4dC5jbGFzc2VzLGcub0NsYXNzZXMpO3cuYWRkQ2xhc3MoeC5zVGFibGUpO3IuaUluaXREaXNwbGF5U3RhcnQ9PT1wJiYoci5pSW5pdERpc3BsYXlTdGFydD1nLmlEaXNwbGF5U3RhcnQsci5faURpc3BsYXlTdGFydD1nLmlEaXNwbGF5U3RhcnQpO251bGwhPT1nLmlEZWZlckxvYWRpbmcmJihyLmJEZWZlckxvYWRpbmc9ITAsZT1mLmlzQXJyYXkoZy5pRGVmZXJMb2FkaW5nKSxyLl9pUmVjb3Jkc0Rpc3BsYXk9ZT9nLmlEZWZlckxvYWRpbmdbMF06Zy5pRGVmZXJMb2FkaW5nLHIuX2lSZWNvcmRzVG90YWw9ZT9nLmlEZWZlckxvYWRpbmdbMV06Zy5pRGVmZXJMb2FkaW5nKTt2YXIgeT1yLm9MYW5ndWFnZTsKZi5leHRlbmQoITAseSxnLm9MYW5ndWFnZSk7eS5zVXJsJiYoZi5hamF4KHtkYXRhVHlwZToianNvbiIsdXJsOnkuc1VybCxzdWNjZXNzOmZ1bmN0aW9uKGEpe0dhKGEpO0wobS5vTGFuZ3VhZ2UsYSk7Zi5leHRlbmQoITAseSxhKTtqYShyKX0sZXJyb3I6ZnVuY3Rpb24oKXtqYShyKX19KSxuPSEwKTtudWxsPT09Zy5hc1N0cmlwZUNsYXNzZXMmJihyLmFzU3RyaXBlQ2xhc3Nlcz1beC5zU3RyaXBlT2RkLHguc1N0cmlwZUV2ZW5dKTtlPXIuYXNTdHJpcGVDbGFzc2VzO3ZhciB6PXcuY2hpbGRyZW4oInRib2R5IikuZmluZCgidHIiKS5lcSgwKTstMSE9PWYuaW5BcnJheSghMCxmLm1hcChlLGZ1bmN0aW9uKGEsYil7cmV0dXJuIHouaGFzQ2xhc3MoYSl9KSkmJihmKCJ0Ym9keSB0ciIsdGhpcykucmVtb3ZlQ2xhc3MoZS5qb2luKCIgIikpLHIuYXNEZXN0cm95U3RyaXBlcz1lLnNsaWNlKCkpO2U9W107dT10aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0aGVhZCIpOzAhPT11Lmxlbmd0aCYmCihmYShyLmFvSGVhZGVyLHVbMF0pLGU9dWEocikpO2lmKG51bGw9PT1nLmFvQ29sdW1ucylmb3IodT1bXSxrPTAsbD1lLmxlbmd0aDtrPGw7aysrKXUucHVzaChudWxsKTtlbHNlIHU9Zy5hb0NvbHVtbnM7az0wO2ZvcihsPXUubGVuZ3RoO2s8bDtrKyspSWEocixlP2Vba106bnVsbCk7bmIocixnLmFvQ29sdW1uRGVmcyx1LGZ1bmN0aW9uKGEsYil7bWEocixhLGIpfSk7aWYoei5sZW5ndGgpe3ZhciBCPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGwhPT1hLmdldEF0dHJpYnV0ZSgiZGF0YS0iK2IpP2I6bnVsbH07Zih6WzBdKS5jaGlsZHJlbigidGgsIHRkIikuZWFjaChmdW5jdGlvbihhLGIpe3ZhciBjPXIuYW9Db2x1bW5zW2FdO2lmKGMubURhdGE9PT1hKXt2YXIgZD1CKGIsInNvcnQiKXx8QihiLCJvcmRlciIpO2I9QihiLCJmaWx0ZXIiKXx8QihiLCJzZWFyY2giKTtpZihudWxsIT09ZHx8bnVsbCE9PWIpYy5tRGF0YT17XzphKyIuZGlzcGxheSIsc29ydDpudWxsIT09ZD9hKyIuQGRhdGEtIisKZDpwLHR5cGU6bnVsbCE9PWQ/YSsiLkBkYXRhLSIrZDpwLGZpbHRlcjpudWxsIT09Yj9hKyIuQGRhdGEtIitiOnB9LG1hKHIsYSl9fSl9dmFyIEM9ci5vRmVhdHVyZXM7ZT1mdW5jdGlvbigpe2lmKGcuYWFTb3J0aW5nPT09cCl7dmFyIGE9ci5hYVNvcnRpbmc7az0wO2ZvcihsPWEubGVuZ3RoO2s8bDtrKyspYVtrXVsxXT1yLmFvQ29sdW1uc1trXS5hc1NvcnRpbmdbMF19QWEocik7Qy5iU29ydCYmRShyLCJhb0RyYXdDYWxsYmFjayIsZnVuY3Rpb24oKXtpZihyLmJTb3J0ZWQpe3ZhciBhPVkociksYj17fTtmLmVhY2goYSxmdW5jdGlvbihhLGMpe2JbYy5zcmNdPWMuZGlyfSk7QShyLG51bGwsIm9yZGVyIixbcixhLGJdKTtOYihyKX19KTtFKHIsImFvRHJhd0NhbGxiYWNrIixmdW5jdGlvbigpeyhyLmJTb3J0ZWR8fCJzc3AiPT09RChyKXx8Qy5iRGVmZXJSZW5kZXIpJiZBYShyKX0sInNjIik7YT13LmNoaWxkcmVuKCJjYXB0aW9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuX2NhcHRpb25TaWRlPQpmKHRoaXMpLmNzcygiY2FwdGlvbi1zaWRlIil9KTt2YXIgYj13LmNoaWxkcmVuKCJ0aGVhZCIpOzA9PT1iLmxlbmd0aCYmKGI9ZigiPHRoZWFkLz4iKS5hcHBlbmRUbyh3KSk7ci5uVEhlYWQ9YlswXTtiPXcuY2hpbGRyZW4oInRib2R5Iik7MD09PWIubGVuZ3RoJiYoYj1mKCI8dGJvZHkvPiIpLmFwcGVuZFRvKHcpKTtyLm5UQm9keT1iWzBdO2I9dy5jaGlsZHJlbigidGZvb3QiKTswPT09Yi5sZW5ndGgmJjA8YS5sZW5ndGgmJigiIiE9PXIub1Njcm9sbC5zWHx8IiIhPT1yLm9TY3JvbGwuc1kpJiYoYj1mKCI8dGZvb3QvPiIpLmFwcGVuZFRvKHcpKTswPT09Yi5sZW5ndGh8fDA9PT1iLmNoaWxkcmVuKCkubGVuZ3RoP3cuYWRkQ2xhc3MoeC5zTm9Gb290ZXIpOjA8Yi5sZW5ndGgmJihyLm5URm9vdD1iWzBdLGZhKHIuYW9Gb290ZXIsci5uVEZvb3QpKTtpZihnLmFhRGF0YSlmb3Ioaz0wO2s8Zy5hYURhdGEubGVuZ3RoO2srKylSKHIsZy5hYURhdGFba10pO2Vsc2Uoci5iRGVmZXJMb2FkaW5nfHwKImRvbSI9PUQocikpJiZwYShyLGYoci5uVEJvZHkpLmNoaWxkcmVuKCJ0ciIpKTtyLmFpRGlzcGxheT1yLmFpRGlzcGxheU1hc3Rlci5zbGljZSgpO3IuYkluaXRpYWxpc2VkPSEwOyExPT09biYmamEocil9O2cuYlN0YXRlU2F2ZT8oQy5iU3RhdGVTYXZlPSEwLEUociwiYW9EcmF3Q2FsbGJhY2siLEJhLCJzdGF0ZV9zYXZlIiksT2IocixnLGUpKTplKCl9fSk7Yj1udWxsO3JldHVybiB0aGlzfSxDLHQseCxjYj17fSxSYj0vW1xyXG5cdTIwMjhdL2csRWE9LzwuKj8+L2csY2M9L15cZHsyLDR9W1wuXC9cLV1cZHsxLDJ9W1wuXC9cLV1cZHsxLDJ9KFtUIF17MX1cZHsxLDJ9WzpcLl1cZHsyfShbXC46XVxkezJ9KT8pPyQvLGRjPS8oXC98XC58XCp8XCt8XD98XHx8XCh8XCl8XFt8XF18XHt8XH18XFx8XCR8XF58XC0pL2csYmI9L1snLCTCo+KCrMKlJVx1MjAwOVx1MjAyRlx1MjBCRFx1MjBhOVx1MjBCQXJma8mDzp5dL2dpLFA9ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJiEwIT09YSYmIi0iIT09YT8hMToKITB9LFNiPWZ1bmN0aW9uKGEpe3ZhciBiPXBhcnNlSW50KGEsMTApO3JldHVybiFpc05hTihiKSYmaXNGaW5pdGUoYSk/YjpudWxsfSxUYj1mdW5jdGlvbihhLGIpe2NiW2JdfHwoY2JbYl09bmV3IFJlZ0V4cChVYShiKSwiZyIpKTtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBhJiYiLiIhPT1iP2EucmVwbGFjZSgvXC4vZywiIikucmVwbGFjZShjYltiXSwiLiIpOmF9LGRiPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD0ic3RyaW5nIj09PXR5cGVvZiBhO2lmKFAoYSkpcmV0dXJuITA7YiYmZCYmKGE9VGIoYSxiKSk7YyYmZCYmKGE9YS5yZXBsYWNlKGJiLCIiKSk7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQoYSkpJiZpc0Zpbml0ZShhKX0sVWI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBQKGEpPyEwOlAoYSl8fCJzdHJpbmciPT09dHlwZW9mIGE/ZGIoYS5yZXBsYWNlKEVhLCIiKSxiLGMpPyEwOm51bGw6bnVsbH0sSj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9W10sZT0wLGg9YS5sZW5ndGg7aWYoYyE9PQpwKWZvcig7ZTxoO2UrKylhW2VdJiZhW2VdW2JdJiZkLnB1c2goYVtlXVtiXVtjXSk7ZWxzZSBmb3IoO2U8aDtlKyspYVtlXSYmZC5wdXNoKGFbZV1bYl0pO3JldHVybiBkfSxsYT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1bXSxoPTAsZz1iLmxlbmd0aDtpZihkIT09cClmb3IoO2g8ZztoKyspYVtiW2hdXVtjXSYmZS5wdXNoKGFbYltoXV1bY11bZF0pO2Vsc2UgZm9yKDtoPGc7aCsrKWUucHVzaChhW2JbaF1dW2NdKTtyZXR1cm4gZX0sWj1mdW5jdGlvbihhLGIpe3ZhciBjPVtdO2lmKGI9PT1wKXtiPTA7dmFyIGQ9YX1lbHNlIGQ9YixiPWE7Zm9yKGE9YjthPGQ7YSsrKWMucHVzaChhKTtyZXR1cm4gY30sVmI9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MCxkPWEubGVuZ3RoO2M8ZDtjKyspYVtjXSYmYi5wdXNoKGFbY10pO3JldHVybiBifSx0YT1mdW5jdGlvbihhKXthOntpZighKDI+YS5sZW5ndGgpKXt2YXIgYj1hLnNsaWNlKCkuc29ydCgpO2Zvcih2YXIgYz1iWzBdLGQ9MSwKZT1iLmxlbmd0aDtkPGU7ZCsrKXtpZihiW2RdPT09Yyl7Yj0hMTticmVhayBhfWM9YltkXX19Yj0hMH1pZihiKXJldHVybiBhLnNsaWNlKCk7Yj1bXTtlPWEubGVuZ3RoO3ZhciBoLGc9MDtkPTA7YTpmb3IoO2Q8ZTtkKyspe2M9YVtkXTtmb3IoaD0wO2g8ZztoKyspaWYoYltoXT09PWMpY29udGludWUgYTtiLnB1c2goYyk7ZysrfXJldHVybiBifTtxLnV0aWw9e3Rocm90dGxlOmZ1bmN0aW9uKGEsYil7dmFyIGM9YiE9PXA/YjoyMDAsZCxlO3JldHVybiBmdW5jdGlvbigpe3ZhciBiPXRoaXMsZz0rbmV3IERhdGUsZj1hcmd1bWVudHM7ZCYmZzxkK2M/KGNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtkPXA7YS5hcHBseShiLGYpfSxjKSk6KGQ9ZyxhLmFwcGx5KGIsZikpfX0sZXNjYXBlUmVnZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZShkYywiXFwkMSIpfX07dmFyIEY9ZnVuY3Rpb24oYSxiLGMpe2FbYl0hPT1wJiYoYVtjXT1hW2JdKX0sZGE9L1xbLio/XF0kLywKWD0vXChcKSQvLFVhPXEudXRpbC5lc2NhcGVSZWdleCx5YT1mKCI8ZGl2PiIpWzBdLCRiPXlhLnRleHRDb250ZW50IT09cCxiYz0vPC4qPz4vZyxTYT1xLnV0aWwudGhyb3R0bGUsV2I9W10sRz1BcnJheS5wcm90b3R5cGUsZWM9ZnVuY3Rpb24oYSl7dmFyIGIsYz1xLnNldHRpbmdzLGQ9Zi5tYXAoYyxmdW5jdGlvbihhLGIpe3JldHVybiBhLm5UYWJsZX0pO2lmKGEpe2lmKGEublRhYmxlJiZhLm9BcGkpcmV0dXJuW2FdO2lmKGEubm9kZU5hbWUmJiJ0YWJsZSI9PT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe3ZhciBlPWYuaW5BcnJheShhLGQpO3JldHVybi0xIT09ZT9bY1tlXV06bnVsbH1pZihhJiYiZnVuY3Rpb24iPT09dHlwZW9mIGEuc2V0dGluZ3MpcmV0dXJuIGEuc2V0dGluZ3MoKS50b0FycmF5KCk7InN0cmluZyI9PT10eXBlb2YgYT9iPWYoYSk6YSBpbnN0YW5jZW9mIGYmJihiPWEpfWVsc2UgcmV0dXJuW107aWYoYilyZXR1cm4gYi5tYXAoZnVuY3Rpb24oYSl7ZT1mLmluQXJyYXkodGhpcywKZCk7cmV0dXJuLTEhPT1lP2NbZV06bnVsbH0pLnRvQXJyYXkoKX07dmFyIHY9ZnVuY3Rpb24oYSxiKXtpZighKHRoaXMgaW5zdGFuY2VvZiB2KSlyZXR1cm4gbmV3IHYoYSxiKTt2YXIgYz1bXSxkPWZ1bmN0aW9uKGEpeyhhPWVjKGEpKSYmYy5wdXNoLmFwcGx5KGMsYSl9O2lmKGYuaXNBcnJheShhKSlmb3IodmFyIGU9MCxoPWEubGVuZ3RoO2U8aDtlKyspZChhW2VdKTtlbHNlIGQoYSk7dGhpcy5jb250ZXh0PXRhKGMpO2ImJmYubWVyZ2UodGhpcyxiKTt0aGlzLnNlbGVjdG9yPXtyb3dzOm51bGwsY29sczpudWxsLG9wdHM6bnVsbH07di5leHRlbmQodGhpcyx0aGlzLFdiKX07cS5BcGk9djtmLmV4dGVuZCh2LnByb3RvdHlwZSx7YW55OmZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLmNvdW50KCl9LGNvbmNhdDpHLmNvbmNhdCxjb250ZXh0OltdLGNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmxhdHRlbigpLmxlbmd0aH0sZWFjaDpmdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPQp0aGlzLmxlbmd0aDtiPGM7YisrKWEuY2FsbCh0aGlzLHRoaXNbYl0sYix0aGlzKTtyZXR1cm4gdGhpc30sZXE6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jb250ZXh0O3JldHVybiBiLmxlbmd0aD5hP25ldyB2KGJbYV0sdGhpc1thXSk6bnVsbH0sZmlsdGVyOmZ1bmN0aW9uKGEpe3ZhciBiPVtdO2lmKEcuZmlsdGVyKWI9Ry5maWx0ZXIuY2FsbCh0aGlzLGEsdGhpcyk7ZWxzZSBmb3IodmFyIGM9MCxkPXRoaXMubGVuZ3RoO2M8ZDtjKyspYS5jYWxsKHRoaXMsdGhpc1tjXSxjLHRoaXMpJiZiLnB1c2godGhpc1tjXSk7cmV0dXJuIG5ldyB2KHRoaXMuY29udGV4dCxiKX0sZmxhdHRlbjpmdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiBuZXcgdih0aGlzLmNvbnRleHQsYS5jb25jYXQuYXBwbHkoYSx0aGlzLnRvQXJyYXkoKSkpfSxqb2luOkcuam9pbixpbmRleE9mOkcuaW5kZXhPZnx8ZnVuY3Rpb24oYSxiKXtiPWJ8fDA7Zm9yKHZhciBjPXRoaXMubGVuZ3RoO2I8YztiKyspaWYodGhpc1tiXT09PQphKXJldHVybiBiO3JldHVybi0xfSxpdGVyYXRvcjpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1bXSxoLGcsZj10aGlzLmNvbnRleHQsbCxuPXRoaXMuc2VsZWN0b3I7InN0cmluZyI9PT10eXBlb2YgYSYmKGQ9YyxjPWIsYj1hLGE9ITEpO3ZhciBtPTA7Zm9yKGg9Zi5sZW5ndGg7bTxoO20rKyl7dmFyIHE9bmV3IHYoZlttXSk7aWYoInRhYmxlIj09PWIpe3ZhciB1PWMuY2FsbChxLGZbbV0sbSk7dSE9PXAmJmUucHVzaCh1KX1lbHNlIGlmKCJjb2x1bW5zIj09PWJ8fCJyb3dzIj09PWIpdT1jLmNhbGwocSxmW21dLHRoaXNbbV0sbSksdSE9PXAmJmUucHVzaCh1KTtlbHNlIGlmKCJjb2x1bW4iPT09Ynx8ImNvbHVtbi1yb3dzIj09PWJ8fCJyb3ciPT09Ynx8ImNlbGwiPT09Yil7dmFyIHQ9dGhpc1ttXTsiY29sdW1uLXJvd3MiPT09YiYmKGw9RmEoZlttXSxuLm9wdHMpKTt2YXIgeD0wO2ZvcihnPXQubGVuZ3RoO3g8Zzt4KyspdT10W3hdLHU9ImNlbGwiPT09Yj9jLmNhbGwocSxmW21dLHUucm93LAp1LmNvbHVtbixtLHgpOmMuY2FsbChxLGZbbV0sdSxtLHgsbCksdSE9PXAmJmUucHVzaCh1KX19cmV0dXJuIGUubGVuZ3RofHxkPyhhPW5ldyB2KGYsYT9lLmNvbmNhdC5hcHBseShbXSxlKTplKSxiPWEuc2VsZWN0b3IsYi5yb3dzPW4ucm93cyxiLmNvbHM9bi5jb2xzLGIub3B0cz1uLm9wdHMsYSk6dGhpc30sbGFzdEluZGV4T2Y6Ry5sYXN0SW5kZXhPZnx8ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5pbmRleE9mLmFwcGx5KHRoaXMudG9BcnJheS5yZXZlcnNlKCksYXJndW1lbnRzKX0sbGVuZ3RoOjAsbWFwOmZ1bmN0aW9uKGEpe3ZhciBiPVtdO2lmKEcubWFwKWI9Ry5tYXAuY2FsbCh0aGlzLGEsdGhpcyk7ZWxzZSBmb3IodmFyIGM9MCxkPXRoaXMubGVuZ3RoO2M8ZDtjKyspYi5wdXNoKGEuY2FsbCh0aGlzLHRoaXNbY10sYykpO3JldHVybiBuZXcgdih0aGlzLmNvbnRleHQsYil9LHBsdWNrOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbihiKXtyZXR1cm4gYlthXX0pfSwKcG9wOkcucG9wLHB1c2g6Ry5wdXNoLHJlZHVjZTpHLnJlZHVjZXx8ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbWIodGhpcyxhLGIsMCx0aGlzLmxlbmd0aCwxKX0scmVkdWNlUmlnaHQ6Ry5yZWR1Y2VSaWdodHx8ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbWIodGhpcyxhLGIsdGhpcy5sZW5ndGgtMSwtMSwtMSl9LHJldmVyc2U6Ry5yZXZlcnNlLHNlbGVjdG9yOm51bGwsc2hpZnQ6Ry5zaGlmdCxzbGljZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdih0aGlzLmNvbnRleHQsdGhpcyl9LHNvcnQ6Ry5zb3J0LHNwbGljZTpHLnNwbGljZSx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIEcuc2xpY2UuY2FsbCh0aGlzKX0sdG8kOmZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcyl9LHRvSlF1ZXJ5OmZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcyl9LHVuaXF1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdih0aGlzLmNvbnRleHQsdGEodGhpcykpfSx1bnNoaWZ0OkcudW5zaGlmdH0pO3YuZXh0ZW5kPWZ1bmN0aW9uKGEsCmIsYyl7aWYoYy5sZW5ndGgmJmImJihiIGluc3RhbmNlb2Ygdnx8Yi5fX2R0X3dyYXBwZXIpKXt2YXIgZCxlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZD1iLmFwcGx5KGEsYXJndW1lbnRzKTt2LmV4dGVuZChkLGQsYy5tZXRob2RFeHQpO3JldHVybiBkfX07dmFyIGg9MDtmb3IoZD1jLmxlbmd0aDtoPGQ7aCsrKXt2YXIgZz1jW2hdO2JbZy5uYW1lXT0iZnVuY3Rpb24iPT09Zy50eXBlP2UoYSxnLnZhbCxnKToib2JqZWN0Ij09PWcudHlwZT97fTpnLnZhbDtiW2cubmFtZV0uX19kdF93cmFwcGVyPSEwO3YuZXh0ZW5kKGEsYltnLm5hbWVdLGcucHJvcEV4dCl9fX07di5yZWdpc3Rlcj10PWZ1bmN0aW9uKGEsYil7aWYoZi5pc0FycmF5KGEpKWZvcih2YXIgYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKyl2LnJlZ2lzdGVyKGFbY10sYik7ZWxzZXtkPWEuc3BsaXQoIi4iKTt2YXIgZT1XYixoO2E9MDtmb3IoYz1kLmxlbmd0aDthPGM7YSsrKXt2YXIgZz0oaD0tMSE9PQpkW2FdLmluZGV4T2YoIigpIikpP2RbYV0ucmVwbGFjZSgiKCkiLCIiKTpkW2FdO2E6e3ZhciBrPTA7Zm9yKHZhciBsPWUubGVuZ3RoO2s8bDtrKyspaWYoZVtrXS5uYW1lPT09Zyl7az1lW2tdO2JyZWFrIGF9az1udWxsfWt8fChrPXtuYW1lOmcsdmFsOnt9LG1ldGhvZEV4dDpbXSxwcm9wRXh0OltdLHR5cGU6Im9iamVjdCJ9LGUucHVzaChrKSk7YT09PWMtMT8oay52YWw9YixrLnR5cGU9ImZ1bmN0aW9uIj09PXR5cGVvZiBiPyJmdW5jdGlvbiI6Zi5pc1BsYWluT2JqZWN0KGIpPyJvYmplY3QiOiJvdGhlciIpOmU9aD9rLm1ldGhvZEV4dDprLnByb3BFeHR9fX07di5yZWdpc3RlclBsdXJhbD14PWZ1bmN0aW9uKGEsYixjKXt2LnJlZ2lzdGVyKGEsYyk7di5yZWdpc3RlcihiLGZ1bmN0aW9uKCl7dmFyIGE9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGE9PT10aGlzP3RoaXM6YSBpbnN0YW5jZW9mIHY/YS5sZW5ndGg/Zi5pc0FycmF5KGFbMF0pP25ldyB2KGEuY29udGV4dCwKYVswXSk6YVswXTpwOmF9KX07dmFyIGZjPWZ1bmN0aW9uKGEsYil7aWYoIm51bWJlciI9PT10eXBlb2YgYSlyZXR1cm5bYlthXV07dmFyIGM9Zi5tYXAoYixmdW5jdGlvbihhLGIpe3JldHVybiBhLm5UYWJsZX0pO3JldHVybiBmKGMpLmZpbHRlcihhKS5tYXAoZnVuY3Rpb24oYSl7YT1mLmluQXJyYXkodGhpcyxjKTtyZXR1cm4gYlthXX0pLnRvQXJyYXkoKX07dCgidGFibGVzKCkiLGZ1bmN0aW9uKGEpe3JldHVybiBhP25ldyB2KGZjKGEsdGhpcy5jb250ZXh0KSk6dGhpc30pO3QoInRhYmxlKCkiLGZ1bmN0aW9uKGEpe2E9dGhpcy50YWJsZXMoYSk7dmFyIGI9YS5jb250ZXh0O3JldHVybiBiLmxlbmd0aD9uZXcgdihiWzBdKTphfSk7eCgidGFibGVzKCkubm9kZXMoKSIsInRhYmxlKCkubm9kZSgpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYSl7cmV0dXJuIGEublRhYmxlfSwxKX0pO3goInRhYmxlcygpLmJvZHkoKSIsInRhYmxlKCkuYm9keSgpIiwKZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGEpe3JldHVybiBhLm5UQm9keX0sMSl9KTt4KCJ0YWJsZXMoKS5oZWFkZXIoKSIsInRhYmxlKCkuaGVhZGVyKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihhKXtyZXR1cm4gYS5uVEhlYWR9LDEpfSk7eCgidGFibGVzKCkuZm9vdGVyKCkiLCJ0YWJsZSgpLmZvb3RlcigpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYSl7cmV0dXJuIGEublRGb290fSwxKX0pO3goInRhYmxlcygpLmNvbnRhaW5lcnMoKSIsInRhYmxlKCkuY29udGFpbmVyKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihhKXtyZXR1cm4gYS5uVGFibGVXcmFwcGVyfSwxKX0pO3QoImRyYXcoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihiKXsicGFnZSI9PT0KYT9TKGIpOigic3RyaW5nIj09PXR5cGVvZiBhJiYoYT0iZnVsbC1ob2xkIj09PWE/ITE6ITApLFYoYiwhMT09PWEpKX0pfSk7dCgicGFnZSgpIixmdW5jdGlvbihhKXtyZXR1cm4gYT09PXA/dGhpcy5wYWdlLmluZm8oKS5wYWdlOnRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihiKXtYYShiLGEpfSl9KTt0KCJwYWdlLmluZm8oKSIsZnVuY3Rpb24oYSl7aWYoMD09PXRoaXMuY29udGV4dC5sZW5ndGgpcmV0dXJuIHA7YT10aGlzLmNvbnRleHRbMF07dmFyIGI9YS5faURpc3BsYXlTdGFydCxjPWEub0ZlYXR1cmVzLmJQYWdpbmF0ZT9hLl9pRGlzcGxheUxlbmd0aDotMSxkPWEuZm5SZWNvcmRzRGlzcGxheSgpLGU9LTE9PT1jO3JldHVybntwYWdlOmU/MDpNYXRoLmZsb29yKGIvYykscGFnZXM6ZT8xOk1hdGguY2VpbChkL2MpLHN0YXJ0OmIsZW5kOmEuZm5EaXNwbGF5RW5kKCksbGVuZ3RoOmMscmVjb3Jkc1RvdGFsOmEuZm5SZWNvcmRzVG90YWwoKSxyZWNvcmRzRGlzcGxheTpkLApzZXJ2ZXJTaWRlOiJzc3AiPT09RChhKX19KTt0KCJwYWdlLmxlbigpIixmdW5jdGlvbihhKXtyZXR1cm4gYT09PXA/MCE9PXRoaXMuY29udGV4dC5sZW5ndGg/dGhpcy5jb250ZXh0WzBdLl9pRGlzcGxheUxlbmd0aDpwOnRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihiKXtWYShiLGEpfSl9KTt2YXIgWGI9ZnVuY3Rpb24oYSxiLGMpe2lmKGMpe3ZhciBkPW5ldyB2KGEpO2Qub25lKCJkcmF3IixmdW5jdGlvbigpe2MoZC5hamF4Lmpzb24oKSl9KX1pZigic3NwIj09RChhKSlWKGEsYik7ZWxzZXtLKGEsITApO3ZhciBlPWEuanFYSFI7ZSYmNCE9PWUucmVhZHlTdGF0ZSYmZS5hYm9ydCgpO3ZhKGEsW10sZnVuY3Rpb24oYyl7cWEoYSk7Yz13YShhLGMpO2Zvcih2YXIgZD0wLGU9Yy5sZW5ndGg7ZDxlO2QrKylSKGEsY1tkXSk7VihhLGIpO0soYSwhMSl9KX19O3QoImFqYXguanNvbigpIixmdW5jdGlvbigpe3ZhciBhPXRoaXMuY29udGV4dDtpZigwPGEubGVuZ3RoKXJldHVybiBhWzBdLmpzb259KTsKdCgiYWpheC5wYXJhbXMoKSIsZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNvbnRleHQ7aWYoMDxhLmxlbmd0aClyZXR1cm4gYVswXS5vQWpheERhdGF9KTt0KCJhamF4LnJlbG9hZCgpIixmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYyl7WGIoYywhMT09PWIsYSl9KX0pO3QoImFqYXgudXJsKCkiLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY29udGV4dDtpZihhPT09cCl7aWYoMD09PWIubGVuZ3RoKXJldHVybiBwO2I9YlswXTtyZXR1cm4gYi5hamF4P2YuaXNQbGFpbk9iamVjdChiLmFqYXgpP2IuYWpheC51cmw6Yi5hamF4OmIuc0FqYXhTb3VyY2V9cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihiKXtmLmlzUGxhaW5PYmplY3QoYi5hamF4KT9iLmFqYXgudXJsPWE6Yi5hamF4PWF9KX0pO3QoImFqYXgudXJsKCkubG9hZCgpIixmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYyl7WGIoYywKITE9PT1iLGEpfSl9KTt2YXIgZWI9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgaD1bXSxnLGssbDt2YXIgbj10eXBlb2YgYjtiJiYic3RyaW5nIiE9PW4mJiJmdW5jdGlvbiIhPT1uJiZiLmxlbmd0aCE9PXB8fChiPVtiXSk7bj0wO2ZvcihrPWIubGVuZ3RoO248aztuKyspe3ZhciBtPWJbbl0mJmJbbl0uc3BsaXQmJiFiW25dLm1hdGNoKC9bXFtcKDpdLyk/YltuXS5zcGxpdCgiLCIpOltiW25dXTt2YXIgcT0wO2ZvcihsPW0ubGVuZ3RoO3E8bDtxKyspKGc9Yygic3RyaW5nIj09PXR5cGVvZiBtW3FdP2YudHJpbShtW3FdKTptW3FdKSkmJmcubGVuZ3RoJiYoaD1oLmNvbmNhdChnKSl9YT1DLnNlbGVjdG9yW2FdO2lmKGEubGVuZ3RoKWZvcihuPTAsaz1hLmxlbmd0aDtuPGs7bisrKWg9YVtuXShkLGUsaCk7cmV0dXJuIHRhKGgpfSxmYj1mdW5jdGlvbihhKXthfHwoYT17fSk7YS5maWx0ZXImJmEuc2VhcmNoPT09cCYmKGEuc2VhcmNoPWEuZmlsdGVyKTtyZXR1cm4gZi5leHRlbmQoe3NlYXJjaDoibm9uZSIsCm9yZGVyOiJjdXJyZW50IixwYWdlOiJhbGwifSxhKX0sZ2I9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aDtiPGM7YisrKWlmKDA8YVtiXS5sZW5ndGgpcmV0dXJuIGFbMF09YVtiXSxhWzBdLmxlbmd0aD0xLGEubGVuZ3RoPTEsYS5jb250ZXh0PVthLmNvbnRleHRbYl1dLGE7YS5sZW5ndGg9MDtyZXR1cm4gYX0sRmE9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkPWEuYWlEaXNwbGF5O3ZhciBlPWEuYWlEaXNwbGF5TWFzdGVyO3ZhciBoPWIuc2VhcmNoO3ZhciBnPWIub3JkZXI7Yj1iLnBhZ2U7aWYoInNzcCI9PUQoYSkpcmV0dXJuInJlbW92ZWQiPT09aD9bXTpaKDAsZS5sZW5ndGgpO2lmKCJjdXJyZW50Ij09Yilmb3IoZz1hLl9pRGlzcGxheVN0YXJ0LGE9YS5mbkRpc3BsYXlFbmQoKTtnPGE7ZysrKWMucHVzaChkW2ddKTtlbHNlIGlmKCJjdXJyZW50Ij09Z3x8ImFwcGxpZWQiPT1nKWlmKCJub25lIj09aCljPWUuc2xpY2UoKTtlbHNlIGlmKCJhcHBsaWVkIj09aCljPQpkLnNsaWNlKCk7ZWxzZXtpZigicmVtb3ZlZCI9PWgpe3ZhciBrPXt9O2c9MDtmb3IoYT1kLmxlbmd0aDtnPGE7ZysrKWtbZFtnXV09bnVsbDtjPWYubWFwKGUsZnVuY3Rpb24oYSl7cmV0dXJuIGsuaGFzT3duUHJvcGVydHkoYSk/bnVsbDphfSl9fWVsc2UgaWYoImluZGV4Ij09Z3x8Im9yaWdpbmFsIj09Zylmb3IoZz0wLGE9YS5hb0RhdGEubGVuZ3RoO2c8YTtnKyspIm5vbmUiPT1oP2MucHVzaChnKTooZT1mLmluQXJyYXkoZyxkKSwoLTE9PT1lJiYicmVtb3ZlZCI9PWh8fDA8PWUmJiJhcHBsaWVkIj09aCkmJmMucHVzaChnKSk7cmV0dXJuIGN9LGdjPWZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gZWIoInJvdyIsYixmdW5jdGlvbihiKXt2YXIgZT1TYihiKSxnPWEuYW9EYXRhO2lmKG51bGwhPT1lJiYhYylyZXR1cm5bZV07ZHx8KGQ9RmEoYSxjKSk7aWYobnVsbCE9PWUmJi0xIT09Zi5pbkFycmF5KGUsZCkpcmV0dXJuW2VdO2lmKG51bGw9PT1ifHxiPT09cHx8IiI9PT1iKXJldHVybiBkOwppZigiZnVuY3Rpb24iPT09dHlwZW9mIGIpcmV0dXJuIGYubWFwKGQsZnVuY3Rpb24oYSl7dmFyIGM9Z1thXTtyZXR1cm4gYihhLGMuX2FEYXRhLGMublRyKT9hOm51bGx9KTtpZihiLm5vZGVOYW1lKXtlPWIuX0RUX1Jvd0luZGV4O3ZhciBrPWIuX0RUX0NlbGxJbmRleDtpZihlIT09cClyZXR1cm4gZ1tlXSYmZ1tlXS5uVHI9PT1iP1tlXTpbXTtpZihrKXJldHVybiBnW2sucm93XSYmZ1trLnJvd10ublRyPT09Yi5wYXJlbnROb2RlP1trLnJvd106W107ZT1mKGIpLmNsb3Nlc3QoIipbZGF0YS1kdC1yb3ddIik7cmV0dXJuIGUubGVuZ3RoP1tlLmRhdGEoImR0LXJvdyIpXTpbXX1pZigic3RyaW5nIj09PXR5cGVvZiBiJiYiIyI9PT1iLmNoYXJBdCgwKSYmKGU9YS5hSWRzW2IucmVwbGFjZSgvXiMvLCIiKV0sZSE9PXApKXJldHVybltlLmlkeF07ZT1WYihsYShhLmFvRGF0YSxkLCJuVHIiKSk7cmV0dXJuIGYoZSkuZmlsdGVyKGIpLm1hcChmdW5jdGlvbigpe3JldHVybiB0aGlzLl9EVF9Sb3dJbmRleH0pLnRvQXJyYXkoKX0sCmEsYyl9O3QoInJvd3MoKSIsZnVuY3Rpb24oYSxiKXthPT09cD9hPSIiOmYuaXNQbGFpbk9iamVjdChhKSYmKGI9YSxhPSIiKTtiPWZiKGIpO3ZhciBjPXRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihjKXtyZXR1cm4gZ2MoYyxhLGIpfSwxKTtjLnNlbGVjdG9yLnJvd3M9YTtjLnNlbGVjdG9yLm9wdHM9YjtyZXR1cm4gY30pO3QoInJvd3MoKS5ub2RlcygpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJyb3ciLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuYW9EYXRhW2JdLm5Ucnx8cH0sMSl9KTt0KCJyb3dzKCkuZGF0YSgpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCEwLCJyb3dzIixmdW5jdGlvbihhLGIpe3JldHVybiBsYShhLmFvRGF0YSxiLCJfYURhdGEiKX0sMSl9KTt4KCJyb3dzKCkuY2FjaGUoKSIsInJvdygpLmNhY2hlKCkiLGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJyb3ciLGZ1bmN0aW9uKGIsYyl7Yj1iLmFvRGF0YVtjXTsKcmV0dXJuInNlYXJjaCI9PT1hP2IuX2FGaWx0ZXJEYXRhOmIuX2FTb3J0RGF0YX0sMSl9KTt4KCJyb3dzKCkuaW52YWxpZGF0ZSgpIiwicm93KCkuaW52YWxpZGF0ZSgpIixmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigicm93IixmdW5jdGlvbihiLGMpe2VhKGIsYyxhKX0pfSk7eCgicm93cygpLmluZGV4ZXMoKSIsInJvdygpLmluZGV4KCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInJvdyIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYn0sMSl9KTt4KCJyb3dzKCkuaWRzKCkiLCJyb3coKS5pZCgpIixmdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz10aGlzLmNvbnRleHQsZD0wLGU9Yy5sZW5ndGg7ZDxlO2QrKylmb3IodmFyIGg9MCxnPXRoaXNbZF0ubGVuZ3RoO2g8ZztoKyspe3ZhciBmPWNbZF0ucm93SWRGbihjW2RdLmFvRGF0YVt0aGlzW2RdW2hdXS5fYURhdGEpO2IucHVzaCgoITA9PT1hPyIjIjoiIikrZil9cmV0dXJuIG5ldyB2KGMsYil9KTt4KCJyb3dzKCkucmVtb3ZlKCkiLAoicm93KCkucmVtb3ZlKCkiLGZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLml0ZXJhdG9yKCJyb3ciLGZ1bmN0aW9uKGIsYyxkKXt2YXIgZT1iLmFvRGF0YSxoPWVbY10sZyxmO2Uuc3BsaWNlKGMsMSk7dmFyIGw9MDtmb3IoZz1lLmxlbmd0aDtsPGc7bCsrKXt2YXIgbj1lW2xdO3ZhciBtPW4uYW5DZWxscztudWxsIT09bi5uVHImJihuLm5Uci5fRFRfUm93SW5kZXg9bCk7aWYobnVsbCE9PW0pZm9yKG49MCxmPW0ubGVuZ3RoO248ZjtuKyspbVtuXS5fRFRfQ2VsbEluZGV4LnJvdz1sfXJhKGIuYWlEaXNwbGF5TWFzdGVyLGMpO3JhKGIuYWlEaXNwbGF5LGMpO3JhKGFbZF0sYywhMSk7MDxiLl9pUmVjb3Jkc0Rpc3BsYXkmJmIuX2lSZWNvcmRzRGlzcGxheS0tO1dhKGIpO2M9Yi5yb3dJZEZuKGguX2FEYXRhKTtjIT09cCYmZGVsZXRlIGIuYUlkc1tjXX0pO3RoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihhKXtmb3IodmFyIGI9MCxkPWEuYW9EYXRhLmxlbmd0aDtiPGQ7YisrKWEuYW9EYXRhW2JdLmlkeD0KYn0pO3JldHVybiB0aGlzfSk7dCgicm93cy5hZGQoKSIsZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGIpe3ZhciBjLGQ9W107dmFyIGc9MDtmb3IoYz1hLmxlbmd0aDtnPGM7ZysrKXt2YXIgZj1hW2ddO2Yubm9kZU5hbWUmJiJUUiI9PT1mLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk/ZC5wdXNoKHBhKGIsZilbMF0pOmQucHVzaChSKGIsZikpfXJldHVybiBkfSwxKSxjPXRoaXMucm93cygtMSk7Yy5wb3AoKTtmLm1lcmdlKGMsYik7cmV0dXJuIGN9KTt0KCJyb3coKSIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ2IodGhpcy5yb3dzKGEsYikpfSk7dCgicm93KCkuZGF0YSgpIixmdW5jdGlvbihhKXt2YXIgYj10aGlzLmNvbnRleHQ7aWYoYT09PXApcmV0dXJuIGIubGVuZ3RoJiZ0aGlzLmxlbmd0aD9iWzBdLmFvRGF0YVt0aGlzWzBdXS5fYURhdGE6cDt2YXIgYz1iWzBdLmFvRGF0YVt0aGlzWzBdXTtjLl9hRGF0YT1hO2YuaXNBcnJheShhKSYmYy5uVHIuaWQmJgpRKGJbMF0ucm93SWQpKGEsYy5uVHIuaWQpO2VhKGJbMF0sdGhpc1swXSwiZGF0YSIpO3JldHVybiB0aGlzfSk7dCgicm93KCkubm9kZSgpIixmdW5jdGlvbigpe3ZhciBhPXRoaXMuY29udGV4dDtyZXR1cm4gYS5sZW5ndGgmJnRoaXMubGVuZ3RoP2FbMF0uYW9EYXRhW3RoaXNbMF1dLm5Ucnx8bnVsbDpudWxsfSk7dCgicm93LmFkZCgpIixmdW5jdGlvbihhKXthIGluc3RhbmNlb2YgZiYmYS5sZW5ndGgmJihhPWFbMF0pO3ZhciBiPXRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihiKXtyZXR1cm4gYS5ub2RlTmFtZSYmIlRSIj09PWEubm9kZU5hbWUudG9VcHBlckNhc2UoKT9wYShiLGEpWzBdOlIoYixhKX0pO3JldHVybiB0aGlzLnJvdyhiWzBdKX0pO3ZhciBoYz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1bXSxoPWZ1bmN0aW9uKGIsYyl7aWYoZi5pc0FycmF5KGIpfHxiIGluc3RhbmNlb2YgZilmb3IodmFyIGQ9MCxnPWIubGVuZ3RoO2Q8ZztkKyspaChiW2RdLGMpO2Vsc2UgYi5ub2RlTmFtZSYmCiJ0ciI9PT1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/ZS5wdXNoKGIpOihkPWYoIjx0cj48dGQvPjwvdHI+IikuYWRkQ2xhc3MoYyksZigidGQiLGQpLmFkZENsYXNzKGMpLmh0bWwoYilbMF0uY29sU3Bhbj1XKGEpLGUucHVzaChkWzBdKSl9O2goYyxkKTtiLl9kZXRhaWxzJiZiLl9kZXRhaWxzLmRldGFjaCgpO2IuX2RldGFpbHM9ZihlKTtiLl9kZXRhaWxzU2hvdyYmYi5fZGV0YWlscy5pbnNlcnRBZnRlcihiLm5Ucil9LGhiPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5jb250ZXh0O2MubGVuZ3RoJiYoYT1jWzBdLmFvRGF0YVtiIT09cD9iOmFbMF1dKSYmYS5fZGV0YWlscyYmKGEuX2RldGFpbHMucmVtb3ZlKCksYS5fZGV0YWlsc1Nob3c9cCxhLl9kZXRhaWxzPXApfSxZYj1mdW5jdGlvbihhLGIpe3ZhciBjPWEuY29udGV4dDtjLmxlbmd0aCYmYS5sZW5ndGgmJihhPWNbMF0uYW9EYXRhW2FbMF1dLGEuX2RldGFpbHMmJigoYS5fZGV0YWlsc1Nob3c9Yik/YS5fZGV0YWlscy5pbnNlcnRBZnRlcihhLm5Ucik6CmEuX2RldGFpbHMuZGV0YWNoKCksaWMoY1swXSkpKX0saWM9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IHYoYSksYz1hLmFvRGF0YTtiLm9mZigiZHJhdy5kdC5EVF9kZXRhaWxzIGNvbHVtbi12aXNpYmlsaXR5LmR0LkRUX2RldGFpbHMgZGVzdHJveS5kdC5EVF9kZXRhaWxzIik7MDxKKGMsIl9kZXRhaWxzIikubGVuZ3RoJiYoYi5vbigiZHJhdy5kdC5EVF9kZXRhaWxzIixmdW5jdGlvbihkLGUpe2E9PT1lJiZiLnJvd3Moe3BhZ2U6ImN1cnJlbnQifSkuZXEoMCkuZWFjaChmdW5jdGlvbihhKXthPWNbYV07YS5fZGV0YWlsc1Nob3cmJmEuX2RldGFpbHMuaW5zZXJ0QWZ0ZXIoYS5uVHIpfSl9KSxiLm9uKCJjb2x1bW4tdmlzaWJpbGl0eS5kdC5EVF9kZXRhaWxzIixmdW5jdGlvbihiLGUsZixnKXtpZihhPT09ZSlmb3IoZT1XKGUpLGY9MCxnPWMubGVuZ3RoO2Y8ZztmKyspYj1jW2ZdLGIuX2RldGFpbHMmJmIuX2RldGFpbHMuY2hpbGRyZW4oInRkW2NvbHNwYW5dIikuYXR0cigiY29sc3BhbiIsCmUpfSksYi5vbigiZGVzdHJveS5kdC5EVF9kZXRhaWxzIixmdW5jdGlvbihkLGUpe2lmKGE9PT1lKWZvcihkPTAsZT1jLmxlbmd0aDtkPGU7ZCsrKWNbZF0uX2RldGFpbHMmJmhiKGIsZCl9KSl9O3QoInJvdygpLmNoaWxkKCkiLGZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5jb250ZXh0O2lmKGE9PT1wKXJldHVybiBjLmxlbmd0aCYmdGhpcy5sZW5ndGg/Y1swXS5hb0RhdGFbdGhpc1swXV0uX2RldGFpbHM6cDshMD09PWE/dGhpcy5jaGlsZC5zaG93KCk6ITE9PT1hP2hiKHRoaXMpOmMubGVuZ3RoJiZ0aGlzLmxlbmd0aCYmaGMoY1swXSxjWzBdLmFvRGF0YVt0aGlzWzBdXSxhLGIpO3JldHVybiB0aGlzfSk7dChbInJvdygpLmNoaWxkLnNob3coKSIsInJvdygpLmNoaWxkKCkuc2hvdygpIl0sZnVuY3Rpb24oYSl7WWIodGhpcywhMCk7cmV0dXJuIHRoaXN9KTt0KFsicm93KCkuY2hpbGQuaGlkZSgpIiwicm93KCkuY2hpbGQoKS5oaWRlKCkiXSxmdW5jdGlvbigpe1liKHRoaXMsITEpOwpyZXR1cm4gdGhpc30pO3QoWyJyb3coKS5jaGlsZC5yZW1vdmUoKSIsInJvdygpLmNoaWxkKCkucmVtb3ZlKCkiXSxmdW5jdGlvbigpe2hiKHRoaXMpO3JldHVybiB0aGlzfSk7dCgicm93KCkuY2hpbGQuaXNTaG93bigpIixmdW5jdGlvbigpe3ZhciBhPXRoaXMuY29udGV4dDtyZXR1cm4gYS5sZW5ndGgmJnRoaXMubGVuZ3RoP2FbMF0uYW9EYXRhW3RoaXNbMF1dLl9kZXRhaWxzU2hvd3x8ITE6ITF9KTt2YXIgamM9L14oW146XSspOihuYW1lfHZpc0lkeHx2aXNpYmxlKSQvLFpiPWZ1bmN0aW9uKGEsYixjLGQsZSl7Yz1bXTtkPTA7Zm9yKHZhciBmPWUubGVuZ3RoO2Q8ZjtkKyspYy5wdXNoKEkoYSxlW2RdLGIpKTtyZXR1cm4gY30sa2M9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuYW9Db2x1bW5zLGU9SihkLCJzTmFtZSIpLGg9SihkLCJuVGgiKTtyZXR1cm4gZWIoImNvbHVtbiIsYixmdW5jdGlvbihiKXt2YXIgZz1TYihiKTtpZigiIj09PWIpcmV0dXJuIFooZC5sZW5ndGgpO2lmKG51bGwhPT0KZylyZXR1cm5bMDw9Zz9nOmQubGVuZ3RoK2ddO2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgYil7dmFyIGw9RmEoYSxjKTtyZXR1cm4gZi5tYXAoZCxmdW5jdGlvbihjLGQpe3JldHVybiBiKGQsWmIoYSxkLDAsMCxsKSxoW2RdKT9kOm51bGx9KX12YXIgbj0ic3RyaW5nIj09PXR5cGVvZiBiP2IubWF0Y2goamMpOiIiO2lmKG4pc3dpdGNoKG5bMl0pe2Nhc2UgInZpc0lkeCI6Y2FzZSAidmlzaWJsZSI6Zz1wYXJzZUludChuWzFdLDEwKTtpZigwPmcpe3ZhciBtPWYubWFwKGQsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5iVmlzaWJsZT9iOm51bGx9KTtyZXR1cm5bbVttLmxlbmd0aCtnXV19cmV0dXJuW2JhKGEsZyldO2Nhc2UgIm5hbWUiOnJldHVybiBmLm1hcChlLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9PT1uWzFdP2I6bnVsbH0pO2RlZmF1bHQ6cmV0dXJuW119aWYoYi5ub2RlTmFtZSYmYi5fRFRfQ2VsbEluZGV4KXJldHVybltiLl9EVF9DZWxsSW5kZXguY29sdW1uXTtnPWYoaCkuZmlsdGVyKGIpLm1hcChmdW5jdGlvbigpe3JldHVybiBmLmluQXJyYXkodGhpcywKaCl9KS50b0FycmF5KCk7aWYoZy5sZW5ndGh8fCFiLm5vZGVOYW1lKXJldHVybiBnO2c9ZihiKS5jbG9zZXN0KCIqW2RhdGEtZHQtY29sdW1uXSIpO3JldHVybiBnLmxlbmd0aD9bZy5kYXRhKCJkdC1jb2x1bW4iKV06W119LGEsYyl9O3QoImNvbHVtbnMoKSIsZnVuY3Rpb24oYSxiKXthPT09cD9hPSIiOmYuaXNQbGFpbk9iamVjdChhKSYmKGI9YSxhPSIiKTtiPWZiKGIpO3ZhciBjPXRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihjKXtyZXR1cm4ga2MoYyxhLGIpfSwxKTtjLnNlbGVjdG9yLmNvbHM9YTtjLnNlbGVjdG9yLm9wdHM9YjtyZXR1cm4gY30pO3goImNvbHVtbnMoKS5oZWFkZXIoKSIsImNvbHVtbigpLmhlYWRlcigpIixmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjb2x1bW4iLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuYW9Db2x1bW5zW2JdLm5UaH0sMSl9KTt4KCJjb2x1bW5zKCkuZm9vdGVyKCkiLCJjb2x1bW4oKS5mb290ZXIoKSIsZnVuY3Rpb24oYSwKYil7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNvbHVtbiIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5hb0NvbHVtbnNbYl0ublRmfSwxKX0pO3goImNvbHVtbnMoKS5kYXRhKCkiLCJjb2x1bW4oKS5kYXRhKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNvbHVtbi1yb3dzIixaYiwxKX0pO3goImNvbHVtbnMoKS5kYXRhU3JjKCkiLCJjb2x1bW4oKS5kYXRhU3JjKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNvbHVtbiIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5hb0NvbHVtbnNbYl0ubURhdGF9LDEpfSk7eCgiY29sdW1ucygpLmNhY2hlKCkiLCJjb2x1bW4oKS5jYWNoZSgpIixmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigiY29sdW1uLXJvd3MiLGZ1bmN0aW9uKGIsYyxkLGUsZil7cmV0dXJuIGxhKGIuYW9EYXRhLGYsInNlYXJjaCI9PT1hPyJfYUZpbHRlckRhdGEiOiJfYVNvcnREYXRhIixjKX0sMSl9KTt4KCJjb2x1bW5zKCkubm9kZXMoKSIsCiJjb2x1bW4oKS5ub2RlcygpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjb2x1bW4tcm93cyIsZnVuY3Rpb24oYSxiLGMsZCxlKXtyZXR1cm4gbGEoYS5hb0RhdGEsZSwiYW5DZWxscyIsYil9LDEpfSk7eCgiY29sdW1ucygpLnZpc2libGUoKSIsImNvbHVtbigpLnZpc2libGUoKSIsZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLGQ9dGhpcy5pdGVyYXRvcigiY29sdW1uIixmdW5jdGlvbihiLGMpe2lmKGE9PT1wKXJldHVybiBiLmFvQ29sdW1uc1tjXS5iVmlzaWJsZTt2YXIgZD1iLmFvQ29sdW1ucyxlPWRbY10saD1iLmFvRGF0YSxuO2lmKGEhPT1wJiZlLmJWaXNpYmxlIT09YSl7aWYoYSl7dmFyIG09Zi5pbkFycmF5KCEwLEooZCwiYlZpc2libGUiKSxjKzEpO2Q9MDtmb3Iobj1oLmxlbmd0aDtkPG47ZCsrKXt2YXIgcT1oW2RdLm5UcjtiPWhbZF0uYW5DZWxscztxJiZxLmluc2VydEJlZm9yZShiW2NdLGJbbV18fG51bGwpfX1lbHNlIGYoSihiLmFvRGF0YSwiYW5DZWxscyIsCmMpKS5kZXRhY2goKTtlLmJWaXNpYmxlPWF9fSk7YSE9PXAmJnRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihkKXtoYShkLGQuYW9IZWFkZXIpO2hhKGQsZC5hb0Zvb3Rlcik7ZC5haURpc3BsYXkubGVuZ3RofHxmKGQublRCb2R5KS5maW5kKCJ0ZFtjb2xzcGFuXSIpLmF0dHIoImNvbHNwYW4iLFcoZCkpO0JhKGQpO2MuaXRlcmF0b3IoImNvbHVtbiIsZnVuY3Rpb24oYyxkKXtBKGMsbnVsbCwiY29sdW1uLXZpc2liaWxpdHkiLFtjLGQsYSxiXSl9KTsoYj09PXB8fGIpJiZjLmNvbHVtbnMuYWRqdXN0KCl9KTtyZXR1cm4gZH0pO3goImNvbHVtbnMoKS5pbmRleGVzKCkiLCJjb2x1bW4oKS5pbmRleCgpIixmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigiY29sdW1uIixmdW5jdGlvbihiLGMpe3JldHVybiJ2aXNpYmxlIj09PWE/Y2EoYixjKTpjfSwxKX0pO3QoImNvbHVtbnMuYWRqdXN0KCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihhKXthYShhKX0sCjEpfSk7dCgiY29sdW1uLmluZGV4KCkiLGZ1bmN0aW9uKGEsYil7aWYoMCE9PXRoaXMuY29udGV4dC5sZW5ndGgpe3ZhciBjPXRoaXMuY29udGV4dFswXTtpZigiZnJvbVZpc2libGUiPT09YXx8InRvRGF0YSI9PT1hKXJldHVybiBiYShjLGIpO2lmKCJmcm9tRGF0YSI9PT1hfHwidG9WaXNpYmxlIj09PWEpcmV0dXJuIGNhKGMsYil9fSk7dCgiY29sdW1uKCkiLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGdiKHRoaXMuY29sdW1ucyhhLGIpKX0pO3ZhciBsYz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5hb0RhdGEsZT1GYShhLGMpLGg9VmIobGEoZCxlLCJhbkNlbGxzIikpLGc9ZihbXS5jb25jYXQuYXBwbHkoW10saCkpLGssbD1hLmFvQ29sdW1ucy5sZW5ndGgsbixtLHEsdSx0LHY7cmV0dXJuIGViKCJjZWxsIixiLGZ1bmN0aW9uKGIpe3ZhciBjPSJmdW5jdGlvbiI9PT10eXBlb2YgYjtpZihudWxsPT09Ynx8Yj09PXB8fGMpe249W107bT0wO2ZvcihxPWUubGVuZ3RoO208cTttKyspZm9yKGs9CmVbbV0sdT0wO3U8bDt1KyspdD17cm93OmssY29sdW1uOnV9LGM/KHY9ZFtrXSxiKHQsSShhLGssdSksdi5hbkNlbGxzP3YuYW5DZWxsc1t1XTpudWxsKSYmbi5wdXNoKHQpKTpuLnB1c2godCk7cmV0dXJuIG59aWYoZi5pc1BsYWluT2JqZWN0KGIpKXJldHVybiBiLmNvbHVtbiE9PXAmJmIucm93IT09cCYmLTEhPT1mLmluQXJyYXkoYi5yb3csZSk/W2JdOltdO2M9Zy5maWx0ZXIoYikubWFwKGZ1bmN0aW9uKGEsYil7cmV0dXJue3JvdzpiLl9EVF9DZWxsSW5kZXgucm93LGNvbHVtbjpiLl9EVF9DZWxsSW5kZXguY29sdW1ufX0pLnRvQXJyYXkoKTtpZihjLmxlbmd0aHx8IWIubm9kZU5hbWUpcmV0dXJuIGM7dj1mKGIpLmNsb3Nlc3QoIipbZGF0YS1kdC1yb3ddIik7cmV0dXJuIHYubGVuZ3RoP1t7cm93OnYuZGF0YSgiZHQtcm93IiksY29sdW1uOnYuZGF0YSgiZHQtY29sdW1uIil9XTpbXX0sYSxjKX07dCgiY2VsbHMoKSIsZnVuY3Rpb24oYSxiLGMpe2YuaXNQbGFpbk9iamVjdChhKSYmCihhLnJvdz09PXA/KGM9YSxhPW51bGwpOihjPWIsYj1udWxsKSk7Zi5pc1BsYWluT2JqZWN0KGIpJiYoYz1iLGI9bnVsbCk7aWYobnVsbD09PWJ8fGI9PT1wKXJldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYil7cmV0dXJuIGxjKGIsYSxmYihjKSl9KTt2YXIgZD1jP3twYWdlOmMucGFnZSxvcmRlcjpjLm9yZGVyLHNlYXJjaDpjLnNlYXJjaH06e30sZT10aGlzLmNvbHVtbnMoYixkKSxoPXRoaXMucm93cyhhLGQpLGcsayxsLG47ZD10aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYSxiKXthPVtdO2c9MDtmb3Ioaz1oW2JdLmxlbmd0aDtnPGs7ZysrKWZvcihsPTAsbj1lW2JdLmxlbmd0aDtsPG47bCsrKWEucHVzaCh7cm93OmhbYl1bZ10sY29sdW1uOmVbYl1bbF19KTtyZXR1cm4gYX0sMSk7ZD1jJiZjLnNlbGVjdGVkP3RoaXMuY2VsbHMoZCxjKTpkO2YuZXh0ZW5kKGQuc2VsZWN0b3Ise2NvbHM6Yixyb3dzOmEsb3B0czpjfSk7cmV0dXJuIGR9KTt4KCJjZWxscygpLm5vZGVzKCkiLAoiY2VsbCgpLm5vZGUoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigiY2VsbCIsZnVuY3Rpb24oYSxiLGMpe3JldHVybihhPWEuYW9EYXRhW2JdKSYmYS5hbkNlbGxzP2EuYW5DZWxsc1tjXTpwfSwxKX0pO3QoImNlbGxzKCkuZGF0YSgpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjZWxsIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIEkoYSxiLGMpfSwxKX0pO3goImNlbGxzKCkuY2FjaGUoKSIsImNlbGwoKS5jYWNoZSgpIixmdW5jdGlvbihhKXthPSJzZWFyY2giPT09YT8iX2FGaWx0ZXJEYXRhIjoiX2FTb3J0RGF0YSI7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNlbGwiLGZ1bmN0aW9uKGIsYyxkKXtyZXR1cm4gYi5hb0RhdGFbY11bYV1bZF19LDEpfSk7eCgiY2VsbHMoKS5yZW5kZXIoKSIsImNlbGwoKS5yZW5kZXIoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNlbGwiLGZ1bmN0aW9uKGIsYyxkKXtyZXR1cm4gSShiLGMsZCxhKX0sCjEpfSk7eCgiY2VsbHMoKS5pbmRleGVzKCkiLCJjZWxsKCkuaW5kZXgoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigiY2VsbCIsZnVuY3Rpb24oYSxiLGMpe3JldHVybntyb3c6Yixjb2x1bW46Yyxjb2x1bW5WaXNpYmxlOmNhKGEsYyl9fSwxKX0pO3goImNlbGxzKCkuaW52YWxpZGF0ZSgpIiwiY2VsbCgpLmludmFsaWRhdGUoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNlbGwiLGZ1bmN0aW9uKGIsYyxkKXtlYShiLGMsYSxkKX0pfSk7dCgiY2VsbCgpIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGdiKHRoaXMuY2VsbHMoYSxiLGMpKX0pO3QoImNlbGwoKS5kYXRhKCkiLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY29udGV4dCxjPXRoaXNbMF07aWYoYT09PXApcmV0dXJuIGIubGVuZ3RoJiZjLmxlbmd0aD9JKGJbMF0sY1swXS5yb3csY1swXS5jb2x1bW4pOnA7b2IoYlswXSxjWzBdLnJvdyxjWzBdLmNvbHVtbixhKTtlYShiWzBdLGNbMF0ucm93LAoiZGF0YSIsY1swXS5jb2x1bW4pO3JldHVybiB0aGlzfSk7dCgib3JkZXIoKSIsZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmNvbnRleHQ7aWYoYT09PXApcmV0dXJuIDAhPT1jLmxlbmd0aD9jWzBdLmFhU29ydGluZzpwOyJudW1iZXIiPT09dHlwZW9mIGE/YT1bW2EsYl1dOmEubGVuZ3RoJiYhZi5pc0FycmF5KGFbMF0pJiYoYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKTtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGIpe2IuYWFTb3J0aW5nPWEuc2xpY2UoKX0pfSk7dCgib3JkZXIubGlzdGVuZXIoKSIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oZCl7UWEoZCxhLGIsYyl9KX0pO3QoIm9yZGVyLmZpeGVkKCkiLGZ1bmN0aW9uKGEpe2lmKCFhKXt2YXIgYj10aGlzLmNvbnRleHQ7Yj1iLmxlbmd0aD9iWzBdLmFhU29ydGluZ0ZpeGVkOnA7cmV0dXJuIGYuaXNBcnJheShiKT97cHJlOmJ9OgpifXJldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYil7Yi5hYVNvcnRpbmdGaXhlZD1mLmV4dGVuZCghMCx7fSxhKX0pfSk7dChbImNvbHVtbnMoKS5vcmRlcigpIiwiY29sdW1uKCkub3JkZXIoKSJdLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihjLGQpe3ZhciBlPVtdO2YuZWFjaChiW2RdLGZ1bmN0aW9uKGIsYyl7ZS5wdXNoKFtjLGFdKX0pO2MuYWFTb3J0aW5nPWV9KX0pO3QoInNlYXJjaCgpIixmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLmNvbnRleHQ7cmV0dXJuIGE9PT1wPzAhPT1lLmxlbmd0aD9lWzBdLm9QcmV2aW91c1NlYXJjaC5zU2VhcmNoOnA6dGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGUpe2Uub0ZlYXR1cmVzLmJGaWx0ZXImJmlhKGUsZi5leHRlbmQoe30sZS5vUHJldmlvdXNTZWFyY2gse3NTZWFyY2g6YSsiIixiUmVnZXg6bnVsbD09PWI/ITE6YixiU21hcnQ6bnVsbD09PQpjPyEwOmMsYkNhc2VJbnNlbnNpdGl2ZTpudWxsPT09ZD8hMDpkfSksMSl9KX0pO3goImNvbHVtbnMoKS5zZWFyY2goKSIsImNvbHVtbigpLnNlYXJjaCgpIixmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigiY29sdW1uIixmdW5jdGlvbihlLGgpe3ZhciBnPWUuYW9QcmVTZWFyY2hDb2xzO2lmKGE9PT1wKXJldHVybiBnW2hdLnNTZWFyY2g7ZS5vRmVhdHVyZXMuYkZpbHRlciYmKGYuZXh0ZW5kKGdbaF0se3NTZWFyY2g6YSsiIixiUmVnZXg6bnVsbD09PWI/ITE6YixiU21hcnQ6bnVsbD09PWM/ITA6YyxiQ2FzZUluc2Vuc2l0aXZlOm51bGw9PT1kPyEwOmR9KSxpYShlLGUub1ByZXZpb3VzU2VhcmNoLDEpKX0pfSk7dCgic3RhdGUoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZXh0Lmxlbmd0aD90aGlzLmNvbnRleHRbMF0ub1NhdmVkU3RhdGU6bnVsbH0pO3QoInN0YXRlLmNsZWFyKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIiwKZnVuY3Rpb24oYSl7YS5mblN0YXRlU2F2ZUNhbGxiYWNrLmNhbGwoYS5vSW5zdGFuY2UsYSx7fSl9KX0pO3QoInN0YXRlLmxvYWRlZCgpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRleHQubGVuZ3RoP3RoaXMuY29udGV4dFswXS5vTG9hZGVkU3RhdGU6bnVsbH0pO3QoInN0YXRlLnNhdmUoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGEpe0JhKGEpfSl9KTtxLnZlcnNpb25DaGVjaz1xLmZuVmVyc2lvbkNoZWNrPWZ1bmN0aW9uKGEpe3ZhciBiPXEudmVyc2lvbi5zcGxpdCgiLiIpO2E9YS5zcGxpdCgiLiIpO2Zvcih2YXIgYyxkLGU9MCxmPWEubGVuZ3RoO2U8ZjtlKyspaWYoYz1wYXJzZUludChiW2VdLDEwKXx8MCxkPXBhcnNlSW50KGFbZV0sMTApfHwwLGMhPT1kKXJldHVybiBjPmQ7cmV0dXJuITB9O3EuaXNEYXRhVGFibGU9cS5mbklzRGF0YVRhYmxlPWZ1bmN0aW9uKGEpe3ZhciBiPWYoYSkuZ2V0KDApLGM9ITE7aWYoYSBpbnN0YW5jZW9mCnEuQXBpKXJldHVybiEwO2YuZWFjaChxLnNldHRpbmdzLGZ1bmN0aW9uKGEsZSl7YT1lLm5TY3JvbGxIZWFkP2YoInRhYmxlIixlLm5TY3JvbGxIZWFkKVswXTpudWxsO3ZhciBkPWUublNjcm9sbEZvb3Q/ZigidGFibGUiLGUublNjcm9sbEZvb3QpWzBdOm51bGw7aWYoZS5uVGFibGU9PT1ifHxhPT09Ynx8ZD09PWIpYz0hMH0pO3JldHVybiBjfTtxLnRhYmxlcz1xLmZuVGFibGVzPWZ1bmN0aW9uKGEpe3ZhciBiPSExO2YuaXNQbGFpbk9iamVjdChhKSYmKGI9YS5hcGksYT1hLnZpc2libGUpO3ZhciBjPWYubWFwKHEuc2V0dGluZ3MsZnVuY3Rpb24oYil7aWYoIWF8fGEmJmYoYi5uVGFibGUpLmlzKCI6dmlzaWJsZSIpKXJldHVybiBiLm5UYWJsZX0pO3JldHVybiBiP25ldyB2KGMpOmN9O3EuY2FtZWxUb0h1bmdhcmlhbj1MO3QoIiQoKSIsZnVuY3Rpb24oYSxiKXtiPXRoaXMucm93cyhiKS5ub2RlcygpO2I9ZihiKTtyZXR1cm4gZihbXS5jb25jYXQoYi5maWx0ZXIoYSkudG9BcnJheSgpLApiLmZpbmQoYSkudG9BcnJheSgpKSl9KTtmLmVhY2goWyJvbiIsIm9uZSIsIm9mZiJdLGZ1bmN0aW9uKGEsYil7dChiKyIoKSIsZnVuY3Rpb24oKXt2YXIgYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO2FbMF09Zi5tYXAoYVswXS5zcGxpdCgvXHMvKSxmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXRjaCgvXC5kdFxiLyk/YTphKyIuZHQifSkuam9pbigiICIpO3ZhciBkPWYodGhpcy50YWJsZXMoKS5ub2RlcygpKTtkW2JdLmFwcGx5KGQsYSk7cmV0dXJuIHRoaXN9KX0pO3QoImNsZWFyKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihhKXtxYShhKX0pfSk7dCgic2V0dGluZ3MoKSIsZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHYodGhpcy5jb250ZXh0LHRoaXMuY29udGV4dCl9KTt0KCJpbml0KCkiLGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jb250ZXh0O3JldHVybiBhLmxlbmd0aD9hWzBdLm9Jbml0Om51bGx9KTt0KCJkYXRhKCkiLApmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYSl7cmV0dXJuIEooYS5hb0RhdGEsIl9hRGF0YSIpfSkuZmxhdHRlbigpfSk7dCgiZGVzdHJveSgpIixmdW5jdGlvbihhKXthPWF8fCExO3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYil7dmFyIGM9Yi5uVGFibGVXcmFwcGVyLnBhcmVudE5vZGUsZD1iLm9DbGFzc2VzLGU9Yi5uVGFibGUsaD1iLm5UQm9keSxnPWIublRIZWFkLGs9Yi5uVEZvb3QsbD1mKGUpO2g9ZihoKTt2YXIgbj1mKGIublRhYmxlV3JhcHBlciksbT1mLm1hcChiLmFvRGF0YSxmdW5jdGlvbihhKXtyZXR1cm4gYS5uVHJ9KSxwO2IuYkRlc3Ryb3lpbmc9ITA7QShiLCJhb0Rlc3Ryb3lDYWxsYmFjayIsImRlc3Ryb3kiLFtiXSk7YXx8KG5ldyB2KGIpKS5jb2x1bW5zKCkudmlzaWJsZSghMCk7bi5vZmYoIi5EVCIpLmZpbmQoIjpub3QodGJvZHkgKikiKS5vZmYoIi5EVCIpO2Yoeikub2ZmKCIuRFQtIitiLnNJbnN0YW5jZSk7CmUhPWcucGFyZW50Tm9kZSYmKGwuY2hpbGRyZW4oInRoZWFkIikuZGV0YWNoKCksbC5hcHBlbmQoZykpO2smJmUhPWsucGFyZW50Tm9kZSYmKGwuY2hpbGRyZW4oInRmb290IikuZGV0YWNoKCksbC5hcHBlbmQoaykpO2IuYWFTb3J0aW5nPVtdO2IuYWFTb3J0aW5nRml4ZWQ9W107QWEoYik7ZihtKS5yZW1vdmVDbGFzcyhiLmFzU3RyaXBlQ2xhc3Nlcy5qb2luKCIgIikpO2YoInRoLCB0ZCIsZykucmVtb3ZlQ2xhc3MoZC5zU29ydGFibGUrIiAiK2Quc1NvcnRhYmxlQXNjKyIgIitkLnNTb3J0YWJsZURlc2MrIiAiK2Quc1NvcnRhYmxlTm9uZSk7aC5jaGlsZHJlbigpLmRldGFjaCgpO2guYXBwZW5kKG0pO2c9YT8icmVtb3ZlIjoiZGV0YWNoIjtsW2ddKCk7bltnXSgpOyFhJiZjJiYoYy5pbnNlcnRCZWZvcmUoZSxiLm5UYWJsZVJlaW5zZXJ0QmVmb3JlKSxsLmNzcygid2lkdGgiLGIuc0Rlc3Ryb3lXaWR0aCkucmVtb3ZlQ2xhc3MoZC5zVGFibGUpLChwPWIuYXNEZXN0cm95U3RyaXBlcy5sZW5ndGgpJiYKaC5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oYSl7Zih0aGlzKS5hZGRDbGFzcyhiLmFzRGVzdHJveVN0cmlwZXNbYSVwXSl9KSk7Yz1mLmluQXJyYXkoYixxLnNldHRpbmdzKTstMSE9PWMmJnEuc2V0dGluZ3Muc3BsaWNlKGMsMSl9KX0pO2YuZWFjaChbImNvbHVtbiIsInJvdyIsImNlbGwiXSxmdW5jdGlvbihhLGIpe3QoYisicygpLmV2ZXJ5KCkiLGZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuc2VsZWN0b3Iub3B0cyxlPXRoaXM7cmV0dXJuIHRoaXMuaXRlcmF0b3IoYixmdW5jdGlvbihkLGYsayxsLG4pe2EuY2FsbChlW2JdKGYsImNlbGwiPT09Yj9rOmMsImNlbGwiPT09Yj9jOnApLGYsayxsLG4pfSl9KX0pO3QoImkxOG4oKSIsZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuY29udGV4dFswXTthPVUoYSkoZC5vTGFuZ3VhZ2UpO2E9PT1wJiYoYT1iKTtjIT09cCYmZi5pc1BsYWluT2JqZWN0KGEpJiYoYT1hW2NdIT09cD9hW2NdOmEuXyk7cmV0dXJuIGEucmVwbGFjZSgiJWQiLGMpfSk7CnEudmVyc2lvbj0iMS4xMC4yMCI7cS5zZXR0aW5ncz1bXTtxLm1vZGVscz17fTtxLm1vZGVscy5vU2VhcmNoPXtiQ2FzZUluc2Vuc2l0aXZlOiEwLHNTZWFyY2g6IiIsYlJlZ2V4OiExLGJTbWFydDohMH07cS5tb2RlbHMub1Jvdz17blRyOm51bGwsYW5DZWxsczpudWxsLF9hRGF0YTpbXSxfYVNvcnREYXRhOm51bGwsX2FGaWx0ZXJEYXRhOm51bGwsX3NGaWx0ZXJSb3c6bnVsbCxfc1Jvd1N0cmlwZToiIixzcmM6bnVsbCxpZHg6LTF9O3EubW9kZWxzLm9Db2x1bW49e2lkeDpudWxsLGFEYXRhU29ydDpudWxsLGFzU29ydGluZzpudWxsLGJTZWFyY2hhYmxlOm51bGwsYlNvcnRhYmxlOm51bGwsYlZpc2libGU6bnVsbCxfc01hbnVhbFR5cGU6bnVsbCxfYkF0dHJTcmM6ITEsZm5DcmVhdGVkQ2VsbDpudWxsLGZuR2V0RGF0YTpudWxsLGZuU2V0RGF0YTpudWxsLG1EYXRhOm51bGwsbVJlbmRlcjpudWxsLG5UaDpudWxsLG5UZjpudWxsLHNDbGFzczpudWxsLHNDb250ZW50UGFkZGluZzpudWxsLApzRGVmYXVsdENvbnRlbnQ6bnVsbCxzTmFtZTpudWxsLHNTb3J0RGF0YVR5cGU6InN0ZCIsc1NvcnRpbmdDbGFzczpudWxsLHNTb3J0aW5nQ2xhc3NKVUk6bnVsbCxzVGl0bGU6bnVsbCxzVHlwZTpudWxsLHNXaWR0aDpudWxsLHNXaWR0aE9yaWc6bnVsbH07cS5kZWZhdWx0cz17YWFEYXRhOm51bGwsYWFTb3J0aW5nOltbMCwiYXNjIl1dLGFhU29ydGluZ0ZpeGVkOltdLGFqYXg6bnVsbCxhTGVuZ3RoTWVudTpbMTAsMjUsNTAsMTAwXSxhb0NvbHVtbnM6bnVsbCxhb0NvbHVtbkRlZnM6bnVsbCxhb1NlYXJjaENvbHM6W10sYXNTdHJpcGVDbGFzc2VzOm51bGwsYkF1dG9XaWR0aDohMCxiRGVmZXJSZW5kZXI6ITEsYkRlc3Ryb3k6ITEsYkZpbHRlcjohMCxiSW5mbzohMCxiTGVuZ3RoQ2hhbmdlOiEwLGJQYWdpbmF0ZTohMCxiUHJvY2Vzc2luZzohMSxiUmV0cmlldmU6ITEsYlNjcm9sbENvbGxhcHNlOiExLGJTZXJ2ZXJTaWRlOiExLGJTb3J0OiEwLGJTb3J0TXVsdGk6ITAsYlNvcnRDZWxsc1RvcDohMSwKYlNvcnRDbGFzc2VzOiEwLGJTdGF0ZVNhdmU6ITEsZm5DcmVhdGVkUm93Om51bGwsZm5EcmF3Q2FsbGJhY2s6bnVsbCxmbkZvb3RlckNhbGxiYWNrOm51bGwsZm5Gb3JtYXROdW1iZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGEudG9TdHJpbmcoKS5yZXBsYWNlKC9cQig/PShcZHszfSkrKD8hXGQpKS9nLHRoaXMub0xhbmd1YWdlLnNUaG91c2FuZHMpfSxmbkhlYWRlckNhbGxiYWNrOm51bGwsZm5JbmZvQ2FsbGJhY2s6bnVsbCxmbkluaXRDb21wbGV0ZTpudWxsLGZuUHJlRHJhd0NhbGxiYWNrOm51bGwsZm5Sb3dDYWxsYmFjazpudWxsLGZuU2VydmVyRGF0YTpudWxsLGZuU2VydmVyUGFyYW1zOm51bGwsZm5TdGF0ZUxvYWRDYWxsYmFjazpmdW5jdGlvbihhKXt0cnl7cmV0dXJuIEpTT04ucGFyc2UoKC0xPT09YS5pU3RhdGVEdXJhdGlvbj9zZXNzaW9uU3RvcmFnZTpsb2NhbFN0b3JhZ2UpLmdldEl0ZW0oIkRhdGFUYWJsZXNfIithLnNJbnN0YW5jZSsiXyIrbG9jYXRpb24ucGF0aG5hbWUpKX1jYXRjaChiKXt9fSwKZm5TdGF0ZUxvYWRQYXJhbXM6bnVsbCxmblN0YXRlTG9hZGVkOm51bGwsZm5TdGF0ZVNhdmVDYWxsYmFjazpmdW5jdGlvbihhLGIpe3RyeXsoLTE9PT1hLmlTdGF0ZUR1cmF0aW9uP3Nlc3Npb25TdG9yYWdlOmxvY2FsU3RvcmFnZSkuc2V0SXRlbSgiRGF0YVRhYmxlc18iK2Euc0luc3RhbmNlKyJfIitsb2NhdGlvbi5wYXRobmFtZSxKU09OLnN0cmluZ2lmeShiKSl9Y2F0Y2goYyl7fX0sZm5TdGF0ZVNhdmVQYXJhbXM6bnVsbCxpU3RhdGVEdXJhdGlvbjo3MjAwLGlEZWZlckxvYWRpbmc6bnVsbCxpRGlzcGxheUxlbmd0aDoxMCxpRGlzcGxheVN0YXJ0OjAsaVRhYkluZGV4OjAsb0NsYXNzZXM6e30sb0xhbmd1YWdlOntvQXJpYTp7c1NvcnRBc2NlbmRpbmc6IjogYWN0aXZhdGUgdG8gc29ydCBjb2x1bW4gYXNjZW5kaW5nIixzU29ydERlc2NlbmRpbmc6IjogYWN0aXZhdGUgdG8gc29ydCBjb2x1bW4gZGVzY2VuZGluZyJ9LG9QYWdpbmF0ZTp7c0ZpcnN0OiJGaXJzdCIsc0xhc3Q6Ikxhc3QiLApzTmV4dDoiTmV4dCIsc1ByZXZpb3VzOiJQcmV2aW91cyJ9LHNFbXB0eVRhYmxlOiJObyBkYXRhIGF2YWlsYWJsZSBpbiB0YWJsZSIsc0luZm86IlNob3dpbmcgX1NUQVJUXyB0byBfRU5EXyBvZiBfVE9UQUxfIGVudHJpZXMiLHNJbmZvRW1wdHk6IlNob3dpbmcgMCB0byAwIG9mIDAgZW50cmllcyIsc0luZm9GaWx0ZXJlZDoiKGZpbHRlcmVkIGZyb20gX01BWF8gdG90YWwgZW50cmllcykiLHNJbmZvUG9zdEZpeDoiIixzRGVjaW1hbDoiIixzVGhvdXNhbmRzOiIsIixzTGVuZ3RoTWVudToiU2hvdyBfTUVOVV8gZW50cmllcyIsc0xvYWRpbmdSZWNvcmRzOiJMb2FkaW5nLi4uIixzUHJvY2Vzc2luZzoiUHJvY2Vzc2luZy4uLiIsc1NlYXJjaDoiU2VhcmNoOiIsc1NlYXJjaFBsYWNlaG9sZGVyOiIiLHNVcmw6IiIsc1plcm9SZWNvcmRzOiJObyBtYXRjaGluZyByZWNvcmRzIGZvdW5kIn0sb1NlYXJjaDpmLmV4dGVuZCh7fSxxLm1vZGVscy5vU2VhcmNoKSxzQWpheERhdGFQcm9wOiJkYXRhIiwKc0FqYXhTb3VyY2U6bnVsbCxzRG9tOiJsZnJ0aXAiLHNlYXJjaERlbGF5Om51bGwsc1BhZ2luYXRpb25UeXBlOiJzaW1wbGVfbnVtYmVycyIsc1Njcm9sbFg6IiIsc1Njcm9sbFhJbm5lcjoiIixzU2Nyb2xsWToiIixzU2VydmVyTWV0aG9kOiJHRVQiLHJlbmRlcmVyOm51bGwscm93SWQ6IkRUX1Jvd0lkIn07SChxLmRlZmF1bHRzKTtxLmRlZmF1bHRzLmNvbHVtbj17YURhdGFTb3J0Om51bGwsaURhdGFTb3J0Oi0xLGFzU29ydGluZzpbImFzYyIsImRlc2MiXSxiU2VhcmNoYWJsZTohMCxiU29ydGFibGU6ITAsYlZpc2libGU6ITAsZm5DcmVhdGVkQ2VsbDpudWxsLG1EYXRhOm51bGwsbVJlbmRlcjpudWxsLHNDZWxsVHlwZToidGQiLHNDbGFzczoiIixzQ29udGVudFBhZGRpbmc6IiIsc0RlZmF1bHRDb250ZW50Om51bGwsc05hbWU6IiIsc1NvcnREYXRhVHlwZToic3RkIixzVGl0bGU6bnVsbCxzVHlwZTpudWxsLHNXaWR0aDpudWxsfTtIKHEuZGVmYXVsdHMuY29sdW1uKTtxLm1vZGVscy5vU2V0dGluZ3M9CntvRmVhdHVyZXM6e2JBdXRvV2lkdGg6bnVsbCxiRGVmZXJSZW5kZXI6bnVsbCxiRmlsdGVyOm51bGwsYkluZm86bnVsbCxiTGVuZ3RoQ2hhbmdlOm51bGwsYlBhZ2luYXRlOm51bGwsYlByb2Nlc3Npbmc6bnVsbCxiU2VydmVyU2lkZTpudWxsLGJTb3J0Om51bGwsYlNvcnRNdWx0aTpudWxsLGJTb3J0Q2xhc3NlczpudWxsLGJTdGF0ZVNhdmU6bnVsbH0sb1Njcm9sbDp7YkNvbGxhcHNlOm51bGwsaUJhcldpZHRoOjAsc1g6bnVsbCxzWElubmVyOm51bGwsc1k6bnVsbH0sb0xhbmd1YWdlOntmbkluZm9DYWxsYmFjazpudWxsfSxvQnJvd3Nlcjp7YlNjcm9sbE92ZXJzaXplOiExLGJTY3JvbGxiYXJMZWZ0OiExLGJCb3VuZGluZzohMSxiYXJXaWR0aDowfSxhamF4Om51bGwsYWFuRmVhdHVyZXM6W10sYW9EYXRhOltdLGFpRGlzcGxheTpbXSxhaURpc3BsYXlNYXN0ZXI6W10sYUlkczp7fSxhb0NvbHVtbnM6W10sYW9IZWFkZXI6W10sYW9Gb290ZXI6W10sb1ByZXZpb3VzU2VhcmNoOnt9LAphb1ByZVNlYXJjaENvbHM6W10sYWFTb3J0aW5nOm51bGwsYWFTb3J0aW5nRml4ZWQ6W10sYXNTdHJpcGVDbGFzc2VzOm51bGwsYXNEZXN0cm95U3RyaXBlczpbXSxzRGVzdHJveVdpZHRoOjAsYW9Sb3dDYWxsYmFjazpbXSxhb0hlYWRlckNhbGxiYWNrOltdLGFvRm9vdGVyQ2FsbGJhY2s6W10sYW9EcmF3Q2FsbGJhY2s6W10sYW9Sb3dDcmVhdGVkQ2FsbGJhY2s6W10sYW9QcmVEcmF3Q2FsbGJhY2s6W10sYW9Jbml0Q29tcGxldGU6W10sYW9TdGF0ZVNhdmVQYXJhbXM6W10sYW9TdGF0ZUxvYWRQYXJhbXM6W10sYW9TdGF0ZUxvYWRlZDpbXSxzVGFibGVJZDoiIixuVGFibGU6bnVsbCxuVEhlYWQ6bnVsbCxuVEZvb3Q6bnVsbCxuVEJvZHk6bnVsbCxuVGFibGVXcmFwcGVyOm51bGwsYkRlZmVyTG9hZGluZzohMSxiSW5pdGlhbGlzZWQ6ITEsYW9PcGVuUm93czpbXSxzRG9tOm51bGwsc2VhcmNoRGVsYXk6bnVsbCxzUGFnaW5hdGlvblR5cGU6InR3b19idXR0b24iLGlTdGF0ZUR1cmF0aW9uOjAsCmFvU3RhdGVTYXZlOltdLGFvU3RhdGVMb2FkOltdLG9TYXZlZFN0YXRlOm51bGwsb0xvYWRlZFN0YXRlOm51bGwsc0FqYXhTb3VyY2U6bnVsbCxzQWpheERhdGFQcm9wOm51bGwsYkFqYXhEYXRhR2V0OiEwLGpxWEhSOm51bGwsanNvbjpwLG9BamF4RGF0YTpwLGZuU2VydmVyRGF0YTpudWxsLGFvU2VydmVyUGFyYW1zOltdLHNTZXJ2ZXJNZXRob2Q6bnVsbCxmbkZvcm1hdE51bWJlcjpudWxsLGFMZW5ndGhNZW51Om51bGwsaURyYXc6MCxiRHJhd2luZzohMSxpRHJhd0Vycm9yOi0xLF9pRGlzcGxheUxlbmd0aDoxMCxfaURpc3BsYXlTdGFydDowLF9pUmVjb3Jkc1RvdGFsOjAsX2lSZWNvcmRzRGlzcGxheTowLG9DbGFzc2VzOnt9LGJGaWx0ZXJlZDohMSxiU29ydGVkOiExLGJTb3J0Q2VsbHNUb3A6bnVsbCxvSW5pdDpudWxsLGFvRGVzdHJveUNhbGxiYWNrOltdLGZuUmVjb3Jkc1RvdGFsOmZ1bmN0aW9uKCl7cmV0dXJuInNzcCI9PUQodGhpcyk/MSp0aGlzLl9pUmVjb3Jkc1RvdGFsOgp0aGlzLmFpRGlzcGxheU1hc3Rlci5sZW5ndGh9LGZuUmVjb3Jkc0Rpc3BsYXk6ZnVuY3Rpb24oKXtyZXR1cm4ic3NwIj09RCh0aGlzKT8xKnRoaXMuX2lSZWNvcmRzRGlzcGxheTp0aGlzLmFpRGlzcGxheS5sZW5ndGh9LGZuRGlzcGxheUVuZDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2lEaXNwbGF5TGVuZ3RoLGI9dGhpcy5faURpc3BsYXlTdGFydCxjPWIrYSxkPXRoaXMuYWlEaXNwbGF5Lmxlbmd0aCxlPXRoaXMub0ZlYXR1cmVzLGY9ZS5iUGFnaW5hdGU7cmV0dXJuIGUuYlNlcnZlclNpZGU/ITE9PT1mfHwtMT09PWE/YitkOk1hdGgubWluKGIrYSx0aGlzLl9pUmVjb3Jkc0Rpc3BsYXkpOiFmfHxjPmR8fC0xPT09YT9kOmN9LG9JbnN0YW5jZTpudWxsLHNJbnN0YW5jZTpudWxsLGlUYWJJbmRleDowLG5TY3JvbGxIZWFkOm51bGwsblNjcm9sbEZvb3Q6bnVsbCxhTGFzdFNvcnQ6W10sb1BsdWdpbnM6e30scm93SWRGbjpudWxsLHJvd0lkOm51bGx9O3EuZXh0PUM9e2J1dHRvbnM6e30sCmNsYXNzZXM6e30sYnVpbGQ6ImJzNC9qc3ppcC0yLjUuMC9kdC0xLjEwLjIwL2ItMS42LjEvYi1jb2x2aXMtMS42LjEvYi1mbGFzaC0xLjYuMS9iLWh0bWw1LTEuNi4xL2ItcHJpbnQtMS42LjEvY3ItMS41LjIvZmMtMy4zLjAvZmgtMy4xLjYva3QtMi41LjEvci0yLjIuMy9yZy0xLjEuMS9yci0xLjIuNi9zYy0yLjAuMS9zcC0xLjAuMS9zbC0xLjMuMSIsZXJyTW9kZToiYWxlcnQiLGZlYXR1cmU6W10sc2VhcmNoOltdLHNlbGVjdG9yOntjZWxsOltdLGNvbHVtbjpbXSxyb3c6W119LGludGVybmFsOnt9LGxlZ2FjeTp7YWpheDpudWxsfSxwYWdlcjp7fSxyZW5kZXJlcjp7cGFnZUJ1dHRvbjp7fSxoZWFkZXI6e319LG9yZGVyOnt9LHR5cGU6e2RldGVjdDpbXSxzZWFyY2g6e30sb3JkZXI6e319LF91bmlxdWU6MCxmblZlcnNpb25DaGVjazpxLmZuVmVyc2lvbkNoZWNrLGlBcGlJbmRleDowLG9KVUlDbGFzc2VzOnt9LHNWZXJzaW9uOnEudmVyc2lvbn07Zi5leHRlbmQoQyx7YWZuRmlsdGVyaW5nOkMuc2VhcmNoLGFUeXBlczpDLnR5cGUuZGV0ZWN0LG9mblNlYXJjaDpDLnR5cGUuc2VhcmNoLG9Tb3J0OkMudHlwZS5vcmRlcixhZm5Tb3J0RGF0YTpDLm9yZGVyLGFvRmVhdHVyZXM6Qy5mZWF0dXJlLG9BcGk6Qy5pbnRlcm5hbCxvU3RkQ2xhc3NlczpDLmNsYXNzZXMsb1BhZ2luYXRpb246Qy5wYWdlcn0pOwpmLmV4dGVuZChxLmV4dC5jbGFzc2VzLHtzVGFibGU6ImRhdGFUYWJsZSIsc05vRm9vdGVyOiJuby1mb290ZXIiLHNQYWdlQnV0dG9uOiJwYWdpbmF0ZV9idXR0b24iLHNQYWdlQnV0dG9uQWN0aXZlOiJjdXJyZW50IixzUGFnZUJ1dHRvbkRpc2FibGVkOiJkaXNhYmxlZCIsc1N0cmlwZU9kZDoib2RkIixzU3RyaXBlRXZlbjoiZXZlbiIsc1Jvd0VtcHR5OiJkYXRhVGFibGVzX2VtcHR5IixzV3JhcHBlcjoiZGF0YVRhYmxlc193cmFwcGVyIixzRmlsdGVyOiJkYXRhVGFibGVzX2ZpbHRlciIsc0luZm86ImRhdGFUYWJsZXNfaW5mbyIsc1BhZ2luZzoiZGF0YVRhYmxlc19wYWdpbmF0ZSBwYWdpbmdfIixzTGVuZ3RoOiJkYXRhVGFibGVzX2xlbmd0aCIsc1Byb2Nlc3Npbmc6ImRhdGFUYWJsZXNfcHJvY2Vzc2luZyIsc1NvcnRBc2M6InNvcnRpbmdfYXNjIixzU29ydERlc2M6InNvcnRpbmdfZGVzYyIsc1NvcnRhYmxlOiJzb3J0aW5nIixzU29ydGFibGVBc2M6InNvcnRpbmdfYXNjX2Rpc2FibGVkIiwKc1NvcnRhYmxlRGVzYzoic29ydGluZ19kZXNjX2Rpc2FibGVkIixzU29ydGFibGVOb25lOiJzb3J0aW5nX2Rpc2FibGVkIixzU29ydENvbHVtbjoic29ydGluZ18iLHNGaWx0ZXJJbnB1dDoiIixzTGVuZ3RoU2VsZWN0OiIiLHNTY3JvbGxXcmFwcGVyOiJkYXRhVGFibGVzX3Njcm9sbCIsc1Njcm9sbEhlYWQ6ImRhdGFUYWJsZXNfc2Nyb2xsSGVhZCIsc1Njcm9sbEhlYWRJbm5lcjoiZGF0YVRhYmxlc19zY3JvbGxIZWFkSW5uZXIiLHNTY3JvbGxCb2R5OiJkYXRhVGFibGVzX3Njcm9sbEJvZHkiLHNTY3JvbGxGb290OiJkYXRhVGFibGVzX3Njcm9sbEZvb3QiLHNTY3JvbGxGb290SW5uZXI6ImRhdGFUYWJsZXNfc2Nyb2xsRm9vdElubmVyIixzSGVhZGVyVEg6IiIsc0Zvb3RlclRIOiIiLHNTb3J0SlVJQXNjOiIiLHNTb3J0SlVJRGVzYzoiIixzU29ydEpVSToiIixzU29ydEpVSUFzY0FsbG93ZWQ6IiIsc1NvcnRKVUlEZXNjQWxsb3dlZDoiIixzU29ydEpVSVdyYXBwZXI6IiIsc1NvcnRJY29uOiIiLApzSlVJSGVhZGVyOiIiLHNKVUlGb290ZXI6IiJ9KTt2YXIgUGI9cS5leHQucGFnZXI7Zi5leHRlbmQoUGIse3NpbXBsZTpmdW5jdGlvbihhLGIpe3JldHVyblsicHJldmlvdXMiLCJuZXh0Il19LGZ1bGw6ZnVuY3Rpb24oYSxiKXtyZXR1cm5bImZpcnN0IiwicHJldmlvdXMiLCJuZXh0IiwibGFzdCJdfSxudW1iZXJzOmZ1bmN0aW9uKGEsYil7cmV0dXJuW2thKGEsYildfSxzaW1wbGVfbnVtYmVyczpmdW5jdGlvbihhLGIpe3JldHVyblsicHJldmlvdXMiLGthKGEsYiksIm5leHQiXX0sZnVsbF9udW1iZXJzOmZ1bmN0aW9uKGEsYil7cmV0dXJuWyJmaXJzdCIsInByZXZpb3VzIixrYShhLGIpLCJuZXh0IiwibGFzdCJdfSxmaXJzdF9sYXN0X251bWJlcnM6ZnVuY3Rpb24oYSxiKXtyZXR1cm5bImZpcnN0IixrYShhLGIpLCJsYXN0Il19LF9udW1iZXJzOmthLG51bWJlcnNfbGVuZ3RoOjd9KTtmLmV4dGVuZCghMCxxLmV4dC5yZW5kZXJlcix7cGFnZUJ1dHRvbjp7XzpmdW5jdGlvbihhLGIsCmMsZCxlLGgpe3ZhciBnPWEub0NsYXNzZXMsaz1hLm9MYW5ndWFnZS5vUGFnaW5hdGUsbD1hLm9MYW5ndWFnZS5vQXJpYS5wYWdpbmF0ZXx8e30sbixtLHE9MCx0PWZ1bmN0aW9uKGIsZCl7dmFyIHAscj1nLnNQYWdlQnV0dG9uRGlzYWJsZWQsdT1mdW5jdGlvbihiKXtYYShhLGIuZGF0YS5hY3Rpb24sITApfTt2YXIgdz0wO2ZvcihwPWQubGVuZ3RoO3c8cDt3Kyspe3ZhciB2PWRbd107aWYoZi5pc0FycmF5KHYpKXt2YXIgeD1mKCI8Iisodi5EVF9lbHx8ImRpdiIpKyIvPiIpLmFwcGVuZFRvKGIpO3QoeCx2KX1lbHNle249bnVsbDttPXY7eD1hLmlUYWJJbmRleDtzd2l0Y2godil7Y2FzZSAiZWxsaXBzaXMiOmIuYXBwZW5kKCc8c3BhbiBjbGFzcz0iZWxsaXBzaXMiPiYjeDIwMjY7PC9zcGFuPicpO2JyZWFrO2Nhc2UgImZpcnN0IjpuPWsuc0ZpcnN0OzA9PT1lJiYoeD0tMSxtKz0iICIrcik7YnJlYWs7Y2FzZSAicHJldmlvdXMiOm49ay5zUHJldmlvdXM7MD09PWUmJih4PS0xLG0rPQoiICIrcik7YnJlYWs7Y2FzZSAibmV4dCI6bj1rLnNOZXh0O2U9PT1oLTEmJih4PS0xLG0rPSIgIityKTticmVhaztjYXNlICJsYXN0IjpuPWsuc0xhc3Q7ZT09PWgtMSYmKHg9LTEsbSs9IiAiK3IpO2JyZWFrO2RlZmF1bHQ6bj12KzEsbT1lPT09dj9nLnNQYWdlQnV0dG9uQWN0aXZlOiIifW51bGwhPT1uJiYoeD1mKCI8YT4iLHsiY2xhc3MiOmcuc1BhZ2VCdXR0b24rIiAiK20sImFyaWEtY29udHJvbHMiOmEuc1RhYmxlSWQsImFyaWEtbGFiZWwiOmxbdl0sImRhdGEtZHQtaWR4IjpxLHRhYmluZGV4OngsaWQ6MD09PWMmJiJzdHJpbmciPT09dHlwZW9mIHY/YS5zVGFibGVJZCsiXyIrdjpudWxsfSkuaHRtbChuKS5hcHBlbmRUbyhiKSwkYSh4LHthY3Rpb246dn0sdSkscSsrKX19fTt0cnl7dmFyIHY9ZihiKS5maW5kKHkuYWN0aXZlRWxlbWVudCkuZGF0YSgiZHQtaWR4Iil9Y2F0Y2gobWMpe310KGYoYikuZW1wdHkoKSxkKTt2IT09cCYmZihiKS5maW5kKCJbZGF0YS1kdC1pZHg9IisKdisiXSIpLmZvY3VzKCl9fX0pO2YuZXh0ZW5kKHEuZXh0LnR5cGUuZGV0ZWN0LFtmdW5jdGlvbihhLGIpe2I9Yi5vTGFuZ3VhZ2Uuc0RlY2ltYWw7cmV0dXJuIGRiKGEsYik/Im51bSIrYjpudWxsfSxmdW5jdGlvbihhLGIpe2lmKGEmJiEoYSBpbnN0YW5jZW9mIERhdGUpJiYhY2MudGVzdChhKSlyZXR1cm4gbnVsbDtiPURhdGUucGFyc2UoYSk7cmV0dXJuIG51bGwhPT1iJiYhaXNOYU4oYil8fFAoYSk/ImRhdGUiOm51bGx9LGZ1bmN0aW9uKGEsYil7Yj1iLm9MYW5ndWFnZS5zRGVjaW1hbDtyZXR1cm4gZGIoYSxiLCEwKT8ibnVtLWZtdCIrYjpudWxsfSxmdW5jdGlvbihhLGIpe2I9Yi5vTGFuZ3VhZ2Uuc0RlY2ltYWw7cmV0dXJuIFViKGEsYik/Imh0bWwtbnVtIitiOm51bGx9LGZ1bmN0aW9uKGEsYil7Yj1iLm9MYW5ndWFnZS5zRGVjaW1hbDtyZXR1cm4gVWIoYSxiLCEwKT8iaHRtbC1udW0tZm10IitiOm51bGx9LGZ1bmN0aW9uKGEsYil7cmV0dXJuIFAoYSl8fCJzdHJpbmciPT09CnR5cGVvZiBhJiYtMSE9PWEuaW5kZXhPZigiPCIpPyJodG1sIjpudWxsfV0pO2YuZXh0ZW5kKHEuZXh0LnR5cGUuc2VhcmNoLHtodG1sOmZ1bmN0aW9uKGEpe3JldHVybiBQKGEpP2E6InN0cmluZyI9PT10eXBlb2YgYT9hLnJlcGxhY2UoUmIsIiAiKS5yZXBsYWNlKEVhLCIiKToiIn0sc3RyaW5nOmZ1bmN0aW9uKGEpe3JldHVybiBQKGEpP2E6InN0cmluZyI9PT10eXBlb2YgYT9hLnJlcGxhY2UoUmIsIiAiKTphfX0pO3ZhciBEYT1mdW5jdGlvbihhLGIsYyxkKXtpZigwIT09YSYmKCFhfHwiLSI9PT1hKSlyZXR1cm4tSW5maW5pdHk7YiYmKGE9VGIoYSxiKSk7YS5yZXBsYWNlJiYoYyYmKGE9YS5yZXBsYWNlKGMsIiIpKSxkJiYoYT1hLnJlcGxhY2UoZCwiIikpKTtyZXR1cm4gMSphfTtmLmV4dGVuZChDLnR5cGUub3JkZXIseyJkYXRlLXByZSI6ZnVuY3Rpb24oYSl7YT1EYXRlLnBhcnNlKGEpO3JldHVybiBpc05hTihhKT8tSW5maW5pdHk6YX0sImh0bWwtcHJlIjpmdW5jdGlvbihhKXtyZXR1cm4gUChhKT8KIiI6YS5yZXBsYWNlP2EucmVwbGFjZSgvPC4qPz4vZywiIikudG9Mb3dlckNhc2UoKTphKyIifSwic3RyaW5nLXByZSI6ZnVuY3Rpb24oYSl7cmV0dXJuIFAoYSk/IiI6InN0cmluZyI9PT10eXBlb2YgYT9hLnRvTG93ZXJDYXNlKCk6YS50b1N0cmluZz9hLnRvU3RyaW5nKCk6IiJ9LCJzdHJpbmctYXNjIjpmdW5jdGlvbihhLGIpe3JldHVybiBhPGI/LTE6YT5iPzE6MH0sInN0cmluZy1kZXNjIjpmdW5jdGlvbihhLGIpe3JldHVybiBhPGI/MTphPmI/LTE6MH19KTtIYSgiIik7Zi5leHRlbmQoITAscS5leHQucmVuZGVyZXIse2hlYWRlcjp7XzpmdW5jdGlvbihhLGIsYyxkKXtmKGEublRhYmxlKS5vbigib3JkZXIuZHQuRFQiLGZ1bmN0aW9uKGUsZixnLGspe2E9PT1mJiYoZT1jLmlkeCxiLnJlbW92ZUNsYXNzKGMuc1NvcnRpbmdDbGFzcysiICIrZC5zU29ydEFzYysiICIrZC5zU29ydERlc2MpLmFkZENsYXNzKCJhc2MiPT1rW2VdP2Quc1NvcnRBc2M6ImRlc2MiPT1rW2VdP2Quc1NvcnREZXNjOgpjLnNTb3J0aW5nQ2xhc3MpKX0pfSxqcXVlcnl1aTpmdW5jdGlvbihhLGIsYyxkKXtmKCI8ZGl2Lz4iKS5hZGRDbGFzcyhkLnNTb3J0SlVJV3JhcHBlcikuYXBwZW5kKGIuY29udGVudHMoKSkuYXBwZW5kKGYoIjxzcGFuLz4iKS5hZGRDbGFzcyhkLnNTb3J0SWNvbisiICIrYy5zU29ydGluZ0NsYXNzSlVJKSkuYXBwZW5kVG8oYik7ZihhLm5UYWJsZSkub24oIm9yZGVyLmR0LkRUIixmdW5jdGlvbihlLGYsZyxrKXthPT09ZiYmKGU9Yy5pZHgsYi5yZW1vdmVDbGFzcyhkLnNTb3J0QXNjKyIgIitkLnNTb3J0RGVzYykuYWRkQ2xhc3MoImFzYyI9PWtbZV0/ZC5zU29ydEFzYzoiZGVzYyI9PWtbZV0/ZC5zU29ydERlc2M6Yy5zU29ydGluZ0NsYXNzKSxiLmZpbmQoInNwYW4uIitkLnNTb3J0SWNvbikucmVtb3ZlQ2xhc3MoZC5zU29ydEpVSUFzYysiICIrZC5zU29ydEpVSURlc2MrIiAiK2Quc1NvcnRKVUkrIiAiK2Quc1NvcnRKVUlBc2NBbGxvd2VkKyIgIitkLnNTb3J0SlVJRGVzY0FsbG93ZWQpLmFkZENsYXNzKCJhc2MiPT0Ka1tlXT9kLnNTb3J0SlVJQXNjOiJkZXNjIj09a1tlXT9kLnNTb3J0SlVJRGVzYzpjLnNTb3J0aW5nQ2xhc3NKVUkpKX0pfX19KTt2YXIgaWI9ZnVuY3Rpb24oYSl7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgYT9hLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7Iik6YX07cS5yZW5kZXI9e251bWJlcjpmdW5jdGlvbihhLGIsYyxkLGUpe3JldHVybntkaXNwbGF5OmZ1bmN0aW9uKGYpe2lmKCJudW1iZXIiIT09dHlwZW9mIGYmJiJzdHJpbmciIT09dHlwZW9mIGYpcmV0dXJuIGY7dmFyIGc9MD5mPyItIjoiIixoPXBhcnNlRmxvYXQoZik7aWYoaXNOYU4oaCkpcmV0dXJuIGliKGYpO2g9aC50b0ZpeGVkKGMpO2Y9TWF0aC5hYnMoaCk7aD1wYXJzZUludChmLDEwKTtmPWM/YisoZi1oKS50b0ZpeGVkKGMpLnN1YnN0cmluZygyKToiIjtyZXR1cm4gZysoZHx8IiIpK2gudG9TdHJpbmcoKS5yZXBsYWNlKC9cQig/PShcZHszfSkrKD8hXGQpKS9nLAphKStmKyhlfHwiIil9fX0sdGV4dDpmdW5jdGlvbigpe3JldHVybntkaXNwbGF5OmliLGZpbHRlcjppYn19fTtmLmV4dGVuZChxLmV4dC5pbnRlcm5hbCx7X2ZuRXh0ZXJuQXBpRnVuYzpRYixfZm5CdWlsZEFqYXg6dmEsX2ZuQWpheFVwZGF0ZTpxYixfZm5BamF4UGFyYW1ldGVyczp6YixfZm5BamF4VXBkYXRlRHJhdzpBYixfZm5BamF4RGF0YVNyYzp3YSxfZm5BZGRDb2x1bW46SWEsX2ZuQ29sdW1uT3B0aW9uczptYSxfZm5BZGp1c3RDb2x1bW5TaXppbmc6YWEsX2ZuVmlzaWJsZVRvQ29sdW1uSW5kZXg6YmEsX2ZuQ29sdW1uSW5kZXhUb1Zpc2libGU6Y2EsX2ZuVmlzYmxlQ29sdW1uczpXLF9mbkdldENvbHVtbnM6b2EsX2ZuQ29sdW1uVHlwZXM6S2EsX2ZuQXBwbHlDb2x1bW5EZWZzOm5iLF9mbkh1bmdhcmlhbk1hcDpILF9mbkNhbWVsVG9IdW5nYXJpYW46TCxfZm5MYW5ndWFnZUNvbXBhdDpHYSxfZm5Ccm93c2VyRGV0ZWN0OmxiLF9mbkFkZERhdGE6UixfZm5BZGRUcjpwYSxfZm5Ob2RlVG9EYXRhSW5kZXg6ZnVuY3Rpb24oYSwKYil7cmV0dXJuIGIuX0RUX1Jvd0luZGV4IT09cD9iLl9EVF9Sb3dJbmRleDpudWxsfSxfZm5Ob2RlVG9Db2x1bW5JbmRleDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuaW5BcnJheShjLGEuYW9EYXRhW2JdLmFuQ2VsbHMpfSxfZm5HZXRDZWxsRGF0YTpJLF9mblNldENlbGxEYXRhOm9iLF9mblNwbGl0T2JqTm90YXRpb246TmEsX2ZuR2V0T2JqZWN0RGF0YUZuOlUsX2ZuU2V0T2JqZWN0RGF0YUZuOlEsX2ZuR2V0RGF0YU1hc3RlcjpPYSxfZm5DbGVhclRhYmxlOnFhLF9mbkRlbGV0ZUluZGV4OnJhLF9mbkludmFsaWRhdGU6ZWEsX2ZuR2V0Um93RWxlbWVudHM6TWEsX2ZuQ3JlYXRlVHI6TGEsX2ZuQnVpbGRIZWFkOnBiLF9mbkRyYXdIZWFkOmhhLF9mbkRyYXc6UyxfZm5SZURyYXc6VixfZm5BZGRPcHRpb25zSHRtbDpzYixfZm5EZXRlY3RIZWFkZXI6ZmEsX2ZuR2V0VW5pcXVlVGhzOnVhLF9mbkZlYXR1cmVIdG1sRmlsdGVyOnViLF9mbkZpbHRlckNvbXBsZXRlOmlhLF9mbkZpbHRlckN1c3RvbTpEYiwKX2ZuRmlsdGVyQ29sdW1uOkNiLF9mbkZpbHRlcjpCYixfZm5GaWx0ZXJDcmVhdGVTZWFyY2g6VGEsX2ZuRXNjYXBlUmVnZXg6VWEsX2ZuRmlsdGVyRGF0YTpFYixfZm5GZWF0dXJlSHRtbEluZm86eGIsX2ZuVXBkYXRlSW5mbzpIYixfZm5JbmZvTWFjcm9zOkliLF9mbkluaXRpYWxpc2U6amEsX2ZuSW5pdENvbXBsZXRlOnhhLF9mbkxlbmd0aENoYW5nZTpWYSxfZm5GZWF0dXJlSHRtbExlbmd0aDp0YixfZm5GZWF0dXJlSHRtbFBhZ2luYXRlOnliLF9mblBhZ2VDaGFuZ2U6WGEsX2ZuRmVhdHVyZUh0bWxQcm9jZXNzaW5nOnZiLF9mblByb2Nlc3NpbmdEaXNwbGF5OkssX2ZuRmVhdHVyZUh0bWxUYWJsZTp3YixfZm5TY3JvbGxEcmF3Om5hLF9mbkFwcGx5VG9DaGlsZHJlbjpOLF9mbkNhbGN1bGF0ZUNvbHVtbldpZHRoczpKYSxfZm5UaHJvdHRsZTpTYSxfZm5Db252ZXJ0VG9XaWR0aDpKYixfZm5HZXRXaWRlc3ROb2RlOktiLF9mbkdldE1heExlblN0cmluZzpMYixfZm5TdHJpbmdUb0NzczpCLApfZm5Tb3J0RmxhdHRlbjpZLF9mblNvcnQ6cmIsX2ZuU29ydEFyaWE6TmIsX2ZuU29ydExpc3RlbmVyOlphLF9mblNvcnRBdHRhY2hMaXN0ZW5lcjpRYSxfZm5Tb3J0aW5nQ2xhc3NlczpBYSxfZm5Tb3J0RGF0YTpNYixfZm5TYXZlU3RhdGU6QmEsX2ZuTG9hZFN0YXRlOk9iLF9mblNldHRpbmdzRnJvbU5vZGU6Q2EsX2ZuTG9nOk8sX2ZuTWFwOk0sX2ZuQmluZEFjdGlvbjokYSxfZm5DYWxsYmFja1JlZzpFLF9mbkNhbGxiYWNrRmlyZTpBLF9mbkxlbmd0aE92ZXJmbG93OldhLF9mblJlbmRlcmVyOlJhLF9mbkRhdGFTb3VyY2U6RCxfZm5Sb3dBdHRyaWJ1dGVzOlBhLF9mbkV4dGVuZDphYixfZm5DYWxjdWxhdGVFbmQ6ZnVuY3Rpb24oKXt9fSk7Zi5mbi5kYXRhVGFibGU9cTtxLiQ9ZjtmLmZuLmRhdGFUYWJsZVNldHRpbmdzPXEuc2V0dGluZ3M7Zi5mbi5kYXRhVGFibGVFeHQ9cS5leHQ7Zi5mbi5EYXRhVGFibGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGYodGhpcykuZGF0YVRhYmxlKGEpLmFwaSgpfTsKZi5lYWNoKHEsZnVuY3Rpb24oYSxiKXtmLmZuLkRhdGFUYWJsZVthXT1ifSk7cmV0dXJuIGYuZm4uZGF0YVRhYmxlfSk7CgoKLyohCiBEYXRhVGFibGVzIEJvb3RzdHJhcCA0IGludGVncmF0aW9uCiDCqTIwMTEtMjAxNyBTcHJ5TWVkaWEgTHRkIC0gZGF0YXRhYmxlcy5uZXQvbGljZW5zZQoqLwp2YXIgJGpzY29tcD0kanNjb21wfHx7fTskanNjb21wLnNjb3BlPXt9OyRqc2NvbXAuZmluZEludGVybmFsPWZ1bmN0aW9uKGEsYixjKXthIGluc3RhbmNlb2YgU3RyaW5nJiYoYT1TdHJpbmcoYSkpO2Zvcih2YXIgZT1hLmxlbmd0aCxkPTA7ZDxlO2QrKyl7dmFyIGs9YVtkXTtpZihiLmNhbGwoYyxrLGQsYSkpcmV0dXJue2k6ZCx2Omt9fXJldHVybntpOi0xLHY6dm9pZCAwfX07JGpzY29tcC5BU1NVTUVfRVM1PSExOyRqc2NvbXAuQVNTVU1FX05PX05BVElWRV9NQVA9ITE7JGpzY29tcC5BU1NVTUVfTk9fTkFUSVZFX1NFVD0hMTskanNjb21wLlNJTVBMRV9GUk9VTkRfUE9MWUZJTEw9ITE7CiRqc2NvbXAuZGVmaW5lUHJvcGVydHk9JGpzY29tcC5BU1NVTUVfRVM1fHwiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnRpZXM/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGEsYixjKXthIT1BcnJheS5wcm90b3R5cGUmJmEhPU9iamVjdC5wcm90b3R5cGUmJihhW2JdPWMudmFsdWUpfTskanNjb21wLmdldEdsb2JhbD1mdW5jdGlvbihhKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93PT09YT9hOiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsJiZudWxsIT1nbG9iYWw/Z2xvYmFsOmF9OyRqc2NvbXAuZ2xvYmFsPSRqc2NvbXAuZ2V0R2xvYmFsKHRoaXMpOwokanNjb21wLnBvbHlmaWxsPWZ1bmN0aW9uKGEsYixjLGUpe2lmKGIpe2M9JGpzY29tcC5nbG9iYWw7YT1hLnNwbGl0KCIuIik7Zm9yKGU9MDtlPGEubGVuZ3RoLTE7ZSsrKXt2YXIgZD1hW2VdO2QgaW4gY3x8KGNbZF09e30pO2M9Y1tkXX1hPWFbYS5sZW5ndGgtMV07ZT1jW2FdO2I9YihlKTtiIT1lJiZudWxsIT1iJiYkanNjb21wLmRlZmluZVByb3BlcnR5KGMsYSx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmJ9KX19OyRqc2NvbXAucG9seWZpbGwoIkFycmF5LnByb3RvdHlwZS5maW5kIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGEsYyl7cmV0dXJuICRqc2NvbXAuZmluZEludGVybmFsKHRoaXMsYSxjKS52fX0sImVzNiIsImVzMyIpOwooZnVuY3Rpb24oYSl7ImZ1bmN0aW9uIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsianF1ZXJ5IiwiZGF0YXRhYmxlcy5uZXQiXSxmdW5jdGlvbihiKXtyZXR1cm4gYShiLHdpbmRvdyxkb2N1bWVudCl9KToib2JqZWN0Ij09PXR5cGVvZiBleHBvcnRzP21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKGIsYyl7Ynx8KGI9d2luZG93KTtjJiZjLmZuLmRhdGFUYWJsZXx8KGM9cmVxdWlyZSgiZGF0YXRhYmxlcy5uZXQiKShiLGMpLiQpO3JldHVybiBhKGMsYixiLmRvY3VtZW50KX06YShqUXVlcnksd2luZG93LGRvY3VtZW50KX0pKGZ1bmN0aW9uKGEsYixjLGUpe3ZhciBkPWEuZm4uZGF0YVRhYmxlO2EuZXh0ZW5kKCEwLGQuZGVmYXVsdHMse2RvbToiPCdyb3cnPCdjb2wtc20tMTIgY29sLW1kLTYnbD48J2NvbC1zbS0xMiBjb2wtbWQtNidmPj48J3Jvdyc8J2NvbC1zbS0xMid0cj4+PCdyb3cnPCdjb2wtc20tMTIgY29sLW1kLTUnaT48J2NvbC1zbS0xMiBjb2wtbWQtNydwPj4iLApyZW5kZXJlcjoiYm9vdHN0cmFwIn0pO2EuZXh0ZW5kKGQuZXh0LmNsYXNzZXMse3NXcmFwcGVyOiJkYXRhVGFibGVzX3dyYXBwZXIgZHQtYm9vdHN0cmFwNCIsc0ZpbHRlcklucHV0OiJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIixzTGVuZ3RoU2VsZWN0OiJjdXN0b20tc2VsZWN0IGN1c3RvbS1zZWxlY3Qtc20gZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSIsc1Byb2Nlc3Npbmc6ImRhdGFUYWJsZXNfcHJvY2Vzc2luZyBjYXJkIixzUGFnZUJ1dHRvbjoicGFnaW5hdGVfYnV0dG9uIHBhZ2UtaXRlbSJ9KTtkLmV4dC5yZW5kZXJlci5wYWdlQnV0dG9uLmJvb3RzdHJhcD1mdW5jdGlvbihiLGwsdix3LG0scil7dmFyIGs9bmV3IGQuQXBpKGIpLHg9Yi5vQ2xhc3NlcyxuPWIub0xhbmd1YWdlLm9QYWdpbmF0ZSx5PWIub0xhbmd1YWdlLm9BcmlhLnBhZ2luYXRlfHx7fSxnLGgsdD0wLHU9ZnVuY3Rpb24oYyxkKXt2YXIgZSxsPWZ1bmN0aW9uKGIpe2IucHJldmVudERlZmF1bHQoKTsKYShiLmN1cnJlbnRUYXJnZXQpLmhhc0NsYXNzKCJkaXNhYmxlZCIpfHxrLnBhZ2UoKT09Yi5kYXRhLmFjdGlvbnx8ay5wYWdlKGIuZGF0YS5hY3Rpb24pLmRyYXcoInBhZ2UiKX07dmFyIHE9MDtmb3IoZT1kLmxlbmd0aDtxPGU7cSsrKXt2YXIgZj1kW3FdO2lmKGEuaXNBcnJheShmKSl1KGMsZik7ZWxzZXtoPWc9IiI7c3dpdGNoKGYpe2Nhc2UgImVsbGlwc2lzIjpnPSImI3gyMDI2OyI7aD0iZGlzYWJsZWQiO2JyZWFrO2Nhc2UgImZpcnN0IjpnPW4uc0ZpcnN0O2g9ZisoMDxtPyIiOiIgZGlzYWJsZWQiKTticmVhaztjYXNlICJwcmV2aW91cyI6Zz1uLnNQcmV2aW91cztoPWYrKDA8bT8iIjoiIGRpc2FibGVkIik7YnJlYWs7Y2FzZSAibmV4dCI6Zz1uLnNOZXh0O2g9ZisobTxyLTE/IiI6IiBkaXNhYmxlZCIpO2JyZWFrO2Nhc2UgImxhc3QiOmc9bi5zTGFzdDtoPWYrKG08ci0xPyIiOiIgZGlzYWJsZWQiKTticmVhaztkZWZhdWx0Omc9ZisxLGg9bT09PWY/ImFjdGl2ZSI6IiJ9aWYoZyl7dmFyIHA9CmEoIjxsaT4iLHsiY2xhc3MiOnguc1BhZ2VCdXR0b24rIiAiK2gsaWQ6MD09PXYmJiJzdHJpbmciPT09dHlwZW9mIGY/Yi5zVGFibGVJZCsiXyIrZjpudWxsfSkuYXBwZW5kKGEoIjxhPiIse2hyZWY6IiMiLCJhcmlhLWNvbnRyb2xzIjpiLnNUYWJsZUlkLCJhcmlhLWxhYmVsIjp5W2ZdLCJkYXRhLWR0LWlkeCI6dCx0YWJpbmRleDpiLmlUYWJJbmRleCwiY2xhc3MiOiJwYWdlLWxpbmsifSkuaHRtbChnKSkuYXBwZW5kVG8oYyk7Yi5vQXBpLl9mbkJpbmRBY3Rpb24ocCx7YWN0aW9uOmZ9LGwpO3QrK319fX07dHJ5e3ZhciBwPWEobCkuZmluZChjLmFjdGl2ZUVsZW1lbnQpLmRhdGEoImR0LWlkeCIpfWNhdGNoKHope311KGEobCkuZW1wdHkoKS5odG1sKCc8dWwgY2xhc3M9InBhZ2luYXRpb24iLz4nKS5jaGlsZHJlbigidWwiKSx3KTtwIT09ZSYmYShsKS5maW5kKCJbZGF0YS1kdC1pZHg9IitwKyJdIikuZm9jdXMoKX07cmV0dXJuIGR9KTsKCgovKiEKIEJ1dHRvbnMgZm9yIERhdGFUYWJsZXMgMS42LjEKIMKpMjAxNi0yMDE5IFNwcnlNZWRpYSBMdGQgLSBkYXRhdGFibGVzLm5ldC9saWNlbnNlCiovCihmdW5jdGlvbihkKXsiZnVuY3Rpb24iPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJqcXVlcnkiLCJkYXRhdGFibGVzLm5ldCJdLGZ1bmN0aW9uKHUpe3JldHVybiBkKHUsd2luZG93LGRvY3VtZW50KX0pOiJvYmplY3QiPT09dHlwZW9mIGV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24odSx0KXt1fHwodT13aW5kb3cpO3QmJnQuZm4uZGF0YVRhYmxlfHwodD1yZXF1aXJlKCJkYXRhdGFibGVzLm5ldCIpKHUsdCkuJCk7cmV0dXJuIGQodCx1LHUuZG9jdW1lbnQpfTpkKGpRdWVyeSx3aW5kb3csZG9jdW1lbnQpfSkoZnVuY3Rpb24oZCx1LHQscCl7ZnVuY3Rpb24geShhKXthPW5ldyBtLkFwaShhKTt2YXIgYj1hLmluaXQoKS5idXR0b25zfHxtLmRlZmF1bHRzLmJ1dHRvbnM7cmV0dXJuKG5ldyBuKGEsYikpLmNvbnRhaW5lcigpfXZhciBtPWQuZm4uZGF0YVRhYmxlLEI9MCxDPTAscT1tLmV4dC5idXR0b25zLG49ZnVuY3Rpb24oYSxiKXtpZighKHRoaXMgaW5zdGFuY2VvZgpuKSlyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuKG5ldyBuKGIsYSkpLmNvbnRhaW5lcigpfTsidW5kZWZpbmVkIj09PXR5cGVvZiBiJiYoYj17fSk7ITA9PT1iJiYoYj17fSk7ZC5pc0FycmF5KGIpJiYoYj17YnV0dG9uczpifSk7dGhpcy5jPWQuZXh0ZW5kKCEwLHt9LG4uZGVmYXVsdHMsYik7Yi5idXR0b25zJiYodGhpcy5jLmJ1dHRvbnM9Yi5idXR0b25zKTt0aGlzLnM9e2R0Om5ldyBtLkFwaShhKSxidXR0b25zOltdLGxpc3RlbktleXM6IiIsbmFtZXNwYWNlOiJkdGIiK0IrK307dGhpcy5kb209e2NvbnRhaW5lcjpkKCI8Iit0aGlzLmMuZG9tLmNvbnRhaW5lci50YWcrIi8+IikuYWRkQ2xhc3ModGhpcy5jLmRvbS5jb250YWluZXIuY2xhc3NOYW1lKX07dGhpcy5fY29uc3RydWN0b3IoKX07ZC5leHRlbmQobi5wcm90b3R5cGUse2FjdGlvbjpmdW5jdGlvbihhLGIpe2E9dGhpcy5fbm9kZVRvQnV0dG9uKGEpO2lmKGI9PT1wKXJldHVybiBhLmNvbmYuYWN0aW9uO2EuY29uZi5hY3Rpb249CmI7cmV0dXJuIHRoaXN9LGFjdGl2ZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX25vZGVUb0J1dHRvbihhKTthPXRoaXMuYy5kb20uYnV0dG9uLmFjdGl2ZTtjPWQoYy5ub2RlKTtpZihiPT09cClyZXR1cm4gYy5oYXNDbGFzcyhhKTtjLnRvZ2dsZUNsYXNzKGEsYj09PXA/ITA6Yik7cmV0dXJuIHRoaXN9LGFkZDpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMucy5idXR0b25zO2lmKCJzdHJpbmciPT09dHlwZW9mIGIpe2I9Yi5zcGxpdCgiLSIpO3ZhciBlPXRoaXMucztjPTA7Zm9yKHZhciBkPWIubGVuZ3RoLTE7YzxkO2MrKyllPWUuYnV0dG9uc1sxKmJbY11dO2M9ZS5idXR0b25zO2I9MSpiW2IubGVuZ3RoLTFdfXRoaXMuX2V4cGFuZEJ1dHRvbihjLGEsZSE9PXAsYik7dGhpcy5fZHJhdygpO3JldHVybiB0aGlzfSxjb250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb20uY29udGFpbmVyfSxkaXNhYmxlOmZ1bmN0aW9uKGEpe2E9dGhpcy5fbm9kZVRvQnV0dG9uKGEpO2QoYS5ub2RlKS5hZGRDbGFzcyh0aGlzLmMuZG9tLmJ1dHRvbi5kaXNhYmxlZCk7CnJldHVybiB0aGlzfSxkZXN0cm95OmZ1bmN0aW9uKCl7ZCgiYm9keSIpLm9mZigia2V5dXAuIit0aGlzLnMubmFtZXNwYWNlKTt2YXIgYT10aGlzLnMuYnV0dG9ucy5zbGljZSgpLGI7dmFyIGM9MDtmb3IoYj1hLmxlbmd0aDtjPGI7YysrKXRoaXMucmVtb3ZlKGFbY10ubm9kZSk7dGhpcy5kb20uY29udGFpbmVyLnJlbW92ZSgpO2E9dGhpcy5zLmR0LnNldHRpbmdzKClbMF07Yz0wO2ZvcihiPWEubGVuZ3RoO2M8YjtjKyspaWYoYS5pbnN0PT09dGhpcyl7YS5zcGxpY2UoYywxKTticmVha31yZXR1cm4gdGhpc30sZW5hYmxlOmZ1bmN0aW9uKGEsYil7aWYoITE9PT1iKXJldHVybiB0aGlzLmRpc2FibGUoYSk7YT10aGlzLl9ub2RlVG9CdXR0b24oYSk7ZChhLm5vZGUpLnJlbW92ZUNsYXNzKHRoaXMuYy5kb20uYnV0dG9uLmRpc2FibGVkKTtyZXR1cm4gdGhpc30sbmFtZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmMubmFtZX0sbm9kZTpmdW5jdGlvbihhKXtpZighYSlyZXR1cm4gdGhpcy5kb20uY29udGFpbmVyOwphPXRoaXMuX25vZGVUb0J1dHRvbihhKTtyZXR1cm4gZChhLm5vZGUpfSxwcm9jZXNzaW5nOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5zLmR0LGU9dGhpcy5fbm9kZVRvQnV0dG9uKGEpO2lmKGI9PT1wKXJldHVybiBkKGUubm9kZSkuaGFzQ2xhc3MoInByb2Nlc3NpbmciKTtkKGUubm9kZSkudG9nZ2xlQ2xhc3MoInByb2Nlc3NpbmciLGIpO2QoYy50YWJsZSgpLm5vZGUoKSkudHJpZ2dlckhhbmRsZXIoImJ1dHRvbnMtcHJvY2Vzc2luZy5kdCIsW2IsYy5idXR0b24oYSksYyxkKGEpLGUuY29uZl0pO3JldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fbm9kZVRvQnV0dG9uKGEpLGM9dGhpcy5fbm9kZVRvSG9zdChhKSxlPXRoaXMucy5kdDtpZihiLmJ1dHRvbnMubGVuZ3RoKWZvcih2YXIgZz1iLmJ1dHRvbnMubGVuZ3RoLTE7MDw9ZztnLS0pdGhpcy5yZW1vdmUoYi5idXR0b25zW2ddLm5vZGUpO2IuY29uZi5kZXN0cm95JiZiLmNvbmYuZGVzdHJveS5jYWxsKGUuYnV0dG9uKGEpLAplLGQoYSksYi5jb25mKTt0aGlzLl9yZW1vdmVLZXkoYi5jb25mKTtkKGIubm9kZSkucmVtb3ZlKCk7YT1kLmluQXJyYXkoYixjKTtjLnNwbGljZShhLDEpO3JldHVybiB0aGlzfSx0ZXh0OmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5fbm9kZVRvQnV0dG9uKGEpO2E9dGhpcy5jLmRvbS5jb2xsZWN0aW9uLmJ1dHRvbkxpbmVyO2E9Yy5pbkNvbGxlY3Rpb24mJmEmJmEudGFnP2EudGFnOnRoaXMuYy5kb20uYnV0dG9uTGluZXIudGFnO3ZhciBlPXRoaXMucy5kdCxnPWQoYy5ub2RlKSxmPWZ1bmN0aW9uKGEpe3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2YgYT9hKGUsZyxjLmNvbmYpOmF9O2lmKGI9PT1wKXJldHVybiBmKGMuY29uZi50ZXh0KTtjLmNvbmYudGV4dD1iO2E/Zy5jaGlsZHJlbihhKS5odG1sKGYoYikpOmcuaHRtbChmKGIpKTtyZXR1cm4gdGhpc30sX2NvbnN0cnVjdG9yOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPXRoaXMucy5kdCxjPWIuc2V0dGluZ3MoKVswXSxlPXRoaXMuYy5idXR0b25zOwpjLl9idXR0b25zfHwoYy5fYnV0dG9ucz1bXSk7Yy5fYnV0dG9ucy5wdXNoKHtpbnN0OnRoaXMsbmFtZTp0aGlzLmMubmFtZX0pO2Zvcih2YXIgZz0wLGY9ZS5sZW5ndGg7ZzxmO2crKyl0aGlzLmFkZChlW2ddKTtiLm9uKCJkZXN0cm95IixmdW5jdGlvbihiLGUpe2U9PT1jJiZhLmRlc3Ryb3koKX0pO2QoImJvZHkiKS5vbigia2V5dXAuIit0aGlzLnMubmFtZXNwYWNlLGZ1bmN0aW9uKGIpe2lmKCF0LmFjdGl2ZUVsZW1lbnR8fHQuYWN0aXZlRWxlbWVudD09PXQuYm9keSl7dmFyIGM9U3RyaW5nLmZyb21DaGFyQ29kZShiLmtleUNvZGUpLnRvTG93ZXJDYXNlKCk7LTEhPT1hLnMubGlzdGVuS2V5cy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYykmJmEuX2tleXByZXNzKGMsYil9fSl9LF9hZGRLZXk6ZnVuY3Rpb24oYSl7YS5rZXkmJih0aGlzLnMubGlzdGVuS2V5cys9ZC5pc1BsYWluT2JqZWN0KGEua2V5KT9hLmtleS5rZXk6YS5rZXkpfSxfZHJhdzpmdW5jdGlvbihhLGIpe2F8fChhPXRoaXMuZG9tLmNvbnRhaW5lciwKYj10aGlzLnMuYnV0dG9ucyk7YS5jaGlsZHJlbigpLmRldGFjaCgpO2Zvcih2YXIgYz0wLGU9Yi5sZW5ndGg7YzxlO2MrKylhLmFwcGVuZChiW2NdLmluc2VydGVyKSxhLmFwcGVuZCgiICIpLGJbY10uYnV0dG9ucyYmYltjXS5idXR0b25zLmxlbmd0aCYmdGhpcy5fZHJhdyhiW2NdLmNvbGxlY3Rpb24sYltjXS5idXR0b25zKX0sX2V4cGFuZEJ1dHRvbjpmdW5jdGlvbihhLGIsYyxlKXt2YXIgZz10aGlzLnMuZHQsZj0wO2I9ZC5pc0FycmF5KGIpP2I6W2JdO2Zvcih2YXIgaD0wLGs9Yi5sZW5ndGg7aDxrO2grKyl7dmFyIHI9dGhpcy5fcmVzb2x2ZUV4dGVuZHMoYltoXSk7aWYocilpZihkLmlzQXJyYXkocikpdGhpcy5fZXhwYW5kQnV0dG9uKGEscixjLGUpO2Vsc2V7dmFyIGw9dGhpcy5fYnVpbGRCdXR0b24ocixjKTtsJiYoZSE9PXA/KGEuc3BsaWNlKGUsMCxsKSxlKyspOmEucHVzaChsKSxsLmNvbmYuYnV0dG9ucyYmKGwuY29sbGVjdGlvbj1kKCI8Iit0aGlzLmMuZG9tLmNvbGxlY3Rpb24udGFnKwoiLz4iKSxsLmNvbmYuX2NvbGxlY3Rpb249bC5jb2xsZWN0aW9uLHRoaXMuX2V4cGFuZEJ1dHRvbihsLmJ1dHRvbnMsbC5jb25mLmJ1dHRvbnMsITAsZSkpLHIuaW5pdCYmci5pbml0LmNhbGwoZy5idXR0b24obC5ub2RlKSxnLGQobC5ub2RlKSxyKSxmKyspfX19LF9idWlsZEJ1dHRvbjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuYy5kb20uYnV0dG9uLGU9dGhpcy5jLmRvbS5idXR0b25MaW5lcixnPXRoaXMuYy5kb20uY29sbGVjdGlvbixmPXRoaXMucy5kdCxoPWZ1bmN0aW9uKGIpe3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2YgYj9iKGYsbCxhKTpifTtiJiZnLmJ1dHRvbiYmKGM9Zy5idXR0b24pO2ImJmcuYnV0dG9uTGluZXImJihlPWcuYnV0dG9uTGluZXIpO2lmKGEuYXZhaWxhYmxlJiYhYS5hdmFpbGFibGUoZixhKSlyZXR1cm4hMTt2YXIgaz1mdW5jdGlvbihhLGIsYyxlKXtlLmFjdGlvbi5jYWxsKGIuYnV0dG9uKGMpLGEsYixjLGUpO2QoYi50YWJsZSgpLm5vZGUoKSkudHJpZ2dlckhhbmRsZXIoImJ1dHRvbnMtYWN0aW9uLmR0IiwKW2IuYnV0dG9uKGMpLGIsYyxlXSl9O2c9YS50YWd8fGMudGFnO3ZhciByPWEuY2xpY2tCbHVycz09PXA/ITA6YS5jbGlja0JsdXJzLGw9ZCgiPCIrZysiLz4iKS5hZGRDbGFzcyhjLmNsYXNzTmFtZSkuYXR0cigidGFiaW5kZXgiLHRoaXMucy5kdC5zZXR0aW5ncygpWzBdLmlUYWJJbmRleCkuYXR0cigiYXJpYS1jb250cm9scyIsdGhpcy5zLmR0LnRhYmxlKCkubm9kZSgpLmlkKS5vbigiY2xpY2suZHRiIixmdW5jdGlvbihiKXtiLnByZXZlbnREZWZhdWx0KCk7IWwuaGFzQ2xhc3MoYy5kaXNhYmxlZCkmJmEuYWN0aW9uJiZrKGIsZixsLGEpO3ImJmwuYmx1cigpfSkub24oImtleXVwLmR0YiIsZnVuY3Rpb24oYil7MTM9PT1iLmtleUNvZGUmJiFsLmhhc0NsYXNzKGMuZGlzYWJsZWQpJiZhLmFjdGlvbiYmayhiLGYsbCxhKX0pOyJhIj09PWcudG9Mb3dlckNhc2UoKSYmbC5hdHRyKCJocmVmIiwiIyIpOyJidXR0b24iPT09Zy50b0xvd2VyQ2FzZSgpJiZsLmF0dHIoInR5cGUiLCJidXR0b24iKTsKZS50YWc/KGc9ZCgiPCIrZS50YWcrIi8+IikuaHRtbChoKGEudGV4dCkpLmFkZENsYXNzKGUuY2xhc3NOYW1lKSwiYSI9PT1lLnRhZy50b0xvd2VyQ2FzZSgpJiZnLmF0dHIoImhyZWYiLCIjIiksbC5hcHBlbmQoZykpOmwuaHRtbChoKGEudGV4dCkpOyExPT09YS5lbmFibGVkJiZsLmFkZENsYXNzKGMuZGlzYWJsZWQpO2EuY2xhc3NOYW1lJiZsLmFkZENsYXNzKGEuY2xhc3NOYW1lKTthLnRpdGxlQXR0ciYmbC5hdHRyKCJ0aXRsZSIsaChhLnRpdGxlQXR0cikpO2EuYXR0ciYmbC5hdHRyKGEuYXR0cik7YS5uYW1lc3BhY2V8fChhLm5hbWVzcGFjZT0iLmR0LWJ1dHRvbi0iK0MrKyk7ZT0oZT10aGlzLmMuZG9tLmJ1dHRvbkNvbnRhaW5lcikmJmUudGFnP2QoIjwiK2UudGFnKyIvPiIpLmFkZENsYXNzKGUuY2xhc3NOYW1lKS5hcHBlbmQobCk6bDt0aGlzLl9hZGRLZXkoYSk7dGhpcy5jLmJ1dHRvbkNyZWF0ZWQmJihlPXRoaXMuYy5idXR0b25DcmVhdGVkKGEsZSkpO3JldHVybntjb25mOmEsCm5vZGU6bC5nZXQoMCksaW5zZXJ0ZXI6ZSxidXR0b25zOltdLGluQ29sbGVjdGlvbjpiLGNvbGxlY3Rpb246bnVsbH19LF9ub2RlVG9CdXR0b246ZnVuY3Rpb24oYSxiKXtifHwoYj10aGlzLnMuYnV0dG9ucyk7Zm9yKHZhciBjPTAsZT1iLmxlbmd0aDtjPGU7YysrKXtpZihiW2NdLm5vZGU9PT1hKXJldHVybiBiW2NdO2lmKGJbY10uYnV0dG9ucy5sZW5ndGgpe3ZhciBkPXRoaXMuX25vZGVUb0J1dHRvbihhLGJbY10uYnV0dG9ucyk7aWYoZClyZXR1cm4gZH19fSxfbm9kZVRvSG9zdDpmdW5jdGlvbihhLGIpe2J8fChiPXRoaXMucy5idXR0b25zKTtmb3IodmFyIGM9MCxlPWIubGVuZ3RoO2M8ZTtjKyspe2lmKGJbY10ubm9kZT09PWEpcmV0dXJuIGI7aWYoYltjXS5idXR0b25zLmxlbmd0aCl7dmFyIGQ9dGhpcy5fbm9kZVRvSG9zdChhLGJbY10uYnV0dG9ucyk7aWYoZClyZXR1cm4gZH19fSxfa2V5cHJlc3M6ZnVuY3Rpb24oYSxiKXtpZighYi5fYnV0dG9uc0hhbmRsZWQpe3ZhciBjPQpmdW5jdGlvbihlKXtmb3IodmFyIGc9MCxmPWUubGVuZ3RoO2c8ZjtnKyspe3ZhciBoPWVbZ10uY29uZixrPWVbZ10ubm9kZTtoLmtleSYmKGgua2V5PT09YT8oYi5fYnV0dG9uc0hhbmRsZWQ9ITAsZChrKS5jbGljaygpKTohZC5pc1BsYWluT2JqZWN0KGgua2V5KXx8aC5rZXkua2V5IT09YXx8aC5rZXkuc2hpZnRLZXkmJiFiLnNoaWZ0S2V5fHxoLmtleS5hbHRLZXkmJiFiLmFsdEtleXx8aC5rZXkuY3RybEtleSYmIWIuY3RybEtleXx8aC5rZXkubWV0YUtleSYmIWIubWV0YUtleXx8KGIuX2J1dHRvbnNIYW5kbGVkPSEwLGQoaykuY2xpY2soKSkpO2VbZ10uYnV0dG9ucy5sZW5ndGgmJmMoZVtnXS5idXR0b25zKX19O2ModGhpcy5zLmJ1dHRvbnMpfX0sX3JlbW92ZUtleTpmdW5jdGlvbihhKXtpZihhLmtleSl7dmFyIGI9ZC5pc1BsYWluT2JqZWN0KGEua2V5KT9hLmtleS5rZXk6YS5rZXk7YT10aGlzLnMubGlzdGVuS2V5cy5zcGxpdCgiIik7Yj1kLmluQXJyYXkoYixhKTthLnNwbGljZShiLAoxKTt0aGlzLnMubGlzdGVuS2V5cz1hLmpvaW4oIiIpfX0sX3Jlc29sdmVFeHRlbmRzOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucy5kdCxjLGU9ZnVuY3Rpb24oYyl7Zm9yKHZhciBlPTA7IWQuaXNQbGFpbk9iamVjdChjKSYmIWQuaXNBcnJheShjKTspe2lmKGM9PT1wKXJldHVybjtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGMpe2lmKGM9YyhiLGEpLCFjKXJldHVybiExfWVsc2UgaWYoInN0cmluZyI9PT10eXBlb2YgYyl7aWYoIXFbY10pdGhyb3ciVW5rbm93biBidXR0b24gdHlwZTogIitjO2M9cVtjXX1lKys7aWYoMzA8ZSl0aHJvdyJCdXR0b25zOiBUb28gbWFueSBpdGVyYXRpb25zIjt9cmV0dXJuIGQuaXNBcnJheShjKT9jOmQuZXh0ZW5kKHt9LGMpfTtmb3IoYT1lKGEpO2EmJmEuZXh0ZW5kOyl7aWYoIXFbYS5leHRlbmRdKXRocm93IkNhbm5vdCBleHRlbmQgdW5rbm93biBidXR0b24gdHlwZTogIithLmV4dGVuZDt2YXIgZz1lKHFbYS5leHRlbmRdKTtpZihkLmlzQXJyYXkoZykpcmV0dXJuIGc7CmlmKCFnKXJldHVybiExO3ZhciBmPWcuY2xhc3NOYW1lO2E9ZC5leHRlbmQoe30sZyxhKTtmJiZhLmNsYXNzTmFtZSE9PWYmJihhLmNsYXNzTmFtZT1mKyIgIithLmNsYXNzTmFtZSk7dmFyIGg9YS5wb3N0Zml4QnV0dG9ucztpZihoKXthLmJ1dHRvbnN8fChhLmJ1dHRvbnM9W10pO2Y9MDtmb3IoYz1oLmxlbmd0aDtmPGM7ZisrKWEuYnV0dG9ucy5wdXNoKGhbZl0pO2EucG9zdGZpeEJ1dHRvbnM9bnVsbH1pZihoPWEucHJlZml4QnV0dG9ucyl7YS5idXR0b25zfHwoYS5idXR0b25zPVtdKTtmPTA7Zm9yKGM9aC5sZW5ndGg7ZjxjO2YrKylhLmJ1dHRvbnMuc3BsaWNlKGYsMCxoW2ZdKTthLnByZWZpeEJ1dHRvbnM9bnVsbH1hLmV4dGVuZD1nLmV4dGVuZH1yZXR1cm4gYX0sX3BvcG92ZXI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPXRoaXMuYyxnPWQuZXh0ZW5kKHthbGlnbjoiYnV0dG9uLWxlZnQiLGF1dG9DbG9zZTohMSxiYWNrZ3JvdW5kOiEwLGJhY2tncm91bmRDbGFzc05hbWU6ImR0LWJ1dHRvbi1iYWNrZ3JvdW5kIiwKY29udGVudENsYXNzTmFtZTplLmRvbS5jb2xsZWN0aW9uLmNsYXNzTmFtZSxjb2xsZWN0aW9uTGF5b3V0OiIiLGNvbGxlY3Rpb25UaXRsZToiIixkcm9wdXA6ITEsZmFkZTo0MDAscmlnaHRBbGlnbkNsYXNzTmFtZToiZHQtYnV0dG9uLXJpZ2h0Iix0YWc6ZS5kb20uY29sbGVjdGlvbi50YWd9LGMpLGY9Yi5ub2RlKCksaD1mdW5jdGlvbigpe2QoIi5kdC1idXR0b24tY29sbGVjdGlvbiIpLnN0b3AoKS5mYWRlT3V0KGcuZmFkZSxmdW5jdGlvbigpe2QodGhpcykuZGV0YWNoKCl9KTtkKGIuYnV0dG9ucygnW2FyaWEtaGFzcG9wdXA9InRydWUiXVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0nKS5ub2RlcygpKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwiZmFsc2UiKTtkKCJkaXYuZHQtYnV0dG9uLWJhY2tncm91bmQiKS5vZmYoImNsaWNrLmR0Yi1jb2xsZWN0aW9uIik7bi5iYWNrZ3JvdW5kKCExLGcuYmFja2dyb3VuZENsYXNzTmFtZSxnLmZhZGUsZik7ZCgiYm9keSIpLm9mZigiLmR0Yi1jb2xsZWN0aW9uIik7CmIub2ZmKCJidXR0b25zLWFjdGlvbi5iLWludGVybmFsIil9OyExPT09YSYmaCgpO2M9ZChiLmJ1dHRvbnMoJ1thcmlhLWhhc3BvcHVwPSJ0cnVlIl1bYXJpYS1leHBhbmRlZD0idHJ1ZSJdJykubm9kZXMoKSk7Yy5sZW5ndGgmJihmPWMuZXEoMCksaCgpKTtjPWQoIjxkaXYvPiIpLmFkZENsYXNzKCJkdC1idXR0b24tY29sbGVjdGlvbiIpLmFkZENsYXNzKGcuY29sbGVjdGlvbkxheW91dCkuY3NzKCJkaXNwbGF5Iiwibm9uZSIpO2E9ZChhKS5hZGRDbGFzcyhnLmNvbnRlbnRDbGFzc05hbWUpLmF0dHIoInJvbGUiLCJtZW51IikuYXBwZW5kVG8oYyk7Zi5hdHRyKCJhcmlhLWV4cGFuZGVkIiwidHJ1ZSIpO2YucGFyZW50cygiYm9keSIpWzBdIT09dC5ib2R5JiYoZj10LmJvZHkubGFzdENoaWxkKTtnLmNvbGxlY3Rpb25UaXRsZSYmYy5wcmVwZW5kKCc8ZGl2IGNsYXNzPSJkdC1idXR0b24tY29sbGVjdGlvbi10aXRsZSI+JytnLmNvbGxlY3Rpb25UaXRsZSsiPC9kaXY+Iik7Yy5pbnNlcnRBZnRlcihmKS5mYWRlSW4oZy5mYWRlKTsKdmFyIGs9ZChiLnRhYmxlKCkuY29udGFpbmVyKCkpO2U9Yy5jc3MoInBvc2l0aW9uIik7ImR0LWNvbnRhaW5lciI9PT1nLmFsaWduJiYoZj1mLnBhcmVudCgpLGMuY3NzKCJ3aWR0aCIsay53aWR0aCgpKSk7aWYoImFic29sdXRlIj09PWUpe2U9Zi5wb3NpdGlvbigpO2MuY3NzKHt0b3A6ZS50b3ArZi5vdXRlckhlaWdodCgpLGxlZnQ6ZS5sZWZ0fSk7dmFyIHI9Yy5vdXRlckhlaWdodCgpLGw9Yy5vdXRlcldpZHRoKCksdz1rLm9mZnNldCgpLnRvcCtrLmhlaWdodCgpO3c9ZS50b3ArZi5vdXRlckhlaWdodCgpK3Itdzt2YXIgRD1lLnRvcC1yLG09ay5vZmZzZXQoKS50b3A7cj1lLnRvcC1yLTU7KHc+bS1EfHxnLmRyb3B1cCkmJi1yPG0mJmMuY3NzKCJ0b3AiLHIpOyhjLmhhc0NsYXNzKGcucmlnaHRBbGlnbkNsYXNzTmFtZSl8fCJidXR0b24tcmlnaHQiPT09Zy5hbGlnbikmJmMuY3NzKCJsZWZ0IixlLmxlZnQrZi5vdXRlcldpZHRoKCktbCk7cj1lLmxlZnQrbDtrPWsub2Zmc2V0KCkubGVmdCsKay53aWR0aCgpO3I+ayYmYy5jc3MoImxlZnQiLGUubGVmdC0oci1rKSk7az1mLm9mZnNldCgpLmxlZnQrbDtrPmQodSkud2lkdGgoKSYmYy5jc3MoImxlZnQiLGUubGVmdC0oay1kKHUpLndpZHRoKCkpKX1lbHNlIGU9Yy5oZWlnaHQoKS8yLGU+ZCh1KS5oZWlnaHQoKS8yJiYoZT1kKHUpLmhlaWdodCgpLzIpLGMuY3NzKCJtYXJnaW5Ub3AiLC0xKmUpO2cuYmFja2dyb3VuZCYmbi5iYWNrZ3JvdW5kKCEwLGcuYmFja2dyb3VuZENsYXNzTmFtZSxnLmZhZGUsZik7ZCgiZGl2LmR0LWJ1dHRvbi1iYWNrZ3JvdW5kIikub24oImNsaWNrLmR0Yi1jb2xsZWN0aW9uIixmdW5jdGlvbigpe30pO2QoImJvZHkiKS5vbigiY2xpY2suZHRiLWNvbGxlY3Rpb24iLGZ1bmN0aW9uKGIpe3ZhciBjPWQuZm4uYWRkQmFjaz8iYWRkQmFjayI6ImFuZFNlbGYiO2QoYi50YXJnZXQpLnBhcmVudHMoKVtjXSgpLmZpbHRlcihhKS5sZW5ndGh8fGgoKX0pLm9uKCJrZXl1cC5kdGItY29sbGVjdGlvbiIsZnVuY3Rpb24oYSl7Mjc9PT0KYS5rZXlDb2RlJiZoKCl9KTtnLmF1dG9DbG9zZSYmc2V0VGltZW91dChmdW5jdGlvbigpe2Iub24oImJ1dHRvbnMtYWN0aW9uLmItaW50ZXJuYWwiLGZ1bmN0aW9uKGEsYixjLGUpe2VbMF0hPT1mWzBdJiZoKCl9KX0sMCl9fSk7bi5iYWNrZ3JvdW5kPWZ1bmN0aW9uKGEsYixjLGUpe2M9PT1wJiYoYz00MDApO2V8fChlPXQuYm9keSk7YT9kKCI8ZGl2Lz4iKS5hZGRDbGFzcyhiKS5jc3MoImRpc3BsYXkiLCJub25lIikuaW5zZXJ0QWZ0ZXIoZSkuc3RvcCgpLmZhZGVJbihjKTpkKCJkaXYuIitiKS5zdG9wKCkuZmFkZU91dChjLGZ1bmN0aW9uKCl7ZCh0aGlzKS5yZW1vdmVDbGFzcyhiKS5yZW1vdmUoKX0pfTtuLmluc3RhbmNlU2VsZWN0b3I9ZnVuY3Rpb24oYSxiKXtpZihhPT09cHx8bnVsbD09PWEpcmV0dXJuIGQubWFwKGIsZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5zdH0pO3ZhciBjPVtdLGU9ZC5tYXAoYixmdW5jdGlvbihhKXtyZXR1cm4gYS5uYW1lfSksZz1mdW5jdGlvbihhKXtpZihkLmlzQXJyYXkoYSkpZm9yKHZhciBmPQowLGs9YS5sZW5ndGg7ZjxrO2YrKylnKGFbZl0pO2Vsc2Uic3RyaW5nIj09PXR5cGVvZiBhPy0xIT09YS5pbmRleE9mKCIsIik/ZyhhLnNwbGl0KCIsIikpOihhPWQuaW5BcnJheShkLnRyaW0oYSksZSksLTEhPT1hJiZjLnB1c2goYlthXS5pbnN0KSk6Im51bWJlciI9PT10eXBlb2YgYSYmYy5wdXNoKGJbYV0uaW5zdCl9O2coYSk7cmV0dXJuIGN9O24uYnV0dG9uU2VsZWN0b3I9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9W10sZT1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkLGcsZj0wLGs9Yi5sZW5ndGg7ZjxrO2YrKylpZihkPWJbZl0pZz1jIT09cD9jK2Y6ZisiIixhLnB1c2goe25vZGU6ZC5ub2RlLG5hbWU6ZC5jb25mLm5hbWUsaWR4Omd9KSxkLmJ1dHRvbnMmJmUoYSxkLmJ1dHRvbnMsZysiLSIpfSxnPWZ1bmN0aW9uKGEsYil7dmFyIGYsaD1bXTtlKGgsYi5zLmJ1dHRvbnMpO3ZhciBrPWQubWFwKGgsZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZX0pO2lmKGQuaXNBcnJheShhKXx8CmEgaW5zdGFuY2VvZiBkKWZvcihrPTAsZj1hLmxlbmd0aDtrPGY7aysrKWcoYVtrXSxiKTtlbHNlIGlmKG51bGw9PT1hfHxhPT09cHx8IioiPT09YSlmb3Ioaz0wLGY9aC5sZW5ndGg7azxmO2srKyljLnB1c2goe2luc3Q6Yixub2RlOmhba10ubm9kZX0pO2Vsc2UgaWYoIm51bWJlciI9PT10eXBlb2YgYSljLnB1c2goe2luc3Q6Yixub2RlOmIucy5idXR0b25zW2FdLm5vZGV9KTtlbHNlIGlmKCJzdHJpbmciPT09dHlwZW9mIGEpaWYoLTEhPT1hLmluZGV4T2YoIiwiKSlmb3IoaD1hLnNwbGl0KCIsIiksaz0wLGY9aC5sZW5ndGg7azxmO2srKylnKGQudHJpbShoW2tdKSxiKTtlbHNlIGlmKGEubWF0Y2goL15cZCsoXC1cZCspKiQvKSlrPWQubWFwKGgsZnVuY3Rpb24oYSl7cmV0dXJuIGEuaWR4fSksYy5wdXNoKHtpbnN0OmIsbm9kZTpoW2QuaW5BcnJheShhLGspXS5ub2RlfSk7ZWxzZSBpZigtMSE9PWEuaW5kZXhPZigiOm5hbWUiKSlmb3IoYT1hLnJlcGxhY2UoIjpuYW1lIiwiIiksaz0KMCxmPWgubGVuZ3RoO2s8ZjtrKyspaFtrXS5uYW1lPT09YSYmYy5wdXNoKHtpbnN0OmIsbm9kZTpoW2tdLm5vZGV9KTtlbHNlIGQoaykuZmlsdGVyKGEpLmVhY2goZnVuY3Rpb24oKXtjLnB1c2goe2luc3Q6Yixub2RlOnRoaXN9KX0pO2Vsc2Uib2JqZWN0Ij09PXR5cGVvZiBhJiZhLm5vZGVOYW1lJiYoaD1kLmluQXJyYXkoYSxrKSwtMSE9PWgmJmMucHVzaCh7aW5zdDpiLG5vZGU6a1toXX0pKX0sZj0wLGg9YS5sZW5ndGg7ZjxoO2YrKylnKGIsYVtmXSk7cmV0dXJuIGN9O24uZGVmYXVsdHM9e2J1dHRvbnM6WyJjb3B5IiwiZXhjZWwiLCJjc3YiLCJwZGYiLCJwcmludCJdLG5hbWU6Im1haW4iLHRhYkluZGV4OjAsZG9tOntjb250YWluZXI6e3RhZzoiZGl2IixjbGFzc05hbWU6ImR0LWJ1dHRvbnMifSxjb2xsZWN0aW9uOnt0YWc6ImRpdiIsY2xhc3NOYW1lOiIifSxidXR0b246e3RhZzoiQWN0aXZlWE9iamVjdCJpbiB1PyJhIjoiYnV0dG9uIixjbGFzc05hbWU6ImR0LWJ1dHRvbiIsCmFjdGl2ZToiYWN0aXZlIixkaXNhYmxlZDoiZGlzYWJsZWQifSxidXR0b25MaW5lcjp7dGFnOiJzcGFuIixjbGFzc05hbWU6IiJ9fX07bi52ZXJzaW9uPSIxLjYuMSI7ZC5leHRlbmQocSx7Y29sbGVjdGlvbjp7dGV4dDpmdW5jdGlvbihhKXtyZXR1cm4gYS5pMThuKCJidXR0b25zLmNvbGxlY3Rpb24iLCJDb2xsZWN0aW9uIil9LGNsYXNzTmFtZToiYnV0dG9ucy1jb2xsZWN0aW9uIixpbml0OmZ1bmN0aW9uKGEsYixjKXtiLmF0dHIoImFyaWEtZXhwYW5kZWQiLCExKX0sYWN0aW9uOmZ1bmN0aW9uKGEsYixjLGUpe2Euc3RvcFByb3BhZ2F0aW9uKCk7ZS5fY29sbGVjdGlvbi5wYXJlbnRzKCJib2R5IikubGVuZ3RoP3RoaXMucG9wb3ZlcighMSxlKTp0aGlzLnBvcG92ZXIoZS5fY29sbGVjdGlvbixlKX0sYXR0cjp7ImFyaWEtaGFzcG9wdXAiOiEwfX0sY29weTpmdW5jdGlvbihhLGIpe2lmKHEuY29weUh0bWw1KXJldHVybiJjb3B5SHRtbDUiO2lmKHEuY29weUZsYXNoJiZxLmNvcHlGbGFzaC5hdmFpbGFibGUoYSwKYikpcmV0dXJuImNvcHlGbGFzaCJ9LGNzdjpmdW5jdGlvbihhLGIpe2lmKHEuY3N2SHRtbDUmJnEuY3N2SHRtbDUuYXZhaWxhYmxlKGEsYikpcmV0dXJuImNzdkh0bWw1IjtpZihxLmNzdkZsYXNoJiZxLmNzdkZsYXNoLmF2YWlsYWJsZShhLGIpKXJldHVybiJjc3ZGbGFzaCJ9LGV4Y2VsOmZ1bmN0aW9uKGEsYil7aWYocS5leGNlbEh0bWw1JiZxLmV4Y2VsSHRtbDUuYXZhaWxhYmxlKGEsYikpcmV0dXJuImV4Y2VsSHRtbDUiO2lmKHEuZXhjZWxGbGFzaCYmcS5leGNlbEZsYXNoLmF2YWlsYWJsZShhLGIpKXJldHVybiJleGNlbEZsYXNoIn0scGRmOmZ1bmN0aW9uKGEsYil7aWYocS5wZGZIdG1sNSYmcS5wZGZIdG1sNS5hdmFpbGFibGUoYSxiKSlyZXR1cm4icGRmSHRtbDUiO2lmKHEucGRmRmxhc2gmJnEucGRmRmxhc2guYXZhaWxhYmxlKGEsYikpcmV0dXJuInBkZkZsYXNoIn0scGFnZUxlbmd0aDpmdW5jdGlvbihhKXthPWEuc2V0dGluZ3MoKVswXS5hTGVuZ3RoTWVudTt2YXIgYj1kLmlzQXJyYXkoYVswXSk/CmFbMF06YSxjPWQuaXNBcnJheShhWzBdKT9hWzFdOmE7cmV0dXJue2V4dGVuZDoiY29sbGVjdGlvbiIsdGV4dDpmdW5jdGlvbihhKXtyZXR1cm4gYS5pMThuKCJidXR0b25zLnBhZ2VMZW5ndGgiLHsiLTEiOiJTaG93IGFsbCByb3dzIixfOiJTaG93ICVkIHJvd3MifSxhLnBhZ2UubGVuKCkpfSxjbGFzc05hbWU6ImJ1dHRvbnMtcGFnZS1sZW5ndGgiLGF1dG9DbG9zZTohMCxidXR0b25zOmQubWFwKGIsZnVuY3Rpb24oYSxiKXtyZXR1cm57dGV4dDpjW2JdLGNsYXNzTmFtZToiYnV0dG9uLXBhZ2UtbGVuZ3RoIixhY3Rpb246ZnVuY3Rpb24oYixjKXtjLnBhZ2UubGVuKGEpLmRyYXcoKX0saW5pdDpmdW5jdGlvbihiLGMsZCl7dmFyIGU9dGhpcztjPWZ1bmN0aW9uKCl7ZS5hY3RpdmUoYi5wYWdlLmxlbigpPT09YSl9O2Iub24oImxlbmd0aC5kdCIrZC5uYW1lc3BhY2UsYyk7YygpfSxkZXN0cm95OmZ1bmN0aW9uKGEsYixjKXthLm9mZigibGVuZ3RoLmR0IitjLm5hbWVzcGFjZSl9fX0pLAppbml0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzO2Eub24oImxlbmd0aC5kdCIrYy5uYW1lc3BhY2UsZnVuY3Rpb24oKXtkLnRleHQoYy50ZXh0KX0pfSxkZXN0cm95OmZ1bmN0aW9uKGEsYixjKXthLm9mZigibGVuZ3RoLmR0IitjLm5hbWVzcGFjZSl9fX19KTttLkFwaS5yZWdpc3RlcigiYnV0dG9ucygpIixmdW5jdGlvbihhLGIpe2I9PT1wJiYoYj1hLGE9cCk7dGhpcy5zZWxlY3Rvci5idXR0b25Hcm91cD1hO3ZhciBjPXRoaXMuaXRlcmF0b3IoITAsInRhYmxlIixmdW5jdGlvbihjKXtpZihjLl9idXR0b25zKXJldHVybiBuLmJ1dHRvblNlbGVjdG9yKG4uaW5zdGFuY2VTZWxlY3RvcihhLGMuX2J1dHRvbnMpLGIpfSwhMCk7Yy5fZ3JvdXBTZWxlY3Rvcj1hO3JldHVybiBjfSk7bS5BcGkucmVnaXN0ZXIoImJ1dHRvbigpIixmdW5jdGlvbihhLGIpe2E9dGhpcy5idXR0b25zKGEsYik7MTxhLmxlbmd0aCYmYS5zcGxpY2UoMSxhLmxlbmd0aCk7cmV0dXJuIGF9KTttLkFwaS5yZWdpc3RlclBsdXJhbCgiYnV0dG9ucygpLmFjdGl2ZSgpIiwKImJ1dHRvbigpLmFjdGl2ZSgpIixmdW5jdGlvbihhKXtyZXR1cm4gYT09PXA/dGhpcy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5zdC5hY3RpdmUoYS5ub2RlKX0pOnRoaXMuZWFjaChmdW5jdGlvbihiKXtiLmluc3QuYWN0aXZlKGIubm9kZSxhKX0pfSk7bS5BcGkucmVnaXN0ZXJQbHVyYWwoImJ1dHRvbnMoKS5hY3Rpb24oKSIsImJ1dHRvbigpLmFjdGlvbigpIixmdW5jdGlvbihhKXtyZXR1cm4gYT09PXA/dGhpcy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5zdC5hY3Rpb24oYS5ub2RlKX0pOnRoaXMuZWFjaChmdW5jdGlvbihiKXtiLmluc3QuYWN0aW9uKGIubm9kZSxhKX0pfSk7bS5BcGkucmVnaXN0ZXIoWyJidXR0b25zKCkuZW5hYmxlKCkiLCJidXR0b24oKS5lbmFibGUoKSJdLGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Yi5pbnN0LmVuYWJsZShiLm5vZGUsYSl9KX0pO20uQXBpLnJlZ2lzdGVyKFsiYnV0dG9ucygpLmRpc2FibGUoKSIsCiJidXR0b24oKS5kaXNhYmxlKCkiXSxmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYSl7YS5pbnN0LmRpc2FibGUoYS5ub2RlKX0pfSk7bS5BcGkucmVnaXN0ZXJQbHVyYWwoImJ1dHRvbnMoKS5ub2RlcygpIiwiYnV0dG9uKCkubm9kZSgpIixmdW5jdGlvbigpe3ZhciBhPWQoKTtkKHRoaXMuZWFjaChmdW5jdGlvbihiKXthPWEuYWRkKGIuaW5zdC5ub2RlKGIubm9kZSkpfSkpO3JldHVybiBhfSk7bS5BcGkucmVnaXN0ZXJQbHVyYWwoImJ1dHRvbnMoKS5wcm9jZXNzaW5nKCkiLCJidXR0b24oKS5wcm9jZXNzaW5nKCkiLGZ1bmN0aW9uKGEpe3JldHVybiBhPT09cD90aGlzLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5pbnN0LnByb2Nlc3NpbmcoYS5ub2RlKX0pOnRoaXMuZWFjaChmdW5jdGlvbihiKXtiLmluc3QucHJvY2Vzc2luZyhiLm5vZGUsYSl9KX0pO20uQXBpLnJlZ2lzdGVyUGx1cmFsKCJidXR0b25zKCkudGV4dCgpIiwiYnV0dG9uKCkudGV4dCgpIixmdW5jdGlvbihhKXtyZXR1cm4gYT09PQpwP3RoaXMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLmluc3QudGV4dChhLm5vZGUpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2IuaW5zdC50ZXh0KGIubm9kZSxhKX0pfSk7bS5BcGkucmVnaXN0ZXJQbHVyYWwoImJ1dHRvbnMoKS50cmlnZ2VyKCkiLCJidXR0b24oKS50cmlnZ2VyKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihhKXthLmluc3Qubm9kZShhLm5vZGUpLnRyaWdnZXIoImNsaWNrIil9KX0pO20uQXBpLnJlZ2lzdGVyKCJidXR0b24oKS5wb3BvdmVyKCkiLGZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBjLmluc3QuX3BvcG92ZXIoYSx0aGlzLmJ1dHRvbih0aGlzWzBdLm5vZGUpLGIpfSl9KTttLkFwaS5yZWdpc3RlcigiYnV0dG9ucygpLmNvbnRhaW5lcnMoKSIsZnVuY3Rpb24oKXt2YXIgYT1kKCksYj10aGlzLl9ncm91cFNlbGVjdG9yO3RoaXMuaXRlcmF0b3IoITAsInRhYmxlIixmdW5jdGlvbihjKXtpZihjLl9idXR0b25zKXtjPQpuLmluc3RhbmNlU2VsZWN0b3IoYixjLl9idXR0b25zKTtmb3IodmFyIGQ9MCxnPWMubGVuZ3RoO2Q8ZztkKyspYT1hLmFkZChjW2RdLmNvbnRhaW5lcigpKX19KTtyZXR1cm4gYX0pO20uQXBpLnJlZ2lzdGVyKCJidXR0b25zKCkuY29udGFpbmVyKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGFpbmVycygpLmVxKDApfSk7bS5BcGkucmVnaXN0ZXIoImJ1dHRvbigpLmFkZCgpIixmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuY29udGV4dDtjLmxlbmd0aCYmKGM9bi5pbnN0YW5jZVNlbGVjdG9yKHRoaXMuX2dyb3VwU2VsZWN0b3IsY1swXS5fYnV0dG9ucyksYy5sZW5ndGgmJmNbMF0uYWRkKGIsYSkpO3JldHVybiB0aGlzLmJ1dHRvbih0aGlzLl9ncm91cFNlbGVjdG9yLGEpfSk7bS5BcGkucmVnaXN0ZXIoImJ1dHRvbnMoKS5kZXN0cm95KCkiLGZ1bmN0aW9uKCl7dGhpcy5wbHVjaygiaW5zdCIpLnVuaXF1ZSgpLmVhY2goZnVuY3Rpb24oYSl7YS5kZXN0cm95KCl9KTtyZXR1cm4gdGhpc30pOwptLkFwaS5yZWdpc3RlclBsdXJhbCgiYnV0dG9ucygpLnJlbW92ZSgpIiwiYnV0dG9ucygpLnJlbW92ZSgpIixmdW5jdGlvbigpe3RoaXMuZWFjaChmdW5jdGlvbihhKXthLmluc3QucmVtb3ZlKGEubm9kZSl9KTtyZXR1cm4gdGhpc30pO3ZhciB2O20uQXBpLnJlZ2lzdGVyKCJidXR0b25zLmluZm8oKSIsZnVuY3Rpb24oYSxiLGMpe3ZhciBlPXRoaXM7aWYoITE9PT1hKXJldHVybiB0aGlzLm9mZigiZGVzdHJveS5idG4taW5mbyIpLGQoIiNkYXRhdGFibGVzX2J1dHRvbnNfaW5mbyIpLmZhZGVPdXQoZnVuY3Rpb24oKXtkKHRoaXMpLnJlbW92ZSgpfSksY2xlYXJUaW1lb3V0KHYpLHY9bnVsbCx0aGlzO3YmJmNsZWFyVGltZW91dCh2KTtkKCIjZGF0YXRhYmxlc19idXR0b25zX2luZm8iKS5sZW5ndGgmJmQoIiNkYXRhdGFibGVzX2J1dHRvbnNfaW5mbyIpLnJlbW92ZSgpO2E9YT8iPGgyPiIrYSsiPC9oMj4iOiIiO2QoJzxkaXYgaWQ9ImRhdGF0YWJsZXNfYnV0dG9uc19pbmZvIiBjbGFzcz0iZHQtYnV0dG9uLWluZm8iLz4nKS5odG1sKGEpLmFwcGVuZChkKCI8ZGl2Lz4iKVsic3RyaW5nIj09PQp0eXBlb2YgYj8iaHRtbCI6ImFwcGVuZCJdKGIpKS5jc3MoImRpc3BsYXkiLCJub25lIikuYXBwZW5kVG8oImJvZHkiKS5mYWRlSW4oKTtjIT09cCYmMCE9PWMmJih2PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmJ1dHRvbnMuaW5mbyghMSl9LGMpKTt0aGlzLm9uKCJkZXN0cm95LmJ0bi1pbmZvIixmdW5jdGlvbigpe2UuYnV0dG9ucy5pbmZvKCExKX0pO3JldHVybiB0aGlzfSk7bS5BcGkucmVnaXN0ZXIoImJ1dHRvbnMuZXhwb3J0RGF0YSgpIixmdW5jdGlvbihhKXtpZih0aGlzLmNvbnRleHQubGVuZ3RoKXJldHVybiBFKG5ldyBtLkFwaSh0aGlzLmNvbnRleHRbMF0pLGEpfSk7bS5BcGkucmVnaXN0ZXIoImJ1dHRvbnMuZXhwb3J0SW5mbygpIixmdW5jdGlvbihhKXthfHwoYT17fSk7dmFyIGI9YTt2YXIgYz0iKiI9PT1iLmZpbGVuYW1lJiYiKiIhPT1iLnRpdGxlJiZiLnRpdGxlIT09cCYmbnVsbCE9PWIudGl0bGUmJiIiIT09Yi50aXRsZT9iLnRpdGxlOmIuZmlsZW5hbWU7ImZ1bmN0aW9uIj09PQp0eXBlb2YgYyYmKGM9YygpKTtjPT09cHx8bnVsbD09PWM/Yz1udWxsOigtMSE9PWMuaW5kZXhPZigiKiIpJiYoYz1kLnRyaW0oYy5yZXBsYWNlKCIqIixkKCJoZWFkID4gdGl0bGUiKS50ZXh0KCkpKSksYz1jLnJlcGxhY2UoL1teYS16QS1aMC05X1x1MDBBMS1cdUZGRkZcLixcLV8gIVwoXCldL2csIiIpLChiPXgoYi5leHRlbnNpb24pKXx8KGI9IiIpLGMrPWIpO2I9eChhLnRpdGxlKTtiPW51bGw9PT1iP251bGw6LTEhPT1iLmluZGV4T2YoIioiKT9iLnJlcGxhY2UoIioiLGQoImhlYWQgPiB0aXRsZSIpLnRleHQoKXx8IkV4cG9ydGVkIGRhdGEiKTpiO3JldHVybntmaWxlbmFtZTpjLHRpdGxlOmIsbWVzc2FnZVRvcDp6KHRoaXMsYS5tZXNzYWdlfHxhLm1lc3NhZ2VUb3AsInRvcCIpLG1lc3NhZ2VCb3R0b206eih0aGlzLGEubWVzc2FnZUJvdHRvbSwiYm90dG9tIil9fSk7dmFyIHg9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PT1hfHxhPT09cD9udWxsOiJmdW5jdGlvbiI9PT10eXBlb2YgYT8KYSgpOmF9LHo9ZnVuY3Rpb24oYSxiLGMpe2I9eChiKTtpZihudWxsPT09YilyZXR1cm4gbnVsbDthPWQoImNhcHRpb24iLGEudGFibGUoKS5jb250YWluZXIoKSkuZXEoMCk7cmV0dXJuIioiPT09Yj9hLmNzcygiY2FwdGlvbi1zaWRlIikhPT1jP251bGw6YS5sZW5ndGg/YS50ZXh0KCk6IiI6Yn0sQT1kKCI8dGV4dGFyZWEvPiIpWzBdLEU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1kLmV4dGVuZCghMCx7fSx7cm93czpudWxsLGNvbHVtbnM6IiIsbW9kaWZpZXI6e3NlYXJjaDoiYXBwbGllZCIsb3JkZXI6ImFwcGxpZWQifSxvcnRob2dvbmFsOiJkaXNwbGF5IixzdHJpcEh0bWw6ITAsc3RyaXBOZXdsaW5lczohMCxkZWNvZGVFbnRpdGllczohMCx0cmltOiEwLGZvcm1hdDp7aGVhZGVyOmZ1bmN0aW9uKGEpe3JldHVybiBlKGEpfSxmb290ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSl9LGJvZHk6ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSl9fSxjdXN0b21pemVEYXRhOm51bGx9LGIpLGU9ZnVuY3Rpb24oYSl7aWYoInN0cmluZyIhPT0KdHlwZW9mIGEpcmV0dXJuIGE7YT1hLnJlcGxhY2UoLzxzY3JpcHRcYltePF0qKD86KD8hPFwvc2NyaXB0Pik8W148XSopKjxcL3NjcmlwdD4vZ2ksIiIpO2E9YS5yZXBsYWNlKC88IVwtXC0uKj9cLVwtPi9nLCIiKTtjLnN0cmlwSHRtbCYmKGE9YS5yZXBsYWNlKC88W14+XSo+L2csIiIpKTtjLnRyaW0mJihhPWEucmVwbGFjZSgvXlxzK3xccyskL2csIiIpKTtjLnN0cmlwTmV3bGluZXMmJihhPWEucmVwbGFjZSgvXG4vZywiICIpKTtjLmRlY29kZUVudGl0aWVzJiYoQS5pbm5lckhUTUw9YSxhPUEudmFsdWUpO3JldHVybiBhfTtiPWEuY29sdW1ucyhjLmNvbHVtbnMpLmluZGV4ZXMoKS5tYXAoZnVuY3Rpb24oYil7dmFyIGQ9YS5jb2x1bW4oYikuaGVhZGVyKCk7cmV0dXJuIGMuZm9ybWF0LmhlYWRlcihkLmlubmVySFRNTCxiLGQpfSkudG9BcnJheSgpO3ZhciBnPWEudGFibGUoKS5mb290ZXIoKT9hLmNvbHVtbnMoYy5jb2x1bW5zKS5pbmRleGVzKCkubWFwKGZ1bmN0aW9uKGIpe3ZhciBkPQphLmNvbHVtbihiKS5mb290ZXIoKTtyZXR1cm4gYy5mb3JtYXQuZm9vdGVyKGQ/ZC5pbm5lckhUTUw6IiIsYixkKX0pLnRvQXJyYXkoKTpudWxsLGY9ZC5leHRlbmQoe30sYy5tb2RpZmllcik7YS5zZWxlY3QmJiJmdW5jdGlvbiI9PT10eXBlb2YgYS5zZWxlY3QuaW5mbyYmZi5zZWxlY3RlZD09PXAmJmEucm93cyhjLnJvd3MsZC5leHRlbmQoe3NlbGVjdGVkOiEwfSxmKSkuYW55KCkmJmQuZXh0ZW5kKGYse3NlbGVjdGVkOiEwfSk7Zj1hLnJvd3MoYy5yb3dzLGYpLmluZGV4ZXMoKS50b0FycmF5KCk7dmFyIGg9YS5jZWxscyhmLGMuY29sdW1ucyk7Zj1oLnJlbmRlcihjLm9ydGhvZ29uYWwpLnRvQXJyYXkoKTtoPWgubm9kZXMoKS50b0FycmF5KCk7Zm9yKHZhciBrPWIubGVuZ3RoLG09W10sbD0wLG49MCxxPTA8az9mLmxlbmd0aC9rOjA7bjxxO24rKyl7Zm9yKHZhciB1PVtrXSx0PTA7dDxrO3QrKyl1W3RdPWMuZm9ybWF0LmJvZHkoZltsXSxuLHQsaFtsXSksbCsrO21bbl09dX1iPXtoZWFkZXI6YiwKZm9vdGVyOmcsYm9keTptfTtjLmN1c3RvbWl6ZURhdGEmJmMuY3VzdG9taXplRGF0YShiKTtyZXR1cm4gYn07ZC5mbi5kYXRhVGFibGUuQnV0dG9ucz1uO2QuZm4uRGF0YVRhYmxlLkJ1dHRvbnM9bjtkKHQpLm9uKCJpbml0LmR0IHBsdWdpbi1pbml0LmR0IixmdW5jdGlvbihhLGIpeyJkdCI9PT1hLm5hbWVzcGFjZSYmKGE9Yi5vSW5pdC5idXR0b25zfHxtLmRlZmF1bHRzLmJ1dHRvbnMpJiYhYi5fYnV0dG9ucyYmKG5ldyBuKGIsYSkpLmNvbnRhaW5lcigpfSk7bS5leHQuZmVhdHVyZS5wdXNoKHtmbkluaXQ6eSxjRmVhdHVyZToiQiJ9KTttLmV4dC5mZWF0dXJlcyYmbS5leHQuZmVhdHVyZXMucmVnaXN0ZXIoImJ1dHRvbnMiLHkpO3JldHVybiBufSk7CgoKLyohCiBCb290c3RyYXAgaW50ZWdyYXRpb24gZm9yIERhdGFUYWJsZXMnIEJ1dHRvbnMKIMKpMjAxNiBTcHJ5TWVkaWEgTHRkIC0gZGF0YXRhYmxlcy5uZXQvbGljZW5zZQoqLwooZnVuY3Rpb24oYyl7ImZ1bmN0aW9uIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsianF1ZXJ5IiwiZGF0YXRhYmxlcy5uZXQtYnM0IiwiZGF0YXRhYmxlcy5uZXQtYnV0dG9ucyJdLGZ1bmN0aW9uKGEpe3JldHVybiBjKGEsd2luZG93LGRvY3VtZW50KX0pOiJvYmplY3QiPT09dHlwZW9mIGV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24oYSxiKXthfHwoYT13aW5kb3cpO2ImJmIuZm4uZGF0YVRhYmxlfHwoYj1yZXF1aXJlKCJkYXRhdGFibGVzLm5ldC1iczQiKShhLGIpLiQpO2IuZm4uZGF0YVRhYmxlLkJ1dHRvbnN8fHJlcXVpcmUoImRhdGF0YWJsZXMubmV0LWJ1dHRvbnMiKShhLGIpO3JldHVybiBjKGIsYSxhLmRvY3VtZW50KX06YyhqUXVlcnksd2luZG93LGRvY3VtZW50KX0pKGZ1bmN0aW9uKGMsYSxiLGQpe2E9Yy5mbi5kYXRhVGFibGU7Yy5leHRlbmQoITAsYS5CdXR0b25zLmRlZmF1bHRzLHtkb206e2NvbnRhaW5lcjp7Y2xhc3NOYW1lOiJkdC1idXR0b25zIGJ0bi1ncm91cCBmbGV4LXdyYXAifSwKYnV0dG9uOntjbGFzc05hbWU6ImJ0biBidG4tc2Vjb25kYXJ5In0sY29sbGVjdGlvbjp7dGFnOiJkaXYiLGNsYXNzTmFtZToiZHJvcGRvd24tbWVudSIsYnV0dG9uOnt0YWc6ImEiLGNsYXNzTmFtZToiZHQtYnV0dG9uIGRyb3Bkb3duLWl0ZW0iLGFjdGl2ZToiYWN0aXZlIixkaXNhYmxlZDoiZGlzYWJsZWQifX19LGJ1dHRvbkNyZWF0ZWQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5idXR0b25zP2MoJzxkaXYgY2xhc3M9ImJ0bi1ncm91cCIvPicpLmFwcGVuZChiKTpifX0pO2EuZXh0LmJ1dHRvbnMuY29sbGVjdGlvbi5jbGFzc05hbWUrPSIgZHJvcGRvd24tdG9nZ2xlIjthLmV4dC5idXR0b25zLmNvbGxlY3Rpb24ucmlnaHRBbGlnbkNsYXNzTmFtZT0iZHJvcGRvd24tbWVudS1yaWdodCI7cmV0dXJuIGEuQnV0dG9uc30pOwoKCi8qIQogQ29sdW1uIHZpc2liaWxpdHkgYnV0dG9ucyBmb3IgQnV0dG9ucyBhbmQgRGF0YVRhYmxlcy4KIDIwMTYgU3ByeU1lZGlhIEx0ZCAtIGRhdGF0YWJsZXMubmV0L2xpY2Vuc2UKKi8KKGZ1bmN0aW9uKGYpeyJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImpxdWVyeSIsImRhdGF0YWJsZXMubmV0IiwiZGF0YXRhYmxlcy5uZXQtYnV0dG9ucyJdLGZ1bmN0aW9uKGMpe3JldHVybiBmKGMsd2luZG93LGRvY3VtZW50KX0pOiJvYmplY3QiPT09dHlwZW9mIGV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24oYyxlKXtjfHwoYz13aW5kb3cpO2UmJmUuZm4uZGF0YVRhYmxlfHwoZT1yZXF1aXJlKCJkYXRhdGFibGVzLm5ldCIpKGMsZSkuJCk7ZS5mbi5kYXRhVGFibGUuQnV0dG9uc3x8cmVxdWlyZSgiZGF0YXRhYmxlcy5uZXQtYnV0dG9ucyIpKGMsZSk7cmV0dXJuIGYoZSxjLGMuZG9jdW1lbnQpfTpmKGpRdWVyeSx3aW5kb3csZG9jdW1lbnQpfSkoZnVuY3Rpb24oZixjLGUsaCl7Yz1mLmZuLmRhdGFUYWJsZTtmLmV4dGVuZChjLmV4dC5idXR0b25zLHtjb2x2aXM6ZnVuY3Rpb24oYSxiKXtyZXR1cm57ZXh0ZW5kOiJjb2xsZWN0aW9uIiwKdGV4dDpmdW5jdGlvbihiKXtyZXR1cm4gYi5pMThuKCJidXR0b25zLmNvbHZpcyIsIkNvbHVtbiB2aXNpYmlsaXR5Iil9LGNsYXNzTmFtZToiYnV0dG9ucy1jb2x2aXMiLGJ1dHRvbnM6W3tleHRlbmQ6ImNvbHVtbnNUb2dnbGUiLGNvbHVtbnM6Yi5jb2x1bW5zLGNvbHVtblRleHQ6Yi5jb2x1bW5UZXh0fV19fSxjb2x1bW5zVG9nZ2xlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuY29sdW1ucyhiLmNvbHVtbnMpLmluZGV4ZXMoKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJue2V4dGVuZDoiY29sdW1uVG9nZ2xlIixjb2x1bW5zOmEsY29sdW1uVGV4dDpiLmNvbHVtblRleHR9fSkudG9BcnJheSgpfSxjb2x1bW5Ub2dnbGU6ZnVuY3Rpb24oYSxiKXtyZXR1cm57ZXh0ZW5kOiJjb2x1bW5WaXNpYmlsaXR5Iixjb2x1bW5zOmIuY29sdW1ucyxjb2x1bW5UZXh0OmIuY29sdW1uVGV4dH19LGNvbHVtbnNWaXNpYmlsaXR5OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuY29sdW1ucyhiLmNvbHVtbnMpLmluZGV4ZXMoKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJue2V4dGVuZDoiY29sdW1uVmlzaWJpbGl0eSIsCmNvbHVtbnM6YSx2aXNpYmlsaXR5OmIudmlzaWJpbGl0eSxjb2x1bW5UZXh0OmIuY29sdW1uVGV4dH19KS50b0FycmF5KCl9LGNvbHVtblZpc2liaWxpdHk6e2NvbHVtbnM6aCx0ZXh0OmZ1bmN0aW9uKGEsYixkKXtyZXR1cm4gZC5fY29sdW1uVGV4dChhLGQpfSxjbGFzc05hbWU6ImJ1dHRvbnMtY29sdW1uVmlzaWJpbGl0eSIsYWN0aW9uOmZ1bmN0aW9uKGEsYixkLGcpe2E9Yi5jb2x1bW5zKGcuY29sdW1ucyk7Yj1hLnZpc2libGUoKTthLnZpc2libGUoZy52aXNpYmlsaXR5IT09aD9nLnZpc2liaWxpdHk6IShiLmxlbmd0aCYmYlswXSkpfSxpbml0OmZ1bmN0aW9uKGEsYixkKXt2YXIgZz10aGlzO2IuYXR0cigiZGF0YS1jdi1pZHgiLGQuY29sdW1ucyk7YS5vbigiY29sdW1uLXZpc2liaWxpdHkuZHQiK2QubmFtZXNwYWNlLGZ1bmN0aW9uKGIsYyl7Yy5iRGVzdHJveWluZ3x8Yy5uVGFibGUhPWEuc2V0dGluZ3MoKVswXS5uVGFibGV8fGcuYWN0aXZlKGEuY29sdW1uKGQuY29sdW1ucykudmlzaWJsZSgpKX0pLm9uKCJjb2x1bW4tcmVvcmRlci5kdCIrCmQubmFtZXNwYWNlLGZ1bmN0aW9uKGMsZSxmKXsxPT09YS5jb2x1bW5zKGQuY29sdW1ucykuY291bnQoKSYmKGIudGV4dChkLl9jb2x1bW5UZXh0KGEsZCkpLGcuYWN0aXZlKGEuY29sdW1uKGQuY29sdW1ucykudmlzaWJsZSgpKSl9KTt0aGlzLmFjdGl2ZShhLmNvbHVtbihkLmNvbHVtbnMpLnZpc2libGUoKSl9LGRlc3Ryb3k6ZnVuY3Rpb24oYSxiLGQpe2Eub2ZmKCJjb2x1bW4tdmlzaWJpbGl0eS5kdCIrZC5uYW1lc3BhY2UpLm9mZigiY29sdW1uLXJlb3JkZXIuZHQiK2QubmFtZXNwYWNlKX0sX2NvbHVtblRleHQ6ZnVuY3Rpb24oYSxiKXt2YXIgZD1hLmNvbHVtbihiLmNvbHVtbnMpLmluZGV4KCksYz1hLnNldHRpbmdzKClbMF0uYW9Db2x1bW5zW2RdLnNUaXRsZS5yZXBsYWNlKC9cbi9nLCIgIikucmVwbGFjZSgvPGJyXHMqXC8/Pi9naSwiICIpLnJlcGxhY2UoLzxzZWxlY3QoLio/KTxcL3NlbGVjdD4vZywiIikucmVwbGFjZSgvPCFcLVwtLio/XC1cLT4vZywiIikucmVwbGFjZSgvPC4qPz4vZywKIiIpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKTtyZXR1cm4gYi5jb2x1bW5UZXh0P2IuY29sdW1uVGV4dChhLGQsYyk6Y319LGNvbHZpc1Jlc3RvcmU6e2NsYXNzTmFtZToiYnV0dG9ucy1jb2x2aXNSZXN0b3JlIix0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmkxOG4oImJ1dHRvbnMuY29sdmlzUmVzdG9yZSIsIlJlc3RvcmUgdmlzaWJpbGl0eSIpfSxpbml0OmZ1bmN0aW9uKGEsYixkKXtkLl92aXNPcmlnaW5hbD1hLmNvbHVtbnMoKS5pbmRleGVzKCkubWFwKGZ1bmN0aW9uKGIpe3JldHVybiBhLmNvbHVtbihiKS52aXNpYmxlKCl9KS50b0FycmF5KCl9LGFjdGlvbjpmdW5jdGlvbihhLGIsZCxjKXtiLmNvbHVtbnMoKS5ldmVyeShmdW5jdGlvbihhKXthPWIuY29sUmVvcmRlciYmYi5jb2xSZW9yZGVyLnRyYW5zcG9zZT9iLmNvbFJlb3JkZXIudHJhbnNwb3NlKGEsInRvT3JpZ2luYWwiKTphO3RoaXMudmlzaWJsZShjLl92aXNPcmlnaW5hbFthXSl9KX19LGNvbHZpc0dyb3VwOntjbGFzc05hbWU6ImJ1dHRvbnMtY29sdmlzR3JvdXAiLAphY3Rpb246ZnVuY3Rpb24oYSxiLGQsYyl7Yi5jb2x1bW5zKGMuc2hvdykudmlzaWJsZSghMCwhMSk7Yi5jb2x1bW5zKGMuaGlkZSkudmlzaWJsZSghMSwhMSk7Yi5jb2x1bW5zLmFkanVzdCgpfSxzaG93OltdLGhpZGU6W119fSk7cmV0dXJuIGMuQnV0dG9uc30pOwoKCi8qIQogRmxhc2ggZXhwb3J0IGJ1dHRvbnMgZm9yIEJ1dHRvbnMgYW5kIERhdGFUYWJsZXMuCiAyMDE1LTIwMTcgU3ByeU1lZGlhIEx0ZCAtIGRhdGF0YWJsZXMubmV0L2xpY2Vuc2UKCiBaZXJvQ2xpcGJhb3JkIC0gTUlUIGxpY2Vuc2UKIENvcHlyaWdodCAoYykgMjAxMiBKb3NlcGggSHVja2FieQoqLwooZnVuY3Rpb24oZyl7ImZ1bmN0aW9uIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsianF1ZXJ5IiwiZGF0YXRhYmxlcy5uZXQiLCJkYXRhdGFibGVzLm5ldC1idXR0b25zIl0sZnVuY3Rpb24obil7cmV0dXJuIGcobix3aW5kb3csZG9jdW1lbnQpfSk6Im9iamVjdCI9PT10eXBlb2YgZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1mdW5jdGlvbihuLG0pe258fChuPXdpbmRvdyk7bSYmbS5mbi5kYXRhVGFibGV8fChtPXJlcXVpcmUoImRhdGF0YWJsZXMubmV0IikobixtKS4kKTttLmZuLmRhdGFUYWJsZS5CdXR0b25zfHxyZXF1aXJlKCJkYXRhdGFibGVzLm5ldC1idXR0b25zIikobixtKTtyZXR1cm4gZyhtLG4sbi5kb2N1bWVudCl9OmcoalF1ZXJ5LHdpbmRvdyxkb2N1bWVudCl9KShmdW5jdGlvbihnLG4sbSx1KXtmdW5jdGlvbiBBKGEpe2Zvcih2YXIgYj0iIjswPD1hOyliPVN0cmluZy5mcm9tQ2hhckNvZGUoYSUyNis2NSkrYixhPU1hdGguZmxvb3IoYS8yNiktMTsKcmV0dXJuIGJ9ZnVuY3Rpb24gcihhLGIsYyl7dmFyIGQ9YS5jcmVhdGVFbGVtZW50KGIpO2MmJihjLmF0dHImJmcoZCkuYXR0cihjLmF0dHIpLGMuY2hpbGRyZW4mJmcuZWFjaChjLmNoaWxkcmVuLGZ1bmN0aW9uKGEsYil7ZC5hcHBlbmRDaGlsZChiKX0pLG51bGwhPT1jLnRleHQmJmMudGV4dCE9PXUmJmQuYXBwZW5kQ2hpbGQoYS5jcmVhdGVUZXh0Tm9kZShjLnRleHQpKSk7cmV0dXJuIGR9ZnVuY3Rpb24gRyhhLGIpe3ZhciBjPWEuaGVhZGVyW2JdLmxlbmd0aDthLmZvb3RlciYmYS5mb290ZXJbYl0ubGVuZ3RoPmMmJihjPWEuZm9vdGVyW2JdLmxlbmd0aCk7Zm9yKHZhciBkPTAsZj1hLmJvZHkubGVuZ3RoO2Q8ZjtkKyspe3ZhciBlPWEuYm9keVtkXVtiXTtlPW51bGwhPT1lJiZlIT09dT9lLnRvU3RyaW5nKCk6IiI7LTEhPT1lLmluZGV4T2YoIlxuIik/KGU9ZS5zcGxpdCgiXG4iKSxlLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi5sZW5ndGgtYS5sZW5ndGh9KSxlPWVbMF0ubGVuZ3RoKToKZT1lLmxlbmd0aDtlPmMmJihjPWUpO2lmKDQwPGMpcmV0dXJuIDUyfWMqPTEuMztyZXR1cm4gNjxjP2M6Nn1mdW5jdGlvbiBCKGEpe3Y9PT11JiYodj0tMT09PXouc2VyaWFsaXplVG9TdHJpbmcoZy5wYXJzZVhNTCh0WyJ4bC93b3Jrc2hlZXRzL3NoZWV0MS54bWwiXSkpLmluZGV4T2YoInhtbG5zOnIiKSk7Zy5lYWNoKGEsZnVuY3Rpb24oYixjKXtpZihnLmlzUGxhaW5PYmplY3QoYykpQihjKTtlbHNle2lmKHYpe3ZhciBkPWMuY2hpbGROb2Rlc1swXSxmLGU9W107Zm9yKGY9ZC5hdHRyaWJ1dGVzLmxlbmd0aC0xOzA8PWY7Zi0tKXt2YXIgaD1kLmF0dHJpYnV0ZXNbZl0ubm9kZU5hbWU7dmFyIGs9ZC5hdHRyaWJ1dGVzW2ZdLm5vZGVWYWx1ZTstMSE9PWguaW5kZXhPZigiOiIpJiYoZS5wdXNoKHtuYW1lOmgsdmFsdWU6a30pLGQucmVtb3ZlQXR0cmlidXRlKGgpKX1mPTA7Zm9yKGg9ZS5sZW5ndGg7ZjxoO2YrKylrPWMuY3JlYXRlQXR0cmlidXRlKGVbZl0ubmFtZS5yZXBsYWNlKCI6IiwKIl9kdF9iX25hbWVzcGFjZV90b2tlbl8iKSksay52YWx1ZT1lW2ZdLnZhbHVlLGQuc2V0QXR0cmlidXRlTm9kZShrKX1jPXouc2VyaWFsaXplVG9TdHJpbmcoYyk7diYmKC0xPT09Yy5pbmRleE9mKCI8P3htbCIpJiYoYz0nPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PicrYyksYz1jLnJlcGxhY2UoL19kdF9iX25hbWVzcGFjZV90b2tlbl8vZywiOiIpKTtjPWMucmVwbGFjZSgvPChbXjw+XSo/KSB4bWxucz0iIihbXjw+XSo/KT4vZywiPCQxICQyPiIpO2FbYl09Y319KX12YXIgbD1nLmZuLmRhdGFUYWJsZSxoPXt2ZXJzaW9uOiIxLjAuNC1UYWJsZVRvb2xzMiIsY2xpZW50czp7fSxtb3ZpZVBhdGg6IiIsbmV4dElkOjEsJDpmdW5jdGlvbihhKXsic3RyaW5nIj09dHlwZW9mIGEmJihhPW0uZ2V0RWxlbWVudEJ5SWQoYSkpO2EuYWRkQ2xhc3N8fChhLmhpZGU9ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUifSxhLnNob3c9CmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PSIifSxhLmFkZENsYXNzPWZ1bmN0aW9uKGEpe3RoaXMucmVtb3ZlQ2xhc3MoYSk7dGhpcy5jbGFzc05hbWUrPSIgIithfSxhLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKGEpe3RoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lLnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxzKiIrYSsiXFxzKiIpLCIgIikucmVwbGFjZSgvXlxzKy8sIiIpLnJlcGxhY2UoL1xzKyQvLCIiKX0sYS5oYXNDbGFzcz1mdW5jdGlvbihhKXtyZXR1cm4hIXRoaXMuY2xhc3NOYW1lLm1hdGNoKG5ldyBSZWdFeHAoIlxccyoiK2ErIlxccyoiKSl9KTtyZXR1cm4gYX0sc2V0TW92aWVQYXRoOmZ1bmN0aW9uKGEpe3RoaXMubW92aWVQYXRoPWF9LGRpc3BhdGNoOmZ1bmN0aW9uKGEsYixjKXsoYT10aGlzLmNsaWVudHNbYV0pJiZhLnJlY2VpdmVFdmVudChiLGMpfSxsb2c6ZnVuY3Rpb24oYSl7Y29uc29sZS5sb2coIkZsYXNoOiAiK2EpfSxyZWdpc3RlcjpmdW5jdGlvbihhLApiKXt0aGlzLmNsaWVudHNbYV09Yn0sZ2V0RE9NT2JqZWN0UG9zaXRpb246ZnVuY3Rpb24oYSl7dmFyIGI9e2xlZnQ6MCx0b3A6MCx3aWR0aDphLndpZHRoP2Eud2lkdGg6YS5vZmZzZXRXaWR0aCxoZWlnaHQ6YS5oZWlnaHQ/YS5oZWlnaHQ6YS5vZmZzZXRIZWlnaHR9OyIiIT09YS5zdHlsZS53aWR0aCYmKGIud2lkdGg9YS5zdHlsZS53aWR0aC5yZXBsYWNlKCJweCIsIiIpKTsiIiE9PWEuc3R5bGUuaGVpZ2h0JiYoYi5oZWlnaHQ9YS5zdHlsZS5oZWlnaHQucmVwbGFjZSgicHgiLCIiKSk7Zm9yKDthOyliLmxlZnQrPWEub2Zmc2V0TGVmdCxiLnRvcCs9YS5vZmZzZXRUb3AsYT1hLm9mZnNldFBhcmVudDtyZXR1cm4gYn0sQ2xpZW50OmZ1bmN0aW9uKGEpe3RoaXMuaGFuZGxlcnM9e307dGhpcy5pZD1oLm5leHRJZCsrO3RoaXMubW92aWVJZD0iWmVyb0NsaXBib2FyZF9UYWJsZVRvb2xzTW92aWVfIit0aGlzLmlkO2gucmVnaXN0ZXIodGhpcy5pZCx0aGlzKTthJiZ0aGlzLmdsdWUoYSl9fTsKaC5DbGllbnQucHJvdG90eXBlPXtpZDowLHJlYWR5OiExLG1vdmllOm51bGwsY2xpcFRleHQ6IiIsZmlsZU5hbWU6IiIsYWN0aW9uOiJjb3B5IixoYW5kQ3Vyc29yRW5hYmxlZDohMCxjc3NFZmZlY3RzOiEwLGhhbmRsZXJzOm51bGwsc2l6ZWQ6ITEsc2hlZXROYW1lOiIiLGdsdWU6ZnVuY3Rpb24oYSxiKXt0aGlzLmRvbUVsZW1lbnQ9aC4kKGEpO2E9OTk7dGhpcy5kb21FbGVtZW50LnN0eWxlLnpJbmRleCYmKGE9cGFyc2VJbnQodGhpcy5kb21FbGVtZW50LnN0eWxlLnpJbmRleCwxMCkrMSk7dmFyIGM9aC5nZXRET01PYmplY3RQb3NpdGlvbih0aGlzLmRvbUVsZW1lbnQpO3RoaXMuZGl2PW0uY3JlYXRlRWxlbWVudCgiZGl2Iik7dmFyIGQ9dGhpcy5kaXYuc3R5bGU7ZC5wb3NpdGlvbj0iYWJzb2x1dGUiO2QubGVmdD0iMHB4IjtkLnRvcD0iMHB4IjtkLndpZHRoPWMud2lkdGgrInB4IjtkLmhlaWdodD1jLmhlaWdodCsicHgiO2QuekluZGV4PWE7InVuZGVmaW5lZCIhPXR5cGVvZiBiJiYKIiIhPT1iJiYodGhpcy5kaXYudGl0bGU9Yik7MCE9PWMud2lkdGgmJjAhPT1jLmhlaWdodCYmKHRoaXMuc2l6ZWQ9ITApO3RoaXMuZG9tRWxlbWVudCYmKHRoaXMuZG9tRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmRpdiksdGhpcy5kaXYuaW5uZXJIVE1MPXRoaXMuZ2V0SFRNTChjLndpZHRoLGMuaGVpZ2h0KS5yZXBsYWNlKC8mL2csIiZhbXA7IikpfSxwb3NpdGlvbkVsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgYT1oLmdldERPTU9iamVjdFBvc2l0aW9uKHRoaXMuZG9tRWxlbWVudCksYj10aGlzLmRpdi5zdHlsZTtiLnBvc2l0aW9uPSJhYnNvbHV0ZSI7Yi53aWR0aD1hLndpZHRoKyJweCI7Yi5oZWlnaHQ9YS5oZWlnaHQrInB4IjswIT09YS53aWR0aCYmMCE9PWEuaGVpZ2h0JiYodGhpcy5zaXplZD0hMCxiPXRoaXMuZGl2LmNoaWxkTm9kZXNbMF0sYi53aWR0aD1hLndpZHRoLGIuaGVpZ2h0PWEuaGVpZ2h0KX0sZ2V0SFRNTDpmdW5jdGlvbihhLGIpe3ZhciBjPSIiLGQ9ImlkPSIrdGhpcy5pZCsKIiZ3aWR0aD0iK2ErIiZoZWlnaHQ9IitiO2lmKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL01TSUUvKSl7dmFyIGY9bG9jYXRpb24uaHJlZi5tYXRjaCgvXmh0dHBzL2kpPyJodHRwczovLyI6Imh0dHA6Ly8iO2MrPSc8b2JqZWN0IGNsYXNzaWQ9ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIgY29kZWJhc2U9IicrZisnZG93bmxvYWQubWFjcm9tZWRpYS5jb20vcHViL3Nob2Nrd2F2ZS9jYWJzL2ZsYXNoL3N3Zmxhc2guY2FiI3ZlcnNpb249MTAsMCwwLDAiIHdpZHRoPSInK2ErJyIgaGVpZ2h0PSInK2IrJyIgaWQ9IicrdGhpcy5tb3ZpZUlkKyciIGFsaWduPSJtaWRkbGUiPjxwYXJhbSBuYW1lPSJhbGxvd1NjcmlwdEFjY2VzcyIgdmFsdWU9ImFsd2F5cyIgLz48cGFyYW0gbmFtZT0iYWxsb3dGdWxsU2NyZWVuIiB2YWx1ZT0iZmFsc2UiIC8+PHBhcmFtIG5hbWU9Im1vdmllIiB2YWx1ZT0iJytoLm1vdmllUGF0aCsnIiAvPjxwYXJhbSBuYW1lPSJsb29wIiB2YWx1ZT0iZmFsc2UiIC8+PHBhcmFtIG5hbWU9Im1lbnUiIHZhbHVlPSJmYWxzZSIgLz48cGFyYW0gbmFtZT0icXVhbGl0eSIgdmFsdWU9ImJlc3QiIC8+PHBhcmFtIG5hbWU9ImJnY29sb3IiIHZhbHVlPSIjZmZmZmZmIiAvPjxwYXJhbSBuYW1lPSJmbGFzaHZhcnMiIHZhbHVlPSInKwpkKyciLz48cGFyYW0gbmFtZT0id21vZGUiIHZhbHVlPSJ0cmFuc3BhcmVudCIvPjwvb2JqZWN0Pid9ZWxzZSBjKz0nPGVtYmVkIGlkPSInK3RoaXMubW92aWVJZCsnIiBzcmM9IicraC5tb3ZpZVBhdGgrJyIgbG9vcD0iZmFsc2UiIG1lbnU9ImZhbHNlIiBxdWFsaXR5PSJiZXN0IiBiZ2NvbG9yPSIjZmZmZmZmIiB3aWR0aD0iJythKyciIGhlaWdodD0iJytiKyciIG5hbWU9IicrdGhpcy5tb3ZpZUlkKyciIGFsaWduPSJtaWRkbGUiIGFsbG93U2NyaXB0QWNjZXNzPSJhbHdheXMiIGFsbG93RnVsbFNjcmVlbj0iZmFsc2UiIHR5cGU9ImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIiBwbHVnaW5zcGFnZT0iaHR0cDovL3d3dy5tYWNyb21lZGlhLmNvbS9nby9nZXRmbGFzaHBsYXllciIgZmxhc2h2YXJzPSInK2QrJyIgd21vZGU9InRyYW5zcGFyZW50IiAvPic7cmV0dXJuIGN9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLmRpdiYmKHRoaXMuZGl2LnN0eWxlLmxlZnQ9Ii0yMDAwcHgiKX0sCnNob3c6ZnVuY3Rpb24oKXt0aGlzLnJlcG9zaXRpb24oKX0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBhPXRoaXM7dGhpcy5kb21FbGVtZW50JiZ0aGlzLmRpdiYmKGcodGhpcy5kaXYpLnJlbW92ZSgpLHRoaXMuZGl2PXRoaXMuZG9tRWxlbWVudD1udWxsLGcuZWFjaChoLmNsaWVudHMsZnVuY3Rpb24oYixjKXtjPT09YSYmZGVsZXRlIGguY2xpZW50c1tiXX0pKX0scmVwb3NpdGlvbjpmdW5jdGlvbihhKXthJiYoKHRoaXMuZG9tRWxlbWVudD1oLiQoYSkpfHx0aGlzLmhpZGUoKSk7aWYodGhpcy5kb21FbGVtZW50JiZ0aGlzLmRpdil7YT1oLmdldERPTU9iamVjdFBvc2l0aW9uKHRoaXMuZG9tRWxlbWVudCk7dmFyIGI9dGhpcy5kaXYuc3R5bGU7Yi5sZWZ0PSIiK2EubGVmdCsicHgiO2IudG9wPSIiK2EudG9wKyJweCJ9fSxjbGVhclRleHQ6ZnVuY3Rpb24oKXt0aGlzLmNsaXBUZXh0PSIiO3RoaXMucmVhZHkmJnRoaXMubW92aWUuY2xlYXJUZXh0KCl9LGFwcGVuZFRleHQ6ZnVuY3Rpb24oYSl7dGhpcy5jbGlwVGV4dCs9CmE7dGhpcy5yZWFkeSYmdGhpcy5tb3ZpZS5hcHBlbmRUZXh0KGEpfSxzZXRUZXh0OmZ1bmN0aW9uKGEpe3RoaXMuY2xpcFRleHQ9YTt0aGlzLnJlYWR5JiZ0aGlzLm1vdmllLnNldFRleHQoYSl9LHNldEZpbGVOYW1lOmZ1bmN0aW9uKGEpe3RoaXMuZmlsZU5hbWU9YTt0aGlzLnJlYWR5JiZ0aGlzLm1vdmllLnNldEZpbGVOYW1lKGEpfSxzZXRTaGVldERhdGE6ZnVuY3Rpb24oYSl7dGhpcy5yZWFkeSYmdGhpcy5tb3ZpZS5zZXRTaGVldERhdGEoSlNPTi5zdHJpbmdpZnkoYSkpfSxzZXRBY3Rpb246ZnVuY3Rpb24oYSl7dGhpcy5hY3Rpb249YTt0aGlzLnJlYWR5JiZ0aGlzLm1vdmllLnNldEFjdGlvbihhKX0sYWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIpe2E9YS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXm9uLywiIik7dGhpcy5oYW5kbGVyc1thXXx8KHRoaXMuaGFuZGxlcnNbYV09W10pO3RoaXMuaGFuZGxlcnNbYV0ucHVzaChiKX0sc2V0SGFuZEN1cnNvcjpmdW5jdGlvbihhKXt0aGlzLmhhbmRDdXJzb3JFbmFibGVkPQphO3RoaXMucmVhZHkmJnRoaXMubW92aWUuc2V0SGFuZEN1cnNvcihhKX0sc2V0Q1NTRWZmZWN0czpmdW5jdGlvbihhKXt0aGlzLmNzc0VmZmVjdHM9ISFhfSxyZWNlaXZlRXZlbnQ6ZnVuY3Rpb24oYSxiKXthPWEudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL15vbi8sIiIpO3N3aXRjaChhKXtjYXNlICJsb2FkIjp0aGlzLm1vdmllPW0uZ2V0RWxlbWVudEJ5SWQodGhpcy5tb3ZpZUlkKTtpZighdGhpcy5tb3ZpZSl7dmFyIGM9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5yZWNlaXZlRXZlbnQoImxvYWQiLG51bGwpfSwxKTtyZXR1cm59aWYoIXRoaXMucmVhZHkmJm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0ZpcmVmb3gvKSYmbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvV2luZG93cy8pKXtjPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe2MucmVjZWl2ZUV2ZW50KCJsb2FkIixudWxsKX0sMTAwKTt0aGlzLnJlYWR5PSEwO3JldHVybn10aGlzLnJlYWR5PQohMDt0aGlzLm1vdmllLmNsZWFyVGV4dCgpO3RoaXMubW92aWUuYXBwZW5kVGV4dCh0aGlzLmNsaXBUZXh0KTt0aGlzLm1vdmllLnNldEZpbGVOYW1lKHRoaXMuZmlsZU5hbWUpO3RoaXMubW92aWUuc2V0QWN0aW9uKHRoaXMuYWN0aW9uKTt0aGlzLm1vdmllLnNldEhhbmRDdXJzb3IodGhpcy5oYW5kQ3Vyc29yRW5hYmxlZCk7YnJlYWs7Y2FzZSAibW91c2VvdmVyIjp0aGlzLmRvbUVsZW1lbnQmJnRoaXMuY3NzRWZmZWN0cyYmdGhpcy5yZWNvdmVyQWN0aXZlJiZ0aGlzLmRvbUVsZW1lbnQuYWRkQ2xhc3MoImFjdGl2ZSIpO2JyZWFrO2Nhc2UgIm1vdXNlb3V0Ijp0aGlzLmRvbUVsZW1lbnQmJnRoaXMuY3NzRWZmZWN0cyYmKHRoaXMucmVjb3ZlckFjdGl2ZT0hMSx0aGlzLmRvbUVsZW1lbnQuaGFzQ2xhc3MoImFjdGl2ZSIpJiYodGhpcy5kb21FbGVtZW50LnJlbW92ZUNsYXNzKCJhY3RpdmUiKSx0aGlzLnJlY292ZXJBY3RpdmU9ITApKTticmVhaztjYXNlICJtb3VzZWRvd24iOnRoaXMuZG9tRWxlbWVudCYmCnRoaXMuY3NzRWZmZWN0cyYmdGhpcy5kb21FbGVtZW50LmFkZENsYXNzKCJhY3RpdmUiKTticmVhaztjYXNlICJtb3VzZXVwIjp0aGlzLmRvbUVsZW1lbnQmJnRoaXMuY3NzRWZmZWN0cyYmKHRoaXMuZG9tRWxlbWVudC5yZW1vdmVDbGFzcygiYWN0aXZlIiksdGhpcy5yZWNvdmVyQWN0aXZlPSExKX1pZih0aGlzLmhhbmRsZXJzW2FdKWZvcih2YXIgZD0wLGY9dGhpcy5oYW5kbGVyc1thXS5sZW5ndGg7ZDxmO2QrKyl7dmFyIGU9dGhpcy5oYW5kbGVyc1thXVtkXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSllKHRoaXMsYik7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGUmJjI9PWUubGVuZ3RoKWVbMF1bZVsxXV0odGhpcyxiKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZSluW2VdKHRoaXMsYil9fX07aC5oYXNGbGFzaD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoIlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoIiksITB9Y2F0Y2goYSl7aWYobmF2aWdhdG9yLm1pbWVUeXBlcyYmCm5hdmlnYXRvci5taW1lVHlwZXNbImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIl0hPT11JiZuYXZpZ2F0b3IubWltZVR5cGVzWyJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCJdLmVuYWJsZWRQbHVnaW4pcmV0dXJuITB9cmV0dXJuITF9O24uWmVyb0NsaXBib2FyZF9UYWJsZVRvb2xzPWg7dmFyIEM9ZnVuY3Rpb24oYSxiKXtiLmF0dHIoImlkIik7Yi5wYXJlbnRzKCJodG1sIikubGVuZ3RoP2EuZ2x1ZShiWzBdLCIiKTpzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7QyhhLGIpfSw1MDApfSxIPWZ1bmN0aW9uKGEpe3ZhciBiPSJTaGVldDEiO2Euc2hlZXROYW1lJiYoYj1hLnNoZWV0TmFtZS5yZXBsYWNlKC9bXFtcXVwqXC9cXFw/Ol0vZywiIikpO3JldHVybiBifSx4PWZ1bmN0aW9uKGEsYil7Yj1iLm1hdGNoKC9bXHNcU117MSw4MTkyfS9nKXx8W107YS5jbGVhclRleHQoKTtmb3IodmFyIGM9MCxkPWIubGVuZ3RoO2M8ZDtjKyspYS5hcHBlbmRUZXh0KGJbY10pfSxEPWZ1bmN0aW9uKGEpe3JldHVybiBhLm5ld2xpbmU/CmEubmV3bGluZTpuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9XaW5kb3dzLyk/IlxyXG4iOiJcbiJ9LEU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1EKGIpO2E9YS5idXR0b25zLmV4cG9ydERhdGEoYi5leHBvcnRPcHRpb25zKTt2YXIgZD1iLmZpZWxkQm91bmRhcnksZj1iLmZpZWxkU2VwYXJhdG9yLGU9bmV3IFJlZ0V4cChkLCJnIiksZz1iLmVzY2FwZUNoYXIhPT11P2IuZXNjYXBlQ2hhcjoiXFwiLGg9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGM9MCxoPWEubGVuZ3RoO2M8aDtjKyspMDxjJiYoYis9ZiksYis9ZD9kKygiIithW2NdKS5yZXBsYWNlKGUsZytkKStkOmFbY107cmV0dXJuIGJ9LG49Yi5oZWFkZXI/aChhLmhlYWRlcikrYzoiIjtiPWIuZm9vdGVyJiZhLmZvb3Rlcj9jK2goYS5mb290ZXIpOiIiO2Zvcih2YXIgbT1bXSxwPTAscj1hLmJvZHkubGVuZ3RoO3A8cjtwKyspbS5wdXNoKGgoYS5ib2R5W3BdKSk7cmV0dXJue3N0cjpuK20uam9pbihjKStiLHJvd3M6bS5sZW5ndGh9fSwKeT17YXZhaWxhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGguaGFzRmxhc2goKX0saW5pdDpmdW5jdGlvbihhLGIsYyl7aC5tb3ZpZVBhdGg9bC5CdXR0b25zLnN3ZlBhdGg7dmFyIGQ9bmV3IGguQ2xpZW50O2Quc2V0SGFuZEN1cnNvcighMCk7ZC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZURvd24iLGZ1bmN0aW9uKGQpe2MuX2Zyb21GbGFzaD0hMDthLmJ1dHRvbihiWzBdKS50cmlnZ2VyKCk7Yy5fZnJvbUZsYXNoPSExfSk7QyhkLGIpO2MuX2ZsYXNoPWR9LGRlc3Ryb3k6ZnVuY3Rpb24oYSxiLGMpe2MuX2ZsYXNoLmRlc3Ryb3koKX0sZmllbGRTZXBhcmF0b3I6IiwiLGZpZWxkQm91bmRhcnk6JyInLGV4cG9ydE9wdGlvbnM6e30sdGl0bGU6IioiLG1lc3NhZ2VUb3A6IioiLG1lc3NhZ2VCb3R0b206IioiLGZpbGVuYW1lOiIqIixleHRlbnNpb246Ii5jc3YiLGhlYWRlcjohMCxmb290ZXI6ITF9LHo9IiI7ej0idW5kZWZpbmVkIj09PXR5cGVvZiBuLlhNTFNlcmlhbGl6ZXI/bmV3IGZ1bmN0aW9uKCl7dGhpcy5zZXJpYWxpemVUb1N0cmluZz0KZnVuY3Rpb24oYSl7cmV0dXJuIGEueG1sfX06bmV3IFhNTFNlcmlhbGl6ZXI7dmFyIHYsdD17Il9yZWxzLy5yZWxzIjonPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PjxSZWxhdGlvbnNoaXBzIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMiPjxSZWxhdGlvbnNoaXAgSWQ9InJJZDEiIFR5cGU9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiIFRhcmdldD0ieGwvd29ya2Jvb2sueG1sIi8+PC9SZWxhdGlvbnNoaXBzPicsInhsL19yZWxzL3dvcmtib29rLnhtbC5yZWxzIjonPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PjxSZWxhdGlvbnNoaXBzIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMiPjxSZWxhdGlvbnNoaXAgSWQ9InJJZDEiIFR5cGU9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvd29ya3NoZWV0IiBUYXJnZXQ9IndvcmtzaGVldHMvc2hlZXQxLnhtbCIvPjxSZWxhdGlvbnNoaXAgSWQ9InJJZDIiIFR5cGU9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvc3R5bGVzIiBUYXJnZXQ9InN0eWxlcy54bWwiLz48L1JlbGF0aW9uc2hpcHM+JywKIltDb250ZW50X1R5cGVzXS54bWwiOic8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+PFR5cGVzIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L2NvbnRlbnQtdHlwZXMiPjxEZWZhdWx0IEV4dGVuc2lvbj0ieG1sIiBDb250ZW50VHlwZT0iYXBwbGljYXRpb24veG1sIiAvPjxEZWZhdWx0IEV4dGVuc2lvbj0icmVscyIgQ29udGVudFR5cGU9ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLnJlbGF0aW9uc2hpcHMreG1sIiAvPjxEZWZhdWx0IEV4dGVuc2lvbj0ianBlZyIgQ29udGVudFR5cGU9ImltYWdlL2pwZWciIC8+PE92ZXJyaWRlIFBhcnROYW1lPSIveGwvd29ya2Jvb2sueG1sIiBDb250ZW50VHlwZT0iYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQubWFpbit4bWwiIC8+PE92ZXJyaWRlIFBhcnROYW1lPSIveGwvd29ya3NoZWV0cy9zaGVldDEueG1sIiBDb250ZW50VHlwZT0iYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwud29ya3NoZWV0K3htbCIgLz48T3ZlcnJpZGUgUGFydE5hbWU9Ii94bC9zdHlsZXMueG1sIiBDb250ZW50VHlwZT0iYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc3R5bGVzK3htbCIgLz48L1R5cGVzPicsCiJ4bC93b3JrYm9vay54bWwiOic8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+PHdvcmtib29rIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW4iIHhtbG5zOnI9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMiPjxmaWxlVmVyc2lvbiBhcHBOYW1lPSJ4bCIgbGFzdEVkaXRlZD0iNSIgbG93ZXN0RWRpdGVkPSI1IiBydXBCdWlsZD0iMjQ4MTYiLz48d29ya2Jvb2tQciBzaG93SW5rQW5ub3RhdGlvbj0iMCIgYXV0b0NvbXByZXNzUGljdHVyZXM9IjAiLz48Ym9va1ZpZXdzPjx3b3JrYm9va1ZpZXcgeFdpbmRvdz0iMCIgeVdpbmRvdz0iMCIgd2luZG93V2lkdGg9IjI1NjAwIiB3aW5kb3dIZWlnaHQ9IjE5MDIwIiB0YWJSYXRpbz0iNTAwIi8+PC9ib29rVmlld3M+PHNoZWV0cz48c2hlZXQgbmFtZT0iIiBzaGVldElkPSIxIiByOmlkPSJySWQxIi8+PC9zaGVldHM+PC93b3JrYm9vaz4nLAoieGwvd29ya3NoZWV0cy9zaGVldDEueG1sIjonPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pjx3b3Jrc2hlZXQgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIgeG1sbnM6cj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyIgeG1sbnM6bWM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2IiBtYzpJZ25vcmFibGU9IngxNGFjIiB4bWxuczp4MTRhYz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDA5LzkvYWMiPjxzaGVldERhdGEvPjxtZXJnZUNlbGxzIGNvdW50PSIwIi8+PC93b3Jrc2hlZXQ+JywieGwvc3R5bGVzLnhtbCI6Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PHN0eWxlU2hlZXQgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIgeG1sbnM6bWM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2IiBtYzpJZ25vcmFibGU9IngxNGFjIiB4bWxuczp4MTRhYz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDA5LzkvYWMiPjxudW1GbXRzIGNvdW50PSI2Ij48bnVtRm10IG51bUZtdElkPSIxNjQiIGZvcm1hdENvZGU9IiMsIyMwLjAwXy0gWyQkLTQ1Q10iLz48bnVtRm10IG51bUZtdElkPSIxNjUiIGZvcm1hdENvZGU9IiZxdW90O8KjJnF1b3Q7IywjIzAuMDAiLz48bnVtRm10IG51bUZtdElkPSIxNjYiIGZvcm1hdENvZGU9Ilsk4oKsLTJdICMsIyMwLjAwIi8+PG51bUZtdCBudW1GbXRJZD0iMTY3IiBmb3JtYXRDb2RlPSIwLjAlIi8+PG51bUZtdCBudW1GbXRJZD0iMTY4IiBmb3JtYXRDb2RlPSIjLCMjMDsoIywjIzApIi8+PG51bUZtdCBudW1GbXRJZD0iMTY5IiBmb3JtYXRDb2RlPSIjLCMjMC4wMDsoIywjIzAuMDApIi8+PC9udW1GbXRzPjxmb250cyBjb3VudD0iNSIgeDE0YWM6a25vd25Gb250cz0iMSI+PGZvbnQ+PHN6IHZhbD0iMTEiIC8+PG5hbWUgdmFsPSJDYWxpYnJpIiAvPjwvZm9udD48Zm9udD48c3ogdmFsPSIxMSIgLz48bmFtZSB2YWw9IkNhbGlicmkiIC8+PGNvbG9yIHJnYj0iRkZGRkZGRkYiIC8+PC9mb250Pjxmb250PjxzeiB2YWw9IjExIiAvPjxuYW1lIHZhbD0iQ2FsaWJyaSIgLz48YiAvPjwvZm9udD48Zm9udD48c3ogdmFsPSIxMSIgLz48bmFtZSB2YWw9IkNhbGlicmkiIC8+PGkgLz48L2ZvbnQ+PGZvbnQ+PHN6IHZhbD0iMTEiIC8+PG5hbWUgdmFsPSJDYWxpYnJpIiAvPjx1IC8+PC9mb250PjwvZm9udHM+PGZpbGxzIGNvdW50PSI2Ij48ZmlsbD48cGF0dGVybkZpbGwgcGF0dGVyblR5cGU9Im5vbmUiIC8+PC9maWxsPjxmaWxsPjxwYXR0ZXJuRmlsbCBwYXR0ZXJuVHlwZT0ibm9uZSIgLz48L2ZpbGw+PGZpbGw+PHBhdHRlcm5GaWxsIHBhdHRlcm5UeXBlPSJzb2xpZCI+PGZnQ29sb3IgcmdiPSJGRkQ5RDlEOSIgLz48YmdDb2xvciBpbmRleGVkPSI2NCIgLz48L3BhdHRlcm5GaWxsPjwvZmlsbD48ZmlsbD48cGF0dGVybkZpbGwgcGF0dGVyblR5cGU9InNvbGlkIj48ZmdDb2xvciByZ2I9IkZGRDk5Nzk1IiAvPjxiZ0NvbG9yIGluZGV4ZWQ9IjY0IiAvPjwvcGF0dGVybkZpbGw+PC9maWxsPjxmaWxsPjxwYXR0ZXJuRmlsbCBwYXR0ZXJuVHlwZT0ic29saWQiPjxmZ0NvbG9yIHJnYj0iZmZjNmVmY2UiIC8+PGJnQ29sb3IgaW5kZXhlZD0iNjQiIC8+PC9wYXR0ZXJuRmlsbD48L2ZpbGw+PGZpbGw+PHBhdHRlcm5GaWxsIHBhdHRlcm5UeXBlPSJzb2xpZCI+PGZnQ29sb3IgcmdiPSJmZmM2Y2ZlZiIgLz48YmdDb2xvciBpbmRleGVkPSI2NCIgLz48L3BhdHRlcm5GaWxsPjwvZmlsbD48L2ZpbGxzPjxib3JkZXJzIGNvdW50PSIyIj48Ym9yZGVyPjxsZWZ0IC8+PHJpZ2h0IC8+PHRvcCAvPjxib3R0b20gLz48ZGlhZ29uYWwgLz48L2JvcmRlcj48Ym9yZGVyIGRpYWdvbmFsVXA9ImZhbHNlIiBkaWFnb25hbERvd249ImZhbHNlIj48bGVmdCBzdHlsZT0idGhpbiI+PGNvbG9yIGF1dG89IjEiIC8+PC9sZWZ0PjxyaWdodCBzdHlsZT0idGhpbiI+PGNvbG9yIGF1dG89IjEiIC8+PC9yaWdodD48dG9wIHN0eWxlPSJ0aGluIj48Y29sb3IgYXV0bz0iMSIgLz48L3RvcD48Ym90dG9tIHN0eWxlPSJ0aGluIj48Y29sb3IgYXV0bz0iMSIgLz48L2JvdHRvbT48ZGlhZ29uYWwgLz48L2JvcmRlcj48L2JvcmRlcnM+PGNlbGxTdHlsZVhmcyBjb3VudD0iMSI+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIC8+PC9jZWxsU3R5bGVYZnM+PGNlbGxYZnMgY291bnQ9IjYxIj48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjEiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIyIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMyIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjQiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjIiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMSIgZmlsbElkPSIyIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjIiIGZpbGxJZD0iMiIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIzIiBmaWxsSWQ9IjIiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iNCIgZmlsbElkPSIyIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMyIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIxIiBmaWxsSWQ9IjMiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMiIgZmlsbElkPSIzIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjMiIGZpbGxJZD0iMyIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSI0IiBmaWxsSWQ9IjMiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSI0IiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjEiIGZpbGxJZD0iNCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIyIiBmaWxsSWQ9IjQiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMyIgZmlsbElkPSI0IiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjQiIGZpbGxJZD0iNCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjUiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMSIgZmlsbElkPSI1IiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjIiIGZpbGxJZD0iNSIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIzIiBmaWxsSWQ9IjUiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iNCIgZmlsbElkPSI1IiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIxIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIxIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMiIgZmlsbElkPSIwIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjMiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSI0IiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIxIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIyIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjEiIGZpbGxJZD0iMiIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIyIiBmaWxsSWQ9IjIiIGJvcmRlcklkPSIxIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMyIgZmlsbElkPSIyIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjQiIGZpbGxJZD0iMiIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjMiIGJvcmRlcklkPSIxIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMSIgZmlsbElkPSIzIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjIiIGZpbGxJZD0iMyIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIzIiBmaWxsSWQ9IjMiIGJvcmRlcklkPSIxIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iNCIgZmlsbElkPSIzIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iNCIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIxIiBmaWxsSWQ9IjQiIGJvcmRlcklkPSIxIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMiIgZmlsbElkPSI0IiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjMiIGZpbGxJZD0iNCIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSI0IiBmaWxsSWQ9IjQiIGJvcmRlcklkPSIxIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSI1IiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjEiIGZpbGxJZD0iNSIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIyIiBmaWxsSWQ9IjUiIGJvcmRlcklkPSIxIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMyIgZmlsbElkPSI1IiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjQiIGZpbGxJZD0iNSIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiIHhmSWQ9IjAiIGFwcGx5QWxpZ25tZW50PSIxIj48YWxpZ25tZW50IGhvcml6b250YWw9ImxlZnQiLz48L3hmPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiIHhmSWQ9IjAiIGFwcGx5QWxpZ25tZW50PSIxIj48YWxpZ25tZW50IGhvcml6b250YWw9ImNlbnRlciIvPjwveGY+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlBbGlnbm1lbnQ9IjEiPjxhbGlnbm1lbnQgaG9yaXpvbnRhbD0icmlnaHQiLz48L3hmPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiIHhmSWQ9IjAiIGFwcGx5QWxpZ25tZW50PSIxIj48YWxpZ25tZW50IGhvcml6b250YWw9ImZpbGwiLz48L3hmPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiIHhmSWQ9IjAiIGFwcGx5QWxpZ25tZW50PSIxIj48YWxpZ25tZW50IHRleHRSb3RhdGlvbj0iOTAiLz48L3hmPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiIHhmSWQ9IjAiIGFwcGx5QWxpZ25tZW50PSIxIj48YWxpZ25tZW50IHdyYXBUZXh0PSIxIi8+PC94Zj48eGYgbnVtRm10SWQ9IjkiICAgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiIHhmSWQ9IjAiIGFwcGx5TnVtYmVyRm9ybWF0PSIxIi8+PHhmIG51bUZtdElkPSIxNjQiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIiB4ZklkPSIwIiBhcHBseU51bWJlckZvcm1hdD0iMSIvPjx4ZiBudW1GbXRJZD0iMTY1IiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlOdW1iZXJGb3JtYXQ9IjEiLz48eGYgbnVtRm10SWQ9IjE2NiIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiIHhmSWQ9IjAiIGFwcGx5TnVtYmVyRm9ybWF0PSIxIi8+PHhmIG51bUZtdElkPSIxNjciIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIiB4ZklkPSIwIiBhcHBseU51bWJlckZvcm1hdD0iMSIvPjx4ZiBudW1GbXRJZD0iMTY4IiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlOdW1iZXJGb3JtYXQ9IjEiLz48eGYgbnVtRm10SWQ9IjE2OSIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiIHhmSWQ9IjAiIGFwcGx5TnVtYmVyRm9ybWF0PSIxIi8+PHhmIG51bUZtdElkPSIzIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlOdW1iZXJGb3JtYXQ9IjEiLz48eGYgbnVtRm10SWQ9IjQiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIiB4ZklkPSIwIiBhcHBseU51bWJlckZvcm1hdD0iMSIvPjwvY2VsbFhmcz48Y2VsbFN0eWxlcyBjb3VudD0iMSI+PGNlbGxTdHlsZSBuYW1lPSJOb3JtYWwiIHhmSWQ9IjAiIGJ1aWx0aW5JZD0iMCIgLz48L2NlbGxTdHlsZXM+PGR4ZnMgY291bnQ9IjAiIC8+PHRhYmxlU3R5bGVzIGNvdW50PSIwIiBkZWZhdWx0VGFibGVTdHlsZT0iVGFibGVTdHlsZU1lZGl1bTkiIGRlZmF1bHRQaXZvdFN0eWxlPSJQaXZvdFN0eWxlTWVkaXVtNCIgLz48L3N0eWxlU2hlZXQ+J30sCkY9W3ttYXRjaDovXlwtP1xkK1wuXGQlJC8sc3R5bGU6NjAsZm10OmZ1bmN0aW9uKGEpe3JldHVybiBhLzEwMH19LHttYXRjaDovXlwtP1xkK1wuP1xkKiUkLyxzdHlsZTo1NixmbXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEvMTAwfX0se21hdGNoOi9eXC0/XCRbXGQsXSsuP1xkKiQvLHN0eWxlOjU3fSx7bWF0Y2g6L15cLT/Co1tcZCxdKy4/XGQqJC8sc3R5bGU6NTh9LHttYXRjaDovXlwtP+KCrFtcZCxdKy4/XGQqJC8sc3R5bGU6NTl9LHttYXRjaDovXlwoW1xkLF0rXCkkLyxzdHlsZTo2MSxmbXQ6ZnVuY3Rpb24oYSl7cmV0dXJuLTEqYS5yZXBsYWNlKC9bXChcKV0vZywiIil9fSx7bWF0Y2g6L15cKFtcZCxdK1wuXGR7Mn1cKSQvLHN0eWxlOjYyLGZtdDpmdW5jdGlvbihhKXtyZXR1cm4tMSphLnJlcGxhY2UoL1tcKFwpXS9nLCIiKX19LHttYXRjaDovXltcZCxdKyQvLHN0eWxlOjYzfSx7bWF0Y2g6L15bXGQsXStcLlxkezJ9JC8sc3R5bGU6NjR9XTtsLkJ1dHRvbnMuc3dmUGF0aD0iLy9jZG4uZGF0YXRhYmxlcy5uZXQvYnV0dG9ucy8iKwpsLkJ1dHRvbnMudmVyc2lvbisiL3N3Zi9mbGFzaEV4cG9ydC5zd2YiO2wuQXBpLnJlZ2lzdGVyKCJidXR0b25zLnJlc2l6ZSgpIixmdW5jdGlvbigpe2cuZWFjaChoLmNsaWVudHMsZnVuY3Rpb24oYSxiKXtiLmRvbUVsZW1lbnQhPT11JiZiLmRvbUVsZW1lbnQucGFyZW50Tm9kZSYmYi5wb3NpdGlvbkVsZW1lbnQoKX0pfSk7bC5leHQuYnV0dG9ucy5jb3B5Rmxhc2g9Zy5leHRlbmQoe30seSx7Y2xhc3NOYW1lOiJidXR0b25zLWNvcHkgYnV0dG9ucy1mbGFzaCIsdGV4dDpmdW5jdGlvbihhKXtyZXR1cm4gYS5pMThuKCJidXR0b25zLmNvcHkiLCJDb3B5Iil9LGFjdGlvbjpmdW5jdGlvbihhLGIsYyxkKXtpZihkLl9mcm9tRmxhc2gpe3RoaXMucHJvY2Vzc2luZyghMCk7YT1kLl9mbGFzaDt2YXIgZj1FKGIsZCk7Yz1iLmJ1dHRvbnMuZXhwb3J0SW5mbyhkKTt2YXIgZT1EKGQpO2Y9Zi5zdHI7Yy50aXRsZSYmKGY9Yy50aXRsZStlK2UrZik7Yy5tZXNzYWdlVG9wJiYoZj1jLm1lc3NhZ2VUb3ArCmUrZStmKTtjLm1lc3NhZ2VCb3R0b20mJihmPWYrZStlK2MubWVzc2FnZUJvdHRvbSk7ZC5jdXN0b21pemUmJihmPWQuY3VzdG9taXplKGYsZCxiKSk7YS5zZXRBY3Rpb24oImNvcHkiKTt4KGEsZik7dGhpcy5wcm9jZXNzaW5nKCExKTtiLmJ1dHRvbnMuaW5mbyhiLmkxOG4oImJ1dHRvbnMuY29weVRpdGxlIiwiQ29weSB0byBjbGlwYm9hcmQiKSxiLmkxOG4oImJ1dHRvbnMuY29weVN1Y2Nlc3MiLHtfOiJDb3BpZWQgJWQgcm93cyB0byBjbGlwYm9hcmQiLDE6IkNvcGllZCAxIHJvdyB0byBjbGlwYm9hcmQifSxkYXRhLnJvd3MpLDNFMyl9fSxmaWVsZFNlcGFyYXRvcjoiXHQiLGZpZWxkQm91bmRhcnk6IiJ9KTtsLmV4dC5idXR0b25zLmNzdkZsYXNoPWcuZXh0ZW5kKHt9LHkse2NsYXNzTmFtZToiYnV0dG9ucy1jc3YgYnV0dG9ucy1mbGFzaCIsdGV4dDpmdW5jdGlvbihhKXtyZXR1cm4gYS5pMThuKCJidXR0b25zLmNzdiIsIkNTViIpfSxhY3Rpb246ZnVuY3Rpb24oYSxiLGMsZCl7YT0KZC5fZmxhc2g7dmFyIGY9RShiLGQpO2M9Yi5idXR0b25zLmV4cG9ydEluZm8oZCk7Yj1kLmN1c3RvbWl6ZT9kLmN1c3RvbWl6ZShmLnN0cixkLGIpOmYuc3RyO2Euc2V0QWN0aW9uKCJjc3YiKTthLnNldEZpbGVOYW1lKGMuZmlsZW5hbWUpO3goYSxiKX0sZXNjYXBlQ2hhcjonIid9KTtsLmV4dC5idXR0b25zLmV4Y2VsRmxhc2g9Zy5leHRlbmQoe30seSx7Y2xhc3NOYW1lOiJidXR0b25zLWV4Y2VsIGJ1dHRvbnMtZmxhc2giLHRleHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuaTE4bigiYnV0dG9ucy5leGNlbCIsIkV4Y2VsIil9LGFjdGlvbjpmdW5jdGlvbihhLGIsYyxkKXt0aGlzLnByb2Nlc3NpbmcoITApO2E9ZC5fZmxhc2g7dmFyIGY9MCxlPWcucGFyc2VYTUwodFsieGwvd29ya3NoZWV0cy9zaGVldDEueG1sIl0pLGg9ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2hlZXREYXRhIilbMF07Yz17X3JlbHM6eyIucmVscyI6Zy5wYXJzZVhNTCh0WyJfcmVscy8ucmVscyJdKX0seGw6e19yZWxzOnsid29ya2Jvb2sueG1sLnJlbHMiOmcucGFyc2VYTUwodFsieGwvX3JlbHMvd29ya2Jvb2sueG1sLnJlbHMiXSl9LAoid29ya2Jvb2sueG1sIjpnLnBhcnNlWE1MKHRbInhsL3dvcmtib29rLnhtbCJdKSwic3R5bGVzLnhtbCI6Zy5wYXJzZVhNTCh0WyJ4bC9zdHlsZXMueG1sIl0pLHdvcmtzaGVldHM6eyJzaGVldDEueG1sIjplfX0sIltDb250ZW50X1R5cGVzXS54bWwiOmcucGFyc2VYTUwodFsiW0NvbnRlbnRfVHlwZXNdLnhtbCJdKX07dmFyIGs9Yi5idXR0b25zLmV4cG9ydERhdGEoZC5leHBvcnRPcHRpb25zKSxtLG4scD1mdW5jdGlvbihhKXttPWYrMTtuPXIoZSwicm93Iix7YXR0cjp7cjptfX0pO2Zvcih2YXIgYj0wLGM9YS5sZW5ndGg7YjxjO2IrKyl7dmFyIGw9QShiKSsiIittLGs9bnVsbDtpZihudWxsPT09YVtiXXx8YVtiXT09PXV8fCIiPT09YVtiXSlpZighMD09PWQuY3JlYXRlRW1wdHlDZWxscylhW2JdPSIiO2Vsc2UgY29udGludWU7YVtiXT1nLnRyaW0oYVtiXSk7Zm9yKHZhciBwPTAsdD1GLmxlbmd0aDtwPHQ7cCsrKXt2YXIgcT1GW3BdO2lmKGFbYl0ubWF0Y2gmJiFhW2JdLm1hdGNoKC9eMFxkKy8pJiYKYVtiXS5tYXRjaChxLm1hdGNoKSl7az1hW2JdLnJlcGxhY2UoL1teXGRcLlwtXS9nLCIiKTtxLmZtdCYmKGs9cS5mbXQoaykpO2s9cihlLCJjIix7YXR0cjp7cjpsLHM6cS5zdHlsZX0sY2hpbGRyZW46W3IoZSwidiIse3RleHQ6a30pXX0pO2JyZWFrfX1rfHwoIm51bWJlciI9PT10eXBlb2YgYVtiXXx8YVtiXS5tYXRjaCYmYVtiXS5tYXRjaCgvXi0/XGQrKFwuXGQrKT8kLykmJiFhW2JdLm1hdGNoKC9eMFxkKy8pP2s9cihlLCJjIix7YXR0cjp7dDoibiIscjpsfSxjaGlsZHJlbjpbcihlLCJ2Iix7dGV4dDphW2JdfSldfSk6KHE9YVtiXS5yZXBsYWNlP2FbYl0ucmVwbGFjZSgvW1x4MDAtXHgwOVx4MEJceDBDXHgwRS1ceDFGXHg3Ri1ceDlGXS9nLCIiKTphW2JdLGs9cihlLCJjIix7YXR0cjp7dDoiaW5saW5lU3RyIixyOmx9LGNoaWxkcmVuOntyb3c6cihlLCJpcyIse2NoaWxkcmVuOntyb3c6cihlLCJ0Iix7dGV4dDpxfSl9fSl9fSkpKTtuLmFwcGVuZENoaWxkKGspfWguYXBwZW5kQ2hpbGQobik7CmYrK307Zygic2hlZXRzIHNoZWV0IixjLnhsWyJ3b3JrYm9vay54bWwiXSkuYXR0cigibmFtZSIsSChkKSk7ZC5jdXN0b21pemVEYXRhJiZkLmN1c3RvbWl6ZURhdGEoayk7dmFyIGw9ZnVuY3Rpb24oYSxiKXt2YXIgYz1nKCJtZXJnZUNlbGxzIixlKTtjWzBdLmFwcGVuZENoaWxkKHIoZSwibWVyZ2VDZWxsIix7YXR0cjp7cmVmOiJBIithKyI6IitBKGIpK2F9fSkpO2MuYXR0cigiY291bnQiLGMuYXR0cigiY291bnQiKSsxKTtnKCJyb3c6ZXEoIisoYS0xKSsiKSBjIixlKS5hdHRyKCJzIiwiNTEiKX0scT1iLmJ1dHRvbnMuZXhwb3J0SW5mbyhkKTtxLnRpdGxlJiYocChbcS50aXRsZV0sZiksbChmLGsuaGVhZGVyLmxlbmd0aC0xKSk7cS5tZXNzYWdlVG9wJiYocChbcS5tZXNzYWdlVG9wXSxmKSxsKGYsay5oZWFkZXIubGVuZ3RoLTEpKTtkLmhlYWRlciYmKHAoay5oZWFkZXIsZiksZygicm93Omxhc3QgYyIsZSkuYXR0cigicyIsIjIiKSk7Zm9yKHZhciB3PTAsdj1rLmJvZHkubGVuZ3RoO3c8CnY7dysrKXAoay5ib2R5W3ddLGYpO2QuZm9vdGVyJiZrLmZvb3RlciYmKHAoay5mb290ZXIsZiksZygicm93Omxhc3QgYyIsZSkuYXR0cigicyIsIjIiKSk7cS5tZXNzYWdlQm90dG9tJiYocChbcS5tZXNzYWdlQm90dG9tXSxmKSxsKGYsay5oZWFkZXIubGVuZ3RoLTEpKTtwPXIoZSwiY29scyIpO2coIndvcmtzaGVldCIsZSkucHJlcGVuZChwKTtsPTA7Zm9yKHc9ay5oZWFkZXIubGVuZ3RoO2w8dztsKyspcC5hcHBlbmRDaGlsZChyKGUsImNvbCIse2F0dHI6e21pbjpsKzEsbWF4OmwrMSx3aWR0aDpHKGssbCksY3VzdG9tV2lkdGg6MX19KSk7ZC5jdXN0b21pemUmJmQuY3VzdG9taXplKGMsZCxiKTtCKGMpO2Euc2V0QWN0aW9uKCJleGNlbCIpO2Euc2V0RmlsZU5hbWUocS5maWxlbmFtZSk7YS5zZXRTaGVldERhdGEoYyk7eChhLCIiKTt0aGlzLnByb2Nlc3NpbmcoITEpfSxleHRlbnNpb246Ii54bHN4IixjcmVhdGVFbXB0eUNlbGxzOiExfSk7bC5leHQuYnV0dG9ucy5wZGZGbGFzaD0KZy5leHRlbmQoe30seSx7Y2xhc3NOYW1lOiJidXR0b25zLXBkZiBidXR0b25zLWZsYXNoIix0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmkxOG4oImJ1dHRvbnMucGRmIiwiUERGIil9LGFjdGlvbjpmdW5jdGlvbihhLGIsYyxkKXt0aGlzLnByb2Nlc3NpbmcoITApO2E9ZC5fZmxhc2g7Yz1iLmJ1dHRvbnMuZXhwb3J0RGF0YShkLmV4cG9ydE9wdGlvbnMpO3ZhciBmPWIuYnV0dG9ucy5leHBvcnRJbmZvKGQpLGU9Yi50YWJsZSgpLm5vZGUoKS5vZmZzZXRXaWR0aCxnPWIuY29sdW1ucyhkLmNvbHVtbnMpLmluZGV4ZXMoKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGIuY29sdW1uKGEpLmhlYWRlcigpLm9mZnNldFdpZHRoL2V9KTthLnNldEFjdGlvbigicGRmIik7YS5zZXRGaWxlTmFtZShmLmZpbGVuYW1lKTt4KGEsSlNPTi5zdHJpbmdpZnkoe3RpdGxlOmYudGl0bGV8fCIiLG1lc3NhZ2VUb3A6Zi5tZXNzYWdlVG9wfHwiIixtZXNzYWdlQm90dG9tOmYubWVzc2FnZUJvdHRvbXx8IiIsCmNvbFdpZHRoOmcudG9BcnJheSgpLG9yaWVudGF0aW9uOmQub3JpZW50YXRpb24sc2l6ZTpkLnBhZ2VTaXplLGhlYWRlcjpkLmhlYWRlcj9jLmhlYWRlcjpudWxsLGZvb3RlcjpkLmZvb3Rlcj9jLmZvb3RlcjpudWxsLGJvZHk6Yy5ib2R5fSkpO3RoaXMucHJvY2Vzc2luZyghMSl9LGV4dGVuc2lvbjoiLnBkZiIsb3JpZW50YXRpb246InBvcnRyYWl0IixwYWdlU2l6ZToiQTQiLG5ld2xpbmU6IlxuIn0pO3JldHVybiBsLkJ1dHRvbnN9KTsKCgovKiEKIEhUTUw1IGV4cG9ydCBidXR0b25zIGZvciBCdXR0b25zIGFuZCBEYXRhVGFibGVzLgogMjAxNiBTcHJ5TWVkaWEgTHRkIC0gZGF0YXRhYmxlcy5uZXQvbGljZW5zZQoKIEZpbGVTYXZlci5qcyAoMS4zLjMpIC0gTUlUIGxpY2Vuc2UKIENvcHlyaWdodCDCqSAyMDE2IEVsaSBHcmV5IC0gaHR0cDovL2VsaWdyZXkuY29tCiovCihmdW5jdGlvbihmKXsiZnVuY3Rpb24iPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJqcXVlcnkiLCJkYXRhdGFibGVzLm5ldCIsImRhdGF0YWJsZXMubmV0LWJ1dHRvbnMiXSxmdW5jdGlvbihnKXtyZXR1cm4gZihnLHdpbmRvdyxkb2N1bWVudCl9KToib2JqZWN0Ij09PXR5cGVvZiBleHBvcnRzP21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKGcscCx6LHQpe2d8fChnPXdpbmRvdyk7cCYmcC5mbi5kYXRhVGFibGV8fChwPXJlcXVpcmUoImRhdGF0YWJsZXMubmV0IikoZyxwKS4kKTtwLmZuLmRhdGFUYWJsZS5CdXR0b25zfHxyZXF1aXJlKCJkYXRhdGFibGVzLm5ldC1idXR0b25zIikoZyxwKTtyZXR1cm4gZihwLGcsZy5kb2N1bWVudCx6LHQpfTpmKGpRdWVyeSx3aW5kb3csZG9jdW1lbnQpfSkoZnVuY3Rpb24oZixnLHAseix0LHcpe2Z1bmN0aW9uIEEoYSl7Zm9yKHZhciBiPSIiOzA8PWE7KWI9U3RyaW5nLmZyb21DaGFyQ29kZShhJTI2KzY1KStiLGE9TWF0aC5mbG9vcihhLwoyNiktMTtyZXR1cm4gYn1mdW5jdGlvbiBFKGEsYil7eT09PXcmJih5PS0xPT09Qy5zZXJpYWxpemVUb1N0cmluZyhmLnBhcnNlWE1MKEZbInhsL3dvcmtzaGVldHMvc2hlZXQxLnhtbCJdKSkuaW5kZXhPZigieG1sbnM6ciIpKTtmLmVhY2goYixmdW5jdGlvbihiLGMpe2lmKGYuaXNQbGFpbk9iamVjdChjKSliPWEuZm9sZGVyKGIpLEUoYixjKTtlbHNle2lmKHkpe3ZhciBkPWMuY2hpbGROb2Rlc1swXSxlLGg9W107Zm9yKGU9ZC5hdHRyaWJ1dGVzLmxlbmd0aC0xOzA8PWU7ZS0tKXt2YXIgbT1kLmF0dHJpYnV0ZXNbZV0ubm9kZU5hbWU7dmFyIGs9ZC5hdHRyaWJ1dGVzW2VdLm5vZGVWYWx1ZTstMSE9PW0uaW5kZXhPZigiOiIpJiYoaC5wdXNoKHtuYW1lOm0sdmFsdWU6a30pLGQucmVtb3ZlQXR0cmlidXRlKG0pKX1lPTA7Zm9yKG09aC5sZW5ndGg7ZTxtO2UrKylrPWMuY3JlYXRlQXR0cmlidXRlKGhbZV0ubmFtZS5yZXBsYWNlKCI6IiwiX2R0X2JfbmFtZXNwYWNlX3Rva2VuXyIpKSwKay52YWx1ZT1oW2VdLnZhbHVlLGQuc2V0QXR0cmlidXRlTm9kZShrKX1jPUMuc2VyaWFsaXplVG9TdHJpbmcoYyk7eSYmKC0xPT09Yy5pbmRleE9mKCI8P3htbCIpJiYoYz0nPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PicrYyksYz1jLnJlcGxhY2UoL19kdF9iX25hbWVzcGFjZV90b2tlbl8vZywiOiIpLGM9Yy5yZXBsYWNlKC94bWxuczpOU1tcZF0rPSIiIE5TW1xkXSs6L2csIiIpKTtjPWMucmVwbGFjZSgvPChbXjw+XSo/KSB4bWxucz0iIihbXjw+XSo/KT4vZywiPCQxICQyPiIpO2EuZmlsZShiLGMpfX0pfWZ1bmN0aW9uIHIoYSxiLGQpe3ZhciBjPWEuY3JlYXRlRWxlbWVudChiKTtkJiYoZC5hdHRyJiZmKGMpLmF0dHIoZC5hdHRyKSxkLmNoaWxkcmVuJiZmLmVhY2goZC5jaGlsZHJlbixmdW5jdGlvbihhLGIpe2MuYXBwZW5kQ2hpbGQoYil9KSxudWxsIT09ZC50ZXh0JiZkLnRleHQhPT13JiZjLmFwcGVuZENoaWxkKGEuY3JlYXRlVGV4dE5vZGUoZC50ZXh0KSkpOwpyZXR1cm4gY31mdW5jdGlvbiBMKGEsYil7dmFyIGQ9YS5oZWFkZXJbYl0ubGVuZ3RoO2EuZm9vdGVyJiZhLmZvb3RlcltiXS5sZW5ndGg+ZCYmKGQ9YS5mb290ZXJbYl0ubGVuZ3RoKTtmb3IodmFyIGM9MCxmPWEuYm9keS5sZW5ndGg7YzxmO2MrKyl7dmFyIGU9YS5ib2R5W2NdW2JdO2U9bnVsbCE9PWUmJmUhPT13P2UudG9TdHJpbmcoKToiIjstMSE9PWUuaW5kZXhPZigiXG4iKT8oZT1lLnNwbGl0KCJcbiIpLGUuc29ydChmdW5jdGlvbihhLGMpe3JldHVybiBjLmxlbmd0aC1hLmxlbmd0aH0pLGU9ZVswXS5sZW5ndGgpOmU9ZS5sZW5ndGg7ZT5kJiYoZD1lKTtpZig0MDxkKXJldHVybiA1NH1kKj0xLjM1O3JldHVybiA2PGQ/ZDo2fXZhciB2PWYuZm4uZGF0YVRhYmxlO3YuQnV0dG9ucy5wZGZNYWtlPWZ1bmN0aW9uKGEpe2lmKCFhKXJldHVybiB0fHxnLnBkZk1ha2U7dD1tX2FrZX07di5CdXR0b25zLmpzemlwPWZ1bmN0aW9uKGEpe2lmKCFhKXJldHVybiB6fHxnLkpTWmlwO3o9YX07CnZhciBCPWZ1bmN0aW9uKGEpe2lmKCEoInVuZGVmaW5lZCI9PT10eXBlb2YgYXx8InVuZGVmaW5lZCIhPT10eXBlb2YgbmF2aWdhdG9yJiYvTVNJRSBbMS05XVwuLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSl7dmFyIGI9YS5kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJhIiksZD0iZG93bmxvYWQiaW4gYixjPS9jb25zdHJ1Y3Rvci9pLnRlc3QoYS5IVE1MRWxlbWVudCl8fGEuc2FmYXJpLGY9L0NyaU9TXC9bXGRdKy8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxlPWZ1bmN0aW9uKGMpeyhhLnNldEltbWVkaWF0ZXx8YS5zZXRUaW1lb3V0KShmdW5jdGlvbigpe3Rocm93IGM7fSwwKX0saD1mdW5jdGlvbihjKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7InN0cmluZyI9PT10eXBlb2YgYz8oYS5VUkx8fGEud2Via2l0VVJMfHxhKS5yZXZva2VPYmplY3RVUkwoYyk6Yy5yZW1vdmUoKX0sNEU0KX0sbT1mdW5jdGlvbihhKXtyZXR1cm4vXlxzKig/OnRleHRcL1xTKnxhcHBsaWNhdGlvblwveG1sfFxTKlwvXFMqXCt4bWwpXHMqOy4qY2hhcnNldFxzKj1ccyp1dGYtOC9pLnRlc3QoYS50eXBlKT8KbmV3IEJsb2IoW1N0cmluZy5mcm9tQ2hhckNvZGUoNjUyNzkpLGFdLHt0eXBlOmEudHlwZX0pOmF9LGs9ZnVuY3Rpb24oayxxLG4pe258fChrPW0oaykpO3ZhciBsPXRoaXMsZz0iYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIj09PWsudHlwZSxEPWZ1bmN0aW9uKCl7dmFyIGE9WyJ3cml0ZXN0YXJ0IiwicHJvZ3Jlc3MiLCJ3cml0ZSIsIndyaXRlZW5kIl07YT1bXS5jb25jYXQoYSk7Zm9yKHZhciBjPWEubGVuZ3RoO2MtLTspe3ZhciBiPWxbIm9uIithW2NdXTtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGIpdHJ5e2IuY2FsbChsLGwpfWNhdGNoKE0pe2UoTSl9fX07bC5yZWFkeVN0YXRlPWwuSU5JVDtpZihkKXt2YXIgdT0oYS5VUkx8fGEud2Via2l0VVJMfHxhKS5jcmVhdGVPYmplY3RVUkwoayk7c2V0VGltZW91dChmdW5jdGlvbigpe2IuaHJlZj11O2IuZG93bmxvYWQ9cTt2YXIgYT1uZXcgTW91c2VFdmVudCgiY2xpY2siKTtiLmRpc3BhdGNoRXZlbnQoYSk7RCgpO2godSk7bC5yZWFkeVN0YXRlPQpsLkRPTkV9KX1lbHNlKGZ1bmN0aW9uKCl7aWYoKGZ8fGcmJmMpJiZhLkZpbGVSZWFkZXIpe3ZhciBiPW5ldyBGaWxlUmVhZGVyO2Iub25sb2FkZW5kPWZ1bmN0aW9uKCl7dmFyIGM9Zj9iLnJlc3VsdDpiLnJlc3VsdC5yZXBsYWNlKC9eZGF0YTpbXjtdKjsvLCJkYXRhOmF0dGFjaG1lbnQvZmlsZTsiKTthLm9wZW4oYywiX2JsYW5rIil8fChhLmxvY2F0aW9uLmhyZWY9Yyk7bC5yZWFkeVN0YXRlPWwuRE9ORTtEKCl9O2IucmVhZEFzRGF0YVVSTChrKTtsLnJlYWR5U3RhdGU9bC5JTklUfWVsc2UgdXx8KHU9KGEuVVJMfHxhLndlYmtpdFVSTHx8YSkuY3JlYXRlT2JqZWN0VVJMKGspKSxnP2EubG9jYXRpb24uaHJlZj11OmEub3Blbih1LCJfYmxhbmsiKXx8KGEubG9jYXRpb24uaHJlZj11KSxsLnJlYWR5U3RhdGU9bC5ET05FLEQoKSxoKHUpfSkoKX0sbj1rLnByb3RvdHlwZTtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKXJldHVybiBmdW5jdGlvbihhLApjLGIpe2M9Y3x8YS5uYW1lfHwiZG93bmxvYWQiO2J8fChhPW0oYSkpO3JldHVybiBuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihhLGMpfTtuLmFib3J0PWZ1bmN0aW9uKCl7fTtuLnJlYWR5U3RhdGU9bi5JTklUPTA7bi5XUklUSU5HPTE7bi5ET05FPTI7bi5lcnJvcj1uLm9ud3JpdGVzdGFydD1uLm9ucHJvZ3Jlc3M9bi5vbndyaXRlPW4ub25hYm9ydD1uLm9uZXJyb3I9bi5vbndyaXRlZW5kPW51bGw7cmV0dXJuIGZ1bmN0aW9uKGEsYyxiKXtyZXR1cm4gbmV3IGsoYSxjfHxhLm5hbWV8fCJkb3dubG9hZCIsYil9fX0oInVuZGVmaW5lZCIhPT10eXBlb2Ygc2VsZiYmc2VsZnx8InVuZGVmaW5lZCIhPT10eXBlb2YgZyYmZ3x8dGhpcy5jb250ZW50KTt2LmZpbGVTYXZlPUI7dmFyIEc9ZnVuY3Rpb24oYSl7dmFyIGI9IlNoZWV0MSI7YS5zaGVldE5hbWUmJihiPWEuc2hlZXROYW1lLnJlcGxhY2UoL1tcW1xdXCpcL1xcXD86XS9nLCIiKSk7cmV0dXJuIGJ9LEg9ZnVuY3Rpb24oYSl7cmV0dXJuIGEubmV3bGluZT8KYS5uZXdsaW5lOm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1dpbmRvd3MvKT8iXHJcbiI6IlxuIn0sST1mdW5jdGlvbihhLGIpe3ZhciBkPUgoYik7YT1hLmJ1dHRvbnMuZXhwb3J0RGF0YShiLmV4cG9ydE9wdGlvbnMpO3ZhciBjPWIuZmllbGRCb3VuZGFyeSxmPWIuZmllbGRTZXBhcmF0b3IsZT1uZXcgUmVnRXhwKGMsImciKSxoPWIuZXNjYXBlQ2hhciE9PXc/Yi5lc2NhcGVDaGFyOiJcXCIsbT1mdW5jdGlvbihhKXtmb3IodmFyIGI9IiIsZD0wLG09YS5sZW5ndGg7ZDxtO2QrKykwPGQmJihiKz1mKSxiKz1jP2MrKCIiK2FbZF0pLnJlcGxhY2UoZSxoK2MpK2M6YVtkXTtyZXR1cm4gYn0saz1iLmhlYWRlcj9tKGEuaGVhZGVyKStkOiIiO2I9Yi5mb290ZXImJmEuZm9vdGVyP2QrbShhLmZvb3Rlcik6IiI7Zm9yKHZhciBuPVtdLGc9MCxxPWEuYm9keS5sZW5ndGg7ZzxxO2crKyluLnB1c2gobShhLmJvZHlbZ10pKTtyZXR1cm57c3RyOmsrbi5qb2luKGQpK2Iscm93czpuLmxlbmd0aH19LApKPWZ1bmN0aW9uKCl7aWYoLTE9PT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIlNhZmFyaSIpfHwtMSE9PW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiQ2hyb21lIil8fC0xIT09bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJPcGVyYSIpKXJldHVybiExO3ZhciBhPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XC8oXGQrXC5cZCspLyk7cmV0dXJuIGEmJjE8YS5sZW5ndGgmJjYwMy4xPjEqYVsxXT8hMDohMX07dHJ5e3ZhciBDPW5ldyBYTUxTZXJpYWxpemVyLHl9Y2F0Y2goYSl7fXZhciBGPXsiX3JlbHMvLnJlbHMiOic8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+PFJlbGF0aW9uc2hpcHMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcyI+PFJlbGF0aW9uc2hpcCBJZD0icklkMSIgVHlwZT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9vZmZpY2VEb2N1bWVudCIgVGFyZ2V0PSJ4bC93b3JrYm9vay54bWwiLz48L1JlbGF0aW9uc2hpcHM+JywKInhsL19yZWxzL3dvcmtib29rLnhtbC5yZWxzIjonPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PjxSZWxhdGlvbnNoaXBzIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMiPjxSZWxhdGlvbnNoaXAgSWQ9InJJZDEiIFR5cGU9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvd29ya3NoZWV0IiBUYXJnZXQ9IndvcmtzaGVldHMvc2hlZXQxLnhtbCIvPjxSZWxhdGlvbnNoaXAgSWQ9InJJZDIiIFR5cGU9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvc3R5bGVzIiBUYXJnZXQ9InN0eWxlcy54bWwiLz48L1JlbGF0aW9uc2hpcHM+JywiW0NvbnRlbnRfVHlwZXNdLnhtbCI6Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz48VHlwZXMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvY29udGVudC10eXBlcyI+PERlZmF1bHQgRXh0ZW5zaW9uPSJ4bWwiIENvbnRlbnRUeXBlPSJhcHBsaWNhdGlvbi94bWwiIC8+PERlZmF1bHQgRXh0ZW5zaW9uPSJyZWxzIiBDb250ZW50VHlwZT0iYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UucmVsYXRpb25zaGlwcyt4bWwiIC8+PERlZmF1bHQgRXh0ZW5zaW9uPSJqcGVnIiBDb250ZW50VHlwZT0iaW1hZ2UvanBlZyIgLz48T3ZlcnJpZGUgUGFydE5hbWU9Ii94bC93b3JrYm9vay54bWwiIENvbnRlbnRUeXBlPSJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbCIgLz48T3ZlcnJpZGUgUGFydE5hbWU9Ii94bC93b3Jrc2hlZXRzL3NoZWV0MS54bWwiIENvbnRlbnRUeXBlPSJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC53b3Jrc2hlZXQreG1sIiAvPjxPdmVycmlkZSBQYXJ0TmFtZT0iL3hsL3N0eWxlcy54bWwiIENvbnRlbnRUeXBlPSJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zdHlsZXMreG1sIiAvPjwvVHlwZXM+JywKInhsL3dvcmtib29rLnhtbCI6Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz48d29ya2Jvb2sgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIgeG1sbnM6cj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyI+PGZpbGVWZXJzaW9uIGFwcE5hbWU9InhsIiBsYXN0RWRpdGVkPSI1IiBsb3dlc3RFZGl0ZWQ9IjUiIHJ1cEJ1aWxkPSIyNDgxNiIvPjx3b3JrYm9va1ByIHNob3dJbmtBbm5vdGF0aW9uPSIwIiBhdXRvQ29tcHJlc3NQaWN0dXJlcz0iMCIvPjxib29rVmlld3M+PHdvcmtib29rVmlldyB4V2luZG93PSIwIiB5V2luZG93PSIwIiB3aW5kb3dXaWR0aD0iMjU2MDAiIHdpbmRvd0hlaWdodD0iMTkwMjAiIHRhYlJhdGlvPSI1MDAiLz48L2Jvb2tWaWV3cz48c2hlZXRzPjxzaGVldCBuYW1lPSJTaGVldDEiIHNoZWV0SWQ9IjEiIHI6aWQ9InJJZDEiLz48L3NoZWV0cz48ZGVmaW5lZE5hbWVzLz48L3dvcmtib29rPicsCiJ4bC93b3Jrc2hlZXRzL3NoZWV0MS54bWwiOic8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+PHdvcmtzaGVldCB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIiB4bWxuczpyPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIiB4bWxuczptYz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL21hcmt1cC1jb21wYXRpYmlsaXR5LzIwMDYiIG1jOklnbm9yYWJsZT0ieDE0YWMiIHhtbG5zOngxNGFjPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMDkvOS9hYyI+PHNoZWV0RGF0YS8+PG1lcmdlQ2VsbHMgY291bnQ9IjAiLz48L3dvcmtzaGVldD4nLCJ4bC9zdHlsZXMueG1sIjonPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3R5bGVTaGVldCB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIiB4bWxuczptYz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL21hcmt1cC1jb21wYXRpYmlsaXR5LzIwMDYiIG1jOklnbm9yYWJsZT0ieDE0YWMiIHhtbG5zOngxNGFjPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMDkvOS9hYyI+PG51bUZtdHMgY291bnQ9IjYiPjxudW1GbXQgbnVtRm10SWQ9IjE2NCIgZm9ybWF0Q29kZT0iIywjIzAuMDBfLSBbJCQtNDVDXSIvPjxudW1GbXQgbnVtRm10SWQ9IjE2NSIgZm9ybWF0Q29kZT0iJnF1b3Q7wqMmcXVvdDsjLCMjMC4wMCIvPjxudW1GbXQgbnVtRm10SWQ9IjE2NiIgZm9ybWF0Q29kZT0iWyTigqwtMl0gIywjIzAuMDAiLz48bnVtRm10IG51bUZtdElkPSIxNjciIGZvcm1hdENvZGU9IjAuMCUiLz48bnVtRm10IG51bUZtdElkPSIxNjgiIGZvcm1hdENvZGU9IiMsIyMwOygjLCMjMCkiLz48bnVtRm10IG51bUZtdElkPSIxNjkiIGZvcm1hdENvZGU9IiMsIyMwLjAwOygjLCMjMC4wMCkiLz48L251bUZtdHM+PGZvbnRzIGNvdW50PSI1IiB4MTRhYzprbm93bkZvbnRzPSIxIj48Zm9udD48c3ogdmFsPSIxMSIgLz48bmFtZSB2YWw9IkNhbGlicmkiIC8+PC9mb250Pjxmb250PjxzeiB2YWw9IjExIiAvPjxuYW1lIHZhbD0iQ2FsaWJyaSIgLz48Y29sb3IgcmdiPSJGRkZGRkZGRiIgLz48L2ZvbnQ+PGZvbnQ+PHN6IHZhbD0iMTEiIC8+PG5hbWUgdmFsPSJDYWxpYnJpIiAvPjxiIC8+PC9mb250Pjxmb250PjxzeiB2YWw9IjExIiAvPjxuYW1lIHZhbD0iQ2FsaWJyaSIgLz48aSAvPjwvZm9udD48Zm9udD48c3ogdmFsPSIxMSIgLz48bmFtZSB2YWw9IkNhbGlicmkiIC8+PHUgLz48L2ZvbnQ+PC9mb250cz48ZmlsbHMgY291bnQ9IjYiPjxmaWxsPjxwYXR0ZXJuRmlsbCBwYXR0ZXJuVHlwZT0ibm9uZSIgLz48L2ZpbGw+PGZpbGw+PHBhdHRlcm5GaWxsIHBhdHRlcm5UeXBlPSJub25lIiAvPjwvZmlsbD48ZmlsbD48cGF0dGVybkZpbGwgcGF0dGVyblR5cGU9InNvbGlkIj48ZmdDb2xvciByZ2I9IkZGRDlEOUQ5IiAvPjxiZ0NvbG9yIGluZGV4ZWQ9IjY0IiAvPjwvcGF0dGVybkZpbGw+PC9maWxsPjxmaWxsPjxwYXR0ZXJuRmlsbCBwYXR0ZXJuVHlwZT0ic29saWQiPjxmZ0NvbG9yIHJnYj0iRkZEOTk3OTUiIC8+PGJnQ29sb3IgaW5kZXhlZD0iNjQiIC8+PC9wYXR0ZXJuRmlsbD48L2ZpbGw+PGZpbGw+PHBhdHRlcm5GaWxsIHBhdHRlcm5UeXBlPSJzb2xpZCI+PGZnQ29sb3IgcmdiPSJmZmM2ZWZjZSIgLz48YmdDb2xvciBpbmRleGVkPSI2NCIgLz48L3BhdHRlcm5GaWxsPjwvZmlsbD48ZmlsbD48cGF0dGVybkZpbGwgcGF0dGVyblR5cGU9InNvbGlkIj48ZmdDb2xvciByZ2I9ImZmYzZjZmVmIiAvPjxiZ0NvbG9yIGluZGV4ZWQ9IjY0IiAvPjwvcGF0dGVybkZpbGw+PC9maWxsPjwvZmlsbHM+PGJvcmRlcnMgY291bnQ9IjIiPjxib3JkZXI+PGxlZnQgLz48cmlnaHQgLz48dG9wIC8+PGJvdHRvbSAvPjxkaWFnb25hbCAvPjwvYm9yZGVyPjxib3JkZXIgZGlhZ29uYWxVcD0iZmFsc2UiIGRpYWdvbmFsRG93bj0iZmFsc2UiPjxsZWZ0IHN0eWxlPSJ0aGluIj48Y29sb3IgYXV0bz0iMSIgLz48L2xlZnQ+PHJpZ2h0IHN0eWxlPSJ0aGluIj48Y29sb3IgYXV0bz0iMSIgLz48L3JpZ2h0Pjx0b3Agc3R5bGU9InRoaW4iPjxjb2xvciBhdXRvPSIxIiAvPjwvdG9wPjxib3R0b20gc3R5bGU9InRoaW4iPjxjb2xvciBhdXRvPSIxIiAvPjwvYm90dG9tPjxkaWFnb25hbCAvPjwvYm9yZGVyPjwvYm9yZGVycz48Y2VsbFN0eWxlWGZzIGNvdW50PSIxIj48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgLz48L2NlbGxTdHlsZVhmcz48Y2VsbFhmcyBjb3VudD0iNjciPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMSIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjIiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIzIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iNCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMiIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIxIiBmaWxsSWQ9IjIiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMiIgZmlsbElkPSIyIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjMiIGZpbGxJZD0iMiIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSI0IiBmaWxsSWQ9IjIiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIzIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjEiIGZpbGxJZD0iMyIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIyIiBmaWxsSWQ9IjMiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMyIgZmlsbElkPSIzIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjQiIGZpbGxJZD0iMyIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjQiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMSIgZmlsbElkPSI0IiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjIiIGZpbGxJZD0iNCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIzIiBmaWxsSWQ9IjQiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iNCIgZmlsbElkPSI0IiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iNSIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIxIiBmaWxsSWQ9IjUiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMiIgZmlsbElkPSI1IiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjMiIGZpbGxJZD0iNSIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSI0IiBmaWxsSWQ9IjUiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjEiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIyIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIxIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMyIgZmlsbElkPSIwIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjQiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjIiIGJvcmRlcklkPSIxIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMSIgZmlsbElkPSIyIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjIiIGZpbGxJZD0iMiIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIzIiBmaWxsSWQ9IjIiIGJvcmRlcklkPSIxIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iNCIgZmlsbElkPSIyIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMyIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIxIiBmaWxsSWQ9IjMiIGJvcmRlcklkPSIxIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMiIgZmlsbElkPSIzIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjMiIGZpbGxJZD0iMyIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSI0IiBmaWxsSWQ9IjMiIGJvcmRlcklkPSIxIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSI0IiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjEiIGZpbGxJZD0iNCIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIyIiBmaWxsSWQ9IjQiIGJvcmRlcklkPSIxIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMyIgZmlsbElkPSI0IiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjQiIGZpbGxJZD0iNCIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjUiIGJvcmRlcklkPSIxIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMSIgZmlsbElkPSI1IiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjIiIGZpbGxJZD0iNSIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPjx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIzIiBmaWxsSWQ9IjUiIGJvcmRlcklkPSIxIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiLz48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iNCIgZmlsbElkPSI1IiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlBbGlnbm1lbnQ9IjEiPjxhbGlnbm1lbnQgaG9yaXpvbnRhbD0ibGVmdCIvPjwveGY+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlBbGlnbm1lbnQ9IjEiPjxhbGlnbm1lbnQgaG9yaXpvbnRhbD0iY2VudGVyIi8+PC94Zj48eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIiB4ZklkPSIwIiBhcHBseUFsaWdubWVudD0iMSI+PGFsaWdubWVudCBob3Jpem9udGFsPSJyaWdodCIvPjwveGY+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlBbGlnbm1lbnQ9IjEiPjxhbGlnbm1lbnQgaG9yaXpvbnRhbD0iZmlsbCIvPjwveGY+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlBbGlnbm1lbnQ9IjEiPjxhbGlnbm1lbnQgdGV4dFJvdGF0aW9uPSI5MCIvPjwveGY+PHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlBbGlnbm1lbnQ9IjEiPjxhbGlnbm1lbnQgd3JhcFRleHQ9IjEiLz48L3hmPjx4ZiBudW1GbXRJZD0iOSIgICBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlOdW1iZXJGb3JtYXQ9IjEiLz48eGYgbnVtRm10SWQ9IjE2NCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiIHhmSWQ9IjAiIGFwcGx5TnVtYmVyRm9ybWF0PSIxIi8+PHhmIG51bUZtdElkPSIxNjUiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIiB4ZklkPSIwIiBhcHBseU51bWJlckZvcm1hdD0iMSIvPjx4ZiBudW1GbXRJZD0iMTY2IiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlOdW1iZXJGb3JtYXQ9IjEiLz48eGYgbnVtRm10SWQ9IjE2NyIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiIHhmSWQ9IjAiIGFwcGx5TnVtYmVyRm9ybWF0PSIxIi8+PHhmIG51bUZtdElkPSIxNjgiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIiB4ZklkPSIwIiBhcHBseU51bWJlckZvcm1hdD0iMSIvPjx4ZiBudW1GbXRJZD0iMTY5IiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlOdW1iZXJGb3JtYXQ9IjEiLz48eGYgbnVtRm10SWQ9IjMiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIiB4ZklkPSIwIiBhcHBseU51bWJlckZvcm1hdD0iMSIvPjx4ZiBudW1GbXRJZD0iNCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiIHhmSWQ9IjAiIGFwcGx5TnVtYmVyRm9ybWF0PSIxIi8+PHhmIG51bUZtdElkPSIxIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlOdW1iZXJGb3JtYXQ9IjEiLz48eGYgbnVtRm10SWQ9IjIiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIiB4ZklkPSIwIiBhcHBseU51bWJlckZvcm1hdD0iMSIvPjwvY2VsbFhmcz48Y2VsbFN0eWxlcyBjb3VudD0iMSI+PGNlbGxTdHlsZSBuYW1lPSJOb3JtYWwiIHhmSWQ9IjAiIGJ1aWx0aW5JZD0iMCIgLz48L2NlbGxTdHlsZXM+PGR4ZnMgY291bnQ9IjAiIC8+PHRhYmxlU3R5bGVzIGNvdW50PSIwIiBkZWZhdWx0VGFibGVTdHlsZT0iVGFibGVTdHlsZU1lZGl1bTkiIGRlZmF1bHRQaXZvdFN0eWxlPSJQaXZvdFN0eWxlTWVkaXVtNCIgLz48L3N0eWxlU2hlZXQ+J30sCks9W3ttYXRjaDovXlwtP1xkK1wuXGQlJC8sc3R5bGU6NjAsZm10OmZ1bmN0aW9uKGEpe3JldHVybiBhLzEwMH19LHttYXRjaDovXlwtP1xkK1wuP1xkKiUkLyxzdHlsZTo1NixmbXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEvMTAwfX0se21hdGNoOi9eXC0/XCRbXGQsXSsuP1xkKiQvLHN0eWxlOjU3fSx7bWF0Y2g6L15cLT/Co1tcZCxdKy4/XGQqJC8sc3R5bGU6NTh9LHttYXRjaDovXlwtP+KCrFtcZCxdKy4/XGQqJC8sc3R5bGU6NTl9LHttYXRjaDovXlwtP1xkKyQvLHN0eWxlOjY1fSx7bWF0Y2g6L15cLT9cZCtcLlxkezJ9JC8sc3R5bGU6NjZ9LHttYXRjaDovXlwoW1xkLF0rXCkkLyxzdHlsZTo2MSxmbXQ6ZnVuY3Rpb24oYSl7cmV0dXJuLTEqYS5yZXBsYWNlKC9bXChcKV0vZywiIil9fSx7bWF0Y2g6L15cKFtcZCxdK1wuXGR7Mn1cKSQvLHN0eWxlOjYyLGZtdDpmdW5jdGlvbihhKXtyZXR1cm4tMSphLnJlcGxhY2UoL1tcKFwpXS9nLCIiKX19LHttYXRjaDovXlwtP1tcZCxdKyQvLHN0eWxlOjYzfSwKe21hdGNoOi9eXC0/W1xkLF0rXC5cZHsyfSQvLHN0eWxlOjY0fV07di5leHQuYnV0dG9ucy5jb3B5SHRtbDU9e2NsYXNzTmFtZToiYnV0dG9ucy1jb3B5IGJ1dHRvbnMtaHRtbDUiLHRleHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuaTE4bigiYnV0dG9ucy5jb3B5IiwiQ29weSIpfSxhY3Rpb246ZnVuY3Rpb24oYSxiLGQsYyl7dGhpcy5wcm9jZXNzaW5nKCEwKTt2YXIgZz10aGlzO2E9SShiLGMpO3ZhciBlPWIuYnV0dG9ucy5leHBvcnRJbmZvKGMpLGg9SChjKSxtPWEuc3RyO2Q9ZigiPGRpdi8+IikuY3NzKHtoZWlnaHQ6MSx3aWR0aDoxLG92ZXJmbG93OiJoaWRkZW4iLHBvc2l0aW9uOiJmaXhlZCIsdG9wOjAsbGVmdDowfSk7ZS50aXRsZSYmKG09ZS50aXRsZStoK2grbSk7ZS5tZXNzYWdlVG9wJiYobT1lLm1lc3NhZ2VUb3AraCtoK20pO2UubWVzc2FnZUJvdHRvbSYmKG09bStoK2grZS5tZXNzYWdlQm90dG9tKTtjLmN1c3RvbWl6ZSYmKG09Yy5jdXN0b21pemUobSxjLGIpKTtjPWYoIjx0ZXh0YXJlYSByZWFkb25seS8+IikudmFsKG0pLmFwcGVuZFRvKGQpOwppZihwLnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZCgiY29weSIpKXtkLmFwcGVuZFRvKGIudGFibGUoKS5jb250YWluZXIoKSk7Y1swXS5mb2N1cygpO2NbMF0uc2VsZWN0KCk7dHJ5e3ZhciBrPXAuZXhlY0NvbW1hbmQoImNvcHkiKTtkLnJlbW92ZSgpO2lmKGspe2IuYnV0dG9ucy5pbmZvKGIuaTE4bigiYnV0dG9ucy5jb3B5VGl0bGUiLCJDb3B5IHRvIGNsaXBib2FyZCIpLGIuaTE4bigiYnV0dG9ucy5jb3B5U3VjY2VzcyIsezE6IkNvcGllZCBvbmUgcm93IHRvIGNsaXBib2FyZCIsXzoiQ29waWVkICVkIHJvd3MgdG8gY2xpcGJvYXJkIn0sYS5yb3dzKSwyRTMpO3RoaXMucHJvY2Vzc2luZyghMSk7cmV0dXJufX1jYXRjaChxKXt9fWs9ZigiPHNwYW4+IitiLmkxOG4oImJ1dHRvbnMuY29weUtleXMiLCJQcmVzcyA8aT5jdHJsPC9pPiBvciA8aT7ijJg8L2k+ICsgPGk+QzwvaT4gdG8gY29weSB0aGUgdGFibGUgZGF0YTxicj50byB5b3VyIHN5c3RlbSBjbGlwYm9hcmQuPGJyPjxicj5UbyBjYW5jZWwsIGNsaWNrIHRoaXMgbWVzc2FnZSBvciBwcmVzcyBlc2NhcGUuIikrCiI8L3NwYW4+IikuYXBwZW5kKGQpO2IuYnV0dG9ucy5pbmZvKGIuaTE4bigiYnV0dG9ucy5jb3B5VGl0bGUiLCJDb3B5IHRvIGNsaXBib2FyZCIpLGssMCk7Y1swXS5mb2N1cygpO2NbMF0uc2VsZWN0KCk7dmFyIG49ZihrKS5jbG9zZXN0KCIuZHQtYnV0dG9uLWluZm8iKSxyPWZ1bmN0aW9uKCl7bi5vZmYoImNsaWNrLmJ1dHRvbnMtY29weSIpO2YocCkub2ZmKCIuYnV0dG9ucy1jb3B5Iik7Yi5idXR0b25zLmluZm8oITEpfTtuLm9uKCJjbGljay5idXR0b25zLWNvcHkiLHIpO2YocCkub24oImtleWRvd24uYnV0dG9ucy1jb3B5IixmdW5jdGlvbihhKXsyNz09PWEua2V5Q29kZSYmKHIoKSxnLnByb2Nlc3NpbmcoITEpKX0pLm9uKCJjb3B5LmJ1dHRvbnMtY29weSBjdXQuYnV0dG9ucy1jb3B5IixmdW5jdGlvbigpe3IoKTtnLnByb2Nlc3NpbmcoITEpfSl9LGV4cG9ydE9wdGlvbnM6e30sZmllbGRTZXBhcmF0b3I6Ilx0IixmaWVsZEJvdW5kYXJ5OiIiLGhlYWRlcjohMCxmb290ZXI6ITEsCnRpdGxlOiIqIixtZXNzYWdlVG9wOiIqIixtZXNzYWdlQm90dG9tOiIqIn07di5leHQuYnV0dG9ucy5jc3ZIdG1sNT17Ym9tOiExLGNsYXNzTmFtZToiYnV0dG9ucy1jc3YgYnV0dG9ucy1odG1sNSIsYXZhaWxhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGcuRmlsZVJlYWRlciE9PXcmJmcuQmxvYn0sdGV4dDpmdW5jdGlvbihhKXtyZXR1cm4gYS5pMThuKCJidXR0b25zLmNzdiIsIkNTViIpfSxhY3Rpb246ZnVuY3Rpb24oYSxiLGQsYyl7dGhpcy5wcm9jZXNzaW5nKCEwKTthPUkoYixjKS5zdHI7ZD1iLmJ1dHRvbnMuZXhwb3J0SW5mbyhjKTt2YXIgZj1jLmNoYXJzZXQ7Yy5jdXN0b21pemUmJihhPWMuY3VzdG9taXplKGEsYyxiKSk7ITEhPT1mPyhmfHwoZj1wLmNoYXJhY3RlclNldHx8cC5jaGFyc2V0KSxmJiYoZj0iO2NoYXJzZXQ9IitmKSk6Zj0iIjtjLmJvbSYmKGE9Iu+7vyIrYSk7QihuZXcgQmxvYihbYV0se3R5cGU6InRleHQvY3N2IitmfSksZC5maWxlbmFtZSwhMCk7dGhpcy5wcm9jZXNzaW5nKCExKX0sCmZpbGVuYW1lOiIqIixleHRlbnNpb246Ii5jc3YiLGV4cG9ydE9wdGlvbnM6e30sZmllbGRTZXBhcmF0b3I6IiwiLGZpZWxkQm91bmRhcnk6JyInLGVzY2FwZUNoYXI6JyInLGNoYXJzZXQ6bnVsbCxoZWFkZXI6ITAsZm9vdGVyOiExfTt2LmV4dC5idXR0b25zLmV4Y2VsSHRtbDU9e2NsYXNzTmFtZToiYnV0dG9ucy1leGNlbCBidXR0b25zLWh0bWw1IixhdmFpbGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gZy5GaWxlUmVhZGVyIT09dyYmKHp8fGcuSlNaaXApIT09dyYmIUooKSYmQ30sdGV4dDpmdW5jdGlvbihhKXtyZXR1cm4gYS5pMThuKCJidXR0b25zLmV4Y2VsIiwiRXhjZWwiKX0sYWN0aW9uOmZ1bmN0aW9uKGEsYixkLGMpe3RoaXMucHJvY2Vzc2luZyghMCk7dmFyIHA9dGhpcyxlPTA7YT1mdW5jdGlvbihhKXtyZXR1cm4gZi5wYXJzZVhNTChGW2FdKX07dmFyIGg9YSgieGwvd29ya3NoZWV0cy9zaGVldDEueG1sIiksbT1oLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzaGVldERhdGEiKVswXTsKYT17X3JlbHM6eyIucmVscyI6YSgiX3JlbHMvLnJlbHMiKX0seGw6e19yZWxzOnsid29ya2Jvb2sueG1sLnJlbHMiOmEoInhsL19yZWxzL3dvcmtib29rLnhtbC5yZWxzIil9LCJ3b3JrYm9vay54bWwiOmEoInhsL3dvcmtib29rLnhtbCIpLCJzdHlsZXMueG1sIjphKCJ4bC9zdHlsZXMueG1sIiksd29ya3NoZWV0czp7InNoZWV0MS54bWwiOmh9fSwiW0NvbnRlbnRfVHlwZXNdLnhtbCI6YSgiW0NvbnRlbnRfVHlwZXNdLnhtbCIpfTt2YXIgaz1iLmJ1dHRvbnMuZXhwb3J0RGF0YShjLmV4cG9ydE9wdGlvbnMpLG4sdixxPWZ1bmN0aW9uKGEpe249ZSsxO3Y9cihoLCJyb3ciLHthdHRyOntyOm59fSk7Zm9yKHZhciBiPTAsZD1hLmxlbmd0aDtiPGQ7YisrKXt2YXIgaz1BKGIpKyIiK24sZz1udWxsO2lmKG51bGw9PT1hW2JdfHxhW2JdPT09d3x8IiI9PT1hW2JdKWlmKCEwPT09Yy5jcmVhdGVFbXB0eUNlbGxzKWFbYl09IiI7ZWxzZSBjb250aW51ZTt2YXIgbD1hW2JdO2FbYl09Zi50cmltKGFbYl0pOwpmb3IodmFyIHE9MCxwPUsubGVuZ3RoO3E8cDtxKyspe3ZhciB1PUtbcV07aWYoYVtiXS5tYXRjaCYmIWFbYl0ubWF0Y2goL14wXGQrLykmJmFbYl0ubWF0Y2godS5tYXRjaCkpe2c9YVtiXS5yZXBsYWNlKC9bXlxkXC5cLV0vZywiIik7dS5mbXQmJihnPXUuZm10KGcpKTtnPXIoaCwiYyIse2F0dHI6e3I6ayxzOnUuc3R5bGV9LGNoaWxkcmVuOltyKGgsInYiLHt0ZXh0Omd9KV19KTticmVha319Z3x8KCJudW1iZXIiPT09dHlwZW9mIGFbYl18fGFbYl0ubWF0Y2gmJmFbYl0ubWF0Y2goL14tP1xkKyhcLlxkKyk/JC8pJiYhYVtiXS5tYXRjaCgvXjBcZCsvKT9nPXIoaCwiYyIse2F0dHI6e3Q6Im4iLHI6a30sY2hpbGRyZW46W3IoaCwidiIse3RleHQ6YVtiXX0pXX0pOihsPWwucmVwbGFjZT9sLnJlcGxhY2UoL1tceDAwLVx4MDlceDBCXHgwQ1x4MEUtXHgxRlx4N0YtXHg5Rl0vZywiIik6bCxnPXIoaCwiYyIse2F0dHI6e3Q6ImlubGluZVN0ciIscjprfSxjaGlsZHJlbjp7cm93OnIoaCwKImlzIix7Y2hpbGRyZW46e3JvdzpyKGgsInQiLHt0ZXh0OmwsYXR0cjp7InhtbDpzcGFjZSI6InByZXNlcnZlIn19KX19KX19KSkpO3YuYXBwZW5kQ2hpbGQoZyl9bS5hcHBlbmRDaGlsZCh2KTtlKyt9O2MuY3VzdG9taXplRGF0YSYmYy5jdXN0b21pemVEYXRhKGspO3ZhciB4PWZ1bmN0aW9uKGEsYil7dmFyIGM9ZigibWVyZ2VDZWxscyIsaCk7Y1swXS5hcHBlbmRDaGlsZChyKGgsIm1lcmdlQ2VsbCIse2F0dHI6e3JlZjoiQSIrYSsiOiIrQShiKSthfX0pKTtjLmF0dHIoImNvdW50IixwYXJzZUZsb2F0KGMuYXR0cigiY291bnQiKSkrMSk7Zigicm93OmVxKCIrKGEtMSkrIikgYyIsaCkuYXR0cigicyIsIjUxIil9LGw9Yi5idXR0b25zLmV4cG9ydEluZm8oYyk7bC50aXRsZSYmKHEoW2wudGl0bGVdLGUpLHgoZSxrLmhlYWRlci5sZW5ndGgtMSkpO2wubWVzc2FnZVRvcCYmKHEoW2wubWVzc2FnZVRvcF0sZSkseChlLGsuaGVhZGVyLmxlbmd0aC0xKSk7Yy5oZWFkZXImJihxKGsuaGVhZGVyLAplKSxmKCJyb3c6bGFzdCBjIixoKS5hdHRyKCJzIiwiMiIpKTtkPWU7dmFyIHQ9MDtmb3IodmFyIHk9ay5ib2R5Lmxlbmd0aDt0PHk7dCsrKXEoay5ib2R5W3RdLGUpO3Q9ZTtjLmZvb3RlciYmay5mb290ZXImJihxKGsuZm9vdGVyLGUpLGYoInJvdzpsYXN0IGMiLGgpLmF0dHIoInMiLCIyIikpO2wubWVzc2FnZUJvdHRvbSYmKHEoW2wubWVzc2FnZUJvdHRvbV0sZSkseChlLGsuaGVhZGVyLmxlbmd0aC0xKSk7cT1yKGgsImNvbHMiKTtmKCJ3b3Jrc2hlZXQiLGgpLnByZXBlbmQocSk7eD0wO2Zvcih5PWsuaGVhZGVyLmxlbmd0aDt4PHk7eCsrKXEuYXBwZW5kQ2hpbGQocihoLCJjb2wiLHthdHRyOnttaW46eCsxLG1heDp4KzEsd2lkdGg6TChrLHgpLGN1c3RvbVdpZHRoOjF9fSkpO3E9YS54bFsid29ya2Jvb2sueG1sIl07Zigic2hlZXRzIHNoZWV0IixxKS5hdHRyKCJuYW1lIixHKGMpKTtjLmF1dG9GaWx0ZXImJihmKCJtZXJnZUNlbGxzIixoKS5iZWZvcmUocihoLCJhdXRvRmlsdGVyIiwKe2F0dHI6e3JlZjoiQSIrZCsiOiIrQShrLmhlYWRlci5sZW5ndGgtMSkrdH19KSksZigiZGVmaW5lZE5hbWVzIixxKS5hcHBlbmQocihxLCJkZWZpbmVkTmFtZSIse2F0dHI6e25hbWU6Il94bG5tLl9GaWx0ZXJEYXRhYmFzZSIsbG9jYWxTaGVldElkOiIwIixoaWRkZW46MX0sdGV4dDpHKGMpKyIhJEEkIitkKyI6IitBKGsuaGVhZGVyLmxlbmd0aC0xKSt0fSkpKTtjLmN1c3RvbWl6ZSYmYy5jdXN0b21pemUoYSxjLGIpOzA9PT1mKCJtZXJnZUNlbGxzIixoKS5jaGlsZHJlbigpLmxlbmd0aCYmZigibWVyZ2VDZWxscyIsaCkucmVtb3ZlKCk7Yj1uZXcgKHp8fGcuSlNaaXApO2Q9e3R5cGU6ImJsb2IiLG1pbWVUeXBlOiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCJ9O0UoYixhKTtiLmdlbmVyYXRlQXN5bmM/Yi5nZW5lcmF0ZUFzeW5jKGQpLnRoZW4oZnVuY3Rpb24oYSl7QihhLGwuZmlsZW5hbWUpO3AucHJvY2Vzc2luZyghMSl9KToKKEIoYi5nZW5lcmF0ZShkKSxsLmZpbGVuYW1lKSx0aGlzLnByb2Nlc3NpbmcoITEpKX0sZmlsZW5hbWU6IioiLGV4dGVuc2lvbjoiLnhsc3giLGV4cG9ydE9wdGlvbnM6e30saGVhZGVyOiEwLGZvb3RlcjohMSx0aXRsZToiKiIsbWVzc2FnZVRvcDoiKiIsbWVzc2FnZUJvdHRvbToiKiIsY3JlYXRlRW1wdHlDZWxsczohMSxhdXRvRmlsdGVyOiExLHNoZWV0TmFtZToiIn07di5leHQuYnV0dG9ucy5wZGZIdG1sNT17Y2xhc3NOYW1lOiJidXR0b25zLXBkZiBidXR0b25zLWh0bWw1IixhdmFpbGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gZy5GaWxlUmVhZGVyIT09dyYmKHR8fGcucGRmTWFrZSl9LHRleHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuaTE4bigiYnV0dG9ucy5wZGYiLCJQREYiKX0sYWN0aW9uOmZ1bmN0aW9uKGEsYixkLGMpe3RoaXMucHJvY2Vzc2luZyghMCk7ZD1iLmJ1dHRvbnMuZXhwb3J0RGF0YShjLmV4cG9ydE9wdGlvbnMpO2E9Yi5idXR0b25zLmV4cG9ydEluZm8oYyk7dmFyIHA9CltdO2MuaGVhZGVyJiZwLnB1c2goZi5tYXAoZC5oZWFkZXIsZnVuY3Rpb24oYSl7cmV0dXJue3RleHQ6InN0cmluZyI9PT10eXBlb2YgYT9hOmErIiIsc3R5bGU6InRhYmxlSGVhZGVyIn19KSk7Zm9yKHZhciBlPTAsaD1kLmJvZHkubGVuZ3RoO2U8aDtlKyspcC5wdXNoKGYubWFwKGQuYm9keVtlXSxmdW5jdGlvbihhKXtpZihudWxsPT09YXx8YT09PXcpYT0iIjtyZXR1cm57dGV4dDoic3RyaW5nIj09PXR5cGVvZiBhP2E6YSsiIixzdHlsZTplJTI/InRhYmxlQm9keUV2ZW4iOiJ0YWJsZUJvZHlPZGQifX0pKTtjLmZvb3RlciYmZC5mb290ZXImJnAucHVzaChmLm1hcChkLmZvb3RlcixmdW5jdGlvbihhKXtyZXR1cm57dGV4dDoic3RyaW5nIj09PXR5cGVvZiBhP2E6YSsiIixzdHlsZToidGFibGVGb290ZXIifX0pKTtkPXtwYWdlU2l6ZTpjLnBhZ2VTaXplLHBhZ2VPcmllbnRhdGlvbjpjLm9yaWVudGF0aW9uLGNvbnRlbnQ6W3t0YWJsZTp7aGVhZGVyUm93czoxLGJvZHk6cH0sbGF5b3V0OiJub0JvcmRlcnMifV0sCnN0eWxlczp7dGFibGVIZWFkZXI6e2JvbGQ6ITAsZm9udFNpemU6MTEsY29sb3I6IndoaXRlIixmaWxsQ29sb3I6IiMyZDQxNTQiLGFsaWdubWVudDoiY2VudGVyIn0sdGFibGVCb2R5RXZlbjp7fSx0YWJsZUJvZHlPZGQ6e2ZpbGxDb2xvcjoiI2YzZjNmMyJ9LHRhYmxlRm9vdGVyOntib2xkOiEwLGZvbnRTaXplOjExLGNvbG9yOiJ3aGl0ZSIsZmlsbENvbG9yOiIjMmQ0MTU0In0sdGl0bGU6e2FsaWdubWVudDoiY2VudGVyIixmb250U2l6ZToxNX0sbWVzc2FnZTp7fX0sZGVmYXVsdFN0eWxlOntmb250U2l6ZToxMH19O2EubWVzc2FnZVRvcCYmZC5jb250ZW50LnVuc2hpZnQoe3RleHQ6YS5tZXNzYWdlVG9wLHN0eWxlOiJtZXNzYWdlIixtYXJnaW46WzAsMCwwLDEyXX0pO2EubWVzc2FnZUJvdHRvbSYmZC5jb250ZW50LnB1c2goe3RleHQ6YS5tZXNzYWdlQm90dG9tLHN0eWxlOiJtZXNzYWdlIixtYXJnaW46WzAsMCwwLDEyXX0pO2EudGl0bGUmJmQuY29udGVudC51bnNoaWZ0KHt0ZXh0OmEudGl0bGUsCnN0eWxlOiJ0aXRsZSIsbWFyZ2luOlswLDAsMCwxMl19KTtjLmN1c3RvbWl6ZSYmYy5jdXN0b21pemUoZCxjLGIpO2I9KHR8fGcucGRmTWFrZSkuY3JlYXRlUGRmKGQpOyJvcGVuIiE9PWMuZG93bmxvYWR8fEooKT9iLmRvd25sb2FkKGEuZmlsZW5hbWUpOmIub3BlbigpO3RoaXMucHJvY2Vzc2luZyghMSl9LHRpdGxlOiIqIixmaWxlbmFtZToiKiIsZXh0ZW5zaW9uOiIucGRmIixleHBvcnRPcHRpb25zOnt9LG9yaWVudGF0aW9uOiJwb3J0cmFpdCIscGFnZVNpemU6IkE0IixoZWFkZXI6ITAsZm9vdGVyOiExLG1lc3NhZ2VUb3A6IioiLG1lc3NhZ2VCb3R0b206IioiLGN1c3RvbWl6ZTpudWxsLGRvd25sb2FkOiJkb3dubG9hZCJ9O3JldHVybiB2LkJ1dHRvbnN9KTsKCgovKiEKIFByaW50IGJ1dHRvbiBmb3IgQnV0dG9ucyBhbmQgRGF0YVRhYmxlcy4KIDIwMTYgU3ByeU1lZGlhIEx0ZCAtIGRhdGF0YWJsZXMubmV0L2xpY2Vuc2UKKi8KKGZ1bmN0aW9uKGMpeyJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImpxdWVyeSIsImRhdGF0YWJsZXMubmV0IiwiZGF0YXRhYmxlcy5uZXQtYnV0dG9ucyJdLGZ1bmN0aW9uKGUpe3JldHVybiBjKGUsd2luZG93LGRvY3VtZW50KX0pOiJvYmplY3QiPT09dHlwZW9mIGV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24oZSxhKXtlfHwoZT13aW5kb3cpO2EmJmEuZm4uZGF0YVRhYmxlfHwoYT1yZXF1aXJlKCJkYXRhdGFibGVzLm5ldCIpKGUsYSkuJCk7YS5mbi5kYXRhVGFibGUuQnV0dG9uc3x8cmVxdWlyZSgiZGF0YXRhYmxlcy5uZXQtYnV0dG9ucyIpKGUsYSk7cmV0dXJuIGMoYSxlLGUuZG9jdW1lbnQpfTpjKGpRdWVyeSx3aW5kb3csZG9jdW1lbnQpfSkoZnVuY3Rpb24oYyxlLGEscSl7dmFyIGs9Yy5mbi5kYXRhVGFibGUsZD1hLmNyZWF0ZUVsZW1lbnQoImEiKSxwPWZ1bmN0aW9uKGIpe2QuaHJlZj1iO2I9ZC5ob3N0Oy0xPT09Yi5pbmRleE9mKCIvIikmJgowIT09ZC5wYXRobmFtZS5pbmRleE9mKCIvIikmJihiKz0iLyIpO3JldHVybiBkLnByb3RvY29sKyIvLyIrYitkLnBhdGhuYW1lK2Quc2VhcmNofTtrLmV4dC5idXR0b25zLnByaW50PXtjbGFzc05hbWU6ImJ1dHRvbnMtcHJpbnQiLHRleHQ6ZnVuY3Rpb24oYil7cmV0dXJuIGIuaTE4bigiYnV0dG9ucy5wcmludCIsIlByaW50Iil9LGFjdGlvbjpmdW5jdGlvbihiLGEsZCxnKXtiPWEuYnV0dG9ucy5leHBvcnREYXRhKGMuZXh0ZW5kKHtkZWNvZGVFbnRpdGllczohMX0sZy5leHBvcnRPcHRpb25zKSk7ZD1hLmJ1dHRvbnMuZXhwb3J0SW5mbyhnKTt2YXIgaz1hLmNvbHVtbnMoZy5leHBvcnRPcHRpb25zLmNvbHVtbnMpLmZsYXR0ZW4oKS5tYXAoZnVuY3Rpb24oYil7cmV0dXJuIGEuc2V0dGluZ3MoKVswXS5hb0NvbHVtbnNbYS5jb2x1bW4oYikuaW5kZXgoKV0uc0NsYXNzfSkudG9BcnJheSgpLG09ZnVuY3Rpb24oYixhKXtmb3IodmFyIGQ9Ijx0cj4iLGM9MCxlPWIubGVuZ3RoO2M8ZTtjKyspZCs9CiI8IithKyIgIisoa1tjXT8nY2xhc3M9Iicra1tjXSsnIic6IiIpKyI+IisobnVsbD09PWJbY118fGJbY109PT1xPyIiOmJbY10pKyI8LyIrYSsiPiI7cmV0dXJuIGQrIjwvdHI+In0saD0nPHRhYmxlIGNsYXNzPSInK2EudGFibGUoKS5ub2RlKCkuY2xhc3NOYW1lKyciPic7Zy5oZWFkZXImJihoKz0iPHRoZWFkPiIrbShiLmhlYWRlciwidGgiKSsiPC90aGVhZD4iKTtoKz0iPHRib2R5PiI7Zm9yKHZhciBuPTAscj1iLmJvZHkubGVuZ3RoO248cjtuKyspaCs9bShiLmJvZHlbbl0sInRkIik7aCs9IjwvdGJvZHk+IjtnLmZvb3RlciYmYi5mb290ZXImJihoKz0iPHRmb290PiIrbShiLmZvb3RlciwidGgiKSsiPC90Zm9vdD4iKTtoKz0iPC90YWJsZT4iO3ZhciBmPWUub3BlbigiIiwiIik7Zi5kb2N1bWVudC5jbG9zZSgpO3ZhciBsPSI8dGl0bGU+IitkLnRpdGxlKyI8L3RpdGxlPiI7Yygic3R5bGUsIGxpbmsiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9bCxhPWModGhpcykuY2xvbmUoKVswXTsKImxpbmsiPT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYoYS5ocmVmPXAoYS5ocmVmKSk7bD1iK2Eub3V0ZXJIVE1MfSk7dHJ5e2YuZG9jdW1lbnQuaGVhZC5pbm5lckhUTUw9bH1jYXRjaCh0KXtjKGYuZG9jdW1lbnQuaGVhZCkuaHRtbChsKX1mLmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MPSI8aDE+IitkLnRpdGxlKyI8L2gxPjxkaXY+IisoZC5tZXNzYWdlVG9wfHwiIikrIjwvZGl2PiIraCsiPGRpdj4iKyhkLm1lc3NhZ2VCb3R0b218fCIiKSsiPC9kaXY+IjtjKGYuZG9jdW1lbnQuYm9keSkuYWRkQ2xhc3MoImR0LXByaW50LXZpZXciKTtjKCJpbWciLGYuZG9jdW1lbnQuYm9keSkuZWFjaChmdW5jdGlvbihiLGEpe2Euc2V0QXR0cmlidXRlKCJzcmMiLHAoYS5nZXRBdHRyaWJ1dGUoInNyYyIpKSl9KTtnLmN1c3RvbWl6ZSYmZy5jdXN0b21pemUoZixnLGEpO2I9ZnVuY3Rpb24oKXtnLmF1dG9QcmludCYmKGYucHJpbnQoKSxmLmNsb3NlKCkpfTtuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9UcmlkZW50XC9cZC5cZC8pPwpiKCk6Zi5zZXRUaW1lb3V0KGIsMUUzKX0sdGl0bGU6IioiLG1lc3NhZ2VUb3A6IioiLG1lc3NhZ2VCb3R0b206IioiLGV4cG9ydE9wdGlvbnM6e30saGVhZGVyOiEwLGZvb3RlcjohMSxhdXRvUHJpbnQ6ITAsY3VzdG9taXplOm51bGx9O3JldHVybiBrLkJ1dHRvbnN9KTsKCgovKiEKICAgQ29weXJpZ2h0IDIwMTAtMjAxOSBTcHJ5TWVkaWEgTHRkLgoKIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgYXZhaWxhYmxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKICAgTUlUIGxpY2Vuc2UgLSBodHRwOi8vZGF0YXRhYmxlcy5uZXQvbGljZW5zZS9taXQKCiBUaGlzIHNvdXJjZSBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIGxpY2Vuc2UgZmlsZXMgZm9yIGRldGFpbHMuCgogRm9yIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvOiBodHRwOi8vd3d3LmRhdGF0YWJsZXMubmV0CiBDb2xSZW9yZGVyIDEuNS4yCiDCqTIwMTAtMjAxOSBTcHJ5TWVkaWEgTHRkIC0gZGF0YXRhYmxlcy5uZXQvbGljZW5zZQoqLwooZnVuY3Rpb24oZCl7ImZ1bmN0aW9uIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsianF1ZXJ5IiwiZGF0YXRhYmxlcy5uZXQiXSxmdW5jdGlvbih0KXtyZXR1cm4gZCh0LHdpbmRvdyxkb2N1bWVudCl9KToib2JqZWN0Ij09PXR5cGVvZiBleHBvcnRzP21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKHQscil7dHx8KHQ9d2luZG93KTtyJiZyLmZuLmRhdGFUYWJsZXx8KHI9cmVxdWlyZSgiZGF0YXRhYmxlcy5uZXQiKSh0LHIpLiQpO3JldHVybiBkKHIsdCx0LmRvY3VtZW50KX06ZChqUXVlcnksd2luZG93LGRvY3VtZW50KX0pKGZ1bmN0aW9uKGQsdCxyLHcpe2Z1bmN0aW9uIHYoYSl7Zm9yKHZhciBiPVtdLGM9MCxkPWEubGVuZ3RoO2M8ZDtjKyspYlthW2NdXT1jO3JldHVybiBifWZ1bmN0aW9uIHUoYSxiLGMpe2I9YS5zcGxpY2UoYiwxKVswXTthLnNwbGljZShjLDAsYil9ZnVuY3Rpb24geChhLGIsYyl7Zm9yKHZhciBkPVtdLGg9MCxmPWEuY2hpbGROb2Rlcy5sZW5ndGg7aDwKZjtoKyspMT09YS5jaGlsZE5vZGVzW2hdLm5vZGVUeXBlJiZkLnB1c2goYS5jaGlsZE5vZGVzW2hdKTtiPWRbYl07bnVsbCE9PWM/YS5pbnNlcnRCZWZvcmUoYixkW2NdKTphLmFwcGVuZENoaWxkKGIpfXZhciB5PWQuZm4uZGF0YVRhYmxlO2QuZm4uZGF0YVRhYmxlRXh0Lm9BcGkuZm5Db2xSZW9yZGVyPWZ1bmN0aW9uKGEsYixjLGcsaCl7dmFyIGYscCxuPWEuYW9Db2x1bW5zLmxlbmd0aDt2YXIgcT1mdW5jdGlvbihhLGIsYyl7aWYoYVtiXSYmImZ1bmN0aW9uIiE9PXR5cGVvZiBhW2JdKXt2YXIgZT1hW2JdLnNwbGl0KCIuIiksZD1lLnNoaWZ0KCk7aXNOYU4oMSpkKXx8KGFbYl09Y1sxKmRdKyIuIitlLmpvaW4oIi4iKSl9fTtpZihiIT1jKWlmKDA+Ynx8Yj49bil0aGlzLm9BcGkuX2ZuTG9nKGEsMSwiQ29sUmVvcmRlciAnZnJvbScgaW5kZXggaXMgb3V0IG9mIGJvdW5kczogIitiKTtlbHNlIGlmKDA+Y3x8Yz49bil0aGlzLm9BcGkuX2ZuTG9nKGEsMSwiQ29sUmVvcmRlciAndG8nIGluZGV4IGlzIG91dCBvZiBib3VuZHM6ICIrCmMpO2Vsc2V7dmFyIGw9W107dmFyIGU9MDtmb3IoZj1uO2U8ZjtlKyspbFtlXT1lO3UobCxiLGMpO3ZhciBrPXYobCk7ZT0wO2ZvcihmPWEuYWFTb3J0aW5nLmxlbmd0aDtlPGY7ZSsrKWEuYWFTb3J0aW5nW2VdWzBdPWtbYS5hYVNvcnRpbmdbZV1bMF1dO2lmKG51bGwhPT1hLmFhU29ydGluZ0ZpeGVkKWZvcihlPTAsZj1hLmFhU29ydGluZ0ZpeGVkLmxlbmd0aDtlPGY7ZSsrKWEuYWFTb3J0aW5nRml4ZWRbZV1bMF09a1thLmFhU29ydGluZ0ZpeGVkW2VdWzBdXTtlPTA7Zm9yKGY9bjtlPGY7ZSsrKXt2YXIgbT1hLmFvQ29sdW1uc1tlXTtsPTA7Zm9yKHA9bS5hRGF0YVNvcnQubGVuZ3RoO2w8cDtsKyspbS5hRGF0YVNvcnRbbF09a1ttLmFEYXRhU29ydFtsXV07bS5pZHg9a1ttLmlkeF19ZC5lYWNoKGEuYUxhc3RTb3J0LGZ1bmN0aW9uKGIsYyl7YS5hTGFzdFNvcnRbYl0uc3JjPWtbYy5zcmNdfSk7ZT0wO2ZvcihmPW47ZTxmO2UrKyltPWEuYW9Db2x1bW5zW2VdLCJudW1iZXIiPT10eXBlb2YgbS5tRGF0YT8KbS5tRGF0YT1rW20ubURhdGFdOmQuaXNQbGFpbk9iamVjdChtLm1EYXRhKSYmKHEobS5tRGF0YSwiXyIsaykscShtLm1EYXRhLCJmaWx0ZXIiLGspLHEobS5tRGF0YSwic29ydCIsaykscShtLm1EYXRhLCJ0eXBlIixrKSk7aWYoYS5hb0NvbHVtbnNbYl0uYlZpc2libGUpe3E9dGhpcy5vQXBpLl9mbkNvbHVtbkluZGV4VG9WaXNpYmxlKGEsYik7cD1udWxsO2ZvcihlPWM8Yj9jOmMrMTtudWxsPT09cCYmZTxuOylwPXRoaXMub0FwaS5fZm5Db2x1bW5JbmRleFRvVmlzaWJsZShhLGUpLGUrKztsPWEublRIZWFkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ciIpO2U9MDtmb3IoZj1sLmxlbmd0aDtlPGY7ZSsrKXgobFtlXSxxLHApO2lmKG51bGwhPT1hLm5URm9vdClmb3IobD1hLm5URm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidHIiKSxlPTAsZj1sLmxlbmd0aDtlPGY7ZSsrKXgobFtlXSxxLHApO2U9MDtmb3IoZj1hLmFvRGF0YS5sZW5ndGg7ZTxmO2UrKyludWxsIT09YS5hb0RhdGFbZV0ublRyJiYKeChhLmFvRGF0YVtlXS5uVHIscSxwKX11KGEuYW9Db2x1bW5zLGIsYyk7ZT0wO2ZvcihmPW47ZTxmO2UrKylhLm9BcGkuX2ZuQ29sdW1uT3B0aW9ucyhhLGUse30pO3UoYS5hb1ByZVNlYXJjaENvbHMsYixjKTtlPTA7Zm9yKGY9YS5hb0RhdGEubGVuZ3RoO2U8ZjtlKyspe3A9YS5hb0RhdGFbZV07aWYobT1wLmFuQ2VsbHMpZm9yKHUobSxiLGMpLGw9MCxxPW0ubGVuZ3RoO2w8cTtsKyspbVtsXSYmbVtsXS5fRFRfQ2VsbEluZGV4JiYobVtsXS5fRFRfQ2VsbEluZGV4LmNvbHVtbj1sKTsiZG9tIiE9PXAuc3JjJiZkLmlzQXJyYXkocC5fYURhdGEpJiZ1KHAuX2FEYXRhLGIsYyl9ZT0wO2ZvcihmPWEuYW9IZWFkZXIubGVuZ3RoO2U8ZjtlKyspdShhLmFvSGVhZGVyW2VdLGIsYyk7aWYobnVsbCE9PWEuYW9Gb290ZXIpZm9yKGU9MCxmPWEuYW9Gb290ZXIubGVuZ3RoO2U8ZjtlKyspdShhLmFvRm9vdGVyW2VdLGIsYyk7KGh8fGg9PT13KSYmZC5mbi5kYXRhVGFibGUuQXBpKGEpLnJvd3MoKS5pbnZhbGlkYXRlKCk7CmU9MDtmb3IoZj1uO2U8ZjtlKyspZChhLmFvQ29sdW1uc1tlXS5uVGgpLm9mZigiLkRUIiksdGhpcy5vQXBpLl9mblNvcnRBdHRhY2hMaXN0ZW5lcihhLGEuYW9Db2x1bW5zW2VdLm5UaCxlKTtkKGEub0luc3RhbmNlKS50cmlnZ2VyKCJjb2x1bW4tcmVvcmRlci5kdCIsW2Ese2Zyb206Yix0bzpjLG1hcHBpbmc6ayxkcm9wOmcsaUZyb206YixpVG86YyxhaUludmVydE1hcHBpbmc6a31dKX19O3ZhciBrPWZ1bmN0aW9uKGEsYil7YT0obmV3IGQuZm4uZGF0YVRhYmxlLkFwaShhKSkuc2V0dGluZ3MoKVswXTtpZihhLl9jb2xSZW9yZGVyKXJldHVybiBhLl9jb2xSZW9yZGVyOyEwPT09YiYmKGI9e30pO3ZhciBjPWQuZm4uZGF0YVRhYmxlLmNhbWVsVG9IdW5nYXJpYW47YyYmKGMoay5kZWZhdWx0cyxrLmRlZmF1bHRzLCEwKSxjKGsuZGVmYXVsdHMsYnx8e30pKTt0aGlzLnM9e2R0Om51bGwsZW5hYmxlOm51bGwsaW5pdDpkLmV4dGVuZCghMCx7fSxrLmRlZmF1bHRzLGIpLGZpeGVkOjAsZml4ZWRSaWdodDowLApyZW9yZGVyQ2FsbGJhY2s6bnVsbCxtb3VzZTp7c3RhcnRYOi0xLHN0YXJ0WTotMSxvZmZzZXRYOi0xLG9mZnNldFk6LTEsdGFyZ2V0Oi0xLHRhcmdldEluZGV4Oi0xLGZyb21JbmRleDotMX0sYW9UYXJnZXRzOltdfTt0aGlzLmRvbT17ZHJhZzpudWxsLHBvaW50ZXI6bnVsbH07dGhpcy5zLmVuYWJsZT10aGlzLnMuaW5pdC5iRW5hYmxlO3RoaXMucy5kdD1hO3RoaXMucy5kdC5fY29sUmVvcmRlcj10aGlzO3RoaXMuX2ZuQ29uc3RydWN0KCk7cmV0dXJuIHRoaXN9O2QuZXh0ZW5kKGsucHJvdG90eXBlLHtmbkVuYWJsZTpmdW5jdGlvbihhKXtpZighMT09PWEpcmV0dXJuIGZuRGlzYWJsZSgpO3RoaXMucy5lbmFibGU9ITB9LGZuRGlzYWJsZTpmdW5jdGlvbigpe3RoaXMucy5lbmFibGU9ITF9LGZuUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9mbk9yZGVyQ29sdW1ucyh0aGlzLmZuT3JkZXIoKSk7cmV0dXJuIHRoaXN9LGZuR2V0Q3VycmVudE9yZGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm5PcmRlcigpfSwKZm5PcmRlcjpmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGcsaD10aGlzLnMuZHQuYW9Db2x1bW5zO2lmKGE9PT13KXtiPTA7Zm9yKGc9aC5sZW5ndGg7YjxnO2IrKyljLnB1c2goaFtiXS5fQ29sUmVvcmRlcl9pT3JpZ0NvbCk7cmV0dXJuIGN9aWYoYil7aD10aGlzLmZuT3JkZXIoKTtiPTA7Zm9yKGc9YS5sZW5ndGg7YjxnO2IrKyljLnB1c2goZC5pbkFycmF5KGFbYl0saCkpO2E9Y310aGlzLl9mbk9yZGVyQ29sdW1ucyh2KGEpKTtyZXR1cm4gdGhpc30sZm5UcmFuc3Bvc2U6ZnVuY3Rpb24oYSxiKXtifHwoYj0idG9DdXJyZW50Iik7dmFyIGM9dGhpcy5mbk9yZGVyKCksZz10aGlzLnMuZHQuYW9Db2x1bW5zO3JldHVybiJ0b0N1cnJlbnQiPT09Yj9kLmlzQXJyYXkoYSk/ZC5tYXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gZC5pbkFycmF5KGEsYyl9KTpkLmluQXJyYXkoYSxjKTpkLmlzQXJyYXkoYSk/ZC5tYXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gZ1thXS5fQ29sUmVvcmRlcl9pT3JpZ0NvbH0pOgpnW2FdLl9Db2xSZW9yZGVyX2lPcmlnQ29sfSxfZm5Db25zdHJ1Y3Q6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9dGhpcy5zLmR0LmFvQ29sdW1ucy5sZW5ndGgsYz10aGlzLnMuZHQublRhYmxlLGc7dGhpcy5zLmluaXQuaUZpeGVkQ29sdW1ucyYmKHRoaXMucy5maXhlZD10aGlzLnMuaW5pdC5pRml4ZWRDb2x1bW5zKTt0aGlzLnMuaW5pdC5pRml4ZWRDb2x1bW5zTGVmdCYmKHRoaXMucy5maXhlZD10aGlzLnMuaW5pdC5pRml4ZWRDb2x1bW5zTGVmdCk7dGhpcy5zLmZpeGVkUmlnaHQ9dGhpcy5zLmluaXQuaUZpeGVkQ29sdW1uc1JpZ2h0P3RoaXMucy5pbml0LmlGaXhlZENvbHVtbnNSaWdodDowO3RoaXMucy5pbml0LmZuUmVvcmRlckNhbGxiYWNrJiYodGhpcy5zLnJlb3JkZXJDYWxsYmFjaz10aGlzLnMuaW5pdC5mblJlb3JkZXJDYWxsYmFjayk7Zm9yKGc9MDtnPGI7ZysrKWc+dGhpcy5zLmZpeGVkLTEmJmc8Yi10aGlzLnMuZml4ZWRSaWdodCYmdGhpcy5fZm5Nb3VzZUxpc3RlbmVyKGcsCnRoaXMucy5kdC5hb0NvbHVtbnNbZ10ublRoKSx0aGlzLnMuZHQuYW9Db2x1bW5zW2ddLl9Db2xSZW9yZGVyX2lPcmlnQ29sPWc7dGhpcy5zLmR0Lm9BcGkuX2ZuQ2FsbGJhY2tSZWcodGhpcy5zLmR0LCJhb1N0YXRlU2F2ZVBhcmFtcyIsZnVuY3Rpb24oYixjKXthLl9mblN0YXRlU2F2ZS5jYWxsKGEsYyl9LCJDb2xSZW9yZGVyX1N0YXRlIik7dmFyIGg9bnVsbDt0aGlzLnMuaW5pdC5haU9yZGVyJiYoaD10aGlzLnMuaW5pdC5haU9yZGVyLnNsaWNlKCkpO3RoaXMucy5kdC5vTG9hZGVkU3RhdGUmJiJ1bmRlZmluZWQiIT10eXBlb2YgdGhpcy5zLmR0Lm9Mb2FkZWRTdGF0ZS5Db2xSZW9yZGVyJiZ0aGlzLnMuZHQub0xvYWRlZFN0YXRlLkNvbFJlb3JkZXIubGVuZ3RoPT10aGlzLnMuZHQuYW9Db2x1bW5zLmxlbmd0aCYmKGg9dGhpcy5zLmR0Lm9Mb2FkZWRTdGF0ZS5Db2xSZW9yZGVyKTtpZihoKWlmKGEucy5kdC5fYkluaXRDb21wbGV0ZSliPXYoaCksYS5fZm5PcmRlckNvbHVtbnMuY2FsbChhLApiKTtlbHNle3ZhciBmPSExO2QoYykub24oImRyYXcuZHQuY29sUmVvcmRlciIsZnVuY3Rpb24oKXtpZighYS5zLmR0Ll9iSW5pdENvbXBsZXRlJiYhZil7Zj0hMDt2YXIgYj12KGgpO2EuX2ZuT3JkZXJDb2x1bW5zLmNhbGwoYSxiKX19KX1lbHNlIHRoaXMuX2ZuU2V0Q29sdW1uSW5kZXhlcygpO2QoYykub24oImRlc3Ryb3kuZHQuY29sUmVvcmRlciIsZnVuY3Rpb24oKXtkKGMpLm9mZigiZGVzdHJveS5kdC5jb2xSZW9yZGVyIGRyYXcuZHQuY29sUmVvcmRlciIpO2QuZWFjaChhLnMuZHQuYW9Db2x1bW5zLGZ1bmN0aW9uKGEsYil7ZChiLm5UaCkub2ZmKCIuQ29sUmVvcmRlciIpO2QoYi5uVGgpLnJlbW92ZUF0dHIoImRhdGEtY29sdW1uLWluZGV4Iil9KTthLnMuZHQuX2NvbFJlb3JkZXI9bnVsbDthLnM9bnVsbH0pfSxfZm5PcmRlckNvbHVtbnM6ZnVuY3Rpb24oYSl7dmFyIGI9ITE7aWYoYS5sZW5ndGghPXRoaXMucy5kdC5hb0NvbHVtbnMubGVuZ3RoKXRoaXMucy5kdC5vSW5zdGFuY2Uub0FwaS5fZm5Mb2codGhpcy5zLmR0LAoxLCJDb2xSZW9yZGVyIC0gYXJyYXkgcmVvcmRlciBkb2VzIG5vdCBtYXRjaCBrbm93biBudW1iZXIgb2YgY29sdW1ucy4gU2tpcHBpbmcuIik7ZWxzZXtmb3IodmFyIGM9MCxnPWEubGVuZ3RoO2M8ZztjKyspe3ZhciBoPWQuaW5BcnJheShjLGEpO2MhPWgmJih1KGEsaCxjKSx0aGlzLnMuZHQub0luc3RhbmNlLmZuQ29sUmVvcmRlcihoLGMsITAsITEpLGI9ITApfXRoaXMuX2ZuU2V0Q29sdW1uSW5kZXhlcygpO2ImJihkLmZuLmRhdGFUYWJsZS5BcGkodGhpcy5zLmR0KS5yb3dzKCkuaW52YWxpZGF0ZSgpLCIiPT09dGhpcy5zLmR0Lm9TY3JvbGwuc1gmJiIiPT09dGhpcy5zLmR0Lm9TY3JvbGwuc1l8fHRoaXMucy5kdC5vSW5zdGFuY2UuZm5BZGp1c3RDb2x1bW5TaXppbmcoITEpLHRoaXMucy5kdC5vSW5zdGFuY2Uub0FwaS5fZm5TYXZlU3RhdGUodGhpcy5zLmR0KSxudWxsIT09dGhpcy5zLnJlb3JkZXJDYWxsYmFjayYmdGhpcy5zLnJlb3JkZXJDYWxsYmFjay5jYWxsKHRoaXMpKX19LApfZm5TdGF0ZVNhdmU6ZnVuY3Rpb24oYSl7dmFyIGIsYyxnPXRoaXMucy5kdC5hb0NvbHVtbnM7YS5Db2xSZW9yZGVyPVtdO2lmKGEuYWFTb3J0aW5nKXtmb3IoYj0wO2I8YS5hYVNvcnRpbmcubGVuZ3RoO2IrKylhLmFhU29ydGluZ1tiXVswXT1nW2EuYWFTb3J0aW5nW2JdWzBdXS5fQ29sUmVvcmRlcl9pT3JpZ0NvbDt2YXIgaD1kLmV4dGVuZCghMCxbXSxhLmFvU2VhcmNoQ29scyk7Yj0wO2ZvcihjPWcubGVuZ3RoO2I8YztiKyspe3ZhciBmPWdbYl0uX0NvbFJlb3JkZXJfaU9yaWdDb2w7YS5hb1NlYXJjaENvbHNbZl09aFtiXTthLmFiVmlzQ29sc1tmXT1nW2JdLmJWaXNpYmxlO2EuQ29sUmVvcmRlci5wdXNoKGYpfX1lbHNlIGlmKGEub3JkZXIpe2ZvcihiPTA7YjxhLm9yZGVyLmxlbmd0aDtiKyspYS5vcmRlcltiXVswXT1nW2Eub3JkZXJbYl1bMF1dLl9Db2xSZW9yZGVyX2lPcmlnQ29sO2g9ZC5leHRlbmQoITAsW10sYS5jb2x1bW5zKTtiPTA7Zm9yKGM9Zy5sZW5ndGg7YjxjO2IrKylmPQpnW2JdLl9Db2xSZW9yZGVyX2lPcmlnQ29sLGEuY29sdW1uc1tmXT1oW2JdLGEuQ29sUmVvcmRlci5wdXNoKGYpfX0sX2ZuTW91c2VMaXN0ZW5lcjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7ZChiKS5vbigibW91c2Vkb3duLkNvbFJlb3JkZXIiLGZ1bmN0aW9uKGEpe2Mucy5lbmFibGUmJjE9PT1hLndoaWNoJiZjLl9mbk1vdXNlRG93bi5jYWxsKGMsYSxiKX0pLm9uKCJ0b3VjaHN0YXJ0LkNvbFJlb3JkZXIiLGZ1bmN0aW9uKGEpe2Mucy5lbmFibGUmJmMuX2ZuTW91c2VEb3duLmNhbGwoYyxhLGIpfSl9LF9mbk1vdXNlRG93bjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMsZz1kKGEudGFyZ2V0KS5jbG9zZXN0KCJ0aCwgdGQiKS5vZmZzZXQoKTtiPXBhcnNlSW50KGQoYikuYXR0cigiZGF0YS1jb2x1bW4taW5kZXgiKSwxMCk7YiE9PXcmJih0aGlzLnMubW91c2Uuc3RhcnRYPXRoaXMuX2ZuQ3Vyc29yUG9zaXRpb24oYSwicGFnZVgiKSx0aGlzLnMubW91c2Uuc3RhcnRZPXRoaXMuX2ZuQ3Vyc29yUG9zaXRpb24oYSwKInBhZ2VZIiksdGhpcy5zLm1vdXNlLm9mZnNldFg9dGhpcy5fZm5DdXJzb3JQb3NpdGlvbihhLCJwYWdlWCIpLWcubGVmdCx0aGlzLnMubW91c2Uub2Zmc2V0WT10aGlzLl9mbkN1cnNvclBvc2l0aW9uKGEsInBhZ2VZIiktZy50b3AsdGhpcy5zLm1vdXNlLnRhcmdldD10aGlzLnMuZHQuYW9Db2x1bW5zW2JdLm5UaCx0aGlzLnMubW91c2UudGFyZ2V0SW5kZXg9Yix0aGlzLnMubW91c2UuZnJvbUluZGV4PWIsdGhpcy5fZm5SZWdpb25zKCksZChyKS5vbigibW91c2Vtb3ZlLkNvbFJlb3JkZXIgdG91Y2htb3ZlLkNvbFJlb3JkZXIiLGZ1bmN0aW9uKGEpe2MuX2ZuTW91c2VNb3ZlLmNhbGwoYyxhKX0pLm9uKCJtb3VzZXVwLkNvbFJlb3JkZXIgdG91Y2hlbmQuQ29sUmVvcmRlciIsZnVuY3Rpb24oYSl7Yy5fZm5Nb3VzZVVwLmNhbGwoYyxhKX0pKX0sX2ZuTW91c2VNb3ZlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7aWYobnVsbD09PXRoaXMuZG9tLmRyYWcpe2lmKDU+TWF0aC5wb3coTWF0aC5wb3codGhpcy5fZm5DdXJzb3JQb3NpdGlvbihhLAoicGFnZVgiKS10aGlzLnMubW91c2Uuc3RhcnRYLDIpK01hdGgucG93KHRoaXMuX2ZuQ3Vyc29yUG9zaXRpb24oYSwicGFnZVkiKS10aGlzLnMubW91c2Uuc3RhcnRZLDIpLC41KSlyZXR1cm47dGhpcy5fZm5DcmVhdGVEcmFnTm9kZSgpfXRoaXMuZG9tLmRyYWcuY3NzKHtsZWZ0OnRoaXMuX2ZuQ3Vyc29yUG9zaXRpb24oYSwicGFnZVgiKS10aGlzLnMubW91c2Uub2Zmc2V0WCx0b3A6dGhpcy5fZm5DdXJzb3JQb3NpdGlvbihhLCJwYWdlWSIpLXRoaXMucy5tb3VzZS5vZmZzZXRZfSk7dmFyIGM9dGhpcy5zLm1vdXNlLnRvSW5kZXg7YT10aGlzLl9mbkN1cnNvclBvc2l0aW9uKGEsInBhZ2VYIik7Zm9yKHZhciBkPWZ1bmN0aW9uKGEpe2Zvcig7MDw9YTspe2EtLTtpZigwPj1hKXJldHVybiBudWxsO2lmKGIucy5hb1RhcmdldHNbYSsxXS54IT09Yi5zLmFvVGFyZ2V0c1thXS54KXJldHVybiBiLnMuYW9UYXJnZXRzW2FdfX0saD1mdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8Yi5zLmFvVGFyZ2V0cy5sZW5ndGgtCjE7YSsrKWlmKGIucy5hb1RhcmdldHNbYV0ueCE9PWIucy5hb1RhcmdldHNbYSsxXS54KXJldHVybiBiLnMuYW9UYXJnZXRzW2FdfSxmPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPWIucy5hb1RhcmdldHMubGVuZ3RoLTE7MDxhO2EtLSlpZihiLnMuYW9UYXJnZXRzW2FdLnghPT1iLnMuYW9UYXJnZXRzW2EtMV0ueClyZXR1cm4gYi5zLmFvVGFyZ2V0c1thXX0saz0xO2s8dGhpcy5zLmFvVGFyZ2V0cy5sZW5ndGg7aysrKXt2YXIgbj1kKGspO258fChuPWgoKSk7dmFyIHE9bi54Kyh0aGlzLnMuYW9UYXJnZXRzW2tdLngtbi54KS8yO2lmKHRoaXMuX2ZuSXNMdHIoKSl7aWYoYTxxKXt2YXIgbD1uO2JyZWFrfX1lbHNlIGlmKGE+cSl7bD1uO2JyZWFrfX1sPyh0aGlzLmRvbS5wb2ludGVyLmNzcygibGVmdCIsbC54KSx0aGlzLnMubW91c2UudG9JbmRleD1sLnRvKToodGhpcy5kb20ucG9pbnRlci5jc3MoImxlZnQiLGYoKS54KSx0aGlzLnMubW91c2UudG9JbmRleD1mKCkudG8pO3RoaXMucy5pbml0LmJSZWFsdGltZSYmCmMhPT10aGlzLnMubW91c2UudG9JbmRleCYmKHRoaXMucy5kdC5vSW5zdGFuY2UuZm5Db2xSZW9yZGVyKHRoaXMucy5tb3VzZS5mcm9tSW5kZXgsdGhpcy5zLm1vdXNlLnRvSW5kZXgpLHRoaXMucy5tb3VzZS5mcm9tSW5kZXg9dGhpcy5zLm1vdXNlLnRvSW5kZXgsIiI9PT10aGlzLnMuZHQub1Njcm9sbC5zWCYmIiI9PT10aGlzLnMuZHQub1Njcm9sbC5zWXx8dGhpcy5zLmR0Lm9JbnN0YW5jZS5mbkFkanVzdENvbHVtblNpemluZyghMSksdGhpcy5fZm5SZWdpb25zKCkpfSxfZm5Nb3VzZVVwOmZ1bmN0aW9uKGEpe2Qocikub2ZmKCIuQ29sUmVvcmRlciIpO251bGwhPT10aGlzLmRvbS5kcmFnJiYodGhpcy5kb20uZHJhZy5yZW1vdmUoKSx0aGlzLmRvbS5wb2ludGVyLnJlbW92ZSgpLHRoaXMuZG9tLmRyYWc9bnVsbCx0aGlzLmRvbS5wb2ludGVyPW51bGwsdGhpcy5zLmR0Lm9JbnN0YW5jZS5mbkNvbFJlb3JkZXIodGhpcy5zLm1vdXNlLmZyb21JbmRleCx0aGlzLnMubW91c2UudG9JbmRleCwKITApLHRoaXMuX2ZuU2V0Q29sdW1uSW5kZXhlcygpLCIiPT09dGhpcy5zLmR0Lm9TY3JvbGwuc1gmJiIiPT09dGhpcy5zLmR0Lm9TY3JvbGwuc1l8fHRoaXMucy5kdC5vSW5zdGFuY2UuZm5BZGp1c3RDb2x1bW5TaXppbmcoITEpLHRoaXMucy5kdC5vSW5zdGFuY2Uub0FwaS5fZm5TYXZlU3RhdGUodGhpcy5zLmR0KSxudWxsIT09dGhpcy5zLnJlb3JkZXJDYWxsYmFjayYmdGhpcy5zLnJlb3JkZXJDYWxsYmFjay5jYWxsKHRoaXMpKX0sX2ZuUmVnaW9uczpmdW5jdGlvbigpe3ZhciBhPXRoaXMucy5kdC5hb0NvbHVtbnMsYj10aGlzLl9mbklzTHRyKCk7dGhpcy5zLmFvVGFyZ2V0cy5zcGxpY2UoMCx0aGlzLnMuYW9UYXJnZXRzLmxlbmd0aCk7dmFyIGM9ZCh0aGlzLnMuZHQublRhYmxlKS5vZmZzZXQoKS5sZWZ0LGc9W107ZC5lYWNoKGEsZnVuY3Rpb24oYSxmKXtpZihmLmJWaXNpYmxlJiYibm9uZSIhPT1mLm5UaC5zdHlsZS5kaXNwbGF5KXtmPWQoZi5uVGgpO3ZhciBoPWYub2Zmc2V0KCkubGVmdDsKYiYmKGgrPWYub3V0ZXJXaWR0aCgpKTtnLnB1c2goe2luZGV4OmEsYm91bmQ6aH0pO2M9aH1lbHNlIGcucHVzaCh7aW5kZXg6YSxib3VuZDpjfSl9KTt2YXIgaD1nWzBdO2E9ZChhW2guaW5kZXhdLm5UaCkub3V0ZXJXaWR0aCgpO3RoaXMucy5hb1RhcmdldHMucHVzaCh7dG86MCx4OmguYm91bmQtYX0pO2ZvcihoPTA7aDxnLmxlbmd0aDtoKyspe2E9Z1toXTt2YXIgZj1hLmluZGV4O2EuaW5kZXg8dGhpcy5zLm1vdXNlLmZyb21JbmRleCYmZisrO3RoaXMucy5hb1RhcmdldHMucHVzaCh7dG86Zix4OmEuYm91bmR9KX0wIT09dGhpcy5zLmZpeGVkUmlnaHQmJnRoaXMucy5hb1RhcmdldHMuc3BsaWNlKHRoaXMucy5hb1RhcmdldHMubGVuZ3RoLXRoaXMucy5maXhlZFJpZ2h0KTswIT09dGhpcy5zLmZpeGVkJiZ0aGlzLnMuYW9UYXJnZXRzLnNwbGljZSgwLHRoaXMucy5maXhlZCl9LF9mbkNyZWF0ZURyYWdOb2RlOmZ1bmN0aW9uKCl7dmFyIGE9IiIhPT10aGlzLnMuZHQub1Njcm9sbC5zWHx8CiIiIT09dGhpcy5zLmR0Lm9TY3JvbGwuc1ksYj10aGlzLnMuZHQuYW9Db2x1bW5zW3RoaXMucy5tb3VzZS50YXJnZXRJbmRleF0ublRoLGM9Yi5wYXJlbnROb2RlLGc9Yy5wYXJlbnROb2RlLGg9Zy5wYXJlbnROb2RlLGY9ZChiKS5jbG9uZSgpO3RoaXMuZG9tLmRyYWc9ZChoLmNsb25lTm9kZSghMSkpLmFkZENsYXNzKCJEVENSX2Nsb25lZFRhYmxlIikuYXBwZW5kKGQoZy5jbG9uZU5vZGUoITEpKS5hcHBlbmQoZChjLmNsb25lTm9kZSghMSkpLmFwcGVuZChmWzBdKSkpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsd2lkdGg6ZChiKS5vdXRlcldpZHRoKCksaGVpZ2h0OmQoYikub3V0ZXJIZWlnaHQoKX0pLmFwcGVuZFRvKCJib2R5Iik7dGhpcy5kb20ucG9pbnRlcj1kKCI8ZGl2PjwvZGl2PiIpLmFkZENsYXNzKCJEVENSX3BvaW50ZXIiKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOmE/ZCgiZGl2LmRhdGFUYWJsZXNfc2Nyb2xsIix0aGlzLnMuZHQublRhYmxlV3JhcHBlcikub2Zmc2V0KCkudG9wOgpkKHRoaXMucy5kdC5uVGFibGUpLm9mZnNldCgpLnRvcCxoZWlnaHQ6YT9kKCJkaXYuZGF0YVRhYmxlc19zY3JvbGwiLHRoaXMucy5kdC5uVGFibGVXcmFwcGVyKS5oZWlnaHQoKTpkKHRoaXMucy5kdC5uVGFibGUpLmhlaWdodCgpfSkuYXBwZW5kVG8oImJvZHkiKX0sX2ZuU2V0Q29sdW1uSW5kZXhlczpmdW5jdGlvbigpe2QuZWFjaCh0aGlzLnMuZHQuYW9Db2x1bW5zLGZ1bmN0aW9uKGEsYil7ZChiLm5UaCkuYXR0cigiZGF0YS1jb2x1bW4taW5kZXgiLGEpfSl9LF9mbkN1cnNvclBvc2l0aW9uOmZ1bmN0aW9uKGEsYil7cmV0dXJuLTEhPT1hLnR5cGUuaW5kZXhPZigidG91Y2giKT9hLm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXVtiXTphW2JdfSxfZm5Jc0x0cjpmdW5jdGlvbigpe3JldHVybiJydGwiIT09ZCh0aGlzLnMuZHQublRhYmxlKS5jc3MoImRpcmVjdGlvbiIpfX0pO2suZGVmYXVsdHM9e2FpT3JkZXI6bnVsbCxiRW5hYmxlOiEwLGJSZWFsdGltZTohMCxpRml4ZWRDb2x1bW5zTGVmdDowLAppRml4ZWRDb2x1bW5zUmlnaHQ6MCxmblJlb3JkZXJDYWxsYmFjazpudWxsfTtrLnZlcnNpb249IjEuNS4yIjtkLmZuLmRhdGFUYWJsZS5Db2xSZW9yZGVyPWs7ZC5mbi5EYXRhVGFibGUuQ29sUmVvcmRlcj1rOyJmdW5jdGlvbiI9PXR5cGVvZiBkLmZuLmRhdGFUYWJsZSYmImZ1bmN0aW9uIj09dHlwZW9mIGQuZm4uZGF0YVRhYmxlRXh0LmZuVmVyc2lvbkNoZWNrJiZkLmZuLmRhdGFUYWJsZUV4dC5mblZlcnNpb25DaGVjaygiMS4xMC44Iik/ZC5mbi5kYXRhVGFibGVFeHQuYW9GZWF0dXJlcy5wdXNoKHtmbkluaXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5vSW5zdGFuY2U7YS5fY29sUmVvcmRlcj9iLm9BcGkuX2ZuTG9nKGEsMSwiQ29sUmVvcmRlciBhdHRlbXB0ZWQgdG8gaW5pdGlhbGlzZSB0d2ljZS4gSWdub3Jpbmcgc2Vjb25kIik6KGI9YS5vSW5pdCxuZXcgayhhLGIuY29sUmVvcmRlcnx8Yi5vQ29sUmVvcmRlcnx8e30pKTtyZXR1cm4gbnVsbH0sY0ZlYXR1cmU6IlIiLHNGZWF0dXJlOiJDb2xSZW9yZGVyIn0pOgphbGVydCgiV2FybmluZzogQ29sUmVvcmRlciByZXF1aXJlcyBEYXRhVGFibGVzIDEuMTAuOCBvciBncmVhdGVyIC0gd3d3LmRhdGF0YWJsZXMubmV0L2Rvd25sb2FkIik7ZChyKS5vbigicHJlSW5pdC5kdC5jb2xSZW9yZGVyIixmdW5jdGlvbihhLGIpe2lmKCJkdCI9PT1hLm5hbWVzcGFjZSl7YT1iLm9Jbml0LmNvbFJlb3JkZXI7dmFyIGM9eS5kZWZhdWx0cy5jb2xSZW9yZGVyO2lmKGF8fGMpYz1kLmV4dGVuZCh7fSxhLGMpLCExIT09YSYmbmV3IGsoYixjKX19KTtkLmZuLmRhdGFUYWJsZS5BcGkucmVnaXN0ZXIoImNvbFJlb3JkZXIucmVzZXQoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGEpe2EuX2NvbFJlb3JkZXIuZm5SZXNldCgpfSl9KTtkLmZuLmRhdGFUYWJsZS5BcGkucmVnaXN0ZXIoImNvbFJlb3JkZXIub3JkZXIoKSIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT90aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYyl7Yy5fY29sUmVvcmRlci5mbk9yZGVyKGEsCmIpfSk6dGhpcy5jb250ZXh0Lmxlbmd0aD90aGlzLmNvbnRleHRbMF0uX2NvbFJlb3JkZXIuZm5PcmRlcigpOm51bGx9KTtkLmZuLmRhdGFUYWJsZS5BcGkucmVnaXN0ZXIoImNvbFJlb3JkZXIudHJhbnNwb3NlKCkiLGZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuY29udGV4dC5sZW5ndGgmJnRoaXMuY29udGV4dFswXS5fY29sUmVvcmRlcj90aGlzLmNvbnRleHRbMF0uX2NvbFJlb3JkZXIuZm5UcmFuc3Bvc2UoYSxiKTphfSk7ZC5mbi5kYXRhVGFibGUuQXBpLnJlZ2lzdGVyKCJjb2xSZW9yZGVyLm1vdmUoKSIsZnVuY3Rpb24oYSxiLGMsZCl7dGhpcy5jb250ZXh0Lmxlbmd0aCYmKHRoaXMuY29udGV4dFswXS5fY29sUmVvcmRlci5zLmR0Lm9JbnN0YW5jZS5mbkNvbFJlb3JkZXIoYSxiLGMsZCksdGhpcy5jb250ZXh0WzBdLl9jb2xSZW9yZGVyLl9mblNldENvbHVtbkluZGV4ZXMoKSk7cmV0dXJuIHRoaXN9KTtkLmZuLmRhdGFUYWJsZS5BcGkucmVnaXN0ZXIoImNvbFJlb3JkZXIuZW5hYmxlKCkiLApmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGIpe2IuX2NvbFJlb3JkZXImJmIuX2NvbFJlb3JkZXIuZm5FbmFibGUoYSl9KX0pO2QuZm4uZGF0YVRhYmxlLkFwaS5yZWdpc3RlcigiY29sUmVvcmRlci5kaXNhYmxlKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihhKXthLl9jb2xSZW9yZGVyJiZhLl9jb2xSZW9yZGVyLmZuRGlzYWJsZSgpfSl9KTtyZXR1cm4ga30pOwoKCi8qIQogICBDb3B5cmlnaHQgMjAxMC0yMDE4IFNwcnlNZWRpYSBMdGQuCgogVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBhdmFpbGFibGUgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlOgogICBNSVQgbGljZW5zZSAtIGh0dHA6Ly9kYXRhdGFibGVzLm5ldC9saWNlbnNlL21pdAoKIFRoaXMgc291cmNlIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgbGljZW5zZSBmaWxlcyBmb3IgZGV0YWlscy4KCiBGb3IgZGV0YWlscyBwbGVhc2UgcmVmZXIgdG86IGh0dHA6Ly93d3cuZGF0YXRhYmxlcy5uZXQKIEZpeGVkQ29sdW1ucyAzLjMuMAogwqkyMDEwLTIwMTggU3ByeU1lZGlhIEx0ZCAtIGRhdGF0YWJsZXMubmV0L2xpY2Vuc2UKKi8KdmFyICRqc2NvbXA9JGpzY29tcHx8e307JGpzY29tcC5zY29wZT17fTskanNjb21wLmZpbmRJbnRlcm5hbD1mdW5jdGlvbihjLGcsZSl7YyBpbnN0YW5jZW9mIFN0cmluZyYmKGM9U3RyaW5nKGMpKTtmb3IodmFyIHE9Yy5sZW5ndGgsbD0wO2w8cTtsKyspe3ZhciB1PWNbbF07aWYoZy5jYWxsKGUsdSxsLGMpKXJldHVybntpOmwsdjp1fX1yZXR1cm57aTotMSx2OnZvaWQgMH19OyRqc2NvbXAuQVNTVU1FX0VTNT0hMTskanNjb21wLkFTU1VNRV9OT19OQVRJVkVfTUFQPSExOyRqc2NvbXAuQVNTVU1FX05PX05BVElWRV9TRVQ9ITE7JGpzY29tcC5TSU1QTEVfRlJPVU5EX1BPTFlGSUxMPSExOwokanNjb21wLmRlZmluZVByb3BlcnR5PSRqc2NvbXAuQVNTVU1FX0VTNXx8ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihjLGcsZSl7YyE9QXJyYXkucHJvdG90eXBlJiZjIT1PYmplY3QucHJvdG90eXBlJiYoY1tnXT1lLnZhbHVlKX07JGpzY29tcC5nZXRHbG9iYWw9ZnVuY3Rpb24oYyl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdz09PWM/YzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmbnVsbCE9Z2xvYmFsP2dsb2JhbDpjfTskanNjb21wLmdsb2JhbD0kanNjb21wLmdldEdsb2JhbCh0aGlzKTsKJGpzY29tcC5wb2x5ZmlsbD1mdW5jdGlvbihjLGcsZSxxKXtpZihnKXtlPSRqc2NvbXAuZ2xvYmFsO2M9Yy5zcGxpdCgiLiIpO2ZvcihxPTA7cTxjLmxlbmd0aC0xO3ErKyl7dmFyIGw9Y1txXTtsIGluIGV8fChlW2xdPXt9KTtlPWVbbF19Yz1jW2MubGVuZ3RoLTFdO3E9ZVtjXTtnPWcocSk7ZyE9cSYmbnVsbCE9ZyYmJGpzY29tcC5kZWZpbmVQcm9wZXJ0eShlLGMse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpnfSl9fTskanNjb21wLnBvbHlmaWxsKCJBcnJheS5wcm90b3R5cGUuZmluZCIsZnVuY3Rpb24oYyl7cmV0dXJuIGM/YzpmdW5jdGlvbihjLGUpe3JldHVybiAkanNjb21wLmZpbmRJbnRlcm5hbCh0aGlzLGMsZSkudn19LCJlczYiLCJlczMiKTsKKGZ1bmN0aW9uKGMpeyJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImpxdWVyeSIsImRhdGF0YWJsZXMubmV0Il0sZnVuY3Rpb24oZyl7cmV0dXJuIGMoZyx3aW5kb3csZG9jdW1lbnQpfSk6Im9iamVjdCI9PT10eXBlb2YgZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1mdW5jdGlvbihnLGUpe2d8fChnPXdpbmRvdyk7ZSYmZS5mbi5kYXRhVGFibGV8fChlPXJlcXVpcmUoImRhdGF0YWJsZXMubmV0IikoZyxlKS4kKTtyZXR1cm4gYyhlLGcsZy5kb2N1bWVudCl9OmMoalF1ZXJ5LHdpbmRvdyxkb2N1bWVudCl9KShmdW5jdGlvbihjLGcsZSxxKXt2YXIgbD1jLmZuLmRhdGFUYWJsZSx1LHA9ZnVuY3Rpb24oYSxiKXt2YXIgZD10aGlzO2lmKHRoaXMgaW5zdGFuY2VvZiBwKXtpZihiPT09cXx8ITA9PT1iKWI9e307dmFyIGg9Yy5mbi5kYXRhVGFibGUuY2FtZWxUb0h1bmdhcmlhbjtoJiYoaChwLmRlZmF1bHRzLHAuZGVmYXVsdHMsITApLGgocC5kZWZhdWx0cywKYikpO2E9KG5ldyBjLmZuLmRhdGFUYWJsZS5BcGkoYSkpLnNldHRpbmdzKClbMF07dGhpcy5zPXtkdDphLGlUYWJsZUNvbHVtbnM6YS5hb0NvbHVtbnMubGVuZ3RoLGFpT3V0ZXJXaWR0aHM6W10sYWlJbm5lcldpZHRoczpbXSxydGw6InJ0bCI9PT1jKGEublRhYmxlKS5jc3MoImRpcmVjdGlvbiIpfTt0aGlzLmRvbT17c2Nyb2xsZXI6bnVsbCxoZWFkZXI6bnVsbCxib2R5Om51bGwsZm9vdGVyOm51bGwsZ3JpZDp7d3JhcHBlcjpudWxsLGR0Om51bGwsbGVmdDp7d3JhcHBlcjpudWxsLGhlYWQ6bnVsbCxib2R5Om51bGwsZm9vdDpudWxsfSxyaWdodDp7d3JhcHBlcjpudWxsLGhlYWQ6bnVsbCxib2R5Om51bGwsZm9vdDpudWxsfX0sY2xvbmU6e2xlZnQ6e2hlYWRlcjpudWxsLGJvZHk6bnVsbCxmb290ZXI6bnVsbH0scmlnaHQ6e2hlYWRlcjpudWxsLGJvZHk6bnVsbCxmb290ZXI6bnVsbH19fTtpZihhLl9vRml4ZWRDb2x1bW5zKXRocm93IkZpeGVkQ29sdW1ucyBhbHJlYWR5IGluaXRpYWxpc2VkIG9uIHRoaXMgdGFibGUiOwphLl9vRml4ZWRDb2x1bW5zPXRoaXM7YS5fYkluaXRDb21wbGV0ZT90aGlzLl9mbkNvbnN0cnVjdChiKTphLm9BcGkuX2ZuQ2FsbGJhY2tSZWcoYSwiYW9Jbml0Q29tcGxldGUiLGZ1bmN0aW9uKCl7ZC5fZm5Db25zdHJ1Y3QoYil9LCJGaXhlZENvbHVtbnMiKX1lbHNlIGFsZXJ0KCJGaXhlZENvbHVtbnMgd2FybmluZzogRml4ZWRDb2x1bW5zIG11c3QgYmUgaW5pdGlhbGlzZWQgd2l0aCB0aGUgJ25ldycga2V5d29yZC4iKX07Yy5leHRlbmQocC5wcm90b3R5cGUse2ZuVXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fZm5EcmF3KCEwKX0sZm5SZWRyYXdMYXlvdXQ6ZnVuY3Rpb24oKXt0aGlzLl9mbkNvbENhbGMoKTt0aGlzLl9mbkdyaWRMYXlvdXQoKTt0aGlzLmZuVXBkYXRlKCl9LGZuUmVjYWxjdWxhdGVIZWlnaHQ6ZnVuY3Rpb24oYSl7ZGVsZXRlIGEuX0RUVENfaUhlaWdodDthLnN0eWxlLmhlaWdodD0iYXV0byJ9LGZuU2V0Um93SGVpZ2h0OmZ1bmN0aW9uKGEsYil7YS5zdHlsZS5oZWlnaHQ9CmIrInB4In0sZm5HZXRQb3NpdGlvbjpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnMuZHQub0luc3RhbmNlO2lmKGMoYSkucGFyZW50cygiLkRURkNfQ2xvbmVkIikubGVuZ3RoKXtpZigidHIiPT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBhPWMoYSkuaW5kZXgoKSxiLmZuR2V0UG9zaXRpb24oYygidHIiLHRoaXMucy5kdC5uVEJvZHkpW2FdKTt2YXIgZD1jKGEpLmluZGV4KCk7YT1jKGEucGFyZW50Tm9kZSkuaW5kZXgoKTtyZXR1cm5bYi5mbkdldFBvc2l0aW9uKGMoInRyIix0aGlzLnMuZHQublRCb2R5KVthXSksZCxiLm9BcGkuX2ZuVmlzaWJsZVRvQ29sdW1uSW5kZXgodGhpcy5zLmR0LGQpXX1yZXR1cm4gYi5mbkdldFBvc2l0aW9uKGEpfSxmblRvRml4ZWROb2RlOmZ1bmN0aW9uKGEsYil7dmFyIGQ7Yjx0aGlzLnMuaUxlZnRDb2x1bW5zP2Q9Yyh0aGlzLmRvbS5jbG9uZS5sZWZ0LmJvZHkpLmZpbmQoIltkYXRhLWR0LXJvdz0iK2ErIl1bZGF0YS1kdC1jb2x1bW49IisKYisiXSIpOmI+PXRoaXMucy5pUmlnaHRDb2x1bW5zJiYoZD1jKHRoaXMuZG9tLmNsb25lLnJpZ2h0LmJvZHkpLmZpbmQoIltkYXRhLWR0LXJvdz0iK2ErIl1bZGF0YS1kdC1jb2x1bW49IitiKyJdIikpO3JldHVybiBkJiZkLmxlbmd0aD9kWzBdOihuZXcgYy5mbi5kYXRhVGFibGUuQXBpKHRoaXMucy5kdCkpLmNlbGwoYSxiKS5ub2RlKCl9LF9mbkNvbnN0cnVjdDpmdW5jdGlvbihhKXt2YXIgYj10aGlzO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLnMuZHQub0luc3RhbmNlLmZuVmVyc2lvbkNoZWNrfHwhMCE9PXRoaXMucy5kdC5vSW5zdGFuY2UuZm5WZXJzaW9uQ2hlY2soIjEuOC4wIikpYWxlcnQoIkZpeGVkQ29sdW1ucyAiK3AuVkVSU0lPTisiIHJlcXVpcmVkIERhdGFUYWJsZXMgMS44LjAgb3IgbGF0ZXIuIFBsZWFzZSB1cGdyYWRlIHlvdXIgRGF0YVRhYmxlcyBpbnN0YWxsYXRpb24iKTtlbHNlIGlmKCIiPT09dGhpcy5zLmR0Lm9TY3JvbGwuc1gpdGhpcy5zLmR0Lm9JbnN0YW5jZS5vQXBpLl9mbkxvZyh0aGlzLnMuZHQsCjEsIkZpeGVkQ29sdW1ucyBpcyBub3QgbmVlZGVkIChubyB4LXNjcm9sbGluZyBpbiBEYXRhVGFibGVzIGVuYWJsZWQpLCBzbyBubyBhY3Rpb24gd2lsbCBiZSB0YWtlbi4gVXNlICdGaXhlZEhlYWRlcicgZm9yIGNvbHVtbiBmaXhpbmcgd2hlbiBzY3JvbGxpbmcgaXMgbm90IGVuYWJsZWQiKTtlbHNle3RoaXMucz1jLmV4dGVuZCghMCx0aGlzLnMscC5kZWZhdWx0cyxhKTthPXRoaXMucy5kdC5vQ2xhc3Nlczt0aGlzLmRvbS5ncmlkLmR0PWModGhpcy5zLmR0Lm5UYWJsZSkucGFyZW50cygiZGl2LiIrYS5zU2Nyb2xsV3JhcHBlcilbMF07dGhpcy5kb20uc2Nyb2xsZXI9YygiZGl2LiIrYS5zU2Nyb2xsQm9keSx0aGlzLmRvbS5ncmlkLmR0KVswXTt0aGlzLl9mbkNvbENhbGMoKTt0aGlzLl9mbkdyaWRTZXR1cCgpO3ZhciBkLGg9ITE7Yyh0aGlzLnMuZHQublRhYmxlV3JhcHBlcikub24oIm1vdXNlZG93bi5EVEZDIixmdW5jdGlvbihhKXswPT09YS5idXR0b24mJihoPSEwLGMoZSkub25lKCJtb3VzZXVwIiwKZnVuY3Rpb24oKXtoPSExfSkpfSk7Yyh0aGlzLmRvbS5zY3JvbGxlcikub24oIm1vdXNlb3Zlci5EVEZDIHRvdWNoc3RhcnQuRFRGQyIsZnVuY3Rpb24oKXtofHwoZD0ibWFpbiIpfSkub24oInNjcm9sbC5EVEZDIixmdW5jdGlvbihhKXshZCYmYS5vcmlnaW5hbEV2ZW50JiYoZD0ibWFpbiIpOyJtYWluIj09PWQmJigwPGIucy5pTGVmdENvbHVtbnMmJihiLmRvbS5ncmlkLmxlZnQubGluZXIuc2Nyb2xsVG9wPWIuZG9tLnNjcm9sbGVyLnNjcm9sbFRvcCksMDxiLnMuaVJpZ2h0Q29sdW1ucyYmKGIuZG9tLmdyaWQucmlnaHQubGluZXIuc2Nyb2xsVG9wPWIuZG9tLnNjcm9sbGVyLnNjcm9sbFRvcCkpfSk7dmFyIGY9Im9ud2hlZWwiaW4gZS5jcmVhdGVFbGVtZW50KCJkaXYiKT8id2hlZWwuRFRGQyI6Im1vdXNld2hlZWwuRFRGQyI7aWYoMDxiLnMuaUxlZnRDb2x1bW5zKWMoYi5kb20uZ3JpZC5sZWZ0LmxpbmVyKS5vbigibW91c2VvdmVyLkRURkMgdG91Y2hzdGFydC5EVEZDIixmdW5jdGlvbigpe2h8fAooZD0ibGVmdCIpfSkub24oInNjcm9sbC5EVEZDIixmdW5jdGlvbihhKXshZCYmYS5vcmlnaW5hbEV2ZW50JiYoZD0ibGVmdCIpOyJsZWZ0Ij09PWQmJihiLmRvbS5zY3JvbGxlci5zY3JvbGxUb3A9Yi5kb20uZ3JpZC5sZWZ0LmxpbmVyLnNjcm9sbFRvcCwwPGIucy5pUmlnaHRDb2x1bW5zJiYoYi5kb20uZ3JpZC5yaWdodC5saW5lci5zY3JvbGxUb3A9Yi5kb20uZ3JpZC5sZWZ0LmxpbmVyLnNjcm9sbFRvcCkpfSkub24oZixmdW5jdGlvbihhKXtiLmRvbS5zY3JvbGxlci5zY3JvbGxMZWZ0LT0id2hlZWwiPT09YS50eXBlPy1hLm9yaWdpbmFsRXZlbnQuZGVsdGFYOmEub3JpZ2luYWxFdmVudC53aGVlbERlbHRhWH0pO2lmKDA8Yi5zLmlSaWdodENvbHVtbnMpYyhiLmRvbS5ncmlkLnJpZ2h0LmxpbmVyKS5vbigibW91c2VvdmVyLkRURkMgdG91Y2hzdGFydC5EVEZDIixmdW5jdGlvbigpe2h8fChkPSJyaWdodCIpfSkub24oInNjcm9sbC5EVEZDIixmdW5jdGlvbihhKXshZCYmYS5vcmlnaW5hbEV2ZW50JiYKKGQ9InJpZ2h0Iik7InJpZ2h0Ij09PWQmJihiLmRvbS5zY3JvbGxlci5zY3JvbGxUb3A9Yi5kb20uZ3JpZC5yaWdodC5saW5lci5zY3JvbGxUb3AsMDxiLnMuaUxlZnRDb2x1bW5zJiYoYi5kb20uZ3JpZC5sZWZ0LmxpbmVyLnNjcm9sbFRvcD1iLmRvbS5ncmlkLnJpZ2h0LmxpbmVyLnNjcm9sbFRvcCkpfSkub24oZixmdW5jdGlvbihhKXtiLmRvbS5zY3JvbGxlci5zY3JvbGxMZWZ0LT0id2hlZWwiPT09YS50eXBlPy1hLm9yaWdpbmFsRXZlbnQuZGVsdGFYOmEub3JpZ2luYWxFdmVudC53aGVlbERlbHRhWH0pO2MoZykub24oInJlc2l6ZS5EVEZDIixmdW5jdGlvbigpe2IuX2ZuR3JpZExheW91dC5jYWxsKGIpfSk7dmFyIG09ITAsaz1jKHRoaXMucy5kdC5uVGFibGUpO2sub24oImRyYXcuZHQuRFRGQyIsZnVuY3Rpb24oKXtiLl9mbkNvbENhbGMoKTtiLl9mbkRyYXcuY2FsbChiLG0pO209ITF9KS5vbigiY29sdW1uLXNpemluZy5kdC5EVEZDIixmdW5jdGlvbigpe2IuX2ZuQ29sQ2FsYygpOwpiLl9mbkdyaWRMYXlvdXQoYil9KS5vbigiY29sdW1uLXZpc2liaWxpdHkuZHQuRFRGQyIsZnVuY3Rpb24oYSxjLGQsZixoKXtpZihoPT09cXx8aCliLl9mbkNvbENhbGMoKSxiLl9mbkdyaWRMYXlvdXQoYiksYi5fZm5EcmF3KCEwKX0pLm9uKCJzZWxlY3QuZHQuRFRGQyBkZXNlbGVjdC5kdC5EVEZDIixmdW5jdGlvbihhLGMsZCxmKXsiZHQiPT09YS5uYW1lc3BhY2UmJmIuX2ZuRHJhdyghMSl9KS5vbigiZGVzdHJveS5kdC5EVEZDIixmdW5jdGlvbigpe2sub2ZmKCIuRFRGQyIpO2MoYi5kb20uc2Nyb2xsZXIpLm9mZigiLkRURkMiKTtjKGcpLm9mZigiLkRURkMiKTtjKGIucy5kdC5uVGFibGVXcmFwcGVyKS5vZmYoIi5EVEZDIik7YyhiLmRvbS5ncmlkLmxlZnQubGluZXIpLm9mZigiLkRURkMgIitmKTtjKGIuZG9tLmdyaWQubGVmdC53cmFwcGVyKS5yZW1vdmUoKTtjKGIuZG9tLmdyaWQucmlnaHQubGluZXIpLm9mZigiLkRURkMgIitmKTtjKGIuZG9tLmdyaWQucmlnaHQud3JhcHBlcikucmVtb3ZlKCl9KTsKdGhpcy5fZm5HcmlkTGF5b3V0KCk7dGhpcy5zLmR0Lm9JbnN0YW5jZS5mbkRyYXcoITEpfX0sX2ZuQ29sQ2FsYzpmdW5jdGlvbigpe3ZhciBhPXRoaXMsYj0wLGQ9MDt0aGlzLnMuYWlJbm5lcldpZHRocz1bXTt0aGlzLnMuYWlPdXRlcldpZHRocz1bXTtjLmVhY2godGhpcy5zLmR0LmFvQ29sdW1ucyxmdW5jdGlvbihoLGYpe2Y9YyhmLm5UaCk7aWYoZi5maWx0ZXIoIjp2aXNpYmxlIikubGVuZ3RoKXt2YXIgbT1mLm91dGVyV2lkdGgoKTtpZigwPT09YS5zLmFpT3V0ZXJXaWR0aHMubGVuZ3RoKXt2YXIgaz1jKGEucy5kdC5uVGFibGUpLmNzcygiYm9yZGVyLWxlZnQtd2lkdGgiKTttKz0ic3RyaW5nIj09PXR5cGVvZiBrJiYtMT09PWsuaW5kZXhPZigicHgiKT8xOnBhcnNlSW50KGssMTApfWEucy5haU91dGVyV2lkdGhzLmxlbmd0aD09PWEucy5kdC5hb0NvbHVtbnMubGVuZ3RoLTEmJihrPWMoYS5zLmR0Lm5UYWJsZSkuY3NzKCJib3JkZXItcmlnaHQtd2lkdGgiKSxtKz0ic3RyaW5nIj09PQp0eXBlb2YgayYmLTE9PT1rLmluZGV4T2YoInB4Iik/MTpwYXJzZUludChrLDEwKSk7YS5zLmFpT3V0ZXJXaWR0aHMucHVzaChtKTthLnMuYWlJbm5lcldpZHRocy5wdXNoKGYud2lkdGgoKSk7aDxhLnMuaUxlZnRDb2x1bW5zJiYoYis9bSk7YS5zLmlUYWJsZUNvbHVtbnMtYS5zLmlSaWdodENvbHVtbnM8PWgmJihkKz1tKX1lbHNlIGEucy5haUlubmVyV2lkdGhzLnB1c2goMCksYS5zLmFpT3V0ZXJXaWR0aHMucHVzaCgwKX0pO3RoaXMucy5pTGVmdFdpZHRoPWI7dGhpcy5zLmlSaWdodFdpZHRoPWR9LF9mbkdyaWRTZXR1cDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2ZuRFRPdmVyZmxvdygpO3RoaXMuZG9tLmJvZHk9dGhpcy5zLmR0Lm5UYWJsZTt0aGlzLmRvbS5oZWFkZXI9dGhpcy5zLmR0Lm5USGVhZC5wYXJlbnROb2RlO3RoaXMuZG9tLmhlYWRlci5wYXJlbnROb2RlLnBhcmVudE5vZGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIjt2YXIgYj1jKCc8ZGl2IGNsYXNzPSJEVEZDX1Njcm9sbFdyYXBwZXIiIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsgY2xlYXI6Ym90aDsiPjxkaXYgY2xhc3M9IkRURkNfTGVmdFdyYXBwZXIiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjA7IGxlZnQ6MDsiIGFyaWEtaGlkZGVuPSJ0cnVlIj48ZGl2IGNsYXNzPSJEVEZDX0xlZnRIZWFkV3JhcHBlciIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyB0b3A6MDsgbGVmdDowOyBvdmVyZmxvdzpoaWRkZW47Ij48L2Rpdj48ZGl2IGNsYXNzPSJEVEZDX0xlZnRCb2R5V3JhcHBlciIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6MDsgb3ZlcmZsb3c6aGlkZGVuOyI+PGRpdiBjbGFzcz0iRFRGQ19MZWZ0Qm9keUxpbmVyIiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7IHRvcDowOyBsZWZ0OjA7IG92ZXJmbG93LXk6c2Nyb2xsOyI+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iRFRGQ19MZWZ0Rm9vdFdyYXBwZXIiIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsgdG9wOjA7IGxlZnQ6MDsgb3ZlcmZsb3c6aGlkZGVuOyI+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iRFRGQ19SaWdodFdyYXBwZXIiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjA7IHJpZ2h0OjA7IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PGRpdiBjbGFzcz0iRFRGQ19SaWdodEhlYWRXcmFwcGVyIiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7IHRvcDowOyBsZWZ0OjA7Ij48ZGl2IGNsYXNzPSJEVEZDX1JpZ2h0SGVhZEJsb2NrZXIgRFRGQ19CbG9ja2VyIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IHRvcDowOyBib3R0b206MDsiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9IkRURkNfUmlnaHRCb2R5V3JhcHBlciIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyB0b3A6MDsgbGVmdDowOyBoZWlnaHQ6MDsgb3ZlcmZsb3c6aGlkZGVuOyI+PGRpdiBjbGFzcz0iRFRGQ19SaWdodEJvZHlMaW5lciIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyB0b3A6MDsgbGVmdDowOyBvdmVyZmxvdy15OnNjcm9sbDsiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9IkRURkNfUmlnaHRGb290V3JhcHBlciIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyB0b3A6MDsgbGVmdDowOyI+PGRpdiBjbGFzcz0iRFRGQ19SaWdodEZvb3RCbG9ja2VyIERURkNfQmxvY2tlciIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyB0b3A6MDsgYm90dG9tOjA7Ij48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4nKVswXSwKZD1iLmNoaWxkTm9kZXNbMF0saD1iLmNoaWxkTm9kZXNbMV07dGhpcy5kb20uZ3JpZC5kdC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShiLHRoaXMuZG9tLmdyaWQuZHQpO2IuYXBwZW5kQ2hpbGQodGhpcy5kb20uZ3JpZC5kdCk7dGhpcy5kb20uZ3JpZC53cmFwcGVyPWI7MDx0aGlzLnMuaUxlZnRDb2x1bW5zJiYodGhpcy5kb20uZ3JpZC5sZWZ0LndyYXBwZXI9ZCx0aGlzLmRvbS5ncmlkLmxlZnQuaGVhZD1kLmNoaWxkTm9kZXNbMF0sdGhpcy5kb20uZ3JpZC5sZWZ0LmJvZHk9ZC5jaGlsZE5vZGVzWzFdLHRoaXMuZG9tLmdyaWQubGVmdC5saW5lcj1jKCJkaXYuRFRGQ19MZWZ0Qm9keUxpbmVyIixiKVswXSxiLmFwcGVuZENoaWxkKGQpKTtpZigwPHRoaXMucy5pUmlnaHRDb2x1bW5zKXt0aGlzLmRvbS5ncmlkLnJpZ2h0LndyYXBwZXI9aDt0aGlzLmRvbS5ncmlkLnJpZ2h0LmhlYWQ9aC5jaGlsZE5vZGVzWzBdO3RoaXMuZG9tLmdyaWQucmlnaHQuYm9keT1oLmNoaWxkTm9kZXNbMV07CnRoaXMuZG9tLmdyaWQucmlnaHQubGluZXI9YygiZGl2LkRURkNfUmlnaHRCb2R5TGluZXIiLGIpWzBdO2guc3R5bGUucmlnaHQ9YS5iYXIrInB4Ijt2YXIgZj1jKCJkaXYuRFRGQ19SaWdodEhlYWRCbG9ja2VyIixiKVswXTtmLnN0eWxlLndpZHRoPWEuYmFyKyJweCI7Zi5zdHlsZS5yaWdodD0tYS5iYXIrInB4Ijt0aGlzLmRvbS5ncmlkLnJpZ2h0LmhlYWRCbG9jaz1mO2Y9YygiZGl2LkRURkNfUmlnaHRGb290QmxvY2tlciIsYilbMF07Zi5zdHlsZS53aWR0aD1hLmJhcisicHgiO2Yuc3R5bGUucmlnaHQ9LWEuYmFyKyJweCI7dGhpcy5kb20uZ3JpZC5yaWdodC5mb290QmxvY2s9ZjtiLmFwcGVuZENoaWxkKGgpfXRoaXMucy5kdC5uVEZvb3QmJih0aGlzLmRvbS5mb290ZXI9dGhpcy5zLmR0Lm5URm9vdC5wYXJlbnROb2RlLDA8dGhpcy5zLmlMZWZ0Q29sdW1ucyYmKHRoaXMuZG9tLmdyaWQubGVmdC5mb290PWQuY2hpbGROb2Rlc1syXSksMDx0aGlzLnMuaVJpZ2h0Q29sdW1ucyYmKHRoaXMuZG9tLmdyaWQucmlnaHQuZm9vdD0KaC5jaGlsZE5vZGVzWzJdKSk7dGhpcy5zLnJ0bCYmYygiZGl2LkRURkNfUmlnaHRIZWFkQmxvY2tlciIsYikuY3NzKHtsZWZ0Oi1hLmJhcisicHgiLHJpZ2h0OiIifSl9LF9mbkdyaWRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9dGhpcy5kb20uZ3JpZDtjKGIud3JhcHBlcikud2lkdGgoKTt2YXIgZD10aGlzLnMuZHQublRhYmxlLnBhcmVudE5vZGUub2Zmc2V0SGVpZ2h0LGg9dGhpcy5zLmR0Lm5UYWJsZS5wYXJlbnROb2RlLnBhcmVudE5vZGUub2Zmc2V0SGVpZ2h0LGY9dGhpcy5fZm5EVE92ZXJmbG93KCksbT10aGlzLnMuaUxlZnRXaWR0aCxrPXRoaXMucy5pUmlnaHRXaWR0aCx4PSJydGwiPT09Yyh0aGlzLmRvbS5ib2R5KS5jc3MoImRpcmVjdGlvbiIpLHc9ZnVuY3Rpb24oYixkKXtmLmJhcj9hLl9maXJlZm94U2Nyb2xsRXJyb3IoKT8zNDxjKGIpLmhlaWdodCgpJiYoYi5zdHlsZS53aWR0aD1kK2YuYmFyKyJweCIpOmIuc3R5bGUud2lkdGg9ZCtmLmJhcisicHgiOihiLnN0eWxlLndpZHRoPQpkKzIwKyJweCIsYi5zdHlsZS5wYWRkaW5nUmlnaHQ9IjIwcHgiLGIuc3R5bGUuYm94U2l6aW5nPSJib3JkZXItYm94Iil9O2YueCYmKGQtPWYuYmFyKTtiLndyYXBwZXIuc3R5bGUuaGVpZ2h0PWgrInB4IjswPHRoaXMucy5pTGVmdENvbHVtbnMmJihoPWIubGVmdC53cmFwcGVyLGguc3R5bGUud2lkdGg9bSsicHgiLGguc3R5bGUuaGVpZ2h0PSIxcHgiLHg/KGguc3R5bGUubGVmdD0iIixoLnN0eWxlLnJpZ2h0PTApOihoLnN0eWxlLmxlZnQ9MCxoLnN0eWxlLnJpZ2h0PSIiKSxiLmxlZnQuYm9keS5zdHlsZS5oZWlnaHQ9ZCsicHgiLGIubGVmdC5mb290JiYoYi5sZWZ0LmZvb3Quc3R5bGUudG9wPShmLng/Zi5iYXI6MCkrInB4IiksdyhiLmxlZnQubGluZXIsbSksYi5sZWZ0LmxpbmVyLnN0eWxlLmhlaWdodD1kKyJweCIsYi5sZWZ0LmxpbmVyLnN0eWxlLm1heEhlaWdodD1kKyJweCIpOzA8dGhpcy5zLmlSaWdodENvbHVtbnMmJihoPWIucmlnaHQud3JhcHBlcixoLnN0eWxlLndpZHRoPQprKyJweCIsaC5zdHlsZS5oZWlnaHQ9IjFweCIsdGhpcy5zLnJ0bD8oaC5zdHlsZS5sZWZ0PWYueT9mLmJhcisicHgiOjAsaC5zdHlsZS5yaWdodD0iIik6KGguc3R5bGUubGVmdD0iIixoLnN0eWxlLnJpZ2h0PWYueT9mLmJhcisicHgiOjApLGIucmlnaHQuYm9keS5zdHlsZS5oZWlnaHQ9ZCsicHgiLGIucmlnaHQuZm9vdCYmKGIucmlnaHQuZm9vdC5zdHlsZS50b3A9KGYueD9mLmJhcjowKSsicHgiKSx3KGIucmlnaHQubGluZXIsayksYi5yaWdodC5saW5lci5zdHlsZS5oZWlnaHQ9ZCsicHgiLGIucmlnaHQubGluZXIuc3R5bGUubWF4SGVpZ2h0PWQrInB4IixiLnJpZ2h0LmhlYWRCbG9jay5zdHlsZS5kaXNwbGF5PWYueT8iYmxvY2siOiJub25lIixiLnJpZ2h0LmZvb3RCbG9jay5zdHlsZS5kaXNwbGF5PWYueT8iYmxvY2siOiJub25lIil9LF9mbkRUT3ZlcmZsb3c6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnMuZHQublRhYmxlLGI9YS5wYXJlbnROb2RlLGM9e3g6ITEseTohMSxiYXI6dGhpcy5zLmR0Lm9TY3JvbGwuaUJhcldpZHRofTsKYS5vZmZzZXRXaWR0aD5iLmNsaWVudFdpZHRoJiYoYy54PSEwKTthLm9mZnNldEhlaWdodD5iLmNsaWVudEhlaWdodCYmKGMueT0hMCk7cmV0dXJuIGN9LF9mbkRyYXc6ZnVuY3Rpb24oYSl7dGhpcy5fZm5HcmlkTGF5b3V0KCk7dGhpcy5fZm5DbG9uZUxlZnQoYSk7dGhpcy5fZm5DbG9uZVJpZ2h0KGEpO251bGwhPT10aGlzLnMuZm5EcmF3Q2FsbGJhY2smJnRoaXMucy5mbkRyYXdDYWxsYmFjay5jYWxsKHRoaXMsdGhpcy5kb20uY2xvbmUubGVmdCx0aGlzLmRvbS5jbG9uZS5yaWdodCk7Yyh0aGlzKS50cmlnZ2VyKCJkcmF3LmR0ZmMiLHtsZWZ0Q2xvbmU6dGhpcy5kb20uY2xvbmUubGVmdCxyaWdodENsb25lOnRoaXMuZG9tLmNsb25lLnJpZ2h0fSl9LF9mbkNsb25lUmlnaHQ6ZnVuY3Rpb24oYSl7aWYoISgwPj10aGlzLnMuaVJpZ2h0Q29sdW1ucykpe3ZhciBiLGM9W107Zm9yKGI9dGhpcy5zLmlUYWJsZUNvbHVtbnMtdGhpcy5zLmlSaWdodENvbHVtbnM7Yjx0aGlzLnMuaVRhYmxlQ29sdW1ucztiKyspdGhpcy5zLmR0LmFvQ29sdW1uc1tiXS5iVmlzaWJsZSYmCmMucHVzaChiKTt0aGlzLl9mbkNsb25lKHRoaXMuZG9tLmNsb25lLnJpZ2h0LHRoaXMuZG9tLmdyaWQucmlnaHQsYyxhKX19LF9mbkNsb25lTGVmdDpmdW5jdGlvbihhKXtpZighKDA+PXRoaXMucy5pTGVmdENvbHVtbnMpKXt2YXIgYixjPVtdO2ZvcihiPTA7Yjx0aGlzLnMuaUxlZnRDb2x1bW5zO2IrKyl0aGlzLnMuZHQuYW9Db2x1bW5zW2JdLmJWaXNpYmxlJiZjLnB1c2goYik7dGhpcy5fZm5DbG9uZSh0aGlzLmRvbS5jbG9uZS5sZWZ0LHRoaXMuZG9tLmdyaWQubGVmdCxjLGEpfX0sX2ZuQ29weUxheW91dDpmdW5jdGlvbihhLGIsZCl7Zm9yKHZhciBoPVtdLGY9W10sbT1bXSxrPTAseD1hLmxlbmd0aDtrPHg7aysrKXt2YXIgdz1bXTt3Lm5Ucj1jKGFba10ublRyKS5jbG9uZShkLCExKVswXTtmb3IodmFyIGU9MCxuPXRoaXMucy5pVGFibGVDb2x1bW5zO2U8bjtlKyspaWYoLTEhPT1jLmluQXJyYXkoZSxiKSl7dmFyIGc9Yy5pbkFycmF5KGFba11bZV0uY2VsbCxtKTstMT09PWc/KGc9CmMoYVtrXVtlXS5jZWxsKS5jbG9uZShkLCExKVswXSxmLnB1c2goZyksbS5wdXNoKGFba11bZV0uY2VsbCksdy5wdXNoKHtjZWxsOmcsdW5pcXVlOmFba11bZV0udW5pcXVlfSkpOncucHVzaCh7Y2VsbDpmW2ddLHVuaXF1ZTphW2tdW2VdLnVuaXF1ZX0pfWgucHVzaCh3KX1yZXR1cm4gaH0sX2ZuQ2xvbmU6ZnVuY3Rpb24oYSxiLGQsaCl7dmFyIGY9dGhpcyxtLGssZT10aGlzLnMuZHQ7aWYoaCl7YyhhLmhlYWRlcikucmVtb3ZlKCk7YS5oZWFkZXI9Yyh0aGlzLmRvbS5oZWFkZXIpLmNsb25lKCEwLCExKVswXTthLmhlYWRlci5jbGFzc05hbWUrPSIgRFRGQ19DbG9uZWQiO2EuaGVhZGVyLnN0eWxlLndpZHRoPSIxMDAlIjtiLmhlYWQuYXBwZW5kQ2hpbGQoYS5oZWFkZXIpO3ZhciBnPXRoaXMuX2ZuQ29weUxheW91dChlLmFvSGVhZGVyLGQsITApO3ZhciBsPWMoIj50aGVhZCIsYS5oZWFkZXIpO2wuZW1wdHkoKTt2YXIgbj0wO2ZvcihtPWcubGVuZ3RoO248bTtuKyspbFswXS5hcHBlbmRDaGlsZChnW25dLm5Ucik7CmUub0FwaS5fZm5EcmF3SGVhZChlLGcsITApfWVsc2V7Zz10aGlzLl9mbkNvcHlMYXlvdXQoZS5hb0hlYWRlcixkLCExKTt2YXIgcD1bXTtlLm9BcGkuX2ZuRGV0ZWN0SGVhZGVyKHAsYygiPnRoZWFkIixhLmhlYWRlcilbMF0pO249MDtmb3IobT1nLmxlbmd0aDtuPG07bisrKXt2YXIgdD0wO2ZvcihsPWdbbl0ubGVuZ3RoO3Q8bDt0KyspcFtuXVt0XS5jZWxsLmNsYXNzTmFtZT1nW25dW3RdLmNlbGwuY2xhc3NOYW1lLGMoInNwYW4uRGF0YVRhYmxlc19zb3J0X2ljb24iLHBbbl1bdF0uY2VsbCkuZWFjaChmdW5jdGlvbigpe3RoaXMuY2xhc3NOYW1lPWMoInNwYW4uRGF0YVRhYmxlc19zb3J0X2ljb24iLGdbbl1bdF0uY2VsbClbMF0uY2xhc3NOYW1lfSl9fXRoaXMuX2ZuRXF1YWxpc2VIZWlnaHRzKCJ0aGVhZCIsdGhpcy5kb20uaGVhZGVyLGEuaGVhZGVyKTsiYXV0byI9PXRoaXMucy5zSGVpZ2h0TWF0Y2gmJmMoIj50Ym9keT50ciIsZi5kb20uYm9keSkuY3NzKCJoZWlnaHQiLCJhdXRvIik7Cm51bGwhPT1hLmJvZHkmJihjKGEuYm9keSkucmVtb3ZlKCksYS5ib2R5PW51bGwpO2EuYm9keT1jKHRoaXMuZG9tLmJvZHkpLmNsb25lKCEwKVswXTthLmJvZHkuY2xhc3NOYW1lKz0iIERURkNfQ2xvbmVkIjthLmJvZHkuc3R5bGUucGFkZGluZ0JvdHRvbT1lLm9TY3JvbGwuaUJhcldpZHRoKyJweCI7YS5ib2R5LnN0eWxlLm1hcmdpbkJvdHRvbT0yKmUub1Njcm9sbC5pQmFyV2lkdGgrInB4IjtudWxsIT09YS5ib2R5LmdldEF0dHJpYnV0ZSgiaWQiKSYmYS5ib2R5LnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTtjKCI+dGhlYWQ+dHIiLGEuYm9keSkuZW1wdHkoKTtjKCI+dGZvb3QiLGEuYm9keSkucmVtb3ZlKCk7dmFyIHU9YygidGJvZHkiLGEuYm9keSlbMF07Yyh1KS5lbXB0eSgpO2lmKDA8ZS5haURpc3BsYXkubGVuZ3RoKXttPWMoIj50aGVhZD50ciIsYS5ib2R5KVswXTtmb3Ioaz0wO2s8ZC5sZW5ndGg7aysrKXt2YXIgdj1kW2tdO3ZhciByPWMoZS5hb0NvbHVtbnNbdl0ublRoKS5jbG9uZSghMClbMF07CnIuaW5uZXJIVE1MPSIiO2w9ci5zdHlsZTtsLnBhZGRpbmdUb3A9IjAiO2wucGFkZGluZ0JvdHRvbT0iMCI7bC5ib3JkZXJUb3BXaWR0aD0iMCI7bC5ib3JkZXJCb3R0b21XaWR0aD0iMCI7bC5oZWlnaHQ9MDtsLndpZHRoPWYucy5haUlubmVyV2lkdGhzW3ZdKyJweCI7bS5hcHBlbmRDaGlsZChyKX1jKCI+dGJvZHk+dHIiLGYuZG9tLmJvZHkpLmVhY2goZnVuY3Rpb24oYSl7YT0hMT09PWYucy5kdC5vRmVhdHVyZXMuYlNlcnZlclNpZGU/Zi5zLmR0LmFpRGlzcGxheVtmLnMuZHQuX2lEaXNwbGF5U3RhcnQrYV06YTt2YXIgYj1mLnMuZHQuYW9EYXRhW2FdLmFuQ2VsbHN8fGModGhpcykuY2hpbGRyZW4oInRkLCB0aCIpLGU9dGhpcy5jbG9uZU5vZGUoITEpO2UucmVtb3ZlQXR0cmlidXRlKCJpZCIpO2Uuc2V0QXR0cmlidXRlKCJkYXRhLWR0LXJvdyIsYSk7Zm9yKGs9MDtrPGQubGVuZ3RoO2srKyl2PWRba10sMDxiLmxlbmd0aCYmKHI9YyhiW3ZdKS5jbG9uZSghMCwhMClbMF0sci5yZW1vdmVBdHRyaWJ1dGUoImlkIiksCnIuc2V0QXR0cmlidXRlKCJkYXRhLWR0LXJvdyIsYSksci5zZXRBdHRyaWJ1dGUoImRhdGEtZHQtY29sdW1uIix2KSxlLmFwcGVuZENoaWxkKHIpKTt1LmFwcGVuZENoaWxkKGUpfSl9ZWxzZSBjKCI+dGJvZHk+dHIiLGYuZG9tLmJvZHkpLmVhY2goZnVuY3Rpb24oYSl7cj10aGlzLmNsb25lTm9kZSghMCk7ci5jbGFzc05hbWUrPSIgRFRGQ19Ob0RhdGEiO2MoInRkIixyKS5odG1sKCIiKTt1LmFwcGVuZENoaWxkKHIpfSk7YS5ib2R5LnN0eWxlLndpZHRoPSIxMDAlIjthLmJvZHkuc3R5bGUubWFyZ2luPSIwIjthLmJvZHkuc3R5bGUucGFkZGluZz0iMCI7ZS5vU2Nyb2xsZXIhPT1xJiYobT1lLm9TY3JvbGxlci5kb20uZm9yY2UsYi5mb3JjZXI/Yi5mb3JjZXIuc3R5bGUuaGVpZ2h0PW0uc3R5bGUuaGVpZ2h0OihiLmZvcmNlcj1tLmNsb25lTm9kZSghMCksYi5saW5lci5hcHBlbmRDaGlsZChiLmZvcmNlcikpKTtiLmxpbmVyLmFwcGVuZENoaWxkKGEuYm9keSk7dGhpcy5fZm5FcXVhbGlzZUhlaWdodHMoInRib2R5IiwKZi5kb20uYm9keSxhLmJvZHkpO2lmKG51bGwhPT1lLm5URm9vdCl7aWYoaCl7bnVsbCE9PWEuZm9vdGVyJiZhLmZvb3Rlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEuZm9vdGVyKTthLmZvb3Rlcj1jKHRoaXMuZG9tLmZvb3RlcikuY2xvbmUoITAsITApWzBdO2EuZm9vdGVyLmNsYXNzTmFtZSs9IiBEVEZDX0Nsb25lZCI7YS5mb290ZXIuc3R5bGUud2lkdGg9IjEwMCUiO2IuZm9vdC5hcHBlbmRDaGlsZChhLmZvb3Rlcik7Zz10aGlzLl9mbkNvcHlMYXlvdXQoZS5hb0Zvb3RlcixkLCEwKTtiPWMoIj50Zm9vdCIsYS5mb290ZXIpO2IuZW1wdHkoKTtuPTA7Zm9yKG09Zy5sZW5ndGg7bjxtO24rKyliWzBdLmFwcGVuZENoaWxkKGdbbl0ublRyKTtlLm9BcGkuX2ZuRHJhd0hlYWQoZSxnLCEwKX1lbHNlIGZvcihnPXRoaXMuX2ZuQ29weUxheW91dChlLmFvRm9vdGVyLGQsITEpLGI9W10sZS5vQXBpLl9mbkRldGVjdEhlYWRlcihiLGMoIj50Zm9vdCIsYS5mb290ZXIpWzBdKSxuPTAsbT1nLmxlbmd0aDtuPAptO24rKylmb3IodD0wLGw9Z1tuXS5sZW5ndGg7dDxsO3QrKyliW25dW3RdLmNlbGwuY2xhc3NOYW1lPWdbbl1bdF0uY2VsbC5jbGFzc05hbWU7dGhpcy5fZm5FcXVhbGlzZUhlaWdodHMoInRmb290Iix0aGlzLmRvbS5mb290ZXIsYS5mb290ZXIpfWI9ZS5vQXBpLl9mbkdldFVuaXF1ZVRocyhlLGMoIj50aGVhZCIsYS5oZWFkZXIpWzBdKTtjKGIpLmVhY2goZnVuY3Rpb24oYSl7dj1kW2FdO3RoaXMuc3R5bGUud2lkdGg9Zi5zLmFpSW5uZXJXaWR0aHNbdl0rInB4In0pO251bGwhPT1mLnMuZHQublRGb290JiYoYj1lLm9BcGkuX2ZuR2V0VW5pcXVlVGhzKGUsYygiPnRmb290IixhLmZvb3RlcilbMF0pLGMoYikuZWFjaChmdW5jdGlvbihhKXt2PWRbYV07dGhpcy5zdHlsZS53aWR0aD1mLnMuYWlJbm5lcldpZHRoc1t2XSsicHgifSkpfSxfZm5HZXRUck5vZGVzOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTAsZT1hLmNoaWxkTm9kZXMubGVuZ3RoO2M8ZTtjKyspIlRSIj09YS5jaGlsZE5vZGVzW2NdLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkmJgpiLnB1c2goYS5jaGlsZE5vZGVzW2NdKTtyZXR1cm4gYn0sX2ZuRXF1YWxpc2VIZWlnaHRzOmZ1bmN0aW9uKGEsYixkKXtpZigibm9uZSIhPXRoaXMucy5zSGVpZ2h0TWF0Y2h8fCJ0aGVhZCI9PT1hfHwidGZvb3QiPT09YSl7dmFyIGU9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKVswXTtkPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYSlbMF07YT1jKCI+IithKyI+dHI6ZXEoMCkiLGIpLmNoaWxkcmVuKCI6Zmlyc3QiKTthLm91dGVySGVpZ2h0KCk7YS5oZWlnaHQoKTtlPXRoaXMuX2ZuR2V0VHJOb2RlcyhlKTtiPXRoaXMuX2ZuR2V0VHJOb2RlcyhkKTt2YXIgZj1bXTtkPTA7Zm9yKGE9Yi5sZW5ndGg7ZDxhO2QrKyl7dmFyIGc9ZVtkXS5vZmZzZXRIZWlnaHQ7dmFyIGs9YltkXS5vZmZzZXRIZWlnaHQ7Zz1rPmc/azpnOyJzZW1pYXV0byI9PXRoaXMucy5zSGVpZ2h0TWF0Y2gmJihlW2RdLl9EVFRDX2lIZWlnaHQ9Zyk7Zi5wdXNoKGcpfWQ9MDtmb3IoYT1iLmxlbmd0aDtkPGE7ZCsrKWJbZF0uc3R5bGUuaGVpZ2h0PQpmW2RdKyJweCIsZVtkXS5zdHlsZS5oZWlnaHQ9ZltkXSsicHgifX0sX2ZpcmVmb3hTY3JvbGxFcnJvcjpmdW5jdGlvbigpe2lmKHU9PT1xKXt2YXIgYT1jKCI8ZGl2Lz4iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLGhlaWdodDoxMCx3aWR0aDo1MCxvdmVyZmxvdzoic2Nyb2xsIn0pLmFwcGVuZFRvKCJib2R5Iik7dT1hWzBdLmNsaWVudFdpZHRoPT09YVswXS5vZmZzZXRXaWR0aCYmMCE9PXRoaXMuX2ZuRFRPdmVyZmxvdygpLmJhcjthLnJlbW92ZSgpfXJldHVybiB1fX0pO3AuZGVmYXVsdHM9e2lMZWZ0Q29sdW1uczoxLGlSaWdodENvbHVtbnM6MCxmbkRyYXdDYWxsYmFjazpudWxsLHNIZWlnaHRNYXRjaDoic2VtaWF1dG8ifTtwLnZlcnNpb249IjMuMy4wIjtsLkFwaS5yZWdpc3RlcigiZml4ZWRDb2x1bW5zKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KTtsLkFwaS5yZWdpc3RlcigiZml4ZWRDb2x1bW5zKCkudXBkYXRlKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIiwKZnVuY3Rpb24oYSl7YS5fb0ZpeGVkQ29sdW1ucyYmYS5fb0ZpeGVkQ29sdW1ucy5mblVwZGF0ZSgpfSl9KTtsLkFwaS5yZWdpc3RlcigiZml4ZWRDb2x1bW5zKCkucmVsYXlvdXQoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGEpe2EuX29GaXhlZENvbHVtbnMmJmEuX29GaXhlZENvbHVtbnMuZm5SZWRyYXdMYXlvdXQoKX0pfSk7bC5BcGkucmVnaXN0ZXIoInJvd3MoKS5yZWNhbGNIZWlnaHQoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigicm93IixmdW5jdGlvbihhLGIpe2EuX29GaXhlZENvbHVtbnMmJmEuX29GaXhlZENvbHVtbnMuZm5SZWNhbGN1bGF0ZUhlaWdodCh0aGlzLnJvdyhiKS5ub2RlKCkpfSl9KTtsLkFwaS5yZWdpc3RlcigiZml4ZWRDb2x1bW5zKCkucm93SW5kZXgoKSIsZnVuY3Rpb24oYSl7YT1jKGEpO3JldHVybiBhLnBhcmVudHMoIi5EVEZDX0Nsb25lZCIpLmxlbmd0aD90aGlzLnJvd3Moe3BhZ2U6ImN1cnJlbnQifSkuaW5kZXhlcygpW2EuaW5kZXgoKV06CnRoaXMucm93KGEpLmluZGV4KCl9KTtsLkFwaS5yZWdpc3RlcigiZml4ZWRDb2x1bW5zKCkuY2VsbEluZGV4KCkiLGZ1bmN0aW9uKGEpe2E9YyhhKTtpZihhLnBhcmVudHMoIi5EVEZDX0Nsb25lZCIpLmxlbmd0aCl7dmFyIGI9YS5wYXJlbnQoKS5pbmRleCgpO2I9dGhpcy5yb3dzKHtwYWdlOiJjdXJyZW50In0pLmluZGV4ZXMoKVtiXTthPWEucGFyZW50cygiLkRURkNfTGVmdFdyYXBwZXIiKS5sZW5ndGg/YS5pbmRleCgpOnRoaXMuY29sdW1ucygpLmZsYXR0ZW4oKS5sZW5ndGgtdGhpcy5jb250ZXh0WzBdLl9vRml4ZWRDb2x1bW5zLnMuaVJpZ2h0Q29sdW1ucythLmluZGV4KCk7cmV0dXJue3JvdzpiLGNvbHVtbjp0aGlzLmNvbHVtbi5pbmRleCgidG9EYXRhIixhKSxjb2x1bW5WaXNpYmxlOmF9fXJldHVybiB0aGlzLmNlbGwoYSkuaW5kZXgoKX0pO2wuQXBpLnJlZ2lzdGVyUGx1cmFsKCJjZWxscygpLmZpeGVkTm9kZXMoKSIsImNlbGwoKS5maXhlZE5vZGUoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigiY2VsbCIsCmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYS5fb0ZpeGVkQ29sdW1ucz9hLl9vRml4ZWRDb2x1bW5zLmZuVG9GaXhlZE5vZGUoYixjKTp0aGlzLm5vZGUoKX0sMSl9KTtjKGUpLm9uKCJpbml0LmR0LmZpeGVkQ29sdW1ucyIsZnVuY3Rpb24oYSxiKXtpZigiZHQiPT09YS5uYW1lc3BhY2Upe2E9Yi5vSW5pdC5maXhlZENvbHVtbnM7dmFyIGQ9bC5kZWZhdWx0cy5maXhlZENvbHVtbnM7aWYoYXx8ZClkPWMuZXh0ZW5kKHt9LGEsZCksITEhPT1hJiZuZXcgcChiLGQpfX0pO2MuZm4uZGF0YVRhYmxlLkZpeGVkQ29sdW1ucz1wO3JldHVybiBjLmZuLkRhdGFUYWJsZS5GaXhlZENvbHVtbnM9cH0pOwoKCi8qIQogICBDb3B5cmlnaHQgMjAwOS0yMDE5IFNwcnlNZWRpYSBMdGQuCgogVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBhdmFpbGFibGUgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlOgogICBNSVQgbGljZW5zZSAtIGh0dHA6Ly9kYXRhdGFibGVzLm5ldC9saWNlbnNlL21pdAoKIFRoaXMgc291cmNlIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgbGljZW5zZSBmaWxlcyBmb3IgZGV0YWlscy4KCiBGb3IgZGV0YWlscyBwbGVhc2UgcmVmZXIgdG86IGh0dHA6Ly93d3cuZGF0YXRhYmxlcy5uZXQKIEZpeGVkSGVhZGVyIDMuMS42CiDCqTIwMDktMjAxOSBTcHJ5TWVkaWEgTHRkIC0gZGF0YXRhYmxlcy5uZXQvbGljZW5zZQoqLwp2YXIgJGpzY29tcD0kanNjb21wfHx7fTskanNjb21wLnNjb3BlPXt9OyRqc2NvbXAuZmluZEludGVybmFsPWZ1bmN0aW9uKGMsZixnKXtjIGluc3RhbmNlb2YgU3RyaW5nJiYoYz1TdHJpbmcoYykpO2Zvcih2YXIgbD1jLmxlbmd0aCxoPTA7aDxsO2grKyl7dmFyIG49Y1toXTtpZihmLmNhbGwoZyxuLGgsYykpcmV0dXJue2k6aCx2Om59fXJldHVybntpOi0xLHY6dm9pZCAwfX07JGpzY29tcC5BU1NVTUVfRVM1PSExOyRqc2NvbXAuQVNTVU1FX05PX05BVElWRV9NQVA9ITE7JGpzY29tcC5BU1NVTUVfTk9fTkFUSVZFX1NFVD0hMTskanNjb21wLlNJTVBMRV9GUk9VTkRfUE9MWUZJTEw9ITE7CiRqc2NvbXAuZGVmaW5lUHJvcGVydHk9JGpzY29tcC5BU1NVTUVfRVM1fHwiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnRpZXM/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGMsZixnKXtjIT1BcnJheS5wcm90b3R5cGUmJmMhPU9iamVjdC5wcm90b3R5cGUmJihjW2ZdPWcudmFsdWUpfTskanNjb21wLmdldEdsb2JhbD1mdW5jdGlvbihjKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93PT09Yz9jOiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsJiZudWxsIT1nbG9iYWw/Z2xvYmFsOmN9OyRqc2NvbXAuZ2xvYmFsPSRqc2NvbXAuZ2V0R2xvYmFsKHRoaXMpOwokanNjb21wLnBvbHlmaWxsPWZ1bmN0aW9uKGMsZixnLGwpe2lmKGYpe2c9JGpzY29tcC5nbG9iYWw7Yz1jLnNwbGl0KCIuIik7Zm9yKGw9MDtsPGMubGVuZ3RoLTE7bCsrKXt2YXIgaD1jW2xdO2ggaW4gZ3x8KGdbaF09e30pO2c9Z1toXX1jPWNbYy5sZW5ndGgtMV07bD1nW2NdO2Y9ZihsKTtmIT1sJiZudWxsIT1mJiYkanNjb21wLmRlZmluZVByb3BlcnR5KGcsYyx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ9KX19OyRqc2NvbXAucG9seWZpbGwoIkFycmF5LnByb3RvdHlwZS5maW5kIixmdW5jdGlvbihjKXtyZXR1cm4gYz9jOmZ1bmN0aW9uKGMsZyl7cmV0dXJuICRqc2NvbXAuZmluZEludGVybmFsKHRoaXMsYyxnKS52fX0sImVzNiIsImVzMyIpOwooZnVuY3Rpb24oYyl7ImZ1bmN0aW9uIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsianF1ZXJ5IiwiZGF0YXRhYmxlcy5uZXQiXSxmdW5jdGlvbihmKXtyZXR1cm4gYyhmLHdpbmRvdyxkb2N1bWVudCl9KToib2JqZWN0Ij09PXR5cGVvZiBleHBvcnRzP21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKGYsZyl7Znx8KGY9d2luZG93KTtnJiZnLmZuLmRhdGFUYWJsZXx8KGc9cmVxdWlyZSgiZGF0YXRhYmxlcy5uZXQiKShmLGcpLiQpO3JldHVybiBjKGcsZixmLmRvY3VtZW50KX06YyhqUXVlcnksd2luZG93LGRvY3VtZW50KX0pKGZ1bmN0aW9uKGMsZixnLGwpe3ZhciBoPWMuZm4uZGF0YVRhYmxlLG49MCxtPWZ1bmN0aW9uKGEsYil7aWYoISh0aGlzIGluc3RhbmNlb2YgbSkpdGhyb3ciRml4ZWRIZWFkZXIgbXVzdCBiZSBpbml0aWFsaXNlZCB3aXRoIHRoZSAnbmV3JyBrZXl3b3JkLiI7ITA9PT1iJiYoYj17fSk7YT1uZXcgaC5BcGkoYSk7dGhpcy5jPWMuZXh0ZW5kKCEwLAp7fSxtLmRlZmF1bHRzLGIpO3RoaXMucz17ZHQ6YSxwb3NpdGlvbjp7dGhlYWRUb3A6MCx0Ym9keVRvcDowLHRmb290VG9wOjAsdGZvb3RCb3R0b206MCx3aWR0aDowLGxlZnQ6MCx0Zm9vdEhlaWdodDowLHRoZWFkSGVpZ2h0OjAsd2luZG93SGVpZ2h0OmMoZikuaGVpZ2h0KCksdmlzaWJsZTohMH0saGVhZGVyTW9kZTpudWxsLGZvb3Rlck1vZGU6bnVsbCxhdXRvV2lkdGg6YS5zZXR0aW5ncygpWzBdLm9GZWF0dXJlcy5iQXV0b1dpZHRoLG5hbWVzcGFjZToiLmR0ZmMiK24rKyxzY3JvbGxMZWZ0OntoZWFkZXI6LTEsZm9vdGVyOi0xfSxlbmFibGU6ITB9O3RoaXMuZG9tPXtmbG9hdGluZ0hlYWRlcjpudWxsLHRoZWFkOmMoYS50YWJsZSgpLmhlYWRlcigpKSx0Ym9keTpjKGEudGFibGUoKS5ib2R5KCkpLHRmb290OmMoYS50YWJsZSgpLmZvb3RlcigpKSxoZWFkZXI6e2hvc3Q6bnVsbCxmbG9hdGluZzpudWxsLHBsYWNlaG9sZGVyOm51bGx9LGZvb3Rlcjp7aG9zdDpudWxsLGZsb2F0aW5nOm51bGwsCnBsYWNlaG9sZGVyOm51bGx9fTt0aGlzLmRvbS5oZWFkZXIuaG9zdD10aGlzLmRvbS50aGVhZC5wYXJlbnQoKTt0aGlzLmRvbS5mb290ZXIuaG9zdD10aGlzLmRvbS50Zm9vdC5wYXJlbnQoKTthPWEuc2V0dGluZ3MoKVswXTtpZihhLl9maXhlZEhlYWRlcil0aHJvdyJGaXhlZEhlYWRlciBhbHJlYWR5IGluaXRpYWxpc2VkIG9uIHRhYmxlICIrYS5uVGFibGUuaWQ7YS5fZml4ZWRIZWFkZXI9dGhpczt0aGlzLl9jb25zdHJ1Y3RvcigpfTtjLmV4dGVuZChtLnByb3RvdHlwZSx7ZGVzdHJveTpmdW5jdGlvbigpe3RoaXMucy5kdC5vZmYoIi5kdGZjIik7YyhmKS5vZmYodGhpcy5zLm5hbWVzcGFjZSk7dGhpcy5jLmhlYWRlciYmdGhpcy5fbW9kZUNoYW5nZSgiaW4tcGxhY2UiLCJoZWFkZXIiLCEwKTt0aGlzLmMuZm9vdGVyJiZ0aGlzLmRvbS50Zm9vdC5sZW5ndGgmJnRoaXMuX21vZGVDaGFuZ2UoImluLXBsYWNlIiwiZm9vdGVyIiwhMCl9LGVuYWJsZTpmdW5jdGlvbihhLGIpe3RoaXMucy5lbmFibGU9CmE7aWYoYnx8Yj09PWwpdGhpcy5fcG9zaXRpb25zKCksdGhpcy5fc2Nyb2xsKCEwKX0sZW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnMuZW5hYmxlfSxoZWFkZXJPZmZzZXQ6ZnVuY3Rpb24oYSl7YSE9PWwmJih0aGlzLmMuaGVhZGVyT2Zmc2V0PWEsdGhpcy51cGRhdGUoKSk7cmV0dXJuIHRoaXMuYy5oZWFkZXJPZmZzZXR9LGZvb3Rlck9mZnNldDpmdW5jdGlvbihhKXthIT09bCYmKHRoaXMuYy5mb290ZXJPZmZzZXQ9YSx0aGlzLnVwZGF0ZSgpKTtyZXR1cm4gdGhpcy5jLmZvb3Rlck9mZnNldH0sdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zLmR0LnRhYmxlKCkubm9kZSgpO2MoYSkuaXMoIjp2aXNpYmxlIik/dGhpcy5lbmFibGUoITAsITEpOnRoaXMuZW5hYmxlKCExLCExKTt0aGlzLl9wb3NpdGlvbnMoKTt0aGlzLl9zY3JvbGwoITApfSxfY29uc3RydWN0b3I6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9dGhpcy5zLmR0O2MoZikub24oInNjcm9sbCIrdGhpcy5zLm5hbWVzcGFjZSwKZnVuY3Rpb24oKXthLl9zY3JvbGwoKX0pLm9uKCJyZXNpemUiK3RoaXMucy5uYW1lc3BhY2UsaC51dGlsLnRocm90dGxlKGZ1bmN0aW9uKCl7YS5zLnBvc2l0aW9uLndpbmRvd0hlaWdodD1jKGYpLmhlaWdodCgpO2EudXBkYXRlKCl9LDUwKSk7dmFyIGU9YygiLmZoLWZpeGVkSGVhZGVyIik7IXRoaXMuYy5oZWFkZXJPZmZzZXQmJmUubGVuZ3RoJiYodGhpcy5jLmhlYWRlck9mZnNldD1lLm91dGVySGVpZ2h0KCkpO2U9YygiLmZoLWZpeGVkRm9vdGVyIik7IXRoaXMuYy5mb290ZXJPZmZzZXQmJmUubGVuZ3RoJiYodGhpcy5jLmZvb3Rlck9mZnNldD1lLm91dGVySGVpZ2h0KCkpO2Iub24oImNvbHVtbi1yZW9yZGVyLmR0LmR0ZmMgY29sdW1uLXZpc2liaWxpdHkuZHQuZHRmYyBkcmF3LmR0LmR0ZmMgY29sdW1uLXNpemluZy5kdC5kdGZjIHJlc3BvbnNpdmUtZGlzcGxheS5kdC5kdGZjIixmdW5jdGlvbigpe2EudXBkYXRlKCl9KTtiLm9uKCJkZXN0cm95LmR0ZmMiLGZ1bmN0aW9uKCl7YS5kZXN0cm95KCl9KTsKdGhpcy5fcG9zaXRpb25zKCk7dGhpcy5fc2Nyb2xsKCl9LF9jbG9uZTpmdW5jdGlvbihhLGIpe3ZhciBlPXRoaXMucy5kdCxkPXRoaXMuZG9tW2FdLGs9ImhlYWRlciI9PT1hP3RoaXMuZG9tLnRoZWFkOnRoaXMuZG9tLnRmb290OyFiJiZkLmZsb2F0aW5nP2QuZmxvYXRpbmcucmVtb3ZlQ2xhc3MoImZpeGVkSGVhZGVyLWZsb2F0aW5nIGZpeGVkSGVhZGVyLWxvY2tlZCIpOihkLmZsb2F0aW5nJiYoZC5wbGFjZWhvbGRlci5yZW1vdmUoKSx0aGlzLl91bnNpemUoYSksZC5mbG9hdGluZy5jaGlsZHJlbigpLmRldGFjaCgpLGQuZmxvYXRpbmcucmVtb3ZlKCkpLGQuZmxvYXRpbmc9YyhlLnRhYmxlKCkubm9kZSgpLmNsb25lTm9kZSghMSkpLmNzcygidGFibGUtbGF5b3V0IiwiZml4ZWQiKS5hdHRyKCJhcmlhLWhpZGRlbiIsInRydWUiKS5yZW1vdmVBdHRyKCJpZCIpLmFwcGVuZChrKS5hcHBlbmRUbygiYm9keSIpLGQucGxhY2Vob2xkZXI9ay5jbG9uZSghMSksZC5wbGFjZWhvbGRlci5maW5kKCIqW2lkXSIpLnJlbW92ZUF0dHIoImlkIiksCmQuaG9zdC5wcmVwZW5kKGQucGxhY2Vob2xkZXIpLHRoaXMuX21hdGNoV2lkdGhzKGQucGxhY2Vob2xkZXIsZC5mbG9hdGluZykpfSxfbWF0Y2hXaWR0aHM6ZnVuY3Rpb24oYSxiKXt2YXIgZT1mdW5jdGlvbihiKXtyZXR1cm4gYyhiLGEpLm1hcChmdW5jdGlvbigpe3JldHVybiBjKHRoaXMpLndpZHRoKCl9KS50b0FycmF5KCl9LGQ9ZnVuY3Rpb24oYSxkKXtjKGEsYikuZWFjaChmdW5jdGlvbihhKXtjKHRoaXMpLmNzcyh7d2lkdGg6ZFthXSxtaW5XaWR0aDpkW2FdfSl9KX0saz1lKCJ0aCIpO2U9ZSgidGQiKTtkKCJ0aCIsayk7ZCgidGQiLGUpfSxfdW5zaXplOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZG9tW2FdLmZsb2F0aW5nO2ImJigiZm9vdGVyIj09PWF8fCJoZWFkZXIiPT09YSYmIXRoaXMucy5hdXRvV2lkdGgpP2MoInRoLCB0ZCIsYikuY3NzKHt3aWR0aDoiIixtaW5XaWR0aDoiIn0pOmImJiJoZWFkZXIiPT09YSYmYygidGgsIHRkIixiKS5jc3MoIm1pbi13aWR0aCIsIiIpfSwKX2hvcml6b250YWw6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmRvbVthXSxkPXRoaXMucy5wb3NpdGlvbixrPXRoaXMucy5zY3JvbGxMZWZ0O2MuZmxvYXRpbmcmJmtbYV0hPT1iJiYoYy5mbG9hdGluZy5jc3MoImxlZnQiLGQubGVmdC1iKSxrW2FdPWIpfSxfbW9kZUNoYW5nZTpmdW5jdGlvbihhLGIsZSl7dmFyIGQ9dGhpcy5kb21bYl0saz10aGlzLnMucG9zaXRpb24sZj10aGlzLmRvbVsiZm9vdGVyIj09PWI/InRmb290IjoidGhlYWQiXSxoPWMuY29udGFpbnMoZlswXSxnLmFjdGl2ZUVsZW1lbnQpP2cuYWN0aXZlRWxlbWVudDpudWxsO2gmJmguYmx1cigpOyJpbi1wbGFjZSI9PT1hPyhkLnBsYWNlaG9sZGVyJiYoZC5wbGFjZWhvbGRlci5yZW1vdmUoKSxkLnBsYWNlaG9sZGVyPW51bGwpLHRoaXMuX3Vuc2l6ZShiKSwiaGVhZGVyIj09PWI/ZC5ob3N0LnByZXBlbmQoZik6ZC5ob3N0LmFwcGVuZChmKSxkLmZsb2F0aW5nJiYoZC5mbG9hdGluZy5yZW1vdmUoKSxkLmZsb2F0aW5nPQpudWxsKSk6ImluIj09PWE/KHRoaXMuX2Nsb25lKGIsZSksZC5mbG9hdGluZy5hZGRDbGFzcygiZml4ZWRIZWFkZXItZmxvYXRpbmciKS5jc3MoImhlYWRlciI9PT1iPyJ0b3AiOiJib3R0b20iLHRoaXMuY1tiKyJPZmZzZXQiXSkuY3NzKCJsZWZ0IixrLmxlZnQrInB4IikuY3NzKCJ3aWR0aCIsay53aWR0aCsicHgiKSwiZm9vdGVyIj09PWImJmQuZmxvYXRpbmcuY3NzKCJ0b3AiLCIiKSk6ImJlbG93Ij09PWE/KHRoaXMuX2Nsb25lKGIsZSksZC5mbG9hdGluZy5hZGRDbGFzcygiZml4ZWRIZWFkZXItbG9ja2VkIikuY3NzKCJ0b3AiLGsudGZvb3RUb3Atay50aGVhZEhlaWdodCkuY3NzKCJsZWZ0IixrLmxlZnQrInB4IikuY3NzKCJ3aWR0aCIsay53aWR0aCsicHgiKSk6ImFib3ZlIj09PWEmJih0aGlzLl9jbG9uZShiLGUpLGQuZmxvYXRpbmcuYWRkQ2xhc3MoImZpeGVkSGVhZGVyLWxvY2tlZCIpLmNzcygidG9wIixrLnRib2R5VG9wKS5jc3MoImxlZnQiLGsubGVmdCsicHgiKS5jc3MoIndpZHRoIiwKay53aWR0aCsicHgiKSk7aCYmaCE9PWcuYWN0aXZlRWxlbWVudCYmc2V0VGltZW91dChmdW5jdGlvbigpe2guZm9jdXMoKX0sMTApO3RoaXMucy5zY3JvbGxMZWZ0LmhlYWRlcj0tMTt0aGlzLnMuc2Nyb2xsTGVmdC5mb290ZXI9LTE7dGhpcy5zW2IrIk1vZGUiXT1hfSxfcG9zaXRpb25zOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zLmR0LnRhYmxlKCksYj10aGlzLnMucG9zaXRpb24sZT10aGlzLmRvbTthPWMoYS5ub2RlKCkpO3ZhciBkPWEuY2hpbGRyZW4oInRoZWFkIiksaz1hLmNoaWxkcmVuKCJ0Zm9vdCIpO2U9ZS50Ym9keTtiLnZpc2libGU9YS5pcygiOnZpc2libGUiKTtiLndpZHRoPWEub3V0ZXJXaWR0aCgpO2IubGVmdD1hLm9mZnNldCgpLmxlZnQ7Yi50aGVhZFRvcD1kLm9mZnNldCgpLnRvcDtiLnRib2R5VG9wPWUub2Zmc2V0KCkudG9wO2IudGJvZHlIZWlnaHQ9ZS5vdXRlckhlaWdodCgpO2IudGhlYWRIZWlnaHQ9Yi50Ym9keVRvcC1iLnRoZWFkVG9wO2subGVuZ3RoPyhiLnRmb290VG9wPQprLm9mZnNldCgpLnRvcCxiLnRmb290Qm90dG9tPWIudGZvb3RUb3Aray5vdXRlckhlaWdodCgpLGIudGZvb3RIZWlnaHQ9Yi50Zm9vdEJvdHRvbS1iLnRmb290VG9wKTooYi50Zm9vdFRvcD1iLnRib2R5VG9wK2Uub3V0ZXJIZWlnaHQoKSxiLnRmb290Qm90dG9tPWIudGZvb3RUb3AsYi50Zm9vdEhlaWdodD1iLnRmb290VG9wKX0sX3Njcm9sbDpmdW5jdGlvbihhKXt2YXIgYj1jKGcpLnNjcm9sbFRvcCgpLGU9YyhnKS5zY3JvbGxMZWZ0KCksZD10aGlzLnMucG9zaXRpb24saztpZih0aGlzLmMuaGVhZGVyKXt2YXIgZj10aGlzLnMuZW5hYmxlPyFkLnZpc2libGV8fGI8PWQudGhlYWRUb3AtdGhpcy5jLmhlYWRlck9mZnNldD8iaW4tcGxhY2UiOmI8PWQudGZvb3RUb3AtZC50aGVhZEhlaWdodC10aGlzLmMuaGVhZGVyT2Zmc2V0PyJpbiI6ImJlbG93IjoiaW4tcGxhY2UiOyhhfHxmIT09dGhpcy5zLmhlYWRlck1vZGUpJiZ0aGlzLl9tb2RlQ2hhbmdlKGYsImhlYWRlciIsYSk7dGhpcy5faG9yaXpvbnRhbCgiaGVhZGVyIiwKZSl9dGhpcy5jLmZvb3RlciYmdGhpcy5kb20udGZvb3QubGVuZ3RoJiYodGhpcy5zLmVuYWJsZSYmKGs9IWQudmlzaWJsZXx8YitkLndpbmRvd0hlaWdodD49ZC50Zm9vdEJvdHRvbSt0aGlzLmMuZm9vdGVyT2Zmc2V0PyJpbi1wbGFjZSI6ZC53aW5kb3dIZWlnaHQrYj5kLnRib2R5VG9wK2QudGZvb3RIZWlnaHQrdGhpcy5jLmZvb3Rlck9mZnNldD8iaW4iOiJhYm92ZSIpLChhfHxrIT09dGhpcy5zLmZvb3Rlck1vZGUpJiZ0aGlzLl9tb2RlQ2hhbmdlKGssImZvb3RlciIsYSksdGhpcy5faG9yaXpvbnRhbCgiZm9vdGVyIixlKSl9fSk7bS52ZXJzaW9uPSIzLjEuNiI7bS5kZWZhdWx0cz17aGVhZGVyOiEwLGZvb3RlcjohMSxoZWFkZXJPZmZzZXQ6MCxmb290ZXJPZmZzZXQ6MH07Yy5mbi5kYXRhVGFibGUuRml4ZWRIZWFkZXI9bTtjLmZuLkRhdGFUYWJsZS5GaXhlZEhlYWRlcj1tO2MoZykub24oImluaXQuZHQuZHRmaCIsZnVuY3Rpb24oYSxiLGUpeyJkdCI9PT1hLm5hbWVzcGFjZSYmCihhPWIub0luaXQuZml4ZWRIZWFkZXIsZT1oLmRlZmF1bHRzLmZpeGVkSGVhZGVyLCFhJiYhZXx8Yi5fZml4ZWRIZWFkZXJ8fChlPWMuZXh0ZW5kKHt9LGUsYSksITEhPT1hJiZuZXcgbShiLGUpKSl9KTtoLkFwaS5yZWdpc3RlcigiZml4ZWRIZWFkZXIoKSIsZnVuY3Rpb24oKXt9KTtoLkFwaS5yZWdpc3RlcigiZml4ZWRIZWFkZXIuYWRqdXN0KCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihhKXsoYT1hLl9maXhlZEhlYWRlcikmJmEudXBkYXRlKCl9KX0pO2guQXBpLnJlZ2lzdGVyKCJmaXhlZEhlYWRlci5lbmFibGUoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihiKXtiPWIuX2ZpeGVkSGVhZGVyO2E9YSE9PWw/YTohMDtiJiZhIT09Yi5lbmFibGVkKCkmJmIuZW5hYmxlKGEpfSl9KTtoLkFwaS5yZWdpc3RlcigiZml4ZWRIZWFkZXIuZW5hYmxlZCgpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRleHQubGVuZ3RoJiYKZmg/ZmguZW5hYmxlZCgpOiExfSk7aC5BcGkucmVnaXN0ZXIoImZpeGVkSGVhZGVyLmRpc2FibGUoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGEpeyhhPWEuX2ZpeGVkSGVhZGVyKSYmYS5lbmFibGVkKCkmJmEuZW5hYmxlKCExKX0pfSk7Yy5lYWNoKFsiaGVhZGVyIiwiZm9vdGVyIl0sZnVuY3Rpb24oYSxiKXtoLkFwaS5yZWdpc3RlcigiZml4ZWRIZWFkZXIuIitiKyJPZmZzZXQoKSIsZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5jb250ZXh0O3JldHVybiBhPT09bD9jLmxlbmd0aCYmY1swXS5fZml4ZWRIZWFkZXI/Y1swXS5fZml4ZWRIZWFkZXJbYisiT2Zmc2V0Il0oKTpsOnRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihjKXtpZihjPWMuX2ZpeGVkSGVhZGVyKWNbYisiT2Zmc2V0Il0oYSl9KX0pfSk7cmV0dXJuIG19KTsKCgovKiEKICAgQ29weXJpZ2h0IDIwMDktMjAxOSBTcHJ5TWVkaWEgTHRkLgoKIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgYXZhaWxhYmxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKICAgTUlUIGxpY2Vuc2UgLSBodHRwOi8vZGF0YXRhYmxlcy5uZXQvbGljZW5zZS9taXQKCiBUaGlzIHNvdXJjZSBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIGxpY2Vuc2UgZmlsZXMgZm9yIGRldGFpbHMuCgogRm9yIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvOiBodHRwOi8vd3d3LmRhdGF0YWJsZXMubmV0CiBLZXlUYWJsZSAyLjUuMQogwqkyMDA5LTIwMTkgU3ByeU1lZGlhIEx0ZCAtIGRhdGF0YWJsZXMubmV0L2xpY2Vuc2UKKi8KdmFyICRqc2NvbXA9JGpzY29tcHx8e307JGpzY29tcC5zY29wZT17fTskanNjb21wLmFycmF5SXRlcmF0b3JJbXBsPWZ1bmN0aW9uKGIpe3ZhciBmPTA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGY8Yi5sZW5ndGg/e2RvbmU6ITEsdmFsdWU6YltmKytdfTp7ZG9uZTohMH19fTskanNjb21wLmFycmF5SXRlcmF0b3I9ZnVuY3Rpb24oYil7cmV0dXJue25leHQ6JGpzY29tcC5hcnJheUl0ZXJhdG9ySW1wbChiKX19OyRqc2NvbXAuQVNTVU1FX0VTNT0hMTskanNjb21wLkFTU1VNRV9OT19OQVRJVkVfTUFQPSExOyRqc2NvbXAuQVNTVU1FX05PX05BVElWRV9TRVQ9ITE7JGpzY29tcC5TSU1QTEVfRlJPVU5EX1BPTFlGSUxMPSExOwokanNjb21wLmRlZmluZVByb3BlcnR5PSRqc2NvbXAuQVNTVU1FX0VTNXx8ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihiLGYsayl7YiE9QXJyYXkucHJvdG90eXBlJiZiIT1PYmplY3QucHJvdG90eXBlJiYoYltmXT1rLnZhbHVlKX07JGpzY29tcC5nZXRHbG9iYWw9ZnVuY3Rpb24oYil7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdz09PWI/YjoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmbnVsbCE9Z2xvYmFsP2dsb2JhbDpifTskanNjb21wLmdsb2JhbD0kanNjb21wLmdldEdsb2JhbCh0aGlzKTskanNjb21wLlNZTUJPTF9QUkVGSVg9ImpzY29tcF9zeW1ib2xfIjskanNjb21wLmluaXRTeW1ib2w9ZnVuY3Rpb24oKXskanNjb21wLmluaXRTeW1ib2w9ZnVuY3Rpb24oKXt9OyRqc2NvbXAuZ2xvYmFsLlN5bWJvbHx8KCRqc2NvbXAuZ2xvYmFsLlN5bWJvbD0kanNjb21wLlN5bWJvbCl9OwokanNjb21wLlN5bWJvbENsYXNzPWZ1bmN0aW9uKGIsZil7dGhpcy4kanNjb21wJHN5bWJvbCRpZF89YjskanNjb21wLmRlZmluZVByb3BlcnR5KHRoaXMsImRlc2NyaXB0aW9uIix7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ9KX07JGpzY29tcC5TeW1ib2xDbGFzcy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kanNjb21wJHN5bWJvbCRpZF99OyRqc2NvbXAuU3ltYm9sPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihrKXtpZih0aGlzIGluc3RhbmNlb2YgYil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IiKTtyZXR1cm4gbmV3ICRqc2NvbXAuU3ltYm9sQ2xhc3MoJGpzY29tcC5TWU1CT0xfUFJFRklYKyhrfHwiIikrIl8iK2YrKyxrKX12YXIgZj0wO3JldHVybiBifSgpOwokanNjb21wLmluaXRTeW1ib2xJdGVyYXRvcj1mdW5jdGlvbigpeyRqc2NvbXAuaW5pdFN5bWJvbCgpO3ZhciBiPSRqc2NvbXAuZ2xvYmFsLlN5bWJvbC5pdGVyYXRvcjtifHwoYj0kanNjb21wLmdsb2JhbC5TeW1ib2wuaXRlcmF0b3I9JGpzY29tcC5nbG9iYWwuU3ltYm9sKCJTeW1ib2wuaXRlcmF0b3IiKSk7ImZ1bmN0aW9uIiE9dHlwZW9mIEFycmF5LnByb3RvdHlwZVtiXSYmJGpzY29tcC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsYix7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuICRqc2NvbXAuaXRlcmF0b3JQcm90b3R5cGUoJGpzY29tcC5hcnJheUl0ZXJhdG9ySW1wbCh0aGlzKSl9fSk7JGpzY29tcC5pbml0U3ltYm9sSXRlcmF0b3I9ZnVuY3Rpb24oKXt9fTsKJGpzY29tcC5pbml0U3ltYm9sQXN5bmNJdGVyYXRvcj1mdW5jdGlvbigpeyRqc2NvbXAuaW5pdFN5bWJvbCgpO3ZhciBiPSRqc2NvbXAuZ2xvYmFsLlN5bWJvbC5hc3luY0l0ZXJhdG9yO2J8fChiPSRqc2NvbXAuZ2xvYmFsLlN5bWJvbC5hc3luY0l0ZXJhdG9yPSRqc2NvbXAuZ2xvYmFsLlN5bWJvbCgiU3ltYm9sLmFzeW5jSXRlcmF0b3IiKSk7JGpzY29tcC5pbml0U3ltYm9sQXN5bmNJdGVyYXRvcj1mdW5jdGlvbigpe319OyRqc2NvbXAuaXRlcmF0b3JQcm90b3R5cGU9ZnVuY3Rpb24oYil7JGpzY29tcC5pbml0U3ltYm9sSXRlcmF0b3IoKTtiPXtuZXh0OmJ9O2JbJGpzY29tcC5nbG9iYWwuU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtyZXR1cm4gYn07CiRqc2NvbXAuaXRlcmF0b3JGcm9tQXJyYXk9ZnVuY3Rpb24oYixmKXskanNjb21wLmluaXRTeW1ib2xJdGVyYXRvcigpO2IgaW5zdGFuY2VvZiBTdHJpbmcmJihiKz0iIik7dmFyIGs9MCxsPXtuZXh0OmZ1bmN0aW9uKCl7aWYoazxiLmxlbmd0aCl7dmFyIGc9aysrO3JldHVybnt2YWx1ZTpmKGcsYltnXSksZG9uZTohMX19bC5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ITAsdmFsdWU6dm9pZCAwfX07cmV0dXJuIGwubmV4dCgpfX07bFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIGx9O3JldHVybiBsfTsKJGpzY29tcC5wb2x5ZmlsbD1mdW5jdGlvbihiLGYsayxsKXtpZihmKXtrPSRqc2NvbXAuZ2xvYmFsO2I9Yi5zcGxpdCgiLiIpO2ZvcihsPTA7bDxiLmxlbmd0aC0xO2wrKyl7dmFyIGc9YltsXTtnIGluIGt8fChrW2ddPXt9KTtrPWtbZ119Yj1iW2IubGVuZ3RoLTFdO2w9a1tiXTtmPWYobCk7ZiE9bCYmbnVsbCE9ZiYmJGpzY29tcC5kZWZpbmVQcm9wZXJ0eShrLGIse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpmfSl9fTskanNjb21wLnBvbHlmaWxsKCJBcnJheS5wcm90b3R5cGUua2V5cyIsZnVuY3Rpb24oYil7cmV0dXJuIGI/YjpmdW5jdGlvbigpe3JldHVybiAkanNjb21wLml0ZXJhdG9yRnJvbUFycmF5KHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuIGJ9KX19LCJlczYiLCJlczMiKTsKKGZ1bmN0aW9uKGIpeyJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImpxdWVyeSIsImRhdGF0YWJsZXMubmV0Il0sZnVuY3Rpb24oZil7cmV0dXJuIGIoZix3aW5kb3csZG9jdW1lbnQpfSk6Im9iamVjdCI9PT10eXBlb2YgZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1mdW5jdGlvbihmLGspe2Z8fChmPXdpbmRvdyk7ayYmay5mbi5kYXRhVGFibGV8fChrPXJlcXVpcmUoImRhdGF0YWJsZXMubmV0IikoZixrKS4kKTtyZXR1cm4gYihrLGYsZi5kb2N1bWVudCl9OmIoalF1ZXJ5LHdpbmRvdyxkb2N1bWVudCl9KShmdW5jdGlvbihiLGYsayxsKXt2YXIgZz1iLmZuLmRhdGFUYWJsZSx0PTAscD1mdW5jdGlvbihhLGMpe2lmKCFnLnZlcnNpb25DaGVja3x8IWcudmVyc2lvbkNoZWNrKCIxLjEwLjgiKSl0aHJvdyJLZXlUYWJsZSByZXF1aXJlcyBEYXRhVGFibGVzIDEuMTAuOCBvciBuZXdlciI7dGhpcy5jPWIuZXh0ZW5kKCEwLHt9LGcuZGVmYXVsdHMua2V5VGFibGUsCnAuZGVmYXVsdHMsYyk7dGhpcy5zPXtkdDpuZXcgZy5BcGkoYSksZW5hYmxlOiEwLGZvY3VzRHJhdzohMSx3YWl0aW5nRm9yRHJhdzohMSxsYXN0Rm9jdXM6bnVsbCxuYW1lc3BhY2U6Ii5rZXlUYWJsZS0iK3QrK307dGhpcy5kb209e307YT10aGlzLnMuZHQuc2V0dGluZ3MoKVswXTtpZihjPWEua2V5dGFibGUpcmV0dXJuIGM7YS5rZXl0YWJsZT10aGlzO3RoaXMuX2NvbnN0cnVjdG9yKCl9O2IuZXh0ZW5kKHAucHJvdG90eXBlLHtibHVyOmZ1bmN0aW9uKCl7dGhpcy5fYmx1cigpfSxlbmFibGU6ZnVuY3Rpb24oYSl7dGhpcy5zLmVuYWJsZT1hfSxmb2N1czpmdW5jdGlvbihhLGMpe3RoaXMuX2ZvY3VzKHRoaXMucy5kdC5jZWxsKGEsYykpfSxmb2N1c2VkOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLnMubGFzdEZvY3VzKXJldHVybiExO3ZhciBjPXRoaXMucy5sYXN0Rm9jdXMuY2VsbC5pbmRleCgpO3JldHVybiBhLnJvdz09PWMucm93JiZhLmNvbHVtbj09PWMuY29sdW1ufSxfY29uc3RydWN0b3I6ZnVuY3Rpb24oKXt0aGlzLl90YWJJbnB1dCgpOwp2YXIgYT10aGlzLGM9dGhpcy5zLmR0LGU9YihjLnRhYmxlKCkubm9kZSgpKSxkPXRoaXMucy5uYW1lc3BhY2UsbT0hMTsic3RhdGljIj09PWUuY3NzKCJwb3NpdGlvbiIpJiZlLmNzcygicG9zaXRpb24iLCJyZWxhdGl2ZSIpO2IoYy50YWJsZSgpLmJvZHkoKSkub24oImNsaWNrIitkLCJ0aCwgdGQiLGZ1bmN0aW9uKGIpe2lmKCExIT09YS5zLmVuYWJsZSl7dmFyIGQ9Yy5jZWxsKHRoaXMpO2QuYW55KCkmJmEuX2ZvY3VzKGQsbnVsbCwhMSxiKX19KTtiKGspLm9uKCJrZXlkb3duIitkLGZ1bmN0aW9uKGMpe218fGEuX2tleShjKX0pO2lmKHRoaXMuYy5ibHVyYWJsZSliKGspLm9uKCJtb3VzZWRvd24iK2QsZnVuY3Rpb24oZCl7YihkLnRhcmdldCkucGFyZW50cygiLmRhdGFUYWJsZXNfZmlsdGVyIikubGVuZ3RoJiZhLl9ibHVyKCk7YihkLnRhcmdldCkucGFyZW50cygpLmZpbHRlcihjLnRhYmxlKCkuY29udGFpbmVyKCkpLmxlbmd0aHx8YihkLnRhcmdldCkucGFyZW50cygiZGl2LkRURSIpLmxlbmd0aHx8CmIoZC50YXJnZXQpLnBhcmVudHMoImRpdi5lZGl0b3ItZGF0ZXRpbWUiKS5sZW5ndGh8fGIoZC50YXJnZXQpLnBhcmVudHMoKS5maWx0ZXIoIi5EVEZDX0Nsb25lZCIpLmxlbmd0aHx8YS5fYmx1cigpfSk7aWYodGhpcy5jLmVkaXRvcil7dmFyIHE9dGhpcy5jLmVkaXRvcjtxLm9uKCJvcGVuLmtleVRhYmxlTWFpbiIsZnVuY3Rpb24oYyxiLGUpeyJpbmxpbmUiIT09YiYmYS5zLmVuYWJsZSYmKGEuZW5hYmxlKCExKSxxLm9uZSgiY2xvc2UiK2QsZnVuY3Rpb24oKXthLmVuYWJsZSghMCl9KSl9KTtpZih0aGlzLmMuZWRpdE9uRm9jdXMpYy5vbigia2V5LWZvY3VzIitkKyIga2V5LXJlZm9jdXMiK2QsZnVuY3Rpb24oYyxiLGQsZSl7YS5fZWRpdG9yKG51bGwsZSwhMCl9KTtjLm9uKCJrZXkiK2QsZnVuY3Rpb24oYyxiLGQsZSxtKXthLl9lZGl0b3IoZCxtLCExKX0pO2IoYy50YWJsZSgpLmJvZHkoKSkub24oImRibGNsaWNrIitkLCJ0aCwgdGQiLGZ1bmN0aW9uKGIpeyExIT09YS5zLmVuYWJsZSYmCmMuY2VsbCh0aGlzKS5hbnkoKSYmYS5fZWRpdG9yKG51bGwsYiwhMCl9KTtxLm9uKCJwcmVTdWJtaXQiLGZ1bmN0aW9uKCl7bT0hMH0pLm9uKCJwcmVTdWJtaXRDYW5jZWxsZWQiLGZ1bmN0aW9uKCl7bT0hMX0pLm9uKCJzdWJtaXRDb21wbGV0ZSIsZnVuY3Rpb24oKXttPSExfSl9aWYoYy5zZXR0aW5ncygpWzBdLm9GZWF0dXJlcy5iU3RhdGVTYXZlKWMub24oInN0YXRlU2F2ZVBhcmFtcyIrZCxmdW5jdGlvbihiLGMsZCl7ZC5rZXlUYWJsZT1hLnMubGFzdEZvY3VzP2Eucy5sYXN0Rm9jdXMuY2VsbC5pbmRleCgpOm51bGx9KTtjLm9uKCJkcmF3IitkLGZ1bmN0aW9uKGQpe2lmKCFhLnMuZm9jdXNEcmF3KXt2YXIgZT1hLnMubGFzdEZvY3VzO2lmKGUmJmUubm9kZSYmYihlLm5vZGUpLmNsb3Nlc3QoImJvZHkiKT09PWsuYm9keSl7ZT1hLnMubGFzdEZvY3VzLnJlbGF0aXZlO3ZhciBtPWMucGFnZS5pbmZvKCksaD1lLnJvdyttLnN0YXJ0OzAhPT1tLnJlY29yZHNEaXNwbGF5JiYoaD49bS5yZWNvcmRzRGlzcGxheSYmCihoPW0ucmVjb3Jkc0Rpc3BsYXktMSksYS5fZm9jdXMoaCxlLmNvbHVtbiwhMCxkKSl9fX0pO3RoaXMuYy5jbGlwYm9hcmQmJnRoaXMuX2NsaXBib2FyZCgpO2Mub24oImRlc3Ryb3kiK2QsZnVuY3Rpb24oKXthLl9ibHVyKCEwKTtjLm9mZihkKTtiKGMudGFibGUoKS5ib2R5KCkpLm9mZigiY2xpY2siK2QsInRoLCB0ZCIpLm9mZigiZGJsY2xpY2siK2QsInRoLCB0ZCIpO2Ioaykub2ZmKCJtb3VzZWRvd24iK2QpLm9mZigia2V5ZG93biIrZCkub2ZmKCJjb3B5IitkKS5vZmYoInBhc3RlIitkKX0pO3ZhciBoPWMuc3RhdGUubG9hZGVkKCk7aWYoaCYmaC5rZXlUYWJsZSljLm9uZSgiaW5pdCIsZnVuY3Rpb24oKXt2YXIgYT1jLmNlbGwoaC5rZXlUYWJsZSk7YS5hbnkoKSYmYS5mb2N1cygpfSk7ZWxzZSB0aGlzLmMuZm9jdXMmJmMuY2VsbCh0aGlzLmMuZm9jdXMpLmZvY3VzKCl9LF9ibHVyOmZ1bmN0aW9uKGEpe2lmKHRoaXMucy5lbmFibGUmJnRoaXMucy5sYXN0Rm9jdXMpe3ZhciBjPQp0aGlzLnMubGFzdEZvY3VzLmNlbGw7YihjLm5vZGUoKSkucmVtb3ZlQ2xhc3ModGhpcy5jLmNsYXNzTmFtZSk7dGhpcy5zLmxhc3RGb2N1cz1udWxsO2F8fCh0aGlzLl91cGRhdGVGaXhlZENvbHVtbnMoYy5pbmRleCgpLmNvbHVtbiksdGhpcy5fZW1pdEV2ZW50KCJrZXktYmx1ciIsW3RoaXMucy5kdCxjXSkpfX0sX2NsaXBib2FyZDpmdW5jdGlvbigpe3ZhciBhPXRoaXMucy5kdCxjPXRoaXMsZT10aGlzLnMubmFtZXNwYWNlO2YuZ2V0U2VsZWN0aW9uJiYoYihrKS5vbigiY29weSIrZSxmdW5jdGlvbihhKXthPWEub3JpZ2luYWxFdmVudDt2YXIgYj1mLmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCksZD1jLnMubGFzdEZvY3VzOyFiJiZkJiYoYS5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvcGxhaW4iLGQuY2VsbC5yZW5kZXIoYy5jLmNsaXBib2FyZE9ydGhvZ29uYWwpKSxhLnByZXZlbnREZWZhdWx0KCkpfSksYihrKS5vbigicGFzdGUiK2UsZnVuY3Rpb24oYil7Yj1iLm9yaWdpbmFsRXZlbnQ7CnZhciBkPWMucy5sYXN0Rm9jdXMsZT1rLmFjdGl2ZUVsZW1lbnQsaD1jLmMuZWRpdG9yLG47IWR8fGUmJiJib2R5IiE9PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKXx8KGIucHJldmVudERlZmF1bHQoKSxmLmNsaXBib2FyZERhdGEmJmYuY2xpcGJvYXJkRGF0YS5nZXREYXRhP249Zi5jbGlwYm9hcmREYXRhLmdldERhdGEoIlRleHQiKTpiLmNsaXBib2FyZERhdGEmJmIuY2xpcGJvYXJkRGF0YS5nZXREYXRhJiYobj1iLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgidGV4dC9wbGFpbiIpKSxoP2guaW5saW5lKGQuY2VsbC5pbmRleCgpKS5zZXQoaC5kaXNwbGF5ZWQoKVswXSxuKS5zdWJtaXQoKTooZC5jZWxsLmRhdGEobiksYS5kcmF3KCExKSkpfSkpfSxfY29sdW1uczpmdW5jdGlvbigpe3ZhciBhPXRoaXMucy5kdCxiPWEuY29sdW1ucyh0aGlzLmMuY29sdW1ucykuaW5kZXhlcygpLGU9W107YS5jb2x1bW5zKCI6dmlzaWJsZSIpLmV2ZXJ5KGZ1bmN0aW9uKGEpey0xIT09Yi5pbmRleE9mKGEpJiYKZS5wdXNoKGEpfSk7cmV0dXJuIGV9LF9lZGl0b3I6ZnVuY3Rpb24oYSxjLGUpe3ZhciBkPXRoaXMsbT10aGlzLnMuZHQsZj10aGlzLmMuZWRpdG9yLGg9dGhpcy5zLmxhc3RGb2N1cy5jZWxsLG49dGhpcy5zLm5hbWVzcGFjZTtpZighKGIoImRpdi5EVEUiLGgubm9kZSgpKS5sZW5ndGh8fG51bGwhPT1hJiYoMDw9YSYmOT49YXx8MTE9PT1hfHwxMj09PWF8fDE0PD1hJiYzMT49YXx8MTEyPD1hJiYxMjM+PWF8fDEyNzw9YSYmMTU5Pj1hKSkpe2Muc3RvcFByb3BhZ2F0aW9uKCk7MTM9PT1hJiZjLnByZXZlbnREZWZhdWx0KCk7dmFyIGc9ZnVuY3Rpb24oKXtmLm9uZSgib3BlbiIrbixmdW5jdGlvbigpe2Yub2ZmKCJjYW5jZWxPcGVuIituKTtlfHxiKCJkaXYuRFRFX0ZpZWxkX0lucHV0Q29udHJvbCBpbnB1dCwgZGl2LkRURV9GaWVsZF9JbnB1dENvbnRyb2wgdGV4dGFyZWEiKS5zZWxlY3QoKTttLmtleXMuZW5hYmxlKGU/InRhYi1vbmx5IjoibmF2aWdhdGlvbi1vbmx5Iik7bS5vbigia2V5LWJsdXIuZWRpdG9yIiwKZnVuY3Rpb24oYSxiLGMpe2YuZGlzcGxheWVkKCkmJmMubm9kZSgpPT09aC5ub2RlKCkmJmYuc3VibWl0KCl9KTtlJiZiKG0udGFibGUoKS5jb250YWluZXIoKSkuYWRkQ2xhc3MoImR0ay1mb2N1cy1hbHQiKTtmLm9uKCJwcmVTdWJtaXRDYW5jZWxsZWQiK24sZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5fZm9jdXMoaCxudWxsLCExKX0sNTApfSk7Zi5vbigic3VibWl0VW5zdWNjZXNzZnVsIituLGZ1bmN0aW9uKCl7ZC5fZm9jdXMoaCxudWxsLCExKX0pO2Yub25lKCJjbG9zZSIsZnVuY3Rpb24oKXttLmtleXMuZW5hYmxlKCEwKTttLm9mZigia2V5LWJsdXIuZWRpdG9yIik7Zi5vZmYobik7YihtLnRhYmxlKCkuY29udGFpbmVyKCkpLnJlbW92ZUNsYXNzKCJkdGstZm9jdXMtYWx0Iil9KX0pLm9uZSgiY2FuY2VsT3BlbiIrbixmdW5jdGlvbigpe2Yub2ZmKG4pfSkuaW5saW5lKGguaW5kZXgoKSl9OzEzPT09YT8oZT0hMCxiKGspLm9uZSgia2V5dXAiLGZ1bmN0aW9uKCl7ZygpfSkpOgpnKCl9fSxfZW1pdEV2ZW50OmZ1bmN0aW9uKGEsYyl7dGhpcy5zLmR0Lml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oZSxkKXtiKGUublRhYmxlKS50cmlnZ2VySGFuZGxlcihhLGMpfSl9LF9mb2N1czpmdW5jdGlvbihhLGMsZSxkKXt2YXIgbT10aGlzLGc9dGhpcy5zLmR0LGg9Zy5wYWdlLmluZm8oKSxuPXRoaXMucy5sYXN0Rm9jdXM7ZHx8KGQ9bnVsbCk7aWYodGhpcy5zLmVuYWJsZSl7aWYoIm51bWJlciIhPT10eXBlb2YgYSl7aWYoIWEuYW55KCkpcmV0dXJuO3ZhciByPWEuaW5kZXgoKTtjPXIuY29sdW1uO2E9Zy5yb3dzKHtmaWx0ZXI6ImFwcGxpZWQiLG9yZGVyOiJhcHBsaWVkIn0pLmluZGV4ZXMoKS5pbmRleE9mKHIucm93KTtpZigwPmEpcmV0dXJuO2guc2VydmVyU2lkZSYmKGErPWguc3RhcnQpfWlmKC0xIT09aC5sZW5ndGgmJihhPGguc3RhcnR8fGE+PWguc3RhcnQraC5sZW5ndGgpKXRoaXMucy5mb2N1c0RyYXc9ITAsdGhpcy5zLndhaXRpbmdGb3JEcmF3PSEwLGcub25lKCJkcmF3IiwKZnVuY3Rpb24oKXttLnMuZm9jdXNEcmF3PSExO20ucy53YWl0aW5nRm9yRHJhdz0hMTttLl9mb2N1cyhhLGMsbCxkKX0pLnBhZ2UoTWF0aC5mbG9vcihhL2gubGVuZ3RoKSkuZHJhdyghMSk7ZWxzZSBpZigtMSE9PWIuaW5BcnJheShjLHRoaXMuX2NvbHVtbnMoKSkpe2guc2VydmVyU2lkZSYmKGEtPWguc3RhcnQpO2g9Zy5jZWxscyhudWxsLGMse3NlYXJjaDoiYXBwbGllZCIsb3JkZXI6ImFwcGxpZWQifSkuZmxhdHRlbigpO2g9Zy5jZWxsKGhbYV0pO2lmKG4pe2lmKG4ubm9kZT09PWgubm9kZSgpKXt0aGlzLl9lbWl0RXZlbnQoImtleS1yZWZvY3VzIixbdGhpcy5zLmR0LGgsZHx8bnVsbF0pO3JldHVybn10aGlzLl9ibHVyKCl9dGhpcy5fcmVtb3ZlT3RoZXJGb2N1cygpO249YihoLm5vZGUoKSk7bi5hZGRDbGFzcyh0aGlzLmMuY2xhc3NOYW1lKTt0aGlzLl91cGRhdGVGaXhlZENvbHVtbnMoYyk7aWYoZT09PWx8fCEwPT09ZSl0aGlzLl9zY3JvbGwoYihmKSxiKGsuYm9keSksbiwib2Zmc2V0IiksCmU9Zy50YWJsZSgpLmJvZHkoKS5wYXJlbnROb2RlLGUhPT1nLnRhYmxlKCkuaGVhZGVyKCkucGFyZW50Tm9kZSYmKGU9YihlLnBhcmVudE5vZGUpLHRoaXMuX3Njcm9sbChlLGUsbiwicG9zaXRpb24iKSk7dGhpcy5zLmxhc3RGb2N1cz17Y2VsbDpoLG5vZGU6aC5ub2RlKCkscmVsYXRpdmU6e3JvdzpnLnJvd3Moe3BhZ2U6ImN1cnJlbnQifSkuaW5kZXhlcygpLmluZGV4T2YoaC5pbmRleCgpLnJvdyksY29sdW1uOmguaW5kZXgoKS5jb2x1bW59fTt0aGlzLl9lbWl0RXZlbnQoImtleS1mb2N1cyIsW3RoaXMucy5kdCxoLGR8fG51bGxdKTtnLnN0YXRlLnNhdmUoKX19fSxfa2V5OmZ1bmN0aW9uKGEpe2lmKHRoaXMucy53YWl0aW5nRm9yRHJhdylhLnByZXZlbnREZWZhdWx0KCk7ZWxzZXt2YXIgYz10aGlzLnMuZW5hYmxlLGU9ITA9PT1jfHwibmF2aWdhdGlvbi1vbmx5Ij09PWM7aWYoYyYmKCEoMD09PWEua2V5Q29kZXx8YS5jdHJsS2V5fHxhLm1ldGFLZXl8fGEuYWx0S2V5KXx8YS5jdHJsS2V5JiYKYS5hbHRLZXkpKXt2YXIgZD10aGlzLnMubGFzdEZvY3VzO2lmKGQpaWYodGhpcy5zLmR0LmNlbGwoZC5ub2RlKS5hbnkoKSl7ZD10aGlzLnMuZHQ7dmFyIG09dGhpcy5zLmR0LnNldHRpbmdzKClbMF0ub1Njcm9sbC5zWT8hMDohMTtpZighdGhpcy5jLmtleXN8fC0xIT09Yi5pbkFycmF5KGEua2V5Q29kZSx0aGlzLmMua2V5cykpc3dpdGNoKGEua2V5Q29kZSl7Y2FzZSA5OnRoaXMuX3NoaWZ0KGEsYS5zaGlmdEtleT8ibGVmdCI6InJpZ2h0IiwhMCk7YnJlYWs7Y2FzZSAyNzp0aGlzLnMuYmx1cmFibGUmJiEwPT09YyYmdGhpcy5fYmx1cigpO2JyZWFrO2Nhc2UgMzM6Y2FzZSAzNDplJiYhbSYmKGEucHJldmVudERlZmF1bHQoKSxkLnBhZ2UoMzM9PT1hLmtleUNvZGU/InByZXZpb3VzIjoibmV4dCIpLmRyYXcoITEpKTticmVhaztjYXNlIDM1OmNhc2UgMzY6ZSYmKGEucHJldmVudERlZmF1bHQoKSxjPWQuY2VsbHMoe3BhZ2U6ImN1cnJlbnQifSkuaW5kZXhlcygpLGU9dGhpcy5fY29sdW1ucygpLAp0aGlzLl9mb2N1cyhkLmNlbGwoY1szNT09PWEua2V5Q29kZT9jLmxlbmd0aC0xOmVbMF1dKSxudWxsLCEwLGEpKTticmVhaztjYXNlIDM3OmUmJnRoaXMuX3NoaWZ0KGEsImxlZnQiKTticmVhaztjYXNlIDM4OmUmJnRoaXMuX3NoaWZ0KGEsInVwIik7YnJlYWs7Y2FzZSAzOTplJiZ0aGlzLl9zaGlmdChhLCJyaWdodCIpO2JyZWFrO2Nhc2UgNDA6ZSYmdGhpcy5fc2hpZnQoYSwiZG93biIpO2JyZWFrO2Nhc2UgMTEzOmlmKHRoaXMuYy5lZGl0b3Ipe3RoaXMuX2VkaXRvcihudWxsLGEsITApO2JyZWFrfWRlZmF1bHQ6ITA9PT1jJiZ0aGlzLl9lbWl0RXZlbnQoImtleSIsW2QsYS5rZXlDb2RlLHRoaXMucy5sYXN0Rm9jdXMuY2VsbCxhXSl9fWVsc2UgdGhpcy5zLmxhc3RGb2N1cz1udWxsfX19LF9yZW1vdmVPdGhlckZvY3VzOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zLmR0LnRhYmxlKCkubm9kZSgpO2IuZm4uZGF0YVRhYmxlLnRhYmxlcyh7YXBpOiEwfSkuaXRlcmF0b3IoInRhYmxlIiwKZnVuY3Rpb24oYil7dGhpcy50YWJsZSgpLm5vZGUoKSE9PWEmJnRoaXMuY2VsbC5ibHVyKCl9KX0sX3Njcm9sbDpmdW5jdGlvbihhLGIsZSxkKXt2YXIgYz1lW2RdKCksZj1lLm91dGVySGVpZ2h0KCksaD1lLm91dGVyV2lkdGgoKSxrPWIuc2Nyb2xsVG9wKCksZz1iLnNjcm9sbExlZnQoKSxsPWEuaGVpZ2h0KCk7YT1hLndpZHRoKCk7InBvc2l0aW9uIj09PWQmJihjLnRvcCs9cGFyc2VJbnQoZS5jbG9zZXN0KCJ0YWJsZSIpLmNzcygidG9wIiksMTApKTtjLnRvcDxrJiZiLnNjcm9sbFRvcChjLnRvcCk7Yy5sZWZ0PGcmJmIuc2Nyb2xsTGVmdChjLmxlZnQpO2MudG9wK2Y+aytsJiZmPGwmJmIuc2Nyb2xsVG9wKGMudG9wK2YtbCk7Yy5sZWZ0K2g+ZythJiZoPGEmJmIuc2Nyb2xsTGVmdChjLmxlZnQraC1hKX0sX3NoaWZ0OmZ1bmN0aW9uKGEsYyxlKXt2YXIgZD10aGlzLnMuZHQsZj1kLnBhZ2UuaW5mbygpLGs9Zi5yZWNvcmRzRGlzcGxheSxoPXRoaXMucy5sYXN0Rm9jdXMuY2VsbCxnPQp0aGlzLl9jb2x1bW5zKCk7aWYoaCl7dmFyIGw9ZC5yb3dzKHtmaWx0ZXI6ImFwcGxpZWQiLG9yZGVyOiJhcHBsaWVkIn0pLmluZGV4ZXMoKS5pbmRleE9mKGguaW5kZXgoKS5yb3cpO2Yuc2VydmVyU2lkZSYmKGwrPWYuc3RhcnQpO2Q9ZC5jb2x1bW5zKGcpLmluZGV4ZXMoKS5pbmRleE9mKGguaW5kZXgoKS5jb2x1bW4pO2Y9Z1tkXTsicmlnaHQiPT09Yz9kPj1nLmxlbmd0aC0xPyhsKyssZj1nWzBdKTpmPWdbZCsxXToibGVmdCI9PT1jPzA9PT1kPyhsLS0sZj1nW2cubGVuZ3RoLTFdKTpmPWdbZC0xXToidXAiPT09Yz9sLS06ImRvd24iPT09YyYmbCsrOzA8PWwmJmw8ayYmLTEhPT1iLmluQXJyYXkoZixnKT8oYSYmYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzKGwsZiwhMCxhKSk6ZSYmdGhpcy5jLmJsdXJhYmxlP3RoaXMuX2JsdXIoKTphJiZhLnByZXZlbnREZWZhdWx0KCl9fSxfdGFiSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGM9dGhpcy5zLmR0LGU9bnVsbCE9PXRoaXMuYy50YWJJbmRleD8KdGhpcy5jLnRhYkluZGV4OmMuc2V0dGluZ3MoKVswXS5pVGFiSW5kZXg7aWYoLTEhPWUpYignPGRpdj48aW5wdXQgdHlwZT0idGV4dCIgdGFiaW5kZXg9IicrZSsnIi8+PC9kaXY+JykuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGhlaWdodDoxLHdpZHRoOjAsb3ZlcmZsb3c6ImhpZGRlbiJ9KS5pbnNlcnRCZWZvcmUoYy50YWJsZSgpLm5vZGUoKSkuY2hpbGRyZW4oKS5vbigiZm9jdXMiLGZ1bmN0aW9uKGIpe3ZhciBkPWMuY2VsbCgiOmVxKDApIixhLl9jb2x1bW5zKCkse3BhZ2U6ImN1cnJlbnQifSk7ZC5hbnkoKSYmYS5fZm9jdXMoZCxudWxsLCEwLGIpfSl9LF91cGRhdGVGaXhlZENvbHVtbnM6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5zLmR0LGU9Yi5zZXR0aW5ncygpWzBdO2lmKGUuX29GaXhlZENvbHVtbnMpe3ZhciBkPWUuYW9Db2x1bW5zLmxlbmd0aC1lLl9vRml4ZWRDb2x1bW5zLnMuaVJpZ2h0Q29sdW1uczsoYTxlLl9vRml4ZWRDb2x1bW5zLnMuaUxlZnRDb2x1bW5zfHxhPj0KZCkmJmIuZml4ZWRDb2x1bW5zKCkudXBkYXRlKCl9fX0pO3AuZGVmYXVsdHM9e2JsdXJhYmxlOiEwLGNsYXNzTmFtZToiZm9jdXMiLGNsaXBib2FyZDohMCxjbGlwYm9hcmRPcnRob2dvbmFsOiJkaXNwbGF5Iixjb2x1bW5zOiIiLGVkaXRvcjpudWxsLGVkaXRPbkZvY3VzOiExLGZvY3VzOm51bGwsa2V5czpudWxsLHRhYkluZGV4Om51bGx9O3AudmVyc2lvbj0iMi41LjEiO2IuZm4uZGF0YVRhYmxlLktleVRhYmxlPXA7Yi5mbi5EYXRhVGFibGUuS2V5VGFibGU9cDtnLkFwaS5yZWdpc3RlcigiY2VsbC5ibHVyKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihhKXthLmtleXRhYmxlJiZhLmtleXRhYmxlLmJsdXIoKX0pfSk7Zy5BcGkucmVnaXN0ZXIoImNlbGwoKS5mb2N1cygpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJjZWxsIixmdW5jdGlvbihhLGIsZSl7YS5rZXl0YWJsZSYmYS5rZXl0YWJsZS5mb2N1cyhiLGUpfSl9KTsKZy5BcGkucmVnaXN0ZXIoImtleXMuZGlzYWJsZSgpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYSl7YS5rZXl0YWJsZSYmYS5rZXl0YWJsZS5lbmFibGUoITEpfSl9KTtnLkFwaS5yZWdpc3Rlcigia2V5cy5lbmFibGUoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihiKXtiLmtleXRhYmxlJiZiLmtleXRhYmxlLmVuYWJsZShhPT09bD8hMDphKX0pfSk7Zy5BcGkucmVnaXN0ZXIoImtleXMubW92ZSgpIixmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGIpe2Iua2V5dGFibGUmJmIua2V5dGFibGUuX3NoaWZ0KG51bGwsYSwhMSl9KX0pO2cuZXh0LnNlbGVjdG9yLmNlbGwucHVzaChmdW5jdGlvbihhLGIsZSl7Yj1iLmZvY3VzZWQ7YT1hLmtleXRhYmxlO3ZhciBjPVtdO2lmKCFhfHxiPT09bClyZXR1cm4gZTtmb3IodmFyIGY9MCxnPWUubGVuZ3RoO2Y8Cmc7ZisrKSghMD09PWImJmEuZm9jdXNlZChlW2ZdKXx8ITE9PT1iJiYhYS5mb2N1c2VkKGVbZl0pKSYmYy5wdXNoKGVbZl0pO3JldHVybiBjfSk7YihrKS5vbigicHJlSW5pdC5kdC5kdGsiLGZ1bmN0aW9uKGEsYyxlKXsiZHQiPT09YS5uYW1lc3BhY2UmJihhPWMub0luaXQua2V5cyxlPWcuZGVmYXVsdHMua2V5cyxhfHxlKSYmKGU9Yi5leHRlbmQoe30sZSxhKSwhMSE9PWEmJm5ldyBwKGMsZSkpfSk7cmV0dXJuIHB9KTsKCgovKiEKIFJlc3BvbnNpdmUgMi4yLjMKIDIwMTQtMjAxOCBTcHJ5TWVkaWEgTHRkIC0gZGF0YXRhYmxlcy5uZXQvbGljZW5zZQoqLwooZnVuY3Rpb24oZCl7ImZ1bmN0aW9uIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsianF1ZXJ5IiwiZGF0YXRhYmxlcy5uZXQiXSxmdW5jdGlvbihsKXtyZXR1cm4gZChsLHdpbmRvdyxkb2N1bWVudCl9KToib2JqZWN0Ij09PXR5cGVvZiBleHBvcnRzP21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKGwsail7bHx8KGw9d2luZG93KTtpZighanx8IWouZm4uZGF0YVRhYmxlKWo9cmVxdWlyZSgiZGF0YXRhYmxlcy5uZXQiKShsLGopLiQ7cmV0dXJuIGQoaixsLGwuZG9jdW1lbnQpfTpkKGpRdWVyeSx3aW5kb3csZG9jdW1lbnQpfSkoZnVuY3Rpb24oZCxsLGoscSl7ZnVuY3Rpb24gdChhLGIsYyl7dmFyIGU9YisiLSIrYztpZihuW2VdKXJldHVybiBuW2VdO2Zvcih2YXIgZD1bXSxhPWEuY2VsbChiLGMpLm5vZGUoKS5jaGlsZE5vZGVzLGI9MCxjPWEubGVuZ3RoO2I8YztiKyspZC5wdXNoKGFbYl0pO3JldHVybiBuW2VdPWR9ZnVuY3Rpb24gcihhLGIsZCl7dmFyIGU9YisKIi0iK2Q7aWYobltlXSl7Zm9yKHZhciBhPWEuY2VsbChiLGQpLm5vZGUoKSxkPW5bZV1bMF0ucGFyZW50Tm9kZS5jaGlsZE5vZGVzLGI9W10sZj0wLGc9ZC5sZW5ndGg7ZjxnO2YrKyliLnB1c2goZFtmXSk7ZD0wO2ZvcihmPWIubGVuZ3RoO2Q8ZjtkKyspYS5hcHBlbmRDaGlsZChiW2RdKTtuW2VdPXF9fXZhciBvPWQuZm4uZGF0YVRhYmxlLGk9ZnVuY3Rpb24oYSxiKXtpZighby52ZXJzaW9uQ2hlY2t8fCFvLnZlcnNpb25DaGVjaygiMS4xMC4xMCIpKXRocm93IkRhdGFUYWJsZXMgUmVzcG9uc2l2ZSByZXF1aXJlcyBEYXRhVGFibGVzIDEuMTAuMTAgb3IgbmV3ZXIiO3RoaXMucz17ZHQ6bmV3IG8uQXBpKGEpLGNvbHVtbnM6W10sY3VycmVudDpbXX07dGhpcy5zLmR0LnNldHRpbmdzKClbMF0ucmVzcG9uc2l2ZXx8KGImJiJzdHJpbmciPT09dHlwZW9mIGIuZGV0YWlscz9iLmRldGFpbHM9e3R5cGU6Yi5kZXRhaWxzfTpiJiYhMT09PWIuZGV0YWlscz9iLmRldGFpbHM9e3R5cGU6ITF9OgpiJiYhMD09PWIuZGV0YWlscyYmKGIuZGV0YWlscz17dHlwZToiaW5saW5lIn0pLHRoaXMuYz1kLmV4dGVuZCghMCx7fSxpLmRlZmF1bHRzLG8uZGVmYXVsdHMucmVzcG9uc2l2ZSxiKSxhLnJlc3BvbnNpdmU9dGhpcyx0aGlzLl9jb25zdHJ1Y3RvcigpKX07ZC5leHRlbmQoaS5wcm90b3R5cGUse19jb25zdHJ1Y3RvcjpmdW5jdGlvbigpe3ZhciBhPXRoaXMsYj10aGlzLnMuZHQsYz1iLnNldHRpbmdzKClbMF0sZT1kKGwpLndpZHRoKCk7Yi5zZXR0aW5ncygpWzBdLl9yZXNwb25zaXZlPXRoaXM7ZChsKS5vbigicmVzaXplLmR0ciBvcmllbnRhdGlvbmNoYW5nZS5kdHIiLG8udXRpbC50aHJvdHRsZShmdW5jdGlvbigpe3ZhciBiPWQobCkud2lkdGgoKTtiIT09ZSYmKGEuX3Jlc2l6ZSgpLGU9Yil9KSk7Yy5vQXBpLl9mbkNhbGxiYWNrUmVnKGMsImFvUm93Q3JlYXRlZENhbGxiYWNrIixmdW5jdGlvbihlKXstMSE9PWQuaW5BcnJheSghMSxhLnMuY3VycmVudCkmJmQoIj50ZCwgPnRoIiwKZSkuZWFjaChmdW5jdGlvbihlKXtlPWIuY29sdW1uLmluZGV4KCJ0b0RhdGEiLGUpOyExPT09YS5zLmN1cnJlbnRbZV0mJmQodGhpcykuY3NzKCJkaXNwbGF5Iiwibm9uZSIpfSl9KTtiLm9uKCJkZXN0cm95LmR0ciIsZnVuY3Rpb24oKXtiLm9mZigiLmR0ciIpO2QoYi50YWJsZSgpLmJvZHkoKSkub2ZmKCIuZHRyIik7ZChsKS5vZmYoInJlc2l6ZS5kdHIgb3JpZW50YXRpb25jaGFuZ2UuZHRyIik7ZC5lYWNoKGEucy5jdXJyZW50LGZ1bmN0aW9uKGIsZSl7ITE9PT1lJiZhLl9zZXRDb2x1bW5WaXMoYiwhMCl9KX0pO3RoaXMuYy5icmVha3BvaW50cy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEud2lkdGg8Yi53aWR0aD8xOmEud2lkdGg+Yi53aWR0aD8tMTowfSk7dGhpcy5fY2xhc3NMb2dpYygpO3RoaXMuX3Jlc2l6ZUF1dG8oKTtjPXRoaXMuYy5kZXRhaWxzOyExIT09Yy50eXBlJiYoYS5fZGV0YWlsc0luaXQoKSxiLm9uKCJjb2x1bW4tdmlzaWJpbGl0eS5kdHIiLGZ1bmN0aW9uKCl7YS5fdGltZXImJgpjbGVhclRpbWVvdXQoYS5fdGltZXIpO2EuX3RpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthLl90aW1lcj1udWxsO2EuX2NsYXNzTG9naWMoKTthLl9yZXNpemVBdXRvKCk7YS5fcmVzaXplKCk7YS5fcmVkcmF3Q2hpbGRyZW4oKX0sMTAwKX0pLGIub24oImRyYXcuZHRyIixmdW5jdGlvbigpe2EuX3JlZHJhd0NoaWxkcmVuKCl9KSxkKGIudGFibGUoKS5ub2RlKCkpLmFkZENsYXNzKCJkdHItIitjLnR5cGUpKTtiLm9uKCJjb2x1bW4tcmVvcmRlci5kdHIiLGZ1bmN0aW9uKCl7YS5fY2xhc3NMb2dpYygpO2EuX3Jlc2l6ZUF1dG8oKTthLl9yZXNpemUoKX0pO2Iub24oImNvbHVtbi1zaXppbmcuZHRyIixmdW5jdGlvbigpe2EuX3Jlc2l6ZUF1dG8oKTthLl9yZXNpemUoKX0pO2Iub24oInByZVhoci5kdHIiLGZ1bmN0aW9uKCl7dmFyIGU9W107Yi5yb3dzKCkuZXZlcnkoZnVuY3Rpb24oKXt0aGlzLmNoaWxkLmlzU2hvd24oKSYmZS5wdXNoKHRoaXMuaWQodHJ1ZSkpfSk7Yi5vbmUoImRyYXcuZHRyIiwKZnVuY3Rpb24oKXthLl9yZXNpemVBdXRvKCk7YS5fcmVzaXplKCk7Yi5yb3dzKGUpLmV2ZXJ5KGZ1bmN0aW9uKCl7YS5fZGV0YWlsc0Rpc3BsYXkodGhpcyxmYWxzZSl9KX0pfSk7Yi5vbigiaW5pdC5kdHIiLGZ1bmN0aW9uKCl7YS5fcmVzaXplQXV0bygpO2EuX3Jlc2l6ZSgpO2QuaW5BcnJheShmYWxzZSxhLnMuY3VycmVudCkmJmIuY29sdW1ucy5hZGp1c3QoKX0pO3RoaXMuX3Jlc2l6ZSgpfSxfY29sdW1uc1Zpc2libGl0eTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnMuZHQsYz10aGlzLnMuY29sdW1ucyxlLGYsZz1jLm1hcChmdW5jdGlvbihhLGIpe3JldHVybntjb2x1bW5JZHg6Yixwcmlvcml0eTphLnByaW9yaXR5fX0pLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5wcmlvcml0eSE9PWIucHJpb3JpdHk/YS5wcmlvcml0eS1iLnByaW9yaXR5OmEuY29sdW1uSWR4LWIuY29sdW1uSWR4fSksaD1kLm1hcChjLGZ1bmN0aW9uKGUsYyl7cmV0dXJuITE9PT1iLmNvbHVtbihjKS52aXNpYmxlKCk/CiJub3QtdmlzaWJsZSI6ZS5hdXRvJiZudWxsPT09ZS5taW5XaWR0aD8hMTohMD09PWUuYXV0bz8iLSI6LTEhPT1kLmluQXJyYXkoYSxlLmluY2x1ZGVJbil9KSxtPTA7ZT0wO2ZvcihmPWgubGVuZ3RoO2U8ZjtlKyspITA9PT1oW2VdJiYobSs9Y1tlXS5taW5XaWR0aCk7ZT1iLnNldHRpbmdzKClbMF0ub1Njcm9sbDtlPWUuc1l8fGUuc1g/ZS5pQmFyV2lkdGg6MDttPWIudGFibGUoKS5jb250YWluZXIoKS5vZmZzZXRXaWR0aC1lLW07ZT0wO2ZvcihmPWgubGVuZ3RoO2U8ZjtlKyspY1tlXS5jb250cm9sJiYobS09Y1tlXS5taW5XaWR0aCk7dmFyIHM9ITE7ZT0wO2ZvcihmPWcubGVuZ3RoO2U8ZjtlKyspe3ZhciBrPWdbZV0uY29sdW1uSWR4OyItIj09PWhba10mJighY1trXS5jb250cm9sJiZjW2tdLm1pbldpZHRoKSYmKHN8fDA+bS1jW2tdLm1pbldpZHRoPyhzPSEwLGhba109ITEpOmhba109ITAsbS09Y1trXS5taW5XaWR0aCl9Zz0hMTtlPTA7Zm9yKGY9Yy5sZW5ndGg7ZTxmO2UrKylpZighY1tlXS5jb250cm9sJiYKIWNbZV0ubmV2ZXImJiExPT09aFtlXSl7Zz0hMDticmVha31lPTA7Zm9yKGY9Yy5sZW5ndGg7ZTxmO2UrKyljW2VdLmNvbnRyb2wmJihoW2VdPWcpLCJub3QtdmlzaWJsZSI9PT1oW2VdJiYoaFtlXT0hMSk7LTE9PT1kLmluQXJyYXkoITAsaCkmJihoWzBdPSEwKTtyZXR1cm4gaH0sX2NsYXNzTG9naWM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9dGhpcy5jLmJyZWFrcG9pbnRzLGM9dGhpcy5zLmR0LGU9Yy5jb2x1bW5zKCkuZXEoMCkubWFwKGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY29sdW1uKGEpLGU9Yi5oZWFkZXIoKS5jbGFzc05hbWUsYT1jLnNldHRpbmdzKClbMF0uYW9Db2x1bW5zW2FdLnJlc3BvbnNpdmVQcmlvcml0eTthPT09cSYmKGI9ZChiLmhlYWRlcigpKS5kYXRhKCJwcmlvcml0eSIpLGE9YiE9PXE/MSpiOjFFNCk7cmV0dXJue2NsYXNzTmFtZTplLGluY2x1ZGVJbjpbXSxhdXRvOiExLGNvbnRyb2w6ITEsbmV2ZXI6ZS5tYXRjaCgvXGJuZXZlclxiLyk/ITA6ITEscHJpb3JpdHk6YX19KSwKZj1mdW5jdGlvbihhLGIpe3ZhciBjPWVbYV0uaW5jbHVkZUluOy0xPT09ZC5pbkFycmF5KGIsYykmJmMucHVzaChiKX0sZz1mdW5jdGlvbihkLGMsZyxrKXtpZihnKWlmKCJtYXgtIj09PWcpe2s9YS5fZmluZChjKS53aWR0aDtjPTA7Zm9yKGc9Yi5sZW5ndGg7YzxnO2MrKyliW2NdLndpZHRoPD1rJiZmKGQsYltjXS5uYW1lKX1lbHNlIGlmKCJtaW4tIj09PWcpe2s9YS5fZmluZChjKS53aWR0aDtjPTA7Zm9yKGc9Yi5sZW5ndGg7YzxnO2MrKyliW2NdLndpZHRoPj1rJiZmKGQsYltjXS5uYW1lKX1lbHNle2lmKCJub3QtIj09PWcpe2M9MDtmb3IoZz1iLmxlbmd0aDtjPGc7YysrKS0xPT09YltjXS5uYW1lLmluZGV4T2YoaykmJmYoZCxiW2NdLm5hbWUpfX1lbHNlIGVbZF0uaW5jbHVkZUluLnB1c2goYyl9O2UuZWFjaChmdW5jdGlvbihhLGUpe2Zvcih2YXIgYz1hLmNsYXNzTmFtZS5zcGxpdCgiICIpLGY9ITEsaT0wLGw9Yy5sZW5ndGg7aTxsO2krKyl7dmFyIGo9ZC50cmltKGNbaV0pOwppZigiYWxsIj09PWope2Y9ITA7YS5pbmNsdWRlSW49ZC5tYXAoYixmdW5jdGlvbihhKXtyZXR1cm4gYS5uYW1lfSk7cmV0dXJufWlmKCJub25lIj09PWp8fGEubmV2ZXIpe2Y9ITA7cmV0dXJufWlmKCJjb250cm9sIj09PWope2Y9ITA7YS5jb250cm9sPSEwO3JldHVybn1kLmVhY2goYixmdW5jdGlvbihhLGIpe3ZhciBkPWIubmFtZS5zcGxpdCgiLSIpLGM9ai5tYXRjaChSZWdFeHAoIihtaW5cXC18bWF4XFwtfG5vdFxcLSk/KCIrZFswXSsiKShcXC1bX2EtekEtWjAtOV0pPyIpKTtjJiYoZj0hMCxjWzJdPT09ZFswXSYmY1szXT09PSItIitkWzFdP2coZSxiLm5hbWUsY1sxXSxjWzJdK2NbM10pOmNbMl09PT1kWzBdJiYhY1szXSYmZyhlLGIubmFtZSxjWzFdLGNbMl0pKX0pfWZ8fChhLmF1dG89ITApfSk7dGhpcy5zLmNvbHVtbnM9ZX0sX2RldGFpbHNEaXNwbGF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcyxlPXRoaXMucy5kdCxmPXRoaXMuYy5kZXRhaWxzO2lmKGYmJiExIT09Zi50eXBlKXt2YXIgZz0KZi5kaXNwbGF5KGEsYixmdW5jdGlvbigpe3JldHVybiBmLnJlbmRlcmVyKGUsYVswXSxjLl9kZXRhaWxzT2JqKGFbMF0pKX0pOyghMD09PWd8fCExPT09ZykmJmQoZS50YWJsZSgpLm5vZGUoKSkudHJpZ2dlckhhbmRsZXIoInJlc3BvbnNpdmUtZGlzcGxheS5kdCIsW2UsYSxnLGJdKX19LF9kZXRhaWxzSW5pdDpmdW5jdGlvbigpe3ZhciBhPXRoaXMsYj10aGlzLnMuZHQsYz10aGlzLmMuZGV0YWlsczsiaW5saW5lIj09PWMudHlwZSYmKGMudGFyZ2V0PSJ0ZDpmaXJzdC1jaGlsZCwgdGg6Zmlyc3QtY2hpbGQiKTtiLm9uKCJkcmF3LmR0ciIsZnVuY3Rpb24oKXthLl90YWJJbmRleGVzKCl9KTthLl90YWJJbmRleGVzKCk7ZChiLnRhYmxlKCkuYm9keSgpKS5vbigia2V5dXAuZHRyIiwidGQsIHRoIixmdW5jdGlvbihhKXthLmtleUNvZGU9PT0xMyYmZCh0aGlzKS5kYXRhKCJkdHIta2V5Ym9hcmQiKSYmZCh0aGlzKS5jbGljaygpfSk7dmFyIGU9Yy50YXJnZXQ7ZChiLnRhYmxlKCkuYm9keSgpKS5vbigiY2xpY2suZHRyIG1vdXNlZG93bi5kdHIgbW91c2V1cC5kdHIiLAoic3RyaW5nIj09PXR5cGVvZiBlP2U6InRkLCB0aCIsZnVuY3Rpb24oYyl7aWYoZChiLnRhYmxlKCkubm9kZSgpKS5oYXNDbGFzcygiY29sbGFwc2VkIikmJmQuaW5BcnJheShkKHRoaXMpLmNsb3Nlc3QoInRyIikuZ2V0KDApLGIucm93cygpLm5vZGVzKCkudG9BcnJheSgpKSE9PS0xKXtpZih0eXBlb2YgZT09PSJudW1iZXIiKXt2YXIgZz1lPDA/Yi5jb2x1bW5zKCkuZXEoMCkubGVuZ3RoK2U6ZTtpZihiLmNlbGwodGhpcykuaW5kZXgoKS5jb2x1bW4hPT1nKXJldHVybn1nPWIucm93KGQodGhpcykuY2xvc2VzdCgidHIiKSk7Yy50eXBlPT09ImNsaWNrIj9hLl9kZXRhaWxzRGlzcGxheShnLGZhbHNlKTpjLnR5cGU9PT0ibW91c2Vkb3duIj9kKHRoaXMpLmNzcygib3V0bGluZSIsIm5vbmUiKTpjLnR5cGU9PT0ibW91c2V1cCImJmQodGhpcykuYmx1cigpLmNzcygib3V0bGluZSIsIiIpfX0pfSxfZGV0YWlsc09iajpmdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9dGhpcy5zLmR0O3JldHVybiBkLm1hcCh0aGlzLnMuY29sdW1ucywKZnVuY3Rpb24oZSxkKXtpZighZS5uZXZlciYmIWUuY29udHJvbClyZXR1cm57dGl0bGU6Yy5zZXR0aW5ncygpWzBdLmFvQ29sdW1uc1tkXS5zVGl0bGUsZGF0YTpjLmNlbGwoYSxkKS5yZW5kZXIoYi5jLm9ydGhvZ29uYWwpLGhpZGRlbjpjLmNvbHVtbihkKS52aXNpYmxlKCkmJiFiLnMuY3VycmVudFtkXSxjb2x1bW5JbmRleDpkLHJvd0luZGV4OmF9fSl9LF9maW5kOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLmMuYnJlYWtwb2ludHMsYz0wLGU9Yi5sZW5ndGg7YzxlO2MrKylpZihiW2NdLm5hbWU9PT1hKXJldHVybiBiW2NdfSxfcmVkcmF3Q2hpbGRyZW46ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9dGhpcy5zLmR0O2Iucm93cyh7cGFnZToiY3VycmVudCJ9KS5pdGVyYXRvcigicm93IixmdW5jdGlvbihjLGUpe2Iucm93KGUpO2EuX2RldGFpbHNEaXNwbGF5KGIucm93KGUpLCEwKX0pfSxfcmVzaXplOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPXRoaXMucy5kdCxjPWQobCkud2lkdGgoKSwKZT10aGlzLmMuYnJlYWtwb2ludHMsZj1lWzBdLm5hbWUsZz10aGlzLnMuY29sdW1ucyxoLG09dGhpcy5zLmN1cnJlbnQuc2xpY2UoKTtmb3IoaD1lLmxlbmd0aC0xOzA8PWg7aC0tKWlmKGM8PWVbaF0ud2lkdGgpe2Y9ZVtoXS5uYW1lO2JyZWFrfXZhciBpPXRoaXMuX2NvbHVtbnNWaXNpYmxpdHkoZik7dGhpcy5zLmN1cnJlbnQ9aTtlPSExO2g9MDtmb3IoYz1nLmxlbmd0aDtoPGM7aCsrKWlmKCExPT09aVtoXSYmIWdbaF0ubmV2ZXImJiFnW2hdLmNvbnRyb2wmJiExPT09IWIuY29sdW1uKGgpLnZpc2libGUoKSl7ZT0hMDticmVha31kKGIudGFibGUoKS5ub2RlKCkpLnRvZ2dsZUNsYXNzKCJjb2xsYXBzZWQiLGUpO3ZhciBrPSExLGo9MDtiLmNvbHVtbnMoKS5lcSgwKS5lYWNoKGZ1bmN0aW9uKGIsYyl7ITA9PT1pW2NdJiZqKys7aVtjXSE9PW1bY10mJihrPSEwLGEuX3NldENvbHVtblZpcyhiLGlbY10pKX0pO2smJih0aGlzLl9yZWRyYXdDaGlsZHJlbigpLGQoYi50YWJsZSgpLm5vZGUoKSkudHJpZ2dlcigicmVzcG9uc2l2ZS1yZXNpemUuZHQiLApbYix0aGlzLnMuY3VycmVudF0pLDA9PT1iLnBhZ2UuaW5mbygpLnJlY29yZHNEaXNwbGF5JiZkKCJ0ZCIsYi50YWJsZSgpLmJvZHkoKSkuZXEoMCkuYXR0cigiY29sc3BhbiIsaikpfSxfcmVzaXplQXV0bzpmdW5jdGlvbigpe3ZhciBhPXRoaXMucy5kdCxiPXRoaXMucy5jb2x1bW5zO2lmKHRoaXMuYy5hdXRvJiYtMSE9PWQuaW5BcnJheSghMCxkLm1hcChiLGZ1bmN0aW9uKGEpe3JldHVybiBhLmF1dG99KSkpe2QuaXNFbXB0eU9iamVjdChuKXx8ZC5lYWNoKG4sZnVuY3Rpb24oYil7Yj1iLnNwbGl0KCItIik7cihhLDEqYlswXSwxKmJbMV0pfSk7YS50YWJsZSgpLm5vZGUoKTt2YXIgYz1hLnRhYmxlKCkubm9kZSgpLmNsb25lTm9kZSghMSksZT1kKGEudGFibGUoKS5oZWFkZXIoKS5jbG9uZU5vZGUoITEpKS5hcHBlbmRUbyhjKSxmPWQoYS50YWJsZSgpLmJvZHkoKSkuY2xvbmUoITEsITEpLmVtcHR5KCkuYXBwZW5kVG8oYyksZz1hLmNvbHVtbnMoKS5oZWFkZXIoKS5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIGEuY29sdW1uKGIpLnZpc2libGUoKX0pLnRvJCgpLmNsb25lKCExKS5jc3MoImRpc3BsYXkiLAoidGFibGUtY2VsbCIpLmNzcygibWluLXdpZHRoIiwwKTtkKGYpLmFwcGVuZChkKGEucm93cyh7cGFnZToiY3VycmVudCJ9KS5ub2RlcygpKS5jbG9uZSghMSkpLmZpbmQoInRoLCB0ZCIpLmNzcygiZGlzcGxheSIsIiIpO2lmKGY9YS50YWJsZSgpLmZvb3RlcigpKXt2YXIgZj1kKGYuY2xvbmVOb2RlKCExKSkuYXBwZW5kVG8oYyksaD1hLmNvbHVtbnMoKS5mb290ZXIoKS5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIGEuY29sdW1uKGIpLnZpc2libGUoKX0pLnRvJCgpLmNsb25lKCExKS5jc3MoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIik7ZCgiPHRyLz4iKS5hcHBlbmQoaCkuYXBwZW5kVG8oZil9ZCgiPHRyLz4iKS5hcHBlbmQoZykuYXBwZW5kVG8oZSk7ImlubGluZSI9PT10aGlzLmMuZGV0YWlscy50eXBlJiZkKGMpLmFkZENsYXNzKCJkdHItaW5saW5lIGNvbGxhcHNlZCIpO2QoYykuZmluZCgiW25hbWVdIikucmVtb3ZlQXR0cigibmFtZSIpO2QoYykuY3NzKCJwb3NpdGlvbiIsInJlbGF0aXZlIik7CmM9ZCgiPGRpdi8+IikuY3NzKHt3aWR0aDoxLGhlaWdodDoxLG92ZXJmbG93OiJoaWRkZW4iLGNsZWFyOiJib3RoIn0pLmFwcGVuZChjKTtjLmluc2VydEJlZm9yZShhLnRhYmxlKCkubm9kZSgpKTtnLmVhY2goZnVuY3Rpb24oYyl7Yz1hLmNvbHVtbi5pbmRleCgiZnJvbVZpc2libGUiLGMpO2JbY10ubWluV2lkdGg9dGhpcy5vZmZzZXRXaWR0aHx8MH0pO2MucmVtb3ZlKCl9fSxfc2V0Q29sdW1uVmlzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5zLmR0LGU9Yj8iIjoibm9uZSI7ZChjLmNvbHVtbihhKS5oZWFkZXIoKSkuY3NzKCJkaXNwbGF5IixlKTtkKGMuY29sdW1uKGEpLmZvb3RlcigpKS5jc3MoImRpc3BsYXkiLGUpO2MuY29sdW1uKGEpLm5vZGVzKCkudG8kKCkuY3NzKCJkaXNwbGF5IixlKTtkLmlzRW1wdHlPYmplY3Qobil8fGMuY2VsbHMobnVsbCxhKS5pbmRleGVzKCkuZWFjaChmdW5jdGlvbihhKXtyKGMsYS5yb3csYS5jb2x1bW4pfSl9LF90YWJJbmRleGVzOmZ1bmN0aW9uKCl7dmFyIGE9CnRoaXMucy5kdCxiPWEuY2VsbHMoe3BhZ2U6ImN1cnJlbnQifSkubm9kZXMoKS50byQoKSxjPWEuc2V0dGluZ3MoKVswXSxlPXRoaXMuYy5kZXRhaWxzLnRhcmdldDtiLmZpbHRlcigiW2RhdGEtZHRyLWtleWJvYXJkXSIpLnJlbW92ZURhdGEoIltkYXRhLWR0ci1rZXlib2FyZF0iKTsibnVtYmVyIj09PXR5cGVvZiBlP2EuY2VsbHMobnVsbCxlLHtwYWdlOiJjdXJyZW50In0pLm5vZGVzKCkudG8kKCkuYXR0cigidGFiSW5kZXgiLGMuaVRhYkluZGV4KS5kYXRhKCJkdHIta2V5Ym9hcmQiLDEpOigidGQ6Zmlyc3QtY2hpbGQsIHRoOmZpcnN0LWNoaWxkIj09PWUmJihlPSI+dGQ6Zmlyc3QtY2hpbGQsID50aDpmaXJzdC1jaGlsZCIpLGQoZSxhLnJvd3Moe3BhZ2U6ImN1cnJlbnQifSkubm9kZXMoKSkuYXR0cigidGFiSW5kZXgiLGMuaVRhYkluZGV4KS5kYXRhKCJkdHIta2V5Ym9hcmQiLDEpKX19KTtpLmJyZWFrcG9pbnRzPVt7bmFtZToiZGVza3RvcCIsd2lkdGg6SW5maW5pdHl9LHtuYW1lOiJ0YWJsZXQtbCIsCndpZHRoOjEwMjR9LHtuYW1lOiJ0YWJsZXQtcCIsd2lkdGg6NzY4fSx7bmFtZToibW9iaWxlLWwiLHdpZHRoOjQ4MH0se25hbWU6Im1vYmlsZS1wIix3aWR0aDozMjB9XTtpLmRpc3BsYXk9e2NoaWxkUm93OmZ1bmN0aW9uKGEsYixjKXtpZihiKXtpZihkKGEubm9kZSgpKS5oYXNDbGFzcygicGFyZW50IikpcmV0dXJuIGEuY2hpbGQoYygpLCJjaGlsZCIpLnNob3coKSwhMH1lbHNle2lmKGEuY2hpbGQuaXNTaG93bigpKXJldHVybiBhLmNoaWxkKCExKSxkKGEubm9kZSgpKS5yZW1vdmVDbGFzcygicGFyZW50IiksITE7YS5jaGlsZChjKCksImNoaWxkIikuc2hvdygpO2QoYS5ub2RlKCkpLmFkZENsYXNzKCJwYXJlbnQiKTtyZXR1cm4hMH19LGNoaWxkUm93SW1tZWRpYXRlOmZ1bmN0aW9uKGEsYixjKXtpZighYiYmYS5jaGlsZC5pc1Nob3duKCl8fCFhLnJlc3BvbnNpdmUuaGFzSGlkZGVuKCkpcmV0dXJuIGEuY2hpbGQoITEpLGQoYS5ub2RlKCkpLnJlbW92ZUNsYXNzKCJwYXJlbnQiKSwKITE7YS5jaGlsZChjKCksImNoaWxkIikuc2hvdygpO2QoYS5ub2RlKCkpLmFkZENsYXNzKCJwYXJlbnQiKTtyZXR1cm4hMH0sbW9kYWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIsYyxlKXtpZihjKWQoImRpdi5kdHItbW9kYWwtY29udGVudCIpLmVtcHR5KCkuYXBwZW5kKGUoKSk7ZWxzZXt2YXIgZj1mdW5jdGlvbigpe2cucmVtb3ZlKCk7ZChqKS5vZmYoImtleXByZXNzLmR0ciIpfSxnPWQoJzxkaXYgY2xhc3M9ImR0ci1tb2RhbCIvPicpLmFwcGVuZChkKCc8ZGl2IGNsYXNzPSJkdHItbW9kYWwtZGlzcGxheSIvPicpLmFwcGVuZChkKCc8ZGl2IGNsYXNzPSJkdHItbW9kYWwtY29udGVudCIvPicpLmFwcGVuZChlKCkpKS5hcHBlbmQoZCgnPGRpdiBjbGFzcz0iZHRyLW1vZGFsLWNsb3NlIj4mdGltZXM7PC9kaXY+JykuY2xpY2soZnVuY3Rpb24oKXtmKCl9KSkpLmFwcGVuZChkKCc8ZGl2IGNsYXNzPSJkdHItbW9kYWwtYmFja2dyb3VuZCIvPicpLmNsaWNrKGZ1bmN0aW9uKCl7ZigpfSkpLmFwcGVuZFRvKCJib2R5Iik7CmQoaikub24oImtleXVwLmR0ciIsZnVuY3Rpb24oYSl7Mjc9PT1hLmtleUNvZGUmJihhLnN0b3BQcm9wYWdhdGlvbigpLGYoKSl9KX1hJiZhLmhlYWRlciYmZCgiZGl2LmR0ci1tb2RhbC1jb250ZW50IikucHJlcGVuZCgiPGgyPiIrYS5oZWFkZXIoYikrIjwvaDI+Iil9fX07dmFyIG49e307aS5yZW5kZXJlcj17bGlzdEhpZGRlbk5vZGVzOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGEsYixjKXt2YXIgZT1kKCc8dWwgZGF0YS1kdHItaW5kZXg9IicrYisnIiBjbGFzcz0iZHRyLWRldGFpbHMiLz4nKSxmPSExO2QuZWFjaChjLGZ1bmN0aW9uKGIsYyl7Yy5oaWRkZW4mJihkKCc8bGkgZGF0YS1kdHItaW5kZXg9IicrYy5jb2x1bW5JbmRleCsnIiBkYXRhLWR0LXJvdz0iJytjLnJvd0luZGV4KyciIGRhdGEtZHQtY29sdW1uPSInK2MuY29sdW1uSW5kZXgrJyI+PHNwYW4gY2xhc3M9ImR0ci10aXRsZSI+JytjLnRpdGxlKyI8L3NwYW4+IDwvbGk+IikuYXBwZW5kKGQoJzxzcGFuIGNsYXNzPSJkdHItZGF0YSIvPicpLmFwcGVuZCh0KGEsCmMucm93SW5kZXgsYy5jb2x1bW5JbmRleCkpKS5hcHBlbmRUbyhlKSxmPSEwKX0pO3JldHVybiBmP2U6ITF9fSxsaXN0SGlkZGVuOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGEsYixjKXtyZXR1cm4oYT1kLm1hcChjLGZ1bmN0aW9uKGEpe3JldHVybiBhLmhpZGRlbj8nPGxpIGRhdGEtZHRyLWluZGV4PSInK2EuY29sdW1uSW5kZXgrJyIgZGF0YS1kdC1yb3c9IicrYS5yb3dJbmRleCsnIiBkYXRhLWR0LWNvbHVtbj0iJythLmNvbHVtbkluZGV4KyciPjxzcGFuIGNsYXNzPSJkdHItdGl0bGUiPicrYS50aXRsZSsnPC9zcGFuPiA8c3BhbiBjbGFzcz0iZHRyLWRhdGEiPicrYS5kYXRhKyI8L3NwYW4+PC9saT4iOiIifSkuam9pbigiIikpP2QoJzx1bCBkYXRhLWR0ci1pbmRleD0iJytiKyciIGNsYXNzPSJkdHItZGV0YWlscyIvPicpLmFwcGVuZChhKTohMX19LHRhYmxlQWxsOmZ1bmN0aW9uKGEpe2E9ZC5leHRlbmQoe3RhYmxlQ2xhc3M6IiJ9LGEpO3JldHVybiBmdW5jdGlvbihiLApjLGUpe2I9ZC5tYXAoZSxmdW5jdGlvbihhKXtyZXR1cm4nPHRyIGRhdGEtZHQtcm93PSInK2Eucm93SW5kZXgrJyIgZGF0YS1kdC1jb2x1bW49IicrYS5jb2x1bW5JbmRleCsnIj48dGQ+JythLnRpdGxlKyI6PC90ZD4gPHRkPiIrYS5kYXRhKyI8L3RkPjwvdHI+In0pLmpvaW4oIiIpO3JldHVybiBkKCc8dGFibGUgY2xhc3M9IicrYS50YWJsZUNsYXNzKycgZHRyLWRldGFpbHMiIHdpZHRoPSIxMDAlIi8+JykuYXBwZW5kKGIpfX19O2kuZGVmYXVsdHM9e2JyZWFrcG9pbnRzOmkuYnJlYWtwb2ludHMsYXV0bzohMCxkZXRhaWxzOntkaXNwbGF5OmkuZGlzcGxheS5jaGlsZFJvdyxyZW5kZXJlcjppLnJlbmRlcmVyLmxpc3RIaWRkZW4oKSx0YXJnZXQ6MCx0eXBlOiJpbmxpbmUifSxvcnRob2dvbmFsOiJkaXNwbGF5In07dmFyIHA9ZC5mbi5kYXRhVGFibGUuQXBpO3AucmVnaXN0ZXIoInJlc3BvbnNpdmUoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pO3AucmVnaXN0ZXIoInJlc3BvbnNpdmUuaW5kZXgoKSIsCmZ1bmN0aW9uKGEpe2E9ZChhKTtyZXR1cm57Y29sdW1uOmEuZGF0YSgiZHRyLWluZGV4Iikscm93OmEucGFyZW50KCkuZGF0YSgiZHRyLWluZGV4Iil9fSk7cC5yZWdpc3RlcigicmVzcG9uc2l2ZS5yZWJ1aWxkKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihhKXthLl9yZXNwb25zaXZlJiZhLl9yZXNwb25zaXZlLl9jbGFzc0xvZ2ljKCl9KX0pO3AucmVnaXN0ZXIoInJlc3BvbnNpdmUucmVjYWxjKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihhKXthLl9yZXNwb25zaXZlJiYoYS5fcmVzcG9uc2l2ZS5fcmVzaXplQXV0bygpLGEuX3Jlc3BvbnNpdmUuX3Jlc2l6ZSgpKX0pfSk7cC5yZWdpc3RlcigicmVzcG9uc2l2ZS5oYXNIaWRkZW4oKSIsZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNvbnRleHRbMF07cmV0dXJuIGEuX3Jlc3BvbnNpdmU/LTEhPT1kLmluQXJyYXkoITEsYS5fcmVzcG9uc2l2ZS5zLmN1cnJlbnQpOgohMX0pO3AucmVnaXN0ZXJQbHVyYWwoImNvbHVtbnMoKS5yZXNwb25zaXZlSGlkZGVuKCkiLCJjb2x1bW4oKS5yZXNwb25zaXZlSGlkZGVuKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNvbHVtbiIsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5fcmVzcG9uc2l2ZT9hLl9yZXNwb25zaXZlLnMuY3VycmVudFtiXTohMX0sMSl9KTtpLnZlcnNpb249IjIuMi4zIjtkLmZuLmRhdGFUYWJsZS5SZXNwb25zaXZlPWk7ZC5mbi5EYXRhVGFibGUuUmVzcG9uc2l2ZT1pO2Qoaikub24oInByZUluaXQuZHQuZHRyIixmdW5jdGlvbihhLGIpe2lmKCJkdCI9PT1hLm5hbWVzcGFjZSYmKGQoYi5uVGFibGUpLmhhc0NsYXNzKCJyZXNwb25zaXZlIil8fGQoYi5uVGFibGUpLmhhc0NsYXNzKCJkdC1yZXNwb25zaXZlIil8fGIub0luaXQucmVzcG9uc2l2ZXx8by5kZWZhdWx0cy5yZXNwb25zaXZlKSl7dmFyIGM9Yi5vSW5pdC5yZXNwb25zaXZlOyExIT09YyYmbmV3IGkoYixkLmlzUGxhaW5PYmplY3QoYyk/CmM6e30pfX0pO3JldHVybiBpfSk7CgoKLyohCiBCb290c3RyYXAgNCBpbnRlZ3JhdGlvbiBmb3IgRGF0YVRhYmxlcycgUmVzcG9uc2l2ZQogwqkyMDE2IFNwcnlNZWRpYSBMdGQgLSBkYXRhdGFibGVzLm5ldC9saWNlbnNlCiovCihmdW5jdGlvbihjKXsiZnVuY3Rpb24iPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJqcXVlcnkiLCJkYXRhdGFibGVzLm5ldC1iczQiLCJkYXRhdGFibGVzLm5ldC1yZXNwb25zaXZlIl0sZnVuY3Rpb24oYSl7cmV0dXJuIGMoYSx3aW5kb3csZG9jdW1lbnQpfSk6Im9iamVjdCI9PT10eXBlb2YgZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1mdW5jdGlvbihhLGIpe2F8fChhPXdpbmRvdyk7aWYoIWJ8fCFiLmZuLmRhdGFUYWJsZSliPXJlcXVpcmUoImRhdGF0YWJsZXMubmV0LWJzNCIpKGEsYikuJDtiLmZuLmRhdGFUYWJsZS5SZXNwb25zaXZlfHxyZXF1aXJlKCJkYXRhdGFibGVzLm5ldC1yZXNwb25zaXZlIikoYSxiKTtyZXR1cm4gYyhiLGEsYS5kb2N1bWVudCl9OmMoalF1ZXJ5LHdpbmRvdyxkb2N1bWVudCl9KShmdW5jdGlvbihjKXt2YXIgYT1jLmZuLmRhdGFUYWJsZSxiPWEuUmVzcG9uc2l2ZS5kaXNwbGF5LGc9Yi5tb2RhbCxlPWMoJzxkaXYgY2xhc3M9Im1vZGFsIGZhZGUgZHRyLWJzLW1vZGFsIiByb2xlPSJkaWFsb2ciPjxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyIgcm9sZT0iZG9jdW1lbnQiPjxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPjxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPjxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPjwvYnV0dG9uPjwvZGl2PjxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiLz48L2Rpdj48L2Rpdj48L2Rpdj4nKTsKYi5tb2RhbD1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYixkLGYpe2lmKGMuZm4ubW9kYWwpe2lmKCFkKXtpZihhJiZhLmhlYWRlcil7dmFyIGQ9ZS5maW5kKCJkaXYubW9kYWwtaGVhZGVyIiksaD1kLmZpbmQoImJ1dHRvbiIpLmRldGFjaCgpO2QuZW1wdHkoKS5hcHBlbmQoJzxoNCBjbGFzcz0ibW9kYWwtdGl0bGUiPicrYS5oZWFkZXIoYikrIjwvaDQ+IikuYXBwZW5kKGgpfWUuZmluZCgiZGl2Lm1vZGFsLWJvZHkiKS5lbXB0eSgpLmFwcGVuZChmKCkpO2UuYXBwZW5kVG8oImJvZHkiKS5tb2RhbCgpfX1lbHNlIGcoYixkLGYpfX07cmV0dXJuIGEuUmVzcG9uc2l2ZX0pOwoKCi8qIQogICBDb3B5cmlnaHQgMjAxNy0yMDE5IFNwcnlNZWRpYSBMdGQuCgogVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBhdmFpbGFibGUgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlOgogICBNSVQgbGljZW5zZSAtIGh0dHA6Ly9kYXRhdGFibGVzLm5ldC9saWNlbnNlL21pdAoKIFRoaXMgc291cmNlIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgbGljZW5zZSBmaWxlcyBmb3IgZGV0YWlscy4KCiBGb3IgZGV0YWlscyBwbGVhc2UgcmVmZXIgdG86IGh0dHA6Ly93d3cuZGF0YXRhYmxlcy5uZXQKIFJvd0dyb3VwIDEuMS4xCiDCqTIwMTctMjAxOSBTcHJ5TWVkaWEgTHRkIC0gZGF0YXRhYmxlcy5uZXQvbGljZW5zZQoqLwp2YXIgJGpzY29tcD0kanNjb21wfHx7fTskanNjb21wLnNjb3BlPXt9OyRqc2NvbXAuZmluZEludGVybmFsPWZ1bmN0aW9uKGEsZCxjKXthIGluc3RhbmNlb2YgU3RyaW5nJiYoYT1TdHJpbmcoYSkpO2Zvcih2YXIgZT1hLmxlbmd0aCxmPTA7ZjxlO2YrKyl7dmFyIGg9YVtmXTtpZihkLmNhbGwoYyxoLGYsYSkpcmV0dXJue2k6Zix2Omh9fXJldHVybntpOi0xLHY6dm9pZCAwfX07JGpzY29tcC5BU1NVTUVfRVM1PSExOyRqc2NvbXAuQVNTVU1FX05PX05BVElWRV9NQVA9ITE7JGpzY29tcC5BU1NVTUVfTk9fTkFUSVZFX1NFVD0hMTskanNjb21wLlNJTVBMRV9GUk9VTkRfUE9MWUZJTEw9ITE7CiRqc2NvbXAuZGVmaW5lUHJvcGVydHk9JGpzY29tcC5BU1NVTUVfRVM1fHwiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnRpZXM/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGEsZCxjKXthIT1BcnJheS5wcm90b3R5cGUmJmEhPU9iamVjdC5wcm90b3R5cGUmJihhW2RdPWMudmFsdWUpfTskanNjb21wLmdldEdsb2JhbD1mdW5jdGlvbihhKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93PT09YT9hOiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsJiZudWxsIT1nbG9iYWw/Z2xvYmFsOmF9OyRqc2NvbXAuZ2xvYmFsPSRqc2NvbXAuZ2V0R2xvYmFsKHRoaXMpOwokanNjb21wLnBvbHlmaWxsPWZ1bmN0aW9uKGEsZCxjLGUpe2lmKGQpe2M9JGpzY29tcC5nbG9iYWw7YT1hLnNwbGl0KCIuIik7Zm9yKGU9MDtlPGEubGVuZ3RoLTE7ZSsrKXt2YXIgZj1hW2VdO2YgaW4gY3x8KGNbZl09e30pO2M9Y1tmXX1hPWFbYS5sZW5ndGgtMV07ZT1jW2FdO2Q9ZChlKTtkIT1lJiZudWxsIT1kJiYkanNjb21wLmRlZmluZVByb3BlcnR5KGMsYSx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmR9KX19OyRqc2NvbXAucG9seWZpbGwoIkFycmF5LnByb3RvdHlwZS5maW5kIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGEsYyl7cmV0dXJuICRqc2NvbXAuZmluZEludGVybmFsKHRoaXMsYSxjKS52fX0sImVzNiIsImVzMyIpOwooZnVuY3Rpb24oYSl7ImZ1bmN0aW9uIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsianF1ZXJ5IiwiZGF0YXRhYmxlcy5uZXQiXSxmdW5jdGlvbihkKXtyZXR1cm4gYShkLHdpbmRvdyxkb2N1bWVudCl9KToib2JqZWN0Ij09PXR5cGVvZiBleHBvcnRzP21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKGQsYyl7ZHx8KGQ9d2luZG93KTtjJiZjLmZuLmRhdGFUYWJsZXx8KGM9cmVxdWlyZSgiZGF0YXRhYmxlcy5uZXQiKShkLGMpLiQpO3JldHVybiBhKGMsZCxkLmRvY3VtZW50KX06YShqUXVlcnksd2luZG93LGRvY3VtZW50KX0pKGZ1bmN0aW9uKGEsZCxjLGUpe3ZhciBmPWEuZm4uZGF0YVRhYmxlLGg9ZnVuY3Rpb24oYixnKXtpZighZi52ZXJzaW9uQ2hlY2t8fCFmLnZlcnNpb25DaGVjaygiMS4xMC44IikpdGhyb3ciUm93R3JvdXAgcmVxdWlyZXMgRGF0YVRhYmxlcyAxLjEwLjggb3IgbmV3ZXIiO3RoaXMuYz1hLmV4dGVuZCghMCx7fSxmLmRlZmF1bHRzLnJvd0dyb3VwLApoLmRlZmF1bHRzLGcpO3RoaXMucz17ZHQ6bmV3IGYuQXBpKGIpfTt0aGlzLmRvbT17fTtiPXRoaXMucy5kdC5zZXR0aW5ncygpWzBdO2lmKGc9Yi5yb3dHcm91cClyZXR1cm4gZztiLnJvd0dyb3VwPXRoaXM7dGhpcy5fY29uc3RydWN0b3IoKX07YS5leHRlbmQoaC5wcm90b3R5cGUse2RhdGFTcmM6ZnVuY3Rpb24oYil7aWYoYj09PWUpcmV0dXJuIHRoaXMuYy5kYXRhU3JjO3ZhciBnPXRoaXMucy5kdDt0aGlzLmMuZGF0YVNyYz1iO2EoZy50YWJsZSgpLm5vZGUoKSkudHJpZ2dlckhhbmRsZXIoInJvd2dyb3VwLWRhdGFzcmMuZHQiLFtnLGJdKTtyZXR1cm4gdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuYy5lbmFibGU9ITE7cmV0dXJuIHRoaXN9LGVuYWJsZTpmdW5jdGlvbihiKXtpZighMT09PWIpcmV0dXJuIHRoaXMuZGlzYWJsZSgpO3RoaXMuYy5lbmFibGU9ITA7cmV0dXJuIHRoaXN9LF9jb25zdHJ1Y3RvcjpmdW5jdGlvbigpe3ZhciBiPXRoaXMsYT10aGlzLnMuZHQ7YS5vbigiZHJhdy5kdHJnIiwKZnVuY3Rpb24oKXtiLmMuZW5hYmxlJiZiLl9kcmF3KCl9KTthLm9uKCJjb2x1bW4tdmlzaWJpbGl0eS5kdC5kdHJnIHJlc3BvbnNpdmUtcmVzaXplLmR0LmR0cmciLGZ1bmN0aW9uKCl7Yi5fYWRqdXN0Q29sc3BhbigpfSk7YS5vbigiZGVzdHJveSIsZnVuY3Rpb24oKXthLm9mZigiLmR0cmciKX0pO2Eub24oInJlc3BvbnNpdmUtcmVzaXplLmR0IixmdW5jdGlvbigpe2IuX2FkanVzdENvbHNwYW4oKX0pfSxfYWRqdXN0Q29sc3BhbjpmdW5jdGlvbigpe2EoInRyLiIrdGhpcy5jLmNsYXNzTmFtZSx0aGlzLnMuZHQudGFibGUoKS5ib2R5KCkpLmZpbmQoInRkIikuYXR0cigiY29sc3BhbiIsdGhpcy5fY29sc3BhbigpKX0sX2NvbHNwYW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zLmR0LmNvbHVtbnMoKS52aXNpYmxlKCkucmVkdWNlKGZ1bmN0aW9uKGIsYSl7cmV0dXJuIGIrYX0sMCl9LF9kcmF3OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fZ3JvdXAoMCx0aGlzLnMuZHQucm93cyh7cGFnZToiY3VycmVudCJ9KS5pbmRleGVzKCkpOwp0aGlzLl9ncm91cERpc3BsYXkoMCxiKX0sX2dyb3VwOmZ1bmN0aW9uKGIsZyl7Zm9yKHZhciBjPWEuaXNBcnJheSh0aGlzLmMuZGF0YVNyYyk/dGhpcy5jLmRhdGFTcmM6W3RoaXMuYy5kYXRhU3JjXSxkPWYuZXh0Lm9BcGkuX2ZuR2V0T2JqZWN0RGF0YUZuKGNbYl0pLGg9dGhpcy5zLmR0LGwsbixtPVtdLGs9MCxwPWcubGVuZ3RoO2s8cDtrKyspe3ZhciBxPWdba107bD1oLnJvdyhxKS5kYXRhKCk7bD1kKGwpO2lmKG51bGw9PT1sfHxsPT09ZSlsPXRoaXMuYy5lbXB0eURhdGFHcm91cDtpZihuPT09ZXx8bCE9PW4pbS5wdXNoKHtkYXRhUG9pbnQ6bCxyb3dzOltdfSksbj1sO21bbS5sZW5ndGgtMV0ucm93cy5wdXNoKHEpfWlmKGNbYisxXSE9PWUpZm9yKGs9MCxwPW0ubGVuZ3RoO2s8cDtrKyspbVtrXS5jaGlsZHJlbj10aGlzLl9ncm91cChiKzEsbVtrXS5yb3dzKTtyZXR1cm4gbX0sX2dyb3VwRGlzcGxheTpmdW5jdGlvbihiLGEpe2Zvcih2YXIgYz10aGlzLnMuZHQsZyxkPTAsZj0KYS5sZW5ndGg7ZDxmO2QrKyl7dmFyIGU9YVtkXSxoPWUuZGF0YVBvaW50LGs9ZS5yb3dzO3RoaXMuYy5zdGFydFJlbmRlciYmKGc9dGhpcy5jLnN0YXJ0UmVuZGVyLmNhbGwodGhpcyxjLnJvd3MoayksaCxiKSwoZz10aGlzLl9yb3dXcmFwKGcsdGhpcy5jLnN0YXJ0Q2xhc3NOYW1lLGIpKSYmZy5pbnNlcnRCZWZvcmUoYy5yb3coa1swXSkubm9kZSgpKSk7dGhpcy5jLmVuZFJlbmRlciYmKGc9dGhpcy5jLmVuZFJlbmRlci5jYWxsKHRoaXMsYy5yb3dzKGspLGgsYiksKGc9dGhpcy5fcm93V3JhcChnLHRoaXMuYy5lbmRDbGFzc05hbWUsYikpJiZnLmluc2VydEFmdGVyKGMucm93KGtbay5sZW5ndGgtMV0pLm5vZGUoKSkpO2UuY2hpbGRyZW4mJnRoaXMuX2dyb3VwRGlzcGxheShiKzEsZS5jaGlsZHJlbil9fSxfcm93V3JhcDpmdW5jdGlvbihiLGcsYyl7aWYobnVsbD09PWJ8fCIiPT09YiliPXRoaXMuYy5lbXB0eURhdGFHcm91cDtyZXR1cm4gYj09PWV8fG51bGw9PT1iP251bGw6KCJvYmplY3QiPT09CnR5cGVvZiBiJiZiLm5vZGVOYW1lJiYidHIiPT09Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP2EoYik6YiBpbnN0YW5jZW9mIGEmJmIubGVuZ3RoJiYidHIiPT09YlswXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP2I6YSgiPHRyLz4iKS5hcHBlbmQoYSgiPHRkLz4iKS5hdHRyKCJjb2xzcGFuIix0aGlzLl9jb2xzcGFuKCkpLmFwcGVuZChiKSkpLmFkZENsYXNzKHRoaXMuYy5jbGFzc05hbWUpLmFkZENsYXNzKGcpLmFkZENsYXNzKCJkdHJnLWxldmVsLSIrYyl9fSk7aC5kZWZhdWx0cz17Y2xhc3NOYW1lOiJkdHJnLWdyb3VwIixkYXRhU3JjOjAsZW1wdHlEYXRhR3JvdXA6Ik5vIGdyb3VwIixlbmFibGU6ITAsZW5kQ2xhc3NOYW1lOiJkdHJnLWVuZCIsZW5kUmVuZGVyOm51bGwsc3RhcnRDbGFzc05hbWU6ImR0cmctc3RhcnQiLHN0YXJ0UmVuZGVyOmZ1bmN0aW9uKGIsYSl7cmV0dXJuIGF9fTtoLnZlcnNpb249IjEuMS4xIjthLmZuLmRhdGFUYWJsZS5Sb3dHcm91cD1oO2EuZm4uRGF0YVRhYmxlLlJvd0dyb3VwPQpoO2YuQXBpLnJlZ2lzdGVyKCJyb3dHcm91cCgpIixmdW5jdGlvbigpe3JldHVybiB0aGlzfSk7Zi5BcGkucmVnaXN0ZXIoInJvd0dyb3VwKCkuZGlzYWJsZSgpIixmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYSl7YS5yb3dHcm91cCYmYS5yb3dHcm91cC5lbmFibGUoITEpfSl9KTtmLkFwaS5yZWdpc3Rlcigicm93R3JvdXAoKS5lbmFibGUoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihiKXtiLnJvd0dyb3VwJiZiLnJvd0dyb3VwLmVuYWJsZShhPT09ZT8hMDphKX0pfSk7Zi5BcGkucmVnaXN0ZXIoInJvd0dyb3VwKCkuZGF0YVNyYygpIixmdW5jdGlvbihhKXtyZXR1cm4gYT09PWU/dGhpcy5jb250ZXh0WzBdLnJvd0dyb3VwLmRhdGFTcmMoKTp0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYil7Yi5yb3dHcm91cCYmYi5yb3dHcm91cC5kYXRhU3JjKGEpfSl9KTthKGMpLm9uKCJwcmVJbml0LmR0LmR0cmciLApmdW5jdGlvbihiLGMsZCl7ImR0Ij09PWIubmFtZXNwYWNlJiYoYj1jLm9Jbml0LnJvd0dyb3VwLGQ9Zi5kZWZhdWx0cy5yb3dHcm91cCxifHxkKSYmKGQ9YS5leHRlbmQoe30sZCxiKSwhMSE9PWImJm5ldyBoKGMsZCkpfSk7cmV0dXJuIGh9KTsKCgovKiEKICAgQ29weXJpZ2h0IDIwMTUtMjAxOSBTcHJ5TWVkaWEgTHRkLgoKIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgYXZhaWxhYmxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKICAgTUlUIGxpY2Vuc2UgLSBodHRwOi8vZGF0YXRhYmxlcy5uZXQvbGljZW5zZS9taXQKCiBUaGlzIHNvdXJjZSBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIGxpY2Vuc2UgZmlsZXMgZm9yIGRldGFpbHMuCgogRm9yIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvOiBodHRwOi8vd3d3LmRhdGF0YWJsZXMubmV0CiBSb3dSZW9yZGVyIDEuMi42CiAyMDE1LTIwMTkgU3ByeU1lZGlhIEx0ZCAtIGRhdGF0YWJsZXMubmV0L2xpY2Vuc2UKKi8KdmFyICRqc2NvbXA9JGpzY29tcHx8e307JGpzY29tcC5zY29wZT17fTskanNjb21wLmZpbmRJbnRlcm5hbD1mdW5jdGlvbihhLGYsZCl7YSBpbnN0YW5jZW9mIFN0cmluZyYmKGE9U3RyaW5nKGEpKTtmb3IodmFyIGg9YS5sZW5ndGgsZz0wO2c8aDtnKyspe3ZhciBtPWFbZ107aWYoZi5jYWxsKGQsbSxnLGEpKXJldHVybntpOmcsdjptfX1yZXR1cm57aTotMSx2OnZvaWQgMH19OyRqc2NvbXAuQVNTVU1FX0VTNT0hMTskanNjb21wLkFTU1VNRV9OT19OQVRJVkVfTUFQPSExOyRqc2NvbXAuQVNTVU1FX05PX05BVElWRV9TRVQ9ITE7JGpzY29tcC5TSU1QTEVfRlJPVU5EX1BPTFlGSUxMPSExOwokanNjb21wLmRlZmluZVByb3BlcnR5PSRqc2NvbXAuQVNTVU1FX0VTNXx8ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihhLGYsZCl7YSE9QXJyYXkucHJvdG90eXBlJiZhIT1PYmplY3QucHJvdG90eXBlJiYoYVtmXT1kLnZhbHVlKX07JGpzY29tcC5nZXRHbG9iYWw9ZnVuY3Rpb24oYSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdz09PWE/YToidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmbnVsbCE9Z2xvYmFsP2dsb2JhbDphfTskanNjb21wLmdsb2JhbD0kanNjb21wLmdldEdsb2JhbCh0aGlzKTsKJGpzY29tcC5wb2x5ZmlsbD1mdW5jdGlvbihhLGYsZCxoKXtpZihmKXtkPSRqc2NvbXAuZ2xvYmFsO2E9YS5zcGxpdCgiLiIpO2ZvcihoPTA7aDxhLmxlbmd0aC0xO2grKyl7dmFyIGc9YVtoXTtnIGluIGR8fChkW2ddPXt9KTtkPWRbZ119YT1hW2EubGVuZ3RoLTFdO2g9ZFthXTtmPWYoaCk7ZiE9aCYmbnVsbCE9ZiYmJGpzY29tcC5kZWZpbmVQcm9wZXJ0eShkLGEse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpmfSl9fTskanNjb21wLnBvbHlmaWxsKCJBcnJheS5wcm90b3R5cGUuZmluZCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihhLGQpe3JldHVybiAkanNjb21wLmZpbmRJbnRlcm5hbCh0aGlzLGEsZCkudn19LCJlczYiLCJlczMiKTsKKGZ1bmN0aW9uKGEpeyJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImpxdWVyeSIsImRhdGF0YWJsZXMubmV0Il0sZnVuY3Rpb24oZil7cmV0dXJuIGEoZix3aW5kb3csZG9jdW1lbnQpfSk6Im9iamVjdCI9PT10eXBlb2YgZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1mdW5jdGlvbihmLGQpe2Z8fChmPXdpbmRvdyk7ZCYmZC5mbi5kYXRhVGFibGV8fChkPXJlcXVpcmUoImRhdGF0YWJsZXMubmV0IikoZixkKS4kKTtyZXR1cm4gYShkLGYsZi5kb2N1bWVudCl9OmEoalF1ZXJ5LHdpbmRvdyxkb2N1bWVudCl9KShmdW5jdGlvbihhLGYsZCxoKXt2YXIgZz1hLmZuLmRhdGFUYWJsZSxtPWZ1bmN0aW9uKGMsZSl7aWYoIWcudmVyc2lvbkNoZWNrfHwhZy52ZXJzaW9uQ2hlY2soIjEuMTAuOCIpKXRocm93IkRhdGFUYWJsZXMgUm93UmVvcmRlciByZXF1aXJlcyBEYXRhVGFibGVzIDEuMTAuOCBvciBuZXdlciI7dGhpcy5jPWEuZXh0ZW5kKCEwLHt9LGcuZGVmYXVsdHMucm93UmVvcmRlciwKbS5kZWZhdWx0cyxlKTt0aGlzLnM9e2JvZHlUb3A6bnVsbCxkdDpuZXcgZy5BcGkoYyksZ2V0RGF0YUZuOmcuZXh0Lm9BcGkuX2ZuR2V0T2JqZWN0RGF0YUZuKHRoaXMuYy5kYXRhU3JjKSxtaWRkbGVzOm51bGwsc2Nyb2xsOnt9LHNjcm9sbEludGVydmFsOm51bGwsc2V0RGF0YUZuOmcuZXh0Lm9BcGkuX2ZuU2V0T2JqZWN0RGF0YUZuKHRoaXMuYy5kYXRhU3JjKSxzdGFydDp7dG9wOjAsbGVmdDowLG9mZnNldFRvcDowLG9mZnNldExlZnQ6MCxub2RlczpbXX0sd2luZG93SGVpZ2h0OjAsZG9jdW1lbnRPdXRlckhlaWdodDowLGRvbUNsb25lT3V0ZXJIZWlnaHQ6MH07dGhpcy5kb209e2Nsb25lOm51bGwsZHRTY3JvbGw6YSgiZGl2LmRhdGFUYWJsZXNfc2Nyb2xsQm9keSIsdGhpcy5zLmR0LnRhYmxlKCkuY29udGFpbmVyKCkpfTtjPXRoaXMucy5kdC5zZXR0aW5ncygpWzBdO2lmKGU9Yy5yb3dyZW9yZGVyKXJldHVybiBlO2Mucm93cmVvcmRlcj10aGlzO3RoaXMuX2NvbnN0cnVjdG9yKCl9OwphLmV4dGVuZChtLnByb3RvdHlwZSx7X2NvbnN0cnVjdG9yOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcyxlPXRoaXMucy5kdCxiPWEoZS50YWJsZSgpLm5vZGUoKSk7InN0YXRpYyI9PT1iLmNzcygicG9zaXRpb24iKSYmYi5jc3MoInBvc2l0aW9uIiwicmVsYXRpdmUiKTthKGUudGFibGUoKS5jb250YWluZXIoKSkub24oIm1vdXNlZG93bi5yb3dSZW9yZGVyIHRvdWNoc3RhcnQucm93UmVvcmRlciIsdGhpcy5jLnNlbGVjdG9yLGZ1bmN0aW9uKGIpe2lmKGMuYy5lbmFibGUpe2lmKGEoYi50YXJnZXQpLmlzKGMuYy5leGNsdWRlZENoaWxkcmVuKSlyZXR1cm4hMDt2YXIgZD1hKHRoaXMpLmNsb3Nlc3QoInRyIiksbj1lLnJvdyhkKTtpZihuLmFueSgpKXJldHVybiBjLl9lbWl0RXZlbnQoInByZS1yb3ctcmVvcmRlciIse25vZGU6bi5ub2RlKCksaW5kZXg6bi5pbmRleCgpfSksYy5fbW91c2VEb3duKGIsZCksITF9fSk7ZS5vbigiZGVzdHJveS5yb3dSZW9yZGVyIixmdW5jdGlvbigpe2EoZS50YWJsZSgpLmNvbnRhaW5lcigpKS5vZmYoIi5yb3dSZW9yZGVyIik7CmUub2ZmKCIucm93UmVvcmRlciIpfSl9LF9jYWNoZVBvc2l0aW9uczpmdW5jdGlvbigpe3ZhciBjPXRoaXMucy5kdCxlPWEoYy50YWJsZSgpLm5vZGUoKSkuZmluZCgidGhlYWQiKS5vdXRlckhlaWdodCgpLGI9YS51bmlxdWUoYy5yb3dzKHtwYWdlOiJjdXJyZW50In0pLm5vZGVzKCkudG9BcnJheSgpKSxuPWEubWFwKGIsZnVuY3Rpb24oYyxiKXtyZXR1cm4gYShjKS5wb3NpdGlvbigpLnRvcC1lfSk7Yj1hLm1hcChuLGZ1bmN0aW9uKGIsZSl7cmV0dXJuIG4ubGVuZ3RoPGUtMT8oYituW2UrMV0pLzI6KGIrYithKGMucm93KCI6bGFzdC1jaGlsZCIpLm5vZGUoKSkub3V0ZXJIZWlnaHQoKSkvMn0pO3RoaXMucy5taWRkbGVzPWI7dGhpcy5zLmJvZHlUb3A9YShjLnRhYmxlKCkuYm9keSgpKS5vZmZzZXQoKS50b3A7dGhpcy5zLndpbmRvd0hlaWdodD1hKGYpLmhlaWdodCgpO3RoaXMucy5kb2N1bWVudE91dGVySGVpZ2h0PWEoZCkub3V0ZXJIZWlnaHQoKX0sX2Nsb25lOmZ1bmN0aW9uKGMpe3ZhciBlPQphKHRoaXMucy5kdC50YWJsZSgpLm5vZGUoKS5jbG9uZU5vZGUoITEpKS5hZGRDbGFzcygiZHQtcm93UmVvcmRlci1mbG9hdCIpLmFwcGVuZCgiPHRib2R5Lz4iKS5hcHBlbmQoYy5jbG9uZSghMSkpLGI9Yy5vdXRlcldpZHRoKCksbj1jLm91dGVySGVpZ2h0KCksZD1jLmNoaWxkcmVuKCkubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcykud2lkdGgoKX0pO2Uud2lkdGgoYikuaGVpZ2h0KG4pLmZpbmQoInRyIikuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKGEpe3RoaXMuc3R5bGUud2lkdGg9ZFthXSsicHgifSk7ZS5hcHBlbmRUbygiYm9keSIpO3RoaXMuZG9tLmNsb25lPWU7dGhpcy5zLmRvbUNsb25lT3V0ZXJIZWlnaHQ9ZS5vdXRlckhlaWdodCgpfSxfY2xvbmVQb3NpdGlvbjpmdW5jdGlvbihhKXt2YXIgYz10aGlzLnMuc3RhcnQsYj10aGlzLl9ldmVudFRvUGFnZShhLCJZIiktYy50b3A7YT10aGlzLl9ldmVudFRvUGFnZShhLCJYIiktYy5sZWZ0O3ZhciBkPXRoaXMuYy5zbmFwWDsKYis9Yy5vZmZzZXRUb3A7Yz0hMD09PWQ/Yy5vZmZzZXRMZWZ0OiJudW1iZXIiPT09dHlwZW9mIGQ/Yy5vZmZzZXRMZWZ0K2Q6YStjLm9mZnNldExlZnQ7MD5iP2I9MDpiK3RoaXMucy5kb21DbG9uZU91dGVySGVpZ2h0PnRoaXMucy5kb2N1bWVudE91dGVySGVpZ2h0JiYoYj10aGlzLnMuZG9jdW1lbnRPdXRlckhlaWdodC10aGlzLnMuZG9tQ2xvbmVPdXRlckhlaWdodCk7dGhpcy5kb20uY2xvbmUuY3NzKHt0b3A6YixsZWZ0OmN9KX0sX2VtaXRFdmVudDpmdW5jdGlvbihjLGUpe3RoaXMucy5kdC5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGIsZCl7YShiLm5UYWJsZSkudHJpZ2dlckhhbmRsZXIoYysiLmR0IixlKX0pfSxfZXZlbnRUb1BhZ2U6ZnVuY3Rpb24oYSxlKXtyZXR1cm4tMSE9PWEudHlwZS5pbmRleE9mKCJ0b3VjaCIpP2Eub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdWyJwYWdlIitlXTphWyJwYWdlIitlXX0sX21vdXNlRG93bjpmdW5jdGlvbihjLGUpe3ZhciBiPXRoaXMsCm49dGhpcy5zLmR0LGc9dGhpcy5zLnN0YXJ0LHQ9ZS5vZmZzZXQoKTtnLnRvcD10aGlzLl9ldmVudFRvUGFnZShjLCJZIik7Zy5sZWZ0PXRoaXMuX2V2ZW50VG9QYWdlKGMsIlgiKTtnLm9mZnNldFRvcD10LnRvcDtnLm9mZnNldExlZnQ9dC5sZWZ0O2cubm9kZXM9YS51bmlxdWUobi5yb3dzKHtwYWdlOiJjdXJyZW50In0pLm5vZGVzKCkudG9BcnJheSgpKTt0aGlzLl9jYWNoZVBvc2l0aW9ucygpO3RoaXMuX2Nsb25lKGUpO3RoaXMuX2Nsb25lUG9zaXRpb24oYyk7dGhpcy5kb20udGFyZ2V0PWU7ZS5hZGRDbGFzcygiZHQtcm93UmVvcmRlci1tb3ZpbmciKTthKGQpLm9uKCJtb3VzZXVwLnJvd1Jlb3JkZXIgdG91Y2hlbmQucm93UmVvcmRlciIsZnVuY3Rpb24oYSl7Yi5fbW91c2VVcChhKX0pLm9uKCJtb3VzZW1vdmUucm93UmVvcmRlciB0b3VjaG1vdmUucm93UmVvcmRlciIsZnVuY3Rpb24oYSl7Yi5fbW91c2VNb3ZlKGEpfSk7YShmKS53aWR0aCgpPT09YShkKS53aWR0aCgpJiZhKGQuYm9keSkuYWRkQ2xhc3MoImR0LXJvd1Jlb3JkZXItbm9PdmVyZmxvdyIpOwpjPXRoaXMuZG9tLmR0U2Nyb2xsO3RoaXMucy5zY3JvbGw9e3dpbmRvd0hlaWdodDphKGYpLmhlaWdodCgpLHdpbmRvd1dpZHRoOmEoZikud2lkdGgoKSxkdFRvcDpjLmxlbmd0aD9jLm9mZnNldCgpLnRvcDpudWxsLGR0TGVmdDpjLmxlbmd0aD9jLm9mZnNldCgpLmxlZnQ6bnVsbCxkdEhlaWdodDpjLmxlbmd0aD9jLm91dGVySGVpZ2h0KCk6bnVsbCxkdFdpZHRoOmMubGVuZ3RoP2Mub3V0ZXJXaWR0aCgpOm51bGx9fSxfbW91c2VNb3ZlOmZ1bmN0aW9uKGMpe3RoaXMuX2Nsb25lUG9zaXRpb24oYyk7Zm9yKHZhciBlPXRoaXMuX2V2ZW50VG9QYWdlKGMsIlkiKS10aGlzLnMuYm9keVRvcCxiPXRoaXMucy5taWRkbGVzLGQ9bnVsbCxmPXRoaXMucy5kdCxnPWYudGFibGUoKS5ib2R5KCksbD0wLGg9Yi5sZW5ndGg7bDxoO2wrKylpZihlPGJbbF0pe2Q9bDticmVha31udWxsPT09ZCYmKGQ9Yi5sZW5ndGgpO2lmKG51bGw9PT10aGlzLnMubGFzdEluc2VydHx8dGhpcy5zLmxhc3RJbnNlcnQhPT0KZCkwPT09ZD90aGlzLmRvbS50YXJnZXQucHJlcGVuZFRvKGcpOihlPWEudW5pcXVlKGYucm93cyh7cGFnZToiY3VycmVudCJ9KS5ub2RlcygpLnRvQXJyYXkoKSksZD50aGlzLnMubGFzdEluc2VydD90aGlzLmRvbS50YXJnZXQuaW5zZXJ0QWZ0ZXIoZVtkLTFdKTp0aGlzLmRvbS50YXJnZXQuaW5zZXJ0QmVmb3JlKGVbZF0pKSx0aGlzLl9jYWNoZVBvc2l0aW9ucygpLHRoaXMucy5sYXN0SW5zZXJ0PWQ7dGhpcy5fc2hpZnRTY3JvbGwoYyl9LF9tb3VzZVVwOmZ1bmN0aW9uKGMpe3ZhciBlPXRoaXMsYj10aGlzLnMuZHQsZixnPXRoaXMuYy5kYXRhU3JjO3RoaXMuZG9tLmNsb25lLnJlbW92ZSgpO3RoaXMuZG9tLmNsb25lPW51bGw7dGhpcy5kb20udGFyZ2V0LnJlbW92ZUNsYXNzKCJkdC1yb3dSZW9yZGVyLW1vdmluZyIpO2EoZCkub2ZmKCIucm93UmVvcmRlciIpO2EoZC5ib2R5KS5yZW1vdmVDbGFzcygiZHQtcm93UmVvcmRlci1ub092ZXJmbG93Iik7Y2xlYXJJbnRlcnZhbCh0aGlzLnMuc2Nyb2xsSW50ZXJ2YWwpOwp0aGlzLnMuc2Nyb2xsSW50ZXJ2YWw9bnVsbDt2YXIgaD10aGlzLnMuc3RhcnQubm9kZXMsbD1hLnVuaXF1ZShiLnJvd3Moe3BhZ2U6ImN1cnJlbnQifSkubm9kZXMoKS50b0FycmF5KCkpLG09e30scT1bXSxwPVtdLHI9dGhpcy5zLmdldERhdGFGbix5PXRoaXMucy5zZXREYXRhRm47dmFyIGs9MDtmb3IoZj1oLmxlbmd0aDtrPGY7aysrKWlmKGhba10hPT1sW2tdKXt2YXIgdT1iLnJvdyhsW2tdKS5pZCgpLHo9Yi5yb3cobFtrXSkuZGF0YSgpLHY9Yi5yb3coaFtrXSkuZGF0YSgpO3UmJihtW3VdPXIodikpO3EucHVzaCh7bm9kZTpsW2tdLG9sZERhdGE6cih6KSxuZXdEYXRhOnIodiksbmV3UG9zaXRpb246ayxvbGRQb3NpdGlvbjphLmluQXJyYXkobFtrXSxoKX0pO3AucHVzaChsW2tdKX12YXIgdz1bcSx7ZGF0YVNyYzpnLG5vZGVzOnAsdmFsdWVzOm0sdHJpZ2dlclJvdzpiLnJvdyh0aGlzLmRvbS50YXJnZXQpLG9yaWdpbmFsRXZlbnQ6Y31dO3RoaXMuX2VtaXRFdmVudCgicm93LXJlb3JkZXIiLAp3KTt2YXIgeD1mdW5jdGlvbigpe2lmKGUuYy51cGRhdGUpe2s9MDtmb3IoZj1xLmxlbmd0aDtrPGY7aysrKXt2YXIgYT1iLnJvdyhxW2tdLm5vZGUpLmRhdGEoKTt5KGEscVtrXS5uZXdEYXRhKTtiLmNvbHVtbnMoKS5ldmVyeShmdW5jdGlvbigpe3RoaXMuZGF0YVNyYygpPT09ZyYmYi5jZWxsKHFba10ubm9kZSx0aGlzLmluZGV4KCkpLmludmFsaWRhdGUoImRhdGEiKX0pfWUuX2VtaXRFdmVudCgicm93LXJlb3JkZXJlZCIsdyk7Yi5kcmF3KCExKX19O3RoaXMuYy5lZGl0b3I/KHRoaXMuYy5lbmFibGU9ITEsdGhpcy5jLmVkaXRvci5lZGl0KHAsITEsYS5leHRlbmQoe3N1Ym1pdDoiY2hhbmdlZCJ9LHRoaXMuYy5mb3JtT3B0aW9ucykpLm11bHRpU2V0KGcsbSkub25lKCJwcmVTdWJtaXRDYW5jZWxsZWQucm93UmVvcmRlciIsZnVuY3Rpb24oKXtlLmMuZW5hYmxlPSEwO2UuYy5lZGl0b3Iub2ZmKCIucm93UmVvcmRlciIpO2IuZHJhdyghMSl9KS5vbmUoInN1Ym1pdFVuc3VjY2Vzc2Z1bC5yb3dSZW9yZGVyIiwKZnVuY3Rpb24oKXtiLmRyYXcoITEpfSkub25lKCJzdWJtaXRTdWNjZXNzLnJvd1Jlb3JkZXIiLGZ1bmN0aW9uKCl7eCgpfSkub25lKCJzdWJtaXRDb21wbGV0ZSIsZnVuY3Rpb24oKXtlLmMuZW5hYmxlPSEwO2UuYy5lZGl0b3Iub2ZmKCIucm93UmVvcmRlciIpfSkuc3VibWl0KCkpOngoKX0sX3NoaWZ0U2Nyb2xsOmZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMsYj10aGlzLnMuc2Nyb2xsLGY9ITEsZz1hLnBhZ2VZLWQuYm9keS5zY3JvbGxUb3AsaCxsOzY1Pmc/aD0tNTpnPmIud2luZG93SGVpZ2h0LTY1JiYoaD01KTtudWxsIT09Yi5kdFRvcCYmYS5wYWdlWTxiLmR0VG9wKzY1P2w9LTU6bnVsbCE9PWIuZHRUb3AmJmEucGFnZVk+Yi5kdFRvcCtiLmR0SGVpZ2h0LTY1JiYobD01KTtofHxsPyhiLndpbmRvd1ZlcnQ9aCxiLmR0VmVydD1sLGY9ITApOnRoaXMucy5zY3JvbGxJbnRlcnZhbCYmKGNsZWFySW50ZXJ2YWwodGhpcy5zLnNjcm9sbEludGVydmFsKSx0aGlzLnMuc2Nyb2xsSW50ZXJ2YWw9Cm51bGwpOyF0aGlzLnMuc2Nyb2xsSW50ZXJ2YWwmJmYmJih0aGlzLnMuc2Nyb2xsSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtiLndpbmRvd1ZlcnQmJihkLmJvZHkuc2Nyb2xsVG9wKz1iLndpbmRvd1ZlcnQpO2lmKGIuZHRWZXJ0KXt2YXIgYT1jLmRvbS5kdFNjcm9sbFswXTtiLmR0VmVydCYmKGEuc2Nyb2xsVG9wKz1iLmR0VmVydCl9fSwyMCkpfX0pO20uZGVmYXVsdHM9e2RhdGFTcmM6MCxlZGl0b3I6bnVsbCxlbmFibGU6ITAsZm9ybU9wdGlvbnM6e30sc2VsZWN0b3I6InRkOmZpcnN0LWNoaWxkIixzbmFwWDohMSx1cGRhdGU6ITAsZXhjbHVkZWRDaGlsZHJlbjoiYSJ9O3ZhciBwPWEuZm4uZGF0YVRhYmxlLkFwaTtwLnJlZ2lzdGVyKCJyb3dSZW9yZGVyKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KTtwLnJlZ2lzdGVyKCJyb3dSZW9yZGVyLmVuYWJsZSgpIixmdW5jdGlvbihhKXthPT09aCYmKGE9ITApO3JldHVybiB0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYyl7Yy5yb3dyZW9yZGVyJiYKKGMucm93cmVvcmRlci5jLmVuYWJsZT1hKX0pfSk7cC5yZWdpc3Rlcigicm93UmVvcmRlci5kaXNhYmxlKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihhKXthLnJvd3Jlb3JkZXImJihhLnJvd3Jlb3JkZXIuYy5lbmFibGU9ITEpfSl9KTttLnZlcnNpb249IjEuMi42IjthLmZuLmRhdGFUYWJsZS5Sb3dSZW9yZGVyPW07YS5mbi5EYXRhVGFibGUuUm93UmVvcmRlcj1tO2EoZCkub24oImluaXQuZHQuZHRyIixmdW5jdGlvbihjLGQsYil7ImR0Ij09PWMubmFtZXNwYWNlJiYoYz1kLm9Jbml0LnJvd1Jlb3JkZXIsYj1nLmRlZmF1bHRzLnJvd1Jlb3JkZXIsY3x8YikmJihiPWEuZXh0ZW5kKHt9LGMsYiksITEhPT1jJiZuZXcgbShkLGIpKX0pO3JldHVybiBtfSk7CgoKLyohCiAgIENvcHlyaWdodCAyMDExLTIwMTkgU3ByeU1lZGlhIEx0ZC4KCiBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGF2YWlsYWJsZSB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CiAgIE1JVCBsaWNlbnNlIC0gaHR0cDovL2RhdGF0YWJsZXMubmV0L2xpY2Vuc2UvbWl0CgogVGhpcyBzb3VyY2UgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBsaWNlbnNlIGZpbGVzIGZvciBkZXRhaWxzLgoKIEZvciBkZXRhaWxzIHBsZWFzZSByZWZlciB0bzogaHR0cDovL3d3dy5kYXRhdGFibGVzLm5ldAogU2Nyb2xsZXIgMi4wLjEKIMKpMjAxMS0yMDE5IFNwcnlNZWRpYSBMdGQgLSBkYXRhdGFibGVzLm5ldC9saWNlbnNlCiovCihmdW5jdGlvbihlKXsiZnVuY3Rpb24iPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJqcXVlcnkiLCJkYXRhdGFibGVzLm5ldCJdLGZ1bmN0aW9uKGgpe3JldHVybiBlKGgsd2luZG93LGRvY3VtZW50KX0pOiJvYmplY3QiPT09dHlwZW9mIGV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24oaCxrKXtofHwoaD13aW5kb3cpO2smJmsuZm4uZGF0YVRhYmxlfHwoaz1yZXF1aXJlKCJkYXRhdGFibGVzLm5ldCIpKGgsaykuJCk7cmV0dXJuIGUoayxoLGguZG9jdW1lbnQpfTplKGpRdWVyeSx3aW5kb3csZG9jdW1lbnQpfSkoZnVuY3Rpb24oZSxoLGssbil7dmFyIHA9ZS5mbi5kYXRhVGFibGUsZz1mdW5jdGlvbihhLGIpe3RoaXMgaW5zdGFuY2VvZiBnPyhiPT09biYmKGI9e30pLGE9ZS5mbi5kYXRhVGFibGUuQXBpKGEpLHRoaXMucz17ZHQ6YS5zZXR0aW5ncygpWzBdLGR0QXBpOmEsdGFibGVUb3A6MCx0YWJsZUJvdHRvbTowLHJlZHJhd1RvcDowLHJlZHJhd0JvdHRvbTowLAphdXRvSGVpZ2h0OiEwLHZpZXdwb3J0Um93czowLHN0YXRlVE86bnVsbCxkcmF3VE86bnVsbCxoZWlnaHRzOntqdW1wOm51bGwscGFnZTpudWxsLHZpcnR1YWw6bnVsbCxzY3JvbGw6bnVsbCxyb3c6bnVsbCx2aWV3cG9ydDpudWxsLGxhYmVsRmFjdG9yOjF9LHRvcFJvd0Zsb2F0OjAsc2Nyb2xsRHJhd0RpZmY6bnVsbCxsb2FkZXJWaXNpYmxlOiExLGZvcmNlUmVwb3NpdGlvbjohMSxiYXNlUm93VG9wOjAsYmFzZVNjcm9sbFRvcDowLG1vdXNlZG93bjohMSxsYXN0U2Nyb2xsVG9wOjB9LHRoaXMucz1lLmV4dGVuZCh0aGlzLnMsZy5vRGVmYXVsdHMsYiksdGhpcy5zLmhlaWdodHMucm93PXRoaXMucy5yb3dIZWlnaHQsdGhpcy5kb209e2ZvcmNlOmsuY3JlYXRlRWxlbWVudCgiZGl2IiksbGFiZWw6ZSgnPGRpdiBjbGFzcz0iZHRzX2xhYmVsIj4wPC9kaXY+Jyksc2Nyb2xsZXI6bnVsbCx0YWJsZTpudWxsLGxvYWRlcjpudWxsfSx0aGlzLnMuZHQub1Njcm9sbGVyfHwodGhpcy5zLmR0Lm9TY3JvbGxlcj0KdGhpcyx0aGlzLmNvbnN0cnVjdCgpKSk6YWxlcnQoIlNjcm9sbGVyIHdhcm5pbmc6IFNjcm9sbGVyIG11c3QgYmUgaW5pdGlhbGlzZWQgd2l0aCB0aGUgJ25ldycga2V5d29yZC4iKX07ZS5leHRlbmQoZy5wcm90b3R5cGUse21lYXN1cmU6ZnVuY3Rpb24oYSl7dGhpcy5zLmF1dG9IZWlnaHQmJnRoaXMuX2NhbGNSb3dIZWlnaHQoKTt2YXIgYj10aGlzLnMuaGVpZ2h0cztiLnJvdyYmKGIudmlld3BvcnQ9ZS5jb250YWlucyhrLHRoaXMuZG9tLnNjcm9sbGVyKT90aGlzLmRvbS5zY3JvbGxlci5jbGllbnRIZWlnaHQ6dGhpcy5fcGFyc2VIZWlnaHQoZSh0aGlzLmRvbS5zY3JvbGxlcikuY3NzKCJoZWlnaHQiKSksYi52aWV3cG9ydHx8KGIudmlld3BvcnQ9dGhpcy5fcGFyc2VIZWlnaHQoZSh0aGlzLmRvbS5zY3JvbGxlcikuY3NzKCJtYXgtaGVpZ2h0IikpKSx0aGlzLnMudmlld3BvcnRSb3dzPXBhcnNlSW50KGIudmlld3BvcnQvYi5yb3csMTApKzEsdGhpcy5zLmR0Ll9pRGlzcGxheUxlbmd0aD0KdGhpcy5zLnZpZXdwb3J0Um93cyp0aGlzLnMuZGlzcGxheUJ1ZmZlcik7dmFyIGM9dGhpcy5kb20ubGFiZWwub3V0ZXJIZWlnaHQoKTtiLmxhYmVsRmFjdG9yPShiLnZpZXdwb3J0LWMpL2Iuc2Nyb2xsOyhhPT09bnx8YSkmJnRoaXMucy5kdC5vSW5zdGFuY2UuZm5EcmF3KCExKX0scGFnZUluZm86ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRvbS5zY3JvbGxlci5zY3JvbGxUb3AsYj10aGlzLnMuZHQuZm5SZWNvcmRzRGlzcGxheSgpLGM9TWF0aC5jZWlsKHRoaXMucGl4ZWxzVG9Sb3coYSt0aGlzLnMuaGVpZ2h0cy52aWV3cG9ydCwhMSx0aGlzLnMuYW5pKSk7cmV0dXJue3N0YXJ0Ok1hdGguZmxvb3IodGhpcy5waXhlbHNUb1JvdyhhLCExLHRoaXMucy5hbmkpKSxlbmQ6YjxjP2ItMTpjLTF9fSxwaXhlbHNUb1JvdzpmdW5jdGlvbihhLGIsYyl7YS09dGhpcy5zLmJhc2VTY3JvbGxUb3A7Yz1jPyh0aGlzLl9kb21haW4oInBoeXNpY2FsVG9WaXJ0dWFsIix0aGlzLnMuYmFzZVNjcm9sbFRvcCkrCmEpL3RoaXMucy5oZWlnaHRzLnJvdzphL3RoaXMucy5oZWlnaHRzLnJvdyt0aGlzLnMuYmFzZVJvd1RvcDtyZXR1cm4gYnx8Yj09PW4/cGFyc2VJbnQoYywxMCk6Y30scm93VG9QaXhlbHM6ZnVuY3Rpb24oYSxiLGMpe2EtPXRoaXMucy5iYXNlUm93VG9wO2M9Yz90aGlzLl9kb21haW4oInZpcnR1YWxUb1BoeXNpY2FsIix0aGlzLnMuYmFzZVNjcm9sbFRvcCk6dGhpcy5zLmJhc2VTY3JvbGxUb3A7Yys9YSp0aGlzLnMuaGVpZ2h0cy5yb3c7cmV0dXJuIGJ8fGI9PT1uP3BhcnNlSW50KGMsMTApOmN9LHNjcm9sbFRvUm93OmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcyxkPSExLGY9dGhpcy5yb3dUb1BpeGVscyhhKSxtPWEtKHRoaXMucy5kaXNwbGF5QnVmZmVyLTEpLzIqdGhpcy5zLnZpZXdwb3J0Um93czswPm0mJihtPTApOyhmPnRoaXMucy5yZWRyYXdCb3R0b218fGY8dGhpcy5zLnJlZHJhd1RvcCkmJnRoaXMucy5kdC5faURpc3BsYXlTdGFydCE9PW0mJihkPSEwLGY9dGhpcy5fZG9tYWluKCJ2aXJ0dWFsVG9QaHlzaWNhbCIsCmEqdGhpcy5zLmhlaWdodHMucm93KSx0aGlzLnMucmVkcmF3VG9wPGYmJmY8dGhpcy5zLnJlZHJhd0JvdHRvbSYmKHRoaXMucy5mb3JjZVJlcG9zaXRpb249ITAsYj0hMSkpO2I9PT1ufHxiPyh0aGlzLnMuYW5pPWQsZSh0aGlzLmRvbS5zY3JvbGxlcikuYW5pbWF0ZSh7c2Nyb2xsVG9wOmZ9LGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe2Mucy5hbmk9ITF9LDI1MCl9KSk6ZSh0aGlzLmRvbS5zY3JvbGxlcikuc2Nyb2xsVG9wKGYpfSxjb25zdHJ1Y3Q6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9dGhpcy5zLmR0QXBpO2lmKHRoaXMucy5kdC5vRmVhdHVyZXMuYlBhZ2luYXRlKXt0aGlzLmRvbS5mb3JjZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiO3RoaXMuZG9tLmZvcmNlLnN0eWxlLnRvcD0iMHB4Ijt0aGlzLmRvbS5mb3JjZS5zdHlsZS5sZWZ0PSIwcHgiO3RoaXMuZG9tLmZvcmNlLnN0eWxlLndpZHRoPSIxcHgiO3RoaXMuZG9tLnNjcm9sbGVyPWUoImRpdi4iK3RoaXMucy5kdC5vQ2xhc3Nlcy5zU2Nyb2xsQm9keSwKdGhpcy5zLmR0Lm5UYWJsZVdyYXBwZXIpWzBdO3RoaXMuZG9tLnNjcm9sbGVyLmFwcGVuZENoaWxkKHRoaXMuZG9tLmZvcmNlKTt0aGlzLmRvbS5zY3JvbGxlci5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiO3RoaXMuZG9tLnRhYmxlPWUoIj50YWJsZSIsdGhpcy5kb20uc2Nyb2xsZXIpWzBdO3RoaXMuZG9tLnRhYmxlLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7dGhpcy5kb20udGFibGUuc3R5bGUudG9wPSIwcHgiO3RoaXMuZG9tLnRhYmxlLnN0eWxlLmxlZnQ9IjBweCI7ZShiLnRhYmxlKCkuY29udGFpbmVyKCkpLmFkZENsYXNzKCJkdHMgRFRTIik7dGhpcy5zLmxvYWRpbmdJbmRpY2F0b3ImJih0aGlzLmRvbS5sb2FkZXI9ZSgnPGRpdiBjbGFzcz0iZGF0YVRhYmxlc19wcm9jZXNzaW5nIGR0c19sb2FkaW5nIj4nK3RoaXMucy5kdC5vTGFuZ3VhZ2Uuc0xvYWRpbmdSZWNvcmRzKyI8L2Rpdj4iKS5jc3MoImRpc3BsYXkiLCJub25lIiksZSh0aGlzLmRvbS5zY3JvbGxlci5wYXJlbnROb2RlKS5jc3MoInBvc2l0aW9uIiwKInJlbGF0aXZlIikuYXBwZW5kKHRoaXMuZG9tLmxvYWRlcikpO3RoaXMuZG9tLmxhYmVsLmFwcGVuZFRvKHRoaXMuZG9tLnNjcm9sbGVyKTt0aGlzLnMuaGVpZ2h0cy5yb3cmJiJhdXRvIiE9dGhpcy5zLmhlaWdodHMucm93JiYodGhpcy5zLmF1dG9IZWlnaHQ9ITEpO3RoaXMubWVhc3VyZSghMSk7dGhpcy5zLmluZ25vcmVTY3JvbGw9ITA7dGhpcy5zLnN0YXRlU2F2ZVRocm90dGxlPXRoaXMucy5kdC5vQXBpLl9mblRocm90dGxlKGZ1bmN0aW9uKCl7YS5zLmR0QXBpLnN0YXRlLnNhdmUoKX0sNTAwKTtlKHRoaXMuZG9tLnNjcm9sbGVyKS5vbigic2Nyb2xsLmR0LXNjcm9sbGVyIixmdW5jdGlvbihiKXthLl9zY3JvbGwuY2FsbChhKX0pO2UodGhpcy5kb20uc2Nyb2xsZXIpLm9uKCJ0b3VjaHN0YXJ0LmR0LXNjcm9sbGVyIixmdW5jdGlvbigpe2EuX3Njcm9sbC5jYWxsKGEpfSk7ZSh0aGlzLmRvbS5zY3JvbGxlcikub24oIm1vdXNlZG93bi5kdC1zY3JvbGxlciIsZnVuY3Rpb24oKXthLnMubW91c2Vkb3duPQohMH0pLm9uKCJtb3VzZXVwLmR0LXNjcm9sbGVyIixmdW5jdGlvbigpe2Eucy5tb3VzZXVwPSExO2EuZG9tLmxhYmVsLmNzcygiZGlzcGxheSIsIm5vbmUiKX0pO2UoaCkub24oInJlc2l6ZS5kdC1zY3JvbGxlciIsZnVuY3Rpb24oKXthLm1lYXN1cmUoITEpO2EuX2luZm8oKX0pO3ZhciBjPSEwLGQ9Yi5zdGF0ZS5sb2FkZWQoKTtiLm9uKCJzdGF0ZVNhdmVQYXJhbXMuc2Nyb2xsZXIiLGZ1bmN0aW9uKGIsZSxoKXtoLnNjcm9sbGVyPXt0b3BSb3c6YyYmZCYmZC5zY3JvbGxlcj9kLnNjcm9sbGVyLnRvcFJvdzphLnMudG9wUm93RmxvYXQsYmFzZVNjcm9sbFRvcDphLnMuYmFzZVNjcm9sbFRvcCxiYXNlUm93VG9wOmEucy5iYXNlUm93VG9wfTtjPSExfSk7ZCYmZC5zY3JvbGxlciYmKHRoaXMucy50b3BSb3dGbG9hdD1kLnNjcm9sbGVyLnRvcFJvdyx0aGlzLnMuYmFzZVNjcm9sbFRvcD1kLnNjcm9sbGVyLmJhc2VTY3JvbGxUb3AsdGhpcy5zLmJhc2VSb3dUb3A9ZC5zY3JvbGxlci5iYXNlUm93VG9wKTsKYi5vbigiaW5pdC5zY3JvbGxlciIsZnVuY3Rpb24oKXthLm1lYXN1cmUoITEpO2Eucy5zY3JvbGxUeXBlPSJqdW1wIjthLl9kcmF3KCk7Yi5vbigiZHJhdy5zY3JvbGxlciIsZnVuY3Rpb24oKXthLl9kcmF3KCl9KX0pO2Iub24oInByZURyYXcuZHQuc2Nyb2xsZXIiLGZ1bmN0aW9uKCl7YS5fc2Nyb2xsRm9yY2UoKX0pO2Iub24oImRlc3Ryb3kuc2Nyb2xsZXIiLGZ1bmN0aW9uKCl7ZShoKS5vZmYoInJlc2l6ZS5kdC1zY3JvbGxlciIpO2UoYS5kb20uc2Nyb2xsZXIpLm9mZigiLmR0LXNjcm9sbGVyIik7ZShhLnMuZHQublRhYmxlKS5vZmYoIi5zY3JvbGxlciIpO2UoYS5zLmR0Lm5UYWJsZVdyYXBwZXIpLnJlbW92ZUNsYXNzKCJEVFMiKTtlKCJkaXYuRFRTX0xvYWRpbmciLGEuZG9tLnNjcm9sbGVyLnBhcmVudE5vZGUpLnJlbW92ZSgpO2EuZG9tLnRhYmxlLnN0eWxlLnBvc2l0aW9uPSIiO2EuZG9tLnRhYmxlLnN0eWxlLnRvcD0iIjthLmRvbS50YWJsZS5zdHlsZS5sZWZ0PSIifSl9ZWxzZSB0aGlzLnMuZHQub0FwaS5fZm5Mb2codGhpcy5zLmR0LAowLCJQYWdpbmF0aW9uIG11c3QgYmUgZW5hYmxlZCBmb3IgU2Nyb2xsZXIiKX0sX2NhbGNSb3dIZWlnaHQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnMuZHQsYj1hLm5UYWJsZSxjPWIuY2xvbmVOb2RlKCExKSxkPWUoIjx0Ym9keS8+IikuYXBwZW5kVG8oYyksZj1lKCc8ZGl2IGNsYXNzPSInK2Eub0NsYXNzZXMuc1dyYXBwZXIrJyBEVFMiPjxkaXYgY2xhc3M9IicrYS5vQ2xhc3Nlcy5zU2Nyb2xsV3JhcHBlcisnIj48ZGl2IGNsYXNzPSInK2Eub0NsYXNzZXMuc1Njcm9sbEJvZHkrJyI+PC9kaXY+PC9kaXY+PC9kaXY+Jyk7ZSgidGJvZHkgdHI6bHQoNCkiLGIpLmNsb25lKCkuYXBwZW5kVG8oZCk7dmFyIG09ZSgidHIiLGQpLmxlbmd0aDtpZigxPT09bSlkLnByZXBlbmQoIjx0cj48dGQ+JiMxNjA7PC90ZD48L3RyPiIpLGQuYXBwZW5kKCI8dHI+PHRkPiYjMTYwOzwvdGQ+PC90cj4iKTtlbHNlIGZvcig7Mz5tO20rKylkLmFwcGVuZCgiPHRyPjx0ZD4mIzE2MDs8L3RkPjwvdHI+Iik7ZSgiZGl2LiIrCmEub0NsYXNzZXMuc1Njcm9sbEJvZHksZikuYXBwZW5kKGMpO2E9dGhpcy5zLmR0Lm5Ib2xkaW5nfHxiLnBhcmVudE5vZGU7ZShhKS5pcygiOnZpc2libGUiKXx8KGE9ImJvZHkiKTtmLmFwcGVuZFRvKGEpO3RoaXMucy5oZWlnaHRzLnJvdz1lKCJ0ciIsZCkuZXEoMSkub3V0ZXJIZWlnaHQoKTtmLnJlbW92ZSgpfSxfZHJhdzpmdW5jdGlvbigpe3ZhciBhPXRoaXMsYj10aGlzLnMuaGVpZ2h0cyxjPXRoaXMuZG9tLnNjcm9sbGVyLnNjcm9sbFRvcCxkPWUodGhpcy5zLmR0Lm5UYWJsZSkuaGVpZ2h0KCksZj10aGlzLnMuZHQuX2lEaXNwbGF5U3RhcnQsbT10aGlzLnMuZHQuX2lEaXNwbGF5TGVuZ3RoLGg9dGhpcy5zLmR0LmZuUmVjb3Jkc0Rpc3BsYXkoKTt0aGlzLnMuc2tpcD0hMDshdGhpcy5zLmR0LmJTb3J0ZWQmJiF0aGlzLnMuZHQuYkZpbHRlcmVkfHwwIT09Znx8dGhpcy5zLmR0Ll9kcmF3SG9sZHx8KHRoaXMucy50b3BSb3dGbG9hdD0wKTtjPSJqdW1wIj09PXRoaXMucy5zY3JvbGxUeXBlPwp0aGlzLl9kb21haW4oInZpcnR1YWxUb1BoeXNpY2FsIix0aGlzLnMudG9wUm93RmxvYXQqYi5yb3cpOmM7dGhpcy5zLmJhc2VTY3JvbGxUb3A9Yzt0aGlzLnMuYmFzZVJvd1RvcD10aGlzLnMudG9wUm93RmxvYXQ7dmFyIGc9Yy0odGhpcy5zLnRvcFJvd0Zsb2F0LWYpKmIucm93OzA9PT1mP2c9MDpmK20+PWgmJihnPWIuc2Nyb2xsLWQpO3RoaXMuZG9tLnRhYmxlLnN0eWxlLnRvcD1nKyJweCI7dGhpcy5zLnRhYmxlVG9wPWc7dGhpcy5zLnRhYmxlQm90dG9tPWQrdGhpcy5zLnRhYmxlVG9wO2Q9KGMtdGhpcy5zLnRhYmxlVG9wKSp0aGlzLnMuYm91bmRhcnlTY2FsZTt0aGlzLnMucmVkcmF3VG9wPWMtZDt0aGlzLnMucmVkcmF3Qm90dG9tPWMrZD5iLnNjcm9sbC1iLnZpZXdwb3J0LWIucm93P2Iuc2Nyb2xsLWIudmlld3BvcnQtYi5yb3c6YytkO3RoaXMucy5za2lwPSExO3RoaXMucy5kdC5vRmVhdHVyZXMuYlN0YXRlU2F2ZSYmbnVsbCE9PXRoaXMucy5kdC5vTG9hZGVkU3RhdGUmJiJ1bmRlZmluZWQiIT0KdHlwZW9mIHRoaXMucy5kdC5vTG9hZGVkU3RhdGUuaVNjcm9sbGVyPygoYz0hdGhpcy5zLmR0LnNBamF4U291cmNlJiYhYS5zLmR0LmFqYXh8fHRoaXMucy5kdC5vRmVhdHVyZXMuYlNlcnZlclNpZGU/ITE6ITApJiYyPT10aGlzLnMuZHQuaURyYXd8fCFjJiYxPT10aGlzLnMuZHQuaURyYXcpJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZShhLmRvbS5zY3JvbGxlcikuc2Nyb2xsVG9wKGEucy5kdC5vTG9hZGVkU3RhdGUuaVNjcm9sbGVyKTthLnMucmVkcmF3VG9wPWEucy5kdC5vTG9hZGVkU3RhdGUuaVNjcm9sbGVyLWIudmlld3BvcnQvMjtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5zLmluZ25vcmVTY3JvbGw9ITF9LDApfSwwKTphLnMuaW5nbm9yZVNjcm9sbD0hMTt0aGlzLnMuZHQub0ZlYXR1cmVzLmJJbmZvJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5faW5mby5jYWxsKGEpfSwwKTt0aGlzLmRvbS5sb2FkZXImJnRoaXMucy5sb2FkZXJWaXNpYmxlJiYodGhpcy5kb20ubG9hZGVyLmNzcygiZGlzcGxheSIsCiJub25lIiksdGhpcy5zLmxvYWRlclZpc2libGU9ITEpfSxfZG9tYWluOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5zLmhlaWdodHM7aWYoYy52aXJ0dWFsPT09Yy5zY3JvbGx8fDFFND5iKXJldHVybiBiO2lmKCJ2aXJ0dWFsVG9QaHlzaWNhbCI9PT1hJiZiPj1jLnZpcnR1YWwtMUU0KXJldHVybiBhPWMudmlydHVhbC1iLGMuc2Nyb2xsLWE7aWYoInBoeXNpY2FsVG9WaXJ0dWFsIj09PWEmJmI+PWMuc2Nyb2xsLTFFNClyZXR1cm4gYT1jLnNjcm9sbC1iLGMudmlydHVhbC1hO2M9KGMudmlydHVhbC0xRTQtMUU0KS8oYy5zY3JvbGwtMUU0LTFFNCk7dmFyIGQ9MUU0LTFFNCpjO3JldHVybiJ2aXJ0dWFsVG9QaHlzaWNhbCI9PT1hPyhiLWQpL2M6YypiK2R9LF9pbmZvOmZ1bmN0aW9uKCl7aWYodGhpcy5zLmR0Lm9GZWF0dXJlcy5iSW5mbyl7dmFyIGE9dGhpcy5zLmR0LGI9YS5vTGFuZ3VhZ2UsYz10aGlzLmRvbS5zY3JvbGxlci5zY3JvbGxUb3AsZD1NYXRoLmZsb29yKHRoaXMucGl4ZWxzVG9Sb3coYywKITEsdGhpcy5zLmFuaSkrMSksZj1hLmZuUmVjb3Jkc1RvdGFsKCksZz1hLmZuUmVjb3Jkc0Rpc3BsYXkoKTtjPU1hdGguY2VpbCh0aGlzLnBpeGVsc1RvUm93KGMrdGhpcy5zLmhlaWdodHMudmlld3BvcnQsITEsdGhpcy5zLmFuaSkpO2M9ZzxjP2c6Yzt2YXIgaD1hLmZuRm9ybWF0TnVtYmVyKGQpLGs9YS5mbkZvcm1hdE51bWJlcihjKSxsPWEuZm5Gb3JtYXROdW1iZXIoZiksbj1hLmZuRm9ybWF0TnVtYmVyKGcpO2g9MD09PWEuZm5SZWNvcmRzRGlzcGxheSgpJiZhLmZuUmVjb3Jkc0Rpc3BsYXkoKT09YS5mblJlY29yZHNUb3RhbCgpP2Iuc0luZm9FbXB0eStiLnNJbmZvUG9zdEZpeDowPT09YS5mblJlY29yZHNEaXNwbGF5KCk/Yi5zSW5mb0VtcHR5KyIgIitiLnNJbmZvRmlsdGVyZWQucmVwbGFjZSgiX01BWF8iLGwpK2Iuc0luZm9Qb3N0Rml4OmEuZm5SZWNvcmRzRGlzcGxheSgpPT1hLmZuUmVjb3Jkc1RvdGFsKCk/Yi5zSW5mby5yZXBsYWNlKCJfU1RBUlRfIixoKS5yZXBsYWNlKCJfRU5EXyIsCmspLnJlcGxhY2UoIl9NQVhfIixsKS5yZXBsYWNlKCJfVE9UQUxfIixuKStiLnNJbmZvUG9zdEZpeDpiLnNJbmZvLnJlcGxhY2UoIl9TVEFSVF8iLGgpLnJlcGxhY2UoIl9FTkRfIixrKS5yZXBsYWNlKCJfTUFYXyIsbCkucmVwbGFjZSgiX1RPVEFMXyIsbikrIiAiK2Iuc0luZm9GaWx0ZXJlZC5yZXBsYWNlKCJfTUFYXyIsYS5mbkZvcm1hdE51bWJlcihhLmZuUmVjb3Jkc1RvdGFsKCkpKStiLnNJbmZvUG9zdEZpeDsoYj1iLmZuSW5mb0NhbGxiYWNrKSYmKGg9Yi5jYWxsKGEub0luc3RhbmNlLGEsZCxjLGYsZyxoKSk7ZD1hLmFhbkZlYXR1cmVzLmk7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBkKWZvcihmPTAsZz1kLmxlbmd0aDtmPGc7ZisrKWUoZFtmXSkuaHRtbChoKTtlKGEublRhYmxlKS50cmlnZ2VySGFuZGxlcigiaW5mby5kdCIpfX0sX3BhcnNlSGVpZ2h0OmZ1bmN0aW9uKGEpe3ZhciBiLGM9L14oWystXT8oPzpcZCsoPzpcLlxkKyk/fFwuXGQrKSkocHh8ZW18cmVtfHZoKSQvLmV4ZWMoYSk7CmlmKG51bGw9PT1jKXJldHVybiAwO2E9cGFyc2VGbG9hdChjWzFdKTtjPWNbMl07InB4Ij09PWM/Yj1hOiJ2aCI9PT1jP2I9YS8xMDAqZShoKS5oZWlnaHQoKToicmVtIj09PWM/Yj1hKnBhcnNlRmxvYXQoZSgiOnJvb3QiKS5jc3MoImZvbnQtc2l6ZSIpKToiZW0iPT09YyYmKGI9YSpwYXJzZUZsb2F0KGUoImJvZHkiKS5jc3MoImZvbnQtc2l6ZSIpKSk7cmV0dXJuIGI/YjowfSxfc2Nyb2xsOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPXRoaXMucy5oZWlnaHRzLGM9dGhpcy5kb20uc2Nyb2xsZXIuc2Nyb2xsVG9wO2lmKCF0aGlzLnMuc2tpcCYmIXRoaXMucy5pbmdub3JlU2Nyb2xsJiZjIT09dGhpcy5zLmxhc3RTY3JvbGxUb3ApaWYodGhpcy5zLmR0LmJGaWx0ZXJlZHx8dGhpcy5zLmR0LmJTb3J0ZWQpdGhpcy5zLmxhc3RTY3JvbGxUb3A9MDtlbHNle3RoaXMuX2luZm8oKTtjbGVhclRpbWVvdXQodGhpcy5zLnN0YXRlVE8pO3RoaXMucy5zdGF0ZVRPPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthLnMuZHRBcGkuc3RhdGUuc2F2ZSgpfSwKMjUwKTt0aGlzLnMuc2Nyb2xsVHlwZT1NYXRoLmFicyhjLXRoaXMucy5sYXN0U2Nyb2xsVG9wKT5iLnZpZXdwb3J0PyJqdW1wIjoiY29udCI7dGhpcy5zLnRvcFJvd0Zsb2F0PSJjb250Ij09PXRoaXMucy5zY3JvbGxUeXBlP3RoaXMucGl4ZWxzVG9Sb3coYywhMSwhMSk6dGhpcy5fZG9tYWluKCJwaHlzaWNhbFRvVmlydHVhbCIsYykvYi5yb3c7MD50aGlzLnMudG9wUm93RmxvYXQmJih0aGlzLnMudG9wUm93RmxvYXQ9MCk7aWYodGhpcy5zLmZvcmNlUmVwb3NpdGlvbnx8Yzx0aGlzLnMucmVkcmF3VG9wfHxjPnRoaXMucy5yZWRyYXdCb3R0b20pe3ZhciBkPU1hdGguY2VpbCgodGhpcy5zLmRpc3BsYXlCdWZmZXItMSkvMip0aGlzLnMudmlld3BvcnRSb3dzKTt2YXIgZj1wYXJzZUludCh0aGlzLnMudG9wUm93RmxvYXQsMTApLWQ7dGhpcy5zLmZvcmNlUmVwb3NpdGlvbj0hMTswPj1mP2Y9MDpmK3RoaXMucy5kdC5faURpc3BsYXlMZW5ndGg+dGhpcy5zLmR0LmZuUmVjb3Jkc0Rpc3BsYXkoKT8KKGY9dGhpcy5zLmR0LmZuUmVjb3Jkc0Rpc3BsYXkoKS10aGlzLnMuZHQuX2lEaXNwbGF5TGVuZ3RoLDA+ZiYmKGY9MCkpOjAhPT1mJTImJmYrKztmIT10aGlzLnMuZHQuX2lEaXNwbGF5U3RhcnQmJih0aGlzLnMudGFibGVUb3A9ZSh0aGlzLnMuZHQublRhYmxlKS5vZmZzZXQoKS50b3AsdGhpcy5zLnRhYmxlQm90dG9tPWUodGhpcy5zLmR0Lm5UYWJsZSkuaGVpZ2h0KCkrdGhpcy5zLnRhYmxlVG9wLGQ9ZnVuY3Rpb24oKXtudWxsPT09YS5zLnNjcm9sbERyYXdSZXEmJihhLnMuc2Nyb2xsRHJhd1JlcT1jKTthLnMuZHQuX2lEaXNwbGF5U3RhcnQ9ZjthLnMuZHQub0FwaS5fZm5EcmF3KGEucy5kdCl9LHRoaXMucy5kdC5vRmVhdHVyZXMuYlNlcnZlclNpZGU/KGNsZWFyVGltZW91dCh0aGlzLnMuZHJhd1RPKSx0aGlzLnMuZHJhd1RPPXNldFRpbWVvdXQoZCx0aGlzLnMuc2VydmVyV2FpdCkpOmQoKSx0aGlzLmRvbS5sb2FkZXImJiF0aGlzLnMubG9hZGVyVmlzaWJsZSYmKHRoaXMuZG9tLmxvYWRlci5jc3MoImRpc3BsYXkiLAoiYmxvY2siKSx0aGlzLnMubG9hZGVyVmlzaWJsZT0hMCkpfWVsc2UgdGhpcy5zLnRvcFJvd0Zsb2F0PXRoaXMucGl4ZWxzVG9Sb3coYywhMSwhMCk7dGhpcy5zLmxhc3RTY3JvbGxUb3A9Yzt0aGlzLnMuc3RhdGVTYXZlVGhyb3R0bGUoKTsianVtcCI9PT10aGlzLnMuc2Nyb2xsVHlwZSYmdGhpcy5zLm1vdXNlZG93biYmdGhpcy5kb20ubGFiZWwuaHRtbCh0aGlzLnMuZHQuZm5Gb3JtYXROdW1iZXIocGFyc2VJbnQodGhpcy5zLnRvcFJvd0Zsb2F0LDEwKSsxKSkuY3NzKCJ0b3AiLGMrYypiLmxhYmVsRmFjdG9yKS5jc3MoImRpc3BsYXkiLCJibG9jayIpfX0sX3Njcm9sbEZvcmNlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zLmhlaWdodHM7YS52aXJ0dWFsPWEucm93KnRoaXMucy5kdC5mblJlY29yZHNEaXNwbGF5KCk7YS5zY3JvbGw9YS52aXJ0dWFsOzFFNjxhLnNjcm9sbCYmKGEuc2Nyb2xsPTFFNik7dGhpcy5kb20uZm9yY2Uuc3R5bGUuaGVpZ2h0PWEuc2Nyb2xsPnRoaXMucy5oZWlnaHRzLnJvdz8KYS5zY3JvbGwrInB4Ijp0aGlzLnMuaGVpZ2h0cy5yb3crInB4In19KTtnLmRlZmF1bHRzPXtib3VuZGFyeVNjYWxlOi41LGRpc3BsYXlCdWZmZXI6OSxsb2FkaW5nSW5kaWNhdG9yOiExLHJvd0hlaWdodDoiYXV0byIsc2VydmVyV2FpdDoyMDB9O2cub0RlZmF1bHRzPWcuZGVmYXVsdHM7Zy52ZXJzaW9uPSIyLjAuMSI7ZShrKS5vbigicHJlSW5pdC5kdC5kdHNjcm9sbGVyIixmdW5jdGlvbihhLGIpe2lmKCJkdCI9PT1hLm5hbWVzcGFjZSl7YT1iLm9Jbml0LnNjcm9sbGVyO3ZhciBjPXAuZGVmYXVsdHMuc2Nyb2xsZXI7aWYoYXx8YyljPWUuZXh0ZW5kKHt9LGEsYyksITEhPT1hJiZuZXcgZyhiLGMpfX0pO2UuZm4uZGF0YVRhYmxlLlNjcm9sbGVyPWc7ZS5mbi5EYXRhVGFibGUuU2Nyb2xsZXI9Zzt2YXIgbD1lLmZuLmRhdGFUYWJsZS5BcGk7bC5yZWdpc3Rlcigic2Nyb2xsZXIoKSIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pO2wucmVnaXN0ZXIoInNjcm9sbGVyKCkucm93VG9QaXhlbHMoKSIsCmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmNvbnRleHQ7aWYoZC5sZW5ndGgmJmRbMF0ub1Njcm9sbGVyKXJldHVybiBkWzBdLm9TY3JvbGxlci5yb3dUb1BpeGVscyhhLGIsYyl9KTtsLnJlZ2lzdGVyKCJzY3JvbGxlcigpLnBpeGVsc1RvUm93KCkiLGZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmNvbnRleHQ7aWYoZC5sZW5ndGgmJmRbMF0ub1Njcm9sbGVyKXJldHVybiBkWzBdLm9TY3JvbGxlci5waXhlbHNUb1JvdyhhLGIsYyl9KTtsLnJlZ2lzdGVyKFsic2Nyb2xsZXIoKS5zY3JvbGxUb1JvdygpIiwic2Nyb2xsZXIudG9Qb3NpdGlvbigpIl0sZnVuY3Rpb24oYSxiKXt0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYyl7Yy5vU2Nyb2xsZXImJmMub1Njcm9sbGVyLnNjcm9sbFRvUm93KGEsYil9KTtyZXR1cm4gdGhpc30pO2wucmVnaXN0ZXIoInJvdygpLnNjcm9sbFRvKCkiLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7dGhpcy5pdGVyYXRvcigicm93IixmdW5jdGlvbihjLApkKXtjLm9TY3JvbGxlciYmKGQ9Yi5yb3dzKHtvcmRlcjoiYXBwbGllZCIsc2VhcmNoOiJhcHBsaWVkIn0pLmluZGV4ZXMoKS5pbmRleE9mKGQpLGMub1Njcm9sbGVyLnNjcm9sbFRvUm93KGQsYSkpfSk7cmV0dXJuIHRoaXN9KTtsLnJlZ2lzdGVyKCJzY3JvbGxlci5tZWFzdXJlKCkiLGZ1bmN0aW9uKGEpe3RoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihiKXtiLm9TY3JvbGxlciYmYi5vU2Nyb2xsZXIubWVhc3VyZShhKX0pO3JldHVybiB0aGlzfSk7bC5yZWdpc3Rlcigic2Nyb2xsZXIucGFnZSgpIixmdW5jdGlvbigpe3ZhciBhPXRoaXMuY29udGV4dDtpZihhLmxlbmd0aCYmYVswXS5vU2Nyb2xsZXIpcmV0dXJuIGFbMF0ub1Njcm9sbGVyLnBhZ2VJbmZvKCl9KTtyZXR1cm4gZ30pOwoKCi8qIQogU2VhcmNoUGFuZXMgMS4wLjEKIDIwMTktMjAyMCBTcHJ5TWVkaWEgTHRkIC0gZGF0YXRhYmxlcy5uZXQvbGljZW5zZQoqLwp2YXIgJGpzY29tcD0kanNjb21wfHx7fTskanNjb21wLnNjb3BlPXt9OyRqc2NvbXAuZ2V0R2xvYmFsPWZ1bmN0aW9uKGIpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3c9PT1iP2I6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWwmJm51bGwhPWdsb2JhbD9nbG9iYWw6Yn07JGpzY29tcC5nbG9iYWw9JGpzY29tcC5nZXRHbG9iYWwodGhpcyk7JGpzY29tcC5jaGVja0VzNkNvbmZvcm1hbmNlVmlhUHJveHk9ZnVuY3Rpb24oKXt0cnl7dmFyIGI9e30sbT1PYmplY3QuY3JlYXRlKG5ldyAkanNjb21wLmdsb2JhbC5Qcm94eShiLHtnZXQ6ZnVuY3Rpb24oayxoLGYpe3JldHVybiBrPT1iJiYicSI9PWgmJmY9PW19fSkpO3JldHVybiEwPT09bS5xfWNhdGNoKGspe3JldHVybiExfX07JGpzY29tcC5VU0VfUFJPWFlfRk9SX0VTNl9DT05GT1JNQU5DRV9DSEVDS1M9ITE7CiRqc2NvbXAuRVM2X0NPTkZPUk1BTkNFPSRqc2NvbXAuVVNFX1BST1hZX0ZPUl9FUzZfQ09ORk9STUFOQ0VfQ0hFQ0tTJiYkanNjb21wLmNoZWNrRXM2Q29uZm9ybWFuY2VWaWFQcm94eSgpOyRqc2NvbXAuYXJyYXlJdGVyYXRvckltcGw9ZnVuY3Rpb24oYil7dmFyIG09MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbTxiLmxlbmd0aD97ZG9uZTohMSx2YWx1ZTpiW20rK119Ontkb25lOiEwfX19OyRqc2NvbXAuYXJyYXlJdGVyYXRvcj1mdW5jdGlvbihiKXtyZXR1cm57bmV4dDokanNjb21wLmFycmF5SXRlcmF0b3JJbXBsKGIpfX07JGpzY29tcC5BU1NVTUVfRVM1PSExOyRqc2NvbXAuQVNTVU1FX05PX05BVElWRV9NQVA9ITE7JGpzY29tcC5BU1NVTUVfTk9fTkFUSVZFX1NFVD0hMTskanNjb21wLlNJTVBMRV9GUk9VTkRfUE9MWUZJTEw9ITE7CiRqc2NvbXAuZGVmaW5lUHJvcGVydHk9JGpzY29tcC5BU1NVTUVfRVM1fHwiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnRpZXM/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGIsbSxrKXtiIT1BcnJheS5wcm90b3R5cGUmJmIhPU9iamVjdC5wcm90b3R5cGUmJihiW21dPWsudmFsdWUpfTskanNjb21wLlNZTUJPTF9QUkVGSVg9ImpzY29tcF9zeW1ib2xfIjskanNjb21wLmluaXRTeW1ib2w9ZnVuY3Rpb24oKXskanNjb21wLmluaXRTeW1ib2w9ZnVuY3Rpb24oKXt9OyRqc2NvbXAuZ2xvYmFsLlN5bWJvbHx8KCRqc2NvbXAuZ2xvYmFsLlN5bWJvbD0kanNjb21wLlN5bWJvbCl9OyRqc2NvbXAuU3ltYm9sQ2xhc3M9ZnVuY3Rpb24oYixtKXt0aGlzLiRqc2NvbXAkc3ltYm9sJGlkXz1iOyRqc2NvbXAuZGVmaW5lUHJvcGVydHkodGhpcywiZGVzY3JpcHRpb24iLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bX0pfTsKJGpzY29tcC5TeW1ib2xDbGFzcy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kanNjb21wJHN5bWJvbCRpZF99OyRqc2NvbXAuU3ltYm9sPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihrKXtpZih0aGlzIGluc3RhbmNlb2YgYil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IiKTtyZXR1cm4gbmV3ICRqc2NvbXAuU3ltYm9sQ2xhc3MoJGpzY29tcC5TWU1CT0xfUFJFRklYKyhrfHwiIikrIl8iK20rKyxrKX12YXIgbT0wO3JldHVybiBifSgpOwokanNjb21wLmluaXRTeW1ib2xJdGVyYXRvcj1mdW5jdGlvbigpeyRqc2NvbXAuaW5pdFN5bWJvbCgpO3ZhciBiPSRqc2NvbXAuZ2xvYmFsLlN5bWJvbC5pdGVyYXRvcjtifHwoYj0kanNjb21wLmdsb2JhbC5TeW1ib2wuaXRlcmF0b3I9JGpzY29tcC5nbG9iYWwuU3ltYm9sKCJTeW1ib2wuaXRlcmF0b3IiKSk7ImZ1bmN0aW9uIiE9dHlwZW9mIEFycmF5LnByb3RvdHlwZVtiXSYmJGpzY29tcC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsYix7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuICRqc2NvbXAuaXRlcmF0b3JQcm90b3R5cGUoJGpzY29tcC5hcnJheUl0ZXJhdG9ySW1wbCh0aGlzKSl9fSk7JGpzY29tcC5pbml0U3ltYm9sSXRlcmF0b3I9ZnVuY3Rpb24oKXt9fTsKJGpzY29tcC5pbml0U3ltYm9sQXN5bmNJdGVyYXRvcj1mdW5jdGlvbigpeyRqc2NvbXAuaW5pdFN5bWJvbCgpO3ZhciBiPSRqc2NvbXAuZ2xvYmFsLlN5bWJvbC5hc3luY0l0ZXJhdG9yO2J8fChiPSRqc2NvbXAuZ2xvYmFsLlN5bWJvbC5hc3luY0l0ZXJhdG9yPSRqc2NvbXAuZ2xvYmFsLlN5bWJvbCgiU3ltYm9sLmFzeW5jSXRlcmF0b3IiKSk7JGpzY29tcC5pbml0U3ltYm9sQXN5bmNJdGVyYXRvcj1mdW5jdGlvbigpe319OyRqc2NvbXAuaXRlcmF0b3JQcm90b3R5cGU9ZnVuY3Rpb24oYil7JGpzY29tcC5pbml0U3ltYm9sSXRlcmF0b3IoKTtiPXtuZXh0OmJ9O2JbJGpzY29tcC5nbG9iYWwuU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtyZXR1cm4gYn07CiRqc2NvbXAubWFrZUl0ZXJhdG9yPWZ1bmN0aW9uKGIpe3ZhciBtPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3ImJmJbU3ltYm9sLml0ZXJhdG9yXTtyZXR1cm4gbT9tLmNhbGwoYik6JGpzY29tcC5hcnJheUl0ZXJhdG9yKGIpfTskanNjb21wLm93bnM9ZnVuY3Rpb24oYixtKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsbSl9OyRqc2NvbXAucG9seWZpbGw9ZnVuY3Rpb24oYixtLGssaCl7aWYobSl7az0kanNjb21wLmdsb2JhbDtiPWIuc3BsaXQoIi4iKTtmb3IoaD0wO2g8Yi5sZW5ndGgtMTtoKyspe3ZhciBmPWJbaF07ZiBpbiBrfHwoa1tmXT17fSk7az1rW2ZdfWI9YltiLmxlbmd0aC0xXTtoPWtbYl07bT1tKGgpO20hPWgmJm51bGwhPW0mJiRqc2NvbXAuZGVmaW5lUHJvcGVydHkoayxiLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bX0pfX07CiRqc2NvbXAucG9seWZpbGwoIldlYWtNYXAiLGZ1bmN0aW9uKGIpe2Z1bmN0aW9uIG0oKXtpZighYnx8IU9iamVjdC5zZWFsKXJldHVybiExO3RyeXt2YXIgYT1PYmplY3Quc2VhbCh7fSksZT1PYmplY3Quc2VhbCh7fSksZD1uZXcgYihbW2EsMl0sW2UsM11dKTtpZigyIT1kLmdldChhKXx8MyE9ZC5nZXQoZSkpcmV0dXJuITE7ZC5kZWxldGUoYSk7ZC5zZXQoZSw0KTtyZXR1cm4hZC5oYXMoYSkmJjQ9PWQuZ2V0KGUpfWNhdGNoKG4pe3JldHVybiExfX1mdW5jdGlvbiBrKCl7fWZ1bmN0aW9uIGgoYyl7aWYoISRqc2NvbXAub3ducyhjLGEpKXt2YXIgZT1uZXcgazskanNjb21wLmRlZmluZVByb3BlcnR5KGMsYSx7dmFsdWU6ZX0pfX1mdW5jdGlvbiBmKGEpe3ZhciBjPU9iamVjdFthXTtjJiYoT2JqZWN0W2FdPWZ1bmN0aW9uKGEpe2lmKGEgaW5zdGFuY2VvZiBrKXJldHVybiBhO2goYSk7cmV0dXJuIGMoYSl9KX1pZigkanNjb21wLlVTRV9QUk9YWV9GT1JfRVM2X0NPTkZPUk1BTkNFX0NIRUNLUyl7aWYoYiYmCiRqc2NvbXAuRVM2X0NPTkZPUk1BTkNFKXJldHVybiBifWVsc2UgaWYobSgpKXJldHVybiBiO3ZhciBhPSIkanNjb21wX2hpZGRlbl8iK01hdGgucmFuZG9tKCk7ZigiZnJlZXplIik7ZigicHJldmVudEV4dGVuc2lvbnMiKTtmKCJzZWFsIik7dmFyIGQ9MCxnPWZ1bmN0aW9uKGEpe3RoaXMuaWRfPShkKz1NYXRoLnJhbmRvbSgpKzEpLnRvU3RyaW5nKCk7aWYoYSl7YT0kanNjb21wLm1ha2VJdGVyYXRvcihhKTtmb3IodmFyIGM7IShjPWEubmV4dCgpKS5kb25lOyljPWMudmFsdWUsdGhpcy5zZXQoY1swXSxjWzFdKX19O2cucHJvdG90eXBlLnNldD1mdW5jdGlvbihjLGUpe2goYyk7aWYoISRqc2NvbXAub3ducyhjLGEpKXRocm93IEVycm9yKCJXZWFrTWFwIGtleSBmYWlsOiAiK2MpO2NbYV1bdGhpcy5pZF9dPWU7cmV0dXJuIHRoaXN9O2cucHJvdG90eXBlLmdldD1mdW5jdGlvbihjKXtyZXR1cm4gJGpzY29tcC5vd25zKGMsYSk/Y1thXVt0aGlzLmlkX106dm9pZCAwfTtnLnByb3RvdHlwZS5oYXM9CmZ1bmN0aW9uKGMpe3JldHVybiAkanNjb21wLm93bnMoYyxhKSYmJGpzY29tcC5vd25zKGNbYV0sdGhpcy5pZF8pfTtnLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oYyl7cmV0dXJuICRqc2NvbXAub3ducyhjLGEpJiYkanNjb21wLm93bnMoY1thXSx0aGlzLmlkXyk/ZGVsZXRlIGNbYV1bdGhpcy5pZF9dOiExfTtyZXR1cm4gZ30sImVzNiIsImVzMyIpOyRqc2NvbXAuTWFwRW50cnk9ZnVuY3Rpb24oKXt9OwokanNjb21wLnBvbHlmaWxsKCJNYXAiLGZ1bmN0aW9uKGIpe2Z1bmN0aW9uIG0oKXtpZigkanNjb21wLkFTU1VNRV9OT19OQVRJVkVfTUFQfHwhYnx8ImZ1bmN0aW9uIiE9dHlwZW9mIGJ8fCFiLnByb3RvdHlwZS5lbnRyaWVzfHwiZnVuY3Rpb24iIT10eXBlb2YgT2JqZWN0LnNlYWwpcmV0dXJuITE7dHJ5e3ZhciBhPU9iamVjdC5zZWFsKHt4OjR9KSxlPW5ldyBiKCRqc2NvbXAubWFrZUl0ZXJhdG9yKFtbYSwicyJdXSkpO2lmKCJzIiE9ZS5nZXQoYSl8fDEhPWUuc2l6ZXx8ZS5nZXQoe3g6NH0pfHxlLnNldCh7eDo0fSwidCIpIT1lfHwyIT1lLnNpemUpcmV0dXJuITE7dmFyIGQ9ZS5lbnRyaWVzKCksZz1kLm5leHQoKTtpZihnLmRvbmV8fGcudmFsdWVbMF0hPWF8fCJzIiE9Zy52YWx1ZVsxXSlyZXR1cm4hMTtnPWQubmV4dCgpO3JldHVybiBnLmRvbmV8fDQhPWcudmFsdWVbMF0ueHx8InQiIT1nLnZhbHVlWzFdfHwhZC5uZXh0KCkuZG9uZT8hMTohMH1jYXRjaChsKXtyZXR1cm4hMX19CmlmKCRqc2NvbXAuVVNFX1BST1hZX0ZPUl9FUzZfQ09ORk9STUFOQ0VfQ0hFQ0tTKXtpZihiJiYkanNjb21wLkVTNl9DT05GT1JNQU5DRSlyZXR1cm4gYn1lbHNlIGlmKG0oKSlyZXR1cm4gYjskanNjb21wLmluaXRTeW1ib2xJdGVyYXRvcigpO3ZhciBrPW5ldyBXZWFrTWFwLGg9ZnVuY3Rpb24oYSl7dGhpcy5kYXRhXz17fTt0aGlzLmhlYWRfPWQoKTt0aGlzLnNpemU9MDtpZihhKXthPSRqc2NvbXAubWFrZUl0ZXJhdG9yKGEpO2Zvcih2YXIgYzshKGM9YS5uZXh0KCkpLmRvbmU7KWM9Yy52YWx1ZSx0aGlzLnNldChjWzBdLGNbMV0pfX07aC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsZCl7YT0wPT09YT8wOmE7dmFyIGM9Zih0aGlzLGEpO2MubGlzdHx8KGMubGlzdD10aGlzLmRhdGFfW2MuaWRdPVtdKTtjLmVudHJ5P2MuZW50cnkudmFsdWU9ZDooYy5lbnRyeT17bmV4dDp0aGlzLmhlYWRfLHByZXZpb3VzOnRoaXMuaGVhZF8ucHJldmlvdXMsaGVhZDp0aGlzLmhlYWRfLGtleTphLAp2YWx1ZTpkfSxjLmxpc3QucHVzaChjLmVudHJ5KSx0aGlzLmhlYWRfLnByZXZpb3VzLm5leHQ9Yy5lbnRyeSx0aGlzLmhlYWRfLnByZXZpb3VzPWMuZW50cnksdGhpcy5zaXplKyspO3JldHVybiB0aGlzfTtoLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oYSl7YT1mKHRoaXMsYSk7cmV0dXJuIGEuZW50cnkmJmEubGlzdD8oYS5saXN0LnNwbGljZShhLmluZGV4LDEpLGEubGlzdC5sZW5ndGh8fGRlbGV0ZSB0aGlzLmRhdGFfW2EuaWRdLGEuZW50cnkucHJldmlvdXMubmV4dD1hLmVudHJ5Lm5leHQsYS5lbnRyeS5uZXh0LnByZXZpb3VzPWEuZW50cnkucHJldmlvdXMsYS5lbnRyeS5oZWFkPW51bGwsdGhpcy5zaXplLS0sITApOiExfTtoLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuZGF0YV89e307dGhpcy5oZWFkXz10aGlzLmhlYWRfLnByZXZpb3VzPWQoKTt0aGlzLnNpemU9MH07aC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGEpe3JldHVybiEhZih0aGlzLGEpLmVudHJ5fTsKaC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVybihhPWYodGhpcyxhKS5lbnRyeSkmJmEudmFsdWV9O2gucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLGZ1bmN0aW9uKGEpe3JldHVyblthLmtleSxhLnZhbHVlXX0pfTtoLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcyxmdW5jdGlvbihhKXtyZXR1cm4gYS5rZXl9KX07aC5wcm90b3R5cGUudmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcyxmdW5jdGlvbihhKXtyZXR1cm4gYS52YWx1ZX0pfTtoLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGEsZCl7Zm9yKHZhciBjPXRoaXMuZW50cmllcygpLGU7IShlPWMubmV4dCgpKS5kb25lOyllPWUudmFsdWUsYS5jYWxsKGQsZVsxXSxlWzBdLHRoaXMpfTtoLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWgucHJvdG90eXBlLmVudHJpZXM7dmFyIGY9ZnVuY3Rpb24oYSxkKXt2YXIgYzt2YXIgZT0oYz1kKSYmdHlwZW9mIGM7CiJvYmplY3QiPT1lfHwiZnVuY3Rpb24iPT1lP2suaGFzKGMpP2M9ay5nZXQoYyk6KGU9IiIrICsrZyxrLnNldChjLGUpLGM9ZSk6Yz0icF8iK2M7aWYoKGU9YS5kYXRhX1tjXSkmJiRqc2NvbXAub3ducyhhLmRhdGFfLGMpKWZvcihhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBmPWVbYV07aWYoZCE9PWQmJmYua2V5IT09Zi5rZXl8fGQ9PT1mLmtleSlyZXR1cm57aWQ6YyxsaXN0OmUsaW5kZXg6YSxlbnRyeTpmfX1yZXR1cm57aWQ6YyxsaXN0OmUsaW5kZXg6LTEsZW50cnk6dm9pZCAwfX0sYT1mdW5jdGlvbihhLGQpe3ZhciBjPWEuaGVhZF87cmV0dXJuICRqc2NvbXAuaXRlcmF0b3JQcm90b3R5cGUoZnVuY3Rpb24oKXtpZihjKXtmb3IoO2MuaGVhZCE9YS5oZWFkXzspYz1jLnByZXZpb3VzO2Zvcig7Yy5uZXh0IT1jLmhlYWQ7KXJldHVybiBjPWMubmV4dCx7ZG9uZTohMSx2YWx1ZTpkKGMpfTtjPW51bGx9cmV0dXJue2RvbmU6ITAsdmFsdWU6dm9pZCAwfX0pfSxkPWZ1bmN0aW9uKCl7dmFyIGE9Cnt9O3JldHVybiBhLnByZXZpb3VzPWEubmV4dD1hLmhlYWQ9YX0sZz0wO3JldHVybiBofSwiZXM2IiwiZXMzIik7JGpzY29tcC5maW5kSW50ZXJuYWw9ZnVuY3Rpb24oYixtLGspe2IgaW5zdGFuY2VvZiBTdHJpbmcmJihiPVN0cmluZyhiKSk7Zm9yKHZhciBoPWIubGVuZ3RoLGY9MDtmPGg7ZisrKXt2YXIgYT1iW2ZdO2lmKG0uY2FsbChrLGEsZixiKSlyZXR1cm57aTpmLHY6YX19cmV0dXJue2k6LTEsdjp2b2lkIDB9fTskanNjb21wLnBvbHlmaWxsKCJBcnJheS5wcm90b3R5cGUuZmluZCIsZnVuY3Rpb24oYil7cmV0dXJuIGI/YjpmdW5jdGlvbihiLGspe3JldHVybiAkanNjb21wLmZpbmRJbnRlcm5hbCh0aGlzLGIsaykudn19LCJlczYiLCJlczMiKTsKJGpzY29tcC5pdGVyYXRvckZyb21BcnJheT1mdW5jdGlvbihiLG0peyRqc2NvbXAuaW5pdFN5bWJvbEl0ZXJhdG9yKCk7YiBpbnN0YW5jZW9mIFN0cmluZyYmKGIrPSIiKTt2YXIgaz0wLGg9e25leHQ6ZnVuY3Rpb24oKXtpZihrPGIubGVuZ3RoKXt2YXIgZj1rKys7cmV0dXJue3ZhbHVlOm0oZixiW2ZdKSxkb25lOiExfX1oLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTohMCx2YWx1ZTp2b2lkIDB9fTtyZXR1cm4gaC5uZXh0KCl9fTtoW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gaH07cmV0dXJuIGh9OyRqc2NvbXAucG9seWZpbGwoIkFycmF5LnByb3RvdHlwZS5rZXlzIixmdW5jdGlvbihiKXtyZXR1cm4gYj9iOmZ1bmN0aW9uKCl7cmV0dXJuICRqc2NvbXAuaXRlcmF0b3JGcm9tQXJyYXkodGhpcyxmdW5jdGlvbihiKXtyZXR1cm4gYn0pfX0sImVzNiIsImVzMyIpOwokanNjb21wLnBvbHlmaWxsKCJBcnJheS5wcm90b3R5cGUuZmluZEluZGV4IixmdW5jdGlvbihiKXtyZXR1cm4gYj9iOmZ1bmN0aW9uKGIsayl7cmV0dXJuICRqc2NvbXAuZmluZEludGVybmFsKHRoaXMsYixrKS5pfX0sImVzNiIsImVzMyIpOwooZnVuY3Rpb24oKXt2YXIgYj0kLmZuLmRhdGFUYWJsZSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZihhLGQsZyxjLGUscil7dmFyIG49dGhpczt2b2lkIDA9PT1yJiYocj1udWxsKTtpZighYnx8IWIudmVyc2lvbkNoZWNrfHwhYi52ZXJzaW9uQ2hlY2soIjEuMTAuMCIpKXRocm93IEVycm9yKCJTZWFyY2hQYW5lIHJlcXVpcmVzIERhdGFUYWJsZXMgMS4xMCBvciBuZXdlciIpO2lmKCFiLnNlbGVjdCl0aHJvdyBFcnJvcigiU2VhcmNoUGFuZSByZXF1aXJlcyBTZWxlY3QiKTthPW5ldyBiLkFwaShhKTt0aGlzLmNsYXNzZXM9JC5leHRlbmQoITAse30sZi5jbGFzc2VzKTt0aGlzLmM9JC5leHRlbmQoITAse30sZi5kZWZhdWx0cyxkKTt0aGlzLmN1c3RvbVBhbmVTZXR0aW5ncz1yO3RoaXMucz17Y2FzY2FkZVJlZ2VuOiExLGNsZWFyaW5nOiExLGNvbE9wdHM6W10sZGVzZWxlY3Q6ITEsZGlzcGxheWVkOiExLGR0OmEsZHRQYW5lOnZvaWQgMCxmaWx0ZXJpbmdBY3RpdmU6ITEsaW5kZXg6ZywKaW5kZXhlczpbXSxsYXN0U2VsZWN0OiExLHJlZHJhdzohMSxyb3dEYXRhOnthcnJheUZpbHRlcjpbXSxhcnJheU9yaWdpbmFsOltdLGFycmF5VG90YWxzOltdLGJpbnM6e30sYmluc09yaWdpbmFsOnt9LGJpbnNUb3RhbDp7fSxmaWx0ZXJNYXA6bmV3IE1hcH0sc2VhcmNoRnVuY3Rpb246dm9pZCAwLHNlbGVjdFByZXNlbnQ6ITEsdXBkYXRpbmc6ITF9O2Q9YS5jb2x1bW5zKCkuZXEoMCkudG9BcnJheSgpLmxlbmd0aDt0aGlzLmNvbEV4aXN0cz10aGlzLnMuaW5kZXg8ZDt0aGlzLmMubGF5b3V0PWM7ZD1wYXJzZUludChjLnNwbGl0KCItIilbMV0sMTApO3RoaXMuZG9tPXtidXR0b25Hcm91cDokKCI8ZGl2Lz4iKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuYnV0dG9uR3JvdXApLGNsZWFyOiQoJzxidXR0b24gdHlwZT0iYnV0dG9uIj4mIzIxNTs8L2J1dHRvbj4nKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuZHVsbCkuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLnBhbmVCdXR0b24pLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5jbGVhckJ1dHRvbiksCmNvbnRhaW5lcjokKCI8ZGl2Lz4iKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuY29udGFpbmVyKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMubGF5b3V0Kyg3PmQ/YzpjLnNwbGl0KCItIilbMF0rIi02IikpLGNvdW50QnV0dG9uOiQoJzxidXR0b24gdHlwZT0iYnV0dG9uIj48L2J1dHRvbj4nKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMucGFuZUJ1dHRvbikuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLmNvdW50QnV0dG9uKSxkdFA6JCgiPHRhYmxlPjx0aGVhZD48dHI+PHRoPiIrKHRoaXMuY29sRXhpc3RzPyQoYS5jb2x1bW4odGhpcy5jb2xFeGlzdHM/dGhpcy5zLmluZGV4OjApLmhlYWRlcigpKS50ZXh0KCk6dGhpcy5jdXN0b21QYW5lU2V0dGluZ3MuaGVhZGVyfHwiQ3VzdG9tIFBhbmUiKSsiPC90aD48dGgvPjwvdHI+PC90aGVhZD48L3RhYmxlPiIpLGxvd2VyOiQoIjxkaXYvPiIpLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5zdWJSb3cyKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMubmFycm93QnV0dG9uKSwKbmFtZUJ1dHRvbjokKCc8YnV0dG9uIHR5cGU9ImJ1dHRvbiI+PC9idXR0b24+JykuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLnBhbmVCdXR0b24pLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5uYW1lQnV0dG9uKSxzZWFyY2hCb3g6JCgiPGlucHV0Lz4iKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMucGFuZUlucHV0QnV0dG9uKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuc2VhcmNoKSxzZWFyY2hCdXR0b246JCgnPGJ1dHRvbiB0eXBlID0gImJ1dHRvbiIgY2xhc3M9IicrdGhpcy5jbGFzc2VzLnNlYXJjaEljb24rJyI+PC9idXR0b24+JykuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLnBhbmVCdXR0b24pLHNlYXJjaENvbnQ6JCgiPGRpdi8+IikuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLnNlYXJjaENvbnQpLHNlYXJjaExhYmVsQ29udDokKCI8ZGl2Lz4iKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuc2VhcmNoTGFiZWxDb250KSx0b3BSb3c6JCgiPGRpdi8+IikuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLnRvcFJvdyksCnVwcGVyOiQoIjxkaXYvPiIpLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5zdWJSb3cxKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMubmFycm93U2VhcmNoKX07dGhpcy5zLmRpc3BsYXllZD0hMTthPXRoaXMucy5kdDt0aGlzLnNlbGVjdGlvbnM9W107dGhpcy5zLmNvbE9wdHM9dGhpcy5jb2xFeGlzdHM/dGhpcy5fZ2V0T3B0aW9ucygpOnRoaXMuX2dldEJvbnVzT3B0aW9ucygpO3ZhciBsPXRoaXMucy5jb2xPcHRzO2M9JCgnPGJ1dHRvbiB0eXBlPSJidXR0b24iPlg8L2J1dHRvbj4nKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMucGFuZUJ1dHRvbik7JChjKS50ZXh0KGEuaTE4bigic2VhcmNoUGFuZXMuY2xlYXJQYW5lIiwiWCIpKTt0aGlzLmRvbS5jb250YWluZXIuYWRkQ2xhc3MobC5jbGFzc05hbWUpO3RoaXMuZG9tLmNvbnRhaW5lci5hZGRDbGFzcyhudWxsIT09dGhpcy5jdXN0b21QYW5lU2V0dGluZ3MmJnZvaWQgMCE9PXRoaXMuY3VzdG9tUGFuZVNldHRpbmdzLmNsYXNzTmFtZT90aGlzLmN1c3RvbVBhbmVTZXR0aW5ncy5jbGFzc05hbWU6CiIiKTskKGUpLmFwcGVuZCh0aGlzLmRvbS5jb250YWluZXIpO3ZhciBxPWEudGFibGUoMCkubm9kZSgpO3RoaXMucy5zZWFyY2hGdW5jdGlvbj1mdW5jdGlvbihhLGMsZCxlKXtpZigwPT09bi5zZWxlY3Rpb25zLmxlbmd0aHx8YS5uVGFibGUhPT1xKXJldHVybiEwO2E9IiI7bi5jb2xFeGlzdHMmJihhPWNbbi5zLmluZGV4XSwiZmlsdGVyIiE9PWwub3J0aG9nb25hbC5maWx0ZXImJihhPW4ucy5yb3dEYXRhLmZpbHRlck1hcC5nZXQoZCksYSBpbnN0YW5jZW9mICQuZm4uZGF0YVRhYmxlLkFwaSYmKGE9YS50b0FycmF5KCkpKSk7cmV0dXJuIG4uX3NlYXJjaChhLGQpfTskLmZuLmRhdGFUYWJsZS5leHQuc2VhcmNoLnB1c2godGhpcy5zLnNlYXJjaEZ1bmN0aW9uKTtpZih0aGlzLmMuY2xlYXIpJChjKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7bi5kb20uY29udGFpbmVyLmZpbmQobi5jbGFzc2VzLnNlYXJjaCkuZWFjaChmdW5jdGlvbigpeyQodGhpcykudmFsKCIiKTskKHRoaXMpLnRyaWdnZXIoImlucHV0Iil9KTsKbi5jbGVhclBhbmUoKX0pO2Eub24oImRyYXcuZHRzcCIsZnVuY3Rpb24oKXtuLl9hZGp1c3RUb3BSb3coKX0pOyQod2luZG93KS5vbigicmVzaXplLmR0c3AiLGIudXRpbC50aHJvdHRsZShmdW5jdGlvbigpe24uX2FkanVzdFRvcFJvdygpfSkpO2Eub24oImNvbHVtbi1yZW9yZGVyLmR0c3AiLGZ1bmN0aW9uKGEsYyxkKXtuLnMuaW5kZXg9ZC5tYXBwaW5nW24ucy5pbmRleF19KTtyZXR1cm4gdGhpc31mLnByb3RvdHlwZS5jbGVhckRhdGE9ZnVuY3Rpb24oKXt0aGlzLnMucm93RGF0YT17YXJyYXlGaWx0ZXI6W10sYXJyYXlPcmlnaW5hbDpbXSxhcnJheVRvdGFsczpbXSxiaW5zOnt9LGJpbnNPcmlnaW5hbDp7fSxiaW5zVG90YWw6e30sZmlsdGVyTWFwOm5ldyBNYXB9fTtmLnByb3RvdHlwZS5jbGVhclBhbmU9ZnVuY3Rpb24oKXt0aGlzLnMuZHRQYW5lLnJvd3Moe3NlbGVjdGVkOiEwfSkuZGVzZWxlY3QoKTt0aGlzLnVwZGF0ZVRhYmxlKCk7cmV0dXJuIHRoaXN9O2YucHJvdG90eXBlLmRlc3Ryb3k9CmZ1bmN0aW9uKCl7JCh0aGlzLnMuZHRQYW5lKS5vZmYoIi5kdHNwIik7JCh0aGlzLnMuZHQpLm9mZigiLmR0c3AiKTskKHRoaXMuZG9tLm5hbWVCdXR0b24pLm9mZigiLmR0c3AiKTskKHRoaXMuZG9tLmNvdW50QnV0dG9uKS5vZmYoIi5kdHNwIik7JCh0aGlzLmRvbS5jbGVhcikub2ZmKCIuZHRzcCIpOyQodGhpcy5kb20uc2VhcmNoQnV0dG9uKS5vZmYoIi5kdHNwIik7JCh0aGlzLmRvbS5jb250YWluZXIpLnJlbW92ZSgpO2Zvcih2YXIgYT0kLmZuLmRhdGFUYWJsZS5leHQuc2VhcmNoLmluZGV4T2YodGhpcy5zLnNlYXJjaEZ1bmN0aW9uKTstMSE9PWE7KSQuZm4uZGF0YVRhYmxlLmV4dC5zZWFyY2guc3BsaWNlKGEsMSksYT0kLmZuLmRhdGFUYWJsZS5leHQuc2VhcmNoLmluZGV4T2YodGhpcy5zLnNlYXJjaEZ1bmN0aW9uKTt2b2lkIDAhPT10aGlzLnMuZHRQYW5lJiZ0aGlzLnMuZHRQYW5lLmRlc3Ryb3koKX07Zi5wcm90b3R5cGUuZ2V0UGFuZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PQp0aGlzLnMuZHRQYW5lP3RoaXMucy5kdFBhbmUucm93cyh7c2VsZWN0ZWQ6ITB9KS5kYXRhKCkudG9BcnJheSgpLmxlbmd0aDowfTtmLnByb3RvdHlwZS5yZWJ1aWxkUGFuZT1mdW5jdGlvbigpe3RoaXMuY2xlYXJEYXRhKCk7dm9pZCAwIT09dGhpcy5zLmR0UGFuZSYmdGhpcy5zLmR0UGFuZS5jbGVhcigpLmRlc3Ryb3koKTt0aGlzLmRvbS5jb250YWluZXIucmVtb3ZlQ2xhc3ModGhpcy5jbGFzc2VzLmhpZGRlbik7dGhpcy5zLmRpc3BsYXllZD0hMTt0aGlzLl9idWlsZFBhbmUoKTtyZXR1cm4gdGhpc307Zi5wcm90b3R5cGUucmVtb3ZlUGFuZT1mdW5jdGlvbigpe3RoaXMucy5kaXNwbGF5ZWQ9ITE7JCh0aGlzLmRvbS5jb250YWluZXIpLmhpZGUoKX07Zi5wcm90b3R5cGUuc2V0Q2FzY2FkZVJlZ2VuPWZ1bmN0aW9uKGEpe3RoaXMucy5jYXNjYWRlUmVnZW49YX07Zi5wcm90b3R5cGUuc2V0Q2xlYXI9ZnVuY3Rpb24oYSl7dGhpcy5zLmNsZWFyaW5nPWF9O2YucHJvdG90eXBlLnVwZGF0ZVBhbmU9CmZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEmJihhPSExKTt0aGlzLnMudXBkYXRpbmc9ITA7dGhpcy5fdXBkYXRlQ29tbW9uKGEpO3RoaXMucy51cGRhdGluZz0hMX07Zi5wcm90b3R5cGUudXBkYXRlVGFibGU9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGlvbnM9dGhpcy5zLmR0UGFuZS5yb3dzKHtzZWxlY3RlZDohMH0pLmRhdGEoKS50b0FycmF5KCk7dGhpcy5fc2VhcmNoRXh0cmFzKCk7KHRoaXMuYy5jYXNjYWRlUGFuZXN8fHRoaXMuYy52aWV3VG90YWwpJiZ0aGlzLnVwZGF0ZVBhbmUoKX07Zi5wcm90b3R5cGUuX2FkZE9wdGlvbj1mdW5jdGlvbihhLGQsZyxjLGUscil7aWYoQXJyYXkuaXNBcnJheShhKXx8YSBpbnN0YW5jZW9mIGIuQXBpKWlmKGEgaW5zdGFuY2VvZiBiLkFwaSYmKGE9YS50b0FycmF5KCksZD1kLnRvQXJyYXkoKSksYS5sZW5ndGg9PT1kLmxlbmd0aClmb3IodmFyIGY9MDtmPGEubGVuZ3RoO2YrKylyW2FbZl1dP3JbYVtmXV0rKzooclthW2ZdXT0xLGUucHVzaCh7ZGlzcGxheTpkW2ZdLApmaWx0ZXI6YVtmXSxzb3J0OmcsdHlwZTpjfSkpO2Vsc2UgdGhyb3cgRXJyb3IoImRpc3BsYXkgYW5kIGZpbHRlciBub3QgdGhlIHNhbWUgbGVuZ3RoIik7ZWxzZSJzdHJpbmciPT09dHlwZW9mIHRoaXMucy5jb2xPcHRzLm9ydGhvZ29uYWw/clthXT9yW2FdKys6KHJbYV09MSxlLnB1c2goe2Rpc3BsYXk6ZCxmaWx0ZXI6YSxzb3J0OmcsdHlwZTpjfSkpOmUucHVzaCh7ZGlzcGxheTpkLGZpbHRlcjphLHNvcnQ6Zyx0eXBlOmN9KX07Zi5wcm90b3R5cGUuX2FkZFJvdz1mdW5jdGlvbihhLGQsZyxjLGUsZil7Zm9yKHZhciByLGI9MCxxPXRoaXMucy5pbmRleGVzO2I8cS5sZW5ndGg7YisrKXt2YXIgcD1xW2JdO3AuZmlsdGVyPT09ZCYmKHI9cC5pbmRleCl9dm9pZCAwPT09ciYmKHI9dGhpcy5zLmluZGV4ZXMubGVuZ3RoLHRoaXMucy5pbmRleGVzLnB1c2goe2ZpbHRlcjpkLGluZGV4OnJ9KSk7cmV0dXJuIHRoaXMucy5kdFBhbmUucm93LmFkZCh7ZGlzcGxheToiIiE9PWE/YTp0aGlzLmMuZW1wdHlNZXNzYWdlLApmaWx0ZXI6ZCxpbmRleDpyLHNob3duOmcsc29ydDoiIiE9PWU/ZTp0aGlzLmMuZW1wdHlNZXNzYWdlLHRvdGFsOmMsdHlwZTpmfSl9O2YucHJvdG90eXBlLl9hZGp1c3RUb3BSb3c9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRvbS5jb250YWluZXIuZmluZCgiLiIrdGhpcy5jbGFzc2VzLnN1YlJvd3NDb250YWluZXIpLGQ9dGhpcy5kb20uY29udGFpbmVyLmZpbmQoIi5kdHNwLXN1YlJvdzEiKSxnPXRoaXMuZG9tLmNvbnRhaW5lci5maW5kKCIuZHRzcC1zdWJSb3cyIiksYz10aGlzLmRvbS5jb250YWluZXIuZmluZCgiLiIrdGhpcy5jbGFzc2VzLnRvcFJvdyk7KDI1Mj4kKGFbMF0pLndpZHRoKCl8fDI1Mj4kKGNbMF0pLndpZHRoKCkpJiYwIT09JChhWzBdKS53aWR0aCgpPygkKGFbMF0pLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5uYXJyb3cpLCQoZFswXSkuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLm5hcnJvd1N1YikucmVtb3ZlQ2xhc3ModGhpcy5jbGFzc2VzLm5hcnJvd1NlYXJjaCksJChnWzBdKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMubmFycm93U3ViKS5yZW1vdmVDbGFzcyh0aGlzLmNsYXNzZXMubmFycm93QnV0dG9uKSk6CigkKGFbMF0pLnJlbW92ZUNsYXNzKHRoaXMuY2xhc3Nlcy5uYXJyb3cpLCQoZFswXSkucmVtb3ZlQ2xhc3ModGhpcy5jbGFzc2VzLm5hcnJvd1N1YikuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLm5hcnJvd1NlYXJjaCksJChnWzBdKS5yZW1vdmVDbGFzcyh0aGlzLmNsYXNzZXMubmFycm93U3ViKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMubmFycm93QnV0dG9uKSl9O2YucHJvdG90eXBlLl9idWlsZFBhbmU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3RoaXMuc2VsZWN0aW9ucz1bXTt2YXIgZD10aGlzLnMuZHQsZz1kLmNvbHVtbih0aGlzLmNvbEV4aXN0cz90aGlzLnMuaW5kZXg6MCksYz10aGlzLnMuY29sT3B0cyxlPXRoaXMucy5yb3dEYXRhLHI9ZC5pMThuKCJzZWFyY2hQYW5lcy5jb3VudCIsInt0b3RhbH0iKSxmPWQuaTE4bigic2VhcmNoUGFuZXMuY291bnRGaWx0ZXJlZCIsIntzaG93bn0gKHt0b3RhbH0pIiksbD1kLnN0YXRlLmxvYWRlZCgpO2lmKHRoaXMuY29sRXhpc3RzKXt2YXIgcT0KLTE7aWYobCYmbC5zZWFyY2hQYW5lcyYmbC5zZWFyY2hQYW5lcy5wYW5lcylmb3IodmFyIHA9MDtwPGwuc2VhcmNoUGFuZXMucGFuZXMubGVuZ3RoO3ArKylpZihsLnNlYXJjaFBhbmVzLnBhbmVzW3BdLmlkPT09dGhpcy5zLmluZGV4KXtxPXA7YnJlYWt9aWYoKCExPT09Yy5zaG93fHx2b2lkIDAhPT1jLnNob3cmJiEwIT09Yy5zaG93KSYmLTE9PT1xKXJldHVybiB0aGlzLmRvbS5jb250YWluZXIuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLmhpZGRlbiksdGhpcy5zLmRpc3BsYXllZD0hMTtpZighMD09PWMuc2hvd3x8LTEhPT1xKXRoaXMucy5kaXNwbGF5ZWQ9ITA7aWYoMD09PWUuYXJyYXlGaWx0ZXIubGVuZ3RoKWlmKHRoaXMuX3BvcHVsYXRlUGFuZSgpLGwmJmwuc2VhcmNoUGFuZXMmJmwuc2VhcmNoUGFuZXMucGFuZXMpaWYoLTEhPT1xKWUuYmluc09yaWdpbmFsPWwuc2VhcmNoUGFuZXMucGFuZXNbcV0uYmlucyxlLmFycmF5T3JpZ2luYWw9bC5zZWFyY2hQYW5lcy5wYW5lc1txXS5hcnJheUZpbHRlcjsKZWxzZXt0aGlzLmRvbS5jb250YWluZXIuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLmhpZGRlbik7dGhpcy5zLmRpc3BsYXllZD0hMTtyZXR1cm59ZWxzZSBlLmFycmF5T3JpZ2luYWw9ZS5hcnJheUZpbHRlcixlLmJpbnNPcmlnaW5hbD1lLmJpbnM7cD1PYmplY3Qua2V5cyhlLmJpbnNPcmlnaW5hbCkubGVuZ3RoO3E9dGhpcy5fdW5pcXVlUmF0aW8ocCxkLnJvd3MoKVswXS5sZW5ndGgpO2lmKCExPT09dGhpcy5zLmRpc3BsYXllZCYmKCh2b2lkIDA9PT1jLnNob3cmJm51bGw9PT1jLnRocmVzaG9sZD9xPnRoaXMuYy50aHJlc2hvbGQ6cT5jLnRocmVzaG9sZCl8fCEwIT09Yy5zaG93JiYxPj1wKSl7dGhpcy5kb20uY29udGFpbmVyLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5oaWRkZW4pO3RoaXMucy5kaXNwbGF5ZWQ9ITE7cmV0dXJufXRoaXMuYy52aWV3VG90YWwmJjA9PT1lLmFycmF5VG90YWxzLmxlbmd0aD90aGlzLl9kZXRhaWxzUGFuZSgpOmUuYmluc1RvdGFsPWUuYmluczt0aGlzLmRvbS5jb250YWluZXIuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLnNob3cpfXRoaXMucy5kaXNwbGF5ZWQ9CiEwO3RoaXMuX2Rpc3BsYXlQYW5lKCk7dGhpcy5kb20uZHRQLm9uKCJzdGF0ZUxvYWRQYXJhbXMuZHQiLGZ1bmN0aW9uKGEsYyxlKXskLmlzRW1wdHlPYmplY3QoZC5zdGF0ZS5sb2FkZWQoKSkmJiQuZWFjaChlLGZ1bmN0aW9uKGEsYyl7ZGVsZXRlIGVbYV19KX0pO3A9JC5mbi5kYXRhVGFibGUuZXh0LmVyck1vZGU7JC5mbi5kYXRhVGFibGUuZXh0LmVyck1vZGU9Im5vbmUiO3E9Yi5TY3JvbGxlcjt0aGlzLnMuZHRQYW5lPSQodGhpcy5kb20uZHRQKS5EYXRhVGFibGUoJC5leHRlbmQoITAse2RvbToidCIsY29sdW1uRGVmczpbe2NsYXNzTmFtZToiZHRzcC1uYW1lQ29sdW1uIixkYXRhOiJkaXNwbGF5IixyZW5kZXI6ZnVuY3Rpb24oZCxlLGcpe2lmKCJzb3J0Ij09PWUpcmV0dXJuIGcuc29ydDtpZigidHlwZSI9PT1lKXJldHVybiBnLnR5cGU7dmFyIGI7YS5zLmZpbHRlcmluZ0FjdGl2ZSYmYS5jLnZpZXdUb3RhbD9iPWYucmVwbGFjZSgve3RvdGFsfS8sZy50b3RhbCk6Yj1yLnJlcGxhY2UoL3t0b3RhbH0vLApnLnRvdGFsKTtmb3IoYj1iLnJlcGxhY2UoL3tzaG93bn0vLGcuc2hvd24pOy0xIT09Yi5pbmRleE9mKCJ7dG90YWx9Iik7KWI9Yi5yZXBsYWNlKC97dG90YWx9LyxnLnRvdGFsKTtmb3IoOy0xIT09Yi5pbmRleE9mKCJ7c2hvd259Iik7KWI9Yi5yZXBsYWNlKC97c2hvd259LyxnLnNob3duKTtlPSc8c3BhbiBjbGFzcz0iJythLmNsYXNzZXMucGlsbCsnIj4nK2IrIjwvc3Bhbj4iO2lmKGEuYy5oaWRlQ291bnR8fGMuaGlkZUNvdW50KWU9IiI7cmV0dXJuIGEuYy5kYXRhTGVuZ3RoP2QubGVuZ3RoPmEuYy5kYXRhTGVuZ3RoPyc8c3BhbiBjbGFzcz0iJythLmNsYXNzZXMubmFtZSsnIj4nK2Quc3Vic3RyKDAsYS5jLmRhdGFMZW5ndGgpKyIuLi48L3NwYW4+IitlOic8c3BhbiBjbGFzcz0iJythLmNsYXNzZXMubmFtZSsnIj4nK2QrIjwvc3Bhbj4iK2U6JzxzcGFuIGNsYXNzPSInK2EuY2xhc3Nlcy5uYW1lKyciPicrZCsiPC9zcGFuPiIrZX0sdGFyZ2V0czowLHR5cGU6dm9pZCAwIT09ZC5zZXR0aW5ncygpWzBdLmFvQ29sdW1uc1t0aGlzLnMuaW5kZXhdPwpkLnNldHRpbmdzKClbMF0uYW9Db2x1bW5zW3RoaXMucy5pbmRleF0uX3NNYW51YWxUeXBlOm51bGx9LHtjbGFzc05hbWU6ImR0c3AtY291bnRDb2x1bW4gIit0aGlzLmNsYXNzZXMuYmFkZ2VQaWxsLGRhdGE6InRvdGFsIix0YXJnZXRzOjEsdmlzaWJsZTohMX1dLGRlZmVyUmVuZGVyOiEwLGluZm86ITEscGFnaW5nOnE/ITA6ITEsc2Nyb2xsWToiMjAwcHgiLHNjcm9sbGVyOnE/ITA6ITEsc2VsZWN0OiEwLHN0YXRlU2F2ZTpkLnNldHRpbmdzKClbMF0ub0ZlYXR1cmVzLmJTdGF0ZVNhdmU/ITA6ITF9LHRoaXMuYy5kdE9wdHMsdm9pZCAwIT09Yz9jLmR0T3B0czp7fSxudWxsIT09dGhpcy5jdXN0b21QYW5lU2V0dGluZ3MmJnZvaWQgMCE9PXRoaXMuY3VzdG9tUGFuZVNldHRpbmdzLmR0T3B0cz90aGlzLmN1c3RvbVBhbmVTZXR0aW5ncy5kdE9wdHM6e30pKTskKHRoaXMuZG9tLmR0UCkuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLnRhYmxlKTskKHRoaXMuZG9tLnNlYXJjaEJveCkuYXR0cigicGxhY2Vob2xkZXIiLAp2b2lkIDAhPT1jLmhlYWRlcj9jLmhlYWRlcjp0aGlzLmNvbEV4aXN0cz9kLnNldHRpbmdzKClbMF0uYW9Db2x1bW5zW3RoaXMucy5pbmRleF0uc1RpdGxlOnRoaXMuY3VzdG9tUGFuZVNldHRpbmdzLmhlYWRlcnx8IkN1c3RvbSBQYW5lIik7JC5mbi5kYXRhVGFibGUuc2VsZWN0LmluaXQodGhpcy5zLmR0UGFuZSk7JC5mbi5kYXRhVGFibGUuZXh0LmVyck1vZGU9cDtpZih0aGlzLmNvbEV4aXN0cyl7Zz0oZz1nLnNlYXJjaCgpKT9nLnN1YnN0cigxLGcubGVuZ3RoLTIpLnNwbGl0KCJ8Iik6W107dmFyIGs9MDtlLmFycmF5RmlsdGVyLmZvckVhY2goZnVuY3Rpb24oYSl7IiI9PT1hLmZpbHRlciYmaysrfSk7cD0wO2ZvcihnPWUuYXJyYXlGaWx0ZXIubGVuZ3RoO3A8ZztwKyspIWUuYXJyYXlGaWx0ZXJbcF18fHZvaWQgMD09PWUuYmluc1tlLmFycmF5RmlsdGVyW3BdLmZpbHRlcl0mJnRoaXMuYy5jYXNjYWRlUGFuZXM/dGhpcy5fYWRkUm93KHRoaXMuYy5lbXB0eU1lc3NhZ2UsayxrLHRoaXMuYy5lbXB0eU1lc3NhZ2UsCnRoaXMuYy5lbXB0eU1lc3NhZ2UsdGhpcy5jLmVtcHR5TWVzc2FnZSk6KHE9dGhpcy5fYWRkUm93KGUuYXJyYXlGaWx0ZXJbcF0uZGlzcGxheSxlLmFycmF5RmlsdGVyW3BdLmZpbHRlcixlLmJpbnNbZS5hcnJheUZpbHRlcltwXS5maWx0ZXJdLGUuYmluc1RvdGFsW2UuYXJyYXlGaWx0ZXJbcF0uZmlsdGVyXSxlLmFycmF5RmlsdGVyW3BdLnNvcnQsZS5hcnJheUZpbHRlcltwXS50eXBlKSx2b2lkIDAhPT1jLnByZVNlbGVjdCYmLTEhPT1jLnByZVNlbGVjdC5pbmRleE9mKGUuYXJyYXlGaWx0ZXJbcF0uZmlsdGVyKSYmcS5zZWxlY3QoKSl9KHZvaWQgMCE9PWMub3B0aW9uc3x8bnVsbCE9PXRoaXMuY3VzdG9tUGFuZVNldHRpbmdzJiZ2b2lkIDAhPT10aGlzLmN1c3RvbVBhbmVTZXR0aW5ncy5vcHRpb25zKSYmdGhpcy5fZ2V0Q29tcGFyaXNvblJvd3MoKTtiLnNlbGVjdC5pbml0KHRoaXMucy5kdFBhbmUpO3RoaXMucy5kdFBhbmUuZHJhdygpO3RoaXMucy5kdFBhbmUub24oInNlbGVjdC5kdHNwIiwKZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoaCk7JChhLmRvbS5jbGVhcikucmVtb3ZlQ2xhc3MoYS5jbGFzc2VzLmR1bGwpO2Eucy5zZWxlY3RQcmVzZW50PSEwO2Eucy51cGRhdGluZ3x8YS5fbWFrZVNlbGVjdGlvbigpO2Eucy5zZWxlY3RQcmVzZW50PSExfSk7dGhpcy5zLmR0Lm9uKCJzdGF0ZVNhdmVQYXJhbXMuZHRzcCIsZnVuY3Rpb24oYyxkLGcpe2lmKCQuaXNFbXB0eU9iamVjdChnKSlhLnMuZHRQYW5lLnN0YXRlLmNsZWFyKCk7ZWxzZXtjPVtdO2lmKHZvaWQgMCE9PWEucy5kdFBhbmUpe2M9YS5zLmR0UGFuZS5yb3dzKHtzZWxlY3RlZDohMH0pLmRhdGEoKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEuZmlsdGVyLnRvU3RyaW5nKCl9KS50b0FycmF5KCk7dmFyIGI9JChhLmRvbS5zZWFyY2hCb3gpLnZhbCgpO3ZhciBmPWEucy5kdFBhbmUub3JkZXIoKTt2YXIgcj1lLmJpbnNPcmlnaW5hbDt2YXIgbj1lLmFycmF5T3JpZ2luYWx9dm9pZCAwPT09Zy5zZWFyY2hQYW5lcyYmKGcuc2VhcmNoUGFuZXM9Cnt9KTt2b2lkIDA9PT1nLnNlYXJjaFBhbmVzLnBhbmVzJiYoZy5zZWFyY2hQYW5lcy5wYW5lcz1bXSk7Zy5zZWFyY2hQYW5lcy5wYW5lcy5wdXNoKHthcnJheUZpbHRlcjpuLGJpbnM6cixpZDphLnMuaW5kZXgsb3JkZXI6ZixzZWFyY2hUZXJtOmIsc2VsZWN0ZWQ6Y30pfX0pO2lmKGwmJmwuc2VhcmNoUGFuZXMmJmwuc2VhcmNoUGFuZXMucGFuZXMpZm9yKHRoaXMuYy5jYXNjYWRlUGFuZXN8fHRoaXMuX3JlbG9hZFNlbGVjdChsKSxnPTAsbD1sLnNlYXJjaFBhbmVzLnBhbmVzO2c8bC5sZW5ndGg7ZysrKXA9bFtnXSxwLmlkPT09dGhpcy5zLmluZGV4JiYoJCh0aGlzLmRvbS5zZWFyY2hCb3gpLnZhbChwLnNlYXJjaFRlcm0pLHRoaXMucy5kdC5vcmRlcihwLm9yZGVyKSk7dGhpcy5zLmR0UGFuZS5vbigidXNlci1zZWxlY3QuZHRzcCIsZnVuY3Rpb24oYSxjLGQsZSxnKXtnLnN0b3BQcm9wYWdhdGlvbigpfSk7JCh0aGlzLmRvbS5uYW1lQnV0dG9uKS5vbigiY2xpY2suZHRzcCIsZnVuY3Rpb24oKXt2YXIgYz0KYS5zLmR0UGFuZS5vcmRlcigpWzBdWzFdO2Eucy5kdFBhbmUub3JkZXIoWzAsImFzYyI9PT1jPyJkZXNjIjoiYXNjIl0pLmRyYXcoKX0pOyQodGhpcy5kb20uY291bnRCdXR0b24pLm9uKCJjbGljay5kdHNwIixmdW5jdGlvbigpe3ZhciBjPWEucy5kdFBhbmUub3JkZXIoKVswXVsxXTthLnMuZHRQYW5lLm9yZGVyKFsxLCJhc2MiPT09Yz8iZGVzYyI6ImFzYyJdKS5kcmF3KCl9KTskKHRoaXMuZG9tLmNsZWFyKS5vbigiY2xpY2suZHRzcCIsZnVuY3Rpb24oKXthLmRvbS5jb250YWluZXIuZmluZCgiLiIrYS5jbGFzc2VzLnNlYXJjaCkuZWFjaChmdW5jdGlvbigpeyQodGhpcykudmFsKCIiKTskKHRoaXMpLnRyaWdnZXIoImlucHV0Iil9KTthLmNsZWFyUGFuZSgpfSk7JCh0aGlzLmRvbS5zZWFyY2hCdXR0b24pLm9uKCJjbGljay5kdHNwIixmdW5jdGlvbigpeyQoYS5kb20uc2VhcmNoQm94KS5mb2N1cygpfSk7JCh0aGlzLmRvbS5zZWFyY2hCb3gpLm9uKCJpbnB1dC5kdHNwIixmdW5jdGlvbigpe2Eucy5kdFBhbmUuc2VhcmNoKCQoYS5kb20uc2VhcmNoQm94KS52YWwoKSkuZHJhdygpOwphLnMuZHQuc3RhdGUuc2F2ZSgpfSk7dmFyIGg7dGhpcy5zLmR0UGFuZS5vbigiZGVzZWxlY3QuZHRzcCIsZnVuY3Rpb24oKXtoPXNldFRpbWVvdXQoZnVuY3Rpb24oKXthLnMuZGVzZWxlY3Q9ITA7MD09PWEucy5kdFBhbmUucm93cyh7c2VsZWN0ZWQ6ITB9KS5kYXRhKCkudG9BcnJheSgpLmxlbmd0aCYmJChhLmRvbS5jbGVhcikuYWRkQ2xhc3MoYS5jbGFzc2VzLmR1bGwpO2EuX21ha2VTZWxlY3Rpb24oKTthLnMuZGVzZWxlY3Q9ITE7YS5zLmR0LnN0YXRlLnNhdmUoKX0sNTApfSk7dGhpcy5zLmR0LnN0YXRlLnNhdmUoKTtyZXR1cm4hMH07Zi5wcm90b3R5cGUuX2RldGFpbHNQYW5lPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxkPXRoaXMucy5kdDt0aGlzLnMucm93RGF0YS5hcnJheVRvdGFscz1bXTt0aGlzLnMucm93RGF0YS5iaW5zVG90YWw9e307dmFyIGc9dGhpcy5zLmR0LnNldHRpbmdzKClbMF07ZC5yb3dzKCkuZXZlcnkoZnVuY3Rpb24oYyl7YS5fcG9wdWxhdGVQYW5lQXJyYXkoYywKYS5zLnJvd0RhdGEuYXJyYXlUb3RhbHMsZyxhLnMucm93RGF0YS5iaW5zVG90YWwpfSl9O2YucHJvdG90eXBlLl9kaXNwbGF5UGFuZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZG9tLmNvbnRhaW5lcixkPXRoaXMucy5jb2xPcHRzLGc9cGFyc2VJbnQodGhpcy5jLmxheW91dC5zcGxpdCgiLSIpWzFdLDEwKTskKHRoaXMuZG9tLnRvcFJvdykuZW1wdHkoKTskKHRoaXMuZG9tLmR0UCkuZW1wdHkoKTskKHRoaXMuZG9tLnRvcFJvdykuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLnRvcFJvdyk7MzxnJiYkKHRoaXMuZG9tLmNvbnRhaW5lcikuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLnNtYWxsR2FwKTskKHRoaXMuZG9tLnRvcFJvdykuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLnN1YlJvd3NDb250YWluZXIpOyQodGhpcy5kb20udXBwZXIpLmFwcGVuZFRvKHRoaXMuZG9tLnRvcFJvdyk7JCh0aGlzLmRvbS5sb3dlcikuYXBwZW5kVG8odGhpcy5kb20udG9wUm93KTskKHRoaXMuZG9tLnNlYXJjaENvbnQpLmFwcGVuZFRvKHRoaXMuZG9tLnVwcGVyKTsKJCh0aGlzLmRvbS5idXR0b25Hcm91cCkuYXBwZW5kVG8odGhpcy5kb20ubG93ZXIpOyghMT09PXRoaXMuYy5kdE9wdHMuc2VhcmNoaW5nfHx2b2lkIDAhPT1kLmR0T3B0cyYmITE9PT1kLmR0T3B0cy5zZWFyY2hpbmd8fCF0aGlzLmMuY29udHJvbHN8fCFkLmNvbnRyb2xzfHxudWxsIT09dGhpcy5jdXN0b21QYW5lU2V0dGluZ3MmJnZvaWQgMCE9PXRoaXMuY3VzdG9tUGFuZVNldHRpbmdzLmR0T3B0cyYmdm9pZCAwIT09dGhpcy5jdXN0b21QYW5lU2V0dGluZ3MuZHRPcHRzLnNlYXJjaGluZyYmIXRoaXMuY3VzdG9tUGFuZVNldHRpbmdzLmR0T3B0cy5zZWFyY2hpbmcpJiYkKHRoaXMuZG9tLnNlYXJjaEJveCkuYXR0cigiZGlzYWJsZWQiLCJkaXNhYmxlZCIpLnJlbW92ZUNsYXNzKHRoaXMuY2xhc3Nlcy5wYW5lSW5wdXRCdXR0b24pLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5kaXNhYmxlZEJ1dHRvbik7JCh0aGlzLmRvbS5zZWFyY2hCb3gpLmFwcGVuZFRvKHRoaXMuZG9tLnNlYXJjaENvbnQpOwp0aGlzLl9zZWFyY2hDb250U2V0dXAoKTt0aGlzLmMuY2xlYXImJnRoaXMuYy5jb250cm9scyYmZC5jb250cm9scyYmJCh0aGlzLmRvbS5jbGVhcikuYXBwZW5kVG8odGhpcy5kb20uYnV0dG9uR3JvdXApO3RoaXMuYy5vcmRlcmFibGUmJmQub3JkZXJhYmxlJiZ0aGlzLmMuY29udHJvbHMmJmQuY29udHJvbHMmJiQodGhpcy5kb20ubmFtZUJ1dHRvbikuYXBwZW5kVG8odGhpcy5kb20uYnV0dG9uR3JvdXApOyF0aGlzLmMuaGlkZUNvdW50JiYhZC5oaWRlQ291bnQmJnRoaXMuYy5vcmRlcmFibGUmJmQub3JkZXJhYmxlJiZ0aGlzLmMuY29udHJvbHMmJmQuY29udHJvbHMmJiQodGhpcy5kb20uY291bnRCdXR0b24pLmFwcGVuZFRvKHRoaXMuZG9tLmJ1dHRvbkdyb3VwKTskKHRoaXMuZG9tLnRvcFJvdykucHJlcGVuZFRvKHRoaXMuZG9tLmNvbnRhaW5lcik7JChhKS5hcHBlbmQodGhpcy5kb20uZHRQKTskKGEpLnNob3coKX07Zi5wcm90b3R5cGUuX2ZpbmRVbmlxdWU9ZnVuY3Rpb24oYSwKZCl7Zm9yKHZhciBnPVtdLGM9MDtjPGQubGVuZ3RoO2MrKyl7dmFyIGU9ZFtjXTstMT09PWcuaW5kZXhPZihlLmZpbHRlcikmJihhLnB1c2goe2Rpc3BsYXk6ZS5kaXNwbGF5LGZpbHRlcjplLmZpbHRlcixzb3J0OmUuc29ydCx0eXBlOmUudHlwZX0pLGcucHVzaChlLmZpbHRlcikpfX07Zi5wcm90b3R5cGUuX2dldEJvbnVzT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiAkLmV4dGVuZCghMCx7fSxmLmRlZmF1bHRzLHtvcnRob2dvbmFsOnt0aHJlc2hvbGQ6bnVsbH0sdGhyZXNob2xkOm51bGx9LHZvaWQgMCE9PXRoaXMuYz90aGlzLmM6e30pfTtmLnByb3RvdHlwZS5fZ2V0Q29tcGFyaXNvblJvd3M9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnMuY29sT3B0czthPXZvaWQgMCE9PWEub3B0aW9ucz9hLm9wdGlvbnM6bnVsbCE9PXRoaXMuY3VzdG9tUGFuZVNldHRpbmdzJiZ2b2lkIDAhPT10aGlzLmN1c3RvbVBhbmVTZXR0aW5ncy5vcHRpb25zP3RoaXMuY3VzdG9tUGFuZVNldHRpbmdzLm9wdGlvbnM6CnZvaWQgMDtpZih2b2lkIDAhPT1hKXt2YXIgZD10aGlzLnMuZHQucm93cyh7c2VhcmNoOiJhcHBsaWVkIn0pLmRhdGEoKS50b0FycmF5KCksZz10aGlzLnMuZHQucm93cyh7c2VhcmNoOiJhcHBsaWVkIn0pLGM9dGhpcy5zLmR0LnJvd3MoKS5kYXRhKCkudG9BcnJheSgpLGU9dGhpcy5zLmR0LnJvd3MoKSxiPVtdO3RoaXMucy5kdFBhbmUuY2xlYXIoKTtmb3IodmFyIGY9MDtmPGEubGVuZ3RoO2YrKyl7dmFyIGw9YVtmXSxxPSIiIT09bC5sYWJlbD9sLmxhYmVsOnRoaXMuYy5lbXB0eU1lc3NhZ2Usaz1xLGg9ImZ1bmN0aW9uIj09PXR5cGVvZiBsLnZhbHVlP2wudmFsdWU6W10sbT0wLHY9cSx1PTA7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBsLnZhbHVlKXtmb3IodmFyIHQ9MDt0PGQubGVuZ3RoO3QrKylsLnZhbHVlLmNhbGwodGhpcy5zLmR0LGRbdF0sZ1swXVt0XSkmJm0rKztmb3IodD0wO3Q8Yy5sZW5ndGg7dCsrKWwudmFsdWUuY2FsbCh0aGlzLnMuZHQsY1t0XSxlWzBdW3RdKSYmdSsrOwoiZnVuY3Rpb24iIT09dHlwZW9mIGgmJmgucHVzaChsLmZpbHRlcil9KCF0aGlzLmMuY2FzY2FkZVBhbmVzfHx0aGlzLmMuY2FzY2FkZVBhbmVzJiYwIT09bSkmJmIucHVzaCh0aGlzLl9hZGRSb3coayxoLG0sdSx2LHEpKX1yZXR1cm4gYn19O2YucHJvdG90eXBlLl9nZXRPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuICQuZXh0ZW5kKCEwLHt9LGYuZGVmYXVsdHMse29ydGhvZ29uYWw6e3RocmVzaG9sZDpudWxsfSx0aHJlc2hvbGQ6bnVsbH0sdGhpcy5zLmR0LnNldHRpbmdzKClbMF0uYW9Db2x1bW5zW3RoaXMucy5pbmRleF0uc2VhcmNoUGFuZXMpfTtmLnByb3RvdHlwZS5fbWFrZVNlbGVjdGlvbj1mdW5jdGlvbigpe3RoaXMudXBkYXRlVGFibGUoKTt0aGlzLnMudXBkYXRpbmc9ITA7dGhpcy5zLmR0LmRyYXcoKTt0aGlzLnMudXBkYXRpbmc9ITF9O2YucHJvdG90eXBlLl9wb3B1bGF0ZVBhbmU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnMuZHQ7dGhpcy5zLnJvd0RhdGEuYXJyYXlGaWx0ZXI9CltdO3RoaXMucy5yb3dEYXRhLmJpbnM9e307dmFyIGQ9dGhpcy5zLmR0LnNldHRpbmdzKClbMF0sZz0wO2ZvcihhPSF0aGlzLmMuY2FzY2FkZVBhbmVzJiYhdGhpcy5jLnZpZXdUb3RhbHx8dGhpcy5zLmNsZWFyaW5nP2Eucm93cygpLmluZGV4ZXMoKTphLnJvd3Moe3NlYXJjaDoiYXBwbGllZCJ9KS5pbmRleGVzKCk7ZzxhLmxlbmd0aDtnKyspdGhpcy5fcG9wdWxhdGVQYW5lQXJyYXkoYVtnXSx0aGlzLnMucm93RGF0YS5hcnJheUZpbHRlcixkKX07Zi5wcm90b3R5cGUuX3BvcHVsYXRlUGFuZUFycmF5PWZ1bmN0aW9uKGEsZCxnLGMpe3ZvaWQgMD09PWMmJihjPXRoaXMucy5yb3dEYXRhLmJpbnMpO3ZhciBlPXRoaXMucy5jb2xPcHRzO2lmKCJzdHJpbmciPT09dHlwZW9mIGUub3J0aG9nb25hbClnPWcub0FwaS5fZm5HZXRDZWxsRGF0YShnLGEsdGhpcy5zLmluZGV4LGUub3J0aG9nb25hbCksdGhpcy5zLnJvd0RhdGEuZmlsdGVyTWFwLnNldChhLGcpLHRoaXMuX2FkZE9wdGlvbihnLApnLGcsZyxkLGMpO2Vsc2V7dmFyIGI9Zy5vQXBpLl9mbkdldENlbGxEYXRhKGcsYSx0aGlzLnMuaW5kZXgsZS5vcnRob2dvbmFsLnNlYXJjaCk7dGhpcy5zLnJvd0RhdGEuZmlsdGVyTWFwLnNldChhLGIpO2NbYl0/Y1tiXSsrOihjW2JdPTEsdGhpcy5fYWRkT3B0aW9uKGIsZy5vQXBpLl9mbkdldENlbGxEYXRhKGcsYSx0aGlzLnMuaW5kZXgsZS5vcnRob2dvbmFsLmRpc3BsYXkpLGcub0FwaS5fZm5HZXRDZWxsRGF0YShnLGEsdGhpcy5zLmluZGV4LGUub3J0aG9nb25hbC5zb3J0KSxnLm9BcGkuX2ZuR2V0Q2VsbERhdGEoZyxhLHRoaXMucy5pbmRleCxlLm9ydGhvZ29uYWwudHlwZSksZCxjKSl9fTtmLnByb3RvdHlwZS5fcmVsb2FkU2VsZWN0PWZ1bmN0aW9uKGEpe2lmKHZvaWQgMCE9PWEpe2Zvcih2YXIgZCxnPTA7ZzxhLnNlYXJjaFBhbmVzLnBhbmVzLmxlbmd0aDtnKyspaWYoYS5zZWFyY2hQYW5lcy5wYW5lc1tnXS5pZD09PXRoaXMucy5pbmRleCl7ZD1nO2JyZWFrfWlmKHZvaWQgMCE9PQpkKXtnPXRoaXMucy5kdFBhbmU7dmFyIGM9Zy5yb3dzKHtvcmRlcjoiaW5kZXgifSkuZGF0YSgpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9PWEuZmlsdGVyP2EuZmlsdGVyLnRvU3RyaW5nKCk6bnVsbH0pLnRvQXJyYXkoKSxlPTA7Zm9yKGE9YS5zZWFyY2hQYW5lcy5wYW5lc1tkXS5zZWxlY3RlZDtlPGEubGVuZ3RoO2UrKyl7ZD1hW2VdO3ZhciBiPS0xO251bGwhPT1kJiYoYj1jLmluZGV4T2YoZC50b1N0cmluZygpKSk7LTE8YiYmKGcucm93KGIpLnNlbGVjdCgpLHRoaXMucy5kdC5zdGF0ZS5zYXZlKCkpfX19fTtmLnByb3RvdHlwZS5fc2VhcmNoPWZ1bmN0aW9uKGEsZCl7Zm9yKHZhciBnPXRoaXMucy5jb2xPcHRzLGM9dGhpcy5zLmR0LGU9MCxiPXRoaXMuc2VsZWN0aW9ucztlPGIubGVuZ3RoO2UrKyl7dmFyIGY9YltlXTtpZihBcnJheS5pc0FycmF5KGEpKXtpZigtMSE9PWEuaW5kZXhPZihmLmZpbHRlcikpcmV0dXJuITB9ZWxzZSBpZigiZnVuY3Rpb24iPT09dHlwZW9mIGYuZmlsdGVyKWlmKGYuZmlsdGVyLmNhbGwoYywKYy5yb3coZCkuZGF0YSgpLGQpKXtpZih0aGlzLnMucmVkcmF3fHx0aGlzLnVwZGF0ZVBhbmUoKSwib3IiPT09Zy5jb21iaW5lcilyZXR1cm4hMH1lbHNle2lmKCJhbmQiPT09Zy5jb21iaW5lcilyZXR1cm4hMX1lbHNlIGlmKGE9PT1mLmZpbHRlcilyZXR1cm4hMH1yZXR1cm4iYW5kIj09PWcuY29tYmluZXI/ITA6ITF9O2YucHJvdG90eXBlLl9zZWFyY2hDb250U2V0dXA9ZnVuY3Rpb24oKXt0aGlzLmMuY29udHJvbHMmJnRoaXMucy5jb2xPcHRzLmNvbnRyb2xzJiYkKHRoaXMuZG9tLnNlYXJjaEJ1dHRvbikuYXBwZW5kVG8odGhpcy5kb20uc2VhcmNoTGFiZWxDb250KTshMT09PXRoaXMuYy5kdE9wdHMuc2VhcmNoaW5nfHwhMT09PXRoaXMucy5jb2xPcHRzLmR0T3B0cy5zZWFyY2hpbmd8fG51bGwhPT10aGlzLmN1c3RvbVBhbmVTZXR0aW5ncyYmdm9pZCAwIT09dGhpcy5jdXN0b21QYW5lU2V0dGluZ3MuZHRPcHRzJiZ2b2lkIDAhPT10aGlzLmN1c3RvbVBhbmVTZXR0aW5ncy5kdE9wdHMuc2VhcmNoaW5nJiYKIXRoaXMuY3VzdG9tUGFuZVNldHRpbmdzLmR0T3B0cy5zZWFyY2hpbmd8fCQodGhpcy5kb20uc2VhcmNoTGFiZWxDb250KS5hcHBlbmRUbyh0aGlzLmRvbS5zZWFyY2hDb250KX07Zi5wcm90b3R5cGUuX3NlYXJjaEV4dHJhcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMucy51cGRhdGluZzt0aGlzLnMudXBkYXRpbmc9ITA7dmFyIGQ9dGhpcy5zLmR0UGFuZS5yb3dzKHtzZWxlY3RlZDohMH0pLmRhdGEoKS5wbHVjaygiZmlsdGVyIikudG9BcnJheSgpLGc9ZC5pbmRleE9mKHRoaXMuYy5lbXB0eU1lc3NhZ2UpLGM9JCh0aGlzLnMuZHRQYW5lLnRhYmxlKCkuY29udGFpbmVyKCkpOy0xPGcmJihkW2ddPSIiKTswPGQubGVuZ3RoP2MuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLnNlbGVjdGVkKTowPT09ZC5sZW5ndGgmJmMucmVtb3ZlQ2xhc3ModGhpcy5jbGFzc2VzLnNlbGVjdGVkKTt0aGlzLnMudXBkYXRpbmc9YX07Zi5wcm90b3R5cGUuX3VuaXF1ZVJhdGlvPWZ1bmN0aW9uKGEsZCl7cmV0dXJuIDA8CmQ/YS9kOjF9O2YucHJvdG90eXBlLl91cGRhdGVDb21tb249ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9ITEpO2lmKCEodm9pZCAwPT09dGhpcy5zLmR0UGFuZXx8dGhpcy5zLmZpbHRlcmluZ0FjdGl2ZSYmIXRoaXMuYy5jYXNjYWRlUGFuZXMmJiEwIT09YXx8ITA9PT10aGlzLmMuY2FzY2FkZVBhbmVzJiYhMD09PXRoaXMucy5zZWxlY3RQcmVzZW50fHx0aGlzLnMubGFzdFNlbGVjdCkpe3ZhciBkPXRoaXMucy5jb2xPcHRzLGc9dGhpcy5zLmR0UGFuZS5yb3dzKHtzZWxlY3RlZDohMH0pLmRhdGEoKS50b0FycmF5KCk7YT0kKHRoaXMucy5kdFBhbmUudGFibGUoKS5ub2RlKCkpLnBhcmVudCgpWzBdLnNjcm9sbFRvcDt2YXIgYz10aGlzLnMucm93RGF0YTt0aGlzLnMuZHRQYW5lLmNsZWFyKCk7aWYodGhpcy5jb2xFeGlzdHMpezA9PT1jLmFycmF5RmlsdGVyLmxlbmd0aD90aGlzLl9wb3B1bGF0ZVBhbmUoKTp0aGlzLmMuY2FzY2FkZVBhbmVzJiZ0aGlzLnMuZHQucm93cygpLmRhdGEoKS50b0FycmF5KCkubGVuZ3RoPT09CnRoaXMucy5kdC5yb3dzKHtzZWFyY2g6ImFwcGxpZWQifSkuZGF0YSgpLnRvQXJyYXkoKS5sZW5ndGg/KGMuYXJyYXlGaWx0ZXI9Yy5hcnJheU9yaWdpbmFsLGMuYmlucz1jLmJpbnNPcmlnaW5hbCk6KHRoaXMuYy52aWV3VG90YWx8fHRoaXMuYy5jYXNjYWRlUGFuZXMpJiZ0aGlzLl9wb3B1bGF0ZVBhbmUoKTt0aGlzLmMudmlld1RvdGFsP3RoaXMuX2RldGFpbHNQYW5lKCk6Yy5iaW5zVG90YWw9Yy5iaW5zO3RoaXMuYy52aWV3VG90YWwmJiF0aGlzLmMuY2FzY2FkZVBhbmVzJiYoYy5hcnJheUZpbHRlcj1jLmFycmF5VG90YWxzKTtmb3IodmFyIGU9ZnVuY3Rpb24oYSl7aWYoYSYmKHZvaWQgMCE9PWMuYmluc1thLmZpbHRlcl0mJjAhPT1jLmJpbnNbYS5maWx0ZXJdJiZiLmMuY2FzY2FkZVBhbmVzfHwhYi5jLmNhc2NhZGVQYW5lc3x8Yi5zLmNsZWFyaW5nKSl7dmFyIGQ9Yi5fYWRkUm93KGEuZGlzcGxheSxhLmZpbHRlcixiLmMudmlld1RvdGFsP3ZvaWQgMCE9PWMuYmluc1thLmZpbHRlcl0/CmMuYmluc1thLmZpbHRlcl06MDpjLmJpbnNbYS5maWx0ZXJdLGIuYy52aWV3VG90YWw/U3RyaW5nKGMuYmluc1RvdGFsW2EuZmlsdGVyXSk6Yy5iaW5zW2EuZmlsdGVyXSxhLnNvcnQsYS50eXBlKSxlPWcuZmluZEluZGV4KGZ1bmN0aW9uKGMpe3JldHVybiBjLmZpbHRlcj09PWEuZmlsdGVyfSk7LTEhPT1lJiYoZC5zZWxlY3QoKSxnLnNwbGljZShlLDEpKX19LGI9dGhpcyxmPTAsbD1jLmFycmF5RmlsdGVyO2Y8bC5sZW5ndGg7ZisrKWUobFtmXSl9aWYodm9pZCAwIT09ZC5zZWFyY2hQYW5lcyYmdm9pZCAwIT09ZC5zZWFyY2hQYW5lcy5vcHRpb25zfHx2b2lkIDAhPT1kLm9wdGlvbnN8fG51bGwhPT10aGlzLmN1c3RvbVBhbmVTZXR0aW5ncyYmdm9pZCAwIT09dGhpcy5jdXN0b21QYW5lU2V0dGluZ3Mub3B0aW9ucylmb3IoZT1mdW5jdGlvbihhKXt2YXIgYz1nLmZpbmRJbmRleChmdW5jdGlvbihjKXtpZihjLmRpc3BsYXk9PT1hLmRhdGEoKS5kaXNwbGF5KXJldHVybiEwfSk7LTEhPT0KYyYmKGEuc2VsZWN0KCksZy5zcGxpY2UoYywxKSl9LGY9MCxsPXRoaXMuX2dldENvbXBhcmlzb25Sb3dzKCk7ZjxsLmxlbmd0aDtmKyspZD1sW2ZdLGUoZCk7Zm9yKGU9MDtlPGcubGVuZ3RoO2UrKylkPWdbZV0sZD10aGlzLl9hZGRSb3coZC5kaXNwbGF5LGQuZmlsdGVyLDAsdGhpcy5jLnZpZXdUb3RhbD9kLnRvdGFsOjAsZC5maWx0ZXIsZC5maWx0ZXIpLGQuc2VsZWN0KCk7dGhpcy5zLmR0UGFuZS5kcmF3KCk7dGhpcy5zLmR0UGFuZS50YWJsZSgpLm5vZGUoKS5wYXJlbnROb2RlLnNjcm9sbFRvcD1hfX07Zi52ZXJzaW9uPSIxLjAuMSI7Zi5jbGFzc2VzPXtidXR0b25Hcm91cDoiZHRzcC1idXR0b25Hcm91cCIsYnV0dG9uU3ViOiJkdHNwLWJ1dHRvblN1YiIsY2xlYXI6ImR0c3AtY2xlYXIiLGNsZWFyQWxsOiJkdHNwLWNsZWFyQWxsIixjbGVhckJ1dHRvbjoiY2xlYXJCdXR0b24iLGNvbnRhaW5lcjoiZHRzcC1zZWFyY2hQYW5lIixjb3VudEJ1dHRvbjoiZHRzcC1jb3VudEJ1dHRvbiIsCmRpc2FibGVkQnV0dG9uOiJkdHNwLWRpc2FibGVkQnV0dG9uIixkdWxsOiJkdHNwLWR1bGwiLGhpZGRlbjoiZHRzcC1oaWRkZW4iLGhpZGU6ImR0c3AtaGlkZSIsbGF5b3V0OiJkdHNwLSIsbmFtZToiZHRzcC1uYW1lIixuYW1lQnV0dG9uOiJkdHNwLW5hbWVCdXR0b24iLG5hcnJvdzoiZHRzcC1uYXJyb3ciLHBhbmVCdXR0b246ImR0c3AtcGFuZUJ1dHRvbiIscGFuZUlucHV0QnV0dG9uOiJkdHNwLXBhbmVJbnB1dEJ1dHRvbiIscGlsbDoiZHRzcC1waWxsIixzZWFyY2g6ImR0c3Atc2VhcmNoIixzZWFyY2hDb250OiJkdHNwLXNlYXJjaENvbnQiLHNlYXJjaEljb246ImR0c3Atc2VhcmNoSWNvbiIsc2VhcmNoTGFiZWxDb250OiJkdHNwLXNlYXJjaEJ1dHRvbkNvbnQiLHNlbGVjdGVkOiJkdHNwLXNlbGVjdGVkIixzbWFsbEdhcDoiZHRzcC1zbWFsbEdhcCIsc3ViUm93MToiZHRzcC1zdWJSb3cxIixzdWJSb3cyOiJkdHNwLXN1YlJvdzIiLHN1YlJvd3NDb250YWluZXI6ImR0c3Atc3ViUm93c0NvbnRhaW5lciIsCnRpdGxlOiJkdHNwLXRpdGxlIix0b3BSb3c6ImR0c3AtdG9wUm93In07Zi5kZWZhdWx0cz17Y2FzY2FkZVBhbmVzOiExLGNsZWFyOiEwLGNvbWJpbmVyOiJvciIsY29udHJvbHM6ITAsY29udGFpbmVyOmZ1bmN0aW9uKGEpe3JldHVybiBhLnRhYmxlKCkuY29udGFpbmVyKCl9LGRhdGFMZW5ndGg6MzAsZHRPcHRzOnt9LGVtcHR5TWVzc2FnZToiPGk+Tm8gRGF0YTwvaT4iLGhpZGVDb3VudDohMSxsYXlvdXQ6ImNvbHVtbnMtMyIsb3JkZXJhYmxlOiEwLG9ydGhvZ29uYWw6e2Rpc3BsYXk6ImRpc3BsYXkiLGhpZGVDb3VudDohMSxzZWFyY2g6ImZpbHRlciIsc2hvdzp2b2lkIDAsc29ydDoic29ydCIsdGhyZXNob2xkOi42LHR5cGU6InR5cGUifSxwcmVTZWxlY3Q6W10sdGhyZXNob2xkOi42LHZpZXdUb3RhbDohMX07cmV0dXJuIGZ9KCksaz0kLmZuLmRhdGFUYWJsZSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihhLGQsZyl7dmFyIGM9dGhpczt2b2lkIDA9PT1nJiYoZz0hMSk7dGhpcy5yZWdlbmVyYXRpbmc9CiExO2lmKCFrfHwhay52ZXJzaW9uQ2hlY2t8fCFrLnZlcnNpb25DaGVjaygiMS4xMC4wIikpdGhyb3cgRXJyb3IoIlNlYXJjaFBhbmUgcmVxdWlyZXMgRGF0YVRhYmxlcyAxLjEwIG9yIG5ld2VyIik7aWYoIWsuc2VsZWN0KXRocm93IEVycm9yKCJTZWFyY2hQYW5lIHJlcXVpcmVzIFNlbGVjdCIpO3ZhciBlPW5ldyBrLkFwaShhKTt0aGlzLmNsYXNzZXM9JC5leHRlbmQoITAse30sYi5jbGFzc2VzKTt0aGlzLmM9JC5leHRlbmQoITAse30sYi5kZWZhdWx0cyxkKTt0aGlzLmRvbT17Y2xlYXJBbGw6JCgnPGJ1dHRvbiB0eXBlPSJidXR0b24iPkNsZWFyIEFsbDwvYnV0dG9uPicpLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5jbGVhckFsbCksY29udGFpbmVyOiQoIjxkaXYvPiIpLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5wYW5lcykudGV4dChlLmkxOG4oInNlYXJjaFBhbmVzLmxvYWRNZXNzYWdlIiwiTG9hZGluZyBTZWFyY2ggUGFuZXMuLi4iKSksZW1wdHlNZXNzYWdlOiQoIjxkaXYvPiIpLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5lbXB0eU1lc3NhZ2UpLApvcHRpb25zOiQoIjxkaXYvPiIpLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5jb250YWluZXIpLHBhbmVzOiQoIjxkaXYvPiIpLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5jb250YWluZXIpLHRpdGxlOiQoIjxkaXYvPiIpLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy50aXRsZSksdGl0bGVSb3c6JCgiPGRpdi8+IikuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLnRpdGxlUm93KSx3cmFwcGVyOiQoIjxkaXYvPiIpfTt0aGlzLnM9e2NvbE9wdHM6W10sZHQ6ZSxmaWx0ZXJQYW5lOi0xLHBhbmVzOltdLHNlbGVjdGlvbkxpc3Q6W10sdXBkYXRpbmc6ITF9O2Uuc2V0dGluZ3MoKVswXS5fc2VhcmNoUGFuZXM9dGhpczt0aGlzLmRvbS5jbGVhckFsbC50ZXh0KGUuaTE4bigic2VhcmNoUGFuZXMuY2xlYXJNZXNzYWdlIiwiQ2xlYXIgQWxsIikpO3RoaXMuX2dldFN0YXRlKCk7aWYodGhpcy5zLmR0LnNldHRpbmdzKClbMF0uX2JJbml0Q29tcGxldGV8fGcpdGhpcy5fcGFuZURlY2xhcmUoZSxhLGQpO2Vsc2UgZS5vbigicHJlSW5pdC5kdCIsCmZ1bmN0aW9uKCl7Yy5fcGFuZURlY2xhcmUoZSxhLGQpfSl9Yi5wcm90b3R5cGUuY2xlYXJTZWxlY3Rpb25zPWZ1bmN0aW9uKCl7dGhpcy5kb20uY29udGFpbmVyLmZpbmQodGhpcy5jbGFzc2VzLnNlYXJjaCkuZWFjaChmdW5jdGlvbigpeyQodGhpcykudmFsKCIiKTskKHRoaXMpLnRyaWdnZXIoImlucHV0Iil9KTtmb3IodmFyIGE9W10sZD0wLGI9dGhpcy5zLnBhbmVzO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgYz1iW2RdO3ZvaWQgMCE9PWMucy5kdFBhbmUmJmEucHVzaChjLmNsZWFyUGFuZSgpKX10aGlzLnMuZHQuZHJhdygpO3JldHVybiBhfTtiLnByb3RvdHlwZS5nZXROb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tLmNvbnRhaW5lcn07Yi5wcm90b3R5cGUucmVidWlsZD1mdW5jdGlvbihhKXt2b2lkIDA9PT1hJiYoYT0hMSk7JCh0aGlzLmRvbS5lbXB0eU1lc3NhZ2UpLnJlbW92ZSgpO3ZhciBkPVtdO3RoaXMuY2xlYXJTZWxlY3Rpb25zKCk7Zm9yKHZhciBiPTAsYz10aGlzLnMucGFuZXM7YjwKYy5sZW5ndGg7YisrKXt2YXIgZT1jW2JdO2lmKCExPT09YXx8ZS5zLmluZGV4PT09YSllLmNsZWFyRGF0YSgpLGQucHVzaChlLnJlYnVpbGRQYW5lKCkpfXRoaXMuX3VwZGF0ZUZpbHRlckNvdW50KCk7dGhpcy5fYXR0YWNoUGFuZUNvbnRhaW5lcigpO3JldHVybiAxPT09ZC5sZW5ndGg/ZFswXTpkfTtiLnByb3RvdHlwZS5yZWRyYXdQYW5lcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMucy5kdDtpZighdGhpcy5zLnVwZGF0aW5nKXt2YXIgZD0hMCxiPXRoaXMucy5maWx0ZXJQYW5lO2lmKGEucm93cyh7c2VhcmNoOiJhcHBsaWVkIn0pLmRhdGEoKS50b0FycmF5KCkubGVuZ3RoPT09YS5yb3dzKCkuZGF0YSgpLnRvQXJyYXkoKS5sZW5ndGgpZD0hMTtlbHNlIGlmKHRoaXMuYy52aWV3VG90YWwpZm9yKHZhciBjPTAsZT10aGlzLnMucGFuZXM7YzxlLmxlbmd0aDtjKyspe3ZhciBmPWVbY107aWYodm9pZCAwIT09Zi5zLmR0UGFuZSl7dmFyIG49Zi5zLmR0UGFuZS5yb3dzKHtzZWxlY3RlZDohMH0pLmRhdGEoKS50b0FycmF5KCkubGVuZ3RoOwowPG4mJi0xPT09Yj9iPWYucy5pbmRleDowPG4mJihiPW51bGwpfX1lPXZvaWQgMDtjPVtdO2lmKHRoaXMucmVnZW5lcmF0aW5nKXtjPTA7Zm9yKGE9dGhpcy5zLnBhbmVzO2M8YS5sZW5ndGg7YysrKWlmKGY9YVtjXSx2b2lkIDAhPT1mLnMuZHRQYW5lKXtlPSEwO2Yucy5maWx0ZXJpbmdBY3RpdmU9ITA7aWYoLTEhPT1iJiZudWxsIT09YiYmYj09PWYucy5pbmRleHx8ITE9PT1kKWU9ITEsZi5zLmZpbHRlcmluZ0FjdGl2ZT0hMTtmLnVwZGF0ZVBhbmUoZT9kOmUpfXRoaXMuX3VwZGF0ZUZpbHRlckNvdW50KCl9ZWxzZXtuPTA7Zm9yKHZhciBsPXRoaXMucy5wYW5lcztuPGwubGVuZ3RoO24rKylpZihmPWxbbl0sZi5zLnNlbGVjdFByZXNlbnQpe3RoaXMucy5zZWxlY3Rpb25MaXN0LnB1c2goe2luZGV4OmYucy5pbmRleCxyb3dzOmYucy5kdFBhbmUucm93cyh7c2VsZWN0ZWQ6ITB9KS5kYXRhKCkudG9BcnJheSgpLHByb3RlY3Q6ITF9KTthLnN0YXRlLnNhdmUoKTticmVha31lbHNlIGlmKGYucy5kZXNlbGVjdCl7ZT0KZi5zLmluZGV4O3ZhciBoPWYucy5kdFBhbmUucm93cyh7c2VsZWN0ZWQ6ITB9KS5kYXRhKCkudG9BcnJheSgpOzA8aC5sZW5ndGgmJnRoaXMucy5zZWxlY3Rpb25MaXN0LnB1c2goe2luZGV4OmYucy5pbmRleCxyb3dzOmgscHJvdGVjdDohMH0pfWlmKDA8dGhpcy5zLnNlbGVjdGlvbkxpc3QubGVuZ3RoKWZvcihhPXRoaXMucy5zZWxlY3Rpb25MaXN0W3RoaXMucy5zZWxlY3Rpb25MaXN0Lmxlbmd0aC0xXS5pbmRleCxuPTAsbD10aGlzLnMucGFuZXM7bjxsLmxlbmd0aDtuKyspZj1sW25dLGYucy5sYXN0U2VsZWN0PWYucy5pbmRleD09PWEmJjE9PT10aGlzLnMuc2VsZWN0aW9uTGlzdC5sZW5ndGg7Zm9yKGY9MDtmPHRoaXMucy5zZWxlY3Rpb25MaXN0Lmxlbmd0aDtmKyspaWYodGhpcy5zLnNlbGVjdGlvbkxpc3RbZl0uaW5kZXghPT1lfHwhMD09PXRoaXMucy5zZWxlY3Rpb25MaXN0W2ZdLnByb3RlY3Qpe2E9ITE7Zm9yKG49ZisxO248dGhpcy5zLnNlbGVjdGlvbkxpc3QubGVuZ3RoO24rKyl0aGlzLnMuc2VsZWN0aW9uTGlzdFtuXS5pbmRleD09PQp0aGlzLnMuc2VsZWN0aW9uTGlzdFtmXS5pbmRleCYmKGE9ITApO2F8fChjLnB1c2godGhpcy5zLnNlbGVjdGlvbkxpc3RbZl0pLHRoaXMucy5zZWxlY3Rpb25MaXN0W2ZdLnByb3RlY3Q9ITEpfWE9MDtmb3Iobj10aGlzLnMucGFuZXM7YTxuLmxlbmd0aDthKyspaWYoZj1uW2FdLHZvaWQgMCE9PWYucy5kdFBhbmUpe2U9ITA7Zi5zLmZpbHRlcmluZ0FjdGl2ZT0hMDtpZigtMSE9PWImJm51bGwhPT1iJiZiPT09Zi5zLmluZGV4fHwhMT09PWQpZT0hMSxmLnMuZmlsdGVyaW5nQWN0aXZlPSExO2YudXBkYXRlUGFuZShlP2Q6ITEpfXRoaXMuX3VwZGF0ZUZpbHRlckNvdW50KCk7aWYoMDxjLmxlbmd0aCYmYy5sZW5ndGg8dGhpcy5zLnNlbGVjdGlvbkxpc3QubGVuZ3RoKWZvcih0aGlzLl9jYXNjYWRlUmVnZW4oYyksYT1jW2MubGVuZ3RoLTFdLmluZGV4LGI9MCxjPXRoaXMucy5wYW5lcztiPGMubGVuZ3RoO2IrKylmPWNbYl0sZi5zLmxhc3RTZWxlY3Q9Zi5zLmluZGV4PT09YSYmMT09PXRoaXMucy5zZWxlY3Rpb25MaXN0Lmxlbmd0aDsKZWxzZSBpZigwPGMubGVuZ3RoKWZvcihmPTAsYz10aGlzLnMucGFuZXM7ZjxjLmxlbmd0aDtmKyspaWYoYT1jW2ZdLHZvaWQgMCE9PWEucy5kdFBhbmUpe2U9ITA7YS5zLmZpbHRlcmluZ0FjdGl2ZT0hMDtpZigtMSE9PWImJm51bGwhPT1iJiZiPT09YS5zLmluZGV4fHwhMT09PWQpZT0hMSxhLnMuZmlsdGVyaW5nQWN0aXZlPSExO2EudXBkYXRlUGFuZShlP2Q6ZSl9fWR8fCh0aGlzLnMuc2VsZWN0aW9uTGlzdD1bXSl9fTtiLnByb3RvdHlwZS5fYXR0YWNoPWZ1bmN0aW9uKCl7JCh0aGlzLmRvbS5jb250YWluZXIpLnJlbW92ZUNsYXNzKHRoaXMuY2xhc3Nlcy5oaWRlKTskKHRoaXMuZG9tLnRpdGxlUm93KS5yZW1vdmVDbGFzcyh0aGlzLmNsYXNzZXMuaGlkZSk7JCh0aGlzLmRvbS50aXRsZVJvdykucmVtb3ZlKCk7JCh0aGlzLmRvbS50aXRsZSkuYXBwZW5kVG8odGhpcy5kb20udGl0bGVSb3cpO3RoaXMuYy5jbGVhciYmJCh0aGlzLmRvbS5jbGVhckFsbCkuYXBwZW5kVG8odGhpcy5kb20udGl0bGVSb3cpOwokKHRoaXMuZG9tLnRpdGxlUm93KS5hcHBlbmRUbyh0aGlzLmRvbS5jb250YWluZXIpO2Zvcih2YXIgYT0wLGQ9dGhpcy5zLnBhbmVzO2E8ZC5sZW5ndGg7YSsrKSQoZFthXS5kb20uY29udGFpbmVyKS5hcHBlbmRUbyh0aGlzLmRvbS5wYW5lcyk7JCh0aGlzLmRvbS5wYW5lcykuYXBwZW5kVG8odGhpcy5kb20uY29udGFpbmVyKTswPT09JCgiZGl2LiIrdGhpcy5jbGFzc2VzLmNvbnRhaW5lcikubGVuZ3RoJiYkKHRoaXMuZG9tLmNvbnRhaW5lcikucHJlcGVuZFRvKHRoaXMucy5kdCk7cmV0dXJuIHRoaXMuZG9tLmNvbnRhaW5lcn07Yi5wcm90b3R5cGUuX2F0dGFjaEV4dHJhcz1mdW5jdGlvbigpeyQodGhpcy5kb20uY29udGFpbmVyKS5yZW1vdmVDbGFzcyh0aGlzLmNsYXNzZXMuaGlkZSk7JCh0aGlzLmRvbS50aXRsZVJvdykucmVtb3ZlQ2xhc3ModGhpcy5jbGFzc2VzLmhpZGUpOyQodGhpcy5kb20udGl0bGVSb3cpLnJlbW92ZSgpOyQodGhpcy5kb20udGl0bGUpLmFwcGVuZFRvKHRoaXMuZG9tLnRpdGxlUm93KTsKdGhpcy5jLmNsZWFyJiYkKHRoaXMuZG9tLmNsZWFyQWxsKS5hcHBlbmRUbyh0aGlzLmRvbS50aXRsZVJvdyk7JCh0aGlzLmRvbS50aXRsZVJvdykuYXBwZW5kVG8odGhpcy5kb20uY29udGFpbmVyKTtyZXR1cm4gdGhpcy5kb20uY29udGFpbmVyfTtiLnByb3RvdHlwZS5fYXR0YWNoTWVzc2FnZT1mdW5jdGlvbigpe3RyeXt2YXIgYT10aGlzLnMuZHQuaTE4bigic2VhcmNoUGFuZXMuZW1wdHlQYW5lcyIsIk5vIFNlYXJjaFBhbmVzIil9Y2F0Y2goZCl7YT1udWxsfWlmKG51bGw9PT1hKSQodGhpcy5kb20uY29udGFpbmVyKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuaGlkZSksJCh0aGlzLmRvbS50aXRsZVJvdykucmVtb3ZlQ2xhc3ModGhpcy5jbGFzc2VzLmhpZGUpO2Vsc2UgcmV0dXJuICQodGhpcy5kb20uY29udGFpbmVyKS5yZW1vdmVDbGFzcyh0aGlzLmNsYXNzZXMuaGlkZSksJCh0aGlzLmRvbS50aXRsZVJvdykuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLmhpZGUpLCQodGhpcy5kb20uZW1wdHlNZXNzYWdlKS50ZXh0KGEpLAp0aGlzLmRvbS5lbXB0eU1lc3NhZ2UuYXBwZW5kVG8odGhpcy5kb20uY29udGFpbmVyKSx0aGlzLmRvbS5jb250YWluZXJ9O2IucHJvdG90eXBlLl9hdHRhY2hQYW5lQ29udGFpbmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsZD10aGlzLnMucGFuZXM7YTxkLmxlbmd0aDthKyspaWYoITA9PT1kW2FdLnMuZGlzcGxheWVkKXJldHVybiB0aGlzLl9hdHRhY2goKTtyZXR1cm4gdGhpcy5fYXR0YWNoTWVzc2FnZSgpfTtiLnByb3RvdHlwZS5fY2FzY2FkZVJlZ2VuPWZ1bmN0aW9uKGEpe3RoaXMucmVnZW5lcmF0aW5nPSEwO3ZhciBkPS0xOzE9PT1hLmxlbmd0aCYmKGQ9YVswXS5pbmRleCk7Zm9yKHZhciBiPTAsYz10aGlzLnMucGFuZXM7YjxjLmxlbmd0aDtiKyspe3ZhciBlPWNbYl07ZS5zZXRDYXNjYWRlUmVnZW4oITApO2Uuc2V0Q2xlYXIoITApOyh2b2lkIDAhPT1lLnMuZHRQYW5lJiZlLnMuaW5kZXg9PT1kfHx2b2lkIDAhPT1lLnMuZHRQYW5lKSYmZS5jbGVhclBhbmUoKTtlLnNldENsZWFyKCExKX10aGlzLl9tYWtlQ2FzY2FkZVNlbGVjdGlvbnMoYSk7CnRoaXMucy5zZWxlY3Rpb25MaXN0PWE7YT0wO2ZvcihkPXRoaXMucy5wYW5lczthPGQubGVuZ3RoO2ErKyllPWRbYV0sZS5zZXRDYXNjYWRlUmVnZW4oITEpO3RoaXMucmVnZW5lcmF0aW5nPSExfTtiLnByb3RvdHlwZS5fY2hlY2tNZXNzYWdlPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsZD10aGlzLnMucGFuZXM7YTxkLmxlbmd0aDthKyspaWYoITA9PT1kW2FdLnMuZGlzcGxheWVkKXJldHVybjtyZXR1cm4gdGhpcy5fYXR0YWNoTWVzc2FnZSgpfTtiLnByb3RvdHlwZS5fZ2V0U3RhdGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnMuZHQuc3RhdGUubG9hZGVkKCk7YSYmYS5zZWFyY2hQYW5lcyYmdm9pZCAwIT09YS5zZWFyY2hQYW5lcy5zZWxlY3Rpb25MaXN0JiYodGhpcy5zLnNlbGVjdGlvbkxpc3Q9YS5zZWFyY2hQYW5lcy5zZWxlY3Rpb25MaXN0KX07Yi5wcm90b3R5cGUuX21ha2VDYXNjYWRlU2VsZWN0aW9ucz1mdW5jdGlvbihhKXtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKylmb3IodmFyIGI9CmFbZF0sYz1mdW5jdGlvbihhKXtpZihhLnMuaW5kZXg9PT1iLmluZGV4JiZ2b2lkIDAhPT1hLnMuZHRQYW5lKXswPGEucy5kdFBhbmUucm93cyh7c2VsZWN0ZWQ6ITB9KS5kYXRhKCkudG9BcnJheSgpLmxlbmd0aCYmdm9pZCAwIT09YS5zLmR0UGFuZSYmKGEuc2V0Q2xlYXIoITApLGEuY2xlYXJQYW5lKCksYS5zZXRDbGVhcighMSkpO2Zvcih2YXIgYz1mdW5jdGlvbihjKXthLnMuZHRQYW5lLnJvd3MoKS5ldmVyeShmdW5jdGlvbihkKXthLnMuZHRQYW5lLnJvdyhkKS5kYXRhKCkuZmlsdGVyPT09Yy5maWx0ZXImJmEucy5kdFBhbmUucm93KGQpLnNlbGVjdCgpfSl9LGQ9MCxmPWIucm93cztkPGYubGVuZ3RoO2QrKyljKGZbZF0pO2UuX3VwZGF0ZUZpbHRlckNvdW50KCl9fSxlPXRoaXMsZj0wLG49dGhpcy5zLnBhbmVzO2Y8bi5sZW5ndGg7ZisrKWMobltmXSk7dGhpcy5zLmR0LnN0YXRlLnNhdmUoKX07Yi5wcm90b3R5cGUuX3BhbmVEZWNsYXJlPWZ1bmN0aW9uKGEsZCxiKXt2YXIgYz0KdGhpczthLmNvbHVtbnMoMDx0aGlzLmMuY29sdW1ucy5sZW5ndGg/dGhpcy5jLmNvbHVtbnM6dm9pZCAwKS5lcSgwKS5lYWNoKGZ1bmN0aW9uKGEpe2Mucy5wYW5lcy5wdXNoKG5ldyBtKGQsYixhLGMuYy5sYXlvdXQsYy5kb20ucGFuZXMpKX0pO2Zvcih2YXIgZT1hLmNvbHVtbnMoKS5lcSgwKS50b0FycmF5KCkubGVuZ3RoLGY9dGhpcy5jLnBhbmVzLmxlbmd0aCxnPTA7ZzxmO2crKyl0aGlzLnMucGFuZXMucHVzaChuZXcgbShkLGIsZStnLHRoaXMuYy5sYXlvdXQsdGhpcy5kb20ucGFuZXMsdGhpcy5jLnBhbmVzW2ddKSk7dGhpcy5zLmR0LnNldHRpbmdzKClbMF0uX2JJbml0Q29tcGxldGU/dGhpcy5fcGFuZVN0YXJ0dXAoYSk6dGhpcy5zLmR0LnNldHRpbmdzKClbMF0uYW9Jbml0Q29tcGxldGUucHVzaCh7Zm46ZnVuY3Rpb24oKXtjLl9wYW5lU3RhcnR1cChhKX19KX07Yi5wcm90b3R5cGUuX3BhbmVTdGFydHVwPWZ1bmN0aW9uKGEpe3ZhciBkPXRoaXM7NTAwPj10aGlzLnMuZHQucGFnZS5pbmZvKCkucmVjb3Jkc1RvdGFsPwp0aGlzLl9zdGFydHVwKGEpOnNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLl9zdGFydHVwKGEpfSwxMDApfTtiLnByb3RvdHlwZS5fc3RhcnR1cD1mdW5jdGlvbihhKXt2YXIgZD10aGlzOyQodGhpcy5kb20uY29udGFpbmVyKS50ZXh0KCIiKTt0aGlzLl9hdHRhY2hFeHRyYXMoKTskKHRoaXMuZG9tLmNvbnRhaW5lcikuYXBwZW5kKHRoaXMuZG9tLnBhbmVzKTtmb3IodmFyIGI9MCxjPXRoaXMucy5wYW5lcztiPGMubGVuZ3RoO2IrKyljW2JdLnJlYnVpbGRQYW5lKCk7dGhpcy5fdXBkYXRlRmlsdGVyQ291bnQoKTt0aGlzLl9jaGVja01lc3NhZ2UoKTthLm9uKCJkcmF3LmR0c3BzIixmdW5jdGlvbigpe2QuX3VwZGF0ZUZpbHRlckNvdW50KCk7KGQuYy5jYXNjYWRlUGFuZXN8fGQuYy52aWV3VG90YWwpJiZkLnJlZHJhd1BhbmVzKCk7ZC5zLmZpbHRlclBhbmU9LTF9KTt0aGlzLnMuZHQub24oInN0YXRlU2F2ZVBhcmFtcy5kdHNwIixmdW5jdGlvbihhLGMsYil7dm9pZCAwPT09Yi5zZWFyY2hQYW5lcyYmCihiLnNlYXJjaFBhbmVzPXt9KTtiLnNlYXJjaFBhbmVzLnNlbGVjdGlvbkxpc3Q9ZC5zLnNlbGVjdGlvbkxpc3R9KTswPHRoaXMucy5zZWxlY3Rpb25MaXN0Lmxlbmd0aCYmdGhpcy5jLmNhc2NhZGVQYW5lcyYmdGhpcy5fY2FzY2FkZVJlZ2VuKHRoaXMucy5zZWxlY3Rpb25MaXN0KTthLmNvbHVtbnMoMDx0aGlzLmMuY29sdW1ucy5sZW5ndGg/dGhpcy5jLmNvbHVtbnM6dm9pZCAwKS5lcSgwKS5lYWNoKGZ1bmN0aW9uKGEpe2lmKHZvaWQgMCE9PWQucy5wYW5lc1thXSYmdm9pZCAwIT09ZC5zLnBhbmVzW2FdLnMuZHRQYW5lJiZ2b2lkIDAhPT1kLnMucGFuZXNbYV0ucy5jb2xPcHRzLnByZVNlbGVjdClmb3IodmFyIGM9ZC5zLnBhbmVzW2FdLnMuZHRQYW5lLnJvd3MoKS5kYXRhKCkudG9BcnJheSgpLmxlbmd0aCxiPTA7YjxjO2IrKyktMSE9PWQucy5wYW5lc1thXS5zLmNvbE9wdHMucHJlU2VsZWN0LmluZGV4T2YoZC5zLnBhbmVzW2FdLnMuZHRQYW5lLmNlbGwoYiwwKS5kYXRhKCkpJiYKKGQucy5wYW5lc1thXS5zLmR0UGFuZS5yb3coYikuc2VsZWN0KCksZC5zLnBhbmVzW2FdLnVwZGF0ZVRhYmxlKCkpfSk7dGhpcy5fdXBkYXRlRmlsdGVyQ291bnQoKTthLm9uKCJkZXN0cm95LmR0c3BzIixmdW5jdGlvbigpe2Zvcih2YXIgYz0wLGI9ZC5zLnBhbmVzO2M8Yi5sZW5ndGg7YysrKWJbY10uZGVzdHJveSgpO2Eub2ZmKCIuZHRzcHMiKTskKGQuZG9tLmNsZWFyQWxsKS5vZmYoIi5kdHNwcyIpOyQoZC5kb20uY29udGFpbmVyKS5yZW1vdmUoKTtkLmNsZWFyU2VsZWN0aW9ucygpfSk7aWYodGhpcy5jLmNsZWFyKSQodGhpcy5kb20uY2xlYXJBbGwpLm9uKCJjbGljay5kdHNwcyIsZnVuY3Rpb24oKXtkLmNsZWFyU2VsZWN0aW9ucygpfSk7YS5zZXR0aW5ncygpWzBdLl9zZWFyY2hQYW5lcz10aGlzfTtiLnByb3RvdHlwZS5fdXBkYXRlRmlsdGVyQ291bnQ9ZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxiPTAsZj10aGlzLnMucGFuZXM7YjxmLmxlbmd0aDtiKyspe3ZhciBjPWZbYl07CnZvaWQgMCE9PWMucy5kdFBhbmUmJihhKz1jLmdldFBhbmVDb3VudCgpKX1hPXRoaXMucy5kdC5pMThuKCJzZWFyY2hQYW5lcy50aXRsZSIsIkZpbHRlcnMgQWN0aXZlIC0gJWQiLGEpOyQodGhpcy5kb20udGl0bGUpLnRleHQoYSl9O2IudmVyc2lvbj0iMS4wLjEiO2IuY2xhc3Nlcz17Y2xlYXI6ImR0c3AtY2xlYXIiLGNsZWFyQWxsOiJkdHNwLWNsZWFyQWxsIixjb250YWluZXI6ImR0c3Atc2VhcmNoUGFuZXMiLGVtcHR5TWVzc2FnZToiZHRzcC1lbXB0eU1lc3NhZ2UiLGhpZGU6ImR0c3AtaGlkZGVuIixwYW5lczoiZHRzcC1wYW5lc0NvbnRhaW5lciIsc2VhcmNoOiJkdHNwLXNlYXJjaCIsdGl0bGU6ImR0c3AtdGl0bGUiLHRpdGxlUm93OiJkdHNwLXRpdGxlUm93In07Yi5kZWZhdWx0cz17Y2FzY2FkZVBhbmVzOiExLGNsZWFyOiEwLGNvbnRhaW5lcjpmdW5jdGlvbihhKXtyZXR1cm4gYS50YWJsZSgpLmNvbnRhaW5lcigpfSxjb2x1bW5zOltdLGxheW91dDoiY29sdW1ucy0zIixwYW5lczpbXSwKdmlld1RvdGFsOiExfTtyZXR1cm4gYn0oKTsoZnVuY3Rpb24oYil7ImZ1bmN0aW9uIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsianF1ZXJ5IiwiZGF0YXRhYmxlcy5uZXQiXSxmdW5jdGlvbihhKXtyZXR1cm4gYihhLHdpbmRvdyxkb2N1bWVudCl9KToib2JqZWN0Ij09PXR5cGVvZiBleHBvcnRzP21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uKGEsZCl7YXx8KGE9d2luZG93KTtkJiZkLmZuLmRhdGFUYWJsZXx8KGQ9cmVxdWlyZSgiZGF0YXRhYmxlcy5uZXQiKShhLGQpLiQpO3JldHVybiBiKGQsYSxhLmRvY3VtZW50KX06Yih3aW5kb3cualF1ZXJ5LHdpbmRvdyxkb2N1bWVudCl9KShmdW5jdGlvbihiLGEsZCl7ZnVuY3Rpb24gZihhLGIpe3ZvaWQgMD09PWImJihiPSExKTthPW5ldyBjLkFwaShhKTt2YXIgZD1hLmluaXQoKS5zZWFyY2hQYW5lc3x8Yy5kZWZhdWx0cy5zZWFyY2hQYW5lcztyZXR1cm4obmV3IGgoYSxkLGIpKS5nZXROb2RlKCl9dmFyIGM9Yi5mbi5kYXRhVGFibGU7CmIuZm4uZGF0YVRhYmxlLlNlYXJjaFBhbmVzPWg7Yi5mbi5EYXRhVGFibGUuU2VhcmNoUGFuZXM9aDtiLmZuLmRhdGFUYWJsZS5TZWFyY2hQYW5lPW07Yi5mbi5EYXRhVGFibGUuU2VhcmNoUGFuZT1tO2MuQXBpLnJlZ2lzdGVyKCJzZWFyY2hQYW5lcy5yZWJ1aWxkKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbigpe3RoaXMuc2VhcmNoUGFuZXMmJnRoaXMuc2VhcmNoUGFuZXMucmVidWlsZCgpfSl9KTtjLkFwaS5yZWdpc3RlcigiY29sdW1uKCkucGFuZU9wdGlvbnMoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoImNvbHVtbiIsZnVuY3Rpb24oYil7Yj10aGlzLmFvQ29sdW1uc1tiXTtiLnNlYXJjaFBhbmVzfHwoYi5zZWFyY2hQYW5lcz17fSk7Yi5zZWFyY2hQYW5lcy52YWx1ZXM9YTt0aGlzLnNlYXJjaFBhbmVzJiZ0aGlzLnNlYXJjaFBhbmVzLnJlYnVpbGQoKX0pfSk7YT1iLmZuLmRhdGFUYWJsZS5BcGkucmVnaXN0ZXI7CmEoInNlYXJjaFBhbmVzKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KTthKCJzZWFyY2hQYW5lcy5jbGVhclNlbGVjdGlvbnMoKSIsZnVuY3Rpb24oKXt0aGlzLmNvbnRleHRbMF0uX3NlYXJjaFBhbmVzLmNsZWFyU2VsZWN0aW9ucygpO3JldHVybiB0aGlzfSk7YSgic2VhcmNoUGFuZXMucmVidWlsZFBhbmUoKSIsZnVuY3Rpb24oYSl7dGhpcy5jb250ZXh0WzBdLl9zZWFyY2hQYW5lcy5yZWJ1aWxkKGEpO3JldHVybiB0aGlzfSk7YSgic2VhcmNoUGFuZXMuY29udGFpbmVyKCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGV4dFswXS5fc2VhcmNoUGFuZXMuZ2V0Tm9kZSgpfSk7Yi5mbi5kYXRhVGFibGUuZXh0LmJ1dHRvbnMuc2VhcmNoUGFuZXNDbGVhcj17dGV4dDoiQ2xlYXIgUGFuZXMiLGFjdGlvbjpmdW5jdGlvbihhLGIsYyxkKXtiLnNlYXJjaFBhbmVzLmNsZWFyU2VsZWN0aW9ucygpfX07Yi5mbi5kYXRhVGFibGUuZXh0LmJ1dHRvbnMuc2VhcmNoUGFuZXM9e3RleHQ6IlNlYXJjaCBQYW5lcyIsCmluaXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPW5ldyBiLmZuLmRhdGFUYWJsZS5TZWFyY2hQYW5lcyhhLHtmaWx0ZXJDaGFuZ2VkOmZ1bmN0aW9uKGIpe2EuYnV0dG9uKGMpLnRleHQoYS5pMThuKCJzZWFyY2hQYW5lcy5jb2xsYXBzZSIsezA6IlNlYXJjaFBhbmVzIixfOiJTZWFyY2hQYW5lcyAoJWQpIn0sYikpfX0pLGY9YS5pMThuKCJzZWFyY2hQYW5lcy5jb2xsYXBzZSIsIlNlYXJjaFBhbmVzIik7YS5idXR0b24oYykudGV4dChmKTtkLl9wYW5lcz1lfSxhY3Rpb246ZnVuY3Rpb24oYSxiLGMsZCl7YS5zdG9wUHJvcGFnYXRpb24oKTt0aGlzLnBvcG92ZXIoZC5fcGFuZXMuZ2V0Tm9kZSgpLHthbGlnbjoiZHQtY29udGFpbmVyIn0pO2QuX3BhbmVzLmFkanVzdCgpfX07YihkKS5vbigicHJlSW5pdC5kdC5kdHNwIixmdW5jdGlvbihhLGIsZCl7ImR0Ij09PWEubmFtZXNwYWNlJiYoYi5vSW5pdC5zZWFyY2hQYW5lc3x8Yy5kZWZhdWx0cy5zZWFyY2hQYW5lcykmJihiLl9zZWFyY2hQYW5lc3x8CmYoYiwhMCkpfSk7Yy5leHQuZmVhdHVyZS5wdXNoKHtjRmVhdHVyZToiUCIsZm5Jbml0OmZ9KTtjLmV4dC5mZWF0dXJlcyYmYy5leHQuZmVhdHVyZXMucmVnaXN0ZXIoInNlYXJjaFBhbmVzIixmKX0pfSkoKTsKCgovKiEKICAgQ29weXJpZ2h0IDIwMTUtMjAxOSBTcHJ5TWVkaWEgTHRkLgoKIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgYXZhaWxhYmxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKICAgTUlUIGxpY2Vuc2UgLSBodHRwOi8vZGF0YXRhYmxlcy5uZXQvbGljZW5zZS9taXQKCiBUaGlzIHNvdXJjZSBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIGxpY2Vuc2UgZmlsZXMgZm9yIGRldGFpbHMuCgogRm9yIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvOiBodHRwOi8vd3d3LmRhdGF0YWJsZXMubmV0L2V4dGVuc2lvbnMvc2VsZWN0CiBTZWxlY3QgZm9yIERhdGFUYWJsZXMgMS4zLjEKIDIwMTUtMjAxOSBTcHJ5TWVkaWEgTHRkIC0gZGF0YXRhYmxlcy5uZXQvbGljZW5zZS9taXQKKi8KKGZ1bmN0aW9uKGYpeyJmdW5jdGlvbiI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImpxdWVyeSIsImRhdGF0YWJsZXMubmV0Il0sZnVuY3Rpb24oayl7cmV0dXJuIGYoayx3aW5kb3csZG9jdW1lbnQpfSk6Im9iamVjdCI9PT10eXBlb2YgZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1mdW5jdGlvbihrLHApe2t8fChrPXdpbmRvdyk7cCYmcC5mbi5kYXRhVGFibGV8fChwPXJlcXVpcmUoImRhdGF0YWJsZXMubmV0IikoayxwKS4kKTtyZXR1cm4gZihwLGssay5kb2N1bWVudCl9OmYoalF1ZXJ5LHdpbmRvdyxkb2N1bWVudCl9KShmdW5jdGlvbihmLGsscCxoKXtmdW5jdGlvbiB6KGEsYixjKXt2YXIgZD1mdW5jdGlvbihjLGIpe2lmKGM+Yil7dmFyIGQ9YjtiPWM7Yz1kfXZhciBlPSExO3JldHVybiBhLmNvbHVtbnMoIjp2aXNpYmxlIikuaW5kZXhlcygpLmZpbHRlcihmdW5jdGlvbihhKXthPT09YyYmKGU9ITApO3JldHVybiBhPT09Yj8oZT0hMSwhMCk6ZX0pfTt2YXIgZT0KZnVuY3Rpb24oYyxiKXt2YXIgZD1hLnJvd3Moe3NlYXJjaDoiYXBwbGllZCJ9KS5pbmRleGVzKCk7aWYoZC5pbmRleE9mKGMpPmQuaW5kZXhPZihiKSl7dmFyIGU9YjtiPWM7Yz1lfXZhciBmPSExO3JldHVybiBkLmZpbHRlcihmdW5jdGlvbihhKXthPT09YyYmKGY9ITApO3JldHVybiBhPT09Yj8oZj0hMSwhMCk6Zn0pfTthLmNlbGxzKHtzZWxlY3RlZDohMH0pLmFueSgpfHxjPyhkPWQoYy5jb2x1bW4sYi5jb2x1bW4pLGM9ZShjLnJvdyxiLnJvdykpOihkPWQoMCxiLmNvbHVtbiksYz1lKDAsYi5yb3cpKTtjPWEuY2VsbHMoYyxkKS5mbGF0dGVuKCk7YS5jZWxscyhiLHtzZWxlY3RlZDohMH0pLmFueSgpP2EuY2VsbHMoYykuZGVzZWxlY3QoKTphLmNlbGxzKGMpLnNlbGVjdCgpfWZ1bmN0aW9uIHYoYSl7dmFyIGI9YS5zZXR0aW5ncygpWzBdLl9zZWxlY3Quc2VsZWN0b3I7ZihhLnRhYmxlKCkuY29udGFpbmVyKCkpLm9mZigibW91c2Vkb3duLmR0U2VsZWN0IixiKS5vZmYoIm1vdXNldXAuZHRTZWxlY3QiLApiKS5vZmYoImNsaWNrLmR0U2VsZWN0IixiKTtmKCJib2R5Iikub2ZmKCJjbGljay5kdFNlbGVjdCIrYS50YWJsZSgpLm5vZGUoKS5pZC5yZXBsYWNlKC9bXmEtekEtWjAtOVwtX10vZywiLSIpKX1mdW5jdGlvbiBBKGEpe3ZhciBiPWYoYS50YWJsZSgpLmNvbnRhaW5lcigpKSxjPWEuc2V0dGluZ3MoKVswXSxkPWMuX3NlbGVjdC5zZWxlY3RvcixlO2Iub24oIm1vdXNlZG93bi5kdFNlbGVjdCIsZCxmdW5jdGlvbihhKXtpZihhLnNoaWZ0S2V5fHxhLm1ldGFLZXl8fGEuY3RybEtleSliLmNzcygiLW1vei11c2VyLXNlbGVjdCIsIm5vbmUiKS5vbmUoInNlbGVjdHN0YXJ0LmR0U2VsZWN0IixkLGZ1bmN0aW9uKCl7cmV0dXJuITF9KTtrLmdldFNlbGVjdGlvbiYmKGU9ay5nZXRTZWxlY3Rpb24oKSl9KS5vbigibW91c2V1cC5kdFNlbGVjdCIsZCxmdW5jdGlvbigpe2IuY3NzKCItbW96LXVzZXItc2VsZWN0IiwiIil9KS5vbigiY2xpY2suZHRTZWxlY3QiLGQsZnVuY3Rpb24oYyl7dmFyIGI9CmEuc2VsZWN0Lml0ZW1zKCk7aWYoZSl7dmFyIGQ9ay5nZXRTZWxlY3Rpb24oKTtpZigoIWQuYW5jaG9yTm9kZXx8ZihkLmFuY2hvck5vZGUpLmNsb3Nlc3QoInRhYmxlIilbMF09PT1hLnRhYmxlKCkubm9kZSgpKSYmZCE9PWUpcmV0dXJufWQ9YS5zZXR0aW5ncygpWzBdO3ZhciBsPWYudHJpbShhLnNldHRpbmdzKClbMF0ub0NsYXNzZXMuc1dyYXBwZXIpLnJlcGxhY2UoLyArL2csIi4iKTtpZihmKGMudGFyZ2V0KS5jbG9zZXN0KCJkaXYuIitsKVswXT09YS50YWJsZSgpLmNvbnRhaW5lcigpJiYobD1hLmNlbGwoZihjLnRhcmdldCkuY2xvc2VzdCgidGQsIHRoIikpLGwuYW55KCkpKXt2YXIgZz1mLkV2ZW50KCJ1c2VyLXNlbGVjdC5kdCIpO20oYSxnLFtiLGwsY10pO2cuaXNEZWZhdWx0UHJldmVudGVkKCl8fChnPWwuaW5kZXgoKSwicm93Ij09PWI/KGI9Zy5yb3csdyhjLGEsZCwicm93IixiKSk6ImNvbHVtbiI9PT1iPyhiPWwuaW5kZXgoKS5jb2x1bW4sdyhjLGEsZCwiY29sdW1uIiwKYikpOiJjZWxsIj09PWImJihiPWwuaW5kZXgoKSx3KGMsYSxkLCJjZWxsIixiKSksZC5fc2VsZWN0X2xhc3RDZWxsPWcpfX0pO2YoImJvZHkiKS5vbigiY2xpY2suZHRTZWxlY3QiK2EudGFibGUoKS5ub2RlKCkuaWQucmVwbGFjZSgvW15hLXpBLVowLTlcLV9dL2csIi0iKSxmdW5jdGlvbihiKXshYy5fc2VsZWN0LmJsdXJhYmxlfHxmKGIudGFyZ2V0KS5wYXJlbnRzKCkuZmlsdGVyKGEudGFibGUoKS5jb250YWluZXIoKSkubGVuZ3RofHwwPT09ZihiLnRhcmdldCkucGFyZW50cygiaHRtbCIpLmxlbmd0aHx8ZihiLnRhcmdldCkucGFyZW50cygiZGl2LkRURSIpLmxlbmd0aHx8cihjLCEwKX0pfWZ1bmN0aW9uIG0oYSxiLGMsZCl7aWYoIWR8fGEuZmxhdHRlbigpLmxlbmd0aCkic3RyaW5nIj09PXR5cGVvZiBiJiYoYis9Ii5kdCIpLGMudW5zaGlmdChhKSxmKGEudGFibGUoKS5ub2RlKCkpLnRyaWdnZXIoYixjKX1mdW5jdGlvbiBCKGEpe3ZhciBiPWEuc2V0dGluZ3MoKVswXTtpZihiLl9zZWxlY3QuaW5mbyYmCmIuYWFuRmVhdHVyZXMuaSYmImFwaSIhPT1hLnNlbGVjdC5zdHlsZSgpKXt2YXIgYz1hLnJvd3Moe3NlbGVjdGVkOiEwfSkuZmxhdHRlbigpLmxlbmd0aCxkPWEuY29sdW1ucyh7c2VsZWN0ZWQ6ITB9KS5mbGF0dGVuKCkubGVuZ3RoLGU9YS5jZWxscyh7c2VsZWN0ZWQ6ITB9KS5mbGF0dGVuKCkubGVuZ3RoLGw9ZnVuY3Rpb24oYixjLGQpe2IuYXBwZW5kKGYoJzxzcGFuIGNsYXNzPSJzZWxlY3QtaXRlbSIvPicpLmFwcGVuZChhLmkxOG4oInNlbGVjdC4iK2MrInMiLHtfOiIlZCAiK2MrInMgc2VsZWN0ZWQiLDA6IiIsMToiMSAiK2MrIiBzZWxlY3RlZCJ9LGQpKSl9O2YuZWFjaChiLmFhbkZlYXR1cmVzLmksZnVuY3Rpb24oYixhKXthPWYoYSk7Yj1mKCc8c3BhbiBjbGFzcz0ic2VsZWN0LWluZm8iLz4nKTtsKGIsInJvdyIsYyk7bChiLCJjb2x1bW4iLGQpO2woYiwiY2VsbCIsZSk7dmFyIGc9YS5jaGlsZHJlbigic3Bhbi5zZWxlY3QtaW5mbyIpO2cubGVuZ3RoJiZnLnJlbW92ZSgpOwoiIiE9PWIudGV4dCgpJiZhLmFwcGVuZChiKX0pfX1mdW5jdGlvbiBEKGEpe3ZhciBiPW5ldyBnLkFwaShhKTthLmFvUm93Q3JlYXRlZENhbGxiYWNrLnB1c2goe2ZuOmZ1bmN0aW9uKGIsZCxlKXtkPWEuYW9EYXRhW2VdO2QuX3NlbGVjdF9zZWxlY3RlZCYmZihiKS5hZGRDbGFzcyhhLl9zZWxlY3QuY2xhc3NOYW1lKTtiPTA7Zm9yKGU9YS5hb0NvbHVtbnMubGVuZ3RoO2I8ZTtiKyspKGEuYW9Db2x1bW5zW2JdLl9zZWxlY3Rfc2VsZWN0ZWR8fGQuX3NlbGVjdGVkX2NlbGxzJiZkLl9zZWxlY3RlZF9jZWxsc1tiXSkmJmYoZC5hbkNlbGxzW2JdKS5hZGRDbGFzcyhhLl9zZWxlY3QuY2xhc3NOYW1lKX0sc05hbWU6InNlbGVjdC1kZWZlclJlbmRlciJ9KTtiLm9uKCJwcmVYaHIuZHQuZHRTZWxlY3QiLGZ1bmN0aW9uKCl7dmFyIGE9Yi5yb3dzKHtzZWxlY3RlZDohMH0pLmlkcyghMCkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBiIT09aH0pLGQ9Yi5jZWxscyh7c2VsZWN0ZWQ6ITB9KS5lcSgwKS5tYXAoZnVuY3Rpb24oYSl7dmFyIGM9CmIucm93KGEucm93KS5pZCghMCk7cmV0dXJuIGM/e3JvdzpjLGNvbHVtbjphLmNvbHVtbn06aH0pLmZpbHRlcihmdW5jdGlvbihiKXtyZXR1cm4gYiE9PWh9KTtiLm9uZSgiZHJhdy5kdC5kdFNlbGVjdCIsZnVuY3Rpb24oKXtiLnJvd3MoYSkuc2VsZWN0KCk7ZC5hbnkoKSYmZC5lYWNoKGZ1bmN0aW9uKGEpe2IuY2VsbHMoYS5yb3csYS5jb2x1bW4pLnNlbGVjdCgpfSl9KX0pO2Iub24oImRyYXcuZHRTZWxlY3QuZHQgc2VsZWN0LmR0U2VsZWN0LmR0IGRlc2VsZWN0LmR0U2VsZWN0LmR0IGluZm8uZHQiLGZ1bmN0aW9uKCl7QihiKX0pO2Iub24oImRlc3Ryb3kuZHRTZWxlY3QiLGZ1bmN0aW9uKCl7dihiKTtiLm9mZigiLmR0U2VsZWN0Iil9KX1mdW5jdGlvbiBDKGEsYixjLGQpe3ZhciBlPWFbYisicyJdKHtzZWFyY2g6ImFwcGxpZWQifSkuaW5kZXhlcygpO2Q9Zi5pbkFycmF5KGQsZSk7dmFyIGc9Zi5pbkFycmF5KGMsZSk7aWYoYVtiKyJzIl0oe3NlbGVjdGVkOiEwfSkuYW55KCl8fAotMSE9PWQpe2lmKGQ+Zyl7dmFyIHU9ZztnPWQ7ZD11fWUuc3BsaWNlKGcrMSxlLmxlbmd0aCk7ZS5zcGxpY2UoMCxkKX1lbHNlIGUuc3BsaWNlKGYuaW5BcnJheShjLGUpKzEsZS5sZW5ndGgpO2FbYl0oYyx7c2VsZWN0ZWQ6ITB9KS5hbnkoKT8oZS5zcGxpY2UoZi5pbkFycmF5KGMsZSksMSksYVtiKyJzIl0oZSkuZGVzZWxlY3QoKSk6YVtiKyJzIl0oZSkuc2VsZWN0KCl9ZnVuY3Rpb24gcihhLGIpe2lmKGJ8fCJzaW5nbGUiPT09YS5fc2VsZWN0LnN0eWxlKWE9bmV3IGcuQXBpKGEpLGEucm93cyh7c2VsZWN0ZWQ6ITB9KS5kZXNlbGVjdCgpLGEuY29sdW1ucyh7c2VsZWN0ZWQ6ITB9KS5kZXNlbGVjdCgpLGEuY2VsbHMoe3NlbGVjdGVkOiEwfSkuZGVzZWxlY3QoKX1mdW5jdGlvbiB3KGEsYixjLGQsZSl7dmFyIGY9Yi5zZWxlY3Quc3R5bGUoKSxnPWIuc2VsZWN0LnRvZ2dsZWFibGUoKSxoPWJbZF0oZSx7c2VsZWN0ZWQ6ITB9KS5hbnkoKTtpZighaHx8Zykib3MiPT09Zj9hLmN0cmxLZXl8fAphLm1ldGFLZXk/YltkXShlKS5zZWxlY3QoIWgpOmEuc2hpZnRLZXk/ImNlbGwiPT09ZD96KGIsZSxjLl9zZWxlY3RfbGFzdENlbGx8fG51bGwpOkMoYixkLGUsYy5fc2VsZWN0X2xhc3RDZWxsP2MuX3NlbGVjdF9sYXN0Q2VsbFtkXTpudWxsKTooYT1iW2QrInMiXSh7c2VsZWN0ZWQ6ITB9KSxoJiYxPT09YS5mbGF0dGVuKCkubGVuZ3RoP2JbZF0oZSkuZGVzZWxlY3QoKTooYS5kZXNlbGVjdCgpLGJbZF0oZSkuc2VsZWN0KCkpKToibXVsdGkrc2hpZnQiPT1mP2Euc2hpZnRLZXk/ImNlbGwiPT09ZD96KGIsZSxjLl9zZWxlY3RfbGFzdENlbGx8fG51bGwpOkMoYixkLGUsYy5fc2VsZWN0X2xhc3RDZWxsP2MuX3NlbGVjdF9sYXN0Q2VsbFtkXTpudWxsKTpiW2RdKGUpLnNlbGVjdCghaCk6YltkXShlKS5zZWxlY3QoIWgpfWZ1bmN0aW9uIHQoYSxiKXtyZXR1cm4gZnVuY3Rpb24oYyl7cmV0dXJuIGMuaTE4bigiYnV0dG9ucy4iK2EsYil9fWZ1bmN0aW9uIHgoYSl7YT1hLl9ldmVudE5hbWVzcGFjZTsKcmV0dXJuImRyYXcuZHQuRFQiK2ErIiBzZWxlY3QuZHQuRFQiK2ErIiBkZXNlbGVjdC5kdC5EVCIrYX1mdW5jdGlvbiBFKGEsYil7cmV0dXJuLTEhPT1mLmluQXJyYXkoInJvd3MiLGIubGltaXRUbykmJmEucm93cyh7c2VsZWN0ZWQ6ITB9KS5hbnkoKXx8LTEhPT1mLmluQXJyYXkoImNvbHVtbnMiLGIubGltaXRUbykmJmEuY29sdW1ucyh7c2VsZWN0ZWQ6ITB9KS5hbnkoKXx8LTEhPT1mLmluQXJyYXkoImNlbGxzIixiLmxpbWl0VG8pJiZhLmNlbGxzKHtzZWxlY3RlZDohMH0pLmFueSgpPyEwOiExfXZhciBnPWYuZm4uZGF0YVRhYmxlO2cuc2VsZWN0PXt9O2cuc2VsZWN0LnZlcnNpb249IjEuMy4xIjtnLnNlbGVjdC5pbml0PWZ1bmN0aW9uKGEpe3ZhciBiPWEuc2V0dGluZ3MoKVswXSxjPWIub0luaXQuc2VsZWN0LGQ9Zy5kZWZhdWx0cy5zZWxlY3Q7Yz1jPT09aD9kOmM7ZD0icm93Ijt2YXIgZT0iYXBpIixsPSExLHU9ITAsaz0hMCxtPSJ0ZCwgdGgiLHA9InNlbGVjdGVkIixuPSExOwpiLl9zZWxlY3Q9e307ITA9PT1jPyhlPSJvcyIsbj0hMCk6InN0cmluZyI9PT10eXBlb2YgYz8oZT1jLG49ITApOmYuaXNQbGFpbk9iamVjdChjKSYmKGMuYmx1cmFibGUhPT1oJiYobD1jLmJsdXJhYmxlKSxjLnRvZ2dsZWFibGUhPT1oJiYodT1jLnRvZ2dsZWFibGUpLGMuaW5mbyE9PWgmJihrPWMuaW5mbyksYy5pdGVtcyE9PWgmJihkPWMuaXRlbXMpLGU9Yy5zdHlsZSE9PWg/Yy5zdHlsZToib3MiLG49ITAsYy5zZWxlY3RvciE9PWgmJihtPWMuc2VsZWN0b3IpLGMuY2xhc3NOYW1lIT09aCYmKHA9Yy5jbGFzc05hbWUpKTthLnNlbGVjdC5zZWxlY3RvcihtKTthLnNlbGVjdC5pdGVtcyhkKTthLnNlbGVjdC5zdHlsZShlKTthLnNlbGVjdC5ibHVyYWJsZShsKTthLnNlbGVjdC50b2dnbGVhYmxlKHUpO2Euc2VsZWN0LmluZm8oayk7Yi5fc2VsZWN0LmNsYXNzTmFtZT1wO2YuZm4uZGF0YVRhYmxlLmV4dC5vcmRlclsic2VsZWN0LWNoZWNrYm94Il09ZnVuY3Rpb24oYixhKXtyZXR1cm4gdGhpcy5hcGkoKS5jb2x1bW4oYSwKe29yZGVyOiJpbmRleCJ9KS5ub2RlcygpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4icm93Ij09PWIuX3NlbGVjdC5pdGVtcz9mKGEpLnBhcmVudCgpLmhhc0NsYXNzKGIuX3NlbGVjdC5jbGFzc05hbWUpOiJjZWxsIj09PWIuX3NlbGVjdC5pdGVtcz9mKGEpLmhhc0NsYXNzKGIuX3NlbGVjdC5jbGFzc05hbWUpOiExfSl9OyFuJiZmKGEudGFibGUoKS5ub2RlKCkpLmhhc0NsYXNzKCJzZWxlY3RhYmxlIikmJmEuc2VsZWN0LnN0eWxlKCJvcyIpfTtmLmVhY2goW3t0eXBlOiJyb3ciLHByb3A6ImFvRGF0YSJ9LHt0eXBlOiJjb2x1bW4iLHByb3A6ImFvQ29sdW1ucyJ9XSxmdW5jdGlvbihhLGIpe2cuZXh0LnNlbGVjdG9yW2IudHlwZV0ucHVzaChmdW5jdGlvbihhLGQsZSl7ZD1kLnNlbGVjdGVkO3ZhciBjPVtdO2lmKCEwIT09ZCYmITEhPT1kKXJldHVybiBlO2Zvcih2YXIgZj0wLGc9ZS5sZW5ndGg7ZjxnO2YrKyl7dmFyIGg9YVtiLnByb3BdW2VbZl1dOyghMD09PWQmJiEwPT09aC5fc2VsZWN0X3NlbGVjdGVkfHwKITE9PT1kJiYhaC5fc2VsZWN0X3NlbGVjdGVkKSYmYy5wdXNoKGVbZl0pfXJldHVybiBjfSl9KTtnLmV4dC5zZWxlY3Rvci5jZWxsLnB1c2goZnVuY3Rpb24oYSxiLGMpe2I9Yi5zZWxlY3RlZDt2YXIgZD1bXTtpZihiPT09aClyZXR1cm4gYztmb3IodmFyIGU9MCxmPWMubGVuZ3RoO2U8ZjtlKyspe3ZhciBnPWEuYW9EYXRhW2NbZV0ucm93XTsoITA9PT1iJiZnLl9zZWxlY3RlZF9jZWxscyYmITA9PT1nLl9zZWxlY3RlZF9jZWxsc1tjW2VdLmNvbHVtbl18fCEoITEhPT1ifHxnLl9zZWxlY3RlZF9jZWxscyYmZy5fc2VsZWN0ZWRfY2VsbHNbY1tlXS5jb2x1bW5dKSkmJmQucHVzaChjW2VdKX1yZXR1cm4gZH0pO3ZhciBuPWcuQXBpLnJlZ2lzdGVyLHE9Zy5BcGkucmVnaXN0ZXJQbHVyYWw7bigic2VsZWN0KCkiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihhKXtnLnNlbGVjdC5pbml0KG5ldyBnLkFwaShhKSl9KX0pO24oInNlbGVjdC5ibHVyYWJsZSgpIiwKZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1oP3RoaXMuY29udGV4dFswXS5fc2VsZWN0LmJsdXJhYmxlOnRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihiKXtiLl9zZWxlY3QuYmx1cmFibGU9YX0pfSk7bigic2VsZWN0LnRvZ2dsZWFibGUoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1oP3RoaXMuY29udGV4dFswXS5fc2VsZWN0LnRvZ2dsZWFibGU6dGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGIpe2IuX3NlbGVjdC50b2dnbGVhYmxlPWF9KX0pO24oInNlbGVjdC5pbmZvKCkiLGZ1bmN0aW9uKGEpe3JldHVybiBCPT09aD90aGlzLmNvbnRleHRbMF0uX3NlbGVjdC5pbmZvOnRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihiKXtiLl9zZWxlY3QuaW5mbz1hfSl9KTtuKCJzZWxlY3QuaXRlbXMoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1oP3RoaXMuY29udGV4dFswXS5fc2VsZWN0Lml0ZW1zOnRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihiKXtiLl9zZWxlY3QuaXRlbXM9CmE7bShuZXcgZy5BcGkoYiksInNlbGVjdEl0ZW1zIixbYV0pfSl9KTtuKCJzZWxlY3Quc3R5bGUoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1oP3RoaXMuY29udGV4dFswXS5fc2VsZWN0LnN0eWxlOnRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihiKXtiLl9zZWxlY3Quc3R5bGU9YTtiLl9zZWxlY3RfaW5pdHx8RChiKTt2YXIgYz1uZXcgZy5BcGkoYik7dihjKTsiYXBpIiE9PWEmJkEoYyk7bShuZXcgZy5BcGkoYiksInNlbGVjdFN0eWxlIixbYV0pfSl9KTtuKCJzZWxlY3Quc2VsZWN0b3IoKSIsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1oP3RoaXMuY29udGV4dFswXS5fc2VsZWN0LnNlbGVjdG9yOnRoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihiKXt2KG5ldyBnLkFwaShiKSk7Yi5fc2VsZWN0LnNlbGVjdG9yPWE7ImFwaSIhPT1iLl9zZWxlY3Quc3R5bGUmJkEobmV3IGcuQXBpKGIpKX0pfSk7cSgicm93cygpLnNlbGVjdCgpIiwicm93KCkuc2VsZWN0KCkiLGZ1bmN0aW9uKGEpe3ZhciBiPQp0aGlzO2lmKCExPT09YSlyZXR1cm4gdGhpcy5kZXNlbGVjdCgpO3RoaXMuaXRlcmF0b3IoInJvdyIsZnVuY3Rpb24oYixhKXtyKGIpO2IuYW9EYXRhW2FdLl9zZWxlY3Rfc2VsZWN0ZWQ9ITA7ZihiLmFvRGF0YVthXS5uVHIpLmFkZENsYXNzKGIuX3NlbGVjdC5jbGFzc05hbWUpfSk7dGhpcy5pdGVyYXRvcigidGFibGUiLGZ1bmN0aW9uKGEsZCl7bShiLCJzZWxlY3QiLFsicm93IixiW2RdXSwhMCl9KTtyZXR1cm4gdGhpc30pO3EoImNvbHVtbnMoKS5zZWxlY3QoKSIsImNvbHVtbigpLnNlbGVjdCgpIixmdW5jdGlvbihhKXt2YXIgYj10aGlzO2lmKCExPT09YSlyZXR1cm4gdGhpcy5kZXNlbGVjdCgpO3RoaXMuaXRlcmF0b3IoImNvbHVtbiIsZnVuY3Rpb24oYixhKXtyKGIpO2IuYW9Db2x1bW5zW2FdLl9zZWxlY3Rfc2VsZWN0ZWQ9ITA7YT0obmV3IGcuQXBpKGIpKS5jb2x1bW4oYSk7ZihhLmhlYWRlcigpKS5hZGRDbGFzcyhiLl9zZWxlY3QuY2xhc3NOYW1lKTtmKGEuZm9vdGVyKCkpLmFkZENsYXNzKGIuX3NlbGVjdC5jbGFzc05hbWUpOwphLm5vZGVzKCkudG8kKCkuYWRkQ2xhc3MoYi5fc2VsZWN0LmNsYXNzTmFtZSl9KTt0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYSxkKXttKGIsInNlbGVjdCIsWyJjb2x1bW4iLGJbZF1dLCEwKX0pO3JldHVybiB0aGlzfSk7cSgiY2VsbHMoKS5zZWxlY3QoKSIsImNlbGwoKS5zZWxlY3QoKSIsZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZighMT09PWEpcmV0dXJuIHRoaXMuZGVzZWxlY3QoKTt0aGlzLml0ZXJhdG9yKCJjZWxsIixmdW5jdGlvbihiLGEsZSl7cihiKTthPWIuYW9EYXRhW2FdO2EuX3NlbGVjdGVkX2NlbGxzPT09aCYmKGEuX3NlbGVjdGVkX2NlbGxzPVtdKTthLl9zZWxlY3RlZF9jZWxsc1tlXT0hMDthLmFuQ2VsbHMmJmYoYS5hbkNlbGxzW2VdKS5hZGRDbGFzcyhiLl9zZWxlY3QuY2xhc3NOYW1lKX0pO3RoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihhLGQpe20oYiwic2VsZWN0IixbImNlbGwiLGJbZF1dLCEwKX0pO3JldHVybiB0aGlzfSk7cSgicm93cygpLmRlc2VsZWN0KCkiLAoicm93KCkuZGVzZWxlY3QoKSIsZnVuY3Rpb24oKXt2YXIgYT10aGlzO3RoaXMuaXRlcmF0b3IoInJvdyIsZnVuY3Rpb24oYSxjKXthLmFvRGF0YVtjXS5fc2VsZWN0X3NlbGVjdGVkPSExO2YoYS5hb0RhdGFbY10ublRyKS5yZW1vdmVDbGFzcyhhLl9zZWxlY3QuY2xhc3NOYW1lKX0pO3RoaXMuaXRlcmF0b3IoInRhYmxlIixmdW5jdGlvbihiLGMpe20oYSwiZGVzZWxlY3QiLFsicm93IixhW2NdXSwhMCl9KTtyZXR1cm4gdGhpc30pO3EoImNvbHVtbnMoKS5kZXNlbGVjdCgpIiwiY29sdW1uKCkuZGVzZWxlY3QoKSIsZnVuY3Rpb24oKXt2YXIgYT10aGlzO3RoaXMuaXRlcmF0b3IoImNvbHVtbiIsZnVuY3Rpb24oYSxjKXthLmFvQ29sdW1uc1tjXS5fc2VsZWN0X3NlbGVjdGVkPSExO3ZhciBiPW5ldyBnLkFwaShhKSxlPWIuY29sdW1uKGMpO2YoZS5oZWFkZXIoKSkucmVtb3ZlQ2xhc3MoYS5fc2VsZWN0LmNsYXNzTmFtZSk7ZihlLmZvb3RlcigpKS5yZW1vdmVDbGFzcyhhLl9zZWxlY3QuY2xhc3NOYW1lKTsKYi5jZWxscyhudWxsLGMpLmluZGV4ZXMoKS5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWEuYW9EYXRhW2Iucm93XSxkPWMuX3NlbGVjdGVkX2NlbGxzOyFjLmFuQ2VsbHN8fGQmJmRbYi5jb2x1bW5dfHxmKGMuYW5DZWxsc1tiLmNvbHVtbl0pLnJlbW92ZUNsYXNzKGEuX3NlbGVjdC5jbGFzc05hbWUpfSl9KTt0aGlzLml0ZXJhdG9yKCJ0YWJsZSIsZnVuY3Rpb24oYixjKXttKGEsImRlc2VsZWN0IixbImNvbHVtbiIsYVtjXV0sITApfSk7cmV0dXJuIHRoaXN9KTtxKCJjZWxscygpLmRlc2VsZWN0KCkiLCJjZWxsKCkuZGVzZWxlY3QoKSIsZnVuY3Rpb24oKXt2YXIgYT10aGlzO3RoaXMuaXRlcmF0b3IoImNlbGwiLGZ1bmN0aW9uKGEsYyxkKXtjPWEuYW9EYXRhW2NdO2MuX3NlbGVjdGVkX2NlbGxzW2RdPSExO2MuYW5DZWxscyYmIWEuYW9Db2x1bW5zW2RdLl9zZWxlY3Rfc2VsZWN0ZWQmJmYoYy5hbkNlbGxzW2RdKS5yZW1vdmVDbGFzcyhhLl9zZWxlY3QuY2xhc3NOYW1lKX0pO3RoaXMuaXRlcmF0b3IoInRhYmxlIiwKZnVuY3Rpb24oYixjKXttKGEsImRlc2VsZWN0IixbImNlbGwiLGFbY11dLCEwKX0pO3JldHVybiB0aGlzfSk7dmFyIHk9MDtmLmV4dGVuZChnLmV4dC5idXR0b25zLHtzZWxlY3RlZDp7dGV4dDp0KCJzZWxlY3RlZCIsIlNlbGVjdGVkIiksY2xhc3NOYW1lOiJidXR0b25zLXNlbGVjdGVkIixsaW1pdFRvOlsicm93cyIsImNvbHVtbnMiLCJjZWxscyJdLGluaXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXM7Yy5fZXZlbnROYW1lc3BhY2U9Ii5zZWxlY3QiK3krKzthLm9uKHgoYyksZnVuY3Rpb24oKXtkLmVuYWJsZShFKGEsYykpfSk7dGhpcy5kaXNhYmxlKCl9LGRlc3Ryb3k6ZnVuY3Rpb24oYSxiLGMpe2Eub2ZmKGMuX2V2ZW50TmFtZXNwYWNlKX19LHNlbGVjdGVkU2luZ2xlOnt0ZXh0OnQoInNlbGVjdGVkU2luZ2xlIiwiU2VsZWN0ZWQgc2luZ2xlIiksY2xhc3NOYW1lOiJidXR0b25zLXNlbGVjdGVkLXNpbmdsZSIsaW5pdDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcztjLl9ldmVudE5hbWVzcGFjZT0KIi5zZWxlY3QiK3krKzthLm9uKHgoYyksZnVuY3Rpb24oKXt2YXIgYj1hLnJvd3Moe3NlbGVjdGVkOiEwfSkuZmxhdHRlbigpLmxlbmd0aCthLmNvbHVtbnMoe3NlbGVjdGVkOiEwfSkuZmxhdHRlbigpLmxlbmd0aCthLmNlbGxzKHtzZWxlY3RlZDohMH0pLmZsYXR0ZW4oKS5sZW5ndGg7ZC5lbmFibGUoMT09PWIpfSk7dGhpcy5kaXNhYmxlKCl9LGRlc3Ryb3k6ZnVuY3Rpb24oYSxiLGMpe2Eub2ZmKGMuX2V2ZW50TmFtZXNwYWNlKX19LHNlbGVjdEFsbDp7dGV4dDp0KCJzZWxlY3RBbGwiLCJTZWxlY3QgYWxsIiksY2xhc3NOYW1lOiJidXR0b25zLXNlbGVjdC1hbGwiLGFjdGlvbjpmdW5jdGlvbigpe3RoaXNbdGhpcy5zZWxlY3QuaXRlbXMoKSsicyJdKCkuc2VsZWN0KCl9fSxzZWxlY3ROb25lOnt0ZXh0OnQoInNlbGVjdE5vbmUiLCJEZXNlbGVjdCBhbGwiKSxjbGFzc05hbWU6ImJ1dHRvbnMtc2VsZWN0LW5vbmUiLGFjdGlvbjpmdW5jdGlvbigpe3IodGhpcy5zZXR0aW5ncygpWzBdLAohMCl9LGluaXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXM7Yy5fZXZlbnROYW1lc3BhY2U9Ii5zZWxlY3QiK3krKzthLm9uKHgoYyksZnVuY3Rpb24oKXt2YXIgYj1hLnJvd3Moe3NlbGVjdGVkOiEwfSkuZmxhdHRlbigpLmxlbmd0aCthLmNvbHVtbnMoe3NlbGVjdGVkOiEwfSkuZmxhdHRlbigpLmxlbmd0aCthLmNlbGxzKHtzZWxlY3RlZDohMH0pLmZsYXR0ZW4oKS5sZW5ndGg7ZC5lbmFibGUoMDxiKX0pO3RoaXMuZGlzYWJsZSgpfSxkZXN0cm95OmZ1bmN0aW9uKGEsYixjKXthLm9mZihjLl9ldmVudE5hbWVzcGFjZSl9fX0pO2YuZWFjaChbIlJvdyIsIkNvbHVtbiIsIkNlbGwiXSxmdW5jdGlvbihhLGIpe3ZhciBjPWIudG9Mb3dlckNhc2UoKTtnLmV4dC5idXR0b25zWyJzZWxlY3QiK2IrInMiXT17dGV4dDp0KCJzZWxlY3QiK2IrInMiLCJTZWxlY3QgIitjKyJzIiksY2xhc3NOYW1lOiJidXR0b25zLXNlbGVjdC0iK2MrInMiLGFjdGlvbjpmdW5jdGlvbigpe3RoaXMuc2VsZWN0Lml0ZW1zKGMpfSwKaW5pdDpmdW5jdGlvbihhKXt2YXIgYj10aGlzO2Eub24oInNlbGVjdEl0ZW1zLmR0LkRUIixmdW5jdGlvbihhLGQsZSl7Yi5hY3RpdmUoZT09PWMpfSl9fX0pO2YocCkub24oInByZUluaXQuZHQuZHRTZWxlY3QiLGZ1bmN0aW9uKGEsYil7ImR0Ij09PWEubmFtZXNwYWNlJiZnLnNlbGVjdC5pbml0KG5ldyBnLkFwaShiKSl9KTtyZXR1cm4gZy5zZWxlY3R9KTsKCgo=]]></data>
	</file>
	<file>
	  <filename>/js/dev</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/dev/backbone-min.js.map</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJhY2tib25lLmpzIl0sIm5hbWVzIjpbImZhY3RvcnkiLCJyb290Iiwic2VsZiIsImdsb2JhbCIsImRlZmluZSIsImFtZCIsIl8iLCIkIiwiZXhwb3J0cyIsIkJhY2tib25lIiwicmVxdWlyZSIsImUiLCJqUXVlcnkiLCJaZXB0byIsImVuZGVyIiwicHJldmlvdXNCYWNrYm9uZSIsInNsaWNlIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJWRVJTSU9OIiwibm9Db25mbGljdCIsInRoaXMiLCJlbXVsYXRlSFRUUCIsImVtdWxhdGVKU09OIiwiRXZlbnRzIiwiZXZlbnRTcGxpdHRlciIsIl9saXN0ZW5pbmciLCJldmVudHNBcGkiLCJpdGVyYXRlZSIsImV2ZW50cyIsIm5hbWUiLCJjYWxsYmFjayIsIm9wdHMiLCJpIiwibmFtZXMiLCJjb250ZXh0Iiwia2V5cyIsImxlbmd0aCIsInRlc3QiLCJzcGxpdCIsIm9uIiwiX2V2ZW50cyIsIm9uQXBpIiwiY3R4IiwibGlzdGVuaW5nIiwibGlzdGVuZXJzIiwiX2xpc3RlbmVycyIsImlkIiwiaW50ZXJvcCIsImxpc3RlblRvIiwib2JqIiwiX2xpc3RlbklkIiwidW5pcXVlSWQiLCJsaXN0ZW5pbmdUbyIsIl9saXN0ZW5pbmdUbyIsIkxpc3RlbmluZyIsImVycm9yIiwidHJ5Q2F0Y2hPbiIsIm9wdGlvbnMiLCJoYW5kbGVycyIsImNvdW50IiwicHVzaCIsIm9mZiIsIm9mZkFwaSIsInN0b3BMaXN0ZW5pbmciLCJpZHMiLCJpc0VtcHR5IiwiY2xlYW51cCIsInJlbWFpbmluZyIsImoiLCJoYW5kbGVyIiwiX2NhbGxiYWNrIiwib25jZSIsIm9uY2VNYXAiLCJiaW5kIiwibGlzdGVuVG9PbmNlIiwibWFwIiwib2ZmZXIiLCJhcHBseSIsImFyZ3VtZW50cyIsInRyaWdnZXIiLCJNYXRoIiwibWF4IiwiYXJncyIsInRyaWdnZXJBcGkiLCJvYmpFdmVudHMiLCJhbGxFdmVudHMiLCJhbGwiLCJ0cmlnZ2VyRXZlbnRzIiwiY29uY2F0IiwiZXYiLCJsIiwiYTEiLCJhMiIsImEzIiwiY2FsbCIsImxpc3RlbmVyIiwidW5iaW5kIiwiZXh0ZW5kIiwiTW9kZWwiLCJhdHRyaWJ1dGVzIiwiYXR0cnMiLCJwcmVpbml0aWFsaXplIiwiY2lkIiwiY2lkUHJlZml4IiwiY29sbGVjdGlvbiIsInBhcnNlIiwiZGVmYXVsdHMiLCJyZXN1bHQiLCJzZXQiLCJjaGFuZ2VkIiwiaW5pdGlhbGl6ZSIsInZhbGlkYXRpb25FcnJvciIsImlkQXR0cmlidXRlIiwidG9KU09OIiwiY2xvbmUiLCJzeW5jIiwiZ2V0IiwiYXR0ciIsImVzY2FwZSIsImhhcyIsIm1hdGNoZXMiLCJrZXkiLCJ2YWwiLCJfdmFsaWRhdGUiLCJ1bnNldCIsInNpbGVudCIsImNoYW5nZXMiLCJjaGFuZ2luZyIsIl9jaGFuZ2luZyIsIl9wcmV2aW91c0F0dHJpYnV0ZXMiLCJjdXJyZW50IiwicHJldiIsImlzRXF1YWwiLCJwcmV2SWQiLCJfcGVuZGluZyIsImNsZWFyIiwiaGFzQ2hhbmdlZCIsImNoYW5nZWRBdHRyaWJ1dGVzIiwiZGlmZiIsIm9sZCIsInByZXZpb3VzIiwicHJldmlvdXNBdHRyaWJ1dGVzIiwiZmV0Y2giLCJtb2RlbCIsInN1Y2Nlc3MiLCJyZXNwIiwic2VydmVyQXR0cnMiLCJ3cmFwRXJyb3IiLCJzYXZlIiwidmFsaWRhdGUiLCJ3YWl0IiwibWV0aG9kIiwiaXNOZXciLCJwYXRjaCIsInhociIsImRlc3Ryb3kiLCJkZWZlciIsInVybCIsImJhc2UiLCJ1cmxFcnJvciIsInJlcGxhY2UiLCJlbmNvZGVVUklDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsImlzVmFsaWQiLCJDb2xsZWN0aW9uIiwibW9kZWxzIiwiY29tcGFyYXRvciIsIl9yZXNldCIsInJlc2V0Iiwic2V0T3B0aW9ucyIsImFkZCIsInJlbW92ZSIsIm1lcmdlIiwiYWRkT3B0aW9ucyIsInNwbGljZSIsImFycmF5IiwiaW5zZXJ0IiwiYXQiLCJtaW4iLCJ0YWlsIiwic2luZ3VsYXIiLCJpc0FycmF5IiwicmVtb3ZlZCIsIl9yZW1vdmVNb2RlbHMiLCJhZGRlZCIsIm1lcmdlZCIsIl9pc01vZGVsIiwidG9BZGQiLCJ0b01lcmdlIiwidG9SZW1vdmUiLCJtb2RlbE1hcCIsInNvcnQiLCJzb3J0YWJsZSIsInNvcnRBdHRyIiwiaXNTdHJpbmciLCJleGlzdGluZyIsIl9wcmVwYXJlTW9kZWwiLCJfYWRkUmVmZXJlbmNlIiwib3JkZXJDaGFuZ2VkIiwic29tZSIsIm0iLCJpbmRleCIsIl9yZW1vdmVSZWZlcmVuY2UiLCJwcmV2aW91c01vZGVscyIsInBvcCIsInVuc2hpZnQiLCJzaGlmdCIsIl9ieUlkIiwibW9kZWxJZCIsIndoZXJlIiwiZmlyc3QiLCJmaW5kV2hlcmUiLCJFcnJvciIsImlzRnVuY3Rpb24iLCJzb3J0QnkiLCJwbHVjayIsImNyZWF0ZSIsImNhbGxiYWNrT3B0cyIsInZhbHVlcyIsIkNvbGxlY3Rpb25JdGVyYXRvciIsIklURVJBVE9SX1ZBTFVFUyIsIklURVJBVE9SX0tFWVMiLCJlbnRyaWVzIiwiSVRFUkFUT1JfS0VZU1ZBTFVFUyIsImluZGV4T2YiLCJfb25Nb2RlbEV2ZW50IiwiZXZlbnQiLCIkJGl0ZXJhdG9yIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJraW5kIiwiX2NvbGxlY3Rpb24iLCJfa2luZCIsIl9pbmRleCIsIm5leHQiLCJ2YWx1ZSIsImRvbmUiLCJWaWV3IiwicGljayIsInZpZXdPcHRpb25zIiwiX2Vuc3VyZUVsZW1lbnQiLCJkZWxlZ2F0ZUV2ZW50U3BsaXR0ZXIiLCJ0YWdOYW1lIiwic2VsZWN0b3IiLCIkZWwiLCJmaW5kIiwicmVuZGVyIiwiX3JlbW92ZUVsZW1lbnQiLCJzZXRFbGVtZW50IiwiZWxlbWVudCIsInVuZGVsZWdhdGVFdmVudHMiLCJfc2V0RWxlbWVudCIsImRlbGVnYXRlRXZlbnRzIiwiZWwiLCJtYXRjaCIsImRlbGVnYXRlIiwiZXZlbnROYW1lIiwidW5kZWxlZ2F0ZSIsIl9jcmVhdGVFbGVtZW50IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiX3NldEF0dHJpYnV0ZXMiLCJhZGRNZXRob2QiLCJhdHRyaWJ1dGUiLCJjYiIsImRlZmF1bHRWYWwiLCJhZGRVbmRlcnNjb3JlTWV0aG9kcyIsIkNsYXNzIiwibWV0aG9kcyIsImVhY2giLCJpbnN0YW5jZSIsImlzT2JqZWN0IiwibW9kZWxNYXRjaGVyIiwibWF0Y2hlciIsImNvbGxlY3Rpb25NZXRob2RzIiwiZm9yRWFjaCIsImNvbGxlY3QiLCJyZWR1Y2UiLCJmb2xkbCIsImluamVjdCIsInJlZHVjZVJpZ2h0IiwiZm9sZHIiLCJkZXRlY3QiLCJmaWx0ZXIiLCJzZWxlY3QiLCJyZWplY3QiLCJldmVyeSIsImFueSIsImluY2x1ZGUiLCJpbmNsdWRlcyIsImNvbnRhaW5zIiwiaW52b2tlIiwidG9BcnJheSIsInNpemUiLCJoZWFkIiwidGFrZSIsImluaXRpYWwiLCJyZXN0IiwiZHJvcCIsImxhc3QiLCJ3aXRob3V0IiwiZGlmZmVyZW5jZSIsInNodWZmbGUiLCJsYXN0SW5kZXhPZiIsImNoYWluIiwic2FtcGxlIiwicGFydGl0aW9uIiwiZ3JvdXBCeSIsImNvdW50QnkiLCJpbmRleEJ5IiwiZmluZEluZGV4IiwiZmluZExhc3RJbmRleCIsIm1vZGVsTWV0aG9kcyIsInBhaXJzIiwiaW52ZXJ0Iiwib21pdCIsImNvbmZpZyIsIkJhc2UiLCJtaXhpbiIsIm1hcHBpbmdzIiwiZnVuY3Rpb25zIiwibWVtbyIsInR5cGUiLCJtZXRob2RNYXAiLCJwYXJhbXMiLCJkYXRhVHlwZSIsImRhdGEiLCJjb250ZW50VHlwZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJfbWV0aG9kIiwiYmVmb3JlU2VuZCIsInNldFJlcXVlc3RIZWFkZXIiLCJwcm9jZXNzRGF0YSIsInRleHRTdGF0dXMiLCJlcnJvclRocm93biIsImFqYXgiLCJ1cGRhdGUiLCJkZWxldGUiLCJyZWFkIiwiUm91dGVyIiwicm91dGVzIiwiX2JpbmRSb3V0ZXMiLCJvcHRpb25hbFBhcmFtIiwibmFtZWRQYXJhbSIsInNwbGF0UGFyYW0iLCJlc2NhcGVSZWdFeHAiLCJyb3V0ZSIsImlzUmVnRXhwIiwiX3JvdXRlVG9SZWdFeHAiLCJyb3V0ZXIiLCJoaXN0b3J5IiwiZnJhZ21lbnQiLCJfZXh0cmFjdFBhcmFtZXRlcnMiLCJleGVjdXRlIiwibmF2aWdhdGUiLCJvcHRpb25hbCIsIlJlZ0V4cCIsImV4ZWMiLCJwYXJhbSIsImRlY29kZVVSSUNvbXBvbmVudCIsIkhpc3RvcnkiLCJjaGVja1VybCIsIndpbmRvdyIsImxvY2F0aW9uIiwicm91dGVTdHJpcHBlciIsInJvb3RTdHJpcHBlciIsInBhdGhTdHJpcHBlciIsInN0YXJ0ZWQiLCJpbnRlcnZhbCIsImF0Um9vdCIsInBhdGgiLCJwYXRobmFtZSIsImdldFNlYXJjaCIsIm1hdGNoUm9vdCIsImRlY29kZUZyYWdtZW50Iiwicm9vdFBhdGgiLCJkZWNvZGVVUkkiLCJocmVmIiwiZ2V0SGFzaCIsImdldFBhdGgiLCJjaGFyQXQiLCJnZXRGcmFnbWVudCIsIl91c2VQdXNoU3RhdGUiLCJfd2FudHNIYXNoQ2hhbmdlIiwic3RhcnQiLCJoYXNoQ2hhbmdlIiwiX2hhc0hhc2hDaGFuZ2UiLCJkb2N1bWVudE1vZGUiLCJfdXNlSGFzaENoYW5nZSIsIl93YW50c1B1c2hTdGF0ZSIsInB1c2hTdGF0ZSIsIl9oYXNQdXNoU3RhdGUiLCJpZnJhbWUiLCJzcmMiLCJzdHlsZSIsImRpc3BsYXkiLCJ0YWJJbmRleCIsImJvZHkiLCJpV2luZG93IiwiaW5zZXJ0QmVmb3JlIiwiZmlyc3RDaGlsZCIsImNvbnRlbnRXaW5kb3ciLCJvcGVuIiwiY2xvc2UiLCJoYXNoIiwiYWRkRXZlbnRMaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwiX2NoZWNrVXJsSW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImxvYWRVcmwiLCJzdG9wIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRldGFjaEV2ZW50IiwicmVtb3ZlQ2hpbGQiLCJjbGVhckludGVydmFsIiwiZGVjb2RlZEZyYWdtZW50IiwidGl0bGUiLCJfdXBkYXRlSGFzaCIsImFzc2lnbiIs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]]></data>
	</file>
	<file>
	  <filename>/js/dev/backbone-min.map</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJhY2tib25lLmpzIl0sIm5hbWVzIjpbImZhY3RvcnkiLCJyb290Iiwic2VsZiIsImdsb2JhbCIsImRlZmluZSIsImFtZCIsIl8iLCIkIiwiZXhwb3J0cyIsIkJhY2tib25lIiwicmVxdWlyZSIsImUiLCJqUXVlcnkiLCJaZXB0byIsImVuZGVyIiwicHJldmlvdXNCYWNrYm9uZSIsInNsaWNlIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJWRVJTSU9OIiwibm9Db25mbGljdCIsInRoaXMiLCJlbXVsYXRlSFRUUCIsImVtdWxhdGVKU09OIiwiRXZlbnRzIiwiZXZlbnRTcGxpdHRlciIsIl9saXN0ZW5pbmciLCJldmVudHNBcGkiLCJpdGVyYXRlZSIsImV2ZW50cyIsIm5hbWUiLCJjYWxsYmFjayIsIm9wdHMiLCJpIiwibmFtZXMiLCJjb250ZXh0Iiwia2V5cyIsImxlbmd0aCIsInRlc3QiLCJzcGxpdCIsIm9uIiwiX2V2ZW50cyIsIm9uQXBpIiwiY3R4IiwibGlzdGVuaW5nIiwibGlzdGVuZXJzIiwiX2xpc3RlbmVycyIsImlkIiwiaW50ZXJvcCIsImxpc3RlblRvIiwib2JqIiwiX2xpc3RlbklkIiwidW5pcXVlSWQiLCJsaXN0ZW5pbmdUbyIsIl9saXN0ZW5pbmdUbyIsIkxpc3RlbmluZyIsImVycm9yIiwidHJ5Q2F0Y2hPbiIsIm9wdGlvbnMiLCJoYW5kbGVycyIsImNvdW50IiwicHVzaCIsIm9mZiIsIm9mZkFwaSIsInN0b3BMaXN0ZW5pbmciLCJpZHMiLCJpc0VtcHR5IiwiY2xlYW51cCIsInJlbWFpbmluZyIsImoiLCJoYW5kbGVyIiwiX2NhbGxiYWNrIiwib25jZSIsIm9uY2VNYXAiLCJiaW5kIiwibGlzdGVuVG9PbmNlIiwibWFwIiwib2ZmZXIiLCJhcHBseSIsImFyZ3VtZW50cyIsInRyaWdnZXIiLCJNYXRoIiwibWF4IiwiYXJncyIsInRyaWdnZXJBcGkiLCJvYmpFdmVudHMiLCJhbGxFdmVudHMiLCJhbGwiLCJ0cmlnZ2VyRXZlbnRzIiwiY29uY2F0IiwiZXYiLCJsIiwiYTEiLCJhMiIsImEzIiwiY2FsbCIsImxpc3RlbmVyIiwidW5iaW5kIiwiZXh0ZW5kIiwiTW9kZWwiLCJhdHRyaWJ1dGVzIiwiYXR0cnMiLCJwcmVpbml0aWFsaXplIiwiY2lkIiwiY2lkUHJlZml4IiwiY29sbGVjdGlvbiIsInBhcnNlIiwiZGVmYXVsdHMiLCJyZXN1bHQiLCJzZXQiLCJjaGFuZ2VkIiwiaW5pdGlhbGl6ZSIsInZhbGlkYXRpb25FcnJvciIsImlkQXR0cmlidXRlIiwidG9KU09OIiwiY2xvbmUiLCJzeW5jIiwiZ2V0IiwiYXR0ciIsImVzY2FwZSIsImhhcyIsIm1hdGNoZXMiLCJrZXkiLCJ2YWwiLCJfdmFsaWRhdGUiLCJ1bnNldCIsInNpbGVudCIsImNoYW5nZXMiLCJjaGFuZ2luZyIsIl9jaGFuZ2luZyIsIl9wcmV2aW91c0F0dHJpYnV0ZXMiLCJjdXJyZW50IiwicHJldiIsImlzRXF1YWwiLCJwcmV2SWQiLCJfcGVuZGluZyIsImNsZWFyIiwiaGFzQ2hhbmdlZCIsImNoYW5nZWRBdHRyaWJ1dGVzIiwiZGlmZiIsIm9sZCIsInByZXZpb3VzIiwicHJldmlvdXNBdHRyaWJ1dGVzIiwiZmV0Y2giLCJtb2RlbCIsInN1Y2Nlc3MiLCJyZXNwIiwic2VydmVyQXR0cnMiLCJ3cmFwRXJyb3IiLCJzYXZlIiwidmFsaWRhdGUiLCJ3YWl0IiwibWV0aG9kIiwiaXNOZXciLCJwYXRjaCIsInhociIsImRlc3Ryb3kiLCJkZWZlciIsInVybCIsImJhc2UiLCJ1cmxFcnJvciIsInJlcGxhY2UiLCJlbmNvZGVVUklDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsImlzVmFsaWQiLCJDb2xsZWN0aW9uIiwibW9kZWxzIiwiY29tcGFyYXRvciIsIl9yZXNldCIsInJlc2V0Iiwic2V0T3B0aW9ucyIsImFkZCIsInJlbW92ZSIsIm1lcmdlIiwiYWRkT3B0aW9ucyIsInNwbGljZSIsImFycmF5IiwiaW5zZXJ0IiwiYXQiLCJtaW4iLCJ0YWlsIiwic2luZ3VsYXIiLCJpc0FycmF5IiwicmVtb3ZlZCIsIl9yZW1vdmVNb2RlbHMiLCJhZGRlZCIsIm1lcmdlZCIsIl9pc01vZGVsIiwidG9BZGQiLCJ0b01lcmdlIiwidG9SZW1vdmUiLCJtb2RlbE1hcCIsInNvcnQiLCJzb3J0YWJsZSIsInNvcnRBdHRyIiwiaXNTdHJpbmciLCJleGlzdGluZyIsIl9wcmVwYXJlTW9kZWwiLCJfYWRkUmVmZXJlbmNlIiwib3JkZXJDaGFuZ2VkIiwic29tZSIsIm0iLCJpbmRleCIsIl9yZW1vdmVSZWZlcmVuY2UiLCJwcmV2aW91c01vZGVscyIsInBvcCIsInVuc2hpZnQiLCJzaGlmdCIsIl9ieUlkIiwibW9kZWxJZCIsIndoZXJlIiwiZmlyc3QiLCJmaW5kV2hlcmUiLCJFcnJvciIsImlzRnVuY3Rpb24iLCJzb3J0QnkiLCJwbHVjayIsImNyZWF0ZSIsImNhbGxiYWNrT3B0cyIsInZhbHVlcyIsIkNvbGxlY3Rpb25JdGVyYXRvciIsIklURVJBVE9SX1ZBTFVFUyIsIklURVJBVE9SX0tFWVMiLCJlbnRyaWVzIiwiSVRFUkFUT1JfS0VZU1ZBTFVFUyIsImluZGV4T2YiLCJfb25Nb2RlbEV2ZW50IiwiZXZlbnQiLCIkJGl0ZXJhdG9yIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJraW5kIiwiX2NvbGxlY3Rpb24iLCJfa2luZCIsIl9pbmRleCIsIm5leHQiLCJ2YWx1ZSIsImRvbmUiLCJWaWV3IiwicGljayIsInZpZXdPcHRpb25zIiwiX2Vuc3VyZUVsZW1lbnQiLCJkZWxlZ2F0ZUV2ZW50U3BsaXR0ZXIiLCJ0YWdOYW1lIiwic2VsZWN0b3IiLCIkZWwiLCJmaW5kIiwicmVuZGVyIiwiX3JlbW92ZUVsZW1lbnQiLCJzZXRFbGVtZW50IiwiZWxlbWVudCIsInVuZGVsZWdhdGVFdmVudHMiLCJfc2V0RWxlbWVudCIsImRlbGVnYXRlRXZlbnRzIiwiZWwiLCJtYXRjaCIsImRlbGVnYXRlIiwiZXZlbnROYW1lIiwidW5kZWxlZ2F0ZSIsIl9jcmVhdGVFbGVtZW50IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiX3NldEF0dHJpYnV0ZXMiLCJhZGRNZXRob2QiLCJhdHRyaWJ1dGUiLCJjYiIsImRlZmF1bHRWYWwiLCJhZGRVbmRlcnNjb3JlTWV0aG9kcyIsIkNsYXNzIiwibWV0aG9kcyIsImVhY2giLCJpbnN0YW5jZSIsImlzT2JqZWN0IiwibW9kZWxNYXRjaGVyIiwibWF0Y2hlciIsImNvbGxlY3Rpb25NZXRob2RzIiwiZm9yRWFjaCIsImNvbGxlY3QiLCJyZWR1Y2UiLCJmb2xkbCIsImluamVjdCIsInJlZHVjZVJpZ2h0IiwiZm9sZHIiLCJkZXRlY3QiLCJmaWx0ZXIiLCJzZWxlY3QiLCJyZWplY3QiLCJldmVyeSIsImFueSIsImluY2x1ZGUiLCJpbmNsdWRlcyIsImNvbnRhaW5zIiwiaW52b2tlIiwidG9BcnJheSIsInNpemUiLCJoZWFkIiwidGFrZSIsImluaXRpYWwiLCJyZXN0IiwiZHJvcCIsImxhc3QiLCJ3aXRob3V0IiwiZGlmZmVyZW5jZSIsInNodWZmbGUiLCJsYXN0SW5kZXhPZiIsImNoYWluIiwic2FtcGxlIiwicGFydGl0aW9uIiwiZ3JvdXBCeSIsImNvdW50QnkiLCJpbmRleEJ5IiwiZmluZEluZGV4IiwiZmluZExhc3RJbmRleCIsIm1vZGVsTWV0aG9kcyIsInBhaXJzIiwiaW52ZXJ0Iiwib21pdCIsImNvbmZpZyIsIkJhc2UiLCJtaXhpbiIsIm1hcHBpbmdzIiwiZnVuY3Rpb25zIiwibWVtbyIsInR5cGUiLCJtZXRob2RNYXAiLCJwYXJhbXMiLCJkYXRhVHlwZSIsImRhdGEiLCJjb250ZW50VHlwZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJfbWV0aG9kIiwiYmVmb3JlU2VuZCIsInNldFJlcXVlc3RIZWFkZXIiLCJwcm9jZXNzRGF0YSIsInRleHRTdGF0dXMiLCJlcnJvclRocm93biIsImFqYXgiLCJ1cGRhdGUiLCJkZWxldGUiLCJyZWFkIiwiUm91dGVyIiwicm91dGVzIiwiX2JpbmRSb3V0ZXMiLCJvcHRpb25hbFBhcmFtIiwibmFtZWRQYXJhbSIsInNwbGF0UGFyYW0iLCJlc2NhcGVSZWdFeHAiLCJyb3V0ZSIsImlzUmVnRXhwIiwiX3JvdXRlVG9SZWdFeHAiLCJyb3V0ZXIiLCJoaXN0b3J5IiwiZnJhZ21lbnQiLCJfZXh0cmFjdFBhcmFtZXRlcnMiLCJleGVjdXRlIiwibmF2aWdhdGUiLCJvcHRpb25hbCIsIlJlZ0V4cCIsImV4ZWMiLCJwYXJhbSIsImRlY29kZVVSSUNvbXBvbmVudCIsIkhpc3RvcnkiLCJjaGVja1VybCIsIndpbmRvdyIsImxvY2F0aW9uIiwicm91dGVTdHJpcHBlciIsInJvb3RTdHJpcHBlciIsInBhdGhTdHJpcHBlciIsInN0YXJ0ZWQiLCJpbnRlcnZhbCIsImF0Um9vdCIsInBhdGgiLCJwYXRobmFtZSIsImdldFNlYXJjaCIsIm1hdGNoUm9vdCIsImRlY29kZUZyYWdtZW50Iiwicm9vdFBhdGgiLCJkZWNvZGVVUkkiLCJocmVmIiwiZ2V0SGFzaCIsImdldFBhdGgiLCJjaGFyQXQiLCJnZXRGcmFnbWVudCIsIl91c2VQdXNoU3RhdGUiLCJfd2FudHNIYXNoQ2hhbmdlIiwic3RhcnQiLCJoYXNoQ2hhbmdlIiwiX2hhc0hhc2hDaGFuZ2UiLCJkb2N1bWVudE1vZGUiLCJfdXNlSGFzaENoYW5nZSIsIl93YW50c1B1c2hTdGF0ZSIsInB1c2hTdGF0ZSIsIl9oYXNQdXNoU3RhdGUiLCJpZnJhbWUiLCJzcmMiLCJzdHlsZSIsImRpc3BsYXkiLCJ0YWJJbmRleCIsImJvZHkiLCJpV2luZG93IiwiaW5zZXJ0QmVmb3JlIiwiZmlyc3RDaGlsZCIsImNvbnRlbnRXaW5kb3ciLCJvcGVuIiwiY2xvc2UiLCJoYXNoIiwiYWRkRXZlbnRMaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwiX2NoZWNrVXJsSW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImxvYWRVcmwiLCJzdG9wIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRldGFjaEV2ZW50IiwicmVtb3ZlQ2hpbGQiLCJjbGVhckludGVydmFsIiwiZGVjb2RlZEZyYWdtZW50IiwidGl0bGUiLCJfdXBkYXRlSGFzaCIsImFzc2lnbiIs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]]></data>
	</file>
	<file>
	  <filename>/js/dev/backbone.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gICAgIEJhY2tib25lLmpzIDEuNC4xCgovLyAgICAgKGMpIDIwMTAtMjAyMiBKZXJlbXkgQXNoa2VuYXMgYW5kIERvY3VtZW50Q2xvdWQKLy8gICAgIEJhY2tib25lIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgovLyAgICAgRm9yIGFsbCBkZXRhaWxzIGFuZCBkb2N1bWVudGF0aW9uOgovLyAgICAgaHR0cDovL2JhY2tib25lanMub3JnCgooZnVuY3Rpb24oZmFjdG9yeSkgewoKICAvLyBFc3RhYmxpc2ggdGhlIHJvb3Qgb2JqZWN0LCBgd2luZG93YCAoYHNlbGZgKSBpbiB0aGUgYnJvd3Nlciwgb3IgYGdsb2JhbGAgb24gdGhlIHNlcnZlci4KICAvLyBXZSB1c2UgYHNlbGZgIGluc3RlYWQgb2YgYHdpbmRvd2AgZm9yIGBXZWJXb3JrZXJgIHN1cHBvcnQuCiAgdmFyIHJvb3QgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmLnNlbGYgPT09IHNlbGYgJiYgc2VsZiB8fAogICAgICAgICAgICB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbC5nbG9iYWwgPT09IGdsb2JhbCAmJiBnbG9iYWw7CgogIC8vIFNldCB1cCBCYWNrYm9uZSBhcHByb3ByaWF0ZWx5IGZvciB0aGUgZW52aXJvbm1lbnQuIFN0YXJ0IHdpdGggQU1ELgogIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsKICAgIGRlZmluZShbJ3VuZGVyc2NvcmUnLCAnanF1ZXJ5JywgJ2V4cG9ydHMnXSwgZnVuY3Rpb24oXywgJCwgZXhwb3J0cykgewogICAgICAvLyBFeHBvcnQgZ2xvYmFsIGV2ZW4gaW4gQU1EIGNhc2UgaW4gY2FzZSB0aGlzIHNjcmlwdCBpcyBsb2FkZWQgd2l0aAogICAgICAvLyBvdGhlcnMgdGhhdCBtYXkgc3RpbGwgZXhwZWN0IGEgZ2xvYmFsIEJhY2tib25lLgogICAgICByb290LkJhY2tib25lID0gZmFjdG9yeShyb290LCBleHBvcnRzLCBfLCAkKTsKICAgIH0pOwoKICAvLyBOZXh0IGZvciBOb2RlLmpzIG9yIENvbW1vbkpTLiBqUXVlcnkgbWF5IG5vdCBiZSBuZWVkZWQgYXMgYSBtb2R1bGUuCiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgIHZhciBfID0gcmVxdWlyZSgndW5kZXJzY29yZScpLCAkOwogICAgdHJ5IHsgJCA9IHJlcXVpcmUoJ2pxdWVyeScpOyB9IGNhdGNoIChlKSB7fQogICAgZmFjdG9yeShyb290LCBleHBvcnRzLCBfLCAkKTsKCiAgLy8gRmluYWxseSwgYXMgYSBicm93c2VyIGdsb2JhbC4KICB9IGVsc2UgewogICAgcm9vdC5CYWNrYm9uZSA9IGZhY3Rvcnkocm9vdCwge30sIHJvb3QuXywgcm9vdC5qUXVlcnkgfHwgcm9vdC5aZXB0byB8fCByb290LmVuZGVyIHx8IHJvb3QuJCk7CiAgfQoKfSkoZnVuY3Rpb24ocm9vdCwgQmFja2JvbmUsIF8sICQpIHsKCiAgLy8gSW5pdGlhbCBTZXR1cAogIC8vIC0tLS0tLS0tLS0tLS0KCiAgLy8gU2F2ZSB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIGBCYWNrYm9uZWAgdmFyaWFibGUsIHNvIHRoYXQgaXQgY2FuIGJlCiAgLy8gcmVzdG9yZWQgbGF0ZXIgb24sIGlmIGBub0NvbmZsaWN0YCBpcyB1c2VkLgogIHZhciBwcmV2aW91c0JhY2tib25lID0gcm9vdC5CYWNrYm9uZTsKCiAgLy8gQ3JlYXRlIGEgbG9jYWwgcmVmZXJlbmNlIHRvIGEgY29tbW9uIGFycmF5IG1ldGhvZCB3ZSdsbCB3YW50IHRvIHVzZSBsYXRlci4KICB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7CgogIC8vIEN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4gS2VlcCBpbiBzeW5jIHdpdGggYHBhY2thZ2UuanNvbmAuCiAgQmFja2JvbmUuVkVSU0lPTiA9ICcxLjQuMSc7CgogIC8vIEZvciBCYWNrYm9uZSdzIHB1cnBvc2VzLCBqUXVlcnksIFplcHRvLCBFbmRlciwgb3IgTXkgTGlicmFyeSAoa2lkZGluZykgb3ducwogIC8vIHRoZSBgJGAgdmFyaWFibGUuCiAgQmFja2JvbmUuJCA9ICQ7CgogIC8vIFJ1bnMgQmFja2JvbmUuanMgaW4gKm5vQ29uZmxpY3QqIG1vZGUsIHJldHVybmluZyB0aGUgYEJhY2tib25lYCB2YXJpYWJsZQogIC8vIHRvIGl0cyBwcmV2aW91cyBvd25lci4gUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGlzIEJhY2tib25lIG9iamVjdC4KICBCYWNrYm9uZS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7CiAgICByb290LkJhY2tib25lID0gcHJldmlvdXNCYWNrYm9uZTsKICAgIHJldHVybiB0aGlzOwogIH07CgogIC8vIFR1cm4gb24gYGVtdWxhdGVIVFRQYCB0byBzdXBwb3J0IGxlZ2FjeSBIVFRQIHNlcnZlcnMuIFNldHRpbmcgdGhpcyBvcHRpb24KICAvLyB3aWxsIGZha2UgYCJQQVRDSCJgLCBgIlBVVCJgIGFuZCBgIkRFTEVURSJgIHJlcXVlc3RzIHZpYSB0aGUgYF9tZXRob2RgIHBhcmFtZXRlciBhbmQKICAvLyBzZXQgYSBgWC1IdHRwLU1ldGhvZC1PdmVycmlkZWAgaGVhZGVyLgogIEJhY2tib25lLmVtdWxhdGVIVFRQID0gZmFsc2U7CgogIC8vIFR1cm4gb24gYGVtdWxhdGVKU09OYCB0byBzdXBwb3J0IGxlZ2FjeSBzZXJ2ZXJzIHRoYXQgY2FuJ3QgZGVhbCB3aXRoIGRpcmVjdAogIC8vIGBhcHBsaWNhdGlvbi9qc29uYCByZXF1ZXN0cyAuLi4gdGhpcyB3aWxsIGVuY29kZSB0aGUgYm9keSBhcwogIC8vIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRgIGluc3RlYWQgYW5kIHdpbGwgc2VuZCB0aGUgbW9kZWwgaW4gYQogIC8vIGZvcm0gcGFyYW0gbmFtZWQgYG1vZGVsYC4KICBCYWNrYm9uZS5lbXVsYXRlSlNPTiA9IGZhbHNlOwoKICAvLyBCYWNrYm9uZS5FdmVudHMKICAvLyAtLS0tLS0tLS0tLS0tLS0KCiAgLy8gQSBtb2R1bGUgdGhhdCBjYW4gYmUgbWl4ZWQgaW4gdG8gKmFueSBvYmplY3QqIGluIG9yZGVyIHRvIHByb3ZpZGUgaXQgd2l0aAogIC8vIGEgY3VzdG9tIGV2ZW50IGNoYW5uZWwuIFlvdSBtYXkgYmluZCBhIGNhbGxiYWNrIHRvIGFuIGV2ZW50IHdpdGggYG9uYCBvcgogIC8vIHJlbW92ZSB3aXRoIGBvZmZgOyBgdHJpZ2dlcmAtaW5nIGFuIGV2ZW50IGZpcmVzIGFsbCBjYWxsYmFja3MgaW4KICAvLyBzdWNjZXNzaW9uLgogIC8vCiAgLy8gICAgIHZhciBvYmplY3QgPSB7fTsKICAvLyAgICAgXy5leHRlbmQob2JqZWN0LCBCYWNrYm9uZS5FdmVudHMpOwogIC8vICAgICBvYmplY3Qub24oJ2V4cGFuZCcsIGZ1bmN0aW9uKCl7IGFsZXJ0KCdleHBhbmRlZCcpOyB9KTsKICAvLyAgICAgb2JqZWN0LnRyaWdnZXIoJ2V4cGFuZCcpOwogIC8vCiAgdmFyIEV2ZW50cyA9IEJhY2tib25lLkV2ZW50cyA9IHt9OwoKICAvLyBSZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byBzcGxpdCBldmVudCBzdHJpbmdzLgogIHZhciBldmVudFNwbGl0dGVyID0gL1xzKy87CgogIC8vIEEgcHJpdmF0ZSBnbG9iYWwgdmFyaWFibGUgdG8gc2hhcmUgYmV0d2VlbiBsaXN0ZW5lcnMgYW5kIGxpc3RlbmVlcy4KICB2YXIgX2xpc3RlbmluZzsKCiAgLy8gSXRlcmF0ZXMgb3ZlciB0aGUgc3RhbmRhcmQgYGV2ZW50LCBjYWxsYmFja2AgKGFzIHdlbGwgYXMgdGhlIGZhbmN5IG11bHRpcGxlCiAgLy8gc3BhY2Utc2VwYXJhdGVkIGV2ZW50cyBgImNoYW5nZSBibHVyIiwgY2FsbGJhY2tgIGFuZCBqUXVlcnktc3R5bGUgZXZlbnQKICAvLyBtYXBzIGB7ZXZlbnQ6IGNhbGxiYWNrfWApLgogIHZhciBldmVudHNBcGkgPSBmdW5jdGlvbihpdGVyYXRlZSwgZXZlbnRzLCBuYW1lLCBjYWxsYmFjaywgb3B0cykgewogICAgdmFyIGkgPSAwLCBuYW1lczsKICAgIGlmIChuYW1lICYmIHR5cGVvZiBuYW1lID09PSAnb2JqZWN0JykgewogICAgICAvLyBIYW5kbGUgZXZlbnQgbWFwcy4KICAgICAgaWYgKGNhbGxiYWNrICE9PSB2b2lkIDAgJiYgJ2NvbnRleHQnIGluIG9wdHMgJiYgb3B0cy5jb250ZXh0ID09PSB2b2lkIDApIG9wdHMuY29udGV4dCA9IGNhbGxiYWNrOwogICAgICBmb3IgKG5hbWVzID0gXy5rZXlzKG5hbWUpOyBpIDwgbmFtZXMubGVuZ3RoIDsgaSsrKSB7CiAgICAgICAgZXZlbnRzID0gZXZlbnRzQXBpKGl0ZXJhdGVlLCBldmVudHMsIG5hbWVzW2ldLCBuYW1lW25hbWVzW2ldXSwgb3B0cyk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobmFtZSAmJiBldmVudFNwbGl0dGVyLnRlc3QobmFtZSkpIHsKICAgICAgLy8gSGFuZGxlIHNwYWNlLXNlcGFyYXRlZCBldmVudCBuYW1lcyBieSBkZWxlZ2F0aW5nIHRoZW0gaW5kaXZpZHVhbGx5LgogICAgICBmb3IgKG5hbWVzID0gbmFtZS5zcGxpdChldmVudFNwbGl0dGVyKTsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgZXZlbnRzID0gaXRlcmF0ZWUoZXZlbnRzLCBuYW1lc1tpXSwgY2FsbGJhY2ssIG9wdHMpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBGaW5hbGx5LCBzdGFuZGFyZCBldmVudHMuCiAgICAgIGV2ZW50cyA9IGl0ZXJhdGVlKGV2ZW50cywgbmFtZSwgY2FsbGJhY2ssIG9wdHMpOwogICAgfQogICAgcmV0dXJuIGV2ZW50czsKICB9OwoKICAvLyBCaW5kIGFuIGV2ZW50IHRvIGEgYGNhbGxiYWNrYCBmdW5jdGlvbi4gUGFzc2luZyBgImFsbCJgIHdpbGwgYmluZAogIC8vIHRoZSBjYWxsYmFjayB0byBhbGwgZXZlbnRzIGZpcmVkLgogIEV2ZW50cy5vbiA9IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7CiAgICB0aGlzLl9ldmVudHMgPSBldmVudHNBcGkob25BcGksIHRoaXMuX2V2ZW50cyB8fCB7fSwgbmFtZSwgY2FsbGJhY2ssIHsKICAgICAgY29udGV4dDogY29udGV4dCwKICAgICAgY3R4OiB0aGlzLAogICAgICBsaXN0ZW5pbmc6IF9saXN0ZW5pbmcKICAgIH0pOwoKICAgIGlmIChfbGlzdGVuaW5nKSB7CiAgICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnMgfHwgKHRoaXMuX2xpc3RlbmVycyA9IHt9KTsKICAgICAgbGlzdGVuZXJzW19saXN0ZW5pbmcuaWRdID0gX2xpc3RlbmluZzsKICAgICAgLy8gQWxsb3cgdGhlIGxpc3RlbmluZyB0byB1c2UgYSBjb3VudGVyLCBpbnN0ZWFkIG9mIHRyYWNraW5nCiAgICAgIC8vIGNhbGxiYWNrcyBmb3IgbGlicmFyeSBpbnRlcm9wCiAgICAgIF9saXN0ZW5pbmcuaW50ZXJvcCA9IGZhbHNlOwogICAgfQoKICAgIHJldHVybiB0aGlzOwogIH07CgogIC8vIEludmVyc2lvbi1vZi1jb250cm9sIHZlcnNpb25zIG9mIGBvbmAuIFRlbGwgKnRoaXMqIG9iamVjdCB0byBsaXN0ZW4gdG8KICAvLyBhbiBldmVudCBpbiBhbm90aGVyIG9iamVjdC4uLiBrZWVwaW5nIHRyYWNrIG9mIHdoYXQgaXQncyBsaXN0ZW5pbmcgdG8KICAvLyBmb3IgZWFzaWVyIHVuYmluZGluZyBsYXRlci4KICBFdmVudHMubGlzdGVuVG8gPSBmdW5jdGlvbihvYmosIG5hbWUsIGNhbGxiYWNrKSB7CiAgICBpZiAoIW9iaikgcmV0dXJuIHRoaXM7CiAgICB2YXIgaWQgPSBvYmouX2xpc3RlbklkIHx8IChvYmouX2xpc3RlbklkID0gXy51bmlxdWVJZCgnbCcpKTsKICAgIHZhciBsaXN0ZW5pbmdUbyA9IHRoaXMuX2xpc3RlbmluZ1RvIHx8ICh0aGlzLl9saXN0ZW5pbmdUbyA9IHt9KTsKICAgIHZhciBsaXN0ZW5pbmcgPSBfbGlzdGVuaW5nID0gbGlzdGVuaW5nVG9baWRdOwoKICAgIC8vIFRoaXMgb2JqZWN0IGlzIG5vdCBsaXN0ZW5pbmcgdG8gYW55IG90aGVyIGV2ZW50cyBvbiBgb2JqYCB5ZXQuCiAgICAvLyBTZXR1cCB0aGUgbmVjZXNzYXJ5IHJlZmVyZW5jZXMgdG8gdHJhY2sgdGhlIGxpc3RlbmluZyBjYWxsYmFja3MuCiAgICBpZiAoIWxpc3RlbmluZykgewogICAgICB0aGlzLl9saXN0ZW5JZCB8fCAodGhpcy5fbGlzdGVuSWQgPSBfLnVuaXF1ZUlkKCdsJykpOwogICAgICBsaXN0ZW5pbmcgPSBfbGlzdGVuaW5nID0gbGlzdGVuaW5nVG9baWRdID0gbmV3IExpc3RlbmluZyh0aGlzLCBvYmopOwogICAgfQoKICAgIC8vIEJpbmQgY2FsbGJhY2tzIG9uIG9iai4KICAgIHZhciBlcnJvciA9IHRyeUNhdGNoT24ob2JqLCBuYW1lLCBjYWxsYmFjaywgdGhpcyk7CiAgICBfbGlzdGVuaW5nID0gdm9pZCAwOwoKICAgIGlmIChlcnJvcikgdGhyb3cgZXJyb3I7CiAgICAvLyBJZiB0aGUgdGFyZ2V0IG9iaiBpcyBub3QgQmFja2JvbmUuRXZlbnRzLCB0cmFjayBldmVudHMgbWFudWFsbHkuCiAgICBpZiAobGlzdGVuaW5nLmludGVyb3ApIGxpc3RlbmluZy5vbihuYW1lLCBjYWxsYmFjayk7CgogICAgcmV0dXJuIHRoaXM7CiAgfTsKCiAgLy8gVGhlIHJlZHVjaW5nIEFQSSB0aGF0IGFkZHMgYSBjYWxsYmFjayB0byB0aGUgYGV2ZW50c2Agb2JqZWN0LgogIHZhciBvbkFwaSA9IGZ1bmN0aW9uKGV2ZW50cywgbmFtZSwgY2FsbGJhY2ssIG9wdGlvbnMpIHsKICAgIGlmIChjYWxsYmFjaykgewogICAgICB2YXIgaGFuZGxlcnMgPSBldmVudHNbbmFtZV0gfHwgKGV2ZW50c1tuYW1lXSA9IFtdKTsKICAgICAgdmFyIGNvbnRleHQgPSBvcHRpb25zLmNvbnRleHQsIGN0eCA9IG9wdGlvbnMuY3R4LCBsaXN0ZW5pbmcgPSBvcHRpb25zLmxpc3RlbmluZzsKICAgICAgaWYgKGxpc3RlbmluZykgbGlzdGVuaW5nLmNvdW50Kys7CgogICAgICBoYW5kbGVycy5wdXNoKHtjYWxsYmFjazogY2FsbGJhY2ssIGNvbnRleHQ6IGNvbnRleHQsIGN0eDogY29udGV4dCB8fCBjdHgsIGxpc3RlbmluZzogbGlzdGVuaW5nfSk7CiAgICB9CiAgICByZXR1cm4gZXZlbnRzOwogIH07CgogIC8vIEFuIHRyeS1jYXRjaCBndWFyZGVkICNvbiBmdW5jdGlvbiwgdG8gcHJldmVudCBwb2lzb25pbmcgdGhlIGdsb2JhbAogIC8vIGBfbGlzdGVuaW5nYCB2YXJpYWJsZS4KICB2YXIgdHJ5Q2F0Y2hPbiA9IGZ1bmN0aW9uKG9iaiwgbmFtZSwgY2FsbGJhY2ssIGNvbnRleHQpIHsKICAgIHRyeSB7CiAgICAgIG9iai5vbihuYW1lLCBjYWxsYmFjaywgY29udGV4dCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHJldHVybiBlOwogICAgfQogIH07CgogIC8vIFJlbW92ZSBvbmUgb3IgbWFueSBjYWxsYmFja3MuIElmIGBjb250ZXh0YCBpcyBudWxsLCByZW1vdmVzIGFsbAogIC8vIGNhbGxiYWNrcyB3aXRoIHRoYXQgZnVuY3Rpb24uIElmIGBjYWxsYmFja2AgaXMgbnVsbCwgcmVtb3ZlcyBhbGwKICAvLyBjYWxsYmFja3MgZm9yIHRoZSBldmVudC4gSWYgYG5hbWVgIGlzIG51bGwsIHJlbW92ZXMgYWxsIGJvdW5kCiAgLy8gY2FsbGJhY2tzIGZvciBhbGwgZXZlbnRzLgogIEV2ZW50cy5vZmYgPSBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaywgY29udGV4dCkgewogICAgaWYgKCF0aGlzLl9ldmVudHMpIHJldHVybiB0aGlzOwogICAgdGhpcy5fZXZlbnRzID0gZXZlbnRzQXBpKG9mZkFwaSwgdGhpcy5fZXZlbnRzLCBuYW1lLCBjYWxsYmFjaywgewogICAgICBjb250ZXh0OiBjb250ZXh0LAogICAgICBsaXN0ZW5lcnM6IHRoaXMuX2xpc3RlbmVycwogICAgfSk7CgogICAgcmV0dXJuIHRoaXM7CiAgfTsKCiAgLy8gVGVsbCB0aGlzIG9iamVjdCB0byBzdG9wIGxpc3RlbmluZyB0byBlaXRoZXIgc3BlY2lmaWMgZXZlbnRzIC4uLiBvcgogIC8vIHRvIGV2ZXJ5IG9iamVjdCBpdCdzIGN1cnJlbnRseSBsaXN0ZW5pbmcgdG8uCiAgRXZlbnRzLnN0b3BMaXN0ZW5pbmcgPSBmdW5jdGlvbihvYmosIG5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgbGlzdGVuaW5nVG8gPSB0aGlzLl9saXN0ZW5pbmdUbzsKICAgIGlmICghbGlzdGVuaW5nVG8pIHJldHVybiB0aGlzOwoKICAgIHZhciBpZHMgPSBvYmogPyBbb2JqLl9saXN0ZW5JZF0gOiBfLmtleXMobGlzdGVuaW5nVG8pOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGxpc3RlbmluZyA9IGxpc3RlbmluZ1RvW2lkc1tpXV07CgogICAgICAvLyBJZiBsaXN0ZW5pbmcgZG9lc24ndCBleGlzdCwgdGhpcyBvYmplY3QgaXMgbm90IGN1cnJlbnRseQogICAgICAvLyBsaXN0ZW5pbmcgdG8gb2JqLiBCcmVhayBvdXQgZWFybHkuCiAgICAgIGlmICghbGlzdGVuaW5nKSBicmVhazsKCiAgICAgIGxpc3RlbmluZy5vYmoub2ZmKG5hbWUsIGNhbGxiYWNrLCB0aGlzKTsKICAgICAgaWYgKGxpc3RlbmluZy5pbnRlcm9wKSBsaXN0ZW5pbmcub2ZmKG5hbWUsIGNhbGxiYWNrKTsKICAgIH0KICAgIGlmIChfLmlzRW1wdHkobGlzdGVuaW5nVG8pKSB0aGlzLl9saXN0ZW5pbmdUbyA9IHZvaWQgMDsKCiAgICByZXR1cm4gdGhpczsKICB9OwoKICAvLyBUaGUgcmVkdWNpbmcgQVBJIHRoYXQgcmVtb3ZlcyBhIGNhbGxiYWNrIGZyb20gdGhlIGBldmVudHNgIG9iamVjdC4KICB2YXIgb2ZmQXBpID0gZnVuY3Rpb24oZXZlbnRzLCBuYW1lLCBjYWxsYmFjaywgb3B0aW9ucykgewogICAgaWYgKCFldmVudHMpIHJldHVybjsKCiAgICB2YXIgY29udGV4dCA9IG9wdGlvbnMuY29udGV4dCwgbGlzdGVuZXJzID0gb3B0aW9ucy5saXN0ZW5lcnM7CiAgICB2YXIgaSA9IDAsIG5hbWVzOwoKICAgIC8vIERlbGV0ZSBhbGwgZXZlbnQgbGlzdGVuZXJzIGFuZCAiZHJvcCIgZXZlbnRzLgogICAgaWYgKCFuYW1lICYmICFjb250ZXh0ICYmICFjYWxsYmFjaykgewogICAgICBmb3IgKG5hbWVzID0gXy5rZXlzKGxpc3RlbmVycyk7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykgewogICAgICAgIGxpc3RlbmVyc1tuYW1lc1tpXV0uY2xlYW51cCgpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBuYW1lcyA9IG5hbWUgPyBbbmFtZV0gOiBfLmtleXMoZXZlbnRzKTsKICAgIGZvciAoOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHsKICAgICAgbmFtZSA9IG5hbWVzW2ldOwogICAgICB2YXIgaGFuZGxlcnMgPSBldmVudHNbbmFtZV07CgogICAgICAvLyBCYWlsIG91dCBpZiB0aGVyZSBhcmUgbm8gZXZlbnRzIHN0b3JlZC4KICAgICAgaWYgKCFoYW5kbGVycykgYnJlYWs7CgogICAgICAvLyBGaW5kIGFueSByZW1haW5pbmcgZXZlbnRzLgogICAgICB2YXIgcmVtYWluaW5nID0gW107CiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaGFuZGxlcnMubGVuZ3RoOyBqKyspIHsKICAgICAgICB2YXIgaGFuZGxlciA9IGhhbmRsZXJzW2pdOwogICAgICAgIGlmICgKICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrICE9PSBoYW5kbGVyLmNhbGxiYWNrICYmCiAgICAgICAgICAgIGNhbGxiYWNrICE9PSBoYW5kbGVyLmNhbGxiYWNrLl9jYWxsYmFjayB8fAogICAgICAgICAgICAgIGNvbnRleHQgJiYgY29udGV4dCAhPT0gaGFuZGxlci5jb250ZXh0CiAgICAgICAgKSB7CiAgICAgICAgICByZW1haW5pbmcucHVzaChoYW5kbGVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIGxpc3RlbmluZyA9IGhhbmRsZXIubGlzdGVuaW5nOwogICAgICAgICAgaWYgKGxpc3RlbmluZykgbGlzdGVuaW5nLm9mZihuYW1lLCBjYWxsYmFjayk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBSZXBsYWNlIGV2ZW50cyBpZiB0aGVyZSBhcmUgYW55IHJlbWFpbmluZy4gIE90aGVyd2lzZSwgY2xlYW4gdXAuCiAgICAgIGlmIChyZW1haW5pbmcubGVuZ3RoKSB7CiAgICAgICAgZXZlbnRzW25hbWVdID0gcmVtYWluaW5nOwogICAgICB9IGVsc2UgewogICAgICAgIGRlbGV0ZSBldmVudHNbbmFtZV07CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZXZlbnRzOwogIH07CgogIC8vIEJpbmQgYW4gZXZlbnQgdG8gb25seSBiZSB0cmlnZ2VyZWQgYSBzaW5nbGUgdGltZS4gQWZ0ZXIgdGhlIGZpcnN0IHRpbWUKICAvLyB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZCwgaXRzIGxpc3RlbmVyIHdpbGwgYmUgcmVtb3ZlZC4gSWYgbXVsdGlwbGUgZXZlbnRzCiAgLy8gYXJlIHBhc3NlZCBpbiB1c2luZyB0aGUgc3BhY2Utc2VwYXJhdGVkIHN5bnRheCwgdGhlIGhhbmRsZXIgd2lsbCBmaXJlCiAgLy8gb25jZSBmb3IgZWFjaCBldmVudCwgbm90IG9uY2UgZm9yIGEgY29tYmluYXRpb24gb2YgYWxsIGV2ZW50cy4KICBFdmVudHMub25jZSA9IGZ1bmN0aW9uKG5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7CiAgICAvLyBNYXAgdGhlIGV2ZW50IGludG8gYSBge2V2ZW50OiBvbmNlfWAgb2JqZWN0LgogICAgdmFyIGV2ZW50cyA9IGV2ZW50c0FwaShvbmNlTWFwLCB7fSwgbmFtZSwgY2FsbGJhY2ssIHRoaXMub2ZmLmJpbmQodGhpcykpOwogICAgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyAmJiBjb250ZXh0ID09IG51bGwpIGNhbGxiYWNrID0gdm9pZCAwOwogICAgcmV0dXJuIHRoaXMub24oZXZlbnRzLCBjYWxsYmFjaywgY29udGV4dCk7CiAgfTsKCiAgLy8gSW52ZXJzaW9uLW9mLWNvbnRyb2wgdmVyc2lvbnMgb2YgYG9uY2VgLgogIEV2ZW50cy5saXN0ZW5Ub09uY2UgPSBmdW5jdGlvbihvYmosIG5hbWUsIGNhbGxiYWNrKSB7CiAgICAvLyBNYXAgdGhlIGV2ZW50IGludG8gYSBge2V2ZW50OiBvbmNlfWAgb2JqZWN0LgogICAgdmFyIGV2ZW50cyA9IGV2ZW50c0FwaShvbmNlTWFwLCB7fSwgbmFtZSwgY2FsbGJhY2ssIHRoaXMuc3RvcExpc3RlbmluZy5iaW5kKHRoaXMsIG9iaikpOwogICAgcmV0dXJuIHRoaXMubGlzdGVuVG8ob2JqLCBldmVudHMpOwogIH07CgogIC8vIFJlZHVjZXMgdGhlIGV2ZW50IGNhbGxiYWNrcyBpbnRvIGEgbWFwIG9mIGB7ZXZlbnQ6IG9uY2VXcmFwcGVyfWAuCiAgLy8gYG9mZmVyYCB1bmJpbmRzIHRoZSBgb25jZVdyYXBwZXJgIGFmdGVyIGl0IGhhcyBiZWVuIGNhbGxlZC4KICB2YXIgb25jZU1hcCA9IGZ1bmN0aW9uKG1hcCwgbmFtZSwgY2FsbGJhY2ssIG9mZmVyKSB7CiAgICBpZiAoY2FsbGJhY2spIHsKICAgICAgdmFyIG9uY2UgPSBtYXBbbmFtZV0gPSBfLm9uY2UoZnVuY3Rpb24oKSB7CiAgICAgICAgb2ZmZXIobmFtZSwgb25jZSk7CiAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgfSk7CiAgICAgIG9uY2UuX2NhbGxiYWNrID0gY2FsbGJhY2s7CiAgICB9CiAgICByZXR1cm4gbWFwOwogIH07CgogIC8vIFRyaWdnZXIgb25lIG9yIG1hbnkgZXZlbnRzLCBmaXJpbmcgYWxsIGJvdW5kIGNhbGxiYWNrcy4gQ2FsbGJhY2tzIGFyZQogIC8vIHBhc3NlZCB0aGUgc2FtZSBhcmd1bWVudHMgYXMgYHRyaWdnZXJgIGlzLCBhcGFydCBmcm9tIHRoZSBldmVudCBuYW1lCiAgLy8gKHVubGVzcyB5b3UncmUgbGlzdGVuaW5nIG9uIGAiYWxsImAsIHdoaWNoIHdpbGwgY2F1c2UgeW91ciBjYWxsYmFjayB0bwogIC8vIHJlY2VpdmUgdGhlIHRydWUgbmFtZSBvZiB0aGUgZXZlbnQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50KS4KICBFdmVudHMudHJpZ2dlciA9IGZ1bmN0aW9uKG5hbWUpIHsKICAgIGlmICghdGhpcy5fZXZlbnRzKSByZXR1cm4gdGhpczsKCiAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoMCwgYXJndW1lbnRzLmxlbmd0aCAtIDEpOwogICAgdmFyIGFyZ3MgPSBBcnJheShsZW5ndGgpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMV07CgogICAgZXZlbnRzQXBpKHRyaWdnZXJBcGksIHRoaXMuX2V2ZW50cywgbmFtZSwgdm9pZCAwLCBhcmdzKTsKICAgIHJldHVybiB0aGlzOwogIH07CgogIC8vIEhhbmRsZXMgdHJpZ2dlcmluZyB0aGUgYXBwcm9wcmlhdGUgZXZlbnQgY2FsbGJhY2tzLgogIHZhciB0cmlnZ2VyQXBpID0gZnVuY3Rpb24ob2JqRXZlbnRzLCBuYW1lLCBjYWxsYmFjaywgYXJncykgewogICAgaWYgKG9iakV2ZW50cykgewogICAgICB2YXIgZXZlbnRzID0gb2JqRXZlbnRzW25hbWVdOwogICAgICB2YXIgYWxsRXZlbnRzID0gb2JqRXZlbnRzLmFsbDsKICAgICAgaWYgKGV2ZW50cyAmJiBhbGxFdmVudHMpIGFsbEV2ZW50cyA9IGFsbEV2ZW50cy5zbGljZSgpOwogICAgICBpZiAoZXZlbnRzKSB0cmlnZ2VyRXZlbnRzKGV2ZW50cywgYXJncyk7CiAgICAgIGlmIChhbGxFdmVudHMpIHRyaWdnZXJFdmVudHMoYWxsRXZlbnRzLCBbbmFtZV0uY29uY2F0KGFyZ3MpKTsKICAgIH0KICAgIHJldHVybiBvYmpFdmVudHM7CiAgfTsKCiAgLy8gQSBkaWZmaWN1bHQtdG8tYmVsaWV2ZSwgYnV0IG9wdGltaXplZCBpbnRlcm5hbCBkaXNwYXRjaCBmdW5jdGlvbiBmb3IKICAvLyB0cmlnZ2VyaW5nIGV2ZW50cy4gVHJpZXMgdG8ga2VlcCB0aGUgdXN1YWwgY2FzZXMgc3BlZWR5IChtb3N0IGludGVybmFsCiAgLy8gQmFja2JvbmUgZXZlbnRzIGhhdmUgMyBhcmd1bWVudHMpLgogIHZhciB0cmlnZ2VyRXZlbnRzID0gZnVuY3Rpb24oZXZlbnRzLCBhcmdzKSB7CiAgICB2YXIgZXYsIGkgPSAtMSwgbCA9IGV2ZW50cy5sZW5ndGgsIGExID0gYXJnc1swXSwgYTIgPSBhcmdzWzFdLCBhMyA9IGFyZ3NbMl07CiAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7CiAgICAgIGNhc2UgMDogd2hpbGUgKCsraSA8IGwpIChldiA9IGV2ZW50c1tpXSkuY2FsbGJhY2suY2FsbChldi5jdHgpOyByZXR1cm47CiAgICAgIGNhc2UgMTogd2hpbGUgKCsraSA8IGwpIChldiA9IGV2ZW50c1tpXSkuY2FsbGJhY2suY2FsbChldi5jdHgsIGExKTsgcmV0dXJuOwogICAgICBjYXNlIDI6IHdoaWxlICgrK2kgPCBsKSAoZXYgPSBldmVudHNbaV0pLmNhbGxiYWNrLmNhbGwoZXYuY3R4LCBhMSwgYTIpOyByZXR1cm47CiAgICAgIGNhc2UgMzogd2hpbGUgKCsraSA8IGwpIChldiA9IGV2ZW50c1tpXSkuY2FsbGJhY2suY2FsbChldi5jdHgsIGExLCBhMiwgYTMpOyByZXR1cm47CiAgICAgIGRlZmF1bHQ6IHdoaWxlICgrK2kgPCBsKSAoZXYgPSBldmVudHNbaV0pLmNhbGxiYWNrLmFwcGx5KGV2LmN0eCwgYXJncyk7IHJldHVybjsKICAgIH0KICB9OwoKICAvLyBBIGxpc3RlbmluZyBjbGFzcyB0aGF0IHRyYWNrcyBhbmQgY2xlYW5zIHVwIG1lbW9yeSBiaW5kaW5ncwogIC8vIHdoZW4gYWxsIGNhbGxiYWNrcyBoYXZlIGJlZW4gb2ZmZWQuCiAgdmFyIExpc3RlbmluZyA9IGZ1bmN0aW9uKGxpc3RlbmVyLCBvYmopIHsKICAgIHRoaXMuaWQgPSBsaXN0ZW5lci5fbGlzdGVuSWQ7CiAgICB0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7CiAgICB0aGlzLm9iaiA9IG9iajsKICAgIHRoaXMuaW50ZXJvcCA9IHRydWU7CiAgICB0aGlzLmNvdW50ID0gMDsKICAgIHRoaXMuX2V2ZW50cyA9IHZvaWQgMDsKICB9OwoKICBMaXN0ZW5pbmcucHJvdG90eXBlLm9uID0gRXZlbnRzLm9uOwoKICAvLyBPZmZzIGEgY2FsbGJhY2sgKG9yIHNldmVyYWwpLgogIC8vIFVzZXMgYW4gb3B0aW1pemVkIGNvdW50ZXIgaWYgdGhlIGxpc3RlbmVlIHVzZXMgQmFja2JvbmUuRXZlbnRzLgogIC8vIE90aGVyd2lzZSwgZmFsbHMgYmFjayB0byBtYW51YWwgdHJhY2tpbmcgdG8gc3VwcG9ydCBldmVudHMKICAvLyBsaWJyYXJ5IGludGVyb3AuCiAgTGlzdGVuaW5nLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaykgewogICAgdmFyIGNsZWFudXA7CiAgICBpZiAodGhpcy5pbnRlcm9wKSB7CiAgICAgIHRoaXMuX2V2ZW50cyA9IGV2ZW50c0FwaShvZmZBcGksIHRoaXMuX2V2ZW50cywgbmFtZSwgY2FsbGJhY2ssIHsKICAgICAgICBjb250ZXh0OiB2b2lkIDAsCiAgICAgICAgbGlzdGVuZXJzOiB2b2lkIDAKICAgICAgfSk7CiAgICAgIGNsZWFudXAgPSAhdGhpcy5fZXZlbnRzOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5jb3VudC0tOwogICAgICBjbGVhbnVwID0gdGhpcy5jb3VudCA9PT0gMDsKICAgIH0KICAgIGlmIChjbGVhbnVwKSB0aGlzLmNsZWFudXAoKTsKICB9OwoKICAvLyBDbGVhbnMgdXAgbWVtb3J5IGJpbmRpbmdzIGJldHdlZW4gdGhlIGxpc3RlbmVyIGFuZCB0aGUgbGlzdGVuZWUuCiAgTGlzdGVuaW5nLnByb3RvdHlwZS5jbGVhbnVwID0gZnVuY3Rpb24oKSB7CiAgICBkZWxldGUgdGhpcy5saXN0ZW5lci5fbGlzdGVuaW5nVG9bdGhpcy5vYmouX2xpc3RlbklkXTsKICAgIGlmICghdGhpcy5pbnRlcm9wKSBkZWxldGUgdGhpcy5vYmouX2xpc3RlbmVyc1t0aGlzLmlkXTsKICB9OwoKICAvLyBBbGlhc2VzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICBFdmVudHMuYmluZCAgID0gRXZlbnRzLm9uOwogIEV2ZW50cy51bmJpbmQgPSBFdmVudHMub2ZmOwoKICAvLyBBbGxvdyB0aGUgYEJhY2tib25lYCBvYmplY3QgdG8gc2VydmUgYXMgYSBnbG9iYWwgZXZlbnQgYnVzLCBmb3IgZm9sa3Mgd2hvCiAgLy8gd2FudCBnbG9iYWwgInB1YnN1YiIgaW4gYSBjb252ZW5pZW50IHBsYWNlLgogIF8uZXh0ZW5kKEJhY2tib25lLCBFdmVudHMpOwoKICAvLyBCYWNrYm9uZS5Nb2RlbAogIC8vIC0tLS0tLS0tLS0tLS0tCgogIC8vIEJhY2tib25lICoqTW9kZWxzKiogYXJlIHRoZSBiYXNpYyBkYXRhIG9iamVjdCBpbiB0aGUgZnJhbWV3b3JrIC0tCiAgLy8gZnJlcXVlbnRseSByZXByZXNlbnRpbmcgYSByb3cgaW4gYSB0YWJsZSBpbiBhIGRhdGFiYXNlIG9uIHlvdXIgc2VydmVyLgogIC8vIEEgZGlzY3JldGUgY2h1bmsgb2YgZGF0YSBhbmQgYSBidW5jaCBvZiB1c2VmdWwsIHJlbGF0ZWQgbWV0aG9kcyBmb3IKICAvLyBwZXJmb3JtaW5nIGNvbXB1dGF0aW9ucyBhbmQgdHJhbnNmb3JtYXRpb25zIG9uIHRoYXQgZGF0YS4KCiAgLy8gQ3JlYXRlIGEgbmV3IG1vZGVsIHdpdGggdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGVzLiBBIGNsaWVudCBpZCAoYGNpZGApCiAgLy8gaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYW5kIGFzc2lnbmVkIGZvciB5b3UuCiAgdmFyIE1vZGVsID0gQmFja2JvbmUuTW9kZWwgPSBmdW5jdGlvbihhdHRyaWJ1dGVzLCBvcHRpb25zKSB7CiAgICB2YXIgYXR0cnMgPSBhdHRyaWJ1dGVzIHx8IHt9OwogICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTsKICAgIHRoaXMucHJlaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgdGhpcy5jaWQgPSBfLnVuaXF1ZUlkKHRoaXMuY2lkUHJlZml4KTsKICAgIHRoaXMuYXR0cmlidXRlcyA9IHt9OwogICAgaWYgKG9wdGlvbnMuY29sbGVjdGlvbikgdGhpcy5jb2xsZWN0aW9uID0gb3B0aW9ucy5jb2xsZWN0aW9uOwogICAgaWYgKG9wdGlvbnMucGFyc2UpIGF0dHJzID0gdGhpcy5wYXJzZShhdHRycywgb3B0aW9ucykgfHwge307CiAgICB2YXIgZGVmYXVsdHMgPSBfLnJlc3VsdCh0aGlzLCAnZGVmYXVsdHMnKTsKICAgIGF0dHJzID0gXy5kZWZhdWx0cyhfLmV4dGVuZCh7fSwgZGVmYXVsdHMsIGF0dHJzKSwgZGVmYXVsdHMpOwogICAgdGhpcy5zZXQoYXR0cnMsIG9wdGlvbnMpOwogICAgdGhpcy5jaGFuZ2VkID0ge307CiAgICB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICB9OwoKICAvLyBBdHRhY2ggYWxsIGluaGVyaXRhYmxlIG1ldGhvZHMgdG8gdGhlIE1vZGVsIHByb3RvdHlwZS4KICBfLmV4dGVuZChNb2RlbC5wcm90b3R5cGUsIEV2ZW50cywgewoKICAgIC8vIEEgaGFzaCBvZiBhdHRyaWJ1dGVzIHdob3NlIGN1cnJlbnQgYW5kIHByZXZpb3VzIHZhbHVlIGRpZmZlci4KICAgIGNoYW5nZWQ6IG51bGwsCgogICAgLy8gVGhlIHZhbHVlIHJldHVybmVkIGR1cmluZyB0aGUgbGFzdCBmYWlsZWQgdmFsaWRhdGlvbi4KICAgIHZhbGlkYXRpb25FcnJvcjogbnVsbCwKCiAgICAvLyBUaGUgZGVmYXVsdCBuYW1lIGZvciB0aGUgSlNPTiBgaWRgIGF0dHJpYnV0ZSBpcyBgImlkImAuIE1vbmdvREIgYW5kCiAgICAvLyBDb3VjaERCIHVzZXJzIG1heSB3YW50IHRvIHNldCB0aGlzIHRvIGAiX2lkImAuCiAgICBpZEF0dHJpYnV0ZTogJ2lkJywKCiAgICAvLyBUaGUgcHJlZml4IGlzIHVzZWQgdG8gY3JlYXRlIHRoZSBjbGllbnQgaWQgd2hpY2ggaXMgdXNlZCB0byBpZGVudGlmeSBtb2RlbHMgbG9jYWxseS4KICAgIC8vIFlvdSBtYXkgd2FudCB0byBvdmVycmlkZSB0aGlzIGlmIHlvdSdyZSBleHBlcmllbmNpbmcgbmFtZSBjbGFzaGVzIHdpdGggbW9kZWwgaWRzLgogICAgY2lkUHJlZml4OiAnYycsCgogICAgLy8gcHJlaW5pdGlhbGl6ZSBpcyBhbiBlbXB0eSBmdW5jdGlvbiBieSBkZWZhdWx0LiBZb3UgY2FuIG92ZXJyaWRlIGl0IHdpdGggYSBmdW5jdGlvbgogICAgLy8gb3Igb2JqZWN0LiAgcHJlaW5pdGlhbGl6ZSB3aWxsIHJ1biBiZWZvcmUgYW55IGluc3RhbnRpYXRpb24gbG9naWMgaXMgcnVuIGluIHRoZSBNb2RlbC4KICAgIHByZWluaXRpYWxpemU6IGZ1bmN0aW9uKCl7fSwKCiAgICAvLyBJbml0aWFsaXplIGlzIGFuIGVtcHR5IGZ1bmN0aW9uIGJ5IGRlZmF1bHQuIE92ZXJyaWRlIGl0IHdpdGggeW91ciBvd24KICAgIC8vIGluaXRpYWxpemF0aW9uIGxvZ2ljLgogICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKXt9LAoKICAgIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG1vZGVsJ3MgYGF0dHJpYnV0ZXNgIG9iamVjdC4KICAgIHRvSlNPTjogZnVuY3Rpb24ob3B0aW9ucykgewogICAgICByZXR1cm4gXy5jbG9uZSh0aGlzLmF0dHJpYnV0ZXMpOwogICAgfSwKCiAgICAvLyBQcm94eSBgQmFja2JvbmUuc3luY2AgYnkgZGVmYXVsdCAtLSBidXQgb3ZlcnJpZGUgdGhpcyBpZiB5b3UgbmVlZAogICAgLy8gY3VzdG9tIHN5bmNpbmcgc2VtYW50aWNzIGZvciAqdGhpcyogcGFydGljdWxhciBtb2RlbC4KICAgIHN5bmM6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gQmFja2JvbmUuc3luYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgfSwKCiAgICAvLyBHZXQgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZS4KICAgIGdldDogZnVuY3Rpb24oYXR0cikgewogICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW2F0dHJdOwogICAgfSwKCiAgICAvLyBHZXQgdGhlIEhUTUwtZXNjYXBlZCB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUuCiAgICBlc2NhcGU6IGZ1bmN0aW9uKGF0dHIpIHsKICAgICAgcmV0dXJuIF8uZXNjYXBlKHRoaXMuZ2V0KGF0dHIpKTsKICAgIH0sCgogICAgLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGF0dHJpYnV0ZSBjb250YWlucyBhIHZhbHVlIHRoYXQgaXMgbm90IG51bGwKICAgIC8vIG9yIHVuZGVmaW5lZC4KICAgIGhhczogZnVuY3Rpb24oYXR0cikgewogICAgICByZXR1cm4gdGhpcy5nZXQoYXR0cikgIT0gbnVsbDsKICAgIH0sCgogICAgLy8gU3BlY2lhbC1jYXNlZCBwcm94eSB0byB1bmRlcnNjb3JlJ3MgYF8ubWF0Y2hlc2AgbWV0aG9kLgogICAgbWF0Y2hlczogZnVuY3Rpb24oYXR0cnMpIHsKICAgICAgcmV0dXJuICEhXy5pdGVyYXRlZShhdHRycywgdGhpcykodGhpcy5hdHRyaWJ1dGVzKTsKICAgIH0sCgogICAgLy8gU2V0IGEgaGFzaCBvZiBtb2RlbCBhdHRyaWJ1dGVzIG9uIHRoZSBvYmplY3QsIGZpcmluZyBgImNoYW5nZSJgLiBUaGlzIGlzCiAgICAvLyB0aGUgY29yZSBwcmltaXRpdmUgb3BlcmF0aW9uIG9mIGEgbW9kZWwsIHVwZGF0aW5nIHRoZSBkYXRhIGFuZCBub3RpZnlpbmcKICAgIC8vIGFueW9uZSB3aG8gbmVlZHMgdG8ga25vdyBhYm91dCB0aGUgY2hhbmdlIGluIHN0YXRlLiBUaGUgaGVhcnQgb2YgdGhlIGJlYXN0LgogICAgc2V0OiBmdW5jdGlvbihrZXksIHZhbCwgb3B0aW9ucykgewogICAgICBpZiAoa2V5ID09IG51bGwpIHJldHVybiB0aGlzOwoKICAgICAgLy8gSGFuZGxlIGJvdGggYCJrZXkiLCB2YWx1ZWAgYW5kIGB7a2V5OiB2YWx1ZX1gIC1zdHlsZSBhcmd1bWVudHMuCiAgICAgIHZhciBhdHRyczsKICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSB7CiAgICAgICAgYXR0cnMgPSBrZXk7CiAgICAgICAgb3B0aW9ucyA9IHZhbDsKICAgICAgfSBlbHNlIHsKICAgICAgICAoYXR0cnMgPSB7fSlba2V5XSA9IHZhbDsKICAgICAgfQoKICAgICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTsKCiAgICAgIC8vIFJ1biB2YWxpZGF0aW9uLgogICAgICBpZiAoIXRoaXMuX3ZhbGlkYXRlKGF0dHJzLCBvcHRpb25zKSkgcmV0dXJuIGZhbHNlOwoKICAgICAgLy8gRXh0cmFjdCBhdHRyaWJ1dGVzIGFuZCBvcHRpb25zLgogICAgICB2YXIgdW5zZXQgICAgICA9IG9wdGlvbnMudW5zZXQ7CiAgICAgIHZhciBzaWxlbnQgICAgID0gb3B0aW9ucy5zaWxlbnQ7CiAgICAgIHZhciBjaGFuZ2VzICAgID0gW107CiAgICAgIHZhciBjaGFuZ2luZyAgID0gdGhpcy5fY2hhbmdpbmc7CiAgICAgIHRoaXMuX2NoYW5naW5nID0gdHJ1ZTsKCiAgICAgIGlmICghY2hhbmdpbmcpIHsKICAgICAgICB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMgPSBfLmNsb25lKHRoaXMuYXR0cmlidXRlcyk7CiAgICAgICAgdGhpcy5jaGFuZ2VkID0ge307CiAgICAgIH0KCiAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5hdHRyaWJ1dGVzOwogICAgICB2YXIgY2hhbmdlZCA9IHRoaXMuY2hhbmdlZDsKICAgICAgdmFyIHByZXYgICAgPSB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXM7CgogICAgICAvLyBGb3IgZWFjaCBgc2V0YCBhdHRyaWJ1dGUsIHVwZGF0ZSBvciBkZWxldGUgdGhlIGN1cnJlbnQgdmFsdWUuCiAgICAgIGZvciAodmFyIGF0dHIgaW4gYXR0cnMpIHsKICAgICAgICB2YWwgPSBhdHRyc1thdHRyXTsKICAgICAgICBpZiAoIV8uaXNFcXVhbChjdXJyZW50W2F0dHJdLCB2YWwpKSBjaGFuZ2VzLnB1c2goYXR0cik7CiAgICAgICAgaWYgKCFfLmlzRXF1YWwocHJldlthdHRyXSwgdmFsKSkgewogICAgICAgICAgY2hhbmdlZFthdHRyXSA9IHZhbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGVsZXRlIGNoYW5nZWRbYXR0cl07CiAgICAgICAgfQogICAgICAgIHVuc2V0ID8gZGVsZXRlIGN1cnJlbnRbYXR0cl0gOiBjdXJyZW50W2F0dHJdID0gdmFsOwogICAgICB9CgogICAgICAvLyBVcGRhdGUgdGhlIGBpZGAuCiAgICAgIGlmICh0aGlzLmlkQXR0cmlidXRlIGluIGF0dHJzKSB7CiAgICAgICAgdmFyIHByZXZJZCA9IHRoaXMuaWQ7CiAgICAgICAgdGhpcy5pZCA9IHRoaXMuZ2V0KHRoaXMuaWRBdHRyaWJ1dGUpOwogICAgICAgIHRoaXMudHJpZ2dlcignY2hhbmdlSWQnLCB0aGlzLCBwcmV2SWQsIG9wdGlvbnMpOwogICAgICB9CgogICAgICAvLyBUcmlnZ2VyIGFsbCByZWxldmFudCBhdHRyaWJ1dGUgY2hhbmdlcy4KICAgICAgaWYgKCFzaWxlbnQpIHsKICAgICAgICBpZiAoY2hhbmdlcy5sZW5ndGgpIHRoaXMuX3BlbmRpbmcgPSBvcHRpb25zOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbmdlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgdGhpcy50cmlnZ2VyKCdjaGFuZ2U6JyArIGNoYW5nZXNbaV0sIHRoaXMsIGN1cnJlbnRbY2hhbmdlc1tpXV0sIG9wdGlvbnMpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gWW91IG1pZ2h0IGJlIHdvbmRlcmluZyB3aHkgdGhlcmUncyBhIGB3aGlsZWAgbG9vcCBoZXJlLiBDaGFuZ2VzIGNhbgogICAgICAvLyBiZSByZWN1cnNpdmVseSBuZXN0ZWQgd2l0aGluIGAiY2hhbmdlImAgZXZlbnRzLgogICAgICBpZiAoY2hhbmdpbmcpIHJldHVybiB0aGlzOwogICAgICBpZiAoIXNpbGVudCkgewogICAgICAgIHdoaWxlICh0aGlzLl9wZW5kaW5nKSB7CiAgICAgICAgICBvcHRpb25zID0gdGhpcy5fcGVuZGluZzsKICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTsKICAgICAgICAgIHRoaXMudHJpZ2dlcignY2hhbmdlJywgdGhpcywgb3B0aW9ucyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTsKICAgICAgdGhpcy5fY2hhbmdpbmcgPSBmYWxzZTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9LAoKICAgIC8vIFJlbW92ZSBhbiBhdHRyaWJ1dGUgZnJvbSB0aGUgbW9kZWwsIGZpcmluZyBgImNoYW5nZSJgLiBgdW5zZXRgIGlzIGEgbm9vcAogICAgLy8gaWYgdGhlIGF0dHJpYnV0ZSBkb2Vzbid0IGV4aXN0LgogICAgdW5zZXQ6IGZ1bmN0aW9uKGF0dHIsIG9wdGlvbnMpIHsKICAgICAgcmV0dXJuIHRoaXMuc2V0KGF0dHIsIHZvaWQgMCwgXy5leHRlbmQoe30sIG9wdGlvbnMsIHt1bnNldDogdHJ1ZX0pKTsKICAgIH0sCgogICAgLy8gQ2xlYXIgYWxsIGF0dHJpYnV0ZXMgb24gdGhlIG1vZGVsLCBmaXJpbmcgYCJjaGFuZ2UiYC4KICAgIGNsZWFyOiBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgIHZhciBhdHRycyA9IHt9OwogICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5hdHRyaWJ1dGVzKSBhdHRyc1trZXldID0gdm9pZCAwOwogICAgICByZXR1cm4gdGhpcy5zZXQoYXR0cnMsIF8uZXh0ZW5kKHt9LCBvcHRpb25zLCB7dW5zZXQ6IHRydWV9KSk7CiAgICB9LAoKICAgIC8vIERldGVybWluZSBpZiB0aGUgbW9kZWwgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgYCJjaGFuZ2UiYCBldmVudC4KICAgIC8vIElmIHlvdSBzcGVjaWZ5IGFuIGF0dHJpYnV0ZSBuYW1lLCBkZXRlcm1pbmUgaWYgdGhhdCBhdHRyaWJ1dGUgaGFzIGNoYW5nZWQuCiAgICBoYXNDaGFuZ2VkOiBmdW5jdGlvbihhdHRyKSB7CiAgICAgIGlmIChhdHRyID09IG51bGwpIHJldHVybiAhXy5pc0VtcHR5KHRoaXMuY2hhbmdlZCk7CiAgICAgIHJldHVybiBfLmhhcyh0aGlzLmNoYW5nZWQsIGF0dHIpOwogICAgfSwKCiAgICAvLyBSZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBjaGFuZ2VkLCBvcgogICAgLy8gZmFsc2UgaWYgdGhlcmUgYXJlIG5vIGNoYW5nZWQgYXR0cmlidXRlcy4gVXNlZnVsIGZvciBkZXRlcm1pbmluZyB3aGF0CiAgICAvLyBwYXJ0cyBvZiBhIHZpZXcgbmVlZCB0byBiZSB1cGRhdGVkIGFuZC9vciB3aGF0IGF0dHJpYnV0ZXMgbmVlZCB0byBiZQogICAgLy8gcGVyc2lzdGVkIHRvIHRoZSBzZXJ2ZXIuIFVuc2V0IGF0dHJpYnV0ZXMgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkLgogICAgLy8gWW91IGNhbiBhbHNvIHBhc3MgYW4gYXR0cmlidXRlcyBvYmplY3QgdG8gZGlmZiBhZ2FpbnN0IHRoZSBtb2RlbCwKICAgIC8vIGRldGVybWluaW5nIGlmIHRoZXJlICp3b3VsZCBiZSogYSBjaGFuZ2UuCiAgICBjaGFuZ2VkQXR0cmlidXRlczogZnVuY3Rpb24oZGlmZikgewogICAgICBpZiAoIWRpZmYpIHJldHVybiB0aGlzLmhhc0NoYW5nZWQoKSA/IF8uY2xvbmUodGhpcy5jaGFuZ2VkKSA6IGZhbHNlOwogICAgICB2YXIgb2xkID0gdGhpcy5fY2hhbmdpbmcgPyB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXMgOiB0aGlzLmF0dHJpYnV0ZXM7CiAgICAgIHZhciBjaGFuZ2VkID0ge307CiAgICAgIHZhciBoYXNDaGFuZ2VkOwogICAgICBmb3IgKHZhciBhdHRyIGluIGRpZmYpIHsKICAgICAgICB2YXIgdmFsID0gZGlmZlthdHRyXTsKICAgICAgICBpZiAoXy5pc0VxdWFsKG9sZFthdHRyXSwgdmFsKSkgY29udGludWU7CiAgICAgICAgY2hhbmdlZFthdHRyXSA9IHZhbDsKICAgICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gaGFzQ2hhbmdlZCA/IGNoYW5nZWQgOiBmYWxzZTsKICAgIH0sCgogICAgLy8gR2V0IHRoZSBwcmV2aW91cyB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUsIHJlY29yZGVkIGF0IHRoZSB0aW1lIHRoZSBsYXN0CiAgICAvLyBgImNoYW5nZSJgIGV2ZW50IHdhcyBmaXJlZC4KICAgIHByZXZpb3VzOiBmdW5jdGlvbihhdHRyKSB7CiAgICAgIGlmIChhdHRyID09IG51bGwgfHwgIXRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcykgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiB0aGlzLl9wcmV2aW91c0F0dHJpYnV0ZXNbYXR0cl07CiAgICB9LAoKICAgIC8vIEdldCBhbGwgb2YgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIG1vZGVsIGF0IHRoZSB0aW1lIG9mIHRoZSBwcmV2aW91cwogICAgLy8gYCJjaGFuZ2UiYCBldmVudC4KICAgIHByZXZpb3VzQXR0cmlidXRlczogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBfLmNsb25lKHRoaXMuX3ByZXZpb3VzQXR0cmlidXRlcyk7CiAgICB9LAoKICAgIC8vIEZldGNoIHRoZSBtb2RlbCBmcm9tIHRoZSBzZXJ2ZXIsIG1lcmdpbmcgdGhlIHJlc3BvbnNlIHdpdGggdGhlIG1vZGVsJ3MKICAgIC8vIGxvY2FsIGF0dHJpYnV0ZXMuIEFueSBjaGFuZ2VkIGF0dHJpYnV0ZXMgd2lsbCB0cmlnZ2VyIGEgImNoYW5nZSIgZXZlbnQuCiAgICBmZXRjaDogZnVuY3Rpb24ob3B0aW9ucykgewogICAgICBvcHRpb25zID0gXy5leHRlbmQoe3BhcnNlOiB0cnVlfSwgb3B0aW9ucyk7CiAgICAgIHZhciBtb2RlbCA9IHRoaXM7CiAgICAgIHZhciBzdWNjZXNzID0gb3B0aW9ucy5zdWNjZXNzOwogICAgICBvcHRpb25zLnN1Y2Nlc3MgPSBmdW5jdGlvbihyZXNwKSB7CiAgICAgICAgdmFyIHNlcnZlckF0dHJzID0gb3B0aW9ucy5wYXJzZSA/IG1vZGVsLnBhcnNlKHJlc3AsIG9wdGlvbnMpIDogcmVzcDsKICAgICAgICBpZiAoIW1vZGVsLnNldChzZXJ2ZXJBdHRycywgb3B0aW9ucykpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAoc3VjY2Vzcykgc3VjY2Vzcy5jYWxsKG9wdGlvbnMuY29udGV4dCwgbW9kZWwsIHJlc3AsIG9wdGlvbnMpOwogICAgICAgIG1vZGVsLnRyaWdnZXIoJ3N5bmMnLCBtb2RlbCwgcmVzcCwgb3B0aW9ucyk7CiAgICAgIH07CiAgICAgIHdyYXBFcnJvcih0aGlzLCBvcHRpb25zKTsKICAgICAgcmV0dXJuIHRoaXMuc3luYygncmVhZCcsIHRoaXMsIG9wdGlvbnMpOwogICAgfSwKCiAgICAvLyBTZXQgYSBoYXNoIG9mIG1vZGVsIGF0dHJpYnV0ZXMsIGFuZCBzeW5jIHRoZSBtb2RlbCB0byB0aGUgc2VydmVyLgogICAgLy8gSWYgdGhlIHNlcnZlciByZXR1cm5zIGFuIGF0dHJpYnV0ZXMgaGFzaCB0aGF0IGRpZmZlcnMsIHRoZSBtb2RlbCdzCiAgICAvLyBzdGF0ZSB3aWxsIGJlIGBzZXRgIGFnYWluLgogICAgc2F2ZTogZnVuY3Rpb24oa2V5LCB2YWwsIG9wdGlvbnMpIHsKICAgICAgLy8gSGFuZGxlIGJvdGggYCJrZXkiLCB2YWx1ZWAgYW5kIGB7a2V5OiB2YWx1ZX1gIC1zdHlsZSBhcmd1bWVudHMuCiAgICAgIHZhciBhdHRyczsKICAgICAgaWYgKGtleSA9PSBudWxsIHx8IHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSB7CiAgICAgICAgYXR0cnMgPSBrZXk7CiAgICAgICAgb3B0aW9ucyA9IHZhbDsKICAgICAgfSBlbHNlIHsKICAgICAgICAoYXR0cnMgPSB7fSlba2V5XSA9IHZhbDsKICAgICAgfQoKICAgICAgb3B0aW9ucyA9IF8uZXh0ZW5kKHt2YWxpZGF0ZTogdHJ1ZSwgcGFyc2U6IHRydWV9LCBvcHRpb25zKTsKICAgICAgdmFyIHdhaXQgPSBvcHRpb25zLndhaXQ7CgogICAgICAvLyBJZiB3ZSdyZSBub3Qgd2FpdGluZyBhbmQgYXR0cmlidXRlcyBleGlzdCwgc2F2ZSBhY3RzIGFzCiAgICAgIC8vIGBzZXQoYXR0cikuc2F2ZShudWxsLCBvcHRzKWAgd2l0aCB2YWxpZGF0aW9uLiBPdGhlcndpc2UsIGNoZWNrIGlmCiAgICAgIC8vIHRoZSBtb2RlbCB3aWxsIGJlIHZhbGlkIHdoZW4gdGhlIGF0dHJpYnV0ZXMsIGlmIGFueSwgYXJlIHNldC4KICAgICAgaWYgKGF0dHJzICYmICF3YWl0KSB7CiAgICAgICAgaWYgKCF0aGlzLnNldChhdHRycywgb3B0aW9ucykpIHJldHVybiBmYWxzZTsKICAgICAgfSBlbHNlIGlmICghdGhpcy5fdmFsaWRhdGUoYXR0cnMsIG9wdGlvbnMpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICAvLyBBZnRlciBhIHN1Y2Nlc3NmdWwgc2VydmVyLXNpZGUgc2F2ZSwgdGhlIGNsaWVudCBpcyAob3B0aW9uYWxseSkKICAgICAgLy8gdXBkYXRlZCB3aXRoIHRoZSBzZXJ2ZXItc2lkZSBzdGF0ZS4KICAgICAgdmFyIG1vZGVsID0gdGhpczsKICAgICAgdmFyIHN1Y2Nlc3MgPSBvcHRpb25zLnN1Y2Nlc3M7CiAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVzOwogICAgICBvcHRpb25zLnN1Y2Nlc3MgPSBmdW5jdGlvbihyZXNwKSB7CiAgICAgICAgLy8gRW5zdXJlIGF0dHJpYnV0ZXMgYXJlIHJlc3RvcmVkIGR1cmluZyBzeW5jaHJvbm91cyBzYXZlcy4KICAgICAgICBtb2RlbC5hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKICAgICAgICB2YXIgc2VydmVyQXR0cnMgPSBvcHRpb25zLnBhcnNlID8gbW9kZWwucGFyc2UocmVzcCwgb3B0aW9ucykgOiByZXNwOwogICAgICAgIGlmICh3YWl0KSBzZXJ2ZXJBdHRycyA9IF8uZXh0ZW5kKHt9LCBhdHRycywgc2VydmVyQXR0cnMpOwogICAgICAgIGlmIChzZXJ2ZXJBdHRycyAmJiAhbW9kZWwuc2V0KHNlcnZlckF0dHJzLCBvcHRpb25zKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChzdWNjZXNzKSBzdWNjZXNzLmNhbGwob3B0aW9ucy5jb250ZXh0LCBtb2RlbCwgcmVzcCwgb3B0aW9ucyk7CiAgICAgICAgbW9kZWwudHJpZ2dlcignc3luYycsIG1vZGVsLCByZXNwLCBvcHRpb25zKTsKICAgICAgfTsKICAgICAgd3JhcEVycm9yKHRoaXMsIG9wdGlvbnMpOwoKICAgICAgLy8gU2V0IHRlbXBvcmFyeSBhdHRyaWJ1dGVzIGlmIGB7d2FpdDogdHJ1ZX1gIHRvIHByb3Blcmx5IGZpbmQgbmV3IGlkcy4KICAgICAgaWYgKGF0dHJzICYmIHdhaXQpIHRoaXMuYXR0cmlidXRlcyA9IF8uZXh0ZW5kKHt9LCBhdHRyaWJ1dGVzLCBhdHRycyk7CgogICAgICB2YXIgbWV0aG9kID0gdGhpcy5pc05ldygpID8gJ2NyZWF0ZScgOiBvcHRpb25zLnBhdGNoID8gJ3BhdGNoJyA6ICd1cGRhdGUnOwogICAgICBpZiAobWV0aG9kID09PSAncGF0Y2gnICYmICFvcHRpb25zLmF0dHJzKSBvcHRpb25zLmF0dHJzID0gYXR0cnM7CiAgICAgIHZhciB4aHIgPSB0aGlzLnN5bmMobWV0aG9kLCB0aGlzLCBvcHRpb25zKTsKCiAgICAgIC8vIFJlc3RvcmUgYXR0cmlidXRlcy4KICAgICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKCiAgICAgIHJldHVybiB4aHI7CiAgICB9LAoKICAgIC8vIERlc3Ryb3kgdGhpcyBtb2RlbCBvbiB0aGUgc2VydmVyIGlmIGl0IHdhcyBhbHJlYWR5IHBlcnNpc3RlZC4KICAgIC8vIE9wdGltaXN0aWNhbGx5IHJlbW92ZXMgdGhlIG1vZGVsIGZyb20gaXRzIGNvbGxlY3Rpb24sIGlmIGl0IGhhcyBvbmUuCiAgICAvLyBJZiBgd2FpdDogdHJ1ZWAgaXMgcGFzc2VkLCB3YWl0cyBmb3IgdGhlIHNlcnZlciB0byByZXNwb25kIGJlZm9yZSByZW1vdmFsLgogICAgZGVzdHJveTogZnVuY3Rpb24ob3B0aW9ucykgewogICAgICBvcHRpb25zID0gb3B0aW9ucyA/IF8uY2xvbmUob3B0aW9ucykgOiB7fTsKICAgICAgdmFyIG1vZGVsID0gdGhpczsKICAgICAgdmFyIHN1Y2Nlc3MgPSBvcHRpb25zLnN1Y2Nlc3M7CiAgICAgIHZhciB3YWl0ID0gb3B0aW9ucy53YWl0OwoKICAgICAgdmFyIGRlc3Ryb3kgPSBmdW5jdGlvbigpIHsKICAgICAgICBtb2RlbC5zdG9wTGlzdGVuaW5nKCk7CiAgICAgICAgbW9kZWwudHJpZ2dlcignZGVzdHJveScsIG1vZGVsLCBtb2RlbC5jb2xsZWN0aW9uLCBvcHRpb25zKTsKICAgICAgfTsKCiAgICAgIG9wdGlvbnMuc3VjY2VzcyA9IGZ1bmN0aW9uKHJlc3ApIHsKICAgICAgICBpZiAod2FpdCkgZGVzdHJveSgpOwogICAgICAgIGlmIChzdWNjZXNzKSBzdWNjZXNzLmNhbGwob3B0aW9ucy5jb250ZXh0LCBtb2RlbCwgcmVzcCwgb3B0aW9ucyk7CiAgICAgICAgaWYgKCFtb2RlbC5pc05ldygpKSBtb2RlbC50cmlnZ2VyKCdzeW5jJywgbW9kZWwsIHJlc3AsIG9wdGlvbnMpOwogICAgICB9OwoKICAgICAgdmFyIHhociA9IGZhbHNlOwogICAgICBpZiAodGhpcy5pc05ldygpKSB7CiAgICAgICAgXy5kZWZlcihvcHRpb25zLnN1Y2Nlc3MpOwogICAgICB9IGVsc2UgewogICAgICAgIHdyYXBFcnJvcih0aGlzLCBvcHRpb25zKTsKICAgICAgICB4aHIgPSB0aGlzLnN5bmMoJ2RlbGV0ZScsIHRoaXMsIG9wdGlvbnMpOwogICAgICB9CiAgICAgIGlmICghd2FpdCkgZGVzdHJveSgpOwogICAgICByZXR1cm4geGhyOwogICAgfSwKCiAgICAvLyBEZWZhdWx0IFVSTCBmb3IgdGhlIG1vZGVsJ3MgcmVwcmVzZW50YXRpb24gb24gdGhlIHNlcnZlciAtLSBpZiB5b3UncmUKICAgIC8vIHVzaW5nIEJhY2tib25lJ3MgcmVzdGZ1bCBtZXRob2RzLCBvdmVycmlkZSB0aGlzIHRvIGNoYW5nZSB0aGUgZW5kcG9pbnQKICAgIC8vIHRoYXQgd2lsbCBiZSBjYWxsZWQuCiAgICB1cmw6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgYmFzZSA9CiAgICAgICAgXy5yZXN1bHQodGhpcywgJ3VybFJvb3QnKSB8fAogICAgICAgIF8ucmVzdWx0KHRoaXMuY29sbGVjdGlvbiwgJ3VybCcpIHx8CiAgICAgICAgdXJsRXJyb3IoKTsKICAgICAgaWYgKHRoaXMuaXNOZXcoKSkgcmV0dXJuIGJhc2U7CiAgICAgIHZhciBpZCA9IHRoaXMuZ2V0KHRoaXMuaWRBdHRyaWJ1dGUpOwogICAgICByZXR1cm4gYmFzZS5yZXBsYWNlKC9bXlwvXSQvLCAnJCYvJykgKyBlbmNvZGVVUklDb21wb25lbnQoaWQpOwogICAgfSwKCiAgICAvLyAqKnBhcnNlKiogY29udmVydHMgYSByZXNwb25zZSBpbnRvIHRoZSBoYXNoIG9mIGF0dHJpYnV0ZXMgdG8gYmUgYHNldGAgb24KICAgIC8vIHRoZSBtb2RlbC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMganVzdCB0byBwYXNzIHRoZSByZXNwb25zZSBhbG9uZy4KICAgIHBhcnNlOiBmdW5jdGlvbihyZXNwLCBvcHRpb25zKSB7CiAgICAgIHJldHVybiByZXNwOwogICAgfSwKCiAgICAvLyBDcmVhdGUgYSBuZXcgbW9kZWwgd2l0aCBpZGVudGljYWwgYXR0cmlidXRlcyB0byB0aGlzIG9uZS4KICAgIGNsb25lOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuYXR0cmlidXRlcyk7CiAgICB9LAoKICAgIC8vIEEgbW9kZWwgaXMgbmV3IGlmIGl0IGhhcyBuZXZlciBiZWVuIHNhdmVkIHRvIHRoZSBzZXJ2ZXIsIGFuZCBsYWNrcyBhbiBpZC4KICAgIGlzTmV3OiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuICF0aGlzLmhhcyh0aGlzLmlkQXR0cmlidXRlKTsKICAgIH0sCgogICAgLy8gQ2hlY2sgaWYgdGhlIG1vZGVsIGlzIGN1cnJlbnRseSBpbiBhIHZhbGlkIHN0YXRlLgogICAgaXNWYWxpZDogZnVuY3Rpb24ob3B0aW9ucykgewogICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGUoe30sIF8uZXh0ZW5kKHt9LCBvcHRpb25zLCB7dmFsaWRhdGU6IHRydWV9KSk7CiAgICB9LAoKICAgIC8vIFJ1biB2YWxpZGF0aW9uIGFnYWluc3QgdGhlIG5leHQgY29tcGxldGUgc2V0IG9mIG1vZGVsIGF0dHJpYnV0ZXMsCiAgICAvLyByZXR1cm5pbmcgYHRydWVgIGlmIGFsbCBpcyB3ZWxsLiBPdGhlcndpc2UsIGZpcmUgYW4gYCJpbnZhbGlkImAgZXZlbnQuCiAgICBfdmFsaWRhdGU6IGZ1bmN0aW9uKGF0dHJzLCBvcHRpb25zKSB7CiAgICAgIGlmICghb3B0aW9ucy52YWxpZGF0ZSB8fCAhdGhpcy52YWxpZGF0ZSkgcmV0dXJuIHRydWU7CiAgICAgIGF0dHJzID0gXy5leHRlbmQoe30sIHRoaXMuYXR0cmlidXRlcywgYXR0cnMpOwogICAgICB2YXIgZXJyb3IgPSB0aGlzLnZhbGlkYXRpb25FcnJvciA9IHRoaXMudmFsaWRhdGUoYXR0cnMsIG9wdGlvbnMpIHx8IG51bGw7CiAgICAgIGlmICghZXJyb3IpIHJldHVybiB0cnVlOwogICAgICB0aGlzLnRyaWdnZXIoJ2ludmFsaWQnLCB0aGlzLCBlcnJvciwgXy5leHRlbmQob3B0aW9ucywge3ZhbGlkYXRpb25FcnJvcjogZXJyb3J9KSk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgfSk7CgogIC8vIEJhY2tib25lLkNvbGxlY3Rpb24KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tCgogIC8vIElmIG1vZGVscyB0ZW5kIHRvIHJlcHJlc2VudCBhIHNpbmdsZSByb3cgb2YgZGF0YSwgYSBCYWNrYm9uZSBDb2xsZWN0aW9uIGlzCiAgLy8gbW9yZSBhbmFsb2dvdXMgdG8gYSB0YWJsZSBmdWxsIG9mIGRhdGEgLi4uIG9yIGEgc21hbGwgc2xpY2Ugb3IgcGFnZSBvZiB0aGF0CiAgLy8gdGFibGUsIG9yIGEgY29sbGVjdGlvbiBvZiByb3dzIHRoYXQgYmVsb25nIHRvZ2V0aGVyIGZvciBhIHBhcnRpY3VsYXIgcmVhc29uCiAgLy8gLS0gYWxsIG9mIHRoZSBtZXNzYWdlcyBpbiB0aGlzIHBhcnRpY3VsYXIgZm9sZGVyLCBhbGwgb2YgdGhlIGRvY3VtZW50cwogIC8vIGJlbG9uZ2luZyB0byB0aGlzIHBhcnRpY3VsYXIgYXV0aG9yLCBhbmQgc28gb24uIENvbGxlY3Rpb25zIG1haW50YWluCiAgLy8gaW5kZXhlcyBvZiB0aGVpciBtb2RlbHMsIGJvdGggaW4gb3JkZXIsIGFuZCBmb3IgbG9va3VwIGJ5IGBpZGAuCgogIC8vIENyZWF0ZSBhIG5ldyAqKkNvbGxlY3Rpb24qKiwgcGVyaGFwcyB0byBjb250YWluIGEgc3BlY2lmaWMgdHlwZSBvZiBgbW9kZWxgLgogIC8vIElmIGEgYGNvbXBhcmF0b3JgIGlzIHNwZWNpZmllZCwgdGhlIENvbGxlY3Rpb24gd2lsbCBtYWludGFpbgogIC8vIGl0cyBtb2RlbHMgaW4gc29ydCBvcmRlciwgYXMgdGhleSdyZSBhZGRlZCBhbmQgcmVtb3ZlZC4KICB2YXIgQ29sbGVjdGlvbiA9IEJhY2tib25lLkNvbGxlY3Rpb24gPSBmdW5jdGlvbihtb2RlbHMsIG9wdGlvbnMpIHsKICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7CiAgICB0aGlzLnByZWluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgIGlmIChvcHRpb25zLm1vZGVsKSB0aGlzLm1vZGVsID0gb3B0aW9ucy5tb2RlbDsKICAgIGlmIChvcHRpb25zLmNvbXBhcmF0b3IgIT09IHZvaWQgMCkgdGhpcy5jb21wYXJhdG9yID0gb3B0aW9ucy5jb21wYXJhdG9yOwogICAgdGhpcy5fcmVzZXQoKTsKICAgIHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgaWYgKG1vZGVscykgdGhpcy5yZXNldChtb2RlbHMsIF8uZXh0ZW5kKHtzaWxlbnQ6IHRydWV9LCBvcHRpb25zKSk7CiAgfTsKCiAgLy8gRGVmYXVsdCBvcHRpb25zIGZvciBgQ29sbGVjdGlvbiNzZXRgLgogIHZhciBzZXRPcHRpb25zID0ge2FkZDogdHJ1ZSwgcmVtb3ZlOiB0cnVlLCBtZXJnZTogdHJ1ZX07CiAgdmFyIGFkZE9wdGlvbnMgPSB7YWRkOiB0cnVlLCByZW1vdmU6IGZhbHNlfTsKCiAgLy8gU3BsaWNlcyBgaW5zZXJ0YCBpbnRvIGBhcnJheWAgYXQgaW5kZXggYGF0YC4KICB2YXIgc3BsaWNlID0gZnVuY3Rpb24oYXJyYXksIGluc2VydCwgYXQpIHsKICAgIGF0ID0gTWF0aC5taW4oTWF0aC5tYXgoYXQsIDApLCBhcnJheS5sZW5ndGgpOwogICAgdmFyIHRhaWwgPSBBcnJheShhcnJheS5sZW5ndGggLSBhdCk7CiAgICB2YXIgbGVuZ3RoID0gaW5zZXJ0Lmxlbmd0aDsKICAgIHZhciBpOwogICAgZm9yIChpID0gMDsgaSA8IHRhaWwubGVuZ3RoOyBpKyspIHRhaWxbaV0gPSBhcnJheVtpICsgYXRdOwogICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSBhcnJheVtpICsgYXRdID0gaW5zZXJ0W2ldOwogICAgZm9yIChpID0gMDsgaSA8IHRhaWwubGVuZ3RoOyBpKyspIGFycmF5W2kgKyBsZW5ndGggKyBhdF0gPSB0YWlsW2ldOwogIH07CgogIC8vIERlZmluZSB0aGUgQ29sbGVjdGlvbidzIGluaGVyaXRhYmxlIG1ldGhvZHMuCiAgXy5leHRlbmQoQ29sbGVjdGlvbi5wcm90b3R5cGUsIEV2ZW50cywgewoKICAgIC8vIFRoZSBkZWZhdWx0IG1vZGVsIGZvciBhIGNvbGxlY3Rpb24gaXMganVzdCBhICoqQmFja2JvbmUuTW9kZWwqKi4KICAgIC8vIFRoaXMgc2hvdWxkIGJlIG92ZXJyaWRkZW4gaW4gbW9zdCBjYXNlcy4KICAgIG1vZGVsOiBNb2RlbCwKCgogICAgLy8gcHJlaW5pdGlhbGl6ZSBpcyBhbiBlbXB0eSBmdW5jdGlvbiBieSBkZWZhdWx0LiBZb3UgY2FuIG92ZXJyaWRlIGl0IHdpdGggYSBmdW5jdGlvbgogICAgLy8gb3Igb2JqZWN0LiAgcHJlaW5pdGlhbGl6ZSB3aWxsIHJ1biBiZWZvcmUgYW55IGluc3RhbnRpYXRpb24gbG9naWMgaXMgcnVuIGluIHRoZSBDb2xsZWN0aW9uLgogICAgcHJlaW5pdGlhbGl6ZTogZnVuY3Rpb24oKXt9LAoKICAgIC8vIEluaXRpYWxpemUgaXMgYW4gZW1wdHkgZnVuY3Rpb24gYnkgZGVmYXVsdC4gT3ZlcnJpZGUgaXQgd2l0aCB5b3VyIG93bgogICAgLy8gaW5pdGlhbGl6YXRpb24gbG9naWMuCiAgICBpbml0aWFsaXplOiBmdW5jdGlvbigpe30sCgogICAgLy8gVGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBDb2xsZWN0aW9uIGlzIGFuIGFycmF5IG9mIHRoZQogICAgLy8gbW9kZWxzJyBhdHRyaWJ1dGVzLgogICAgdG9KU09OOiBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbihtb2RlbCkgeyByZXR1cm4gbW9kZWwudG9KU09OKG9wdGlvbnMpOyB9KTsKICAgIH0sCgogICAgLy8gUHJveHkgYEJhY2tib25lLnN5bmNgIGJ5IGRlZmF1bHQuCiAgICBzeW5jOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIEJhY2tib25lLnN5bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgIH0sCgogICAgLy8gQWRkIGEgbW9kZWwsIG9yIGxpc3Qgb2YgbW9kZWxzIHRvIHRoZSBzZXQuIGBtb2RlbHNgIG1heSBiZSBCYWNrYm9uZQogICAgLy8gTW9kZWxzIG9yIHJhdyBKYXZhU2NyaXB0IG9iamVjdHMgdG8gYmUgY29udmVydGVkIHRvIE1vZGVscywgb3IgYW55CiAgICAvLyBjb21iaW5hdGlvbiBvZiB0aGUgdHdvLgogICAgYWRkOiBmdW5jdGlvbihtb2RlbHMsIG9wdGlvbnMpIHsKICAgICAgcmV0dXJuIHRoaXMuc2V0KG1vZGVscywgXy5leHRlbmQoe21lcmdlOiBmYWxzZX0sIG9wdGlvbnMsIGFkZE9wdGlvbnMpKTsKICAgIH0sCgogICAgLy8gUmVtb3ZlIGEgbW9kZWwsIG9yIGEgbGlzdCBvZiBtb2RlbHMgZnJvbSB0aGUgc2V0LgogICAgcmVtb3ZlOiBmdW5jdGlvbihtb2RlbHMsIG9wdGlvbnMpIHsKICAgICAgb3B0aW9ucyA9IF8uZXh0ZW5kKHt9LCBvcHRpb25zKTsKICAgICAgdmFyIHNpbmd1bGFyID0gIV8uaXNBcnJheShtb2RlbHMpOwogICAgICBtb2RlbHMgPSBzaW5ndWxhciA/IFttb2RlbHNdIDogbW9kZWxzLnNsaWNlKCk7CiAgICAgIHZhciByZW1vdmVkID0gdGhpcy5fcmVtb3ZlTW9kZWxzKG1vZGVscywgb3B0aW9ucyk7CiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQgJiYgcmVtb3ZlZC5sZW5ndGgpIHsKICAgICAgICBvcHRpb25zLmNoYW5nZXMgPSB7YWRkZWQ6IFtdLCBtZXJnZWQ6IFtdLCByZW1vdmVkOiByZW1vdmVkfTsKICAgICAgICB0aGlzLnRyaWdnZXIoJ3VwZGF0ZScsIHRoaXMsIG9wdGlvbnMpOwogICAgICB9CiAgICAgIHJldHVybiBzaW5ndWxhciA/IHJlbW92ZWRbMF0gOiByZW1vdmVkOwogICAgfSwKCiAgICAvLyBVcGRhdGUgYSBjb2xsZWN0aW9uIGJ5IGBzZXRgLWluZyBhIG5ldyBsaXN0IG9mIG1vZGVscywgYWRkaW5nIG5ldyBvbmVzLAogICAgLy8gcmVtb3ZpbmcgbW9kZWxzIHRoYXQgYXJlIG5vIGxvbmdlciBwcmVzZW50LCBhbmQgbWVyZ2luZyBtb2RlbHMgdGhhdAogICAgLy8gYWxyZWFkeSBleGlzdCBpbiB0aGUgY29sbGVjdGlvbiwgYXMgbmVjZXNzYXJ5LiBTaW1pbGFyIHRvICoqTW9kZWwjc2V0KiosCiAgICAvLyB0aGUgY29yZSBvcGVyYXRpb24gZm9yIHVwZGF0aW5nIHRoZSBkYXRhIGNvbnRhaW5lZCBieSB0aGUgY29sbGVjdGlvbi4KICAgIHNldDogZnVuY3Rpb24obW9kZWxzLCBvcHRpb25zKSB7CiAgICAgIGlmIChtb2RlbHMgPT0gbnVsbCkgcmV0dXJuOwoKICAgICAgb3B0aW9ucyA9IF8uZXh0ZW5kKHt9LCBzZXRPcHRpb25zLCBvcHRpb25zKTsKICAgICAgaWYgKG9wdGlvbnMucGFyc2UgJiYgIXRoaXMuX2lzTW9kZWwobW9kZWxzKSkgewogICAgICAgIG1vZGVscyA9IHRoaXMucGFyc2UobW9kZWxzLCBvcHRpb25zKSB8fCBbXTsKICAgICAgfQoKICAgICAgdmFyIHNpbmd1bGFyID0gIV8uaXNBcnJheShtb2RlbHMpOwogICAgICBtb2RlbHMgPSBzaW5ndWxhciA/IFttb2RlbHNdIDogbW9kZWxzLnNsaWNlKCk7CgogICAgICB2YXIgYXQgPSBvcHRpb25zLmF0OwogICAgICBpZiAoYXQgIT0gbnVsbCkgYXQgPSArYXQ7CiAgICAgIGlmIChhdCA+IHRoaXMubGVuZ3RoKSBhdCA9IHRoaXMubGVuZ3RoOwogICAgICBpZiAoYXQgPCAwKSBhdCArPSB0aGlzLmxlbmd0aCArIDE7CgogICAgICB2YXIgc2V0ID0gW107CiAgICAgIHZhciB0b0FkZCA9IFtdOwogICAgICB2YXIgdG9NZXJnZSA9IFtdOwogICAgICB2YXIgdG9SZW1vdmUgPSBbXTsKICAgICAgdmFyIG1vZGVsTWFwID0ge307CgogICAgICB2YXIgYWRkID0gb3B0aW9ucy5hZGQ7CiAgICAgIHZhciBtZXJnZSA9IG9wdGlvbnMubWVyZ2U7CiAgICAgIHZhciByZW1vdmUgPSBvcHRpb25zLnJlbW92ZTsKCiAgICAgIHZhciBzb3J0ID0gZmFsc2U7CiAgICAgIHZhciBzb3J0YWJsZSA9IHRoaXMuY29tcGFyYXRvciAmJiBhdCA9PSBudWxsICYmIG9wdGlvbnMuc29ydCAhPT0gZmFsc2U7CiAgICAgIHZhciBzb3J0QXR0ciA9IF8uaXNTdHJpbmcodGhpcy5jb21wYXJhdG9yKSA/IHRoaXMuY29tcGFyYXRvciA6IG51bGw7CgogICAgICAvLyBUdXJuIGJhcmUgb2JqZWN0cyBpbnRvIG1vZGVsIHJlZmVyZW5jZXMsIGFuZCBwcmV2ZW50IGludmFsaWQgbW9kZWxzCiAgICAgIC8vIGZyb20gYmVpbmcgYWRkZWQuCiAgICAgIHZhciBtb2RlbCwgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IG1vZGVscy5sZW5ndGg7IGkrKykgewogICAgICAgIG1vZGVsID0gbW9kZWxzW2ldOwoKICAgICAgICAvLyBJZiBhIGR1cGxpY2F0ZSBpcyBmb3VuZCwgcHJldmVudCBpdCBmcm9tIGJlaW5nIGFkZGVkIGFuZAogICAgICAgIC8vIG9wdGlvbmFsbHkgbWVyZ2UgaXQgaW50byB0aGUgZXhpc3RpbmcgbW9kZWwuCiAgICAgICAgdmFyIGV4aXN0aW5nID0gdGhpcy5nZXQobW9kZWwpOwogICAgICAgIGlmIChleGlzdGluZykgewogICAgICAgICAgaWYgKG1lcmdlICYmIG1vZGVsICE9PSBleGlzdGluZykgewogICAgICAgICAgICB2YXIgYXR0cnMgPSB0aGlzLl9pc01vZGVsKG1vZGVsKSA/IG1vZGVsLmF0dHJpYnV0ZXMgOiBtb2RlbDsKICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFyc2UpIGF0dHJzID0gZXhpc3RpbmcucGFyc2UoYXR0cnMsIG9wdGlvbnMpOwogICAgICAgICAgICBleGlzdGluZy5zZXQoYXR0cnMsIG9wdGlvbnMpOwogICAgICAgICAgICB0b01lcmdlLnB1c2goZXhpc3RpbmcpOwogICAgICAgICAgICBpZiAoc29ydGFibGUgJiYgIXNvcnQpIHNvcnQgPSBleGlzdGluZy5oYXNDaGFuZ2VkKHNvcnRBdHRyKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghbW9kZWxNYXBbZXhpc3RpbmcuY2lkXSkgewogICAgICAgICAgICBtb2RlbE1hcFtleGlzdGluZy5jaWRdID0gdHJ1ZTsKICAgICAgICAgICAgc2V0LnB1c2goZXhpc3RpbmcpOwogICAgICAgICAgfQogICAgICAgICAgbW9kZWxzW2ldID0gZXhpc3Rpbmc7CgogICAgICAgIC8vIElmIHRoaXMgaXMgYSBuZXcsIHZhbGlkIG1vZGVsLCBwdXNoIGl0IHRvIHRoZSBgdG9BZGRgIGxpc3QuCiAgICAgICAgfSBlbHNlIGlmIChhZGQpIHsKICAgICAgICAgIG1vZGVsID0gbW9kZWxzW2ldID0gdGhpcy5fcHJlcGFyZU1vZGVsKG1vZGVsLCBvcHRpb25zKTsKICAgICAgICAgIGlmIChtb2RlbCkgewogICAgICAgICAgICB0b0FkZC5wdXNoKG1vZGVsKTsKICAgICAgICAgICAgdGhpcy5fYWRkUmVmZXJlbmNlKG1vZGVsLCBvcHRpb25zKTsKICAgICAgICAgICAgbW9kZWxNYXBbbW9kZWwuY2lkXSA9IHRydWU7CiAgICAgICAgICAgIHNldC5wdXNoKG1vZGVsKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIFJlbW92ZSBzdGFsZSBtb2RlbHMuCiAgICAgIGlmIChyZW1vdmUpIHsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgbW9kZWwgPSB0aGlzLm1vZGVsc1tpXTsKICAgICAgICAgIGlmICghbW9kZWxNYXBbbW9kZWwuY2lkXSkgdG9SZW1vdmUucHVzaChtb2RlbCk7CiAgICAgICAgfQogICAgICAgIGlmICh0b1JlbW92ZS5sZW5ndGgpIHRoaXMuX3JlbW92ZU1vZGVscyh0b1JlbW92ZSwgb3B0aW9ucyk7CiAgICAgIH0KCiAgICAgIC8vIFNlZSBpZiBzb3J0aW5nIGlzIG5lZWRlZCwgdXBkYXRlIGBsZW5ndGhgIGFuZCBzcGxpY2UgaW4gbmV3IG1vZGVscy4KICAgICAgdmFyIG9yZGVyQ2hhbmdlZCA9IGZhbHNlOwogICAgICB2YXIgcmVwbGFjZSA9ICFzb3J0YWJsZSAmJiBhZGQgJiYgcmVtb3ZlOwogICAgICBpZiAoc2V0Lmxlbmd0aCAmJiByZXBsYWNlKSB7CiAgICAgICAgb3JkZXJDaGFuZ2VkID0gdGhpcy5sZW5ndGggIT09IHNldC5sZW5ndGggfHwgXy5zb21lKHRoaXMubW9kZWxzLCBmdW5jdGlvbihtLCBpbmRleCkgewogICAgICAgICAgcmV0dXJuIG0gIT09IHNldFtpbmRleF07CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5tb2RlbHMubGVuZ3RoID0gMDsKICAgICAgICBzcGxpY2UodGhpcy5tb2RlbHMsIHNldCwgMCk7CiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLm1vZGVscy5sZW5ndGg7CiAgICAgIH0gZWxzZSBpZiAodG9BZGQubGVuZ3RoKSB7CiAgICAgICAgaWYgKHNvcnRhYmxlKSBzb3J0ID0gdHJ1ZTsKICAgICAgICBzcGxpY2UodGhpcy5tb2RlbHMsIHRvQWRkLCBhdCA9PSBudWxsID8gdGhpcy5sZW5ndGggOiBhdCk7CiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLm1vZGVscy5sZW5ndGg7CiAgICAgIH0KCiAgICAgIC8vIFNpbGVudGx5IHNvcnQgdGhlIGNvbGxlY3Rpb24gaWYgYXBwcm9wcmlhdGUuCiAgICAgIGlmIChzb3J0KSB0aGlzLnNvcnQoe3NpbGVudDogdHJ1ZX0pOwoKICAgICAgLy8gVW5sZXNzIHNpbGVuY2VkLCBpdCdzIHRpbWUgdG8gZmlyZSBhbGwgYXBwcm9wcmlhdGUgYWRkL3NvcnQvdXBkYXRlIGV2ZW50cy4KICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkgewogICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b0FkZC5sZW5ndGg7IGkrKykgewogICAgICAgICAgaWYgKGF0ICE9IG51bGwpIG9wdGlvbnMuaW5kZXggPSBhdCArIGk7CiAgICAgICAgICBtb2RlbCA9IHRvQWRkW2ldOwogICAgICAgICAgbW9kZWwudHJpZ2dlcignYWRkJywgbW9kZWwsIHRoaXMsIG9wdGlvbnMpOwogICAgICAgIH0KICAgICAgICBpZiAoc29ydCB8fCBvcmRlckNoYW5nZWQpIHRoaXMudHJpZ2dlcignc29ydCcsIHRoaXMsIG9wdGlvbnMpOwogICAgICAgIGlmICh0b0FkZC5sZW5ndGggfHwgdG9SZW1vdmUubGVuZ3RoIHx8IHRvTWVyZ2UubGVuZ3RoKSB7CiAgICAgICAgICBvcHRpb25zLmNoYW5nZXMgPSB7CiAgICAgICAgICAgIGFkZGVkOiB0b0FkZCwKICAgICAgICAgICAgcmVtb3ZlZDogdG9SZW1vdmUsCiAgICAgICAgICAgIG1lcmdlZDogdG9NZXJnZQogICAgICAgICAgfTsKICAgICAgICAgIHRoaXMudHJpZ2dlcigndXBkYXRlJywgdGhpcywgb3B0aW9ucyk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBSZXR1cm4gdGhlIGFkZGVkIChvciBtZXJnZWQpIG1vZGVsIChvciBtb2RlbHMpLgogICAgICByZXR1cm4gc2luZ3VsYXIgPyBtb2RlbHNbMF0gOiBtb2RlbHM7CiAgICB9LAoKICAgIC8vIFdoZW4geW91IGhhdmUgbW9yZSBpdGVtcyB0aGFuIHlvdSB3YW50IHRvIGFkZCBvciByZW1vdmUgaW5kaXZpZHVhbGx5LAogICAgLy8geW91IGNhbiByZXNldCB0aGUgZW50aXJlIHNldCB3aXRoIGEgbmV3IGxpc3Qgb2YgbW9kZWxzLCB3aXRob3V0IGZpcmluZwogICAgLy8gYW55IGdyYW51bGFyIGBhZGRgIG9yIGByZW1vdmVgIGV2ZW50cy4gRmlyZXMgYHJlc2V0YCB3aGVuIGZpbmlzaGVkLgogICAgLy8gVXNlZnVsIGZvciBidWxrIG9wZXJhdGlvbnMgYW5kIG9wdGltaXphdGlvbnMuCiAgICByZXNldDogZnVuY3Rpb24obW9kZWxzLCBvcHRpb25zKSB7CiAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8gXy5jbG9uZShvcHRpb25zKSA6IHt9OwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubW9kZWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdGhpcy5fcmVtb3ZlUmVmZXJlbmNlKHRoaXMubW9kZWxzW2ldLCBvcHRpb25zKTsKICAgICAgfQogICAgICBvcHRpb25zLnByZXZpb3VzTW9kZWxzID0gdGhpcy5tb2RlbHM7CiAgICAgIHRoaXMuX3Jlc2V0KCk7CiAgICAgIG1vZGVscyA9IHRoaXMuYWRkKG1vZGVscywgXy5leHRlbmQoe3NpbGVudDogdHJ1ZX0sIG9wdGlvbnMpKTsKICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkgdGhpcy50cmlnZ2VyKCdyZXNldCcsIHRoaXMsIG9wdGlvbnMpOwogICAgICByZXR1cm4gbW9kZWxzOwogICAgfSwKCiAgICAvLyBBZGQgYSBtb2RlbCB0byB0aGUgZW5kIG9mIHRoZSBjb2xsZWN0aW9uLgogICAgcHVzaDogZnVuY3Rpb24obW9kZWwsIG9wdGlvbnMpIHsKICAgICAgcmV0dXJuIHRoaXMuYWRkKG1vZGVsLCBfLmV4dGVuZCh7YXQ6IHRoaXMubGVuZ3RofSwgb3B0aW9ucykpOwogICAgfSwKCiAgICAvLyBSZW1vdmUgYSBtb2RlbCBmcm9tIHRoZSBlbmQgb2YgdGhlIGNvbGxlY3Rpb24uCiAgICBwb3A6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgdmFyIG1vZGVsID0gdGhpcy5hdCh0aGlzLmxlbmd0aCAtIDEpOwogICAgICByZXR1cm4gdGhpcy5yZW1vdmUobW9kZWwsIG9wdGlvbnMpOwogICAgfSwKCiAgICAvLyBBZGQgYSBtb2RlbCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb2xsZWN0aW9uLgogICAgdW5zaGlmdDogZnVuY3Rpb24obW9kZWwsIG9wdGlvbnMpIHsKICAgICAgcmV0dXJuIHRoaXMuYWRkKG1vZGVsLCBfLmV4dGVuZCh7YXQ6IDB9LCBvcHRpb25zKSk7CiAgICB9LAoKICAgIC8vIFJlbW92ZSBhIG1vZGVsIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgY29sbGVjdGlvbi4KICAgIHNoaWZ0OiBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgIHZhciBtb2RlbCA9IHRoaXMuYXQoMCk7CiAgICAgIHJldHVybiB0aGlzLnJlbW92ZShtb2RlbCwgb3B0aW9ucyk7CiAgICB9LAoKICAgIC8vIFNsaWNlIG91dCBhIHN1Yi1hcnJheSBvZiBtb2RlbHMgZnJvbSB0aGUgY29sbGVjdGlvbi4KICAgIHNsaWNlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHNsaWNlLmFwcGx5KHRoaXMubW9kZWxzLCBhcmd1bWVudHMpOwogICAgfSwKCiAgICAvLyBHZXQgYSBtb2RlbCBmcm9tIHRoZSBzZXQgYnkgaWQsIGNpZCwgbW9kZWwgb2JqZWN0IHdpdGggaWQgb3IgY2lkCiAgICAvLyBwcm9wZXJ0aWVzLCBvciBhbiBhdHRyaWJ1dGVzIG9iamVjdCB0aGF0IGlzIHRyYW5zZm9ybWVkIHRocm91Z2ggbW9kZWxJZC4KICAgIGdldDogZnVuY3Rpb24ob2JqKSB7CiAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDsKICAgICAgcmV0dXJuIHRoaXMuX2J5SWRbb2JqXSB8fAogICAgICAgIHRoaXMuX2J5SWRbdGhpcy5tb2RlbElkKHRoaXMuX2lzTW9kZWwob2JqKSA/IG9iai5hdHRyaWJ1dGVzIDogb2JqLCBvYmouaWRBdHRyaWJ1dGUpXSB8fAogICAgICAgIG9iai5jaWQgJiYgdGhpcy5fYnlJZFtvYmouY2lkXTsKICAgIH0sCgogICAgLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG1vZGVsIGlzIGluIHRoZSBjb2xsZWN0aW9uLgogICAgaGFzOiBmdW5jdGlvbihvYmopIHsKICAgICAgcmV0dXJuIHRoaXMuZ2V0KG9iaikgIT0gbnVsbDsKICAgIH0sCgogICAgLy8gR2V0IHRoZSBtb2RlbCBhdCB0aGUgZ2l2ZW4gaW5kZXguCiAgICBhdDogZnVuY3Rpb24oaW5kZXgpIHsKICAgICAgaWYgKGluZGV4IDwgMCkgaW5kZXggKz0gdGhpcy5sZW5ndGg7CiAgICAgIHJldHVybiB0aGlzLm1vZGVsc1tpbmRleF07CiAgICB9LAoKICAgIC8vIFJldHVybiBtb2RlbHMgd2l0aCBtYXRjaGluZyBhdHRyaWJ1dGVzLiBVc2VmdWwgZm9yIHNpbXBsZSBjYXNlcyBvZgogICAgLy8gYGZpbHRlcmAuCiAgICB3aGVyZTogZnVuY3Rpb24oYXR0cnMsIGZpcnN0KSB7CiAgICAgIHJldHVybiB0aGlzW2ZpcnN0ID8gJ2ZpbmQnIDogJ2ZpbHRlciddKGF0dHJzKTsKICAgIH0sCgogICAgLy8gUmV0dXJuIHRoZSBmaXJzdCBtb2RlbCB3aXRoIG1hdGNoaW5nIGF0dHJpYnV0ZXMuIFVzZWZ1bCBmb3Igc2ltcGxlIGNhc2VzCiAgICAvLyBvZiBgZmluZGAuCiAgICBmaW5kV2hlcmU6IGZ1bmN0aW9uKGF0dHJzKSB7CiAgICAgIHJldHVybiB0aGlzLndoZXJlKGF0dHJzLCB0cnVlKTsKICAgIH0sCgogICAgLy8gRm9yY2UgdGhlIGNvbGxlY3Rpb24gdG8gcmUtc29ydCBpdHNlbGYuIFlvdSBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcyB1bmRlcgogICAgLy8gbm9ybWFsIGNpcmN1bXN0YW5jZXMsIGFzIHRoZSBzZXQgd2lsbCBtYWludGFpbiBzb3J0IG9yZGVyIGFzIGVhY2ggaXRlbQogICAgLy8gaXMgYWRkZWQuCiAgICBzb3J0OiBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgIHZhciBjb21wYXJhdG9yID0gdGhpcy5jb21wYXJhdG9yOwogICAgICBpZiAoIWNvbXBhcmF0b3IpIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHNvcnQgYSBzZXQgd2l0aG91dCBhIGNvbXBhcmF0b3InKTsKICAgICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTsKCiAgICAgIHZhciBsZW5ndGggPSBjb21wYXJhdG9yLmxlbmd0aDsKICAgICAgaWYgKF8uaXNGdW5jdGlvbihjb21wYXJhdG9yKSkgY29tcGFyYXRvciA9IGNvbXBhcmF0b3IuYmluZCh0aGlzKTsKCiAgICAgIC8vIFJ1biBzb3J0IGJhc2VkIG9uIHR5cGUgb2YgYGNvbXBhcmF0b3JgLgogICAgICBpZiAobGVuZ3RoID09PSAxIHx8IF8uaXNTdHJpbmcoY29tcGFyYXRvcikpIHsKICAgICAgICB0aGlzLm1vZGVscyA9IHRoaXMuc29ydEJ5KGNvbXBhcmF0b3IpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMubW9kZWxzLnNvcnQoY29tcGFyYXRvcik7CiAgICAgIH0KICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkgdGhpcy50cmlnZ2VyKCdzb3J0JywgdGhpcywgb3B0aW9ucyk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSwKCiAgICAvLyBQbHVjayBhbiBhdHRyaWJ1dGUgZnJvbSBlYWNoIG1vZGVsIGluIHRoZSBjb2xsZWN0aW9uLgogICAgcGx1Y2s6IGZ1bmN0aW9uKGF0dHIpIHsKICAgICAgcmV0dXJuIHRoaXMubWFwKGF0dHIgKyAnJyk7CiAgICB9LAoKICAgIC8vIEZldGNoIHRoZSBkZWZhdWx0IHNldCBvZiBtb2RlbHMgZm9yIHRoaXMgY29sbGVjdGlvbiwgcmVzZXR0aW5nIHRoZQogICAgLy8gY29sbGVjdGlvbiB3aGVuIHRoZXkgYXJyaXZlLiBJZiBgcmVzZXQ6IHRydWVgIGlzIHBhc3NlZCwgdGhlIHJlc3BvbnNlCiAgICAvLyBkYXRhIHdpbGwgYmUgcGFzc2VkIHRocm91Z2ggdGhlIGByZXNldGAgbWV0aG9kIGluc3RlYWQgb2YgYHNldGAuCiAgICBmZXRjaDogZnVuY3Rpb24ob3B0aW9ucykgewogICAgICBvcHRpb25zID0gXy5leHRlbmQoe3BhcnNlOiB0cnVlfSwgb3B0aW9ucyk7CiAgICAgIHZhciBzdWNjZXNzID0gb3B0aW9ucy5zdWNjZXNzOwogICAgICB2YXIgY29sbGVjdGlvbiA9IHRoaXM7CiAgICAgIG9wdGlvbnMuc3VjY2VzcyA9IGZ1bmN0aW9uKHJlc3ApIHsKICAgICAgICB2YXIgbWV0aG9kID0gb3B0aW9ucy5yZXNldCA/ICdyZXNldCcgOiAnc2V0JzsKICAgICAgICBjb2xsZWN0aW9uW21ldGhvZF0ocmVzcCwgb3B0aW9ucyk7CiAgICAgICAgaWYgKHN1Y2Nlc3MpIHN1Y2Nlc3MuY2FsbChvcHRpb25zLmNvbnRleHQsIGNvbGxlY3Rpb24sIHJlc3AsIG9wdGlvbnMpOwogICAgICAgIGNvbGxlY3Rpb24udHJpZ2dlcignc3luYycsIGNvbGxlY3Rpb24sIHJlc3AsIG9wdGlvbnMpOwogICAgICB9OwogICAgICB3cmFwRXJyb3IodGhpcywgb3B0aW9ucyk7CiAgICAgIHJldHVybiB0aGlzLnN5bmMoJ3JlYWQnLCB0aGlzLCBvcHRpb25zKTsKICAgIH0sCgogICAgLy8gQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGEgbW9kZWwgaW4gdGhpcyBjb2xsZWN0aW9uLiBBZGQgdGhlIG1vZGVsIHRvIHRoZQogICAgLy8gY29sbGVjdGlvbiBpbW1lZGlhdGVseSwgdW5sZXNzIGB3YWl0OiB0cnVlYCBpcyBwYXNzZWQsIGluIHdoaWNoIGNhc2Ugd2UKICAgIC8vIHdhaXQgZm9yIHRoZSBzZXJ2ZXIgdG8gYWdyZWUuCiAgICBjcmVhdGU6IGZ1bmN0aW9uKG1vZGVsLCBvcHRpb25zKSB7CiAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8gXy5jbG9uZShvcHRpb25zKSA6IHt9OwogICAgICB2YXIgd2FpdCA9IG9wdGlvbnMud2FpdDsKICAgICAgbW9kZWwgPSB0aGlzLl9wcmVwYXJlTW9kZWwobW9kZWwsIG9wdGlvbnMpOwogICAgICBpZiAoIW1vZGVsKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmICghd2FpdCkgdGhpcy5hZGQobW9kZWwsIG9wdGlvbnMpOwogICAgICB2YXIgY29sbGVjdGlvbiA9IHRoaXM7CiAgICAgIHZhciBzdWNjZXNzID0gb3B0aW9ucy5zdWNjZXNzOwogICAgICBvcHRpb25zLnN1Y2Nlc3MgPSBmdW5jdGlvbihtLCByZXNwLCBjYWxsYmFja09wdHMpIHsKICAgICAgICBpZiAod2FpdCkgY29sbGVjdGlvbi5hZGQobSwgY2FsbGJhY2tPcHRzKTsKICAgICAgICBpZiAoc3VjY2Vzcykgc3VjY2Vzcy5jYWxsKGNhbGxiYWNrT3B0cy5jb250ZXh0LCBtLCByZXNwLCBjYWxsYmFja09wdHMpOwogICAgICB9OwogICAgICBtb2RlbC5zYXZlKG51bGwsIG9wdGlvbnMpOwogICAgICByZXR1cm4gbW9kZWw7CiAgICB9LAoKICAgIC8vICoqcGFyc2UqKiBjb252ZXJ0cyBhIHJlc3BvbnNlIGludG8gYSBsaXN0IG9mIG1vZGVscyB0byBiZSBhZGRlZCB0byB0aGUKICAgIC8vIGNvbGxlY3Rpb24uIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGp1c3QgdG8gcGFzcyBpdCB0aHJvdWdoLgogICAgcGFyc2U6IGZ1bmN0aW9uKHJlc3AsIG9wdGlvbnMpIHsKICAgICAgcmV0dXJuIHJlc3A7CiAgICB9LAoKICAgIC8vIENyZWF0ZSBhIG5ldyBjb2xsZWN0aW9uIHdpdGggYW4gaWRlbnRpY2FsIGxpc3Qgb2YgbW9kZWxzIGFzIHRoaXMgb25lLgogICAgY2xvbmU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5tb2RlbHMsIHsKICAgICAgICBtb2RlbDogdGhpcy5tb2RlbCwKICAgICAgICBjb21wYXJhdG9yOiB0aGlzLmNvbXBhcmF0b3IKICAgICAgfSk7CiAgICB9LAoKICAgIC8vIERlZmluZSBob3cgdG8gdW5pcXVlbHkgaWRlbnRpZnkgbW9kZWxzIGluIHRoZSBjb2xsZWN0aW9uLgogICAgbW9kZWxJZDogZnVuY3Rpb24oYXR0cnMsIGlkQXR0cmlidXRlKSB7CiAgICAgIHJldHVybiBhdHRyc1tpZEF0dHJpYnV0ZSB8fCB0aGlzLm1vZGVsLnByb3RvdHlwZS5pZEF0dHJpYnV0ZSB8fCAnaWQnXTsKICAgIH0sCgogICAgLy8gR2V0IGFuIGl0ZXJhdG9yIG9mIGFsbCBtb2RlbHMgaW4gdGhpcyBjb2xsZWN0aW9uLgogICAgdmFsdWVzOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uSXRlcmF0b3IodGhpcywgSVRFUkFUT1JfVkFMVUVTKTsKICAgIH0sCgogICAgLy8gR2V0IGFuIGl0ZXJhdG9yIG9mIGFsbCBtb2RlbCBJRHMgaW4gdGhpcyBjb2xsZWN0aW9uLgogICAga2V5czogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBuZXcgQ29sbGVjdGlvbkl0ZXJhdG9yKHRoaXMsIElURVJBVE9SX0tFWVMpOwogICAgfSwKCiAgICAvLyBHZXQgYW4gaXRlcmF0b3Igb2YgYWxsIFtJRCwgbW9kZWxdIHR1cGxlcyBpbiB0aGlzIGNvbGxlY3Rpb24uCiAgICBlbnRyaWVzOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uSXRlcmF0b3IodGhpcywgSVRFUkFUT1JfS0VZU1ZBTFVFUyk7CiAgICB9LAoKICAgIC8vIFByaXZhdGUgbWV0aG9kIHRvIHJlc2V0IGFsbCBpbnRlcm5hbCBzdGF0ZS4gQ2FsbGVkIHdoZW4gdGhlIGNvbGxlY3Rpb24KICAgIC8vIGlzIGZpcnN0IGluaXRpYWxpemVkIG9yIHJlc2V0LgogICAgX3Jlc2V0OiBmdW5jdGlvbigpIHsKICAgICAgdGhpcy5sZW5ndGggPSAwOwogICAgICB0aGlzLm1vZGVscyA9IFtdOwogICAgICB0aGlzLl9ieUlkICA9IHt9OwogICAgfSwKCiAgICAvLyBQcmVwYXJlIGEgaGFzaCBvZiBhdHRyaWJ1dGVzIChvciBvdGhlciBtb2RlbCkgdG8gYmUgYWRkZWQgdG8gdGhpcwogICAgLy8gY29sbGVjdGlvbi4KICAgIF9wcmVwYXJlTW9kZWw6IGZ1bmN0aW9uKGF0dHJzLCBvcHRpb25zKSB7CiAgICAgIGlmICh0aGlzLl9pc01vZGVsKGF0dHJzKSkgewogICAgICAgIGlmICghYXR0cnMuY29sbGVjdGlvbikgYXR0cnMuY29sbGVjdGlvbiA9IHRoaXM7CiAgICAgICAgcmV0dXJuIGF0dHJzOwogICAgICB9CiAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8gXy5jbG9uZShvcHRpb25zKSA6IHt9OwogICAgICBvcHRpb25zLmNvbGxlY3Rpb24gPSB0aGlzOwoKICAgICAgdmFyIG1vZGVsOwogICAgICBpZiAodGhpcy5tb2RlbC5wcm90b3R5cGUpIHsKICAgICAgICBtb2RlbCA9IG5ldyB0aGlzLm1vZGVsKGF0dHJzLCBvcHRpb25zKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBFUyBjbGFzcyBtZXRob2RzIGRpZG4ndCBoYXZlIHByb3RvdHlwZQogICAgICAgIG1vZGVsID0gdGhpcy5tb2RlbChhdHRycywgb3B0aW9ucyk7CiAgICAgIH0KCiAgICAgIGlmICghbW9kZWwudmFsaWRhdGlvbkVycm9yKSByZXR1cm4gbW9kZWw7CiAgICAgIHRoaXMudHJpZ2dlcignaW52YWxpZCcsIHRoaXMsIG1vZGVsLnZhbGlkYXRpb25FcnJvciwgb3B0aW9ucyk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0sCgogICAgLy8gSW50ZXJuYWwgbWV0aG9kIGNhbGxlZCBieSBib3RoIHJlbW92ZSBhbmQgc2V0LgogICAgX3JlbW92ZU1vZGVsczogZnVuY3Rpb24obW9kZWxzLCBvcHRpb25zKSB7CiAgICAgIHZhciByZW1vdmVkID0gW107CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG1vZGVsID0gdGhpcy5nZXQobW9kZWxzW2ldKTsKICAgICAgICBpZiAoIW1vZGVsKSBjb250aW51ZTsKCiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleE9mKG1vZGVsKTsKICAgICAgICB0aGlzLm1vZGVscy5zcGxpY2UoaW5kZXgsIDEpOwogICAgICAgIHRoaXMubGVuZ3RoLS07CgogICAgICAgIC8vIFJlbW92ZSByZWZlcmVuY2VzIGJlZm9yZSB0cmlnZ2VyaW5nICdyZW1vdmUnIGV2ZW50IHRvIHByZXZlbnQgYW4KICAgICAgICAvLyBpbmZpbml0ZSBsb29wLiAjMzY5MwogICAgICAgIGRlbGV0ZSB0aGlzLl9ieUlkW21vZGVsLmNpZF07CiAgICAgICAgdmFyIGlkID0gdGhpcy5tb2RlbElkKG1vZGVsLmF0dHJpYnV0ZXMsIG1vZGVsLmlkQXR0cmlidXRlKTsKICAgICAgICBpZiAoaWQgIT0gbnVsbCkgZGVsZXRlIHRoaXMuX2J5SWRbaWRdOwoKICAgICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7CiAgICAgICAgICBvcHRpb25zLmluZGV4ID0gaW5kZXg7CiAgICAgICAgICBtb2RlbC50cmlnZ2VyKCdyZW1vdmUnLCBtb2RlbCwgdGhpcywgb3B0aW9ucyk7CiAgICAgICAgfQoKICAgICAgICByZW1vdmVkLnB1c2gobW9kZWwpOwogICAgICAgIHRoaXMuX3JlbW92ZVJlZmVyZW5jZShtb2RlbCwgb3B0aW9ucyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlbW92ZWQ7CiAgICB9LAoKICAgIC8vIE1ldGhvZCBmb3IgY2hlY2tpbmcgd2hldGhlciBhbiBvYmplY3Qgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBtb2RlbCBmb3IKICAgIC8vIHRoZSBwdXJwb3NlcyBvZiBhZGRpbmcgdG8gdGhlIGNvbGxlY3Rpb24uCiAgICBfaXNNb2RlbDogZnVuY3Rpb24obW9kZWwpIHsKICAgICAgcmV0dXJuIG1vZGVsIGluc3RhbmNlb2YgTW9kZWw7CiAgICB9LAoKICAgIC8vIEludGVybmFsIG1ldGhvZCB0byBjcmVhdGUgYSBtb2RlbCdzIHRpZXMgdG8gYSBjb2xsZWN0aW9uLgogICAgX2FkZFJlZmVyZW5jZTogZnVuY3Rpb24obW9kZWwsIG9wdGlvbnMpIHsKICAgICAgdGhpcy5fYnlJZFttb2RlbC5jaWRdID0gbW9kZWw7CiAgICAgIHZhciBpZCA9IHRoaXMubW9kZWxJZChtb2RlbC5hdHRyaWJ1dGVzLCBtb2RlbC5pZEF0dHJpYnV0ZSk7CiAgICAgIGlmIChpZCAhPSBudWxsKSB0aGlzLl9ieUlkW2lkXSA9IG1vZGVsOwogICAgICBtb2RlbC5vbignYWxsJywgdGhpcy5fb25Nb2RlbEV2ZW50LCB0aGlzKTsKICAgIH0sCgogICAgLy8gSW50ZXJuYWwgbWV0aG9kIHRvIHNldmVyIGEgbW9kZWwncyB0aWVzIHRvIGEgY29sbGVjdGlvbi4KICAgIF9yZW1vdmVSZWZlcmVuY2U6IGZ1bmN0aW9uKG1vZGVsLCBvcHRpb25zKSB7CiAgICAgIGRlbGV0ZSB0aGlzLl9ieUlkW21vZGVsLmNpZF07CiAgICAgIHZhciBpZCA9IHRoaXMubW9kZWxJZChtb2RlbC5hdHRyaWJ1dGVzLCBtb2RlbC5pZEF0dHJpYnV0ZSk7CiAgICAgIGlmIChpZCAhPSBudWxsKSBkZWxldGUgdGhpcy5fYnlJZFtpZF07CiAgICAgIGlmICh0aGlzID09PSBtb2RlbC5jb2xsZWN0aW9uKSBkZWxldGUgbW9kZWwuY29sbGVjdGlvbjsKICAgICAgbW9kZWwub2ZmKCdhbGwnLCB0aGlzLl9vbk1vZGVsRXZlbnQsIHRoaXMpOwogICAgfSwKCiAgICAvLyBJbnRlcm5hbCBtZXRob2QgY2FsbGVkIGV2ZXJ5IHRpbWUgYSBtb2RlbCBpbiB0aGUgc2V0IGZpcmVzIGFuIGV2ZW50LgogICAgLy8gU2V0cyBuZWVkIHRvIHVwZGF0ZSB0aGVpciBpbmRleGVzIHdoZW4gbW9kZWxzIGNoYW5nZSBpZHMuIEFsbCBvdGhlcgogICAgLy8gZXZlbnRzIHNpbXBseSBwcm94eSB0aHJvdWdoLiAiYWRkIiBhbmQgInJlbW92ZSIgZXZlbnRzIHRoYXQgb3JpZ2luYXRlCiAgICAvLyBpbiBvdGhlciBjb2xsZWN0aW9ucyBhcmUgaWdub3JlZC4KICAgIF9vbk1vZGVsRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50LCBtb2RlbCwgY29sbGVjdGlvbiwgb3B0aW9ucykgewogICAgICBpZiAobW9kZWwpIHsKICAgICAgICBpZiAoKGV2ZW50ID09PSAnYWRkJyB8fCBldmVudCA9PT0gJ3JlbW92ZScpICYmIGNvbGxlY3Rpb24gIT09IHRoaXMpIHJldHVybjsKICAgICAgICBpZiAoZXZlbnQgPT09ICdkZXN0cm95JykgdGhpcy5yZW1vdmUobW9kZWwsIG9wdGlvbnMpOwogICAgICAgIGlmIChldmVudCA9PT0gJ2NoYW5nZUlkJykgewogICAgICAgICAgdmFyIHByZXZJZCA9IHRoaXMubW9kZWxJZChtb2RlbC5wcmV2aW91c0F0dHJpYnV0ZXMoKSwgbW9kZWwuaWRBdHRyaWJ1dGUpOwogICAgICAgICAgdmFyIGlkID0gdGhpcy5tb2RlbElkKG1vZGVsLmF0dHJpYnV0ZXMsIG1vZGVsLmlkQXR0cmlidXRlKTsKICAgICAgICAgIGlmIChwcmV2SWQgIT0gbnVsbCkgZGVsZXRlIHRoaXMuX2J5SWRbcHJldklkXTsKICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB0aGlzLl9ieUlkW2lkXSA9IG1vZGVsOwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLnRyaWdnZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgIH0KCiAgfSk7CgogIC8vIERlZmluaW5nIGFuIEBAaXRlcmF0b3IgbWV0aG9kIGltcGxlbWVudHMgSmF2YVNjcmlwdCdzIEl0ZXJhYmxlIHByb3RvY29sLgogIC8vIEluIG1vZGVybiBFUzIwMTUgYnJvd3NlcnMsIHRoaXMgdmFsdWUgaXMgZm91bmQgYXQgU3ltYm9sLml0ZXJhdG9yLgogIC8qIGdsb2JhbCBTeW1ib2wgKi8KICB2YXIgJCRpdGVyYXRvciA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yOwogIGlmICgkJGl0ZXJhdG9yKSB7CiAgICBDb2xsZWN0aW9uLnByb3RvdHlwZVskJGl0ZXJhdG9yXSA9IENvbGxlY3Rpb24ucHJvdG90eXBlLnZhbHVlczsKICB9CgogIC8vIENvbGxlY3Rpb25JdGVyYXRvcgogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLQoKICAvLyBBIENvbGxlY3Rpb25JdGVyYXRvciBpbXBsZW1lbnRzIEphdmFTY3JpcHQncyBJdGVyYXRvciBwcm90b2NvbCwgYWxsb3dpbmcgdGhlCiAgLy8gdXNlIG9mIGBmb3Igb2ZgIGxvb3BzIGluIG1vZGVybiBicm93c2VycyBhbmQgaW50ZXJvcGVyYXRpb24gYmV0d2VlbgogIC8vIEJhY2tib25lLkNvbGxlY3Rpb24gYW5kIG90aGVyIEphdmFTY3JpcHQgZnVuY3Rpb25zIGFuZCB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMKICAvLyB3aGljaCBjYW4gb3BlcmF0ZSBvbiBJdGVyYWJsZXMuCiAgdmFyIENvbGxlY3Rpb25JdGVyYXRvciA9IGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGtpbmQpIHsKICAgIHRoaXMuX2NvbGxlY3Rpb24gPSBjb2xsZWN0aW9uOwogICAgdGhpcy5fa2luZCA9IGtpbmQ7CiAgICB0aGlzLl9pbmRleCA9IDA7CiAgfTsKCiAgLy8gVGhpcyAiZW51bSIgZGVmaW5lcyB0aGUgdGhyZWUgcG9zc2libGUga2luZHMgb2YgdmFsdWVzIHdoaWNoIGNhbiBiZSBlbWl0dGVkCiAgLy8gYnkgYSBDb2xsZWN0aW9uSXRlcmF0b3IgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSB2YWx1ZXMoKSwga2V5cygpIGFuZCBlbnRyaWVzKCkKICAvLyBtZXRob2RzIG9uIENvbGxlY3Rpb24sIHJlc3BlY3RpdmVseS4KICB2YXIgSVRFUkFUT1JfVkFMVUVTID0gMTsKICB2YXIgSVRFUkFUT1JfS0VZUyA9IDI7CiAgdmFyIElURVJBVE9SX0tFWVNWQUxVRVMgPSAzOwoKICAvLyBBbGwgSXRlcmF0b3JzIHNob3VsZCB0aGVtc2VsdmVzIGJlIEl0ZXJhYmxlLgogIGlmICgkJGl0ZXJhdG9yKSB7CiAgICBDb2xsZWN0aW9uSXRlcmF0b3IucHJvdG90eXBlWyQkaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfTsKICB9CgogIENvbGxlY3Rpb25JdGVyYXRvci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKCkgewogICAgaWYgKHRoaXMuX2NvbGxlY3Rpb24pIHsKCiAgICAgIC8vIE9ubHkgY29udGludWUgaXRlcmF0aW5nIGlmIHRoZSBpdGVyYXRlZCBjb2xsZWN0aW9uIGlzIGxvbmcgZW5vdWdoLgogICAgICBpZiAodGhpcy5faW5kZXggPCB0aGlzLl9jb2xsZWN0aW9uLmxlbmd0aCkgewogICAgICAgIHZhciBtb2RlbCA9IHRoaXMuX2NvbGxlY3Rpb24uYXQodGhpcy5faW5kZXgpOwogICAgICAgIHRoaXMuX2luZGV4Kys7CgogICAgICAgIC8vIENvbnN0cnVjdCBhIHZhbHVlIGRlcGVuZGluZyBvbiB3aGF0IGtpbmQgb2YgdmFsdWVzIHNob3VsZCBiZSBpdGVyYXRlZC4KICAgICAgICB2YXIgdmFsdWU7CiAgICAgICAgaWYgKHRoaXMuX2tpbmQgPT09IElURVJBVE9SX1ZBTFVFUykgewogICAgICAgICAgdmFsdWUgPSBtb2RlbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIGlkID0gdGhpcy5fY29sbGVjdGlvbi5tb2RlbElkKG1vZGVsLmF0dHJpYnV0ZXMsIG1vZGVsLmlkQXR0cmlidXRlKTsKICAgICAgICAgIGlmICh0aGlzLl9raW5kID09PSBJVEVSQVRPUl9LRVlTKSB7CiAgICAgICAgICAgIHZhbHVlID0gaWQ7CiAgICAgICAgICB9IGVsc2UgeyAvLyBJVEVSQVRPUl9LRVlTVkFMVUVTCiAgICAgICAgICAgIHZhbHVlID0gW2lkLCBtb2RlbF07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB7dmFsdWU6IHZhbHVlLCBkb25lOiBmYWxzZX07CiAgICAgIH0KCiAgICAgIC8vIE9uY2UgZXhoYXVzdGVkLCByZW1vdmUgdGhlIHJlZmVyZW5jZSB0byB0aGUgY29sbGVjdGlvbiBzbyBmdXR1cmUKICAgICAgLy8gY2FsbHMgdG8gdGhlIG5leHQgbWV0aG9kIGFsd2F5cyByZXR1cm4gZG9uZS4KICAgICAgdGhpcy5fY29sbGVjdGlvbiA9IHZvaWQgMDsKICAgIH0KCiAgICByZXR1cm4ge3ZhbHVlOiB2b2lkIDAsIGRvbmU6IHRydWV9OwogIH07CgogIC8vIEJhY2tib25lLlZpZXcKICAvLyAtLS0tLS0tLS0tLS0tCgogIC8vIEJhY2tib25lIFZpZXdzIGFyZSBhbG1vc3QgbW9yZSBjb252ZW50aW9uIHRoYW4gdGhleSBhcmUgYWN0dWFsIGNvZGUuIEEgVmlldwogIC8vIGlzIHNpbXBseSBhIEphdmFTY3JpcHQgb2JqZWN0IHRoYXQgcmVwcmVzZW50cyBhIGxvZ2ljYWwgY2h1bmsgb2YgVUkgaW4gdGhlCiAgLy8gRE9NLiBUaGlzIG1pZ2h0IGJlIGEgc2luZ2xlIGl0ZW0sIGFuIGVudGlyZSBsaXN0LCBhIHNpZGViYXIgb3IgcGFuZWwsIG9yCiAgLy8gZXZlbiB0aGUgc3Vycm91bmRpbmcgZnJhbWUgd2hpY2ggd3JhcHMgeW91ciB3aG9sZSBhcHAuIERlZmluaW5nIGEgY2h1bmsgb2YKICAvLyBVSSBhcyBhICoqVmlldyoqIGFsbG93cyB5b3UgdG8gZGVmaW5lIHlvdXIgRE9NIGV2ZW50cyBkZWNsYXJhdGl2ZWx5LCB3aXRob3V0CiAgLy8gaGF2aW5nIHRvIHdvcnJ5IGFib3V0IHJlbmRlciBvcmRlciAuLi4gYW5kIG1ha2VzIGl0IGVhc3kgZm9yIHRoZSB2aWV3IHRvCiAgLy8gcmVhY3QgdG8gc3BlY2lmaWMgY2hhbmdlcyBpbiB0aGUgc3RhdGUgb2YgeW91ciBtb2RlbHMuCgogIC8vIENyZWF0aW5nIGEgQmFja2JvbmUuVmlldyBjcmVhdGVzIGl0cyBpbml0aWFsIGVsZW1lbnQgb3V0c2lkZSBvZiB0aGUgRE9NLAogIC8vIGlmIGFuIGV4aXN0aW5nIGVsZW1lbnQgaXMgbm90IHByb3ZpZGVkLi4uCiAgdmFyIFZpZXcgPSBCYWNrYm9uZS5WaWV3ID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgdGhpcy5jaWQgPSBfLnVuaXF1ZUlkKCd2aWV3Jyk7CiAgICB0aGlzLnByZWluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgIF8uZXh0ZW5kKHRoaXMsIF8ucGljayhvcHRpb25zLCB2aWV3T3B0aW9ucykpOwogICAgdGhpcy5fZW5zdXJlRWxlbWVudCgpOwogICAgdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgfTsKCiAgLy8gQ2FjaGVkIHJlZ2V4IHRvIHNwbGl0IGtleXMgZm9yIGBkZWxlZ2F0ZWAuCiAgdmFyIGRlbGVnYXRlRXZlbnRTcGxpdHRlciA9IC9eKFxTKylccyooLiopJC87CgogIC8vIExpc3Qgb2YgdmlldyBvcHRpb25zIHRvIGJlIHNldCBhcyBwcm9wZXJ0aWVzLgogIHZhciB2aWV3T3B0aW9ucyA9IFsnbW9kZWwnLCAnY29sbGVjdGlvbicsICdlbCcsICdpZCcsICdhdHRyaWJ1dGVzJywgJ2NsYXNzTmFtZScsICd0YWdOYW1lJywgJ2V2ZW50cyddOwoKICAvLyBTZXQgdXAgYWxsIGluaGVyaXRhYmxlICoqQmFja2JvbmUuVmlldyoqIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuCiAgXy5leHRlbmQoVmlldy5wcm90b3R5cGUsIEV2ZW50cywgewoKICAgIC8vIFRoZSBkZWZhdWx0IGB0YWdOYW1lYCBvZiBhIFZpZXcncyBlbGVtZW50IGlzIGAiZGl2ImAuCiAgICB0YWdOYW1lOiAnZGl2JywKCiAgICAvLyBqUXVlcnkgZGVsZWdhdGUgZm9yIGVsZW1lbnQgbG9va3VwLCBzY29wZWQgdG8gRE9NIGVsZW1lbnRzIHdpdGhpbiB0aGUKICAgIC8vIGN1cnJlbnQgdmlldy4gVGhpcyBzaG91bGQgYmUgcHJlZmVycmVkIHRvIGdsb2JhbCBsb29rdXBzIHdoZXJlIHBvc3NpYmxlLgogICAgJDogZnVuY3Rpb24oc2VsZWN0b3IpIHsKICAgICAgcmV0dXJuIHRoaXMuJGVsLmZpbmQoc2VsZWN0b3IpOwogICAgfSwKCiAgICAvLyBwcmVpbml0aWFsaXplIGlzIGFuIGVtcHR5IGZ1bmN0aW9uIGJ5IGRlZmF1bHQuIFlvdSBjYW4gb3ZlcnJpZGUgaXQgd2l0aCBhIGZ1bmN0aW9uCiAgICAvLyBvciBvYmplY3QuICBwcmVpbml0aWFsaXplIHdpbGwgcnVuIGJlZm9yZSBhbnkgaW5zdGFudGlhdGlvbiBsb2dpYyBpcyBydW4gaW4gdGhlIFZpZXcKICAgIHByZWluaXRpYWxpemU6IGZ1bmN0aW9uKCl7fSwKCiAgICAvLyBJbml0aWFsaXplIGlzIGFuIGVtcHR5IGZ1bmN0aW9uIGJ5IGRlZmF1bHQuIE92ZXJyaWRlIGl0IHdpdGggeW91ciBvd24KICAgIC8vIGluaXRpYWxpemF0aW9uIGxvZ2ljLgogICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKXt9LAoKICAgIC8vICoqcmVuZGVyKiogaXMgdGhlIGNvcmUgZnVuY3Rpb24gdGhhdCB5b3VyIHZpZXcgc2hvdWxkIG92ZXJyaWRlLCBpbiBvcmRlcgogICAgLy8gdG8gcG9wdWxhdGUgaXRzIGVsZW1lbnQgKGB0aGlzLmVsYCksIHdpdGggdGhlIGFwcHJvcHJpYXRlIEhUTUwuIFRoZQogICAgLy8gY29udmVudGlvbiBpcyBmb3IgKipyZW5kZXIqKiB0byBhbHdheXMgcmV0dXJuIGB0aGlzYC4KICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSwKCiAgICAvLyBSZW1vdmUgdGhpcyB2aWV3IGJ5IHRha2luZyB0aGUgZWxlbWVudCBvdXQgb2YgdGhlIERPTSwgYW5kIHJlbW92aW5nIGFueQogICAgLy8gYXBwbGljYWJsZSBCYWNrYm9uZS5FdmVudHMgbGlzdGVuZXJzLgogICAgcmVtb3ZlOiBmdW5jdGlvbigpIHsKICAgICAgdGhpcy5fcmVtb3ZlRWxlbWVudCgpOwogICAgICB0aGlzLnN0b3BMaXN0ZW5pbmcoKTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9LAoKICAgIC8vIFJlbW92ZSB0aGlzIHZpZXcncyBlbGVtZW50IGZyb20gdGhlIGRvY3VtZW50IGFuZCBhbGwgZXZlbnQgbGlzdGVuZXJzCiAgICAvLyBhdHRhY2hlZCB0byBpdC4gRXhwb3NlZCBmb3Igc3ViY2xhc3NlcyB1c2luZyBhbiBhbHRlcm5hdGl2ZSBET00KICAgIC8vIG1hbmlwdWxhdGlvbiBBUEkuCiAgICBfcmVtb3ZlRWxlbWVudDogZnVuY3Rpb24oKSB7CiAgICAgIHRoaXMuJGVsLnJlbW92ZSgpOwogICAgfSwKCiAgICAvLyBDaGFuZ2UgdGhlIHZpZXcncyBlbGVtZW50IChgdGhpcy5lbGAgcHJvcGVydHkpIGFuZCByZS1kZWxlZ2F0ZSB0aGUKICAgIC8vIHZpZXcncyBldmVudHMgb24gdGhlIG5ldyBlbGVtZW50LgogICAgc2V0RWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCkgewogICAgICB0aGlzLnVuZGVsZWdhdGVFdmVudHMoKTsKICAgICAgdGhpcy5fc2V0RWxlbWVudChlbGVtZW50KTsKICAgICAgdGhpcy5kZWxlZ2F0ZUV2ZW50cygpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0sCgogICAgLy8gQ3JlYXRlcyB0aGUgYHRoaXMuZWxgIGFuZCBgdGhpcy4kZWxgIHJlZmVyZW5jZXMgZm9yIHRoaXMgdmlldyB1c2luZyB0aGUKICAgIC8vIGdpdmVuIGBlbGAuIGBlbGAgY2FuIGJlIGEgQ1NTIHNlbGVjdG9yIG9yIGFuIEhUTUwgc3RyaW5nLCBhIGpRdWVyeQogICAgLy8gY29udGV4dCBvciBhbiBlbGVtZW50LiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0aGlzIHRvIHV0aWxpemUgYW4KICAgIC8vIGFsdGVybmF0aXZlIERPTSBtYW5pcHVsYXRpb24gQVBJIGFuZCBhcmUgb25seSByZXF1aXJlZCB0byBzZXQgdGhlCiAgICAvLyBgdGhpcy5lbGAgcHJvcGVydHkuCiAgICBfc2V0RWxlbWVudDogZnVuY3Rpb24oZWwpIHsKICAgICAgdGhpcy4kZWwgPSBlbCBpbnN0YW5jZW9mIEJhY2tib25lLiQgPyBlbCA6IEJhY2tib25lLiQoZWwpOwogICAgICB0aGlzLmVsID0gdGhpcy4kZWxbMF07CiAgICB9LAoKICAgIC8vIFNldCBjYWxsYmFja3MsIHdoZXJlIGB0aGlzLmV2ZW50c2AgaXMgYSBoYXNoIG9mCiAgICAvLwogICAgLy8gKnsiZXZlbnQgc2VsZWN0b3IiOiAiY2FsbGJhY2sifSoKICAgIC8vCiAgICAvLyAgICAgewogICAgLy8gICAgICAgJ21vdXNlZG93biAudGl0bGUnOiAgJ2VkaXQnLAogICAgLy8gICAgICAgJ2NsaWNrIC5idXR0b24nOiAgICAgJ3NhdmUnLAogICAgLy8gICAgICAgJ2NsaWNrIC5vcGVuJzogICAgICAgZnVuY3Rpb24oZSkgeyAuLi4gfQogICAgLy8gICAgIH0KICAgIC8vCiAgICAvLyBwYWlycy4gQ2FsbGJhY2tzIHdpbGwgYmUgYm91bmQgdG8gdGhlIHZpZXcsIHdpdGggYHRoaXNgIHNldCBwcm9wZXJseS4KICAgIC8vIFVzZXMgZXZlbnQgZGVsZWdhdGlvbiBmb3IgZWZmaWNpZW5jeS4KICAgIC8vIE9taXR0aW5nIHRoZSBzZWxlY3RvciBiaW5kcyB0aGUgZXZlbnQgdG8gYHRoaXMuZWxgLgogICAgZGVsZWdhdGVFdmVudHM6IGZ1bmN0aW9uKGV2ZW50cykgewogICAgICBldmVudHMgfHwgKGV2ZW50cyA9IF8ucmVzdWx0KHRoaXMsICdldmVudHMnKSk7CiAgICAgIGlmICghZXZlbnRzKSByZXR1cm4gdGhpczsKICAgICAgdGhpcy51bmRlbGVnYXRlRXZlbnRzKCk7CiAgICAgIGZvciAodmFyIGtleSBpbiBldmVudHMpIHsKICAgICAgICB2YXIgbWV0aG9kID0gZXZlbnRzW2tleV07CiAgICAgICAgaWYgKCFfLmlzRnVuY3Rpb24obWV0aG9kKSkgbWV0aG9kID0gdGhpc1ttZXRob2RdOwogICAgICAgIGlmICghbWV0aG9kKSBjb250aW51ZTsKICAgICAgICB2YXIgbWF0Y2ggPSBrZXkubWF0Y2goZGVsZWdhdGVFdmVudFNwbGl0dGVyKTsKICAgICAgICB0aGlzLmRlbGVnYXRlKG1hdGNoWzFdLCBtYXRjaFsyXSwgbWV0aG9kLmJpbmQodGhpcykpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSwKCiAgICAvLyBBZGQgYSBzaW5nbGUgZXZlbnQgbGlzdGVuZXIgdG8gdGhlIHZpZXcncyBlbGVtZW50IChvciBhIGNoaWxkIGVsZW1lbnQKICAgIC8vIHVzaW5nIGBzZWxlY3RvcmApLiBUaGlzIG9ubHkgd29ya3MgZm9yIGRlbGVnYXRlLWFibGUgZXZlbnRzOiBub3QgYGZvY3VzYCwKICAgIC8vIGBibHVyYCwgYW5kIG5vdCBgY2hhbmdlYCwgYHN1Ym1pdGAsIGFuZCBgcmVzZXRgIGluIEludGVybmV0IEV4cGxvcmVyLgogICAgZGVsZWdhdGU6IGZ1bmN0aW9uKGV2ZW50TmFtZSwgc2VsZWN0b3IsIGxpc3RlbmVyKSB7CiAgICAgIHRoaXMuJGVsLm9uKGV2ZW50TmFtZSArICcuZGVsZWdhdGVFdmVudHMnICsgdGhpcy5jaWQsIHNlbGVjdG9yLCBsaXN0ZW5lcik7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSwKCiAgICAvLyBDbGVhcnMgYWxsIGNhbGxiYWNrcyBwcmV2aW91c2x5IGJvdW5kIHRvIHRoZSB2aWV3IGJ5IGBkZWxlZ2F0ZUV2ZW50c2AuCiAgICAvLyBZb3UgdXN1YWxseSBkb24ndCBuZWVkIHRvIHVzZSB0aGlzLCBidXQgbWF5IHdpc2ggdG8gaWYgeW91IGhhdmUgbXVsdGlwbGUKICAgIC8vIEJhY2tib25lIHZpZXdzIGF0dGFjaGVkIHRvIHRoZSBzYW1lIERPTSBlbGVtZW50LgogICAgdW5kZWxlZ2F0ZUV2ZW50czogZnVuY3Rpb24oKSB7CiAgICAgIGlmICh0aGlzLiRlbCkgdGhpcy4kZWwub2ZmKCcuZGVsZWdhdGVFdmVudHMnICsgdGhpcy5jaWQpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0sCgogICAgLy8gQSBmaW5lci1ncmFpbmVkIGB1bmRlbGVnYXRlRXZlbnRzYCBmb3IgcmVtb3ZpbmcgYSBzaW5nbGUgZGVsZWdhdGVkIGV2ZW50LgogICAgLy8gYHNlbGVjdG9yYCBhbmQgYGxpc3RlbmVyYCBhcmUgYm90aCBvcHRpb25hbC4KICAgIHVuZGVsZWdhdGU6IGZ1bmN0aW9uKGV2ZW50TmFtZSwgc2VsZWN0b3IsIGxpc3RlbmVyKSB7CiAgICAgIHRoaXMuJGVsLm9mZihldmVudE5hbWUgKyAnLmRlbGVnYXRlRXZlbnRzJyArIHRoaXMuY2lkLCBzZWxlY3RvciwgbGlzdGVuZXIpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0sCgogICAgLy8gUHJvZHVjZXMgYSBET00gZWxlbWVudCB0byBiZSBhc3NpZ25lZCB0byB5b3VyIHZpZXcuIEV4cG9zZWQgZm9yCiAgICAvLyBzdWJjbGFzc2VzIHVzaW5nIGFuIGFsdGVybmF0aXZlIERPTSBtYW5pcHVsYXRpb24gQVBJLgogICAgX2NyZWF0ZUVsZW1lbnQ6IGZ1bmN0aW9uKHRhZ05hbWUpIHsKICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7CiAgICB9LAoKICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBWaWV3IGhhcyBhIERPTSBlbGVtZW50IHRvIHJlbmRlciBpbnRvLgogICAgLy8gSWYgYHRoaXMuZWxgIGlzIGEgc3RyaW5nLCBwYXNzIGl0IHRocm91Z2ggYCQoKWAsIHRha2UgdGhlIGZpcnN0CiAgICAvLyBtYXRjaGluZyBlbGVtZW50LCBhbmQgcmUtYXNzaWduIGl0IHRvIGBlbGAuIE90aGVyd2lzZSwgY3JlYXRlCiAgICAvLyBhbiBlbGVtZW50IGZyb20gdGhlIGBpZGAsIGBjbGFzc05hbWVgIGFuZCBgdGFnTmFtZWAgcHJvcGVydGllcy4KICAgIF9lbnN1cmVFbGVtZW50OiBmdW5jdGlvbigpIHsKICAgICAgaWYgKCF0aGlzLmVsKSB7CiAgICAgICAgdmFyIGF0dHJzID0gXy5leHRlbmQoe30sIF8ucmVzdWx0KHRoaXMsICdhdHRyaWJ1dGVzJykpOwogICAgICAgIGlmICh0aGlzLmlkKSBhdHRycy5pZCA9IF8ucmVzdWx0KHRoaXMsICdpZCcpOwogICAgICAgIGlmICh0aGlzLmNsYXNzTmFtZSkgYXR0cnNbJ2NsYXNzJ10gPSBfLnJlc3VsdCh0aGlzLCAnY2xhc3NOYW1lJyk7CiAgICAgICAgdGhpcy5zZXRFbGVtZW50KHRoaXMuX2NyZWF0ZUVsZW1lbnQoXy5yZXN1bHQodGhpcywgJ3RhZ05hbWUnKSkpOwogICAgICAgIHRoaXMuX3NldEF0dHJpYnV0ZXMoYXR0cnMpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuc2V0RWxlbWVudChfLnJlc3VsdCh0aGlzLCAnZWwnKSk7CiAgICAgIH0KICAgIH0sCgogICAgLy8gU2V0IGF0dHJpYnV0ZXMgZnJvbSBhIGhhc2ggb24gdGhpcyB2aWV3J3MgZWxlbWVudC4gIEV4cG9zZWQgZm9yCiAgICAvLyBzdWJjbGFzc2VzIHVzaW5nIGFuIGFsdGVybmF0aXZlIERPTSBtYW5pcHVsYXRpb24gQVBJLgogICAgX3NldEF0dHJpYnV0ZXM6IGZ1bmN0aW9uKGF0dHJpYnV0ZXMpIHsKICAgICAgdGhpcy4kZWwuYXR0cihhdHRyaWJ1dGVzKTsKICAgIH0KCiAgfSk7CgogIC8vIFByb3h5IEJhY2tib25lIGNsYXNzIG1ldGhvZHMgdG8gVW5kZXJzY29yZSBmdW5jdGlvbnMsIHdyYXBwaW5nIHRoZSBtb2RlbCdzCiAgLy8gYGF0dHJpYnV0ZXNgIG9iamVjdCBvciBjb2xsZWN0aW9uJ3MgYG1vZGVsc2AgYXJyYXkgYmVoaW5kIHRoZSBzY2VuZXMuCiAgLy8KICAvLyBjb2xsZWN0aW9uLmZpbHRlcihmdW5jdGlvbihtb2RlbCkgeyByZXR1cm4gbW9kZWwuZ2V0KCdhZ2UnKSA+IDEwIH0pOwogIC8vIGNvbGxlY3Rpb24uZWFjaCh0aGlzLmFkZFZpZXcpOwogIC8vCiAgLy8gYEZ1bmN0aW9uI2FwcGx5YCBjYW4gYmUgc2xvdyBzbyB3ZSB1c2UgdGhlIG1ldGhvZCdzIGFyZyBjb3VudCwgaWYgd2Uga25vdyBpdC4KICB2YXIgYWRkTWV0aG9kID0gZnVuY3Rpb24oYmFzZSwgbGVuZ3RoLCBtZXRob2QsIGF0dHJpYnV0ZSkgewogICAgc3dpdGNoIChsZW5ndGgpIHsKICAgICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIGJhc2VbbWV0aG9kXSh0aGlzW2F0dHJpYnV0ZV0pOwogICAgICB9OwogICAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgIHJldHVybiBiYXNlW21ldGhvZF0odGhpc1thdHRyaWJ1dGVdLCB2YWx1ZSk7CiAgICAgIH07CiAgICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKGl0ZXJhdGVlLCBjb250ZXh0KSB7CiAgICAgICAgcmV0dXJuIGJhc2VbbWV0aG9kXSh0aGlzW2F0dHJpYnV0ZV0sIGNiKGl0ZXJhdGVlLCB0aGlzKSwgY29udGV4dCk7CiAgICAgIH07CiAgICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9uKGl0ZXJhdGVlLCBkZWZhdWx0VmFsLCBjb250ZXh0KSB7CiAgICAgICAgcmV0dXJuIGJhc2VbbWV0aG9kXSh0aGlzW2F0dHJpYnV0ZV0sIGNiKGl0ZXJhdGVlLCB0aGlzKSwgZGVmYXVsdFZhbCwgY29udGV4dCk7CiAgICAgIH07CiAgICAgIGRlZmF1bHQ6IHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKTsKICAgICAgICBhcmdzLnVuc2hpZnQodGhpc1thdHRyaWJ1dGVdKTsKICAgICAgICByZXR1cm4gYmFzZVttZXRob2RdLmFwcGx5KGJhc2UsIGFyZ3MpOwogICAgICB9OwogICAgfQogIH07CgogIHZhciBhZGRVbmRlcnNjb3JlTWV0aG9kcyA9IGZ1bmN0aW9uKENsYXNzLCBiYXNlLCBtZXRob2RzLCBhdHRyaWJ1dGUpIHsKICAgIF8uZWFjaChtZXRob2RzLCBmdW5jdGlvbihsZW5ndGgsIG1ldGhvZCkgewogICAgICBpZiAoYmFzZVttZXRob2RdKSBDbGFzcy5wcm90b3R5cGVbbWV0aG9kXSA9IGFkZE1ldGhvZChiYXNlLCBsZW5ndGgsIG1ldGhvZCwgYXR0cmlidXRlKTsKICAgIH0pOwogIH07CgogIC8vIFN1cHBvcnQgYGNvbGxlY3Rpb24uc29ydEJ5KCdhdHRyJylgIGFuZCBgY29sbGVjdGlvbi5maW5kV2hlcmUoe2lkOiAxfSlgLgogIHZhciBjYiA9IGZ1bmN0aW9uKGl0ZXJhdGVlLCBpbnN0YW5jZSkgewogICAgaWYgKF8uaXNGdW5jdGlvbihpdGVyYXRlZSkpIHJldHVybiBpdGVyYXRlZTsKICAgIGlmIChfLmlzT2JqZWN0KGl0ZXJhdGVlKSAmJiAhaW5zdGFuY2UuX2lzTW9kZWwoaXRlcmF0ZWUpKSByZXR1cm4gbW9kZWxNYXRjaGVyKGl0ZXJhdGVlKTsKICAgIGlmIChfLmlzU3RyaW5nKGl0ZXJhdGVlKSkgcmV0dXJuIGZ1bmN0aW9uKG1vZGVsKSB7IHJldHVybiBtb2RlbC5nZXQoaXRlcmF0ZWUpOyB9OwogICAgcmV0dXJuIGl0ZXJhdGVlOwogIH07CiAgdmFyIG1vZGVsTWF0Y2hlciA9IGZ1bmN0aW9uKGF0dHJzKSB7CiAgICB2YXIgbWF0Y2hlciA9IF8ubWF0Y2hlcyhhdHRycyk7CiAgICByZXR1cm4gZnVuY3Rpb24obW9kZWwpIHsKICAgICAgcmV0dXJuIG1hdGNoZXIobW9kZWwuYXR0cmlidXRlcyk7CiAgICB9OwogIH07CgogIC8vIFVuZGVyc2NvcmUgbWV0aG9kcyB0aGF0IHdlIHdhbnQgdG8gaW1wbGVtZW50IG9uIHRoZSBDb2xsZWN0aW9uLgogIC8vIDkwJSBvZiB0aGUgY29yZSB1c2VmdWxuZXNzIG9mIEJhY2tib25lIENvbGxlY3Rpb25zIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkCiAgLy8gcmlnaHQgaGVyZToKICB2YXIgY29sbGVjdGlvbk1ldGhvZHMgPSB7Zm9yRWFjaDogMywgZWFjaDogMywgbWFwOiAzLCBjb2xsZWN0OiAzLCByZWR1Y2U6IDAsCiAgICBmb2xkbDogMCwgaW5qZWN0OiAwLCByZWR1Y2VSaWdodDogMCwgZm9sZHI6IDAsIGZpbmQ6IDMsIGRldGVjdDogMywgZmlsdGVyOiAzLAogICAgc2VsZWN0OiAzLCByZWplY3Q6IDMsIGV2ZXJ5OiAzLCBhbGw6IDMsIHNvbWU6IDMsIGFueTogMywgaW5jbHVkZTogMywgaW5jbHVkZXM6IDMsCiAgICBjb250YWluczogMywgaW52b2tlOiAwLCBtYXg6IDMsIG1pbjogMywgdG9BcnJheTogMSwgc2l6ZTogMSwgZmlyc3Q6IDMsCiAgICBoZWFkOiAzLCB0YWtlOiAzLCBpbml0aWFsOiAzLCByZXN0OiAzLCB0YWlsOiAzLCBkcm9wOiAzLCBsYXN0OiAzLAogICAgd2l0aG91dDogMCwgZGlmZmVyZW5jZTogMCwgaW5kZXhPZjogMywgc2h1ZmZsZTogMSwgbGFzdEluZGV4T2Y6IDMsCiAgICBpc0VtcHR5OiAxLCBjaGFpbjogMSwgc2FtcGxlOiAzLCBwYXJ0aXRpb246IDMsIGdyb3VwQnk6IDMsIGNvdW50Qnk6IDMsCiAgICBzb3J0Qnk6IDMsIGluZGV4Qnk6IDMsIGZpbmRJbmRleDogMywgZmluZExhc3RJbmRleDogM307CgoKICAvLyBVbmRlcnNjb3JlIG1ldGhvZHMgdGhhdCB3ZSB3YW50IHRvIGltcGxlbWVudCBvbiB0aGUgTW9kZWwsIG1hcHBlZCB0byB0aGUKICAvLyBudW1iZXIgb2YgYXJndW1lbnRzIHRoZXkgdGFrZS4KICB2YXIgbW9kZWxNZXRob2RzID0ge2tleXM6IDEsIHZhbHVlczogMSwgcGFpcnM6IDEsIGludmVydDogMSwgcGljazogMCwKICAgIG9taXQ6IDAsIGNoYWluOiAxLCBpc0VtcHR5OiAxfTsKCiAgLy8gTWl4IGluIGVhY2ggVW5kZXJzY29yZSBtZXRob2QgYXMgYSBwcm94eSB0byBgQ29sbGVjdGlvbiNtb2RlbHNgLgoKICBfLmVhY2goWwogICAgW0NvbGxlY3Rpb24sIGNvbGxlY3Rpb25NZXRob2RzLCAnbW9kZWxzJ10sCiAgICBbTW9kZWwsIG1vZGVsTWV0aG9kcywgJ2F0dHJpYnV0ZXMnXQogIF0sIGZ1bmN0aW9uKGNvbmZpZykgewogICAgdmFyIEJhc2UgPSBjb25maWdbMF0sCiAgICAgICAgbWV0aG9kcyA9IGNvbmZpZ1sxXSwKICAgICAgICBhdHRyaWJ1dGUgPSBjb25maWdbMl07CgogICAgQmFzZS5taXhpbiA9IGZ1bmN0aW9uKG9iaikgewogICAgICB2YXIgbWFwcGluZ3MgPSBfLnJlZHVjZShfLmZ1bmN0aW9ucyhvYmopLCBmdW5jdGlvbihtZW1vLCBuYW1lKSB7CiAgICAgICAgbWVtb1tuYW1lXSA9IDA7CiAgICAgICAgcmV0dXJuIG1lbW87CiAgICAgIH0sIHt9KTsKICAgICAgYWRkVW5kZXJzY29yZU1ldGhvZHMoQmFzZSwgb2JqLCBtYXBwaW5ncywgYXR0cmlidXRlKTsKICAgIH07CgogICAgYWRkVW5kZXJzY29yZU1ldGhvZHMoQmFzZSwgXywgbWV0aG9kcywgYXR0cmlidXRlKTsKICB9KTsKCiAgLy8gQmFja2JvbmUuc3luYwogIC8vIC0tLS0tLS0tLS0tLS0KCiAgLy8gT3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBjaGFuZ2UgdGhlIG1hbm5lciBpbiB3aGljaCBCYWNrYm9uZSBwZXJzaXN0cwogIC8vIG1vZGVscyB0byB0aGUgc2VydmVyLiBZb3Ugd2lsbCBiZSBwYXNzZWQgdGhlIHR5cGUgb2YgcmVxdWVzdCwgYW5kIHRoZQogIC8vIG1vZGVsIGluIHF1ZXN0aW9uLiBCeSBkZWZhdWx0LCBtYWtlcyBhIFJFU1RmdWwgQWpheCByZXF1ZXN0CiAgLy8gdG8gdGhlIG1vZGVsJ3MgYHVybCgpYC4gU29tZSBwb3NzaWJsZSBjdXN0b21pemF0aW9ucyBjb3VsZCBiZToKICAvLwogIC8vICogVXNlIGBzZXRUaW1lb3V0YCB0byBiYXRjaCByYXBpZC1maXJlIHVwZGF0ZXMgaW50byBhIHNpbmdsZSByZXF1ZXN0LgogIC8vICogU2VuZCB1cCB0aGUgbW9kZWxzIGFzIFhNTCBpbnN0ZWFkIG9mIEpTT04uCiAgLy8gKiBQZXJzaXN0IG1vZGVscyB2aWEgV2ViU29ja2V0cyBpbnN0ZWFkIG9mIEFqYXguCiAgLy8KICAvLyBUdXJuIG9uIGBCYWNrYm9uZS5lbXVsYXRlSFRUUGAgaW4gb3JkZXIgdG8gc2VuZCBgUFVUYCBhbmQgYERFTEVURWAgcmVxdWVzdHMKICAvLyBhcyBgUE9TVGAsIHdpdGggYSBgX21ldGhvZGAgcGFyYW1ldGVyIGNvbnRhaW5pbmcgdGhlIHRydWUgSFRUUCBtZXRob2QsCiAgLy8gYXMgd2VsbCBhcyBhbGwgcmVxdWVzdHMgd2l0aCB0aGUgYm9keSBhcyBgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkYAogIC8vIGluc3RlYWQgb2YgYGFwcGxpY2F0aW9uL2pzb25gIHdpdGggdGhlIG1vZGVsIGluIGEgcGFyYW0gbmFtZWQgYG1vZGVsYC4KICAvLyBVc2VmdWwgd2hlbiBpbnRlcmZhY2luZyB3aXRoIHNlcnZlci1zaWRlIGxhbmd1YWdlcyBsaWtlICoqUEhQKiogdGhhdCBtYWtlCiAgLy8gaXQgZGlmZmljdWx0IHRvIHJlYWQgdGhlIGJvZHkgb2YgYFBVVGAgcmVxdWVzdHMuCiAgQmFja2JvbmUuc3luYyA9IGZ1bmN0aW9uKG1ldGhvZCwgbW9kZWwsIG9wdGlvbnMpIHsKICAgIHZhciB0eXBlID0gbWV0aG9kTWFwW21ldGhvZF07CgogICAgLy8gRGVmYXVsdCBvcHRpb25zLCB1bmxlc3Mgc3BlY2lmaWVkLgogICAgXy5kZWZhdWx0cyhvcHRpb25zIHx8IChvcHRpb25zID0ge30pLCB7CiAgICAgIGVtdWxhdGVIVFRQOiBCYWNrYm9uZS5lbXVsYXRlSFRUUCwKICAgICAgZW11bGF0ZUpTT046IEJhY2tib25lLmVtdWxhdGVKU09OCiAgICB9KTsKCiAgICAvLyBEZWZhdWx0IEpTT04tcmVxdWVzdCBvcHRpb25zLgogICAgdmFyIHBhcmFtcyA9IHt0eXBlOiB0eXBlLCBkYXRhVHlwZTogJ2pzb24nfTsKCiAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIGEgVVJMLgogICAgaWYgKCFvcHRpb25zLnVybCkgewogICAgICBwYXJhbXMudXJsID0gXy5yZXN1bHQobW9kZWwsICd1cmwnKSB8fCB1cmxFcnJvcigpOwogICAgfQoKICAgIC8vIEVuc3VyZSB0aGF0IHdlIGhhdmUgdGhlIGFwcHJvcHJpYXRlIHJlcXVlc3QgZGF0YS4KICAgIGlmIChvcHRpb25zLmRhdGEgPT0gbnVsbCAmJiBtb2RlbCAmJiAobWV0aG9kID09PSAnY3JlYXRlJyB8fCBtZXRob2QgPT09ICd1cGRhdGUnIHx8IG1ldGhvZCA9PT0gJ3BhdGNoJykpIHsKICAgICAgcGFyYW1zLmNvbnRlbnRUeXBlID0gJ2FwcGxpY2F0aW9uL2pzb24nOwogICAgICBwYXJhbXMuZGF0YSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuYXR0cnMgfHwgbW9kZWwudG9KU09OKG9wdGlvbnMpKTsKICAgIH0KCiAgICAvLyBGb3Igb2xkZXIgc2VydmVycywgZW11bGF0ZSBKU09OIGJ5IGVuY29kaW5nIHRoZSByZXF1ZXN0IGludG8gYW4gSFRNTC1mb3JtLgogICAgaWYgKG9wdGlvbnMuZW11bGF0ZUpTT04pIHsKICAgICAgcGFyYW1zLmNvbnRlbnRUeXBlID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCc7CiAgICAgIHBhcmFtcy5kYXRhID0gcGFyYW1zLmRhdGEgPyB7bW9kZWw6IHBhcmFtcy5kYXRhfSA6IHt9OwogICAgfQoKICAgIC8vIEZvciBvbGRlciBzZXJ2ZXJzLCBlbXVsYXRlIEhUVFAgYnkgbWltaWNraW5nIHRoZSBIVFRQIG1ldGhvZCB3aXRoIGBfbWV0aG9kYAogICAgLy8gQW5kIGFuIGBYLUhUVFAtTWV0aG9kLU92ZXJyaWRlYCBoZWFkZXIuCiAgICBpZiAob3B0aW9ucy5lbXVsYXRlSFRUUCAmJiAodHlwZSA9PT0gJ1BVVCcgfHwgdHlwZSA9PT0gJ0RFTEVURScgfHwgdHlwZSA9PT0gJ1BBVENIJykpIHsKICAgICAgcGFyYW1zLnR5cGUgPSAnUE9TVCc7CiAgICAgIGlmIChvcHRpb25zLmVtdWxhdGVKU09OKSBwYXJhbXMuZGF0YS5fbWV0aG9kID0gdHlwZTsKICAgICAgdmFyIGJlZm9yZVNlbmQgPSBvcHRpb25zLmJlZm9yZVNlbmQ7CiAgICAgIG9wdGlvbnMuYmVmb3JlU2VuZCA9IGZ1bmN0aW9uKHhocikgewogICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdYLUhUVFAtTWV0aG9kLU92ZXJyaWRlJywgdHlwZSk7CiAgICAgICAgaWYgKGJlZm9yZVNlbmQpIHJldHVybiBiZWZvcmVTZW5kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIH07CiAgICB9CgogICAgLy8gRG9uJ3QgcHJvY2VzcyBkYXRhIG9uIGEgbm9uLUdFVCByZXF1ZXN0LgogICAgaWYgKHBhcmFtcy50eXBlICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5lbXVsYXRlSlNPTikgewogICAgICBwYXJhbXMucHJvY2Vzc0RhdGEgPSBmYWxzZTsKICAgIH0KCiAgICAvLyBQYXNzIGFsb25nIGB0ZXh0U3RhdHVzYCBhbmQgYGVycm9yVGhyb3duYCBmcm9tIGpRdWVyeS4KICAgIHZhciBlcnJvciA9IG9wdGlvbnMuZXJyb3I7CiAgICBvcHRpb25zLmVycm9yID0gZnVuY3Rpb24oeGhyLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikgewogICAgICBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzOwogICAgICBvcHRpb25zLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247CiAgICAgIGlmIChlcnJvcikgZXJyb3IuY2FsbChvcHRpb25zLmNvbnRleHQsIHhociwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pOwogICAgfTsKCiAgICAvLyBNYWtlIHRoZSByZXF1ZXN0LCBhbGxvd2luZyB0aGUgdXNlciB0byBvdmVycmlkZSBhbnkgQWpheCBvcHRpb25zLgogICAgdmFyIHhociA9IG9wdGlvbnMueGhyID0gQmFja2JvbmUuYWpheChfLmV4dGVuZChwYXJhbXMsIG9wdGlvbnMpKTsKICAgIG1vZGVsLnRyaWdnZXIoJ3JlcXVlc3QnLCBtb2RlbCwgeGhyLCBvcHRpb25zKTsKICAgIHJldHVybiB4aHI7CiAgfTsKCiAgLy8gTWFwIGZyb20gQ1JVRCB0byBIVFRQIGZvciBvdXIgZGVmYXVsdCBgQmFja2JvbmUuc3luY2AgaW1wbGVtZW50YXRpb24uCiAgdmFyIG1ldGhvZE1hcCA9IHsKICAgICdjcmVhdGUnOiAnUE9TVCcsCiAgICAndXBkYXRlJzogJ1BVVCcsCiAgICAncGF0Y2gnOiAnUEFUQ0gnLAogICAgJ2RlbGV0ZSc6ICdERUxFVEUnLAogICAgJ3JlYWQnOiAnR0VUJwogIH07CgogIC8vIFNldCB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBgQmFja2JvbmUuYWpheGAgdG8gcHJveHkgdGhyb3VnaCB0byBgJGAuCiAgLy8gT3ZlcnJpZGUgdGhpcyBpZiB5b3UnZCBsaWtlIHRvIHVzZSBhIGRpZmZlcmVudCBsaWJyYXJ5LgogIEJhY2tib25lLmFqYXggPSBmdW5jdGlvbigpIHsKICAgIHJldHVybiBCYWNrYm9uZS4kLmFqYXguYXBwbHkoQmFja2JvbmUuJCwgYXJndW1lbnRzKTsKICB9OwoKICAvLyBCYWNrYm9uZS5Sb3V0ZXIKICAvLyAtLS0tLS0tLS0tLS0tLS0KCiAgLy8gUm91dGVycyBtYXAgZmF1eC1VUkxzIHRvIGFjdGlvbnMsIGFuZCBmaXJlIGV2ZW50cyB3aGVuIHJvdXRlcyBhcmUKICAvLyBtYXRjaGVkLiBDcmVhdGluZyBhIG5ldyBvbmUgc2V0cyBpdHMgYHJvdXRlc2AgaGFzaCwgaWYgbm90IHNldCBzdGF0aWNhbGx5LgogIHZhciBSb3V0ZXIgPSBCYWNrYm9uZS5Sb3V0ZXIgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pOwogICAgdGhpcy5wcmVpbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICBpZiAob3B0aW9ucy5yb3V0ZXMpIHRoaXMucm91dGVzID0gb3B0aW9ucy5yb3V0ZXM7CiAgICB0aGlzLl9iaW5kUm91dGVzKCk7CiAgICB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICB9OwoKICAvLyBDYWNoZWQgcmVndWxhciBleHByZXNzaW9ucyBmb3IgbWF0Y2hpbmcgbmFtZWQgcGFyYW0gcGFydHMgYW5kIHNwbGF0dGVkCiAgLy8gcGFydHMgb2Ygcm91dGUgc3RyaW5ncy4KICB2YXIgb3B0aW9uYWxQYXJhbSA9IC9cKCguKj8pXCkvZzsKICB2YXIgbmFtZWRQYXJhbSAgICA9IC8oXChcPyk/Olx3Ky9nOwogIHZhciBzcGxhdFBhcmFtICAgID0gL1wqXHcrL2c7CiAgdmFyIGVzY2FwZVJlZ0V4cCAgPSAvW1wte31cW1xdKz8uLFxcXF4kfCNcc10vZzsKCiAgLy8gU2V0IHVwIGFsbCBpbmhlcml0YWJsZSAqKkJhY2tib25lLlJvdXRlcioqIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMuCiAgXy5leHRlbmQoUm91dGVyLnByb3RvdHlwZSwgRXZlbnRzLCB7CgogICAgLy8gcHJlaW5pdGlhbGl6ZSBpcyBhbiBlbXB0eSBmdW5jdGlvbiBieSBkZWZhdWx0LiBZb3UgY2FuIG92ZXJyaWRlIGl0IHdpdGggYSBmdW5jdGlvbgogICAgLy8gb3Igb2JqZWN0LiAgcHJlaW5pdGlhbGl6ZSB3aWxsIHJ1biBiZWZvcmUgYW55IGluc3RhbnRpYXRpb24gbG9naWMgaXMgcnVuIGluIHRoZSBSb3V0ZXIuCiAgICBwcmVpbml0aWFsaXplOiBmdW5jdGlvbigpe30sCgogICAgLy8gSW5pdGlhbGl6ZSBpcyBhbiBlbXB0eSBmdW5jdGlvbiBieSBkZWZhdWx0LiBPdmVycmlkZSBpdCB3aXRoIHlvdXIgb3duCiAgICAvLyBpbml0aWFsaXphdGlvbiBsb2dpYy4KICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCl7fSwKCiAgICAvLyBNYW51YWxseSBiaW5kIGEgc2luZ2xlIG5hbWVkIHJvdXRlIHRvIGEgY2FsbGJhY2suIEZvciBleGFtcGxlOgogICAgLy8KICAgIC8vICAgICB0aGlzLnJvdXRlKCdzZWFyY2gvOnF1ZXJ5L3A6bnVtJywgJ3NlYXJjaCcsIGZ1bmN0aW9uKHF1ZXJ5LCBudW0pIHsKICAgIC8vICAgICAgIC4uLgogICAgLy8gICAgIH0pOwogICAgLy8KICAgIHJvdXRlOiBmdW5jdGlvbihyb3V0ZSwgbmFtZSwgY2FsbGJhY2spIHsKICAgICAgaWYgKCFfLmlzUmVnRXhwKHJvdXRlKSkgcm91dGUgPSB0aGlzLl9yb3V0ZVRvUmVnRXhwKHJvdXRlKTsKICAgICAgaWYgKF8uaXNGdW5jdGlvbihuYW1lKSkgewogICAgICAgIGNhbGxiYWNrID0gbmFtZTsKICAgICAgICBuYW1lID0gJyc7CiAgICAgIH0KICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSB0aGlzW25hbWVdOwogICAgICB2YXIgcm91dGVyID0gdGhpczsKICAgICAgQmFja2JvbmUuaGlzdG9yeS5yb3V0ZShyb3V0ZSwgZnVuY3Rpb24oZnJhZ21lbnQpIHsKICAgICAgICB2YXIgYXJncyA9IHJvdXRlci5fZXh0cmFjdFBhcmFtZXRlcnMocm91dGUsIGZyYWdtZW50KTsKICAgICAgICBpZiAocm91dGVyLmV4ZWN1dGUoY2FsbGJhY2ssIGFyZ3MsIG5hbWUpICE9PSBmYWxzZSkgewogICAgICAgICAgcm91dGVyLnRyaWdnZXIuYXBwbHkocm91dGVyLCBbJ3JvdXRlOicgKyBuYW1lXS5jb25jYXQoYXJncykpOwogICAgICAgICAgcm91dGVyLnRyaWdnZXIoJ3JvdXRlJywgbmFtZSwgYXJncyk7CiAgICAgICAgICBCYWNrYm9uZS5oaXN0b3J5LnRyaWdnZXIoJ3JvdXRlJywgcm91dGVyLCBuYW1lLCBhcmdzKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICByZXR1cm4gdGhpczsKICAgIH0sCgogICAgLy8gRXhlY3V0ZSBhIHJvdXRlIGhhbmRsZXIgd2l0aCB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycy4gIFRoaXMgaXMgYW4KICAgIC8vIGV4Y2VsbGVudCBwbGFjZSB0byBkbyBwcmUtcm91dGUgc2V0dXAgb3IgcG9zdC1yb3V0ZSBjbGVhbnVwLgogICAgZXhlY3V0ZTogZnVuY3Rpb24oY2FsbGJhY2ssIGFyZ3MsIG5hbWUpIHsKICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmdzKTsKICAgIH0sCgogICAgLy8gU2ltcGxlIHByb3h5IHRvIGBCYWNrYm9uZS5oaXN0b3J5YCB0byBzYXZlIGEgZnJhZ21lbnQgaW50byB0aGUgaGlzdG9yeS4KICAgIG5hdmlnYXRlOiBmdW5jdGlvbihmcmFnbWVudCwgb3B0aW9ucykgewogICAgICBCYWNrYm9uZS5oaXN0b3J5Lm5hdmlnYXRlKGZyYWdtZW50LCBvcHRpb25zKTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9LAoKICAgIC8vIEJpbmQgYWxsIGRlZmluZWQgcm91dGVzIHRvIGBCYWNrYm9uZS5oaXN0b3J5YC4gV2UgaGF2ZSB0byByZXZlcnNlIHRoZQogICAgLy8gb3JkZXIgb2YgdGhlIHJvdXRlcyBoZXJlIHRvIHN1cHBvcnQgYmVoYXZpb3Igd2hlcmUgdGhlIG1vc3QgZ2VuZXJhbAogICAgLy8gcm91dGVzIGNhbiBiZSBkZWZpbmVkIGF0IHRoZSBib3R0b20gb2YgdGhlIHJvdXRlIG1hcC4KICAgIF9iaW5kUm91dGVzOiBmdW5jdGlvbigpIHsKICAgICAgaWYgKCF0aGlzLnJvdXRlcykgcmV0dXJuOwogICAgICB0aGlzLnJvdXRlcyA9IF8ucmVzdWx0KHRoaXMsICdyb3V0ZXMnKTsKICAgICAgdmFyIHJvdXRlLCByb3V0ZXMgPSBfLmtleXModGhpcy5yb3V0ZXMpOwogICAgICB3aGlsZSAoKHJvdXRlID0gcm91dGVzLnBvcCgpKSAhPSBudWxsKSB7CiAgICAgICAgdGhpcy5yb3V0ZShyb3V0ZSwgdGhpcy5yb3V0ZXNbcm91dGVdKTsKICAgICAgfQogICAgfSwKCiAgICAvLyBDb252ZXJ0IGEgcm91dGUgc3RyaW5nIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24sIHN1aXRhYmxlIGZvciBtYXRjaGluZwogICAgLy8gYWdhaW5zdCB0aGUgY3VycmVudCBsb2NhdGlvbiBoYXNoLgogICAgX3JvdXRlVG9SZWdFeHA6IGZ1bmN0aW9uKHJvdXRlKSB7CiAgICAgIHJvdXRlID0gcm91dGUucmVwbGFjZShlc2NhcGVSZWdFeHAsICdcXCQmJykKICAgICAgLnJlcGxhY2Uob3B0aW9uYWxQYXJhbSwgJyg/OiQxKT8nKQogICAgICAucmVwbGFjZShuYW1lZFBhcmFtLCBmdW5jdGlvbihtYXRjaCwgb3B0aW9uYWwpIHsKICAgICAgICByZXR1cm4gb3B0aW9uYWwgPyBtYXRjaCA6ICcoW14vP10rKSc7CiAgICAgIH0pCiAgICAgIC5yZXBsYWNlKHNwbGF0UGFyYW0sICcoW14/XSo/KScpOwogICAgICByZXR1cm4gbmV3IFJlZ0V4cCgnXicgKyByb3V0ZSArICcoPzpcXD8oW1xcc1xcU10qKSk/JCcpOwogICAgfSwKCiAgICAvLyBHaXZlbiBhIHJvdXRlLCBhbmQgYSBVUkwgZnJhZ21lbnQgdGhhdCBpdCBtYXRjaGVzLCByZXR1cm4gdGhlIGFycmF5IG9mCiAgICAvLyBleHRyYWN0ZWQgZGVjb2RlZCBwYXJhbWV0ZXJzLiBFbXB0eSBvciB1bm1hdGNoZWQgcGFyYW1ldGVycyB3aWxsIGJlCiAgICAvLyB0cmVhdGVkIGFzIGBudWxsYCB0byBub3JtYWxpemUgY3Jvc3MtYnJvd3NlciBiZWhhdmlvci4KICAgIF9leHRyYWN0UGFyYW1ldGVyczogZnVuY3Rpb24ocm91dGUsIGZyYWdtZW50KSB7CiAgICAgIHZhciBwYXJhbXMgPSByb3V0ZS5leGVjKGZyYWdtZW50KS5zbGljZSgxKTsKICAgICAgcmV0dXJuIF8ubWFwKHBhcmFtcywgZnVuY3Rpb24ocGFyYW0sIGkpIHsKICAgICAgICAvLyBEb24ndCBkZWNvZGUgdGhlIHNlYXJjaCBwYXJhbXMuCiAgICAgICAgaWYgKGkgPT09IHBhcmFtcy5sZW5ndGggLSAxKSByZXR1cm4gcGFyYW0gfHwgbnVsbDsKICAgICAgICByZXR1cm4gcGFyYW0gPyBkZWNvZGVVUklDb21wb25lbnQocGFyYW0pIDogbnVsbDsKICAgICAgfSk7CiAgICB9CgogIH0pOwoKICAvLyBCYWNrYm9uZS5IaXN0b3J5CiAgLy8gLS0tLS0tLS0tLS0tLS0tLQoKICAvLyBIYW5kbGVzIGNyb3NzLWJyb3dzZXIgaGlzdG9yeSBtYW5hZ2VtZW50LCBiYXNlZCBvbiBlaXRoZXIKICAvLyBbcHVzaFN0YXRlXShodHRwOi8vZGl2ZWludG9odG1sNS5pbmZvL2hpc3RvcnkuaHRtbCkgYW5kIHJlYWwgVVJMcywgb3IKICAvLyBbb25oYXNoY2hhbmdlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0RPTS93aW5kb3cub25oYXNoY2hhbmdlKQogIC8vIGFuZCBVUkwgZnJhZ21lbnRzLiBJZiB0aGUgYnJvd3NlciBzdXBwb3J0cyBuZWl0aGVyIChvbGQgSUUsIG5hdGNoKSwKICAvLyBmYWxscyBiYWNrIHRvIHBvbGxpbmcuCiAgdmFyIEhpc3RvcnkgPSBCYWNrYm9uZS5IaXN0b3J5ID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLmhhbmRsZXJzID0gW107CiAgICB0aGlzLmNoZWNrVXJsID0gdGhpcy5jaGVja1VybC5iaW5kKHRoaXMpOwoKICAgIC8vIEVuc3VyZSB0aGF0IGBIaXN0b3J5YCBjYW4gYmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBicm93c2VyLgogICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgIHRoaXMubG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247CiAgICAgIHRoaXMuaGlzdG9yeSA9IHdpbmRvdy5oaXN0b3J5OwogICAgfQogIH07CgogIC8vIENhY2hlZCByZWdleCBmb3Igc3RyaXBwaW5nIGEgbGVhZGluZyBoYXNoL3NsYXNoIGFuZCB0cmFpbGluZyBzcGFjZS4KICB2YXIgcm91dGVTdHJpcHBlciA9IC9eWyNcL118XHMrJC9nOwoKICAvLyBDYWNoZWQgcmVnZXggZm9yIHN0cmlwcGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzLgogIHZhciByb290U3RyaXBwZXIgPSAvXlwvK3xcLyskL2c7CgogIC8vIENhY2hlZCByZWdleCBmb3Igc3RyaXBwaW5nIHVybHMgb2YgaGFzaC4KICB2YXIgcGF0aFN0cmlwcGVyID0gLyMuKiQvOwoKICAvLyBIYXMgdGhlIGhpc3RvcnkgaGFuZGxpbmcgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQ/CiAgSGlzdG9yeS5zdGFydGVkID0gZmFsc2U7CgogIC8vIFNldCB1cCBhbGwgaW5oZXJpdGFibGUgKipCYWNrYm9uZS5IaXN0b3J5KiogcHJvcGVydGllcyBhbmQgbWV0aG9kcy4KICBfLmV4dGVuZChIaXN0b3J5LnByb3RvdHlwZSwgRXZlbnRzLCB7CgogICAgLy8gVGhlIGRlZmF1bHQgaW50ZXJ2YWwgdG8gcG9sbCBmb3IgaGFzaCBjaGFuZ2VzLCBpZiBuZWNlc3NhcnksIGlzCiAgICAvLyB0d2VudHkgdGltZXMgYSBzZWNvbmQuCiAgICBpbnRlcnZhbDogNTAsCgogICAgLy8gQXJlIHdlIGF0IHRoZSBhcHAgcm9vdD8KICAgIGF0Um9vdDogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBwYXRoID0gdGhpcy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9bXlwvXSQvLCAnJCYvJyk7CiAgICAgIHJldHVybiBwYXRoID09PSB0aGlzLnJvb3QgJiYgIXRoaXMuZ2V0U2VhcmNoKCk7CiAgICB9LAoKICAgIC8vIERvZXMgdGhlIHBhdGhuYW1lIG1hdGNoIHRoZSByb290PwogICAgbWF0Y2hSb290OiBmdW5jdGlvbigpIHsKICAgICAgdmFyIHBhdGggPSB0aGlzLmRlY29kZUZyYWdtZW50KHRoaXMubG9jYXRpb24ucGF0aG5hbWUpOwogICAgICB2YXIgcm9vdFBhdGggPSBwYXRoLnNsaWNlKDAsIHRoaXMucm9vdC5sZW5ndGggLSAxKSArICcvJzsKICAgICAgcmV0dXJuIHJvb3RQYXRoID09PSB0aGlzLnJvb3Q7CiAgICB9LAoKICAgIC8vIFVuaWNvZGUgY2hhcmFjdGVycyBpbiBgbG9jYXRpb24ucGF0aG5hbWVgIGFyZSBwZXJjZW50IGVuY29kZWQgc28gdGhleSdyZQogICAgLy8gZGVjb2RlZCBmb3IgY29tcGFyaXNvbi4gYCUyNWAgc2hvdWxkIG5vdCBiZSBkZWNvZGVkIHNpbmNlIGl0IG1heSBiZSBwYXJ0CiAgICAvLyBvZiBhbiBlbmNvZGVkIHBhcmFtZXRlci4KICAgIGRlY29kZUZyYWdtZW50OiBmdW5jdGlvbihmcmFnbWVudCkgewogICAgICByZXR1cm4gZGVjb2RlVVJJKGZyYWdtZW50LnJlcGxhY2UoLyUyNS9nLCAnJTI1MjUnKSk7CiAgICB9LAoKICAgIC8vIEluIElFNiwgdGhlIGhhc2ggZnJhZ21lbnQgYW5kIHNlYXJjaCBwYXJhbXMgYXJlIGluY29ycmVjdCBpZiB0aGUKICAgIC8vIGZyYWdtZW50IGNvbnRhaW5zIGA/YC4KICAgIGdldFNlYXJjaDogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBtYXRjaCA9IHRoaXMubG9jYXRpb24uaHJlZi5yZXBsYWNlKC8jLiovLCAnJykubWF0Y2goL1w/LisvKTsKICAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMF0gOiAnJzsKICAgIH0sCgogICAgLy8gR2V0cyB0aGUgdHJ1ZSBoYXNoIHZhbHVlLiBDYW5ub3QgdXNlIGxvY2F0aW9uLmhhc2ggZGlyZWN0bHkgZHVlIHRvIGJ1ZwogICAgLy8gaW4gRmlyZWZveCB3aGVyZSBsb2NhdGlvbi5oYXNoIHdpbGwgYWx3YXlzIGJlIGRlY29kZWQuCiAgICBnZXRIYXNoOiBmdW5jdGlvbih3aW5kb3cpIHsKICAgICAgdmFyIG1hdGNoID0gKHdpbmRvdyB8fCB0aGlzKS5sb2NhdGlvbi5ocmVmLm1hdGNoKC8jKC4qKSQvKTsKICAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiAnJzsKICAgIH0sCgogICAgLy8gR2V0IHRoZSBwYXRobmFtZSBhbmQgc2VhcmNoIHBhcmFtcywgd2l0aG91dCB0aGUgcm9vdC4KICAgIGdldFBhdGg6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgcGF0aCA9IHRoaXMuZGVjb2RlRnJhZ21lbnQoCiAgICAgICAgdGhpcy5sb2NhdGlvbi5wYXRobmFtZSArIHRoaXMuZ2V0U2VhcmNoKCkKICAgICAgKS5zbGljZSh0aGlzLnJvb3QubGVuZ3RoIC0gMSk7CiAgICAgIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nID8gcGF0aC5zbGljZSgxKSA6IHBhdGg7CiAgICB9LAoKICAgIC8vIEdldCB0aGUgY3Jvc3MtYnJvd3NlciBub3JtYWxpemVkIFVSTCBmcmFnbWVudCBmcm9tIHRoZSBwYXRoIG9yIGhhc2guCiAgICBnZXRGcmFnbWVudDogZnVuY3Rpb24oZnJhZ21lbnQpIHsKICAgICAgaWYgKGZyYWdtZW50ID09IG51bGwpIHsKICAgICAgICBpZiAodGhpcy5fdXNlUHVzaFN0YXRlIHx8ICF0aGlzLl93YW50c0hhc2hDaGFuZ2UpIHsKICAgICAgICAgIGZyYWdtZW50ID0gdGhpcy5nZXRQYXRoKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZyYWdtZW50ID0gdGhpcy5nZXRIYXNoKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmcmFnbWVudC5yZXBsYWNlKHJvdXRlU3RyaXBwZXIsICcnKTsKICAgIH0sCgogICAgLy8gU3RhcnQgdGhlIGhhc2ggY2hhbmdlIGhhbmRsaW5nLCByZXR1cm5pbmcgYHRydWVgIGlmIHRoZSBjdXJyZW50IFVSTCBtYXRjaGVzCiAgICAvLyBhbiBleGlzdGluZyByb3V0ZSwgYW5kIGBmYWxzZWAgb3RoZXJ3aXNlLgogICAgc3RhcnQ6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgaWYgKEhpc3Rvcnkuc3RhcnRlZCkgdGhyb3cgbmV3IEVycm9yKCdCYWNrYm9uZS5oaXN0b3J5IGhhcyBhbHJlYWR5IGJlZW4gc3RhcnRlZCcpOwogICAgICBIaXN0b3J5LnN0YXJ0ZWQgPSB0cnVlOwoKICAgICAgLy8gRmlndXJlIG91dCB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uLiBEbyB3ZSBuZWVkIGFuIGlmcmFtZT8KICAgICAgLy8gSXMgcHVzaFN0YXRlIGRlc2lyZWQgLi4uIGlzIGl0IGF2YWlsYWJsZT8KICAgICAgdGhpcy5vcHRpb25zICAgICAgICAgID0gXy5leHRlbmQoe3Jvb3Q6ICcvJ30sIHRoaXMub3B0aW9ucywgb3B0aW9ucyk7CiAgICAgIHRoaXMucm9vdCAgICAgICAgICAgICA9IHRoaXMub3B0aW9ucy5yb290OwogICAgICB0aGlzLl93YW50c0hhc2hDaGFuZ2UgPSB0aGlzLm9wdGlvbnMuaGFzaENoYW5nZSAhPT0gZmFsc2U7CiAgICAgIHRoaXMuX2hhc0hhc2hDaGFuZ2UgICA9ICdvbmhhc2hjaGFuZ2UnIGluIHdpbmRvdyAmJiAoZG9jdW1lbnQuZG9jdW1lbnRNb2RlID09PSB2b2lkIDAgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlID4gNyk7CiAgICAgIHRoaXMuX3VzZUhhc2hDaGFuZ2UgICA9IHRoaXMuX3dhbnRzSGFzaENoYW5nZSAmJiB0aGlzLl9oYXNIYXNoQ2hhbmdlOwogICAgICB0aGlzLl93YW50c1B1c2hTdGF0ZSAgPSAhIXRoaXMub3B0aW9ucy5wdXNoU3RhdGU7CiAgICAgIHRoaXMuX2hhc1B1c2hTdGF0ZSAgICA9ICEhKHRoaXMuaGlzdG9yeSAmJiB0aGlzLmhpc3RvcnkucHVzaFN0YXRlKTsKICAgICAgdGhpcy5fdXNlUHVzaFN0YXRlICAgID0gdGhpcy5fd2FudHNQdXNoU3RhdGUgJiYgdGhpcy5faGFzUHVzaFN0YXRlOwogICAgICB0aGlzLmZyYWdtZW50ICAgICAgICAgPSB0aGlzLmdldEZyYWdtZW50KCk7CgogICAgICAvLyBOb3JtYWxpemUgcm9vdCB0byBhbHdheXMgaW5jbHVkZSBhIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoLgogICAgICB0aGlzLnJvb3QgPSAoJy8nICsgdGhpcy5yb290ICsgJy8nKS5yZXBsYWNlKHJvb3RTdHJpcHBlciwgJy8nKTsKCiAgICAgIC8vIFRyYW5zaXRpb24gZnJvbSBoYXNoQ2hhbmdlIHRvIHB1c2hTdGF0ZSBvciB2aWNlIHZlcnNhIGlmIGJvdGggYXJlCiAgICAgIC8vIHJlcXVlc3RlZC4KICAgICAgaWYgKHRoaXMuX3dhbnRzSGFzaENoYW5nZSAmJiB0aGlzLl93YW50c1B1c2hTdGF0ZSkgewoKICAgICAgICAvLyBJZiB3ZSd2ZSBzdGFydGVkIG9mZiB3aXRoIGEgcm91dGUgZnJvbSBhIGBwdXNoU3RhdGVgLWVuYWJsZWQKICAgICAgICAvLyBicm93c2VyLCBidXQgd2UncmUgY3VycmVudGx5IGluIGEgYnJvd3NlciB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBpdC4uLgogICAgICAgIGlmICghdGhpcy5faGFzUHVzaFN0YXRlICYmICF0aGlzLmF0Um9vdCgpKSB7CiAgICAgICAgICB2YXIgcm9vdFBhdGggPSB0aGlzLnJvb3Quc2xpY2UoMCwgLTEpIHx8ICcvJzsKICAgICAgICAgIHRoaXMubG9jYXRpb24ucmVwbGFjZShyb290UGF0aCArICcjJyArIHRoaXMuZ2V0UGF0aCgpKTsKICAgICAgICAgIC8vIFJldHVybiBpbW1lZGlhdGVseSBhcyBicm93c2VyIHdpbGwgZG8gcmVkaXJlY3QgdG8gbmV3IHVybAogICAgICAgICAgcmV0dXJuIHRydWU7CgogICAgICAgIC8vIE9yIGlmIHdlJ3ZlIHN0YXJ0ZWQgb3V0IHdpdGggYSBoYXNoLWJhc2VkIHJvdXRlLCBidXQgd2UncmUgY3VycmVudGx5CiAgICAgICAgLy8gaW4gYSBicm93c2VyIHdoZXJlIGl0IGNvdWxkIGJlIGBwdXNoU3RhdGVgLWJhc2VkIGluc3RlYWQuLi4KICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2hhc1B1c2hTdGF0ZSAmJiB0aGlzLmF0Um9vdCgpKSB7CiAgICAgICAgICB0aGlzLm5hdmlnYXRlKHRoaXMuZ2V0SGFzaCgpLCB7cmVwbGFjZTogdHJ1ZX0pOwogICAgICAgIH0KCiAgICAgIH0KCiAgICAgIC8vIFByb3h5IGFuIGlmcmFtZSB0byBoYW5kbGUgbG9jYXRpb24gZXZlbnRzIGlmIHRoZSBicm93c2VyIGRvZXNuJ3QKICAgICAgLy8gc3VwcG9ydCB0aGUgYGhhc2hjaGFuZ2VgIGV2ZW50LCBIVE1MNSBoaXN0b3J5LCBvciB0aGUgdXNlciB3YW50cwogICAgICAvLyBgaGFzaENoYW5nZWAgYnV0IG5vdCBgcHVzaFN0YXRlYC4KICAgICAgaWYgKCF0aGlzLl9oYXNIYXNoQ2hhbmdlICYmIHRoaXMuX3dhbnRzSGFzaENoYW5nZSAmJiAhdGhpcy5fdXNlUHVzaFN0YXRlKSB7CiAgICAgICAgdGhpcy5pZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKICAgICAgICB0aGlzLmlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDowJzsKICAgICAgICB0aGlzLmlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgIHRoaXMuaWZyYW1lLnRhYkluZGV4ID0gLTE7CiAgICAgICAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5OwogICAgICAgIC8vIFVzaW5nIGBhcHBlbmRDaGlsZGAgd2lsbCB0aHJvdyBvbiBJRSA8IDkgaWYgdGhlIGRvY3VtZW50IGlzIG5vdCByZWFkeS4KICAgICAgICB2YXIgaVdpbmRvdyA9IGJvZHkuaW5zZXJ0QmVmb3JlKHRoaXMuaWZyYW1lLCBib2R5LmZpcnN0Q2hpbGQpLmNvbnRlbnRXaW5kb3c7CiAgICAgICAgaVdpbmRvdy5kb2N1bWVudC5vcGVuKCk7CiAgICAgICAgaVdpbmRvdy5kb2N1bWVudC5jbG9zZSgpOwogICAgICAgIGlXaW5kb3cubG9jYXRpb24uaGFzaCA9ICcjJyArIHRoaXMuZnJhZ21lbnQ7CiAgICAgIH0KCiAgICAgIC8vIEFkZCBhIGNyb3NzLXBsYXRmb3JtIGBhZGRFdmVudExpc3RlbmVyYCBzaGltIGZvciBvbGRlciBicm93c2Vycy4KICAgICAgdmFyIGFkZEV2ZW50TGlzdGVuZXIgPSB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciB8fCBmdW5jdGlvbihldmVudE5hbWUsIGxpc3RlbmVyKSB7CiAgICAgICAgcmV0dXJuIGF0dGFjaEV2ZW50KCdvbicgKyBldmVudE5hbWUsIGxpc3RlbmVyKTsKICAgICAgfTsKCiAgICAgIC8vIERlcGVuZGluZyBvbiB3aGV0aGVyIHdlJ3JlIHVzaW5nIHB1c2hTdGF0ZSBvciBoYXNoZXMsIGFuZCB3aGV0aGVyCiAgICAgIC8vICdvbmhhc2hjaGFuZ2UnIGlzIHN1cHBvcnRlZCwgZGV0ZXJtaW5lIGhvdyB3ZSBjaGVjayB0aGUgVVJMIHN0YXRlLgogICAgICBpZiAodGhpcy5fdXNlUHVzaFN0YXRlKSB7CiAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCB0aGlzLmNoZWNrVXJsLCBmYWxzZSk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdXNlSGFzaENoYW5nZSAmJiAhdGhpcy5pZnJhbWUpIHsKICAgICAgICBhZGRFdmVudExpc3RlbmVyKCdoYXNoY2hhbmdlJywgdGhpcy5jaGVja1VybCwgZmFsc2UpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuX3dhbnRzSGFzaENoYW5nZSkgewogICAgICAgIHRoaXMuX2NoZWNrVXJsSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCh0aGlzLmNoZWNrVXJsLCB0aGlzLmludGVydmFsKTsKICAgICAgfQoKICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc2lsZW50KSByZXR1cm4gdGhpcy5sb2FkVXJsKCk7CiAgICB9LAoKICAgIC8vIERpc2FibGUgQmFja2JvbmUuaGlzdG9yeSwgcGVyaGFwcyB0ZW1wb3JhcmlseS4gTm90IHVzZWZ1bCBpbiBhIHJlYWwgYXBwLAogICAgLy8gYnV0IHBvc3NpYmx5IHVzZWZ1bCBmb3IgdW5pdCB0ZXN0aW5nIFJvdXRlcnMuCiAgICBzdG9wOiBmdW5jdGlvbigpIHsKICAgICAgLy8gQWRkIGEgY3Jvc3MtcGxhdGZvcm0gYHJlbW92ZUV2ZW50TGlzdGVuZXJgIHNoaW0gZm9yIG9sZGVyIGJyb3dzZXJzLgogICAgICB2YXIgcmVtb3ZlRXZlbnRMaXN0ZW5lciA9IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyIHx8IGZ1bmN0aW9uKGV2ZW50TmFtZSwgbGlzdGVuZXIpIHsKICAgICAgICByZXR1cm4gZGV0YWNoRXZlbnQoJ29uJyArIGV2ZW50TmFtZSwgbGlzdGVuZXIpOwogICAgICB9OwoKICAgICAgLy8gUmVtb3ZlIHdpbmRvdyBsaXN0ZW5lcnMuCiAgICAgIGlmICh0aGlzLl91c2VQdXNoU3RhdGUpIHsKICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIHRoaXMuY2hlY2tVcmwsIGZhbHNlKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLl91c2VIYXNoQ2hhbmdlICYmICF0aGlzLmlmcmFtZSkgewogICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoJ2hhc2hjaGFuZ2UnLCB0aGlzLmNoZWNrVXJsLCBmYWxzZSk7CiAgICAgIH0KCiAgICAgIC8vIENsZWFuIHVwIHRoZSBpZnJhbWUgaWYgbmVjZXNzYXJ5LgogICAgICBpZiAodGhpcy5pZnJhbWUpIHsKICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuaWZyYW1lKTsKICAgICAgICB0aGlzLmlmcmFtZSA9IG51bGw7CiAgICAgIH0KCiAgICAgIC8vIFNvbWUgZW52aXJvbm1lbnRzIHdpbGwgdGhyb3cgd2hlbiBjbGVhcmluZyBhbiB1bmRlZmluZWQgaW50ZXJ2YWwuCiAgICAgIGlmICh0aGlzLl9jaGVja1VybEludGVydmFsKSBjbGVhckludGVydmFsKHRoaXMuX2NoZWNrVXJsSW50ZXJ2YWwpOwogICAgICBIaXN0b3J5LnN0YXJ0ZWQgPSBmYWxzZTsKICAgIH0sCgogICAgLy8gQWRkIGEgcm91dGUgdG8gYmUgdGVzdGVkIHdoZW4gdGhlIGZyYWdtZW50IGNoYW5nZXMuIFJvdXRlcyBhZGRlZCBsYXRlcgogICAgLy8gbWF5IG92ZXJyaWRlIHByZXZpb3VzIHJvdXRlcy4KICAgIHJvdXRlOiBmdW5jdGlvbihyb3V0ZSwgY2FsbGJhY2spIHsKICAgICAgdGhpcy5oYW5kbGVycy51bnNoaWZ0KHtyb3V0ZTogcm91dGUsIGNhbGxiYWNrOiBjYWxsYmFja30pOwogICAgfSwKCiAgICAvLyBDaGVja3MgdGhlIGN1cnJlbnQgVVJMIHRvIHNlZSBpZiBpdCBoYXMgY2hhbmdlZCwgYW5kIGlmIGl0IGhhcywKICAgIC8vIGNhbGxzIGBsb2FkVXJsYCwgbm9ybWFsaXppbmcgYWNyb3NzIHRoZSBoaWRkZW4gaWZyYW1lLgogICAgY2hlY2tVcmw6IGZ1bmN0aW9uKGUpIHsKICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmdldEZyYWdtZW50KCk7CgogICAgICAvLyBJZiB0aGUgdXNlciBwcmVzc2VkIHRoZSBiYWNrIGJ1dHRvbiwgdGhlIGlmcmFtZSdzIGhhc2ggd2lsbCBoYXZlCiAgICAgIC8vIGNoYW5nZWQgYW5kIHdlIHNob3VsZCB1c2UgdGhhdCBmb3IgY29tcGFyaXNvbi4KICAgICAgaWYgKGN1cnJlbnQgPT09IHRoaXMuZnJhZ21lbnQgJiYgdGhpcy5pZnJhbWUpIHsKICAgICAgICBjdXJyZW50ID0gdGhpcy5nZXRIYXNoKHRoaXMuaWZyYW1lLmNvbnRlbnRXaW5kb3cpOwogICAgICB9CgogICAgICBpZiAoY3VycmVudCA9PT0gdGhpcy5mcmFnbWVudCkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAodGhpcy5pZnJhbWUpIHRoaXMubmF2aWdhdGUoY3VycmVudCk7CiAgICAgIHRoaXMubG9hZFVybCgpOwogICAgfSwKCiAgICAvLyBBdHRlbXB0IHRvIGxvYWQgdGhlIGN1cnJlbnQgVVJMIGZyYWdtZW50LiBJZiBhIHJvdXRlIHN1Y2NlZWRzIHdpdGggYQogICAgLy8gbWF0Y2gsIHJldHVybnMgYHRydWVgLiBJZiBubyBkZWZpbmVkIHJvdXRlcyBtYXRjaGVzIHRoZSBmcmFnbWVudCwKICAgIC8vIHJldHVybnMgYGZhbHNlYC4KICAgIGxvYWRVcmw6IGZ1bmN0aW9uKGZyYWdtZW50KSB7CiAgICAgIC8vIElmIHRoZSByb290IGRvZXNuJ3QgbWF0Y2gsIG5vIHJvdXRlcyBjYW4gbWF0Y2ggZWl0aGVyLgogICAgICBpZiAoIXRoaXMubWF0Y2hSb290KCkpIHJldHVybiBmYWxzZTsKICAgICAgZnJhZ21lbnQgPSB0aGlzLmZyYWdtZW50ID0gdGhpcy5nZXRGcmFnbWVudChmcmFnbWVudCk7CiAgICAgIHJldHVybiBfLnNvbWUodGhpcy5oYW5kbGVycywgZnVuY3Rpb24oaGFuZGxlcikgewogICAgICAgIGlmIChoYW5kbGVyLnJvdXRlLnRlc3QoZnJhZ21lbnQpKSB7CiAgICAgICAgICBoYW5kbGVyLmNhbGxiYWNrKGZyYWdtZW50KTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAoKICAgIC8vIFNhdmUgYSBmcmFnbWVudCBpbnRvIHRoZSBoYXNoIGhpc3RvcnksIG9yIHJlcGxhY2UgdGhlIFVSTCBzdGF0ZSBpZiB0aGUKICAgIC8vICdyZXBsYWNlJyBvcHRpb24gaXMgcGFzc2VkLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBwcm9wZXJseSBVUkwtZW5jb2RpbmcKICAgIC8vIHRoZSBmcmFnbWVudCBpbiBhZHZhbmNlLgogICAgLy8KICAgIC8vIFRoZSBvcHRpb25zIG9iamVjdCBjYW4gY29udGFpbiBgdHJpZ2dlcjogdHJ1ZWAgaWYgeW91IHdpc2ggdG8gaGF2ZSB0aGUKICAgIC8vIHJvdXRlIGNhbGxiYWNrIGJlIGZpcmVkIChub3QgdXN1YWxseSBkZXNpcmFibGUpLCBvciBgcmVwbGFjZTogdHJ1ZWAsIGlmCiAgICAvLyB5b3Ugd2lzaCB0byBtb2RpZnkgdGhlIGN1cnJlbnQgVVJMIHdpdGhvdXQgYWRkaW5nIGFuIGVudHJ5IHRvIHRoZSBoaXN0b3J5LgogICAgbmF2aWdhdGU6IGZ1bmN0aW9uKGZyYWdtZW50LCBvcHRpb25zKSB7CiAgICAgIGlmICghSGlzdG9yeS5zdGFydGVkKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zID09PSB0cnVlKSBvcHRpb25zID0ge3RyaWdnZXI6ICEhb3B0aW9uc307CgogICAgICAvLyBOb3JtYWxpemUgdGhlIGZyYWdtZW50LgogICAgICBmcmFnbWVudCA9IHRoaXMuZ2V0RnJhZ21lbnQoZnJhZ21lbnQgfHwgJycpOwoKICAgICAgLy8gRG9uJ3QgaW5jbHVkZSBhIHRyYWlsaW5nIHNsYXNoIG9uIHRoZSByb290LgogICAgICB2YXIgcm9vdFBhdGggPSB0aGlzLnJvb3Q7CiAgICAgIGlmIChmcmFnbWVudCA9PT0gJycgfHwgZnJhZ21lbnQuY2hhckF0KDApID09PSAnPycpIHsKICAgICAgICByb290UGF0aCA9IHJvb3RQYXRoLnNsaWNlKDAsIC0xKSB8fCAnLyc7CiAgICAgIH0KICAgICAgdmFyIHVybCA9IHJvb3RQYXRoICsgZnJhZ21lbnQ7CgogICAgICAvLyBTdHJpcCB0aGUgZnJhZ21lbnQgb2YgdGhlIHF1ZXJ5IGFuZCBoYXNoIGZvciBtYXRjaGluZy4KICAgICAgZnJhZ21lbnQgPSBmcmFnbWVudC5yZXBsYWNlKHBhdGhTdHJpcHBlciwgJycpOwoKICAgICAgLy8gRGVjb2RlIGZvciBtYXRjaGluZy4KICAgICAgdmFyIGRlY29kZWRGcmFnbWVudCA9IHRoaXMuZGVjb2RlRnJhZ21lbnQoZnJhZ21lbnQpOwoKICAgICAgaWYgKHRoaXMuZnJhZ21lbnQgPT09IGRlY29kZWRGcmFnbWVudCkgcmV0dXJuOwogICAgICB0aGlzLmZyYWdtZW50ID0gZGVjb2RlZEZyYWdtZW50OwoKICAgICAgLy8gSWYgcHVzaFN0YXRlIGlzIGF2YWlsYWJsZSwgd2UgdXNlIGl0IHRvIHNldCB0aGUgZnJhZ21lbnQgYXMgYSByZWFsIFVSTC4KICAgICAgaWYgKHRoaXMuX3VzZVB1c2hTdGF0ZSkgewogICAgICAgIHRoaXMuaGlzdG9yeVtvcHRpb25zLnJlcGxhY2UgPyAncmVwbGFjZVN0YXRlJyA6ICdwdXNoU3RhdGUnXSh7fSwgZG9jdW1lbnQudGl0bGUsIHVybCk7CgogICAgICAvLyBJZiBoYXNoIGNoYW5nZXMgaGF2ZW4ndCBiZWVuIGV4cGxpY2l0bHkgZGlzYWJsZWQsIHVwZGF0ZSB0aGUgaGFzaAogICAgICAvLyBmcmFnbWVudCB0byBzdG9yZSBoaXN0b3J5LgogICAgICB9IGVsc2UgaWYgKHRoaXMuX3dhbnRzSGFzaENoYW5nZSkgewogICAgICAgIHRoaXMuX3VwZGF0ZUhhc2godGhpcy5sb2NhdGlvbiwgZnJhZ21lbnQsIG9wdGlvbnMucmVwbGFjZSk7CiAgICAgICAgaWYgKHRoaXMuaWZyYW1lICYmIGZyYWdtZW50ICE9PSB0aGlzLmdldEhhc2godGhpcy5pZnJhbWUuY29udGVudFdpbmRvdykpIHsKICAgICAgICAgIHZhciBpV2luZG93ID0gdGhpcy5pZnJhbWUuY29udGVudFdpbmRvdzsKCiAgICAgICAgICAvLyBPcGVuaW5nIGFuZCBjbG9zaW5nIHRoZSBpZnJhbWUgdHJpY2tzIElFNyBhbmQgZWFybGllciB0byBwdXNoIGEKICAgICAgICAgIC8vIGhpc3RvcnkgZW50cnkgb24gaGFzaC10YWcgY2hhbmdlLiAgV2hlbiByZXBsYWNlIGlzIHRydWUsIHdlIGRvbid0CiAgICAgICAgICAvLyB3YW50IHRoaXMuCiAgICAgICAgICBpZiAoIW9wdGlvbnMucmVwbGFjZSkgewogICAgICAgICAgICBpV2luZG93LmRvY3VtZW50Lm9wZW4oKTsKICAgICAgICAgICAgaVdpbmRvdy5kb2N1bWVudC5jbG9zZSgpOwogICAgICAgICAgfQoKICAgICAgICAgIHRoaXMuX3VwZGF0ZUhhc2goaVdpbmRvdy5sb2NhdGlvbiwgZnJhZ21lbnQsIG9wdGlvbnMucmVwbGFjZSk7CiAgICAgICAgfQoKICAgICAgLy8gSWYgeW91J3ZlIHRvbGQgdXMgdGhhdCB5b3UgZXhwbGljaXRseSBkb24ndCB3YW50IGZhbGxiYWNrIGhhc2hjaGFuZ2UtCiAgICAgIC8vIGJhc2VkIGhpc3RvcnksIHRoZW4gYG5hdmlnYXRlYCBiZWNvbWVzIGEgcGFnZSByZWZyZXNoLgogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB0aGlzLmxvY2F0aW9uLmFzc2lnbih1cmwpOwogICAgICB9CiAgICAgIGlmIChvcHRpb25zLnRyaWdnZXIpIHJldHVybiB0aGlzLmxvYWRVcmwoZnJhZ21lbnQpOwogICAgfSwKCiAgICAvLyBVcGRhdGUgdGhlIGhhc2ggbG9jYXRpb24sIGVpdGhlciByZXBsYWNpbmcgdGhlIGN1cnJlbnQgZW50cnksIG9yIGFkZGluZwogICAgLy8gYSBuZXcgb25lIHRvIHRoZSBicm93c2VyIGhpc3RvcnkuCiAgICBfdXBkYXRlSGFzaDogZnVuY3Rpb24obG9jYXRpb24sIGZyYWdtZW50LCByZXBsYWNlKSB7CiAgICAgIGlmIChyZXBsYWNlKSB7CiAgICAgICAgdmFyIGhyZWYgPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoLyhqYXZhc2NyaXB0OnwjKS4qJC8sICcnKTsKICAgICAgICBsb2NhdGlvbi5yZXBsYWNlKGhyZWYgKyAnIycgKyBmcmFnbWVudCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gU29tZSBicm93c2VycyByZXF1aXJlIHRoYXQgYGhhc2hgIGNvbnRhaW5zIGEgbGVhZGluZyAjLgogICAgICAgIGxvY2F0aW9uLmhhc2ggPSAnIycgKyBmcmFnbWVudDsKICAgICAgfQogICAgfQoKICB9KTsKCiAgLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IEJhY2tib25lLmhpc3RvcnkuCiAgQmFja2JvbmUuaGlzdG9yeSA9IG5ldyBIaXN0b3J5OwoKICAvLyBIZWxwZXJzCiAgLy8gLS0tLS0tLQoKICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29ycmVjdGx5IHNldCB1cCB0aGUgcHJvdG90eXBlIGNoYWluIGZvciBzdWJjbGFzc2VzLgogIC8vIFNpbWlsYXIgdG8gYGdvb2cuaW5oZXJpdHNgLCBidXQgdXNlcyBhIGhhc2ggb2YgcHJvdG90eXBlIHByb3BlcnRpZXMgYW5kCiAgLy8gY2xhc3MgcHJvcGVydGllcyB0byBiZSBleHRlbmRlZC4KICB2YXIgZXh0ZW5kID0gZnVuY3Rpb24ocHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsKICAgIHZhciBwYXJlbnQgPSB0aGlzOwogICAgdmFyIGNoaWxkOwoKICAgIC8vIFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgdGhlIG5ldyBzdWJjbGFzcyBpcyBlaXRoZXIgZGVmaW5lZCBieSB5b3UKICAgIC8vICh0aGUgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSBpbiB5b3VyIGBleHRlbmRgIGRlZmluaXRpb24pLCBvciBkZWZhdWx0ZWQKICAgIC8vIGJ5IHVzIHRvIHNpbXBseSBjYWxsIHRoZSBwYXJlbnQgY29uc3RydWN0b3IuCiAgICBpZiAocHJvdG9Qcm9wcyAmJiBfLmhhcyhwcm90b1Byb3BzLCAnY29uc3RydWN0b3InKSkgewogICAgICBjaGlsZCA9IHByb3RvUHJvcHMuY29uc3RydWN0b3I7CiAgICB9IGVsc2UgewogICAgICBjaGlsZCA9IGZ1bmN0aW9uKCl7IHJldHVybiBwYXJlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTsKICAgIH0KCiAgICAvLyBBZGQgc3RhdGljIHByb3BlcnRpZXMgdG8gdGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLCBpZiBzdXBwbGllZC4KICAgIF8uZXh0ZW5kKGNoaWxkLCBwYXJlbnQsIHN0YXRpY1Byb3BzKTsKCiAgICAvLyBTZXQgdGhlIHByb3RvdHlwZSBjaGFpbiB0byBpbmhlcml0IGZyb20gYHBhcmVudGAsIHdpdGhvdXQgY2FsbGluZwogICAgLy8gYHBhcmVudGAncyBjb25zdHJ1Y3RvciBmdW5jdGlvbiBhbmQgYWRkIHRoZSBwcm90b3R5cGUgcHJvcGVydGllcy4KICAgIGNoaWxkLnByb3RvdHlwZSA9IF8uY3JlYXRlKHBhcmVudC5wcm90b3R5cGUsIHByb3RvUHJvcHMpOwogICAgY2hpbGQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY2hpbGQ7CgogICAgLy8gU2V0IGEgY29udmVuaWVuY2UgcHJvcGVydHkgaW4gY2FzZSB0aGUgcGFyZW50J3MgcHJvdG90eXBlIGlzIG5lZWRlZAogICAgLy8gbGF0ZXIuCiAgICBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOwoKICAgIHJldHVybiBjaGlsZDsKICB9OwoKICAvLyBTZXQgdXAgaW5oZXJpdGFuY2UgZm9yIHRoZSBtb2RlbCwgY29sbGVjdGlvbiwgcm91dGVyLCB2aWV3IGFuZCBoaXN0b3J5LgogIE1vZGVsLmV4dGVuZCA9IENvbGxlY3Rpb24uZXh0ZW5kID0gUm91dGVyLmV4dGVuZCA9IFZpZXcuZXh0ZW5kID0gSGlzdG9yeS5leHRlbmQgPSBleHRlbmQ7CgogIC8vIFRocm93IGFuIGVycm9yIHdoZW4gYSBVUkwgaXMgbmVlZGVkLCBhbmQgbm9uZSBpcyBzdXBwbGllZC4KICB2YXIgdXJsRXJyb3IgPSBmdW5jdGlvbigpIHsKICAgIHRocm93IG5ldyBFcnJvcignQSAidXJsIiBwcm9wZXJ0eSBvciBmdW5jdGlvbiBtdXN0IGJlIHNwZWNpZmllZCcpOwogIH07CgogIC8vIFdyYXAgYW4gb3B0aW9uYWwgZXJyb3IgY2FsbGJhY2sgd2l0aCBhIGZhbGxiYWNrIGVycm9yIGV2ZW50LgogIHZhciB3cmFwRXJyb3IgPSBmdW5jdGlvbihtb2RlbCwgb3B0aW9ucykgewogICAgdmFyIGVycm9yID0gb3B0aW9ucy5lcnJvcjsKICAgIG9wdGlvbnMuZXJyb3IgPSBmdW5jdGlvbihyZXNwKSB7CiAgICAgIGlmIChlcnJvcikgZXJyb3IuY2FsbChvcHRpb25zLmNvbnRleHQsIG1vZGVsLCByZXNwLCBvcHRpb25zKTsKICAgICAgbW9kZWwudHJpZ2dlcignZXJyb3InLCBtb2RlbCwgcmVzcCwgb3B0aW9ucyk7CiAgICB9OwogIH07CgogIHJldHVybiBCYWNrYm9uZTsKfSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/js/dev/backbone.marionette.modals.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCkgewogIHZhciBfX2JpbmQgPSBmdW5jdGlvbihmbiwgbWUpeyByZXR1cm4gZnVuY3Rpb24oKXsgcmV0dXJuIGZuLmFwcGx5KG1lLCBhcmd1bWVudHMpOyB9OyB9LAogICAgX19oYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHksCiAgICBfX2V4dGVuZHMgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKF9faGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfTsKCiAgKGZ1bmN0aW9uKGZhY3RvcnkpIHsKICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQpIHsKICAgICAgcmV0dXJuIGRlZmluZShbInVuZGVyc2NvcmUiLCAiYmFja2JvbmUiLCAiYmFja2JvbmUubWFyaW9uZXR0ZSIsICJleHBvcnRzIl0sIGZhY3RvcnkpOwogICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gIm9iamVjdCIpIHsKICAgICAgcmV0dXJuIGZhY3RvcnkocmVxdWlyZSgidW5kZXJzY29yZSIpLCByZXF1aXJlKCJiYWNrYm9uZSIpLCByZXF1aXJlKCJiYWNrYm9uZS5tYXJpb25ldHRlIiksIGV4cG9ydHMpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZhY3RvcnkoXywgQmFja2JvbmUsIEJhY2tib25lLk1hcmlvbmV0dGUsIHt9KTsKICAgIH0KICB9KShmdW5jdGlvbihfLCBCYWNrYm9uZSwgTWFyaW9uZXR0ZSwgTW9kYWxzKSB7CiAgICBNb2RhbHMgPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhNb2RhbHMsIF9zdXBlcik7CgogICAgICBmdW5jdGlvbiBNb2RhbHMoKSB7CiAgICAgICAgdGhpcy5kZXN0cm95ID0gX19iaW5kKHRoaXMuZGVzdHJveSwgdGhpcyk7CiAgICAgICAgcmV0dXJuIE1vZGFscy5fX3N1cGVyX18uY29uc3RydWN0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgfQoKICAgICAgTW9kYWxzLnByb3RvdHlwZS5tb2RhbHMgPSBbXTsKCiAgICAgIE1vZGFscy5wcm90b3R5cGUuekluZGV4ID0gMDsKCiAgICAgIE1vZGFscy5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uKHZpZXcsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgbGFzdE1vZGFsLCBtb2RhbFZpZXcsIHNlY29uZExhc3RNb2RhbCwgX2ksIF9qLCBfbGVuLCBfbGVuMSwgX3JlZiwgX3JlZjE7CiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkgewogICAgICAgICAgb3B0aW9ucyA9IHt9OwogICAgICAgIH0KICAgICAgICB0aGlzLl9lbnN1cmVFbGVtZW50KCk7CiAgICAgICAgQmFja2JvbmUuJCgnYm9keScpLmNzcyh7CiAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicKICAgICAgICB9KTsKICAgICAgICBpZiAodGhpcy5tb2RhbHMubGVuZ3RoID4gMCkgewogICAgICAgICAgbGFzdE1vZGFsID0gXy5sYXN0KHRoaXMubW9kYWxzKTsKICAgICAgICAgIGxhc3RNb2RhbC5tb2RhbEVsLmFkZENsYXNzKCIiICsgbGFzdE1vZGFsLnByZWZpeCArICItdmlldy0tc3RhY2tlZCIpOwogICAgICAgICAgc2Vjb25kTGFzdE1vZGFsID0gdGhpcy5tb2RhbHNbdGhpcy5tb2RhbHMubGVuZ3RoIC0gMV07CiAgICAgICAgICBpZiAoc2Vjb25kTGFzdE1vZGFsICE9IG51bGwpIHsKICAgICAgICAgICAgc2Vjb25kTGFzdE1vZGFsLm1vZGFsRWwucmVtb3ZlQ2xhc3MoIiIgKyBzZWNvbmRMYXN0TW9kYWwucHJlZml4ICsgIi1tb2RhbC0tc3RhY2tlZC1yZXZlcnNlIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZpZXcucmVuZGVyKG9wdGlvbnMpOwogICAgICAgIHZpZXcucmVnaW9uRW5hYmxlZCA9IHRydWU7CiAgICAgICAgdGhpcy50cmlnZ2VyTWV0aG9kKCdiZWZvcmU6c3dhcCcsIHZpZXcpOwogICAgICAgIHRoaXMudHJpZ2dlck1ldGhvZCgnYmVmb3JlOnNob3cnLCB2aWV3KTsKICAgICAgICBNYXJpb25ldHRlLnRyaWdnZXJNZXRob2RPbih2aWV3LCAnYmVmb3JlOnNob3cnKTsKICAgICAgICB0aGlzLnRyaWdnZXJNZXRob2QoJ3N3YXBPdXQnLCB0aGlzLmN1cnJlbnRWaWV3KTsKICAgICAgICB0aGlzLiRlbC5hcHBlbmQodmlldy5lbCk7CiAgICAgICAgdGhpcy5jdXJyZW50VmlldyA9IHZpZXc7CiAgICAgICAgdGhpcy50cmlnZ2VyTWV0aG9kKCdzd2FwJywgdmlldyk7CiAgICAgICAgX3JlZiA9IHRoaXMubW9kYWxzOwogICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgewogICAgICAgICAgbW9kYWxWaWV3ID0gX3JlZltfaV07CiAgICAgICAgICBtb2RhbFZpZXcudW5kZWxlZ2F0ZU1vZGFsRXZlbnRzKCk7CiAgICAgICAgfQogICAgICAgIF9yZWYxID0gdGhpcy5tb2RhbHM7CiAgICAgICAgZm9yIChfaiA9IDAsIF9sZW4xID0gX3JlZjEubGVuZ3RoOyBfaiA8IF9sZW4xOyBfaisrKSB7CiAgICAgICAgICBtb2RhbFZpZXcgPSBfcmVmMVtfal07CiAgICAgICAgICBtb2RhbFZpZXcuJGVsLmNzcyh7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICdub25lJwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHZpZXcub24oJ21vZGFsOmRlc3Ryb3knLCB0aGlzLmRlc3Ryb3kpOwogICAgICAgIHRoaXMubW9kYWxzLnB1c2godmlldyk7CiAgICAgICAgcmV0dXJuIHRoaXMuekluZGV4Kys7CiAgICAgIH07CgogICAgICBNb2RhbHMucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgbGFzdE1vZGFsLCB2aWV3OwogICAgICAgIHZpZXcgPSB0aGlzLmN1cnJlbnRWaWV3OwogICAgICAgIGlmICghdmlldykgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAodmlldy5kZXN0cm95ICYmICF2aWV3LmlzRGVzdHJveWVkKSB7CiAgICAgICAgICB2aWV3LmRlc3Ryb3koKTsKICAgICAgICB9IGVsc2UgaWYgKHZpZXcucmVtb3ZlKSB7CiAgICAgICAgICB2aWV3LnJlbW92ZSgpOwogICAgICAgIH0KICAgICAgICB2aWV3Lm9mZignbW9kYWw6ZGVzdHJveScsIHRoaXMuZGVzdHJveSk7CiAgICAgICAgdGhpcy5tb2RhbHMuc3BsaWNlKF8uaW5kZXhPZih0aGlzLm1vZGFscywgdmlldyksIDEpOwogICAgICAgIHRoaXMuekluZGV4LS07CiAgICAgICAgdGhpcy5jdXJyZW50VmlldyA9IHRoaXMubW9kYWxzW3RoaXMuekluZGV4IC0gMV07CiAgICAgICAgbGFzdE1vZGFsID0gXy5sYXN0KHRoaXMubW9kYWxzKTsKICAgICAgICBpZiAobGFzdE1vZGFsKSB7CiAgICAgICAgICBsYXN0TW9kYWwuJGVsLnJlbW92ZUF0dHIoJ3N0eWxlJyk7CiAgICAgICAgICBsYXN0TW9kYWwubW9kYWxFbC5hZGRDbGFzcygiIiArIGxhc3RNb2RhbC5wcmVmaXggKyAiLW1vZGFsLS1zdGFja2VkLXJldmVyc2UiKTsKICAgICAgICAgIF8uZGVsYXkoKGZ1bmN0aW9uKF90aGlzKSB7CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICByZXR1cm4gbGFzdE1vZGFsLm1vZGFsRWwucmVtb3ZlQ2xhc3MoIiIgKyBsYXN0TW9kYWwucHJlZml4ICsgIi1tb2RhbC0tc3RhY2tlZCIpOwogICAgICAgICAgICB9OwogICAgICAgICAgfSkodGhpcyksIDMwMCk7CiAgICAgICAgICBpZiAodGhpcy56SW5kZXggIT09IDApIHsKICAgICAgICAgICAgbGFzdE1vZGFsLmRlbGVnYXRlTW9kYWxFdmVudHMoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuekluZGV4ID09PSAwKSB7CiAgICAgICAgICBCYWNrYm9uZS4kKCdib2R5JykuY3NzKHsKICAgICAgICAgICAgb3ZlcmZsb3c6ICd2aXNpYmxlJwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLnRyaWdnZXJNZXRob2QoJ21vZGFsOmRlc3Ryb3knLCB2aWV3KTsKICAgICAgfTsKCiAgICAgIE1vZGFscy5wcm90b3R5cGUuZGVzdHJveUFsbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciB2aWV3LCBfaSwgX2xlbiwgX3JlZiwgX3Jlc3VsdHM7CiAgICAgICAgX3JlZiA9IHRoaXMubW9kYWxzOwogICAgICAgIF9yZXN1bHRzID0gW107CiAgICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CiAgICAgICAgICB2aWV3ID0gX3JlZltfaV07CiAgICAgICAgICBfcmVzdWx0cy5wdXNoKHRoaXMuZGVzdHJveSgpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9yZXN1bHRzOwogICAgICB9OwoKICAgICAgcmV0dXJuIE1vZGFsczsKCiAgICB9KShNYXJpb25ldHRlLlJlZ2lvbik7CiAgICBNYXJpb25ldHRlLk1vZGFscyA9IE1vZGFsczsKICAgIHJldHVybiBNYXJpb25ldHRlLk1vZGFsczsKICB9KTsKCn0pLmNhbGwodGhpcyk7Cg==]]></data>
	</file>
	<file>
	  <filename>/js/dev/backbone.modal-bundled.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCkgewogIHZhciBfX2JpbmQgPSBmdW5jdGlvbihmbiwgbWUpeyByZXR1cm4gZnVuY3Rpb24oKXsgcmV0dXJuIGZuLmFwcGx5KG1lLCBhcmd1bWVudHMpOyB9OyB9LAogICAgX19oYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHksCiAgICBfX2V4dGVuZHMgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKF9faGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSwKICAgIF9faW5kZXhPZiA9IFtdLmluZGV4T2YgfHwgZnVuY3Rpb24oaXRlbSkgeyBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7IGlmIChpIGluIHRoaXMgJiYgdGhpc1tpXSA9PT0gaXRlbSkgcmV0dXJuIGk7IH0gcmV0dXJuIC0xOyB9OwoKICAoZnVuY3Rpb24oZmFjdG9yeSkgewogICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgewogICAgICByZXR1cm4gZGVmaW5lKFsidW5kZXJzY29yZSIsICJiYWNrYm9uZSIsICJleHBvcnRzIl0sIGZhY3RvcnkpOwogICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gIm9iamVjdCIpIHsKICAgICAgcmV0dXJuIGZhY3RvcnkocmVxdWlyZSgidW5kZXJzY29yZSIpLCByZXF1aXJlKCJiYWNrYm9uZSIpLCBleHBvcnRzKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWN0b3J5KF8sIEJhY2tib25lLCB7fSk7CiAgICB9CiAgfSkoZnVuY3Rpb24oXywgQmFja2JvbmUsIE1vZGFsKSB7CiAgICBNb2RhbCA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKE1vZGFsLCBfc3VwZXIpOwoKICAgICAgTW9kYWwucHJvdG90eXBlLnByZWZpeCA9ICdiYm0nOwoKICAgICAgTW9kYWwucHJvdG90eXBlLmFuaW1hdGUgPSB0cnVlOwoKICAgICAgTW9kYWwucHJvdG90eXBlLmtleUNvbnRyb2wgPSB0cnVlOwoKICAgICAgTW9kYWwucHJvdG90eXBlLnNob3dWaWV3T25SZW5kZXIgPSB0cnVlOwoKICAgICAgZnVuY3Rpb24gTW9kYWwoKSB7CiAgICAgICAgdGhpcy50cmlnZ2VyQ2FuY2VsID0gX19iaW5kKHRoaXMudHJpZ2dlckNhbmNlbCwgdGhpcyk7CiAgICAgICAgdGhpcy50cmlnZ2VyU3VibWl0ID0gX19iaW5kKHRoaXMudHJpZ2dlclN1Ym1pdCwgdGhpcyk7CiAgICAgICAgdGhpcy50cmlnZ2VyVmlldyA9IF9fYmluZCh0aGlzLnRyaWdnZXJWaWV3LCB0aGlzKTsKICAgICAgICB0aGlzLmNsaWNrT3V0c2lkZUVsZW1lbnQgPSBfX2JpbmQodGhpcy5jbGlja091dHNpZGVFbGVtZW50LCB0aGlzKTsKICAgICAgICB0aGlzLmNsaWNrT3V0c2lkZSA9IF9fYmluZCh0aGlzLmNsaWNrT3V0c2lkZSwgdGhpcyk7CiAgICAgICAgdGhpcy5jaGVja0tleSA9IF9fYmluZCh0aGlzLmNoZWNrS2V5LCB0aGlzKTsKICAgICAgICB0aGlzLnJlbmRlcmVyQ29tcGxldGVkID0gX19iaW5kKHRoaXMucmVuZGVyZXJDb21wbGV0ZWQsIHRoaXMpOwogICAgICAgIHRoaXMuYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpOwogICAgICAgIEJhY2tib25lLlZpZXcucHJvdG90eXBlLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsIHRoaXMuYXJncyk7CiAgICAgICAgdGhpcy5zZXRVSUVsZW1lbnRzKCk7CiAgICAgIH0KCiAgICAgIE1vZGFsLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgdmFyIGRhdGEsIF9yZWY7CiAgICAgICAgZGF0YSA9IHRoaXMuc2VyaWFsaXplRGF0YSgpOwogICAgICAgIGlmICghb3B0aW9ucyB8fCBfLmlzRW1wdHkob3B0aW9ucykpIHsKICAgICAgICAgIG9wdGlvbnMgPSAwOwogICAgICAgIH0KICAgICAgICB0aGlzLiRlbC5hZGRDbGFzcygiIiArIHRoaXMucHJlZml4ICsgIi13cmFwcGVyIik7CiAgICAgICAgdGhpcy5tb2RhbEVsID0gQmFja2JvbmUuJCgnPGRpdiAvPicpLmFkZENsYXNzKCIiICsgdGhpcy5wcmVmaXggKyAiLW1vZGFsIik7CiAgICAgICAgaWYgKHRoaXMudGVtcGxhdGUpIHsKICAgICAgICAgIHRoaXMubW9kYWxFbC5odG1sKHRoaXMuYnVpbGRUZW1wbGF0ZSh0aGlzLnRlbXBsYXRlLCBkYXRhKSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuJGVsLmh0bWwodGhpcy5tb2RhbEVsKTsKICAgICAgICBpZiAodGhpcy52aWV3Q29udGFpbmVyKSB7CiAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJFbCA9IHRoaXMubW9kYWxFbC5maW5kKHRoaXMudmlld0NvbnRhaW5lcik7CiAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJFbC5hZGRDbGFzcygiIiArIHRoaXMucHJlZml4ICsgIi1tb2RhbF9fdmlld3MiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyRWwgPSB0aGlzLm1vZGFsRWw7CiAgICAgICAgfQogICAgICAgIEJhY2tib25lLiQoJzpmb2N1cycpLmJsdXIoKTsKICAgICAgICBpZiAoKChfcmVmID0gdGhpcy52aWV3cykgIT0gbnVsbCA/IF9yZWYubGVuZ3RoIDogdm9pZCAwKSA+IDAgJiYgdGhpcy5zaG93Vmlld09uUmVuZGVyKSB7CiAgICAgICAgICB0aGlzLm9wZW5BdChvcHRpb25zKTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uUmVuZGVyID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICB0aGlzLm9uUmVuZGVyKCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuZGVsZWdhdGVNb2RhbEV2ZW50cygpOwogICAgICAgIGlmICh0aGlzLiRlbC5mYWRlSW4gJiYgdGhpcy5hbmltYXRlKSB7CiAgICAgICAgICB0aGlzLm1vZGFsRWwuY3NzKHsKICAgICAgICAgICAgb3BhY2l0eTogMAogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLiRlbC5mYWRlSW4oewogICAgICAgICAgICBkdXJhdGlvbjogMTAwLAogICAgICAgICAgICBjb21wbGV0ZTogdGhpcy5yZW5kZXJlckNvbXBsZXRlZAogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMucmVuZGVyZXJDb21wbGV0ZWQoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CgogICAgICBNb2RhbC5wcm90b3R5cGUucmVuZGVyZXJDb21wbGV0ZWQgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX3JlZjsKICAgICAgICBpZiAodGhpcy5rZXlDb250cm9sKSB7CiAgICAgICAgICBCYWNrYm9uZS4kKCdib2R5Jykub24oJ2tleXVwLmJibScsIHRoaXMuY2hlY2tLZXkpOwogICAgICAgICAgdGhpcy4kZWwub24oJ21vdXNldXAuYmJtJywgdGhpcy5jbGlja091dHNpZGVFbGVtZW50KTsKICAgICAgICAgIHRoaXMuJGVsLm9uKCdjbGljay5iYm0nLCB0aGlzLmNsaWNrT3V0c2lkZSk7CiAgICAgICAgfQogICAgICAgIHRoaXMubW9kYWxFbC5jc3MoewogICAgICAgICAgb3BhY2l0eTogMQogICAgICAgIH0pLmFkZENsYXNzKCIiICsgdGhpcy5wcmVmaXggKyAiLW1vZGFsLS1vcGVuIik7CiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uU2hvdyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhpcy5vblNob3coKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIChfcmVmID0gdGhpcy5jdXJyZW50VmlldykgIT0gbnVsbCA/IHR5cGVvZiBfcmVmLm9uU2hvdyA9PT0gImZ1bmN0aW9uIiA/IF9yZWYub25TaG93KCkgOiB2b2lkIDAgOiB2b2lkIDA7CiAgICAgIH07CgogICAgICBNb2RhbC5wcm90b3R5cGUuc2V0VUlFbGVtZW50cyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBfcmVmOwogICAgICAgIHRoaXMudGVtcGxhdGUgPSB0aGlzLmdldE9wdGlvbigndGVtcGxhdGUnKTsKICAgICAgICB0aGlzLnZpZXdzID0gdGhpcy5nZXRPcHRpb24oJ3ZpZXdzJyk7CiAgICAgICAgaWYgKChfcmVmID0gdGhpcy52aWV3cykgIT0gbnVsbCkgewogICAgICAgICAgX3JlZi5sZW5ndGggPSBfLnNpemUodGhpcy52aWV3cyk7CiAgICAgICAgfQogICAgICAgIHRoaXMudmlld0NvbnRhaW5lciA9IHRoaXMuZ2V0T3B0aW9uKCd2aWV3Q29udGFpbmVyJyk7CiAgICAgICAgdGhpcy5hbmltYXRlID0gdGhpcy5nZXRPcHRpb24oJ2FuaW1hdGUnKTsKICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZCh0aGlzLnRlbXBsYXRlKSAmJiBfLmlzVW5kZWZpbmVkKHRoaXMudmlld3MpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHRlbXBsYXRlIG9yIHZpZXdzIGRlZmluZWQgZm9yIEJhY2tib25lLk1vZGFsJyk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnRlbXBsYXRlICYmIHRoaXMudmlld3MgJiYgXy5pc1VuZGVmaW5lZCh0aGlzLnZpZXdDb250YWluZXIpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZpZXdDb250YWluZXIgZGVmaW5lZCBmb3IgQmFja2JvbmUuTW9kYWwnKTsKICAgICAgICB9CiAgICAgIH07CgogICAgICBNb2RhbC5wcm90b3R5cGUuZ2V0T3B0aW9uID0gZnVuY3Rpb24ob3B0aW9uKSB7CiAgICAgICAgaWYgKCFvcHRpb24pIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiBfX2luZGV4T2YuY2FsbCh0aGlzLm9wdGlvbnMsIG9wdGlvbikgPj0gMCAmJiAodGhpcy5vcHRpb25zW29wdGlvbl0gIT0gbnVsbCkpIHsKICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNbb3B0aW9uXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHRoaXNbb3B0aW9uXTsKICAgICAgICB9CiAgICAgIH07CgogICAgICBNb2RhbC5wcm90b3R5cGUuc2VyaWFsaXplRGF0YSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBkYXRhOwogICAgICAgIGRhdGEgPSB7fTsKICAgICAgICBpZiAodGhpcy5tb2RlbCkgewogICAgICAgICAgZGF0YSA9IF8uZXh0ZW5kKGRhdGEsIHRoaXMubW9kZWwudG9KU09OKCkpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5jb2xsZWN0aW9uKSB7CiAgICAgICAgICBkYXRhID0gXy5leHRlbmQoZGF0YSwgewogICAgICAgICAgICBpdGVtczogdGhpcy5jb2xsZWN0aW9uLnRvSlNPTigpCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRhdGE7CiAgICAgIH07CgogICAgICBNb2RhbC5wcm90b3R5cGUuZGVsZWdhdGVNb2RhbEV2ZW50cyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBjYW5jZWxFbCwga2V5LCBtYXRjaCwgc2VsZWN0b3IsIHN1Ym1pdEVsLCB0cmlnZ2VyLCBfcmVzdWx0czsKICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7CiAgICAgICAgY2FuY2VsRWwgPSB0aGlzLmdldE9wdGlvbignY2FuY2VsRWwnKTsKICAgICAgICBzdWJtaXRFbCA9IHRoaXMuZ2V0T3B0aW9uKCdzdWJtaXRFbCcpOwogICAgICAgIGlmIChzdWJtaXRFbCkgewogICAgICAgICAgdGhpcy4kZWwub24oJ2NsaWNrJywgc3VibWl0RWwsIHRoaXMudHJpZ2dlclN1Ym1pdCk7CiAgICAgICAgfQogICAgICAgIGlmIChjYW5jZWxFbCkgewogICAgICAgICAgdGhpcy4kZWwub24oJ2NsaWNrJywgY2FuY2VsRWwsIHRoaXMudHJpZ2dlckNhbmNlbCk7CiAgICAgICAgfQogICAgICAgIF9yZXN1bHRzID0gW107CiAgICAgICAgZm9yIChrZXkgaW4gdGhpcy52aWV3cykgewogICAgICAgICAgaWYgKF8uaXNTdHJpbmcoa2V5KSAmJiBrZXkgIT09ICdsZW5ndGgnKSB7CiAgICAgICAgICAgIG1hdGNoID0ga2V5Lm1hdGNoKC9eKFxTKylccyooLiopJC8pOwogICAgICAgICAgICB0cmlnZ2VyID0gbWF0Y2hbMV07CiAgICAgICAgICAgIHNlbGVjdG9yID0gbWF0Y2hbMl07CiAgICAgICAgICAgIF9yZXN1bHRzLnB1c2godGhpcy4kZWwub24odHJpZ2dlciwgc2VsZWN0b3IsIHRoaXMudmlld3Nba2V5XSwgdGhpcy50cmlnZ2VyVmlldykpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX3Jlc3VsdHMucHVzaCh2b2lkIDApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gX3Jlc3VsdHM7CiAgICAgIH07CgogICAgICBNb2RhbC5wcm90b3R5cGUudW5kZWxlZ2F0ZU1vZGFsRXZlbnRzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGNhbmNlbEVsLCBrZXksIG1hdGNoLCBzZWxlY3Rvciwgc3VibWl0RWwsIHRyaWdnZXIsIF9yZXN1bHRzOwogICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7CiAgICAgICAgY2FuY2VsRWwgPSB0aGlzLmdldE9wdGlvbignY2FuY2VsRWwnKTsKICAgICAgICBzdWJtaXRFbCA9IHRoaXMuZ2V0T3B0aW9uKCdzdWJtaXRFbCcpOwogICAgICAgIGlmIChzdWJtaXRFbCkgewogICAgICAgICAgdGhpcy4kZWwub2ZmKCdjbGljaycsIHN1Ym1pdEVsLCB0aGlzLnRyaWdnZXJTdWJtaXQpOwogICAgICAgIH0KICAgICAgICBpZiAoY2FuY2VsRWwpIHsKICAgICAgICAgIHRoaXMuJGVsLm9mZignY2xpY2snLCBjYW5jZWxFbCwgdGhpcy50cmlnZ2VyQ2FuY2VsKTsKICAgICAgICB9CiAgICAgICAgX3Jlc3VsdHMgPSBbXTsKICAgICAgICBmb3IgKGtleSBpbiB0aGlzLnZpZXdzKSB7CiAgICAgICAgICBpZiAoXy5pc1N0cmluZyhrZXkpICYmIGtleSAhPT0gJ2xlbmd0aCcpIHsKICAgICAgICAgICAgbWF0Y2ggPSBrZXkubWF0Y2goL14oXFMrKVxzKiguKikkLyk7CiAgICAgICAgICAgIHRyaWdnZXIgPSBtYXRjaFsxXTsKICAgICAgICAgICAgc2VsZWN0b3IgPSBtYXRjaFsyXTsKICAgICAgICAgICAgX3Jlc3VsdHMucHVzaCh0aGlzLiRlbC5vZmYodHJpZ2dlciwgc2VsZWN0b3IsIHRoaXMudmlld3Nba2V5XSwgdGhpcy50cmlnZ2VyVmlldykpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX3Jlc3VsdHMucHVzaCh2b2lkIDApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gX3Jlc3VsdHM7CiAgICAgIH07CgogICAgICBNb2RhbC5wcm90b3R5cGUuY2hlY2tLZXkgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7CiAgICAgICAgICBzd2l0Y2ggKGUua2V5Q29kZSkgewogICAgICAgICAgICBjYXNlIDI3OgogICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyaWdnZXJDYW5jZWwoZSk7CiAgICAgICAgICAgIGNhc2UgMTM6CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJpZ2dlclN1Ym1pdChlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CgogICAgICBNb2RhbC5wcm90b3R5cGUuY2xpY2tPdXRzaWRlID0gZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBfcmVmOwogICAgICAgIGlmICgoKF9yZWYgPSB0aGlzLm91dHNpZGVFbGVtZW50KSAhPSBudWxsID8gX3JlZi5oYXNDbGFzcygiIiArIHRoaXMucHJlZml4ICsgIi13cmFwcGVyIikgOiB2b2lkIDApICYmIHRoaXMuYWN0aXZlKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy50cmlnZ2VyQ2FuY2VsKCk7CiAgICAgICAgfQogICAgICB9OwoKICAgICAgTW9kYWwucHJvdG90eXBlLmNsaWNrT3V0c2lkZUVsZW1lbnQgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMub3V0c2lkZUVsZW1lbnQgPSBCYWNrYm9uZS4kKGUudGFyZ2V0KTsKICAgICAgfTsKCiAgICAgIE1vZGFsLnByb3RvdHlwZS5idWlsZFRlbXBsYXRlID0gZnVuY3Rpb24odGVtcGxhdGUsIGRhdGEpIHsKICAgICAgICB2YXIgdGVtcGxhdGVGdW5jdGlvbjsKICAgICAgICBpZiAodHlwZW9mIHRlbXBsYXRlID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICB0ZW1wbGF0ZUZ1bmN0aW9uID0gdGVtcGxhdGU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRlbXBsYXRlRnVuY3Rpb24gPSBfLnRlbXBsYXRlKEJhY2tib25lLiQodGVtcGxhdGUpLmh0bWwoKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0ZW1wbGF0ZUZ1bmN0aW9uKGRhdGEpOwogICAgICB9OwoKICAgICAgTW9kYWwucHJvdG90eXBlLmJ1aWxkVmlldyA9IGZ1bmN0aW9uKHZpZXdUeXBlLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIHZpZXc7CiAgICAgICAgaWYgKCF2aWV3VHlwZSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAob3B0aW9ucyAmJiBfLmlzRnVuY3Rpb24ob3B0aW9ucykpIHsKICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zKCk7CiAgICAgICAgfQogICAgICAgIGlmIChfLmlzRnVuY3Rpb24odmlld1R5cGUpKSB7CiAgICAgICAgICB2aWV3ID0gbmV3IHZpZXdUeXBlKG9wdGlvbnMgfHwgdGhpcy5hcmdzWzBdKTsKICAgICAgICAgIGlmICh2aWV3IGluc3RhbmNlb2YgQmFja2JvbmUuVmlldykgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIGVsOiB2aWV3LnJlbmRlcigpLiRlbCwKICAgICAgICAgICAgICB2aWV3OiB2aWV3CiAgICAgICAgICAgIH07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIGVsOiB2aWV3VHlwZShvcHRpb25zIHx8IHRoaXMuYXJnc1swXSkKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHZpZXc6IHZpZXdUeXBlLAogICAgICAgICAgZWw6IHZpZXdUeXBlLiRlbAogICAgICAgIH07CiAgICAgIH07CgogICAgICBNb2RhbC5wcm90b3R5cGUudHJpZ2dlclZpZXcgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgdmFyIGluZGV4LCBpbnN0YW5jZSwga2V5LCBvcHRpb25zLCBfYmFzZSwgX2Jhc2UxLCBfcmVmOwogICAgICAgIGlmIChlICE9IG51bGwpIHsKICAgICAgICAgIGlmICh0eXBlb2YgZS5wcmV2ZW50RGVmYXVsdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG9wdGlvbnMgPSBlLmRhdGE7CiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmJ1aWxkVmlldyhvcHRpb25zLnZpZXcsIG9wdGlvbnMudmlld09wdGlvbnMpOwogICAgICAgIGlmICh0aGlzLmN1cnJlbnRWaWV3KSB7CiAgICAgICAgICB0aGlzLnByZXZpb3VzVmlldyA9IHRoaXMuY3VycmVudFZpZXc7CiAgICAgICAgICBpZiAoISgoX3JlZiA9IG9wdGlvbnMub3Blbk9wdGlvbnMpICE9IG51bGwgPyBfcmVmLnNraXBTdWJtaXQgOiB2b2lkIDApKSB7CiAgICAgICAgICAgIGlmICgodHlwZW9mIChfYmFzZSA9IHRoaXMucHJldmlvdXNWaWV3KS5iZWZvcmVTdWJtaXQgPT09ICJmdW5jdGlvbiIgPyBfYmFzZS5iZWZvcmVTdWJtaXQoZSkgOiB2b2lkIDApID09PSBmYWxzZSkgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodHlwZW9mIChfYmFzZTEgPSB0aGlzLnByZXZpb3VzVmlldykuc3VibWl0ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgX2Jhc2UxLnN1Ym1pdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuY3VycmVudFZpZXcgPSBpbnN0YW5jZS52aWV3IHx8IGluc3RhbmNlLmVsOwogICAgICAgIGluZGV4ID0gMDsKICAgICAgICBmb3IgKGtleSBpbiB0aGlzLnZpZXdzKSB7CiAgICAgICAgICBpZiAob3B0aW9ucy52aWV3ID09PSB0aGlzLnZpZXdzW2tleV0udmlldykgewogICAgICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IGluZGV4OwogICAgICAgICAgfQogICAgICAgICAgaW5kZXgrKzsKICAgICAgICB9CiAgICAgICAgaWYgKG9wdGlvbnMub25BY3RpdmUpIHsKICAgICAgICAgIGlmIChfLmlzRnVuY3Rpb24ob3B0aW9ucy5vbkFjdGl2ZSkpIHsKICAgICAgICAgICAgb3B0aW9ucy5vbkFjdGl2ZSh0aGlzKTsKICAgICAgICAgIH0gZWxzZSBpZiAoXy5pc1N0cmluZyhvcHRpb25zLm9uQWN0aXZlKSkgewogICAgICAgICAgICB0aGlzW29wdGlvbnMub25BY3RpdmVdLmNhbGwodGhpcywgb3B0aW9ucyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnNob3VsZEFuaW1hdGUpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmFuaW1hdGVUb1ZpZXcoaW5zdGFuY2UuZWwpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnNob3VsZEFuaW1hdGUgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIHRoaXMuJCh0aGlzLnZpZXdDb250YWluZXJFbCkuaHRtbChpbnN0YW5jZS5lbCk7CiAgICAgICAgfQogICAgICB9OwoKICAgICAgTW9kYWwucHJvdG90eXBlLmFuaW1hdGVUb1ZpZXcgPSBmdW5jdGlvbih2aWV3KSB7CiAgICAgICAgdmFyIGNvbnRhaW5lciwgbmV3SGVpZ2h0LCBwcmV2aW91c0hlaWdodCwgc3R5bGUsIHRlc3RlciwgX2Jhc2UsIF9yZWY7CiAgICAgICAgc3R5bGUgPSB7CiAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJywKICAgICAgICAgIHRvcDogLTk5OTksCiAgICAgICAgICBsZWZ0OiAtOTk5OQogICAgICAgIH07CiAgICAgICAgdGVzdGVyID0gQmFja2JvbmUuJCgnPHRlc3Rlci8+JykuY3NzKHN0eWxlKTsKICAgICAgICB0ZXN0ZXIuaHRtbCh0aGlzLiRlbC5jbG9uZSgpLmNzcyhzdHlsZSkpOwogICAgICAgIGlmIChCYWNrYm9uZS4kKCd0ZXN0ZXInKS5sZW5ndGggIT09IDApIHsKICAgICAgICAgIEJhY2tib25lLiQoJ3Rlc3RlcicpLnJlcGxhY2VXaXRoKHRlc3Rlcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIEJhY2tib25lLiQoJ2JvZHknKS5hcHBlbmQodGVzdGVyKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMudmlld0NvbnRhaW5lcikgewogICAgICAgICAgY29udGFpbmVyID0gdGVzdGVyLmZpbmQodGhpcy52aWV3Q29udGFpbmVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29udGFpbmVyID0gdGVzdGVyLmZpbmQoIi4iICsgdGhpcy5wcmVmaXggKyAiLW1vZGFsIik7CiAgICAgICAgfQogICAgICAgIGNvbnRhaW5lci5yZW1vdmVBdHRyKCdzdHlsZScpOwogICAgICAgIHByZXZpb3VzSGVpZ2h0ID0gY29udGFpbmVyLm91dGVySGVpZ2h0KCk7CiAgICAgICAgY29udGFpbmVyLmh0bWwodmlldyk7CiAgICAgICAgbmV3SGVpZ2h0ID0gY29udGFpbmVyLm91dGVySGVpZ2h0KCk7CiAgICAgICAgaWYgKHByZXZpb3VzSGVpZ2h0ID09PSBuZXdIZWlnaHQpIHsKICAgICAgICAgIHRoaXMuJCh0aGlzLnZpZXdDb250YWluZXJFbCkuaHRtbCh2aWV3KTsKICAgICAgICAgIGlmICh0eXBlb2YgKF9iYXNlID0gdGhpcy5jdXJyZW50Vmlldykub25TaG93ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIF9iYXNlLm9uU2hvdygpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIChfcmVmID0gdGhpcy5wcmV2aW91c1ZpZXcpICE9IG51bGwgPyB0eXBlb2YgX3JlZi5kZXN0cm95ID09PSAiZnVuY3Rpb24iID8gX3JlZi5kZXN0cm95KCkgOiB2b2lkIDAgOiB2b2lkIDA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICh0aGlzLmFuaW1hdGUpIHsKICAgICAgICAgICAgdGhpcy4kKHRoaXMudmlld0NvbnRhaW5lckVsKS5jc3MoewogICAgICAgICAgICAgIG9wYWNpdHk6IDAKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiB0aGlzLiQodGhpcy52aWV3Q29udGFpbmVyRWwpLmFuaW1hdGUoewogICAgICAgICAgICAgIGhlaWdodDogbmV3SGVpZ2h0CiAgICAgICAgICAgIH0sIDEwMCwgKGZ1bmN0aW9uKF90aGlzKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIF9iYXNlMSwgX3JlZjE7CiAgICAgICAgICAgICAgICBfdGhpcy4kKF90aGlzLnZpZXdDb250YWluZXJFbCkuY3NzKHsKICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMQogICAgICAgICAgICAgICAgfSkucmVtb3ZlQXR0cignc3R5bGUnKTsKICAgICAgICAgICAgICAgIF90aGlzLiQoX3RoaXMudmlld0NvbnRhaW5lckVsKS5odG1sKHZpZXcpOwogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoX2Jhc2UxID0gX3RoaXMuY3VycmVudFZpZXcpLm9uU2hvdyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICAgICAgICBfYmFzZTEub25TaG93KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gKF9yZWYxID0gX3RoaXMucHJldmlvdXNWaWV3KSAhPSBudWxsID8gdHlwZW9mIF9yZWYxLmRlc3Ryb3kgPT09ICJmdW5jdGlvbiIgPyBfcmVmMS5kZXN0cm95KCkgOiB2b2lkIDAgOiB2b2lkIDA7CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSkodGhpcykpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuJCh0aGlzLnZpZXdDb250YWluZXJFbCkuY3NzKHsKICAgICAgICAgICAgICBoZWlnaHQ6IG5ld0hlaWdodAogICAgICAgICAgICB9KS5odG1sKHZpZXcpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKCiAgICAgIE1vZGFsLnByb3RvdHlwZS50cmlnZ2VyU3VibWl0ID0gZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBfcmVmLCBfcmVmMTsKICAgICAgICBpZiAoZSAhPSBudWxsKSB7CiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgfQogICAgICAgIGlmIChCYWNrYm9uZS4kKGUudGFyZ2V0KS5pcygndGV4dGFyZWEnKSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5iZWZvcmVTdWJtaXQpIHsKICAgICAgICAgIGlmICh0aGlzLmJlZm9yZVN1Ym1pdChlKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5jdXJyZW50VmlldyAmJiB0aGlzLmN1cnJlbnRWaWV3LmJlZm9yZVN1Ym1pdCkgewogICAgICAgICAgaWYgKHRoaXMuY3VycmVudFZpZXcuYmVmb3JlU3VibWl0KGUpID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghdGhpcy5zdWJtaXQgJiYgISgoX3JlZiA9IHRoaXMuY3VycmVudFZpZXcpICE9IG51bGwgPyBfcmVmLnN1Ym1pdCA6IHZvaWQgMCkgJiYgIXRoaXMuZ2V0T3B0aW9uKCdzdWJtaXRFbCcpKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy50cmlnZ2VyQ2FuY2VsKCk7CiAgICAgICAgfQogICAgICAgIGlmICgoX3JlZjEgPSB0aGlzLmN1cnJlbnRWaWV3KSAhPSBudWxsKSB7CiAgICAgICAgICBpZiAodHlwZW9mIF9yZWYxLnN1Ym1pdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICBfcmVmMS5zdWJtaXQoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN1Ym1pdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhpcy5zdWJtaXQoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMucmVnaW9uRW5hYmxlZCkgewogICAgICAgICAgcmV0dXJuIHRoaXMudHJpZ2dlcignbW9kYWw6ZGVzdHJveScpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5kZXN0cm95KCk7CiAgICAgICAgfQogICAgICB9OwoKICAgICAgTW9kYWwucHJvdG90eXBlLnRyaWdnZXJDYW5jZWwgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgaWYgKGUgIT0gbnVsbCkgewogICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5iZWZvcmVDYW5jZWwpIHsKICAgICAgICAgIGlmICh0aGlzLmJlZm9yZUNhbmNlbCgpID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYW5jZWwgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHRoaXMuY2FuY2VsKCk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnJlZ2lvbkVuYWJsZWQpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnRyaWdnZXIoJ21vZGFsOmRlc3Ryb3knKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdHJveSgpOwogICAgICAgIH0KICAgICAgfTsKCiAgICAgIE1vZGFsLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHJlbW92ZVZpZXdzOwogICAgICAgIEJhY2tib25lLiQoJ2JvZHknKS5vZmYoJ2tleXVwLmJibScsIHRoaXMuY2hlY2tLZXkpOwogICAgICAgIHRoaXMuJGVsLm9mZignbW91c2V1cC5iYm0nLCB0aGlzLmNsaWNrT3V0c2lkZUVsZW1lbnQpOwogICAgICAgIHRoaXMuJGVsLm9mZignY2xpY2suYmJtJywgdGhpcy5jbGlja091dHNpZGUpOwogICAgICAgIEJhY2tib25lLiQoJ3Rlc3RlcicpLnJlbW92ZSgpOwogICAgICAgIGlmICh0eXBlb2YgdGhpcy5vbkRlc3Ryb3kgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHRoaXMub25EZXN0cm95KCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2hvdWxkQW5pbWF0ZSA9IGZhbHNlOwogICAgICAgIHRoaXMubW9kYWxFbC5hZGRDbGFzcygiIiArIHRoaXMucHJlZml4ICsgIi1tb2RhbC0tZGVzdHJveSIpOwogICAgICAgIHJlbW92ZVZpZXdzID0gKGZ1bmN0aW9uKF90aGlzKSB7CiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBfcmVmOwogICAgICAgICAgICBpZiAoKF9yZWYgPSBfdGhpcy5jdXJyZW50VmlldykgIT0gbnVsbCkgewogICAgICAgICAgICAgIGlmICh0eXBlb2YgX3JlZi5yZW1vdmUgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgIF9yZWYucmVtb3ZlKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBfdGhpcy5yZW1vdmUoKTsKICAgICAgICAgIH07CiAgICAgICAgfSkodGhpcyk7CiAgICAgICAgaWYgKHRoaXMuJGVsLmZhZGVPdXQgJiYgdGhpcy5hbmltYXRlKSB7CiAgICAgICAgICB0aGlzLiRlbC5mYWRlT3V0KHsKICAgICAgICAgICAgZHVyYXRpb246IDIwMAogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gXy5kZWxheShmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIHJlbW92ZVZpZXdzKCk7CiAgICAgICAgICB9LCAyMDApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gcmVtb3ZlVmlld3MoKTsKICAgICAgICB9CiAgICAgIH07CgogICAgICBNb2RhbC5wcm90b3R5cGUub3BlbkF0ID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgIHZhciBhdEluZGV4LCBhdHRyLCBpLCBrZXksIHZpZXc7CiAgICAgICAgaWYgKF8uaXNOdW1iZXIob3B0aW9ucykpIHsKICAgICAgICAgIGF0SW5kZXggPSBvcHRpb25zOwogICAgICAgIH0gZWxzZSBpZiAoXy5pc051bWJlcihvcHRpb25zLl9pbmRleCkpIHsKICAgICAgICAgIGF0SW5kZXggPSBvcHRpb25zLl9pbmRleDsKICAgICAgICB9CiAgICAgICAgaSA9IDA7CiAgICAgICAgZm9yIChrZXkgaW4gdGhpcy52aWV3cykgewogICAgICAgICAgaWYgKGtleSAhPT0gJ2xlbmd0aCcpIHsKICAgICAgICAgICAgaWYgKF8uaXNOdW1iZXIoYXRJbmRleCkpIHsKICAgICAgICAgICAgICBpZiAoaSA9PT0gYXRJbmRleCkgewogICAgICAgICAgICAgICAgdmlldyA9IHRoaXMudmlld3Nba2V5XTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKF8uaXNPYmplY3Qob3B0aW9ucykpIHsKICAgICAgICAgICAgICBmb3IgKGF0dHIgaW4gdGhpcy52aWV3c1trZXldKSB7CiAgICAgICAgICAgICAgICBpZiAob3B0aW9uc1thdHRyXSA9PT0gdGhpcy52aWV3c1trZXldW2F0dHJdKSB7CiAgICAgICAgICAgICAgICAgIHZpZXcgPSB0aGlzLnZpZXdzW2tleV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh2aWV3KSB7CiAgICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IF8uaW5kZXhPZih0aGlzLnZpZXdzLCB2aWV3KTsKICAgICAgICAgIHRoaXMudHJpZ2dlclZpZXcoewogICAgICAgICAgICBkYXRhOiBfLmV4dGVuZCh2aWV3LCB7CiAgICAgICAgICAgICAgb3Blbk9wdGlvbnM6IG9wdGlvbnMKICAgICAgICAgICAgfSkKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfTsKCiAgICAgIE1vZGFsLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgIGlmIChvcHRpb25zID09IG51bGwpIHsKICAgICAgICAgIG9wdGlvbnMgPSB7fTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZGV4ICsgMSA8IHRoaXMudmlld3MubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuQXQoXy5leHRlbmQob3B0aW9ucywgewogICAgICAgICAgICBfaW5kZXg6IHRoaXMuY3VycmVudEluZGV4ICsgMQogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgfTsKCiAgICAgIE1vZGFsLnByb3RvdHlwZS5wcmV2aW91cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7CiAgICAgICAgICBvcHRpb25zID0ge307CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCAtIDEgPCB0aGlzLnZpZXdzLmxlbmd0aCAtIDEpIHsKICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5BdChfLmV4dGVuZChvcHRpb25zLCB7CiAgICAgICAgICAgIF9pbmRleDogdGhpcy5jdXJyZW50SW5kZXggLSAxCiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICB9OwoKICAgICAgcmV0dXJuIE1vZGFsOwoKICAgIH0pKEJhY2tib25lLlZpZXcpOwogICAgQmFja2JvbmUuTW9kYWwgPSBNb2RhbDsKICAgIHJldHVybiBCYWNrYm9uZS5Nb2RhbDsKICB9KTsKCn0pLmNhbGwodGhpcyk7CgooZnVuY3Rpb24oKSB7CiAgdmFyIF9fYmluZCA9IGZ1bmN0aW9uKGZuLCBtZSl7IHJldHVybiBmdW5jdGlvbigpeyByZXR1cm4gZm4uYXBwbHkobWUsIGFyZ3VtZW50cyk7IH07IH0sCiAgICBfX2hhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eSwKICAgIF9fZXh0ZW5kcyA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoX19oYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9OwoKICAoZnVuY3Rpb24oZmFjdG9yeSkgewogICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgewogICAgICByZXR1cm4gZGVmaW5lKFsidW5kZXJzY29yZSIsICJiYWNrYm9uZSIsICJiYWNrYm9uZS5tYXJpb25ldHRlIiwgImV4cG9ydHMiXSwgZmFjdG9yeSk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAib2JqZWN0IikgewogICAgICByZXR1cm4gZmFjdG9yeShyZXF1aXJlKCJ1bmRlcnNjb3JlIiksIHJlcXVpcmUoImJhY2tib25lIiksIHJlcXVpcmUoImJhY2tib25lLm1hcmlvbmV0dGUiKSwgZXhwb3J0cyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZmFjdG9yeShfLCBCYWNrYm9uZSwgQmFja2JvbmUuTWFyaW9uZXR0ZSwge30pOwogICAgfQogIH0pKGZ1bmN0aW9uKF8sIEJhY2tib25lLCBNYXJpb25ldHRlLCBNb2RhbHMpIHsKICAgIE1vZGFscyA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKE1vZGFscywgX3N1cGVyKTsKCiAgICAgIGZ1bmN0aW9uIE1vZGFscygpIHsKICAgICAgICB0aGlzLmRlc3Ryb3kgPSBfX2JpbmQodGhpcy5kZXN0cm95LCB0aGlzKTsKICAgICAgICByZXR1cm4gTW9kYWxzLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICB9CgogICAgICBNb2RhbHMucHJvdG90eXBlLm1vZGFscyA9IFtdOwoKICAgICAgTW9kYWxzLnByb3RvdHlwZS56SW5kZXggPSAwOwoKICAgICAgTW9kYWxzLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24odmlldywgb3B0aW9ucykgewogICAgICAgIHZhciBsYXN0TW9kYWwsIG1vZGFsVmlldywgc2Vjb25kTGFzdE1vZGFsLCBfaSwgX2osIF9sZW4sIF9sZW4xLCBfcmVmLCBfcmVmMTsKICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7CiAgICAgICAgICBvcHRpb25zID0ge307CiAgICAgICAgfQogICAgICAgIHRoaXMuX2Vuc3VyZUVsZW1lbnQoKTsKICAgICAgICBCYWNrYm9uZS4kKCdib2R5JykuY3NzKHsKICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJwogICAgICAgIH0pOwogICAgICAgIGlmICh0aGlzLm1vZGFscy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBsYXN0TW9kYWwgPSBfLmxhc3QodGhpcy5tb2RhbHMpOwogICAgICAgICAgbGFzdE1vZGFsLm1vZGFsRWwuYWRkQ2xhc3MoIiIgKyBsYXN0TW9kYWwucHJlZml4ICsgIi12aWV3LS1zdGFja2VkIik7CiAgICAgICAgICBzZWNvbmRMYXN0TW9kYWwgPSB0aGlzLm1vZGFsc1t0aGlzLm1vZGFscy5sZW5ndGggLSAxXTsKICAgICAgICAgIGlmIChzZWNvbmRMYXN0TW9kYWwgIT0gbnVsbCkgewogICAgICAgICAgICBzZWNvbmRMYXN0TW9kYWwubW9kYWxFbC5yZW1vdmVDbGFzcygiIiArIHNlY29uZExhc3RNb2RhbC5wcmVmaXggKyAiLW1vZGFsLS1zdGFja2VkLXJldmVyc2UiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmlldy5yZW5kZXIob3B0aW9ucyk7CiAgICAgICAgdmlldy5yZWdpb25FbmFibGVkID0gdHJ1ZTsKICAgICAgICB0aGlzLnRyaWdnZXJNZXRob2QoJ2JlZm9yZTpzd2FwJywgdmlldyk7CiAgICAgICAgdGhpcy50cmlnZ2VyTWV0aG9kKCdiZWZvcmU6c2hvdycsIHZpZXcpOwogICAgICAgIE1hcmlvbmV0dGUudHJpZ2dlck1ldGhvZE9uKHZpZXcsICdiZWZvcmU6c2hvdycpOwogICAgICAgIHRoaXMudHJpZ2dlck1ldGhvZCgnc3dhcE91dCcsIHRoaXMuY3VycmVudFZpZXcpOwogICAgICAgIHRoaXMuJGVsLmFwcGVuZCh2aWV3LmVsKTsKICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gdmlldzsKICAgICAgICB0aGlzLnRyaWdnZXJNZXRob2QoJ3N3YXAnLCB2aWV3KTsKICAgICAgICBfcmVmID0gdGhpcy5tb2RhbHM7CiAgICAgICAgZm9yIChfaSA9IDAsIF9sZW4gPSBfcmVmLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CiAgICAgICAgICBtb2RhbFZpZXcgPSBfcmVmW19pXTsKICAgICAgICAgIG1vZGFsVmlldy51bmRlbGVnYXRlTW9kYWxFdmVudHMoKTsKICAgICAgICB9CiAgICAgICAgX3JlZjEgPSB0aGlzLm1vZGFsczsKICAgICAgICBmb3IgKF9qID0gMCwgX2xlbjEgPSBfcmVmMS5sZW5ndGg7IF9qIDwgX2xlbjE7IF9qKyspIHsKICAgICAgICAgIG1vZGFsVmlldyA9IF9yZWYxW19qXTsKICAgICAgICAgIG1vZGFsVmlldy4kZWwuY3NzKHsKICAgICAgICAgICAgYmFja2dyb3VuZDogJ25vbmUnCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgdmlldy5vbignbW9kYWw6ZGVzdHJveScsIHRoaXMuZGVzdHJveSk7CiAgICAgICAgdGhpcy5tb2RhbHMucHVzaCh2aWV3KTsKICAgICAgICByZXR1cm4gdGhpcy56SW5kZXgrKzsKICAgICAgfTsKCiAgICAgIE1vZGFscy5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBsYXN0TW9kYWwsIHZpZXc7CiAgICAgICAgdmlldyA9IHRoaXMuY3VycmVudFZpZXc7CiAgICAgICAgaWYgKCF2aWV3KSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICh2aWV3LmRlc3Ryb3kgJiYgIXZpZXcuaXNEZXN0cm95ZWQpIHsKICAgICAgICAgIHZpZXcuZGVzdHJveSgpOwogICAgICAgIH0gZWxzZSBpZiAodmlldy5yZW1vdmUpIHsKICAgICAgICAgIHZpZXcucmVtb3ZlKCk7CiAgICAgICAgfQogICAgICAgIHZpZXcub2ZmKCdtb2RhbDpkZXN0cm95JywgdGhpcy5kZXN0cm95KTsKICAgICAgICB0aGlzLm1vZGFscy5zcGxpY2UoXy5pbmRleE9mKHRoaXMubW9kYWxzLCB2aWV3KSwgMSk7CiAgICAgICAgdGhpcy56SW5kZXgtLTsKICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gdGhpcy5tb2RhbHNbdGhpcy56SW5kZXggLSAxXTsKICAgICAgICBsYXN0TW9kYWwgPSBfLmxhc3QodGhpcy5tb2RhbHMpOwogICAgICAgIGlmIChsYXN0TW9kYWwpIHsKICAgICAgICAgIGxhc3RNb2RhbC4kZWwucmVtb3ZlQXR0cignc3R5bGUnKTsKICAgICAgICAgIGxhc3RNb2RhbC5tb2RhbEVsLmFkZENsYXNzKCIiICsgbGFzdE1vZGFsLnByZWZpeCArICItbW9kYWwtLXN0YWNrZWQtcmV2ZXJzZSIpOwogICAgICAgICAgXy5kZWxheSgoZnVuY3Rpb24oX3RoaXMpIHsKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHJldHVybiBsYXN0TW9kYWwubW9kYWxFbC5yZW1vdmVDbGFzcygiIiArIGxhc3RNb2RhbC5wcmVmaXggKyAiLW1vZGFsLS1zdGFja2VkIik7CiAgICAgICAgICAgIH07CiAgICAgICAgICB9KSh0aGlzKSwgMzAwKTsKICAgICAgICAgIGlmICh0aGlzLnpJbmRleCAhPT0gMCkgewogICAgICAgICAgICBsYXN0TW9kYWwuZGVsZWdhdGVNb2RhbEV2ZW50cygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodGhpcy56SW5kZXggPT09IDApIHsKICAgICAgICAgIEJhY2tib25lLiQoJ2JvZHknKS5jc3MoewogICAgICAgICAgICBvdmVyZmxvdzogJ3Zpc2libGUnCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMudHJpZ2dlck1ldGhvZCgnbW9kYWw6ZGVzdHJveScsIHZpZXcpOwogICAgICB9OwoKICAgICAgTW9kYWxzLnByb3RvdHlwZS5kZXN0cm95QWxsID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHZpZXcsIF9pLCBfbGVuLCBfcmVmLCBfcmVzdWx0czsKICAgICAgICBfcmVmID0gdGhpcy5tb2RhbHM7CiAgICAgICAgX3Jlc3VsdHMgPSBbXTsKICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHsKICAgICAgICAgIHZpZXcgPSBfcmVmW19pXTsKICAgICAgICAgIF9yZXN1bHRzLnB1c2godGhpcy5kZXN0cm95KCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX3Jlc3VsdHM7CiAgICAgIH07CgogICAgICByZXR1cm4gTW9kYWxzOwoKICAgIH0pKE1hcmlvbmV0dGUuUmVnaW9uKTsKICAgIE1hcmlvbmV0dGUuTW9kYWxzID0gTW9kYWxzOwogICAgcmV0dXJuIE1hcmlvbmV0dGUuTW9kYWxzOwogIH0pOwoKfSkuY2FsbCh0aGlzKTsK]]></data>
	</file>
	<file>
	  <filename>/js/dev/backbone.modal.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCkgewogIHZhciBfX2JpbmQgPSBmdW5jdGlvbihmbiwgbWUpeyByZXR1cm4gZnVuY3Rpb24oKXsgcmV0dXJuIGZuLmFwcGx5KG1lLCBhcmd1bWVudHMpOyB9OyB9LAogICAgX19oYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHksCiAgICBfX2V4dGVuZHMgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKF9faGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSwKICAgIF9faW5kZXhPZiA9IFtdLmluZGV4T2YgfHwgZnVuY3Rpb24oaXRlbSkgeyBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7IGlmIChpIGluIHRoaXMgJiYgdGhpc1tpXSA9PT0gaXRlbSkgcmV0dXJuIGk7IH0gcmV0dXJuIC0xOyB9OwoKICAoZnVuY3Rpb24oZmFjdG9yeSkgewogICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgewogICAgICByZXR1cm4gZGVmaW5lKFsidW5kZXJzY29yZSIsICJiYWNrYm9uZSIsICJleHBvcnRzIl0sIGZhY3RvcnkpOwogICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gIm9iamVjdCIpIHsKICAgICAgcmV0dXJuIGZhY3RvcnkocmVxdWlyZSgidW5kZXJzY29yZSIpLCByZXF1aXJlKCJiYWNrYm9uZSIpLCBleHBvcnRzKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWN0b3J5KF8sIEJhY2tib25lLCB7fSk7CiAgICB9CiAgfSkoZnVuY3Rpb24oXywgQmFja2JvbmUsIE1vZGFsKSB7CiAgICBNb2RhbCA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKE1vZGFsLCBfc3VwZXIpOwoKICAgICAgTW9kYWwucHJvdG90eXBlLnByZWZpeCA9ICdiYm0nOwoKICAgICAgTW9kYWwucHJvdG90eXBlLmFuaW1hdGUgPSB0cnVlOwoKICAgICAgTW9kYWwucHJvdG90eXBlLmtleUNvbnRyb2wgPSB0cnVlOwoKICAgICAgTW9kYWwucHJvdG90eXBlLnNob3dWaWV3T25SZW5kZXIgPSB0cnVlOwoKICAgICAgZnVuY3Rpb24gTW9kYWwoKSB7CiAgICAgICAgdGhpcy50cmlnZ2VyQ2FuY2VsID0gX19iaW5kKHRoaXMudHJpZ2dlckNhbmNlbCwgdGhpcyk7CiAgICAgICAgdGhpcy50cmlnZ2VyU3VibWl0ID0gX19iaW5kKHRoaXMudHJpZ2dlclN1Ym1pdCwgdGhpcyk7CiAgICAgICAgdGhpcy50cmlnZ2VyVmlldyA9IF9fYmluZCh0aGlzLnRyaWdnZXJWaWV3LCB0aGlzKTsKICAgICAgICB0aGlzLmNsaWNrT3V0c2lkZUVsZW1lbnQgPSBfX2JpbmQodGhpcy5jbGlja091dHNpZGVFbGVtZW50LCB0aGlzKTsKICAgICAgICB0aGlzLmNsaWNrT3V0c2lkZSA9IF9fYmluZCh0aGlzLmNsaWNrT3V0c2lkZSwgdGhpcyk7CiAgICAgICAgdGhpcy5jaGVja0tleSA9IF9fYmluZCh0aGlzLmNoZWNrS2V5LCB0aGlzKTsKICAgICAgICB0aGlzLnJlbmRlcmVyQ29tcGxldGVkID0gX19iaW5kKHRoaXMucmVuZGVyZXJDb21wbGV0ZWQsIHRoaXMpOwogICAgICAgIHRoaXMuYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpOwogICAgICAgIEJhY2tib25lLlZpZXcucHJvdG90eXBlLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsIHRoaXMuYXJncyk7CiAgICAgICAgdGhpcy5zZXRVSUVsZW1lbnRzKCk7CiAgICAgIH0KCiAgICAgIE1vZGFsLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgdmFyIGRhdGEsIF9yZWY7CiAgICAgICAgZGF0YSA9IHRoaXMuc2VyaWFsaXplRGF0YSgpOwogICAgICAgIGlmICghb3B0aW9ucyB8fCBfLmlzRW1wdHkob3B0aW9ucykpIHsKICAgICAgICAgIG9wdGlvbnMgPSAwOwogICAgICAgIH0KICAgICAgICB0aGlzLiRlbC5hZGRDbGFzcygiIiArIHRoaXMucHJlZml4ICsgIi13cmFwcGVyIik7CiAgICAgICAgdGhpcy5tb2RhbEVsID0gQmFja2JvbmUuJCgnPGRpdiAvPicpLmFkZENsYXNzKCIiICsgdGhpcy5wcmVmaXggKyAiLW1vZGFsIik7CiAgICAgICAgaWYgKHRoaXMudGVtcGxhdGUpIHsKICAgICAgICAgIHRoaXMubW9kYWxFbC5odG1sKHRoaXMuYnVpbGRUZW1wbGF0ZSh0aGlzLnRlbXBsYXRlLCBkYXRhKSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuJGVsLmh0bWwodGhpcy5tb2RhbEVsKTsKICAgICAgICBpZiAodGhpcy52aWV3Q29udGFpbmVyKSB7CiAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJFbCA9IHRoaXMubW9kYWxFbC5maW5kKHRoaXMudmlld0NvbnRhaW5lcik7CiAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJFbC5hZGRDbGFzcygiIiArIHRoaXMucHJlZml4ICsgIi1tb2RhbF9fdmlld3MiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyRWwgPSB0aGlzLm1vZGFsRWw7CiAgICAgICAgfQogICAgICAgIEJhY2tib25lLiQoJzpmb2N1cycpLmJsdXIoKTsKICAgICAgICBpZiAoKChfcmVmID0gdGhpcy52aWV3cykgIT0gbnVsbCA/IF9yZWYubGVuZ3RoIDogdm9pZCAwKSA+IDAgJiYgdGhpcy5zaG93Vmlld09uUmVuZGVyKSB7CiAgICAgICAgICB0aGlzLm9wZW5BdChvcHRpb25zKTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uUmVuZGVyID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICB0aGlzLm9uUmVuZGVyKCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuZGVsZWdhdGVNb2RhbEV2ZW50cygpOwogICAgICAgIGlmICh0aGlzLiRlbC5mYWRlSW4gJiYgdGhpcy5hbmltYXRlKSB7CiAgICAgICAgICB0aGlzLm1vZGFsRWwuY3NzKHsKICAgICAgICAgICAgb3BhY2l0eTogMAogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLiRlbC5mYWRlSW4oewogICAgICAgICAgICBkdXJhdGlvbjogMTAwLAogICAgICAgICAgICBjb21wbGV0ZTogdGhpcy5yZW5kZXJlckNvbXBsZXRlZAogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMucmVuZGVyZXJDb21wbGV0ZWQoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CgogICAgICBNb2RhbC5wcm90b3R5cGUucmVuZGVyZXJDb21wbGV0ZWQgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX3JlZjsKICAgICAgICBpZiAodGhpcy5rZXlDb250cm9sKSB7CiAgICAgICAgICBCYWNrYm9uZS4kKCdib2R5Jykub24oJ2tleXVwLmJibScsIHRoaXMuY2hlY2tLZXkpOwogICAgICAgICAgdGhpcy4kZWwub24oJ21vdXNldXAuYmJtJywgdGhpcy5jbGlja091dHNpZGVFbGVtZW50KTsKICAgICAgICAgIHRoaXMuJGVsLm9uKCdjbGljay5iYm0nLCB0aGlzLmNsaWNrT3V0c2lkZSk7CiAgICAgICAgfQogICAgICAgIHRoaXMubW9kYWxFbC5jc3MoewogICAgICAgICAgb3BhY2l0eTogMQogICAgICAgIH0pLmFkZENsYXNzKCIiICsgdGhpcy5wcmVmaXggKyAiLW1vZGFsLS1vcGVuIik7CiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uU2hvdyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhpcy5vblNob3coKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIChfcmVmID0gdGhpcy5jdXJyZW50VmlldykgIT0gbnVsbCA/IHR5cGVvZiBfcmVmLm9uU2hvdyA9PT0gImZ1bmN0aW9uIiA/IF9yZWYub25TaG93KCkgOiB2b2lkIDAgOiB2b2lkIDA7CiAgICAgIH07CgogICAgICBNb2RhbC5wcm90b3R5cGUuc2V0VUlFbGVtZW50cyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBfcmVmOwogICAgICAgIHRoaXMudGVtcGxhdGUgPSB0aGlzLmdldE9wdGlvbigndGVtcGxhdGUnKTsKICAgICAgICB0aGlzLnZpZXdzID0gdGhpcy5nZXRPcHRpb24oJ3ZpZXdzJyk7CiAgICAgICAgaWYgKChfcmVmID0gdGhpcy52aWV3cykgIT0gbnVsbCkgewogICAgICAgICAgX3JlZi5sZW5ndGggPSBfLnNpemUodGhpcy52aWV3cyk7CiAgICAgICAgfQogICAgICAgIHRoaXMudmlld0NvbnRhaW5lciA9IHRoaXMuZ2V0T3B0aW9uKCd2aWV3Q29udGFpbmVyJyk7CiAgICAgICAgdGhpcy5hbmltYXRlID0gdGhpcy5nZXRPcHRpb24oJ2FuaW1hdGUnKTsKICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZCh0aGlzLnRlbXBsYXRlKSAmJiBfLmlzVW5kZWZpbmVkKHRoaXMudmlld3MpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHRlbXBsYXRlIG9yIHZpZXdzIGRlZmluZWQgZm9yIEJhY2tib25lLk1vZGFsJyk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnRlbXBsYXRlICYmIHRoaXMudmlld3MgJiYgXy5pc1VuZGVmaW5lZCh0aGlzLnZpZXdDb250YWluZXIpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHZpZXdDb250YWluZXIgZGVmaW5lZCBmb3IgQmFja2JvbmUuTW9kYWwnKTsKICAgICAgICB9CiAgICAgIH07CgogICAgICBNb2RhbC5wcm90b3R5cGUuZ2V0T3B0aW9uID0gZnVuY3Rpb24ob3B0aW9uKSB7CiAgICAgICAgaWYgKCFvcHRpb24pIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiBfX2luZGV4T2YuY2FsbCh0aGlzLm9wdGlvbnMsIG9wdGlvbikgPj0gMCAmJiAodGhpcy5vcHRpb25zW29wdGlvbl0gIT0gbnVsbCkpIHsKICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNbb3B0aW9uXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHRoaXNbb3B0aW9uXTsKICAgICAgICB9CiAgICAgIH07CgogICAgICBNb2RhbC5wcm90b3R5cGUuc2VyaWFsaXplRGF0YSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBkYXRhOwogICAgICAgIGRhdGEgPSB7fTsKICAgICAgICBpZiAodGhpcy5tb2RlbCkgewogICAgICAgICAgZGF0YSA9IF8uZXh0ZW5kKGRhdGEsIHRoaXMubW9kZWwudG9KU09OKCkpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5jb2xsZWN0aW9uKSB7CiAgICAgICAgICBkYXRhID0gXy5leHRlbmQoZGF0YSwgewogICAgICAgICAgICBpdGVtczogdGhpcy5jb2xsZWN0aW9uLnRvSlNPTigpCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRhdGE7CiAgICAgIH07CgogICAgICBNb2RhbC5wcm90b3R5cGUuZGVsZWdhdGVNb2RhbEV2ZW50cyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBjYW5jZWxFbCwga2V5LCBtYXRjaCwgc2VsZWN0b3IsIHN1Ym1pdEVsLCB0cmlnZ2VyLCBfcmVzdWx0czsKICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7CiAgICAgICAgY2FuY2VsRWwgPSB0aGlzLmdldE9wdGlvbignY2FuY2VsRWwnKTsKICAgICAgICBzdWJtaXRFbCA9IHRoaXMuZ2V0T3B0aW9uKCdzdWJtaXRFbCcpOwogICAgICAgIGlmIChzdWJtaXRFbCkgewogICAgICAgICAgdGhpcy4kZWwub24oJ2NsaWNrJywgc3VibWl0RWwsIHRoaXMudHJpZ2dlclN1Ym1pdCk7CiAgICAgICAgfQogICAgICAgIGlmIChjYW5jZWxFbCkgewogICAgICAgICAgdGhpcy4kZWwub24oJ2NsaWNrJywgY2FuY2VsRWwsIHRoaXMudHJpZ2dlckNhbmNlbCk7CiAgICAgICAgfQogICAgICAgIF9yZXN1bHRzID0gW107CiAgICAgICAgZm9yIChrZXkgaW4gdGhpcy52aWV3cykgewogICAgICAgICAgaWYgKF8uaXNTdHJpbmcoa2V5KSAmJiBrZXkgIT09ICdsZW5ndGgnKSB7CiAgICAgICAgICAgIG1hdGNoID0ga2V5Lm1hdGNoKC9eKFxTKylccyooLiopJC8pOwogICAgICAgICAgICB0cmlnZ2VyID0gbWF0Y2hbMV07CiAgICAgICAgICAgIHNlbGVjdG9yID0gbWF0Y2hbMl07CiAgICAgICAgICAgIF9yZXN1bHRzLnB1c2godGhpcy4kZWwub24odHJpZ2dlciwgc2VsZWN0b3IsIHRoaXMudmlld3Nba2V5XSwgdGhpcy50cmlnZ2VyVmlldykpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX3Jlc3VsdHMucHVzaCh2b2lkIDApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gX3Jlc3VsdHM7CiAgICAgIH07CgogICAgICBNb2RhbC5wcm90b3R5cGUudW5kZWxlZ2F0ZU1vZGFsRXZlbnRzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGNhbmNlbEVsLCBrZXksIG1hdGNoLCBzZWxlY3Rvciwgc3VibWl0RWwsIHRyaWdnZXIsIF9yZXN1bHRzOwogICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7CiAgICAgICAgY2FuY2VsRWwgPSB0aGlzLmdldE9wdGlvbignY2FuY2VsRWwnKTsKICAgICAgICBzdWJtaXRFbCA9IHRoaXMuZ2V0T3B0aW9uKCdzdWJtaXRFbCcpOwogICAgICAgIGlmIChzdWJtaXRFbCkgewogICAgICAgICAgdGhpcy4kZWwub2ZmKCdjbGljaycsIHN1Ym1pdEVsLCB0aGlzLnRyaWdnZXJTdWJtaXQpOwogICAgICAgIH0KICAgICAgICBpZiAoY2FuY2VsRWwpIHsKICAgICAgICAgIHRoaXMuJGVsLm9mZignY2xpY2snLCBjYW5jZWxFbCwgdGhpcy50cmlnZ2VyQ2FuY2VsKTsKICAgICAgICB9CiAgICAgICAgX3Jlc3VsdHMgPSBbXTsKICAgICAgICBmb3IgKGtleSBpbiB0aGlzLnZpZXdzKSB7CiAgICAgICAgICBpZiAoXy5pc1N0cmluZyhrZXkpICYmIGtleSAhPT0gJ2xlbmd0aCcpIHsKICAgICAgICAgICAgbWF0Y2ggPSBrZXkubWF0Y2goL14oXFMrKVxzKiguKikkLyk7CiAgICAgICAgICAgIHRyaWdnZXIgPSBtYXRjaFsxXTsKICAgICAgICAgICAgc2VsZWN0b3IgPSBtYXRjaFsyXTsKICAgICAgICAgICAgX3Jlc3VsdHMucHVzaCh0aGlzLiRlbC5vZmYodHJpZ2dlciwgc2VsZWN0b3IsIHRoaXMudmlld3Nba2V5XSwgdGhpcy50cmlnZ2VyVmlldykpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX3Jlc3VsdHMucHVzaCh2b2lkIDApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gX3Jlc3VsdHM7CiAgICAgIH07CgogICAgICBNb2RhbC5wcm90b3R5cGUuY2hlY2tLZXkgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7CiAgICAgICAgICBzd2l0Y2ggKGUua2V5Q29kZSkgewogICAgICAgICAgICBjYXNlIDI3OgogICAgICAgICAgICAgIHJldHVybiB0aGlzLnRyaWdnZXJDYW5jZWwoZSk7CiAgICAgICAgICAgIGNhc2UgMTM6CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJpZ2dlclN1Ym1pdChlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CgogICAgICBNb2RhbC5wcm90b3R5cGUuY2xpY2tPdXRzaWRlID0gZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBfcmVmOwogICAgICAgIGlmICgoKF9yZWYgPSB0aGlzLm91dHNpZGVFbGVtZW50KSAhPSBudWxsID8gX3JlZi5oYXNDbGFzcygiIiArIHRoaXMucHJlZml4ICsgIi13cmFwcGVyIikgOiB2b2lkIDApICYmIHRoaXMuYWN0aXZlKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy50cmlnZ2VyQ2FuY2VsKCk7CiAgICAgICAgfQogICAgICB9OwoKICAgICAgTW9kYWwucHJvdG90eXBlLmNsaWNrT3V0c2lkZUVsZW1lbnQgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMub3V0c2lkZUVsZW1lbnQgPSBCYWNrYm9uZS4kKGUudGFyZ2V0KTsKICAgICAgfTsKCiAgICAgIE1vZGFsLnByb3RvdHlwZS5idWlsZFRlbXBsYXRlID0gZnVuY3Rpb24odGVtcGxhdGUsIGRhdGEpIHsKICAgICAgICB2YXIgdGVtcGxhdGVGdW5jdGlvbjsKICAgICAgICBpZiAodHlwZW9mIHRlbXBsYXRlID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICB0ZW1wbGF0ZUZ1bmN0aW9uID0gdGVtcGxhdGU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRlbXBsYXRlRnVuY3Rpb24gPSBfLnRlbXBsYXRlKEJhY2tib25lLiQodGVtcGxhdGUpLmh0bWwoKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0ZW1wbGF0ZUZ1bmN0aW9uKGRhdGEpOwogICAgICB9OwoKICAgICAgTW9kYWwucHJvdG90eXBlLmJ1aWxkVmlldyA9IGZ1bmN0aW9uKHZpZXdUeXBlLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIHZpZXc7CiAgICAgICAgaWYgKCF2aWV3VHlwZSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAob3B0aW9ucyAmJiBfLmlzRnVuY3Rpb24ob3B0aW9ucykpIHsKICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zKCk7CiAgICAgICAgfQogICAgICAgIGlmIChfLmlzRnVuY3Rpb24odmlld1R5cGUpKSB7CiAgICAgICAgICB2aWV3ID0gbmV3IHZpZXdUeXBlKG9wdGlvbnMgfHwgdGhpcy5hcmdzWzBdKTsKICAgICAgICAgIGlmICh2aWV3IGluc3RhbmNlb2YgQmFja2JvbmUuVmlldykgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIGVsOiB2aWV3LnJlbmRlcigpLiRlbCwKICAgICAgICAgICAgICB2aWV3OiB2aWV3CiAgICAgICAgICAgIH07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIGVsOiB2aWV3VHlwZShvcHRpb25zIHx8IHRoaXMuYXJnc1swXSkKICAgICAgICAgICAgfTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHZpZXc6IHZpZXdUeXBlLAogICAgICAgICAgZWw6IHZpZXdUeXBlLiRlbAogICAgICAgIH07CiAgICAgIH07CgogICAgICBNb2RhbC5wcm90b3R5cGUudHJpZ2dlclZpZXcgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgdmFyIGluZGV4LCBpbnN0YW5jZSwga2V5LCBvcHRpb25zLCBfYmFzZSwgX2Jhc2UxLCBfcmVmOwogICAgICAgIGlmIChlICE9IG51bGwpIHsKICAgICAgICAgIGlmICh0eXBlb2YgZS5wcmV2ZW50RGVmYXVsdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG9wdGlvbnMgPSBlLmRhdGE7CiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmJ1aWxkVmlldyhvcHRpb25zLnZpZXcsIG9wdGlvbnMudmlld09wdGlvbnMpOwogICAgICAgIGlmICh0aGlzLmN1cnJlbnRWaWV3KSB7CiAgICAgICAgICB0aGlzLnByZXZpb3VzVmlldyA9IHRoaXMuY3VycmVudFZpZXc7CiAgICAgICAgICBpZiAoISgoX3JlZiA9IG9wdGlvbnMub3Blbk9wdGlvbnMpICE9IG51bGwgPyBfcmVmLnNraXBTdWJtaXQgOiB2b2lkIDApKSB7CiAgICAgICAgICAgIGlmICgodHlwZW9mIChfYmFzZSA9IHRoaXMucHJldmlvdXNWaWV3KS5iZWZvcmVTdWJtaXQgPT09ICJmdW5jdGlvbiIgPyBfYmFzZS5iZWZvcmVTdWJtaXQoZSkgOiB2b2lkIDApID09PSBmYWxzZSkgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodHlwZW9mIChfYmFzZTEgPSB0aGlzLnByZXZpb3VzVmlldykuc3VibWl0ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgX2Jhc2UxLnN1Ym1pdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuY3VycmVudFZpZXcgPSBpbnN0YW5jZS52aWV3IHx8IGluc3RhbmNlLmVsOwogICAgICAgIGluZGV4ID0gMDsKICAgICAgICBmb3IgKGtleSBpbiB0aGlzLnZpZXdzKSB7CiAgICAgICAgICBpZiAob3B0aW9ucy52aWV3ID09PSB0aGlzLnZpZXdzW2tleV0udmlldykgewogICAgICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IGluZGV4OwogICAgICAgICAgfQogICAgICAgICAgaW5kZXgrKzsKICAgICAgICB9CiAgICAgICAgaWYgKG9wdGlvbnMub25BY3RpdmUpIHsKICAgICAgICAgIGlmIChfLmlzRnVuY3Rpb24ob3B0aW9ucy5vbkFjdGl2ZSkpIHsKICAgICAgICAgICAgb3B0aW9ucy5vbkFjdGl2ZSh0aGlzKTsKICAgICAgICAgIH0gZWxzZSBpZiAoXy5pc1N0cmluZyhvcHRpb25zLm9uQWN0aXZlKSkgewogICAgICAgICAgICB0aGlzW29wdGlvbnMub25BY3RpdmVdLmNhbGwodGhpcywgb3B0aW9ucyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnNob3VsZEFuaW1hdGUpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmFuaW1hdGVUb1ZpZXcoaW5zdGFuY2UuZWwpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnNob3VsZEFuaW1hdGUgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIHRoaXMuJCh0aGlzLnZpZXdDb250YWluZXJFbCkuaHRtbChpbnN0YW5jZS5lbCk7CiAgICAgICAgfQogICAgICB9OwoKICAgICAgTW9kYWwucHJvdG90eXBlLmFuaW1hdGVUb1ZpZXcgPSBmdW5jdGlvbih2aWV3KSB7CiAgICAgICAgdmFyIGNvbnRhaW5lciwgbmV3SGVpZ2h0LCBwcmV2aW91c0hlaWdodCwgc3R5bGUsIHRlc3RlciwgX2Jhc2UsIF9yZWY7CiAgICAgICAgc3R5bGUgPSB7CiAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJywKICAgICAgICAgIHRvcDogLTk5OTksCiAgICAgICAgICBsZWZ0OiAtOTk5OQogICAgICAgIH07CiAgICAgICAgdGVzdGVyID0gQmFja2JvbmUuJCgnPHRlc3Rlci8+JykuY3NzKHN0eWxlKTsKICAgICAgICB0ZXN0ZXIuaHRtbCh0aGlzLiRlbC5jbG9uZSgpLmNzcyhzdHlsZSkpOwogICAgICAgIGlmIChCYWNrYm9uZS4kKCd0ZXN0ZXInKS5sZW5ndGggIT09IDApIHsKICAgICAgICAgIEJhY2tib25lLiQoJ3Rlc3RlcicpLnJlcGxhY2VXaXRoKHRlc3Rlcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIEJhY2tib25lLiQoJ2JvZHknKS5hcHBlbmQodGVzdGVyKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMudmlld0NvbnRhaW5lcikgewogICAgICAgICAgY29udGFpbmVyID0gdGVzdGVyLmZpbmQodGhpcy52aWV3Q29udGFpbmVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29udGFpbmVyID0gdGVzdGVyLmZpbmQoIi4iICsgdGhpcy5wcmVmaXggKyAiLW1vZGFsIik7CiAgICAgICAgfQogICAgICAgIGNvbnRhaW5lci5yZW1vdmVBdHRyKCdzdHlsZScpOwogICAgICAgIHByZXZpb3VzSGVpZ2h0ID0gY29udGFpbmVyLm91dGVySGVpZ2h0KCk7CiAgICAgICAgY29udGFpbmVyLmh0bWwodmlldyk7CiAgICAgICAgbmV3SGVpZ2h0ID0gY29udGFpbmVyLm91dGVySGVpZ2h0KCk7CiAgICAgICAgaWYgKHByZXZpb3VzSGVpZ2h0ID09PSBuZXdIZWlnaHQpIHsKICAgICAgICAgIHRoaXMuJCh0aGlzLnZpZXdDb250YWluZXJFbCkuaHRtbCh2aWV3KTsKICAgICAgICAgIGlmICh0eXBlb2YgKF9iYXNlID0gdGhpcy5jdXJyZW50Vmlldykub25TaG93ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIF9iYXNlLm9uU2hvdygpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIChfcmVmID0gdGhpcy5wcmV2aW91c1ZpZXcpICE9IG51bGwgPyB0eXBlb2YgX3JlZi5kZXN0cm95ID09PSAiZnVuY3Rpb24iID8gX3JlZi5kZXN0cm95KCkgOiB2b2lkIDAgOiB2b2lkIDA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICh0aGlzLmFuaW1hdGUpIHsKICAgICAgICAgICAgdGhpcy4kKHRoaXMudmlld0NvbnRhaW5lckVsKS5jc3MoewogICAgICAgICAgICAgIG9wYWNpdHk6IDAKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiB0aGlzLiQodGhpcy52aWV3Q29udGFpbmVyRWwpLmFuaW1hdGUoewogICAgICAgICAgICAgIGhlaWdodDogbmV3SGVpZ2h0CiAgICAgICAgICAgIH0sIDEwMCwgKGZ1bmN0aW9uKF90aGlzKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIF9iYXNlMSwgX3JlZjE7CiAgICAgICAgICAgICAgICBfdGhpcy4kKF90aGlzLnZpZXdDb250YWluZXJFbCkuY3NzKHsKICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMQogICAgICAgICAgICAgICAgfSkucmVtb3ZlQXR0cignc3R5bGUnKTsKICAgICAgICAgICAgICAgIF90aGlzLiQoX3RoaXMudmlld0NvbnRhaW5lckVsKS5odG1sKHZpZXcpOwogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoX2Jhc2UxID0gX3RoaXMuY3VycmVudFZpZXcpLm9uU2hvdyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICAgICAgICBfYmFzZTEub25TaG93KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gKF9yZWYxID0gX3RoaXMucHJldmlvdXNWaWV3KSAhPSBudWxsID8gdHlwZW9mIF9yZWYxLmRlc3Ryb3kgPT09ICJmdW5jdGlvbiIgPyBfcmVmMS5kZXN0cm95KCkgOiB2b2lkIDAgOiB2b2lkIDA7CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSkodGhpcykpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuJCh0aGlzLnZpZXdDb250YWluZXJFbCkuY3NzKHsKICAgICAgICAgICAgICBoZWlnaHQ6IG5ld0hlaWdodAogICAgICAgICAgICB9KS5odG1sKHZpZXcpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKCiAgICAgIE1vZGFsLnByb3RvdHlwZS50cmlnZ2VyU3VibWl0ID0gZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBfcmVmLCBfcmVmMTsKICAgICAgICBpZiAoZSAhPSBudWxsKSB7CiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgfQogICAgICAgIGlmIChCYWNrYm9uZS4kKGUudGFyZ2V0KS5pcygndGV4dGFyZWEnKSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5iZWZvcmVTdWJtaXQpIHsKICAgICAgICAgIGlmICh0aGlzLmJlZm9yZVN1Ym1pdChlKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5jdXJyZW50VmlldyAmJiB0aGlzLmN1cnJlbnRWaWV3LmJlZm9yZVN1Ym1pdCkgewogICAgICAgICAgaWYgKHRoaXMuY3VycmVudFZpZXcuYmVmb3JlU3VibWl0KGUpID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghdGhpcy5zdWJtaXQgJiYgISgoX3JlZiA9IHRoaXMuY3VycmVudFZpZXcpICE9IG51bGwgPyBfcmVmLnN1Ym1pdCA6IHZvaWQgMCkgJiYgIXRoaXMuZ2V0T3B0aW9uKCdzdWJtaXRFbCcpKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy50cmlnZ2VyQ2FuY2VsKCk7CiAgICAgICAgfQogICAgICAgIGlmICgoX3JlZjEgPSB0aGlzLmN1cnJlbnRWaWV3KSAhPSBudWxsKSB7CiAgICAgICAgICBpZiAodHlwZW9mIF9yZWYxLnN1Ym1pdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICBfcmVmMS5zdWJtaXQoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN1Ym1pdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhpcy5zdWJtaXQoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMucmVnaW9uRW5hYmxlZCkgewogICAgICAgICAgcmV0dXJuIHRoaXMudHJpZ2dlcignbW9kYWw6ZGVzdHJveScpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5kZXN0cm95KCk7CiAgICAgICAgfQogICAgICB9OwoKICAgICAgTW9kYWwucHJvdG90eXBlLnRyaWdnZXJDYW5jZWwgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgaWYgKGUgIT0gbnVsbCkgewogICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5iZWZvcmVDYW5jZWwpIHsKICAgICAgICAgIGlmICh0aGlzLmJlZm9yZUNhbmNlbCgpID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYW5jZWwgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHRoaXMuY2FuY2VsKCk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnJlZ2lvbkVuYWJsZWQpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnRyaWdnZXIoJ21vZGFsOmRlc3Ryb3knKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdHJveSgpOwogICAgICAgIH0KICAgICAgfTsKCiAgICAgIE1vZGFsLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHJlbW92ZVZpZXdzOwogICAgICAgIEJhY2tib25lLiQoJ2JvZHknKS5vZmYoJ2tleXVwLmJibScsIHRoaXMuY2hlY2tLZXkpOwogICAgICAgIHRoaXMuJGVsLm9mZignbW91c2V1cC5iYm0nLCB0aGlzLmNsaWNrT3V0c2lkZUVsZW1lbnQpOwogICAgICAgIHRoaXMuJGVsLm9mZignY2xpY2suYmJtJywgdGhpcy5jbGlja091dHNpZGUpOwogICAgICAgIEJhY2tib25lLiQoJ3Rlc3RlcicpLnJlbW92ZSgpOwogICAgICAgIGlmICh0eXBlb2YgdGhpcy5vbkRlc3Ryb3kgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHRoaXMub25EZXN0cm95KCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2hvdWxkQW5pbWF0ZSA9IGZhbHNlOwogICAgICAgIHRoaXMubW9kYWxFbC5hZGRDbGFzcygiIiArIHRoaXMucHJlZml4ICsgIi1tb2RhbC0tZGVzdHJveSIpOwogICAgICAgIHJlbW92ZVZpZXdzID0gKGZ1bmN0aW9uKF90aGlzKSB7CiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBfcmVmOwogICAgICAgICAgICBpZiAoKF9yZWYgPSBfdGhpcy5jdXJyZW50VmlldykgIT0gbnVsbCkgewogICAgICAgICAgICAgIGlmICh0eXBlb2YgX3JlZi5yZW1vdmUgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgIF9yZWYucmVtb3ZlKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBfdGhpcy5yZW1vdmUoKTsKICAgICAgICAgIH07CiAgICAgICAgfSkodGhpcyk7CiAgICAgICAgaWYgKHRoaXMuJGVsLmZhZGVPdXQgJiYgdGhpcy5hbmltYXRlKSB7CiAgICAgICAgICB0aGlzLiRlbC5mYWRlT3V0KHsKICAgICAgICAgICAgZHVyYXRpb246IDIwMAogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gXy5kZWxheShmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIHJlbW92ZVZpZXdzKCk7CiAgICAgICAgICB9LCAyMDApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gcmVtb3ZlVmlld3MoKTsKICAgICAgICB9CiAgICAgIH07CgogICAgICBNb2RhbC5wcm90b3R5cGUub3BlbkF0ID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgIHZhciBhdEluZGV4LCBhdHRyLCBpLCBrZXksIHZpZXc7CiAgICAgICAgaWYgKF8uaXNOdW1iZXIob3B0aW9ucykpIHsKICAgICAgICAgIGF0SW5kZXggPSBvcHRpb25zOwogICAgICAgIH0gZWxzZSBpZiAoXy5pc051bWJlcihvcHRpb25zLl9pbmRleCkpIHsKICAgICAgICAgIGF0SW5kZXggPSBvcHRpb25zLl9pbmRleDsKICAgICAgICB9CiAgICAgICAgaSA9IDA7CiAgICAgICAgZm9yIChrZXkgaW4gdGhpcy52aWV3cykgewogICAgICAgICAgaWYgKGtleSAhPT0gJ2xlbmd0aCcpIHsKICAgICAgICAgICAgaWYgKF8uaXNOdW1iZXIoYXRJbmRleCkpIHsKICAgICAgICAgICAgICBpZiAoaSA9PT0gYXRJbmRleCkgewogICAgICAgICAgICAgICAgdmlldyA9IHRoaXMudmlld3Nba2V5XTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKF8uaXNPYmplY3Qob3B0aW9ucykpIHsKICAgICAgICAgICAgICBmb3IgKGF0dHIgaW4gdGhpcy52aWV3c1trZXldKSB7CiAgICAgICAgICAgICAgICBpZiAob3B0aW9uc1thdHRyXSA9PT0gdGhpcy52aWV3c1trZXldW2F0dHJdKSB7CiAgICAgICAgICAgICAgICAgIHZpZXcgPSB0aGlzLnZpZXdzW2tleV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh2aWV3KSB7CiAgICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IF8uaW5kZXhPZih0aGlzLnZpZXdzLCB2aWV3KTsKICAgICAgICAgIHRoaXMudHJpZ2dlclZpZXcoewogICAgICAgICAgICBkYXRhOiBfLmV4dGVuZCh2aWV3LCB7CiAgICAgICAgICAgICAgb3Blbk9wdGlvbnM6IG9wdGlvbnMKICAgICAgICAgICAgfSkKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfTsKCiAgICAgIE1vZGFsLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgIGlmIChvcHRpb25zID09IG51bGwpIHsKICAgICAgICAgIG9wdGlvbnMgPSB7fTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZGV4ICsgMSA8IHRoaXMudmlld3MubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuQXQoXy5leHRlbmQob3B0aW9ucywgewogICAgICAgICAgICBfaW5kZXg6IHRoaXMuY3VycmVudEluZGV4ICsgMQogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgfTsKCiAgICAgIE1vZGFsLnByb3RvdHlwZS5wcmV2aW91cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7CiAgICAgICAgICBvcHRpb25zID0ge307CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCAtIDEgPCB0aGlzLnZpZXdzLmxlbmd0aCAtIDEpIHsKICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5BdChfLmV4dGVuZChvcHRpb25zLCB7CiAgICAgICAgICAgIF9pbmRleDogdGhpcy5jdXJyZW50SW5kZXggLSAxCiAgICAgICAgICB9KSk7CiAgICAgICAgfQogICAgICB9OwoKICAgICAgcmV0dXJuIE1vZGFsOwoKICAgIH0pKEJhY2tib25lLlZpZXcpOwogICAgQmFja2JvbmUuTW9kYWwgPSBNb2RhbDsKICAgIHJldHVybiBCYWNrYm9uZS5Nb2RhbDsKICB9KTsKCn0pLmNhbGwodGhpcyk7Cg==]]></data>
	</file>
	<file>
	  <filename>/js/dev/datatables.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogVGhpcyBjb21iaW5lZCBmaWxlIHdhcyBjcmVhdGVkIGJ5IHRoZSBEYXRhVGFibGVzIGRvd25sb2FkZXIgYnVpbGRlcjoKICogICBodHRwczovL2RhdGF0YWJsZXMubmV0L2Rvd25sb2FkCiAqCiAqIFRvIHJlYnVpbGQgb3IgbW9kaWZ5IHRoaXMgZmlsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbnMgb2YgdGhlIGluY2x1ZGVkCiAqIHNvZnR3YXJlIHBsZWFzZSB2aXNpdDoKICogICBodHRwczovL2RhdGF0YWJsZXMubmV0L2Rvd25sb2FkLyNiczQvanN6aXAtMi41LjAvZHQtMS4xMC4yMC9iLTEuNi4xL2ItY29sdmlzLTEuNi4xL2ItZmxhc2gtMS42LjEvYi1odG1sNS0xLjYuMS9iLXByaW50LTEuNi4xL2NyLTEuNS4yL2ZjLTMuMy4wL2ZoLTMuMS42L2t0LTIuNS4xL3ItMi4yLjMvcmctMS4xLjEvcnItMS4yLjYvc2MtMi4wLjEvc3AtMS4wLjEvc2wtMS4zLjEKICoKICogSW5jbHVkZWQgbGlicmFyaWVzOgogKiAgIEpTWmlwIDIuNS4wLCBEYXRhVGFibGVzIDEuMTAuMjAsIEJ1dHRvbnMgMS42LjEsIENvbHVtbiB2aXNpYmlsaXR5IDEuNi4xLCBGbGFzaCBleHBvcnQgMS42LjEsIEhUTUw1IGV4cG9ydCAxLjYuMSwgUHJpbnQgdmlldyAxLjYuMSwgQ29sUmVvcmRlciAxLjUuMiwgRml4ZWRDb2x1bW5zIDMuMy4wLCBGaXhlZEhlYWRlciAzLjEuNiwgS2V5VGFibGUgMi41LjEsIFJlc3BvbnNpdmUgMi4yLjMsIFJvd0dyb3VwIDEuMS4xLCBSb3dSZW9yZGVyIDEuMi42LCBTY3JvbGxlciAyLjAuMSwgU2VhcmNoUGFuZXMgMS4wLjEsIFNlbGVjdCAxLjMuMQogKi8KCi8qIQoKSlNaaXAgLSBBIEphdmFzY3JpcHQgY2xhc3MgZm9yIGdlbmVyYXRpbmcgYW5kIHJlYWRpbmcgemlwIGZpbGVzCjxodHRwOi8vc3R1YXJ0ay5jb20vanN6aXA+CgooYykgMjAwOS0yMDE0IFN0dWFydCBLbmlnaHRsZXkgPHN0dWFydCBbYXRdIHN0dWFydGsuY29tPgpEdWFsIGxpY2VuY2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBvciBHUEx2My4gU2VlIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vU3R1ay9qc3ppcC9tYXN0ZXIvTElDRU5TRS5tYXJrZG93bi4KCkpTWmlwIHVzZXMgdGhlIGxpYnJhcnkgcGFrbyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgOgpodHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL3Bha28vYmxvYi9tYXN0ZXIvTElDRU5TRQoqLwohZnVuY3Rpb24oZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1lKCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxlKTtlbHNle3ZhciBmOyJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P2Y9d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2Y9Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmKGY9c2VsZiksZi5KU1ppcD1lKCl9fShmdW5jdGlvbigpe3ZhciBkZWZpbmUsbW9kdWxlLGV4cG9ydHM7cmV0dXJuIChmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09ImZ1bmN0aW9uIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK28rIiciKX12YXIgZj1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwoZi5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxmLGYuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSh7MTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKLy8gcHJpdmF0ZSBwcm9wZXJ0eQp2YXIgX2tleVN0ciA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7CgoKLy8gcHVibGljIG1ldGhvZCBmb3IgZW5jb2RpbmcKZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbihpbnB1dCwgdXRmOCkgewogICAgdmFyIG91dHB1dCA9ICIiOwogICAgdmFyIGNocjEsIGNocjIsIGNocjMsIGVuYzEsIGVuYzIsIGVuYzMsIGVuYzQ7CiAgICB2YXIgaSA9IDA7CgogICAgd2hpbGUgKGkgPCBpbnB1dC5sZW5ndGgpIHsKCiAgICAgICAgY2hyMSA9IGlucHV0LmNoYXJDb2RlQXQoaSsrKTsKICAgICAgICBjaHIyID0gaW5wdXQuY2hhckNvZGVBdChpKyspOwogICAgICAgIGNocjMgPSBpbnB1dC5jaGFyQ29kZUF0KGkrKyk7CgogICAgICAgIGVuYzEgPSBjaHIxID4+IDI7CiAgICAgICAgZW5jMiA9ICgoY2hyMSAmIDMpIDw8IDQpIHwgKGNocjIgPj4gNCk7CiAgICAgICAgZW5jMyA9ICgoY2hyMiAmIDE1KSA8PCAyKSB8IChjaHIzID4+IDYpOwogICAgICAgIGVuYzQgPSBjaHIzICYgNjM7CgogICAgICAgIGlmIChpc05hTihjaHIyKSkgewogICAgICAgICAgICBlbmMzID0gZW5jNCA9IDY0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChpc05hTihjaHIzKSkgewogICAgICAgICAgICBlbmM0ID0gNjQ7CiAgICAgICAgfQoKICAgICAgICBvdXRwdXQgPSBvdXRwdXQgKyBfa2V5U3RyLmNoYXJBdChlbmMxKSArIF9rZXlTdHIuY2hhckF0KGVuYzIpICsgX2tleVN0ci5jaGFyQXQoZW5jMykgKyBfa2V5U3RyLmNoYXJBdChlbmM0KTsKCiAgICB9CgogICAgcmV0dXJuIG91dHB1dDsKfTsKCi8vIHB1YmxpYyBtZXRob2QgZm9yIGRlY29kaW5nCmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24oaW5wdXQsIHV0ZjgpIHsKICAgIHZhciBvdXRwdXQgPSAiIjsKICAgIHZhciBjaHIxLCBjaHIyLCBjaHIzOwogICAgdmFyIGVuYzEsIGVuYzIsIGVuYzMsIGVuYzQ7CiAgICB2YXIgaSA9IDA7CgogICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKC9bXkEtWmEtejAtOVwrXC9cPV0vZywgIiIpOwoKICAgIHdoaWxlIChpIDwgaW5wdXQubGVuZ3RoKSB7CgogICAgICAgIGVuYzEgPSBfa2V5U3RyLmluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpOwogICAgICAgIGVuYzIgPSBfa2V5U3RyLmluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpOwogICAgICAgIGVuYzMgPSBfa2V5U3RyLmluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpOwogICAgICAgIGVuYzQgPSBfa2V5U3RyLmluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpOwoKICAgICAgICBjaHIxID0gKGVuYzEgPDwgMikgfCAoZW5jMiA+PiA0KTsKICAgICAgICBjaHIyID0gKChlbmMyICYgMTUpIDw8IDQpIHwgKGVuYzMgPj4gMik7CiAgICAgICAgY2hyMyA9ICgoZW5jMyAmIDMpIDw8IDYpIHwgZW5jNDsKCiAgICAgICAgb3V0cHV0ID0gb3V0cHV0ICsgU3RyaW5nLmZyb21DaGFyQ29kZShjaHIxKTsKCiAgICAgICAgaWYgKGVuYzMgIT0gNjQpIHsKICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0ICsgU3RyaW5nLmZyb21DaGFyQ29kZShjaHIyKTsKICAgICAgICB9CiAgICAgICAgaWYgKGVuYzQgIT0gNjQpIHsKICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0ICsgU3RyaW5nLmZyb21DaGFyQ29kZShjaHIzKTsKICAgICAgICB9CgogICAgfQoKICAgIHJldHVybiBvdXRwdXQ7Cgp9OwoKfSx7fV0sMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKZnVuY3Rpb24gQ29tcHJlc3NlZE9iamVjdCgpIHsKICAgIHRoaXMuY29tcHJlc3NlZFNpemUgPSAwOwogICAgdGhpcy51bmNvbXByZXNzZWRTaXplID0gMDsKICAgIHRoaXMuY3JjMzIgPSAwOwogICAgdGhpcy5jb21wcmVzc2lvbk1ldGhvZCA9IG51bGw7CiAgICB0aGlzLmNvbXByZXNzZWRDb250ZW50ID0gbnVsbDsKfQoKQ29tcHJlc3NlZE9iamVjdC5wcm90b3R5cGUgPSB7CiAgICAvKioKICAgICAqIFJldHVybiB0aGUgZGVjb21wcmVzc2VkIGNvbnRlbnQgaW4gYW4gdW5zcGVjaWZpZWQgZm9ybWF0LgogICAgICogVGhlIGZvcm1hdCB3aWxsIGRlcGVuZCBvbiB0aGUgZGVjb21wcmVzc29yLgogICAgICogQHJldHVybiB7T2JqZWN0fSB0aGUgZGVjb21wcmVzc2VkIGNvbnRlbnQuCiAgICAgKi8KICAgIGdldENvbnRlbnQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBudWxsOyAvLyBzZWUgaW1wbGVtZW50YXRpb24KICAgIH0sCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgY29tcHJlc3NlZCBjb250ZW50IGluIGFuIHVuc3BlY2lmaWVkIGZvcm1hdC4KICAgICAqIFRoZSBmb3JtYXQgd2lsbCBkZXBlbmQgb24gdGhlIGNvbXByZXNzZWQgY29udGVuIHNvdXJjZS4KICAgICAqIEByZXR1cm4ge09iamVjdH0gdGhlIGNvbXByZXNzZWQgY29udGVudC4KICAgICAqLwogICAgZ2V0Q29tcHJlc3NlZENvbnRlbnQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBudWxsOyAvLyBzZWUgaW1wbGVtZW50YXRpb24KICAgIH0KfTsKbW9kdWxlLmV4cG9ydHMgPSBDb21wcmVzc2VkT2JqZWN0OwoKfSx7fV0sMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKZXhwb3J0cy5TVE9SRSA9IHsKICAgIG1hZ2ljOiAiXHgwMFx4MDAiLAogICAgY29tcHJlc3M6IGZ1bmN0aW9uKGNvbnRlbnQsIGNvbXByZXNzaW9uT3B0aW9ucykgewogICAgICAgIHJldHVybiBjb250ZW50OyAvLyBubyBjb21wcmVzc2lvbgogICAgfSwKICAgIHVuY29tcHJlc3M6IGZ1bmN0aW9uKGNvbnRlbnQpIHsKICAgICAgICByZXR1cm4gY29udGVudDsgLy8gbm8gY29tcHJlc3Npb24KICAgIH0sCiAgICBjb21wcmVzc0lucHV0VHlwZTogbnVsbCwKICAgIHVuY29tcHJlc3NJbnB1dFR5cGU6IG51bGwKfTsKZXhwb3J0cy5ERUZMQVRFID0gX2RlcmVxXygnLi9mbGF0ZScpOwoKfSx7Ii4vZmxhdGUiOjh9XSw0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKdmFyIHV0aWxzID0gX2RlcmVxXygnLi91dGlscycpOwoKdmFyIHRhYmxlID0gWwogICAgMHgwMDAwMDAwMCwgMHg3NzA3MzA5NiwgMHhFRTBFNjEyQywgMHg5OTA5NTFCQSwKICAgIDB4MDc2REM0MTksIDB4NzA2QUY0OEYsIDB4RTk2M0E1MzUsIDB4OUU2NDk1QTMsCiAgICAweDBFREI4ODMyLCAweDc5RENCOEE0LCAweEUwRDVFOTFFLCAweDk3RDJEOTg4LAogICAgMHgwOUI2NEMyQiwgMHg3RUIxN0NCRCwgMHhFN0I4MkQwNywgMHg5MEJGMUQ5MSwKICAgIDB4MURCNzEwNjQsIDB4NkFCMDIwRjIsIDB4RjNCOTcxNDgsIDB4ODRCRTQxREUsCiAgICAweDFBREFENDdELCAweDZERERFNEVCLCAweEY0RDRCNTUxLCAweDgzRDM4NUM3LAogICAgMHgxMzZDOTg1NiwgMHg2NDZCQThDMCwgMHhGRDYyRjk3QSwgMHg4QTY1QzlFQywKICAgIDB4MTQwMTVDNEYsIDB4NjMwNjZDRDksIDB4RkEwRjNENjMsIDB4OEQwODBERjUsCiAgICAweDNCNkUyMEM4LCAweDRDNjkxMDVFLCAweEQ1NjA0MUU0LCAweEEyNjc3MTcyLAogICAgMHgzQzAzRTREMSwgMHg0QjA0RDQ0NywgMHhEMjBEODVGRCwgMHhBNTBBQjU2QiwKICAgIDB4MzVCNUE4RkEsIDB4NDJCMjk4NkMsIDB4REJCQkM5RDYsIDB4QUNCQ0Y5NDAsCiAgICAweDMyRDg2Q0UzLCAweDQ1REY1Qzc1LCAweERDRDYwRENGLCAweEFCRDEzRDU5LAogICAgMHgyNkQ5MzBBQywgMHg1MURFMDAzQSwgMHhDOEQ3NTE4MCwgMHhCRkQwNjExNiwKICAgIDB4MjFCNEY0QjUsIDB4NTZCM0M0MjMsIDB4Q0ZCQTk1OTksIDB4QjhCREE1MEYsCiAgICAweDI4MDJCODlFLCAweDVGMDU4ODA4LCAweEM2MENEOUIyLCAweEIxMEJFOTI0LAogICAgMHgyRjZGN0M4NywgMHg1ODY4NEMxMSwgMHhDMTYxMURBQiwgMHhCNjY2MkQzRCwKICAgIDB4NzZEQzQxOTAsIDB4MDFEQjcxMDYsIDB4OThEMjIwQkMsIDB4RUZENTEwMkEsCiAgICAweDcxQjE4NTg5LCAweDA2QjZCNTFGLCAweDlGQkZFNEE1LCAweEU4QjhENDMzLAogICAgMHg3ODA3QzlBMiwgMHgwRjAwRjkzNCwgMHg5NjA5QTg4RSwgMHhFMTBFOTgxOCwKICAgIDB4N0Y2QTBEQkIsIDB4MDg2RDNEMkQsIDB4OTE2NDZDOTcsIDB4RTY2MzVDMDEsCiAgICAweDZCNkI1MUY0LCAweDFDNkM2MTYyLCAweDg1NjUzMEQ4LCAweEYyNjIwMDRFLAogICAgMHg2QzA2OTVFRCwgMHgxQjAxQTU3QiwgMHg4MjA4RjRDMSwgMHhGNTBGQzQ1NywKICAgIDB4NjVCMEQ5QzYsIDB4MTJCN0U5NTAsIDB4OEJCRUI4RUEsIDB4RkNCOTg4N0MsCiAgICAweDYyREQxRERGLCAweDE1REEyRDQ5LCAweDhDRDM3Q0YzLCAweEZCRDQ0QzY1LAogICAgMHg0REIyNjE1OCwgMHgzQUI1NTFDRSwgMHhBM0JDMDA3NCwgMHhENEJCMzBFMiwKICAgIDB4NEFERkE1NDEsIDB4M0REODk1RDcsIDB4QTREMUM0NkQsIDB4RDNENkY0RkIsCiAgICAweDQzNjlFOTZBLCAweDM0NkVEOUZDLCAweEFENjc4ODQ2LCAweERBNjBCOEQwLAogICAgMHg0NDA0MkQ3MywgMHgzMzAzMURFNSwgMHhBQTBBNEM1RiwgMHhERDBEN0NDOSwKICAgIDB4NTAwNTcxM0MsIDB4MjcwMjQxQUEsIDB4QkUwQjEwMTAsIDB4QzkwQzIwODYsCiAgICAweDU3NjhCNTI1LCAweDIwNkY4NUIzLCAweEI5NjZENDA5LCAweENFNjFFNDlGLAogICAgMHg1RURFRjkwRSwgMHgyOUQ5Qzk5OCwgMHhCMEQwOTgyMiwgMHhDN0Q3QThCNCwKICAgIDB4NTlCMzNEMTcsIDB4MkVCNDBEODEsIDB4QjdCRDVDM0IsIDB4QzBCQTZDQUQsCiAgICAweEVEQjg4MzIwLCAweDlBQkZCM0I2LCAweDAzQjZFMjBDLCAweDc0QjFEMjlBLAogICAgMHhFQUQ1NDczOSwgMHg5REQyNzdBRiwgMHgwNERCMjYxNSwgMHg3M0RDMTY4MywKICAgIDB4RTM2MzBCMTIsIDB4OTQ2NDNCODQsIDB4MEQ2RDZBM0UsIDB4N0E2QTVBQTgsCiAgICAweEU0MEVDRjBCLCAweDkzMDlGRjlELCAweDBBMDBBRTI3LCAweDdEMDc5RUIxLAogICAgMHhGMDBGOTM0NCwgMHg4NzA4QTNEMiwgMHgxRTAxRjI2OCwgMHg2OTA2QzJGRSwKICAgIDB4Rjc2MjU3NUQsIDB4ODA2NTY3Q0IsIDB4MTk2QzM2NzEsIDB4NkU2QjA2RTcsCiAgICAweEZFRDQxQjc2LCAweDg5RDMyQkUwLCAweDEwREE3QTVBLCAweDY3REQ0QUNDLAogICAgMHhGOUI5REY2RiwgMHg4RUJFRUZGOSwgMHgxN0I3QkU0MywgMHg2MEIwOEVENSwKICAgIDB4RDZENkEzRTgsIDB4QTFEMTkzN0UsIDB4MzhEOEMyQzQsIDB4NEZERkYyNTIsCiAgICAweEQxQkI2N0YxLCAweEE2QkM1NzY3LCAweDNGQjUwNkRELCAweDQ4QjIzNjRCLAogICAgMHhEODBEMkJEQSwgMHhBRjBBMUI0QywgMHgzNjAzNEFGNiwgMHg0MTA0N0E2MCwKICAgIDB4REY2MEVGQzMsIDB4QTg2N0RGNTUsIDB4MzE2RThFRUYsIDB4NDY2OUJFNzksCiAgICAweENCNjFCMzhDLCAweEJDNjY4MzFBLCAweDI1NkZEMkEwLCAweDUyNjhFMjM2LAogICAgMHhDQzBDNzc5NSwgMHhCQjBCNDcwMywgMHgyMjAyMTZCOSwgMHg1NTA1MjYyRiwKICAgIDB4QzVCQTNCQkUsIDB4QjJCRDBCMjgsIDB4MkJCNDVBOTIsIDB4NUNCMzZBMDQsCiAgICAweEMyRDdGRkE3LCAweEI1RDBDRjMxLCAweDJDRDk5RThCLCAweDVCREVBRTFELAogICAgMHg5QjY0QzJCMCwgMHhFQzYzRjIyNiwgMHg3NTZBQTM5QywgMHgwMjZEOTMwQSwKICAgIDB4OUMwOTA2QTksIDB4RUIwRTM2M0YsIDB4NzIwNzY3ODUsIDB4MDUwMDU3MTMsCiAgICAweDk1QkY0QTgyLCAweEUyQjg3QTE0LCAweDdCQjEyQkFFLCAweDBDQjYxQjM4LAogICAgMHg5MkQyOEU5QiwgMHhFNUQ1QkUwRCwgMHg3Q0RDRUZCNywgMHgwQkRCREYyMSwKICAgIDB4ODZEM0QyRDQsIDB4RjFENEUyNDIsIDB4NjhEREIzRjgsIDB4MUZEQTgzNkUsCiAgICAweDgxQkUxNkNELCAweEY2QjkyNjVCLCAweDZGQjA3N0UxLCAweDE4Qjc0Nzc3LAogICAgMHg4ODA4NUFFNiwgMHhGRjBGNkE3MCwgMHg2NjA2M0JDQSwgMHgxMTAxMEI1QywKICAgIDB4OEY2NTlFRkYsIDB4Rjg2MkFFNjksIDB4NjE2QkZGRDMsIDB4MTY2Q0NGNDUsCiAgICAweEEwMEFFMjc4LCAweEQ3MEREMkVFLCAweDRFMDQ4MzU0LCAweDM5MDNCM0MyLAogICAgMHhBNzY3MjY2MSwgMHhEMDYwMTZGNywgMHg0OTY5NDc0RCwgMHgzRTZFNzdEQiwKICAgIDB4QUVEMTZBNEEsIDB4RDlENjVBREMsIDB4NDBERjBCNjYsIDB4MzdEODNCRjAsCiAgICAweEE5QkNBRTUzLCAweERFQkI5RUM1LCAweDQ3QjJDRjdGLCAweDMwQjVGRkU5LAogICAgMHhCREJERjIxQywgMHhDQUJBQzI4QSwgMHg1M0IzOTMzMCwgMHgyNEI0QTNBNiwKICAgIDB4QkFEMDM2MDUsIDB4Q0RENzA2OTMsIDB4NTRERTU3MjksIDB4MjNEOTY3QkYsCiAgICAweEIzNjY3QTJFLCAweEM0NjE0QUI4LCAweDVENjgxQjAyLCAweDJBNkYyQjk0LAogICAgMHhCNDBCQkUzNywgMHhDMzBDOEVBMSwgMHg1QTA1REYxQiwgMHgyRDAyRUY4RApdOwoKLyoqCiAqCiAqICBKYXZhc2NyaXB0IGNyYzMyCiAqICBodHRwOi8vd3d3LndlYnRvb2xraXQuaW5mby8KICoKICovCm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JjMzIoaW5wdXQsIGNyYykgewogICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gInVuZGVmaW5lZCIgfHwgIWlucHV0Lmxlbmd0aCkgewogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIHZhciBpc0FycmF5ID0gdXRpbHMuZ2V0VHlwZU9mKGlucHV0KSAhPT0gInN0cmluZyI7CgogICAgaWYgKHR5cGVvZihjcmMpID09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgY3JjID0gMDsKICAgIH0KICAgIHZhciB4ID0gMDsKICAgIHZhciB5ID0gMDsKICAgIHZhciBiID0gMDsKCiAgICBjcmMgPSBjcmMgXiAoLTEpOwogICAgZm9yICh2YXIgaSA9IDAsIGlUb3AgPSBpbnB1dC5sZW5ndGg7IGkgPCBpVG9wOyBpKyspIHsKICAgICAgICBiID0gaXNBcnJheSA/IGlucHV0W2ldIDogaW5wdXQuY2hhckNvZGVBdChpKTsKICAgICAgICB5ID0gKGNyYyBeIGIpICYgMHhGRjsKICAgICAgICB4ID0gdGFibGVbeV07CiAgICAgICAgY3JjID0gKGNyYyA+Pj4gOCkgXiB4OwogICAgfQoKICAgIHJldHVybiBjcmMgXiAoLTEpOwp9OwovLyB2aW06IHNldCBzaGlmdHdpZHRoPTQgc29mdHRhYnN0b3A9NDoKCn0seyIuL3V0aWxzIjoyMX1dLDU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7CnZhciB1dGlscyA9IF9kZXJlcV8oJy4vdXRpbHMnKTsKCmZ1bmN0aW9uIERhdGFSZWFkZXIoZGF0YSkgewogICAgdGhpcy5kYXRhID0gbnVsbDsgLy8gdHlwZSA6IHNlZSBpbXBsZW1lbnRhdGlvbgogICAgdGhpcy5sZW5ndGggPSAwOwogICAgdGhpcy5pbmRleCA9IDA7Cn0KRGF0YVJlYWRlci5wcm90b3R5cGUgPSB7CiAgICAvKioKICAgICAqIENoZWNrIHRoYXQgdGhlIG9mZnNldCB3aWxsIG5vdCBnbyB0b28gZmFyLgogICAgICogQHBhcmFtIHtzdHJpbmd9IG9mZnNldCB0aGUgYWRkaXRpb25hbCBvZmZzZXQgdG8gY2hlY2suCiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gYW4gRXJyb3IgaWYgdGhlIG9mZnNldCBpcyBvdXQgb2YgYm91bmRzLgogICAgICovCiAgICBjaGVja09mZnNldDogZnVuY3Rpb24ob2Zmc2V0KSB7CiAgICAgICAgdGhpcy5jaGVja0luZGV4KHRoaXMuaW5kZXggKyBvZmZzZXQpOwogICAgfSwKICAgIC8qKgogICAgICogQ2hlY2sgdGhhdCB0aGUgc3BlY2lmZWQgaW5kZXggd2lsbCBub3QgYmUgdG9vIGZhci4KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdJbmRleCB0aGUgaW5kZXggdG8gY2hlY2suCiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gYW4gRXJyb3IgaWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMuCiAgICAgKi8KICAgIGNoZWNrSW5kZXg6IGZ1bmN0aW9uKG5ld0luZGV4KSB7CiAgICAgICAgaWYgKHRoaXMubGVuZ3RoIDwgbmV3SW5kZXggfHwgbmV3SW5kZXggPCAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiRW5kIG9mIGRhdGEgcmVhY2hlZCAoZGF0YSBsZW5ndGggPSAiICsgdGhpcy5sZW5ndGggKyAiLCBhc2tlZCBpbmRleCA9ICIgKyAobmV3SW5kZXgpICsgIikuIENvcnJ1cHRlZCB6aXAgPyIpOwogICAgICAgIH0KICAgIH0sCiAgICAvKioKICAgICAqIENoYW5nZSB0aGUgaW5kZXguCiAgICAgKiBAcGFyYW0ge251bWJlcn0gbmV3SW5kZXggVGhlIG5ldyBpbmRleC4KICAgICAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgbmV3IGluZGV4IGlzIG91dCBvZiB0aGUgZGF0YS4KICAgICAqLwogICAgc2V0SW5kZXg6IGZ1bmN0aW9uKG5ld0luZGV4KSB7CiAgICAgICAgdGhpcy5jaGVja0luZGV4KG5ld0luZGV4KTsKICAgICAgICB0aGlzLmluZGV4ID0gbmV3SW5kZXg7CiAgICB9LAogICAgLyoqCiAgICAgKiBTa2lwIHRoZSBuZXh0IG4gYnl0ZXMuCiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAuCiAgICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIG5ldyBpbmRleCBpcyBvdXQgb2YgdGhlIGRhdGEuCiAgICAgKi8KICAgIHNraXA6IGZ1bmN0aW9uKG4pIHsKICAgICAgICB0aGlzLnNldEluZGV4KHRoaXMuaW5kZXggKyBuKTsKICAgIH0sCiAgICAvKioKICAgICAqIEdldCB0aGUgYnl0ZSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LgogICAgICogQHBhcmFtIHtudW1iZXJ9IGkgdGhlIGluZGV4IHRvIHVzZS4KICAgICAqIEByZXR1cm4ge251bWJlcn0gYSBieXRlLgogICAgICovCiAgICBieXRlQXQ6IGZ1bmN0aW9uKGkpIHsKICAgICAgICAvLyBzZWUgaW1wbGVtZW50YXRpb25zCiAgICB9LAogICAgLyoqCiAgICAgKiBHZXQgdGhlIG5leHQgbnVtYmVyIHdpdGggYSBnaXZlbiBieXRlIHNpemUuCiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuCiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBjb3JyZXNwb25kaW5nIG51bWJlci4KICAgICAqLwogICAgcmVhZEludDogZnVuY3Rpb24oc2l6ZSkgewogICAgICAgIHZhciByZXN1bHQgPSAwLAogICAgICAgICAgICBpOwogICAgICAgIHRoaXMuY2hlY2tPZmZzZXQoc2l6ZSk7CiAgICAgICAgZm9yIChpID0gdGhpcy5pbmRleCArIHNpemUgLSAxOyBpID49IHRoaXMuaW5kZXg7IGktLSkgewogICAgICAgICAgICByZXN1bHQgPSAocmVzdWx0IDw8IDgpICsgdGhpcy5ieXRlQXQoaSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuaW5kZXggKz0gc2l6ZTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfSwKICAgIC8qKgogICAgICogR2V0IHRoZSBuZXh0IHN0cmluZyB3aXRoIGEgZ2l2ZW4gYnl0ZSBzaXplLgogICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemUgdGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkLgogICAgICogQHJldHVybiB7c3RyaW5nfSB0aGUgY29ycmVzcG9uZGluZyBzdHJpbmcuCiAgICAgKi8KICAgIHJlYWRTdHJpbmc6IGZ1bmN0aW9uKHNpemUpIHsKICAgICAgICByZXR1cm4gdXRpbHMudHJhbnNmb3JtVG8oInN0cmluZyIsIHRoaXMucmVhZERhdGEoc2l6ZSkpOwogICAgfSwKICAgIC8qKgogICAgICogR2V0IHJhdyBkYXRhIHdpdGhvdXQgY29udmVyc2lvbiwgPHNpemU+IGJ5dGVzLgogICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemUgdGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkLgogICAgICogQHJldHVybiB7T2JqZWN0fSB0aGUgcmF3IGRhdGEsIGltcGxlbWVudGF0aW9uIHNwZWNpZmljLgogICAgICovCiAgICByZWFkRGF0YTogZnVuY3Rpb24oc2l6ZSkgewogICAgICAgIC8vIHNlZSBpbXBsZW1lbnRhdGlvbnMKICAgIH0sCiAgICAvKioKICAgICAqIEZpbmQgdGhlIGxhc3Qgb2NjdXJlbmNlIG9mIGEgemlwIHNpZ25hdHVyZSAoNCBieXRlcykuCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnIHRoZSBzaWduYXR1cmUgdG8gZmluZC4KICAgICAqIEByZXR1cm4ge251bWJlcn0gdGhlIGluZGV4IG9mIHRoZSBsYXN0IG9jY3VyZW5jZSwgLTEgaWYgbm90IGZvdW5kLgogICAgICovCiAgICBsYXN0SW5kZXhPZlNpZ25hdHVyZTogZnVuY3Rpb24oc2lnKSB7CiAgICAgICAgLy8gc2VlIGltcGxlbWVudGF0aW9ucwogICAgfSwKICAgIC8qKgogICAgICogR2V0IHRoZSBuZXh0IGRhdGUuCiAgICAgKiBAcmV0dXJuIHtEYXRlfSB0aGUgZGF0ZS4KICAgICAqLwogICAgcmVhZERhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBkb3N0aW1lID0gdGhpcy5yZWFkSW50KDQpOwogICAgICAgIHJldHVybiBuZXcgRGF0ZSgKICAgICAgICAoKGRvc3RpbWUgPj4gMjUpICYgMHg3ZikgKyAxOTgwLCAvLyB5ZWFyCiAgICAgICAgKChkb3N0aW1lID4+IDIxKSAmIDB4MGYpIC0gMSwgLy8gbW9udGgKICAgICAgICAoZG9zdGltZSA+PiAxNikgJiAweDFmLCAvLyBkYXkKICAgICAgICAoZG9zdGltZSA+PiAxMSkgJiAweDFmLCAvLyBob3VyCiAgICAgICAgKGRvc3RpbWUgPj4gNSkgJiAweDNmLCAvLyBtaW51dGUKICAgICAgICAoZG9zdGltZSAmIDB4MWYpIDw8IDEpOyAvLyBzZWNvbmQKICAgIH0KfTsKbW9kdWxlLmV4cG9ydHMgPSBEYXRhUmVhZGVyOwoKfSx7Ii4vdXRpbHMiOjIxfV0sNjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKZXhwb3J0cy5iYXNlNjQgPSBmYWxzZTsKZXhwb3J0cy5iaW5hcnkgPSBmYWxzZTsKZXhwb3J0cy5kaXIgPSBmYWxzZTsKZXhwb3J0cy5jcmVhdGVGb2xkZXJzID0gZmFsc2U7CmV4cG9ydHMuZGF0ZSA9IG51bGw7CmV4cG9ydHMuY29tcHJlc3Npb24gPSBudWxsOwpleHBvcnRzLmNvbXByZXNzaW9uT3B0aW9ucyA9IG51bGw7CmV4cG9ydHMuY29tbWVudCA9IG51bGw7CmV4cG9ydHMudW5peFBlcm1pc3Npb25zID0gbnVsbDsKZXhwb3J0cy5kb3NQZXJtaXNzaW9ucyA9IG51bGw7Cgp9LHt9XSw3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwp2YXIgdXRpbHMgPSBfZGVyZXFfKCcuL3V0aWxzJyk7CgovKioKICogQGRlcHJlY2F0ZWQKICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiB3aXRob3V0IHJlcGxhY2VtZW50LgogKi8KZXhwb3J0cy5zdHJpbmcyYmluYXJ5ID0gZnVuY3Rpb24oc3RyKSB7CiAgICByZXR1cm4gdXRpbHMuc3RyaW5nMmJpbmFyeShzdHIpOwp9OwoKLyoqCiAqIEBkZXByZWNhdGVkCiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gd2l0aG91dCByZXBsYWNlbWVudC4KICovCmV4cG9ydHMuc3RyaW5nMlVpbnQ4QXJyYXkgPSBmdW5jdGlvbihzdHIpIHsKICAgIHJldHVybiB1dGlscy50cmFuc2Zvcm1UbygidWludDhhcnJheSIsIHN0cik7Cn07CgovKioKICogQGRlcHJlY2F0ZWQKICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiB3aXRob3V0IHJlcGxhY2VtZW50LgogKi8KZXhwb3J0cy51aW50OEFycmF5MlN0cmluZyA9IGZ1bmN0aW9uKGFycmF5KSB7CiAgICByZXR1cm4gdXRpbHMudHJhbnNmb3JtVG8oInN0cmluZyIsIGFycmF5KTsKfTsKCi8qKgogKiBAZGVwcmVjYXRlZAogKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIHdpdGhvdXQgcmVwbGFjZW1lbnQuCiAqLwpleHBvcnRzLnN0cmluZzJCbG9iID0gZnVuY3Rpb24oc3RyKSB7CiAgICB2YXIgYnVmZmVyID0gdXRpbHMudHJhbnNmb3JtVG8oImFycmF5YnVmZmVyIiwgc3RyKTsKICAgIHJldHVybiB1dGlscy5hcnJheUJ1ZmZlcjJCbG9iKGJ1ZmZlcik7Cn07CgovKioKICogQGRlcHJlY2F0ZWQKICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiB3aXRob3V0IHJlcGxhY2VtZW50LgogKi8KZXhwb3J0cy5hcnJheUJ1ZmZlcjJCbG9iID0gZnVuY3Rpb24oYnVmZmVyKSB7CiAgICByZXR1cm4gdXRpbHMuYXJyYXlCdWZmZXIyQmxvYihidWZmZXIpOwp9OwoKLyoqCiAqIEBkZXByZWNhdGVkCiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gd2l0aG91dCByZXBsYWNlbWVudC4KICovCmV4cG9ydHMudHJhbnNmb3JtVG8gPSBmdW5jdGlvbihvdXRwdXRUeXBlLCBpbnB1dCkgewogICAgcmV0dXJuIHV0aWxzLnRyYW5zZm9ybVRvKG91dHB1dFR5cGUsIGlucHV0KTsKfTsKCi8qKgogKiBAZGVwcmVjYXRlZAogKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIHdpdGhvdXQgcmVwbGFjZW1lbnQuCiAqLwpleHBvcnRzLmdldFR5cGVPZiA9IGZ1bmN0aW9uKGlucHV0KSB7CiAgICByZXR1cm4gdXRpbHMuZ2V0VHlwZU9mKGlucHV0KTsKfTsKCi8qKgogKiBAZGVwcmVjYXRlZAogKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIHdpdGhvdXQgcmVwbGFjZW1lbnQuCiAqLwpleHBvcnRzLmNoZWNrU3VwcG9ydCA9IGZ1bmN0aW9uKHR5cGUpIHsKICAgIHJldHVybiB1dGlscy5jaGVja1N1cHBvcnQodHlwZSk7Cn07CgovKioKICogQGRlcHJlY2F0ZWQKICogVGhpcyB2YWx1ZSB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiB3aXRob3V0IHJlcGxhY2VtZW50LgogKi8KZXhwb3J0cy5NQVhfVkFMVUVfMTZCSVRTID0gdXRpbHMuTUFYX1ZBTFVFXzE2QklUUzsKCi8qKgogKiBAZGVwcmVjYXRlZAogKiBUaGlzIHZhbHVlIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIHdpdGhvdXQgcmVwbGFjZW1lbnQuCiAqLwpleHBvcnRzLk1BWF9WQUxVRV8zMkJJVFMgPSB1dGlscy5NQVhfVkFMVUVfMzJCSVRTOwoKCi8qKgogKiBAZGVwcmVjYXRlZAogKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIHdpdGhvdXQgcmVwbGFjZW1lbnQuCiAqLwpleHBvcnRzLnByZXR0eSA9IGZ1bmN0aW9uKHN0cikgewogICAgcmV0dXJuIHV0aWxzLnByZXR0eShzdHIpOwp9OwoKLyoqCiAqIEBkZXByZWNhdGVkCiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gd2l0aG91dCByZXBsYWNlbWVudC4KICovCmV4cG9ydHMuZmluZENvbXByZXNzaW9uID0gZnVuY3Rpb24oY29tcHJlc3Npb25NZXRob2QpIHsKICAgIHJldHVybiB1dGlscy5maW5kQ29tcHJlc3Npb24oY29tcHJlc3Npb25NZXRob2QpOwp9OwoKLyoqCiAqIEBkZXByZWNhdGVkCiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gd2l0aG91dCByZXBsYWNlbWVudC4KICovCmV4cG9ydHMuaXNSZWdFeHAgPSBmdW5jdGlvbiAob2JqZWN0KSB7CiAgICByZXR1cm4gdXRpbHMuaXNSZWdFeHAob2JqZWN0KTsKfTsKCgp9LHsiLi91dGlscyI6MjF9XSw4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwp2YXIgVVNFX1RZUEVEQVJSQVkgPSAodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnKSAmJiAodHlwZW9mIFVpbnQxNkFycmF5ICE9PSAndW5kZWZpbmVkJykgJiYgKHR5cGVvZiBVaW50MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcpOwoKdmFyIHBha28gPSBfZGVyZXFfKCJwYWtvIik7CmV4cG9ydHMudW5jb21wcmVzc0lucHV0VHlwZSA9IFVTRV9UWVBFREFSUkFZID8gInVpbnQ4YXJyYXkiIDogImFycmF5IjsKZXhwb3J0cy5jb21wcmVzc0lucHV0VHlwZSA9IFVTRV9UWVBFREFSUkFZID8gInVpbnQ4YXJyYXkiIDogImFycmF5IjsKCmV4cG9ydHMubWFnaWMgPSAiXHgwOFx4MDAiOwpleHBvcnRzLmNvbXByZXNzID0gZnVuY3Rpb24oaW5wdXQsIGNvbXByZXNzaW9uT3B0aW9ucykgewogICAgcmV0dXJuIHBha28uZGVmbGF0ZVJhdyhpbnB1dCwgewogICAgICAgIGxldmVsIDogY29tcHJlc3Npb25PcHRpb25zLmxldmVsIHx8IC0xIC8vIGRlZmF1bHQgY29tcHJlc3Npb24KICAgIH0pOwp9OwpleHBvcnRzLnVuY29tcHJlc3MgPSAgZnVuY3Rpb24oaW5wdXQpIHsKICAgIHJldHVybiBwYWtvLmluZmxhdGVSYXcoaW5wdXQpOwp9OwoKfSx7InBha28iOjI0fV0sOTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCnZhciBiYXNlNjQgPSBfZGVyZXFfKCcuL2Jhc2U2NCcpOwoKLyoqClVzYWdlOgogICB6aXAgPSBuZXcgSlNaaXAoKTsKICAgemlwLmZpbGUoImhlbGxvLnR4dCIsICJIZWxsbywgV29ybGQhIikuZmlsZSgidGVtcGZpbGUiLCAibm90aGluZyIpOwogICB6aXAuZm9sZGVyKCJpbWFnZXMiKS5maWxlKCJzbWlsZS5naWYiLCBiYXNlNjREYXRhLCB7YmFzZTY0OiB0cnVlfSk7CiAgIHppcC5maWxlKCJYbWFzLnR4dCIsICJIbyBobyBobyAhIiwge2RhdGUgOiBuZXcgRGF0ZSgiRGVjZW1iZXIgMjUsIDIwMDcgMDA6MDA6MDEiKX0pOwogICB6aXAucmVtb3ZlKCJ0ZW1wZmlsZSIpOwoKICAgYmFzZTY0emlwID0gemlwLmdlbmVyYXRlKCk7CgoqKi8KCi8qKgogKiBSZXByZXNlbnRhdGlvbiBhIG9mIHppcCBmaWxlIGluIGpzCiAqIEBjb25zdHJ1Y3RvcgogKiBAcGFyYW0ge1N0cmluZz18QXJyYXlCdWZmZXI9fFVpbnQ4QXJyYXk9fSBkYXRhIHRoZSBkYXRhIHRvIGxvYWQsIGlmIGFueSAob3B0aW9uYWwpLgogKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgdGhlIG9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoaXMgb2JqZWN0cyAob3B0aW9uYWwpLgogKi8KZnVuY3Rpb24gSlNaaXAoZGF0YSwgb3B0aW9ucykgewogICAgLy8gaWYgdGhpcyBjb25zdHJ1Y3RvciBpc8KgdXNlZCB3aXRob3V0wqBgbmV3YCwgaXTCoGFkZHMgYG5ld2AgYmVmb3JlwqBpdHNlbGY6CiAgICBpZighKHRoaXMgaW5zdGFuY2VvZiBKU1ppcCkpIHJldHVybiBuZXcgSlNaaXAoZGF0YSwgb3B0aW9ucyk7CgogICAgLy8gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbGVzIDoKICAgIC8vIHsKICAgIC8vICAgImZvbGRlci8iIDogey4uLn0sCiAgICAvLyAgICJmb2xkZXIvZGF0YS50eHQiIDogey4uLn0KICAgIC8vIH0KICAgIHRoaXMuZmlsZXMgPSB7fTsKCiAgICB0aGlzLmNvbW1lbnQgPSBudWxsOwoKICAgIC8vIFdoZXJlIHdlIGFyZSBpbiB0aGUgaGllcmFyY2h5CiAgICB0aGlzLnJvb3QgPSAiIjsKICAgIGlmIChkYXRhKSB7CiAgICAgICAgdGhpcy5sb2FkKGRhdGEsIG9wdGlvbnMpOwogICAgfQogICAgdGhpcy5jbG9uZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBuZXdPYmogPSBuZXcgSlNaaXAoKTsKICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMpIHsKICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzW2ldICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICBuZXdPYmpbaV0gPSB0aGlzW2ldOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXdPYmo7CiAgICB9Owp9CkpTWmlwLnByb3RvdHlwZSA9IF9kZXJlcV8oJy4vb2JqZWN0Jyk7CkpTWmlwLnByb3RvdHlwZS5sb2FkID0gX2RlcmVxXygnLi9sb2FkJyk7CkpTWmlwLnN1cHBvcnQgPSBfZGVyZXFfKCcuL3N1cHBvcnQnKTsKSlNaaXAuZGVmYXVsdHMgPSBfZGVyZXFfKCcuL2RlZmF1bHRzJyk7CgovKioKICogQGRlcHJlY2F0ZWQKICogVGhpcyBuYW1lc3BhY2Ugd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gd2l0aG91dCByZXBsYWNlbWVudC4KICovCkpTWmlwLnV0aWxzID0gX2RlcmVxXygnLi9kZXByZWNhdGVkUHVibGljVXRpbHMnKTsKCkpTWmlwLmJhc2U2NCA9IHsKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQKICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIHdpdGhvdXQgcmVwbGFjZW1lbnQuCiAgICAgKi8KICAgIGVuY29kZSA6IGZ1bmN0aW9uKGlucHV0KSB7CiAgICAgICAgcmV0dXJuIGJhc2U2NC5lbmNvZGUoaW5wdXQpOwogICAgfSwKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQKICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIHdpdGhvdXQgcmVwbGFjZW1lbnQuCiAgICAgKi8KICAgIGRlY29kZSA6IGZ1bmN0aW9uKGlucHV0KSB7CiAgICAgICAgcmV0dXJuIGJhc2U2NC5kZWNvZGUoaW5wdXQpOwogICAgfQp9OwpKU1ppcC5jb21wcmVzc2lvbnMgPSBfZGVyZXFfKCcuL2NvbXByZXNzaW9ucycpOwptb2R1bGUuZXhwb3J0cyA9IEpTWmlwOwoKfSx7Ii4vYmFzZTY0IjoxLCIuL2NvbXByZXNzaW9ucyI6MywiLi9kZWZhdWx0cyI6NiwiLi9kZXByZWNhdGVkUHVibGljVXRpbHMiOjcsIi4vbG9hZCI6MTAsIi4vb2JqZWN0IjoxMywiLi9zdXBwb3J0IjoxN31dLDEwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwp2YXIgYmFzZTY0ID0gX2RlcmVxXygnLi9iYXNlNjQnKTsKdmFyIFppcEVudHJpZXMgPSBfZGVyZXFfKCcuL3ppcEVudHJpZXMnKTsKbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkYXRhLCBvcHRpb25zKSB7CiAgICB2YXIgZmlsZXMsIHppcEVudHJpZXMsIGksIGlucHV0OwogICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICBpZiAob3B0aW9ucy5iYXNlNjQpIHsKICAgICAgICBkYXRhID0gYmFzZTY0LmRlY29kZShkYXRhKTsKICAgIH0KCiAgICB6aXBFbnRyaWVzID0gbmV3IFppcEVudHJpZXMoZGF0YSwgb3B0aW9ucyk7CiAgICBmaWxlcyA9IHppcEVudHJpZXMuZmlsZXM7CiAgICBmb3IgKGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpbnB1dCA9IGZpbGVzW2ldOwogICAgICAgIHRoaXMuZmlsZShpbnB1dC5maWxlTmFtZSwgaW5wdXQuZGVjb21wcmVzc2VkLCB7CiAgICAgICAgICAgIGJpbmFyeTogdHJ1ZSwKICAgICAgICAgICAgb3B0aW1pemVkQmluYXJ5U3RyaW5nOiB0cnVlLAogICAgICAgICAgICBkYXRlOiBpbnB1dC5kYXRlLAogICAgICAgICAgICBkaXI6IGlucHV0LmRpciwKICAgICAgICAgICAgY29tbWVudCA6IGlucHV0LmZpbGVDb21tZW50Lmxlbmd0aCA/IGlucHV0LmZpbGVDb21tZW50IDogbnVsbCwKICAgICAgICAgICAgdW5peFBlcm1pc3Npb25zIDogaW5wdXQudW5peFBlcm1pc3Npb25zLAogICAgICAgICAgICBkb3NQZXJtaXNzaW9ucyA6IGlucHV0LmRvc1Blcm1pc3Npb25zLAogICAgICAgICAgICBjcmVhdGVGb2xkZXJzOiBvcHRpb25zLmNyZWF0ZUZvbGRlcnMKICAgICAgICB9KTsKICAgIH0KICAgIGlmICh6aXBFbnRyaWVzLnppcENvbW1lbnQubGVuZ3RoKSB7CiAgICAgICAgdGhpcy5jb21tZW50ID0gemlwRW50cmllcy56aXBDb21tZW50OwogICAgfQoKICAgIHJldHVybiB0aGlzOwp9OwoKfSx7Ii4vYmFzZTY0IjoxLCIuL3ppcEVudHJpZXMiOjIyfV0sMTE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewooZnVuY3Rpb24gKEJ1ZmZlcil7Cid1c2Ugc3RyaWN0JzsKbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkYXRhLCBlbmNvZGluZyl7CiAgICByZXR1cm4gbmV3IEJ1ZmZlcihkYXRhLCBlbmNvZGluZyk7Cn07Cm1vZHVsZS5leHBvcnRzLnRlc3QgPSBmdW5jdGlvbihiKXsKICAgIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoYik7Cn07Cgp9KS5jYWxsKHRoaXMsKHR5cGVvZiBCdWZmZXIgIT09ICJ1bmRlZmluZWQiID8gQnVmZmVyIDogdW5kZWZpbmVkKSkKfSx7fV0sMTI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7CnZhciBVaW50OEFycmF5UmVhZGVyID0gX2RlcmVxXygnLi91aW50OEFycmF5UmVhZGVyJyk7CgpmdW5jdGlvbiBOb2RlQnVmZmVyUmVhZGVyKGRhdGEpIHsKICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICB0aGlzLmxlbmd0aCA9IHRoaXMuZGF0YS5sZW5ndGg7CiAgICB0aGlzLmluZGV4ID0gMDsKfQpOb2RlQnVmZmVyUmVhZGVyLnByb3RvdHlwZSA9IG5ldyBVaW50OEFycmF5UmVhZGVyKCk7CgovKioKICogQHNlZSBEYXRhUmVhZGVyLnJlYWREYXRhCiAqLwpOb2RlQnVmZmVyUmVhZGVyLnByb3RvdHlwZS5yZWFkRGF0YSA9IGZ1bmN0aW9uKHNpemUpIHsKICAgIHRoaXMuY2hlY2tPZmZzZXQoc2l6ZSk7CiAgICB2YXIgcmVzdWx0ID0gdGhpcy5kYXRhLnNsaWNlKHRoaXMuaW5kZXgsIHRoaXMuaW5kZXggKyBzaXplKTsKICAgIHRoaXMuaW5kZXggKz0gc2l6ZTsKICAgIHJldHVybiByZXN1bHQ7Cn07Cm1vZHVsZS5leHBvcnRzID0gTm9kZUJ1ZmZlclJlYWRlcjsKCn0seyIuL3VpbnQ4QXJyYXlSZWFkZXIiOjE4fV0sMTM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7CnZhciBzdXBwb3J0ID0gX2RlcmVxXygnLi9zdXBwb3J0Jyk7CnZhciB1dGlscyA9IF9kZXJlcV8oJy4vdXRpbHMnKTsKdmFyIGNyYzMyID0gX2RlcmVxXygnLi9jcmMzMicpOwp2YXIgc2lnbmF0dXJlID0gX2RlcmVxXygnLi9zaWduYXR1cmUnKTsKdmFyIGRlZmF1bHRzID0gX2RlcmVxXygnLi9kZWZhdWx0cycpOwp2YXIgYmFzZTY0ID0gX2RlcmVxXygnLi9iYXNlNjQnKTsKdmFyIGNvbXByZXNzaW9ucyA9IF9kZXJlcV8oJy4vY29tcHJlc3Npb25zJyk7CnZhciBDb21wcmVzc2VkT2JqZWN0ID0gX2RlcmVxXygnLi9jb21wcmVzc2VkT2JqZWN0Jyk7CnZhciBub2RlQnVmZmVyID0gX2RlcmVxXygnLi9ub2RlQnVmZmVyJyk7CnZhciB1dGY4ID0gX2RlcmVxXygnLi91dGY4Jyk7CnZhciBTdHJpbmdXcml0ZXIgPSBfZGVyZXFfKCcuL3N0cmluZ1dyaXRlcicpOwp2YXIgVWludDhBcnJheVdyaXRlciA9IF9kZXJlcV8oJy4vdWludDhBcnJheVdyaXRlcicpOwoKLyoqCiAqIFJldHVybnMgdGhlIHJhdyBkYXRhIG9mIGEgWmlwT2JqZWN0LCBkZWNvbXByZXNzIHRoZSBjb250ZW50IGlmIG5lY2Vzc2FyeS4KICogQHBhcmFtIHtaaXBPYmplY3R9IGZpbGUgdGhlIGZpbGUgdG8gdXNlLgogKiBAcmV0dXJuIHtTdHJpbmd8QXJyYXlCdWZmZXJ8VWludDhBcnJheXxCdWZmZXJ9IHRoZSBkYXRhLgogKi8KdmFyIGdldFJhd0RhdGEgPSBmdW5jdGlvbihmaWxlKSB7CiAgICBpZiAoZmlsZS5fZGF0YSBpbnN0YW5jZW9mIENvbXByZXNzZWRPYmplY3QpIHsKICAgICAgICBmaWxlLl9kYXRhID0gZmlsZS5fZGF0YS5nZXRDb250ZW50KCk7CiAgICAgICAgZmlsZS5vcHRpb25zLmJpbmFyeSA9IHRydWU7CiAgICAgICAgZmlsZS5vcHRpb25zLmJhc2U2NCA9IGZhbHNlOwoKICAgICAgICBpZiAodXRpbHMuZ2V0VHlwZU9mKGZpbGUuX2RhdGEpID09PSAidWludDhhcnJheSIpIHsKICAgICAgICAgICAgdmFyIGNvcHkgPSBmaWxlLl9kYXRhOwogICAgICAgICAgICAvLyB3aGVuIHJlYWRpbmcgYW4gYXJyYXlidWZmZXIsIHRoZSBDb21wcmVzc2VkT2JqZWN0IG1lY2hhbmlzbSB3aWxsIGtlZXAgaXQgYW5kIHN1YmFycmF5KCkgYSBVaW50OEFycmF5LgogICAgICAgICAgICAvLyBpZiB3ZSByZXF1ZXN0IGEgZmlsZSBpbiB0aGUgc2FtZSBmb3JtYXQsIHdlIG1pZ2h0IGdldCB0aGUgc2FtZSBVaW50OEFycmF5IG9yIGl0cyBBcnJheUJ1ZmZlciAodGhlIG9yaWdpbmFsIHppcCBmaWxlKS4KICAgICAgICAgICAgZmlsZS5fZGF0YSA9IG5ldyBVaW50OEFycmF5KGNvcHkubGVuZ3RoKTsKICAgICAgICAgICAgLy8gd2l0aCBhbiBlbXB0eSBVaW50OEFycmF5LCBPcGVyYSBmYWlscyB3aXRoIGEgIk9mZnNldCBsYXJnZXIgdGhhbiBhcnJheSBzaXplIgogICAgICAgICAgICBpZiAoY29weS5sZW5ndGggIT09IDApIHsKICAgICAgICAgICAgICAgIGZpbGUuX2RhdGEuc2V0KGNvcHksIDApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGZpbGUuX2RhdGE7Cn07CgovKioKICogUmV0dXJucyB0aGUgZGF0YSBvZiBhIFppcE9iamVjdCBpbiBhIGJpbmFyeSBmb3JtLiBJZiB0aGUgY29udGVudCBpcyBhbiB1bmljb2RlIHN0cmluZywgZW5jb2RlIGl0LgogKiBAcGFyYW0ge1ppcE9iamVjdH0gZmlsZSB0aGUgZmlsZSB0byB1c2UuCiAqIEByZXR1cm4ge1N0cmluZ3xBcnJheUJ1ZmZlcnxVaW50OEFycmF5fEJ1ZmZlcn0gdGhlIGRhdGEuCiAqLwp2YXIgZ2V0QmluYXJ5RGF0YSA9IGZ1bmN0aW9uKGZpbGUpIHsKICAgIHZhciByZXN1bHQgPSBnZXRSYXdEYXRhKGZpbGUpLAogICAgICAgIHR5cGUgPSB1dGlscy5nZXRUeXBlT2YocmVzdWx0KTsKICAgIGlmICh0eXBlID09PSAic3RyaW5nIikgewogICAgICAgIGlmICghZmlsZS5vcHRpb25zLmJpbmFyeSkgewogICAgICAgICAgICAvLyB1bmljb2RlIHRleHQgIQogICAgICAgICAgICAvLyB1bmljb2RlIHN0cmluZyA9PiBiaW5hcnkgc3RyaW5nIGlzIGEgcGFpbmZ1bCBwcm9jZXNzLCBjaGVjayBpZiB3ZSBjYW4gYXZvaWQgaXQuCiAgICAgICAgICAgIGlmIChzdXBwb3J0Lm5vZGVidWZmZXIpIHsKICAgICAgICAgICAgICAgIHJldHVybiBub2RlQnVmZmVyKHJlc3VsdCwgInV0Zi04Iik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZpbGUuYXNCaW5hcnkoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7Cn07CgovKioKICogVHJhbnNmb3JtIHRoaXMuX2RhdGEgaW50byBhIHN0cmluZy4KICogQHBhcmFtIHtmdW5jdGlvbn0gZmlsdGVyIGEgZnVuY3Rpb24gU3RyaW5nIC0+IFN0cmluZywgYXBwbGllZCBpZiBub3QgbnVsbCBvbiB0aGUgcmVzdWx0LgogKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoaXMuX2RhdGEuCiAqLwp2YXIgZGF0YVRvU3RyaW5nID0gZnVuY3Rpb24oYXNVVEY4KSB7CiAgICB2YXIgcmVzdWx0ID0gZ2V0UmF3RGF0YSh0aGlzKTsKICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICByZXR1cm4gIiI7CiAgICB9CiAgICAvLyBpZiB0aGUgZGF0YSBpcyBhIGJhc2U2NCBzdHJpbmcsIHdlIGRlY29kZSBpdCBiZWZvcmUgY2hlY2tpbmcgdGhlIGVuY29kaW5nICEKICAgIGlmICh0aGlzLm9wdGlvbnMuYmFzZTY0KSB7CiAgICAgICAgcmVzdWx0ID0gYmFzZTY0LmRlY29kZShyZXN1bHQpOwogICAgfQogICAgaWYgKGFzVVRGOCAmJiB0aGlzLm9wdGlvbnMuYmluYXJ5KSB7CiAgICAgICAgLy8gSlNaaXAucHJvdG90eXBlLnV0ZjhkZWNvZGUgc3VwcG9ydHMgYXJyYXlzIGFzIGlucHV0CiAgICAgICAgLy8gc2tpcCB0byBhcnJheSA9PiBzdHJpbmcgc3RlcCwgdXRmOGRlY29kZSB3aWxsIGRvIGl0LgogICAgICAgIHJlc3VsdCA9IG91dC51dGY4ZGVjb2RlKHJlc3VsdCk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAvLyBubyB1dGY4IHRyYW5zZm9ybWF0aW9uLCBkbyB0aGUgYXJyYXkgPT4gc3RyaW5nIHN0ZXAuCiAgICAgICAgcmVzdWx0ID0gdXRpbHMudHJhbnNmb3JtVG8oInN0cmluZyIsIHJlc3VsdCk7CiAgICB9CgogICAgaWYgKCFhc1VURjggJiYgIXRoaXMub3B0aW9ucy5iaW5hcnkpIHsKICAgICAgICByZXN1bHQgPSB1dGlscy50cmFuc2Zvcm1Ubygic3RyaW5nIiwgb3V0LnV0ZjhlbmNvZGUocmVzdWx0KSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0Owp9OwovKioKICogQSBzaW1wbGUgb2JqZWN0IHJlcHJlc2VudGluZyBhIGZpbGUgaW4gdGhlIHppcCBmaWxlLgogKiBAY29uc3RydWN0b3IKICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIGZpbGUKICogQHBhcmFtIHtTdHJpbmd8QXJyYXlCdWZmZXJ8VWludDhBcnJheXxCdWZmZXJ9IGRhdGEgdGhlIGRhdGEKICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgdGhlIG9wdGlvbnMgb2YgdGhlIGZpbGUKICovCnZhciBaaXBPYmplY3QgPSBmdW5jdGlvbihuYW1lLCBkYXRhLCBvcHRpb25zKSB7CiAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgdGhpcy5kaXIgPSBvcHRpb25zLmRpcjsKICAgIHRoaXMuZGF0ZSA9IG9wdGlvbnMuZGF0ZTsKICAgIHRoaXMuY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDsKICAgIHRoaXMudW5peFBlcm1pc3Npb25zID0gb3B0aW9ucy51bml4UGVybWlzc2lvbnM7CiAgICB0aGlzLmRvc1Blcm1pc3Npb25zID0gb3B0aW9ucy5kb3NQZXJtaXNzaW9uczsKCiAgICB0aGlzLl9kYXRhID0gZGF0YTsKICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CgogICAgLyoKICAgICAqIFRoaXMgb2JqZWN0IGNvbnRhaW5zIGluaXRpYWwgdmFsdWVzIGZvciBkaXIgYW5kIGRhdGUuCiAgICAgKiBXaXRoIHRoZW0sIHdlIGNhbiBjaGVjayBpZiB0aGUgdXNlciBjaGFuZ2VkIHRoZSBkZXByZWNhdGVkIG1ldGFkYXRhIGluCiAgICAgKiBgWmlwT2JqZWN0I29wdGlvbnNgIG9yIG5vdC4KICAgICAqLwogICAgdGhpcy5faW5pdGlhbE1ldGFkYXRhID0gewogICAgICBkaXIgOiBvcHRpb25zLmRpciwKICAgICAgZGF0ZSA6IG9wdGlvbnMuZGF0ZQogICAgfTsKfTsKClppcE9iamVjdC5wcm90b3R5cGUgPSB7CiAgICAvKioKICAgICAqIFJldHVybiB0aGUgY29udGVudCBhcyBVVEY4IHN0cmluZy4KICAgICAqIEByZXR1cm4ge3N0cmluZ30gdGhlIFVURjggc3RyaW5nLgogICAgICovCiAgICBhc1RleHQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBkYXRhVG9TdHJpbmcuY2FsbCh0aGlzLCB0cnVlKTsKICAgIH0sCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGJpbmFyeSBjb250ZW50LgogICAgICogQHJldHVybiB7c3RyaW5nfSB0aGUgY29udGVudCBhcyBiaW5hcnkuCiAgICAgKi8KICAgIGFzQmluYXJ5OiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gZGF0YVRvU3RyaW5nLmNhbGwodGhpcywgZmFsc2UpOwogICAgfSwKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY29udGVudCBhcyBhIG5vZGVqcyBCdWZmZXIuCiAgICAgKiBAcmV0dXJuIHtCdWZmZXJ9IHRoZSBjb250ZW50IGFzIGEgQnVmZmVyLgogICAgICovCiAgICBhc05vZGVCdWZmZXI6IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciByZXN1bHQgPSBnZXRCaW5hcnlEYXRhKHRoaXMpOwogICAgICAgIHJldHVybiB1dGlscy50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIsIHJlc3VsdCk7CiAgICB9LAogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBjb250ZW50IGFzIGFuIFVpbnQ4QXJyYXkuCiAgICAgKiBAcmV0dXJuIHtVaW50OEFycmF5fSB0aGUgY29udGVudCBhcyBhbiBVaW50OEFycmF5LgogICAgICovCiAgICBhc1VpbnQ4QXJyYXk6IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciByZXN1bHQgPSBnZXRCaW5hcnlEYXRhKHRoaXMpOwogICAgICAgIHJldHVybiB1dGlscy50cmFuc2Zvcm1UbygidWludDhhcnJheSIsIHJlc3VsdCk7CiAgICB9LAogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBjb250ZW50IGFzIGFuIEFycmF5QnVmZmVyLgogICAgICogQHJldHVybiB7QXJyYXlCdWZmZXJ9IHRoZSBjb250ZW50IGFzIGFuIEFycmF5QnVmZXIuCiAgICAgKi8KICAgIGFzQXJyYXlCdWZmZXI6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmFzVWludDhBcnJheSgpLmJ1ZmZlcjsKICAgIH0KfTsKCi8qKgogKiBUcmFuc2Zvcm0gYW4gaW50ZWdlciBpbnRvIGEgc3RyaW5nIGluIGhleGFkZWNpbWFsLgogKiBAcHJpdmF0ZQogKiBAcGFyYW0ge251bWJlcn0gZGVjIHRoZSBudW1iZXIgdG8gY29udmVydC4KICogQHBhcmFtIHtudW1iZXJ9IGJ5dGVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gZ2VuZXJhdGUuCiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSByZXN1bHQuCiAqLwp2YXIgZGVjVG9IZXggPSBmdW5jdGlvbihkZWMsIGJ5dGVzKSB7CiAgICB2YXIgaGV4ID0gIiIsCiAgICAgICAgaTsKICAgIGZvciAoaSA9IDA7IGkgPCBieXRlczsgaSsrKSB7CiAgICAgICAgaGV4ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoZGVjICYgMHhmZik7CiAgICAgICAgZGVjID0gZGVjID4+PiA4OwogICAgfQogICAgcmV0dXJuIGhleDsKfTsKCi8qKgogKiBNZXJnZSB0aGUgb2JqZWN0cyBwYXNzZWQgYXMgcGFyYW1ldGVycyBpbnRvIGEgbmV3IG9uZS4KICogQHByaXZhdGUKICogQHBhcmFtIHsuLi5PYmplY3R9IHZhcl9hcmdzIEFsbCBvYmplY3RzIHRvIG1lcmdlLgogKiBAcmV0dXJuIHtPYmplY3R9IGEgbmV3IG9iamVjdCB3aXRoIHRoZSBkYXRhIG9mIHRoZSBvdGhlcnMuCiAqLwp2YXIgZXh0ZW5kID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgcmVzdWx0ID0ge30sIGksIGF0dHI7CiAgICBmb3IgKGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IC8vIGFyZ3VtZW50cyBpcyBub3QgZW51bWVyYWJsZSBpbiBzb21lIGJyb3dzZXJzCiAgICAgICAgZm9yIChhdHRyIGluIGFyZ3VtZW50c1tpXSkgewogICAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldLmhhc093blByb3BlcnR5KGF0dHIpICYmIHR5cGVvZiByZXN1bHRbYXR0cl0gPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICByZXN1bHRbYXR0cl0gPSBhcmd1bWVudHNbaV1bYXR0cl07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0Owp9OwoKLyoqCiAqIFRyYW5zZm9ybXMgdGhlIChpbmNvbXBsZXRlKSBvcHRpb25zIGZyb20gdGhlIHVzZXIgaW50byB0aGUgY29tcGxldGUKICogc2V0IG9mIG9wdGlvbnMgdG8gY3JlYXRlIGEgZmlsZS4KICogQHByaXZhdGUKICogQHBhcmFtIHtPYmplY3R9IG8gdGhlIG9wdGlvbnMgZnJvbSB0aGUgdXNlci4KICogQHJldHVybiB7T2JqZWN0fSB0aGUgY29tcGxldGUgc2V0IG9mIG9wdGlvbnMuCiAqLwp2YXIgcHJlcGFyZUZpbGVBdHRycyA9IGZ1bmN0aW9uKG8pIHsKICAgIG8gPSBvIHx8IHt9OwogICAgaWYgKG8uYmFzZTY0ID09PSB0cnVlICYmIChvLmJpbmFyeSA9PT0gbnVsbCB8fCBvLmJpbmFyeSA9PT0gdW5kZWZpbmVkKSkgewogICAgICAgIG8uYmluYXJ5ID0gdHJ1ZTsKICAgIH0KICAgIG8gPSBleHRlbmQobywgZGVmYXVsdHMpOwogICAgby5kYXRlID0gby5kYXRlIHx8IG5ldyBEYXRlKCk7CiAgICBpZiAoby5jb21wcmVzc2lvbiAhPT0gbnVsbCkgby5jb21wcmVzc2lvbiA9IG8uY29tcHJlc3Npb24udG9VcHBlckNhc2UoKTsKCiAgICByZXR1cm4gbzsKfTsKCi8qKgogKiBBZGQgYSBmaWxlIGluIHRoZSBjdXJyZW50IGZvbGRlci4KICogQHByaXZhdGUKICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIGZpbGUKICogQHBhcmFtIHtTdHJpbmd8QXJyYXlCdWZmZXJ8VWludDhBcnJheXxCdWZmZXJ9IGRhdGEgdGhlIGRhdGEgb2YgdGhlIGZpbGUKICogQHBhcmFtIHtPYmplY3R9IG8gdGhlIG9wdGlvbnMgb2YgdGhlIGZpbGUKICogQHJldHVybiB7T2JqZWN0fSB0aGUgbmV3IGZpbGUuCiAqLwp2YXIgZmlsZUFkZCA9IGZ1bmN0aW9uKG5hbWUsIGRhdGEsIG8pIHsKICAgIC8vIGJlIHN1cmUgc3ViIGZvbGRlcnMgZXhpc3QKICAgIHZhciBkYXRhVHlwZSA9IHV0aWxzLmdldFR5cGVPZihkYXRhKSwKICAgICAgICBwYXJlbnQ7CgogICAgbyA9IHByZXBhcmVGaWxlQXR0cnMobyk7CgogICAgaWYgKHR5cGVvZiBvLnVuaXhQZXJtaXNzaW9ucyA9PT0gInN0cmluZyIpIHsKICAgICAgICBvLnVuaXhQZXJtaXNzaW9ucyA9IHBhcnNlSW50KG8udW5peFBlcm1pc3Npb25zLCA4KTsKICAgIH0KCiAgICAvLyBVTlhfSUZESVIgIDAwNDAwMDAgc2VlIHppcGluZm8uYwogICAgaWYgKG8udW5peFBlcm1pc3Npb25zICYmIChvLnVuaXhQZXJtaXNzaW9ucyAmIDB4NDAwMCkpIHsKICAgICAgICBvLmRpciA9IHRydWU7CiAgICB9CiAgICAvLyBCaXQgNCAgICBEaXJlY3RvcnkKICAgIGlmIChvLmRvc1Blcm1pc3Npb25zICYmIChvLmRvc1Blcm1pc3Npb25zICYgMHgwMDEwKSkgewogICAgICAgIG8uZGlyID0gdHJ1ZTsKICAgIH0KCiAgICBpZiAoby5kaXIpIHsKICAgICAgICBuYW1lID0gZm9yY2VUcmFpbGluZ1NsYXNoKG5hbWUpOwogICAgfQoKICAgIGlmIChvLmNyZWF0ZUZvbGRlcnMgJiYgKHBhcmVudCA9IHBhcmVudEZvbGRlcihuYW1lKSkpIHsKICAgICAgICBmb2xkZXJBZGQuY2FsbCh0aGlzLCBwYXJlbnQsIHRydWUpOwogICAgfQoKICAgIGlmIChvLmRpciB8fCBkYXRhID09PSBudWxsIHx8IHR5cGVvZiBkYXRhID09PSAidW5kZWZpbmVkIikgewogICAgICAgIG8uYmFzZTY0ID0gZmFsc2U7CiAgICAgICAgby5iaW5hcnkgPSBmYWxzZTsKICAgICAgICBkYXRhID0gbnVsbDsKICAgICAgICBkYXRhVHlwZSA9IG51bGw7CiAgICB9CiAgICBlbHNlIGlmIChkYXRhVHlwZSA9PT0gInN0cmluZyIpIHsKICAgICAgICBpZiAoby5iaW5hcnkgJiYgIW8uYmFzZTY0KSB7CiAgICAgICAgICAgIC8vIG9wdGltaXplZEJpbmFyeVN0cmluZyA9PSB0cnVlIG1lYW5zIHRoYXQgdGhlIGZpbGUgaGFzIGFscmVhZHkgYmVlbiBmaWx0ZXJlZCB3aXRoIGEgMHhGRiBtYXNrCiAgICAgICAgICAgIGlmIChvLm9wdGltaXplZEJpbmFyeVN0cmluZyAhPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBhIHN0cmluZywgbm90IGluIGEgYmFzZTY0IGZvcm1hdC4KICAgICAgICAgICAgICAgIC8vIEJlIHN1cmUgdGhhdCB0aGlzIGlzIGEgY29ycmVjdCAiYmluYXJ5IHN0cmluZyIKICAgICAgICAgICAgICAgIGRhdGEgPSB1dGlscy5zdHJpbmcyYmluYXJ5KGRhdGEpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZWxzZSB7IC8vIGFycmF5YnVmZmVyLCB1aW50OGFycmF5LCAuLi4KICAgICAgICBvLmJhc2U2NCA9IGZhbHNlOwogICAgICAgIG8uYmluYXJ5ID0gdHJ1ZTsKCiAgICAgICAgaWYgKCFkYXRhVHlwZSAmJiAhKGRhdGEgaW5zdGFuY2VvZiBDb21wcmVzc2VkT2JqZWN0KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRoZSBkYXRhIG9mICciICsgbmFtZSArICInIGlzIGluIGFuIHVuc3VwcG9ydGVkIGZvcm1hdCAhIik7CiAgICAgICAgfQoKICAgICAgICAvLyBzcGVjaWFsIGNhc2UgOiBpdCdzIHdheSBlYXNpZXIgdG8gd29yayB3aXRoIFVpbnQ4QXJyYXkgdGhhbiB3aXRoIEFycmF5QnVmZmVyCiAgICAgICAgaWYgKGRhdGFUeXBlID09PSAiYXJyYXlidWZmZXIiKSB7CiAgICAgICAgICAgIGRhdGEgPSB1dGlscy50cmFuc2Zvcm1UbygidWludDhhcnJheSIsIGRhdGEpOwogICAgICAgIH0KICAgIH0KCiAgICB2YXIgb2JqZWN0ID0gbmV3IFppcE9iamVjdChuYW1lLCBkYXRhLCBvKTsKICAgIHRoaXMuZmlsZXNbbmFtZV0gPSBvYmplY3Q7CiAgICByZXR1cm4gb2JqZWN0Owp9OwoKLyoqCiAqIEZpbmQgdGhlIHBhcmVudCBmb2xkZXIgb2YgdGhlIHBhdGguCiAqIEBwcml2YXRlCiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIHRoZSBwYXRoIHRvIHVzZQogKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBwYXJlbnQgZm9sZGVyLCBvciAiIgogKi8KdmFyIHBhcmVudEZvbGRlciA9IGZ1bmN0aW9uIChwYXRoKSB7CiAgICBpZiAocGF0aC5zbGljZSgtMSkgPT0gJy8nKSB7CiAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGVuZ3RoIC0gMSk7CiAgICB9CiAgICB2YXIgbGFzdFNsYXNoID0gcGF0aC5sYXN0SW5kZXhPZignLycpOwogICAgcmV0dXJuIChsYXN0U2xhc2ggPiAwKSA/IHBhdGguc3Vic3RyaW5nKDAsIGxhc3RTbGFzaCkgOiAiIjsKfTsKCgovKioKICogUmV0dXJucyB0aGUgcGF0aCB3aXRoIGEgc2xhc2ggYXQgdGhlIGVuZC4KICogQHByaXZhdGUKICogQHBhcmFtIHtTdHJpbmd9IHBhdGggdGhlIHBhdGggdG8gY2hlY2suCiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIHBhdGggd2l0aCBhIHRyYWlsaW5nIHNsYXNoLgogKi8KdmFyIGZvcmNlVHJhaWxpbmdTbGFzaCA9IGZ1bmN0aW9uKHBhdGgpIHsKICAgIC8vIENoZWNrIHRoZSBuYW1lIGVuZHMgd2l0aCBhIC8KICAgIGlmIChwYXRoLnNsaWNlKC0xKSAhPSAiLyIpIHsKICAgICAgICBwYXRoICs9ICIvIjsgLy8gSUUgZG9lc24ndCBsaWtlIHN1YnN0cigtMSkKICAgIH0KICAgIHJldHVybiBwYXRoOwp9OwovKioKICogQWRkIGEgKHN1YikgZm9sZGVyIGluIHRoZSBjdXJyZW50IGZvbGRlci4KICogQHByaXZhdGUKICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhlIGZvbGRlcidzIG5hbWUKICogQHBhcmFtIHtib29sZWFuPX0gW2NyZWF0ZUZvbGRlcnNdIElmIHRydWUsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIHN1YgogKiAgZm9sZGVycy4gRGVmYXVsdHMgdG8gZmFsc2UuCiAqIEByZXR1cm4ge09iamVjdH0gdGhlIG5ldyBmb2xkZXIuCiAqLwp2YXIgZm9sZGVyQWRkID0gZnVuY3Rpb24obmFtZSwgY3JlYXRlRm9sZGVycykgewogICAgY3JlYXRlRm9sZGVycyA9ICh0eXBlb2YgY3JlYXRlRm9sZGVycyAhPT0gJ3VuZGVmaW5lZCcpID8gY3JlYXRlRm9sZGVycyA6IGZhbHNlOwoKICAgIG5hbWUgPSBmb3JjZVRyYWlsaW5nU2xhc2gobmFtZSk7CgogICAgLy8gRG9lcyB0aGlzIGZvbGRlciBhbHJlYWR5IGV4aXN0PwogICAgaWYgKCF0aGlzLmZpbGVzW25hbWVdKSB7CiAgICAgICAgZmlsZUFkZC5jYWxsKHRoaXMsIG5hbWUsIG51bGwsIHsKICAgICAgICAgICAgZGlyOiB0cnVlLAogICAgICAgICAgICBjcmVhdGVGb2xkZXJzOiBjcmVhdGVGb2xkZXJzCiAgICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gdGhpcy5maWxlc1tuYW1lXTsKfTsKCi8qKgogKiBHZW5lcmF0ZSBhIEpTWmlwLkNvbXByZXNzZWRPYmplY3QgZm9yIGEgZ2l2ZW4gemlwT2plY3QuCiAqIEBwYXJhbSB7WmlwT2JqZWN0fSBmaWxlIHRoZSBvYmplY3QgdG8gcmVhZC4KICogQHBhcmFtIHtKU1ppcC5jb21wcmVzc2lvbn0gY29tcHJlc3Npb24gdGhlIGNvbXByZXNzaW9uIHRvIHVzZS4KICogQHBhcmFtIHtPYmplY3R9IGNvbXByZXNzaW9uT3B0aW9ucyB0aGUgb3B0aW9ucyB0byB1c2Ugd2hlbiBjb21wcmVzc2luZy4KICogQHJldHVybiB7SlNaaXAuQ29tcHJlc3NlZE9iamVjdH0gdGhlIGNvbXByZXNzZWQgcmVzdWx0LgogKi8KdmFyIGdlbmVyYXRlQ29tcHJlc3NlZE9iamVjdEZyb20gPSBmdW5jdGlvbihmaWxlLCBjb21wcmVzc2lvbiwgY29tcHJlc3Npb25PcHRpb25zKSB7CiAgICB2YXIgcmVzdWx0ID0gbmV3IENvbXByZXNzZWRPYmplY3QoKSwKICAgICAgICBjb250ZW50OwoKICAgIC8vIHRoZSBkYXRhIGhhcyBub3QgYmVlbiBkZWNvbXByZXNzZWQsIHdlIG1pZ2h0IHJldXNlIHRoaW5ncyAhCiAgICBpZiAoZmlsZS5fZGF0YSBpbnN0YW5jZW9mIENvbXByZXNzZWRPYmplY3QpIHsKICAgICAgICByZXN1bHQudW5jb21wcmVzc2VkU2l6ZSA9IGZpbGUuX2RhdGEudW5jb21wcmVzc2VkU2l6ZTsKICAgICAgICByZXN1bHQuY3JjMzIgPSBmaWxlLl9kYXRhLmNyYzMyOwoKICAgICAgICBpZiAocmVzdWx0LnVuY29tcHJlc3NlZFNpemUgPT09IDAgfHwgZmlsZS5kaXIpIHsKICAgICAgICAgICAgY29tcHJlc3Npb24gPSBjb21wcmVzc2lvbnNbJ1NUT1JFJ107CiAgICAgICAgICAgIHJlc3VsdC5jb21wcmVzc2VkQ29udGVudCA9ICIiOwogICAgICAgICAgICByZXN1bHQuY3JjMzIgPSAwOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChmaWxlLl9kYXRhLmNvbXByZXNzaW9uTWV0aG9kID09PSBjb21wcmVzc2lvbi5tYWdpYykgewogICAgICAgICAgICByZXN1bHQuY29tcHJlc3NlZENvbnRlbnQgPSBmaWxlLl9kYXRhLmdldENvbXByZXNzZWRDb250ZW50KCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBjb250ZW50ID0gZmlsZS5fZGF0YS5nZXRDb250ZW50KCk7CiAgICAgICAgICAgIC8vIG5lZWQgdG8gZGVjb21wcmVzcyAvIHJlY29tcHJlc3MKICAgICAgICAgICAgcmVzdWx0LmNvbXByZXNzZWRDb250ZW50ID0gY29tcHJlc3Npb24uY29tcHJlc3ModXRpbHMudHJhbnNmb3JtVG8oY29tcHJlc3Npb24uY29tcHJlc3NJbnB1dFR5cGUsIGNvbnRlbnQpLCBjb21wcmVzc2lvbk9wdGlvbnMpOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgIC8vIGhhdmUgdW5jb21wcmVzc2VkIGRhdGEKICAgICAgICBjb250ZW50ID0gZ2V0QmluYXJ5RGF0YShmaWxlKTsKICAgICAgICBpZiAoIWNvbnRlbnQgfHwgY29udGVudC5sZW5ndGggPT09IDAgfHwgZmlsZS5kaXIpIHsKICAgICAgICAgICAgY29tcHJlc3Npb24gPSBjb21wcmVzc2lvbnNbJ1NUT1JFJ107CiAgICAgICAgICAgIGNvbnRlbnQgPSAiIjsKICAgICAgICB9CiAgICAgICAgcmVzdWx0LnVuY29tcHJlc3NlZFNpemUgPSBjb250ZW50Lmxlbmd0aDsKICAgICAgICByZXN1bHQuY3JjMzIgPSBjcmMzMihjb250ZW50KTsKICAgICAgICByZXN1bHQuY29tcHJlc3NlZENvbnRlbnQgPSBjb21wcmVzc2lvbi5jb21wcmVzcyh1dGlscy50cmFuc2Zvcm1Ubyhjb21wcmVzc2lvbi5jb21wcmVzc0lucHV0VHlwZSwgY29udGVudCksIGNvbXByZXNzaW9uT3B0aW9ucyk7CiAgICB9CgogICAgcmVzdWx0LmNvbXByZXNzZWRTaXplID0gcmVzdWx0LmNvbXByZXNzZWRDb250ZW50Lmxlbmd0aDsKICAgIHJlc3VsdC5jb21wcmVzc2lvbk1ldGhvZCA9IGNvbXByZXNzaW9uLm1hZ2ljOwoKICAgIHJldHVybiByZXN1bHQ7Cn07CgoKCgovKioKICogR2VuZXJhdGUgdGhlIFVOSVggcGFydCBvZiB0aGUgZXh0ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzLgogKiBAcGFyYW0ge09iamVjdH0gdW5peFBlcm1pc3Npb25zIHRoZSB1bml4IHBlcm1pc3Npb25zIG9yIG51bGwuCiAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNEaXIgdHJ1ZSBpZiB0aGUgZW50cnkgaXMgYSBkaXJlY3RvcnksIGZhbHNlIG90aGVyd2lzZS4KICogQHJldHVybiB7TnVtYmVyfSBhIDMyIGJpdCBpbnRlZ2VyLgogKgogKiBhZGFwdGVkIGZyb20gaHR0cDovL3VuaXguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzE0NzA1L3RoZS16aXAtZm9ybWF0cy1leHRlcm5hbC1maWxlLWF0dHJpYnV0ZSA6CiAqCiAqIFRUVFRzc3Ryd3hyd3hyd3gwMDAwMDAwMDAwQURWU0hSCiAqIF5eXl5fX19fX19fX19fX19fX19fX19fX19fX19fX19fIGZpbGUgdHlwZSwgc2VlIHppcGluZm8uYyAoVU5YXyopCiAqICAgICBeXl5fX19fX19fX19fX19fX19fX19fX19fX19fIHNldHVpZCwgc2V0Z2lkLCBzdGlja3kKICogICAgICAgIF5eXl5eXl5eXl9fX19fX19fX19fX19fX18gcGVybWlzc2lvbnMKICogICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5fX19fX18gbm90IHVzZWQgPwogKiAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXiBET1MgYXR0cmlidXRlIGJpdHMgOiBBcmNoaXZlLCBEaXJlY3RvcnksIFZvbHVtZSBsYWJlbCwgU3lzdGVtIGZpbGUsIEhpZGRlbiwgUmVhZCBvbmx5CiAqLwp2YXIgZ2VuZXJhdGVVbml4RXh0ZXJuYWxGaWxlQXR0ciA9IGZ1bmN0aW9uICh1bml4UGVybWlzc2lvbnMsIGlzRGlyKSB7CgogICAgdmFyIHJlc3VsdCA9IHVuaXhQZXJtaXNzaW9uczsKICAgIGlmICghdW5peFBlcm1pc3Npb25zKSB7CiAgICAgICAgLy8gSSBjYW4ndCB1c2Ugb2N0YWwgdmFsdWVzIGluIHN0cmljdCBtb2RlLCBoZW5jZSB0aGUgaGV4YS4KICAgICAgICAvLyAgMDQwNzc1ID0+IDB4NDFmZAogICAgICAgIC8vIDAxMDA2NjQgPT4gMHg4MWI0CiAgICAgICAgcmVzdWx0ID0gaXNEaXIgPyAweDQxZmQgOiAweDgxYjQ7CiAgICB9CgogICAgcmV0dXJuIChyZXN1bHQgJiAweEZGRkYpIDw8IDE2Owp9OwoKLyoqCiAqIEdlbmVyYXRlIHRoZSBET1MgcGFydCBvZiB0aGUgZXh0ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzLgogKiBAcGFyYW0ge09iamVjdH0gZG9zUGVybWlzc2lvbnMgdGhlIGRvcyBwZXJtaXNzaW9ucyBvciBudWxsLgogKiBAcGFyYW0ge0Jvb2xlYW59IGlzRGlyIHRydWUgaWYgdGhlIGVudHJ5IGlzIGEgZGlyZWN0b3J5LCBmYWxzZSBvdGhlcndpc2UuCiAqIEByZXR1cm4ge051bWJlcn0gYSAzMiBiaXQgaW50ZWdlci4KICoKICogQml0IDAgICAgIFJlYWQtT25seQogKiBCaXQgMSAgICAgSGlkZGVuCiAqIEJpdCAyICAgICBTeXN0ZW0KICogQml0IDMgICAgIFZvbHVtZSBMYWJlbAogKiBCaXQgNCAgICAgRGlyZWN0b3J5CiAqIEJpdCA1ICAgICBBcmNoaXZlCiAqLwp2YXIgZ2VuZXJhdGVEb3NFeHRlcm5hbEZpbGVBdHRyID0gZnVuY3Rpb24gKGRvc1Blcm1pc3Npb25zLCBpc0RpcikgewoKICAgIC8vIHRoZSBkaXIgZmxhZyBpcyBhbHJlYWR5IHNldCBmb3IgY29tcGF0aWJpbGl0eQoKICAgIHJldHVybiAoZG9zUGVybWlzc2lvbnMgfHwgMCkgICYgMHgzRjsKfTsKCi8qKgogKiBHZW5lcmF0ZSB0aGUgdmFyaW91cyBwYXJ0cyB1c2VkIGluIHRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhlIGZpbmFsIHppcCBmaWxlLgogKiBAcGFyYW0ge3N0cmluZ30gbmFtZSB0aGUgZmlsZSBuYW1lLgogKiBAcGFyYW0ge1ppcE9iamVjdH0gZmlsZSB0aGUgZmlsZSBjb250ZW50LgogKiBAcGFyYW0ge0pTWmlwLkNvbXByZXNzZWRPYmplY3R9IGNvbXByZXNzZWRPYmplY3QgdGhlIGNvbXByZXNzZWQgb2JqZWN0LgogKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IHRoZSBjdXJyZW50IG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgemlwIGZpbGUuCiAqIEBwYXJhbSB7U3RyaW5nfSBwbGF0Zm9ybSBsZXQncyBwcmV0ZW5kIHdlIGFyZSB0aGlzIHBsYXRmb3JtIChjaGFuZ2UgcGxhdGZvcm0gZGVwZW5kZW50cyBmaWVsZHMpCiAqIEByZXR1cm4ge29iamVjdH0gdGhlIHppcCBwYXJ0cy4KICovCnZhciBnZW5lcmF0ZVppcFBhcnRzID0gZnVuY3Rpb24obmFtZSwgZmlsZSwgY29tcHJlc3NlZE9iamVjdCwgb2Zmc2V0LCBwbGF0Zm9ybSkgewogICAgdmFyIGRhdGEgPSBjb21wcmVzc2VkT2JqZWN0LmNvbXByZXNzZWRDb250ZW50LAogICAgICAgIHV0ZkVuY29kZWRGaWxlTmFtZSA9IHV0aWxzLnRyYW5zZm9ybVRvKCJzdHJpbmciLCB1dGY4LnV0ZjhlbmNvZGUoZmlsZS5uYW1lKSksCiAgICAgICAgY29tbWVudCA9IGZpbGUuY29tbWVudCB8fCAiIiwKICAgICAgICB1dGZFbmNvZGVkQ29tbWVudCA9IHV0aWxzLnRyYW5zZm9ybVRvKCJzdHJpbmciLCB1dGY4LnV0ZjhlbmNvZGUoY29tbWVudCkpLAogICAgICAgIHVzZVVURjhGb3JGaWxlTmFtZSA9IHV0ZkVuY29kZWRGaWxlTmFtZS5sZW5ndGggIT09IGZpbGUubmFtZS5sZW5ndGgsCiAgICAgICAgdXNlVVRGOEZvckNvbW1lbnQgPSB1dGZFbmNvZGVkQ29tbWVudC5sZW5ndGggIT09IGNvbW1lbnQubGVuZ3RoLAogICAgICAgIG8gPSBmaWxlLm9wdGlvbnMsCiAgICAgICAgZG9zVGltZSwKICAgICAgICBkb3NEYXRlLAogICAgICAgIGV4dHJhRmllbGRzID0gIiIsCiAgICAgICAgdW5pY29kZVBhdGhFeHRyYUZpZWxkID0gIiIsCiAgICAgICAgdW5pY29kZUNvbW1lbnRFeHRyYUZpZWxkID0gIiIsCiAgICAgICAgZGlyLCBkYXRlOwoKCiAgICAvLyBoYW5kbGUgdGhlIGRlcHJlY2F0ZWQgb3B0aW9ucy5kaXIKICAgIGlmIChmaWxlLl9pbml0aWFsTWV0YWRhdGEuZGlyICE9PSBmaWxlLmRpcikgewogICAgICAgIGRpciA9IGZpbGUuZGlyOwogICAgfSBlbHNlIHsKICAgICAgICBkaXIgPSBvLmRpcjsKICAgIH0KCiAgICAvLyBoYW5kbGUgdGhlIGRlcHJlY2F0ZWQgb3B0aW9ucy5kYXRlCiAgICBpZihmaWxlLl9pbml0aWFsTWV0YWRhdGEuZGF0ZSAhPT0gZmlsZS5kYXRlKSB7CiAgICAgICAgZGF0ZSA9IGZpbGUuZGF0ZTsKICAgIH0gZWxzZSB7CiAgICAgICAgZGF0ZSA9IG8uZGF0ZTsKICAgIH0KCiAgICB2YXIgZXh0RmlsZUF0dHIgPSAwOwogICAgdmFyIHZlcnNpb25NYWRlQnkgPSAwOwogICAgaWYgKGRpcikgewogICAgICAgIC8vIGRvcyBvciB1bml4LCB3ZSBzZXQgdGhlIGRvcyBkaXIgZmxhZwogICAgICAgIGV4dEZpbGVBdHRyIHw9IDB4MDAwMTA7CiAgICB9CiAgICBpZihwbGF0Zm9ybSA9PT0gIlVOSVgiKSB7CiAgICAgICAgdmVyc2lvbk1hZGVCeSA9IDB4MDMxRTsgLy8gVU5JWCwgdmVyc2lvbiAzLjAKICAgICAgICBleHRGaWxlQXR0ciB8PSBnZW5lcmF0ZVVuaXhFeHRlcm5hbEZpbGVBdHRyKGZpbGUudW5peFBlcm1pc3Npb25zLCBkaXIpOwogICAgfSBlbHNlIHsgLy8gRE9TIG9yIG90aGVyLCBmYWxsYmFjayB0byBET1MKICAgICAgICB2ZXJzaW9uTWFkZUJ5ID0gMHgwMDE0OyAvLyBET1MsIHZlcnNpb24gMi4wCiAgICAgICAgZXh0RmlsZUF0dHIgfD0gZ2VuZXJhdGVEb3NFeHRlcm5hbEZpbGVBdHRyKGZpbGUuZG9zUGVybWlzc2lvbnMsIGRpcik7CiAgICB9CgogICAgLy8gZGF0ZQogICAgLy8gQHNlZSBodHRwOi8vd3d3LmRlbG9yaWUuY29tL2RqZ3BwL2RvYy9yYmludGVyL2l0LzUyLzEzLmh0bWwKICAgIC8vIEBzZWUgaHR0cDovL3d3dy5kZWxvcmllLmNvbS9kamdwcC9kb2MvcmJpbnRlci9pdC82NS8xNi5odG1sCiAgICAvLyBAc2VlIGh0dHA6Ly93d3cuZGVsb3JpZS5jb20vZGpncHAvZG9jL3JiaW50ZXIvaXQvNjYvMTYuaHRtbAoKICAgIGRvc1RpbWUgPSBkYXRlLmdldEhvdXJzKCk7CiAgICBkb3NUaW1lID0gZG9zVGltZSA8PCA2OwogICAgZG9zVGltZSA9IGRvc1RpbWUgfCBkYXRlLmdldE1pbnV0ZXMoKTsKICAgIGRvc1RpbWUgPSBkb3NUaW1lIDw8IDU7CiAgICBkb3NUaW1lID0gZG9zVGltZSB8IGRhdGUuZ2V0U2Vjb25kcygpIC8gMjsKCiAgICBkb3NEYXRlID0gZGF0ZS5nZXRGdWxsWWVhcigpIC0gMTk4MDsKICAgIGRvc0RhdGUgPSBkb3NEYXRlIDw8IDQ7CiAgICBkb3NEYXRlID0gZG9zRGF0ZSB8IChkYXRlLmdldE1vbnRoKCkgKyAxKTsKICAgIGRvc0RhdGUgPSBkb3NEYXRlIDw8IDU7CiAgICBkb3NEYXRlID0gZG9zRGF0ZSB8IGRhdGUuZ2V0RGF0ZSgpOwoKICAgIGlmICh1c2VVVEY4Rm9yRmlsZU5hbWUpIHsKICAgICAgICAvLyBzZXQgdGhlIHVuaWNvZGUgcGF0aCBleHRyYSBmaWVsZC4gdW56aXAgbmVlZHMgYXQgbGVhc3Qgb25lIGV4dHJhCiAgICAgICAgLy8gZmllbGQgdG8gY29ycmVjdGx5IGhhbmRsZSB1bmljb2RlIHBhdGgsIHNvIHVzaW5nIHRoZSBwYXRoIGlzIGFzIGdvb2QKICAgICAgICAvLyBhcyBhbnkgb3RoZXIgaW5mb3JtYXRpb24uIFRoaXMgY291bGQgaW1wcm92ZSB0aGUgc2l0dWF0aW9uIHdpdGgKICAgICAgICAvLyBvdGhlciBhcmNoaXZlIG1hbmFnZXJzIHRvby4KICAgICAgICAvLyBUaGlzIGZpZWxkIGlzIHVzdWFsbHkgdXNlZCB3aXRob3V0IHRoZSB1dGY4IGZsYWcsIHdpdGggYSBub24KICAgICAgICAvLyB1bmljb2RlIHBhdGggaW4gdGhlIGhlYWRlciAod2lucmFyLCB3aW56aXApLiBUaGlzIGhlbHBzIChhIGJpdCkKICAgICAgICAvLyB3aXRoIHRoZSBtZXNzeSBXaW5kb3dzJyBkZWZhdWx0IGNvbXByZXNzZWQgZm9sZGVycyBmZWF0dXJlIGJ1dAogICAgICAgIC8vIGJyZWFrcyBvbiBwN3ppcCB3aGljaCBkb2Vzbid0IHNlZWsgdGhlIHVuaWNvZGUgcGF0aCBleHRyYSBmaWVsZC4KICAgICAgICAvLyBTbyBmb3Igbm93LCBVVEYtOCBldmVyeXdoZXJlICEKICAgICAgICB1bmljb2RlUGF0aEV4dHJhRmllbGQgPQogICAgICAgICAgICAvLyBWZXJzaW9uCiAgICAgICAgICAgIGRlY1RvSGV4KDEsIDEpICsKICAgICAgICAgICAgLy8gTmFtZUNSQzMyCiAgICAgICAgICAgIGRlY1RvSGV4KGNyYzMyKHV0ZkVuY29kZWRGaWxlTmFtZSksIDQpICsKICAgICAgICAgICAgLy8gVW5pY29kZU5hbWUKICAgICAgICAgICAgdXRmRW5jb2RlZEZpbGVOYW1lOwoKICAgICAgICBleHRyYUZpZWxkcyArPQogICAgICAgICAgICAvLyBJbmZvLVpJUCBVbmljb2RlIFBhdGggRXh0cmEgRmllbGQKICAgICAgICAgICAgIlx4NzVceDcwIiArCiAgICAgICAgICAgIC8vIHNpemUKICAgICAgICAgICAgZGVjVG9IZXgodW5pY29kZVBhdGhFeHRyYUZpZWxkLmxlbmd0aCwgMikgKwogICAgICAgICAgICAvLyBjb250ZW50CiAgICAgICAgICAgIHVuaWNvZGVQYXRoRXh0cmFGaWVsZDsKICAgIH0KCiAgICBpZih1c2VVVEY4Rm9yQ29tbWVudCkgewoKICAgICAgICB1bmljb2RlQ29tbWVudEV4dHJhRmllbGQgPQogICAgICAgICAgICAvLyBWZXJzaW9uCiAgICAgICAgICAgIGRlY1RvSGV4KDEsIDEpICsKICAgICAgICAgICAgLy8gQ29tbWVudENSQzMyCiAgICAgICAgICAgIGRlY1RvSGV4KHRoaXMuY3JjMzIodXRmRW5jb2RlZENvbW1lbnQpLCA0KSArCiAgICAgICAgICAgIC8vIFVuaWNvZGVOYW1lCiAgICAgICAgICAgIHV0ZkVuY29kZWRDb21tZW50OwoKICAgICAgICBleHRyYUZpZWxkcyArPQogICAgICAgICAgICAvLyBJbmZvLVpJUCBVbmljb2RlIFBhdGggRXh0cmEgRmllbGQKICAgICAgICAgICAgIlx4NzVceDYzIiArCiAgICAgICAgICAgIC8vIHNpemUKICAgICAgICAgICAgZGVjVG9IZXgodW5pY29kZUNvbW1lbnRFeHRyYUZpZWxkLmxlbmd0aCwgMikgKwogICAgICAgICAgICAvLyBjb250ZW50CiAgICAgICAgICAgIHVuaWNvZGVDb21tZW50RXh0cmFGaWVsZDsKICAgIH0KCiAgICB2YXIgaGVhZGVyID0gIiI7CgogICAgLy8gdmVyc2lvbiBuZWVkZWQgdG8gZXh0cmFjdAogICAgaGVhZGVyICs9ICJceDBBXHgwMCI7CiAgICAvLyBnZW5lcmFsIHB1cnBvc2UgYml0IGZsYWcKICAgIC8vIHNldCBiaXQgMTEgaWYgdXRmOAogICAgaGVhZGVyICs9ICh1c2VVVEY4Rm9yRmlsZU5hbWUgfHwgdXNlVVRGOEZvckNvbW1lbnQpID8gIlx4MDBceDA4IiA6ICJceDAwXHgwMCI7CiAgICAvLyBjb21wcmVzc2lvbiBtZXRob2QKICAgIGhlYWRlciArPSBjb21wcmVzc2VkT2JqZWN0LmNvbXByZXNzaW9uTWV0aG9kOwogICAgLy8gbGFzdCBtb2QgZmlsZSB0aW1lCiAgICBoZWFkZXIgKz0gZGVjVG9IZXgoZG9zVGltZSwgMik7CiAgICAvLyBsYXN0IG1vZCBmaWxlIGRhdGUKICAgIGhlYWRlciArPSBkZWNUb0hleChkb3NEYXRlLCAyKTsKICAgIC8vIGNyYy0zMgogICAgaGVhZGVyICs9IGRlY1RvSGV4KGNvbXByZXNzZWRPYmplY3QuY3JjMzIsIDQpOwogICAgLy8gY29tcHJlc3NlZCBzaXplCiAgICBoZWFkZXIgKz0gZGVjVG9IZXgoY29tcHJlc3NlZE9iamVjdC5jb21wcmVzc2VkU2l6ZSwgNCk7CiAgICAvLyB1bmNvbXByZXNzZWQgc2l6ZQogICAgaGVhZGVyICs9IGRlY1RvSGV4KGNvbXByZXNzZWRPYmplY3QudW5jb21wcmVzc2VkU2l6ZSwgNCk7CiAgICAvLyBmaWxlIG5hbWUgbGVuZ3RoCiAgICBoZWFkZXIgKz0gZGVjVG9IZXgodXRmRW5jb2RlZEZpbGVOYW1lLmxlbmd0aCwgMik7CiAgICAvLyBleHRyYSBmaWVsZCBsZW5ndGgKICAgIGhlYWRlciArPSBkZWNUb0hleChleHRyYUZpZWxkcy5sZW5ndGgsIDIpOwoKCiAgICB2YXIgZmlsZVJlY29yZCA9IHNpZ25hdHVyZS5MT0NBTF9GSUxFX0hFQURFUiArIGhlYWRlciArIHV0ZkVuY29kZWRGaWxlTmFtZSArIGV4dHJhRmllbGRzOwoKICAgIHZhciBkaXJSZWNvcmQgPSBzaWduYXR1cmUuQ0VOVFJBTF9GSUxFX0hFQURFUiArCiAgICAvLyB2ZXJzaW9uIG1hZGUgYnkgKDAwOiBET1MpCiAgICBkZWNUb0hleCh2ZXJzaW9uTWFkZUJ5LCAyKSArCiAgICAvLyBmaWxlIGhlYWRlciAoY29tbW9uIHRvIGZpbGUgYW5kIGNlbnRyYWwgZGlyZWN0b3J5KQogICAgaGVhZGVyICsKICAgIC8vIGZpbGUgY29tbWVudCBsZW5ndGgKICAgIGRlY1RvSGV4KHV0ZkVuY29kZWRDb21tZW50Lmxlbmd0aCwgMikgKwogICAgLy8gZGlzayBudW1iZXIgc3RhcnQKICAgICJceDAwXHgwMCIgKwogICAgLy8gaW50ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzIFRPRE8KICAgICJceDAwXHgwMCIgKwogICAgLy8gZXh0ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzCiAgICBkZWNUb0hleChleHRGaWxlQXR0ciwgNCkgKwogICAgLy8gcmVsYXRpdmUgb2Zmc2V0IG9mIGxvY2FsIGhlYWRlcgogICAgZGVjVG9IZXgob2Zmc2V0LCA0KSArCiAgICAvLyBmaWxlIG5hbWUKICAgIHV0ZkVuY29kZWRGaWxlTmFtZSArCiAgICAvLyBleHRyYSBmaWVsZAogICAgZXh0cmFGaWVsZHMgKwogICAgLy8gZmlsZSBjb21tZW50CiAgICB1dGZFbmNvZGVkQ29tbWVudDsKCiAgICByZXR1cm4gewogICAgICAgIGZpbGVSZWNvcmQ6IGZpbGVSZWNvcmQsCiAgICAgICAgZGlyUmVjb3JkOiBkaXJSZWNvcmQsCiAgICAgICAgY29tcHJlc3NlZE9iamVjdDogY29tcHJlc3NlZE9iamVjdAogICAgfTsKfTsKCgovLyByZXR1cm4gdGhlIGFjdHVhbCBwcm90b3R5cGUgb2YgSlNaaXAKdmFyIG91dCA9IHsKICAgIC8qKgogICAgICogUmVhZCBhbiBleGlzdGluZyB6aXAgYW5kIG1lcmdlIHRoZSBkYXRhIGluIHRoZSBjdXJyZW50IEpTWmlwIG9iamVjdC4KICAgICAqIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBpbiBqc3ppcC1sb2FkLmpzLCBkb24ndCBmb3JnZXQgdG8gaW5jbHVkZSBpdC4KICAgICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5QnVmZmVyfFVpbnQ4QXJyYXl8QnVmZmVyfSBzdHJlYW0gIFRoZSBzdHJlYW0gdG8gbG9hZAogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBmb3IgbG9hZGluZyB0aGUgc3RyZWFtLgogICAgICogIG9wdGlvbnMuYmFzZTY0IDogaXMgdGhlIHN0cmVhbSBpbiBiYXNlNjQgPyBkZWZhdWx0IDogZmFsc2UKICAgICAqIEByZXR1cm4ge0pTWmlwfSB0aGUgY3VycmVudCBKU1ppcCBvYmplY3QKICAgICAqLwogICAgbG9hZDogZnVuY3Rpb24oc3RyZWFtLCBvcHRpb25zKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJMb2FkIG1ldGhvZCBpcyBub3QgZGVmaW5lZC4gSXMgdGhlIGZpbGUganN6aXAtbG9hZC5qcyBpbmNsdWRlZCA/Iik7CiAgICB9LAoKICAgIC8qKgogICAgICogRmlsdGVyIG5lc3RlZCBmaWxlcy9mb2xkZXJzIHdpdGggdGhlIHNwZWNpZmllZCBmdW5jdGlvbi4KICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHNlYXJjaCB0aGUgcHJlZGljYXRlIHRvIHVzZSA6CiAgICAgKiBmdW5jdGlvbiAocmVsYXRpdmVQYXRoLCBmaWxlKSB7Li4ufQogICAgICogSXQgdGFrZXMgMiBhcmd1bWVudHMgOiB0aGUgcmVsYXRpdmUgcGF0aCBhbmQgdGhlIGZpbGUuCiAgICAgKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgbWF0Y2hpbmcgZWxlbWVudHMuCiAgICAgKi8KICAgIGZpbHRlcjogZnVuY3Rpb24oc2VhcmNoKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IFtdLAogICAgICAgICAgICBmaWxlbmFtZSwgcmVsYXRpdmVQYXRoLCBmaWxlLCBmaWxlQ2xvbmU7CiAgICAgICAgZm9yIChmaWxlbmFtZSBpbiB0aGlzLmZpbGVzKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5maWxlcy5oYXNPd25Qcm9wZXJ0eShmaWxlbmFtZSkpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZpbGUgPSB0aGlzLmZpbGVzW2ZpbGVuYW1lXTsKICAgICAgICAgICAgLy8gcmV0dXJuIGEgbmV3IG9iamVjdCwgZG9uJ3QgbGV0IHRoZSB1c2VyIG1lc3Mgd2l0aCBvdXIgaW50ZXJuYWwgb2JqZWN0cyA6KQogICAgICAgICAgICBmaWxlQ2xvbmUgPSBuZXcgWmlwT2JqZWN0KGZpbGUubmFtZSwgZmlsZS5fZGF0YSwgZXh0ZW5kKGZpbGUub3B0aW9ucykpOwogICAgICAgICAgICByZWxhdGl2ZVBhdGggPSBmaWxlbmFtZS5zbGljZSh0aGlzLnJvb3QubGVuZ3RoLCBmaWxlbmFtZS5sZW5ndGgpOwogICAgICAgICAgICBpZiAoZmlsZW5hbWUuc2xpY2UoMCwgdGhpcy5yb290Lmxlbmd0aCkgPT09IHRoaXMucm9vdCAmJiAvLyB0aGUgZmlsZSBpcyBpbiB0aGUgY3VycmVudCByb290CiAgICAgICAgICAgIHNlYXJjaChyZWxhdGl2ZVBhdGgsIGZpbGVDbG9uZSkpIHsgLy8gYW5kIHRoZSBmaWxlIG1hdGNoZXMgdGhlIGZ1bmN0aW9uCiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChmaWxlQ2xvbmUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9LAoKICAgIC8qKgogICAgICogQWRkIGEgZmlsZSB0byB0aGUgemlwIGZpbGUsIG9yIHNlYXJjaCBhIGZpbGUuCiAgICAgKiBAcGFyYW0gICB7c3RyaW5nfFJlZ0V4cH0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0byBhZGQgKGlmIGRhdGEgaXMgZGVmaW5lZCksCiAgICAgKiB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBmaW5kIChpZiBubyBkYXRhKSBvciBhIHJlZ2V4IHRvIG1hdGNoIGZpbGVzLgogICAgICogQHBhcmFtICAge1N0cmluZ3xBcnJheUJ1ZmZlcnxVaW50OEFycmF5fEJ1ZmZlcn0gZGF0YSAgVGhlIGZpbGUgZGF0YSwgZWl0aGVyIHJhdyBvciBiYXNlNjQgZW5jb2RlZAogICAgICogQHBhcmFtICAge09iamVjdH0gbyAgICAgRmlsZSBvcHRpb25zCiAgICAgKiBAcmV0dXJuICB7SlNaaXB8T2JqZWN0fEFycmF5fSB0aGlzIEpTWmlwIG9iamVjdCAod2hlbiBhZGRpbmcgYSBmaWxlKSwKICAgICAqIGEgZmlsZSAod2hlbiBzZWFyY2hpbmcgYnkgc3RyaW5nKSBvciBhbiBhcnJheSBvZiBmaWxlcyAod2hlbiBzZWFyY2hpbmcgYnkgcmVnZXgpLgogICAgICovCiAgICBmaWxlOiBmdW5jdGlvbihuYW1lLCBkYXRhLCBvKSB7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgaWYgKHV0aWxzLmlzUmVnRXhwKG5hbWUpKSB7CiAgICAgICAgICAgICAgICB2YXIgcmVnZXhwID0gbmFtZTsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihyZWxhdGl2ZVBhdGgsIGZpbGUpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWZpbGUuZGlyICYmIHJlZ2V4cC50ZXN0KHJlbGF0aXZlUGF0aCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsgLy8gdGV4dAogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKHJlbGF0aXZlUGF0aCwgZmlsZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAhZmlsZS5kaXIgJiYgcmVsYXRpdmVQYXRoID09PSBuYW1lOwogICAgICAgICAgICAgICAgfSlbMF0gfHwgbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsgLy8gbW9yZSB0aGFuIG9uZSBhcmd1bWVudCA6IHdlIGhhdmUgZGF0YSAhCiAgICAgICAgICAgIG5hbWUgPSB0aGlzLnJvb3QgKyBuYW1lOwogICAgICAgICAgICBmaWxlQWRkLmNhbGwodGhpcywgbmFtZSwgZGF0YSwgbyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzOwogICAgfSwKCiAgICAvKioKICAgICAqIEFkZCBhIGRpcmVjdG9yeSB0byB0aGUgemlwIGZpbGUsIG9yIHNlYXJjaC4KICAgICAqIEBwYXJhbSAgIHtTdHJpbmd8UmVnRXhwfSBhcmcgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0byBhZGQsIG9yIGEgcmVnZXggdG8gc2VhcmNoIGZvbGRlcnMuCiAgICAgKiBAcmV0dXJuICB7SlNaaXB9IGFuIG9iamVjdCB3aXRoIHRoZSBuZXcgZGlyZWN0b3J5IGFzIHRoZSByb290LCBvciBhbiBhcnJheSBjb250YWluaW5nIG1hdGNoaW5nIGZvbGRlcnMuCiAgICAgKi8KICAgIGZvbGRlcjogZnVuY3Rpb24oYXJnKSB7CiAgICAgICAgaWYgKCFhcmcpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgICBpZiAodXRpbHMuaXNSZWdFeHAoYXJnKSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24ocmVsYXRpdmVQYXRoLCBmaWxlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmlsZS5kaXIgJiYgYXJnLnRlc3QocmVsYXRpdmVQYXRoKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICAvLyBlbHNlLCBuYW1lIGlzIGEgbmV3IGZvbGRlcgogICAgICAgIHZhciBuYW1lID0gdGhpcy5yb290ICsgYXJnOwogICAgICAgIHZhciBuZXdGb2xkZXIgPSBmb2xkZXJBZGQuY2FsbCh0aGlzLCBuYW1lKTsKCiAgICAgICAgLy8gQWxsb3cgY2hhaW5pbmcgYnkgcmV0dXJuaW5nIGEgbmV3IG9iamVjdCB3aXRoIHRoaXMgZm9sZGVyIGFzIHRoZSByb290CiAgICAgICAgdmFyIHJldCA9IHRoaXMuY2xvbmUoKTsKICAgICAgICByZXQucm9vdCA9IG5ld0ZvbGRlci5uYW1lOwogICAgICAgIHJldHVybiByZXQ7CiAgICB9LAoKICAgIC8qKgogICAgICogRGVsZXRlIGEgZmlsZSwgb3IgYSBkaXJlY3RvcnkgYW5kIGFsbCBzdWItZmlsZXMsIGZyb20gdGhlIHppcAogICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gZGVsZXRlCiAgICAgKiBAcmV0dXJuIHtKU1ppcH0gdGhpcyBKU1ppcCBvYmplY3QKICAgICAqLwogICAgcmVtb3ZlOiBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgbmFtZSA9IHRoaXMucm9vdCArIG5hbWU7CiAgICAgICAgdmFyIGZpbGUgPSB0aGlzLmZpbGVzW25hbWVdOwogICAgICAgIGlmICghZmlsZSkgewogICAgICAgICAgICAvLyBMb29rIGZvciBhbnkgZm9sZGVycwogICAgICAgICAgICBpZiAobmFtZS5zbGljZSgtMSkgIT0gIi8iKSB7CiAgICAgICAgICAgICAgICBuYW1lICs9ICIvIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBmaWxlID0gdGhpcy5maWxlc1tuYW1lXTsKICAgICAgICB9CgogICAgICAgIGlmIChmaWxlICYmICFmaWxlLmRpcikgewogICAgICAgICAgICAvLyBmaWxlCiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmZpbGVzW25hbWVdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIG1heWJlIGEgZm9sZGVyLCBkZWxldGUgcmVjdXJzaXZlbHkKICAgICAgICAgICAgdmFyIGtpZHMgPSB0aGlzLmZpbHRlcihmdW5jdGlvbihyZWxhdGl2ZVBhdGgsIGZpbGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmaWxlLm5hbWUuc2xpY2UoMCwgbmFtZS5sZW5ndGgpID09PSBuYW1lOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBraWRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5maWxlc1traWRzW2ldLm5hbWVdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdGhpczsKICAgIH0sCgogICAgLyoqCiAgICAgKiBHZW5lcmF0ZSB0aGUgY29tcGxldGUgemlwIGZpbGUKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIHRoZSBvcHRpb25zIHRvIGdlbmVyYXRlIHRoZSB6aXAgZmlsZSA6CiAgICAgKiAtIGJhc2U2NCwgKGRlcHJlY2F0ZWQsIHVzZSB0eXBlIGluc3RlYWQpIHRydWUgdG8gZ2VuZXJhdGUgYmFzZTY0LgogICAgICogLSBjb21wcmVzc2lvbiwgIlNUT1JFIiBieSBkZWZhdWx0LgogICAgICogLSB0eXBlLCAiYmFzZTY0IiBieSBkZWZhdWx0LiBWYWx1ZXMgYXJlIDogc3RyaW5nLCBiYXNlNjQsIHVpbnQ4YXJyYXksIGFycmF5YnVmZmVyLCBibG9iLgogICAgICogQHJldHVybiB7U3RyaW5nfFVpbnQ4QXJyYXl8QXJyYXlCdWZmZXJ8QnVmZmVyfEJsb2J9IHRoZSB6aXAgZmlsZQogICAgICovCiAgICBnZW5lcmF0ZTogZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgIG9wdGlvbnMgPSBleHRlbmQob3B0aW9ucyB8fCB7fSwgewogICAgICAgICAgICBiYXNlNjQ6IHRydWUsCiAgICAgICAgICAgIGNvbXByZXNzaW9uOiAiU1RPUkUiLAogICAgICAgICAgICBjb21wcmVzc2lvbk9wdGlvbnMgOiBudWxsLAogICAgICAgICAgICB0eXBlOiAiYmFzZTY0IiwKICAgICAgICAgICAgcGxhdGZvcm06ICJET1MiLAogICAgICAgICAgICBjb21tZW50OiBudWxsLAogICAgICAgICAgICBtaW1lVHlwZTogJ2FwcGxpY2F0aW9uL3ppcCcKICAgICAgICB9KTsKCiAgICAgICAgdXRpbHMuY2hlY2tTdXBwb3J0KG9wdGlvbnMudHlwZSk7CgogICAgICAgIC8vIGFjY2VwdCBub2RlanMgYHByb2Nlc3MucGxhdGZvcm1gCiAgICAgICAgaWYoCiAgICAgICAgICBvcHRpb25zLnBsYXRmb3JtID09PSAnZGFyd2luJyB8fAogICAgICAgICAgb3B0aW9ucy5wbGF0Zm9ybSA9PT0gJ2ZyZWVic2QnIHx8CiAgICAgICAgICBvcHRpb25zLnBsYXRmb3JtID09PSAnbGludXgnIHx8CiAgICAgICAgICBvcHRpb25zLnBsYXRmb3JtID09PSAnc3Vub3MnCiAgICAgICAgKSB7CiAgICAgICAgICBvcHRpb25zLnBsYXRmb3JtID0gIlVOSVgiOwogICAgICAgIH0KICAgICAgICBpZiAob3B0aW9ucy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykgewogICAgICAgICAgb3B0aW9ucy5wbGF0Zm9ybSA9ICJET1MiOwogICAgICAgIH0KCiAgICAgICAgdmFyIHppcERhdGEgPSBbXSwKICAgICAgICAgICAgbG9jYWxEaXJMZW5ndGggPSAwLAogICAgICAgICAgICBjZW50cmFsRGlyTGVuZ3RoID0gMCwKICAgICAgICAgICAgd3JpdGVyLCBpLAogICAgICAgICAgICB1dGZFbmNvZGVkQ29tbWVudCA9IHV0aWxzLnRyYW5zZm9ybVRvKCJzdHJpbmciLCB0aGlzLnV0ZjhlbmNvZGUob3B0aW9ucy5jb21tZW50IHx8IHRoaXMuY29tbWVudCB8fCAiIikpOwoKICAgICAgICAvLyBmaXJzdCwgZ2VuZXJhdGUgYWxsIHRoZSB6aXAgcGFydHMuCiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzLmZpbGVzKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5maWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGZpbGUgPSB0aGlzLmZpbGVzW25hbWVdOwoKICAgICAgICAgICAgdmFyIGNvbXByZXNzaW9uTmFtZSA9IGZpbGUub3B0aW9ucy5jb21wcmVzc2lvbiB8fCBvcHRpb25zLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgIHZhciBjb21wcmVzc2lvbiA9IGNvbXByZXNzaW9uc1tjb21wcmVzc2lvbk5hbWVdOwogICAgICAgICAgICBpZiAoIWNvbXByZXNzaW9uKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY29tcHJlc3Npb25OYW1lICsgIiBpcyBub3QgYSB2YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgISIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBjb21wcmVzc2lvbk9wdGlvbnMgPSBmaWxlLm9wdGlvbnMuY29tcHJlc3Npb25PcHRpb25zIHx8IG9wdGlvbnMuY29tcHJlc3Npb25PcHRpb25zIHx8IHt9OwoKICAgICAgICAgICAgdmFyIGNvbXByZXNzZWRPYmplY3QgPSBnZW5lcmF0ZUNvbXByZXNzZWRPYmplY3RGcm9tLmNhbGwodGhpcywgZmlsZSwgY29tcHJlc3Npb24sIGNvbXByZXNzaW9uT3B0aW9ucyk7CgogICAgICAgICAgICB2YXIgemlwUGFydCA9IGdlbmVyYXRlWmlwUGFydHMuY2FsbCh0aGlzLCBuYW1lLCBmaWxlLCBjb21wcmVzc2VkT2JqZWN0LCBsb2NhbERpckxlbmd0aCwgb3B0aW9ucy5wbGF0Zm9ybSk7CiAgICAgICAgICAgIGxvY2FsRGlyTGVuZ3RoICs9IHppcFBhcnQuZmlsZVJlY29yZC5sZW5ndGggKyBjb21wcmVzc2VkT2JqZWN0LmNvbXByZXNzZWRTaXplOwogICAgICAgICAgICBjZW50cmFsRGlyTGVuZ3RoICs9IHppcFBhcnQuZGlyUmVjb3JkLmxlbmd0aDsKICAgICAgICAgICAgemlwRGF0YS5wdXNoKHppcFBhcnQpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGRpckVuZCA9ICIiOwoKICAgICAgICAvLyBlbmQgb2YgY2VudHJhbCBkaXIgc2lnbmF0dXJlCiAgICAgICAgZGlyRW5kID0gc2lnbmF0dXJlLkNFTlRSQUxfRElSRUNUT1JZX0VORCArCiAgICAgICAgLy8gbnVtYmVyIG9mIHRoaXMgZGlzawogICAgICAgICJceDAwXHgwMCIgKwogICAgICAgIC8vIG51bWJlciBvZiB0aGUgZGlzayB3aXRoIHRoZSBzdGFydCBvZiB0aGUgY2VudHJhbCBkaXJlY3RvcnkKICAgICAgICAiXHgwMFx4MDAiICsKICAgICAgICAvLyB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgY2VudHJhbCBkaXJlY3Rvcnkgb24gdGhpcyBkaXNrCiAgICAgICAgZGVjVG9IZXgoemlwRGF0YS5sZW5ndGgsIDIpICsKICAgICAgICAvLyB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgY2VudHJhbCBkaXJlY3RvcnkKICAgICAgICBkZWNUb0hleCh6aXBEYXRhLmxlbmd0aCwgMikgKwogICAgICAgIC8vIHNpemUgb2YgdGhlIGNlbnRyYWwgZGlyZWN0b3J5ICAgNCBieXRlcwogICAgICAgIGRlY1RvSGV4KGNlbnRyYWxEaXJMZW5ndGgsIDQpICsKICAgICAgICAvLyBvZmZzZXQgb2Ygc3RhcnQgb2YgY2VudHJhbCBkaXJlY3Rvcnkgd2l0aCByZXNwZWN0IHRvIHRoZSBzdGFydGluZyBkaXNrIG51bWJlcgogICAgICAgIGRlY1RvSGV4KGxvY2FsRGlyTGVuZ3RoLCA0KSArCiAgICAgICAgLy8gLlpJUCBmaWxlIGNvbW1lbnQgbGVuZ3RoCiAgICAgICAgZGVjVG9IZXgodXRmRW5jb2RlZENvbW1lbnQubGVuZ3RoLCAyKSArCiAgICAgICAgLy8gLlpJUCBmaWxlIGNvbW1lbnQKICAgICAgICB1dGZFbmNvZGVkQ29tbWVudDsKCgogICAgICAgIC8vIHdlIGhhdmUgYWxsIHRoZSBwYXJ0cyAoYW5kIHRoZSB0b3RhbCBsZW5ndGgpCiAgICAgICAgLy8gdGltZSB0byBjcmVhdGUgYSB3cml0ZXIgIQogICAgICAgIHZhciB0eXBlTmFtZSA9IG9wdGlvbnMudHlwZS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGlmKHR5cGVOYW1lPT09InVpbnQ4YXJyYXkifHx0eXBlTmFtZT09PSJhcnJheWJ1ZmZlciJ8fHR5cGVOYW1lPT09ImJsb2IifHx0eXBlTmFtZT09PSJub2RlYnVmZmVyIikgewogICAgICAgICAgICB3cml0ZXIgPSBuZXcgVWludDhBcnJheVdyaXRlcihsb2NhbERpckxlbmd0aCArIGNlbnRyYWxEaXJMZW5ndGggKyBkaXJFbmQubGVuZ3RoKTsKICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgd3JpdGVyID0gbmV3IFN0cmluZ1dyaXRlcihsb2NhbERpckxlbmd0aCArIGNlbnRyYWxEaXJMZW5ndGggKyBkaXJFbmQubGVuZ3RoKTsKICAgICAgICB9CgogICAgICAgIGZvciAoaSA9IDA7IGkgPCB6aXBEYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoemlwRGF0YVtpXS5maWxlUmVjb3JkKTsKICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCh6aXBEYXRhW2ldLmNvbXByZXNzZWRPYmplY3QuY29tcHJlc3NlZENvbnRlbnQpOwogICAgICAgIH0KICAgICAgICBmb3IgKGkgPSAwOyBpIDwgemlwRGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB3cml0ZXIuYXBwZW5kKHppcERhdGFbaV0uZGlyUmVjb3JkKTsKICAgICAgICB9CgogICAgICAgIHdyaXRlci5hcHBlbmQoZGlyRW5kKTsKCiAgICAgICAgdmFyIHppcCA9IHdyaXRlci5maW5hbGl6ZSgpOwoKCgogICAgICAgIHN3aXRjaChvcHRpb25zLnR5cGUudG9Mb3dlckNhc2UoKSkgewogICAgICAgICAgICAvLyBjYXNlICJ6aXAgaXMgYW4gVWludDhBcnJheSIKICAgICAgICAgICAgY2FzZSAidWludDhhcnJheSIgOgogICAgICAgICAgICBjYXNlICJhcnJheWJ1ZmZlciIgOgogICAgICAgICAgICBjYXNlICJub2RlYnVmZmVyIiA6CiAgICAgICAgICAgICAgIHJldHVybiB1dGlscy50cmFuc2Zvcm1UbyhvcHRpb25zLnR5cGUudG9Mb3dlckNhc2UoKSwgemlwKTsKICAgICAgICAgICAgY2FzZSAiYmxvYiIgOgogICAgICAgICAgICAgICByZXR1cm4gdXRpbHMuYXJyYXlCdWZmZXIyQmxvYih1dGlscy50cmFuc2Zvcm1UbygiYXJyYXlidWZmZXIiLCB6aXApLCBvcHRpb25zLm1pbWVUeXBlKTsKICAgICAgICAgICAgLy8gY2FzZSAiemlwIGlzIGEgc3RyaW5nIgogICAgICAgICAgICBjYXNlICJiYXNlNjQiIDoKICAgICAgICAgICAgICAgcmV0dXJuIChvcHRpb25zLmJhc2U2NCkgPyBiYXNlNjQuZW5jb2RlKHppcCkgOiB6aXA7CiAgICAgICAgICAgIGRlZmF1bHQgOiAvLyBjYXNlICJzdHJpbmciIDoKICAgICAgICAgICAgICAgcmV0dXJuIHppcDsKICAgICAgICAgfQoKICAgIH0sCgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICogVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gd2l0aG91dCByZXBsYWNlbWVudC4KICAgICAqLwogICAgY3JjMzI6IGZ1bmN0aW9uIChpbnB1dCwgY3JjKSB7CiAgICAgICAgcmV0dXJuIGNyYzMyKGlucHV0LCBjcmMpOwogICAgfSwKCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiB3aXRob3V0IHJlcGxhY2VtZW50LgogICAgICovCiAgICB1dGY4ZW5jb2RlOiBmdW5jdGlvbiAoc3RyaW5nKSB7CiAgICAgICAgcmV0dXJuIHV0aWxzLnRyYW5zZm9ybVRvKCJzdHJpbmciLCB1dGY4LnV0ZjhlbmNvZGUoc3RyaW5nKSk7CiAgICB9LAoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQKICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIHdpdGhvdXQgcmVwbGFjZW1lbnQuCiAgICAgKi8KICAgIHV0ZjhkZWNvZGU6IGZ1bmN0aW9uIChpbnB1dCkgewogICAgICAgIHJldHVybiB1dGY4LnV0ZjhkZWNvZGUoaW5wdXQpOwogICAgfQp9Owptb2R1bGUuZXhwb3J0cyA9IG91dDsKCn0seyIuL2Jhc2U2NCI6MSwiLi9jb21wcmVzc2VkT2JqZWN0IjoyLCIuL2NvbXByZXNzaW9ucyI6MywiLi9jcmMzMiI6NCwiLi9kZWZhdWx0cyI6NiwiLi9ub2RlQnVmZmVyIjoxMSwiLi9zaWduYXR1cmUiOjE0LCIuL3N0cmluZ1dyaXRlciI6MTYsIi4vc3VwcG9ydCI6MTcsIi4vdWludDhBcnJheVdyaXRlciI6MTksIi4vdXRmOCI6MjAsIi4vdXRpbHMiOjIxfV0sMTQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7CmV4cG9ydHMuTE9DQUxfRklMRV9IRUFERVIgPSAiUEtceDAzXHgwNCI7CmV4cG9ydHMuQ0VOVFJBTF9GSUxFX0hFQURFUiA9ICJQS1x4MDFceDAyIjsKZXhwb3J0cy5DRU5UUkFMX0RJUkVDVE9SWV9FTkQgPSAiUEtceDA1XHgwNiI7CmV4cG9ydHMuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUiA9ICJQS1x4MDZceDA3IjsKZXhwb3J0cy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQgPSAiUEtceDA2XHgwNiI7CmV4cG9ydHMuREFUQV9ERVNDUklQVE9SID0gIlBLXHgwN1x4MDgiOwoKfSx7fV0sMTU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7CnZhciBEYXRhUmVhZGVyID0gX2RlcmVxXygnLi9kYXRhUmVhZGVyJyk7CnZhciB1dGlscyA9IF9kZXJlcV8oJy4vdXRpbHMnKTsKCmZ1bmN0aW9uIFN0cmluZ1JlYWRlcihkYXRhLCBvcHRpbWl6ZWRCaW5hcnlTdHJpbmcpIHsKICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICBpZiAoIW9wdGltaXplZEJpbmFyeVN0cmluZykgewogICAgICAgIHRoaXMuZGF0YSA9IHV0aWxzLnN0cmluZzJiaW5hcnkodGhpcy5kYXRhKTsKICAgIH0KICAgIHRoaXMubGVuZ3RoID0gdGhpcy5kYXRhLmxlbmd0aDsKICAgIHRoaXMuaW5kZXggPSAwOwp9ClN0cmluZ1JlYWRlci5wcm90b3R5cGUgPSBuZXcgRGF0YVJlYWRlcigpOwovKioKICogQHNlZSBEYXRhUmVhZGVyLmJ5dGVBdAogKi8KU3RyaW5nUmVhZGVyLnByb3RvdHlwZS5ieXRlQXQgPSBmdW5jdGlvbihpKSB7CiAgICByZXR1cm4gdGhpcy5kYXRhLmNoYXJDb2RlQXQoaSk7Cn07Ci8qKgogKiBAc2VlIERhdGFSZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUKICovClN0cmluZ1JlYWRlci5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWduYXR1cmUgPSBmdW5jdGlvbihzaWcpIHsKICAgIHJldHVybiB0aGlzLmRhdGEubGFzdEluZGV4T2Yoc2lnKTsKfTsKLyoqCiAqIEBzZWUgRGF0YVJlYWRlci5yZWFkRGF0YQogKi8KU3RyaW5nUmVhZGVyLnByb3RvdHlwZS5yZWFkRGF0YSA9IGZ1bmN0aW9uKHNpemUpIHsKICAgIHRoaXMuY2hlY2tPZmZzZXQoc2l6ZSk7CiAgICAvLyB0aGlzIHdpbGwgd29yayBiZWNhdXNlIHRoZSBjb25zdHJ1Y3RvciBhcHBsaWVkIHRoZSAiJiAweGZmIiBtYXNrLgogICAgdmFyIHJlc3VsdCA9IHRoaXMuZGF0YS5zbGljZSh0aGlzLmluZGV4LCB0aGlzLmluZGV4ICsgc2l6ZSk7CiAgICB0aGlzLmluZGV4ICs9IHNpemU7CiAgICByZXR1cm4gcmVzdWx0Owp9Owptb2R1bGUuZXhwb3J0cyA9IFN0cmluZ1JlYWRlcjsKCn0seyIuL2RhdGFSZWFkZXIiOjUsIi4vdXRpbHMiOjIxfV0sMTY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7Cgp2YXIgdXRpbHMgPSBfZGVyZXFfKCcuL3V0aWxzJyk7CgovKioKICogQW4gb2JqZWN0IHRvIHdyaXRlIGFueSBjb250ZW50IHRvIGEgc3RyaW5nLgogKiBAY29uc3RydWN0b3IKICovCnZhciBTdHJpbmdXcml0ZXIgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuZGF0YSA9IFtdOwp9OwpTdHJpbmdXcml0ZXIucHJvdG90eXBlID0gewogICAgLyoqCiAgICAgKiBBcHBlbmQgYW55IGNvbnRlbnQgdG8gdGhlIGN1cnJlbnQgc3RyaW5nLgogICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0IHRoZSBjb250ZW50IHRvIGFkZC4KICAgICAqLwogICAgYXBwZW5kOiBmdW5jdGlvbihpbnB1dCkgewogICAgICAgIGlucHV0ID0gdXRpbHMudHJhbnNmb3JtVG8oInN0cmluZyIsIGlucHV0KTsKICAgICAgICB0aGlzLmRhdGEucHVzaChpbnB1dCk7CiAgICB9LAogICAgLyoqCiAgICAgKiBGaW5hbGl6ZSB0aGUgY29uc3RydWN0aW9uIGFuIHJldHVybiB0aGUgcmVzdWx0LgogICAgICogQHJldHVybiB7c3RyaW5nfSB0aGUgZ2VuZXJhdGVkIHN0cmluZy4KICAgICAqLwogICAgZmluYWxpemU6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmRhdGEuam9pbigiIik7CiAgICB9Cn07Cgptb2R1bGUuZXhwb3J0cyA9IFN0cmluZ1dyaXRlcjsKCn0seyIuL3V0aWxzIjoyMX1dLDE3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKGZ1bmN0aW9uIChCdWZmZXIpewondXNlIHN0cmljdCc7CmV4cG9ydHMuYmFzZTY0ID0gdHJ1ZTsKZXhwb3J0cy5hcnJheSA9IHRydWU7CmV4cG9ydHMuc3RyaW5nID0gdHJ1ZTsKZXhwb3J0cy5hcnJheWJ1ZmZlciA9IHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICJ1bmRlZmluZWQiOwovLyBjb250YWlucyB0cnVlIGlmIEpTWmlwIGNhbiByZWFkL2dlbmVyYXRlIG5vZGVqcyBCdWZmZXIsIGZhbHNlIG90aGVyd2lzZS4KLy8gQnJvd3NlcmlmeSB3aWxsIHByb3ZpZGUgYSBCdWZmZXIgaW1wbGVtZW50YXRpb24gZm9yIGJyb3dzZXJzLCB3aGljaCBpcwovLyBhbiBhdWdtZW50ZWQgVWludDhBcnJheSAoaS5lLiwgY2FuIGJlIHVzZWQgYXMgZWl0aGVyIEJ1ZmZlciBvciBVOCkuCmV4cG9ydHMubm9kZWJ1ZmZlciA9IHR5cGVvZiBCdWZmZXIgIT09ICJ1bmRlZmluZWQiOwovLyBjb250YWlucyB0cnVlIGlmIEpTWmlwIGNhbiByZWFkL2dlbmVyYXRlIFVpbnQ4QXJyYXksIGZhbHNlIG90aGVyd2lzZS4KZXhwb3J0cy51aW50OGFycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICJ1bmRlZmluZWQiOwoKaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gInVuZGVmaW5lZCIpIHsKICAgIGV4cG9ydHMuYmxvYiA9IGZhbHNlOwp9CmVsc2UgewogICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcigwKTsKICAgIHRyeSB7CiAgICAgICAgZXhwb3J0cy5ibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsKICAgICAgICAgICAgdHlwZTogImFwcGxpY2F0aW9uL3ppcCIKICAgICAgICB9KS5zaXplID09PSAwOwogICAgfQogICAgY2F0Y2ggKGUpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICB2YXIgQnVpbGRlciA9IHdpbmRvdy5CbG9iQnVpbGRlciB8fCB3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXIgfHwgd2luZG93Lk1vekJsb2JCdWlsZGVyIHx8IHdpbmRvdy5NU0Jsb2JCdWlsZGVyOwogICAgICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCk7CiAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGJ1ZmZlcik7CiAgICAgICAgICAgIGV4cG9ydHMuYmxvYiA9IGJ1aWxkZXIuZ2V0QmxvYignYXBwbGljYXRpb24vemlwJykuc2l6ZSA9PT0gMDsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGUpIHsKICAgICAgICAgICAgZXhwb3J0cy5ibG9iID0gZmFsc2U7CiAgICAgICAgfQogICAgfQp9Cgp9KS5jYWxsKHRoaXMsKHR5cGVvZiBCdWZmZXIgIT09ICJ1bmRlZmluZWQiID8gQnVmZmVyIDogdW5kZWZpbmVkKSkKfSx7fV0sMTg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7CnZhciBEYXRhUmVhZGVyID0gX2RlcmVxXygnLi9kYXRhUmVhZGVyJyk7CgpmdW5jdGlvbiBVaW50OEFycmF5UmVhZGVyKGRhdGEpIHsKICAgIGlmIChkYXRhKSB7CiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsKICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMuZGF0YS5sZW5ndGg7CiAgICAgICAgdGhpcy5pbmRleCA9IDA7CiAgICB9Cn0KVWludDhBcnJheVJlYWRlci5wcm90b3R5cGUgPSBuZXcgRGF0YVJlYWRlcigpOwovKioKICogQHNlZSBEYXRhUmVhZGVyLmJ5dGVBdAogKi8KVWludDhBcnJheVJlYWRlci5wcm90b3R5cGUuYnl0ZUF0ID0gZnVuY3Rpb24oaSkgewogICAgcmV0dXJuIHRoaXMuZGF0YVtpXTsKfTsKLyoqCiAqIEBzZWUgRGF0YVJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZQogKi8KVWludDhBcnJheVJlYWRlci5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWduYXR1cmUgPSBmdW5jdGlvbihzaWcpIHsKICAgIHZhciBzaWcwID0gc2lnLmNoYXJDb2RlQXQoMCksCiAgICAgICAgc2lnMSA9IHNpZy5jaGFyQ29kZUF0KDEpLAogICAgICAgIHNpZzIgPSBzaWcuY2hhckNvZGVBdCgyKSwKICAgICAgICBzaWczID0gc2lnLmNoYXJDb2RlQXQoMyk7CiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSA0OyBpID49IDA7IC0taSkgewogICAgICAgIGlmICh0aGlzLmRhdGFbaV0gPT09IHNpZzAgJiYgdGhpcy5kYXRhW2kgKyAxXSA9PT0gc2lnMSAmJiB0aGlzLmRhdGFbaSArIDJdID09PSBzaWcyICYmIHRoaXMuZGF0YVtpICsgM10gPT09IHNpZzMpIHsKICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAtMTsKfTsKLyoqCiAqIEBzZWUgRGF0YVJlYWRlci5yZWFkRGF0YQogKi8KVWludDhBcnJheVJlYWRlci5wcm90b3R5cGUucmVhZERhdGEgPSBmdW5jdGlvbihzaXplKSB7CiAgICB0aGlzLmNoZWNrT2Zmc2V0KHNpemUpOwogICAgaWYoc2l6ZSA9PT0gMCkgewogICAgICAgIC8vIGluIElFMTAsIHdoZW4gdXNpbmcgc3ViYXJyYXkoaWR4LCBpZHgpLCB3ZSBnZXQgdGhlIGFycmF5IFsweDAwXSBpbnN0ZWFkIG9mIFtdLgogICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgwKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSB0aGlzLmRhdGEuc3ViYXJyYXkodGhpcy5pbmRleCwgdGhpcy5pbmRleCArIHNpemUpOwogICAgdGhpcy5pbmRleCArPSBzaXplOwogICAgcmV0dXJuIHJlc3VsdDsKfTsKbW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5UmVhZGVyOwoKfSx7Ii4vZGF0YVJlYWRlciI6NX1dLDE5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKdmFyIHV0aWxzID0gX2RlcmVxXygnLi91dGlscycpOwoKLyoqCiAqIEFuIG9iamVjdCB0byB3cml0ZSBhbnkgY29udGVudCB0byBhbiBVaW50OEFycmF5LgogKiBAY29uc3RydWN0b3IKICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBhcnJheS4KICovCnZhciBVaW50OEFycmF5V3JpdGVyID0gZnVuY3Rpb24obGVuZ3RoKSB7CiAgICB0aGlzLmRhdGEgPSBuZXcgVWludDhBcnJheShsZW5ndGgpOwogICAgdGhpcy5pbmRleCA9IDA7Cn07ClVpbnQ4QXJyYXlXcml0ZXIucHJvdG90eXBlID0gewogICAgLyoqCiAgICAgKiBBcHBlbmQgYW55IGNvbnRlbnQgdG8gdGhlIGN1cnJlbnQgYXJyYXkuCiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXQgdGhlIGNvbnRlbnQgdG8gYWRkLgogICAgICovCiAgICBhcHBlbmQ6IGZ1bmN0aW9uKGlucHV0KSB7CiAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCAhPT0gMCkgewogICAgICAgICAgICAvLyB3aXRoIGFuIGVtcHR5IFVpbnQ4QXJyYXksIE9wZXJhIGZhaWxzIHdpdGggYSAiT2Zmc2V0IGxhcmdlciB0aGFuIGFycmF5IHNpemUiCiAgICAgICAgICAgIGlucHV0ID0gdXRpbHMudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLCBpbnB1dCk7CiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXQoaW5wdXQsIHRoaXMuaW5kZXgpOwogICAgICAgICAgICB0aGlzLmluZGV4ICs9IGlucHV0Lmxlbmd0aDsKICAgICAgICB9CiAgICB9LAogICAgLyoqCiAgICAgKiBGaW5hbGl6ZSB0aGUgY29uc3RydWN0aW9uIGFuIHJldHVybiB0aGUgcmVzdWx0LgogICAgICogQHJldHVybiB7VWludDhBcnJheX0gdGhlIGdlbmVyYXRlZCBhcnJheS4KICAgICAqLwogICAgZmluYWxpemU6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmRhdGE7CiAgICB9Cn07Cgptb2R1bGUuZXhwb3J0cyA9IFVpbnQ4QXJyYXlXcml0ZXI7Cgp9LHsiLi91dGlscyI6MjF9XSwyMDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCnZhciB1dGlscyA9IF9kZXJlcV8oJy4vdXRpbHMnKTsKdmFyIHN1cHBvcnQgPSBfZGVyZXFfKCcuL3N1cHBvcnQnKTsKdmFyIG5vZGVCdWZmZXIgPSBfZGVyZXFfKCcuL25vZGVCdWZmZXInKTsKCi8qKgogKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBjb21lIGZyb20gcGFrbywgZnJvbSBwYWtvL2xpYi91dGlscy9zdHJpbmdzCiAqIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSwgc2VlIHBha28gaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9wYWtvLwogKi8KCi8vIFRhYmxlIHdpdGggdXRmOCBsZW5ndGhzIChjYWxjdWxhdGVkIGJ5IGZpcnN0IGJ5dGUgb2Ygc2VxdWVuY2UpCi8vIE5vdGUsIHRoYXQgNSAmIDYtYnl0ZSB2YWx1ZXMgYW5kIHNvbWUgNC1ieXRlIHZhbHVlcyBjYW4gbm90IGJlIHJlcHJlc2VudGVkIGluIEpTLAovLyBiZWNhdXNlIG1heCBwb3NzaWJsZSBjb2RlcG9pbnQgaXMgMHgxMGZmZmYKdmFyIF91dGY4bGVuID0gbmV3IEFycmF5KDI1Nik7CmZvciAodmFyIGk9MDsgaTwyNTY7IGkrKykgewogIF91dGY4bGVuW2ldID0gKGkgPj0gMjUyID8gNiA6IGkgPj0gMjQ4ID8gNSA6IGkgPj0gMjQwID8gNCA6IGkgPj0gMjI0ID8gMyA6IGkgPj0gMTkyID8gMiA6IDEpOwp9Cl91dGY4bGVuWzI1NF09X3V0ZjhsZW5bMjU0XT0xOyAvLyBJbnZhbGlkIHNlcXVlbmNlIHN0YXJ0CgovLyBjb252ZXJ0IHN0cmluZyB0byBhcnJheSAodHlwZWQsIHdoZW4gcG9zc2libGUpCnZhciBzdHJpbmcyYnVmID0gZnVuY3Rpb24gKHN0cikgewogICAgdmFyIGJ1ZiwgYywgYzIsIG1fcG9zLCBpLCBzdHJfbGVuID0gc3RyLmxlbmd0aCwgYnVmX2xlbiA9IDA7CgogICAgLy8gY291bnQgYmluYXJ5IHNpemUKICAgIGZvciAobV9wb3MgPSAwOyBtX3BvcyA8IHN0cl9sZW47IG1fcG9zKyspIHsKICAgICAgICBjID0gc3RyLmNoYXJDb2RlQXQobV9wb3MpOwogICAgICAgIGlmICgoYyAmIDB4ZmMwMCkgPT09IDB4ZDgwMCAmJiAobV9wb3MrMSA8IHN0cl9sZW4pKSB7CiAgICAgICAgICAgIGMyID0gc3RyLmNoYXJDb2RlQXQobV9wb3MrMSk7CiAgICAgICAgICAgIGlmICgoYzIgJiAweGZjMDApID09PSAweGRjMDApIHsKICAgICAgICAgICAgICAgIGMgPSAweDEwMDAwICsgKChjIC0gMHhkODAwKSA8PCAxMCkgKyAoYzIgLSAweGRjMDApOwogICAgICAgICAgICAgICAgbV9wb3MrKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBidWZfbGVuICs9IGMgPCAweDgwID8gMSA6IGMgPCAweDgwMCA/IDIgOiBjIDwgMHgxMDAwMCA/IDMgOiA0OwogICAgfQoKICAgIC8vIGFsbG9jYXRlIGJ1ZmZlcgogICAgaWYgKHN1cHBvcnQudWludDhhcnJheSkgewogICAgICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGJ1Zl9sZW4pOwogICAgfSBlbHNlIHsKICAgICAgICBidWYgPSBuZXcgQXJyYXkoYnVmX2xlbik7CiAgICB9CgogICAgLy8gY29udmVydAogICAgZm9yIChpPTAsIG1fcG9zID0gMDsgaSA8IGJ1Zl9sZW47IG1fcG9zKyspIHsKICAgICAgICBjID0gc3RyLmNoYXJDb2RlQXQobV9wb3MpOwogICAgICAgIGlmICgoYyAmIDB4ZmMwMCkgPT09IDB4ZDgwMCAmJiAobV9wb3MrMSA8IHN0cl9sZW4pKSB7CiAgICAgICAgICAgIGMyID0gc3RyLmNoYXJDb2RlQXQobV9wb3MrMSk7CiAgICAgICAgICAgIGlmICgoYzIgJiAweGZjMDApID09PSAweGRjMDApIHsKICAgICAgICAgICAgICAgIGMgPSAweDEwMDAwICsgKChjIC0gMHhkODAwKSA8PCAxMCkgKyAoYzIgLSAweGRjMDApOwogICAgICAgICAgICAgICAgbV9wb3MrKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoYyA8IDB4ODApIHsKICAgICAgICAgICAgLyogb25lIGJ5dGUgKi8KICAgICAgICAgICAgYnVmW2krK10gPSBjOwogICAgICAgIH0gZWxzZSBpZiAoYyA8IDB4ODAwKSB7CiAgICAgICAgICAgIC8qIHR3byBieXRlcyAqLwogICAgICAgICAgICBidWZbaSsrXSA9IDB4QzAgfCAoYyA+Pj4gNik7CiAgICAgICAgICAgIGJ1ZltpKytdID0gMHg4MCB8IChjICYgMHgzZik7CiAgICAgICAgfSBlbHNlIGlmIChjIDwgMHgxMDAwMCkgewogICAgICAgICAgICAvKiB0aHJlZSBieXRlcyAqLwogICAgICAgICAgICBidWZbaSsrXSA9IDB4RTAgfCAoYyA+Pj4gMTIpOwogICAgICAgICAgICBidWZbaSsrXSA9IDB4ODAgfCAoYyA+Pj4gNiAmIDB4M2YpOwogICAgICAgICAgICBidWZbaSsrXSA9IDB4ODAgfCAoYyAmIDB4M2YpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8qIGZvdXIgYnl0ZXMgKi8KICAgICAgICAgICAgYnVmW2krK10gPSAweGYwIHwgKGMgPj4+IDE4KTsKICAgICAgICAgICAgYnVmW2krK10gPSAweDgwIHwgKGMgPj4+IDEyICYgMHgzZik7CiAgICAgICAgICAgIGJ1ZltpKytdID0gMHg4MCB8IChjID4+PiA2ICYgMHgzZik7CiAgICAgICAgICAgIGJ1ZltpKytdID0gMHg4MCB8IChjICYgMHgzZik7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBidWY7Cn07CgovLyBDYWxjdWxhdGUgbWF4IHBvc3NpYmxlIHBvc2l0aW9uIGluIHV0ZjggYnVmZmVyLAovLyB0aGF0IHdpbGwgbm90IGJyZWFrIHNlcXVlbmNlLiBJZiB0aGF0J3Mgbm90IHBvc3NpYmxlCi8vIC0gKHZlcnkgc21hbGwgbGltaXRzKSByZXR1cm4gbWF4IHNpemUgYXMgaXMuCi8vCi8vIGJ1ZltdIC0gdXRmOCBieXRlcyBhcnJheQovLyBtYXggICAtIGxlbmd0aCBsaW1pdCAobWFuZGF0b3J5KTsKdmFyIHV0Zjhib3JkZXIgPSBmdW5jdGlvbihidWYsIG1heCkgewogICAgdmFyIHBvczsKCiAgICBtYXggPSBtYXggfHwgYnVmLmxlbmd0aDsKICAgIGlmIChtYXggPiBidWYubGVuZ3RoKSB7IG1heCA9IGJ1Zi5sZW5ndGg7IH0KCiAgICAvLyBnbyBiYWNrIGZyb20gbGFzdCBwb3NpdGlvbiwgdW50aWwgc3RhcnQgb2Ygc2VxdWVuY2UgZm91bmQKICAgIHBvcyA9IG1heC0xOwogICAgd2hpbGUgKHBvcyA+PSAwICYmIChidWZbcG9zXSAmIDB4QzApID09PSAweDgwKSB7IHBvcy0tOyB9CgogICAgLy8gRnVja3VwIC0gdmVyeSBzbWFsbCBhbmQgYnJva2VuIHNlcXVlbmNlLAogICAgLy8gcmV0dXJuIG1heCwgYmVjYXVzZSB3ZSBzaG91bGQgcmV0dXJuIHNvbWV0aGluZyBhbnl3YXkuCiAgICBpZiAocG9zIDwgMCkgeyByZXR1cm4gbWF4OyB9CgogICAgLy8gSWYgd2UgY2FtZSB0byBzdGFydCBvZiBidWZmZXIgLSB0aGF0IG1lYW5zIHZ1ZmZlciBpcyB0b28gc21hbGwsCiAgICAvLyByZXR1cm4gbWF4IHRvby4KICAgIGlmIChwb3MgPT09IDApIHsgcmV0dXJuIG1heDsgfQoKICAgIHJldHVybiAocG9zICsgX3V0ZjhsZW5bYnVmW3Bvc11dID4gbWF4KSA/IHBvcyA6IG1heDsKfTsKCi8vIGNvbnZlcnQgYXJyYXkgdG8gc3RyaW5nCnZhciBidWYyc3RyaW5nID0gZnVuY3Rpb24gKGJ1ZikgewogICAgdmFyIHN0ciwgaSwgb3V0LCBjLCBjX2xlbjsKICAgIHZhciBsZW4gPSBidWYubGVuZ3RoOwoKICAgIC8vIFJlc2VydmUgbWF4IHBvc3NpYmxlIGxlbmd0aCAoMiB3b3JkcyBwZXIgY2hhcikKICAgIC8vIE5COiBieSB1bmtub3duIHJlYXNvbnMsIEFycmF5IGlzIHNpZ25pZmljYW50bHkgZmFzdGVyIGZvcgogICAgLy8gICAgIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkgdGhhbiBVaW50MTZBcnJheS4KICAgIHZhciB1dGYxNmJ1ZiA9IG5ldyBBcnJheShsZW4qMik7CgogICAgZm9yIChvdXQ9MCwgaT0wOyBpPGxlbjspIHsKICAgICAgICBjID0gYnVmW2krK107CiAgICAgICAgLy8gcXVpY2sgcHJvY2VzcyBhc2NpaQogICAgICAgIGlmIChjIDwgMHg4MCkgeyB1dGYxNmJ1ZltvdXQrK10gPSBjOyBjb250aW51ZTsgfQoKICAgICAgICBjX2xlbiA9IF91dGY4bGVuW2NdOwogICAgICAgIC8vIHNraXAgNSAmIDYgYnl0ZSBjb2RlcwogICAgICAgIGlmIChjX2xlbiA+IDQpIHsgdXRmMTZidWZbb3V0KytdID0gMHhmZmZkOyBpICs9IGNfbGVuLTE7IGNvbnRpbnVlOyB9CgogICAgICAgIC8vIGFwcGx5IG1hc2sgb24gZmlyc3QgYnl0ZQogICAgICAgIGMgJj0gY19sZW4gPT09IDIgPyAweDFmIDogY19sZW4gPT09IDMgPyAweDBmIDogMHgwNzsKICAgICAgICAvLyBqb2luIHRoZSByZXN0CiAgICAgICAgd2hpbGUgKGNfbGVuID4gMSAmJiBpIDwgbGVuKSB7CiAgICAgICAgICAgIGMgPSAoYyA8PCA2KSB8IChidWZbaSsrXSAmIDB4M2YpOwogICAgICAgICAgICBjX2xlbi0tOwogICAgICAgIH0KCiAgICAgICAgLy8gdGVybWluYXRlZCBieSBlbmQgb2Ygc3RyaW5nPwogICAgICAgIGlmIChjX2xlbiA+IDEpIHsgdXRmMTZidWZbb3V0KytdID0gMHhmZmZkOyBjb250aW51ZTsgfQoKICAgICAgICBpZiAoYyA8IDB4MTAwMDApIHsKICAgICAgICAgICAgdXRmMTZidWZbb3V0KytdID0gYzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjIC09IDB4MTAwMDA7CiAgICAgICAgICAgIHV0ZjE2YnVmW291dCsrXSA9IDB4ZDgwMCB8ICgoYyA+PiAxMCkgJiAweDNmZik7CiAgICAgICAgICAgIHV0ZjE2YnVmW291dCsrXSA9IDB4ZGMwMCB8IChjICYgMHgzZmYpOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBzaHJpbmtCdWYodXRmMTZidWYsIG91dCkKICAgIGlmICh1dGYxNmJ1Zi5sZW5ndGggIT09IG91dCkgewogICAgICAgIGlmKHV0ZjE2YnVmLnN1YmFycmF5KSB7CiAgICAgICAgICAgIHV0ZjE2YnVmID0gdXRmMTZidWYuc3ViYXJyYXkoMCwgb3V0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB1dGYxNmJ1Zi5sZW5ndGggPSBvdXQ7CiAgICAgICAgfQogICAgfQoKICAgIC8vIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHV0ZjE2YnVmKTsKICAgIHJldHVybiB1dGlscy5hcHBseUZyb21DaGFyQ29kZSh1dGYxNmJ1Zik7Cn07CgoKLy8gVGhhdCdzIGFsbCBmb3IgdGhlIHBha28gZnVuY3Rpb25zLgoKCi8qKgogKiBUcmFuc2Zvcm0gYSBqYXZhc2NyaXB0IHN0cmluZyBpbnRvIGFuIGFycmF5ICh0eXBlZCBpZiBwb3NzaWJsZSkgb2YgYnl0ZXMsCiAqIFVURi04IGVuY29kZWQuCiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgdGhlIHN0cmluZyB0byBlbmNvZGUKICogQHJldHVybiB7QXJyYXl8VWludDhBcnJheXxCdWZmZXJ9IHRoZSBVVEYtOCBlbmNvZGVkIHN0cmluZy4KICovCmV4cG9ydHMudXRmOGVuY29kZSA9IGZ1bmN0aW9uIHV0ZjhlbmNvZGUoc3RyKSB7CiAgICBpZiAoc3VwcG9ydC5ub2RlYnVmZmVyKSB7CiAgICAgICAgcmV0dXJuIG5vZGVCdWZmZXIoc3RyLCAidXRmLTgiKTsKICAgIH0KCiAgICByZXR1cm4gc3RyaW5nMmJ1ZihzdHIpOwp9OwoKCi8qKgogKiBUcmFuc2Zvcm0gYSBieXRlcyBhcnJheSAob3IgYSByZXByZXNlbnRhdGlvbikgcmVwcmVzZW50aW5nIGFuIFVURi04IGVuY29kZWQKICogc3RyaW5nIGludG8gYSBqYXZhc2NyaXB0IHN0cmluZy4KICogQHBhcmFtIHtBcnJheXxVaW50OEFycmF5fEJ1ZmZlcn0gYnVmIHRoZSBkYXRhIGRlIGRlY29kZQogKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSBkZWNvZGVkIHN0cmluZy4KICovCmV4cG9ydHMudXRmOGRlY29kZSA9IGZ1bmN0aW9uIHV0ZjhkZWNvZGUoYnVmKSB7CiAgICBpZiAoc3VwcG9ydC5ub2RlYnVmZmVyKSB7CiAgICAgICAgcmV0dXJuIHV0aWxzLnRyYW5zZm9ybVRvKCJub2RlYnVmZmVyIiwgYnVmKS50b1N0cmluZygidXRmLTgiKTsKICAgIH0KCiAgICBidWYgPSB1dGlscy50cmFuc2Zvcm1UbyhzdXBwb3J0LnVpbnQ4YXJyYXkgPyAidWludDhhcnJheSIgOiAiYXJyYXkiLCBidWYpOwoKICAgIC8vIHJldHVybiBidWYyc3RyaW5nKGJ1Zik7CiAgICAvLyBDaHJvbWUgcHJlZmVycyB0byB3b3JrIHdpdGggInNtYWxsIiBjaHVua3Mgb2YgZGF0YQogICAgLy8gZm9yIHRoZSBtZXRob2QgYnVmMnN0cmluZy4KICAgIC8vIEZpcmVmb3ggYW5kIENocm9tZSBoYXMgdGhlaXIgb3duIHNob3J0Y3V0LCBJRSBkb2Vzbid0IHNlZW0gdG8gcmVhbGx5IGNhcmUuCiAgICB2YXIgcmVzdWx0ID0gW10sIGsgPSAwLCBsZW4gPSBidWYubGVuZ3RoLCBjaHVuayA9IDY1NTM2OwogICAgd2hpbGUgKGsgPCBsZW4pIHsKICAgICAgICB2YXIgbmV4dEJvdW5kYXJ5ID0gdXRmOGJvcmRlcihidWYsIE1hdGgubWluKGsgKyBjaHVuaywgbGVuKSk7CiAgICAgICAgaWYgKHN1cHBvcnQudWludDhhcnJheSkgewogICAgICAgICAgICByZXN1bHQucHVzaChidWYyc3RyaW5nKGJ1Zi5zdWJhcnJheShrLCBuZXh0Qm91bmRhcnkpKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0LnB1c2goYnVmMnN0cmluZyhidWYuc2xpY2UoaywgbmV4dEJvdW5kYXJ5KSkpOwogICAgICAgIH0KICAgICAgICBrID0gbmV4dEJvdW5kYXJ5OwogICAgfQogICAgcmV0dXJuIHJlc3VsdC5qb2luKCIiKTsKCn07Ci8vIHZpbTogc2V0IHNoaWZ0d2lkdGg9NCBzb2Z0dGFic3RvcD00OgoKfSx7Ii4vbm9kZUJ1ZmZlciI6MTEsIi4vc3VwcG9ydCI6MTcsIi4vdXRpbHMiOjIxfV0sMjE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7CnZhciBzdXBwb3J0ID0gX2RlcmVxXygnLi9zdXBwb3J0Jyk7CnZhciBjb21wcmVzc2lvbnMgPSBfZGVyZXFfKCcuL2NvbXByZXNzaW9ucycpOwp2YXIgbm9kZUJ1ZmZlciA9IF9kZXJlcV8oJy4vbm9kZUJ1ZmZlcicpOwovKioKICogQ29udmVydCBhIHN0cmluZyB0byBhICJiaW5hcnkgc3RyaW5nIiA6IGEgc3RyaW5nIGNvbnRhaW5pbmcgb25seSBjaGFyIGNvZGVzIGJldHdlZW4gMCBhbmQgMjU1LgogKiBAcGFyYW0ge3N0cmluZ30gc3RyIHRoZSBzdHJpbmcgdG8gdHJhbnNmb3JtLgogKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSBiaW5hcnkgc3RyaW5nLgogKi8KZXhwb3J0cy5zdHJpbmcyYmluYXJ5ID0gZnVuY3Rpb24oc3RyKSB7CiAgICB2YXIgcmVzdWx0ID0gIiI7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykgewogICAgICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZik7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0Owp9OwpleHBvcnRzLmFycmF5QnVmZmVyMkJsb2IgPSBmdW5jdGlvbihidWZmZXIsIG1pbWVUeXBlKSB7CiAgICBleHBvcnRzLmNoZWNrU3VwcG9ydCgiYmxvYiIpOwoJbWltZVR5cGUgPSBtaW1lVHlwZSB8fCAnYXBwbGljYXRpb24vemlwJzsKCiAgICB0cnkgewogICAgICAgIC8vIEJsb2IgY29uc3RydWN0b3IKICAgICAgICByZXR1cm4gbmV3IEJsb2IoW2J1ZmZlcl0sIHsKICAgICAgICAgICAgdHlwZTogbWltZVR5cGUKICAgICAgICB9KTsKICAgIH0KICAgIGNhdGNoIChlKSB7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIC8vIGRlcHJlY2F0ZWQsIGJyb3dzZXIgb25seSwgb2xkIHdheQogICAgICAgICAgICB2YXIgQnVpbGRlciA9IHdpbmRvdy5CbG9iQnVpbGRlciB8fCB3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXIgfHwgd2luZG93Lk1vekJsb2JCdWlsZGVyIHx8IHdpbmRvdy5NU0Jsb2JCdWlsZGVyOwogICAgICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCk7CiAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGJ1ZmZlcik7CiAgICAgICAgICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IobWltZVR5cGUpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoZSkgewoKICAgICAgICAgICAgLy8gd2VsbCwgZnVjayA/IQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJ1ZyA6IGNhbid0IGNvbnN0cnVjdCB0aGUgQmxvYi4iKTsKICAgICAgICB9CiAgICB9CgoKfTsKLyoqCiAqIFRoZSBpZGVudGl0eSBmdW5jdGlvbi4KICogQHBhcmFtIHtPYmplY3R9IGlucHV0IHRoZSBpbnB1dC4KICogQHJldHVybiB7T2JqZWN0fSB0aGUgc2FtZSBpbnB1dC4KICovCmZ1bmN0aW9uIGlkZW50aXR5KGlucHV0KSB7CiAgICByZXR1cm4gaW5wdXQ7Cn0KCi8qKgogKiBGaWxsIGluIGFuIGFycmF5IHdpdGggYSBzdHJpbmcuCiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgdGhlIHN0cmluZyB0byB1c2UuCiAqIEBwYXJhbSB7QXJyYXl8QXJyYXlCdWZmZXJ8VWludDhBcnJheXxCdWZmZXJ9IGFycmF5IHRoZSBhcnJheSB0byBmaWxsIGluICh3aWxsIGJlIG11dGF0ZWQpLgogKiBAcmV0dXJuIHtBcnJheXxBcnJheUJ1ZmZlcnxVaW50OEFycmF5fEJ1ZmZlcn0gdGhlIHVwZGF0ZWQgYXJyYXkuCiAqLwpmdW5jdGlvbiBzdHJpbmdUb0FycmF5TGlrZShzdHIsIGFycmF5KSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkgewogICAgICAgIGFycmF5W2ldID0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGOwogICAgfQogICAgcmV0dXJuIGFycmF5Owp9CgovKioKICogVHJhbnNmb3JtIGFuIGFycmF5LWxpa2Ugb2JqZWN0IHRvIGEgc3RyaW5nLgogKiBAcGFyYW0ge0FycmF5fEFycmF5QnVmZmVyfFVpbnQ4QXJyYXl8QnVmZmVyfSBhcnJheSB0aGUgYXJyYXkgdG8gdHJhbnNmb3JtLgogKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBhcnJheUxpa2VUb1N0cmluZyhhcnJheSkgewogICAgLy8gUGVyZm9ybWFuY2VzIG5vdGVzIDoKICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAvLyBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGFycmF5KSBpcyB0aGUgZmFzdGVzdCwgc2VlCiAgICAvLyBzZWUgaHR0cDovL2pzcGVyZi5jb20vY29udmVydGluZy1hLXVpbnQ4YXJyYXktdG8tYS1zdHJpbmcvMgogICAgLy8gYnV0IHRoZSBzdGFjayBpcyBsaW1pdGVkIChhbmQgd2UgY2FuIGdldCBodWdlIGFycmF5cyAhKS4KICAgIC8vCiAgICAvLyByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShhcnJheVtpXSk7IGdlbmVyYXRlIHRvbyBtYW55IHN0cmluZ3MgIQogICAgLy8KICAgIC8vIFRoaXMgY29kZSBpcyBpbnNwaXJlZCBieSBodHRwOi8vanNwZXJmLmNvbS9hcnJheWJ1ZmZlci10by1zdHJpbmctYXBwbHktcGVyZm9ybWFuY2UvMgogICAgdmFyIGNodW5rID0gNjU1MzY7CiAgICB2YXIgcmVzdWx0ID0gW10sCiAgICAgICAgbGVuID0gYXJyYXkubGVuZ3RoLAogICAgICAgIHR5cGUgPSBleHBvcnRzLmdldFR5cGVPZihhcnJheSksCiAgICAgICAgayA9IDAsCiAgICAgICAgY2FuVXNlQXBwbHkgPSB0cnVlOwogICAgICB0cnkgewogICAgICAgICBzd2l0Y2godHlwZSkgewogICAgICAgICAgICBjYXNlICJ1aW50OGFycmF5IjoKICAgICAgICAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBuZXcgVWludDhBcnJheSgwKSk7CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJub2RlYnVmZmVyIjoKICAgICAgICAgICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBub2RlQnVmZmVyKDApKTsKICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgIGNhblVzZUFwcGx5ID0gZmFsc2U7CiAgICAgIH0KCiAgICAgIC8vIG5vIGFwcGx5IDogc2xvdyBhbmQgcGFpbmZ1bCBhbGdvcml0aG0KICAgICAgLy8gZGVmYXVsdCBicm93c2VyIG9uIGFuZHJvaWQgNC4qCiAgICAgIGlmICghY2FuVXNlQXBwbHkpIHsKICAgICAgICAgdmFyIHJlc3VsdFN0ciA9ICIiOwogICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoO2krKykgewogICAgICAgICAgICByZXN1bHRTdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShhcnJheVtpXSk7CiAgICAgICAgIH0KICAgIHJldHVybiByZXN1bHRTdHI7CiAgICB9CiAgICB3aGlsZSAoayA8IGxlbiAmJiBjaHVuayA+IDEpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAodHlwZSA9PT0gImFycmF5IiB8fCB0eXBlID09PSAibm9kZWJ1ZmZlciIpIHsKICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYXJyYXkuc2xpY2UoaywgTWF0aC5taW4oayArIGNodW5rLCBsZW4pKSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBhcnJheS5zdWJhcnJheShrLCBNYXRoLm1pbihrICsgY2h1bmssIGxlbikpKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgayArPSBjaHVuazsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKGUpIHsKICAgICAgICAgICAgY2h1bmsgPSBNYXRoLmZsb29yKGNodW5rIC8gMik7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdC5qb2luKCIiKTsKfQoKZXhwb3J0cy5hcHBseUZyb21DaGFyQ29kZSA9IGFycmF5TGlrZVRvU3RyaW5nOwoKCi8qKgogKiBDb3B5IHRoZSBkYXRhIGZyb20gYW4gYXJyYXktbGlrZSB0byBhbiBvdGhlciBhcnJheS1saWtlLgogKiBAcGFyYW0ge0FycmF5fEFycmF5QnVmZmVyfFVpbnQ4QXJyYXl8QnVmZmVyfSBhcnJheUZyb20gdGhlIG9yaWdpbiBhcnJheS4KICogQHBhcmFtIHtBcnJheXxBcnJheUJ1ZmZlcnxVaW50OEFycmF5fEJ1ZmZlcn0gYXJyYXlUbyB0aGUgZGVzdGluYXRpb24gYXJyYXkgd2hpY2ggd2lsbCBiZSBtdXRhdGVkLgogKiBAcmV0dXJuIHtBcnJheXxBcnJheUJ1ZmZlcnxVaW50OEFycmF5fEJ1ZmZlcn0gdGhlIHVwZGF0ZWQgZGVzdGluYXRpb24gYXJyYXkuCiAqLwpmdW5jdGlvbiBhcnJheUxpa2VUb0FycmF5TGlrZShhcnJheUZyb20sIGFycmF5VG8pIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlGcm9tLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgYXJyYXlUb1tpXSA9IGFycmF5RnJvbVtpXTsKICAgIH0KICAgIHJldHVybiBhcnJheVRvOwp9CgovLyBhIG1hdHJpeCBjb250YWluaW5nIGZ1bmN0aW9ucyB0byB0cmFuc2Zvcm0gZXZlcnl0aGluZyBpbnRvIGV2ZXJ5dGhpbmcuCnZhciB0cmFuc2Zvcm0gPSB7fTsKCi8vIHN0cmluZyB0byA/CnRyYW5zZm9ybVsic3RyaW5nIl0gPSB7CiAgICAic3RyaW5nIjogaWRlbnRpdHksCiAgICAiYXJyYXkiOiBmdW5jdGlvbihpbnB1dCkgewogICAgICAgIHJldHVybiBzdHJpbmdUb0FycmF5TGlrZShpbnB1dCwgbmV3IEFycmF5KGlucHV0Lmxlbmd0aCkpOwogICAgfSwKICAgICJhcnJheWJ1ZmZlciI6IGZ1bmN0aW9uKGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybVsic3RyaW5nIl1bInVpbnQ4YXJyYXkiXShpbnB1dCkuYnVmZmVyOwogICAgfSwKICAgICJ1aW50OGFycmF5IjogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICByZXR1cm4gc3RyaW5nVG9BcnJheUxpa2UoaW5wdXQsIG5ldyBVaW50OEFycmF5KGlucHV0Lmxlbmd0aCkpOwogICAgfSwKICAgICJub2RlYnVmZmVyIjogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICByZXR1cm4gc3RyaW5nVG9BcnJheUxpa2UoaW5wdXQsIG5vZGVCdWZmZXIoaW5wdXQubGVuZ3RoKSk7CiAgICB9Cn07CgovLyBhcnJheSB0byA/CnRyYW5zZm9ybVsiYXJyYXkiXSA9IHsKICAgICJzdHJpbmciOiBhcnJheUxpa2VUb1N0cmluZywKICAgICJhcnJheSI6IGlkZW50aXR5LAogICAgImFycmF5YnVmZmVyIjogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICByZXR1cm4gKG5ldyBVaW50OEFycmF5KGlucHV0KSkuYnVmZmVyOwogICAgfSwKICAgICJ1aW50OGFycmF5IjogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoaW5wdXQpOwogICAgfSwKICAgICJub2RlYnVmZmVyIjogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICByZXR1cm4gbm9kZUJ1ZmZlcihpbnB1dCk7CiAgICB9Cn07CgovLyBhcnJheWJ1ZmZlciB0byA/CnRyYW5zZm9ybVsiYXJyYXlidWZmZXIiXSA9IHsKICAgICJzdHJpbmciOiBmdW5jdGlvbihpbnB1dCkgewogICAgICAgIHJldHVybiBhcnJheUxpa2VUb1N0cmluZyhuZXcgVWludDhBcnJheShpbnB1dCkpOwogICAgfSwKICAgICJhcnJheSI6IGZ1bmN0aW9uKGlucHV0KSB7CiAgICAgICAgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXlMaWtlKG5ldyBVaW50OEFycmF5KGlucHV0KSwgbmV3IEFycmF5KGlucHV0LmJ5dGVMZW5ndGgpKTsKICAgIH0sCiAgICAiYXJyYXlidWZmZXIiOiBpZGVudGl0eSwKICAgICJ1aW50OGFycmF5IjogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoaW5wdXQpOwogICAgfSwKICAgICJub2RlYnVmZmVyIjogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICByZXR1cm4gbm9kZUJ1ZmZlcihuZXcgVWludDhBcnJheShpbnB1dCkpOwogICAgfQp9OwoKLy8gdWludDhhcnJheSB0byA/CnRyYW5zZm9ybVsidWludDhhcnJheSJdID0gewogICAgInN0cmluZyI6IGFycmF5TGlrZVRvU3RyaW5nLAogICAgImFycmF5IjogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICByZXR1cm4gYXJyYXlMaWtlVG9BcnJheUxpa2UoaW5wdXQsIG5ldyBBcnJheShpbnB1dC5sZW5ndGgpKTsKICAgIH0sCiAgICAiYXJyYXlidWZmZXIiOiBmdW5jdGlvbihpbnB1dCkgewogICAgICAgIHJldHVybiBpbnB1dC5idWZmZXI7CiAgICB9LAogICAgInVpbnQ4YXJyYXkiOiBpZGVudGl0eSwKICAgICJub2RlYnVmZmVyIjogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICByZXR1cm4gbm9kZUJ1ZmZlcihpbnB1dCk7CiAgICB9Cn07CgovLyBub2RlYnVmZmVyIHRvID8KdHJhbnNmb3JtWyJub2RlYnVmZmVyIl0gPSB7CiAgICAic3RyaW5nIjogYXJyYXlMaWtlVG9TdHJpbmcsCiAgICAiYXJyYXkiOiBmdW5jdGlvbihpbnB1dCkgewogICAgICAgIHJldHVybiBhcnJheUxpa2VUb0FycmF5TGlrZShpbnB1dCwgbmV3IEFycmF5KGlucHV0Lmxlbmd0aCkpOwogICAgfSwKICAgICJhcnJheWJ1ZmZlciI6IGZ1bmN0aW9uKGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybVsibm9kZWJ1ZmZlciJdWyJ1aW50OGFycmF5Il0oaW5wdXQpLmJ1ZmZlcjsKICAgIH0sCiAgICAidWludDhhcnJheSI6IGZ1bmN0aW9uKGlucHV0KSB7CiAgICAgICAgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXlMaWtlKGlucHV0LCBuZXcgVWludDhBcnJheShpbnB1dC5sZW5ndGgpKTsKICAgIH0sCiAgICAibm9kZWJ1ZmZlciI6IGlkZW50aXR5Cn07CgovKioKICogVHJhbnNmb3JtIGFuIGlucHV0IGludG8gYW55IHR5cGUuCiAqIFRoZSBzdXBwb3J0ZWQgb3V0cHV0IHR5cGUgYXJlIDogc3RyaW5nLCBhcnJheSwgdWludDhhcnJheSwgYXJyYXlidWZmZXIsIG5vZGVidWZmZXIuCiAqIElmIG5vIG91dHB1dCB0eXBlIGlzIHNwZWNpZmllZCwgdGhlIHVubW9kaWZpZWQgaW5wdXQgd2lsbCBiZSByZXR1cm5lZC4KICogQHBhcmFtIHtTdHJpbmd9IG91dHB1dFR5cGUgdGhlIG91dHB1dCB0eXBlLgogKiBAcGFyYW0ge1N0cmluZ3xBcnJheXxBcnJheUJ1ZmZlcnxVaW50OEFycmF5fEJ1ZmZlcn0gaW5wdXQgdGhlIGlucHV0IHRvIGNvbnZlcnQuCiAqIEB0aHJvd3Mge0Vycm9yfSBhbiBFcnJvciBpZiB0aGUgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgdGhlIHJlcXVlc3RlZCBvdXRwdXQgdHlwZS4KICovCmV4cG9ydHMudHJhbnNmb3JtVG8gPSBmdW5jdGlvbihvdXRwdXRUeXBlLCBpbnB1dCkgewogICAgaWYgKCFpbnB1dCkgewogICAgICAgIC8vIHVuZGVmaW5lZCwgbnVsbCwgZXRjCiAgICAgICAgLy8gYW4gZW1wdHkgc3RyaW5nIHdvbid0IGhhcm0uCiAgICAgICAgaW5wdXQgPSAiIjsKICAgIH0KICAgIGlmICghb3V0cHV0VHlwZSkgewogICAgICAgIHJldHVybiBpbnB1dDsKICAgIH0KICAgIGV4cG9ydHMuY2hlY2tTdXBwb3J0KG91dHB1dFR5cGUpOwogICAgdmFyIGlucHV0VHlwZSA9IGV4cG9ydHMuZ2V0VHlwZU9mKGlucHV0KTsKICAgIHZhciByZXN1bHQgPSB0cmFuc2Zvcm1baW5wdXRUeXBlXVtvdXRwdXRUeXBlXShpbnB1dCk7CiAgICByZXR1cm4gcmVzdWx0Owp9OwoKLyoqCiAqIFJldHVybiB0aGUgdHlwZSBvZiB0aGUgaW5wdXQuCiAqIFRoZSB0eXBlIHdpbGwgYmUgaW4gYSBmb3JtYXQgdmFsaWQgZm9yIEpTWmlwLnV0aWxzLnRyYW5zZm9ybVRvIDogc3RyaW5nLCBhcnJheSwgdWludDhhcnJheSwgYXJyYXlidWZmZXIuCiAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dCB0aGUgaW5wdXQgdG8gaWRlbnRpZnkuCiAqIEByZXR1cm4ge1N0cmluZ30gdGhlIChsb3dlcmNhc2UpIHR5cGUgb2YgdGhlIGlucHV0LgogKi8KZXhwb3J0cy5nZXRUeXBlT2YgPSBmdW5jdGlvbihpbnB1dCkgewogICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gInN0cmluZyIpIHsKICAgICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gIltvYmplY3QgQXJyYXldIikgewogICAgICAgIHJldHVybiAiYXJyYXkiOwogICAgfQogICAgaWYgKHN1cHBvcnQubm9kZWJ1ZmZlciAmJiBub2RlQnVmZmVyLnRlc3QoaW5wdXQpKSB7CiAgICAgICAgcmV0dXJuICJub2RlYnVmZmVyIjsKICAgIH0KICAgIGlmIChzdXBwb3J0LnVpbnQ4YXJyYXkgJiYgaW5wdXQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7CiAgICAgICAgcmV0dXJuICJ1aW50OGFycmF5IjsKICAgIH0KICAgIGlmIChzdXBwb3J0LmFycmF5YnVmZmVyICYmIGlucHV0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHsKICAgICAgICByZXR1cm4gImFycmF5YnVmZmVyIjsKICAgIH0KfTsKCi8qKgogKiBUaHJvdyBhbiBleGNlcHRpb24gaWYgdGhlIHR5cGUgaXMgbm90IHN1cHBvcnRlZC4KICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgdGhlIHR5cGUgdG8gY2hlY2suCiAqIEB0aHJvd3Mge0Vycm9yfSBhbiBFcnJvciBpZiB0aGUgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgdGhlIHJlcXVlc3RlZCB0eXBlLgogKi8KZXhwb3J0cy5jaGVja1N1cHBvcnQgPSBmdW5jdGlvbih0eXBlKSB7CiAgICB2YXIgc3VwcG9ydGVkID0gc3VwcG9ydFt0eXBlLnRvTG93ZXJDYXNlKCldOwogICAgaWYgKCFzdXBwb3J0ZWQpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IodHlwZSArICIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIiKTsKICAgIH0KfTsKZXhwb3J0cy5NQVhfVkFMVUVfMTZCSVRTID0gNjU1MzU7CmV4cG9ydHMuTUFYX1ZBTFVFXzMyQklUUyA9IC0xOyAvLyB3ZWxsLCAiXHhGRlx4RkZceEZGXHhGRlx4RkZceEZGXHhGRlx4RkYiIGlzIHBhcnNlZCBhcyAtMQoKLyoqCiAqIFByZXR0aWZ5IGEgc3RyaW5nIHJlYWQgYXMgYmluYXJ5LgogKiBAcGFyYW0ge3N0cmluZ30gc3RyIHRoZSBzdHJpbmcgdG8gcHJldHRpZnkuCiAqIEByZXR1cm4ge3N0cmluZ30gYSBwcmV0dHkgc3RyaW5nLgogKi8KZXhwb3J0cy5wcmV0dHkgPSBmdW5jdGlvbihzdHIpIHsKICAgIHZhciByZXMgPSAnJywKICAgICAgICBjb2RlLCBpOwogICAgZm9yIChpID0gMDsgaSA8IChzdHIgfHwgIiIpLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgY29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpOwogICAgICAgIHJlcyArPSAnXFx4JyArIChjb2RlIDwgMTYgPyAiMCIgOiAiIikgKyBjb2RlLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOwogICAgfQogICAgcmV0dXJuIHJlczsKfTsKCi8qKgogKiBGaW5kIGEgY29tcHJlc3Npb24gcmVnaXN0ZXJlZCBpbiBKU1ppcC4KICogQHBhcmFtIHtzdHJpbmd9IGNvbXByZXNzaW9uTWV0aG9kIHRoZSBtZXRob2QgbWFnaWMgdG8gZmluZC4KICogQHJldHVybiB7T2JqZWN0fG51bGx9IHRoZSBKU1ppcCBjb21wcmVzc2lvbiBvYmplY3QsIG51bGwgaWYgbm9uZSBmb3VuZC4KICovCmV4cG9ydHMuZmluZENvbXByZXNzaW9uID0gZnVuY3Rpb24oY29tcHJlc3Npb25NZXRob2QpIHsKICAgIGZvciAodmFyIG1ldGhvZCBpbiBjb21wcmVzc2lvbnMpIHsKICAgICAgICBpZiAoIWNvbXByZXNzaW9ucy5oYXNPd25Qcm9wZXJ0eShtZXRob2QpKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoY29tcHJlc3Npb25zW21ldGhvZF0ubWFnaWMgPT09IGNvbXByZXNzaW9uTWV0aG9kKSB7CiAgICAgICAgICAgIHJldHVybiBjb21wcmVzc2lvbnNbbWV0aG9kXTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKfTsKLyoqCiogQ3Jvc3Mtd2luZG93LCBjcm9zcy1Ob2RlLWNvbnRleHQgcmVndWxhciBleHByZXNzaW9uIGRldGVjdGlvbgoqIEBwYXJhbSAge09iamVjdH0gIG9iamVjdCBBbnl0aGluZwoqIEByZXR1cm4ge0Jvb2xlYW59ICAgICAgICB0cnVlIGlmIHRoZSBvYmplY3QgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24sCiogZmFsc2Ugb3RoZXJ3aXNlCiovCmV4cG9ydHMuaXNSZWdFeHAgPSBmdW5jdGlvbiAob2JqZWN0KSB7CiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT09ICJbb2JqZWN0IFJlZ0V4cF0iOwp9OwoKCn0seyIuL2NvbXByZXNzaW9ucyI6MywiLi9ub2RlQnVmZmVyIjoxMSwiLi9zdXBwb3J0IjoxN31dLDIyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwp2YXIgU3RyaW5nUmVhZGVyID0gX2RlcmVxXygnLi9zdHJpbmdSZWFkZXInKTsKdmFyIE5vZGVCdWZmZXJSZWFkZXIgPSBfZGVyZXFfKCcuL25vZGVCdWZmZXJSZWFkZXInKTsKdmFyIFVpbnQ4QXJyYXlSZWFkZXIgPSBfZGVyZXFfKCcuL3VpbnQ4QXJyYXlSZWFkZXInKTsKdmFyIHV0aWxzID0gX2RlcmVxXygnLi91dGlscycpOwp2YXIgc2lnID0gX2RlcmVxXygnLi9zaWduYXR1cmUnKTsKdmFyIFppcEVudHJ5ID0gX2RlcmVxXygnLi96aXBFbnRyeScpOwp2YXIgc3VwcG9ydCA9IF9kZXJlcV8oJy4vc3VwcG9ydCcpOwp2YXIganN6aXBQcm90byA9IF9kZXJlcV8oJy4vb2JqZWN0Jyk7Ci8vICBjbGFzcyBaaXBFbnRyaWVzIHt7ewovKioKICogQWxsIHRoZSBlbnRyaWVzIGluIHRoZSB6aXAgZmlsZS4KICogQGNvbnN0cnVjdG9yCiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5QnVmZmVyfFVpbnQ4QXJyYXl9IGRhdGEgdGhlIGJpbmFyeSBzdHJlYW0gdG8gbG9hZC4KICogQHBhcmFtIHtPYmplY3R9IGxvYWRPcHRpb25zIE9wdGlvbnMgZm9yIGxvYWRpbmcgdGhlIHN0cmVhbS4KICovCmZ1bmN0aW9uIFppcEVudHJpZXMoZGF0YSwgbG9hZE9wdGlvbnMpIHsKICAgIHRoaXMuZmlsZXMgPSBbXTsKICAgIHRoaXMubG9hZE9wdGlvbnMgPSBsb2FkT3B0aW9uczsKICAgIGlmIChkYXRhKSB7CiAgICAgICAgdGhpcy5sb2FkKGRhdGEpOwogICAgfQp9ClppcEVudHJpZXMucHJvdG90eXBlID0gewogICAgLyoqCiAgICAgKiBDaGVjayB0aGF0IHRoZSByZWFkZXIgaXMgb24gdGhlIHNwZWZpY2llZCBzaWduYXR1cmUuCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwZWN0ZWRTaWduYXR1cmUgdGhlIGV4cGVjdGVkIHNpZ25hdHVyZS4KICAgICAqIEB0aHJvd3Mge0Vycm9yfSBpZiBpdCBpcyBhbiBvdGhlciBzaWduYXR1cmUuCiAgICAgKi8KICAgIGNoZWNrU2lnbmF0dXJlOiBmdW5jdGlvbihleHBlY3RlZFNpZ25hdHVyZSkgewogICAgICAgIHZhciBzaWduYXR1cmUgPSB0aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpOwogICAgICAgIGlmIChzaWduYXR1cmUgIT09IGV4cGVjdGVkU2lnbmF0dXJlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCBvciBidWcgOiB1bmV4cGVjdGVkIHNpZ25hdHVyZSAiICsgIigiICsgdXRpbHMucHJldHR5KHNpZ25hdHVyZSkgKyAiLCBleHBlY3RlZCAiICsgdXRpbHMucHJldHR5KGV4cGVjdGVkU2lnbmF0dXJlKSArICIpIik7CiAgICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogUmVhZCB0aGUgZW5kIG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeS4KICAgICAqLwogICAgcmVhZEJsb2NrRW5kT2ZDZW50cmFsOiBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmRpc2tOdW1iZXIgPSB0aGlzLnJlYWRlci5yZWFkSW50KDIpOwogICAgICAgIHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQgPSB0aGlzLnJlYWRlci5yZWFkSW50KDIpOwogICAgICAgIHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrID0gdGhpcy5yZWFkZXIucmVhZEludCgyKTsKICAgICAgICB0aGlzLmNlbnRyYWxEaXJSZWNvcmRzID0gdGhpcy5yZWFkZXIucmVhZEludCgyKTsKICAgICAgICB0aGlzLmNlbnRyYWxEaXJTaXplID0gdGhpcy5yZWFkZXIucmVhZEludCg0KTsKICAgICAgICB0aGlzLmNlbnRyYWxEaXJPZmZzZXQgPSB0aGlzLnJlYWRlci5yZWFkSW50KDQpOwoKICAgICAgICB0aGlzLnppcENvbW1lbnRMZW5ndGggPSB0aGlzLnJlYWRlci5yZWFkSW50KDIpOwogICAgICAgIC8vIHdhcm5pbmcgOiB0aGUgZW5jb2RpbmcgZGVwZW5kcyBvZiB0aGUgc3lzdGVtIGxvY2FsZQogICAgICAgIC8vIE9uIGEgbGludXggbWFjaGluZSB3aXRoIExBTkc9ZW5fVVMudXRmOCwgdGhpcyBmaWVsZCBpcyB1dGY4IGVuY29kZWQuCiAgICAgICAgLy8gT24gYSB3aW5kb3dzIG1hY2hpbmUsIHRoaXMgZmllbGQgaXMgZW5jb2RlZCB3aXRoIHRoZSBsb2NhbGl6ZWQgd2luZG93cyBjb2RlIHBhZ2UuCiAgICAgICAgdGhpcy56aXBDb21tZW50ID0gdGhpcy5yZWFkZXIucmVhZFN0cmluZyh0aGlzLnppcENvbW1lbnRMZW5ndGgpOwogICAgICAgIC8vIFRvIGdldCBjb25zaXN0ZW50IGJlaGF2aW9yIHdpdGggdGhlIGdlbmVyYXRpb24gcGFydCwgd2Ugd2lsbCBhc3N1bWUgdGhhdAogICAgICAgIC8vIHRoaXMgaXMgdXRmOCBlbmNvZGVkLgogICAgICAgIHRoaXMuemlwQ29tbWVudCA9IGpzemlwUHJvdG8udXRmOGRlY29kZSh0aGlzLnppcENvbW1lbnQpOwogICAgfSwKICAgIC8qKgogICAgICogUmVhZCB0aGUgZW5kIG9mIHRoZSBaaXAgNjQgY2VudHJhbCBkaXJlY3RvcnkuCiAgICAgKiBOb3QgbWVyZ2VkIHdpdGggdGhlIG1ldGhvZCByZWFkRW5kT2ZDZW50cmFsIDoKICAgICAqIFRoZSBlbmQgb2YgY2VudHJhbCBjYW4gY29leGlzdCB3aXRoIGl0cyBaaXA2NCBicm90aGVyLAogICAgICogSSBkb24ndCB3YW50IHRvIHJlYWQgdGhlIHdyb25nIG51bWJlciBvZiBieXRlcyAhCiAgICAgKi8KICAgIHJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsOiBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZSA9IHRoaXMucmVhZGVyLnJlYWRJbnQoOCk7CiAgICAgICAgdGhpcy52ZXJzaW9uTWFkZUJ5ID0gdGhpcy5yZWFkZXIucmVhZFN0cmluZygyKTsKICAgICAgICB0aGlzLnZlcnNpb25OZWVkZWQgPSB0aGlzLnJlYWRlci5yZWFkSW50KDIpOwogICAgICAgIHRoaXMuZGlza051bWJlciA9IHRoaXMucmVhZGVyLnJlYWRJbnQoNCk7CiAgICAgICAgdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydCA9IHRoaXMucmVhZGVyLnJlYWRJbnQoNCk7CiAgICAgICAgdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2sgPSB0aGlzLnJlYWRlci5yZWFkSW50KDgpOwogICAgICAgIHRoaXMuY2VudHJhbERpclJlY29yZHMgPSB0aGlzLnJlYWRlci5yZWFkSW50KDgpOwogICAgICAgIHRoaXMuY2VudHJhbERpclNpemUgPSB0aGlzLnJlYWRlci5yZWFkSW50KDgpOwogICAgICAgIHRoaXMuY2VudHJhbERpck9mZnNldCA9IHRoaXMucmVhZGVyLnJlYWRJbnQoOCk7CgogICAgICAgIHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YSA9IHt9OwogICAgICAgIHZhciBleHRyYURhdGFTaXplID0gdGhpcy56aXA2NEVuZE9mQ2VudHJhbFNpemUgLSA0NCwKICAgICAgICAgICAgaW5kZXggPSAwLAogICAgICAgICAgICBleHRyYUZpZWxkSWQsCiAgICAgICAgICAgIGV4dHJhRmllbGRMZW5ndGgsCiAgICAgICAgICAgIGV4dHJhRmllbGRWYWx1ZTsKICAgICAgICB3aGlsZSAoaW5kZXggPCBleHRyYURhdGFTaXplKSB7CiAgICAgICAgICAgIGV4dHJhRmllbGRJZCA9IHRoaXMucmVhZGVyLnJlYWRJbnQoMik7CiAgICAgICAgICAgIGV4dHJhRmllbGRMZW5ndGggPSB0aGlzLnJlYWRlci5yZWFkSW50KDQpOwogICAgICAgICAgICBleHRyYUZpZWxkVmFsdWUgPSB0aGlzLnJlYWRlci5yZWFkU3RyaW5nKGV4dHJhRmllbGRMZW5ndGgpOwogICAgICAgICAgICB0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGFbZXh0cmFGaWVsZElkXSA9IHsKICAgICAgICAgICAgICAgIGlkOiBleHRyYUZpZWxkSWQsCiAgICAgICAgICAgICAgICBsZW5ndGg6IGV4dHJhRmllbGRMZW5ndGgsCiAgICAgICAgICAgICAgICB2YWx1ZTogZXh0cmFGaWVsZFZhbHVlCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogUmVhZCB0aGUgZW5kIG9mIHRoZSBaaXAgNjQgY2VudHJhbCBkaXJlY3RvcnkgbG9jYXRvci4KICAgICAqLwogICAgcmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWxMb2NhdG9yOiBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmRpc2tXaXRoWmlwNjRDZW50cmFsRGlyU3RhcnQgPSB0aGlzLnJlYWRlci5yZWFkSW50KDQpOwogICAgICAgIHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpciA9IHRoaXMucmVhZGVyLnJlYWRJbnQoOCk7CiAgICAgICAgdGhpcy5kaXNrc0NvdW50ID0gdGhpcy5yZWFkZXIucmVhZEludCg0KTsKICAgICAgICBpZiAodGhpcy5kaXNrc0NvdW50ID4gMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk11bHRpLXZvbHVtZXMgemlwIGFyZSBub3Qgc3VwcG9ydGVkIik7CiAgICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogUmVhZCB0aGUgbG9jYWwgZmlsZXMsIGJhc2VkIG9uIHRoZSBvZmZzZXQgcmVhZCBpbiB0aGUgY2VudHJhbCBwYXJ0LgogICAgICovCiAgICByZWFkTG9jYWxGaWxlczogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGksIGZpbGU7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuZmlsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgZmlsZSA9IHRoaXMuZmlsZXNbaV07CiAgICAgICAgICAgIHRoaXMucmVhZGVyLnNldEluZGV4KGZpbGUubG9jYWxIZWFkZXJPZmZzZXQpOwogICAgICAgICAgICB0aGlzLmNoZWNrU2lnbmF0dXJlKHNpZy5MT0NBTF9GSUxFX0hFQURFUik7CiAgICAgICAgICAgIGZpbGUucmVhZExvY2FsUGFydCh0aGlzLnJlYWRlcik7CiAgICAgICAgICAgIGZpbGUuaGFuZGxlVVRGOCgpOwogICAgICAgICAgICBmaWxlLnByb2Nlc3NBdHRyaWJ1dGVzKCk7CiAgICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogUmVhZCB0aGUgY2VudHJhbCBkaXJlY3RvcnkuCiAgICAgKi8KICAgIHJlYWRDZW50cmFsRGlyOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZmlsZTsKCiAgICAgICAgdGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5jZW50cmFsRGlyT2Zmc2V0KTsKICAgICAgICB3aGlsZSAodGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KSA9PT0gc2lnLkNFTlRSQUxfRklMRV9IRUFERVIpIHsKICAgICAgICAgICAgZmlsZSA9IG5ldyBaaXBFbnRyeSh7CiAgICAgICAgICAgICAgICB6aXA2NDogdGhpcy56aXA2NAogICAgICAgICAgICB9LCB0aGlzLmxvYWRPcHRpb25zKTsKICAgICAgICAgICAgZmlsZS5yZWFkQ2VudHJhbFBhcnQodGhpcy5yZWFkZXIpOwogICAgICAgICAgICB0aGlzLmZpbGVzLnB1c2goZmlsZSk7CiAgICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogUmVhZCB0aGUgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5LgogICAgICovCiAgICByZWFkRW5kT2ZDZW50cmFsOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoc2lnLkNFTlRSQUxfRElSRUNUT1JZX0VORCk7CiAgICAgICAgaWYgKG9mZnNldCA9PT0gLTEpIHsKICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNvbnRlbnQgaXMgYSB0cnVuY2F0ZWQgemlwIG9yIGNvbXBsZXRlIGdhcmJhZ2UuCiAgICAgICAgICAgIC8vIEEgIkxPQ0FMX0ZJTEVfSEVBREVSIiBpcyBub3QgcmVxdWlyZWQgYXQgdGhlIGJlZ2lubmluZyAoYXV0bwogICAgICAgICAgICAvLyBleHRyYWN0aWJsZSB6aXAgZm9yIGV4YW1wbGUpIGJ1dCBpdCBjYW4gZ2l2ZSBhIGdvb2QgaGludC4KICAgICAgICAgICAgLy8gSWYgYW4gYWpheCByZXF1ZXN0IHdhcyB1c2VkIHdpdGhvdXQgcmVzcG9uc2VUeXBlLCB3ZSB3aWxsIGFsc28KICAgICAgICAgICAgLy8gZ2V0IHVucmVhZGFibGUgZGF0YS4KICAgICAgICAgICAgdmFyIGlzR2FyYmFnZSA9IHRydWU7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICB0aGlzLnJlYWRlci5zZXRJbmRleCgwKTsKICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tTaWduYXR1cmUoc2lnLkxPQ0FMX0ZJTEVfSEVBREVSKTsKICAgICAgICAgICAgICAgIGlzR2FyYmFnZSA9IGZhbHNlOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7fQoKICAgICAgICAgICAgaWYgKGlzR2FyYmFnZSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW4ndCBmaW5kIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSA6IGlzIHRoaXMgYSB6aXAgZmlsZSA/ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJZiBpdCBpcywgc2VlIGh0dHA6Ly9zdHVrLmdpdGh1Yi5pby9qc3ppcC9kb2N1bWVudGF0aW9uL2hvd3RvL3JlYWRfemlwLmh0bWwiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IGNhbid0IGZpbmQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5Iik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5yZWFkZXIuc2V0SW5kZXgob2Zmc2V0KTsKICAgICAgICB0aGlzLmNoZWNrU2lnbmF0dXJlKHNpZy5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpOwogICAgICAgIHRoaXMucmVhZEJsb2NrRW5kT2ZDZW50cmFsKCk7CgoKICAgICAgICAvKiBleHRyYWN0IGZyb20gdGhlIHppcCBzcGVjIDoKICAgICAgICAgICAgNCkgIElmIG9uZSBvZiB0aGUgZmllbGRzIGluIHRoZSBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkKICAgICAgICAgICAgICAgIHJlY29yZCBpcyB0b28gc21hbGwgdG8gaG9sZCByZXF1aXJlZCBkYXRhLCB0aGUgZmllbGQKICAgICAgICAgICAgICAgIHNob3VsZCBiZSBzZXQgdG8gLTEgKDB4RkZGRiBvciAweEZGRkZGRkZGKSBhbmQgdGhlCiAgICAgICAgICAgICAgICBaSVA2NCBmb3JtYXQgcmVjb3JkIHNob3VsZCBiZSBjcmVhdGVkLgogICAgICAgICAgICA1KSAgVGhlIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSByZWNvcmQgYW5kIHRoZQogICAgICAgICAgICAgICAgWmlwNjQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IGxvY2F0b3IgcmVjb3JkIG11c3QKICAgICAgICAgICAgICAgIHJlc2lkZSBvbiB0aGUgc2FtZSBkaXNrIHdoZW4gc3BsaXR0aW5nIG9yIHNwYW5uaW5nCiAgICAgICAgICAgICAgICBhbiBhcmNoaXZlLgogICAgICAgICAqLwogICAgICAgIGlmICh0aGlzLmRpc2tOdW1iZXIgPT09IHV0aWxzLk1BWF9WQUxVRV8xNkJJVFMgfHwgdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydCA9PT0gdXRpbHMuTUFYX1ZBTFVFXzE2QklUUyB8fCB0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzayA9PT0gdXRpbHMuTUFYX1ZBTFVFXzE2QklUUyB8fCB0aGlzLmNlbnRyYWxEaXJSZWNvcmRzID09PSB1dGlscy5NQVhfVkFMVUVfMTZCSVRTIHx8IHRoaXMuY2VudHJhbERpclNpemUgPT09IHV0aWxzLk1BWF9WQUxVRV8zMkJJVFMgfHwgdGhpcy5jZW50cmFsRGlyT2Zmc2V0ID09PSB1dGlscy5NQVhfVkFMVUVfMzJCSVRTKSB7CiAgICAgICAgICAgIHRoaXMuemlwNjQgPSB0cnVlOwoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgV2FybmluZyA6IHRoZSB6aXA2NCBleHRlbnNpb24gaXMgc3VwcG9ydGVkLCBidXQgT05MWSBpZiB0aGUgNjRiaXRzIGludGVnZXIgcmVhZCBmcm9tCiAgICAgICAgICAgIHRoZSB6aXAgZmlsZSBjYW4gZml0IGludG8gYSAzMmJpdHMgaW50ZWdlci4gVGhpcyBjYW5ub3QgYmUgc29sdmVkIDogSmF2YXNjcmlwdCByZXByZXNlbnRzCiAgICAgICAgICAgIGFsbCBudW1iZXJzIGFzIDY0LWJpdCBkb3VibGUgcHJlY2lzaW9uIElFRUUgNzU0IGZsb2F0aW5nIHBvaW50IG51bWJlcnMuCiAgICAgICAgICAgIFNvLCB3ZSBoYXZlIDUzYml0cyBmb3IgaW50ZWdlcnMgYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyB0cmVhdCBldmVyeXRoaW5nIGFzIDMyYml0cy4KICAgICAgICAgICAgc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT3BlcmF0b3JzL0JpdHdpc2VfT3BlcmF0b3JzCiAgICAgICAgICAgIGFuZCBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvcHVibGljYXRpb25zL2ZpbGVzL0VDTUEtU1QvRUNNQS0yNjIucGRmIHNlY3Rpb24gOC41CiAgICAgICAgICAgICovCgogICAgICAgICAgICAvLyBzaG91bGQgbG9vayBmb3IgYSB6aXA2NCBFT0NEIGxvY2F0b3IKICAgICAgICAgICAgb2Zmc2V0ID0gdGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoc2lnLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpOwogICAgICAgICAgICBpZiAob2Zmc2V0ID09PSAtMSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY2FuJ3QgZmluZCB0aGUgWklQNjQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IGxvY2F0b3IiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnJlYWRlci5zZXRJbmRleChvZmZzZXQpOwogICAgICAgICAgICB0aGlzLmNoZWNrU2lnbmF0dXJlKHNpZy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKTsKICAgICAgICAgICAgdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3IoKTsKCiAgICAgICAgICAgIC8vIG5vdyB0aGUgemlwNjQgRU9DRCByZWNvcmQKICAgICAgICAgICAgdGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyKTsKICAgICAgICAgICAgdGhpcy5jaGVja1NpZ25hdHVyZShzaWcuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKTsKICAgICAgICAgICAgdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbCgpOwogICAgICAgIH0KICAgIH0sCiAgICBwcmVwYXJlUmVhZGVyOiBmdW5jdGlvbihkYXRhKSB7CiAgICAgICAgdmFyIHR5cGUgPSB1dGlscy5nZXRUeXBlT2YoZGF0YSk7CiAgICAgICAgaWYgKHR5cGUgPT09ICJzdHJpbmciICYmICFzdXBwb3J0LnVpbnQ4YXJyYXkpIHsKICAgICAgICAgICAgdGhpcy5yZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKGRhdGEsIHRoaXMubG9hZE9wdGlvbnMub3B0aW1pemVkQmluYXJ5U3RyaW5nKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gIm5vZGVidWZmZXIiKSB7CiAgICAgICAgICAgIHRoaXMucmVhZGVyID0gbmV3IE5vZGVCdWZmZXJSZWFkZXIoZGF0YSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB0aGlzLnJlYWRlciA9IG5ldyBVaW50OEFycmF5UmVhZGVyKHV0aWxzLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IiwgZGF0YSkpOwogICAgICAgIH0KICAgIH0sCiAgICAvKioKICAgICAqIFJlYWQgYSB6aXAgZmlsZSBhbmQgY3JlYXRlIFppcEVudHJpZXMuCiAgICAgKiBAcGFyYW0ge1N0cmluZ3xBcnJheUJ1ZmZlcnxVaW50OEFycmF5fEJ1ZmZlcn0gZGF0YSB0aGUgYmluYXJ5IHN0cmluZyByZXByZXNlbnRpbmcgYSB6aXAgZmlsZS4KICAgICAqLwogICAgbG9hZDogZnVuY3Rpb24oZGF0YSkgewogICAgICAgIHRoaXMucHJlcGFyZVJlYWRlcihkYXRhKTsKICAgICAgICB0aGlzLnJlYWRFbmRPZkNlbnRyYWwoKTsKICAgICAgICB0aGlzLnJlYWRDZW50cmFsRGlyKCk7CiAgICAgICAgdGhpcy5yZWFkTG9jYWxGaWxlcygpOwogICAgfQp9OwovLyB9fX0gZW5kIG9mIFppcEVudHJpZXMKbW9kdWxlLmV4cG9ydHMgPSBaaXBFbnRyaWVzOwoKfSx7Ii4vbm9kZUJ1ZmZlclJlYWRlciI6MTIsIi4vb2JqZWN0IjoxMywiLi9zaWduYXR1cmUiOjE0LCIuL3N0cmluZ1JlYWRlciI6MTUsIi4vc3VwcG9ydCI6MTcsIi4vdWludDhBcnJheVJlYWRlciI6MTgsIi4vdXRpbHMiOjIxLCIuL3ppcEVudHJ5IjoyM31dLDIzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwp2YXIgU3RyaW5nUmVhZGVyID0gX2RlcmVxXygnLi9zdHJpbmdSZWFkZXInKTsKdmFyIHV0aWxzID0gX2RlcmVxXygnLi91dGlscycpOwp2YXIgQ29tcHJlc3NlZE9iamVjdCA9IF9kZXJlcV8oJy4vY29tcHJlc3NlZE9iamVjdCcpOwp2YXIganN6aXBQcm90byA9IF9kZXJlcV8oJy4vb2JqZWN0Jyk7Cgp2YXIgTUFERV9CWV9ET1MgPSAweDAwOwp2YXIgTUFERV9CWV9VTklYID0gMHgwMzsKCi8vIGNsYXNzIFppcEVudHJ5IHt7ewovKioKICogQW4gZW50cnkgaW4gdGhlIHppcCBmaWxlLgogKiBAY29uc3RydWN0b3IKICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBvZiB0aGUgY3VycmVudCBmaWxlLgogKiBAcGFyYW0ge09iamVjdH0gbG9hZE9wdGlvbnMgT3B0aW9ucyBmb3IgbG9hZGluZyB0aGUgc3RyZWFtLgogKi8KZnVuY3Rpb24gWmlwRW50cnkob3B0aW9ucywgbG9hZE9wdGlvbnMpIHsKICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CiAgICB0aGlzLmxvYWRPcHRpb25zID0gbG9hZE9wdGlvbnM7Cn0KWmlwRW50cnkucHJvdG90eXBlID0gewogICAgLyoqCiAgICAgKiBzYXkgaWYgdGhlIGZpbGUgaXMgZW5jcnlwdGVkLgogICAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZmlsZSBpcyBlbmNyeXB0ZWQsIGZhbHNlIG90aGVyd2lzZS4KICAgICAqLwogICAgaXNFbmNyeXB0ZWQ6IGZ1bmN0aW9uKCkgewogICAgICAgIC8vIGJpdCAxIGlzIHNldAogICAgICAgIHJldHVybiAodGhpcy5iaXRGbGFnICYgMHgwMDAxKSA9PT0gMHgwMDAxOwogICAgfSwKICAgIC8qKgogICAgICogc2F5IGlmIHRoZSBmaWxlIGhhcyB1dGYtOCBmaWxlbmFtZS9jb21tZW50LgogICAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZmlsZW5hbWUvY29tbWVudCBpcyBpbiB1dGYtOCwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICovCiAgICB1c2VVVEY4OiBmdW5jdGlvbigpIHsKICAgICAgICAvLyBiaXQgMTEgaXMgc2V0CiAgICAgICAgcmV0dXJuICh0aGlzLmJpdEZsYWcgJiAweDA4MDApID09PSAweDA4MDA7CiAgICB9LAogICAgLyoqCiAgICAgKiBQcmVwYXJlIHRoZSBmdW5jdGlvbiB1c2VkIHRvIGdlbmVyYXRlIHRoZSBjb21wcmVzc2VkIGNvbnRlbnQgZnJvbSB0aGlzIFppcEZpbGUuCiAgICAgKiBAcGFyYW0ge0RhdGFSZWFkZXJ9IHJlYWRlciB0aGUgcmVhZGVyIHRvIHVzZS4KICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tIHRoZSBvZmZzZXQgZnJvbSB3aGVyZSB3ZSBzaG91bGQgcmVhZCB0aGUgZGF0YS4KICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byByZWFkLgogICAgICogQHJldHVybiB7RnVuY3Rpb259IHRoZSBjYWxsYmFjayB0byBnZXQgdGhlIGNvbXByZXNzZWQgY29udGVudCAodGhlIHR5cGUgZGVwZW5kcyBvZiB0aGUgRGF0YVJlYWRlciBjbGFzcykuCiAgICAgKi8KICAgIHByZXBhcmVDb21wcmVzc2VkQ29udGVudDogZnVuY3Rpb24ocmVhZGVyLCBmcm9tLCBsZW5ndGgpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBwcmV2aW91c0luZGV4ID0gcmVhZGVyLmluZGV4OwogICAgICAgICAgICByZWFkZXIuc2V0SW5kZXgoZnJvbSk7CiAgICAgICAgICAgIHZhciBjb21wcmVzc2VkRmlsZURhdGEgPSByZWFkZXIucmVhZERhdGEobGVuZ3RoKTsKICAgICAgICAgICAgcmVhZGVyLnNldEluZGV4KHByZXZpb3VzSW5kZXgpOwoKICAgICAgICAgICAgcmV0dXJuIGNvbXByZXNzZWRGaWxlRGF0YTsKICAgICAgICB9OwogICAgfSwKICAgIC8qKgogICAgICogUHJlcGFyZSB0aGUgZnVuY3Rpb24gdXNlZCB0byBnZW5lcmF0ZSB0aGUgdW5jb21wcmVzc2VkIGNvbnRlbnQgZnJvbSB0aGlzIFppcEZpbGUuCiAgICAgKiBAcGFyYW0ge0RhdGFSZWFkZXJ9IHJlYWRlciB0aGUgcmVhZGVyIHRvIHVzZS4KICAgICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tIHRoZSBvZmZzZXQgZnJvbSB3aGVyZSB3ZSBzaG91bGQgcmVhZCB0aGUgZGF0YS4KICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byByZWFkLgogICAgICogQHBhcmFtIHtKU1ppcC5jb21wcmVzc2lvbn0gY29tcHJlc3Npb24gdGhlIGNvbXByZXNzaW9uIHVzZWQgb24gdGhpcyBmaWxlLgogICAgICogQHBhcmFtIHtudW1iZXJ9IHVuY29tcHJlc3NlZFNpemUgdGhlIHVuY29tcHJlc3NlZCBzaXplIHRvIGV4cGVjdC4KICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSB0aGUgY2FsbGJhY2sgdG8gZ2V0IHRoZSB1bmNvbXByZXNzZWQgY29udGVudCAodGhlIHR5cGUgZGVwZW5kcyBvZiB0aGUgRGF0YVJlYWRlciBjbGFzcykuCiAgICAgKi8KICAgIHByZXBhcmVDb250ZW50OiBmdW5jdGlvbihyZWFkZXIsIGZyb20sIGxlbmd0aCwgY29tcHJlc3Npb24sIHVuY29tcHJlc3NlZFNpemUpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CgogICAgICAgICAgICB2YXIgY29tcHJlc3NlZEZpbGVEYXRhID0gdXRpbHMudHJhbnNmb3JtVG8oY29tcHJlc3Npb24udW5jb21wcmVzc0lucHV0VHlwZSwgdGhpcy5nZXRDb21wcmVzc2VkQ29udGVudCgpKTsKICAgICAgICAgICAgdmFyIHVuY29tcHJlc3NlZEZpbGVEYXRhID0gY29tcHJlc3Npb24udW5jb21wcmVzcyhjb21wcmVzc2VkRmlsZURhdGEpOwoKICAgICAgICAgICAgaWYgKHVuY29tcHJlc3NlZEZpbGVEYXRhLmxlbmd0aCAhPT0gdW5jb21wcmVzc2VkU2l6ZSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCdWcgOiB1bmNvbXByZXNzZWQgZGF0YSBzaXplIG1pc21hdGNoIik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiB1bmNvbXByZXNzZWRGaWxlRGF0YTsKICAgICAgICB9OwogICAgfSwKICAgIC8qKgogICAgICogUmVhZCB0aGUgbG9jYWwgcGFydCBvZiBhIHppcCBmaWxlIGFuZCBhZGQgdGhlIGluZm8gaW4gdGhpcyBvYmplY3QuCiAgICAgKiBAcGFyYW0ge0RhdGFSZWFkZXJ9IHJlYWRlciB0aGUgcmVhZGVyIHRvIHVzZS4KICAgICAqLwogICAgcmVhZExvY2FsUGFydDogZnVuY3Rpb24ocmVhZGVyKSB7CiAgICAgICAgdmFyIGNvbXByZXNzaW9uLCBsb2NhbEV4dHJhRmllbGRzTGVuZ3RoOwoKICAgICAgICAvLyB3ZSBhbHJlYWR5IGtub3cgZXZlcnl0aGluZyBmcm9tIHRoZSBjZW50cmFsIGRpciAhCiAgICAgICAgLy8gSWYgdGhlIGNlbnRyYWwgZGlyIGRhdGEgYXJlIGZhbHNlLCB3ZSBhcmUgZG9vbWVkLgogICAgICAgIC8vIE9uIHRoZSBicmlnaHQgc2lkZSwgdGhlIGxvY2FsIHBhcnQgaXMgc2NhcnkgIDogemlwNjQsIGRhdGEgZGVzY3JpcHRvcnMsIGJvdGgsIGV0Yy4KICAgICAgICAvLyBUaGUgbGVzcyBkYXRhIHdlIGdldCBoZXJlLCB0aGUgbW9yZSByZWxpYWJsZSB0aGlzIHNob3VsZCBiZS4KICAgICAgICAvLyBMZXQncyBza2lwIHRoZSB3aG9sZSBoZWFkZXIgYW5kIGRhc2ggdG8gdGhlIGRhdGEgIQogICAgICAgIHJlYWRlci5za2lwKDIyKTsKICAgICAgICAvLyBpbiBzb21lIHppcCBjcmVhdGVkIG9uIHdpbmRvd3MsIHRoZSBmaWxlbmFtZSBzdG9yZWQgaW4gdGhlIGNlbnRyYWwgZGlyIGNvbnRhaW5zIFwgaW5zdGVhZCBvZiAvLgogICAgICAgIC8vIFN0cmFuZ2VseSwgdGhlIGZpbGVuYW1lIGhlcmUgaXMgT0suCiAgICAgICAgLy8gSSB3b3VsZCBsb3ZlIHRvIHRyZWF0IHRoZXNlIHppcCBmaWxlcyBhcyBjb3JydXB0ZWQgKHNlZSBodHRwOi8vd3d3LmluZm8temlwLm9yZy9GQVEuaHRtbCNiYWNrc2xhc2hlcwogICAgICAgIC8vIG9yIEFQUE5PVEUjNC40LjE3LjEsICJBbGwgc2xhc2hlcyBNVVNUIGJlIGZvcndhcmQgc2xhc2hlcyAnLyciKSBidXQgdGhlcmUgYXJlIGEgbG90IG9mIGJhZCB6aXAgZ2VuZXJhdG9ycy4uLgogICAgICAgIC8vIFNlYXJjaCAidW56aXAgbWlzbWF0Y2hpbmcgImxvY2FsIiBmaWxlbmFtZSBjb250aW51aW5nIHdpdGggImNlbnRyYWwiIGZpbGVuYW1lIHZlcnNpb24iIG9uCiAgICAgICAgLy8gdGhlIGludGVybmV0LgogICAgICAgIC8vCiAgICAgICAgLy8gSSB0aGluayBJIHNlZSB0aGUgbG9naWMgaGVyZSA6IHRoZSBjZW50cmFsIGRpcmVjdG9yeSBpcyB1c2VkIHRvIGRpc3BsYXkKICAgICAgICAvLyBjb250ZW50IGFuZCB0aGUgbG9jYWwgZGlyZWN0b3J5IGlzIHVzZWQgdG8gZXh0cmFjdCB0aGUgZmlsZXMuIE1peGluZyAvIGFuZCBcCiAgICAgICAgLy8gbWF5IGJlIHVzZWQgdG8gZGlzcGxheSBcIHRvIHdpbmRvd3MgdXNlcnMgYW5kIHVzZSAvIHdoZW4gZXh0cmFjdGluZyB0aGUgZmlsZXMuCiAgICAgICAgLy8gVW5mb3J0dW5hdGVseSwgdGhpcyBsZWFkIGFsc28gdG8gc29tZSBpc3N1ZXMgOiBodHRwOi8vc2VjbGlzdHMub3JnL2Z1bGxkaXNjbG9zdXJlLzIwMDkvU2VwLzM5NAogICAgICAgIHRoaXMuZmlsZU5hbWVMZW5ndGggPSByZWFkZXIucmVhZEludCgyKTsKICAgICAgICBsb2NhbEV4dHJhRmllbGRzTGVuZ3RoID0gcmVhZGVyLnJlYWRJbnQoMik7IC8vIGNhbid0IGJlIHN1cmUgdGhpcyB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBjZW50cmFsIGRpcgogICAgICAgIHRoaXMuZmlsZU5hbWUgPSByZWFkZXIucmVhZFN0cmluZyh0aGlzLmZpbGVOYW1lTGVuZ3RoKTsKICAgICAgICByZWFkZXIuc2tpcChsb2NhbEV4dHJhRmllbGRzTGVuZ3RoKTsKCiAgICAgICAgaWYgKHRoaXMuY29tcHJlc3NlZFNpemUgPT0gLTEgfHwgdGhpcy51bmNvbXByZXNzZWRTaXplID09IC0xKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQnVnIG9yIGNvcnJ1cHRlZCB6aXAgOiBkaWRuJ3QgZ2V0IGVub3VnaCBpbmZvcm1hdGlvbnMgZnJvbSB0aGUgY2VudHJhbCBkaXJlY3RvcnkgIiArICIoY29tcHJlc3NlZFNpemUgPT0gLTEgfHwgdW5jb21wcmVzc2VkU2l6ZSA9PSAtMSkiKTsKICAgICAgICB9CgogICAgICAgIGNvbXByZXNzaW9uID0gdXRpbHMuZmluZENvbXByZXNzaW9uKHRoaXMuY29tcHJlc3Npb25NZXRob2QpOwogICAgICAgIGlmIChjb21wcmVzc2lvbiA9PT0gbnVsbCkgeyAvLyBubyBjb21wcmVzc2lvbiBmb3VuZAogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBjb21wcmVzc2lvbiAiICsgdXRpbHMucHJldHR5KHRoaXMuY29tcHJlc3Npb25NZXRob2QpICsgIiB1bmtub3duIChpbm5lciBmaWxlIDogIiArIHRoaXMuZmlsZU5hbWUgKyAiKSIpOwogICAgICAgIH0KICAgICAgICB0aGlzLmRlY29tcHJlc3NlZCA9IG5ldyBDb21wcmVzc2VkT2JqZWN0KCk7CiAgICAgICAgdGhpcy5kZWNvbXByZXNzZWQuY29tcHJlc3NlZFNpemUgPSB0aGlzLmNvbXByZXNzZWRTaXplOwogICAgICAgIHRoaXMuZGVjb21wcmVzc2VkLnVuY29tcHJlc3NlZFNpemUgPSB0aGlzLnVuY29tcHJlc3NlZFNpemU7CiAgICAgICAgdGhpcy5kZWNvbXByZXNzZWQuY3JjMzIgPSB0aGlzLmNyYzMyOwogICAgICAgIHRoaXMuZGVjb21wcmVzc2VkLmNvbXByZXNzaW9uTWV0aG9kID0gdGhpcy5jb21wcmVzc2lvbk1ldGhvZDsKICAgICAgICB0aGlzLmRlY29tcHJlc3NlZC5nZXRDb21wcmVzc2VkQ29udGVudCA9IHRoaXMucHJlcGFyZUNvbXByZXNzZWRDb250ZW50KHJlYWRlciwgcmVhZGVyLmluZGV4LCB0aGlzLmNvbXByZXNzZWRTaXplLCBjb21wcmVzc2lvbik7CiAgICAgICAgdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29udGVudCA9IHRoaXMucHJlcGFyZUNvbnRlbnQocmVhZGVyLCByZWFkZXIuaW5kZXgsIHRoaXMuY29tcHJlc3NlZFNpemUsIGNvbXByZXNzaW9uLCB0aGlzLnVuY29tcHJlc3NlZFNpemUpOwoKICAgICAgICAvLyB3ZSBuZWVkIHRvIGNvbXB1dGUgdGhlIGNyYzMyLi4uCiAgICAgICAgaWYgKHRoaXMubG9hZE9wdGlvbnMuY2hlY2tDUkMzMikgewogICAgICAgICAgICB0aGlzLmRlY29tcHJlc3NlZCA9IHV0aWxzLnRyYW5zZm9ybVRvKCJzdHJpbmciLCB0aGlzLmRlY29tcHJlc3NlZC5nZXRDb250ZW50KCkpOwogICAgICAgICAgICBpZiAoanN6aXBQcm90by5jcmMzMih0aGlzLmRlY29tcHJlc3NlZCkgIT09IHRoaXMuY3JjMzIpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IENSQzMyIG1pc21hdGNoIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogUmVhZCB0aGUgY2VudHJhbCBwYXJ0IG9mIGEgemlwIGZpbGUgYW5kIGFkZCB0aGUgaW5mbyBpbiB0aGlzIG9iamVjdC4KICAgICAqIEBwYXJhbSB7RGF0YVJlYWRlcn0gcmVhZGVyIHRoZSByZWFkZXIgdG8gdXNlLgogICAgICovCiAgICByZWFkQ2VudHJhbFBhcnQ6IGZ1bmN0aW9uKHJlYWRlcikgewogICAgICAgIHRoaXMudmVyc2lvbk1hZGVCeSA9IHJlYWRlci5yZWFkSW50KDIpOwogICAgICAgIHRoaXMudmVyc2lvbk5lZWRlZCA9IHJlYWRlci5yZWFkSW50KDIpOwogICAgICAgIHRoaXMuYml0RmxhZyA9IHJlYWRlci5yZWFkSW50KDIpOwogICAgICAgIHRoaXMuY29tcHJlc3Npb25NZXRob2QgPSByZWFkZXIucmVhZFN0cmluZygyKTsKICAgICAgICB0aGlzLmRhdGUgPSByZWFkZXIucmVhZERhdGUoKTsKICAgICAgICB0aGlzLmNyYzMyID0gcmVhZGVyLnJlYWRJbnQoNCk7CiAgICAgICAgdGhpcy5jb21wcmVzc2VkU2l6ZSA9IHJlYWRlci5yZWFkSW50KDQpOwogICAgICAgIHRoaXMudW5jb21wcmVzc2VkU2l6ZSA9IHJlYWRlci5yZWFkSW50KDQpOwogICAgICAgIHRoaXMuZmlsZU5hbWVMZW5ndGggPSByZWFkZXIucmVhZEludCgyKTsKICAgICAgICB0aGlzLmV4dHJhRmllbGRzTGVuZ3RoID0gcmVhZGVyLnJlYWRJbnQoMik7CiAgICAgICAgdGhpcy5maWxlQ29tbWVudExlbmd0aCA9IHJlYWRlci5yZWFkSW50KDIpOwogICAgICAgIHRoaXMuZGlza051bWJlclN0YXJ0ID0gcmVhZGVyLnJlYWRJbnQoMik7CiAgICAgICAgdGhpcy5pbnRlcm5hbEZpbGVBdHRyaWJ1dGVzID0gcmVhZGVyLnJlYWRJbnQoMik7CiAgICAgICAgdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzID0gcmVhZGVyLnJlYWRJbnQoNCk7CiAgICAgICAgdGhpcy5sb2NhbEhlYWRlck9mZnNldCA9IHJlYWRlci5yZWFkSW50KDQpOwoKICAgICAgICBpZiAodGhpcy5pc0VuY3J5cHRlZCgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiRW5jcnlwdGVkIHppcCBhcmUgbm90IHN1cHBvcnRlZCIpOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5maWxlTmFtZSA9IHJlYWRlci5yZWFkU3RyaW5nKHRoaXMuZmlsZU5hbWVMZW5ndGgpOwogICAgICAgIHRoaXMucmVhZEV4dHJhRmllbGRzKHJlYWRlcik7CiAgICAgICAgdGhpcy5wYXJzZVpJUDY0RXh0cmFGaWVsZChyZWFkZXIpOwogICAgICAgIHRoaXMuZmlsZUNvbW1lbnQgPSByZWFkZXIucmVhZFN0cmluZyh0aGlzLmZpbGVDb21tZW50TGVuZ3RoKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBQYXJzZSB0aGUgZXh0ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzIGFuZCBnZXQgdGhlIHVuaXgvZG9zIHBlcm1pc3Npb25zLgogICAgICovCiAgICBwcm9jZXNzQXR0cmlidXRlczogZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXMudW5peFBlcm1pc3Npb25zID0gbnVsbDsKICAgICAgICB0aGlzLmRvc1Blcm1pc3Npb25zID0gbnVsbDsKICAgICAgICB2YXIgbWFkZUJ5ID0gdGhpcy52ZXJzaW9uTWFkZUJ5ID4+IDg7CgogICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgdGhlIERPUyBkaXJlY3RvcnkgZmxhZyBzZXQuCiAgICAgICAgLy8gV2UgbG9vayBmb3IgaXQgaW4gdGhlIERPUyBhbmQgVU5JWCBwZXJtaXNzaW9ucwogICAgICAgIC8vIGJ1dCBzb21lIHVua25vd24gcGxhdGZvcm0gY291bGQgc2V0IGl0IGFzIGEgY29tcGF0aWJpbGl0eSBmbGFnLgogICAgICAgIHRoaXMuZGlyID0gdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzICYgMHgwMDEwID8gdHJ1ZSA6IGZhbHNlOwoKICAgICAgICBpZihtYWRlQnkgPT09IE1BREVfQllfRE9TKSB7CiAgICAgICAgICAgIC8vIGZpcnN0IDYgYml0cyAoMCB0byA1KQogICAgICAgICAgICB0aGlzLmRvc1Blcm1pc3Npb25zID0gdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzICYgMHgzRjsKICAgICAgICB9CgogICAgICAgIGlmKG1hZGVCeSA9PT0gTUFERV9CWV9VTklYKSB7CiAgICAgICAgICAgIHRoaXMudW5peFBlcm1pc3Npb25zID0gKHRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyA+PiAxNikgJiAweEZGRkY7CiAgICAgICAgICAgIC8vIHRoZSBvY3RhbCBwZXJtaXNzaW9ucyBhcmUgaW4gKHRoaXMudW5peFBlcm1pc3Npb25zICYgMHgwMUZGKS50b1N0cmluZyg4KTsKICAgICAgICB9CgogICAgICAgIC8vIGZhaWwgc2FmZSA6IGlmIHRoZSBuYW1lIGVuZHMgd2l0aCBhIC8gaXQgcHJvYmFibHkgbWVhbnMgYSBmb2xkZXIKICAgICAgICBpZiAoIXRoaXMuZGlyICYmIHRoaXMuZmlsZU5hbWUuc2xpY2UoLTEpID09PSAnLycpIHsKICAgICAgICAgICAgdGhpcy5kaXIgPSB0cnVlOwogICAgICAgIH0KICAgIH0sCgogICAgLyoqCiAgICAgKiBQYXJzZSB0aGUgWklQNjQgZXh0cmEgZmllbGQgYW5kIG1lcmdlIHRoZSBpbmZvIGluIHRoZSBjdXJyZW50IFppcEVudHJ5LgogICAgICogQHBhcmFtIHtEYXRhUmVhZGVyfSByZWFkZXIgdGhlIHJlYWRlciB0byB1c2UuCiAgICAgKi8KICAgIHBhcnNlWklQNjRFeHRyYUZpZWxkOiBmdW5jdGlvbihyZWFkZXIpIHsKCiAgICAgICAgaWYgKCF0aGlzLmV4dHJhRmllbGRzWzB4MDAwMV0pIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLy8gc2hvdWxkIGJlIHNvbWV0aGluZywgcHJlcGFyaW5nIHRoZSBleHRyYSByZWFkZXIKICAgICAgICB2YXIgZXh0cmFSZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKHRoaXMuZXh0cmFGaWVsZHNbMHgwMDAxXS52YWx1ZSk7CgogICAgICAgIC8vIEkgcmVhbGx5IGhvcGUgdGhhdCB0aGVzZSA2NGJpdHMgaW50ZWdlciBjYW4gZml0IGluIDMyIGJpdHMgaW50ZWdlciwgYmVjYXVzZSBqcwogICAgICAgIC8vIHdvbid0IGxldCB1cyBoYXZlIG1vcmUuCiAgICAgICAgaWYgKHRoaXMudW5jb21wcmVzc2VkU2l6ZSA9PT0gdXRpbHMuTUFYX1ZBTFVFXzMyQklUUykgewogICAgICAgICAgICB0aGlzLnVuY29tcHJlc3NlZFNpemUgPSBleHRyYVJlYWRlci5yZWFkSW50KDgpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5jb21wcmVzc2VkU2l6ZSA9PT0gdXRpbHMuTUFYX1ZBTFVFXzMyQklUUykgewogICAgICAgICAgICB0aGlzLmNvbXByZXNzZWRTaXplID0gZXh0cmFSZWFkZXIucmVhZEludCg4KTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMubG9jYWxIZWFkZXJPZmZzZXQgPT09IHV0aWxzLk1BWF9WQUxVRV8zMkJJVFMpIHsKICAgICAgICAgICAgdGhpcy5sb2NhbEhlYWRlck9mZnNldCA9IGV4dHJhUmVhZGVyLnJlYWRJbnQoOCk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmRpc2tOdW1iZXJTdGFydCA9PT0gdXRpbHMuTUFYX1ZBTFVFXzMyQklUUykgewogICAgICAgICAgICB0aGlzLmRpc2tOdW1iZXJTdGFydCA9IGV4dHJhUmVhZGVyLnJlYWRJbnQoNCk7CiAgICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogUmVhZCB0aGUgY2VudHJhbCBwYXJ0IG9mIGEgemlwIGZpbGUgYW5kIGFkZCB0aGUgaW5mbyBpbiB0aGlzIG9iamVjdC4KICAgICAqIEBwYXJhbSB7RGF0YVJlYWRlcn0gcmVhZGVyIHRoZSByZWFkZXIgdG8gdXNlLgogICAgICovCiAgICByZWFkRXh0cmFGaWVsZHM6IGZ1bmN0aW9uKHJlYWRlcikgewogICAgICAgIHZhciBzdGFydCA9IHJlYWRlci5pbmRleCwKICAgICAgICAgICAgZXh0cmFGaWVsZElkLAogICAgICAgICAgICBleHRyYUZpZWxkTGVuZ3RoLAogICAgICAgICAgICBleHRyYUZpZWxkVmFsdWU7CgogICAgICAgIHRoaXMuZXh0cmFGaWVsZHMgPSB0aGlzLmV4dHJhRmllbGRzIHx8IHt9OwoKICAgICAgICB3aGlsZSAocmVhZGVyLmluZGV4IDwgc3RhcnQgKyB0aGlzLmV4dHJhRmllbGRzTGVuZ3RoKSB7CiAgICAgICAgICAgIGV4dHJhRmllbGRJZCA9IHJlYWRlci5yZWFkSW50KDIpOwogICAgICAgICAgICBleHRyYUZpZWxkTGVuZ3RoID0gcmVhZGVyLnJlYWRJbnQoMik7CiAgICAgICAgICAgIGV4dHJhRmllbGRWYWx1ZSA9IHJlYWRlci5yZWFkU3RyaW5nKGV4dHJhRmllbGRMZW5ndGgpOwoKICAgICAgICAgICAgdGhpcy5leHRyYUZpZWxkc1tleHRyYUZpZWxkSWRdID0gewogICAgICAgICAgICAgICAgaWQ6IGV4dHJhRmllbGRJZCwKICAgICAgICAgICAgICAgIGxlbmd0aDogZXh0cmFGaWVsZExlbmd0aCwKICAgICAgICAgICAgICAgIHZhbHVlOiBleHRyYUZpZWxkVmFsdWUKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9LAogICAgLyoqCiAgICAgKiBBcHBseSBhbiBVVEY4IHRyYW5zZm9ybWF0aW9uIGlmIG5lZWRlZC4KICAgICAqLwogICAgaGFuZGxlVVRGODogZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMudXNlVVRGOCgpKSB7CiAgICAgICAgICAgIHRoaXMuZmlsZU5hbWUgPSBqc3ppcFByb3RvLnV0ZjhkZWNvZGUodGhpcy5maWxlTmFtZSk7CiAgICAgICAgICAgIHRoaXMuZmlsZUNvbW1lbnQgPSBqc3ppcFByb3RvLnV0ZjhkZWNvZGUodGhpcy5maWxlQ29tbWVudCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIHVwYXRoID0gdGhpcy5maW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRoKCk7CiAgICAgICAgICAgIGlmICh1cGF0aCAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgdGhpcy5maWxlTmFtZSA9IHVwYXRoOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciB1Y29tbWVudCA9IHRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudCgpOwogICAgICAgICAgICBpZiAodWNvbW1lbnQgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHRoaXMuZmlsZUNvbW1lbnQgPSB1Y29tbWVudDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sCgogICAgLyoqCiAgICAgKiBGaW5kIHRoZSB1bmljb2RlIHBhdGggZGVjbGFyZWQgaW4gdGhlIGV4dHJhIGZpZWxkLCBpZiBhbnkuCiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSB1bmljb2RlIHBhdGgsIG51bGwgb3RoZXJ3aXNlLgogICAgICovCiAgICBmaW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRoOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgdXBhdGhGaWVsZCA9IHRoaXMuZXh0cmFGaWVsZHNbMHg3MDc1XTsKICAgICAgICBpZiAodXBhdGhGaWVsZCkgewogICAgICAgICAgICB2YXIgZXh0cmFSZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKHVwYXRoRmllbGQudmFsdWUpOwoKICAgICAgICAgICAgLy8gd3JvbmcgdmVyc2lvbgogICAgICAgICAgICBpZiAoZXh0cmFSZWFkZXIucmVhZEludCgxKSAhPT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIHRoZSBjcmMgb2YgdGhlIGZpbGVuYW1lIGNoYW5nZWQsIHRoaXMgZmllbGQgaXMgb3V0IG9mIGRhdGUuCiAgICAgICAgICAgIGlmIChqc3ppcFByb3RvLmNyYzMyKHRoaXMuZmlsZU5hbWUpICE9PSBleHRyYVJlYWRlci5yZWFkSW50KDQpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGpzemlwUHJvdG8udXRmOGRlY29kZShleHRyYVJlYWRlci5yZWFkU3RyaW5nKHVwYXRoRmllbGQubGVuZ3RoIC0gNSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0sCgogICAgLyoqCiAgICAgKiBGaW5kIHRoZSB1bmljb2RlIGNvbW1lbnQgZGVjbGFyZWQgaW4gdGhlIGV4dHJhIGZpZWxkLCBpZiBhbnkuCiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSB1bmljb2RlIGNvbW1lbnQsIG51bGwgb3RoZXJ3aXNlLgogICAgICovCiAgICBmaW5kRXh0cmFGaWVsZFVuaWNvZGVDb21tZW50OiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgdWNvbW1lbnRGaWVsZCA9IHRoaXMuZXh0cmFGaWVsZHNbMHg2Mzc1XTsKICAgICAgICBpZiAodWNvbW1lbnRGaWVsZCkgewogICAgICAgICAgICB2YXIgZXh0cmFSZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKHVjb21tZW50RmllbGQudmFsdWUpOwoKICAgICAgICAgICAgLy8gd3JvbmcgdmVyc2lvbgogICAgICAgICAgICBpZiAoZXh0cmFSZWFkZXIucmVhZEludCgxKSAhPT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIHRoZSBjcmMgb2YgdGhlIGNvbW1lbnQgY2hhbmdlZCwgdGhpcyBmaWVsZCBpcyBvdXQgb2YgZGF0ZS4KICAgICAgICAgICAgaWYgKGpzemlwUHJvdG8uY3JjMzIodGhpcy5maWxlQ29tbWVudCkgIT09IGV4dHJhUmVhZGVyLnJlYWRJbnQoNCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4ganN6aXBQcm90by51dGY4ZGVjb2RlKGV4dHJhUmVhZGVyLnJlYWRTdHJpbmcodWNvbW1lbnRGaWVsZC5sZW5ndGggLSA1KSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQp9Owptb2R1bGUuZXhwb3J0cyA9IFppcEVudHJ5OwoKfSx7Ii4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9vYmplY3QiOjEzLCIuL3N0cmluZ1JlYWRlciI6MTUsIi4vdXRpbHMiOjIxfV0sMjQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewovLyBUb3AgbGV2ZWwgZmlsZSBpcyBqdXN0IGEgbWl4aW4gb2Ygc3VibW9kdWxlcyAmIGNvbnN0YW50cwondXNlIHN0cmljdCc7Cgp2YXIgYXNzaWduICAgID0gX2RlcmVxXygnLi9saWIvdXRpbHMvY29tbW9uJykuYXNzaWduOwoKdmFyIGRlZmxhdGUgICA9IF9kZXJlcV8oJy4vbGliL2RlZmxhdGUnKTsKdmFyIGluZmxhdGUgICA9IF9kZXJlcV8oJy4vbGliL2luZmxhdGUnKTsKdmFyIGNvbnN0YW50cyA9IF9kZXJlcV8oJy4vbGliL3psaWIvY29uc3RhbnRzJyk7Cgp2YXIgcGFrbyA9IHt9OwoKYXNzaWduKHBha28sIGRlZmxhdGUsIGluZmxhdGUsIGNvbnN0YW50cyk7Cgptb2R1bGUuZXhwb3J0cyA9IHBha287Cn0seyIuL2xpYi9kZWZsYXRlIjoyNSwiLi9saWIvaW5mbGF0ZSI6MjYsIi4vbGliL3V0aWxzL2NvbW1vbiI6MjcsIi4vbGliL3psaWIvY29uc3RhbnRzIjozMH1dLDI1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKCnZhciB6bGliX2RlZmxhdGUgPSBfZGVyZXFfKCcuL3psaWIvZGVmbGF0ZS5qcycpOwp2YXIgdXRpbHMgPSBfZGVyZXFfKCcuL3V0aWxzL2NvbW1vbicpOwp2YXIgc3RyaW5ncyA9IF9kZXJlcV8oJy4vdXRpbHMvc3RyaW5ncycpOwp2YXIgbXNnID0gX2RlcmVxXygnLi96bGliL21lc3NhZ2VzJyk7CnZhciB6c3RyZWFtID0gX2RlcmVxXygnLi96bGliL3pzdHJlYW0nKTsKCgovKiBQdWJsaWMgY29uc3RhbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwoKdmFyIFpfTk9fRkxVU0ggICAgICA9IDA7CnZhciBaX0ZJTklTSCAgICAgICAgPSA0OwoKdmFyIFpfT0sgICAgICAgICAgICA9IDA7CnZhciBaX1NUUkVBTV9FTkQgICAgPSAxOwoKdmFyIFpfREVGQVVMVF9DT01QUkVTU0lPTiA9IC0xOwoKdmFyIFpfREVGQVVMVF9TVFJBVEVHWSAgICA9IDA7Cgp2YXIgWl9ERUZMQVRFRCAgPSA4OwoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCgovKioKICogY2xhc3MgRGVmbGF0ZQogKgogKiBHZW5lcmljIEpTLXN0eWxlIHdyYXBwZXIgZm9yIHpsaWIgY2FsbHMuIElmIHlvdSBkb24ndCBuZWVkCiAqIHN0cmVhbWluZyBiZWhhdmlvdXIgLSB1c2UgbW9yZSBzaW1wbGUgZnVuY3Rpb25zOiBbW2RlZmxhdGVdXSwKICogW1tkZWZsYXRlUmF3XV0gYW5kIFtbZ3ppcF1dLgogKiovCgovKiBpbnRlcm5hbAogKiBEZWZsYXRlLmNodW5rcyAtPiBBcnJheQogKgogKiBDaHVua3Mgb2Ygb3V0cHV0IGRhdGEsIGlmIFtbRGVmbGF0ZSNvbkRhdGFdXSBub3Qgb3ZlcnJpZGVuLgogKiovCgovKioKICogRGVmbGF0ZS5yZXN1bHQgLT4gVWludDhBcnJheXxBcnJheQogKgogKiBDb21wcmVzc2VkIHJlc3VsdCwgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgW1tEZWZsYXRlI29uRGF0YV1dCiAqIGFuZCBbW0RlZmxhdGUjb25FbmRdXSBoYW5kbGVycy4gRmlsbGVkIGFmdGVyIHlvdSBwdXNoIGxhc3QgY2h1bmsKICogKGNhbGwgW1tEZWZsYXRlI3B1c2hdXSB3aXRoIGBaX0ZJTklTSGAgLyBgdHJ1ZWAgcGFyYW0pLgogKiovCgovKioKICogRGVmbGF0ZS5lcnIgLT4gTnVtYmVyCiAqCiAqIEVycm9yIGNvZGUgYWZ0ZXIgZGVmbGF0ZSBmaW5pc2hlZC4gMCAoWl9PSykgb24gc3VjY2Vzcy4KICogWW91IHdpbGwgbm90IG5lZWQgaXQgaW4gcmVhbCBsaWZlLCBiZWNhdXNlIGRlZmxhdGUgZXJyb3JzCiAqIGFyZSBwb3NzaWJsZSBvbmx5IG9uIHdyb25nIG9wdGlvbnMgb3IgYmFkIGBvbkRhdGFgIC8gYG9uRW5kYAogKiBjdXN0b20gaGFuZGxlcnMuCiAqKi8KCi8qKgogKiBEZWZsYXRlLm1zZyAtPiBTdHJpbmcKICoKICogRXJyb3IgbWVzc2FnZSwgaWYgW1tEZWZsYXRlLmVycl1dICE9IDAKICoqLwoKCi8qKgogKiBuZXcgRGVmbGF0ZShvcHRpb25zKQogKiAtIG9wdGlvbnMgKE9iamVjdCk6IHpsaWIgZGVmbGF0ZSBvcHRpb25zLgogKgogKiBDcmVhdGVzIG5ldyBkZWZsYXRvciBpbnN0YW5jZSB3aXRoIHNwZWNpZmllZCBwYXJhbXMuIFRocm93cyBleGNlcHRpb24KICogb24gYmFkIHBhcmFtcy4gU3VwcG9ydGVkIG9wdGlvbnM6CiAqCiAqIC0gYGxldmVsYAogKiAtIGB3aW5kb3dCaXRzYAogKiAtIGBtZW1MZXZlbGAKICogLSBgc3RyYXRlZ3lgCiAqCiAqIFtodHRwOi8vemxpYi5uZXQvbWFudWFsLmh0bWwjQWR2YW5jZWRdKGh0dHA6Ly96bGliLm5ldC9tYW51YWwuaHRtbCNBZHZhbmNlZCkKICogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlc2UuCiAqCiAqIEFkZGl0aW9uYWwgb3B0aW9ucywgZm9yIGludGVybmFsIG5lZWRzOgogKgogKiAtIGBjaHVua1NpemVgIC0gc2l6ZSBvZiBnZW5lcmF0ZWQgZGF0YSBjaHVua3MgKDE2SyBieSBkZWZhdWx0KQogKiAtIGByYXdgIChCb29sZWFuKSAtIGRvIHJhdyBkZWZsYXRlCiAqIC0gYGd6aXBgIChCb29sZWFuKSAtIGNyZWF0ZSBnemlwIHdyYXBwZXIKICogLSBgdG9gIChTdHJpbmcpIC0gaWYgZXF1YWwgdG8gJ3N0cmluZycsIHRoZW4gcmVzdWx0IHdpbGwgYmUgImJpbmFyeSBzdHJpbmciCiAqICAgIChlYWNoIGNoYXIgY29kZSBbMC4uMjU1XSkKICogLSBgaGVhZGVyYCAoT2JqZWN0KSAtIGN1c3RvbSBoZWFkZXIgZm9yIGd6aXAKICogICAtIGB0ZXh0YCAoQm9vbGVhbikgLSB0cnVlIGlmIGNvbXByZXNzZWQgZGF0YSBiZWxpZXZlZCB0byBiZSB0ZXh0CiAqICAgLSBgdGltZWAgKE51bWJlcikgLSBtb2RpZmljYXRpb24gdGltZSwgdW5peCB0aW1lc3RhbXAKICogICAtIGBvc2AgKE51bWJlcikgLSBvcGVyYXRpb24gc3lzdGVtIGNvZGUKICogICAtIGBleHRyYWAgKEFycmF5KSAtIGFycmF5IG9mIGJ5dGVzIHdpdGggZXh0cmEgZGF0YSAobWF4IDY1NTM2KQogKiAgIC0gYG5hbWVgIChTdHJpbmcpIC0gZmlsZSBuYW1lIChiaW5hcnkgc3RyaW5nKQogKiAgIC0gYGNvbW1lbnRgIChTdHJpbmcpIC0gY29tbWVudCAoYmluYXJ5IHN0cmluZykKICogICAtIGBoY3JjYCAoQm9vbGVhbikgLSB0cnVlIGlmIGhlYWRlciBjcmMgc2hvdWxkIGJlIGFkZGVkCiAqCiAqICMjIyMjIEV4YW1wbGU6CiAqCiAqIGBgYGphdmFzY3JpcHQKICogdmFyIHBha28gPSByZXF1aXJlKCdwYWtvJykKICogICAsIGNodW5rMSA9IFVpbnQ4QXJyYXkoWzEsMiwzLDQsNSw2LDcsOCw5XSkKICogICAsIGNodW5rMiA9IFVpbnQ4QXJyYXkoWzEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5XSk7CiAqCiAqIHZhciBkZWZsYXRlID0gbmV3IHBha28uRGVmbGF0ZSh7IGxldmVsOiAzfSk7CiAqCiAqIGRlZmxhdGUucHVzaChjaHVuazEsIGZhbHNlKTsKICogZGVmbGF0ZS5wdXNoKGNodW5rMiwgdHJ1ZSk7ICAvLyB0cnVlIC0+IGxhc3QgY2h1bmsKICoKICogaWYgKGRlZmxhdGUuZXJyKSB7IHRocm93IG5ldyBFcnJvcihkZWZsYXRlLmVycik7IH0KICoKICogY29uc29sZS5sb2coZGVmbGF0ZS5yZXN1bHQpOwogKiBgYGAKICoqLwp2YXIgRGVmbGF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKCiAgdGhpcy5vcHRpb25zID0gdXRpbHMuYXNzaWduKHsKICAgIGxldmVsOiBaX0RFRkFVTFRfQ09NUFJFU1NJT04sCiAgICBtZXRob2Q6IFpfREVGTEFURUQsCiAgICBjaHVua1NpemU6IDE2Mzg0LAogICAgd2luZG93Qml0czogMTUsCiAgICBtZW1MZXZlbDogOCwKICAgIHN0cmF0ZWd5OiBaX0RFRkFVTFRfU1RSQVRFR1ksCiAgICB0bzogJycKICB9LCBvcHRpb25zIHx8IHt9KTsKCiAgdmFyIG9wdCA9IHRoaXMub3B0aW9uczsKCiAgaWYgKG9wdC5yYXcgJiYgKG9wdC53aW5kb3dCaXRzID4gMCkpIHsKICAgIG9wdC53aW5kb3dCaXRzID0gLW9wdC53aW5kb3dCaXRzOwogIH0KCiAgZWxzZSBpZiAob3B0Lmd6aXAgJiYgKG9wdC53aW5kb3dCaXRzID4gMCkgJiYgKG9wdC53aW5kb3dCaXRzIDwgMTYpKSB7CiAgICBvcHQud2luZG93Qml0cyArPSAxNjsKICB9CgogIHRoaXMuZXJyICAgID0gMDsgICAgICAvLyBlcnJvciBjb2RlLCBpZiBoYXBwZW5zICgwID0gWl9PSykKICB0aGlzLm1zZyAgICA9ICcnOyAgICAgLy8gZXJyb3IgbWVzc2FnZQogIHRoaXMuZW5kZWQgID0gZmFsc2U7ICAvLyB1c2VkIHRvIGF2b2lkIG11bHRpcGxlIG9uRW5kKCkgY2FsbHMKICB0aGlzLmNodW5rcyA9IFtdOyAgICAgLy8gY2h1bmtzIG9mIGNvbXByZXNzZWQgZGF0YQoKICB0aGlzLnN0cm0gPSBuZXcgenN0cmVhbSgpOwogIHRoaXMuc3RybS5hdmFpbF9vdXQgPSAwOwoKICB2YXIgc3RhdHVzID0gemxpYl9kZWZsYXRlLmRlZmxhdGVJbml0MigKICAgIHRoaXMuc3RybSwKICAgIG9wdC5sZXZlbCwKICAgIG9wdC5tZXRob2QsCiAgICBvcHQud2luZG93Qml0cywKICAgIG9wdC5tZW1MZXZlbCwKICAgIG9wdC5zdHJhdGVneQogICk7CgogIGlmIChzdGF0dXMgIT09IFpfT0spIHsKICAgIHRocm93IG5ldyBFcnJvcihtc2dbc3RhdHVzXSk7CiAgfQoKICBpZiAob3B0LmhlYWRlcikgewogICAgemxpYl9kZWZsYXRlLmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLCBvcHQuaGVhZGVyKTsKICB9Cn07CgovKioKICogRGVmbGF0ZSNwdXNoKGRhdGFbLCBtb2RlXSkgLT4gQm9vbGVhbgogKiAtIGRhdGEgKFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nKTogaW5wdXQgZGF0YS4gU3RyaW5ncyB3aWxsIGJlIGNvbnZlcnRlZCB0bwogKiAgIHV0ZjggYnl0ZSBzZXF1ZW5jZS4KICogLSBtb2RlIChOdW1iZXJ8Qm9vbGVhbik6IDAuLjYgZm9yIGNvcnJlc3BvbmRpbmcgWl9OT19GTFVTSC4uWl9UUkVFIG1vZGVzLgogKiAgIFNlZSBjb25zdGFudHMuIFNraXBwZWQgb3IgYGZhbHNlYCBtZWFucyBaX05PX0ZMVVNILCBgdHJ1ZWAgbWVhbnNoIFpfRklOSVNILgogKgogKiBTZW5kcyBpbnB1dCBkYXRhIHRvIGRlZmxhdGUgcGlwZSwgZ2VuZXJhdGluZyBbW0RlZmxhdGUjb25EYXRhXV0gY2FsbHMgd2l0aAogKiBuZXcgY29tcHJlc3NlZCBjaHVua3MuIFJldHVybnMgYHRydWVgIG9uIHN1Y2Nlc3MuIFRoZSBsYXN0IGRhdGEgYmxvY2sgbXVzdCBoYXZlCiAqIG1vZGUgWl9GSU5JU0ggKG9yIGB0cnVlYCkuIFRoYXQgZmx1c2ggaW50ZXJuYWwgcGVuZGluZyBidWZmZXJzIGFuZCBjYWxsCiAqIFtbRGVmbGF0ZSNvbkVuZF1dLgogKgogKiBPbiBmYWlsIGNhbGwgW1tEZWZsYXRlI29uRW5kXV0gd2l0aCBlcnJvciBjb2RlIGFuZCByZXR1cm4gZmFsc2UuCiAqCiAqIFdlIHN0cm9uZ2x5IHJlY29tbWVuZCB0byB1c2UgYFVpbnQ4QXJyYXlgIG9uIGlucHV0IGZvciBiZXN0IHNwZWVkIChvdXRwdXQKICogYXJyYXkgZm9ybWF0IGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkpLiBBbHNvLCBkb24ndCBza2lwIGxhc3QgcGFyYW0gYW5kIGFsd2F5cwogKiB1c2UgdGhlIHNhbWUgdHlwZSBpbiB5b3VyIGNvZGUgKGJvb2xlYW4gb3IgbnVtYmVyKS4gVGhhdCB3aWxsIGltcHJvdmUgSlMgc3BlZWQuCiAqCiAqIEZvciByZWd1bGFyIGBBcnJheWAtcyBtYWtlIHN1cmUgYWxsIGVsZW1lbnRzIGFyZSBbMC4uMjU1XS4KICoKICogIyMjIyMgRXhhbXBsZQogKgogKiBgYGBqYXZhc2NyaXB0CiAqIHB1c2goY2h1bmssIGZhbHNlKTsgLy8gcHVzaCBvbmUgb2YgZGF0YSBjaHVua3MKICogLi4uCiAqIHB1c2goY2h1bmssIHRydWUpOyAgLy8gcHVzaCBsYXN0IGNodW5rCiAqIGBgYAogKiovCkRlZmxhdGUucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbihkYXRhLCBtb2RlKSB7CiAgdmFyIHN0cm0gPSB0aGlzLnN0cm07CiAgdmFyIGNodW5rU2l6ZSA9IHRoaXMub3B0aW9ucy5jaHVua1NpemU7CiAgdmFyIHN0YXR1cywgX21vZGU7CgogIGlmICh0aGlzLmVuZGVkKSB7IHJldHVybiBmYWxzZTsgfQoKICBfbW9kZSA9IChtb2RlID09PSB+fm1vZGUpID8gbW9kZSA6ICgobW9kZSA9PT0gdHJ1ZSkgPyBaX0ZJTklTSCA6IFpfTk9fRkxVU0gpOwoKICAvLyBDb252ZXJ0IGRhdGEgaWYgbmVlZGVkCiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykgewogICAgLy8gSWYgd2UgbmVlZCB0byBjb21wcmVzcyB0ZXh0LCBjaGFuZ2UgZW5jb2RpbmcgdG8gdXRmOC4KICAgIHN0cm0uaW5wdXQgPSBzdHJpbmdzLnN0cmluZzJidWYoZGF0YSk7CiAgfSBlbHNlIHsKICAgIHN0cm0uaW5wdXQgPSBkYXRhOwogIH0KCiAgc3RybS5uZXh0X2luID0gMDsKICBzdHJtLmF2YWlsX2luID0gc3RybS5pbnB1dC5sZW5ndGg7CgogIGRvIHsKICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICBzdHJtLm91dHB1dCA9IG5ldyB1dGlscy5CdWY4KGNodW5rU2l6ZSk7CiAgICAgIHN0cm0ubmV4dF9vdXQgPSAwOwogICAgICBzdHJtLmF2YWlsX291dCA9IGNodW5rU2l6ZTsKICAgIH0KICAgIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlKHN0cm0sIF9tb2RlKTsgICAgLyogbm8gYmFkIHJldHVybiB2YWx1ZSAqLwoKICAgIGlmIChzdGF0dXMgIT09IFpfU1RSRUFNX0VORCAmJiBzdGF0dXMgIT09IFpfT0spIHsKICAgICAgdGhpcy5vbkVuZChzdGF0dXMpOwogICAgICB0aGlzLmVuZGVkID0gdHJ1ZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwIHx8IChzdHJtLmF2YWlsX2luID09PSAwICYmIF9tb2RlID09PSBaX0ZJTklTSCkpIHsKICAgICAgaWYgKHRoaXMub3B0aW9ucy50byA9PT0gJ3N0cmluZycpIHsKICAgICAgICB0aGlzLm9uRGF0YShzdHJpbmdzLmJ1ZjJiaW5zdHJpbmcodXRpbHMuc2hyaW5rQnVmKHN0cm0ub3V0cHV0LCBzdHJtLm5leHRfb3V0KSkpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMub25EYXRhKHV0aWxzLnNocmlua0J1ZihzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCkpOwogICAgICB9CiAgICB9CiAgfSB3aGlsZSAoKHN0cm0uYXZhaWxfaW4gPiAwIHx8IHN0cm0uYXZhaWxfb3V0ID09PSAwKSAmJiBzdGF0dXMgIT09IFpfU1RSRUFNX0VORCk7CgogIC8vIEZpbmFsaXplIG9uIHRoZSBsYXN0IGNodW5rLgogIGlmIChfbW9kZSA9PT0gWl9GSU5JU0gpIHsKICAgIHN0YXR1cyA9IHpsaWJfZGVmbGF0ZS5kZWZsYXRlRW5kKHRoaXMuc3RybSk7CiAgICB0aGlzLm9uRW5kKHN0YXR1cyk7CiAgICB0aGlzLmVuZGVkID0gdHJ1ZTsKICAgIHJldHVybiBzdGF0dXMgPT09IFpfT0s7CiAgfQoKICByZXR1cm4gdHJ1ZTsKfTsKCgovKioKICogRGVmbGF0ZSNvbkRhdGEoY2h1bmspIC0+IFZvaWQKICogLSBjaHVuayAoVWludDhBcnJheXxBcnJheXxTdHJpbmcpOiBvdXB1dCBkYXRhLiBUeXBlIG9mIGFycmF5IGRlcGVuZHMKICogICBvbiBqcyBlbmdpbmUgc3VwcG9ydC4gV2hlbiBzdHJpbmcgb3V0cHV0IHJlcXVlc3RlZCwgZWFjaCBjaHVuawogKiAgIHdpbGwgYmUgc3RyaW5nLgogKgogKiBCeSBkZWZhdWx0LCBzdG9yZXMgZGF0YSBibG9ja3MgaW4gYGNodW5rc1tdYCBwcm9wZXJ0eSBhbmQgZ2x1ZQogKiB0aG9zZSBpbiBgb25FbmRgLiBPdmVycmlkZSB0aGlzIGhhbmRsZXIsIGlmIHlvdSBuZWVkIGFub3RoZXIgYmVoYXZpb3VyLgogKiovCkRlZmxhdGUucHJvdG90eXBlLm9uRGF0YSA9IGZ1bmN0aW9uKGNodW5rKSB7CiAgdGhpcy5jaHVua3MucHVzaChjaHVuayk7Cn07CgoKLyoqCiAqIERlZmxhdGUjb25FbmQoc3RhdHVzKSAtPiBWb2lkCiAqIC0gc3RhdHVzIChOdW1iZXIpOiBkZWZsYXRlIHN0YXR1cy4gMCAoWl9PSykgb24gc3VjY2VzcywKICogICBvdGhlciBpZiBub3QuCiAqCiAqIENhbGxlZCBvbmNlIGFmdGVyIHlvdSB0ZWxsIGRlZmxhdGUgdGhhdCBpbnB1dCBzdHJlYW0gY29tcGxldGUKICogb3IgZXJyb3IgaGFwcGVubmVkLiBCeSBkZWZhdWx0IC0gam9pbiBjb2xsZWN0ZWQgY2h1bmtzLAogKiBmcmVlIG1lbW9yeSBhbmQgZmlsbCBgcmVzdWx0c2AgLyBgZXJyYCBwcm9wZXJ0aWVzLgogKiovCkRlZmxhdGUucHJvdG90eXBlLm9uRW5kID0gZnVuY3Rpb24oc3RhdHVzKSB7CiAgLy8gT24gc3VjY2VzcyAtIGpvaW4KICBpZiAoc3RhdHVzID09PSBaX09LKSB7CiAgICBpZiAodGhpcy5vcHRpb25zLnRvID09PSAnc3RyaW5nJykgewogICAgICB0aGlzLnJlc3VsdCA9IHRoaXMuY2h1bmtzLmpvaW4oJycpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5yZXN1bHQgPSB1dGlscy5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKTsKICAgIH0KICB9CiAgdGhpcy5jaHVua3MgPSBbXTsKICB0aGlzLmVyciA9IHN0YXR1czsKICB0aGlzLm1zZyA9IHRoaXMuc3RybS5tc2c7Cn07CgoKLyoqCiAqIGRlZmxhdGUoZGF0YVssIG9wdGlvbnNdKSAtPiBVaW50OEFycmF5fEFycmF5fFN0cmluZwogKiAtIGRhdGEgKFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nKTogaW5wdXQgZGF0YSB0byBjb21wcmVzcy4KICogLSBvcHRpb25zIChPYmplY3QpOiB6bGliIGRlZmxhdGUgb3B0aW9ucy4KICoKICogQ29tcHJlc3MgYGRhdGFgIHdpdGggZGVmbGF0ZSBhbHJvcnl0aG0gYW5kIGBvcHRpb25zYC4KICoKICogU3VwcG9ydGVkIG9wdGlvbnMgYXJlOgogKgogKiAtIGxldmVsCiAqIC0gd2luZG93Qml0cwogKiAtIG1lbUxldmVsCiAqIC0gc3RyYXRlZ3kKICoKICogW2h0dHA6Ly96bGliLm5ldC9tYW51YWwuaHRtbCNBZHZhbmNlZF0oaHR0cDovL3psaWIubmV0L21hbnVhbC5odG1sI0FkdmFuY2VkKQogKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZS4KICoKICogU3VnYXIgKG9wdGlvbnMpOgogKgogKiAtIGByYXdgIChCb29sZWFuKSAtIHNheSB0aGF0IHdlIHdvcmsgd2l0aCByYXcgc3RyZWFtLCBpZiB5b3UgZG9uJ3Qgd2lzaCB0byBzcGVjaWZ5CiAqICAgbmVnYXRpdmUgd2luZG93Qml0cyBpbXBsaWNpdGx5LgogKiAtIGB0b2AgKFN0cmluZykgLSBpZiBlcXVhbCB0byAnc3RyaW5nJywgdGhlbiByZXN1bHQgd2lsbCBiZSAiYmluYXJ5IHN0cmluZyIKICogICAgKGVhY2ggY2hhciBjb2RlIFswLi4yNTVdKQogKgogKiAjIyMjIyBFeGFtcGxlOgogKgogKiBgYGBqYXZhc2NyaXB0CiAqIHZhciBwYWtvID0gcmVxdWlyZSgncGFrbycpCiAqICAgLCBkYXRhID0gVWludDhBcnJheShbMSwyLDMsNCw1LDYsNyw4LDldKTsKICoKICogY29uc29sZS5sb2cocGFrby5kZWZsYXRlKGRhdGEpKTsKICogYGBgCiAqKi8KZnVuY3Rpb24gZGVmbGF0ZShpbnB1dCwgb3B0aW9ucykgewogIHZhciBkZWZsYXRvciA9IG5ldyBEZWZsYXRlKG9wdGlvbnMpOwoKICBkZWZsYXRvci5wdXNoKGlucHV0LCB0cnVlKTsKCiAgLy8gVGhhdCB3aWxsIG5ldmVyIGhhcHBlbnMsIGlmIHlvdSBkb24ndCBjaGVhdCB3aXRoIG9wdGlvbnMgOikKICBpZiAoZGVmbGF0b3IuZXJyKSB7IHRocm93IGRlZmxhdG9yLm1zZzsgfQoKICByZXR1cm4gZGVmbGF0b3IucmVzdWx0Owp9CgoKLyoqCiAqIGRlZmxhdGVSYXcoZGF0YVssIG9wdGlvbnNdKSAtPiBVaW50OEFycmF5fEFycmF5fFN0cmluZwogKiAtIGRhdGEgKFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nKTogaW5wdXQgZGF0YSB0byBjb21wcmVzcy4KICogLSBvcHRpb25zIChPYmplY3QpOiB6bGliIGRlZmxhdGUgb3B0aW9ucy4KICoKICogVGhlIHNhbWUgYXMgW1tkZWZsYXRlXV0sIGJ1dCBjcmVhdGVzIHJhdyBkYXRhLCB3aXRob3V0IHdyYXBwZXIKICogKGhlYWRlciBhbmQgYWRsZXIzMiBjcmMpLgogKiovCmZ1bmN0aW9uIGRlZmxhdGVSYXcoaW5wdXQsIG9wdGlvbnMpIHsKICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICBvcHRpb25zLnJhdyA9IHRydWU7CiAgcmV0dXJuIGRlZmxhdGUoaW5wdXQsIG9wdGlvbnMpOwp9CgoKLyoqCiAqIGd6aXAoZGF0YVssIG9wdGlvbnNdKSAtPiBVaW50OEFycmF5fEFycmF5fFN0cmluZwogKiAtIGRhdGEgKFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nKTogaW5wdXQgZGF0YSB0byBjb21wcmVzcy4KICogLSBvcHRpb25zIChPYmplY3QpOiB6bGliIGRlZmxhdGUgb3B0aW9ucy4KICoKICogVGhlIHNhbWUgYXMgW1tkZWZsYXRlXV0sIGJ1dCBjcmVhdGUgZ3ppcCB3cmFwcGVyIGluc3RlYWQgb2YKICogZGVmbGF0ZSBvbmUuCiAqKi8KZnVuY3Rpb24gZ3ppcChpbnB1dCwgb3B0aW9ucykgewogIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogIG9wdGlvbnMuZ3ppcCA9IHRydWU7CiAgcmV0dXJuIGRlZmxhdGUoaW5wdXQsIG9wdGlvbnMpOwp9CgoKZXhwb3J0cy5EZWZsYXRlID0gRGVmbGF0ZTsKZXhwb3J0cy5kZWZsYXRlID0gZGVmbGF0ZTsKZXhwb3J0cy5kZWZsYXRlUmF3ID0gZGVmbGF0ZVJhdzsKZXhwb3J0cy5nemlwID0gZ3ppcDsKfSx7Ii4vdXRpbHMvY29tbW9uIjoyNywiLi91dGlscy9zdHJpbmdzIjoyOCwiLi96bGliL2RlZmxhdGUuanMiOjMyLCIuL3psaWIvbWVzc2FnZXMiOjM3LCIuL3psaWIvenN0cmVhbSI6Mzl9XSwyNjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCgp2YXIgemxpYl9pbmZsYXRlID0gX2RlcmVxXygnLi96bGliL2luZmxhdGUuanMnKTsKdmFyIHV0aWxzID0gX2RlcmVxXygnLi91dGlscy9jb21tb24nKTsKdmFyIHN0cmluZ3MgPSBfZGVyZXFfKCcuL3V0aWxzL3N0cmluZ3MnKTsKdmFyIGMgPSBfZGVyZXFfKCcuL3psaWIvY29uc3RhbnRzJyk7CnZhciBtc2cgPSBfZGVyZXFfKCcuL3psaWIvbWVzc2FnZXMnKTsKdmFyIHpzdHJlYW0gPSBfZGVyZXFfKCcuL3psaWIvenN0cmVhbScpOwp2YXIgZ3poZWFkZXIgPSBfZGVyZXFfKCcuL3psaWIvZ3poZWFkZXInKTsKCgovKioKICogY2xhc3MgSW5mbGF0ZQogKgogKiBHZW5lcmljIEpTLXN0eWxlIHdyYXBwZXIgZm9yIHpsaWIgY2FsbHMuIElmIHlvdSBkb24ndCBuZWVkCiAqIHN0cmVhbWluZyBiZWhhdmlvdXIgLSB1c2UgbW9yZSBzaW1wbGUgZnVuY3Rpb25zOiBbW2luZmxhdGVdXQogKiBhbmQgW1tpbmZsYXRlUmF3XV0uCiAqKi8KCi8qIGludGVybmFsCiAqIGluZmxhdGUuY2h1bmtzIC0+IEFycmF5CiAqCiAqIENodW5rcyBvZiBvdXRwdXQgZGF0YSwgaWYgW1tJbmZsYXRlI29uRGF0YV1dIG5vdCBvdmVycmlkZW4uCiAqKi8KCi8qKgogKiBJbmZsYXRlLnJlc3VsdCAtPiBVaW50OEFycmF5fEFycmF5fFN0cmluZwogKgogKiBVbmNvbXByZXNzZWQgcmVzdWx0LCBnZW5lcmF0ZWQgYnkgZGVmYXVsdCBbW0luZmxhdGUjb25EYXRhXV0KICogYW5kIFtbSW5mbGF0ZSNvbkVuZF1dIGhhbmRsZXJzLiBGaWxsZWQgYWZ0ZXIgeW91IHB1c2ggbGFzdCBjaHVuawogKiAoY2FsbCBbW0luZmxhdGUjcHVzaF1dIHdpdGggYFpfRklOSVNIYCAvIGB0cnVlYCBwYXJhbSkuCiAqKi8KCi8qKgogKiBJbmZsYXRlLmVyciAtPiBOdW1iZXIKICoKICogRXJyb3IgY29kZSBhZnRlciBpbmZsYXRlIGZpbmlzaGVkLiAwIChaX09LKSBvbiBzdWNjZXNzLgogKiBTaG91bGQgYmUgY2hlY2tlZCBpZiBicm9rZW4gZGF0YSBwb3NzaWJsZS4KICoqLwoKLyoqCiAqIEluZmxhdGUubXNnIC0+IFN0cmluZwogKgogKiBFcnJvciBtZXNzYWdlLCBpZiBbW0luZmxhdGUuZXJyXV0gIT0gMAogKiovCgoKLyoqCiAqIG5ldyBJbmZsYXRlKG9wdGlvbnMpCiAqIC0gb3B0aW9ucyAoT2JqZWN0KTogemxpYiBpbmZsYXRlIG9wdGlvbnMuCiAqCiAqIENyZWF0ZXMgbmV3IGluZmxhdG9yIGluc3RhbmNlIHdpdGggc3BlY2lmaWVkIHBhcmFtcy4gVGhyb3dzIGV4Y2VwdGlvbgogKiBvbiBiYWQgcGFyYW1zLiBTdXBwb3J0ZWQgb3B0aW9uczoKICoKICogLSBgd2luZG93Qml0c2AKICoKICogW2h0dHA6Ly96bGliLm5ldC9tYW51YWwuaHRtbCNBZHZhbmNlZF0oaHR0cDovL3psaWIubmV0L21hbnVhbC5odG1sI0FkdmFuY2VkKQogKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGVzZS4KICoKICogQWRkaXRpb25hbCBvcHRpb25zLCBmb3IgaW50ZXJuYWwgbmVlZHM6CiAqCiAqIC0gYGNodW5rU2l6ZWAgLSBzaXplIG9mIGdlbmVyYXRlZCBkYXRhIGNodW5rcyAoMTZLIGJ5IGRlZmF1bHQpCiAqIC0gYHJhd2AgKEJvb2xlYW4pIC0gZG8gcmF3IGluZmxhdGUKICogLSBgdG9gIChTdHJpbmcpIC0gaWYgZXF1YWwgdG8gJ3N0cmluZycsIHRoZW4gcmVzdWx0IHdpbGwgYmUgY29udmVydGVkCiAqICAgZnJvbSB1dGY4IHRvIHV0ZjE2IChqYXZhc2NyaXB0KSBzdHJpbmcuIFdoZW4gc3RyaW5nIG91dHB1dCByZXF1ZXN0ZWQsCiAqICAgY2h1bmsgbGVuZ3RoIGNhbiBkaWZmZXIgZnJvbSBgY2h1bmtTaXplYCwgZGVwZW5kaW5nIG9uIGNvbnRlbnQuCiAqCiAqIEJ5IGRlZmF1bHQsIHdoZW4gbm8gb3B0aW9ucyBzZXQsIGF1dG9kZXRlY3QgZGVmbGF0ZS9nemlwIGRhdGEgZm9ybWF0IHZpYQogKiB3cmFwcGVyIGhlYWRlci4KICoKICogIyMjIyMgRXhhbXBsZToKICoKICogYGBgamF2YXNjcmlwdAogKiB2YXIgcGFrbyA9IHJlcXVpcmUoJ3Bha28nKQogKiAgICwgY2h1bmsxID0gVWludDhBcnJheShbMSwyLDMsNCw1LDYsNyw4LDldKQogKiAgICwgY2h1bmsyID0gVWludDhBcnJheShbMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTldKTsKICoKICogdmFyIGluZmxhdGUgPSBuZXcgcGFrby5JbmZsYXRlKHsgbGV2ZWw6IDN9KTsKICoKICogaW5mbGF0ZS5wdXNoKGNodW5rMSwgZmFsc2UpOwogKiBpbmZsYXRlLnB1c2goY2h1bmsyLCB0cnVlKTsgIC8vIHRydWUgLT4gbGFzdCBjaHVuawogKgogKiBpZiAoaW5mbGF0ZS5lcnIpIHsgdGhyb3cgbmV3IEVycm9yKGluZmxhdGUuZXJyKTsgfQogKgogKiBjb25zb2xlLmxvZyhpbmZsYXRlLnJlc3VsdCk7CiAqIGBgYAogKiovCnZhciBJbmZsYXRlID0gZnVuY3Rpb24ob3B0aW9ucykgewoKICB0aGlzLm9wdGlvbnMgPSB1dGlscy5hc3NpZ24oewogICAgY2h1bmtTaXplOiAxNjM4NCwKICAgIHdpbmRvd0JpdHM6IDAsCiAgICB0bzogJycKICB9LCBvcHRpb25zIHx8IHt9KTsKCiAgdmFyIG9wdCA9IHRoaXMub3B0aW9uczsKCiAgLy8gRm9yY2Ugd2luZG93IHNpemUgZm9yIGByYXdgIGRhdGEsIGlmIG5vdCBzZXQgZGlyZWN0bHksCiAgLy8gYmVjYXVzZSB3ZSBoYXZlIG5vIGhlYWRlciBmb3IgYXV0b2RldGVjdC4KICBpZiAob3B0LnJhdyAmJiAob3B0LndpbmRvd0JpdHMgPj0gMCkgJiYgKG9wdC53aW5kb3dCaXRzIDwgMTYpKSB7CiAgICBvcHQud2luZG93Qml0cyA9IC1vcHQud2luZG93Qml0czsKICAgIGlmIChvcHQud2luZG93Qml0cyA9PT0gMCkgeyBvcHQud2luZG93Qml0cyA9IC0xNTsgfQogIH0KCiAgLy8gSWYgYHdpbmRvd0JpdHNgIG5vdCBkZWZpbmVkIChhbmQgbW9kZSBub3QgcmF3KSAtIHNldCBhdXRvZGV0ZWN0IGZsYWcgZm9yIGd6aXAvZGVmbGF0ZQogIGlmICgob3B0LndpbmRvd0JpdHMgPj0gMCkgJiYgKG9wdC53aW5kb3dCaXRzIDwgMTYpICYmCiAgICAgICEob3B0aW9ucyAmJiBvcHRpb25zLndpbmRvd0JpdHMpKSB7CiAgICBvcHQud2luZG93Qml0cyArPSAzMjsKICB9CgogIC8vIEd6aXAgaGVhZGVyIGhhcyBubyBpbmZvIGFib3V0IHdpbmRvd3Mgc2l6ZSwgd2UgY2FuIGRvIGF1dG9kZXRlY3Qgb25seQogIC8vIGZvciBkZWZsYXRlLiBTbywgaWYgd2luZG93IHNpemUgbm90IHNldCwgZm9yY2UgaXQgdG8gbWF4IHdoZW4gZ3ppcCBwb3NzaWJsZQogIGlmICgob3B0LndpbmRvd0JpdHMgPiAxNSkgJiYgKG9wdC53aW5kb3dCaXRzIDwgNDgpKSB7CiAgICAvLyBiaXQgMyAoMTYpIC0+IGd6aXBwZWQgZGF0YQogICAgLy8gYml0IDQgKDMyKSAtPiBhdXRvZGV0ZWN0IGd6aXAvZGVmbGF0ZQogICAgaWYgKChvcHQud2luZG93Qml0cyAmIDE1KSA9PT0gMCkgewogICAgICBvcHQud2luZG93Qml0cyB8PSAxNTsKICAgIH0KICB9CgogIHRoaXMuZXJyICAgID0gMDsgICAgICAvLyBlcnJvciBjb2RlLCBpZiBoYXBwZW5zICgwID0gWl9PSykKICB0aGlzLm1zZyAgICA9ICcnOyAgICAgLy8gZXJyb3IgbWVzc2FnZQogIHRoaXMuZW5kZWQgID0gZmFsc2U7ICAvLyB1c2VkIHRvIGF2b2lkIG11bHRpcGxlIG9uRW5kKCkgY2FsbHMKICB0aGlzLmNodW5rcyA9IFtdOyAgICAgLy8gY2h1bmtzIG9mIGNvbXByZXNzZWQgZGF0YQoKICB0aGlzLnN0cm0gICA9IG5ldyB6c3RyZWFtKCk7CiAgdGhpcy5zdHJtLmF2YWlsX291dCA9IDA7CgogIHZhciBzdGF0dXMgID0gemxpYl9pbmZsYXRlLmluZmxhdGVJbml0MigKICAgIHRoaXMuc3RybSwKICAgIG9wdC53aW5kb3dCaXRzCiAgKTsKCiAgaWYgKHN0YXR1cyAhPT0gYy5aX09LKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IobXNnW3N0YXR1c10pOwogIH0KCiAgdGhpcy5oZWFkZXIgPSBuZXcgZ3poZWFkZXIoKTsKCiAgemxpYl9pbmZsYXRlLmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLCB0aGlzLmhlYWRlcik7Cn07CgovKioKICogSW5mbGF0ZSNwdXNoKGRhdGFbLCBtb2RlXSkgLT4gQm9vbGVhbgogKiAtIGRhdGEgKFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nKTogaW5wdXQgZGF0YQogKiAtIG1vZGUgKE51bWJlcnxCb29sZWFuKTogMC4uNiBmb3IgY29ycmVzcG9uZGluZyBaX05PX0ZMVVNILi5aX1RSRUUgbW9kZXMuCiAqICAgU2VlIGNvbnN0YW50cy4gU2tpcHBlZCBvciBgZmFsc2VgIG1lYW5zIFpfTk9fRkxVU0gsIGB0cnVlYCBtZWFuc2ggWl9GSU5JU0guCiAqCiAqIFNlbmRzIGlucHV0IGRhdGEgdG8gaW5mbGF0ZSBwaXBlLCBnZW5lcmF0aW5nIFtbSW5mbGF0ZSNvbkRhdGFdXSBjYWxscyB3aXRoCiAqIG5ldyBvdXRwdXQgY2h1bmtzLiBSZXR1cm5zIGB0cnVlYCBvbiBzdWNjZXNzLiBUaGUgbGFzdCBkYXRhIGJsb2NrIG11c3QgaGF2ZQogKiBtb2RlIFpfRklOSVNIIChvciBgdHJ1ZWApLiBUaGF0IGZsdXNoIGludGVybmFsIHBlbmRpbmcgYnVmZmVycyBhbmQgY2FsbAogKiBbW0luZmxhdGUjb25FbmRdXS4KICoKICogT24gZmFpbCBjYWxsIFtbSW5mbGF0ZSNvbkVuZF1dIHdpdGggZXJyb3IgY29kZSBhbmQgcmV0dXJuIGZhbHNlLgogKgogKiBXZSBzdHJvbmdseSByZWNvbW1lbmQgdG8gdXNlIGBVaW50OEFycmF5YCBvbiBpbnB1dCBmb3IgYmVzdCBzcGVlZCAob3V0cHV0CiAqIGZvcm1hdCBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5KS4gQWxzbywgZG9uJ3Qgc2tpcCBsYXN0IHBhcmFtIGFuZCBhbHdheXMKICogdXNlIHRoZSBzYW1lIHR5cGUgaW4geW91ciBjb2RlIChib29sZWFuIG9yIG51bWJlcikuIFRoYXQgd2lsbCBpbXByb3ZlIEpTIHNwZWVkLgogKgogKiBGb3IgcmVndWxhciBgQXJyYXlgLXMgbWFrZSBzdXJlIGFsbCBlbGVtZW50cyBhcmUgWzAuLjI1NV0uCiAqCiAqICMjIyMjIEV4YW1wbGUKICoKICogYGBgamF2YXNjcmlwdAogKiBwdXNoKGNodW5rLCBmYWxzZSk7IC8vIHB1c2ggb25lIG9mIGRhdGEgY2h1bmtzCiAqIC4uLgogKiBwdXNoKGNodW5rLCB0cnVlKTsgIC8vIHB1c2ggbGFzdCBjaHVuawogKiBgYGAKICoqLwpJbmZsYXRlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24oZGF0YSwgbW9kZSkgewogIHZhciBzdHJtID0gdGhpcy5zdHJtOwogIHZhciBjaHVua1NpemUgPSB0aGlzLm9wdGlvbnMuY2h1bmtTaXplOwogIHZhciBzdGF0dXMsIF9tb2RlOwogIHZhciBuZXh0X291dF91dGY4LCB0YWlsLCB1dGY4c3RyOwoKICBpZiAodGhpcy5lbmRlZCkgeyByZXR1cm4gZmFsc2U7IH0KICBfbW9kZSA9IChtb2RlID09PSB+fm1vZGUpID8gbW9kZSA6ICgobW9kZSA9PT0gdHJ1ZSkgPyBjLlpfRklOSVNIIDogYy5aX05PX0ZMVVNIKTsKCiAgLy8gQ29udmVydCBkYXRhIGlmIG5lZWRlZAogIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHsKICAgIC8vIE9ubHkgYmluYXJ5IHN0cmluZ3MgY2FuIGJlIGRlY29tcHJlc3NlZCBvbiBwcmFjdGljZQogICAgc3RybS5pbnB1dCA9IHN0cmluZ3MuYmluc3RyaW5nMmJ1ZihkYXRhKTsKICB9IGVsc2UgewogICAgc3RybS5pbnB1dCA9IGRhdGE7CiAgfQoKICBzdHJtLm5leHRfaW4gPSAwOwogIHN0cm0uYXZhaWxfaW4gPSBzdHJtLmlucHV0Lmxlbmd0aDsKCiAgZG8gewogICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgIHN0cm0ub3V0cHV0ID0gbmV3IHV0aWxzLkJ1ZjgoY2h1bmtTaXplKTsKICAgICAgc3RybS5uZXh0X291dCA9IDA7CiAgICAgIHN0cm0uYXZhaWxfb3V0ID0gY2h1bmtTaXplOwogICAgfQoKICAgIHN0YXR1cyA9IHpsaWJfaW5mbGF0ZS5pbmZsYXRlKHN0cm0sIGMuWl9OT19GTFVTSCk7ICAgIC8qIG5vIGJhZCByZXR1cm4gdmFsdWUgKi8KCiAgICBpZiAoc3RhdHVzICE9PSBjLlpfU1RSRUFNX0VORCAmJiBzdGF0dXMgIT09IGMuWl9PSykgewogICAgICB0aGlzLm9uRW5kKHN0YXR1cyk7CiAgICAgIHRoaXMuZW5kZWQgPSB0cnVlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKHN0cm0ubmV4dF9vdXQpIHsKICAgICAgaWYgKHN0cm0uYXZhaWxfb3V0ID09PSAwIHx8IHN0YXR1cyA9PT0gYy5aX1NUUkVBTV9FTkQgfHwgKHN0cm0uYXZhaWxfaW4gPT09IDAgJiYgX21vZGUgPT09IGMuWl9GSU5JU0gpKSB7CgogICAgICAgIGlmICh0aGlzLm9wdGlvbnMudG8gPT09ICdzdHJpbmcnKSB7CgogICAgICAgICAgbmV4dF9vdXRfdXRmOCA9IHN0cmluZ3MudXRmOGJvcmRlcihzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCk7CgogICAgICAgICAgdGFpbCA9IHN0cm0ubmV4dF9vdXQgLSBuZXh0X291dF91dGY4OwogICAgICAgICAgdXRmOHN0ciA9IHN0cmluZ3MuYnVmMnN0cmluZyhzdHJtLm91dHB1dCwgbmV4dF9vdXRfdXRmOCk7CgogICAgICAgICAgLy8gbW92ZSB0YWlsCiAgICAgICAgICBzdHJtLm5leHRfb3V0ID0gdGFpbDsKICAgICAgICAgIHN0cm0uYXZhaWxfb3V0ID0gY2h1bmtTaXplIC0gdGFpbDsKICAgICAgICAgIGlmICh0YWlsKSB7IHV0aWxzLmFycmF5U2V0KHN0cm0ub3V0cHV0LCBzdHJtLm91dHB1dCwgbmV4dF9vdXRfdXRmOCwgdGFpbCwgMCk7IH0KCiAgICAgICAgICB0aGlzLm9uRGF0YSh1dGY4c3RyKTsKCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMub25EYXRhKHV0aWxzLnNocmlua0J1ZihzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0gd2hpbGUgKChzdHJtLmF2YWlsX2luID4gMCkgJiYgc3RhdHVzICE9PSBjLlpfU1RSRUFNX0VORCk7CgogIGlmIChzdGF0dXMgPT09IGMuWl9TVFJFQU1fRU5EKSB7CiAgICBfbW9kZSA9IGMuWl9GSU5JU0g7CiAgfQogIC8vIEZpbmFsaXplIG9uIHRoZSBsYXN0IGNodW5rLgogIGlmIChfbW9kZSA9PT0gYy5aX0ZJTklTSCkgewogICAgc3RhdHVzID0gemxpYl9pbmZsYXRlLmluZmxhdGVFbmQodGhpcy5zdHJtKTsKICAgIHRoaXMub25FbmQoc3RhdHVzKTsKICAgIHRoaXMuZW5kZWQgPSB0cnVlOwogICAgcmV0dXJuIHN0YXR1cyA9PT0gYy5aX09LOwogIH0KCiAgcmV0dXJuIHRydWU7Cn07CgoKLyoqCiAqIEluZmxhdGUjb25EYXRhKGNodW5rKSAtPiBWb2lkCiAqIC0gY2h1bmsgKFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nKTogb3VwdXQgZGF0YS4gVHlwZSBvZiBhcnJheSBkZXBlbmRzCiAqICAgb24ganMgZW5naW5lIHN1cHBvcnQuIFdoZW4gc3RyaW5nIG91dHB1dCByZXF1ZXN0ZWQsIGVhY2ggY2h1bmsKICogICB3aWxsIGJlIHN0cmluZy4KICoKICogQnkgZGVmYXVsdCwgc3RvcmVzIGRhdGEgYmxvY2tzIGluIGBjaHVua3NbXWAgcHJvcGVydHkgYW5kIGdsdWUKICogdGhvc2UgaW4gYG9uRW5kYC4gT3ZlcnJpZGUgdGhpcyBoYW5kbGVyLCBpZiB5b3UgbmVlZCBhbm90aGVyIGJlaGF2aW91ci4KICoqLwpJbmZsYXRlLnByb3RvdHlwZS5vbkRhdGEgPSBmdW5jdGlvbihjaHVuaykgewogIHRoaXMuY2h1bmtzLnB1c2goY2h1bmspOwp9OwoKCi8qKgogKiBJbmZsYXRlI29uRW5kKHN0YXR1cykgLT4gVm9pZAogKiAtIHN0YXR1cyAoTnVtYmVyKTogaW5mbGF0ZSBzdGF0dXMuIDAgKFpfT0spIG9uIHN1Y2Nlc3MsCiAqICAgb3RoZXIgaWYgbm90LgogKgogKiBDYWxsZWQgb25jZSBhZnRlciB5b3UgdGVsbCBpbmZsYXRlIHRoYXQgaW5wdXQgc3RyZWFtIGNvbXBsZXRlCiAqIG9yIGVycm9yIGhhcHBlbm5lZC4gQnkgZGVmYXVsdCAtIGpvaW4gY29sbGVjdGVkIGNodW5rcywKICogZnJlZSBtZW1vcnkgYW5kIGZpbGwgYHJlc3VsdHNgIC8gYGVycmAgcHJvcGVydGllcy4KICoqLwpJbmZsYXRlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHN0YXR1cykgewogIC8vIE9uIHN1Y2Nlc3MgLSBqb2luCiAgaWYgKHN0YXR1cyA9PT0gYy5aX09LKSB7CiAgICBpZiAodGhpcy5vcHRpb25zLnRvID09PSAnc3RyaW5nJykgewogICAgICAvLyBHbHVlICYgY29udmVydCBoZXJlLCB1bnRpbCB3ZSB0ZWFjaCBwYWtvIHRvIHNlbmQKICAgICAgLy8gdXRmOCBhbGxpZ25lZCBzdHJpbmdzIHRvIG9uRGF0YQogICAgICB0aGlzLnJlc3VsdCA9IHRoaXMuY2h1bmtzLmpvaW4oJycpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5yZXN1bHQgPSB1dGlscy5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKTsKICAgIH0KICB9CiAgdGhpcy5jaHVua3MgPSBbXTsKICB0aGlzLmVyciA9IHN0YXR1czsKICB0aGlzLm1zZyA9IHRoaXMuc3RybS5tc2c7Cn07CgoKLyoqCiAqIGluZmxhdGUoZGF0YVssIG9wdGlvbnNdKSAtPiBVaW50OEFycmF5fEFycmF5fFN0cmluZwogKiAtIGRhdGEgKFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nKTogaW5wdXQgZGF0YSB0byBkZWNvbXByZXNzLgogKiAtIG9wdGlvbnMgKE9iamVjdCk6IHpsaWIgaW5mbGF0ZSBvcHRpb25zLgogKgogKiBEZWNvbXByZXNzIGBkYXRhYCB3aXRoIGluZmxhdGUvdW5nemlwIGFuZCBgb3B0aW9uc2AuIEF1dG9kZXRlY3QKICogZm9ybWF0IHZpYSB3cmFwcGVyIGhlYWRlciBieSBkZWZhdWx0LiBUaGF0J3Mgd2h5IHdlIGRvbid0IHByb3ZpZGUKICogc2VwYXJhdGUgYHVuZ3ppcGAgbWV0aG9kLgogKgogKiBTdXBwb3J0ZWQgb3B0aW9ucyBhcmU6CiAqCiAqIC0gd2luZG93Qml0cwogKgogKiBbaHR0cDovL3psaWIubmV0L21hbnVhbC5odG1sI0FkdmFuY2VkXShodHRwOi8vemxpYi5uZXQvbWFudWFsLmh0bWwjQWR2YW5jZWQpCiAqIGZvciBtb3JlIGluZm9ybWF0aW9uLgogKgogKiBTdWdhciAob3B0aW9ucyk6CiAqCiAqIC0gYHJhd2AgKEJvb2xlYW4pIC0gc2F5IHRoYXQgd2Ugd29yayB3aXRoIHJhdyBzdHJlYW0sIGlmIHlvdSBkb24ndCB3aXNoIHRvIHNwZWNpZnkKICogICBuZWdhdGl2ZSB3aW5kb3dCaXRzIGltcGxpY2l0bHkuCiAqIC0gYHRvYCAoU3RyaW5nKSAtIGlmIGVxdWFsIHRvICdzdHJpbmcnLCB0aGVuIHJlc3VsdCB3aWxsIGJlIGNvbnZlcnRlZAogKiAgIGZyb20gdXRmOCB0byB1dGYxNiAoamF2YXNjcmlwdCkgc3RyaW5nLiBXaGVuIHN0cmluZyBvdXRwdXQgcmVxdWVzdGVkLAogKiAgIGNodW5rIGxlbmd0aCBjYW4gZGlmZmVyIGZyb20gYGNodW5rU2l6ZWAsIGRlcGVuZGluZyBvbiBjb250ZW50LgogKgogKgogKiAjIyMjIyBFeGFtcGxlOgogKgogKiBgYGBqYXZhc2NyaXB0CiAqIHZhciBwYWtvID0gcmVxdWlyZSgncGFrbycpCiAqICAgLCBpbnB1dCA9IHBha28uZGVmbGF0ZShbMSwyLDMsNCw1LDYsNyw4LDldKQogKiAgICwgb3V0cHV0OwogKgogKiB0cnkgewogKiAgIG91dHB1dCA9IHBha28uaW5mbGF0ZShpbnB1dCk7CiAqIH0gY2F0Y2ggKGVycikKICogICBjb25zb2xlLmxvZyhlcnIpOwogKiB9CiAqIGBgYAogKiovCmZ1bmN0aW9uIGluZmxhdGUoaW5wdXQsIG9wdGlvbnMpIHsKICB2YXIgaW5mbGF0b3IgPSBuZXcgSW5mbGF0ZShvcHRpb25zKTsKCiAgaW5mbGF0b3IucHVzaChpbnB1dCwgdHJ1ZSk7CgogIC8vIFRoYXQgd2lsbCBuZXZlciBoYXBwZW5zLCBpZiB5b3UgZG9uJ3QgY2hlYXQgd2l0aCBvcHRpb25zIDopCiAgaWYgKGluZmxhdG9yLmVycikgeyB0aHJvdyBpbmZsYXRvci5tc2c7IH0KCiAgcmV0dXJuIGluZmxhdG9yLnJlc3VsdDsKfQoKCi8qKgogKiBpbmZsYXRlUmF3KGRhdGFbLCBvcHRpb25zXSkgLT4gVWludDhBcnJheXxBcnJheXxTdHJpbmcKICogLSBkYXRhIChVaW50OEFycmF5fEFycmF5fFN0cmluZyk6IGlucHV0IGRhdGEgdG8gZGVjb21wcmVzcy4KICogLSBvcHRpb25zIChPYmplY3QpOiB6bGliIGluZmxhdGUgb3B0aW9ucy4KICoKICogVGhlIHNhbWUgYXMgW1tpbmZsYXRlXV0sIGJ1dCBjcmVhdGVzIHJhdyBkYXRhLCB3aXRob3V0IHdyYXBwZXIKICogKGhlYWRlciBhbmQgYWRsZXIzMiBjcmMpLgogKiovCmZ1bmN0aW9uIGluZmxhdGVSYXcoaW5wdXQsIG9wdGlvbnMpIHsKICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICBvcHRpb25zLnJhdyA9IHRydWU7CiAgcmV0dXJuIGluZmxhdGUoaW5wdXQsIG9wdGlvbnMpOwp9CgoKLyoqCiAqIHVuZ3ppcChkYXRhWywgb3B0aW9uc10pIC0+IFVpbnQ4QXJyYXl8QXJyYXl8U3RyaW5nCiAqIC0gZGF0YSAoVWludDhBcnJheXxBcnJheXxTdHJpbmcpOiBpbnB1dCBkYXRhIHRvIGRlY29tcHJlc3MuCiAqIC0gb3B0aW9ucyAoT2JqZWN0KTogemxpYiBpbmZsYXRlIG9wdGlvbnMuCiAqCiAqIEp1c3Qgc2hvcnRjdXQgdG8gW1tpbmZsYXRlXV0sIGJlY2F1c2UgaXQgYXV0b2RldGVjdHMgZm9ybWF0CiAqIGJ5IGhlYWRlci5jb250ZW50LiBEb25lIGZvciBjb252ZW5pZW5jZS4KICoqLwoKCmV4cG9ydHMuSW5mbGF0ZSA9IEluZmxhdGU7CmV4cG9ydHMuaW5mbGF0ZSA9IGluZmxhdGU7CmV4cG9ydHMuaW5mbGF0ZVJhdyA9IGluZmxhdGVSYXc7CmV4cG9ydHMudW5nemlwICA9IGluZmxhdGU7Cgp9LHsiLi91dGlscy9jb21tb24iOjI3LCIuL3V0aWxzL3N0cmluZ3MiOjI4LCIuL3psaWIvY29uc3RhbnRzIjozMCwiLi96bGliL2d6aGVhZGVyIjozMywiLi96bGliL2luZmxhdGUuanMiOjM1LCIuL3psaWIvbWVzc2FnZXMiOjM3LCIuL3psaWIvenN0cmVhbSI6Mzl9XSwyNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCgp2YXIgVFlQRURfT0sgPSAgKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJykgJiYKICAgICAgICAgICAgICAgICh0eXBlb2YgVWludDE2QXJyYXkgIT09ICd1bmRlZmluZWQnKSAmJgogICAgICAgICAgICAgICAgKHR5cGVvZiBJbnQzMkFycmF5ICE9PSAndW5kZWZpbmVkJyk7CgoKZXhwb3J0cy5hc3NpZ24gPSBmdW5jdGlvbiAob2JqIC8qZnJvbTEsIGZyb20yLCBmcm9tMywgLi4uKi8pIHsKICB2YXIgc291cmNlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7CiAgd2hpbGUgKHNvdXJjZXMubGVuZ3RoKSB7CiAgICB2YXIgc291cmNlID0gc291cmNlcy5zaGlmdCgpOwogICAgaWYgKCFzb3VyY2UpIHsgY29udGludWU7IH0KCiAgICBpZiAodHlwZW9mKHNvdXJjZSkgIT09ICdvYmplY3QnKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Ioc291cmNlICsgJ211c3QgYmUgbm9uLW9iamVjdCcpOwogICAgfQoKICAgIGZvciAodmFyIHAgaW4gc291cmNlKSB7CiAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkocCkpIHsKICAgICAgICBvYmpbcF0gPSBzb3VyY2VbcF07CiAgICAgIH0KICAgIH0KICB9CgogIHJldHVybiBvYmo7Cn07CgoKLy8gcmVkdWNlIGJ1ZmZlciBzaXplLCBhdm9pZGluZyBtZW0gY29weQpleHBvcnRzLnNocmlua0J1ZiA9IGZ1bmN0aW9uIChidWYsIHNpemUpIHsKICBpZiAoYnVmLmxlbmd0aCA9PT0gc2l6ZSkgeyByZXR1cm4gYnVmOyB9CiAgaWYgKGJ1Zi5zdWJhcnJheSkgeyByZXR1cm4gYnVmLnN1YmFycmF5KDAsIHNpemUpOyB9CiAgYnVmLmxlbmd0aCA9IHNpemU7CiAgcmV0dXJuIGJ1ZjsKfTsKCgp2YXIgZm5UeXBlZCA9IHsKICBhcnJheVNldDogZnVuY3Rpb24gKGRlc3QsIHNyYywgc3JjX29mZnMsIGxlbiwgZGVzdF9vZmZzKSB7CiAgICBpZiAoc3JjLnN1YmFycmF5ICYmIGRlc3Quc3ViYXJyYXkpIHsKICAgICAgZGVzdC5zZXQoc3JjLnN1YmFycmF5KHNyY19vZmZzLCBzcmNfb2ZmcytsZW4pLCBkZXN0X29mZnMpOwogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBGYWxsYmFjayB0byBvcmRpbmFyeSBhcnJheQogICAgZm9yKHZhciBpPTA7IGk8bGVuOyBpKyspIHsKICAgICAgZGVzdFtkZXN0X29mZnMgKyBpXSA9IHNyY1tzcmNfb2ZmcyArIGldOwogICAgfQogIH0sCiAgLy8gSm9pbiBhcnJheSBvZiBjaHVua3MgdG8gc2luZ2xlIGFycmF5LgogIGZsYXR0ZW5DaHVua3M6IGZ1bmN0aW9uKGNodW5rcykgewogICAgdmFyIGksIGwsIGxlbiwgcG9zLCBjaHVuaywgcmVzdWx0OwoKICAgIC8vIGNhbGN1bGF0ZSBkYXRhIGxlbmd0aAogICAgbGVuID0gMDsKICAgIGZvciAoaT0wLCBsPWNodW5rcy5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgIGxlbiArPSBjaHVua3NbaV0ubGVuZ3RoOwogICAgfQoKICAgIC8vIGpvaW4gY2h1bmtzCiAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheShsZW4pOwogICAgcG9zID0gMDsKICAgIGZvciAoaT0wLCBsPWNodW5rcy5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgIGNodW5rID0gY2h1bmtzW2ldOwogICAgICByZXN1bHQuc2V0KGNodW5rLCBwb3MpOwogICAgICBwb3MgKz0gY2h1bmsubGVuZ3RoOwogICAgfQoKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9OwoKdmFyIGZuVW50eXBlZCA9IHsKICBhcnJheVNldDogZnVuY3Rpb24gKGRlc3QsIHNyYywgc3JjX29mZnMsIGxlbiwgZGVzdF9vZmZzKSB7CiAgICBmb3IodmFyIGk9MDsgaTxsZW47IGkrKykgewogICAgICBkZXN0W2Rlc3Rfb2ZmcyArIGldID0gc3JjW3NyY19vZmZzICsgaV07CiAgICB9CiAgfSwKICAvLyBKb2luIGFycmF5IG9mIGNodW5rcyB0byBzaW5nbGUgYXJyYXkuCiAgZmxhdHRlbkNodW5rczogZnVuY3Rpb24oY2h1bmtzKSB7CiAgICByZXR1cm4gW10uY29uY2F0LmFwcGx5KFtdLCBjaHVua3MpOwogIH0KfTsKCgovLyBFbmFibGUvRGlzYWJsZSB0eXBlZCBhcnJheXMgdXNlLCBmb3IgdGVzdGluZwovLwpleHBvcnRzLnNldFR5cGVkID0gZnVuY3Rpb24gKG9uKSB7CiAgaWYgKG9uKSB7CiAgICBleHBvcnRzLkJ1ZjggID0gVWludDhBcnJheTsKICAgIGV4cG9ydHMuQnVmMTYgPSBVaW50MTZBcnJheTsKICAgIGV4cG9ydHMuQnVmMzIgPSBJbnQzMkFycmF5OwogICAgZXhwb3J0cy5hc3NpZ24oZXhwb3J0cywgZm5UeXBlZCk7CiAgfSBlbHNlIHsKICAgIGV4cG9ydHMuQnVmOCAgPSBBcnJheTsKICAgIGV4cG9ydHMuQnVmMTYgPSBBcnJheTsKICAgIGV4cG9ydHMuQnVmMzIgPSBBcnJheTsKICAgIGV4cG9ydHMuYXNzaWduKGV4cG9ydHMsIGZuVW50eXBlZCk7CiAgfQp9OwoKZXhwb3J0cy5zZXRUeXBlZChUWVBFRF9PSyk7Cn0se31dLDI4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKLy8gU3RyaW5nIGVuY29kZS9kZWNvZGUgaGVscGVycwondXNlIHN0cmljdCc7CgoKdmFyIHV0aWxzID0gX2RlcmVxXygnLi9jb21tb24nKTsKCgovLyBRdWljayBjaGVjayBpZiB3ZSBjYW4gdXNlIGZhc3QgYXJyYXkgdG8gYmluIHN0cmluZyBjb252ZXJzaW9uCi8vCi8vIC0gYXBwbHkoQXJyYXkpIGNhbiBmYWlsIG9uIEFuZHJvaWQgMi4yCi8vIC0gYXBwbHkoVWludDhBcnJheSkgY2FuIGZhaWwgb24gaU9TIDUuMSBTYWZhcnkKLy8KdmFyIFNUUl9BUFBMWV9PSyA9IHRydWU7CnZhciBTVFJfQVBQTFlfVUlBX09LID0gdHJ1ZTsKCnRyeSB7IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgWzBdKTsgfSBjYXRjaChfXykgeyBTVFJfQVBQTFlfT0sgPSBmYWxzZTsgfQp0cnkgeyBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIG5ldyBVaW50OEFycmF5KDEpKTsgfSBjYXRjaChfXykgeyBTVFJfQVBQTFlfVUlBX09LID0gZmFsc2U7IH0KCgovLyBUYWJsZSB3aXRoIHV0ZjggbGVuZ3RocyAoY2FsY3VsYXRlZCBieSBmaXJzdCBieXRlIG9mIHNlcXVlbmNlKQovLyBOb3RlLCB0aGF0IDUgJiA2LWJ5dGUgdmFsdWVzIGFuZCBzb21lIDQtYnl0ZSB2YWx1ZXMgY2FuIG5vdCBiZSByZXByZXNlbnRlZCBpbiBKUywKLy8gYmVjYXVzZSBtYXggcG9zc2libGUgY29kZXBvaW50IGlzIDB4MTBmZmZmCnZhciBfdXRmOGxlbiA9IG5ldyB1dGlscy5CdWY4KDI1Nik7CmZvciAodmFyIGk9MDsgaTwyNTY7IGkrKykgewogIF91dGY4bGVuW2ldID0gKGkgPj0gMjUyID8gNiA6IGkgPj0gMjQ4ID8gNSA6IGkgPj0gMjQwID8gNCA6IGkgPj0gMjI0ID8gMyA6IGkgPj0gMTkyID8gMiA6IDEpOwp9Cl91dGY4bGVuWzI1NF09X3V0ZjhsZW5bMjU0XT0xOyAvLyBJbnZhbGlkIHNlcXVlbmNlIHN0YXJ0CgoKLy8gY29udmVydCBzdHJpbmcgdG8gYXJyYXkgKHR5cGVkLCB3aGVuIHBvc3NpYmxlKQpleHBvcnRzLnN0cmluZzJidWYgPSBmdW5jdGlvbiAoc3RyKSB7CiAgdmFyIGJ1ZiwgYywgYzIsIG1fcG9zLCBpLCBzdHJfbGVuID0gc3RyLmxlbmd0aCwgYnVmX2xlbiA9IDA7CgogIC8vIGNvdW50IGJpbmFyeSBzaXplCiAgZm9yIChtX3BvcyA9IDA7IG1fcG9zIDwgc3RyX2xlbjsgbV9wb3MrKykgewogICAgYyA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zKTsKICAgIGlmICgoYyAmIDB4ZmMwMCkgPT09IDB4ZDgwMCAmJiAobV9wb3MrMSA8IHN0cl9sZW4pKSB7CiAgICAgIGMyID0gc3RyLmNoYXJDb2RlQXQobV9wb3MrMSk7CiAgICAgIGlmICgoYzIgJiAweGZjMDApID09PSAweGRjMDApIHsKICAgICAgICBjID0gMHgxMDAwMCArICgoYyAtIDB4ZDgwMCkgPDwgMTApICsgKGMyIC0gMHhkYzAwKTsKICAgICAgICBtX3BvcysrOwogICAgICB9CiAgICB9CiAgICBidWZfbGVuICs9IGMgPCAweDgwID8gMSA6IGMgPCAweDgwMCA/IDIgOiBjIDwgMHgxMDAwMCA/IDMgOiA0OwogIH0KCiAgLy8gYWxsb2NhdGUgYnVmZmVyCiAgYnVmID0gbmV3IHV0aWxzLkJ1ZjgoYnVmX2xlbik7CgogIC8vIGNvbnZlcnQKICBmb3IgKGk9MCwgbV9wb3MgPSAwOyBpIDwgYnVmX2xlbjsgbV9wb3MrKykgewogICAgYyA9IHN0ci5jaGFyQ29kZUF0KG1fcG9zKTsKICAgIGlmICgoYyAmIDB4ZmMwMCkgPT09IDB4ZDgwMCAmJiAobV9wb3MrMSA8IHN0cl9sZW4pKSB7CiAgICAgIGMyID0gc3RyLmNoYXJDb2RlQXQobV9wb3MrMSk7CiAgICAgIGlmICgoYzIgJiAweGZjMDApID09PSAweGRjMDApIHsKICAgICAgICBjID0gMHgxMDAwMCArICgoYyAtIDB4ZDgwMCkgPDwgMTApICsgKGMyIC0gMHhkYzAwKTsKICAgICAgICBtX3BvcysrOwogICAgICB9CiAgICB9CiAgICBpZiAoYyA8IDB4ODApIHsKICAgICAgLyogb25lIGJ5dGUgKi8KICAgICAgYnVmW2krK10gPSBjOwogICAgfSBlbHNlIGlmIChjIDwgMHg4MDApIHsKICAgICAgLyogdHdvIGJ5dGVzICovCiAgICAgIGJ1ZltpKytdID0gMHhDMCB8IChjID4+PiA2KTsKICAgICAgYnVmW2krK10gPSAweDgwIHwgKGMgJiAweDNmKTsKICAgIH0gZWxzZSBpZiAoYyA8IDB4MTAwMDApIHsKICAgICAgLyogdGhyZWUgYnl0ZXMgKi8KICAgICAgYnVmW2krK10gPSAweEUwIHwgKGMgPj4+IDEyKTsKICAgICAgYnVmW2krK10gPSAweDgwIHwgKGMgPj4+IDYgJiAweDNmKTsKICAgICAgYnVmW2krK10gPSAweDgwIHwgKGMgJiAweDNmKTsKICAgIH0gZWxzZSB7CiAgICAgIC8qIGZvdXIgYnl0ZXMgKi8KICAgICAgYnVmW2krK10gPSAweGYwIHwgKGMgPj4+IDE4KTsKICAgICAgYnVmW2krK10gPSAweDgwIHwgKGMgPj4+IDEyICYgMHgzZik7CiAgICAgIGJ1ZltpKytdID0gMHg4MCB8IChjID4+PiA2ICYgMHgzZik7CiAgICAgIGJ1ZltpKytdID0gMHg4MCB8IChjICYgMHgzZik7CiAgICB9CiAgfQoKICByZXR1cm4gYnVmOwp9OwoKLy8gSGVscGVyICh1c2VkIGluIDIgcGxhY2VzKQpmdW5jdGlvbiBidWYyYmluc3RyaW5nKGJ1ZiwgbGVuKSB7CiAgLy8gdXNlIGZhbGxiYWNrIGZvciBiaWcgYXJyYXlzIHRvIGF2b2lkIHN0YWNrIG92ZXJmbG93CiAgaWYgKGxlbiA8IDY1NTM3KSB7CiAgICBpZiAoKGJ1Zi5zdWJhcnJheSAmJiBTVFJfQVBQTFlfVUlBX09LKSB8fCAoIWJ1Zi5zdWJhcnJheSAmJiBTVFJfQVBQTFlfT0spKSB7CiAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIHV0aWxzLnNocmlua0J1ZihidWYsIGxlbikpOwogICAgfQogIH0KCiAgdmFyIHJlc3VsdCA9ICcnOwogIGZvcih2YXIgaT0wOyBpIDwgbGVuOyBpKyspIHsKICAgIHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KCgovLyBDb252ZXJ0IGJ5dGUgYXJyYXkgdG8gYmluYXJ5IHN0cmluZwpleHBvcnRzLmJ1ZjJiaW5zdHJpbmcgPSBmdW5jdGlvbihidWYpIHsKICByZXR1cm4gYnVmMmJpbnN0cmluZyhidWYsIGJ1Zi5sZW5ndGgpOwp9OwoKCi8vIENvbnZlcnQgYmluYXJ5IHN0cmluZyAodHlwZWQsIHdoZW4gcG9zc2libGUpCmV4cG9ydHMuYmluc3RyaW5nMmJ1ZiA9IGZ1bmN0aW9uKHN0cikgewogIHZhciBidWYgPSBuZXcgdXRpbHMuQnVmOChzdHIubGVuZ3RoKTsKICBmb3IodmFyIGk9MCwgbGVuPWJ1Zi5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgYnVmW2ldID0gc3RyLmNoYXJDb2RlQXQoaSk7CiAgfQogIHJldHVybiBidWY7Cn07CgoKLy8gY29udmVydCBhcnJheSB0byBzdHJpbmcKZXhwb3J0cy5idWYyc3RyaW5nID0gZnVuY3Rpb24gKGJ1ZiwgbWF4KSB7CiAgdmFyIGksIG91dCwgYywgY19sZW47CiAgdmFyIGxlbiA9IG1heCB8fCBidWYubGVuZ3RoOwoKICAvLyBSZXNlcnZlIG1heCBwb3NzaWJsZSBsZW5ndGggKDIgd29yZHMgcGVyIGNoYXIpCiAgLy8gTkI6IGJ5IHVua25vd24gcmVhc29ucywgQXJyYXkgaXMgc2lnbmlmaWNhbnRseSBmYXN0ZXIgZm9yCiAgLy8gICAgIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkgdGhhbiBVaW50MTZBcnJheS4KICB2YXIgdXRmMTZidWYgPSBuZXcgQXJyYXkobGVuKjIpOwoKICBmb3IgKG91dD0wLCBpPTA7IGk8bGVuOykgewogICAgYyA9IGJ1ZltpKytdOwogICAgLy8gcXVpY2sgcHJvY2VzcyBhc2NpaQogICAgaWYgKGMgPCAweDgwKSB7IHV0ZjE2YnVmW291dCsrXSA9IGM7IGNvbnRpbnVlOyB9CgogICAgY19sZW4gPSBfdXRmOGxlbltjXTsKICAgIC8vIHNraXAgNSAmIDYgYnl0ZSBjb2RlcwogICAgaWYgKGNfbGVuID4gNCkgeyB1dGYxNmJ1ZltvdXQrK10gPSAweGZmZmQ7IGkgKz0gY19sZW4tMTsgY29udGludWU7IH0KCiAgICAvLyBhcHBseSBtYXNrIG9uIGZpcnN0IGJ5dGUKICAgIGMgJj0gY19sZW4gPT09IDIgPyAweDFmIDogY19sZW4gPT09IDMgPyAweDBmIDogMHgwNzsKICAgIC8vIGpvaW4gdGhlIHJlc3QKICAgIHdoaWxlIChjX2xlbiA+IDEgJiYgaSA8IGxlbikgewogICAgICBjID0gKGMgPDwgNikgfCAoYnVmW2krK10gJiAweDNmKTsKICAgICAgY19sZW4tLTsKICAgIH0KCiAgICAvLyB0ZXJtaW5hdGVkIGJ5IGVuZCBvZiBzdHJpbmc/CiAgICBpZiAoY19sZW4gPiAxKSB7IHV0ZjE2YnVmW291dCsrXSA9IDB4ZmZmZDsgY29udGludWU7IH0KCiAgICBpZiAoYyA8IDB4MTAwMDApIHsKICAgICAgdXRmMTZidWZbb3V0KytdID0gYzsKICAgIH0gZWxzZSB7CiAgICAgIGMgLT0gMHgxMDAwMDsKICAgICAgdXRmMTZidWZbb3V0KytdID0gMHhkODAwIHwgKChjID4+IDEwKSAmIDB4M2ZmKTsKICAgICAgdXRmMTZidWZbb3V0KytdID0gMHhkYzAwIHwgKGMgJiAweDNmZik7CiAgICB9CiAgfQoKICByZXR1cm4gYnVmMmJpbnN0cmluZyh1dGYxNmJ1Ziwgb3V0KTsKfTsKCgovLyBDYWxjdWxhdGUgbWF4IHBvc3NpYmxlIHBvc2l0aW9uIGluIHV0ZjggYnVmZmVyLAovLyB0aGF0IHdpbGwgbm90IGJyZWFrIHNlcXVlbmNlLiBJZiB0aGF0J3Mgbm90IHBvc3NpYmxlCi8vIC0gKHZlcnkgc21hbGwgbGltaXRzKSByZXR1cm4gbWF4IHNpemUgYXMgaXMuCi8vCi8vIGJ1ZltdIC0gdXRmOCBieXRlcyBhcnJheQovLyBtYXggICAtIGxlbmd0aCBsaW1pdCAobWFuZGF0b3J5KTsKZXhwb3J0cy51dGY4Ym9yZGVyID0gZnVuY3Rpb24oYnVmLCBtYXgpIHsKICB2YXIgcG9zOwoKICBtYXggPSBtYXggfHwgYnVmLmxlbmd0aDsKICBpZiAobWF4ID4gYnVmLmxlbmd0aCkgeyBtYXggPSBidWYubGVuZ3RoOyB9CgogIC8vIGdvIGJhY2sgZnJvbSBsYXN0IHBvc2l0aW9uLCB1bnRpbCBzdGFydCBvZiBzZXF1ZW5jZSBmb3VuZAogIHBvcyA9IG1heC0xOwogIHdoaWxlIChwb3MgPj0gMCAmJiAoYnVmW3Bvc10gJiAweEMwKSA9PT0gMHg4MCkgeyBwb3MtLTsgfQoKICAvLyBGdWNrdXAgLSB2ZXJ5IHNtYWxsIGFuZCBicm9rZW4gc2VxdWVuY2UsCiAgLy8gcmV0dXJuIG1heCwgYmVjYXVzZSB3ZSBzaG91bGQgcmV0dXJuIHNvbWV0aGluZyBhbnl3YXkuCiAgaWYgKHBvcyA8IDApIHsgcmV0dXJuIG1heDsgfQoKICAvLyBJZiB3ZSBjYW1lIHRvIHN0YXJ0IG9mIGJ1ZmZlciAtIHRoYXQgbWVhbnMgdnVmZmVyIGlzIHRvbyBzbWFsbCwKICAvLyByZXR1cm4gbWF4IHRvby4KICBpZiAocG9zID09PSAwKSB7IHJldHVybiBtYXg7IH0KCiAgcmV0dXJuIChwb3MgKyBfdXRmOGxlbltidWZbcG9zXV0gPiBtYXgpID8gcG9zIDogbWF4Owp9OwoKfSx7Ii4vY29tbW9uIjoyN31dLDI5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKLy8gTm90ZTogYWRsZXIzMiB0YWtlcyAxMiUgZm9yIGxldmVsIDAgYW5kIDIlIGZvciBsZXZlbCA2LgovLyBJdCBkb2Vzbid0IHdvcnRoIHRvIG1ha2UgYWRkaXRpb25hbCBvcHRpbWl6YXRpb25hIGFzIGluIG9yaWdpbmFsLgovLyBTbWFsbCBzaXplIGlzIHByZWZlcmFibGUuCgpmdW5jdGlvbiBhZGxlcjMyKGFkbGVyLCBidWYsIGxlbiwgcG9zKSB7CiAgdmFyIHMxID0gKGFkbGVyICYgMHhmZmZmKSB8MAogICAgLCBzMiA9ICgoYWRsZXIgPj4+IDE2KSAmIDB4ZmZmZikgfDAKICAgICwgbiA9IDA7CgogIHdoaWxlIChsZW4gIT09IDApIHsKICAgIC8vIFNldCBsaW1pdCB+IHR3aWNlIGxlc3MgdGhhbiA1NTUyLCB0byBrZWVwCiAgICAvLyBzMiBpbiAzMS1iaXRzLCBiZWNhdXNlIHdlIGZvcmNlIHNpZ25lZCBpbnRzLgogICAgLy8gaW4gb3RoZXIgY2FzZSAlPSB3aWxsIGZhaWwuCiAgICBuID0gbGVuID4gMjAwMCA/IDIwMDAgOiBsZW47CiAgICBsZW4gLT0gbjsKCiAgICBkbyB7CiAgICAgIHMxID0gKHMxICsgYnVmW3BvcysrXSkgfDA7CiAgICAgIHMyID0gKHMyICsgczEpIHwwOwogICAgfSB3aGlsZSAoLS1uKTsKCiAgICBzMSAlPSA2NTUyMTsKICAgIHMyICU9IDY1NTIxOwogIH0KCiAgcmV0dXJuIChzMSB8IChzMiA8PCAxNikpIHwwOwp9CgoKbW9kdWxlLmV4cG9ydHMgPSBhZGxlcjMyOwp9LHt9XSwzMDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cm1vZHVsZS5leHBvcnRzID0gewoKICAvKiBBbGxvd2VkIGZsdXNoIHZhbHVlczsgc2VlIGRlZmxhdGUoKSBhbmQgaW5mbGF0ZSgpIGJlbG93IGZvciBkZXRhaWxzICovCiAgWl9OT19GTFVTSDogICAgICAgICAwLAogIFpfUEFSVElBTF9GTFVTSDogICAgMSwKICBaX1NZTkNfRkxVU0g6ICAgICAgIDIsCiAgWl9GVUxMX0ZMVVNIOiAgICAgICAzLAogIFpfRklOSVNIOiAgICAgICAgICAgNCwKICBaX0JMT0NLOiAgICAgICAgICAgIDUsCiAgWl9UUkVFUzogICAgICAgICAgICA2LAoKICAvKiBSZXR1cm4gY29kZXMgZm9yIHRoZSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGZ1bmN0aW9ucy4gTmVnYXRpdmUgdmFsdWVzCiAgKiBhcmUgZXJyb3JzLCBwb3NpdGl2ZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIHNwZWNpYWwgYnV0IG5vcm1hbCBldmVudHMuCiAgKi8KICBaX09LOiAgICAgICAgICAgICAgIDAsCiAgWl9TVFJFQU1fRU5EOiAgICAgICAxLAogIFpfTkVFRF9ESUNUOiAgICAgICAgMiwKICBaX0VSUk5POiAgICAgICAgICAgLTEsCiAgWl9TVFJFQU1fRVJST1I6ICAgIC0yLAogIFpfREFUQV9FUlJPUjogICAgICAtMywKICAvL1pfTUVNX0VSUk9SOiAgICAgLTQsCiAgWl9CVUZfRVJST1I6ICAgICAgIC01LAogIC8vWl9WRVJTSU9OX0VSUk9SOiAtNiwKCiAgLyogY29tcHJlc3Npb24gbGV2ZWxzICovCiAgWl9OT19DT01QUkVTU0lPTjogICAgICAgICAwLAogIFpfQkVTVF9TUEVFRDogICAgICAgICAgICAgMSwKICBaX0JFU1RfQ09NUFJFU1NJT046ICAgICAgIDksCiAgWl9ERUZBVUxUX0NPTVBSRVNTSU9OOiAgIC0xLAoKCiAgWl9GSUxURVJFRDogICAgICAgICAgICAgICAxLAogIFpfSFVGRk1BTl9PTkxZOiAgICAgICAgICAgMiwKICBaX1JMRTogICAgICAgICAgICAgICAgICAgIDMsCiAgWl9GSVhFRDogICAgICAgICAgICAgICAgICA0LAogIFpfREVGQVVMVF9TVFJBVEVHWTogICAgICAgMCwKCiAgLyogUG9zc2libGUgdmFsdWVzIG9mIHRoZSBkYXRhX3R5cGUgZmllbGQgKHRob3VnaCBzZWUgaW5mbGF0ZSgpKSAqLwogIFpfQklOQVJZOiAgICAgICAgICAgICAgICAgMCwKICBaX1RFWFQ6ICAgICAgICAgICAgICAgICAgIDEsCiAgLy9aX0FTQ0lJOiAgICAgICAgICAgICAgICAxLCAvLyA9IFpfVEVYVCAoZGVwcmVjYXRlZCkKICBaX1VOS05PV046ICAgICAgICAgICAgICAgIDIsCgogIC8qIFRoZSBkZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCAqLwogIFpfREVGTEFURUQ6ICAgICAgICAgICAgICAgOAogIC8vWl9OVUxMOiAgICAgICAgICAgICAgICAgbnVsbCAvLyBVc2UgLTEgb3IgbnVsbCBpbmxpbmUsIGRlcGVuZGluZyBvbiB2YXIgdHlwZQp9Owp9LHt9XSwzMTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCi8vIE5vdGU6IHdlIGNhbid0IGdldCBzaWduaWZpY2FudCBzcGVlZCBib29zdCBoZXJlLgovLyBTbyB3cml0ZSBjb2RlIHRvIG1pbmltaXplIHNpemUgLSBubyBwcmVnZW5lcmF0ZWQgdGFibGVzCi8vIGFuZCBhcnJheSB0b29scyBkZXBlbmRlbmNpZXMuCgoKLy8gVXNlIG9yZGluYXJ5IGFycmF5LCBzaW5jZSB1bnR5cGVkIG1ha2VzIG5vIGJvb3N0IGhlcmUKZnVuY3Rpb24gbWFrZVRhYmxlKCkgewogIHZhciBjLCB0YWJsZSA9IFtdOwoKICBmb3IodmFyIG4gPTA7IG4gPCAyNTY7IG4rKyl7CiAgICBjID0gbjsKICAgIGZvcih2YXIgayA9MDsgayA8IDg7IGsrKyl7CiAgICAgIGMgPSAoKGMmMSkgPyAoMHhFREI4ODMyMCBeIChjID4+PiAxKSkgOiAoYyA+Pj4gMSkpOwogICAgfQogICAgdGFibGVbbl0gPSBjOwogIH0KCiAgcmV0dXJuIHRhYmxlOwp9CgovLyBDcmVhdGUgdGFibGUgb24gbG9hZC4gSnVzdCAyNTUgc2lnbmVkIGxvbmdzLiBOb3QgYSBwcm9ibGVtLgp2YXIgY3JjVGFibGUgPSBtYWtlVGFibGUoKTsKCgpmdW5jdGlvbiBjcmMzMihjcmMsIGJ1ZiwgbGVuLCBwb3MpIHsKICB2YXIgdCA9IGNyY1RhYmxlCiAgICAsIGVuZCA9IHBvcyArIGxlbjsKCiAgY3JjID0gY3JjIF4gKC0xKTsKCiAgZm9yICh2YXIgaSA9IHBvczsgaSA8IGVuZDsgaSsrICkgewogICAgY3JjID0gKGNyYyA+Pj4gOCkgXiB0WyhjcmMgXiBidWZbaV0pICYgMHhGRl07CiAgfQoKICByZXR1cm4gKGNyYyBeICgtMSkpOyAvLyA+Pj4gMDsKfQoKCm1vZHVsZS5leHBvcnRzID0gY3JjMzI7Cn0se31dLDMyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKdmFyIHV0aWxzICAgPSBfZGVyZXFfKCcuLi91dGlscy9jb21tb24nKTsKdmFyIHRyZWVzICAgPSBfZGVyZXFfKCcuL3RyZWVzJyk7CnZhciBhZGxlcjMyID0gX2RlcmVxXygnLi9hZGxlcjMyJyk7CnZhciBjcmMzMiAgID0gX2RlcmVxXygnLi9jcmMzMicpOwp2YXIgbXNnICAgPSBfZGVyZXFfKCcuL21lc3NhZ2VzJyk7CgovKiBQdWJsaWMgY29uc3RhbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwoKCi8qIEFsbG93ZWQgZmx1c2ggdmFsdWVzOyBzZWUgZGVmbGF0ZSgpIGFuZCBpbmZsYXRlKCkgYmVsb3cgZm9yIGRldGFpbHMgKi8KdmFyIFpfTk9fRkxVU0ggICAgICA9IDA7CnZhciBaX1BBUlRJQUxfRkxVU0ggPSAxOwovL3ZhciBaX1NZTkNfRkxVU0ggICAgPSAyOwp2YXIgWl9GVUxMX0ZMVVNIICAgID0gMzsKdmFyIFpfRklOSVNIICAgICAgICA9IDQ7CnZhciBaX0JMT0NLICAgICAgICAgPSA1OwovL3ZhciBaX1RSRUVTICAgICAgICAgPSA2OwoKCi8qIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZSB2YWx1ZXMKICogYXJlIGVycm9ycywgcG9zaXRpdmUgdmFsdWVzIGFyZSB1c2VkIGZvciBzcGVjaWFsIGJ1dCBub3JtYWwgZXZlbnRzLgogKi8KdmFyIFpfT0sgICAgICAgICAgICA9IDA7CnZhciBaX1NUUkVBTV9FTkQgICAgPSAxOwovL3ZhciBaX05FRURfRElDVCAgICAgPSAyOwovL3ZhciBaX0VSUk5PICAgICAgICAgPSAtMTsKdmFyIFpfU1RSRUFNX0VSUk9SICA9IC0yOwp2YXIgWl9EQVRBX0VSUk9SICAgID0gLTM7Ci8vdmFyIFpfTUVNX0VSUk9SICAgICA9IC00Owp2YXIgWl9CVUZfRVJST1IgICAgID0gLTU7Ci8vdmFyIFpfVkVSU0lPTl9FUlJPUiA9IC02OwoKCi8qIGNvbXByZXNzaW9uIGxldmVscyAqLwovL3ZhciBaX05PX0NPTVBSRVNTSU9OICAgICAgPSAwOwovL3ZhciBaX0JFU1RfU1BFRUQgICAgICAgICAgPSAxOwovL3ZhciBaX0JFU1RfQ09NUFJFU1NJT04gICAgPSA5Owp2YXIgWl9ERUZBVUxUX0NPTVBSRVNTSU9OID0gLTE7CgoKdmFyIFpfRklMVEVSRUQgICAgICAgICAgICA9IDE7CnZhciBaX0hVRkZNQU5fT05MWSAgICAgICAgPSAyOwp2YXIgWl9STEUgICAgICAgICAgICAgICAgID0gMzsKdmFyIFpfRklYRUQgICAgICAgICAgICAgICA9IDQ7CnZhciBaX0RFRkFVTFRfU1RSQVRFR1kgICAgPSAwOwoKLyogUG9zc2libGUgdmFsdWVzIG9mIHRoZSBkYXRhX3R5cGUgZmllbGQgKHRob3VnaCBzZWUgaW5mbGF0ZSgpKSAqLwovL3ZhciBaX0JJTkFSWSAgICAgICAgICAgICAgPSAwOwovL3ZhciBaX1RFWFQgICAgICAgICAgICAgICAgPSAxOwovL3ZhciBaX0FTQ0lJICAgICAgICAgICAgICAgPSAxOyAvLyA9IFpfVEVYVAp2YXIgWl9VTktOT1dOICAgICAgICAgICAgID0gMjsKCgovKiBUaGUgZGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKi8KdmFyIFpfREVGTEFURUQgID0gODsKCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgoKdmFyIE1BWF9NRU1fTEVWRUwgPSA5OwovKiBNYXhpbXVtIHZhbHVlIGZvciBtZW1MZXZlbCBpbiBkZWZsYXRlSW5pdDIgKi8KdmFyIE1BWF9XQklUUyA9IDE1OwovKiAzMksgTFo3NyB3aW5kb3cgKi8KdmFyIERFRl9NRU1fTEVWRUwgPSA4OwoKCnZhciBMRU5HVEhfQ09ERVMgID0gMjk7Ci8qIG51bWJlciBvZiBsZW5ndGggY29kZXMsIG5vdCBjb3VudGluZyB0aGUgc3BlY2lhbCBFTkRfQkxPQ0sgY29kZSAqLwp2YXIgTElURVJBTFMgICAgICA9IDI1NjsKLyogbnVtYmVyIG9mIGxpdGVyYWwgYnl0ZXMgMC4uMjU1ICovCnZhciBMX0NPREVTICAgICAgID0gTElURVJBTFMgKyAxICsgTEVOR1RIX0NPREVTOwovKiBudW1iZXIgb2YgTGl0ZXJhbCBvciBMZW5ndGggY29kZXMsIGluY2x1ZGluZyB0aGUgRU5EX0JMT0NLIGNvZGUgKi8KdmFyIERfQ09ERVMgICAgICAgPSAzMDsKLyogbnVtYmVyIG9mIGRpc3RhbmNlIGNvZGVzICovCnZhciBCTF9DT0RFUyAgICAgID0gMTk7Ci8qIG51bWJlciBvZiBjb2RlcyB1c2VkIHRvIHRyYW5zZmVyIHRoZSBiaXQgbGVuZ3RocyAqLwp2YXIgSEVBUF9TSVpFICAgICA9IDIqTF9DT0RFUyArIDE7Ci8qIG1heGltdW0gaGVhcCBzaXplICovCnZhciBNQVhfQklUUyAgPSAxNTsKLyogQWxsIGNvZGVzIG11c3Qgbm90IGV4Y2VlZCBNQVhfQklUUyBiaXRzICovCgp2YXIgTUlOX01BVENIID0gMzsKdmFyIE1BWF9NQVRDSCA9IDI1ODsKdmFyIE1JTl9MT09LQUhFQUQgPSAoTUFYX01BVENIICsgTUlOX01BVENIICsgMSk7Cgp2YXIgUFJFU0VUX0RJQ1QgPSAweDIwOwoKdmFyIElOSVRfU1RBVEUgPSA0MjsKdmFyIEVYVFJBX1NUQVRFID0gNjk7CnZhciBOQU1FX1NUQVRFID0gNzM7CnZhciBDT01NRU5UX1NUQVRFID0gOTE7CnZhciBIQ1JDX1NUQVRFID0gMTAzOwp2YXIgQlVTWV9TVEFURSA9IDExMzsKdmFyIEZJTklTSF9TVEFURSA9IDY2NjsKCnZhciBCU19ORUVEX01PUkUgICAgICA9IDE7IC8qIGJsb2NrIG5vdCBjb21wbGV0ZWQsIG5lZWQgbW9yZSBpbnB1dCBvciBtb3JlIG91dHB1dCAqLwp2YXIgQlNfQkxPQ0tfRE9ORSAgICAgPSAyOyAvKiBibG9jayBmbHVzaCBwZXJmb3JtZWQgKi8KdmFyIEJTX0ZJTklTSF9TVEFSVEVEID0gMzsgLyogZmluaXNoIHN0YXJ0ZWQsIG5lZWQgb25seSBtb3JlIG91dHB1dCBhdCBuZXh0IGRlZmxhdGUgKi8KdmFyIEJTX0ZJTklTSF9ET05FICAgID0gNDsgLyogZmluaXNoIGRvbmUsIGFjY2VwdCBubyBtb3JlIGlucHV0IG9yIG91dHB1dCAqLwoKdmFyIE9TX0NPREUgPSAweDAzOyAvLyBVbml4IDopIC4gRG9uJ3QgZGV0ZWN0LCB1c2UgdGhpcyBkZWZhdWx0LgoKZnVuY3Rpb24gZXJyKHN0cm0sIGVycm9yQ29kZSkgewogIHN0cm0ubXNnID0gbXNnW2Vycm9yQ29kZV07CiAgcmV0dXJuIGVycm9yQ29kZTsKfQoKZnVuY3Rpb24gcmFuayhmKSB7CiAgcmV0dXJuICgoZikgPDwgMSkgLSAoKGYpID4gNCA/IDkgOiAwKTsKfQoKZnVuY3Rpb24gemVybyhidWYpIHsgdmFyIGxlbiA9IGJ1Zi5sZW5ndGg7IHdoaWxlICgtLWxlbiA+PSAwKSB7IGJ1ZltsZW5dID0gMDsgfSB9CgoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBGbHVzaCBhcyBtdWNoIHBlbmRpbmcgb3V0cHV0IGFzIHBvc3NpYmxlLiBBbGwgZGVmbGF0ZSgpIG91dHB1dCBnb2VzCiAqIHRocm91Z2ggdGhpcyBmdW5jdGlvbiBzbyBzb21lIGFwcGxpY2F0aW9ucyBtYXkgd2lzaCB0byBtb2RpZnkgaXQKICogdG8gYXZvaWQgYWxsb2NhdGluZyBhIGxhcmdlIHN0cm0tPm91dHB1dCBidWZmZXIgYW5kIGNvcHlpbmcgaW50byBpdC4KICogKFNlZSBhbHNvIHJlYWRfYnVmKCkpLgogKi8KZnVuY3Rpb24gZmx1c2hfcGVuZGluZyhzdHJtKSB7CiAgdmFyIHMgPSBzdHJtLnN0YXRlOwoKICAvL190cl9mbHVzaF9iaXRzKHMpOwogIHZhciBsZW4gPSBzLnBlbmRpbmc7CiAgaWYgKGxlbiA+IHN0cm0uYXZhaWxfb3V0KSB7CiAgICBsZW4gPSBzdHJtLmF2YWlsX291dDsKICB9CiAgaWYgKGxlbiA9PT0gMCkgeyByZXR1cm47IH0KCiAgdXRpbHMuYXJyYXlTZXQoc3RybS5vdXRwdXQsIHMucGVuZGluZ19idWYsIHMucGVuZGluZ19vdXQsIGxlbiwgc3RybS5uZXh0X291dCk7CiAgc3RybS5uZXh0X291dCArPSBsZW47CiAgcy5wZW5kaW5nX291dCArPSBsZW47CiAgc3RybS50b3RhbF9vdXQgKz0gbGVuOwogIHN0cm0uYXZhaWxfb3V0IC09IGxlbjsKICBzLnBlbmRpbmcgLT0gbGVuOwogIGlmIChzLnBlbmRpbmcgPT09IDApIHsKICAgIHMucGVuZGluZ19vdXQgPSAwOwogIH0KfQoKCmZ1bmN0aW9uIGZsdXNoX2Jsb2NrX29ubHkgKHMsIGxhc3QpIHsKICB0cmVlcy5fdHJfZmx1c2hfYmxvY2socywgKHMuYmxvY2tfc3RhcnQgPj0gMCA/IHMuYmxvY2tfc3RhcnQgOiAtMSksIHMuc3Ryc3RhcnQgLSBzLmJsb2NrX3N0YXJ0LCBsYXN0KTsKICBzLmJsb2NrX3N0YXJ0ID0gcy5zdHJzdGFydDsKICBmbHVzaF9wZW5kaW5nKHMuc3RybSk7Cn0KCgpmdW5jdGlvbiBwdXRfYnl0ZShzLCBiKSB7CiAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBiOwp9CgoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBQdXQgYSBzaG9ydCBpbiB0aGUgcGVuZGluZyBidWZmZXIuIFRoZSAxNi1iaXQgdmFsdWUgaXMgcHV0IGluIE1TQiBvcmRlci4KICogSU4gYXNzZXJ0aW9uOiB0aGUgc3RyZWFtIHN0YXRlIGlzIGNvcnJlY3QgYW5kIHRoZXJlIGlzIGVub3VnaCByb29tIGluCiAqIHBlbmRpbmdfYnVmLgogKi8KZnVuY3Rpb24gcHV0U2hvcnRNU0IocywgYikgewovLyAgcHV0X2J5dGUocywgKEJ5dGUpKGIgPj4gOCkpOwovLyAgcHV0X2J5dGUocywgKEJ5dGUpKGIgJiAweGZmKSk7CiAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSAoYiA+Pj4gOCkgJiAweGZmOwogIHMucGVuZGluZ19idWZbcy5wZW5kaW5nKytdID0gYiAmIDB4ZmY7Cn0KCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogUmVhZCBhIG5ldyBidWZmZXIgZnJvbSB0aGUgY3VycmVudCBpbnB1dCBzdHJlYW0sIHVwZGF0ZSB0aGUgYWRsZXIzMgogKiBhbmQgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuICBBbGwgZGVmbGF0ZSgpIGlucHV0IGdvZXMgdGhyb3VnaAogKiB0aGlzIGZ1bmN0aW9uIHNvIHNvbWUgYXBwbGljYXRpb25zIG1heSB3aXNoIHRvIG1vZGlmeSBpdCB0byBhdm9pZAogKiBhbGxvY2F0aW5nIGEgbGFyZ2Ugc3RybS0+aW5wdXQgYnVmZmVyIGFuZCBjb3B5aW5nIGZyb20gaXQuCiAqIChTZWUgYWxzbyBmbHVzaF9wZW5kaW5nKCkpLgogKi8KZnVuY3Rpb24gcmVhZF9idWYoc3RybSwgYnVmLCBzdGFydCwgc2l6ZSkgewogIHZhciBsZW4gPSBzdHJtLmF2YWlsX2luOwoKICBpZiAobGVuID4gc2l6ZSkgeyBsZW4gPSBzaXplOyB9CiAgaWYgKGxlbiA9PT0gMCkgeyByZXR1cm4gMDsgfQoKICBzdHJtLmF2YWlsX2luIC09IGxlbjsKCiAgdXRpbHMuYXJyYXlTZXQoYnVmLCBzdHJtLmlucHV0LCBzdHJtLm5leHRfaW4sIGxlbiwgc3RhcnQpOwogIGlmIChzdHJtLnN0YXRlLndyYXAgPT09IDEpIHsKICAgIHN0cm0uYWRsZXIgPSBhZGxlcjMyKHN0cm0uYWRsZXIsIGJ1ZiwgbGVuLCBzdGFydCk7CiAgfQoKICBlbHNlIGlmIChzdHJtLnN0YXRlLndyYXAgPT09IDIpIHsKICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBidWYsIGxlbiwgc3RhcnQpOwogIH0KCiAgc3RybS5uZXh0X2luICs9IGxlbjsKICBzdHJtLnRvdGFsX2luICs9IGxlbjsKCiAgcmV0dXJuIGxlbjsKfQoKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBTZXQgbWF0Y2hfc3RhcnQgdG8gdGhlIGxvbmdlc3QgbWF0Y2ggc3RhcnRpbmcgYXQgdGhlIGdpdmVuIHN0cmluZyBhbmQKICogcmV0dXJuIGl0cyBsZW5ndGguIE1hdGNoZXMgc2hvcnRlciBvciBlcXVhbCB0byBwcmV2X2xlbmd0aCBhcmUgZGlzY2FyZGVkLAogKiBpbiB3aGljaCBjYXNlIHRoZSByZXN1bHQgaXMgZXF1YWwgdG8gcHJldl9sZW5ndGggYW5kIG1hdGNoX3N0YXJ0IGlzCiAqIGdhcmJhZ2UuCiAqIElOIGFzc2VydGlvbnM6IGN1cl9tYXRjaCBpcyB0aGUgaGVhZCBvZiB0aGUgaGFzaCBjaGFpbiBmb3IgdGhlIGN1cnJlbnQKICogICBzdHJpbmcgKHN0cnN0YXJ0KSBhbmQgaXRzIGRpc3RhbmNlIGlzIDw9IE1BWF9ESVNULCBhbmQgcHJldl9sZW5ndGggPj0gMQogKiBPVVQgYXNzZXJ0aW9uOiB0aGUgbWF0Y2ggbGVuZ3RoIGlzIG5vdCBncmVhdGVyIHRoYW4gcy0+bG9va2FoZWFkLgogKi8KZnVuY3Rpb24gbG9uZ2VzdF9tYXRjaChzLCBjdXJfbWF0Y2gpIHsKICB2YXIgY2hhaW5fbGVuZ3RoID0gcy5tYXhfY2hhaW5fbGVuZ3RoOyAgICAgIC8qIG1heCBoYXNoIGNoYWluIGxlbmd0aCAqLwogIHZhciBzY2FuID0gcy5zdHJzdGFydDsgLyogY3VycmVudCBzdHJpbmcgKi8KICB2YXIgbWF0Y2g7ICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXRjaGVkIHN0cmluZyAqLwogIHZhciBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGVuZ3RoIG9mIGN1cnJlbnQgbWF0Y2ggKi8KICB2YXIgYmVzdF9sZW4gPSBzLnByZXZfbGVuZ3RoOyAgICAgICAgICAgICAgLyogYmVzdCBtYXRjaCBsZW5ndGggc28gZmFyICovCiAgdmFyIG5pY2VfbWF0Y2ggPSBzLm5pY2VfbWF0Y2g7ICAgICAgICAgICAgIC8qIHN0b3AgaWYgbWF0Y2ggbG9uZyBlbm91Z2ggKi8KICB2YXIgbGltaXQgPSAocy5zdHJzdGFydCA+IChzLndfc2l6ZSAtIE1JTl9MT09LQUhFQUQpKSA/CiAgICAgIHMuc3Ryc3RhcnQgLSAocy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSA6IDAvKk5JTCovOwoKICB2YXIgX3dpbiA9IHMud2luZG93OyAvLyBzaG9ydGN1dAoKICB2YXIgd21hc2sgPSBzLndfbWFzazsKICB2YXIgcHJldiAgPSBzLnByZXY7CgogIC8qIFN0b3Agd2hlbiBjdXJfbWF0Y2ggYmVjb21lcyA8PSBsaW1pdC4gVG8gc2ltcGxpZnkgdGhlIGNvZGUsCiAgICogd2UgcHJldmVudCBtYXRjaGVzIHdpdGggdGhlIHN0cmluZyBvZiB3aW5kb3cgaW5kZXggMC4KICAgKi8KCiAgdmFyIHN0cmVuZCA9IHMuc3Ryc3RhcnQgKyBNQVhfTUFUQ0g7CiAgdmFyIHNjYW5fZW5kMSAgPSBfd2luW3NjYW4gKyBiZXN0X2xlbiAtIDFdOwogIHZhciBzY2FuX2VuZCAgID0gX3dpbltzY2FuICsgYmVzdF9sZW5dOwoKICAvKiBUaGUgY29kZSBpcyBvcHRpbWl6ZWQgZm9yIEhBU0hfQklUUyA+PSA4IGFuZCBNQVhfTUFUQ0gtMiBtdWx0aXBsZSBvZiAxNi4KICAgKiBJdCBpcyBlYXN5IHRvIGdldCByaWQgb2YgdGhpcyBvcHRpbWl6YXRpb24gaWYgbmVjZXNzYXJ5LgogICAqLwogIC8vIEFzc2VydChzLT5oYXNoX2JpdHMgPj0gOCAmJiBNQVhfTUFUQ0ggPT0gMjU4LCAiQ29kZSB0b28gY2xldmVyIik7CgogIC8qIERvIG5vdCB3YXN0ZSB0b28gbXVjaCB0aW1lIGlmIHdlIGFscmVhZHkgaGF2ZSBhIGdvb2QgbWF0Y2g6ICovCiAgaWYgKHMucHJldl9sZW5ndGggPj0gcy5nb29kX21hdGNoKSB7CiAgICBjaGFpbl9sZW5ndGggPj49IDI7CiAgfQogIC8qIERvIG5vdCBsb29rIGZvciBtYXRjaGVzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBpbnB1dC4gVGhpcyBpcyBuZWNlc3NhcnkKICAgKiB0byBtYWtlIGRlZmxhdGUgZGV0ZXJtaW5pc3RpYy4KICAgKi8KICBpZiAobmljZV9tYXRjaCA+IHMubG9va2FoZWFkKSB7IG5pY2VfbWF0Y2ggPSBzLmxvb2thaGVhZDsgfQoKICAvLyBBc3NlcnQoKHVsZylzLT5zdHJzdGFydCA8PSBzLT53aW5kb3dfc2l6ZS1NSU5fTE9PS0FIRUFELCAibmVlZCBsb29rYWhlYWQiKTsKCiAgZG8gewogICAgLy8gQXNzZXJ0KGN1cl9tYXRjaCA8IHMtPnN0cnN0YXJ0LCAibm8gZnV0dXJlIik7CiAgICBtYXRjaCA9IGN1cl9tYXRjaDsKCiAgICAvKiBTa2lwIHRvIG5leHQgbWF0Y2ggaWYgdGhlIG1hdGNoIGxlbmd0aCBjYW5ub3QgaW5jcmVhc2UKICAgICAqIG9yIGlmIHRoZSBtYXRjaCBsZW5ndGggaXMgbGVzcyB0aGFuIDIuICBOb3RlIHRoYXQgdGhlIGNoZWNrcyBiZWxvdwogICAgICogZm9yIGluc3VmZmljaWVudCBsb29rYWhlYWQgb25seSBvY2N1ciBvY2Nhc2lvbmFsbHkgZm9yIHBlcmZvcm1hbmNlCiAgICAgKiByZWFzb25zLiAgVGhlcmVmb3JlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpbGwgYmUgYWNjZXNzZWQsIGFuZAogICAgICogY29uZGl0aW9uYWwganVtcHMgd2lsbCBiZSBtYWRlIHRoYXQgZGVwZW5kIG9uIHRob3NlIHZhbHVlcy4KICAgICAqIEhvd2V2ZXIgdGhlIGxlbmd0aCBvZiB0aGUgbWF0Y2ggaXMgbGltaXRlZCB0byB0aGUgbG9va2FoZWFkLCBzbwogICAgICogdGhlIG91dHB1dCBvZiBkZWZsYXRlIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgdW5pbml0aWFsaXplZCB2YWx1ZXMuCiAgICAgKi8KCiAgICBpZiAoX3dpblttYXRjaCArIGJlc3RfbGVuXSAgICAgIT09IHNjYW5fZW5kICB8fAogICAgICAgIF93aW5bbWF0Y2ggKyBiZXN0X2xlbiAtIDFdICE9PSBzY2FuX2VuZDEgfHwKICAgICAgICBfd2luW21hdGNoXSAgICAgICAgICAgICAgICAhPT0gX3dpbltzY2FuXSB8fAogICAgICAgIF93aW5bKyttYXRjaF0gICAgICAgICAgICAgICE9PSBfd2luW3NjYW4gKyAxXSkgewogICAgICBjb250aW51ZTsKICAgIH0KCiAgICAvKiBUaGUgY2hlY2sgYXQgYmVzdF9sZW4tMSBjYW4gYmUgcmVtb3ZlZCBiZWNhdXNlIGl0IHdpbGwgYmUgbWFkZQogICAgICogYWdhaW4gbGF0ZXIuIChUaGlzIGhldXJpc3RpYyBpcyBub3QgYWx3YXlzIGEgd2luLikKICAgICAqIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY29tcGFyZSBzY2FuWzJdIGFuZCBtYXRjaFsyXSBzaW5jZSB0aGV5CiAgICAgKiBhcmUgYWx3YXlzIGVxdWFsIHdoZW4gdGhlIG90aGVyIGJ5dGVzIG1hdGNoLCBnaXZlbiB0aGF0CiAgICAgKiB0aGUgaGFzaCBrZXlzIGFyZSBlcXVhbCBhbmQgdGhhdCBIQVNIX0JJVFMgPj0gOC4KICAgICAqLwogICAgc2NhbiArPSAyOwogICAgbWF0Y2grKzsKICAgIC8vIEFzc2VydCgqc2NhbiA9PSAqbWF0Y2gsICJtYXRjaFsyXT8iKTsKCiAgICAvKiBXZSBjaGVjayBmb3IgaW5zdWZmaWNpZW50IGxvb2thaGVhZCBvbmx5IGV2ZXJ5IDh0aCBjb21wYXJpc29uOwogICAgICogdGhlIDI1NnRoIGNoZWNrIHdpbGwgYmUgbWFkZSBhdCBzdHJzdGFydCsyNTguCiAgICAgKi8KICAgIGRvIHsKICAgICAgLypqc2hpbnQgbm9lbXB0eTpmYWxzZSovCiAgICB9IHdoaWxlIChfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmCiAgICAgICAgICAgICBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmCiAgICAgICAgICAgICBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmCiAgICAgICAgICAgICBfd2luWysrc2Nhbl0gPT09IF93aW5bKyttYXRjaF0gJiYgX3dpblsrK3NjYW5dID09PSBfd2luWysrbWF0Y2hdICYmCiAgICAgICAgICAgICBzY2FuIDwgc3RyZW5kKTsKCiAgICAvLyBBc3NlcnQoc2NhbiA8PSBzLT53aW5kb3crKHVuc2lnbmVkKShzLT53aW5kb3dfc2l6ZS0xKSwgIndpbGQgc2NhbiIpOwoKICAgIGxlbiA9IE1BWF9NQVRDSCAtIChzdHJlbmQgLSBzY2FuKTsKICAgIHNjYW4gPSBzdHJlbmQgLSBNQVhfTUFUQ0g7CgogICAgaWYgKGxlbiA+IGJlc3RfbGVuKSB7CiAgICAgIHMubWF0Y2hfc3RhcnQgPSBjdXJfbWF0Y2g7CiAgICAgIGJlc3RfbGVuID0gbGVuOwogICAgICBpZiAobGVuID49IG5pY2VfbWF0Y2gpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzY2FuX2VuZDEgID0gX3dpbltzY2FuICsgYmVzdF9sZW4gLSAxXTsKICAgICAgc2Nhbl9lbmQgICA9IF93aW5bc2NhbiArIGJlc3RfbGVuXTsKICAgIH0KICB9IHdoaWxlICgoY3VyX21hdGNoID0gcHJldltjdXJfbWF0Y2ggJiB3bWFza10pID4gbGltaXQgJiYgLS1jaGFpbl9sZW5ndGggIT09IDApOwoKICBpZiAoYmVzdF9sZW4gPD0gcy5sb29rYWhlYWQpIHsKICAgIHJldHVybiBiZXN0X2xlbjsKICB9CiAgcmV0dXJuIHMubG9va2FoZWFkOwp9CgoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIEZpbGwgdGhlIHdpbmRvdyB3aGVuIHRoZSBsb29rYWhlYWQgYmVjb21lcyBpbnN1ZmZpY2llbnQuCiAqIFVwZGF0ZXMgc3Ryc3RhcnQgYW5kIGxvb2thaGVhZC4KICoKICogSU4gYXNzZXJ0aW9uOiBsb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFECiAqIE9VVCBhc3NlcnRpb25zOiBzdHJzdGFydCA8PSB3aW5kb3dfc2l6ZS1NSU5fTE9PS0FIRUFECiAqICAgIEF0IGxlYXN0IG9uZSBieXRlIGhhcyBiZWVuIHJlYWQsIG9yIGF2YWlsX2luID09IDA7IHJlYWRzIGFyZQogKiAgICBwZXJmb3JtZWQgZm9yIGF0IGxlYXN0IHR3byBieXRlcyAocmVxdWlyZWQgZm9yIHRoZSB6aXAgdHJhbnNsYXRlX2VvbAogKiAgICBvcHRpb24gLS0gbm90IHN1cHBvcnRlZCBoZXJlKS4KICovCmZ1bmN0aW9uIGZpbGxfd2luZG93KHMpIHsKICB2YXIgX3dfc2l6ZSA9IHMud19zaXplOwogIHZhciBwLCBuLCBtLCBtb3JlLCBzdHI7CgogIC8vQXNzZXJ0KHMtPmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQsICJhbHJlYWR5IGVub3VnaCBsb29rYWhlYWQiKTsKCiAgZG8gewogICAgbW9yZSA9IHMud2luZG93X3NpemUgLSBzLmxvb2thaGVhZCAtIHMuc3Ryc3RhcnQ7CgogICAgLy8gSlMgaW50cyBoYXZlIDMyIGJpdCwgYmxvY2sgYmVsb3cgbm90IG5lZWRlZAogICAgLyogRGVhbCB3aXRoICFAIyQlIDY0SyBsaW1pdDogKi8KICAgIC8vaWYgKHNpemVvZihpbnQpIDw9IDIpIHsKICAgIC8vICAgIGlmIChtb3JlID09IDAgJiYgcy0+c3Ryc3RhcnQgPT0gMCAmJiBzLT5sb29rYWhlYWQgPT0gMCkgewogICAgLy8gICAgICAgIG1vcmUgPSB3c2l6ZTsKICAgIC8vCiAgICAvLyAgfSBlbHNlIGlmIChtb3JlID09ICh1bnNpZ25lZCkoLTEpKSB7CiAgICAvLyAgICAgICAgLyogVmVyeSB1bmxpa2VseSwgYnV0IHBvc3NpYmxlIG9uIDE2IGJpdCBtYWNoaW5lIGlmCiAgICAvLyAgICAgICAgICogc3Ryc3RhcnQgPT0gMCAmJiBsb29rYWhlYWQgPT0gMSAoaW5wdXQgZG9uZSBhIGJ5dGUgYXQgdGltZSkKICAgIC8vICAgICAgICAgKi8KICAgIC8vICAgICAgICBtb3JlLS07CiAgICAvLyAgICB9CiAgICAvL30KCgogICAgLyogSWYgdGhlIHdpbmRvdyBpcyBhbG1vc3QgZnVsbCBhbmQgdGhlcmUgaXMgaW5zdWZmaWNpZW50IGxvb2thaGVhZCwKICAgICAqIG1vdmUgdGhlIHVwcGVyIGhhbGYgdG8gdGhlIGxvd2VyIG9uZSB0byBtYWtlIHJvb20gaW4gdGhlIHVwcGVyIGhhbGYuCiAgICAgKi8KICAgIGlmIChzLnN0cnN0YXJ0ID49IF93X3NpemUgKyAoX3dfc2l6ZSAtIE1JTl9MT09LQUhFQUQpKSB7CgogICAgICB1dGlscy5hcnJheVNldChzLndpbmRvdywgcy53aW5kb3csIF93X3NpemUsIF93X3NpemUsIDApOwogICAgICBzLm1hdGNoX3N0YXJ0IC09IF93X3NpemU7CiAgICAgIHMuc3Ryc3RhcnQgLT0gX3dfc2l6ZTsKICAgICAgLyogd2Ugbm93IGhhdmUgc3Ryc3RhcnQgPj0gTUFYX0RJU1QgKi8KICAgICAgcy5ibG9ja19zdGFydCAtPSBfd19zaXplOwoKICAgICAgLyogU2xpZGUgdGhlIGhhc2ggdGFibGUgKGNvdWxkIGJlIGF2b2lkZWQgd2l0aCAzMiBiaXQgdmFsdWVzCiAgICAgICBhdCB0aGUgZXhwZW5zZSBvZiBtZW1vcnkgdXNhZ2UpLiBXZSBzbGlkZSBldmVuIHdoZW4gbGV2ZWwgPT0gMAogICAgICAgdG8ga2VlcCB0aGUgaGFzaCB0YWJsZSBjb25zaXN0ZW50IGlmIHdlIHN3aXRjaCBiYWNrIHRvIGxldmVsID4gMAogICAgICAgbGF0ZXIuIChVc2luZyBsZXZlbCAwIHBlcm1hbmVudGx5IGlzIG5vdCBhbiBvcHRpbWFsIHVzYWdlIG9mCiAgICAgICB6bGliLCBzbyB3ZSBkb24ndCBjYXJlIGFib3V0IHRoaXMgcGF0aG9sb2dpY2FsIGNhc2UuKQogICAgICAgKi8KCiAgICAgIG4gPSBzLmhhc2hfc2l6ZTsKICAgICAgcCA9IG47CiAgICAgIGRvIHsKICAgICAgICBtID0gcy5oZWFkWy0tcF07CiAgICAgICAgcy5oZWFkW3BdID0gKG0gPj0gX3dfc2l6ZSA/IG0gLSBfd19zaXplIDogMCk7CiAgICAgIH0gd2hpbGUgKC0tbik7CgogICAgICBuID0gX3dfc2l6ZTsKICAgICAgcCA9IG47CiAgICAgIGRvIHsKICAgICAgICBtID0gcy5wcmV2Wy0tcF07CiAgICAgICAgcy5wcmV2W3BdID0gKG0gPj0gX3dfc2l6ZSA/IG0gLSBfd19zaXplIDogMCk7CiAgICAgICAgLyogSWYgbiBpcyBub3Qgb24gYW55IGhhc2ggY2hhaW4sIHByZXZbbl0gaXMgZ2FyYmFnZSBidXQKICAgICAgICAgKiBpdHMgdmFsdWUgd2lsbCBuZXZlciBiZSB1c2VkLgogICAgICAgICAqLwogICAgICB9IHdoaWxlICgtLW4pOwoKICAgICAgbW9yZSArPSBfd19zaXplOwogICAgfQogICAgaWYgKHMuc3RybS5hdmFpbF9pbiA9PT0gMCkgewogICAgICBicmVhazsKICAgIH0KCiAgICAvKiBJZiB0aGVyZSB3YXMgbm8gc2xpZGluZzoKICAgICAqICAgIHN0cnN0YXJ0IDw9IFdTSVpFK01BWF9ESVNULTEgJiYgbG9va2FoZWFkIDw9IE1JTl9MT09LQUhFQUQgLSAxICYmCiAgICAgKiAgICBtb3JlID09IHdpbmRvd19zaXplIC0gbG9va2FoZWFkIC0gc3Ryc3RhcnQKICAgICAqID0+IG1vcmUgPj0gd2luZG93X3NpemUgLSAoTUlOX0xPT0tBSEVBRC0xICsgV1NJWkUgKyBNQVhfRElTVC0xKQogICAgICogPT4gbW9yZSA+PSB3aW5kb3dfc2l6ZSAtIDIqV1NJWkUgKyAyCiAgICAgKiBJbiB0aGUgQklHX01FTSBvciBNTUFQIGNhc2UgKG5vdCB5ZXQgc3VwcG9ydGVkKSwKICAgICAqICAgd2luZG93X3NpemUgPT0gaW5wdXRfc2l6ZSArIE1JTl9MT09LQUhFQUQgICYmCiAgICAgKiAgIHN0cnN0YXJ0ICsgcy0+bG9va2FoZWFkIDw9IGlucHV0X3NpemUgPT4gbW9yZSA+PSBNSU5fTE9PS0FIRUFELgogICAgICogT3RoZXJ3aXNlLCB3aW5kb3dfc2l6ZSA9PSAyKldTSVpFIHNvIG1vcmUgPj0gMi4KICAgICAqIElmIHRoZXJlIHdhcyBzbGlkaW5nLCBtb3JlID49IFdTSVpFLiBTbyBpbiBhbGwgY2FzZXMsIG1vcmUgPj0gMi4KICAgICAqLwogICAgLy9Bc3NlcnQobW9yZSA+PSAyLCAibW9yZSA8IDIiKTsKICAgIG4gPSByZWFkX2J1ZihzLnN0cm0sIHMud2luZG93LCBzLnN0cnN0YXJ0ICsgcy5sb29rYWhlYWQsIG1vcmUpOwogICAgcy5sb29rYWhlYWQgKz0gbjsKCiAgICAvKiBJbml0aWFsaXplIHRoZSBoYXNoIHZhbHVlIG5vdyB0aGF0IHdlIGhhdmUgc29tZSBpbnB1dDogKi8KICAgIGlmIChzLmxvb2thaGVhZCArIHMuaW5zZXJ0ID49IE1JTl9NQVRDSCkgewogICAgICBzdHIgPSBzLnN0cnN0YXJ0IC0gcy5pbnNlcnQ7CiAgICAgIHMuaW5zX2ggPSBzLndpbmRvd1tzdHJdOwoKICAgICAgLyogVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1tzdHIgKyAxXSk7ICovCiAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3N0ciArIDFdKSAmIHMuaGFzaF9tYXNrOwovLyNpZiBNSU5fTUFUQ0ggIT0gMwovLyAgICAgICAgQ2FsbCB1cGRhdGVfaGFzaCgpIE1JTl9NQVRDSC0zIG1vcmUgdGltZXMKLy8jZW5kaWYKICAgICAgd2hpbGUgKHMuaW5zZXJ0KSB7CiAgICAgICAgLyogVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1tzdHIgKyBNSU5fTUFUQ0gtMV0pOyAqLwogICAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3N0ciArIE1JTl9NQVRDSC0xXSkgJiBzLmhhc2hfbWFzazsKCiAgICAgICAgcy5wcmV2W3N0ciAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTsKICAgICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzdHI7CiAgICAgICAgc3RyKys7CiAgICAgICAgcy5pbnNlcnQtLTsKICAgICAgICBpZiAocy5sb29rYWhlYWQgKyBzLmluc2VydCA8IE1JTl9NQVRDSCkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvKiBJZiB0aGUgd2hvbGUgaW5wdXQgaGFzIGxlc3MgdGhhbiBNSU5fTUFUQ0ggYnl0ZXMsIGluc19oIGlzIGdhcmJhZ2UsCiAgICAgKiBidXQgdGhpcyBpcyBub3QgaW1wb3J0YW50IHNpbmNlIG9ubHkgbGl0ZXJhbCBieXRlcyB3aWxsIGJlIGVtaXR0ZWQuCiAgICAgKi8KCiAgfSB3aGlsZSAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEICYmIHMuc3RybS5hdmFpbF9pbiAhPT0gMCk7CgogIC8qIElmIHRoZSBXSU5fSU5JVCBieXRlcyBhZnRlciB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGRhdGEgaGF2ZSBuZXZlciBiZWVuCiAgICogd3JpdHRlbiwgdGhlbiB6ZXJvIHRob3NlIGJ5dGVzIGluIG9yZGVyIHRvIGF2b2lkIG1lbW9yeSBjaGVjayByZXBvcnRzIG9mCiAgICogdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIChvciB1bmluaXRpYWxpc2VkIGFzIEp1bGlhbiB3cml0ZXMpIGJ5dGVzIGJ5CiAgICogdGhlIGxvbmdlc3QgbWF0Y2ggcm91dGluZXMuICBVcGRhdGUgdGhlIGhpZ2ggd2F0ZXIgbWFyayBmb3IgdGhlIG5leHQKICAgKiB0aW1lIHRocm91Z2ggaGVyZS4gIFdJTl9JTklUIGlzIHNldCB0byBNQVhfTUFUQ0ggc2luY2UgdGhlIGxvbmdlc3QgbWF0Y2gKICAgKiByb3V0aW5lcyBhbGxvdyBzY2FubmluZyB0byBzdHJzdGFydCArIE1BWF9NQVRDSCwgaWdub3JpbmcgbG9va2FoZWFkLgogICAqLwovLyAgaWYgKHMuaGlnaF93YXRlciA8IHMud2luZG93X3NpemUpIHsKLy8gICAgdmFyIGN1cnIgPSBzLnN0cnN0YXJ0ICsgcy5sb29rYWhlYWQ7Ci8vICAgIHZhciBpbml0ID0gMDsKLy8KLy8gICAgaWYgKHMuaGlnaF93YXRlciA8IGN1cnIpIHsKLy8gICAgICAvKiBQcmV2aW91cyBoaWdoIHdhdGVyIG1hcmsgYmVsb3cgY3VycmVudCBkYXRhIC0tIHplcm8gV0lOX0lOSVQKLy8gICAgICAgKiBieXRlcyBvciB1cCB0byBlbmQgb2Ygd2luZG93LCB3aGljaGV2ZXIgaXMgbGVzcy4KLy8gICAgICAgKi8KLy8gICAgICBpbml0ID0gcy53aW5kb3dfc2l6ZSAtIGN1cnI7Ci8vICAgICAgaWYgKGluaXQgPiBXSU5fSU5JVCkKLy8gICAgICAgIGluaXQgPSBXSU5fSU5JVDsKLy8gICAgICB6bWVtemVybyhzLT53aW5kb3cgKyBjdXJyLCAodW5zaWduZWQpaW5pdCk7Ci8vICAgICAgcy0+aGlnaF93YXRlciA9IGN1cnIgKyBpbml0OwovLyAgICB9Ci8vICAgIGVsc2UgaWYgKHMtPmhpZ2hfd2F0ZXIgPCAodWxnKWN1cnIgKyBXSU5fSU5JVCkgewovLyAgICAgIC8qIEhpZ2ggd2F0ZXIgbWFyayBhdCBvciBhYm92ZSBjdXJyZW50IGRhdGEsIGJ1dCBiZWxvdyBjdXJyZW50IGRhdGEKLy8gICAgICAgKiBwbHVzIFdJTl9JTklUIC0tIHplcm8gb3V0IHRvIGN1cnJlbnQgZGF0YSBwbHVzIFdJTl9JTklULCBvciB1cAovLyAgICAgICAqIHRvIGVuZCBvZiB3aW5kb3csIHdoaWNoZXZlciBpcyBsZXNzLgovLyAgICAgICAqLwovLyAgICAgIGluaXQgPSAodWxnKWN1cnIgKyBXSU5fSU5JVCAtIHMtPmhpZ2hfd2F0ZXI7Ci8vICAgICAgaWYgKGluaXQgPiBzLT53aW5kb3dfc2l6ZSAtIHMtPmhpZ2hfd2F0ZXIpCi8vICAgICAgICBpbml0ID0gcy0+d2luZG93X3NpemUgLSBzLT5oaWdoX3dhdGVyOwovLyAgICAgIHptZW16ZXJvKHMtPndpbmRvdyArIHMtPmhpZ2hfd2F0ZXIsICh1bnNpZ25lZClpbml0KTsKLy8gICAgICBzLT5oaWdoX3dhdGVyICs9IGluaXQ7Ci8vICAgIH0KLy8gIH0KLy8KLy8gIEFzc2VydCgodWxnKXMtPnN0cnN0YXJ0IDw9IHMtPndpbmRvd19zaXplIC0gTUlOX0xPT0tBSEVBRCwKLy8gICAgIm5vdCBlbm91Z2ggcm9vbSBmb3Igc2VhcmNoIik7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBDb3B5IHdpdGhvdXQgY29tcHJlc3Npb24gYXMgbXVjaCBhcyBwb3NzaWJsZSBmcm9tIHRoZSBpbnB1dCBzdHJlYW0sIHJldHVybgogKiB0aGUgY3VycmVudCBibG9jayBzdGF0ZS4KICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBpbnNlcnQgbmV3IHN0cmluZ3MgaW4gdGhlIGRpY3Rpb25hcnkgc2luY2UKICogdW5jb21wcmVzc2libGUgZGF0YSBpcyBwcm9iYWJseSBub3QgdXNlZnVsLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQKICogb25seSBmb3IgdGhlIGxldmVsPTAgY29tcHJlc3Npb24gb3B0aW9uLgogKiBOT1RFOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBvcHRpbWl6ZWQgdG8gYXZvaWQgZXh0cmEgY29weWluZyBmcm9tCiAqIHdpbmRvdyB0byBwZW5kaW5nX2J1Zi4KICovCmZ1bmN0aW9uIGRlZmxhdGVfc3RvcmVkKHMsIGZsdXNoKSB7CiAgLyogU3RvcmVkIGJsb2NrcyBhcmUgbGltaXRlZCB0byAweGZmZmYgYnl0ZXMsIHBlbmRpbmdfYnVmIGlzIGxpbWl0ZWQKICAgKiB0byBwZW5kaW5nX2J1Zl9zaXplLCBhbmQgZWFjaCBzdG9yZWQgYmxvY2sgaGFzIGEgNSBieXRlIGhlYWRlcjoKICAgKi8KICB2YXIgbWF4X2Jsb2NrX3NpemUgPSAweGZmZmY7CgogIGlmIChtYXhfYmxvY2tfc2l6ZSA+IHMucGVuZGluZ19idWZfc2l6ZSAtIDUpIHsKICAgIG1heF9ibG9ja19zaXplID0gcy5wZW5kaW5nX2J1Zl9zaXplIC0gNTsKICB9CgogIC8qIENvcHkgYXMgbXVjaCBhcyBwb3NzaWJsZSBmcm9tIGlucHV0IHRvIG91dHB1dDogKi8KICBmb3IgKDs7KSB7CiAgICAvKiBGaWxsIHRoZSB3aW5kb3cgYXMgbXVjaCBhcyBwb3NzaWJsZTogKi8KICAgIGlmIChzLmxvb2thaGVhZCA8PSAxKSB7CgogICAgICAvL0Fzc2VydChzLT5zdHJzdGFydCA8IHMtPndfc2l6ZStNQVhfRElTVChzKSB8fAogICAgICAvLyAgcy0+YmxvY2tfc3RhcnQgPj0gKGxvbmcpcy0+d19zaXplLCAic2xpZGUgdG9vIGxhdGUiKTsKLy8gICAgICBpZiAoIShzLnN0cnN0YXJ0IDwgcy53X3NpemUgKyAocy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSB8fAovLyAgICAgICAgcy5ibG9ja19zdGFydCA+PSBzLndfc2l6ZSkpIHsKLy8gICAgICAgIHRocm93ICBuZXcgRXJyb3IoInNsaWRlIHRvbyBsYXRlIik7Ci8vICAgICAgfQoKICAgICAgZmlsbF93aW5kb3cocyk7CiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCAmJiBmbHVzaCA9PT0gWl9OT19GTFVTSCkgewogICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgIH0KCiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovCiAgICB9CiAgICAvL0Fzc2VydChzLT5ibG9ja19zdGFydCA+PSAwTCwgImJsb2NrIGdvbmUiKTsKLy8gICAgaWYgKHMuYmxvY2tfc3RhcnQgPCAwKSB0aHJvdyBuZXcgRXJyb3IoImJsb2NrIGdvbmUiKTsKCiAgICBzLnN0cnN0YXJ0ICs9IHMubG9va2FoZWFkOwogICAgcy5sb29rYWhlYWQgPSAwOwoKICAgIC8qIEVtaXQgYSBzdG9yZWQgYmxvY2sgaWYgcGVuZGluZ19idWYgd2lsbCBiZSBmdWxsOiAqLwogICAgdmFyIG1heF9zdGFydCA9IHMuYmxvY2tfc3RhcnQgKyBtYXhfYmxvY2tfc2l6ZTsKCiAgICBpZiAocy5zdHJzdGFydCA9PT0gMCB8fCBzLnN0cnN0YXJ0ID49IG1heF9zdGFydCkgewogICAgICAvKiBzdHJzdGFydCA9PSAwIGlzIHBvc3NpYmxlIHdoZW4gd3JhcGFyb3VuZCBvbiAxNi1iaXQgbWFjaGluZSAqLwogICAgICBzLmxvb2thaGVhZCA9IHMuc3Ryc3RhcnQgLSBtYXhfc3RhcnQ7CiAgICAgIHMuc3Ryc3RhcnQgPSBtYXhfc3RhcnQ7CiAgICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi8KICAgICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgfQogICAgICAvKioqLwoKCiAgICB9CiAgICAvKiBGbHVzaCBpZiB3ZSBtYXkgaGF2ZSB0byBzbGlkZSwgb3RoZXJ3aXNlIGJsb2NrX3N0YXJ0IG1heSBiZWNvbWUKICAgICAqIG5lZ2F0aXZlIGFuZCB0aGUgZGF0YSB3aWxsIGJlIGdvbmU6CiAgICAgKi8KICAgIGlmIChzLnN0cnN0YXJ0IC0gcy5ibG9ja19zdGFydCA+PSAocy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSkgewogICAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovCiAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgIH0KICAgICAgLyoqKi8KICAgIH0KICB9CgogIHMuaW5zZXJ0ID0gMDsKCiAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkgewogICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAxKTsgKioqLwogICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTsKICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDsKICAgIH0KICAgIC8qKiovCiAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7CiAgfQoKICBpZiAocy5zdHJzdGFydCA+IHMuYmxvY2tfc3RhcnQpIHsKICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi8KICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgIH0KICAgIC8qKiovCiAgfQoKICByZXR1cm4gQlNfTkVFRF9NT1JFOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogQ29tcHJlc3MgYXMgbXVjaCBhcyBwb3NzaWJsZSBmcm9tIHRoZSBpbnB1dCBzdHJlYW0sIHJldHVybiB0aGUgY3VycmVudAogKiBibG9jayBzdGF0ZS4KICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwZXJmb3JtIGxhenkgZXZhbHVhdGlvbiBvZiBtYXRjaGVzIGFuZCBpbnNlcnRzCiAqIG5ldyBzdHJpbmdzIGluIHRoZSBkaWN0aW9uYXJ5IG9ubHkgZm9yIHVubWF0Y2hlZCBzdHJpbmdzIG9yIGZvciBzaG9ydAogKiBtYXRjaGVzLiBJdCBpcyB1c2VkIG9ubHkgZm9yIHRoZSBmYXN0IGNvbXByZXNzaW9uIG9wdGlvbnMuCiAqLwpmdW5jdGlvbiBkZWZsYXRlX2Zhc3QocywgZmx1c2gpIHsKICB2YXIgaGFzaF9oZWFkOyAgICAgICAgLyogaGVhZCBvZiB0aGUgaGFzaCBjaGFpbiAqLwogIHZhciBiZmx1c2g7ICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQgKi8KCiAgZm9yICg7OykgewogICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgYWx3YXlzIGhhdmUgZW5vdWdoIGxvb2thaGVhZCwgZXhjZXB0CiAgICAgKiBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlLiBXZSBuZWVkIE1BWF9NQVRDSCBieXRlcwogICAgICogZm9yIHRoZSBuZXh0IG1hdGNoLCBwbHVzIE1JTl9NQVRDSCBieXRlcyB0byBpbnNlcnQgdGhlCiAgICAgKiBzdHJpbmcgZm9sbG93aW5nIHRoZSBuZXh0IG1hdGNoLgogICAgICovCiAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEKSB7CiAgICAgIGZpbGxfd2luZG93KHMpOwogICAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEICYmIGZsdXNoID09PSBaX05PX0ZMVVNIKSB7CiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgfQogICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHsKICAgICAgICBicmVhazsgLyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi8KICAgICAgfQogICAgfQoKICAgIC8qIEluc2VydCB0aGUgc3RyaW5nIHdpbmRvd1tzdHJzdGFydCAuLiBzdHJzdGFydCsyXSBpbiB0aGUKICAgICAqIGRpY3Rpb25hcnksIGFuZCBzZXQgaGFzaF9oZWFkIHRvIHRoZSBoZWFkIG9mIHRoZSBoYXNoIGNoYWluOgogICAgICovCiAgICBoYXNoX2hlYWQgPSAwLypOSUwqLzsKICAgIGlmIChzLmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHsKICAgICAgLyoqKiBJTlNFUlRfU1RSSU5HKHMsIHMuc3Ryc3RhcnQsIGhhc2hfaGVhZCk7ICoqKi8KICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbcy5zdHJzdGFydCArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrOwogICAgICBoYXNoX2hlYWQgPSBzLnByZXZbcy5zdHJzdGFydCAmIHMud19tYXNrXSA9IHMuaGVhZFtzLmluc19oXTsKICAgICAgcy5oZWFkW3MuaW5zX2hdID0gcy5zdHJzdGFydDsKICAgICAgLyoqKi8KICAgIH0KCiAgICAvKiBGaW5kIHRoZSBsb25nZXN0IG1hdGNoLCBkaXNjYXJkaW5nIHRob3NlIDw9IHByZXZfbGVuZ3RoLgogICAgICogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGFsd2F5cyBtYXRjaF9sZW5ndGggPCBNSU5fTUFUQ0gKICAgICAqLwogICAgaWYgKGhhc2hfaGVhZCAhPT0gMC8qTklMKi8gJiYgKChzLnN0cnN0YXJ0IC0gaGFzaF9oZWFkKSA8PSAocy53X3NpemUgLSBNSU5fTE9PS0FIRUFEKSkpIHsKICAgICAgLyogVG8gc2ltcGxpZnkgdGhlIGNvZGUsIHdlIHByZXZlbnQgbWF0Y2hlcyB3aXRoIHRoZSBzdHJpbmcKICAgICAgICogb2Ygd2luZG93IGluZGV4IDAgKGluIHBhcnRpY3VsYXIgd2UgaGF2ZSB0byBhdm9pZCBhIG1hdGNoCiAgICAgICAqIG9mIHRoZSBzdHJpbmcgd2l0aCBpdHNlbGYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpbnB1dCBmaWxlKS4KICAgICAgICovCiAgICAgIHMubWF0Y2hfbGVuZ3RoID0gbG9uZ2VzdF9tYXRjaChzLCBoYXNoX2hlYWQpOwogICAgICAvKiBsb25nZXN0X21hdGNoKCkgc2V0cyBtYXRjaF9zdGFydCAqLwogICAgfQogICAgaWYgKHMubWF0Y2hfbGVuZ3RoID49IE1JTl9NQVRDSCkgewogICAgICAvLyBjaGVja19tYXRjaChzLCBzLnN0cnN0YXJ0LCBzLm1hdGNoX3N0YXJ0LCBzLm1hdGNoX2xlbmd0aCk7IC8vIGZvciBkZWJ1ZyBvbmx5CgogICAgICAvKioqIF90cl90YWxseV9kaXN0KHMsIHMuc3Ryc3RhcnQgLSBzLm1hdGNoX3N0YXJ0LAogICAgICAgICAgICAgICAgICAgICBzLm1hdGNoX2xlbmd0aCAtIE1JTl9NQVRDSCwgYmZsdXNoKTsgKioqLwogICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgcy5zdHJzdGFydCAtIHMubWF0Y2hfc3RhcnQsIHMubWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENIKTsKCiAgICAgIHMubG9va2FoZWFkIC09IHMubWF0Y2hfbGVuZ3RoOwoKICAgICAgLyogSW5zZXJ0IG5ldyBzdHJpbmdzIGluIHRoZSBoYXNoIHRhYmxlIG9ubHkgaWYgdGhlIG1hdGNoIGxlbmd0aAogICAgICAgKiBpcyBub3QgdG9vIGxhcmdlLiBUaGlzIHNhdmVzIHRpbWUgYnV0IGRlZ3JhZGVzIGNvbXByZXNzaW9uLgogICAgICAgKi8KICAgICAgaWYgKHMubWF0Y2hfbGVuZ3RoIDw9IHMubWF4X2xhenlfbWF0Y2gvKm1heF9pbnNlcnRfbGVuZ3RoKi8gJiYgcy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7CiAgICAgICAgcy5tYXRjaF9sZW5ndGgtLTsgLyogc3RyaW5nIGF0IHN0cnN0YXJ0IGFscmVhZHkgaW4gdGFibGUgKi8KICAgICAgICBkbyB7CiAgICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgICAgICAvKioqIElOU0VSVF9TVFJJTkcocywgcy5zdHJzdGFydCwgaGFzaF9oZWFkKTsgKioqLwogICAgICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbcy5zdHJzdGFydCArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrOwogICAgICAgICAgaGFzaF9oZWFkID0gcy5wcmV2W3Muc3Ryc3RhcnQgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07CiAgICAgICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzLnN0cnN0YXJ0OwogICAgICAgICAgLyoqKi8KICAgICAgICAgIC8qIHN0cnN0YXJ0IG5ldmVyIGV4Y2VlZHMgV1NJWkUtTUFYX01BVENILCBzbyB0aGVyZSBhcmUKICAgICAgICAgICAqIGFsd2F5cyBNSU5fTUFUQ0ggYnl0ZXMgYWhlYWQuCiAgICAgICAgICAgKi8KICAgICAgICB9IHdoaWxlICgtLXMubWF0Y2hfbGVuZ3RoICE9PSAwKTsKICAgICAgICBzLnN0cnN0YXJ0Kys7CiAgICAgIH0gZWxzZQogICAgICB7CiAgICAgICAgcy5zdHJzdGFydCArPSBzLm1hdGNoX2xlbmd0aDsKICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IDA7CiAgICAgICAgcy5pbnNfaCA9IHMud2luZG93W3Muc3Ryc3RhcnRdOwogICAgICAgIC8qIFVQREFURV9IQVNIKHMsIHMuaW5zX2gsIHMud2luZG93W3Muc3Ryc3RhcnQrMV0pOyAqLwogICAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyAxXSkgJiBzLmhhc2hfbWFzazsKCi8vI2lmIE1JTl9NQVRDSCAhPSAzCi8vICAgICAgICAgICAgICAgIENhbGwgVVBEQVRFX0hBU0goKSBNSU5fTUFUQ0gtMyBtb3JlIHRpbWVzCi8vI2VuZGlmCiAgICAgICAgLyogSWYgbG9va2FoZWFkIDwgTUlOX01BVENILCBpbnNfaCBpcyBnYXJiYWdlLCBidXQgaXQgZG9lcyBub3QKICAgICAgICAgKiBtYXR0ZXIgc2luY2UgaXQgd2lsbCBiZSByZWNvbXB1dGVkIGF0IG5leHQgZGVmbGF0ZSBjYWxsLgogICAgICAgICAqLwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvKiBObyBtYXRjaCwgb3V0cHV0IGEgbGl0ZXJhbCBieXRlICovCiAgICAgIC8vVHJhY2V2digoc3RkZXJyLCIlYyIsIHMud2luZG93W3Muc3Ryc3RhcnRdKSk7CiAgICAgIC8qKiogX3RyX3RhbGx5X2xpdChzLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSwgYmZsdXNoKTsgKioqLwogICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMCwgcy53aW5kb3dbcy5zdHJzdGFydF0pOwoKICAgICAgcy5sb29rYWhlYWQtLTsKICAgICAgcy5zdHJzdGFydCsrOwogICAgfQogICAgaWYgKGJmbHVzaCkgewogICAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovCiAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgIH0KICAgICAgLyoqKi8KICAgIH0KICB9CiAgcy5pbnNlcnQgPSAoKHMuc3Ryc3RhcnQgPCAoTUlOX01BVENILTEpKSA/IHMuc3Ryc3RhcnQgOiBNSU5fTUFUQ0gtMSk7CiAgaWYgKGZsdXNoID09PSBaX0ZJTklTSCkgewogICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAxKTsgKioqLwogICAgZmx1c2hfYmxvY2tfb25seShzLCB0cnVlKTsKICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgIHJldHVybiBCU19GSU5JU0hfU1RBUlRFRDsKICAgIH0KICAgIC8qKiovCiAgICByZXR1cm4gQlNfRklOSVNIX0RPTkU7CiAgfQogIGlmIChzLmxhc3RfbGl0KSB7CiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovCiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgIGlmIChzLnN0cm0uYXZhaWxfb3V0ID09PSAwKSB7CiAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICB9CiAgICAvKioqLwogIH0KICByZXR1cm4gQlNfQkxPQ0tfRE9ORTsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIFNhbWUgYXMgYWJvdmUsIGJ1dCBhY2hpZXZlcyBiZXR0ZXIgY29tcHJlc3Npb24uIFdlIHVzZSBhIGxhenkKICogZXZhbHVhdGlvbiBmb3IgbWF0Y2hlczogYSBtYXRjaCBpcyBmaW5hbGx5IGFkb3B0ZWQgb25seSBpZiB0aGVyZSBpcwogKiBubyBiZXR0ZXIgbWF0Y2ggYXQgdGhlIG5leHQgd2luZG93IHBvc2l0aW9uLgogKi8KZnVuY3Rpb24gZGVmbGF0ZV9zbG93KHMsIGZsdXNoKSB7CiAgdmFyIGhhc2hfaGVhZDsgICAgICAgICAgLyogaGVhZCBvZiBoYXNoIGNoYWluICovCiAgdmFyIGJmbHVzaDsgICAgICAgICAgICAgIC8qIHNldCBpZiBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hlZCAqLwoKICB2YXIgbWF4X2luc2VydDsKCiAgLyogUHJvY2VzcyB0aGUgaW5wdXQgYmxvY2suICovCiAgZm9yICg7OykgewogICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgYWx3YXlzIGhhdmUgZW5vdWdoIGxvb2thaGVhZCwgZXhjZXB0CiAgICAgKiBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlLiBXZSBuZWVkIE1BWF9NQVRDSCBieXRlcwogICAgICogZm9yIHRoZSBuZXh0IG1hdGNoLCBwbHVzIE1JTl9NQVRDSCBieXRlcyB0byBpbnNlcnQgdGhlCiAgICAgKiBzdHJpbmcgZm9sbG93aW5nIHRoZSBuZXh0IG1hdGNoLgogICAgICovCiAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEKSB7CiAgICAgIGZpbGxfd2luZG93KHMpOwogICAgICBpZiAocy5sb29rYWhlYWQgPCBNSU5fTE9PS0FIRUFEICYmIGZsdXNoID09PSBaX05PX0ZMVVNIKSB7CiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgfQogICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHsgYnJlYWs7IH0gLyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi8KICAgIH0KCiAgICAvKiBJbnNlcnQgdGhlIHN0cmluZyB3aW5kb3dbc3Ryc3RhcnQgLi4gc3Ryc3RhcnQrMl0gaW4gdGhlCiAgICAgKiBkaWN0aW9uYXJ5LCBhbmQgc2V0IGhhc2hfaGVhZCB0byB0aGUgaGVhZCBvZiB0aGUgaGFzaCBjaGFpbjoKICAgICAqLwogICAgaGFzaF9oZWFkID0gMC8qTklMKi87CiAgICBpZiAocy5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7CiAgICAgIC8qKiogSU5TRVJUX1NUUklORyhzLCBzLnN0cnN0YXJ0LCBoYXNoX2hlYWQpOyAqKiovCiAgICAgIHMuaW5zX2ggPSAoKHMuaW5zX2ggPDwgcy5oYXNoX3NoaWZ0KSBeIHMud2luZG93W3Muc3Ryc3RhcnQgKyBNSU5fTUFUQ0ggLSAxXSkgJiBzLmhhc2hfbWFzazsKICAgICAgaGFzaF9oZWFkID0gcy5wcmV2W3Muc3Ryc3RhcnQgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07CiAgICAgIHMuaGVhZFtzLmluc19oXSA9IHMuc3Ryc3RhcnQ7CiAgICAgIC8qKiovCiAgICB9CgogICAgLyogRmluZCB0aGUgbG9uZ2VzdCBtYXRjaCwgZGlzY2FyZGluZyB0aG9zZSA8PSBwcmV2X2xlbmd0aC4KICAgICAqLwogICAgcy5wcmV2X2xlbmd0aCA9IHMubWF0Y2hfbGVuZ3RoOwogICAgcy5wcmV2X21hdGNoID0gcy5tYXRjaF9zdGFydDsKICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENILTE7CgogICAgaWYgKGhhc2hfaGVhZCAhPT0gMC8qTklMKi8gJiYgcy5wcmV2X2xlbmd0aCA8IHMubWF4X2xhenlfbWF0Y2ggJiYKICAgICAgICBzLnN0cnN0YXJ0IC0gaGFzaF9oZWFkIDw9IChzLndfc2l6ZS1NSU5fTE9PS0FIRUFEKS8qTUFYX0RJU1QocykqLykgewogICAgICAvKiBUbyBzaW1wbGlmeSB0aGUgY29kZSwgd2UgcHJldmVudCBtYXRjaGVzIHdpdGggdGhlIHN0cmluZwogICAgICAgKiBvZiB3aW5kb3cgaW5kZXggMCAoaW4gcGFydGljdWxhciB3ZSBoYXZlIHRvIGF2b2lkIGEgbWF0Y2gKICAgICAgICogb2YgdGhlIHN0cmluZyB3aXRoIGl0c2VsZiBhdCB0aGUgc3RhcnQgb2YgdGhlIGlucHV0IGZpbGUpLgogICAgICAgKi8KICAgICAgcy5tYXRjaF9sZW5ndGggPSBsb25nZXN0X21hdGNoKHMsIGhhc2hfaGVhZCk7CiAgICAgIC8qIGxvbmdlc3RfbWF0Y2goKSBzZXRzIG1hdGNoX3N0YXJ0ICovCgogICAgICBpZiAocy5tYXRjaF9sZW5ndGggPD0gNSAmJgogICAgICAgICAocy5zdHJhdGVneSA9PT0gWl9GSUxURVJFRCB8fCAocy5tYXRjaF9sZW5ndGggPT09IE1JTl9NQVRDSCAmJiBzLnN0cnN0YXJ0IC0gcy5tYXRjaF9zdGFydCA+IDQwOTYvKlRPT19GQVIqLykpKSB7CgogICAgICAgIC8qIElmIHByZXZfbWF0Y2ggaXMgYWxzbyBNSU5fTUFUQ0gsIG1hdGNoX3N0YXJ0IGlzIGdhcmJhZ2UKICAgICAgICAgKiBidXQgd2Ugd2lsbCBpZ25vcmUgdGhlIGN1cnJlbnQgbWF0Y2ggYW55d2F5LgogICAgICAgICAqLwogICAgICAgIHMubWF0Y2hfbGVuZ3RoID0gTUlOX01BVENILTE7CiAgICAgIH0KICAgIH0KICAgIC8qIElmIHRoZXJlIHdhcyBhIG1hdGNoIGF0IHRoZSBwcmV2aW91cyBzdGVwIGFuZCB0aGUgY3VycmVudAogICAgICogbWF0Y2ggaXMgbm90IGJldHRlciwgb3V0cHV0IHRoZSBwcmV2aW91cyBtYXRjaDoKICAgICAqLwogICAgaWYgKHMucHJldl9sZW5ndGggPj0gTUlOX01BVENIICYmIHMubWF0Y2hfbGVuZ3RoIDw9IHMucHJldl9sZW5ndGgpIHsKICAgICAgbWF4X2luc2VydCA9IHMuc3Ryc3RhcnQgKyBzLmxvb2thaGVhZCAtIE1JTl9NQVRDSDsKICAgICAgLyogRG8gbm90IGluc2VydCBzdHJpbmdzIGluIGhhc2ggdGFibGUgYmV5b25kIHRoaXMuICovCgogICAgICAvL2NoZWNrX21hdGNoKHMsIHMuc3Ryc3RhcnQtMSwgcy5wcmV2X21hdGNoLCBzLnByZXZfbGVuZ3RoKTsKCiAgICAgIC8qKipfdHJfdGFsbHlfZGlzdChzLCBzLnN0cnN0YXJ0IC0gMSAtIHMucHJldl9tYXRjaCwKICAgICAgICAgICAgICAgICAgICAgcy5wcmV2X2xlbmd0aCAtIE1JTl9NQVRDSCwgYmZsdXNoKTsqKiovCiAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCBzLnN0cnN0YXJ0IC0gMS0gcy5wcmV2X21hdGNoLCBzLnByZXZfbGVuZ3RoIC0gTUlOX01BVENIKTsKICAgICAgLyogSW5zZXJ0IGluIGhhc2ggdGFibGUgYWxsIHN0cmluZ3MgdXAgdG8gdGhlIGVuZCBvZiB0aGUgbWF0Y2guCiAgICAgICAqIHN0cnN0YXJ0LTEgYW5kIHN0cnN0YXJ0IGFyZSBhbHJlYWR5IGluc2VydGVkLiBJZiB0aGVyZSBpcyBub3QKICAgICAgICogZW5vdWdoIGxvb2thaGVhZCwgdGhlIGxhc3QgdHdvIHN0cmluZ3MgYXJlIG5vdCBpbnNlcnRlZCBpbgogICAgICAgKiB0aGUgaGFzaCB0YWJsZS4KICAgICAgICovCiAgICAgIHMubG9va2FoZWFkIC09IHMucHJldl9sZW5ndGgtMTsKICAgICAgcy5wcmV2X2xlbmd0aCAtPSAyOwogICAgICBkbyB7CiAgICAgICAgaWYgKCsrcy5zdHJzdGFydCA8PSBtYXhfaW5zZXJ0KSB7CiAgICAgICAgICAvKioqIElOU0VSVF9TVFJJTkcocywgcy5zdHJzdGFydCwgaGFzaF9oZWFkKTsgKioqLwogICAgICAgICAgcy5pbnNfaCA9ICgocy5pbnNfaCA8PCBzLmhhc2hfc2hpZnQpIF4gcy53aW5kb3dbcy5zdHJzdGFydCArIE1JTl9NQVRDSCAtIDFdKSAmIHMuaGFzaF9tYXNrOwogICAgICAgICAgaGFzaF9oZWFkID0gcy5wcmV2W3Muc3Ryc3RhcnQgJiBzLndfbWFza10gPSBzLmhlYWRbcy5pbnNfaF07CiAgICAgICAgICBzLmhlYWRbcy5pbnNfaF0gPSBzLnN0cnN0YXJ0OwogICAgICAgICAgLyoqKi8KICAgICAgICB9CiAgICAgIH0gd2hpbGUgKC0tcy5wcmV2X2xlbmd0aCAhPT0gMCk7CiAgICAgIHMubWF0Y2hfYXZhaWxhYmxlID0gMDsKICAgICAgcy5tYXRjaF9sZW5ndGggPSBNSU5fTUFUQ0gtMTsKICAgICAgcy5zdHJzdGFydCsrOwoKICAgICAgaWYgKGJmbHVzaCkgewogICAgICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi8KICAgICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICB9CiAgICAgICAgLyoqKi8KICAgICAgfQoKICAgIH0gZWxzZSBpZiAocy5tYXRjaF9hdmFpbGFibGUpIHsKICAgICAgLyogSWYgdGhlcmUgd2FzIG5vIG1hdGNoIGF0IHRoZSBwcmV2aW91cyBwb3NpdGlvbiwgb3V0cHV0IGEKICAgICAgICogc2luZ2xlIGxpdGVyYWwuIElmIHRoZXJlIHdhcyBhIG1hdGNoIGJ1dCB0aGUgY3VycmVudCBtYXRjaAogICAgICAgKiBpcyBsb25nZXIsIHRydW5jYXRlIHRoZSBwcmV2aW91cyBtYXRjaCB0byBhIHNpbmdsZSBsaXRlcmFsLgogICAgICAgKi8KICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsIiVjIiwgcy0+d2luZG93W3MtPnN0cnN0YXJ0LTFdKSk7CiAgICAgIC8qKiogX3RyX3RhbGx5X2xpdChzLCBzLndpbmRvd1tzLnN0cnN0YXJ0LTFdLCBiZmx1c2gpOyAqKiovCiAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0LTFdKTsKCiAgICAgIGlmIChiZmx1c2gpIHsKICAgICAgICAvKioqIEZMVVNIX0JMT0NLX09OTFkocywgMCkgKioqLwogICAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICAgIC8qKiovCiAgICAgIH0KICAgICAgcy5zdHJzdGFydCsrOwogICAgICBzLmxvb2thaGVhZC0tOwogICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8qIFRoZXJlIGlzIG5vIHByZXZpb3VzIG1hdGNoIHRvIGNvbXBhcmUgd2l0aCwgd2FpdCBmb3IKICAgICAgICogdGhlIG5leHQgc3RlcCB0byBkZWNpZGUuCiAgICAgICAqLwogICAgICBzLm1hdGNoX2F2YWlsYWJsZSA9IDE7CiAgICAgIHMuc3Ryc3RhcnQrKzsKICAgICAgcy5sb29rYWhlYWQtLTsKICAgIH0KICB9CiAgLy9Bc3NlcnQgKGZsdXNoICE9IFpfTk9fRkxVU0gsICJubyBmbHVzaD8iKTsKICBpZiAocy5tYXRjaF9hdmFpbGFibGUpIHsKICAgIC8vVHJhY2V2digoc3RkZXJyLCIlYyIsIHMtPndpbmRvd1tzLT5zdHJzdGFydC0xXSkpOwogICAgLyoqKiBfdHJfdGFsbHlfbGl0KHMsIHMud2luZG93W3Muc3Ryc3RhcnQtMV0sIGJmbHVzaCk7ICoqKi8KICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAwLCBzLndpbmRvd1tzLnN0cnN0YXJ0LTFdKTsKCiAgICBzLm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgfQogIHMuaW5zZXJ0ID0gcy5zdHJzdGFydCA8IE1JTl9NQVRDSC0xID8gcy5zdHJzdGFydCA6IE1JTl9NQVRDSC0xOwogIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gpIHsKICAgIC8qKiogRkxVU0hfQkxPQ0socywgMSk7ICoqKi8KICAgIGZsdXNoX2Jsb2NrX29ubHkocywgdHJ1ZSk7CiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7CiAgICB9CiAgICAvKioqLwogICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FOwogIH0KICBpZiAocy5sYXN0X2xpdCkgewogICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqLwogICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgfQogICAgLyoqKi8KICB9CgogIHJldHVybiBCU19CTE9DS19ET05FOwp9CgoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIEZvciBaX1JMRSwgc2ltcGx5IGxvb2sgZm9yIHJ1bnMgb2YgYnl0ZXMsIGdlbmVyYXRlIG1hdGNoZXMgb25seSBvZiBkaXN0YW5jZQogKiBvbmUuICBEbyBub3QgbWFpbnRhaW4gYSBoYXNoIHRhYmxlLiAgKEl0IHdpbGwgYmUgcmVnZW5lcmF0ZWQgaWYgdGhpcyBydW4gb2YKICogZGVmbGF0ZSBzd2l0Y2hlcyBhd2F5IGZyb20gWl9STEUuKQogKi8KZnVuY3Rpb24gZGVmbGF0ZV9ybGUocywgZmx1c2gpIHsKICB2YXIgYmZsdXNoOyAgICAgICAgICAgIC8qIHNldCBpZiBjdXJyZW50IGJsb2NrIG11c3QgYmUgZmx1c2hlZCAqLwogIHZhciBwcmV2OyAgICAgICAgICAgICAgLyogYnl0ZSBhdCBkaXN0YW5jZSBvbmUgdG8gbWF0Y2ggKi8KICB2YXIgc2Nhbiwgc3RyZW5kOyAgICAgIC8qIHNjYW4gZ29lcyB1cCB0byBzdHJlbmQgZm9yIGxlbmd0aCBvZiBydW4gKi8KCiAgdmFyIF93aW4gPSBzLndpbmRvdzsKCiAgZm9yICg7OykgewogICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgYWx3YXlzIGhhdmUgZW5vdWdoIGxvb2thaGVhZCwgZXhjZXB0CiAgICAgKiBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlLiBXZSBuZWVkIE1BWF9NQVRDSCBieXRlcwogICAgICogZm9yIHRoZSBsb25nZXN0IHJ1biwgcGx1cyBvbmUgZm9yIHRoZSB1bnJvbGxlZCBsb29wLgogICAgICovCiAgICBpZiAocy5sb29rYWhlYWQgPD0gTUFYX01BVENIKSB7CiAgICAgIGZpbGxfd2luZG93KHMpOwogICAgICBpZiAocy5sb29rYWhlYWQgPD0gTUFYX01BVENIICYmIGZsdXNoID09PSBaX05PX0ZMVVNIKSB7CiAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgfQogICAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHsgYnJlYWs7IH0gLyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi8KICAgIH0KCiAgICAvKiBTZWUgaG93IG1hbnkgdGltZXMgdGhlIHByZXZpb3VzIGJ5dGUgcmVwZWF0cyAqLwogICAgcy5tYXRjaF9sZW5ndGggPSAwOwogICAgaWYgKHMubG9va2FoZWFkID49IE1JTl9NQVRDSCAmJiBzLnN0cnN0YXJ0ID4gMCkgewogICAgICBzY2FuID0gcy5zdHJzdGFydCAtIDE7CiAgICAgIHByZXYgPSBfd2luW3NjYW5dOwogICAgICBpZiAocHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0pIHsKICAgICAgICBzdHJlbmQgPSBzLnN0cnN0YXJ0ICsgTUFYX01BVENIOwogICAgICAgIGRvIHsKICAgICAgICAgIC8qanNoaW50IG5vZW1wdHk6ZmFsc2UqLwogICAgICAgIH0gd2hpbGUgKHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYKICAgICAgICAgICAgICAgICBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmCiAgICAgICAgICAgICAgICAgcHJldiA9PT0gX3dpblsrK3NjYW5dICYmIHByZXYgPT09IF93aW5bKytzY2FuXSAmJgogICAgICAgICAgICAgICAgIHByZXYgPT09IF93aW5bKytzY2FuXSAmJiBwcmV2ID09PSBfd2luWysrc2Nhbl0gJiYKICAgICAgICAgICAgICAgICBzY2FuIDwgc3RyZW5kKTsKICAgICAgICBzLm1hdGNoX2xlbmd0aCA9IE1BWF9NQVRDSCAtIChzdHJlbmQgLSBzY2FuKTsKICAgICAgICBpZiAocy5tYXRjaF9sZW5ndGggPiBzLmxvb2thaGVhZCkgewogICAgICAgICAgcy5tYXRjaF9sZW5ndGggPSBzLmxvb2thaGVhZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy9Bc3NlcnQoc2NhbiA8PSBzLT53aW5kb3crKHVJbnQpKHMtPndpbmRvd19zaXplLTEpLCAid2lsZCBzY2FuIik7CiAgICB9CgogICAgLyogRW1pdCBtYXRjaCBpZiBoYXZlIHJ1biBvZiBNSU5fTUFUQ0ggb3IgbG9uZ2VyLCBlbHNlIGVtaXQgbGl0ZXJhbCAqLwogICAgaWYgKHMubWF0Y2hfbGVuZ3RoID49IE1JTl9NQVRDSCkgewogICAgICAvL2NoZWNrX21hdGNoKHMsIHMuc3Ryc3RhcnQsIHMuc3Ryc3RhcnQgLSAxLCBzLm1hdGNoX2xlbmd0aCk7CgogICAgICAvKioqIF90cl90YWxseV9kaXN0KHMsIDEsIHMubWF0Y2hfbGVuZ3RoIC0gTUlOX01BVENILCBiZmx1c2gpOyAqKiovCiAgICAgIGJmbHVzaCA9IHRyZWVzLl90cl90YWxseShzLCAxLCBzLm1hdGNoX2xlbmd0aCAtIE1JTl9NQVRDSCk7CgogICAgICBzLmxvb2thaGVhZCAtPSBzLm1hdGNoX2xlbmd0aDsKICAgICAgcy5zdHJzdGFydCArPSBzLm1hdGNoX2xlbmd0aDsKICAgICAgcy5tYXRjaF9sZW5ndGggPSAwOwogICAgfSBlbHNlIHsKICAgICAgLyogTm8gbWF0Y2gsIG91dHB1dCBhIGxpdGVyYWwgYnl0ZSAqLwogICAgICAvL1RyYWNldnYoKHN0ZGVyciwiJWMiLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnRdKSk7CiAgICAgIC8qKiogX3RyX3RhbGx5X2xpdChzLCBzLndpbmRvd1tzLnN0cnN0YXJ0XSwgYmZsdXNoKTsgKioqLwogICAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMCwgcy53aW5kb3dbcy5zdHJzdGFydF0pOwoKICAgICAgcy5sb29rYWhlYWQtLTsKICAgICAgcy5zdHJzdGFydCsrOwogICAgfQogICAgaWYgKGJmbHVzaCkgewogICAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDApOyAqKiovCiAgICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgIHJldHVybiBCU19ORUVEX01PUkU7CiAgICAgIH0KICAgICAgLyoqKi8KICAgIH0KICB9CiAgcy5pbnNlcnQgPSAwOwogIGlmIChmbHVzaCA9PT0gWl9GSU5JU0gpIHsKICAgIC8qKiogRkxVU0hfQkxPQ0socywgMSk7ICoqKi8KICAgIGZsdXNoX2Jsb2NrX29ubHkocywgdHJ1ZSk7CiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICByZXR1cm4gQlNfRklOSVNIX1NUQVJURUQ7CiAgICB9CiAgICAvKioqLwogICAgcmV0dXJuIEJTX0ZJTklTSF9ET05FOwogIH0KICBpZiAocy5sYXN0X2xpdCkgewogICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqLwogICAgZmx1c2hfYmxvY2tfb25seShzLCBmYWxzZSk7CiAgICBpZiAocy5zdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgfQogICAgLyoqKi8KICB9CiAgcmV0dXJuIEJTX0JMT0NLX0RPTkU7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBGb3IgWl9IVUZGTUFOX09OTFksIGRvIG5vdCBsb29rIGZvciBtYXRjaGVzLiAgRG8gbm90IG1haW50YWluIGEgaGFzaCB0YWJsZS4KICogKEl0IHdpbGwgYmUgcmVnZW5lcmF0ZWQgaWYgdGhpcyBydW4gb2YgZGVmbGF0ZSBzd2l0Y2hlcyBhd2F5IGZyb20gSHVmZm1hbi4pCiAqLwpmdW5jdGlvbiBkZWZsYXRlX2h1ZmYocywgZmx1c2gpIHsKICB2YXIgYmZsdXNoOyAgICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQgKi8KCiAgZm9yICg7OykgewogICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIGxpdGVyYWwgdG8gd3JpdGUuICovCiAgICBpZiAocy5sb29rYWhlYWQgPT09IDApIHsKICAgICAgZmlsbF93aW5kb3cocyk7CiAgICAgIGlmIChzLmxvb2thaGVhZCA9PT0gMCkgewogICAgICAgIGlmIChmbHVzaCA9PT0gWl9OT19GTFVTSCkgewogICAgICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7ICAgICAgLyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi8KICAgICAgfQogICAgfQoKICAgIC8qIE91dHB1dCBhIGxpdGVyYWwgYnl0ZSAqLwogICAgcy5tYXRjaF9sZW5ndGggPSAwOwogICAgLy9UcmFjZXZ2KChzdGRlcnIsIiVjIiwgcy0+d2luZG93W3MtPnN0cnN0YXJ0XSkpOwogICAgLyoqKiBfdHJfdGFsbHlfbGl0KHMsIHMud2luZG93W3Muc3Ryc3RhcnRdLCBiZmx1c2gpOyAqKiovCiAgICBiZmx1c2ggPSB0cmVlcy5fdHJfdGFsbHkocywgMCwgcy53aW5kb3dbcy5zdHJzdGFydF0pOwogICAgcy5sb29rYWhlYWQtLTsKICAgIHMuc3Ryc3RhcnQrKzsKICAgIGlmIChiZmx1c2gpIHsKICAgICAgLyoqKiBGTFVTSF9CTE9DSyhzLCAwKTsgKioqLwogICAgICBmbHVzaF9ibG9ja19vbmx5KHMsIGZhbHNlKTsKICAgICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICByZXR1cm4gQlNfTkVFRF9NT1JFOwogICAgICB9CiAgICAgIC8qKiovCiAgICB9CiAgfQogIHMuaW5zZXJ0ID0gMDsKICBpZiAoZmx1c2ggPT09IFpfRklOSVNIKSB7CiAgICAvKioqIEZMVVNIX0JMT0NLKHMsIDEpOyAqKiovCiAgICBmbHVzaF9ibG9ja19vbmx5KHMsIHRydWUpOwogICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgcmV0dXJuIEJTX0ZJTklTSF9TVEFSVEVEOwogICAgfQogICAgLyoqKi8KICAgIHJldHVybiBCU19GSU5JU0hfRE9ORTsKICB9CiAgaWYgKHMubGFzdF9saXQpIHsKICAgIC8qKiogRkxVU0hfQkxPQ0socywgMCk7ICoqKi8KICAgIGZsdXNoX2Jsb2NrX29ubHkocywgZmFsc2UpOwogICAgaWYgKHMuc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgcmV0dXJuIEJTX05FRURfTU9SRTsKICAgIH0KICAgIC8qKiovCiAgfQogIHJldHVybiBCU19CTE9DS19ET05FOwp9CgovKiBWYWx1ZXMgZm9yIG1heF9sYXp5X21hdGNoLCBnb29kX21hdGNoIGFuZCBtYXhfY2hhaW5fbGVuZ3RoLCBkZXBlbmRpbmcgb24KICogdGhlIGRlc2lyZWQgcGFjayBsZXZlbCAoMC4uOSkuIFRoZSB2YWx1ZXMgZ2l2ZW4gYmVsb3cgaGF2ZSBiZWVuIHR1bmVkIHRvCiAqIGV4Y2x1ZGUgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBmb3IgcGF0aG9sb2dpY2FsIGZpbGVzLiBCZXR0ZXIgdmFsdWVzIG1heSBiZQogKiBmb3VuZCBmb3Igc3BlY2lmaWMgZmlsZXMuCiAqLwp2YXIgQ29uZmlnID0gZnVuY3Rpb24gKGdvb2RfbGVuZ3RoLCBtYXhfbGF6eSwgbmljZV9sZW5ndGgsIG1heF9jaGFpbiwgZnVuYykgewogIHRoaXMuZ29vZF9sZW5ndGggPSBnb29kX2xlbmd0aDsKICB0aGlzLm1heF9sYXp5ID0gbWF4X2xhenk7CiAgdGhpcy5uaWNlX2xlbmd0aCA9IG5pY2VfbGVuZ3RoOwogIHRoaXMubWF4X2NoYWluID0gbWF4X2NoYWluOwogIHRoaXMuZnVuYyA9IGZ1bmM7Cn07Cgp2YXIgY29uZmlndXJhdGlvbl90YWJsZTsKCmNvbmZpZ3VyYXRpb25fdGFibGUgPSBbCiAgLyogICAgICBnb29kIGxhenkgbmljZSBjaGFpbiAqLwogIG5ldyBDb25maWcoMCwgMCwgMCwgMCwgZGVmbGF0ZV9zdG9yZWQpLCAgICAgICAgICAvKiAwIHN0b3JlIG9ubHkgKi8KICBuZXcgQ29uZmlnKDQsIDQsIDgsIDQsIGRlZmxhdGVfZmFzdCksICAgICAgICAgICAgLyogMSBtYXggc3BlZWQsIG5vIGxhenkgbWF0Y2hlcyAqLwogIG5ldyBDb25maWcoNCwgNSwgMTYsIDgsIGRlZmxhdGVfZmFzdCksICAgICAgICAgICAvKiAyICovCiAgbmV3IENvbmZpZyg0LCA2LCAzMiwgMzIsIGRlZmxhdGVfZmFzdCksICAgICAgICAgIC8qIDMgKi8KCiAgbmV3IENvbmZpZyg0LCA0LCAxNiwgMTYsIGRlZmxhdGVfc2xvdyksICAgICAgICAgIC8qIDQgbGF6eSBtYXRjaGVzICovCiAgbmV3IENvbmZpZyg4LCAxNiwgMzIsIDMyLCBkZWZsYXRlX3Nsb3cpLCAgICAgICAgIC8qIDUgKi8KICBuZXcgQ29uZmlnKDgsIDE2LCAxMjgsIDEyOCwgZGVmbGF0ZV9zbG93KSwgICAgICAgLyogNiAqLwogIG5ldyBDb25maWcoOCwgMzIsIDEyOCwgMjU2LCBkZWZsYXRlX3Nsb3cpLCAgICAgICAvKiA3ICovCiAgbmV3IENvbmZpZygzMiwgMTI4LCAyNTgsIDEwMjQsIGRlZmxhdGVfc2xvdyksICAgIC8qIDggKi8KICBuZXcgQ29uZmlnKDMyLCAyNTgsIDI1OCwgNDA5NiwgZGVmbGF0ZV9zbG93KSAgICAgLyogOSBtYXggY29tcHJlc3Npb24gKi8KXTsKCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogSW5pdGlhbGl6ZSB0aGUgImxvbmdlc3QgbWF0Y2giIHJvdXRpbmVzIGZvciBhIG5ldyB6bGliIHN0cmVhbQogKi8KZnVuY3Rpb24gbG1faW5pdChzKSB7CiAgcy53aW5kb3dfc2l6ZSA9IDIgKiBzLndfc2l6ZTsKCiAgLyoqKiBDTEVBUl9IQVNIKHMpOyAqKiovCiAgemVybyhzLmhlYWQpOyAvLyBGaWxsIHdpdGggTklMICg9IDApOwoKICAvKiBTZXQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzOgogICAqLwogIHMubWF4X2xhenlfbWF0Y2ggPSBjb25maWd1cmF0aW9uX3RhYmxlW3MubGV2ZWxdLm1heF9sYXp5OwogIHMuZ29vZF9tYXRjaCA9IGNvbmZpZ3VyYXRpb25fdGFibGVbcy5sZXZlbF0uZ29vZF9sZW5ndGg7CiAgcy5uaWNlX21hdGNoID0gY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5uaWNlX2xlbmd0aDsKICBzLm1heF9jaGFpbl9sZW5ndGggPSBjb25maWd1cmF0aW9uX3RhYmxlW3MubGV2ZWxdLm1heF9jaGFpbjsKCiAgcy5zdHJzdGFydCA9IDA7CiAgcy5ibG9ja19zdGFydCA9IDA7CiAgcy5sb29rYWhlYWQgPSAwOwogIHMuaW5zZXJ0ID0gMDsKICBzLm1hdGNoX2xlbmd0aCA9IHMucHJldl9sZW5ndGggPSBNSU5fTUFUQ0ggLSAxOwogIHMubWF0Y2hfYXZhaWxhYmxlID0gMDsKICBzLmluc19oID0gMDsKfQoKCmZ1bmN0aW9uIERlZmxhdGVTdGF0ZSgpIHsKICB0aGlzLnN0cm0gPSBudWxsOyAgICAgICAgICAgIC8qIHBvaW50ZXIgYmFjayB0byB0aGlzIHpsaWIgc3RyZWFtICovCiAgdGhpcy5zdGF0dXMgPSAwOyAgICAgICAgICAgIC8qIGFzIHRoZSBuYW1lIGltcGxpZXMgKi8KICB0aGlzLnBlbmRpbmdfYnVmID0gbnVsbDsgICAgICAvKiBvdXRwdXQgc3RpbGwgcGVuZGluZyAqLwogIHRoaXMucGVuZGluZ19idWZfc2l6ZSA9IDA7ICAvKiBzaXplIG9mIHBlbmRpbmdfYnVmICovCiAgdGhpcy5wZW5kaW5nX291dCA9IDA7ICAgICAgIC8qIG5leHQgcGVuZGluZyBieXRlIHRvIG91dHB1dCB0byB0aGUgc3RyZWFtICovCiAgdGhpcy5wZW5kaW5nID0gMDsgICAgICAgICAgIC8qIG5iIG9mIGJ5dGVzIGluIHRoZSBwZW5kaW5nIGJ1ZmZlciAqLwogIHRoaXMud3JhcCA9IDA7ICAgICAgICAgICAgICAvKiBiaXQgMCB0cnVlIGZvciB6bGliLCBiaXQgMSB0cnVlIGZvciBnemlwICovCiAgdGhpcy5nemhlYWQgPSBudWxsOyAgICAgICAgIC8qIGd6aXAgaGVhZGVyIGluZm9ybWF0aW9uIHRvIHdyaXRlICovCiAgdGhpcy5nemluZGV4ID0gMDsgICAgICAgICAgIC8qIHdoZXJlIGluIGV4dHJhLCBuYW1lLCBvciBjb21tZW50ICovCiAgdGhpcy5tZXRob2QgPSBaX0RFRkxBVEVEOyAvKiBjYW4gb25seSBiZSBERUZMQVRFRCAqLwogIHRoaXMubGFzdF9mbHVzaCA9IC0xOyAgIC8qIHZhbHVlIG9mIGZsdXNoIHBhcmFtIGZvciBwcmV2aW91cyBkZWZsYXRlIGNhbGwgKi8KCiAgdGhpcy53X3NpemUgPSAwOyAgLyogTFo3NyB3aW5kb3cgc2l6ZSAoMzJLIGJ5IGRlZmF1bHQpICovCiAgdGhpcy53X2JpdHMgPSAwOyAgLyogbG9nMih3X3NpemUpICAoOC4uMTYpICovCiAgdGhpcy53X21hc2sgPSAwOyAgLyogd19zaXplIC0gMSAqLwoKICB0aGlzLndpbmRvdyA9IG51bGw7CiAgLyogU2xpZGluZyB3aW5kb3cuIElucHV0IGJ5dGVzIGFyZSByZWFkIGludG8gdGhlIHNlY29uZCBoYWxmIG9mIHRoZSB3aW5kb3csCiAgICogYW5kIG1vdmUgdG8gdGhlIGZpcnN0IGhhbGYgbGF0ZXIgdG8ga2VlcCBhIGRpY3Rpb25hcnkgb2YgYXQgbGVhc3Qgd1NpemUKICAgKiBieXRlcy4gV2l0aCB0aGlzIG9yZ2FuaXphdGlvbiwgbWF0Y2hlcyBhcmUgbGltaXRlZCB0byBhIGRpc3RhbmNlIG9mCiAgICogd1NpemUtTUFYX01BVENIIGJ5dGVzLCBidXQgdGhpcyBlbnN1cmVzIHRoYXQgSU8gaXMgYWx3YXlzCiAgICogcGVyZm9ybWVkIHdpdGggYSBsZW5ndGggbXVsdGlwbGUgb2YgdGhlIGJsb2NrIHNpemUuCiAgICovCgogIHRoaXMud2luZG93X3NpemUgPSAwOwogIC8qIEFjdHVhbCBzaXplIG9mIHdpbmRvdzogMip3U2l6ZSwgZXhjZXB0IHdoZW4gdGhlIHVzZXIgaW5wdXQgYnVmZmVyCiAgICogaXMgZGlyZWN0bHkgdXNlZCBhcyBzbGlkaW5nIHdpbmRvdy4KICAgKi8KCiAgdGhpcy5wcmV2ID0gbnVsbDsKICAvKiBMaW5rIHRvIG9sZGVyIHN0cmluZyB3aXRoIHNhbWUgaGFzaCBpbmRleC4gVG8gbGltaXQgdGhlIHNpemUgb2YgdGhpcwogICAqIGFycmF5IHRvIDY0SywgdGhpcyBsaW5rIGlzIG1haW50YWluZWQgb25seSBmb3IgdGhlIGxhc3QgMzJLIHN0cmluZ3MuCiAgICogQW4gaW5kZXggaW4gdGhpcyBhcnJheSBpcyB0aHVzIGEgd2luZG93IGluZGV4IG1vZHVsbyAzMksuCiAgICovCgogIHRoaXMuaGVhZCA9IG51bGw7ICAgLyogSGVhZHMgb2YgdGhlIGhhc2ggY2hhaW5zIG9yIE5JTC4gKi8KCiAgdGhpcy5pbnNfaCA9IDA7ICAgICAgIC8qIGhhc2ggaW5kZXggb2Ygc3RyaW5nIHRvIGJlIGluc2VydGVkICovCiAgdGhpcy5oYXNoX3NpemUgPSAwOyAgIC8qIG51bWJlciBvZiBlbGVtZW50cyBpbiBoYXNoIHRhYmxlICovCiAgdGhpcy5oYXNoX2JpdHMgPSAwOyAgIC8qIGxvZzIoaGFzaF9zaXplKSAqLwogIHRoaXMuaGFzaF9tYXNrID0gMDsgICAvKiBoYXNoX3NpemUtMSAqLwoKICB0aGlzLmhhc2hfc2hpZnQgPSAwOwogIC8qIE51bWJlciBvZiBiaXRzIGJ5IHdoaWNoIGluc19oIG11c3QgYmUgc2hpZnRlZCBhdCBlYWNoIGlucHV0CiAgICogc3RlcC4gSXQgbXVzdCBiZSBzdWNoIHRoYXQgYWZ0ZXIgTUlOX01BVENIIHN0ZXBzLCB0aGUgb2xkZXN0CiAgICogYnl0ZSBubyBsb25nZXIgdGFrZXMgcGFydCBpbiB0aGUgaGFzaCBrZXksIHRoYXQgaXM6CiAgICogICBoYXNoX3NoaWZ0ICogTUlOX01BVENIID49IGhhc2hfYml0cwogICAqLwoKICB0aGlzLmJsb2NrX3N0YXJ0ID0gMDsKICAvKiBXaW5kb3cgcG9zaXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBvdXRwdXQgYmxvY2suIEdldHMKICAgKiBuZWdhdGl2ZSB3aGVuIHRoZSB3aW5kb3cgaXMgbW92ZWQgYmFja3dhcmRzLgogICAqLwoKICB0aGlzLm1hdGNoX2xlbmd0aCA9IDA7ICAgICAgLyogbGVuZ3RoIG9mIGJlc3QgbWF0Y2ggKi8KICB0aGlzLnByZXZfbWF0Y2ggPSAwOyAgICAgICAgLyogcHJldmlvdXMgbWF0Y2ggKi8KICB0aGlzLm1hdGNoX2F2YWlsYWJsZSA9IDA7ICAgLyogc2V0IGlmIHByZXZpb3VzIG1hdGNoIGV4aXN0cyAqLwogIHRoaXMuc3Ryc3RhcnQgPSAwOyAgICAgICAgICAvKiBzdGFydCBvZiBzdHJpbmcgdG8gaW5zZXJ0ICovCiAgdGhpcy5tYXRjaF9zdGFydCA9IDA7ICAgICAgIC8qIHN0YXJ0IG9mIG1hdGNoaW5nIHN0cmluZyAqLwogIHRoaXMubG9va2FoZWFkID0gMDsgICAgICAgICAvKiBudW1iZXIgb2YgdmFsaWQgYnl0ZXMgYWhlYWQgaW4gd2luZG93ICovCgogIHRoaXMucHJldl9sZW5ndGggPSAwOwogIC8qIExlbmd0aCBvZiB0aGUgYmVzdCBtYXRjaCBhdCBwcmV2aW91cyBzdGVwLiBNYXRjaGVzIG5vdCBncmVhdGVyIHRoYW4gdGhpcwogICAqIGFyZSBkaXNjYXJkZWQuIFRoaXMgaXMgdXNlZCBpbiB0aGUgbGF6eSBtYXRjaCBldmFsdWF0aW9uLgogICAqLwoKICB0aGlzLm1heF9jaGFpbl9sZW5ndGggPSAwOwogIC8qIFRvIHNwZWVkIHVwIGRlZmxhdGlvbiwgaGFzaCBjaGFpbnMgYXJlIG5ldmVyIHNlYXJjaGVkIGJleW9uZCB0aGlzCiAgICogbGVuZ3RoLiAgQSBoaWdoZXIgbGltaXQgaW1wcm92ZXMgY29tcHJlc3Npb24gcmF0aW8gYnV0IGRlZ3JhZGVzIHRoZQogICAqIHNwZWVkLgogICAqLwoKICB0aGlzLm1heF9sYXp5X21hdGNoID0gMDsKICAvKiBBdHRlbXB0IHRvIGZpbmQgYSBiZXR0ZXIgbWF0Y2ggb25seSB3aGVuIHRoZSBjdXJyZW50IG1hdGNoIGlzIHN0cmljdGx5CiAgICogc21hbGxlciB0aGFuIHRoaXMgdmFsdWUuIFRoaXMgbWVjaGFuaXNtIGlzIHVzZWQgb25seSBmb3IgY29tcHJlc3Npb24KICAgKiBsZXZlbHMgPj0gNC4KICAgKi8KICAvLyBUaGF0J3MgYWxpYXMgdG8gbWF4X2xhenlfbWF0Y2gsIGRvbid0IHVzZSBkaXJlY3RseQogIC8vdGhpcy5tYXhfaW5zZXJ0X2xlbmd0aCA9IDA7CiAgLyogSW5zZXJ0IG5ldyBzdHJpbmdzIGluIHRoZSBoYXNoIHRhYmxlIG9ubHkgaWYgdGhlIG1hdGNoIGxlbmd0aCBpcyBub3QKICAgKiBncmVhdGVyIHRoYW4gdGhpcyBsZW5ndGguIFRoaXMgc2F2ZXMgdGltZSBidXQgZGVncmFkZXMgY29tcHJlc3Npb24uCiAgICogbWF4X2luc2VydF9sZW5ndGggaXMgdXNlZCBvbmx5IGZvciBjb21wcmVzc2lvbiBsZXZlbHMgPD0gMy4KICAgKi8KCiAgdGhpcy5sZXZlbCA9IDA7ICAgICAvKiBjb21wcmVzc2lvbiBsZXZlbCAoMS4uOSkgKi8KICB0aGlzLnN0cmF0ZWd5ID0gMDsgIC8qIGZhdm9yIG9yIGZvcmNlIEh1ZmZtYW4gY29kaW5nKi8KCiAgdGhpcy5nb29kX21hdGNoID0gMDsKICAvKiBVc2UgYSBmYXN0ZXIgc2VhcmNoIHdoZW4gdGhlIHByZXZpb3VzIG1hdGNoIGlzIGxvbmdlciB0aGFuIHRoaXMgKi8KCiAgdGhpcy5uaWNlX21hdGNoID0gMDsgLyogU3RvcCBzZWFyY2hpbmcgd2hlbiBjdXJyZW50IG1hdGNoIGV4Y2VlZHMgdGhpcyAqLwoKICAgICAgICAgICAgICAvKiB1c2VkIGJ5IHRyZWVzLmM6ICovCgogIC8qIERpZG4ndCB1c2UgY3RfZGF0YSB0eXBlZGVmIGJlbG93IHRvIHN1cHByZXNzIGNvbXBpbGVyIHdhcm5pbmcgKi8KCiAgLy8gc3RydWN0IGN0X2RhdGFfcyBkeW5fbHRyZWVbSEVBUF9TSVpFXTsgICAvKiBsaXRlcmFsIGFuZCBsZW5ndGggdHJlZSAqLwogIC8vIHN0cnVjdCBjdF9kYXRhX3MgZHluX2R0cmVlWzIqRF9DT0RFUysxXTsgLyogZGlzdGFuY2UgdHJlZSAqLwogIC8vIHN0cnVjdCBjdF9kYXRhX3MgYmxfdHJlZVsyKkJMX0NPREVTKzFdOyAgLyogSHVmZm1hbiB0cmVlIGZvciBiaXQgbGVuZ3RocyAqLwoKICAvLyBVc2UgZmxhdCBhcnJheSBvZiBET1VCTEUgc2l6ZSwgd2l0aCBpbnRlcmxlYXZlZCBmYXRhLAogIC8vIGJlY2F1c2UgSlMgZG9lcyBub3Qgc3VwcG9ydCBlZmZlY3RpdmUKICB0aGlzLmR5bl9sdHJlZSAgPSBuZXcgdXRpbHMuQnVmMTYoSEVBUF9TSVpFICogMik7CiAgdGhpcy5keW5fZHRyZWUgID0gbmV3IHV0aWxzLkJ1ZjE2KCgyKkRfQ09ERVMrMSkgKiAyKTsKICB0aGlzLmJsX3RyZWUgICAgPSBuZXcgdXRpbHMuQnVmMTYoKDIqQkxfQ09ERVMrMSkgKiAyKTsKICB6ZXJvKHRoaXMuZHluX2x0cmVlKTsKICB6ZXJvKHRoaXMuZHluX2R0cmVlKTsKICB6ZXJvKHRoaXMuYmxfdHJlZSk7CgogIHRoaXMubF9kZXNjICAgPSBudWxsOyAgICAgICAgIC8qIGRlc2MuIGZvciBsaXRlcmFsIHRyZWUgKi8KICB0aGlzLmRfZGVzYyAgID0gbnVsbDsgICAgICAgICAvKiBkZXNjLiBmb3IgZGlzdGFuY2UgdHJlZSAqLwogIHRoaXMuYmxfZGVzYyAgPSBudWxsOyAgICAgICAgIC8qIGRlc2MuIGZvciBiaXQgbGVuZ3RoIHRyZWUgKi8KCiAgLy91c2ggYmxfY291bnRbTUFYX0JJVFMrMV07CiAgdGhpcy5ibF9jb3VudCA9IG5ldyB1dGlscy5CdWYxNihNQVhfQklUUysxKTsKICAvKiBudW1iZXIgb2YgY29kZXMgYXQgZWFjaCBiaXQgbGVuZ3RoIGZvciBhbiBvcHRpbWFsIHRyZWUgKi8KCiAgLy9pbnQgaGVhcFsyKkxfQ09ERVMrMV07ICAgICAgLyogaGVhcCB1c2VkIHRvIGJ1aWxkIHRoZSBIdWZmbWFuIHRyZWVzICovCiAgdGhpcy5oZWFwID0gbmV3IHV0aWxzLkJ1ZjE2KDIqTF9DT0RFUysxKTsgIC8qIGhlYXAgdXNlZCB0byBidWlsZCB0aGUgSHVmZm1hbiB0cmVlcyAqLwogIHplcm8odGhpcy5oZWFwKTsKCiAgdGhpcy5oZWFwX2xlbiA9IDA7ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBoZWFwICovCiAgdGhpcy5oZWFwX21heCA9IDA7ICAgICAgICAgICAgICAgLyogZWxlbWVudCBvZiBsYXJnZXN0IGZyZXF1ZW5jeSAqLwogIC8qIFRoZSBzb25zIG9mIGhlYXBbbl0gYXJlIGhlYXBbMipuXSBhbmQgaGVhcFsyKm4rMV0uIGhlYXBbMF0gaXMgbm90IHVzZWQuCiAgICogVGhlIHNhbWUgaGVhcCBhcnJheSBpcyB1c2VkIHRvIGJ1aWxkIGFsbCB0cmVlcy4KICAgKi8KCiAgdGhpcy5kZXB0aCA9IG5ldyB1dGlscy5CdWYxNigyKkxfQ09ERVMrMSk7IC8vdWNoIGRlcHRoWzIqTF9DT0RFUysxXTsKICB6ZXJvKHRoaXMuZGVwdGgpOwogIC8qIERlcHRoIG9mIGVhY2ggc3VidHJlZSB1c2VkIGFzIHRpZSBicmVha2VyIGZvciB0cmVlcyBvZiBlcXVhbCBmcmVxdWVuY3kKICAgKi8KCiAgdGhpcy5sX2J1ZiA9IDA7ICAgICAgICAgIC8qIGJ1ZmZlciBpbmRleCBmb3IgbGl0ZXJhbHMgb3IgbGVuZ3RocyAqLwoKICB0aGlzLmxpdF9idWZzaXplID0gMDsKICAvKiBTaXplIG9mIG1hdGNoIGJ1ZmZlciBmb3IgbGl0ZXJhbHMvbGVuZ3Rocy4gIFRoZXJlIGFyZSA0IHJlYXNvbnMgZm9yCiAgICogbGltaXRpbmcgbGl0X2J1ZnNpemUgdG8gNjRLOgogICAqICAgLSBmcmVxdWVuY2llcyBjYW4gYmUga2VwdCBpbiAxNiBiaXQgY291bnRlcnMKICAgKiAgIC0gaWYgY29tcHJlc3Npb24gaXMgbm90IHN1Y2Nlc3NmdWwgZm9yIHRoZSBmaXJzdCBibG9jaywgYWxsIGlucHV0CiAgICogICAgIGRhdGEgaXMgc3RpbGwgaW4gdGhlIHdpbmRvdyBzbyB3ZSBjYW4gc3RpbGwgZW1pdCBhIHN0b3JlZCBibG9jayBldmVuCiAgICogICAgIHdoZW4gaW5wdXQgY29tZXMgZnJvbSBzdGFuZGFyZCBpbnB1dC4gIChUaGlzIGNhbiBhbHNvIGJlIGRvbmUgZm9yCiAgICogICAgIGFsbCBibG9ja3MgaWYgbGl0X2J1ZnNpemUgaXMgbm90IGdyZWF0ZXIgdGhhbiAzMksuKQogICAqICAgLSBpZiBjb21wcmVzc2lvbiBpcyBub3Qgc3VjY2Vzc2Z1bCBmb3IgYSBmaWxlIHNtYWxsZXIgdGhhbiA2NEssIHdlIGNhbgogICAqICAgICBldmVuIGVtaXQgYSBzdG9yZWQgZmlsZSBpbnN0ZWFkIG9mIGEgc3RvcmVkIGJsb2NrIChzYXZpbmcgNSBieXRlcykuCiAgICogICAgIFRoaXMgaXMgYXBwbGljYWJsZSBvbmx5IGZvciB6aXAgKG5vdCBnemlwIG9yIHpsaWIpLgogICAqICAgLSBjcmVhdGluZyBuZXcgSHVmZm1hbiB0cmVlcyBsZXNzIGZyZXF1ZW50bHkgbWF5IG5vdCBwcm92aWRlIGZhc3QKICAgKiAgICAgYWRhcHRhdGlvbiB0byBjaGFuZ2VzIGluIHRoZSBpbnB1dCBkYXRhIHN0YXRpc3RpY3MuIChUYWtlIGZvcgogICAqICAgICBleGFtcGxlIGEgYmluYXJ5IGZpbGUgd2l0aCBwb29ybHkgY29tcHJlc3NpYmxlIGNvZGUgZm9sbG93ZWQgYnkKICAgKiAgICAgYSBoaWdobHkgY29tcHJlc3NpYmxlIHN0cmluZyB0YWJsZS4pIFNtYWxsZXIgYnVmZmVyIHNpemVzIGdpdmUKICAgKiAgICAgZmFzdCBhZGFwdGF0aW9uIGJ1dCBoYXZlIG9mIGNvdXJzZSB0aGUgb3ZlcmhlYWQgb2YgdHJhbnNtaXR0aW5nCiAgICogICAgIHRyZWVzIG1vcmUgZnJlcXVlbnRseS4KICAgKiAgIC0gSSBjYW4ndCBjb3VudCBhYm92ZSA0CiAgICovCgogIHRoaXMubGFzdF9saXQgPSAwOyAgICAgIC8qIHJ1bm5pbmcgaW5kZXggaW4gbF9idWYgKi8KCiAgdGhpcy5kX2J1ZiA9IDA7CiAgLyogQnVmZmVyIGluZGV4IGZvciBkaXN0YW5jZXMuIFRvIHNpbXBsaWZ5IHRoZSBjb2RlLCBkX2J1ZiBhbmQgbF9idWYgaGF2ZQogICAqIHRoZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cy4gVG8gdXNlIGRpZmZlcmVudCBsZW5ndGhzLCBhbiBleHRyYSBmbGFnCiAgICogYXJyYXkgd291bGQgYmUgbmVjZXNzYXJ5LgogICAqLwoKICB0aGlzLm9wdF9sZW4gPSAwOyAgICAgICAvKiBiaXQgbGVuZ3RoIG9mIGN1cnJlbnQgYmxvY2sgd2l0aCBvcHRpbWFsIHRyZWVzICovCiAgdGhpcy5zdGF0aWNfbGVuID0gMDsgICAgLyogYml0IGxlbmd0aCBvZiBjdXJyZW50IGJsb2NrIHdpdGggc3RhdGljIHRyZWVzICovCiAgdGhpcy5tYXRjaGVzID0gMDsgICAgICAgLyogbnVtYmVyIG9mIHN0cmluZyBtYXRjaGVzIGluIGN1cnJlbnQgYmxvY2sgKi8KICB0aGlzLmluc2VydCA9IDA7ICAgICAgICAvKiBieXRlcyBhdCBlbmQgb2Ygd2luZG93IGxlZnQgdG8gaW5zZXJ0ICovCgoKICB0aGlzLmJpX2J1ZiA9IDA7CiAgLyogT3V0cHV0IGJ1ZmZlci4gYml0cyBhcmUgaW5zZXJ0ZWQgc3RhcnRpbmcgYXQgdGhlIGJvdHRvbSAobGVhc3QKICAgKiBzaWduaWZpY2FudCBiaXRzKS4KICAgKi8KICB0aGlzLmJpX3ZhbGlkID0gMDsKICAvKiBOdW1iZXIgb2YgdmFsaWQgYml0cyBpbiBiaV9idWYuICBBbGwgYml0cyBhYm92ZSB0aGUgbGFzdCB2YWxpZCBiaXQKICAgKiBhcmUgYWx3YXlzIHplcm8uCiAgICovCgogIC8vIFVzZWQgZm9yIHdpbmRvdyBtZW1vcnkgaW5pdC4gV2Ugc2FmZWx5IGlnbm9yZSBpdCBmb3IgSlMuIFRoYXQgbWFrZXMKICAvLyBzZW5zZSBvbmx5IGZvciBwb2ludGVycyBhbmQgbWVtb3J5IGNoZWNrIHRvb2xzLgogIC8vdGhpcy5oaWdoX3dhdGVyID0gMDsKICAvKiBIaWdoIHdhdGVyIG1hcmsgb2Zmc2V0IGluIHdpbmRvdyBmb3IgaW5pdGlhbGl6ZWQgYnl0ZXMgLS0gYnl0ZXMgYWJvdmUKICAgKiB0aGlzIGFyZSBzZXQgdG8gemVybyBpbiBvcmRlciB0byBhdm9pZCBtZW1vcnkgY2hlY2sgd2FybmluZ3Mgd2hlbgogICAqIGxvbmdlc3QgbWF0Y2ggcm91dGluZXMgYWNjZXNzIGJ5dGVzIHBhc3QgdGhlIGlucHV0LiAgVGhpcyBpcyB0aGVuCiAgICogdXBkYXRlZCB0byB0aGUgbmV3IGhpZ2ggd2F0ZXIgbWFyay4KICAgKi8KfQoKCmZ1bmN0aW9uIGRlZmxhdGVSZXNldEtlZXAoc3RybSkgewogIHZhciBzOwoKICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsKICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpOwogIH0KCiAgc3RybS50b3RhbF9pbiA9IHN0cm0udG90YWxfb3V0ID0gMDsKICBzdHJtLmRhdGFfdHlwZSA9IFpfVU5LTk9XTjsKCiAgcyA9IHN0cm0uc3RhdGU7CiAgcy5wZW5kaW5nID0gMDsKICBzLnBlbmRpbmdfb3V0ID0gMDsKCiAgaWYgKHMud3JhcCA8IDApIHsKICAgIHMud3JhcCA9IC1zLndyYXA7CiAgICAvKiB3YXMgbWFkZSBuZWdhdGl2ZSBieSBkZWZsYXRlKC4uLiwgWl9GSU5JU0gpOyAqLwogIH0KICBzLnN0YXR1cyA9IChzLndyYXAgPyBJTklUX1NUQVRFIDogQlVTWV9TVEFURSk7CiAgc3RybS5hZGxlciA9IChzLndyYXAgPT09IDIpID8KICAgIDAgIC8vIGNyYzMyKDAsIFpfTlVMTCwgMCkKICA6CiAgICAxOyAvLyBhZGxlcjMyKDAsIFpfTlVMTCwgMCkKICBzLmxhc3RfZmx1c2ggPSBaX05PX0ZMVVNIOwogIHRyZWVzLl90cl9pbml0KHMpOwogIHJldHVybiBaX09LOwp9CgoKZnVuY3Rpb24gZGVmbGF0ZVJlc2V0KHN0cm0pIHsKICB2YXIgcmV0ID0gZGVmbGF0ZVJlc2V0S2VlcChzdHJtKTsKICBpZiAocmV0ID09PSBaX09LKSB7CiAgICBsbV9pbml0KHN0cm0uc3RhdGUpOwogIH0KICByZXR1cm4gcmV0Owp9CgoKZnVuY3Rpb24gZGVmbGF0ZVNldEhlYWRlcihzdHJtLCBoZWFkKSB7CiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfQogIGlmIChzdHJtLnN0YXRlLndyYXAgIT09IDIpIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOyB9CiAgc3RybS5zdGF0ZS5nemhlYWQgPSBoZWFkOwogIHJldHVybiBaX09LOwp9CgoKZnVuY3Rpb24gZGVmbGF0ZUluaXQyKHN0cm0sIGxldmVsLCBtZXRob2QsIHdpbmRvd0JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSkgewogIGlmICghc3RybSkgeyAvLyA9PT0gWl9OVUxMCiAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgfQogIHZhciB3cmFwID0gMTsKCiAgaWYgKGxldmVsID09PSBaX0RFRkFVTFRfQ09NUFJFU1NJT04pIHsKICAgIGxldmVsID0gNjsKICB9CgogIGlmICh3aW5kb3dCaXRzIDwgMCkgeyAvKiBzdXBwcmVzcyB6bGliIHdyYXBwZXIgKi8KICAgIHdyYXAgPSAwOwogICAgd2luZG93Qml0cyA9IC13aW5kb3dCaXRzOwogIH0KCiAgZWxzZSBpZiAod2luZG93Qml0cyA+IDE1KSB7CiAgICB3cmFwID0gMjsgICAgICAgICAgIC8qIHdyaXRlIGd6aXAgd3JhcHBlciBpbnN0ZWFkICovCiAgICB3aW5kb3dCaXRzIC09IDE2OwogIH0KCgogIGlmIChtZW1MZXZlbCA8IDEgfHwgbWVtTGV2ZWwgPiBNQVhfTUVNX0xFVkVMIHx8IG1ldGhvZCAhPT0gWl9ERUZMQVRFRCB8fAogICAgd2luZG93Qml0cyA8IDggfHwgd2luZG93Qml0cyA+IDE1IHx8IGxldmVsIDwgMCB8fCBsZXZlbCA+IDkgfHwKICAgIHN0cmF0ZWd5IDwgMCB8fCBzdHJhdGVneSA+IFpfRklYRUQpIHsKICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpOwogIH0KCgogIGlmICh3aW5kb3dCaXRzID09PSA4KSB7CiAgICB3aW5kb3dCaXRzID0gOTsKICB9CiAgLyogdW50aWwgMjU2LWJ5dGUgd2luZG93IGJ1ZyBmaXhlZCAqLwoKICB2YXIgcyA9IG5ldyBEZWZsYXRlU3RhdGUoKTsKCiAgc3RybS5zdGF0ZSA9IHM7CiAgcy5zdHJtID0gc3RybTsKCiAgcy53cmFwID0gd3JhcDsKICBzLmd6aGVhZCA9IG51bGw7CiAgcy53X2JpdHMgPSB3aW5kb3dCaXRzOwogIHMud19zaXplID0gMSA8PCBzLndfYml0czsKICBzLndfbWFzayA9IHMud19zaXplIC0gMTsKCiAgcy5oYXNoX2JpdHMgPSBtZW1MZXZlbCArIDc7CiAgcy5oYXNoX3NpemUgPSAxIDw8IHMuaGFzaF9iaXRzOwogIHMuaGFzaF9tYXNrID0gcy5oYXNoX3NpemUgLSAxOwogIHMuaGFzaF9zaGlmdCA9IH5+KChzLmhhc2hfYml0cyArIE1JTl9NQVRDSCAtIDEpIC8gTUlOX01BVENIKTsKCiAgcy53aW5kb3cgPSBuZXcgdXRpbHMuQnVmOChzLndfc2l6ZSAqIDIpOwogIHMuaGVhZCA9IG5ldyB1dGlscy5CdWYxNihzLmhhc2hfc2l6ZSk7CiAgcy5wcmV2ID0gbmV3IHV0aWxzLkJ1ZjE2KHMud19zaXplKTsKCiAgLy8gRG9uJ3QgbmVlZCBtZW0gaW5pdCBtYWdpYyBmb3IgSlMuCiAgLy9zLmhpZ2hfd2F0ZXIgPSAwOyAgLyogbm90aGluZyB3cml0dGVuIHRvIHMtPndpbmRvdyB5ZXQgKi8KCiAgcy5saXRfYnVmc2l6ZSA9IDEgPDwgKG1lbUxldmVsICsgNik7IC8qIDE2SyBlbGVtZW50cyBieSBkZWZhdWx0ICovCgogIHMucGVuZGluZ19idWZfc2l6ZSA9IHMubGl0X2J1ZnNpemUgKiA0OwogIHMucGVuZGluZ19idWYgPSBuZXcgdXRpbHMuQnVmOChzLnBlbmRpbmdfYnVmX3NpemUpOwoKICBzLmRfYnVmID0gcy5saXRfYnVmc2l6ZSA+PiAxOwogIHMubF9idWYgPSAoMSArIDIpICogcy5saXRfYnVmc2l6ZTsKCiAgcy5sZXZlbCA9IGxldmVsOwogIHMuc3RyYXRlZ3kgPSBzdHJhdGVneTsKICBzLm1ldGhvZCA9IG1ldGhvZDsKCiAgcmV0dXJuIGRlZmxhdGVSZXNldChzdHJtKTsKfQoKZnVuY3Rpb24gZGVmbGF0ZUluaXQoc3RybSwgbGV2ZWwpIHsKICByZXR1cm4gZGVmbGF0ZUluaXQyKHN0cm0sIGxldmVsLCBaX0RFRkxBVEVELCBNQVhfV0JJVFMsIERFRl9NRU1fTEVWRUwsIFpfREVGQVVMVF9TVFJBVEVHWSk7Cn0KCgpmdW5jdGlvbiBkZWZsYXRlKHN0cm0sIGZsdXNoKSB7CiAgdmFyIG9sZF9mbHVzaCwgczsKICB2YXIgYmVnLCB2YWw7IC8vIGZvciBnemlwIGhlYWRlciB3cml0ZSBvbmx5CgogIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSB8fAogICAgZmx1c2ggPiBaX0JMT0NLIHx8IGZsdXNoIDwgMCkgewogICAgcmV0dXJuIHN0cm0gPyBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpIDogWl9TVFJFQU1fRVJST1I7CiAgfQoKICBzID0gc3RybS5zdGF0ZTsKCiAgaWYgKCFzdHJtLm91dHB1dCB8fAogICAgICAoIXN0cm0uaW5wdXQgJiYgc3RybS5hdmFpbF9pbiAhPT0gMCkgfHwKICAgICAgKHMuc3RhdHVzID09PSBGSU5JU0hfU1RBVEUgJiYgZmx1c2ggIT09IFpfRklOSVNIKSkgewogICAgcmV0dXJuIGVycihzdHJtLCAoc3RybS5hdmFpbF9vdXQgPT09IDApID8gWl9CVUZfRVJST1IgOiBaX1NUUkVBTV9FUlJPUik7CiAgfQoKICBzLnN0cm0gPSBzdHJtOyAvKiBqdXN0IGluIGNhc2UgKi8KICBvbGRfZmx1c2ggPSBzLmxhc3RfZmx1c2g7CiAgcy5sYXN0X2ZsdXNoID0gZmx1c2g7CgogIC8qIFdyaXRlIHRoZSBoZWFkZXIgKi8KICBpZiAocy5zdGF0dXMgPT09IElOSVRfU1RBVEUpIHsKCiAgICBpZiAocy53cmFwID09PSAyKSB7IC8vIEdaSVAgaGVhZGVyCiAgICAgIHN0cm0uYWRsZXIgPSAwOyAgLy9jcmMzMigwTCwgWl9OVUxMLCAwKTsKICAgICAgcHV0X2J5dGUocywgMzEpOwogICAgICBwdXRfYnl0ZShzLCAxMzkpOwogICAgICBwdXRfYnl0ZShzLCA4KTsKICAgICAgaWYgKCFzLmd6aGVhZCkgeyAvLyBzLT5nemhlYWQgPT0gWl9OVUxMCiAgICAgICAgcHV0X2J5dGUocywgMCk7CiAgICAgICAgcHV0X2J5dGUocywgMCk7CiAgICAgICAgcHV0X2J5dGUocywgMCk7CiAgICAgICAgcHV0X2J5dGUocywgMCk7CiAgICAgICAgcHV0X2J5dGUocywgMCk7CiAgICAgICAgcHV0X2J5dGUocywgcy5sZXZlbCA9PT0gOSA/IDIgOgogICAgICAgICAgICAgICAgICAgIChzLnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8IHMubGV2ZWwgPCAyID8KICAgICAgICAgICAgICAgICAgICAgNCA6IDApKTsKICAgICAgICBwdXRfYnl0ZShzLCBPU19DT0RFKTsKICAgICAgICBzLnN0YXR1cyA9IEJVU1lfU1RBVEU7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgcHV0X2J5dGUocywgKHMuZ3poZWFkLnRleHQgPyAxIDogMCkgKwogICAgICAgICAgICAgICAgICAgIChzLmd6aGVhZC5oY3JjID8gMiA6IDApICsKICAgICAgICAgICAgICAgICAgICAoIXMuZ3poZWFkLmV4dHJhID8gMCA6IDQpICsKICAgICAgICAgICAgICAgICAgICAoIXMuZ3poZWFkLm5hbWUgPyAwIDogOCkgKwogICAgICAgICAgICAgICAgICAgICghcy5nemhlYWQuY29tbWVudCA/IDAgOiAxNikKICAgICAgICAgICAgICAgICk7CiAgICAgICAgcHV0X2J5dGUocywgcy5nemhlYWQudGltZSAmIDB4ZmYpOwogICAgICAgIHB1dF9ieXRlKHMsIChzLmd6aGVhZC50aW1lID4+IDgpICYgMHhmZik7CiAgICAgICAgcHV0X2J5dGUocywgKHMuZ3poZWFkLnRpbWUgPj4gMTYpICYgMHhmZik7CiAgICAgICAgcHV0X2J5dGUocywgKHMuZ3poZWFkLnRpbWUgPj4gMjQpICYgMHhmZik7CiAgICAgICAgcHV0X2J5dGUocywgcy5sZXZlbCA9PT0gOSA/IDIgOgogICAgICAgICAgICAgICAgICAgIChzLnN0cmF0ZWd5ID49IFpfSFVGRk1BTl9PTkxZIHx8IHMubGV2ZWwgPCAyID8KICAgICAgICAgICAgICAgICAgICAgNCA6IDApKTsKICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC5vcyAmIDB4ZmYpOwogICAgICAgIGlmIChzLmd6aGVhZC5leHRyYSAmJiBzLmd6aGVhZC5leHRyYS5sZW5ndGgpIHsKICAgICAgICAgIHB1dF9ieXRlKHMsIHMuZ3poZWFkLmV4dHJhLmxlbmd0aCAmIDB4ZmYpOwogICAgICAgICAgcHV0X2J5dGUocywgKHMuZ3poZWFkLmV4dHJhLmxlbmd0aCA+PiA4KSAmIDB4ZmYpOwogICAgICAgIH0KICAgICAgICBpZiAocy5nemhlYWQuaGNyYykgewogICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZywgMCk7CiAgICAgICAgfQogICAgICAgIHMuZ3ppbmRleCA9IDA7CiAgICAgICAgcy5zdGF0dXMgPSBFWFRSQV9TVEFURTsKICAgICAgfQogICAgfQogICAgZWxzZSAvLyBERUZMQVRFIGhlYWRlcgogICAgewogICAgICB2YXIgaGVhZGVyID0gKFpfREVGTEFURUQgKyAoKHMud19iaXRzIC0gOCkgPDwgNCkpIDw8IDg7CiAgICAgIHZhciBsZXZlbF9mbGFncyA9IC0xOwoKICAgICAgaWYgKHMuc3RyYXRlZ3kgPj0gWl9IVUZGTUFOX09OTFkgfHwgcy5sZXZlbCA8IDIpIHsKICAgICAgICBsZXZlbF9mbGFncyA9IDA7CiAgICAgIH0gZWxzZSBpZiAocy5sZXZlbCA8IDYpIHsKICAgICAgICBsZXZlbF9mbGFncyA9IDE7CiAgICAgIH0gZWxzZSBpZiAocy5sZXZlbCA9PT0gNikgewogICAgICAgIGxldmVsX2ZsYWdzID0gMjsKICAgICAgfSBlbHNlIHsKICAgICAgICBsZXZlbF9mbGFncyA9IDM7CiAgICAgIH0KICAgICAgaGVhZGVyIHw9IChsZXZlbF9mbGFncyA8PCA2KTsKICAgICAgaWYgKHMuc3Ryc3RhcnQgIT09IDApIHsgaGVhZGVyIHw9IFBSRVNFVF9ESUNUOyB9CiAgICAgIGhlYWRlciArPSAzMSAtIChoZWFkZXIgJSAzMSk7CgogICAgICBzLnN0YXR1cyA9IEJVU1lfU1RBVEU7CiAgICAgIHB1dFNob3J0TVNCKHMsIGhlYWRlcik7CgogICAgICAvKiBTYXZlIHRoZSBhZGxlcjMyIG9mIHRoZSBwcmVzZXQgZGljdGlvbmFyeTogKi8KICAgICAgaWYgKHMuc3Ryc3RhcnQgIT09IDApIHsKICAgICAgICBwdXRTaG9ydE1TQihzLCBzdHJtLmFkbGVyID4+PiAxNik7CiAgICAgICAgcHV0U2hvcnRNU0Iocywgc3RybS5hZGxlciAmIDB4ZmZmZik7CiAgICAgIH0KICAgICAgc3RybS5hZGxlciA9IDE7IC8vIGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7CiAgICB9CiAgfQoKLy8jaWZkZWYgR1pJUAogIGlmIChzLnN0YXR1cyA9PT0gRVhUUkFfU1RBVEUpIHsKICAgIGlmIChzLmd6aGVhZC5leHRyYS8qICE9IFpfTlVMTCovKSB7CiAgICAgIGJlZyA9IHMucGVuZGluZzsgIC8qIHN0YXJ0IG9mIGJ5dGVzIHRvIHVwZGF0ZSBjcmMgKi8KCiAgICAgIHdoaWxlIChzLmd6aW5kZXggPCAocy5nemhlYWQuZXh0cmEubGVuZ3RoICYgMHhmZmZmKSkgewogICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7CiAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7CiAgICAgICAgICB9CiAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwogICAgICAgICAgYmVnID0gcy5wZW5kaW5nOwogICAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBwdXRfYnl0ZShzLCBzLmd6aGVhZC5leHRyYVtzLmd6aW5kZXhdICYgMHhmZik7CiAgICAgICAgcy5nemluZGV4Kys7CiAgICAgIH0KICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7CiAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTsKICAgICAgfQogICAgICBpZiAocy5nemluZGV4ID09PSBzLmd6aGVhZC5leHRyYS5sZW5ndGgpIHsKICAgICAgICBzLmd6aW5kZXggPSAwOwogICAgICAgIHMuc3RhdHVzID0gTkFNRV9TVEFURTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIHMuc3RhdHVzID0gTkFNRV9TVEFURTsKICAgIH0KICB9CiAgaWYgKHMuc3RhdHVzID09PSBOQU1FX1NUQVRFKSB7CiAgICBpZiAocy5nemhlYWQubmFtZS8qICE9IFpfTlVMTCovKSB7CiAgICAgIGJlZyA9IHMucGVuZGluZzsgIC8qIHN0YXJ0IG9mIGJ5dGVzIHRvIHVwZGF0ZSBjcmMgKi8KICAgICAgLy9pbnQgdmFsOwoKICAgICAgZG8gewogICAgICAgIGlmIChzLnBlbmRpbmcgPT09IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgICAgaWYgKHMuZ3poZWFkLmhjcmMgJiYgcy5wZW5kaW5nID4gYmVnKSB7CiAgICAgICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7CiAgICAgICAgICB9CiAgICAgICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwogICAgICAgICAgYmVnID0gcy5wZW5kaW5nOwogICAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICAgIHZhbCA9IDE7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBKUyBzcGVjaWZpYzogbGl0dGxlIG1hZ2ljIHRvIGFkZCB6ZXJvIHRlcm1pbmF0b3IgdG8gZW5kIG9mIHN0cmluZwogICAgICAgIGlmIChzLmd6aW5kZXggPCBzLmd6aGVhZC5uYW1lLmxlbmd0aCkgewogICAgICAgICAgdmFsID0gcy5nemhlYWQubmFtZS5jaGFyQ29kZUF0KHMuZ3ppbmRleCsrKSAmIDB4ZmY7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhbCA9IDA7CiAgICAgICAgfQogICAgICAgIHB1dF9ieXRlKHMsIHZhbCk7CiAgICAgIH0gd2hpbGUgKHZhbCAhPT0gMCk7CgogICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpewogICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7CiAgICAgIH0KICAgICAgaWYgKHZhbCA9PT0gMCkgewogICAgICAgIHMuZ3ppbmRleCA9IDA7CiAgICAgICAgcy5zdGF0dXMgPSBDT01NRU5UX1NUQVRFOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgcy5zdGF0dXMgPSBDT01NRU5UX1NUQVRFOwogICAgfQogIH0KICBpZiAocy5zdGF0dXMgPT09IENPTU1FTlRfU1RBVEUpIHsKICAgIGlmIChzLmd6aGVhZC5jb21tZW50LyogIT0gWl9OVUxMKi8pIHsKICAgICAgYmVnID0gcy5wZW5kaW5nOyAgLyogc3RhcnQgb2YgYnl0ZXMgdG8gdXBkYXRlIGNyYyAqLwogICAgICAvL2ludCB2YWw7CgogICAgICBkbyB7CiAgICAgICAgaWYgKHMucGVuZGluZyA9PT0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgICBpZiAocy5nemhlYWQuaGNyYyAmJiBzLnBlbmRpbmcgPiBiZWcpIHsKICAgICAgICAgICAgc3RybS5hZGxlciA9IGNyYzMyKHN0cm0uYWRsZXIsIHMucGVuZGluZ19idWYsIHMucGVuZGluZyAtIGJlZywgYmVnKTsKICAgICAgICAgIH0KICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgICAgICBiZWcgPSBzLnBlbmRpbmc7CiAgICAgICAgICBpZiAocy5wZW5kaW5nID09PSBzLnBlbmRpbmdfYnVmX3NpemUpIHsKICAgICAgICAgICAgdmFsID0gMTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIEpTIHNwZWNpZmljOiBsaXR0bGUgbWFnaWMgdG8gYWRkIHplcm8gdGVybWluYXRvciB0byBlbmQgb2Ygc3RyaW5nCiAgICAgICAgaWYgKHMuZ3ppbmRleCA8IHMuZ3poZWFkLmNvbW1lbnQubGVuZ3RoKSB7CiAgICAgICAgICB2YWwgPSBzLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQocy5nemluZGV4KyspICYgMHhmZjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFsID0gMDsKICAgICAgICB9CiAgICAgICAgcHV0X2J5dGUocywgdmFsKTsKICAgICAgfSB3aGlsZSAodmFsICE9PSAwKTsKCiAgICAgIGlmIChzLmd6aGVhZC5oY3JjICYmIHMucGVuZGluZyA+IGJlZykgewogICAgICAgIHN0cm0uYWRsZXIgPSBjcmMzMihzdHJtLmFkbGVyLCBzLnBlbmRpbmdfYnVmLCBzLnBlbmRpbmcgLSBiZWcsIGJlZyk7CiAgICAgIH0KICAgICAgaWYgKHZhbCA9PT0gMCkgewogICAgICAgIHMuc3RhdHVzID0gSENSQ19TVEFURTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIHMuc3RhdHVzID0gSENSQ19TVEFURTsKICAgIH0KICB9CiAgaWYgKHMuc3RhdHVzID09PSBIQ1JDX1NUQVRFKSB7CiAgICBpZiAocy5nemhlYWQuaGNyYykgewogICAgICBpZiAocy5wZW5kaW5nICsgMiA+IHMucGVuZGluZ19idWZfc2l6ZSkgewogICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICAgIH0KICAgICAgaWYgKHMucGVuZGluZyArIDIgPD0gcy5wZW5kaW5nX2J1Zl9zaXplKSB7CiAgICAgICAgcHV0X2J5dGUocywgc3RybS5hZGxlciAmIDB4ZmYpOwogICAgICAgIHB1dF9ieXRlKHMsIChzdHJtLmFkbGVyID4+IDgpICYgMHhmZik7CiAgICAgICAgc3RybS5hZGxlciA9IDA7IC8vY3JjMzIoMEwsIFpfTlVMTCwgMCk7CiAgICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgcy5zdGF0dXMgPSBCVVNZX1NUQVRFOwogICAgfQogIH0KLy8jZW5kaWYKCiAgLyogRmx1c2ggYXMgbXVjaCBwZW5kaW5nIG91dHB1dCBhcyBwb3NzaWJsZSAqLwogIGlmIChzLnBlbmRpbmcgIT09IDApIHsKICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CiAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgLyogU2luY2UgYXZhaWxfb3V0IGlzIDAsIGRlZmxhdGUgd2lsbCBiZSBjYWxsZWQgYWdhaW4gd2l0aAogICAgICAgKiBtb3JlIG91dHB1dCBzcGFjZSwgYnV0IHBvc3NpYmx5IHdpdGggYm90aCBwZW5kaW5nIGFuZAogICAgICAgKiBhdmFpbF9pbiBlcXVhbCB0byB6ZXJvLiBUaGVyZSB3b24ndCBiZSBhbnl0aGluZyB0byBkbywKICAgICAgICogYnV0IHRoaXMgaXMgbm90IGFuIGVycm9yIHNpdHVhdGlvbiBzbyBtYWtlIHN1cmUgd2UKICAgICAgICogcmV0dXJuIE9LIGluc3RlYWQgb2YgQlVGX0VSUk9SIGF0IG5leHQgY2FsbCBvZiBkZWZsYXRlOgogICAgICAgKi8KICAgICAgcy5sYXN0X2ZsdXNoID0gLTE7CiAgICAgIHJldHVybiBaX09LOwogICAgfQoKICAgIC8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gZG8gYW5kIGF2b2lkIGR1cGxpY2F0ZSBjb25zZWN1dGl2ZQogICAgICogZmx1c2hlcy4gRm9yIHJlcGVhdGVkIGFuZCB1c2VsZXNzIGNhbGxzIHdpdGggWl9GSU5JU0gsIHdlIGtlZXAKICAgICAqIHJldHVybmluZyBaX1NUUkVBTV9FTkQgaW5zdGVhZCBvZiBaX0JVRl9FUlJPUi4KICAgICAqLwogIH0gZWxzZSBpZiAoc3RybS5hdmFpbF9pbiA9PT0gMCAmJiByYW5rKGZsdXNoKSA8PSByYW5rKG9sZF9mbHVzaCkgJiYKICAgIGZsdXNoICE9PSBaX0ZJTklTSCkgewogICAgcmV0dXJuIGVycihzdHJtLCBaX0JVRl9FUlJPUik7CiAgfQoKICAvKiBVc2VyIG11c3Qgbm90IHByb3ZpZGUgbW9yZSBpbnB1dCBhZnRlciB0aGUgZmlyc3QgRklOSVNIOiAqLwogIGlmIChzLnN0YXR1cyA9PT0gRklOSVNIX1NUQVRFICYmIHN0cm0uYXZhaWxfaW4gIT09IDApIHsKICAgIHJldHVybiBlcnIoc3RybSwgWl9CVUZfRVJST1IpOwogIH0KCiAgLyogU3RhcnQgYSBuZXcgYmxvY2sgb3IgY29udGludWUgdGhlIGN1cnJlbnQgb25lLgogICAqLwogIGlmIChzdHJtLmF2YWlsX2luICE9PSAwIHx8IHMubG9va2FoZWFkICE9PSAwIHx8CiAgICAoZmx1c2ggIT09IFpfTk9fRkxVU0ggJiYgcy5zdGF0dXMgIT09IEZJTklTSF9TVEFURSkpIHsKICAgIHZhciBic3RhdGUgPSAocy5zdHJhdGVneSA9PT0gWl9IVUZGTUFOX09OTFkpID8gZGVmbGF0ZV9odWZmKHMsIGZsdXNoKSA6CiAgICAgIChzLnN0cmF0ZWd5ID09PSBaX1JMRSA/IGRlZmxhdGVfcmxlKHMsIGZsdXNoKSA6CiAgICAgICAgY29uZmlndXJhdGlvbl90YWJsZVtzLmxldmVsXS5mdW5jKHMsIGZsdXNoKSk7CgogICAgaWYgKGJzdGF0ZSA9PT0gQlNfRklOSVNIX1NUQVJURUQgfHwgYnN0YXRlID09PSBCU19GSU5JU0hfRE9ORSkgewogICAgICBzLnN0YXR1cyA9IEZJTklTSF9TVEFURTsKICAgIH0KICAgIGlmIChic3RhdGUgPT09IEJTX05FRURfTU9SRSB8fCBic3RhdGUgPT09IEJTX0ZJTklTSF9TVEFSVEVEKSB7CiAgICAgIGlmIChzdHJtLmF2YWlsX291dCA9PT0gMCkgewogICAgICAgIHMubGFzdF9mbHVzaCA9IC0xOwogICAgICAgIC8qIGF2b2lkIEJVRl9FUlJPUiBuZXh0IGNhbGwsIHNlZSBhYm92ZSAqLwogICAgICB9CiAgICAgIHJldHVybiBaX09LOwogICAgICAvKiBJZiBmbHVzaCAhPSBaX05PX0ZMVVNIICYmIGF2YWlsX291dCA9PSAwLCB0aGUgbmV4dCBjYWxsCiAgICAgICAqIG9mIGRlZmxhdGUgc2hvdWxkIHVzZSB0aGUgc2FtZSBmbHVzaCBwYXJhbWV0ZXIgdG8gbWFrZSBzdXJlCiAgICAgICAqIHRoYXQgdGhlIGZsdXNoIGlzIGNvbXBsZXRlLiBTbyB3ZSBkb24ndCBoYXZlIHRvIG91dHB1dCBhbgogICAgICAgKiBlbXB0eSBibG9jayBoZXJlLCB0aGlzIHdpbGwgYmUgZG9uZSBhdCBuZXh0IGNhbGwuIFRoaXMgYWxzbwogICAgICAgKiBlbnN1cmVzIHRoYXQgZm9yIGEgdmVyeSBzbWFsbCBvdXRwdXQgYnVmZmVyLCB3ZSBlbWl0IGF0IG1vc3QKICAgICAgICogb25lIGVtcHR5IGJsb2NrLgogICAgICAgKi8KICAgIH0KICAgIGlmIChic3RhdGUgPT09IEJTX0JMT0NLX0RPTkUpIHsKICAgICAgaWYgKGZsdXNoID09PSBaX1BBUlRJQUxfRkxVU0gpIHsKICAgICAgICB0cmVlcy5fdHJfYWxpZ24ocyk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoZmx1c2ggIT09IFpfQkxPQ0spIHsgLyogRlVMTF9GTFVTSCBvciBTWU5DX0ZMVVNIICovCgogICAgICAgIHRyZWVzLl90cl9zdG9yZWRfYmxvY2socywgMCwgMCwgZmFsc2UpOwogICAgICAgIC8qIEZvciBhIGZ1bGwgZmx1c2gsIHRoaXMgZW1wdHkgYmxvY2sgd2lsbCBiZSByZWNvZ25pemVkCiAgICAgICAgICogYXMgYSBzcGVjaWFsIG1hcmtlciBieSBpbmZsYXRlX3N5bmMoKS4KICAgICAgICAgKi8KICAgICAgICBpZiAoZmx1c2ggPT09IFpfRlVMTF9GTFVTSCkgewogICAgICAgICAgLyoqKiBDTEVBUl9IQVNIKHMpOyAqKiovICAgICAgICAgICAgIC8qIGZvcmdldCBoaXN0b3J5ICovCiAgICAgICAgICB6ZXJvKHMuaGVhZCk7IC8vIEZpbGwgd2l0aCBOSUwgKD0gMCk7CgogICAgICAgICAgaWYgKHMubG9va2FoZWFkID09PSAwKSB7CiAgICAgICAgICAgIHMuc3Ryc3RhcnQgPSAwOwogICAgICAgICAgICBzLmJsb2NrX3N0YXJ0ID0gMDsKICAgICAgICAgICAgcy5pbnNlcnQgPSAwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBmbHVzaF9wZW5kaW5nKHN0cm0pOwogICAgICBpZiAoc3RybS5hdmFpbF9vdXQgPT09IDApIHsKICAgICAgICBzLmxhc3RfZmx1c2ggPSAtMTsgLyogYXZvaWQgQlVGX0VSUk9SIGF0IG5leHQgY2FsbCwgc2VlIGFib3ZlICovCiAgICAgICAgcmV0dXJuIFpfT0s7CiAgICAgIH0KICAgIH0KICB9CiAgLy9Bc3NlcnQoc3RybS0+YXZhaWxfb3V0ID4gMCwgImJ1ZzIiKTsKICAvL2lmIChzdHJtLmF2YWlsX291dCA8PSAwKSB7IHRocm93IG5ldyBFcnJvcigiYnVnMiIpO30KCiAgaWYgKGZsdXNoICE9PSBaX0ZJTklTSCkgeyByZXR1cm4gWl9PSzsgfQogIGlmIChzLndyYXAgPD0gMCkgeyByZXR1cm4gWl9TVFJFQU1fRU5EOyB9CgogIC8qIFdyaXRlIHRoZSB0cmFpbGVyICovCiAgaWYgKHMud3JhcCA9PT0gMikgewogICAgcHV0X2J5dGUocywgc3RybS5hZGxlciAmIDB4ZmYpOwogICAgcHV0X2J5dGUocywgKHN0cm0uYWRsZXIgPj4gOCkgJiAweGZmKTsKICAgIHB1dF9ieXRlKHMsIChzdHJtLmFkbGVyID4+IDE2KSAmIDB4ZmYpOwogICAgcHV0X2J5dGUocywgKHN0cm0uYWRsZXIgPj4gMjQpICYgMHhmZik7CiAgICBwdXRfYnl0ZShzLCBzdHJtLnRvdGFsX2luICYgMHhmZik7CiAgICBwdXRfYnl0ZShzLCAoc3RybS50b3RhbF9pbiA+PiA4KSAmIDB4ZmYpOwogICAgcHV0X2J5dGUocywgKHN0cm0udG90YWxfaW4gPj4gMTYpICYgMHhmZik7CiAgICBwdXRfYnl0ZShzLCAoc3RybS50b3RhbF9pbiA+PiAyNCkgJiAweGZmKTsKICB9CiAgZWxzZQogIHsKICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgPj4+IDE2KTsKICAgIHB1dFNob3J0TVNCKHMsIHN0cm0uYWRsZXIgJiAweGZmZmYpOwogIH0KCiAgZmx1c2hfcGVuZGluZyhzdHJtKTsKICAvKiBJZiBhdmFpbF9vdXQgaXMgemVybywgdGhlIGFwcGxpY2F0aW9uIHdpbGwgY2FsbCBkZWZsYXRlIGFnYWluCiAgICogdG8gZmx1c2ggdGhlIHJlc3QuCiAgICovCiAgaWYgKHMud3JhcCA+IDApIHsgcy53cmFwID0gLXMud3JhcDsgfQogIC8qIHdyaXRlIHRoZSB0cmFpbGVyIG9ubHkgb25jZSEgKi8KICByZXR1cm4gcy5wZW5kaW5nICE9PSAwID8gWl9PSyA6IFpfU1RSRUFNX0VORDsKfQoKZnVuY3Rpb24gZGVmbGF0ZUVuZChzdHJtKSB7CiAgdmFyIHN0YXR1czsKCiAgaWYgKCFzdHJtLyo9PSBaX05VTEwqLyB8fCAhc3RybS5zdGF0ZS8qPT0gWl9OVUxMKi8pIHsKICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICB9CgogIHN0YXR1cyA9IHN0cm0uc3RhdGUuc3RhdHVzOwogIGlmIChzdGF0dXMgIT09IElOSVRfU1RBVEUgJiYKICAgIHN0YXR1cyAhPT0gRVhUUkFfU1RBVEUgJiYKICAgIHN0YXR1cyAhPT0gTkFNRV9TVEFURSAmJgogICAgc3RhdHVzICE9PSBDT01NRU5UX1NUQVRFICYmCiAgICBzdGF0dXMgIT09IEhDUkNfU1RBVEUgJiYKICAgIHN0YXR1cyAhPT0gQlVTWV9TVEFURSAmJgogICAgc3RhdHVzICE9PSBGSU5JU0hfU1RBVEUKICApIHsKICAgIHJldHVybiBlcnIoc3RybSwgWl9TVFJFQU1fRVJST1IpOwogIH0KCiAgc3RybS5zdGF0ZSA9IG51bGw7CgogIHJldHVybiBzdGF0dXMgPT09IEJVU1lfU1RBVEUgPyBlcnIoc3RybSwgWl9EQVRBX0VSUk9SKSA6IFpfT0s7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogQ29weSB0aGUgc291cmNlIHN0YXRlIHRvIHRoZSBkZXN0aW5hdGlvbiBzdGF0ZQogKi8KLy9mdW5jdGlvbiBkZWZsYXRlQ29weShkZXN0LCBzb3VyY2UpIHsKLy8KLy99CgpleHBvcnRzLmRlZmxhdGVJbml0ID0gZGVmbGF0ZUluaXQ7CmV4cG9ydHMuZGVmbGF0ZUluaXQyID0gZGVmbGF0ZUluaXQyOwpleHBvcnRzLmRlZmxhdGVSZXNldCA9IGRlZmxhdGVSZXNldDsKZXhwb3J0cy5kZWZsYXRlUmVzZXRLZWVwID0gZGVmbGF0ZVJlc2V0S2VlcDsKZXhwb3J0cy5kZWZsYXRlU2V0SGVhZGVyID0gZGVmbGF0ZVNldEhlYWRlcjsKZXhwb3J0cy5kZWZsYXRlID0gZGVmbGF0ZTsKZXhwb3J0cy5kZWZsYXRlRW5kID0gZGVmbGF0ZUVuZDsKZXhwb3J0cy5kZWZsYXRlSW5mbyA9ICdwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpJzsKCi8qIE5vdCBpbXBsZW1lbnRlZApleHBvcnRzLmRlZmxhdGVCb3VuZCA9IGRlZmxhdGVCb3VuZDsKZXhwb3J0cy5kZWZsYXRlQ29weSA9IGRlZmxhdGVDb3B5OwpleHBvcnRzLmRlZmxhdGVTZXREaWN0aW9uYXJ5ID0gZGVmbGF0ZVNldERpY3Rpb25hcnk7CmV4cG9ydHMuZGVmbGF0ZVBhcmFtcyA9IGRlZmxhdGVQYXJhbXM7CmV4cG9ydHMuZGVmbGF0ZVBlbmRpbmcgPSBkZWZsYXRlUGVuZGluZzsKZXhwb3J0cy5kZWZsYXRlUHJpbWUgPSBkZWZsYXRlUHJpbWU7CmV4cG9ydHMuZGVmbGF0ZVR1bmUgPSBkZWZsYXRlVHVuZTsKKi8KfSx7Ii4uL3V0aWxzL2NvbW1vbiI6MjcsIi4vYWRsZXIzMiI6MjksIi4vY3JjMzIiOjMxLCIuL21lc3NhZ2VzIjozNywiLi90cmVlcyI6Mzh9XSwzMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCgpmdW5jdGlvbiBHWmhlYWRlcigpIHsKICAvKiB0cnVlIGlmIGNvbXByZXNzZWQgZGF0YSBiZWxpZXZlZCB0byBiZSB0ZXh0ICovCiAgdGhpcy50ZXh0ICAgICAgID0gMDsKICAvKiBtb2RpZmljYXRpb24gdGltZSAqLwogIHRoaXMudGltZSAgICAgICA9IDA7CiAgLyogZXh0cmEgZmxhZ3MgKG5vdCB1c2VkIHdoZW4gd3JpdGluZyBhIGd6aXAgZmlsZSkgKi8KICB0aGlzLnhmbGFncyAgICAgPSAwOwogIC8qIG9wZXJhdGluZyBzeXN0ZW0gKi8KICB0aGlzLm9zICAgICAgICAgPSAwOwogIC8qIHBvaW50ZXIgdG8gZXh0cmEgZmllbGQgb3IgWl9OVUxMIGlmIG5vbmUgKi8KICB0aGlzLmV4dHJhICAgICAgPSBudWxsOwogIC8qIGV4dHJhIGZpZWxkIGxlbmd0aCAodmFsaWQgaWYgZXh0cmEgIT0gWl9OVUxMKSAqLwogIHRoaXMuZXh0cmFfbGVuICA9IDA7IC8vIEFjdHVhbGx5LCB3ZSBkb24ndCBuZWVkIGl0IGluIEpTLAogICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBsZWF2ZSBmb3IgZmV3IGNvZGUgbW9kaWZpY2F0aW9ucwoKICAvLwogIC8vIFNldHVwIGxpbWl0cyBpcyBub3QgbmVjZXNzYXJ5IGJlY2F1c2UgaW4ganMgd2Ugc2hvdWxkIG5vdCBwcmVhbGxvY2F0ZSBtZW1vcnkgCiAgLy8gZm9yIGluZmxhdGUgdXNlIGNvbnN0YW50IGxpbWl0IGluIDY1NTM2IGJ5dGVzCiAgLy8KCiAgLyogc3BhY2UgYXQgZXh0cmEgKG9ubHkgd2hlbiByZWFkaW5nIGhlYWRlcikgKi8KICAvLyB0aGlzLmV4dHJhX21heCAgPSAwOwogIC8qIHBvaW50ZXIgdG8gemVyby10ZXJtaW5hdGVkIGZpbGUgbmFtZSBvciBaX05VTEwgKi8KICB0aGlzLm5hbWUgICAgICAgPSAnJzsKICAvKiBzcGFjZSBhdCBuYW1lIChvbmx5IHdoZW4gcmVhZGluZyBoZWFkZXIpICovCiAgLy8gdGhpcy5uYW1lX21heCAgID0gMDsKICAvKiBwb2ludGVyIHRvIHplcm8tdGVybWluYXRlZCBjb21tZW50IG9yIFpfTlVMTCAqLwogIHRoaXMuY29tbWVudCAgICA9ICcnOwogIC8qIHNwYWNlIGF0IGNvbW1lbnQgKG9ubHkgd2hlbiByZWFkaW5nIGhlYWRlcikgKi8KICAvLyB0aGlzLmNvbW1fbWF4ICAgPSAwOwogIC8qIHRydWUgaWYgdGhlcmUgd2FzIG9yIHdpbGwgYmUgYSBoZWFkZXIgY3JjICovCiAgdGhpcy5oY3JjICAgICAgID0gMDsKICAvKiB0cnVlIHdoZW4gZG9uZSByZWFkaW5nIGd6aXAgaGVhZGVyIChub3QgdXNlZCB3aGVuIHdyaXRpbmcgYSBnemlwIGZpbGUpICovCiAgdGhpcy5kb25lICAgICAgID0gZmFsc2U7Cn0KCm1vZHVsZS5leHBvcnRzID0gR1poZWFkZXI7Cn0se31dLDM0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKLy8gU2VlIHN0YXRlIGRlZnMgZnJvbSBpbmZsYXRlLmpzCnZhciBCQUQgPSAzMDsgICAgICAgLyogZ290IGEgZGF0YSBlcnJvciAtLSByZW1haW4gaGVyZSB1bnRpbCByZXNldCAqLwp2YXIgVFlQRSA9IDEyOyAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIHR5cGUgYml0cywgaW5jbHVkaW5nIGxhc3QtZmxhZyBiaXQgKi8KCi8qCiAgIERlY29kZSBsaXRlcmFsLCBsZW5ndGgsIGFuZCBkaXN0YW5jZSBjb2RlcyBhbmQgd3JpdGUgb3V0IHRoZSByZXN1bHRpbmcKICAgbGl0ZXJhbCBhbmQgbWF0Y2ggYnl0ZXMgdW50aWwgZWl0aGVyIG5vdCBlbm91Z2ggaW5wdXQgb3Igb3V0cHV0IGlzCiAgIGF2YWlsYWJsZSwgYW4gZW5kLW9mLWJsb2NrIGlzIGVuY291bnRlcmVkLCBvciBhIGRhdGEgZXJyb3IgaXMgZW5jb3VudGVyZWQuCiAgIFdoZW4gbGFyZ2UgZW5vdWdoIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyBhcmUgc3VwcGxpZWQgdG8gaW5mbGF0ZSgpLCBmb3IKICAgZXhhbXBsZSwgYSAxNksgaW5wdXQgYnVmZmVyIGFuZCBhIDY0SyBvdXRwdXQgYnVmZmVyLCBtb3JlIHRoYW4gOTUlIG9mIHRoZQogICBpbmZsYXRlIGV4ZWN1dGlvbiB0aW1lIGlzIHNwZW50IGluIHRoaXMgcm91dGluZS4KCiAgIEVudHJ5IGFzc3VtcHRpb25zOgoKICAgICAgICBzdGF0ZS5tb2RlID09PSBMRU4KICAgICAgICBzdHJtLmF2YWlsX2luID49IDYKICAgICAgICBzdHJtLmF2YWlsX291dCA+PSAyNTgKICAgICAgICBzdGFydCA+PSBzdHJtLmF2YWlsX291dAogICAgICAgIHN0YXRlLmJpdHMgPCA4CgogICBPbiByZXR1cm4sIHN0YXRlLm1vZGUgaXMgb25lIG9mOgoKICAgICAgICBMRU4gLS0gcmFuIG91dCBvZiBlbm91Z2ggb3V0cHV0IHNwYWNlIG9yIGVub3VnaCBhdmFpbGFibGUgaW5wdXQKICAgICAgICBUWVBFIC0tIHJlYWNoZWQgZW5kIG9mIGJsb2NrIGNvZGUsIGluZmxhdGUoKSB0byBpbnRlcnByZXQgbmV4dCBibG9jawogICAgICAgIEJBRCAtLSBlcnJvciBpbiBibG9jayBkYXRhCgogICBOb3RlczoKCiAgICAtIFRoZSBtYXhpbXVtIGlucHV0IGJpdHMgdXNlZCBieSBhIGxlbmd0aC9kaXN0YW5jZSBwYWlyIGlzIDE1IGJpdHMgZm9yIHRoZQogICAgICBsZW5ndGggY29kZSwgNSBiaXRzIGZvciB0aGUgbGVuZ3RoIGV4dHJhLCAxNSBiaXRzIGZvciB0aGUgZGlzdGFuY2UgY29kZSwKICAgICAgYW5kIDEzIGJpdHMgZm9yIHRoZSBkaXN0YW5jZSBleHRyYS4gIFRoaXMgdG90YWxzIDQ4IGJpdHMsIG9yIHNpeCBieXRlcy4KICAgICAgVGhlcmVmb3JlIGlmIHN0cm0uYXZhaWxfaW4gPj0gNiwgdGhlbiB0aGVyZSBpcyBlbm91Z2ggaW5wdXQgdG8gYXZvaWQKICAgICAgY2hlY2tpbmcgZm9yIGF2YWlsYWJsZSBpbnB1dCB3aGlsZSBkZWNvZGluZy4KCiAgICAtIFRoZSBtYXhpbXVtIGJ5dGVzIHRoYXQgYSBzaW5nbGUgbGVuZ3RoL2Rpc3RhbmNlIHBhaXIgY2FuIG91dHB1dCBpcyAyNTgKICAgICAgYnl0ZXMsIHdoaWNoIGlzIHRoZSBtYXhpbXVtIGxlbmd0aCB0aGF0IGNhbiBiZSBjb2RlZC4gIGluZmxhdGVfZmFzdCgpCiAgICAgIHJlcXVpcmVzIHN0cm0uYXZhaWxfb3V0ID49IDI1OCBmb3IgZWFjaCBsb29wIHRvIGF2b2lkIGNoZWNraW5nIGZvcgogICAgICBvdXRwdXQgc3BhY2UuCiAqLwptb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluZmxhdGVfZmFzdChzdHJtLCBzdGFydCkgewogIHZhciBzdGF0ZTsKICB2YXIgX2luOyAgICAgICAgICAgICAgICAgICAgLyogbG9jYWwgc3RybS5pbnB1dCAqLwogIHZhciBsYXN0OyAgICAgICAgICAgICAgICAgICAvKiBoYXZlIGVub3VnaCBpbnB1dCB3aGlsZSBpbiA8IGxhc3QgKi8KICB2YXIgX291dDsgICAgICAgICAgICAgICAgICAgLyogbG9jYWwgc3RybS5vdXRwdXQgKi8KICB2YXIgYmVnOyAgICAgICAgICAgICAgICAgICAgLyogaW5mbGF0ZSgpJ3MgaW5pdGlhbCBzdHJtLm91dHB1dCAqLwogIHZhciBlbmQ7ICAgICAgICAgICAgICAgICAgICAvKiB3aGlsZSBvdXQgPCBlbmQsIGVub3VnaCBzcGFjZSBhdmFpbGFibGUgKi8KLy8jaWZkZWYgSU5GTEFURV9TVFJJQ1QKICB2YXIgZG1heDsgICAgICAgICAgICAgICAgICAgLyogbWF4aW11bSBkaXN0YW5jZSBmcm9tIHpsaWIgaGVhZGVyICovCi8vI2VuZGlmCiAgdmFyIHdzaXplOyAgICAgICAgICAgICAgICAgIC8qIHdpbmRvdyBzaXplIG9yIHplcm8gaWYgbm90IHVzaW5nIHdpbmRvdyAqLwogIHZhciB3aGF2ZTsgICAgICAgICAgICAgICAgICAvKiB2YWxpZCBieXRlcyBpbiB0aGUgd2luZG93ICovCiAgdmFyIHduZXh0OyAgICAgICAgICAgICAgICAgIC8qIHdpbmRvdyB3cml0ZSBpbmRleCAqLwogIHZhciB3aW5kb3c7ICAgICAgICAgICAgICAgICAvKiBhbGxvY2F0ZWQgc2xpZGluZyB3aW5kb3csIGlmIHdzaXplICE9IDAgKi8KICB2YXIgaG9sZDsgICAgICAgICAgICAgICAgICAgLyogbG9jYWwgc3RybS5ob2xkICovCiAgdmFyIGJpdHM7ICAgICAgICAgICAgICAgICAgIC8qIGxvY2FsIHN0cm0uYml0cyAqLwogIHZhciBsY29kZTsgICAgICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLmxlbmNvZGUgKi8KICB2YXIgZGNvZGU7ICAgICAgICAgICAgICAgICAgLyogbG9jYWwgc3RybS5kaXN0Y29kZSAqLwogIHZhciBsbWFzazsgICAgICAgICAgICAgICAgICAvKiBtYXNrIGZvciBmaXJzdCBsZXZlbCBvZiBsZW5ndGggY29kZXMgKi8KICB2YXIgZG1hc2s7ICAgICAgICAgICAgICAgICAgLyogbWFzayBmb3IgZmlyc3QgbGV2ZWwgb2YgZGlzdGFuY2UgY29kZXMgKi8KICB2YXIgaGVyZTsgICAgICAgICAgICAgICAgICAgLyogcmV0cmlldmVkIHRhYmxlIGVudHJ5ICovCiAgdmFyIG9wOyAgICAgICAgICAgICAgICAgICAgIC8qIGNvZGUgYml0cywgb3BlcmF0aW9uLCBleHRyYSBiaXRzLCBvciAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgd2luZG93IHBvc2l0aW9uLCB3aW5kb3cgYnl0ZXMgdG8gY29weSAqLwogIHZhciBsZW47ICAgICAgICAgICAgICAgICAgICAvKiBtYXRjaCBsZW5ndGgsIHVudXNlZCBieXRlcyAqLwogIHZhciBkaXN0OyAgICAgICAgICAgICAgICAgICAvKiBtYXRjaCBkaXN0YW5jZSAqLwogIHZhciBmcm9tOyAgICAgICAgICAgICAgICAgICAvKiB3aGVyZSB0byBjb3B5IG1hdGNoIGZyb20gKi8KICB2YXIgZnJvbV9zb3VyY2U7CgoKICB2YXIgaW5wdXQsIG91dHB1dDsgLy8gSlMgc3BlY2lmaWMsIGJlY2F1c2Ugd2UgaGF2ZSBubyBwb2ludGVycwoKICAvKiBjb3B5IHN0YXRlIHRvIGxvY2FsIHZhcmlhYmxlcyAqLwogIHN0YXRlID0gc3RybS5zdGF0ZTsKICAvL2hlcmUgPSBzdGF0ZS5oZXJlOwogIF9pbiA9IHN0cm0ubmV4dF9pbjsKICBpbnB1dCA9IHN0cm0uaW5wdXQ7CiAgbGFzdCA9IF9pbiArIChzdHJtLmF2YWlsX2luIC0gNSk7CiAgX291dCA9IHN0cm0ubmV4dF9vdXQ7CiAgb3V0cHV0ID0gc3RybS5vdXRwdXQ7CiAgYmVnID0gX291dCAtIChzdGFydCAtIHN0cm0uYXZhaWxfb3V0KTsKICBlbmQgPSBfb3V0ICsgKHN0cm0uYXZhaWxfb3V0IC0gMjU3KTsKLy8jaWZkZWYgSU5GTEFURV9TVFJJQ1QKICBkbWF4ID0gc3RhdGUuZG1heDsKLy8jZW5kaWYKICB3c2l6ZSA9IHN0YXRlLndzaXplOwogIHdoYXZlID0gc3RhdGUud2hhdmU7CiAgd25leHQgPSBzdGF0ZS53bmV4dDsKICB3aW5kb3cgPSBzdGF0ZS53aW5kb3c7CiAgaG9sZCA9IHN0YXRlLmhvbGQ7CiAgYml0cyA9IHN0YXRlLmJpdHM7CiAgbGNvZGUgPSBzdGF0ZS5sZW5jb2RlOwogIGRjb2RlID0gc3RhdGUuZGlzdGNvZGU7CiAgbG1hc2sgPSAoMSA8PCBzdGF0ZS5sZW5iaXRzKSAtIDE7CiAgZG1hc2sgPSAoMSA8PCBzdGF0ZS5kaXN0Yml0cykgLSAxOwoKCiAgLyogZGVjb2RlIGxpdGVyYWxzIGFuZCBsZW5ndGgvZGlzdGFuY2VzIHVudGlsIGVuZC1vZi1ibG9jayBvciBub3QgZW5vdWdoCiAgICAgaW5wdXQgZGF0YSBvciBvdXRwdXQgc3BhY2UgKi8KCiAgdG9wOgogIGRvIHsKICAgIGlmIChiaXRzIDwgMTUpIHsKICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgYml0cyArPSA4OwogICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzOwogICAgICBiaXRzICs9IDg7CiAgICB9CgogICAgaGVyZSA9IGxjb2RlW2hvbGQgJiBsbWFza107CgogICAgZG9sZW46CiAgICBmb3IgKDs7KSB7IC8vIEdvdG8gZW11bGF0aW9uCiAgICAgIG9wID0gaGVyZSA+Pj4gMjQvKmhlcmUuYml0cyovOwogICAgICBob2xkID4+Pj0gb3A7CiAgICAgIGJpdHMgLT0gb3A7CiAgICAgIG9wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmYvKmhlcmUub3AqLzsKICAgICAgaWYgKG9wID09PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaXRlcmFsICovCiAgICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsIGhlcmUudmFsID49IDB4MjAgJiYgaGVyZS52YWwgPCAweDdmID8KICAgICAgICAvLyAgICAgICAgImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAnJWMnXG4iIDoKICAgICAgICAvLyAgICAgICAgImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAweCUwMnhcbiIsIGhlcmUudmFsKSk7CiAgICAgICAgb3V0cHV0W19vdXQrK10gPSBoZXJlICYgMHhmZmZmLypoZXJlLnZhbCovOwogICAgICB9CiAgICAgIGVsc2UgaWYgKG9wICYgMTYpIHsgICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggYmFzZSAqLwogICAgICAgIGxlbiA9IGhlcmUgJiAweGZmZmYvKmhlcmUudmFsKi87CiAgICAgICAgb3AgJj0gMTU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGV4dHJhIGJpdHMgKi8KICAgICAgICBpZiAob3ApIHsKICAgICAgICAgIGlmIChiaXRzIDwgb3ApIHsKICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgfQogICAgICAgICAgbGVuICs9IGhvbGQgJiAoKDEgPDwgb3ApIC0gMSk7CiAgICAgICAgICBob2xkID4+Pj0gb3A7CiAgICAgICAgICBiaXRzIC09IG9wOwogICAgICAgIH0KICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgbGVuZ3RoICV1XG4iLCBsZW4pKTsKICAgICAgICBpZiAoYml0cyA8IDE1KSB7CiAgICAgICAgICBob2xkICs9IGlucHV0W19pbisrXSA8PCBiaXRzOwogICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICB9CiAgICAgICAgaGVyZSA9IGRjb2RlW2hvbGQgJiBkbWFza107CgogICAgICAgIGRvZGlzdDoKICAgICAgICBmb3IgKDs7KSB7IC8vIGdvdG8gZW11bGF0aW9uCiAgICAgICAgICBvcCA9IGhlcmUgPj4+IDI0LypoZXJlLmJpdHMqLzsKICAgICAgICAgIGhvbGQgPj4+PSBvcDsKICAgICAgICAgIGJpdHMgLT0gb3A7CiAgICAgICAgICBvcCA9IChoZXJlID4+PiAxNikgJiAweGZmLypoZXJlLm9wKi87CgogICAgICAgICAgaWYgKG9wICYgMTYpIHsgICAgICAgICAgICAgICAgICAgICAgLyogZGlzdGFuY2UgYmFzZSAqLwogICAgICAgICAgICBkaXN0ID0gaGVyZSAmIDB4ZmZmZi8qaGVyZS52YWwqLzsKICAgICAgICAgICAgb3AgJj0gMTU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZXh0cmEgYml0cyAqLwogICAgICAgICAgICBpZiAoYml0cyA8IG9wKSB7CiAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICAgaWYgKGJpdHMgPCBvcCkgewogICAgICAgICAgICAgICAgaG9sZCArPSBpbnB1dFtfaW4rK10gPDwgYml0czsKICAgICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGlzdCArPSBob2xkICYgKCgxIDw8IG9wKSAtIDEpOwovLyNpZmRlZiBJTkZMQVRFX1NUUklDVAogICAgICAgICAgICBpZiAoZGlzdCA+IGRtYXgpIHsKICAgICAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayc7CiAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICBicmVhayB0b3A7CiAgICAgICAgICAgIH0KLy8jZW5kaWYKICAgICAgICAgICAgaG9sZCA+Pj49IG9wOwogICAgICAgICAgICBiaXRzIC09IG9wOwogICAgICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgZGlzdGFuY2UgJXVcbiIsIGRpc3QpKTsKICAgICAgICAgICAgb3AgPSBfb3V0IC0gYmVnOyAgICAgICAgICAgICAgICAvKiBtYXggZGlzdGFuY2UgaW4gb3V0cHV0ICovCiAgICAgICAgICAgIGlmIChkaXN0ID4gb3ApIHsgICAgICAgICAgICAgICAgLyogc2VlIGlmIGNvcHkgZnJvbSB3aW5kb3cgKi8KICAgICAgICAgICAgICBvcCA9IGRpc3QgLSBvcDsgICAgICAgICAgICAgICAvKiBkaXN0YW5jZSBiYWNrIGluIHdpbmRvdyAqLwogICAgICAgICAgICAgIGlmIChvcCA+IHdoYXZlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2FuZSkgewogICAgICAgICAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayc7CiAgICAgICAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrIHRvcDsKICAgICAgICAgICAgICAgIH0KCi8vICghKSBUaGlzIGJsb2NrIGlzIGRpc2FibGVkIGluIHpsaWIgZGVmYWlsdHMsCi8vIGRvbid0IGVuYWJsZSBpdCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkKLy8jaWZkZWYgSU5GTEFURV9BTExPV19JTlZBTElEX0RJU1RBTkNFX1RPT0ZBUl9BUlJSCi8vICAgICAgICAgICAgICAgIGlmIChsZW4gPD0gb3AgLSB3aGF2ZSkgewovLyAgICAgICAgICAgICAgICAgIGRvIHsKLy8gICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gMDsKLy8gICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLWxlbik7Ci8vICAgICAgICAgICAgICAgICAgY29udGludWUgdG9wOwovLyAgICAgICAgICAgICAgICB9Ci8vICAgICAgICAgICAgICAgIGxlbiAtPSBvcCAtIHdoYXZlOwovLyAgICAgICAgICAgICAgICBkbyB7Ci8vICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSAwOwovLyAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wID4gd2hhdmUpOwovLyAgICAgICAgICAgICAgICBpZiAob3AgPT09IDApIHsKLy8gICAgICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7Ci8vICAgICAgICAgICAgICAgICAgZG8gewovLyAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTsKLy8gICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLWxlbik7Ci8vICAgICAgICAgICAgICAgICAgY29udGludWUgdG9wOwovLyAgICAgICAgICAgICAgICB9Ci8vI2VuZGlmCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGZyb20gPSAwOyAvLyB3aW5kb3cgaW5kZXgKICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IHdpbmRvdzsKICAgICAgICAgICAgICBpZiAod25leHQgPT09IDApIHsgICAgICAgICAgIC8qIHZlcnkgY29tbW9uIGNhc2UgKi8KICAgICAgICAgICAgICAgIGZyb20gKz0gd3NpemUgLSBvcDsKICAgICAgICAgICAgICAgIGlmIChvcCA8IGxlbikgeyAgICAgICAgIC8qIHNvbWUgZnJvbSB3aW5kb3cgKi8KICAgICAgICAgICAgICAgICAgbGVuIC09IG9wOwogICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSB3aW5kb3dbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7CiAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDsgIC8qIHJlc3QgZnJvbSBvdXRwdXQgKi8KICAgICAgICAgICAgICAgICAgZnJvbV9zb3VyY2UgPSBvdXRwdXQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKHduZXh0IDwgb3ApIHsgICAgICAvKiB3cmFwIGFyb3VuZCB3aW5kb3cgKi8KICAgICAgICAgICAgICAgIGZyb20gKz0gd3NpemUgKyB3bmV4dCAtIG9wOwogICAgICAgICAgICAgICAgb3AgLT0gd25leHQ7CiAgICAgICAgICAgICAgICBpZiAob3AgPCBsZW4pIHsgICAgICAgICAvKiBzb21lIGZyb20gZW5kIG9mIHdpbmRvdyAqLwogICAgICAgICAgICAgICAgICBsZW4gLT0gb3A7CiAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IHdpbmRvd1tmcm9tKytdOwogICAgICAgICAgICAgICAgICB9IHdoaWxlICgtLW9wKTsKICAgICAgICAgICAgICAgICAgZnJvbSA9IDA7CiAgICAgICAgICAgICAgICAgIGlmICh3bmV4dCA8IGxlbikgeyAgLyogc29tZSBmcm9tIHN0YXJ0IG9mIHdpbmRvdyAqLwogICAgICAgICAgICAgICAgICAgIG9wID0gd25leHQ7CiAgICAgICAgICAgICAgICAgICAgbGVuIC09IG9wOwogICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gd2luZG93W2Zyb20rK107CiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7CiAgICAgICAgICAgICAgICAgICAgZnJvbSA9IF9vdXQgLSBkaXN0OyAgICAgIC8qIHJlc3QgZnJvbSBvdXRwdXQgKi8KICAgICAgICAgICAgICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgLyogY29udGlndW91cyBpbiB3aW5kb3cgKi8KICAgICAgICAgICAgICAgIGZyb20gKz0gd25leHQgLSBvcDsKICAgICAgICAgICAgICAgIGlmIChvcCA8IGxlbikgeyAgICAgICAgIC8qIHNvbWUgZnJvbSB3aW5kb3cgKi8KICAgICAgICAgICAgICAgICAgbGVuIC09IG9wOwogICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSB3aW5kb3dbZnJvbSsrXTsKICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1vcCk7CiAgICAgICAgICAgICAgICAgIGZyb20gPSBfb3V0IC0gZGlzdDsgIC8qIHJlc3QgZnJvbSBvdXRwdXQgKi8KICAgICAgICAgICAgICAgICAgZnJvbV9zb3VyY2UgPSBvdXRwdXQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHdoaWxlIChsZW4gPiAyKSB7CiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107CiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107CiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IGZyb21fc291cmNlW2Zyb20rK107CiAgICAgICAgICAgICAgICBsZW4gLT0gMzsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGxlbikgewogICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdOwogICAgICAgICAgICAgICAgaWYgKGxlbiA+IDEpIHsKICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBmcm9tX3NvdXJjZVtmcm9tKytdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICBmcm9tID0gX291dCAtIGRpc3Q7ICAgICAgICAgIC8qIGNvcHkgZGlyZWN0IGZyb20gb3V0cHV0ICovCiAgICAgICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1pbmltdW0gbGVuZ3RoIGlzIHRocmVlICovCiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdOwogICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTsKICAgICAgICAgICAgICAgIG91dHB1dFtfb3V0KytdID0gb3V0cHV0W2Zyb20rK107CiAgICAgICAgICAgICAgICBsZW4gLT0gMzsKICAgICAgICAgICAgICB9IHdoaWxlIChsZW4gPiAyKTsKICAgICAgICAgICAgICBpZiAobGVuKSB7CiAgICAgICAgICAgICAgICBvdXRwdXRbX291dCsrXSA9IG91dHB1dFtmcm9tKytdOwogICAgICAgICAgICAgICAgaWYgKGxlbiA+IDEpIHsKICAgICAgICAgICAgICAgICAgb3V0cHV0W19vdXQrK10gPSBvdXRwdXRbZnJvbSsrXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKChvcCAmIDY0KSA9PT0gMCkgeyAgICAgICAgICAvKiAybmQgbGV2ZWwgZGlzdGFuY2UgY29kZSAqLwogICAgICAgICAgICBoZXJlID0gZGNvZGVbKGhlcmUgJiAweGZmZmYpLypoZXJlLnZhbCovICsgKGhvbGQgJiAoKDEgPDwgb3ApIC0gMSkpXTsKICAgICAgICAgICAgY29udGludWUgZG9kaXN0OwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgZGlzdGFuY2UgY29kZSc7CiAgICAgICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgICAgIGJyZWFrIHRvcDsKICAgICAgICAgIH0KCiAgICAgICAgICBicmVhazsgLy8gbmVlZCB0byBlbXVsYXRlIGdvdG8gdmlhICJjb250aW51ZSIKICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZSBpZiAoKG9wICYgNjQpID09PSAwKSB7ICAgICAgICAgICAgICAvKiAybmQgbGV2ZWwgbGVuZ3RoIGNvZGUgKi8KICAgICAgICBoZXJlID0gbGNvZGVbKGhlcmUgJiAweGZmZmYpLypoZXJlLnZhbCovICsgKGhvbGQgJiAoKDEgPDwgb3ApIC0gMSkpXTsKICAgICAgICBjb250aW51ZSBkb2xlbjsKICAgICAgfQogICAgICBlbHNlIGlmIChvcCAmIDMyKSB7ICAgICAgICAgICAgICAgICAgICAgLyogZW5kLW9mLWJsb2NrICovCiAgICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICAgIGVuZCBvZiBibG9ja1xuIikpOwogICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFOwogICAgICAgIGJyZWFrIHRvcDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUnOwogICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgYnJlYWsgdG9wOwogICAgICB9CgogICAgICBicmVhazsgLy8gbmVlZCB0byBlbXVsYXRlIGdvdG8gdmlhICJjb250aW51ZSIKICAgIH0KICB9IHdoaWxlIChfaW4gPCBsYXN0ICYmIF9vdXQgPCBlbmQpOwoKICAvKiByZXR1cm4gdW51c2VkIGJ5dGVzIChvbiBlbnRyeSwgYml0cyA8IDgsIHNvIGluIHdvbid0IGdvIHRvbyBmYXIgYmFjaykgKi8KICBsZW4gPSBiaXRzID4+IDM7CiAgX2luIC09IGxlbjsKICBiaXRzIC09IGxlbiA8PCAzOwogIGhvbGQgJj0gKDEgPDwgYml0cykgLSAxOwoKICAvKiB1cGRhdGUgc3RhdGUgYW5kIHJldHVybiAqLwogIHN0cm0ubmV4dF9pbiA9IF9pbjsKICBzdHJtLm5leHRfb3V0ID0gX291dDsKICBzdHJtLmF2YWlsX2luID0gKF9pbiA8IGxhc3QgPyA1ICsgKGxhc3QgLSBfaW4pIDogNSAtIChfaW4gLSBsYXN0KSk7CiAgc3RybS5hdmFpbF9vdXQgPSAoX291dCA8IGVuZCA/IDI1NyArIChlbmQgLSBfb3V0KSA6IDI1NyAtIChfb3V0IC0gZW5kKSk7CiAgc3RhdGUuaG9sZCA9IGhvbGQ7CiAgc3RhdGUuYml0cyA9IGJpdHM7CiAgcmV0dXJuOwp9OwoKfSx7fV0sMzU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7CgoKdmFyIHV0aWxzID0gX2RlcmVxXygnLi4vdXRpbHMvY29tbW9uJyk7CnZhciBhZGxlcjMyID0gX2RlcmVxXygnLi9hZGxlcjMyJyk7CnZhciBjcmMzMiAgID0gX2RlcmVxXygnLi9jcmMzMicpOwp2YXIgaW5mbGF0ZV9mYXN0ID0gX2RlcmVxXygnLi9pbmZmYXN0Jyk7CnZhciBpbmZsYXRlX3RhYmxlID0gX2RlcmVxXygnLi9pbmZ0cmVlcycpOwoKdmFyIENPREVTID0gMDsKdmFyIExFTlMgPSAxOwp2YXIgRElTVFMgPSAyOwoKLyogUHVibGljIGNvbnN0YW50cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCgovKiBBbGxvd2VkIGZsdXNoIHZhbHVlczsgc2VlIGRlZmxhdGUoKSBhbmQgaW5mbGF0ZSgpIGJlbG93IGZvciBkZXRhaWxzICovCi8vdmFyIFpfTk9fRkxVU0ggICAgICA9IDA7Ci8vdmFyIFpfUEFSVElBTF9GTFVTSCA9IDE7Ci8vdmFyIFpfU1lOQ19GTFVTSCAgICA9IDI7Ci8vdmFyIFpfRlVMTF9GTFVTSCAgICA9IDM7CnZhciBaX0ZJTklTSCAgICAgICAgPSA0Owp2YXIgWl9CTE9DSyAgICAgICAgID0gNTsKdmFyIFpfVFJFRVMgICAgICAgICA9IDY7CgoKLyogUmV0dXJuIGNvZGVzIGZvciB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMuIE5lZ2F0aXZlIHZhbHVlcwogKiBhcmUgZXJyb3JzLCBwb3NpdGl2ZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIHNwZWNpYWwgYnV0IG5vcm1hbCBldmVudHMuCiAqLwp2YXIgWl9PSyAgICAgICAgICAgID0gMDsKdmFyIFpfU1RSRUFNX0VORCAgICA9IDE7CnZhciBaX05FRURfRElDVCAgICAgPSAyOwovL3ZhciBaX0VSUk5PICAgICAgICAgPSAtMTsKdmFyIFpfU1RSRUFNX0VSUk9SICA9IC0yOwp2YXIgWl9EQVRBX0VSUk9SICAgID0gLTM7CnZhciBaX01FTV9FUlJPUiAgICAgPSAtNDsKdmFyIFpfQlVGX0VSUk9SICAgICA9IC01OwovL3ZhciBaX1ZFUlNJT05fRVJST1IgPSAtNjsKCi8qIFRoZSBkZWZsYXRlIGNvbXByZXNzaW9uIG1ldGhvZCAqLwp2YXIgWl9ERUZMQVRFRCAgPSA4OwoKCi8qIFNUQVRFUyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgoKdmFyICAgIEhFQUQgPSAxOyAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBtYWdpYyBoZWFkZXIgKi8KdmFyICAgIEZMQUdTID0gMjsgICAgICAvKiBpOiB3YWl0aW5nIGZvciBtZXRob2QgYW5kIGZsYWdzIChnemlwKSAqLwp2YXIgICAgVElNRSA9IDM7ICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIG1vZGlmaWNhdGlvbiB0aW1lIChnemlwKSAqLwp2YXIgICAgT1MgPSA0OyAgICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGV4dHJhIGZsYWdzIGFuZCBvcGVyYXRpbmcgc3lzdGVtIChnemlwKSAqLwp2YXIgICAgRVhMRU4gPSA1OyAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGV4dHJhIGxlbmd0aCAoZ3ppcCkgKi8KdmFyICAgIEVYVFJBID0gNjsgICAgICAvKiBpOiB3YWl0aW5nIGZvciBleHRyYSBieXRlcyAoZ3ppcCkgKi8KdmFyICAgIE5BTUUgPSA3OyAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBlbmQgb2YgZmlsZSBuYW1lIChnemlwKSAqLwp2YXIgICAgQ09NTUVOVCA9IDg7ICAgIC8qIGk6IHdhaXRpbmcgZm9yIGVuZCBvZiBjb21tZW50IChnemlwKSAqLwp2YXIgICAgSENSQyA9IDk7ICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGhlYWRlciBjcmMgKGd6aXApICovCnZhciAgICBESUNUSUQgPSAxMDsgICAgLyogaTogd2FpdGluZyBmb3IgZGljdGlvbmFyeSBjaGVjayB2YWx1ZSAqLwp2YXIgICAgRElDVCA9IDExOyAgICAgIC8qIHdhaXRpbmcgZm9yIGluZmxhdGVTZXREaWN0aW9uYXJ5KCkgY2FsbCAqLwp2YXIgICAgICAgIFRZUEUgPSAxMjsgICAgICAvKiBpOiB3YWl0aW5nIGZvciB0eXBlIGJpdHMsIGluY2x1ZGluZyBsYXN0LWZsYWcgYml0ICovCnZhciAgICAgICAgVFlQRURPID0gMTM7ICAgIC8qIGk6IHNhbWUsIGJ1dCBza2lwIGNoZWNrIHRvIGV4aXQgaW5mbGF0ZSBvbiBuZXcgYmxvY2sgKi8KdmFyICAgICAgICBTVE9SRUQgPSAxNDsgICAgLyogaTogd2FpdGluZyBmb3Igc3RvcmVkIHNpemUgKGxlbmd0aCBhbmQgY29tcGxlbWVudCkgKi8KdmFyICAgICAgICBDT1BZXyA9IDE1OyAgICAgLyogaS9vOiBzYW1lIGFzIENPUFkgYmVsb3csIGJ1dCBvbmx5IGZpcnN0IHRpbWUgaW4gKi8KdmFyICAgICAgICBDT1BZID0gMTY7ICAgICAgLyogaS9vOiB3YWl0aW5nIGZvciBpbnB1dCBvciBvdXRwdXQgdG8gY29weSBzdG9yZWQgYmxvY2sgKi8KdmFyICAgICAgICBUQUJMRSA9IDE3OyAgICAgLyogaTogd2FpdGluZyBmb3IgZHluYW1pYyBibG9jayB0YWJsZSBsZW5ndGhzICovCnZhciAgICAgICAgTEVOTEVOUyA9IDE4OyAgIC8qIGk6IHdhaXRpbmcgZm9yIGNvZGUgbGVuZ3RoIGNvZGUgbGVuZ3RocyAqLwp2YXIgICAgICAgIENPREVMRU5TID0gMTk7ICAvKiBpOiB3YWl0aW5nIGZvciBsZW5ndGgvbGl0IGFuZCBkaXN0YW5jZSBjb2RlIGxlbmd0aHMgKi8KdmFyICAgICAgICAgICAgTEVOXyA9IDIwOyAgICAgIC8qIGk6IHNhbWUgYXMgTEVOIGJlbG93LCBidXQgb25seSBmaXJzdCB0aW1lIGluICovCnZhciAgICAgICAgICAgIExFTiA9IDIxOyAgICAgICAvKiBpOiB3YWl0aW5nIGZvciBsZW5ndGgvbGl0L2VvYiBjb2RlICovCnZhciAgICAgICAgICAgIExFTkVYVCA9IDIyOyAgICAvKiBpOiB3YWl0aW5nIGZvciBsZW5ndGggZXh0cmEgYml0cyAqLwp2YXIgICAgICAgICAgICBESVNUID0gMjM7ICAgICAgLyogaTogd2FpdGluZyBmb3IgZGlzdGFuY2UgY29kZSAqLwp2YXIgICAgICAgICAgICBESVNURVhUID0gMjQ7ICAgLyogaTogd2FpdGluZyBmb3IgZGlzdGFuY2UgZXh0cmEgYml0cyAqLwp2YXIgICAgICAgICAgICBNQVRDSCA9IDI1OyAgICAgLyogbzogd2FpdGluZyBmb3Igb3V0cHV0IHNwYWNlIHRvIGNvcHkgc3RyaW5nICovCnZhciAgICAgICAgICAgIExJVCA9IDI2OyAgICAgICAvKiBvOiB3YWl0aW5nIGZvciBvdXRwdXQgc3BhY2UgdG8gd3JpdGUgbGl0ZXJhbCAqLwp2YXIgICAgQ0hFQ0sgPSAyNzsgICAgIC8qIGk6IHdhaXRpbmcgZm9yIDMyLWJpdCBjaGVjayB2YWx1ZSAqLwp2YXIgICAgTEVOR1RIID0gMjg7ICAgIC8qIGk6IHdhaXRpbmcgZm9yIDMyLWJpdCBsZW5ndGggKGd6aXApICovCnZhciAgICBET05FID0gMjk7ICAgICAgLyogZmluaXNoZWQgY2hlY2ssIGRvbmUgLS0gcmVtYWluIGhlcmUgdW50aWwgcmVzZXQgKi8KdmFyICAgIEJBRCA9IDMwOyAgICAgICAvKiBnb3QgYSBkYXRhIGVycm9yIC0tIHJlbWFpbiBoZXJlIHVudGlsIHJlc2V0ICovCnZhciAgICBNRU0gPSAzMTsgICAgICAgLyogZ290IGFuIGluZmxhdGUoKSBtZW1vcnkgZXJyb3IgLS0gcmVtYWluIGhlcmUgdW50aWwgcmVzZXQgKi8KdmFyICAgIFNZTkMgPSAzMjsgICAgICAvKiBsb29raW5nIGZvciBzeW5jaHJvbml6YXRpb24gYnl0ZXMgdG8gcmVzdGFydCBpbmZsYXRlKCkgKi8KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgoKCnZhciBFTk9VR0hfTEVOUyA9IDg1MjsKdmFyIEVOT1VHSF9ESVNUUyA9IDU5MjsKLy92YXIgRU5PVUdIID0gIChFTk9VR0hfTEVOUytFTk9VR0hfRElTVFMpOwoKdmFyIE1BWF9XQklUUyA9IDE1OwovKiAzMksgTFo3NyB3aW5kb3cgKi8KdmFyIERFRl9XQklUUyA9IE1BWF9XQklUUzsKCgpmdW5jdGlvbiBaU1dBUDMyKHEpIHsKICByZXR1cm4gICgoKHEgPj4+IDI0KSAmIDB4ZmYpICsKICAgICAgICAgICgocSA+Pj4gOCkgJiAweGZmMDApICsKICAgICAgICAgICgocSAmIDB4ZmYwMCkgPDwgOCkgKwogICAgICAgICAgKChxICYgMHhmZikgPDwgMjQpKTsKfQoKCmZ1bmN0aW9uIEluZmxhdGVTdGF0ZSgpIHsKICB0aGlzLm1vZGUgPSAwOyAgICAgICAgICAgICAvKiBjdXJyZW50IGluZmxhdGUgbW9kZSAqLwogIHRoaXMubGFzdCA9IGZhbHNlOyAgICAgICAgICAvKiB0cnVlIGlmIHByb2Nlc3NpbmcgbGFzdCBibG9jayAqLwogIHRoaXMud3JhcCA9IDA7ICAgICAgICAgICAgICAvKiBiaXQgMCB0cnVlIGZvciB6bGliLCBiaXQgMSB0cnVlIGZvciBnemlwICovCiAgdGhpcy5oYXZlZGljdCA9IGZhbHNlOyAgICAgIC8qIHRydWUgaWYgZGljdGlvbmFyeSBwcm92aWRlZCAqLwogIHRoaXMuZmxhZ3MgPSAwOyAgICAgICAgICAgICAvKiBnemlwIGhlYWRlciBtZXRob2QgYW5kIGZsYWdzICgwIGlmIHpsaWIpICovCiAgdGhpcy5kbWF4ID0gMDsgICAgICAgICAgICAgIC8qIHpsaWIgaGVhZGVyIG1heCBkaXN0YW5jZSAoSU5GTEFURV9TVFJJQ1QpICovCiAgdGhpcy5jaGVjayA9IDA7ICAgICAgICAgICAgIC8qIHByb3RlY3RlZCBjb3B5IG9mIGNoZWNrIHZhbHVlICovCiAgdGhpcy50b3RhbCA9IDA7ICAgICAgICAgICAgIC8qIHByb3RlY3RlZCBjb3B5IG9mIG91dHB1dCBjb3VudCAqLwogIC8vIFRPRE86IG1heSBiZSB7fQogIHRoaXMuaGVhZCA9IG51bGw7ICAgICAgICAgICAvKiB3aGVyZSB0byBzYXZlIGd6aXAgaGVhZGVyIGluZm9ybWF0aW9uICovCgogIC8qIHNsaWRpbmcgd2luZG93ICovCiAgdGhpcy53Yml0cyA9IDA7ICAgICAgICAgICAgIC8qIGxvZyBiYXNlIDIgb2YgcmVxdWVzdGVkIHdpbmRvdyBzaXplICovCiAgdGhpcy53c2l6ZSA9IDA7ICAgICAgICAgICAgIC8qIHdpbmRvdyBzaXplIG9yIHplcm8gaWYgbm90IHVzaW5nIHdpbmRvdyAqLwogIHRoaXMud2hhdmUgPSAwOyAgICAgICAgICAgICAvKiB2YWxpZCBieXRlcyBpbiB0aGUgd2luZG93ICovCiAgdGhpcy53bmV4dCA9IDA7ICAgICAgICAgICAgIC8qIHdpbmRvdyB3cml0ZSBpbmRleCAqLwogIHRoaXMud2luZG93ID0gbnVsbDsgICAgICAgICAvKiBhbGxvY2F0ZWQgc2xpZGluZyB3aW5kb3csIGlmIG5lZWRlZCAqLwoKICAvKiBiaXQgYWNjdW11bGF0b3IgKi8KICB0aGlzLmhvbGQgPSAwOyAgICAgICAgICAgICAgLyogaW5wdXQgYml0IGFjY3VtdWxhdG9yICovCiAgdGhpcy5iaXRzID0gMDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBiaXRzIGluICJpbiIgKi8KCiAgLyogZm9yIHN0cmluZyBhbmQgc3RvcmVkIGJsb2NrIGNvcHlpbmcgKi8KICB0aGlzLmxlbmd0aCA9IDA7ICAgICAgICAgICAgLyogbGl0ZXJhbCBvciBsZW5ndGggb2YgZGF0YSB0byBjb3B5ICovCiAgdGhpcy5vZmZzZXQgPSAwOyAgICAgICAgICAgIC8qIGRpc3RhbmNlIGJhY2sgdG8gY29weSBzdHJpbmcgZnJvbSAqLwoKICAvKiBmb3IgdGFibGUgYW5kIGNvZGUgZGVjb2RpbmcgKi8KICB0aGlzLmV4dHJhID0gMDsgICAgICAgICAgICAgLyogZXh0cmEgYml0cyBuZWVkZWQgKi8KCiAgLyogZml4ZWQgYW5kIGR5bmFtaWMgY29kZSB0YWJsZXMgKi8KICB0aGlzLmxlbmNvZGUgPSBudWxsOyAgICAgICAgICAvKiBzdGFydGluZyB0YWJsZSBmb3IgbGVuZ3RoL2xpdGVyYWwgY29kZXMgKi8KICB0aGlzLmRpc3Rjb2RlID0gbnVsbDsgICAgICAgICAvKiBzdGFydGluZyB0YWJsZSBmb3IgZGlzdGFuY2UgY29kZXMgKi8KICB0aGlzLmxlbmJpdHMgPSAwOyAgICAgICAgICAgLyogaW5kZXggYml0cyBmb3IgbGVuY29kZSAqLwogIHRoaXMuZGlzdGJpdHMgPSAwOyAgICAgICAgICAvKiBpbmRleCBiaXRzIGZvciBkaXN0Y29kZSAqLwoKICAvKiBkeW5hbWljIHRhYmxlIGJ1aWxkaW5nICovCiAgdGhpcy5uY29kZSA9IDA7ICAgICAgICAgICAgIC8qIG51bWJlciBvZiBjb2RlIGxlbmd0aCBjb2RlIGxlbmd0aHMgKi8KICB0aGlzLm5sZW4gPSAwOyAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGxlbmd0aCBjb2RlIGxlbmd0aHMgKi8KICB0aGlzLm5kaXN0ID0gMDsgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGRpc3RhbmNlIGNvZGUgbGVuZ3RocyAqLwogIHRoaXMuaGF2ZSA9IDA7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY29kZSBsZW5ndGhzIGluIGxlbnNbXSAqLwogIHRoaXMubmV4dCA9IG51bGw7ICAgICAgICAgICAgICAvKiBuZXh0IGF2YWlsYWJsZSBzcGFjZSBpbiBjb2Rlc1tdICovCgogIHRoaXMubGVucyA9IG5ldyB1dGlscy5CdWYxNigzMjApOyAvKiB0ZW1wb3Jhcnkgc3RvcmFnZSBmb3IgY29kZSBsZW5ndGhzICovCiAgdGhpcy53b3JrID0gbmV3IHV0aWxzLkJ1ZjE2KDI4OCk7IC8qIHdvcmsgYXJlYSBmb3IgY29kZSB0YWJsZSBidWlsZGluZyAqLwoKICAvKgogICBiZWNhdXNlIHdlIGRvbid0IGhhdmUgcG9pbnRlcnMgaW4ganMsIHdlIHVzZSBsZW5jb2RlIGFuZCBkaXN0Y29kZSBkaXJlY3RseQogICBhcyBidWZmZXJzIHNvIHdlIGRvbid0IG5lZWQgY29kZXMKICAqLwogIC8vdGhpcy5jb2RlcyA9IG5ldyB1dGlscy5CdWYzMihFTk9VR0gpOyAgICAgICAvKiBzcGFjZSBmb3IgY29kZSB0YWJsZXMgKi8KICB0aGlzLmxlbmR5biA9IG51bGw7ICAgICAgICAgICAgICAvKiBkeW5hbWljIHRhYmxlIGZvciBsZW5ndGgvbGl0ZXJhbCBjb2RlcyAoSlMgc3BlY2lmaWMpICovCiAgdGhpcy5kaXN0ZHluID0gbnVsbDsgICAgICAgICAgICAgLyogZHluYW1pYyB0YWJsZSBmb3IgZGlzdGFuY2UgY29kZXMgKEpTIHNwZWNpZmljKSAqLwogIHRoaXMuc2FuZSA9IDA7ICAgICAgICAgICAgICAgICAgIC8qIGlmIGZhbHNlLCBhbGxvdyBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgKi8KICB0aGlzLmJhY2sgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBiaXRzIGJhY2sgb2YgbGFzdCB1bnByb2Nlc3NlZCBsZW5ndGgvbGl0ICovCiAgdGhpcy53YXMgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogaW5pdGlhbCBsZW5ndGggb2YgbWF0Y2ggKi8KfQoKZnVuY3Rpb24gaW5mbGF0ZVJlc2V0S2VlcChzdHJtKSB7CiAgdmFyIHN0YXRlOwoKICBpZiAoIXN0cm0gfHwgIXN0cm0uc3RhdGUpIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOyB9CiAgc3RhdGUgPSBzdHJtLnN0YXRlOwogIHN0cm0udG90YWxfaW4gPSBzdHJtLnRvdGFsX291dCA9IHN0YXRlLnRvdGFsID0gMDsKICBzdHJtLm1zZyA9ICcnOyAvKlpfTlVMTCovCiAgaWYgKHN0YXRlLndyYXApIHsgICAgICAgLyogdG8gc3VwcG9ydCBpbGwtY29uY2VpdmVkIEphdmEgdGVzdCBzdWl0ZSAqLwogICAgc3RybS5hZGxlciA9IHN0YXRlLndyYXAgJiAxOwogIH0KICBzdGF0ZS5tb2RlID0gSEVBRDsKICBzdGF0ZS5sYXN0ID0gMDsKICBzdGF0ZS5oYXZlZGljdCA9IDA7CiAgc3RhdGUuZG1heCA9IDMyNzY4OwogIHN0YXRlLmhlYWQgPSBudWxsLypaX05VTEwqLzsKICBzdGF0ZS5ob2xkID0gMDsKICBzdGF0ZS5iaXRzID0gMDsKICAvL3N0YXRlLmxlbmNvZGUgPSBzdGF0ZS5kaXN0Y29kZSA9IHN0YXRlLm5leHQgPSBzdGF0ZS5jb2RlczsKICBzdGF0ZS5sZW5jb2RlID0gc3RhdGUubGVuZHluID0gbmV3IHV0aWxzLkJ1ZjMyKEVOT1VHSF9MRU5TKTsKICBzdGF0ZS5kaXN0Y29kZSA9IHN0YXRlLmRpc3RkeW4gPSBuZXcgdXRpbHMuQnVmMzIoRU5PVUdIX0RJU1RTKTsKCiAgc3RhdGUuc2FuZSA9IDE7CiAgc3RhdGUuYmFjayA9IC0xOwogIC8vVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiByZXNldFxuIikpOwogIHJldHVybiBaX09LOwp9CgpmdW5jdGlvbiBpbmZsYXRlUmVzZXQoc3RybSkgewogIHZhciBzdGF0ZTsKCiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfQogIHN0YXRlID0gc3RybS5zdGF0ZTsKICBzdGF0ZS53c2l6ZSA9IDA7CiAgc3RhdGUud2hhdmUgPSAwOwogIHN0YXRlLnduZXh0ID0gMDsKICByZXR1cm4gaW5mbGF0ZVJlc2V0S2VlcChzdHJtKTsKCn0KCmZ1bmN0aW9uIGluZmxhdGVSZXNldDIoc3RybSwgd2luZG93Qml0cykgewogIHZhciB3cmFwOwogIHZhciBzdGF0ZTsKCiAgLyogZ2V0IHRoZSBzdGF0ZSAqLwogIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSkgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH0KICBzdGF0ZSA9IHN0cm0uc3RhdGU7CgogIC8qIGV4dHJhY3Qgd3JhcCByZXF1ZXN0IGZyb20gd2luZG93Qml0cyBwYXJhbWV0ZXIgKi8KICBpZiAod2luZG93Qml0cyA8IDApIHsKICAgIHdyYXAgPSAwOwogICAgd2luZG93Qml0cyA9IC13aW5kb3dCaXRzOwogIH0KICBlbHNlIHsKICAgIHdyYXAgPSAod2luZG93Qml0cyA+PiA0KSArIDE7CiAgICBpZiAod2luZG93Qml0cyA8IDQ4KSB7CiAgICAgIHdpbmRvd0JpdHMgJj0gMTU7CiAgICB9CiAgfQoKICAvKiBzZXQgbnVtYmVyIG9mIHdpbmRvdyBiaXRzLCBmcmVlIHdpbmRvdyBpZiBkaWZmZXJlbnQgKi8KICBpZiAod2luZG93Qml0cyAmJiAod2luZG93Qml0cyA8IDggfHwgd2luZG93Qml0cyA+IDE1KSkgewogICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogIH0KICBpZiAoc3RhdGUud2luZG93ICE9PSBudWxsICYmIHN0YXRlLndiaXRzICE9PSB3aW5kb3dCaXRzKSB7CiAgICBzdGF0ZS53aW5kb3cgPSBudWxsOwogIH0KCiAgLyogdXBkYXRlIHN0YXRlIGFuZCByZXNldCB0aGUgcmVzdCBvZiBpdCAqLwogIHN0YXRlLndyYXAgPSB3cmFwOwogIHN0YXRlLndiaXRzID0gd2luZG93Qml0czsKICByZXR1cm4gaW5mbGF0ZVJlc2V0KHN0cm0pOwp9CgpmdW5jdGlvbiBpbmZsYXRlSW5pdDIoc3RybSwgd2luZG93Qml0cykgewogIHZhciByZXQ7CiAgdmFyIHN0YXRlOwoKICBpZiAoIXN0cm0pIHsgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOyB9CiAgLy9zdHJtLm1zZyA9IFpfTlVMTDsgICAgICAgICAgICAgICAgIC8qIGluIGNhc2Ugd2UgcmV0dXJuIGFuIGVycm9yICovCgogIHN0YXRlID0gbmV3IEluZmxhdGVTdGF0ZSgpOwoKICAvL2lmIChzdGF0ZSA9PT0gWl9OVUxMKSByZXR1cm4gWl9NRU1fRVJST1I7CiAgLy9UcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6IGFsbG9jYXRlZFxuIikpOwogIHN0cm0uc3RhdGUgPSBzdGF0ZTsKICBzdGF0ZS53aW5kb3cgPSBudWxsLypaX05VTEwqLzsKICByZXQgPSBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpOwogIGlmIChyZXQgIT09IFpfT0spIHsKICAgIHN0cm0uc3RhdGUgPSBudWxsLypaX05VTEwqLzsKICB9CiAgcmV0dXJuIHJldDsKfQoKZnVuY3Rpb24gaW5mbGF0ZUluaXQoc3RybSkgewogIHJldHVybiBpbmZsYXRlSW5pdDIoc3RybSwgREVGX1dCSVRTKTsKfQoKCi8qCiBSZXR1cm4gc3RhdGUgd2l0aCBsZW5ndGggYW5kIGRpc3RhbmNlIGRlY29kaW5nIHRhYmxlcyBhbmQgaW5kZXggc2l6ZXMgc2V0IHRvCiBmaXhlZCBjb2RlIGRlY29kaW5nLiAgTm9ybWFsbHkgdGhpcyByZXR1cm5zIGZpeGVkIHRhYmxlcyBmcm9tIGluZmZpeGVkLmguCiBJZiBCVUlMREZJWEVEIGlzIGRlZmluZWQsIHRoZW4gaW5zdGVhZCB0aGlzIHJvdXRpbmUgYnVpbGRzIHRoZSB0YWJsZXMgdGhlCiBmaXJzdCB0aW1lIGl0J3MgY2FsbGVkLCBhbmQgcmV0dXJucyB0aG9zZSB0YWJsZXMgdGhlIGZpcnN0IHRpbWUgYW5kCiB0aGVyZWFmdGVyLiAgVGhpcyByZWR1Y2VzIHRoZSBzaXplIG9mIHRoZSBjb2RlIGJ5IGFib3V0IDJLIGJ5dGVzLCBpbgogZXhjaGFuZ2UgZm9yIGEgbGl0dGxlIGV4ZWN1dGlvbiB0aW1lLiAgSG93ZXZlciwgQlVJTERGSVhFRCBzaG91bGQgbm90IGJlCiB1c2VkIGZvciB0aHJlYWRlZCBhcHBsaWNhdGlvbnMsIHNpbmNlIHRoZSByZXdyaXRpbmcgb2YgdGhlIHRhYmxlcyBhbmQgdmlyZ2luCiBtYXkgbm90IGJlIHRocmVhZC1zYWZlLgogKi8KdmFyIHZpcmdpbiA9IHRydWU7Cgp2YXIgbGVuZml4LCBkaXN0Zml4OyAvLyBXZSBoYXZlIG5vIHBvaW50ZXJzIGluIEpTLCBzbyBrZWVwIHRhYmxlcyBzZXBhcmF0ZQoKZnVuY3Rpb24gZml4ZWR0YWJsZXMoc3RhdGUpIHsKICAvKiBidWlsZCBmaXhlZCBodWZmbWFuIHRhYmxlcyBpZiBmaXJzdCBjYWxsIChtYXkgbm90IGJlIHRocmVhZCBzYWZlKSAqLwogIGlmICh2aXJnaW4pIHsKICAgIHZhciBzeW07CgogICAgbGVuZml4ID0gbmV3IHV0aWxzLkJ1ZjMyKDUxMik7CiAgICBkaXN0Zml4ID0gbmV3IHV0aWxzLkJ1ZjMyKDMyKTsKCiAgICAvKiBsaXRlcmFsL2xlbmd0aCB0YWJsZSAqLwogICAgc3ltID0gMDsKICAgIHdoaWxlIChzeW0gPCAxNDQpIHsgc3RhdGUubGVuc1tzeW0rK10gPSA4OyB9CiAgICB3aGlsZSAoc3ltIDwgMjU2KSB7IHN0YXRlLmxlbnNbc3ltKytdID0gOTsgfQogICAgd2hpbGUgKHN5bSA8IDI4MCkgeyBzdGF0ZS5sZW5zW3N5bSsrXSA9IDc7IH0KICAgIHdoaWxlIChzeW0gPCAyODgpIHsgc3RhdGUubGVuc1tzeW0rK10gPSA4OyB9CgogICAgaW5mbGF0ZV90YWJsZShMRU5TLCAgc3RhdGUubGVucywgMCwgMjg4LCBsZW5maXgsICAgMCwgc3RhdGUud29yaywge2JpdHM6IDl9KTsKCiAgICAvKiBkaXN0YW5jZSB0YWJsZSAqLwogICAgc3ltID0gMDsKICAgIHdoaWxlIChzeW0gPCAzMikgeyBzdGF0ZS5sZW5zW3N5bSsrXSA9IDU7IH0KCiAgICBpbmZsYXRlX3RhYmxlKERJU1RTLCBzdGF0ZS5sZW5zLCAwLCAzMiwgICBkaXN0Zml4LCAwLCBzdGF0ZS53b3JrLCB7Yml0czogNX0pOwoKICAgIC8qIGRvIHRoaXMganVzdCBvbmNlICovCiAgICB2aXJnaW4gPSBmYWxzZTsKICB9CgogIHN0YXRlLmxlbmNvZGUgPSBsZW5maXg7CiAgc3RhdGUubGVuYml0cyA9IDk7CiAgc3RhdGUuZGlzdGNvZGUgPSBkaXN0Zml4OwogIHN0YXRlLmRpc3RiaXRzID0gNTsKfQoKCi8qCiBVcGRhdGUgdGhlIHdpbmRvdyB3aXRoIHRoZSBsYXN0IHdzaXplIChub3JtYWxseSAzMkspIGJ5dGVzIHdyaXR0ZW4gYmVmb3JlCiByZXR1cm5pbmcuICBJZiB3aW5kb3cgZG9lcyBub3QgZXhpc3QgeWV0LCBjcmVhdGUgaXQuICBUaGlzIGlzIG9ubHkgY2FsbGVkCiB3aGVuIGEgd2luZG93IGlzIGFscmVhZHkgaW4gdXNlLCBvciB3aGVuIG91dHB1dCBoYXMgYmVlbiB3cml0dGVuIGR1cmluZyB0aGlzCiBpbmZsYXRlIGNhbGwsIGJ1dCB0aGUgZW5kIG9mIHRoZSBkZWZsYXRlIHN0cmVhbSBoYXMgbm90IGJlZW4gcmVhY2hlZCB5ZXQuCiBJdCBpcyBhbHNvIGNhbGxlZCB0byBjcmVhdGUgYSB3aW5kb3cgZm9yIGRpY3Rpb25hcnkgZGF0YSB3aGVuIGEgZGljdGlvbmFyeQogaXMgbG9hZGVkLgoKIFByb3ZpZGluZyBvdXRwdXQgYnVmZmVycyBsYXJnZXIgdGhhbiAzMksgdG8gaW5mbGF0ZSgpIHNob3VsZCBwcm92aWRlIGEgc3BlZWQKIGFkdmFudGFnZSwgc2luY2Ugb25seSB0aGUgbGFzdCAzMksgb2Ygb3V0cHV0IGlzIGNvcGllZCB0byB0aGUgc2xpZGluZyB3aW5kb3cKIHVwb24gcmV0dXJuIGZyb20gaW5mbGF0ZSgpLCBhbmQgc2luY2UgYWxsIGRpc3RhbmNlcyBhZnRlciB0aGUgZmlyc3QgMzJLIG9mCiBvdXRwdXQgd2lsbCBmYWxsIGluIHRoZSBvdXRwdXQgZGF0YSwgbWFraW5nIG1hdGNoIGNvcGllcyBzaW1wbGVyIGFuZCBmYXN0ZXIuCiBUaGUgYWR2YW50YWdlIG1heSBiZSBkZXBlbmRlbnQgb24gdGhlIHNpemUgb2YgdGhlIHByb2Nlc3NvcidzIGRhdGEgY2FjaGVzLgogKi8KZnVuY3Rpb24gdXBkYXRld2luZG93KHN0cm0sIHNyYywgZW5kLCBjb3B5KSB7CiAgdmFyIGRpc3Q7CiAgdmFyIHN0YXRlID0gc3RybS5zdGF0ZTsKCiAgLyogaWYgaXQgaGFzbid0IGJlZW4gZG9uZSBhbHJlYWR5LCBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHdpbmRvdyAqLwogIGlmIChzdGF0ZS53aW5kb3cgPT09IG51bGwpIHsKICAgIHN0YXRlLndzaXplID0gMSA8PCBzdGF0ZS53Yml0czsKICAgIHN0YXRlLnduZXh0ID0gMDsKICAgIHN0YXRlLndoYXZlID0gMDsKCiAgICBzdGF0ZS53aW5kb3cgPSBuZXcgdXRpbHMuQnVmOChzdGF0ZS53c2l6ZSk7CiAgfQoKICAvKiBjb3B5IHN0YXRlLT53c2l6ZSBvciBsZXNzIG91dHB1dCBieXRlcyBpbnRvIHRoZSBjaXJjdWxhciB3aW5kb3cgKi8KICBpZiAoY29weSA+PSBzdGF0ZS53c2l6ZSkgewogICAgdXRpbHMuYXJyYXlTZXQoc3RhdGUud2luZG93LHNyYywgZW5kIC0gc3RhdGUud3NpemUsIHN0YXRlLndzaXplLCAwKTsKICAgIHN0YXRlLnduZXh0ID0gMDsKICAgIHN0YXRlLndoYXZlID0gc3RhdGUud3NpemU7CiAgfQogIGVsc2UgewogICAgZGlzdCA9IHN0YXRlLndzaXplIC0gc3RhdGUud25leHQ7CiAgICBpZiAoZGlzdCA+IGNvcHkpIHsKICAgICAgZGlzdCA9IGNvcHk7CiAgICB9CiAgICAvL3ptZW1jcHkoc3RhdGUtPndpbmRvdyArIHN0YXRlLT53bmV4dCwgZW5kIC0gY29weSwgZGlzdCk7CiAgICB1dGlscy5hcnJheVNldChzdGF0ZS53aW5kb3csc3JjLCBlbmQgLSBjb3B5LCBkaXN0LCBzdGF0ZS53bmV4dCk7CiAgICBjb3B5IC09IGRpc3Q7CiAgICBpZiAoY29weSkgewogICAgICAvL3ptZW1jcHkoc3RhdGUtPndpbmRvdywgZW5kIC0gY29weSwgY29weSk7CiAgICAgIHV0aWxzLmFycmF5U2V0KHN0YXRlLndpbmRvdyxzcmMsIGVuZCAtIGNvcHksIGNvcHksIDApOwogICAgICBzdGF0ZS53bmV4dCA9IGNvcHk7CiAgICAgIHN0YXRlLndoYXZlID0gc3RhdGUud3NpemU7CiAgICB9CiAgICBlbHNlIHsKICAgICAgc3RhdGUud25leHQgKz0gZGlzdDsKICAgICAgaWYgKHN0YXRlLnduZXh0ID09PSBzdGF0ZS53c2l6ZSkgeyBzdGF0ZS53bmV4dCA9IDA7IH0KICAgICAgaWYgKHN0YXRlLndoYXZlIDwgc3RhdGUud3NpemUpIHsgc3RhdGUud2hhdmUgKz0gZGlzdDsgfQogICAgfQogIH0KICByZXR1cm4gMDsKfQoKZnVuY3Rpb24gaW5mbGF0ZShzdHJtLCBmbHVzaCkgewogIHZhciBzdGF0ZTsKICB2YXIgaW5wdXQsIG91dHB1dDsgICAgICAgICAgLy8gaW5wdXQvb3V0cHV0IGJ1ZmZlcnMKICB2YXIgbmV4dDsgICAgICAgICAgICAgICAgICAgLyogbmV4dCBpbnB1dCBJTkRFWCAqLwogIHZhciBwdXQ7ICAgICAgICAgICAgICAgICAgICAvKiBuZXh0IG91dHB1dCBJTkRFWCAqLwogIHZhciBoYXZlLCBsZWZ0OyAgICAgICAgICAgICAvKiBhdmFpbGFibGUgaW5wdXQgYW5kIG91dHB1dCAqLwogIHZhciBob2xkOyAgICAgICAgICAgICAgICAgICAvKiBiaXQgYnVmZmVyICovCiAgdmFyIGJpdHM7ICAgICAgICAgICAgICAgICAgIC8qIGJpdHMgaW4gYml0IGJ1ZmZlciAqLwogIHZhciBfaW4sIF9vdXQ7ICAgICAgICAgICAgICAvKiBzYXZlIHN0YXJ0aW5nIGF2YWlsYWJsZSBpbnB1dCBhbmQgb3V0cHV0ICovCiAgdmFyIGNvcHk7ICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBzdG9yZWQgb3IgbWF0Y2ggYnl0ZXMgdG8gY29weSAqLwogIHZhciBmcm9tOyAgICAgICAgICAgICAgICAgICAvKiB3aGVyZSB0byBjb3B5IG1hdGNoIGJ5dGVzIGZyb20gKi8KICB2YXIgZnJvbV9zb3VyY2U7CiAgdmFyIGhlcmUgPSAwOyAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgZGVjb2RpbmcgdGFibGUgZW50cnkgKi8KICB2YXIgaGVyZV9iaXRzLCBoZXJlX29wLCBoZXJlX3ZhbDsgLy8gcGFrZWQgImhlcmUiIGRlbm9ybWFsaXplZCAoSlMgc3BlY2lmaWMpCiAgLy92YXIgbGFzdDsgICAgICAgICAgICAgICAgICAgLyogcGFyZW50IHRhYmxlIGVudHJ5ICovCiAgdmFyIGxhc3RfYml0cywgbGFzdF9vcCwgbGFzdF92YWw7IC8vIHBha2VkICJsYXN0IiBkZW5vcm1hbGl6ZWQgKEpTIHNwZWNpZmljKQogIHZhciBsZW47ICAgICAgICAgICAgICAgICAgICAvKiBsZW5ndGggdG8gY29weSBmb3IgcmVwZWF0cywgYml0cyB0byBkcm9wICovCiAgdmFyIHJldDsgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiBjb2RlICovCiAgdmFyIGhidWYgPSBuZXcgdXRpbHMuQnVmOCg0KTsgICAgLyogYnVmZmVyIGZvciBnemlwIGhlYWRlciBjcmMgY2FsY3VsYXRpb24gKi8KICB2YXIgb3B0czsKCiAgdmFyIG47IC8vIHRlbXBvcmFyeSB2YXIgZm9yIE5FRURfQklUUwoKICB2YXIgb3JkZXIgPSAvKiBwZXJtdXRhdGlvbiBvZiBjb2RlIGxlbmd0aHMgKi8KICAgIFsxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1XTsKCgogIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSB8fCAhc3RybS5vdXRwdXQgfHwKICAgICAgKCFzdHJtLmlucHV0ICYmIHN0cm0uYXZhaWxfaW4gIT09IDApKSB7CiAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgfQoKICBzdGF0ZSA9IHN0cm0uc3RhdGU7CiAgaWYgKHN0YXRlLm1vZGUgPT09IFRZUEUpIHsgc3RhdGUubW9kZSA9IFRZUEVETzsgfSAgICAvKiBza2lwIGNoZWNrICovCgoKICAvLy0tLSBMT0FEKCkgLS0tCiAgcHV0ID0gc3RybS5uZXh0X291dDsKICBvdXRwdXQgPSBzdHJtLm91dHB1dDsKICBsZWZ0ID0gc3RybS5hdmFpbF9vdXQ7CiAgbmV4dCA9IHN0cm0ubmV4dF9pbjsKICBpbnB1dCA9IHN0cm0uaW5wdXQ7CiAgaGF2ZSA9IHN0cm0uYXZhaWxfaW47CiAgaG9sZCA9IHN0YXRlLmhvbGQ7CiAgYml0cyA9IHN0YXRlLmJpdHM7CiAgLy8tLS0KCiAgX2luID0gaGF2ZTsKICBfb3V0ID0gbGVmdDsKICByZXQgPSBaX09LOwoKICBpbmZfbGVhdmU6IC8vIGdvdG8gZW11bGF0aW9uCiAgZm9yICg7OykgewogICAgc3dpdGNoIChzdGF0ZS5tb2RlKSB7CiAgICBjYXNlIEhFQUQ6CiAgICAgIGlmIChzdGF0ZS53cmFwID09PSAwKSB7CiAgICAgICAgc3RhdGUubW9kZSA9IFRZUEVETzsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICAvLz09PSBORUVEQklUUygxNik7CiAgICAgIHdoaWxlIChiaXRzIDwgMTYpIHsKICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgICBoYXZlLS07CiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgYml0cyArPSA4OwogICAgICB9CiAgICAgIC8vPT09Ly8KICAgICAgaWYgKChzdGF0ZS53cmFwICYgMikgJiYgaG9sZCA9PT0gMHg4YjFmKSB7ICAvKiBnemlwIGhlYWRlciAqLwogICAgICAgIHN0YXRlLmNoZWNrID0gMC8qY3JjMzIoMEwsIFpfTlVMTCwgMCkqLzsKICAgICAgICAvLz09PSBDUkMyKHN0YXRlLmNoZWNrLCBob2xkKTsKICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDB4ZmY7CiAgICAgICAgaGJ1ZlsxXSA9IChob2xkID4+PiA4KSAmIDB4ZmY7CiAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7CiAgICAgICAgLy89PT0vLwoKICAgICAgICAvLz09PSBJTklUQklUUygpOwogICAgICAgIGhvbGQgPSAwOwogICAgICAgIGJpdHMgPSAwOwogICAgICAgIC8vPT09Ly8KICAgICAgICBzdGF0ZS5tb2RlID0gRkxBR1M7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc3RhdGUuZmxhZ3MgPSAwOyAgICAgICAgICAgLyogZXhwZWN0IHpsaWIgaGVhZGVyICovCiAgICAgIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAgICAgc3RhdGUuaGVhZC5kb25lID0gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKCEoc3RhdGUud3JhcCAmIDEpIHx8ICAgLyogY2hlY2sgaWYgemxpYiBoZWFkZXIgYWxsb3dlZCAqLwogICAgICAgICgoKGhvbGQgJiAweGZmKS8qQklUUyg4KSovIDw8IDgpICsgKGhvbGQgPj4gOCkpICUgMzEpIHsKICAgICAgICBzdHJtLm1zZyA9ICdpbmNvcnJlY3QgaGVhZGVyIGNoZWNrJzsKICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmICgoaG9sZCAmIDB4MGYpLypCSVRTKDQpKi8gIT09IFpfREVGTEFURUQpIHsKICAgICAgICBzdHJtLm1zZyA9ICd1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCc7CiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICAvLy0tLSBEUk9QQklUUyg0KSAtLS0vLwogICAgICBob2xkID4+Pj0gNDsKICAgICAgYml0cyAtPSA0OwogICAgICAvLy0tLS8vCiAgICAgIGxlbiA9IChob2xkICYgMHgwZikvKkJJVFMoNCkqLyArIDg7CiAgICAgIGlmIChzdGF0ZS53Yml0cyA9PT0gMCkgewogICAgICAgIHN0YXRlLndiaXRzID0gbGVuOwogICAgICB9CiAgICAgIGVsc2UgaWYgKGxlbiA+IHN0YXRlLndiaXRzKSB7CiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCB3aW5kb3cgc2l6ZSc7CiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzdGF0ZS5kbWF4ID0gMSA8PCBsZW47CiAgICAgIC8vVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgIHpsaWIgaGVhZGVyIG9rXG4iKSk7CiAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IDEvKmFkbGVyMzIoMEwsIFpfTlVMTCwgMCkqLzsKICAgICAgc3RhdGUubW9kZSA9IGhvbGQgJiAweDIwMCA/IERJQ1RJRCA6IFRZUEU7CiAgICAgIC8vPT09IElOSVRCSVRTKCk7CiAgICAgIGhvbGQgPSAwOwogICAgICBiaXRzID0gMDsKICAgICAgLy89PT0vLwogICAgICBicmVhazsKICAgIGNhc2UgRkxBR1M6CiAgICAgIC8vPT09IE5FRURCSVRTKDE2KTsgKi8KICAgICAgd2hpbGUgKGJpdHMgPCAxNikgewogICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfQogICAgICAgIGhhdmUtLTsKICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICBiaXRzICs9IDg7CiAgICAgIH0KICAgICAgLy89PT0vLwogICAgICBzdGF0ZS5mbGFncyA9IGhvbGQ7CiAgICAgIGlmICgoc3RhdGUuZmxhZ3MgJiAweGZmKSAhPT0gWl9ERUZMQVRFRCkgewogICAgICAgIHN0cm0ubXNnID0gJ3Vua25vd24gY29tcHJlc3Npb24gbWV0aG9kJzsKICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4ZTAwMCkgewogICAgICAgIHN0cm0ubXNnID0gJ3Vua25vd24gaGVhZGVyIGZsYWdzIHNldCc7CiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgIHN0YXRlLmhlYWQudGV4dCA9ICgoaG9sZCA+PiA4KSAmIDEpOwogICAgICB9CiAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDIwMCkgewogICAgICAgIC8vPT09IENSQzIoc3RhdGUuY2hlY2ssIGhvbGQpOwogICAgICAgIGhidWZbMF0gPSBob2xkICYgMHhmZjsKICAgICAgICBoYnVmWzFdID0gKGhvbGQgPj4+IDgpICYgMHhmZjsKICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBoYnVmLCAyLCAwKTsKICAgICAgICAvLz09PS8vCiAgICAgIH0KICAgICAgLy89PT0gSU5JVEJJVFMoKTsKICAgICAgaG9sZCA9IDA7CiAgICAgIGJpdHMgPSAwOwogICAgICAvLz09PS8vCiAgICAgIHN0YXRlLm1vZGUgPSBUSU1FOwogICAgICAvKiBmYWxscyB0aHJvdWdoICovCiAgICBjYXNlIFRJTUU6CiAgICAgIC8vPT09IE5FRURCSVRTKDMyKTsgKi8KICAgICAgd2hpbGUgKGJpdHMgPCAzMikgewogICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfQogICAgICAgIGhhdmUtLTsKICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICBiaXRzICs9IDg7CiAgICAgIH0KICAgICAgLy89PT0vLwogICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgIHN0YXRlLmhlYWQudGltZSA9IGhvbGQ7CiAgICAgIH0KICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwMjAwKSB7CiAgICAgICAgLy89PT0gQ1JDNChzdGF0ZS5jaGVjaywgaG9sZCkKICAgICAgICBoYnVmWzBdID0gaG9sZCAmIDB4ZmY7CiAgICAgICAgaGJ1ZlsxXSA9IChob2xkID4+PiA4KSAmIDB4ZmY7CiAgICAgICAgaGJ1ZlsyXSA9IChob2xkID4+PiAxNikgJiAweGZmOwogICAgICAgIGhidWZbM10gPSAoaG9sZCA+Pj4gMjQpICYgMHhmZjsKICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBoYnVmLCA0LCAwKTsKICAgICAgICAvLz09PQogICAgICB9CiAgICAgIC8vPT09IElOSVRCSVRTKCk7CiAgICAgIGhvbGQgPSAwOwogICAgICBiaXRzID0gMDsKICAgICAgLy89PT0vLwogICAgICBzdGF0ZS5tb2RlID0gT1M7CiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KICAgIGNhc2UgT1M6CiAgICAgIC8vPT09IE5FRURCSVRTKDE2KTsgKi8KICAgICAgd2hpbGUgKGJpdHMgPCAxNikgewogICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfQogICAgICAgIGhhdmUtLTsKICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICBiaXRzICs9IDg7CiAgICAgIH0KICAgICAgLy89PT0vLwogICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgIHN0YXRlLmhlYWQueGZsYWdzID0gKGhvbGQgJiAweGZmKTsKICAgICAgICBzdGF0ZS5oZWFkLm9zID0gKGhvbGQgPj4gOCk7CiAgICAgIH0KICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwMjAwKSB7CiAgICAgICAgLy89PT0gQ1JDMihzdGF0ZS5jaGVjaywgaG9sZCk7CiAgICAgICAgaGJ1ZlswXSA9IGhvbGQgJiAweGZmOwogICAgICAgIGhidWZbMV0gPSAoaG9sZCA+Pj4gOCkgJiAweGZmOwogICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGhidWYsIDIsIDApOwogICAgICAgIC8vPT09Ly8KICAgICAgfQogICAgICAvLz09PSBJTklUQklUUygpOwogICAgICBob2xkID0gMDsKICAgICAgYml0cyA9IDA7CiAgICAgIC8vPT09Ly8KICAgICAgc3RhdGUubW9kZSA9IEVYTEVOOwogICAgICAvKiBmYWxscyB0aHJvdWdoICovCiAgICBjYXNlIEVYTEVOOgogICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDA0MDApIHsKICAgICAgICAvLz09PSBORUVEQklUUygxNik7ICovCiAgICAgICAgd2hpbGUgKGJpdHMgPCAxNikgewogICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAgICAgICBoYXZlLS07CiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICB9CiAgICAgICAgLy89PT0vLwogICAgICAgIHN0YXRlLmxlbmd0aCA9IGhvbGQ7CiAgICAgICAgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICAgIHN0YXRlLmhlYWQuZXh0cmFfbGVuID0gaG9sZDsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwMjAwKSB7CiAgICAgICAgICAvLz09PSBDUkMyKHN0YXRlLmNoZWNrLCBob2xkKTsKICAgICAgICAgIGhidWZbMF0gPSBob2xkICYgMHhmZjsKICAgICAgICAgIGhidWZbMV0gPSAoaG9sZCA+Pj4gOCkgJiAweGZmOwogICAgICAgICAgc3RhdGUuY2hlY2sgPSBjcmMzMihzdGF0ZS5jaGVjaywgaGJ1ZiwgMiwgMCk7CiAgICAgICAgICAvLz09PS8vCiAgICAgICAgfQogICAgICAgIC8vPT09IElOSVRCSVRTKCk7CiAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgYml0cyA9IDA7CiAgICAgICAgLy89PT0vLwogICAgICB9CiAgICAgIGVsc2UgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICBzdGF0ZS5oZWFkLmV4dHJhID0gbnVsbC8qWl9OVUxMKi87CiAgICAgIH0KICAgICAgc3RhdGUubW9kZSA9IEVYVFJBOwogICAgICAvKiBmYWxscyB0aHJvdWdoICovCiAgICBjYXNlIEVYVFJBOgogICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDA0MDApIHsKICAgICAgICBjb3B5ID0gc3RhdGUubGVuZ3RoOwogICAgICAgIGlmIChjb3B5ID4gaGF2ZSkgeyBjb3B5ID0gaGF2ZTsgfQogICAgICAgIGlmIChjb3B5KSB7CiAgICAgICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgICAgICBsZW4gPSBzdGF0ZS5oZWFkLmV4dHJhX2xlbiAtIHN0YXRlLmxlbmd0aDsKICAgICAgICAgICAgaWYgKCFzdGF0ZS5oZWFkLmV4dHJhKSB7CiAgICAgICAgICAgICAgLy8gVXNlIHVudHlwZWQgYXJyYXkgZm9yIG1vcmUgY29udmVuaWVuZCBwcm9jZXNzaW5nIGxhdGVyCiAgICAgICAgICAgICAgc3RhdGUuaGVhZC5leHRyYSA9IG5ldyBBcnJheShzdGF0ZS5oZWFkLmV4dHJhX2xlbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdXRpbHMuYXJyYXlTZXQoCiAgICAgICAgICAgICAgc3RhdGUuaGVhZC5leHRyYSwKICAgICAgICAgICAgICBpbnB1dCwKICAgICAgICAgICAgICBuZXh0LAogICAgICAgICAgICAgIC8vIGV4dHJhIGZpZWxkIGlzIGxpbWl0ZWQgdG8gNjU1MzYgYnl0ZXMKICAgICAgICAgICAgICAvLyAtIG5vIG5lZWQgZm9yIGFkZGl0aW9uYWwgc2l6ZSBjaGVjawogICAgICAgICAgICAgIGNvcHksCiAgICAgICAgICAgICAgLypsZW4gKyBjb3B5ID4gc3RhdGUuaGVhZC5leHRyYV9tYXggLSBsZW4gPyBzdGF0ZS5oZWFkLmV4dHJhX21heCA6IGNvcHksKi8KICAgICAgICAgICAgICBsZW4KICAgICAgICAgICAgKTsKICAgICAgICAgICAgLy96bWVtY3B5KHN0YXRlLmhlYWQuZXh0cmEgKyBsZW4sIG5leHQsCiAgICAgICAgICAgIC8vICAgICAgICBsZW4gKyBjb3B5ID4gc3RhdGUuaGVhZC5leHRyYV9tYXggPwogICAgICAgICAgICAvLyAgICAgICAgc3RhdGUuaGVhZC5leHRyYV9tYXggLSBsZW4gOiBjb3B5KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDIwMCkgewogICAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBpbnB1dCwgY29weSwgbmV4dCk7CiAgICAgICAgICB9CiAgICAgICAgICBoYXZlIC09IGNvcHk7CiAgICAgICAgICBuZXh0ICs9IGNvcHk7CiAgICAgICAgICBzdGF0ZS5sZW5ndGggLT0gY29weTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlLmxlbmd0aCkgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgfQogICAgICBzdGF0ZS5sZW5ndGggPSAwOwogICAgICBzdGF0ZS5tb2RlID0gTkFNRTsKICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgY2FzZSBOQU1FOgogICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDA4MDApIHsKICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgICBjb3B5ID0gMDsKICAgICAgICBkbyB7CiAgICAgICAgICAvLyBUT0RPOiAyIG9yIDEgYnl0ZXM/CiAgICAgICAgICBsZW4gPSBpbnB1dFtuZXh0ICsgY29weSsrXTsKICAgICAgICAgIC8qIHVzZSBjb25zdGFudCBsaW1pdCBiZWNhdXNlIGluIGpzIHdlIHNob3VsZCBub3QgcHJlYWxsb2NhdGUgbWVtb3J5ICovCiAgICAgICAgICBpZiAoc3RhdGUuaGVhZCAmJiBsZW4gJiYKICAgICAgICAgICAgICAoc3RhdGUubGVuZ3RoIDwgNjU1MzYgLypzdGF0ZS5oZWFkLm5hbWVfbWF4Ki8pKSB7CiAgICAgICAgICAgIHN0YXRlLmhlYWQubmFtZSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxlbik7CiAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAobGVuICYmIGNvcHkgPCBoYXZlKTsKCiAgICAgICAgaWYgKHN0YXRlLmZsYWdzICYgMHgwMjAwKSB7CiAgICAgICAgICBzdGF0ZS5jaGVjayA9IGNyYzMyKHN0YXRlLmNoZWNrLCBpbnB1dCwgY29weSwgbmV4dCk7CiAgICAgICAgfQogICAgICAgIGhhdmUgLT0gY29weTsKICAgICAgICBuZXh0ICs9IGNvcHk7CiAgICAgICAgaWYgKGxlbikgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgfQogICAgICBlbHNlIGlmIChzdGF0ZS5oZWFkKSB7CiAgICAgICAgc3RhdGUuaGVhZC5uYW1lID0gbnVsbDsKICAgICAgfQogICAgICBzdGF0ZS5sZW5ndGggPSAwOwogICAgICBzdGF0ZS5tb2RlID0gQ09NTUVOVDsKICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgY2FzZSBDT01NRU5UOgogICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDEwMDApIHsKICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgICBjb3B5ID0gMDsKICAgICAgICBkbyB7CiAgICAgICAgICBsZW4gPSBpbnB1dFtuZXh0ICsgY29weSsrXTsKICAgICAgICAgIC8qIHVzZSBjb25zdGFudCBsaW1pdCBiZWNhdXNlIGluIGpzIHdlIHNob3VsZCBub3QgcHJlYWxsb2NhdGUgbWVtb3J5ICovCiAgICAgICAgICBpZiAoc3RhdGUuaGVhZCAmJiBsZW4gJiYKICAgICAgICAgICAgICAoc3RhdGUubGVuZ3RoIDwgNjU1MzYgLypzdGF0ZS5oZWFkLmNvbW1fbWF4Ki8pKSB7CiAgICAgICAgICAgIHN0YXRlLmhlYWQuY29tbWVudCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxlbik7CiAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAobGVuICYmIGNvcHkgPCBoYXZlKTsKICAgICAgICBpZiAoc3RhdGUuZmxhZ3MgJiAweDAyMDApIHsKICAgICAgICAgIHN0YXRlLmNoZWNrID0gY3JjMzIoc3RhdGUuY2hlY2ssIGlucHV0LCBjb3B5LCBuZXh0KTsKICAgICAgICB9CiAgICAgICAgaGF2ZSAtPSBjb3B5OwogICAgICAgIG5leHQgKz0gY29weTsKICAgICAgICBpZiAobGVuKSB7IGJyZWFrIGluZl9sZWF2ZTsgfQogICAgICB9CiAgICAgIGVsc2UgaWYgKHN0YXRlLmhlYWQpIHsKICAgICAgICBzdGF0ZS5oZWFkLmNvbW1lbnQgPSBudWxsOwogICAgICB9CiAgICAgIHN0YXRlLm1vZGUgPSBIQ1JDOwogICAgICAvKiBmYWxscyB0aHJvdWdoICovCiAgICBjYXNlIEhDUkM6CiAgICAgIGlmIChzdGF0ZS5mbGFncyAmIDB4MDIwMCkgewogICAgICAgIC8vPT09IE5FRURCSVRTKDE2KTsgKi8KICAgICAgICB3aGlsZSAoYml0cyA8IDE2KSB7CiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgYml0cyArPSA4OwogICAgICAgIH0KICAgICAgICAvLz09PS8vCiAgICAgICAgaWYgKGhvbGQgIT09IChzdGF0ZS5jaGVjayAmIDB4ZmZmZikpIHsKICAgICAgICAgIHN0cm0ubXNnID0gJ2hlYWRlciBjcmMgbWlzbWF0Y2gnOwogICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvLz09PSBJTklUQklUUygpOwogICAgICAgIGhvbGQgPSAwOwogICAgICAgIGJpdHMgPSAwOwogICAgICAgIC8vPT09Ly8KICAgICAgfQogICAgICBpZiAoc3RhdGUuaGVhZCkgewogICAgICAgIHN0YXRlLmhlYWQuaGNyYyA9ICgoc3RhdGUuZmxhZ3MgPj4gOSkgJiAxKTsKICAgICAgICBzdGF0ZS5oZWFkLmRvbmUgPSB0cnVlOwogICAgICB9CiAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IDAgLypjcmMzMigwTCwgWl9OVUxMLCAwKSovOwogICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAgYnJlYWs7CiAgICBjYXNlIERJQ1RJRDoKICAgICAgLy89PT0gTkVFREJJVFMoMzIpOyAqLwogICAgICB3aGlsZSAoYml0cyA8IDMyKSB7CiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAgICAgaGF2ZS0tOwogICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgIGJpdHMgKz0gODsKICAgICAgfQogICAgICAvLz09PS8vCiAgICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IFpTV0FQMzIoaG9sZCk7CiAgICAgIC8vPT09IElOSVRCSVRTKCk7CiAgICAgIGhvbGQgPSAwOwogICAgICBiaXRzID0gMDsKICAgICAgLy89PT0vLwogICAgICBzdGF0ZS5tb2RlID0gRElDVDsKICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgY2FzZSBESUNUOgogICAgICBpZiAoc3RhdGUuaGF2ZWRpY3QgPT09IDApIHsKICAgICAgICAvLy0tLSBSRVNUT1JFKCkgLS0tCiAgICAgICAgc3RybS5uZXh0X291dCA9IHB1dDsKICAgICAgICBzdHJtLmF2YWlsX291dCA9IGxlZnQ7CiAgICAgICAgc3RybS5uZXh0X2luID0gbmV4dDsKICAgICAgICBzdHJtLmF2YWlsX2luID0gaGF2ZTsKICAgICAgICBzdGF0ZS5ob2xkID0gaG9sZDsKICAgICAgICBzdGF0ZS5iaXRzID0gYml0czsKICAgICAgICAvLy0tLQogICAgICAgIHJldHVybiBaX05FRURfRElDVDsKICAgICAgfQogICAgICBzdHJtLmFkbGVyID0gc3RhdGUuY2hlY2sgPSAxLyphZGxlcjMyKDBMLCBaX05VTEwsIDApKi87CiAgICAgIHN0YXRlLm1vZGUgPSBUWVBFOwogICAgICAvKiBmYWxscyB0aHJvdWdoICovCiAgICBjYXNlIFRZUEU6CiAgICAgIGlmIChmbHVzaCA9PT0gWl9CTE9DSyB8fCBmbHVzaCA9PT0gWl9UUkVFUykgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgY2FzZSBUWVBFRE86CiAgICAgIGlmIChzdGF0ZS5sYXN0KSB7CiAgICAgICAgLy8tLS0gQllURUJJVFMoKSAtLS0vLwogICAgICAgIGhvbGQgPj4+PSBiaXRzICYgNzsKICAgICAgICBiaXRzIC09IGJpdHMgJiA3OwogICAgICAgIC8vLS0tLy8KICAgICAgICBzdGF0ZS5tb2RlID0gQ0hFQ0s7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgLy89PT0gTkVFREJJVFMoMyk7ICovCiAgICAgIHdoaWxlIChiaXRzIDwgMykgewogICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfQogICAgICAgIGhhdmUtLTsKICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICBiaXRzICs9IDg7CiAgICAgIH0KICAgICAgLy89PT0vLwogICAgICBzdGF0ZS5sYXN0ID0gKGhvbGQgJiAweDAxKS8qQklUUygxKSovOwogICAgICAvLy0tLSBEUk9QQklUUygxKSAtLS0vLwogICAgICBob2xkID4+Pj0gMTsKICAgICAgYml0cyAtPSAxOwogICAgICAvLy0tLS8vCgogICAgICBzd2l0Y2ggKChob2xkICYgMHgwMykvKkJJVFMoMikqLykgewogICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdG9yZWQgYmxvY2sgKi8KICAgICAgICAvL1RyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgIHN0b3JlZCBibG9jayVzXG4iLAogICAgICAgIC8vICAgICAgICBzdGF0ZS5sYXN0ID8gIiAobGFzdCkiIDogIiIpKTsKICAgICAgICBzdGF0ZS5tb2RlID0gU1RPUkVEOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXhlZCBibG9jayAqLwogICAgICAgIGZpeGVkdGFibGVzKHN0YXRlKTsKICAgICAgICAvL1RyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgIGZpeGVkIGNvZGVzIGJsb2NrJXNcbiIsCiAgICAgICAgLy8gICAgICAgIHN0YXRlLmxhc3QgPyAiIChsYXN0KSIgOiAiIikpOwogICAgICAgIHN0YXRlLm1vZGUgPSBMRU5fOyAgICAgICAgICAgICAvKiBkZWNvZGUgY29kZXMgKi8KICAgICAgICBpZiAoZmx1c2ggPT09IFpfVFJFRVMpIHsKICAgICAgICAgIC8vLS0tIERST1BCSVRTKDIpIC0tLS8vCiAgICAgICAgICBob2xkID4+Pj0gMjsKICAgICAgICAgIGJpdHMgLT0gMjsKICAgICAgICAgIC8vLS0tLy8KICAgICAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGR5bmFtaWMgYmxvY2sgKi8KICAgICAgICAvL1RyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgIGR5bmFtaWMgY29kZXMgYmxvY2slc1xuIiwKICAgICAgICAvLyAgICAgICAgc3RhdGUubGFzdCA/ICIgKGxhc3QpIiA6ICIiKSk7CiAgICAgICAgc3RhdGUubW9kZSA9IFRBQkxFOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDM6CiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBibG9jayB0eXBlJzsKICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICB9CiAgICAgIC8vLS0tIERST1BCSVRTKDIpIC0tLS8vCiAgICAgIGhvbGQgPj4+PSAyOwogICAgICBiaXRzIC09IDI7CiAgICAgIC8vLS0tLy8KICAgICAgYnJlYWs7CiAgICBjYXNlIFNUT1JFRDoKICAgICAgLy8tLS0gQllURUJJVFMoKSAtLS0vLyAvKiBnbyB0byBieXRlIGJvdW5kYXJ5ICovCiAgICAgIGhvbGQgPj4+PSBiaXRzICYgNzsKICAgICAgYml0cyAtPSBiaXRzICYgNzsKICAgICAgLy8tLS0vLwogICAgICAvLz09PSBORUVEQklUUygzMik7ICovCiAgICAgIHdoaWxlIChiaXRzIDwgMzIpIHsKICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgICBoYXZlLS07CiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgYml0cyArPSA4OwogICAgICB9CiAgICAgIC8vPT09Ly8KICAgICAgaWYgKChob2xkICYgMHhmZmZmKSAhPT0gKChob2xkID4+PiAxNikgXiAweGZmZmYpKSB7CiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3Rocyc7CiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzdGF0ZS5sZW5ndGggPSBob2xkICYgMHhmZmZmOwogICAgICAvL1RyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgc3RvcmVkIGxlbmd0aCAldVxuIiwKICAgICAgLy8gICAgICAgIHN0YXRlLmxlbmd0aCkpOwogICAgICAvLz09PSBJTklUQklUUygpOwogICAgICBob2xkID0gMDsKICAgICAgYml0cyA9IDA7CiAgICAgIC8vPT09Ly8KICAgICAgc3RhdGUubW9kZSA9IENPUFlfOwogICAgICBpZiAoZmx1c2ggPT09IFpfVFJFRVMpIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KICAgIGNhc2UgQ09QWV86CiAgICAgIHN0YXRlLm1vZGUgPSBDT1BZOwogICAgICAvKiBmYWxscyB0aHJvdWdoICovCiAgICBjYXNlIENPUFk6CiAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7CiAgICAgIGlmIChjb3B5KSB7CiAgICAgICAgaWYgKGNvcHkgPiBoYXZlKSB7IGNvcHkgPSBoYXZlOyB9CiAgICAgICAgaWYgKGNvcHkgPiBsZWZ0KSB7IGNvcHkgPSBsZWZ0OyB9CiAgICAgICAgaWYgKGNvcHkgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAgICAgLy8tLS0gem1lbWNweShwdXQsIG5leHQsIGNvcHkpOyAtLS0KICAgICAgICB1dGlscy5hcnJheVNldChvdXRwdXQsIGlucHV0LCBuZXh0LCBjb3B5LCBwdXQpOwogICAgICAgIC8vLS0tLy8KICAgICAgICBoYXZlIC09IGNvcHk7CiAgICAgICAgbmV4dCArPSBjb3B5OwogICAgICAgIGxlZnQgLT0gY29weTsKICAgICAgICBwdXQgKz0gY29weTsKICAgICAgICBzdGF0ZS5sZW5ndGggLT0gY29weTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICAvL1RyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgc3RvcmVkIGVuZFxuIikpOwogICAgICBzdGF0ZS5tb2RlID0gVFlQRTsKICAgICAgYnJlYWs7CiAgICBjYXNlIFRBQkxFOgogICAgICAvLz09PSBORUVEQklUUygxNCk7ICovCiAgICAgIHdoaWxlIChiaXRzIDwgMTQpIHsKICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgICBoYXZlLS07CiAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgYml0cyArPSA4OwogICAgICB9CiAgICAgIC8vPT09Ly8KICAgICAgc3RhdGUubmxlbiA9IChob2xkICYgMHgxZikvKkJJVFMoNSkqLyArIDI1NzsKICAgICAgLy8tLS0gRFJPUEJJVFMoNSkgLS0tLy8KICAgICAgaG9sZCA+Pj49IDU7CiAgICAgIGJpdHMgLT0gNTsKICAgICAgLy8tLS0vLwogICAgICBzdGF0ZS5uZGlzdCA9IChob2xkICYgMHgxZikvKkJJVFMoNSkqLyArIDE7CiAgICAgIC8vLS0tIERST1BCSVRTKDUpIC0tLS8vCiAgICAgIGhvbGQgPj4+PSA1OwogICAgICBiaXRzIC09IDU7CiAgICAgIC8vLS0tLy8KICAgICAgc3RhdGUubmNvZGUgPSAoaG9sZCAmIDB4MGYpLypCSVRTKDQpKi8gKyA0OwogICAgICAvLy0tLSBEUk9QQklUUyg0KSAtLS0vLwogICAgICBob2xkID4+Pj0gNDsKICAgICAgYml0cyAtPSA0OwogICAgICAvLy0tLS8vCi8vI2lmbmRlZiBQS1pJUF9CVUdfV09SS0FST1VORAogICAgICBpZiAoc3RhdGUubmxlbiA+IDI4NiB8fCBzdGF0ZS5uZGlzdCA+IDMwKSB7CiAgICAgICAgc3RybS5tc2cgPSAndG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMnOwogICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KLy8jZW5kaWYKICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgIHRhYmxlIHNpemVzIG9rXG4iKSk7CiAgICAgIHN0YXRlLmhhdmUgPSAwOwogICAgICBzdGF0ZS5tb2RlID0gTEVOTEVOUzsKICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgY2FzZSBMRU5MRU5TOgogICAgICB3aGlsZSAoc3RhdGUuaGF2ZSA8IHN0YXRlLm5jb2RlKSB7CiAgICAgICAgLy89PT0gTkVFREJJVFMoMyk7CiAgICAgICAgd2hpbGUgKGJpdHMgPCAzKSB7CiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgYml0cyArPSA4OwogICAgICAgIH0KICAgICAgICAvLz09PS8vCiAgICAgICAgc3RhdGUubGVuc1tvcmRlcltzdGF0ZS5oYXZlKytdXSA9IChob2xkICYgMHgwNyk7Ly9CSVRTKDMpOwogICAgICAgIC8vLS0tIERST1BCSVRTKDMpIC0tLS8vCiAgICAgICAgaG9sZCA+Pj49IDM7CiAgICAgICAgYml0cyAtPSAzOwogICAgICAgIC8vLS0tLy8KICAgICAgfQogICAgICB3aGlsZSAoc3RhdGUuaGF2ZSA8IDE5KSB7CiAgICAgICAgc3RhdGUubGVuc1tvcmRlcltzdGF0ZS5oYXZlKytdXSA9IDA7CiAgICAgIH0KICAgICAgLy8gV2UgaGF2ZSBzZXBhcmF0ZSB0YWJsZXMgJiBubyBwb2ludGVycy4gMiBjb21tZW50ZWQgbGluZXMgYmVsb3cgbm90IG5lZWRlZC4KICAgICAgLy9zdGF0ZS5uZXh0ID0gc3RhdGUuY29kZXM7CiAgICAgIC8vc3RhdGUubGVuY29kZSA9IHN0YXRlLm5leHQ7CiAgICAgIC8vIFN3aXRjaCB0byB1c2UgZHluYW1pYyB0YWJsZQogICAgICBzdGF0ZS5sZW5jb2RlID0gc3RhdGUubGVuZHluOwogICAgICBzdGF0ZS5sZW5iaXRzID0gNzsKCiAgICAgIG9wdHMgPSB7Yml0czogc3RhdGUubGVuYml0c307CiAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoQ09ERVMsIHN0YXRlLmxlbnMsIDAsIDE5LCBzdGF0ZS5sZW5jb2RlLCAwLCBzdGF0ZS53b3JrLCBvcHRzKTsKICAgICAgc3RhdGUubGVuYml0cyA9IG9wdHMuYml0czsKCiAgICAgIGlmIChyZXQpIHsKICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQnOwogICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgLy9UcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgIGNvZGUgbGVuZ3RocyBva1xuIikpOwogICAgICBzdGF0ZS5oYXZlID0gMDsKICAgICAgc3RhdGUubW9kZSA9IENPREVMRU5TOwogICAgICAvKiBmYWxscyB0aHJvdWdoICovCiAgICBjYXNlIENPREVMRU5TOgogICAgICB3aGlsZSAoc3RhdGUuaGF2ZSA8IHN0YXRlLm5sZW4gKyBzdGF0ZS5uZGlzdCkgewogICAgICAgIGZvciAoOzspIHsKICAgICAgICAgIGhlcmUgPSBzdGF0ZS5sZW5jb2RlW2hvbGQgJiAoKDEgPDwgc3RhdGUubGVuYml0cykgLSAxKV07LypCSVRTKHN0YXRlLmxlbmJpdHMpKi8KICAgICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0OwogICAgICAgICAgaGVyZV9vcCA9IChoZXJlID4+PiAxNikgJiAweGZmOwogICAgICAgICAgaGVyZV92YWwgPSBoZXJlICYgMHhmZmZmOwoKICAgICAgICAgIGlmICgoaGVyZV9iaXRzKSA8PSBiaXRzKSB7IGJyZWFrOyB9CiAgICAgICAgICAvLy0tLSBQVUxMQllURSgpIC0tLS8vCiAgICAgICAgICBpZiAoaGF2ZSA9PT0gMCkgeyBicmVhayBpbmZfbGVhdmU7IH0KICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgYml0cyArPSA4OwogICAgICAgICAgLy8tLS0vLwogICAgICAgIH0KICAgICAgICBpZiAoaGVyZV92YWwgPCAxNikgewogICAgICAgICAgLy8tLS0gRFJPUEJJVFMoaGVyZS5iaXRzKSAtLS0vLwogICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0czsKICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzOwogICAgICAgICAgLy8tLS0vLwogICAgICAgICAgc3RhdGUubGVuc1tzdGF0ZS5oYXZlKytdID0gaGVyZV92YWw7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgaWYgKGhlcmVfdmFsID09PSAxNikgewogICAgICAgICAgICAvLz09PSBORUVEQklUUyhoZXJlLmJpdHMgKyAyKTsKICAgICAgICAgICAgbiA9IGhlcmVfYml0cyArIDI7CiAgICAgICAgICAgIHdoaWxlIChiaXRzIDwgbikgewogICAgICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfQogICAgICAgICAgICAgIGhhdmUtLTsKICAgICAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy89PT0vLwogICAgICAgICAgICAvLy0tLSBEUk9QQklUUyhoZXJlLmJpdHMpIC0tLS8vCiAgICAgICAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7CiAgICAgICAgICAgIGJpdHMgLT0gaGVyZV9iaXRzOwogICAgICAgICAgICAvLy0tLS8vCiAgICAgICAgICAgIGlmIChzdGF0ZS5oYXZlID09PSAwKSB7CiAgICAgICAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCc7CiAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBsZW4gPSBzdGF0ZS5sZW5zW3N0YXRlLmhhdmUgLSAxXTsKICAgICAgICAgICAgY29weSA9IDMgKyAoaG9sZCAmIDB4MDMpOy8vQklUUygyKTsKICAgICAgICAgICAgLy8tLS0gRFJPUEJJVFMoMikgLS0tLy8KICAgICAgICAgICAgaG9sZCA+Pj49IDI7CiAgICAgICAgICAgIGJpdHMgLT0gMjsKICAgICAgICAgICAgLy8tLS0vLwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoaGVyZV92YWwgPT09IDE3KSB7CiAgICAgICAgICAgIC8vPT09IE5FRURCSVRTKGhlcmUuYml0cyArIDMpOwogICAgICAgICAgICBuID0gaGVyZV9iaXRzICsgMzsKICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7CiAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLz09PS8vCiAgICAgICAgICAgIC8vLS0tIERST1BCSVRTKGhlcmUuYml0cykgLS0tLy8KICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0czsKICAgICAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7CiAgICAgICAgICAgIC8vLS0tLy8KICAgICAgICAgICAgbGVuID0gMDsKICAgICAgICAgICAgY29weSA9IDMgKyAoaG9sZCAmIDB4MDcpOy8vQklUUygzKTsKICAgICAgICAgICAgLy8tLS0gRFJPUEJJVFMoMykgLS0tLy8KICAgICAgICAgICAgaG9sZCA+Pj49IDM7CiAgICAgICAgICAgIGJpdHMgLT0gMzsKICAgICAgICAgICAgLy8tLS0vLwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIC8vPT09IE5FRURCSVRTKGhlcmUuYml0cyArIDcpOwogICAgICAgICAgICBuID0gaGVyZV9iaXRzICsgNzsKICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBuKSB7CiAgICAgICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAgICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLz09PS8vCiAgICAgICAgICAgIC8vLS0tIERST1BCSVRTKGhlcmUuYml0cykgLS0tLy8KICAgICAgICAgICAgaG9sZCA+Pj49IGhlcmVfYml0czsKICAgICAgICAgICAgYml0cyAtPSBoZXJlX2JpdHM7CiAgICAgICAgICAgIC8vLS0tLy8KICAgICAgICAgICAgbGVuID0gMDsKICAgICAgICAgICAgY29weSA9IDExICsgKGhvbGQgJiAweDdmKTsvL0JJVFMoNyk7CiAgICAgICAgICAgIC8vLS0tIERST1BCSVRTKDcpIC0tLS8vCiAgICAgICAgICAgIGhvbGQgPj4+PSA3OwogICAgICAgICAgICBiaXRzIC09IDc7CiAgICAgICAgICAgIC8vLS0tLy8KICAgICAgICAgIH0KICAgICAgICAgIGlmIChzdGF0ZS5oYXZlICsgY29weSA+IHN0YXRlLm5sZW4gKyBzdGF0ZS5uZGlzdCkgewogICAgICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0JzsKICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoY29weS0tKSB7CiAgICAgICAgICAgIHN0YXRlLmxlbnNbc3RhdGUuaGF2ZSsrXSA9IGxlbjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qIGhhbmRsZSBlcnJvciBicmVha3MgaW4gd2hpbGUgKi8KICAgICAgaWYgKHN0YXRlLm1vZGUgPT09IEJBRCkgeyBicmVhazsgfQoKICAgICAgLyogY2hlY2sgZm9yIGVuZC1vZi1ibG9jayBjb2RlIChiZXR0ZXIgaGF2ZSBvbmUpICovCiAgICAgIGlmIChzdGF0ZS5sZW5zWzI1Nl0gPT09IDApIHsKICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQtb2YtYmxvY2snOwogICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIC8qIGJ1aWxkIGNvZGUgdGFibGVzIC0tIG5vdGU6IGRvIG5vdCBjaGFuZ2UgdGhlIGxlbmJpdHMgb3IgZGlzdGJpdHMKICAgICAgICAgdmFsdWVzIGhlcmUgKDkgYW5kIDYpIHdpdGhvdXQgcmVhZGluZyB0aGUgY29tbWVudHMgaW4gaW5mdHJlZXMuaAogICAgICAgICBjb25jZXJuaW5nIHRoZSBFTk9VR0ggY29uc3RhbnRzLCB3aGljaCBkZXBlbmQgb24gdGhvc2UgdmFsdWVzICovCiAgICAgIHN0YXRlLmxlbmJpdHMgPSA5OwoKICAgICAgb3B0cyA9IHtiaXRzOiBzdGF0ZS5sZW5iaXRzfTsKICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShMRU5TLCBzdGF0ZS5sZW5zLCAwLCBzdGF0ZS5ubGVuLCBzdGF0ZS5sZW5jb2RlLCAwLCBzdGF0ZS53b3JrLCBvcHRzKTsKICAgICAgLy8gV2UgaGF2ZSBzZXBhcmF0ZSB0YWJsZXMgJiBubyBwb2ludGVycy4gMiBjb21tZW50ZWQgbGluZXMgYmVsb3cgbm90IG5lZWRlZC4KICAgICAgLy8gc3RhdGUubmV4dF9pbmRleCA9IG9wdHMudGFibGVfaW5kZXg7CiAgICAgIHN0YXRlLmxlbmJpdHMgPSBvcHRzLmJpdHM7CiAgICAgIC8vIHN0YXRlLmxlbmNvZGUgPSBzdGF0ZS5uZXh0OwoKICAgICAgaWYgKHJldCkgewogICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCc7CiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICBicmVhazsKICAgICAgfQoKICAgICAgc3RhdGUuZGlzdGJpdHMgPSA2OwogICAgICAvL3N0YXRlLmRpc3Rjb2RlLmNvcHkoc3RhdGUuY29kZXMpOwogICAgICAvLyBTd2l0Y2ggdG8gdXNlIGR5bmFtaWMgdGFibGUKICAgICAgc3RhdGUuZGlzdGNvZGUgPSBzdGF0ZS5kaXN0ZHluOwogICAgICBvcHRzID0ge2JpdHM6IHN0YXRlLmRpc3RiaXRzfTsKICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShESVNUUywgc3RhdGUubGVucywgc3RhdGUubmxlbiwgc3RhdGUubmRpc3QsIHN0YXRlLmRpc3Rjb2RlLCAwLCBzdGF0ZS53b3JrLCBvcHRzKTsKICAgICAgLy8gV2UgaGF2ZSBzZXBhcmF0ZSB0YWJsZXMgJiBubyBwb2ludGVycy4gMiBjb21tZW50ZWQgbGluZXMgYmVsb3cgbm90IG5lZWRlZC4KICAgICAgLy8gc3RhdGUubmV4dF9pbmRleCA9IG9wdHMudGFibGVfaW5kZXg7CiAgICAgIHN0YXRlLmRpc3RiaXRzID0gb3B0cy5iaXRzOwogICAgICAvLyBzdGF0ZS5kaXN0Y29kZSA9IHN0YXRlLm5leHQ7CgogICAgICBpZiAocmV0KSB7CiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBkaXN0YW5jZXMgc2V0JzsKICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIC8vVHJhY2V2KChzdGRlcnIsICdpbmZsYXRlOiAgICAgICBjb2RlcyBva1xuJykpOwogICAgICBzdGF0ZS5tb2RlID0gTEVOXzsKICAgICAgaWYgKGZsdXNoID09PSBaX1RSRUVTKSB7IGJyZWFrIGluZl9sZWF2ZTsgfQogICAgICAvKiBmYWxscyB0aHJvdWdoICovCiAgICBjYXNlIExFTl86CiAgICAgIHN0YXRlLm1vZGUgPSBMRU47CiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KICAgIGNhc2UgTEVOOgogICAgICBpZiAoaGF2ZSA+PSA2ICYmIGxlZnQgPj0gMjU4KSB7CiAgICAgICAgLy8tLS0gUkVTVE9SRSgpIC0tLQogICAgICAgIHN0cm0ubmV4dF9vdXQgPSBwdXQ7CiAgICAgICAgc3RybS5hdmFpbF9vdXQgPSBsZWZ0OwogICAgICAgIHN0cm0ubmV4dF9pbiA9IG5leHQ7CiAgICAgICAgc3RybS5hdmFpbF9pbiA9IGhhdmU7CiAgICAgICAgc3RhdGUuaG9sZCA9IGhvbGQ7CiAgICAgICAgc3RhdGUuYml0cyA9IGJpdHM7CiAgICAgICAgLy8tLS0KICAgICAgICBpbmZsYXRlX2Zhc3Qoc3RybSwgX291dCk7CiAgICAgICAgLy8tLS0gTE9BRCgpIC0tLQogICAgICAgIHB1dCA9IHN0cm0ubmV4dF9vdXQ7CiAgICAgICAgb3V0cHV0ID0gc3RybS5vdXRwdXQ7CiAgICAgICAgbGVmdCA9IHN0cm0uYXZhaWxfb3V0OwogICAgICAgIG5leHQgPSBzdHJtLm5leHRfaW47CiAgICAgICAgaW5wdXQgPSBzdHJtLmlucHV0OwogICAgICAgIGhhdmUgPSBzdHJtLmF2YWlsX2luOwogICAgICAgIGhvbGQgPSBzdGF0ZS5ob2xkOwogICAgICAgIGJpdHMgPSBzdGF0ZS5iaXRzOwogICAgICAgIC8vLS0tCgogICAgICAgIGlmIChzdGF0ZS5tb2RlID09PSBUWVBFKSB7CiAgICAgICAgICBzdGF0ZS5iYWNrID0gLTE7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN0YXRlLmJhY2sgPSAwOwogICAgICBmb3IgKDs7KSB7CiAgICAgICAgaGVyZSA9IHN0YXRlLmxlbmNvZGVbaG9sZCAmICgoMSA8PCBzdGF0ZS5sZW5iaXRzKSAtMSldOyAgLypCSVRTKHN0YXRlLmxlbmJpdHMpKi8KICAgICAgICBoZXJlX2JpdHMgPSBoZXJlID4+PiAyNDsKICAgICAgICBoZXJlX29wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmY7CiAgICAgICAgaGVyZV92YWwgPSBoZXJlICYgMHhmZmZmOwoKICAgICAgICBpZiAoaGVyZV9iaXRzIDw9IGJpdHMpIHsgYnJlYWs7IH0KICAgICAgICAvLy0tLSBQVUxMQllURSgpIC0tLS8vCiAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAgICAgaGF2ZS0tOwogICAgICAgIGhvbGQgKz0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgIGJpdHMgKz0gODsKICAgICAgICAvLy0tLS8vCiAgICAgIH0KICAgICAgaWYgKGhlcmVfb3AgJiYgKGhlcmVfb3AgJiAweGYwKSA9PT0gMCkgewogICAgICAgIGxhc3RfYml0cyA9IGhlcmVfYml0czsKICAgICAgICBsYXN0X29wID0gaGVyZV9vcDsKICAgICAgICBsYXN0X3ZhbCA9IGhlcmVfdmFsOwogICAgICAgIGZvciAoOzspIHsKICAgICAgICAgIGhlcmUgPSBzdGF0ZS5sZW5jb2RlW2xhc3RfdmFsICsKICAgICAgICAgICAgICAgICAgKChob2xkICYgKCgxIDw8IChsYXN0X2JpdHMgKyBsYXN0X29wKSkgLTEpKS8qQklUUyhsYXN0LmJpdHMgKyBsYXN0Lm9wKSovID4+IGxhc3RfYml0cyldOwogICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICBoZXJlX29wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmY7CiAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiAweGZmZmY7CgogICAgICAgICAgaWYgKChsYXN0X2JpdHMgKyBoZXJlX2JpdHMpIDw9IGJpdHMpIHsgYnJlYWs7IH0KICAgICAgICAgIC8vLS0tIFBVTExCWVRFKCkgLS0tLy8KICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfQogICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAvLy0tLS8vCiAgICAgICAgfQogICAgICAgIC8vLS0tIERST1BCSVRTKGxhc3QuYml0cykgLS0tLy8KICAgICAgICBob2xkID4+Pj0gbGFzdF9iaXRzOwogICAgICAgIGJpdHMgLT0gbGFzdF9iaXRzOwogICAgICAgIC8vLS0tLy8KICAgICAgICBzdGF0ZS5iYWNrICs9IGxhc3RfYml0czsKICAgICAgfQogICAgICAvLy0tLSBEUk9QQklUUyhoZXJlLmJpdHMpIC0tLS8vCiAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7CiAgICAgIGJpdHMgLT0gaGVyZV9iaXRzOwogICAgICAvLy0tLS8vCiAgICAgIHN0YXRlLmJhY2sgKz0gaGVyZV9iaXRzOwogICAgICBzdGF0ZS5sZW5ndGggPSBoZXJlX3ZhbDsKICAgICAgaWYgKGhlcmVfb3AgPT09IDApIHsKICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgaGVyZS52YWwgPj0gMHgyMCAmJiBoZXJlLnZhbCA8IDB4N2YgPwogICAgICAgIC8vICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsICclYydcbiIgOgogICAgICAgIC8vICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsIDB4JTAyeFxuIiwgaGVyZS52YWwpKTsKICAgICAgICBzdGF0ZS5tb2RlID0gTElUOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChoZXJlX29wICYgMzIpIHsKICAgICAgICAvL1RyYWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgZW5kIG9mIGJsb2NrXG4iKSk7CiAgICAgICAgc3RhdGUuYmFjayA9IC0xOwogICAgICAgIHN0YXRlLm1vZGUgPSBUWVBFOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChoZXJlX29wICYgNjQpIHsKICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUnOwogICAgICAgIHN0YXRlLm1vZGUgPSBCQUQ7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc3RhdGUuZXh0cmEgPSBoZXJlX29wICYgMTU7CiAgICAgIHN0YXRlLm1vZGUgPSBMRU5FWFQ7CiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KICAgIGNhc2UgTEVORVhUOgogICAgICBpZiAoc3RhdGUuZXh0cmEpIHsKICAgICAgICAvLz09PSBORUVEQklUUyhzdGF0ZS5leHRyYSk7CiAgICAgICAgbiA9IHN0YXRlLmV4dHJhOwogICAgICAgIHdoaWxlIChiaXRzIDwgbikgewogICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAgICAgICBoYXZlLS07CiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICB9CiAgICAgICAgLy89PT0vLwogICAgICAgIHN0YXRlLmxlbmd0aCArPSBob2xkICYgKCgxIDw8IHN0YXRlLmV4dHJhKSAtMSkvKkJJVFMoc3RhdGUuZXh0cmEpKi87CiAgICAgICAgLy8tLS0gRFJPUEJJVFMoc3RhdGUuZXh0cmEpIC0tLS8vCiAgICAgICAgaG9sZCA+Pj49IHN0YXRlLmV4dHJhOwogICAgICAgIGJpdHMgLT0gc3RhdGUuZXh0cmE7CiAgICAgICAgLy8tLS0vLwogICAgICAgIHN0YXRlLmJhY2sgKz0gc3RhdGUuZXh0cmE7CiAgICAgIH0KICAgICAgLy9UcmFjZXZ2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICAgIGxlbmd0aCAldVxuIiwgc3RhdGUubGVuZ3RoKSk7CiAgICAgIHN0YXRlLndhcyA9IHN0YXRlLmxlbmd0aDsKICAgICAgc3RhdGUubW9kZSA9IERJU1Q7CiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KICAgIGNhc2UgRElTVDoKICAgICAgZm9yICg7OykgewogICAgICAgIGhlcmUgPSBzdGF0ZS5kaXN0Y29kZVtob2xkICYgKCgxIDw8IHN0YXRlLmRpc3RiaXRzKSAtMSldOy8qQklUUyhzdGF0ZS5kaXN0Yml0cykqLwogICAgICAgIGhlcmVfYml0cyA9IGhlcmUgPj4+IDI0OwogICAgICAgIGhlcmVfb3AgPSAoaGVyZSA+Pj4gMTYpICYgMHhmZjsKICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiAweGZmZmY7CgogICAgICAgIGlmICgoaGVyZV9iaXRzKSA8PSBiaXRzKSB7IGJyZWFrOyB9CiAgICAgICAgLy8tLS0gUFVMTEJZVEUoKSAtLS0vLwogICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfQogICAgICAgIGhhdmUtLTsKICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgLy8tLS0vLwogICAgICB9CiAgICAgIGlmICgoaGVyZV9vcCAmIDB4ZjApID09PSAwKSB7CiAgICAgICAgbGFzdF9iaXRzID0gaGVyZV9iaXRzOwogICAgICAgIGxhc3Rfb3AgPSBoZXJlX29wOwogICAgICAgIGxhc3RfdmFsID0gaGVyZV92YWw7CiAgICAgICAgZm9yICg7OykgewogICAgICAgICAgaGVyZSA9IHN0YXRlLmRpc3Rjb2RlW2xhc3RfdmFsICsKICAgICAgICAgICAgICAgICAgKChob2xkICYgKCgxIDw8IChsYXN0X2JpdHMgKyBsYXN0X29wKSkgLTEpKS8qQklUUyhsYXN0LmJpdHMgKyBsYXN0Lm9wKSovID4+IGxhc3RfYml0cyldOwogICAgICAgICAgaGVyZV9iaXRzID0gaGVyZSA+Pj4gMjQ7CiAgICAgICAgICBoZXJlX29wID0gKGhlcmUgPj4+IDE2KSAmIDB4ZmY7CiAgICAgICAgICBoZXJlX3ZhbCA9IGhlcmUgJiAweGZmZmY7CgogICAgICAgICAgaWYgKChsYXN0X2JpdHMgKyBoZXJlX2JpdHMpIDw9IGJpdHMpIHsgYnJlYWs7IH0KICAgICAgICAgIC8vLS0tIFBVTExCWVRFKCkgLS0tLy8KICAgICAgICAgIGlmIChoYXZlID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfQogICAgICAgICAgaGF2ZS0tOwogICAgICAgICAgaG9sZCArPSBpbnB1dFtuZXh0KytdIDw8IGJpdHM7CiAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAvLy0tLS8vCiAgICAgICAgfQogICAgICAgIC8vLS0tIERST1BCSVRTKGxhc3QuYml0cykgLS0tLy8KICAgICAgICBob2xkID4+Pj0gbGFzdF9iaXRzOwogICAgICAgIGJpdHMgLT0gbGFzdF9iaXRzOwogICAgICAgIC8vLS0tLy8KICAgICAgICBzdGF0ZS5iYWNrICs9IGxhc3RfYml0czsKICAgICAgfQogICAgICAvLy0tLSBEUk9QQklUUyhoZXJlLmJpdHMpIC0tLS8vCiAgICAgIGhvbGQgPj4+PSBoZXJlX2JpdHM7CiAgICAgIGJpdHMgLT0gaGVyZV9iaXRzOwogICAgICAvLy0tLS8vCiAgICAgIHN0YXRlLmJhY2sgKz0gaGVyZV9iaXRzOwogICAgICBpZiAoaGVyZV9vcCAmIDY0KSB7CiAgICAgICAgc3RybS5tc2cgPSAnaW52YWxpZCBkaXN0YW5jZSBjb2RlJzsKICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN0YXRlLm9mZnNldCA9IGhlcmVfdmFsOwogICAgICBzdGF0ZS5leHRyYSA9IChoZXJlX29wKSAmIDE1OwogICAgICBzdGF0ZS5tb2RlID0gRElTVEVYVDsKICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgY2FzZSBESVNURVhUOgogICAgICBpZiAoc3RhdGUuZXh0cmEpIHsKICAgICAgICAvLz09PSBORUVEQklUUyhzdGF0ZS5leHRyYSk7CiAgICAgICAgbiA9IHN0YXRlLmV4dHJhOwogICAgICAgIHdoaWxlIChiaXRzIDwgbikgewogICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAgICAgICBoYXZlLS07CiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICB9CiAgICAgICAgLy89PT0vLwogICAgICAgIHN0YXRlLm9mZnNldCArPSBob2xkICYgKCgxIDw8IHN0YXRlLmV4dHJhKSAtMSkvKkJJVFMoc3RhdGUuZXh0cmEpKi87CiAgICAgICAgLy8tLS0gRFJPUEJJVFMoc3RhdGUuZXh0cmEpIC0tLS8vCiAgICAgICAgaG9sZCA+Pj49IHN0YXRlLmV4dHJhOwogICAgICAgIGJpdHMgLT0gc3RhdGUuZXh0cmE7CiAgICAgICAgLy8tLS0vLwogICAgICAgIHN0YXRlLmJhY2sgKz0gc3RhdGUuZXh0cmE7CiAgICAgIH0KLy8jaWZkZWYgSU5GTEFURV9TVFJJQ1QKICAgICAgaWYgKHN0YXRlLm9mZnNldCA+IHN0YXRlLmRtYXgpIHsKICAgICAgICBzdHJtLm1zZyA9ICdpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayc7CiAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICBicmVhazsKICAgICAgfQovLyNlbmRpZgogICAgICAvL1RyYWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgZGlzdGFuY2UgJXVcbiIsIHN0YXRlLm9mZnNldCkpOwogICAgICBzdGF0ZS5tb2RlID0gTUFUQ0g7CiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KICAgIGNhc2UgTUFUQ0g6CiAgICAgIGlmIChsZWZ0ID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfQogICAgICBjb3B5ID0gX291dCAtIGxlZnQ7CiAgICAgIGlmIChzdGF0ZS5vZmZzZXQgPiBjb3B5KSB7ICAgICAgICAgLyogY29weSBmcm9tIHdpbmRvdyAqLwogICAgICAgIGNvcHkgPSBzdGF0ZS5vZmZzZXQgLSBjb3B5OwogICAgICAgIGlmIChjb3B5ID4gc3RhdGUud2hhdmUpIHsKICAgICAgICAgIGlmIChzdGF0ZS5zYW5lKSB7CiAgICAgICAgICAgIHN0cm0ubXNnID0gJ2ludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrJzsKICAgICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9Ci8vICghKSBUaGlzIGJsb2NrIGlzIGRpc2FibGVkIGluIHpsaWIgZGVmYWlsdHMsCi8vIGRvbid0IGVuYWJsZSBpdCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkKLy8jaWZkZWYgSU5GTEFURV9BTExPV19JTlZBTElEX0RJU1RBTkNFX1RPT0ZBUl9BUlJSCi8vICAgICAgICAgIFRyYWNlKChzdGRlcnIsICJpbmZsYXRlLmMgdG9vIGZhclxuIikpOwovLyAgICAgICAgICBjb3B5IC09IHN0YXRlLndoYXZlOwovLyAgICAgICAgICBpZiAoY29weSA+IHN0YXRlLmxlbmd0aCkgeyBjb3B5ID0gc3RhdGUubGVuZ3RoOyB9Ci8vICAgICAgICAgIGlmIChjb3B5ID4gbGVmdCkgeyBjb3B5ID0gbGVmdDsgfQovLyAgICAgICAgICBsZWZ0IC09IGNvcHk7Ci8vICAgICAgICAgIHN0YXRlLmxlbmd0aCAtPSBjb3B5OwovLyAgICAgICAgICBkbyB7Ci8vICAgICAgICAgICAgb3V0cHV0W3B1dCsrXSA9IDA7Ci8vICAgICAgICAgIH0gd2hpbGUgKC0tY29weSk7Ci8vICAgICAgICAgIGlmIChzdGF0ZS5sZW5ndGggPT09IDApIHsgc3RhdGUubW9kZSA9IExFTjsgfQovLyAgICAgICAgICBicmVhazsKLy8jZW5kaWYKICAgICAgICB9CiAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS53bmV4dCkgewogICAgICAgICAgY29weSAtPSBzdGF0ZS53bmV4dDsKICAgICAgICAgIGZyb20gPSBzdGF0ZS53c2l6ZSAtIGNvcHk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgZnJvbSA9IHN0YXRlLnduZXh0IC0gY29weTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS5sZW5ndGgpIHsgY29weSA9IHN0YXRlLmxlbmd0aDsgfQogICAgICAgIGZyb21fc291cmNlID0gc3RhdGUud2luZG93OwogICAgICB9CiAgICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvcHkgZnJvbSBvdXRwdXQgKi8KICAgICAgICBmcm9tX3NvdXJjZSA9IG91dHB1dDsKICAgICAgICBmcm9tID0gcHV0IC0gc3RhdGUub2Zmc2V0OwogICAgICAgIGNvcHkgPSBzdGF0ZS5sZW5ndGg7CiAgICAgIH0KICAgICAgaWYgKGNvcHkgPiBsZWZ0KSB7IGNvcHkgPSBsZWZ0OyB9CiAgICAgIGxlZnQgLT0gY29weTsKICAgICAgc3RhdGUubGVuZ3RoIC09IGNvcHk7CiAgICAgIGRvIHsKICAgICAgICBvdXRwdXRbcHV0KytdID0gZnJvbV9zb3VyY2VbZnJvbSsrXTsKICAgICAgfSB3aGlsZSAoLS1jb3B5KTsKICAgICAgaWYgKHN0YXRlLmxlbmd0aCA9PT0gMCkgeyBzdGF0ZS5tb2RlID0gTEVOOyB9CiAgICAgIGJyZWFrOwogICAgY2FzZSBMSVQ6CiAgICAgIGlmIChsZWZ0ID09PSAwKSB7IGJyZWFrIGluZl9sZWF2ZTsgfQogICAgICBvdXRwdXRbcHV0KytdID0gc3RhdGUubGVuZ3RoOwogICAgICBsZWZ0LS07CiAgICAgIHN0YXRlLm1vZGUgPSBMRU47CiAgICAgIGJyZWFrOwogICAgY2FzZSBDSEVDSzoKICAgICAgaWYgKHN0YXRlLndyYXApIHsKICAgICAgICAvLz09PSBORUVEQklUUygzMik7CiAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikgewogICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAgICAgICBoYXZlLS07CiAgICAgICAgICAvLyBVc2UgJ3wnIGluc2RlYWQgb2YgJysnIHRvIG1ha2Ugc3VyZSB0aGF0IHJlc3VsdCBpcyBzaWduZWQKICAgICAgICAgIGhvbGQgfD0gaW5wdXRbbmV4dCsrXSA8PCBiaXRzOwogICAgICAgICAgYml0cyArPSA4OwogICAgICAgIH0KICAgICAgICAvLz09PS8vCiAgICAgICAgX291dCAtPSBsZWZ0OwogICAgICAgIHN0cm0udG90YWxfb3V0ICs9IF9vdXQ7CiAgICAgICAgc3RhdGUudG90YWwgKz0gX291dDsKICAgICAgICBpZiAoX291dCkgewogICAgICAgICAgc3RybS5hZGxlciA9IHN0YXRlLmNoZWNrID0KICAgICAgICAgICAgICAvKlVQREFURShzdGF0ZS5jaGVjaywgcHV0IC0gX291dCwgX291dCk7Ki8KICAgICAgICAgICAgICAoc3RhdGUuZmxhZ3MgPyBjcmMzMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBwdXQgLSBfb3V0KSA6IGFkbGVyMzIoc3RhdGUuY2hlY2ssIG91dHB1dCwgX291dCwgcHV0IC0gX291dCkpOwoKICAgICAgICB9CiAgICAgICAgX291dCA9IGxlZnQ7CiAgICAgICAgLy8gTkI6IGNyYzMyIHN0b3JlZCBhcyBzaWduZWQgMzItYml0IGludCwgWlNXQVAzMiByZXR1cm5zIHNpZ25lZCB0b28KICAgICAgICBpZiAoKHN0YXRlLmZsYWdzID8gaG9sZCA6IFpTV0FQMzIoaG9sZCkpICE9PSBzdGF0ZS5jaGVjaykgewogICAgICAgICAgc3RybS5tc2cgPSAnaW5jb3JyZWN0IGRhdGEgY2hlY2snOwogICAgICAgICAgc3RhdGUubW9kZSA9IEJBRDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvLz09PSBJTklUQklUUygpOwogICAgICAgIGhvbGQgPSAwOwogICAgICAgIGJpdHMgPSAwOwogICAgICAgIC8vPT09Ly8KICAgICAgICAvL1RyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICBjaGVjayBtYXRjaGVzIHRyYWlsZXJcbiIpKTsKICAgICAgfQogICAgICBzdGF0ZS5tb2RlID0gTEVOR1RIOwogICAgICAvKiBmYWxscyB0aHJvdWdoICovCiAgICBjYXNlIExFTkdUSDoKICAgICAgaWYgKHN0YXRlLndyYXAgJiYgc3RhdGUuZmxhZ3MpIHsKICAgICAgICAvLz09PSBORUVEQklUUygzMik7CiAgICAgICAgd2hpbGUgKGJpdHMgPCAzMikgewogICAgICAgICAgaWYgKGhhdmUgPT09IDApIHsgYnJlYWsgaW5mX2xlYXZlOyB9CiAgICAgICAgICBoYXZlLS07CiAgICAgICAgICBob2xkICs9IGlucHV0W25leHQrK10gPDwgYml0czsKICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICB9CiAgICAgICAgLy89PT0vLwogICAgICAgIGlmIChob2xkICE9PSAoc3RhdGUudG90YWwgJiAweGZmZmZmZmZmKSkgewogICAgICAgICAgc3RybS5tc2cgPSAnaW5jb3JyZWN0IGxlbmd0aCBjaGVjayc7CiAgICAgICAgICBzdGF0ZS5tb2RlID0gQkFEOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIC8vPT09IElOSVRCSVRTKCk7CiAgICAgICAgaG9sZCA9IDA7CiAgICAgICAgYml0cyA9IDA7CiAgICAgICAgLy89PT0vLwogICAgICAgIC8vVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgIGxlbmd0aCBtYXRjaGVzIHRyYWlsZXJcbiIpKTsKICAgICAgfQogICAgICBzdGF0ZS5tb2RlID0gRE9ORTsKICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwogICAgY2FzZSBET05FOgogICAgICByZXQgPSBaX1NUUkVBTV9FTkQ7CiAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgIGNhc2UgQkFEOgogICAgICByZXQgPSBaX0RBVEFfRVJST1I7CiAgICAgIGJyZWFrIGluZl9sZWF2ZTsKICAgIGNhc2UgTUVNOgogICAgICByZXR1cm4gWl9NRU1fRVJST1I7CiAgICBjYXNlIFNZTkM6CiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgIH0KICB9CgogIC8vIGluZl9sZWF2ZSA8LSBoZXJlIGlzIHJlYWwgcGxhY2UgZm9yICJnb3RvIGluZl9sZWF2ZSIsIGVtdWxhdGVkIHZpYSAiYnJlYWsgaW5mX2xlYXZlIgoKICAvKgogICAgIFJldHVybiBmcm9tIGluZmxhdGUoKSwgdXBkYXRpbmcgdGhlIHRvdGFsIGNvdW50cyBhbmQgdGhlIGNoZWNrIHZhbHVlLgogICAgIElmIHRoZXJlIHdhcyBubyBwcm9ncmVzcyBkdXJpbmcgdGhlIGluZmxhdGUoKSBjYWxsLCByZXR1cm4gYSBidWZmZXIKICAgICBlcnJvci4gIENhbGwgdXBkYXRld2luZG93KCkgdG8gY3JlYXRlIGFuZC9vciB1cGRhdGUgdGhlIHdpbmRvdyBzdGF0ZS4KICAgICBOb3RlOiBhIG1lbW9yeSBlcnJvciBmcm9tIGluZmxhdGUoKSBpcyBub24tcmVjb3ZlcmFibGUuCiAgICovCgogIC8vLS0tIFJFU1RPUkUoKSAtLS0KICBzdHJtLm5leHRfb3V0ID0gcHV0OwogIHN0cm0uYXZhaWxfb3V0ID0gbGVmdDsKICBzdHJtLm5leHRfaW4gPSBuZXh0OwogIHN0cm0uYXZhaWxfaW4gPSBoYXZlOwogIHN0YXRlLmhvbGQgPSBob2xkOwogIHN0YXRlLmJpdHMgPSBiaXRzOwogIC8vLS0tCgogIGlmIChzdGF0ZS53c2l6ZSB8fCAoX291dCAhPT0gc3RybS5hdmFpbF9vdXQgJiYgc3RhdGUubW9kZSA8IEJBRCAmJgogICAgICAgICAgICAgICAgICAgICAgKHN0YXRlLm1vZGUgPCBDSEVDSyB8fCBmbHVzaCAhPT0gWl9GSU5JU0gpKSkgewogICAgaWYgKHVwZGF0ZXdpbmRvdyhzdHJtLCBzdHJtLm91dHB1dCwgc3RybS5uZXh0X291dCwgX291dCAtIHN0cm0uYXZhaWxfb3V0KSkgewogICAgICBzdGF0ZS5tb2RlID0gTUVNOwogICAgICByZXR1cm4gWl9NRU1fRVJST1I7CiAgICB9CiAgfQogIF9pbiAtPSBzdHJtLmF2YWlsX2luOwogIF9vdXQgLT0gc3RybS5hdmFpbF9vdXQ7CiAgc3RybS50b3RhbF9pbiArPSBfaW47CiAgc3RybS50b3RhbF9vdXQgKz0gX291dDsKICBzdGF0ZS50b3RhbCArPSBfb3V0OwogIGlmIChzdGF0ZS53cmFwICYmIF9vdXQpIHsKICAgIHN0cm0uYWRsZXIgPSBzdGF0ZS5jaGVjayA9IC8qVVBEQVRFKHN0YXRlLmNoZWNrLCBzdHJtLm5leHRfb3V0IC0gX291dCwgX291dCk7Ki8KICAgICAgKHN0YXRlLmZsYWdzID8gY3JjMzIoc3RhdGUuY2hlY2ssIG91dHB1dCwgX291dCwgc3RybS5uZXh0X291dCAtIF9vdXQpIDogYWRsZXIzMihzdGF0ZS5jaGVjaywgb3V0cHV0LCBfb3V0LCBzdHJtLm5leHRfb3V0IC0gX291dCkpOwogIH0KICBzdHJtLmRhdGFfdHlwZSA9IHN0YXRlLmJpdHMgKyAoc3RhdGUubGFzdCA/IDY0IDogMCkgKwogICAgICAgICAgICAgICAgICAgIChzdGF0ZS5tb2RlID09PSBUWVBFID8gMTI4IDogMCkgKwogICAgICAgICAgICAgICAgICAgIChzdGF0ZS5tb2RlID09PSBMRU5fIHx8IHN0YXRlLm1vZGUgPT09IENPUFlfID8gMjU2IDogMCk7CiAgaWYgKCgoX2luID09PSAwICYmIF9vdXQgPT09IDApIHx8IGZsdXNoID09PSBaX0ZJTklTSCkgJiYgcmV0ID09PSBaX09LKSB7CiAgICByZXQgPSBaX0JVRl9FUlJPUjsKICB9CiAgcmV0dXJuIHJldDsKfQoKZnVuY3Rpb24gaW5mbGF0ZUVuZChzdHJtKSB7CgogIGlmICghc3RybSB8fCAhc3RybS5zdGF0ZSAvKnx8IHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCovKSB7CiAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgfQoKICB2YXIgc3RhdGUgPSBzdHJtLnN0YXRlOwogIGlmIChzdGF0ZS53aW5kb3cpIHsKICAgIHN0YXRlLndpbmRvdyA9IG51bGw7CiAgfQogIHN0cm0uc3RhdGUgPSBudWxsOwogIHJldHVybiBaX09LOwp9CgpmdW5jdGlvbiBpbmZsYXRlR2V0SGVhZGVyKHN0cm0sIGhlYWQpIHsKICB2YXIgc3RhdGU7CgogIC8qIGNoZWNrIHN0YXRlICovCiAgaWYgKCFzdHJtIHx8ICFzdHJtLnN0YXRlKSB7IHJldHVybiBaX1NUUkVBTV9FUlJPUjsgfQogIHN0YXRlID0gc3RybS5zdGF0ZTsKICBpZiAoKHN0YXRlLndyYXAgJiAyKSA9PT0gMCkgeyByZXR1cm4gWl9TVFJFQU1fRVJST1I7IH0KCiAgLyogc2F2ZSBoZWFkZXIgc3RydWN0dXJlICovCiAgc3RhdGUuaGVhZCA9IGhlYWQ7CiAgaGVhZC5kb25lID0gZmFsc2U7CiAgcmV0dXJuIFpfT0s7Cn0KCgpleHBvcnRzLmluZmxhdGVSZXNldCA9IGluZmxhdGVSZXNldDsKZXhwb3J0cy5pbmZsYXRlUmVzZXQyID0gaW5mbGF0ZVJlc2V0MjsKZXhwb3J0cy5pbmZsYXRlUmVzZXRLZWVwID0gaW5mbGF0ZVJlc2V0S2VlcDsKZXhwb3J0cy5pbmZsYXRlSW5pdCA9IGluZmxhdGVJbml0OwpleHBvcnRzLmluZmxhdGVJbml0MiA9IGluZmxhdGVJbml0MjsKZXhwb3J0cy5pbmZsYXRlID0gaW5mbGF0ZTsKZXhwb3J0cy5pbmZsYXRlRW5kID0gaW5mbGF0ZUVuZDsKZXhwb3J0cy5pbmZsYXRlR2V0SGVhZGVyID0gaW5mbGF0ZUdldEhlYWRlcjsKZXhwb3J0cy5pbmZsYXRlSW5mbyA9ICdwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpJzsKCi8qIE5vdCBpbXBsZW1lbnRlZApleHBvcnRzLmluZmxhdGVDb3B5ID0gaW5mbGF0ZUNvcHk7CmV4cG9ydHMuaW5mbGF0ZUdldERpY3Rpb25hcnkgPSBpbmZsYXRlR2V0RGljdGlvbmFyeTsKZXhwb3J0cy5pbmZsYXRlTWFyayA9IGluZmxhdGVNYXJrOwpleHBvcnRzLmluZmxhdGVQcmltZSA9IGluZmxhdGVQcmltZTsKZXhwb3J0cy5pbmZsYXRlU2V0RGljdGlvbmFyeSA9IGluZmxhdGVTZXREaWN0aW9uYXJ5OwpleHBvcnRzLmluZmxhdGVTeW5jID0gaW5mbGF0ZVN5bmM7CmV4cG9ydHMuaW5mbGF0ZVN5bmNQb2ludCA9IGluZmxhdGVTeW5jUG9pbnQ7CmV4cG9ydHMuaW5mbGF0ZVVuZGVybWluZSA9IGluZmxhdGVVbmRlcm1pbmU7CiovCn0seyIuLi91dGlscy9jb21tb24iOjI3LCIuL2FkbGVyMzIiOjI5LCIuL2NyYzMyIjozMSwiLi9pbmZmYXN0IjozNCwiLi9pbmZ0cmVlcyI6MzZ9XSwzNjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCgp2YXIgdXRpbHMgPSBfZGVyZXFfKCcuLi91dGlscy9jb21tb24nKTsKCnZhciBNQVhCSVRTID0gMTU7CnZhciBFTk9VR0hfTEVOUyA9IDg1MjsKdmFyIEVOT1VHSF9ESVNUUyA9IDU5MjsKLy92YXIgRU5PVUdIID0gKEVOT1VHSF9MRU5TK0VOT1VHSF9ESVNUUyk7Cgp2YXIgQ09ERVMgPSAwOwp2YXIgTEVOUyA9IDE7CnZhciBESVNUUyA9IDI7Cgp2YXIgbGJhc2UgPSBbIC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBiYXNlICovCiAgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMywgMTUsIDE3LCAxOSwgMjMsIDI3LCAzMSwKICAzNSwgNDMsIDUxLCA1OSwgNjcsIDgzLCA5OSwgMTE1LCAxMzEsIDE2MywgMTk1LCAyMjcsIDI1OCwgMCwgMApdOwoKdmFyIGxleHQgPSBbIC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBleHRyYSAqLwogIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTcsIDE3LCAxNywgMTcsIDE4LCAxOCwgMTgsIDE4LAogIDE5LCAxOSwgMTksIDE5LCAyMCwgMjAsIDIwLCAyMCwgMjEsIDIxLCAyMSwgMjEsIDE2LCA3MiwgNzgKXTsKCnZhciBkYmFzZSA9IFsgLyogRGlzdGFuY2UgY29kZXMgMC4uMjkgYmFzZSAqLwogIDEsIDIsIDMsIDQsIDUsIDcsIDksIDEzLCAxNywgMjUsIDMzLCA0OSwgNjUsIDk3LCAxMjksIDE5MywKICAyNTcsIDM4NSwgNTEzLCA3NjksIDEwMjUsIDE1MzcsIDIwNDksIDMwNzMsIDQwOTcsIDYxNDUsCiAgODE5MywgMTIyODksIDE2Mzg1LCAyNDU3NywgMCwgMApdOwoKdmFyIGRleHQgPSBbIC8qIERpc3RhbmNlIGNvZGVzIDAuLjI5IGV4dHJhICovCiAgMTYsIDE2LCAxNiwgMTYsIDE3LCAxNywgMTgsIDE4LCAxOSwgMTksIDIwLCAyMCwgMjEsIDIxLCAyMiwgMjIsCiAgMjMsIDIzLCAyNCwgMjQsIDI1LCAyNSwgMjYsIDI2LCAyNywgMjcsCiAgMjgsIDI4LCAyOSwgMjksIDY0LCA2NApdOwoKbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmZsYXRlX3RhYmxlKHR5cGUsIGxlbnMsIGxlbnNfaW5kZXgsIGNvZGVzLCB0YWJsZSwgdGFibGVfaW5kZXgsIHdvcmssIG9wdHMpCnsKICB2YXIgYml0cyA9IG9wdHMuYml0czsKICAgICAgLy9oZXJlID0gb3B0cy5oZXJlOyAvKiB0YWJsZSBlbnRyeSBmb3IgZHVwbGljYXRpb24gKi8KCiAgdmFyIGxlbiA9IDA7ICAgICAgICAgICAgICAgLyogYSBjb2RlJ3MgbGVuZ3RoIGluIGJpdHMgKi8KICB2YXIgc3ltID0gMDsgICAgICAgICAgICAgICAvKiBpbmRleCBvZiBjb2RlIHN5bWJvbHMgKi8KICB2YXIgbWluID0gMCwgbWF4ID0gMDsgICAgICAgICAgLyogbWluaW11bSBhbmQgbWF4aW11bSBjb2RlIGxlbmd0aHMgKi8KICB2YXIgcm9vdCA9IDA7ICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgaW5kZXggYml0cyBmb3Igcm9vdCB0YWJsZSAqLwogIHZhciBjdXJyID0gMDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBpbmRleCBiaXRzIGZvciBjdXJyZW50IHRhYmxlICovCiAgdmFyIGRyb3AgPSAwOyAgICAgICAgICAgICAgLyogY29kZSBiaXRzIHRvIGRyb3AgZm9yIHN1Yi10YWJsZSAqLwogIHZhciBsZWZ0ID0gMDsgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIHByZWZpeCBjb2RlcyBhdmFpbGFibGUgKi8KICB2YXIgdXNlZCA9IDA7ICAgICAgICAgICAgICAvKiBjb2RlIGVudHJpZXMgaW4gdGFibGUgdXNlZCAqLwogIHZhciBodWZmID0gMDsgICAgICAgICAgICAgIC8qIEh1ZmZtYW4gY29kZSAqLwogIHZhciBpbmNyOyAgICAgICAgICAgICAgLyogZm9yIGluY3JlbWVudGluZyBjb2RlLCBpbmRleCAqLwogIHZhciBmaWxsOyAgICAgICAgICAgICAgLyogaW5kZXggZm9yIHJlcGxpY2F0aW5nIGVudHJpZXMgKi8KICB2YXIgbG93OyAgICAgICAgICAgICAgIC8qIGxvdyBiaXRzIGZvciBjdXJyZW50IHJvb3QgZW50cnkgKi8KICB2YXIgbWFzazsgICAgICAgICAgICAgIC8qIG1hc2sgZm9yIGxvdyByb290IGJpdHMgKi8KICB2YXIgbmV4dDsgICAgICAgICAgICAgLyogbmV4dCBhdmFpbGFibGUgc3BhY2UgaW4gdGFibGUgKi8KICB2YXIgYmFzZSA9IG51bGw7ICAgICAvKiBiYXNlIHZhbHVlIHRhYmxlIHRvIHVzZSAqLwogIHZhciBiYXNlX2luZGV4ID0gMDsKLy8gIHZhciBzaG9leHRyYTsgICAgLyogZXh0cmEgYml0cyB0YWJsZSB0byB1c2UgKi8KICB2YXIgZW5kOyAgICAgICAgICAgICAgICAgICAgLyogdXNlIGJhc2UgYW5kIGV4dHJhIGZvciBzeW1ib2wgPiBlbmQgKi8KICB2YXIgY291bnQgPSBuZXcgdXRpbHMuQnVmMTYoTUFYQklUUysxKTsgLy9bTUFYQklUUysxXTsgICAgLyogbnVtYmVyIG9mIGNvZGVzIG9mIGVhY2ggbGVuZ3RoICovCiAgdmFyIG9mZnMgPSBuZXcgdXRpbHMuQnVmMTYoTUFYQklUUysxKTsgLy9bTUFYQklUUysxXTsgICAgIC8qIG9mZnNldHMgaW4gdGFibGUgZm9yIGVhY2ggbGVuZ3RoICovCiAgdmFyIGV4dHJhID0gbnVsbDsKICB2YXIgZXh0cmFfaW5kZXggPSAwOwoKICB2YXIgaGVyZV9iaXRzLCBoZXJlX29wLCBoZXJlX3ZhbDsKCiAgLyoKICAgUHJvY2VzcyBhIHNldCBvZiBjb2RlIGxlbmd0aHMgdG8gY3JlYXRlIGEgY2Fub25pY2FsIEh1ZmZtYW4gY29kZS4gIFRoZQogICBjb2RlIGxlbmd0aHMgYXJlIGxlbnNbMC4uY29kZXMtMV0uICBFYWNoIGxlbmd0aCBjb3JyZXNwb25kcyB0byB0aGUKICAgc3ltYm9scyAwLi5jb2Rlcy0xLiAgVGhlIEh1ZmZtYW4gY29kZSBpcyBnZW5lcmF0ZWQgYnkgZmlyc3Qgc29ydGluZyB0aGUKICAgc3ltYm9scyBieSBsZW5ndGggZnJvbSBzaG9ydCB0byBsb25nLCBhbmQgcmV0YWluaW5nIHRoZSBzeW1ib2wgb3JkZXIKICAgZm9yIGNvZGVzIHdpdGggZXF1YWwgbGVuZ3Rocy4gIFRoZW4gdGhlIGNvZGUgc3RhcnRzIHdpdGggYWxsIHplcm8gYml0cwogICBmb3IgdGhlIGZpcnN0IGNvZGUgb2YgdGhlIHNob3J0ZXN0IGxlbmd0aCwgYW5kIHRoZSBjb2RlcyBhcmUgaW50ZWdlcgogICBpbmNyZW1lbnRzIGZvciB0aGUgc2FtZSBsZW5ndGgsIGFuZCB6ZXJvcyBhcmUgYXBwZW5kZWQgYXMgdGhlIGxlbmd0aAogICBpbmNyZWFzZXMuICBGb3IgdGhlIGRlZmxhdGUgZm9ybWF0LCB0aGVzZSBiaXRzIGFyZSBzdG9yZWQgYmFja3dhcmRzCiAgIGZyb20gdGhlaXIgbW9yZSBuYXR1cmFsIGludGVnZXIgaW5jcmVtZW50IG9yZGVyaW5nLCBhbmQgc28gd2hlbiB0aGUKICAgZGVjb2RpbmcgdGFibGVzIGFyZSBidWlsdCBpbiB0aGUgbGFyZ2UgbG9vcCBiZWxvdywgdGhlIGludGVnZXIgY29kZXMKICAgYXJlIGluY3JlbWVudGVkIGJhY2t3YXJkcy4KCiAgIFRoaXMgcm91dGluZSBhc3N1bWVzLCBidXQgZG9lcyBub3QgY2hlY2ssIHRoYXQgYWxsIG9mIHRoZSBlbnRyaWVzIGluCiAgIGxlbnNbXSBhcmUgaW4gdGhlIHJhbmdlIDAuLk1BWEJJVFMuICBUaGUgY2FsbGVyIG11c3QgYXNzdXJlIHRoaXMuCiAgIDEuLk1BWEJJVFMgaXMgaW50ZXJwcmV0ZWQgYXMgdGhhdCBjb2RlIGxlbmd0aC4gIHplcm8gbWVhbnMgdGhhdCB0aGF0CiAgIHN5bWJvbCBkb2VzIG5vdCBvY2N1ciBpbiB0aGlzIGNvZGUuCgogICBUaGUgY29kZXMgYXJlIHNvcnRlZCBieSBjb21wdXRpbmcgYSBjb3VudCBvZiBjb2RlcyBmb3IgZWFjaCBsZW5ndGgsCiAgIGNyZWF0aW5nIGZyb20gdGhhdCBhIHRhYmxlIG9mIHN0YXJ0aW5nIGluZGljZXMgZm9yIGVhY2ggbGVuZ3RoIGluIHRoZQogICBzb3J0ZWQgdGFibGUsIGFuZCB0aGVuIGVudGVyaW5nIHRoZSBzeW1ib2xzIGluIG9yZGVyIGluIHRoZSBzb3J0ZWQKICAgdGFibGUuICBUaGUgc29ydGVkIHRhYmxlIGlzIHdvcmtbXSwgd2l0aCB0aGF0IHNwYWNlIGJlaW5nIHByb3ZpZGVkIGJ5CiAgIHRoZSBjYWxsZXIuCgogICBUaGUgbGVuZ3RoIGNvdW50cyBhcmUgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMgYXMgd2VsbCwgaS5lLiBmaW5kaW5nCiAgIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGxlbmd0aCBjb2RlcywgZGV0ZXJtaW5pbmcgaWYgdGhlcmUgYXJlIGFueQogICBjb2RlcyBhdCBhbGwsIGNoZWNraW5nIGZvciBhIHZhbGlkIHNldCBvZiBsZW5ndGhzLCBhbmQgbG9va2luZyBhaGVhZAogICBhdCBsZW5ndGggY291bnRzIHRvIGRldGVybWluZSBzdWItdGFibGUgc2l6ZXMgd2hlbiBidWlsZGluZyB0aGUKICAgZGVjb2RpbmcgdGFibGVzLgogICAqLwoKICAvKiBhY2N1bXVsYXRlIGxlbmd0aHMgZm9yIGNvZGVzIChhc3N1bWVzIGxlbnNbXSBhbGwgaW4gMC4uTUFYQklUUykgKi8KICBmb3IgKGxlbiA9IDA7IGxlbiA8PSBNQVhCSVRTOyBsZW4rKykgewogICAgY291bnRbbGVuXSA9IDA7CiAgfQogIGZvciAoc3ltID0gMDsgc3ltIDwgY29kZXM7IHN5bSsrKSB7CiAgICBjb3VudFtsZW5zW2xlbnNfaW5kZXggKyBzeW1dXSsrOwogIH0KCiAgLyogYm91bmQgY29kZSBsZW5ndGhzLCBmb3JjZSByb290IHRvIGJlIHdpdGhpbiBjb2RlIGxlbmd0aHMgKi8KICByb290ID0gYml0czsKICBmb3IgKG1heCA9IE1BWEJJVFM7IG1heCA+PSAxOyBtYXgtLSkgewogICAgaWYgKGNvdW50W21heF0gIT09IDApIHsgYnJlYWs7IH0KICB9CiAgaWYgKHJvb3QgPiBtYXgpIHsKICAgIHJvb3QgPSBtYXg7CiAgfQogIGlmIChtYXggPT09IDApIHsgICAgICAgICAgICAgICAgICAgICAvKiBubyBzeW1ib2xzIHRvIGNvZGUgYXQgYWxsICovCiAgICAvL3RhYmxlLm9wW29wdHMudGFibGVfaW5kZXhdID0gNjQ7ICAvL2hlcmUub3AgPSAodmFyIGNoYXIpNjQ7ICAgIC8qIGludmFsaWQgY29kZSBtYXJrZXIgKi8KICAgIC8vdGFibGUuYml0c1tvcHRzLnRhYmxlX2luZGV4XSA9IDE7ICAgLy9oZXJlLmJpdHMgPSAodmFyIGNoYXIpMTsKICAgIC8vdGFibGUudmFsW29wdHMudGFibGVfaW5kZXgrK10gPSAwOyAgIC8vaGVyZS52YWwgPSAodmFyIHNob3J0KTA7CiAgICB0YWJsZVt0YWJsZV9pbmRleCsrXSA9ICgxIDw8IDI0KSB8ICg2NCA8PCAxNikgfCAwOwoKCiAgICAvL3RhYmxlLm9wW29wdHMudGFibGVfaW5kZXhdID0gNjQ7CiAgICAvL3RhYmxlLmJpdHNbb3B0cy50YWJsZV9pbmRleF0gPSAxOwogICAgLy90YWJsZS52YWxbb3B0cy50YWJsZV9pbmRleCsrXSA9IDA7CiAgICB0YWJsZVt0YWJsZV9pbmRleCsrXSA9ICgxIDw8IDI0KSB8ICg2NCA8PCAxNikgfCAwOwoKICAgIG9wdHMuYml0cyA9IDE7CiAgICByZXR1cm4gMDsgICAgIC8qIG5vIHN5bWJvbHMsIGJ1dCB3YWl0IGZvciBkZWNvZGluZyB0byByZXBvcnQgZXJyb3IgKi8KICB9CiAgZm9yIChtaW4gPSAxOyBtaW4gPCBtYXg7IG1pbisrKSB7CiAgICBpZiAoY291bnRbbWluXSAhPT0gMCkgeyBicmVhazsgfQogIH0KICBpZiAocm9vdCA8IG1pbikgewogICAgcm9vdCA9IG1pbjsKICB9CgogIC8qIGNoZWNrIGZvciBhbiBvdmVyLXN1YnNjcmliZWQgb3IgaW5jb21wbGV0ZSBzZXQgb2YgbGVuZ3RocyAqLwogIGxlZnQgPSAxOwogIGZvciAobGVuID0gMTsgbGVuIDw9IE1BWEJJVFM7IGxlbisrKSB7CiAgICBsZWZ0IDw8PSAxOwogICAgbGVmdCAtPSBjb3VudFtsZW5dOwogICAgaWYgKGxlZnQgPCAwKSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0gICAgICAgIC8qIG92ZXItc3Vic2NyaWJlZCAqLwogIH0KICBpZiAobGVmdCA+IDAgJiYgKHR5cGUgPT09IENPREVTIHx8IG1heCAhPT0gMSkpIHsKICAgIHJldHVybiAtMTsgICAgICAgICAgICAgICAgICAgICAgLyogaW5jb21wbGV0ZSBzZXQgKi8KICB9CgogIC8qIGdlbmVyYXRlIG9mZnNldHMgaW50byBzeW1ib2wgdGFibGUgZm9yIGVhY2ggbGVuZ3RoIGZvciBzb3J0aW5nICovCiAgb2Zmc1sxXSA9IDA7CiAgZm9yIChsZW4gPSAxOyBsZW4gPCBNQVhCSVRTOyBsZW4rKykgewogICAgb2Zmc1tsZW4gKyAxXSA9IG9mZnNbbGVuXSArIGNvdW50W2xlbl07CiAgfQoKICAvKiBzb3J0IHN5bWJvbHMgYnkgbGVuZ3RoLCBieSBzeW1ib2wgb3JkZXIgd2l0aGluIGVhY2ggbGVuZ3RoICovCiAgZm9yIChzeW0gPSAwOyBzeW0gPCBjb2Rlczsgc3ltKyspIHsKICAgIGlmIChsZW5zW2xlbnNfaW5kZXggKyBzeW1dICE9PSAwKSB7CiAgICAgIHdvcmtbb2Zmc1tsZW5zW2xlbnNfaW5kZXggKyBzeW1dXSsrXSA9IHN5bTsKICAgIH0KICB9CgogIC8qCiAgIENyZWF0ZSBhbmQgZmlsbCBpbiBkZWNvZGluZyB0YWJsZXMuICBJbiB0aGlzIGxvb3AsIHRoZSB0YWJsZSBiZWluZwogICBmaWxsZWQgaXMgYXQgbmV4dCBhbmQgaGFzIGN1cnIgaW5kZXggYml0cy4gIFRoZSBjb2RlIGJlaW5nIHVzZWQgaXMgaHVmZgogICB3aXRoIGxlbmd0aCBsZW4uICBUaGF0IGNvZGUgaXMgY29udmVydGVkIHRvIGFuIGluZGV4IGJ5IGRyb3BwaW5nIGRyb3AKICAgYml0cyBvZmYgb2YgdGhlIGJvdHRvbS4gIEZvciBjb2RlcyB3aGVyZSBsZW4gaXMgbGVzcyB0aGFuIGRyb3AgKyBjdXJyLAogICB0aG9zZSB0b3AgZHJvcCArIGN1cnIgLSBsZW4gYml0cyBhcmUgaW5jcmVtZW50ZWQgdGhyb3VnaCBhbGwgdmFsdWVzIHRvCiAgIGZpbGwgdGhlIHRhYmxlIHdpdGggcmVwbGljYXRlZCBlbnRyaWVzLgoKICAgcm9vdCBpcyB0aGUgbnVtYmVyIG9mIGluZGV4IGJpdHMgZm9yIHRoZSByb290IHRhYmxlLiAgV2hlbiBsZW4gZXhjZWVkcwogICByb290LCBzdWItdGFibGVzIGFyZSBjcmVhdGVkIHBvaW50ZWQgdG8gYnkgdGhlIHJvb3QgZW50cnkgd2l0aCBhbiBpbmRleAogICBvZiB0aGUgbG93IHJvb3QgYml0cyBvZiBodWZmLiAgVGhpcyBpcyBzYXZlZCBpbiBsb3cgdG8gY2hlY2sgZm9yIHdoZW4gYQogICBuZXcgc3ViLXRhYmxlIHNob3VsZCBiZSBzdGFydGVkLiAgZHJvcCBpcyB6ZXJvIHdoZW4gdGhlIHJvb3QgdGFibGUgaXMKICAgYmVpbmcgZmlsbGVkLCBhbmQgZHJvcCBpcyByb290IHdoZW4gc3ViLXRhYmxlcyBhcmUgYmVpbmcgZmlsbGVkLgoKICAgV2hlbiBhIG5ldyBzdWItdGFibGUgaXMgbmVlZGVkLCBpdCBpcyBuZWNlc3NhcnkgdG8gbG9vayBhaGVhZCBpbiB0aGUKICAgY29kZSBsZW5ndGhzIHRvIGRldGVybWluZSB3aGF0IHNpemUgc3ViLXRhYmxlIGlzIG5lZWRlZC4gIFRoZSBsZW5ndGgKICAgY291bnRzIGFyZSB1c2VkIGZvciB0aGlzLCBhbmQgc28gY291bnRbXSBpcyBkZWNyZW1lbnRlZCBhcyBjb2RlcyBhcmUKICAgZW50ZXJlZCBpbiB0aGUgdGFibGVzLgoKICAgdXNlZCBrZWVwcyB0cmFjayBvZiBob3cgbWFueSB0YWJsZSBlbnRyaWVzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgZnJvbSB0aGUKICAgcHJvdmlkZWQgKnRhYmxlIHNwYWNlLiAgSXQgaXMgY2hlY2tlZCBmb3IgTEVOUyBhbmQgRElTVCB0YWJsZXMgYWdhaW5zdAogICB0aGUgY29uc3RhbnRzIEVOT1VHSF9MRU5TIGFuZCBFTk9VR0hfRElTVFMgdG8gZ3VhcmQgYWdhaW5zdCBjaGFuZ2VzIGluCiAgIHRoZSBpbml0aWFsIHJvb3QgdGFibGUgc2l6ZSBjb25zdGFudHMuICBTZWUgdGhlIGNvbW1lbnRzIGluIGluZnRyZWVzLmgKICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCgogICBzeW0gaW5jcmVtZW50cyB0aHJvdWdoIGFsbCBzeW1ib2xzLCBhbmQgdGhlIGxvb3AgdGVybWluYXRlcyB3aGVuCiAgIGFsbCBjb2RlcyBvZiBsZW5ndGggbWF4LCBpLmUuIGFsbCBjb2RlcywgaGF2ZSBiZWVuIHByb2Nlc3NlZC4gIFRoaXMKICAgcm91dGluZSBwZXJtaXRzIGluY29tcGxldGUgY29kZXMsIHNvIGFub3RoZXIgbG9vcCBhZnRlciB0aGlzIG9uZSBmaWxscwogICBpbiB0aGUgcmVzdCBvZiB0aGUgZGVjb2RpbmcgdGFibGVzIHdpdGggaW52YWxpZCBjb2RlIG1hcmtlcnMuCiAgICovCgogIC8qIHNldCB1cCBmb3IgY29kZSB0eXBlICovCiAgLy8gcG9vciBtYW4gb3B0aW1pemF0aW9uIC0gdXNlIGlmLWVsc2UgaW5zdGVhZCBvZiBzd2l0Y2gsCiAgLy8gdG8gYXZvaWQgZGVvcHRzIGluIG9sZCB2OAogIGlmICh0eXBlID09PSBDT0RFUykgewogICAgICBiYXNlID0gZXh0cmEgPSB3b3JrOyAgICAvKiBkdW1teSB2YWx1ZS0tbm90IHVzZWQgKi8KICAgICAgZW5kID0gMTk7CiAgfSBlbHNlIGlmICh0eXBlID09PSBMRU5TKSB7CiAgICAgIGJhc2UgPSBsYmFzZTsKICAgICAgYmFzZV9pbmRleCAtPSAyNTc7CiAgICAgIGV4dHJhID0gbGV4dDsKICAgICAgZXh0cmFfaW5kZXggLT0gMjU3OwogICAgICBlbmQgPSAyNTY7CiAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgIC8qIERJU1RTICovCiAgICAgIGJhc2UgPSBkYmFzZTsKICAgICAgZXh0cmEgPSBkZXh0OwogICAgICBlbmQgPSAtMTsKICB9CgogIC8qIGluaXRpYWxpemUgb3B0cyBmb3IgbG9vcCAqLwogIGh1ZmYgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBzdGFydGluZyBjb2RlICovCiAgc3ltID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0aW5nIGNvZGUgc3ltYm9sICovCiAgbGVuID0gbWluOyAgICAgICAgICAgICAgICAgIC8qIHN0YXJ0aW5nIGNvZGUgbGVuZ3RoICovCiAgbmV4dCA9IHRhYmxlX2luZGV4OyAgICAgICAgICAgICAgLyogY3VycmVudCB0YWJsZSB0byBmaWxsIGluICovCiAgY3VyciA9IHJvb3Q7ICAgICAgICAgICAgICAgIC8qIGN1cnJlbnQgdGFibGUgaW5kZXggYml0cyAqLwogIGRyb3AgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IGJpdHMgdG8gZHJvcCBmcm9tIGNvZGUgZm9yIGluZGV4ICovCiAgbG93ID0gLTE7ICAgICAgICAgICAgICAgICAgIC8qIHRyaWdnZXIgbmV3IHN1Yi10YWJsZSB3aGVuIGxlbiA+IHJvb3QgKi8KICB1c2VkID0gMSA8PCByb290OyAgICAgICAgICAvKiB1c2Ugcm9vdCB0YWJsZSBlbnRyaWVzICovCiAgbWFzayA9IHVzZWQgLSAxOyAgICAgICAgICAgIC8qIG1hc2sgZm9yIGNvbXBhcmluZyBsb3cgKi8KCiAgLyogY2hlY2sgYXZhaWxhYmxlIHRhYmxlIHNwYWNlICovCiAgaWYgKCh0eXBlID09PSBMRU5TICYmIHVzZWQgPiBFTk9VR0hfTEVOUykgfHwKICAgICh0eXBlID09PSBESVNUUyAmJiB1c2VkID4gRU5PVUdIX0RJU1RTKSkgewogICAgcmV0dXJuIDE7CiAgfQoKICB2YXIgaT0wOwogIC8qIHByb2Nlc3MgYWxsIGNvZGVzIGFuZCBtYWtlIHRhYmxlIGVudHJpZXMgKi8KICBmb3IgKDs7KSB7CiAgICBpKys7CiAgICAvKiBjcmVhdGUgdGFibGUgZW50cnkgKi8KICAgIGhlcmVfYml0cyA9IGxlbiAtIGRyb3A7CiAgICBpZiAod29ya1tzeW1dIDwgZW5kKSB7CiAgICAgIGhlcmVfb3AgPSAwOwogICAgICBoZXJlX3ZhbCA9IHdvcmtbc3ltXTsKICAgIH0KICAgIGVsc2UgaWYgKHdvcmtbc3ltXSA+IGVuZCkgewogICAgICBoZXJlX29wID0gZXh0cmFbZXh0cmFfaW5kZXggKyB3b3JrW3N5bV1dOwogICAgICBoZXJlX3ZhbCA9IGJhc2VbYmFzZV9pbmRleCArIHdvcmtbc3ltXV07CiAgICB9CiAgICBlbHNlIHsKICAgICAgaGVyZV9vcCA9IDMyICsgNjQ7ICAgICAgICAgLyogZW5kIG9mIGJsb2NrICovCiAgICAgIGhlcmVfdmFsID0gMDsKICAgIH0KCiAgICAvKiByZXBsaWNhdGUgZm9yIHRob3NlIGluZGljZXMgd2l0aCBsb3cgbGVuIGJpdHMgZXF1YWwgdG8gaHVmZiAqLwogICAgaW5jciA9IDEgPDwgKGxlbiAtIGRyb3ApOwogICAgZmlsbCA9IDEgPDwgY3VycjsKICAgIG1pbiA9IGZpbGw7ICAgICAgICAgICAgICAgICAvKiBzYXZlIG9mZnNldCB0byBuZXh0IHRhYmxlICovCiAgICBkbyB7CiAgICAgIGZpbGwgLT0gaW5jcjsKICAgICAgdGFibGVbbmV4dCArIChodWZmID4+IGRyb3ApICsgZmlsbF0gPSAoaGVyZV9iaXRzIDw8IDI0KSB8IChoZXJlX29wIDw8IDE2KSB8IGhlcmVfdmFsIHwwOwogICAgfSB3aGlsZSAoZmlsbCAhPT0gMCk7CgogICAgLyogYmFja3dhcmRzIGluY3JlbWVudCB0aGUgbGVuLWJpdCBjb2RlIGh1ZmYgKi8KICAgIGluY3IgPSAxIDw8IChsZW4gLSAxKTsKICAgIHdoaWxlIChodWZmICYgaW5jcikgewogICAgICBpbmNyID4+PSAxOwogICAgfQogICAgaWYgKGluY3IgIT09IDApIHsKICAgICAgaHVmZiAmPSBpbmNyIC0gMTsKICAgICAgaHVmZiArPSBpbmNyOwogICAgfSBlbHNlIHsKICAgICAgaHVmZiA9IDA7CiAgICB9CgogICAgLyogZ28gdG8gbmV4dCBzeW1ib2wsIHVwZGF0ZSBjb3VudCwgbGVuICovCiAgICBzeW0rKzsKICAgIGlmICgtLWNvdW50W2xlbl0gPT09IDApIHsKICAgICAgaWYgKGxlbiA9PT0gbWF4KSB7IGJyZWFrOyB9CiAgICAgIGxlbiA9IGxlbnNbbGVuc19pbmRleCArIHdvcmtbc3ltXV07CiAgICB9CgogICAgLyogY3JlYXRlIG5ldyBzdWItdGFibGUgaWYgbmVlZGVkICovCiAgICBpZiAobGVuID4gcm9vdCAmJiAoaHVmZiAmIG1hc2spICE9PSBsb3cpIHsKICAgICAgLyogaWYgZmlyc3QgdGltZSwgdHJhbnNpdGlvbiB0byBzdWItdGFibGVzICovCiAgICAgIGlmIChkcm9wID09PSAwKSB7CiAgICAgICAgZHJvcCA9IHJvb3Q7CiAgICAgIH0KCiAgICAgIC8qIGluY3JlbWVudCBwYXN0IGxhc3QgdGFibGUgKi8KICAgICAgbmV4dCArPSBtaW47ICAgICAgICAgICAgLyogaGVyZSBtaW4gaXMgMSA8PCBjdXJyICovCgogICAgICAvKiBkZXRlcm1pbmUgbGVuZ3RoIG9mIG5leHQgdGFibGUgKi8KICAgICAgY3VyciA9IGxlbiAtIGRyb3A7CiAgICAgIGxlZnQgPSAxIDw8IGN1cnI7CiAgICAgIHdoaWxlIChjdXJyICsgZHJvcCA8IG1heCkgewogICAgICAgIGxlZnQgLT0gY291bnRbY3VyciArIGRyb3BdOwogICAgICAgIGlmIChsZWZ0IDw9IDApIHsgYnJlYWs7IH0KICAgICAgICBjdXJyKys7CiAgICAgICAgbGVmdCA8PD0gMTsKICAgICAgfQoKICAgICAgLyogY2hlY2sgZm9yIGVub3VnaCBzcGFjZSAqLwogICAgICB1c2VkICs9IDEgPDwgY3VycjsKICAgICAgaWYgKCh0eXBlID09PSBMRU5TICYmIHVzZWQgPiBFTk9VR0hfTEVOUykgfHwKICAgICAgICAodHlwZSA9PT0gRElTVFMgJiYgdXNlZCA+IEVOT1VHSF9ESVNUUykpIHsKICAgICAgICByZXR1cm4gMTsKICAgICAgfQoKICAgICAgLyogcG9pbnQgZW50cnkgaW4gcm9vdCB0YWJsZSB0byBzdWItdGFibGUgKi8KICAgICAgbG93ID0gaHVmZiAmIG1hc2s7CiAgICAgIC8qdGFibGUub3BbbG93XSA9IGN1cnI7CiAgICAgIHRhYmxlLmJpdHNbbG93XSA9IHJvb3Q7CiAgICAgIHRhYmxlLnZhbFtsb3ddID0gbmV4dCAtIG9wdHMudGFibGVfaW5kZXg7Ki8KICAgICAgdGFibGVbbG93XSA9IChyb290IDw8IDI0KSB8IChjdXJyIDw8IDE2KSB8IChuZXh0IC0gdGFibGVfaW5kZXgpIHwwOwogICAgfQogIH0KCiAgLyogZmlsbCBpbiByZW1haW5pbmcgdGFibGUgZW50cnkgaWYgY29kZSBpcyBpbmNvbXBsZXRlIChndWFyYW50ZWVkIHRvIGhhdmUKICAgYXQgbW9zdCBvbmUgcmVtYWluaW5nIGVudHJ5LCBzaW5jZSBpZiB0aGUgY29kZSBpcyBpbmNvbXBsZXRlLCB0aGUKICAgbWF4aW11bSBjb2RlIGxlbmd0aCB0aGF0IHdhcyBhbGxvd2VkIHRvIGdldCB0aGlzIGZhciBpcyBvbmUgYml0KSAqLwogIGlmIChodWZmICE9PSAwKSB7CiAgICAvL3RhYmxlLm9wW25leHQgKyBodWZmXSA9IDY0OyAgICAgICAgICAgIC8qIGludmFsaWQgY29kZSBtYXJrZXIgKi8KICAgIC8vdGFibGUuYml0c1tuZXh0ICsgaHVmZl0gPSBsZW4gLSBkcm9wOwogICAgLy90YWJsZS52YWxbbmV4dCArIGh1ZmZdID0gMDsKICAgIHRhYmxlW25leHQgKyBodWZmXSA9ICgobGVuIC0gZHJvcCkgPDwgMjQpIHwgKDY0IDw8IDE2KSB8MDsKICB9CgogIC8qIHNldCByZXR1cm4gcGFyYW1ldGVycyAqLwogIC8vb3B0cy50YWJsZV9pbmRleCArPSB1c2VkOwogIG9wdHMuYml0cyA9IHJvb3Q7CiAgcmV0dXJuIDA7Cn07Cgp9LHsiLi4vdXRpbHMvY29tbW9uIjoyN31dLDM3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKbW9kdWxlLmV4cG9ydHMgPSB7CiAgJzInOiAgICAnbmVlZCBkaWN0aW9uYXJ5JywgICAgIC8qIFpfTkVFRF9ESUNUICAgICAgIDIgICovCiAgJzEnOiAgICAnc3RyZWFtIGVuZCcsICAgICAgICAgIC8qIFpfU1RSRUFNX0VORCAgICAgIDEgICovCiAgJzAnOiAgICAnJywgICAgICAgICAgICAgICAgICAgIC8qIFpfT0sgICAgICAgICAgICAgIDAgICovCiAgJy0xJzogICAnZmlsZSBlcnJvcicsICAgICAgICAgIC8qIFpfRVJSTk8gICAgICAgICAoLTEpICovCiAgJy0yJzogICAnc3RyZWFtIGVycm9yJywgICAgICAgIC8qIFpfU1RSRUFNX0VSUk9SICAoLTIpICovCiAgJy0zJzogICAnZGF0YSBlcnJvcicsICAgICAgICAgIC8qIFpfREFUQV9FUlJPUiAgICAoLTMpICovCiAgJy00JzogICAnaW5zdWZmaWNpZW50IG1lbW9yeScsIC8qIFpfTUVNX0VSUk9SICAgICAoLTQpICovCiAgJy01JzogICAnYnVmZmVyIGVycm9yJywgICAgICAgIC8qIFpfQlVGX0VSUk9SICAgICAoLTUpICovCiAgJy02JzogICAnaW5jb21wYXRpYmxlIHZlcnNpb24nIC8qIFpfVkVSU0lPTl9FUlJPUiAoLTYpICovCn07Cn0se31dLDM4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKCnZhciB1dGlscyA9IF9kZXJlcV8oJy4uL3V0aWxzL2NvbW1vbicpOwoKLyogUHVibGljIGNvbnN0YW50cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCgovL3ZhciBaX0ZJTFRFUkVEICAgICAgICAgID0gMTsKLy92YXIgWl9IVUZGTUFOX09OTFkgICAgICA9IDI7Ci8vdmFyIFpfUkxFICAgICAgICAgICAgICAgPSAzOwp2YXIgWl9GSVhFRCAgICAgICAgICAgICAgID0gNDsKLy92YXIgWl9ERUZBVUxUX1NUUkFURUdZICA9IDA7CgovKiBQb3NzaWJsZSB2YWx1ZXMgb2YgdGhlIGRhdGFfdHlwZSBmaWVsZCAodGhvdWdoIHNlZSBpbmZsYXRlKCkpICovCnZhciBaX0JJTkFSWSAgICAgICAgICAgICAgPSAwOwp2YXIgWl9URVhUICAgICAgICAgICAgICAgID0gMTsKLy92YXIgWl9BU0NJSSAgICAgICAgICAgICA9IDE7IC8vID0gWl9URVhUCnZhciBaX1VOS05PV04gICAgICAgICAgICAgPSAyOwoKLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCgpmdW5jdGlvbiB6ZXJvKGJ1ZikgeyB2YXIgbGVuID0gYnVmLmxlbmd0aDsgd2hpbGUgKC0tbGVuID49IDApIHsgYnVmW2xlbl0gPSAwOyB9IH0KCi8vIEZyb20genV0aWwuaAoKdmFyIFNUT1JFRF9CTE9DSyA9IDA7CnZhciBTVEFUSUNfVFJFRVMgPSAxOwp2YXIgRFlOX1RSRUVTICAgID0gMjsKLyogVGhlIHRocmVlIGtpbmRzIG9mIGJsb2NrIHR5cGUgKi8KCnZhciBNSU5fTUFUQ0ggICAgPSAzOwp2YXIgTUFYX01BVENIICAgID0gMjU4OwovKiBUaGUgbWluaW11bSBhbmQgbWF4aW11bSBtYXRjaCBsZW5ndGhzICovCgovLyBGcm9tIGRlZmxhdGUuaAovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogSW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUuCiAqLwoKdmFyIExFTkdUSF9DT0RFUyAgPSAyOTsKLyogbnVtYmVyIG9mIGxlbmd0aCBjb2Rlcywgbm90IGNvdW50aW5nIHRoZSBzcGVjaWFsIEVORF9CTE9DSyBjb2RlICovCgp2YXIgTElURVJBTFMgICAgICA9IDI1NjsKLyogbnVtYmVyIG9mIGxpdGVyYWwgYnl0ZXMgMC4uMjU1ICovCgp2YXIgTF9DT0RFUyAgICAgICA9IExJVEVSQUxTICsgMSArIExFTkdUSF9DT0RFUzsKLyogbnVtYmVyIG9mIExpdGVyYWwgb3IgTGVuZ3RoIGNvZGVzLCBpbmNsdWRpbmcgdGhlIEVORF9CTE9DSyBjb2RlICovCgp2YXIgRF9DT0RFUyAgICAgICA9IDMwOwovKiBudW1iZXIgb2YgZGlzdGFuY2UgY29kZXMgKi8KCnZhciBCTF9DT0RFUyAgICAgID0gMTk7Ci8qIG51bWJlciBvZiBjb2RlcyB1c2VkIHRvIHRyYW5zZmVyIHRoZSBiaXQgbGVuZ3RocyAqLwoKdmFyIEhFQVBfU0laRSAgICAgPSAyKkxfQ09ERVMgKyAxOwovKiBtYXhpbXVtIGhlYXAgc2l6ZSAqLwoKdmFyIE1BWF9CSVRTICAgICAgPSAxNTsKLyogQWxsIGNvZGVzIG11c3Qgbm90IGV4Y2VlZCBNQVhfQklUUyBiaXRzICovCgp2YXIgQnVmX3NpemUgICAgICA9IDE2OwovKiBzaXplIG9mIGJpdCBidWZmZXIgaW4gYmlfYnVmICovCgoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIENvbnN0YW50cwogKi8KCnZhciBNQVhfQkxfQklUUyA9IDc7Ci8qIEJpdCBsZW5ndGggY29kZXMgbXVzdCBub3QgZXhjZWVkIE1BWF9CTF9CSVRTIGJpdHMgKi8KCnZhciBFTkRfQkxPQ0sgICA9IDI1NjsKLyogZW5kIG9mIGJsb2NrIGxpdGVyYWwgY29kZSAqLwoKdmFyIFJFUF8zXzYgICAgID0gMTY7Ci8qIHJlcGVhdCBwcmV2aW91cyBiaXQgbGVuZ3RoIDMtNiB0aW1lcyAoMiBiaXRzIG9mIHJlcGVhdCBjb3VudCkgKi8KCnZhciBSRVBaXzNfMTAgICA9IDE3OwovKiByZXBlYXQgYSB6ZXJvIGxlbmd0aCAzLTEwIHRpbWVzICAoMyBiaXRzIG9mIHJlcGVhdCBjb3VudCkgKi8KCnZhciBSRVBaXzExXzEzOCA9IDE4OwovKiByZXBlYXQgYSB6ZXJvIGxlbmd0aCAxMS0xMzggdGltZXMgICg3IGJpdHMgb2YgcmVwZWF0IGNvdW50KSAqLwoKdmFyIGV4dHJhX2xiaXRzID0gICAvKiBleHRyYSBiaXRzIGZvciBlYWNoIGxlbmd0aCBjb2RlICovCiAgWzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMF07Cgp2YXIgZXh0cmFfZGJpdHMgPSAgIC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggZGlzdGFuY2UgY29kZSAqLwogIFswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXTsKCnZhciBleHRyYV9ibGJpdHMgPSAgLyogZXh0cmEgYml0cyBmb3IgZWFjaCBiaXQgbGVuZ3RoIGNvZGUgKi8KICBbMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDMsN107Cgp2YXIgYmxfb3JkZXIgPQogIFsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XTsKLyogVGhlIGxlbmd0aHMgb2YgdGhlIGJpdCBsZW5ndGggY29kZXMgYXJlIHNlbnQgaW4gb3JkZXIgb2YgZGVjcmVhc2luZwogKiBwcm9iYWJpbGl0eSwgdG8gYXZvaWQgdHJhbnNtaXR0aW5nIHRoZSBsZW5ndGhzIGZvciB1bnVzZWQgYml0IGxlbmd0aCBjb2Rlcy4KICovCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogTG9jYWwgZGF0YS4gVGhlc2UgYXJlIGluaXRpYWxpemVkIG9ubHkgb25jZS4KICovCgovLyBXZSBwcmUtZmlsbCBhcnJheXMgd2l0aCAwIHRvIGF2b2lkIHVuaW5pdGlhbGl6ZWQgZ2FwcwoKdmFyIERJU1RfQ09ERV9MRU4gPSA1MTI7IC8qIHNlZSBkZWZpbml0aW9uIG9mIGFycmF5IGRpc3RfY29kZSBiZWxvdyAqLwoKLy8gISEhISBVc2UgZmxhdCBhcnJheSBpbnNkZWFkIG9mIHN0cnVjdHVyZSwgRnJlcSA9IGkqMiwgTGVuID0gaSoyKzEKdmFyIHN0YXRpY19sdHJlZSAgPSBuZXcgQXJyYXkoKExfQ09ERVMrMikgKiAyKTsKemVybyhzdGF0aWNfbHRyZWUpOwovKiBUaGUgc3RhdGljIGxpdGVyYWwgdHJlZS4gU2luY2UgdGhlIGJpdCBsZW5ndGhzIGFyZSBpbXBvc2VkLCB0aGVyZSBpcyBubwogKiBuZWVkIGZvciB0aGUgTF9DT0RFUyBleHRyYSBjb2RlcyB1c2VkIGR1cmluZyBoZWFwIGNvbnN0cnVjdGlvbi4gSG93ZXZlcgogKiBUaGUgY29kZXMgMjg2IGFuZCAyODcgYXJlIG5lZWRlZCB0byBidWlsZCBhIGNhbm9uaWNhbCB0cmVlIChzZWUgX3RyX2luaXQKICogYmVsb3cpLgogKi8KCnZhciBzdGF0aWNfZHRyZWUgID0gbmV3IEFycmF5KERfQ09ERVMgKiAyKTsKemVybyhzdGF0aWNfZHRyZWUpOwovKiBUaGUgc3RhdGljIGRpc3RhbmNlIHRyZWUuIChBY3R1YWxseSBhIHRyaXZpYWwgdHJlZSBzaW5jZSBhbGwgY29kZXMgdXNlCiAqIDUgYml0cy4pCiAqLwoKdmFyIF9kaXN0X2NvZGUgICAgPSBuZXcgQXJyYXkoRElTVF9DT0RFX0xFTik7Cnplcm8oX2Rpc3RfY29kZSk7Ci8qIERpc3RhbmNlIGNvZGVzLiBUaGUgZmlyc3QgMjU2IHZhbHVlcyBjb3JyZXNwb25kIHRvIHRoZSBkaXN0YW5jZXMKICogMyAuLiAyNTgsIHRoZSBsYXN0IDI1NiB2YWx1ZXMgY29ycmVzcG9uZCB0byB0aGUgdG9wIDggYml0cyBvZgogKiB0aGUgMTUgYml0IGRpc3RhbmNlcy4KICovCgp2YXIgX2xlbmd0aF9jb2RlICA9IG5ldyBBcnJheShNQVhfTUFUQ0gtTUlOX01BVENIKzEpOwp6ZXJvKF9sZW5ndGhfY29kZSk7Ci8qIGxlbmd0aCBjb2RlIGZvciBlYWNoIG5vcm1hbGl6ZWQgbWF0Y2ggbGVuZ3RoICgwID09IE1JTl9NQVRDSCkgKi8KCnZhciBiYXNlX2xlbmd0aCAgID0gbmV3IEFycmF5KExFTkdUSF9DT0RFUyk7Cnplcm8oYmFzZV9sZW5ndGgpOwovKiBGaXJzdCBub3JtYWxpemVkIGxlbmd0aCBmb3IgZWFjaCBjb2RlICgwID0gTUlOX01BVENIKSAqLwoKdmFyIGJhc2VfZGlzdCAgICAgPSBuZXcgQXJyYXkoRF9DT0RFUyk7Cnplcm8oYmFzZV9kaXN0KTsKLyogRmlyc3Qgbm9ybWFsaXplZCBkaXN0YW5jZSBmb3IgZWFjaCBjb2RlICgwID0gZGlzdGFuY2Ugb2YgMSkgKi8KCgp2YXIgU3RhdGljVHJlZURlc2MgPSBmdW5jdGlvbiAoc3RhdGljX3RyZWUsIGV4dHJhX2JpdHMsIGV4dHJhX2Jhc2UsIGVsZW1zLCBtYXhfbGVuZ3RoKSB7CgogIHRoaXMuc3RhdGljX3RyZWUgID0gc3RhdGljX3RyZWU7ICAvKiBzdGF0aWMgdHJlZSBvciBOVUxMICovCiAgdGhpcy5leHRyYV9iaXRzICAgPSBleHRyYV9iaXRzOyAgIC8qIGV4dHJhIGJpdHMgZm9yIGVhY2ggY29kZSBvciBOVUxMICovCiAgdGhpcy5leHRyYV9iYXNlICAgPSBleHRyYV9iYXNlOyAgIC8qIGJhc2UgaW5kZXggZm9yIGV4dHJhX2JpdHMgKi8KICB0aGlzLmVsZW1zICAgICAgICA9IGVsZW1zOyAgICAgICAgLyogbWF4IG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgdHJlZSAqLwogIHRoaXMubWF4X2xlbmd0aCAgID0gbWF4X2xlbmd0aDsgICAvKiBtYXggYml0IGxlbmd0aCBmb3IgdGhlIGNvZGVzICovCgogIC8vIHNob3cgaWYgYHN0YXRpY190cmVlYCBoYXMgZGF0YSBvciBkdW1teSAtIG5lZWRlZCBmb3IgbW9ub21vcnBoaWMgb2JqZWN0cwogIHRoaXMuaGFzX3N0cmVlICAgID0gc3RhdGljX3RyZWUgJiYgc3RhdGljX3RyZWUubGVuZ3RoOwp9OwoKCnZhciBzdGF0aWNfbF9kZXNjOwp2YXIgc3RhdGljX2RfZGVzYzsKdmFyIHN0YXRpY19ibF9kZXNjOwoKCnZhciBUcmVlRGVzYyA9IGZ1bmN0aW9uKGR5bl90cmVlLCBzdGF0X2Rlc2MpIHsKICB0aGlzLmR5bl90cmVlID0gZHluX3RyZWU7ICAgICAvKiB0aGUgZHluYW1pYyB0cmVlICovCiAgdGhpcy5tYXhfY29kZSA9IDA7ICAgICAgICAgICAgLyogbGFyZ2VzdCBjb2RlIHdpdGggbm9uIHplcm8gZnJlcXVlbmN5ICovCiAgdGhpcy5zdGF0X2Rlc2MgPSBzdGF0X2Rlc2M7ICAgLyogdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGljIHRyZWUgKi8KfTsKCgoKZnVuY3Rpb24gZF9jb2RlKGRpc3QpIHsKICByZXR1cm4gZGlzdCA8IDI1NiA/IF9kaXN0X2NvZGVbZGlzdF0gOiBfZGlzdF9jb2RlWzI1NiArIChkaXN0ID4+PiA3KV07Cn0KCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogT3V0cHV0IGEgc2hvcnQgTFNCIGZpcnN0IG9uIHRoZSBzdHJlYW0uCiAqIElOIGFzc2VydGlvbjogdGhlcmUgaXMgZW5vdWdoIHJvb20gaW4gcGVuZGluZ0J1Zi4KICovCmZ1bmN0aW9uIHB1dF9zaG9ydCAocywgdykgewovLyAgICBwdXRfYnl0ZShzLCAodWNoKSgodykgJiAweGZmKSk7Ci8vICAgIHB1dF9ieXRlKHMsICh1Y2gpKCh1c2gpKHcpID4+IDgpKTsKICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9ICh3KSAmIDB4ZmY7CiAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSAodyA+Pj4gOCkgJiAweGZmOwp9CgoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIFNlbmQgYSB2YWx1ZSBvbiBhIGdpdmVuIG51bWJlciBvZiBiaXRzLgogKiBJTiBhc3NlcnRpb246IGxlbmd0aCA8PSAxNiBhbmQgdmFsdWUgZml0cyBpbiBsZW5ndGggYml0cy4KICovCmZ1bmN0aW9uIHNlbmRfYml0cyhzLCB2YWx1ZSwgbGVuZ3RoKSB7CiAgaWYgKHMuYmlfdmFsaWQgPiAoQnVmX3NpemUgLSBsZW5ndGgpKSB7CiAgICBzLmJpX2J1ZiB8PSAodmFsdWUgPDwgcy5iaV92YWxpZCkgJiAweGZmZmY7CiAgICBwdXRfc2hvcnQocywgcy5iaV9idWYpOwogICAgcy5iaV9idWYgPSB2YWx1ZSA+PiAoQnVmX3NpemUgLSBzLmJpX3ZhbGlkKTsKICAgIHMuYmlfdmFsaWQgKz0gbGVuZ3RoIC0gQnVmX3NpemU7CiAgfSBlbHNlIHsKICAgIHMuYmlfYnVmIHw9ICh2YWx1ZSA8PCBzLmJpX3ZhbGlkKSAmIDB4ZmZmZjsKICAgIHMuYmlfdmFsaWQgKz0gbGVuZ3RoOwogIH0KfQoKCmZ1bmN0aW9uIHNlbmRfY29kZShzLCBjLCB0cmVlKSB7CiAgc2VuZF9iaXRzKHMsIHRyZWVbYyoyXS8qLkNvZGUqLywgdHJlZVtjKjIgKyAxXS8qLkxlbiovKTsKfQoKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBSZXZlcnNlIHRoZSBmaXJzdCBsZW4gYml0cyBvZiBhIGNvZGUsIHVzaW5nIHN0cmFpZ2h0Zm9yd2FyZCBjb2RlIChhIGZhc3RlcgogKiBtZXRob2Qgd291bGQgdXNlIGEgdGFibGUpCiAqIElOIGFzc2VydGlvbjogMSA8PSBsZW4gPD0gMTUKICovCmZ1bmN0aW9uIGJpX3JldmVyc2UoY29kZSwgbGVuKSB7CiAgdmFyIHJlcyA9IDA7CiAgZG8gewogICAgcmVzIHw9IGNvZGUgJiAxOwogICAgY29kZSA+Pj49IDE7CiAgICByZXMgPDw9IDE7CiAgfSB3aGlsZSAoLS1sZW4gPiAwKTsKICByZXR1cm4gcmVzID4+PiAxOwp9CgoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIEZsdXNoIHRoZSBiaXQgYnVmZmVyLCBrZWVwaW5nIGF0IG1vc3QgNyBiaXRzIGluIGl0LgogKi8KZnVuY3Rpb24gYmlfZmx1c2gocykgewogIGlmIChzLmJpX3ZhbGlkID09PSAxNikgewogICAgcHV0X3Nob3J0KHMsIHMuYmlfYnVmKTsKICAgIHMuYmlfYnVmID0gMDsKICAgIHMuYmlfdmFsaWQgPSAwOwoKICB9IGVsc2UgaWYgKHMuYmlfdmFsaWQgPj0gOCkgewogICAgcy5wZW5kaW5nX2J1ZltzLnBlbmRpbmcrK10gPSBzLmJpX2J1ZiAmIDB4ZmY7CiAgICBzLmJpX2J1ZiA+Pj0gODsKICAgIHMuYmlfdmFsaWQgLT0gODsKICB9Cn0KCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogQ29tcHV0ZSB0aGUgb3B0aW1hbCBiaXQgbGVuZ3RocyBmb3IgYSB0cmVlIGFuZCB1cGRhdGUgdGhlIHRvdGFsIGJpdCBsZW5ndGgKICogZm9yIHRoZSBjdXJyZW50IGJsb2NrLgogKiBJTiBhc3NlcnRpb246IHRoZSBmaWVsZHMgZnJlcSBhbmQgZGFkIGFyZSBzZXQsIGhlYXBbaGVhcF9tYXhdIGFuZAogKiAgICBhYm92ZSBhcmUgdGhlIHRyZWUgbm9kZXMgc29ydGVkIGJ5IGluY3JlYXNpbmcgZnJlcXVlbmN5LgogKiBPVVQgYXNzZXJ0aW9uczogdGhlIGZpZWxkIGxlbiBpcyBzZXQgdG8gdGhlIG9wdGltYWwgYml0IGxlbmd0aCwgdGhlCiAqICAgICBhcnJheSBibF9jb3VudCBjb250YWlucyB0aGUgZnJlcXVlbmNpZXMgZm9yIGVhY2ggYml0IGxlbmd0aC4KICogICAgIFRoZSBsZW5ndGggb3B0X2xlbiBpcyB1cGRhdGVkOyBzdGF0aWNfbGVuIGlzIGFsc28gdXBkYXRlZCBpZiBzdHJlZSBpcwogKiAgICAgbm90IG51bGwuCiAqLwpmdW5jdGlvbiBnZW5fYml0bGVuKHMsIGRlc2MpCi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci8vICAgIHRyZWVfZGVzYyAqZGVzYzsgICAgLyogdGhlIHRyZWUgZGVzY3JpcHRvciAqLwp7CiAgdmFyIHRyZWUgICAgICAgICAgICA9IGRlc2MuZHluX3RyZWU7CiAgdmFyIG1heF9jb2RlICAgICAgICA9IGRlc2MubWF4X2NvZGU7CiAgdmFyIHN0cmVlICAgICAgICAgICA9IGRlc2Muc3RhdF9kZXNjLnN0YXRpY190cmVlOwogIHZhciBoYXNfc3RyZWUgICAgICAgPSBkZXNjLnN0YXRfZGVzYy5oYXNfc3RyZWU7CiAgdmFyIGV4dHJhICAgICAgICAgICA9IGRlc2Muc3RhdF9kZXNjLmV4dHJhX2JpdHM7CiAgdmFyIGJhc2UgICAgICAgICAgICA9IGRlc2Muc3RhdF9kZXNjLmV4dHJhX2Jhc2U7CiAgdmFyIG1heF9sZW5ndGggICAgICA9IGRlc2Muc3RhdF9kZXNjLm1heF9sZW5ndGg7CiAgdmFyIGg7ICAgICAgICAgICAgICAvKiBoZWFwIGluZGV4ICovCiAgdmFyIG4sIG07ICAgICAgICAgICAvKiBpdGVyYXRlIG92ZXIgdGhlIHRyZWUgZWxlbWVudHMgKi8KICB2YXIgYml0czsgICAgICAgICAgIC8qIGJpdCBsZW5ndGggKi8KICB2YXIgeGJpdHM7ICAgICAgICAgIC8qIGV4dHJhIGJpdHMgKi8KICB2YXIgZjsgICAgICAgICAgICAgIC8qIGZyZXF1ZW5jeSAqLwogIHZhciBvdmVyZmxvdyA9IDA7ICAgLyogbnVtYmVyIG9mIGVsZW1lbnRzIHdpdGggYml0IGxlbmd0aCB0b28gbGFyZ2UgKi8KCiAgZm9yIChiaXRzID0gMDsgYml0cyA8PSBNQVhfQklUUzsgYml0cysrKSB7CiAgICBzLmJsX2NvdW50W2JpdHNdID0gMDsKICB9CgogIC8qIEluIGEgZmlyc3QgcGFzcywgY29tcHV0ZSB0aGUgb3B0aW1hbCBiaXQgbGVuZ3RocyAod2hpY2ggbWF5CiAgICogb3ZlcmZsb3cgaW4gdGhlIGNhc2Ugb2YgdGhlIGJpdCBsZW5ndGggdHJlZSkuCiAgICovCiAgdHJlZVtzLmhlYXBbcy5oZWFwX21heF0qMiArIDFdLyouTGVuKi8gPSAwOyAvKiByb290IG9mIHRoZSBoZWFwICovCgogIGZvciAoaCA9IHMuaGVhcF9tYXgrMTsgaCA8IEhFQVBfU0laRTsgaCsrKSB7CiAgICBuID0gcy5oZWFwW2hdOwogICAgYml0cyA9IHRyZWVbdHJlZVtuKjIgKzFdLyouRGFkKi8gKiAyICsgMV0vKi5MZW4qLyArIDE7CiAgICBpZiAoYml0cyA+IG1heF9sZW5ndGgpIHsKICAgICAgYml0cyA9IG1heF9sZW5ndGg7CiAgICAgIG92ZXJmbG93Kys7CiAgICB9CiAgICB0cmVlW24qMiArIDFdLyouTGVuKi8gPSBiaXRzOwogICAgLyogV2Ugb3ZlcndyaXRlIHRyZWVbbl0uRGFkIHdoaWNoIGlzIG5vIGxvbmdlciBuZWVkZWQgKi8KCiAgICBpZiAobiA+IG1heF9jb2RlKSB7IGNvbnRpbnVlOyB9IC8qIG5vdCBhIGxlYWYgbm9kZSAqLwoKICAgIHMuYmxfY291bnRbYml0c10rKzsKICAgIHhiaXRzID0gMDsKICAgIGlmIChuID49IGJhc2UpIHsKICAgICAgeGJpdHMgPSBleHRyYVtuLWJhc2VdOwogICAgfQogICAgZiA9IHRyZWVbbiAqIDJdLyouRnJlcSovOwogICAgcy5vcHRfbGVuICs9IGYgKiAoYml0cyArIHhiaXRzKTsKICAgIGlmIChoYXNfc3RyZWUpIHsKICAgICAgcy5zdGF0aWNfbGVuICs9IGYgKiAoc3RyZWVbbioyICsgMV0vKi5MZW4qLyArIHhiaXRzKTsKICAgIH0KICB9CiAgaWYgKG92ZXJmbG93ID09PSAwKSB7IHJldHVybjsgfQoKICAvLyBUcmFjZSgoc3RkZXJyLCJcbmJpdCBsZW5ndGggb3ZlcmZsb3dcbiIpKTsKICAvKiBUaGlzIGhhcHBlbnMgZm9yIGV4YW1wbGUgb24gb2JqMiBhbmQgcGljIG9mIHRoZSBDYWxnYXJ5IGNvcnB1cyAqLwoKICAvKiBGaW5kIHRoZSBmaXJzdCBiaXQgbGVuZ3RoIHdoaWNoIGNvdWxkIGluY3JlYXNlOiAqLwogIGRvIHsKICAgIGJpdHMgPSBtYXhfbGVuZ3RoLTE7CiAgICB3aGlsZSAocy5ibF9jb3VudFtiaXRzXSA9PT0gMCkgeyBiaXRzLS07IH0KICAgIHMuYmxfY291bnRbYml0c10tLTsgICAgICAvKiBtb3ZlIG9uZSBsZWFmIGRvd24gdGhlIHRyZWUgKi8KICAgIHMuYmxfY291bnRbYml0cysxXSArPSAyOyAvKiBtb3ZlIG9uZSBvdmVyZmxvdyBpdGVtIGFzIGl0cyBicm90aGVyICovCiAgICBzLmJsX2NvdW50W21heF9sZW5ndGhdLS07CiAgICAvKiBUaGUgYnJvdGhlciBvZiB0aGUgb3ZlcmZsb3cgaXRlbSBhbHNvIG1vdmVzIG9uZSBzdGVwIHVwLAogICAgICogYnV0IHRoaXMgZG9lcyBub3QgYWZmZWN0IGJsX2NvdW50W21heF9sZW5ndGhdCiAgICAgKi8KICAgIG92ZXJmbG93IC09IDI7CiAgfSB3aGlsZSAob3ZlcmZsb3cgPiAwKTsKCiAgLyogTm93IHJlY29tcHV0ZSBhbGwgYml0IGxlbmd0aHMsIHNjYW5uaW5nIGluIGluY3JlYXNpbmcgZnJlcXVlbmN5LgogICAqIGggaXMgc3RpbGwgZXF1YWwgdG8gSEVBUF9TSVpFLiAoSXQgaXMgc2ltcGxlciB0byByZWNvbnN0cnVjdCBhbGwKICAgKiBsZW5ndGhzIGluc3RlYWQgb2YgZml4aW5nIG9ubHkgdGhlIHdyb25nIG9uZXMuIFRoaXMgaWRlYSBpcyB0YWtlbgogICAqIGZyb20gJ2FyJyB3cml0dGVuIGJ5IEhhcnVoaWtvIE9rdW11cmEuKQogICAqLwogIGZvciAoYml0cyA9IG1heF9sZW5ndGg7IGJpdHMgIT09IDA7IGJpdHMtLSkgewogICAgbiA9IHMuYmxfY291bnRbYml0c107CiAgICB3aGlsZSAobiAhPT0gMCkgewogICAgICBtID0gcy5oZWFwWy0taF07CiAgICAgIGlmIChtID4gbWF4X2NvZGUpIHsgY29udGludWU7IH0KICAgICAgaWYgKHRyZWVbbSoyICsgMV0vKi5MZW4qLyAhPT0gYml0cykgewogICAgICAgIC8vIFRyYWNlKChzdGRlcnIsImNvZGUgJWQgYml0cyAlZC0+JWRcbiIsIG0sIHRyZWVbbV0uTGVuLCBiaXRzKSk7CiAgICAgICAgcy5vcHRfbGVuICs9IChiaXRzIC0gdHJlZVttKjIgKyAxXS8qLkxlbiovKSp0cmVlW20qMl0vKi5GcmVxKi87CiAgICAgICAgdHJlZVttKjIgKyAxXS8qLkxlbiovID0gYml0czsKICAgICAgfQogICAgICBuLS07CiAgICB9CiAgfQp9CgoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIEdlbmVyYXRlIHRoZSBjb2RlcyBmb3IgYSBnaXZlbiB0cmVlIGFuZCBiaXQgY291bnRzICh3aGljaCBuZWVkIG5vdCBiZQogKiBvcHRpbWFsKS4KICogSU4gYXNzZXJ0aW9uOiB0aGUgYXJyYXkgYmxfY291bnQgY29udGFpbnMgdGhlIGJpdCBsZW5ndGggc3RhdGlzdGljcyBmb3IKICogdGhlIGdpdmVuIHRyZWUgYW5kIHRoZSBmaWVsZCBsZW4gaXMgc2V0IGZvciBhbGwgdHJlZSBlbGVtZW50cy4KICogT1VUIGFzc2VydGlvbjogdGhlIGZpZWxkIGNvZGUgaXMgc2V0IGZvciBhbGwgdHJlZSBlbGVtZW50cyBvZiBub24KICogICAgIHplcm8gY29kZSBsZW5ndGguCiAqLwpmdW5jdGlvbiBnZW5fY29kZXModHJlZSwgbWF4X2NvZGUsIGJsX2NvdW50KQovLyAgICBjdF9kYXRhICp0cmVlOyAgICAgICAgICAgICAvKiB0aGUgdHJlZSB0byBkZWNvcmF0ZSAqLwovLyAgICBpbnQgbWF4X2NvZGU7ICAgICAgICAgICAgICAvKiBsYXJnZXN0IGNvZGUgd2l0aCBub24gemVybyBmcmVxdWVuY3kgKi8KLy8gICAgdXNoZiAqYmxfY291bnQ7ICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNvZGVzIGF0IGVhY2ggYml0IGxlbmd0aCAqLwp7CiAgdmFyIG5leHRfY29kZSA9IG5ldyBBcnJheShNQVhfQklUUysxKTsgLyogbmV4dCBjb2RlIHZhbHVlIGZvciBlYWNoIGJpdCBsZW5ndGggKi8KICB2YXIgY29kZSA9IDA7ICAgICAgICAgICAgICAvKiBydW5uaW5nIGNvZGUgdmFsdWUgKi8KICB2YXIgYml0czsgICAgICAgICAgICAgICAgICAvKiBiaXQgaW5kZXggKi8KICB2YXIgbjsgICAgICAgICAgICAgICAgICAgICAvKiBjb2RlIGluZGV4ICovCgogIC8qIFRoZSBkaXN0cmlidXRpb24gY291bnRzIGFyZSBmaXJzdCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBjb2RlIHZhbHVlcwogICAqIHdpdGhvdXQgYml0IHJldmVyc2FsLgogICAqLwogIGZvciAoYml0cyA9IDE7IGJpdHMgPD0gTUFYX0JJVFM7IGJpdHMrKykgewogICAgbmV4dF9jb2RlW2JpdHNdID0gY29kZSA9IChjb2RlICsgYmxfY291bnRbYml0cy0xXSkgPDwgMTsKICB9CiAgLyogQ2hlY2sgdGhhdCB0aGUgYml0IGNvdW50cyBpbiBibF9jb3VudCBhcmUgY29uc2lzdGVudC4gVGhlIGxhc3QgY29kZQogICAqIG11c3QgYmUgYWxsIG9uZXMuCiAgICovCiAgLy9Bc3NlcnQgKGNvZGUgKyBibF9jb3VudFtNQVhfQklUU10tMSA9PSAoMTw8TUFYX0JJVFMpLTEsCiAgLy8gICAgICAgICJpbmNvbnNpc3RlbnQgYml0IGNvdW50cyIpOwogIC8vVHJhY2V2KChzdGRlcnIsIlxuZ2VuX2NvZGVzOiBtYXhfY29kZSAlZCAiLCBtYXhfY29kZSkpOwoKICBmb3IgKG4gPSAwOyAgbiA8PSBtYXhfY29kZTsgbisrKSB7CiAgICB2YXIgbGVuID0gdHJlZVtuKjIgKyAxXS8qLkxlbiovOwogICAgaWYgKGxlbiA9PT0gMCkgeyBjb250aW51ZTsgfQogICAgLyogTm93IHJldmVyc2UgdGhlIGJpdHMgKi8KICAgIHRyZWVbbioyXS8qLkNvZGUqLyA9IGJpX3JldmVyc2UobmV4dF9jb2RlW2xlbl0rKywgbGVuKTsKCiAgICAvL1RyYWNlY3YodHJlZSAhPSBzdGF0aWNfbHRyZWUsIChzdGRlcnIsIlxubiAlM2QgJWMgbCAlMmQgYyAlNHggKCV4KSAiLAogICAgLy8gICAgIG4sIChpc2dyYXBoKG4pID8gbiA6ICcgJyksIGxlbiwgdHJlZVtuXS5Db2RlLCBuZXh0X2NvZGVbbGVuXS0xKSk7CiAgfQp9CgoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIEluaXRpYWxpemUgdGhlIHZhcmlvdXMgJ2NvbnN0YW50JyB0YWJsZXMuCiAqLwpmdW5jdGlvbiB0cl9zdGF0aWNfaW5pdCgpIHsKICB2YXIgbjsgICAgICAgIC8qIGl0ZXJhdGVzIG92ZXIgdHJlZSBlbGVtZW50cyAqLwogIHZhciBiaXRzOyAgICAgLyogYml0IGNvdW50ZXIgKi8KICB2YXIgbGVuZ3RoOyAgIC8qIGxlbmd0aCB2YWx1ZSAqLwogIHZhciBjb2RlOyAgICAgLyogY29kZSB2YWx1ZSAqLwogIHZhciBkaXN0OyAgICAgLyogZGlzdGFuY2UgaW5kZXggKi8KICB2YXIgYmxfY291bnQgPSBuZXcgQXJyYXkoTUFYX0JJVFMrMSk7CiAgLyogbnVtYmVyIG9mIGNvZGVzIGF0IGVhY2ggYml0IGxlbmd0aCBmb3IgYW4gb3B0aW1hbCB0cmVlICovCgogIC8vIGRvIGNoZWNrIGluIF90cl9pbml0KCkKICAvL2lmIChzdGF0aWNfaW5pdF9kb25lKSByZXR1cm47CgogIC8qIEZvciBzb21lIGVtYmVkZGVkIHRhcmdldHMsIGdsb2JhbCB2YXJpYWJsZXMgYXJlIG5vdCBpbml0aWFsaXplZDogKi8KLyojaWZkZWYgTk9fSU5JVF9HTE9CQUxfUE9JTlRFUlMKICBzdGF0aWNfbF9kZXNjLnN0YXRpY190cmVlID0gc3RhdGljX2x0cmVlOwogIHN0YXRpY19sX2Rlc2MuZXh0cmFfYml0cyA9IGV4dHJhX2xiaXRzOwogIHN0YXRpY19kX2Rlc2Muc3RhdGljX3RyZWUgPSBzdGF0aWNfZHRyZWU7CiAgc3RhdGljX2RfZGVzYy5leHRyYV9iaXRzID0gZXh0cmFfZGJpdHM7CiAgc3RhdGljX2JsX2Rlc2MuZXh0cmFfYml0cyA9IGV4dHJhX2JsYml0czsKI2VuZGlmKi8KCiAgLyogSW5pdGlhbGl6ZSB0aGUgbWFwcGluZyBsZW5ndGggKDAuLjI1NSkgLT4gbGVuZ3RoIGNvZGUgKDAuLjI4KSAqLwogIGxlbmd0aCA9IDA7CiAgZm9yIChjb2RlID0gMDsgY29kZSA8IExFTkdUSF9DT0RFUy0xOyBjb2RlKyspIHsKICAgIGJhc2VfbGVuZ3RoW2NvZGVdID0gbGVuZ3RoOwogICAgZm9yIChuID0gMDsgbiA8ICgxPDxleHRyYV9sYml0c1tjb2RlXSk7IG4rKykgewogICAgICBfbGVuZ3RoX2NvZGVbbGVuZ3RoKytdID0gY29kZTsKICAgIH0KICB9CiAgLy9Bc3NlcnQgKGxlbmd0aCA9PSAyNTYsICJ0cl9zdGF0aWNfaW5pdDogbGVuZ3RoICE9IDI1NiIpOwogIC8qIE5vdGUgdGhhdCB0aGUgbGVuZ3RoIDI1NSAobWF0Y2ggbGVuZ3RoIDI1OCkgY2FuIGJlIHJlcHJlc2VudGVkCiAgICogaW4gdHdvIGRpZmZlcmVudCB3YXlzOiBjb2RlIDI4NCArIDUgYml0cyBvciBjb2RlIDI4NSwgc28gd2UKICAgKiBvdmVyd3JpdGUgbGVuZ3RoX2NvZGVbMjU1XSB0byB1c2UgdGhlIGJlc3QgZW5jb2Rpbmc6CiAgICovCiAgX2xlbmd0aF9jb2RlW2xlbmd0aC0xXSA9IGNvZGU7CgogIC8qIEluaXRpYWxpemUgdGhlIG1hcHBpbmcgZGlzdCAoMC4uMzJLKSAtPiBkaXN0IGNvZGUgKDAuLjI5KSAqLwogIGRpc3QgPSAwOwogIGZvciAoY29kZSA9IDAgOyBjb2RlIDwgMTY7IGNvZGUrKykgewogICAgYmFzZV9kaXN0W2NvZGVdID0gZGlzdDsKICAgIGZvciAobiA9IDA7IG4gPCAoMTw8ZXh0cmFfZGJpdHNbY29kZV0pOyBuKyspIHsKICAgICAgX2Rpc3RfY29kZVtkaXN0KytdID0gY29kZTsKICAgIH0KICB9CiAgLy9Bc3NlcnQgKGRpc3QgPT0gMjU2LCAidHJfc3RhdGljX2luaXQ6IGRpc3QgIT0gMjU2Iik7CiAgZGlzdCA+Pj0gNzsgLyogZnJvbSBub3cgb24sIGFsbCBkaXN0YW5jZXMgYXJlIGRpdmlkZWQgYnkgMTI4ICovCiAgZm9yICggOyBjb2RlIDwgRF9DT0RFUzsgY29kZSsrKSB7CiAgICBiYXNlX2Rpc3RbY29kZV0gPSBkaXN0IDw8IDc7CiAgICBmb3IgKG4gPSAwOyBuIDwgKDE8PChleHRyYV9kYml0c1tjb2RlXS03KSk7IG4rKykgewogICAgICBfZGlzdF9jb2RlWzI1NiArIGRpc3QrK10gPSBjb2RlOwogICAgfQogIH0KICAvL0Fzc2VydCAoZGlzdCA9PSAyNTYsICJ0cl9zdGF0aWNfaW5pdDogMjU2K2Rpc3QgIT0gNTEyIik7CgogIC8qIENvbnN0cnVjdCB0aGUgY29kZXMgb2YgdGhlIHN0YXRpYyBsaXRlcmFsIHRyZWUgKi8KICBmb3IgKGJpdHMgPSAwOyBiaXRzIDw9IE1BWF9CSVRTOyBiaXRzKyspIHsKICAgIGJsX2NvdW50W2JpdHNdID0gMDsKICB9CgogIG4gPSAwOwogIHdoaWxlIChuIDw9IDE0MykgewogICAgc3RhdGljX2x0cmVlW24qMiArIDFdLyouTGVuKi8gPSA4OwogICAgbisrOwogICAgYmxfY291bnRbOF0rKzsKICB9CiAgd2hpbGUgKG4gPD0gMjU1KSB7CiAgICBzdGF0aWNfbHRyZWVbbioyICsgMV0vKi5MZW4qLyA9IDk7CiAgICBuKys7CiAgICBibF9jb3VudFs5XSsrOwogIH0KICB3aGlsZSAobiA8PSAyNzkpIHsKICAgIHN0YXRpY19sdHJlZVtuKjIgKyAxXS8qLkxlbiovID0gNzsKICAgIG4rKzsKICAgIGJsX2NvdW50WzddKys7CiAgfQogIHdoaWxlIChuIDw9IDI4NykgewogICAgc3RhdGljX2x0cmVlW24qMiArIDFdLyouTGVuKi8gPSA4OwogICAgbisrOwogICAgYmxfY291bnRbOF0rKzsKICB9CiAgLyogQ29kZXMgMjg2IGFuZCAyODcgZG8gbm90IGV4aXN0LCBidXQgd2UgbXVzdCBpbmNsdWRlIHRoZW0gaW4gdGhlCiAgICogdHJlZSBjb25zdHJ1Y3Rpb24gdG8gZ2V0IGEgY2Fub25pY2FsIEh1ZmZtYW4gdHJlZSAobG9uZ2VzdCBjb2RlCiAgICogYWxsIG9uZXMpCiAgICovCiAgZ2VuX2NvZGVzKHN0YXRpY19sdHJlZSwgTF9DT0RFUysxLCBibF9jb3VudCk7CgogIC8qIFRoZSBzdGF0aWMgZGlzdGFuY2UgdHJlZSBpcyB0cml2aWFsOiAqLwogIGZvciAobiA9IDA7IG4gPCBEX0NPREVTOyBuKyspIHsKICAgIHN0YXRpY19kdHJlZVtuKjIgKyAxXS8qLkxlbiovID0gNTsKICAgIHN0YXRpY19kdHJlZVtuKjJdLyouQ29kZSovID0gYmlfcmV2ZXJzZShuLCA1KTsKICB9CgogIC8vIE5vdyBkYXRhIHJlYWR5IGFuZCB3ZSBjYW4gaW5pdCBzdGF0aWMgdHJlZXMKICBzdGF0aWNfbF9kZXNjID0gbmV3IFN0YXRpY1RyZWVEZXNjKHN0YXRpY19sdHJlZSwgZXh0cmFfbGJpdHMsIExJVEVSQUxTKzEsIExfQ09ERVMsIE1BWF9CSVRTKTsKICBzdGF0aWNfZF9kZXNjID0gbmV3IFN0YXRpY1RyZWVEZXNjKHN0YXRpY19kdHJlZSwgZXh0cmFfZGJpdHMsIDAsICAgICAgICAgIERfQ09ERVMsIE1BWF9CSVRTKTsKICBzdGF0aWNfYmxfZGVzYyA9bmV3IFN0YXRpY1RyZWVEZXNjKG5ldyBBcnJheSgwKSwgZXh0cmFfYmxiaXRzLCAwLCAgICAgICAgIEJMX0NPREVTLCBNQVhfQkxfQklUUyk7CgogIC8vc3RhdGljX2luaXRfZG9uZSA9IHRydWU7Cn0KCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogSW5pdGlhbGl6ZSBhIG5ldyBibG9jay4KICovCmZ1bmN0aW9uIGluaXRfYmxvY2socykgewogIHZhciBuOyAvKiBpdGVyYXRlcyBvdmVyIHRyZWUgZWxlbWVudHMgKi8KCiAgLyogSW5pdGlhbGl6ZSB0aGUgdHJlZXMuICovCiAgZm9yIChuID0gMDsgbiA8IExfQ09ERVM7ICBuKyspIHsgcy5keW5fbHRyZWVbbioyXS8qLkZyZXEqLyA9IDA7IH0KICBmb3IgKG4gPSAwOyBuIDwgRF9DT0RFUzsgIG4rKykgeyBzLmR5bl9kdHJlZVtuKjJdLyouRnJlcSovID0gMDsgfQogIGZvciAobiA9IDA7IG4gPCBCTF9DT0RFUzsgbisrKSB7IHMuYmxfdHJlZVtuKjJdLyouRnJlcSovID0gMDsgfQoKICBzLmR5bl9sdHJlZVtFTkRfQkxPQ0sqMl0vKi5GcmVxKi8gPSAxOwogIHMub3B0X2xlbiA9IHMuc3RhdGljX2xlbiA9IDA7CiAgcy5sYXN0X2xpdCA9IHMubWF0Y2hlcyA9IDA7Cn0KCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogRmx1c2ggdGhlIGJpdCBidWZmZXIgYW5kIGFsaWduIHRoZSBvdXRwdXQgb24gYSBieXRlIGJvdW5kYXJ5CiAqLwpmdW5jdGlvbiBiaV93aW5kdXAocykKewogIGlmIChzLmJpX3ZhbGlkID4gOCkgewogICAgcHV0X3Nob3J0KHMsIHMuYmlfYnVmKTsKICB9IGVsc2UgaWYgKHMuYmlfdmFsaWQgPiAwKSB7CiAgICAvL3B1dF9ieXRlKHMsIChCeXRlKXMtPmJpX2J1Zik7CiAgICBzLnBlbmRpbmdfYnVmW3MucGVuZGluZysrXSA9IHMuYmlfYnVmOwogIH0KICBzLmJpX2J1ZiA9IDA7CiAgcy5iaV92YWxpZCA9IDA7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBDb3B5IGEgc3RvcmVkIGJsb2NrLCBzdG9yaW5nIGZpcnN0IHRoZSBsZW5ndGggYW5kIGl0cwogKiBvbmUncyBjb21wbGVtZW50IGlmIHJlcXVlc3RlZC4KICovCmZ1bmN0aW9uIGNvcHlfYmxvY2socywgYnVmLCBsZW4sIGhlYWRlcikKLy9EZWZsYXRlU3RhdGUgKnM7Ci8vY2hhcmYgICAgKmJ1ZjsgICAgLyogdGhlIGlucHV0IGRhdGEgKi8KLy91bnNpZ25lZCBsZW47ICAgICAvKiBpdHMgbGVuZ3RoICovCi8vaW50ICAgICAgaGVhZGVyOyAgLyogdHJ1ZSBpZiBibG9jayBoZWFkZXIgbXVzdCBiZSB3cml0dGVuICovCnsKICBiaV93aW5kdXAocyk7ICAgICAgICAvKiBhbGlnbiBvbiBieXRlIGJvdW5kYXJ5ICovCgogIGlmIChoZWFkZXIpIHsKICAgIHB1dF9zaG9ydChzLCBsZW4pOwogICAgcHV0X3Nob3J0KHMsIH5sZW4pOwogIH0KLy8gIHdoaWxlIChsZW4tLSkgewovLyAgICBwdXRfYnl0ZShzLCAqYnVmKyspOwovLyAgfQogIHV0aWxzLmFycmF5U2V0KHMucGVuZGluZ19idWYsIHMud2luZG93LCBidWYsIGxlbiwgcy5wZW5kaW5nKTsKICBzLnBlbmRpbmcgKz0gbGVuOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogQ29tcGFyZXMgdG8gc3VidHJlZXMsIHVzaW5nIHRoZSB0cmVlIGRlcHRoIGFzIHRpZSBicmVha2VyIHdoZW4KICogdGhlIHN1YnRyZWVzIGhhdmUgZXF1YWwgZnJlcXVlbmN5LiBUaGlzIG1pbmltaXplcyB0aGUgd29yc3QgY2FzZSBsZW5ndGguCiAqLwpmdW5jdGlvbiBzbWFsbGVyKHRyZWUsIG4sIG0sIGRlcHRoKSB7CiAgdmFyIF9uMiA9IG4qMjsKICB2YXIgX20yID0gbSoyOwogIHJldHVybiAodHJlZVtfbjJdLyouRnJlcSovIDwgdHJlZVtfbTJdLyouRnJlcSovIHx8CiAgICAgICAgICh0cmVlW19uMl0vKi5GcmVxKi8gPT09IHRyZWVbX20yXS8qLkZyZXEqLyAmJiBkZXB0aFtuXSA8PSBkZXB0aFttXSkpOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogUmVzdG9yZSB0aGUgaGVhcCBwcm9wZXJ0eSBieSBtb3ZpbmcgZG93biB0aGUgdHJlZSBzdGFydGluZyBhdCBub2RlIGssCiAqIGV4Y2hhbmdpbmcgYSBub2RlIHdpdGggdGhlIHNtYWxsZXN0IG9mIGl0cyB0d28gc29ucyBpZiBuZWNlc3NhcnksIHN0b3BwaW5nCiAqIHdoZW4gdGhlIGhlYXAgcHJvcGVydHkgaXMgcmUtZXN0YWJsaXNoZWQgKGVhY2ggZmF0aGVyIHNtYWxsZXIgdGhhbiBpdHMKICogdHdvIHNvbnMpLgogKi8KZnVuY3Rpb24gcHFkb3duaGVhcChzLCB0cmVlLCBrKQovLyAgICBkZWZsYXRlX3N0YXRlICpzOwovLyAgICBjdF9kYXRhICp0cmVlOyAgLyogdGhlIHRyZWUgdG8gcmVzdG9yZSAqLwovLyAgICBpbnQgazsgICAgICAgICAgICAgICAvKiBub2RlIHRvIG1vdmUgZG93biAqLwp7CiAgdmFyIHYgPSBzLmhlYXBba107CiAgdmFyIGogPSBrIDw8IDE7ICAvKiBsZWZ0IHNvbiBvZiBrICovCiAgd2hpbGUgKGogPD0gcy5oZWFwX2xlbikgewogICAgLyogU2V0IGogdG8gdGhlIHNtYWxsZXN0IG9mIHRoZSB0d28gc29uczogKi8KICAgIGlmIChqIDwgcy5oZWFwX2xlbiAmJgogICAgICBzbWFsbGVyKHRyZWUsIHMuaGVhcFtqKzFdLCBzLmhlYXBbal0sIHMuZGVwdGgpKSB7CiAgICAgIGorKzsKICAgIH0KICAgIC8qIEV4aXQgaWYgdiBpcyBzbWFsbGVyIHRoYW4gYm90aCBzb25zICovCiAgICBpZiAoc21hbGxlcih0cmVlLCB2LCBzLmhlYXBbal0sIHMuZGVwdGgpKSB7IGJyZWFrOyB9CgogICAgLyogRXhjaGFuZ2UgdiB3aXRoIHRoZSBzbWFsbGVzdCBzb24gKi8KICAgIHMuaGVhcFtrXSA9IHMuaGVhcFtqXTsKICAgIGsgPSBqOwoKICAgIC8qIEFuZCBjb250aW51ZSBkb3duIHRoZSB0cmVlLCBzZXR0aW5nIGogdG8gdGhlIGxlZnQgc29uIG9mIGsgKi8KICAgIGogPDw9IDE7CiAgfQogIHMuaGVhcFtrXSA9IHY7Cn0KCgovLyBpbmxpbmVkIG1hbnVhbGx5Ci8vIHZhciBTTUFMTEVTVCA9IDE7CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogU2VuZCB0aGUgYmxvY2sgZGF0YSBjb21wcmVzc2VkIHVzaW5nIHRoZSBnaXZlbiBIdWZmbWFuIHRyZWVzCiAqLwpmdW5jdGlvbiBjb21wcmVzc19ibG9jayhzLCBsdHJlZSwgZHRyZWUpCi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci8vICAgIGNvbnN0IGN0X2RhdGEgKmx0cmVlOyAvKiBsaXRlcmFsIHRyZWUgKi8KLy8gICAgY29uc3QgY3RfZGF0YSAqZHRyZWU7IC8qIGRpc3RhbmNlIHRyZWUgKi8KewogIHZhciBkaXN0OyAgICAgICAgICAgLyogZGlzdGFuY2Ugb2YgbWF0Y2hlZCBzdHJpbmcgKi8KICB2YXIgbGM7ICAgICAgICAgICAgIC8qIG1hdGNoIGxlbmd0aCBvciB1bm1hdGNoZWQgY2hhciAoaWYgZGlzdCA9PSAwKSAqLwogIHZhciBseCA9IDA7ICAgICAgICAgLyogcnVubmluZyBpbmRleCBpbiBsX2J1ZiAqLwogIHZhciBjb2RlOyAgICAgICAgICAgLyogdGhlIGNvZGUgdG8gc2VuZCAqLwogIHZhciBleHRyYTsgICAgICAgICAgLyogbnVtYmVyIG9mIGV4dHJhIGJpdHMgdG8gc2VuZCAqLwoKICBpZiAocy5sYXN0X2xpdCAhPT0gMCkgewogICAgZG8gewogICAgICBkaXN0ID0gKHMucGVuZGluZ19idWZbcy5kX2J1ZiArIGx4KjJdIDw8IDgpIHwgKHMucGVuZGluZ19idWZbcy5kX2J1ZiArIGx4KjIgKyAxXSk7CiAgICAgIGxjID0gcy5wZW5kaW5nX2J1ZltzLmxfYnVmICsgbHhdOwogICAgICBseCsrOwoKICAgICAgaWYgKGRpc3QgPT09IDApIHsKICAgICAgICBzZW5kX2NvZGUocywgbGMsIGx0cmVlKTsgLyogc2VuZCBhIGxpdGVyYWwgYnl0ZSAqLwogICAgICAgIC8vVHJhY2Vjdihpc2dyYXBoKGxjKSwgKHN0ZGVyciwiICclYycgIiwgbGMpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvKiBIZXJlLCBsYyBpcyB0aGUgbWF0Y2ggbGVuZ3RoIC0gTUlOX01BVENIICovCiAgICAgICAgY29kZSA9IF9sZW5ndGhfY29kZVtsY107CiAgICAgICAgc2VuZF9jb2RlKHMsIGNvZGUrTElURVJBTFMrMSwgbHRyZWUpOyAvKiBzZW5kIHRoZSBsZW5ndGggY29kZSAqLwogICAgICAgIGV4dHJhID0gZXh0cmFfbGJpdHNbY29kZV07CiAgICAgICAgaWYgKGV4dHJhICE9PSAwKSB7CiAgICAgICAgICBsYyAtPSBiYXNlX2xlbmd0aFtjb2RlXTsKICAgICAgICAgIHNlbmRfYml0cyhzLCBsYywgZXh0cmEpOyAgICAgICAvKiBzZW5kIHRoZSBleHRyYSBsZW5ndGggYml0cyAqLwogICAgICAgIH0KICAgICAgICBkaXN0LS07IC8qIGRpc3QgaXMgbm93IHRoZSBtYXRjaCBkaXN0YW5jZSAtIDEgKi8KICAgICAgICBjb2RlID0gZF9jb2RlKGRpc3QpOwogICAgICAgIC8vQXNzZXJ0IChjb2RlIDwgRF9DT0RFUywgImJhZCBkX2NvZGUiKTsKCiAgICAgICAgc2VuZF9jb2RlKHMsIGNvZGUsIGR0cmVlKTsgICAgICAgLyogc2VuZCB0aGUgZGlzdGFuY2UgY29kZSAqLwogICAgICAgIGV4dHJhID0gZXh0cmFfZGJpdHNbY29kZV07CiAgICAgICAgaWYgKGV4dHJhICE9PSAwKSB7CiAgICAgICAgICBkaXN0IC09IGJhc2VfZGlzdFtjb2RlXTsKICAgICAgICAgIHNlbmRfYml0cyhzLCBkaXN0LCBleHRyYSk7ICAgLyogc2VuZCB0aGUgZXh0cmEgZGlzdGFuY2UgYml0cyAqLwogICAgICAgIH0KICAgICAgfSAvKiBsaXRlcmFsIG9yIG1hdGNoIHBhaXIgPyAqLwoKICAgICAgLyogQ2hlY2sgdGhhdCB0aGUgb3ZlcmxheSBiZXR3ZWVuIHBlbmRpbmdfYnVmIGFuZCBkX2J1ZitsX2J1ZiBpcyBvazogKi8KICAgICAgLy9Bc3NlcnQoKHVJbnQpKHMtPnBlbmRpbmcpIDwgcy0+bGl0X2J1ZnNpemUgKyAyKmx4LAogICAgICAvLyAgICAgICAicGVuZGluZ0J1ZiBvdmVyZmxvdyIpOwoKICAgIH0gd2hpbGUgKGx4IDwgcy5sYXN0X2xpdCk7CiAgfQoKICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBsdHJlZSk7Cn0KCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogQ29uc3RydWN0IG9uZSBIdWZmbWFuIHRyZWUgYW5kIGFzc2lnbnMgdGhlIGNvZGUgYml0IHN0cmluZ3MgYW5kIGxlbmd0aHMuCiAqIFVwZGF0ZSB0aGUgdG90YWwgYml0IGxlbmd0aCBmb3IgdGhlIGN1cnJlbnQgYmxvY2suCiAqIElOIGFzc2VydGlvbjogdGhlIGZpZWxkIGZyZXEgaXMgc2V0IGZvciBhbGwgdHJlZSBlbGVtZW50cy4KICogT1VUIGFzc2VydGlvbnM6IHRoZSBmaWVsZHMgbGVuIGFuZCBjb2RlIGFyZSBzZXQgdG8gdGhlIG9wdGltYWwgYml0IGxlbmd0aAogKiAgICAgYW5kIGNvcnJlc3BvbmRpbmcgY29kZS4gVGhlIGxlbmd0aCBvcHRfbGVuIGlzIHVwZGF0ZWQ7IHN0YXRpY19sZW4gaXMKICogICAgIGFsc28gdXBkYXRlZCBpZiBzdHJlZSBpcyBub3QgbnVsbC4gVGhlIGZpZWxkIG1heF9jb2RlIGlzIHNldC4KICovCmZ1bmN0aW9uIGJ1aWxkX3RyZWUocywgZGVzYykKLy8gICAgZGVmbGF0ZV9zdGF0ZSAqczsKLy8gICAgdHJlZV9kZXNjICpkZXNjOyAvKiB0aGUgdHJlZSBkZXNjcmlwdG9yICovCnsKICB2YXIgdHJlZSAgICAgPSBkZXNjLmR5bl90cmVlOwogIHZhciBzdHJlZSAgICA9IGRlc2Muc3RhdF9kZXNjLnN0YXRpY190cmVlOwogIHZhciBoYXNfc3RyZWUgPSBkZXNjLnN0YXRfZGVzYy5oYXNfc3RyZWU7CiAgdmFyIGVsZW1zICAgID0gZGVzYy5zdGF0X2Rlc2MuZWxlbXM7CiAgdmFyIG4sIG07ICAgICAgICAgIC8qIGl0ZXJhdGUgb3ZlciBoZWFwIGVsZW1lbnRzICovCiAgdmFyIG1heF9jb2RlID0gLTE7IC8qIGxhcmdlc3QgY29kZSB3aXRoIG5vbiB6ZXJvIGZyZXF1ZW5jeSAqLwogIHZhciBub2RlOyAgICAgICAgICAvKiBuZXcgbm9kZSBiZWluZyBjcmVhdGVkICovCgogIC8qIENvbnN0cnVjdCB0aGUgaW5pdGlhbCBoZWFwLCB3aXRoIGxlYXN0IGZyZXF1ZW50IGVsZW1lbnQgaW4KICAgKiBoZWFwW1NNQUxMRVNUXS4gVGhlIHNvbnMgb2YgaGVhcFtuXSBhcmUgaGVhcFsyKm5dIGFuZCBoZWFwWzIqbisxXS4KICAgKiBoZWFwWzBdIGlzIG5vdCB1c2VkLgogICAqLwogIHMuaGVhcF9sZW4gPSAwOwogIHMuaGVhcF9tYXggPSBIRUFQX1NJWkU7CgogIGZvciAobiA9IDA7IG4gPCBlbGVtczsgbisrKSB7CiAgICBpZiAodHJlZVtuICogMl0vKi5GcmVxKi8gIT09IDApIHsKICAgICAgcy5oZWFwWysrcy5oZWFwX2xlbl0gPSBtYXhfY29kZSA9IG47CiAgICAgIHMuZGVwdGhbbl0gPSAwOwoKICAgIH0gZWxzZSB7CiAgICAgIHRyZWVbbioyICsgMV0vKi5MZW4qLyA9IDA7CiAgICB9CiAgfQoKICAvKiBUaGUgcGt6aXAgZm9ybWF0IHJlcXVpcmVzIHRoYXQgYXQgbGVhc3Qgb25lIGRpc3RhbmNlIGNvZGUgZXhpc3RzLAogICAqIGFuZCB0aGF0IGF0IGxlYXN0IG9uZSBiaXQgc2hvdWxkIGJlIHNlbnQgZXZlbiBpZiB0aGVyZSBpcyBvbmx5IG9uZQogICAqIHBvc3NpYmxlIGNvZGUuIFNvIHRvIGF2b2lkIHNwZWNpYWwgY2hlY2tzIGxhdGVyIG9uIHdlIGZvcmNlIGF0IGxlYXN0CiAgICogdHdvIGNvZGVzIG9mIG5vbiB6ZXJvIGZyZXF1ZW5jeS4KICAgKi8KICB3aGlsZSAocy5oZWFwX2xlbiA8IDIpIHsKICAgIG5vZGUgPSBzLmhlYXBbKytzLmhlYXBfbGVuXSA9IChtYXhfY29kZSA8IDIgPyArK21heF9jb2RlIDogMCk7CiAgICB0cmVlW25vZGUgKiAyXS8qLkZyZXEqLyA9IDE7CiAgICBzLmRlcHRoW25vZGVdID0gMDsKICAgIHMub3B0X2xlbi0tOwoKICAgIGlmIChoYXNfc3RyZWUpIHsKICAgICAgcy5zdGF0aWNfbGVuIC09IHN0cmVlW25vZGUqMiArIDFdLyouTGVuKi87CiAgICB9CiAgICAvKiBub2RlIGlzIDAgb3IgMSBzbyBpdCBkb2VzIG5vdCBoYXZlIGV4dHJhIGJpdHMgKi8KICB9CiAgZGVzYy5tYXhfY29kZSA9IG1heF9jb2RlOwoKICAvKiBUaGUgZWxlbWVudHMgaGVhcFtoZWFwX2xlbi8yKzEgLi4gaGVhcF9sZW5dIGFyZSBsZWF2ZXMgb2YgdGhlIHRyZWUsCiAgICogZXN0YWJsaXNoIHN1Yi1oZWFwcyBvZiBpbmNyZWFzaW5nIGxlbmd0aHM6CiAgICovCiAgZm9yIChuID0gKHMuaGVhcF9sZW4gPj4gMS8qaW50IC8yKi8pOyBuID49IDE7IG4tLSkgeyBwcWRvd25oZWFwKHMsIHRyZWUsIG4pOyB9CgogIC8qIENvbnN0cnVjdCB0aGUgSHVmZm1hbiB0cmVlIGJ5IHJlcGVhdGVkbHkgY29tYmluaW5nIHRoZSBsZWFzdCB0d28KICAgKiBmcmVxdWVudCBub2Rlcy4KICAgKi8KICBub2RlID0gZWxlbXM7ICAgICAgICAgICAgICAvKiBuZXh0IGludGVybmFsIG5vZGUgb2YgdGhlIHRyZWUgKi8KICBkbyB7CiAgICAvL3BxcmVtb3ZlKHMsIHRyZWUsIG4pOyAgLyogbiA9IG5vZGUgb2YgbGVhc3QgZnJlcXVlbmN5ICovCiAgICAvKioqIHBxcmVtb3ZlICoqKi8KICAgIG4gPSBzLmhlYXBbMS8qU01BTExFU1QqL107CiAgICBzLmhlYXBbMS8qU01BTExFU1QqL10gPSBzLmhlYXBbcy5oZWFwX2xlbi0tXTsKICAgIHBxZG93bmhlYXAocywgdHJlZSwgMS8qU01BTExFU1QqLyk7CiAgICAvKioqLwoKICAgIG0gPSBzLmhlYXBbMS8qU01BTExFU1QqL107IC8qIG0gPSBub2RlIG9mIG5leHQgbGVhc3QgZnJlcXVlbmN5ICovCgogICAgcy5oZWFwWy0tcy5oZWFwX21heF0gPSBuOyAvKiBrZWVwIHRoZSBub2RlcyBzb3J0ZWQgYnkgZnJlcXVlbmN5ICovCiAgICBzLmhlYXBbLS1zLmhlYXBfbWF4XSA9IG07CgogICAgLyogQ3JlYXRlIGEgbmV3IG5vZGUgZmF0aGVyIG9mIG4gYW5kIG0gKi8KICAgIHRyZWVbbm9kZSAqIDJdLyouRnJlcSovID0gdHJlZVtuICogMl0vKi5GcmVxKi8gKyB0cmVlW20gKiAyXS8qLkZyZXEqLzsKICAgIHMuZGVwdGhbbm9kZV0gPSAocy5kZXB0aFtuXSA+PSBzLmRlcHRoW21dID8gcy5kZXB0aFtuXSA6IHMuZGVwdGhbbV0pICsgMTsKICAgIHRyZWVbbioyICsgMV0vKi5EYWQqLyA9IHRyZWVbbSoyICsgMV0vKi5EYWQqLyA9IG5vZGU7CgogICAgLyogYW5kIGluc2VydCB0aGUgbmV3IG5vZGUgaW4gdGhlIGhlYXAgKi8KICAgIHMuaGVhcFsxLypTTUFMTEVTVCovXSA9IG5vZGUrKzsKICAgIHBxZG93bmhlYXAocywgdHJlZSwgMS8qU01BTExFU1QqLyk7CgogIH0gd2hpbGUgKHMuaGVhcF9sZW4gPj0gMik7CgogIHMuaGVhcFstLXMuaGVhcF9tYXhdID0gcy5oZWFwWzEvKlNNQUxMRVNUKi9dOwoKICAvKiBBdCB0aGlzIHBvaW50LCB0aGUgZmllbGRzIGZyZXEgYW5kIGRhZCBhcmUgc2V0LiBXZSBjYW4gbm93CiAgICogZ2VuZXJhdGUgdGhlIGJpdCBsZW5ndGhzLgogICAqLwogIGdlbl9iaXRsZW4ocywgZGVzYyk7CgogIC8qIFRoZSBmaWVsZCBsZW4gaXMgbm93IHNldCwgd2UgY2FuIGdlbmVyYXRlIHRoZSBiaXQgY29kZXMgKi8KICBnZW5fY29kZXModHJlZSwgbWF4X2NvZGUsIHMuYmxfY291bnQpOwp9CgoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIFNjYW4gYSBsaXRlcmFsIG9yIGRpc3RhbmNlIHRyZWUgdG8gZGV0ZXJtaW5lIHRoZSBmcmVxdWVuY2llcyBvZiB0aGUgY29kZXMKICogaW4gdGhlIGJpdCBsZW5ndGggdHJlZS4KICovCmZ1bmN0aW9uIHNjYW5fdHJlZShzLCB0cmVlLCBtYXhfY29kZSkKLy8gICAgZGVmbGF0ZV9zdGF0ZSAqczsKLy8gICAgY3RfZGF0YSAqdHJlZTsgICAvKiB0aGUgdHJlZSB0byBiZSBzY2FubmVkICovCi8vICAgIGludCBtYXhfY29kZTsgICAgLyogYW5kIGl0cyBsYXJnZXN0IGNvZGUgb2Ygbm9uIHplcm8gZnJlcXVlbmN5ICovCnsKICB2YXIgbjsgICAgICAgICAgICAgICAgICAgICAvKiBpdGVyYXRlcyBvdmVyIGFsbCB0cmVlIGVsZW1lbnRzICovCiAgdmFyIHByZXZsZW4gPSAtMTsgICAgICAgICAgLyogbGFzdCBlbWl0dGVkIGxlbmd0aCAqLwogIHZhciBjdXJsZW47ICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBjdXJyZW50IGNvZGUgKi8KCiAgdmFyIG5leHRsZW4gPSB0cmVlWzAqMiArIDFdLyouTGVuKi87IC8qIGxlbmd0aCBvZiBuZXh0IGNvZGUgKi8KCiAgdmFyIGNvdW50ID0gMDsgICAgICAgICAgICAgLyogcmVwZWF0IGNvdW50IG9mIHRoZSBjdXJyZW50IGNvZGUgKi8KICB2YXIgbWF4X2NvdW50ID0gNzsgICAgICAgICAvKiBtYXggcmVwZWF0IGNvdW50ICovCiAgdmFyIG1pbl9jb3VudCA9IDQ7ICAgICAgICAgLyogbWluIHJlcGVhdCBjb3VudCAqLwoKICBpZiAobmV4dGxlbiA9PT0gMCkgewogICAgbWF4X2NvdW50ID0gMTM4OwogICAgbWluX2NvdW50ID0gMzsKICB9CiAgdHJlZVsobWF4X2NvZGUrMSkqMiArIDFdLyouTGVuKi8gPSAweGZmZmY7IC8qIGd1YXJkICovCgogIGZvciAobiA9IDA7IG4gPD0gbWF4X2NvZGU7IG4rKykgewogICAgY3VybGVuID0gbmV4dGxlbjsKICAgIG5leHRsZW4gPSB0cmVlWyhuKzEpKjIgKyAxXS8qLkxlbiovOwoKICAgIGlmICgrK2NvdW50IDwgbWF4X2NvdW50ICYmIGN1cmxlbiA9PT0gbmV4dGxlbikgewogICAgICBjb250aW51ZTsKCiAgICB9IGVsc2UgaWYgKGNvdW50IDwgbWluX2NvdW50KSB7CiAgICAgIHMuYmxfdHJlZVtjdXJsZW4gKiAyXS8qLkZyZXEqLyArPSBjb3VudDsKCiAgICB9IGVsc2UgaWYgKGN1cmxlbiAhPT0gMCkgewoKICAgICAgaWYgKGN1cmxlbiAhPT0gcHJldmxlbikgeyBzLmJsX3RyZWVbY3VybGVuICogMl0vKi5GcmVxKi8rKzsgfQogICAgICBzLmJsX3RyZWVbUkVQXzNfNioyXS8qLkZyZXEqLysrOwoKICAgIH0gZWxzZSBpZiAoY291bnQgPD0gMTApIHsKICAgICAgcy5ibF90cmVlW1JFUFpfM18xMCoyXS8qLkZyZXEqLysrOwoKICAgIH0gZWxzZSB7CiAgICAgIHMuYmxfdHJlZVtSRVBaXzExXzEzOCoyXS8qLkZyZXEqLysrOwogICAgfQoKICAgIGNvdW50ID0gMDsKICAgIHByZXZsZW4gPSBjdXJsZW47CgogICAgaWYgKG5leHRsZW4gPT09IDApIHsKICAgICAgbWF4X2NvdW50ID0gMTM4OwogICAgICBtaW5fY291bnQgPSAzOwoKICAgIH0gZWxzZSBpZiAoY3VybGVuID09PSBuZXh0bGVuKSB7CiAgICAgIG1heF9jb3VudCA9IDY7CiAgICAgIG1pbl9jb3VudCA9IDM7CgogICAgfSBlbHNlIHsKICAgICAgbWF4X2NvdW50ID0gNzsKICAgICAgbWluX2NvdW50ID0gNDsKICAgIH0KICB9Cn0KCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogU2VuZCBhIGxpdGVyYWwgb3IgZGlzdGFuY2UgdHJlZSBpbiBjb21wcmVzc2VkIGZvcm0sIHVzaW5nIHRoZSBjb2RlcyBpbgogKiBibF90cmVlLgogKi8KZnVuY3Rpb24gc2VuZF90cmVlKHMsIHRyZWUsIG1heF9jb2RlKQovLyAgICBkZWZsYXRlX3N0YXRlICpzOwovLyAgICBjdF9kYXRhICp0cmVlOyAvKiB0aGUgdHJlZSB0byBiZSBzY2FubmVkICovCi8vICAgIGludCBtYXhfY29kZTsgICAgICAgLyogYW5kIGl0cyBsYXJnZXN0IGNvZGUgb2Ygbm9uIHplcm8gZnJlcXVlbmN5ICovCnsKICB2YXIgbjsgICAgICAgICAgICAgICAgICAgICAvKiBpdGVyYXRlcyBvdmVyIGFsbCB0cmVlIGVsZW1lbnRzICovCiAgdmFyIHByZXZsZW4gPSAtMTsgICAgICAgICAgLyogbGFzdCBlbWl0dGVkIGxlbmd0aCAqLwogIHZhciBjdXJsZW47ICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBjdXJyZW50IGNvZGUgKi8KCiAgdmFyIG5leHRsZW4gPSB0cmVlWzAqMiArIDFdLyouTGVuKi87IC8qIGxlbmd0aCBvZiBuZXh0IGNvZGUgKi8KCiAgdmFyIGNvdW50ID0gMDsgICAgICAgICAgICAgLyogcmVwZWF0IGNvdW50IG9mIHRoZSBjdXJyZW50IGNvZGUgKi8KICB2YXIgbWF4X2NvdW50ID0gNzsgICAgICAgICAvKiBtYXggcmVwZWF0IGNvdW50ICovCiAgdmFyIG1pbl9jb3VudCA9IDQ7ICAgICAgICAgLyogbWluIHJlcGVhdCBjb3VudCAqLwoKICAvKiB0cmVlW21heF9jb2RlKzFdLkxlbiA9IC0xOyAqLyAgLyogZ3VhcmQgYWxyZWFkeSBzZXQgKi8KICBpZiAobmV4dGxlbiA9PT0gMCkgewogICAgbWF4X2NvdW50ID0gMTM4OwogICAgbWluX2NvdW50ID0gMzsKICB9CgogIGZvciAobiA9IDA7IG4gPD0gbWF4X2NvZGU7IG4rKykgewogICAgY3VybGVuID0gbmV4dGxlbjsKICAgIG5leHRsZW4gPSB0cmVlWyhuKzEpKjIgKyAxXS8qLkxlbiovOwoKICAgIGlmICgrK2NvdW50IDwgbWF4X2NvdW50ICYmIGN1cmxlbiA9PT0gbmV4dGxlbikgewogICAgICBjb250aW51ZTsKCiAgICB9IGVsc2UgaWYgKGNvdW50IDwgbWluX2NvdW50KSB7CiAgICAgIGRvIHsgc2VuZF9jb2RlKHMsIGN1cmxlbiwgcy5ibF90cmVlKTsgfSB3aGlsZSAoLS1jb3VudCAhPT0gMCk7CgogICAgfSBlbHNlIGlmIChjdXJsZW4gIT09IDApIHsKICAgICAgaWYgKGN1cmxlbiAhPT0gcHJldmxlbikgewogICAgICAgIHNlbmRfY29kZShzLCBjdXJsZW4sIHMuYmxfdHJlZSk7CiAgICAgICAgY291bnQtLTsKICAgICAgfQogICAgICAvL0Fzc2VydChjb3VudCA+PSAzICYmIGNvdW50IDw9IDYsICIgM182PyIpOwogICAgICBzZW5kX2NvZGUocywgUkVQXzNfNiwgcy5ibF90cmVlKTsKICAgICAgc2VuZF9iaXRzKHMsIGNvdW50LTMsIDIpOwoKICAgIH0gZWxzZSBpZiAoY291bnQgPD0gMTApIHsKICAgICAgc2VuZF9jb2RlKHMsIFJFUFpfM18xMCwgcy5ibF90cmVlKTsKICAgICAgc2VuZF9iaXRzKHMsIGNvdW50LTMsIDMpOwoKICAgIH0gZWxzZSB7CiAgICAgIHNlbmRfY29kZShzLCBSRVBaXzExXzEzOCwgcy5ibF90cmVlKTsKICAgICAgc2VuZF9iaXRzKHMsIGNvdW50LTExLCA3KTsKICAgIH0KCiAgICBjb3VudCA9IDA7CiAgICBwcmV2bGVuID0gY3VybGVuOwogICAgaWYgKG5leHRsZW4gPT09IDApIHsKICAgICAgbWF4X2NvdW50ID0gMTM4OwogICAgICBtaW5fY291bnQgPSAzOwoKICAgIH0gZWxzZSBpZiAoY3VybGVuID09PSBuZXh0bGVuKSB7CiAgICAgIG1heF9jb3VudCA9IDY7CiAgICAgIG1pbl9jb3VudCA9IDM7CgogICAgfSBlbHNlIHsKICAgICAgbWF4X2NvdW50ID0gNzsKICAgICAgbWluX2NvdW50ID0gNDsKICAgIH0KICB9Cn0KCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogQ29uc3RydWN0IHRoZSBIdWZmbWFuIHRyZWUgZm9yIHRoZSBiaXQgbGVuZ3RocyBhbmQgcmV0dXJuIHRoZSBpbmRleCBpbgogKiBibF9vcmRlciBvZiB0aGUgbGFzdCBiaXQgbGVuZ3RoIGNvZGUgdG8gc2VuZC4KICovCmZ1bmN0aW9uIGJ1aWxkX2JsX3RyZWUocykgewogIHZhciBtYXhfYmxpbmRleDsgIC8qIGluZGV4IG9mIGxhc3QgYml0IGxlbmd0aCBjb2RlIG9mIG5vbiB6ZXJvIGZyZXEgKi8KCiAgLyogRGV0ZXJtaW5lIHRoZSBiaXQgbGVuZ3RoIGZyZXF1ZW5jaWVzIGZvciBsaXRlcmFsIGFuZCBkaXN0YW5jZSB0cmVlcyAqLwogIHNjYW5fdHJlZShzLCBzLmR5bl9sdHJlZSwgcy5sX2Rlc2MubWF4X2NvZGUpOwogIHNjYW5fdHJlZShzLCBzLmR5bl9kdHJlZSwgcy5kX2Rlc2MubWF4X2NvZGUpOwoKICAvKiBCdWlsZCB0aGUgYml0IGxlbmd0aCB0cmVlOiAqLwogIGJ1aWxkX3RyZWUocywgcy5ibF9kZXNjKTsKICAvKiBvcHRfbGVuIG5vdyBpbmNsdWRlcyB0aGUgbGVuZ3RoIG9mIHRoZSB0cmVlIHJlcHJlc2VudGF0aW9ucywgZXhjZXB0CiAgICogdGhlIGxlbmd0aHMgb2YgdGhlIGJpdCBsZW5ndGhzIGNvZGVzIGFuZCB0aGUgNSs1KzQgYml0cyBmb3IgdGhlIGNvdW50cy4KICAgKi8KCiAgLyogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYml0IGxlbmd0aCBjb2RlcyB0byBzZW5kLiBUaGUgcGt6aXAgZm9ybWF0CiAgICogcmVxdWlyZXMgdGhhdCBhdCBsZWFzdCA0IGJpdCBsZW5ndGggY29kZXMgYmUgc2VudC4gKGFwcG5vdGUudHh0IHNheXMKICAgKiAzIGJ1dCB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgaXMgNC4pCiAgICovCiAgZm9yIChtYXhfYmxpbmRleCA9IEJMX0NPREVTLTE7IG1heF9ibGluZGV4ID49IDM7IG1heF9ibGluZGV4LS0pIHsKICAgIGlmIChzLmJsX3RyZWVbYmxfb3JkZXJbbWF4X2JsaW5kZXhdKjIgKyAxXS8qLkxlbiovICE9PSAwKSB7CiAgICAgIGJyZWFrOwogICAgfQogIH0KICAvKiBVcGRhdGUgb3B0X2xlbiB0byBpbmNsdWRlIHRoZSBiaXQgbGVuZ3RoIHRyZWUgYW5kIGNvdW50cyAqLwogIHMub3B0X2xlbiArPSAzKihtYXhfYmxpbmRleCsxKSArIDUrNSs0OwogIC8vVHJhY2V2KChzdGRlcnIsICJcbmR5biB0cmVlczogZHluICVsZCwgc3RhdCAlbGQiLAogIC8vICAgICAgICBzLT5vcHRfbGVuLCBzLT5zdGF0aWNfbGVuKSk7CgogIHJldHVybiBtYXhfYmxpbmRleDsKfQoKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBTZW5kIHRoZSBoZWFkZXIgZm9yIGEgYmxvY2sgdXNpbmcgZHluYW1pYyBIdWZmbWFuIHRyZWVzOiB0aGUgY291bnRzLCB0aGUKICogbGVuZ3RocyBvZiB0aGUgYml0IGxlbmd0aCBjb2RlcywgdGhlIGxpdGVyYWwgdHJlZSBhbmQgdGhlIGRpc3RhbmNlIHRyZWUuCiAqIElOIGFzc2VydGlvbjogbGNvZGVzID49IDI1NywgZGNvZGVzID49IDEsIGJsY29kZXMgPj0gNC4KICovCmZ1bmN0aW9uIHNlbmRfYWxsX3RyZWVzKHMsIGxjb2RlcywgZGNvZGVzLCBibGNvZGVzKQovLyAgICBkZWZsYXRlX3N0YXRlICpzOwovLyAgICBpbnQgbGNvZGVzLCBkY29kZXMsIGJsY29kZXM7IC8qIG51bWJlciBvZiBjb2RlcyBmb3IgZWFjaCB0cmVlICovCnsKICB2YXIgcmFuazsgICAgICAgICAgICAgICAgICAgIC8qIGluZGV4IGluIGJsX29yZGVyICovCgogIC8vQXNzZXJ0IChsY29kZXMgPj0gMjU3ICYmIGRjb2RlcyA+PSAxICYmIGJsY29kZXMgPj0gNCwgIm5vdCBlbm91Z2ggY29kZXMiKTsKICAvL0Fzc2VydCAobGNvZGVzIDw9IExfQ09ERVMgJiYgZGNvZGVzIDw9IERfQ09ERVMgJiYgYmxjb2RlcyA8PSBCTF9DT0RFUywKICAvLyAgICAgICAgInRvbyBtYW55IGNvZGVzIik7CiAgLy9UcmFjZXYoKHN0ZGVyciwgIlxuYmwgY291bnRzOiAiKSk7CiAgc2VuZF9iaXRzKHMsIGxjb2Rlcy0yNTcsIDUpOyAvKiBub3QgKzI1NSBhcyBzdGF0ZWQgaW4gYXBwbm90ZS50eHQgKi8KICBzZW5kX2JpdHMocywgZGNvZGVzLTEsICAgNSk7CiAgc2VuZF9iaXRzKHMsIGJsY29kZXMtNCwgIDQpOyAvKiBub3QgLTMgYXMgc3RhdGVkIGluIGFwcG5vdGUudHh0ICovCiAgZm9yIChyYW5rID0gMDsgcmFuayA8IGJsY29kZXM7IHJhbmsrKykgewogICAgLy9UcmFjZXYoKHN0ZGVyciwgIlxuYmwgY29kZSAlMmQgIiwgYmxfb3JkZXJbcmFua10pKTsKICAgIHNlbmRfYml0cyhzLCBzLmJsX3RyZWVbYmxfb3JkZXJbcmFua10qMiArIDFdLyouTGVuKi8sIDMpOwogIH0KICAvL1RyYWNldigoc3RkZXJyLCAiXG5ibCB0cmVlOiBzZW50ICVsZCIsIHMtPmJpdHNfc2VudCkpOwoKICBzZW5kX3RyZWUocywgcy5keW5fbHRyZWUsIGxjb2Rlcy0xKTsgLyogbGl0ZXJhbCB0cmVlICovCiAgLy9UcmFjZXYoKHN0ZGVyciwgIlxubGl0IHRyZWU6IHNlbnQgJWxkIiwgcy0+Yml0c19zZW50KSk7CgogIHNlbmRfdHJlZShzLCBzLmR5bl9kdHJlZSwgZGNvZGVzLTEpOyAvKiBkaXN0YW5jZSB0cmVlICovCiAgLy9UcmFjZXYoKHN0ZGVyciwgIlxuZGlzdCB0cmVlOiBzZW50ICVsZCIsIHMtPmJpdHNfc2VudCkpOwp9CgoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIENoZWNrIGlmIHRoZSBkYXRhIHR5cGUgaXMgVEVYVCBvciBCSU5BUlksIHVzaW5nIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOgogKiAtIFRFWFQgaWYgdGhlIHR3byBjb25kaXRpb25zIGJlbG93IGFyZSBzYXRpc2ZpZWQ6CiAqICAgIGEpIFRoZXJlIGFyZSBubyBub24tcG9ydGFibGUgY29udHJvbCBjaGFyYWN0ZXJzIGJlbG9uZ2luZyB0byB0aGUKICogICAgICAgImJsYWNrIGxpc3QiICgwLi42LCAxNC4uMjUsIDI4Li4zMSkuCiAqICAgIGIpIFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBwcmludGFibGUgY2hhcmFjdGVyIGJlbG9uZ2luZyB0byB0aGUKICogICAgICAgIndoaXRlIGxpc3QiICg5IHtUQUJ9LCAxMCB7TEZ9LCAxMyB7Q1J9LCAzMi4uMjU1KS4KICogLSBCSU5BUlkgb3RoZXJ3aXNlLgogKiAtIFRoZSBmb2xsb3dpbmcgcGFydGlhbGx5LXBvcnRhYmxlIGNvbnRyb2wgY2hhcmFjdGVycyBmb3JtIGEKICogICAiZ3JheSBsaXN0IiB0aGF0IGlzIGlnbm9yZWQgaW4gdGhpcyBkZXRlY3Rpb24gYWxnb3JpdGhtOgogKiAgICg3IHtCRUx9LCA4IHtCU30sIDExIHtWVH0sIDEyIHtGRn0sIDI2IHtTVUJ9LCAyNyB7RVNDfSkuCiAqIElOIGFzc2VydGlvbjogdGhlIGZpZWxkcyBGcmVxIG9mIGR5bl9sdHJlZSBhcmUgc2V0LgogKi8KZnVuY3Rpb24gZGV0ZWN0X2RhdGFfdHlwZShzKSB7CiAgLyogYmxhY2tfbWFzayBpcyB0aGUgYml0IG1hc2sgb2YgYmxhY2stbGlzdGVkIGJ5dGVzCiAgICogc2V0IGJpdHMgMC4uNiwgMTQuLjI1LCBhbmQgMjguLjMxCiAgICogMHhmM2ZmYzA3ZiA9IGJpbmFyeSAxMTExMDAxMTExMTExMTExMTEwMDAwMDAwMTExMTExMQogICAqLwogIHZhciBibGFja19tYXNrID0gMHhmM2ZmYzA3ZjsKICB2YXIgbjsKCiAgLyogQ2hlY2sgZm9yIG5vbi10ZXh0dWFsICgiYmxhY2stbGlzdGVkIikgYnl0ZXMuICovCiAgZm9yIChuID0gMDsgbiA8PSAzMTsgbisrLCBibGFja19tYXNrID4+Pj0gMSkgewogICAgaWYgKChibGFja19tYXNrICYgMSkgJiYgKHMuZHluX2x0cmVlW24qMl0vKi5GcmVxKi8gIT09IDApKSB7CiAgICAgIHJldHVybiBaX0JJTkFSWTsKICAgIH0KICB9CgogIC8qIENoZWNrIGZvciB0ZXh0dWFsICgid2hpdGUtbGlzdGVkIikgYnl0ZXMuICovCiAgaWYgKHMuZHluX2x0cmVlWzkgKiAyXS8qLkZyZXEqLyAhPT0gMCB8fCBzLmR5bl9sdHJlZVsxMCAqIDJdLyouRnJlcSovICE9PSAwIHx8CiAgICAgIHMuZHluX2x0cmVlWzEzICogMl0vKi5GcmVxKi8gIT09IDApIHsKICAgIHJldHVybiBaX1RFWFQ7CiAgfQogIGZvciAobiA9IDMyOyBuIDwgTElURVJBTFM7IG4rKykgewogICAgaWYgKHMuZHluX2x0cmVlW24gKiAyXS8qLkZyZXEqLyAhPT0gMCkgewogICAgICByZXR1cm4gWl9URVhUOwogICAgfQogIH0KCiAgLyogVGhlcmUgYXJlIG5vICJibGFjay1saXN0ZWQiIG9yICJ3aGl0ZS1saXN0ZWQiIGJ5dGVzOgogICAqIHRoaXMgc3RyZWFtIGVpdGhlciBpcyBlbXB0eSBvciBoYXMgdG9sZXJhdGVkICgiZ3JheS1saXN0ZWQiKSBieXRlcyBvbmx5LgogICAqLwogIHJldHVybiBaX0JJTkFSWTsKfQoKCnZhciBzdGF0aWNfaW5pdF9kb25lID0gZmFsc2U7CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogSW5pdGlhbGl6ZSB0aGUgdHJlZSBkYXRhIHN0cnVjdHVyZXMgZm9yIGEgbmV3IHpsaWIgc3RyZWFtLgogKi8KZnVuY3Rpb24gX3RyX2luaXQocykKewoKICBpZiAoIXN0YXRpY19pbml0X2RvbmUpIHsKICAgIHRyX3N0YXRpY19pbml0KCk7CiAgICBzdGF0aWNfaW5pdF9kb25lID0gdHJ1ZTsKICB9CgogIHMubF9kZXNjICA9IG5ldyBUcmVlRGVzYyhzLmR5bl9sdHJlZSwgc3RhdGljX2xfZGVzYyk7CiAgcy5kX2Rlc2MgID0gbmV3IFRyZWVEZXNjKHMuZHluX2R0cmVlLCBzdGF0aWNfZF9kZXNjKTsKICBzLmJsX2Rlc2MgPSBuZXcgVHJlZURlc2Mocy5ibF90cmVlLCBzdGF0aWNfYmxfZGVzYyk7CgogIHMuYmlfYnVmID0gMDsKICBzLmJpX3ZhbGlkID0gMDsKCiAgLyogSW5pdGlhbGl6ZSB0aGUgZmlyc3QgYmxvY2sgb2YgdGhlIGZpcnN0IGZpbGU6ICovCiAgaW5pdF9ibG9jayhzKTsKfQoKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBTZW5kIGEgc3RvcmVkIGJsb2NrCiAqLwpmdW5jdGlvbiBfdHJfc3RvcmVkX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdCkKLy9EZWZsYXRlU3RhdGUgKnM7Ci8vY2hhcmYgKmJ1ZjsgICAgICAgLyogaW5wdXQgYmxvY2sgKi8KLy91bGcgc3RvcmVkX2xlbjsgICAvKiBsZW5ndGggb2YgaW5wdXQgYmxvY2sgKi8KLy9pbnQgbGFzdDsgICAgICAgICAvKiBvbmUgaWYgdGhpcyBpcyB0aGUgbGFzdCBibG9jayBmb3IgYSBmaWxlICovCnsKICBzZW5kX2JpdHMocywgKFNUT1JFRF9CTE9DSzw8MSkrKGxhc3QgPyAxIDogMCksIDMpOyAgICAvKiBzZW5kIGJsb2NrIHR5cGUgKi8KICBjb3B5X2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgdHJ1ZSk7IC8qIHdpdGggaGVhZGVyICovCn0KCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogU2VuZCBvbmUgZW1wdHkgc3RhdGljIGJsb2NrIHRvIGdpdmUgZW5vdWdoIGxvb2thaGVhZCBmb3IgaW5mbGF0ZS4KICogVGhpcyB0YWtlcyAxMCBiaXRzLCBvZiB3aGljaCA3IG1heSByZW1haW4gaW4gdGhlIGJpdCBidWZmZXIuCiAqLwpmdW5jdGlvbiBfdHJfYWxpZ24ocykgewogIHNlbmRfYml0cyhzLCBTVEFUSUNfVFJFRVM8PDEsIDMpOwogIHNlbmRfY29kZShzLCBFTkRfQkxPQ0ssIHN0YXRpY19sdHJlZSk7CiAgYmlfZmx1c2gocyk7Cn0KCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogRGV0ZXJtaW5lIHRoZSBiZXN0IGVuY29kaW5nIGZvciB0aGUgY3VycmVudCBibG9jazogZHluYW1pYyB0cmVlcywgc3RhdGljCiAqIHRyZWVzIG9yIHN0b3JlLCBhbmQgb3V0cHV0IHRoZSBlbmNvZGVkIGJsb2NrIHRvIHRoZSB6aXAgZmlsZS4KICovCmZ1bmN0aW9uIF90cl9mbHVzaF9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIGxhc3QpCi8vRGVmbGF0ZVN0YXRlICpzOwovL2NoYXJmICpidWY7ICAgICAgIC8qIGlucHV0IGJsb2NrLCBvciBOVUxMIGlmIHRvbyBvbGQgKi8KLy91bGcgc3RvcmVkX2xlbjsgICAvKiBsZW5ndGggb2YgaW5wdXQgYmxvY2sgKi8KLy9pbnQgbGFzdDsgICAgICAgICAvKiBvbmUgaWYgdGhpcyBpcyB0aGUgbGFzdCBibG9jayBmb3IgYSBmaWxlICovCnsKICB2YXIgb3B0X2xlbmIsIHN0YXRpY19sZW5iOyAgLyogb3B0X2xlbiBhbmQgc3RhdGljX2xlbiBpbiBieXRlcyAqLwogIHZhciBtYXhfYmxpbmRleCA9IDA7ICAgICAgICAvKiBpbmRleCBvZiBsYXN0IGJpdCBsZW5ndGggY29kZSBvZiBub24gemVybyBmcmVxICovCgogIC8qIEJ1aWxkIHRoZSBIdWZmbWFuIHRyZWVzIHVubGVzcyBhIHN0b3JlZCBibG9jayBpcyBmb3JjZWQgKi8KICBpZiAocy5sZXZlbCA+IDApIHsKCiAgICAvKiBDaGVjayBpZiB0aGUgZmlsZSBpcyBiaW5hcnkgb3IgdGV4dCAqLwogICAgaWYgKHMuc3RybS5kYXRhX3R5cGUgPT09IFpfVU5LTk9XTikgewogICAgICBzLnN0cm0uZGF0YV90eXBlID0gZGV0ZWN0X2RhdGFfdHlwZShzKTsKICAgIH0KCiAgICAvKiBDb25zdHJ1Y3QgdGhlIGxpdGVyYWwgYW5kIGRpc3RhbmNlIHRyZWVzICovCiAgICBidWlsZF90cmVlKHMsIHMubF9kZXNjKTsKICAgIC8vIFRyYWNldigoc3RkZXJyLCAiXG5saXQgZGF0YTogZHluICVsZCwgc3RhdCAlbGQiLCBzLT5vcHRfbGVuLAogICAgLy8gICAgICAgIHMtPnN0YXRpY19sZW4pKTsKCiAgICBidWlsZF90cmVlKHMsIHMuZF9kZXNjKTsKICAgIC8vIFRyYWNldigoc3RkZXJyLCAiXG5kaXN0IGRhdGE6IGR5biAlbGQsIHN0YXQgJWxkIiwgcy0+b3B0X2xlbiwKICAgIC8vICAgICAgICBzLT5zdGF0aWNfbGVuKSk7CiAgICAvKiBBdCB0aGlzIHBvaW50LCBvcHRfbGVuIGFuZCBzdGF0aWNfbGVuIGFyZSB0aGUgdG90YWwgYml0IGxlbmd0aHMgb2YKICAgICAqIHRoZSBjb21wcmVzc2VkIGJsb2NrIGRhdGEsIGV4Y2x1ZGluZyB0aGUgdHJlZSByZXByZXNlbnRhdGlvbnMuCiAgICAgKi8KCiAgICAvKiBCdWlsZCB0aGUgYml0IGxlbmd0aCB0cmVlIGZvciB0aGUgYWJvdmUgdHdvIHRyZWVzLCBhbmQgZ2V0IHRoZSBpbmRleAogICAgICogaW4gYmxfb3JkZXIgb2YgdGhlIGxhc3QgYml0IGxlbmd0aCBjb2RlIHRvIHNlbmQuCiAgICAgKi8KICAgIG1heF9ibGluZGV4ID0gYnVpbGRfYmxfdHJlZShzKTsKCiAgICAvKiBEZXRlcm1pbmUgdGhlIGJlc3QgZW5jb2RpbmcuIENvbXB1dGUgdGhlIGJsb2NrIGxlbmd0aHMgaW4gYnl0ZXMuICovCiAgICBvcHRfbGVuYiA9IChzLm9wdF9sZW4rMys3KSA+Pj4gMzsKICAgIHN0YXRpY19sZW5iID0gKHMuc3RhdGljX2xlbiszKzcpID4+PiAzOwoKICAgIC8vIFRyYWNldigoc3RkZXJyLCAiXG5vcHQgJWx1KCVsdSkgc3RhdCAlbHUoJWx1KSBzdG9yZWQgJWx1IGxpdCAldSAiLAogICAgLy8gICAgICAgIG9wdF9sZW5iLCBzLT5vcHRfbGVuLCBzdGF0aWNfbGVuYiwgcy0+c3RhdGljX2xlbiwgc3RvcmVkX2xlbiwKICAgIC8vICAgICAgICBzLT5sYXN0X2xpdCkpOwoKICAgIGlmIChzdGF0aWNfbGVuYiA8PSBvcHRfbGVuYikgeyBvcHRfbGVuYiA9IHN0YXRpY19sZW5iOyB9CgogIH0gZWxzZSB7CiAgICAvLyBBc3NlcnQoYnVmICE9IChjaGFyKikwLCAibG9zdCBidWYiKTsKICAgIG9wdF9sZW5iID0gc3RhdGljX2xlbmIgPSBzdG9yZWRfbGVuICsgNTsgLyogZm9yY2UgYSBzdG9yZWQgYmxvY2sgKi8KICB9CgogIGlmICgoc3RvcmVkX2xlbis0IDw9IG9wdF9sZW5iKSAmJiAoYnVmICE9PSAtMSkpIHsKICAgIC8qIDQ6IHR3byB3b3JkcyBmb3IgdGhlIGxlbmd0aHMgKi8KCiAgICAvKiBUaGUgdGVzdCBidWYgIT0gTlVMTCBpcyBvbmx5IG5lY2Vzc2FyeSBpZiBMSVRfQlVGU0laRSA+IFdTSVpFLgogICAgICogT3RoZXJ3aXNlIHdlIGNhbid0IGhhdmUgcHJvY2Vzc2VkIG1vcmUgdGhhbiBXU0laRSBpbnB1dCBieXRlcyBzaW5jZQogICAgICogdGhlIGxhc3QgYmxvY2sgZmx1c2gsIGJlY2F1c2UgY29tcHJlc3Npb24gd291bGQgaGF2ZSBiZWVuCiAgICAgKiBzdWNjZXNzZnVsLiBJZiBMSVRfQlVGU0laRSA8PSBXU0laRSwgaXQgaXMgbmV2ZXIgdG9vIGxhdGUgdG8KICAgICAqIHRyYW5zZm9ybSBhIGJsb2NrIGludG8gYSBzdG9yZWQgYmxvY2suCiAgICAgKi8KICAgIF90cl9zdG9yZWRfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBsYXN0KTsKCiAgfSBlbHNlIGlmIChzLnN0cmF0ZWd5ID09PSBaX0ZJWEVEIHx8IHN0YXRpY19sZW5iID09PSBvcHRfbGVuYikgewoKICAgIHNlbmRfYml0cyhzLCAoU1RBVElDX1RSRUVTPDwxKSArIChsYXN0ID8gMSA6IDApLCAzKTsKICAgIGNvbXByZXNzX2Jsb2NrKHMsIHN0YXRpY19sdHJlZSwgc3RhdGljX2R0cmVlKTsKCiAgfSBlbHNlIHsKICAgIHNlbmRfYml0cyhzLCAoRFlOX1RSRUVTPDwxKSArIChsYXN0ID8gMSA6IDApLCAzKTsKICAgIHNlbmRfYWxsX3RyZWVzKHMsIHMubF9kZXNjLm1heF9jb2RlKzEsIHMuZF9kZXNjLm1heF9jb2RlKzEsIG1heF9ibGluZGV4KzEpOwogICAgY29tcHJlc3NfYmxvY2socywgcy5keW5fbHRyZWUsIHMuZHluX2R0cmVlKTsKICB9CiAgLy8gQXNzZXJ0IChzLT5jb21wcmVzc2VkX2xlbiA9PSBzLT5iaXRzX3NlbnQsICJiYWQgY29tcHJlc3NlZCBzaXplIik7CiAgLyogVGhlIGFib3ZlIGNoZWNrIGlzIG1hZGUgbW9kIDJeMzIsIGZvciBmaWxlcyBsYXJnZXIgdGhhbiA1MTIgTUIKICAgKiBhbmQgdUxvbmcgaW1wbGVtZW50ZWQgb24gMzIgYml0cy4KICAgKi8KICBpbml0X2Jsb2NrKHMpOwoKICBpZiAobGFzdCkgewogICAgYmlfd2luZHVwKHMpOwogIH0KICAvLyBUcmFjZXYoKHN0ZGVyciwiXG5jb21wcmxlbiAlbHUoJWx1KSAiLCBzLT5jb21wcmVzc2VkX2xlbj4+MywKICAvLyAgICAgICBzLT5jb21wcmVzc2VkX2xlbi03Kmxhc3QpKTsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIFNhdmUgdGhlIG1hdGNoIGluZm8gYW5kIHRhbGx5IHRoZSBmcmVxdWVuY3kgY291bnRzLiBSZXR1cm4gdHJ1ZSBpZgogKiB0aGUgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQuCiAqLwpmdW5jdGlvbiBfdHJfdGFsbHkocywgZGlzdCwgbGMpCi8vICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci8vICAgIHVuc2lnbmVkIGRpc3Q7ICAvKiBkaXN0YW5jZSBvZiBtYXRjaGVkIHN0cmluZyAqLwovLyAgICB1bnNpZ25lZCBsYzsgICAgLyogbWF0Y2ggbGVuZ3RoLU1JTl9NQVRDSCBvciB1bm1hdGNoZWQgY2hhciAoaWYgZGlzdD09MCkgKi8KewogIC8vdmFyIG91dF9sZW5ndGgsIGluX2xlbmd0aCwgZGNvZGU7CgogIHMucGVuZGluZ19idWZbcy5kX2J1ZiArIHMubGFzdF9saXQgKiAyXSAgICAgPSAoZGlzdCA+Pj4gOCkgJiAweGZmOwogIHMucGVuZGluZ19idWZbcy5kX2J1ZiArIHMubGFzdF9saXQgKiAyICsgMV0gPSBkaXN0ICYgMHhmZjsKCiAgcy5wZW5kaW5nX2J1ZltzLmxfYnVmICsgcy5sYXN0X2xpdF0gPSBsYyAmIDB4ZmY7CiAgcy5sYXN0X2xpdCsrOwoKICBpZiAoZGlzdCA9PT0gMCkgewogICAgLyogbGMgaXMgdGhlIHVubWF0Y2hlZCBjaGFyICovCiAgICBzLmR5bl9sdHJlZVtsYyoyXS8qLkZyZXEqLysrOwogIH0gZWxzZSB7CiAgICBzLm1hdGNoZXMrKzsKICAgIC8qIEhlcmUsIGxjIGlzIHRoZSBtYXRjaCBsZW5ndGggLSBNSU5fTUFUQ0ggKi8KICAgIGRpc3QtLTsgICAgICAgICAgICAgLyogZGlzdCA9IG1hdGNoIGRpc3RhbmNlIC0gMSAqLwogICAgLy9Bc3NlcnQoKHVzaClkaXN0IDwgKHVzaClNQVhfRElTVChzKSAmJgogICAgLy8gICAgICAgKHVzaClsYyA8PSAodXNoKShNQVhfTUFUQ0gtTUlOX01BVENIKSAmJgogICAgLy8gICAgICAgKHVzaClkX2NvZGUoZGlzdCkgPCAodXNoKURfQ09ERVMsICAiX3RyX3RhbGx5OiBiYWQgbWF0Y2giKTsKCiAgICBzLmR5bl9sdHJlZVsoX2xlbmd0aF9jb2RlW2xjXStMSVRFUkFMUysxKSAqIDJdLyouRnJlcSovKys7CiAgICBzLmR5bl9kdHJlZVtkX2NvZGUoZGlzdCkgKiAyXS8qLkZyZXEqLysrOwogIH0KCi8vICghKSBUaGlzIGJsb2NrIGlzIGRpc2FibGVkIGluIHpsaWIgZGVmYWlsdHMsCi8vIGRvbid0IGVuYWJsZSBpdCBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkKCi8vI2lmZGVmIFRSVU5DQVRFX0JMT0NLCi8vICAvKiBUcnkgdG8gZ3Vlc3MgaWYgaXQgaXMgcHJvZml0YWJsZSB0byBzdG9wIHRoZSBjdXJyZW50IGJsb2NrIGhlcmUgKi8KLy8gIGlmICgocy5sYXN0X2xpdCAmIDB4MWZmZikgPT09IDAgJiYgcy5sZXZlbCA+IDIpIHsKLy8gICAgLyogQ29tcHV0ZSBhbiB1cHBlciBib3VuZCBmb3IgdGhlIGNvbXByZXNzZWQgbGVuZ3RoICovCi8vICAgIG91dF9sZW5ndGggPSBzLmxhc3RfbGl0Kjg7Ci8vICAgIGluX2xlbmd0aCA9IHMuc3Ryc3RhcnQgLSBzLmJsb2NrX3N0YXJ0OwovLwovLyAgICBmb3IgKGRjb2RlID0gMDsgZGNvZGUgPCBEX0NPREVTOyBkY29kZSsrKSB7Ci8vICAgICAgb3V0X2xlbmd0aCArPSBzLmR5bl9kdHJlZVtkY29kZSoyXS8qLkZyZXEqLyAqICg1ICsgZXh0cmFfZGJpdHNbZGNvZGVdKTsKLy8gICAgfQovLyAgICBvdXRfbGVuZ3RoID4+Pj0gMzsKLy8gICAgLy9UcmFjZXYoKHN0ZGVyciwiXG5sYXN0X2xpdCAldSwgaW4gJWxkLCBvdXQgfiVsZCglbGQlJSkgIiwKLy8gICAgLy8gICAgICAgcy0+bGFzdF9saXQsIGluX2xlbmd0aCwgb3V0X2xlbmd0aCwKLy8gICAgLy8gICAgICAgMTAwTCAtIG91dF9sZW5ndGgqMTAwTC9pbl9sZW5ndGgpKTsKLy8gICAgaWYgKHMubWF0Y2hlcyA8IChzLmxhc3RfbGl0Pj4xKS8qaW50IC8yKi8gJiYgb3V0X2xlbmd0aCA8IChpbl9sZW5ndGg+PjEpLyppbnQgLzIqLykgewovLyAgICAgIHJldHVybiB0cnVlOwovLyAgICB9Ci8vICB9Ci8vI2VuZGlmCgogIHJldHVybiAocy5sYXN0X2xpdCA9PT0gcy5saXRfYnVmc2l6ZS0xKTsKICAvKiBXZSBhdm9pZCBlcXVhbGl0eSB3aXRoIGxpdF9idWZzaXplIGJlY2F1c2Ugb2Ygd3JhcGFyb3VuZCBhdCA2NEsKICAgKiBvbiAxNiBiaXQgbWFjaGluZXMgYW5kIGJlY2F1c2Ugc3RvcmVkIGJsb2NrcyBhcmUgcmVzdHJpY3RlZCB0bwogICAqIDY0Sy0xIGJ5dGVzLgogICAqLwp9CgpleHBvcnRzLl90cl9pbml0ICA9IF90cl9pbml0OwpleHBvcnRzLl90cl9zdG9yZWRfYmxvY2sgPSBfdHJfc3RvcmVkX2Jsb2NrOwpleHBvcnRzLl90cl9mbHVzaF9ibG9jayAgPSBfdHJfZmx1c2hfYmxvY2s7CmV4cG9ydHMuX3RyX3RhbGx5ID0gX3RyX3RhbGx5OwpleHBvcnRzLl90cl9hbGlnbiA9IF90cl9hbGlnbjsKfSx7Ii4uL3V0aWxzL2NvbW1vbiI6Mjd9XSwzOTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCgpmdW5jdGlvbiBaU3RyZWFtKCkgewogIC8qIG5leHQgaW5wdXQgYnl0ZSAqLwogIHRoaXMuaW5wdXQgPSBudWxsOyAvLyBKUyBzcGVjaWZpYywgYmVjYXVzZSB3ZSBoYXZlIG5vIHBvaW50ZXJzCiAgdGhpcy5uZXh0X2luID0gMDsKICAvKiBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IGlucHV0ICovCiAgdGhpcy5hdmFpbF9pbiA9IDA7CiAgLyogdG90YWwgbnVtYmVyIG9mIGlucHV0IGJ5dGVzIHJlYWQgc28gZmFyICovCiAgdGhpcy50b3RhbF9pbiA9IDA7CiAgLyogbmV4dCBvdXRwdXQgYnl0ZSBzaG91bGQgYmUgcHV0IHRoZXJlICovCiAgdGhpcy5vdXRwdXQgPSBudWxsOyAvLyBKUyBzcGVjaWZpYywgYmVjYXVzZSB3ZSBoYXZlIG5vIHBvaW50ZXJzCiAgdGhpcy5uZXh0X291dCA9IDA7CiAgLyogcmVtYWluaW5nIGZyZWUgc3BhY2UgYXQgb3V0cHV0ICovCiAgdGhpcy5hdmFpbF9vdXQgPSAwOwogIC8qIHRvdGFsIG51bWJlciBvZiBieXRlcyBvdXRwdXQgc28gZmFyICovCiAgdGhpcy50b3RhbF9vdXQgPSAwOwogIC8qIGxhc3QgZXJyb3IgbWVzc2FnZSwgTlVMTCBpZiBubyBlcnJvciAqLwogIHRoaXMubXNnID0gJycvKlpfTlVMTCovOwogIC8qIG5vdCB2aXNpYmxlIGJ5IGFwcGxpY2F0aW9ucyAqLwogIHRoaXMuc3RhdGUgPSBudWxsOwogIC8qIGJlc3QgZ3Vlc3MgYWJvdXQgdGhlIGRhdGEgdHlwZTogYmluYXJ5IG9yIHRleHQgKi8KICB0aGlzLmRhdGFfdHlwZSA9IDIvKlpfVU5LTk9XTiovOwogIC8qIGFkbGVyMzIgdmFsdWUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhICovCiAgdGhpcy5hZGxlciA9IDA7Cn0KCm1vZHVsZS5leHBvcnRzID0gWlN0cmVhbTsKfSx7fV19LHt9LFs5XSkKKDkpCn0pOwoKLyohIERhdGFUYWJsZXMgMS4xMC4yMAogKiDCqTIwMDgtMjAxOSBTcHJ5TWVkaWEgTHRkIC0gZGF0YXRhYmxlcy5uZXQvbGljZW5zZQogKi8KCi8qKgogKiBAc3VtbWFyeSAgICAgRGF0YVRhYmxlcwogKiBAZGVzY3JpcHRpb24gUGFnaW5hdGUsIHNlYXJjaCBhbmQgb3JkZXIgSFRNTCB0YWJsZXMKICogQHZlcnNpb24gICAgIDEuMTAuMjAKICogQGZpbGUgICAgICAgIGpxdWVyeS5kYXRhVGFibGVzLmpzCiAqIEBhdXRob3IgICAgICBTcHJ5TWVkaWEgTHRkCiAqIEBjb250YWN0ICAgICB3d3cuZGF0YXRhYmxlcy5uZXQKICogQGNvcHlyaWdodCAgIENvcHlyaWdodCAyMDA4LTIwMTkgU3ByeU1lZGlhIEx0ZC4KICoKICogVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBhdmFpbGFibGUgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlOgogKiAgIE1JVCBsaWNlbnNlIC0gaHR0cDovL2RhdGF0YWJsZXMubmV0L2xpY2Vuc2UKICoKICogVGhpcyBzb3VyY2UgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgbGljZW5zZSBmaWxlcyBmb3IgZGV0YWlscy4KICoKICogRm9yIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvOiBodHRwOi8vd3d3LmRhdGF0YWJsZXMubmV0CiAqLwoKLypqc2xpbnQgZXZpbDogdHJ1ZSwgdW5kZWY6IHRydWUsIGJyb3dzZXI6IHRydWUgKi8KLypnbG9iYWxzICQscmVxdWlyZSxqUXVlcnksZGVmaW5lLF9zZWxlY3Rvcl9ydW4sX3NlbGVjdG9yX29wdHMsX3NlbGVjdG9yX2ZpcnN0LF9zZWxlY3Rvcl9yb3dfaW5kZXhlcyxfZXh0LF9BcGksX2FwaV9yZWdpc3RlcixfYXBpX3JlZ2lzdGVyUGx1cmFsLF9yZV9uZXdfbGluZXMsX3JlX2h0bWwsX3JlX2Zvcm1hdHRlZF9udW1lcmljLF9yZV9lc2NhcGVfcmVnZXgsX2VtcHR5LF9pbnRWYWwsX251bVRvRGVjaW1hbCxfaXNOdW1iZXIsX2lzSHRtbCxfaHRtbE51bWVyaWMsX3BsdWNrLF9wbHVja19vcmRlcixfcmFuZ2UsX3N0cmlwSHRtbCxfdW5pcXVlLF9mbkJ1aWxkQWpheCxfZm5BamF4VXBkYXRlLF9mbkFqYXhQYXJhbWV0ZXJzLF9mbkFqYXhVcGRhdGVEcmF3LF9mbkFqYXhEYXRhU3JjLF9mbkFkZENvbHVtbixfZm5Db2x1bW5PcHRpb25zLF9mbkFkanVzdENvbHVtblNpemluZyxfZm5WaXNpYmxlVG9Db2x1bW5JbmRleCxfZm5Db2x1bW5JbmRleFRvVmlzaWJsZSxfZm5WaXNibGVDb2x1bW5zLF9mbkdldENvbHVtbnMsX2ZuQ29sdW1uVHlwZXMsX2ZuQXBwbHlDb2x1bW5EZWZzLF9mbkh1bmdhcmlhbk1hcCxfZm5DYW1lbFRvSHVuZ2FyaWFuLF9mbkxhbmd1YWdlQ29tcGF0LF9mbkJyb3dzZXJEZXRlY3QsX2ZuQWRkRGF0YSxfZm5BZGRUcixfZm5Ob2RlVG9EYXRhSW5kZXgsX2ZuTm9kZVRvQ29sdW1uSW5kZXgsX2ZuR2V0Q2VsbERhdGEsX2ZuU2V0Q2VsbERhdGEsX2ZuU3BsaXRPYmpOb3RhdGlvbixfZm5HZXRPYmplY3REYXRhRm4sX2ZuU2V0T2JqZWN0RGF0YUZuLF9mbkdldERhdGFNYXN0ZXIsX2ZuQ2xlYXJUYWJsZSxfZm5EZWxldGVJbmRleCxfZm5JbnZhbGlkYXRlLF9mbkdldFJvd0VsZW1lbnRzLF9mbkNyZWF0ZVRyLF9mbkJ1aWxkSGVhZCxfZm5EcmF3SGVhZCxfZm5EcmF3LF9mblJlRHJhdyxfZm5BZGRPcHRpb25zSHRtbCxfZm5EZXRlY3RIZWFkZXIsX2ZuR2V0VW5pcXVlVGhzLF9mbkZlYXR1cmVIdG1sRmlsdGVyLF9mbkZpbHRlckNvbXBsZXRlLF9mbkZpbHRlckN1c3RvbSxfZm5GaWx0ZXJDb2x1bW4sX2ZuRmlsdGVyLF9mbkZpbHRlckNyZWF0ZVNlYXJjaCxfZm5Fc2NhcGVSZWdleCxfZm5GaWx0ZXJEYXRhLF9mbkZlYXR1cmVIdG1sSW5mbyxfZm5VcGRhdGVJbmZvLF9mbkluZm9NYWNyb3MsX2ZuSW5pdGlhbGlzZSxfZm5Jbml0Q29tcGxldGUsX2ZuTGVuZ3RoQ2hhbmdlLF9mbkZlYXR1cmVIdG1sTGVuZ3RoLF9mbkZlYXR1cmVIdG1sUGFnaW5hdGUsX2ZuUGFnZUNoYW5nZSxfZm5GZWF0dXJlSHRtbFByb2Nlc3NpbmcsX2ZuUHJvY2Vzc2luZ0Rpc3BsYXksX2ZuRmVhdHVyZUh0bWxUYWJsZSxfZm5TY3JvbGxEcmF3LF9mbkFwcGx5VG9DaGlsZHJlbixfZm5DYWxjdWxhdGVDb2x1bW5XaWR0aHMsX2ZuVGhyb3R0bGUsX2ZuQ29udmVydFRvV2lkdGgsX2ZuR2V0V2lkZXN0Tm9kZSxfZm5HZXRNYXhMZW5TdHJpbmcsX2ZuU3RyaW5nVG9Dc3MsX2ZuU29ydEZsYXR0ZW4sX2ZuU29ydCxfZm5Tb3J0QXJpYSxfZm5Tb3J0TGlzdGVuZXIsX2ZuU29ydEF0dGFjaExpc3RlbmVyLF9mblNvcnRpbmdDbGFzc2VzLF9mblNvcnREYXRhLF9mblNhdmVTdGF0ZSxfZm5Mb2FkU3RhdGUsX2ZuU2V0dGluZ3NGcm9tTm9kZSxfZm5Mb2csX2ZuTWFwLF9mbkJpbmRBY3Rpb24sX2ZuQ2FsbGJhY2tSZWcsX2ZuQ2FsbGJhY2tGaXJlLF9mbkxlbmd0aE92ZXJmbG93LF9mblJlbmRlcmVyLF9mbkRhdGFTb3VyY2UsX2ZuUm93QXR0cmlidXRlcyovCgooZnVuY3Rpb24oIGZhY3RvcnkgKSB7CgkidXNlIHN0cmljdCI7CgoJaWYgKCB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7CgkJLy8gQU1ECgkJZGVmaW5lKCBbJ2pxdWVyeSddLCBmdW5jdGlvbiAoICQgKSB7CgkJCXJldHVybiBmYWN0b3J5KCAkLCB3aW5kb3csIGRvY3VtZW50ICk7CgkJfSApOwoJfQoJZWxzZSBpZiAoIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyApIHsKCQkvLyBDb21tb25KUwoJCW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJvb3QsICQpIHsKCQkJaWYgKCAhIHJvb3QgKSB7CgkJCQkvLyBDb21tb25KUyBlbnZpcm9ubWVudHMgd2l0aG91dCBhIHdpbmRvdyBnbG9iYWwgbXVzdCBwYXNzIGEKCQkJCS8vIHJvb3QuIFRoaXMgd2lsbCBnaXZlIGFuIGVycm9yIG90aGVyd2lzZQoJCQkJcm9vdCA9IHdpbmRvdzsKCQkJfQoKCQkJaWYgKCAhICQgKSB7CgkJCQkkID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyAvLyBqUXVlcnkncyBmYWN0b3J5IGNoZWNrcyBmb3IgYSBnbG9iYWwgd2luZG93CgkJCQkJcmVxdWlyZSgnanF1ZXJ5JykgOgoJCQkJCXJlcXVpcmUoJ2pxdWVyeScpKCByb290ICk7CgkJCX0KCgkJCXJldHVybiBmYWN0b3J5KCAkLCByb290LCByb290LmRvY3VtZW50ICk7CgkJfTsKCX0KCWVsc2UgewoJCS8vIEJyb3dzZXIKCQlmYWN0b3J5KCBqUXVlcnksIHdpbmRvdywgZG9jdW1lbnQgKTsKCX0KfQooZnVuY3Rpb24oICQsIHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCApIHsKCSJ1c2Ugc3RyaWN0IjsKCgkvKioKCSAqIERhdGFUYWJsZXMgaXMgYSBwbHVnLWluIGZvciB0aGUgalF1ZXJ5IEphdmFzY3JpcHQgbGlicmFyeS4gSXQgaXMgYSBoaWdobHkKCSAqIGZsZXhpYmxlIHRvb2wsIGJhc2VkIHVwb24gdGhlIGZvdW5kYXRpb25zIG9mIHByb2dyZXNzaXZlIGVuaGFuY2VtZW50LAoJICogd2hpY2ggd2lsbCBhZGQgYWR2YW5jZWQgaW50ZXJhY3Rpb24gY29udHJvbHMgdG8gYW55IEhUTUwgdGFibGUuIEZvciBhCgkgKiBmdWxsIGxpc3Qgb2YgZmVhdHVyZXMgcGxlYXNlIHJlZmVyIHRvCgkgKiBbRGF0YVRhYmxlcy5uZXRdKGhyZWY9Imh0dHA6Ly9kYXRhdGFibGVzLm5ldCkuCgkgKgoJICogTm90ZSB0aGF0IHRoZSBgRGF0YVRhYmxlYCBvYmplY3QgaXMgbm90IGEgZ2xvYmFsIHZhcmlhYmxlIGJ1dCBpcyBhbGlhc2VkCgkgKiB0byBgalF1ZXJ5LmZuLkRhdGFUYWJsZWAgYW5kIGBqUXVlcnkuZm4uZGF0YVRhYmxlYCB0aHJvdWdoIHdoaWNoIGl0IG1heQoJICogYmUgIGFjY2Vzc2VkLgoJICoKCSAqICBAY2xhc3MKCSAqICBAcGFyYW0ge29iamVjdH0gW2luaXQ9e31dIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBEYXRhVGFibGVzLiBPcHRpb25zCgkgKiAgICBhcmUgZGVmaW5lZCBieSB7QGxpbmsgRGF0YVRhYmxlLmRlZmF1bHRzfQoJICogIEByZXF1aXJlcyBqUXVlcnkgMS43KwoJICoKCSAqICBAZXhhbXBsZQoJICogICAgLy8gQmFzaWMgaW5pdGlhbGlzYXRpb24KCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbiB7CgkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCk7CgkgKiAgICB9ICk7CgkgKgoJICogIEBleGFtcGxlCgkgKiAgICAvLyBJbml0aWFsaXNhdGlvbiB3aXRoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAtIGluIHRoaXMgY2FzZSwgZGlzYWJsZQoJICogICAgLy8gcGFnaW5hdGlvbiBhbmQgc29ydGluZy4KCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbiB7CgkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkgKiAgICAgICAgInBhZ2luYXRlIjogZmFsc2UsCgkgKiAgICAgICAgInNvcnQiOiBmYWxzZQoJICogICAgICB9ICk7CgkgKiAgICB9ICk7CgkgKi8KCXZhciBEYXRhVGFibGUgPSBmdW5jdGlvbiAoIG9wdGlvbnMgKQoJewoJCS8qKgoJCSAqIFBlcmZvcm0gYSBqUXVlcnkgc2VsZWN0b3IgYWN0aW9uIG9uIHRoZSB0YWJsZSdzIFRSIGVsZW1lbnRzIChmcm9tIHRoZSB0Ym9keSkgYW5kCgkJICogcmV0dXJuIHRoZSByZXN1bHRpbmcgalF1ZXJ5IG9iamVjdC4KCQkgKiAgQHBhcmFtIHtzdHJpbmd8bm9kZXxqUXVlcnl9IHNTZWxlY3RvciBqUXVlcnkgc2VsZWN0b3Igb3Igbm9kZSBjb2xsZWN0aW9uIHRvIGFjdCBvbgoJCSAqICBAcGFyYW0ge29iamVjdH0gW29PcHRzXSBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBtb2RpZnlpbmcgdGhlIHJvd3MgdG8gYmUgaW5jbHVkZWQKCQkgKiAgQHBhcmFtIHtzdHJpbmd9IFtvT3B0cy5maWx0ZXI9bm9uZV0gU2VsZWN0IFRSIGVsZW1lbnRzIHRoYXQgbWVldCB0aGUgY3VycmVudCBmaWx0ZXIKCQkgKiAgICBjcml0ZXJpb24gKCJhcHBsaWVkIikgb3IgYWxsIFRSIGVsZW1lbnRzIChpLmUuIG5vIGZpbHRlcikuCgkJICogIEBwYXJhbSB7c3RyaW5nfSBbb09wdHMub3JkZXI9Y3VycmVudF0gT3JkZXIgb2YgdGhlIFRSIGVsZW1lbnRzIGluIHRoZSBwcm9jZXNzZWQgYXJyYXkuCgkJICogICAgQ2FuIGJlIGVpdGhlciAnY3VycmVudCcsIHdoZXJlYnkgdGhlIGN1cnJlbnQgc29ydGluZyBvZiB0aGUgdGFibGUgaXMgdXNlZCwgb3IKCQkgKiAgICAnb3JpZ2luYWwnIHdoZXJlYnkgdGhlIG9yaWdpbmFsIG9yZGVyIHRoZSBkYXRhIHdhcyByZWFkIGludG8gdGhlIHRhYmxlIGlzIHVzZWQuCgkJICogIEBwYXJhbSB7c3RyaW5nfSBbb09wdHMucGFnZT1hbGxdIExpbWl0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgcGFnZQoJCSAqICAgICgiY3VycmVudCIpIG9yIG5vdCAoImFsbCIpLiBJZiAnY3VycmVudCcgaXMgZ2l2ZW4sIHRoZW4gb3JkZXIgaXMgYXNzdW1lZCB0byBiZQoJCSAqICAgICdjdXJyZW50JyBhbmQgZmlsdGVyIGlzICdhcHBsaWVkJywgcmVnYXJkbGVzcyBvZiB3aGF0IHRoZXkgbWlnaHQgYmUgZ2l2ZW4gYXMuCgkJICogIEByZXR1cm5zIHtvYmplY3R9IGpRdWVyeSBvYmplY3QsIGZpbHRlcmVkIGJ5IHRoZSBnaXZlbiBzZWxlY3Rvci4KCQkgKiAgQGR0b3B0IEFQSQoJCSAqICBAZGVwcmVjYXRlZCBTaW5jZSB2MS4xMAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJICogICAgICB2YXIgb1RhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKgoJCSAqICAgICAgLy8gSGlnaGxpZ2h0IGV2ZXJ5IHNlY29uZCByb3cKCQkgKiAgICAgIG9UYWJsZS4kKCd0cjpvZGQnKS5jc3MoJ2JhY2tncm91bmRDb2xvcicsICdibHVlJyk7CgkJICogICAgfSApOwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJICogICAgICB2YXIgb1RhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKgoJCSAqICAgICAgLy8gRmlsdGVyIHRvIHJvd3Mgd2l0aCAnV2Via2l0JyBpbiB0aGVtLCBhZGQgYSBiYWNrZ3JvdW5kIGNvbG91ciBhbmQgdGhlbgoJCSAqICAgICAgLy8gcmVtb3ZlIHRoZSBmaWx0ZXIsIHRodXMgaGlnaGxpZ2h0aW5nIHRoZSAnV2Via2l0JyByb3dzIG9ubHkuCgkJICogICAgICBvVGFibGUuZm5GaWx0ZXIoJ1dlYmtpdCcpOwoJCSAqICAgICAgb1RhYmxlLiQoJ3RyJywgeyJzZWFyY2giOiAiYXBwbGllZCJ9KS5jc3MoJ2JhY2tncm91bmRDb2xvcicsICdibHVlJyk7CgkJICogICAgICBvVGFibGUuZm5GaWx0ZXIoJycpOwoJCSAqICAgIH0gKTsKCQkgKi8KCQl0aGlzLiQgPSBmdW5jdGlvbiAoIHNTZWxlY3Rvciwgb09wdHMgKQoJCXsKCQkJcmV0dXJuIHRoaXMuYXBpKHRydWUpLiQoIHNTZWxlY3Rvciwgb09wdHMgKTsKCQl9OwoJCQoJCQoJCS8qKgoJCSAqIEFsbW9zdCBpZGVudGljYWwgdG8gJCBpbiBvcGVyYXRpb24sIGJ1dCBpbiB0aGlzIGNhc2UgcmV0dXJucyB0aGUgZGF0YSBmb3IgdGhlIG1hdGNoZWQKCQkgKiByb3dzIC0gYXMgc3VjaCwgdGhlIGpRdWVyeSBzZWxlY3RvciB1c2VkIHNob3VsZCBtYXRjaCBUUiByb3cgbm9kZXMgb3IgVEQvVEggY2VsbCBub2RlcwoJCSAqIHJhdGhlciB0aGFuIGFueSBkZXNjZW5kYW50cywgc28gdGhlIGRhdGEgY2FuIGJlIG9idGFpbmVkIGZvciB0aGUgcm93L2NlbGwuIElmIG1hdGNoaW5nCgkJICogcm93cyBhcmUgZm91bmQsIHRoZSBkYXRhIHJldHVybmVkIGlzIHRoZSBvcmlnaW5hbCBkYXRhIGFycmF5L29iamVjdCB0aGF0IHdhcyB1c2VkIHRvCgkJICogY3JlYXRlIHRoZSByb3cgKG9yIGEgZ2VuZXJhdGVkIGFycmF5IGlmIGZyb20gYSBET00gc291cmNlKS4KCQkgKgoJCSAqIFRoaXMgbWV0aG9kIGlzIG9mdGVuIHVzZWZ1bCBpbi1jb21iaW5hdGlvbiB3aXRoICQgd2hlcmUgYm90aCBmdW5jdGlvbnMgYXJlIGdpdmVuIHRoZQoJCSAqIHNhbWUgcGFyYW1ldGVycyBhbmQgdGhlIGFycmF5IGluZGV4ZXMgd2lsbCBtYXRjaCBpZGVudGljYWxseS4KCQkgKiAgQHBhcmFtIHtzdHJpbmd8bm9kZXxqUXVlcnl9IHNTZWxlY3RvciBqUXVlcnkgc2VsZWN0b3Igb3Igbm9kZSBjb2xsZWN0aW9uIHRvIGFjdCBvbgoJCSAqICBAcGFyYW0ge29iamVjdH0gW29PcHRzXSBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBtb2RpZnlpbmcgdGhlIHJvd3MgdG8gYmUgaW5jbHVkZWQKCQkgKiAgQHBhcmFtIHtzdHJpbmd9IFtvT3B0cy5maWx0ZXI9bm9uZV0gU2VsZWN0IGVsZW1lbnRzIHRoYXQgbWVldCB0aGUgY3VycmVudCBmaWx0ZXIKCQkgKiAgICBjcml0ZXJpb24gKCJhcHBsaWVkIikgb3IgYWxsIGVsZW1lbnRzIChpLmUuIG5vIGZpbHRlcikuCgkJICogIEBwYXJhbSB7c3RyaW5nfSBbb09wdHMub3JkZXI9Y3VycmVudF0gT3JkZXIgb2YgdGhlIGRhdGEgaW4gdGhlIHByb2Nlc3NlZCBhcnJheS4KCQkgKiAgICBDYW4gYmUgZWl0aGVyICdjdXJyZW50Jywgd2hlcmVieSB0aGUgY3VycmVudCBzb3J0aW5nIG9mIHRoZSB0YWJsZSBpcyB1c2VkLCBvcgoJCSAqICAgICdvcmlnaW5hbCcgd2hlcmVieSB0aGUgb3JpZ2luYWwgb3JkZXIgdGhlIGRhdGEgd2FzIHJlYWQgaW50byB0aGUgdGFibGUgaXMgdXNlZC4KCQkgKiAgQHBhcmFtIHtzdHJpbmd9IFtvT3B0cy5wYWdlPWFsbF0gTGltaXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgY3VycmVudGx5IGRpc3BsYXllZCBwYWdlCgkJICogICAgKCJjdXJyZW50Iikgb3Igbm90ICgiYWxsIikuIElmICdjdXJyZW50JyBpcyBnaXZlbiwgdGhlbiBvcmRlciBpcyBhc3N1bWVkIHRvIGJlCgkJICogICAgJ2N1cnJlbnQnIGFuZCBmaWx0ZXIgaXMgJ2FwcGxpZWQnLCByZWdhcmRsZXNzIG9mIHdoYXQgdGhleSBtaWdodCBiZSBnaXZlbiBhcy4KCQkgKiAgQHJldHVybnMge2FycmF5fSBEYXRhIGZvciB0aGUgbWF0Y2hlZCBlbGVtZW50cy4gSWYgYW55IGVsZW1lbnRzLCBhcyBhIHJlc3VsdCBvZiB0aGUKCQkgKiAgICBzZWxlY3Rvciwgd2VyZSBub3QgVFIsIFREIG9yIFRIIGVsZW1lbnRzIGluIHRoZSBEYXRhVGFibGUsIHRoZXkgd2lsbCBoYXZlIGEgbnVsbAoJCSAqICAgIGVudHJ5IGluIHRoZSBhcnJheS4KCQkgKiAgQGR0b3B0IEFQSQoJCSAqICBAZGVwcmVjYXRlZCBTaW5jZSB2MS4xMAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJICogICAgICB2YXIgb1RhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKgoJCSAqICAgICAgLy8gR2V0IHRoZSBkYXRhIGZyb20gdGhlIGZpcnN0IHJvdyBpbiB0aGUgdGFibGUKCQkgKiAgICAgIHZhciBkYXRhID0gb1RhYmxlLl8oJ3RyOmZpcnN0Jyk7CgkJICoKCQkgKiAgICAgIC8vIERvIHNvbWV0aGluZyB1c2VmdWwgd2l0aCB0aGUgZGF0YQoJCSAqICAgICAgYWxlcnQoICJGaXJzdCBjZWxsIGlzOiAiK2RhdGFbMF0gKTsKCQkgKiAgICB9ICk7CgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKCQkgKiAgICAgIHZhciBvVGFibGUgPSAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSgpOwoJCSAqCgkJICogICAgICAvLyBGaWx0ZXIgdG8gJ1dlYmtpdCcgYW5kIGdldCBhbGwgZGF0YSBmb3IKCQkgKiAgICAgIG9UYWJsZS5mbkZpbHRlcignV2Via2l0Jyk7CgkJICogICAgICB2YXIgZGF0YSA9IG9UYWJsZS5fKCd0cicsIHsic2VhcmNoIjogImFwcGxpZWQifSk7CgkJICoKCQkgKiAgICAgIC8vIERvIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhCgkJICogICAgICBhbGVydCggZGF0YS5sZW5ndGgrIiByb3dzIG1hdGNoZWQgdGhlIHNlYXJjaCIgKTsKCQkgKiAgICB9ICk7CgkJICovCgkJdGhpcy5fID0gZnVuY3Rpb24gKCBzU2VsZWN0b3IsIG9PcHRzICkKCQl7CgkJCXJldHVybiB0aGlzLmFwaSh0cnVlKS5yb3dzKCBzU2VsZWN0b3IsIG9PcHRzICkuZGF0YSgpOwoJCX07CgkJCgkJCgkJLyoqCgkJICogQ3JlYXRlIGEgRGF0YVRhYmxlcyBBcGkgaW5zdGFuY2UsIHdpdGggdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0YWJsZXMgZm9yCgkJICogdGhlIEFwaSdzIGNvbnRleHQuCgkJICogQHBhcmFtIHtib29sZWFufSBbdHJhZGl0aW9uYWw9ZmFsc2VdIFNldCB0aGUgQVBJIGluc3RhbmNlJ3MgY29udGV4dCB0byBiZQoJCSAqICAgb25seSB0aGUgdGFibGUgcmVmZXJyZWQgdG8gYnkgdGhlIGBEYXRhVGFibGUuZXh0LmlBcGlJbmRleGAgb3B0aW9uLCBhcyB3YXMKCQkgKiAgIHVzZWQgaW4gdGhlIEFQSSBwcmVzZW50ZWQgYnkgRGF0YVRhYmxlcyAxLjktIChpLmUuIHRoZSB0cmFkaXRpb25hbCBtb2RlKSwKCQkgKiAgIG9yIGlmIGFsbCB0YWJsZXMgY2FwdHVyZWQgaW4gdGhlIGpRdWVyeSBvYmplY3Qgc2hvdWxkIGJlIHVzZWQuCgkJICogQHJldHVybiB7RGF0YVRhYmxlcy5BcGl9CgkJICovCgkJdGhpcy5hcGkgPSBmdW5jdGlvbiAoIHRyYWRpdGlvbmFsICkKCQl7CgkJCXJldHVybiB0cmFkaXRpb25hbCA/CgkJCQluZXcgX0FwaSgKCQkJCQlfZm5TZXR0aW5nc0Zyb21Ob2RlKCB0aGlzWyBfZXh0LmlBcGlJbmRleCBdICkKCQkJCSkgOgoJCQkJbmV3IF9BcGkoIHRoaXMgKTsKCQl9OwoJCQoJCQoJCS8qKgoJCSAqIEFkZCBhIHNpbmdsZSBuZXcgcm93IG9yIG11bHRpcGxlIHJvd3Mgb2YgZGF0YSB0byB0aGUgdGFibGUuIFBsZWFzZSBub3RlCgkJICogdGhhdCB0aGlzIGlzIHN1aXRhYmxlIGZvciBjbGllbnQtc2lkZSBwcm9jZXNzaW5nIG9ubHkgLSBpZiB5b3UgYXJlIHVzaW5nCgkJICogc2VydmVyLXNpZGUgcHJvY2Vzc2luZyAoaS5lLiAiYlNlcnZlclNpZGUiOiB0cnVlKSwgdGhlbiB0byBhZGQgZGF0YSwgeW91CgkJICogbXVzdCBhZGQgaXQgdG8gdGhlIGRhdGEgc291cmNlLCBpLmUuIHRoZSBzZXJ2ZXItc2lkZSwgdGhyb3VnaCBhbiBBamF4IGNhbGwuCgkJICogIEBwYXJhbSB7YXJyYXl8b2JqZWN0fSBkYXRhIFRoZSBkYXRhIHRvIGJlIGFkZGVkIHRvIHRoZSB0YWJsZS4gVGhpcyBjYW4gYmU6CgkJICogICAgPHVsPgoJCSAqICAgICAgPGxpPjFEIGFycmF5IG9mIGRhdGEgLSBhZGQgYSBzaW5nbGUgcm93IHdpdGggdGhlIGRhdGEgcHJvdmlkZWQ8L2xpPgoJCSAqICAgICAgPGxpPjJEIGFycmF5IG9mIGFycmF5cyAtIGFkZCBtdWx0aXBsZSByb3dzIGluIGEgc2luZ2xlIGNhbGw8L2xpPgoJCSAqICAgICAgPGxpPm9iamVjdCAtIGRhdGEgb2JqZWN0IHdoZW4gdXNpbmcgPGk+bURhdGE8L2k+PC9saT4KCQkgKiAgICAgIDxsaT5hcnJheSBvZiBvYmplY3RzIC0gbXVsdGlwbGUgZGF0YSBvYmplY3RzIHdoZW4gdXNpbmcgPGk+bURhdGE8L2k+PC9saT4KCQkgKiAgICA8L3VsPgoJCSAqICBAcGFyYW0ge2Jvb2x9IFtyZWRyYXc9dHJ1ZV0gcmVkcmF3IHRoZSB0YWJsZSBvciBub3QKCQkgKiAgQHJldHVybnMge2FycmF5fSBBbiBhcnJheSBvZiBpbnRlZ2VycywgcmVwcmVzZW50aW5nIHRoZSBsaXN0IG9mIGluZGV4ZXMgaW4KCQkgKiAgICA8aT5hb0RhdGE8L2k+ICh7QGxpbmsgRGF0YVRhYmxlLm1vZGVscy5vU2V0dGluZ3N9KSB0aGF0IGhhdmUgYmVlbiBhZGRlZCB0bwoJCSAqICAgIHRoZSB0YWJsZS4KCQkgKiAgQGR0b3B0IEFQSQoJCSAqICBAZGVwcmVjYXRlZCBTaW5jZSB2MS4xMAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgLy8gR2xvYmFsIHZhciBmb3IgY291bnRlcgoJCSAqICAgIHZhciBnaUNvdW50ID0gMjsKCQkgKgoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKiAgICB9ICk7CgkJICoKCQkgKiAgICBmdW5jdGlvbiBmbkNsaWNrQWRkUm93KCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKS5mbkFkZERhdGEoIFsKCQkgKiAgICAgICAgZ2lDb3VudCsiLjEiLAoJCSAqICAgICAgICBnaUNvdW50KyIuMiIsCgkJICogICAgICAgIGdpQ291bnQrIi4zIiwKCQkgKiAgICAgICAgZ2lDb3VudCsiLjQiIF0KCQkgKiAgICAgICk7CgkJICoKCQkgKiAgICAgIGdpQ291bnQrKzsKCQkgKiAgICB9CgkJICovCgkJdGhpcy5mbkFkZERhdGEgPSBmdW5jdGlvbiggZGF0YSwgcmVkcmF3ICkKCQl7CgkJCXZhciBhcGkgPSB0aGlzLmFwaSggdHJ1ZSApOwoJCQoJCQkvKiBDaGVjayBpZiB3ZSB3YW50IHRvIGFkZCBtdWx0aXBsZSByb3dzIG9yIG5vdCAqLwoJCQl2YXIgcm93cyA9ICQuaXNBcnJheShkYXRhKSAmJiAoICQuaXNBcnJheShkYXRhWzBdKSB8fCAkLmlzUGxhaW5PYmplY3QoZGF0YVswXSkgKSA/CgkJCQlhcGkucm93cy5hZGQoIGRhdGEgKSA6CgkJCQlhcGkucm93LmFkZCggZGF0YSApOwoJCQoJCQlpZiAoIHJlZHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJlZHJhdyApIHsKCQkJCWFwaS5kcmF3KCk7CgkJCX0KCQkKCQkJcmV0dXJuIHJvd3MuZmxhdHRlbigpLnRvQXJyYXkoKTsKCQl9OwoJCQoJCQoJCS8qKgoJCSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBtYWtlIERhdGFUYWJsZXMgcmVjYWxjdWxhdGUgdGhlIGNvbHVtbiBzaXplcywgYmFzZWQgb24gdGhlIGRhdGEKCQkgKiBjb250YWluZWQgaW4gdGhlIHRhYmxlIGFuZCB0aGUgc2l6ZXMgYXBwbGllZCB0byB0aGUgY29sdW1ucyAoaW4gdGhlIERPTSwgQ1NTIG9yCgkJICogdGhyb3VnaCB0aGUgc1dpZHRoIHBhcmFtZXRlcikuIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIHRoZSB3aWR0aCBvZiB0aGUgdGFibGUncwoJCSAqIHBhcmVudCBlbGVtZW50IGNoYW5nZXMgKGZvciBleGFtcGxlIGEgd2luZG93IHJlc2l6ZSkuCgkJICogIEBwYXJhbSB7Ym9vbGVhbn0gW2JSZWRyYXc9dHJ1ZV0gUmVkcmF3IHRoZSB0YWJsZSBvciBub3QsIHlvdSB3aWxsIHR5cGljYWxseSB3YW50IHRvCgkJICogIEBkdG9wdCBBUEkKCQkgKiAgQGRlcHJlY2F0ZWQgU2luY2UgdjEuMTAKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCSAqICAgICAgdmFyIG9UYWJsZSA9ICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJzU2Nyb2xsWSI6ICIyMDBweCIsCgkJICogICAgICAgICJiUGFnaW5hdGUiOiBmYWxzZQoJCSAqICAgICAgfSApOwoJCSAqCgkJICogICAgICAkKHdpbmRvdykub24oJ3Jlc2l6ZScsIGZ1bmN0aW9uICgpIHsKCQkgKiAgICAgICAgb1RhYmxlLmZuQWRqdXN0Q29sdW1uU2l6aW5nKCk7CgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCXRoaXMuZm5BZGp1c3RDb2x1bW5TaXppbmcgPSBmdW5jdGlvbiAoIGJSZWRyYXcgKQoJCXsKCQkJdmFyIGFwaSA9IHRoaXMuYXBpKCB0cnVlICkuY29sdW1ucy5hZGp1c3QoKTsKCQkJdmFyIHNldHRpbmdzID0gYXBpLnNldHRpbmdzKClbMF07CgkJCXZhciBzY3JvbGwgPSBzZXR0aW5ncy5vU2Nyb2xsOwoJCQoJCQlpZiAoIGJSZWRyYXcgPT09IHVuZGVmaW5lZCB8fCBiUmVkcmF3ICkgewoJCQkJYXBpLmRyYXcoIGZhbHNlICk7CgkJCX0KCQkJZWxzZSBpZiAoIHNjcm9sbC5zWCAhPT0gIiIgfHwgc2Nyb2xsLnNZICE9PSAiIiApIHsKCQkJCS8qIElmIG5vdCByZWRyYXdpbmcsIGJ1dCBzY3JvbGxpbmcsIHdlIHdhbnQgdG8gYXBwbHkgdGhlIG5ldyBjb2x1bW4gc2l6ZXMgYW55d2F5ICovCgkJCQlfZm5TY3JvbGxEcmF3KCBzZXR0aW5ncyApOwoJCQl9CgkJfTsKCQkKCQkKCQkvKioKCQkgKiBRdWlja2x5IGFuZCBzaW1wbHkgY2xlYXIgYSB0YWJsZQoJCSAqICBAcGFyYW0ge2Jvb2x9IFtiUmVkcmF3PXRydWVdIHJlZHJhdyB0aGUgdGFibGUgb3Igbm90CgkJICogIEBkdG9wdCBBUEkKCQkgKiAgQGRlcHJlY2F0ZWQgU2luY2UgdjEuMTAKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCSAqICAgICAgdmFyIG9UYWJsZSA9ICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCk7CgkJICoKCQkgKiAgICAgIC8vIEltbWVkaWF0ZWx5ICdudWtlJyB0aGUgY3VycmVudCByb3dzIChwZXJoYXBzIHdhaXRpbmcgZm9yIGFuIEFqYXggY2FsbGJhY2suLi4pCgkJICogICAgICBvVGFibGUuZm5DbGVhclRhYmxlKCk7CgkJICogICAgfSApOwoJCSAqLwoJCXRoaXMuZm5DbGVhclRhYmxlID0gZnVuY3Rpb24oIGJSZWRyYXcgKQoJCXsKCQkJdmFyIGFwaSA9IHRoaXMuYXBpKCB0cnVlICkuY2xlYXIoKTsKCQkKCQkJaWYgKCBiUmVkcmF3ID09PSB1bmRlZmluZWQgfHwgYlJlZHJhdyApIHsKCQkJCWFwaS5kcmF3KCk7CgkJCX0KCQl9OwoJCQoJCQoJCS8qKgoJCSAqIFRoZSBleGFjdCBvcHBvc2l0ZSBvZiAnb3BlbmluZycgYSByb3csIHRoaXMgZnVuY3Rpb24gd2lsbCBjbG9zZSBhbnkgcm93cyB3aGljaAoJCSAqIGFyZSBjdXJyZW50bHkgJ29wZW4nLgoJCSAqICBAcGFyYW0ge25vZGV9IG5UciB0aGUgdGFibGUgcm93IHRvICdjbG9zZScKCQkgKiAgQHJldHVybnMge2ludH0gMCBvbiBzdWNjZXNzLCBvciAxIGlmIGZhaWxlZCAoY2FuJ3QgZmluZCB0aGUgcm93KQoJCSAqICBAZHRvcHQgQVBJCgkJICogIEBkZXByZWNhdGVkIFNpbmNlIHYxLjEwCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKCQkgKiAgICAgIHZhciBvVGFibGU7CgkJICoKCQkgKiAgICAgIC8vICdvcGVuJyBhbiBpbmZvcm1hdGlvbiByb3cgd2hlbiBhIHJvdyBpcyBjbGlja2VkIG9uCgkJICogICAgICAkKCcjZXhhbXBsZSB0Ym9keSB0cicpLmNsaWNrKCBmdW5jdGlvbiAoKSB7CgkJICogICAgICAgIGlmICggb1RhYmxlLmZuSXNPcGVuKHRoaXMpICkgewoJCSAqICAgICAgICAgIG9UYWJsZS5mbkNsb3NlKCB0aGlzICk7CgkJICogICAgICAgIH0gZWxzZSB7CgkJICogICAgICAgICAgb1RhYmxlLmZuT3BlbiggdGhpcywgIlRlbXBvcmFyeSByb3cgb3BlbmVkIiwgImluZm9fcm93IiApOwoJCSAqICAgICAgICB9CgkJICogICAgICB9ICk7CgkJICoKCQkgKiAgICAgIG9UYWJsZSA9ICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCk7CgkJICogICAgfSApOwoJCSAqLwoJCXRoaXMuZm5DbG9zZSA9IGZ1bmN0aW9uKCBuVHIgKQoJCXsKCQkJdGhpcy5hcGkoIHRydWUgKS5yb3coIG5UciApLmNoaWxkLmhpZGUoKTsKCQl9OwoJCQoJCQoJCS8qKgoJCSAqIFJlbW92ZSBhIHJvdyBmb3IgdGhlIHRhYmxlCgkJICogIEBwYXJhbSB7bWl4ZWR9IHRhcmdldCBUaGUgaW5kZXggb2YgdGhlIHJvdyBmcm9tIGFvRGF0YSB0byBiZSBkZWxldGVkLCBvcgoJCSAqICAgIHRoZSBUUiBlbGVtZW50IHlvdSB3YW50IHRvIGRlbGV0ZQoJCSAqICBAcGFyYW0ge2Z1bmN0aW9ufG51bGx9IFtjYWxsQmFja10gQ2FsbGJhY2sgZnVuY3Rpb24KCQkgKiAgQHBhcmFtIHtib29sfSBbcmVkcmF3PXRydWVdIFJlZHJhdyB0aGUgdGFibGUgb3Igbm90CgkJICogIEByZXR1cm5zIHthcnJheX0gVGhlIHJvdyB0aGF0IHdhcyBkZWxldGVkCgkJICogIEBkdG9wdCBBUEkKCQkgKiAgQGRlcHJlY2F0ZWQgU2luY2UgdjEuMTAKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCSAqICAgICAgdmFyIG9UYWJsZSA9ICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCk7CgkJICoKCQkgKiAgICAgIC8vIEltbWVkaWF0ZWx5IHJlbW92ZSB0aGUgZmlyc3Qgcm93CgkJICogICAgICBvVGFibGUuZm5EZWxldGVSb3coIDAgKTsKCQkgKiAgICB9ICk7CgkJICovCgkJdGhpcy5mbkRlbGV0ZVJvdyA9IGZ1bmN0aW9uKCB0YXJnZXQsIGNhbGxiYWNrLCByZWRyYXcgKQoJCXsKCQkJdmFyIGFwaSA9IHRoaXMuYXBpKCB0cnVlICk7CgkJCXZhciByb3dzID0gYXBpLnJvd3MoIHRhcmdldCApOwoJCQl2YXIgc2V0dGluZ3MgPSByb3dzLnNldHRpbmdzKClbMF07CgkJCXZhciBkYXRhID0gc2V0dGluZ3MuYW9EYXRhWyByb3dzWzBdWzBdIF07CgkJCgkJCXJvd3MucmVtb3ZlKCk7CgkJCgkJCWlmICggY2FsbGJhY2sgKSB7CgkJCQljYWxsYmFjay5jYWxsKCB0aGlzLCBzZXR0aW5ncywgZGF0YSApOwoJCQl9CgkJCgkJCWlmICggcmVkcmF3ID09PSB1bmRlZmluZWQgfHwgcmVkcmF3ICkgewoJCQkJYXBpLmRyYXcoKTsKCQkJfQoJCQoJCQlyZXR1cm4gZGF0YTsKCQl9OwoJCQoJCQoJCS8qKgoJCSAqIFJlc3RvcmUgdGhlIHRhYmxlIHRvIGl0J3Mgb3JpZ2luYWwgc3RhdGUgaW4gdGhlIERPTSBieSByZW1vdmluZyBhbGwgb2YgRGF0YVRhYmxlcwoJCSAqIGVuaGFuY2VtZW50cywgYWx0ZXJhdGlvbnMgdG8gdGhlIERPTSBzdHJ1Y3R1cmUgb2YgdGhlIHRhYmxlIGFuZCBldmVudCBsaXN0ZW5lcnMuCgkJICogIEBwYXJhbSB7Ym9vbGVhbn0gW3JlbW92ZT1mYWxzZV0gQ29tcGxldGVseSByZW1vdmUgdGhlIHRhYmxlIGZyb20gdGhlIERPTQoJCSAqICBAZHRvcHQgQVBJCgkJICogIEBkZXByZWNhdGVkIFNpbmNlIHYxLjEwCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKCQkgKiAgICAgIC8vIFRoaXMgZXhhbXBsZSBpcyBmYWlybHkgcG9pbnRsZXNzIGluIHJlYWxpdHksIGJ1dCBzaG93cyBob3cgZm5EZXN0cm95IGNhbiBiZSB1c2VkCgkJICogICAgICB2YXIgb1RhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKiAgICAgIG9UYWJsZS5mbkRlc3Ryb3koKTsKCQkgKiAgICB9ICk7CgkJICovCgkJdGhpcy5mbkRlc3Ryb3kgPSBmdW5jdGlvbiAoIHJlbW92ZSApCgkJewoJCQl0aGlzLmFwaSggdHJ1ZSApLmRlc3Ryb3koIHJlbW92ZSApOwoJCX07CgkJCgkJCgkJLyoqCgkJICogUmVkcmF3IHRoZSB0YWJsZQoJCSAqICBAcGFyYW0ge2Jvb2x9IFtjb21wbGV0ZT10cnVlXSBSZS1maWx0ZXIgYW5kIHJlc29ydCAoaWYgZW5hYmxlZCkgdGhlIHRhYmxlIGJlZm9yZSB0aGUgZHJhdy4KCQkgKiAgQGR0b3B0IEFQSQoJCSAqICBAZGVwcmVjYXRlZCBTaW5jZSB2MS4xMAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJICogICAgICB2YXIgb1RhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKgoJCSAqICAgICAgLy8gUmUtZHJhdyB0aGUgdGFibGUgLSB5b3Ugd291bGRuJ3Qgd2FudCB0byBkbyBpdCBoZXJlLCBidXQgaXQncyBhbiBleGFtcGxlIDotKQoJCSAqICAgICAgb1RhYmxlLmZuRHJhdygpOwoJCSAqICAgIH0gKTsKCQkgKi8KCQl0aGlzLmZuRHJhdyA9IGZ1bmN0aW9uKCBjb21wbGV0ZSApCgkJewoJCQkvLyBOb3RlIHRoYXQgdGhpcyBpc24ndCBhbiBleGFjdCBtYXRjaCB0byB0aGUgb2xkIGNhbGwgdG8gX2ZuRHJhdyAtIGl0IHRha2VzCgkJCS8vIGludG8gYWNjb3VudCB0aGUgbmV3IGRhdGEsIGJ1dCBjYW4gaG9sZCBwb3NpdGlvbi4KCQkJdGhpcy5hcGkoIHRydWUgKS5kcmF3KCBjb21wbGV0ZSApOwoJCX07CgkJCgkJCgkJLyoqCgkJICogRmlsdGVyIHRoZSBpbnB1dCBiYXNlZCBvbiBkYXRhCgkJICogIEBwYXJhbSB7c3RyaW5nfSBzSW5wdXQgU3RyaW5nIHRvIGZpbHRlciB0aGUgdGFibGUgb24KCQkgKiAgQHBhcmFtIHtpbnR8bnVsbH0gW2lDb2x1bW5dIENvbHVtbiB0byBsaW1pdCBmaWx0ZXJpbmcgdG8KCQkgKiAgQHBhcmFtIHtib29sfSBbYlJlZ2V4PWZhbHNlXSBUcmVhdCBhcyByZWd1bGFyIGV4cHJlc3Npb24gb3Igbm90CgkJICogIEBwYXJhbSB7Ym9vbH0gW2JTbWFydD10cnVlXSBQZXJmb3JtIHNtYXJ0IGZpbHRlcmluZyBvciBub3QKCQkgKiAgQHBhcmFtIHtib29sfSBbYlNob3dHbG9iYWw9dHJ1ZV0gU2hvdyB0aGUgaW5wdXQgZ2xvYmFsIGZpbHRlciBpbiBpdCdzIGlucHV0IGJveChlcykKCQkgKiAgQHBhcmFtIHtib29sfSBbYkNhc2VJbnNlbnNpdGl2ZT10cnVlXSBEbyBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoaW5nICh0cnVlKSBvciBub3QgKGZhbHNlKQoJCSAqICBAZHRvcHQgQVBJCgkJICogIEBkZXByZWNhdGVkIFNpbmNlIHYxLjEwCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKCQkgKiAgICAgIHZhciBvVGFibGUgPSAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSgpOwoJCSAqCgkJICogICAgICAvLyBTb21ldGltZSBsYXRlciAtIGZpbHRlci4uLgoJCSAqICAgICAgb1RhYmxlLmZuRmlsdGVyKCAndGVzdCBzdHJpbmcnICk7CgkJICogICAgfSApOwoJCSAqLwoJCXRoaXMuZm5GaWx0ZXIgPSBmdW5jdGlvbiggc0lucHV0LCBpQ29sdW1uLCBiUmVnZXgsIGJTbWFydCwgYlNob3dHbG9iYWwsIGJDYXNlSW5zZW5zaXRpdmUgKQoJCXsKCQkJdmFyIGFwaSA9IHRoaXMuYXBpKCB0cnVlICk7CgkJCgkJCWlmICggaUNvbHVtbiA9PT0gbnVsbCB8fCBpQ29sdW1uID09PSB1bmRlZmluZWQgKSB7CgkJCQlhcGkuc2VhcmNoKCBzSW5wdXQsIGJSZWdleCwgYlNtYXJ0LCBiQ2FzZUluc2Vuc2l0aXZlICk7CgkJCX0KCQkJZWxzZSB7CgkJCQlhcGkuY29sdW1uKCBpQ29sdW1uICkuc2VhcmNoKCBzSW5wdXQsIGJSZWdleCwgYlNtYXJ0LCBiQ2FzZUluc2Vuc2l0aXZlICk7CgkJCX0KCQkKCQkJYXBpLmRyYXcoKTsKCQl9OwoJCQoJCQoJCS8qKgoJCSAqIEdldCB0aGUgZGF0YSBmb3IgdGhlIHdob2xlIHRhYmxlLCBhbiBpbmRpdmlkdWFsIHJvdyBvciBhbiBpbmRpdmlkdWFsIGNlbGwgYmFzZWQgb24gdGhlCgkJICogcHJvdmlkZWQgcGFyYW1ldGVycy4KCQkgKiAgQHBhcmFtIHtpbnR8bm9kZX0gW3NyY10gQSBUUiByb3cgbm9kZSwgVEQvVEggY2VsbCBub2RlIG9yIGFuIGludGVnZXIuIElmIGdpdmVuIGFzCgkJICogICAgYSBUUiBub2RlIHRoZW4gdGhlIGRhdGEgc291cmNlIGZvciB0aGUgd2hvbGUgcm93IHdpbGwgYmUgcmV0dXJuZWQuIElmIGdpdmVuIGFzIGEKCQkgKiAgICBURC9USCBjZWxsIG5vZGUgdGhlbiBpQ29sIHdpbGwgYmUgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkIGFuZCB0aGUgZGF0YSBmb3IgdGhlCgkJICogICAgY2VsbCByZXR1cm5lZC4gSWYgZ2l2ZW4gYXMgYW4gaW50ZWdlciwgdGhlbiB0aGlzIGlzIHRyZWF0ZWQgYXMgdGhlIGFvRGF0YSBpbnRlcm5hbAoJCSAqICAgIGRhdGEgaW5kZXggZm9yIHRoZSByb3cgKHNlZSBmbkdldFBvc2l0aW9uKSBhbmQgdGhlIGRhdGEgZm9yIHRoYXQgcm93IHVzZWQuCgkJICogIEBwYXJhbSB7aW50fSBbY29sXSBPcHRpb25hbCBjb2x1bW4gaW5kZXggdGhhdCB5b3Ugd2FudCB0aGUgZGF0YSBvZi4KCQkgKiAgQHJldHVybnMge2FycmF5fG9iamVjdHxzdHJpbmd9IElmIG1Sb3cgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSBkYXRhIGZvciBhbGwgcm93cyBpcwoJCSAqICAgIHJldHVybmVkLiBJZiBtUm93IGlzIGRlZmluZWQsIGp1c3QgZGF0YSBmb3IgdGhhdCByb3csIGFuZCBpcyBpQ29sIGlzCgkJICogICAgZGVmaW5lZCwgb25seSBkYXRhIGZvciB0aGUgZGVzaWduYXRlZCBjZWxsIGlzIHJldHVybmVkLgoJCSAqICBAZHRvcHQgQVBJCgkJICogIEBkZXByZWNhdGVkIFNpbmNlIHYxLjEwCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBSb3cgZGF0YQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCSAqICAgICAgb1RhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKgoJCSAqICAgICAgb1RhYmxlLiQoJ3RyJykuY2xpY2soIGZ1bmN0aW9uICgpIHsKCQkgKiAgICAgICAgdmFyIGRhdGEgPSBvVGFibGUuZm5HZXREYXRhKCB0aGlzICk7CgkJICogICAgICAgIC8vIC4uLiBkbyBzb21ldGhpbmcgd2l0aCB0aGUgYXJyYXkgLyBvYmplY3Qgb2YgZGF0YSBmb3IgdGhlIHJvdwoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIEluZGl2aWR1YWwgY2VsbCBkYXRhCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJICogICAgICBvVGFibGUgPSAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSgpOwoJCSAqCgkJICogICAgICBvVGFibGUuJCgndGQnKS5jbGljayggZnVuY3Rpb24gKCkgewoJCSAqICAgICAgICB2YXIgc0RhdGEgPSBvVGFibGUuZm5HZXREYXRhKCB0aGlzICk7CgkJICogICAgICAgIGFsZXJ0KCAnVGhlIGNlbGwgY2xpY2tlZCBvbiBoYWQgdGhlIHZhbHVlIG9mICcrc0RhdGEgKTsKCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJdGhpcy5mbkdldERhdGEgPSBmdW5jdGlvbiggc3JjLCBjb2wgKQoJCXsKCQkJdmFyIGFwaSA9IHRoaXMuYXBpKCB0cnVlICk7CgkJCgkJCWlmICggc3JjICE9PSB1bmRlZmluZWQgKSB7CgkJCQl2YXIgdHlwZSA9IHNyYy5ub2RlTmFtZSA/IHNyYy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIDogJyc7CgkJCgkJCQlyZXR1cm4gY29sICE9PSB1bmRlZmluZWQgfHwgdHlwZSA9PSAndGQnIHx8IHR5cGUgPT0gJ3RoJyA/CgkJCQkJYXBpLmNlbGwoIHNyYywgY29sICkuZGF0YSgpIDoKCQkJCQlhcGkucm93KCBzcmMgKS5kYXRhKCkgfHwgbnVsbDsKCQkJfQoJCQoJCQlyZXR1cm4gYXBpLmRhdGEoKS50b0FycmF5KCk7CgkJfTsKCQkKCQkKCQkvKioKCQkgKiBHZXQgYW4gYXJyYXkgb2YgdGhlIFRSIG5vZGVzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIHRhYmxlJ3MgYm9keS4gTm90ZSB0aGF0IHlvdSB3aWxsCgkJICogdHlwaWNhbGx5IHdhbnQgdG8gdXNlIHRoZSAnJCcgQVBJIG1ldGhvZCBpbiBwcmVmZXJlbmNlIHRvIHRoaXMgYXMgaXQgaXMgbW9yZQoJCSAqIGZsZXhpYmxlLgoJCSAqICBAcGFyYW0ge2ludH0gW2lSb3ddIE9wdGlvbmFsIHJvdyBpbmRleCBmb3IgdGhlIFRSIGVsZW1lbnQgeW91IHdhbnQKCQkgKiAgQHJldHVybnMge2FycmF5fG5vZGV9IElmIGlSb3cgaXMgdW5kZWZpbmVkLCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBUUiBlbGVtZW50cwoJCSAqICAgIGluIHRoZSB0YWJsZSdzIGJvZHksIG9yIGlSb3cgaXMgZGVmaW5lZCwganVzdCB0aGUgVFIgZWxlbWVudCByZXF1ZXN0ZWQuCgkJICogIEBkdG9wdCBBUEkKCQkgKiAgQGRlcHJlY2F0ZWQgU2luY2UgdjEuMTAKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCSAqICAgICAgdmFyIG9UYWJsZSA9ICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCk7CgkJICoKCQkgKiAgICAgIC8vIEdldCB0aGUgbm9kZXMgZnJvbSB0aGUgdGFibGUKCQkgKiAgICAgIHZhciBuTm9kZXMgPSBvVGFibGUuZm5HZXROb2RlcyggKTsKCQkgKiAgICB9ICk7CgkJICovCgkJdGhpcy5mbkdldE5vZGVzID0gZnVuY3Rpb24oIGlSb3cgKQoJCXsKCQkJdmFyIGFwaSA9IHRoaXMuYXBpKCB0cnVlICk7CgkJCgkJCXJldHVybiBpUm93ICE9PSB1bmRlZmluZWQgPwoJCQkJYXBpLnJvdyggaVJvdyApLm5vZGUoKSA6CgkJCQlhcGkucm93cygpLm5vZGVzKCkuZmxhdHRlbigpLnRvQXJyYXkoKTsKCQl9OwoJCQoJCQoJCS8qKgoJCSAqIEdldCB0aGUgYXJyYXkgaW5kZXhlcyBvZiBhIHBhcnRpY3VsYXIgY2VsbCBmcm9tIGl0J3MgRE9NIGVsZW1lbnQKCQkgKiBhbmQgY29sdW1uIGluZGV4IGluY2x1ZGluZyBoaWRkZW4gY29sdW1ucwoJCSAqICBAcGFyYW0ge25vZGV9IG5vZGUgdGhpcyBjYW4gZWl0aGVyIGJlIGEgVFIsIFREIG9yIFRIIGluIHRoZSB0YWJsZSdzIGJvZHkKCQkgKiAgQHJldHVybnMge2ludH0gSWYgbk5vZGUgaXMgZ2l2ZW4gYXMgYSBUUiwgdGhlbiBhIHNpbmdsZSBpbmRleCBpcyByZXR1cm5lZCwgb3IKCQkgKiAgICBpZiBnaXZlbiBhcyBhIGNlbGwsIGFuIGFycmF5IG9mIFtyb3cgaW5kZXgsIGNvbHVtbiBpbmRleCAodmlzaWJsZSksCgkJICogICAgY29sdW1uIGluZGV4IChhbGwpXSBpcyBnaXZlbi4KCQkgKiAgQGR0b3B0IEFQSQoJCSAqICBAZGVwcmVjYXRlZCBTaW5jZSB2MS4xMAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZSB0Ym9keSB0ZCcpLmNsaWNrKCBmdW5jdGlvbiAoKSB7CgkJICogICAgICAgIC8vIEdldCB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgZGF0YSBmcm9tIHRoZSBub2RlCgkJICogICAgICAgIHZhciBhUG9zID0gb1RhYmxlLmZuR2V0UG9zaXRpb24oIHRoaXMgKTsKCQkgKgoJCSAqICAgICAgICAvLyBHZXQgdGhlIGRhdGEgYXJyYXkgZm9yIHRoaXMgcm93CgkJICogICAgICAgIHZhciBhRGF0YSA9IG9UYWJsZS5mbkdldERhdGEoIGFQb3NbMF0gKTsKCQkgKgoJCSAqICAgICAgICAvLyBVcGRhdGUgdGhlIGRhdGEgYXJyYXkgYW5kIHJldHVybiB0aGUgdmFsdWUKCQkgKiAgICAgICAgYURhdGFbIGFQb3NbMV0gXSA9ICdjbGlja2VkJzsKCQkgKiAgICAgICAgdGhpcy5pbm5lckhUTUwgPSAnY2xpY2tlZCc7CgkJICogICAgICB9ICk7CgkJICoKCQkgKiAgICAgIC8vIEluaXQgRGF0YVRhYmxlcwoJCSAqICAgICAgb1RhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKiAgICB9ICk7CgkJICovCgkJdGhpcy5mbkdldFBvc2l0aW9uID0gZnVuY3Rpb24oIG5vZGUgKQoJCXsKCQkJdmFyIGFwaSA9IHRoaXMuYXBpKCB0cnVlICk7CgkJCXZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKTsKCQkKCQkJaWYgKCBub2RlTmFtZSA9PSAnVFInICkgewoJCQkJcmV0dXJuIGFwaS5yb3coIG5vZGUgKS5pbmRleCgpOwoJCQl9CgkJCWVsc2UgaWYgKCBub2RlTmFtZSA9PSAnVEQnIHx8IG5vZGVOYW1lID09ICdUSCcgKSB7CgkJCQl2YXIgY2VsbCA9IGFwaS5jZWxsKCBub2RlICkuaW5kZXgoKTsKCQkKCQkJCXJldHVybiBbCgkJCQkJY2VsbC5yb3csCgkJCQkJY2VsbC5jb2x1bW5WaXNpYmxlLAoJCQkJCWNlbGwuY29sdW1uCgkJCQldOwoJCQl9CgkJCXJldHVybiBudWxsOwoJCX07CgkJCgkJCgkJLyoqCgkJICogQ2hlY2sgdG8gc2VlIGlmIGEgcm93IGlzICdvcGVuJyBvciBub3QuCgkJICogIEBwYXJhbSB7bm9kZX0gblRyIHRoZSB0YWJsZSByb3cgdG8gY2hlY2sKCQkgKiAgQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHJvdyBpcyBjdXJyZW50bHkgb3BlbiwgZmFsc2Ugb3RoZXJ3aXNlCgkJICogIEBkdG9wdCBBUEkKCQkgKiAgQGRlcHJlY2F0ZWQgU2luY2UgdjEuMTAKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCSAqICAgICAgdmFyIG9UYWJsZTsKCQkgKgoJCSAqICAgICAgLy8gJ29wZW4nIGFuIGluZm9ybWF0aW9uIHJvdyB3aGVuIGEgcm93IGlzIGNsaWNrZWQgb24KCQkgKiAgICAgICQoJyNleGFtcGxlIHRib2R5IHRyJykuY2xpY2soIGZ1bmN0aW9uICgpIHsKCQkgKiAgICAgICAgaWYgKCBvVGFibGUuZm5Jc09wZW4odGhpcykgKSB7CgkJICogICAgICAgICAgb1RhYmxlLmZuQ2xvc2UoIHRoaXMgKTsKCQkgKiAgICAgICAgfSBlbHNlIHsKCQkgKiAgICAgICAgICBvVGFibGUuZm5PcGVuKCB0aGlzLCAiVGVtcG9yYXJ5IHJvdyBvcGVuZWQiLCAiaW5mb19yb3ciICk7CgkJICogICAgICAgIH0KCQkgKiAgICAgIH0gKTsKCQkgKgoJCSAqICAgICAgb1RhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKiAgICB9ICk7CgkJICovCgkJdGhpcy5mbklzT3BlbiA9IGZ1bmN0aW9uKCBuVHIgKQoJCXsKCQkJcmV0dXJuIHRoaXMuYXBpKCB0cnVlICkucm93KCBuVHIgKS5jaGlsZC5pc1Nob3duKCk7CgkJfTsKCQkKCQkKCQkvKioKCQkgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcGxhY2UgYSBuZXcgcm93IGRpcmVjdGx5IGFmdGVyIGEgcm93IHdoaWNoIGlzIGN1cnJlbnRseQoJCSAqIG9uIGRpc3BsYXkgb24gdGhlIHBhZ2UsIHdpdGggdGhlIEhUTUwgY29udGVudHMgdGhhdCBpcyBwYXNzZWQgaW50byB0aGUKCQkgKiBmdW5jdGlvbi4gVGhpcyBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIGFzayBmb3IgY29uZmlybWF0aW9uIHRoYXQgYQoJCSAqIHBhcnRpY3VsYXIgcmVjb3JkIHNob3VsZCBiZSBkZWxldGVkLgoJCSAqICBAcGFyYW0ge25vZGV9IG5UciBUaGUgdGFibGUgcm93IHRvICdvcGVuJwoJCSAqICBAcGFyYW0ge3N0cmluZ3xub2RlfGpRdWVyeX0gbUh0bWwgVGhlIEhUTUwgdG8gcHV0IGludG8gdGhlIHJvdwoJCSAqICBAcGFyYW0ge3N0cmluZ30gc0NsYXNzIENsYXNzIHRvIGdpdmUgdGhlIG5ldyBURCBjZWxsCgkJICogIEByZXR1cm5zIHtub2RlfSBUaGUgcm93IG9wZW5lZC4gTm90ZSB0aGF0IGlmIHRoZSB0YWJsZSByb3cgcGFzc2VkIGluIGFzIHRoZQoJCSAqICAgIGZpcnN0IHBhcmFtZXRlciwgaXMgbm90IGZvdW5kIGluIHRoZSB0YWJsZSwgdGhpcyBtZXRob2Qgd2lsbCBzaWxlbnRseQoJCSAqICAgIHJldHVybi4KCQkgKiAgQGR0b3B0IEFQSQoJCSAqICBAZGVwcmVjYXRlZCBTaW5jZSB2MS4xMAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJICogICAgICB2YXIgb1RhYmxlOwoJCSAqCgkJICogICAgICAvLyAnb3BlbicgYW4gaW5mb3JtYXRpb24gcm93IHdoZW4gYSByb3cgaXMgY2xpY2tlZCBvbgoJCSAqICAgICAgJCgnI2V4YW1wbGUgdGJvZHkgdHInKS5jbGljayggZnVuY3Rpb24gKCkgewoJCSAqICAgICAgICBpZiAoIG9UYWJsZS5mbklzT3Blbih0aGlzKSApIHsKCQkgKiAgICAgICAgICBvVGFibGUuZm5DbG9zZSggdGhpcyApOwoJCSAqICAgICAgICB9IGVsc2UgewoJCSAqICAgICAgICAgIG9UYWJsZS5mbk9wZW4oIHRoaXMsICJUZW1wb3Jhcnkgcm93IG9wZW5lZCIsICJpbmZvX3JvdyIgKTsKCQkgKiAgICAgICAgfQoJCSAqICAgICAgfSApOwoJCSAqCgkJICogICAgICBvVGFibGUgPSAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSgpOwoJCSAqICAgIH0gKTsKCQkgKi8KCQl0aGlzLmZuT3BlbiA9IGZ1bmN0aW9uKCBuVHIsIG1IdG1sLCBzQ2xhc3MgKQoJCXsKCQkJcmV0dXJuIHRoaXMuYXBpKCB0cnVlICkKCQkJCS5yb3coIG5UciApCgkJCQkuY2hpbGQoIG1IdG1sLCBzQ2xhc3MgKQoJCQkJLnNob3coKQoJCQkJLmNoaWxkKClbMF07CgkJfTsKCQkKCQkKCQkvKioKCQkgKiBDaGFuZ2UgdGhlIHBhZ2luYXRpb24gLSBwcm92aWRlcyB0aGUgaW50ZXJuYWwgbG9naWMgZm9yIHBhZ2luYXRpb24gaW4gYSBzaW1wbGUgQVBJCgkJICogZnVuY3Rpb24uIFdpdGggdGhpcyBmdW5jdGlvbiB5b3UgY2FuIGhhdmUgYSBEYXRhVGFibGVzIHRhYmxlIGdvIHRvIHRoZSBuZXh0LAoJCSAqIHByZXZpb3VzLCBmaXJzdCBvciBsYXN0IHBhZ2VzLgoJCSAqICBAcGFyYW0ge3N0cmluZ3xpbnR9IG1BY3Rpb24gUGFnaW5nIGFjdGlvbiB0byB0YWtlOiAiZmlyc3QiLCAicHJldmlvdXMiLCAibmV4dCIgb3IgImxhc3QiCgkJICogICAgb3IgcGFnZSBudW1iZXIgdG8ganVtcCB0byAoaW50ZWdlciksIG5vdGUgdGhhdCBwYWdlIDAgaXMgdGhlIGZpcnN0IHBhZ2UuCgkJICogIEBwYXJhbSB7Ym9vbH0gW2JSZWRyYXc9dHJ1ZV0gUmVkcmF3IHRoZSB0YWJsZSBvciBub3QKCQkgKiAgQGR0b3B0IEFQSQoJCSAqICBAZGVwcmVjYXRlZCBTaW5jZSB2MS4xMAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJICogICAgICB2YXIgb1RhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKiAgICAgIG9UYWJsZS5mblBhZ2VDaGFuZ2UoICduZXh0JyApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQl0aGlzLmZuUGFnZUNoYW5nZSA9IGZ1bmN0aW9uICggbUFjdGlvbiwgYlJlZHJhdyApCgkJewoJCQl2YXIgYXBpID0gdGhpcy5hcGkoIHRydWUgKS5wYWdlKCBtQWN0aW9uICk7CgkJCgkJCWlmICggYlJlZHJhdyA9PT0gdW5kZWZpbmVkIHx8IGJSZWRyYXcgKSB7CgkJCQlhcGkuZHJhdyhmYWxzZSk7CgkJCX0KCQl9OwoJCQoJCQoJCS8qKgoJCSAqIFNob3cgYSBwYXJ0aWN1bGFyIGNvbHVtbgoJCSAqICBAcGFyYW0ge2ludH0gaUNvbCBUaGUgY29sdW1uIHdob3NlIGRpc3BsYXkgc2hvdWxkIGJlIGNoYW5nZWQKCQkgKiAgQHBhcmFtIHtib29sfSBiU2hvdyBTaG93ICh0cnVlKSBvciBoaWRlIChmYWxzZSkgdGhlIGNvbHVtbgoJCSAqICBAcGFyYW0ge2Jvb2x9IFtiUmVkcmF3PXRydWVdIFJlZHJhdyB0aGUgdGFibGUgb3Igbm90CgkJICogIEBkdG9wdCBBUEkKCQkgKiAgQGRlcHJlY2F0ZWQgU2luY2UgdjEuMTAKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCSAqICAgICAgdmFyIG9UYWJsZSA9ICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCk7CgkJICoKCQkgKiAgICAgIC8vIEhpZGUgdGhlIHNlY29uZCBjb2x1bW4gYWZ0ZXIgaW5pdGlhbGlzYXRpb24KCQkgKiAgICAgIG9UYWJsZS5mblNldENvbHVtblZpcyggMSwgZmFsc2UgKTsKCQkgKiAgICB9ICk7CgkJICovCgkJdGhpcy5mblNldENvbHVtblZpcyA9IGZ1bmN0aW9uICggaUNvbCwgYlNob3csIGJSZWRyYXcgKQoJCXsKCQkJdmFyIGFwaSA9IHRoaXMuYXBpKCB0cnVlICkuY29sdW1uKCBpQ29sICkudmlzaWJsZSggYlNob3cgKTsKCQkKCQkJaWYgKCBiUmVkcmF3ID09PSB1bmRlZmluZWQgfHwgYlJlZHJhdyApIHsKCQkJCWFwaS5jb2x1bW5zLmFkanVzdCgpLmRyYXcoKTsKCQkJfQoJCX07CgkJCgkJCgkJLyoqCgkJICogR2V0IHRoZSBzZXR0aW5ncyBmb3IgYSBwYXJ0aWN1bGFyIHRhYmxlIGZvciBleHRlcm5hbCBtYW5pcHVsYXRpb24KCQkgKiAgQHJldHVybnMge29iamVjdH0gRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QuIFNlZQoJCSAqICAgIHtAbGluayBEYXRhVGFibGUubW9kZWxzLm9TZXR0aW5nc30KCQkgKiAgQGR0b3B0IEFQSQoJCSAqICBAZGVwcmVjYXRlZCBTaW5jZSB2MS4xMAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJICogICAgICB2YXIgb1RhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKiAgICAgIHZhciBvU2V0dGluZ3MgPSBvVGFibGUuZm5TZXR0aW5ncygpOwoJCSAqCgkJICogICAgICAvLyBTaG93IGFuIGV4YW1wbGUgcGFyYW1ldGVyIGZyb20gdGhlIHNldHRpbmdzCgkJICogICAgICBhbGVydCggb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0ICk7CgkJICogICAgfSApOwoJCSAqLwoJCXRoaXMuZm5TZXR0aW5ncyA9IGZ1bmN0aW9uKCkKCQl7CgkJCXJldHVybiBfZm5TZXR0aW5nc0Zyb21Ob2RlKCB0aGlzW19leHQuaUFwaUluZGV4XSApOwoJCX07CgkJCgkJCgkJLyoqCgkJICogU29ydCB0aGUgdGFibGUgYnkgYSBwYXJ0aWN1bGFyIGNvbHVtbgoJCSAqICBAcGFyYW0ge2ludH0gaUNvbCB0aGUgZGF0YSBpbmRleCB0byBzb3J0IG9uLiBOb3RlIHRoYXQgdGhpcyB3aWxsIG5vdCBtYXRjaCB0aGUKCQkgKiAgICAnZGlzcGxheSBpbmRleCcgaWYgeW91IGhhdmUgaGlkZGVuIGRhdGEgZW50cmllcwoJCSAqICBAZHRvcHQgQVBJCgkJICogIEBkZXByZWNhdGVkIFNpbmNlIHYxLjEwCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKCQkgKiAgICAgIHZhciBvVGFibGUgPSAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSgpOwoJCSAqCgkJICogICAgICAvLyBTb3J0IGltbWVkaWF0ZWx5IHdpdGggY29sdW1ucyAwIGFuZCAxCgkJICogICAgICBvVGFibGUuZm5Tb3J0KCBbIFswLCdhc2MnXSwgWzEsJ2FzYyddIF0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJdGhpcy5mblNvcnQgPSBmdW5jdGlvbiggYWFTb3J0ICkKCQl7CgkJCXRoaXMuYXBpKCB0cnVlICkub3JkZXIoIGFhU29ydCApLmRyYXcoKTsKCQl9OwoJCQoJCQoJCS8qKgoJCSAqIEF0dGFjaCBhIHNvcnQgbGlzdGVuZXIgdG8gYW4gZWxlbWVudCBmb3IgYSBnaXZlbiBjb2x1bW4KCQkgKiAgQHBhcmFtIHtub2RlfSBuTm9kZSB0aGUgZWxlbWVudCB0byBhdHRhY2ggdGhlIHNvcnQgbGlzdGVuZXIgdG8KCQkgKiAgQHBhcmFtIHtpbnR9IGlDb2x1bW4gdGhlIGNvbHVtbiB0aGF0IGEgY2xpY2sgb24gdGhpcyBub2RlIHdpbGwgc29ydCBvbgoJCSAqICBAcGFyYW0ge2Z1bmN0aW9ufSBbZm5DYWxsYmFja10gY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiBzb3J0IGlzIHJ1bgoJCSAqICBAZHRvcHQgQVBJCgkJICogIEBkZXByZWNhdGVkIFNpbmNlIHYxLjEwCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKCQkgKiAgICAgIHZhciBvVGFibGUgPSAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSgpOwoJCSAqCgkJICogICAgICAvLyBTb3J0IG9uIGNvbHVtbiAxLCB3aGVuICdzb3J0ZXInIGlzIGNsaWNrZWQgb24KCQkgKiAgICAgIG9UYWJsZS5mblNvcnRMaXN0ZW5lciggZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvcnRlcicpLCAxICk7CgkJICogICAgfSApOwoJCSAqLwoJCXRoaXMuZm5Tb3J0TGlzdGVuZXIgPSBmdW5jdGlvbiggbk5vZGUsIGlDb2x1bW4sIGZuQ2FsbGJhY2sgKQoJCXsKCQkJdGhpcy5hcGkoIHRydWUgKS5vcmRlci5saXN0ZW5lciggbk5vZGUsIGlDb2x1bW4sIGZuQ2FsbGJhY2sgKTsKCQl9OwoJCQoJCQoJCS8qKgoJCSAqIFVwZGF0ZSBhIHRhYmxlIGNlbGwgb3Igcm93IC0gdGhpcyBtZXRob2Qgd2lsbCBhY2NlcHQgZWl0aGVyIGEgc2luZ2xlIHZhbHVlIHRvCgkJICogdXBkYXRlIHRoZSBjZWxsIHdpdGgsIGFuIGFycmF5IG9mIHZhbHVlcyB3aXRoIG9uZSBlbGVtZW50IGZvciBlYWNoIGNvbHVtbiBvcgoJCSAqIGFuIG9iamVjdCBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlIG9yaWdpbmFsIGRhdGEgc291cmNlLiBUaGUgZnVuY3Rpb24gaXMKCQkgKiBzZWxmLXJlZmVyZW5jaW5nIGluIG9yZGVyIHRvIG1ha2UgdGhlIG11bHRpIGNvbHVtbiB1cGRhdGVzIGVhc2llci4KCQkgKiAgQHBhcmFtIHtvYmplY3R8YXJyYXl8c3RyaW5nfSBtRGF0YSBEYXRhIHRvIHVwZGF0ZSB0aGUgY2VsbC9yb3cgd2l0aAoJCSAqICBAcGFyYW0ge25vZGV8aW50fSBtUm93IFRSIGVsZW1lbnQgeW91IHdhbnQgdG8gdXBkYXRlIG9yIHRoZSBhb0RhdGEgaW5kZXgKCQkgKiAgQHBhcmFtIHtpbnR9IFtpQ29sdW1uXSBUaGUgY29sdW1uIHRvIHVwZGF0ZSwgZ2l2ZSBhcyBudWxsIG9yIHVuZGVmaW5lZCB0bwoJCSAqICAgIHVwZGF0ZSBhIHdob2xlIHJvdy4KCQkgKiAgQHBhcmFtIHtib29sfSBbYlJlZHJhdz10cnVlXSBSZWRyYXcgdGhlIHRhYmxlIG9yIG5vdAoJCSAqICBAcGFyYW0ge2Jvb2x9IFtiQWN0aW9uPXRydWVdIFBlcmZvcm0gcHJlLWRyYXcgYWN0aW9ucyBvciBub3QKCQkgKiAgQHJldHVybnMge2ludH0gMCBvbiBzdWNjZXNzLCAxIG9uIGVycm9yCgkJICogIEBkdG9wdCBBUEkKCQkgKiAgQGRlcHJlY2F0ZWQgU2luY2UgdjEuMTAKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCSAqICAgICAgdmFyIG9UYWJsZSA9ICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCk7CgkJICogICAgICBvVGFibGUuZm5VcGRhdGUoICdFeGFtcGxlIHVwZGF0ZScsIDAsIDAgKTsgLy8gU2luZ2xlIGNlbGwKCQkgKiAgICAgIG9UYWJsZS5mblVwZGF0ZSggWydhJywgJ2InLCAnYycsICdkJywgJ2UnXSwgJCgndGJvZHkgdHInKVswXSApOyAvLyBSb3cKCQkgKiAgICB9ICk7CgkJICovCgkJdGhpcy5mblVwZGF0ZSA9IGZ1bmN0aW9uKCBtRGF0YSwgbVJvdywgaUNvbHVtbiwgYlJlZHJhdywgYkFjdGlvbiApCgkJewoJCQl2YXIgYXBpID0gdGhpcy5hcGkoIHRydWUgKTsKCQkKCQkJaWYgKCBpQ29sdW1uID09PSB1bmRlZmluZWQgfHwgaUNvbHVtbiA9PT0gbnVsbCApIHsKCQkJCWFwaS5yb3coIG1Sb3cgKS5kYXRhKCBtRGF0YSApOwoJCQl9CgkJCWVsc2UgewoJCQkJYXBpLmNlbGwoIG1Sb3csIGlDb2x1bW4gKS5kYXRhKCBtRGF0YSApOwoJCQl9CgkJCgkJCWlmICggYkFjdGlvbiA9PT0gdW5kZWZpbmVkIHx8IGJBY3Rpb24gKSB7CgkJCQlhcGkuY29sdW1ucy5hZGp1c3QoKTsKCQkJfQoJCQoJCQlpZiAoIGJSZWRyYXcgPT09IHVuZGVmaW5lZCB8fCBiUmVkcmF3ICkgewoJCQkJYXBpLmRyYXcoKTsKCQkJfQoJCQlyZXR1cm4gMDsKCQl9OwoJCQoJCQoJCS8qKgoJCSAqIFByb3ZpZGUgYSBjb21tb24gbWV0aG9kIGZvciBwbHVnLWlucyB0byBjaGVjayB0aGUgdmVyc2lvbiBvZiBEYXRhVGFibGVzIGJlaW5nIHVzZWQsIGluIG9yZGVyCgkJICogdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkuCgkJICogIEBwYXJhbSB7c3RyaW5nfSBzVmVyc2lvbiBWZXJzaW9uIHN0cmluZyB0byBjaGVjayBmb3IsIGluIHRoZSBmb3JtYXQgIlguWS5aIi4gTm90ZSB0aGF0IHRoZQoJCSAqICAgIGZvcm1hdHMgIlgiIGFuZCAiWC5ZIiBhcmUgYWxzbyBhY2NlcHRhYmxlLgoJCSAqICBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGlzIHZlcnNpb24gb2YgRGF0YVRhYmxlcyBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHRoZSByZXF1aXJlZAoJCSAqICAgIHZlcnNpb24sIG9yIGZhbHNlIGlmIHRoaXMgdmVyc2lvbiBvZiBEYXRhVGFsZXMgaXMgbm90IHN1aXRhYmxlCgkJICogIEBtZXRob2QKCQkgKiAgQGR0b3B0IEFQSQoJCSAqICBAZGVwcmVjYXRlZCBTaW5jZSB2MS4xMAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJICogICAgICB2YXIgb1RhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKiAgICAgIGFsZXJ0KCBvVGFibGUuZm5WZXJzaW9uQ2hlY2soICcxLjkuMCcgKSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQl0aGlzLmZuVmVyc2lvbkNoZWNrID0gX2V4dC5mblZlcnNpb25DaGVjazsKCQkKCgkJdmFyIF90aGF0ID0gdGhpczsKCQl2YXIgZW1wdHlJbml0ID0gb3B0aW9ucyA9PT0gdW5kZWZpbmVkOwoJCXZhciBsZW4gPSB0aGlzLmxlbmd0aDsKCgkJaWYgKCBlbXB0eUluaXQgKSB7CgkJCW9wdGlvbnMgPSB7fTsKCQl9CgoJCXRoaXMub0FwaSA9IHRoaXMuaW50ZXJuYWwgPSBfZXh0LmludGVybmFsOwoKCQkvLyBFeHRlbmQgd2l0aCBvbGQgc3R5bGUgcGx1Zy1pbiBBUEkgbWV0aG9kcwoJCWZvciAoIHZhciBmbiBpbiBEYXRhVGFibGUuZXh0LmludGVybmFsICkgewoJCQlpZiAoIGZuICkgewoJCQkJdGhpc1tmbl0gPSBfZm5FeHRlcm5BcGlGdW5jKGZuKTsKCQkJfQoJCX0KCgkJdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQkvLyBGb3IgZWFjaCBpbml0aWFsaXNhdGlvbiB3ZSB3YW50IHRvIGdpdmUgaXQgYSBjbGVhbiBpbml0aWFsaXNhdGlvbgoJCQkvLyBvYmplY3QgdGhhdCBjYW4gYmUgYmFzaGVkIGFyb3VuZAoJCQl2YXIgbyA9IHt9OwoJCQl2YXIgb0luaXQgPSBsZW4gPiAxID8gLy8gb3B0aW1pc2F0aW9uIGZvciBzaW5nbGUgdGFibGUgY2FzZQoJCQkJX2ZuRXh0ZW5kKCBvLCBvcHRpb25zLCB0cnVlICkgOgoJCQkJb3B0aW9uczsKCgkJCS8qZ2xvYmFsIG9Jbml0LF90aGF0LGVtcHR5SW5pdCovCgkJCXZhciBpPTAsIGlMZW4sIGosIGpMZW4sIGssIGtMZW47CgkJCXZhciBzSWQgPSB0aGlzLmdldEF0dHJpYnV0ZSggJ2lkJyApOwoJCQl2YXIgYkluaXRIYW5kZWRPZmYgPSBmYWxzZTsKCQkJdmFyIGRlZmF1bHRzID0gRGF0YVRhYmxlLmRlZmF1bHRzOwoJCQl2YXIgJHRoaXMgPSAkKHRoaXMpOwoJCQkKCQkJCgkJCS8qIFNhbml0eSBjaGVjayAqLwoJCQlpZiAoIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPSAndGFibGUnICkKCQkJewoJCQkJX2ZuTG9nKCBudWxsLCAwLCAnTm9uLXRhYmxlIG5vZGUgaW5pdGlhbGlzYXRpb24gKCcrdGhpcy5ub2RlTmFtZSsnKScsIDIgKTsKCQkJCXJldHVybjsKCQkJfQoJCQkKCQkJLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIHRoZSBkZWZhdWx0cyAqLwoJCQlfZm5Db21wYXRPcHRzKCBkZWZhdWx0cyApOwoJCQlfZm5Db21wYXRDb2xzKCBkZWZhdWx0cy5jb2x1bW4gKTsKCQkJCgkJCS8qIENvbnZlcnQgdGhlIGNhbWVsLWNhc2UgZGVmYXVsdHMgdG8gSHVuZ2FyaWFuICovCgkJCV9mbkNhbWVsVG9IdW5nYXJpYW4oIGRlZmF1bHRzLCBkZWZhdWx0cywgdHJ1ZSApOwoJCQlfZm5DYW1lbFRvSHVuZ2FyaWFuKCBkZWZhdWx0cy5jb2x1bW4sIGRlZmF1bHRzLmNvbHVtbiwgdHJ1ZSApOwoJCQkKCQkJLyogU2V0dGluZyB1cCB0aGUgaW5pdGlhbGlzYXRpb24gb2JqZWN0ICovCgkJCV9mbkNhbWVsVG9IdW5nYXJpYW4oIGRlZmF1bHRzLCAkLmV4dGVuZCggb0luaXQsICR0aGlzLmRhdGEoKSApLCB0cnVlICk7CgkJCQoJCQkKCQkJCgkJCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgcmUtaW5pdGlhbGlzaW5nIGEgdGFibGUgKi8KCQkJdmFyIGFsbFNldHRpbmdzID0gRGF0YVRhYmxlLnNldHRpbmdzOwoJCQlmb3IgKCBpPTAsIGlMZW49YWxsU2V0dGluZ3MubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJewoJCQkJdmFyIHMgPSBhbGxTZXR0aW5nc1tpXTsKCQkJCgkJCQkvKiBCYXNlIGNoZWNrIG9uIHRhYmxlIG5vZGUgKi8KCQkJCWlmICgKCQkJCQlzLm5UYWJsZSA9PSB0aGlzIHx8CgkJCQkJKHMublRIZWFkICYmIHMublRIZWFkLnBhcmVudE5vZGUgPT0gdGhpcykgfHwKCQkJCQkocy5uVEZvb3QgJiYgcy5uVEZvb3QucGFyZW50Tm9kZSA9PSB0aGlzKQoJCQkJKSB7CgkJCQkJdmFyIGJSZXRyaWV2ZSA9IG9Jbml0LmJSZXRyaWV2ZSAhPT0gdW5kZWZpbmVkID8gb0luaXQuYlJldHJpZXZlIDogZGVmYXVsdHMuYlJldHJpZXZlOwoJCQkJCXZhciBiRGVzdHJveSA9IG9Jbml0LmJEZXN0cm95ICE9PSB1bmRlZmluZWQgPyBvSW5pdC5iRGVzdHJveSA6IGRlZmF1bHRzLmJEZXN0cm95OwoJCQkKCQkJCQlpZiAoIGVtcHR5SW5pdCB8fCBiUmV0cmlldmUgKQoJCQkJCXsKCQkJCQkJcmV0dXJuIHMub0luc3RhbmNlOwoJCQkJCX0KCQkJCQllbHNlIGlmICggYkRlc3Ryb3kgKQoJCQkJCXsKCQkJCQkJcy5vSW5zdGFuY2UuZm5EZXN0cm95KCk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQlfZm5Mb2coIHMsIDAsICdDYW5ub3QgcmVpbml0aWFsaXNlIERhdGFUYWJsZScsIDMgKTsKCQkJCQkJcmV0dXJuOwoJCQkJCX0KCQkJCX0KCQkJCgkJCQkvKiBJZiB0aGUgZWxlbWVudCB3ZSBhcmUgaW5pdGlhbGlzaW5nIGhhcyB0aGUgc2FtZSBJRCBhcyBhIHRhYmxlIHdoaWNoIHdhcyBwcmV2aW91c2x5CgkJCQkgKiBpbml0aWFsaXNlZCwgYnV0IHRoZSB0YWJsZSBub2RlcyBkb24ndCBtYXRjaCAoZnJvbSBiZWZvcmUpIHRoZW4gd2UgZGVzdHJveSB0aGUgb2xkCgkJCQkgKiBpbnN0YW5jZSBieSBzaW1wbHkgZGVsZXRpbmcgaXQuIFRoaXMgaXMgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgdGFibGUgaGFzIGJlZW4KCQkJCSAqIGRlc3Ryb3llZCBieSBvdGhlciBtZXRob2RzLiBBbnlvbmUgdXNpbmcgbm9uLWlkIHNlbGVjdG9ycyB3aWxsIG5lZWQgdG8gZG8gdGhpcyBtYW51YWxseQoJCQkJICovCgkJCQlpZiAoIHMuc1RhYmxlSWQgPT0gdGhpcy5pZCApCgkJCQl7CgkJCQkJYWxsU2V0dGluZ3Muc3BsaWNlKCBpLCAxICk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJCgkJCS8qIEVuc3VyZSB0aGUgdGFibGUgaGFzIGFuIElEIC0gcmVxdWlyZWQgZm9yIGFjY2Vzc2liaWxpdHkgKi8KCQkJaWYgKCBzSWQgPT09IG51bGwgfHwgc0lkID09PSAiIiApCgkJCXsKCQkJCXNJZCA9ICJEYXRhVGFibGVzX1RhYmxlXyIrKERhdGFUYWJsZS5leHQuX3VuaXF1ZSsrKTsKCQkJCXRoaXMuaWQgPSBzSWQ7CgkJCX0KCQkJCgkJCS8qIENyZWF0ZSB0aGUgc2V0dGluZ3Mgb2JqZWN0IGZvciB0aGlzIHRhYmxlIGFuZCBzZXQgc29tZSBvZiB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzICovCgkJCXZhciBvU2V0dGluZ3MgPSAkLmV4dGVuZCggdHJ1ZSwge30sIERhdGFUYWJsZS5tb2RlbHMub1NldHRpbmdzLCB7CgkJCQkic0Rlc3Ryb3lXaWR0aCI6ICR0aGlzWzBdLnN0eWxlLndpZHRoLAoJCQkJInNJbnN0YW5jZSI6ICAgICBzSWQsCgkJCQkic1RhYmxlSWQiOiAgICAgIHNJZAoJCQl9ICk7CgkJCW9TZXR0aW5ncy5uVGFibGUgPSB0aGlzOwoJCQlvU2V0dGluZ3Mub0FwaSAgID0gX3RoYXQuaW50ZXJuYWw7CgkJCW9TZXR0aW5ncy5vSW5pdCAgPSBvSW5pdDsKCQkJCgkJCWFsbFNldHRpbmdzLnB1c2goIG9TZXR0aW5ncyApOwoJCQkKCQkJLy8gTmVlZCB0byBhZGQgdGhlIGluc3RhbmNlIGFmdGVyIHRoZSBpbnN0YW5jZSBhZnRlciB0aGUgc2V0dGluZ3Mgb2JqZWN0IGhhcyBiZWVuIGFkZGVkCgkJCS8vIHRvIHRoZSBzZXR0aW5ncyBhcnJheSwgc28gd2UgY2FuIHNlbGYgcmVmZXJlbmNlIHRoZSB0YWJsZSBpbnN0YW5jZSBpZiBtb3JlIHRoYW4gb25lCgkJCW9TZXR0aW5ncy5vSW5zdGFuY2UgPSAoX3RoYXQubGVuZ3RoPT09MSkgPyBfdGhhdCA6ICR0aGlzLmRhdGFUYWJsZSgpOwoJCQkKCQkJLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGJlZm9yZSB3ZSBhcHBseSBhbGwgdGhlIGRlZmF1bHRzCgkJCV9mbkNvbXBhdE9wdHMoIG9Jbml0ICk7CgkJCV9mbkxhbmd1YWdlQ29tcGF0KCBvSW5pdC5vTGFuZ3VhZ2UgKTsKCQkJCgkJCS8vIElmIHRoZSBsZW5ndGggbWVudSBpcyBnaXZlbiwgYnV0IHRoZSBpbml0IGRpc3BsYXkgbGVuZ3RoIGlzIG5vdCwgdXNlIHRoZSBsZW5ndGggbWVudQoJCQlpZiAoIG9Jbml0LmFMZW5ndGhNZW51ICYmICEgb0luaXQuaURpc3BsYXlMZW5ndGggKQoJCQl7CgkJCQlvSW5pdC5pRGlzcGxheUxlbmd0aCA9ICQuaXNBcnJheSggb0luaXQuYUxlbmd0aE1lbnVbMF0gKSA/CgkJCQkJb0luaXQuYUxlbmd0aE1lbnVbMF1bMF0gOiBvSW5pdC5hTGVuZ3RoTWVudVswXTsKCQkJfQoJCQkKCQkJLy8gQXBwbHkgdGhlIGRlZmF1bHRzIGFuZCBpbml0IG9wdGlvbnMgdG8gbWFrZSBhIHNpbmdsZSBpbml0IG9iamVjdCB3aWxsIGFsbAoJCQkvLyBvcHRpb25zIGRlZmluZWQgZnJvbSBkZWZhdWx0cyBhbmQgaW5zdGFuY2Ugb3B0aW9ucy4KCQkJb0luaXQgPSBfZm5FeHRlbmQoICQuZXh0ZW5kKCB0cnVlLCB7fSwgZGVmYXVsdHMgKSwgb0luaXQgKTsKCQkJCgkJCQoJCQkvLyBNYXAgdGhlIGluaXRpYWxpc2F0aW9uIG9wdGlvbnMgb250byB0aGUgc2V0dGluZ3Mgb2JqZWN0CgkJCV9mbk1hcCggb1NldHRpbmdzLm9GZWF0dXJlcywgb0luaXQsIFsKCQkJCSJiUGFnaW5hdGUiLAoJCQkJImJMZW5ndGhDaGFuZ2UiLAoJCQkJImJGaWx0ZXIiLAoJCQkJImJTb3J0IiwKCQkJCSJiU29ydE11bHRpIiwKCQkJCSJiSW5mbyIsCgkJCQkiYlByb2Nlc3NpbmciLAoJCQkJImJBdXRvV2lkdGgiLAoJCQkJImJTb3J0Q2xhc3NlcyIsCgkJCQkiYlNlcnZlclNpZGUiLAoJCQkJImJEZWZlclJlbmRlciIKCQkJXSApOwoJCQlfZm5NYXAoIG9TZXR0aW5ncywgb0luaXQsIFsKCQkJCSJhc1N0cmlwZUNsYXNzZXMiLAoJCQkJImFqYXgiLAoJCQkJImZuU2VydmVyRGF0YSIsCgkJCQkiZm5Gb3JtYXROdW1iZXIiLAoJCQkJInNTZXJ2ZXJNZXRob2QiLAoJCQkJImFhU29ydGluZyIsCgkJCQkiYWFTb3J0aW5nRml4ZWQiLAoJCQkJImFMZW5ndGhNZW51IiwKCQkJCSJzUGFnaW5hdGlvblR5cGUiLAoJCQkJInNBamF4U291cmNlIiwKCQkJCSJzQWpheERhdGFQcm9wIiwKCQkJCSJpU3RhdGVEdXJhdGlvbiIsCgkJCQkic0RvbSIsCgkJCQkiYlNvcnRDZWxsc1RvcCIsCgkJCQkiaVRhYkluZGV4IiwKCQkJCSJmblN0YXRlTG9hZENhbGxiYWNrIiwKCQkJCSJmblN0YXRlU2F2ZUNhbGxiYWNrIiwKCQkJCSJyZW5kZXJlciIsCgkJCQkic2VhcmNoRGVsYXkiLAoJCQkJInJvd0lkIiwKCQkJCVsgImlDb29raWVEdXJhdGlvbiIsICJpU3RhdGVEdXJhdGlvbiIgXSwgLy8gYmFja3dhcmRzIGNvbXBhdAoJCQkJWyAib1NlYXJjaCIsICJvUHJldmlvdXNTZWFyY2giIF0sCgkJCQlbICJhb1NlYXJjaENvbHMiLCAiYW9QcmVTZWFyY2hDb2xzIiBdLAoJCQkJWyAiaURpc3BsYXlMZW5ndGgiLCAiX2lEaXNwbGF5TGVuZ3RoIiBdCgkJCV0gKTsKCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub1Njcm9sbCwgb0luaXQsIFsKCQkJCVsgInNTY3JvbGxYIiwgInNYIiBdLAoJCQkJWyAic1Njcm9sbFhJbm5lciIsICJzWElubmVyIiBdLAoJCQkJWyAic1Njcm9sbFkiLCAic1kiIF0sCgkJCQlbICJiU2Nyb2xsQ29sbGFwc2UiLCAiYkNvbGxhcHNlIiBdCgkJCV0gKTsKCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0xhbmd1YWdlLCBvSW5pdCwgImZuSW5mb0NhbGxiYWNrIiApOwoJCQkKCQkJLyogQ2FsbGJhY2sgZnVuY3Rpb25zIHdoaWNoIGFyZSBhcnJheSBkcml2ZW4gKi8KCQkJX2ZuQ2FsbGJhY2tSZWcoIG9TZXR0aW5ncywgJ2FvRHJhd0NhbGxiYWNrJywgICAgICAgb0luaXQuZm5EcmF3Q2FsbGJhY2ssICAgICAgJ3VzZXInICk7CgkJCV9mbkNhbGxiYWNrUmVnKCBvU2V0dGluZ3MsICdhb1NlcnZlclBhcmFtcycsICAgICAgIG9Jbml0LmZuU2VydmVyUGFyYW1zLCAgICAgICd1c2VyJyApOwoJCQlfZm5DYWxsYmFja1JlZyggb1NldHRpbmdzLCAnYW9TdGF0ZVNhdmVQYXJhbXMnLCAgICBvSW5pdC5mblN0YXRlU2F2ZVBhcmFtcywgICAndXNlcicgKTsKCQkJX2ZuQ2FsbGJhY2tSZWcoIG9TZXR0aW5ncywgJ2FvU3RhdGVMb2FkUGFyYW1zJywgICAgb0luaXQuZm5TdGF0ZUxvYWRQYXJhbXMsICAgJ3VzZXInICk7CgkJCV9mbkNhbGxiYWNrUmVnKCBvU2V0dGluZ3MsICdhb1N0YXRlTG9hZGVkJywgICAgICAgIG9Jbml0LmZuU3RhdGVMb2FkZWQsICAgICAgICd1c2VyJyApOwoJCQlfZm5DYWxsYmFja1JlZyggb1NldHRpbmdzLCAnYW9Sb3dDYWxsYmFjaycsICAgICAgICBvSW5pdC5mblJvd0NhbGxiYWNrLCAgICAgICAndXNlcicgKTsKCQkJX2ZuQ2FsbGJhY2tSZWcoIG9TZXR0aW5ncywgJ2FvUm93Q3JlYXRlZENhbGxiYWNrJywgb0luaXQuZm5DcmVhdGVkUm93LCAgICAgICAgJ3VzZXInICk7CgkJCV9mbkNhbGxiYWNrUmVnKCBvU2V0dGluZ3MsICdhb0hlYWRlckNhbGxiYWNrJywgICAgIG9Jbml0LmZuSGVhZGVyQ2FsbGJhY2ssICAgICd1c2VyJyApOwoJCQlfZm5DYWxsYmFja1JlZyggb1NldHRpbmdzLCAnYW9Gb290ZXJDYWxsYmFjaycsICAgICBvSW5pdC5mbkZvb3RlckNhbGxiYWNrLCAgICAndXNlcicgKTsKCQkJX2ZuQ2FsbGJhY2tSZWcoIG9TZXR0aW5ncywgJ2FvSW5pdENvbXBsZXRlJywgICAgICAgb0luaXQuZm5Jbml0Q29tcGxldGUsICAgICAgJ3VzZXInICk7CgkJCV9mbkNhbGxiYWNrUmVnKCBvU2V0dGluZ3MsICdhb1ByZURyYXdDYWxsYmFjaycsICAgIG9Jbml0LmZuUHJlRHJhd0NhbGxiYWNrLCAgICd1c2VyJyApOwoJCQkKCQkJb1NldHRpbmdzLnJvd0lkRm4gPSBfZm5HZXRPYmplY3REYXRhRm4oIG9Jbml0LnJvd0lkICk7CgkJCQoJCQkvKiBCcm93c2VyIHN1cHBvcnQgZGV0ZWN0aW9uICovCgkJCV9mbkJyb3dzZXJEZXRlY3QoIG9TZXR0aW5ncyApOwoJCQkKCQkJdmFyIG9DbGFzc2VzID0gb1NldHRpbmdzLm9DbGFzc2VzOwoJCQkKCQkJJC5leHRlbmQoIG9DbGFzc2VzLCBEYXRhVGFibGUuZXh0LmNsYXNzZXMsIG9Jbml0Lm9DbGFzc2VzICk7CgkJCSR0aGlzLmFkZENsYXNzKCBvQ2xhc3Nlcy5zVGFibGUgKTsKCQkJCgkJCQoJCQlpZiAoIG9TZXR0aW5ncy5pSW5pdERpc3BsYXlTdGFydCA9PT0gdW5kZWZpbmVkICkKCQkJewoJCQkJLyogRGlzcGxheSBzdGFydCBwb2ludCwgdGFraW5nIGludG8gYWNjb3VudCB0aGUgc2F2ZSBzYXZpbmcgKi8KCQkJCW9TZXR0aW5ncy5pSW5pdERpc3BsYXlTdGFydCA9IG9Jbml0LmlEaXNwbGF5U3RhcnQ7CgkJCQlvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPSBvSW5pdC5pRGlzcGxheVN0YXJ0OwoJCQl9CgkJCQoJCQlpZiAoIG9Jbml0LmlEZWZlckxvYWRpbmcgIT09IG51bGwgKQoJCQl7CgkJCQlvU2V0dGluZ3MuYkRlZmVyTG9hZGluZyA9IHRydWU7CgkJCQl2YXIgdG1wID0gJC5pc0FycmF5KCBvSW5pdC5pRGVmZXJMb2FkaW5nICk7CgkJCQlvU2V0dGluZ3MuX2lSZWNvcmRzRGlzcGxheSA9IHRtcCA/IG9Jbml0LmlEZWZlckxvYWRpbmdbMF0gOiBvSW5pdC5pRGVmZXJMb2FkaW5nOwoJCQkJb1NldHRpbmdzLl9pUmVjb3Jkc1RvdGFsID0gdG1wID8gb0luaXQuaURlZmVyTG9hZGluZ1sxXSA6IG9Jbml0LmlEZWZlckxvYWRpbmc7CgkJCX0KCQkJCgkJCS8qIExhbmd1YWdlIGRlZmluaXRpb25zICovCgkJCXZhciBvTGFuZ3VhZ2UgPSBvU2V0dGluZ3Mub0xhbmd1YWdlOwoJCQkkLmV4dGVuZCggdHJ1ZSwgb0xhbmd1YWdlLCBvSW5pdC5vTGFuZ3VhZ2UgKTsKCQkJCgkJCWlmICggb0xhbmd1YWdlLnNVcmwgKQoJCQl7CgkJCQkvKiBHZXQgdGhlIGxhbmd1YWdlIGRlZmluaXRpb25zIGZyb20gYSBmaWxlIC0gYmVjYXVzZSB0aGlzIEFqYXggY2FsbCBtYWtlcyB0aGUgbGFuZ3VhZ2UKCQkJCSAqIGdldCBhc3luYyB0byB0aGUgcmVtYWluZGVyIG9mIHRoaXMgZnVuY3Rpb24gd2UgdXNlIGJJbml0SGFuZGVkT2ZmIHRvIGluZGljYXRlIHRoYXQKCQkJCSAqIF9mbkluaXRpYWxpc2Ugd2lsbCBiZSBmaXJlZCBieSB0aGUgcmV0dXJuZWQgQWpheCBoYW5kbGVyLCByYXRoZXIgdGhhbiB0aGUgY29uc3RydWN0b3IKCQkJCSAqLwoJCQkJJC5hamF4KCB7CgkJCQkJZGF0YVR5cGU6ICdqc29uJywKCQkJCQl1cmw6IG9MYW5ndWFnZS5zVXJsLAoJCQkJCXN1Y2Nlc3M6IGZ1bmN0aW9uICgganNvbiApIHsKCQkJCQkJX2ZuTGFuZ3VhZ2VDb21wYXQoIGpzb24gKTsKCQkJCQkJX2ZuQ2FtZWxUb0h1bmdhcmlhbiggZGVmYXVsdHMub0xhbmd1YWdlLCBqc29uICk7CgkJCQkJCSQuZXh0ZW5kKCB0cnVlLCBvTGFuZ3VhZ2UsIGpzb24gKTsKCQkJCQkJX2ZuSW5pdGlhbGlzZSggb1NldHRpbmdzICk7CgkJCQkJfSwKCQkJCQllcnJvcjogZnVuY3Rpb24gKCkgewoJCQkJCQkvLyBFcnJvciBvY2N1cnJlZCBsb2FkaW5nIGxhbmd1YWdlIGZpbGUsIGNvbnRpbnVlIG9uIGFzIGJlc3Qgd2UgY2FuCgkJCQkJCV9mbkluaXRpYWxpc2UoIG9TZXR0aW5ncyApOwoJCQkJCX0KCQkJCX0gKTsKCQkJCWJJbml0SGFuZGVkT2ZmID0gdHJ1ZTsKCQkJfQoJCQkKCQkJLyoKCQkJICogU3RyaXBlcwoJCQkgKi8KCQkJaWYgKCBvSW5pdC5hc1N0cmlwZUNsYXNzZXMgPT09IG51bGwgKQoJCQl7CgkJCQlvU2V0dGluZ3MuYXNTdHJpcGVDbGFzc2VzID1bCgkJCQkJb0NsYXNzZXMuc1N0cmlwZU9kZCwKCQkJCQlvQ2xhc3Nlcy5zU3RyaXBlRXZlbgoJCQkJXTsKCQkJfQoJCQkKCQkJLyogUmVtb3ZlIHJvdyBzdHJpcGUgY2xhc3NlcyBpZiB0aGV5IGFyZSBhbHJlYWR5IG9uIHRoZSB0YWJsZSByb3cgKi8KCQkJdmFyIHN0cmlwZUNsYXNzZXMgPSBvU2V0dGluZ3MuYXNTdHJpcGVDbGFzc2VzOwoJCQl2YXIgcm93T25lID0gJHRoaXMuY2hpbGRyZW4oJ3Rib2R5JykuZmluZCgndHInKS5lcSgwKTsKCQkJaWYgKCAkLmluQXJyYXkoIHRydWUsICQubWFwKCBzdHJpcGVDbGFzc2VzLCBmdW5jdGlvbihlbCwgaSkgewoJCQkJcmV0dXJuIHJvd09uZS5oYXNDbGFzcyhlbCk7CgkJCX0gKSApICE9PSAtMSApIHsKCQkJCSQoJ3Rib2R5IHRyJywgdGhpcykucmVtb3ZlQ2xhc3MoIHN0cmlwZUNsYXNzZXMuam9pbignICcpICk7CgkJCQlvU2V0dGluZ3MuYXNEZXN0cm95U3RyaXBlcyA9IHN0cmlwZUNsYXNzZXMuc2xpY2UoKTsKCQkJfQoJCQkKCQkJLyoKCQkJICogQ29sdW1ucwoJCQkgKiBTZWUgaWYgd2Ugc2hvdWxkIGxvYWQgY29sdW1ucyBhdXRvbWF0aWNhbGx5IG9yIHVzZSBkZWZpbmVkIG9uZXMKCQkJICovCgkJCXZhciBhblRocyA9IFtdOwoJCQl2YXIgYW9Db2x1bW5zSW5pdDsKCQkJdmFyIG5UaGVhZCA9IHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RoZWFkJyk7CgkJCWlmICggblRoZWFkLmxlbmd0aCAhPT0gMCApCgkJCXsKCQkJCV9mbkRldGVjdEhlYWRlciggb1NldHRpbmdzLmFvSGVhZGVyLCBuVGhlYWRbMF0gKTsKCQkJCWFuVGhzID0gX2ZuR2V0VW5pcXVlVGhzKCBvU2V0dGluZ3MgKTsKCQkJfQoJCQkKCQkJLyogSWYgbm90IGdpdmVuIGEgY29sdW1uIGFycmF5LCBnZW5lcmF0ZSBvbmUgd2l0aCBudWxscyAqLwoJCQlpZiAoIG9Jbml0LmFvQ29sdW1ucyA9PT0gbnVsbCApCgkJCXsKCQkJCWFvQ29sdW1uc0luaXQgPSBbXTsKCQkJCWZvciAoIGk9MCwgaUxlbj1hblRocy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQkJewoJCQkJCWFvQ29sdW1uc0luaXQucHVzaCggbnVsbCApOwoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJYW9Db2x1bW5zSW5pdCA9IG9Jbml0LmFvQ29sdW1uczsKCQkJfQoJCQkKCQkJLyogQWRkIHRoZSBjb2x1bW5zICovCgkJCWZvciAoIGk9MCwgaUxlbj1hb0NvbHVtbnNJbml0Lmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCV9mbkFkZENvbHVtbiggb1NldHRpbmdzLCBhblRocyA/IGFuVGhzW2ldIDogbnVsbCApOwoJCQl9CgkJCQoJCQkvKiBBcHBseSB0aGUgY29sdW1uIGRlZmluaXRpb25zICovCgkJCV9mbkFwcGx5Q29sdW1uRGVmcyggb1NldHRpbmdzLCBvSW5pdC5hb0NvbHVtbkRlZnMsIGFvQ29sdW1uc0luaXQsIGZ1bmN0aW9uIChpQ29sLCBvRGVmKSB7CgkJCQlfZm5Db2x1bW5PcHRpb25zKCBvU2V0dGluZ3MsIGlDb2wsIG9EZWYgKTsKCQkJfSApOwoJCQkKCQkJLyogSFRNTDUgYXR0cmlidXRlIGRldGVjdGlvbiAtIGJ1aWxkIGFuIG1EYXRhIG9iamVjdCBhdXRvbWF0aWNhbGx5IGlmIHRoZQoJCQkgKiBhdHRyaWJ1dGVzIGFyZSBmb3VuZAoJCQkgKi8KCQkJaWYgKCByb3dPbmUubGVuZ3RoICkgewoJCQkJdmFyIGEgPSBmdW5jdGlvbiAoIGNlbGwsIG5hbWUgKSB7CgkJCQkJcmV0dXJuIGNlbGwuZ2V0QXR0cmlidXRlKCAnZGF0YS0nK25hbWUgKSAhPT0gbnVsbCA/IG5hbWUgOiBudWxsOwoJCQkJfTsKCQkJCgkJCQkkKCByb3dPbmVbMF0gKS5jaGlsZHJlbigndGgsIHRkJykuZWFjaCggZnVuY3Rpb24gKGksIGNlbGwpIHsKCQkJCQl2YXIgY29sID0gb1NldHRpbmdzLmFvQ29sdW1uc1tpXTsKCQkJCgkJCQkJaWYgKCBjb2wubURhdGEgPT09IGkgKSB7CgkJCQkJCXZhciBzb3J0ID0gYSggY2VsbCwgJ3NvcnQnICkgfHwgYSggY2VsbCwgJ29yZGVyJyApOwoJCQkJCQl2YXIgZmlsdGVyID0gYSggY2VsbCwgJ2ZpbHRlcicgKSB8fCBhKCBjZWxsLCAnc2VhcmNoJyApOwoJCQkKCQkJCQkJaWYgKCBzb3J0ICE9PSBudWxsIHx8IGZpbHRlciAhPT0gbnVsbCApIHsKCQkJCQkJCWNvbC5tRGF0YSA9IHsKCQkJCQkJCQlfOiAgICAgIGkrJy5kaXNwbGF5JywKCQkJCQkJCQlzb3J0OiAgIHNvcnQgIT09IG51bGwgICA/IGkrJy5AZGF0YS0nK3NvcnQgICA6IHVuZGVmaW5lZCwKCQkJCQkJCQl0eXBlOiAgIHNvcnQgIT09IG51bGwgICA/IGkrJy5AZGF0YS0nK3NvcnQgICA6IHVuZGVmaW5lZCwKCQkJCQkJCQlmaWx0ZXI6IGZpbHRlciAhPT0gbnVsbCA/IGkrJy5AZGF0YS0nK2ZpbHRlciA6IHVuZGVmaW5lZAoJCQkJCQkJfTsKCQkJCgkJCQkJCQlfZm5Db2x1bW5PcHRpb25zKCBvU2V0dGluZ3MsIGkgKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0gKTsKCQkJfQoJCQkKCQkJdmFyIGZlYXR1cmVzID0gb1NldHRpbmdzLm9GZWF0dXJlczsKCQkJdmFyIGxvYWRlZEluaXQgPSBmdW5jdGlvbiAoKSB7CgkJCQkvKgoJCQkJICogU29ydGluZwoJCQkJICogQHRvZG8gRm9yIG1vZHVsYXJpc2F0aW9uICgxLjExKSB0aGlzIG5lZWRzIHRvIGRvIGludG8gYSBzb3J0IHN0YXJ0IHVwIGhhbmRsZXIKCQkJCSAqLwoJCQkKCQkJCS8vIElmIGFhU29ydGluZyBpcyBub3QgZGVmaW5lZCwgdGhlbiB3ZSB1c2UgdGhlIGZpcnN0IGluZGljYXRvciBpbiBhc1NvcnRpbmcKCQkJCS8vIGluIGNhc2UgdGhhdCBoYXMgYmVlbiBhbHRlcmVkLCBzbyB0aGUgZGVmYXVsdCBzb3J0IHJlZmxlY3RzIHRoYXQgb3B0aW9uCgkJCQlpZiAoIG9Jbml0LmFhU29ydGluZyA9PT0gdW5kZWZpbmVkICkgewoJCQkJCXZhciBzb3J0aW5nID0gb1NldHRpbmdzLmFhU29ydGluZzsKCQkJCQlmb3IgKCBpPTAsIGlMZW49c29ydGluZy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKSB7CgkJCQkJCXNvcnRpbmdbaV1bMV0gPSBvU2V0dGluZ3MuYW9Db2x1bW5zWyBpIF0uYXNTb3J0aW5nWzBdOwoJCQkJCX0KCQkJCX0KCQkJCgkJCQkvKiBEbyBhIGZpcnN0IHBhc3Mgb24gdGhlIHNvcnRpbmcgY2xhc3NlcyAoYWxsb3dzIGFueSBzaXplIGNoYW5nZXMgdG8gYmUgdGFrZW4gaW50bwoJCQkJICogYWNjb3VudCwgYW5kIGFsc28gd2lsbCBhcHBseSBzb3J0aW5nIGRpc2FibGVkIGNsYXNzZXMgaWYgZGlzYWJsZWQKCQkJCSAqLwoJCQkJX2ZuU29ydGluZ0NsYXNzZXMoIG9TZXR0aW5ncyApOwoJCQkKCQkJCWlmICggZmVhdHVyZXMuYlNvcnQgKSB7CgkJCQkJX2ZuQ2FsbGJhY2tSZWcoIG9TZXR0aW5ncywgJ2FvRHJhd0NhbGxiYWNrJywgZnVuY3Rpb24gKCkgewoJCQkJCQlpZiAoIG9TZXR0aW5ncy5iU29ydGVkICkgewoJCQkJCQkJdmFyIGFTb3J0ID0gX2ZuU29ydEZsYXR0ZW4oIG9TZXR0aW5ncyApOwoJCQkJCQkJdmFyIHNvcnRlZENvbHVtbnMgPSB7fTsKCQkJCgkJCQkJCQkkLmVhY2goIGFTb3J0LCBmdW5jdGlvbiAoaSwgdmFsKSB7CgkJCQkJCQkJc29ydGVkQ29sdW1uc1sgdmFsLnNyYyBdID0gdmFsLmRpcjsKCQkJCQkJCX0gKTsKCQkJCgkJCQkJCQlfZm5DYWxsYmFja0ZpcmUoIG9TZXR0aW5ncywgbnVsbCwgJ29yZGVyJywgW29TZXR0aW5ncywgYVNvcnQsIHNvcnRlZENvbHVtbnNdICk7CgkJCQkJCQlfZm5Tb3J0QXJpYSggb1NldHRpbmdzICk7CgkJCQkJCX0KCQkJCQl9ICk7CgkJCQl9CgkJCQoJCQkJX2ZuQ2FsbGJhY2tSZWcoIG9TZXR0aW5ncywgJ2FvRHJhd0NhbGxiYWNrJywgZnVuY3Rpb24gKCkgewoJCQkJCWlmICggb1NldHRpbmdzLmJTb3J0ZWQgfHwgX2ZuRGF0YVNvdXJjZSggb1NldHRpbmdzICkgPT09ICdzc3AnIHx8IGZlYXR1cmVzLmJEZWZlclJlbmRlciApIHsKCQkJCQkJX2ZuU29ydGluZ0NsYXNzZXMoIG9TZXR0aW5ncyApOwoJCQkJCX0KCQkJCX0sICdzYycgKTsKCQkJCgkJCQoJCQkJLyoKCQkJCSAqIEZpbmFsIGluaXQKCQkJCSAqIENhY2hlIHRoZSBoZWFkZXIsIGJvZHkgYW5kIGZvb3RlciBhcyByZXF1aXJlZCwgY3JlYXRpbmcgdGhlbSBpZiBuZWVkZWQKCQkJCSAqLwoJCQkKCQkJCS8vIFdvcmsgYXJvdW5kIGZvciBXZWJraXQgYnVnIDgzODY3IC0gc3RvcmUgdGhlIGNhcHRpb24tc2lkZSBiZWZvcmUgcmVtb3ZpbmcgZnJvbSBkb2MKCQkJCXZhciBjYXB0aW9ucyA9ICR0aGlzLmNoaWxkcmVuKCdjYXB0aW9uJykuZWFjaCggZnVuY3Rpb24gKCkgewoJCQkJCXRoaXMuX2NhcHRpb25TaWRlID0gJCh0aGlzKS5jc3MoJ2NhcHRpb24tc2lkZScpOwoJCQkJfSApOwoJCQkKCQkJCXZhciB0aGVhZCA9ICR0aGlzLmNoaWxkcmVuKCd0aGVhZCcpOwoJCQkJaWYgKCB0aGVhZC5sZW5ndGggPT09IDAgKSB7CgkJCQkJdGhlYWQgPSAkKCc8dGhlYWQvPicpLmFwcGVuZFRvKCR0aGlzKTsKCQkJCX0KCQkJCW9TZXR0aW5ncy5uVEhlYWQgPSB0aGVhZFswXTsKCQkJCgkJCQl2YXIgdGJvZHkgPSAkdGhpcy5jaGlsZHJlbigndGJvZHknKTsKCQkJCWlmICggdGJvZHkubGVuZ3RoID09PSAwICkgewoJCQkJCXRib2R5ID0gJCgnPHRib2R5Lz4nKS5hcHBlbmRUbygkdGhpcyk7CgkJCQl9CgkJCQlvU2V0dGluZ3MublRCb2R5ID0gdGJvZHlbMF07CgkJCQoJCQkJdmFyIHRmb290ID0gJHRoaXMuY2hpbGRyZW4oJ3Rmb290Jyk7CgkJCQlpZiAoIHRmb290Lmxlbmd0aCA9PT0gMCAmJiBjYXB0aW9ucy5sZW5ndGggPiAwICYmIChvU2V0dGluZ3Mub1Njcm9sbC5zWCAhPT0gIiIgfHwgb1NldHRpbmdzLm9TY3JvbGwuc1kgIT09ICIiKSApIHsKCQkJCQkvLyBJZiB3ZSBhcmUgYSBzY3JvbGxpbmcgdGFibGUsIGFuZCBubyBmb290ZXIgaGFzIGJlZW4gZ2l2ZW4sIHRoZW4gd2UgbmVlZCB0byBjcmVhdGUKCQkJCQkvLyBhIHRmb290IGVsZW1lbnQgZm9yIHRoZSBjYXB0aW9uIGVsZW1lbnQgdG8gYmUgYXBwZW5kZWQgdG8KCQkJCQl0Zm9vdCA9ICQoJzx0Zm9vdC8+JykuYXBwZW5kVG8oJHRoaXMpOwoJCQkJfQoJCQkKCQkJCWlmICggdGZvb3QubGVuZ3RoID09PSAwIHx8IHRmb290LmNoaWxkcmVuKCkubGVuZ3RoID09PSAwICkgewoJCQkJCSR0aGlzLmFkZENsYXNzKCBvQ2xhc3Nlcy5zTm9Gb290ZXIgKTsKCQkJCX0KCQkJCWVsc2UgaWYgKCB0Zm9vdC5sZW5ndGggPiAwICkgewoJCQkJCW9TZXR0aW5ncy5uVEZvb3QgPSB0Zm9vdFswXTsKCQkJCQlfZm5EZXRlY3RIZWFkZXIoIG9TZXR0aW5ncy5hb0Zvb3Rlciwgb1NldHRpbmdzLm5URm9vdCApOwoJCQkJfQoJCQkKCQkJCS8qIENoZWNrIGlmIHRoZXJlIGlzIGRhdGEgcGFzc2luZyBpbnRvIHRoZSBjb25zdHJ1Y3RvciAqLwoJCQkJaWYgKCBvSW5pdC5hYURhdGEgKSB7CgkJCQkJZm9yICggaT0wIDsgaTxvSW5pdC5hYURhdGEubGVuZ3RoIDsgaSsrICkgewoJCQkJCQlfZm5BZGREYXRhKCBvU2V0dGluZ3MsIG9Jbml0LmFhRGF0YVsgaSBdICk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZSBpZiAoIG9TZXR0aW5ncy5iRGVmZXJMb2FkaW5nIHx8IF9mbkRhdGFTb3VyY2UoIG9TZXR0aW5ncyApID09ICdkb20nICkgewoJCQkJCS8qIEdyYWIgdGhlIGRhdGEgZnJvbSB0aGUgcGFnZSAtIG9ubHkgZG8gdGhpcyB3aGVuIGRlZmVycmVkIGxvYWRpbmcgb3Igbm8gQWpheAoJCQkJCSAqIHNvdXJjZSBzaW5jZSB0aGVyZSBpcyBubyBwb2ludCBpbiByZWFkaW5nIHRoZSBET00gZGF0YSBpZiB3ZSBhcmUgdGhlbiBnb2luZwoJCQkJCSAqIHRvIHJlcGxhY2UgaXQgd2l0aCBBamF4IGRhdGEKCQkJCQkgKi8KCQkJCQlfZm5BZGRUciggb1NldHRpbmdzLCAkKG9TZXR0aW5ncy5uVEJvZHkpLmNoaWxkcmVuKCd0cicpICk7CgkJCQl9CgkJCQoJCQkJLyogQ29weSB0aGUgZGF0YSBpbmRleCBhcnJheSAqLwoJCQkJb1NldHRpbmdzLmFpRGlzcGxheSA9IG9TZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIuc2xpY2UoKTsKCQkJCgkJCQkvKiBJbml0aWFsaXNhdGlvbiBjb21wbGV0ZSAtIHRhYmxlIGNhbiBiZSBkcmF3biAqLwoJCQkJb1NldHRpbmdzLmJJbml0aWFsaXNlZCA9IHRydWU7CgkJCQoJCQkJLyogQ2hlY2sgaWYgd2UgbmVlZCB0byBpbml0aWFsaXNlIHRoZSB0YWJsZSAoaXQgbWlnaHQgbm90IGhhdmUgYmVlbiBoYW5kZWQgb2ZmIHRvIHRoZQoJCQkJICogbGFuZ3VhZ2UgcHJvY2Vzc29yKQoJCQkJICovCgkJCQlpZiAoIGJJbml0SGFuZGVkT2ZmID09PSBmYWxzZSApIHsKCQkJCQlfZm5Jbml0aWFsaXNlKCBvU2V0dGluZ3MgKTsKCQkJCX0KCQkJfTsKCQkJCgkJCS8qIE11c3QgYmUgZG9uZSBhZnRlciBldmVyeXRoaW5nIHdoaWNoIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBzdGF0ZSBzYXZpbmchICovCgkJCWlmICggb0luaXQuYlN0YXRlU2F2ZSApCgkJCXsKCQkJCWZlYXR1cmVzLmJTdGF0ZVNhdmUgPSB0cnVlOwoJCQkJX2ZuQ2FsbGJhY2tSZWcoIG9TZXR0aW5ncywgJ2FvRHJhd0NhbGxiYWNrJywgX2ZuU2F2ZVN0YXRlLCAnc3RhdGVfc2F2ZScgKTsKCQkJCV9mbkxvYWRTdGF0ZSggb1NldHRpbmdzLCBvSW5pdCwgbG9hZGVkSW5pdCApOwoJCQl9CgkJCWVsc2UgewoJCQkJbG9hZGVkSW5pdCgpOwoJCQl9CgkJCQoJCX0gKTsKCQlfdGhhdCA9IG51bGw7CgkJcmV0dXJuIHRoaXM7Cgl9OwoKCQoJLyoKCSAqIEl0IGlzIHVzZWZ1bCB0byBoYXZlIHZhcmlhYmxlcyB3aGljaCBhcmUgc2NvcGVkIGxvY2FsbHkgc28gb25seSB0aGUKCSAqIERhdGFUYWJsZXMgZnVuY3Rpb25zIGNhbiBhY2Nlc3MgdGhlbSBhbmQgdGhleSBkb24ndCBsZWFrIGludG8gZ2xvYmFsIHNwYWNlLgoJICogQXQgdGhlIHNhbWUgdGltZSB0aGVzZSBmdW5jdGlvbnMgYXJlIG9mdGVuIHVzZWZ1bCBvdmVyIG11bHRpcGxlIGZpbGVzIGluIHRoZQoJICogY29yZSBhbmQgQVBJLCBzbyB3ZSBsaXN0LCBvciBhdCBsZWFzdCBkb2N1bWVudCwgYWxsIHZhcmlhYmxlcyB3aGljaCBhcmUgdXNlZAoJICogYnkgRGF0YVRhYmxlcyBhcyBwcml2YXRlIHZhcmlhYmxlcyBoZXJlLiBUaGlzIGFsc28gZW5zdXJlcyB0aGF0IHRoZXJlIGlzIG5vCgkgKiBjbGFzaGluZyBvZiB2YXJpYWJsZSBuYW1lcyBhbmQgdGhhdCB0aGV5IGNhbiBlYXNpbHkgcmVmZXJlbmNlZCBmb3IgcmV1c2UuCgkgKi8KCQoJCgkvLyBEZWZpbmVkIGVsc2Ugd2hlcmUKCS8vICBfc2VsZWN0b3JfcnVuCgkvLyAgX3NlbGVjdG9yX29wdHMKCS8vICBfc2VsZWN0b3JfZmlyc3QKCS8vICBfc2VsZWN0b3Jfcm93X2luZGV4ZXMKCQoJdmFyIF9leHQ7IC8vIERhdGFUYWJsZS5leHQKCXZhciBfQXBpOyAvLyBEYXRhVGFibGUuQXBpCgl2YXIgX2FwaV9yZWdpc3RlcjsgLy8gRGF0YVRhYmxlLkFwaS5yZWdpc3RlcgoJdmFyIF9hcGlfcmVnaXN0ZXJQbHVyYWw7IC8vIERhdGFUYWJsZS5BcGkucmVnaXN0ZXJQbHVyYWwKCQoJdmFyIF9yZV9kaWMgPSB7fTsKCXZhciBfcmVfbmV3X2xpbmVzID0gL1tcclxuXHUyMDI4XS9nOwoJdmFyIF9yZV9odG1sID0gLzwuKj8+L2c7CgkKCS8vIFRoaXMgaXMgbm90IHN0cmljdCBJU084NjAxIC0gRGF0ZS5wYXJzZSgpIGlzIHF1aXRlIGxheCwgYWx0aG91Z2gKCS8vIGltcGxlbWVudGF0aW9ucyBkaWZmZXIgYmV0d2VlbiBicm93c2Vycy4KCXZhciBfcmVfZGF0ZSA9IC9eXGR7Miw0fVtcLlwvXC1dXGR7MSwyfVtcLlwvXC1dXGR7MSwyfShbVCBdezF9XGR7MSwyfVs6XC5dXGR7Mn0oW1wuOl1cZHsyfSk/KT8kLzsKCQoJLy8gRXNjYXBlIHJlZ3VsYXIgZXhwcmVzc2lvbiBzcGVjaWFsIGNoYXJhY3RlcnMKCXZhciBfcmVfZXNjYXBlX3JlZ2V4ID0gbmV3IFJlZ0V4cCggJyhcXCcgKyBbICcvJywgJy4nLCAnKicsICcrJywgJz8nLCAnfCcsICcoJywgJyknLCAnWycsICddJywgJ3snLCAnfScsICdcXCcsICckJywgJ14nLCAnLScgXS5qb2luKCd8XFwnKSArICcpJywgJ2cnICk7CgkKCS8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRm9yZWlnbl9leGNoYW5nZV9tYXJrZXQKCS8vIC0gXHUyMEJEIC0gUnVzc2lhbiBydWJsZS4KCS8vIC0gXHUyMGE5IC0gU291dGggS29yZWFuIFdvbgoJLy8gLSBcdTIwQkEgLSBUdXJraXNoIExpcmEKCS8vIC0gXHUyMEI5IC0gSW5kaWFuIFJ1cGVlCgkvLyAtIFIgLSBCcmF6aWwgKFIkKSBhbmQgU291dGggQWZyaWNhCgkvLyAtIGZyIC0gU3dpc3MgRnJhbmMKCS8vIC0ga3IgLSBTd2VkaXNoIGtyb25hLCBOb3J3ZWdpYW4ga3JvbmUgYW5kIERhbmlzaCBrcm9uZQoJLy8gLSBcdTIwMDkgaXMgdGhpbiBzcGFjZSBhbmQgXHUyMDJGIGlzIG5hcnJvdyBuby1icmVhayBzcGFjZSwgYm90aCB1c2VkIGluIG1hbnkKCS8vIC0gyYMgLSBCaXRjb2luCgkvLyAtIM6eIC0gRXRoZXJldW0KCS8vICAgc3RhbmRhcmRzIGFzIHRob3VzYW5kcyBzZXBhcmF0b3JzLgoJdmFyIF9yZV9mb3JtYXR0ZWRfbnVtZXJpYyA9IC9bJywkwqPigqzCpSVcdTIwMDlcdTIwMkZcdTIwQkRcdTIwYTlcdTIwQkFyZmvJg86eXS9naTsKCQoJCgl2YXIgX2VtcHR5ID0gZnVuY3Rpb24gKCBkICkgewoJCXJldHVybiAhZCB8fCBkID09PSB0cnVlIHx8IGQgPT09ICctJyA/IHRydWUgOiBmYWxzZTsKCX07CgkKCQoJdmFyIF9pbnRWYWwgPSBmdW5jdGlvbiAoIHMgKSB7CgkJdmFyIGludGVnZXIgPSBwYXJzZUludCggcywgMTAgKTsKCQlyZXR1cm4gIWlzTmFOKGludGVnZXIpICYmIGlzRmluaXRlKHMpID8gaW50ZWdlciA6IG51bGw7Cgl9OwoJCgkvLyBDb252ZXJ0IGZyb20gYSBmb3JtYXR0ZWQgbnVtYmVyIHdpdGggY2hhcmFjdGVycyBvdGhlciB0aGFuIGAuYCBhcyB0aGUKCS8vIGRlY2ltYWwgcGxhY2UsIHRvIGEgSmF2YXNjcmlwdCBudW1iZXIKCXZhciBfbnVtVG9EZWNpbWFsID0gZnVuY3Rpb24gKCBudW0sIGRlY2ltYWxQb2ludCApIHsKCQkvLyBDYWNoZSBjcmVhdGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIHNwZWVkIGFzIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9mdGVuCgkJaWYgKCAhIF9yZV9kaWNbIGRlY2ltYWxQb2ludCBdICkgewoJCQlfcmVfZGljWyBkZWNpbWFsUG9pbnQgXSA9IG5ldyBSZWdFeHAoIF9mbkVzY2FwZVJlZ2V4KCBkZWNpbWFsUG9pbnQgKSwgJ2cnICk7CgkJfQoJCXJldHVybiB0eXBlb2YgbnVtID09PSAnc3RyaW5nJyAmJiBkZWNpbWFsUG9pbnQgIT09ICcuJyA/CgkJCW51bS5yZXBsYWNlKCAvXC4vZywgJycgKS5yZXBsYWNlKCBfcmVfZGljWyBkZWNpbWFsUG9pbnQgXSwgJy4nICkgOgoJCQludW07Cgl9OwoJCgkKCXZhciBfaXNOdW1iZXIgPSBmdW5jdGlvbiAoIGQsIGRlY2ltYWxQb2ludCwgZm9ybWF0dGVkICkgewoJCXZhciBzdHJUeXBlID0gdHlwZW9mIGQgPT09ICdzdHJpbmcnOwoJCgkJLy8gSWYgZW1wdHkgcmV0dXJuIGltbWVkaWF0ZWx5IHNvIHRoZXJlIG11c3QgYmUgYSBudW1iZXIgaWYgaXQgaXMgYQoJCS8vIGZvcm1hdHRlZCBzdHJpbmcgKHRoaXMgc3RvcHMgdGhlIHN0cmluZyAiayIsIG9yICJrciIsIGV0YyBiZWluZyBkZXRlY3RlZAoJCS8vIGFzIGEgZm9ybWF0dGVkIG51bWJlciBmb3IgY3VycmVuY3kKCQlpZiAoIF9lbXB0eSggZCApICkgewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkKCQlpZiAoIGRlY2ltYWxQb2ludCAmJiBzdHJUeXBlICkgewoJCQlkID0gX251bVRvRGVjaW1hbCggZCwgZGVjaW1hbFBvaW50ICk7CgkJfQoJCgkJaWYgKCBmb3JtYXR0ZWQgJiYgc3RyVHlwZSApIHsKCQkJZCA9IGQucmVwbGFjZSggX3JlX2Zvcm1hdHRlZF9udW1lcmljLCAnJyApOwoJCX0KCQoJCXJldHVybiAhaXNOYU4oIHBhcnNlRmxvYXQoZCkgKSAmJiBpc0Zpbml0ZSggZCApOwoJfTsKCQoJCgkvLyBBIHN0cmluZyB3aXRob3V0IEhUTUwgaW4gaXQgY2FuIGJlIGNvbnNpZGVyZWQgdG8gYmUgSFRNTCBzdGlsbAoJdmFyIF9pc0h0bWwgPSBmdW5jdGlvbiAoIGQgKSB7CgkJcmV0dXJuIF9lbXB0eSggZCApIHx8IHR5cGVvZiBkID09PSAnc3RyaW5nJzsKCX07CgkKCQoJdmFyIF9odG1sTnVtZXJpYyA9IGZ1bmN0aW9uICggZCwgZGVjaW1hbFBvaW50LCBmb3JtYXR0ZWQgKSB7CgkJaWYgKCBfZW1wdHkoIGQgKSApIHsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCgkJdmFyIGh0bWwgPSBfaXNIdG1sKCBkICk7CgkJcmV0dXJuICEgaHRtbCA/CgkJCW51bGwgOgoJCQlfaXNOdW1iZXIoIF9zdHJpcEh0bWwoIGQgKSwgZGVjaW1hbFBvaW50LCBmb3JtYXR0ZWQgKSA/CgkJCQl0cnVlIDoKCQkJCW51bGw7Cgl9OwoJCgkKCXZhciBfcGx1Y2sgPSBmdW5jdGlvbiAoIGEsIHByb3AsIHByb3AyICkgewoJCXZhciBvdXQgPSBbXTsKCQl2YXIgaT0wLCBpZW49YS5sZW5ndGg7CgkKCQkvLyBDb3VsZCBoYXZlIHRoZSB0ZXN0IGluIHRoZSBsb29wIGZvciBzbGlnaHRseSBzbWFsbGVyIGNvZGUsIGJ1dCBzcGVlZAoJCS8vIGlzIGVzc2VudGlhbCBoZXJlCgkJaWYgKCBwcm9wMiAhPT0gdW5kZWZpbmVkICkgewoJCQlmb3IgKCA7IGk8aWVuIDsgaSsrICkgewoJCQkJaWYgKCBhW2ldICYmIGFbaV1bIHByb3AgXSApIHsKCQkJCQlvdXQucHVzaCggYVtpXVsgcHJvcCBdWyBwcm9wMiBdICk7CgkJCQl9CgkJCX0KCQl9CgkJZWxzZSB7CgkJCWZvciAoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQlpZiAoIGFbaV0gKSB7CgkJCQkJb3V0LnB1c2goIGFbaV1bIHByb3AgXSApOwoJCQkJfQoJCQl9CgkJfQoJCgkJcmV0dXJuIG91dDsKCX07CgkKCQoJLy8gQmFzaWNhbGx5IHRoZSBzYW1lIGFzIF9wbHVjaywgYnV0IHJhdGhlciB0aGFuIGxvb3Bpbmcgb3ZlciBgYWAgd2UgdXNlIGBvcmRlcmAKCS8vIGFzIHRoZSBpbmRleGVzIHRvIHBpY2sgZnJvbSBgYWAKCXZhciBfcGx1Y2tfb3JkZXIgPSBmdW5jdGlvbiAoIGEsIG9yZGVyLCBwcm9wLCBwcm9wMiApCgl7CgkJdmFyIG91dCA9IFtdOwoJCXZhciBpPTAsIGllbj1vcmRlci5sZW5ndGg7CgkKCQkvLyBDb3VsZCBoYXZlIHRoZSB0ZXN0IGluIHRoZSBsb29wIGZvciBzbGlnaHRseSBzbWFsbGVyIGNvZGUsIGJ1dCBzcGVlZAoJCS8vIGlzIGVzc2VudGlhbCBoZXJlCgkJaWYgKCBwcm9wMiAhPT0gdW5kZWZpbmVkICkgewoJCQlmb3IgKCA7IGk8aWVuIDsgaSsrICkgewoJCQkJaWYgKCBhWyBvcmRlcltpXSBdWyBwcm9wIF0gKSB7CgkJCQkJb3V0LnB1c2goIGFbIG9yZGVyW2ldIF1bIHByb3AgXVsgcHJvcDIgXSApOwoJCQkJfQoJCQl9CgkJfQoJCWVsc2UgewoJCQlmb3IgKCA7IGk8aWVuIDsgaSsrICkgewoJCQkJb3V0LnB1c2goIGFbIG9yZGVyW2ldIF1bIHByb3AgXSApOwoJCQl9CgkJfQoJCgkJcmV0dXJuIG91dDsKCX07CgkKCQoJdmFyIF9yYW5nZSA9IGZ1bmN0aW9uICggbGVuLCBzdGFydCApCgl7CgkJdmFyIG91dCA9IFtdOwoJCXZhciBlbmQ7CgkKCQlpZiAoIHN0YXJ0ID09PSB1bmRlZmluZWQgKSB7CgkJCXN0YXJ0ID0gMDsKCQkJZW5kID0gbGVuOwoJCX0KCQllbHNlIHsKCQkJZW5kID0gc3RhcnQ7CgkJCXN0YXJ0ID0gbGVuOwoJCX0KCQoJCWZvciAoIHZhciBpPXN0YXJ0IDsgaTxlbmQgOyBpKysgKSB7CgkJCW91dC5wdXNoKCBpICk7CgkJfQoJCgkJcmV0dXJuIG91dDsKCX07CgkKCQoJdmFyIF9yZW1vdmVFbXB0eSA9IGZ1bmN0aW9uICggYSApCgl7CgkJdmFyIG91dCA9IFtdOwoJCgkJZm9yICggdmFyIGk9MCwgaWVuPWEubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCWlmICggYVtpXSApIHsgLy8gY2FyZWZ1bCAtIHdpbGwgcmVtb3ZlIGFsbCBmYWxzeSB2YWx1ZXMhCgkJCQlvdXQucHVzaCggYVtpXSApOwoJCQl9CgkJfQoJCgkJcmV0dXJuIG91dDsKCX07CgkKCQoJdmFyIF9zdHJpcEh0bWwgPSBmdW5jdGlvbiAoIGQgKSB7CgkJcmV0dXJuIGQucmVwbGFjZSggX3JlX2h0bWwsICcnICk7Cgl9OwoJCgkKCS8qKgoJICogRGV0ZXJtaW5lIGlmIGFsbCB2YWx1ZXMgaW4gdGhlIGFycmF5IGFyZSB1bmlxdWUuIFRoaXMgbWVhbnMgd2UgY2FuIHNob3J0CgkgKiBjdXQgdGhlIF91bmlxdWUgbWV0aG9kIGF0IHRoZSBjb3N0IG9mIGEgc2luZ2xlIGxvb3AuIEEgc29ydGVkIGFycmF5IGlzIHVzZWQKCSAqIHRvIGVhc2lseSBjaGVjayB0aGUgdmFsdWVzLgoJICoKCSAqIEBwYXJhbSAge2FycmF5fSBzcmMgU291cmNlIGFycmF5CgkgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGFsbCB1bmlxdWUsIGZhbHNlIG90aGVyd2lzZQoJICogQGlnbm9yZQoJICovCgl2YXIgX2FyZUFsbFVuaXF1ZSA9IGZ1bmN0aW9uICggc3JjICkgewoJCWlmICggc3JjLmxlbmd0aCA8IDIgKSB7CgkJCXJldHVybiB0cnVlOwoJCX0KCQoJCXZhciBzb3J0ZWQgPSBzcmMuc2xpY2UoKS5zb3J0KCk7CgkJdmFyIGxhc3QgPSBzb3J0ZWRbMF07CgkKCQlmb3IgKCB2YXIgaT0xLCBpZW49c29ydGVkLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQlpZiAoIHNvcnRlZFtpXSA9PT0gbGFzdCApIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCgkJCWxhc3QgPSBzb3J0ZWRbaV07CgkJfQoJCgkJcmV0dXJuIHRydWU7Cgl9OwoJCgkKCS8qKgoJICogRmluZCB0aGUgdW5pcXVlIGVsZW1lbnRzIGluIGEgc291cmNlIGFycmF5LgoJICoKCSAqIEBwYXJhbSAge2FycmF5fSBzcmMgU291cmNlIGFycmF5CgkgKiBAcmV0dXJuIHthcnJheX0gQXJyYXkgb2YgdW5pcXVlIGl0ZW1zCgkgKiBAaWdub3JlCgkgKi8KCXZhciBfdW5pcXVlID0gZnVuY3Rpb24gKCBzcmMgKQoJewoJCWlmICggX2FyZUFsbFVuaXF1ZSggc3JjICkgKSB7CgkJCXJldHVybiBzcmMuc2xpY2UoKTsKCQl9CgkKCQkvLyBBIGZhc3RlciB1bmlxdWUgbWV0aG9kIGlzIHRvIHVzZSBvYmplY3Qga2V5cyB0byBpZGVudGlmeSB1c2VkIHZhbHVlcywKCQkvLyBidXQgdGhpcyBkb2Vzbid0IHdvcmsgd2l0aCBhcnJheXMgb3Igb2JqZWN0cywgd2hpY2ggd2UgbXVzdCBhbHNvCgkJLy8gY29uc2lkZXIuIFNlZSBqc3BlcmYuY29tL2NvbXBhcmUtYXJyYXktdW5pcXVlLXZlcnNpb25zLzQgZm9yIG1vcmUKCQkvLyBpbmZvcm1hdGlvbi4KCQl2YXIKCQkJb3V0ID0gW10sCgkJCXZhbCwKCQkJaSwgaWVuPXNyYy5sZW5ndGgsCgkJCWosIGs9MDsKCQoJCWFnYWluOiBmb3IgKCBpPTAgOyBpPGllbiA7IGkrKyApIHsKCQkJdmFsID0gc3JjW2ldOwoJCgkJCWZvciAoIGo9MCA7IGo8ayA7IGorKyApIHsKCQkJCWlmICggb3V0W2pdID09PSB2YWwgKSB7CgkJCQkJY29udGludWUgYWdhaW47CgkJCQl9CgkJCX0KCQoJCQlvdXQucHVzaCggdmFsICk7CgkJCWsrKzsKCQl9CgkKCQlyZXR1cm4gb3V0OwoJfTsKCQoJCgkvKioKCSAqIERhdGFUYWJsZXMgdXRpbGl0eSBtZXRob2RzCgkgKiAKCSAqIFRoaXMgbmFtZXNwYWNlIHByb3ZpZGVzIGhlbHBlciBtZXRob2RzIHRoYXQgRGF0YVRhYmxlcyB1c2VzIGludGVybmFsbHkgdG8KCSAqIGNyZWF0ZSBhIERhdGFUYWJsZSwgYnV0IHdoaWNoIGFyZSBub3QgZXhjbHVzaXZlbHkgdXNlZCBvbmx5IGZvciBEYXRhVGFibGVzLgoJICogVGhlc2UgbWV0aG9kcyBjYW4gYmUgdXNlZCBieSBleHRlbnNpb24gYXV0aG9ycyB0byBzYXZlIHRoZSBkdXBsaWNhdGlvbiBvZgoJICogY29kZS4KCSAqCgkgKiAgQG5hbWVzcGFjZQoJICovCglEYXRhVGFibGUudXRpbCA9IHsKCQkvKioKCQkgKiBUaHJvdHRsZSB0aGUgY2FsbHMgdG8gYSBmdW5jdGlvbi4gQXJndW1lbnRzIGFuZCBjb250ZXh0IGFyZSBtYWludGFpbmVkCgkJICogZm9yIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24uCgkJICoKCQkgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBiZSBjYWxsZWQKCQkgKiBAcGFyYW0ge2ludGVnZXJ9IGZyZXEgQ2FsbCBmcmVxdWVuY3kgaW4gbVMKCQkgKiBAcmV0dXJuIHtmdW5jdGlvbn0gV3JhcHBlZCBmdW5jdGlvbgoJCSAqLwoJCXRocm90dGxlOiBmdW5jdGlvbiAoIGZuLCBmcmVxICkgewoJCQl2YXIKCQkJCWZyZXF1ZW5jeSA9IGZyZXEgIT09IHVuZGVmaW5lZCA/IGZyZXEgOiAyMDAsCgkJCQlsYXN0LAoJCQkJdGltZXI7CgkKCQkJcmV0dXJuIGZ1bmN0aW9uICgpIHsKCQkJCXZhcgoJCQkJCXRoYXQgPSB0aGlzLAoJCQkJCW5vdyAgPSArbmV3IERhdGUoKSwKCQkJCQlhcmdzID0gYXJndW1lbnRzOwoJCgkJCQlpZiAoIGxhc3QgJiYgbm93IDwgbGFzdCArIGZyZXF1ZW5jeSApIHsKCQkJCQljbGVhclRpbWVvdXQoIHRpbWVyICk7CgkKCQkJCQl0aW1lciA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHsKCQkJCQkJbGFzdCA9IHVuZGVmaW5lZDsKCQkJCQkJZm4uYXBwbHkoIHRoYXQsIGFyZ3MgKTsKCQkJCQl9LCBmcmVxdWVuY3kgKTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCWxhc3QgPSBub3c7CgkJCQkJZm4uYXBwbHkoIHRoYXQsIGFyZ3MgKTsKCQkJCX0KCQkJfTsKCQl9LAoJCgkKCQkvKioKCQkgKiBFc2NhcGUgYSBzdHJpbmcgc3VjaCB0aGF0IGl0IGNhbiBiZSB1c2VkIGluIGEgcmVndWxhciBleHByZXNzaW9uCgkJICoKCQkgKiAgQHBhcmFtIHtzdHJpbmd9IHZhbCBzdHJpbmcgdG8gZXNjYXBlCgkJICogIEByZXR1cm5zIHtzdHJpbmd9IGVzY2FwZWQgc3RyaW5nCgkJICovCgkJZXNjYXBlUmVnZXg6IGZ1bmN0aW9uICggdmFsICkgewoJCQlyZXR1cm4gdmFsLnJlcGxhY2UoIF9yZV9lc2NhcGVfcmVnZXgsICdcXCQxJyApOwoJCX0KCX07CgkKCQoJCgkvKioKCSAqIENyZWF0ZSBhIG1hcHBpbmcgb2JqZWN0IHRoYXQgYWxsb3dzIGNhbWVsIGNhc2UgcGFyYW1ldGVycyB0byBiZSBsb29rZWQgdXAKCSAqIGZvciB0aGVpciBIdW5nYXJpYW4gY291bnRlcnBhcnRzLiBUaGUgbWFwcGluZyBpcyBzdG9yZWQgaW4gYSBwcml2YXRlCgkgKiBwYXJhbWV0ZXIgY2FsbGVkIGBfaHVuZ2FyaWFuTWFwYCB3aGljaCBjYW4gYmUgYWNjZXNzZWQgb24gdGhlIHNvdXJjZSBvYmplY3QuCgkgKiAgQHBhcmFtIHtvYmplY3R9IG8KCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuSHVuZ2FyaWFuTWFwICggbyApCgl7CgkJdmFyCgkJCWh1bmdhcmlhbiA9ICdhIGFhIGFpIGFvIGFzIGIgZm4gaSBtIG8gcyAnLAoJCQltYXRjaCwKCQkJbmV3S2V5LAoJCQltYXAgPSB7fTsKCQoJCSQuZWFjaCggbywgZnVuY3Rpb24gKGtleSwgdmFsKSB7CgkJCW1hdGNoID0ga2V5Lm1hdGNoKC9eKFteQS1aXSs/KShbQS1aXSkvKTsKCQoJCQlpZiAoIG1hdGNoICYmIGh1bmdhcmlhbi5pbmRleE9mKG1hdGNoWzFdKycgJykgIT09IC0xICkKCQkJewoJCQkJbmV3S2V5ID0ga2V5LnJlcGxhY2UoIG1hdGNoWzBdLCBtYXRjaFsyXS50b0xvd2VyQ2FzZSgpICk7CgkJCQltYXBbIG5ld0tleSBdID0ga2V5OwoJCgkJCQlpZiAoIG1hdGNoWzFdID09PSAnbycgKQoJCQkJewoJCQkJCV9mbkh1bmdhcmlhbk1hcCggb1trZXldICk7CgkJCQl9CgkJCX0KCQl9ICk7CgkKCQlvLl9odW5nYXJpYW5NYXAgPSBtYXA7Cgl9CgkKCQoJLyoqCgkgKiBDb252ZXJ0IGZyb20gY2FtZWwgY2FzZSBwYXJhbWV0ZXJzIHRvIEh1bmdhcmlhbiwgYmFzZWQgb24gYSBIdW5nYXJpYW4gbWFwCgkgKiBjcmVhdGVkIGJ5IF9mbkh1bmdhcmlhbk1hcC4KCSAqICBAcGFyYW0ge29iamVjdH0gc3JjIFRoZSBtb2RlbCBvYmplY3Qgd2hpY2ggaG9sZHMgYWxsIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUKCSAqICAgIG1hcHBlZC4KCSAqICBAcGFyYW0ge29iamVjdH0gdXNlciBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgZnJvbSBjYW1lbCBjYXNlIHRvIEh1bmdhcmlhbi4KCSAqICBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlIFdoZW4gc2V0IHRvIGB0cnVlYCwgcHJvcGVydGllcyB3aGljaCBhbHJlYWR5IGhhdmUgYQoJICogICAgSHVuZ2FyaWFuIHZhbHVlIGluIHRoZSBgdXNlcmAgb2JqZWN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4uIE90aGVyd2lzZSB0aGV5CgkgKiAgICB3b24ndCBiZS4KCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuQ2FtZWxUb0h1bmdhcmlhbiAoIHNyYywgdXNlciwgZm9yY2UgKQoJewoJCWlmICggISBzcmMuX2h1bmdhcmlhbk1hcCApIHsKCQkJX2ZuSHVuZ2FyaWFuTWFwKCBzcmMgKTsKCQl9CgkKCQl2YXIgaHVuZ2FyaWFuS2V5OwoJCgkJJC5lYWNoKCB1c2VyLCBmdW5jdGlvbiAoa2V5LCB2YWwpIHsKCQkJaHVuZ2FyaWFuS2V5ID0gc3JjLl9odW5nYXJpYW5NYXBbIGtleSBdOwoJCgkJCWlmICggaHVuZ2FyaWFuS2V5ICE9PSB1bmRlZmluZWQgJiYgKGZvcmNlIHx8IHVzZXJbaHVuZ2FyaWFuS2V5XSA9PT0gdW5kZWZpbmVkKSApCgkJCXsKCQkJCS8vIEZvciBvYmplY3RzLCB3ZSBuZWVkIHRvIGJ1enogZG93biBpbnRvIHRoZSBvYmplY3QgdG8gY29weSBwYXJhbWV0ZXJzCgkJCQlpZiAoIGh1bmdhcmlhbktleS5jaGFyQXQoMCkgPT09ICdvJyApCgkJCQl7CgkJCQkJLy8gQ29weSB0aGUgY2FtZWxDYXNlIG9wdGlvbnMgb3ZlciB0byB0aGUgaHVuZ2FyaWFuCgkJCQkJaWYgKCAhIHVzZXJbIGh1bmdhcmlhbktleSBdICkgewoJCQkJCQl1c2VyWyBodW5nYXJpYW5LZXkgXSA9IHt9OwoJCQkJCX0KCQkJCQkkLmV4dGVuZCggdHJ1ZSwgdXNlcltodW5nYXJpYW5LZXldLCB1c2VyW2tleV0gKTsKCQoJCQkJCV9mbkNhbWVsVG9IdW5nYXJpYW4oIHNyY1todW5nYXJpYW5LZXldLCB1c2VyW2h1bmdhcmlhbktleV0sIGZvcmNlICk7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQl1c2VyW2h1bmdhcmlhbktleV0gPSB1c2VyWyBrZXkgXTsKCQkJCX0KCQkJfQoJCX0gKTsKCX0KCQoJCgkvKioKCSAqIExhbmd1YWdlIGNvbXBhdGliaWxpdHkgLSB3aGVuIGNlcnRhaW4gb3B0aW9ucyBhcmUgZ2l2ZW4sIGFuZCBvdGhlcnMgYXJlbid0LCB3ZQoJICogbmVlZCB0byBkdXBsaWNhdGUgdGhlIHZhbHVlcyBvdmVyLCBpbiBvcmRlciB0byBwcm92aWRlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CgkgKiB3aXRoIG9sZGVyIGxhbmd1YWdlIGZpbGVzLgoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuTGFuZ3VhZ2VDb21wYXQoIGxhbmcgKQoJewoJCS8vIE5vdGUgdGhlIHVzZSBvZiB0aGUgSHVuZ2FyaWFuIG5vdGF0aW9uIGZvciB0aGUgcGFyYW1ldGVycyBpbiB0aGlzIG1ldGhvZCBhcwoJCS8vIHRoaXMgaXMgY2FsbGVkIGFmdGVyIHRoZSBtYXBwaW5nIG9mIGNhbWVsQ2FzZSB0byBIdW5nYXJpYW4KCQl2YXIgZGVmYXVsdHMgPSBEYXRhVGFibGUuZGVmYXVsdHMub0xhbmd1YWdlOwoJCgkJLy8gRGVmYXVsdCBtYXBwaW5nCgkJdmFyIGRlZmF1bHREZWNpbWFsID0gZGVmYXVsdHMuc0RlY2ltYWw7CgkJaWYgKCBkZWZhdWx0RGVjaW1hbCApIHsKCQkJX2FkZE51bWVyaWNTb3J0KCBkZWZhdWx0RGVjaW1hbCApOwoJCX0KCQoJCWlmICggbGFuZyApIHsKCQkJdmFyIHplcm9SZWNvcmRzID0gbGFuZy5zWmVyb1JlY29yZHM7CgkKCQkJLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgLSBpZiB0aGVyZSBpcyBubyBzRW1wdHlUYWJsZSBnaXZlbiwgdGhlbiB1c2UgdGhlIHNhbWUgYXMKCQkJLy8gc1plcm9SZWNvcmRzIC0gYXNzdW1pbmcgdGhhdCBpcyBnaXZlbi4KCQkJaWYgKCAhIGxhbmcuc0VtcHR5VGFibGUgJiYgemVyb1JlY29yZHMgJiYKCQkJCWRlZmF1bHRzLnNFbXB0eVRhYmxlID09PSAiTm8gZGF0YSBhdmFpbGFibGUgaW4gdGFibGUiICkKCQkJewoJCQkJX2ZuTWFwKCBsYW5nLCBsYW5nLCAnc1plcm9SZWNvcmRzJywgJ3NFbXB0eVRhYmxlJyApOwoJCQl9CgkKCQkJLy8gTGlrZXdpc2Ugd2l0aCBsb2FkaW5nIHJlY29yZHMKCQkJaWYgKCAhIGxhbmcuc0xvYWRpbmdSZWNvcmRzICYmIHplcm9SZWNvcmRzICYmCgkJCQlkZWZhdWx0cy5zTG9hZGluZ1JlY29yZHMgPT09ICJMb2FkaW5nLi4uIiApCgkJCXsKCQkJCV9mbk1hcCggbGFuZywgbGFuZywgJ3NaZXJvUmVjb3JkcycsICdzTG9hZGluZ1JlY29yZHMnICk7CgkJCX0KCQoJCQkvLyBPbGQgcGFyYW1ldGVyIG5hbWUgb2YgdGhlIHRob3VzYW5kcyBzZXBhcmF0b3IgbWFwcGVkIG9udG8gdGhlIG5ldwoJCQlpZiAoIGxhbmcuc0luZm9UaG91c2FuZHMgKSB7CgkJCQlsYW5nLnNUaG91c2FuZHMgPSBsYW5nLnNJbmZvVGhvdXNhbmRzOwoJCQl9CgkKCQkJdmFyIGRlY2ltYWwgPSBsYW5nLnNEZWNpbWFsOwoJCQlpZiAoIGRlY2ltYWwgJiYgZGVmYXVsdERlY2ltYWwgIT09IGRlY2ltYWwgKSB7CgkJCQlfYWRkTnVtZXJpY1NvcnQoIGRlY2ltYWwgKTsKCQkJfQoJCX0KCX0KCQoJCgkvKioKCSAqIE1hcCBvbmUgcGFyYW1ldGVyIG9udG8gYW5vdGhlcgoJICogIEBwYXJhbSB7b2JqZWN0fSBvIE9iamVjdCB0byBtYXAKCSAqICBAcGFyYW0geyp9IGtuZXcgVGhlIG5ldyBwYXJhbWV0ZXIgbmFtZQoJICogIEBwYXJhbSB7Kn0gb2xkIFRoZSBvbGQgcGFyYW1ldGVyIG5hbWUKCSAqLwoJdmFyIF9mbkNvbXBhdE1hcCA9IGZ1bmN0aW9uICggbywga25ldywgb2xkICkgewoJCWlmICggb1sga25ldyBdICE9PSB1bmRlZmluZWQgKSB7CgkJCW9bIG9sZCBdID0gb1sga25ldyBdOwoJCX0KCX07CgkKCQoJLyoqCgkgKiBQcm92aWRlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciB0aGUgbWFpbiBEVCBvcHRpb25zLiBOb3RlIHRoYXQgdGhlIG5ldwoJICogb3B0aW9ucyBhcmUgbWFwcGVkIG9udG8gdGhlIG9sZCBwYXJhbWV0ZXJzLCBzbyB0aGlzIGlzIGFuIGV4dGVybmFsIGludGVyZmFjZQoJICogY2hhbmdlIG9ubHkuCgkgKiAgQHBhcmFtIHtvYmplY3R9IGluaXQgT2JqZWN0IHRvIG1hcAoJICovCglmdW5jdGlvbiBfZm5Db21wYXRPcHRzICggaW5pdCApCgl7CgkJX2ZuQ29tcGF0TWFwKCBpbml0LCAnb3JkZXJpbmcnLCAgICAgICdiU29ydCcgKTsKCQlfZm5Db21wYXRNYXAoIGluaXQsICdvcmRlck11bHRpJywgICAgJ2JTb3J0TXVsdGknICk7CgkJX2ZuQ29tcGF0TWFwKCBpbml0LCAnb3JkZXJDbGFzc2VzJywgICdiU29ydENsYXNzZXMnICk7CgkJX2ZuQ29tcGF0TWFwKCBpbml0LCAnb3JkZXJDZWxsc1RvcCcsICdiU29ydENlbGxzVG9wJyApOwoJCV9mbkNvbXBhdE1hcCggaW5pdCwgJ29yZGVyJywgICAgICAgICAnYWFTb3J0aW5nJyApOwoJCV9mbkNvbXBhdE1hcCggaW5pdCwgJ29yZGVyRml4ZWQnLCAgICAnYWFTb3J0aW5nRml4ZWQnICk7CgkJX2ZuQ29tcGF0TWFwKCBpbml0LCAncGFnaW5nJywgICAgICAgICdiUGFnaW5hdGUnICk7CgkJX2ZuQ29tcGF0TWFwKCBpbml0LCAncGFnaW5nVHlwZScsICAgICdzUGFnaW5hdGlvblR5cGUnICk7CgkJX2ZuQ29tcGF0TWFwKCBpbml0LCAncGFnZUxlbmd0aCcsICAgICdpRGlzcGxheUxlbmd0aCcgKTsKCQlfZm5Db21wYXRNYXAoIGluaXQsICdzZWFyY2hpbmcnLCAgICAgJ2JGaWx0ZXInICk7CgkKCQkvLyBCb29sZWFuIGluaXRpYWxpc2F0aW9uIG9mIHgtc2Nyb2xsaW5nCgkJaWYgKCB0eXBlb2YgaW5pdC5zU2Nyb2xsWCA9PT0gJ2Jvb2xlYW4nICkgewoJCQlpbml0LnNTY3JvbGxYID0gaW5pdC5zU2Nyb2xsWCA/ICcxMDAlJyA6ICcnOwoJCX0KCQlpZiAoIHR5cGVvZiBpbml0LnNjcm9sbFggPT09ICdib29sZWFuJyApIHsKCQkJaW5pdC5zY3JvbGxYID0gaW5pdC5zY3JvbGxYID8gJzEwMCUnIDogJyc7CgkJfQoJCgkJLy8gQ29sdW1uIHNlYXJjaCBvYmplY3RzIGFyZSBpbiBhbiBhcnJheSwgc28gaXQgbmVlZHMgdG8gYmUgY29udmVydGVkCgkJLy8gZWxlbWVudCBieSBlbGVtZW50CgkJdmFyIHNlYXJjaENvbHMgPSBpbml0LmFvU2VhcmNoQ29sczsKCQoJCWlmICggc2VhcmNoQ29scyApIHsKCQkJZm9yICggdmFyIGk9MCwgaWVuPXNlYXJjaENvbHMubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQlpZiAoIHNlYXJjaENvbHNbaV0gKSB7CgkJCQkJX2ZuQ2FtZWxUb0h1bmdhcmlhbiggRGF0YVRhYmxlLm1vZGVscy5vU2VhcmNoLCBzZWFyY2hDb2xzW2ldICk7CgkJCQl9CgkJCX0KCQl9Cgl9CgkKCQoJLyoqCgkgKiBQcm92aWRlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBjb2x1bW4gb3B0aW9ucy4gTm90ZSB0aGF0IHRoZSBuZXcgb3B0aW9ucwoJICogYXJlIG1hcHBlZCBvbnRvIHRoZSBvbGQgcGFyYW1ldGVycywgc28gdGhpcyBpcyBhbiBleHRlcm5hbCBpbnRlcmZhY2UgY2hhbmdlCgkgKiBvbmx5LgoJICogIEBwYXJhbSB7b2JqZWN0fSBpbml0IE9iamVjdCB0byBtYXAKCSAqLwoJZnVuY3Rpb24gX2ZuQ29tcGF0Q29scyAoIGluaXQgKQoJewoJCV9mbkNvbXBhdE1hcCggaW5pdCwgJ29yZGVyYWJsZScsICAgICAnYlNvcnRhYmxlJyApOwoJCV9mbkNvbXBhdE1hcCggaW5pdCwgJ29yZGVyRGF0YScsICAgICAnYURhdGFTb3J0JyApOwoJCV9mbkNvbXBhdE1hcCggaW5pdCwgJ29yZGVyU2VxdWVuY2UnLCAnYXNTb3J0aW5nJyApOwoJCV9mbkNvbXBhdE1hcCggaW5pdCwgJ29yZGVyRGF0YVR5cGUnLCAnc29ydERhdGFUeXBlJyApOwoJCgkJLy8gb3JkZXJEYXRhIGNhbiBiZSBnaXZlbiBhcyBhbiBpbnRlZ2VyCgkJdmFyIGRhdGFTb3J0ID0gaW5pdC5hRGF0YVNvcnQ7CgkJaWYgKCB0eXBlb2YgZGF0YVNvcnQgPT09ICdudW1iZXInICYmICEgJC5pc0FycmF5KCBkYXRhU29ydCApICkgewoJCQlpbml0LmFEYXRhU29ydCA9IFsgZGF0YVNvcnQgXTsKCQl9Cgl9CgkKCQoJLyoqCgkgKiBCcm93c2VyIGZlYXR1cmUgZGV0ZWN0aW9uIGZvciBjYXBhYmlsaXRpZXMsIHF1aXJrcwoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5Ccm93c2VyRGV0ZWN0KCBzZXR0aW5ncyApCgl7CgkJLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyB0aGlzIGV2ZXJ5IHRpbWUgRGF0YVRhYmxlcyBpcyBjb25zdHJ1Y3RlZCwgdGhlIHZhbHVlcwoJCS8vIGNhbGN1bGF0ZWQgYXJlIHNwZWNpZmljIHRvIHRoZSBicm93c2VyIGFuZCBPUyBjb25maWd1cmF0aW9uIHdoaWNoIHdlCgkJLy8gZG9uJ3QgZXhwZWN0IHRvIGNoYW5nZSBiZXR3ZWVuIGluaXRpYWxpc2F0aW9ucwoJCWlmICggISBEYXRhVGFibGUuX19icm93c2VyICkgewoJCQl2YXIgYnJvd3NlciA9IHt9OwoJCQlEYXRhVGFibGUuX19icm93c2VyID0gYnJvd3NlcjsKCQoJCQkvLyBTY3JvbGxpbmcgZmVhdHVyZSAvIHF1aXJrcyBkZXRlY3Rpb24KCQkJdmFyIG4gPSAkKCc8ZGl2Lz4nKQoJCQkJLmNzcyggewoJCQkJCXBvc2l0aW9uOiAnZml4ZWQnLAoJCQkJCXRvcDogMCwKCQkJCQlsZWZ0OiAkKHdpbmRvdykuc2Nyb2xsTGVmdCgpKi0xLCAvLyBhbGxvdyBmb3Igc2Nyb2xsaW5nCgkJCQkJaGVpZ2h0OiAxLAoJCQkJCXdpZHRoOiAxLAoJCQkJCW92ZXJmbG93OiAnaGlkZGVuJwoJCQkJfSApCgkJCQkuYXBwZW5kKAoJCQkJCSQoJzxkaXYvPicpCgkJCQkJCS5jc3MoIHsKCQkJCQkJCXBvc2l0aW9uOiAnYWJzb2x1dGUnLAoJCQkJCQkJdG9wOiAxLAoJCQkJCQkJbGVmdDogMSwKCQkJCQkJCXdpZHRoOiAxMDAsCgkJCQkJCQlvdmVyZmxvdzogJ3Njcm9sbCcKCQkJCQkJfSApCgkJCQkJCS5hcHBlbmQoCgkJCQkJCQkkKCc8ZGl2Lz4nKQoJCQkJCQkJCS5jc3MoIHsKCQkJCQkJCQkJd2lkdGg6ICcxMDAlJywKCQkJCQkJCQkJaGVpZ2h0OiAxMAoJCQkJCQkJCX0gKQoJCQkJCQkpCgkJCQkpCgkJCQkuYXBwZW5kVG8oICdib2R5JyApOwoJCgkJCXZhciBvdXRlciA9IG4uY2hpbGRyZW4oKTsKCQkJdmFyIGlubmVyID0gb3V0ZXIuY2hpbGRyZW4oKTsKCQoJCQkvLyBOdW1iZXJzIGJlbG93LCBpbiBvcmRlciwgYXJlOgoJCQkvLyBpbm5lci5vZmZzZXRXaWR0aCwgaW5uZXIuY2xpZW50V2lkdGgsIG91dGVyLm9mZnNldFdpZHRoLCBvdXRlci5jbGllbnRXaWR0aAoJCQkvLwoJCQkvLyBJRTYgWFA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwIDEwMCAxMDAgIDgzCgkJCS8vIElFNyBWaXN0YTogICAgICAgICAgICAgICAgICAgICAgICAxMDAgMTAwIDEwMCAgODMKCQkJLy8gSUUgOCsgV2luZG93czogICAgICAgICAgICAgICAgICAgICA4MyAgODMgMTAwICA4MwoJCQkvLyBFdmVyZ3JlZW4gV2luZG93czogICAgICAgICAgICAgICAgIDgzICA4MyAxMDAgIDgzCgkJCS8vIEV2ZXJncmVlbiBNYWMgd2l0aCBzY3JvbGxiYXJzOiAgICAgODUgIDg1IDEwMCAgODUKCQkJLy8gRXZlcmdyZWVuIE1hYyB3aXRob3V0IHNjcm9sbGJhcnM6IDEwMCAxMDAgMTAwIDEwMAoJCgkJCS8vIEdldCBzY3JvbGxiYXIgd2lkdGgKCQkJYnJvd3Nlci5iYXJXaWR0aCA9IG91dGVyWzBdLm9mZnNldFdpZHRoIC0gb3V0ZXJbMF0uY2xpZW50V2lkdGg7CgkKCQkJLy8gSUU2Lzcgd2lsbCBvdmVyc2l6ZSBhIHdpZHRoIDEwMCUgZWxlbWVudCBpbnNpZGUgYSBzY3JvbGxpbmcgZWxlbWVudCwgdG8KCQkJLy8gaW5jbHVkZSB0aGUgd2lkdGggb2YgdGhlIHNjcm9sbGJhciwgd2hpbGUgb3RoZXIgYnJvd3NlcnMgZW5zdXJlIHRoZSBpbm5lcgoJCQkvLyBlbGVtZW50IGlzIGNvbnRhaW5lZCB3aXRob3V0IGZvcmNpbmcgc2Nyb2xsaW5nCgkJCWJyb3dzZXIuYlNjcm9sbE92ZXJzaXplID0gaW5uZXJbMF0ub2Zmc2V0V2lkdGggPT09IDEwMCAmJiBvdXRlclswXS5jbGllbnRXaWR0aCAhPT0gMTAwOwoJCgkJCS8vIEluIHJ0bCB0ZXh0IGxheW91dCwgc29tZSBicm93c2VycyAobW9zdCwgYnV0IG5vdCBhbGwpIHdpbGwgcGxhY2UgdGhlCgkJCS8vIHNjcm9sbGJhciBvbiB0aGUgbGVmdCwgcmF0aGVyIHRoYW4gdGhlIHJpZ2h0LgoJCQlicm93c2VyLmJTY3JvbGxiYXJMZWZ0ID0gTWF0aC5yb3VuZCggaW5uZXIub2Zmc2V0KCkubGVmdCApICE9PSAxOwoJCgkJCS8vIElFOC0gZG9uJ3QgcHJvdmlkZSBoZWlnaHQgYW5kIHdpZHRoIGZvciBnZXRCb3VuZGluZ0NsaWVudFJlY3QKCQkJYnJvd3Nlci5iQm91bmRpbmcgPSBuWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoID8gdHJ1ZSA6IGZhbHNlOwoJCgkJCW4ucmVtb3ZlKCk7CgkJfQoJCgkJJC5leHRlbmQoIHNldHRpbmdzLm9Ccm93c2VyLCBEYXRhVGFibGUuX19icm93c2VyICk7CgkJc2V0dGluZ3Mub1Njcm9sbC5pQmFyV2lkdGggPSBEYXRhVGFibGUuX19icm93c2VyLmJhcldpZHRoOwoJfQoJCgkKCS8qKgoJICogQXJyYXkucHJvdG90eXBlIHJlZHVjZVtSaWdodF0gbWV0aG9kLCB1c2VkIGZvciBicm93c2VycyB3aGljaCBkb24ndCBzdXBwb3J0CgkgKiBKUyAxLjYuIERvbmUgdGhpcyB3YXkgdG8gcmVkdWNlIGNvZGUgc2l6ZSwgc2luY2Ugd2UgaXRlcmF0ZSBlaXRoZXIgd2F5CgkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mblJlZHVjZSAoIHRoYXQsIGZuLCBpbml0LCBzdGFydCwgZW5kLCBpbmMgKQoJewoJCXZhcgoJCQlpID0gc3RhcnQsCgkJCXZhbHVlLAoJCQlpc1NldCA9IGZhbHNlOwoJCgkJaWYgKCBpbml0ICE9PSB1bmRlZmluZWQgKSB7CgkJCXZhbHVlID0gaW5pdDsKCQkJaXNTZXQgPSB0cnVlOwoJCX0KCQoJCXdoaWxlICggaSAhPT0gZW5kICkgewoJCQlpZiAoICEgdGhhdC5oYXNPd25Qcm9wZXJ0eShpKSApIHsKCQkJCWNvbnRpbnVlOwoJCQl9CgkKCQkJdmFsdWUgPSBpc1NldCA/CgkJCQlmbiggdmFsdWUsIHRoYXRbaV0sIGksIHRoYXQgKSA6CgkJCQl0aGF0W2ldOwoJCgkJCWlzU2V0ID0gdHJ1ZTsKCQkJaSArPSBpbmM7CgkJfQoJCgkJcmV0dXJuIHZhbHVlOwoJfQoJCgkvKioKCSAqIEFkZCBhIGNvbHVtbiB0byB0aGUgbGlzdCB1c2VkIGZvciB0aGUgdGFibGUgd2l0aCBkZWZhdWx0IHZhbHVlcwoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge25vZGV9IG5UaCBUaGUgdGggZWxlbWVudCBmb3IgdGhpcyBjb2x1bW4KCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuQWRkQ29sdW1uKCBvU2V0dGluZ3MsIG5UaCApCgl7CgkJLy8gQWRkIGNvbHVtbiB0byBhb0NvbHVtbnMgYXJyYXkKCQl2YXIgb0RlZmF1bHRzID0gRGF0YVRhYmxlLmRlZmF1bHRzLmNvbHVtbjsKCQl2YXIgaUNvbCA9IG9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoOwoJCXZhciBvQ29sID0gJC5leHRlbmQoIHt9LCBEYXRhVGFibGUubW9kZWxzLm9Db2x1bW4sIG9EZWZhdWx0cywgewoJCQkiblRoIjogblRoID8gblRoIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGgnKSwKCQkJInNUaXRsZSI6ICAgIG9EZWZhdWx0cy5zVGl0bGUgICAgPyBvRGVmYXVsdHMuc1RpdGxlICAgIDogblRoID8gblRoLmlubmVySFRNTCA6ICcnLAoJCQkiYURhdGFTb3J0Ijogb0RlZmF1bHRzLmFEYXRhU29ydCA/IG9EZWZhdWx0cy5hRGF0YVNvcnQgOiBbaUNvbF0sCgkJCSJtRGF0YSI6IG9EZWZhdWx0cy5tRGF0YSA/IG9EZWZhdWx0cy5tRGF0YSA6IGlDb2wsCgkJCWlkeDogaUNvbAoJCX0gKTsKCQlvU2V0dGluZ3MuYW9Db2x1bW5zLnB1c2goIG9Db2wgKTsKCQoJCS8vIEFkZCBzZWFyY2ggb2JqZWN0IGZvciBjb2x1bW4gc3BlY2lmaWMgc2VhcmNoLiBOb3RlIHRoYXQgdGhlIGBzZWFyY2hDb2xzWyBpQ29sIF1gCgkJLy8gcGFzc2VkIGludG8gZXh0ZW5kIGNhbiBiZSB1bmRlZmluZWQuIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIGdpdmUgYSBkZWZhdWx0CgkJLy8gd2l0aCBvbmx5IHNvbWUgb2YgdGhlIHBhcmFtZXRlcnMgZGVmaW5lZCwgYW5kIGFsc28gbm90IGdpdmUgYSBkZWZhdWx0CgkJdmFyIHNlYXJjaENvbHMgPSBvU2V0dGluZ3MuYW9QcmVTZWFyY2hDb2xzOwoJCXNlYXJjaENvbHNbIGlDb2wgXSA9ICQuZXh0ZW5kKCB7fSwgRGF0YVRhYmxlLm1vZGVscy5vU2VhcmNoLCBzZWFyY2hDb2xzWyBpQ29sIF0gKTsKCQoJCS8vIFVzZSB0aGUgZGVmYXVsdCBjb2x1bW4gb3B0aW9ucyBmdW5jdGlvbiB0byBpbml0aWFsaXNlIGNsYXNzZXMgZXRjCgkJX2ZuQ29sdW1uT3B0aW9ucyggb1NldHRpbmdzLCBpQ29sLCAkKG5UaCkuZGF0YSgpICk7Cgl9CgkKCQoJLyoqCgkgKiBBcHBseSBvcHRpb25zIGZvciBhIGNvbHVtbgoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge2ludH0gaUNvbCBjb2x1bW4gaW5kZXggdG8gY29uc2lkZXIKCSAqICBAcGFyYW0ge29iamVjdH0gb09wdGlvbnMgb2JqZWN0IHdpdGggc1R5cGUsIGJWaXNpYmxlIGFuZCBiU2VhcmNoYWJsZSBldGMKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuQ29sdW1uT3B0aW9ucyggb1NldHRpbmdzLCBpQ29sLCBvT3B0aW9ucyApCgl7CgkJdmFyIG9Db2wgPSBvU2V0dGluZ3MuYW9Db2x1bW5zWyBpQ29sIF07CgkJdmFyIG9DbGFzc2VzID0gb1NldHRpbmdzLm9DbGFzc2VzOwoJCXZhciB0aCA9ICQob0NvbC5uVGgpOwoJCgkJLy8gVHJ5IHRvIGdldCB3aWR0aCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBET00uIFdlIGNhbid0IGdldCBpdCBmcm9tIENTUwoJCS8vIGFzIHdlJ2QgbmVlZCB0byBwYXJzZSB0aGUgQ1NTIHN0eWxlc2hlZXQuIGB3aWR0aGAgb3B0aW9uIGNhbiBvdmVycmlkZQoJCWlmICggISBvQ29sLnNXaWR0aE9yaWcgKSB7CgkJCS8vIFdpZHRoIGF0dHJpYnV0ZQoJCQlvQ29sLnNXaWR0aE9yaWcgPSB0aC5hdHRyKCd3aWR0aCcpIHx8IG51bGw7CgkKCQkJLy8gU3R5bGUgYXR0cmlidXRlCgkJCXZhciB0ID0gKHRoLmF0dHIoJ3N0eWxlJykgfHwgJycpLm1hdGNoKC93aWR0aDpccyooXGQrW3B4ZW0lXSspLyk7CgkJCWlmICggdCApIHsKCQkJCW9Db2wuc1dpZHRoT3JpZyA9IHRbMV07CgkJCX0KCQl9CgkKCQkvKiBVc2VyIHNwZWNpZmllZCBjb2x1bW4gb3B0aW9ucyAqLwoJCWlmICggb09wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvT3B0aW9ucyAhPT0gbnVsbCApCgkJewoJCQkvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eQoJCQlfZm5Db21wYXRDb2xzKCBvT3B0aW9ucyApOwoJCgkJCS8vIE1hcCBjYW1lbCBjYXNlIHBhcmFtZXRlcnMgdG8gdGhlaXIgSHVuZ2FyaWFuIGNvdW50ZXJwYXJ0cwoJCQlfZm5DYW1lbFRvSHVuZ2FyaWFuKCBEYXRhVGFibGUuZGVmYXVsdHMuY29sdW1uLCBvT3B0aW9ucywgdHJ1ZSApOwoJCgkJCS8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBtRGF0YVByb3AgKi8KCQkJaWYgKCBvT3B0aW9ucy5tRGF0YVByb3AgIT09IHVuZGVmaW5lZCAmJiAhb09wdGlvbnMubURhdGEgKQoJCQl7CgkJCQlvT3B0aW9ucy5tRGF0YSA9IG9PcHRpb25zLm1EYXRhUHJvcDsKCQkJfQoJCgkJCWlmICggb09wdGlvbnMuc1R5cGUgKQoJCQl7CgkJCQlvQ29sLl9zTWFudWFsVHlwZSA9IG9PcHRpb25zLnNUeXBlOwoJCQl9CgkKCQkJLy8gYGNsYXNzYCBpcyBhIHJlc2VydmVkIHdvcmQgaW4gSmF2YXNjcmlwdCwgc28gd2UgbmVlZCB0byBwcm92aWRlCgkJCS8vIHRoZSBhYmlsaXR5IHRvIHVzZSBhIHZhbGlkIG5hbWUgZm9yIHRoZSBjYW1lbCBjYXNlIGlucHV0CgkJCWlmICggb09wdGlvbnMuY2xhc3NOYW1lICYmICEgb09wdGlvbnMuc0NsYXNzICkKCQkJewoJCQkJb09wdGlvbnMuc0NsYXNzID0gb09wdGlvbnMuY2xhc3NOYW1lOwoJCQl9CgkJCWlmICggb09wdGlvbnMuc0NsYXNzICkgewoJCQkJdGguYWRkQ2xhc3MoIG9PcHRpb25zLnNDbGFzcyApOwoJCQl9CgkKCQkJJC5leHRlbmQoIG9Db2wsIG9PcHRpb25zICk7CgkJCV9mbk1hcCggb0NvbCwgb09wdGlvbnMsICJzV2lkdGgiLCAic1dpZHRoT3JpZyIgKTsKCQoJCQkvKiBpRGF0YVNvcnQgdG8gYmUgYXBwbGllZCAoYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpLCBidXQgYURhdGFTb3J0IHdpbGwgdGFrZQoJCQkgKiBwcmlvcml0eSBpZiBkZWZpbmVkCgkJCSAqLwoJCQlpZiAoIG9PcHRpb25zLmlEYXRhU29ydCAhPT0gdW5kZWZpbmVkICkKCQkJewoJCQkJb0NvbC5hRGF0YVNvcnQgPSBbIG9PcHRpb25zLmlEYXRhU29ydCBdOwoJCQl9CgkJCV9mbk1hcCggb0NvbCwgb09wdGlvbnMsICJhRGF0YVNvcnQiICk7CgkJfQoJCgkJLyogQ2FjaGUgdGhlIGRhdGEgZ2V0IGFuZCBzZXQgZnVuY3Rpb25zIGZvciBzcGVlZCAqLwoJCXZhciBtRGF0YVNyYyA9IG9Db2wubURhdGE7CgkJdmFyIG1EYXRhID0gX2ZuR2V0T2JqZWN0RGF0YUZuKCBtRGF0YVNyYyApOwoJCXZhciBtUmVuZGVyID0gb0NvbC5tUmVuZGVyID8gX2ZuR2V0T2JqZWN0RGF0YUZuKCBvQ29sLm1SZW5kZXIgKSA6IG51bGw7CgkKCQl2YXIgYXR0clRlc3QgPSBmdW5jdGlvbiggc3JjICkgewoJCQlyZXR1cm4gdHlwZW9mIHNyYyA9PT0gJ3N0cmluZycgJiYgc3JjLmluZGV4T2YoJ0AnKSAhPT0gLTE7CgkJfTsKCQlvQ29sLl9iQXR0clNyYyA9ICQuaXNQbGFpbk9iamVjdCggbURhdGFTcmMgKSAmJiAoCgkJCWF0dHJUZXN0KG1EYXRhU3JjLnNvcnQpIHx8IGF0dHJUZXN0KG1EYXRhU3JjLnR5cGUpIHx8IGF0dHJUZXN0KG1EYXRhU3JjLmZpbHRlcikKCQkpOwoJCW9Db2wuX3NldHRlciA9IG51bGw7CgkKCQlvQ29sLmZuR2V0RGF0YSA9IGZ1bmN0aW9uIChyb3dEYXRhLCB0eXBlLCBtZXRhKSB7CgkJCXZhciBpbm5lckRhdGEgPSBtRGF0YSggcm93RGF0YSwgdHlwZSwgdW5kZWZpbmVkLCBtZXRhICk7CgkKCQkJcmV0dXJuIG1SZW5kZXIgJiYgdHlwZSA/CgkJCQltUmVuZGVyKCBpbm5lckRhdGEsIHR5cGUsIHJvd0RhdGEsIG1ldGEgKSA6CgkJCQlpbm5lckRhdGE7CgkJfTsKCQlvQ29sLmZuU2V0RGF0YSA9IGZ1bmN0aW9uICggcm93RGF0YSwgdmFsLCBtZXRhICkgewoJCQlyZXR1cm4gX2ZuU2V0T2JqZWN0RGF0YUZuKCBtRGF0YVNyYyApKCByb3dEYXRhLCB2YWwsIG1ldGEgKTsKCQl9OwoJCgkJLy8gSW5kaWNhdGUgaWYgRGF0YVRhYmxlcyBzaG91bGQgcmVhZCBET00gZGF0YSBhcyBhbiBvYmplY3Qgb3IgYXJyYXkKCQkvLyBVc2VkIGluIF9mbkdldFJvd0VsZW1lbnRzCgkJaWYgKCB0eXBlb2YgbURhdGFTcmMgIT09ICdudW1iZXInICkgewoJCQlvU2V0dGluZ3MuX3Jvd1JlYWRPYmplY3QgPSB0cnVlOwoJCX0KCQoJCS8qIEZlYXR1cmUgc29ydGluZyBvdmVycmlkZXMgY29sdW1uIHNwZWNpZmljIHdoZW4gb2ZmICovCgkJaWYgKCAhb1NldHRpbmdzLm9GZWF0dXJlcy5iU29ydCApCgkJewoJCQlvQ29sLmJTb3J0YWJsZSA9IGZhbHNlOwoJCQl0aC5hZGRDbGFzcyggb0NsYXNzZXMuc1NvcnRhYmxlTm9uZSApOyAvLyBIYXZlIHRvIGFkZCBjbGFzcyBoZXJlIGFzIG9yZGVyIGV2ZW50IGlzbid0IGNhbGxlZAoJCX0KCQoJCS8qIENoZWNrIHRoYXQgdGhlIGNsYXNzIGFzc2lnbm1lbnQgaXMgY29ycmVjdCBmb3Igc29ydGluZyAqLwoJCXZhciBiQXNjID0gJC5pbkFycmF5KCdhc2MnLCBvQ29sLmFzU29ydGluZykgIT09IC0xOwoJCXZhciBiRGVzYyA9ICQuaW5BcnJheSgnZGVzYycsIG9Db2wuYXNTb3J0aW5nKSAhPT0gLTE7CgkJaWYgKCAhb0NvbC5iU29ydGFibGUgfHwgKCFiQXNjICYmICFiRGVzYykgKQoJCXsKCQkJb0NvbC5zU29ydGluZ0NsYXNzID0gb0NsYXNzZXMuc1NvcnRhYmxlTm9uZTsKCQkJb0NvbC5zU29ydGluZ0NsYXNzSlVJID0gIiI7CgkJfQoJCWVsc2UgaWYgKCBiQXNjICYmICFiRGVzYyApCgkJewoJCQlvQ29sLnNTb3J0aW5nQ2xhc3MgPSBvQ2xhc3Nlcy5zU29ydGFibGVBc2M7CgkJCW9Db2wuc1NvcnRpbmdDbGFzc0pVSSA9IG9DbGFzc2VzLnNTb3J0SlVJQXNjQWxsb3dlZDsKCQl9CgkJZWxzZSBpZiAoICFiQXNjICYmIGJEZXNjICkKCQl7CgkJCW9Db2wuc1NvcnRpbmdDbGFzcyA9IG9DbGFzc2VzLnNTb3J0YWJsZURlc2M7CgkJCW9Db2wuc1NvcnRpbmdDbGFzc0pVSSA9IG9DbGFzc2VzLnNTb3J0SlVJRGVzY0FsbG93ZWQ7CgkJfQoJCWVsc2UKCQl7CgkJCW9Db2wuc1NvcnRpbmdDbGFzcyA9IG9DbGFzc2VzLnNTb3J0YWJsZTsKCQkJb0NvbC5zU29ydGluZ0NsYXNzSlVJID0gb0NsYXNzZXMuc1NvcnRKVUk7CgkJfQoJfQoJCgkKCS8qKgoJICogQWRqdXN0IHRoZSB0YWJsZSBjb2x1bW4gd2lkdGhzIGZvciBuZXcgZGF0YS4gTm90ZTogeW91IHdvdWxkIHByb2JhYmx5IHdhbnQgdG8KCSAqIGRvIGEgcmVkcmF3IGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiEKCSAqICBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuQWRqdXN0Q29sdW1uU2l6aW5nICggc2V0dGluZ3MgKQoJewoJCS8qIE5vdCBpbnRlcmVzdGVkIGluIGRvaW5nIGNvbHVtbiB3aWR0aCBjYWxjdWxhdGlvbiBpZiBhdXRvLXdpZHRoIGlzIGRpc2FibGVkICovCgkJaWYgKCBzZXR0aW5ncy5vRmVhdHVyZXMuYkF1dG9XaWR0aCAhPT0gZmFsc2UgKQoJCXsKCQkJdmFyIGNvbHVtbnMgPSBzZXR0aW5ncy5hb0NvbHVtbnM7CgkKCQkJX2ZuQ2FsY3VsYXRlQ29sdW1uV2lkdGhzKCBzZXR0aW5ncyApOwoJCQlmb3IgKCB2YXIgaT0wICwgaUxlbj1jb2x1bW5zLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCWNvbHVtbnNbaV0ublRoLnN0eWxlLndpZHRoID0gY29sdW1uc1tpXS5zV2lkdGg7CgkJCX0KCQl9CgkKCQl2YXIgc2Nyb2xsID0gc2V0dGluZ3Mub1Njcm9sbDsKCQlpZiAoIHNjcm9sbC5zWSAhPT0gJycgfHwgc2Nyb2xsLnNYICE9PSAnJykKCQl7CgkJCV9mblNjcm9sbERyYXcoIHNldHRpbmdzICk7CgkJfQoJCgkJX2ZuQ2FsbGJhY2tGaXJlKCBzZXR0aW5ncywgbnVsbCwgJ2NvbHVtbi1zaXppbmcnLCBbc2V0dGluZ3NdICk7Cgl9CgkKCQoJLyoqCgkgKiBDb3ZlcnQgdGhlIGluZGV4IG9mIGEgdmlzaWJsZSBjb2x1bW4gdG8gdGhlIGluZGV4IGluIHRoZSBkYXRhIGFycmF5ICh0YWtlIGFjY291bnQKCSAqIG9mIGhpZGRlbiBjb2x1bW5zKQoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge2ludH0gaU1hdGNoIFZpc2libGUgY29sdW1uIGluZGV4IHRvIGxvb2t1cAoJICogIEByZXR1cm5zIHtpbnR9IGkgdGhlIGRhdGEgaW5kZXgKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuVmlzaWJsZVRvQ29sdW1uSW5kZXgoIG9TZXR0aW5ncywgaU1hdGNoICkKCXsKCQl2YXIgYWlWaXMgPSBfZm5HZXRDb2x1bW5zKCBvU2V0dGluZ3MsICdiVmlzaWJsZScgKTsKCQoJCXJldHVybiB0eXBlb2YgYWlWaXNbaU1hdGNoXSA9PT0gJ251bWJlcicgPwoJCQlhaVZpc1tpTWF0Y2hdIDoKCQkJbnVsbDsKCX0KCQoJCgkvKioKCSAqIENvdmVydCB0aGUgaW5kZXggb2YgYW4gaW5kZXggaW4gdGhlIGRhdGEgYXJyYXkgYW5kIGNvbnZlcnQgaXQgdG8gdGhlIHZpc2libGUKCSAqICAgY29sdW1uIGluZGV4ICh0YWtlIGFjY291bnQgb2YgaGlkZGVuIGNvbHVtbnMpCgkgKiAgQHBhcmFtIHtpbnR9IGlNYXRjaCBDb2x1bW4gaW5kZXggdG8gbG9va3VwCgkgKiAgQHBhcmFtIHtvYmplY3R9IG9TZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEByZXR1cm5zIHtpbnR9IGkgdGhlIGRhdGEgaW5kZXgKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuQ29sdW1uSW5kZXhUb1Zpc2libGUoIG9TZXR0aW5ncywgaU1hdGNoICkKCXsKCQl2YXIgYWlWaXMgPSBfZm5HZXRDb2x1bW5zKCBvU2V0dGluZ3MsICdiVmlzaWJsZScgKTsKCQl2YXIgaVBvcyA9ICQuaW5BcnJheSggaU1hdGNoLCBhaVZpcyApOwoJCgkJcmV0dXJuIGlQb3MgIT09IC0xID8gaVBvcyA6IG51bGw7Cgl9CgkKCQoJLyoqCgkgKiBHZXQgdGhlIG51bWJlciBvZiB2aXNpYmxlIGNvbHVtbnMKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHJldHVybnMge2ludH0gaSB0aGUgbnVtYmVyIG9mIHZpc2libGUgY29sdW1ucwoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5WaXNibGVDb2x1bW5zKCBvU2V0dGluZ3MgKQoJewoJCXZhciB2aXMgPSAwOwoJCgkJLy8gTm8gcmVkdWNlIGluIElFOCwgdXNlIGEgbG9vcCBmb3Igbm93CgkJJC5lYWNoKCBvU2V0dGluZ3MuYW9Db2x1bW5zLCBmdW5jdGlvbiAoIGksIGNvbCApIHsKCQkJaWYgKCBjb2wuYlZpc2libGUgJiYgJChjb2wublRoKS5jc3MoJ2Rpc3BsYXknKSAhPT0gJ25vbmUnICkgewoJCQkJdmlzKys7CgkJCX0KCQl9ICk7CgkKCQlyZXR1cm4gdmlzOwoJfQoJCgkKCS8qKgoJICogR2V0IGFuIGFycmF5IG9mIGNvbHVtbiBpbmRleGVzIHRoYXQgbWF0Y2ggYSBnaXZlbiBwcm9wZXJ0eQoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge3N0cmluZ30gc1BhcmFtIFBhcmFtZXRlciBpbiBhb0NvbHVtbnMgdG8gbG9vayBmb3IgLSB0eXBpY2FsbHkKCSAqICAgIGJWaXNpYmxlIG9yIGJTZWFyY2hhYmxlCgkgKiAgQHJldHVybnMge2FycmF5fSBBcnJheSBvZiBpbmRleGVzIHdpdGggbWF0Y2hlZCBwcm9wZXJ0aWVzCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkdldENvbHVtbnMoIG9TZXR0aW5ncywgc1BhcmFtICkKCXsKCQl2YXIgYSA9IFtdOwoJCgkJJC5tYXAoIG9TZXR0aW5ncy5hb0NvbHVtbnMsIGZ1bmN0aW9uKHZhbCwgaSkgewoJCQlpZiAoIHZhbFtzUGFyYW1dICkgewoJCQkJYS5wdXNoKCBpICk7CgkJCX0KCQl9ICk7CgkKCQlyZXR1cm4gYTsKCX0KCQoJCgkvKioKCSAqIENhbGN1bGF0ZSB0aGUgJ3R5cGUnIG9mIGEgY29sdW1uCgkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkNvbHVtblR5cGVzICggc2V0dGluZ3MgKQoJewoJCXZhciBjb2x1bW5zID0gc2V0dGluZ3MuYW9Db2x1bW5zOwoJCXZhciBkYXRhID0gc2V0dGluZ3MuYW9EYXRhOwoJCXZhciB0eXBlcyA9IERhdGFUYWJsZS5leHQudHlwZS5kZXRlY3Q7CgkJdmFyIGksIGllbiwgaiwgamVuLCBrLCBrZW47CgkJdmFyIGNvbCwgY2VsbCwgZGV0ZWN0ZWRUeXBlLCBjYWNoZTsKCQoJCS8vIEZvciBlYWNoIGNvbHVtbiwgc3BpbiBvdmVyIHRoZSAKCQlmb3IgKCBpPTAsIGllbj1jb2x1bW5zLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQljb2wgPSBjb2x1bW5zW2ldOwoJCQljYWNoZSA9IFtdOwoJCgkJCWlmICggISBjb2wuc1R5cGUgJiYgY29sLl9zTWFudWFsVHlwZSApIHsKCQkJCWNvbC5zVHlwZSA9IGNvbC5fc01hbnVhbFR5cGU7CgkJCX0KCQkJZWxzZSBpZiAoICEgY29sLnNUeXBlICkgewoJCQkJZm9yICggaj0wLCBqZW49dHlwZXMubGVuZ3RoIDsgajxqZW4gOyBqKysgKSB7CgkJCQkJZm9yICggaz0wLCBrZW49ZGF0YS5sZW5ndGggOyBrPGtlbiA7IGsrKyApIHsKCQkJCQkJLy8gVXNlIGEgY2FjaGUgYXJyYXkgc28gd2Ugb25seSBuZWVkIHRvIGdldCB0aGUgdHlwZSBkYXRhCgkJCQkJCS8vIGZyb20gdGhlIGZvcm1hdHRlciBvbmNlICh3aGVuIHVzaW5nIG11bHRpcGxlIGRldGVjdG9ycykKCQkJCQkJaWYgKCBjYWNoZVtrXSA9PT0gdW5kZWZpbmVkICkgewoJCQkJCQkJY2FjaGVba10gPSBfZm5HZXRDZWxsRGF0YSggc2V0dGluZ3MsIGssIGksICd0eXBlJyApOwoJCQkJCQl9CgkKCQkJCQkJZGV0ZWN0ZWRUeXBlID0gdHlwZXNbal0oIGNhY2hlW2tdLCBzZXR0aW5ncyApOwoJCgkJCQkJCS8vIElmIG51bGwsIHRoZW4gdGhpcyB0eXBlIGNhbid0IGFwcGx5IHRvIHRoaXMgY29sdW1uLCBzbwoJCQkJCQkvLyByYXRoZXIgdGhhbiB0ZXN0aW5nIGFsbCBjZWxscywgYnJlYWsgb3V0LiBUaGVyZSBpcyBhbgoJCQkJCQkvLyBleGNlcHRpb24gZm9yIHRoZSBsYXN0IHR5cGUgd2hpY2ggaXMgYGh0bWxgLiBXZSBuZWVkIHRvCgkJCQkJCS8vIHNjYW4gYWxsIHJvd3Mgc2luY2UgaXQgaXMgcG9zc2libGUgdG8gbWl4IHN0cmluZyBhbmQgSFRNTAoJCQkJCQkvLyB0eXBlcwoJCQkJCQlpZiAoICEgZGV0ZWN0ZWRUeXBlICYmIGogIT09IHR5cGVzLmxlbmd0aC0xICkgewoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQoJCQkJCQkvLyBPbmx5IGEgc2luZ2xlIG1hdGNoIGlzIG5lZWRlZCBmb3IgaHRtbCB0eXBlIHNpbmNlIGl0IGlzCgkJCQkJCS8vIGJvdHRvbSBvZiB0aGUgcGlsZSBhbmQgdmVyeSBzaW1pbGFyIHRvIHN0cmluZwoJCQkJCQlpZiAoIGRldGVjdGVkVHlwZSA9PT0gJ2h0bWwnICkgewoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQl9CgkKCQkJCQkvLyBUeXBlIGlzIHZhbGlkIGZvciBhbGwgZGF0YSBwb2ludHMgaW4gdGhlIGNvbHVtbiAtIHVzZSB0aGlzCgkJCQkJLy8gdHlwZQoJCQkJCWlmICggZGV0ZWN0ZWRUeXBlICkgewoJCQkJCQljb2wuc1R5cGUgPSBkZXRlY3RlZFR5cGU7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQoJCQkJLy8gRmFsbCBiYWNrIC0gaWYgbm8gdHlwZSB3YXMgZGV0ZWN0ZWQsIGFsd2F5cyB1c2Ugc3RyaW5nCgkJCQlpZiAoICEgY29sLnNUeXBlICkgewoJCQkJCWNvbC5zVHlwZSA9ICdzdHJpbmcnOwoJCQkJfQoJCQl9CgkJfQoJfQoJCgkKCS8qKgoJICogVGFrZSB0aGUgY29sdW1uIGRlZmluaXRpb25zIGFuZCBzdGF0aWMgY29sdW1ucyBhcnJheXMgYW5kIGNhbGN1bGF0ZSBob3cKCSAqIHRoZXkgcmVsYXRlIHRvIGNvbHVtbiBpbmRleGVzLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCB0aGVuIGFwcGx5IHRoZQoJICogZGVmaW5pdGlvbiBmb3VuZCBmb3IgYSBjb2x1bW4gdG8gYSBzdWl0YWJsZSBjb25maWd1cmF0aW9uIG9iamVjdC4KCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHthcnJheX0gYW9Db2xEZWZzIFRoZSBhb0NvbHVtbkRlZnMgYXJyYXkgdGhhdCBpcyB0byBiZSBhcHBsaWVkCgkgKiAgQHBhcmFtIHthcnJheX0gYW9Db2xzIFRoZSBhb0NvbHVtbnMgYXJyYXkgdGhhdCBkZWZpbmVzIGNvbHVtbnMgaW5kaXZpZHVhbGx5CgkgKiAgQHBhcmFtIHtmdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24gLSB0YWtlcyB0d28gcGFyYW1ldGVycywgdGhlIGNhbGN1bGF0ZWQKCSAqICAgIGNvbHVtbiBpbmRleCBhbmQgdGhlIGRlZmluaXRpb24gZm9yIHRoYXQgY29sdW1uLgoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5BcHBseUNvbHVtbkRlZnMoIG9TZXR0aW5ncywgYW9Db2xEZWZzLCBhb0NvbHMsIGZuICkKCXsKCQl2YXIgaSwgaUxlbiwgaiwgakxlbiwgaywga0xlbiwgZGVmOwoJCXZhciBjb2x1bW5zID0gb1NldHRpbmdzLmFvQ29sdW1uczsKCQoJCS8vIENvbHVtbiBkZWZpbml0aW9ucyB3aXRoIGFUYXJnZXRzCgkJaWYgKCBhb0NvbERlZnMgKQoJCXsKCQkJLyogTG9vcCBvdmVyIHRoZSBkZWZpbml0aW9ucyBhcnJheSAtIGxvb3AgaW4gcmV2ZXJzZSBzbyBmaXJzdCBpbnN0YW5jZSBoYXMgcHJpb3JpdHkgKi8KCQkJZm9yICggaT1hb0NvbERlZnMubGVuZ3RoLTEgOyBpPj0wIDsgaS0tICkKCQkJewoJCQkJZGVmID0gYW9Db2xEZWZzW2ldOwoJCgkJCQkvKiBFYWNoIGRlZmluaXRpb24gY2FuIHRhcmdldCBtdWx0aXBsZSBjb2x1bW5zLCBhcyBpdCBpcyBhbiBhcnJheSAqLwoJCQkJdmFyIGFUYXJnZXRzID0gZGVmLnRhcmdldHMgIT09IHVuZGVmaW5lZCA/CgkJCQkJZGVmLnRhcmdldHMgOgoJCQkJCWRlZi5hVGFyZ2V0czsKCQoJCQkJaWYgKCAhICQuaXNBcnJheSggYVRhcmdldHMgKSApCgkJCQl7CgkJCQkJYVRhcmdldHMgPSBbIGFUYXJnZXRzIF07CgkJCQl9CgkKCQkJCWZvciAoIGo9MCwgakxlbj1hVGFyZ2V0cy5sZW5ndGggOyBqPGpMZW4gOyBqKysgKQoJCQkJewoJCQkJCWlmICggdHlwZW9mIGFUYXJnZXRzW2pdID09PSAnbnVtYmVyJyAmJiBhVGFyZ2V0c1tqXSA+PSAwICkKCQkJCQl7CgkJCQkJCS8qIEFkZCBjb2x1bW5zIHRoYXQgd2UgZG9uJ3QgeWV0IGtub3cgYWJvdXQgKi8KCQkJCQkJd2hpbGUoIGNvbHVtbnMubGVuZ3RoIDw9IGFUYXJnZXRzW2pdICkKCQkJCQkJewoJCQkJCQkJX2ZuQWRkQ29sdW1uKCBvU2V0dGluZ3MgKTsKCQkJCQkJfQoJCgkJCQkJCS8qIEludGVnZXIsIGJhc2ljIGluZGV4ICovCgkJCQkJCWZuKCBhVGFyZ2V0c1tqXSwgZGVmICk7CgkJCQkJfQoJCQkJCWVsc2UgaWYgKCB0eXBlb2YgYVRhcmdldHNbal0gPT09ICdudW1iZXInICYmIGFUYXJnZXRzW2pdIDwgMCApCgkJCQkJewoJCQkJCQkvKiBOZWdhdGl2ZSBpbnRlZ2VyLCByaWdodCB0byBsZWZ0IGNvbHVtbiBjb3VudGluZyAqLwoJCQkJCQlmbiggY29sdW1ucy5sZW5ndGgrYVRhcmdldHNbal0sIGRlZiApOwoJCQkJCX0KCQkJCQllbHNlIGlmICggdHlwZW9mIGFUYXJnZXRzW2pdID09PSAnc3RyaW5nJyApCgkJCQkJewoJCQkJCQkvKiBDbGFzcyBuYW1lIG1hdGNoaW5nIG9uIFRIIGVsZW1lbnQgKi8KCQkJCQkJZm9yICggaz0wLCBrTGVuPWNvbHVtbnMubGVuZ3RoIDsgazxrTGVuIDsgaysrICkKCQkJCQkJewoJCQkJCQkJaWYgKCBhVGFyZ2V0c1tqXSA9PSAiX2FsbCIgfHwKCQkJCQkJCSAgICAgJChjb2x1bW5zW2tdLm5UaCkuaGFzQ2xhc3MoIGFUYXJnZXRzW2pdICkgKQoJCQkJCQkJewoJCQkJCQkJCWZuKCBrLCBkZWYgKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQoJCS8vIFN0YXRpY2FsbHkgZGVmaW5lZCBjb2x1bW5zIGFycmF5CgkJaWYgKCBhb0NvbHMgKQoJCXsKCQkJZm9yICggaT0wLCBpTGVuPWFvQ29scy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlmbiggaSwgYW9Db2xzW2ldICk7CgkJCX0KCQl9Cgl9CgkKCS8qKgoJICogQWRkIGEgZGF0YSBhcnJheSB0byB0aGUgdGFibGUsIGNyZWF0aW5nIERPTSBub2RlIGV0Yy4gVGhpcyBpcyB0aGUgcGFyYWxsZWwgdG8KCSAqIF9mbkdhdGhlckRhdGEsIGJ1dCBmb3IgYWRkaW5nIHJvd3MgZnJvbSBhIEphdmFzY3JpcHQgc291cmNlLCByYXRoZXIgdGhhbiBhCgkgKiBET00gc291cmNlLgoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge2FycmF5fSBhRGF0YSBkYXRhIGFycmF5IHRvIGJlIGFkZGVkCgkgKiAgQHBhcmFtIHtub2RlfSBbblRyXSBUUiBlbGVtZW50IHRvIGFkZCB0byB0aGUgdGFibGUgLSBvcHRpb25hbC4gSWYgbm90IGdpdmVuLAoJICogICAgRGF0YVRhYmxlcyB3aWxsIGNyZWF0ZSBhIHJvdyBhdXRvbWF0aWNhbGx5CgkgKiAgQHBhcmFtIHthcnJheX0gW2FuVGRzXSBBcnJheSBvZiBURHxUSCBlbGVtZW50cyBmb3IgdGhlIHJvdyAtIG11c3QgYmUgZ2l2ZW4KCSAqICAgIGlmIG5UciBpcy4KCSAqICBAcmV0dXJucyB7aW50fSA+PTAgaWYgc3VjY2Vzc2Z1bCAoaW5kZXggb2YgbmV3IGFvRGF0YSBlbnRyeSksIC0xIGlmIGZhaWxlZAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5BZGREYXRhICggb1NldHRpbmdzLCBhRGF0YUluLCBuVHIsIGFuVGRzICkKCXsKCQkvKiBDcmVhdGUgdGhlIG9iamVjdCBmb3Igc3RvcmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIG5ldyByb3cgKi8KCQl2YXIgaVJvdyA9IG9TZXR0aW5ncy5hb0RhdGEubGVuZ3RoOwoJCXZhciBvRGF0YSA9ICQuZXh0ZW5kKCB0cnVlLCB7fSwgRGF0YVRhYmxlLm1vZGVscy5vUm93LCB7CgkJCXNyYzogblRyID8gJ2RvbScgOiAnZGF0YScsCgkJCWlkeDogaVJvdwoJCX0gKTsKCQoJCW9EYXRhLl9hRGF0YSA9IGFEYXRhSW47CgkJb1NldHRpbmdzLmFvRGF0YS5wdXNoKCBvRGF0YSApOwoJCgkJLyogQ3JlYXRlIHRoZSBjZWxscyAqLwoJCXZhciBuVGQsIHNUaGlzVHlwZTsKCQl2YXIgY29sdW1ucyA9IG9TZXR0aW5ncy5hb0NvbHVtbnM7CgkKCQkvLyBJbnZhbGlkYXRlIHRoZSBjb2x1bW4gdHlwZXMgYXMgdGhlIG5ldyBkYXRhIG5lZWRzIHRvIGJlIHJldmFsaWRhdGVkCgkJZm9yICggdmFyIGk9MCwgaUxlbj1jb2x1bW5zLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJewoJCQljb2x1bW5zW2ldLnNUeXBlID0gbnVsbDsKCQl9CgkKCQkvKiBBZGQgdG8gdGhlIGRpc3BsYXkgYXJyYXkgKi8KCQlvU2V0dGluZ3MuYWlEaXNwbGF5TWFzdGVyLnB1c2goIGlSb3cgKTsKCQoJCXZhciBpZCA9IG9TZXR0aW5ncy5yb3dJZEZuKCBhRGF0YUluICk7CgkJaWYgKCBpZCAhPT0gdW5kZWZpbmVkICkgewoJCQlvU2V0dGluZ3MuYUlkc1sgaWQgXSA9IG9EYXRhOwoJCX0KCQoJCS8qIENyZWF0ZSB0aGUgRE9NIGluZm9ybWF0aW9uLCBvciByZWdpc3RlciBpdCBpZiBhbHJlYWR5IHByZXNlbnQgKi8KCQlpZiAoIG5UciB8fCAhIG9TZXR0aW5ncy5vRmVhdHVyZXMuYkRlZmVyUmVuZGVyICkKCQl7CgkJCV9mbkNyZWF0ZVRyKCBvU2V0dGluZ3MsIGlSb3csIG5UciwgYW5UZHMgKTsKCQl9CgkKCQlyZXR1cm4gaVJvdzsKCX0KCQoJCgkvKioKCSAqIEFkZCBvbmUgb3IgbW9yZSBUUiBlbGVtZW50cyB0byB0aGUgdGFibGUuIEdlbmVyYWxseSB3ZSdkIGV4cGVjdCB0bwoJICogdXNlIHRoaXMgZm9yIHJlYWRpbmcgZGF0YSBmcm9tIGEgRE9NIHNvdXJjZWQgdGFibGUsIGJ1dCBpdCBjb3VsZCBiZQoJICogdXNlZCBmb3IgYW4gVFIgZWxlbWVudC4gTm90ZSB0aGF0IGlmIGEgVFIgaXMgZ2l2ZW4sIGl0IGlzIHVzZWQgKGkuZS4KCSAqIGl0IGlzIG5vdCBjbG9uZWQpLgoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSB7YXJyYXl8bm9kZXxqUXVlcnl9IHRycyBUaGUgVFIgZWxlbWVudChzKSB0byBhZGQgdG8gdGhlIHRhYmxlCgkgKiAgQHJldHVybnMge2FycmF5fSBBcnJheSBvZiBpbmRleGVzIGZvciB0aGUgYWRkZWQgcm93cwoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5BZGRUciggc2V0dGluZ3MsIHRycyApCgl7CgkJdmFyIHJvdzsKCQoJCS8vIEFsbG93IGFuIGluZGl2aWR1YWwgbm9kZSB0byBiZSBwYXNzZWQgaW4KCQlpZiAoICEgKHRycyBpbnN0YW5jZW9mICQpICkgewoJCQl0cnMgPSAkKHRycyk7CgkJfQoJCgkJcmV0dXJuIHRycy5tYXAoIGZ1bmN0aW9uIChpLCBlbCkgewoJCQlyb3cgPSBfZm5HZXRSb3dFbGVtZW50cyggc2V0dGluZ3MsIGVsICk7CgkJCXJldHVybiBfZm5BZGREYXRhKCBzZXR0aW5ncywgcm93LmRhdGEsIGVsLCByb3cuY2VsbHMgKTsKCQl9ICk7Cgl9CgkKCQoJLyoqCgkgKiBUYWtlIGEgVFIgZWxlbWVudCBhbmQgY29udmVydCBpdCB0byBhbiBpbmRleCBpbiBhb0RhdGEKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHtub2RlfSBuIHRoZSBUUiBlbGVtZW50IHRvIGZpbmQKCSAqICBAcmV0dXJucyB7aW50fSBpbmRleCBpZiB0aGUgbm9kZSBpcyBmb3VuZCwgbnVsbCBpZiBub3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuTm9kZVRvRGF0YUluZGV4KCBvU2V0dGluZ3MsIG4gKQoJewoJCXJldHVybiAobi5fRFRfUm93SW5kZXghPT11bmRlZmluZWQpID8gbi5fRFRfUm93SW5kZXggOiBudWxsOwoJfQoJCgkKCS8qKgoJICogVGFrZSBhIFREIGVsZW1lbnQgYW5kIGNvbnZlcnQgaXQgaW50byBhIGNvbHVtbiBkYXRhIGluZGV4IChub3QgdGhlIHZpc2libGUgaW5kZXgpCgkgKiAgQHBhcmFtIHtvYmplY3R9IG9TZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSB7aW50fSBpUm93IFRoZSByb3cgbnVtYmVyIHRoZSBURC9USCBjYW4gYmUgZm91bmQgaW4KCSAqICBAcGFyYW0ge25vZGV9IG4gVGhlIFREL1RIIGVsZW1lbnQgdG8gZmluZAoJICogIEByZXR1cm5zIHtpbnR9IGluZGV4IGlmIHRoZSBub2RlIGlzIGZvdW5kLCAtMSBpZiBub3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuTm9kZVRvQ29sdW1uSW5kZXgoIG9TZXR0aW5ncywgaVJvdywgbiApCgl7CgkJcmV0dXJuICQuaW5BcnJheSggbiwgb1NldHRpbmdzLmFvRGF0YVsgaVJvdyBdLmFuQ2VsbHMgKTsKCX0KCQoJCgkvKioKCSAqIEdldCB0aGUgZGF0YSBmb3IgYSBnaXZlbiBjZWxsIGZyb20gdGhlIGludGVybmFsIGNhY2hlLCB0YWtpbmcgaW50byBhY2NvdW50IGRhdGEgbWFwcGluZwoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSB7aW50fSByb3dJZHggYW9EYXRhIHJvdyBpZAoJICogIEBwYXJhbSB7aW50fSBjb2xJZHggQ29sdW1uIGluZGV4CgkgKiAgQHBhcmFtIHtzdHJpbmd9IHR5cGUgZGF0YSBnZXQgdHlwZSAoJ2Rpc3BsYXknLCAndHlwZScgJ2ZpbHRlcicgJ3NvcnQnKQoJICogIEByZXR1cm5zIHsqfSBDZWxsIGRhdGEKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuR2V0Q2VsbERhdGEoIHNldHRpbmdzLCByb3dJZHgsIGNvbElkeCwgdHlwZSApCgl7CgkJdmFyIGRyYXcgICAgICAgICAgID0gc2V0dGluZ3MuaURyYXc7CgkJdmFyIGNvbCAgICAgICAgICAgID0gc2V0dGluZ3MuYW9Db2x1bW5zW2NvbElkeF07CgkJdmFyIHJvd0RhdGEgICAgICAgID0gc2V0dGluZ3MuYW9EYXRhW3Jvd0lkeF0uX2FEYXRhOwoJCXZhciBkZWZhdWx0Q29udGVudCA9IGNvbC5zRGVmYXVsdENvbnRlbnQ7CgkJdmFyIGNlbGxEYXRhICAgICAgID0gY29sLmZuR2V0RGF0YSggcm93RGF0YSwgdHlwZSwgewoJCQlzZXR0aW5nczogc2V0dGluZ3MsCgkJCXJvdzogICAgICByb3dJZHgsCgkJCWNvbDogICAgICBjb2xJZHgKCQl9ICk7CgkKCQlpZiAoIGNlbGxEYXRhID09PSB1bmRlZmluZWQgKSB7CgkJCWlmICggc2V0dGluZ3MuaURyYXdFcnJvciAhPSBkcmF3ICYmIGRlZmF1bHRDb250ZW50ID09PSBudWxsICkgewoJCQkJX2ZuTG9nKCBzZXR0aW5ncywgMCwgIlJlcXVlc3RlZCB1bmtub3duIHBhcmFtZXRlciAiKwoJCQkJCSh0eXBlb2YgY29sLm1EYXRhPT0nZnVuY3Rpb24nID8gJ3tmdW5jdGlvbn0nIDogIiciK2NvbC5tRGF0YSsiJyIpKwoJCQkJCSIgZm9yIHJvdyAiK3Jvd0lkeCsiLCBjb2x1bW4gIitjb2xJZHgsIDQgKTsKCQkJCXNldHRpbmdzLmlEcmF3RXJyb3IgPSBkcmF3OwoJCQl9CgkJCXJldHVybiBkZWZhdWx0Q29udGVudDsKCQl9CgkKCQkvLyBXaGVuIHRoZSBkYXRhIHNvdXJjZSBpcyBudWxsIGFuZCBhIHNwZWNpZmljIGRhdGEgdHlwZSBpcyByZXF1ZXN0ZWQgKGkuZS4KCQkvLyBub3QgdGhlIG9yaWdpbmFsIGRhdGEpLCB3ZSBjYW4gdXNlIGRlZmF1bHQgY29sdW1uIGRhdGEKCQlpZiAoIChjZWxsRGF0YSA9PT0gcm93RGF0YSB8fCBjZWxsRGF0YSA9PT0gbnVsbCkgJiYgZGVmYXVsdENvbnRlbnQgIT09IG51bGwgJiYgdHlwZSAhPT0gdW5kZWZpbmVkICkgewoJCQljZWxsRGF0YSA9IGRlZmF1bHRDb250ZW50OwoJCX0KCQllbHNlIGlmICggdHlwZW9mIGNlbGxEYXRhID09PSAnZnVuY3Rpb24nICkgewoJCQkvLyBJZiB0aGUgZGF0YSBzb3VyY2UgaXMgYSBmdW5jdGlvbiwgdGhlbiB3ZSBydW4gaXQgYW5kIHVzZSB0aGUgcmV0dXJuLAoJCQkvLyBleGVjdXRpbmcgaW4gdGhlIHNjb3BlIG9mIHRoZSBkYXRhIG9iamVjdCAoZm9yIGluc3RhbmNlcykKCQkJcmV0dXJuIGNlbGxEYXRhLmNhbGwoIHJvd0RhdGEgKTsKCQl9CgkKCQlpZiAoIGNlbGxEYXRhID09PSBudWxsICYmIHR5cGUgPT0gJ2Rpc3BsYXknICkgewoJCQlyZXR1cm4gJyc7CgkJfQoJCXJldHVybiBjZWxsRGF0YTsKCX0KCQoJCgkvKioKCSAqIFNldCB0aGUgdmFsdWUgZm9yIGEgc3BlY2lmaWMgY2VsbCwgaW50byB0aGUgaW50ZXJuYWwgZGF0YSBjYWNoZQoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSB7aW50fSByb3dJZHggYW9EYXRhIHJvdyBpZAoJICogIEBwYXJhbSB7aW50fSBjb2xJZHggQ29sdW1uIGluZGV4CgkgKiAgQHBhcmFtIHsqfSB2YWwgVmFsdWUgdG8gc2V0CgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mblNldENlbGxEYXRhKCBzZXR0aW5ncywgcm93SWR4LCBjb2xJZHgsIHZhbCApCgl7CgkJdmFyIGNvbCAgICAgPSBzZXR0aW5ncy5hb0NvbHVtbnNbY29sSWR4XTsKCQl2YXIgcm93RGF0YSA9IHNldHRpbmdzLmFvRGF0YVtyb3dJZHhdLl9hRGF0YTsKCQoJCWNvbC5mblNldERhdGEoIHJvd0RhdGEsIHZhbCwgewoJCQlzZXR0aW5nczogc2V0dGluZ3MsCgkJCXJvdzogICAgICByb3dJZHgsCgkJCWNvbDogICAgICBjb2xJZHgKCQl9ICApOwoJfQoJCgkKCS8vIFByaXZhdGUgdmFyaWFibGUgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIGFjdGlvbiBzeW50YXggaW4gdGhlIGRhdGEgcHJvcGVydHkgb2JqZWN0Cgl2YXIgX19yZUFycmF5ID0gL1xbLio/XF0kLzsKCXZhciBfX3JlRm4gPSAvXChcKSQvOwoJCgkvKioKCSAqIFNwbGl0IHN0cmluZyBvbiBwZXJpb2RzLCB0YWtpbmcgaW50byBhY2NvdW50IGVzY2FwZWQgcGVyaW9kcwoJICogQHBhcmFtICB7c3RyaW5nfSBzdHIgU3RyaW5nIHRvIHNwbGl0CgkgKiBAcmV0dXJuIHthcnJheX0gU3BsaXQgc3RyaW5nCgkgKi8KCWZ1bmN0aW9uIF9mblNwbGl0T2JqTm90YXRpb24oIHN0ciApCgl7CgkJcmV0dXJuICQubWFwKCBzdHIubWF0Y2goLyhcXC58W15cLl0pKy9nKSB8fCBbJyddLCBmdW5jdGlvbiAoIHMgKSB7CgkJCXJldHVybiBzLnJlcGxhY2UoL1xcXC4vZywgJy4nKTsKCQl9ICk7Cgl9CgkKCQoJLyoqCgkgKiBSZXR1cm4gYSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGdldCBkYXRhIGZyb20gYSBzb3VyY2Ugb2JqZWN0LCB0YWtpbmcKCSAqIGludG8gYWNjb3VudCB0aGUgYWJpbGl0eSB0byB1c2UgbmVzdGVkIG9iamVjdHMgYXMgYSBzb3VyY2UKCSAqICBAcGFyYW0ge3N0cmluZ3xpbnR8ZnVuY3Rpb259IG1Tb3VyY2UgVGhlIGRhdGEgc291cmNlIGZvciB0aGUgb2JqZWN0CgkgKiAgQHJldHVybnMge2Z1bmN0aW9ufSBEYXRhIGdldCBmdW5jdGlvbgoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5HZXRPYmplY3REYXRhRm4oIG1Tb3VyY2UgKQoJewoJCWlmICggJC5pc1BsYWluT2JqZWN0KCBtU291cmNlICkgKQoJCXsKCQkJLyogQnVpbGQgYW4gb2JqZWN0IG9mIGdldCBmdW5jdGlvbnMsIGFuZCB3cmFwIHRoZW0gaW4gYSBzaW5nbGUgY2FsbCAqLwoJCQl2YXIgbyA9IHt9OwoJCQkkLmVhY2goIG1Tb3VyY2UsIGZ1bmN0aW9uIChrZXksIHZhbCkgewoJCQkJaWYgKCB2YWwgKSB7CgkJCQkJb1trZXldID0gX2ZuR2V0T2JqZWN0RGF0YUZuKCB2YWwgKTsKCQkJCX0KCQkJfSApOwoJCgkJCXJldHVybiBmdW5jdGlvbiAoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7CgkJCQl2YXIgdCA9IG9bdHlwZV0gfHwgby5fOwoJCQkJcmV0dXJuIHQgIT09IHVuZGVmaW5lZCA/CgkJCQkJdChkYXRhLCB0eXBlLCByb3csIG1ldGEpIDoKCQkJCQlkYXRhOwoJCQl9OwoJCX0KCQllbHNlIGlmICggbVNvdXJjZSA9PT0gbnVsbCApCgkJewoJCQkvKiBHaXZlIGFuIGVtcHR5IHN0cmluZyBmb3IgcmVuZGVyaW5nIC8gc29ydGluZyBldGMgKi8KCQkJcmV0dXJuIGZ1bmN0aW9uIChkYXRhKSB7IC8vIHR5cGUsIHJvdyBhbmQgbWV0YSBhbHNvIHBhc3NlZCwgYnV0IG5vdCB1c2VkCgkJCQlyZXR1cm4gZGF0YTsKCQkJfTsKCQl9CgkJZWxzZSBpZiAoIHR5cGVvZiBtU291cmNlID09PSAnZnVuY3Rpb24nICkKCQl7CgkJCXJldHVybiBmdW5jdGlvbiAoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7CgkJCQlyZXR1cm4gbVNvdXJjZSggZGF0YSwgdHlwZSwgcm93LCBtZXRhICk7CgkJCX07CgkJfQoJCWVsc2UgaWYgKCB0eXBlb2YgbVNvdXJjZSA9PT0gJ3N0cmluZycgJiYgKG1Tb3VyY2UuaW5kZXhPZignLicpICE9PSAtMSB8fAoJCQkgICAgICBtU291cmNlLmluZGV4T2YoJ1snKSAhPT0gLTEgfHwgbVNvdXJjZS5pbmRleE9mKCcoJykgIT09IC0xKSApCgkJewoJCQkvKiBJZiB0aGVyZSBpcyBhIC4gaW4gdGhlIHNvdXJjZSBzdHJpbmcgdGhlbiB0aGUgZGF0YSBzb3VyY2UgaXMgaW4gYQoJCQkgKiBuZXN0ZWQgb2JqZWN0IHNvIHdlIGxvb3Agb3ZlciB0aGUgZGF0YSBmb3IgZWFjaCBsZXZlbCB0byBnZXQgdGhlIG5leHQKCQkJICogbGV2ZWwgZG93bi4gT24gZWFjaCBsb29wIHdlIHRlc3QgZm9yIHVuZGVmaW5lZCwgYW5kIGlmIGZvdW5kIGltbWVkaWF0ZWx5CgkJCSAqIHJldHVybi4gVGhpcyBhbGxvd3MgZW50aXJlIG9iamVjdHMgdG8gYmUgbWlzc2luZyBhbmQgc0RlZmF1bHRDb250ZW50IHRvCgkJCSAqIGJlIHVzZWQgaWYgZGVmaW5lZCwgcmF0aGVyIHRoYW4gdGhyb3dpbmcgYW4gZXJyb3IKCQkJICovCgkJCXZhciBmZXRjaERhdGEgPSBmdW5jdGlvbiAoZGF0YSwgdHlwZSwgc3JjKSB7CgkJCQl2YXIgYXJyYXlOb3RhdGlvbiwgZnVuY05vdGF0aW9uLCBvdXQsIGlubmVyU3JjOwoJCgkJCQlpZiAoIHNyYyAhPT0gIiIgKQoJCQkJewoJCQkJCXZhciBhID0gX2ZuU3BsaXRPYmpOb3RhdGlvbiggc3JjICk7CgkKCQkJCQlmb3IgKCB2YXIgaT0wLCBpTGVuPWEubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCQl7CgkJCQkJCS8vIENoZWNrIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggc3BlY2lhbCBub3RhdGlvbgoJCQkJCQlhcnJheU5vdGF0aW9uID0gYVtpXS5tYXRjaChfX3JlQXJyYXkpOwoJCQkJCQlmdW5jTm90YXRpb24gPSBhW2ldLm1hdGNoKF9fcmVGbik7CgkKCQkJCQkJaWYgKCBhcnJheU5vdGF0aW9uICkKCQkJCQkJewoJCQkJCQkJLy8gQXJyYXkgbm90YXRpb24KCQkJCQkJCWFbaV0gPSBhW2ldLnJlcGxhY2UoX19yZUFycmF5LCAnJyk7CgkKCQkJCQkJCS8vIENvbmRpdGlvbiBhbGxvd3Mgc2ltcGx5IFtdIHRvIGJlIHBhc3NlZCBpbgoJCQkJCQkJaWYgKCBhW2ldICE9PSAiIiApIHsKCQkJCQkJCQlkYXRhID0gZGF0YVsgYVtpXSBdOwoJCQkJCQkJfQoJCQkJCQkJb3V0ID0gW107CgkKCQkJCQkJCS8vIEdldCB0aGUgcmVtYWluZGVyIG9mIHRoZSBuZXN0ZWQgb2JqZWN0IHRvIGdldAoJCQkJCQkJYS5zcGxpY2UoIDAsIGkrMSApOwoJCQkJCQkJaW5uZXJTcmMgPSBhLmpvaW4oJy4nKTsKCQoJCQkJCQkJLy8gVHJhdmVyc2UgZWFjaCBlbnRyeSBpbiB0aGUgYXJyYXkgZ2V0dGluZyB0aGUgcHJvcGVydGllcyByZXF1ZXN0ZWQKCQkJCQkJCWlmICggJC5pc0FycmF5KCBkYXRhICkgKSB7CgkJCQkJCQkJZm9yICggdmFyIGo9MCwgakxlbj1kYXRhLmxlbmd0aCA7IGo8akxlbiA7IGorKyApIHsKCQkJCQkJCQkJb3V0LnB1c2goIGZldGNoRGF0YSggZGF0YVtqXSwgdHlwZSwgaW5uZXJTcmMgKSApOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQoJCQkJCQkJLy8gSWYgYSBzdHJpbmcgaXMgZ2l2ZW4gaW4gYmV0d2VlbiB0aGUgYXJyYXkgbm90YXRpb24gaW5kaWNhdG9ycywgdGhhdAoJCQkJCQkJLy8gaXMgdXNlZCB0byBqb2luIHRoZSBzdHJpbmdzIHRvZ2V0aGVyLCBvdGhlcndpc2UgYW4gYXJyYXkgaXMgcmV0dXJuZWQKCQkJCQkJCXZhciBqb2luID0gYXJyYXlOb3RhdGlvblswXS5zdWJzdHJpbmcoMSwgYXJyYXlOb3RhdGlvblswXS5sZW5ndGgtMSk7CgkJCQkJCQlkYXRhID0gKGpvaW49PT0iIikgPyBvdXQgOiBvdXQuam9pbihqb2luKTsKCQoJCQkJCQkJLy8gVGhlIGlubmVyIGNhbGwgdG8gZmV0Y2hEYXRhIGhhcyBhbHJlYWR5IHRyYXZlcnNlZCB0aHJvdWdoIHRoZSByZW1haW5kZXIKCQkJCQkJCS8vIG9mIHRoZSBzb3VyY2UgcmVxdWVzdGVkLCBzbyB3ZSBleGl0IGZyb20gdGhlIGxvb3AKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWVsc2UgaWYgKCBmdW5jTm90YXRpb24gKQoJCQkJCQl7CgkJCQkJCQkvLyBGdW5jdGlvbiBjYWxsCgkJCQkJCQlhW2ldID0gYVtpXS5yZXBsYWNlKF9fcmVGbiwgJycpOwoJCQkJCQkJZGF0YSA9IGRhdGFbIGFbaV0gXSgpOwoJCQkJCQkJY29udGludWU7CgkJCQkJCX0KCQoJCQkJCQlpZiAoIGRhdGEgPT09IG51bGwgfHwgZGF0YVsgYVtpXSBdID09PSB1bmRlZmluZWQgKQoJCQkJCQl7CgkJCQkJCQlyZXR1cm4gdW5kZWZpbmVkOwoJCQkJCQl9CgkJCQkJCWRhdGEgPSBkYXRhWyBhW2ldIF07CgkJCQkJfQoJCQkJfQoJCgkJCQlyZXR1cm4gZGF0YTsKCQkJfTsKCQoJCQlyZXR1cm4gZnVuY3Rpb24gKGRhdGEsIHR5cGUpIHsgLy8gcm93IGFuZCBtZXRhIGFsc28gcGFzc2VkLCBidXQgbm90IHVzZWQKCQkJCXJldHVybiBmZXRjaERhdGEoIGRhdGEsIHR5cGUsIG1Tb3VyY2UgKTsKCQkJfTsKCQl9CgkJZWxzZQoJCXsKCQkJLyogQXJyYXkgb3IgZmxhdCBvYmplY3QgbWFwcGluZyAqLwoJCQlyZXR1cm4gZnVuY3Rpb24gKGRhdGEsIHR5cGUpIHsgLy8gcm93IGFuZCBtZXRhIGFsc28gcGFzc2VkLCBidXQgbm90IHVzZWQKCQkJCXJldHVybiBkYXRhW21Tb3VyY2VdOwoJCQl9OwoJCX0KCX0KCQoJCgkvKioKCSAqIFJldHVybiBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2V0IGRhdGEgZnJvbSBhIHNvdXJjZSBvYmplY3QsIHRha2luZwoJICogaW50byBhY2NvdW50IHRoZSBhYmlsaXR5IHRvIHVzZSBuZXN0ZWQgb2JqZWN0cyBhcyBhIHNvdXJjZQoJICogIEBwYXJhbSB7c3RyaW5nfGludHxmdW5jdGlvbn0gbVNvdXJjZSBUaGUgZGF0YSBzb3VyY2UgZm9yIHRoZSBvYmplY3QKCSAqICBAcmV0dXJucyB7ZnVuY3Rpb259IERhdGEgc2V0IGZ1bmN0aW9uCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mblNldE9iamVjdERhdGFGbiggbVNvdXJjZSApCgl7CgkJaWYgKCAkLmlzUGxhaW5PYmplY3QoIG1Tb3VyY2UgKSApCgkJewoJCQkvKiBVbmxpa2UgZ2V0LCBvbmx5IHRoZSB1bmRlcnNjb3JlIChnbG9iYWwpIG9wdGlvbiBpcyB1c2VkIGZvciBmb3IKCQkJICogc2V0dGluZyBkYXRhIHNpbmNlIHdlIGRvbid0IGtub3cgdGhlIHR5cGUgaGVyZS4gVGhpcyBpcyB3aHkgYW4gb2JqZWN0CgkJCSAqIG9wdGlvbiBpcyBub3QgZG9jdW1lbnRlZCBmb3IgYG1EYXRhYCAod2hpY2ggaXMgcmVhZC93cml0ZSksIGJ1dCBpdCBpcwoJCQkgKiBmb3IgYG1SZW5kZXJgIHdoaWNoIGlzIHJlYWQgb25seS4KCQkJICovCgkJCXJldHVybiBfZm5TZXRPYmplY3REYXRhRm4oIG1Tb3VyY2UuXyApOwoJCX0KCQllbHNlIGlmICggbVNvdXJjZSA9PT0gbnVsbCApCgkJewoJCQkvKiBOb3RoaW5nIHRvIGRvIHdoZW4gdGhlIGRhdGEgc291cmNlIGlzIG51bGwgKi8KCQkJcmV0dXJuIGZ1bmN0aW9uICgpIHt9OwoJCX0KCQllbHNlIGlmICggdHlwZW9mIG1Tb3VyY2UgPT09ICdmdW5jdGlvbicgKQoJCXsKCQkJcmV0dXJuIGZ1bmN0aW9uIChkYXRhLCB2YWwsIG1ldGEpIHsKCQkJCW1Tb3VyY2UoIGRhdGEsICdzZXQnLCB2YWwsIG1ldGEgKTsKCQkJfTsKCQl9CgkJZWxzZSBpZiAoIHR5cGVvZiBtU291cmNlID09PSAnc3RyaW5nJyAmJiAobVNvdXJjZS5pbmRleE9mKCcuJykgIT09IC0xIHx8CgkJCSAgICAgIG1Tb3VyY2UuaW5kZXhPZignWycpICE9PSAtMSB8fCBtU291cmNlLmluZGV4T2YoJygnKSAhPT0gLTEpICkKCQl7CgkJCS8qIExpa2UgdGhlIGdldCwgd2UgbmVlZCB0byBnZXQgZGF0YSBmcm9tIGEgbmVzdGVkIG9iamVjdCAqLwoJCQl2YXIgc2V0RGF0YSA9IGZ1bmN0aW9uIChkYXRhLCB2YWwsIHNyYykgewoJCQkJdmFyIGEgPSBfZm5TcGxpdE9iak5vdGF0aW9uKCBzcmMgKSwgYjsKCQkJCXZhciBhTGFzdCA9IGFbYS5sZW5ndGgtMV07CgkJCQl2YXIgYXJyYXlOb3RhdGlvbiwgZnVuY05vdGF0aW9uLCBvLCBpbm5lclNyYzsKCQoJCQkJZm9yICggdmFyIGk9MCwgaUxlbj1hLmxlbmd0aC0xIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQkvLyBDaGVjayBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGFuIGFycmF5IG5vdGF0aW9uIHJlcXVlc3QKCQkJCQlhcnJheU5vdGF0aW9uID0gYVtpXS5tYXRjaChfX3JlQXJyYXkpOwoJCQkJCWZ1bmNOb3RhdGlvbiA9IGFbaV0ubWF0Y2goX19yZUZuKTsKCQoJCQkJCWlmICggYXJyYXlOb3RhdGlvbiApCgkJCQkJewoJCQkJCQlhW2ldID0gYVtpXS5yZXBsYWNlKF9fcmVBcnJheSwgJycpOwoJCQkJCQlkYXRhWyBhW2ldIF0gPSBbXTsKCQoJCQkJCQkvLyBHZXQgdGhlIHJlbWFpbmRlciBvZiB0aGUgbmVzdGVkIG9iamVjdCB0byBzZXQgc28gd2UgY2FuIHJlY3Vyc2UKCQkJCQkJYiA9IGEuc2xpY2UoKTsKCQkJCQkJYi5zcGxpY2UoIDAsIGkrMSApOwoJCQkJCQlpbm5lclNyYyA9IGIuam9pbignLicpOwoJCgkJCQkJCS8vIFRyYXZlcnNlIGVhY2ggZW50cnkgaW4gdGhlIGFycmF5IHNldHRpbmcgdGhlIHByb3BlcnRpZXMgcmVxdWVzdGVkCgkJCQkJCWlmICggJC5pc0FycmF5KCB2YWwgKSApCgkJCQkJCXsKCQkJCQkJCWZvciAoIHZhciBqPTAsIGpMZW49dmFsLmxlbmd0aCA7IGo8akxlbiA7IGorKyApCgkJCQkJCQl7CgkJCQkJCQkJbyA9IHt9OwoJCQkJCQkJCXNldERhdGEoIG8sIHZhbFtqXSwgaW5uZXJTcmMgKTsKCQkJCQkJCQlkYXRhWyBhW2ldIF0ucHVzaCggbyApOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJLy8gV2UndmUgYmVlbiBhc2tlZCB0byBzYXZlIGRhdGEgdG8gYW4gYXJyYXksIGJ1dCBpdAoJCQkJCQkJLy8gaXNuJ3QgYXJyYXkgZGF0YSB0byBiZSBzYXZlZC4gQmVzdCB0aGF0IGNhbiBiZSBkb25lCgkJCQkJCQkvLyBpcyB0byBqdXN0IHNhdmUgdGhlIHZhbHVlLgoJCQkJCQkJZGF0YVsgYVtpXSBdID0gdmFsOwoJCQkJCQl9CgkKCQkJCQkJLy8gVGhlIGlubmVyIGNhbGwgdG8gc2V0RGF0YSBoYXMgYWxyZWFkeSB0cmF2ZXJzZWQgdGhyb3VnaCB0aGUgcmVtYWluZGVyCgkJCQkJCS8vIG9mIHRoZSBzb3VyY2UgYW5kIGhhcyBzZXQgdGhlIGRhdGEsIHRodXMgd2UgY2FuIGV4aXQgaGVyZQoJCQkJCQlyZXR1cm47CgkJCQkJfQoJCQkJCWVsc2UgaWYgKCBmdW5jTm90YXRpb24gKQoJCQkJCXsKCQkJCQkJLy8gRnVuY3Rpb24gY2FsbAoJCQkJCQlhW2ldID0gYVtpXS5yZXBsYWNlKF9fcmVGbiwgJycpOwoJCQkJCQlkYXRhID0gZGF0YVsgYVtpXSBdKCB2YWwgKTsKCQkJCQl9CgkKCQkJCQkvLyBJZiB0aGUgbmVzdGVkIG9iamVjdCBkb2Vzbid0IGN1cnJlbnRseSBleGlzdCAtIHNpbmNlIHdlIGFyZQoJCQkJCS8vIHRyeWluZyB0byBzZXQgdGhlIHZhbHVlIC0gY3JlYXRlIGl0CgkJCQkJaWYgKCBkYXRhWyBhW2ldIF0gPT09IG51bGwgfHwgZGF0YVsgYVtpXSBdID09PSB1bmRlZmluZWQgKQoJCQkJCXsKCQkJCQkJZGF0YVsgYVtpXSBdID0ge307CgkJCQkJfQoJCQkJCWRhdGEgPSBkYXRhWyBhW2ldIF07CgkJCQl9CgkKCQkJCS8vIExhc3QgaXRlbSBpbiB0aGUgaW5wdXQgLSBpLmUsIHRoZSBhY3R1YWwgc2V0CgkJCQlpZiAoIGFMYXN0Lm1hdGNoKF9fcmVGbiApICkKCQkJCXsKCQkJCQkvLyBGdW5jdGlvbiBjYWxsCgkJCQkJZGF0YSA9IGRhdGFbIGFMYXN0LnJlcGxhY2UoX19yZUZuLCAnJykgXSggdmFsICk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJLy8gSWYgYXJyYXkgbm90YXRpb24gaXMgdXNlZCwgd2UganVzdCB3YW50IHRvIHN0cmlwIGl0IGFuZCB1c2UgdGhlIHByb3BlcnR5IG5hbWUKCQkJCQkvLyBhbmQgYXNzaWduIHRoZSB2YWx1ZS4gSWYgaXQgaXNuJ3QgdXNlZCwgdGhlbiB3ZSBnZXQgdGhlIHJlc3VsdCB3ZSB3YW50IGFueXdheQoJCQkJCWRhdGFbIGFMYXN0LnJlcGxhY2UoX19yZUFycmF5LCAnJykgXSA9IHZhbDsKCQkJCX0KCQkJfTsKCQoJCQlyZXR1cm4gZnVuY3Rpb24gKGRhdGEsIHZhbCkgeyAvLyBtZXRhIGlzIGFsc28gcGFzc2VkIGluLCBidXQgbm90IHVzZWQKCQkJCXJldHVybiBzZXREYXRhKCBkYXRhLCB2YWwsIG1Tb3VyY2UgKTsKCQkJfTsKCQl9CgkJZWxzZQoJCXsKCQkJLyogQXJyYXkgb3IgZmxhdCBvYmplY3QgbWFwcGluZyAqLwoJCQlyZXR1cm4gZnVuY3Rpb24gKGRhdGEsIHZhbCkgeyAvLyBtZXRhIGlzIGFsc28gcGFzc2VkIGluLCBidXQgbm90IHVzZWQKCQkJCWRhdGFbbVNvdXJjZV0gPSB2YWw7CgkJCX07CgkJfQoJfQoJCgkKCS8qKgoJICogUmV0dXJuIGFuIGFycmF5IHdpdGggdGhlIGZ1bGwgdGFibGUgZGF0YQoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcmV0dXJucyBhcnJheSB7YXJyYXl9IGFEYXRhIE1hc3RlciBkYXRhIGFycmF5CgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkdldERhdGFNYXN0ZXIgKCBzZXR0aW5ncyApCgl7CgkJcmV0dXJuIF9wbHVjayggc2V0dGluZ3MuYW9EYXRhLCAnX2FEYXRhJyApOwoJfQoJCgkKCS8qKgoJICogTnVrZSB0aGUgdGFibGUKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkNsZWFyVGFibGUoIHNldHRpbmdzICkKCXsKCQlzZXR0aW5ncy5hb0RhdGEubGVuZ3RoID0gMDsKCQlzZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIubGVuZ3RoID0gMDsKCQlzZXR0aW5ncy5haURpc3BsYXkubGVuZ3RoID0gMDsKCQlzZXR0aW5ncy5hSWRzID0ge307Cgl9CgkKCQoJIC8qKgoJICogVGFrZSBhbiBhcnJheSBvZiBpbnRlZ2VycyAoaW5kZXggYXJyYXkpIGFuZCByZW1vdmUgYSB0YXJnZXQgaW50ZWdlciAodmFsdWUgLSBub3QKCSAqIHRoZSBrZXkhKQoJICogIEBwYXJhbSB7YXJyYXl9IGEgSW5kZXggYXJyYXkgdG8gdGFyZ2V0CgkgKiAgQHBhcmFtIHtpbnR9IGlUYXJnZXQgdmFsdWUgdG8gZmluZAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5EZWxldGVJbmRleCggYSwgaVRhcmdldCwgc3BsaWNlICkKCXsKCQl2YXIgaVRhcmdldEluZGV4ID0gLTE7CgkKCQlmb3IgKCB2YXIgaT0wLCBpTGVuPWEubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQl7CgkJCWlmICggYVtpXSA9PSBpVGFyZ2V0ICkKCQkJewoJCQkJaVRhcmdldEluZGV4ID0gaTsKCQkJfQoJCQllbHNlIGlmICggYVtpXSA+IGlUYXJnZXQgKQoJCQl7CgkJCQlhW2ldLS07CgkJCX0KCQl9CgkKCQlpZiAoIGlUYXJnZXRJbmRleCAhPSAtMSAmJiBzcGxpY2UgPT09IHVuZGVmaW5lZCApCgkJewoJCQlhLnNwbGljZSggaVRhcmdldEluZGV4LCAxICk7CgkJfQoJfQoJCgkKCS8qKgoJICogTWFyayBjYWNoZWQgZGF0YSBhcyBpbnZhbGlkIHN1Y2ggdGhhdCBhIHJlLXJlYWQgb2YgdGhlIGRhdGEgd2lsbCBvY2N1ciB3aGVuCgkgKiB0aGUgY2FjaGVkIGRhdGEgaXMgbmV4dCByZXF1ZXN0ZWQuIEFsc28gdXBkYXRlIGZyb20gdGhlIGRhdGEgc291cmNlIG9iamVjdC4KCSAqCgkgKiBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqIEBwYXJhbSB7aW50fSAgICByb3dJZHggICBSb3cgaW5kZXggdG8gaW52YWxpZGF0ZQoJICogQHBhcmFtIHtzdHJpbmd9IFtzcmNdICAgIFNvdXJjZSB0byBpbnZhbGlkYXRlIGZyb206IHVuZGVmaW5lZCwgJ2F1dG8nLCAnZG9tJwoJICogICAgIG9yICdkYXRhJwoJICogQHBhcmFtIHtpbnR9ICAgIFtjb2xJZHhdIENvbHVtbiBpbmRleCB0byBpbnZhbGlkYXRlLiBJZiB1bmRlZmluZWQgdGhlIHdob2xlCgkgKiAgICAgcm93IHdpbGwgYmUgaW52YWxpZGF0ZWQKCSAqIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICoKCSAqIEB0b2RvIEZvciB0aGUgbW9kdWxhcmlzYXRpb24gb2YgdjEuMTEgdGhpcyB3aWxsIG5lZWQgdG8gYmVjb21lIGEgY2FsbGJhY2ssIHNvCgkgKiAgIHRoZSBzb3J0IGFuZCBmaWx0ZXIgbWV0aG9kcyBjYW4gc3Vic2NyaWJlIHRvIGl0LiBUaGF0IHdpbGwgcmVxdWlyZWQKCSAqICAgaW5pdGlhbGlzYXRpb24gb3B0aW9ucyBmb3Igc29ydGluZywgd2hpY2ggaXMgd2h5IGl0IGlzIG5vdCBhbHJlYWR5IGJha2VkIGluCgkgKi8KCWZ1bmN0aW9uIF9mbkludmFsaWRhdGUoIHNldHRpbmdzLCByb3dJZHgsIHNyYywgY29sSWR4ICkKCXsKCQl2YXIgcm93ID0gc2V0dGluZ3MuYW9EYXRhWyByb3dJZHggXTsKCQl2YXIgaSwgaWVuOwoJCXZhciBjZWxsV3JpdGUgPSBmdW5jdGlvbiAoIGNlbGwsIGNvbCApIHsKCQkJLy8gVGhpcyBpcyB2ZXJ5IGZydXN0cmF0aW5nLCBidXQgaW4gSUUgaWYgeW91IGp1c3Qgd3JpdGUgZGlyZWN0bHkKCQkJLy8gdG8gaW5uZXJIVE1MLCBhbmQgZWxlbWVudHMgdGhhdCBhcmUgb3ZlcndyaXR0ZW4gYXJlIEdDJ2VkLAoJCQkvLyBldmVuIGlmIHRoZXJlIGlzIGEgcmVmZXJlbmNlIHRvIHRoZW0gZWxzZXdoZXJlCgkJCXdoaWxlICggY2VsbC5jaGlsZE5vZGVzLmxlbmd0aCApIHsKCQkJCWNlbGwucmVtb3ZlQ2hpbGQoIGNlbGwuZmlyc3RDaGlsZCApOwoJCQl9CgkKCQkJY2VsbC5pbm5lckhUTUwgPSBfZm5HZXRDZWxsRGF0YSggc2V0dGluZ3MsIHJvd0lkeCwgY29sLCAnZGlzcGxheScgKTsKCQl9OwoJCgkJLy8gQXJlIHdlIHJlYWRpbmcgbGFzdCBkYXRhIGZyb20gRE9NIG9yIHRoZSBkYXRhIG9iamVjdD8KCQlpZiAoIHNyYyA9PT0gJ2RvbScgfHwgKCghIHNyYyB8fCBzcmMgPT09ICdhdXRvJykgJiYgcm93LnNyYyA9PT0gJ2RvbScpICkgewoJCQkvLyBSZWFkIHRoZSBkYXRhIGZyb20gdGhlIERPTQoJCQlyb3cuX2FEYXRhID0gX2ZuR2V0Um93RWxlbWVudHMoCgkJCQkJc2V0dGluZ3MsIHJvdywgY29sSWR4LCBjb2xJZHggPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJvdy5fYURhdGEKCQkJCSkKCQkJCS5kYXRhOwoJCX0KCQllbHNlIHsKCQkJLy8gUmVhZGluZyBmcm9tIGRhdGEgb2JqZWN0LCB1cGRhdGUgdGhlIERPTQoJCQl2YXIgY2VsbHMgPSByb3cuYW5DZWxsczsKCQoJCQlpZiAoIGNlbGxzICkgewoJCQkJaWYgKCBjb2xJZHggIT09IHVuZGVmaW5lZCApIHsKCQkJCQljZWxsV3JpdGUoIGNlbGxzW2NvbElkeF0sIGNvbElkeCApOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJZm9yICggaT0wLCBpZW49Y2VsbHMubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQkJCWNlbGxXcml0ZSggY2VsbHNbaV0sIGkgKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkKCQkvLyBGb3IgYm90aCByb3cgYW5kIGNlbGwgaW52YWxpZGF0aW9uLCB0aGUgY2FjaGVkIGRhdGEgZm9yIHNvcnRpbmcgYW5kCgkJLy8gZmlsdGVyaW5nIGlzIG51bGxlZCBvdXQKCQlyb3cuX2FTb3J0RGF0YSA9IG51bGw7CgkJcm93Ll9hRmlsdGVyRGF0YSA9IG51bGw7CgkKCQkvLyBJbnZhbGlkYXRlIHRoZSB0eXBlIGZvciBhIHNwZWNpZmljIGNvbHVtbiAoaWYgZ2l2ZW4pIG9yIGFsbCBjb2x1bW5zIHNpbmNlCgkJLy8gdGhlIGRhdGEgbWlnaHQgaGF2ZSBjaGFuZ2VkCgkJdmFyIGNvbHMgPSBzZXR0aW5ncy5hb0NvbHVtbnM7CgkJaWYgKCBjb2xJZHggIT09IHVuZGVmaW5lZCApIHsKCQkJY29sc1sgY29sSWR4IF0uc1R5cGUgPSBudWxsOwoJCX0KCQllbHNlIHsKCQkJZm9yICggaT0wLCBpZW49Y29scy5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCWNvbHNbaV0uc1R5cGUgPSBudWxsOwoJCQl9CgkKCQkJLy8gVXBkYXRlIERhdGFUYWJsZXMgc3BlY2lhbCBgRFRfKmAgYXR0cmlidXRlcyBmb3IgdGhlIHJvdwoJCQlfZm5Sb3dBdHRyaWJ1dGVzKCBzZXR0aW5ncywgcm93ICk7CgkJfQoJfQoJCgkKCS8qKgoJICogQnVpbGQgYSBkYXRhIHNvdXJjZSBvYmplY3QgZnJvbSBhbiBIVE1MIHJvdywgcmVhZGluZyB0aGUgY29udGVudHMgb2YgdGhlCgkgKiBjZWxscyB0aGF0IGFyZSBpbiB0aGUgcm93LgoJICoKCSAqIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogQHBhcmFtIHtub2RlfG9iamVjdH0gVFIgZWxlbWVudCBmcm9tIHdoaWNoIHRvIHJlYWQgZGF0YSBvciBleGlzdGluZyByb3cKCSAqICAgb2JqZWN0IGZyb20gd2hpY2ggdG8gcmUtcmVhZCB0aGUgZGF0YSBmcm9tIHRoZSBjZWxscwoJICogQHBhcmFtIHtpbnR9IFtjb2xJZHhdIE9wdGlvbmFsIGNvbHVtbiBpbmRleAoJICogQHBhcmFtIHthcnJheXxvYmplY3R9IFtkXSBEYXRhIHNvdXJjZSBvYmplY3QuIElmIGBjb2xJZHhgIGlzIGdpdmVuIHRoZW4gdGhpcwoJICogICBwYXJhbWV0ZXIgc2hvdWxkIGFsc28gYmUgZ2l2ZW4gYW5kIHdpbGwgYmUgdXNlZCB0byB3cml0ZSB0aGUgZGF0YSBpbnRvLgoJICogICBPbmx5IHRoZSBjb2x1bW4gaW4gcXVlc3Rpb24gd2lsbCBiZSB3cml0dGVuCgkgKiBAcmV0dXJucyB7b2JqZWN0fSBPYmplY3Qgd2l0aCB0d28gcGFyYW1ldGVyczogYGRhdGFgIHRoZSBkYXRhIHJlYWQsIGluCgkgKiAgIGRvY3VtZW50IG9yZGVyLCBhbmQgYGNlbGxzYCBhbmQgYXJyYXkgb2Ygbm9kZXMgKHRoZXkgY2FuIGJlIHVzZWZ1bCB0byB0aGUKCSAqICAgY2FsbGVyLCBzbyByYXRoZXIgdGhhbiBuZWVkaW5nIGEgc2Vjb25kIHRyYXZlcnNhbCB0byBnZXQgdGhlbSwganVzdCByZXR1cm4KCSAqICAgdGhlbSBmcm9tIGhlcmUpLgoJICogQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkdldFJvd0VsZW1lbnRzKCBzZXR0aW5ncywgcm93LCBjb2xJZHgsIGQgKQoJewoJCXZhcgoJCQl0ZHMgPSBbXSwKCQkJdGQgPSByb3cuZmlyc3RDaGlsZCwKCQkJbmFtZSwgY29sLCBvLCBpPTAsIGNvbnRlbnRzLAoJCQljb2x1bW5zID0gc2V0dGluZ3MuYW9Db2x1bW5zLAoJCQlvYmplY3RSZWFkID0gc2V0dGluZ3MuX3Jvd1JlYWRPYmplY3Q7CgkKCQkvLyBBbGxvdyB0aGUgZGF0YSBvYmplY3QgdG8gYmUgcGFzc2VkIGluLCBvciBjb25zdHJ1Y3QKCQlkID0gZCAhPT0gdW5kZWZpbmVkID8KCQkJZCA6CgkJCW9iamVjdFJlYWQgPwoJCQkJe30gOgoJCQkJW107CgkKCQl2YXIgYXR0ciA9IGZ1bmN0aW9uICggc3RyLCB0ZCAgKSB7CgkJCWlmICggdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgKSB7CgkJCQl2YXIgaWR4ID0gc3RyLmluZGV4T2YoJ0AnKTsKCQoJCQkJaWYgKCBpZHggIT09IC0xICkgewoJCQkJCXZhciBhdHRyID0gc3RyLnN1YnN0cmluZyggaWR4KzEgKTsKCQkJCQl2YXIgc2V0dGVyID0gX2ZuU2V0T2JqZWN0RGF0YUZuKCBzdHIgKTsKCQkJCQlzZXR0ZXIoIGQsIHRkLmdldEF0dHJpYnV0ZSggYXR0ciApICk7CgkJCQl9CgkJCX0KCQl9OwoJCgkJLy8gUmVhZCBkYXRhIGZyb20gYSBjZWxsIGFuZCBzdG9yZSBpbnRvIHRoZSBkYXRhIG9iamVjdAoJCXZhciBjZWxsUHJvY2VzcyA9IGZ1bmN0aW9uICggY2VsbCApIHsKCQkJaWYgKCBjb2xJZHggPT09IHVuZGVmaW5lZCB8fCBjb2xJZHggPT09IGkgKSB7CgkJCQljb2wgPSBjb2x1bW5zW2ldOwoJCQkJY29udGVudHMgPSAkLnRyaW0oY2VsbC5pbm5lckhUTUwpOwoJCgkJCQlpZiAoIGNvbCAmJiBjb2wuX2JBdHRyU3JjICkgewoJCQkJCXZhciBzZXR0ZXIgPSBfZm5TZXRPYmplY3REYXRhRm4oIGNvbC5tRGF0YS5fICk7CgkJCQkJc2V0dGVyKCBkLCBjb250ZW50cyApOwoJCgkJCQkJYXR0ciggY29sLm1EYXRhLnNvcnQsIGNlbGwgKTsKCQkJCQlhdHRyKCBjb2wubURhdGEudHlwZSwgY2VsbCApOwoJCQkJCWF0dHIoIGNvbC5tRGF0YS5maWx0ZXIsIGNlbGwgKTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCS8vIERlcGVuZGluZyBvbiB0aGUgYGRhdGFgIG9wdGlvbiBmb3IgdGhlIGNvbHVtbnMgdGhlIGRhdGEgY2FuCgkJCQkJLy8gYmUgcmVhZCB0byBlaXRoZXIgYW4gb2JqZWN0IG9yIGFuIGFycmF5LgoJCQkJCWlmICggb2JqZWN0UmVhZCApIHsKCQkJCQkJaWYgKCAhIGNvbC5fc2V0dGVyICkgewoJCQkJCQkJLy8gQ2FjaGUgdGhlIHNldHRlciBmdW5jdGlvbgoJCQkJCQkJY29sLl9zZXR0ZXIgPSBfZm5TZXRPYmplY3REYXRhRm4oIGNvbC5tRGF0YSApOwoJCQkJCQl9CgkJCQkJCWNvbC5fc2V0dGVyKCBkLCBjb250ZW50cyApOwoJCQkJCX0KCQkJCQllbHNlIHsKCQkJCQkJZFtpXSA9IGNvbnRlbnRzOwoJCQkJCX0KCQkJCX0KCQkJfQoJCgkJCWkrKzsKCQl9OwoJCgkJaWYgKCB0ZCApIHsKCQkJLy8gYHRyYCBlbGVtZW50IHdhcyBwYXNzZWQgaW4KCQkJd2hpbGUgKCB0ZCApIHsKCQkJCW5hbWUgPSB0ZC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpOwoJCgkJCQlpZiAoIG5hbWUgPT0gIlREIiB8fCBuYW1lID09ICJUSCIgKSB7CgkJCQkJY2VsbFByb2Nlc3MoIHRkICk7CgkJCQkJdGRzLnB1c2goIHRkICk7CgkJCQl9CgkKCQkJCXRkID0gdGQubmV4dFNpYmxpbmc7CgkJCX0KCQl9CgkJZWxzZSB7CgkJCS8vIEV4aXN0aW5nIHJvdyBvYmplY3QgcGFzc2VkIGluCgkJCXRkcyA9IHJvdy5hbkNlbGxzOwoJCgkJCWZvciAoIHZhciBqPTAsIGplbj10ZHMubGVuZ3RoIDsgajxqZW4gOyBqKysgKSB7CgkJCQljZWxsUHJvY2VzcyggdGRzW2pdICk7CgkJCX0KCQl9CgkKCQkvLyBSZWFkIHRoZSBJRCBmcm9tIHRoZSBET00gaWYgcHJlc2VudAoJCXZhciByb3dOb2RlID0gcm93LmZpcnN0Q2hpbGQgPyByb3cgOiByb3cublRyOwoJCgkJaWYgKCByb3dOb2RlICkgewoJCQl2YXIgaWQgPSByb3dOb2RlLmdldEF0dHJpYnV0ZSggJ2lkJyApOwoJCgkJCWlmICggaWQgKSB7CgkJCQlfZm5TZXRPYmplY3REYXRhRm4oIHNldHRpbmdzLnJvd0lkICkoIGQsIGlkICk7CgkJCX0KCQl9CgkKCQlyZXR1cm4gewoJCQlkYXRhOiBkLAoJCQljZWxsczogdGRzCgkJfTsKCX0KCS8qKgoJICogQ3JlYXRlIGEgbmV3IFRSIGVsZW1lbnQgKGFuZCBpdCdzIFREIGNoaWxkcmVuKSBmb3IgYSByb3cKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHtpbnR9IGlSb3cgUm93IHRvIGNvbnNpZGVyCgkgKiAgQHBhcmFtIHtub2RlfSBbblRySW5dIFRSIGVsZW1lbnQgdG8gYWRkIHRvIHRoZSB0YWJsZSAtIG9wdGlvbmFsLiBJZiBub3QgZ2l2ZW4sCgkgKiAgICBEYXRhVGFibGVzIHdpbGwgY3JlYXRlIGEgcm93IGF1dG9tYXRpY2FsbHkKCSAqICBAcGFyYW0ge2FycmF5fSBbYW5UZHNdIEFycmF5IG9mIFREfFRIIGVsZW1lbnRzIGZvciB0aGUgcm93IC0gbXVzdCBiZSBnaXZlbgoJICogICAgaWYgblRyIGlzLgoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5DcmVhdGVUciAoIG9TZXR0aW5ncywgaVJvdywgblRySW4sIGFuVGRzICkKCXsKCQl2YXIKCQkJcm93ID0gb1NldHRpbmdzLmFvRGF0YVtpUm93XSwKCQkJcm93RGF0YSA9IHJvdy5fYURhdGEsCgkJCWNlbGxzID0gW10sCgkJCW5UciwgblRkLCBvQ29sLAoJCQlpLCBpTGVuLCBjcmVhdGU7CgkKCQlpZiAoIHJvdy5uVHIgPT09IG51bGwgKQoJCXsKCQkJblRyID0gblRySW4gfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQoJCQlyb3cublRyID0gblRyOwoJCQlyb3cuYW5DZWxscyA9IGNlbGxzOwoJCgkJCS8qIFVzZSBhIHByaXZhdGUgcHJvcGVydHkgb24gdGhlIG5vZGUgdG8gYWxsb3cgcmVzZXJ2ZSBtYXBwaW5nIGZyb20gdGhlIG5vZGUKCQkJICogdG8gdGhlIGFvRGF0YSBhcnJheSBmb3IgZmFzdCBsb29rIHVwCgkJCSAqLwoJCQluVHIuX0RUX1Jvd0luZGV4ID0gaVJvdzsKCQoJCQkvKiBTcGVjaWFsIHBhcmFtZXRlcnMgY2FuIGJlIGdpdmVuIGJ5IHRoZSBkYXRhIHNvdXJjZSB0byBiZSB1c2VkIG9uIHRoZSByb3cgKi8KCQkJX2ZuUm93QXR0cmlidXRlcyggb1NldHRpbmdzLCByb3cgKTsKCQoJCQkvKiBQcm9jZXNzIGVhY2ggY29sdW1uICovCgkJCWZvciAoIGk9MCwgaUxlbj1vU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCW9Db2wgPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldOwoJCQkJY3JlYXRlID0gblRySW4gPyBmYWxzZSA6IHRydWU7CgkKCQkJCW5UZCA9IGNyZWF0ZSA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIG9Db2wuc0NlbGxUeXBlICkgOiBhblRkc1tpXTsKCQkJCW5UZC5fRFRfQ2VsbEluZGV4ID0gewoJCQkJCXJvdzogaVJvdywKCQkJCQljb2x1bW46IGkKCQkJCX07CgkJCQkKCQkJCWNlbGxzLnB1c2goIG5UZCApOwoJCgkJCQkvLyBOZWVkIHRvIGNyZWF0ZSB0aGUgSFRNTCBpZiBuZXcsIG9yIGlmIGEgcmVuZGVyaW5nIGZ1bmN0aW9uIGlzIGRlZmluZWQKCQkJCWlmICggY3JlYXRlIHx8ICgoIW5UckluIHx8IG9Db2wubVJlbmRlciB8fCBvQ29sLm1EYXRhICE9PSBpKSAmJgoJCQkJCSAoISQuaXNQbGFpbk9iamVjdChvQ29sLm1EYXRhKSB8fCBvQ29sLm1EYXRhLl8gIT09IGkrJy5kaXNwbGF5JykKCQkJCSkpIHsKCQkJCQluVGQuaW5uZXJIVE1MID0gX2ZuR2V0Q2VsbERhdGEoIG9TZXR0aW5ncywgaVJvdywgaSwgJ2Rpc3BsYXknICk7CgkJCQl9CgkKCQkJCS8qIEFkZCB1c2VyIGRlZmluZWQgY2xhc3MgKi8KCQkJCWlmICggb0NvbC5zQ2xhc3MgKQoJCQkJewoJCQkJCW5UZC5jbGFzc05hbWUgKz0gJyAnK29Db2wuc0NsYXNzOwoJCQkJfQoJCgkJCQkvLyBWaXNpYmlsaXR5IC0gYWRkIG9yIHJlbW92ZSBhcyByZXF1aXJlZAoJCQkJaWYgKCBvQ29sLmJWaXNpYmxlICYmICEgblRySW4gKQoJCQkJewoJCQkJCW5Uci5hcHBlbmRDaGlsZCggblRkICk7CgkJCQl9CgkJCQllbHNlIGlmICggISBvQ29sLmJWaXNpYmxlICYmIG5UckluICkKCQkJCXsKCQkJCQluVGQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggblRkICk7CgkJCQl9CgkKCQkJCWlmICggb0NvbC5mbkNyZWF0ZWRDZWxsICkKCQkJCXsKCQkJCQlvQ29sLmZuQ3JlYXRlZENlbGwuY2FsbCggb1NldHRpbmdzLm9JbnN0YW5jZSwKCQkJCQkJblRkLCBfZm5HZXRDZWxsRGF0YSggb1NldHRpbmdzLCBpUm93LCBpICksIHJvd0RhdGEsIGlSb3csIGkKCQkJCQkpOwoJCQkJfQoJCQl9CgkKCQkJX2ZuQ2FsbGJhY2tGaXJlKCBvU2V0dGluZ3MsICdhb1Jvd0NyZWF0ZWRDYWxsYmFjaycsIG51bGwsIFtuVHIsIHJvd0RhdGEsIGlSb3csIGNlbGxzXSApOwoJCX0KCQoJCS8vIFJlbW92ZSBvbmNlIHdlYmtpdCBidWcgMTMxODE5IGFuZCBDaHJvbWl1bSBidWcgMzY1NjE5IGhhdmUgYmVlbiByZXNvbHZlZAoJCS8vIGFuZCBkZXBsb3llZAoJCXJvdy5uVHIuc2V0QXR0cmlidXRlKCAncm9sZScsICdyb3cnICk7Cgl9CgkKCQoJLyoqCgkgKiBBZGQgYXR0cmlidXRlcyB0byBhIHJvdyBiYXNlZCBvbiB0aGUgc3BlY2lhbCBgRFRfKmAgcGFyYW1ldGVycyBpbiBhIGRhdGEKCSAqIHNvdXJjZSBvYmplY3QuCgkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHtvYmplY3R9IERhdGFUYWJsZXMgcm93IG9iamVjdCBmb3IgdGhlIHJvdyB0byBiZSBtb2RpZmllZAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5Sb3dBdHRyaWJ1dGVzKCBzZXR0aW5ncywgcm93ICkKCXsKCQl2YXIgdHIgPSByb3cublRyOwoJCXZhciBkYXRhID0gcm93Ll9hRGF0YTsKCQoJCWlmICggdHIgKSB7CgkJCXZhciBpZCA9IHNldHRpbmdzLnJvd0lkRm4oIGRhdGEgKTsKCQoJCQlpZiAoIGlkICkgewoJCQkJdHIuaWQgPSBpZDsKCQkJfQoJCgkJCWlmICggZGF0YS5EVF9Sb3dDbGFzcyApIHsKCQkJCS8vIFJlbW92ZSBhbnkgY2xhc3NlcyBhZGRlZCBieSBEVF9Sb3dDbGFzcyBiZWZvcmUKCQkJCXZhciBhID0gZGF0YS5EVF9Sb3dDbGFzcy5zcGxpdCgnICcpOwoJCQkJcm93Ll9fcm93YyA9IHJvdy5fX3Jvd2MgPwoJCQkJCV91bmlxdWUoIHJvdy5fX3Jvd2MuY29uY2F0KCBhICkgKSA6CgkJCQkJYTsKCQoJCQkJJCh0cikKCQkJCQkucmVtb3ZlQ2xhc3MoIHJvdy5fX3Jvd2Muam9pbignICcpICkKCQkJCQkuYWRkQ2xhc3MoIGRhdGEuRFRfUm93Q2xhc3MgKTsKCQkJfQoJCgkJCWlmICggZGF0YS5EVF9Sb3dBdHRyICkgewoJCQkJJCh0cikuYXR0ciggZGF0YS5EVF9Sb3dBdHRyICk7CgkJCX0KCQoJCQlpZiAoIGRhdGEuRFRfUm93RGF0YSApIHsKCQkJCSQodHIpLmRhdGEoIGRhdGEuRFRfUm93RGF0YSApOwoJCQl9CgkJfQoJfQoJCgkKCS8qKgoJICogQ3JlYXRlIHRoZSBIVE1MIGhlYWRlciBmb3IgdGhlIHRhYmxlCgkgKiAgQHBhcmFtIHtvYmplY3R9IG9TZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5CdWlsZEhlYWQoIG9TZXR0aW5ncyApCgl7CgkJdmFyIGksIGllbiwgY2VsbCwgcm93LCBjb2x1bW47CgkJdmFyIHRoZWFkID0gb1NldHRpbmdzLm5USGVhZDsKCQl2YXIgdGZvb3QgPSBvU2V0dGluZ3MublRGb290OwoJCXZhciBjcmVhdGVIZWFkZXIgPSAkKCd0aCwgdGQnLCB0aGVhZCkubGVuZ3RoID09PSAwOwoJCXZhciBjbGFzc2VzID0gb1NldHRpbmdzLm9DbGFzc2VzOwoJCXZhciBjb2x1bW5zID0gb1NldHRpbmdzLmFvQ29sdW1uczsKCQoJCWlmICggY3JlYXRlSGVhZGVyICkgewoJCQlyb3cgPSAkKCc8dHIvPicpLmFwcGVuZFRvKCB0aGVhZCApOwoJCX0KCQoJCWZvciAoIGk9MCwgaWVuPWNvbHVtbnMubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCWNvbHVtbiA9IGNvbHVtbnNbaV07CgkJCWNlbGwgPSAkKCBjb2x1bW4ublRoICkuYWRkQ2xhc3MoIGNvbHVtbi5zQ2xhc3MgKTsKCQoJCQlpZiAoIGNyZWF0ZUhlYWRlciApIHsKCQkJCWNlbGwuYXBwZW5kVG8oIHJvdyApOwoJCQl9CgkKCQkJLy8gMS4xMSBtb3ZlIGludG8gc29ydGluZwoJCQlpZiAoIG9TZXR0aW5ncy5vRmVhdHVyZXMuYlNvcnQgKSB7CgkJCQljZWxsLmFkZENsYXNzKCBjb2x1bW4uc1NvcnRpbmdDbGFzcyApOwoJCgkJCQlpZiAoIGNvbHVtbi5iU29ydGFibGUgIT09IGZhbHNlICkgewoJCQkJCWNlbGwKCQkJCQkJLmF0dHIoICd0YWJpbmRleCcsIG9TZXR0aW5ncy5pVGFiSW5kZXggKQoJCQkJCQkuYXR0ciggJ2FyaWEtY29udHJvbHMnLCBvU2V0dGluZ3Muc1RhYmxlSWQgKTsKCQoJCQkJCV9mblNvcnRBdHRhY2hMaXN0ZW5lciggb1NldHRpbmdzLCBjb2x1bW4ublRoLCBpICk7CgkJCQl9CgkJCX0KCQoJCQlpZiAoIGNvbHVtbi5zVGl0bGUgIT0gY2VsbFswXS5pbm5lckhUTUwgKSB7CgkJCQljZWxsLmh0bWwoIGNvbHVtbi5zVGl0bGUgKTsKCQkJfQoJCgkJCV9mblJlbmRlcmVyKCBvU2V0dGluZ3MsICdoZWFkZXInICkoCgkJCQlvU2V0dGluZ3MsIGNlbGwsIGNvbHVtbiwgY2xhc3NlcwoJCQkpOwoJCX0KCQoJCWlmICggY3JlYXRlSGVhZGVyICkgewoJCQlfZm5EZXRlY3RIZWFkZXIoIG9TZXR0aW5ncy5hb0hlYWRlciwgdGhlYWQgKTsKCQl9CgkJCgkJLyogQVJJQSByb2xlIGZvciB0aGUgcm93cyAqLwoJIAkkKHRoZWFkKS5maW5kKCc+dHInKS5hdHRyKCdyb2xlJywgJ3JvdycpOwoJCgkJLyogRGVhbCB3aXRoIHRoZSBmb290ZXIgLSBhZGQgY2xhc3NlcyBpZiByZXF1aXJlZCAqLwoJCSQodGhlYWQpLmZpbmQoJz50cj50aCwgPnRyPnRkJykuYWRkQ2xhc3MoIGNsYXNzZXMuc0hlYWRlclRIICk7CgkJJCh0Zm9vdCkuZmluZCgnPnRyPnRoLCA+dHI+dGQnKS5hZGRDbGFzcyggY2xhc3Nlcy5zRm9vdGVyVEggKTsKCQoJCS8vIENhY2hlIHRoZSBmb290ZXIgY2VsbHMuIE5vdGUgdGhhdCB3ZSBvbmx5IHRha2UgdGhlIGNlbGxzIGZyb20gdGhlIGZpcnN0CgkJLy8gcm93IGluIHRoZSBmb290ZXIuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcm93IHRoZSB1c2VyIHdhbnRzIHRvCgkJLy8gaW50ZXJhY3Qgd2l0aCwgdGhleSBuZWVkIHRvIHVzZSB0aGUgdGFibGUoKS5mb290KCkgbWV0aG9kLiBOb3RlIGFsc28gdGhpcwoJCS8vIGFsbG93cyBjZWxscyB0byBiZSB1c2VkIGZvciBtdWx0aXBsZSBjb2x1bW5zIHVzaW5nIGNvbHNwYW4KCQlpZiAoIHRmb290ICE9PSBudWxsICkgewoJCQl2YXIgY2VsbHMgPSBvU2V0dGluZ3MuYW9Gb290ZXJbMF07CgkKCQkJZm9yICggaT0wLCBpZW49Y2VsbHMubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQljb2x1bW4gPSBjb2x1bW5zW2ldOwoJCQkJY29sdW1uLm5UZiA9IGNlbGxzW2ldLmNlbGw7CgkKCQkJCWlmICggY29sdW1uLnNDbGFzcyApIHsKCQkJCQkkKGNvbHVtbi5uVGYpLmFkZENsYXNzKCBjb2x1bW4uc0NsYXNzICk7CgkJCQl9CgkJCX0KCQl9Cgl9CgkKCQoJLyoqCgkgKiBEcmF3IHRoZSBoZWFkZXIgKG9yIGZvb3RlcikgZWxlbWVudCBiYXNlZCBvbiB0aGUgY29sdW1uIHZpc2liaWxpdHkgc3RhdGVzLiBUaGUKCSAqIG1ldGhvZG9sb2d5IGhlcmUgaXMgdG8gdXNlIHRoZSBsYXlvdXQgYXJyYXkgZnJvbSBfZm5EZXRlY3RIZWFkZXIsIG1vZGlmaWVkIGZvcgoJICogdGhlIGluc3RhbnRhbmVvdXMgY29sdW1uIHZpc2liaWxpdHksIHRvIGNvbnN0cnVjdCB0aGUgbmV3IGxheW91dC4gVGhlIGdyaWQgaXMKCSAqIHRyYXZlcnNlZCBvdmVyIGNlbGwgYXQgYSB0aW1lIGluIGEgcm93cyB4IGNvbHVtbnMgZ3JpZCBmYXNoaW9uLCBhbHRob3VnaCBlYWNoCgkgKiBjZWxsIGluc2VydCBjYW4gY292ZXIgbXVsdGlwbGUgZWxlbWVudHMgaW4gdGhlIGdyaWQgLSB3aGljaCBpcyB0cmFja3MgdXNpbmcgdGhlCgkgKiBhQXBwbGllZCBhcnJheS4gQ2VsbCBpbnNlcnRzIGluIHRoZSBncmlkIHdpbGwgb25seSBvY2N1ciB3aGVyZSB0aGVyZSBpc24ndAoJICogYWxyZWFkeSBhIGNlbGwgaW4gdGhhdCBwb3NpdGlvbi4KCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIGFycmF5IHtvYmplY3RzfSBhb1NvdXJjZSBMYXlvdXQgYXJyYXkgZnJvbSBfZm5EZXRlY3RIZWFkZXIKCSAqICBAcGFyYW0ge2Jvb2xlYW59IFtiSW5jbHVkZUhpZGRlbj1mYWxzZV0gSWYgdHJ1ZSB0aGVuIGluY2x1ZGUgdGhlIGhpZGRlbiBjb2x1bW5zIGluIHRoZSBjYWxjLAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5EcmF3SGVhZCggb1NldHRpbmdzLCBhb1NvdXJjZSwgYkluY2x1ZGVIaWRkZW4gKQoJewoJCXZhciBpLCBpTGVuLCBqLCBqTGVuLCBrLCBrTGVuLCBuLCBuTG9jYWxUcjsKCQl2YXIgYW9Mb2NhbCA9IFtdOwoJCXZhciBhQXBwbGllZCA9IFtdOwoJCXZhciBpQ29sdW1ucyA9IG9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoOwoJCXZhciBpUm93c3BhbiwgaUNvbHNwYW47CgkKCQlpZiAoICEgYW9Tb3VyY2UgKQoJCXsKCQkJcmV0dXJuOwoJCX0KCQoJCWlmICggIGJJbmNsdWRlSGlkZGVuID09PSB1bmRlZmluZWQgKQoJCXsKCQkJYkluY2x1ZGVIaWRkZW4gPSBmYWxzZTsKCQl9CgkKCQkvKiBNYWtlIGEgY29weSBvZiB0aGUgbWFzdGVyIGxheW91dCBhcnJheSwgYnV0IHdpdGhvdXQgdGhlIHZpc2libGUgY29sdW1ucyBpbiBpdCAqLwoJCWZvciAoIGk9MCwgaUxlbj1hb1NvdXJjZS5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCXsKCQkJYW9Mb2NhbFtpXSA9IGFvU291cmNlW2ldLnNsaWNlKCk7CgkJCWFvTG9jYWxbaV0ublRyID0gYW9Tb3VyY2VbaV0ublRyOwoJCgkJCS8qIFJlbW92ZSBhbnkgY29sdW1ucyB3aGljaCBhcmUgY3VycmVudGx5IGhpZGRlbiAqLwoJCQlmb3IgKCBqPWlDb2x1bW5zLTEgOyBqPj0wIDsgai0tICkKCQkJewoJCQkJaWYgKCAhb1NldHRpbmdzLmFvQ29sdW1uc1tqXS5iVmlzaWJsZSAmJiAhYkluY2x1ZGVIaWRkZW4gKQoJCQkJewoJCQkJCWFvTG9jYWxbaV0uc3BsaWNlKCBqLCAxICk7CgkJCQl9CgkJCX0KCQoJCQkvKiBQcmVwIHRoZSBhcHBsaWVkIGFycmF5IC0gaXQgbmVlZHMgYW4gZWxlbWVudCBmb3IgZWFjaCByb3cgKi8KCQkJYUFwcGxpZWQucHVzaCggW10gKTsKCQl9CgkKCQlmb3IgKCBpPTAsIGlMZW49YW9Mb2NhbC5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCXsKCQkJbkxvY2FsVHIgPSBhb0xvY2FsW2ldLm5UcjsKCQoJCQkvKiBBbGwgY2VsbHMgYXJlIGdvaW5nIHRvIGJlIHJlcGxhY2VkLCBzbyBlbXB0eSBvdXQgdGhlIHJvdyAqLwoJCQlpZiAoIG5Mb2NhbFRyICkKCQkJewoJCQkJd2hpbGUoIChuID0gbkxvY2FsVHIuZmlyc3RDaGlsZCkgKQoJCQkJewoJCQkJCW5Mb2NhbFRyLnJlbW92ZUNoaWxkKCBuICk7CgkJCQl9CgkJCX0KCQoJCQlmb3IgKCBqPTAsIGpMZW49YW9Mb2NhbFtpXS5sZW5ndGggOyBqPGpMZW4gOyBqKysgKQoJCQl7CgkJCQlpUm93c3BhbiA9IDE7CgkJCQlpQ29sc3BhbiA9IDE7CgkKCQkJCS8qIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgY2VsbCAocm93L2NvbHNwYW4pIGNvdmVyaW5nIG91ciB0YXJnZXQKCQkJCSAqIGluc2VydCBwb2ludC4gSWYgdGhlcmUgaXMsIHRoZW4gdGhlcmUgaXMgbm90aGluZyB0byBkby4KCQkJCSAqLwoJCQkJaWYgKCBhQXBwbGllZFtpXVtqXSA9PT0gdW5kZWZpbmVkICkKCQkJCXsKCQkJCQluTG9jYWxUci5hcHBlbmRDaGlsZCggYW9Mb2NhbFtpXVtqXS5jZWxsICk7CgkJCQkJYUFwcGxpZWRbaV1bal0gPSAxOwoJCgkJCQkJLyogRXhwYW5kIHRoZSBjZWxsIHRvIGNvdmVyIGFzIG1hbnkgcm93cyBhcyBuZWVkZWQgKi8KCQkJCQl3aGlsZSAoIGFvTG9jYWxbaStpUm93c3Bhbl0gIT09IHVuZGVmaW5lZCAmJgoJCQkJCSAgICAgICAgYW9Mb2NhbFtpXVtqXS5jZWxsID09IGFvTG9jYWxbaStpUm93c3Bhbl1bal0uY2VsbCApCgkJCQkJewoJCQkJCQlhQXBwbGllZFtpK2lSb3dzcGFuXVtqXSA9IDE7CgkJCQkJCWlSb3dzcGFuKys7CgkJCQkJfQoJCgkJCQkJLyogRXhwYW5kIHRoZSBjZWxsIHRvIGNvdmVyIGFzIG1hbnkgY29sdW1ucyBhcyBuZWVkZWQgKi8KCQkJCQl3aGlsZSAoIGFvTG9jYWxbaV1baitpQ29sc3Bhbl0gIT09IHVuZGVmaW5lZCAmJgoJCQkJCSAgICAgICAgYW9Mb2NhbFtpXVtqXS5jZWxsID09IGFvTG9jYWxbaV1baitpQ29sc3Bhbl0uY2VsbCApCgkJCQkJewoJCQkJCQkvKiBNdXN0IHVwZGF0ZSB0aGUgYXBwbGllZCBhcnJheSBvdmVyIHRoZSByb3dzIGZvciB0aGUgY29sdW1ucyAqLwoJCQkJCQlmb3IgKCBrPTAgOyBrPGlSb3dzcGFuIDsgaysrICkKCQkJCQkJewoJCQkJCQkJYUFwcGxpZWRbaStrXVtqK2lDb2xzcGFuXSA9IDE7CgkJCQkJCX0KCQkJCQkJaUNvbHNwYW4rKzsKCQkJCQl9CgkKCQkJCQkvKiBEbyB0aGUgYWN0dWFsIGV4cGFuc2lvbiBpbiB0aGUgRE9NICovCgkJCQkJJChhb0xvY2FsW2ldW2pdLmNlbGwpCgkJCQkJCS5hdHRyKCdyb3dzcGFuJywgaVJvd3NwYW4pCgkJCQkJCS5hdHRyKCdjb2xzcGFuJywgaUNvbHNwYW4pOwoJCQkJfQoJCQl9CgkJfQoJfQoJCgkKCS8qKgoJICogSW5zZXJ0IHRoZSByZXF1aXJlZCBUUiBub2RlcyBpbnRvIHRoZSB0YWJsZSBmb3IgZGlzcGxheQoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuRHJhdyggb1NldHRpbmdzICkKCXsKCQkvKiBQcm92aWRlIGEgcHJlLWNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNhbmNlbCB0aGUgZHJhdyBpcyBmYWxzZSBpcyByZXR1cm5lZCAqLwoJCXZhciBhUHJlRHJhdyA9IF9mbkNhbGxiYWNrRmlyZSggb1NldHRpbmdzLCAnYW9QcmVEcmF3Q2FsbGJhY2snLCAncHJlRHJhdycsIFtvU2V0dGluZ3NdICk7CgkJaWYgKCAkLmluQXJyYXkoIGZhbHNlLCBhUHJlRHJhdyApICE9PSAtMSApCgkJewoJCQlfZm5Qcm9jZXNzaW5nRGlzcGxheSggb1NldHRpbmdzLCBmYWxzZSApOwoJCQlyZXR1cm47CgkJfQoJCgkJdmFyIGksIGlMZW4sIG47CgkJdmFyIGFuUm93cyA9IFtdOwoJCXZhciBpUm93Q291bnQgPSAwOwoJCXZhciBhc1N0cmlwZUNsYXNzZXMgPSBvU2V0dGluZ3MuYXNTdHJpcGVDbGFzc2VzOwoJCXZhciBpU3RyaXBlcyA9IGFzU3RyaXBlQ2xhc3Nlcy5sZW5ndGg7CgkJdmFyIGlPcGVuUm93cyA9IG9TZXR0aW5ncy5hb09wZW5Sb3dzLmxlbmd0aDsKCQl2YXIgb0xhbmcgPSBvU2V0dGluZ3Mub0xhbmd1YWdlOwoJCXZhciBpSW5pdERpc3BsYXlTdGFydCA9IG9TZXR0aW5ncy5pSW5pdERpc3BsYXlTdGFydDsKCQl2YXIgYlNlcnZlclNpZGUgPSBfZm5EYXRhU291cmNlKCBvU2V0dGluZ3MgKSA9PSAnc3NwJzsKCQl2YXIgYWlEaXNwbGF5ID0gb1NldHRpbmdzLmFpRGlzcGxheTsKCQoJCW9TZXR0aW5ncy5iRHJhd2luZyA9IHRydWU7CgkKCQkvKiBDaGVjayBhbmQgc2VlIGlmIHdlIGhhdmUgYW4gaW5pdGlhbCBkcmF3IHBvc2l0aW9uIGZyb20gc3RhdGUgc2F2aW5nICovCgkJaWYgKCBpSW5pdERpc3BsYXlTdGFydCAhPT0gdW5kZWZpbmVkICYmIGlJbml0RGlzcGxheVN0YXJ0ICE9PSAtMSApCgkJewoJCQlvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPSBiU2VydmVyU2lkZSA/CgkJCQlpSW5pdERpc3BsYXlTdGFydCA6CgkJCQlpSW5pdERpc3BsYXlTdGFydCA+PSBvU2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpID8KCQkJCQkwIDoKCQkJCQlpSW5pdERpc3BsYXlTdGFydDsKCQoJCQlvU2V0dGluZ3MuaUluaXREaXNwbGF5U3RhcnQgPSAtMTsKCQl9CgkKCQl2YXIgaURpc3BsYXlTdGFydCA9IG9TZXR0aW5ncy5faURpc3BsYXlTdGFydDsKCQl2YXIgaURpc3BsYXlFbmQgPSBvU2V0dGluZ3MuZm5EaXNwbGF5RW5kKCk7CgkKCQkvKiBTZXJ2ZXItc2lkZSBwcm9jZXNzaW5nIGRyYXcgaW50ZXJjZXB0ICovCgkJaWYgKCBvU2V0dGluZ3MuYkRlZmVyTG9hZGluZyApCgkJewoJCQlvU2V0dGluZ3MuYkRlZmVyTG9hZGluZyA9IGZhbHNlOwoJCQlvU2V0dGluZ3MuaURyYXcrKzsKCQkJX2ZuUHJvY2Vzc2luZ0Rpc3BsYXkoIG9TZXR0aW5ncywgZmFsc2UgKTsKCQl9CgkJZWxzZSBpZiAoICFiU2VydmVyU2lkZSApCgkJewoJCQlvU2V0dGluZ3MuaURyYXcrKzsKCQl9CgkJZWxzZSBpZiAoICFvU2V0dGluZ3MuYkRlc3Ryb3lpbmcgJiYgIV9mbkFqYXhVcGRhdGUoIG9TZXR0aW5ncyApICkKCQl7CgkJCXJldHVybjsKCQl9CgkKCQlpZiAoIGFpRGlzcGxheS5sZW5ndGggIT09IDAgKQoJCXsKCQkJdmFyIGlTdGFydCA9IGJTZXJ2ZXJTaWRlID8gMCA6IGlEaXNwbGF5U3RhcnQ7CgkJCXZhciBpRW5kID0gYlNlcnZlclNpZGUgPyBvU2V0dGluZ3MuYW9EYXRhLmxlbmd0aCA6IGlEaXNwbGF5RW5kOwoJCgkJCWZvciAoIHZhciBqPWlTdGFydCA7IGo8aUVuZCA7IGorKyApCgkJCXsKCQkJCXZhciBpRGF0YUluZGV4ID0gYWlEaXNwbGF5W2pdOwoJCQkJdmFyIGFvRGF0YSA9IG9TZXR0aW5ncy5hb0RhdGFbIGlEYXRhSW5kZXggXTsKCQkJCWlmICggYW9EYXRhLm5UciA9PT0gbnVsbCApCgkJCQl7CgkJCQkJX2ZuQ3JlYXRlVHIoIG9TZXR0aW5ncywgaURhdGFJbmRleCApOwoJCQkJfQoJCgkJCQl2YXIgblJvdyA9IGFvRGF0YS5uVHI7CgkKCQkJCS8qIFJlbW92ZSB0aGUgb2xkIHN0cmlwaW5nIGNsYXNzZXMgYW5kIHRoZW4gYWRkIHRoZSBuZXcgb25lICovCgkJCQlpZiAoIGlTdHJpcGVzICE9PSAwICkKCQkJCXsKCQkJCQl2YXIgc1N0cmlwZSA9IGFzU3RyaXBlQ2xhc3Nlc1sgaVJvd0NvdW50ICUgaVN0cmlwZXMgXTsKCQkJCQlpZiAoIGFvRGF0YS5fc1Jvd1N0cmlwZSAhPSBzU3RyaXBlICkKCQkJCQl7CgkJCQkJCSQoblJvdykucmVtb3ZlQ2xhc3MoIGFvRGF0YS5fc1Jvd1N0cmlwZSApLmFkZENsYXNzKCBzU3RyaXBlICk7CgkJCQkJCWFvRGF0YS5fc1Jvd1N0cmlwZSA9IHNTdHJpcGU7CgkJCQkJfQoJCQkJfQoJCgkJCQkvLyBSb3cgY2FsbGJhY2sgZnVuY3Rpb25zIC0gbWlnaHQgd2FudCB0byBtYW5pcHVsYXRlIHRoZSByb3cKCQkJCS8vIGlSb3dDb3VudCBhbmQgaiBhcmUgbm90IGN1cnJlbnRseSBkb2N1bWVudGVkLiBBcmUgdGhleSBhdCBhbGwKCQkJCS8vIHVzZWZ1bD8KCQkJCV9mbkNhbGxiYWNrRmlyZSggb1NldHRpbmdzLCAnYW9Sb3dDYWxsYmFjaycsIG51bGwsCgkJCQkJW25Sb3csIGFvRGF0YS5fYURhdGEsIGlSb3dDb3VudCwgaiwgaURhdGFJbmRleF0gKTsKCQoJCQkJYW5Sb3dzLnB1c2goIG5Sb3cgKTsKCQkJCWlSb3dDb3VudCsrOwoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCS8qIFRhYmxlIGlzIGVtcHR5IC0gY3JlYXRlIGEgcm93IHdpdGggYW4gZW1wdHkgbWVzc2FnZSBpbiBpdCAqLwoJCQl2YXIgc1plcm8gPSBvTGFuZy5zWmVyb1JlY29yZHM7CgkJCWlmICggb1NldHRpbmdzLmlEcmF3ID09IDEgJiYgIF9mbkRhdGFTb3VyY2UoIG9TZXR0aW5ncyApID09ICdhamF4JyApCgkJCXsKCQkJCXNaZXJvID0gb0xhbmcuc0xvYWRpbmdSZWNvcmRzOwoJCQl9CgkJCWVsc2UgaWYgKCBvTGFuZy5zRW1wdHlUYWJsZSAmJiBvU2V0dGluZ3MuZm5SZWNvcmRzVG90YWwoKSA9PT0gMCApCgkJCXsKCQkJCXNaZXJvID0gb0xhbmcuc0VtcHR5VGFibGU7CgkJCX0KCQoJCQlhblJvd3NbIDAgXSA9ICQoICc8dHIvPicsIHsgJ2NsYXNzJzogaVN0cmlwZXMgPyBhc1N0cmlwZUNsYXNzZXNbMF0gOiAnJyB9ICkKCQkJCS5hcHBlbmQoICQoJzx0ZCAvPicsIHsKCQkJCQkndmFsaWduJzogICd0b3AnLAoJCQkJCSdjb2xTcGFuJzogX2ZuVmlzYmxlQ29sdW1ucyggb1NldHRpbmdzICksCgkJCQkJJ2NsYXNzJzogICBvU2V0dGluZ3Mub0NsYXNzZXMuc1Jvd0VtcHR5CgkJCQl9ICkuaHRtbCggc1plcm8gKSApWzBdOwoJCX0KCQoJCS8qIEhlYWRlciBhbmQgZm9vdGVyIGNhbGxiYWNrcyAqLwoJCV9mbkNhbGxiYWNrRmlyZSggb1NldHRpbmdzLCAnYW9IZWFkZXJDYWxsYmFjaycsICdoZWFkZXInLCBbICQob1NldHRpbmdzLm5USGVhZCkuY2hpbGRyZW4oJ3RyJylbMF0sCgkJCV9mbkdldERhdGFNYXN0ZXIoIG9TZXR0aW5ncyApLCBpRGlzcGxheVN0YXJ0LCBpRGlzcGxheUVuZCwgYWlEaXNwbGF5IF0gKTsKCQoJCV9mbkNhbGxiYWNrRmlyZSggb1NldHRpbmdzLCAnYW9Gb290ZXJDYWxsYmFjaycsICdmb290ZXInLCBbICQob1NldHRpbmdzLm5URm9vdCkuY2hpbGRyZW4oJ3RyJylbMF0sCgkJCV9mbkdldERhdGFNYXN0ZXIoIG9TZXR0aW5ncyApLCBpRGlzcGxheVN0YXJ0LCBpRGlzcGxheUVuZCwgYWlEaXNwbGF5IF0gKTsKCQoJCXZhciBib2R5ID0gJChvU2V0dGluZ3MublRCb2R5KTsKCQoJCWJvZHkuY2hpbGRyZW4oKS5kZXRhY2goKTsKCQlib2R5LmFwcGVuZCggJChhblJvd3MpICk7CgkKCQkvKiBDYWxsIGFsbCByZXF1aXJlZCBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHRoZSBlbmQgb2YgYSBkcmF3ICovCgkJX2ZuQ2FsbGJhY2tGaXJlKCBvU2V0dGluZ3MsICdhb0RyYXdDYWxsYmFjaycsICdkcmF3JywgW29TZXR0aW5nc10gKTsKCQoJCS8qIERyYXcgaXMgY29tcGxldGUsIHNvcnRpbmcgYW5kIGZpbHRlcmluZyBtdXN0IGJlIGFzIHdlbGwgKi8KCQlvU2V0dGluZ3MuYlNvcnRlZCA9IGZhbHNlOwoJCW9TZXR0aW5ncy5iRmlsdGVyZWQgPSBmYWxzZTsKCQlvU2V0dGluZ3MuYkRyYXdpbmcgPSBmYWxzZTsKCX0KCQoJCgkvKioKCSAqIFJlZHJhdyB0aGUgdGFibGUgLSB0YWtpbmcgYWNjb3VudCBvZiB0aGUgdmFyaW91cyBmZWF0dXJlcyB3aGljaCBhcmUgZW5hYmxlZAoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge2Jvb2xlYW59IFtob2xkUG9zaXRpb25dIEtlZXAgdGhlIGN1cnJlbnQgcGFnaW5nIHBvc2l0aW9uLiBCeSBkZWZhdWx0CgkgKiAgICB0aGUgcGFnaW5nIGlzIHJlc2V0IHRvIHRoZSBmaXJzdCBwYWdlCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mblJlRHJhdyggc2V0dGluZ3MsIGhvbGRQb3NpdGlvbiApCgl7CgkJdmFyCgkJCWZlYXR1cmVzID0gc2V0dGluZ3Mub0ZlYXR1cmVzLAoJCQlzb3J0ICAgICA9IGZlYXR1cmVzLmJTb3J0LAoJCQlmaWx0ZXIgICA9IGZlYXR1cmVzLmJGaWx0ZXI7CgkKCQlpZiAoIHNvcnQgKSB7CgkJCV9mblNvcnQoIHNldHRpbmdzICk7CgkJfQoJCgkJaWYgKCBmaWx0ZXIgKSB7CgkJCV9mbkZpbHRlckNvbXBsZXRlKCBzZXR0aW5ncywgc2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoICk7CgkJfQoJCWVsc2UgewoJCQkvLyBObyBmaWx0ZXJpbmcsIHNvIHdlIHdhbnQgdG8ganVzdCB1c2UgdGhlIGRpc3BsYXkgbWFzdGVyCgkJCXNldHRpbmdzLmFpRGlzcGxheSA9IHNldHRpbmdzLmFpRGlzcGxheU1hc3Rlci5zbGljZSgpOwoJCX0KCQoJCWlmICggaG9sZFBvc2l0aW9uICE9PSB0cnVlICkgewoJCQlzZXR0aW5ncy5faURpc3BsYXlTdGFydCA9IDA7CgkJfQoJCgkJLy8gTGV0IGFueSBtb2R1bGVzIGtub3cgYWJvdXQgdGhlIGRyYXcgaG9sZCBwb3NpdGlvbiBzdGF0ZSAodXNlZCBieQoJCS8vIHNjcm9sbGluZyBpbnRlcm5hbGx5KQoJCXNldHRpbmdzLl9kcmF3SG9sZCA9IGhvbGRQb3NpdGlvbjsKCQoJCV9mbkRyYXcoIHNldHRpbmdzICk7CgkKCQlzZXR0aW5ncy5fZHJhd0hvbGQgPSBmYWxzZTsKCX0KCQoJCgkvKioKCSAqIEFkZCB0aGUgb3B0aW9ucyB0byB0aGUgcGFnZSBIVE1MIGZvciB0aGUgdGFibGUKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkFkZE9wdGlvbnNIdG1sICggb1NldHRpbmdzICkKCXsKCQl2YXIgY2xhc3NlcyA9IG9TZXR0aW5ncy5vQ2xhc3NlczsKCQl2YXIgdGFibGUgPSAkKG9TZXR0aW5ncy5uVGFibGUpOwoJCXZhciBob2xkaW5nID0gJCgnPGRpdi8+JykuaW5zZXJ0QmVmb3JlKCB0YWJsZSApOyAvLyBIb2xkaW5nIGVsZW1lbnQgZm9yIHNwZWVkCgkJdmFyIGZlYXR1cmVzID0gb1NldHRpbmdzLm9GZWF0dXJlczsKCQoJCS8vIEFsbCBEYXRhVGFibGVzIGFyZSB3cmFwcGVkIGluIGEgZGl2CgkJdmFyIGluc2VydCA9ICQoJzxkaXYvPicsIHsKCQkJaWQ6ICAgICAgb1NldHRpbmdzLnNUYWJsZUlkKydfd3JhcHBlcicsCgkJCSdjbGFzcyc6IGNsYXNzZXMuc1dyYXBwZXIgKyAob1NldHRpbmdzLm5URm9vdCA/ICcnIDogJyAnK2NsYXNzZXMuc05vRm9vdGVyKQoJCX0gKTsKCQoJCW9TZXR0aW5ncy5uSG9sZGluZyA9IGhvbGRpbmdbMF07CgkJb1NldHRpbmdzLm5UYWJsZVdyYXBwZXIgPSBpbnNlcnRbMF07CgkJb1NldHRpbmdzLm5UYWJsZVJlaW5zZXJ0QmVmb3JlID0gb1NldHRpbmdzLm5UYWJsZS5uZXh0U2libGluZzsKCQoJCS8qIExvb3Agb3ZlciB0aGUgdXNlciBzZXQgcG9zaXRpb25pbmcgYW5kIHBsYWNlIHRoZSBlbGVtZW50cyBhcyBuZWVkZWQgKi8KCQl2YXIgYURvbSA9IG9TZXR0aW5ncy5zRG9tLnNwbGl0KCcnKTsKCQl2YXIgZmVhdHVyZU5vZGUsIGNPcHRpb24sIG5OZXdOb2RlLCBjTmV4dCwgc0F0dHIsIGo7CgkJZm9yICggdmFyIGk9MCA7IGk8YURvbS5sZW5ndGggOyBpKysgKQoJCXsKCQkJZmVhdHVyZU5vZGUgPSBudWxsOwoJCQljT3B0aW9uID0gYURvbVtpXTsKCQoJCQlpZiAoIGNPcHRpb24gPT0gJzwnICkKCQkJewoJCQkJLyogTmV3IGNvbnRhaW5lciBkaXYgKi8KCQkJCW5OZXdOb2RlID0gJCgnPGRpdi8+JylbMF07CgkKCQkJCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQgYXBwZW5kIGFuIGlkIGFuZC9vciBhIGNsYXNzIG5hbWUgdG8gdGhlIGNvbnRhaW5lciAqLwoJCQkJY05leHQgPSBhRG9tW2krMV07CgkJCQlpZiAoIGNOZXh0ID09ICInIiB8fCBjTmV4dCA9PSAnIicgKQoJCQkJewoJCQkJCXNBdHRyID0gIiI7CgkJCQkJaiA9IDI7CgkJCQkJd2hpbGUgKCBhRG9tW2kral0gIT0gY05leHQgKQoJCQkJCXsKCQkJCQkJc0F0dHIgKz0gYURvbVtpK2pdOwoJCQkJCQlqKys7CgkJCQkJfQoJCgkJCQkJLyogUmVwbGFjZSBqUXVlcnkgVUkgY29uc3RhbnRzIEB0b2RvIGRlcHJlY2lhdGVkICovCgkJCQkJaWYgKCBzQXR0ciA9PSAiSCIgKQoJCQkJCXsKCQkJCQkJc0F0dHIgPSBjbGFzc2VzLnNKVUlIZWFkZXI7CgkJCQkJfQoJCQkJCWVsc2UgaWYgKCBzQXR0ciA9PSAiRiIgKQoJCQkJCXsKCQkJCQkJc0F0dHIgPSBjbGFzc2VzLnNKVUlGb290ZXI7CgkJCQkJfQoJCgkJCQkJLyogVGhlIGF0dHJpYnV0ZSBjYW4gYmUgaW4gdGhlIGZvcm1hdCBvZiAiI2lkLmNsYXNzIiwgIiNpZCIgb3IgImNsYXNzIiBUaGlzIGxvZ2ljCgkJCQkJICogYnJlYWtzIHRoZSBzdHJpbmcgaW50byBwYXJ0cyBhbmQgYXBwbGllcyB0aGVtIGFzIG5lZWRlZAoJCQkJCSAqLwoJCQkJCWlmICggc0F0dHIuaW5kZXhPZignLicpICE9IC0xICkKCQkJCQl7CgkJCQkJCXZhciBhU3BsaXQgPSBzQXR0ci5zcGxpdCgnLicpOwoJCQkJCQluTmV3Tm9kZS5pZCA9IGFTcGxpdFswXS5zdWJzdHIoMSwgYVNwbGl0WzBdLmxlbmd0aC0xKTsKCQkJCQkJbk5ld05vZGUuY2xhc3NOYW1lID0gYVNwbGl0WzFdOwoJCQkJCX0KCQkJCQllbHNlIGlmICggc0F0dHIuY2hhckF0KDApID09ICIjIiApCgkJCQkJewoJCQkJCQluTmV3Tm9kZS5pZCA9IHNBdHRyLnN1YnN0cigxLCBzQXR0ci5sZW5ndGgtMSk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCW5OZXdOb2RlLmNsYXNzTmFtZSA9IHNBdHRyOwoJCQkJCX0KCQoJCQkJCWkgKz0gajsgLyogTW92ZSBhbG9uZyB0aGUgcG9zaXRpb24gYXJyYXkgKi8KCQkJCX0KCQoJCQkJaW5zZXJ0LmFwcGVuZCggbk5ld05vZGUgKTsKCQkJCWluc2VydCA9ICQobk5ld05vZGUpOwoJCQl9CgkJCWVsc2UgaWYgKCBjT3B0aW9uID09ICc+JyApCgkJCXsKCQkJCS8qIEVuZCBjb250YWluZXIgZGl2ICovCgkJCQlpbnNlcnQgPSBpbnNlcnQucGFyZW50KCk7CgkJCX0KCQkJLy8gQHRvZG8gTW92ZSBvcHRpb25zIGludG8gdGhlaXIgb3duIHBsdWdpbnM/CgkJCWVsc2UgaWYgKCBjT3B0aW9uID09ICdsJyAmJiBmZWF0dXJlcy5iUGFnaW5hdGUgJiYgZmVhdHVyZXMuYkxlbmd0aENoYW5nZSApCgkJCXsKCQkJCS8qIExlbmd0aCAqLwoJCQkJZmVhdHVyZU5vZGUgPSBfZm5GZWF0dXJlSHRtbExlbmd0aCggb1NldHRpbmdzICk7CgkJCX0KCQkJZWxzZSBpZiAoIGNPcHRpb24gPT0gJ2YnICYmIGZlYXR1cmVzLmJGaWx0ZXIgKQoJCQl7CgkJCQkvKiBGaWx0ZXIgKi8KCQkJCWZlYXR1cmVOb2RlID0gX2ZuRmVhdHVyZUh0bWxGaWx0ZXIoIG9TZXR0aW5ncyApOwoJCQl9CgkJCWVsc2UgaWYgKCBjT3B0aW9uID09ICdyJyAmJiBmZWF0dXJlcy5iUHJvY2Vzc2luZyApCgkJCXsKCQkJCS8qIHBSb2Nlc3NpbmcgKi8KCQkJCWZlYXR1cmVOb2RlID0gX2ZuRmVhdHVyZUh0bWxQcm9jZXNzaW5nKCBvU2V0dGluZ3MgKTsKCQkJfQoJCQllbHNlIGlmICggY09wdGlvbiA9PSAndCcgKQoJCQl7CgkJCQkvKiBUYWJsZSAqLwoJCQkJZmVhdHVyZU5vZGUgPSBfZm5GZWF0dXJlSHRtbFRhYmxlKCBvU2V0dGluZ3MgKTsKCQkJfQoJCQllbHNlIGlmICggY09wdGlvbiA9PSAgJ2knICYmIGZlYXR1cmVzLmJJbmZvICkKCQkJewoJCQkJLyogSW5mbyAqLwoJCQkJZmVhdHVyZU5vZGUgPSBfZm5GZWF0dXJlSHRtbEluZm8oIG9TZXR0aW5ncyApOwoJCQl9CgkJCWVsc2UgaWYgKCBjT3B0aW9uID09ICdwJyAmJiBmZWF0dXJlcy5iUGFnaW5hdGUgKQoJCQl7CgkJCQkvKiBQYWdpbmF0aW9uICovCgkJCQlmZWF0dXJlTm9kZSA9IF9mbkZlYXR1cmVIdG1sUGFnaW5hdGUoIG9TZXR0aW5ncyApOwoJCQl9CgkJCWVsc2UgaWYgKCBEYXRhVGFibGUuZXh0LmZlYXR1cmUubGVuZ3RoICE9PSAwICkKCQkJewoJCQkJLyogUGx1Zy1pbiBmZWF0dXJlcyAqLwoJCQkJdmFyIGFvRmVhdHVyZXMgPSBEYXRhVGFibGUuZXh0LmZlYXR1cmU7CgkJCQlmb3IgKCB2YXIgaz0wLCBrTGVuPWFvRmVhdHVyZXMubGVuZ3RoIDsgazxrTGVuIDsgaysrICkKCQkJCXsKCQkJCQlpZiAoIGNPcHRpb24gPT0gYW9GZWF0dXJlc1trXS5jRmVhdHVyZSApCgkJCQkJewoJCQkJCQlmZWF0dXJlTm9kZSA9IGFvRmVhdHVyZXNba10uZm5Jbml0KCBvU2V0dGluZ3MgKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9CgkKCQkJLyogQWRkIHRvIHRoZSAyRCBmZWF0dXJlcyBhcnJheSAqLwoJCQlpZiAoIGZlYXR1cmVOb2RlICkKCQkJewoJCQkJdmFyIGFhbkZlYXR1cmVzID0gb1NldHRpbmdzLmFhbkZlYXR1cmVzOwoJCgkJCQlpZiAoICEgYWFuRmVhdHVyZXNbY09wdGlvbl0gKQoJCQkJewoJCQkJCWFhbkZlYXR1cmVzW2NPcHRpb25dID0gW107CgkJCQl9CgkKCQkJCWFhbkZlYXR1cmVzW2NPcHRpb25dLnB1c2goIGZlYXR1cmVOb2RlICk7CgkJCQlpbnNlcnQuYXBwZW5kKCBmZWF0dXJlTm9kZSApOwoJCQl9CgkJfQoJCgkJLyogQnVpbHQgb3VyIERPTSBzdHJ1Y3R1cmUgLSByZXBsYWNlIHRoZSBob2xkaW5nIGRpdiB3aXRoIHdoYXQgd2Ugd2FudCAqLwoJCWhvbGRpbmcucmVwbGFjZVdpdGgoIGluc2VydCApOwoJCW9TZXR0aW5ncy5uSG9sZGluZyA9IG51bGw7Cgl9CgkKCQoJLyoqCgkgKiBVc2UgdGhlIERPTSBzb3VyY2UgdG8gY3JlYXRlIHVwIGFuIGFycmF5IG9mIGhlYWRlciBjZWxscy4gVGhlIGlkZWEgaGVyZSBpcyB0bwoJICogY3JlYXRlIGEgbGF5b3V0IGdyaWQgKGFycmF5KSBvZiByb3dzIHggY29sdW1ucywgd2hpY2ggY29udGFpbnMgYSByZWZlcmVuY2UKCSAqIHRvIHRoZSBjZWxsIHRoYXQgdGhhdCBwb2ludCBpbiB0aGUgZ3JpZCAocmVnYXJkbGVzcyBvZiBjb2wvcm93c3BhbiksIHN1Y2ggdGhhdAoJICogYW55IGNvbHVtbiAvIHJvdyBjb3VsZCBiZSByZW1vdmVkIGFuZCB0aGUgbmV3IGdyaWQgY29uc3RydWN0ZWQKCSAqICBAcGFyYW0gYXJyYXkge29iamVjdH0gYUxheW91dCBBcnJheSB0byBzdG9yZSB0aGUgY2FsY3VsYXRlZCBsYXlvdXQgaW4KCSAqICBAcGFyYW0ge25vZGV9IG5UaGVhZCBUaGUgaGVhZGVyL2Zvb3RlciBlbGVtZW50IGZvciB0aGUgdGFibGUKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuRGV0ZWN0SGVhZGVyICggYUxheW91dCwgblRoZWFkICkKCXsKCQl2YXIgblRycyA9ICQoblRoZWFkKS5jaGlsZHJlbigndHInKTsKCQl2YXIgblRyLCBuQ2VsbDsKCQl2YXIgaSwgaywgbCwgaUxlbiwgakxlbiwgaUNvbFNoaWZ0ZWQsIGlDb2x1bW4sIGlDb2xzcGFuLCBpUm93c3BhbjsKCQl2YXIgYlVuaXF1ZTsKCQl2YXIgZm5TaGlmdENvbCA9IGZ1bmN0aW9uICggYSwgaSwgaiApIHsKCQkJdmFyIGsgPSBhW2ldOwoJICAgICAgICAgICAgICAgIHdoaWxlICgga1tqXSApIHsKCQkJCWorKzsKCQkJfQoJCQlyZXR1cm4gajsKCQl9OwoJCgkJYUxheW91dC5zcGxpY2UoIDAsIGFMYXlvdXQubGVuZ3RoICk7CgkKCQkvKiBXZSBrbm93IGhvdyBtYW55IHJvd3MgdGhlcmUgYXJlIGluIHRoZSBsYXlvdXQgLSBzbyBwcmVwIGl0ICovCgkJZm9yICggaT0wLCBpTGVuPW5UcnMubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQl7CgkJCWFMYXlvdXQucHVzaCggW10gKTsKCQl9CgkKCQkvKiBDYWxjdWxhdGUgYSBsYXlvdXQgYXJyYXkgKi8KCQlmb3IgKCBpPTAsIGlMZW49blRycy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCXsKCQkJblRyID0gblRyc1tpXTsKCQkJaUNvbHVtbiA9IDA7CgkKCQkJLyogRm9yIGV2ZXJ5IGNlbGwgaW4gdGhlIHJvdy4uLiAqLwoJCQluQ2VsbCA9IG5Uci5maXJzdENoaWxkOwoJCQl3aGlsZSAoIG5DZWxsICkgewoJCQkJaWYgKCBuQ2VsbC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpID09ICJURCIgfHwKCQkJCSAgICAgbkNlbGwubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PSAiVEgiICkKCQkJCXsKCQkJCQkvKiBHZXQgdGhlIGNvbCBhbmQgcm93c3BhbiBhdHRyaWJ1dGVzIGZyb20gdGhlIERPTSBhbmQgc2FuaXRpc2UgdGhlbSAqLwoJCQkJCWlDb2xzcGFuID0gbkNlbGwuZ2V0QXR0cmlidXRlKCdjb2xzcGFuJykgKiAxOwoJCQkJCWlSb3dzcGFuID0gbkNlbGwuZ2V0QXR0cmlidXRlKCdyb3dzcGFuJykgKiAxOwoJCQkJCWlDb2xzcGFuID0gKCFpQ29sc3BhbiB8fCBpQ29sc3Bhbj09PTAgfHwgaUNvbHNwYW49PT0xKSA/IDEgOiBpQ29sc3BhbjsKCQkJCQlpUm93c3BhbiA9ICghaVJvd3NwYW4gfHwgaVJvd3NwYW49PT0wIHx8IGlSb3dzcGFuPT09MSkgPyAxIDogaVJvd3NwYW47CgkKCQkJCQkvKiBUaGVyZSBtaWdodCBiZSBjb2xzcGFuIGNlbGxzIGFscmVhZHkgaW4gdGhpcyByb3csIHNvIHNoaWZ0IG91ciB0YXJnZXQKCQkJCQkgKiBhY2NvcmRpbmdseQoJCQkJCSAqLwoJCQkJCWlDb2xTaGlmdGVkID0gZm5TaGlmdENvbCggYUxheW91dCwgaSwgaUNvbHVtbiApOwoJCgkJCQkJLyogQ2FjaGUgY2FsY3VsYXRpb24gZm9yIHVuaXF1ZSBjb2x1bW5zICovCgkJCQkJYlVuaXF1ZSA9IGlDb2xzcGFuID09PSAxID8gdHJ1ZSA6IGZhbHNlOwoJCgkJCQkJLyogSWYgdGhlcmUgaXMgY29sIC8gcm93c3BhbiwgY29weSB0aGUgaW5mb3JtYXRpb24gaW50byB0aGUgbGF5b3V0IGdyaWQgKi8KCQkJCQlmb3IgKCBsPTAgOyBsPGlDb2xzcGFuIDsgbCsrICkKCQkJCQl7CgkJCQkJCWZvciAoIGs9MCA7IGs8aVJvd3NwYW4gOyBrKysgKQoJCQkJCQl7CgkJCQkJCQlhTGF5b3V0W2kra11baUNvbFNoaWZ0ZWQrbF0gPSB7CgkJCQkJCQkJImNlbGwiOiBuQ2VsbCwKCQkJCQkJCQkidW5pcXVlIjogYlVuaXF1ZQoJCQkJCQkJfTsKCQkJCQkJCWFMYXlvdXRbaStrXS5uVHIgPSBuVHI7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQluQ2VsbCA9IG5DZWxsLm5leHRTaWJsaW5nOwoJCQl9CgkJfQoJfQoJCgkKCS8qKgoJICogR2V0IGFuIGFycmF5IG9mIHVuaXF1ZSB0aCBlbGVtZW50cywgb25lIGZvciBlYWNoIGNvbHVtbgoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge25vZGV9IG5IZWFkZXIgYXV0b21hdGljYWxseSBkZXRlY3QgdGhlIGxheW91dCBmcm9tIHRoaXMgbm9kZSAtIG9wdGlvbmFsCgkgKiAgQHBhcmFtIHthcnJheX0gYUxheW91dCB0aGVhZC90Zm9vdCBsYXlvdXQgZnJvbSBfZm5EZXRlY3RIZWFkZXIgLSBvcHRpb25hbAoJICogIEByZXR1cm5zIGFycmF5IHtub2RlfSBhUmV0dXJuIGxpc3Qgb2YgdW5pcXVlIHRoJ3MKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuR2V0VW5pcXVlVGhzICggb1NldHRpbmdzLCBuSGVhZGVyLCBhTGF5b3V0ICkKCXsKCQl2YXIgYVJldHVybiA9IFtdOwoJCWlmICggIWFMYXlvdXQgKQoJCXsKCQkJYUxheW91dCA9IG9TZXR0aW5ncy5hb0hlYWRlcjsKCQkJaWYgKCBuSGVhZGVyICkKCQkJewoJCQkJYUxheW91dCA9IFtdOwoJCQkJX2ZuRGV0ZWN0SGVhZGVyKCBhTGF5b3V0LCBuSGVhZGVyICk7CgkJCX0KCQl9CgkKCQlmb3IgKCB2YXIgaT0wLCBpTGVuPWFMYXlvdXQubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQl7CgkJCWZvciAoIHZhciBqPTAsIGpMZW49YUxheW91dFtpXS5sZW5ndGggOyBqPGpMZW4gOyBqKysgKQoJCQl7CgkJCQlpZiAoIGFMYXlvdXRbaV1bal0udW5pcXVlICYmCgkJCQkJICghYVJldHVybltqXSB8fCAhb1NldHRpbmdzLmJTb3J0Q2VsbHNUb3ApICkKCQkJCXsKCQkJCQlhUmV0dXJuW2pdID0gYUxheW91dFtpXVtqXS5jZWxsOwoJCQkJfQoJCQl9CgkJfQoJCgkJcmV0dXJuIGFSZXR1cm47Cgl9CgkKCS8qKgoJICogQ3JlYXRlIGFuIEFqYXggY2FsbCBiYXNlZCBvbiB0aGUgdGFibGUncyBzZXR0aW5ncywgdGFraW5nIGludG8gYWNjb3VudCB0aGF0CgkgKiBwYXJhbWV0ZXJzIGNhbiBoYXZlIG11bHRpcGxlIGZvcm1zLCBhbmQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCgkgKgoJICogQHBhcmFtIHtvYmplY3R9IG9TZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogQHBhcmFtIHthcnJheX0gZGF0YSBEYXRhIHRvIHNlbmQgdG8gdGhlIHNlcnZlciwgcmVxdWlyZWQgYnkKCSAqICAgICBEYXRhVGFibGVzIC0gbWF5IGJlIGF1Z21lbnRlZCBieSBkZXZlbG9wZXIgY2FsbGJhY2tzCgkgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbiB0byBydW4gd2hlbiBkYXRhIGlzIG9idGFpbmVkCgkgKi8KCWZ1bmN0aW9uIF9mbkJ1aWxkQWpheCggb1NldHRpbmdzLCBkYXRhLCBmbiApCgl7CgkJLy8gQ29tcGF0aWJpbGl0eSB3aXRoIDEuOS0sIGFsbG93IGZuU2VydmVyRGF0YSBhbmQgZXZlbnQgdG8gbWFuaXB1bGF0ZQoJCV9mbkNhbGxiYWNrRmlyZSggb1NldHRpbmdzLCAnYW9TZXJ2ZXJQYXJhbXMnLCAnc2VydmVyUGFyYW1zJywgW2RhdGFdICk7CgkKCQkvLyBDb252ZXJ0IHRvIG9iamVjdCBiYXNlZCBmb3IgMS4xMCsgaWYgdXNpbmcgdGhlIG9sZCBhcnJheSBzY2hlbWUgd2hpY2ggY2FuCgkJLy8gY29tZSBmcm9tIHNlcnZlci1zaWRlIHByb2Nlc3Npbmcgb3Igc2VydmVyUGFyYW1zCgkJaWYgKCBkYXRhICYmICQuaXNBcnJheShkYXRhKSApIHsKCQkJdmFyIHRtcCA9IHt9OwoJCQl2YXIgcmJyYWNrZXQgPSAvKC4qPylcW1xdJC87CgkKCQkJJC5lYWNoKCBkYXRhLCBmdW5jdGlvbiAoa2V5LCB2YWwpIHsKCQkJCXZhciBtYXRjaCA9IHZhbC5uYW1lLm1hdGNoKHJicmFja2V0KTsKCQoJCQkJaWYgKCBtYXRjaCApIHsKCQkJCQkvLyBTdXBwb3J0IGZvciBhcnJheXMKCQkJCQl2YXIgbmFtZSA9IG1hdGNoWzBdOwoJCgkJCQkJaWYgKCAhIHRtcFsgbmFtZSBdICkgewoJCQkJCQl0bXBbIG5hbWUgXSA9IFtdOwoJCQkJCX0KCQkJCQl0bXBbIG5hbWUgXS5wdXNoKCB2YWwudmFsdWUgKTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCXRtcFt2YWwubmFtZV0gPSB2YWwudmFsdWU7CgkJCQl9CgkJCX0gKTsKCQkJZGF0YSA9IHRtcDsKCQl9CgkKCQl2YXIgYWpheERhdGE7CgkJdmFyIGFqYXggPSBvU2V0dGluZ3MuYWpheDsKCQl2YXIgaW5zdGFuY2UgPSBvU2V0dGluZ3Mub0luc3RhbmNlOwoJCXZhciBjYWxsYmFjayA9IGZ1bmN0aW9uICgganNvbiApIHsKCQkJX2ZuQ2FsbGJhY2tGaXJlKCBvU2V0dGluZ3MsIG51bGwsICd4aHInLCBbb1NldHRpbmdzLCBqc29uLCBvU2V0dGluZ3MuanFYSFJdICk7CgkJCWZuKCBqc29uICk7CgkJfTsKCQoJCWlmICggJC5pc1BsYWluT2JqZWN0KCBhamF4ICkgJiYgYWpheC5kYXRhICkKCQl7CgkJCWFqYXhEYXRhID0gYWpheC5kYXRhOwoJCgkJCXZhciBuZXdEYXRhID0gdHlwZW9mIGFqYXhEYXRhID09PSAnZnVuY3Rpb24nID8KCQkJCWFqYXhEYXRhKCBkYXRhLCBvU2V0dGluZ3MgKSA6ICAvLyBmbiBjYW4gbWFuaXB1bGF0ZSBkYXRhIG9yIHJldHVybgoJCQkJYWpheERhdGE7ICAgICAgICAgICAgICAgICAgICAgIC8vIGFuIG9iamVjdCBvYmplY3Qgb3IgYXJyYXkgdG8gbWVyZ2UKCQoJCQkvLyBJZiB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgc29tZXRoaW5nLCB1c2UgdGhhdCBhbG9uZQoJCQlkYXRhID0gdHlwZW9mIGFqYXhEYXRhID09PSAnZnVuY3Rpb24nICYmIG5ld0RhdGEgPwoJCQkJbmV3RGF0YSA6CgkJCQkkLmV4dGVuZCggdHJ1ZSwgZGF0YSwgbmV3RGF0YSApOwoJCgkJCS8vIFJlbW92ZSB0aGUgZGF0YSBwcm9wZXJ0eSBhcyB3ZSd2ZSByZXNvbHZlZCBpdCBhbHJlYWR5IGFuZCBkb24ndCB3YW50CgkJCS8vIGpRdWVyeSB0byBkbyBpdCBhZ2FpbiAoaXQgaXMgcmVzdG9yZWQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24pCgkJCWRlbGV0ZSBhamF4LmRhdGE7CgkJfQoJCgkJdmFyIGJhc2VBamF4ID0gewoJCQkiZGF0YSI6IGRhdGEsCgkJCSJzdWNjZXNzIjogZnVuY3Rpb24gKGpzb24pIHsKCQkJCXZhciBlcnJvciA9IGpzb24uZXJyb3IgfHwganNvbi5zRXJyb3I7CgkJCQlpZiAoIGVycm9yICkgewoJCQkJCV9mbkxvZyggb1NldHRpbmdzLCAwLCBlcnJvciApOwoJCQkJfQoJCgkJCQlvU2V0dGluZ3MuanNvbiA9IGpzb247CgkJCQljYWxsYmFjaygganNvbiApOwoJCQl9LAoJCQkiZGF0YVR5cGUiOiAianNvbiIsCgkJCSJjYWNoZSI6IGZhbHNlLAoJCQkidHlwZSI6IG9TZXR0aW5ncy5zU2VydmVyTWV0aG9kLAoJCQkiZXJyb3IiOiBmdW5jdGlvbiAoeGhyLCBlcnJvciwgdGhyb3duKSB7CgkJCQl2YXIgcmV0ID0gX2ZuQ2FsbGJhY2tGaXJlKCBvU2V0dGluZ3MsIG51bGwsICd4aHInLCBbb1NldHRpbmdzLCBudWxsLCBvU2V0dGluZ3MuanFYSFJdICk7CgkKCQkJCWlmICggJC5pbkFycmF5KCB0cnVlLCByZXQgKSA9PT0gLTEgKSB7CgkJCQkJaWYgKCBlcnJvciA9PSAicGFyc2VyZXJyb3IiICkgewoJCQkJCQlfZm5Mb2coIG9TZXR0aW5ncywgMCwgJ0ludmFsaWQgSlNPTiByZXNwb25zZScsIDEgKTsKCQkJCQl9CgkJCQkJZWxzZSBpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0ICkgewoJCQkJCQlfZm5Mb2coIG9TZXR0aW5ncywgMCwgJ0FqYXggZXJyb3InLCA3ICk7CgkJCQkJfQoJCQkJfQoJCgkJCQlfZm5Qcm9jZXNzaW5nRGlzcGxheSggb1NldHRpbmdzLCBmYWxzZSApOwoJCQl9CgkJfTsKCQoJCS8vIFN0b3JlIHRoZSBkYXRhIHN1Ym1pdHRlZCBmb3IgdGhlIEFQSQoJCW9TZXR0aW5ncy5vQWpheERhdGEgPSBkYXRhOwoJCgkJLy8gQWxsb3cgcGx1Zy1pbnMgYW5kIGV4dGVybmFsIHByb2Nlc3NlcyB0byBtb2RpZnkgdGhlIGRhdGEKCQlfZm5DYWxsYmFja0ZpcmUoIG9TZXR0aW5ncywgbnVsbCwgJ3ByZVhocicsIFtvU2V0dGluZ3MsIGRhdGFdICk7CgkKCQlpZiAoIG9TZXR0aW5ncy5mblNlcnZlckRhdGEgKQoJCXsKCQkJLy8gRGF0YVRhYmxlcyAxLjktIGNvbXBhdGliaWxpdHkKCQkJb1NldHRpbmdzLmZuU2VydmVyRGF0YS5jYWxsKCBpbnN0YW5jZSwKCQkJCW9TZXR0aW5ncy5zQWpheFNvdXJjZSwKCQkJCSQubWFwKCBkYXRhLCBmdW5jdGlvbiAodmFsLCBrZXkpIHsgLy8gTmVlZCB0byBjb252ZXJ0IGJhY2sgdG8gMS45IHRyYWQgZm9ybWF0CgkJCQkJcmV0dXJuIHsgbmFtZToga2V5LCB2YWx1ZTogdmFsIH07CgkJCQl9ICksCgkJCQljYWxsYmFjaywKCQkJCW9TZXR0aW5ncwoJCQkpOwoJCX0KCQllbHNlIGlmICggb1NldHRpbmdzLnNBamF4U291cmNlIHx8IHR5cGVvZiBhamF4ID09PSAnc3RyaW5nJyApCgkJewoJCQkvLyBEYXRhVGFibGVzIDEuOS0gY29tcGF0aWJpbGl0eQoJCQlvU2V0dGluZ3MuanFYSFIgPSAkLmFqYXgoICQuZXh0ZW5kKCBiYXNlQWpheCwgewoJCQkJdXJsOiBhamF4IHx8IG9TZXR0aW5ncy5zQWpheFNvdXJjZQoJCQl9ICkgKTsKCQl9CgkJZWxzZSBpZiAoIHR5cGVvZiBhamF4ID09PSAnZnVuY3Rpb24nICkKCQl7CgkJCS8vIElzIGEgZnVuY3Rpb24gLSBsZXQgdGhlIGNhbGxlciBkZWZpbmUgd2hhdCBuZWVkcyB0byBiZSBkb25lCgkJCW9TZXR0aW5ncy5qcVhIUiA9IGFqYXguY2FsbCggaW5zdGFuY2UsIGRhdGEsIGNhbGxiYWNrLCBvU2V0dGluZ3MgKTsKCQl9CgkJZWxzZQoJCXsKCQkJLy8gT2JqZWN0IHRvIGV4dGVuZCB0aGUgYmFzZSBzZXR0aW5ncwoJCQlvU2V0dGluZ3MuanFYSFIgPSAkLmFqYXgoICQuZXh0ZW5kKCBiYXNlQWpheCwgYWpheCApICk7CgkKCQkJLy8gUmVzdG9yZSBmb3IgbmV4dCB0aW1lIGFyb3VuZAoJCQlhamF4LmRhdGEgPSBhamF4RGF0YTsKCQl9Cgl9CgkKCQoJLyoqCgkgKiBVcGRhdGUgdGhlIHRhYmxlIHVzaW5nIGFuIEFqYXggY2FsbAoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEByZXR1cm5zIHtib29sZWFufSBCbG9jayB0aGUgdGFibGUgZHJhd2luZyBvciBub3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuQWpheFVwZGF0ZSggc2V0dGluZ3MgKQoJewoJCWlmICggc2V0dGluZ3MuYkFqYXhEYXRhR2V0ICkgewoJCQlzZXR0aW5ncy5pRHJhdysrOwoJCQlfZm5Qcm9jZXNzaW5nRGlzcGxheSggc2V0dGluZ3MsIHRydWUgKTsKCQoJCQlfZm5CdWlsZEFqYXgoCgkJCQlzZXR0aW5ncywKCQkJCV9mbkFqYXhQYXJhbWV0ZXJzKCBzZXR0aW5ncyApLAoJCQkJZnVuY3Rpb24oanNvbikgewoJCQkJCV9mbkFqYXhVcGRhdGVEcmF3KCBzZXR0aW5ncywganNvbiApOwoJCQkJfQoJCQkpOwoJCgkJCXJldHVybiBmYWxzZTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgkKCQoJLyoqCgkgKiBCdWlsZCB1cCB0aGUgcGFyYW1ldGVycyBpbiBhbiBvYmplY3QgbmVlZGVkIGZvciBhIHNlcnZlci1zaWRlIHByb2Nlc3NpbmcKCSAqIHJlcXVlc3QuIE5vdGUgdGhhdCB0aGlzIGlzIGJhc2ljYWxseSBkb25lIHR3aWNlLCBpcyBkaWZmZXJlbnQgd2F5cyAtIGEgbW9kZXJuCgkgKiBtZXRob2Qgd2hpY2ggaXMgdXNlZCBieSBkZWZhdWx0IGluIERhdGFUYWJsZXMgMS4xMCB3aGljaCB1c2VzIG9iamVjdHMgYW5kCgkgKiBhcnJheXMsIG9yIHRoZSAxLjktIG1ldGhvZCB3aXRoIGlzIG5hbWUgLyB2YWx1ZSBwYWlycy4gMS45IG1ldGhvZCBpcyB1c2VkIGlmCgkgKiB0aGUgc0FqYXhTb3VyY2Ugb3B0aW9uIGlzIHVzZWQgaW4gdGhlIGluaXRpYWxpc2F0aW9uLCBvciB0aGUgbGVnYWN5QWpheAoJICogb3B0aW9uIGlzIHNldC4KCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHJldHVybnMge2Jvb2x9IGJsb2NrIHRoZSB0YWJsZSBkcmF3aW5nIG9yIG5vdAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5BamF4UGFyYW1ldGVycyggc2V0dGluZ3MgKQoJewoJCXZhcgoJCQljb2x1bW5zID0gc2V0dGluZ3MuYW9Db2x1bW5zLAoJCQljb2x1bW5Db3VudCA9IGNvbHVtbnMubGVuZ3RoLAoJCQlmZWF0dXJlcyA9IHNldHRpbmdzLm9GZWF0dXJlcywKCQkJcHJlU2VhcmNoID0gc2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoLAoJCQlwcmVDb2xTZWFyY2ggPSBzZXR0aW5ncy5hb1ByZVNlYXJjaENvbHMsCgkJCWksIGRhdGEgPSBbXSwgZGF0YVByb3AsIGNvbHVtbiwgY29sdW1uU2VhcmNoLAoJCQlzb3J0ID0gX2ZuU29ydEZsYXR0ZW4oIHNldHRpbmdzICksCgkJCWRpc3BsYXlTdGFydCA9IHNldHRpbmdzLl9pRGlzcGxheVN0YXJ0LAoJCQlkaXNwbGF5TGVuZ3RoID0gZmVhdHVyZXMuYlBhZ2luYXRlICE9PSBmYWxzZSA/CgkJCQlzZXR0aW5ncy5faURpc3BsYXlMZW5ndGggOgoJCQkJLTE7CgkKCQl2YXIgcGFyYW0gPSBmdW5jdGlvbiAoIG5hbWUsIHZhbHVlICkgewoJCQlkYXRhLnB1c2goIHsgJ25hbWUnOiBuYW1lLCAndmFsdWUnOiB2YWx1ZSB9ICk7CgkJfTsKCQoJCS8vIERhdGFUYWJsZXMgMS45LSBjb21wYXRpYmxlIG1ldGhvZAoJCXBhcmFtKCAnc0VjaG8nLCAgICAgICAgICBzZXR0aW5ncy5pRHJhdyApOwoJCXBhcmFtKCAnaUNvbHVtbnMnLCAgICAgICBjb2x1bW5Db3VudCApOwoJCXBhcmFtKCAnc0NvbHVtbnMnLCAgICAgICBfcGx1Y2soIGNvbHVtbnMsICdzTmFtZScgKS5qb2luKCcsJykgKTsKCQlwYXJhbSggJ2lEaXNwbGF5U3RhcnQnLCAgZGlzcGxheVN0YXJ0ICk7CgkJcGFyYW0oICdpRGlzcGxheUxlbmd0aCcsIGRpc3BsYXlMZW5ndGggKTsKCQoJCS8vIERhdGFUYWJsZXMgMS4xMCsgbWV0aG9kCgkJdmFyIGQgPSB7CgkJCWRyYXc6ICAgIHNldHRpbmdzLmlEcmF3LAoJCQljb2x1bW5zOiBbXSwKCQkJb3JkZXI6ICAgW10sCgkJCXN0YXJ0OiAgIGRpc3BsYXlTdGFydCwKCQkJbGVuZ3RoOiAgZGlzcGxheUxlbmd0aCwKCQkJc2VhcmNoOiAgewoJCQkJdmFsdWU6IHByZVNlYXJjaC5zU2VhcmNoLAoJCQkJcmVnZXg6IHByZVNlYXJjaC5iUmVnZXgKCQkJfQoJCX07CgkKCQlmb3IgKCBpPTAgOyBpPGNvbHVtbkNvdW50IDsgaSsrICkgewoJCQljb2x1bW4gPSBjb2x1bW5zW2ldOwoJCQljb2x1bW5TZWFyY2ggPSBwcmVDb2xTZWFyY2hbaV07CgkJCWRhdGFQcm9wID0gdHlwZW9mIGNvbHVtbi5tRGF0YT09ImZ1bmN0aW9uIiA/ICdmdW5jdGlvbicgOiBjb2x1bW4ubURhdGEgOwoJCgkJCWQuY29sdW1ucy5wdXNoKCB7CgkJCQlkYXRhOiAgICAgICBkYXRhUHJvcCwKCQkJCW5hbWU6ICAgICAgIGNvbHVtbi5zTmFtZSwKCQkJCXNlYXJjaGFibGU6IGNvbHVtbi5iU2VhcmNoYWJsZSwKCQkJCW9yZGVyYWJsZTogIGNvbHVtbi5iU29ydGFibGUsCgkJCQlzZWFyY2g6ICAgICB7CgkJCQkJdmFsdWU6IGNvbHVtblNlYXJjaC5zU2VhcmNoLAoJCQkJCXJlZ2V4OiBjb2x1bW5TZWFyY2guYlJlZ2V4CgkJCQl9CgkJCX0gKTsKCQoJCQlwYXJhbSggIm1EYXRhUHJvcF8iK2ksIGRhdGFQcm9wICk7CgkKCQkJaWYgKCBmZWF0dXJlcy5iRmlsdGVyICkgewoJCQkJcGFyYW0oICdzU2VhcmNoXycraSwgICAgIGNvbHVtblNlYXJjaC5zU2VhcmNoICk7CgkJCQlwYXJhbSggJ2JSZWdleF8nK2ksICAgICAgY29sdW1uU2VhcmNoLmJSZWdleCApOwoJCQkJcGFyYW0oICdiU2VhcmNoYWJsZV8nK2ksIGNvbHVtbi5iU2VhcmNoYWJsZSApOwoJCQl9CgkKCQkJaWYgKCBmZWF0dXJlcy5iU29ydCApIHsKCQkJCXBhcmFtKCAnYlNvcnRhYmxlXycraSwgY29sdW1uLmJTb3J0YWJsZSApOwoJCQl9CgkJfQoJCgkJaWYgKCBmZWF0dXJlcy5iRmlsdGVyICkgewoJCQlwYXJhbSggJ3NTZWFyY2gnLCBwcmVTZWFyY2guc1NlYXJjaCApOwoJCQlwYXJhbSggJ2JSZWdleCcsIHByZVNlYXJjaC5iUmVnZXggKTsKCQl9CgkKCQlpZiAoIGZlYXR1cmVzLmJTb3J0ICkgewoJCQkkLmVhY2goIHNvcnQsIGZ1bmN0aW9uICggaSwgdmFsICkgewoJCQkJZC5vcmRlci5wdXNoKCB7IGNvbHVtbjogdmFsLmNvbCwgZGlyOiB2YWwuZGlyIH0gKTsKCQoJCQkJcGFyYW0oICdpU29ydENvbF8nK2ksIHZhbC5jb2wgKTsKCQkJCXBhcmFtKCAnc1NvcnREaXJfJytpLCB2YWwuZGlyICk7CgkJCX0gKTsKCQoJCQlwYXJhbSggJ2lTb3J0aW5nQ29scycsIHNvcnQubGVuZ3RoICk7CgkJfQoJCgkJLy8gSWYgdGhlIGxlZ2FjeS5hamF4IHBhcmFtZXRlciBpcyBudWxsLCB0aGVuIHdlIGF1dG9tYXRpY2FsbHkgZGVjaWRlIHdoaWNoCgkJLy8gZm9ybSB0byB1c2UsIGJhc2VkIG9uIHNBamF4U291cmNlCgkJdmFyIGxlZ2FjeSA9IERhdGFUYWJsZS5leHQubGVnYWN5LmFqYXg7CgkJaWYgKCBsZWdhY3kgPT09IG51bGwgKSB7CgkJCXJldHVybiBzZXR0aW5ncy5zQWpheFNvdXJjZSA/IGRhdGEgOiBkOwoJCX0KCQoJCS8vIE90aGVyd2lzZSwgaWYgbGVnYWN5IGhhcyBiZWVuIHNwZWNpZmllZCB0aGVuIHdlIHVzZSB0aGF0IHRvIGRlY2lkZSBvbiB0aGUKCQkvLyBmb3JtCgkJcmV0dXJuIGxlZ2FjeSA/IGRhdGEgOiBkOwoJfQoJCgkKCS8qKgoJICogRGF0YSB0aGUgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgKG51a2luZyB0aGUgb2xkKSBhbmQgcmVkcmF3IHRoZSB0YWJsZQoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge29iamVjdH0ganNvbiBqc29uIGRhdGEgcmV0dXJuIGZyb20gdGhlIHNlcnZlci4KCSAqICBAcGFyYW0ge3N0cmluZ30ganNvbi5zRWNobyBUcmFja2luZyBmbGFnIGZvciBEYXRhVGFibGVzIHRvIG1hdGNoIHJlcXVlc3RzCgkgKiAgQHBhcmFtIHtpbnR9IGpzb24uaVRvdGFsUmVjb3JkcyBOdW1iZXIgb2YgcmVjb3JkcyBpbiB0aGUgZGF0YSBzZXQsIG5vdCBhY2NvdW50aW5nIGZvciBmaWx0ZXJpbmcKCSAqICBAcGFyYW0ge2ludH0ganNvbi5pVG90YWxEaXNwbGF5UmVjb3JkcyBOdW1iZXIgb2YgcmVjb3JkcyBpbiB0aGUgZGF0YSBzZXQsIGFjY291bnRpbmcgZm9yIGZpbHRlcmluZwoJICogIEBwYXJhbSB7YXJyYXl9IGpzb24uYWFEYXRhIFRoZSBkYXRhIHRvIGRpc3BsYXkgb24gdGhpcyBwYWdlCgkgKiAgQHBhcmFtIHtzdHJpbmd9IFtqc29uLnNDb2x1bW5zXSBDb2x1bW4gb3JkZXJpbmcgKHNOYW1lLCBjb21tYSBzZXBhcmF0ZWQpCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkFqYXhVcGRhdGVEcmF3ICggc2V0dGluZ3MsIGpzb24gKQoJewoJCS8vIHYxLjEwIHVzZXMgY2FtZWxDYXNlIHZhcmlhYmxlcywgd2hpbGUgMS45IHVzZXMgSHVuZ2FyaWFuIG5vdGF0aW9uLgoJCS8vIFN1cHBvcnQgYm90aAoJCXZhciBjb21wYXQgPSBmdW5jdGlvbiAoIG9sZCwgbW9kZXJuICkgewoJCQlyZXR1cm4ganNvbltvbGRdICE9PSB1bmRlZmluZWQgPyBqc29uW29sZF0gOiBqc29uW21vZGVybl07CgkJfTsKCQoJCXZhciBkYXRhID0gX2ZuQWpheERhdGFTcmMoIHNldHRpbmdzLCBqc29uICk7CgkJdmFyIGRyYXcgICAgICAgICAgICA9IGNvbXBhdCggJ3NFY2hvJywgICAgICAgICAgICAgICAgJ2RyYXcnICk7CgkJdmFyIHJlY29yZHNUb3RhbCAgICA9IGNvbXBhdCggJ2lUb3RhbFJlY29yZHMnLCAgICAgICAgJ3JlY29yZHNUb3RhbCcgKTsKCQl2YXIgcmVjb3Jkc0ZpbHRlcmVkID0gY29tcGF0KCAnaVRvdGFsRGlzcGxheVJlY29yZHMnLCAncmVjb3Jkc0ZpbHRlcmVkJyApOwoJCgkJaWYgKCBkcmF3ICkgewoJCQkvLyBQcm90ZWN0IGFnYWluc3Qgb3V0IG9mIHNlcXVlbmNlIHJldHVybnMKCQkJaWYgKCBkcmF3KjEgPCBzZXR0aW5ncy5pRHJhdyApIHsKCQkJCXJldHVybjsKCQkJfQoJCQlzZXR0aW5ncy5pRHJhdyA9IGRyYXcgKiAxOwoJCX0KCQoJCV9mbkNsZWFyVGFibGUoIHNldHRpbmdzICk7CgkJc2V0dGluZ3MuX2lSZWNvcmRzVG90YWwgICA9IHBhcnNlSW50KHJlY29yZHNUb3RhbCwgMTApOwoJCXNldHRpbmdzLl9pUmVjb3Jkc0Rpc3BsYXkgPSBwYXJzZUludChyZWNvcmRzRmlsdGVyZWQsIDEwKTsKCQoJCWZvciAoIHZhciBpPTAsIGllbj1kYXRhLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQlfZm5BZGREYXRhKCBzZXR0aW5ncywgZGF0YVtpXSApOwoJCX0KCQlzZXR0aW5ncy5haURpc3BsYXkgPSBzZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIuc2xpY2UoKTsKCQoJCXNldHRpbmdzLmJBamF4RGF0YUdldCA9IGZhbHNlOwoJCV9mbkRyYXcoIHNldHRpbmdzICk7CgkKCQlpZiAoICEgc2V0dGluZ3MuX2JJbml0Q29tcGxldGUgKSB7CgkJCV9mbkluaXRDb21wbGV0ZSggc2V0dGluZ3MsIGpzb24gKTsKCQl9CgkKCQlzZXR0aW5ncy5iQWpheERhdGFHZXQgPSB0cnVlOwoJCV9mblByb2Nlc3NpbmdEaXNwbGF5KCBzZXR0aW5ncywgZmFsc2UgKTsKCX0KCQoJCgkvKioKCSAqIEdldCB0aGUgZGF0YSBmcm9tIHRoZSBKU09OIGRhdGEgc291cmNlIHRvIHVzZSBmb3IgZHJhd2luZyBhIHRhYmxlLiBVc2luZwoJICogYF9mbkdldE9iamVjdERhdGFGbmAgYWxsb3dzIHRoZSBkYXRhIHRvIGJlIHNvdXJjZWQgZnJvbSBhIHByb3BlcnR5IG9mIHRoZQoJICogc291cmNlIG9iamVjdCwgb3IgZnJvbSBhIHByb2Nlc3NpbmcgZnVuY3Rpb24uCgkgKiAgQHBhcmFtIHtvYmplY3R9IG9TZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSAge29iamVjdH0ganNvbiBEYXRhIHNvdXJjZSBvYmplY3QgLyBhcnJheSBmcm9tIHRoZSBzZXJ2ZXIKCSAqICBAcmV0dXJuIHthcnJheX0gQXJyYXkgb2YgZGF0YSB0byB1c2UKCSAqLwoJZnVuY3Rpb24gX2ZuQWpheERhdGFTcmMgKCBvU2V0dGluZ3MsIGpzb24gKQoJewoJCXZhciBkYXRhU3JjID0gJC5pc1BsYWluT2JqZWN0KCBvU2V0dGluZ3MuYWpheCApICYmIG9TZXR0aW5ncy5hamF4LmRhdGFTcmMgIT09IHVuZGVmaW5lZCA/CgkJCW9TZXR0aW5ncy5hamF4LmRhdGFTcmMgOgoJCQlvU2V0dGluZ3Muc0FqYXhEYXRhUHJvcDsgLy8gQ29tcGF0aWJpbGl0eSB3aXRoIDEuOS0uCgkKCQkvLyBDb21wYXRpYmlsaXR5IHdpdGggMS45LS4gSW4gb3JkZXIgdG8gcmVhZCBmcm9tIGFhRGF0YSwgY2hlY2sgaWYgdGhlCgkJLy8gZGVmYXVsdCBoYXMgYmVlbiBjaGFuZ2VkLCBpZiBub3QsIGNoZWNrIGZvciBhYURhdGEKCQlpZiAoIGRhdGFTcmMgPT09ICdkYXRhJyApIHsKCQkJcmV0dXJuIGpzb24uYWFEYXRhIHx8IGpzb25bZGF0YVNyY107CgkJfQoJCgkJcmV0dXJuIGRhdGFTcmMgIT09ICIiID8KCQkJX2ZuR2V0T2JqZWN0RGF0YUZuKCBkYXRhU3JjICkoIGpzb24gKSA6CgkJCWpzb247Cgl9CgkKCS8qKgoJICogR2VuZXJhdGUgdGhlIG5vZGUgcmVxdWlyZWQgZm9yIGZpbHRlcmluZyB0ZXh0CgkgKiAgQHJldHVybnMge25vZGV9IEZpbHRlciBjb250cm9sIGVsZW1lbnQKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkZlYXR1cmVIdG1sRmlsdGVyICggc2V0dGluZ3MgKQoJewoJCXZhciBjbGFzc2VzID0gc2V0dGluZ3Mub0NsYXNzZXM7CgkJdmFyIHRhYmxlSWQgPSBzZXR0aW5ncy5zVGFibGVJZDsKCQl2YXIgbGFuZ3VhZ2UgPSBzZXR0aW5ncy5vTGFuZ3VhZ2U7CgkJdmFyIHByZXZpb3VzU2VhcmNoID0gc2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoOwoJCXZhciBmZWF0dXJlcyA9IHNldHRpbmdzLmFhbkZlYXR1cmVzOwoJCXZhciBpbnB1dCA9ICc8aW5wdXQgdHlwZT0ic2VhcmNoIiBjbGFzcz0iJytjbGFzc2VzLnNGaWx0ZXJJbnB1dCsnIi8+JzsKCQoJCXZhciBzdHIgPSBsYW5ndWFnZS5zU2VhcmNoOwoJCXN0ciA9IHN0ci5tYXRjaCgvX0lOUFVUXy8pID8KCQkJc3RyLnJlcGxhY2UoJ19JTlBVVF8nLCBpbnB1dCkgOgoJCQlzdHIraW5wdXQ7CgkKCQl2YXIgZmlsdGVyID0gJCgnPGRpdi8+JywgewoJCQkJJ2lkJzogISBmZWF0dXJlcy5mID8gdGFibGVJZCsnX2ZpbHRlcicgOiBudWxsLAoJCQkJJ2NsYXNzJzogY2xhc3Nlcy5zRmlsdGVyCgkJCX0gKQoJCQkuYXBwZW5kKCAkKCc8bGFiZWwvPicgKS5hcHBlbmQoIHN0ciApICk7CgkKCQl2YXIgc2VhcmNoRm4gPSBmdW5jdGlvbigpIHsKCQkJLyogVXBkYXRlIGFsbCBvdGhlciBmaWx0ZXIgaW5wdXQgZWxlbWVudHMgZm9yIHRoZSBuZXcgZGlzcGxheSAqLwoJCQl2YXIgbiA9IGZlYXR1cmVzLmY7CgkJCXZhciB2YWwgPSAhdGhpcy52YWx1ZSA/ICIiIDogdGhpcy52YWx1ZTsgLy8gbWVudGFsIElFOCBmaXggOi0oCgkKCQkJLyogTm93IGRvIHRoZSBmaWx0ZXIgKi8KCQkJaWYgKCB2YWwgIT0gcHJldmlvdXNTZWFyY2guc1NlYXJjaCApIHsKCQkJCV9mbkZpbHRlckNvbXBsZXRlKCBzZXR0aW5ncywgewoJCQkJCSJzU2VhcmNoIjogdmFsLAoJCQkJCSJiUmVnZXgiOiBwcmV2aW91c1NlYXJjaC5iUmVnZXgsCgkJCQkJImJTbWFydCI6IHByZXZpb3VzU2VhcmNoLmJTbWFydCAsCgkJCQkJImJDYXNlSW5zZW5zaXRpdmUiOiBwcmV2aW91c1NlYXJjaC5iQ2FzZUluc2Vuc2l0aXZlCgkJCQl9ICk7CgkKCQkJCS8vIE5lZWQgdG8gcmVkcmF3LCB3aXRob3V0IHJlc29ydGluZwoJCQkJc2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPSAwOwoJCQkJX2ZuRHJhdyggc2V0dGluZ3MgKTsKCQkJfQoJCX07CgkKCQl2YXIgc2VhcmNoRGVsYXkgPSBzZXR0aW5ncy5zZWFyY2hEZWxheSAhPT0gbnVsbCA/CgkJCXNldHRpbmdzLnNlYXJjaERlbGF5IDoKCQkJX2ZuRGF0YVNvdXJjZSggc2V0dGluZ3MgKSA9PT0gJ3NzcCcgPwoJCQkJNDAwIDoKCQkJCTA7CgkKCQl2YXIganFGaWx0ZXIgPSAkKCdpbnB1dCcsIGZpbHRlcikKCQkJLnZhbCggcHJldmlvdXNTZWFyY2guc1NlYXJjaCApCgkJCS5hdHRyKCAncGxhY2Vob2xkZXInLCBsYW5ndWFnZS5zU2VhcmNoUGxhY2Vob2xkZXIgKQoJCQkub24oCgkJCQkna2V5dXAuRFQgc2VhcmNoLkRUIGlucHV0LkRUIHBhc3RlLkRUIGN1dC5EVCcsCgkJCQlzZWFyY2hEZWxheSA/CgkJCQkJX2ZuVGhyb3R0bGUoIHNlYXJjaEZuLCBzZWFyY2hEZWxheSApIDoKCQkJCQlzZWFyY2hGbgoJCQkpCgkJCS5vbiggJ2tleXByZXNzLkRUJywgZnVuY3Rpb24oZSkgewoJCQkJLyogUHJldmVudCBmb3JtIHN1Ym1pc3Npb24gKi8KCQkJCWlmICggZS5rZXlDb2RlID09IDEzICkgewoJCQkJCXJldHVybiBmYWxzZTsKCQkJCX0KCQkJfSApCgkJCS5hdHRyKCdhcmlhLWNvbnRyb2xzJywgdGFibGVJZCk7CgkKCQkvLyBVcGRhdGUgdGhlIGlucHV0IGVsZW1lbnRzIHdoZW5ldmVyIHRoZSB0YWJsZSBpcyBmaWx0ZXJlZAoJCSQoc2V0dGluZ3MublRhYmxlKS5vbiggJ3NlYXJjaC5kdC5EVCcsIGZ1bmN0aW9uICggZXYsIHMgKSB7CgkJCWlmICggc2V0dGluZ3MgPT09IHMgKSB7CgkJCQkvLyBJRTkgdGhyb3dzIGFuICd1bmtub3duIGVycm9yJyBpZiBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGlzIHVzZWQKCQkJCS8vIGluc2lkZSBhbiBpZnJhbWUgb3IgZnJhbWUuLi4KCQkJCXRyeSB7CgkJCQkJaWYgKCBqcUZpbHRlclswXSAhPT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCApIHsKCQkJCQkJanFGaWx0ZXIudmFsKCBwcmV2aW91c1NlYXJjaC5zU2VhcmNoICk7CgkJCQkJfQoJCQkJfQoJCQkJY2F0Y2ggKCBlICkge30KCQkJfQoJCX0gKTsKCQoJCXJldHVybiBmaWx0ZXJbMF07Cgl9CgkKCQoJLyoqCgkgKiBGaWx0ZXIgdGhlIHRhYmxlIHVzaW5nIGJvdGggdGhlIGdsb2JhbCBmaWx0ZXIgYW5kIGNvbHVtbiBiYXNlZCBmaWx0ZXJpbmcKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHtvYmplY3R9IG9TZWFyY2ggc2VhcmNoIGluZm9ybWF0aW9uCgkgKiAgQHBhcmFtIHtpbnR9IFtpRm9yY2VdIGZvcmNlIGEgcmVzZWFyY2ggb2YgdGhlIG1hc3RlciBhcnJheSAoMSkgb3Igbm90ICh1bmRlZmluZWQgb3IgMCkKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuRmlsdGVyQ29tcGxldGUgKCBvU2V0dGluZ3MsIG9JbnB1dCwgaUZvcmNlICkKCXsKCQl2YXIgb1ByZXZTZWFyY2ggPSBvU2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoOwoJCXZhciBhb1ByZXZTZWFyY2ggPSBvU2V0dGluZ3MuYW9QcmVTZWFyY2hDb2xzOwoJCXZhciBmblNhdmVGaWx0ZXIgPSBmdW5jdGlvbiAoIG9GaWx0ZXIgKSB7CgkJCS8qIFNhdmUgdGhlIGZpbHRlcmluZyB2YWx1ZXMgKi8KCQkJb1ByZXZTZWFyY2guc1NlYXJjaCA9IG9GaWx0ZXIuc1NlYXJjaDsKCQkJb1ByZXZTZWFyY2guYlJlZ2V4ID0gb0ZpbHRlci5iUmVnZXg7CgkJCW9QcmV2U2VhcmNoLmJTbWFydCA9IG9GaWx0ZXIuYlNtYXJ0OwoJCQlvUHJldlNlYXJjaC5iQ2FzZUluc2Vuc2l0aXZlID0gb0ZpbHRlci5iQ2FzZUluc2Vuc2l0aXZlOwoJCX07CgkJdmFyIGZuUmVnZXggPSBmdW5jdGlvbiAoIG8gKSB7CgkJCS8vIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGJFc2NhcGVSZWdleCBvcHRpb24KCQkJcmV0dXJuIG8uYkVzY2FwZVJlZ2V4ICE9PSB1bmRlZmluZWQgPyAhby5iRXNjYXBlUmVnZXggOiBvLmJSZWdleDsKCQl9OwoJCgkJLy8gUmVzb2x2ZSBhbnkgY29sdW1uIHR5cGVzIHRoYXQgYXJlIHVua25vd24gZHVlIHRvIGFkZGl0aW9uIG9yIGludmFsaWRhdGlvbgoJCS8vIEB0b2RvIEFzIHBlciBzb3J0IC0gY2FuIHRoaXMgYmUgbW92ZWQgaW50byBhbiBldmVudCBoYW5kbGVyPwoJCV9mbkNvbHVtblR5cGVzKCBvU2V0dGluZ3MgKTsKCQoJCS8qIEluIHNlcnZlci1zaWRlIHByb2Nlc3NpbmcgYWxsIGZpbHRlcmluZyBpcyBkb25lIGJ5IHRoZSBzZXJ2ZXIsIHNvIG5vIHBvaW50IGhhbmdpbmcgYXJvdW5kIGhlcmUgKi8KCQlpZiAoIF9mbkRhdGFTb3VyY2UoIG9TZXR0aW5ncyApICE9ICdzc3AnICkKCQl7CgkJCS8qIEdsb2JhbCBmaWx0ZXIgKi8KCQkJX2ZuRmlsdGVyKCBvU2V0dGluZ3MsIG9JbnB1dC5zU2VhcmNoLCBpRm9yY2UsIGZuUmVnZXgob0lucHV0KSwgb0lucHV0LmJTbWFydCwgb0lucHV0LmJDYXNlSW5zZW5zaXRpdmUgKTsKCQkJZm5TYXZlRmlsdGVyKCBvSW5wdXQgKTsKCQoJCQkvKiBOb3cgZG8gdGhlIGluZGl2aWR1YWwgY29sdW1uIGZpbHRlciAqLwoJCQlmb3IgKCB2YXIgaT0wIDsgaTxhb1ByZXZTZWFyY2gubGVuZ3RoIDsgaSsrICkKCQkJewoJCQkJX2ZuRmlsdGVyQ29sdW1uKCBvU2V0dGluZ3MsIGFvUHJldlNlYXJjaFtpXS5zU2VhcmNoLCBpLCBmblJlZ2V4KGFvUHJldlNlYXJjaFtpXSksCgkJCQkJYW9QcmV2U2VhcmNoW2ldLmJTbWFydCwgYW9QcmV2U2VhcmNoW2ldLmJDYXNlSW5zZW5zaXRpdmUgKTsKCQkJfQoJCgkJCS8qIEN1c3RvbSBmaWx0ZXJpbmcgKi8KCQkJX2ZuRmlsdGVyQ3VzdG9tKCBvU2V0dGluZ3MgKTsKCQl9CgkJZWxzZQoJCXsKCQkJZm5TYXZlRmlsdGVyKCBvSW5wdXQgKTsKCQl9CgkKCQkvKiBUZWxsIHRoZSBkcmF3IGZ1bmN0aW9uIHdlIGhhdmUgYmVlbiBmaWx0ZXJpbmcgKi8KCQlvU2V0dGluZ3MuYkZpbHRlcmVkID0gdHJ1ZTsKCQlfZm5DYWxsYmFja0ZpcmUoIG9TZXR0aW5ncywgbnVsbCwgJ3NlYXJjaCcsIFtvU2V0dGluZ3NdICk7Cgl9CgkKCQoJLyoqCgkgKiBBcHBseSBjdXN0b20gZmlsdGVyaW5nIGZ1bmN0aW9ucwoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuRmlsdGVyQ3VzdG9tKCBzZXR0aW5ncyApCgl7CgkJdmFyIGZpbHRlcnMgPSBEYXRhVGFibGUuZXh0LnNlYXJjaDsKCQl2YXIgZGlzcGxheVJvd3MgPSBzZXR0aW5ncy5haURpc3BsYXk7CgkJdmFyIHJvdywgcm93SWR4OwoJCgkJZm9yICggdmFyIGk9MCwgaWVuPWZpbHRlcnMubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCXZhciByb3dzID0gW107CgkKCQkJLy8gTG9vcCBvdmVyIGVhY2ggcm93IGFuZCBzZWUgaWYgaXQgc2hvdWxkIGJlIGluY2x1ZGVkCgkJCWZvciAoIHZhciBqPTAsIGplbj1kaXNwbGF5Um93cy5sZW5ndGggOyBqPGplbiA7IGorKyApIHsKCQkJCXJvd0lkeCA9IGRpc3BsYXlSb3dzWyBqIF07CgkJCQlyb3cgPSBzZXR0aW5ncy5hb0RhdGFbIHJvd0lkeCBdOwoJCgkJCQlpZiAoIGZpbHRlcnNbaV0oIHNldHRpbmdzLCByb3cuX2FGaWx0ZXJEYXRhLCByb3dJZHgsIHJvdy5fYURhdGEsIGogKSApIHsKCQkJCQlyb3dzLnB1c2goIHJvd0lkeCApOwoJCQkJfQoJCQl9CgkKCQkJLy8gU28gdGhlIGFycmF5IHJlZmVyZW5jZSBkb2Vzbid0IGJyZWFrIHNldCB0aGUgcmVzdWx0cyBpbnRvIHRoZQoJCQkvLyBleGlzdGluZyBhcnJheQoJCQlkaXNwbGF5Um93cy5sZW5ndGggPSAwOwoJCQkkLm1lcmdlKCBkaXNwbGF5Um93cywgcm93cyApOwoJCX0KCX0KCQoJCgkvKioKCSAqIEZpbHRlciB0aGUgdGFibGUgb24gYSBwZXItY29sdW1uIGJhc2lzCgkgKiAgQHBhcmFtIHtvYmplY3R9IG9TZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSB7c3RyaW5nfSBzSW5wdXQgc3RyaW5nIHRvIGZpbHRlciBvbgoJICogIEBwYXJhbSB7aW50fSBpQ29sdW1uIGNvbHVtbiB0byBmaWx0ZXIKCSAqICBAcGFyYW0ge2Jvb2x9IGJSZWdleCB0cmVhdCBzZWFyY2ggc3RyaW5nIGFzIGEgcmVndWxhciBleHByZXNzaW9uIG9yIG5vdAoJICogIEBwYXJhbSB7Ym9vbH0gYlNtYXJ0IHVzZSBzbWFydCBmaWx0ZXJpbmcgb3Igbm90CgkgKiAgQHBhcmFtIHtib29sfSBiQ2FzZUluc2Vuc2l0aXZlIERvIGNhc2UgaW5zZW5zdGl2ZSBtYXRjaGluZyBvciBub3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuRmlsdGVyQ29sdW1uICggc2V0dGluZ3MsIHNlYXJjaFN0ciwgY29sSWR4LCByZWdleCwgc21hcnQsIGNhc2VJbnNlbnNpdGl2ZSApCgl7CgkJaWYgKCBzZWFyY2hTdHIgPT09ICcnICkgewoJCQlyZXR1cm47CgkJfQoJCgkJdmFyIGRhdGE7CgkJdmFyIG91dCA9IFtdOwoJCXZhciBkaXNwbGF5ID0gc2V0dGluZ3MuYWlEaXNwbGF5OwoJCXZhciBycFNlYXJjaCA9IF9mbkZpbHRlckNyZWF0ZVNlYXJjaCggc2VhcmNoU3RyLCByZWdleCwgc21hcnQsIGNhc2VJbnNlbnNpdGl2ZSApOwoJCgkJZm9yICggdmFyIGk9MCA7IGk8ZGlzcGxheS5sZW5ndGggOyBpKysgKSB7CgkJCWRhdGEgPSBzZXR0aW5ncy5hb0RhdGFbIGRpc3BsYXlbaV0gXS5fYUZpbHRlckRhdGFbIGNvbElkeCBdOwoJCgkJCWlmICggcnBTZWFyY2gudGVzdCggZGF0YSApICkgewoJCQkJb3V0LnB1c2goIGRpc3BsYXlbaV0gKTsKCQkJfQoJCX0KCQoJCXNldHRpbmdzLmFpRGlzcGxheSA9IG91dDsKCX0KCQoJCgkvKioKCSAqIEZpbHRlciB0aGUgZGF0YSB0YWJsZSBiYXNlZCBvbiB1c2VyIGlucHV0IGFuZCBkcmF3IHRoZSB0YWJsZQoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCBzdHJpbmcgdG8gZmlsdGVyIG9uCgkgKiAgQHBhcmFtIHtpbnR9IGZvcmNlIG9wdGlvbmFsIC0gZm9yY2UgYSByZXNlYXJjaCBvZiB0aGUgbWFzdGVyIGFycmF5ICgxKSBvciBub3QgKHVuZGVmaW5lZCBvciAwKQoJICogIEBwYXJhbSB7Ym9vbH0gcmVnZXggdHJlYXQgYXMgYSByZWd1bGFyIGV4cHJlc3Npb24gb3Igbm90CgkgKiAgQHBhcmFtIHtib29sfSBzbWFydCBwZXJmb3JtIHNtYXJ0IGZpbHRlcmluZyBvciBub3QKCSAqICBAcGFyYW0ge2Jvb2x9IGNhc2VJbnNlbnNpdGl2ZSBEbyBjYXNlIGluc2Vuc3RpdmUgbWF0Y2hpbmcgb3Igbm90CgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkZpbHRlciggc2V0dGluZ3MsIGlucHV0LCBmb3JjZSwgcmVnZXgsIHNtYXJ0LCBjYXNlSW5zZW5zaXRpdmUgKQoJewoJCXZhciBycFNlYXJjaCA9IF9mbkZpbHRlckNyZWF0ZVNlYXJjaCggaW5wdXQsIHJlZ2V4LCBzbWFydCwgY2FzZUluc2Vuc2l0aXZlICk7CgkJdmFyIHByZXZTZWFyY2ggPSBzZXR0aW5ncy5vUHJldmlvdXNTZWFyY2guc1NlYXJjaDsKCQl2YXIgZGlzcGxheU1hc3RlciA9IHNldHRpbmdzLmFpRGlzcGxheU1hc3RlcjsKCQl2YXIgZGlzcGxheSwgaW52YWxpZGF0ZWQsIGk7CgkJdmFyIGZpbHRlcmVkID0gW107CgkKCQkvLyBOZWVkIHRvIHRha2UgYWNjb3VudCBvZiBjdXN0b20gZmlsdGVyaW5nIGZ1bmN0aW9ucyAtIGFsd2F5cyBmaWx0ZXIKCQlpZiAoIERhdGFUYWJsZS5leHQuc2VhcmNoLmxlbmd0aCAhPT0gMCApIHsKCQkJZm9yY2UgPSB0cnVlOwoJCX0KCQoJCS8vIENoZWNrIGlmIGFueSBvZiB0aGUgcm93cyB3ZXJlIGludmFsaWRhdGVkCgkJaW52YWxpZGF0ZWQgPSBfZm5GaWx0ZXJEYXRhKCBzZXR0aW5ncyApOwoJCgkJLy8gSWYgdGhlIGlucHV0IGlzIGJsYW5rIC0gd2UganVzdCB3YW50IHRoZSBmdWxsIGRhdGEgc2V0CgkJaWYgKCBpbnB1dC5sZW5ndGggPD0gMCApIHsKCQkJc2V0dGluZ3MuYWlEaXNwbGF5ID0gZGlzcGxheU1hc3Rlci5zbGljZSgpOwoJCX0KCQllbHNlIHsKCQkJLy8gTmV3IHNlYXJjaCAtIHN0YXJ0IGZyb20gdGhlIG1hc3RlciBhcnJheQoJCQlpZiAoIGludmFsaWRhdGVkIHx8CgkJCQkgZm9yY2UgfHwKCQkJCSByZWdleCB8fAoJCQkJIHByZXZTZWFyY2gubGVuZ3RoID4gaW5wdXQubGVuZ3RoIHx8CgkJCQkgaW5wdXQuaW5kZXhPZihwcmV2U2VhcmNoKSAhPT0gMCB8fAoJCQkJIHNldHRpbmdzLmJTb3J0ZWQgLy8gT24gcmVzb3J0LCB0aGUgZGlzcGxheSBtYXN0ZXIgbmVlZHMgdG8gYmUKCQkJCSAgICAgICAgICAgICAgICAgIC8vIHJlLWZpbHRlcmVkIHNpbmNlIGluZGV4ZXMgd2lsbCBoYXZlIGNoYW5nZWQKCQkJKSB7CgkJCQlzZXR0aW5ncy5haURpc3BsYXkgPSBkaXNwbGF5TWFzdGVyLnNsaWNlKCk7CgkJCX0KCQoJCQkvLyBTZWFyY2ggdGhlIGRpc3BsYXkgYXJyYXkKCQkJZGlzcGxheSA9IHNldHRpbmdzLmFpRGlzcGxheTsKCQoJCQlmb3IgKCBpPTAgOyBpPGRpc3BsYXkubGVuZ3RoIDsgaSsrICkgewoJCQkJaWYgKCBycFNlYXJjaC50ZXN0KCBzZXR0aW5ncy5hb0RhdGFbIGRpc3BsYXlbaV0gXS5fc0ZpbHRlclJvdyApICkgewoJCQkJCWZpbHRlcmVkLnB1c2goIGRpc3BsYXlbaV0gKTsKCQkJCX0KCQkJfQoJCgkJCXNldHRpbmdzLmFpRGlzcGxheSA9IGZpbHRlcmVkOwoJCX0KCX0KCQoJCgkvKioKCSAqIEJ1aWxkIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCBzdWl0YWJsZSBmb3Igc2VhcmNoaW5nIGEgdGFibGUKCSAqICBAcGFyYW0ge3N0cmluZ30gc1NlYXJjaCBzdHJpbmcgdG8gc2VhcmNoIGZvcgoJICogIEBwYXJhbSB7Ym9vbH0gYlJlZ2V4IHRyZWF0IGFzIGEgcmVndWxhciBleHByZXNzaW9uIG9yIG5vdAoJICogIEBwYXJhbSB7Ym9vbH0gYlNtYXJ0IHBlcmZvcm0gc21hcnQgZmlsdGVyaW5nIG9yIG5vdAoJICogIEBwYXJhbSB7Ym9vbH0gYkNhc2VJbnNlbnNpdGl2ZSBEbyBjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nIG9yIG5vdAoJICogIEByZXR1cm5zIHtSZWdFeHB9IGNvbnN0cnVjdGVkIG9iamVjdAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5GaWx0ZXJDcmVhdGVTZWFyY2goIHNlYXJjaCwgcmVnZXgsIHNtYXJ0LCBjYXNlSW5zZW5zaXRpdmUgKQoJewoJCXNlYXJjaCA9IHJlZ2V4ID8KCQkJc2VhcmNoIDoKCQkJX2ZuRXNjYXBlUmVnZXgoIHNlYXJjaCApOwoJCQoJCWlmICggc21hcnQgKSB7CgkJCS8qIEZvciBzbWFydCBmaWx0ZXJpbmcgd2Ugd2FudCB0byBhbGxvdyB0aGUgc2VhcmNoIHRvIHdvcmsgcmVnYXJkbGVzcyBvZgoJCQkgKiB3b3JkIG9yZGVyLiBXZSBhbHNvIHdhbnQgZG91YmxlIHF1b3RlZCB0ZXh0IHRvIGJlIHByZXNlcnZlZCwgc28gd29yZAoJCQkgKiBvcmRlciBpcyBpbXBvcnRhbnQgLSBhIGxhIGdvb2dsZS4gU28gdGhpcyBpcyB3aGF0IHdlIHdhbnQgdG8KCQkJICogZ2VuZXJhdGU6CgkJCSAqIAoJCQkgKiBeKD89Lio/XGJvbmVcYikoPz0uKj9cYnR3byB0aHJlZVxiKSg/PS4qP1xiZm91clxiKS4qJAoJCQkgKi8KCQkJdmFyIGEgPSAkLm1hcCggc2VhcmNoLm1hdGNoKCAvIlteIl0rInxbXiBdKy9nICkgfHwgWycnXSwgZnVuY3Rpb24gKCB3b3JkICkgewoJCQkJaWYgKCB3b3JkLmNoYXJBdCgwKSA9PT0gJyInICkgewoJCQkJCXZhciBtID0gd29yZC5tYXRjaCggL14iKC4qKSIkLyApOwoJCQkJCXdvcmQgPSBtID8gbVsxXSA6IHdvcmQ7CgkJCQl9CgkKCQkJCXJldHVybiB3b3JkLnJlcGxhY2UoJyInLCAnJyk7CgkJCX0gKTsKCQoJCQlzZWFyY2ggPSAnXig/PS4qPycrYS5qb2luKCAnKSg/PS4qPycgKSsnKS4qJCc7CgkJfQoJCgkJcmV0dXJuIG5ldyBSZWdFeHAoIHNlYXJjaCwgY2FzZUluc2Vuc2l0aXZlID8gJ2knIDogJycgKTsKCX0KCQoJCgkvKioKCSAqIEVzY2FwZSBhIHN0cmluZyBzdWNoIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gYSByZWd1bGFyIGV4cHJlc3Npb24KCSAqICBAcGFyYW0ge3N0cmluZ30gc1ZhbCBzdHJpbmcgdG8gZXNjYXBlCgkgKiAgQHJldHVybnMge3N0cmluZ30gZXNjYXBlZCBzdHJpbmcKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJdmFyIF9mbkVzY2FwZVJlZ2V4ID0gRGF0YVRhYmxlLnV0aWwuZXNjYXBlUmVnZXg7CgkKCXZhciBfX2ZpbHRlcl9kaXYgPSAkKCc8ZGl2PicpWzBdOwoJdmFyIF9fZmlsdGVyX2Rpdl90ZXh0Q29udGVudCA9IF9fZmlsdGVyX2Rpdi50ZXh0Q29udGVudCAhPT0gdW5kZWZpbmVkOwoJCgkvLyBVcGRhdGUgdGhlIGZpbHRlcmluZyBkYXRhIGZvciBlYWNoIHJvdyBpZiBuZWVkZWQgKGJ5IGludmFsaWRhdGlvbiBvciBmaXJzdCBydW4pCglmdW5jdGlvbiBfZm5GaWx0ZXJEYXRhICggc2V0dGluZ3MgKQoJewoJCXZhciBjb2x1bW5zID0gc2V0dGluZ3MuYW9Db2x1bW5zOwoJCXZhciBjb2x1bW47CgkJdmFyIGksIGosIGllbiwgamVuLCBmaWx0ZXJEYXRhLCBjZWxsRGF0YSwgcm93OwoJCXZhciBmb21hdHRlcnMgPSBEYXRhVGFibGUuZXh0LnR5cGUuc2VhcmNoOwoJCXZhciB3YXNJbnZhbGlkYXRlZCA9IGZhbHNlOwoJCgkJZm9yICggaT0wLCBpZW49c2V0dGluZ3MuYW9EYXRhLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQlyb3cgPSBzZXR0aW5ncy5hb0RhdGFbaV07CgkKCQkJaWYgKCAhIHJvdy5fYUZpbHRlckRhdGEgKSB7CgkJCQlmaWx0ZXJEYXRhID0gW107CgkKCQkJCWZvciAoIGo9MCwgamVuPWNvbHVtbnMubGVuZ3RoIDsgajxqZW4gOyBqKysgKSB7CgkJCQkJY29sdW1uID0gY29sdW1uc1tqXTsKCQoJCQkJCWlmICggY29sdW1uLmJTZWFyY2hhYmxlICkgewoJCQkJCQljZWxsRGF0YSA9IF9mbkdldENlbGxEYXRhKCBzZXR0aW5ncywgaSwgaiwgJ2ZpbHRlcicgKTsKCQoJCQkJCQlpZiAoIGZvbWF0dGVyc1sgY29sdW1uLnNUeXBlIF0gKSB7CgkJCQkJCQljZWxsRGF0YSA9IGZvbWF0dGVyc1sgY29sdW1uLnNUeXBlIF0oIGNlbGxEYXRhICk7CgkJCQkJCX0KCQoJCQkJCQkvLyBTZWFyY2ggaW4gRGF0YVRhYmxlcyAxLjEwIGlzIHN0cmluZyBiYXNlZC4gSW4gMS4xMSB0aGlzCgkJCQkJCS8vIHNob3VsZCBiZSBhbHRlcmVkIHRvIGFsc28gYWxsb3cgc3RyaWN0IHR5cGUgY2hlY2tpbmcuCgkJCQkJCWlmICggY2VsbERhdGEgPT09IG51bGwgKSB7CgkJCQkJCQljZWxsRGF0YSA9ICcnOwoJCQkJCQl9CgkKCQkJCQkJaWYgKCB0eXBlb2YgY2VsbERhdGEgIT09ICdzdHJpbmcnICYmIGNlbGxEYXRhLnRvU3RyaW5nICkgewoJCQkJCQkJY2VsbERhdGEgPSBjZWxsRGF0YS50b1N0cmluZygpOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWVsc2UgewoJCQkJCQljZWxsRGF0YSA9ICcnOwoJCQkJCX0KCQoJCQkJCS8vIElmIGl0IGxvb2tzIGxpa2UgdGhlcmUgaXMgYW4gSFRNTCBlbnRpdHkgaW4gdGhlIHN0cmluZywKCQkJCQkvLyBhdHRlbXB0IHRvIGRlY29kZSBpdCBzbyBzb3J0aW5nIHdvcmtzIGFzIGV4cGVjdGVkLiBOb3RlIHRoYXQKCQkJCQkvLyB3ZSBjb3VsZCB1c2UgYSBzaW5nbGUgbGluZSBvZiBqUXVlcnkgdG8gZG8gdGhpcywgYnV0IHRoZSBET00KCQkJCQkvLyBtZXRob2QgdXNlZCBoZXJlIGlzIG11Y2ggZmFzdGVyIGh0dHA6Ly9qc3BlcmYuY29tL2h0bWwtZGVjb2RlCgkJCQkJaWYgKCBjZWxsRGF0YS5pbmRleE9mICYmIGNlbGxEYXRhLmluZGV4T2YoJyYnKSAhPT0gLTEgKSB7CgkJCQkJCV9fZmlsdGVyX2Rpdi5pbm5lckhUTUwgPSBjZWxsRGF0YTsKCQkJCQkJY2VsbERhdGEgPSBfX2ZpbHRlcl9kaXZfdGV4dENvbnRlbnQgPwoJCQkJCQkJX19maWx0ZXJfZGl2LnRleHRDb250ZW50IDoKCQkJCQkJCV9fZmlsdGVyX2Rpdi5pbm5lclRleHQ7CgkJCQkJfQoJCgkJCQkJaWYgKCBjZWxsRGF0YS5yZXBsYWNlICkgewoJCQkJCQljZWxsRGF0YSA9IGNlbGxEYXRhLnJlcGxhY2UoL1tcclxuXHUyMDI4XS9nLCAnJyk7CgkJCQkJfQoJCgkJCQkJZmlsdGVyRGF0YS5wdXNoKCBjZWxsRGF0YSApOwoJCQkJfQoJCgkJCQlyb3cuX2FGaWx0ZXJEYXRhID0gZmlsdGVyRGF0YTsKCQkJCXJvdy5fc0ZpbHRlclJvdyA9IGZpbHRlckRhdGEuam9pbignICAnKTsKCQkJCXdhc0ludmFsaWRhdGVkID0gdHJ1ZTsKCQkJfQoJCX0KCQoJCXJldHVybiB3YXNJbnZhbGlkYXRlZDsKCX0KCQoJCgkvKioKCSAqIENvbnZlcnQgZnJvbSB0aGUgaW50ZXJuYWwgSHVuZ2FyaWFuIG5vdGF0aW9uIHRvIGNhbWVsQ2FzZSBmb3IgZXh0ZXJuYWwKCSAqIGludGVyYWN0aW9uCgkgKiAgQHBhcmFtIHtvYmplY3R9IG9iaiBPYmplY3QgdG8gY29udmVydAoJICogIEByZXR1cm5zIHtvYmplY3R9IEludmVydGVkIG9iamVjdAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5TZWFyY2hUb0NhbWVsICggb2JqICkKCXsKCQlyZXR1cm4gewoJCQlzZWFyY2g6ICAgICAgICAgIG9iai5zU2VhcmNoLAoJCQlzbWFydDogICAgICAgICAgIG9iai5iU21hcnQsCgkJCXJlZ2V4OiAgICAgICAgICAgb2JqLmJSZWdleCwKCQkJY2FzZUluc2Vuc2l0aXZlOiBvYmouYkNhc2VJbnNlbnNpdGl2ZQoJCX07Cgl9CgkKCQoJCgkvKioKCSAqIENvbnZlcnQgZnJvbSBjYW1lbENhc2Ugbm90YXRpb24gdG8gdGhlIGludGVybmFsIEh1bmdhcmlhbi4gV2UgY291bGQgdXNlIHRoZQoJICogSHVuZ2FyaWFuIGNvbnZlcnQgZnVuY3Rpb24gaGVyZSwgYnV0IHRoaXMgaXMgY2xlYW5lcgoJICogIEBwYXJhbSB7b2JqZWN0fSBvYmogT2JqZWN0IHRvIGNvbnZlcnQKCSAqICBAcmV0dXJucyB7b2JqZWN0fSBJbnZlcnRlZCBvYmplY3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuU2VhcmNoVG9IdW5nICggb2JqICkKCXsKCQlyZXR1cm4gewoJCQlzU2VhcmNoOiAgICAgICAgICBvYmouc2VhcmNoLAoJCQliU21hcnQ6ICAgICAgICAgICBvYmouc21hcnQsCgkJCWJSZWdleDogICAgICAgICAgIG9iai5yZWdleCwKCQkJYkNhc2VJbnNlbnNpdGl2ZTogb2JqLmNhc2VJbnNlbnNpdGl2ZQoJCX07Cgl9CgkKCS8qKgoJICogR2VuZXJhdGUgdGhlIG5vZGUgcmVxdWlyZWQgZm9yIHRoZSBpbmZvIGRpc3BsYXkKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHJldHVybnMge25vZGV9IEluZm9ybWF0aW9uIGVsZW1lbnQKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuRmVhdHVyZUh0bWxJbmZvICggc2V0dGluZ3MgKQoJewoJCXZhcgoJCQl0aWQgPSBzZXR0aW5ncy5zVGFibGVJZCwKCQkJbm9kZXMgPSBzZXR0aW5ncy5hYW5GZWF0dXJlcy5pLAoJCQluID0gJCgnPGRpdi8+JywgewoJCQkJJ2NsYXNzJzogc2V0dGluZ3Mub0NsYXNzZXMuc0luZm8sCgkJCQknaWQnOiAhIG5vZGVzID8gdGlkKydfaW5mbycgOiBudWxsCgkJCX0gKTsKCQoJCWlmICggISBub2RlcyApIHsKCQkJLy8gVXBkYXRlIGRpc3BsYXkgb24gZWFjaCBkcmF3CgkJCXNldHRpbmdzLmFvRHJhd0NhbGxiYWNrLnB1c2goIHsKCQkJCSJmbiI6IF9mblVwZGF0ZUluZm8sCgkJCQkic05hbWUiOiAiaW5mb3JtYXRpb24iCgkJCX0gKTsKCQoJCQluCgkJCQkuYXR0ciggJ3JvbGUnLCAnc3RhdHVzJyApCgkJCQkuYXR0ciggJ2FyaWEtbGl2ZScsICdwb2xpdGUnICk7CgkKCQkJLy8gVGFibGUgaXMgZGVzY3JpYmVkIGJ5IG91ciBpbmZvIGRpdgoJCQkkKHNldHRpbmdzLm5UYWJsZSkuYXR0ciggJ2FyaWEtZGVzY3JpYmVkYnknLCB0aWQrJ19pbmZvJyApOwoJCX0KCQoJCXJldHVybiBuWzBdOwoJfQoJCgkKCS8qKgoJICogVXBkYXRlIHRoZSBpbmZvcm1hdGlvbiBlbGVtZW50cyBpbiB0aGUgZGlzcGxheQoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5VcGRhdGVJbmZvICggc2V0dGluZ3MgKQoJewoJCS8qIFNob3cgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhYmxlICovCgkJdmFyIG5vZGVzID0gc2V0dGluZ3MuYWFuRmVhdHVyZXMuaTsKCQlpZiAoIG5vZGVzLmxlbmd0aCA9PT0gMCApIHsKCQkJcmV0dXJuOwoJCX0KCQoJCXZhcgoJCQlsYW5nICA9IHNldHRpbmdzLm9MYW5ndWFnZSwKCQkJc3RhcnQgPSBzZXR0aW5ncy5faURpc3BsYXlTdGFydCsxLAoJCQllbmQgICA9IHNldHRpbmdzLmZuRGlzcGxheUVuZCgpLAoJCQltYXggICA9IHNldHRpbmdzLmZuUmVjb3Jkc1RvdGFsKCksCgkJCXRvdGFsID0gc2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpLAoJCQlvdXQgICA9IHRvdGFsID8KCQkJCWxhbmcuc0luZm8gOgoJCQkJbGFuZy5zSW5mb0VtcHR5OwoJCgkJaWYgKCB0b3RhbCAhPT0gbWF4ICkgewoJCQkvKiBSZWNvcmQgc2V0IGFmdGVyIGZpbHRlcmluZyAqLwoJCQlvdXQgKz0gJyAnICsgbGFuZy5zSW5mb0ZpbHRlcmVkOwoJCX0KCQoJCS8vIENvbnZlcnQgdGhlIG1hY3JvcwoJCW91dCArPSBsYW5nLnNJbmZvUG9zdEZpeDsKCQlvdXQgPSBfZm5JbmZvTWFjcm9zKCBzZXR0aW5ncywgb3V0ICk7CgkKCQl2YXIgY2FsbGJhY2sgPSBsYW5nLmZuSW5mb0NhbGxiYWNrOwoJCWlmICggY2FsbGJhY2sgIT09IG51bGwgKSB7CgkJCW91dCA9IGNhbGxiYWNrLmNhbGwoIHNldHRpbmdzLm9JbnN0YW5jZSwKCQkJCXNldHRpbmdzLCBzdGFydCwgZW5kLCBtYXgsIHRvdGFsLCBvdXQKCQkJKTsKCQl9CgkKCQkkKG5vZGVzKS5odG1sKCBvdXQgKTsKCX0KCQoJCglmdW5jdGlvbiBfZm5JbmZvTWFjcm9zICggc2V0dGluZ3MsIHN0ciApCgl7CgkJLy8gV2hlbiBpbmZpbml0ZSBzY3JvbGxpbmcsIHdlIGFyZSBhbHdheXMgc3RhcnRpbmcgYXQgMS4gX2lEaXNwbGF5U3RhcnQgaXMgdXNlZCBvbmx5CgkJLy8gaW50ZXJuYWxseQoJCXZhcgoJCQlmb3JtYXR0ZXIgID0gc2V0dGluZ3MuZm5Gb3JtYXROdW1iZXIsCgkJCXN0YXJ0ICAgICAgPSBzZXR0aW5ncy5faURpc3BsYXlTdGFydCsxLAoJCQlsZW4gICAgICAgID0gc2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoLAoJCQl2aXMgICAgICAgID0gc2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpLAoJCQlhbGwgICAgICAgID0gbGVuID09PSAtMTsKCQoJCXJldHVybiBzdHIuCgkJCXJlcGxhY2UoL19TVEFSVF8vZywgZm9ybWF0dGVyLmNhbGwoIHNldHRpbmdzLCBzdGFydCApICkuCgkJCXJlcGxhY2UoL19FTkRfL2csICAgZm9ybWF0dGVyLmNhbGwoIHNldHRpbmdzLCBzZXR0aW5ncy5mbkRpc3BsYXlFbmQoKSApICkuCgkJCXJlcGxhY2UoL19NQVhfL2csICAgZm9ybWF0dGVyLmNhbGwoIHNldHRpbmdzLCBzZXR0aW5ncy5mblJlY29yZHNUb3RhbCgpICkgKS4KCQkJcmVwbGFjZSgvX1RPVEFMXy9nLCBmb3JtYXR0ZXIuY2FsbCggc2V0dGluZ3MsIHZpcyApICkuCgkJCXJlcGxhY2UoL19QQUdFXy9nLCAgZm9ybWF0dGVyLmNhbGwoIHNldHRpbmdzLCBhbGwgPyAxIDogTWF0aC5jZWlsKCBzdGFydCAvIGxlbiApICkgKS4KCQkJcmVwbGFjZSgvX1BBR0VTXy9nLCBmb3JtYXR0ZXIuY2FsbCggc2V0dGluZ3MsIGFsbCA/IDEgOiBNYXRoLmNlaWwoIHZpcyAvIGxlbiApICkgKTsKCX0KCQoJCgkKCS8qKgoJICogRHJhdyB0aGUgdGFibGUgZm9yIHRoZSBmaXJzdCB0aW1lLCBhZGRpbmcgYWxsIHJlcXVpcmVkIGZlYXR1cmVzCgkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkluaXRpYWxpc2UgKCBzZXR0aW5ncyApCgl7CgkJdmFyIGksIGlMZW4sIGlBamF4U3RhcnQ9c2V0dGluZ3MuaUluaXREaXNwbGF5U3RhcnQ7CgkJdmFyIGNvbHVtbnMgPSBzZXR0aW5ncy5hb0NvbHVtbnMsIGNvbHVtbjsKCQl2YXIgZmVhdHVyZXMgPSBzZXR0aW5ncy5vRmVhdHVyZXM7CgkJdmFyIGRlZmVyTG9hZGluZyA9IHNldHRpbmdzLmJEZWZlckxvYWRpbmc7IC8vIHZhbHVlIG1vZGlmaWVkIGJ5IHRoZSBkcmF3CgkKCQkvKiBFbnN1cmUgdGhhdCB0aGUgdGFibGUgZGF0YSBpcyBmdWxseSBpbml0aWFsaXNlZCAqLwoJCWlmICggISBzZXR0aW5ncy5iSW5pdGlhbGlzZWQgKSB7CgkJCXNldFRpbWVvdXQoIGZ1bmN0aW9uKCl7IF9mbkluaXRpYWxpc2UoIHNldHRpbmdzICk7IH0sIDIwMCApOwoJCQlyZXR1cm47CgkJfQoJCgkJLyogU2hvdyB0aGUgZGlzcGxheSBIVE1MIG9wdGlvbnMgKi8KCQlfZm5BZGRPcHRpb25zSHRtbCggc2V0dGluZ3MgKTsKCQoJCS8qIEJ1aWxkIGFuZCBkcmF3IHRoZSBoZWFkZXIgLyBmb290ZXIgZm9yIHRoZSB0YWJsZSAqLwoJCV9mbkJ1aWxkSGVhZCggc2V0dGluZ3MgKTsKCQlfZm5EcmF3SGVhZCggc2V0dGluZ3MsIHNldHRpbmdzLmFvSGVhZGVyICk7CgkJX2ZuRHJhd0hlYWQoIHNldHRpbmdzLCBzZXR0aW5ncy5hb0Zvb3RlciApOwoJCgkJLyogT2theSB0byBzaG93IHRoYXQgc29tZXRoaW5nIGlzIGdvaW5nIG9uIG5vdyAqLwoJCV9mblByb2Nlc3NpbmdEaXNwbGF5KCBzZXR0aW5ncywgdHJ1ZSApOwoJCgkJLyogQ2FsY3VsYXRlIHNpemVzIGZvciBjb2x1bW5zICovCgkJaWYgKCBmZWF0dXJlcy5iQXV0b1dpZHRoICkgewoJCQlfZm5DYWxjdWxhdGVDb2x1bW5XaWR0aHMoIHNldHRpbmdzICk7CgkJfQoJCgkJZm9yICggaT0wLCBpTGVuPWNvbHVtbnMubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkgewoJCQljb2x1bW4gPSBjb2x1bW5zW2ldOwoJCgkJCWlmICggY29sdW1uLnNXaWR0aCApIHsKCQkJCWNvbHVtbi5uVGguc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggY29sdW1uLnNXaWR0aCApOwoJCQl9CgkJfQoJCgkJX2ZuQ2FsbGJhY2tGaXJlKCBzZXR0aW5ncywgbnVsbCwgJ3ByZUluaXQnLCBbc2V0dGluZ3NdICk7CgkKCQkvLyBJZiB0aGVyZSBpcyBkZWZhdWx0IHNvcnRpbmcgcmVxdWlyZWQgLSBsZXQncyBkbyBpdC4gVGhlIHNvcnQgZnVuY3Rpb24KCQkvLyB3aWxsIGRvIHRoZSBkcmF3aW5nIGZvciB1cy4gT3RoZXJ3aXNlIHdlIGRyYXcgdGhlIHRhYmxlIHJlZ2FyZGxlc3Mgb2YgdGhlCgkJLy8gQWpheCBzb3VyY2UgLSB0aGlzIGFsbG93cyB0aGUgdGFibGUgdG8gbG9vayBpbml0aWFsaXNlZCBmb3IgQWpheCBzb3VyY2luZwoJCS8vIGRhdGEgKHNob3cgJ2xvYWRpbmcnIG1lc3NhZ2UgcG9zc2libHkpCgkJX2ZuUmVEcmF3KCBzZXR0aW5ncyApOwoJCgkJLy8gU2VydmVyLXNpZGUgcHJvY2Vzc2luZyBpbml0IGNvbXBsZXRlIGlzIGRvbmUgYnkgX2ZuQWpheFVwZGF0ZURyYXcKCQl2YXIgZGF0YVNyYyA9IF9mbkRhdGFTb3VyY2UoIHNldHRpbmdzICk7CgkJaWYgKCBkYXRhU3JjICE9ICdzc3AnIHx8IGRlZmVyTG9hZGluZyApIHsKCQkJLy8gaWYgdGhlcmUgaXMgYW4gYWpheCBzb3VyY2UgbG9hZCB0aGUgZGF0YQoJCQlpZiAoIGRhdGFTcmMgPT0gJ2FqYXgnICkgewoJCQkJX2ZuQnVpbGRBamF4KCBzZXR0aW5ncywgW10sIGZ1bmN0aW9uKGpzb24pIHsKCQkJCQl2YXIgYURhdGEgPSBfZm5BamF4RGF0YVNyYyggc2V0dGluZ3MsIGpzb24gKTsKCQoJCQkJCS8vIEdvdCB0aGUgZGF0YSAtIGFkZCBpdCB0byB0aGUgdGFibGUKCQkJCQlmb3IgKCBpPTAgOyBpPGFEYXRhLmxlbmd0aCA7IGkrKyApIHsKCQkJCQkJX2ZuQWRkRGF0YSggc2V0dGluZ3MsIGFEYXRhW2ldICk7CgkJCQkJfQoJCgkJCQkJLy8gUmVzZXQgdGhlIGluaXQgZGlzcGxheSBmb3IgY29va2llIHNhdmluZy4gV2UndmUgYWxyZWFkeSBkb25lCgkJCQkJLy8gYSBmaWx0ZXIsIGFuZCB0aGVyZWZvcmUgY2xlYXJlZCBpdCBiZWZvcmUuIFNvIHdlIG5lZWQgdG8gbWFrZQoJCQkJCS8vIGl0IGFwcGVhciAnZnJlc2gnCgkJCQkJc2V0dGluZ3MuaUluaXREaXNwbGF5U3RhcnQgPSBpQWpheFN0YXJ0OwoJCgkJCQkJX2ZuUmVEcmF3KCBzZXR0aW5ncyApOwoJCgkJCQkJX2ZuUHJvY2Vzc2luZ0Rpc3BsYXkoIHNldHRpbmdzLCBmYWxzZSApOwoJCQkJCV9mbkluaXRDb21wbGV0ZSggc2V0dGluZ3MsIGpzb24gKTsKCQkJCX0sIHNldHRpbmdzICk7CgkJCX0KCQkJZWxzZSB7CgkJCQlfZm5Qcm9jZXNzaW5nRGlzcGxheSggc2V0dGluZ3MsIGZhbHNlICk7CgkJCQlfZm5Jbml0Q29tcGxldGUoIHNldHRpbmdzICk7CgkJCX0KCQl9Cgl9CgkKCQoJLyoqCgkgKiBEcmF3IHRoZSB0YWJsZSBmb3IgdGhlIGZpcnN0IHRpbWUsIGFkZGluZyBhbGwgcmVxdWlyZWQgZmVhdHVyZXMKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHtvYmplY3R9IFtqc29uXSBKU09OIGZyb20gdGhlIHNlcnZlciB0aGF0IGNvbXBsZXRlZCB0aGUgdGFibGUsIGlmIHVzaW5nIEFqYXggc291cmNlCgkgKiAgICB3aXRoIGNsaWVudC1zaWRlIHByb2Nlc3NpbmcgKG9wdGlvbmFsKQoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5Jbml0Q29tcGxldGUgKCBzZXR0aW5ncywganNvbiApCgl7CgkJc2V0dGluZ3MuX2JJbml0Q29tcGxldGUgPSB0cnVlOwoJCgkJLy8gV2hlbiBkYXRhIHdhcyBhZGRlZCBhZnRlciB0aGUgaW5pdGlhbGlzYXRpb24gKGRhdGEgb3IgQWpheCkgd2UgbmVlZCB0bwoJCS8vIGNhbGN1bGF0ZSB0aGUgY29sdW1uIHNpemluZwoJCWlmICgganNvbiB8fCBzZXR0aW5ncy5vSW5pdC5hYURhdGEgKSB7CgkJCV9mbkFkanVzdENvbHVtblNpemluZyggc2V0dGluZ3MgKTsKCQl9CgkKCQlfZm5DYWxsYmFja0ZpcmUoIHNldHRpbmdzLCBudWxsLCAncGx1Z2luLWluaXQnLCBbc2V0dGluZ3MsIGpzb25dICk7CgkJX2ZuQ2FsbGJhY2tGaXJlKCBzZXR0aW5ncywgJ2FvSW5pdENvbXBsZXRlJywgJ2luaXQnLCBbc2V0dGluZ3MsIGpzb25dICk7Cgl9CgkKCQoJZnVuY3Rpb24gX2ZuTGVuZ3RoQ2hhbmdlICggc2V0dGluZ3MsIHZhbCApCgl7CgkJdmFyIGxlbiA9IHBhcnNlSW50KCB2YWwsIDEwICk7CgkJc2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoID0gbGVuOwoJCgkJX2ZuTGVuZ3RoT3ZlcmZsb3coIHNldHRpbmdzICk7CgkKCQkvLyBGaXJlIGxlbmd0aCBjaGFuZ2UgZXZlbnQKCQlfZm5DYWxsYmFja0ZpcmUoIHNldHRpbmdzLCBudWxsLCAnbGVuZ3RoJywgW3NldHRpbmdzLCBsZW5dICk7Cgl9CgkKCQoJLyoqCgkgKiBHZW5lcmF0ZSB0aGUgbm9kZSByZXF1aXJlZCBmb3IgdXNlciBkaXNwbGF5IGxlbmd0aCBjaGFuZ2luZwoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEByZXR1cm5zIHtub2RlfSBEaXNwbGF5IGxlbmd0aCBmZWF0dXJlIG5vZGUKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuRmVhdHVyZUh0bWxMZW5ndGggKCBzZXR0aW5ncyApCgl7CgkJdmFyCgkJCWNsYXNzZXMgID0gc2V0dGluZ3Mub0NsYXNzZXMsCgkJCXRhYmxlSWQgID0gc2V0dGluZ3Muc1RhYmxlSWQsCgkJCW1lbnUgICAgID0gc2V0dGluZ3MuYUxlbmd0aE1lbnUsCgkJCWQyICAgICAgID0gJC5pc0FycmF5KCBtZW51WzBdICksCgkJCWxlbmd0aHMgID0gZDIgPyBtZW51WzBdIDogbWVudSwKCQkJbGFuZ3VhZ2UgPSBkMiA/IG1lbnVbMV0gOiBtZW51OwoJCgkJdmFyIHNlbGVjdCA9ICQoJzxzZWxlY3QvPicsIHsKCQkJJ25hbWUnOiAgICAgICAgICB0YWJsZUlkKydfbGVuZ3RoJywKCQkJJ2FyaWEtY29udHJvbHMnOiB0YWJsZUlkLAoJCQknY2xhc3MnOiAgICAgICAgIGNsYXNzZXMuc0xlbmd0aFNlbGVjdAoJCX0gKTsKCQoJCWZvciAoIHZhciBpPTAsIGllbj1sZW5ndGhzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQlzZWxlY3RbMF1bIGkgXSA9IG5ldyBPcHRpb24oCgkJCQl0eXBlb2YgbGFuZ3VhZ2VbaV0gPT09ICdudW1iZXInID8KCQkJCQlzZXR0aW5ncy5mbkZvcm1hdE51bWJlciggbGFuZ3VhZ2VbaV0gKSA6CgkJCQkJbGFuZ3VhZ2VbaV0sCgkJCQlsZW5ndGhzW2ldCgkJCSk7CgkJfQoJCgkJdmFyIGRpdiA9ICQoJzxkaXY+PGxhYmVsLz48L2Rpdj4nKS5hZGRDbGFzcyggY2xhc3Nlcy5zTGVuZ3RoICk7CgkJaWYgKCAhIHNldHRpbmdzLmFhbkZlYXR1cmVzLmwgKSB7CgkJCWRpdlswXS5pZCA9IHRhYmxlSWQrJ19sZW5ndGgnOwoJCX0KCQoJCWRpdi5jaGlsZHJlbigpLmFwcGVuZCgKCQkJc2V0dGluZ3Mub0xhbmd1YWdlLnNMZW5ndGhNZW51LnJlcGxhY2UoICdfTUVOVV8nLCBzZWxlY3RbMF0ub3V0ZXJIVE1MICkKCQkpOwoJCgkJLy8gQ2FuJ3QgdXNlIGBzZWxlY3RgIHZhcmlhYmxlIGFzIHVzZXIgbWlnaHQgcHJvdmlkZSB0aGVpciBvd24gYW5kIHRoZQoJCS8vIHJlZmVyZW5jZSBpcyBicm9rZW4gYnkgdGhlIHVzZSBvZiBvdXRlckhUTUwKCQkkKCdzZWxlY3QnLCBkaXYpCgkJCS52YWwoIHNldHRpbmdzLl9pRGlzcGxheUxlbmd0aCApCgkJCS5vbiggJ2NoYW5nZS5EVCcsIGZ1bmN0aW9uKGUpIHsKCQkJCV9mbkxlbmd0aENoYW5nZSggc2V0dGluZ3MsICQodGhpcykudmFsKCkgKTsKCQkJCV9mbkRyYXcoIHNldHRpbmdzICk7CgkJCX0gKTsKCQoJCS8vIFVwZGF0ZSBub2RlIHZhbHVlIHdoZW5ldmVyIGFueXRoaW5nIGNoYW5nZXMgdGhlIHRhYmxlJ3MgbGVuZ3RoCgkJJChzZXR0aW5ncy5uVGFibGUpLm9uKCAnbGVuZ3RoLmR0LkRUJywgZnVuY3Rpb24gKGUsIHMsIGxlbikgewoJCQlpZiAoIHNldHRpbmdzID09PSBzICkgewoJCQkJJCgnc2VsZWN0JywgZGl2KS52YWwoIGxlbiApOwoJCQl9CgkJfSApOwoJCgkJcmV0dXJuIGRpdlswXTsKCX0KCQoJCgkKCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgcGFnaW5nIGxvZ2ljIGlzIGRvbmUgaW4KCSAqIERhdGFUYWJsZS5leHQucGFnZXIKCSAqLwoJCgkvKioKCSAqIEdlbmVyYXRlIHRoZSBub2RlIHJlcXVpcmVkIGZvciBkZWZhdWx0IHBhZ2luYXRpb24KCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHJldHVybnMge25vZGV9IFBhZ2luYXRpb24gZmVhdHVyZSBub2RlCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkZlYXR1cmVIdG1sUGFnaW5hdGUgKCBzZXR0aW5ncyApCgl7CgkJdmFyCgkJCXR5cGUgICA9IHNldHRpbmdzLnNQYWdpbmF0aW9uVHlwZSwKCQkJcGx1Z2luID0gRGF0YVRhYmxlLmV4dC5wYWdlclsgdHlwZSBdLAoJCQltb2Rlcm4gPSB0eXBlb2YgcGx1Z2luID09PSAnZnVuY3Rpb24nLAoJCQlyZWRyYXcgPSBmdW5jdGlvbiggc2V0dGluZ3MgKSB7CgkJCQlfZm5EcmF3KCBzZXR0aW5ncyApOwoJCQl9LAoJCQlub2RlID0gJCgnPGRpdi8+JykuYWRkQ2xhc3MoIHNldHRpbmdzLm9DbGFzc2VzLnNQYWdpbmcgKyB0eXBlIClbMF0sCgkJCWZlYXR1cmVzID0gc2V0dGluZ3MuYWFuRmVhdHVyZXM7CgkKCQlpZiAoICEgbW9kZXJuICkgewoJCQlwbHVnaW4uZm5Jbml0KCBzZXR0aW5ncywgbm9kZSwgcmVkcmF3ICk7CgkJfQoJCgkJLyogQWRkIGEgZHJhdyBjYWxsYmFjayBmb3IgdGhlIHBhZ2luYXRpb24gb24gZmlyc3QgaW5zdGFuY2UsIHRvIHVwZGF0ZSB0aGUgcGFnaW5nIGRpc3BsYXkgKi8KCQlpZiAoICEgZmVhdHVyZXMucCApCgkJewoJCQlub2RlLmlkID0gc2V0dGluZ3Muc1RhYmxlSWQrJ19wYWdpbmF0ZSc7CgkKCQkJc2V0dGluZ3MuYW9EcmF3Q2FsbGJhY2sucHVzaCggewoJCQkJImZuIjogZnVuY3Rpb24oIHNldHRpbmdzICkgewoJCQkJCWlmICggbW9kZXJuICkgewoJCQkJCQl2YXIKCQkJCQkJCXN0YXJ0ICAgICAgPSBzZXR0aW5ncy5faURpc3BsYXlTdGFydCwKCQkJCQkJCWxlbiAgICAgICAgPSBzZXR0aW5ncy5faURpc3BsYXlMZW5ndGgsCgkJCQkJCQl2aXNSZWNvcmRzID0gc2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpLAoJCQkJCQkJYWxsICAgICAgICA9IGxlbiA9PT0gLTEsCgkJCQkJCQlwYWdlID0gYWxsID8gMCA6IE1hdGguY2VpbCggc3RhcnQgLyBsZW4gKSwKCQkJCQkJCXBhZ2VzID0gYWxsID8gMSA6IE1hdGguY2VpbCggdmlzUmVjb3JkcyAvIGxlbiApLAoJCQkJCQkJYnV0dG9ucyA9IHBsdWdpbihwYWdlLCBwYWdlcyksCgkJCQkJCQlpLCBpZW47CgkKCQkJCQkJZm9yICggaT0wLCBpZW49ZmVhdHVyZXMucC5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCQkJCV9mblJlbmRlcmVyKCBzZXR0aW5ncywgJ3BhZ2VCdXR0b24nICkoCgkJCQkJCQkJc2V0dGluZ3MsIGZlYXR1cmVzLnBbaV0sIGksIGJ1dHRvbnMsIHBhZ2UsIHBhZ2VzCgkJCQkJCQkpOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWVsc2UgewoJCQkJCQlwbHVnaW4uZm5VcGRhdGUoIHNldHRpbmdzLCByZWRyYXcgKTsKCQkJCQl9CgkJCQl9LAoJCQkJInNOYW1lIjogInBhZ2luYXRpb24iCgkJCX0gKTsKCQl9CgkKCQlyZXR1cm4gbm9kZTsKCX0KCQoJCgkvKioKCSAqIEFsdGVyIHRoZSBkaXNwbGF5IHNldHRpbmdzIHRvIGNoYW5nZSB0aGUgcGFnZQoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSB7c3RyaW5nfGludH0gYWN0aW9uIFBhZ2luZyBhY3Rpb24gdG8gdGFrZTogImZpcnN0IiwgInByZXZpb3VzIiwKCSAqICAgICJuZXh0IiBvciAibGFzdCIgb3IgcGFnZSBudW1iZXIgdG8ganVtcCB0byAoaW50ZWdlcikKCSAqICBAcGFyYW0gW2Jvb2xdIHJlZHJhdyBBdXRvbWF0aWNhbGx5IGRyYXcgdGhlIHVwZGF0ZSBvciBub3QKCSAqICBAcmV0dXJucyB7Ym9vbH0gdHJ1ZSBwYWdlIGhhcyBjaGFuZ2VkLCBmYWxzZSAtIG5vIGNoYW5nZQoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5QYWdlQ2hhbmdlICggc2V0dGluZ3MsIGFjdGlvbiwgcmVkcmF3ICkKCXsKCQl2YXIKCQkJc3RhcnQgICAgID0gc2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQsCgkJCWxlbiAgICAgICA9IHNldHRpbmdzLl9pRGlzcGxheUxlbmd0aCwKCQkJcmVjb3JkcyAgID0gc2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpOwoJCgkJaWYgKCByZWNvcmRzID09PSAwIHx8IGxlbiA9PT0gLTEgKQoJCXsKCQkJc3RhcnQgPSAwOwoJCX0KCQllbHNlIGlmICggdHlwZW9mIGFjdGlvbiA9PT0gIm51bWJlciIgKQoJCXsKCQkJc3RhcnQgPSBhY3Rpb24gKiBsZW47CgkKCQkJaWYgKCBzdGFydCA+IHJlY29yZHMgKQoJCQl7CgkJCQlzdGFydCA9IDA7CgkJCX0KCQl9CgkJZWxzZSBpZiAoIGFjdGlvbiA9PSAiZmlyc3QiICkKCQl7CgkJCXN0YXJ0ID0gMDsKCQl9CgkJZWxzZSBpZiAoIGFjdGlvbiA9PSAicHJldmlvdXMiICkKCQl7CgkJCXN0YXJ0ID0gbGVuID49IDAgPwoJCQkJc3RhcnQgLSBsZW4gOgoJCQkJMDsKCQoJCQlpZiAoIHN0YXJ0IDwgMCApCgkJCXsKCQkJICBzdGFydCA9IDA7CgkJCX0KCQl9CgkJZWxzZSBpZiAoIGFjdGlvbiA9PSAibmV4dCIgKQoJCXsKCQkJaWYgKCBzdGFydCArIGxlbiA8IHJlY29yZHMgKQoJCQl7CgkJCQlzdGFydCArPSBsZW47CgkJCX0KCQl9CgkJZWxzZSBpZiAoIGFjdGlvbiA9PSAibGFzdCIgKQoJCXsKCQkJc3RhcnQgPSBNYXRoLmZsb29yKCAocmVjb3Jkcy0xKSAvIGxlbikgKiBsZW47CgkJfQoJCWVsc2UKCQl7CgkJCV9mbkxvZyggc2V0dGluZ3MsIDAsICJVbmtub3duIHBhZ2luZyBhY3Rpb246ICIrYWN0aW9uLCA1ICk7CgkJfQoJCgkJdmFyIGNoYW5nZWQgPSBzZXR0aW5ncy5faURpc3BsYXlTdGFydCAhPT0gc3RhcnQ7CgkJc2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPSBzdGFydDsKCQoJCWlmICggY2hhbmdlZCApIHsKCQkJX2ZuQ2FsbGJhY2tGaXJlKCBzZXR0aW5ncywgbnVsbCwgJ3BhZ2UnLCBbc2V0dGluZ3NdICk7CgkKCQkJaWYgKCByZWRyYXcgKSB7CgkJCQlfZm5EcmF3KCBzZXR0aW5ncyApOwoJCQl9CgkJfQoJCgkJcmV0dXJuIGNoYW5nZWQ7Cgl9CgkKCQoJCgkvKioKCSAqIEdlbmVyYXRlIHRoZSBub2RlIHJlcXVpcmVkIGZvciB0aGUgcHJvY2Vzc2luZyBub2RlCgkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHJldHVybnMge25vZGV9IFByb2Nlc3NpbmcgZWxlbWVudAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5GZWF0dXJlSHRtbFByb2Nlc3NpbmcgKCBzZXR0aW5ncyApCgl7CgkJcmV0dXJuICQoJzxkaXYvPicsIHsKCQkJCSdpZCc6ICEgc2V0dGluZ3MuYWFuRmVhdHVyZXMuciA/IHNldHRpbmdzLnNUYWJsZUlkKydfcHJvY2Vzc2luZycgOiBudWxsLAoJCQkJJ2NsYXNzJzogc2V0dGluZ3Mub0NsYXNzZXMuc1Byb2Nlc3NpbmcKCQkJfSApCgkJCS5odG1sKCBzZXR0aW5ncy5vTGFuZ3VhZ2Uuc1Byb2Nlc3NpbmcgKQoJCQkuaW5zZXJ0QmVmb3JlKCBzZXR0aW5ncy5uVGFibGUgKVswXTsKCX0KCQoJCgkvKioKCSAqIERpc3BsYXkgb3IgaGlkZSB0aGUgcHJvY2Vzc2luZyBpbmRpY2F0b3IKCSAqICBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge2Jvb2x9IHNob3cgU2hvdyB0aGUgcHJvY2Vzc2luZyBpbmRpY2F0b3IgKHRydWUpIG9yIG5vdCAoZmFsc2UpCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mblByb2Nlc3NpbmdEaXNwbGF5ICggc2V0dGluZ3MsIHNob3cgKQoJewoJCWlmICggc2V0dGluZ3Mub0ZlYXR1cmVzLmJQcm9jZXNzaW5nICkgewoJCQkkKHNldHRpbmdzLmFhbkZlYXR1cmVzLnIpLmNzcyggJ2Rpc3BsYXknLCBzaG93ID8gJ2Jsb2NrJyA6ICdub25lJyApOwoJCX0KCQoJCV9mbkNhbGxiYWNrRmlyZSggc2V0dGluZ3MsIG51bGwsICdwcm9jZXNzaW5nJywgW3NldHRpbmdzLCBzaG93XSApOwoJfQoJCgkvKioKCSAqIEFkZCBhbnkgY29udHJvbCBlbGVtZW50cyBmb3IgdGhlIHRhYmxlIC0gc3BlY2lmaWNhbGx5IHNjcm9sbGluZwoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEByZXR1cm5zIHtub2RlfSBOb2RlIHRvIGFkZCB0byB0aGUgRE9NCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkZlYXR1cmVIdG1sVGFibGUgKCBzZXR0aW5ncyApCgl7CgkJdmFyIHRhYmxlID0gJChzZXR0aW5ncy5uVGFibGUpOwoJCgkJLy8gQWRkIHRoZSBBUklBIGdyaWQgcm9sZSB0byB0aGUgdGFibGUKCQl0YWJsZS5hdHRyKCAncm9sZScsICdncmlkJyApOwoJCgkJLy8gU2Nyb2xsaW5nIGZyb20gaGVyZSBvbiBpbgoJCXZhciBzY3JvbGwgPSBzZXR0aW5ncy5vU2Nyb2xsOwoJCgkJaWYgKCBzY3JvbGwuc1ggPT09ICcnICYmIHNjcm9sbC5zWSA9PT0gJycgKSB7CgkJCXJldHVybiBzZXR0aW5ncy5uVGFibGU7CgkJfQoJCgkJdmFyIHNjcm9sbFggPSBzY3JvbGwuc1g7CgkJdmFyIHNjcm9sbFkgPSBzY3JvbGwuc1k7CgkJdmFyIGNsYXNzZXMgPSBzZXR0aW5ncy5vQ2xhc3NlczsKCQl2YXIgY2FwdGlvbiA9IHRhYmxlLmNoaWxkcmVuKCdjYXB0aW9uJyk7CgkJdmFyIGNhcHRpb25TaWRlID0gY2FwdGlvbi5sZW5ndGggPyBjYXB0aW9uWzBdLl9jYXB0aW9uU2lkZSA6IG51bGw7CgkJdmFyIGhlYWRlckNsb25lID0gJCggdGFibGVbMF0uY2xvbmVOb2RlKGZhbHNlKSApOwoJCXZhciBmb290ZXJDbG9uZSA9ICQoIHRhYmxlWzBdLmNsb25lTm9kZShmYWxzZSkgKTsKCQl2YXIgZm9vdGVyID0gdGFibGUuY2hpbGRyZW4oJ3Rmb290Jyk7CgkJdmFyIF9kaXYgPSAnPGRpdi8+JzsKCQl2YXIgc2l6ZSA9IGZ1bmN0aW9uICggcyApIHsKCQkJcmV0dXJuICFzID8gbnVsbCA6IF9mblN0cmluZ1RvQ3NzKCBzICk7CgkJfTsKCQoJCWlmICggISBmb290ZXIubGVuZ3RoICkgewoJCQlmb290ZXIgPSBudWxsOwoJCX0KCQoJCS8qCgkJICogVGhlIEhUTUwgc3RydWN0dXJlIHRoYXQgd2Ugd2FudCB0byBnZW5lcmF0ZSBpbiB0aGlzIGZ1bmN0aW9uIGlzOgoJCSAqICBkaXYgLSBzY3JvbGxlcgoJCSAqICAgIGRpdiAtIHNjcm9sbCBoZWFkCgkJICogICAgICBkaXYgLSBzY3JvbGwgaGVhZCBpbm5lcgoJCSAqICAgICAgICB0YWJsZSAtIHNjcm9sbCBoZWFkIHRhYmxlCgkJICogICAgICAgICAgdGhlYWQgLSB0aGVhZAoJCSAqICAgIGRpdiAtIHNjcm9sbCBib2R5CgkJICogICAgICB0YWJsZSAtIHRhYmxlIChtYXN0ZXIgdGFibGUpCgkJICogICAgICAgIHRoZWFkIC0gdGhlYWQgY2xvbmUgZm9yIHNpemluZwoJCSAqICAgICAgICB0Ym9keSAtIHRib2R5CgkJICogICAgZGl2IC0gc2Nyb2xsIGZvb3QKCQkgKiAgICAgIGRpdiAtIHNjcm9sbCBmb290IGlubmVyCgkJICogICAgICAgIHRhYmxlIC0gc2Nyb2xsIGZvb3QgdGFibGUKCQkgKiAgICAgICAgICB0Zm9vdCAtIHRmb290CgkJICovCgkJdmFyIHNjcm9sbGVyID0gJCggX2RpdiwgeyAnY2xhc3MnOiBjbGFzc2VzLnNTY3JvbGxXcmFwcGVyIH0gKQoJCQkuYXBwZW5kKAoJCQkJJChfZGl2LCB7ICdjbGFzcyc6IGNsYXNzZXMuc1Njcm9sbEhlYWQgfSApCgkJCQkJLmNzcyggewoJCQkJCQlvdmVyZmxvdzogJ2hpZGRlbicsCgkJCQkJCXBvc2l0aW9uOiAncmVsYXRpdmUnLAoJCQkJCQlib3JkZXI6IDAsCgkJCQkJCXdpZHRoOiBzY3JvbGxYID8gc2l6ZShzY3JvbGxYKSA6ICcxMDAlJwoJCQkJCX0gKQoJCQkJCS5hcHBlbmQoCgkJCQkJCSQoX2RpdiwgeyAnY2xhc3MnOiBjbGFzc2VzLnNTY3JvbGxIZWFkSW5uZXIgfSApCgkJCQkJCQkuY3NzKCB7CgkJCQkJCQkJJ2JveC1zaXppbmcnOiAnY29udGVudC1ib3gnLAoJCQkJCQkJCXdpZHRoOiBzY3JvbGwuc1hJbm5lciB8fCAnMTAwJScKCQkJCQkJCX0gKQoJCQkJCQkJLmFwcGVuZCgKCQkJCQkJCQloZWFkZXJDbG9uZQoJCQkJCQkJCQkucmVtb3ZlQXR0cignaWQnKQoJCQkJCQkJCQkuY3NzKCAnbWFyZ2luLWxlZnQnLCAwICkKCQkJCQkJCQkJLmFwcGVuZCggY2FwdGlvblNpZGUgPT09ICd0b3AnID8gY2FwdGlvbiA6IG51bGwgKQoJCQkJCQkJCQkuYXBwZW5kKAoJCQkJCQkJCQkJdGFibGUuY2hpbGRyZW4oJ3RoZWFkJykKCQkJCQkJCQkJKQoJCQkJCQkJKQoJCQkJCSkKCQkJKQoJCQkuYXBwZW5kKAoJCQkJJChfZGl2LCB7ICdjbGFzcyc6IGNsYXNzZXMuc1Njcm9sbEJvZHkgfSApCgkJCQkJLmNzcyggewoJCQkJCQlwb3NpdGlvbjogJ3JlbGF0aXZlJywKCQkJCQkJb3ZlcmZsb3c6ICdhdXRvJywKCQkJCQkJd2lkdGg6IHNpemUoIHNjcm9sbFggKQoJCQkJCX0gKQoJCQkJCS5hcHBlbmQoIHRhYmxlICkKCQkJKTsKCQoJCWlmICggZm9vdGVyICkgewoJCQlzY3JvbGxlci5hcHBlbmQoCgkJCQkkKF9kaXYsIHsgJ2NsYXNzJzogY2xhc3Nlcy5zU2Nyb2xsRm9vdCB9ICkKCQkJCQkuY3NzKCB7CgkJCQkJCW92ZXJmbG93OiAnaGlkZGVuJywKCQkJCQkJYm9yZGVyOiAwLAoJCQkJCQl3aWR0aDogc2Nyb2xsWCA/IHNpemUoc2Nyb2xsWCkgOiAnMTAwJScKCQkJCQl9ICkKCQkJCQkuYXBwZW5kKAoJCQkJCQkkKF9kaXYsIHsgJ2NsYXNzJzogY2xhc3Nlcy5zU2Nyb2xsRm9vdElubmVyIH0gKQoJCQkJCQkJLmFwcGVuZCgKCQkJCQkJCQlmb290ZXJDbG9uZQoJCQkJCQkJCQkucmVtb3ZlQXR0cignaWQnKQoJCQkJCQkJCQkuY3NzKCAnbWFyZ2luLWxlZnQnLCAwICkKCQkJCQkJCQkJLmFwcGVuZCggY2FwdGlvblNpZGUgPT09ICdib3R0b20nID8gY2FwdGlvbiA6IG51bGwgKQoJCQkJCQkJCQkuYXBwZW5kKAoJCQkJCQkJCQkJdGFibGUuY2hpbGRyZW4oJ3Rmb290JykKCQkJCQkJCQkJKQoJCQkJCQkJKQoJCQkJCSkKCQkJKTsKCQl9CgkKCQl2YXIgY2hpbGRyZW4gPSBzY3JvbGxlci5jaGlsZHJlbigpOwoJCXZhciBzY3JvbGxIZWFkID0gY2hpbGRyZW5bMF07CgkJdmFyIHNjcm9sbEJvZHkgPSBjaGlsZHJlblsxXTsKCQl2YXIgc2Nyb2xsRm9vdCA9IGZvb3RlciA/IGNoaWxkcmVuWzJdIDogbnVsbDsKCQoJCS8vIFdoZW4gdGhlIGJvZHkgaXMgc2Nyb2xsZWQsIHRoZW4gd2UgYWxzbyB3YW50IHRvIHNjcm9sbCB0aGUgaGVhZGVycwoJCWlmICggc2Nyb2xsWCApIHsKCQkJJChzY3JvbGxCb2R5KS5vbiggJ3Njcm9sbC5EVCcsIGZ1bmN0aW9uIChlKSB7CgkJCQl2YXIgc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsTGVmdDsKCQoJCQkJc2Nyb2xsSGVhZC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDsKCQoJCQkJaWYgKCBmb290ZXIgKSB7CgkJCQkJc2Nyb2xsRm9vdC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDsKCQkJCX0KCQkJfSApOwoJCX0KCQoJCSQoc2Nyb2xsQm9keSkuY3NzKAoJCQlzY3JvbGxZICYmIHNjcm9sbC5iQ29sbGFwc2UgPyAnbWF4LWhlaWdodCcgOiAnaGVpZ2h0JywgCgkJCXNjcm9sbFkKCQkpOwoJCgkJc2V0dGluZ3MublNjcm9sbEhlYWQgPSBzY3JvbGxIZWFkOwoJCXNldHRpbmdzLm5TY3JvbGxCb2R5ID0gc2Nyb2xsQm9keTsKCQlzZXR0aW5ncy5uU2Nyb2xsRm9vdCA9IHNjcm9sbEZvb3Q7CgkKCQkvLyBPbiByZWRyYXcgLSBhbGlnbiBjb2x1bW5zCgkJc2V0dGluZ3MuYW9EcmF3Q2FsbGJhY2sucHVzaCggewoJCQkiZm4iOiBfZm5TY3JvbGxEcmF3LAoJCQkic05hbWUiOiAic2Nyb2xsaW5nIgoJCX0gKTsKCQoJCXJldHVybiBzY3JvbGxlclswXTsKCX0KCQoJCgkKCS8qKgoJICogVXBkYXRlIHRoZSBoZWFkZXIsIGZvb3RlciBhbmQgYm9keSB0YWJsZXMgZm9yIHJlc2l6aW5nIC0gaS5lLiBjb2x1bW4KCSAqIGFsaWdubWVudC4KCSAqCgkgKiBXZWxjb21lIHRvIHRoZSBtb3N0IGhvcnJpYmxlIGZ1bmN0aW9uIERhdGFUYWJsZXMuIFRoZSBwcm9jZXNzIHRoYXQgdGhpcwoJICogZnVuY3Rpb24gZm9sbG93cyBpcyBiYXNpY2FsbHk6CgkgKiAgIDEuIFJlLWNyZWF0ZSB0aGUgdGFibGUgaW5zaWRlIHRoZSBzY3JvbGxpbmcgZGl2CgkgKiAgIDIuIFRha2UgbGl2ZSBtZWFzdXJlbWVudHMgZnJvbSB0aGUgRE9NCgkgKiAgIDMuIEFwcGx5IHRoZSBtZWFzdXJlbWVudHMgdG8gYWxpZ24gdGhlIGNvbHVtbnMKCSAqICAgNC4gQ2xlYW4gdXAKCSAqCgkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mblNjcm9sbERyYXcgKCBzZXR0aW5ncyApCgl7CgkJLy8gR2l2ZW4gdGhhdCB0aGlzIGlzIHN1Y2ggYSBtb25zdGVyIGZ1bmN0aW9uLCBhIGxvdCBvZiB2YXJpYWJsZXMgYXJlIHVzZQoJCS8vIHRvIHRyeSBhbmQga2VlcCB0aGUgbWluaW1pc2VkIHNpemUgYXMgc21hbGwgYXMgcG9zc2libGUKCQl2YXIKCQkJc2Nyb2xsICAgICAgICAgPSBzZXR0aW5ncy5vU2Nyb2xsLAoJCQlzY3JvbGxYICAgICAgICA9IHNjcm9sbC5zWCwKCQkJc2Nyb2xsWElubmVyICAgPSBzY3JvbGwuc1hJbm5lciwKCQkJc2Nyb2xsWSAgICAgICAgPSBzY3JvbGwuc1ksCgkJCWJhcldpZHRoICAgICAgID0gc2Nyb2xsLmlCYXJXaWR0aCwKCQkJZGl2SGVhZGVyICAgICAgPSAkKHNldHRpbmdzLm5TY3JvbGxIZWFkKSwKCQkJZGl2SGVhZGVyU3R5bGUgPSBkaXZIZWFkZXJbMF0uc3R5bGUsCgkJCWRpdkhlYWRlcklubmVyID0gZGl2SGVhZGVyLmNoaWxkcmVuKCdkaXYnKSwKCQkJZGl2SGVhZGVySW5uZXJTdHlsZSA9IGRpdkhlYWRlcklubmVyWzBdLnN0eWxlLAoJCQlkaXZIZWFkZXJUYWJsZSA9IGRpdkhlYWRlcklubmVyLmNoaWxkcmVuKCd0YWJsZScpLAoJCQlkaXZCb2R5RWwgICAgICA9IHNldHRpbmdzLm5TY3JvbGxCb2R5LAoJCQlkaXZCb2R5ICAgICAgICA9ICQoZGl2Qm9keUVsKSwKCQkJZGl2Qm9keVN0eWxlICAgPSBkaXZCb2R5RWwuc3R5bGUsCgkJCWRpdkZvb3RlciAgICAgID0gJChzZXR0aW5ncy5uU2Nyb2xsRm9vdCksCgkJCWRpdkZvb3RlcklubmVyID0gZGl2Rm9vdGVyLmNoaWxkcmVuKCdkaXYnKSwKCQkJZGl2Rm9vdGVyVGFibGUgPSBkaXZGb290ZXJJbm5lci5jaGlsZHJlbigndGFibGUnKSwKCQkJaGVhZGVyICAgICAgICAgPSAkKHNldHRpbmdzLm5USGVhZCksCgkJCXRhYmxlICAgICAgICAgID0gJChzZXR0aW5ncy5uVGFibGUpLAoJCQl0YWJsZUVsICAgICAgICA9IHRhYmxlWzBdLAoJCQl0YWJsZVN0eWxlICAgICA9IHRhYmxlRWwuc3R5bGUsCgkJCWZvb3RlciAgICAgICAgID0gc2V0dGluZ3MublRGb290ID8gJChzZXR0aW5ncy5uVEZvb3QpIDogbnVsbCwKCQkJYnJvd3NlciAgICAgICAgPSBzZXR0aW5ncy5vQnJvd3NlciwKCQkJaWU2NyAgICAgICAgICAgPSBicm93c2VyLmJTY3JvbGxPdmVyc2l6ZSwKCQkJZHRIZWFkZXJDZWxscyAgPSBfcGx1Y2soIHNldHRpbmdzLmFvQ29sdW1ucywgJ25UaCcgKSwKCQkJaGVhZGVyVHJnRWxzLCBmb290ZXJUcmdFbHMsCgkJCWhlYWRlclNyY0VscywgZm9vdGVyU3JjRWxzLAoJCQloZWFkZXJDb3B5LCBmb290ZXJDb3B5LAoJCQloZWFkZXJXaWR0aHM9W10sIGZvb3RlcldpZHRocz1bXSwKCQkJaGVhZGVyQ29udGVudD1bXSwgZm9vdGVyQ29udGVudD1bXSwKCQkJaWR4LCBjb3JyZWN0aW9uLCBzYW5pdHlXaWR0aCwKCQkJemVyb091dCA9IGZ1bmN0aW9uKG5TaXplcikgewoJCQkJdmFyIHN0eWxlID0gblNpemVyLnN0eWxlOwoJCQkJc3R5bGUucGFkZGluZ1RvcCA9ICIwIjsKCQkJCXN0eWxlLnBhZGRpbmdCb3R0b20gPSAiMCI7CgkJCQlzdHlsZS5ib3JkZXJUb3BXaWR0aCA9ICIwIjsKCQkJCXN0eWxlLmJvcmRlckJvdHRvbVdpZHRoID0gIjAiOwoJCQkJc3R5bGUuaGVpZ2h0ID0gMDsKCQkJfTsKCQoJCS8vIElmIHRoZSBzY3JvbGxiYXIgdmlzaWJpbGl0eSBoYXMgY2hhbmdlZCBmcm9tIHRoZSBsYXN0IGRyYXcsIHdlIG5lZWQgdG8KCQkvLyBhZGp1c3QgdGhlIGNvbHVtbiBzaXplcyBhcyB0aGUgdGFibGUgd2lkdGggd2lsbCBoYXZlIGNoYW5nZWQgdG8gYWNjb3VudAoJCS8vIGZvciB0aGUgc2Nyb2xsYmFyCgkJdmFyIHNjcm9sbEJhclZpcyA9IGRpdkJvZHlFbC5zY3JvbGxIZWlnaHQgPiBkaXZCb2R5RWwuY2xpZW50SGVpZ2h0OwoJCQoJCWlmICggc2V0dGluZ3Muc2Nyb2xsQmFyVmlzICE9PSBzY3JvbGxCYXJWaXMgJiYgc2V0dGluZ3Muc2Nyb2xsQmFyVmlzICE9PSB1bmRlZmluZWQgKSB7CgkJCXNldHRpbmdzLnNjcm9sbEJhclZpcyA9IHNjcm9sbEJhclZpczsKCQkJX2ZuQWRqdXN0Q29sdW1uU2l6aW5nKCBzZXR0aW5ncyApOwoJCQlyZXR1cm47IC8vIGFkanVzdCBjb2x1bW4gc2l6aW5nIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIGFnYWluCgkJfQoJCWVsc2UgewoJCQlzZXR0aW5ncy5zY3JvbGxCYXJWaXMgPSBzY3JvbGxCYXJWaXM7CgkJfQoJCgkJLyoKCQkgKiAxLiBSZS1jcmVhdGUgdGhlIHRhYmxlIGluc2lkZSB0aGUgc2Nyb2xsaW5nIGRpdgoJCSAqLwoJCgkJLy8gUmVtb3ZlIHRoZSBvbGQgbWluaW1pc2VkIHRoZWFkIGFuZCB0Zm9vdCBlbGVtZW50cyBpbiB0aGUgaW5uZXIgdGFibGUKCQl0YWJsZS5jaGlsZHJlbigndGhlYWQsIHRmb290JykucmVtb3ZlKCk7CgkKCQlpZiAoIGZvb3RlciApIHsKCQkJZm9vdGVyQ29weSA9IGZvb3Rlci5jbG9uZSgpLnByZXBlbmRUbyggdGFibGUgKTsKCQkJZm9vdGVyVHJnRWxzID0gZm9vdGVyLmZpbmQoJ3RyJyk7IC8vIHRoZSBvcmlnaW5hbCB0Zm9vdCBpcyBpbiBpdHMgb3duIHRhYmxlIGFuZCBtdXN0IGJlIHNpemVkCgkJCWZvb3RlclNyY0VscyA9IGZvb3RlckNvcHkuZmluZCgndHInKTsKCQl9CgkKCQkvLyBDbG9uZSB0aGUgY3VycmVudCBoZWFkZXIgYW5kIGZvb3RlciBlbGVtZW50cyBhbmQgdGhlbiBwbGFjZSBpdCBpbnRvIHRoZSBpbm5lciB0YWJsZQoJCWhlYWRlckNvcHkgPSBoZWFkZXIuY2xvbmUoKS5wcmVwZW5kVG8oIHRhYmxlICk7CgkJaGVhZGVyVHJnRWxzID0gaGVhZGVyLmZpbmQoJ3RyJyk7IC8vIG9yaWdpbmFsIGhlYWRlciBpcyBpbiBpdHMgb3duIHRhYmxlCgkJaGVhZGVyU3JjRWxzID0gaGVhZGVyQ29weS5maW5kKCd0cicpOwoJCWhlYWRlckNvcHkuZmluZCgndGgsIHRkJykucmVtb3ZlQXR0cigndGFiaW5kZXgnKTsKCQoJCgkJLyoKCQkgKiAyLiBUYWtlIGxpdmUgbWVhc3VyZW1lbnRzIGZyb20gdGhlIERPTSAtIGRvIG5vdCBhbHRlciB0aGUgRE9NIGl0c2VsZiEKCQkgKi8KCQoJCS8vIFJlbW92ZSBvbGQgc2l6aW5nIGFuZCBhcHBseSB0aGUgY2FsY3VsYXRlZCBjb2x1bW4gd2lkdGhzCgkJLy8gR2V0IHRoZSB1bmlxdWUgY29sdW1uIGhlYWRlcnMgaW4gdGhlIG5ld2x5IGNyZWF0ZWQgKGNsb25lZCkgaGVhZGVyLiBXZSB3YW50IHRvIGFwcGx5IHRoZQoJCS8vIGNhbGN1bGF0ZWQgc2l6ZXMgdG8gdGhpcyBoZWFkZXIKCQlpZiAoICEgc2Nyb2xsWCApCgkJewoJCQlkaXZCb2R5U3R5bGUud2lkdGggPSAnMTAwJSc7CgkJCWRpdkhlYWRlclswXS5zdHlsZS53aWR0aCA9ICcxMDAlJzsKCQl9CgkKCQkkLmVhY2goIF9mbkdldFVuaXF1ZVRocyggc2V0dGluZ3MsIGhlYWRlckNvcHkgKSwgZnVuY3Rpb24gKCBpLCBlbCApIHsKCQkJaWR4ID0gX2ZuVmlzaWJsZVRvQ29sdW1uSW5kZXgoIHNldHRpbmdzLCBpICk7CgkJCWVsLnN0eWxlLndpZHRoID0gc2V0dGluZ3MuYW9Db2x1bW5zW2lkeF0uc1dpZHRoOwoJCX0gKTsKCQoJCWlmICggZm9vdGVyICkgewoJCQlfZm5BcHBseVRvQ2hpbGRyZW4oIGZ1bmN0aW9uKG4pIHsKCQkJCW4uc3R5bGUud2lkdGggPSAiIjsKCQkJfSwgZm9vdGVyU3JjRWxzICk7CgkJfQoJCgkJLy8gU2l6ZSB0aGUgdGFibGUgYXMgYSB3aG9sZQoJCXNhbml0eVdpZHRoID0gdGFibGUub3V0ZXJXaWR0aCgpOwoJCWlmICggc2Nyb2xsWCA9PT0gIiIgKSB7CgkJCS8vIE5vIHggc2Nyb2xsaW5nCgkJCXRhYmxlU3R5bGUud2lkdGggPSAiMTAwJSI7CgkKCQkJLy8gSUU3IHdpbGwgbWFrZSB0aGUgd2lkdGggb2YgdGhlIHRhYmxlIHdoZW4gMTAwJSBpbmNsdWRlIHRoZSBzY3JvbGxiYXIKCQkJLy8gLSB3aGljaCBpcyBzaG91bGRuJ3QuIFdoZW4gdGhlcmUgaXMgYSBzY3JvbGxiYXIgd2UgbmVlZCB0byB0YWtlIHRoaXMKCQkJLy8gaW50byBhY2NvdW50LgoJCQlpZiAoIGllNjcgJiYgKHRhYmxlLmZpbmQoJ3Rib2R5JykuaGVpZ2h0KCkgPiBkaXZCb2R5RWwub2Zmc2V0SGVpZ2h0IHx8CgkJCQlkaXZCb2R5LmNzcygnb3ZlcmZsb3cteScpID09ICJzY3JvbGwiKQoJCQkpIHsKCQkJCXRhYmxlU3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggdGFibGUub3V0ZXJXaWR0aCgpIC0gYmFyV2lkdGgpOwoJCQl9CgkKCQkJLy8gUmVjYWxjdWxhdGUgdGhlIHNhbml0eSB3aWR0aAoJCQlzYW5pdHlXaWR0aCA9IHRhYmxlLm91dGVyV2lkdGgoKTsKCQl9CgkJZWxzZSBpZiAoIHNjcm9sbFhJbm5lciAhPT0gIiIgKSB7CgkJCS8vIGxlZ2FjeSB4IHNjcm9sbCBpbm5lciBoYXMgYmVlbiBnaXZlbiAtIHVzZSBpdAoJCQl0YWJsZVN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3Moc2Nyb2xsWElubmVyKTsKCQoJCQkvLyBSZWNhbGN1bGF0ZSB0aGUgc2FuaXR5IHdpZHRoCgkJCXNhbml0eVdpZHRoID0gdGFibGUub3V0ZXJXaWR0aCgpOwoJCX0KCQoJCS8vIEhpZGRlbiBoZWFkZXIgc2hvdWxkIGhhdmUgemVybyBoZWlnaHQsIHNvIHJlbW92ZSBwYWRkaW5nIGFuZCBib3JkZXJzLiBUaGVuCgkJLy8gc2V0IHRoZSB3aWR0aCBiYXNlZCBvbiB0aGUgcmVhbCBoZWFkZXJzCgkKCQkvLyBBcHBseSBhbGwgc3R5bGVzIGluIG9uZSBwYXNzCgkJX2ZuQXBwbHlUb0NoaWxkcmVuKCB6ZXJvT3V0LCBoZWFkZXJTcmNFbHMgKTsKCQoJCS8vIFJlYWQgYWxsIHdpZHRocyBpbiBuZXh0IHBhc3MKCQlfZm5BcHBseVRvQ2hpbGRyZW4oIGZ1bmN0aW9uKG5TaXplcikgewoJCQloZWFkZXJDb250ZW50LnB1c2goIG5TaXplci5pbm5lckhUTUwgKTsKCQkJaGVhZGVyV2lkdGhzLnB1c2goIF9mblN0cmluZ1RvQ3NzKCAkKG5TaXplcikuY3NzKCd3aWR0aCcpICkgKTsKCQl9LCBoZWFkZXJTcmNFbHMgKTsKCQoJCS8vIEFwcGx5IGFsbCB3aWR0aHMgaW4gZmluYWwgcGFzcwoJCV9mbkFwcGx5VG9DaGlsZHJlbiggZnVuY3Rpb24oblRvU2l6ZSwgaSkgewoJCQkvLyBPbmx5IGFwcGx5IHdpZHRocyB0byB0aGUgRGF0YVRhYmxlcyBkZXRlY3RlZCBoZWFkZXIgY2VsbHMgLSB0aGlzCgkJCS8vIHByZXZlbnRzIGNvbXBsZXggaGVhZGVycyBmcm9tIGhhdmluZyBjb250cmFkaWN0b3J5IHNpemVzIGFwcGxpZWQKCQkJaWYgKCAkLmluQXJyYXkoIG5Ub1NpemUsIGR0SGVhZGVyQ2VsbHMgKSAhPT0gLTEgKSB7CgkJCQluVG9TaXplLnN0eWxlLndpZHRoID0gaGVhZGVyV2lkdGhzW2ldOwoJCQl9CgkJfSwgaGVhZGVyVHJnRWxzICk7CgkKCQkkKGhlYWRlclNyY0VscykuaGVpZ2h0KDApOwoJCgkJLyogU2FtZSBhZ2FpbiB3aXRoIHRoZSBmb290ZXIgaWYgd2UgaGF2ZSBvbmUgKi8KCQlpZiAoIGZvb3RlciApCgkJewoJCQlfZm5BcHBseVRvQ2hpbGRyZW4oIHplcm9PdXQsIGZvb3RlclNyY0VscyApOwoJCgkJCV9mbkFwcGx5VG9DaGlsZHJlbiggZnVuY3Rpb24oblNpemVyKSB7CgkJCQlmb290ZXJDb250ZW50LnB1c2goIG5TaXplci5pbm5lckhUTUwgKTsKCQkJCWZvb3RlcldpZHRocy5wdXNoKCBfZm5TdHJpbmdUb0NzcyggJChuU2l6ZXIpLmNzcygnd2lkdGgnKSApICk7CgkJCX0sIGZvb3RlclNyY0VscyApOwoJCgkJCV9mbkFwcGx5VG9DaGlsZHJlbiggZnVuY3Rpb24oblRvU2l6ZSwgaSkgewoJCQkJblRvU2l6ZS5zdHlsZS53aWR0aCA9IGZvb3RlcldpZHRoc1tpXTsKCQkJfSwgZm9vdGVyVHJnRWxzICk7CgkKCQkJJChmb290ZXJTcmNFbHMpLmhlaWdodCgwKTsKCQl9CgkKCQoJCS8qCgkJICogMy4gQXBwbHkgdGhlIG1lYXN1cmVtZW50cwoJCSAqLwoJCgkJLy8gIkhpZGUiIHRoZSBoZWFkZXIgYW5kIGZvb3RlciB0aGF0IHdlIHVzZWQgZm9yIHRoZSBzaXppbmcuIFdlIG5lZWQgdG8ga2VlcAoJCS8vIHRoZSBjb250ZW50IG9mIHRoZSBjZWxsIHNvIHRoYXQgdGhlIHdpZHRoIGFwcGxpZWQgdG8gdGhlIGhlYWRlciBhbmQgYm9keQoJCS8vIGJvdGggbWF0Y2gsIGJ1dCB3ZSB3YW50IHRvIGhpZGUgaXQgY29tcGxldGVseS4gV2Ugd2FudCB0byBhbHNvIGZpeCB0aGVpcgoJCS8vIHdpZHRoIHRvIHdoYXQgdGhleSBjdXJyZW50bHkgYXJlCgkJX2ZuQXBwbHlUb0NoaWxkcmVuKCBmdW5jdGlvbihuU2l6ZXIsIGkpIHsKCQkJblNpemVyLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPSJkYXRhVGFibGVzX3NpemluZyI+JytoZWFkZXJDb250ZW50W2ldKyc8L2Rpdj4nOwoJCQluU2l6ZXIuY2hpbGROb2Rlc1swXS5zdHlsZS5oZWlnaHQgPSAiMCI7CgkJCW5TaXplci5jaGlsZE5vZGVzWzBdLnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CgkJCW5TaXplci5zdHlsZS53aWR0aCA9IGhlYWRlcldpZHRoc1tpXTsKCQl9LCBoZWFkZXJTcmNFbHMgKTsKCQoJCWlmICggZm9vdGVyICkKCQl7CgkJCV9mbkFwcGx5VG9DaGlsZHJlbiggZnVuY3Rpb24oblNpemVyLCBpKSB7CgkJCQluU2l6ZXIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImRhdGFUYWJsZXNfc2l6aW5nIj4nK2Zvb3RlckNvbnRlbnRbaV0rJzwvZGl2Pic7CgkJCQluU2l6ZXIuY2hpbGROb2Rlc1swXS5zdHlsZS5oZWlnaHQgPSAiMCI7CgkJCQluU2l6ZXIuY2hpbGROb2Rlc1swXS5zdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOwoJCQkJblNpemVyLnN0eWxlLndpZHRoID0gZm9vdGVyV2lkdGhzW2ldOwoJCQl9LCBmb290ZXJTcmNFbHMgKTsKCQl9CgkKCQkvLyBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgdGFibGUgaXMgb2YgYSBzZW5zaWJsZSB3aWR0aC4gSWYgbm90IHRoZW4gd2UgYXJlIGdvaW5nIHRvIGdldAoJCS8vIG1pc2FsaWdubWVudCAtIHRyeSB0byBwcmV2ZW50IHRoaXMgYnkgbm90IGFsbG93aW5nIHRoZSB0YWJsZSB0byBzaHJpbmsgYmVsb3cgaXRzIG1pbiB3aWR0aAoJCWlmICggdGFibGUub3V0ZXJXaWR0aCgpIDwgc2FuaXR5V2lkdGggKQoJCXsKCQkJLy8gVGhlIG1pbiB3aWR0aCBkZXBlbmRzIHVwb24gaWYgd2UgaGF2ZSBhIHZlcnRpY2FsIHNjcm9sbGJhciB2aXNpYmxlIG9yIG5vdCAqLwoJCQljb3JyZWN0aW9uID0gKChkaXZCb2R5RWwuc2Nyb2xsSGVpZ2h0ID4gZGl2Qm9keUVsLm9mZnNldEhlaWdodCB8fAoJCQkJZGl2Qm9keS5jc3MoJ292ZXJmbG93LXknKSA9PSAic2Nyb2xsIikpID8KCQkJCQlzYW5pdHlXaWR0aCtiYXJXaWR0aCA6CgkJCQkJc2FuaXR5V2lkdGg7CgkKCQkJLy8gSUU2LzcgYXJlIGEgbGF3IHVudG8gdGhlbXNlbHZlcy4uLgoJCQlpZiAoIGllNjcgJiYgKGRpdkJvZHlFbC5zY3JvbGxIZWlnaHQgPgoJCQkJZGl2Qm9keUVsLm9mZnNldEhlaWdodCB8fCBkaXZCb2R5LmNzcygnb3ZlcmZsb3cteScpID09ICJzY3JvbGwiKQoJCQkpIHsKCQkJCXRhYmxlU3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggY29ycmVjdGlvbi1iYXJXaWR0aCApOwoJCQl9CgkKCQkJLy8gQW5kIGdpdmUgdGhlIHVzZXIgYSB3YXJuaW5nIHRoYXQgd2UndmUgc3RvcHBlZCB0aGUgdGFibGUgZ2V0dGluZyB0b28gc21hbGwKCQkJaWYgKCBzY3JvbGxYID09PSAiIiB8fCBzY3JvbGxYSW5uZXIgIT09ICIiICkgewoJCQkJX2ZuTG9nKCBzZXR0aW5ncywgMSwgJ1Bvc3NpYmxlIGNvbHVtbiBtaXNhbGlnbm1lbnQnLCA2ICk7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJY29ycmVjdGlvbiA9ICcxMDAlJzsKCQl9CgkKCQkvLyBBcHBseSB0byB0aGUgY29udGFpbmVyIGVsZW1lbnRzCgkJZGl2Qm9keVN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIGNvcnJlY3Rpb24gKTsKCQlkaXZIZWFkZXJTdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBjb3JyZWN0aW9uICk7CgkKCQlpZiAoIGZvb3RlciApIHsKCQkJc2V0dGluZ3MublNjcm9sbEZvb3Quc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggY29ycmVjdGlvbiApOwoJCX0KCQoJCgkJLyoKCQkgKiA0LiBDbGVhbiB1cAoJCSAqLwoJCWlmICggISBzY3JvbGxZICkgewoJCQkvKiBJRTc8IHB1dHMgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgaW4gcGxhY2UgKHdoZW4gaXQgc2hvdWxkbid0IGJlKSBkdWUgdG8gc3VidHJhY3RpbmcKCQkJICogdGhlIHNjcm9sbGJhciBoZWlnaHQgZnJvbSB0aGUgdmlzaWJsZSBkaXNwbGF5LCByYXRoZXIgdGhhbiBhZGRpbmcgaXQgb24uIFdlIG5lZWQgdG8KCQkJICogc2V0IHRoZSBoZWlnaHQgaW4gb3JkZXIgdG8gc29ydCB0aGlzLiBEb24ndCB3YW50IHRvIGRvIGl0IGluIGFueSBvdGhlciBicm93c2Vycy4KCQkJICovCgkJCWlmICggaWU2NyApIHsKCQkJCWRpdkJvZHlTdHlsZS5oZWlnaHQgPSBfZm5TdHJpbmdUb0NzcyggdGFibGVFbC5vZmZzZXRIZWlnaHQrYmFyV2lkdGggKTsKCQkJfQoJCX0KCQoJCS8qIEZpbmFsbHkgc2V0IHRoZSB3aWR0aCdzIG9mIHRoZSBoZWFkZXIgYW5kIGZvb3RlciB0YWJsZXMgKi8KCQl2YXIgaU91dGVyV2lkdGggPSB0YWJsZS5vdXRlcldpZHRoKCk7CgkJZGl2SGVhZGVyVGFibGVbMF0uc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggaU91dGVyV2lkdGggKTsKCQlkaXZIZWFkZXJJbm5lclN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIGlPdXRlcldpZHRoICk7CgkKCQkvLyBGaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBzY3JvbGxiYXIgcHJlc2VudCAtIGlmIHNvIHRoZW4gd2UgbmVlZCBhIHRoZSBoZWFkZXIgYW5kIGZvb3RlciB0bwoJCS8vIHByb3ZpZGUgYSBiaXQgbW9yZSBzcGFjZSB0byBhbGxvdyAib3ZlcmZsb3ciIHNjcm9sbGluZyAoaS5lLiBwYXN0IHRoZSBzY3JvbGxiYXIpCgkJdmFyIGJTY3JvbGxpbmcgPSB0YWJsZS5oZWlnaHQoKSA+IGRpdkJvZHlFbC5jbGllbnRIZWlnaHQgfHwgZGl2Qm9keS5jc3MoJ292ZXJmbG93LXknKSA9PSAic2Nyb2xsIjsKCQl2YXIgcGFkZGluZyA9ICdwYWRkaW5nJyArIChicm93c2VyLmJTY3JvbGxiYXJMZWZ0ID8gJ0xlZnQnIDogJ1JpZ2h0JyApOwoJCWRpdkhlYWRlcklubmVyU3R5bGVbIHBhZGRpbmcgXSA9IGJTY3JvbGxpbmcgPyBiYXJXaWR0aCsicHgiIDogIjBweCI7CgkKCQlpZiAoIGZvb3RlciApIHsKCQkJZGl2Rm9vdGVyVGFibGVbMF0uc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggaU91dGVyV2lkdGggKTsKCQkJZGl2Rm9vdGVySW5uZXJbMF0uc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggaU91dGVyV2lkdGggKTsKCQkJZGl2Rm9vdGVySW5uZXJbMF0uc3R5bGVbcGFkZGluZ10gPSBiU2Nyb2xsaW5nID8gYmFyV2lkdGgrInB4IiA6ICIwcHgiOwoJCX0KCQoJCS8vIENvcnJlY3QgRE9NIG9yZGVyaW5nIGZvciBjb2xncm91cCAtIGNvbWVzIGJlZm9yZSB0aGUgdGhlYWQKCQl0YWJsZS5jaGlsZHJlbignY29sZ3JvdXAnKS5pbnNlcnRCZWZvcmUoIHRhYmxlLmNoaWxkcmVuKCd0aGVhZCcpICk7CgkKCQkvKiBBZGp1c3QgdGhlIHBvc2l0aW9uIG9mIHRoZSBoZWFkZXIgaW4gY2FzZSB3ZSBsb29zZSB0aGUgeS1zY3JvbGxiYXIgKi8KCQlkaXZCb2R5LnRyaWdnZXIoJ3Njcm9sbCcpOwoJCgkJLy8gSWYgc29ydGluZyBvciBmaWx0ZXJpbmcgaGFzIG9jY3VycmVkLCBqdW1wIHRoZSBzY3JvbGxpbmcgYmFjayB0byB0aGUgdG9wCgkJLy8gb25seSBpZiB3ZSBhcmVuJ3QgaG9sZGluZyB0aGUgcG9zaXRpb24KCQlpZiAoIChzZXR0aW5ncy5iU29ydGVkIHx8IHNldHRpbmdzLmJGaWx0ZXJlZCkgJiYgISBzZXR0aW5ncy5fZHJhd0hvbGQgKSB7CgkJCWRpdkJvZHlFbC5zY3JvbGxUb3AgPSAwOwoJCX0KCX0KCQoJCgkKCS8qKgoJICogQXBwbHkgYSBnaXZlbiBmdW5jdGlvbiB0byB0aGUgZGlzcGxheSBjaGlsZCBub2RlcyBvZiBhbiBlbGVtZW50IGFycmF5ICh0eXBpY2FsbHkKCSAqIFREIGNoaWxkcmVuIG9mIFRSIHJvd3MKCSAqICBAcGFyYW0ge2Z1bmN0aW9ufSBmbiBNZXRob2QgdG8gYXBwbHkgdG8gdGhlIG9iamVjdHMKCSAqICBAcGFyYW0gYXJyYXkge25vZGVzfSBhbjEgTGlzdCBvZiBlbGVtZW50cyB0byBsb29rIHRocm91Z2ggZm9yIGRpc3BsYXkgY2hpbGRyZW4KCSAqICBAcGFyYW0gYXJyYXkge25vZGVzfSBhbjIgQW5vdGhlciBsaXN0IChpZGVudGljYWwgc3RydWN0dXJlIHRvIHRoZSBmaXJzdCkgLSBvcHRpb25hbAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5BcHBseVRvQ2hpbGRyZW4oIGZuLCBhbjEsIGFuMiApCgl7CgkJdmFyIGluZGV4PTAsIGk9MCwgaUxlbj1hbjEubGVuZ3RoOwoJCXZhciBuTm9kZTEsIG5Ob2RlMjsKCQoJCXdoaWxlICggaSA8IGlMZW4gKSB7CgkJCW5Ob2RlMSA9IGFuMVtpXS5maXJzdENoaWxkOwoJCQluTm9kZTIgPSBhbjIgPyBhbjJbaV0uZmlyc3RDaGlsZCA6IG51bGw7CgkKCQkJd2hpbGUgKCBuTm9kZTEgKSB7CgkJCQlpZiAoIG5Ob2RlMS5ub2RlVHlwZSA9PT0gMSApIHsKCQkJCQlpZiAoIGFuMiApIHsKCQkJCQkJZm4oIG5Ob2RlMSwgbk5vZGUyLCBpbmRleCApOwoJCQkJCX0KCQkJCQllbHNlIHsKCQkJCQkJZm4oIG5Ob2RlMSwgaW5kZXggKTsKCQkJCQl9CgkKCQkJCQlpbmRleCsrOwoJCQkJfQoJCgkJCQluTm9kZTEgPSBuTm9kZTEubmV4dFNpYmxpbmc7CgkJCQluTm9kZTIgPSBhbjIgPyBuTm9kZTIubmV4dFNpYmxpbmcgOiBudWxsOwoJCQl9CgkKCQkJaSsrOwoJCX0KCX0KCQoJCgkKCXZhciBfX3JlX2h0bWxfcmVtb3ZlID0gLzwuKj8+L2c7CgkKCQoJLyoqCgkgKiBDYWxjdWxhdGUgdGhlIHdpZHRoIG9mIGNvbHVtbnMgZm9yIHRoZSB0YWJsZQoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuQ2FsY3VsYXRlQ29sdW1uV2lkdGhzICggb1NldHRpbmdzICkKCXsKCQl2YXIKCQkJdGFibGUgPSBvU2V0dGluZ3MublRhYmxlLAoJCQljb2x1bW5zID0gb1NldHRpbmdzLmFvQ29sdW1ucywKCQkJc2Nyb2xsID0gb1NldHRpbmdzLm9TY3JvbGwsCgkJCXNjcm9sbFkgPSBzY3JvbGwuc1ksCgkJCXNjcm9sbFggPSBzY3JvbGwuc1gsCgkJCXNjcm9sbFhJbm5lciA9IHNjcm9sbC5zWElubmVyLAoJCQljb2x1bW5Db3VudCA9IGNvbHVtbnMubGVuZ3RoLAoJCQl2aXNpYmxlQ29sdW1ucyA9IF9mbkdldENvbHVtbnMoIG9TZXR0aW5ncywgJ2JWaXNpYmxlJyApLAoJCQloZWFkZXJDZWxscyA9ICQoJ3RoJywgb1NldHRpbmdzLm5USGVhZCksCgkJCXRhYmxlV2lkdGhBdHRyID0gdGFibGUuZ2V0QXR0cmlidXRlKCd3aWR0aCcpLCAvLyBmcm9tIERPTSBlbGVtZW50CgkJCXRhYmxlQ29udGFpbmVyID0gdGFibGUucGFyZW50Tm9kZSwKCQkJdXNlcklucHV0cyA9IGZhbHNlLAoJCQlpLCBjb2x1bW4sIGNvbHVtbklkeCwgd2lkdGgsIG91dGVyV2lkdGgsCgkJCWJyb3dzZXIgPSBvU2V0dGluZ3Mub0Jyb3dzZXIsCgkJCWllNjcgPSBicm93c2VyLmJTY3JvbGxPdmVyc2l6ZTsKCQoJCXZhciBzdHlsZVdpZHRoID0gdGFibGUuc3R5bGUud2lkdGg7CgkJaWYgKCBzdHlsZVdpZHRoICYmIHN0eWxlV2lkdGguaW5kZXhPZignJScpICE9PSAtMSApIHsKCQkJdGFibGVXaWR0aEF0dHIgPSBzdHlsZVdpZHRoOwoJCX0KCQoJCS8qIENvbnZlcnQgYW55IHVzZXIgaW5wdXQgc2l6ZXMgaW50byBwaXhlbCBzaXplcyAqLwoJCWZvciAoIGk9MCA7IGk8dmlzaWJsZUNvbHVtbnMubGVuZ3RoIDsgaSsrICkgewoJCQljb2x1bW4gPSBjb2x1bW5zWyB2aXNpYmxlQ29sdW1uc1tpXSBdOwoJCgkJCWlmICggY29sdW1uLnNXaWR0aCAhPT0gbnVsbCApIHsKCQkJCWNvbHVtbi5zV2lkdGggPSBfZm5Db252ZXJ0VG9XaWR0aCggY29sdW1uLnNXaWR0aE9yaWcsIHRhYmxlQ29udGFpbmVyICk7CgkKCQkJCXVzZXJJbnB1dHMgPSB0cnVlOwoJCQl9CgkJfQoJCgkJLyogSWYgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBET00gZXF1YWxzIHRoZSBudW1iZXIgdGhhdCB3ZSBoYXZlIHRvCgkJICogcHJvY2VzcyBpbiBEYXRhVGFibGVzLCB0aGVuIHdlIGNhbiB1c2UgdGhlIG9mZnNldHMgdGhhdCBhcmUgY3JlYXRlZCBieQoJCSAqIHRoZSB3ZWItIGJyb3dzZXIuIE5vIGN1c3RvbSBzaXplcyBjYW4gYmUgc2V0IGluIG9yZGVyIGZvciB0aGlzIHRvIGhhcHBlbiwKCQkgKiBub3Igc2Nyb2xsaW5nIHVzZWQKCQkgKi8KCQlpZiAoIGllNjcgfHwgISB1c2VySW5wdXRzICYmICEgc2Nyb2xsWCAmJiAhIHNjcm9sbFkgJiYKCQkgICAgIGNvbHVtbkNvdW50ID09IF9mblZpc2JsZUNvbHVtbnMoIG9TZXR0aW5ncyApICYmCgkJICAgICBjb2x1bW5Db3VudCA9PSBoZWFkZXJDZWxscy5sZW5ndGgKCQkpIHsKCQkJZm9yICggaT0wIDsgaTxjb2x1bW5Db3VudCA7IGkrKyApIHsKCQkJCXZhciBjb2xJZHggPSBfZm5WaXNpYmxlVG9Db2x1bW5JbmRleCggb1NldHRpbmdzLCBpICk7CgkKCQkJCWlmICggY29sSWR4ICE9PSBudWxsICkgewoJCQkJCWNvbHVtbnNbIGNvbElkeCBdLnNXaWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBoZWFkZXJDZWxscy5lcShpKS53aWR0aCgpICk7CgkJCQl9CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJLy8gT3RoZXJ3aXNlIGNvbnN0cnVjdCBhIHNpbmdsZSByb3csIHdvcnN0IGNhc2UsIHRhYmxlIHdpdGggdGhlIHdpZGVzdAoJCQkvLyBub2RlIGluIHRoZSBkYXRhLCBhc3NpZ24gYW55IHVzZXIgZGVmaW5lZCB3aWR0aHMsIHRoZW4gaW5zZXJ0IGl0IGludG8KCQkJLy8gdGhlIERPTSBhbmQgYWxsb3cgdGhlIGJyb3dzZXIgdG8gZG8gYWxsIHRoZSBoYXJkIHdvcmsgb2YgY2FsY3VsYXRpbmcKCQkJLy8gdGFibGUgd2lkdGhzCgkJCXZhciB0bXBUYWJsZSA9ICQodGFibGUpLmNsb25lKCkgLy8gZG9uJ3QgdXNlIGNsb25lTm9kZSAtIElFOCB3aWxsIHJlbW92ZSBldmVudHMgb24gdGhlIG1haW4gdGFibGUKCQkJCS5jc3MoICd2aXNpYmlsaXR5JywgJ2hpZGRlbicgKQoJCQkJLnJlbW92ZUF0dHIoICdpZCcgKTsKCQoJCQkvLyBDbGVhbiB1cCB0aGUgdGFibGUgYm9keQoJCQl0bXBUYWJsZS5maW5kKCd0Ym9keSB0cicpLnJlbW92ZSgpOwoJCQl2YXIgdHIgPSAkKCc8dHIvPicpLmFwcGVuZFRvKCB0bXBUYWJsZS5maW5kKCd0Ym9keScpICk7CgkKCQkJLy8gQ2xvbmUgdGhlIHRhYmxlIGhlYWRlciBhbmQgZm9vdGVyIC0gd2UgY2FuJ3QgdXNlIHRoZSBoZWFkZXIgLyBmb290ZXIKCQkJLy8gZnJvbSB0aGUgY2xvbmVkIHRhYmxlLCBzaW5jZSBpZiBzY3JvbGxpbmcgaXMgYWN0aXZlLCB0aGUgdGFibGUncwoJCQkvLyByZWFsIGhlYWRlciBhbmQgZm9vdGVyIGFyZSBjb250YWluZWQgaW4gZGlmZmVyZW50IHRhYmxlIHRhZ3MKCQkJdG1wVGFibGUuZmluZCgndGhlYWQsIHRmb290JykucmVtb3ZlKCk7CgkJCXRtcFRhYmxlCgkJCQkuYXBwZW5kKCAkKG9TZXR0aW5ncy5uVEhlYWQpLmNsb25lKCkgKQoJCQkJLmFwcGVuZCggJChvU2V0dGluZ3MublRGb290KS5jbG9uZSgpICk7CgkKCQkJLy8gUmVtb3ZlIGFueSBhc3NpZ25lZCB3aWR0aHMgZnJvbSB0aGUgZm9vdGVyIChmcm9tIHNjcm9sbGluZykKCQkJdG1wVGFibGUuZmluZCgndGZvb3QgdGgsIHRmb290IHRkJykuY3NzKCd3aWR0aCcsICcnKTsKCQoJCQkvLyBBcHBseSBjdXN0b20gc2l6aW5nIHRvIHRoZSBjbG9uZWQgaGVhZGVyCgkJCWhlYWRlckNlbGxzID0gX2ZuR2V0VW5pcXVlVGhzKCBvU2V0dGluZ3MsIHRtcFRhYmxlLmZpbmQoJ3RoZWFkJylbMF0gKTsKCQoJCQlmb3IgKCBpPTAgOyBpPHZpc2libGVDb2x1bW5zLmxlbmd0aCA7IGkrKyApIHsKCQkJCWNvbHVtbiA9IGNvbHVtbnNbIHZpc2libGVDb2x1bW5zW2ldIF07CgkKCQkJCWhlYWRlckNlbGxzW2ldLnN0eWxlLndpZHRoID0gY29sdW1uLnNXaWR0aE9yaWcgIT09IG51bGwgJiYgY29sdW1uLnNXaWR0aE9yaWcgIT09ICcnID8KCQkJCQlfZm5TdHJpbmdUb0NzcyggY29sdW1uLnNXaWR0aE9yaWcgKSA6CgkJCQkJJyc7CgkKCQkJCS8vIEZvciBzY3JvbGxYIHdlIG5lZWQgdG8gZm9yY2UgdGhlIGNvbHVtbiB3aWR0aCBvdGhlcndpc2UgdGhlCgkJCQkvLyBicm93c2VyIHdpbGwgY29sbGFwc2UgaXQuIElmIHRoaXMgd2lkdGggaXMgc21hbGxlciB0aGFuIHRoZQoJCQkJLy8gd2lkdGggdGhlIGNvbHVtbiByZXF1aXJlcywgdGhlbiBpdCB3aWxsIGhhdmUgbm8gZWZmZWN0CgkJCQlpZiAoIGNvbHVtbi5zV2lkdGhPcmlnICYmIHNjcm9sbFggKSB7CgkJCQkJJCggaGVhZGVyQ2VsbHNbaV0gKS5hcHBlbmQoICQoJzxkaXYvPicpLmNzcyggewoJCQkJCQl3aWR0aDogY29sdW1uLnNXaWR0aE9yaWcsCgkJCQkJCW1hcmdpbjogMCwKCQkJCQkJcGFkZGluZzogMCwKCQkJCQkJYm9yZGVyOiAwLAoJCQkJCQloZWlnaHQ6IDEKCQkJCQl9ICkgKTsKCQkJCX0KCQkJfQoJCgkJCS8vIEZpbmQgdGhlIHdpZGVzdCBjZWxsIGZvciBlYWNoIGNvbHVtbiBhbmQgcHV0IGl0IGludG8gdGhlIHRhYmxlCgkJCWlmICggb1NldHRpbmdzLmFvRGF0YS5sZW5ndGggKSB7CgkJCQlmb3IgKCBpPTAgOyBpPHZpc2libGVDb2x1bW5zLmxlbmd0aCA7IGkrKyApIHsKCQkJCQljb2x1bW5JZHggPSB2aXNpYmxlQ29sdW1uc1tpXTsKCQkJCQljb2x1bW4gPSBjb2x1bW5zWyBjb2x1bW5JZHggXTsKCQoJCQkJCSQoIF9mbkdldFdpZGVzdE5vZGUoIG9TZXR0aW5ncywgY29sdW1uSWR4ICkgKQoJCQkJCQkuY2xvbmUoIGZhbHNlICkKCQkJCQkJLmFwcGVuZCggY29sdW1uLnNDb250ZW50UGFkZGluZyApCgkJCQkJCS5hcHBlbmRUbyggdHIgKTsKCQkJCX0KCQkJfQoJCgkJCS8vIFRpZHkgdGhlIHRlbXBvcmFyeSB0YWJsZSAtIHJlbW92ZSBuYW1lIGF0dHJpYnV0ZXMgc28gdGhlcmUgYXJlbid0CgkJCS8vIGR1cGxpY2F0ZWQgaW4gdGhlIGRvbSAocmFkaW8gZWxlbWVudHMgZm9yIGV4YW1wbGUpCgkJCSQoJ1tuYW1lXScsIHRtcFRhYmxlKS5yZW1vdmVBdHRyKCduYW1lJyk7CgkKCQkJLy8gVGFibGUgaGFzIGJlZW4gYnVpbHQsIGF0dGFjaCB0byB0aGUgZG9jdW1lbnQgc28gd2UgY2FuIHdvcmsgd2l0aCBpdC4KCQkJLy8gQSBob2xkaW5nIGVsZW1lbnQgaXMgdXNlZCwgcG9zaXRpb25lZCBhdCB0aGUgdG9wIG9mIHRoZSBjb250YWluZXIKCQkJLy8gd2l0aCBtaW5pbWFsIGhlaWdodCwgc28gaXQgaGFzIG5vIGVmZmVjdCBvbiBpZiB0aGUgY29udGFpbmVyIHNjcm9sbHMKCQkJLy8gb3Igbm90LiBPdGhlcndpc2UgaXQgbWlnaHQgdHJpZ2dlciBzY3JvbGxpbmcgd2hlbiBpdCBhY3R1YWxseSBpc24ndAoJCQkvLyBuZWVkZWQKCQkJdmFyIGhvbGRlciA9ICQoJzxkaXYvPicpLmNzcyggc2Nyb2xsWCB8fCBzY3JvbGxZID8KCQkJCQl7CgkJCQkJCXBvc2l0aW9uOiAnYWJzb2x1dGUnLAoJCQkJCQl0b3A6IDAsCgkJCQkJCWxlZnQ6IDAsCgkJCQkJCWhlaWdodDogMSwKCQkJCQkJcmlnaHQ6IDAsCgkJCQkJCW92ZXJmbG93OiAnaGlkZGVuJwoJCQkJCX0gOgoJCQkJCXt9CgkJCQkpCgkJCQkuYXBwZW5kKCB0bXBUYWJsZSApCgkJCQkuYXBwZW5kVG8oIHRhYmxlQ29udGFpbmVyICk7CgkKCQkJLy8gV2hlbiBzY3JvbGxpbmcgKFggb3IgWSkgd2Ugd2FudCB0byBzZXQgdGhlIHdpZHRoIG9mIHRoZSB0YWJsZSBhcyAKCQkJLy8gYXBwcm9wcmlhdGUuIEhvd2V2ZXIsIHdoZW4gbm90IHNjcm9sbGluZyBsZWF2ZSB0aGUgdGFibGUgd2lkdGggYXMgaXQKCQkJLy8gaXMuIFRoaXMgcmVzdWx0cyBpbiBzbGlnaHRseSBkaWZmZXJlbnQsIGJ1dCBJIHRoaW5rIGNvcnJlY3QgYmVoYXZpb3VyCgkJCWlmICggc2Nyb2xsWCAmJiBzY3JvbGxYSW5uZXIgKSB7CgkJCQl0bXBUYWJsZS53aWR0aCggc2Nyb2xsWElubmVyICk7CgkJCX0KCQkJZWxzZSBpZiAoIHNjcm9sbFggKSB7CgkJCQl0bXBUYWJsZS5jc3MoICd3aWR0aCcsICdhdXRvJyApOwoJCQkJdG1wVGFibGUucmVtb3ZlQXR0cignd2lkdGgnKTsKCQoJCQkJLy8gSWYgdGhlcmUgaXMgbm8gd2lkdGggYXR0cmlidXRlIG9yIHN0eWxlLCB0aGVuIGFsbG93IHRoZSB0YWJsZSB0bwoJCQkJLy8gY29sbGFwc2UKCQkJCWlmICggdG1wVGFibGUud2lkdGgoKSA8IHRhYmxlQ29udGFpbmVyLmNsaWVudFdpZHRoICYmIHRhYmxlV2lkdGhBdHRyICkgewoJCQkJCXRtcFRhYmxlLndpZHRoKCB0YWJsZUNvbnRhaW5lci5jbGllbnRXaWR0aCApOwoJCQkJfQoJCQl9CgkJCWVsc2UgaWYgKCBzY3JvbGxZICkgewoJCQkJdG1wVGFibGUud2lkdGgoIHRhYmxlQ29udGFpbmVyLmNsaWVudFdpZHRoICk7CgkJCX0KCQkJZWxzZSBpZiAoIHRhYmxlV2lkdGhBdHRyICkgewoJCQkJdG1wVGFibGUud2lkdGgoIHRhYmxlV2lkdGhBdHRyICk7CgkJCX0KCQoJCQkvLyBHZXQgdGhlIHdpZHRoIG9mIGVhY2ggY29sdW1uIGluIHRoZSBjb25zdHJ1Y3RlZCB0YWJsZSAtIHdlIG5lZWQgdG8KCQkJLy8ga25vdyB0aGUgaW5uZXIgd2lkdGggKHNvIGl0IGNhbiBiZSBhc3NpZ25lZCB0byB0aGUgb3RoZXIgdGFibGUncwoJCQkvLyBjZWxscykgYW5kIHRoZSBvdXRlciB3aWR0aCBzbyB3ZSBjYW4gY2FsY3VsYXRlIHRoZSBmdWxsIHdpZHRoIG9mIHRoZQoJCQkvLyB0YWJsZS4gVGhpcyBpcyBzYWZlIHNpbmNlIERhdGFUYWJsZXMgcmVxdWlyZXMgYSB1bmlxdWUgY2VsbCBmb3IgZWFjaAoJCQkvLyBjb2x1bW4sIGJ1dCBpZiBldmVyIGEgaGVhZGVyIGNhbiBzcGFuIG11bHRpcGxlIGNvbHVtbnMsIHRoaXMgd2lsbAoJCQkvLyBuZWVkIHRvIGJlIG1vZGlmaWVkLgoJCQl2YXIgdG90YWwgPSAwOwoJCQlmb3IgKCBpPTAgOyBpPHZpc2libGVDb2x1bW5zLmxlbmd0aCA7IGkrKyApIHsKCQkJCXZhciBjZWxsID0gJChoZWFkZXJDZWxsc1tpXSk7CgkJCQl2YXIgYm9yZGVyID0gY2VsbC5vdXRlcldpZHRoKCkgLSBjZWxsLndpZHRoKCk7CgkKCQkJCS8vIFVzZSBnZXRCb3VuZGluZy4uLiB3aGVyZSBwb3NzaWJsZSAobm90IElFOC0pIGJlY2F1c2UgaXQgY2FuIGdpdmUKCQkJCS8vIHN1Yi1waXhlbCBhY2N1cmFjeSwgd2hpY2ggd2UgdGhlbiB3YW50IHRvIHJvdW5kIHVwIQoJCQkJdmFyIGJvdW5kaW5nID0gYnJvd3Nlci5iQm91bmRpbmcgPwoJCQkJCU1hdGguY2VpbCggaGVhZGVyQ2VsbHNbaV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKSA6CgkJCQkJY2VsbC5vdXRlcldpZHRoKCk7CgkKCQkJCS8vIFRvdGFsIGlzIHRyYWNrZWQgdG8gcmVtb3ZlIGFueSBzdWItcGl4ZWwgZXJyb3JzIGFzIHRoZSBvdXRlcldpZHRoCgkJCQkvLyBvZiB0aGUgdGFibGUgbWlnaHQgbm90IGVxdWFsIHRoZSB0b3RhbCBnaXZlbiBoZXJlIChJRSEpLgoJCQkJdG90YWwgKz0gYm91bmRpbmc7CgkKCQkJCS8vIFdpZHRoIGZvciBlYWNoIGNvbHVtbiB0byB1c2UKCQkJCWNvbHVtbnNbIHZpc2libGVDb2x1bW5zW2ldIF0uc1dpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIGJvdW5kaW5nIC0gYm9yZGVyICk7CgkJCX0KCQoJCQl0YWJsZS5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCB0b3RhbCApOwoJCgkJCS8vIEZpbmlzaGVkIHdpdGggdGhlIHRhYmxlIC0gZGl0Y2ggaXQKCQkJaG9sZGVyLnJlbW92ZSgpOwoJCX0KCQoJCS8vIElmIHRoZXJlIGlzIGEgd2lkdGggYXR0ciwgd2Ugd2FudCB0byBhdHRhY2ggYW4gZXZlbnQgbGlzdGVuZXIgd2hpY2gKCQkvLyBhbGxvd3MgdGhlIHRhYmxlIHNpemluZyB0byBhdXRvbWF0aWNhbGx5IGFkanVzdCB3aGVuIHRoZSB3aW5kb3cgaXMKCQkvLyByZXNpemVkLiBVc2UgdGhlIHdpZHRoIGF0dHIgcmF0aGVyIHRoYW4gQ1NTLCBzaW5jZSB3ZSBjYW4ndCBrbm93IGlmIHRoZQoJCS8vIENTUyBpcyBhIHJlbGF0aXZlIHZhbHVlIG9yIGFic29sdXRlIC0gRE9NIHJlYWQgaXMgYWx3YXlzIHB4LgoJCWlmICggdGFibGVXaWR0aEF0dHIgKSB7CgkJCXRhYmxlLnN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIHRhYmxlV2lkdGhBdHRyICk7CgkJfQoJCgkJaWYgKCAodGFibGVXaWR0aEF0dHIgfHwgc2Nyb2xsWCkgJiYgISBvU2V0dGluZ3MuX3Jlc3pFdnQgKSB7CgkJCXZhciBiaW5kUmVzaXplID0gZnVuY3Rpb24gKCkgewoJCQkJJCh3aW5kb3cpLm9uKCdyZXNpemUuRFQtJytvU2V0dGluZ3Muc0luc3RhbmNlLCBfZm5UaHJvdHRsZSggZnVuY3Rpb24gKCkgewoJCQkJCV9mbkFkanVzdENvbHVtblNpemluZyggb1NldHRpbmdzICk7CgkJCQl9ICkgKTsKCQkJfTsKCQoJCQkvLyBJRTYvNyB3aWxsIGNyYXNoIGlmIHdlIGJpbmQgYSByZXNpemUgZXZlbnQgaGFuZGxlciBvbiBwYWdlIGxvYWQuCgkJCS8vIFRvIGJlIHJlbW92ZWQgaW4gMS4xMSB3aGljaCBkcm9wcyBJRTYvNyBzdXBwb3J0CgkJCWlmICggaWU2NyApIHsKCQkJCXNldFRpbWVvdXQoIGJpbmRSZXNpemUsIDEwMDAgKTsKCQkJfQoJCQllbHNlIHsKCQkJCWJpbmRSZXNpemUoKTsKCQkJfQoJCgkJCW9TZXR0aW5ncy5fcmVzekV2dCA9IHRydWU7CgkJfQoJfQoJCgkKCS8qKgoJICogVGhyb3R0bGUgdGhlIGNhbGxzIHRvIGEgZnVuY3Rpb24uIEFyZ3VtZW50cyBhbmQgY29udGV4dCBhcmUgbWFpbnRhaW5lZCBmb3IKCSAqIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24KCSAqICBAcGFyYW0ge2Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBiZSBjYWxsZWQKCSAqICBAcGFyYW0ge2ludH0gW2ZyZXE9MjAwXSBjYWxsIGZyZXF1ZW5jeSBpbiBtUwoJICogIEByZXR1cm5zIHtmdW5jdGlvbn0gd3JhcHBlZCBmdW5jdGlvbgoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCgl2YXIgX2ZuVGhyb3R0bGUgPSBEYXRhVGFibGUudXRpbC50aHJvdHRsZTsKCQoJCgkvKioKCSAqIENvbnZlcnQgYSBDU1MgdW5pdCB3aWR0aCB0byBwaXhlbHMgKGUuZy4gMmVtKQoJICogIEBwYXJhbSB7c3RyaW5nfSB3aWR0aCB3aWR0aCB0byBiZSBjb252ZXJ0ZWQKCSAqICBAcGFyYW0ge25vZGV9IHBhcmVudCBwYXJlbnQgdG8gZ2V0IHRoZSB3aXRoIGZvciAocmVxdWlyZWQgZm9yIHJlbGF0aXZlIHdpZHRocykgLSBvcHRpb25hbAoJICogIEByZXR1cm5zIHtpbnR9IHdpZHRoIGluIHBpeGVscwoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5Db252ZXJ0VG9XaWR0aCAoIHdpZHRoLCBwYXJlbnQgKQoJewoJCWlmICggISB3aWR0aCApIHsKCQkJcmV0dXJuIDA7CgkJfQoJCgkJdmFyIG4gPSAkKCc8ZGl2Lz4nKQoJCQkuY3NzKCAnd2lkdGgnLCBfZm5TdHJpbmdUb0Nzcyggd2lkdGggKSApCgkJCS5hcHBlbmRUbyggcGFyZW50IHx8IGRvY3VtZW50LmJvZHkgKTsKCQoJCXZhciB2YWwgPSBuWzBdLm9mZnNldFdpZHRoOwoJCW4ucmVtb3ZlKCk7CgkKCQlyZXR1cm4gdmFsOwoJfQoJCgkKCS8qKgoJICogR2V0IHRoZSB3aWRlc3Qgbm9kZQoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSB7aW50fSBjb2xJZHggY29sdW1uIG9mIGludGVyZXN0CgkgKiAgQHJldHVybnMge25vZGV9IHdpZGVzdCB0YWJsZSBub2RlCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkdldFdpZGVzdE5vZGUoIHNldHRpbmdzLCBjb2xJZHggKQoJewoJCXZhciBpZHggPSBfZm5HZXRNYXhMZW5TdHJpbmcoIHNldHRpbmdzLCBjb2xJZHggKTsKCQlpZiAoIGlkeCA8IDAgKSB7CgkJCXJldHVybiBudWxsOwoJCX0KCQoJCXZhciBkYXRhID0gc2V0dGluZ3MuYW9EYXRhWyBpZHggXTsKCQlyZXR1cm4gISBkYXRhLm5UciA/IC8vIE1pZ2h0IG5vdCBoYXZlIGJlZW4gY3JlYXRlZCB3aGVuIGRlZmVycmVkIHJlbmRlcmluZwoJCQkkKCc8dGQvPicpLmh0bWwoIF9mbkdldENlbGxEYXRhKCBzZXR0aW5ncywgaWR4LCBjb2xJZHgsICdkaXNwbGF5JyApIClbMF0gOgoJCQlkYXRhLmFuQ2VsbHNbIGNvbElkeCBdOwoJfQoJCgkKCS8qKgoJICogR2V0IHRoZSBtYXhpbXVtIHN0cmxlbiBmb3IgZWFjaCBkYXRhIGNvbHVtbgoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSB7aW50fSBjb2xJZHggY29sdW1uIG9mIGludGVyZXN0CgkgKiAgQHJldHVybnMge3N0cmluZ30gbWF4IHN0cmluZyBsZW5ndGggZm9yIGVhY2ggY29sdW1uCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkdldE1heExlblN0cmluZyggc2V0dGluZ3MsIGNvbElkeCApCgl7CgkJdmFyIHMsIG1heD0tMSwgbWF4SWR4ID0gLTE7CgkKCQlmb3IgKCB2YXIgaT0wLCBpZW49c2V0dGluZ3MuYW9EYXRhLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQlzID0gX2ZuR2V0Q2VsbERhdGEoIHNldHRpbmdzLCBpLCBjb2xJZHgsICdkaXNwbGF5JyApKycnOwoJCQlzID0gcy5yZXBsYWNlKCBfX3JlX2h0bWxfcmVtb3ZlLCAnJyApOwoJCQlzID0gcy5yZXBsYWNlKCAvJm5ic3A7L2csICcgJyApOwoJCgkJCWlmICggcy5sZW5ndGggPiBtYXggKSB7CgkJCQltYXggPSBzLmxlbmd0aDsKCQkJCW1heElkeCA9IGk7CgkJCX0KCQl9CgkKCQlyZXR1cm4gbWF4SWR4OwoJfQoJCgkKCS8qKgoJICogQXBwZW5kIGEgQ1NTIHVuaXQgKG9ubHkgaWYgcmVxdWlyZWQpIHRvIGEgc3RyaW5nCgkgKiAgQHBhcmFtIHtzdHJpbmd9IHZhbHVlIHRvIGNzcy1pZnkKCSAqICBAcmV0dXJucyB7c3RyaW5nfSB2YWx1ZSB3aXRoIGNzcyB1bml0CgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mblN0cmluZ1RvQ3NzKCBzICkKCXsKCQlpZiAoIHMgPT09IG51bGwgKSB7CgkJCXJldHVybiAnMHB4JzsKCQl9CgkKCQlpZiAoIHR5cGVvZiBzID09ICdudW1iZXInICkgewoJCQlyZXR1cm4gcyA8IDAgPwoJCQkJJzBweCcgOgoJCQkJcysncHgnOwoJCX0KCQoJCS8vIENoZWNrIGl0IGhhcyBhIHVuaXQgY2hhcmFjdGVyIGFscmVhZHkKCQlyZXR1cm4gcy5tYXRjaCgvXGQkLykgPwoJCQlzKydweCcgOgoJCQlzOwoJfQoJCgkKCQoJZnVuY3Rpb24gX2ZuU29ydEZsYXR0ZW4gKCBzZXR0aW5ncyApCgl7CgkJdmFyCgkJCWksIGlMZW4sIGssIGtMZW4sCgkJCWFTb3J0ID0gW10sCgkJCWFpT3JpZyA9IFtdLAoJCQlhb0NvbHVtbnMgPSBzZXR0aW5ncy5hb0NvbHVtbnMsCgkJCWFEYXRhU29ydCwgaUNvbCwgc1R5cGUsIHNyY0NvbCwKCQkJZml4ZWQgPSBzZXR0aW5ncy5hYVNvcnRpbmdGaXhlZCwKCQkJZml4ZWRPYmogPSAkLmlzUGxhaW5PYmplY3QoIGZpeGVkICksCgkJCW5lc3RlZFNvcnQgPSBbXSwKCQkJYWRkID0gZnVuY3Rpb24gKCBhICkgewoJCQkJaWYgKCBhLmxlbmd0aCAmJiAhICQuaXNBcnJheSggYVswXSApICkgewoJCQkJCS8vIDFEIGFycmF5CgkJCQkJbmVzdGVkU29ydC5wdXNoKCBhICk7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQkvLyAyRCBhcnJheQoJCQkJCSQubWVyZ2UoIG5lc3RlZFNvcnQsIGEgKTsKCQkJCX0KCQkJfTsKCQoJCS8vIEJ1aWxkIHRoZSBzb3J0IGFycmF5LCB3aXRoIHByZS1maXggYW5kIHBvc3QtZml4IG9wdGlvbnMgaWYgdGhleSBoYXZlIGJlZW4KCQkvLyBzcGVjaWZpZWQKCQlpZiAoICQuaXNBcnJheSggZml4ZWQgKSApIHsKCQkJYWRkKCBmaXhlZCApOwoJCX0KCQoJCWlmICggZml4ZWRPYmogJiYgZml4ZWQucHJlICkgewoJCQlhZGQoIGZpeGVkLnByZSApOwoJCX0KCQoJCWFkZCggc2V0dGluZ3MuYWFTb3J0aW5nICk7CgkKCQlpZiAoZml4ZWRPYmogJiYgZml4ZWQucG9zdCApIHsKCQkJYWRkKCBmaXhlZC5wb3N0ICk7CgkJfQoJCgkJZm9yICggaT0wIDsgaTxuZXN0ZWRTb3J0Lmxlbmd0aCA7IGkrKyApCgkJewoJCQlzcmNDb2wgPSBuZXN0ZWRTb3J0W2ldWzBdOwoJCQlhRGF0YVNvcnQgPSBhb0NvbHVtbnNbIHNyY0NvbCBdLmFEYXRhU29ydDsKCQoJCQlmb3IgKCBrPTAsIGtMZW49YURhdGFTb3J0Lmxlbmd0aCA7IGs8a0xlbiA7IGsrKyApCgkJCXsKCQkJCWlDb2wgPSBhRGF0YVNvcnRba107CgkJCQlzVHlwZSA9IGFvQ29sdW1uc1sgaUNvbCBdLnNUeXBlIHx8ICdzdHJpbmcnOwoJCgkJCQlpZiAoIG5lc3RlZFNvcnRbaV0uX2lkeCA9PT0gdW5kZWZpbmVkICkgewoJCQkJCW5lc3RlZFNvcnRbaV0uX2lkeCA9ICQuaW5BcnJheSggbmVzdGVkU29ydFtpXVsxXSwgYW9Db2x1bW5zW2lDb2xdLmFzU29ydGluZyApOwoJCQkJfQoJCgkJCQlhU29ydC5wdXNoKCB7CgkJCQkJc3JjOiAgICAgICBzcmNDb2wsCgkJCQkJY29sOiAgICAgICBpQ29sLAoJCQkJCWRpcjogICAgICAgbmVzdGVkU29ydFtpXVsxXSwKCQkJCQlpbmRleDogICAgIG5lc3RlZFNvcnRbaV0uX2lkeCwKCQkJCQl0eXBlOiAgICAgIHNUeXBlLAoJCQkJCWZvcm1hdHRlcjogRGF0YVRhYmxlLmV4dC50eXBlLm9yZGVyWyBzVHlwZSsiLXByZSIgXQoJCQkJfSApOwoJCQl9CgkJfQoJCgkJcmV0dXJuIGFTb3J0OwoJfQoJCgkvKioKCSAqIENoYW5nZSB0aGUgb3JkZXIgb2YgdGhlIHRhYmxlCgkgKiAgQHBhcmFtIHtvYmplY3R9IG9TZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICogIEB0b2RvIFRoaXMgcmVhbGx5IG5lZWRzIHNwbGl0IHVwIQoJICovCglmdW5jdGlvbiBfZm5Tb3J0ICggb1NldHRpbmdzICkKCXsKCQl2YXIKCQkJaSwgaWVuLCBpTGVuLCBqLCBqTGVuLCBrLCBrTGVuLAoJCQlzRGF0YVR5cGUsIG5UaCwKCQkJYWlPcmlnID0gW10sCgkJCW9FeHRTb3J0ID0gRGF0YVRhYmxlLmV4dC50eXBlLm9yZGVyLAoJCQlhb0RhdGEgPSBvU2V0dGluZ3MuYW9EYXRhLAoJCQlhb0NvbHVtbnMgPSBvU2V0dGluZ3MuYW9Db2x1bW5zLAoJCQlhRGF0YVNvcnQsIGRhdGEsIGlDb2wsIHNUeXBlLCBvU29ydCwKCQkJZm9ybWF0dGVycyA9IDAsCgkJCXNvcnRDb2wsCgkJCWRpc3BsYXlNYXN0ZXIgPSBvU2V0dGluZ3MuYWlEaXNwbGF5TWFzdGVyLAoJCQlhU29ydDsKCQoJCS8vIFJlc29sdmUgYW55IGNvbHVtbiB0eXBlcyB0aGF0IGFyZSB1bmtub3duIGR1ZSB0byBhZGRpdGlvbiBvciBpbnZhbGlkYXRpb24KCQkvLyBAdG9kbyBDYW4gdGhpcyBiZSBtb3ZlZCBpbnRvIGEgJ2RhdGEtcmVhZHknIGhhbmRsZXIgd2hpY2ggaXMgY2FsbGVkIHdoZW4KCQkvLyAgIGRhdGEgaXMgZ29pbmcgdG8gYmUgdXNlZCBpbiB0aGUgdGFibGU/CgkJX2ZuQ29sdW1uVHlwZXMoIG9TZXR0aW5ncyApOwoJCgkJYVNvcnQgPSBfZm5Tb3J0RmxhdHRlbiggb1NldHRpbmdzICk7CgkKCQlmb3IgKCBpPTAsIGllbj1hU29ydC5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJc29ydENvbCA9IGFTb3J0W2ldOwoJCgkJCS8vIFRyYWNrIGlmIHdlIGNhbiB1c2UgdGhlIGZhc3Qgc29ydCBhbGdvcml0aG0KCQkJaWYgKCBzb3J0Q29sLmZvcm1hdHRlciApIHsKCQkJCWZvcm1hdHRlcnMrKzsKCQkJfQoJCgkJCS8vIExvYWQgdGhlIGRhdGEgbmVlZGVkIGZvciB0aGUgc29ydCwgZm9yIGVhY2ggY2VsbAoJCQlfZm5Tb3J0RGF0YSggb1NldHRpbmdzLCBzb3J0Q29sLmNvbCApOwoJCX0KCQoJCS8qIE5vIHNvcnRpbmcgcmVxdWlyZWQgaWYgc2VydmVyLXNpZGUgb3Igbm8gc29ydGluZyBhcnJheSAqLwoJCWlmICggX2ZuRGF0YVNvdXJjZSggb1NldHRpbmdzICkgIT0gJ3NzcCcgJiYgYVNvcnQubGVuZ3RoICE9PSAwICkKCQl7CgkJCS8vIENyZWF0ZSBhIHZhbHVlIC0ga2V5IGFycmF5IG9mIHRoZSBjdXJyZW50IHJvdyBwb3NpdGlvbnMgc3VjaCB0aGF0IHdlIGNhbiB1c2UgdGhlaXIKCQkJLy8gY3VycmVudCBwb3NpdGlvbiBkdXJpbmcgdGhlIHNvcnQsIGlmIHZhbHVlcyBtYXRjaCwgaW4gb3JkZXIgdG8gcGVyZm9ybSBzdGFibGUgc29ydGluZwoJCQlmb3IgKCBpPTAsIGlMZW49ZGlzcGxheU1hc3Rlci5sZW5ndGggOyBpPGlMZW4gOyBpKysgKSB7CgkJCQlhaU9yaWdbIGRpc3BsYXlNYXN0ZXJbaV0gXSA9IGk7CgkJCX0KCQoJCQkvKiBEbyB0aGUgc29ydCAtIGhlcmUgd2Ugd2FudCBtdWx0aS1jb2x1bW4gc29ydGluZyBiYXNlZCBvbiBhIGdpdmVuIGRhdGEgc291cmNlIChjb2x1bW4pCgkJCSAqIGFuZCBzb3J0aW5nIGZ1bmN0aW9uIChmcm9tIG9Tb3J0KSBpbiBhIGNlcnRhaW4gZGlyZWN0aW9uLiBJdCdzIHJlYXNvbmFibHkgY29tcGxleCB0bwoJCQkgKiBmb2xsb3cgb24gaXQncyBvd24sIGJ1dCB0aGlzIGlzIHdoYXQgd2Ugd2FudCAoZXhhbXBsZSB0d28gY29sdW1uIHNvcnRpbmcpOgoJCQkgKiAgZm5Mb2NhbFNvcnRpbmcgPSBmdW5jdGlvbihhLGIpewoJCQkgKiAgICB2YXIgaVRlc3Q7CgkJCSAqICAgIGlUZXN0ID0gb1NvcnRbJ3N0cmluZy1hc2MnXSgnZGF0YTExJywgJ2RhdGExMicpOwoJCQkgKiAgICAgIGlmIChpVGVzdCAhPT0gMCkKCQkJICogICAgICAgIHJldHVybiBpVGVzdDsKCQkJICogICAgaVRlc3QgPSBvU29ydFsnbnVtZXJpYy1kZXNjJ10oJ2RhdGEyMScsICdkYXRhMjInKTsKCQkJICogICAgaWYgKGlUZXN0ICE9PSAwKQoJCQkgKiAgICAgIHJldHVybiBpVGVzdDsKCQkJICogICAgcmV0dXJuIG9Tb3J0WydudW1lcmljLWFzYyddKCBhaU9yaWdbYV0sIGFpT3JpZ1tiXSApOwoJCQkgKiAgfQoJCQkgKiBCYXNpY2FsbHkgd2UgaGF2ZSBhIHRlc3QgZm9yIGVhY2ggc29ydGluZyBjb2x1bW4sIGlmIHRoZSBkYXRhIGluIHRoYXQgY29sdW1uIGlzIGVxdWFsLAoJCQkgKiB0ZXN0IHRoZSBuZXh0IGNvbHVtbi4gSWYgYWxsIGNvbHVtbnMgbWF0Y2gsIHRoZW4gd2UgdXNlIGEgbnVtZXJpYyBzb3J0IG9uIHRoZSByb3cKCQkJICogcG9zaXRpb25zIGluIHRoZSBvcmlnaW5hbCBkYXRhIGFycmF5IHRvIHByb3ZpZGUgYSBzdGFibGUgc29ydC4KCQkJICoKCQkJICogTm90ZSAtIEkga25vdyBpdCBzZWVtcyBleGNlc3NpdmUgdG8gaGF2ZSB0d28gc29ydGluZyBtZXRob2RzLCBidXQgdGhlIGZpcnN0IGlzIGFyb3VuZAoJCQkgKiAxNSUgZmFzdGVyLCBzbyB0aGUgc2Vjb25kIGlzIG9ubHkgbWFpbnRhaW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBzb3J0aW5nCgkJCSAqIG1ldGhvZHMgd2hpY2ggZG8gbm90IGhhdmUgYSBwcmUtc29ydCBmb3JtYXR0aW5nIGZ1bmN0aW9uLgoJCQkgKi8KCQkJaWYgKCBmb3JtYXR0ZXJzID09PSBhU29ydC5sZW5ndGggKSB7CgkJCQkvLyBBbGwgc29ydCB0eXBlcyBoYXZlIGZvcm1hdHRpbmcgZnVuY3Rpb25zCgkJCQlkaXNwbGF5TWFzdGVyLnNvcnQoIGZ1bmN0aW9uICggYSwgYiApIHsKCQkJCQl2YXIKCQkJCQkJeCwgeSwgaywgdGVzdCwgc29ydCwKCQkJCQkJbGVuPWFTb3J0Lmxlbmd0aCwKCQkJCQkJZGF0YUEgPSBhb0RhdGFbYV0uX2FTb3J0RGF0YSwKCQkJCQkJZGF0YUIgPSBhb0RhdGFbYl0uX2FTb3J0RGF0YTsKCQoJCQkJCWZvciAoIGs9MCA7IGs8bGVuIDsgaysrICkgewoJCQkJCQlzb3J0ID0gYVNvcnRba107CgkKCQkJCQkJeCA9IGRhdGFBWyBzb3J0LmNvbCBdOwoJCQkJCQl5ID0gZGF0YUJbIHNvcnQuY29sIF07CgkKCQkJCQkJdGVzdCA9IHg8eSA/IC0xIDogeD55ID8gMSA6IDA7CgkJCQkJCWlmICggdGVzdCAhPT0gMCApIHsKCQkJCQkJCXJldHVybiBzb3J0LmRpciA9PT0gJ2FzYycgPyB0ZXN0IDogLXRlc3Q7CgkJCQkJCX0KCQkJCQl9CgkKCQkJCQl4ID0gYWlPcmlnW2FdOwoJCQkJCXkgPSBhaU9yaWdbYl07CgkJCQkJcmV0dXJuIHg8eSA/IC0xIDogeD55ID8gMSA6IDA7CgkJCQl9ICk7CgkJCX0KCQkJZWxzZSB7CgkJCQkvLyBEZXByZWNpYXRlZCAtIHJlbW92ZSBpbiAxLjExIChwcm92aWRpbmcgYSBwbHVnLWluIG9wdGlvbikKCQkJCS8vIE5vdCBhbGwgc29ydCB0eXBlcyBoYXZlIGZvcm1hdHRpbmcgbWV0aG9kcywgc28gd2UgaGF2ZSB0byBjYWxsIHRoZWlyIHNvcnRpbmcKCQkJCS8vIG1ldGhvZHMuCgkJCQlkaXNwbGF5TWFzdGVyLnNvcnQoIGZ1bmN0aW9uICggYSwgYiApIHsKCQkJCQl2YXIKCQkJCQkJeCwgeSwgaywgbCwgdGVzdCwgc29ydCwgZm4sCgkJCQkJCWxlbj1hU29ydC5sZW5ndGgsCgkJCQkJCWRhdGFBID0gYW9EYXRhW2FdLl9hU29ydERhdGEsCgkJCQkJCWRhdGFCID0gYW9EYXRhW2JdLl9hU29ydERhdGE7CgkKCQkJCQlmb3IgKCBrPTAgOyBrPGxlbiA7IGsrKyApIHsKCQkJCQkJc29ydCA9IGFTb3J0W2tdOwoJCgkJCQkJCXggPSBkYXRhQVsgc29ydC5jb2wgXTsKCQkJCQkJeSA9IGRhdGFCWyBzb3J0LmNvbCBdOwoJCgkJCQkJCWZuID0gb0V4dFNvcnRbIHNvcnQudHlwZSsiLSIrc29ydC5kaXIgXSB8fCBvRXh0U29ydFsgInN0cmluZy0iK3NvcnQuZGlyIF07CgkJCQkJCXRlc3QgPSBmbiggeCwgeSApOwoJCQkJCQlpZiAoIHRlc3QgIT09IDAgKSB7CgkJCQkJCQlyZXR1cm4gdGVzdDsKCQkJCQkJfQoJCQkJCX0KCQoJCQkJCXggPSBhaU9yaWdbYV07CgkJCQkJeSA9IGFpT3JpZ1tiXTsKCQkJCQlyZXR1cm4geDx5ID8gLTEgOiB4PnkgPyAxIDogMDsKCQkJCX0gKTsKCQkJfQoJCX0KCQoJCS8qIFRlbGwgdGhlIGRyYXcgZnVuY3Rpb24gdGhhdCB3ZSBoYXZlIHNvcnRlZCB0aGUgZGF0YSAqLwoJCW9TZXR0aW5ncy5iU29ydGVkID0gdHJ1ZTsKCX0KCQoJCglmdW5jdGlvbiBfZm5Tb3J0QXJpYSAoIHNldHRpbmdzICkKCXsKCQl2YXIgbGFiZWw7CgkJdmFyIG5leHRTb3J0OwoJCXZhciBjb2x1bW5zID0gc2V0dGluZ3MuYW9Db2x1bW5zOwoJCXZhciBhU29ydCA9IF9mblNvcnRGbGF0dGVuKCBzZXR0aW5ncyApOwoJCXZhciBvQXJpYSA9IHNldHRpbmdzLm9MYW5ndWFnZS5vQXJpYTsKCQoJCS8vIEFSSUEgYXR0cmlidXRlcyAtIG5lZWQgdG8gbG9vcCBhbGwgY29sdW1ucywgdG8gdXBkYXRlIGFsbCAocmVtb3Zpbmcgb2xkCgkJLy8gYXR0cmlidXRlcyBhcyBuZWVkZWQpCgkJZm9yICggdmFyIGk9MCwgaUxlbj1jb2x1bW5zLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJewoJCQl2YXIgY29sID0gY29sdW1uc1tpXTsKCQkJdmFyIGFzU29ydGluZyA9IGNvbC5hc1NvcnRpbmc7CgkJCXZhciBzVGl0bGUgPSBjb2wuc1RpdGxlLnJlcGxhY2UoIC88Lio/Pi9nLCAiIiApOwoJCQl2YXIgdGggPSBjb2wublRoOwoJCgkJCS8vIElFNyBpcyB0aHJvd2luZyBhbiBlcnJvciB3aGVuIHNldHRpbmcgdGhlc2UgcHJvcGVydGllcyB3aXRoIGpRdWVyeSdzCgkJCS8vIGF0dHIoKSBhbmQgcmVtb3ZlQXR0cigpIG1ldGhvZHMuLi4KCQkJdGgucmVtb3ZlQXR0cmlidXRlKCdhcmlhLXNvcnQnKTsKCQoJCQkvKiBJbiBBUklBIG9ubHkgdGhlIGZpcnN0IHNvcnRpbmcgY29sdW1uIGNhbiBiZSBtYXJrZWQgYXMgc29ydGluZyAtIG5vIG11bHRpLXNvcnQgb3B0aW9uICovCgkJCWlmICggY29sLmJTb3J0YWJsZSApIHsKCQkJCWlmICggYVNvcnQubGVuZ3RoID4gMCAmJiBhU29ydFswXS5jb2wgPT0gaSApIHsKCQkJCQl0aC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc29ydCcsIGFTb3J0WzBdLmRpcj09ImFzYyIgPyAiYXNjZW5kaW5nIiA6ICJkZXNjZW5kaW5nIiApOwoJCQkJCW5leHRTb3J0ID0gYXNTb3J0aW5nWyBhU29ydFswXS5pbmRleCsxIF0gfHwgYXNTb3J0aW5nWzBdOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJbmV4dFNvcnQgPSBhc1NvcnRpbmdbMF07CgkJCQl9CgkKCQkJCWxhYmVsID0gc1RpdGxlICsgKCBuZXh0U29ydCA9PT0gImFzYyIgPwoJCQkJCW9BcmlhLnNTb3J0QXNjZW5kaW5nIDoKCQkJCQlvQXJpYS5zU29ydERlc2NlbmRpbmcKCQkJCSk7CgkJCX0KCQkJZWxzZSB7CgkJCQlsYWJlbCA9IHNUaXRsZTsKCQkJfQoJCgkJCXRoLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIGxhYmVsKTsKCQl9Cgl9CgkKCQoJLyoqCgkgKiBGdW5jdGlvbiB0byBydW4gb24gdXNlciBzb3J0IHJlcXVlc3QKCSAqICBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge25vZGV9IGF0dGFjaFRvIG5vZGUgdG8gYXR0YWNoIHRoZSBoYW5kbGVyIHRvCgkgKiAgQHBhcmFtIHtpbnR9IGNvbElkeCBjb2x1bW4gc29ydGluZyBpbmRleAoJICogIEBwYXJhbSB7Ym9vbGVhbn0gW2FwcGVuZD1mYWxzZV0gQXBwZW5kIHRoZSByZXF1ZXN0ZWQgc29ydCB0byB0aGUgZXhpc3RpbmcKCSAqICAgIHNvcnQgaWYgdHJ1ZSAoaS5lLiBtdWx0aS1jb2x1bW4gc29ydCkKCSAqICBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2tdIGNhbGxiYWNrIGZ1bmN0aW9uCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mblNvcnRMaXN0ZW5lciAoIHNldHRpbmdzLCBjb2xJZHgsIGFwcGVuZCwgY2FsbGJhY2sgKQoJewoJCXZhciBjb2wgPSBzZXR0aW5ncy5hb0NvbHVtbnNbIGNvbElkeCBdOwoJCXZhciBzb3J0aW5nID0gc2V0dGluZ3MuYWFTb3J0aW5nOwoJCXZhciBhc1NvcnRpbmcgPSBjb2wuYXNTb3J0aW5nOwoJCXZhciBuZXh0U29ydElkeDsKCQl2YXIgbmV4dCA9IGZ1bmN0aW9uICggYSwgb3ZlcmZsb3cgKSB7CgkJCXZhciBpZHggPSBhLl9pZHg7CgkJCWlmICggaWR4ID09PSB1bmRlZmluZWQgKSB7CgkJCQlpZHggPSAkLmluQXJyYXkoIGFbMV0sIGFzU29ydGluZyApOwoJCQl9CgkKCQkJcmV0dXJuIGlkeCsxIDwgYXNTb3J0aW5nLmxlbmd0aCA/CgkJCQlpZHgrMSA6CgkJCQlvdmVyZmxvdyA/CgkJCQkJbnVsbCA6CgkJCQkJMDsKCQl9OwoJCgkJLy8gQ29udmVydCB0byAyRCBhcnJheSBpZiBuZWVkZWQKCQlpZiAoIHR5cGVvZiBzb3J0aW5nWzBdID09PSAnbnVtYmVyJyApIHsKCQkJc29ydGluZyA9IHNldHRpbmdzLmFhU29ydGluZyA9IFsgc29ydGluZyBdOwoJCX0KCQoJCS8vIElmIGFwcGVuZGluZyB0aGUgc29ydCB0aGVuIHdlIGFyZSBtdWx0aS1jb2x1bW4gc29ydGluZwoJCWlmICggYXBwZW5kICYmIHNldHRpbmdzLm9GZWF0dXJlcy5iU29ydE11bHRpICkgewoJCQkvLyBBcmUgd2UgYWxyZWFkeSBkb2luZyBzb21lIGtpbmQgb2Ygc29ydCBvbiB0aGlzIGNvbHVtbj8KCQkJdmFyIHNvcnRJZHggPSAkLmluQXJyYXkoIGNvbElkeCwgX3BsdWNrKHNvcnRpbmcsICcwJykgKTsKCQoJCQlpZiAoIHNvcnRJZHggIT09IC0xICkgewoJCQkJLy8gWWVzLCBtb2RpZnkgdGhlIHNvcnQKCQkJCW5leHRTb3J0SWR4ID0gbmV4dCggc29ydGluZ1tzb3J0SWR4XSwgdHJ1ZSApOwoJCgkJCQlpZiAoIG5leHRTb3J0SWR4ID09PSBudWxsICYmIHNvcnRpbmcubGVuZ3RoID09PSAxICkgewoJCQkJCW5leHRTb3J0SWR4ID0gMDsgLy8gY2FuJ3QgcmVtb3ZlIHNvcnRpbmcgY29tcGxldGVseQoJCQkJfQoJCgkJCQlpZiAoIG5leHRTb3J0SWR4ID09PSBudWxsICkgewoJCQkJCXNvcnRpbmcuc3BsaWNlKCBzb3J0SWR4LCAxICk7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlzb3J0aW5nW3NvcnRJZHhdWzFdID0gYXNTb3J0aW5nWyBuZXh0U29ydElkeCBdOwoJCQkJCXNvcnRpbmdbc29ydElkeF0uX2lkeCA9IG5leHRTb3J0SWR4OwoJCQkJfQoJCQl9CgkJCWVsc2UgewoJCQkJLy8gTm8gc29ydCBvbiB0aGlzIGNvbHVtbiB5ZXQKCQkJCXNvcnRpbmcucHVzaCggWyBjb2xJZHgsIGFzU29ydGluZ1swXSwgMCBdICk7CgkJCQlzb3J0aW5nW3NvcnRpbmcubGVuZ3RoLTFdLl9pZHggPSAwOwoJCQl9CgkJfQoJCWVsc2UgaWYgKCBzb3J0aW5nLmxlbmd0aCAmJiBzb3J0aW5nWzBdWzBdID09IGNvbElkeCApIHsKCQkJLy8gU2luZ2xlIGNvbHVtbiAtIGFscmVhZHkgc29ydGluZyBvbiB0aGlzIGNvbHVtbiwgbW9kaWZ5IHRoZSBzb3J0CgkJCW5leHRTb3J0SWR4ID0gbmV4dCggc29ydGluZ1swXSApOwoJCgkJCXNvcnRpbmcubGVuZ3RoID0gMTsKCQkJc29ydGluZ1swXVsxXSA9IGFzU29ydGluZ1sgbmV4dFNvcnRJZHggXTsKCQkJc29ydGluZ1swXS5faWR4ID0gbmV4dFNvcnRJZHg7CgkJfQoJCWVsc2UgewoJCQkvLyBTaW5nbGUgY29sdW1uIC0gc29ydCBvbmx5IG9uIHRoaXMgY29sdW1uCgkJCXNvcnRpbmcubGVuZ3RoID0gMDsKCQkJc29ydGluZy5wdXNoKCBbIGNvbElkeCwgYXNTb3J0aW5nWzBdIF0gKTsKCQkJc29ydGluZ1swXS5faWR4ID0gMDsKCQl9CgkKCQkvLyBSdW4gdGhlIHNvcnQgYnkgY2FsbGluZyBhIGZ1bGwgcmVkcmF3CgkJX2ZuUmVEcmF3KCBzZXR0aW5ncyApOwoJCgkJLy8gY2FsbGJhY2sgdXNlZCBmb3IgYXN5bmMgdXNlciBpbnRlcmFjdGlvbgoJCWlmICggdHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicgKSB7CgkJCWNhbGxiYWNrKCBzZXR0aW5ncyApOwoJCX0KCX0KCQoJCgkvKioKCSAqIEF0dGFjaCBhIHNvcnQgaGFuZGxlciAoY2xpY2spIHRvIGEgbm9kZQoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSB7bm9kZX0gYXR0YWNoVG8gbm9kZSB0byBhdHRhY2ggdGhlIGhhbmRsZXIgdG8KCSAqICBAcGFyYW0ge2ludH0gY29sSWR4IGNvbHVtbiBzb3J0aW5nIGluZGV4CgkgKiAgQHBhcmFtIHtmdW5jdGlvbn0gW2NhbGxiYWNrXSBjYWxsYmFjayBmdW5jdGlvbgoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5Tb3J0QXR0YWNoTGlzdGVuZXIgKCBzZXR0aW5ncywgYXR0YWNoVG8sIGNvbElkeCwgY2FsbGJhY2sgKQoJewoJCXZhciBjb2wgPSBzZXR0aW5ncy5hb0NvbHVtbnNbIGNvbElkeCBdOwoJCgkJX2ZuQmluZEFjdGlvbiggYXR0YWNoVG8sIHt9LCBmdW5jdGlvbiAoZSkgewoJCQkvKiBJZiB0aGUgY29sdW1uIGlzIG5vdCBzb3J0YWJsZSAtIGRvbid0IHRvIGFueXRoaW5nICovCgkJCWlmICggY29sLmJTb3J0YWJsZSA9PT0gZmFsc2UgKSB7CgkJCQlyZXR1cm47CgkJCX0KCQoJCQkvLyBJZiBwcm9jZXNzaW5nIGlzIGVuYWJsZWQgdXNlIGEgdGltZW91dCB0byBhbGxvdyB0aGUgcHJvY2Vzc2luZwoJCQkvLyBkaXNwbGF5IHRvIGJlIHNob3duIC0gb3RoZXJ3aXNlIHRvIGl0IHN5bmNocm9ub3VzbHkKCQkJaWYgKCBzZXR0aW5ncy5vRmVhdHVyZXMuYlByb2Nlc3NpbmcgKSB7CgkJCQlfZm5Qcm9jZXNzaW5nRGlzcGxheSggc2V0dGluZ3MsIHRydWUgKTsKCQoJCQkJc2V0VGltZW91dCggZnVuY3Rpb24oKSB7CgkJCQkJX2ZuU29ydExpc3RlbmVyKCBzZXR0aW5ncywgY29sSWR4LCBlLnNoaWZ0S2V5LCBjYWxsYmFjayApOwoJCgkJCQkJLy8gSW4gc2VydmVyLXNpZGUgcHJvY2Vzc2luZywgdGhlIGRyYXcgY2FsbGJhY2sgd2lsbCByZW1vdmUgdGhlCgkJCQkJLy8gcHJvY2Vzc2luZyBkaXNwbGF5CgkJCQkJaWYgKCBfZm5EYXRhU291cmNlKCBzZXR0aW5ncyApICE9PSAnc3NwJyApIHsKCQkJCQkJX2ZuUHJvY2Vzc2luZ0Rpc3BsYXkoIHNldHRpbmdzLCBmYWxzZSApOwoJCQkJCX0KCQkJCX0sIDAgKTsKCQkJfQoJCQllbHNlIHsKCQkJCV9mblNvcnRMaXN0ZW5lciggc2V0dGluZ3MsIGNvbElkeCwgZS5zaGlmdEtleSwgY2FsbGJhY2sgKTsKCQkJfQoJCX0gKTsKCX0KCQoJCgkvKioKCSAqIFNldCB0aGUgc29ydGluZyBjbGFzc2VzIG9uIHRhYmxlJ3MgYm9keSwgTm90ZTogaXQgaXMgc2FmZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24KCSAqIHdoZW4gYlNvcnQgYW5kIGJTb3J0Q2xhc3NlcyBhcmUgZmFsc2UKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mblNvcnRpbmdDbGFzc2VzKCBzZXR0aW5ncyApCgl7CgkJdmFyIG9sZFNvcnQgPSBzZXR0aW5ncy5hTGFzdFNvcnQ7CgkJdmFyIHNvcnRDbGFzcyA9IHNldHRpbmdzLm9DbGFzc2VzLnNTb3J0Q29sdW1uOwoJCXZhciBzb3J0ID0gX2ZuU29ydEZsYXR0ZW4oIHNldHRpbmdzICk7CgkJdmFyIGZlYXR1cmVzID0gc2V0dGluZ3Mub0ZlYXR1cmVzOwoJCXZhciBpLCBpZW4sIGNvbElkeDsKCQoJCWlmICggZmVhdHVyZXMuYlNvcnQgJiYgZmVhdHVyZXMuYlNvcnRDbGFzc2VzICkgewoJCQkvLyBSZW1vdmUgb2xkIHNvcnRpbmcgY2xhc3NlcwoJCQlmb3IgKCBpPTAsIGllbj1vbGRTb3J0Lmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJY29sSWR4ID0gb2xkU29ydFtpXS5zcmM7CgkKCQkJCS8vIFJlbW92ZSBjb2x1bW4gc29ydGluZwoJCQkJJCggX3BsdWNrKCBzZXR0aW5ncy5hb0RhdGEsICdhbkNlbGxzJywgY29sSWR4ICkgKQoJCQkJCS5yZW1vdmVDbGFzcyggc29ydENsYXNzICsgKGk8MiA/IGkrMSA6IDMpICk7CgkJCX0KCQoJCQkvLyBBZGQgbmV3IGNvbHVtbiBzb3J0aW5nCgkJCWZvciAoIGk9MCwgaWVuPXNvcnQubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQljb2xJZHggPSBzb3J0W2ldLnNyYzsKCQoJCQkJJCggX3BsdWNrKCBzZXR0aW5ncy5hb0RhdGEsICdhbkNlbGxzJywgY29sSWR4ICkgKQoJCQkJCS5hZGRDbGFzcyggc29ydENsYXNzICsgKGk8MiA/IGkrMSA6IDMpICk7CgkJCX0KCQl9CgkKCQlzZXR0aW5ncy5hTGFzdFNvcnQgPSBzb3J0OwoJfQoJCgkKCS8vIEdldCB0aGUgZGF0YSB0byBzb3J0IGEgY29sdW1uLCBiZSBpdCBmcm9tIGNhY2hlLCBmcmVzaCAocG9wdWxhdGluZyB0aGUKCS8vIGNhY2hlKSwgb3IgZnJvbSBhIHNvcnQgZm9ybWF0dGVyCglmdW5jdGlvbiBfZm5Tb3J0RGF0YSggc2V0dGluZ3MsIGlkeCApCgl7CgkJLy8gQ3VzdG9tIHNvcnRpbmcgZnVuY3Rpb24gLSBwcm92aWRlZCBieSB0aGUgc29ydCBkYXRhIHR5cGUKCQl2YXIgY29sdW1uID0gc2V0dGluZ3MuYW9Db2x1bW5zWyBpZHggXTsKCQl2YXIgY3VzdG9tU29ydCA9IERhdGFUYWJsZS5leHQub3JkZXJbIGNvbHVtbi5zU29ydERhdGFUeXBlIF07CgkJdmFyIGN1c3RvbURhdGE7CgkKCQlpZiAoIGN1c3RvbVNvcnQgKSB7CgkJCWN1c3RvbURhdGEgPSBjdXN0b21Tb3J0LmNhbGwoIHNldHRpbmdzLm9JbnN0YW5jZSwgc2V0dGluZ3MsIGlkeCwKCQkJCV9mbkNvbHVtbkluZGV4VG9WaXNpYmxlKCBzZXR0aW5ncywgaWR4ICkKCQkJKTsKCQl9CgkKCQkvLyBVc2UgLyBwb3B1bGF0ZSBjYWNoZQoJCXZhciByb3csIGNlbGxEYXRhOwoJCXZhciBmb3JtYXR0ZXIgPSBEYXRhVGFibGUuZXh0LnR5cGUub3JkZXJbIGNvbHVtbi5zVHlwZSsiLXByZSIgXTsKCQoJCWZvciAoIHZhciBpPTAsIGllbj1zZXR0aW5ncy5hb0RhdGEubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCXJvdyA9IHNldHRpbmdzLmFvRGF0YVtpXTsKCQoJCQlpZiAoICEgcm93Ll9hU29ydERhdGEgKSB7CgkJCQlyb3cuX2FTb3J0RGF0YSA9IFtdOwoJCQl9CgkKCQkJaWYgKCAhIHJvdy5fYVNvcnREYXRhW2lkeF0gfHwgY3VzdG9tU29ydCApIHsKCQkJCWNlbGxEYXRhID0gY3VzdG9tU29ydCA/CgkJCQkJY3VzdG9tRGF0YVtpXSA6IC8vIElmIHRoZXJlIHdhcyBhIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLCB1c2UgZGF0YSBmcm9tIHRoZXJlCgkJCQkJX2ZuR2V0Q2VsbERhdGEoIHNldHRpbmdzLCBpLCBpZHgsICdzb3J0JyApOwoJCgkJCQlyb3cuX2FTb3J0RGF0YVsgaWR4IF0gPSBmb3JtYXR0ZXIgPwoJCQkJCWZvcm1hdHRlciggY2VsbERhdGEgKSA6CgkJCQkJY2VsbERhdGE7CgkJCX0KCQl9Cgl9CgkKCQoJCgkvKioKCSAqIFNhdmUgdGhlIHN0YXRlIG9mIGEgdGFibGUKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mblNhdmVTdGF0ZSAoIHNldHRpbmdzICkKCXsKCQlpZiAoICFzZXR0aW5ncy5vRmVhdHVyZXMuYlN0YXRlU2F2ZSB8fCBzZXR0aW5ncy5iRGVzdHJveWluZyApCgkJewoJCQlyZXR1cm47CgkJfQoJCgkJLyogU3RvcmUgdGhlIGludGVyZXN0aW5nIHZhcmlhYmxlcyAqLwoJCXZhciBzdGF0ZSA9IHsKCQkJdGltZTogICAgK25ldyBEYXRlKCksCgkJCXN0YXJ0OiAgIHNldHRpbmdzLl9pRGlzcGxheVN0YXJ0LAoJCQlsZW5ndGg6ICBzZXR0aW5ncy5faURpc3BsYXlMZW5ndGgsCgkJCW9yZGVyOiAgICQuZXh0ZW5kKCB0cnVlLCBbXSwgc2V0dGluZ3MuYWFTb3J0aW5nICksCgkJCXNlYXJjaDogIF9mblNlYXJjaFRvQ2FtZWwoIHNldHRpbmdzLm9QcmV2aW91c1NlYXJjaCApLAoJCQljb2x1bW5zOiAkLm1hcCggc2V0dGluZ3MuYW9Db2x1bW5zLCBmdW5jdGlvbiAoIGNvbCwgaSApIHsKCQkJCXJldHVybiB7CgkJCQkJdmlzaWJsZTogY29sLmJWaXNpYmxlLAoJCQkJCXNlYXJjaDogX2ZuU2VhcmNoVG9DYW1lbCggc2V0dGluZ3MuYW9QcmVTZWFyY2hDb2xzW2ldICkKCQkJCX07CgkJCX0gKQoJCX07CgkKCQlfZm5DYWxsYmFja0ZpcmUoIHNldHRpbmdzLCAiYW9TdGF0ZVNhdmVQYXJhbXMiLCAnc3RhdGVTYXZlUGFyYW1zJywgW3NldHRpbmdzLCBzdGF0ZV0gKTsKCQoJCXNldHRpbmdzLm9TYXZlZFN0YXRlID0gc3RhdGU7CgkJc2V0dGluZ3MuZm5TdGF0ZVNhdmVDYWxsYmFjay5jYWxsKCBzZXR0aW5ncy5vSW5zdGFuY2UsIHNldHRpbmdzLCBzdGF0ZSApOwoJfQoJCgkKCS8qKgoJICogQXR0ZW1wdCB0byBsb2FkIGEgc2F2ZWQgdGFibGUgc3RhdGUKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHtvYmplY3R9IG9Jbml0IERhdGFUYWJsZXMgaW5pdCBvYmplY3Qgc28gd2UgY2FuIG92ZXJyaWRlIHNldHRpbmdzCgkgKiAgQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIHRoZSBzdGF0ZSBoYXMgYmVlbiBsb2FkZWQKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuTG9hZFN0YXRlICggc2V0dGluZ3MsIG9Jbml0LCBjYWxsYmFjayApCgl7CgkJdmFyIGksIGllbjsKCQl2YXIgY29sdW1ucyA9IHNldHRpbmdzLmFvQ29sdW1uczsKCQl2YXIgbG9hZGVkID0gZnVuY3Rpb24gKCBzICkgewoJCQlpZiAoICEgcyB8fCAhIHMudGltZSApIHsKCQkJCWNhbGxiYWNrKCk7CgkJCQlyZXR1cm47CgkJCX0KCQoJCQkvLyBBbGxvdyBjdXN0b20gYW5kIHBsdWctaW4gbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyB0byBhbHRlciB0aGUgc2F2ZWQgZGF0YSBzZXQgYW5kCgkJCS8vIGNhbmNlbGxpbmcgb2YgbG9hZGluZyBieSByZXR1cm5pbmcgZmFsc2UKCQkJdmFyIGFiU3RhdGVMb2FkID0gX2ZuQ2FsbGJhY2tGaXJlKCBzZXR0aW5ncywgJ2FvU3RhdGVMb2FkUGFyYW1zJywgJ3N0YXRlTG9hZFBhcmFtcycsIFtzZXR0aW5ncywgc10gKTsKCQkJaWYgKCAkLmluQXJyYXkoIGZhbHNlLCBhYlN0YXRlTG9hZCApICE9PSAtMSApIHsKCQkJCWNhbGxiYWNrKCk7CgkJCQlyZXR1cm47CgkJCX0KCQoJCQkvLyBSZWplY3Qgb2xkIGRhdGEKCQkJdmFyIGR1cmF0aW9uID0gc2V0dGluZ3MuaVN0YXRlRHVyYXRpb247CgkJCWlmICggZHVyYXRpb24gPiAwICYmIHMudGltZSA8ICtuZXcgRGF0ZSgpIC0gKGR1cmF0aW9uKjEwMDApICkgewoJCQkJY2FsbGJhY2soKTsKCQkJCXJldHVybjsKCQkJfQoJCgkJCS8vIE51bWJlciBvZiBjb2x1bW5zIGhhdmUgY2hhbmdlZCAtIGFsbCBiZXRzIGFyZSBvZmYsIG5vIHJlc3RvcmUgb2Ygc2V0dGluZ3MKCQkJaWYgKCBzLmNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggIT09IHMuY29sdW1ucy5sZW5ndGggKSB7CgkJCQljYWxsYmFjaygpOwoJCQkJcmV0dXJuOwoJCQl9CgkKCQkJLy8gU3RvcmUgdGhlIHNhdmVkIHN0YXRlIHNvIGl0IG1pZ2h0IGJlIGFjY2Vzc2VkIGF0IGFueSB0aW1lCgkJCXNldHRpbmdzLm9Mb2FkZWRTdGF0ZSA9ICQuZXh0ZW5kKCB0cnVlLCB7fSwgcyApOwoJCgkJCS8vIFJlc3RvcmUga2V5IGZlYXR1cmVzIC0gdG9kbyAtIGZvciAxLjExIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBieQoJCQkvLyBzdWJzY3JpYmVkIGV2ZW50cwoJCQlpZiAoIHMuc3RhcnQgIT09IHVuZGVmaW5lZCApIHsKCQkJCXNldHRpbmdzLl9pRGlzcGxheVN0YXJ0ICAgID0gcy5zdGFydDsKCQkJCXNldHRpbmdzLmlJbml0RGlzcGxheVN0YXJ0ID0gcy5zdGFydDsKCQkJfQoJCQlpZiAoIHMubGVuZ3RoICE9PSB1bmRlZmluZWQgKSB7CgkJCQlzZXR0aW5ncy5faURpc3BsYXlMZW5ndGggICA9IHMubGVuZ3RoOwoJCQl9CgkKCQkJLy8gT3JkZXIKCQkJaWYgKCBzLm9yZGVyICE9PSB1bmRlZmluZWQgKSB7CgkJCQlzZXR0aW5ncy5hYVNvcnRpbmcgPSBbXTsKCQkJCSQuZWFjaCggcy5vcmRlciwgZnVuY3Rpb24gKCBpLCBjb2wgKSB7CgkJCQkJc2V0dGluZ3MuYWFTb3J0aW5nLnB1c2goIGNvbFswXSA+PSBjb2x1bW5zLmxlbmd0aCA/CgkJCQkJCVsgMCwgY29sWzFdIF0gOgoJCQkJCQljb2wKCQkJCQkpOwoJCQkJfSApOwoJCQl9CgkKCQkJLy8gU2VhcmNoCgkJCWlmICggcy5zZWFyY2ggIT09IHVuZGVmaW5lZCApIHsKCQkJCSQuZXh0ZW5kKCBzZXR0aW5ncy5vUHJldmlvdXNTZWFyY2gsIF9mblNlYXJjaFRvSHVuZyggcy5zZWFyY2ggKSApOwoJCQl9CgkKCQkJLy8gQ29sdW1ucwoJCQkvLwoJCQlpZiAoIHMuY29sdW1ucyApIHsKCQkJCWZvciAoIGk9MCwgaWVuPXMuY29sdW1ucy5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCQl2YXIgY29sID0gcy5jb2x1bW5zW2ldOwoJCgkJCQkJLy8gVmlzaWJpbGl0eQoJCQkJCWlmICggY29sLnZpc2libGUgIT09IHVuZGVmaW5lZCApIHsKCQkJCQkJY29sdW1uc1tpXS5iVmlzaWJsZSA9IGNvbC52aXNpYmxlOwoJCQkJCX0KCQoJCQkJCS8vIFNlYXJjaAoJCQkJCWlmICggY29sLnNlYXJjaCAhPT0gdW5kZWZpbmVkICkgewoJCQkJCQkkLmV4dGVuZCggc2V0dGluZ3MuYW9QcmVTZWFyY2hDb2xzW2ldLCBfZm5TZWFyY2hUb0h1bmcoIGNvbC5zZWFyY2ggKSApOwoJCQkJCX0KCQkJCX0KCQkJfQoJCgkJCV9mbkNhbGxiYWNrRmlyZSggc2V0dGluZ3MsICdhb1N0YXRlTG9hZGVkJywgJ3N0YXRlTG9hZGVkJywgW3NldHRpbmdzLCBzXSApOwoJCQljYWxsYmFjaygpOwoJCX07CgkKCQlpZiAoICEgc2V0dGluZ3Mub0ZlYXR1cmVzLmJTdGF0ZVNhdmUgKSB7CgkJCWNhbGxiYWNrKCk7CgkJCXJldHVybjsKCQl9CgkKCQl2YXIgc3RhdGUgPSBzZXR0aW5ncy5mblN0YXRlTG9hZENhbGxiYWNrLmNhbGwoIHNldHRpbmdzLm9JbnN0YW5jZSwgc2V0dGluZ3MsIGxvYWRlZCApOwoJCgkJaWYgKCBzdGF0ZSAhPT0gdW5kZWZpbmVkICkgewoJCQlsb2FkZWQoIHN0YXRlICk7CgkJfQoJCS8vIG90aGVyd2lzZSwgd2FpdCBmb3IgdGhlIGxvYWRlZCBjYWxsYmFjayB0byBiZSBleGVjdXRlZAoJfQoJCgkKCS8qKgoJICogUmV0dXJuIHRoZSBzZXR0aW5ncyBvYmplY3QgZm9yIGEgcGFydGljdWxhciB0YWJsZQoJICogIEBwYXJhbSB7bm9kZX0gdGFibGUgdGFibGUgd2UgYXJlIHVzaW5nIGFzIGEgZGF0YVRhYmxlCgkgKiAgQHJldHVybnMge29iamVjdH0gU2V0dGluZ3Mgb2JqZWN0IC0gb3IgbnVsbCBpZiBub3QgZm91bmQKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuU2V0dGluZ3NGcm9tTm9kZSAoIHRhYmxlICkKCXsKCQl2YXIgc2V0dGluZ3MgPSBEYXRhVGFibGUuc2V0dGluZ3M7CgkJdmFyIGlkeCA9ICQuaW5BcnJheSggdGFibGUsIF9wbHVjayggc2V0dGluZ3MsICduVGFibGUnICkgKTsKCQoJCXJldHVybiBpZHggIT09IC0xID8KCQkJc2V0dGluZ3NbIGlkeCBdIDoKCQkJbnVsbDsKCX0KCQoJCgkvKioKCSAqIExvZyBhbiBlcnJvciBtZXNzYWdlCgkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHtpbnR9IGxldmVsIGxvZyBlcnJvciBtZXNzYWdlcywgb3IgZGlzcGxheSB0aGVtIHRvIHRoZSB1c2VyCgkgKiAgQHBhcmFtIHtzdHJpbmd9IG1zZyBlcnJvciBtZXNzYWdlCgkgKiAgQHBhcmFtIHtpbnR9IHRuIFRlY2huaWNhbCBub3RlIGlkIHRvIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlcnJvci4KCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuTG9nKCBzZXR0aW5ncywgbGV2ZWwsIG1zZywgdG4gKQoJewoJCW1zZyA9ICdEYXRhVGFibGVzIHdhcm5pbmc6ICcrCgkJCShzZXR0aW5ncyA/ICd0YWJsZSBpZD0nK3NldHRpbmdzLnNUYWJsZUlkKycgLSAnIDogJycpK21zZzsKCQoJCWlmICggdG4gKSB7CgkJCW1zZyArPSAnLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGVycm9yLCBwbGVhc2Ugc2VlICcrCgkJCSdodHRwOi8vZGF0YXRhYmxlcy5uZXQvdG4vJyt0bjsKCQl9CgkKCQlpZiAoICEgbGV2ZWwgICkgewoJCQkvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBwcmUgMS4xMAoJCQl2YXIgZXh0ID0gRGF0YVRhYmxlLmV4dDsKCQkJdmFyIHR5cGUgPSBleHQuc0Vyck1vZGUgfHwgZXh0LmVyck1vZGU7CgkKCQkJaWYgKCBzZXR0aW5ncyApIHsKCQkJCV9mbkNhbGxiYWNrRmlyZSggc2V0dGluZ3MsIG51bGwsICdlcnJvcicsIFsgc2V0dGluZ3MsIHRuLCBtc2cgXSApOwoJCQl9CgkKCQkJaWYgKCB0eXBlID09ICdhbGVydCcgKSB7CgkJCQlhbGVydCggbXNnICk7CgkJCX0KCQkJZWxzZSBpZiAoIHR5cGUgPT0gJ3Rocm93JyApIHsKCQkJCXRocm93IG5ldyBFcnJvcihtc2cpOwoJCQl9CgkJCWVsc2UgaWYgKCB0eXBlb2YgdHlwZSA9PSAnZnVuY3Rpb24nICkgewoJCQkJdHlwZSggc2V0dGluZ3MsIHRuLCBtc2cgKTsKCQkJfQoJCX0KCQllbHNlIGlmICggd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS5sb2cgKSB7CgkJCWNvbnNvbGUubG9nKCBtc2cgKTsKCQl9Cgl9CgkKCQoJLyoqCgkgKiBTZWUgaWYgYSBwcm9wZXJ0eSBpcyBkZWZpbmVkIG9uIG9uZSBvYmplY3QsIGlmIHNvIGFzc2lnbiBpdCB0byB0aGUgb3RoZXIgb2JqZWN0CgkgKiAgQHBhcmFtIHtvYmplY3R9IHJldCB0YXJnZXQgb2JqZWN0CgkgKiAgQHBhcmFtIHtvYmplY3R9IHNyYyBzb3VyY2Ugb2JqZWN0CgkgKiAgQHBhcmFtIHtzdHJpbmd9IG5hbWUgcHJvcGVydHkKCSAqICBAcGFyYW0ge3N0cmluZ30gW21hcHBlZE5hbWVdIG5hbWUgdG8gbWFwIHRvbyAtIG9wdGlvbmFsLCBuYW1lIHVzZWQgaWYgbm90IGdpdmVuCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbk1hcCggcmV0LCBzcmMsIG5hbWUsIG1hcHBlZE5hbWUgKQoJewoJCWlmICggJC5pc0FycmF5KCBuYW1lICkgKSB7CgkJCSQuZWFjaCggbmFtZSwgZnVuY3Rpb24gKGksIHZhbCkgewoJCQkJaWYgKCAkLmlzQXJyYXkoIHZhbCApICkgewoJCQkJCV9mbk1hcCggcmV0LCBzcmMsIHZhbFswXSwgdmFsWzFdICk7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlfZm5NYXAoIHJldCwgc3JjLCB2YWwgKTsKCQkJCX0KCQkJfSApOwoJCgkJCXJldHVybjsKCQl9CgkKCQlpZiAoIG1hcHBlZE5hbWUgPT09IHVuZGVmaW5lZCApIHsKCQkJbWFwcGVkTmFtZSA9IG5hbWU7CgkJfQoJCgkJaWYgKCBzcmNbbmFtZV0gIT09IHVuZGVmaW5lZCApIHsKCQkJcmV0W21hcHBlZE5hbWVdID0gc3JjW25hbWVdOwoJCX0KCX0KCQoJCgkvKioKCSAqIEV4dGVuZCBvYmplY3RzIC0gdmVyeSBzaW1pbGFyIHRvIGpRdWVyeS5leHRlbmQsIGJ1dCBkZWVwIGNvcHkgb2JqZWN0cywgYW5kCgkgKiBzaGFsbG93IGNvcHkgYXJyYXlzLiBUaGUgcmVhc29uIHdlIG5lZWQgdG8gZG8gdGhpcywgaXMgdGhhdCB3ZSBkb24ndCB3YW50IHRvCgkgKiBkZWVwIGNvcHkgYXJyYXkgaW5pdCB2YWx1ZXMgKHN1Y2ggYXMgYWFTb3J0aW5nKSBzaW5jZSB0aGUgZGV2IHdvdWxkbid0IGJlCgkgKiBhYmxlIHRvIG92ZXJyaWRlIHRoZW0sIGJ1dCB3ZSBkbyB3YW50IHRvIGRlZXAgY29weSBhcnJheXMuCgkgKiAgQHBhcmFtIHtvYmplY3R9IG91dCBPYmplY3QgdG8gZXh0ZW5kCgkgKiAgQHBhcmFtIHtvYmplY3R9IGV4dGVuZGVyIE9iamVjdCBmcm9tIHdoaWNoIHRoZSBwcm9wZXJ0aWVzIHdpbGwgYmUgYXBwbGllZCB0bwoJICogICAgICBvdXQKCSAqICBAcGFyYW0ge2Jvb2xlYW59IGJyZWFrUmVmcyBJZiB0cnVlLCB0aGVuIGFycmF5cyB3aWxsIGJlIHNsaWNlZCB0byB0YWtlIGFuCgkgKiAgICAgIGluZGVwZW5kZW50IGNvcHkgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBgZGF0YWAgb3IgYGFhRGF0YWAgcGFyYW1ldGVycwoJICogICAgICBpZiB0aGV5IGFyZSBwcmVzZW50LiBUaGlzIGlzIHNvIHlvdSBjYW4gcGFzcyBpbiBhIGNvbGxlY3Rpb24gdG8KCSAqICAgICAgRGF0YVRhYmxlcyBhbmQgaGF2ZSB0aGF0IHVzZWQgYXMgeW91ciBkYXRhIHNvdXJjZSB3aXRob3V0IGJyZWFraW5nIHRoZQoJICogICAgICByZWZlcmVuY2VzCgkgKiAgQHJldHVybnMge29iamVjdH0gb3V0IFJlZmVyZW5jZSwganVzdCBmb3IgY29udmVuaWVuY2UgLSBvdXQgPT09IHRoZSByZXR1cm4uCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKiAgQHRvZG8gVGhpcyBkb2Vzbid0IHRha2UgYWNjb3VudCBvZiBhcnJheXMgaW5zaWRlIHRoZSBkZWVwIGNvcGllZCBvYmplY3RzLgoJICovCglmdW5jdGlvbiBfZm5FeHRlbmQoIG91dCwgZXh0ZW5kZXIsIGJyZWFrUmVmcyApCgl7CgkJdmFyIHZhbDsKCQoJCWZvciAoIHZhciBwcm9wIGluIGV4dGVuZGVyICkgewoJCQlpZiAoIGV4dGVuZGVyLmhhc093blByb3BlcnR5KHByb3ApICkgewoJCQkJdmFsID0gZXh0ZW5kZXJbcHJvcF07CgkKCQkJCWlmICggJC5pc1BsYWluT2JqZWN0KCB2YWwgKSApIHsKCQkJCQlpZiAoICEgJC5pc1BsYWluT2JqZWN0KCBvdXRbcHJvcF0gKSApIHsKCQkJCQkJb3V0W3Byb3BdID0ge307CgkJCQkJfQoJCQkJCSQuZXh0ZW5kKCB0cnVlLCBvdXRbcHJvcF0sIHZhbCApOwoJCQkJfQoJCQkJZWxzZSBpZiAoIGJyZWFrUmVmcyAmJiBwcm9wICE9PSAnZGF0YScgJiYgcHJvcCAhPT0gJ2FhRGF0YScgJiYgJC5pc0FycmF5KHZhbCkgKSB7CgkJCQkJb3V0W3Byb3BdID0gdmFsLnNsaWNlKCk7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlvdXRbcHJvcF0gPSB2YWw7CgkJCQl9CgkJCX0KCQl9CgkKCQlyZXR1cm4gb3V0OwoJfQoJCgkKCS8qKgoJICogQmluZCBhbiBldmVudCBoYW5kZXJzIHRvIGFsbG93IGEgY2xpY2sgb3IgcmV0dXJuIGtleSB0byBhY3RpdmF0ZSB0aGUgY2FsbGJhY2suCgkgKiBUaGlzIGlzIGdvb2QgZm9yIGFjY2Vzc2liaWxpdHkgc2luY2UgYSByZXR1cm4gb24gdGhlIGtleWJvYXJkIHdpbGwgaGF2ZSB0aGUKCSAqIHNhbWUgZWZmZWN0IGFzIGEgY2xpY2ssIGlmIHRoZSBlbGVtZW50IGhhcyBmb2N1cy4KCSAqICBAcGFyYW0ge2VsZW1lbnR9IG4gRWxlbWVudCB0byBiaW5kIHRoZSBhY3Rpb24gdG8KCSAqICBAcGFyYW0ge29iamVjdH0gb0RhdGEgRGF0YSBvYmplY3QgdG8gcGFzcyB0byB0aGUgdHJpZ2dlcmVkIGZ1bmN0aW9uCgkgKiAgQHBhcmFtIHtmdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5CaW5kQWN0aW9uKCBuLCBvRGF0YSwgZm4gKQoJewoJCSQobikKCQkJLm9uKCAnY2xpY2suRFQnLCBvRGF0YSwgZnVuY3Rpb24gKGUpIHsKCQkJCQkkKG4pLmJsdXIoKTsgLy8gUmVtb3ZlIGZvY3VzIG91dGxpbmUgZm9yIG1vdXNlIHVzZXJzCgkJCQkJZm4oZSk7CgkJCQl9ICkKCQkJLm9uKCAna2V5cHJlc3MuRFQnLCBvRGF0YSwgZnVuY3Rpb24gKGUpewoJCQkJCWlmICggZS53aGljaCA9PT0gMTMgKSB7CgkJCQkJCWUucHJldmVudERlZmF1bHQoKTsKCQkJCQkJZm4oZSk7CgkJCQkJfQoJCQkJfSApCgkJCS5vbiggJ3NlbGVjdHN0YXJ0LkRUJywgZnVuY3Rpb24gKCkgewoJCQkJCS8qIFRha2UgdGhlIGJydXRhbCBhcHByb2FjaCB0byBjYW5jZWxsaW5nIHRleHQgc2VsZWN0aW9uICovCgkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJfSApOwoJfQoJCgkKCS8qKgoJICogUmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbi4gRWFzaWx5IGFsbG93cyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGFkZGVkIHRvCgkgKiBhbiBhcnJheSBzdG9yZSBvZiBjYWxsYmFjayBmdW5jdGlvbnMgdGhhdCBjYW4gdGhlbiBhbGwgYmUgY2FsbGVkIHRvZ2V0aGVyLgoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge3N0cmluZ30gc1N0b3JlIE5hbWUgb2YgdGhlIGFycmF5IHN0b3JhZ2UgZm9yIHRoZSBjYWxsYmFja3MgaW4gb1NldHRpbmdzCgkgKiAgQHBhcmFtIHtmdW5jdGlvbn0gZm4gRnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJhY2sKCSAqICBAcGFyYW0ge3N0cmluZ30gc05hbWUgSWRlbnRpZnlpbmcgbmFtZSBmb3IgdGhlIGNhbGxiYWNrIChpLmUuIGEgbGFiZWwpCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkNhbGxiYWNrUmVnKCBvU2V0dGluZ3MsIHNTdG9yZSwgZm4sIHNOYW1lICkKCXsKCQlpZiAoIGZuICkKCQl7CgkJCW9TZXR0aW5nc1tzU3RvcmVdLnB1c2goIHsKCQkJCSJmbiI6IGZuLAoJCQkJInNOYW1lIjogc05hbWUKCQkJfSApOwoJCX0KCX0KCQoJCgkvKioKCSAqIEZpcmUgY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCB0cmlnZ2VyIGV2ZW50cy4gTm90ZSB0aGF0IHRoZSBsb29wIG92ZXIgdGhlCgkgKiBjYWxsYmFjayBhcnJheSBzdG9yZSBpcyBkb25lIGJhY2t3YXJkcyEgRnVydGhlciBub3RlIHRoYXQgeW91IGRvIG5vdCB3YW50IHRvCgkgKiBmaXJlIG9mZiB0cmlnZ2VycyBpbiB0aW1lIHNlbnNpdGl2ZSBhcHBsaWNhdGlvbnMgKGZvciBleGFtcGxlIGNlbGwgY3JlYXRpb24pCgkgKiBhcyBpdHMgc2xvdy4KCSAqICBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge3N0cmluZ30gY2FsbGJhY2tBcnIgTmFtZSBvZiB0aGUgYXJyYXkgc3RvcmFnZSBmb3IgdGhlIGNhbGxiYWNrcyBpbgoJICogICAgICBvU2V0dGluZ3MKCSAqICBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lIE5hbWUgb2YgdGhlIGpRdWVyeSBjdXN0b20gZXZlbnQgdG8gdHJpZ2dlci4gSWYKCSAqICAgICAgbnVsbCBubyB0cmlnZ2VyIGlzIGZpcmVkCgkgKiAgQHBhcmFtIHthcnJheX0gYXJncyBBcnJheSBvZiBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gLwoJICogICAgICB0cmlnZ2VyCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkNhbGxiYWNrRmlyZSggc2V0dGluZ3MsIGNhbGxiYWNrQXJyLCBldmVudE5hbWUsIGFyZ3MgKQoJewoJCXZhciByZXQgPSBbXTsKCQoJCWlmICggY2FsbGJhY2tBcnIgKSB7CgkJCXJldCA9ICQubWFwKCBzZXR0aW5nc1tjYWxsYmFja0Fycl0uc2xpY2UoKS5yZXZlcnNlKCksIGZ1bmN0aW9uICh2YWwsIGkpIHsKCQkJCXJldHVybiB2YWwuZm4uYXBwbHkoIHNldHRpbmdzLm9JbnN0YW5jZSwgYXJncyApOwoJCQl9ICk7CgkJfQoJCgkJaWYgKCBldmVudE5hbWUgIT09IG51bGwgKSB7CgkJCXZhciBlID0gJC5FdmVudCggZXZlbnROYW1lKycuZHQnICk7CgkKCQkJJChzZXR0aW5ncy5uVGFibGUpLnRyaWdnZXIoIGUsIGFyZ3MgKTsKCQoJCQlyZXQucHVzaCggZS5yZXN1bHQgKTsKCQl9CgkKCQlyZXR1cm4gcmV0OwoJfQoJCgkKCWZ1bmN0aW9uIF9mbkxlbmd0aE92ZXJmbG93ICggc2V0dGluZ3MgKQoJewoJCXZhcgoJCQlzdGFydCA9IHNldHRpbmdzLl9pRGlzcGxheVN0YXJ0LAoJCQllbmQgPSBzZXR0aW5ncy5mbkRpc3BsYXlFbmQoKSwKCQkJbGVuID0gc2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoOwoJCgkJLyogSWYgd2UgaGF2ZSBzcGFjZSB0byBzaG93IGV4dHJhIHJvd3MgKGJhY2tpbmcgdXAgZnJvbSB0aGUgZW5kIHBvaW50IC0gdGhlbiBkbyBzbyAqLwoJCWlmICggc3RhcnQgPj0gZW5kICkKCQl7CgkJCXN0YXJ0ID0gZW5kIC0gbGVuOwoJCX0KCQoJCS8vIEtlZXAgdGhlIHN0YXJ0IHJlY29yZCBvbiB0aGUgY3VycmVudCBwYWdlCgkJc3RhcnQgLT0gKHN0YXJ0ICUgbGVuKTsKCQoJCWlmICggbGVuID09PSAtMSB8fCBzdGFydCA8IDAgKQoJCXsKCQkJc3RhcnQgPSAwOwoJCX0KCQoJCXNldHRpbmdzLl9pRGlzcGxheVN0YXJ0ID0gc3RhcnQ7Cgl9CgkKCQoJZnVuY3Rpb24gX2ZuUmVuZGVyZXIoIHNldHRpbmdzLCB0eXBlICkKCXsKCQl2YXIgcmVuZGVyZXIgPSBzZXR0aW5ncy5yZW5kZXJlcjsKCQl2YXIgaG9zdCA9IERhdGFUYWJsZS5leHQucmVuZGVyZXJbdHlwZV07CgkKCQlpZiAoICQuaXNQbGFpbk9iamVjdCggcmVuZGVyZXIgKSAmJiByZW5kZXJlclt0eXBlXSApIHsKCQkJLy8gU3BlY2lmaWMgcmVuZGVyZXIgZm9yIHRoaXMgdHlwZS4gSWYgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIHVzZQoJCQkvLyB0aGUgZGVmYXVsdC4KCQkJcmV0dXJuIGhvc3RbcmVuZGVyZXJbdHlwZV1dIHx8IGhvc3QuXzsKCQl9CgkJZWxzZSBpZiAoIHR5cGVvZiByZW5kZXJlciA9PT0gJ3N0cmluZycgKSB7CgkJCS8vIENvbW1vbiByZW5kZXJlciAtIGlmIHRoZXJlIGlzIG9uZSBhdmFpbGFibGUgZm9yIHRoaXMgdHlwZSB1c2UgaXQsCgkJCS8vIG90aGVyd2lzZSB1c2UgdGhlIGRlZmF1bHQKCQkJcmV0dXJuIGhvc3RbcmVuZGVyZXJdIHx8IGhvc3QuXzsKCQl9CgkKCQkvLyBVc2UgdGhlIGRlZmF1bHQKCQlyZXR1cm4gaG9zdC5fOwoJfQoJCgkKCS8qKgoJICogRGV0ZWN0IHRoZSBkYXRhIHNvdXJjZSBiZWluZyB1c2VkIGZvciB0aGUgdGFibGUuIFVzZWQgdG8gc2ltcGxpZnkgdGhlIGNvZGUKCSAqIGEgbGl0dGxlIChhamF4KSBhbmQgdG8gbWFrZSBpdCBjb21wcmVzcyBhIGxpdHRsZSBzbWFsbGVyLgoJICoKCSAqICBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcmV0dXJucyB7c3RyaW5nfSBEYXRhIHNvdXJjZQoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5EYXRhU291cmNlICggc2V0dGluZ3MgKQoJewoJCWlmICggc2V0dGluZ3Mub0ZlYXR1cmVzLmJTZXJ2ZXJTaWRlICkgewoJCQlyZXR1cm4gJ3NzcCc7CgkJfQoJCWVsc2UgaWYgKCBzZXR0aW5ncy5hamF4IHx8IHNldHRpbmdzLnNBamF4U291cmNlICkgewoJCQlyZXR1cm4gJ2FqYXgnOwoJCX0KCQlyZXR1cm4gJ2RvbSc7Cgl9CgkKCgkKCQoJLyoqCgkgKiBDb21wdXRlZCBzdHJ1Y3R1cmUgb2YgdGhlIERhdGFUYWJsZXMgQVBJLCBkZWZpbmVkIGJ5IHRoZSBvcHRpb25zIHBhc3NlZCB0bwoJICogYERhdGFUYWJsZS5BcGkucmVnaXN0ZXIoKWAgd2hlbiBidWlsZGluZyB0aGUgQVBJLgoJICoKCSAqIFRoZSBzdHJ1Y3R1cmUgaXMgYnVpbHQgaW4gb3JkZXIgdG8gc3BlZWQgY3JlYXRpb24gYW5kIGV4dGVuc2lvbiBvZiB0aGUgQXBpCgkgKiBvYmplY3RzIHNpbmNlIHRoZSBleHRlbnNpb25zIGFyZSBlZmZlY3RpdmVseSBwcmUtcGFyc2VkLgoJICoKCSAqIFRoZSBhcnJheSBpcyBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUsIHdoZXJlIHRoaXMKCSAqIGJhc2UgYXJyYXkgcmVwcmVzZW50cyB0aGUgQXBpIHByb3RvdHlwZSBiYXNlOgoJICoKCSAqICAgICBbCgkgKiAgICAgICB7CgkgKiAgICAgICAgIG5hbWU6ICAgICAgJ2RhdGEnICAgICAgICAgICAgICAgIC0tIHN0cmluZyAgIC0gUHJvcGVydHkgbmFtZQoJICogICAgICAgICB2YWw6ICAgICAgIGZ1bmN0aW9uICgpIHt9LCAgICAgICAtLSBmdW5jdGlvbiAtIEFwaSBtZXRob2QgKG9yIHVuZGVmaW5lZCBpZiBqdXN0IGFuIG9iamVjdAoJICogICAgICAgICBtZXRob2RFeHQ6IFsgLi4uIF0sICAgICAgICAgICAgICAtLSBhcnJheSAgICAtIEFycmF5IG9mIEFwaSBvYmplY3QgZGVmaW5pdGlvbnMgdG8gZXh0ZW5kIHRoZSBtZXRob2QgcmVzdWx0CgkgKiAgICAgICAgIHByb3BFeHQ6ICAgWyAuLi4gXSAgICAgICAgICAgICAgIC0tIGFycmF5ICAgIC0gQXJyYXkgb2YgQXBpIG9iamVjdCBkZWZpbml0aW9ucyB0byBleHRlbmQgdGhlIHByb3BlcnR5CgkgKiAgICAgICB9LAoJICogICAgICAgewoJICogICAgICAgICBuYW1lOiAgICAgJ3JvdycKCSAqICAgICAgICAgdmFsOiAgICAgICB7fSwKCSAqICAgICAgICAgbWV0aG9kRXh0OiBbIC4uLiBdLAoJICogICAgICAgICBwcm9wRXh0OiAgIFsKCSAqICAgICAgICAgICB7CgkgKiAgICAgICAgICAgICBuYW1lOiAgICAgICdkYXRhJwoJICogICAgICAgICAgICAgdmFsOiAgICAgICBmdW5jdGlvbiAoKSB7fSwKCSAqICAgICAgICAgICAgIG1ldGhvZEV4dDogWyAuLi4gXSwKCSAqICAgICAgICAgICAgIHByb3BFeHQ6ICAgWyAuLi4gXQoJICogICAgICAgICAgIH0sCgkgKiAgICAgICAgICAgLi4uCgkgKiAgICAgICAgIF0KCSAqICAgICAgIH0KCSAqICAgICBdCgkgKgoJICogQHR5cGUge0FycmF5fQoJICogQGlnbm9yZQoJICovCgl2YXIgX19hcGlTdHJ1Y3QgPSBbXTsKCQoJCgkvKioKCSAqIGBBcnJheS5wcm90b3R5cGVgIHJlZmVyZW5jZS4KCSAqCgkgKiBAdHlwZSBvYmplY3QKCSAqIEBpZ25vcmUKCSAqLwoJdmFyIF9fYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTsKCQoJCgkvKioKCSAqIEFic3RyYWN0aW9uIGZvciBgY29udGV4dGAgcGFyYW1ldGVyIG9mIHRoZSBgQXBpYCBjb25zdHJ1Y3RvciB0byBhbGxvdyBpdCB0bwoJICogdGFrZSBzZXZlcmFsIGRpZmZlcmVudCBmb3JtcyBmb3IgZWFzZSBvZiB1c2UuCgkgKgoJICogRWFjaCBvZiB0aGUgaW5wdXQgcGFyYW1ldGVyIHR5cGVzIHdpbGwgYmUgY29udmVydGVkIHRvIGEgRGF0YVRhYmxlcyBzZXR0aW5ncwoJICogb2JqZWN0IHdoZXJlIHBvc3NpYmxlLgoJICoKCSAqIEBwYXJhbSAge3N0cmluZ3xub2RlfGpRdWVyeXxvYmplY3R9IG1peGVkIERhdGFUYWJsZSBpZGVudGlmaWVyLiBDYW4gYmUgb25lCgkgKiAgIG9mOgoJICoKCSAqICAgKiBgc3RyaW5nYCAtIGpRdWVyeSBzZWxlY3Rvci4gQW55IERhdGFUYWJsZXMnIG1hdGNoaW5nIHRoZSBnaXZlbiBzZWxlY3RvcgoJICogICAgIHdpdGggYmUgZm91bmQgYW5kIHVzZWQuCgkgKiAgICogYG5vZGVgIC0gYFRBQkxFYCBub2RlIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gZm9ybWVkIGludG8gYSBEYXRhVGFibGUuCgkgKiAgICogYGpRdWVyeWAgLSBBIGpRdWVyeSBvYmplY3Qgb2YgYFRBQkxFYCBub2Rlcy4KCSAqICAgKiBgb2JqZWN0YCAtIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgICogYERhdGFUYWJsZXMuQXBpYCAtIEFQSSBpbnN0YW5jZQoJICogQHJldHVybiB7YXJyYXl8bnVsbH0gTWF0Y2hpbmcgRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3RzLiBgbnVsbGAgb3IKCSAqICAgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQgaWYgbm8gbWF0Y2hpbmcgRGF0YVRhYmxlIGlzIGZvdW5kLgoJICogQGlnbm9yZQoJICovCgl2YXIgX3RvU2V0dGluZ3MgPSBmdW5jdGlvbiAoIG1peGVkICkKCXsKCQl2YXIgaWR4LCBqcTsKCQl2YXIgc2V0dGluZ3MgPSBEYXRhVGFibGUuc2V0dGluZ3M7CgkJdmFyIHRhYmxlcyA9ICQubWFwKCBzZXR0aW5ncywgZnVuY3Rpb24gKGVsLCBpKSB7CgkJCXJldHVybiBlbC5uVGFibGU7CgkJfSApOwoJCgkJaWYgKCAhIG1peGVkICkgewoJCQlyZXR1cm4gW107CgkJfQoJCWVsc2UgaWYgKCBtaXhlZC5uVGFibGUgJiYgbWl4ZWQub0FwaSApIHsKCQkJLy8gRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkJcmV0dXJuIFsgbWl4ZWQgXTsKCQl9CgkJZWxzZSBpZiAoIG1peGVkLm5vZGVOYW1lICYmIG1peGVkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICd0YWJsZScgKSB7CgkJCS8vIFRhYmxlIG5vZGUKCQkJaWR4ID0gJC5pbkFycmF5KCBtaXhlZCwgdGFibGVzICk7CgkJCXJldHVybiBpZHggIT09IC0xID8gWyBzZXR0aW5nc1tpZHhdIF0gOiBudWxsOwoJCX0KCQllbHNlIGlmICggbWl4ZWQgJiYgdHlwZW9mIG1peGVkLnNldHRpbmdzID09PSAnZnVuY3Rpb24nICkgewoJCQlyZXR1cm4gbWl4ZWQuc2V0dGluZ3MoKS50b0FycmF5KCk7CgkJfQoJCWVsc2UgaWYgKCB0eXBlb2YgbWl4ZWQgPT09ICdzdHJpbmcnICkgewoJCQkvLyBqUXVlcnkgc2VsZWN0b3IKCQkJanEgPSAkKG1peGVkKTsKCQl9CgkJZWxzZSBpZiAoIG1peGVkIGluc3RhbmNlb2YgJCApIHsKCQkJLy8galF1ZXJ5IG9iamVjdCAoYWxzbyBEYXRhVGFibGVzIGluc3RhbmNlKQoJCQlqcSA9IG1peGVkOwoJCX0KCQoJCWlmICgganEgKSB7CgkJCXJldHVybiBqcS5tYXAoIGZ1bmN0aW9uKGkpIHsKCQkJCWlkeCA9ICQuaW5BcnJheSggdGhpcywgdGFibGVzICk7CgkJCQlyZXR1cm4gaWR4ICE9PSAtMSA/IHNldHRpbmdzW2lkeF0gOiBudWxsOwoJCQl9ICkudG9BcnJheSgpOwoJCX0KCX07CgkKCQoJLyoqCgkgKiBEYXRhVGFibGVzIEFQSSBjbGFzcyAtIHVzZWQgdG8gY29udHJvbCBhbmQgaW50ZXJmYWNlIHdpdGggIG9uZSBvciBtb3JlCgkgKiBEYXRhVGFibGVzIGVuaGFuY2VkIHRhYmxlcy4KCSAqCgkgKiBUaGUgQVBJIGNsYXNzIGlzIGhlYXZpbHkgYmFzZWQgb24galF1ZXJ5LCBwcmVzZW50aW5nIGEgY2hhaW5hYmxlIGludGVyZmFjZQoJICogdGhhdCB5b3UgY2FuIHVzZSB0byBpbnRlcmFjdCB3aXRoIHRhYmxlcy4gRWFjaCBpbnN0YW5jZSBvZiB0aGUgQVBJIGNsYXNzIGhhcwoJICogYSAiY29udGV4dCIgLSBpLmUuIHRoZSB0YWJsZXMgdGhhdCBpdCB3aWxsIG9wZXJhdGUgb24uIFRoaXMgY291bGQgYmUgYSBzaW5nbGUKCSAqIHRhYmxlLCBhbGwgdGFibGVzIG9uIGEgcGFnZSBvciBhIHN1Yi1zZXQgdGhlcmVvZi4KCSAqCgkgKiBBZGRpdGlvbmFsbHkgdGhlIEFQSSBpcyBkZXNpZ25lZCB0byBhbGxvdyB5b3UgdG8gZWFzaWx5IHdvcmsgd2l0aCB0aGUgZGF0YSBpbgoJICogdGhlIHRhYmxlcywgcmV0cmlldmluZyBhbmQgbWFuaXB1bGF0aW5nIGl0IGFzIHJlcXVpcmVkLiBUaGlzIGlzIGRvbmUgYnkKCSAqIHByZXNlbnRpbmcgdGhlIEFQSSBjbGFzcyBhcyBhbiBhcnJheSBsaWtlIGludGVyZmFjZS4gVGhlIGNvbnRlbnRzIG9mIHRoZQoJICogYXJyYXkgZGVwZW5kIHVwb24gdGhlIGFjdGlvbnMgcmVxdWVzdGVkIGJ5IGVhY2ggbWV0aG9kIChmb3IgZXhhbXBsZQoJICogYHJvd3MoKS5ub2RlcygpYCB3aWxsIHJldHVybiBhbiBhcnJheSBvZiBub2Rlcywgd2hpbGUgYHJvd3MoKS5kYXRhKClgIHdpbGwKCSAqIHJldHVybiBhbiBhcnJheSBvZiBvYmplY3RzIG9yIGFycmF5cyBkZXBlbmRpbmcgdXBvbiB5b3VyIHRhYmxlJ3MKCSAqIGNvbmZpZ3VyYXRpb24pLiBUaGUgQVBJIG9iamVjdCBoYXMgYSBudW1iZXIgb2YgYXJyYXkgbGlrZSBtZXRob2RzIChgcHVzaGAsCgkgKiBgcG9wYCwgYHJldmVyc2VgIGV0YykgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIGhlbHBlciBtZXRob2RzIChgZWFjaGAsIGBwbHVja2AsCgkgKiBgdW5pcXVlYCBldGMpIHRvIGFzc2lzdCB5b3VyIHdvcmtpbmcgd2l0aCB0aGUgZGF0YSBoZWxkIGluIGEgdGFibGUuCgkgKgoJICogTW9zdCBtZXRob2RzICh0aG9zZSB3aGljaCByZXR1cm4gYW4gQXBpIGluc3RhbmNlKSBhcmUgY2hhaW5hYmxlLCB3aGljaCBtZWFucwoJICogdGhlIHJldHVybiBmcm9tIGEgbWV0aG9kIGNhbGwgYWxzbyBoYXMgYWxsIG9mIHRoZSBtZXRob2RzIGF2YWlsYWJsZSB0aGF0IHRoZQoJICogdG9wIGxldmVsIG9iamVjdCBoYWQuIEZvciBleGFtcGxlLCB0aGVzZSB0d28gY2FsbHMgYXJlIGVxdWl2YWxlbnQ6CgkgKgoJICogICAgIC8vIE5vdCBjaGFpbmVkCgkgKiAgICAgYXBpLnJvdy5hZGQoIHsuLi59ICk7CgkgKiAgICAgYXBpLmRyYXcoKTsKCSAqCgkgKiAgICAgLy8gQ2hhaW5lZAoJICogICAgIGFwaS5yb3cuYWRkKCB7Li4ufSApLmRyYXcoKTsKCSAqCgkgKiBAY2xhc3MgRGF0YVRhYmxlLkFwaQoJICogQHBhcmFtIHthcnJheXxvYmplY3R8c3RyaW5nfGpRdWVyeX0gY29udGV4dCBEYXRhVGFibGUgaWRlbnRpZmllci4gVGhpcyBpcwoJICogICB1c2VkIHRvIGRlZmluZSB3aGljaCBEYXRhVGFibGVzIGVuaGFuY2VkIHRhYmxlcyB0aGlzIEFQSSB3aWxsIG9wZXJhdGUgb24uCgkgKiAgIENhbiBiZSBvbmUgb2Y6CgkgKgoJICogICAqIGBzdHJpbmdgIC0galF1ZXJ5IHNlbGVjdG9yLiBBbnkgRGF0YVRhYmxlcycgbWF0Y2hpbmcgdGhlIGdpdmVuIHNlbGVjdG9yCgkgKiAgICAgd2l0aCBiZSBmb3VuZCBhbmQgdXNlZC4KCSAqICAgKiBgbm9kZWAgLSBgVEFCTEVgIG5vZGUgd2hpY2ggaGFzIGFscmVhZHkgYmVlbiBmb3JtZWQgaW50byBhIERhdGFUYWJsZS4KCSAqICAgKiBgalF1ZXJ5YCAtIEEgalF1ZXJ5IG9iamVjdCBvZiBgVEFCTEVgIG5vZGVzLgoJICogICAqIGBvYmplY3RgIC0gRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqIEBwYXJhbSB7YXJyYXl9IFtkYXRhXSBEYXRhIHRvIGluaXRpYWxpc2UgdGhlIEFwaSBpbnN0YW5jZSB3aXRoLgoJICoKCSAqIEBleGFtcGxlCgkgKiAgIC8vIERpcmVjdCBpbml0aWFsaXNhdGlvbiBkdXJpbmcgRGF0YVRhYmxlcyBjb25zdHJ1Y3Rpb24KCSAqICAgdmFyIGFwaSA9ICQoJyNleGFtcGxlJykuRGF0YVRhYmxlKCk7CgkgKgoJICogQGV4YW1wbGUKCSAqICAgLy8gSW5pdGlhbGlzYXRpb24gdXNpbmcgYSBEYXRhVGFibGVzIGpRdWVyeSBvYmplY3QKCSAqICAgdmFyIGFwaSA9ICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCkuYXBpKCk7CgkgKgoJICogQGV4YW1wbGUKCSAqICAgLy8gSW5pdGlhbGlzYXRpb24gYXMgYSBjb25zdHJ1Y3RvcgoJICogICB2YXIgYXBpID0gbmV3ICQuZm4uRGF0YVRhYmxlLkFwaSggJ3RhYmxlLmRhdGFUYWJsZScgKTsKCSAqLwoJX0FwaSA9IGZ1bmN0aW9uICggY29udGV4dCwgZGF0YSApCgl7CgkJaWYgKCAhICh0aGlzIGluc3RhbmNlb2YgX0FwaSkgKSB7CgkJCXJldHVybiBuZXcgX0FwaSggY29udGV4dCwgZGF0YSApOwoJCX0KCQoJCXZhciBzZXR0aW5ncyA9IFtdOwoJCXZhciBjdHhTZXR0aW5ncyA9IGZ1bmN0aW9uICggbyApIHsKCQkJdmFyIGEgPSBfdG9TZXR0aW5ncyggbyApOwoJCQlpZiAoIGEgKSB7CgkJCQlzZXR0aW5ncy5wdXNoLmFwcGx5KCBzZXR0aW5ncywgYSApOwoJCQl9CgkJfTsKCQoJCWlmICggJC5pc0FycmF5KCBjb250ZXh0ICkgKSB7CgkJCWZvciAoIHZhciBpPTAsIGllbj1jb250ZXh0Lmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJY3R4U2V0dGluZ3MoIGNvbnRleHRbaV0gKTsKCQkJfQoJCX0KCQllbHNlIHsKCQkJY3R4U2V0dGluZ3MoIGNvbnRleHQgKTsKCQl9CgkKCQkvLyBSZW1vdmUgZHVwbGljYXRlcwoJCXRoaXMuY29udGV4dCA9IF91bmlxdWUoIHNldHRpbmdzICk7CgkKCQkvLyBJbml0aWFsIGRhdGEKCQlpZiAoIGRhdGEgKSB7CgkJCSQubWVyZ2UoIHRoaXMsIGRhdGEgKTsKCQl9CgkKCQkvLyBzZWxlY3RvcgoJCXRoaXMuc2VsZWN0b3IgPSB7CgkJCXJvd3M6IG51bGwsCgkJCWNvbHM6IG51bGwsCgkJCW9wdHM6IG51bGwKCQl9OwoJCgkJX0FwaS5leHRlbmQoIHRoaXMsIHRoaXMsIF9fYXBpU3RydWN0ICk7Cgl9OwoJCglEYXRhVGFibGUuQXBpID0gX0FwaTsKCQoJLy8gRG9uJ3QgZGVzdHJveSB0aGUgZXhpc3RpbmcgcHJvdG90eXBlLCBqdXN0IGV4dGVuZCBpdC4gUmVxdWlyZWQgZm9yIGpRdWVyeSAyJ3MKCS8vIGlzUGxhaW5PYmplY3QuCgkkLmV4dGVuZCggX0FwaS5wcm90b3R5cGUsIHsKCQlhbnk6IGZ1bmN0aW9uICgpCgkJewoJCQlyZXR1cm4gdGhpcy5jb3VudCgpICE9PSAwOwoJCX0sCgkKCQoJCWNvbmNhdDogIF9fYXJyYXlQcm90by5jb25jYXQsCgkKCQoJCWNvbnRleHQ6IFtdLCAvLyBhcnJheSBvZiB0YWJsZSBzZXR0aW5ncyBvYmplY3RzCgkKCQoJCWNvdW50OiBmdW5jdGlvbiAoKQoJCXsKCQkJcmV0dXJuIHRoaXMuZmxhdHRlbigpLmxlbmd0aDsKCQl9LAoJCgkKCQllYWNoOiBmdW5jdGlvbiAoIGZuICkKCQl7CgkJCWZvciAoIHZhciBpPTAsIGllbj10aGlzLmxlbmd0aCA7IGk8aWVuOyBpKysgKSB7CgkJCQlmbi5jYWxsKCB0aGlzLCB0aGlzW2ldLCBpLCB0aGlzICk7CgkJCX0KCQoJCQlyZXR1cm4gdGhpczsKCQl9LAoJCgkKCQllcTogZnVuY3Rpb24gKCBpZHggKQoJCXsKCQkJdmFyIGN0eCA9IHRoaXMuY29udGV4dDsKCQoJCQlyZXR1cm4gY3R4Lmxlbmd0aCA+IGlkeCA/CgkJCQluZXcgX0FwaSggY3R4W2lkeF0sIHRoaXNbaWR4XSApIDoKCQkJCW51bGw7CgkJfSwKCQoJCgkJZmlsdGVyOiBmdW5jdGlvbiAoIGZuICkKCQl7CgkJCXZhciBhID0gW107CgkKCQkJaWYgKCBfX2FycmF5UHJvdG8uZmlsdGVyICkgewoJCQkJYSA9IF9fYXJyYXlQcm90by5maWx0ZXIuY2FsbCggdGhpcywgZm4sIHRoaXMgKTsKCQkJfQoJCQllbHNlIHsKCQkJCS8vIENvbXBhdGliaWxpdHkgZm9yIGJyb3dzZXJzIHdpdGhvdXQgRU1DQS0yNTItNSAoSlMgMS42KQoJCQkJZm9yICggdmFyIGk9MCwgaWVuPXRoaXMubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQkJaWYgKCBmbi5jYWxsKCB0aGlzLCB0aGlzW2ldLCBpLCB0aGlzICkgKSB7CgkJCQkJCWEucHVzaCggdGhpc1tpXSApOwoJCQkJCX0KCQkJCX0KCQkJfQoJCgkJCXJldHVybiBuZXcgX0FwaSggdGhpcy5jb250ZXh0LCBhICk7CgkJfSwKCQoJCgkJZmxhdHRlbjogZnVuY3Rpb24gKCkKCQl7CgkJCXZhciBhID0gW107CgkJCXJldHVybiBuZXcgX0FwaSggdGhpcy5jb250ZXh0LCBhLmNvbmNhdC5hcHBseSggYSwgdGhpcy50b0FycmF5KCkgKSApOwoJCX0sCgkKCQoJCWpvaW46ICAgIF9fYXJyYXlQcm90by5qb2luLAoJCgkKCQlpbmRleE9mOiBfX2FycmF5UHJvdG8uaW5kZXhPZiB8fCBmdW5jdGlvbiAob2JqLCBzdGFydCkKCQl7CgkJCWZvciAoIHZhciBpPShzdGFydCB8fCAwKSwgaWVuPXRoaXMubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQlpZiAoIHRoaXNbaV0gPT09IG9iaiApIHsKCQkJCQlyZXR1cm4gaTsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gLTE7CgkJfSwKCQoJCWl0ZXJhdG9yOiBmdW5jdGlvbiAoIGZsYXR0ZW4sIHR5cGUsIGZuLCBhbHdheXNOZXcgKSB7CgkJCXZhcgoJCQkJYSA9IFtdLCByZXQsCgkJCQlpLCBpZW4sIGosIGplbiwKCQkJCWNvbnRleHQgPSB0aGlzLmNvbnRleHQsCgkJCQlyb3dzLCBpdGVtcywgaXRlbSwKCQkJCXNlbGVjdG9yID0gdGhpcy5zZWxlY3RvcjsKCQoJCQkvLyBBcmd1bWVudCBzaGlmdGluZwoJCQlpZiAoIHR5cGVvZiBmbGF0dGVuID09PSAnc3RyaW5nJyApIHsKCQkJCWFsd2F5c05ldyA9IGZuOwoJCQkJZm4gPSB0eXBlOwoJCQkJdHlwZSA9IGZsYXR0ZW47CgkJCQlmbGF0dGVuID0gZmFsc2U7CgkJCX0KCQoJCQlmb3IgKCBpPTAsIGllbj1jb250ZXh0Lmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJdmFyIGFwaUluc3QgPSBuZXcgX0FwaSggY29udGV4dFtpXSApOwoJCgkJCQlpZiAoIHR5cGUgPT09ICd0YWJsZScgKSB7CgkJCQkJcmV0ID0gZm4uY2FsbCggYXBpSW5zdCwgY29udGV4dFtpXSwgaSApOwoJCgkJCQkJaWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHsKCQkJCQkJYS5wdXNoKCByZXQgKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlIGlmICggdHlwZSA9PT0gJ2NvbHVtbnMnIHx8IHR5cGUgPT09ICdyb3dzJyApIHsKCQkJCQkvLyB0aGlzIGhhcyBzYW1lIGxlbmd0aCBhcyBjb250ZXh0IC0gb25lIGVudHJ5IGZvciBlYWNoIHRhYmxlCgkJCQkJcmV0ID0gZm4uY2FsbCggYXBpSW5zdCwgY29udGV4dFtpXSwgdGhpc1tpXSwgaSApOwoJCgkJCQkJaWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHsKCQkJCQkJYS5wdXNoKCByZXQgKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlIGlmICggdHlwZSA9PT0gJ2NvbHVtbicgfHwgdHlwZSA9PT0gJ2NvbHVtbi1yb3dzJyB8fCB0eXBlID09PSAncm93JyB8fCB0eXBlID09PSAnY2VsbCcgKSB7CgkJCQkJLy8gY29sdW1ucyBhbmQgcm93cyBzaGFyZSB0aGUgc2FtZSBzdHJ1Y3R1cmUuCgkJCQkJLy8gJ3RoaXMnIGlzIGFuIGFycmF5IG9mIGNvbHVtbiBpbmRleGVzIGZvciBlYWNoIGNvbnRleHQKCQkJCQlpdGVtcyA9IHRoaXNbaV07CgkKCQkJCQlpZiAoIHR5cGUgPT09ICdjb2x1bW4tcm93cycgKSB7CgkJCQkJCXJvd3MgPSBfc2VsZWN0b3Jfcm93X2luZGV4ZXMoIGNvbnRleHRbaV0sIHNlbGVjdG9yLm9wdHMgKTsKCQkJCQl9CgkKCQkJCQlmb3IgKCBqPTAsIGplbj1pdGVtcy5sZW5ndGggOyBqPGplbiA7IGorKyApIHsKCQkJCQkJaXRlbSA9IGl0ZW1zW2pdOwoJCgkJCQkJCWlmICggdHlwZSA9PT0gJ2NlbGwnICkgewoJCQkJCQkJcmV0ID0gZm4uY2FsbCggYXBpSW5zdCwgY29udGV4dFtpXSwgaXRlbS5yb3csIGl0ZW0uY29sdW1uLCBpLCBqICk7CgkJCQkJCX0KCQkJCQkJZWxzZSB7CgkJCQkJCQlyZXQgPSBmbi5jYWxsKCBhcGlJbnN0LCBjb250ZXh0W2ldLCBpdGVtLCBpLCBqLCByb3dzICk7CgkJCQkJCX0KCQoJCQkJCQlpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkgewoJCQkJCQkJYS5wdXNoKCByZXQgKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCgkJCWlmICggYS5sZW5ndGggfHwgYWx3YXlzTmV3ICkgewoJCQkJdmFyIGFwaSA9IG5ldyBfQXBpKCBjb250ZXh0LCBmbGF0dGVuID8gYS5jb25jYXQuYXBwbHkoIFtdLCBhICkgOiBhICk7CgkJCQl2YXIgYXBpU2VsZWN0b3IgPSBhcGkuc2VsZWN0b3I7CgkJCQlhcGlTZWxlY3Rvci5yb3dzID0gc2VsZWN0b3Iucm93czsKCQkJCWFwaVNlbGVjdG9yLmNvbHMgPSBzZWxlY3Rvci5jb2xzOwoJCQkJYXBpU2VsZWN0b3Iub3B0cyA9IHNlbGVjdG9yLm9wdHM7CgkJCQlyZXR1cm4gYXBpOwoJCQl9CgkJCXJldHVybiB0aGlzOwoJCX0sCgkKCQoJCWxhc3RJbmRleE9mOiBfX2FycmF5UHJvdG8ubGFzdEluZGV4T2YgfHwgZnVuY3Rpb24gKG9iaiwgc3RhcnQpCgkJewoJCQkvLyBCaXQgY2hlZWt5Li4uCgkJCXJldHVybiB0aGlzLmluZGV4T2YuYXBwbHkoIHRoaXMudG9BcnJheS5yZXZlcnNlKCksIGFyZ3VtZW50cyApOwoJCX0sCgkKCQoJCWxlbmd0aDogIDAsCgkKCQoJCW1hcDogZnVuY3Rpb24gKCBmbiApCgkJewoJCQl2YXIgYSA9IFtdOwoJCgkJCWlmICggX19hcnJheVByb3RvLm1hcCApIHsKCQkJCWEgPSBfX2FycmF5UHJvdG8ubWFwLmNhbGwoIHRoaXMsIGZuLCB0aGlzICk7CgkJCX0KCQkJZWxzZSB7CgkJCQkvLyBDb21wYXRpYmlsaXR5IGZvciBicm93c2VycyB3aXRob3V0IEVNQ0EtMjUyLTUgKEpTIDEuNikKCQkJCWZvciAoIHZhciBpPTAsIGllbj10aGlzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJCWEucHVzaCggZm4uY2FsbCggdGhpcywgdGhpc1tpXSwgaSApICk7CgkJCQl9CgkJCX0KCQoJCQlyZXR1cm4gbmV3IF9BcGkoIHRoaXMuY29udGV4dCwgYSApOwoJCX0sCgkKCQoJCXBsdWNrOiBmdW5jdGlvbiAoIHByb3AgKQoJCXsKCQkJcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbiAoIGVsICkgewoJCQkJcmV0dXJuIGVsWyBwcm9wIF07CgkJCX0gKTsKCQl9LAoJCgkJcG9wOiAgICAgX19hcnJheVByb3RvLnBvcCwKCQoJCgkJcHVzaDogICAgX19hcnJheVByb3RvLnB1c2gsCgkKCQoJCS8vIERvZXMgbm90IHJldHVybiBhbiBBUEkgaW5zdGFuY2UKCQlyZWR1Y2U6IF9fYXJyYXlQcm90by5yZWR1Y2UgfHwgZnVuY3Rpb24gKCBmbiwgaW5pdCApCgkJewoJCQlyZXR1cm4gX2ZuUmVkdWNlKCB0aGlzLCBmbiwgaW5pdCwgMCwgdGhpcy5sZW5ndGgsIDEgKTsKCQl9LAoJCgkKCQlyZWR1Y2VSaWdodDogX19hcnJheVByb3RvLnJlZHVjZVJpZ2h0IHx8IGZ1bmN0aW9uICggZm4sIGluaXQgKQoJCXsKCQkJcmV0dXJuIF9mblJlZHVjZSggdGhpcywgZm4sIGluaXQsIHRoaXMubGVuZ3RoLTEsIC0xLCAtMSApOwoJCX0sCgkKCQoJCXJldmVyc2U6IF9fYXJyYXlQcm90by5yZXZlcnNlLAoJCgkKCQkvLyBPYmplY3Qgd2l0aCByb3dzLCBjb2x1bW5zIGFuZCBvcHRzCgkJc2VsZWN0b3I6IG51bGwsCgkKCQoJCXNoaWZ0OiAgIF9fYXJyYXlQcm90by5zaGlmdCwKCQoJCgkJc2xpY2U6IGZ1bmN0aW9uICgpIHsKCQkJcmV0dXJuIG5ldyBfQXBpKCB0aGlzLmNvbnRleHQsIHRoaXMgKTsKCQl9LAoJCgkKCQlzb3J0OiAgICBfX2FycmF5UHJvdG8uc29ydCwgLy8gPyBuYW1lIC0gb3JkZXI/CgkKCQoJCXNwbGljZTogIF9fYXJyYXlQcm90by5zcGxpY2UsCgkKCQoJCXRvQXJyYXk6IGZ1bmN0aW9uICgpCgkJewoJCQlyZXR1cm4gX19hcnJheVByb3RvLnNsaWNlLmNhbGwoIHRoaXMgKTsKCQl9LAoJCgkKCQl0byQ6IGZ1bmN0aW9uICgpCgkJewoJCQlyZXR1cm4gJCggdGhpcyApOwoJCX0sCgkKCQoJCXRvSlF1ZXJ5OiBmdW5jdGlvbiAoKQoJCXsKCQkJcmV0dXJuICQoIHRoaXMgKTsKCQl9LAoJCgkKCQl1bmlxdWU6IGZ1bmN0aW9uICgpCgkJewoJCQlyZXR1cm4gbmV3IF9BcGkoIHRoaXMuY29udGV4dCwgX3VuaXF1ZSh0aGlzKSApOwoJCX0sCgkKCQoJCXVuc2hpZnQ6IF9fYXJyYXlQcm90by51bnNoaWZ0Cgl9ICk7CgkKCQoJX0FwaS5leHRlbmQgPSBmdW5jdGlvbiAoIHNjb3BlLCBvYmosIGV4dCApCgl7CgkJLy8gT25seSBleHRlbmQgQVBJIGluc3RhbmNlcyBhbmQgc3RhdGljIHByb3BlcnRpZXMgb2YgdGhlIEFQSQoJCWlmICggISBleHQubGVuZ3RoIHx8ICEgb2JqIHx8ICggISAob2JqIGluc3RhbmNlb2YgX0FwaSkgJiYgISBvYmouX19kdF93cmFwcGVyICkgKSB7CgkJCXJldHVybjsKCQl9CgkKCQl2YXIKCQkJaSwgaWVuLAoJCQlzdHJ1Y3QsCgkJCW1ldGhvZFNjb3BpbmcgPSBmdW5jdGlvbiAoIHNjb3BlLCBmbiwgc3RydWMgKSB7CgkJCQlyZXR1cm4gZnVuY3Rpb24gKCkgewoJCQkJCXZhciByZXQgPSBmbi5hcHBseSggc2NvcGUsIGFyZ3VtZW50cyApOwoJCgkJCQkJLy8gTWV0aG9kIGV4dGVuc2lvbgoJCQkJCV9BcGkuZXh0ZW5kKCByZXQsIHJldCwgc3RydWMubWV0aG9kRXh0ICk7CgkJCQkJcmV0dXJuIHJldDsKCQkJCX07CgkJCX07CgkKCQlmb3IgKCBpPTAsIGllbj1leHQubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCXN0cnVjdCA9IGV4dFtpXTsKCQoJCQkvLyBWYWx1ZQoJCQlvYmpbIHN0cnVjdC5uYW1lIF0gPSBzdHJ1Y3QudHlwZSA9PT0gJ2Z1bmN0aW9uJyA/CgkJCQltZXRob2RTY29waW5nKCBzY29wZSwgc3RydWN0LnZhbCwgc3RydWN0ICkgOgoJCQkJc3RydWN0LnR5cGUgPT09ICdvYmplY3QnID8KCQkJCQl7fSA6CgkJCQkJc3RydWN0LnZhbDsKCQoJCQlvYmpbIHN0cnVjdC5uYW1lIF0uX19kdF93cmFwcGVyID0gdHJ1ZTsKCQoJCQkvLyBQcm9wZXJ0eSBleHRlbnNpb24KCQkJX0FwaS5leHRlbmQoIHNjb3BlLCBvYmpbIHN0cnVjdC5uYW1lIF0sIHN0cnVjdC5wcm9wRXh0ICk7CgkJfQoJfTsKCQoJCgkvLyBAdG9kbyAtIElzIHRoZXJlIG5lZWQgZm9yIGFuIGF1Z21lbnQgZnVuY3Rpb24/CgkvLyBfQXBpLmF1Z21lbnQgPSBmdW5jdGlvbiAoIGluc3QsIG5hbWUgKQoJLy8gewoJLy8gCS8vIEZpbmQgc3JjIG9iamVjdCBpbiB0aGUgc3RydWN0dXJlIGZyb20gdGhlIG5hbWUKCS8vIAl2YXIgcGFydHMgPSBuYW1lLnNwbGl0KCcuJyk7CgkKCS8vIAlfQXBpLmV4dGVuZCggaW5zdCwgb2JqICk7CgkvLyB9OwoJCgkKCS8vICAgICBbCgkvLyAgICAgICB7CgkvLyAgICAgICAgIG5hbWU6ICAgICAgJ2RhdGEnICAgICAgICAgICAgICAgIC0tIHN0cmluZyAgIC0gUHJvcGVydHkgbmFtZQoJLy8gICAgICAgICB2YWw6ICAgICAgIGZ1bmN0aW9uICgpIHt9LCAgICAgICAtLSBmdW5jdGlvbiAtIEFwaSBtZXRob2QgKG9yIHVuZGVmaW5lZCBpZiBqdXN0IGFuIG9iamVjdAoJLy8gICAgICAgICBtZXRob2RFeHQ6IFsgLi4uIF0sICAgICAgICAgICAgICAtLSBhcnJheSAgICAtIEFycmF5IG9mIEFwaSBvYmplY3QgZGVmaW5pdGlvbnMgdG8gZXh0ZW5kIHRoZSBtZXRob2QgcmVzdWx0CgkvLyAgICAgICAgIHByb3BFeHQ6ICAgWyAuLi4gXSAgICAgICAgICAgICAgIC0tIGFycmF5ICAgIC0gQXJyYXkgb2YgQXBpIG9iamVjdCBkZWZpbml0aW9ucyB0byBleHRlbmQgdGhlIHByb3BlcnR5CgkvLyAgICAgICB9LAoJLy8gICAgICAgewoJLy8gICAgICAgICBuYW1lOiAgICAgJ3JvdycKCS8vICAgICAgICAgdmFsOiAgICAgICB7fSwKCS8vICAgICAgICAgbWV0aG9kRXh0OiBbIC4uLiBdLAoJLy8gICAgICAgICBwcm9wRXh0OiAgIFsKCS8vICAgICAgICAgICB7CgkvLyAgICAgICAgICAgICBuYW1lOiAgICAgICdkYXRhJwoJLy8gICAgICAgICAgICAgdmFsOiAgICAgICBmdW5jdGlvbiAoKSB7fSwKCS8vICAgICAgICAgICAgIG1ldGhvZEV4dDogWyAuLi4gXSwKCS8vICAgICAgICAgICAgIHByb3BFeHQ6ICAgWyAuLi4gXQoJLy8gICAgICAgICAgIH0sCgkvLyAgICAgICAgICAgLi4uCgkvLyAgICAgICAgIF0KCS8vICAgICAgIH0KCS8vICAgICBdCgkKCV9BcGkucmVnaXN0ZXIgPSBfYXBpX3JlZ2lzdGVyID0gZnVuY3Rpb24gKCBuYW1lLCB2YWwgKQoJewoJCWlmICggJC5pc0FycmF5KCBuYW1lICkgKSB7CgkJCWZvciAoIHZhciBqPTAsIGplbj1uYW1lLmxlbmd0aCA7IGo8amVuIDsgaisrICkgewoJCQkJX0FwaS5yZWdpc3RlciggbmFtZVtqXSwgdmFsICk7CgkJCX0KCQkJcmV0dXJuOwoJCX0KCQoJCXZhcgoJCQlpLCBpZW4sCgkJCWhlaXIgPSBuYW1lLnNwbGl0KCcuJyksCgkJCXN0cnVjdCA9IF9fYXBpU3RydWN0LAoJCQlrZXksIG1ldGhvZDsKCQoJCXZhciBmaW5kID0gZnVuY3Rpb24gKCBzcmMsIG5hbWUgKSB7CgkJCWZvciAoIHZhciBpPTAsIGllbj1zcmMubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQlpZiAoIHNyY1tpXS5uYW1lID09PSBuYW1lICkgewoJCQkJCXJldHVybiBzcmNbaV07CgkJCQl9CgkJCX0KCQkJcmV0dXJuIG51bGw7CgkJfTsKCQoJCWZvciAoIGk9MCwgaWVuPWhlaXIubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCW1ldGhvZCA9IGhlaXJbaV0uaW5kZXhPZignKCknKSAhPT0gLTE7CgkJCWtleSA9IG1ldGhvZCA/CgkJCQloZWlyW2ldLnJlcGxhY2UoJygpJywgJycpIDoKCQkJCWhlaXJbaV07CgkKCQkJdmFyIHNyYyA9IGZpbmQoIHN0cnVjdCwga2V5ICk7CgkJCWlmICggISBzcmMgKSB7CgkJCQlzcmMgPSB7CgkJCQkJbmFtZTogICAgICBrZXksCgkJCQkJdmFsOiAgICAgICB7fSwKCQkJCQltZXRob2RFeHQ6IFtdLAoJCQkJCXByb3BFeHQ6ICAgW10sCgkJCQkJdHlwZTogICAgICAnb2JqZWN0JwoJCQkJfTsKCQkJCXN0cnVjdC5wdXNoKCBzcmMgKTsKCQkJfQoJCgkJCWlmICggaSA9PT0gaWVuLTEgKSB7CgkJCQlzcmMudmFsID0gdmFsOwoJCQkJc3JjLnR5cGUgPSB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nID8KCQkJCQknZnVuY3Rpb24nIDoKCQkJCQkkLmlzUGxhaW5PYmplY3QoIHZhbCApID8KCQkJCQkJJ29iamVjdCcgOgoJCQkJCQknb3RoZXInOwoJCQl9CgkJCWVsc2UgewoJCQkJc3RydWN0ID0gbWV0aG9kID8KCQkJCQlzcmMubWV0aG9kRXh0IDoKCQkJCQlzcmMucHJvcEV4dDsKCQkJfQoJCX0KCX07CgkKCV9BcGkucmVnaXN0ZXJQbHVyYWwgPSBfYXBpX3JlZ2lzdGVyUGx1cmFsID0gZnVuY3Rpb24gKCBwbHVyYWxOYW1lLCBzaW5ndWxhck5hbWUsIHZhbCApIHsKCQlfQXBpLnJlZ2lzdGVyKCBwbHVyYWxOYW1lLCB2YWwgKTsKCQoJCV9BcGkucmVnaXN0ZXIoIHNpbmd1bGFyTmFtZSwgZnVuY3Rpb24gKCkgewoJCQl2YXIgcmV0ID0gdmFsLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKCQoJCQlpZiAoIHJldCA9PT0gdGhpcyApIHsKCQkJCS8vIFJldHVybmVkIGl0ZW0gaXMgdGhlIEFQSSBpbnN0YW5jZSB0aGF0IHdhcyBwYXNzZWQgaW4sIHJldHVybiBpdAoJCQkJcmV0dXJuIHRoaXM7CgkJCX0KCQkJZWxzZSBpZiAoIHJldCBpbnN0YW5jZW9mIF9BcGkgKSB7CgkJCQkvLyBOZXcgQVBJIGluc3RhbmNlIHJldHVybmVkLCB3YW50IHRoZSB2YWx1ZSBmcm9tIHRoZSBmaXJzdCBpdGVtCgkJCQkvLyBpbiB0aGUgcmV0dXJuZWQgYXJyYXkgZm9yIHRoZSBzaW5ndWxhciByZXN1bHQuCgkJCQlyZXR1cm4gcmV0Lmxlbmd0aCA/CgkJCQkJJC5pc0FycmF5KCByZXRbMF0gKSA/CgkJCQkJCW5ldyBfQXBpKCByZXQuY29udGV4dCwgcmV0WzBdICkgOiAvLyBBcnJheSByZXN1bHRzIGFyZSAnZW5oYW5jZWQnCgkJCQkJCXJldFswXSA6CgkJCQkJdW5kZWZpbmVkOwoJCQl9CgkKCQkJLy8gTm9uLUFQSSByZXR1cm4gLSBqdXN0IGZpcmUgaXQgYmFjawoJCQlyZXR1cm4gcmV0OwoJCX0gKTsKCX07CgkKCQoJLyoqCgkgKiBTZWxlY3RvciBmb3IgSFRNTCB0YWJsZXMuIEFwcGx5IHRoZSBnaXZlbiBzZWxlY3RvciB0byB0aGUgZ2l2ZSBhcnJheSBvZgoJICogRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3RzLgoJICoKCSAqIEBwYXJhbSB7c3RyaW5nfGludGVnZXJ9IFtzZWxlY3Rvcl0galF1ZXJ5IHNlbGVjdG9yIHN0cmluZyBvciBpbnRlZ2VyCgkgKiBAcGFyYW0gIHthcnJheX0gQXJyYXkgb2YgRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3RzIHRvIGJlIGZpbHRlcmVkCgkgKiBAcmV0dXJuIHthcnJheX0KCSAqIEBpZ25vcmUKCSAqLwoJdmFyIF9fdGFibGVfc2VsZWN0b3IgPSBmdW5jdGlvbiAoIHNlbGVjdG9yLCBhICkKCXsKCQkvLyBJbnRlZ2VyIGlzIHVzZWQgdG8gcGljayBvdXQgYSB0YWJsZSBieSBpbmRleAoJCWlmICggdHlwZW9mIHNlbGVjdG9yID09PSAnbnVtYmVyJyApIHsKCQkJcmV0dXJuIFsgYVsgc2VsZWN0b3IgXSBdOwoJCX0KCQoJCS8vIFBlcmZvcm0gYSBqUXVlcnkgc2VsZWN0b3Igb24gdGhlIHRhYmxlIG5vZGVzCgkJdmFyIG5vZGVzID0gJC5tYXAoIGEsIGZ1bmN0aW9uIChlbCwgaSkgewoJCQlyZXR1cm4gZWwublRhYmxlOwoJCX0gKTsKCQoJCXJldHVybiAkKG5vZGVzKQoJCQkuZmlsdGVyKCBzZWxlY3RvciApCgkJCS5tYXAoIGZ1bmN0aW9uIChpKSB7CgkJCQkvLyBOZWVkIHRvIHRyYW5zbGF0ZSBiYWNrIGZyb20gdGhlIHRhYmxlIG5vZGUgdG8gdGhlIHNldHRpbmdzCgkJCQl2YXIgaWR4ID0gJC5pbkFycmF5KCB0aGlzLCBub2RlcyApOwoJCQkJcmV0dXJuIGFbIGlkeCBdOwoJCQl9ICkKCQkJLnRvQXJyYXkoKTsKCX07CgkKCQoJCgkvKioKCSAqIENvbnRleHQgc2VsZWN0b3IgZm9yIHRoZSBBUEkncyBjb250ZXh0IChpLmUuIHRoZSB0YWJsZXMgdGhlIEFQSSBpbnN0YW5jZQoJICogcmVmZXJzIHRvLgoJICoKCSAqIEBuYW1lICAgIERhdGFUYWJsZS5BcGkjdGFibGVzCgkgKiBAcGFyYW0ge3N0cmluZ3xpbnRlZ2VyfSBbc2VsZWN0b3JdIFNlbGVjdG9yIHRvIHBpY2sgd2hpY2ggdGFibGVzIHRoZSBpdGVyYXRvcgoJICogICBzaG91bGQgb3BlcmF0ZSBvbi4gSWYgbm90IGdpdmVuLCBhbGwgdGFibGVzIGluIHRoZSBjdXJyZW50IGNvbnRleHQgYXJlCgkgKiAgIHVzZWQuIFRoaXMgY2FuIGJlIGdpdmVuIGFzIGEgalF1ZXJ5IHNlbGVjdG9yIChmb3IgZXhhbXBsZSBgJzpndCgwKSdgKSB0bwoJICogICBzZWxlY3QgbXVsdGlwbGUgdGFibGVzIG9yIGFzIGFuIGludGVnZXIgdG8gc2VsZWN0IGEgc2luZ2xlIHRhYmxlLgoJICogQHJldHVybnMge0RhdGFUYWJsZS5BcGl9IFJldHVybnMgYSBuZXcgQVBJIGluc3RhbmNlIGlmIGEgc2VsZWN0b3IgaXMgZ2l2ZW4uCgkgKi8KCV9hcGlfcmVnaXN0ZXIoICd0YWJsZXMoKScsIGZ1bmN0aW9uICggc2VsZWN0b3IgKSB7CgkJLy8gQSBuZXcgaW5zdGFuY2UgaXMgY3JlYXRlZCBpZiB0aGVyZSB3YXMgYSBzZWxlY3RvciBzcGVjaWZpZWQKCQlyZXR1cm4gc2VsZWN0b3IgPwoJCQluZXcgX0FwaSggX190YWJsZV9zZWxlY3Rvciggc2VsZWN0b3IsIHRoaXMuY29udGV4dCApICkgOgoJCQl0aGlzOwoJfSApOwoJCgkKCV9hcGlfcmVnaXN0ZXIoICd0YWJsZSgpJywgZnVuY3Rpb24gKCBzZWxlY3RvciApIHsKCQl2YXIgdGFibGVzID0gdGhpcy50YWJsZXMoIHNlbGVjdG9yICk7CgkJdmFyIGN0eCA9IHRhYmxlcy5jb250ZXh0OwoJCgkJLy8gVHJ1bmNhdGUgdG8gdGhlIGZpcnN0IG1hdGNoZWQgdGFibGUKCQlyZXR1cm4gY3R4Lmxlbmd0aCA/CgkJCW5ldyBfQXBpKCBjdHhbMF0gKSA6CgkJCXRhYmxlczsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyUGx1cmFsKCAndGFibGVzKCkubm9kZXMoKScsICd0YWJsZSgpLm5vZGUoKScgLCBmdW5jdGlvbiAoKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggY3R4ICkgewoJCQlyZXR1cm4gY3R4Lm5UYWJsZTsKCQl9LCAxICk7Cgl9ICk7CgkKCQoJX2FwaV9yZWdpc3RlclBsdXJhbCggJ3RhYmxlcygpLmJvZHkoKScsICd0YWJsZSgpLmJvZHkoKScgLCBmdW5jdGlvbiAoKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggY3R4ICkgewoJCQlyZXR1cm4gY3R4Lm5UQm9keTsKCQl9LCAxICk7Cgl9ICk7CgkKCQoJX2FwaV9yZWdpc3RlclBsdXJhbCggJ3RhYmxlcygpLmhlYWRlcigpJywgJ3RhYmxlKCkuaGVhZGVyKCknICwgZnVuY3Rpb24gKCkgewoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIGN0eCApIHsKCQkJcmV0dXJuIGN0eC5uVEhlYWQ7CgkJfSwgMSApOwoJfSApOwoJCgkKCV9hcGlfcmVnaXN0ZXJQbHVyYWwoICd0YWJsZXMoKS5mb290ZXIoKScsICd0YWJsZSgpLmZvb3RlcigpJyAsIGZ1bmN0aW9uICgpIHsKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBjdHggKSB7CgkJCXJldHVybiBjdHgublRGb290OwoJCX0sIDEgKTsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyUGx1cmFsKCAndGFibGVzKCkuY29udGFpbmVycygpJywgJ3RhYmxlKCkuY29udGFpbmVyKCknICwgZnVuY3Rpb24gKCkgewoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIGN0eCApIHsKCQkJcmV0dXJuIGN0eC5uVGFibGVXcmFwcGVyOwoJCX0sIDEgKTsKCX0gKTsKCQoJCgkKCS8qKgoJICogUmVkcmF3IHRoZSB0YWJsZXMgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KCSAqLwoJX2FwaV9yZWdpc3RlciggJ2RyYXcoKScsIGZ1bmN0aW9uICggcGFnaW5nICkgewoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIHNldHRpbmdzICkgewoJCQlpZiAoIHBhZ2luZyA9PT0gJ3BhZ2UnICkgewoJCQkJX2ZuRHJhdyggc2V0dGluZ3MgKTsKCQkJfQoJCQllbHNlIHsKCQkJCWlmICggdHlwZW9mIHBhZ2luZyA9PT0gJ3N0cmluZycgKSB7CgkJCQkJcGFnaW5nID0gcGFnaW5nID09PSAnZnVsbC1ob2xkJyA/CgkJCQkJCWZhbHNlIDoKCQkJCQkJdHJ1ZTsKCQkJCX0KCQoJCQkJX2ZuUmVEcmF3KCBzZXR0aW5ncywgcGFnaW5nPT09ZmFsc2UgKTsKCQkJfQoJCX0gKTsKCX0gKTsKCQoJCgkKCS8qKgoJICogR2V0IHRoZSBjdXJyZW50IHBhZ2UgaW5kZXguCgkgKgoJICogQHJldHVybiB7aW50ZWdlcn0gQ3VycmVudCBwYWdlIGluZGV4ICh6ZXJvIGJhc2VkKQoJICovLyoqCgkgKiBTZXQgdGhlIGN1cnJlbnQgcGFnZS4KCSAqCgkgKiBOb3RlIHRoYXQgaWYgeW91IGF0dGVtcHQgdG8gc2hvdyBhIHBhZ2Ugd2hpY2ggZG9lcyBub3QgZXhpc3QsIERhdGFUYWJsZXMgd2lsbAoJICogbm90IHRocm93IGFuIGVycm9yLCBidXQgcmF0aGVyIHJlc2V0IHRoZSBwYWdpbmcuCgkgKgoJICogQHBhcmFtIHtpbnRlZ2VyfHN0cmluZ30gYWN0aW9uIFRoZSBwYWdpbmcgYWN0aW9uIHRvIHRha2UuIFRoaXMgY2FuIGJlIG9uZSBvZjoKCSAqICAqIGBpbnRlZ2VyYCAtIFRoZSBwYWdlIGluZGV4IHRvIGp1bXAgdG8KCSAqICAqIGBzdHJpbmdgIC0gQW4gYWN0aW9uIHRvIHRha2U6CgkgKiAgICAqIGBmaXJzdGAgLSBKdW1wIHRvIGZpcnN0IHBhZ2UuCgkgKiAgICAqIGBuZXh0YCAtIEp1bXAgdG8gdGhlIG5leHQgcGFnZQoJICogICAgKiBgcHJldmlvdXNgIC0gSnVtcCB0byBwcmV2aW91cyBwYWdlCgkgKiAgICAqIGBsYXN0YCAtIEp1bXAgdG8gdGhlIGxhc3QgcGFnZS4KCSAqIEByZXR1cm5zIHtEYXRhVGFibGVzLkFwaX0gdGhpcwoJICovCglfYXBpX3JlZ2lzdGVyKCAncGFnZSgpJywgZnVuY3Rpb24gKCBhY3Rpb24gKSB7CgkJaWYgKCBhY3Rpb24gPT09IHVuZGVmaW5lZCApIHsKCQkJcmV0dXJuIHRoaXMucGFnZS5pbmZvKCkucGFnZTsgLy8gbm90IGFuIGV4cGVuc2l2ZSBjYWxsCgkJfQoJCgkJLy8gZWxzZSwgaGF2ZSBhbiBhY3Rpb24gdG8gdGFrZSBvbiBhbGwgdGFibGVzCgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggc2V0dGluZ3MgKSB7CgkJCV9mblBhZ2VDaGFuZ2UoIHNldHRpbmdzLCBhY3Rpb24gKTsKCQl9ICk7Cgl9ICk7CgkKCQoJLyoqCgkgKiBQYWdpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBmaXJzdCB0YWJsZSBpbiB0aGUgY3VycmVudCBjb250ZXh0LgoJICoKCSAqIElmIHlvdSByZXF1aXJlIHBhZ2luZyBpbmZvcm1hdGlvbiBmb3IgYW5vdGhlciB0YWJsZSwgdXNlIHRoZSBgdGFibGUoKWAgbWV0aG9kCgkgKiB3aXRoIGEgc3VpdGFibGUgc2VsZWN0b3IuCgkgKgoJICogQHJldHVybiB7b2JqZWN0fSBPYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2V0OgoJICogICogYHBhZ2VgIC0gQ3VycmVudCBwYWdlIGluZGV4ICh6ZXJvIGJhc2VkIC0gaS5lLiB0aGUgZmlyc3QgcGFnZSBpcyBgMGApCgkgKiAgKiBgcGFnZXNgIC0gVG90YWwgbnVtYmVyIG9mIHBhZ2VzCgkgKiAgKiBgc3RhcnRgIC0gRGlzcGxheSBpbmRleCBmb3IgdGhlIGZpcnN0IHJlY29yZCBzaG93biBvbiB0aGUgY3VycmVudCBwYWdlCgkgKiAgKiBgZW5kYCAtIERpc3BsYXkgaW5kZXggZm9yIHRoZSBsYXN0IHJlY29yZCBzaG93biBvbiB0aGUgY3VycmVudCBwYWdlCgkgKiAgKiBgbGVuZ3RoYCAtIERpc3BsYXkgbGVuZ3RoIChudW1iZXIgb2YgcmVjb3JkcykuIE5vdGUgdGhhdCBnZW5lcmFsbHkgYHN0YXJ0CgkgKiAgICArIGxlbmd0aCA9IGVuZGAsIGJ1dCB0aGlzIGlzIG5vdCBhbHdheXMgdHJ1ZSwgZm9yIGV4YW1wbGUgaWYgdGhlcmUgYXJlCgkgKiAgICBvbmx5IDIgcmVjb3JkcyB0byBzaG93IG9uIHRoZSBmaW5hbCBwYWdlLCB3aXRoIGEgbGVuZ3RoIG9mIDEwLgoJICogICogYHJlY29yZHNUb3RhbGAgLSBGdWxsIGRhdGEgc2V0IGxlbmd0aAoJICogICogYHJlY29yZHNEaXNwbGF5YCAtIERhdGEgc2V0IGxlbmd0aCBvbmNlIHRoZSBjdXJyZW50IGZpbHRlcmluZyBjcml0ZXJpb24KCSAqICAgIGFyZSBhcHBsaWVkLgoJICovCglfYXBpX3JlZ2lzdGVyKCAncGFnZS5pbmZvKCknLCBmdW5jdGlvbiAoIGFjdGlvbiApIHsKCQlpZiAoIHRoaXMuY29udGV4dC5sZW5ndGggPT09IDAgKSB7CgkJCXJldHVybiB1bmRlZmluZWQ7CgkJfQoJCgkJdmFyCgkJCXNldHRpbmdzICAgPSB0aGlzLmNvbnRleHRbMF0sCgkJCXN0YXJ0ICAgICAgPSBzZXR0aW5ncy5faURpc3BsYXlTdGFydCwKCQkJbGVuICAgICAgICA9IHNldHRpbmdzLm9GZWF0dXJlcy5iUGFnaW5hdGUgPyBzZXR0aW5ncy5faURpc3BsYXlMZW5ndGggOiAtMSwKCQkJdmlzUmVjb3JkcyA9IHNldHRpbmdzLmZuUmVjb3Jkc0Rpc3BsYXkoKSwKCQkJYWxsICAgICAgICA9IGxlbiA9PT0gLTE7CgkKCQlyZXR1cm4gewoJCQkicGFnZSI6ICAgICAgICAgICBhbGwgPyAwIDogTWF0aC5mbG9vciggc3RhcnQgLyBsZW4gKSwKCQkJInBhZ2VzIjogICAgICAgICAgYWxsID8gMSA6IE1hdGguY2VpbCggdmlzUmVjb3JkcyAvIGxlbiApLAoJCQkic3RhcnQiOiAgICAgICAgICBzdGFydCwKCQkJImVuZCI6ICAgICAgICAgICAgc2V0dGluZ3MuZm5EaXNwbGF5RW5kKCksCgkJCSJsZW5ndGgiOiAgICAgICAgIGxlbiwKCQkJInJlY29yZHNUb3RhbCI6ICAgc2V0dGluZ3MuZm5SZWNvcmRzVG90YWwoKSwKCQkJInJlY29yZHNEaXNwbGF5IjogdmlzUmVjb3JkcywKCQkJInNlcnZlclNpZGUiOiAgICAgX2ZuRGF0YVNvdXJjZSggc2V0dGluZ3MgKSA9PT0gJ3NzcCcKCQl9OwoJfSApOwoJCgkKCS8qKgoJICogR2V0IHRoZSBjdXJyZW50IHBhZ2UgbGVuZ3RoLgoJICoKCSAqIEByZXR1cm4ge2ludGVnZXJ9IEN1cnJlbnQgcGFnZSBsZW5ndGguIE5vdGUgYC0xYCBpbmRpY2F0ZXMgdGhhdCBhbGwgcmVjb3JkcwoJICogICBhcmUgdG8gYmUgc2hvd24uCgkgKi8vKioKCSAqIFNldCB0aGUgY3VycmVudCBwYWdlIGxlbmd0aC4KCSAqCgkgKiBAcGFyYW0ge2ludGVnZXJ9IFBhZ2UgbGVuZ3RoIHRvIHNldC4gVXNlIGAtMWAgdG8gc2hvdyBhbGwgcmVjb3Jkcy4KCSAqIEByZXR1cm5zIHtEYXRhVGFibGVzLkFwaX0gdGhpcwoJICovCglfYXBpX3JlZ2lzdGVyKCAncGFnZS5sZW4oKScsIGZ1bmN0aW9uICggbGVuICkgewoJCS8vIE5vdGUgdGhhdCB3ZSBjYW4ndCBjYWxsIHRoaXMgZnVuY3Rpb24gJ2xlbmd0aCgpJyBiZWNhdXNlIGBsZW5ndGhgCgkJLy8gaXMgYSBKYXZhc2NyaXB0IHByb3BlcnR5IG9mIGZ1bmN0aW9ucyB3aGljaCBkZWZpbmVzIGhvdyBtYW55IGFyZ3VtZW50cwoJCS8vIHRoZSBmdW5jdGlvbiBleHBlY3RzLgoJCWlmICggbGVuID09PSB1bmRlZmluZWQgKSB7CgkJCXJldHVybiB0aGlzLmNvbnRleHQubGVuZ3RoICE9PSAwID8KCQkJCXRoaXMuY29udGV4dFswXS5faURpc3BsYXlMZW5ndGggOgoJCQkJdW5kZWZpbmVkOwoJCX0KCQoJCS8vIGVsc2UsIHNldCB0aGUgcGFnZSBsZW5ndGgKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBzZXR0aW5ncyApIHsKCQkJX2ZuTGVuZ3RoQ2hhbmdlKCBzZXR0aW5ncywgbGVuICk7CgkJfSApOwoJfSApOwoJCgkKCQoJdmFyIF9fcmVsb2FkID0gZnVuY3Rpb24gKCBzZXR0aW5ncywgaG9sZFBvc2l0aW9uLCBjYWxsYmFjayApIHsKCQkvLyBVc2UgdGhlIGRyYXcgZXZlbnQgdG8gdHJpZ2dlciBhIGNhbGxiYWNrCgkJaWYgKCBjYWxsYmFjayApIHsKCQkJdmFyIGFwaSA9IG5ldyBfQXBpKCBzZXR0aW5ncyApOwoJCgkJCWFwaS5vbmUoICdkcmF3JywgZnVuY3Rpb24gKCkgewoJCQkJY2FsbGJhY2soIGFwaS5hamF4Lmpzb24oKSApOwoJCQl9ICk7CgkJfQoJCgkJaWYgKCBfZm5EYXRhU291cmNlKCBzZXR0aW5ncyApID09ICdzc3AnICkgewoJCQlfZm5SZURyYXcoIHNldHRpbmdzLCBob2xkUG9zaXRpb24gKTsKCQl9CgkJZWxzZSB7CgkJCV9mblByb2Nlc3NpbmdEaXNwbGF5KCBzZXR0aW5ncywgdHJ1ZSApOwoJCgkJCS8vIENhbmNlbCBhbiBleGlzdGluZyByZXF1ZXN0CgkJCXZhciB4aHIgPSBzZXR0aW5ncy5qcVhIUjsKCQkJaWYgKCB4aHIgJiYgeGhyLnJlYWR5U3RhdGUgIT09IDQgKSB7CgkJCQl4aHIuYWJvcnQoKTsKCQkJfQoJCgkJCS8vIFRyaWdnZXIgeGhyCgkJCV9mbkJ1aWxkQWpheCggc2V0dGluZ3MsIFtdLCBmdW5jdGlvbigganNvbiApIHsKCQkJCV9mbkNsZWFyVGFibGUoIHNldHRpbmdzICk7CgkKCQkJCXZhciBkYXRhID0gX2ZuQWpheERhdGFTcmMoIHNldHRpbmdzLCBqc29uICk7CgkJCQlmb3IgKCB2YXIgaT0wLCBpZW49ZGF0YS5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCQlfZm5BZGREYXRhKCBzZXR0aW5ncywgZGF0YVtpXSApOwoJCQkJfQoJCgkJCQlfZm5SZURyYXcoIHNldHRpbmdzLCBob2xkUG9zaXRpb24gKTsKCQkJCV9mblByb2Nlc3NpbmdEaXNwbGF5KCBzZXR0aW5ncywgZmFsc2UgKTsKCQkJfSApOwoJCX0KCX07CgkKCQoJLyoqCgkgKiBHZXQgdGhlIEpTT04gcmVzcG9uc2UgZnJvbSB0aGUgbGFzdCBBamF4IHJlcXVlc3QgdGhhdCBEYXRhVGFibGVzIG1hZGUgdG8gdGhlCgkgKiBzZXJ2ZXIuIE5vdGUgdGhhdCB0aGlzIHJldHVybnMgdGhlIEpTT04gZnJvbSB0aGUgZmlyc3QgdGFibGUgaW4gdGhlIGN1cnJlbnQKCSAqIGNvbnRleHQuCgkgKgoJICogQHJldHVybiB7b2JqZWN0fSBKU09OIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlci4KCSAqLwoJX2FwaV9yZWdpc3RlciggJ2FqYXguanNvbigpJywgZnVuY3Rpb24gKCkgewoJCXZhciBjdHggPSB0aGlzLmNvbnRleHQ7CgkKCQlpZiAoIGN0eC5sZW5ndGggPiAwICkgewoJCQlyZXR1cm4gY3R4WzBdLmpzb247CgkJfQoJCgkJLy8gZWxzZSByZXR1cm4gdW5kZWZpbmVkOwoJfSApOwoJCgkKCS8qKgoJICogR2V0IHRoZSBkYXRhIHN1Ym1pdHRlZCBpbiB0aGUgbGFzdCBBamF4IHJlcXVlc3QKCSAqLwoJX2FwaV9yZWdpc3RlciggJ2FqYXgucGFyYW1zKCknLCBmdW5jdGlvbiAoKSB7CgkJdmFyIGN0eCA9IHRoaXMuY29udGV4dDsKCQoJCWlmICggY3R4Lmxlbmd0aCA+IDAgKSB7CgkJCXJldHVybiBjdHhbMF0ub0FqYXhEYXRhOwoJCX0KCQoJCS8vIGVsc2UgcmV0dXJuIHVuZGVmaW5lZDsKCX0gKTsKCQoJCgkvKioKCSAqIFJlbG9hZCB0YWJsZXMgZnJvbSB0aGUgQWpheCBkYXRhIHNvdXJjZS4gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbAoJICogYXV0b21hdGljYWxseSByZS1kcmF3IHRoZSB0YWJsZSB3aGVuIHRoZSByZW1vdGUgZGF0YSBoYXMgYmVlbiBsb2FkZWQuCgkgKgoJICogQHBhcmFtIHtib29sZWFufSBbcmVzZXQ9dHJ1ZV0gUmVzZXQgKGRlZmF1bHQpIG9yIGhvbGQgdGhlIGN1cnJlbnQgcGFnaW5nCgkgKiAgIHBvc2l0aW9uLiBBIGZ1bGwgcmUtc29ydCBhbmQgcmUtZmlsdGVyIGlzIHBlcmZvcm1lZCB3aGVuIHRoaXMgbWV0aG9kIGlzCgkgKiAgIGNhbGxlZCwgd2hpY2ggaXMgd2h5IHRoZSBwYWdpbmF0aW9uIHJlc2V0IGlzIHRoZSBkZWZhdWx0IGFjdGlvbi4KCSAqIEByZXR1cm5zIHtEYXRhVGFibGVzLkFwaX0gdGhpcwoJICovCglfYXBpX3JlZ2lzdGVyKCAnYWpheC5yZWxvYWQoKScsIGZ1bmN0aW9uICggY2FsbGJhY2ssIHJlc2V0UGFnaW5nICkgewoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoc2V0dGluZ3MpIHsKCQkJX19yZWxvYWQoIHNldHRpbmdzLCByZXNldFBhZ2luZz09PWZhbHNlLCBjYWxsYmFjayApOwoJCX0gKTsKCX0gKTsKCQoJCgkvKioKCSAqIEdldCB0aGUgY3VycmVudCBBamF4IFVSTC4gTm90ZSB0aGF0IHRoaXMgcmV0dXJucyB0aGUgVVJMIGZyb20gdGhlIGZpcnN0CgkgKiB0YWJsZSBpbiB0aGUgY3VycmVudCBjb250ZXh0LgoJICoKCSAqIEByZXR1cm4ge3N0cmluZ30gQ3VycmVudCBBamF4IHNvdXJjZSBVUkwKCSAqLy8qKgoJICogU2V0IHRoZSBBamF4IFVSTC4gTm90ZSB0aGF0IHRoaXMgd2lsbCBzZXQgdGhlIFVSTCBmb3IgYWxsIHRhYmxlcyBpbiB0aGUKCSAqIGN1cnJlbnQgY29udGV4dC4KCSAqCgkgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVSTCB0byBzZXQuCgkgKiBAcmV0dXJucyB7RGF0YVRhYmxlcy5BcGl9IHRoaXMKCSAqLwoJX2FwaV9yZWdpc3RlciggJ2FqYXgudXJsKCknLCBmdW5jdGlvbiAoIHVybCApIHsKCQl2YXIgY3R4ID0gdGhpcy5jb250ZXh0OwoJCgkJaWYgKCB1cmwgPT09IHVuZGVmaW5lZCApIHsKCQkJLy8gZ2V0CgkJCWlmICggY3R4Lmxlbmd0aCA9PT0gMCApIHsKCQkJCXJldHVybiB1bmRlZmluZWQ7CgkJCX0KCQkJY3R4ID0gY3R4WzBdOwoJCgkJCXJldHVybiBjdHguYWpheCA/CgkJCQkkLmlzUGxhaW5PYmplY3QoIGN0eC5hamF4ICkgPwoJCQkJCWN0eC5hamF4LnVybCA6CgkJCQkJY3R4LmFqYXggOgoJCQkJY3R4LnNBamF4U291cmNlOwoJCX0KCQoJCS8vIHNldAoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIHNldHRpbmdzICkgewoJCQlpZiAoICQuaXNQbGFpbk9iamVjdCggc2V0dGluZ3MuYWpheCApICkgewoJCQkJc2V0dGluZ3MuYWpheC51cmwgPSB1cmw7CgkJCX0KCQkJZWxzZSB7CgkJCQlzZXR0aW5ncy5hamF4ID0gdXJsOwoJCQl9CgkJCS8vIE5vIG5lZWQgdG8gY29uc2lkZXIgc0FqYXhTb3VyY2UgaGVyZSBzaW5jZSBEYXRhVGFibGVzIGdpdmVzIHByaW9yaXR5CgkJCS8vIHRvIGBhamF4YCBvdmVyIGBzQWpheFNvdXJjZWAuIFNvIHNldHRpbmcgYGFqYXhgIGhlcmUsIHJlbmRlcnMgYW55CgkJCS8vIHZhbHVlIG9mIGBzQWpheFNvdXJjZWAgcmVkdW5kYW50LgoJCX0gKTsKCX0gKTsKCQoJCgkvKioKCSAqIExvYWQgZGF0YSBmcm9tIHRoZSBuZXdseSBzZXQgQWpheCBVUkwuIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBpcyBvbmx5CgkgKiBhdmFpbGFibGUgd2hlbiBgYWpheC51cmwoKWAgaXMgdXNlZCB0byBzZXQgYSBVUkwuIEFkZGl0aW9uYWxseSwgdGhpcyBtZXRob2QKCSAqIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgY2FsbGluZyBgYWpheC5yZWxvYWQoKWAgYnV0IGlzIHByb3ZpZGVkIGZvcgoJICogY29udmVuaWVuY2Ugd2hlbiBzZXR0aW5nIGEgbmV3IFVSTC4gTGlrZSBgYWpheC5yZWxvYWQoKWAgaXQgd2lsbAoJICogYXV0b21hdGljYWxseSByZWRyYXcgdGhlIHRhYmxlIG9uY2UgdGhlIHJlbW90ZSBkYXRhIGhhcyBiZWVuIGxvYWRlZC4KCSAqCgkgKiBAcmV0dXJucyB7RGF0YVRhYmxlcy5BcGl9IHRoaXMKCSAqLwoJX2FwaV9yZWdpc3RlciggJ2FqYXgudXJsKCkubG9hZCgpJywgZnVuY3Rpb24gKCBjYWxsYmFjaywgcmVzZXRQYWdpbmcgKSB7CgkJLy8gU2FtZSBhcyBhIHJlbG9hZCwgYnV0IG1ha2VzIHNlbnNlIHRvIHByZXNlbnQgaXQgZm9yIGVhc3kgYWNjZXNzIGFmdGVyIGEKCQkvLyB1cmwgY2hhbmdlCgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggY3R4ICkgewoJCQlfX3JlbG9hZCggY3R4LCByZXNldFBhZ2luZz09PWZhbHNlLCBjYWxsYmFjayApOwoJCX0gKTsKCX0gKTsKCQoJCgkKCQoJdmFyIF9zZWxlY3Rvcl9ydW4gPSBmdW5jdGlvbiAoIHR5cGUsIHNlbGVjdG9yLCBzZWxlY3RGbiwgc2V0dGluZ3MsIG9wdHMgKQoJewoJCXZhcgoJCQlvdXQgPSBbXSwgcmVzLAoJCQlhLCBpLCBpZW4sIGosIGplbiwKCQkJc2VsZWN0b3JUeXBlID0gdHlwZW9mIHNlbGVjdG9yOwoJCgkJLy8gQ2FuJ3QganVzdCBjaGVjayBmb3IgaXNBcnJheSBoZXJlLCBhcyBhbiBBUEkgb3IgalF1ZXJ5IGluc3RhbmNlIG1pZ2h0IGJlCgkJLy8gZ2l2ZW4gd2l0aCB0aGVpciBhcnJheSBsaWtlIGxvb2sKCQlpZiAoICEgc2VsZWN0b3IgfHwgc2VsZWN0b3JUeXBlID09PSAnc3RyaW5nJyB8fCBzZWxlY3RvclR5cGUgPT09ICdmdW5jdGlvbicgfHwgc2VsZWN0b3IubGVuZ3RoID09PSB1bmRlZmluZWQgKSB7CgkJCXNlbGVjdG9yID0gWyBzZWxlY3RvciBdOwoJCX0KCQoJCWZvciAoIGk9MCwgaWVuPXNlbGVjdG9yLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkvLyBPbmx5IHNwbGl0IG9uIHNpbXBsZSBzdHJpbmdzIC0gY29tcGxleCBleHByZXNzaW9ucyB3aWxsIGJlIGpRdWVyeSBzZWxlY3RvcnMKCQkJYSA9IHNlbGVjdG9yW2ldICYmIHNlbGVjdG9yW2ldLnNwbGl0ICYmICEgc2VsZWN0b3JbaV0ubWF0Y2goL1tcW1woOl0vKSA/CgkJCQlzZWxlY3RvcltpXS5zcGxpdCgnLCcpIDoKCQkJCVsgc2VsZWN0b3JbaV0gXTsKCQoJCQlmb3IgKCBqPTAsIGplbj1hLmxlbmd0aCA7IGo8amVuIDsgaisrICkgewoJCQkJcmVzID0gc2VsZWN0Rm4oIHR5cGVvZiBhW2pdID09PSAnc3RyaW5nJyA/ICQudHJpbShhW2pdKSA6IGFbal0gKTsKCQoJCQkJaWYgKCByZXMgJiYgcmVzLmxlbmd0aCApIHsKCQkJCQlvdXQgPSBvdXQuY29uY2F0KCByZXMgKTsKCQkJCX0KCQkJfQoJCX0KCQoJCS8vIHNlbGVjdG9yIGV4dGVuc2lvbnMKCQl2YXIgZXh0ID0gX2V4dC5zZWxlY3RvclsgdHlwZSBdOwoJCWlmICggZXh0Lmxlbmd0aCApIHsKCQkJZm9yICggaT0wLCBpZW49ZXh0Lmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJb3V0ID0gZXh0W2ldKCBzZXR0aW5ncywgb3B0cywgb3V0ICk7CgkJCX0KCQl9CgkKCQlyZXR1cm4gX3VuaXF1ZSggb3V0ICk7Cgl9OwoJCgkKCXZhciBfc2VsZWN0b3Jfb3B0cyA9IGZ1bmN0aW9uICggb3B0cyApCgl7CgkJaWYgKCAhIG9wdHMgKSB7CgkJCW9wdHMgPSB7fTsKCQl9CgkKCQkvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgMS45LSB3aGljaCB1c2VkIHRoZSB0ZXJtaW5vbG9neSBmaWx0ZXIgcmF0aGVyCgkJLy8gdGhhbiBzZWFyY2gKCQlpZiAoIG9wdHMuZmlsdGVyICYmIG9wdHMuc2VhcmNoID09PSB1bmRlZmluZWQgKSB7CgkJCW9wdHMuc2VhcmNoID0gb3B0cy5maWx0ZXI7CgkJfQoJCgkJcmV0dXJuICQuZXh0ZW5kKCB7CgkJCXNlYXJjaDogJ25vbmUnLAoJCQlvcmRlcjogJ2N1cnJlbnQnLAoJCQlwYWdlOiAnYWxsJwoJCX0sIG9wdHMgKTsKCX07CgkKCQoJdmFyIF9zZWxlY3Rvcl9maXJzdCA9IGZ1bmN0aW9uICggaW5zdCApCgl7CgkJLy8gUmVkdWNlIHRoZSBBUEkgaW5zdGFuY2UgdG8gdGhlIGZpcnN0IGl0ZW0gZm91bmQKCQlmb3IgKCB2YXIgaT0wLCBpZW49aW5zdC5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJaWYgKCBpbnN0W2ldLmxlbmd0aCA+IDAgKSB7CgkJCQkvLyBBc3NpZ24gdGhlIGZpcnN0IGVsZW1lbnQgdG8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGluc3RhbmNlCgkJCQkvLyBhbmQgdHJ1bmNhdGUgdGhlIGluc3RhbmNlIGFuZCBjb250ZXh0CgkJCQlpbnN0WzBdID0gaW5zdFtpXTsKCQkJCWluc3RbMF0ubGVuZ3RoID0gMTsKCQkJCWluc3QubGVuZ3RoID0gMTsKCQkJCWluc3QuY29udGV4dCA9IFsgaW5zdC5jb250ZXh0W2ldIF07CgkKCQkJCXJldHVybiBpbnN0OwoJCQl9CgkJfQoJCgkJLy8gTm90IGZvdW5kIC0gcmV0dXJuIGFuIGVtcHR5IGluc3RhbmNlCgkJaW5zdC5sZW5ndGggPSAwOwoJCXJldHVybiBpbnN0OwoJfTsKCQoJCgl2YXIgX3NlbGVjdG9yX3Jvd19pbmRleGVzID0gZnVuY3Rpb24gKCBzZXR0aW5ncywgb3B0cyApCgl7CgkJdmFyCgkJCWksIGllbiwgdG1wLCBhPVtdLAoJCQlkaXNwbGF5RmlsdGVyZWQgPSBzZXR0aW5ncy5haURpc3BsYXksCgkJCWRpc3BsYXlNYXN0ZXIgPSBzZXR0aW5ncy5haURpc3BsYXlNYXN0ZXI7CgkKCQl2YXIKCQkJc2VhcmNoID0gb3B0cy5zZWFyY2gsICAvLyBub25lLCBhcHBsaWVkLCByZW1vdmVkCgkJCW9yZGVyICA9IG9wdHMub3JkZXIsICAgLy8gYXBwbGllZCwgY3VycmVudCwgaW5kZXggKG9yaWdpbmFsIC0gY29tcGF0aWJpbGl0eSB3aXRoIDEuOSkKCQkJcGFnZSAgID0gb3B0cy5wYWdlOyAgICAvLyBhbGwsIGN1cnJlbnQKCQoJCWlmICggX2ZuRGF0YVNvdXJjZSggc2V0dGluZ3MgKSA9PSAnc3NwJyApIHsKCQkJLy8gSW4gc2VydmVyLXNpZGUgcHJvY2Vzc2luZyBtb2RlLCBtb3N0IG9wdGlvbnMgYXJlIGlycmVsZXZhbnQgc2luY2UKCQkJLy8gcm93cyBub3Qgc2hvd24gZG9uJ3QgZXhpc3QgYW5kIHRoZSBpbmRleCBvcmRlciBpcyB0aGUgYXBwbGllZCBvcmRlcgoJCQkvLyBSZW1vdmVkIGlzIGEgc3BlY2lhbCBjYXNlIC0gZm9yIGNvbnNpc3RlbmN5IGp1c3QgcmV0dXJuIGFuIGVtcHR5CgkJCS8vIGFycmF5CgkJCXJldHVybiBzZWFyY2ggPT09ICdyZW1vdmVkJyA/CgkJCQlbXSA6CgkJCQlfcmFuZ2UoIDAsIGRpc3BsYXlNYXN0ZXIubGVuZ3RoICk7CgkJfQoJCWVsc2UgaWYgKCBwYWdlID09ICdjdXJyZW50JyApIHsKCQkJLy8gQ3VycmVudCBwYWdlIGltcGxpZXMgdGhhdCBvcmRlcj1jdXJyZW50IGFuZCBmaXRsZXI9YXBwbGllZCwgc2luY2UgaXQgaXMKCQkJLy8gZmFpcmx5IHNlbnNlbGVzcyBvdGhlcndpc2UsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBvcmRlciBhbmQgc2VhcmNoIGFjdHVhbGx5CgkJCS8vIGFyZQoJCQlmb3IgKCBpPXNldHRpbmdzLl9pRGlzcGxheVN0YXJ0LCBpZW49c2V0dGluZ3MuZm5EaXNwbGF5RW5kKCkgOyBpPGllbiA7IGkrKyApIHsKCQkJCWEucHVzaCggZGlzcGxheUZpbHRlcmVkW2ldICk7CgkJCX0KCQl9CgkJZWxzZSBpZiAoIG9yZGVyID09ICdjdXJyZW50JyB8fCBvcmRlciA9PSAnYXBwbGllZCcgKSB7CgkJCWlmICggc2VhcmNoID09ICdub25lJykgewoJCQkJYSA9IGRpc3BsYXlNYXN0ZXIuc2xpY2UoKTsKCQkJfQoJCQllbHNlIGlmICggc2VhcmNoID09ICdhcHBsaWVkJyApIHsKCQkJCWEgPSBkaXNwbGF5RmlsdGVyZWQuc2xpY2UoKTsKCQkJfQoJCQllbHNlIGlmICggc2VhcmNoID09ICdyZW1vdmVkJyApIHsKCQkJCS8vIE8obittKSBzb2x1dGlvbiBieSBjcmVhdGluZyBhIGhhc2ggbWFwCgkJCQl2YXIgZGlzcGxheUZpbHRlcmVkTWFwID0ge307CgkKCQkJCWZvciAoIHZhciBpPTAsIGllbj1kaXNwbGF5RmlsdGVyZWQubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQkJZGlzcGxheUZpbHRlcmVkTWFwW2Rpc3BsYXlGaWx0ZXJlZFtpXV0gPSBudWxsOwoJCQkJfQoJCgkJCQlhID0gJC5tYXAoIGRpc3BsYXlNYXN0ZXIsIGZ1bmN0aW9uIChlbCkgewoJCQkJCXJldHVybiAhIGRpc3BsYXlGaWx0ZXJlZE1hcC5oYXNPd25Qcm9wZXJ0eShlbCkgPwoJCQkJCQllbCA6CgkJCQkJCW51bGw7CgkJCQl9ICk7CgkJCX0KCQl9CgkJZWxzZSBpZiAoIG9yZGVyID09ICdpbmRleCcgfHwgb3JkZXIgPT0gJ29yaWdpbmFsJyApIHsKCQkJZm9yICggaT0wLCBpZW49c2V0dGluZ3MuYW9EYXRhLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJaWYgKCBzZWFyY2ggPT0gJ25vbmUnICkgewoJCQkJCWEucHVzaCggaSApOwoJCQkJfQoJCQkJZWxzZSB7IC8vIGFwcGxpZWQgfCByZW1vdmVkCgkJCQkJdG1wID0gJC5pbkFycmF5KCBpLCBkaXNwbGF5RmlsdGVyZWQgKTsKCQoJCQkJCWlmICgodG1wID09PSAtMSAmJiBzZWFyY2ggPT0gJ3JlbW92ZWQnKSB8fAoJCQkJCQkodG1wID49IDAgICAmJiBzZWFyY2ggPT0gJ2FwcGxpZWQnKSApCgkJCQkJewoJCQkJCQlhLnB1c2goIGkgKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkKCQlyZXR1cm4gYTsKCX07CgkKCQoJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkgKiBSb3dzCgkgKgoJICoge30gICAgICAgICAgLSBubyBzZWxlY3RvciAtIHVzZSBhbGwgYXZhaWxhYmxlIHJvd3MKCSAqIHtpbnRlZ2VyfSAgIC0gcm93IGFvRGF0YSBpbmRleAoJICoge25vZGV9ICAgICAgLSBUUiBub2RlCgkgKiB7c3RyaW5nfSAgICAtIGpRdWVyeSBzZWxlY3RvciB0byBhcHBseSB0byB0aGUgVFIgZWxlbWVudHMKCSAqIHthcnJheX0gICAgIC0galF1ZXJ5IGFycmF5IG9mIG5vZGVzLCBvciBzaW1wbHkgYW4gYXJyYXkgb2YgVFIgbm9kZXMKCSAqCgkgKi8KCXZhciBfX3Jvd19zZWxlY3RvciA9IGZ1bmN0aW9uICggc2V0dGluZ3MsIHNlbGVjdG9yLCBvcHRzICkKCXsKCQl2YXIgcm93czsKCQl2YXIgcnVuID0gZnVuY3Rpb24gKCBzZWwgKSB7CgkJCXZhciBzZWxJbnQgPSBfaW50VmFsKCBzZWwgKTsKCQkJdmFyIGksIGllbjsKCQkJdmFyIGFvRGF0YSA9IHNldHRpbmdzLmFvRGF0YTsKCQoJCQkvLyBTaG9ydCBjdXQgLSBzZWxlY3RvciBpcyBhIG51bWJlciBhbmQgbm8gb3B0aW9ucyBwcm92aWRlZCAoZGVmYXVsdCBpcwoJCQkvLyBhbGwgcmVjb3Jkcywgc28gbm8gbmVlZCB0byBjaGVjayBpZiB0aGUgaW5kZXggaXMgaW4gdGhlcmUsIHNpbmNlIGl0CgkJCS8vIG11c3QgYmUgLSBkZXYgZXJyb3IgaWYgdGhlIGluZGV4IGRvZXNuJ3QgZXhpc3QpLgoJCQlpZiAoIHNlbEludCAhPT0gbnVsbCAmJiAhIG9wdHMgKSB7CgkJCQlyZXR1cm4gWyBzZWxJbnQgXTsKCQkJfQoJCgkJCWlmICggISByb3dzICkgewoJCQkJcm93cyA9IF9zZWxlY3Rvcl9yb3dfaW5kZXhlcyggc2V0dGluZ3MsIG9wdHMgKTsKCQkJfQoJCgkJCWlmICggc2VsSW50ICE9PSBudWxsICYmICQuaW5BcnJheSggc2VsSW50LCByb3dzICkgIT09IC0xICkgewoJCQkJLy8gU2VsZWN0b3IgLSBpbnRlZ2VyCgkJCQlyZXR1cm4gWyBzZWxJbnQgXTsKCQkJfQoJCQllbHNlIGlmICggc2VsID09PSBudWxsIHx8IHNlbCA9PT0gdW5kZWZpbmVkIHx8IHNlbCA9PT0gJycgKSB7CgkJCQkvLyBTZWxlY3RvciAtIG5vbmUKCQkJCXJldHVybiByb3dzOwoJCQl9CgkKCQkJLy8gU2VsZWN0b3IgLSBmdW5jdGlvbgoJCQlpZiAoIHR5cGVvZiBzZWwgPT09ICdmdW5jdGlvbicgKSB7CgkJCQlyZXR1cm4gJC5tYXAoIHJvd3MsIGZ1bmN0aW9uIChpZHgpIHsKCQkJCQl2YXIgcm93ID0gYW9EYXRhWyBpZHggXTsKCQkJCQlyZXR1cm4gc2VsKCBpZHgsIHJvdy5fYURhdGEsIHJvdy5uVHIgKSA/IGlkeCA6IG51bGw7CgkJCQl9ICk7CgkJCX0KCQoJCQkvLyBTZWxlY3RvciAtIG5vZGUKCQkJaWYgKCBzZWwubm9kZU5hbWUgKSB7CgkJCQl2YXIgcm93SWR4ID0gc2VsLl9EVF9Sb3dJbmRleDsgIC8vIFByb3BlcnR5IGFkZGVkIGJ5IERUIGZvciBmYXN0IGxvb2t1cAoJCQkJdmFyIGNlbGxJZHggPSBzZWwuX0RUX0NlbGxJbmRleDsKCQoJCQkJaWYgKCByb3dJZHggIT09IHVuZGVmaW5lZCApIHsKCQkJCQkvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcm93IGlzIGFjdHVhbGx5IHN0aWxsIHByZXNlbnQgaW4gdGhlIHRhYmxlCgkJCQkJcmV0dXJuIGFvRGF0YVsgcm93SWR4IF0gJiYgYW9EYXRhWyByb3dJZHggXS5uVHIgPT09IHNlbCA/CgkJCQkJCVsgcm93SWR4IF0gOgoJCQkJCQlbXTsKCQkJCX0KCQkJCWVsc2UgaWYgKCBjZWxsSWR4ICkgewoJCQkJCXJldHVybiBhb0RhdGFbIGNlbGxJZHgucm93IF0gJiYgYW9EYXRhWyBjZWxsSWR4LnJvdyBdLm5UciA9PT0gc2VsLnBhcmVudE5vZGUgPwoJCQkJCQlbIGNlbGxJZHgucm93IF0gOgoJCQkJCQlbXTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCXZhciBob3N0ID0gJChzZWwpLmNsb3Nlc3QoJypbZGF0YS1kdC1yb3ddJyk7CgkJCQkJcmV0dXJuIGhvc3QubGVuZ3RoID8KCQkJCQkJWyBob3N0LmRhdGEoJ2R0LXJvdycpIF0gOgoJCQkJCQlbXTsKCQkJCX0KCQkJfQoJCgkJCS8vIElEIHNlbGVjdG9yLiBXYW50IHRvIGFsd2F5cyBiZSBhYmxlIHRvIHNlbGVjdCByb3dzIGJ5IGlkLCByZWdhcmRsZXNzCgkJCS8vIG9mIGlmIHRoZSB0ciBlbGVtZW50IGhhcyBiZWVuIGNyZWF0ZWQgb3Igbm90LCBzbyBjYW4ndCByZWx5IHVwb24KCQkJLy8galF1ZXJ5IGhlcmUgLSBoZW5jZSBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBkb2VzIG5vdCBtYXRjaAoJCQkvLyBTaXp6bGUncyBmYXN0IHNlbGVjdG9yIG9yIEhUTUw0IC0gaW4gSFRNTDUgdGhlIElEIGNhbiBiZSBhbnl0aGluZywKCQkJLy8gYnV0IHRvIHNlbGVjdCBpdCB1c2luZyBhIENTUyBzZWxlY3RvciBlbmdpbmUgKGxpa2UgU2l6emxlIG9yCgkJCS8vIHF1ZXJ5U2VsZWN0KSBpdCB3b3VsZCBuZWVkIHRvIG5lZWQgdG8gYmUgZXNjYXBlZCBmb3Igc29tZSBjaGFyYWN0ZXJzLgoJCQkvLyBEYXRhVGFibGVzIHNpbXBsaWZpZXMgdGhpcyBmb3Igcm93IHNlbGVjdG9ycyBzaW5jZSB5b3UgY2FuIHNlbGVjdAoJCQkvLyBvbmx5IGEgcm93LiBBICMgaW5kaWNhdGVzIGFuIGlkIGFueSBhbnl0aGluZyB0aGF0IGZvbGxvd3MgaXMgdGhlIGlkIC0KCQkJLy8gdW5lc2NhcGVkLgoJCQlpZiAoIHR5cGVvZiBzZWwgPT09ICdzdHJpbmcnICYmIHNlbC5jaGFyQXQoMCkgPT09ICcjJyApIHsKCQkJCS8vIGdldCByb3cgaW5kZXggZnJvbSBpZAoJCQkJdmFyIHJvd09iaiA9IHNldHRpbmdzLmFJZHNbIHNlbC5yZXBsYWNlKCAvXiMvLCAnJyApIF07CgkJCQlpZiAoIHJvd09iaiAhPT0gdW5kZWZpbmVkICkgewoJCQkJCXJldHVybiBbIHJvd09iai5pZHggXTsKCQkJCX0KCQoJCQkJLy8gbmVlZCB0byBmYWxsIHRocm91Z2ggdG8galF1ZXJ5IGluIGNhc2UgdGhlcmUgaXMgRE9NIGlkIHRoYXQKCQkJCS8vIG1hdGNoZXMKCQkJfQoJCQkKCQkJLy8gR2V0IG5vZGVzIGluIHRoZSBvcmRlciBmcm9tIHRoZSBgcm93c2AgYXJyYXkgd2l0aCBudWxsIHZhbHVlcyByZW1vdmVkCgkJCXZhciBub2RlcyA9IF9yZW1vdmVFbXB0eSgKCQkJCV9wbHVja19vcmRlciggc2V0dGluZ3MuYW9EYXRhLCByb3dzLCAnblRyJyApCgkJCSk7CgkKCQkJLy8gU2VsZWN0b3IgLSBqUXVlcnkgc2VsZWN0b3Igc3RyaW5nLCBhcnJheSBvZiBub2RlcyBvciBqUXVlcnkgb2JqZWN0LwoJCQkvLyBBcyBqUXVlcnkncyAuZmlsdGVyKCkgYWxsb3dzIGpRdWVyeSBvYmplY3RzIHRvIGJlIHBhc3NlZCBpbiBmaWx0ZXIsCgkJCS8vIGl0IGFsc28gYWxsb3dzIGFycmF5cywgc28gdGhpcyB3aWxsIGNvcGUgd2l0aCBhbGwgdGhyZWUgb3B0aW9ucwoJCQlyZXR1cm4gJChub2RlcykKCQkJCS5maWx0ZXIoIHNlbCApCgkJCQkubWFwKCBmdW5jdGlvbiAoKSB7CgkJCQkJcmV0dXJuIHRoaXMuX0RUX1Jvd0luZGV4OwoJCQkJfSApCgkJCQkudG9BcnJheSgpOwoJCX07CgkKCQlyZXR1cm4gX3NlbGVjdG9yX3J1biggJ3JvdycsIHNlbGVjdG9yLCBydW4sIHNldHRpbmdzLCBvcHRzICk7Cgl9OwoJCgkKCV9hcGlfcmVnaXN0ZXIoICdyb3dzKCknLCBmdW5jdGlvbiAoIHNlbGVjdG9yLCBvcHRzICkgewoJCS8vIGFyZ3VtZW50IHNoaWZ0aW5nCgkJaWYgKCBzZWxlY3RvciA9PT0gdW5kZWZpbmVkICkgewoJCQlzZWxlY3RvciA9ICcnOwoJCX0KCQllbHNlIGlmICggJC5pc1BsYWluT2JqZWN0KCBzZWxlY3RvciApICkgewoJCQlvcHRzID0gc2VsZWN0b3I7CgkJCXNlbGVjdG9yID0gJyc7CgkJfQoJCgkJb3B0cyA9IF9zZWxlY3Rvcl9vcHRzKCBvcHRzICk7CgkKCQl2YXIgaW5zdCA9IHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggc2V0dGluZ3MgKSB7CgkJCXJldHVybiBfX3Jvd19zZWxlY3Rvciggc2V0dGluZ3MsIHNlbGVjdG9yLCBvcHRzICk7CgkJfSwgMSApOwoJCgkJLy8gV2FudCBhcmd1bWVudCBzaGlmdGluZyBoZXJlIGFuZCBpbiBfX3Jvd19zZWxlY3Rvcj8KCQlpbnN0LnNlbGVjdG9yLnJvd3MgPSBzZWxlY3RvcjsKCQlpbnN0LnNlbGVjdG9yLm9wdHMgPSBvcHRzOwoJCgkJcmV0dXJuIGluc3Q7Cgl9ICk7CgkKCV9hcGlfcmVnaXN0ZXIoICdyb3dzKCkubm9kZXMoKScsIGZ1bmN0aW9uICgpIHsKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3JvdycsIGZ1bmN0aW9uICggc2V0dGluZ3MsIHJvdyApIHsKCQkJcmV0dXJuIHNldHRpbmdzLmFvRGF0YVsgcm93IF0ublRyIHx8IHVuZGVmaW5lZDsKCQl9LCAxICk7Cgl9ICk7CgkKCV9hcGlfcmVnaXN0ZXIoICdyb3dzKCkuZGF0YSgpJywgZnVuY3Rpb24gKCkgewoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCB0cnVlLCAncm93cycsIGZ1bmN0aW9uICggc2V0dGluZ3MsIHJvd3MgKSB7CgkJCXJldHVybiBfcGx1Y2tfb3JkZXIoIHNldHRpbmdzLmFvRGF0YSwgcm93cywgJ19hRGF0YScgKTsKCQl9LCAxICk7Cgl9ICk7CgkKCV9hcGlfcmVnaXN0ZXJQbHVyYWwoICdyb3dzKCkuY2FjaGUoKScsICdyb3coKS5jYWNoZSgpJywgZnVuY3Rpb24gKCB0eXBlICkgewoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAncm93JywgZnVuY3Rpb24gKCBzZXR0aW5ncywgcm93ICkgewoJCQl2YXIgciA9IHNldHRpbmdzLmFvRGF0YVsgcm93IF07CgkJCXJldHVybiB0eXBlID09PSAnc2VhcmNoJyA/IHIuX2FGaWx0ZXJEYXRhIDogci5fYVNvcnREYXRhOwoJCX0sIDEgKTsKCX0gKTsKCQoJX2FwaV9yZWdpc3RlclBsdXJhbCggJ3Jvd3MoKS5pbnZhbGlkYXRlKCknLCAncm93KCkuaW52YWxpZGF0ZSgpJywgZnVuY3Rpb24gKCBzcmMgKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICdyb3cnLCBmdW5jdGlvbiAoIHNldHRpbmdzLCByb3cgKSB7CgkJCV9mbkludmFsaWRhdGUoIHNldHRpbmdzLCByb3csIHNyYyApOwoJCX0gKTsKCX0gKTsKCQoJX2FwaV9yZWdpc3RlclBsdXJhbCggJ3Jvd3MoKS5pbmRleGVzKCknLCAncm93KCkuaW5kZXgoKScsIGZ1bmN0aW9uICgpIHsKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3JvdycsIGZ1bmN0aW9uICggc2V0dGluZ3MsIHJvdyApIHsKCQkJcmV0dXJuIHJvdzsKCQl9LCAxICk7Cgl9ICk7CgkKCV9hcGlfcmVnaXN0ZXJQbHVyYWwoICdyb3dzKCkuaWRzKCknLCAncm93KCkuaWQoKScsIGZ1bmN0aW9uICggaGFzaCApIHsKCQl2YXIgYSA9IFtdOwoJCXZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0OwoJCgkJLy8gYGl0ZXJhdG9yYCB3aWxsIGRyb3AgdW5kZWZpbmVkIHZhbHVlcywgYnV0IGluIHRoaXMgY2FzZSB3ZSB3YW50IHRoZW0KCQlmb3IgKCB2YXIgaT0wLCBpZW49Y29udGV4dC5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJZm9yICggdmFyIGo9MCwgamVuPXRoaXNbaV0ubGVuZ3RoIDsgajxqZW4gOyBqKysgKSB7CgkJCQl2YXIgaWQgPSBjb250ZXh0W2ldLnJvd0lkRm4oIGNvbnRleHRbaV0uYW9EYXRhWyB0aGlzW2ldW2pdIF0uX2FEYXRhICk7CgkJCQlhLnB1c2goIChoYXNoID09PSB0cnVlID8gJyMnIDogJycgKSsgaWQgKTsKCQkJfQoJCX0KCQoJCXJldHVybiBuZXcgX0FwaSggY29udGV4dCwgYSApOwoJfSApOwoJCglfYXBpX3JlZ2lzdGVyUGx1cmFsKCAncm93cygpLnJlbW92ZSgpJywgJ3JvdygpLnJlbW92ZSgpJywgZnVuY3Rpb24gKCkgewoJCXZhciB0aGF0ID0gdGhpczsKCQoJCXRoaXMuaXRlcmF0b3IoICdyb3cnLCBmdW5jdGlvbiAoIHNldHRpbmdzLCByb3csIHRoYXRJZHggKSB7CgkJCXZhciBkYXRhID0gc2V0dGluZ3MuYW9EYXRhOwoJCQl2YXIgcm93RGF0YSA9IGRhdGFbIHJvdyBdOwoJCQl2YXIgaSwgaWVuLCBqLCBqZW47CgkJCXZhciBsb29wUm93LCBsb29wQ2VsbHM7CgkKCQkJZGF0YS5zcGxpY2UoIHJvdywgMSApOwoJCgkJCS8vIFVwZGF0ZSB0aGUgY2FjaGVkIGluZGV4ZXMKCQkJZm9yICggaT0wLCBpZW49ZGF0YS5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCWxvb3BSb3cgPSBkYXRhW2ldOwoJCQkJbG9vcENlbGxzID0gbG9vcFJvdy5hbkNlbGxzOwoJCgkJCQkvLyBSb3dzCgkJCQlpZiAoIGxvb3BSb3cublRyICE9PSBudWxsICkgewoJCQkJCWxvb3BSb3cublRyLl9EVF9Sb3dJbmRleCA9IGk7CgkJCQl9CgkKCQkJCS8vIENlbGxzCgkJCQlpZiAoIGxvb3BDZWxscyAhPT0gbnVsbCApIHsKCQkJCQlmb3IgKCBqPTAsIGplbj1sb29wQ2VsbHMubGVuZ3RoIDsgajxqZW4gOyBqKysgKSB7CgkJCQkJCWxvb3BDZWxsc1tqXS5fRFRfQ2VsbEluZGV4LnJvdyA9IGk7CgkJCQkJfQoJCQkJfQoJCQl9CgkKCQkJLy8gRGVsZXRlIGZyb20gdGhlIGRpc3BsYXkgYXJyYXlzCgkJCV9mbkRlbGV0ZUluZGV4KCBzZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIsIHJvdyApOwoJCQlfZm5EZWxldGVJbmRleCggc2V0dGluZ3MuYWlEaXNwbGF5LCByb3cgKTsKCQkJX2ZuRGVsZXRlSW5kZXgoIHRoYXRbIHRoYXRJZHggXSwgcm93LCBmYWxzZSApOyAvLyBtYWludGFpbiBsb2NhbCBpbmRleGVzCgkKCQkJLy8gRm9yIHNlcnZlci1zaWRlIHByb2Nlc3NpbmcgdGFibGVzIC0gc3VidHJhY3QgdGhlIGRlbGV0ZWQgcm93IGZyb20gdGhlIGNvdW50CgkJCWlmICggc2V0dGluZ3MuX2lSZWNvcmRzRGlzcGxheSA+IDAgKSB7CgkJCQlzZXR0aW5ncy5faVJlY29yZHNEaXNwbGF5LS07CgkJCX0KCQoJCQkvLyBDaGVjayBmb3IgYW4gJ292ZXJmbG93JyB0aGV5IGNhc2UgZm9yIGRpc3BsYXlpbmcgdGhlIHRhYmxlCgkJCV9mbkxlbmd0aE92ZXJmbG93KCBzZXR0aW5ncyApOwoJCgkJCS8vIFJlbW92ZSB0aGUgcm93J3MgSUQgcmVmZXJlbmNlIGlmIHRoZXJlIGlzIG9uZQoJCQl2YXIgaWQgPSBzZXR0aW5ncy5yb3dJZEZuKCByb3dEYXRhLl9hRGF0YSApOwoJCQlpZiAoIGlkICE9PSB1bmRlZmluZWQgKSB7CgkJCQlkZWxldGUgc2V0dGluZ3MuYUlkc1sgaWQgXTsKCQkJfQoJCX0gKTsKCQoJCXRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggc2V0dGluZ3MgKSB7CgkJCWZvciAoIHZhciBpPTAsIGllbj1zZXR0aW5ncy5hb0RhdGEubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQlzZXR0aW5ncy5hb0RhdGFbaV0uaWR4ID0gaTsKCQkJfQoJCX0gKTsKCQoJCXJldHVybiB0aGlzOwoJfSApOwoJCgkKCV9hcGlfcmVnaXN0ZXIoICdyb3dzLmFkZCgpJywgZnVuY3Rpb24gKCByb3dzICkgewoJCXZhciBuZXdSb3dzID0gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBzZXR0aW5ncyApIHsKCQkJCXZhciByb3csIGksIGllbjsKCQkJCXZhciBvdXQgPSBbXTsKCQoJCQkJZm9yICggaT0wLCBpZW49cm93cy5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCQlyb3cgPSByb3dzW2ldOwoJCgkJCQkJaWYgKCByb3cubm9kZU5hbWUgJiYgcm93Lm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdUUicgKSB7CgkJCQkJCW91dC5wdXNoKCBfZm5BZGRUciggc2V0dGluZ3MsIHJvdyApWzBdICk7CgkJCQkJfQoJCQkJCWVsc2UgewoJCQkJCQlvdXQucHVzaCggX2ZuQWRkRGF0YSggc2V0dGluZ3MsIHJvdyApICk7CgkJCQkJfQoJCQkJfQoJCgkJCQlyZXR1cm4gb3V0OwoJCQl9LCAxICk7CgkKCQkvLyBSZXR1cm4gYW4gQXBpLnJvd3MoKSBleHRlbmRlZCBpbnN0YW5jZSwgc28gcm93cygpLm5vZGVzKCkgZXRjIGNhbiBiZSB1c2VkCgkJdmFyIG1vZFJvd3MgPSB0aGlzLnJvd3MoIC0xICk7CgkJbW9kUm93cy5wb3AoKTsKCQkkLm1lcmdlKCBtb2RSb3dzLCBuZXdSb3dzICk7CgkKCQlyZXR1cm4gbW9kUm93czsKCX0gKTsKCQoJCgkKCQoJCgkvKioKCSAqCgkgKi8KCV9hcGlfcmVnaXN0ZXIoICdyb3coKScsIGZ1bmN0aW9uICggc2VsZWN0b3IsIG9wdHMgKSB7CgkJcmV0dXJuIF9zZWxlY3Rvcl9maXJzdCggdGhpcy5yb3dzKCBzZWxlY3Rvciwgb3B0cyApICk7Cgl9ICk7CgkKCQoJX2FwaV9yZWdpc3RlciggJ3JvdygpLmRhdGEoKScsIGZ1bmN0aW9uICggZGF0YSApIHsKCQl2YXIgY3R4ID0gdGhpcy5jb250ZXh0OwoJCgkJaWYgKCBkYXRhID09PSB1bmRlZmluZWQgKSB7CgkJCS8vIEdldAoJCQlyZXR1cm4gY3R4Lmxlbmd0aCAmJiB0aGlzLmxlbmd0aCA/CgkJCQljdHhbMF0uYW9EYXRhWyB0aGlzWzBdIF0uX2FEYXRhIDoKCQkJCXVuZGVmaW5lZDsKCQl9CgkKCQkvLyBTZXQKCQl2YXIgcm93ID0gY3R4WzBdLmFvRGF0YVsgdGhpc1swXSBdOwoJCXJvdy5fYURhdGEgPSBkYXRhOwoJCgkJLy8gSWYgdGhlIERPTSBoYXMgYW4gaWQsIGFuZCB0aGUgZGF0YSBzb3VyY2UgaXMgYW4gYXJyYXkKCQlpZiAoICQuaXNBcnJheSggZGF0YSApICYmIHJvdy5uVHIuaWQgKSB7CgkJCV9mblNldE9iamVjdERhdGFGbiggY3R4WzBdLnJvd0lkICkoIGRhdGEsIHJvdy5uVHIuaWQgKTsKCQl9CgkKCQkvLyBBdXRvbWF0aWNhbGx5IGludmFsaWRhdGUKCQlfZm5JbnZhbGlkYXRlKCBjdHhbMF0sIHRoaXNbMF0sICdkYXRhJyApOwoJCgkJcmV0dXJuIHRoaXM7Cgl9ICk7CgkKCQoJX2FwaV9yZWdpc3RlciggJ3JvdygpLm5vZGUoKScsIGZ1bmN0aW9uICgpIHsKCQl2YXIgY3R4ID0gdGhpcy5jb250ZXh0OwoJCgkJcmV0dXJuIGN0eC5sZW5ndGggJiYgdGhpcy5sZW5ndGggPwoJCQljdHhbMF0uYW9EYXRhWyB0aGlzWzBdIF0ublRyIHx8IG51bGwgOgoJCQludWxsOwoJfSApOwoJCgkKCV9hcGlfcmVnaXN0ZXIoICdyb3cuYWRkKCknLCBmdW5jdGlvbiAoIHJvdyApIHsKCQkvLyBBbGxvdyBhIGpRdWVyeSBvYmplY3QgdG8gYmUgcGFzc2VkIGluIC0gb25seSBhIHNpbmdsZSByb3cgaXMgYWRkZWQgZnJvbQoJCS8vIGl0IHRob3VnaCAtIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzZXQKCQlpZiAoIHJvdyBpbnN0YW5jZW9mICQgJiYgcm93Lmxlbmd0aCApIHsKCQkJcm93ID0gcm93WzBdOwoJCX0KCQoJCXZhciByb3dzID0gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBzZXR0aW5ncyApIHsKCQkJaWYgKCByb3cubm9kZU5hbWUgJiYgcm93Lm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdUUicgKSB7CgkJCQlyZXR1cm4gX2ZuQWRkVHIoIHNldHRpbmdzLCByb3cgKVswXTsKCQkJfQoJCQlyZXR1cm4gX2ZuQWRkRGF0YSggc2V0dGluZ3MsIHJvdyApOwoJCX0gKTsKCQoJCS8vIFJldHVybiBhbiBBcGkucm93cygpIGV4dGVuZGVkIGluc3RhbmNlLCB3aXRoIHRoZSBuZXdseSBhZGRlZCByb3cgc2VsZWN0ZWQKCQlyZXR1cm4gdGhpcy5yb3coIHJvd3NbMF0gKTsKCX0gKTsKCQoJCgkKCXZhciBfX2RldGFpbHNfYWRkID0gZnVuY3Rpb24gKCBjdHgsIHJvdywgZGF0YSwga2xhc3MgKQoJewoJCS8vIENvbnZlcnQgdG8gYXJyYXkgb2YgVFIgZWxlbWVudHMKCQl2YXIgcm93cyA9IFtdOwoJCXZhciBhZGRSb3cgPSBmdW5jdGlvbiAoIHIsIGsgKSB7CgkJCS8vIFJlY3Vyc2lvbiB0byBhbGxvdyBmb3IgYXJyYXlzIG9mIGpRdWVyeSBvYmplY3RzCgkJCWlmICggJC5pc0FycmF5KCByICkgfHwgciBpbnN0YW5jZW9mICQgKSB7CgkJCQlmb3IgKCB2YXIgaT0wLCBpZW49ci5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCQlhZGRSb3coIHJbaV0sIGsgKTsKCQkJCX0KCQkJCXJldHVybjsKCQkJfQoJCgkJCS8vIElmIHdlIGdldCBhIFRSIGVsZW1lbnQsIHRoZW4ganVzdCBhZGQgaXQgZGlyZWN0bHkgLSB1cCB0byB0aGUgZGV2CgkJCS8vIHRvIGFkZCB0aGUgY29ycmVjdCBudW1iZXIgb2YgY29sdW1ucyBldGMKCQkJaWYgKCByLm5vZGVOYW1lICYmIHIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3RyJyApIHsKCQkJCXJvd3MucHVzaCggciApOwoJCQl9CgkJCWVsc2UgewoJCQkJLy8gT3RoZXJ3aXNlIGNyZWF0ZSBhIHJvdyB3aXRoIGEgd3JhcHBlcgoJCQkJdmFyIGNyZWF0ZWQgPSAkKCc8dHI+PHRkLz48L3RyPicpLmFkZENsYXNzKCBrICk7CgkJCQkkKCd0ZCcsIGNyZWF0ZWQpCgkJCQkJLmFkZENsYXNzKCBrICkKCQkJCQkuaHRtbCggciApCgkJCQkJWzBdLmNvbFNwYW4gPSBfZm5WaXNibGVDb2x1bW5zKCBjdHggKTsKCQoJCQkJcm93cy5wdXNoKCBjcmVhdGVkWzBdICk7CgkJCX0KCQl9OwoJCgkJYWRkUm93KCBkYXRhLCBrbGFzcyApOwoJCgkJaWYgKCByb3cuX2RldGFpbHMgKSB7CgkJCXJvdy5fZGV0YWlscy5kZXRhY2goKTsKCQl9CgkKCQlyb3cuX2RldGFpbHMgPSAkKHJvd3MpOwoJCgkJLy8gSWYgdGhlIGNoaWxkcmVuIHdlcmUgYWxyZWFkeSBzaG93biwgdGhhdCBzdGF0ZSBzaG91bGQgYmUgcmV0YWluZWQKCQlpZiAoIHJvdy5fZGV0YWlsc1Nob3cgKSB7CgkJCXJvdy5fZGV0YWlscy5pbnNlcnRBZnRlciggcm93Lm5UciApOwoJCX0KCX07CgkKCQoJdmFyIF9fZGV0YWlsc19yZW1vdmUgPSBmdW5jdGlvbiAoIGFwaSwgaWR4ICkKCXsKCQl2YXIgY3R4ID0gYXBpLmNvbnRleHQ7CgkKCQlpZiAoIGN0eC5sZW5ndGggKSB7CgkJCXZhciByb3cgPSBjdHhbMF0uYW9EYXRhWyBpZHggIT09IHVuZGVmaW5lZCA/IGlkeCA6IGFwaVswXSBdOwoJCgkJCWlmICggcm93ICYmIHJvdy5fZGV0YWlscyApIHsKCQkJCXJvdy5fZGV0YWlscy5yZW1vdmUoKTsKCQoJCQkJcm93Ll9kZXRhaWxzU2hvdyA9IHVuZGVmaW5lZDsKCQkJCXJvdy5fZGV0YWlscyA9IHVuZGVmaW5lZDsKCQkJfQoJCX0KCX07CgkKCQoJdmFyIF9fZGV0YWlsc19kaXNwbGF5ID0gZnVuY3Rpb24gKCBhcGksIHNob3cgKSB7CgkJdmFyIGN0eCA9IGFwaS5jb250ZXh0OwoJCgkJaWYgKCBjdHgubGVuZ3RoICYmIGFwaS5sZW5ndGggKSB7CgkJCXZhciByb3cgPSBjdHhbMF0uYW9EYXRhWyBhcGlbMF0gXTsKCQoJCQlpZiAoIHJvdy5fZGV0YWlscyApIHsKCQkJCXJvdy5fZGV0YWlsc1Nob3cgPSBzaG93OwoJCgkJCQlpZiAoIHNob3cgKSB7CgkJCQkJcm93Ll9kZXRhaWxzLmluc2VydEFmdGVyKCByb3cublRyICk7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlyb3cuX2RldGFpbHMuZGV0YWNoKCk7CgkJCQl9CgkKCQkJCV9fZGV0YWlsc19ldmVudHMoIGN0eFswXSApOwoJCQl9CgkJfQoJfTsKCQoJCgl2YXIgX19kZXRhaWxzX2V2ZW50cyA9IGZ1bmN0aW9uICggc2V0dGluZ3MgKQoJewoJCXZhciBhcGkgPSBuZXcgX0FwaSggc2V0dGluZ3MgKTsKCQl2YXIgbmFtZXNwYWNlID0gJy5kdC5EVF9kZXRhaWxzJzsKCQl2YXIgZHJhd0V2ZW50ID0gJ2RyYXcnK25hbWVzcGFjZTsKCQl2YXIgY29sdmlzRXZlbnQgPSAnY29sdW1uLXZpc2liaWxpdHknK25hbWVzcGFjZTsKCQl2YXIgZGVzdHJveUV2ZW50ID0gJ2Rlc3Ryb3knK25hbWVzcGFjZTsKCQl2YXIgZGF0YSA9IHNldHRpbmdzLmFvRGF0YTsKCQoJCWFwaS5vZmYoIGRyYXdFdmVudCArJyAnKyBjb2x2aXNFdmVudCArJyAnKyBkZXN0cm95RXZlbnQgKTsKCQoJCWlmICggX3BsdWNrKCBkYXRhLCAnX2RldGFpbHMnICkubGVuZ3RoID4gMCApIHsKCQkJLy8gT24gZWFjaCBkcmF3LCBpbnNlcnQgdGhlIHJlcXVpcmVkIGVsZW1lbnRzIGludG8gdGhlIGRvY3VtZW50CgkJCWFwaS5vbiggZHJhd0V2ZW50LCBmdW5jdGlvbiAoIGUsIGN0eCApIHsKCQkJCWlmICggc2V0dGluZ3MgIT09IGN0eCApIHsKCQkJCQlyZXR1cm47CgkJCQl9CgkKCQkJCWFwaS5yb3dzKCB7cGFnZTonY3VycmVudCd9ICkuZXEoMCkuZWFjaCggZnVuY3Rpb24gKGlkeCkgewoJCQkJCS8vIEludGVybmFsIGRhdGEgZ3JhYgoJCQkJCXZhciByb3cgPSBkYXRhWyBpZHggXTsKCQoJCQkJCWlmICggcm93Ll9kZXRhaWxzU2hvdyApIHsKCQkJCQkJcm93Ll9kZXRhaWxzLmluc2VydEFmdGVyKCByb3cublRyICk7CgkJCQkJfQoJCQkJfSApOwoJCQl9ICk7CgkKCQkJLy8gQ29sdW1uIHZpc2liaWxpdHkgY2hhbmdlIC0gdXBkYXRlIHRoZSBjb2xzcGFuCgkJCWFwaS5vbiggY29sdmlzRXZlbnQsIGZ1bmN0aW9uICggZSwgY3R4LCBpZHgsIHZpcyApIHsKCQkJCWlmICggc2V0dGluZ3MgIT09IGN0eCApIHsKCQkJCQlyZXR1cm47CgkJCQl9CgkKCQkJCS8vIFVwZGF0ZSB0aGUgY29sc3BhbiBmb3IgdGhlIGRldGFpbHMgcm93cyAobm90ZSwgb25seSBpZiBpdCBhbHJlYWR5IGhhcwoJCQkJLy8gYSBjb2xzcGFuKQoJCQkJdmFyIHJvdywgdmlzaWJsZSA9IF9mblZpc2JsZUNvbHVtbnMoIGN0eCApOwoJCgkJCQlmb3IgKCB2YXIgaT0wLCBpZW49ZGF0YS5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCQlyb3cgPSBkYXRhW2ldOwoJCgkJCQkJaWYgKCByb3cuX2RldGFpbHMgKSB7CgkJCQkJCXJvdy5fZGV0YWlscy5jaGlsZHJlbigndGRbY29sc3Bhbl0nKS5hdHRyKCdjb2xzcGFuJywgdmlzaWJsZSApOwoJCQkJCX0KCQkJCX0KCQkJfSApOwoJCgkJCS8vIFRhYmxlIGRlc3Ryb3llZCAtIG51a2UgYW55IGNoaWxkIHJvd3MKCQkJYXBpLm9uKCBkZXN0cm95RXZlbnQsIGZ1bmN0aW9uICggZSwgY3R4ICkgewoJCQkJaWYgKCBzZXR0aW5ncyAhPT0gY3R4ICkgewoJCQkJCXJldHVybjsKCQkJCX0KCQoJCQkJZm9yICggdmFyIGk9MCwgaWVuPWRhdGEubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQkJaWYgKCBkYXRhW2ldLl9kZXRhaWxzICkgewoJCQkJCQlfX2RldGFpbHNfcmVtb3ZlKCBhcGksIGkgKTsKCQkJCQl9CgkJCQl9CgkJCX0gKTsKCQl9Cgl9OwoJCgkvLyBTdHJpbmdzIGZvciB0aGUgbWV0aG9kIG5hbWVzIHRvIGhlbHAgbWluaWZpY2F0aW9uCgl2YXIgX2VtcCA9ICcnOwoJdmFyIF9jaGlsZF9vYmogPSBfZW1wKydyb3coKS5jaGlsZCc7Cgl2YXIgX2NoaWxkX210aCA9IF9jaGlsZF9vYmorJygpJzsKCQoJLy8gZGF0YSBjYW4gYmU6CgkvLyAgdHIKCS8vICBzdHJpbmcKCS8vICBqUXVlcnkgb3IgYXJyYXkgb2YgYW55IG9mIHRoZSBhYm92ZQoJX2FwaV9yZWdpc3RlciggX2NoaWxkX210aCwgZnVuY3Rpb24gKCBkYXRhLCBrbGFzcyApIHsKCQl2YXIgY3R4ID0gdGhpcy5jb250ZXh0OwoJCgkJaWYgKCBkYXRhID09PSB1bmRlZmluZWQgKSB7CgkJCS8vIGdldAoJCQlyZXR1cm4gY3R4Lmxlbmd0aCAmJiB0aGlzLmxlbmd0aCA/CgkJCQljdHhbMF0uYW9EYXRhWyB0aGlzWzBdIF0uX2RldGFpbHMgOgoJCQkJdW5kZWZpbmVkOwoJCX0KCQllbHNlIGlmICggZGF0YSA9PT0gdHJ1ZSApIHsKCQkJLy8gc2hvdwoJCQl0aGlzLmNoaWxkLnNob3coKTsKCQl9CgkJZWxzZSBpZiAoIGRhdGEgPT09IGZhbHNlICkgewoJCQkvLyByZW1vdmUKCQkJX19kZXRhaWxzX3JlbW92ZSggdGhpcyApOwoJCX0KCQllbHNlIGlmICggY3R4Lmxlbmd0aCAmJiB0aGlzLmxlbmd0aCApIHsKCQkJLy8gc2V0CgkJCV9fZGV0YWlsc19hZGQoIGN0eFswXSwgY3R4WzBdLmFvRGF0YVsgdGhpc1swXSBdLCBkYXRhLCBrbGFzcyApOwoJCX0KCQoJCXJldHVybiB0aGlzOwoJfSApOwoJCgkKCV9hcGlfcmVnaXN0ZXIoIFsKCQlfY2hpbGRfb2JqKycuc2hvdygpJywKCQlfY2hpbGRfbXRoKycuc2hvdygpJyAvLyBvbmx5IHdoZW4gYGNoaWxkKClgIHdhcyBjYWxsZWQgd2l0aCBwYXJhbWV0ZXJzICh3aXRob3V0CgldLCBmdW5jdGlvbiAoIHNob3cgKSB7ICAgLy8gaXQgcmV0dXJucyBhbiBvYmplY3QgYW5kIHRoaXMgbWV0aG9kIGlzIG5vdCBleGVjdXRlZCkKCQlfX2RldGFpbHNfZGlzcGxheSggdGhpcywgdHJ1ZSApOwoJCXJldHVybiB0aGlzOwoJfSApOwoJCgkKCV9hcGlfcmVnaXN0ZXIoIFsKCQlfY2hpbGRfb2JqKycuaGlkZSgpJywKCQlfY2hpbGRfbXRoKycuaGlkZSgpJyAvLyBvbmx5IHdoZW4gYGNoaWxkKClgIHdhcyBjYWxsZWQgd2l0aCBwYXJhbWV0ZXJzICh3aXRob3V0CgldLCBmdW5jdGlvbiAoKSB7ICAgICAgICAgLy8gaXQgcmV0dXJucyBhbiBvYmplY3QgYW5kIHRoaXMgbWV0aG9kIGlzIG5vdCBleGVjdXRlZCkKCQlfX2RldGFpbHNfZGlzcGxheSggdGhpcywgZmFsc2UgKTsKCQlyZXR1cm4gdGhpczsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyKCBbCgkJX2NoaWxkX29iaisnLnJlbW92ZSgpJywKCQlfY2hpbGRfbXRoKycucmVtb3ZlKCknIC8vIG9ubHkgd2hlbiBgY2hpbGQoKWAgd2FzIGNhbGxlZCB3aXRoIHBhcmFtZXRlcnMgKHdpdGhvdXQKCV0sIGZ1bmN0aW9uICgpIHsgICAgICAgICAgIC8vIGl0IHJldHVybnMgYW4gb2JqZWN0IGFuZCB0aGlzIG1ldGhvZCBpcyBub3QgZXhlY3V0ZWQpCgkJX19kZXRhaWxzX3JlbW92ZSggdGhpcyApOwoJCXJldHVybiB0aGlzOwoJfSApOwoJCgkKCV9hcGlfcmVnaXN0ZXIoIF9jaGlsZF9vYmorJy5pc1Nob3duKCknLCBmdW5jdGlvbiAoKSB7CgkJdmFyIGN0eCA9IHRoaXMuY29udGV4dDsKCQoJCWlmICggY3R4Lmxlbmd0aCAmJiB0aGlzLmxlbmd0aCApIHsKCQkJLy8gX2RldGFpbHNTaG93biBhcyBmYWxzZSBvciB1bmRlZmluZWQgd2lsbCBmYWxsIHRocm91Z2ggdG8gcmV0dXJuIGZhbHNlCgkJCXJldHVybiBjdHhbMF0uYW9EYXRhWyB0aGlzWzBdIF0uX2RldGFpbHNTaG93IHx8IGZhbHNlOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9ICk7CgkKCQoJCgkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKCSAqIENvbHVtbnMKCSAqCgkgKiB7aW50ZWdlcn0gICAgICAgICAgIC0gY29sdW1uIGluZGV4ICg+PTAgY291bnQgZnJvbSBsZWZ0LCA8MCBjb3VudCBmcm9tIHJpZ2h0KQoJICogIntpbnRlZ2VyfTp2aXNJZHgiICAtIHZpc2libGUgY29sdW1uIGluZGV4IChpLmUuIHRyYW5zbGF0ZSB0byBjb2x1bW4gaW5kZXgpICAoPj0wIGNvdW50IGZyb20gbGVmdCwgPDAgY291bnQgZnJvbSByaWdodCkKCSAqICJ7aW50ZWdlcn06dmlzaWJsZSIgLSBhbGlhcyBmb3Ige2ludGVnZXJ9OnZpc0lkeCAgKD49MCBjb3VudCBmcm9tIGxlZnQsIDwwIGNvdW50IGZyb20gcmlnaHQpCgkgKiAie3N0cmluZ306bmFtZSIgICAgIC0gY29sdW1uIG5hbWUKCSAqICJ7c3RyaW5nfSIgICAgICAgICAgLSBqUXVlcnkgc2VsZWN0b3Igb24gY29sdW1uIGhlYWRlciBub2RlcwoJICoKCSAqLwoJCgkvLyBjYW4gYmUgYW4gYXJyYXkgb2YgdGhlc2UgaXRlbXMsIGNvbW1hIHNlcGFyYXRlZCBsaXN0LCBvciBhbiBhcnJheSBvZiBjb21tYQoJLy8gc2VwYXJhdGVkIGxpc3RzCgkKCXZhciBfX3JlX2NvbHVtbl9zZWxlY3RvciA9IC9eKFteOl0rKToobmFtZXx2aXNJZHh8dmlzaWJsZSkkLzsKCQoJCgkvLyByMSBhbmQgcjIgYXJlIHJlZHVuZGFudCAtIGJ1dCBpdCBtZWFucyB0aGF0IHRoZSBwYXJhbWV0ZXJzIG1hdGNoIGZvciB0aGUKCS8vIGl0ZXJhdG9yIGNhbGxiYWNrIGluIGNvbHVtbnMoKS5kYXRhKCkKCXZhciBfX2NvbHVtbkRhdGEgPSBmdW5jdGlvbiAoIHNldHRpbmdzLCBjb2x1bW4sIHIxLCByMiwgcm93cyApIHsKCQl2YXIgYSA9IFtdOwoJCWZvciAoIHZhciByb3c9MCwgaWVuPXJvd3MubGVuZ3RoIDsgcm93PGllbiA7IHJvdysrICkgewoJCQlhLnB1c2goIF9mbkdldENlbGxEYXRhKCBzZXR0aW5ncywgcm93c1tyb3ddLCBjb2x1bW4gKSApOwoJCX0KCQlyZXR1cm4gYTsKCX07CgkKCQoJdmFyIF9fY29sdW1uX3NlbGVjdG9yID0gZnVuY3Rpb24gKCBzZXR0aW5ncywgc2VsZWN0b3IsIG9wdHMgKQoJewoJCXZhcgoJCQljb2x1bW5zID0gc2V0dGluZ3MuYW9Db2x1bW5zLAoJCQluYW1lcyA9IF9wbHVjayggY29sdW1ucywgJ3NOYW1lJyApLAoJCQlub2RlcyA9IF9wbHVjayggY29sdW1ucywgJ25UaCcgKTsKCQoJCXZhciBydW4gPSBmdW5jdGlvbiAoIHMgKSB7CgkJCXZhciBzZWxJbnQgPSBfaW50VmFsKCBzICk7CgkKCQkJLy8gU2VsZWN0b3IgLSBhbGwKCQkJaWYgKCBzID09PSAnJyApIHsKCQkJCXJldHVybiBfcmFuZ2UoIGNvbHVtbnMubGVuZ3RoICk7CgkJCX0KCQoJCQkvLyBTZWxlY3RvciAtIGluZGV4CgkJCWlmICggc2VsSW50ICE9PSBudWxsICkgewoJCQkJcmV0dXJuIFsgc2VsSW50ID49IDAgPwoJCQkJCXNlbEludCA6IC8vIENvdW50IGZyb20gbGVmdAoJCQkJCWNvbHVtbnMubGVuZ3RoICsgc2VsSW50IC8vIENvdW50IGZyb20gcmlnaHQgKCsgYmVjYXVzZSBpdHMgYSBuZWdhdGl2ZSB2YWx1ZSkKCQkJCV07CgkJCX0KCQoJCQkvLyBTZWxlY3RvciA9IGZ1bmN0aW9uCgkJCWlmICggdHlwZW9mIHMgPT09ICdmdW5jdGlvbicgKSB7CgkJCQl2YXIgcm93cyA9IF9zZWxlY3Rvcl9yb3dfaW5kZXhlcyggc2V0dGluZ3MsIG9wdHMgKTsKCQoJCQkJcmV0dXJuICQubWFwKCBjb2x1bW5zLCBmdW5jdGlvbiAoY29sLCBpZHgpIHsKCQkJCQlyZXR1cm4gcygKCQkJCQkJCWlkeCwKCQkJCQkJCV9fY29sdW1uRGF0YSggc2V0dGluZ3MsIGlkeCwgMCwgMCwgcm93cyApLAoJCQkJCQkJbm9kZXNbIGlkeCBdCgkJCQkJCSkgPyBpZHggOiBudWxsOwoJCQkJfSApOwoJCQl9CgkKCQkJLy8galF1ZXJ5IG9yIHN0cmluZyBzZWxlY3RvcgoJCQl2YXIgbWF0Y2ggPSB0eXBlb2YgcyA9PT0gJ3N0cmluZycgPwoJCQkJcy5tYXRjaCggX19yZV9jb2x1bW5fc2VsZWN0b3IgKSA6CgkJCQknJzsKCQoJCQlpZiAoIG1hdGNoICkgewoJCQkJc3dpdGNoKCBtYXRjaFsyXSApIHsKCQkJCQljYXNlICd2aXNJZHgnOgoJCQkJCWNhc2UgJ3Zpc2libGUnOgoJCQkJCQl2YXIgaWR4ID0gcGFyc2VJbnQoIG1hdGNoWzFdLCAxMCApOwoJCQkJCQkvLyBWaXNpYmxlIGluZGV4IGdpdmVuLCBjb252ZXJ0IHRvIGNvbHVtbiBpbmRleAoJCQkJCQlpZiAoIGlkeCA8IDAgKSB7CgkJCQkJCQkvLyBDb3VudGluZyBmcm9tIHRoZSByaWdodAoJCQkJCQkJdmFyIHZpc0NvbHVtbnMgPSAkLm1hcCggY29sdW1ucywgZnVuY3Rpb24gKGNvbCxpKSB7CgkJCQkJCQkJcmV0dXJuIGNvbC5iVmlzaWJsZSA/IGkgOiBudWxsOwoJCQkJCQkJfSApOwoJCQkJCQkJcmV0dXJuIFsgdmlzQ29sdW1uc1sgdmlzQ29sdW1ucy5sZW5ndGggKyBpZHggXSBdOwoJCQkJCQl9CgkJCQkJCS8vIENvdW50aW5nIGZyb20gdGhlIGxlZnQKCQkJCQkJcmV0dXJuIFsgX2ZuVmlzaWJsZVRvQ29sdW1uSW5kZXgoIHNldHRpbmdzLCBpZHggKSBdOwoJCgkJCQkJY2FzZSAnbmFtZSc6CgkJCQkJCS8vIG1hdGNoIGJ5IG5hbWUuIGBuYW1lc2AgaXMgY29sdW1uIGluZGV4IGNvbXBsZXRlIGFuZCBpbiBvcmRlcgoJCQkJCQlyZXR1cm4gJC5tYXAoIG5hbWVzLCBmdW5jdGlvbiAobmFtZSwgaSkgewoJCQkJCQkJcmV0dXJuIG5hbWUgPT09IG1hdGNoWzFdID8gaSA6IG51bGw7CgkJCQkJCX0gKTsKCQoJCQkJCWRlZmF1bHQ6CgkJCQkJCXJldHVybiBbXTsKCQkJCX0KCQkJfQoJCgkJCS8vIENlbGwgaW4gdGhlIHRhYmxlIGJvZHkKCQkJaWYgKCBzLm5vZGVOYW1lICYmIHMuX0RUX0NlbGxJbmRleCApIHsKCQkJCXJldHVybiBbIHMuX0RUX0NlbGxJbmRleC5jb2x1bW4gXTsKCQkJfQoJCgkJCS8vIGpRdWVyeSBzZWxlY3RvciBvbiB0aGUgVEggZWxlbWVudHMgZm9yIHRoZSBjb2x1bW5zCgkJCXZhciBqcVJlc3VsdCA9ICQoIG5vZGVzICkKCQkJCS5maWx0ZXIoIHMgKQoJCQkJLm1hcCggZnVuY3Rpb24gKCkgewoJCQkJCXJldHVybiAkLmluQXJyYXkoIHRoaXMsIG5vZGVzICk7IC8vIGBub2Rlc2AgaXMgY29sdW1uIGluZGV4IGNvbXBsZXRlIGFuZCBpbiBvcmRlcgoJCQkJfSApCgkJCQkudG9BcnJheSgpOwoJCgkJCWlmICgganFSZXN1bHQubGVuZ3RoIHx8ICEgcy5ub2RlTmFtZSApIHsKCQkJCXJldHVybiBqcVJlc3VsdDsKCQkJfQoJCgkJCS8vIE90aGVyd2lzZSBhIG5vZGUgd2hpY2ggbWlnaHQgaGF2ZSBhIGBkdC1jb2x1bW5gIGRhdGEgYXR0cmlidXRlLCBvciBiZQoJCQkvLyBhIGNoaWxkIG9yIHN1Y2ggYW4gZWxlbWVudAoJCQl2YXIgaG9zdCA9ICQocykuY2xvc2VzdCgnKltkYXRhLWR0LWNvbHVtbl0nKTsKCQkJcmV0dXJuIGhvc3QubGVuZ3RoID8KCQkJCVsgaG9zdC5kYXRhKCdkdC1jb2x1bW4nKSBdIDoKCQkJCVtdOwoJCX07CgkKCQlyZXR1cm4gX3NlbGVjdG9yX3J1biggJ2NvbHVtbicsIHNlbGVjdG9yLCBydW4sIHNldHRpbmdzLCBvcHRzICk7Cgl9OwoJCgkKCXZhciBfX3NldENvbHVtblZpcyA9IGZ1bmN0aW9uICggc2V0dGluZ3MsIGNvbHVtbiwgdmlzICkgewoJCXZhcgoJCQljb2xzID0gc2V0dGluZ3MuYW9Db2x1bW5zLAoJCQljb2wgID0gY29sc1sgY29sdW1uIF0sCgkJCWRhdGEgPSBzZXR0aW5ncy5hb0RhdGEsCgkJCXJvdywgY2VsbHMsIGksIGllbiwgdHI7CgkKCQkvLyBHZXQKCQlpZiAoIHZpcyA9PT0gdW5kZWZpbmVkICkgewoJCQlyZXR1cm4gY29sLmJWaXNpYmxlOwoJCX0KCQoJCS8vIFNldAoJCS8vIE5vIGNoYW5nZQoJCWlmICggY29sLmJWaXNpYmxlID09PSB2aXMgKSB7CgkJCXJldHVybjsKCQl9CgkKCQlpZiAoIHZpcyApIHsKCQkJLy8gSW5zZXJ0IGNvbHVtbgoJCQkvLyBOZWVkIHRvIGRlY2lkZSBpZiB3ZSBzaG91bGQgdXNlIGFwcGVuZENoaWxkIG9yIGluc2VydEJlZm9yZQoJCQl2YXIgaW5zZXJ0QmVmb3JlID0gJC5pbkFycmF5KCB0cnVlLCBfcGx1Y2soY29scywgJ2JWaXNpYmxlJyksIGNvbHVtbisxICk7CgkKCQkJZm9yICggaT0wLCBpZW49ZGF0YS5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCXRyID0gZGF0YVtpXS5uVHI7CgkJCQljZWxscyA9IGRhdGFbaV0uYW5DZWxsczsKCQoJCQkJaWYgKCB0ciApIHsKCQkJCQkvLyBpbnNlcnRCZWZvcmUgY2FuIGFjdCBsaWtlIGFwcGVuZENoaWxkIGlmIDJuZCBhcmcgaXMgbnVsbAoJCQkJCXRyLmluc2VydEJlZm9yZSggY2VsbHNbIGNvbHVtbiBdLCBjZWxsc1sgaW5zZXJ0QmVmb3JlIF0gfHwgbnVsbCApOwoJCQkJfQoJCQl9CgkJfQoJCWVsc2UgewoJCQkvLyBSZW1vdmUgY29sdW1uCgkJCSQoIF9wbHVjayggc2V0dGluZ3MuYW9EYXRhLCAnYW5DZWxscycsIGNvbHVtbiApICkuZGV0YWNoKCk7CgkJfQoJCgkJLy8gQ29tbW9uIGFjdGlvbnMKCQljb2wuYlZpc2libGUgPSB2aXM7Cgl9OwoJCgkKCV9hcGlfcmVnaXN0ZXIoICdjb2x1bW5zKCknLCBmdW5jdGlvbiAoIHNlbGVjdG9yLCBvcHRzICkgewoJCS8vIGFyZ3VtZW50IHNoaWZ0aW5nCgkJaWYgKCBzZWxlY3RvciA9PT0gdW5kZWZpbmVkICkgewoJCQlzZWxlY3RvciA9ICcnOwoJCX0KCQllbHNlIGlmICggJC5pc1BsYWluT2JqZWN0KCBzZWxlY3RvciApICkgewoJCQlvcHRzID0gc2VsZWN0b3I7CgkJCXNlbGVjdG9yID0gJyc7CgkJfQoJCgkJb3B0cyA9IF9zZWxlY3Rvcl9vcHRzKCBvcHRzICk7CgkKCQl2YXIgaW5zdCA9IHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggc2V0dGluZ3MgKSB7CgkJCXJldHVybiBfX2NvbHVtbl9zZWxlY3Rvciggc2V0dGluZ3MsIHNlbGVjdG9yLCBvcHRzICk7CgkJfSwgMSApOwoJCgkJLy8gV2FudCBhcmd1bWVudCBzaGlmdGluZyBoZXJlIGFuZCBpbiBfcm93X3NlbGVjdG9yPwoJCWluc3Quc2VsZWN0b3IuY29scyA9IHNlbGVjdG9yOwoJCWluc3Quc2VsZWN0b3Iub3B0cyA9IG9wdHM7CgkKCQlyZXR1cm4gaW5zdDsKCX0gKTsKCQoJX2FwaV9yZWdpc3RlclBsdXJhbCggJ2NvbHVtbnMoKS5oZWFkZXIoKScsICdjb2x1bW4oKS5oZWFkZXIoKScsIGZ1bmN0aW9uICggc2VsZWN0b3IsIG9wdHMgKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICdjb2x1bW4nLCBmdW5jdGlvbiAoIHNldHRpbmdzLCBjb2x1bW4gKSB7CgkJCXJldHVybiBzZXR0aW5ncy5hb0NvbHVtbnNbY29sdW1uXS5uVGg7CgkJfSwgMSApOwoJfSApOwoJCglfYXBpX3JlZ2lzdGVyUGx1cmFsKCAnY29sdW1ucygpLmZvb3RlcigpJywgJ2NvbHVtbigpLmZvb3RlcigpJywgZnVuY3Rpb24gKCBzZWxlY3Rvciwgb3B0cyApIHsKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ2NvbHVtbicsIGZ1bmN0aW9uICggc2V0dGluZ3MsIGNvbHVtbiApIHsKCQkJcmV0dXJuIHNldHRpbmdzLmFvQ29sdW1uc1tjb2x1bW5dLm5UZjsKCQl9LCAxICk7Cgl9ICk7CgkKCV9hcGlfcmVnaXN0ZXJQbHVyYWwoICdjb2x1bW5zKCkuZGF0YSgpJywgJ2NvbHVtbigpLmRhdGEoKScsIGZ1bmN0aW9uICgpIHsKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ2NvbHVtbi1yb3dzJywgX19jb2x1bW5EYXRhLCAxICk7Cgl9ICk7CgkKCV9hcGlfcmVnaXN0ZXJQbHVyYWwoICdjb2x1bW5zKCkuZGF0YVNyYygpJywgJ2NvbHVtbigpLmRhdGFTcmMoKScsIGZ1bmN0aW9uICgpIHsKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ2NvbHVtbicsIGZ1bmN0aW9uICggc2V0dGluZ3MsIGNvbHVtbiApIHsKCQkJcmV0dXJuIHNldHRpbmdzLmFvQ29sdW1uc1tjb2x1bW5dLm1EYXRhOwoJCX0sIDEgKTsKCX0gKTsKCQoJX2FwaV9yZWdpc3RlclBsdXJhbCggJ2NvbHVtbnMoKS5jYWNoZSgpJywgJ2NvbHVtbigpLmNhY2hlKCknLCBmdW5jdGlvbiAoIHR5cGUgKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICdjb2x1bW4tcm93cycsIGZ1bmN0aW9uICggc2V0dGluZ3MsIGNvbHVtbiwgaSwgaiwgcm93cyApIHsKCQkJcmV0dXJuIF9wbHVja19vcmRlciggc2V0dGluZ3MuYW9EYXRhLCByb3dzLAoJCQkJdHlwZSA9PT0gJ3NlYXJjaCcgPyAnX2FGaWx0ZXJEYXRhJyA6ICdfYVNvcnREYXRhJywgY29sdW1uCgkJCSk7CgkJfSwgMSApOwoJfSApOwoJCglfYXBpX3JlZ2lzdGVyUGx1cmFsKCAnY29sdW1ucygpLm5vZGVzKCknLCAnY29sdW1uKCkubm9kZXMoKScsIGZ1bmN0aW9uICgpIHsKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ2NvbHVtbi1yb3dzJywgZnVuY3Rpb24gKCBzZXR0aW5ncywgY29sdW1uLCBpLCBqLCByb3dzICkgewoJCQlyZXR1cm4gX3BsdWNrX29yZGVyKCBzZXR0aW5ncy5hb0RhdGEsIHJvd3MsICdhbkNlbGxzJywgY29sdW1uICkgOwoJCX0sIDEgKTsKCX0gKTsKCQoJX2FwaV9yZWdpc3RlclBsdXJhbCggJ2NvbHVtbnMoKS52aXNpYmxlKCknLCAnY29sdW1uKCkudmlzaWJsZSgpJywgZnVuY3Rpb24gKCB2aXMsIGNhbGMgKSB7CgkJdmFyIHRoYXQgPSB0aGlzOwoJCXZhciByZXQgPSB0aGlzLml0ZXJhdG9yKCAnY29sdW1uJywgZnVuY3Rpb24gKCBzZXR0aW5ncywgY29sdW1uICkgewoJCQlpZiAoIHZpcyA9PT0gdW5kZWZpbmVkICkgewoJCQkJcmV0dXJuIHNldHRpbmdzLmFvQ29sdW1uc1sgY29sdW1uIF0uYlZpc2libGU7CgkJCX0gLy8gZWxzZQoJCQlfX3NldENvbHVtblZpcyggc2V0dGluZ3MsIGNvbHVtbiwgdmlzICk7CgkJfSApOwoJCgkJLy8gR3JvdXAgdGhlIGNvbHVtbiB2aXNpYmlsaXR5IGNoYW5nZXMKCQlpZiAoIHZpcyAhPT0gdW5kZWZpbmVkICkgewoJCQl0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIHNldHRpbmdzICkgewoJCQkJLy8gUmVkcmF3IHRoZSBoZWFkZXIgYWZ0ZXIgY2hhbmdlcwoJCQkJX2ZuRHJhd0hlYWQoIHNldHRpbmdzLCBzZXR0aW5ncy5hb0hlYWRlciApOwoJCQkJX2ZuRHJhd0hlYWQoIHNldHRpbmdzLCBzZXR0aW5ncy5hb0Zvb3RlciApOwoJCQoJCQkJLy8gVXBkYXRlIGNvbHNwYW4gZm9yIG5vIHJlY29yZHMgZGlzcGxheS4gQ2hpbGQgcm93cyBhbmQgZXh0ZW5zaW9ucyB3aWxsIHVzZSB0aGVpciBvd24KCQkJCS8vIGxpc3RlbmVycyB0byBkbyB0aGlzIC0gb25seSBuZWVkIHRvIHVwZGF0ZSB0aGUgZW1wdHkgdGFibGUgaXRlbSBoZXJlCgkJCQlpZiAoICEgc2V0dGluZ3MuYWlEaXNwbGF5Lmxlbmd0aCApIHsKCQkJCQkkKHNldHRpbmdzLm5UQm9keSkuZmluZCgndGRbY29sc3Bhbl0nKS5hdHRyKCdjb2xzcGFuJywgX2ZuVmlzYmxlQ29sdW1ucyhzZXR0aW5ncykpOwoJCQkJfQoJCQoJCQkJX2ZuU2F2ZVN0YXRlKCBzZXR0aW5ncyApOwoJCgkJCQkvLyBTZWNvbmQgbG9vcCBvbmNlIHRoZSBmaXJzdCBpcyBkb25lIGZvciBldmVudHMKCQkJCXRoYXQuaXRlcmF0b3IoICdjb2x1bW4nLCBmdW5jdGlvbiAoIHNldHRpbmdzLCBjb2x1bW4gKSB7CgkJCQkJX2ZuQ2FsbGJhY2tGaXJlKCBzZXR0aW5ncywgbnVsbCwgJ2NvbHVtbi12aXNpYmlsaXR5JywgW3NldHRpbmdzLCBjb2x1bW4sIHZpcywgY2FsY10gKTsKCQkJCX0gKTsKCQoJCQkJaWYgKCBjYWxjID09PSB1bmRlZmluZWQgfHwgY2FsYyApIHsKCQkJCQl0aGF0LmNvbHVtbnMuYWRqdXN0KCk7CgkJCQl9CgkJCX0pOwoJCX0KCQoJCXJldHVybiByZXQ7Cgl9ICk7CgkKCV9hcGlfcmVnaXN0ZXJQbHVyYWwoICdjb2x1bW5zKCkuaW5kZXhlcygpJywgJ2NvbHVtbigpLmluZGV4KCknLCBmdW5jdGlvbiAoIHR5cGUgKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICdjb2x1bW4nLCBmdW5jdGlvbiAoIHNldHRpbmdzLCBjb2x1bW4gKSB7CgkJCXJldHVybiB0eXBlID09PSAndmlzaWJsZScgPwoJCQkJX2ZuQ29sdW1uSW5kZXhUb1Zpc2libGUoIHNldHRpbmdzLCBjb2x1bW4gKSA6CgkJCQljb2x1bW47CgkJfSwgMSApOwoJfSApOwoJCglfYXBpX3JlZ2lzdGVyKCAnY29sdW1ucy5hZGp1c3QoKScsIGZ1bmN0aW9uICgpIHsKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBzZXR0aW5ncyApIHsKCQkJX2ZuQWRqdXN0Q29sdW1uU2l6aW5nKCBzZXR0aW5ncyApOwoJCX0sIDEgKTsKCX0gKTsKCQoJX2FwaV9yZWdpc3RlciggJ2NvbHVtbi5pbmRleCgpJywgZnVuY3Rpb24gKCB0eXBlLCBpZHggKSB7CgkJaWYgKCB0aGlzLmNvbnRleHQubGVuZ3RoICE9PSAwICkgewoJCQl2YXIgY3R4ID0gdGhpcy5jb250ZXh0WzBdOwoJCgkJCWlmICggdHlwZSA9PT0gJ2Zyb21WaXNpYmxlJyB8fCB0eXBlID09PSAndG9EYXRhJyApIHsKCQkJCXJldHVybiBfZm5WaXNpYmxlVG9Db2x1bW5JbmRleCggY3R4LCBpZHggKTsKCQkJfQoJCQllbHNlIGlmICggdHlwZSA9PT0gJ2Zyb21EYXRhJyB8fCB0eXBlID09PSAndG9WaXNpYmxlJyApIHsKCQkJCXJldHVybiBfZm5Db2x1bW5JbmRleFRvVmlzaWJsZSggY3R4LCBpZHggKTsKCQkJfQoJCX0KCX0gKTsKCQoJX2FwaV9yZWdpc3RlciggJ2NvbHVtbigpJywgZnVuY3Rpb24gKCBzZWxlY3Rvciwgb3B0cyApIHsKCQlyZXR1cm4gX3NlbGVjdG9yX2ZpcnN0KCB0aGlzLmNvbHVtbnMoIHNlbGVjdG9yLCBvcHRzICkgKTsKCX0gKTsKCQoJCgkKCXZhciBfX2NlbGxfc2VsZWN0b3IgPSBmdW5jdGlvbiAoIHNldHRpbmdzLCBzZWxlY3Rvciwgb3B0cyApCgl7CgkJdmFyIGRhdGEgPSBzZXR0aW5ncy5hb0RhdGE7CgkJdmFyIHJvd3MgPSBfc2VsZWN0b3Jfcm93X2luZGV4ZXMoIHNldHRpbmdzLCBvcHRzICk7CgkJdmFyIGNlbGxzID0gX3JlbW92ZUVtcHR5KCBfcGx1Y2tfb3JkZXIoIGRhdGEsIHJvd3MsICdhbkNlbGxzJyApICk7CgkJdmFyIGFsbENlbGxzID0gJCggW10uY29uY2F0LmFwcGx5KFtdLCBjZWxscykgKTsKCQl2YXIgcm93OwoJCXZhciBjb2x1bW5zID0gc2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aDsKCQl2YXIgYSwgaSwgaWVuLCBqLCBvLCBob3N0OwoJCgkJdmFyIHJ1biA9IGZ1bmN0aW9uICggcyApIHsKCQkJdmFyIGZuU2VsZWN0b3IgPSB0eXBlb2YgcyA9PT0gJ2Z1bmN0aW9uJzsKCQoJCQlpZiAoIHMgPT09IG51bGwgfHwgcyA9PT0gdW5kZWZpbmVkIHx8IGZuU2VsZWN0b3IgKSB7CgkJCQkvLyBBbGwgY2VsbHMgYW5kIGZ1bmN0aW9uIHNlbGVjdG9ycwoJCQkJYSA9IFtdOwoJCgkJCQlmb3IgKCBpPTAsIGllbj1yb3dzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJCXJvdyA9IHJvd3NbaV07CgkKCQkJCQlmb3IgKCBqPTAgOyBqPGNvbHVtbnMgOyBqKysgKSB7CgkJCQkJCW8gPSB7CgkJCQkJCQlyb3c6IHJvdywKCQkJCQkJCWNvbHVtbjogagoJCQkJCQl9OwoJCgkJCQkJCWlmICggZm5TZWxlY3RvciApIHsKCQkJCQkJCS8vIFNlbGVjdG9yIC0gZnVuY3Rpb24KCQkJCQkJCWhvc3QgPSBkYXRhWyByb3cgXTsKCQoJCQkJCQkJaWYgKCBzKCBvLCBfZm5HZXRDZWxsRGF0YShzZXR0aW5ncywgcm93LCBqKSwgaG9zdC5hbkNlbGxzID8gaG9zdC5hbkNlbGxzW2pdIDogbnVsbCApICkgewoJCQkJCQkJCWEucHVzaCggbyApOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWVsc2UgewoJCQkJCQkJLy8gU2VsZWN0b3IgLSBhbGwKCQkJCQkJCWEucHVzaCggbyApOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCgkJCQlyZXR1cm4gYTsKCQkJfQoJCQkKCQkJLy8gU2VsZWN0b3IgLSBpbmRleAoJCQlpZiAoICQuaXNQbGFpbk9iamVjdCggcyApICkgewoJCQkJLy8gVmFsaWQgY2VsbCBpbmRleCBhbmQgaXRzIGluIHRoZSBhcnJheSBvZiBzZWxlY3RhYmxlIHJvd3MKCQkJCXJldHVybiBzLmNvbHVtbiAhPT0gdW5kZWZpbmVkICYmIHMucm93ICE9PSB1bmRlZmluZWQgJiYgJC5pbkFycmF5KCBzLnJvdywgcm93cyApICE9PSAtMSA/CgkJCQkJW3NdIDoKCQkJCQlbXTsKCQkJfQoJCgkJCS8vIFNlbGVjdG9yIC0galF1ZXJ5IGZpbHRlcmVkIGNlbGxzCgkJCXZhciBqcVJlc3VsdCA9IGFsbENlbGxzCgkJCQkuZmlsdGVyKCBzICkKCQkJCS5tYXAoIGZ1bmN0aW9uIChpLCBlbCkgewoJCQkJCXJldHVybiB7IC8vIHVzZSBhIG5ldyBvYmplY3QsIGluIGNhc2Ugc29tZW9uZSBjaGFuZ2VzIHRoZSB2YWx1ZXMKCQkJCQkJcm93OiAgICBlbC5fRFRfQ2VsbEluZGV4LnJvdywKCQkJCQkJY29sdW1uOiBlbC5fRFRfQ2VsbEluZGV4LmNvbHVtbgoJIAkJCQl9OwoJCQkJfSApCgkJCQkudG9BcnJheSgpOwoJCgkJCWlmICgganFSZXN1bHQubGVuZ3RoIHx8ICEgcy5ub2RlTmFtZSApIHsKCQkJCXJldHVybiBqcVJlc3VsdDsKCQkJfQoJCgkJCS8vIE90aGVyd2lzZSB0aGUgc2VsZWN0b3IgaXMgYSBub2RlLCBhbmQgdGhlcmUgaXMgb25lIGxhc3Qgb3B0aW9uIC0gdGhlCgkJCS8vIGVsZW1lbnQgbWlnaHQgYmUgYSBjaGlsZCBvZiBhbiBlbGVtZW50IHdoaWNoIGhhcyBkdC1yb3cgYW5kIGR0LWNvbHVtbgoJCQkvLyBkYXRhIGF0dHJpYnV0ZXMKCQkJaG9zdCA9ICQocykuY2xvc2VzdCgnKltkYXRhLWR0LXJvd10nKTsKCQkJcmV0dXJuIGhvc3QubGVuZ3RoID8KCQkJCVsgewoJCQkJCXJvdzogaG9zdC5kYXRhKCdkdC1yb3cnKSwKCQkJCQljb2x1bW46IGhvc3QuZGF0YSgnZHQtY29sdW1uJykKCQkJCX0gXSA6CgkJCQlbXTsKCQl9OwoJCgkJcmV0dXJuIF9zZWxlY3Rvcl9ydW4oICdjZWxsJywgc2VsZWN0b3IsIHJ1biwgc2V0dGluZ3MsIG9wdHMgKTsKCX07CgkKCQoJCgkKCV9hcGlfcmVnaXN0ZXIoICdjZWxscygpJywgZnVuY3Rpb24gKCByb3dTZWxlY3RvciwgY29sdW1uU2VsZWN0b3IsIG9wdHMgKSB7CgkJLy8gQXJndW1lbnQgc2hpZnRpbmcKCQlpZiAoICQuaXNQbGFpbk9iamVjdCggcm93U2VsZWN0b3IgKSApIHsKCQkJLy8gSW5kZXhlcwoJCQlpZiAoIHJvd1NlbGVjdG9yLnJvdyA9PT0gdW5kZWZpbmVkICkgewoJCQkJLy8gU2VsZWN0b3Igb3B0aW9ucyBpbiBmaXJzdCBwYXJhbWV0ZXIKCQkJCW9wdHMgPSByb3dTZWxlY3RvcjsKCQkJCXJvd1NlbGVjdG9yID0gbnVsbDsKCQkJfQoJCQllbHNlIHsKCQkJCS8vIENlbGwgaW5kZXggb2JqZWN0cyBpbiBmaXJzdCBwYXJhbWV0ZXIKCQkJCW9wdHMgPSBjb2x1bW5TZWxlY3RvcjsKCQkJCWNvbHVtblNlbGVjdG9yID0gbnVsbDsKCQkJfQoJCX0KCQlpZiAoICQuaXNQbGFpbk9iamVjdCggY29sdW1uU2VsZWN0b3IgKSApIHsKCQkJb3B0cyA9IGNvbHVtblNlbGVjdG9yOwoJCQljb2x1bW5TZWxlY3RvciA9IG51bGw7CgkJfQoJCgkJLy8gQ2VsbCBzZWxlY3RvcgoJCWlmICggY29sdW1uU2VsZWN0b3IgPT09IG51bGwgfHwgY29sdW1uU2VsZWN0b3IgPT09IHVuZGVmaW5lZCApIHsKCQkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggc2V0dGluZ3MgKSB7CgkJCQlyZXR1cm4gX19jZWxsX3NlbGVjdG9yKCBzZXR0aW5ncywgcm93U2VsZWN0b3IsIF9zZWxlY3Rvcl9vcHRzKCBvcHRzICkgKTsKCQkJfSApOwoJCX0KCQoJCS8vIFRoZSBkZWZhdWx0IGJ1aWx0IGluIG9wdGlvbnMgbmVlZCB0byBhcHBseSB0byByb3cgYW5kIGNvbHVtbnMKCQl2YXIgaW50ZXJuYWxPcHRzID0gb3B0cyA/IHsKCQkJcGFnZTogb3B0cy5wYWdlLAoJCQlvcmRlcjogb3B0cy5vcmRlciwKCQkJc2VhcmNoOiBvcHRzLnNlYXJjaAoJCX0gOiB7fTsKCQoJCS8vIFJvdyArIGNvbHVtbiBzZWxlY3RvcgoJCXZhciBjb2x1bW5zID0gdGhpcy5jb2x1bW5zKCBjb2x1bW5TZWxlY3RvciwgaW50ZXJuYWxPcHRzICk7CgkJdmFyIHJvd3MgPSB0aGlzLnJvd3MoIHJvd1NlbGVjdG9yLCBpbnRlcm5hbE9wdHMgKTsKCQl2YXIgaSwgaWVuLCBqLCBqZW47CgkKCQl2YXIgY2VsbHNOb09wdHMgPSB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIHNldHRpbmdzLCBpZHggKSB7CgkJCXZhciBhID0gW107CgkKCQkJZm9yICggaT0wLCBpZW49cm93c1tpZHhdLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJZm9yICggaj0wLCBqZW49Y29sdW1uc1tpZHhdLmxlbmd0aCA7IGo8amVuIDsgaisrICkgewoJCQkJCWEucHVzaCggewoJCQkJCQlyb3c6ICAgIHJvd3NbaWR4XVtpXSwKCQkJCQkJY29sdW1uOiBjb2x1bW5zW2lkeF1bal0KCQkJCQl9ICk7CgkJCQl9CgkJCX0KCQoJCQlyZXR1cm4gYTsKCQl9LCAxICk7CgkKCQkvLyBUaGVyZSBpcyBjdXJyZW50bHkgb25seSBvbmUgZXh0ZW5zaW9uIHdoaWNoIHVzZXMgYSBjZWxsIHNlbGVjdG9yIGV4dGVuc2lvbgoJCS8vIEl0IGlzIGEgX21ham9yXyBwZXJmb3JtYW5jZSBkcmFnIHRvIHJ1biB0aGlzIGlmIGl0IGlzbid0IG5lZWRlZCwgc28gdGhpcyBpcwoJCS8vIGFuIGV4dGVuc2lvbiBzcGVjaWZpYyBjaGVjayBhdCB0aGUgbW9tZW50CgkJdmFyIGNlbGxzID0gb3B0cyAmJiBvcHRzLnNlbGVjdGVkID8KCQkJdGhpcy5jZWxscyggY2VsbHNOb09wdHMsIG9wdHMgKSA6CgkJCWNlbGxzTm9PcHRzOwoJCgkJJC5leHRlbmQoIGNlbGxzLnNlbGVjdG9yLCB7CgkJCWNvbHM6IGNvbHVtblNlbGVjdG9yLAoJCQlyb3dzOiByb3dTZWxlY3RvciwKCQkJb3B0czogb3B0cwoJCX0gKTsKCQoJCXJldHVybiBjZWxsczsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyUGx1cmFsKCAnY2VsbHMoKS5ub2RlcygpJywgJ2NlbGwoKS5ub2RlKCknLCBmdW5jdGlvbiAoKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICdjZWxsJywgZnVuY3Rpb24gKCBzZXR0aW5ncywgcm93LCBjb2x1bW4gKSB7CgkJCXZhciBkYXRhID0gc2V0dGluZ3MuYW9EYXRhWyByb3cgXTsKCQoJCQlyZXR1cm4gZGF0YSAmJiBkYXRhLmFuQ2VsbHMgPwoJCQkJZGF0YS5hbkNlbGxzWyBjb2x1bW4gXSA6CgkJCQl1bmRlZmluZWQ7CgkJfSwgMSApOwoJfSApOwoJCgkKCV9hcGlfcmVnaXN0ZXIoICdjZWxscygpLmRhdGEoKScsIGZ1bmN0aW9uICgpIHsKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ2NlbGwnLCBmdW5jdGlvbiAoIHNldHRpbmdzLCByb3csIGNvbHVtbiApIHsKCQkJcmV0dXJuIF9mbkdldENlbGxEYXRhKCBzZXR0aW5ncywgcm93LCBjb2x1bW4gKTsKCQl9LCAxICk7Cgl9ICk7CgkKCQoJX2FwaV9yZWdpc3RlclBsdXJhbCggJ2NlbGxzKCkuY2FjaGUoKScsICdjZWxsKCkuY2FjaGUoKScsIGZ1bmN0aW9uICggdHlwZSApIHsKCQl0eXBlID0gdHlwZSA9PT0gJ3NlYXJjaCcgPyAnX2FGaWx0ZXJEYXRhJyA6ICdfYVNvcnREYXRhJzsKCQoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAnY2VsbCcsIGZ1bmN0aW9uICggc2V0dGluZ3MsIHJvdywgY29sdW1uICkgewoJCQlyZXR1cm4gc2V0dGluZ3MuYW9EYXRhWyByb3cgXVsgdHlwZSBdWyBjb2x1bW4gXTsKCQl9LCAxICk7Cgl9ICk7CgkKCQoJX2FwaV9yZWdpc3RlclBsdXJhbCggJ2NlbGxzKCkucmVuZGVyKCknLCAnY2VsbCgpLnJlbmRlcigpJywgZnVuY3Rpb24gKCB0eXBlICkgewoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAnY2VsbCcsIGZ1bmN0aW9uICggc2V0dGluZ3MsIHJvdywgY29sdW1uICkgewoJCQlyZXR1cm4gX2ZuR2V0Q2VsbERhdGEoIHNldHRpbmdzLCByb3csIGNvbHVtbiwgdHlwZSApOwoJCX0sIDEgKTsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyUGx1cmFsKCAnY2VsbHMoKS5pbmRleGVzKCknLCAnY2VsbCgpLmluZGV4KCknLCBmdW5jdGlvbiAoKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICdjZWxsJywgZnVuY3Rpb24gKCBzZXR0aW5ncywgcm93LCBjb2x1bW4gKSB7CgkJCXJldHVybiB7CgkJCQlyb3c6IHJvdywKCQkJCWNvbHVtbjogY29sdW1uLAoJCQkJY29sdW1uVmlzaWJsZTogX2ZuQ29sdW1uSW5kZXhUb1Zpc2libGUoIHNldHRpbmdzLCBjb2x1bW4gKQoJCQl9OwoJCX0sIDEgKTsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyUGx1cmFsKCAnY2VsbHMoKS5pbnZhbGlkYXRlKCknLCAnY2VsbCgpLmludmFsaWRhdGUoKScsIGZ1bmN0aW9uICggc3JjICkgewoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAnY2VsbCcsIGZ1bmN0aW9uICggc2V0dGluZ3MsIHJvdywgY29sdW1uICkgewoJCQlfZm5JbnZhbGlkYXRlKCBzZXR0aW5ncywgcm93LCBzcmMsIGNvbHVtbiApOwoJCX0gKTsKCX0gKTsKCQoJCgkKCV9hcGlfcmVnaXN0ZXIoICdjZWxsKCknLCBmdW5jdGlvbiAoIHJvd1NlbGVjdG9yLCBjb2x1bW5TZWxlY3Rvciwgb3B0cyApIHsKCQlyZXR1cm4gX3NlbGVjdG9yX2ZpcnN0KCB0aGlzLmNlbGxzKCByb3dTZWxlY3RvciwgY29sdW1uU2VsZWN0b3IsIG9wdHMgKSApOwoJfSApOwoJCgkKCV9hcGlfcmVnaXN0ZXIoICdjZWxsKCkuZGF0YSgpJywgZnVuY3Rpb24gKCBkYXRhICkgewoJCXZhciBjdHggPSB0aGlzLmNvbnRleHQ7CgkJdmFyIGNlbGwgPSB0aGlzWzBdOwoJCgkJaWYgKCBkYXRhID09PSB1bmRlZmluZWQgKSB7CgkJCS8vIEdldAoJCQlyZXR1cm4gY3R4Lmxlbmd0aCAmJiBjZWxsLmxlbmd0aCA/CgkJCQlfZm5HZXRDZWxsRGF0YSggY3R4WzBdLCBjZWxsWzBdLnJvdywgY2VsbFswXS5jb2x1bW4gKSA6CgkJCQl1bmRlZmluZWQ7CgkJfQoJCgkJLy8gU2V0CgkJX2ZuU2V0Q2VsbERhdGEoIGN0eFswXSwgY2VsbFswXS5yb3csIGNlbGxbMF0uY29sdW1uLCBkYXRhICk7CgkJX2ZuSW52YWxpZGF0ZSggY3R4WzBdLCBjZWxsWzBdLnJvdywgJ2RhdGEnLCBjZWxsWzBdLmNvbHVtbiApOwoJCgkJcmV0dXJuIHRoaXM7Cgl9ICk7CgkKCQoJCgkvKioKCSAqIEdldCBjdXJyZW50IG9yZGVyaW5nIChzb3J0aW5nKSB0aGF0IGhhcyBiZWVuIGFwcGxpZWQgdG8gdGhlIHRhYmxlLgoJICoKCSAqIEByZXR1cm5zIHthcnJheX0gMkQgYXJyYXkgY29udGFpbmluZyB0aGUgc29ydGluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGZpcnN0CgkgKiAgIHRhYmxlIGluIHRoZSBjdXJyZW50IGNvbnRleHQuIEVhY2ggZWxlbWVudCBpbiB0aGUgcGFyZW50IGFycmF5IHJlcHJlc2VudHMKCSAqICAgYSBjb2x1bW4gYmVpbmcgc29ydGVkIHVwb24gKGkuZS4gbXVsdGktc29ydGluZyB3aXRoIHR3byBjb2x1bW5zIHdvdWxkIGhhdmUKCSAqICAgMiBpbm5lciBhcnJheXMpLiBUaGUgaW5uZXIgYXJyYXlzIG1heSBoYXZlIDIgb3IgMyBlbGVtZW50cy4gVGhlIGZpcnN0IGlzCgkgKiAgIHRoZSBjb2x1bW4gaW5kZXggdGhhdCB0aGUgc29ydGluZyBjb25kaXRpb24gYXBwbGllcyB0bywgdGhlIHNlY29uZCBpcyB0aGUKCSAqICAgZGlyZWN0aW9uIG9mIHRoZSBzb3J0IChgZGVzY2Agb3IgYGFzY2ApIGFuZCwgb3B0aW9uYWxseSwgdGhlIHRoaXJkIGlzIHRoZQoJICogICBpbmRleCBvZiB0aGUgc29ydGluZyBvcmRlciBmcm9tIHRoZSBgY29sdW1uLnNvcnRpbmdgIGluaXRpYWxpc2F0aW9uIGFycmF5LgoJICovLyoqCgkgKiBTZXQgdGhlIG9yZGVyaW5nIGZvciB0aGUgdGFibGUuCgkgKgoJICogQHBhcmFtIHtpbnRlZ2VyfSBvcmRlciBDb2x1bW4gaW5kZXggdG8gc29ydCB1cG9uLgoJICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdGlvbiBEaXJlY3Rpb24gb2YgdGhlIHNvcnQgdG8gYmUgYXBwbGllZCAoYGFzY2Agb3IgYGRlc2NgKQoJICogQHJldHVybnMge0RhdGFUYWJsZXMuQXBpfSB0aGlzCgkgKi8vKioKCSAqIFNldCB0aGUgb3JkZXJpbmcgZm9yIHRoZSB0YWJsZS4KCSAqCgkgKiBAcGFyYW0ge2FycmF5fSBvcmRlciAxRCBhcnJheSBvZiBzb3J0aW5nIGluZm9ybWF0aW9uIHRvIGJlIGFwcGxpZWQuCgkgKiBAcGFyYW0ge2FycmF5fSBbLi4uXSBPcHRpb25hbCBhZGRpdGlvbmFsIHNvcnRpbmcgY29uZGl0aW9ucwoJICogQHJldHVybnMge0RhdGFUYWJsZXMuQXBpfSB0aGlzCgkgKi8vKioKCSAqIFNldCB0aGUgb3JkZXJpbmcgZm9yIHRoZSB0YWJsZS4KCSAqCgkgKiBAcGFyYW0ge2FycmF5fSBvcmRlciAyRCBhcnJheSBvZiBzb3J0aW5nIGluZm9ybWF0aW9uIHRvIGJlIGFwcGxpZWQuCgkgKiBAcmV0dXJucyB7RGF0YVRhYmxlcy5BcGl9IHRoaXMKCSAqLwoJX2FwaV9yZWdpc3RlciggJ29yZGVyKCknLCBmdW5jdGlvbiAoIG9yZGVyLCBkaXIgKSB7CgkJdmFyIGN0eCA9IHRoaXMuY29udGV4dDsKCQoJCWlmICggb3JkZXIgPT09IHVuZGVmaW5lZCApIHsKCQkJLy8gZ2V0CgkJCXJldHVybiBjdHgubGVuZ3RoICE9PSAwID8KCQkJCWN0eFswXS5hYVNvcnRpbmcgOgoJCQkJdW5kZWZpbmVkOwoJCX0KCQoJCS8vIHNldAoJCWlmICggdHlwZW9mIG9yZGVyID09PSAnbnVtYmVyJyApIHsKCQkJLy8gU2ltcGxlIGNvbHVtbiAvIGRpcmVjdGlvbiBwYXNzZWQgaW4KCQkJb3JkZXIgPSBbIFsgb3JkZXIsIGRpciBdIF07CgkJfQoJCWVsc2UgaWYgKCBvcmRlci5sZW5ndGggJiYgISAkLmlzQXJyYXkoIG9yZGVyWzBdICkgKSB7CgkJCS8vIEFyZ3VtZW50cyBwYXNzZWQgaW4gKGxpc3Qgb2YgMUQgYXJyYXlzKQoJCQlvcmRlciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBhcmd1bWVudHMgKTsKCQl9CgkJLy8gb3RoZXJ3aXNlIGEgMkQgYXJyYXkgd2FzIHBhc3NlZCBpbgoJCgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggc2V0dGluZ3MgKSB7CgkJCXNldHRpbmdzLmFhU29ydGluZyA9IG9yZGVyLnNsaWNlKCk7CgkJfSApOwoJfSApOwoJCgkKCS8qKgoJICogQXR0YWNoIGEgc29ydCBsaXN0ZW5lciB0byBhbiBlbGVtZW50IGZvciBhIGdpdmVuIGNvbHVtbgoJICoKCSAqIEBwYXJhbSB7bm9kZXxqUXVlcnl8c3RyaW5nfSBub2RlIElkZW50aWZpZXIgZm9yIHRoZSBlbGVtZW50KHMpIHRvIGF0dGFjaCB0aGUKCSAqICAgbGlzdGVuZXIgdG8uIFRoaXMgY2FuIHRha2UgdGhlIGZvcm0gb2YgYSBzaW5nbGUgRE9NIG5vZGUsIGEgalF1ZXJ5CgkgKiAgIGNvbGxlY3Rpb24gb2Ygbm9kZXMgb3IgYSBqUXVlcnkgc2VsZWN0b3Igd2hpY2ggd2lsbCBpZGVudGlmeSB0aGUgbm9kZShzKS4KCSAqIEBwYXJhbSB7aW50ZWdlcn0gY29sdW1uIHRoZSBjb2x1bW4gdGhhdCBhIGNsaWNrIG9uIHRoaXMgbm9kZSB3aWxsIHNvcnQgb24KCSAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjYWxsYmFja10gY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiBzb3J0IGlzIHJ1bgoJICogQHJldHVybnMge0RhdGFUYWJsZXMuQXBpfSB0aGlzCgkgKi8KCV9hcGlfcmVnaXN0ZXIoICdvcmRlci5saXN0ZW5lcigpJywgZnVuY3Rpb24gKCBub2RlLCBjb2x1bW4sIGNhbGxiYWNrICkgewoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIHNldHRpbmdzICkgewoJCQlfZm5Tb3J0QXR0YWNoTGlzdGVuZXIoIHNldHRpbmdzLCBub2RlLCBjb2x1bW4sIGNhbGxiYWNrICk7CgkJfSApOwoJfSApOwoJCgkKCV9hcGlfcmVnaXN0ZXIoICdvcmRlci5maXhlZCgpJywgZnVuY3Rpb24gKCBzZXQgKSB7CgkJaWYgKCAhIHNldCApIHsKCQkJdmFyIGN0eCA9IHRoaXMuY29udGV4dDsKCQkJdmFyIGZpeGVkID0gY3R4Lmxlbmd0aCA/CgkJCQljdHhbMF0uYWFTb3J0aW5nRml4ZWQgOgoJCQkJdW5kZWZpbmVkOwoJCgkJCXJldHVybiAkLmlzQXJyYXkoIGZpeGVkICkgPwoJCQkJeyBwcmU6IGZpeGVkIH0gOgoJCQkJZml4ZWQ7CgkJfQoJCgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggc2V0dGluZ3MgKSB7CgkJCXNldHRpbmdzLmFhU29ydGluZ0ZpeGVkID0gJC5leHRlbmQoIHRydWUsIHt9LCBzZXQgKTsKCQl9ICk7Cgl9ICk7CgkKCQoJLy8gT3JkZXIgYnkgdGhlIHNlbGVjdGVkIGNvbHVtbihzKQoJX2FwaV9yZWdpc3RlciggWwoJCSdjb2x1bW5zKCkub3JkZXIoKScsCgkJJ2NvbHVtbigpLm9yZGVyKCknCgldLCBmdW5jdGlvbiAoIGRpciApIHsKCQl2YXIgdGhhdCA9IHRoaXM7CgkKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBzZXR0aW5ncywgaSApIHsKCQkJdmFyIHNvcnQgPSBbXTsKCQoJCQkkLmVhY2goIHRoYXRbaV0sIGZ1bmN0aW9uIChqLCBjb2wpIHsKCQkJCXNvcnQucHVzaCggWyBjb2wsIGRpciBdICk7CgkJCX0gKTsKCQoJCQlzZXR0aW5ncy5hYVNvcnRpbmcgPSBzb3J0OwoJCX0gKTsKCX0gKTsKCQoJCgkKCV9hcGlfcmVnaXN0ZXIoICdzZWFyY2goKScsIGZ1bmN0aW9uICggaW5wdXQsIHJlZ2V4LCBzbWFydCwgY2FzZUluc2VuICkgewoJCXZhciBjdHggPSB0aGlzLmNvbnRleHQ7CgkKCQlpZiAoIGlucHV0ID09PSB1bmRlZmluZWQgKSB7CgkJCS8vIGdldAoJCQlyZXR1cm4gY3R4Lmxlbmd0aCAhPT0gMCA/CgkJCQljdHhbMF0ub1ByZXZpb3VzU2VhcmNoLnNTZWFyY2ggOgoJCQkJdW5kZWZpbmVkOwoJCX0KCQoJCS8vIHNldAoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIHNldHRpbmdzICkgewoJCQlpZiAoICEgc2V0dGluZ3Mub0ZlYXR1cmVzLmJGaWx0ZXIgKSB7CgkJCQlyZXR1cm47CgkJCX0KCQoJCQlfZm5GaWx0ZXJDb21wbGV0ZSggc2V0dGluZ3MsICQuZXh0ZW5kKCB7fSwgc2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoLCB7CgkJCQkic1NlYXJjaCI6IGlucHV0KyIiLAoJCQkJImJSZWdleCI6ICByZWdleCA9PT0gbnVsbCA/IGZhbHNlIDogcmVnZXgsCgkJCQkiYlNtYXJ0IjogIHNtYXJ0ID09PSBudWxsID8gdHJ1ZSAgOiBzbWFydCwKCQkJCSJiQ2FzZUluc2Vuc2l0aXZlIjogY2FzZUluc2VuID09PSBudWxsID8gdHJ1ZSA6IGNhc2VJbnNlbgoJCQl9ICksIDEgKTsKCQl9ICk7Cgl9ICk7CgkKCQoJX2FwaV9yZWdpc3RlclBsdXJhbCgKCQknY29sdW1ucygpLnNlYXJjaCgpJywKCQknY29sdW1uKCkuc2VhcmNoKCknLAoJCWZ1bmN0aW9uICggaW5wdXQsIHJlZ2V4LCBzbWFydCwgY2FzZUluc2VuICkgewoJCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ2NvbHVtbicsIGZ1bmN0aW9uICggc2V0dGluZ3MsIGNvbHVtbiApIHsKCQkJCXZhciBwcmVTZWFyY2ggPSBzZXR0aW5ncy5hb1ByZVNlYXJjaENvbHM7CgkKCQkJCWlmICggaW5wdXQgPT09IHVuZGVmaW5lZCApIHsKCQkJCQkvLyBnZXQKCQkJCQlyZXR1cm4gcHJlU2VhcmNoWyBjb2x1bW4gXS5zU2VhcmNoOwoJCQkJfQoJCgkJCQkvLyBzZXQKCQkJCWlmICggISBzZXR0aW5ncy5vRmVhdHVyZXMuYkZpbHRlciApIHsKCQkJCQlyZXR1cm47CgkJCQl9CgkKCQkJCSQuZXh0ZW5kKCBwcmVTZWFyY2hbIGNvbHVtbiBdLCB7CgkJCQkJInNTZWFyY2giOiBpbnB1dCsiIiwKCQkJCQkiYlJlZ2V4IjogIHJlZ2V4ID09PSBudWxsID8gZmFsc2UgOiByZWdleCwKCQkJCQkiYlNtYXJ0IjogIHNtYXJ0ID09PSBudWxsID8gdHJ1ZSAgOiBzbWFydCwKCQkJCQkiYkNhc2VJbnNlbnNpdGl2ZSI6IGNhc2VJbnNlbiA9PT0gbnVsbCA/IHRydWUgOiBjYXNlSW5zZW4KCQkJCX0gKTsKCQoJCQkJX2ZuRmlsdGVyQ29tcGxldGUoIHNldHRpbmdzLCBzZXR0aW5ncy5vUHJldmlvdXNTZWFyY2gsIDEgKTsKCQkJfSApOwoJCX0KCSk7CgkKCS8qCgkgKiBTdGF0ZSBBUEkgbWV0aG9kcwoJICovCgkKCV9hcGlfcmVnaXN0ZXIoICdzdGF0ZSgpJywgZnVuY3Rpb24gKCkgewoJCXJldHVybiB0aGlzLmNvbnRleHQubGVuZ3RoID8KCQkJdGhpcy5jb250ZXh0WzBdLm9TYXZlZFN0YXRlIDoKCQkJbnVsbDsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyKCAnc3RhdGUuY2xlYXIoKScsIGZ1bmN0aW9uICgpIHsKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBzZXR0aW5ncyApIHsKCQkJLy8gU2F2ZSBhbiBlbXB0eSBvYmplY3QKCQkJc2V0dGluZ3MuZm5TdGF0ZVNhdmVDYWxsYmFjay5jYWxsKCBzZXR0aW5ncy5vSW5zdGFuY2UsIHNldHRpbmdzLCB7fSApOwoJCX0gKTsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyKCAnc3RhdGUubG9hZGVkKCknLCBmdW5jdGlvbiAoKSB7CgkJcmV0dXJuIHRoaXMuY29udGV4dC5sZW5ndGggPwoJCQl0aGlzLmNvbnRleHRbMF0ub0xvYWRlZFN0YXRlIDoKCQkJbnVsbDsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyKCAnc3RhdGUuc2F2ZSgpJywgZnVuY3Rpb24gKCkgewoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIHNldHRpbmdzICkgewoJCQlfZm5TYXZlU3RhdGUoIHNldHRpbmdzICk7CgkJfSApOwoJfSApOwoJCgkKCQoJLyoqCgkgKiBQcm92aWRlIGEgY29tbW9uIG1ldGhvZCBmb3IgcGx1Zy1pbnMgdG8gY2hlY2sgdGhlIHZlcnNpb24gb2YgRGF0YVRhYmxlcyBiZWluZwoJICogdXNlZCwgaW4gb3JkZXIgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkuCgkgKgoJICogIEBwYXJhbSB7c3RyaW5nfSB2ZXJzaW9uIFZlcnNpb24gc3RyaW5nIHRvIGNoZWNrIGZvciwgaW4gdGhlIGZvcm1hdCAiWC5ZLloiLgoJICogICAgTm90ZSB0aGF0IHRoZSBmb3JtYXRzICJYIiBhbmQgIlguWSIgYXJlIGFsc28gYWNjZXB0YWJsZS4KCSAqICBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGlzIHZlcnNpb24gb2YgRGF0YVRhYmxlcyBpcyBncmVhdGVyIG9yIGVxdWFsIHRvCgkgKiAgICB0aGUgcmVxdWlyZWQgdmVyc2lvbiwgb3IgZmFsc2UgaWYgdGhpcyB2ZXJzaW9uIG9mIERhdGFUYWxlcyBpcyBub3QKCSAqICAgIHN1aXRhYmxlCgkgKiAgQHN0YXRpYwoJICogIEBkdG9wdCBBUEktU3RhdGljCgkgKgoJICogIEBleGFtcGxlCgkgKiAgICBhbGVydCggJC5mbi5kYXRhVGFibGUudmVyc2lvbkNoZWNrKCAnMS45LjAnICkgKTsKCSAqLwoJRGF0YVRhYmxlLnZlcnNpb25DaGVjayA9IERhdGFUYWJsZS5mblZlcnNpb25DaGVjayA9IGZ1bmN0aW9uKCB2ZXJzaW9uICkKCXsKCQl2YXIgYVRoaXMgPSBEYXRhVGFibGUudmVyc2lvbi5zcGxpdCgnLicpOwoJCXZhciBhVGhhdCA9IHZlcnNpb24uc3BsaXQoJy4nKTsKCQl2YXIgaVRoaXMsIGlUaGF0OwoJCgkJZm9yICggdmFyIGk9MCwgaUxlbj1hVGhhdC5sZW5ndGggOyBpPGlMZW4gOyBpKysgKSB7CgkJCWlUaGlzID0gcGFyc2VJbnQoIGFUaGlzW2ldLCAxMCApIHx8IDA7CgkJCWlUaGF0ID0gcGFyc2VJbnQoIGFUaGF0W2ldLCAxMCApIHx8IDA7CgkKCQkJLy8gUGFydHMgYXJlIHRoZSBzYW1lLCBrZWVwIGNvbXBhcmluZwoJCQlpZiAoaVRoaXMgPT09IGlUaGF0KSB7CgkJCQljb250aW51ZTsKCQkJfQoJCgkJCS8vIFBhcnRzIGFyZSBkaWZmZXJlbnQsIHJldHVybiBpbW1lZGlhdGVseQoJCQlyZXR1cm4gaVRoaXMgPiBpVGhhdDsKCQl9CgkKCQlyZXR1cm4gdHJ1ZTsKCX07CgkKCQoJLyoqCgkgKiBDaGVjayBpZiBhIGA8dGFibGU+YCBub2RlIGlzIGEgRGF0YVRhYmxlIHRhYmxlIGFscmVhZHkgb3Igbm90LgoJICoKCSAqICBAcGFyYW0ge25vZGV8anF1ZXJ5fHN0cmluZ30gdGFibGUgVGFibGUgbm9kZSwgalF1ZXJ5IG9iamVjdCBvciBqUXVlcnkKCSAqICAgICAgc2VsZWN0b3IgZm9yIHRoZSB0YWJsZSB0byB0ZXN0LiBOb3RlIHRoYXQgaWYgbW9yZSB0aGFuIG1vcmUgdGhhbiBvbmUKCSAqICAgICAgdGFibGUgaXMgcGFzc2VkIG9uLCBvbmx5IHRoZSBmaXJzdCB3aWxsIGJlIGNoZWNrZWQKCSAqICBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSB0aGUgdGFibGUgZ2l2ZW4gaXMgYSBEYXRhVGFibGUsIG9yIGZhbHNlIG90aGVyd2lzZQoJICogIEBzdGF0aWMKCSAqICBAZHRvcHQgQVBJLVN0YXRpYwoJICoKCSAqICBAZXhhbXBsZQoJICogICAgaWYgKCAhICQuZm4uRGF0YVRhYmxlLmlzRGF0YVRhYmxlKCAnI2V4YW1wbGUnICkgKSB7CgkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCk7CgkgKiAgICB9CgkgKi8KCURhdGFUYWJsZS5pc0RhdGFUYWJsZSA9IERhdGFUYWJsZS5mbklzRGF0YVRhYmxlID0gZnVuY3Rpb24gKCB0YWJsZSApCgl7CgkJdmFyIHQgPSAkKHRhYmxlKS5nZXQoMCk7CgkJdmFyIGlzID0gZmFsc2U7CgkKCQlpZiAoIHRhYmxlIGluc3RhbmNlb2YgRGF0YVRhYmxlLkFwaSApIHsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCgkJJC5lYWNoKCBEYXRhVGFibGUuc2V0dGluZ3MsIGZ1bmN0aW9uIChpLCBvKSB7CgkJCXZhciBoZWFkID0gby5uU2Nyb2xsSGVhZCA/ICQoJ3RhYmxlJywgby5uU2Nyb2xsSGVhZClbMF0gOiBudWxsOwoJCQl2YXIgZm9vdCA9IG8ublNjcm9sbEZvb3QgPyAkKCd0YWJsZScsIG8ublNjcm9sbEZvb3QpWzBdIDogbnVsbDsKCQoJCQlpZiAoIG8ublRhYmxlID09PSB0IHx8IGhlYWQgPT09IHQgfHwgZm9vdCA9PT0gdCApIHsKCQkJCWlzID0gdHJ1ZTsKCQkJfQoJCX0gKTsKCQoJCXJldHVybiBpczsKCX07CgkKCQoJLyoqCgkgKiBHZXQgYWxsIERhdGFUYWJsZSB0YWJsZXMgdGhhdCBoYXZlIGJlZW4gaW5pdGlhbGlzZWQgLSBvcHRpb25hbGx5IHlvdSBjYW4KCSAqIHNlbGVjdCB0byBnZXQgb25seSBjdXJyZW50bHkgdmlzaWJsZSB0YWJsZXMuCgkgKgoJICogIEBwYXJhbSB7Ym9vbGVhbn0gW3Zpc2libGU9ZmFsc2VdIEZsYWcgdG8gaW5kaWNhdGUgaWYgeW91IHdhbnQgYWxsIChkZWZhdWx0KQoJICogICAgb3IgdmlzaWJsZSB0YWJsZXMgb25seS4KCSAqICBAcmV0dXJucyB7YXJyYXl9IEFycmF5IG9mIGB0YWJsZWAgbm9kZXMgKG5vdCBEYXRhVGFibGUgaW5zdGFuY2VzKSB3aGljaCBhcmUKCSAqICAgIERhdGFUYWJsZXMKCSAqICBAc3RhdGljCgkgKiAgQGR0b3B0IEFQSS1TdGF0aWMKCSAqCgkgKiAgQGV4YW1wbGUKCSAqICAgICQuZWFjaCggJC5mbi5kYXRhVGFibGUudGFibGVzKHRydWUpLCBmdW5jdGlvbiAoKSB7CgkgKiAgICAgICQodGFibGUpLkRhdGFUYWJsZSgpLmNvbHVtbnMuYWRqdXN0KCk7CgkgKiAgICB9ICk7CgkgKi8KCURhdGFUYWJsZS50YWJsZXMgPSBEYXRhVGFibGUuZm5UYWJsZXMgPSBmdW5jdGlvbiAoIHZpc2libGUgKQoJewoJCXZhciBhcGkgPSBmYWxzZTsKCQoJCWlmICggJC5pc1BsYWluT2JqZWN0KCB2aXNpYmxlICkgKSB7CgkJCWFwaSA9IHZpc2libGUuYXBpOwoJCQl2aXNpYmxlID0gdmlzaWJsZS52aXNpYmxlOwoJCX0KCQoJCXZhciBhID0gJC5tYXAoIERhdGFUYWJsZS5zZXR0aW5ncywgZnVuY3Rpb24gKG8pIHsKCQkJaWYgKCAhdmlzaWJsZSB8fCAodmlzaWJsZSAmJiAkKG8ublRhYmxlKS5pcygnOnZpc2libGUnKSkgKSB7CgkJCQlyZXR1cm4gby5uVGFibGU7CgkJCX0KCQl9ICk7CgkKCQlyZXR1cm4gYXBpID8KCQkJbmV3IF9BcGkoIGEgKSA6CgkJCWE7Cgl9OwoJCgkKCS8qKgoJICogQ29udmVydCBmcm9tIGNhbWVsIGNhc2UgcGFyYW1ldGVycyB0byBIdW5nYXJpYW4gbm90YXRpb24uIFRoaXMgaXMgbWFkZSBwdWJsaWMKCSAqIGZvciB0aGUgZXh0ZW5zaW9ucyB0byBwcm92aWRlIHRoZSBzYW1lIGFiaWxpdHkgYXMgRGF0YVRhYmxlcyBjb3JlIHRvIGFjY2VwdAoJICogZWl0aGVyIHRoZSAxLjkgc3R5bGUgSHVuZ2FyaWFuIG5vdGF0aW9uLCBvciB0aGUgMS4xMCsgc3R5bGUgY2FtZWxDYXNlCgkgKiBwYXJhbWV0ZXJzLgoJICoKCSAqICBAcGFyYW0ge29iamVjdH0gc3JjIFRoZSBtb2RlbCBvYmplY3Qgd2hpY2ggaG9sZHMgYWxsIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUKCSAqICAgIG1hcHBlZC4KCSAqICBAcGFyYW0ge29iamVjdH0gdXNlciBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgZnJvbSBjYW1lbCBjYXNlIHRvIEh1bmdhcmlhbi4KCSAqICBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlIFdoZW4gc2V0IHRvIGB0cnVlYCwgcHJvcGVydGllcyB3aGljaCBhbHJlYWR5IGhhdmUgYQoJICogICAgSHVuZ2FyaWFuIHZhbHVlIGluIHRoZSBgdXNlcmAgb2JqZWN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4uIE90aGVyd2lzZSB0aGV5CgkgKiAgICB3b24ndCBiZS4KCSAqLwoJRGF0YVRhYmxlLmNhbWVsVG9IdW5nYXJpYW4gPSBfZm5DYW1lbFRvSHVuZ2FyaWFuOwoJCgkKCQoJLyoqCgkgKgoJICovCglfYXBpX3JlZ2lzdGVyKCAnJCgpJywgZnVuY3Rpb24gKCBzZWxlY3Rvciwgb3B0cyApIHsKCQl2YXIKCQkJcm93cyAgID0gdGhpcy5yb3dzKCBvcHRzICkubm9kZXMoKSwgLy8gR2V0IGFsbCByb3dzCgkJCWpxUm93cyA9ICQocm93cyk7CgkKCQlyZXR1cm4gJCggW10uY29uY2F0KAoJCQlqcVJvd3MuZmlsdGVyKCBzZWxlY3RvciApLnRvQXJyYXkoKSwKCQkJanFSb3dzLmZpbmQoIHNlbGVjdG9yICkudG9BcnJheSgpCgkJKSApOwoJfSApOwoJCgkKCS8vIGpRdWVyeSBmdW5jdGlvbnMgdG8gb3BlcmF0ZSBvbiB0aGUgdGFibGVzCgkkLmVhY2goIFsgJ29uJywgJ29uZScsICdvZmYnIF0sIGZ1bmN0aW9uIChpLCBrZXkpIHsKCQlfYXBpX3JlZ2lzdGVyKCBrZXkrJygpJywgZnVuY3Rpb24gKCAvKiBldmVudCwgaGFuZGxlciAqLyApIHsKCQkJdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwoJCgkJCS8vIEFkZCB0aGUgYGR0YCBuYW1lc3BhY2UgYXV0b21hdGljYWxseSBpZiBpdCBpc24ndCBhbHJlYWR5IHByZXNlbnQKCQkJYXJnc1swXSA9ICQubWFwKCBhcmdzWzBdLnNwbGl0KCAvXHMvICksIGZ1bmN0aW9uICggZSApIHsKCQkJCXJldHVybiAhIGUubWF0Y2goL1wuZHRcYi8pID8KCQkJCQllKycuZHQnIDoKCQkJCQllOwoJCQkJfSApLmpvaW4oICcgJyApOwoJCgkJCXZhciBpbnN0ID0gJCggdGhpcy50YWJsZXMoKS5ub2RlcygpICk7CgkJCWluc3Rba2V5XS5hcHBseSggaW5zdCwgYXJncyApOwoJCQlyZXR1cm4gdGhpczsKCQl9ICk7Cgl9ICk7CgkKCQoJX2FwaV9yZWdpc3RlciggJ2NsZWFyKCknLCBmdW5jdGlvbiAoKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggc2V0dGluZ3MgKSB7CgkJCV9mbkNsZWFyVGFibGUoIHNldHRpbmdzICk7CgkJfSApOwoJfSApOwoJCgkKCV9hcGlfcmVnaXN0ZXIoICdzZXR0aW5ncygpJywgZnVuY3Rpb24gKCkgewoJCXJldHVybiBuZXcgX0FwaSggdGhpcy5jb250ZXh0LCB0aGlzLmNvbnRleHQgKTsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyKCAnaW5pdCgpJywgZnVuY3Rpb24gKCkgewoJCXZhciBjdHggPSB0aGlzLmNvbnRleHQ7CgkJcmV0dXJuIGN0eC5sZW5ndGggPyBjdHhbMF0ub0luaXQgOiBudWxsOwoJfSApOwoJCgkKCV9hcGlfcmVnaXN0ZXIoICdkYXRhKCknLCBmdW5jdGlvbiAoKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggc2V0dGluZ3MgKSB7CgkJCXJldHVybiBfcGx1Y2soIHNldHRpbmdzLmFvRGF0YSwgJ19hRGF0YScgKTsKCQl9ICkuZmxhdHRlbigpOwoJfSApOwoJCgkKCV9hcGlfcmVnaXN0ZXIoICdkZXN0cm95KCknLCBmdW5jdGlvbiAoIHJlbW92ZSApIHsKCQlyZW1vdmUgPSByZW1vdmUgfHwgZmFsc2U7CgkKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBzZXR0aW5ncyApIHsKCQkJdmFyIG9yaWcgICAgICA9IHNldHRpbmdzLm5UYWJsZVdyYXBwZXIucGFyZW50Tm9kZTsKCQkJdmFyIGNsYXNzZXMgICA9IHNldHRpbmdzLm9DbGFzc2VzOwoJCQl2YXIgdGFibGUgICAgID0gc2V0dGluZ3MublRhYmxlOwoJCQl2YXIgdGJvZHkgICAgID0gc2V0dGluZ3MublRCb2R5OwoJCQl2YXIgdGhlYWQgICAgID0gc2V0dGluZ3MublRIZWFkOwoJCQl2YXIgdGZvb3QgICAgID0gc2V0dGluZ3MublRGb290OwoJCQl2YXIganFUYWJsZSAgID0gJCh0YWJsZSk7CgkJCXZhciBqcVRib2R5ICAgPSAkKHRib2R5KTsKCQkJdmFyIGpxV3JhcHBlciA9ICQoc2V0dGluZ3MublRhYmxlV3JhcHBlcik7CgkJCXZhciByb3dzICAgICAgPSAkLm1hcCggc2V0dGluZ3MuYW9EYXRhLCBmdW5jdGlvbiAocikgeyByZXR1cm4gci5uVHI7IH0gKTsKCQkJdmFyIGksIGllbjsKCQoJCQkvLyBGbGFnIHRvIG5vdGUgdGhhdCB0aGUgdGFibGUgaXMgY3VycmVudGx5IGJlaW5nIGRlc3Ryb3llZCAtIG5vIGFjdGlvbgoJCQkvLyBzaG91bGQgYmUgdGFrZW4KCQkJc2V0dGluZ3MuYkRlc3Ryb3lpbmcgPSB0cnVlOwoJCgkJCS8vIEZpcmUgb2ZmIHRoZSBkZXN0cm95IGNhbGxiYWNrcyBmb3IgcGx1Zy1pbnMgZXRjCgkJCV9mbkNhbGxiYWNrRmlyZSggc2V0dGluZ3MsICJhb0Rlc3Ryb3lDYWxsYmFjayIsICJkZXN0cm95IiwgW3NldHRpbmdzXSApOwoJCgkJCS8vIElmIG5vdCBiZWluZyByZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50LCBtYWtlIGFsbCBjb2x1bW5zIHZpc2libGUKCQkJaWYgKCAhIHJlbW92ZSApIHsKCQkJCW5ldyBfQXBpKCBzZXR0aW5ncyApLmNvbHVtbnMoKS52aXNpYmxlKCB0cnVlICk7CgkJCX0KCQoJCQkvLyBCbGl0eiBhbGwgYERUYCBuYW1lc3BhY2VkIGV2ZW50cyAodGhlc2UgYXJlIGludGVybmFsIGV2ZW50cywgdGhlCgkJCS8vIGxvd2VyY2FzZSwgYGR0YCBldmVudHMgYXJlIHVzZXIgc3Vic2NyaWJlZCBhbmQgdGhleSBhcmUgcmVzcG9uc2libGUKCQkJLy8gZm9yIHJlbW92aW5nIHRoZW0KCQkJanFXcmFwcGVyLm9mZignLkRUJykuZmluZCgnOm5vdCh0Ym9keSAqKScpLm9mZignLkRUJyk7CgkJCSQod2luZG93KS5vZmYoJy5EVC0nK3NldHRpbmdzLnNJbnN0YW5jZSk7CgkKCQkJLy8gV2hlbiBzY3JvbGxpbmcgd2UgaGFkIHRvIGJyZWFrIHRoZSB0YWJsZSB1cCAtIHJlc3RvcmUgaXQKCQkJaWYgKCB0YWJsZSAhPSB0aGVhZC5wYXJlbnROb2RlICkgewoJCQkJanFUYWJsZS5jaGlsZHJlbigndGhlYWQnKS5kZXRhY2goKTsKCQkJCWpxVGFibGUuYXBwZW5kKCB0aGVhZCApOwoJCQl9CgkKCQkJaWYgKCB0Zm9vdCAmJiB0YWJsZSAhPSB0Zm9vdC5wYXJlbnROb2RlICkgewoJCQkJanFUYWJsZS5jaGlsZHJlbigndGZvb3QnKS5kZXRhY2goKTsKCQkJCWpxVGFibGUuYXBwZW5kKCB0Zm9vdCApOwoJCQl9CgkKCQkJc2V0dGluZ3MuYWFTb3J0aW5nID0gW107CgkJCXNldHRpbmdzLmFhU29ydGluZ0ZpeGVkID0gW107CgkJCV9mblNvcnRpbmdDbGFzc2VzKCBzZXR0aW5ncyApOwoJCgkJCSQoIHJvd3MgKS5yZW1vdmVDbGFzcyggc2V0dGluZ3MuYXNTdHJpcGVDbGFzc2VzLmpvaW4oJyAnKSApOwoJCgkJCSQoJ3RoLCB0ZCcsIHRoZWFkKS5yZW1vdmVDbGFzcyggY2xhc3Nlcy5zU29ydGFibGUrJyAnKwoJCQkJY2xhc3Nlcy5zU29ydGFibGVBc2MrJyAnK2NsYXNzZXMuc1NvcnRhYmxlRGVzYysnICcrY2xhc3Nlcy5zU29ydGFibGVOb25lCgkJCSk7CgkKCQkJLy8gQWRkIHRoZSBUUiBlbGVtZW50cyBiYWNrIGludG8gdGhlIHRhYmxlIGluIHRoZWlyIG9yaWdpbmFsIG9yZGVyCgkJCWpxVGJvZHkuY2hpbGRyZW4oKS5kZXRhY2goKTsKCQkJanFUYm9keS5hcHBlbmQoIHJvd3MgKTsKCQoJCQkvLyBSZW1vdmUgdGhlIERhdGFUYWJsZXMgZ2VuZXJhdGVkIG5vZGVzLCBldmVudHMgYW5kIGNsYXNzZXMKCQkJdmFyIHJlbW92ZWRNZXRob2QgPSByZW1vdmUgPyAncmVtb3ZlJyA6ICdkZXRhY2gnOwoJCQlqcVRhYmxlWyByZW1vdmVkTWV0aG9kIF0oKTsKCQkJanFXcmFwcGVyWyByZW1vdmVkTWV0aG9kIF0oKTsKCQoJCQkvLyBJZiB3ZSBuZWVkIHRvIHJlYXR0YWNoIHRoZSB0YWJsZSB0byB0aGUgZG9jdW1lbnQKCQkJaWYgKCAhIHJlbW92ZSAmJiBvcmlnICkgewoJCQkJLy8gaW5zZXJ0QmVmb3JlIGFjdHMgbGlrZSBhcHBlbmRDaGlsZCBpZiAhYXJnWzFdCgkJCQlvcmlnLmluc2VydEJlZm9yZSggdGFibGUsIHNldHRpbmdzLm5UYWJsZVJlaW5zZXJ0QmVmb3JlICk7CgkKCQkJCS8vIFJlc3RvcmUgdGhlIHdpZHRoIG9mIHRoZSBvcmlnaW5hbCB0YWJsZSAtIHdhcyByZWFkIGZyb20gdGhlIHN0eWxlIHByb3BlcnR5LAoJCQkJLy8gc28gd2UgY2FuIHJlc3RvcmUgZGlyZWN0bHkgdG8gdGhhdAoJCQkJanFUYWJsZQoJCQkJCS5jc3MoICd3aWR0aCcsIHNldHRpbmdzLnNEZXN0cm95V2lkdGggKQoJCQkJCS5yZW1vdmVDbGFzcyggY2xhc3Nlcy5zVGFibGUgKTsKCQoJCQkJLy8gSWYgdGhlIHdlcmUgb3JpZ2luYWxseSBzdHJpcGUgY2xhc3NlcyAtIHRoZW4gd2UgYWRkIHRoZW0gYmFjayBoZXJlLgoJCQkJLy8gTm90ZSB0aGlzIGlzIG5vdCBmb29sIHByb29mIChmb3IgZXhhbXBsZSBpZiBub3QgYWxsIHJvd3MgaGFkIHN0cmlwZQoJCQkJLy8gY2xhc3NlcyAtIGJ1dCBpdCdzIGEgZ29vZCBlZmZvcnQgd2l0aG91dCBnZXR0aW5nIGNhcnJpZWQgYXdheQoJCQkJaWVuID0gc2V0dGluZ3MuYXNEZXN0cm95U3RyaXBlcy5sZW5ndGg7CgkKCQkJCWlmICggaWVuICkgewoJCQkJCWpxVGJvZHkuY2hpbGRyZW4oKS5lYWNoKCBmdW5jdGlvbiAoaSkgewoJCQkJCQkkKHRoaXMpLmFkZENsYXNzKCBzZXR0aW5ncy5hc0Rlc3Ryb3lTdHJpcGVzW2kgJSBpZW5dICk7CgkJCQkJfSApOwoJCQkJfQoJCQl9CgkKCQkJLyogUmVtb3ZlIHRoZSBzZXR0aW5ncyBvYmplY3QgZnJvbSB0aGUgc2V0dGluZ3MgYXJyYXkgKi8KCQkJdmFyIGlkeCA9ICQuaW5BcnJheSggc2V0dGluZ3MsIERhdGFUYWJsZS5zZXR0aW5ncyApOwoJCQlpZiAoIGlkeCAhPT0gLTEgKSB7CgkJCQlEYXRhVGFibGUuc2V0dGluZ3Muc3BsaWNlKCBpZHgsIDEgKTsKCQkJfQoJCX0gKTsKCX0gKTsKCQoJCgkvLyBBZGQgdGhlIGBldmVyeSgpYCBtZXRob2QgZm9yIHJvd3MsIGNvbHVtbnMgYW5kIGNlbGxzIGluIGEgY29tcGFjdCBmb3JtCgkkLmVhY2goIFsgJ2NvbHVtbicsICdyb3cnLCAnY2VsbCcgXSwgZnVuY3Rpb24gKCBpLCB0eXBlICkgewoJCV9hcGlfcmVnaXN0ZXIoIHR5cGUrJ3MoKS5ldmVyeSgpJywgZnVuY3Rpb24gKCBmbiApIHsKCQkJdmFyIG9wdHMgPSB0aGlzLnNlbGVjdG9yLm9wdHM7CgkJCXZhciBhcGkgPSB0aGlzOwoJCgkJCXJldHVybiB0aGlzLml0ZXJhdG9yKCB0eXBlLCBmdW5jdGlvbiAoIHNldHRpbmdzLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0ICkgewoJCQkJLy8gUm93cyBhbmQgY29sdW1uczoKCQkJCS8vICBhcmcxIC0gaW5kZXgKCQkJCS8vICBhcmcyIC0gdGFibGUgY291bnRlcgoJCQkJLy8gIGFyZzMgLSBsb29wIGNvdW50ZXIKCQkJCS8vICBhcmc0IC0gdW5kZWZpbmVkCgkJCQkvLyBDZWxsczoKCQkJCS8vICBhcmcxIC0gcm93IGluZGV4CgkJCQkvLyAgYXJnMiAtIGNvbHVtbiBpbmRleAoJCQkJLy8gIGFyZzMgLSB0YWJsZSBjb3VudGVyCgkJCQkvLyAgYXJnNCAtIGxvb3AgY291bnRlcgoJCQkJZm4uY2FsbCgKCQkJCQlhcGlbIHR5cGUgXSgKCQkJCQkJYXJnMSwKCQkJCQkJdHlwZT09PSdjZWxsJyA/IGFyZzIgOiBvcHRzLAoJCQkJCQl0eXBlPT09J2NlbGwnID8gb3B0cyA6IHVuZGVmaW5lZAoJCQkJCSksCgkJCQkJYXJnMSwgYXJnMiwgYXJnMywgYXJnNAoJCQkJKTsKCQkJfSApOwoJCX0gKTsKCX0gKTsKCQoJCgkvLyBpMThuIG1ldGhvZCBmb3IgZXh0ZW5zaW9ucyB0byBiZSBhYmxlIHRvIHVzZSB0aGUgbGFuZ3VhZ2Ugb2JqZWN0IGZyb20gdGhlCgkvLyBEYXRhVGFibGUKCV9hcGlfcmVnaXN0ZXIoICdpMThuKCknLCBmdW5jdGlvbiAoIHRva2VuLCBkZWYsIHBsdXJhbCApIHsKCQl2YXIgY3R4ID0gdGhpcy5jb250ZXh0WzBdOwoJCXZhciByZXNvbHZlZCA9IF9mbkdldE9iamVjdERhdGFGbiggdG9rZW4gKSggY3R4Lm9MYW5ndWFnZSApOwoJCgkJaWYgKCByZXNvbHZlZCA9PT0gdW5kZWZpbmVkICkgewoJCQlyZXNvbHZlZCA9IGRlZjsKCQl9CgkKCQlpZiAoIHBsdXJhbCAhPT0gdW5kZWZpbmVkICYmICQuaXNQbGFpbk9iamVjdCggcmVzb2x2ZWQgKSApIHsKCQkJcmVzb2x2ZWQgPSByZXNvbHZlZFsgcGx1cmFsIF0gIT09IHVuZGVmaW5lZCA/CgkJCQlyZXNvbHZlZFsgcGx1cmFsIF0gOgoJCQkJcmVzb2x2ZWQuXzsKCQl9CgkKCQlyZXR1cm4gcmVzb2x2ZWQucmVwbGFjZSggJyVkJywgcGx1cmFsICk7IC8vIG5iOiBwbHVyYWwgbWlnaHQgYmUgdW5kZWZpbmVkLAoJfSApOwoJLyoqCgkgKiBWZXJzaW9uIHN0cmluZyBmb3IgcGx1Zy1pbnMgdG8gY2hlY2sgY29tcGF0aWJpbGl0eS4gQWxsb3dlZCBmb3JtYXQgaXMKCSAqIGBhLmIuYy1kYCB3aGVyZTogYTppbnQsIGI6aW50LCBjOmludCwgZDpzdHJpbmcoZGV2fGJldGF8YWxwaGEpLiBgZGAgaXMgdXNlZAoJICogb25seSBmb3Igbm9uLXJlbGVhc2UgYnVpbGRzLiBTZWUgaHR0cDovL3NlbXZlci5vcmcvIGZvciBtb3JlIGluZm9ybWF0aW9uLgoJICogIEBtZW1iZXIKCSAqICBAdHlwZSBzdHJpbmcKCSAqICBAZGVmYXVsdCBWZXJzaW9uIG51bWJlcgoJICovCglEYXRhVGFibGUudmVyc2lvbiA9ICIxLjEwLjIwIjsKCgkvKioKCSAqIFByaXZhdGUgZGF0YSBzdG9yZSwgY29udGFpbmluZyBhbGwgb2YgdGhlIHNldHRpbmdzIG9iamVjdHMgdGhhdCBhcmUKCSAqIGNyZWF0ZWQgZm9yIHRoZSB0YWJsZXMgb24gYSBnaXZlbiBwYWdlLgoJICoKCSAqIE5vdGUgdGhhdCB0aGUgYERhdGFUYWJsZS5zZXR0aW5nc2Agb2JqZWN0IGlzIGFsaWFzZWQgdG8KCSAqIGBqUXVlcnkuZm4uZGF0YVRhYmxlRXh0YCB0aHJvdWdoIHdoaWNoIGl0IG1heSBiZSBhY2Nlc3NlZCBhbmQKCSAqIG1hbmlwdWxhdGVkLCBvciBgalF1ZXJ5LmZuLmRhdGFUYWJsZS5zZXR0aW5nc2AuCgkgKiAgQG1lbWJlcgoJICogIEB0eXBlIGFycmF5CgkgKiAgQGRlZmF1bHQgW10KCSAqICBAcHJpdmF0ZQoJICovCglEYXRhVGFibGUuc2V0dGluZ3MgPSBbXTsKCgkvKioKCSAqIE9iamVjdCBtb2RlbHMgY29udGFpbmVyLCBmb3IgdGhlIHZhcmlvdXMgbW9kZWxzIHRoYXQgRGF0YVRhYmxlcyBoYXMKCSAqIGF2YWlsYWJsZSB0byBpdC4gVGhlc2UgbW9kZWxzIGRlZmluZSB0aGUgb2JqZWN0cyB0aGF0IGFyZSB1c2VkIHRvIGhvbGQKCSAqIHRoZSBhY3RpdmUgc3RhdGUgYW5kIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHRhYmxlLgoJICogIEBuYW1lc3BhY2UKCSAqLwoJRGF0YVRhYmxlLm1vZGVscyA9IHt9OwoJCgkKCQoJLyoqCgkgKiBUZW1wbGF0ZSBvYmplY3QgZm9yIHRoZSB3YXkgaW4gd2hpY2ggRGF0YVRhYmxlcyBob2xkcyBpbmZvcm1hdGlvbiBhYm91dAoJICogc2VhcmNoIGluZm9ybWF0aW9uIGZvciB0aGUgZ2xvYmFsIGZpbHRlciBhbmQgaW5kaXZpZHVhbCBjb2x1bW4gZmlsdGVycy4KCSAqICBAbmFtZXNwYWNlCgkgKi8KCURhdGFUYWJsZS5tb2RlbHMub1NlYXJjaCA9IHsKCQkvKioKCQkgKiBGbGFnIHRvIGluZGljYXRlIGlmIHRoZSBmaWx0ZXJpbmcgc2hvdWxkIGJlIGNhc2UgaW5zZW5zaXRpdmUgb3Igbm90CgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKiAgQGRlZmF1bHQgdHJ1ZQoJCSAqLwoJCSJiQ2FzZUluc2Vuc2l0aXZlIjogdHJ1ZSwKCQoJCS8qKgoJCSAqIEFwcGxpZWQgc2VhcmNoIHRlcm0KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IDxpPkVtcHR5IHN0cmluZzwvaT4KCQkgKi8KCQkic1NlYXJjaCI6ICIiLAoJCgkJLyoqCgkJICogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgc2VhcmNoIHRlcm0gc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGEKCQkgKiByZWd1bGFyIGV4cHJlc3Npb24gKHRydWUpIG9yIG5vdCAoZmFsc2UpIGFuZCB0aGVyZWZvcmUgYW5kIHNwZWNpYWwKCQkgKiByZWdleCBjaGFyYWN0ZXJzIGVzY2FwZWQuCgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKiAgQGRlZmF1bHQgZmFsc2UKCQkgKi8KCQkiYlJlZ2V4IjogZmFsc2UsCgkKCQkvKioKCQkgKiBGbGFnIHRvIGluZGljYXRlIGlmIERhdGFUYWJsZXMgaXMgdG8gdXNlIGl0cyBzbWFydCBmaWx0ZXJpbmcgb3Igbm90LgoJCSAqICBAdHlwZSBib29sZWFuCgkJICogIEBkZWZhdWx0IHRydWUKCQkgKi8KCQkiYlNtYXJ0IjogdHJ1ZQoJfTsKCQoJCgkKCQoJLyoqCgkgKiBUZW1wbGF0ZSBvYmplY3QgZm9yIHRoZSB3YXkgaW4gd2hpY2ggRGF0YVRhYmxlcyBob2xkcyBpbmZvcm1hdGlvbiBhYm91dAoJICogZWFjaCBpbmRpdmlkdWFsIHJvdy4gVGhpcyBpcyB0aGUgb2JqZWN0IGZvcm1hdCB1c2VkIGZvciB0aGUgc2V0dGluZ3MKCSAqIGFvRGF0YSBhcnJheS4KCSAqICBAbmFtZXNwYWNlCgkgKi8KCURhdGFUYWJsZS5tb2RlbHMub1JvdyA9IHsKCQkvKioKCQkgKiBUUiBlbGVtZW50IGZvciB0aGUgcm93CgkJICogIEB0eXBlIG5vZGUKCQkgKiAgQGRlZmF1bHQgbnVsbAoJCSAqLwoJCSJuVHIiOiBudWxsLAoJCgkJLyoqCgkJICogQXJyYXkgb2YgVEQgZWxlbWVudHMgZm9yIGVhY2ggcm93LiBUaGlzIGlzIG51bGwgdW50aWwgdGhlIHJvdyBoYXMgYmVlbgoJCSAqIGNyZWF0ZWQuCgkJICogIEB0eXBlIGFycmF5IG5vZGVzCgkJICogIEBkZWZhdWx0IFtdCgkJICovCgkJImFuQ2VsbHMiOiBudWxsLAoJCgkJLyoqCgkJICogRGF0YSBvYmplY3QgZnJvbSB0aGUgb3JpZ2luYWwgZGF0YSBzb3VyY2UgZm9yIHRoZSByb3cuIFRoaXMgaXMgZWl0aGVyCgkJICogYW4gYXJyYXkgaWYgdXNpbmcgdGhlIHRyYWRpdGlvbmFsIGZvcm0gb2YgRGF0YVRhYmxlcywgb3IgYW4gb2JqZWN0IGlmCgkJICogdXNpbmcgbURhdGEgb3B0aW9ucy4gVGhlIGV4YWN0IHR5cGUgd2lsbCBkZXBlbmQgb24gdGhlIHBhc3NlZCBpbgoJCSAqIGRhdGEgZnJvbSB0aGUgZGF0YSBzb3VyY2UsIG9yIHdpbGwgYmUgYW4gYXJyYXkgaWYgdXNpbmcgRE9NIGEgZGF0YQoJCSAqIHNvdXJjZS4KCQkgKiAgQHR5cGUgYXJyYXl8b2JqZWN0CgkJICogIEBkZWZhdWx0IFtdCgkJICovCgkJIl9hRGF0YSI6IFtdLAoJCgkJLyoqCgkJICogU29ydGluZyBkYXRhIGNhY2hlIC0gdGhpcyBhcnJheSBpcyBvc3RlbnNpYmx5IHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUKCQkgKiBudW1iZXIgb2YgY29sdW1ucyAoYWx0aG91Z2ggZWFjaCBpbmRleCBpcyBnZW5lcmF0ZWQgb25seSBhcyBpdCBpcwoJCSAqIG5lZWRlZCksIGFuZCBob2xkcyB0aGUgZGF0YSB0aGF0IGlzIHVzZWQgZm9yIHNvcnRpbmcgZWFjaCBjb2x1bW4gaW4gdGhlCgkJICogcm93LiBXZSBkbyB0aGlzIGNhY2hlIGdlbmVyYXRpb24gYXQgdGhlIHN0YXJ0IG9mIHRoZSBzb3J0IGluIG9yZGVyIHRoYXQKCQkgKiB0aGUgZm9ybWF0dGluZyBvZiB0aGUgc29ydCBkYXRhIG5lZWQgYmUgZG9uZSBvbmx5IG9uY2UgZm9yIGVhY2ggY2VsbAoJCSAqIHBlciBzb3J0LiBUaGlzIGFycmF5IHNob3VsZCBub3QgYmUgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8gYnkgYW55dGhpbmcKCQkgKiBvdGhlciB0aGFuIHRoZSBtYXN0ZXIgc29ydGluZyBtZXRob2RzLgoJCSAqICBAdHlwZSBhcnJheQoJCSAqICBAZGVmYXVsdCBudWxsCgkJICogIEBwcml2YXRlCgkJICovCgkJIl9hU29ydERhdGEiOiBudWxsLAoJCgkJLyoqCgkJICogUGVyIGNlbGwgZmlsdGVyaW5nIGRhdGEgY2FjaGUuIEFzIHBlciB0aGUgc29ydCBkYXRhIGNhY2hlLCB1c2VkIHRvCgkJICogaW5jcmVhc2UgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBmaWx0ZXJpbmcgaW4gRGF0YVRhYmxlcwoJCSAqICBAdHlwZSBhcnJheQoJCSAqICBAZGVmYXVsdCBudWxsCgkJICogIEBwcml2YXRlCgkJICovCgkJIl9hRmlsdGVyRGF0YSI6IG51bGwsCgkKCQkvKioKCQkgKiBGaWx0ZXJpbmcgZGF0YSBjYWNoZS4gVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgY2VsbCBmaWx0ZXJpbmcgY2FjaGUsIGJ1dAoJCSAqIGluIHRoaXMgY2FzZSBhIHN0cmluZyByYXRoZXIgdGhhbiBhbiBhcnJheS4gVGhpcyBpcyBlYXNpbHkgY29tcHV0ZWQgd2l0aAoJCSAqIGEgam9pbiBvbiBgX2FGaWx0ZXJEYXRhYCwgYnV0IGlzIHByb3ZpZGVkIGFzIGEgY2FjaGUgc28gdGhlIGpvaW4gaXNuJ3QKCQkgKiBuZWVkZWQgb24gZXZlcnkgc2VhcmNoIChtZW1vcnkgdHJhZGVkIGZvciBwZXJmb3JtYW5jZSkKCQkgKiAgQHR5cGUgYXJyYXkKCQkgKiAgQGRlZmF1bHQgbnVsbAoJCSAqICBAcHJpdmF0ZQoJCSAqLwoJCSJfc0ZpbHRlclJvdyI6IG51bGwsCgkKCQkvKioKCQkgKiBDYWNoZSBvZiB0aGUgY2xhc3MgbmFtZSB0aGF0IERhdGFUYWJsZXMgaGFzIGFwcGxpZWQgdG8gdGhlIHJvdywgc28gd2UKCQkgKiBjYW4gcXVpY2tseSBsb29rIGF0IHRoaXMgdmFyaWFibGUgcmF0aGVyIHRoYW4gbmVlZGluZyB0byBkbyBhIERPTSBjaGVjawoJCSAqIG9uIGNsYXNzTmFtZSBmb3IgdGhlIG5UciBwcm9wZXJ0eS4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IDxpPkVtcHR5IHN0cmluZzwvaT4KCQkgKiAgQHByaXZhdGUKCQkgKi8KCQkiX3NSb3dTdHJpcGUiOiAiIiwKCQoJCS8qKgoJCSAqIERlbm90ZSBpZiB0aGUgb3JpZ2luYWwgZGF0YSBzb3VyY2Ugd2FzIGZyb20gdGhlIERPTSwgb3IgdGhlIGRhdGEgc291cmNlCgkJICogb2JqZWN0LiBUaGlzIGlzIHVzZWQgZm9yIGludmFsaWRhdGluZyBkYXRhLCBzbyBEYXRhVGFibGVzIGNhbgoJCSAqIGF1dG9tYXRpY2FsbHkgcmVhZCBkYXRhIGZyb20gdGhlIG9yaWdpbmFsIHNvdXJjZSwgdW5sZXNzIHVuaW5zdHJ1Y3RlZAoJCSAqIG90aGVyd2lzZS4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKiAgQHByaXZhdGUKCQkgKi8KCQkic3JjIjogbnVsbCwKCQoJCS8qKgoJCSAqIEluZGV4IGluIHRoZSBhb0RhdGEgYXJyYXkuIFRoaXMgc2F2ZXMgYW4gaW5kZXhPZiBsb29rdXAgd2hlbiB3ZSBoYXZlIHRoZQoJCSAqIG9iamVjdCwgYnV0IHdhbnQgdG8ga25vdyB0aGUgaW5kZXgKCQkgKiAgQHR5cGUgaW50ZWdlcgoJCSAqICBAZGVmYXVsdCAtMQoJCSAqICBAcHJpdmF0ZQoJCSAqLwoJCSJpZHgiOiAtMQoJfTsKCQoJCgkvKioKCSAqIFRlbXBsYXRlIG9iamVjdCBmb3IgdGhlIGNvbHVtbiBpbmZvcm1hdGlvbiBvYmplY3QgaW4gRGF0YVRhYmxlcy4gVGhpcyBvYmplY3QKCSAqIGlzIGhlbGQgaW4gdGhlIHNldHRpbmdzIGFvQ29sdW1ucyBhcnJheSBhbmQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB0aGF0CgkgKiBEYXRhVGFibGVzIG5lZWRzIGFib3V0IGVhY2ggaW5kaXZpZHVhbCBjb2x1bW4uCgkgKgoJICogTm90ZSB0aGF0IHRoaXMgb2JqZWN0IGlzIHJlbGF0ZWQgdG8ge0BsaW5rIERhdGFUYWJsZS5kZWZhdWx0cy5jb2x1bW59CgkgKiBidXQgdGhpcyBvbmUgaXMgdGhlIGludGVybmFsIGRhdGEgc3RvcmUgZm9yIERhdGFUYWJsZXMncyBjYWNoZSBvZiBjb2x1bW5zLgoJICogSXQgc2hvdWxkIE5PVCBiZSBtYW5pcHVsYXRlZCBvdXRzaWRlIG9mIERhdGFUYWJsZXMuIEFueSBjb25maWd1cmF0aW9uIHNob3VsZAoJICogYmUgZG9uZSB0aHJvdWdoIHRoZSBpbml0aWFsaXNhdGlvbiBvcHRpb25zLgoJICogIEBuYW1lc3BhY2UKCSAqLwoJRGF0YVRhYmxlLm1vZGVscy5vQ29sdW1uID0gewoJCS8qKgoJCSAqIENvbHVtbiBpbmRleC4gVGhpcyBjb3VsZCBiZSB3b3JrZWQgb3V0IG9uLXRoZS1mbHkgd2l0aCAkLmluQXJyYXksIGJ1dCBpdAoJCSAqIGlzIGZhc3RlciB0byBqdXN0IGhvbGQgaXQgYXMgYSB2YXJpYWJsZQoJCSAqICBAdHlwZSBpbnRlZ2VyCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkiaWR4IjogbnVsbCwKCQoJCS8qKgoJCSAqIEEgbGlzdCBvZiB0aGUgY29sdW1ucyB0aGF0IHNvcnRpbmcgc2hvdWxkIG9jY3VyIG9uIHdoZW4gdGhpcyBjb2x1bW4KCQkgKiBpcyBzb3J0ZWQuIFRoYXQgdGhpcyBwcm9wZXJ0eSBpcyBhbiBhcnJheSBhbGxvd3MgbXVsdGktY29sdW1uIHNvcnRpbmcKCQkgKiB0byBiZSBkZWZpbmVkIGZvciBhIGNvbHVtbiAoZm9yIGV4YW1wbGUgZmlyc3QgbmFtZSAvIGxhc3QgbmFtZSBjb2x1bW5zCgkJICogd291bGQgYmVuZWZpdCBmcm9tIHRoaXMpLiBUaGUgdmFsdWVzIGFyZSBpbnRlZ2VycyBwb2ludGluZyB0byB0aGUKCQkgKiBjb2x1bW5zIHRvIGJlIHNvcnRlZCBvbiAodHlwaWNhbGx5IGl0IHdpbGwgYmUgYSBzaW5nbGUgaW50ZWdlciBwb2ludGluZwoJCSAqIGF0IGl0c2VsZiwgYnV0IHRoYXQgZG9lc24ndCBuZWVkIHRvIGJlIHRoZSBjYXNlKS4KCQkgKiAgQHR5cGUgYXJyYXkKCQkgKi8KCQkiYURhdGFTb3J0IjogbnVsbCwKCQoJCS8qKgoJCSAqIERlZmluZSB0aGUgc29ydGluZyBkaXJlY3Rpb25zIHRoYXQgYXJlIGFwcGxpZWQgdG8gdGhlIGNvbHVtbiwgaW4gc2VxdWVuY2UKCQkgKiBhcyB0aGUgY29sdW1uIGlzIHJlcGVhdGVkbHkgc29ydGVkIHVwb24gLSBpLmUuIHRoZSBmaXJzdCB2YWx1ZSBpcyB1c2VkCgkJICogYXMgdGhlIHNvcnRpbmcgZGlyZWN0aW9uIHdoZW4gdGhlIGNvbHVtbiBpZiBmaXJzdCBzb3J0ZWQgKGNsaWNrZWQgb24pLgoJCSAqIFNvcnQgaXQgYWdhaW4gKGNsaWNrIGFnYWluKSBhbmQgaXQgd2lsbCBtb3ZlIG9uIHRvIHRoZSBuZXh0IGluZGV4LgoJCSAqIFJlcGVhdCB1bnRpbCBsb29wLgoJCSAqICBAdHlwZSBhcnJheQoJCSAqLwoJCSJhc1NvcnRpbmciOiBudWxsLAoJCgkJLyoqCgkJICogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgY29sdW1uIGlzIHNlYXJjaGFibGUsIGFuZCB0aHVzIHNob3VsZCBiZSBpbmNsdWRlZAoJCSAqIGluIHRoZSBmaWx0ZXJpbmcgb3Igbm90LgoJCSAqICBAdHlwZSBib29sZWFuCgkJICovCgkJImJTZWFyY2hhYmxlIjogbnVsbCwKCQoJCS8qKgoJCSAqIEZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlIGNvbHVtbiBpcyBzb3J0YWJsZSBvciBub3QuCgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKi8KCQkiYlNvcnRhYmxlIjogbnVsbCwKCQoJCS8qKgoJCSAqIEZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlIGNvbHVtbiBpcyBjdXJyZW50bHkgdmlzaWJsZSBpbiB0aGUgdGFibGUgb3Igbm90CgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKi8KCQkiYlZpc2libGUiOiBudWxsLAoJCgkJLyoqCgkJICogU3RvcmUgZm9yIG1hbnVhbCB0eXBlIGFzc2lnbm1lbnQgdXNpbmcgdGhlIGBjb2x1bW4udHlwZWAgb3B0aW9uLiBUaGlzCgkJICogaXMgaGVsZCBpbiBzdG9yZSBzbyB3ZSBjYW4gbWFuaXB1bGF0ZSB0aGUgY29sdW1uJ3MgYHNUeXBlYCBwcm9wZXJ0eS4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKiAgQHByaXZhdGUKCQkgKi8KCQkiX3NNYW51YWxUeXBlIjogbnVsbCwKCQoJCS8qKgoJCSAqIEZsYWcgdG8gaW5kaWNhdGUgaWYgSFRNTDUgZGF0YSBhdHRyaWJ1dGVzIHNob3VsZCBiZSB1c2VkIGFzIHRoZSBkYXRhCgkJICogc291cmNlIGZvciBmaWx0ZXJpbmcgb3Igc29ydGluZy4gVHJ1ZSBpcyBlaXRoZXIgYXJlLgoJCSAqICBAdHlwZSBib29sZWFuCgkJICogIEBkZWZhdWx0IGZhbHNlCgkJICogIEBwcml2YXRlCgkJICovCgkJIl9iQXR0clNyYyI6IGZhbHNlLAoJCgkJLyoqCgkJICogRGV2ZWxvcGVyIGRlZmluYWJsZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuZXZlciBhIGNlbGwgaXMgY3JlYXRlZCAoQWpheCBzb3VyY2UsCgkJICogZXRjKSBvciBwcm9jZXNzZWQgZm9yIGlucHV0IChET00gc291cmNlKS4gVGhpcyBjYW4gYmUgdXNlZCBhcyBhIGNvbXBsaW1lbnQgdG8gbVJlbmRlcgoJCSAqIGFsbG93aW5nIHlvdSB0byBtb2RpZnkgdGhlIERPTSBlbGVtZW50IChhZGQgYmFja2dyb3VuZCBjb2xvdXIgZm9yIGV4YW1wbGUpIHdoZW4gdGhlCgkJICogZWxlbWVudCBpcyBhdmFpbGFibGUuCgkJICogIEB0eXBlIGZ1bmN0aW9uCgkJICogIEBwYXJhbSB7ZWxlbWVudH0gblRkIFRoZSBURCBub2RlIHRoYXQgaGFzIGJlZW4gY3JlYXRlZAoJCSAqICBAcGFyYW0geyp9IHNEYXRhIFRoZSBEYXRhIGZvciB0aGUgY2VsbAoJCSAqICBAcGFyYW0ge2FycmF5fG9iamVjdH0gb0RhdGEgVGhlIGRhdGEgZm9yIHRoZSB3aG9sZSByb3cKCQkgKiAgQHBhcmFtIHtpbnR9IGlSb3cgVGhlIHJvdyBpbmRleCBmb3IgdGhlIGFvRGF0YSBkYXRhIHN0b3JlCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkiZm5DcmVhdGVkQ2VsbCI6IG51bGwsCgkKCQkvKioKCQkgKiBGdW5jdGlvbiB0byBnZXQgZGF0YSBmcm9tIGEgY2VsbCBpbiBhIGNvbHVtbi4gWW91IHNob3VsZCA8Yj5uZXZlcjwvYj4KCQkgKiBhY2Nlc3MgZGF0YSBkaXJlY3RseSB0aHJvdWdoIF9hRGF0YSBpbnRlcm5hbGx5IGluIERhdGFUYWJsZXMgLSBhbHdheXMgdXNlCgkJICogdGhlIG1ldGhvZCBhdHRhY2hlZCB0byB0aGlzIHByb3BlcnR5LiBJdCBhbGxvd3MgbURhdGEgdG8gZnVuY3Rpb24gYXMKCQkgKiByZXF1aXJlZC4gVGhpcyBmdW5jdGlvbiBpcyBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIGJ5IHRoZSBjb2x1bW4KCQkgKiBpbml0aWFsaXNhdGlvbiBtZXRob2QKCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKiAgQHBhcmFtIHthcnJheXxvYmplY3R9IG9EYXRhIFRoZSBkYXRhIGFycmF5L29iamVjdCBmb3IgdGhlIGFycmF5CgkJICogICAgKGkuZS4gYW9EYXRhW10uX2FEYXRhKQoJCSAqICBAcGFyYW0ge3N0cmluZ30gc1NwZWNpZmljIFRoZSBzcGVjaWZpYyBkYXRhIHR5cGUgeW91IHdhbnQgdG8gZ2V0IC0KCQkgKiAgICAnZGlzcGxheScsICd0eXBlJyAnZmlsdGVyJyAnc29ydCcKCQkgKiAgQHJldHVybnMgeyp9IFRoZSBkYXRhIGZvciB0aGUgY2VsbCBmcm9tIHRoZSBnaXZlbiByb3cncyBkYXRhCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkiZm5HZXREYXRhIjogbnVsbCwKCQoJCS8qKgoJCSAqIEZ1bmN0aW9uIHRvIHNldCBkYXRhIGZvciBhIGNlbGwgaW4gdGhlIGNvbHVtbi4gWW91IHNob3VsZCA8Yj5uZXZlcjwvYj4KCQkgKiBzZXQgdGhlIGRhdGEgZGlyZWN0bHkgdG8gX2FEYXRhIGludGVybmFsbHkgaW4gRGF0YVRhYmxlcyAtIGFsd2F5cyB1c2UKCQkgKiB0aGlzIG1ldGhvZC4gSXQgYWxsb3dzIG1EYXRhIHRvIGZ1bmN0aW9uIGFzIHJlcXVpcmVkLiBUaGlzIGZ1bmN0aW9uCgkJICogaXMgYXV0b21hdGljYWxseSBhc3NpZ25lZCBieSB0aGUgY29sdW1uIGluaXRpYWxpc2F0aW9uIG1ldGhvZAoJCSAqICBAdHlwZSBmdW5jdGlvbgoJCSAqICBAcGFyYW0ge2FycmF5fG9iamVjdH0gb0RhdGEgVGhlIGRhdGEgYXJyYXkvb2JqZWN0IGZvciB0aGUgYXJyYXkKCQkgKiAgICAoaS5lLiBhb0RhdGFbXS5fYURhdGEpCgkJICogIEBwYXJhbSB7Kn0gc1ZhbHVlIFZhbHVlIHRvIHNldAoJCSAqICBAZGVmYXVsdCBudWxsCgkJICovCgkJImZuU2V0RGF0YSI6IG51bGwsCgkKCQkvKioKCQkgKiBQcm9wZXJ0eSB0byByZWFkIHRoZSB2YWx1ZSBmb3IgdGhlIGNlbGxzIGluIHRoZSBjb2x1bW4gZnJvbSB0aGUgZGF0YQoJCSAqIHNvdXJjZSBhcnJheSAvIG9iamVjdC4gSWYgbnVsbCwgdGhlbiB0aGUgZGVmYXVsdCBjb250ZW50IGlzIHVzZWQsIGlmIGEKCQkgKiBmdW5jdGlvbiBpcyBnaXZlbiB0aGVuIHRoZSByZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24gaXMgdXNlZC4KCQkgKiAgQHR5cGUgZnVuY3Rpb258aW50fHN0cmluZ3xudWxsCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkibURhdGEiOiBudWxsLAoJCgkJLyoqCgkJICogUGFydG5lciBwcm9wZXJ0eSB0byBtRGF0YSB3aGljaCBpcyB1c2VkIChvbmx5IHdoZW4gZGVmaW5lZCkgdG8gZ2V0CgkJICogdGhlIGRhdGEgLSBpLmUuIGl0IGlzIGJhc2ljYWxseSB0aGUgc2FtZSBhcyBtRGF0YSwgYnV0IHdpdGhvdXQgdGhlCgkJICogJ3NldCcgb3B0aW9uLCBhbmQgYWxzbyB0aGUgZGF0YSBmZWQgdG8gaXQgaXMgdGhlIHJlc3VsdCBmcm9tIG1EYXRhLgoJCSAqIFRoaXMgaXMgdGhlIHJlbmRlcmluZyBtZXRob2QgdG8gbWF0Y2ggdGhlIGRhdGEgbWV0aG9kIG9mIG1EYXRhLgoJCSAqICBAdHlwZSBmdW5jdGlvbnxpbnR8c3RyaW5nfG51bGwKCQkgKiAgQGRlZmF1bHQgbnVsbAoJCSAqLwoJCSJtUmVuZGVyIjogbnVsbCwKCQoJCS8qKgoJCSAqIFVuaXF1ZSBoZWFkZXIgVEgvVEQgZWxlbWVudCBmb3IgdGhpcyBjb2x1bW4gLSB0aGlzIGlzIHdoYXQgdGhlIHNvcnRpbmcKCQkgKiBsaXN0ZW5lciBpcyBhdHRhY2hlZCB0byAoaWYgc29ydGluZyBpcyBlbmFibGVkLikKCQkgKiAgQHR5cGUgbm9kZQoJCSAqICBAZGVmYXVsdCBudWxsCgkJICovCgkJIm5UaCI6IG51bGwsCgkKCQkvKioKCQkgKiBVbmlxdWUgZm9vdGVyIFRIL1REIGVsZW1lbnQgZm9yIHRoaXMgY29sdW1uIChpZiB0aGVyZSBpcyBvbmUpLiBOb3QgdXNlZAoJCSAqIGluIERhdGFUYWJsZXMgYXMgc3VjaCwgYnV0IGNhbiBiZSB1c2VkIGZvciBwbHVnLWlucyB0byByZWZlcmVuY2UgdGhlCgkJICogZm9vdGVyIGZvciBlYWNoIGNvbHVtbi4KCQkgKiAgQHR5cGUgbm9kZQoJCSAqICBAZGVmYXVsdCBudWxsCgkJICovCgkJIm5UZiI6IG51bGwsCgkKCQkvKioKCQkgKiBUaGUgY2xhc3MgdG8gYXBwbHkgdG8gYWxsIFREIGVsZW1lbnRzIGluIHRoZSB0YWJsZSdzIFRCT0RZIGZvciB0aGUgY29sdW1uCgkJICogIEB0eXBlIHN0cmluZwoJCSAqICBAZGVmYXVsdCBudWxsCgkJICovCgkJInNDbGFzcyI6IG51bGwsCgkKCQkvKioKCQkgKiBXaGVuIERhdGFUYWJsZXMgY2FsY3VsYXRlcyB0aGUgY29sdW1uIHdpZHRocyB0byBhc3NpZ24gdG8gZWFjaCBjb2x1bW4sCgkJICogaXQgZmluZHMgdGhlIGxvbmdlc3Qgc3RyaW5nIGluIGVhY2ggY29sdW1uIGFuZCB0aGVuIGNvbnN0cnVjdHMgYQoJCSAqIHRlbXBvcmFyeSB0YWJsZSBhbmQgcmVhZHMgdGhlIHdpZHRocyBmcm9tIHRoYXQuIFRoZSBwcm9ibGVtIHdpdGggdGhpcwoJCSAqIGlzIHRoYXQgIm1tbSIgaXMgbXVjaCB3aWRlciB0aGVuICJpaWlpIiwgYnV0IHRoZSBsYXR0ZXIgaXMgYSBsb25nZXIKCQkgKiBzdHJpbmcgLSB0aHVzIHRoZSBjYWxjdWxhdGlvbiBjYW4gZ28gd3JvbmcgKGRvaW5nIGl0IHByb3Blcmx5IGFuZCBwdXR0aW5nCgkJICogaXQgaW50byBhbiBET00gb2JqZWN0IGFuZCBtZWFzdXJpbmcgdGhhdCBpcyBob3JyaWJseSghKSBzbG93KS4gVGh1cyBhcwoJCSAqIGEgIndvcmsgYXJvdW5kIiB3ZSBwcm92aWRlIHRoaXMgb3B0aW9uLiBJdCB3aWxsIGFwcGVuZCBpdHMgdmFsdWUgdG8gdGhlCgkJICogdGV4dCB0aGF0IGlzIGZvdW5kIHRvIGJlIHRoZSBsb25nZXN0IHN0cmluZyBmb3IgdGhlIGNvbHVtbiAtIGkuZS4gcGFkZGluZy4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICovCgkJInNDb250ZW50UGFkZGluZyI6IG51bGwsCgkKCQkvKioKCQkgKiBBbGxvd3MgYSBkZWZhdWx0IHZhbHVlIHRvIGJlIGdpdmVuIGZvciBhIGNvbHVtbidzIGRhdGEsIGFuZCB3aWxsIGJlIHVzZWQKCQkgKiB3aGVuZXZlciBhIG51bGwgZGF0YSBzb3VyY2UgaXMgZW5jb3VudGVyZWQgKHRoaXMgY2FuIGJlIGJlY2F1c2UgbURhdGEKCQkgKiBpcyBzZXQgdG8gbnVsbCwgb3IgYmVjYXVzZSB0aGUgZGF0YSBzb3VyY2UgaXRzZWxmIGlzIG51bGwpLgoJCSAqICBAdHlwZSBzdHJpbmcKCQkgKiAgQGRlZmF1bHQgbnVsbAoJCSAqLwoJCSJzRGVmYXVsdENvbnRlbnQiOiBudWxsLAoJCgkJLyoqCgkJICogTmFtZSBmb3IgdGhlIGNvbHVtbiwgYWxsb3dpbmcgcmVmZXJlbmNlIHRvIHRoZSBjb2x1bW4gYnkgbmFtZSBhcyB3ZWxsIGFzCgkJICogYnkgaW5kZXggKG5lZWRzIGEgbG9va3VwIHRvIHdvcmsgYnkgbmFtZSkuCgkJICogIEB0eXBlIHN0cmluZwoJCSAqLwoJCSJzTmFtZSI6IG51bGwsCgkKCQkvKioKCQkgKiBDdXN0b20gc29ydGluZyBkYXRhIHR5cGUgLSBkZWZpbmVzIHdoaWNoIG9mIHRoZSBhdmFpbGFibGUgcGx1Zy1pbnMgaW4KCQkgKiBhZm5Tb3J0RGF0YSB0aGUgY3VzdG9tIHNvcnRpbmcgd2lsbCB1c2UgLSBpZiBhbnkgaXMgZGVmaW5lZC4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IHN0ZAoJCSAqLwoJCSJzU29ydERhdGFUeXBlIjogJ3N0ZCcsCgkKCQkvKioKCQkgKiBDbGFzcyB0byBiZSBhcHBsaWVkIHRvIHRoZSBoZWFkZXIgZWxlbWVudCB3aGVuIHNvcnRpbmcgb24gdGhpcyBjb2x1bW4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkic1NvcnRpbmdDbGFzcyI6IG51bGwsCgkKCQkvKioKCQkgKiBDbGFzcyB0byBiZSBhcHBsaWVkIHRvIHRoZSBoZWFkZXIgZWxlbWVudCB3aGVuIHNvcnRpbmcgb24gdGhpcyBjb2x1bW4gLQoJCSAqIHdoZW4galF1ZXJ5IFVJIHRoZW1pbmcgaXMgdXNlZC4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkic1NvcnRpbmdDbGFzc0pVSSI6IG51bGwsCgkKCQkvKioKCQkgKiBUaXRsZSBvZiB0aGUgY29sdW1uIC0gd2hhdCBpcyBzZWVuIGluIHRoZSBUSCBlbGVtZW50IChuVGgpLgoJCSAqICBAdHlwZSBzdHJpbmcKCQkgKi8KCQkic1RpdGxlIjogbnVsbCwKCQoJCS8qKgoJCSAqIENvbHVtbiBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgdHlwZQoJCSAqICBAdHlwZSBzdHJpbmcKCQkgKiAgQGRlZmF1bHQgbnVsbAoJCSAqLwoJCSJzVHlwZSI6IG51bGwsCgkKCQkvKioKCQkgKiBXaWR0aCBvZiB0aGUgY29sdW1uCgkJICogIEB0eXBlIHN0cmluZwoJCSAqICBAZGVmYXVsdCBudWxsCgkJICovCgkJInNXaWR0aCI6IG51bGwsCgkKCQkvKioKCQkgKiBXaWR0aCBvZiB0aGUgY29sdW1uIHdoZW4gaXQgd2FzIGZpcnN0ICJlbmNvdW50ZXJlZCIKCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkic1dpZHRoT3JpZyI6IG51bGwKCX07CgkKCQoJLyoKCSAqIERldmVsb3BlciBub3RlOiBUaGUgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGJlbG93IGFyZSBnaXZlbiBpbiBIdW5nYXJpYW4KCSAqIG5vdGF0aW9uLCB0aGF0IHdhcyB1c2VkIGFzIHRoZSBpbnRlcmZhY2UgZm9yIERhdGFUYWJsZXMgcHJpb3IgdG8gdjEuMTAsIGhvd2V2ZXIKCSAqIGZyb20gdjEuMTAgb253YXJkcyB0aGUgcHJpbWFyeSBpbnRlcmZhY2UgaXMgY2FtZWwgY2FzZS4gSW4gb3JkZXIgdG8gYXZvaWQKCSAqIGJyZWFraW5nIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHV0dGVybHkgd2l0aCB0aGlzIGNoYW5nZSwgdGhlIEh1bmdhcmlhbgoJICogdmVyc2lvbiBpcyBzdGlsbCwgaW50ZXJuYWxseSB0aGUgcHJpbWFyeSBpbnRlcmZhY2UsIGJ1dCBpcyBpcyBub3QgZG9jdW1lbnRlZAoJICogLSBoZW5jZSB0aGUgQG5hbWUgdGFncyBpbiBlYWNoIGRvYyBjb21tZW50LiBUaGlzIGFsbG93cyBhIEphdmFzY3JpcHQgZnVuY3Rpb24KCSAqIHRvIGNyZWF0ZSBhIG1hcCBmcm9tIEh1bmdhcmlhbiBub3RhdGlvbiB0byBjYW1lbCBjYXNlIChnb2luZyB0aGUgb3RoZXIgZGlyZWN0aW9uCgkgKiB3b3VsZCByZXF1aXJlIGVhY2ggcHJvcGVydHkgdG8gYmUgbGlzdGVkLCB3aGljaCB3b3VsZCBhdCBhcm91bmQgM0sgdG8gdGhlIHNpemUKCSAqIG9mIERhdGFUYWJsZXMsIHdoaWxlIHRoaXMgbWV0aG9kIGlzIGFib3V0IGEgMC41SyBoaXQuCgkgKgoJICogVWx0aW1hdGVseSB0aGlzIGRvZXMgcGF2ZSB0aGUgd2F5IGZvciBIdW5nYXJpYW4gbm90YXRpb24gdG8gYmUgZHJvcHBlZAoJICogY29tcGxldGVseSwgYnV0IHRoYXQgaXMgYSBtYXNzaXZlIGFtb3VudCBvZiB3b3JrIGFuZCB3aWxsIGJyZWFrIGN1cnJlbnQKCSAqIGluc3RhbGxzICh0aGVyZWZvcmUgaXMgb24taG9sZCB1bnRpbCB2MikuCgkgKi8KCQoJLyoqCgkgKiBJbml0aWFsaXNhdGlvbiBvcHRpb25zIHRoYXQgY2FuIGJlIGdpdmVuIHRvIERhdGFUYWJsZXMgYXQgaW5pdGlhbGlzYXRpb24KCSAqIHRpbWUuCgkgKiAgQG5hbWVzcGFjZQoJICovCglEYXRhVGFibGUuZGVmYXVsdHMgPSB7CgkJLyoqCgkJICogQW4gYXJyYXkgb2YgZGF0YSB0byB1c2UgZm9yIHRoZSB0YWJsZSwgcGFzc2VkIGluIGF0IGluaXRpYWxpc2F0aW9uIHdoaWNoCgkJICogd2lsbCBiZSB1c2VkIGluIHByZWZlcmVuY2UgdG8gYW55IGRhdGEgd2hpY2ggaXMgYWxyZWFkeSBpbiB0aGUgRE9NLiBUaGlzIGlzCgkJICogcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgY29uc3RydWN0aW5nIHRhYmxlcyBwdXJlbHkgaW4gSmF2YXNjcmlwdCwgZm9yCgkJICogZXhhbXBsZSB3aXRoIGEgY3VzdG9tIEFqYXggY2FsbC4KCQkgKiAgQHR5cGUgYXJyYXkKCQkgKiAgQGRlZmF1bHQgbnVsbAoJCSAqCgkJICogIEBkdG9wdCBPcHRpb24KCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmRhdGEKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFVzaW5nIGEgMkQgYXJyYXkgZGF0YSBzb3VyY2UKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24gKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImRhdGEiOiBbCgkJICogICAgICAgICAgWydUcmlkZW50JywgJ0ludGVybmV0IEV4cGxvcmVyIDQuMCcsICdXaW4gOTUrJywgNCwgJ1gnXSwKCQkgKiAgICAgICAgICBbJ1RyaWRlbnQnLCAnSW50ZXJuZXQgRXhwbG9yZXIgNS4wJywgJ1dpbiA5NSsnLCA1LCAnQyddLAoJCSAqICAgICAgICBdLAoJCSAqICAgICAgICAiY29sdW1ucyI6IFsKCQkgKiAgICAgICAgICB7ICJ0aXRsZSI6ICJFbmdpbmUiIH0sCgkJICogICAgICAgICAgeyAidGl0bGUiOiAiQnJvd3NlciIgfSwKCQkgKiAgICAgICAgICB7ICJ0aXRsZSI6ICJQbGF0Zm9ybSIgfSwKCQkgKiAgICAgICAgICB7ICJ0aXRsZSI6ICJWZXJzaW9uIiB9LAoJCSAqICAgICAgICAgIHsgInRpdGxlIjogIkdyYWRlIiB9CgkJICogICAgICAgIF0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBVc2luZyBhbiBhcnJheSBvZiBvYmplY3RzIGFzIGEgZGF0YSBzb3VyY2UgKGBkYXRhYCkKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24gKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImRhdGEiOiBbCgkJICogICAgICAgICAgewoJCSAqICAgICAgICAgICAgImVuZ2luZSI6ICAgIlRyaWRlbnQiLAoJCSAqICAgICAgICAgICAgImJyb3dzZXIiOiAgIkludGVybmV0IEV4cGxvcmVyIDQuMCIsCgkJICogICAgICAgICAgICAicGxhdGZvcm0iOiAiV2luIDk1KyIsCgkJICogICAgICAgICAgICAidmVyc2lvbiI6ICA0LAoJCSAqICAgICAgICAgICAgImdyYWRlIjogICAgIlgiCgkJICogICAgICAgICAgfSwKCQkgKiAgICAgICAgICB7CgkJICogICAgICAgICAgICAiZW5naW5lIjogICAiVHJpZGVudCIsCgkJICogICAgICAgICAgICAiYnJvd3NlciI6ICAiSW50ZXJuZXQgRXhwbG9yZXIgNS4wIiwKCQkgKiAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJXaW4gOTUrIiwKCQkgKiAgICAgICAgICAgICJ2ZXJzaW9uIjogIDUsCgkJICogICAgICAgICAgICAiZ3JhZGUiOiAgICAiQyIKCQkgKiAgICAgICAgICB9CgkJICogICAgICAgIF0sCgkJICogICAgICAgICJjb2x1bW5zIjogWwoJCSAqICAgICAgICAgIHsgInRpdGxlIjogIkVuZ2luZSIsICAgImRhdGEiOiAiZW5naW5lIiB9LAoJCSAqICAgICAgICAgIHsgInRpdGxlIjogIkJyb3dzZXIiLCAgImRhdGEiOiAiYnJvd3NlciIgfSwKCQkgKiAgICAgICAgICB7ICJ0aXRsZSI6ICJQbGF0Zm9ybSIsICJkYXRhIjogInBsYXRmb3JtIiB9LAoJCSAqICAgICAgICAgIHsgInRpdGxlIjogIlZlcnNpb24iLCAgImRhdGEiOiAidmVyc2lvbiIgfSwKCQkgKiAgICAgICAgICB7ICJ0aXRsZSI6ICJHcmFkZSIsICAgICJkYXRhIjogImdyYWRlIiB9CgkJICogICAgICAgIF0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImFhRGF0YSI6IG51bGwsCgkKCQoJCS8qKgoJCSAqIElmIG9yZGVyaW5nIGlzIGVuYWJsZWQsIHRoZW4gRGF0YVRhYmxlcyB3aWxsIHBlcmZvcm0gYSBmaXJzdCBwYXNzIHNvcnQgb24KCQkgKiBpbml0aWFsaXNhdGlvbi4gWW91IGNhbiBkZWZpbmUgd2hpY2ggY29sdW1uKHMpIHRoZSBzb3J0IGlzIHBlcmZvcm1lZAoJCSAqIHVwb24sIGFuZCB0aGUgc29ydGluZyBkaXJlY3Rpb24sIHdpdGggdGhpcyB2YXJpYWJsZS4gVGhlIGBzb3J0aW5nYCBhcnJheQoJCSAqIHNob3VsZCBjb250YWluIGFuIGFycmF5IGZvciBlYWNoIGNvbHVtbiB0byBiZSBzb3J0ZWQgaW5pdGlhbGx5IGNvbnRhaW5pbmcKCQkgKiB0aGUgY29sdW1uJ3MgaW5kZXggYW5kIGEgZGlyZWN0aW9uIHN0cmluZyAoJ2FzYycgb3IgJ2Rlc2MnKS4KCQkgKiAgQHR5cGUgYXJyYXkKCQkgKiAgQGRlZmF1bHQgW1swLCdhc2MnXV0KCQkgKgoJCSAqICBAZHRvcHQgT3B0aW9uCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5vcmRlcgoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgLy8gU29ydCBieSAzcmQgY29sdW1uIGZpcnN0LCBhbmQgdGhlbiA0dGggY29sdW1uCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgIm9yZGVyIjogW1syLCdhc2MnXSwgWzMsJ2Rlc2MnXV0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICoKCQkgKiAgICAvLyBObyBpbml0aWFsIHNvcnRpbmcKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAib3JkZXIiOiBbXQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiYWFTb3J0aW5nIjogW1swLCdhc2MnXV0sCgkKCQoJCS8qKgoJCSAqIFRoaXMgcGFyYW1ldGVyIGlzIGJhc2ljYWxseSBpZGVudGljYWwgdG8gdGhlIGBzb3J0aW5nYCBwYXJhbWV0ZXIsIGJ1dAoJCSAqIGNhbm5vdCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdGFibGUuIFdoYXQgdGhpcyBtZWFucwoJCSAqIGlzIHRoYXQgeW91IGNvdWxkIGhhdmUgYSBjb2x1bW4gKHZpc2libGUgb3IgaGlkZGVuKSB3aGljaCB0aGUgc29ydGluZwoJCSAqIHdpbGwgYWx3YXlzIGJlIGZvcmNlZCBvbiBmaXJzdCAtIGFueSBzb3J0aW5nIGFmdGVyIHRoYXQgKGZyb20gdGhlIHVzZXIpCgkJICogd2lsbCB0aGVuIGJlIHBlcmZvcm1lZCBhcyByZXF1aXJlZC4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBncm91cGluZyByb3dzCgkJICogdG9nZXRoZXIuCgkJICogIEB0eXBlIGFycmF5CgkJICogIEBkZWZhdWx0IG51bGwKCQkgKgoJCSAqICBAZHRvcHQgT3B0aW9uCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5vcmRlckZpeGVkCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAib3JkZXJGaXhlZCI6IFtbMCwnYXNjJ11dCgkJICogICAgICB9ICk7CgkJICogICAgfSApCgkJICovCgkJImFhU29ydGluZ0ZpeGVkIjogW10sCgkKCQoJCS8qKgoJCSAqIERhdGFUYWJsZXMgY2FuIGJlIGluc3RydWN0ZWQgdG8gbG9hZCBkYXRhIHRvIGRpc3BsYXkgaW4gdGhlIHRhYmxlIGZyb20gYQoJCSAqIEFqYXggc291cmNlLiBUaGlzIG9wdGlvbiBkZWZpbmVzIGhvdyB0aGF0IEFqYXggY2FsbCBpcyBtYWRlIGFuZCB3aGVyZSB0by4KCQkgKgoJCSAqIFRoZSBgYWpheGAgcHJvcGVydHkgaGFzIHRocmVlIGRpZmZlcmVudCBtb2RlcyBvZiBvcGVyYXRpb24sIGRlcGVuZGluZyBvbgoJCSAqIGhvdyBpdCBpcyBkZWZpbmVkLiBUaGVzZSBhcmU6CgkJICoKCQkgKiAqIGBzdHJpbmdgIC0gU2V0IHRoZSBVUkwgZnJvbSB3aGVyZSB0aGUgZGF0YSBzaG91bGQgYmUgbG9hZGVkIGZyb20uCgkJICogKiBgb2JqZWN0YCAtIERlZmluZSBwcm9wZXJ0aWVzIGZvciBgalF1ZXJ5LmFqYXhgLgoJCSAqICogYGZ1bmN0aW9uYCAtIEN1c3RvbSBkYXRhIGdldCBmdW5jdGlvbgoJCSAqCgkJICogYHN0cmluZ2AKCQkgKiAtLS0tLS0tLQoJCSAqCgkJICogQXMgYSBzdHJpbmcsIHRoZSBgYWpheGAgcHJvcGVydHkgc2ltcGx5IGRlZmluZXMgdGhlIFVSTCBmcm9tIHdoaWNoCgkJICogRGF0YVRhYmxlcyB3aWxsIGxvYWQgZGF0YS4KCQkgKgoJCSAqIGBvYmplY3RgCgkJICogLS0tLS0tLS0KCQkgKgoJCSAqIEFzIGFuIG9iamVjdCwgdGhlIHBhcmFtZXRlcnMgaW4gdGhlIG9iamVjdCBhcmUgcGFzc2VkIHRvCgkJICogW2pRdWVyeS5hamF4XShodHRwOi8vYXBpLmpxdWVyeS5jb20valF1ZXJ5LmFqYXgvKSBhbGxvd2luZyBmaW5lIGNvbnRyb2wKCQkgKiBvZiB0aGUgQWpheCByZXF1ZXN0LiBEYXRhVGFibGVzIGhhcyBhIG51bWJlciBvZiBkZWZhdWx0IHBhcmFtZXRlcnMgd2hpY2gKCQkgKiB5b3UgY2FuIG92ZXJyaWRlIHVzaW5nIHRoaXMgb3B0aW9uLiBQbGVhc2UgcmVmZXIgdG8gdGhlIGpRdWVyeQoJCSAqIGRvY3VtZW50YXRpb24gZm9yIGEgZnVsbCBkZXNjcmlwdGlvbiBvZiB0aGUgb3B0aW9ucyBhdmFpbGFibGUsIGFsdGhvdWdoCgkJICogdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIHByb3ZpZGUgYWRkaXRpb25hbCBvcHRpb25zIGluIERhdGFUYWJsZXMgb3IKCQkgKiByZXF1aXJlIHNwZWNpYWwgY29uc2lkZXJhdGlvbjoKCQkgKgoJCSAqICogYGRhdGFgIC0gQXMgd2l0aCBqUXVlcnksIGBkYXRhYCBjYW4gYmUgcHJvdmlkZWQgYXMgYW4gb2JqZWN0LCBidXQgaXQKCQkgKiAgIGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBmdW5jdGlvbiB0byBtYW5pcHVsYXRlIHRoZSBkYXRhIERhdGFUYWJsZXMgc2VuZHMKCQkgKiAgIHRvIHRoZSBzZXJ2ZXIuIFRoZSBmdW5jdGlvbiB0YWtlcyBhIHNpbmdsZSBwYXJhbWV0ZXIsIGFuIG9iamVjdCBvZgoJCSAqICAgcGFyYW1ldGVycyB3aXRoIHRoZSB2YWx1ZXMgdGhhdCBEYXRhVGFibGVzIGhhcyByZWFkaWVkIGZvciBzZW5kaW5nLiBBbgoJCSAqICAgb2JqZWN0IG1heSBiZSByZXR1cm5lZCB3aGljaCB3aWxsIGJlIG1lcmdlZCBpbnRvIHRoZSBEYXRhVGFibGVzCgkJICogICBkZWZhdWx0cywgb3IgeW91IGNhbiBhZGQgdGhlIGl0ZW1zIHRvIHRoZSBvYmplY3QgdGhhdCB3YXMgcGFzc2VkIGluIGFuZAoJCSAqICAgbm90IHJldHVybiBhbnl0aGluZyBmcm9tIHRoZSBmdW5jdGlvbi4gVGhpcyBzdXBlcnNlZGVzIGBmblNlcnZlclBhcmFtc2AKCQkgKiAgIGZyb20gRGF0YVRhYmxlcyAxLjktLgoJCSAqCgkJICogKiBgZGF0YVNyY2AgLSBCeSBkZWZhdWx0IERhdGFUYWJsZXMgd2lsbCBsb29rIGZvciB0aGUgcHJvcGVydHkgYGRhdGFgIChvcgoJCSAqICAgYGFhRGF0YWAgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBEYXRhVGFibGVzIDEuOS0pIHdoZW4gb2J0YWluaW5nIGRhdGEKCQkgKiAgIGZyb20gYW4gQWpheCBzb3VyY2Ugb3IgZm9yIHNlcnZlci1zaWRlIHByb2Nlc3NpbmcgLSB0aGlzIHBhcmFtZXRlcgoJCSAqICAgYWxsb3dzIHRoYXQgcHJvcGVydHkgdG8gYmUgY2hhbmdlZC4gWW91IGNhbiB1c2UgSmF2YXNjcmlwdCBkb3R0ZWQKCQkgKiAgIG9iamVjdCBub3RhdGlvbiB0byBnZXQgYSBkYXRhIHNvdXJjZSBmb3IgbXVsdGlwbGUgbGV2ZWxzIG9mIG5lc3RpbmcsIG9yCgkJICogICBpdCBteSBiZSB1c2VkIGFzIGEgZnVuY3Rpb24uIEFzIGEgZnVuY3Rpb24gaXQgdGFrZXMgYSBzaW5nbGUgcGFyYW1ldGVyLAoJCSAqICAgdGhlIEpTT04gcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyLCB3aGljaCBjYW4gYmUgbWFuaXB1bGF0ZWQgYXMKCQkgKiAgIHJlcXVpcmVkLCB3aXRoIHRoZSByZXR1cm5lZCB2YWx1ZSBiZWluZyB0aGF0IHVzZWQgYnkgRGF0YVRhYmxlcyBhcyB0aGUKCQkgKiAgIGRhdGEgc291cmNlIGZvciB0aGUgdGFibGUuIFRoaXMgc3VwZXJzZWRlcyBgc0FqYXhEYXRhUHJvcGAgZnJvbQoJCSAqICAgRGF0YVRhYmxlcyAxLjktLgoJCSAqCgkJICogKiBgc3VjY2Vzc2AgLSBTaG91bGQgbm90IGJlIG92ZXJyaWRkZW4gaXQgaXMgdXNlZCBpbnRlcm5hbGx5IGluCgkJICogICBEYXRhVGFibGVzLiBUbyBtYW5pcHVsYXRlIC8gdHJhbnNmb3JtIHRoZSBkYXRhIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIKCQkgKiAgIHVzZSBgYWpheC5kYXRhU3JjYCwgb3IgdXNlIGBhamF4YCBhcyBhIGZ1bmN0aW9uIChzZWUgYmVsb3cpLgoJCSAqCgkJICogYGZ1bmN0aW9uYAoJCSAqIC0tLS0tLS0tLS0KCQkgKgoJCSAqIEFzIGEgZnVuY3Rpb24sIG1ha2luZyB0aGUgQWpheCBjYWxsIGlzIGxlZnQgdXAgdG8geW91cnNlbGYgYWxsb3dpbmcKCQkgKiBjb21wbGV0ZSBjb250cm9sIG9mIHRoZSBBamF4IHJlcXVlc3QuIEluZGVlZCwgaWYgZGVzaXJlZCwgYSBtZXRob2Qgb3RoZXIKCQkgKiB0aGFuIEFqYXggY291bGQgYmUgdXNlZCB0byBvYnRhaW4gdGhlIHJlcXVpcmVkIGRhdGEsIHN1Y2ggYXMgV2ViIHN0b3JhZ2UKCQkgKiBvciBhbiBBSVIgZGF0YWJhc2UuCgkJICoKCQkgKiBUaGUgZnVuY3Rpb24gaXMgZ2l2ZW4gZm91ciBwYXJhbWV0ZXJzIGFuZCBubyByZXR1cm4gaXMgcmVxdWlyZWQuIFRoZQoJCSAqIHBhcmFtZXRlcnMgYXJlOgoJCSAqCgkJICogMS4gX29iamVjdF8gLSBEYXRhIHRvIHNlbmQgdG8gdGhlIHNlcnZlcgoJCSAqIDIuIF9mdW5jdGlvbl8gLSBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IG11c3QgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgcmVxdWlyZWQKCQkgKiAgICBkYXRhIGhhcyBiZWVuIG9idGFpbmVkLiBUaGF0IGRhdGEgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoZSBjYWxsYmFjawoJCSAqICAgIGFzIHRoZSBvbmx5IHBhcmFtZXRlcgoJCSAqIDMuIF9vYmplY3RfIC0gRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QgZm9yIHRoZSB0YWJsZQoJCSAqCgkJICogTm90ZSB0aGF0IHRoaXMgc3VwZXJzZWRlcyBgZm5TZXJ2ZXJEYXRhYCBmcm9tIERhdGFUYWJsZXMgMS45LS4KCQkgKgoJCSAqICBAdHlwZSBzdHJpbmd8b2JqZWN0fGZ1bmN0aW9uCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKgoJCSAqICBAZHRvcHQgT3B0aW9uCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5hamF4CgkJICogIEBzaW5jZSAxLjEwLjAKCQkgKgoJCSAqIEBleGFtcGxlCgkJICogICAvLyBHZXQgSlNPTiBkYXRhIGZyb20gYSBmaWxlIHZpYSBBamF4LgoJCSAqICAgLy8gTm90ZSBEYXRhVGFibGVzIGV4cGVjdHMgZGF0YSBpbiB0aGUgZm9ybSBgeyBkYXRhOiBbIC4uLmRhdGEuLi4gXSB9YCBieSBkZWZhdWx0KS4KCQkgKiAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICJhamF4IjogImRhdGEuanNvbiIKCQkgKiAgIH0gKTsKCQkgKgoJCSAqIEBleGFtcGxlCgkJICogICAvLyBHZXQgSlNPTiBkYXRhIGZyb20gYSBmaWxlIHZpYSBBamF4LCB1c2luZyBgZGF0YVNyY2AgdG8gY2hhbmdlCgkJICogICAvLyBgZGF0YWAgdG8gYHRhYmxlRGF0YWAgKGkuZS4gYHsgdGFibGVEYXRhOiBbIC4uLmRhdGEuLi4gXSB9YCkKCQkgKiAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICJhamF4IjogewoJCSAqICAgICAgICJ1cmwiOiAiZGF0YS5qc29uIiwKCQkgKiAgICAgICAiZGF0YVNyYyI6ICJ0YWJsZURhdGEiCgkJICogICAgIH0KCQkgKiAgIH0gKTsKCQkgKgoJCSAqIEBleGFtcGxlCgkJICogICAvLyBHZXQgSlNPTiBkYXRhIGZyb20gYSBmaWxlIHZpYSBBamF4LCB1c2luZyBgZGF0YVNyY2AgdG8gcmVhZCBkYXRhCgkJICogICAvLyBmcm9tIGEgcGxhaW4gYXJyYXkgcmF0aGVyIHRoYW4gYW4gYXJyYXkgaW4gYW4gb2JqZWN0CgkJICogICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAiYWpheCI6IHsKCQkgKiAgICAgICAidXJsIjogImRhdGEuanNvbiIsCgkJICogICAgICAgImRhdGFTcmMiOiAiIgoJCSAqICAgICB9CgkJICogICB9ICk7CgkJICoKCQkgKiBAZXhhbXBsZQoJCSAqICAgLy8gTWFuaXB1bGF0ZSB0aGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIgLSBhZGQgYSBsaW5rIHRvIGRhdGEKCQkgKiAgIC8vIChub3RlIHRoaXMgY2FuLCBzaG91bGQsIGJlIGRvbmUgdXNpbmcgYHJlbmRlcmAgZm9yIHRoZSBjb2x1bW4gLSB0aGlzCgkJICogICAvLyBpcyBqdXN0IGEgc2ltcGxlIGV4YW1wbGUgb2YgaG93IHRoZSBkYXRhIGNhbiBiZSBtYW5pcHVsYXRlZCkuCgkJICogICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAiYWpheCI6IHsKCQkgKiAgICAgICAidXJsIjogImRhdGEuanNvbiIsCgkJICogICAgICAgImRhdGFTcmMiOiBmdW5jdGlvbiAoIGpzb24gKSB7CgkJICogICAgICAgICBmb3IgKCB2YXIgaT0wLCBpZW49anNvbi5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkgKiAgICAgICAgICAganNvbltpXVswXSA9ICc8YSBocmVmPSIvbWVzc2FnZS8nK2pzb25baV1bMF0rJz5WaWV3IG1lc3NhZ2U8L2E+JzsKCQkgKiAgICAgICAgIH0KCQkgKiAgICAgICAgIHJldHVybiBqc29uOwoJCSAqICAgICAgIH0KCQkgKiAgICAgfQoJCSAqICAgfSApOwoJCSAqCgkJICogQGV4YW1wbGUKCQkgKiAgIC8vIEFkZCBkYXRhIHRvIHRoZSByZXF1ZXN0CgkJICogICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAiYWpheCI6IHsKCQkgKiAgICAgICAidXJsIjogImRhdGEuanNvbiIsCgkJICogICAgICAgImRhdGEiOiBmdW5jdGlvbiAoIGQgKSB7CgkJICogICAgICAgICByZXR1cm4gewoJCSAqICAgICAgICAgICAiZXh0cmFfc2VhcmNoIjogJCgnI2V4dHJhJykudmFsKCkKCQkgKiAgICAgICAgIH07CgkJICogICAgICAgfQoJCSAqICAgICB9CgkJICogICB9ICk7CgkJICoKCQkgKiBAZXhhbXBsZQoJCSAqICAgLy8gU2VuZCByZXF1ZXN0IGFzIFBPU1QKCQkgKiAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICJhamF4IjogewoJCSAqICAgICAgICJ1cmwiOiAiZGF0YS5qc29uIiwKCQkgKiAgICAgICAidHlwZSI6ICJQT1NUIgoJCSAqICAgICB9CgkJICogICB9ICk7CgkJICoKCQkgKiBAZXhhbXBsZQoJCSAqICAgLy8gR2V0IHRoZSBkYXRhIGZyb20gbG9jYWxTdG9yYWdlIChjb3VsZCBpbnRlcmZhY2Ugd2l0aCBhIGZvcm0gZm9yCgkJICogICAvLyBhZGRpbmcsIGVkaXRpbmcgYW5kIHJlbW92aW5nIHJvd3MpLgoJCSAqICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgImFqYXgiOiBmdW5jdGlvbiAoZGF0YSwgY2FsbGJhY2ssIHNldHRpbmdzKSB7CgkJICogICAgICAgY2FsbGJhY2soCgkJICogICAgICAgICBKU09OLnBhcnNlKCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGF0YVRhYmxlc0RhdGEnKSApCgkJICogICAgICAgKTsKCQkgKiAgICAgfQoJCSAqICAgfSApOwoJCSAqLwoJCSJhamF4IjogbnVsbCwKCQoJCgkJLyoqCgkJICogVGhpcyBwYXJhbWV0ZXIgYWxsb3dzIHlvdSB0byByZWFkaWx5IHNwZWNpZnkgdGhlIGVudHJpZXMgaW4gdGhlIGxlbmd0aCBkcm9wCgkJICogZG93biBtZW51IHRoYXQgRGF0YVRhYmxlcyBzaG93cyB3aGVuIHBhZ2luYXRpb24gaXMgZW5hYmxlZC4gSXQgY2FuIGJlCgkJICogZWl0aGVyIGEgMUQgYXJyYXkgb2Ygb3B0aW9ucyB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIGJvdGggdGhlIGRpc3BsYXllZAoJCSAqIG9wdGlvbiBhbmQgdGhlIHZhbHVlLCBvciBhIDJEIGFycmF5IHdoaWNoIHdpbGwgdXNlIHRoZSBhcnJheSBpbiB0aGUgZmlyc3QKCQkgKiBwb3NpdGlvbiBhcyB0aGUgdmFsdWUsIGFuZCB0aGUgYXJyYXkgaW4gdGhlIHNlY29uZCBwb3NpdGlvbiBhcyB0aGUKCQkgKiBkaXNwbGF5ZWQgb3B0aW9ucyAodXNlZnVsIGZvciBsYW5ndWFnZSBzdHJpbmdzIHN1Y2ggYXMgJ0FsbCcpLgoJCSAqCgkJICogTm90ZSB0aGF0IHRoZSBgcGFnZUxlbmd0aGAgcHJvcGVydHkgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHNldCB0byB0aGUKCQkgKiBmaXJzdCB2YWx1ZSBnaXZlbiBpbiB0aGlzIGFycmF5LCB1bmxlc3MgYHBhZ2VMZW5ndGhgIGlzIGFsc28gcHJvdmlkZWQuCgkJICogIEB0eXBlIGFycmF5CgkJICogIEBkZWZhdWx0IFsgMTAsIDI1LCA1MCwgMTAwIF0KCQkgKgoJCSAqICBAZHRvcHQgT3B0aW9uCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5sZW5ndGhNZW51CgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAibGVuZ3RoTWVudSI6IFtbMTAsIDI1LCA1MCwgLTFdLCBbMTAsIDI1LCA1MCwgIkFsbCJdXQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiYUxlbmd0aE1lbnUiOiBbIDEwLCAyNSwgNTAsIDEwMCBdLAoJCgkKCQkvKioKCQkgKiBUaGUgYGNvbHVtbnNgIG9wdGlvbiBpbiB0aGUgaW5pdGlhbGlzYXRpb24gcGFyYW1ldGVyIGFsbG93cyB5b3UgdG8gZGVmaW5lCgkJICogZGV0YWlscyBhYm91dCB0aGUgd2F5IGluZGl2aWR1YWwgY29sdW1ucyBiZWhhdmUuIEZvciBhIGZ1bGwgbGlzdCBvZgoJCSAqIGNvbHVtbiBvcHRpb25zIHRoYXQgY2FuIGJlIHNldCwgcGxlYXNlIHNlZQoJCSAqIHtAbGluayBEYXRhVGFibGUuZGVmYXVsdHMuY29sdW1ufS4gTm90ZSB0aGF0IGlmIHlvdSB1c2UgYGNvbHVtbnNgIHRvCgkJICogZGVmaW5lIHlvdXIgY29sdW1ucywgeW91IG11c3QgaGF2ZSBhbiBlbnRyeSBpbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IHNpbmdsZQoJCSAqIGNvbHVtbiB0aGF0IHlvdSBoYXZlIGluIHlvdXIgdGFibGUgKHRoZXNlIGNhbiBiZSBudWxsIGlmIHlvdSBkb24ndCB3aGljaAoJCSAqIHRvIHNwZWNpZnkgYW55IG9wdGlvbnMpLgoJCSAqICBAbWVtYmVyCgkJICoKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmNvbHVtbgoJCSAqLwoJCSJhb0NvbHVtbnMiOiBudWxsLAoJCgkJLyoqCgkJICogVmVyeSBzaW1pbGFyIHRvIGBjb2x1bW5zYCwgYGNvbHVtbkRlZnNgIGFsbG93cyB5b3UgdG8gdGFyZ2V0IGEgc3BlY2lmaWMKCQkgKiBjb2x1bW4sIG11bHRpcGxlIGNvbHVtbnMsIG9yIGFsbCBjb2x1bW5zLCB1c2luZyB0aGUgYHRhcmdldHNgIHByb3BlcnR5IG9mCgkJICogZWFjaCBvYmplY3QgaW4gdGhlIGFycmF5LiBUaGlzIGFsbG93cyBncmVhdCBmbGV4aWJpbGl0eSB3aGVuIGNyZWF0aW5nCgkJICogdGFibGVzLCBhcyB0aGUgYGNvbHVtbkRlZnNgIGFycmF5cyBjYW4gYmUgb2YgYW55IGxlbmd0aCwgdGFyZ2V0aW5nIHRoZQoJCSAqIGNvbHVtbnMgeW91IHNwZWNpZmljYWxseSB3YW50LiBgY29sdW1uRGVmc2AgbWF5IHVzZSBhbnkgb2YgdGhlIGNvbHVtbgoJCSAqIG9wdGlvbnMgYXZhaWxhYmxlOiB7QGxpbmsgRGF0YVRhYmxlLmRlZmF1bHRzLmNvbHVtbn0sIGJ1dCBpdCBfbXVzdF8KCQkgKiBoYXZlIGB0YXJnZXRzYCBkZWZpbmVkIGluIGVhY2ggb2JqZWN0IGluIHRoZSBhcnJheS4gVmFsdWVzIGluIHRoZSBgdGFyZ2V0c2AKCQkgKiBhcnJheSBtYXkgYmU6CgkJICogICA8dWw+CgkJICogICAgIDxsaT5hIHN0cmluZyAtIGNsYXNzIG5hbWUgd2lsbCBiZSBtYXRjaGVkIG9uIHRoZSBUSCBmb3IgdGhlIGNvbHVtbjwvbGk+CgkJICogICAgIDxsaT4wIG9yIGEgcG9zaXRpdmUgaW50ZWdlciAtIGNvbHVtbiBpbmRleCBjb3VudGluZyBmcm9tIHRoZSBsZWZ0PC9saT4KCQkgKiAgICAgPGxpPmEgbmVnYXRpdmUgaW50ZWdlciAtIGNvbHVtbiBpbmRleCBjb3VudGluZyBmcm9tIHRoZSByaWdodDwvbGk+CgkJICogICAgIDxsaT50aGUgc3RyaW5nICJfYWxsIiAtIGFsbCBjb2x1bW5zIChpLmUuIGFzc2lnbiBhIGRlZmF1bHQpPC9saT4KCQkgKiAgIDwvdWw+CgkJICogIEBtZW1iZXIKCQkgKgoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuY29sdW1uRGVmcwoJCSAqLwoJCSJhb0NvbHVtbkRlZnMiOiBudWxsLAoJCgkKCQkvKioKCQkgKiBCYXNpY2FsbHkgdGhlIHNhbWUgYXMgYHNlYXJjaGAsIHRoaXMgcGFyYW1ldGVyIGRlZmluZXMgdGhlIGluZGl2aWR1YWwgY29sdW1uCgkJICogZmlsdGVyaW5nIHN0YXRlIGF0IGluaXRpYWxpc2F0aW9uIHRpbWUuIFRoZSBhcnJheSBtdXN0IGJlIG9mIHRoZSBzYW1lIHNpemUKCQkgKiBhcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMsIGFuZCBlYWNoIGVsZW1lbnQgYmUgYW4gb2JqZWN0IHdpdGggdGhlIHBhcmFtZXRlcnMKCQkgKiBgc2VhcmNoYCBhbmQgYGVzY2FwZVJlZ2V4YCAodGhlIGxhdHRlciBpcyBvcHRpb25hbCkuICdudWxsJyBpcyBhbHNvCgkJICogYWNjZXB0ZWQgYW5kIHRoZSBkZWZhdWx0IHdpbGwgYmUgdXNlZC4KCQkgKiAgQHR5cGUgYXJyYXkKCQkgKiAgQGRlZmF1bHQgW10KCQkgKgoJCSAqICBAZHRvcHQgT3B0aW9uCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5zZWFyY2hDb2xzCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAic2VhcmNoQ29scyI6IFsKCQkgKiAgICAgICAgICBudWxsLAoJCSAqICAgICAgICAgIHsgInNlYXJjaCI6ICJNeSBmaWx0ZXIiIH0sCgkJICogICAgICAgICAgbnVsbCwKCQkgKiAgICAgICAgICB7ICJzZWFyY2giOiAiXlswLTldIiwgImVzY2FwZVJlZ2V4IjogZmFsc2UgfQoJCSAqICAgICAgICBdCgkJICogICAgICB9ICk7CgkJICogICAgfSApCgkJICovCgkJImFvU2VhcmNoQ29scyI6IFtdLAoJCgkKCQkvKioKCQkgKiBBbiBhcnJheSBvZiBDU1MgY2xhc3NlcyB0aGF0IHNob3VsZCBiZSBhcHBsaWVkIHRvIGRpc3BsYXllZCByb3dzLiBUaGlzCgkJICogYXJyYXkgbWF5IGJlIG9mIGFueSBsZW5ndGgsIGFuZCBEYXRhVGFibGVzIHdpbGwgYXBwbHkgZWFjaCBjbGFzcwoJCSAqIHNlcXVlbnRpYWxseSwgbG9vcGluZyB3aGVuIHJlcXVpcmVkLgoJCSAqICBAdHlwZSBhcnJheQoJCSAqICBAZGVmYXVsdCBudWxsIDxpPldpbGwgdGFrZSB0aGUgdmFsdWVzIGRldGVybWluZWQgYnkgdGhlIGBvQ2xhc3Nlcy5zdHJpcGUqYAoJCSAqICAgIG9wdGlvbnM8L2k+CgkJICoKCQkgKiAgQGR0b3B0IE9wdGlvbgoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuc3RyaXBlQ2xhc3NlcwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInN0cmlwZUNsYXNzZXMiOiBbICdzdHJpcDEnLCAnc3RyaXAyJywgJ3N0cmlwMycgXQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKQoJCSAqLwoJCSJhc1N0cmlwZUNsYXNzZXMiOiBudWxsLAoJCgkKCQkvKioKCQkgKiBFbmFibGUgb3IgZGlzYWJsZSBhdXRvbWF0aWMgY29sdW1uIHdpZHRoIGNhbGN1bGF0aW9uLiBUaGlzIGNhbiBiZSBkaXNhYmxlZAoJCSAqIGFzIGFuIG9wdGltaXNhdGlvbiAoaXQgdGFrZXMgc29tZSB0aW1lIHRvIGNhbGN1bGF0ZSB0aGUgd2lkdGhzKSBpZiB0aGUKCQkgKiB0YWJsZXMgd2lkdGhzIGFyZSBwYXNzZWQgaW4gdXNpbmcgYGNvbHVtbnNgLgoJCSAqICBAdHlwZSBib29sZWFuCgkJICogIEBkZWZhdWx0IHRydWUKCQkgKgoJCSAqICBAZHRvcHQgRmVhdHVyZXMKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmF1dG9XaWR0aAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uICgpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJhdXRvV2lkdGgiOiBmYWxzZQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiYkF1dG9XaWR0aCI6IHRydWUsCgkKCQoJCS8qKgoJCSAqIERlZmVycmVkIHJlbmRlcmluZyBjYW4gcHJvdmlkZSBEYXRhVGFibGVzIHdpdGggYSBodWdlIHNwZWVkIGJvb3N0IHdoZW4geW91CgkJICogYXJlIHVzaW5nIGFuIEFqYXggb3IgSlMgZGF0YSBzb3VyY2UgZm9yIHRoZSB0YWJsZS4gVGhpcyBvcHRpb24sIHdoZW4gc2V0IHRvCgkJICogdHJ1ZSwgd2lsbCBjYXVzZSBEYXRhVGFibGVzIHRvIGRlZmVyIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGFibGUgZWxlbWVudHMgZm9yCgkJICogZWFjaCByb3cgdW50aWwgdGhleSBhcmUgbmVlZGVkIGZvciBhIGRyYXcgLSBzYXZpbmcgYSBzaWduaWZpY2FudCBhbW91bnQgb2YKCQkgKiB0aW1lLgoJCSAqICBAdHlwZSBib29sZWFuCgkJICogIEBkZWZhdWx0IGZhbHNlCgkJICoKCQkgKiAgQGR0b3B0IEZlYXR1cmVzCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5kZWZlclJlbmRlcgoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImFqYXgiOiAic291cmNlcy9hcnJheXMudHh0IiwKCQkgKiAgICAgICAgImRlZmVyUmVuZGVyIjogdHJ1ZQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiYkRlZmVyUmVuZGVyIjogZmFsc2UsCgkKCQoJCS8qKgoJCSAqIFJlcGxhY2UgYSBEYXRhVGFibGUgd2hpY2ggbWF0Y2hlcyB0aGUgZ2l2ZW4gc2VsZWN0b3IgYW5kIHJlcGxhY2UgaXQgd2l0aAoJCSAqIG9uZSB3aGljaCBoYXMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIG5ldyBpbml0aWFsaXNhdGlvbiBvYmplY3QgcGFzc2VkLiBJZiBubwoJCSAqIHRhYmxlIG1hdGNoZXMgdGhlIHNlbGVjdG9yLCB0aGVuIHRoZSBuZXcgRGF0YVRhYmxlIHdpbGwgYmUgY29uc3RydWN0ZWQgYXMKCQkgKiBwZXIgbm9ybWFsLgoJCSAqICBAdHlwZSBib29sZWFuCgkJICogIEBkZWZhdWx0IGZhbHNlCgkJICoKCQkgKiAgQGR0b3B0IE9wdGlvbnMKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmRlc3Ryb3kKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJzcm9sbFkiOiAiMjAwcHgiLAoJCSAqICAgICAgICAicGFnaW5hdGUiOiBmYWxzZQoJCSAqICAgICAgfSApOwoJCSAqCgkJICogICAgICAvLyBTb21lIHRpbWUgbGF0ZXIuLi4uCgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiZmlsdGVyIjogZmFsc2UsCgkJICogICAgICAgICJkZXN0cm95IjogdHJ1ZQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiYkRlc3Ryb3kiOiBmYWxzZSwKCQoJCgkJLyoqCgkJICogRW5hYmxlIG9yIGRpc2FibGUgZmlsdGVyaW5nIG9mIGRhdGEuIEZpbHRlcmluZyBpbiBEYXRhVGFibGVzIGlzICJzbWFydCIgaW4KCQkgKiB0aGF0IGl0IGFsbG93cyB0aGUgZW5kIHVzZXIgdG8gaW5wdXQgbXVsdGlwbGUgd29yZHMgKHNwYWNlIHNlcGFyYXRlZCkgYW5kCgkJICogd2lsbCBtYXRjaCBhIHJvdyBjb250YWluaW5nIHRob3NlIHdvcmRzLCBldmVuIGlmIG5vdCBpbiB0aGUgb3JkZXIgdGhhdCB3YXMKCQkgKiBzcGVjaWZpZWQgKHRoaXMgYWxsb3cgbWF0Y2hpbmcgYWNyb3NzIG11bHRpcGxlIGNvbHVtbnMpLiBOb3RlIHRoYXQgaWYgeW91CgkJICogd2lzaCB0byB1c2UgZmlsdGVyaW5nIGluIERhdGFUYWJsZXMgdGhpcyBtdXN0IHJlbWFpbiAndHJ1ZScgLSB0byByZW1vdmUgdGhlCgkJICogZGVmYXVsdCBmaWx0ZXJpbmcgaW5wdXQgYm94IGFuZCByZXRhaW4gZmlsdGVyaW5nIGFiaWxpdGllcywgcGxlYXNlIHVzZQoJCSAqIHtAbGluayBEYXRhVGFibGUuZGVmYXVsdHMuZG9tfS4KCQkgKiAgQHR5cGUgYm9vbGVhbgoJCSAqICBAZGVmYXVsdCB0cnVlCgkJICoKCQkgKiAgQGR0b3B0IEZlYXR1cmVzCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5zZWFyY2hpbmcKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbiAoKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAic2VhcmNoaW5nIjogZmFsc2UKCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImJGaWx0ZXIiOiB0cnVlLAoJCgkKCQkvKioKCQkgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgdGFibGUgaW5mb3JtYXRpb24gZGlzcGxheS4gVGhpcyBzaG93cyBpbmZvcm1hdGlvbgoJCSAqIGFib3V0IHRoZSBkYXRhIHRoYXQgaXMgY3VycmVudGx5IHZpc2libGUgb24gdGhlIHBhZ2UsIGluY2x1ZGluZyBpbmZvcm1hdGlvbgoJCSAqIGFib3V0IGZpbHRlcmVkIGRhdGEgaWYgdGhhdCBhY3Rpb24gaXMgYmVpbmcgcGVyZm9ybWVkLgoJCSAqICBAdHlwZSBib29sZWFuCgkJICogIEBkZWZhdWx0IHRydWUKCQkgKgoJCSAqICBAZHRvcHQgRmVhdHVyZXMKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmluZm8KCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbiAoKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiaW5mbyI6IGZhbHNlCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJiSW5mbyI6IHRydWUsCgkKCQoJCS8qKgoJCSAqIEFsbG93cyB0aGUgZW5kIHVzZXIgdG8gc2VsZWN0IHRoZSBzaXplIG9mIGEgZm9ybWF0dGVkIHBhZ2UgZnJvbSBhIHNlbGVjdAoJCSAqIG1lbnUgKHNpemVzIGFyZSAxMCwgMjUsIDUwIGFuZCAxMDApLiBSZXF1aXJlcyBwYWdpbmF0aW9uIChgcGFnaW5hdGVgKS4KCQkgKiAgQHR5cGUgYm9vbGVhbgoJCSAqICBAZGVmYXVsdCB0cnVlCgkJICoKCQkgKiAgQGR0b3B0IEZlYXR1cmVzCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5sZW5ndGhDaGFuZ2UKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbiAoKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAibGVuZ3RoQ2hhbmdlIjogZmFsc2UKCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImJMZW5ndGhDaGFuZ2UiOiB0cnVlLAoJCgkKCQkvKioKCQkgKiBFbmFibGUgb3IgZGlzYWJsZSBwYWdpbmF0aW9uLgoJCSAqICBAdHlwZSBib29sZWFuCgkJICogIEBkZWZhdWx0IHRydWUKCQkgKgoJCSAqICBAZHRvcHQgRmVhdHVyZXMKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLnBhZ2luZwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uICgpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJwYWdpbmciOiBmYWxzZQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiYlBhZ2luYXRlIjogdHJ1ZSwKCQoJCgkJLyoqCgkJICogRW5hYmxlIG9yIGRpc2FibGUgdGhlIGRpc3BsYXkgb2YgYSAncHJvY2Vzc2luZycgaW5kaWNhdG9yIHdoZW4gdGhlIHRhYmxlIGlzCgkJICogYmVpbmcgcHJvY2Vzc2VkIChlLmcuIGEgc29ydCkuIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgdGFibGVzIHdpdGgKCQkgKiBsYXJnZSBhbW91bnRzIG9mIGRhdGEgd2hlcmUgaXQgY2FuIHRha2UgYSBub3RpY2VhYmxlIGFtb3VudCBvZiB0aW1lIHRvIHNvcnQKCQkgKiB0aGUgZW50cmllcy4KCQkgKiAgQHR5cGUgYm9vbGVhbgoJCSAqICBAZGVmYXVsdCBmYWxzZQoJCSAqCgkJICogIEBkdG9wdCBGZWF0dXJlcwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMucHJvY2Vzc2luZwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uICgpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJwcm9jZXNzaW5nIjogdHJ1ZQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiYlByb2Nlc3NpbmciOiBmYWxzZSwKCQoJCgkJLyoqCgkJICogUmV0cmlldmUgdGhlIERhdGFUYWJsZXMgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gc2VsZWN0b3IuIE5vdGUgdGhhdCBpZiB0aGUKCQkgKiB0YWJsZSBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpc2VkLCB0aGlzIHBhcmFtZXRlciB3aWxsIGNhdXNlIERhdGFUYWJsZXMKCQkgKiB0byBzaW1wbHkgcmV0dXJuIHRoZSBvYmplY3QgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHNldCB1cCAtIGl0IHdpbGwgbm90IHRha2UKCQkgKiBhY2NvdW50IG9mIGFueSBjaGFuZ2VzIHlvdSBtaWdodCBoYXZlIG1hZGUgdG8gdGhlIGluaXRpYWxpc2F0aW9uIG9iamVjdAoJCSAqIHBhc3NlZCB0byBEYXRhVGFibGVzIChzZXR0aW5nIHRoaXMgcGFyYW1ldGVyIHRvIHRydWUgaXMgYW4gYWNrbm93bGVkZ2VtZW50CgkJICogdGhhdCB5b3UgdW5kZXJzdGFuZCB0aGlzKS4gYGRlc3Ryb3lgIGNhbiBiZSB1c2VkIHRvIHJlaW5pdGlhbGlzZSBhIHRhYmxlIGlmCgkJICogeW91IG5lZWQuCgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKiAgQGRlZmF1bHQgZmFsc2UKCQkgKgoJCSAqICBAZHRvcHQgT3B0aW9ucwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMucmV0cmlldmUKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgIGluaXRUYWJsZSgpOwoJCSAqICAgICAgdGFibGVBY3Rpb25zKCk7CgkJICogICAgfSApOwoJCSAqCgkJICogICAgZnVuY3Rpb24gaW5pdFRhYmxlICgpCgkJICogICAgewoJCSAqICAgICAgcmV0dXJuICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJzY3JvbGxZIjogIjIwMHB4IiwKCQkgKiAgICAgICAgInBhZ2luYXRlIjogZmFsc2UsCgkJICogICAgICAgICJyZXRyaWV2ZSI6IHRydWUKCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9CgkJICoKCQkgKiAgICBmdW5jdGlvbiB0YWJsZUFjdGlvbnMgKCkKCQkgKiAgICB7CgkJICogICAgICB2YXIgdGFibGUgPSBpbml0VGFibGUoKTsKCQkgKiAgICAgIC8vIHBlcmZvcm0gQVBJIG9wZXJhdGlvbnMgd2l0aCBvVGFibGUKCQkgKiAgICB9CgkJICovCgkJImJSZXRyaWV2ZSI6IGZhbHNlLAoJCgkKCQkvKioKCQkgKiBXaGVuIHZlcnRpY2FsICh5KSBzY3JvbGxpbmcgaXMgZW5hYmxlZCwgRGF0YVRhYmxlcyB3aWxsIGZvcmNlIHRoZSBoZWlnaHQgb2YKCQkgKiB0aGUgdGFibGUncyB2aWV3cG9ydCB0byB0aGUgZ2l2ZW4gaGVpZ2h0IGF0IGFsbCB0aW1lcyAodXNlZnVsIGZvciBsYXlvdXQpLgoJCSAqIEhvd2V2ZXIsIHRoaXMgY2FuIGxvb2sgb2RkIHdoZW4gZmlsdGVyaW5nIGRhdGEgZG93biB0byBhIHNtYWxsIGRhdGEgc2V0LAoJCSAqIGFuZCB0aGUgZm9vdGVyIGlzIGxlZnQgImZsb2F0aW5nIiBmdXJ0aGVyIGRvd24uIFRoaXMgcGFyYW1ldGVyICh3aGVuCgkJICogZW5hYmxlZCkgd2lsbCBjYXVzZSBEYXRhVGFibGVzIHRvIGNvbGxhcHNlIHRoZSB0YWJsZSdzIHZpZXdwb3J0IGRvd24gd2hlbgoJCSAqIHRoZSByZXN1bHQgc2V0IHdpbGwgZml0IHdpdGhpbiB0aGUgZ2l2ZW4gWSBoZWlnaHQuCgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKiAgQGRlZmF1bHQgZmFsc2UKCQkgKgoJCSAqICBAZHRvcHQgT3B0aW9ucwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuc2Nyb2xsQ29sbGFwc2UKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJzY3JvbGxZIjogIjIwMCIsCgkJICogICAgICAgICJzY3JvbGxDb2xsYXBzZSI6IHRydWUKCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImJTY3JvbGxDb2xsYXBzZSI6IGZhbHNlLAoJCgkKCQkvKioKCQkgKiBDb25maWd1cmUgRGF0YVRhYmxlcyB0byB1c2Ugc2VydmVyLXNpZGUgcHJvY2Vzc2luZy4gTm90ZSB0aGF0IHRoZQoJCSAqIGBhamF4YCBwYXJhbWV0ZXIgbXVzdCBhbHNvIGJlIGdpdmVuIGluIG9yZGVyIHRvIGdpdmUgRGF0YVRhYmxlcyBhCgkJICogc291cmNlIHRvIG9idGFpbiB0aGUgcmVxdWlyZWQgZGF0YSBmb3IgZWFjaCBkcmF3LgoJCSAqICBAdHlwZSBib29sZWFuCgkJICogIEBkZWZhdWx0IGZhbHNlCgkJICoKCQkgKiAgQGR0b3B0IEZlYXR1cmVzCgkJICogIEBkdG9wdCBTZXJ2ZXItc2lkZQoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuc2VydmVyU2lkZQoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uICgpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJzZXJ2ZXJTaWRlIjogdHJ1ZSwKCQkgKiAgICAgICAgImFqYXgiOiAieGhyLnBocCIKCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImJTZXJ2ZXJTaWRlIjogZmFsc2UsCgkKCQoJCS8qKgoJCSAqIEVuYWJsZSBvciBkaXNhYmxlIHNvcnRpbmcgb2YgY29sdW1ucy4gU29ydGluZyBvZiBpbmRpdmlkdWFsIGNvbHVtbnMgY2FuIGJlCgkJICogZGlzYWJsZWQgYnkgdGhlIGBzb3J0YWJsZWAgb3B0aW9uIGZvciBlYWNoIGNvbHVtbi4KCQkgKiAgQHR5cGUgYm9vbGVhbgoJCSAqICBAZGVmYXVsdCB0cnVlCgkJICoKCQkgKiAgQGR0b3B0IEZlYXR1cmVzCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5vcmRlcmluZwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uICgpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJvcmRlcmluZyI6IGZhbHNlCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJiU29ydCI6IHRydWUsCgkKCQoJCS8qKgoJCSAqIEVuYWJsZSBvciBkaXNwbGF5IERhdGFUYWJsZXMnIGFiaWxpdHkgdG8gc29ydCBtdWx0aXBsZSBjb2x1bW5zIGF0IHRoZQoJCSAqIHNhbWUgdGltZSAoYWN0aXZhdGVkIGJ5IHNoaWZ0LWNsaWNrIGJ5IHRoZSB1c2VyKS4KCQkgKiAgQHR5cGUgYm9vbGVhbgoJCSAqICBAZGVmYXVsdCB0cnVlCgkJICoKCQkgKiAgQGR0b3B0IE9wdGlvbnMKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLm9yZGVyTXVsdGkKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIERpc2FibGUgbXVsdGlwbGUgY29sdW1uIHNvcnRpbmcgYWJpbGl0eQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbiAoKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAib3JkZXJNdWx0aSI6IGZhbHNlCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJiU29ydE11bHRpIjogdHJ1ZSwKCQoJCgkJLyoqCgkJICogQWxsb3dzIGNvbnRyb2wgb3ZlciB3aGV0aGVyIERhdGFUYWJsZXMgc2hvdWxkIHVzZSB0aGUgdG9wICh0cnVlKSB1bmlxdWUKCQkgKiBjZWxsIHRoYXQgaXMgZm91bmQgZm9yIGEgc2luZ2xlIGNvbHVtbiwgb3IgdGhlIGJvdHRvbSAoZmFsc2UgLSBkZWZhdWx0KS4KCQkgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHVzaW5nIGNvbXBsZXggaGVhZGVycy4KCQkgKiAgQHR5cGUgYm9vbGVhbgoJCSAqICBAZGVmYXVsdCBmYWxzZQoJCSAqCgkJICogIEBkdG9wdCBPcHRpb25zCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5vcmRlckNlbGxzVG9wCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAib3JkZXJDZWxsc1RvcCI6IHRydWUKCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImJTb3J0Q2VsbHNUb3AiOiBmYWxzZSwKCQoJCgkJLyoqCgkJICogRW5hYmxlIG9yIGRpc2FibGUgdGhlIGFkZGl0aW9uIG9mIHRoZSBjbGFzc2VzIGBzb3J0aW5nXF8xYCwgYHNvcnRpbmdcXzJgIGFuZAoJCSAqIGBzb3J0aW5nXF8zYCB0byB0aGUgY29sdW1ucyB3aGljaCBhcmUgY3VycmVudGx5IGJlaW5nIHNvcnRlZCBvbi4gVGhpcyBpcwoJCSAqIHByZXNlbnRlZCBhcyBhIGZlYXR1cmUgc3dpdGNoIGFzIGl0IGNhbiBpbmNyZWFzZSBwcm9jZXNzaW5nIHRpbWUgKHdoaWxlCgkJICogY2xhc3NlcyBhcmUgcmVtb3ZlZCBhbmQgYWRkZWQpIHNvIGZvciBsYXJnZSBkYXRhIHNldHMgeW91IG1pZ2h0IHdhbnQgdG8KCQkgKiB0dXJuIHRoaXMgb2ZmLgoJCSAqICBAdHlwZSBib29sZWFuCgkJICogIEBkZWZhdWx0IHRydWUKCQkgKgoJCSAqICBAZHRvcHQgRmVhdHVyZXMKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLm9yZGVyQ2xhc3NlcwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uICgpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJvcmRlckNsYXNzZXMiOiBmYWxzZQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiYlNvcnRDbGFzc2VzIjogdHJ1ZSwKCQoJCgkJLyoqCgkJICogRW5hYmxlIG9yIGRpc2FibGUgc3RhdGUgc2F2aW5nLiBXaGVuIGVuYWJsZWQgSFRNTDUgYGxvY2FsU3RvcmFnZWAgd2lsbCBiZQoJCSAqIHVzZWQgdG8gc2F2ZSB0YWJsZSBkaXNwbGF5IGluZm9ybWF0aW9uIHN1Y2ggYXMgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbiwKCQkgKiBkaXNwbGF5IGxlbmd0aCwgZmlsdGVyaW5nIGFuZCBzb3J0aW5nLiBBcyBzdWNoIHdoZW4gdGhlIGVuZCB1c2VyIHJlbG9hZHMKCQkgKiB0aGUgcGFnZSB0aGUgZGlzcGxheSBkaXNwbGF5IHdpbGwgbWF0Y2ggd2hhdCB0aHkgaGFkIHByZXZpb3VzbHkgc2V0IHVwLgoJCSAqCgkJICogRHVlIHRvIHRoZSB1c2Ugb2YgYGxvY2FsU3RvcmFnZWAgdGhlIGRlZmF1bHQgc3RhdGUgc2F2aW5nIGlzIG5vdCBzdXBwb3J0ZWQKCQkgKiBpbiBJRTYgb3IgNy4gSWYgc3RhdGUgc2F2aW5nIGlzIHJlcXVpcmVkIGluIHRob3NlIGJyb3dzZXJzLCB1c2UKCQkgKiBgc3RhdGVTYXZlQ2FsbGJhY2tgIHRvIHByb3ZpZGUgYSBzdG9yYWdlIHNvbHV0aW9uIHN1Y2ggYXMgY29va2llcy4KCQkgKiAgQHR5cGUgYm9vbGVhbgoJCSAqICBAZGVmYXVsdCBmYWxzZQoJCSAqCgkJICogIEBkdG9wdCBGZWF0dXJlcwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuc3RhdGVTYXZlCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24gKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInN0YXRlU2F2ZSI6IHRydWUKCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImJTdGF0ZVNhdmUiOiBmYWxzZSwKCQoJCgkJLyoqCgkJICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIFRSIGVsZW1lbnQgaXMgY3JlYXRlZCAoYW5kIGFsbCBURCBjaGlsZAoJCSAqIGVsZW1lbnRzIGhhdmUgYmVlbiBpbnNlcnRlZCksIG9yIHJlZ2lzdGVyZWQgaWYgdXNpbmcgYSBET00gc291cmNlLCBhbGxvd2luZwoJCSAqIG1hbmlwdWxhdGlvbiBvZiB0aGUgVFIgZWxlbWVudCAoYWRkaW5nIGNsYXNzZXMgZXRjKS4KCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKiAgQHBhcmFtIHtub2RlfSByb3cgIlRSIiBlbGVtZW50IGZvciB0aGUgY3VycmVudCByb3cKCQkgKiAgQHBhcmFtIHthcnJheX0gZGF0YSBSYXcgZGF0YSBhcnJheSBmb3IgdGhpcyByb3cKCQkgKiAgQHBhcmFtIHtpbnR9IGRhdGFJbmRleCBUaGUgaW5kZXggb2YgdGhpcyByb3cgaW4gdGhlIGludGVybmFsIGFvRGF0YSBhcnJheQoJCSAqCgkJICogIEBkdG9wdCBDYWxsYmFja3MKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmNyZWF0ZWRSb3cKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJjcmVhdGVkUm93IjogZnVuY3Rpb24oIHJvdywgZGF0YSwgZGF0YUluZGV4ICkgewoJCSAqICAgICAgICAgIC8vIEJvbGQgdGhlIGdyYWRlIGZvciBhbGwgJ0EnIGdyYWRlIGJyb3dzZXJzCgkJICogICAgICAgICAgaWYgKCBkYXRhWzRdID09ICJBIiApCgkJICogICAgICAgICAgewoJCSAqICAgICAgICAgICAgJCgndGQ6ZXEoNCknLCByb3cpLmh0bWwoICc8Yj5BPC9iPicgKTsKCQkgKiAgICAgICAgICB9CgkJICogICAgICAgIH0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImZuQ3JlYXRlZFJvdyI6IG51bGwsCgkKCQoJCS8qKgoJCSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGV2ZXJ5ICdkcmF3JyBldmVudCwgYW5kIGFsbG93cyB5b3UgdG8KCQkgKiBkeW5hbWljYWxseSBtb2RpZnkgYW55IGFzcGVjdCB5b3Ugd2FudCBhYm91dCB0aGUgY3JlYXRlZCBET00uCgkJICogIEB0eXBlIGZ1bmN0aW9uCgkJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqCgkJICogIEBkdG9wdCBDYWxsYmFja3MKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmRyYXdDYWxsYmFjawoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImRyYXdDYWxsYmFjayI6IGZ1bmN0aW9uKCBzZXR0aW5ncyApIHsKCQkgKiAgICAgICAgICBhbGVydCggJ0RhdGFUYWJsZXMgaGFzIHJlZHJhd24gdGhlIHRhYmxlJyApOwoJCSAqICAgICAgICB9CgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJmbkRyYXdDYWxsYmFjayI6IG51bGwsCgkKCQoJCS8qKgoJCSAqIElkZW50aWNhbCB0byBmbkhlYWRlckNhbGxiYWNrKCkgYnV0IGZvciB0aGUgdGFibGUgZm9vdGVyIHRoaXMgZnVuY3Rpb24KCQkgKiBhbGxvd3MgeW91IHRvIG1vZGlmeSB0aGUgdGFibGUgZm9vdGVyIG9uIGV2ZXJ5ICdkcmF3JyBldmVudC4KCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKiAgQHBhcmFtIHtub2RlfSBmb290ICJUUiIgZWxlbWVudCBmb3IgdGhlIGZvb3RlcgoJCSAqICBAcGFyYW0ge2FycmF5fSBkYXRhIEZ1bGwgdGFibGUgZGF0YSAoYXMgZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCBIVE1MKQoJCSAqICBAcGFyYW0ge2ludH0gc3RhcnQgSW5kZXggZm9yIHRoZSBjdXJyZW50IGRpc3BsYXkgc3RhcnRpbmcgcG9pbnQgaW4gdGhlCgkJICogICAgZGlzcGxheSBhcnJheQoJCSAqICBAcGFyYW0ge2ludH0gZW5kIEluZGV4IGZvciB0aGUgY3VycmVudCBkaXNwbGF5IGVuZGluZyBwb2ludCBpbiB0aGUKCQkgKiAgICBkaXNwbGF5IGFycmF5CgkJICogIEBwYXJhbSB7YXJyYXkgaW50fSBkaXNwbGF5IEluZGV4IGFycmF5IHRvIHRyYW5zbGF0ZSB0aGUgdmlzdWFsIHBvc2l0aW9uCgkJICogICAgdG8gdGhlIGZ1bGwgZGF0YSBhcnJheQoJCSAqCgkJICogIEBkdG9wdCBDYWxsYmFja3MKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmZvb3RlckNhbGxiYWNrCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiZm9vdGVyQ2FsbGJhY2siOiBmdW5jdGlvbiggdGZvb3QsIGRhdGEsIHN0YXJ0LCBlbmQsIGRpc3BsYXkgKSB7CgkJICogICAgICAgICAgdGZvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RoJylbMF0uaW5uZXJIVE1MID0gIlN0YXJ0aW5nIGluZGV4IGlzICIrc3RhcnQ7CgkJICogICAgICAgIH0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICkKCQkgKi8KCQkiZm5Gb290ZXJDYWxsYmFjayI6IG51bGwsCgkKCQoJCS8qKgoJCSAqIFdoZW4gcmVuZGVyaW5nIGxhcmdlIG51bWJlcnMgaW4gdGhlIGluZm9ybWF0aW9uIGVsZW1lbnQgZm9yIHRoZSB0YWJsZQoJCSAqIChpLmUuICJTaG93aW5nIDEgdG8gMTAgb2YgNTcgZW50cmllcyIpIERhdGFUYWJsZXMgd2lsbCByZW5kZXIgbGFyZ2UgbnVtYmVycwoJCSAqIHRvIGhhdmUgYSBjb21tYSBzZXBhcmF0b3IgZm9yIHRoZSAndGhvdXNhbmRzJyB1bml0cyAoZS5nLiAxIG1pbGxpb24gaXMKCQkgKiByZW5kZXJlZCBhcyAiMSwwMDAsMDAwIikgdG8gaGVscCByZWFkYWJpbGl0eSBmb3IgdGhlIGVuZCB1c2VyLiBUaGlzCgkJICogZnVuY3Rpb24gd2lsbCBvdmVycmlkZSB0aGUgZGVmYXVsdCBtZXRob2QgRGF0YVRhYmxlcyB1c2VzLgoJCSAqICBAdHlwZSBmdW5jdGlvbgoJCSAqICBAbWVtYmVyCgkJICogIEBwYXJhbSB7aW50fSB0b0Zvcm1hdCBudW1iZXIgdG8gYmUgZm9ybWF0dGVkCgkJICogIEByZXR1cm5zIHtzdHJpbmd9IGZvcm1hdHRlZCBzdHJpbmcgZm9yIERhdGFUYWJsZXMgdG8gc2hvdyB0aGUgbnVtYmVyCgkJICoKCQkgKiAgQGR0b3B0IENhbGxiYWNrcwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuZm9ybWF0TnVtYmVyCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBGb3JtYXQgYSBudW1iZXIgdXNpbmcgYSBzaW5nbGUgcXVvdGUgZm9yIHRoZSBzZXBhcmF0b3IgKG5vdGUgdGhhdAoJCSAqICAgIC8vIHRoaXMgY2FuIGFsc28gYmUgZG9uZSB3aXRoIHRoZSBsYW5ndWFnZS50aG91c2FuZHMgb3B0aW9uKQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJmb3JtYXROdW1iZXIiOiBmdW5jdGlvbiAoIHRvRm9ybWF0ICkgewoJCSAqICAgICAgICAgIHJldHVybiB0b0Zvcm1hdC50b1N0cmluZygpLnJlcGxhY2UoCgkJICogICAgICAgICAgICAvXEIoPz0oXGR7M30pKyg/IVxkKSkvZywgIiciCgkJICogICAgICAgICAgKTsKCQkgKiAgICAgICAgfTsKCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImZuRm9ybWF0TnVtYmVyIjogZnVuY3Rpb24gKCB0b0Zvcm1hdCApIHsKCQkJcmV0dXJuIHRvRm9ybWF0LnRvU3RyaW5nKCkucmVwbGFjZSgKCQkJCS9cQig/PShcZHszfSkrKD8hXGQpKS9nLAoJCQkJdGhpcy5vTGFuZ3VhZ2Uuc1Rob3VzYW5kcwoJCQkpOwoJCX0sCgkKCQoJCS8qKgoJCSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGV2ZXJ5ICdkcmF3JyBldmVudCwgYW5kIGFsbG93cyB5b3UgdG8KCQkgKiBkeW5hbWljYWxseSBtb2RpZnkgdGhlIGhlYWRlciByb3cuIFRoaXMgY2FuIGJlIHVzZWQgdG8gY2FsY3VsYXRlIGFuZAoJCSAqIGRpc3BsYXkgdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0YWJsZS4KCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKiAgQHBhcmFtIHtub2RlfSBoZWFkICJUUiIgZWxlbWVudCBmb3IgdGhlIGhlYWRlcgoJCSAqICBAcGFyYW0ge2FycmF5fSBkYXRhIEZ1bGwgdGFibGUgZGF0YSAoYXMgZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCBIVE1MKQoJCSAqICBAcGFyYW0ge2ludH0gc3RhcnQgSW5kZXggZm9yIHRoZSBjdXJyZW50IGRpc3BsYXkgc3RhcnRpbmcgcG9pbnQgaW4gdGhlCgkJICogICAgZGlzcGxheSBhcnJheQoJCSAqICBAcGFyYW0ge2ludH0gZW5kIEluZGV4IGZvciB0aGUgY3VycmVudCBkaXNwbGF5IGVuZGluZyBwb2ludCBpbiB0aGUKCQkgKiAgICBkaXNwbGF5IGFycmF5CgkJICogIEBwYXJhbSB7YXJyYXkgaW50fSBkaXNwbGF5IEluZGV4IGFycmF5IHRvIHRyYW5zbGF0ZSB0aGUgdmlzdWFsIHBvc2l0aW9uCgkJICogICAgdG8gdGhlIGZ1bGwgZGF0YSBhcnJheQoJCSAqCgkJICogIEBkdG9wdCBDYWxsYmFja3MKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmhlYWRlckNhbGxiYWNrCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiZmhlYWRlckNhbGxiYWNrIjogZnVuY3Rpb24oIGhlYWQsIGRhdGEsIHN0YXJ0LCBlbmQsIGRpc3BsYXkgKSB7CgkJICogICAgICAgICAgaGVhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGgnKVswXS5pbm5lckhUTUwgPSAiRGlzcGxheWluZyAiKyhlbmQtc3RhcnQpKyIgcmVjb3JkcyI7CgkJICogICAgICAgIH0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICkKCQkgKi8KCQkiZm5IZWFkZXJDYWxsYmFjayI6IG51bGwsCgkKCQoJCS8qKgoJCSAqIFRoZSBpbmZvcm1hdGlvbiBlbGVtZW50IGNhbiBiZSB1c2VkIHRvIGNvbnZleSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudAoJCSAqIHN0YXRlIG9mIHRoZSB0YWJsZS4gQWx0aG91Z2ggdGhlIGludGVybmF0aW9uYWxpc2F0aW9uIG9wdGlvbnMgcHJlc2VudGVkIGJ5CgkJICogRGF0YVRhYmxlcyBhcmUgcXVpdGUgY2FwYWJsZSBvZiBkZWFsaW5nIHdpdGggbW9zdCBjdXN0b21pc2F0aW9ucywgdGhlcmUgbWF5CgkJICogYmUgdGltZXMgd2hlcmUgeW91IHdpc2ggdG8gY3VzdG9taXNlIHRoZSBzdHJpbmcgZnVydGhlci4gVGhpcyBjYWxsYmFjawoJCSAqIGFsbG93cyB5b3UgdG8gZG8gZXhhY3RseSB0aGF0LgoJCSAqICBAdHlwZSBmdW5jdGlvbgoJCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogIEBwYXJhbSB7aW50fSBzdGFydCBTdGFydGluZyBwb3NpdGlvbiBpbiBkYXRhIGZvciB0aGUgZHJhdwoJCSAqICBAcGFyYW0ge2ludH0gZW5kIEVuZCBwb3NpdGlvbiBpbiBkYXRhIGZvciB0aGUgZHJhdwoJCSAqICBAcGFyYW0ge2ludH0gbWF4IFRvdGFsIG51bWJlciBvZiByb3dzIGluIHRoZSB0YWJsZSAocmVnYXJkbGVzcyBvZgoJCSAqICAgIGZpbHRlcmluZykKCQkgKiAgQHBhcmFtIHtpbnR9IHRvdGFsIFRvdGFsIG51bWJlciBvZiByb3dzIGluIHRoZSBkYXRhIHNldCwgYWZ0ZXIgZmlsdGVyaW5nCgkJICogIEBwYXJhbSB7c3RyaW5nfSBwcmUgVGhlIHN0cmluZyB0aGF0IERhdGFUYWJsZXMgaGFzIGZvcm1hdHRlZCB1c2luZyBpdCdzCgkJICogICAgb3duIHJ1bGVzCgkJICogIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBpbmZvcm1hdGlvbiBlbGVtZW50LgoJCSAqCgkJICogIEBkdG9wdCBDYWxsYmFja3MKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmluZm9DYWxsYmFjawoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICJpbmZvQ2FsbGJhY2siOiBmdW5jdGlvbiggc2V0dGluZ3MsIHN0YXJ0LCBlbmQsIG1heCwgdG90YWwsIHByZSApIHsKCQkgKiAgICAgICAgcmV0dXJuIHN0YXJ0ICsiIHRvICIrIGVuZDsKCQkgKiAgICAgIH0KCQkgKiAgICB9ICk7CgkJICovCgkJImZuSW5mb0NhbGxiYWNrIjogbnVsbCwKCQoJCgkJLyoqCgkJICogQ2FsbGVkIHdoZW4gdGhlIHRhYmxlIGhhcyBiZWVuIGluaXRpYWxpc2VkLiBOb3JtYWxseSBEYXRhVGFibGVzIHdpbGwKCQkgKiBpbml0aWFsaXNlIHNlcXVlbnRpYWxseSBhbmQgdGhlcmUgd2lsbCBiZSBubyBuZWVkIGZvciB0aGlzIGZ1bmN0aW9uLAoJCSAqIGhvd2V2ZXIsIHRoaXMgZG9lcyBub3QgaG9sZCB0cnVlIHdoZW4gdXNpbmcgZXh0ZXJuYWwgbGFuZ3VhZ2UgaW5mb3JtYXRpb24KCQkgKiBzaW5jZSB0aGF0IGlzIG9idGFpbmVkIHVzaW5nIGFuIGFzeW5jIFhIUiBjYWxsLgoJCSAqICBAdHlwZSBmdW5jdGlvbgoJCSAqICBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgQHBhcmFtIHtvYmplY3R9IGpzb24gVGhlIEpTT04gb2JqZWN0IHJlcXVlc3QgZnJvbSB0aGUgc2VydmVyIC0gb25seQoJCSAqICAgIHByZXNlbnQgaWYgY2xpZW50LXNpZGUgQWpheCBzb3VyY2VkIGRhdGEgaXMgdXNlZAoJCSAqCgkJICogIEBkdG9wdCBDYWxsYmFja3MKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmluaXRDb21wbGV0ZQoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImluaXRDb21wbGV0ZSI6IGZ1bmN0aW9uKHNldHRpbmdzLCBqc29uKSB7CgkJICogICAgICAgICAgYWxlcnQoICdEYXRhVGFibGVzIGhhcyBmaW5pc2hlZCBpdHMgaW5pdGlhbGlzYXRpb24uJyApOwoJCSAqICAgICAgICB9CgkJICogICAgICB9ICk7CgkJICogICAgfSApCgkJICovCgkJImZuSW5pdENvbXBsZXRlIjogbnVsbCwKCQoJCgkJLyoqCgkJICogQ2FsbGVkIGF0IHRoZSB2ZXJ5IHN0YXJ0IG9mIGVhY2ggdGFibGUgZHJhdyBhbmQgY2FuIGJlIHVzZWQgdG8gY2FuY2VsIHRoZQoJCSAqIGRyYXcgYnkgcmV0dXJuaW5nIGZhbHNlLCBhbnkgb3RoZXIgcmV0dXJuIChpbmNsdWRpbmcgdW5kZWZpbmVkKSByZXN1bHRzIGluCgkJICogdGhlIGZ1bGwgZHJhdyBvY2N1cnJpbmcpLgoJCSAqICBAdHlwZSBmdW5jdGlvbgoJCSAqICBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgQHJldHVybnMge2Jvb2xlYW59IEZhbHNlIHdpbGwgY2FuY2VsIHRoZSBkcmF3LCBhbnl0aGluZyBlbHNlIChpbmNsdWRpbmcgbm8KCQkgKiAgICByZXR1cm4pIHdpbGwgYWxsb3cgaXQgdG8gY29tcGxldGUuCgkJICoKCQkgKiAgQGR0b3B0IENhbGxiYWNrcwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMucHJlRHJhd0NhbGxiYWNrCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAicHJlRHJhd0NhbGxiYWNrIjogZnVuY3Rpb24oIHNldHRpbmdzICkgewoJCSAqICAgICAgICAgIGlmICggJCgnI3Rlc3QnKS52YWwoKSA9PSAxICkgewoJCSAqICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoJCSAqICAgICAgICAgIH0KCQkgKiAgICAgICAgfQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiZm5QcmVEcmF3Q2FsbGJhY2siOiBudWxsLAoJCgkKCQkvKioKCQkgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gJ3Bvc3QgcHJvY2VzcycgZWFjaCByb3cgYWZ0ZXIgaXQgaGF2ZSBiZWVuCgkJICogZ2VuZXJhdGVkIGZvciBlYWNoIHRhYmxlIGRyYXcsIGJ1dCBiZWZvcmUgaXQgaXMgcmVuZGVyZWQgb24gc2NyZWVuLiBUaGlzCgkJICogZnVuY3Rpb24gbWlnaHQgYmUgdXNlZCBmb3Igc2V0dGluZyB0aGUgcm93IGNsYXNzIG5hbWUgZXRjLgoJCSAqICBAdHlwZSBmdW5jdGlvbgoJCSAqICBAcGFyYW0ge25vZGV9IHJvdyAiVFIiIGVsZW1lbnQgZm9yIHRoZSBjdXJyZW50IHJvdwoJCSAqICBAcGFyYW0ge2FycmF5fSBkYXRhIFJhdyBkYXRhIGFycmF5IGZvciB0aGlzIHJvdwoJCSAqICBAcGFyYW0ge2ludH0gZGlzcGxheUluZGV4IFRoZSBkaXNwbGF5IGluZGV4IGZvciB0aGUgY3VycmVudCB0YWJsZSBkcmF3CgkJICogIEBwYXJhbSB7aW50fSBkaXNwbGF5SW5kZXhGdWxsIFRoZSBpbmRleCBvZiB0aGUgZGF0YSBpbiB0aGUgZnVsbCBsaXN0IG9mCgkJICogICAgcm93cyAoYWZ0ZXIgZmlsdGVyaW5nKQoJCSAqCgkJICogIEBkdG9wdCBDYWxsYmFja3MKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLnJvd0NhbGxiYWNrCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAicm93Q2FsbGJhY2siOiBmdW5jdGlvbiggcm93LCBkYXRhLCBkaXNwbGF5SW5kZXgsIGRpc3BsYXlJbmRleEZ1bGwgKSB7CgkJICogICAgICAgICAgLy8gQm9sZCB0aGUgZ3JhZGUgZm9yIGFsbCAnQScgZ3JhZGUgYnJvd3NlcnMKCQkgKiAgICAgICAgICBpZiAoIGRhdGFbNF0gPT0gIkEiICkgewoJCSAqICAgICAgICAgICAgJCgndGQ6ZXEoNCknLCByb3cpLmh0bWwoICc8Yj5BPC9iPicgKTsKCQkgKiAgICAgICAgICB9CgkJICogICAgICAgIH0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImZuUm93Q2FsbGJhY2siOiBudWxsLAoJCgkKCQkvKioKCQkgKiBfX0RlcHJlY2F0ZWRfXyBUaGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSB0aGlzIHBhcmFtZXRlciBoYXMgbm93IGJlZW4KCQkgKiBzdXBlcnNlZGVkIGJ5IHRoYXQgcHJvdmlkZWQgdGhyb3VnaCBgYWpheGAsIHdoaWNoIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCgkJICoKCQkgKiBUaGlzIHBhcmFtZXRlciBhbGxvd3MgeW91IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGZ1bmN0aW9uIHdoaWNoIG9idGFpbnMKCQkgKiB0aGUgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgc28gc29tZXRoaW5nIG1vcmUgc3VpdGFibGUgZm9yIHlvdXIgYXBwbGljYXRpb24uCgkJICogRm9yIGV4YW1wbGUgeW91IGNvdWxkIHVzZSBQT1NUIGRhdGEsIG9yIHB1bGwgaW5mb3JtYXRpb24gZnJvbSBhIEdlYXJzIG9yCgkJICogQUlSIGRhdGFiYXNlLgoJCSAqICBAdHlwZSBmdW5jdGlvbgoJCSAqICBAbWVtYmVyCgkJICogIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgSFRUUCBzb3VyY2UgdG8gb2J0YWluIHRoZSBkYXRhIGZyb20gKGBhamF4YCkKCQkgKiAgQHBhcmFtIHthcnJheX0gZGF0YSBBIGtleS92YWx1ZSBwYWlyIG9iamVjdCBjb250YWluaW5nIHRoZSBkYXRhIHRvIHNlbmQKCQkgKiAgICB0byB0aGUgc2VydmVyCgkJICogIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBvbiBjb21wbGV0aW9uIG9mIHRoZSBkYXRhIGdldAoJCSAqICAgIHByb2Nlc3MgdGhhdCB3aWxsIGRyYXcgdGhlIGRhdGEgb24gdGhlIHBhZ2UuCgkJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqCgkJICogIEBkdG9wdCBDYWxsYmFja3MKCQkgKiAgQGR0b3B0IFNlcnZlci1zaWRlCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5zZXJ2ZXJEYXRhCgkJICoKCQkgKiAgQGRlcHJlY2F0ZWQgMS4xMC4gUGxlYXNlIHVzZSBgYWpheGAgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBub3cuCgkJICovCgkJImZuU2VydmVyRGF0YSI6IG51bGwsCgkKCQoJCS8qKgoJCSAqIF9fRGVwcmVjYXRlZF9fIFRoZSBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IHRoaXMgcGFyYW1ldGVyIGhhcyBub3cgYmVlbgoJCSAqIHN1cGVyc2VkZWQgYnkgdGhhdCBwcm92aWRlZCB0aHJvdWdoIGBhamF4YCwgd2hpY2ggc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4KCQkgKgoJCSAqICBJdCBpcyBvZnRlbiB1c2VmdWwgdG8gc2VuZCBleHRyYSBkYXRhIHRvIHRoZSBzZXJ2ZXIgd2hlbiBtYWtpbmcgYW4gQWpheAoJCSAqIHJlcXVlc3QgLSBmb3IgZXhhbXBsZSBjdXN0b20gZmlsdGVyaW5nIGluZm9ybWF0aW9uLCBhbmQgdGhpcyBjYWxsYmFjawoJCSAqIGZ1bmN0aW9uIG1ha2VzIGl0IHRyaXZpYWwgdG8gc2VuZCBleHRyYSBpbmZvcm1hdGlvbiB0byB0aGUgc2VydmVyLiBUaGUKCQkgKiBwYXNzZWQgaW4gcGFyYW1ldGVyIGlzIHRoZSBkYXRhIHNldCB0aGF0IGhhcyBiZWVuIGNvbnN0cnVjdGVkIGJ5CgkJICogRGF0YVRhYmxlcywgYW5kIHlvdSBjYW4gYWRkIHRvIHRoaXMgb3IgbW9kaWZ5IGl0IGFzIHlvdSByZXF1aXJlLgoJCSAqICBAdHlwZSBmdW5jdGlvbgoJCSAqICBAcGFyYW0ge2FycmF5fSBkYXRhIERhdGEgYXJyYXkgKGFycmF5IG9mIG9iamVjdHMgd2hpY2ggYXJlIG5hbWUvdmFsdWUKCQkgKiAgICBwYWlycykgdGhhdCBoYXMgYmVlbiBjb25zdHJ1Y3RlZCBieSBEYXRhVGFibGVzIGFuZCB3aWxsIGJlIHNlbnQgdG8gdGhlCgkJICogICAgc2VydmVyLiBJbiB0aGUgY2FzZSBvZiBBamF4IHNvdXJjZWQgZGF0YSB3aXRoIHNlcnZlci1zaWRlIHByb2Nlc3NpbmcKCQkgKiAgICB0aGlzIHdpbGwgYmUgYW4gZW1wdHkgYXJyYXksIGZvciBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nIHRoZXJlIHdpbGwgYmUgYQoJCSAqICAgIHNpZ25pZmljYW50IG51bWJlciBvZiBwYXJhbWV0ZXJzIQoJCSAqICBAcmV0dXJucyB7dW5kZWZpbmVkfSBFbnN1cmUgdGhhdCB5b3UgbW9kaWZ5IHRoZSBkYXRhIGFycmF5IHBhc3NlZCBpbiwKCQkgKiAgICBhcyB0aGlzIGlzIHBhc3NlZCBieSByZWZlcmVuY2UuCgkJICoKCQkgKiAgQGR0b3B0IENhbGxiYWNrcwoJCSAqICBAZHRvcHQgU2VydmVyLXNpZGUKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLnNlcnZlclBhcmFtcwoJCSAqCgkJICogIEBkZXByZWNhdGVkIDEuMTAuIFBsZWFzZSB1c2UgYGFqYXhgIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgbm93LgoJCSAqLwoJCSJmblNlcnZlclBhcmFtcyI6IG51bGwsCgkKCQoJCS8qKgoJCSAqIExvYWQgdGhlIHRhYmxlIHN0YXRlLiBXaXRoIHRoaXMgZnVuY3Rpb24geW91IGNhbiBkZWZpbmUgZnJvbSB3aGVyZSwgYW5kIGhvdywgdGhlCgkJICogc3RhdGUgb2YgYSB0YWJsZSBpcyBsb2FkZWQuIEJ5IGRlZmF1bHQgRGF0YVRhYmxlcyB3aWxsIGxvYWQgZnJvbSBgbG9jYWxTdG9yYWdlYAoJCSAqIGJ1dCB5b3UgbWlnaHQgd2lzaCB0byB1c2UgYSBzZXJ2ZXItc2lkZSBkYXRhYmFzZSBvciBjb29raWVzLgoJCSAqICBAdHlwZSBmdW5jdGlvbgoJCSAqICBAbWVtYmVyCgkJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICBAcGFyYW0ge29iamVjdH0gY2FsbGJhY2sgQ2FsbGJhY2sgdGhhdCBjYW4gYmUgZXhlY3V0ZWQgd2hlbiBkb25lLiBJdAoJCSAqICAgIHNob3VsZCBiZSBwYXNzZWQgdGhlIGxvYWRlZCBzdGF0ZSBvYmplY3QuCgkJICogIEByZXR1cm4ge29iamVjdH0gVGhlIERhdGFUYWJsZXMgc3RhdGUgb2JqZWN0IHRvIGJlIGxvYWRlZAoJCSAqCgkJICogIEBkdG9wdCBDYWxsYmFja3MKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLnN0YXRlTG9hZENhbGxiYWNrCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAic3RhdGVTYXZlIjogdHJ1ZSwKCQkgKiAgICAgICAgInN0YXRlTG9hZENhbGxiYWNrIjogZnVuY3Rpb24gKHNldHRpbmdzLCBjYWxsYmFjaykgewoJCSAqICAgICAgICAgICQuYWpheCggewoJCSAqICAgICAgICAgICAgInVybCI6ICIvc3RhdGVfbG9hZCIsCgkJICogICAgICAgICAgICAiZGF0YVR5cGUiOiAianNvbiIsCgkJICogICAgICAgICAgICAic3VjY2VzcyI6IGZ1bmN0aW9uIChqc29uKSB7CgkJICogICAgICAgICAgICAgIGNhbGxiYWNrKCBqc29uICk7CgkJICogICAgICAgICAgICB9CgkJICogICAgICAgICAgfSApOwoJCSAqICAgICAgICB9CgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJmblN0YXRlTG9hZENhbGxiYWNrIjogZnVuY3Rpb24gKCBzZXR0aW5ncyApIHsKCQkJdHJ5IHsKCQkJCXJldHVybiBKU09OLnBhcnNlKAoJCQkJCShzZXR0aW5ncy5pU3RhdGVEdXJhdGlvbiA9PT0gLTEgPyBzZXNzaW9uU3RvcmFnZSA6IGxvY2FsU3RvcmFnZSkuZ2V0SXRlbSgKCQkJCQkJJ0RhdGFUYWJsZXNfJytzZXR0aW5ncy5zSW5zdGFuY2UrJ18nK2xvY2F0aW9uLnBhdGhuYW1lCgkJCQkJKQoJCQkJKTsKCQkJfSBjYXRjaCAoZSkge30KCQl9LAoJCgkKCQkvKioKCQkgKiBDYWxsYmFjayB3aGljaCBhbGxvd3MgbW9kaWZpY2F0aW9uIG9mIHRoZSBzYXZlZCBzdGF0ZSBwcmlvciB0byBsb2FkaW5nIHRoYXQgc3RhdGUuCgkJICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgdGFibGUgaXMgbG9hZGluZyBzdGF0ZSBmcm9tIHRoZSBzdG9yZWQgZGF0YSwgYnV0CgkJICogcHJpb3IgdG8gdGhlIHNldHRpbmdzIG9iamVjdCBiZWluZyBtb2RpZmllZCBieSB0aGUgc2F2ZWQgc3RhdGUuIE5vdGUgdGhhdCBmb3IKCQkgKiBwbHVnLWluIGF1dGhvcnMsIHlvdSBzaG91bGQgdXNlIHRoZSBgc3RhdGVMb2FkUGFyYW1zYCBldmVudCB0byBsb2FkIHBhcmFtZXRlcnMgZm9yCgkJICogYSBwbHVnLWluLgoJCSAqICBAdHlwZSBmdW5jdGlvbgoJCSAqICBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgQHBhcmFtIHtvYmplY3R9IGRhdGEgVGhlIHN0YXRlIG9iamVjdCB0aGF0IGlzIHRvIGJlIGxvYWRlZAoJCSAqCgkJICogIEBkdG9wdCBDYWxsYmFja3MKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLnN0YXRlTG9hZFBhcmFtcwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgLy8gUmVtb3ZlIGEgc2F2ZWQgZmlsdGVyLCBzbyBmaWx0ZXJpbmcgaXMgbmV2ZXIgbG9hZGVkCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInN0YXRlU2F2ZSI6IHRydWUsCgkJICogICAgICAgICJzdGF0ZUxvYWRQYXJhbXMiOiBmdW5jdGlvbiAoc2V0dGluZ3MsIGRhdGEpIHsKCQkgKiAgICAgICAgICBkYXRhLm9TZWFyY2guc1NlYXJjaCA9ICIiOwoJCSAqICAgICAgICB9CgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgLy8gRGlzYWxsb3cgc3RhdGUgbG9hZGluZyBieSByZXR1cm5pbmcgZmFsc2UKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAic3RhdGVTYXZlIjogdHJ1ZSwKCQkgKiAgICAgICAgInN0YXRlTG9hZFBhcmFtcyI6IGZ1bmN0aW9uIChzZXR0aW5ncywgZGF0YSkgewoJCSAqICAgICAgICAgIHJldHVybiBmYWxzZTsKCQkgKiAgICAgICAgfQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiZm5TdGF0ZUxvYWRQYXJhbXMiOiBudWxsLAoJCgkKCQkvKioKCQkgKiBDYWxsYmFjayB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSBzdGF0ZSBoYXMgYmVlbiBsb2FkZWQgZnJvbSB0aGUgc3RhdGUgc2F2aW5nIG1ldGhvZAoJCSAqIGFuZCB0aGUgRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QgaGFzIGJlZW4gbW9kaWZpZWQgYXMgYSByZXN1bHQgb2YgdGhlIGxvYWRlZCBzdGF0ZS4KCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogIEBwYXJhbSB7b2JqZWN0fSBkYXRhIFRoZSBzdGF0ZSBvYmplY3QgdGhhdCB3YXMgbG9hZGVkCgkJICoKCQkgKiAgQGR0b3B0IENhbGxiYWNrcwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuc3RhdGVMb2FkZWQKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFNob3cgYW4gYWxlcnQgd2l0aCB0aGUgZmlsdGVyaW5nIHZhbHVlIHRoYXQgd2FzIHNhdmVkCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInN0YXRlU2F2ZSI6IHRydWUsCgkJICogICAgICAgICJzdGF0ZUxvYWRlZCI6IGZ1bmN0aW9uIChzZXR0aW5ncywgZGF0YSkgewoJCSAqICAgICAgICAgIGFsZXJ0KCAnU2F2ZWQgZmlsdGVyIHdhczogJytkYXRhLm9TZWFyY2guc1NlYXJjaCApOwoJCSAqICAgICAgICB9CgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJmblN0YXRlTG9hZGVkIjogbnVsbCwKCQoJCgkJLyoqCgkJICogU2F2ZSB0aGUgdGFibGUgc3RhdGUuIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBkZWZpbmUgd2hlcmUgYW5kIGhvdyB0aGUgc3RhdGUKCQkgKiBpbmZvcm1hdGlvbiBmb3IgdGhlIHRhYmxlIGlzIHN0b3JlZCBCeSBkZWZhdWx0IERhdGFUYWJsZXMgd2lsbCB1c2UgYGxvY2FsU3RvcmFnZWAKCQkgKiBidXQgeW91IG1pZ2h0IHdpc2ggdG8gdXNlIGEgc2VydmVyLXNpZGUgZGF0YWJhc2Ugb3IgY29va2llcy4KCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKiAgQG1lbWJlcgoJCSAqICBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgQHBhcmFtIHtvYmplY3R9IGRhdGEgVGhlIHN0YXRlIG9iamVjdCB0byBiZSBzYXZlZAoJCSAqCgkJICogIEBkdG9wdCBDYWxsYmFja3MKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLnN0YXRlU2F2ZUNhbGxiYWNrCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAic3RhdGVTYXZlIjogdHJ1ZSwKCQkgKiAgICAgICAgInN0YXRlU2F2ZUNhbGxiYWNrIjogZnVuY3Rpb24gKHNldHRpbmdzLCBkYXRhKSB7CgkJICogICAgICAgICAgLy8gU2VuZCBhbiBBamF4IHJlcXVlc3QgdG8gdGhlIHNlcnZlciB3aXRoIHRoZSBzdGF0ZSBvYmplY3QKCQkgKiAgICAgICAgICAkLmFqYXgoIHsKCQkgKiAgICAgICAgICAgICJ1cmwiOiAiL3N0YXRlX3NhdmUiLAoJCSAqICAgICAgICAgICAgImRhdGEiOiBkYXRhLAoJCSAqICAgICAgICAgICAgImRhdGFUeXBlIjogImpzb24iLAoJCSAqICAgICAgICAgICAgIm1ldGhvZCI6ICJQT1NUIgoJCSAqICAgICAgICAgICAgInN1Y2Nlc3MiOiBmdW5jdGlvbiAoKSB7fQoJCSAqICAgICAgICAgIH0gKTsKCQkgKiAgICAgICAgfQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiZm5TdGF0ZVNhdmVDYWxsYmFjayI6IGZ1bmN0aW9uICggc2V0dGluZ3MsIGRhdGEgKSB7CgkJCXRyeSB7CgkJCQkoc2V0dGluZ3MuaVN0YXRlRHVyYXRpb24gPT09IC0xID8gc2Vzc2lvblN0b3JhZ2UgOiBsb2NhbFN0b3JhZ2UpLnNldEl0ZW0oCgkJCQkJJ0RhdGFUYWJsZXNfJytzZXR0aW5ncy5zSW5zdGFuY2UrJ18nK2xvY2F0aW9uLnBhdGhuYW1lLAoJCQkJCUpTT04uc3RyaW5naWZ5KCBkYXRhICkKCQkJCSk7CgkJCX0gY2F0Y2ggKGUpIHt9CgkJfSwKCQoJCgkJLyoqCgkJICogQ2FsbGJhY2sgd2hpY2ggYWxsb3dzIG1vZGlmaWNhdGlvbiBvZiB0aGUgc3RhdGUgdG8gYmUgc2F2ZWQuIENhbGxlZCB3aGVuIHRoZSB0YWJsZQoJCSAqIGhhcyBjaGFuZ2VkIHN0YXRlIGEgbmV3IHN0YXRlIHNhdmUgaXMgcmVxdWlyZWQuIFRoaXMgbWV0aG9kIGFsbG93cyBtb2RpZmljYXRpb24gb2YKCQkgKiB0aGUgc3RhdGUgc2F2aW5nIG9iamVjdCBwcmlvciB0byBhY3R1YWxseSBkb2luZyB0aGUgc2F2ZSwgaW5jbHVkaW5nIGFkZGl0aW9uIG9yCgkJICogb3RoZXIgc3RhdGUgcHJvcGVydGllcyBvciBtb2RpZmljYXRpb24uIE5vdGUgdGhhdCBmb3IgcGx1Zy1pbiBhdXRob3JzLCB5b3Ugc2hvdWxkCgkJICogdXNlIHRoZSBgc3RhdGVTYXZlUGFyYW1zYCBldmVudCB0byBzYXZlIHBhcmFtZXRlcnMgZm9yIGEgcGx1Zy1pbi4KCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogIEBwYXJhbSB7b2JqZWN0fSBkYXRhIFRoZSBzdGF0ZSBvYmplY3QgdG8gYmUgc2F2ZWQKCQkgKgoJCSAqICBAZHRvcHQgQ2FsbGJhY2tzCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5zdGF0ZVNhdmVQYXJhbXMKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFJlbW92ZSBhIHNhdmVkIGZpbHRlciwgc28gZmlsdGVyaW5nIGlzIG5ldmVyIHNhdmVkCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInN0YXRlU2F2ZSI6IHRydWUsCgkJICogICAgICAgICJzdGF0ZVNhdmVQYXJhbXMiOiBmdW5jdGlvbiAoc2V0dGluZ3MsIGRhdGEpIHsKCQkgKiAgICAgICAgICBkYXRhLm9TZWFyY2guc1NlYXJjaCA9ICIiOwoJCSAqICAgICAgICB9CgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJmblN0YXRlU2F2ZVBhcmFtcyI6IG51bGwsCgkKCQoJCS8qKgoJCSAqIER1cmF0aW9uIGZvciB3aGljaCB0aGUgc2F2ZWQgc3RhdGUgaW5mb3JtYXRpb24gaXMgY29uc2lkZXJlZCB2YWxpZC4gQWZ0ZXIgdGhpcyBwZXJpb2QKCQkgKiBoYXMgZWxhcHNlZCB0aGUgc3RhdGUgd2lsbCBiZSByZXR1cm5lZCB0byB0aGUgZGVmYXVsdC4KCQkgKiBWYWx1ZSBpcyBnaXZlbiBpbiBzZWNvbmRzLgoJCSAqICBAdHlwZSBpbnQKCQkgKiAgQGRlZmF1bHQgNzIwMCA8aT4oMiBob3Vycyk8L2k+CgkJICoKCQkgKiAgQGR0b3B0IE9wdGlvbnMKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLnN0YXRlRHVyYXRpb24KCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJzdGF0ZUR1cmF0aW9uIjogNjAqNjAqMjQ7IC8vIDEgZGF5CgkJICogICAgICB9ICk7CgkJICogICAgfSApCgkJICovCgkJImlTdGF0ZUR1cmF0aW9uIjogNzIwMCwKCQoJCgkJLyoqCgkJICogV2hlbiBlbmFibGVkIERhdGFUYWJsZXMgd2lsbCBub3QgbWFrZSBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciBmb3IgdGhlIGZpcnN0CgkJICogcGFnZSBkcmF3IC0gcmF0aGVyIGl0IHdpbGwgdXNlIHRoZSBkYXRhIGFscmVhZHkgb24gdGhlIHBhZ2UgKG5vIHNvcnRpbmcgZXRjCgkJICogd2lsbCBiZSBhcHBsaWVkIHRvIGl0KSwgdGh1cyBzYXZpbmcgb24gYW4gWEhSIGF0IGxvYWQgdGltZS4gYGRlZmVyTG9hZGluZ2AKCQkgKiBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgZGVmZXJyZWQgbG9hZGluZyBpcyByZXF1aXJlZCwgYnV0IGl0IGlzIGFsc28gdXNlZAoJCSAqIHRvIHRlbGwgRGF0YVRhYmxlcyBob3cgbWFueSByZWNvcmRzIHRoZXJlIGFyZSBpbiB0aGUgZnVsbCB0YWJsZSAoYWxsb3dpbmcKCQkgKiB0aGUgaW5mb3JtYXRpb24gZWxlbWVudCBhbmQgcGFnaW5hdGlvbiB0byBiZSBkaXNwbGF5ZWQgY29ycmVjdGx5KS4gSW4gdGhlIGNhc2UKCQkgKiB3aGVyZSBhIGZpbHRlcmluZyBpcyBhcHBsaWVkIHRvIHRoZSB0YWJsZSBvbiBpbml0aWFsIGxvYWQsIHRoaXMgY2FuIGJlCgkJICogaW5kaWNhdGVkIGJ5IGdpdmluZyB0aGUgcGFyYW1ldGVyIGFzIGFuIGFycmF5LCB3aGVyZSB0aGUgZmlyc3QgZWxlbWVudCBpcwoJCSAqIHRoZSBudW1iZXIgb2YgcmVjb3JkcyBhdmFpbGFibGUgYWZ0ZXIgZmlsdGVyaW5nIGFuZCB0aGUgc2Vjb25kIGVsZW1lbnQgaXMgdGhlCgkJICogbnVtYmVyIG9mIHJlY29yZHMgd2l0aG91dCBmaWx0ZXJpbmcgKGFsbG93aW5nIHRoZSB0YWJsZSBpbmZvcm1hdGlvbiBlbGVtZW50CgkJICogdG8gYmUgc2hvd24gY29ycmVjdGx5KS4KCQkgKiAgQHR5cGUgaW50IHwgYXJyYXkKCQkgKiAgQGRlZmF1bHQgbnVsbAoJCSAqCgkJICogIEBkdG9wdCBPcHRpb25zCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5kZWZlckxvYWRpbmcKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIDU3IHJlY29yZHMgYXZhaWxhYmxlIGluIHRoZSB0YWJsZSwgbm8gZmlsdGVyaW5nIGFwcGxpZWQKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAic2VydmVyU2lkZSI6IHRydWUsCgkJICogICAgICAgICJhamF4IjogInNjcmlwdHMvc2VydmVyX3Byb2Nlc3NpbmcucGhwIiwKCQkgKiAgICAgICAgImRlZmVyTG9hZGluZyI6IDU3CgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgLy8gNTcgcmVjb3JkcyBhZnRlciBmaWx0ZXJpbmcsIDEwMCB3aXRob3V0IGZpbHRlcmluZyAoYW4gaW5pdGlhbCBmaWx0ZXIgYXBwbGllZCkKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAic2VydmVyU2lkZSI6IHRydWUsCgkJICogICAgICAgICJhamF4IjogInNjcmlwdHMvc2VydmVyX3Byb2Nlc3NpbmcucGhwIiwKCQkgKiAgICAgICAgImRlZmVyTG9hZGluZyI6IFsgNTcsIDEwMCBdLAoJCSAqICAgICAgICAic2VhcmNoIjogewoJCSAqICAgICAgICAgICJzZWFyY2giOiAibXlfZmlsdGVyIgoJCSAqICAgICAgICB9CgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJpRGVmZXJMb2FkaW5nIjogbnVsbCwKCQoJCgkJLyoqCgkJICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSBvbiBhIHNpbmdsZSBwYWdlIHdoZW4gdXNpbmcgcGFnaW5hdGlvbi4gSWYKCQkgKiBmZWF0dXJlIGVuYWJsZWQgKGBsZW5ndGhDaGFuZ2VgKSB0aGVuIHRoZSBlbmQgdXNlciB3aWxsIGJlIGFibGUgdG8gb3ZlcnJpZGUKCQkgKiB0aGlzIHRvIGEgY3VzdG9tIHNldHRpbmcgdXNpbmcgYSBwb3AtdXAgbWVudS4KCQkgKiAgQHR5cGUgaW50CgkJICogIEBkZWZhdWx0IDEwCgkJICoKCQkgKiAgQGR0b3B0IE9wdGlvbnMKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLnBhZ2VMZW5ndGgKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJwYWdlTGVuZ3RoIjogNTAKCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICkKCQkgKi8KCQkiaURpc3BsYXlMZW5ndGgiOiAxMCwKCQoJCgkJLyoqCgkJICogRGVmaW5lIHRoZSBzdGFydGluZyBwb2ludCBmb3IgZGF0YSBkaXNwbGF5IHdoZW4gdXNpbmcgRGF0YVRhYmxlcyB3aXRoCgkJICogcGFnaW5hdGlvbi4gTm90ZSB0aGF0IHRoaXMgcGFyYW1ldGVyIGlzIHRoZSBudW1iZXIgb2YgcmVjb3JkcywgcmF0aGVyIHRoYW4KCQkgKiB0aGUgcGFnZSBudW1iZXIsIHNvIGlmIHlvdSBoYXZlIDEwIHJlY29yZHMgcGVyIHBhZ2UgYW5kIHdhbnQgdG8gc3RhcnQgb24KCQkgKiB0aGUgdGhpcmQgcGFnZSwgaXQgc2hvdWxkIGJlICIyMCIuCgkJICogIEB0eXBlIGludAoJCSAqICBAZGVmYXVsdCAwCgkJICoKCQkgKiAgQGR0b3B0IE9wdGlvbnMKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmRpc3BsYXlTdGFydAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImRpc3BsYXlTdGFydCI6IDIwCgkJICogICAgICB9ICk7CgkJICogICAgfSApCgkJICovCgkJImlEaXNwbGF5U3RhcnQiOiAwLAoJCgkKCQkvKioKCQkgKiBCeSBkZWZhdWx0IERhdGFUYWJsZXMgYWxsb3dzIGtleWJvYXJkIG5hdmlnYXRpb24gb2YgdGhlIHRhYmxlIChzb3J0aW5nLCBwYWdpbmcsCgkJICogYW5kIGZpbHRlcmluZykgYnkgYWRkaW5nIGEgYHRhYmluZGV4YCBhdHRyaWJ1dGUgdG8gdGhlIHJlcXVpcmVkIGVsZW1lbnRzLiBUaGlzCgkJICogYWxsb3dzIHlvdSB0byB0YWIgdGhyb3VnaCB0aGUgY29udHJvbHMgYW5kIHByZXNzIHRoZSBlbnRlciBrZXkgdG8gYWN0aXZhdGUgdGhlbS4KCQkgKiBUaGUgdGFiaW5kZXggaXMgZGVmYXVsdCAwLCBtZWFuaW5nIHRoYXQgdGhlIHRhYiBmb2xsb3dzIHRoZSBmbG93IG9mIHRoZSBkb2N1bWVudC4KCQkgKiBZb3UgY2FuIG92ZXJydWxlIHRoaXMgdXNpbmcgdGhpcyBwYXJhbWV0ZXIgaWYgeW91IHdpc2guIFVzZSBhIHZhbHVlIG9mIC0xIHRvCgkJICogZGlzYWJsZSBidWlsdC1pbiBrZXlib2FyZCBuYXZpZ2F0aW9uLgoJCSAqICBAdHlwZSBpbnQKCQkgKiAgQGRlZmF1bHQgMAoJCSAqCgkJICogIEBkdG9wdCBPcHRpb25zCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy50YWJJbmRleAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInRhYkluZGV4IjogMQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiaVRhYkluZGV4IjogMCwKCQoJCgkJLyoqCgkJICogQ2xhc3NlcyB0aGF0IERhdGFUYWJsZXMgYXNzaWducyB0byB0aGUgdmFyaW91cyBjb21wb25lbnRzIGFuZCBmZWF0dXJlcwoJCSAqIHRoYXQgaXQgYWRkcyB0byB0aGUgSFRNTCB0YWJsZS4gVGhpcyBhbGxvd3MgY2xhc3NlcyB0byBiZSBjb25maWd1cmVkCgkJICogZHVyaW5nIGluaXRpYWxpc2F0aW9uIGluIGFkZGl0aW9uIHRvIHRocm91Z2ggdGhlIHN0YXRpYwoJCSAqIHtAbGluayBEYXRhVGFibGUuZXh0Lm9TdGRDbGFzc2VzfSBvYmplY3QpLgoJCSAqICBAbmFtZXNwYWNlCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5jbGFzc2VzCgkJICovCgkJIm9DbGFzc2VzIjoge30sCgkKCQoJCS8qKgoJCSAqIEFsbCBzdHJpbmdzIHRoYXQgRGF0YVRhYmxlcyB1c2VzIGluIHRoZSB1c2VyIGludGVyZmFjZSB0aGF0IGl0IGNyZWF0ZXMKCQkgKiBhcmUgZGVmaW5lZCBpbiB0aGlzIG9iamVjdCwgYWxsb3dpbmcgeW91IHRvIG1vZGlmaWVkIHRoZW0gaW5kaXZpZHVhbGx5IG9yCgkJICogY29tcGxldGVseSByZXBsYWNlIHRoZW0gYWxsIGFzIHJlcXVpcmVkLgoJCSAqICBAbmFtZXNwYWNlCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5sYW5ndWFnZQoJCSAqLwoJCSJvTGFuZ3VhZ2UiOiB7CgkJCS8qKgoJCQkgKiBTdHJpbmdzIHRoYXQgYXJlIHVzZWQgZm9yIFdBSS1BUklBIGxhYmVscyBhbmQgY29udHJvbHMgb25seSAodGhlc2UgYXJlIG5vdAoJCQkgKiBhY3R1YWxseSB2aXNpYmxlIG9uIHRoZSBwYWdlLCBidXQgd2lsbCBiZSByZWFkIGJ5IHNjcmVlbnJlYWRlcnMsIGFuZCB0aHVzCgkJCSAqIG11c3QgYmUgaW50ZXJuYXRpb25hbGlzZWQgYXMgd2VsbCkuCgkJCSAqICBAbmFtZXNwYWNlCgkJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMubGFuZ3VhZ2UuYXJpYQoJCQkgKi8KCQkJIm9BcmlhIjogewoJCQkJLyoqCgkJCQkgKiBBUklBIGxhYmVsIHRoYXQgaXMgYWRkZWQgdG8gdGhlIHRhYmxlIGhlYWRlcnMgd2hlbiB0aGUgY29sdW1uIG1heSBiZQoJCQkJICogc29ydGVkIGFzY2VuZGluZyBieSBhY3RpdmluZyB0aGUgY29sdW1uIChjbGljayBvciByZXR1cm4gd2hlbiBmb2N1c2VkKS4KCQkJCSAqIE5vdGUgdGhhdCB0aGUgY29sdW1uIGhlYWRlciBpcyBwcmVmaXhlZCB0byB0aGlzIHN0cmluZy4KCQkJCSAqICBAdHlwZSBzdHJpbmcKCQkJCSAqICBAZGVmYXVsdCA6IGFjdGl2YXRlIHRvIHNvcnQgY29sdW1uIGFzY2VuZGluZwoJCQkJICoKCQkJCSAqICBAZHRvcHQgTGFuZ3VhZ2UKCQkJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMubGFuZ3VhZ2UuYXJpYS5zb3J0QXNjZW5kaW5nCgkJCQkgKgoJCQkJICogIEBleGFtcGxlCgkJCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkJICogICAgICAgICAgImFyaWEiOiB7CgkJCQkgKiAgICAgICAgICAgICJzb3J0QXNjZW5kaW5nIjogIiAtIGNsaWNrL3JldHVybiB0byBzb3J0IGFzY2VuZGluZyIKCQkJCSAqICAgICAgICAgIH0KCQkJCSAqICAgICAgICB9CgkJCQkgKiAgICAgIH0gKTsKCQkJCSAqICAgIH0gKTsKCQkJCSAqLwoJCQkJInNTb3J0QXNjZW5kaW5nIjogIjogYWN0aXZhdGUgdG8gc29ydCBjb2x1bW4gYXNjZW5kaW5nIiwKCQoJCQkJLyoqCgkJCQkgKiBBUklBIGxhYmVsIHRoYXQgaXMgYWRkZWQgdG8gdGhlIHRhYmxlIGhlYWRlcnMgd2hlbiB0aGUgY29sdW1uIG1heSBiZQoJCQkJICogc29ydGVkIGRlc2NlbmRpbmcgYnkgYWN0aXZpbmcgdGhlIGNvbHVtbiAoY2xpY2sgb3IgcmV0dXJuIHdoZW4gZm9jdXNlZCkuCgkJCQkgKiBOb3RlIHRoYXQgdGhlIGNvbHVtbiBoZWFkZXIgaXMgcHJlZml4ZWQgdG8gdGhpcyBzdHJpbmcuCgkJCQkgKiAgQHR5cGUgc3RyaW5nCgkJCQkgKiAgQGRlZmF1bHQgOiBhY3RpdmF0ZSB0byBzb3J0IGNvbHVtbiBhc2NlbmRpbmcKCQkJCSAqCgkJCQkgKiAgQGR0b3B0IExhbmd1YWdlCgkJCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxhbmd1YWdlLmFyaWEuc29ydERlc2NlbmRpbmcKCQkJCSAqCgkJCQkgKiAgQGV4YW1wbGUKCQkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkJCSAqICAgICAgICAibGFuZ3VhZ2UiOiB7CgkJCQkgKiAgICAgICAgICAiYXJpYSI6IHsKCQkJCSAqICAgICAgICAgICAgInNvcnREZXNjZW5kaW5nIjogIiAtIGNsaWNrL3JldHVybiB0byBzb3J0IGRlc2NlbmRpbmciCgkJCQkgKiAgICAgICAgICB9CgkJCQkgKiAgICAgICAgfQoJCQkJICogICAgICB9ICk7CgkJCQkgKiAgICB9ICk7CgkJCQkgKi8KCQkJCSJzU29ydERlc2NlbmRpbmciOiAiOiBhY3RpdmF0ZSB0byBzb3J0IGNvbHVtbiBkZXNjZW5kaW5nIgoJCQl9LAoJCgkJCS8qKgoJCQkgKiBQYWdpbmF0aW9uIHN0cmluZyB1c2VkIGJ5IERhdGFUYWJsZXMgZm9yIHRoZSBidWlsdC1pbiBwYWdpbmF0aW9uCgkJCSAqIGNvbnRyb2wgdHlwZXMuCgkJCSAqICBAbmFtZXNwYWNlCgkJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMubGFuZ3VhZ2UucGFnaW5hdGUKCQkJICovCgkJCSJvUGFnaW5hdGUiOiB7CgkJCQkvKioKCQkJCSAqIFRleHQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdmdWxsX251bWJlcnMnIHR5cGUgb2YgcGFnaW5hdGlvbiBmb3IgdGhlCgkJCQkgKiBidXR0b24gdG8gdGFrZSB0aGUgdXNlciB0byB0aGUgZmlyc3QgcGFnZS4KCQkJCSAqICBAdHlwZSBzdHJpbmcKCQkJCSAqICBAZGVmYXVsdCBGaXJzdAoJCQkJICoKCQkJCSAqICBAZHRvcHQgTGFuZ3VhZ2UKCQkJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMubGFuZ3VhZ2UucGFnaW5hdGUuZmlyc3QKCQkJCSAqCgkJCQkgKiAgQGV4YW1wbGUKCQkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkJCSAqICAgICAgICAibGFuZ3VhZ2UiOiB7CgkJCQkgKiAgICAgICAgICAicGFnaW5hdGUiOiB7CgkJCQkgKiAgICAgICAgICAgICJmaXJzdCI6ICJGaXJzdCBwYWdlIgoJCQkJICogICAgICAgICAgfQoJCQkJICogICAgICAgIH0KCQkJCSAqICAgICAgfSApOwoJCQkJICogICAgfSApOwoJCQkJICovCgkJCQkic0ZpcnN0IjogIkZpcnN0IiwKCQoJCgkJCQkvKioKCQkJCSAqIFRleHQgdG8gdXNlIHdoZW4gdXNpbmcgdGhlICdmdWxsX251bWJlcnMnIHR5cGUgb2YgcGFnaW5hdGlvbiBmb3IgdGhlCgkJCQkgKiBidXR0b24gdG8gdGFrZSB0aGUgdXNlciB0byB0aGUgbGFzdCBwYWdlLgoJCQkJICogIEB0eXBlIHN0cmluZwoJCQkJICogIEBkZWZhdWx0IExhc3QKCQkJCSAqCgkJCQkgKiAgQGR0b3B0IExhbmd1YWdlCgkJCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxhbmd1YWdlLnBhZ2luYXRlLmxhc3QKCQkJCSAqCgkJCQkgKiAgQGV4YW1wbGUKCQkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkJCSAqICAgICAgICAibGFuZ3VhZ2UiOiB7CgkJCQkgKiAgICAgICAgICAicGFnaW5hdGUiOiB7CgkJCQkgKiAgICAgICAgICAgICJsYXN0IjogIkxhc3QgcGFnZSIKCQkJCSAqICAgICAgICAgIH0KCQkJCSAqICAgICAgICB9CgkJCQkgKiAgICAgIH0gKTsKCQkJCSAqICAgIH0gKTsKCQkJCSAqLwoJCQkJInNMYXN0IjogIkxhc3QiLAoJCgkKCQkJCS8qKgoJCQkJICogVGV4dCB0byB1c2UgZm9yIHRoZSAnbmV4dCcgcGFnaW5hdGlvbiBidXR0b24gKHRvIHRha2UgdGhlIHVzZXIgdG8gdGhlCgkJCQkgKiBuZXh0IHBhZ2UpLgoJCQkJICogIEB0eXBlIHN0cmluZwoJCQkJICogIEBkZWZhdWx0IE5leHQKCQkJCSAqCgkJCQkgKiAgQGR0b3B0IExhbmd1YWdlCgkJCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxhbmd1YWdlLnBhZ2luYXRlLm5leHQKCQkJCSAqCgkJCQkgKiAgQGV4YW1wbGUKCQkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkJCSAqICAgICAgICAibGFuZ3VhZ2UiOiB7CgkJCQkgKiAgICAgICAgICAicGFnaW5hdGUiOiB7CgkJCQkgKiAgICAgICAgICAgICJuZXh0IjogIk5leHQgcGFnZSIKCQkJCSAqICAgICAgICAgIH0KCQkJCSAqICAgICAgICB9CgkJCQkgKiAgICAgIH0gKTsKCQkJCSAqICAgIH0gKTsKCQkJCSAqLwoJCQkJInNOZXh0IjogIk5leHQiLAoJCgkKCQkJCS8qKgoJCQkJICogVGV4dCB0byB1c2UgZm9yIHRoZSAncHJldmlvdXMnIHBhZ2luYXRpb24gYnV0dG9uICh0byB0YWtlIHRoZSB1c2VyIHRvCgkJCQkgKiB0aGUgcHJldmlvdXMgcGFnZSkuCgkJCQkgKiAgQHR5cGUgc3RyaW5nCgkJCQkgKiAgQGRlZmF1bHQgUHJldmlvdXMKCQkJCSAqCgkJCQkgKiAgQGR0b3B0IExhbmd1YWdlCgkJCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxhbmd1YWdlLnBhZ2luYXRlLnByZXZpb3VzCgkJCQkgKgoJCQkJICogIEBleGFtcGxlCgkJCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkJICogICAgICAgICAgInBhZ2luYXRlIjogewoJCQkJICogICAgICAgICAgICAicHJldmlvdXMiOiAiUHJldmlvdXMgcGFnZSIKCQkJCSAqICAgICAgICAgIH0KCQkJCSAqICAgICAgICB9CgkJCQkgKiAgICAgIH0gKTsKCQkJCSAqICAgIH0gKTsKCQkJCSAqLwoJCQkJInNQcmV2aW91cyI6ICJQcmV2aW91cyIKCQkJfSwKCQoJCQkvKioKCQkJICogVGhpcyBzdHJpbmcgaXMgc2hvd24gaW4gcHJlZmVyZW5jZSB0byBgemVyb1JlY29yZHNgIHdoZW4gdGhlIHRhYmxlIGlzCgkJCSAqIGVtcHR5IG9mIGRhdGEgKHJlZ2FyZGxlc3Mgb2YgZmlsdGVyaW5nKS4gTm90ZSB0aGF0IHRoaXMgaXMgYW4gb3B0aW9uYWwKCQkJICogcGFyYW1ldGVyIC0gaWYgaXQgaXMgbm90IGdpdmVuLCB0aGUgdmFsdWUgb2YgYHplcm9SZWNvcmRzYCB3aWxsIGJlIHVzZWQKCQkJICogaW5zdGVhZCAoZWl0aGVyIHRoZSBkZWZhdWx0IG9yIGdpdmVuIHZhbHVlKS4KCQkJICogIEB0eXBlIHN0cmluZwoJCQkgKiAgQGRlZmF1bHQgTm8gZGF0YSBhdmFpbGFibGUgaW4gdGFibGUKCQkJICoKCQkJICogIEBkdG9wdCBMYW5ndWFnZQoJCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxhbmd1YWdlLmVtcHR5VGFibGUKCQkJICoKCQkJICogIEBleGFtcGxlCgkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkgKiAgICAgICAgICAiZW1wdHlUYWJsZSI6ICJObyBkYXRhIGF2YWlsYWJsZSBpbiB0YWJsZSIKCQkJICogICAgICAgIH0KCQkJICogICAgICB9ICk7CgkJCSAqICAgIH0gKTsKCQkJICovCgkJCSJzRW1wdHlUYWJsZSI6ICJObyBkYXRhIGF2YWlsYWJsZSBpbiB0YWJsZSIsCgkKCQoJCQkvKioKCQkJICogVGhpcyBzdHJpbmcgZ2l2ZXMgaW5mb3JtYXRpb24gdG8gdGhlIGVuZCB1c2VyIGFib3V0IHRoZSBpbmZvcm1hdGlvbgoJCQkgKiB0aGF0IGlzIGN1cnJlbnQgb24gZGlzcGxheSBvbiB0aGUgcGFnZS4gVGhlIGZvbGxvd2luZyB0b2tlbnMgY2FuIGJlCgkJCSAqIHVzZWQgaW4gdGhlIHN0cmluZyBhbmQgd2lsbCBiZSBkeW5hbWljYWxseSByZXBsYWNlZCBhcyB0aGUgdGFibGUKCQkJICogZGlzcGxheSB1cGRhdGVzLiBUaGlzIHRva2VucyBjYW4gYmUgcGxhY2VkIGFueXdoZXJlIGluIHRoZSBzdHJpbmcsIG9yCgkJCSAqIHJlbW92ZWQgYXMgbmVlZGVkIGJ5IHRoZSBsYW5ndWFnZSByZXF1aXJlczoKCQkJICoKCQkJICogKiBgXF9TVEFSVFxfYCAtIERpc3BsYXkgaW5kZXggb2YgdGhlIGZpcnN0IHJlY29yZCBvbiB0aGUgY3VycmVudCBwYWdlCgkJCSAqICogYFxfRU5EXF9gIC0gRGlzcGxheSBpbmRleCBvZiB0aGUgbGFzdCByZWNvcmQgb24gdGhlIGN1cnJlbnQgcGFnZQoJCQkgKiAqIGBcX1RPVEFMXF9gIC0gTnVtYmVyIG9mIHJlY29yZHMgaW4gdGhlIHRhYmxlIGFmdGVyIGZpbHRlcmluZwoJCQkgKiAqIGBcX01BWFxfYCAtIE51bWJlciBvZiByZWNvcmRzIGluIHRoZSB0YWJsZSB3aXRob3V0IGZpbHRlcmluZwoJCQkgKiAqIGBcX1BBR0VcX2AgLSBDdXJyZW50IHBhZ2UgbnVtYmVyCgkJCSAqICogYFxfUEFHRVNcX2AgLSBUb3RhbCBudW1iZXIgb2YgcGFnZXMgb2YgZGF0YSBpbiB0aGUgdGFibGUKCQkJICoKCQkJICogIEB0eXBlIHN0cmluZwoJCQkgKiAgQGRlZmF1bHQgU2hvd2luZyBfU1RBUlRfIHRvIF9FTkRfIG9mIF9UT1RBTF8gZW50cmllcwoJCQkgKgoJCQkgKiAgQGR0b3B0IExhbmd1YWdlCgkJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMubGFuZ3VhZ2UuaW5mbwoJCQkgKgoJCQkgKiAgQGV4YW1wbGUKCQkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJCSAqICAgICAgICAibGFuZ3VhZ2UiOiB7CgkJCSAqICAgICAgICAgICJpbmZvIjogIlNob3dpbmcgcGFnZSBfUEFHRV8gb2YgX1BBR0VTXyIKCQkJICogICAgICAgIH0KCQkJICogICAgICB9ICk7CgkJCSAqICAgIH0gKTsKCQkJICovCgkJCSJzSW5mbyI6ICJTaG93aW5nIF9TVEFSVF8gdG8gX0VORF8gb2YgX1RPVEFMXyBlbnRyaWVzIiwKCQoJCgkJCS8qKgoJCQkgKiBEaXNwbGF5IGluZm9ybWF0aW9uIHN0cmluZyBmb3Igd2hlbiB0aGUgdGFibGUgaXMgZW1wdHkuIFR5cGljYWxseSB0aGUKCQkJICogZm9ybWF0IG9mIHRoaXMgc3RyaW5nIHNob3VsZCBtYXRjaCBgaW5mb2AuCgkJCSAqICBAdHlwZSBzdHJpbmcKCQkJICogIEBkZWZhdWx0IFNob3dpbmcgMCB0byAwIG9mIDAgZW50cmllcwoJCQkgKgoJCQkgKiAgQGR0b3B0IExhbmd1YWdlCgkJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMubGFuZ3VhZ2UuaW5mb0VtcHR5CgkJCSAqCgkJCSAqICBAZXhhbXBsZQoJCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkJICogICAgICAgICJsYW5ndWFnZSI6IHsKCQkJICogICAgICAgICAgImluZm9FbXB0eSI6ICJObyBlbnRyaWVzIHRvIHNob3ciCgkJCSAqICAgICAgICB9CgkJCSAqICAgICAgfSApOwoJCQkgKiAgICB9ICk7CgkJCSAqLwoJCQkic0luZm9FbXB0eSI6ICJTaG93aW5nIDAgdG8gMCBvZiAwIGVudHJpZXMiLAoJCgkKCQkJLyoqCgkJCSAqIFdoZW4gYSB1c2VyIGZpbHRlcnMgdGhlIGluZm9ybWF0aW9uIGluIGEgdGFibGUsIHRoaXMgc3RyaW5nIGlzIGFwcGVuZGVkCgkJCSAqIHRvIHRoZSBpbmZvcm1hdGlvbiAoYGluZm9gKSB0byBnaXZlIGFuIGlkZWEgb2YgaG93IHN0cm9uZyB0aGUgZmlsdGVyaW5nCgkJCSAqIGlzLiBUaGUgdmFyaWFibGUgX01BWF8gaXMgZHluYW1pY2FsbHkgdXBkYXRlZC4KCQkJICogIEB0eXBlIHN0cmluZwoJCQkgKiAgQGRlZmF1bHQgKGZpbHRlcmVkIGZyb20gX01BWF8gdG90YWwgZW50cmllcykKCQkJICoKCQkJICogIEBkdG9wdCBMYW5ndWFnZQoJCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxhbmd1YWdlLmluZm9GaWx0ZXJlZAoJCQkgKgoJCQkgKiAgQGV4YW1wbGUKCQkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJCSAqICAgICAgICAibGFuZ3VhZ2UiOiB7CgkJCSAqICAgICAgICAgICJpbmZvRmlsdGVyZWQiOiAiIC0gZmlsdGVyaW5nIGZyb20gX01BWF8gcmVjb3JkcyIKCQkJICogICAgICAgIH0KCQkJICogICAgICB9ICk7CgkJCSAqICAgIH0gKTsKCQkJICovCgkJCSJzSW5mb0ZpbHRlcmVkIjogIihmaWx0ZXJlZCBmcm9tIF9NQVhfIHRvdGFsIGVudHJpZXMpIiwKCQoJCgkJCS8qKgoJCQkgKiBJZiBjYW4gYmUgdXNlZnVsIHRvIGFwcGVuZCBleHRyYSBpbmZvcm1hdGlvbiB0byB0aGUgaW5mbyBzdHJpbmcgYXQgdGltZXMsCgkJCSAqIGFuZCB0aGlzIHZhcmlhYmxlIGRvZXMgZXhhY3RseSB0aGF0LiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYXBwZW5kZWQgdG8KCQkJICogdGhlIGBpbmZvYCAoYGluZm9FbXB0eWAgYW5kIGBpbmZvRmlsdGVyZWRgIGluIHdoYXRldmVyIGNvbWJpbmF0aW9uIHRoZXkgYXJlCgkJCSAqIGJlaW5nIHVzZWQpIGF0IGFsbCB0aW1lcy4KCQkJICogIEB0eXBlIHN0cmluZwoJCQkgKiAgQGRlZmF1bHQgPGk+RW1wdHkgc3RyaW5nPC9pPgoJCQkgKgoJCQkgKiAgQGR0b3B0IExhbmd1YWdlCgkJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMubGFuZ3VhZ2UuaW5mb1Bvc3RGaXgKCQkJICoKCQkJICogIEBleGFtcGxlCgkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkgKiAgICAgICAgICAiaW5mb1Bvc3RGaXgiOiAiQWxsIHJlY29yZHMgc2hvd24gYXJlIGRlcml2ZWQgZnJvbSByZWFsIGluZm9ybWF0aW9uLiIKCQkJICogICAgICAgIH0KCQkJICogICAgICB9ICk7CgkJCSAqICAgIH0gKTsKCQkJICovCgkJCSJzSW5mb1Bvc3RGaXgiOiAiIiwKCQoJCgkJCS8qKgoJCQkgKiBUaGlzIGRlY2ltYWwgcGxhY2Ugb3BlcmF0b3IgaXMgYSBsaXR0bGUgZGlmZmVyZW50IGZyb20gdGhlIG90aGVyCgkJCSAqIGxhbmd1YWdlIG9wdGlvbnMgc2luY2UgRGF0YVRhYmxlcyBkb2Vzbid0IG91dHB1dCBmbG9hdGluZyBwb2ludAoJCQkgKiBudW1iZXJzLCBzbyBpdCB3b24ndCBldmVyIHVzZSB0aGlzIGZvciBkaXNwbGF5IG9mIGEgbnVtYmVyLiBSYXRoZXIsCgkJCSAqIHdoYXQgdGhpcyBwYXJhbWV0ZXIgZG9lcyBpcyBtb2RpZnkgdGhlIHNvcnQgbWV0aG9kcyBvZiB0aGUgdGFibGUgc28KCQkJICogdGhhdCBudW1iZXJzIHdoaWNoIGFyZSBpbiBhIGZvcm1hdCB3aGljaCBoYXMgYSBjaGFyYWN0ZXIgb3RoZXIgdGhhbgoJCQkgKiBhIHBlcmlvZCAoYC5gKSBhcyBhIGRlY2ltYWwgcGxhY2Ugd2lsbCBiZSBzb3J0ZWQgbnVtZXJpY2FsbHkuCgkJCSAqCgkJCSAqIE5vdGUgdGhhdCBudW1iZXJzIHdpdGggZGlmZmVyZW50IGRlY2ltYWwgcGxhY2VzIGNhbm5vdCBiZSBzaG93biBpbgoJCQkgKiB0aGUgc2FtZSB0YWJsZSBhbmQgc3RpbGwgYmUgc29ydGFibGUsIHRoZSB0YWJsZSBtdXN0IGJlIGNvbnNpc3RlbnQuCgkJCSAqIEhvd2V2ZXIsIG11bHRpcGxlIGRpZmZlcmVudCB0YWJsZXMgb24gdGhlIHBhZ2UgY2FuIHVzZSBkaWZmZXJlbnQKCQkJICogZGVjaW1hbCBwbGFjZSBjaGFyYWN0ZXJzLgoJCQkgKiAgQHR5cGUgc3RyaW5nCgkJCSAqICBAZGVmYXVsdCAKCQkJICoKCQkJICogIEBkdG9wdCBMYW5ndWFnZQoJCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxhbmd1YWdlLmRlY2ltYWwKCQkJICoKCQkJICogIEBleGFtcGxlCgkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkgKiAgICAgICAgICAiZGVjaW1hbCI6ICIsIgoJCQkgKiAgICAgICAgICAidGhvdXNhbmRzIjogIi4iCgkJCSAqICAgICAgICB9CgkJCSAqICAgICAgfSApOwoJCQkgKiAgICB9ICk7CgkJCSAqLwoJCQkic0RlY2ltYWwiOiAiIiwKCQoJCgkJCS8qKgoJCQkgKiBEYXRhVGFibGVzIGhhcyBhIGJ1aWxkIGluIG51bWJlciBmb3JtYXR0ZXIgKGBmb3JtYXROdW1iZXJgKSB3aGljaCBpcwoJCQkgKiB1c2VkIHRvIGZvcm1hdCBsYXJnZSBudW1iZXJzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIHRhYmxlIGluZm9ybWF0aW9uLgoJCQkgKiBCeSBkZWZhdWx0IGEgY29tbWEgaXMgdXNlZCwgYnV0IHRoaXMgY2FuIGJlIHRyaXZpYWxseSBjaGFuZ2VkIHRvIGFueQoJCQkgKiBjaGFyYWN0ZXIgeW91IHdpc2ggd2l0aCB0aGlzIHBhcmFtZXRlci4KCQkJICogIEB0eXBlIHN0cmluZwoJCQkgKiAgQGRlZmF1bHQgLAoJCQkgKgoJCQkgKiAgQGR0b3B0IExhbmd1YWdlCgkJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMubGFuZ3VhZ2UudGhvdXNhbmRzCgkJCSAqCgkJCSAqICBAZXhhbXBsZQoJCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkJICogICAgICAgICJsYW5ndWFnZSI6IHsKCQkJICogICAgICAgICAgInRob3VzYW5kcyI6ICInIgoJCQkgKiAgICAgICAgfQoJCQkgKiAgICAgIH0gKTsKCQkJICogICAgfSApOwoJCQkgKi8KCQkJInNUaG91c2FuZHMiOiAiLCIsCgkKCQoJCQkvKioKCQkJICogRGV0YWlsIHRoZSBhY3Rpb24gdGhhdCB3aWxsIGJlIHRha2VuIHdoZW4gdGhlIGRyb3AgZG93biBtZW51IGZvciB0aGUKCQkJICogcGFnaW5hdGlvbiBsZW5ndGggb3B0aW9uIGlzIGNoYW5nZWQuIFRoZSAnX01FTlVfJyB2YXJpYWJsZSBpcyByZXBsYWNlZAoJCQkgKiB3aXRoIGEgZGVmYXVsdCBzZWxlY3QgbGlzdCBvZiAxMCwgMjUsIDUwIGFuZCAxMDAsIGFuZCBjYW4gYmUgcmVwbGFjZWQKCQkJICogd2l0aCBhIGN1c3RvbSBzZWxlY3QgYm94IGlmIHJlcXVpcmVkLgoJCQkgKiAgQHR5cGUgc3RyaW5nCgkJCSAqICBAZGVmYXVsdCBTaG93IF9NRU5VXyBlbnRyaWVzCgkJCSAqCgkJCSAqICBAZHRvcHQgTGFuZ3VhZ2UKCQkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5sYW5ndWFnZS5sZW5ndGhNZW51CgkJCSAqCgkJCSAqICBAZXhhbXBsZQoJCQkgKiAgICAvLyBMYW5ndWFnZSBjaGFuZ2Ugb25seQoJCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkJICogICAgICAgICJsYW5ndWFnZSI6IHsKCQkJICogICAgICAgICAgImxlbmd0aE1lbnUiOiAiRGlzcGxheSBfTUVOVV8gcmVjb3JkcyIKCQkJICogICAgICAgIH0KCQkJICogICAgICB9ICk7CgkJCSAqICAgIH0gKTsKCQkJICoKCQkJICogIEBleGFtcGxlCgkJCSAqICAgIC8vIExhbmd1YWdlIGFuZCBvcHRpb25zIGNoYW5nZQoJCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkJICogICAgICAgICJsYW5ndWFnZSI6IHsKCQkJICogICAgICAgICAgImxlbmd0aE1lbnUiOiAnRGlzcGxheSA8c2VsZWN0PicrCgkJCSAqICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9IjEwIj4xMDwvb3B0aW9uPicrCgkJCSAqICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9IjIwIj4yMDwvb3B0aW9uPicrCgkJCSAqICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9IjMwIj4zMDwvb3B0aW9uPicrCgkJCSAqICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9IjQwIj40MDwvb3B0aW9uPicrCgkJCSAqICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9IjUwIj41MDwvb3B0aW9uPicrCgkJCSAqICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9Ii0xIj5BbGw8L29wdGlvbj4nKwoJCQkgKiAgICAgICAgICAgICc8L3NlbGVjdD4gcmVjb3JkcycKCQkJICogICAgICAgIH0KCQkJICogICAgICB9ICk7CgkJCSAqICAgIH0gKTsKCQkJICovCgkJCSJzTGVuZ3RoTWVudSI6ICJTaG93IF9NRU5VXyBlbnRyaWVzIiwKCQoJCgkJCS8qKgoJCQkgKiBXaGVuIHVzaW5nIEFqYXggc291cmNlZCBkYXRhIGFuZCBkdXJpbmcgdGhlIGZpcnN0IGRyYXcgd2hlbiBEYXRhVGFibGVzIGlzCgkJCSAqIGdhdGhlcmluZyB0aGUgZGF0YSwgdGhpcyBtZXNzYWdlIGlzIHNob3duIGluIGFuIGVtcHR5IHJvdyBpbiB0aGUgdGFibGUgdG8KCQkJICogaW5kaWNhdGUgdG8gdGhlIGVuZCB1c2VyIHRoZSB0aGUgZGF0YSBpcyBiZWluZyBsb2FkZWQuIE5vdGUgdGhhdCB0aGlzCgkJCSAqIHBhcmFtZXRlciBpcyBub3QgdXNlZCB3aGVuIGxvYWRpbmcgZGF0YSBieSBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nLCBqdXN0CgkJCSAqIEFqYXggc291cmNlZCBkYXRhIHdpdGggY2xpZW50LXNpZGUgcHJvY2Vzc2luZy4KCQkJICogIEB0eXBlIHN0cmluZwoJCQkgKiAgQGRlZmF1bHQgTG9hZGluZy4uLgoJCQkgKgoJCQkgKiAgQGR0b3B0IExhbmd1YWdlCgkJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMubGFuZ3VhZ2UubG9hZGluZ1JlY29yZHMKCQkJICoKCQkJICogIEBleGFtcGxlCgkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkgKiAgICAgICAgICAibG9hZGluZ1JlY29yZHMiOiAiUGxlYXNlIHdhaXQgLSBsb2FkaW5nLi4uIgoJCQkgKiAgICAgICAgfQoJCQkgKiAgICAgIH0gKTsKCQkJICogICAgfSApOwoJCQkgKi8KCQkJInNMb2FkaW5nUmVjb3JkcyI6ICJMb2FkaW5nLi4uIiwKCQoJCgkJCS8qKgoJCQkgKiBUZXh0IHdoaWNoIGlzIGRpc3BsYXllZCB3aGVuIHRoZSB0YWJsZSBpcyBwcm9jZXNzaW5nIGEgdXNlciBhY3Rpb24KCQkJICogKHVzdWFsbHkgYSBzb3J0IGNvbW1hbmQgb3Igc2ltaWxhcikuCgkJCSAqICBAdHlwZSBzdHJpbmcKCQkJICogIEBkZWZhdWx0IFByb2Nlc3NpbmcuLi4KCQkJICoKCQkJICogIEBkdG9wdCBMYW5ndWFnZQoJCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxhbmd1YWdlLnByb2Nlc3NpbmcKCQkJICoKCQkJICogIEBleGFtcGxlCgkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkgKiAgICAgICAgICAicHJvY2Vzc2luZyI6ICJEYXRhVGFibGVzIGlzIGN1cnJlbnRseSBidXN5IgoJCQkgKiAgICAgICAgfQoJCQkgKiAgICAgIH0gKTsKCQkJICogICAgfSApOwoJCQkgKi8KCQkJInNQcm9jZXNzaW5nIjogIlByb2Nlc3NpbmcuLi4iLAoJCgkKCQkJLyoqCgkJCSAqIERldGFpbHMgdGhlIGFjdGlvbnMgdGhhdCB3aWxsIGJlIHRha2VuIHdoZW4gdGhlIHVzZXIgdHlwZXMgaW50byB0aGUKCQkJICogZmlsdGVyaW5nIGlucHV0IHRleHQgYm94LiBUaGUgdmFyaWFibGUgIl9JTlBVVF8iLCBpZiB1c2VkIGluIHRoZSBzdHJpbmcsCgkJCSAqIGlzIHJlcGxhY2VkIHdpdGggdGhlIEhUTUwgdGV4dCBib3ggZm9yIHRoZSBmaWx0ZXJpbmcgaW5wdXQgYWxsb3dpbmcKCQkJICogY29udHJvbCBvdmVyIHdoZXJlIGl0IGFwcGVhcnMgaW4gdGhlIHN0cmluZy4gSWYgIl9JTlBVVF8iIGlzIG5vdCBnaXZlbgoJCQkgKiB0aGVuIHRoZSBpbnB1dCBib3ggaXMgYXBwZW5kZWQgdG8gdGhlIHN0cmluZyBhdXRvbWF0aWNhbGx5LgoJCQkgKiAgQHR5cGUgc3RyaW5nCgkJCSAqICBAZGVmYXVsdCBTZWFyY2g6CgkJCSAqCgkJCSAqICBAZHRvcHQgTGFuZ3VhZ2UKCQkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5sYW5ndWFnZS5zZWFyY2gKCQkJICoKCQkJICogIEBleGFtcGxlCgkJCSAqICAgIC8vIElucHV0IHRleHQgYm94IHdpbGwgYmUgYXBwZW5kZWQgYXQgdGhlIGVuZCBhdXRvbWF0aWNhbGx5CgkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkgKiAgICAgICAgICAic2VhcmNoIjogIkZpbHRlciByZWNvcmRzOiIKCQkJICogICAgICAgIH0KCQkJICogICAgICB9ICk7CgkJCSAqICAgIH0gKTsKCQkJICoKCQkJICogIEBleGFtcGxlCgkJCSAqICAgIC8vIFNwZWNpZnkgd2hlcmUgdGhlIGZpbHRlciBzaG91bGQgYXBwZWFyCgkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkgKiAgICAgICAgICAic2VhcmNoIjogIkFwcGx5IGZpbHRlciBfSU5QVVRfIHRvIHRhYmxlIgoJCQkgKiAgICAgICAgfQoJCQkgKiAgICAgIH0gKTsKCQkJICogICAgfSApOwoJCQkgKi8KCQkJInNTZWFyY2giOiAiU2VhcmNoOiIsCgkKCQoJCQkvKioKCQkJICogQXNzaWduIGEgYHBsYWNlaG9sZGVyYCBhdHRyaWJ1dGUgdG8gdGhlIHNlYXJjaCBgaW5wdXRgIGVsZW1lbnQKCQkJICogIEB0eXBlIHN0cmluZwoJCQkgKiAgQGRlZmF1bHQgCgkJCSAqCgkJCSAqICBAZHRvcHQgTGFuZ3VhZ2UKCQkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5sYW5ndWFnZS5zZWFyY2hQbGFjZWhvbGRlcgoJCQkgKi8KCQkJInNTZWFyY2hQbGFjZWhvbGRlciI6ICIiLAoJCgkKCQkJLyoqCgkJCSAqIEFsbCBvZiB0aGUgbGFuZ3VhZ2UgaW5mb3JtYXRpb24gY2FuIGJlIHN0b3JlZCBpbiBhIGZpbGUgb24gdGhlCgkJCSAqIHNlcnZlci1zaWRlLCB3aGljaCBEYXRhVGFibGVzIHdpbGwgbG9vayB1cCBpZiB0aGlzIHBhcmFtZXRlciBpcyBwYXNzZWQuCgkJCSAqIEl0IG11c3Qgc3RvcmUgdGhlIFVSTCBvZiB0aGUgbGFuZ3VhZ2UgZmlsZSwgd2hpY2ggaXMgaW4gYSBKU09OIGZvcm1hdCwKCQkJICogYW5kIHRoZSBvYmplY3QgaGFzIHRoZSBzYW1lIHByb3BlcnRpZXMgYXMgdGhlIG9MYW5ndWFnZSBvYmplY3QgaW4gdGhlCgkJCSAqIGluaXRpYWxpc2VyIG9iamVjdCAoaS5lLiB0aGUgYWJvdmUgcGFyYW1ldGVycykuIFBsZWFzZSByZWZlciB0byBvbmUgb2YKCQkJICogdGhlIGV4YW1wbGUgbGFuZ3VhZ2UgZmlsZXMgdG8gc2VlIGhvdyB0aGlzIHdvcmtzIGluIGFjdGlvbi4KCQkJICogIEB0eXBlIHN0cmluZwoJCQkgKiAgQGRlZmF1bHQgPGk+RW1wdHkgc3RyaW5nIC0gaS5lLiBkaXNhYmxlZDwvaT4KCQkJICoKCQkJICogIEBkdG9wdCBMYW5ndWFnZQoJCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxhbmd1YWdlLnVybAoJCQkgKgoJCQkgKiAgQGV4YW1wbGUKCQkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJCSAqICAgICAgICAibGFuZ3VhZ2UiOiB7CgkJCSAqICAgICAgICAgICJ1cmwiOiAiaHR0cDovL3d3dy5zcHJ5bWVkaWEuY28udWsvZGF0YVRhYmxlcy9sYW5nLnR4dCIKCQkJICogICAgICAgIH0KCQkJICogICAgICB9ICk7CgkJCSAqICAgIH0gKTsKCQkJICovCgkJCSJzVXJsIjogIiIsCgkKCQoJCQkvKioKCQkJICogVGV4dCBzaG93biBpbnNpZGUgdGhlIHRhYmxlIHJlY29yZHMgd2hlbiB0aGUgaXMgbm8gaW5mb3JtYXRpb24gdG8gYmUKCQkJICogZGlzcGxheWVkIGFmdGVyIGZpbHRlcmluZy4gYGVtcHR5VGFibGVgIGlzIHNob3duIHdoZW4gdGhlcmUgaXMgc2ltcGx5IG5vCgkJCSAqIGluZm9ybWF0aW9uIGluIHRoZSB0YWJsZSBhdCBhbGwgKHJlZ2FyZGxlc3Mgb2YgZmlsdGVyaW5nKS4KCQkJICogIEB0eXBlIHN0cmluZwoJCQkgKiAgQGRlZmF1bHQgTm8gbWF0Y2hpbmcgcmVjb3JkcyBmb3VuZAoJCQkgKgoJCQkgKiAgQGR0b3B0IExhbmd1YWdlCgkJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMubGFuZ3VhZ2UuemVyb1JlY29yZHMKCQkJICoKCQkJICogIEBleGFtcGxlCgkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkgKiAgICAgICAgICAiemVyb1JlY29yZHMiOiAiTm8gcmVjb3JkcyB0byBkaXNwbGF5IgoJCQkgKiAgICAgICAgfQoJCQkgKiAgICAgIH0gKTsKCQkJICogICAgfSApOwoJCQkgKi8KCQkJInNaZXJvUmVjb3JkcyI6ICJObyBtYXRjaGluZyByZWNvcmRzIGZvdW5kIgoJCX0sCgkKCQoJCS8qKgoJCSAqIFRoaXMgcGFyYW1ldGVyIGFsbG93cyB5b3UgdG8gaGF2ZSBkZWZpbmUgdGhlIGdsb2JhbCBmaWx0ZXJpbmcgc3RhdGUgYXQKCQkgKiBpbml0aWFsaXNhdGlvbiB0aW1lLiBBcyBhbiBvYmplY3QgdGhlIGBzZWFyY2hgIHBhcmFtZXRlciBtdXN0IGJlCgkJICogZGVmaW5lZCwgYnV0IGFsbCBvdGhlciBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbC4gV2hlbiBgcmVnZXhgIGlzIHRydWUsCgkJICogdGhlIHNlYXJjaCBzdHJpbmcgd2lsbCBiZSB0cmVhdGVkIGFzIGEgcmVndWxhciBleHByZXNzaW9uLCB3aGVuIGZhbHNlCgkJICogKGRlZmF1bHQpIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBhIHN0cmFpZ2h0IHN0cmluZy4gV2hlbiBgc21hcnRgCgkJICogRGF0YVRhYmxlcyB3aWxsIHVzZSBpdCdzIHNtYXJ0IGZpbHRlcmluZyBtZXRob2RzICh0byB3b3JkIG1hdGNoIGF0CgkJICogYW55IHBvaW50IGluIHRoZSBkYXRhKSwgd2hlbiBmYWxzZSB0aGlzIHdpbGwgbm90IGJlIGRvbmUuCgkJICogIEBuYW1lc3BhY2UKCQkgKiAgQGV4dGVuZHMgRGF0YVRhYmxlLm1vZGVscy5vU2VhcmNoCgkJICoKCQkgKiAgQGR0b3B0IE9wdGlvbnMKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLnNlYXJjaAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInNlYXJjaCI6IHsic2VhcmNoIjogIkluaXRpYWwgc2VhcmNoIn0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICkKCQkgKi8KCQkib1NlYXJjaCI6ICQuZXh0ZW5kKCB7fSwgRGF0YVRhYmxlLm1vZGVscy5vU2VhcmNoICksCgkKCQoJCS8qKgoJCSAqIF9fRGVwcmVjYXRlZF9fIFRoZSBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IHRoaXMgcGFyYW1ldGVyIGhhcyBub3cgYmVlbgoJCSAqIHN1cGVyc2VkZWQgYnkgdGhhdCBwcm92aWRlZCB0aHJvdWdoIGBhamF4YCwgd2hpY2ggc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4KCQkgKgoJCSAqIEJ5IGRlZmF1bHQgRGF0YVRhYmxlcyB3aWxsIGxvb2sgZm9yIHRoZSBwcm9wZXJ0eSBgZGF0YWAgKG9yIGBhYURhdGFgIGZvcgoJCSAqIGNvbXBhdGliaWxpdHkgd2l0aCBEYXRhVGFibGVzIDEuOS0pIHdoZW4gb2J0YWluaW5nIGRhdGEgZnJvbSBhbiBBamF4CgkJICogc291cmNlIG9yIGZvciBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nIC0gdGhpcyBwYXJhbWV0ZXIgYWxsb3dzIHRoYXQKCQkgKiBwcm9wZXJ0eSB0byBiZSBjaGFuZ2VkLiBZb3UgY2FuIHVzZSBKYXZhc2NyaXB0IGRvdHRlZCBvYmplY3Qgbm90YXRpb24gdG8KCQkgKiBnZXQgYSBkYXRhIHNvdXJjZSBmb3IgbXVsdGlwbGUgbGV2ZWxzIG9mIG5lc3RpbmcuCgkJICogIEB0eXBlIHN0cmluZwoJCSAqICBAZGVmYXVsdCBkYXRhCgkJICoKCQkgKiAgQGR0b3B0IE9wdGlvbnMKCQkgKiAgQGR0b3B0IFNlcnZlci1zaWRlCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5hamF4RGF0YVByb3AKCQkgKgoJCSAqICBAZGVwcmVjYXRlZCAxLjEwLiBQbGVhc2UgdXNlIGBhamF4YCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IG5vdy4KCQkgKi8KCQkic0FqYXhEYXRhUHJvcCI6ICJkYXRhIiwKCQoJCgkJLyoqCgkJICogX19EZXByZWNhdGVkX18gVGhlIGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkgdGhpcyBwYXJhbWV0ZXIgaGFzIG5vdyBiZWVuCgkJICogc3VwZXJzZWRlZCBieSB0aGF0IHByb3ZpZGVkIHRocm91Z2ggYGFqYXhgLCB3aGljaCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgoJCSAqCgkJICogWW91IGNhbiBpbnN0cnVjdCBEYXRhVGFibGVzIHRvIGxvYWQgZGF0YSBmcm9tIGFuIGV4dGVybmFsCgkJICogc291cmNlIHVzaW5nIHRoaXMgcGFyYW1ldGVyICh1c2UgYURhdGEgaWYgeW91IHdhbnQgdG8gcGFzcyBkYXRhIGluIHlvdQoJCSAqIGFscmVhZHkgaGF2ZSkuIFNpbXBseSBwcm92aWRlIGEgdXJsIGEgSlNPTiBvYmplY3QgY2FuIGJlIG9idGFpbmVkIGZyb20uCgkJICogIEB0eXBlIHN0cmluZwoJCSAqICBAZGVmYXVsdCBudWxsCgkJICoKCQkgKiAgQGR0b3B0IE9wdGlvbnMKCQkgKiAgQGR0b3B0IFNlcnZlci1zaWRlCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5hamF4U291cmNlCgkJICoKCQkgKiAgQGRlcHJlY2F0ZWQgMS4xMC4gUGxlYXNlIHVzZSBgYWpheGAgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBub3cuCgkJICovCgkJInNBamF4U291cmNlIjogbnVsbCwKCQoJCgkJLyoqCgkJICogVGhpcyBpbml0aWFsaXNhdGlvbiB2YXJpYWJsZSBhbGxvd3MgeW91IHRvIHNwZWNpZnkgZXhhY3RseSB3aGVyZSBpbiB0aGUKCQkgKiBET00geW91IHdhbnQgRGF0YVRhYmxlcyB0byBpbmplY3QgdGhlIHZhcmlvdXMgY29udHJvbHMgaXQgYWRkcyB0byB0aGUgcGFnZQoJCSAqIChmb3IgZXhhbXBsZSB5b3UgbWlnaHQgd2FudCB0aGUgcGFnaW5hdGlvbiBjb250cm9scyBhdCB0aGUgdG9wIG9mIHRoZQoJCSAqIHRhYmxlKS4gRElWIGVsZW1lbnRzICh3aXRoIG9yIHdpdGhvdXQgYSBjdXN0b20gY2xhc3MpIGNhbiBhbHNvIGJlIGFkZGVkIHRvCgkJICogYWlkIHN0eWxpbmcuIFRoZSBmb2xsb3cgc3ludGF4IGlzIHVzZWQ6CgkJICogICA8dWw+CgkJICogICAgIDxsaT5UaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGFsbG93ZWQ6CgkJICogICAgICAgPHVsPgoJCSAqICAgICAgICAgPGxpPidsJyAtIExlbmd0aCBjaGFuZ2luZzwvbGk+CgkJICogICAgICAgICA8bGk+J2YnIC0gRmlsdGVyaW5nIGlucHV0PC9saT4KCQkgKiAgICAgICAgIDxsaT4ndCcgLSBUaGUgdGFibGUhPC9saT4KCQkgKiAgICAgICAgIDxsaT4naScgLSBJbmZvcm1hdGlvbjwvbGk+CgkJICogICAgICAgICA8bGk+J3AnIC0gUGFnaW5hdGlvbjwvbGk+CgkJICogICAgICAgICA8bGk+J3InIC0gcFJvY2Vzc2luZzwvbGk+CgkJICogICAgICAgPC91bD4KCQkgKiAgICAgPC9saT4KCQkgKiAgICAgPGxpPlRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSBhbGxvd2VkOgoJCSAqICAgICAgIDx1bD4KCQkgKiAgICAgICAgIDxsaT4nSCcgLSBqUXVlcnlVSSB0aGVtZSAiaGVhZGVyIiBjbGFzc2VzICgnZmctdG9vbGJhciB1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci10bCB1aS1jb3JuZXItdHIgdWktaGVscGVyLWNsZWFyZml4Jyk8L2xpPgoJCSAqICAgICAgICAgPGxpPidGJyAtIGpRdWVyeVVJIHRoZW1lICJmb290ZXIiIGNsYXNzZXMgKCdmZy10b29sYmFyIHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWJsIHVpLWNvcm5lci1iciB1aS1oZWxwZXItY2xlYXJmaXgnKTwvbGk+CgkJICogICAgICAgPC91bD4KCQkgKiAgICAgPC9saT4KCQkgKiAgICAgPGxpPlRoZSBmb2xsb3dpbmcgc3ludGF4IGlzIGV4cGVjdGVkOgoJCSAqICAgICAgIDx1bD4KCQkgKiAgICAgICAgIDxsaT4nJmx0OycgYW5kICcmZ3Q7JyAtIGRpdiBlbGVtZW50czwvbGk+CgkJICogICAgICAgICA8bGk+JyZsdDsiY2xhc3MiIGFuZCAnJmd0OycgLSBkaXYgd2l0aCBhIGNsYXNzPC9saT4KCQkgKiAgICAgICAgIDxsaT4nJmx0OyIjaWQiIGFuZCAnJmd0OycgLSBkaXYgd2l0aCBhbiBJRDwvbGk+CgkJICogICAgICAgPC91bD4KCQkgKiAgICAgPC9saT4KCQkgKiAgICAgPGxpPkV4YW1wbGVzOgoJCSAqICAgICAgIDx1bD4KCQkgKiAgICAgICAgIDxsaT4nJmx0OyJ3cmFwcGVyImZsaXB0Jmd0Oyc8L2xpPgoJCSAqICAgICAgICAgPGxpPicmbHQ7bGYmbHQ7dCZndDtpcCZndDsnPC9saT4KCQkgKiAgICAgICA8L3VsPgoJCSAqICAgICA8L2xpPgoJCSAqICAgPC91bD4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IGxmcnRpcCA8aT4od2hlbiBgalF1ZXJ5VUlgIGlzIGZhbHNlKTwvaT4gPGI+b3I8L2I+CgkJICogICAgPCJIImxmcj50PCJGImlwPiA8aT4od2hlbiBgalF1ZXJ5VUlgIGlzIHRydWUpPC9pPgoJCSAqCgkJICogIEBkdG9wdCBPcHRpb25zCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5kb20KCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJkb20iOiAnJmx0OyJ0b3AiaSZndDtydCZsdDsiYm90dG9tImZscCZndDsmbHQ7ImNsZWFyIiZndDsnCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJzRG9tIjogImxmcnRpcCIsCgkKCQoJCS8qKgoJCSAqIFNlYXJjaCBkZWxheSBvcHRpb24uIFRoaXMgd2lsbCB0aHJvdHRsZSBmdWxsIHRhYmxlIHNlYXJjaGVzIHRoYXQgdXNlIHRoZQoJCSAqIERhdGFUYWJsZXMgcHJvdmlkZWQgc2VhcmNoIGlucHV0IGVsZW1lbnQgKGl0IGRvZXMgbm90IGVmZmVjdCBjYWxscyB0bwoJCSAqIGBkdC1hcGkgc2VhcmNoKClgLCBwcm92aWRpbmcgYSBkZWxheSBiZWZvcmUgdGhlIHNlYXJjaCBpcyBtYWRlLgoJCSAqICBAdHlwZSBpbnRlZ2VyCgkJICogIEBkZWZhdWx0IDAKCQkgKgoJCSAqICBAZHRvcHQgT3B0aW9ucwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuc2VhcmNoRGVsYXkKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJzZWFyY2hEZWxheSI6IDIwMAoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKQoJCSAqLwoJCSJzZWFyY2hEZWxheSI6IG51bGwsCgkKCQoJCS8qKgoJCSAqIERhdGFUYWJsZXMgZmVhdHVyZXMgc2l4IGRpZmZlcmVudCBidWlsdC1pbiBvcHRpb25zIGZvciB0aGUgYnV0dG9ucyB0bwoJCSAqIGRpc3BsYXkgZm9yIHBhZ2luYXRpb24gY29udHJvbDoKCQkgKgoJCSAqICogYG51bWJlcnNgIC0gUGFnZSBudW1iZXIgYnV0dG9ucyBvbmx5CgkJICogKiBgc2ltcGxlYCAtICdQcmV2aW91cycgYW5kICdOZXh0JyBidXR0b25zIG9ubHkKCQkgKiAqICdzaW1wbGVfbnVtYmVyc2AgLSAnUHJldmlvdXMnIGFuZCAnTmV4dCcgYnV0dG9ucywgcGx1cyBwYWdlIG51bWJlcnMKCQkgKiAqIGBmdWxsYCAtICdGaXJzdCcsICdQcmV2aW91cycsICdOZXh0JyBhbmQgJ0xhc3QnIGJ1dHRvbnMKCQkgKiAqIGBmdWxsX251bWJlcnNgIC0gJ0ZpcnN0JywgJ1ByZXZpb3VzJywgJ05leHQnIGFuZCAnTGFzdCcgYnV0dG9ucywgcGx1cyBwYWdlIG51bWJlcnMKCQkgKiAqIGBmaXJzdF9sYXN0X251bWJlcnNgIC0gJ0ZpcnN0JyBhbmQgJ0xhc3QnIGJ1dHRvbnMsIHBsdXMgcGFnZSBudW1iZXJzCgkJICogIAoJCSAqIEZ1cnRoZXIgbWV0aG9kcyBjYW4gYmUgYWRkZWQgdXNpbmcge0BsaW5rIERhdGFUYWJsZS5leHQub1BhZ2luYXRpb259LgoJCSAqICBAdHlwZSBzdHJpbmcKCQkgKiAgQGRlZmF1bHQgc2ltcGxlX251bWJlcnMKCQkgKgoJCSAqICBAZHRvcHQgT3B0aW9ucwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMucGFnaW5nVHlwZQoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInBhZ2luZ1R5cGUiOiAiZnVsbF9udW1iZXJzIgoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKQoJCSAqLwoJCSJzUGFnaW5hdGlvblR5cGUiOiAic2ltcGxlX251bWJlcnMiLAoJCgkKCQkvKioKCQkgKiBFbmFibGUgaG9yaXpvbnRhbCBzY3JvbGxpbmcuIFdoZW4gYSB0YWJsZSBpcyB0b28gd2lkZSB0byBmaXQgaW50byBhCgkJICogY2VydGFpbiBsYXlvdXQsIG9yIHlvdSBoYXZlIGEgbGFyZ2UgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIHRhYmxlLCB5b3UKCQkgKiBjYW4gZW5hYmxlIHgtc2Nyb2xsaW5nIHRvIHNob3cgdGhlIHRhYmxlIGluIGEgdmlld3BvcnQsIHdoaWNoIGNhbiBiZQoJCSAqIHNjcm9sbGVkLiBUaGlzIHByb3BlcnR5IGNhbiBiZSBgdHJ1ZWAgd2hpY2ggd2lsbCBhbGxvdyB0aGUgdGFibGUgdG8KCQkgKiBzY3JvbGwgaG9yaXpvbnRhbGx5IHdoZW4gbmVlZGVkLCBvciBhbnkgQ1NTIHVuaXQsIG9yIGEgbnVtYmVyIChpbiB3aGljaAoJCSAqIGNhc2UgaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGEgcGl4ZWwgbWVhc3VyZW1lbnQpLiBTZXR0aW5nIGFzIHNpbXBseSBgdHJ1ZWAKCQkgKiBpcyByZWNvbW1lbmRlZC4KCQkgKiAgQHR5cGUgYm9vbGVhbnxzdHJpbmcKCQkgKiAgQGRlZmF1bHQgPGk+Ymxhbmsgc3RyaW5nIC0gaS5lLiBkaXNhYmxlZDwvaT4KCQkgKgoJCSAqICBAZHRvcHQgRmVhdHVyZXMKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLnNjcm9sbFgKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJzY3JvbGxYIjogdHJ1ZSwKCQkgKiAgICAgICAgInNjcm9sbENvbGxhcHNlIjogdHJ1ZQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkic1Njcm9sbFgiOiAiIiwKCQoJCgkJLyoqCgkJICogVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBmb3JjZSBhIERhdGFUYWJsZSB0byB1c2UgbW9yZSB3aWR0aCB0aGFuIGl0CgkJICogbWlnaHQgb3RoZXJ3aXNlIGRvIHdoZW4geC1zY3JvbGxpbmcgaXMgZW5hYmxlZC4gRm9yIGV4YW1wbGUgaWYgeW91IGhhdmUgYQoJCSAqIHRhYmxlIHdoaWNoIHJlcXVpcmVzIHRvIGJlIHdlbGwgc3BhY2VkLCB0aGlzIHBhcmFtZXRlciBpcyB1c2VmdWwgZm9yCgkJICogIm92ZXItc2l6aW5nIiB0aGUgdGFibGUsIGFuZCB0aHVzIGZvcmNpbmcgc2Nyb2xsaW5nLiBUaGlzIHByb3BlcnR5IGNhbiBieQoJCSAqIGFueSBDU1MgdW5pdCwgb3IgYSBudW1iZXIgKGluIHdoaWNoIGNhc2UgaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGEgcGl4ZWwKCQkgKiBtZWFzdXJlbWVudCkuCgkJICogIEB0eXBlIHN0cmluZwoJCSAqICBAZGVmYXVsdCA8aT5ibGFuayBzdHJpbmcgLSBpLmUuIGRpc2FibGVkPC9pPgoJCSAqCgkJICogIEBkdG9wdCBPcHRpb25zCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5zY3JvbGxYSW5uZXIKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJzY3JvbGxYIjogIjEwMCUiLAoJCSAqICAgICAgICAic2Nyb2xsWElubmVyIjogIjExMCUiCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJzU2Nyb2xsWElubmVyIjogIiIsCgkKCQoJCS8qKgoJCSAqIEVuYWJsZSB2ZXJ0aWNhbCBzY3JvbGxpbmcuIFZlcnRpY2FsIHNjcm9sbGluZyB3aWxsIGNvbnN0cmFpbiB0aGUgRGF0YVRhYmxlCgkJICogdG8gdGhlIGdpdmVuIGhlaWdodCwgYW5kIGVuYWJsZSBzY3JvbGxpbmcgZm9yIGFueSBkYXRhIHdoaWNoIG92ZXJmbG93cyB0aGUKCQkgKiBjdXJyZW50IHZpZXdwb3J0LiBUaGlzIGNhbiBiZSB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRvIHBhZ2luZyB0byBkaXNwbGF5CgkJICogYSBsb3Qgb2YgZGF0YSBpbiBhIHNtYWxsIGFyZWEgKGFsdGhvdWdoIHBhZ2luZyBhbmQgc2Nyb2xsaW5nIGNhbiBib3RoIGJlCgkJICogZW5hYmxlZCBhdCB0aGUgc2FtZSB0aW1lKS4gVGhpcyBwcm9wZXJ0eSBjYW4gYmUgYW55IENTUyB1bml0LCBvciBhIG51bWJlcgoJCSAqIChpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBhIHBpeGVsIG1lYXN1cmVtZW50KS4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IDxpPmJsYW5rIHN0cmluZyAtIGkuZS4gZGlzYWJsZWQ8L2k+CgkJICoKCQkgKiAgQGR0b3B0IEZlYXR1cmVzCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5zY3JvbGxZCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAic2Nyb2xsWSI6ICIyMDBweCIsCgkJICogICAgICAgICJwYWdpbmF0ZSI6IGZhbHNlCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJzU2Nyb2xsWSI6ICIiLAoJCgkKCQkvKioKCQkgKiBfX0RlcHJlY2F0ZWRfXyBUaGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSB0aGlzIHBhcmFtZXRlciBoYXMgbm93IGJlZW4KCQkgKiBzdXBlcnNlZGVkIGJ5IHRoYXQgcHJvdmlkZWQgdGhyb3VnaCBgYWpheGAsIHdoaWNoIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCgkJICoKCQkgKiBTZXQgdGhlIEhUVFAgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBtYWtlIHRoZSBBamF4IGNhbGwgZm9yIHNlcnZlci1zaWRlCgkJICogcHJvY2Vzc2luZyBvciBBamF4IHNvdXJjZWQgZGF0YS4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IEdFVAoJCSAqCgkJICogIEBkdG9wdCBPcHRpb25zCgkJICogIEBkdG9wdCBTZXJ2ZXItc2lkZQoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuc2VydmVyTWV0aG9kCgkJICoKCQkgKiAgQGRlcHJlY2F0ZWQgMS4xMC4gUGxlYXNlIHVzZSBgYWpheGAgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBub3cuCgkJICovCgkJInNTZXJ2ZXJNZXRob2QiOiAiR0VUIiwKCQoJCgkJLyoqCgkJICogRGF0YVRhYmxlcyBtYWtlcyB1c2Ugb2YgcmVuZGVyZXJzIHdoZW4gZGlzcGxheWluZyBIVE1MIGVsZW1lbnRzIGZvcgoJCSAqIGEgdGFibGUuIFRoZXNlIHJlbmRlcmVycyBjYW4gYmUgYWRkZWQgb3IgbW9kaWZpZWQgYnkgcGx1Zy1pbnMgdG8KCQkgKiBnZW5lcmF0ZSBzdWl0YWJsZSBtYXJrLXVwIGZvciBhIHNpdGUuIEZvciBleGFtcGxlIHRoZSBCb290c3RyYXAKCQkgKiBpbnRlZ3JhdGlvbiBwbHVnLWluIGZvciBEYXRhVGFibGVzIHVzZXMgYSBwYWdpbmcgYnV0dG9uIHJlbmRlcmVyIHRvCgkJICogZGlzcGxheSBwYWdpbmF0aW9uIGJ1dHRvbnMgaW4gdGhlIG1hcmstdXAgcmVxdWlyZWQgYnkgQm9vdHN0cmFwLgoJCSAqCgkJICogRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlbmRlcmVycyBhdmFpbGFibGUgc2VlCgkJICogRGF0YVRhYmxlLmV4dC5yZW5kZXJlcgoJCSAqICBAdHlwZSBzdHJpbmd8b2JqZWN0CgkJICogIEBkZWZhdWx0IG51bGwKCQkgKgoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMucmVuZGVyZXIKCQkgKgoJCSAqLwoJCSJyZW5kZXJlciI6IG51bGwsCgkKCQoJCS8qKgoJCSAqIFNldCB0aGUgZGF0YSBwcm9wZXJ0eSBuYW1lIHRoYXQgRGF0YVRhYmxlcyBzaG91bGQgdXNlIHRvIGdldCBhIHJvdydzIGlkCgkJICogdG8gc2V0IGFzIHRoZSBgaWRgIHByb3BlcnR5IGluIHRoZSBub2RlLgoJCSAqICBAdHlwZSBzdHJpbmcKCQkgKiAgQGRlZmF1bHQgRFRfUm93SWQKCQkgKgoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMucm93SWQKCQkgKi8KCQkicm93SWQiOiAiRFRfUm93SWQiCgl9OwoJCglfZm5IdW5nYXJpYW5NYXAoIERhdGFUYWJsZS5kZWZhdWx0cyApOwoJCgkKCQoJLyoKCSAqIERldmVsb3BlciBub3RlIC0gU2VlIG5vdGUgaW4gbW9kZWwuZGVmYXVsdHMuanMgYWJvdXQgdGhlIHVzZSBvZiBIdW5nYXJpYW4KCSAqIG5vdGF0aW9uIGFuZCBjYW1lbCBjYXNlLgoJICovCgkKCS8qKgoJICogQ29sdW1uIG9wdGlvbnMgdGhhdCBjYW4gYmUgZ2l2ZW4gdG8gRGF0YVRhYmxlcyBhdCBpbml0aWFsaXNhdGlvbiB0aW1lLgoJICogIEBuYW1lc3BhY2UKCSAqLwoJRGF0YVRhYmxlLmRlZmF1bHRzLmNvbHVtbiA9IHsKCQkvKioKCQkgKiBEZWZpbmUgd2hpY2ggY29sdW1uKHMpIGFuIG9yZGVyIHdpbGwgb2NjdXIgb24gZm9yIHRoaXMgY29sdW1uLiBUaGlzCgkJICogYWxsb3dzIGEgY29sdW1uJ3Mgb3JkZXJpbmcgdG8gdGFrZSBtdWx0aXBsZSBjb2x1bW5zIGludG8gYWNjb3VudCB3aGVuCgkJICogZG9pbmcgYSBzb3J0IG9yIHVzZSB0aGUgZGF0YSBmcm9tIGEgZGlmZmVyZW50IGNvbHVtbi4gRm9yIGV4YW1wbGUgZmlyc3QKCQkgKiBuYW1lIC8gbGFzdCBuYW1lIGNvbHVtbnMgbWFrZSBzZW5zZSB0byBkbyBhIG11bHRpLWNvbHVtbiBzb3J0IG92ZXIgdGhlCgkJICogdHdvIGNvbHVtbnMuCgkJICogIEB0eXBlIGFycmF5fGludAoJCSAqICBAZGVmYXVsdCBudWxsIDxpPlRha2VzIHRoZSB2YWx1ZSBvZiB0aGUgY29sdW1uIGluZGV4IGF1dG9tYXRpY2FsbHk8L2k+CgkJICoKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmNvbHVtbi5vcmRlckRhdGEKCQkgKiAgQGR0b3B0IENvbHVtbnMKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFVzaW5nIGBjb2x1bW5EZWZzYAoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJjb2x1bW5EZWZzIjogWwoJCSAqICAgICAgICAgIHsgIm9yZGVyRGF0YSI6IFsgMCwgMSBdLCAidGFyZ2V0cyI6IFsgMCBdIH0sCgkJICogICAgICAgICAgeyAib3JkZXJEYXRhIjogWyAxLCAwIF0sICJ0YXJnZXRzIjogWyAxIF0gfSwKCQkgKiAgICAgICAgICB7ICJvcmRlckRhdGEiOiAyLCAidGFyZ2V0cyI6IFsgMiBdIH0KCQkgKiAgICAgICAgXQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFVzaW5nIGBjb2x1bW5zYAoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJjb2x1bW5zIjogWwoJCSAqICAgICAgICAgIHsgIm9yZGVyRGF0YSI6IFsgMCwgMSBdIH0sCgkJICogICAgICAgICAgeyAib3JkZXJEYXRhIjogWyAxLCAwIF0gfSwKCQkgKiAgICAgICAgICB7ICJvcmRlckRhdGEiOiAyIH0sCgkJICogICAgICAgICAgbnVsbCwKCQkgKiAgICAgICAgICBudWxsCgkJICogICAgICAgIF0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImFEYXRhU29ydCI6IG51bGwsCgkJImlEYXRhU29ydCI6IC0xLAoJCgkKCQkvKioKCQkgKiBZb3UgY2FuIGNvbnRyb2wgdGhlIGRlZmF1bHQgb3JkZXJpbmcgZGlyZWN0aW9uLCBhbmQgZXZlbiBhbHRlciB0aGUKCQkgKiBiZWhhdmlvdXIgb2YgdGhlIHNvcnQgaGFuZGxlciAoaS5lLiBvbmx5IGFsbG93IGFzY2VuZGluZyBvcmRlcmluZyBldGMpCgkJICogdXNpbmcgdGhpcyBwYXJhbWV0ZXIuCgkJICogIEB0eXBlIGFycmF5CgkJICogIEBkZWZhdWx0IFsgJ2FzYycsICdkZXNjJyBdCgkJICoKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmNvbHVtbi5vcmRlclNlcXVlbmNlCgkJICogIEBkdG9wdCBDb2x1bW5zCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBVc2luZyBgY29sdW1uRGVmc2AKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiY29sdW1uRGVmcyI6IFsKCQkgKiAgICAgICAgICB7ICJvcmRlclNlcXVlbmNlIjogWyAiYXNjIiBdLCAidGFyZ2V0cyI6IFsgMSBdIH0sCgkJICogICAgICAgICAgeyAib3JkZXJTZXF1ZW5jZSI6IFsgImRlc2MiLCAiYXNjIiwgImFzYyIgXSwgInRhcmdldHMiOiBbIDIgXSB9LAoJCSAqICAgICAgICAgIHsgIm9yZGVyU2VxdWVuY2UiOiBbICJkZXNjIiBdLCAidGFyZ2V0cyI6IFsgMyBdIH0KCQkgKiAgICAgICAgXQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFVzaW5nIGBjb2x1bW5zYAoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJjb2x1bW5zIjogWwoJCSAqICAgICAgICAgIG51bGwsCgkJICogICAgICAgICAgeyAib3JkZXJTZXF1ZW5jZSI6IFsgImFzYyIgXSB9LAoJCSAqICAgICAgICAgIHsgIm9yZGVyU2VxdWVuY2UiOiBbICJkZXNjIiwgImFzYyIsICJhc2MiIF0gfSwKCQkgKiAgICAgICAgICB7ICJvcmRlclNlcXVlbmNlIjogWyAiZGVzYyIgXSB9LAoJCSAqICAgICAgICAgIG51bGwKCQkgKiAgICAgICAgXQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiYXNTb3J0aW5nIjogWyAnYXNjJywgJ2Rlc2MnIF0sCgkKCQoJCS8qKgoJCSAqIEVuYWJsZSBvciBkaXNhYmxlIGZpbHRlcmluZyBvbiB0aGUgZGF0YSBpbiB0aGlzIGNvbHVtbi4KCQkgKiAgQHR5cGUgYm9vbGVhbgoJCSAqICBAZGVmYXVsdCB0cnVlCgkJICoKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmNvbHVtbi5zZWFyY2hhYmxlCgkJICogIEBkdG9wdCBDb2x1bW5zCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBVc2luZyBgY29sdW1uRGVmc2AKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiY29sdW1uRGVmcyI6IFsKCQkgKiAgICAgICAgICB7ICJzZWFyY2hhYmxlIjogZmFsc2UsICJ0YXJnZXRzIjogWyAwIF0gfQoJCSAqICAgICAgICBdIH0gKTsKCQkgKiAgICB9ICk7CgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBVc2luZyBgY29sdW1uc2AKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiY29sdW1ucyI6IFsKCQkgKiAgICAgICAgICB7ICJzZWFyY2hhYmxlIjogZmFsc2UgfSwKCQkgKiAgICAgICAgICBudWxsLAoJCSAqICAgICAgICAgIG51bGwsCgkJICogICAgICAgICAgbnVsbCwKCQkgKiAgICAgICAgICBudWxsCgkJICogICAgICAgIF0gfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiYlNlYXJjaGFibGUiOiB0cnVlLAoJCgkKCQkvKioKCQkgKiBFbmFibGUgb3IgZGlzYWJsZSBvcmRlcmluZyBvbiB0aGlzIGNvbHVtbi4KCQkgKiAgQHR5cGUgYm9vbGVhbgoJCSAqICBAZGVmYXVsdCB0cnVlCgkJICoKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmNvbHVtbi5vcmRlcmFibGUKCQkgKiAgQGR0b3B0IENvbHVtbnMKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFVzaW5nIGBjb2x1bW5EZWZzYAoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJjb2x1bW5EZWZzIjogWwoJCSAqICAgICAgICAgIHsgIm9yZGVyYWJsZSI6IGZhbHNlLCAidGFyZ2V0cyI6IFsgMCBdIH0KCQkgKiAgICAgICAgXSB9ICk7CgkJICogICAgfSApOwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgLy8gVXNpbmcgYGNvbHVtbnNgCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImNvbHVtbnMiOiBbCgkJICogICAgICAgICAgeyAib3JkZXJhYmxlIjogZmFsc2UgfSwKCQkgKiAgICAgICAgICBudWxsLAoJCSAqICAgICAgICAgIG51bGwsCgkJICogICAgICAgICAgbnVsbCwKCQkgKiAgICAgICAgICBudWxsCgkJICogICAgICAgIF0gfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiYlNvcnRhYmxlIjogdHJ1ZSwKCQoJCgkJLyoqCgkJICogRW5hYmxlIG9yIGRpc2FibGUgdGhlIGRpc3BsYXkgb2YgdGhpcyBjb2x1bW4uCgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKiAgQGRlZmF1bHQgdHJ1ZQoJCSAqCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5jb2x1bW4udmlzaWJsZQoJCSAqICBAZHRvcHQgQ29sdW1ucwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgLy8gVXNpbmcgYGNvbHVtbkRlZnNgCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImNvbHVtbkRlZnMiOiBbCgkJICogICAgICAgICAgeyAidmlzaWJsZSI6IGZhbHNlLCAidGFyZ2V0cyI6IFsgMCBdIH0KCQkgKiAgICAgICAgXSB9ICk7CgkJICogICAgfSApOwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgLy8gVXNpbmcgYGNvbHVtbnNgCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImNvbHVtbnMiOiBbCgkJICogICAgICAgICAgeyAidmlzaWJsZSI6IGZhbHNlIH0sCgkJICogICAgICAgICAgbnVsbCwKCQkgKiAgICAgICAgICBudWxsLAoJCSAqICAgICAgICAgIG51bGwsCgkJICogICAgICAgICAgbnVsbAoJCSAqICAgICAgICBdIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImJWaXNpYmxlIjogdHJ1ZSwKCQoJCgkJLyoqCgkJICogRGV2ZWxvcGVyIGRlZmluYWJsZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuZXZlciBhIGNlbGwgaXMgY3JlYXRlZCAoQWpheCBzb3VyY2UsCgkJICogZXRjKSBvciBwcm9jZXNzZWQgZm9yIGlucHV0IChET00gc291cmNlKS4gVGhpcyBjYW4gYmUgdXNlZCBhcyBhIGNvbXBsaW1lbnQgdG8gbVJlbmRlcgoJCSAqIGFsbG93aW5nIHlvdSB0byBtb2RpZnkgdGhlIERPTSBlbGVtZW50IChhZGQgYmFja2dyb3VuZCBjb2xvdXIgZm9yIGV4YW1wbGUpIHdoZW4gdGhlCgkJICogZWxlbWVudCBpcyBhdmFpbGFibGUuCgkJICogIEB0eXBlIGZ1bmN0aW9uCgkJICogIEBwYXJhbSB7ZWxlbWVudH0gdGQgVGhlIFREIG5vZGUgdGhhdCBoYXMgYmVlbiBjcmVhdGVkCgkJICogIEBwYXJhbSB7Kn0gY2VsbERhdGEgVGhlIERhdGEgZm9yIHRoZSBjZWxsCgkJICogIEBwYXJhbSB7YXJyYXl8b2JqZWN0fSByb3dEYXRhIFRoZSBkYXRhIGZvciB0aGUgd2hvbGUgcm93CgkJICogIEBwYXJhbSB7aW50fSByb3cgVGhlIHJvdyBpbmRleCBmb3IgdGhlIGFvRGF0YSBkYXRhIHN0b3JlCgkJICogIEBwYXJhbSB7aW50fSBjb2wgVGhlIGNvbHVtbiBpbmRleCBmb3IgYW9Db2x1bW5zCgkJICoKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmNvbHVtbi5jcmVhdGVkQ2VsbAoJCSAqICBAZHRvcHQgQ29sdW1ucwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImNvbHVtbkRlZnMiOiBbIHsKCQkgKiAgICAgICAgICAidGFyZ2V0cyI6IFszXSwKCQkgKiAgICAgICAgICAiY3JlYXRlZENlbGwiOiBmdW5jdGlvbiAodGQsIGNlbGxEYXRhLCByb3dEYXRhLCByb3csIGNvbCkgewoJCSAqICAgICAgICAgICAgaWYgKCBjZWxsRGF0YSA9PSAiMS43IiApIHsKCQkgKiAgICAgICAgICAgICAgJCh0ZCkuY3NzKCdjb2xvcicsICdibHVlJykKCQkgKiAgICAgICAgICAgIH0KCQkgKiAgICAgICAgICB9CgkJICogICAgICAgIH0gXQoJCSAqICAgICAgfSk7CgkJICogICAgfSApOwoJCSAqLwoJCSJmbkNyZWF0ZWRDZWxsIjogbnVsbCwKCQoJCgkJLyoqCgkJICogVGhpcyBwYXJhbWV0ZXIgaGFzIGJlZW4gcmVwbGFjZWQgYnkgYGRhdGFgIGluIERhdGFUYWJsZXMgdG8gZW5zdXJlIG5hbWluZwoJCSAqIGNvbnNpc3RlbmN5LiBgZGF0YVByb3BgIGNhbiBzdGlsbCBiZSB1c2VkLCBhcyB0aGVyZSBpcyBiYWNrd2FyZHMKCQkgKiBjb21wYXRpYmlsaXR5IGluIERhdGFUYWJsZXMgZm9yIHRoaXMgb3B0aW9uLCBidXQgaXQgaXMgc3Ryb25nbHkKCQkgKiByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgYGRhdGFgIGluIHByZWZlcmVuY2UgdG8gYGRhdGFQcm9wYC4KCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmNvbHVtbi5kYXRhUHJvcAoJCSAqLwoJCgkKCQkvKioKCQkgKiBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHRvIHJlYWQgZGF0YSBmcm9tIGFueSBkYXRhIHNvdXJjZSBwcm9wZXJ0eSwKCQkgKiBpbmNsdWRpbmcgZGVlcGx5IG5lc3RlZCBvYmplY3RzIC8gcHJvcGVydGllcy4gYGRhdGFgIGNhbiBiZSBnaXZlbiBpbiBhCgkJICogbnVtYmVyIG9mIGRpZmZlcmVudCB3YXlzIHdoaWNoIGVmZmVjdCBpdHMgYmVoYXZpb3VyOgoJCSAqCgkJICogKiBgaW50ZWdlcmAgLSB0cmVhdGVkIGFzIGFuIGFycmF5IGluZGV4IGZvciB0aGUgZGF0YSBzb3VyY2UuIFRoaXMgaXMgdGhlCgkJICogICBkZWZhdWx0IHRoYXQgRGF0YVRhYmxlcyB1c2VzIChpbmNyZW1lbnRhbGx5IGluY3JlYXNlZCBmb3IgZWFjaCBjb2x1bW4pLgoJCSAqICogYHN0cmluZ2AgLSByZWFkIGFuIG9iamVjdCBwcm9wZXJ0eSBmcm9tIHRoZSBkYXRhIHNvdXJjZS4gVGhlcmUgYXJlCgkJICogICB0aHJlZSAnc3BlY2lhbCcgb3B0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIGluIHRoZSBzdHJpbmcgdG8gYWx0ZXIgaG93CgkJICogICBEYXRhVGFibGVzIHJlYWRzIHRoZSBkYXRhIGZyb20gdGhlIHNvdXJjZSBvYmplY3Q6CgkJICogICAgKiBgLmAgLSBEb3R0ZWQgSmF2YXNjcmlwdCBub3RhdGlvbi4gSnVzdCBhcyB5b3UgdXNlIGEgYC5gIGluCgkJICogICAgICBKYXZhc2NyaXB0IHRvIHJlYWQgZnJvbSBuZXN0ZWQgb2JqZWN0cywgc28gdG8gY2FuIHRoZSBvcHRpb25zCgkJICogICAgICBzcGVjaWZpZWQgaW4gYGRhdGFgLiBGb3IgZXhhbXBsZTogYGJyb3dzZXIudmVyc2lvbmAgb3IKCQkgKiAgICAgIGBicm93c2VyLm5hbWVgLiBJZiB5b3VyIG9iamVjdCBwYXJhbWV0ZXIgbmFtZSBjb250YWlucyBhIHBlcmlvZCwgdXNlCgkJICogICAgICBgXFxgIHRvIGVzY2FwZSBpdCAtIGkuZS4gYGZpcnN0XFwubmFtZWAuCgkJICogICAgKiBgW11gIC0gQXJyYXkgbm90YXRpb24uIERhdGFUYWJsZXMgY2FuIGF1dG9tYXRpY2FsbHkgY29tYmluZSBkYXRhCgkJICogICAgICBmcm9tIGFuZCBhcnJheSBzb3VyY2UsIGpvaW5pbmcgdGhlIGRhdGEgd2l0aCB0aGUgY2hhcmFjdGVycyBwcm92aWRlZAoJCSAqICAgICAgYmV0d2VlbiB0aGUgdHdvIGJyYWNrZXRzLiBGb3IgZXhhbXBsZTogYG5hbWVbLCBdYCB3b3VsZCBwcm92aWRlIGEKCQkgKiAgICAgIGNvbW1hLXNwYWNlIHNlcGFyYXRlZCBsaXN0IGZyb20gdGhlIHNvdXJjZSBhcnJheS4gSWYgbm8gY2hhcmFjdGVycwoJCSAqICAgICAgYXJlIHByb3ZpZGVkIGJldHdlZW4gdGhlIGJyYWNrZXRzLCB0aGUgb3JpZ2luYWwgYXJyYXkgc291cmNlIGlzCgkJICogICAgICByZXR1cm5lZC4KCQkgKiAgICAqIGAoKWAgLSBGdW5jdGlvbiBub3RhdGlvbi4gQWRkaW5nIGAoKWAgdG8gdGhlIGVuZCBvZiBhIHBhcmFtZXRlciB3aWxsCgkJICogICAgICBleGVjdXRlIGEgZnVuY3Rpb24gb2YgdGhlIG5hbWUgZ2l2ZW4uIEZvciBleGFtcGxlOiBgYnJvd3NlcigpYCBmb3IgYQoJCSAqICAgICAgc2ltcGxlIGZ1bmN0aW9uIG9uIHRoZSBkYXRhIHNvdXJjZSwgYGJyb3dzZXIudmVyc2lvbigpYCBmb3IgYQoJCSAqICAgICAgZnVuY3Rpb24gaW4gYSBuZXN0ZWQgcHJvcGVydHkgb3IgZXZlbiBgYnJvd3NlcigpLnZlcnNpb25gIHRvIGdldCBhbgoJCSAqICAgICAgb2JqZWN0IHByb3BlcnR5IGlmIHRoZSBmdW5jdGlvbiBjYWxsZWQgcmV0dXJucyBhbiBvYmplY3QuIE5vdGUgdGhhdAoJCSAqICAgICAgZnVuY3Rpb24gbm90YXRpb24gaXMgcmVjb21tZW5kZWQgZm9yIHVzZSBpbiBgcmVuZGVyYCByYXRoZXIgdGhhbgoJCSAqICAgICAgYGRhdGFgIGFzIGl0IGlzIG11Y2ggc2ltcGxlciB0byB1c2UgYXMgYSByZW5kZXJlci4KCQkgKiAqIGBudWxsYCAtIHVzZSB0aGUgb3JpZ2luYWwgZGF0YSBzb3VyY2UgZm9yIHRoZSByb3cgcmF0aGVyIHRoYW4gcGx1Y2tpbmcKCQkgKiAgIGRhdGEgZGlyZWN0bHkgZnJvbSBpdC4gVGhpcyBhY3Rpb24gaGFzIGVmZmVjdHMgb24gdHdvIG90aGVyCgkJICogICBpbml0aWFsaXNhdGlvbiBvcHRpb25zOgoJCSAqICAgICogYGRlZmF1bHRDb250ZW50YCAtIFdoZW4gbnVsbCBpcyBnaXZlbiBhcyB0aGUgYGRhdGFgIG9wdGlvbiBhbmQKCQkgKiAgICAgIGBkZWZhdWx0Q29udGVudGAgaXMgc3BlY2lmaWVkIGZvciB0aGUgY29sdW1uLCB0aGUgdmFsdWUgZGVmaW5lZCBieQoJCSAqICAgICAgYGRlZmF1bHRDb250ZW50YCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBjZWxsLgoJCSAqICAgICogYHJlbmRlcmAgLSBXaGVuIG51bGwgaXMgdXNlZCBmb3IgdGhlIGBkYXRhYCBvcHRpb24gYW5kIHRoZSBgcmVuZGVyYAoJCSAqICAgICAgb3B0aW9uIGlzIHNwZWNpZmllZCBmb3IgdGhlIGNvbHVtbiwgdGhlIHdob2xlIGRhdGEgc291cmNlIGZvciB0aGUKCQkgKiAgICAgIHJvdyBpcyB1c2VkIGZvciB0aGUgcmVuZGVyZXIuCgkJICogKiBgZnVuY3Rpb25gIC0gdGhlIGZ1bmN0aW9uIGdpdmVuIHdpbGwgYmUgZXhlY3V0ZWQgd2hlbmV2ZXIgRGF0YVRhYmxlcwoJCSAqICAgbmVlZHMgdG8gc2V0IG9yIGdldCB0aGUgZGF0YSBmb3IgYSBjZWxsIGluIHRoZSBjb2x1bW4uIFRoZSBmdW5jdGlvbgoJCSAqICAgdGFrZXMgdGhyZWUgcGFyYW1ldGVyczoKCQkgKiAgICAqIFBhcmFtZXRlcnM6CgkJICogICAgICAqIGB7YXJyYXl8b2JqZWN0fWAgVGhlIGRhdGEgc291cmNlIGZvciB0aGUgcm93CgkJICogICAgICAqIGB7c3RyaW5nfWAgVGhlIHR5cGUgY2FsbCBkYXRhIHJlcXVlc3RlZCAtIHRoaXMgd2lsbCBiZSAnc2V0JyB3aGVuCgkJICogICAgICAgIHNldHRpbmcgZGF0YSBvciAnZmlsdGVyJywgJ2Rpc3BsYXknLCAndHlwZScsICdzb3J0JyBvciB1bmRlZmluZWQKCQkgKiAgICAgICAgd2hlbiBnYXRoZXJpbmcgZGF0YS4gTm90ZSB0aGF0IHdoZW4gYHVuZGVmaW5lZGAgaXMgZ2l2ZW4gZm9yIHRoZQoJCSAqICAgICAgICB0eXBlIERhdGFUYWJsZXMgZXhwZWN0cyB0byBnZXQgdGhlIHJhdyBkYXRhIGZvciB0aGUgb2JqZWN0IGJhY2s8CgkJICogICAgICAqIGB7Kn1gIERhdGEgdG8gc2V0IHdoZW4gdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgJ3NldCcuCgkJICogICAgKiBSZXR1cm46CgkJICogICAgICAqIFRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGUgZnVuY3Rpb24gaXMgbm90IHJlcXVpcmVkIHdoZW4gJ3NldCcgaXMKCQkgKiAgICAgICAgdGhlIHR5cGUgb2YgY2FsbCwgYnV0IG90aGVyd2lzZSB0aGUgcmV0dXJuIGlzIHdoYXQgd2lsbCBiZSB1c2VkCgkJICogICAgICAgIGZvciB0aGUgZGF0YSByZXF1ZXN0ZWQuCgkJICoKCQkgKiBOb3RlIHRoYXQgYGRhdGFgIGlzIGEgZ2V0dGVyIGFuZCBzZXR0ZXIgb3B0aW9uLiBJZiB5b3UganVzdCByZXF1aXJlCgkJICogZm9ybWF0dGluZyBvZiBkYXRhIGZvciBvdXRwdXQsIHlvdSB3aWxsIGxpa2VseSB3YW50IHRvIHVzZSBgcmVuZGVyYCB3aGljaAoJCSAqIGlzIHNpbXBseSBhIGdldHRlciBhbmQgdGh1cyBzaW1wbGVyIHRvIHVzZS4KCQkgKgoJCSAqIE5vdGUgdGhhdCBwcmlvciB0byBEYXRhVGFibGVzIDEuOS4yIGBkYXRhYCB3YXMgY2FsbGVkIGBtRGF0YVByb3BgLiBUaGUKCQkgKiBuYW1lIGNoYW5nZSByZWZsZWN0cyB0aGUgZmxleGliaWxpdHkgb2YgdGhpcyBwcm9wZXJ0eSBhbmQgaXMgY29uc2lzdGVudAoJCSAqIHdpdGggdGhlIG5hbWluZyBvZiBtUmVuZGVyLiBJZiAnbURhdGFQcm9wJyBpcyBnaXZlbiwgdGhlbiBpdCB3aWxsIHN0aWxsCgkJICogYmUgdXNlZCBieSBEYXRhVGFibGVzLCBhcyBpdCBhdXRvbWF0aWNhbGx5IG1hcHMgdGhlIG9sZCBuYW1lIHRvIHRoZSBuZXcKCQkgKiBpZiByZXF1aXJlZC4KCQkgKgoJCSAqICBAdHlwZSBzdHJpbmd8aW50fGZ1bmN0aW9ufG51bGwKCQkgKiAgQGRlZmF1bHQgbnVsbCA8aT5Vc2UgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkIGNvbHVtbiBpbmRleDwvaT4KCQkgKgoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuY29sdW1uLmRhdGEKCQkgKiAgQGR0b3B0IENvbHVtbnMKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFJlYWQgdGFibGUgZGF0YSBmcm9tIG9iamVjdHMKCQkgKiAgICAvLyBKU09OIHN0cnVjdHVyZSBmb3IgZWFjaCByb3c6CgkJICogICAgLy8gICB7CgkJICogICAgLy8gICAgICAiZW5naW5lIjoge3ZhbHVlfSwKCQkgKiAgICAvLyAgICAgICJicm93c2VyIjoge3ZhbHVlfSwKCQkgKiAgICAvLyAgICAgICJwbGF0Zm9ybSI6IHt2YWx1ZX0sCgkJICogICAgLy8gICAgICAidmVyc2lvbiI6IHt2YWx1ZX0sCgkJICogICAgLy8gICAgICAiZ3JhZGUiOiB7dmFsdWV9CgkJICogICAgLy8gICB9CgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImFqYXhTb3VyY2UiOiAic291cmNlcy9vYmplY3RzLnR4dCIsCgkJICogICAgICAgICJjb2x1bW5zIjogWwoJCSAqICAgICAgICAgIHsgImRhdGEiOiAiZW5naW5lIiB9LAoJCSAqICAgICAgICAgIHsgImRhdGEiOiAiYnJvd3NlciIgfSwKCQkgKiAgICAgICAgICB7ICJkYXRhIjogInBsYXRmb3JtIiB9LAoJCSAqICAgICAgICAgIHsgImRhdGEiOiAidmVyc2lvbiIgfSwKCQkgKiAgICAgICAgICB7ICJkYXRhIjogImdyYWRlIiB9CgkJICogICAgICAgIF0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBSZWFkIGluZm9ybWF0aW9uIGZyb20gZGVlcGx5IG5lc3RlZCBvYmplY3RzCgkJICogICAgLy8gSlNPTiBzdHJ1Y3R1cmUgZm9yIGVhY2ggcm93OgoJCSAqICAgIC8vICAgewoJCSAqICAgIC8vICAgICAgImVuZ2luZSI6IHt2YWx1ZX0sCgkJICogICAgLy8gICAgICAiYnJvd3NlciI6IHt2YWx1ZX0sCgkJICogICAgLy8gICAgICAicGxhdGZvcm0iOiB7CgkJICogICAgLy8gICAgICAgICAiaW5uZXIiOiB7dmFsdWV9CgkJICogICAgLy8gICAgICB9LAoJCSAqICAgIC8vICAgICAgImRldGFpbHMiOiBbCgkJICogICAgLy8gICAgICAgICB7dmFsdWV9LCB7dmFsdWV9CgkJICogICAgLy8gICAgICBdCgkJICogICAgLy8gICB9CgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImFqYXhTb3VyY2UiOiAic291cmNlcy9kZWVwLnR4dCIsCgkJICogICAgICAgICJjb2x1bW5zIjogWwoJCSAqICAgICAgICAgIHsgImRhdGEiOiAiZW5naW5lIiB9LAoJCSAqICAgICAgICAgIHsgImRhdGEiOiAiYnJvd3NlciIgfSwKCQkgKiAgICAgICAgICB7ICJkYXRhIjogInBsYXRmb3JtLmlubmVyIiB9LAoJCSAqICAgICAgICAgIHsgImRhdGEiOiAiZGV0YWlscy4wIiB9LAoJCSAqICAgICAgICAgIHsgImRhdGEiOiAiZGV0YWlscy4xIiB9CgkJICogICAgICAgIF0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBVc2luZyBgZGF0YWAgYXMgYSBmdW5jdGlvbiB0byBwcm92aWRlIGRpZmZlcmVudCBpbmZvcm1hdGlvbiBmb3IKCQkgKiAgICAvLyBzb3J0aW5nLCBmaWx0ZXJpbmcgYW5kIGRpc3BsYXkuIEluIHRoaXMgY2FzZSwgY3VycmVuY3kgKHByaWNlKQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJjb2x1bW5EZWZzIjogWyB7CgkJICogICAgICAgICAgInRhcmdldHMiOiBbIDAgXSwKCQkgKiAgICAgICAgICAiZGF0YSI6IGZ1bmN0aW9uICggc291cmNlLCB0eXBlLCB2YWwgKSB7CgkJICogICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3NldCcpIHsKCQkgKiAgICAgICAgICAgICAgc291cmNlLnByaWNlID0gdmFsOwoJCSAqICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgY29tcHV0ZWQgZGlzbGF5IGFuZCBmaWx0ZXIgdmFsdWVzIGZvciBlZmZpY2llbmN5CgkJICogICAgICAgICAgICAgIHNvdXJjZS5wcmljZV9kaXNwbGF5ID0gdmFsPT0iIiA/ICIiIDogIiQiK251bWJlckZvcm1hdCh2YWwpOwoJCSAqICAgICAgICAgICAgICBzb3VyY2UucHJpY2VfZmlsdGVyICA9IHZhbD09IiIgPyAiIiA6ICIkIitudW1iZXJGb3JtYXQodmFsKSsiICIrdmFsOwoJCSAqICAgICAgICAgICAgICByZXR1cm47CgkJICogICAgICAgICAgICB9CgkJICogICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnZGlzcGxheScpIHsKCQkgKiAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5wcmljZV9kaXNwbGF5OwoJCSAqICAgICAgICAgICAgfQoJCSAqICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ2ZpbHRlcicpIHsKCQkgKiAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5wcmljZV9maWx0ZXI7CgkJICogICAgICAgICAgICB9CgkJICogICAgICAgICAgICAvLyAnc29ydCcsICd0eXBlJyBhbmQgdW5kZWZpbmVkIGFsbCBqdXN0IHVzZSB0aGUgaW50ZWdlcgoJCSAqICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5wcmljZTsKCQkgKiAgICAgICAgICB9CgkJICogICAgICAgIH0gXQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFVzaW5nIGRlZmF1bHQgY29udGVudAoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJjb2x1bW5EZWZzIjogWyB7CgkJICogICAgICAgICAgInRhcmdldHMiOiBbIDAgXSwKCQkgKiAgICAgICAgICAiZGF0YSI6IG51bGwsCgkJICogICAgICAgICAgImRlZmF1bHRDb250ZW50IjogIkNsaWNrIHRvIGVkaXQiCgkJICogICAgICAgIH0gXQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFVzaW5nIGFycmF5IG5vdGF0aW9uIC0gb3V0cHV0dGluZyBhIGxpc3QgZnJvbSBhbiBhcnJheQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJjb2x1bW5EZWZzIjogWyB7CgkJICogICAgICAgICAgInRhcmdldHMiOiBbIDAgXSwKCQkgKiAgICAgICAgICAiZGF0YSI6ICJuYW1lWywgXSIKCQkgKiAgICAgICAgfSBdCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqCgkJICovCgkJIm1EYXRhIjogbnVsbCwKCQoJCgkJLyoqCgkJICogVGhpcyBwcm9wZXJ0eSBpcyB0aGUgcmVuZGVyaW5nIHBhcnRuZXIgdG8gYGRhdGFgIGFuZCBpdCBpcyBzdWdnZXN0ZWQgdGhhdAoJCSAqIHdoZW4geW91IHdhbnQgdG8gbWFuaXB1bGF0ZSBkYXRhIGZvciBkaXNwbGF5IChpbmNsdWRpbmcgZmlsdGVyaW5nLAoJCSAqIHNvcnRpbmcgZXRjKSB3aXRob3V0IGFsdGVyaW5nIHRoZSB1bmRlcmx5aW5nIGRhdGEgZm9yIHRoZSB0YWJsZSwgdXNlIHRoaXMKCQkgKiBwcm9wZXJ0eS4gYHJlbmRlcmAgY2FuIGJlIGNvbnNpZGVyZWQgdG8gYmUgdGhlIHRoZSByZWFkIG9ubHkgY29tcGFuaW9uIHRvCgkJICogYGRhdGFgIHdoaWNoIGlzIHJlYWQgLyB3cml0ZSAodGhlbiBhcyBzdWNoIG1vcmUgY29tcGxleCkuIExpa2UgYGRhdGFgCgkJICogdGhpcyBvcHRpb24gY2FuIGJlIGdpdmVuIGluIGEgbnVtYmVyIG9mIGRpZmZlcmVudCB3YXlzIHRvIGVmZmVjdCBpdHMKCQkgKiBiZWhhdmlvdXI6CgkJICoKCQkgKiAqIGBpbnRlZ2VyYCAtIHRyZWF0ZWQgYXMgYW4gYXJyYXkgaW5kZXggZm9yIHRoZSBkYXRhIHNvdXJjZS4gVGhpcyBpcyB0aGUKCQkgKiAgIGRlZmF1bHQgdGhhdCBEYXRhVGFibGVzIHVzZXMgKGluY3JlbWVudGFsbHkgaW5jcmVhc2VkIGZvciBlYWNoIGNvbHVtbikuCgkJICogKiBgc3RyaW5nYCAtIHJlYWQgYW4gb2JqZWN0IHByb3BlcnR5IGZyb20gdGhlIGRhdGEgc291cmNlLiBUaGVyZSBhcmUKCQkgKiAgIHRocmVlICdzcGVjaWFsJyBvcHRpb25zIHRoYXQgY2FuIGJlIHVzZWQgaW4gdGhlIHN0cmluZyB0byBhbHRlciBob3cKCQkgKiAgIERhdGFUYWJsZXMgcmVhZHMgdGhlIGRhdGEgZnJvbSB0aGUgc291cmNlIG9iamVjdDoKCQkgKiAgICAqIGAuYCAtIERvdHRlZCBKYXZhc2NyaXB0IG5vdGF0aW9uLiBKdXN0IGFzIHlvdSB1c2UgYSBgLmAgaW4KCQkgKiAgICAgIEphdmFzY3JpcHQgdG8gcmVhZCBmcm9tIG5lc3RlZCBvYmplY3RzLCBzbyB0byBjYW4gdGhlIG9wdGlvbnMKCQkgKiAgICAgIHNwZWNpZmllZCBpbiBgZGF0YWAuIEZvciBleGFtcGxlOiBgYnJvd3Nlci52ZXJzaW9uYCBvcgoJCSAqICAgICAgYGJyb3dzZXIubmFtZWAuIElmIHlvdXIgb2JqZWN0IHBhcmFtZXRlciBuYW1lIGNvbnRhaW5zIGEgcGVyaW9kLCB1c2UKCQkgKiAgICAgIGBcXGAgdG8gZXNjYXBlIGl0IC0gaS5lLiBgZmlyc3RcXC5uYW1lYC4KCQkgKiAgICAqIGBbXWAgLSBBcnJheSBub3RhdGlvbi4gRGF0YVRhYmxlcyBjYW4gYXV0b21hdGljYWxseSBjb21iaW5lIGRhdGEKCQkgKiAgICAgIGZyb20gYW5kIGFycmF5IHNvdXJjZSwgam9pbmluZyB0aGUgZGF0YSB3aXRoIHRoZSBjaGFyYWN0ZXJzIHByb3ZpZGVkCgkJICogICAgICBiZXR3ZWVuIHRoZSB0d28gYnJhY2tldHMuIEZvciBleGFtcGxlOiBgbmFtZVssIF1gIHdvdWxkIHByb3ZpZGUgYQoJCSAqICAgICAgY29tbWEtc3BhY2Ugc2VwYXJhdGVkIGxpc3QgZnJvbSB0aGUgc291cmNlIGFycmF5LiBJZiBubyBjaGFyYWN0ZXJzCgkJICogICAgICBhcmUgcHJvdmlkZWQgYmV0d2VlbiB0aGUgYnJhY2tldHMsIHRoZSBvcmlnaW5hbCBhcnJheSBzb3VyY2UgaXMKCQkgKiAgICAgIHJldHVybmVkLgoJCSAqICAgICogYCgpYCAtIEZ1bmN0aW9uIG5vdGF0aW9uLiBBZGRpbmcgYCgpYCB0byB0aGUgZW5kIG9mIGEgcGFyYW1ldGVyIHdpbGwKCQkgKiAgICAgIGV4ZWN1dGUgYSBmdW5jdGlvbiBvZiB0aGUgbmFtZSBnaXZlbi4gRm9yIGV4YW1wbGU6IGBicm93c2VyKClgIGZvciBhCgkJICogICAgICBzaW1wbGUgZnVuY3Rpb24gb24gdGhlIGRhdGEgc291cmNlLCBgYnJvd3Nlci52ZXJzaW9uKClgIGZvciBhCgkJICogICAgICBmdW5jdGlvbiBpbiBhIG5lc3RlZCBwcm9wZXJ0eSBvciBldmVuIGBicm93c2VyKCkudmVyc2lvbmAgdG8gZ2V0IGFuCgkJICogICAgICBvYmplY3QgcHJvcGVydHkgaWYgdGhlIGZ1bmN0aW9uIGNhbGxlZCByZXR1cm5zIGFuIG9iamVjdC4KCQkgKiAqIGBvYmplY3RgIC0gdXNlIGRpZmZlcmVudCBkYXRhIGZvciB0aGUgZGlmZmVyZW50IGRhdGEgdHlwZXMgcmVxdWVzdGVkIGJ5CgkJICogICBEYXRhVGFibGVzICgnZmlsdGVyJywgJ2Rpc3BsYXknLCAndHlwZScgb3IgJ3NvcnQnKS4gVGhlIHByb3BlcnR5IG5hbWVzCgkJICogICBvZiB0aGUgb2JqZWN0IGlzIHRoZSBkYXRhIHR5cGUgdGhlIHByb3BlcnR5IHJlZmVycyB0byBhbmQgdGhlIHZhbHVlIGNhbgoJCSAqICAgZGVmaW5lZCB1c2luZyBhbiBpbnRlZ2VyLCBzdHJpbmcgb3IgZnVuY3Rpb24gdXNpbmcgdGhlIHNhbWUgcnVsZXMgYXMKCQkgKiAgIGByZW5kZXJgIG5vcm1hbGx5IGRvZXMuIE5vdGUgdGhhdCBhbiBgX2Agb3B0aW9uIF9tdXN0XyBiZSBzcGVjaWZpZWQuCgkJICogICBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlIHRvIHVzZSBpZiB5b3UgaGF2ZW4ndCBzcGVjaWZpZWQgYSB2YWx1ZSBmb3IKCQkgKiAgIHRoZSBkYXRhIHR5cGUgcmVxdWVzdGVkIGJ5IERhdGFUYWJsZXMuCgkJICogKiBgZnVuY3Rpb25gIC0gdGhlIGZ1bmN0aW9uIGdpdmVuIHdpbGwgYmUgZXhlY3V0ZWQgd2hlbmV2ZXIgRGF0YVRhYmxlcwoJCSAqICAgbmVlZHMgdG8gc2V0IG9yIGdldCB0aGUgZGF0YSBmb3IgYSBjZWxsIGluIHRoZSBjb2x1bW4uIFRoZSBmdW5jdGlvbgoJCSAqICAgdGFrZXMgdGhyZWUgcGFyYW1ldGVyczoKCQkgKiAgICAqIFBhcmFtZXRlcnM6CgkJICogICAgICAqIHthcnJheXxvYmplY3R9IFRoZSBkYXRhIHNvdXJjZSBmb3IgdGhlIHJvdyAoYmFzZWQgb24gYGRhdGFgKQoJCSAqICAgICAgKiB7c3RyaW5nfSBUaGUgdHlwZSBjYWxsIGRhdGEgcmVxdWVzdGVkIC0gdGhpcyB3aWxsIGJlICdmaWx0ZXInLAoJCSAqICAgICAgICAnZGlzcGxheScsICd0eXBlJyBvciAnc29ydCcuCgkJICogICAgICAqIHthcnJheXxvYmplY3R9IFRoZSBmdWxsIGRhdGEgc291cmNlIGZvciB0aGUgcm93IChub3QgYmFzZWQgb24KCQkgKiAgICAgICAgYGRhdGFgKQoJCSAqICAgICogUmV0dXJuOgoJCSAqICAgICAgKiBUaGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIGZ1bmN0aW9uIGlzIHdoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUKCQkgKiAgICAgICAgZGF0YSByZXF1ZXN0ZWQuCgkJICoKCQkgKiAgQHR5cGUgc3RyaW5nfGludHxmdW5jdGlvbnxvYmplY3R8bnVsbAoJCSAqICBAZGVmYXVsdCBudWxsIFVzZSB0aGUgZGF0YSBzb3VyY2UgdmFsdWUuCgkJICoKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmNvbHVtbi5yZW5kZXIKCQkgKiAgQGR0b3B0IENvbHVtbnMKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIENyZWF0ZSBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IGZyb20gYW4gYXJyYXkgb2Ygb2JqZWN0cwoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJhamF4U291cmNlIjogInNvdXJjZXMvZGVlcC50eHQiLAoJCSAqICAgICAgICAiY29sdW1ucyI6IFsKCQkgKiAgICAgICAgICB7ICJkYXRhIjogImVuZ2luZSIgfSwKCQkgKiAgICAgICAgICB7ICJkYXRhIjogImJyb3dzZXIiIH0sCgkJICogICAgICAgICAgewoJCSAqICAgICAgICAgICAgImRhdGEiOiAicGxhdGZvcm0iLAoJCSAqICAgICAgICAgICAgInJlbmRlciI6ICJbLCBdLm5hbWUiCgkJICogICAgICAgICAgfQoJCSAqICAgICAgICBdCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgLy8gRXhlY3V0ZSBhIGZ1bmN0aW9uIHRvIG9idGFpbiBkYXRhCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImNvbHVtbkRlZnMiOiBbIHsKCQkgKiAgICAgICAgICAidGFyZ2V0cyI6IFsgMCBdLAoJCSAqICAgICAgICAgICJkYXRhIjogbnVsbCwgLy8gVXNlIHRoZSBmdWxsIGRhdGEgc291cmNlIG9iamVjdCBmb3IgdGhlIHJlbmRlcmVyJ3Mgc291cmNlCgkJICogICAgICAgICAgInJlbmRlciI6ICJicm93c2VyTmFtZSgpIgoJCSAqICAgICAgICB9IF0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBBcyBhbiBvYmplY3QsIGV4dHJhY3RpbmcgZGlmZmVyZW50IGRhdGEgZm9yIHRoZSBkaWZmZXJlbnQgdHlwZXMKCQkgKiAgICAvLyBUaGlzIHdvdWxkIGJlIHVzZWQgd2l0aCBhIGRhdGEgc291cmNlIHN1Y2ggYXM6CgkJICogICAgLy8gICB7ICJwaG9uZSI6IDU1NTIzNjgsICJwaG9uZV9maWx0ZXIiOiAiNTU1MjM2OCA1NTUtMjM2OCIsICJwaG9uZV9kaXNwbGF5IjogIjU1NS0yMzY4IiB9CgkJICogICAgLy8gSGVyZSB0aGUgYHBob25lYCBpbnRlZ2VyIGlzIHVzZWQgZm9yIHNvcnRpbmcgYW5kIHR5cGUgZGV0ZWN0aW9uLCB3aGlsZSBgcGhvbmVfZmlsdGVyYAoJCSAqICAgIC8vICh3aGljaCBoYXMgYm90aCBmb3JtcykgaXMgdXNlZCBmb3IgZmlsdGVyaW5nIGZvciBpZiBhIHVzZXIgaW5wdXRzIGVpdGhlciBmb3JtYXQsIHdoaWxlCgkJICogICAgLy8gdGhlIGZvcm1hdHRlZCBwaG9uZSBudW1iZXIgaXMgdGhlIG9uZSB0aGF0IGlzIHNob3duIGluIHRoZSB0YWJsZS4KCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiY29sdW1uRGVmcyI6IFsgewoJCSAqICAgICAgICAgICJ0YXJnZXRzIjogWyAwIF0sCgkJICogICAgICAgICAgImRhdGEiOiBudWxsLCAvLyBVc2UgdGhlIGZ1bGwgZGF0YSBzb3VyY2Ugb2JqZWN0IGZvciB0aGUgcmVuZGVyZXIncyBzb3VyY2UKCQkgKiAgICAgICAgICAicmVuZGVyIjogewoJCSAqICAgICAgICAgICAgIl8iOiAicGhvbmUiLAoJCSAqICAgICAgICAgICAgImZpbHRlciI6ICJwaG9uZV9maWx0ZXIiLAoJCSAqICAgICAgICAgICAgImRpc3BsYXkiOiAicGhvbmVfZGlzcGxheSIKCQkgKiAgICAgICAgICB9CgkJICogICAgICAgIH0gXQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFVzZSBhcyBhIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGxpbmsgZnJvbSB0aGUgZGF0YSBzb3VyY2UKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiY29sdW1uRGVmcyI6IFsgewoJCSAqICAgICAgICAgICJ0YXJnZXRzIjogWyAwIF0sCgkJICogICAgICAgICAgImRhdGEiOiAiZG93bmxvYWRfbGluayIsCgkJICogICAgICAgICAgInJlbmRlciI6IGZ1bmN0aW9uICggZGF0YSwgdHlwZSwgZnVsbCApIHsKCQkgKiAgICAgICAgICAgIHJldHVybiAnPGEgaHJlZj0iJytkYXRhKyciPkRvd25sb2FkPC9hPic7CgkJICogICAgICAgICAgfQoJCSAqICAgICAgICB9IF0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJIm1SZW5kZXIiOiBudWxsLAoJCgkKCQkvKioKCQkgKiBDaGFuZ2UgdGhlIGNlbGwgdHlwZSBjcmVhdGVkIGZvciB0aGUgY29sdW1uIC0gZWl0aGVyIFREIGNlbGxzIG9yIFRIIGNlbGxzLiBUaGlzCgkJICogY2FuIGJlIHVzZWZ1bCBhcyBUSCBjZWxscyBoYXZlIHNlbWFudGljIG1lYW5pbmcgaW4gdGhlIHRhYmxlIGJvZHksIGFsbG93aW5nIHRoZW0KCQkgKiB0byBhY3QgYXMgYSBoZWFkZXIgZm9yIGEgcm93ICh5b3UgbWF5IHdpc2ggdG8gYWRkIHNjb3BlPSdyb3cnIHRvIHRoZSBUSCBlbGVtZW50cykuCgkJICogIEB0eXBlIHN0cmluZwoJCSAqICBAZGVmYXVsdCB0ZAoJCSAqCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5jb2x1bW4uY2VsbFR5cGUKCQkgKiAgQGR0b3B0IENvbHVtbnMKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIE1ha2UgdGhlIGZpcnN0IGNvbHVtbiB1c2UgVEggY2VsbHMKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiY29sdW1uRGVmcyI6IFsgewoJCSAqICAgICAgICAgICJ0YXJnZXRzIjogWyAwIF0sCgkJICogICAgICAgICAgImNlbGxUeXBlIjogInRoIgoJCSAqICAgICAgICB9IF0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJInNDZWxsVHlwZSI6ICJ0ZCIsCgkKCQoJCS8qKgoJCSAqIENsYXNzIHRvIGdpdmUgdG8gZWFjaCBjZWxsIGluIHRoaXMgY29sdW1uLgoJCSAqICBAdHlwZSBzdHJpbmcKCQkgKiAgQGRlZmF1bHQgPGk+RW1wdHkgc3RyaW5nPC9pPgoJCSAqCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5jb2x1bW4uY2xhc3MKCQkgKiAgQGR0b3B0IENvbHVtbnMKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFVzaW5nIGBjb2x1bW5EZWZzYAoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJjb2x1bW5EZWZzIjogWwoJCSAqICAgICAgICAgIHsgImNsYXNzIjogIm15X2NsYXNzIiwgInRhcmdldHMiOiBbIDAgXSB9CgkJICogICAgICAgIF0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBVc2luZyBgY29sdW1uc2AKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiY29sdW1ucyI6IFsKCQkgKiAgICAgICAgICB7ICJjbGFzcyI6ICJteV9jbGFzcyIgfSwKCQkgKiAgICAgICAgICBudWxsLAoJCSAqICAgICAgICAgIG51bGwsCgkJICogICAgICAgICAgbnVsbCwKCQkgKiAgICAgICAgICBudWxsCgkJICogICAgICAgIF0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJInNDbGFzcyI6ICIiLAoJCgkJLyoqCgkJICogV2hlbiBEYXRhVGFibGVzIGNhbGN1bGF0ZXMgdGhlIGNvbHVtbiB3aWR0aHMgdG8gYXNzaWduIHRvIGVhY2ggY29sdW1uLAoJCSAqIGl0IGZpbmRzIHRoZSBsb25nZXN0IHN0cmluZyBpbiBlYWNoIGNvbHVtbiBhbmQgdGhlbiBjb25zdHJ1Y3RzIGEKCQkgKiB0ZW1wb3JhcnkgdGFibGUgYW5kIHJlYWRzIHRoZSB3aWR0aHMgZnJvbSB0aGF0LiBUaGUgcHJvYmxlbSB3aXRoIHRoaXMKCQkgKiBpcyB0aGF0ICJtbW0iIGlzIG11Y2ggd2lkZXIgdGhlbiAiaWlpaSIsIGJ1dCB0aGUgbGF0dGVyIGlzIGEgbG9uZ2VyCgkJICogc3RyaW5nIC0gdGh1cyB0aGUgY2FsY3VsYXRpb24gY2FuIGdvIHdyb25nIChkb2luZyBpdCBwcm9wZXJseSBhbmQgcHV0dGluZwoJCSAqIGl0IGludG8gYW4gRE9NIG9iamVjdCBhbmQgbWVhc3VyaW5nIHRoYXQgaXMgaG9ycmlibHkoISkgc2xvdykuIFRodXMgYXMKCQkgKiBhICJ3b3JrIGFyb3VuZCIgd2UgcHJvdmlkZSB0aGlzIG9wdGlvbi4gSXQgd2lsbCBhcHBlbmQgaXRzIHZhbHVlIHRvIHRoZQoJCSAqIHRleHQgdGhhdCBpcyBmb3VuZCB0byBiZSB0aGUgbG9uZ2VzdCBzdHJpbmcgZm9yIHRoZSBjb2x1bW4gLSBpLmUuIHBhZGRpbmcuCgkJICogR2VuZXJhbGx5IHlvdSBzaG91bGRuJ3QgbmVlZCB0aGlzIQoJCSAqICBAdHlwZSBzdHJpbmcKCQkgKiAgQGRlZmF1bHQgPGk+RW1wdHkgc3RyaW5nPGk+CgkJICoKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmNvbHVtbi5jb250ZW50UGFkZGluZwoJCSAqICBAZHRvcHQgQ29sdW1ucwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgLy8gVXNpbmcgYGNvbHVtbnNgCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImNvbHVtbnMiOiBbCgkJICogICAgICAgICAgbnVsbCwKCQkgKiAgICAgICAgICBudWxsLAoJCSAqICAgICAgICAgIG51bGwsCgkJICogICAgICAgICAgewoJCSAqICAgICAgICAgICAgImNvbnRlbnRQYWRkaW5nIjogIm1tbSIKCQkgKiAgICAgICAgICB9CgkJICogICAgICAgIF0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJInNDb250ZW50UGFkZGluZyI6ICIiLAoJCgkKCQkvKioKCQkgKiBBbGxvd3MgYSBkZWZhdWx0IHZhbHVlIHRvIGJlIGdpdmVuIGZvciBhIGNvbHVtbidzIGRhdGEsIGFuZCB3aWxsIGJlIHVzZWQKCQkgKiB3aGVuZXZlciBhIG51bGwgZGF0YSBzb3VyY2UgaXMgZW5jb3VudGVyZWQgKHRoaXMgY2FuIGJlIGJlY2F1c2UgYGRhdGFgCgkJICogaXMgc2V0IHRvIG51bGwsIG9yIGJlY2F1c2UgdGhlIGRhdGEgc291cmNlIGl0c2VsZiBpcyBudWxsKS4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKgoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuY29sdW1uLmRlZmF1bHRDb250ZW50CgkJICogIEBkdG9wdCBDb2x1bW5zCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBVc2luZyBgY29sdW1uRGVmc2AKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiY29sdW1uRGVmcyI6IFsKCQkgKiAgICAgICAgICB7CgkJICogICAgICAgICAgICAiZGF0YSI6IG51bGwsCgkJICogICAgICAgICAgICAiZGVmYXVsdENvbnRlbnQiOiAiRWRpdCIsCgkJICogICAgICAgICAgICAidGFyZ2V0cyI6IFsgLTEgXQoJCSAqICAgICAgICAgIH0KCQkgKiAgICAgICAgXQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFVzaW5nIGBjb2x1bW5zYAoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJjb2x1bW5zIjogWwoJCSAqICAgICAgICAgIG51bGwsCgkJICogICAgICAgICAgbnVsbCwKCQkgKiAgICAgICAgICBudWxsLAoJCSAqICAgICAgICAgIHsKCQkgKiAgICAgICAgICAgICJkYXRhIjogbnVsbCwKCQkgKiAgICAgICAgICAgICJkZWZhdWx0Q29udGVudCI6ICJFZGl0IgoJCSAqICAgICAgICAgIH0KCQkgKiAgICAgICAgXQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkic0RlZmF1bHRDb250ZW50IjogbnVsbCwKCQoJCgkJLyoqCgkJICogVGhpcyBwYXJhbWV0ZXIgaXMgb25seSB1c2VkIGluIERhdGFUYWJsZXMnIHNlcnZlci1zaWRlIHByb2Nlc3NpbmcuIEl0IGNhbgoJCSAqIGJlIGV4Y2VwdGlvbmFsbHkgdXNlZnVsIHRvIGtub3cgd2hhdCBjb2x1bW5zIGFyZSBiZWluZyBkaXNwbGF5ZWQgb24gdGhlCgkJICogY2xpZW50IHNpZGUsIGFuZCB0byBtYXAgdGhlc2UgdG8gZGF0YWJhc2UgZmllbGRzLiBXaGVuIGRlZmluZWQsIHRoZSBuYW1lcwoJCSAqIGFsc28gYWxsb3cgRGF0YVRhYmxlcyB0byByZW9yZGVyIGluZm9ybWF0aW9uIGZyb20gdGhlIHNlcnZlciBpZiBpdCBjb21lcwoJCSAqIGJhY2sgaW4gYW4gdW5leHBlY3RlZCBvcmRlciAoaS5lLiBpZiB5b3Ugc3dpdGNoIHlvdXIgY29sdW1ucyBhcm91bmQgb24gdGhlCgkJICogY2xpZW50LXNpZGUsIHlvdXIgc2VydmVyLXNpZGUgY29kZSBkb2VzIG5vdCBhbHNvIG5lZWQgdXBkYXRpbmcpLgoJCSAqICBAdHlwZSBzdHJpbmcKCQkgKiAgQGRlZmF1bHQgPGk+RW1wdHkgc3RyaW5nPC9pPgoJCSAqCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5jb2x1bW4ubmFtZQoJCSAqICBAZHRvcHQgQ29sdW1ucwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgLy8gVXNpbmcgYGNvbHVtbkRlZnNgCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImNvbHVtbkRlZnMiOiBbCgkJICogICAgICAgICAgeyAibmFtZSI6ICJlbmdpbmUiLCAidGFyZ2V0cyI6IFsgMCBdIH0sCgkJICogICAgICAgICAgeyAibmFtZSI6ICJicm93c2VyIiwgInRhcmdldHMiOiBbIDEgXSB9LAoJCSAqICAgICAgICAgIHsgIm5hbWUiOiAicGxhdGZvcm0iLCAidGFyZ2V0cyI6IFsgMiBdIH0sCgkJICogICAgICAgICAgeyAibmFtZSI6ICJ2ZXJzaW9uIiwgInRhcmdldHMiOiBbIDMgXSB9LAoJCSAqICAgICAgICAgIHsgIm5hbWUiOiAiZ3JhZGUiLCAidGFyZ2V0cyI6IFsgNCBdIH0KCQkgKiAgICAgICAgXQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFVzaW5nIGBjb2x1bW5zYAoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJjb2x1bW5zIjogWwoJCSAqICAgICAgICAgIHsgIm5hbWUiOiAiZW5naW5lIiB9LAoJCSAqICAgICAgICAgIHsgIm5hbWUiOiAiYnJvd3NlciIgfSwKCQkgKiAgICAgICAgICB7ICJuYW1lIjogInBsYXRmb3JtIiB9LAoJCSAqICAgICAgICAgIHsgIm5hbWUiOiAidmVyc2lvbiIgfSwKCQkgKiAgICAgICAgICB7ICJuYW1lIjogImdyYWRlIiB9CgkJICogICAgICAgIF0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJInNOYW1lIjogIiIsCgkKCQoJCS8qKgoJCSAqIERlZmluZXMgYSBkYXRhIHNvdXJjZSB0eXBlIGZvciB0aGUgb3JkZXJpbmcgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVhZAoJCSAqIHJlYWwtdGltZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSB0YWJsZSAodXBkYXRpbmcgdGhlIGludGVybmFsbHkgY2FjaGVkCgkJICogdmVyc2lvbikgcHJpb3IgdG8gb3JkZXJpbmcuIFRoaXMgYWxsb3dzIG9yZGVyaW5nIHRvIG9jY3VyIG9uIHVzZXIKCQkgKiBlZGl0YWJsZSBlbGVtZW50cyBzdWNoIGFzIGZvcm0gaW5wdXRzLgoJCSAqICBAdHlwZSBzdHJpbmcKCQkgKiAgQGRlZmF1bHQgc3RkCgkJICoKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmNvbHVtbi5vcmRlckRhdGFUeXBlCgkJICogIEBkdG9wdCBDb2x1bW5zCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBVc2luZyBgY29sdW1uRGVmc2AKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiY29sdW1uRGVmcyI6IFsKCQkgKiAgICAgICAgICB7ICJvcmRlckRhdGFUeXBlIjogImRvbS10ZXh0IiwgInRhcmdldHMiOiBbIDIsIDMgXSB9LAoJCSAqICAgICAgICAgIHsgInR5cGUiOiAibnVtZXJpYyIsICJ0YXJnZXRzIjogWyAzIF0gfSwKCQkgKiAgICAgICAgICB7ICJvcmRlckRhdGFUeXBlIjogImRvbS1zZWxlY3QiLCAidGFyZ2V0cyI6IFsgNCBdIH0sCgkJICogICAgICAgICAgeyAib3JkZXJEYXRhVHlwZSI6ICJkb20tY2hlY2tib3giLCAidGFyZ2V0cyI6IFsgNSBdIH0KCQkgKiAgICAgICAgXQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFVzaW5nIGBjb2x1bW5zYAoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJjb2x1bW5zIjogWwoJCSAqICAgICAgICAgIG51bGwsCgkJICogICAgICAgICAgbnVsbCwKCQkgKiAgICAgICAgICB7ICJvcmRlckRhdGFUeXBlIjogImRvbS10ZXh0IiB9LAoJCSAqICAgICAgICAgIHsgIm9yZGVyRGF0YVR5cGUiOiAiZG9tLXRleHQiLCAidHlwZSI6ICJudW1lcmljIiB9LAoJCSAqICAgICAgICAgIHsgIm9yZGVyRGF0YVR5cGUiOiAiZG9tLXNlbGVjdCIgfSwKCQkgKiAgICAgICAgICB7ICJvcmRlckRhdGFUeXBlIjogImRvbS1jaGVja2JveCIgfQoJCSAqICAgICAgICBdCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJzU29ydERhdGFUeXBlIjogInN0ZCIsCgkKCQoJCS8qKgoJCSAqIFRoZSB0aXRsZSBvZiB0aGlzIGNvbHVtbi4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IG51bGwgPGk+RGVyaXZlZCBmcm9tIHRoZSAnVEgnIHZhbHVlIGZvciB0aGlzIGNvbHVtbiBpbiB0aGUKCQkgKiAgICBvcmlnaW5hbCBIVE1MIHRhYmxlLjwvaT4KCQkgKgoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuY29sdW1uLnRpdGxlCgkJICogIEBkdG9wdCBDb2x1bW5zCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBVc2luZyBgY29sdW1uRGVmc2AKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiY29sdW1uRGVmcyI6IFsKCQkgKiAgICAgICAgICB7ICJ0aXRsZSI6ICJNeSBjb2x1bW4gdGl0bGUiLCAidGFyZ2V0cyI6IFsgMCBdIH0KCQkgKiAgICAgICAgXQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFVzaW5nIGBjb2x1bW5zYAoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJjb2x1bW5zIjogWwoJCSAqICAgICAgICAgIHsgInRpdGxlIjogIk15IGNvbHVtbiB0aXRsZSIgfSwKCQkgKiAgICAgICAgICBudWxsLAoJCSAqICAgICAgICAgIG51bGwsCgkJICogICAgICAgICAgbnVsbCwKCQkgKiAgICAgICAgICBudWxsCgkJICogICAgICAgIF0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJInNUaXRsZSI6IG51bGwsCgkKCQoJCS8qKgoJCSAqIFRoZSB0eXBlIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBob3cgdGhlIGRhdGEgZm9yIHRoaXMgY29sdW1uIHdpbGwgYmUKCQkgKiBvcmRlcmVkLiBGb3VyIHR5cGVzIChzdHJpbmcsIG51bWVyaWMsIGRhdGUgYW5kIGh0bWwgKHdoaWNoIHdpbGwgc3RyaXAKCQkgKiBIVE1MIHRhZ3MgYmVmb3JlIG9yZGVyaW5nKSkgYXJlIGN1cnJlbnRseSBhdmFpbGFibGUuIE5vdGUgdGhhdCBvbmx5IGRhdGUKCQkgKiBmb3JtYXRzIHVuZGVyc3Rvb2QgYnkgSmF2YXNjcmlwdCdzIERhdGUoKSBvYmplY3Qgd2lsbCBiZSBhY2NlcHRlZCBhcyB0eXBlCgkJICogZGF0ZS4gRm9yIGV4YW1wbGU6ICJNYXIgMjYsIDIwMDggNTowMyBQTSIuIE1heSB0YWtlIHRoZSB2YWx1ZXM6ICdzdHJpbmcnLAoJCSAqICdudW1lcmljJywgJ2RhdGUnIG9yICdodG1sJyAoYnkgZGVmYXVsdCkuIEZ1cnRoZXIgdHlwZXMgY2FuIGJlIGFkZGluZwoJCSAqIHRocm91Z2ggcGx1Zy1pbnMuCgkJICogIEB0eXBlIHN0cmluZwoJCSAqICBAZGVmYXVsdCBudWxsIDxpPkF1dG8tZGV0ZWN0ZWQgZnJvbSByYXcgZGF0YTwvaT4KCQkgKgoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuY29sdW1uLnR5cGUKCQkgKiAgQGR0b3B0IENvbHVtbnMKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFVzaW5nIGBjb2x1bW5EZWZzYAoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJjb2x1bW5EZWZzIjogWwoJCSAqICAgICAgICAgIHsgInR5cGUiOiAiaHRtbCIsICJ0YXJnZXRzIjogWyAwIF0gfQoJCSAqICAgICAgICBdCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgLy8gVXNpbmcgYGNvbHVtbnNgCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImNvbHVtbnMiOiBbCgkJICogICAgICAgICAgeyAidHlwZSI6ICJodG1sIiB9LAoJCSAqICAgICAgICAgIG51bGwsCgkJICogICAgICAgICAgbnVsbCwKCQkgKiAgICAgICAgICBudWxsLAoJCSAqICAgICAgICAgIG51bGwKCQkgKiAgICAgICAgXQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkic1R5cGUiOiBudWxsLAoJCgkKCQkvKioKCQkgKiBEZWZpbmluZyB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiwgdGhpcyBwYXJhbWV0ZXIgbWF5IHRha2UgYW55IENTUyB2YWx1ZQoJCSAqICgzZW0sIDIwcHggZXRjKS4gRGF0YVRhYmxlcyBhcHBsaWVzICdzbWFydCcgd2lkdGhzIHRvIGNvbHVtbnMgd2hpY2ggaGF2ZSBub3QKCQkgKiBiZWVuIGdpdmVuIGEgc3BlY2lmaWMgd2lkdGggdGhyb3VnaCB0aGlzIGludGVyZmFjZSBlbnN1cmluZyB0aGF0IHRoZSB0YWJsZQoJCSAqIHJlbWFpbnMgcmVhZGFibGUuCgkJICogIEB0eXBlIHN0cmluZwoJCSAqICBAZGVmYXVsdCBudWxsIDxpPkF1dG9tYXRpYzwvaT4KCQkgKgoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuY29sdW1uLndpZHRoCgkJICogIEBkdG9wdCBDb2x1bW5zCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBVc2luZyBgY29sdW1uRGVmc2AKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiY29sdW1uRGVmcyI6IFsKCQkgKiAgICAgICAgICB7ICJ3aWR0aCI6ICIyMCUiLCAidGFyZ2V0cyI6IFsgMCBdIH0KCQkgKiAgICAgICAgXQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFVzaW5nIGBjb2x1bW5zYAoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJjb2x1bW5zIjogWwoJCSAqICAgICAgICAgIHsgIndpZHRoIjogIjIwJSIgfSwKCQkgKiAgICAgICAgICBudWxsLAoJCSAqICAgICAgICAgIG51bGwsCgkJICogICAgICAgICAgbnVsbCwKCQkgKiAgICAgICAgICBudWxsCgkJICogICAgICAgIF0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJInNXaWR0aCI6IG51bGwKCX07CgkKCV9mbkh1bmdhcmlhbk1hcCggRGF0YVRhYmxlLmRlZmF1bHRzLmNvbHVtbiApOwoJCgkKCQoJLyoqCgkgKiBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdCAtIHRoaXMgaG9sZHMgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIGEKCSAqIGdpdmVuIHRhYmxlLCBpbmNsdWRpbmcgY29uZmlndXJhdGlvbiwgZGF0YSBhbmQgY3VycmVudCBhcHBsaWNhdGlvbiBvZiB0aGUKCSAqIHRhYmxlIG9wdGlvbnMuIERhdGFUYWJsZXMgZG9lcyBub3QgaGF2ZSBhIHNpbmdsZSBpbnN0YW5jZSBmb3IgZWFjaCBEYXRhVGFibGUKCSAqIHdpdGggdGhlIHNldHRpbmdzIGF0dGFjaGVkIHRvIHRoYXQgaW5zdGFuY2UsIGJ1dCByYXRoZXIgaW5zdGFuY2VzIG9mIHRoZQoJICogRGF0YVRhYmxlICJjbGFzcyIgYXJlIGNyZWF0ZWQgb24tdGhlLWZseSBhcyBuZWVkZWQgKHR5cGljYWxseSBieSBhCgkgKiAkKCkuZGF0YVRhYmxlKCkgY2FsbCkgYW5kIHRoZSBzZXR0aW5ncyBvYmplY3QgaXMgdGhlbiBhcHBsaWVkIHRvIHRoYXQKCSAqIGluc3RhbmNlLgoJICoKCSAqIE5vdGUgdGhhdCB0aGlzIG9iamVjdCBpcyByZWxhdGVkIHRvIHtAbGluayBEYXRhVGFibGUuZGVmYXVsdHN9IGJ1dCB0aGlzCgkgKiBvbmUgaXMgdGhlIGludGVybmFsIGRhdGEgc3RvcmUgZm9yIERhdGFUYWJsZXMncyBjYWNoZSBvZiBjb2x1bW5zLiBJdCBzaG91bGQKCSAqIE5PVCBiZSBtYW5pcHVsYXRlZCBvdXRzaWRlIG9mIERhdGFUYWJsZXMuIEFueSBjb25maWd1cmF0aW9uIHNob3VsZCBiZSBkb25lCgkgKiB0aHJvdWdoIHRoZSBpbml0aWFsaXNhdGlvbiBvcHRpb25zLgoJICogIEBuYW1lc3BhY2UKCSAqICBAdG9kbyBSZWFsbHkgc2hvdWxkIGF0dGFjaCB0aGUgc2V0dGluZ3Mgb2JqZWN0IHRvIGluZGl2aWR1YWwgaW5zdGFuY2VzIHNvIHdlCgkgKiAgICBkb24ndCBuZWVkIHRvIGNyZWF0ZSBuZXcgaW5zdGFuY2VzIG9uIGVhY2ggJCgpLmRhdGFUYWJsZSgpIGNhbGwgKGlmIHRoZQoJICogICAgdGFibGUgYWxyZWFkeSBleGlzdHMpLiBJdCB3b3VsZCBhbHNvIHNhdmUgcGFzc2luZyBvU2V0dGluZ3MgYXJvdW5kIGFuZAoJICogICAgaW50byBldmVyeSBzaW5nbGUgZnVuY3Rpb24uIEhvd2V2ZXIsIHRoaXMgaXMgYSB2ZXJ5IHNpZ25pZmljYW50CgkgKiAgICBhcmNoaXRlY3R1cmUgY2hhbmdlIGZvciBEYXRhVGFibGVzIGFuZCB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYnJlYWsKCSAqICAgIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgaW5zdGFsbGF0aW9ucy4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdAoJICogICAgd2lsbCBiZSBkb25lIGluIDIuMC4KCSAqLwoJRGF0YVRhYmxlLm1vZGVscy5vU2V0dGluZ3MgPSB7CgkJLyoqCgkJICogUHJpbWFyeSBmZWF0dXJlcyBvZiBEYXRhVGFibGVzIGFuZCB0aGVpciBlbmFibGVtZW50IHN0YXRlLgoJCSAqICBAbmFtZXNwYWNlCgkJICovCgkJIm9GZWF0dXJlcyI6IHsKCQoJCQkvKioKCQkJICogRmxhZyB0byBzYXkgaWYgRGF0YVRhYmxlcyBzaG91bGQgYXV0b21hdGljYWxseSB0cnkgdG8gY2FsY3VsYXRlIHRoZQoJCQkgKiBvcHRpbXVtIHRhYmxlIGFuZCBjb2x1bW5zIHdpZHRocyAodHJ1ZSkgb3Igbm90IChmYWxzZSkuCgkJCSAqIE5vdGUgdGhhdCB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIHNldCBieSB0aGUgaW5pdGlhbGlzYXRpb24gcm91dGluZS4gVG8KCQkJICogc2V0IGEgZGVmYXVsdCB1c2Uge0BsaW5rIERhdGFUYWJsZS5kZWZhdWx0c30uCgkJCSAqICBAdHlwZSBib29sZWFuCgkJCSAqLwoJCQkiYkF1dG9XaWR0aCI6IG51bGwsCgkKCQkJLyoqCgkJCSAqIERlbGF5IHRoZSBjcmVhdGlvbiBvZiBUUiBhbmQgVEQgZWxlbWVudHMgdW50aWwgdGhleSBhcmUgYWN0dWFsbHkKCQkJICogbmVlZGVkIGJ5IGEgZHJpdmVuIHBhZ2UgZHJhdy4gVGhpcyBjYW4gZ2l2ZSBhIHNpZ25pZmljYW50IHNwZWVkCgkJCSAqIGluY3JlYXNlIGZvciBBamF4IHNvdXJjZSBhbmQgSmF2YXNjcmlwdCBzb3VyY2UgZGF0YSwgYnV0IG1ha2VzIG5vCgkJCSAqIGRpZmZlcmVuY2UgYXQgYWxsIGZybyBET00gYW5kIHNlcnZlci1zaWRlIHByb2Nlc3NpbmcgdGFibGVzLgoJCQkgKiBOb3RlIHRoYXQgdGhpcyBwYXJhbWV0ZXIgd2lsbCBiZSBzZXQgYnkgdGhlIGluaXRpYWxpc2F0aW9uIHJvdXRpbmUuIFRvCgkJCSAqIHNldCBhIGRlZmF1bHQgdXNlIHtAbGluayBEYXRhVGFibGUuZGVmYXVsdHN9LgoJCQkgKiAgQHR5cGUgYm9vbGVhbgoJCQkgKi8KCQkJImJEZWZlclJlbmRlciI6IG51bGwsCgkKCQkJLyoqCgkJCSAqIEVuYWJsZSBmaWx0ZXJpbmcgb24gdGhlIHRhYmxlIG9yIG5vdC4gTm90ZSB0aGF0IGlmIHRoaXMgaXMgZGlzYWJsZWQKCQkJICogdGhlbiB0aGVyZSBpcyBubyBmaWx0ZXJpbmcgYXQgYWxsIG9uIHRoZSB0YWJsZSwgaW5jbHVkaW5nIGZuRmlsdGVyLgoJCQkgKiBUbyBqdXN0IHJlbW92ZSB0aGUgZmlsdGVyaW5nIGlucHV0IHVzZSBzRG9tIGFuZCByZW1vdmUgdGhlICdmJyBvcHRpb24uCgkJCSAqIE5vdGUgdGhhdCB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIHNldCBieSB0aGUgaW5pdGlhbGlzYXRpb24gcm91dGluZS4gVG8KCQkJICogc2V0IGEgZGVmYXVsdCB1c2Uge0BsaW5rIERhdGFUYWJsZS5kZWZhdWx0c30uCgkJCSAqICBAdHlwZSBib29sZWFuCgkJCSAqLwoJCQkiYkZpbHRlciI6IG51bGwsCgkKCQkJLyoqCgkJCSAqIFRhYmxlIGluZm9ybWF0aW9uIGVsZW1lbnQgKHRoZSAnU2hvd2luZyB4IG9mIHkgcmVjb3JkcycgZGl2KSBlbmFibGUKCQkJICogZmxhZy4KCQkJICogTm90ZSB0aGF0IHRoaXMgcGFyYW1ldGVyIHdpbGwgYmUgc2V0IGJ5IHRoZSBpbml0aWFsaXNhdGlvbiByb3V0aW5lLiBUbwoJCQkgKiBzZXQgYSBkZWZhdWx0IHVzZSB7QGxpbmsgRGF0YVRhYmxlLmRlZmF1bHRzfS4KCQkJICogIEB0eXBlIGJvb2xlYW4KCQkJICovCgkJCSJiSW5mbyI6IG51bGwsCgkKCQkJLyoqCgkJCSAqIFByZXNlbnQgYSB1c2VyIGNvbnRyb2wgYWxsb3dpbmcgdGhlIGVuZCB1c2VyIHRvIGNoYW5nZSB0aGUgcGFnZSBzaXplCgkJCSAqIHdoZW4gcGFnaW5hdGlvbiBpcyBlbmFibGVkLgoJCQkgKiBOb3RlIHRoYXQgdGhpcyBwYXJhbWV0ZXIgd2lsbCBiZSBzZXQgYnkgdGhlIGluaXRpYWxpc2F0aW9uIHJvdXRpbmUuIFRvCgkJCSAqIHNldCBhIGRlZmF1bHQgdXNlIHtAbGluayBEYXRhVGFibGUuZGVmYXVsdHN9LgoJCQkgKiAgQHR5cGUgYm9vbGVhbgoJCQkgKi8KCQkJImJMZW5ndGhDaGFuZ2UiOiBudWxsLAoJCgkJCS8qKgoJCQkgKiBQYWdpbmF0aW9uIGVuYWJsZWQgb3Igbm90LiBOb3RlIHRoYXQgaWYgdGhpcyBpcyBkaXNhYmxlZCB0aGVuIGxlbmd0aAoJCQkgKiBjaGFuZ2luZyBtdXN0IGFsc28gYmUgZGlzYWJsZWQuCgkJCSAqIE5vdGUgdGhhdCB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIHNldCBieSB0aGUgaW5pdGlhbGlzYXRpb24gcm91dGluZS4gVG8KCQkJICogc2V0IGEgZGVmYXVsdCB1c2Uge0BsaW5rIERhdGFUYWJsZS5kZWZhdWx0c30uCgkJCSAqICBAdHlwZSBib29sZWFuCgkJCSAqLwoJCQkiYlBhZ2luYXRlIjogbnVsbCwKCQoJCQkvKioKCQkJICogUHJvY2Vzc2luZyBpbmRpY2F0b3IgZW5hYmxlIGZsYWcgd2hlbmV2ZXIgRGF0YVRhYmxlcyBpcyBlbmFjdGluZyBhCgkJCSAqIHVzZXIgcmVxdWVzdCAtIHR5cGljYWxseSBhbiBBamF4IHJlcXVlc3QgZm9yIHNlcnZlci1zaWRlIHByb2Nlc3NpbmcuCgkJCSAqIE5vdGUgdGhhdCB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIHNldCBieSB0aGUgaW5pdGlhbGlzYXRpb24gcm91dGluZS4gVG8KCQkJICogc2V0IGEgZGVmYXVsdCB1c2Uge0BsaW5rIERhdGFUYWJsZS5kZWZhdWx0c30uCgkJCSAqICBAdHlwZSBib29sZWFuCgkJCSAqLwoJCQkiYlByb2Nlc3NpbmciOiBudWxsLAoJCgkJCS8qKgoJCQkgKiBTZXJ2ZXItc2lkZSBwcm9jZXNzaW5nIGVuYWJsZWQgZmxhZyAtIHdoZW4gZW5hYmxlZCBEYXRhVGFibGVzIHdpbGwKCQkJICogZ2V0IGFsbCBkYXRhIGZyb20gdGhlIHNlcnZlciBmb3IgZXZlcnkgZHJhdyAtIHRoZXJlIGlzIG5vIGZpbHRlcmluZywKCQkJICogc29ydGluZyBvciBwYWdpbmcgZG9uZSBvbiB0aGUgY2xpZW50LXNpZGUuCgkJCSAqIE5vdGUgdGhhdCB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIHNldCBieSB0aGUgaW5pdGlhbGlzYXRpb24gcm91dGluZS4gVG8KCQkJICogc2V0IGEgZGVmYXVsdCB1c2Uge0BsaW5rIERhdGFUYWJsZS5kZWZhdWx0c30uCgkJCSAqICBAdHlwZSBib29sZWFuCgkJCSAqLwoJCQkiYlNlcnZlclNpZGUiOiBudWxsLAoJCgkJCS8qKgoJCQkgKiBTb3J0aW5nIGVuYWJsZW1lbnQgZmxhZy4KCQkJICogTm90ZSB0aGF0IHRoaXMgcGFyYW1ldGVyIHdpbGwgYmUgc2V0IGJ5IHRoZSBpbml0aWFsaXNhdGlvbiByb3V0aW5lLiBUbwoJCQkgKiBzZXQgYSBkZWZhdWx0IHVzZSB7QGxpbmsgRGF0YVRhYmxlLmRlZmF1bHRzfS4KCQkJICogIEB0eXBlIGJvb2xlYW4KCQkJICovCgkJCSJiU29ydCI6IG51bGwsCgkKCQkJLyoqCgkJCSAqIE11bHRpLWNvbHVtbiBzb3J0aW5nCgkJCSAqIE5vdGUgdGhhdCB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIHNldCBieSB0aGUgaW5pdGlhbGlzYXRpb24gcm91dGluZS4gVG8KCQkJICogc2V0IGEgZGVmYXVsdCB1c2Uge0BsaW5rIERhdGFUYWJsZS5kZWZhdWx0c30uCgkJCSAqICBAdHlwZSBib29sZWFuCgkJCSAqLwoJCQkiYlNvcnRNdWx0aSI6IG51bGwsCgkKCQkJLyoqCgkJCSAqIEFwcGx5IGEgY2xhc3MgdG8gdGhlIGNvbHVtbnMgd2hpY2ggYXJlIGJlaW5nIHNvcnRlZCB0byBwcm92aWRlIGEKCQkJICogdmlzdWFsIGhpZ2hsaWdodCBvciBub3QuIFRoaXMgY2FuIHNsb3cgdGhpbmdzIGRvd24gd2hlbiBlbmFibGVkIHNpbmNlCgkJCSAqIHRoZXJlIGlzIGEgbG90IG9mIERPTSBpbnRlcmFjdGlvbi4KCQkJICogTm90ZSB0aGF0IHRoaXMgcGFyYW1ldGVyIHdpbGwgYmUgc2V0IGJ5IHRoZSBpbml0aWFsaXNhdGlvbiByb3V0aW5lLiBUbwoJCQkgKiBzZXQgYSBkZWZhdWx0IHVzZSB7QGxpbmsgRGF0YVRhYmxlLmRlZmF1bHRzfS4KCQkJICogIEB0eXBlIGJvb2xlYW4KCQkJICovCgkJCSJiU29ydENsYXNzZXMiOiBudWxsLAoJCgkJCS8qKgoJCQkgKiBTdGF0ZSBzYXZpbmcgZW5hYmxlbWVudCBmbGFnLgoJCQkgKiBOb3RlIHRoYXQgdGhpcyBwYXJhbWV0ZXIgd2lsbCBiZSBzZXQgYnkgdGhlIGluaXRpYWxpc2F0aW9uIHJvdXRpbmUuIFRvCgkJCSAqIHNldCBhIGRlZmF1bHQgdXNlIHtAbGluayBEYXRhVGFibGUuZGVmYXVsdHN9LgoJCQkgKiAgQHR5cGUgYm9vbGVhbgoJCQkgKi8KCQkJImJTdGF0ZVNhdmUiOiBudWxsCgkJfSwKCQoJCgkJLyoqCgkJICogU2Nyb2xsaW5nIHNldHRpbmdzIGZvciBhIHRhYmxlLgoJCSAqICBAbmFtZXNwYWNlCgkJICovCgkJIm9TY3JvbGwiOiB7CgkJCS8qKgoJCQkgKiBXaGVuIHRoZSB0YWJsZSBpcyBzaG9ydGVyIGluIGhlaWdodCB0aGFuIHNTY3JvbGxZLCBjb2xsYXBzZSB0aGUKCQkJICogdGFibGUgY29udGFpbmVyIGRvd24gdG8gdGhlIGhlaWdodCBvZiB0aGUgdGFibGUgKHdoZW4gdHJ1ZSkuCgkJCSAqIE5vdGUgdGhhdCB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIHNldCBieSB0aGUgaW5pdGlhbGlzYXRpb24gcm91dGluZS4gVG8KCQkJICogc2V0IGEgZGVmYXVsdCB1c2Uge0BsaW5rIERhdGFUYWJsZS5kZWZhdWx0c30uCgkJCSAqICBAdHlwZSBib29sZWFuCgkJCSAqLwoJCQkiYkNvbGxhcHNlIjogbnVsbCwKCQoJCQkvKioKCQkJICogV2lkdGggb2YgdGhlIHNjcm9sbGJhciBmb3IgdGhlIHdlYi1icm93c2VyJ3MgcGxhdGZvcm0uIENhbGN1bGF0ZWQKCQkJICogZHVyaW5nIHRhYmxlIGluaXRpYWxpc2F0aW9uLgoJCQkgKiAgQHR5cGUgaW50CgkJCSAqICBAZGVmYXVsdCAwCgkJCSAqLwoJCQkiaUJhcldpZHRoIjogMCwKCQoJCQkvKioKCQkJICogVmlld3BvcnQgd2lkdGggZm9yIGhvcml6b250YWwgc2Nyb2xsaW5nLiBIb3Jpem9udGFsIHNjcm9sbGluZyBpcwoJCQkgKiBkaXNhYmxlZCBpZiBhbiBlbXB0eSBzdHJpbmcuCgkJCSAqIE5vdGUgdGhhdCB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIHNldCBieSB0aGUgaW5pdGlhbGlzYXRpb24gcm91dGluZS4gVG8KCQkJICogc2V0IGEgZGVmYXVsdCB1c2Uge0BsaW5rIERhdGFUYWJsZS5kZWZhdWx0c30uCgkJCSAqICBAdHlwZSBzdHJpbmcKCQkJICovCgkJCSJzWCI6IG51bGwsCgkKCQkJLyoqCgkJCSAqIFdpZHRoIHRvIGV4cGFuZCB0aGUgdGFibGUgdG8gd2hlbiB1c2luZyB4LXNjcm9sbGluZy4gVHlwaWNhbGx5IHlvdQoJCQkgKiBzaG91bGQgbm90IG5lZWQgdG8gdXNlIHRoaXMuCgkJCSAqIE5vdGUgdGhhdCB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIHNldCBieSB0aGUgaW5pdGlhbGlzYXRpb24gcm91dGluZS4gVG8KCQkJICogc2V0IGEgZGVmYXVsdCB1c2Uge0BsaW5rIERhdGFUYWJsZS5kZWZhdWx0c30uCgkJCSAqICBAdHlwZSBzdHJpbmcKCQkJICogIEBkZXByZWNhdGVkCgkJCSAqLwoJCQkic1hJbm5lciI6IG51bGwsCgkKCQkJLyoqCgkJCSAqIFZpZXdwb3J0IGhlaWdodCBmb3IgdmVydGljYWwgc2Nyb2xsaW5nLiBWZXJ0aWNhbCBzY3JvbGxpbmcgaXMgZGlzYWJsZWQKCQkJICogaWYgYW4gZW1wdHkgc3RyaW5nLgoJCQkgKiBOb3RlIHRoYXQgdGhpcyBwYXJhbWV0ZXIgd2lsbCBiZSBzZXQgYnkgdGhlIGluaXRpYWxpc2F0aW9uIHJvdXRpbmUuIFRvCgkJCSAqIHNldCBhIGRlZmF1bHQgdXNlIHtAbGluayBEYXRhVGFibGUuZGVmYXVsdHN9LgoJCQkgKiAgQHR5cGUgc3RyaW5nCgkJCSAqLwoJCQkic1kiOiBudWxsCgkJfSwKCQoJCS8qKgoJCSAqIExhbmd1YWdlIGluZm9ybWF0aW9uIGZvciB0aGUgdGFibGUuCgkJICogIEBuYW1lc3BhY2UKCQkgKiAgQGV4dGVuZHMgRGF0YVRhYmxlLmRlZmF1bHRzLm9MYW5ndWFnZQoJCSAqLwoJCSJvTGFuZ3VhZ2UiOiB7CgkJCS8qKgoJCQkgKiBJbmZvcm1hdGlvbiBjYWxsYmFjayBmdW5jdGlvbi4gU2VlCgkJCSAqIHtAbGluayBEYXRhVGFibGUuZGVmYXVsdHMuZm5JbmZvQ2FsbGJhY2t9CgkJCSAqICBAdHlwZSBmdW5jdGlvbgoJCQkgKiAgQGRlZmF1bHQgbnVsbAoJCQkgKi8KCQkJImZuSW5mb0NhbGxiYWNrIjogbnVsbAoJCX0sCgkKCQkvKioKCQkgKiBCcm93c2VyIHN1cHBvcnQgcGFyYW1ldGVycwoJCSAqICBAbmFtZXNwYWNlCgkJICovCgkJIm9Ccm93c2VyIjogewoJCQkvKioKCQkJICogSW5kaWNhdGUgaWYgdGhlIGJyb3dzZXIgaW5jb3JyZWN0bHkgY2FsY3VsYXRlcyB3aWR0aDoxMDAlIGluc2lkZSBhCgkJCSAqIHNjcm9sbGluZyBlbGVtZW50IChJRTYvNykKCQkJICogIEB0eXBlIGJvb2xlYW4KCQkJICogIEBkZWZhdWx0IGZhbHNlCgkJCSAqLwoJCQkiYlNjcm9sbE92ZXJzaXplIjogZmFsc2UsCgkKCQkJLyoqCgkJCSAqIERldGVybWluZSBpZiB0aGUgdmVydGljYWwgc2Nyb2xsYmFyIGlzIG9uIHRoZSByaWdodCBvciBsZWZ0IG9mIHRoZQoJCQkgKiBzY3JvbGxpbmcgY29udGFpbmVyIC0gbmVlZGVkIGZvciBydGwgbGFuZ3VhZ2UgbGF5b3V0LCBhbHRob3VnaCBub3QKCQkJICogYWxsIGJyb3dzZXJzIG1vdmUgdGhlIHNjcm9sbGJhciAoU2FmYXJpKS4KCQkJICogIEB0eXBlIGJvb2xlYW4KCQkJICogIEBkZWZhdWx0IGZhbHNlCgkJCSAqLwoJCQkiYlNjcm9sbGJhckxlZnQiOiBmYWxzZSwKCQoJCQkvKioKCQkJICogRmxhZyBmb3IgaWYgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGAgaXMgZnVsbHkgc3VwcG9ydGVkIG9yIG5vdAoJCQkgKiAgQHR5cGUgYm9vbGVhbgoJCQkgKiAgQGRlZmF1bHQgZmFsc2UKCQkJICovCgkJCSJiQm91bmRpbmciOiBmYWxzZSwKCQoJCQkvKioKCQkJICogQnJvd3NlciBzY3JvbGxiYXIgd2lkdGgKCQkJICogIEB0eXBlIGludGVnZXIKCQkJICogIEBkZWZhdWx0IDAKCQkJICovCgkJCSJiYXJXaWR0aCI6IDAKCQl9LAoJCgkKCQkiYWpheCI6IG51bGwsCgkKCQoJCS8qKgoJCSAqIEFycmF5IHJlZmVyZW5jaW5nIHRoZSBub2RlcyB3aGljaCBhcmUgdXNlZCBmb3IgdGhlIGZlYXR1cmVzLiBUaGUKCQkgKiBwYXJhbWV0ZXJzIG9mIHRoaXMgb2JqZWN0IG1hdGNoIHdoYXQgaXMgYWxsb3dlZCBieSBzRG9tIC0gaS5lLgoJCSAqICAgPHVsPgoJCSAqICAgICA8bGk+J2wnIC0gTGVuZ3RoIGNoYW5naW5nPC9saT4KCQkgKiAgICAgPGxpPidmJyAtIEZpbHRlcmluZyBpbnB1dDwvbGk+CgkJICogICAgIDxsaT4ndCcgLSBUaGUgdGFibGUhPC9saT4KCQkgKiAgICAgPGxpPidpJyAtIEluZm9ybWF0aW9uPC9saT4KCQkgKiAgICAgPGxpPidwJyAtIFBhZ2luYXRpb248L2xpPgoJCSAqICAgICA8bGk+J3InIC0gcFJvY2Vzc2luZzwvbGk+CgkJICogICA8L3VsPgoJCSAqICBAdHlwZSBhcnJheQoJCSAqICBAZGVmYXVsdCBbXQoJCSAqLwoJCSJhYW5GZWF0dXJlcyI6IFtdLAoJCgkJLyoqCgkJICogU3RvcmUgZGF0YSBpbmZvcm1hdGlvbiAtIHNlZSB7QGxpbmsgRGF0YVRhYmxlLm1vZGVscy5vUm93fSBmb3IgZGV0YWlsZWQKCQkgKiBpbmZvcm1hdGlvbi4KCQkgKiAgQHR5cGUgYXJyYXkKCQkgKiAgQGRlZmF1bHQgW10KCQkgKi8KCQkiYW9EYXRhIjogW10sCgkKCQkvKioKCQkgKiBBcnJheSBvZiBpbmRleGVzIHdoaWNoIGFyZSBpbiB0aGUgY3VycmVudCBkaXNwbGF5IChhZnRlciBmaWx0ZXJpbmcgZXRjKQoJCSAqICBAdHlwZSBhcnJheQoJCSAqICBAZGVmYXVsdCBbXQoJCSAqLwoJCSJhaURpc3BsYXkiOiBbXSwKCQoJCS8qKgoJCSAqIEFycmF5IG9mIGluZGV4ZXMgZm9yIGRpc3BsYXkgLSBubyBmaWx0ZXJpbmcKCQkgKiAgQHR5cGUgYXJyYXkKCQkgKiAgQGRlZmF1bHQgW10KCQkgKi8KCQkiYWlEaXNwbGF5TWFzdGVyIjogW10sCgkKCQkvKioKCQkgKiBNYXAgb2Ygcm93IGlkcyB0byBkYXRhIGluZGV4ZXMKCQkgKiAgQHR5cGUgb2JqZWN0CgkJICogIEBkZWZhdWx0IHt9CgkJICovCgkJImFJZHMiOiB7fSwKCQoJCS8qKgoJCSAqIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggY29sdW1uIHRoYXQgaXMgaW4gdXNlCgkJICogIEB0eXBlIGFycmF5CgkJICogIEBkZWZhdWx0IFtdCgkJICovCgkJImFvQ29sdW1ucyI6IFtdLAoJCgkJLyoqCgkJICogU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhYmxlJ3MgaGVhZGVyCgkJICogIEB0eXBlIGFycmF5CgkJICogIEBkZWZhdWx0IFtdCgkJICovCgkJImFvSGVhZGVyIjogW10sCgkKCQkvKioKCQkgKiBTdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGFibGUncyBmb290ZXIKCQkgKiAgQHR5cGUgYXJyYXkKCQkgKiAgQGRlZmF1bHQgW10KCQkgKi8KCQkiYW9Gb290ZXIiOiBbXSwKCQoJCS8qKgoJCSAqIFN0b3JlIHRoZSBhcHBsaWVkIGdsb2JhbCBzZWFyY2ggaW5mb3JtYXRpb24gaW4gY2FzZSB3ZSB3YW50IHRvIGZvcmNlIGEKCQkgKiByZXNlYXJjaCBvciBjb21wYXJlIHRoZSBvbGQgc2VhcmNoIHRvIGEgbmV3IG9uZS4KCQkgKiBOb3RlIHRoYXQgdGhpcyBwYXJhbWV0ZXIgd2lsbCBiZSBzZXQgYnkgdGhlIGluaXRpYWxpc2F0aW9uIHJvdXRpbmUuIFRvCgkJICogc2V0IGEgZGVmYXVsdCB1c2Uge0BsaW5rIERhdGFUYWJsZS5kZWZhdWx0c30uCgkJICogIEBuYW1lc3BhY2UKCQkgKiAgQGV4dGVuZHMgRGF0YVRhYmxlLm1vZGVscy5vU2VhcmNoCgkJICovCgkJIm9QcmV2aW91c1NlYXJjaCI6IHt9LAoJCgkJLyoqCgkJICogU3RvcmUgdGhlIGFwcGxpZWQgc2VhcmNoIGZvciBlYWNoIGNvbHVtbiAtIHNlZQoJCSAqIHtAbGluayBEYXRhVGFibGUubW9kZWxzLm9TZWFyY2h9IGZvciB0aGUgZm9ybWF0IHRoYXQgaXMgdXNlZCBmb3IgdGhlCgkJICogZmlsdGVyaW5nIGluZm9ybWF0aW9uIGZvciBlYWNoIGNvbHVtbi4KCQkgKiAgQHR5cGUgYXJyYXkKCQkgKiAgQGRlZmF1bHQgW10KCQkgKi8KCQkiYW9QcmVTZWFyY2hDb2xzIjogW10sCgkKCQkvKioKCQkgKiBTb3J0aW5nIHRoYXQgaXMgYXBwbGllZCB0byB0aGUgdGFibGUuIE5vdGUgdGhhdCB0aGUgaW5uZXIgYXJyYXlzIGFyZQoJCSAqIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXI6CgkJICogPHVsPgoJCSAqICAgPGxpPkluZGV4IDAgLSBjb2x1bW4gbnVtYmVyPC9saT4KCQkgKiAgIDxsaT5JbmRleCAxIC0gY3VycmVudCBzb3J0aW5nIGRpcmVjdGlvbjwvbGk+CgkJICogPC91bD4KCQkgKiBOb3RlIHRoYXQgdGhpcyBwYXJhbWV0ZXIgd2lsbCBiZSBzZXQgYnkgdGhlIGluaXRpYWxpc2F0aW9uIHJvdXRpbmUuIFRvCgkJICogc2V0IGEgZGVmYXVsdCB1c2Uge0BsaW5rIERhdGFUYWJsZS5kZWZhdWx0c30uCgkJICogIEB0eXBlIGFycmF5CgkJICogIEB0b2RvIFRoZXNlIGlubmVyIGFycmF5cyBzaG91bGQgcmVhbGx5IGJlIG9iamVjdHMKCQkgKi8KCQkiYWFTb3J0aW5nIjogbnVsbCwKCQoJCS8qKgoJCSAqIFNvcnRpbmcgdGhhdCBpcyBhbHdheXMgYXBwbGllZCB0byB0aGUgdGFibGUgKGkuZS4gcHJlZml4ZWQgaW4gZnJvbnQgb2YKCQkgKiBhYVNvcnRpbmcpLgoJCSAqIE5vdGUgdGhhdCB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIHNldCBieSB0aGUgaW5pdGlhbGlzYXRpb24gcm91dGluZS4gVG8KCQkgKiBzZXQgYSBkZWZhdWx0IHVzZSB7QGxpbmsgRGF0YVRhYmxlLmRlZmF1bHRzfS4KCQkgKiAgQHR5cGUgYXJyYXkKCQkgKiAgQGRlZmF1bHQgW10KCQkgKi8KCQkiYWFTb3J0aW5nRml4ZWQiOiBbXSwKCQoJCS8qKgoJCSAqIENsYXNzZXMgdG8gdXNlIGZvciB0aGUgc3RyaXBpbmcgb2YgYSB0YWJsZS4KCQkgKiBOb3RlIHRoYXQgdGhpcyBwYXJhbWV0ZXIgd2lsbCBiZSBzZXQgYnkgdGhlIGluaXRpYWxpc2F0aW9uIHJvdXRpbmUuIFRvCgkJICogc2V0IGEgZGVmYXVsdCB1c2Uge0BsaW5rIERhdGFUYWJsZS5kZWZhdWx0c30uCgkJICogIEB0eXBlIGFycmF5CgkJICogIEBkZWZhdWx0IFtdCgkJICovCgkJImFzU3RyaXBlQ2xhc3NlcyI6IG51bGwsCgkKCQkvKioKCQkgKiBJZiByZXN0b3JpbmcgYSB0YWJsZSAtIHdlIHNob3VsZCByZXN0b3JlIGl0cyBzdHJpcGluZyBjbGFzc2VzIGFzIHdlbGwKCQkgKiAgQHR5cGUgYXJyYXkKCQkgKiAgQGRlZmF1bHQgW10KCQkgKi8KCQkiYXNEZXN0cm95U3RyaXBlcyI6IFtdLAoJCgkJLyoqCgkJICogSWYgcmVzdG9yaW5nIGEgdGFibGUgLSB3ZSBzaG91bGQgcmVzdG9yZSBpdHMgd2lkdGgKCQkgKiAgQHR5cGUgaW50CgkJICogIEBkZWZhdWx0IDAKCQkgKi8KCQkic0Rlc3Ryb3lXaWR0aCI6IDAsCgkKCQkvKioKCQkgKiBDYWxsYmFjayBmdW5jdGlvbnMgYXJyYXkgZm9yIGV2ZXJ5IHRpbWUgYSByb3cgaXMgaW5zZXJ0ZWQgKGkuZS4gb24gYSBkcmF3KS4KCQkgKiAgQHR5cGUgYXJyYXkKCQkgKiAgQGRlZmF1bHQgW10KCQkgKi8KCQkiYW9Sb3dDYWxsYmFjayI6IFtdLAoJCgkJLyoqCgkJICogQ2FsbGJhY2sgZnVuY3Rpb25zIGZvciB0aGUgaGVhZGVyIG9uIGVhY2ggZHJhdy4KCQkgKiAgQHR5cGUgYXJyYXkKCQkgKiAgQGRlZmF1bHQgW10KCQkgKi8KCQkiYW9IZWFkZXJDYWxsYmFjayI6IFtdLAoJCgkJLyoqCgkJICogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBmb290ZXIgb24gZWFjaCBkcmF3LgoJCSAqICBAdHlwZSBhcnJheQoJCSAqICBAZGVmYXVsdCBbXQoJCSAqLwoJCSJhb0Zvb3RlckNhbGxiYWNrIjogW10sCgkKCQkvKioKCQkgKiBBcnJheSBvZiBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIGRyYXcgY2FsbGJhY2sgZnVuY3Rpb25zCgkJICogIEB0eXBlIGFycmF5CgkJICogIEBkZWZhdWx0IFtdCgkJICovCgkJImFvRHJhd0NhbGxiYWNrIjogW10sCgkKCQkvKioKCQkgKiBBcnJheSBvZiBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHJvdyBjcmVhdGVkIGZ1bmN0aW9uCgkJICogIEB0eXBlIGFycmF5CgkJICogIEBkZWZhdWx0IFtdCgkJICovCgkJImFvUm93Q3JlYXRlZENhbGxiYWNrIjogW10sCgkKCQkvKioKCQkgKiBDYWxsYmFjayBmdW5jdGlvbnMgZm9yIGp1c3QgYmVmb3JlIHRoZSB0YWJsZSBpcyByZWRyYXduLiBBIHJldHVybiBvZgoJCSAqIGZhbHNlIHdpbGwgYmUgdXNlZCB0byBjYW5jZWwgdGhlIGRyYXcuCgkJICogIEB0eXBlIGFycmF5CgkJICogIEBkZWZhdWx0IFtdCgkJICovCgkJImFvUHJlRHJhd0NhbGxiYWNrIjogW10sCgkKCQkvKioKCQkgKiBDYWxsYmFjayBmdW5jdGlvbnMgZm9yIHdoZW4gdGhlIHRhYmxlIGhhcyBiZWVuIGluaXRpYWxpc2VkLgoJCSAqICBAdHlwZSBhcnJheQoJCSAqICBAZGVmYXVsdCBbXQoJCSAqLwoJCSJhb0luaXRDb21wbGV0ZSI6IFtdLAoJCgkKCQkvKioKCQkgKiBDYWxsYmFja3MgZm9yIG1vZGlmeWluZyB0aGUgc2V0dGluZ3MgdG8gYmUgc3RvcmVkIGZvciBzdGF0ZSBzYXZpbmcsIHByaW9yIHRvCgkJICogc2F2aW5nIHN0YXRlLgoJCSAqICBAdHlwZSBhcnJheQoJCSAqICBAZGVmYXVsdCBbXQoJCSAqLwoJCSJhb1N0YXRlU2F2ZVBhcmFtcyI6IFtdLAoJCgkJLyoqCgkJICogQ2FsbGJhY2tzIGZvciBtb2RpZnlpbmcgdGhlIHNldHRpbmdzIHRoYXQgaGF2ZSBiZWVuIHN0b3JlZCBmb3Igc3RhdGUgc2F2aW5nCgkJICogcHJpb3IgdG8gdXNpbmcgdGhlIHN0b3JlZCB2YWx1ZXMgdG8gcmVzdG9yZSB0aGUgc3RhdGUuCgkJICogIEB0eXBlIGFycmF5CgkJICogIEBkZWZhdWx0IFtdCgkJICovCgkJImFvU3RhdGVMb2FkUGFyYW1zIjogW10sCgkKCQkvKioKCQkgKiBDYWxsYmFja3MgZm9yIG9wZXJhdGluZyBvbiB0aGUgc2V0dGluZ3Mgb2JqZWN0IG9uY2UgdGhlIHNhdmVkIHN0YXRlIGhhcyBiZWVuCgkJICogbG9hZGVkCgkJICogIEB0eXBlIGFycmF5CgkJICogIEBkZWZhdWx0IFtdCgkJICovCgkJImFvU3RhdGVMb2FkZWQiOiBbXSwKCQoJCS8qKgoJCSAqIENhY2hlIHRoZSB0YWJsZSBJRCBmb3IgcXVpY2sgYWNjZXNzCgkJICogIEB0eXBlIHN0cmluZwoJCSAqICBAZGVmYXVsdCA8aT5FbXB0eSBzdHJpbmc8L2k+CgkJICovCgkJInNUYWJsZUlkIjogIiIsCgkKCQkvKioKCQkgKiBUaGUgVEFCTEUgbm9kZSBmb3IgdGhlIG1haW4gdGFibGUKCQkgKiAgQHR5cGUgbm9kZQoJCSAqICBAZGVmYXVsdCBudWxsCgkJICovCgkJIm5UYWJsZSI6IG51bGwsCgkKCQkvKioKCQkgKiBQZXJtYW5lbnQgcmVmIHRvIHRoZSB0aGVhZCBlbGVtZW50CgkJICogIEB0eXBlIG5vZGUKCQkgKiAgQGRlZmF1bHQgbnVsbAoJCSAqLwoJCSJuVEhlYWQiOiBudWxsLAoJCgkJLyoqCgkJICogUGVybWFuZW50IHJlZiB0byB0aGUgdGZvb3QgZWxlbWVudCAtIGlmIGl0IGV4aXN0cwoJCSAqICBAdHlwZSBub2RlCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkiblRGb290IjogbnVsbCwKCQoJCS8qKgoJCSAqIFBlcm1hbmVudCByZWYgdG8gdGhlIHRib2R5IGVsZW1lbnQKCQkgKiAgQHR5cGUgbm9kZQoJCSAqICBAZGVmYXVsdCBudWxsCgkJICovCgkJIm5UQm9keSI6IG51bGwsCgkKCQkvKioKCQkgKiBDYWNoZSB0aGUgd3JhcHBlciBub2RlIChjb250YWlucyBhbGwgRGF0YVRhYmxlcyBjb250cm9sbGVkIGVsZW1lbnRzKQoJCSAqICBAdHlwZSBub2RlCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkiblRhYmxlV3JhcHBlciI6IG51bGwsCgkKCQkvKioKCQkgKiBJbmRpY2F0ZSBpZiB3aGVuIHVzaW5nIHNlcnZlci1zaWRlIHByb2Nlc3NpbmcgdGhlIGxvYWRpbmcgb2YgZGF0YQoJCSAqIHNob3VsZCBiZSBkZWZlcnJlZCB1bnRpbCB0aGUgc2Vjb25kIGRyYXcuCgkJICogTm90ZSB0aGF0IHRoaXMgcGFyYW1ldGVyIHdpbGwgYmUgc2V0IGJ5IHRoZSBpbml0aWFsaXNhdGlvbiByb3V0aW5lLiBUbwoJCSAqIHNldCBhIGRlZmF1bHQgdXNlIHtAbGluayBEYXRhVGFibGUuZGVmYXVsdHN9LgoJCSAqICBAdHlwZSBib29sZWFuCgkJICogIEBkZWZhdWx0IGZhbHNlCgkJICovCgkJImJEZWZlckxvYWRpbmciOiBmYWxzZSwKCQoJCS8qKgoJCSAqIEluZGljYXRlIGlmIGFsbCByZXF1aXJlZCBpbmZvcm1hdGlvbiBoYXMgYmVlbiByZWFkIGluCgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKiAgQGRlZmF1bHQgZmFsc2UKCQkgKi8KCQkiYkluaXRpYWxpc2VkIjogZmFsc2UsCgkKCQkvKioKCQkgKiBJbmZvcm1hdGlvbiBhYm91dCBvcGVuIHJvd3MuIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheSBoYXMgdGhlIHBhcmFtZXRlcnMKCQkgKiAnblRyJyBhbmQgJ25QYXJlbnQnCgkJICogIEB0eXBlIGFycmF5CgkJICogIEBkZWZhdWx0IFtdCgkJICovCgkJImFvT3BlblJvd3MiOiBbXSwKCQoJCS8qKgoJCSAqIERpY3RhdGUgdGhlIHBvc2l0aW9uaW5nIG9mIERhdGFUYWJsZXMnIGNvbnRyb2wgZWxlbWVudHMgLSBzZWUKCQkgKiB7QGxpbmsgRGF0YVRhYmxlLm1vZGVsLm9Jbml0LnNEb219LgoJCSAqIE5vdGUgdGhhdCB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIHNldCBieSB0aGUgaW5pdGlhbGlzYXRpb24gcm91dGluZS4gVG8KCQkgKiBzZXQgYSBkZWZhdWx0IHVzZSB7QGxpbmsgRGF0YVRhYmxlLmRlZmF1bHRzfS4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkic0RvbSI6IG51bGwsCgkKCQkvKioKCQkgKiBTZWFyY2ggZGVsYXkgKGluIG1TKQoJCSAqICBAdHlwZSBpbnRlZ2VyCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkic2VhcmNoRGVsYXkiOiBudWxsLAoJCgkJLyoqCgkJICogV2hpY2ggdHlwZSBvZiBwYWdpbmF0aW9uIHNob3VsZCBiZSB1c2VkLgoJCSAqIE5vdGUgdGhhdCB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIHNldCBieSB0aGUgaW5pdGlhbGlzYXRpb24gcm91dGluZS4gVG8KCQkgKiBzZXQgYSBkZWZhdWx0IHVzZSB7QGxpbmsgRGF0YVRhYmxlLmRlZmF1bHRzfS4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IHR3b19idXR0b24KCQkgKi8KCQkic1BhZ2luYXRpb25UeXBlIjogInR3b19idXR0b24iLAoJCgkJLyoqCgkJICogVGhlIHN0YXRlIGR1cmF0aW9uIChmb3IgYHN0YXRlU2F2ZWApIGluIHNlY29uZHMuCgkJICogTm90ZSB0aGF0IHRoaXMgcGFyYW1ldGVyIHdpbGwgYmUgc2V0IGJ5IHRoZSBpbml0aWFsaXNhdGlvbiByb3V0aW5lLiBUbwoJCSAqIHNldCBhIGRlZmF1bHQgdXNlIHtAbGluayBEYXRhVGFibGUuZGVmYXVsdHN9LgoJCSAqICBAdHlwZSBpbnQKCQkgKiAgQGRlZmF1bHQgMAoJCSAqLwoJCSJpU3RhdGVEdXJhdGlvbiI6IDAsCgkKCQkvKioKCQkgKiBBcnJheSBvZiBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHN0YXRlIHNhdmluZy4gRWFjaCBhcnJheSBlbGVtZW50IGlzIGFuCgkJICogb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgoJCSAqICAgPHVsPgoJCSAqICAgICA8bGk+ZnVuY3Rpb246Zm4gLSBmdW5jdGlvbiB0byBjYWxsLiBUYWtlcyB0d28gcGFyYW1ldGVycywgb1NldHRpbmdzCgkJICogICAgICAgYW5kIHRoZSBKU09OIHN0cmluZyB0byBzYXZlIHRoYXQgaGFzIGJlZW4gdGh1cyBmYXIgY3JlYXRlZC4gUmV0dXJucwoJCSAqICAgICAgIGEgSlNPTiBzdHJpbmcgdG8gYmUgaW5zZXJ0ZWQgaW50byBhIGpzb24gb2JqZWN0CgkJICogICAgICAgKGkuZS4gJyJwYXJhbSI6IFsgMCwgMSwgMl0nKTwvbGk+CgkJICogICAgIDxsaT5zdHJpbmc6c05hbWUgLSBuYW1lIG9mIGNhbGxiYWNrPC9saT4KCQkgKiAgIDwvdWw+CgkJICogIEB0eXBlIGFycmF5CgkJICogIEBkZWZhdWx0IFtdCgkJICovCgkJImFvU3RhdGVTYXZlIjogW10sCgkKCQkvKioKCQkgKiBBcnJheSBvZiBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHN0YXRlIGxvYWRpbmcuIEVhY2ggYXJyYXkgZWxlbWVudCBpcyBhbgoJCSAqIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKCQkgKiAgIDx1bD4KCQkgKiAgICAgPGxpPmZ1bmN0aW9uOmZuIC0gZnVuY3Rpb24gdG8gY2FsbC4gVGFrZXMgdHdvIHBhcmFtZXRlcnMsIG9TZXR0aW5ncwoJCSAqICAgICAgIGFuZCB0aGUgb2JqZWN0IHN0b3JlZC4gTWF5IHJldHVybiBmYWxzZSB0byBjYW5jZWwgc3RhdGUgbG9hZGluZzwvbGk+CgkJICogICAgIDxsaT5zdHJpbmc6c05hbWUgLSBuYW1lIG9mIGNhbGxiYWNrPC9saT4KCQkgKiAgIDwvdWw+CgkJICogIEB0eXBlIGFycmF5CgkJICogIEBkZWZhdWx0IFtdCgkJICovCgkJImFvU3RhdGVMb2FkIjogW10sCgkKCQkvKioKCQkgKiBTdGF0ZSB0aGF0IHdhcyBzYXZlZC4gVXNlZnVsIGZvciBiYWNrIHJlZmVyZW5jZQoJCSAqICBAdHlwZSBvYmplY3QKCQkgKiAgQGRlZmF1bHQgbnVsbAoJCSAqLwoJCSJvU2F2ZWRTdGF0ZSI6IG51bGwsCgkKCQkvKioKCQkgKiBTdGF0ZSB0aGF0IHdhcyBsb2FkZWQuIFVzZWZ1bCBmb3IgYmFjayByZWZlcmVuY2UKCQkgKiAgQHR5cGUgb2JqZWN0CgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkib0xvYWRlZFN0YXRlIjogbnVsbCwKCQoJCS8qKgoJCSAqIFNvdXJjZSB1cmwgZm9yIEFKQVggZGF0YSBmb3IgdGhlIHRhYmxlLgoJCSAqIE5vdGUgdGhhdCB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIHNldCBieSB0aGUgaW5pdGlhbGlzYXRpb24gcm91dGluZS4gVG8KCQkgKiBzZXQgYSBkZWZhdWx0IHVzZSB7QGxpbmsgRGF0YVRhYmxlLmRlZmF1bHRzfS4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkic0FqYXhTb3VyY2UiOiBudWxsLAoJCgkJLyoqCgkJICogUHJvcGVydHkgZnJvbSBhIGdpdmVuIG9iamVjdCBmcm9tIHdoaWNoIHRvIHJlYWQgdGhlIHRhYmxlIGRhdGEgZnJvbS4gVGhpcwoJCSAqIGNhbiBiZSBhbiBlbXB0eSBzdHJpbmcgKHdoZW4gbm90IHNlcnZlci1zaWRlIHByb2Nlc3NpbmcpLCBpbiB3aGljaCBjYXNlCgkJICogaXQgaXMgIGFzc3VtZWQgYW4gYW4gYXJyYXkgaXMgZ2l2ZW4gZGlyZWN0bHkuCgkJICogTm90ZSB0aGF0IHRoaXMgcGFyYW1ldGVyIHdpbGwgYmUgc2V0IGJ5IHRoZSBpbml0aWFsaXNhdGlvbiByb3V0aW5lLiBUbwoJCSAqIHNldCBhIGRlZmF1bHQgdXNlIHtAbGluayBEYXRhVGFibGUuZGVmYXVsdHN9LgoJCSAqICBAdHlwZSBzdHJpbmcKCQkgKi8KCQkic0FqYXhEYXRhUHJvcCI6IG51bGwsCgkKCQkvKioKCQkgKiBOb3RlIGlmIGRyYXcgc2hvdWxkIGJlIGJsb2NrZWQgd2hpbGUgZ2V0dGluZyBkYXRhCgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKiAgQGRlZmF1bHQgdHJ1ZQoJCSAqLwoJCSJiQWpheERhdGFHZXQiOiB0cnVlLAoJCgkJLyoqCgkJICogVGhlIGxhc3QgalF1ZXJ5IFhIUiBvYmplY3QgdGhhdCB3YXMgdXNlZCBmb3Igc2VydmVyLXNpZGUgZGF0YSBnYXRoZXJpbmcuCgkJICogVGhpcyBjYW4gYmUgdXNlZCBmb3Igd29ya2luZyB3aXRoIHRoZSBYSFIgaW5mb3JtYXRpb24gaW4gb25lIG9mIHRoZQoJCSAqIGNhbGxiYWNrcwoJCSAqICBAdHlwZSBvYmplY3QKCQkgKiAgQGRlZmF1bHQgbnVsbAoJCSAqLwoJCSJqcVhIUiI6IG51bGwsCgkKCQkvKioKCQkgKiBKU09OIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciBpbiB0aGUgbGFzdCBBamF4IHJlcXVlc3QKCQkgKiAgQHR5cGUgb2JqZWN0CgkJICogIEBkZWZhdWx0IHVuZGVmaW5lZAoJCSAqLwoJCSJqc29uIjogdW5kZWZpbmVkLAoJCgkJLyoqCgkJICogRGF0YSBzdWJtaXR0ZWQgYXMgcGFydCBvZiB0aGUgbGFzdCBBamF4IHJlcXVlc3QKCQkgKiAgQHR5cGUgb2JqZWN0CgkJICogIEBkZWZhdWx0IHVuZGVmaW5lZAoJCSAqLwoJCSJvQWpheERhdGEiOiB1bmRlZmluZWQsCgkKCQkvKioKCQkgKiBGdW5jdGlvbiB0byBnZXQgdGhlIHNlcnZlci1zaWRlIGRhdGEuCgkJICogTm90ZSB0aGF0IHRoaXMgcGFyYW1ldGVyIHdpbGwgYmUgc2V0IGJ5IHRoZSBpbml0aWFsaXNhdGlvbiByb3V0aW5lLiBUbwoJCSAqIHNldCBhIGRlZmF1bHQgdXNlIHtAbGluayBEYXRhVGFibGUuZGVmYXVsdHN9LgoJCSAqICBAdHlwZSBmdW5jdGlvbgoJCSAqLwoJCSJmblNlcnZlckRhdGEiOiBudWxsLAoJCgkJLyoqCgkJICogRnVuY3Rpb25zIHdoaWNoIGFyZSBjYWxsZWQgcHJpb3IgdG8gc2VuZGluZyBhbiBBamF4IHJlcXVlc3Qgc28gZXh0cmEKCQkgKiBwYXJhbWV0ZXJzIGNhbiBlYXNpbHkgYmUgc2VudCB0byB0aGUgc2VydmVyCgkJICogIEB0eXBlIGFycmF5CgkJICogIEBkZWZhdWx0IFtdCgkJICovCgkJImFvU2VydmVyUGFyYW1zIjogW10sCgkKCQkvKioKCQkgKiBTZW5kIHRoZSBYSFIgSFRUUCBtZXRob2QgLSBHRVQgb3IgUE9TVCAoY291bGQgYmUgUFVUIG9yIERFTEVURSBpZgoJCSAqIHJlcXVpcmVkKS4KCQkgKiBOb3RlIHRoYXQgdGhpcyBwYXJhbWV0ZXIgd2lsbCBiZSBzZXQgYnkgdGhlIGluaXRpYWxpc2F0aW9uIHJvdXRpbmUuIFRvCgkJICogc2V0IGEgZGVmYXVsdCB1c2Uge0BsaW5rIERhdGFUYWJsZS5kZWZhdWx0c30uCgkJICogIEB0eXBlIHN0cmluZwoJCSAqLwoJCSJzU2VydmVyTWV0aG9kIjogbnVsbCwKCQoJCS8qKgoJCSAqIEZvcm1hdCBudW1iZXJzIGZvciBkaXNwbGF5LgoJCSAqIE5vdGUgdGhhdCB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIHNldCBieSB0aGUgaW5pdGlhbGlzYXRpb24gcm91dGluZS4gVG8KCQkgKiBzZXQgYSBkZWZhdWx0IHVzZSB7QGxpbmsgRGF0YVRhYmxlLmRlZmF1bHRzfS4KCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKi8KCQkiZm5Gb3JtYXROdW1iZXIiOiBudWxsLAoJCgkJLyoqCgkJICogTGlzdCBvZiBvcHRpb25zIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHRoZSB1c2VyIHNlbGVjdGFibGUgbGVuZ3RoIG1lbnUuCgkJICogTm90ZSB0aGF0IHRoaXMgcGFyYW1ldGVyIHdpbGwgYmUgc2V0IGJ5IHRoZSBpbml0aWFsaXNhdGlvbiByb3V0aW5lLiBUbwoJCSAqIHNldCBhIGRlZmF1bHQgdXNlIHtAbGluayBEYXRhVGFibGUuZGVmYXVsdHN9LgoJCSAqICBAdHlwZSBhcnJheQoJCSAqICBAZGVmYXVsdCBbXQoJCSAqLwoJCSJhTGVuZ3RoTWVudSI6IG51bGwsCgkKCQkvKioKCQkgKiBDb3VudGVyIGZvciB0aGUgZHJhd3MgdGhhdCB0aGUgdGFibGUgZG9lcy4gQWxzbyB1c2VkIGFzIGEgdHJhY2tlciBmb3IKCQkgKiBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nCgkJICogIEB0eXBlIGludAoJCSAqICBAZGVmYXVsdCAwCgkJICovCgkJImlEcmF3IjogMCwKCQoJCS8qKgoJCSAqIEluZGljYXRlIGlmIGEgcmVkcmF3IGlzIGJlaW5nIGRvbmUgLSB1c2VmdWwgZm9yIEFqYXgKCQkgKiAgQHR5cGUgYm9vbGVhbgoJCSAqICBAZGVmYXVsdCBmYWxzZQoJCSAqLwoJCSJiRHJhd2luZyI6IGZhbHNlLAoJCgkJLyoqCgkJICogRHJhdyBpbmRleCAoaURyYXcpIG9mIHRoZSBsYXN0IGVycm9yIHdoZW4gcGFyc2luZyB0aGUgcmV0dXJuZWQgZGF0YQoJCSAqICBAdHlwZSBpbnQKCQkgKiAgQGRlZmF1bHQgLTEKCQkgKi8KCQkiaURyYXdFcnJvciI6IC0xLAoJCgkJLyoqCgkJICogUGFnaW5nIGRpc3BsYXkgbGVuZ3RoCgkJICogIEB0eXBlIGludAoJCSAqICBAZGVmYXVsdCAxMAoJCSAqLwoJCSJfaURpc3BsYXlMZW5ndGgiOiAxMCwKCQoJCS8qKgoJCSAqIFBhZ2luZyBzdGFydCBwb2ludCAtIGFpRGlzcGxheSBpbmRleAoJCSAqICBAdHlwZSBpbnQKCQkgKiAgQGRlZmF1bHQgMAoJCSAqLwoJCSJfaURpc3BsYXlTdGFydCI6IDAsCgkKCQkvKioKCQkgKiBTZXJ2ZXItc2lkZSBwcm9jZXNzaW5nIC0gbnVtYmVyIG9mIHJlY29yZHMgaW4gdGhlIHJlc3VsdCBzZXQKCQkgKiAoaS5lLiBiZWZvcmUgZmlsdGVyaW5nKSwgVXNlIGZuUmVjb3Jkc1RvdGFsIHJhdGhlciB0aGFuCgkJICogdGhpcyBwcm9wZXJ0eSB0byBnZXQgdGhlIHZhbHVlIG9mIHRoZSBudW1iZXIgb2YgcmVjb3JkcywgcmVnYXJkbGVzcyBvZgoJCSAqIHRoZSBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nIHNldHRpbmcuCgkJICogIEB0eXBlIGludAoJCSAqICBAZGVmYXVsdCAwCgkJICogIEBwcml2YXRlCgkJICovCgkJIl9pUmVjb3Jkc1RvdGFsIjogMCwKCQoJCS8qKgoJCSAqIFNlcnZlci1zaWRlIHByb2Nlc3NpbmcgLSBudW1iZXIgb2YgcmVjb3JkcyBpbiB0aGUgY3VycmVudCBkaXNwbGF5IHNldAoJCSAqIChpLmUuIGFmdGVyIGZpbHRlcmluZykuIFVzZSBmblJlY29yZHNEaXNwbGF5IHJhdGhlciB0aGFuCgkJICogdGhpcyBwcm9wZXJ0eSB0byBnZXQgdGhlIHZhbHVlIG9mIHRoZSBudW1iZXIgb2YgcmVjb3JkcywgcmVnYXJkbGVzcyBvZgoJCSAqIHRoZSBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nIHNldHRpbmcuCgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKiAgQGRlZmF1bHQgMAoJCSAqICBAcHJpdmF0ZQoJCSAqLwoJCSJfaVJlY29yZHNEaXNwbGF5IjogMCwKCQoJCS8qKgoJCSAqIFRoZSBjbGFzc2VzIHRvIHVzZSBmb3IgdGhlIHRhYmxlCgkJICogIEB0eXBlIG9iamVjdAoJCSAqICBAZGVmYXVsdCB7fQoJCSAqLwoJCSJvQ2xhc3NlcyI6IHt9LAoJCgkJLyoqCgkJICogRmxhZyBhdHRhY2hlZCB0byB0aGUgc2V0dGluZ3Mgb2JqZWN0IHNvIHlvdSBjYW4gY2hlY2sgaW4gdGhlIGRyYXcKCQkgKiBjYWxsYmFjayBpZiBmaWx0ZXJpbmcgaGFzIGJlZW4gZG9uZSBpbiB0aGUgZHJhdy4gRGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YKCQkgKiBldmVudHMuCgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKiAgQGRlZmF1bHQgZmFsc2UKCQkgKiAgQGRlcHJlY2F0ZWQKCQkgKi8KCQkiYkZpbHRlcmVkIjogZmFsc2UsCgkKCQkvKioKCQkgKiBGbGFnIGF0dGFjaGVkIHRvIHRoZSBzZXR0aW5ncyBvYmplY3Qgc28geW91IGNhbiBjaGVjayBpbiB0aGUgZHJhdwoJCSAqIGNhbGxiYWNrIGlmIHNvcnRpbmcgaGFzIGJlZW4gZG9uZSBpbiB0aGUgZHJhdy4gRGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YKCQkgKiBldmVudHMuCgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKiAgQGRlZmF1bHQgZmFsc2UKCQkgKiAgQGRlcHJlY2F0ZWQKCQkgKi8KCQkiYlNvcnRlZCI6IGZhbHNlLAoJCgkJLyoqCgkJICogSW5kaWNhdGUgdGhhdCBpZiBtdWx0aXBsZSByb3dzIGFyZSBpbiB0aGUgaGVhZGVyIGFuZCB0aGVyZSBpcyBtb3JlIHRoYW4KCQkgKiBvbmUgdW5pcXVlIGNlbGwgcGVyIGNvbHVtbiwgaWYgdGhlIHRvcCBvbmUgKHRydWUpIG9yIGJvdHRvbSBvbmUgKGZhbHNlKQoJCSAqIHNob3VsZCBiZSB1c2VkIGZvciBzb3J0aW5nIC8gdGl0bGUgYnkgRGF0YVRhYmxlcy4KCQkgKiBOb3RlIHRoYXQgdGhpcyBwYXJhbWV0ZXIgd2lsbCBiZSBzZXQgYnkgdGhlIGluaXRpYWxpc2F0aW9uIHJvdXRpbmUuIFRvCgkJICogc2V0IGEgZGVmYXVsdCB1c2Uge0BsaW5rIERhdGFUYWJsZS5kZWZhdWx0c30uCgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKi8KCQkiYlNvcnRDZWxsc1RvcCI6IG51bGwsCgkKCQkvKioKCQkgKiBJbml0aWFsaXNhdGlvbiBvYmplY3QgdGhhdCBpcyB1c2VkIGZvciB0aGUgdGFibGUKCQkgKiAgQHR5cGUgb2JqZWN0CgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkib0luaXQiOiBudWxsLAoJCgkJLyoqCgkJICogRGVzdHJveSBjYWxsYmFjayBmdW5jdGlvbnMgLSBmb3IgcGx1Zy1pbnMgdG8gYXR0YWNoIHRoZW1zZWx2ZXMgdG8gdGhlCgkJICogZGVzdHJveSBzbyB0aGV5IGNhbiBjbGVhbiB1cCBtYXJrdXAgYW5kIGV2ZW50cy4KCQkgKiAgQHR5cGUgYXJyYXkKCQkgKiAgQGRlZmF1bHQgW10KCQkgKi8KCQkiYW9EZXN0cm95Q2FsbGJhY2siOiBbXSwKCQoJCgkJLyoqCgkJICogR2V0IHRoZSBudW1iZXIgb2YgcmVjb3JkcyBpbiB0aGUgY3VycmVudCByZWNvcmQgc2V0LCBiZWZvcmUgZmlsdGVyaW5nCgkJICogIEB0eXBlIGZ1bmN0aW9uCgkJICovCgkJImZuUmVjb3Jkc1RvdGFsIjogZnVuY3Rpb24gKCkKCQl7CgkJCXJldHVybiBfZm5EYXRhU291cmNlKCB0aGlzICkgPT0gJ3NzcCcgPwoJCQkJdGhpcy5faVJlY29yZHNUb3RhbCAqIDEgOgoJCQkJdGhpcy5haURpc3BsYXlNYXN0ZXIubGVuZ3RoOwoJCX0sCgkKCQkvKioKCQkgKiBHZXQgdGhlIG51bWJlciBvZiByZWNvcmRzIGluIHRoZSBjdXJyZW50IHJlY29yZCBzZXQsIGFmdGVyIGZpbHRlcmluZwoJCSAqICBAdHlwZSBmdW5jdGlvbgoJCSAqLwoJCSJmblJlY29yZHNEaXNwbGF5IjogZnVuY3Rpb24gKCkKCQl7CgkJCXJldHVybiBfZm5EYXRhU291cmNlKCB0aGlzICkgPT0gJ3NzcCcgPwoJCQkJdGhpcy5faVJlY29yZHNEaXNwbGF5ICogMSA6CgkJCQl0aGlzLmFpRGlzcGxheS5sZW5ndGg7CgkJfSwKCQoJCS8qKgoJCSAqIEdldCB0aGUgZGlzcGxheSBlbmQgcG9pbnQgLSBhaURpc3BsYXkgaW5kZXgKCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKi8KCQkiZm5EaXNwbGF5RW5kIjogZnVuY3Rpb24gKCkKCQl7CgkJCXZhcgoJCQkJbGVuICAgICAgPSB0aGlzLl9pRGlzcGxheUxlbmd0aCwKCQkJCXN0YXJ0ICAgID0gdGhpcy5faURpc3BsYXlTdGFydCwKCQkJCWNhbGMgICAgID0gc3RhcnQgKyBsZW4sCgkJCQlyZWNvcmRzICA9IHRoaXMuYWlEaXNwbGF5Lmxlbmd0aCwKCQkJCWZlYXR1cmVzID0gdGhpcy5vRmVhdHVyZXMsCgkJCQlwYWdpbmF0ZSA9IGZlYXR1cmVzLmJQYWdpbmF0ZTsKCQoJCQlpZiAoIGZlYXR1cmVzLmJTZXJ2ZXJTaWRlICkgewoJCQkJcmV0dXJuIHBhZ2luYXRlID09PSBmYWxzZSB8fCBsZW4gPT09IC0xID8KCQkJCQlzdGFydCArIHJlY29yZHMgOgoJCQkJCU1hdGgubWluKCBzdGFydCtsZW4sIHRoaXMuX2lSZWNvcmRzRGlzcGxheSApOwoJCQl9CgkJCWVsc2UgewoJCQkJcmV0dXJuICEgcGFnaW5hdGUgfHwgY2FsYz5yZWNvcmRzIHx8IGxlbj09PS0xID8KCQkJCQlyZWNvcmRzIDoKCQkJCQljYWxjOwoJCQl9CgkJfSwKCQoJCS8qKgoJCSAqIFRoZSBEYXRhVGFibGVzIG9iamVjdCBmb3IgdGhpcyB0YWJsZQoJCSAqICBAdHlwZSBvYmplY3QKCQkgKiAgQGRlZmF1bHQgbnVsbAoJCSAqLwoJCSJvSW5zdGFuY2UiOiBudWxsLAoJCgkJLyoqCgkJICogVW5pcXVlIGlkZW50aWZpZXIgZm9yIGVhY2ggaW5zdGFuY2Ugb2YgdGhlIERhdGFUYWJsZXMgb2JqZWN0LiBJZiB0aGVyZQoJCSAqIGlzIGFuIElEIG9uIHRoZSB0YWJsZSBub2RlLCB0aGVuIGl0IHRha2VzIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBhbgoJCSAqIGluY3JlbWVudGluZyBpbnRlcm5hbCBjb3VudGVyIGlzIHVzZWQuCgkJICogIEB0eXBlIHN0cmluZwoJCSAqICBAZGVmYXVsdCBudWxsCgkJICovCgkJInNJbnN0YW5jZSI6IG51bGwsCgkKCQkvKioKCQkgKiB0YWJpbmRleCBhdHRyaWJ1dGUgdmFsdWUgdGhhdCBpcyBhZGRlZCB0byBEYXRhVGFibGVzIGNvbnRyb2wgZWxlbWVudHMsIGFsbG93aW5nCgkJICoga2V5Ym9hcmQgbmF2aWdhdGlvbiBvZiB0aGUgdGFibGUgYW5kIGl0cyBjb250cm9scy4KCQkgKi8KCQkiaVRhYkluZGV4IjogMCwKCQoJCS8qKgoJCSAqIERJViBjb250YWluZXIgZm9yIHRoZSBmb290ZXIgc2Nyb2xsaW5nIHRhYmxlIGlmIHNjcm9sbGluZwoJCSAqLwoJCSJuU2Nyb2xsSGVhZCI6IG51bGwsCgkKCQkvKioKCQkgKiBESVYgY29udGFpbmVyIGZvciB0aGUgZm9vdGVyIHNjcm9sbGluZyB0YWJsZSBpZiBzY3JvbGxpbmcKCQkgKi8KCQkiblNjcm9sbEZvb3QiOiBudWxsLAoJCgkJLyoqCgkJICogTGFzdCBhcHBsaWVkIHNvcnQKCQkgKiAgQHR5cGUgYXJyYXkKCQkgKiAgQGRlZmF1bHQgW10KCQkgKi8KCQkiYUxhc3RTb3J0IjogW10sCgkKCQkvKioKCQkgKiBTdG9yZWQgcGx1Zy1pbiBpbnN0YW5jZXMKCQkgKiAgQHR5cGUgb2JqZWN0CgkJICogIEBkZWZhdWx0IHt9CgkJICovCgkJIm9QbHVnaW5zIjoge30sCgkKCQkvKioKCQkgKiBGdW5jdGlvbiB1c2VkIHRvIGdldCBhIHJvdydzIGlkIGZyb20gdGhlIHJvdydzIGRhdGEKCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKiAgQGRlZmF1bHQgbnVsbAoJCSAqLwoJCSJyb3dJZEZuIjogbnVsbCwKCQoJCS8qKgoJCSAqIERhdGEgbG9jYXRpb24gd2hlcmUgdG8gc3RvcmUgYSByb3cncyBpZAoJCSAqICBAdHlwZSBzdHJpbmcKCQkgKiAgQGRlZmF1bHQgbnVsbAoJCSAqLwoJCSJyb3dJZCI6IG51bGwKCX07CgoJLyoqCgkgKiBFeHRlbnNpb24gb2JqZWN0IGZvciBEYXRhVGFibGVzIHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIGFsbCBleHRlbnNpb24KCSAqIG9wdGlvbnMuCgkgKgoJICogTm90ZSB0aGF0IHRoZSBgRGF0YVRhYmxlLmV4dGAgb2JqZWN0IGlzIGF2YWlsYWJsZSB0aHJvdWdoCgkgKiBgalF1ZXJ5LmZuLmRhdGFUYWJsZS5leHRgIHdoZXJlIGl0IG1heSBiZSBhY2Nlc3NlZCBhbmQgbWFuaXB1bGF0ZWQuIEl0IGlzCgkgKiBhbHNvIGFsaWFzZWQgdG8gYGpRdWVyeS5mbi5kYXRhVGFibGVFeHRgIGZvciBoaXN0b3JpYyByZWFzb25zLgoJICogIEBuYW1lc3BhY2UKCSAqICBAZXh0ZW5kcyBEYXRhVGFibGUubW9kZWxzLmV4dAoJICovCgkKCQoJLyoqCgkgKiBEYXRhVGFibGVzIGV4dGVuc2lvbnMKCSAqIAoJICogVGhpcyBuYW1lc3BhY2UgYWN0cyBhcyBhIGNvbGxlY3Rpb24gYXJlYSBmb3IgcGx1Zy1pbnMgdGhhdCBjYW4gYmUgdXNlZCB0bwoJICogZXh0ZW5kIERhdGFUYWJsZXMgY2FwYWJpbGl0aWVzLiBJbmRlZWQgbWFueSBvZiB0aGUgYnVpbGQgaW4gbWV0aG9kcwoJICogdXNlIHRoaXMgbWV0aG9kIHRvIHByb3ZpZGUgdGhlaXIgb3duIGNhcGFiaWxpdGllcyAoc29ydGluZyBtZXRob2RzIGZvcgoJICogZXhhbXBsZSkuCgkgKgoJICogTm90ZSB0aGF0IHRoaXMgbmFtZXNwYWNlIGlzIGFsaWFzZWQgdG8gYGpRdWVyeS5mbi5kYXRhVGFibGVFeHRgIGZvciBsZWdhY3kKCSAqIHJlYXNvbnMKCSAqCgkgKiAgQG5hbWVzcGFjZQoJICovCglEYXRhVGFibGUuZXh0ID0gX2V4dCA9IHsKCQkvKioKCQkgKiBCdXR0b25zLiBGb3IgdXNlIHdpdGggdGhlIEJ1dHRvbnMgZXh0ZW5zaW9uIGZvciBEYXRhVGFibGVzLiBUaGlzIGlzCgkJICogZGVmaW5lZCBoZXJlIHNvIG90aGVyIGV4dGVuc2lvbnMgY2FuIGRlZmluZSBidXR0b25zIHJlZ2FyZGxlc3Mgb2YgbG9hZAoJCSAqIG9yZGVyLiBJdCBpcyBfbm90XyB1c2VkIGJ5IERhdGFUYWJsZXMgY29yZS4KCQkgKgoJCSAqICBAdHlwZSBvYmplY3QKCQkgKiAgQGRlZmF1bHQge30KCQkgKi8KCQlidXR0b25zOiB7fSwKCQoJCgkJLyoqCgkJICogRWxlbWVudCBjbGFzcyBuYW1lcwoJCSAqCgkJICogIEB0eXBlIG9iamVjdAoJCSAqICBAZGVmYXVsdCB7fQoJCSAqLwoJCWNsYXNzZXM6IHt9LAoJCgkKCQkvKioKCQkgKiBEYXRhVGFibGVzIGJ1aWxkIHR5cGUgKGV4cGFuZGVkIGJ5IHRoZSBkb3dubG9hZCBidWlsZGVyKQoJCSAqCgkJICogIEB0eXBlIHN0cmluZwoJCSAqLwoJCWJ1aWxkOiJiczQvanN6aXAtMi41LjAvZHQtMS4xMC4yMC9iLTEuNi4xL2ItY29sdmlzLTEuNi4xL2ItZmxhc2gtMS42LjEvYi1odG1sNS0xLjYuMS9iLXByaW50LTEuNi4xL2NyLTEuNS4yL2ZjLTMuMy4wL2ZoLTMuMS42L2t0LTIuNS4xL3ItMi4yLjMvcmctMS4xLjEvcnItMS4yLjYvc2MtMi4wLjEvc3AtMS4wLjEvc2wtMS4zLjEiLAoJCgkKCQkvKioKCQkgKiBFcnJvciByZXBvcnRpbmcuCgkJICogCgkJICogSG93IHNob3VsZCBEYXRhVGFibGVzIHJlcG9ydCBhbiBlcnJvci4gQ2FuIHRha2UgdGhlIHZhbHVlICdhbGVydCcsCgkJICogJ3Rocm93JywgJ25vbmUnIG9yIGEgZnVuY3Rpb24uCgkJICoKCQkgKiAgQHR5cGUgc3RyaW5nfGZ1bmN0aW9uCgkJICogIEBkZWZhdWx0IGFsZXJ0CgkJICovCgkJZXJyTW9kZTogImFsZXJ0IiwKCQoJCgkJLyoqCgkJICogRmVhdHVyZSBwbHVnLWlucy4KCQkgKiAKCQkgKiBUaGlzIGlzIGFuIGFycmF5IG9mIG9iamVjdHMgd2hpY2ggZGVzY3JpYmUgdGhlIGZlYXR1cmUgcGx1Zy1pbnMgdGhhdCBhcmUKCQkgKiBhdmFpbGFibGUgdG8gRGF0YVRhYmxlcy4gVGhlc2UgZmVhdHVyZSBwbHVnLWlucyBhcmUgdGhlbiBhdmFpbGFibGUgZm9yCgkJICogdXNlIHRocm91Z2ggdGhlIGBkb21gIGluaXRpYWxpc2F0aW9uIG9wdGlvbi4KCQkgKiAKCQkgKiBFYWNoIGZlYXR1cmUgcGx1Zy1pbiBpcyBkZXNjcmliZWQgYnkgYW4gb2JqZWN0IHdoaWNoIG11c3QgaGF2ZSB0aGUKCQkgKiBmb2xsb3dpbmcgcHJvcGVydGllczoKCQkgKiAKCQkgKiAqIGBmbkluaXRgIC0gZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHRvIGluaXRpYWxpc2UgdGhlIHBsdWctaW4sCgkJICogKiBgY0ZlYXR1cmVgIC0gYSBjaGFyYWN0ZXIgc28gdGhlIGZlYXR1cmUgY2FuIGJlIGVuYWJsZWQgYnkgdGhlIGBkb21gCgkJICogICBpbnN0aWxsYXRpb24gb3B0aW9uLiBUaGlzIGlzIGNhc2Ugc2Vuc2l0aXZlLgoJCSAqCgkJICogVGhlIGBmbkluaXRgIGZ1bmN0aW9uIGhhcyB0aGUgZm9sbG93aW5nIGlucHV0IHBhcmFtZXRlcnM6CgkJICoKCQkgKiAxLiBge29iamVjdH1gIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0OiBzZWUKCQkgKiAgICB7QGxpbmsgRGF0YVRhYmxlLm1vZGVscy5vU2V0dGluZ3N9CgkJICoKCQkgKiBBbmQgdGhlIGZvbGxvd2luZyByZXR1cm4gaXMgZXhwZWN0ZWQ6CgkJICogCgkJICogKiB7bm9kZXxudWxsfSBUaGUgZWxlbWVudCB3aGljaCBjb250YWlucyB5b3VyIGZlYXR1cmUuIE5vdGUgdGhhdCB0aGUKCQkgKiAgIHJldHVybiBtYXkgYWxzbyBiZSB2b2lkIGlmIHlvdXIgcGx1Zy1pbiBkb2VzIG5vdCByZXF1aXJlIHRvIGluamVjdCBhbnkKCQkgKiAgIERPTSBlbGVtZW50cyBpbnRvIERhdGFUYWJsZXMgY29udHJvbCAoYGRvbWApIC0gZm9yIGV4YW1wbGUgdGhpcyBtaWdodAoJCSAqICAgYmUgdXNlZnVsIHdoZW4gZGV2ZWxvcGluZyBhIHBsdWctaW4gd2hpY2ggYWxsb3dzIHRhYmxlIGNvbnRyb2wgdmlhCgkJICogICBrZXlib2FyZCBlbnRyeQoJCSAqCgkJICogIEB0eXBlIGFycmF5CgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkLmZuLmRhdGFUYWJsZS5leHQuZmVhdHVyZXMucHVzaCggewoJCSAqICAgICAgImZuSW5pdCI6IGZ1bmN0aW9uKCBvU2V0dGluZ3MgKSB7CgkJICogICAgICAgIHJldHVybiBuZXcgVGFibGVUb29scyggeyAib0RUU2V0dGluZ3MiOiBvU2V0dGluZ3MgfSApOwoJCSAqICAgICAgfSwKCQkgKiAgICAgICJjRmVhdHVyZSI6ICJUIgoJCSAqICAgIH0gKTsKCQkgKi8KCQlmZWF0dXJlOiBbXSwKCQoJCgkJLyoqCgkJICogUm93IHNlYXJjaGluZy4KCQkgKiAKCQkgKiBUaGlzIG1ldGhvZCBvZiBzZWFyY2hpbmcgaXMgY29tcGxpbWVudGFyeSB0byB0aGUgZGVmYXVsdCB0eXBlIGJhc2VkCgkJICogc2VhcmNoaW5nLCBhbmQgYSBsb3QgbW9yZSBjb21wcmVoZW5zaXZlIGFzIGl0IGFsbG93cyB5b3UgY29tcGxldGUgY29udHJvbAoJCSAqIG92ZXIgdGhlIHNlYXJjaGluZyBsb2dpYy4gRWFjaCBlbGVtZW50IGluIHRoaXMgYXJyYXkgaXMgYSBmdW5jdGlvbgoJCSAqIChwYXJhbWV0ZXJzIGRlc2NyaWJlZCBiZWxvdykgdGhhdCBpcyBjYWxsZWQgZm9yIGV2ZXJ5IHJvdyBpbiB0aGUgdGFibGUsCgkJICogYW5kIHlvdXIgbG9naWMgZGVjaWRlcyBpZiBpdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHNlYXJjaGluZyBkYXRhIHNldAoJCSAqIG9yIG5vdC4KCQkgKgoJCSAqIFNlYXJjaGluZyBmdW5jdGlvbnMgaGF2ZSB0aGUgZm9sbG93aW5nIGlucHV0IHBhcmFtZXRlcnM6CgkJICoKCQkgKiAxLiBge29iamVjdH1gIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0OiBzZWUKCQkgKiAgICB7QGxpbmsgRGF0YVRhYmxlLm1vZGVscy5vU2V0dGluZ3N9CgkJICogMi4gYHthcnJheXxvYmplY3R9YCBEYXRhIGZvciB0aGUgcm93IHRvIGJlIHByb2Nlc3NlZCAoc2FtZSBhcyB0aGUKCQkgKiAgICBvcmlnaW5hbCBmb3JtYXQgdGhhdCB3YXMgcGFzc2VkIGluIGFzIHRoZSBkYXRhIHNvdXJjZSwgb3IgYW4gYXJyYXkKCQkgKiAgICBmcm9tIGEgRE9NIGRhdGEgc291cmNlCgkJICogMy4gYHtpbnR9YCBSb3cgaW5kZXggKHtAbGluayBEYXRhVGFibGUubW9kZWxzLm9TZXR0aW5ncy5hb0RhdGF9KSwgd2hpY2gKCQkgKiAgICBjYW4gYmUgdXNlZnVsIHRvIHJldHJpZXZlIHRoZSBgVFJgIGVsZW1lbnQgaWYgeW91IG5lZWQgRE9NIGludGVyYWN0aW9uLgoJCSAqCgkJICogQW5kIHRoZSBmb2xsb3dpbmcgcmV0dXJuIGlzIGV4cGVjdGVkOgoJCSAqCgkJICogKiB7Ym9vbGVhbn0gSW5jbHVkZSB0aGUgcm93IGluIHRoZSBzZWFyY2hlZCByZXN1bHQgc2V0ICh0cnVlKSBvciBub3QKCQkgKiAgIChmYWxzZSkKCQkgKgoJCSAqIE5vdGUgdGhhdCBhcyB3aXRoIHRoZSBtYWluIHNlYXJjaCBhYmlsaXR5IGluIERhdGFUYWJsZXMsIHRlY2huaWNhbGx5IHRoaXMKCQkgKiBpcyAiZmlsdGVyaW5nIiwgc2luY2UgaXQgaXMgc3VidHJhY3RpdmUuIEhvd2V2ZXIsIGZvciBjb25zaXN0ZW5jeSBpbgoJCSAqIG5hbWluZyB3ZSBjYWxsIGl0IHNlYXJjaGluZyBoZXJlLgoJCSAqCgkJICogIEB0eXBlIGFycmF5CgkJICogIEBkZWZhdWx0IFtdCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgY3VzdG9tIHNlYXJjaCBiZWluZyBhcHBsaWVkIHRvIHRoZQoJCSAqICAgIC8vIGZvdXJ0aCBjb2x1bW4gKGkuZS4gdGhlIGRhdGFbM10gaW5kZXgpIGJhc2VkIG9uIHR3byBpbnB1dCB2YWx1ZXMKCQkgKiAgICAvLyBmcm9tIHRoZSBlbmQtdXNlciwgbWF0Y2hpbmcgdGhlIGRhdGEgaW4gYSBjZXJ0YWluIHJhbmdlLgoJCSAqICAgICQuZm4uZGF0YVRhYmxlLmV4dC5zZWFyY2gucHVzaCgKCQkgKiAgICAgIGZ1bmN0aW9uKCBzZXR0aW5ncywgZGF0YSwgZGF0YUluZGV4ICkgewoJCSAqICAgICAgICB2YXIgbWluID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21pbicpLnZhbHVlICogMTsKCQkgKiAgICAgICAgdmFyIG1heCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXgnKS52YWx1ZSAqIDE7CgkJICogICAgICAgIHZhciB2ZXJzaW9uID0gZGF0YVszXSA9PSAiLSIgPyAwIDogZGF0YVszXSoxOwoJCSAqCgkJICogICAgICAgIGlmICggbWluID09ICIiICYmIG1heCA9PSAiIiApIHsKCQkgKiAgICAgICAgICByZXR1cm4gdHJ1ZTsKCQkgKiAgICAgICAgfQoJCSAqICAgICAgICBlbHNlIGlmICggbWluID09ICIiICYmIHZlcnNpb24gPCBtYXggKSB7CgkJICogICAgICAgICAgcmV0dXJuIHRydWU7CgkJICogICAgICAgIH0KCQkgKiAgICAgICAgZWxzZSBpZiAoIG1pbiA8IHZlcnNpb24gJiYgIiIgPT0gbWF4ICkgewoJCSAqICAgICAgICAgIHJldHVybiB0cnVlOwoJCSAqICAgICAgICB9CgkJICogICAgICAgIGVsc2UgaWYgKCBtaW4gPCB2ZXJzaW9uICYmIHZlcnNpb24gPCBtYXggKSB7CgkJICogICAgICAgICAgcmV0dXJuIHRydWU7CgkJICogICAgICAgIH0KCQkgKiAgICAgICAgcmV0dXJuIGZhbHNlOwoJCSAqICAgICAgfQoJCSAqICAgICk7CgkJICovCgkJc2VhcmNoOiBbXSwKCQoJCgkJLyoqCgkJICogU2VsZWN0b3IgZXh0ZW5zaW9ucwoJCSAqCgkJICogVGhlIGBzZWxlY3RvcmAgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIGV4dGVuZCB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoZQoJCSAqIHNlbGVjdG9yIG1vZGlmaWVyIG9wdGlvbnMgKGBzZWxlY3Rvci1tb2RpZmllcmAgb2JqZWN0IGRhdGEgdHlwZSkgdGhhdAoJCSAqIGVhY2ggb2YgdGhlIHRocmVlIGJ1aWx0IGluIHNlbGVjdG9yIHR5cGVzIG9mZmVyIChyb3csIGNvbHVtbiBhbmQgY2VsbCArCgkJICogdGhlaXIgcGx1cmFsIGNvdW50ZXJwYXJ0cykuIEZvciBleGFtcGxlIHRoZSBTZWxlY3QgZXh0ZW5zaW9uIHVzZXMgdGhpcwoJCSAqIG1lY2hhbmlzbSB0byBwcm92aWRlIGFuIG9wdGlvbiB0byBzZWxlY3Qgb25seSByb3dzLCBjb2x1bW5zIGFuZCBjZWxscwoJCSAqIHRoYXQgaGF2ZSBiZWVuIG1hcmtlZCBhcyBzZWxlY3RlZCBieSB0aGUgZW5kIHVzZXIgKGB7c2VsZWN0ZWQ6IHRydWV9YCksCgkJICogd2hpY2ggY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgZXhpc3RpbmcgYnVpbHQgaW4gc2VsZWN0b3IKCQkgKiBvcHRpb25zLgoJCSAqCgkJICogRWFjaCBwcm9wZXJ0eSBpcyBhbiBhcnJheSB0byB3aGljaCBmdW5jdGlvbnMgY2FuIGJlIHB1c2hlZC4gVGhlIGZ1bmN0aW9ucwoJCSAqIHRha2UgdGhyZWUgYXR0cmlidXRlczoKCQkgKgoJCSAqICogU2V0dGluZ3Mgb2JqZWN0IGZvciB0aGUgaG9zdCB0YWJsZQoJCSAqICogT3B0aW9ucyBvYmplY3QgKGBzZWxlY3Rvci1tb2RpZmllcmAgb2JqZWN0IHR5cGUpCgkJICogKiBBcnJheSBvZiBzZWxlY3RlZCBpdGVtIGluZGV4ZXMKCQkgKgoJCSAqIFRoZSByZXR1cm4gaXMgYW4gYXJyYXkgb2YgdGhlIHJlc3VsdGluZyBpdGVtIGluZGV4ZXMgYWZ0ZXIgdGhlIGN1c3RvbQoJCSAqIHNlbGVjdG9yIGhhcyBiZWVuIGFwcGxpZWQuCgkJICoKCQkgKiAgQHR5cGUgb2JqZWN0CgkJICovCgkJc2VsZWN0b3I6IHsKCQkJY2VsbDogW10sCgkJCWNvbHVtbjogW10sCgkJCXJvdzogW10KCQl9LAoJCgkKCQkvKioKCQkgKiBJbnRlcm5hbCBmdW5jdGlvbnMsIGV4cG9zZWQgZm9yIHVzZWQgaW4gcGx1Zy1pbnMuCgkJICogCgkJICogUGxlYXNlIG5vdGUgdGhhdCB5b3Ugc2hvdWxkIG5vdCBuZWVkIHRvIHVzZSB0aGUgaW50ZXJuYWwgbWV0aG9kcyBmb3IKCQkgKiBhbnl0aGluZyBvdGhlciB0aGFuIGEgcGx1Zy1pbiAoYW5kIGV2ZW4gdGhlbiwgdHJ5IHRvIGF2b2lkIGlmIHBvc3NpYmxlKS4KCQkgKiBUaGUgaW50ZXJuYWwgZnVuY3Rpb24gbWF5IGNoYW5nZSBiZXR3ZWVuIHJlbGVhc2VzLgoJCSAqCgkJICogIEB0eXBlIG9iamVjdAoJCSAqICBAZGVmYXVsdCB7fQoJCSAqLwoJCWludGVybmFsOiB7fSwKCQoJCgkJLyoqCgkJICogTGVnYWN5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRW5hYmxlIGFuZCBkaXNhYmxlIGxlZ2FjeSBvcHRpb25zIHRoYXQKCQkgKiBhcmUgYXZhaWxhYmxlIGluIERhdGFUYWJsZXMuCgkJICoKCQkgKiAgQHR5cGUgb2JqZWN0CgkJICovCgkJbGVnYWN5OiB7CgkJCS8qKgoJCQkgKiBFbmFibGUgLyBkaXNhYmxlIERhdGFUYWJsZXMgMS45IGNvbXBhdGlibGUgc2VydmVyLXNpZGUgcHJvY2Vzc2luZwoJCQkgKiByZXF1ZXN0cwoJCQkgKgoJCQkgKiAgQHR5cGUgYm9vbGVhbgoJCQkgKiAgQGRlZmF1bHQgbnVsbAoJCQkgKi8KCQkJYWpheDogbnVsbAoJCX0sCgkKCQoJCS8qKgoJCSAqIFBhZ2luYXRpb24gcGx1Zy1pbiBtZXRob2RzLgoJCSAqIAoJCSAqIEVhY2ggZW50cnkgaW4gdGhpcyBvYmplY3QgaXMgYSBmdW5jdGlvbiBhbmQgZGVmaW5lcyB3aGljaCBidXR0b25zIHNob3VsZAoJCSAqIGJlIHNob3duIGJ5IHRoZSBwYWdpbmF0aW9uIHJlbmRlcmluZyBtZXRob2QgdGhhdCBpcyB1c2VkIGZvciB0aGUgdGFibGU6CgkJICoge0BsaW5rIERhdGFUYWJsZS5leHQucmVuZGVyZXIucGFnZUJ1dHRvbn0uIFRoZSByZW5kZXJlciBhZGRyZXNzZXMgaG93IHRoZQoJCSAqIGJ1dHRvbnMgYXJlIGRpc3BsYXllZCBpbiB0aGUgZG9jdW1lbnQsIHdoaWxlIHRoZSBmdW5jdGlvbnMgaGVyZSB0ZWxsIGl0CgkJICogd2hhdCBidXR0b25zIHRvIGRpc3BsYXkuIFRoaXMgaXMgZG9uZSBieSByZXR1cm5pbmcgYW4gYXJyYXkgb2YgYnV0dG9uCgkJICogZGVzY3JpcHRpb25zICh3aGF0IGVhY2ggYnV0dG9uIHdpbGwgZG8pLgoJCSAqCgkJICogUGFnaW5hdGlvbiB0eXBlcyAodGhlIGZvdXIgYnVpbHQgaW4gb3B0aW9ucyBhbmQgYW55IGFkZGl0aW9uYWwgcGx1Zy1pbgoJCSAqIG9wdGlvbnMgZGVmaW5lZCBoZXJlKSBjYW4gYmUgdXNlZCB0aHJvdWdoIHRoZSBgcGFnaW5hdGlvblR5cGVgCgkJICogaW5pdGlhbGlzYXRpb24gcGFyYW1ldGVyLgoJCSAqCgkJICogVGhlIGZ1bmN0aW9ucyBkZWZpbmVkIHRha2UgdHdvIHBhcmFtZXRlcnM6CgkJICoKCQkgKiAxLiBge2ludH0gcGFnZWAgVGhlIGN1cnJlbnQgcGFnZSBpbmRleAoJCSAqIDIuIGB7aW50fSBwYWdlc2AgVGhlIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgdGFibGUKCQkgKgoJCSAqIEVhY2ggZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIGFuIGFycmF5IHdoZXJlIGVhY2ggZWxlbWVudCBvZiB0aGUKCQkgKiBhcnJheSBjYW4gYmUgb25lIG9mOgoJCSAqCgkJICogKiBgZmlyc3RgIC0gSnVtcCB0byBmaXJzdCBwYWdlIHdoZW4gYWN0aXZhdGVkCgkJICogKiBgbGFzdGAgLSBKdW1wIHRvIGxhc3QgcGFnZSB3aGVuIGFjdGl2YXRlZAoJCSAqICogYHByZXZpb3VzYCAtIFNob3cgcHJldmlvdXMgcGFnZSB3aGVuIGFjdGl2YXRlZAoJCSAqICogYG5leHRgIC0gU2hvdyBuZXh0IHBhZ2Ugd2hlbiBhY3RpdmF0ZWQKCQkgKiAqIGB7aW50fWAgLSBTaG93IHBhZ2Ugb2YgdGhlIGluZGV4IGdpdmVuCgkJICogKiBge2FycmF5fWAgLSBBIG5lc3RlZCBhcnJheSBjb250YWluaW5nIHRoZSBhYm92ZSBlbGVtZW50cyB0byBhZGQgYQoJCSAqICAgY29udGFpbmluZyAnRElWJyBlbGVtZW50IChtaWdodCBiZSB1c2VmdWwgZm9yIHN0eWxpbmcpLgoJCSAqCgkJICogTm90ZSB0aGF0IERhdGFUYWJsZXMgdjEuOS0gdXNlZCB0aGlzIG9iamVjdCBzbGlnaHRseSBkaWZmZXJlbnRseSB3aGVyZWJ5CgkJICogYW4gb2JqZWN0IHdpdGggdHdvIGZ1bmN0aW9ucyB3b3VsZCBiZSBkZWZpbmVkIGZvciBlYWNoIHBsdWctaW4uIFRoYXQKCQkgKiBhYmlsaXR5IGlzIHN0aWxsIHN1cHBvcnRlZCBieSBEYXRhVGFibGVzIDEuMTArIHRvIHByb3ZpZGUgYmFja3dhcmRzCgkJICogY29tcGF0aWJpbGl0eSwgYnV0IHRoaXMgb3B0aW9uIG9mIHVzZSBpcyBub3cgZGVjcmVtZW50ZWQgYW5kIG5vIGxvbmdlcgoJCSAqIGRvY3VtZW50ZWQgaW4gRGF0YVRhYmxlcyAxLjEwKy4KCQkgKgoJCSAqICBAdHlwZSBvYmplY3QKCQkgKiAgQGRlZmF1bHQge30KCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFNob3cgcHJldmlvdXMsIG5leHQgYW5kIGN1cnJlbnQgcGFnZSBidXR0b25zIG9ubHkKCQkgKiAgICAkLmZuLmRhdGFUYWJsZUV4dC5vUGFnaW5hdGlvbi5jdXJyZW50ID0gZnVuY3Rpb24gKCBwYWdlLCBwYWdlcyApIHsKCQkgKiAgICAgIHJldHVybiBbICdwcmV2aW91cycsIHBhZ2UsICduZXh0JyBdOwoJCSAqICAgIH07CgkJICovCgkJcGFnZXI6IHt9LAoJCgkKCQlyZW5kZXJlcjogewoJCQlwYWdlQnV0dG9uOiB7fSwKCQkJaGVhZGVyOiB7fQoJCX0sCgkKCQoJCS8qKgoJCSAqIE9yZGVyaW5nIHBsdWctaW5zIC0gY3VzdG9tIGRhdGEgc291cmNlCgkJICogCgkJICogVGhlIGV4dGVuc2lvbiBvcHRpb25zIGZvciBvcmRlcmluZyBvZiBkYXRhIGF2YWlsYWJsZSBoZXJlIGlzIGNvbXBsaW1lbnRhcnkKCQkgKiB0byB0aGUgZGVmYXVsdCB0eXBlIGJhc2VkIG9yZGVyaW5nIHRoYXQgRGF0YVRhYmxlcyB0eXBpY2FsbHkgdXNlcy4gSXQKCQkgKiBhbGxvd3MgbXVjaCBncmVhdGVyIGNvbnRyb2wgb3ZlciB0aGUgdGhlIGRhdGEgdGhhdCBpcyBiZWluZyB1c2VkIHRvCgkJICogb3JkZXIgYSBjb2x1bW4sIGJ1dCBpcyBuZWNlc3NhcmlseSB0aGVyZWZvcmUgbW9yZSBjb21wbGV4LgoJCSAqIAoJCSAqIFRoaXMgdHlwZSBvZiBvcmRlcmluZyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gZG8gb3JkZXJpbmcgYmFzZWQgb24gZGF0YQoJCSAqIGxpdmUgZnJvbSB0aGUgRE9NIChmb3IgZXhhbXBsZSB0aGUgY29udGVudHMgb2YgYW4gJ2lucHV0JyBlbGVtZW50KSByYXRoZXIKCQkgKiB0aGFuIGp1c3QgdGhlIHN0YXRpYyBzdHJpbmcgdGhhdCBEYXRhVGFibGVzIGtub3dzIG9mLgoJCSAqIAoJCSAqIFRoZSB3YXkgdGhlc2UgcGx1Zy1pbnMgd29yayBpcyB0aGF0IHlvdSBjcmVhdGUgYW4gYXJyYXkgb2YgdGhlIHZhbHVlcyB5b3UKCQkgKiB3aXNoIHRvIGJlIG9yZGVyaW5nIGZvciB0aGUgY29sdW1uIGluIHF1ZXN0aW9uIGFuZCB0aGVuIHJldHVybiB0aGF0CgkJICogYXJyYXkuIFRoZSBkYXRhIGluIHRoZSBhcnJheSBtdWNoIGJlIGluIHRoZSBpbmRleCBvcmRlciBvZiB0aGUgcm93cyBpbgoJCSAqIHRoZSB0YWJsZSAobm90IHRoZSBjdXJyZW50bHkgb3JkZXJpbmcgb3JkZXIhKS4gV2hpY2ggb3JkZXIgZGF0YSBnYXRoZXJpbmcKCQkgKiBmdW5jdGlvbiBpcyBydW4gaGVyZSBkZXBlbmRzIG9uIHRoZSBgZHQtaW5pdCBjb2x1bW5zLm9yZGVyRGF0YVR5cGVgCgkJICogcGFyYW1ldGVyIHRoYXQgaXMgdXNlZCBmb3IgdGhlIGNvbHVtbiAoaWYgYW55KS4KCQkgKgoJCSAqIFRoZSBmdW5jdGlvbnMgZGVmaW5lZCB0YWtlIHR3byBwYXJhbWV0ZXJzOgoJCSAqCgkJICogMS4gYHtvYmplY3R9YCBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdDogc2VlCgkJICogICAge0BsaW5rIERhdGFUYWJsZS5tb2RlbHMub1NldHRpbmdzfQoJCSAqIDIuIGB7aW50fWAgVGFyZ2V0IGNvbHVtbiBpbmRleAoJCSAqCgkJICogRWFjaCBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byByZXR1cm4gYW4gYXJyYXk6CgkJICoKCQkgKiAqIGB7YXJyYXl9YCBEYXRhIGZvciB0aGUgY29sdW1uIHRvIGJlIG9yZGVyaW5nIHVwb24KCQkgKgoJCSAqICBAdHlwZSBhcnJheQoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgLy8gT3JkZXJpbmcgdXNpbmcgYGlucHV0YCBub2RlIHZhbHVlcwoJCSAqICAgICQuZm4uZGF0YVRhYmxlLmV4dC5vcmRlclsnZG9tLXRleHQnXSA9IGZ1bmN0aW9uICAoIHNldHRpbmdzLCBjb2wgKQoJCSAqICAgIHsKCQkgKiAgICAgIHJldHVybiB0aGlzLmFwaSgpLmNvbHVtbiggY29sLCB7b3JkZXI6J2luZGV4J30gKS5ub2RlcygpLm1hcCggZnVuY3Rpb24gKCB0ZCwgaSApIHsKCQkgKiAgICAgICAgcmV0dXJuICQoJ2lucHV0JywgdGQpLnZhbCgpOwoJCSAqICAgICAgfSApOwoJCSAqICAgIH0KCQkgKi8KCQlvcmRlcjoge30sCgkKCQoJCS8qKgoJCSAqIFR5cGUgYmFzZWQgcGx1Zy1pbnMuCgkJICoKCQkgKiBFYWNoIGNvbHVtbiBpbiBEYXRhVGFibGVzIGhhcyBhIHR5cGUgYXNzaWduZWQgdG8gaXQsIGVpdGhlciBieSBhdXRvbWF0aWMKCQkgKiBkZXRlY3Rpb24gb3IgYnkgZGlyZWN0IGFzc2lnbm1lbnQgdXNpbmcgdGhlIGB0eXBlYCBvcHRpb24gZm9yIHRoZSBjb2x1bW4uCgkJICogVGhlIHR5cGUgb2YgYSBjb2x1bW4gd2lsbCBlZmZlY3QgaG93IGl0IGlzIG9yZGVyaW5nIGFuZCBzZWFyY2ggKHBsdWctaW5zCgkJICogY2FuIGFsc28gbWFrZSB1c2Ugb2YgdGhlIGNvbHVtbiB0eXBlIGlmIHJlcXVpcmVkKS4KCQkgKgoJCSAqIEBuYW1lc3BhY2UKCQkgKi8KCQl0eXBlOiB7CgkJCS8qKgoJCQkgKiBUeXBlIGRldGVjdGlvbiBmdW5jdGlvbnMuCgkJCSAqCgkJCSAqIFRoZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGlzIG9iamVjdCBhcmUgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGRldGVjdAoJCQkgKiBhIGNvbHVtbidzIHR5cGUsIG1ha2luZyBpbml0aWFsaXNhdGlvbiBvZiBEYXRhVGFibGVzIHN1cGVyIGVhc3ksIGV2ZW4KCQkJICogd2hlbiBjb21wbGV4IGRhdGEgaXMgaW4gdGhlIHRhYmxlLgoJCQkgKgoJCQkgKiBUaGUgZnVuY3Rpb25zIGRlZmluZWQgdGFrZSB0d28gcGFyYW1ldGVyczoKCQkJICoKCQkgICAgICogIDEuIGB7Kn1gIERhdGEgZnJvbSB0aGUgY29sdW1uIGNlbGwgdG8gYmUgYW5hbHlzZWQKCQkgICAgICogIDIuIGB7c2V0dGluZ3N9YCBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdC4gVGhpcyBjYW4gYmUgdXNlZCB0bwoJCSAgICAgKiAgICAgcGVyZm9ybSBjb250ZXh0IHNwZWNpZmljIHR5cGUgZGV0ZWN0aW9uIC0gZm9yIGV4YW1wbGUgZGV0ZWN0aW9uCgkJICAgICAqICAgICBiYXNlZCBvbiBsYW5ndWFnZSBzZXR0aW5ncyBzdWNoIGFzIHVzaW5nIGEgY29tbWEgZm9yIGEgZGVjaW1hbAoJCSAgICAgKiAgICAgcGxhY2UuIEdlbmVyYWxseSBzcGVha2luZyB0aGUgb3B0aW9ucyBmcm9tIHRoZSBzZXR0aW5ncyB3aWxsIG5vdAoJCSAgICAgKiAgICAgYmUgcmVxdWlyZWQKCQkJICoKCQkJICogRWFjaCBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byByZXR1cm46CgkJCSAqCgkJCSAqICogYHtzdHJpbmd8bnVsbH1gIERhdGEgdHlwZSBkZXRlY3RlZCwgb3IgbnVsbCBpZiB1bmtub3duIChhbmQgdGh1cwoJCQkgKiAgIHBhc3MgaXQgb24gdG8gdGhlIG90aGVyIHR5cGUgZGV0ZWN0aW9uIGZ1bmN0aW9ucy4KCQkJICoKCQkJICogIEB0eXBlIGFycmF5CgkJCSAqCgkJCSAqICBAZXhhbXBsZQoJCQkgKiAgICAvLyBDdXJyZW5jeSB0eXBlIGRldGVjdGlvbiBwbHVnLWluOgoJCQkgKiAgICAkLmZuLmRhdGFUYWJsZS5leHQudHlwZS5kZXRlY3QucHVzaCgKCQkJICogICAgICBmdW5jdGlvbiAoIGRhdGEsIHNldHRpbmdzICkgewoJCQkgKiAgICAgICAgLy8gQ2hlY2sgdGhlIG51bWVyaWMgcGFydAoJCQkgKiAgICAgICAgaWYgKCAhIGRhdGEuc3Vic3RyaW5nKDEpLm1hdGNoKC9bMC05XS8pICkgewoJCQkgKiAgICAgICAgICByZXR1cm4gbnVsbDsKCQkJICogICAgICAgIH0KCQkJICoKCQkJICogICAgICAgIC8vIENoZWNrIHByZWZpeGVkIGJ5IGN1cnJlbmN5CgkJCSAqICAgICAgICBpZiAoIGRhdGEuY2hhckF0KDApID09ICckJyB8fCBkYXRhLmNoYXJBdCgwKSA9PSAnJnBvdW5kOycgKSB7CgkJCSAqICAgICAgICAgIHJldHVybiAnY3VycmVuY3knOwoJCQkgKiAgICAgICAgfQoJCQkgKiAgICAgICAgcmV0dXJuIG51bGw7CgkJCSAqICAgICAgfQoJCQkgKiAgICApOwoJCQkgKi8KCQkJZGV0ZWN0OiBbXSwKCQoJCgkJCS8qKgoJCQkgKiBUeXBlIGJhc2VkIHNlYXJjaCBmb3JtYXR0aW5nLgoJCQkgKgoJCQkgKiBUaGUgdHlwZSBiYXNlZCBzZWFyY2hpbmcgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIHRvIHByZS1mb3JtYXQgdGhlCgkJCSAqIGRhdGEgdG8gYmUgc2VhcmNoIG9uLiBGb3IgZXhhbXBsZSwgaXQgY2FuIGJlIHVzZWQgdG8gc3RyaXAgSFRNTAoJCQkgKiB0YWdzIG9yIHRvIGRlLWZvcm1hdCB0ZWxlcGhvbmUgbnVtYmVycyBmb3IgbnVtZXJpYyBvbmx5IHNlYXJjaGluZy4KCQkJICoKCQkJICogTm90ZSB0aGF0IGlzIGEgc2VhcmNoIGlzIG5vdCBkZWZpbmVkIGZvciBhIGNvbHVtbiBvZiBhIGdpdmVuIHR5cGUsCgkJCSAqIG5vIHNlYXJjaCBmb3JtYXR0aW5nIHdpbGwgYmUgcGVyZm9ybWVkLgoJCQkgKiAKCQkJICogUHJlLXByb2Nlc3Npbmcgb2Ygc2VhcmNoaW5nIGRhdGEgcGx1Zy1pbnMgLSBXaGVuIHlvdSBhc3NpZ24gdGhlIHNUeXBlCgkJCSAqIGZvciBhIGNvbHVtbiAob3IgaGF2ZSBpdCBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIGZvciB5b3UgYnkgRGF0YVRhYmxlcwoJCQkgKiBvciBhIHR5cGUgZGV0ZWN0aW9uIHBsdWctaW4pLCB5b3Ugd2lsbCB0eXBpY2FsbHkgYmUgdXNpbmcgdGhpcyBmb3IKCQkJICogY3VzdG9tIHNvcnRpbmcsIGJ1dCBpdCBjYW4gYWxzbyBiZSB1c2VkIHRvIHByb3ZpZGUgY3VzdG9tIHNlYXJjaGluZwoJCQkgKiBieSBhbGxvd2luZyB5b3UgdG8gcHJlLXByb2Nlc3NpbmcgdGhlIGRhdGEgYW5kIHJldHVybmluZyB0aGUgZGF0YSBpbgoJCQkgKiB0aGUgZm9ybWF0IHRoYXQgc2hvdWxkIGJlIHNlYXJjaGVkIHVwb24uIFRoaXMgaXMgZG9uZSBieSBhZGRpbmcKCQkJICogZnVuY3Rpb25zIHRoaXMgb2JqZWN0IHdpdGggYSBwYXJhbWV0ZXIgbmFtZSB3aGljaCBtYXRjaGVzIHRoZSBzVHlwZQoJCQkgKiBmb3IgdGhhdCB0YXJnZXQgY29sdW1uLiBUaGlzIGlzIHRoZSBjb3JvbGxhcnkgb2YgPGk+YWZuU29ydERhdGE8L2k+CgkJCSAqIGZvciBzZWFyY2hpbmcgZGF0YS4KCQkJICoKCQkJICogVGhlIGZ1bmN0aW9ucyBkZWZpbmVkIHRha2UgYSBzaW5nbGUgcGFyYW1ldGVyOgoJCQkgKgoJCSAgICAgKiAgMS4gYHsqfWAgRGF0YSBmcm9tIHRoZSBjb2x1bW4gY2VsbCB0byBiZSBwcmVwYXJlZCBmb3Igc2VhcmNoaW5nCgkJCSAqCgkJCSAqIEVhY2ggZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gcmV0dXJuOgoJCQkgKgoJCQkgKiAqIGB7c3RyaW5nfG51bGx9YCBGb3JtYXR0ZWQgc3RyaW5nIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgc2VhcmNoaW5nLgoJCQkgKgoJCQkgKiAgQHR5cGUgb2JqZWN0CgkJCSAqICBAZGVmYXVsdCB7fQoJCQkgKgoJCQkgKiAgQGV4YW1wbGUKCQkJICogICAgJC5mbi5kYXRhVGFibGUuZXh0LnR5cGUuc2VhcmNoWyd0aXRsZS1udW1lcmljJ10gPSBmdW5jdGlvbiAoIGQgKSB7CgkJCSAqICAgICAgcmV0dXJuIGQucmVwbGFjZSgvXG4vZywiICIpLnJlcGxhY2UoIC88Lio/Pi9nLCAiIiApOwoJCQkgKiAgICB9CgkJCSAqLwoJCQlzZWFyY2g6IHt9LAoJCgkKCQkJLyoqCgkJCSAqIFR5cGUgYmFzZWQgb3JkZXJpbmcuCgkJCSAqCgkJCSAqIFRoZSBjb2x1bW4gdHlwZSB0ZWxscyBEYXRhVGFibGVzIHdoYXQgb3JkZXJpbmcgdG8gYXBwbHkgdG8gdGhlIHRhYmxlCgkJCSAqIHdoZW4gYSBjb2x1bW4gaXMgc29ydGVkIHVwb24uIFRoZSBvcmRlciBmb3IgZWFjaCB0eXBlIHRoYXQgaXMgZGVmaW5lZCwKCQkJICogaXMgZGVmaW5lZCBieSB0aGUgZnVuY3Rpb25zIGF2YWlsYWJsZSBpbiB0aGlzIG9iamVjdC4KCQkJICoKCQkJICogRWFjaCBvcmRlcmluZyBvcHRpb24gY2FuIGJlIGRlc2NyaWJlZCBieSB0aHJlZSBwcm9wZXJ0aWVzIGFkZGVkIHRvCgkJCSAqIHRoaXMgb2JqZWN0OgoJCQkgKgoJCQkgKiAqIGB7dHlwZX0tcHJlYCAtIFByZS1mb3JtYXR0aW5nIGZ1bmN0aW9uCgkJCSAqICogYHt0eXBlfS1hc2NgIC0gQXNjZW5kaW5nIG9yZGVyIGZ1bmN0aW9uCgkJCSAqICogYHt0eXBlfS1kZXNjYCAtIERlc2NlbmRpbmcgb3JkZXIgZnVuY3Rpb24KCQkJICoKCQkJICogQWxsIHRocmVlIGNhbiBiZSB1c2VkIHRvZ2V0aGVyLCBvbmx5IGB7dHlwZX0tcHJlYCBvciBvbmx5CgkJCSAqIGB7dHlwZX0tYXNjYCBhbmQgYHt0eXBlfS1kZXNjYCB0b2dldGhlci4gSXQgaXMgZ2VuZXJhbGx5IHJlY29tbWVuZGVkCgkJCSAqIHRoYXQgb25seSBge3R5cGV9LXByZWAgaXMgdXNlZCwgYXMgdGhpcyBwcm92aWRlcyB0aGUgb3B0aW1hbAoJCQkgKiBpbXBsZW1lbnRhdGlvbiBpbiB0ZXJtcyBvZiBzcGVlZCwgYWx0aG91Z2ggdGhlIG90aGVycyBhcmUgcHJvdmlkZWQKCQkJICogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBKYXZhc2NyaXB0IHNvcnQgZnVuY3Rpb25zLgoJCQkgKgoJCQkgKiBge3R5cGV9LXByZWA6IEZ1bmN0aW9ucyBkZWZpbmVkIHRha2UgYSBzaW5nbGUgcGFyYW1ldGVyOgoJCQkgKgoJCSAgICAgKiAgMS4gYHsqfWAgRGF0YSBmcm9tIHRoZSBjb2x1bW4gY2VsbCB0byBiZSBwcmVwYXJlZCBmb3Igb3JkZXJpbmcKCQkJICoKCQkJICogQW5kIHJldHVybjoKCQkJICoKCQkJICogKiBgeyp9YCBEYXRhIHRvIGJlIHNvcnRlZCB1cG9uCgkJCSAqCgkJCSAqIGB7dHlwZX0tYXNjYCBhbmQgYHt0eXBlfS1kZXNjYDogRnVuY3Rpb25zIGFyZSB0eXBpY2FsIEphdmFzY3JpcHQgc29ydAoJCQkgKiBmdW5jdGlvbnMsIHRha2luZyB0d28gcGFyYW1ldGVyczoKCQkJICoKCQkgICAgICogIDEuIGB7Kn1gIERhdGEgdG8gY29tcGFyZSB0byB0aGUgc2Vjb25kIHBhcmFtZXRlcgoJCSAgICAgKiAgMi4gYHsqfWAgRGF0YSB0byBjb21wYXJlIHRvIHRoZSBmaXJzdCBwYXJhbWV0ZXIKCQkJICoKCQkJICogQW5kIHJldHVybmluZzoKCQkJICoKCQkJICogKiBgeyp9YCBPcmRlcmluZyBtYXRjaDogPDAgaWYgZmlyc3QgcGFyYW1ldGVyIHNob3VsZCBiZSBzb3J0ZWQgbG93ZXIKCQkJICogICB0aGFuIHRoZSBzZWNvbmQgcGFyYW1ldGVyLCA9PT0wIGlmIHRoZSB0d28gcGFyYW1ldGVycyBhcmUgZXF1YWwgYW5kCgkJCSAqICAgPjAgaWYgdGhlIGZpcnN0IHBhcmFtZXRlciBzaG91bGQgYmUgc29ydGVkIGhlaWdodCB0aGFuIHRoZSBzZWNvbmQKCQkJICogICBwYXJhbWV0ZXIuCgkJCSAqIAoJCQkgKiAgQHR5cGUgb2JqZWN0CgkJCSAqICBAZGVmYXVsdCB7fQoJCQkgKgoJCQkgKiAgQGV4YW1wbGUKCQkJICogICAgLy8gTnVtZXJpYyBvcmRlcmluZyBvZiBmb3JtYXR0ZWQgbnVtYmVycyB3aXRoIGEgcHJlLWZvcm1hdHRlcgoJCQkgKiAgICAkLmV4dGVuZCggJC5mbi5kYXRhVGFibGUuZXh0LnR5cGUub3JkZXIsIHsKCQkJICogICAgICAic3RyaW5nLXByZSI6IGZ1bmN0aW9uKHgpIHsKCQkJICogICAgICAgIGEgPSAoYSA9PT0gIi0iIHx8IGEgPT09ICIiKSA/IDAgOiBhLnJlcGxhY2UoIC9bXlxkXC1cLl0vZywgIiIgKTsKCQkJICogICAgICAgIHJldHVybiBwYXJzZUZsb2F0KCBhICk7CgkJCSAqICAgICAgfQoJCQkgKiAgICB9ICk7CgkJCSAqCgkJCSAqICBAZXhhbXBsZQoJCQkgKiAgICAvLyBDYXNlLXNlbnNpdGl2ZSBzdHJpbmcgb3JkZXJpbmcsIHdpdGggbm8gcHJlLWZvcm1hdHRpbmcgbWV0aG9kCgkJCSAqICAgICQuZXh0ZW5kKCAkLmZuLmRhdGFUYWJsZS5leHQub3JkZXIsIHsKCQkJICogICAgICAic3RyaW5nLWNhc2UtYXNjIjogZnVuY3Rpb24oeCx5KSB7CgkJCSAqICAgICAgICByZXR1cm4gKCh4IDwgeSkgPyAtMSA6ICgoeCA+IHkpID8gMSA6IDApKTsKCQkJICogICAgICB9LAoJCQkgKiAgICAgICJzdHJpbmctY2FzZS1kZXNjIjogZnVuY3Rpb24oeCx5KSB7CgkJCSAqICAgICAgICByZXR1cm4gKCh4IDwgeSkgPyAxIDogKCh4ID4geSkgPyAtMSA6IDApKTsKCQkJICogICAgICB9CgkJCSAqICAgIH0gKTsKCQkJICovCgkJCW9yZGVyOiB7fQoJCX0sCgkKCQkvKioKCQkgKiBVbmlxdWUgRGF0YVRhYmxlcyBpbnN0YW5jZSBjb3VudGVyCgkJICoKCQkgKiBAdHlwZSBpbnQKCQkgKiBAcHJpdmF0ZQoJCSAqLwoJCV91bmlxdWU6IDAsCgkKCQoJCS8vCgkJLy8gRGVwcmVjaWF0ZWQKCQkvLyBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgYXJlIHJldGFpbmVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJsaXR5IG9ubHkuCgkJLy8gVGhlIHNob3VsZCBub3QgYmUgdXNlZCBpbiBuZXcgcHJvamVjdHMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZQoJCS8vIHZlcnNpb24KCQkvLwoJCgkJLyoqCgkJICogVmVyc2lvbiBjaGVjayBmdW5jdGlvbi4KCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKiAgQGRlcHJlY2lhdGVkIFNpbmNlIDEuMTAKCQkgKi8KCQlmblZlcnNpb25DaGVjazogRGF0YVRhYmxlLmZuVmVyc2lvbkNoZWNrLAoJCgkKCQkvKioKCQkgKiBJbmRleCBmb3Igd2hhdCAndGhpcycgaW5kZXggQVBJIGZ1bmN0aW9ucyBzaG91bGQgdXNlCgkJICogIEB0eXBlIGludAoJCSAqICBAZGVwcmVjYXRlZCBTaW5jZSB2MS4xMAoJCSAqLwoJCWlBcGlJbmRleDogMCwKCQoJCgkJLyoqCgkJICogalF1ZXJ5IFVJIGNsYXNzIGNvbnRhaW5lcgoJCSAqICBAdHlwZSBvYmplY3QKCQkgKiAgQGRlcHJlY2F0ZWQgU2luY2UgdjEuMTAKCQkgKi8KCQlvSlVJQ2xhc3Nlczoge30sCgkKCQoJCS8qKgoJCSAqIFNvZnR3YXJlIHZlcnNpb24KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZXByZWNhdGVkIFNpbmNlIHYxLjEwCgkJICovCgkJc1ZlcnNpb246IERhdGFUYWJsZS52ZXJzaW9uCgl9OwoJCgkKCS8vCgkvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gQWxpYXMgdG8gcHJlIDEuMTAgSHVuZ2FyaWFuIG5vdGF0aW9uIGNvdW50ZXIgcGFydHMKCS8vCgkkLmV4dGVuZCggX2V4dCwgewoJCWFmbkZpbHRlcmluZzogX2V4dC5zZWFyY2gsCgkJYVR5cGVzOiAgICAgICBfZXh0LnR5cGUuZGV0ZWN0LAoJCW9mblNlYXJjaDogICAgX2V4dC50eXBlLnNlYXJjaCwKCQlvU29ydDogICAgICAgIF9leHQudHlwZS5vcmRlciwKCQlhZm5Tb3J0RGF0YTogIF9leHQub3JkZXIsCgkJYW9GZWF0dXJlczogICBfZXh0LmZlYXR1cmUsCgkJb0FwaTogICAgICAgICBfZXh0LmludGVybmFsLAoJCW9TdGRDbGFzc2VzOiAgX2V4dC5jbGFzc2VzLAoJCW9QYWdpbmF0aW9uOiAgX2V4dC5wYWdlcgoJfSApOwoJCgkKCSQuZXh0ZW5kKCBEYXRhVGFibGUuZXh0LmNsYXNzZXMsIHsKCQkic1RhYmxlIjogImRhdGFUYWJsZSIsCgkJInNOb0Zvb3RlciI6ICJuby1mb290ZXIiLAoJCgkJLyogUGFnaW5nIGJ1dHRvbnMgKi8KCQkic1BhZ2VCdXR0b24iOiAicGFnaW5hdGVfYnV0dG9uIiwKCQkic1BhZ2VCdXR0b25BY3RpdmUiOiAiY3VycmVudCIsCgkJInNQYWdlQnV0dG9uRGlzYWJsZWQiOiAiZGlzYWJsZWQiLAoJCgkJLyogU3RyaXBpbmcgY2xhc3NlcyAqLwoJCSJzU3RyaXBlT2RkIjogIm9kZCIsCgkJInNTdHJpcGVFdmVuIjogImV2ZW4iLAoJCgkJLyogRW1wdHkgcm93ICovCgkJInNSb3dFbXB0eSI6ICJkYXRhVGFibGVzX2VtcHR5IiwKCQoJCS8qIEZlYXR1cmVzICovCgkJInNXcmFwcGVyIjogImRhdGFUYWJsZXNfd3JhcHBlciIsCgkJInNGaWx0ZXIiOiAiZGF0YVRhYmxlc19maWx0ZXIiLAoJCSJzSW5mbyI6ICJkYXRhVGFibGVzX2luZm8iLAoJCSJzUGFnaW5nIjogImRhdGFUYWJsZXNfcGFnaW5hdGUgcGFnaW5nXyIsIC8qIE5vdGUgdGhhdCB0aGUgdHlwZSBpcyBwb3N0Zml4ZWQgKi8KCQkic0xlbmd0aCI6ICJkYXRhVGFibGVzX2xlbmd0aCIsCgkJInNQcm9jZXNzaW5nIjogImRhdGFUYWJsZXNfcHJvY2Vzc2luZyIsCgkKCQkvKiBTb3J0aW5nICovCgkJInNTb3J0QXNjIjogInNvcnRpbmdfYXNjIiwKCQkic1NvcnREZXNjIjogInNvcnRpbmdfZGVzYyIsCgkJInNTb3J0YWJsZSI6ICJzb3J0aW5nIiwgLyogU29ydGFibGUgaW4gYm90aCBkaXJlY3Rpb25zICovCgkJInNTb3J0YWJsZUFzYyI6ICJzb3J0aW5nX2FzY19kaXNhYmxlZCIsCgkJInNTb3J0YWJsZURlc2MiOiAic29ydGluZ19kZXNjX2Rpc2FibGVkIiwKCQkic1NvcnRhYmxlTm9uZSI6ICJzb3J0aW5nX2Rpc2FibGVkIiwKCQkic1NvcnRDb2x1bW4iOiAic29ydGluZ18iLCAvKiBOb3RlIHRoYXQgYW4gaW50IGlzIHBvc3RmaXhlZCBmb3IgdGhlIHNvcnRpbmcgb3JkZXIgKi8KCQoJCS8qIEZpbHRlcmluZyAqLwoJCSJzRmlsdGVySW5wdXQiOiAiIiwKCQoJCS8qIFBhZ2UgbGVuZ3RoICovCgkJInNMZW5ndGhTZWxlY3QiOiAiIiwKCQoJCS8qIFNjcm9sbGluZyAqLwoJCSJzU2Nyb2xsV3JhcHBlciI6ICJkYXRhVGFibGVzX3Njcm9sbCIsCgkJInNTY3JvbGxIZWFkIjogImRhdGFUYWJsZXNfc2Nyb2xsSGVhZCIsCgkJInNTY3JvbGxIZWFkSW5uZXIiOiAiZGF0YVRhYmxlc19zY3JvbGxIZWFkSW5uZXIiLAoJCSJzU2Nyb2xsQm9keSI6ICJkYXRhVGFibGVzX3Njcm9sbEJvZHkiLAoJCSJzU2Nyb2xsRm9vdCI6ICJkYXRhVGFibGVzX3Njcm9sbEZvb3QiLAoJCSJzU2Nyb2xsRm9vdElubmVyIjogImRhdGFUYWJsZXNfc2Nyb2xsRm9vdElubmVyIiwKCQoJCS8qIE1pc2MgKi8KCQkic0hlYWRlclRIIjogIiIsCgkJInNGb290ZXJUSCI6ICIiLAoJCgkJLy8gRGVwcmVjYXRlZAoJCSJzU29ydEpVSUFzYyI6ICIiLAoJCSJzU29ydEpVSURlc2MiOiAiIiwKCQkic1NvcnRKVUkiOiAiIiwKCQkic1NvcnRKVUlBc2NBbGxvd2VkIjogIiIsCgkJInNTb3J0SlVJRGVzY0FsbG93ZWQiOiAiIiwKCQkic1NvcnRKVUlXcmFwcGVyIjogIiIsCgkJInNTb3J0SWNvbiI6ICIiLAoJCSJzSlVJSGVhZGVyIjogIiIsCgkJInNKVUlGb290ZXIiOiAiIgoJfSApOwoJCgkKCXZhciBleHRQYWdpbmF0aW9uID0gRGF0YVRhYmxlLmV4dC5wYWdlcjsKCQoJZnVuY3Rpb24gX251bWJlcnMgKCBwYWdlLCBwYWdlcyApIHsKCQl2YXIKCQkJbnVtYmVycyA9IFtdLAoJCQlidXR0b25zID0gZXh0UGFnaW5hdGlvbi5udW1iZXJzX2xlbmd0aCwKCQkJaGFsZiA9IE1hdGguZmxvb3IoIGJ1dHRvbnMgLyAyICksCgkJCWkgPSAxOwoJCgkJaWYgKCBwYWdlcyA8PSBidXR0b25zICkgewoJCQludW1iZXJzID0gX3JhbmdlKCAwLCBwYWdlcyApOwoJCX0KCQllbHNlIGlmICggcGFnZSA8PSBoYWxmICkgewoJCQludW1iZXJzID0gX3JhbmdlKCAwLCBidXR0b25zLTIgKTsKCQkJbnVtYmVycy5wdXNoKCAnZWxsaXBzaXMnICk7CgkJCW51bWJlcnMucHVzaCggcGFnZXMtMSApOwoJCX0KCQllbHNlIGlmICggcGFnZSA+PSBwYWdlcyAtIDEgLSBoYWxmICkgewoJCQludW1iZXJzID0gX3JhbmdlKCBwYWdlcy0oYnV0dG9ucy0yKSwgcGFnZXMgKTsKCQkJbnVtYmVycy5zcGxpY2UoIDAsIDAsICdlbGxpcHNpcycgKTsgLy8gbm8gdW5zaGlmdCBpbiBpZTYKCQkJbnVtYmVycy5zcGxpY2UoIDAsIDAsIDAgKTsKCQl9CgkJZWxzZSB7CgkJCW51bWJlcnMgPSBfcmFuZ2UoIHBhZ2UtaGFsZisyLCBwYWdlK2hhbGYtMSApOwoJCQludW1iZXJzLnB1c2goICdlbGxpcHNpcycgKTsKCQkJbnVtYmVycy5wdXNoKCBwYWdlcy0xICk7CgkJCW51bWJlcnMuc3BsaWNlKCAwLCAwLCAnZWxsaXBzaXMnICk7CgkJCW51bWJlcnMuc3BsaWNlKCAwLCAwLCAwICk7CgkJfQoJCgkJbnVtYmVycy5EVF9lbCA9ICdzcGFuJzsKCQlyZXR1cm4gbnVtYmVyczsKCX0KCQoJCgkkLmV4dGVuZCggZXh0UGFnaW5hdGlvbiwgewoJCXNpbXBsZTogZnVuY3Rpb24gKCBwYWdlLCBwYWdlcyApIHsKCQkJcmV0dXJuIFsgJ3ByZXZpb3VzJywgJ25leHQnIF07CgkJfSwKCQoJCWZ1bGw6IGZ1bmN0aW9uICggcGFnZSwgcGFnZXMgKSB7CgkJCXJldHVybiBbICAnZmlyc3QnLCAncHJldmlvdXMnLCAnbmV4dCcsICdsYXN0JyBdOwoJCX0sCgkKCQludW1iZXJzOiBmdW5jdGlvbiAoIHBhZ2UsIHBhZ2VzICkgewoJCQlyZXR1cm4gWyBfbnVtYmVycyhwYWdlLCBwYWdlcykgXTsKCQl9LAoJCgkJc2ltcGxlX251bWJlcnM6IGZ1bmN0aW9uICggcGFnZSwgcGFnZXMgKSB7CgkJCXJldHVybiBbICdwcmV2aW91cycsIF9udW1iZXJzKHBhZ2UsIHBhZ2VzKSwgJ25leHQnIF07CgkJfSwKCQoJCWZ1bGxfbnVtYmVyczogZnVuY3Rpb24gKCBwYWdlLCBwYWdlcyApIHsKCQkJcmV0dXJuIFsgJ2ZpcnN0JywgJ3ByZXZpb3VzJywgX251bWJlcnMocGFnZSwgcGFnZXMpLCAnbmV4dCcsICdsYXN0JyBdOwoJCX0sCgkJCgkJZmlyc3RfbGFzdF9udW1iZXJzOiBmdW5jdGlvbiAocGFnZSwgcGFnZXMpIHsKCSAJCXJldHVybiBbJ2ZpcnN0JywgX251bWJlcnMocGFnZSwgcGFnZXMpLCAnbGFzdCddOwoJIAl9LAoJCgkJLy8gRm9yIHRlc3RpbmcgYW5kIHBsdWctaW5zIHRvIHVzZQoJCV9udW1iZXJzOiBfbnVtYmVycywKCQoJCS8vIE51bWJlciBvZiBudW1iZXIgYnV0dG9ucyAoaW5jbHVkaW5nIGVsbGlwc2lzKSB0byBzaG93LiBfTXVzdCBiZSBvZGQhXwoJCW51bWJlcnNfbGVuZ3RoOiA3Cgl9ICk7CgkKCQoJJC5leHRlbmQoIHRydWUsIERhdGFUYWJsZS5leHQucmVuZGVyZXIsIHsKCQlwYWdlQnV0dG9uOiB7CgkJCV86IGZ1bmN0aW9uICggc2V0dGluZ3MsIGhvc3QsIGlkeCwgYnV0dG9ucywgcGFnZSwgcGFnZXMgKSB7CgkJCQl2YXIgY2xhc3NlcyA9IHNldHRpbmdzLm9DbGFzc2VzOwoJCQkJdmFyIGxhbmcgPSBzZXR0aW5ncy5vTGFuZ3VhZ2Uub1BhZ2luYXRlOwoJCQkJdmFyIGFyaWEgPSBzZXR0aW5ncy5vTGFuZ3VhZ2Uub0FyaWEucGFnaW5hdGUgfHwge307CgkJCQl2YXIgYnRuRGlzcGxheSwgYnRuQ2xhc3MsIGNvdW50ZXI9MDsKCQoJCQkJdmFyIGF0dGFjaCA9IGZ1bmN0aW9uKCBjb250YWluZXIsIGJ1dHRvbnMgKSB7CgkJCQkJdmFyIGksIGllbiwgbm9kZSwgYnV0dG9uLCB0YWJJbmRleDsKCQkJCQl2YXIgZGlzYWJsZWRDbGFzcyA9IGNsYXNzZXMuc1BhZ2VCdXR0b25EaXNhYmxlZDsKCQkJCQl2YXIgY2xpY2tIYW5kbGVyID0gZnVuY3Rpb24gKCBlICkgewoJCQkJCQlfZm5QYWdlQ2hhbmdlKCBzZXR0aW5ncywgZS5kYXRhLmFjdGlvbiwgdHJ1ZSApOwoJCQkJCX07CgkKCQkJCQlmb3IgKCBpPTAsIGllbj1idXR0b25zLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJCQlidXR0b24gPSBidXR0b25zW2ldOwoJCgkJCQkJCWlmICggJC5pc0FycmF5KCBidXR0b24gKSApIHsKCQkJCQkJCXZhciBpbm5lciA9ICQoICc8JysoYnV0dG9uLkRUX2VsIHx8ICdkaXYnKSsnLz4nICkKCQkJCQkJCQkuYXBwZW5kVG8oIGNvbnRhaW5lciApOwoJCQkJCQkJYXR0YWNoKCBpbm5lciwgYnV0dG9uICk7CgkJCQkJCX0KCQkJCQkJZWxzZSB7CgkJCQkJCQlidG5EaXNwbGF5ID0gbnVsbDsKCQkJCQkJCWJ0bkNsYXNzID0gYnV0dG9uOwoJCQkJCQkJdGFiSW5kZXggPSBzZXR0aW5ncy5pVGFiSW5kZXg7CgkKCQkJCQkJCXN3aXRjaCAoIGJ1dHRvbiApIHsKCQkJCQkJCQljYXNlICdlbGxpcHNpcyc6CgkJCQkJCQkJCWNvbnRhaW5lci5hcHBlbmQoJzxzcGFuIGNsYXNzPSJlbGxpcHNpcyI+JiN4MjAyNjs8L3NwYW4+Jyk7CgkJCQkJCQkJCWJyZWFrOwoJCgkJCQkJCQkJY2FzZSAnZmlyc3QnOgoJCQkJCQkJCQlidG5EaXNwbGF5ID0gbGFuZy5zRmlyc3Q7CgkKCQkJCQkJCQkJaWYgKCBwYWdlID09PSAwICkgewoJCQkJCQkJCQkJdGFiSW5kZXggPSAtMTsKCQkJCQkJCQkJCWJ0bkNsYXNzICs9ICcgJyArIGRpc2FibGVkQ2xhc3M7CgkJCQkJCQkJCX0KCQkJCQkJCQkJYnJlYWs7CgkKCQkJCQkJCQljYXNlICdwcmV2aW91cyc6CgkJCQkJCQkJCWJ0bkRpc3BsYXkgPSBsYW5nLnNQcmV2aW91czsKCQoJCQkJCQkJCQlpZiAoIHBhZ2UgPT09IDAgKSB7CgkJCQkJCQkJCQl0YWJJbmRleCA9IC0xOwoJCQkJCQkJCQkJYnRuQ2xhc3MgKz0gJyAnICsgZGlzYWJsZWRDbGFzczsKCQkJCQkJCQkJfQoJCQkJCQkJCQlicmVhazsKCQoJCQkJCQkJCWNhc2UgJ25leHQnOgoJCQkJCQkJCQlidG5EaXNwbGF5ID0gbGFuZy5zTmV4dDsKCQoJCQkJCQkJCQlpZiAoIHBhZ2UgPT09IHBhZ2VzLTEgKSB7CgkJCQkJCQkJCQl0YWJJbmRleCA9IC0xOwoJCQkJCQkJCQkJYnRuQ2xhc3MgKz0gJyAnICsgZGlzYWJsZWRDbGFzczsKCQkJCQkJCQkJfQoJCQkJCQkJCQlicmVhazsKCQoJCQkJCQkJCWNhc2UgJ2xhc3QnOgoJCQkJCQkJCQlidG5EaXNwbGF5ID0gbGFuZy5zTGFzdDsKCQoJCQkJCQkJCQlpZiAoIHBhZ2UgPT09IHBhZ2VzLTEgKSB7CgkJCQkJCQkJCQl0YWJJbmRleCA9IC0xOwoJCQkJCQkJCQkJYnRuQ2xhc3MgKz0gJyAnICsgZGlzYWJsZWRDbGFzczsKCQkJCQkJCQkJfQoJCQkJCQkJCQlicmVhazsKCQoJCQkJCQkJCWRlZmF1bHQ6CgkJCQkJCQkJCWJ0bkRpc3BsYXkgPSBidXR0b24gKyAxOwoJCQkJCQkJCQlidG5DbGFzcyA9IHBhZ2UgPT09IGJ1dHRvbiA/CgkJCQkJCQkJCQljbGFzc2VzLnNQYWdlQnV0dG9uQWN0aXZlIDogJyc7CgkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJfQoJCgkJCQkJCQlpZiAoIGJ0bkRpc3BsYXkgIT09IG51bGwgKSB7CgkJCQkJCQkJbm9kZSA9ICQoJzxhPicsIHsKCQkJCQkJCQkJCSdjbGFzcyc6IGNsYXNzZXMuc1BhZ2VCdXR0b24rJyAnK2J0bkNsYXNzLAoJCQkJCQkJCQkJJ2FyaWEtY29udHJvbHMnOiBzZXR0aW5ncy5zVGFibGVJZCwKCQkJCQkJCQkJCSdhcmlhLWxhYmVsJzogYXJpYVsgYnV0dG9uIF0sCgkJCQkJCQkJCQknZGF0YS1kdC1pZHgnOiBjb3VudGVyLAoJCQkJCQkJCQkJJ3RhYmluZGV4JzogdGFiSW5kZXgsCgkJCQkJCQkJCQknaWQnOiBpZHggPT09IDAgJiYgdHlwZW9mIGJ1dHRvbiA9PT0gJ3N0cmluZycgPwoJCQkJCQkJCQkJCXNldHRpbmdzLnNUYWJsZUlkICsnXycrIGJ1dHRvbiA6CgkJCQkJCQkJCQkJbnVsbAoJCQkJCQkJCQl9ICkKCQkJCQkJCQkJLmh0bWwoIGJ0bkRpc3BsYXkgKQoJCQkJCQkJCQkuYXBwZW5kVG8oIGNvbnRhaW5lciApOwoJCgkJCQkJCQkJX2ZuQmluZEFjdGlvbigKCQkJCQkJCQkJbm9kZSwge2FjdGlvbjogYnV0dG9ufSwgY2xpY2tIYW5kbGVyCgkJCQkJCQkJKTsKCQoJCQkJCQkJCWNvdW50ZXIrKzsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX07CgkKCQkJCS8vIElFOSB0aHJvd3MgYW4gJ3Vua25vd24gZXJyb3InIGlmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaXMgdXNlZAoJCQkJLy8gaW5zaWRlIGFuIGlmcmFtZSBvciBmcmFtZS4gVHJ5IC8gY2F0Y2ggdGhlIGVycm9yLiBOb3QgZ29vZCBmb3IKCQkJCS8vIGFjY2Vzc2liaWxpdHksIGJ1dCBuZWl0aGVyIGFyZSBmcmFtZXMuCgkJCQl2YXIgYWN0aXZlRWw7CgkKCQkJCXRyeSB7CgkJCQkJLy8gQmVjYXVzZSB0aGlzIGFwcHJvYWNoIGlzIGRlc3Ryb3lpbmcgYW5kIHJlY3JlYXRpbmcgdGhlIHBhZ2luZwoJCQkJCS8vIGVsZW1lbnRzLCBmb2N1cyBpcyBsb3N0IG9uIHRoZSBzZWxlY3QgYnV0dG9uIHdoaWNoIGlzIGJhZCBmb3IKCQkJCQkvLyBhY2Nlc3NpYmlsaXR5LiBTbyB3ZSB3YW50IHRvIHJlc3RvcmUgZm9jdXMgb25jZSB0aGUgZHJhdyBoYXMKCQkJCQkvLyBjb21wbGV0ZWQKCQkJCQlhY3RpdmVFbCA9ICQoaG9zdCkuZmluZChkb2N1bWVudC5hY3RpdmVFbGVtZW50KS5kYXRhKCdkdC1pZHgnKTsKCQkJCX0KCQkJCWNhdGNoIChlKSB7fQoJCgkJCQlhdHRhY2goICQoaG9zdCkuZW1wdHkoKSwgYnV0dG9ucyApOwoJCgkJCQlpZiAoIGFjdGl2ZUVsICE9PSB1bmRlZmluZWQgKSB7CgkJCQkJJChob3N0KS5maW5kKCAnW2RhdGEtZHQtaWR4PScrYWN0aXZlRWwrJ10nICkuZm9jdXMoKTsKCQkJCX0KCQkJfQoJCX0KCX0gKTsKCQoJCgkKCS8vIEJ1aWx0IGluIHR5cGUgZGV0ZWN0aW9uLiBTZWUgbW9kZWwuZXh0LmFUeXBlcyBmb3IgaW5mb3JtYXRpb24gYWJvdXQKCS8vIHdoYXQgaXMgcmVxdWlyZWQgZnJvbSB0aGlzIG1ldGhvZHMuCgkkLmV4dGVuZCggRGF0YVRhYmxlLmV4dC50eXBlLmRldGVjdCwgWwoJCS8vIFBsYWluIG51bWJlcnMgLSBmaXJzdCBzaW5jZSBWOCBkZXRlY3RzIHNvbWUgcGxhaW4gbnVtYmVycyBhcyBkYXRlcwoJCS8vIGUuZy4gRGF0ZS5wYXJzZSgnNTUnKSAoYnV0IG5vdCBhbGwsIGUuZy4gRGF0ZS5wYXJzZSgnMjInKS4uLikuCgkJZnVuY3Rpb24gKCBkLCBzZXR0aW5ncyApCgkJewoJCQl2YXIgZGVjaW1hbCA9IHNldHRpbmdzLm9MYW5ndWFnZS5zRGVjaW1hbDsKCQkJcmV0dXJuIF9pc051bWJlciggZCwgZGVjaW1hbCApID8gJ251bScrZGVjaW1hbCA6IG51bGw7CgkJfSwKCQoJCS8vIERhdGVzIChvbmx5IHRob3NlIHJlY29nbmlzZWQgYnkgdGhlIGJyb3dzZXIncyBEYXRlLnBhcnNlKQoJCWZ1bmN0aW9uICggZCwgc2V0dGluZ3MgKQoJCXsKCQkJLy8gVjggdHJpZXMgX3ZlcnlfIGhhcmQgdG8gbWFrZSBhIHN0cmluZyBwYXNzZWQgaW50byBgRGF0ZS5wYXJzZSgpYAoJCQkvLyB2YWxpZCwgc28gd2UgbmVlZCB0byB1c2UgYSByZWdleCB0byByZXN0cmljdCBkYXRlIGZvcm1hdHMuIFVzZSBhCgkJCS8vIHBsdWctaW4gZm9yIGFueXRoaW5nIG90aGVyIHRoYW4gSVNPODYwMSBzdHlsZSBzdHJpbmdzCgkJCWlmICggZCAmJiAhKGQgaW5zdGFuY2VvZiBEYXRlKSAmJiAhIF9yZV9kYXRlLnRlc3QoZCkgKSB7CgkJCQlyZXR1cm4gbnVsbDsKCQkJfQoJCQl2YXIgcGFyc2VkID0gRGF0ZS5wYXJzZShkKTsKCQkJcmV0dXJuIChwYXJzZWQgIT09IG51bGwgJiYgIWlzTmFOKHBhcnNlZCkpIHx8IF9lbXB0eShkKSA/ICdkYXRlJyA6IG51bGw7CgkJfSwKCQoJCS8vIEZvcm1hdHRlZCBudW1iZXJzCgkJZnVuY3Rpb24gKCBkLCBzZXR0aW5ncyApCgkJewoJCQl2YXIgZGVjaW1hbCA9IHNldHRpbmdzLm9MYW5ndWFnZS5zRGVjaW1hbDsKCQkJcmV0dXJuIF9pc051bWJlciggZCwgZGVjaW1hbCwgdHJ1ZSApID8gJ251bS1mbXQnK2RlY2ltYWwgOiBudWxsOwoJCX0sCgkKCQkvLyBIVE1MIG51bWVyaWMKCQlmdW5jdGlvbiAoIGQsIHNldHRpbmdzICkKCQl7CgkJCXZhciBkZWNpbWFsID0gc2V0dGluZ3Mub0xhbmd1YWdlLnNEZWNpbWFsOwoJCQlyZXR1cm4gX2h0bWxOdW1lcmljKCBkLCBkZWNpbWFsICkgPyAnaHRtbC1udW0nK2RlY2ltYWwgOiBudWxsOwoJCX0sCgkKCQkvLyBIVE1MIG51bWVyaWMsIGZvcm1hdHRlZAoJCWZ1bmN0aW9uICggZCwgc2V0dGluZ3MgKQoJCXsKCQkJdmFyIGRlY2ltYWwgPSBzZXR0aW5ncy5vTGFuZ3VhZ2Uuc0RlY2ltYWw7CgkJCXJldHVybiBfaHRtbE51bWVyaWMoIGQsIGRlY2ltYWwsIHRydWUgKSA/ICdodG1sLW51bS1mbXQnK2RlY2ltYWwgOiBudWxsOwoJCX0sCgkKCQkvLyBIVE1MICh0aGlzIGlzIHN0cmljdCBjaGVja2luZyAtIHRoZXJlIG11c3QgYmUgaHRtbCkKCQlmdW5jdGlvbiAoIGQsIHNldHRpbmdzICkKCQl7CgkJCXJldHVybiBfZW1wdHkoIGQgKSB8fCAodHlwZW9mIGQgPT09ICdzdHJpbmcnICYmIGQuaW5kZXhPZignPCcpICE9PSAtMSkgPwoJCQkJJ2h0bWwnIDogbnVsbDsKCQl9CgldICk7CgkKCQoJCgkvLyBGaWx0ZXIgZm9ybWF0dGluZyBmdW5jdGlvbnMuIFNlZSBtb2RlbC5leHQub2ZuU2VhcmNoIGZvciBpbmZvcm1hdGlvbiBhYm91dAoJLy8gd2hhdCBpcyByZXF1aXJlZCBmcm9tIHRoZXNlIG1ldGhvZHMuCgkvLyAKCS8vIE5vdGUgdGhhdCBhZGRpdGlvbmFsIHNlYXJjaCBtZXRob2RzIGFyZSBhZGRlZCBmb3IgdGhlIGh0bWwgbnVtYmVycyBhbmQKCS8vIGh0bWwgZm9ybWF0dGVkIG51bWJlcnMgYnkgYF9hZGROdW1lcmljU29ydCgpYCB3aGVuIHdlIGtub3cgd2hhdCB0aGUgZGVjaW1hbAoJLy8gcGxhY2UgaXMKCQoJCgkkLmV4dGVuZCggRGF0YVRhYmxlLmV4dC50eXBlLnNlYXJjaCwgewoJCWh0bWw6IGZ1bmN0aW9uICggZGF0YSApIHsKCQkJcmV0dXJuIF9lbXB0eShkYXRhKSA/CgkJCQlkYXRhIDoKCQkJCXR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/CgkJCQkJZGF0YQoJCQkJCQkucmVwbGFjZSggX3JlX25ld19saW5lcywgIiAiICkKCQkJCQkJLnJlcGxhY2UoIF9yZV9odG1sLCAiIiApIDoKCQkJCQknJzsKCQl9LAoJCgkJc3RyaW5nOiBmdW5jdGlvbiAoIGRhdGEgKSB7CgkJCXJldHVybiBfZW1wdHkoZGF0YSkgPwoJCQkJZGF0YSA6CgkJCQl0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgPwoJCQkJCWRhdGEucmVwbGFjZSggX3JlX25ld19saW5lcywgIiAiICkgOgoJCQkJCWRhdGE7CgkJfQoJfSApOwoJCgkKCQoJdmFyIF9fbnVtZXJpY1JlcGxhY2UgPSBmdW5jdGlvbiAoIGQsIGRlY2ltYWxQbGFjZSwgcmUxLCByZTIgKSB7CgkJaWYgKCBkICE9PSAwICYmICghZCB8fCBkID09PSAnLScpICkgewoJCQlyZXR1cm4gLUluZmluaXR5OwoJCX0KCQoJCS8vIElmIGEgZGVjaW1hbCBwbGFjZSBvdGhlciB0aGFuIGAuYCBpcyB1c2VkLCBpdCBuZWVkcyB0byBiZSBnaXZlbiB0byB0aGUKCQkvLyBmdW5jdGlvbiBzbyB3ZSBjYW4gZGV0ZWN0IGl0IGFuZCByZXBsYWNlIHdpdGggYSBgLmAgd2hpY2ggaXMgdGhlIG9ubHkKCQkvLyBkZWNpbWFsIHBsYWNlIEphdmFzY3JpcHQgcmVjb2duaXNlcyAtIGl0IGlzIG5vdCBsb2NhbGUgYXdhcmUuCgkJaWYgKCBkZWNpbWFsUGxhY2UgKSB7CgkJCWQgPSBfbnVtVG9EZWNpbWFsKCBkLCBkZWNpbWFsUGxhY2UgKTsKCQl9CgkKCQlpZiAoIGQucmVwbGFjZSApIHsKCQkJaWYgKCByZTEgKSB7CgkJCQlkID0gZC5yZXBsYWNlKCByZTEsICcnICk7CgkJCX0KCQoJCQlpZiAoIHJlMiApIHsKCQkJCWQgPSBkLnJlcGxhY2UoIHJlMiwgJycgKTsKCQkJfQoJCX0KCQoJCXJldHVybiBkICogMTsKCX07CgkKCQoJLy8gQWRkIHRoZSBudW1lcmljICdkZWZvcm1hdHRpbmcnIGZ1bmN0aW9ucyBmb3Igc29ydGluZyBhbmQgc2VhcmNoLiBUaGlzIGlzIGRvbmUKCS8vIGluIGEgZnVuY3Rpb24gdG8gcHJvdmlkZSBhbiBlYXN5IGFiaWxpdHkgZm9yIHRoZSBsYW5ndWFnZSBvcHRpb25zIHRvIGFkZAoJLy8gYWRkaXRpb25hbCBtZXRob2RzIGlmIGEgbm9uLXBlcmlvZCBkZWNpbWFsIHBsYWNlIGlzIHVzZWQuCglmdW5jdGlvbiBfYWRkTnVtZXJpY1NvcnQgKCBkZWNpbWFsUGxhY2UgKSB7CgkJJC5lYWNoKAoJCQl7CgkJCQkvLyBQbGFpbiBudW1iZXJzCgkJCQkibnVtIjogZnVuY3Rpb24gKCBkICkgewoJCQkJCXJldHVybiBfX251bWVyaWNSZXBsYWNlKCBkLCBkZWNpbWFsUGxhY2UgKTsKCQkJCX0sCgkKCQkJCS8vIEZvcm1hdHRlZCBudW1iZXJzCgkJCQkibnVtLWZtdCI6IGZ1bmN0aW9uICggZCApIHsKCQkJCQlyZXR1cm4gX19udW1lcmljUmVwbGFjZSggZCwgZGVjaW1hbFBsYWNlLCBfcmVfZm9ybWF0dGVkX251bWVyaWMgKTsKCQkJCX0sCgkKCQkJCS8vIEhUTUwgbnVtZXJpYwoJCQkJImh0bWwtbnVtIjogZnVuY3Rpb24gKCBkICkgewoJCQkJCXJldHVybiBfX251bWVyaWNSZXBsYWNlKCBkLCBkZWNpbWFsUGxhY2UsIF9yZV9odG1sICk7CgkJCQl9LAoJCgkJCQkvLyBIVE1MIG51bWVyaWMsIGZvcm1hdHRlZAoJCQkJImh0bWwtbnVtLWZtdCI6IGZ1bmN0aW9uICggZCApIHsKCQkJCQlyZXR1cm4gX19udW1lcmljUmVwbGFjZSggZCwgZGVjaW1hbFBsYWNlLCBfcmVfaHRtbCwgX3JlX2Zvcm1hdHRlZF9udW1lcmljICk7CgkJCQl9CgkJCX0sCgkJCWZ1bmN0aW9uICgga2V5LCBmbiApIHsKCQkJCS8vIEFkZCB0aGUgb3JkZXJpbmcgbWV0aG9kCgkJCQlfZXh0LnR5cGUub3JkZXJbIGtleStkZWNpbWFsUGxhY2UrJy1wcmUnIF0gPSBmbjsKCQoJCQkJLy8gRm9yIEhUTUwgdHlwZXMgYWRkIGEgc2VhcmNoIGZvcm1hdHRlciB0aGF0IHdpbGwgc3RyaXAgdGhlIEhUTUwKCQkJCWlmICgga2V5Lm1hdGNoKC9eaHRtbFwtLykgKSB7CgkJCQkJX2V4dC50eXBlLnNlYXJjaFsga2V5K2RlY2ltYWxQbGFjZSBdID0gX2V4dC50eXBlLnNlYXJjaC5odG1sOwoJCQkJfQoJCQl9CgkJKTsKCX0KCQoJCgkvLyBEZWZhdWx0IHNvcnQgbWV0aG9kcwoJJC5leHRlbmQoIF9leHQudHlwZS5vcmRlciwgewoJCS8vIERhdGVzCgkJImRhdGUtcHJlIjogZnVuY3Rpb24gKCBkICkgewoJCQl2YXIgdHMgPSBEYXRlLnBhcnNlKCBkICk7CgkJCXJldHVybiBpc05hTih0cykgPyAtSW5maW5pdHkgOiB0czsKCQl9LAoJCgkJLy8gaHRtbAoJCSJodG1sLXByZSI6IGZ1bmN0aW9uICggYSApIHsKCQkJcmV0dXJuIF9lbXB0eShhKSA/CgkJCQknJyA6CgkJCQlhLnJlcGxhY2UgPwoJCQkJCWEucmVwbGFjZSggLzwuKj8+L2csICIiICkudG9Mb3dlckNhc2UoKSA6CgkJCQkJYSsnJzsKCQl9LAoJCgkJLy8gc3RyaW5nCgkJInN0cmluZy1wcmUiOiBmdW5jdGlvbiAoIGEgKSB7CgkJCS8vIFRoaXMgaXMgYSBsaXR0bGUgY29tcGxleCwgYnV0IGZhc3RlciB0aGFuIGFsd2F5cyBjYWxsaW5nIHRvU3RyaW5nLAoJCQkvLyBodHRwOi8vanNwZXJmLmNvbS90b3N0cmluZy12LWNoZWNrCgkJCXJldHVybiBfZW1wdHkoYSkgPwoJCQkJJycgOgoJCQkJdHlwZW9mIGEgPT09ICdzdHJpbmcnID8KCQkJCQlhLnRvTG93ZXJDYXNlKCkgOgoJCQkJCSEgYS50b1N0cmluZyA/CgkJCQkJCScnIDoKCQkJCQkJYS50b1N0cmluZygpOwoJCX0sCgkKCQkvLyBzdHJpbmctYXNjIGFuZCAtZGVzYyBhcmUgcmV0YWluZWQgb25seSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBvbGQKCQkvLyBzb3J0IG1ldGhvZHMKCQkic3RyaW5nLWFzYyI6IGZ1bmN0aW9uICggeCwgeSApIHsKCQkJcmV0dXJuICgoeCA8IHkpID8gLTEgOiAoKHggPiB5KSA/IDEgOiAwKSk7CgkJfSwKCQoJCSJzdHJpbmctZGVzYyI6IGZ1bmN0aW9uICggeCwgeSApIHsKCQkJcmV0dXJuICgoeCA8IHkpID8gMSA6ICgoeCA+IHkpID8gLTEgOiAwKSk7CgkJfQoJfSApOwoJCgkKCS8vIE51bWVyaWMgc29ydGluZyB0eXBlcyAtIG9yZGVyIGRvZXNuJ3QgbWF0dGVyIGhlcmUKCV9hZGROdW1lcmljU29ydCggJycgKTsKCQoJCgkkLmV4dGVuZCggdHJ1ZSwgRGF0YVRhYmxlLmV4dC5yZW5kZXJlciwgewoJCWhlYWRlcjogewoJCQlfOiBmdW5jdGlvbiAoIHNldHRpbmdzLCBjZWxsLCBjb2x1bW4sIGNsYXNzZXMgKSB7CgkJCQkvLyBObyBhZGRpdGlvbmFsIG1hcmstdXAgcmVxdWlyZWQKCQkJCS8vIEF0dGFjaCBhIHNvcnQgbGlzdGVuZXIgdG8gdXBkYXRlIG9uIHNvcnQgLSBub3RlIHRoYXQgdXNpbmcgdGhlCgkJCQkvLyBgRFRgIG5hbWVzcGFjZSB3aWxsIGFsbG93IHRoZSBldmVudCB0byBiZSByZW1vdmVkIGF1dG9tYXRpY2FsbHkKCQkJCS8vIG9uIGRlc3Ryb3ksIHdoaWxlIHRoZSBgZHRgIG5hbWVzcGFjZWQgZXZlbnQgaXMgdGhlIG9uZSB3ZSBhcmUKCQkJCS8vIGxpc3RlbmluZyBmb3IKCQkJCSQoc2V0dGluZ3MublRhYmxlKS5vbiggJ29yZGVyLmR0LkRUJywgZnVuY3Rpb24gKCBlLCBjdHgsIHNvcnRpbmcsIGNvbHVtbnMgKSB7CgkJCQkJaWYgKCBzZXR0aW5ncyAhPT0gY3R4ICkgeyAvLyBuZWVkIHRvIGNoZWNrIHRoaXMgdGhpcyBpcyB0aGUgaG9zdAoJCQkJCQlyZXR1cm47ICAgICAgICAgICAgICAgLy8gdGFibGUsIG5vdCBhIG5lc3RlZCBvbmUKCQkJCQl9CgkKCQkJCQl2YXIgY29sSWR4ID0gY29sdW1uLmlkeDsKCQoJCQkJCWNlbGwKCQkJCQkJLnJlbW92ZUNsYXNzKAoJCQkJCQkJY29sdW1uLnNTb3J0aW5nQ2xhc3MgKycgJysKCQkJCQkJCWNsYXNzZXMuc1NvcnRBc2MgKycgJysKCQkJCQkJCWNsYXNzZXMuc1NvcnREZXNjCgkJCQkJCSkKCQkJCQkJLmFkZENsYXNzKCBjb2x1bW5zWyBjb2xJZHggXSA9PSAnYXNjJyA/CgkJCQkJCQljbGFzc2VzLnNTb3J0QXNjIDogY29sdW1uc1sgY29sSWR4IF0gPT0gJ2Rlc2MnID8KCQkJCQkJCQljbGFzc2VzLnNTb3J0RGVzYyA6CgkJCQkJCQkJY29sdW1uLnNTb3J0aW5nQ2xhc3MKCQkJCQkJKTsKCQkJCX0gKTsKCQkJfSwKCQoJCQlqcXVlcnl1aTogZnVuY3Rpb24gKCBzZXR0aW5ncywgY2VsbCwgY29sdW1uLCBjbGFzc2VzICkgewoJCQkJJCgnPGRpdi8+JykKCQkJCQkuYWRkQ2xhc3MoIGNsYXNzZXMuc1NvcnRKVUlXcmFwcGVyICkKCQkJCQkuYXBwZW5kKCBjZWxsLmNvbnRlbnRzKCkgKQoJCQkJCS5hcHBlbmQoICQoJzxzcGFuLz4nKQoJCQkJCQkuYWRkQ2xhc3MoIGNsYXNzZXMuc1NvcnRJY29uKycgJytjb2x1bW4uc1NvcnRpbmdDbGFzc0pVSSApCgkJCQkJKQoJCQkJCS5hcHBlbmRUbyggY2VsbCApOwoJCgkJCQkvLyBBdHRhY2ggYSBzb3J0IGxpc3RlbmVyIHRvIHVwZGF0ZSBvbiBzb3J0CgkJCQkkKHNldHRpbmdzLm5UYWJsZSkub24oICdvcmRlci5kdC5EVCcsIGZ1bmN0aW9uICggZSwgY3R4LCBzb3J0aW5nLCBjb2x1bW5zICkgewoJCQkJCWlmICggc2V0dGluZ3MgIT09IGN0eCApIHsKCQkJCQkJcmV0dXJuOwoJCQkJCX0KCQoJCQkJCXZhciBjb2xJZHggPSBjb2x1bW4uaWR4OwoJCgkJCQkJY2VsbAoJCQkJCQkucmVtb3ZlQ2xhc3MoIGNsYXNzZXMuc1NvcnRBc2MgKyIgIitjbGFzc2VzLnNTb3J0RGVzYyApCgkJCQkJCS5hZGRDbGFzcyggY29sdW1uc1sgY29sSWR4IF0gPT0gJ2FzYycgPwoJCQkJCQkJY2xhc3Nlcy5zU29ydEFzYyA6IGNvbHVtbnNbIGNvbElkeCBdID09ICdkZXNjJyA/CgkJCQkJCQkJY2xhc3Nlcy5zU29ydERlc2MgOgoJCQkJCQkJCWNvbHVtbi5zU29ydGluZ0NsYXNzCgkJCQkJCSk7CgkKCQkJCQljZWxsCgkJCQkJCS5maW5kKCAnc3Bhbi4nK2NsYXNzZXMuc1NvcnRJY29uICkKCQkJCQkJLnJlbW92ZUNsYXNzKAoJCQkJCQkJY2xhc3Nlcy5zU29ydEpVSUFzYyArIiAiKwoJCQkJCQkJY2xhc3Nlcy5zU29ydEpVSURlc2MgKyIgIisKCQkJCQkJCWNsYXNzZXMuc1NvcnRKVUkgKyIgIisKCQkJCQkJCWNsYXNzZXMuc1NvcnRKVUlBc2NBbGxvd2VkICsiICIrCgkJCQkJCQljbGFzc2VzLnNTb3J0SlVJRGVzY0FsbG93ZWQKCQkJCQkJKQoJCQkJCQkuYWRkQ2xhc3MoIGNvbHVtbnNbIGNvbElkeCBdID09ICdhc2MnID8KCQkJCQkJCWNsYXNzZXMuc1NvcnRKVUlBc2MgOiBjb2x1bW5zWyBjb2xJZHggXSA9PSAnZGVzYycgPwoJCQkJCQkJCWNsYXNzZXMuc1NvcnRKVUlEZXNjIDoKCQkJCQkJCQljb2x1bW4uc1NvcnRpbmdDbGFzc0pVSQoJCQkJCQkpOwoJCQkJfSApOwoJCQl9CgkJfQoJfSApOwoJCgkvKgoJICogUHVibGljIGhlbHBlciBmdW5jdGlvbnMuIFRoZXNlIGFyZW4ndCB1c2VkIGludGVybmFsbHkgYnkgRGF0YVRhYmxlcywgb3IKCSAqIGNhbGxlZCBieSBhbnkgb2YgdGhlIG9wdGlvbnMgcGFzc2VkIGludG8gRGF0YVRhYmxlcywgYnV0IHRoZXkgY2FuIGJlIHVzZWQKCSAqIGV4dGVybmFsbHkgYnkgZGV2ZWxvcGVycyB3b3JraW5nIHdpdGggRGF0YVRhYmxlcy4gVGhleSBhcmUgaGVscGVyIGZ1bmN0aW9ucwoJICogdG8gbWFrZSB3b3JraW5nIHdpdGggRGF0YVRhYmxlcyBhIGxpdHRsZSBiaXQgZWFzaWVyLgoJICovCgkKCXZhciBfX2h0bWxFc2NhcGVFbnRpdGllcyA9IGZ1bmN0aW9uICggZCApIHsKCQlyZXR1cm4gdHlwZW9mIGQgPT09ICdzdHJpbmcnID8KCQkJZC5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoLyIvZywgJyZxdW90OycpIDoKCQkJZDsKCX07CgkKCS8qKgoJICogSGVscGVycyBmb3IgYGNvbHVtbnMucmVuZGVyYC4KCSAqCgkgKiBUaGUgb3B0aW9ucyBkZWZpbmVkIGhlcmUgY2FuIGJlIHVzZWQgd2l0aCB0aGUgYGNvbHVtbnMucmVuZGVyYCBpbml0aWFsaXNhdGlvbgoJICogb3B0aW9uIHRvIHByb3ZpZGUgYSBkaXNwbGF5IHJlbmRlcmVyLiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZDoKCSAqCgkgKiAqIGBudW1iZXJgIC0gV2lsbCBmb3JtYXQgbnVtZXJpYyBkYXRhIChkZWZpbmVkIGJ5IGBjb2x1bW5zLmRhdGFgKSBmb3IKCSAqICAgZGlzcGxheSwgcmV0YWluaW5nIHRoZSBvcmlnaW5hbCB1bmZvcm1hdHRlZCBkYXRhIGZvciBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcuCgkgKiAgIEl0IHRha2VzIDUgcGFyYW1ldGVyczoKCSAqICAgKiBgc3RyaW5nYCAtIFRob3VzYW5kcyBncm91cGluZyBzZXBhcmF0b3IKCSAqICAgKiBgc3RyaW5nYCAtIERlY2ltYWwgcG9pbnQgaW5kaWNhdG9yCgkgKiAgICogYGludGVnZXJgIC0gTnVtYmVyIG9mIGRlY2ltYWwgcG9pbnRzIHRvIHNob3cKCSAqICAgKiBgc3RyaW5nYCAob3B0aW9uYWwpIC0gUHJlZml4LgoJICogICAqIGBzdHJpbmdgIChvcHRpb25hbCkgLSBQb3N0Zml4ICgvc3VmZml4KS4KCSAqICogYHRleHRgIC0gRXNjYXBlIEhUTUwgdG8gaGVscCBwcmV2ZW50IFhTUyBhdHRhY2tzLiBJdCBoYXMgbm8gb3B0aW9uYWwKCSAqICAgcGFyYW1ldGVycy4KCSAqCgkgKiBAZXhhbXBsZQoJICogICAvLyBDb2x1bW4gZGVmaW5pdGlvbiB1c2luZyB0aGUgbnVtYmVyIHJlbmRlcmVyCgkgKiAgIHsKCSAqICAgICBkYXRhOiAic2FsYXJ5IiwKCSAqICAgICByZW5kZXI6ICQuZm4uZGF0YVRhYmxlLnJlbmRlci5udW1iZXIoICdcJycsICcuJywgMCwgJyQnICkKCSAqICAgfQoJICoKCSAqIEBuYW1lc3BhY2UKCSAqLwoJRGF0YVRhYmxlLnJlbmRlciA9IHsKCQludW1iZXI6IGZ1bmN0aW9uICggdGhvdXNhbmRzLCBkZWNpbWFsLCBwcmVjaXNpb24sIHByZWZpeCwgcG9zdGZpeCApIHsKCQkJcmV0dXJuIHsKCQkJCWRpc3BsYXk6IGZ1bmN0aW9uICggZCApIHsKCQkJCQlpZiAoIHR5cGVvZiBkICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgZCAhPT0gJ3N0cmluZycgKSB7CgkJCQkJCXJldHVybiBkOwoJCQkJCX0KCQoJCQkJCXZhciBuZWdhdGl2ZSA9IGQgPCAwID8gJy0nIDogJyc7CgkJCQkJdmFyIGZsbyA9IHBhcnNlRmxvYXQoIGQgKTsKCQoJCQkJCS8vIElmIE5hTiB0aGVuIHRoZXJlIGlzbid0IG11Y2ggZm9ybWF0dGluZyB0aGF0IHdlIGNhbiBkbyAtIGp1c3QKCQkJCQkvLyByZXR1cm4gaW1tZWRpYXRlbHksIGVzY2FwaW5nIGFueSBIVE1MICh0aGlzIHdhcyBzdXBwb3NlZCB0bwoJCQkJCS8vIGJlIGEgbnVtYmVyIGFmdGVyIGFsbCkKCQkJCQlpZiAoIGlzTmFOKCBmbG8gKSApIHsKCQkJCQkJcmV0dXJuIF9faHRtbEVzY2FwZUVudGl0aWVzKCBkICk7CgkJCQkJfQoJCgkJCQkJZmxvID0gZmxvLnRvRml4ZWQoIHByZWNpc2lvbiApOwoJCQkJCWQgPSBNYXRoLmFicyggZmxvICk7CgkKCQkJCQl2YXIgaW50UGFydCA9IHBhcnNlSW50KCBkLCAxMCApOwoJCQkJCXZhciBmbG9hdFBhcnQgPSBwcmVjaXNpb24gPwoJCQkJCQlkZWNpbWFsKyhkIC0gaW50UGFydCkudG9GaXhlZCggcHJlY2lzaW9uICkuc3Vic3RyaW5nKCAyICk6CgkJCQkJCScnOwoJCgkJCQkJcmV0dXJuIG5lZ2F0aXZlICsgKHByZWZpeHx8JycpICsKCQkJCQkJaW50UGFydC50b1N0cmluZygpLnJlcGxhY2UoCgkJCQkJCQkvXEIoPz0oXGR7M30pKyg/IVxkKSkvZywgdGhvdXNhbmRzCgkJCQkJCSkgKwoJCQkJCQlmbG9hdFBhcnQgKwoJCQkJCQkocG9zdGZpeHx8JycpOwoJCQkJfQoJCQl9OwoJCX0sCgkKCQl0ZXh0OiBmdW5jdGlvbiAoKSB7CgkJCXJldHVybiB7CgkJCQlkaXNwbGF5OiBfX2h0bWxFc2NhcGVFbnRpdGllcywKCQkJCWZpbHRlcjogX19odG1sRXNjYXBlRW50aXRpZXMKCQkJfTsKCQl9Cgl9OwoJCgkKCS8qCgkgKiBUaGlzIGlzIHJlYWxseSBhIGdvb2QgYml0IHJ1YmJpc2ggdGhpcyBtZXRob2Qgb2YgZXhwb3NpbmcgdGhlIGludGVybmFsIG1ldGhvZHMKCSAqIHB1YmxpY2x5Li4uIC0gVG8gYmUgZml4ZWQgaW4gMi4wIHVzaW5nIG1ldGhvZHMgb24gdGhlIHByb3RvdHlwZQoJICovCgkKCQoJLyoqCgkgKiBDcmVhdGUgYSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBleHBvcnRpbmcgYW4gaW50ZXJuYWwgZnVuY3Rpb25zIHRvIGFuIGV4dGVybmFsIEFQSS4KCSAqICBAcGFyYW0ge3N0cmluZ30gZm4gQVBJIGZ1bmN0aW9uIG5hbWUKCSAqICBAcmV0dXJucyB7ZnVuY3Rpb259IHdyYXBwZWQgZnVuY3Rpb24KCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI2ludGVybmFsCgkgKi8KCWZ1bmN0aW9uIF9mbkV4dGVybkFwaUZ1bmMgKGZuKQoJewoJCXJldHVybiBmdW5jdGlvbigpIHsKCQkJdmFyIGFyZ3MgPSBbX2ZuU2V0dGluZ3NGcm9tTm9kZSggdGhpc1tEYXRhVGFibGUuZXh0LmlBcGlJbmRleF0gKV0uY29uY2F0KAoJCQkJQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKQoJCQkpOwoJCQlyZXR1cm4gRGF0YVRhYmxlLmV4dC5pbnRlcm5hbFtmbl0uYXBwbHkoIHRoaXMsIGFyZ3MgKTsKCQl9OwoJfQoJCgkKCS8qKgoJICogUmVmZXJlbmNlIHRvIGludGVybmFsIGZ1bmN0aW9ucyBmb3IgdXNlIGJ5IHBsdWctaW4gZGV2ZWxvcGVycy4gTm90ZSB0aGF0CgkgKiB0aGVzZSBtZXRob2RzIGFyZSByZWZlcmVuY2VzIHRvIGludGVybmFsIGZ1bmN0aW9ucyBhbmQgYXJlIGNvbnNpZGVyZWQgdG8gYmUKCSAqIHByaXZhdGUuIElmIHlvdSB1c2UgdGhlc2UgbWV0aG9kcywgYmUgYXdhcmUgdGhhdCB0aGV5IGFyZSBsaWFibGUgdG8gY2hhbmdlCgkgKiBiZXR3ZWVuIHZlcnNpb25zLgoJICogIEBuYW1lc3BhY2UKCSAqLwoJJC5leHRlbmQoIERhdGFUYWJsZS5leHQuaW50ZXJuYWwsIHsKCQlfZm5FeHRlcm5BcGlGdW5jOiBfZm5FeHRlcm5BcGlGdW5jLAoJCV9mbkJ1aWxkQWpheDogX2ZuQnVpbGRBamF4LAoJCV9mbkFqYXhVcGRhdGU6IF9mbkFqYXhVcGRhdGUsCgkJX2ZuQWpheFBhcmFtZXRlcnM6IF9mbkFqYXhQYXJhbWV0ZXJzLAoJCV9mbkFqYXhVcGRhdGVEcmF3OiBfZm5BamF4VXBkYXRlRHJhdywKCQlfZm5BamF4RGF0YVNyYzogX2ZuQWpheERhdGFTcmMsCgkJX2ZuQWRkQ29sdW1uOiBfZm5BZGRDb2x1bW4sCgkJX2ZuQ29sdW1uT3B0aW9uczogX2ZuQ29sdW1uT3B0aW9ucywKCQlfZm5BZGp1c3RDb2x1bW5TaXppbmc6IF9mbkFkanVzdENvbHVtblNpemluZywKCQlfZm5WaXNpYmxlVG9Db2x1bW5JbmRleDogX2ZuVmlzaWJsZVRvQ29sdW1uSW5kZXgsCgkJX2ZuQ29sdW1uSW5kZXhUb1Zpc2libGU6IF9mbkNvbHVtbkluZGV4VG9WaXNpYmxlLAoJCV9mblZpc2JsZUNvbHVtbnM6IF9mblZpc2JsZUNvbHVtbnMsCgkJX2ZuR2V0Q29sdW1uczogX2ZuR2V0Q29sdW1ucywKCQlfZm5Db2x1bW5UeXBlczogX2ZuQ29sdW1uVHlwZXMsCgkJX2ZuQXBwbHlDb2x1bW5EZWZzOiBfZm5BcHBseUNvbHVtbkRlZnMsCgkJX2ZuSHVuZ2FyaWFuTWFwOiBfZm5IdW5nYXJpYW5NYXAsCgkJX2ZuQ2FtZWxUb0h1bmdhcmlhbjogX2ZuQ2FtZWxUb0h1bmdhcmlhbiwKCQlfZm5MYW5ndWFnZUNvbXBhdDogX2ZuTGFuZ3VhZ2VDb21wYXQsCgkJX2ZuQnJvd3NlckRldGVjdDogX2ZuQnJvd3NlckRldGVjdCwKCQlfZm5BZGREYXRhOiBfZm5BZGREYXRhLAoJCV9mbkFkZFRyOiBfZm5BZGRUciwKCQlfZm5Ob2RlVG9EYXRhSW5kZXg6IF9mbk5vZGVUb0RhdGFJbmRleCwKCQlfZm5Ob2RlVG9Db2x1bW5JbmRleDogX2ZuTm9kZVRvQ29sdW1uSW5kZXgsCgkJX2ZuR2V0Q2VsbERhdGE6IF9mbkdldENlbGxEYXRhLAoJCV9mblNldENlbGxEYXRhOiBfZm5TZXRDZWxsRGF0YSwKCQlfZm5TcGxpdE9iak5vdGF0aW9uOiBfZm5TcGxpdE9iak5vdGF0aW9uLAoJCV9mbkdldE9iamVjdERhdGFGbjogX2ZuR2V0T2JqZWN0RGF0YUZuLAoJCV9mblNldE9iamVjdERhdGFGbjogX2ZuU2V0T2JqZWN0RGF0YUZuLAoJCV9mbkdldERhdGFNYXN0ZXI6IF9mbkdldERhdGFNYXN0ZXIsCgkJX2ZuQ2xlYXJUYWJsZTogX2ZuQ2xlYXJUYWJsZSwKCQlfZm5EZWxldGVJbmRleDogX2ZuRGVsZXRlSW5kZXgsCgkJX2ZuSW52YWxpZGF0ZTogX2ZuSW52YWxpZGF0ZSwKCQlfZm5HZXRSb3dFbGVtZW50czogX2ZuR2V0Um93RWxlbWVudHMsCgkJX2ZuQ3JlYXRlVHI6IF9mbkNyZWF0ZVRyLAoJCV9mbkJ1aWxkSGVhZDogX2ZuQnVpbGRIZWFkLAoJCV9mbkRyYXdIZWFkOiBfZm5EcmF3SGVhZCwKCQlfZm5EcmF3OiBfZm5EcmF3LAoJCV9mblJlRHJhdzogX2ZuUmVEcmF3LAoJCV9mbkFkZE9wdGlvbnNIdG1sOiBfZm5BZGRPcHRpb25zSHRtbCwKCQlfZm5EZXRlY3RIZWFkZXI6IF9mbkRldGVjdEhlYWRlciwKCQlfZm5HZXRVbmlxdWVUaHM6IF9mbkdldFVuaXF1ZVRocywKCQlfZm5GZWF0dXJlSHRtbEZpbHRlcjogX2ZuRmVhdHVyZUh0bWxGaWx0ZXIsCgkJX2ZuRmlsdGVyQ29tcGxldGU6IF9mbkZpbHRlckNvbXBsZXRlLAoJCV9mbkZpbHRlckN1c3RvbTogX2ZuRmlsdGVyQ3VzdG9tLAoJCV9mbkZpbHRlckNvbHVtbjogX2ZuRmlsdGVyQ29sdW1uLAoJCV9mbkZpbHRlcjogX2ZuRmlsdGVyLAoJCV9mbkZpbHRlckNyZWF0ZVNlYXJjaDogX2ZuRmlsdGVyQ3JlYXRlU2VhcmNoLAoJCV9mbkVzY2FwZVJlZ2V4OiBfZm5Fc2NhcGVSZWdleCwKCQlfZm5GaWx0ZXJEYXRhOiBfZm5GaWx0ZXJEYXRhLAoJCV9mbkZlYXR1cmVIdG1sSW5mbzogX2ZuRmVhdHVyZUh0bWxJbmZvLAoJCV9mblVwZGF0ZUluZm86IF9mblVwZGF0ZUluZm8sCgkJX2ZuSW5mb01hY3JvczogX2ZuSW5mb01hY3JvcywKCQlfZm5Jbml0aWFsaXNlOiBfZm5Jbml0aWFsaXNlLAoJCV9mbkluaXRDb21wbGV0ZTogX2ZuSW5pdENvbXBsZXRlLAoJCV9mbkxlbmd0aENoYW5nZTogX2ZuTGVuZ3RoQ2hhbmdlLAoJCV9mbkZlYXR1cmVIdG1sTGVuZ3RoOiBfZm5GZWF0dXJlSHRtbExlbmd0aCwKCQlfZm5GZWF0dXJlSHRtbFBhZ2luYXRlOiBfZm5GZWF0dXJlSHRtbFBhZ2luYXRlLAoJCV9mblBhZ2VDaGFuZ2U6IF9mblBhZ2VDaGFuZ2UsCgkJX2ZuRmVhdHVyZUh0bWxQcm9jZXNzaW5nOiBfZm5GZWF0dXJlSHRtbFByb2Nlc3NpbmcsCgkJX2ZuUHJvY2Vzc2luZ0Rpc3BsYXk6IF9mblByb2Nlc3NpbmdEaXNwbGF5LAoJCV9mbkZlYXR1cmVIdG1sVGFibGU6IF9mbkZlYXR1cmVIdG1sVGFibGUsCgkJX2ZuU2Nyb2xsRHJhdzogX2ZuU2Nyb2xsRHJhdywKCQlfZm5BcHBseVRvQ2hpbGRyZW46IF9mbkFwcGx5VG9DaGlsZHJlbiwKCQlfZm5DYWxjdWxhdGVDb2x1bW5XaWR0aHM6IF9mbkNhbGN1bGF0ZUNvbHVtbldpZHRocywKCQlfZm5UaHJvdHRsZTogX2ZuVGhyb3R0bGUsCgkJX2ZuQ29udmVydFRvV2lkdGg6IF9mbkNvbnZlcnRUb1dpZHRoLAoJCV9mbkdldFdpZGVzdE5vZGU6IF9mbkdldFdpZGVzdE5vZGUsCgkJX2ZuR2V0TWF4TGVuU3RyaW5nOiBfZm5HZXRNYXhMZW5TdHJpbmcsCgkJX2ZuU3RyaW5nVG9Dc3M6IF9mblN0cmluZ1RvQ3NzLAoJCV9mblNvcnRGbGF0dGVuOiBfZm5Tb3J0RmxhdHRlbiwKCQlfZm5Tb3J0OiBfZm5Tb3J0LAoJCV9mblNvcnRBcmlhOiBfZm5Tb3J0QXJpYSwKCQlfZm5Tb3J0TGlzdGVuZXI6IF9mblNvcnRMaXN0ZW5lciwKCQlfZm5Tb3J0QXR0YWNoTGlzdGVuZXI6IF9mblNvcnRBdHRhY2hMaXN0ZW5lciwKCQlfZm5Tb3J0aW5nQ2xhc3NlczogX2ZuU29ydGluZ0NsYXNzZXMsCgkJX2ZuU29ydERhdGE6IF9mblNvcnREYXRhLAoJCV9mblNhdmVTdGF0ZTogX2ZuU2F2ZVN0YXRlLAoJCV9mbkxvYWRTdGF0ZTogX2ZuTG9hZFN0YXRlLAoJCV9mblNldHRpbmdzRnJvbU5vZGU6IF9mblNldHRpbmdzRnJvbU5vZGUsCgkJX2ZuTG9nOiBfZm5Mb2csCgkJX2ZuTWFwOiBfZm5NYXAsCgkJX2ZuQmluZEFjdGlvbjogX2ZuQmluZEFjdGlvbiwKCQlfZm5DYWxsYmFja1JlZzogX2ZuQ2FsbGJhY2tSZWcsCgkJX2ZuQ2FsbGJhY2tGaXJlOiBfZm5DYWxsYmFja0ZpcmUsCgkJX2ZuTGVuZ3RoT3ZlcmZsb3c6IF9mbkxlbmd0aE92ZXJmbG93LAoJCV9mblJlbmRlcmVyOiBfZm5SZW5kZXJlciwKCQlfZm5EYXRhU291cmNlOiBfZm5EYXRhU291cmNlLAoJCV9mblJvd0F0dHJpYnV0ZXM6IF9mblJvd0F0dHJpYnV0ZXMsCgkJX2ZuRXh0ZW5kOiBfZm5FeHRlbmQsCgkJX2ZuQ2FsY3VsYXRlRW5kOiBmdW5jdGlvbiAoKSB7fSAvLyBVc2VkIGJ5IGEgbG90IG9mIHBsdWctaW5zLCBidXQgcmVkdW5kYW50CgkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiAxLjEwLCBzbyB0aGlzIGRlYWQtZW5kIGZ1bmN0aW9uIGlzCgkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGRlZCB0byBwcmV2ZW50IGVycm9ycwoJfSApOwoJCgoJLy8galF1ZXJ5IGFjY2VzcwoJJC5mbi5kYXRhVGFibGUgPSBEYXRhVGFibGU7CgoJLy8gUHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGhvc3QgalF1ZXJ5IG9iamVjdCAoY2lyY3VsYXIgcmVmZXJlbmNlKQoJRGF0YVRhYmxlLiQgPSAkOwoKCS8vIExlZ2FjeSBhbGlhc2VzCgkkLmZuLmRhdGFUYWJsZVNldHRpbmdzID0gRGF0YVRhYmxlLnNldHRpbmdzOwoJJC5mbi5kYXRhVGFibGVFeHQgPSBEYXRhVGFibGUuZXh0OwoKCS8vIFdpdGggYSBjYXBpdGFsIGBEYCB3ZSByZXR1cm4gYSBEYXRhVGFibGVzIEFQSSBpbnN0YW5jZSByYXRoZXIgdGhhbiBhCgkvLyBqUXVlcnkgb2JqZWN0CgkkLmZuLkRhdGFUYWJsZSA9IGZ1bmN0aW9uICggb3B0cyApIHsKCQlyZXR1cm4gJCh0aGlzKS5kYXRhVGFibGUoIG9wdHMgKS5hcGkoKTsKCX07CgoJLy8gQWxsIHByb3BlcnRpZXMgdGhhdCBhcmUgYXZhaWxhYmxlIHRvICQuZm4uZGF0YVRhYmxlIHNob3VsZCBhbHNvIGJlCgkvLyBhdmFpbGFibGUgb24gJC5mbi5EYXRhVGFibGUKCSQuZWFjaCggRGF0YVRhYmxlLCBmdW5jdGlvbiAoIHByb3AsIHZhbCApIHsKCQkkLmZuLkRhdGFUYWJsZVsgcHJvcCBdID0gdmFsOwoJfSApOwoKCgkvLyBJbmZvcm1hdGlvbiBhYm91dCBldmVudHMgZmlyZWQgYnkgRGF0YVRhYmxlcyAtIGZvciBkb2N1bWVudGF0aW9uLgoJLyoqCgkgKiBEcmF3IGV2ZW50LCBmaXJlZCB3aGVuZXZlciB0aGUgdGFibGUgaXMgcmVkcmF3biBvbiB0aGUgcGFnZSwgYXQgdGhlIHNhbWUKCSAqIHBvaW50IGFzIGZuRHJhd0NhbGxiYWNrLiBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIGJpbmRpbmcgZXZlbnRzIG9yCgkgKiBwZXJmb3JtaW5nIGNhbGN1bGF0aW9ucyB3aGVuIHRoZSB0YWJsZSBpcyBhbHRlcmVkIGF0IGFsbC4KCSAqICBAbmFtZSBEYXRhVGFibGUjZHJhdy5kdAoJICogIEBldmVudAoJICogIEBwYXJhbSB7ZXZlbnR9IGUgalF1ZXJ5IGV2ZW50IG9iamVjdAoJICogIEBwYXJhbSB7b2JqZWN0fSBvIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0IHtAbGluayBEYXRhVGFibGUubW9kZWxzLm9TZXR0aW5nc30KCSAqLwoKCS8qKgoJICogU2VhcmNoIGV2ZW50LCBmaXJlZCB3aGVuIHRoZSBzZWFyY2hpbmcgYXBwbGllZCB0byB0aGUgdGFibGUgKHVzaW5nIHRoZQoJICogYnVpbHQtaW4gZ2xvYmFsIHNlYXJjaCwgb3IgY29sdW1uIGZpbHRlcnMpIGlzIGFsdGVyZWQuCgkgKiAgQG5hbWUgRGF0YVRhYmxlI3NlYXJjaC5kdAoJICogIEBldmVudAoJICogIEBwYXJhbSB7ZXZlbnR9IGUgalF1ZXJ5IGV2ZW50IG9iamVjdAoJICogIEBwYXJhbSB7b2JqZWN0fSBvIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0IHtAbGluayBEYXRhVGFibGUubW9kZWxzLm9TZXR0aW5nc30KCSAqLwoKCS8qKgoJICogUGFnZSBjaGFuZ2UgZXZlbnQsIGZpcmVkIHdoZW4gdGhlIHBhZ2luZyBvZiB0aGUgdGFibGUgaXMgYWx0ZXJlZC4KCSAqICBAbmFtZSBEYXRhVGFibGUjcGFnZS5kdAoJICogIEBldmVudAoJICogIEBwYXJhbSB7ZXZlbnR9IGUgalF1ZXJ5IGV2ZW50IG9iamVjdAoJICogIEBwYXJhbSB7b2JqZWN0fSBvIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0IHtAbGluayBEYXRhVGFibGUubW9kZWxzLm9TZXR0aW5nc30KCSAqLwoKCS8qKgoJICogT3JkZXIgZXZlbnQsIGZpcmVkIHdoZW4gdGhlIG9yZGVyaW5nIGFwcGxpZWQgdG8gdGhlIHRhYmxlIGlzIGFsdGVyZWQuCgkgKiAgQG5hbWUgRGF0YVRhYmxlI29yZGVyLmR0CgkgKiAgQGV2ZW50CgkgKiAgQHBhcmFtIHtldmVudH0gZSBqUXVlcnkgZXZlbnQgb2JqZWN0CgkgKiAgQHBhcmFtIHtvYmplY3R9IG8gRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3Qge0BsaW5rIERhdGFUYWJsZS5tb2RlbHMub1NldHRpbmdzfQoJICovCgoJLyoqCgkgKiBEYXRhVGFibGVzIGluaXRpYWxpc2F0aW9uIGNvbXBsZXRlIGV2ZW50LCBmaXJlZCB3aGVuIHRoZSB0YWJsZSBpcyBmdWxseQoJICogZHJhd24sIGluY2x1ZGluZyBBamF4IGRhdGEgbG9hZGVkLCBpZiBBamF4IGRhdGEgaXMgcmVxdWlyZWQuCgkgKiAgQG5hbWUgRGF0YVRhYmxlI2luaXQuZHQKCSAqICBAZXZlbnQKCSAqICBAcGFyYW0ge2V2ZW50fSBlIGpRdWVyeSBldmVudCBvYmplY3QKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHtvYmplY3R9IGpzb24gVGhlIEpTT04gb2JqZWN0IHJlcXVlc3QgZnJvbSB0aGUgc2VydmVyIC0gb25seQoJICogICAgcHJlc2VudCBpZiBjbGllbnQtc2lkZSBBamF4IHNvdXJjZWQgZGF0YSBpcyB1c2VkPC9saT48L29sPgoJICovCgoJLyoqCgkgKiBTdGF0ZSBzYXZlIGV2ZW50LCBmaXJlZCB3aGVuIHRoZSB0YWJsZSBoYXMgY2hhbmdlZCBzdGF0ZSBhIG5ldyBzdGF0ZSBzYXZlCgkgKiBpcyByZXF1aXJlZC4gVGhpcyBldmVudCBhbGxvd3MgbW9kaWZpY2F0aW9uIG9mIHRoZSBzdGF0ZSBzYXZpbmcgb2JqZWN0CgkgKiBwcmlvciB0byBhY3R1YWxseSBkb2luZyB0aGUgc2F2ZSwgaW5jbHVkaW5nIGFkZGl0aW9uIG9yIG90aGVyIHN0YXRlCgkgKiBwcm9wZXJ0aWVzIChmb3IgcGx1Zy1pbnMpIG9yIG1vZGlmaWNhdGlvbiBvZiBhIERhdGFUYWJsZXMgY29yZSBwcm9wZXJ0eS4KCSAqICBAbmFtZSBEYXRhVGFibGUjc3RhdGVTYXZlUGFyYW1zLmR0CgkgKiAgQGV2ZW50CgkgKiAgQHBhcmFtIHtldmVudH0gZSBqUXVlcnkgZXZlbnQgb2JqZWN0CgkgKiAgQHBhcmFtIHtvYmplY3R9IG9TZXR0aW5ncyBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSB7b2JqZWN0fSBqc29uIFRoZSBzdGF0ZSBpbmZvcm1hdGlvbiB0byBiZSBzYXZlZAoJICovCgoJLyoqCgkgKiBTdGF0ZSBsb2FkIGV2ZW50LCBmaXJlZCB3aGVuIHRoZSB0YWJsZSBpcyBsb2FkaW5nIHN0YXRlIGZyb20gdGhlIHN0b3JlZAoJICogZGF0YSwgYnV0IHByaW9yIHRvIHRoZSBzZXR0aW5ncyBvYmplY3QgYmVpbmcgbW9kaWZpZWQgYnkgdGhlIHNhdmVkIHN0YXRlCgkgKiAtIGFsbG93aW5nIG1vZGlmaWNhdGlvbiBvZiB0aGUgc2F2ZWQgc3RhdGUgaXMgcmVxdWlyZWQgb3IgbG9hZGluZyBvZgoJICogc3RhdGUgZm9yIGEgcGx1Zy1pbi4KCSAqICBAbmFtZSBEYXRhVGFibGUjc3RhdGVMb2FkUGFyYW1zLmR0CgkgKiAgQGV2ZW50CgkgKiAgQHBhcmFtIHtldmVudH0gZSBqUXVlcnkgZXZlbnQgb2JqZWN0CgkgKiAgQHBhcmFtIHtvYmplY3R9IG9TZXR0aW5ncyBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSB7b2JqZWN0fSBqc29uIFRoZSBzYXZlZCBzdGF0ZSBpbmZvcm1hdGlvbgoJICovCgoJLyoqCgkgKiBTdGF0ZSBsb2FkZWQgZXZlbnQsIGZpcmVkIHdoZW4gc3RhdGUgaGFzIGJlZW4gbG9hZGVkIGZyb20gc3RvcmVkIGRhdGEgYW5kCgkgKiB0aGUgc2V0dGluZ3Mgb2JqZWN0IGhhcyBiZWVuIG1vZGlmaWVkIGJ5IHRoZSBsb2FkZWQgZGF0YS4KCSAqICBAbmFtZSBEYXRhVGFibGUjc3RhdGVMb2FkZWQuZHQKCSAqICBAZXZlbnQKCSAqICBAcGFyYW0ge2V2ZW50fSBlIGpRdWVyeSBldmVudCBvYmplY3QKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHtvYmplY3R9IGpzb24gVGhlIHNhdmVkIHN0YXRlIGluZm9ybWF0aW9uCgkgKi8KCgkvKioKCSAqIFByb2Nlc3NpbmcgZXZlbnQsIGZpcmVkIHdoZW4gRGF0YVRhYmxlcyBpcyBkb2luZyBzb21lIGtpbmQgb2YgcHJvY2Vzc2luZwoJICogKGJlIGl0LCBvcmRlciwgc2VhcmNoIG9yIGFueXRoaW5nIGVsc2UpLiBJdCBjYW4gYmUgdXNlZCB0byBpbmRpY2F0ZSB0bwoJICogdGhlIGVuZCB1c2VyIHRoYXQgdGhlcmUgaXMgc29tZXRoaW5nIGhhcHBlbmluZywgb3IgdGhhdCBzb21ldGhpbmcgaGFzCgkgKiBmaW5pc2hlZC4KCSAqICBAbmFtZSBEYXRhVGFibGUjcHJvY2Vzc2luZy5kdAoJICogIEBldmVudAoJICogIEBwYXJhbSB7ZXZlbnR9IGUgalF1ZXJ5IGV2ZW50IG9iamVjdAoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge2Jvb2xlYW59IGJTaG93IEZsYWcgZm9yIGlmIERhdGFUYWJsZXMgaXMgZG9pbmcgcHJvY2Vzc2luZyBvciBub3QKCSAqLwoKCS8qKgoJICogQWpheCAoWEhSKSBldmVudCwgZmlyZWQgd2hlbmV2ZXIgYW4gQWpheCByZXF1ZXN0IGlzIGNvbXBsZXRlZCBmcm9tIGEKCSAqIHJlcXVlc3QgdG8gbWFkZSB0byB0aGUgc2VydmVyIGZvciBuZXcgZGF0YS4gVGhpcyBldmVudCBpcyBjYWxsZWQgYmVmb3JlCgkgKiBEYXRhVGFibGVzIHByb2Nlc3NlZCB0aGUgcmV0dXJuZWQgZGF0YSwgc28gaXQgY2FuIGFsc28gYmUgdXNlZCB0byBwcmUtCgkgKiBwcm9jZXNzIHRoZSBkYXRhIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciwgaWYgbmVlZGVkLgoJICoKCSAqIE5vdGUgdGhhdCB0aGlzIHRyaWdnZXIgaXMgY2FsbGVkIGluIGBmblNlcnZlckRhdGFgLCBpZiB5b3Ugb3ZlcnJpZGUKCSAqIGBmblNlcnZlckRhdGFgIGFuZCB3aGljaCB0byB1c2UgdGhpcyBldmVudCwgeW91IG5lZWQgdG8gdHJpZ2dlciBpdCBpbiB5b3UKCSAqIHN1Y2Nlc3MgZnVuY3Rpb24uCgkgKiAgQG5hbWUgRGF0YVRhYmxlI3hoci5kdAoJICogIEBldmVudAoJICogIEBwYXJhbSB7ZXZlbnR9IGUgalF1ZXJ5IGV2ZW50IG9iamVjdAoJICogIEBwYXJhbSB7b2JqZWN0fSBvIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0IHtAbGluayBEYXRhVGFibGUubW9kZWxzLm9TZXR0aW5nc30KCSAqICBAcGFyYW0ge29iamVjdH0ganNvbiBKU09OIHJldHVybmVkIGZyb20gdGhlIHNlcnZlcgoJICoKCSAqICBAZXhhbXBsZQoJICogICAgIC8vIFVzZSBhIGN1c3RvbSBwcm9wZXJ0eSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIgaW4gYW5vdGhlciBET00gZWxlbWVudAoJICogICAgICQoJyN0YWJsZScpLmRhdGFUYWJsZSgpLm9uKCd4aHIuZHQnLCBmdW5jdGlvbiAoZSwgc2V0dGluZ3MsIGpzb24pIHsKCSAqICAgICAgICQoJyNzdGF0dXMnKS5odG1sKCBqc29uLnN0YXR1cyApOwoJICogICAgIH0gKTsKCSAqCgkgKiAgQGV4YW1wbGUKCSAqICAgICAvLyBQcmUtcHJvY2VzcyB0aGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIKCSAqICAgICAkKCcjdGFibGUnKS5kYXRhVGFibGUoKS5vbigneGhyLmR0JywgZnVuY3Rpb24gKGUsIHNldHRpbmdzLCBqc29uKSB7CgkgKiAgICAgICBmb3IgKCB2YXIgaT0wLCBpZW49anNvbi5hYURhdGEubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkgKiAgICAgICAgIGpzb24uYWFEYXRhW2ldLnN1bSA9IGpzb24uYWFEYXRhW2ldLm9uZSArIGpzb24uYWFEYXRhW2ldLnR3bzsKCSAqICAgICAgIH0KCSAqICAgICAgIC8vIE5vdGUgbm8gcmV0dXJuIC0gbWFuaXB1bGF0ZSB0aGUgZGF0YSBkaXJlY3RseSBpbiB0aGUgSlNPTiBvYmplY3QuCgkgKiAgICAgfSApOwoJICovCgoJLyoqCgkgKiBEZXN0cm95IGV2ZW50LCBmaXJlZCB3aGVuIHRoZSBEYXRhVGFibGUgaXMgZGVzdHJveWVkIGJ5IGNhbGxpbmcgZm5EZXN0cm95CgkgKiBvciBwYXNzaW5nIHRoZSBiRGVzdHJveTp0cnVlIHBhcmFtZXRlciBpbiB0aGUgaW5pdGlhbGlzYXRpb24gb2JqZWN0LiBUaGlzCgkgKiBjYW4gYmUgdXNlZCB0byByZW1vdmUgYm91bmQgZXZlbnRzLCBhZGRlZCBET00gbm9kZXMsIGV0Yy4KCSAqICBAbmFtZSBEYXRhVGFibGUjZGVzdHJveS5kdAoJICogIEBldmVudAoJICogIEBwYXJhbSB7ZXZlbnR9IGUgalF1ZXJ5IGV2ZW50IG9iamVjdAoJICogIEBwYXJhbSB7b2JqZWN0fSBvIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0IHtAbGluayBEYXRhVGFibGUubW9kZWxzLm9TZXR0aW5nc30KCSAqLwoKCS8qKgoJICogUGFnZSBsZW5ndGggY2hhbmdlIGV2ZW50LCBmaXJlZCB3aGVuIG51bWJlciBvZiByZWNvcmRzIHRvIHNob3cgb24gZWFjaAoJICogcGFnZSAodGhlIGxlbmd0aCkgaXMgY2hhbmdlZC4KCSAqICBAbmFtZSBEYXRhVGFibGUjbGVuZ3RoLmR0CgkgKiAgQGV2ZW50CgkgKiAgQHBhcmFtIHtldmVudH0gZSBqUXVlcnkgZXZlbnQgb2JqZWN0CgkgKiAgQHBhcmFtIHtvYmplY3R9IG8gRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3Qge0BsaW5rIERhdGFUYWJsZS5tb2RlbHMub1NldHRpbmdzfQoJICogIEBwYXJhbSB7aW50ZWdlcn0gbGVuIE5ldyBsZW5ndGgKCSAqLwoKCS8qKgoJICogQ29sdW1uIHNpemluZyBoYXMgY2hhbmdlZC4KCSAqICBAbmFtZSBEYXRhVGFibGUjY29sdW1uLXNpemluZy5kdAoJICogIEBldmVudAoJICogIEBwYXJhbSB7ZXZlbnR9IGUgalF1ZXJ5IGV2ZW50IG9iamVjdAoJICogIEBwYXJhbSB7b2JqZWN0fSBvIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0IHtAbGluayBEYXRhVGFibGUubW9kZWxzLm9TZXR0aW5nc30KCSAqLwoKCS8qKgoJICogQ29sdW1uIHZpc2liaWxpdHkgaGFzIGNoYW5nZWQuCgkgKiAgQG5hbWUgRGF0YVRhYmxlI2NvbHVtbi12aXNpYmlsaXR5LmR0CgkgKiAgQGV2ZW50CgkgKiAgQHBhcmFtIHtldmVudH0gZSBqUXVlcnkgZXZlbnQgb2JqZWN0CgkgKiAgQHBhcmFtIHtvYmplY3R9IG8gRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3Qge0BsaW5rIERhdGFUYWJsZS5tb2RlbHMub1NldHRpbmdzfQoJICogIEBwYXJhbSB7aW50fSBjb2x1bW4gQ29sdW1uIGluZGV4CgkgKiAgQHBhcmFtIHtib29sfSB2aXMgYGZhbHNlYCBpZiBjb2x1bW4gbm93IGhpZGRlbiwgb3IgYHRydWVgIGlmIHZpc2libGUKCSAqLwoKCXJldHVybiAkLmZuLmRhdGFUYWJsZTsKfSkpOwoKCi8qISBEYXRhVGFibGVzIEJvb3RzdHJhcCA0IGludGVncmF0aW9uCiAqIMKpMjAxMS0yMDE3IFNwcnlNZWRpYSBMdGQgLSBkYXRhdGFibGVzLm5ldC9saWNlbnNlCiAqLwoKLyoqCiAqIERhdGFUYWJsZXMgaW50ZWdyYXRpb24gZm9yIEJvb3RzdHJhcCA0LiBUaGlzIHJlcXVpcmVzIEJvb3RzdHJhcCA0IGFuZAogKiBEYXRhVGFibGVzIDEuMTAgb3IgbmV3ZXIuCiAqCiAqIFRoaXMgZmlsZSBzZXRzIHRoZSBkZWZhdWx0cyBhbmQgYWRkcyBvcHRpb25zIHRvIERhdGFUYWJsZXMgdG8gc3R5bGUgaXRzCiAqIGNvbnRyb2xzIHVzaW5nIEJvb3RzdHJhcC4gU2VlIGh0dHA6Ly9kYXRhdGFibGVzLm5ldC9tYW51YWwvc3R5bGluZy9ib290c3RyYXAKICogZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCiAqLwooZnVuY3Rpb24oIGZhY3RvcnkgKXsKCWlmICggdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkgewoJCS8vIEFNRAoJCWRlZmluZSggWydqcXVlcnknLCAnZGF0YXRhYmxlcy5uZXQnXSwgZnVuY3Rpb24gKCAkICkgewoJCQlyZXR1cm4gZmFjdG9yeSggJCwgd2luZG93LCBkb2N1bWVudCApOwoJCX0gKTsKCX0KCWVsc2UgaWYgKCB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgKSB7CgkJLy8gQ29tbW9uSlMKCQltb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb290LCAkKSB7CgkJCWlmICggISByb290ICkgewoJCQkJcm9vdCA9IHdpbmRvdzsKCQkJfQoKCQkJaWYgKCAhICQgfHwgISAkLmZuLmRhdGFUYWJsZSApIHsKCQkJCS8vIFJlcXVpcmUgRGF0YVRhYmxlcywgd2hpY2ggYXR0YWNoZXMgdG8galF1ZXJ5LCBpbmNsdWRpbmcKCQkJCS8vIGpRdWVyeSBpZiBuZWVkZWQgYW5kIGhhdmUgYSAkIHByb3BlcnR5IHNvIHdlIGNhbiBhY2Nlc3MgdGhlCgkJCQkvLyBqUXVlcnkgb2JqZWN0IHRoYXQgaXMgdXNlZAoJCQkJJCA9IHJlcXVpcmUoJ2RhdGF0YWJsZXMubmV0Jykocm9vdCwgJCkuJDsKCQkJfQoKCQkJcmV0dXJuIGZhY3RvcnkoICQsIHJvb3QsIHJvb3QuZG9jdW1lbnQgKTsKCQl9OwoJfQoJZWxzZSB7CgkJLy8gQnJvd3NlcgoJCWZhY3RvcnkoIGpRdWVyeSwgd2luZG93LCBkb2N1bWVudCApOwoJfQp9KGZ1bmN0aW9uKCAkLCB3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQgKSB7Cid1c2Ugc3RyaWN0JzsKdmFyIERhdGFUYWJsZSA9ICQuZm4uZGF0YVRhYmxlOwoKCi8qIFNldCB0aGUgZGVmYXVsdHMgZm9yIERhdGFUYWJsZXMgaW5pdGlhbGlzYXRpb24gKi8KJC5leHRlbmQoIHRydWUsIERhdGFUYWJsZS5kZWZhdWx0cywgewoJZG9tOgoJCSI8J3Jvdyc8J2NvbC1zbS0xMiBjb2wtbWQtNidsPjwnY29sLXNtLTEyIGNvbC1tZC02J2Y+PiIgKwoJCSI8J3Jvdyc8J2NvbC1zbS0xMid0cj4+IiArCgkJIjwncm93JzwnY29sLXNtLTEyIGNvbC1tZC01J2k+PCdjb2wtc20tMTIgY29sLW1kLTcncD4+IiwKCXJlbmRlcmVyOiAnYm9vdHN0cmFwJwp9ICk7CgoKLyogRGVmYXVsdCBjbGFzcyBtb2RpZmljYXRpb24gKi8KJC5leHRlbmQoIERhdGFUYWJsZS5leHQuY2xhc3NlcywgewoJc1dyYXBwZXI6ICAgICAgImRhdGFUYWJsZXNfd3JhcHBlciBkdC1ib290c3RyYXA0IiwKCXNGaWx0ZXJJbnB1dDogICJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIiwKCXNMZW5ndGhTZWxlY3Q6ICJjdXN0b20tc2VsZWN0IGN1c3RvbS1zZWxlY3Qtc20gZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSIsCglzUHJvY2Vzc2luZzogICAiZGF0YVRhYmxlc19wcm9jZXNzaW5nIGNhcmQiLAoJc1BhZ2VCdXR0b246ICAgInBhZ2luYXRlX2J1dHRvbiBwYWdlLWl0ZW0iCn0gKTsKCgovKiBCb290c3RyYXAgcGFnaW5nIGJ1dHRvbiByZW5kZXJlciAqLwpEYXRhVGFibGUuZXh0LnJlbmRlcmVyLnBhZ2VCdXR0b24uYm9vdHN0cmFwID0gZnVuY3Rpb24gKCBzZXR0aW5ncywgaG9zdCwgaWR4LCBidXR0b25zLCBwYWdlLCBwYWdlcyApIHsKCXZhciBhcGkgICAgID0gbmV3IERhdGFUYWJsZS5BcGkoIHNldHRpbmdzICk7Cgl2YXIgY2xhc3NlcyA9IHNldHRpbmdzLm9DbGFzc2VzOwoJdmFyIGxhbmcgICAgPSBzZXR0aW5ncy5vTGFuZ3VhZ2Uub1BhZ2luYXRlOwoJdmFyIGFyaWEgPSBzZXR0aW5ncy5vTGFuZ3VhZ2Uub0FyaWEucGFnaW5hdGUgfHwge307Cgl2YXIgYnRuRGlzcGxheSwgYnRuQ2xhc3MsIGNvdW50ZXI9MDsKCgl2YXIgYXR0YWNoID0gZnVuY3Rpb24oIGNvbnRhaW5lciwgYnV0dG9ucyApIHsKCQl2YXIgaSwgaWVuLCBub2RlLCBidXR0b247CgkJdmFyIGNsaWNrSGFuZGxlciA9IGZ1bmN0aW9uICggZSApIHsKCQkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJCQlpZiAoICEkKGUuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoJ2Rpc2FibGVkJykgJiYgYXBpLnBhZ2UoKSAhPSBlLmRhdGEuYWN0aW9uICkgewoJCQkJYXBpLnBhZ2UoIGUuZGF0YS5hY3Rpb24gKS5kcmF3KCAncGFnZScgKTsKCQkJfQoJCX07CgoJCWZvciAoIGk9MCwgaWVuPWJ1dHRvbnMubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCWJ1dHRvbiA9IGJ1dHRvbnNbaV07CgoJCQlpZiAoICQuaXNBcnJheSggYnV0dG9uICkgKSB7CgkJCQlhdHRhY2goIGNvbnRhaW5lciwgYnV0dG9uICk7CgkJCX0KCQkJZWxzZSB7CgkJCQlidG5EaXNwbGF5ID0gJyc7CgkJCQlidG5DbGFzcyA9ICcnOwoKCQkJCXN3aXRjaCAoIGJ1dHRvbiApIHsKCQkJCQljYXNlICdlbGxpcHNpcyc6CgkJCQkJCWJ0bkRpc3BsYXkgPSAnJiN4MjAyNjsnOwoJCQkJCQlidG5DbGFzcyA9ICdkaXNhYmxlZCc7CgkJCQkJCWJyZWFrOwoKCQkJCQljYXNlICdmaXJzdCc6CgkJCQkJCWJ0bkRpc3BsYXkgPSBsYW5nLnNGaXJzdDsKCQkJCQkJYnRuQ2xhc3MgPSBidXR0b24gKyAocGFnZSA+IDAgPwoJCQkJCQkJJycgOiAnIGRpc2FibGVkJyk7CgkJCQkJCWJyZWFrOwoKCQkJCQljYXNlICdwcmV2aW91cyc6CgkJCQkJCWJ0bkRpc3BsYXkgPSBsYW5nLnNQcmV2aW91czsKCQkJCQkJYnRuQ2xhc3MgPSBidXR0b24gKyAocGFnZSA+IDAgPwoJCQkJCQkJJycgOiAnIGRpc2FibGVkJyk7CgkJCQkJCWJyZWFrOwoKCQkJCQljYXNlICduZXh0JzoKCQkJCQkJYnRuRGlzcGxheSA9IGxhbmcuc05leHQ7CgkJCQkJCWJ0bkNsYXNzID0gYnV0dG9uICsgKHBhZ2UgPCBwYWdlcy0xID8KCQkJCQkJCScnIDogJyBkaXNhYmxlZCcpOwoJCQkJCQlicmVhazsKCgkJCQkJY2FzZSAnbGFzdCc6CgkJCQkJCWJ0bkRpc3BsYXkgPSBsYW5nLnNMYXN0OwoJCQkJCQlidG5DbGFzcyA9IGJ1dHRvbiArIChwYWdlIDwgcGFnZXMtMSA/CgkJCQkJCQknJyA6ICcgZGlzYWJsZWQnKTsKCQkJCQkJYnJlYWs7CgoJCQkJCWRlZmF1bHQ6CgkJCQkJCWJ0bkRpc3BsYXkgPSBidXR0b24gKyAxOwoJCQkJCQlidG5DbGFzcyA9IHBhZ2UgPT09IGJ1dHRvbiA/CgkJCQkJCQknYWN0aXZlJyA6ICcnOwoJCQkJCQlicmVhazsKCQkJCX0KCgkJCQlpZiAoIGJ0bkRpc3BsYXkgKSB7CgkJCQkJbm9kZSA9ICQoJzxsaT4nLCB7CgkJCQkJCQknY2xhc3MnOiBjbGFzc2VzLnNQYWdlQnV0dG9uKycgJytidG5DbGFzcywKCQkJCQkJCSdpZCc6IGlkeCA9PT0gMCAmJiB0eXBlb2YgYnV0dG9uID09PSAnc3RyaW5nJyA/CgkJCQkJCQkJc2V0dGluZ3Muc1RhYmxlSWQgKydfJysgYnV0dG9uIDoKCQkJCQkJCQludWxsCgkJCQkJCX0gKQoJCQkJCQkuYXBwZW5kKCAkKCc8YT4nLCB7CgkJCQkJCQkJJ2hyZWYnOiAnIycsCgkJCQkJCQkJJ2FyaWEtY29udHJvbHMnOiBzZXR0aW5ncy5zVGFibGVJZCwKCQkJCQkJCQknYXJpYS1sYWJlbCc6IGFyaWFbIGJ1dHRvbiBdLAoJCQkJCQkJCSdkYXRhLWR0LWlkeCc6IGNvdW50ZXIsCgkJCQkJCQkJJ3RhYmluZGV4Jzogc2V0dGluZ3MuaVRhYkluZGV4LAoJCQkJCQkJCSdjbGFzcyc6ICdwYWdlLWxpbmsnCgkJCQkJCQl9ICkKCQkJCQkJCS5odG1sKCBidG5EaXNwbGF5ICkKCQkJCQkJKQoJCQkJCQkuYXBwZW5kVG8oIGNvbnRhaW5lciApOwoKCQkJCQlzZXR0aW5ncy5vQXBpLl9mbkJpbmRBY3Rpb24oCgkJCQkJCW5vZGUsIHthY3Rpb246IGJ1dHRvbn0sIGNsaWNrSGFuZGxlcgoJCQkJCSk7CgoJCQkJCWNvdW50ZXIrKzsKCQkJCX0KCQkJfQoJCX0KCX07CgoJLy8gSUU5IHRocm93cyBhbiAndW5rbm93biBlcnJvcicgaWYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpcyB1c2VkCgkvLyBpbnNpZGUgYW4gaWZyYW1lIG9yIGZyYW1lLiAKCXZhciBhY3RpdmVFbDsKCgl0cnkgewoJCS8vIEJlY2F1c2UgdGhpcyBhcHByb2FjaCBpcyBkZXN0cm95aW5nIGFuZCByZWNyZWF0aW5nIHRoZSBwYWdpbmcKCQkvLyBlbGVtZW50cywgZm9jdXMgaXMgbG9zdCBvbiB0aGUgc2VsZWN0IGJ1dHRvbiB3aGljaCBpcyBiYWQgZm9yCgkJLy8gYWNjZXNzaWJpbGl0eS4gU28gd2Ugd2FudCB0byByZXN0b3JlIGZvY3VzIG9uY2UgdGhlIGRyYXcgaGFzCgkJLy8gY29tcGxldGVkCgkJYWN0aXZlRWwgPSAkKGhvc3QpLmZpbmQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkuZGF0YSgnZHQtaWR4Jyk7Cgl9CgljYXRjaCAoZSkge30KCglhdHRhY2goCgkJJChob3N0KS5lbXB0eSgpLmh0bWwoJzx1bCBjbGFzcz0icGFnaW5hdGlvbiIvPicpLmNoaWxkcmVuKCd1bCcpLAoJCWJ1dHRvbnMKCSk7CgoJaWYgKCBhY3RpdmVFbCAhPT0gdW5kZWZpbmVkICkgewoJCSQoaG9zdCkuZmluZCggJ1tkYXRhLWR0LWlkeD0nK2FjdGl2ZUVsKyddJyApLmZvY3VzKCk7Cgl9Cn07CgoKcmV0dXJuIERhdGFUYWJsZTsKfSkpOwoKCi8qISBCdXR0b25zIGZvciBEYXRhVGFibGVzIDEuNi4xCiAqIMKpMjAxNi0yMDE5IFNwcnlNZWRpYSBMdGQgLSBkYXRhdGFibGVzLm5ldC9saWNlbnNlCiAqLwoKKGZ1bmN0aW9uKCBmYWN0b3J5ICl7CglpZiAoIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCApIHsKCQkvLyBBTUQKCQlkZWZpbmUoIFsnanF1ZXJ5JywgJ2RhdGF0YWJsZXMubmV0J10sIGZ1bmN0aW9uICggJCApIHsKCQkJcmV0dXJuIGZhY3RvcnkoICQsIHdpbmRvdywgZG9jdW1lbnQgKTsKCQl9ICk7Cgl9CgllbHNlIGlmICggdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICkgewoJCS8vIENvbW1vbkpTCgkJbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocm9vdCwgJCkgewoJCQlpZiAoICEgcm9vdCApIHsKCQkJCXJvb3QgPSB3aW5kb3c7CgkJCX0KCgkJCWlmICggISAkIHx8ICEgJC5mbi5kYXRhVGFibGUgKSB7CgkJCQkkID0gcmVxdWlyZSgnZGF0YXRhYmxlcy5uZXQnKShyb290LCAkKS4kOwoJCQl9CgoJCQlyZXR1cm4gZmFjdG9yeSggJCwgcm9vdCwgcm9vdC5kb2N1bWVudCApOwoJCX07Cgl9CgllbHNlIHsKCQkvLyBCcm93c2VyCgkJZmFjdG9yeSggalF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50ICk7Cgl9Cn0oZnVuY3Rpb24oICQsIHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCApIHsKJ3VzZSBzdHJpY3QnOwp2YXIgRGF0YVRhYmxlID0gJC5mbi5kYXRhVGFibGU7CgoKLy8gVXNlZCBmb3IgbmFtZXNwYWNpbmcgZXZlbnRzIGFkZGVkIHRvIHRoZSBkb2N1bWVudCBieSBlYWNoIGluc3RhbmNlLCBzbyB0aGV5Ci8vIGNhbiBiZSByZW1vdmVkIG9uIGRlc3Ryb3kKdmFyIF9pbnN0Q291bnRlciA9IDA7CgovLyBCdXR0b24gbmFtZXNwYWNpbmcgY291bnRlciBmb3IgbmFtZXNwYWNpbmcgZXZlbnRzIG9uIGluZGl2aWR1YWwgYnV0dG9ucwp2YXIgX2J1dHRvbkNvdW50ZXIgPSAwOwoKdmFyIF9kdEJ1dHRvbnMgPSBEYXRhVGFibGUuZXh0LmJ1dHRvbnM7CgovKioKICogW0J1dHRvbnMgZGVzY3JpcHRpb25dCiAqIEBwYXJhbSB7W3R5cGVdfQogKiBAcGFyYW0ge1t0eXBlXX0KICovCnZhciBCdXR0b25zID0gZnVuY3Rpb24oIGR0LCBjb25maWcgKQp7CgkvLyBJZiBub3QgY3JlYXRlZCB3aXRoIGEgYG5ld2Aga2V5d29yZCB0aGVuIHdlIHJldHVybiBhIHdyYXBwZXIgZnVuY3Rpb24gdGhhdAoJLy8gd2lsbCB0YWtlIHRoZSBzZXR0aW5ncyBvYmplY3QgZm9yIGEgRFQuIFRoaXMgYWxsb3dzIGVhc3kgdXNlIG9mIG5ldyBpbnN0YW5jZXMKCS8vIHdpdGggdGhlIGBsYXlvdXRgIG9wdGlvbiAtIGUuZy4gYHRvcExlZnQ6ICQuZm4uZGF0YVRhYmxlLkJ1dHRvbnMoIC4uLiApYC4KCWlmICggISh0aGlzIGluc3RhbmNlb2YgQnV0dG9ucykgKSB7CgkJcmV0dXJuIGZ1bmN0aW9uIChzZXR0aW5ncykgewoJCQlyZXR1cm4gbmV3IEJ1dHRvbnMoIHNldHRpbmdzLCBkdCApLmNvbnRhaW5lcigpOwoJCX07Cgl9CgoJLy8gSWYgdGhlcmUgaXMgbm8gY29uZmlnIHNldCBpdCB0byBhbiBlbXB0eSBvYmplY3QKCWlmICggdHlwZW9mKCBjb25maWcgKSA9PT0gJ3VuZGVmaW5lZCcgKSB7CgkJY29uZmlnID0ge307CQoJfQoJCgkvLyBBbGxvdyBhIGJvb2xlYW4gdHJ1ZSBmb3IgZGVmYXVsdHMKCWlmICggY29uZmlnID09PSB0cnVlICkgewoJCWNvbmZpZyA9IHt9OwoJfQoKCS8vIEZvciBlYXN5IGNvbmZpZ3VyYXRpb24gb2YgYnV0dG9ucyBhbiBhcnJheSBjYW4gYmUgZ2l2ZW4KCWlmICggJC5pc0FycmF5KCBjb25maWcgKSApIHsKCQljb25maWcgPSB7IGJ1dHRvbnM6IGNvbmZpZyB9OwoJfQoKCXRoaXMuYyA9ICQuZXh0ZW5kKCB0cnVlLCB7fSwgQnV0dG9ucy5kZWZhdWx0cywgY29uZmlnICk7CgoJLy8gRG9uJ3Qgd2FudCBhIGRlZXAgY29weSBmb3IgdGhlIGJ1dHRvbnMKCWlmICggY29uZmlnLmJ1dHRvbnMgKSB7CgkJdGhpcy5jLmJ1dHRvbnMgPSBjb25maWcuYnV0dG9uczsKCX0KCgl0aGlzLnMgPSB7CgkJZHQ6IG5ldyBEYXRhVGFibGUuQXBpKCBkdCApLAoJCWJ1dHRvbnM6IFtdLAoJCWxpc3RlbktleXM6ICcnLAoJCW5hbWVzcGFjZTogJ2R0YicrKF9pbnN0Q291bnRlcisrKQoJfTsKCgl0aGlzLmRvbSA9IHsKCQljb250YWluZXI6ICQoJzwnK3RoaXMuYy5kb20uY29udGFpbmVyLnRhZysnLz4nKQoJCQkuYWRkQ2xhc3MoIHRoaXMuYy5kb20uY29udGFpbmVyLmNsYXNzTmFtZSApCgl9OwoKCXRoaXMuX2NvbnN0cnVjdG9yKCk7Cn07CgoKJC5leHRlbmQoIEJ1dHRvbnMucHJvdG90eXBlLCB7CgkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkgKiBQdWJsaWMgbWV0aG9kcwoJICovCgoJLyoqCgkgKiBHZXQgdGhlIGFjdGlvbiBvZiBhIGJ1dHRvbgoJICogQHBhcmFtICB7aW50fHN0cmluZ30gQnV0dG9uIGluZGV4CgkgKiBAcmV0dXJuIHtmdW5jdGlvbn0KCSAqLy8qKgoJICogU2V0IHRoZSBhY3Rpb24gb2YgYSBidXR0b24KCSAqIEBwYXJhbSAge25vZGV9IG5vZGUgQnV0dG9uIGVsZW1lbnQKCSAqIEBwYXJhbSAge2Z1bmN0aW9ufSBhY3Rpb24gRnVuY3Rpb24gdG8gc2V0CgkgKiBAcmV0dXJuIHtCdXR0b25zfSBTZWxmIGZvciBjaGFpbmluZwoJICovCglhY3Rpb246IGZ1bmN0aW9uICggbm9kZSwgYWN0aW9uICkKCXsKCQl2YXIgYnV0dG9uID0gdGhpcy5fbm9kZVRvQnV0dG9uKCBub2RlICk7CgoJCWlmICggYWN0aW9uID09PSB1bmRlZmluZWQgKSB7CgkJCXJldHVybiBidXR0b24uY29uZi5hY3Rpb247CgkJfQoKCQlidXR0b24uY29uZi5hY3Rpb24gPSBhY3Rpb247CgoJCXJldHVybiB0aGlzOwoJfSwKCgkvKioKCSAqIEFkZCBhbiBhY3RpdmUgY2xhc3MgdG8gdGhlIGJ1dHRvbiB0byBtYWtlIHRvIGxvb2sgYWN0aXZlIG9yIGdldCBjdXJyZW50CgkgKiBhY3RpdmUgc3RhdGUuCgkgKiBAcGFyYW0gIHtub2RlfSBub2RlIEJ1dHRvbiBlbGVtZW50CgkgKiBAcGFyYW0gIHtib29sZWFufSBbZmxhZ10gRW5hYmxlIC8gZGlzYWJsZSBmbGFnCgkgKiBAcmV0dXJuIHtCdXR0b25zfSBTZWxmIGZvciBjaGFpbmluZyBvciBib29sZWFuIGZvciBnZXR0ZXIKCSAqLwoJYWN0aXZlOiBmdW5jdGlvbiAoIG5vZGUsIGZsYWcgKSB7CgkJdmFyIGJ1dHRvbiA9IHRoaXMuX25vZGVUb0J1dHRvbiggbm9kZSApOwoJCXZhciBrbGFzcyA9IHRoaXMuYy5kb20uYnV0dG9uLmFjdGl2ZTsKCQl2YXIganFOb2RlID0gJChidXR0b24ubm9kZSk7CgoJCWlmICggZmxhZyA9PT0gdW5kZWZpbmVkICkgewoJCQlyZXR1cm4ganFOb2RlLmhhc0NsYXNzKCBrbGFzcyApOwoJCX0KCgkJanFOb2RlLnRvZ2dsZUNsYXNzKCBrbGFzcywgZmxhZyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGZsYWcgKTsKCgkJcmV0dXJuIHRoaXM7Cgl9LAoKCS8qKgoJICogQWRkIGEgbmV3IGJ1dHRvbgoJICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBCdXR0b24gY29uZmlndXJhdGlvbiBvYmplY3QsIGJhc2Ugc3RyaW5nIG5hbWUgb3IgZnVuY3Rpb24KCSAqIEBwYXJhbSB7aW50fHN0cmluZ30gW2lkeF0gQnV0dG9uIGluZGV4IGZvciB3aGVyZSB0byBpbnNlcnQgdGhlIGJ1dHRvbgoJICogQHJldHVybiB7QnV0dG9uc30gU2VsZiBmb3IgY2hhaW5pbmcKCSAqLwoJYWRkOiBmdW5jdGlvbiAoIGNvbmZpZywgaWR4ICkKCXsKCQl2YXIgYnV0dG9ucyA9IHRoaXMucy5idXR0b25zOwoKCQlpZiAoIHR5cGVvZiBpZHggPT09ICdzdHJpbmcnICkgewoJCQl2YXIgc3BsaXQgPSBpZHguc3BsaXQoJy0nKTsKCQkJdmFyIGJhc2UgPSB0aGlzLnM7CgoJCQlmb3IgKCB2YXIgaT0wLCBpZW49c3BsaXQubGVuZ3RoLTEgOyBpPGllbiA7IGkrKyApIHsKCQkJCWJhc2UgPSBiYXNlLmJ1dHRvbnNbIHNwbGl0W2ldKjEgXTsKCQkJfQoKCQkJYnV0dG9ucyA9IGJhc2UuYnV0dG9uczsKCQkJaWR4ID0gc3BsaXRbIHNwbGl0Lmxlbmd0aC0xIF0qMTsKCQl9CgoJCXRoaXMuX2V4cGFuZEJ1dHRvbiggYnV0dG9ucywgY29uZmlnLCBiYXNlICE9PSB1bmRlZmluZWQsIGlkeCApOwoJCXRoaXMuX2RyYXcoKTsKCgkJcmV0dXJuIHRoaXM7Cgl9LAoKCS8qKgoJICogR2V0IHRoZSBjb250YWluZXIgbm9kZSBmb3IgdGhlIGJ1dHRvbnMKCSAqIEByZXR1cm4ge2pRdWVyeX0gQnV0dG9ucyBub2RlCgkgKi8KCWNvbnRhaW5lcjogZnVuY3Rpb24gKCkKCXsKCQlyZXR1cm4gdGhpcy5kb20uY29udGFpbmVyOwoJfSwKCgkvKioKCSAqIERpc2FibGUgYSBidXR0b24KCSAqIEBwYXJhbSAge25vZGV9IG5vZGUgQnV0dG9uIG5vZGUKCSAqIEByZXR1cm4ge0J1dHRvbnN9IFNlbGYgZm9yIGNoYWluaW5nCgkgKi8KCWRpc2FibGU6IGZ1bmN0aW9uICggbm9kZSApIHsKCQl2YXIgYnV0dG9uID0gdGhpcy5fbm9kZVRvQnV0dG9uKCBub2RlICk7CgoJCSQoYnV0dG9uLm5vZGUpLmFkZENsYXNzKCB0aGlzLmMuZG9tLmJ1dHRvbi5kaXNhYmxlZCApOwoKCQlyZXR1cm4gdGhpczsKCX0sCgoJLyoqCgkgKiBEZXN0cm95IHRoZSBpbnN0YW5jZSwgY2xlYW5pbmcgdXAgZXZlbnQgaGFuZGxlcnMgYW5kIHJlbW92aW5nIERPTQoJICogZWxlbWVudHMKCSAqIEByZXR1cm4ge0J1dHRvbnN9IFNlbGYgZm9yIGNoYWluaW5nCgkgKi8KCWRlc3Ryb3k6IGZ1bmN0aW9uICgpCgl7CgkJLy8gS2V5IGV2ZW50IGxpc3RlbmVyCgkJJCgnYm9keScpLm9mZiggJ2tleXVwLicrdGhpcy5zLm5hbWVzcGFjZSApOwoKCQkvLyBJbmRpdmlkdWFsIGJ1dHRvbiBkZXN0cm95IChzbyB0aGV5IGNhbiByZW1vdmUgdGhlaXIgb3duIGV2ZW50cyBpZgoJCS8vIG5lZWRlZCkuIFRha2UgYSBjb3B5IGFzIHRoZSBhcnJheSBpcyBtb2RpZmllZCBieSBgcmVtb3ZlYAoJCXZhciBidXR0b25zID0gdGhpcy5zLmJ1dHRvbnMuc2xpY2UoKTsKCQl2YXIgaSwgaWVuOwoJCQoJCWZvciAoIGk9MCwgaWVuPWJ1dHRvbnMubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCXRoaXMucmVtb3ZlKCBidXR0b25zW2ldLm5vZGUgKTsKCQl9CgoJCS8vIENvbnRhaW5lcgoJCXRoaXMuZG9tLmNvbnRhaW5lci5yZW1vdmUoKTsKCgkJLy8gUmVtb3ZlIGZyb20gdGhlIHNldHRpbmdzIG9iamVjdCBjb2xsZWN0aW9uCgkJdmFyIGJ1dHRvbkluc3RzID0gdGhpcy5zLmR0LnNldHRpbmdzKClbMF07CgoJCWZvciAoIGk9MCwgaWVuPWJ1dHRvbkluc3RzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQlpZiAoIGJ1dHRvbkluc3RzLmluc3QgPT09IHRoaXMgKSB7CgkJCQlidXR0b25JbnN0cy5zcGxpY2UoIGksIDEgKTsKCQkJCWJyZWFrOwoJCQl9CgkJfQoKCQlyZXR1cm4gdGhpczsKCX0sCgoJLyoqCgkgKiBFbmFibGUgLyBkaXNhYmxlIGEgYnV0dG9uCgkgKiBAcGFyYW0gIHtub2RlfSBub2RlIEJ1dHRvbiBub2RlCgkgKiBAcGFyYW0gIHtib29sZWFufSBbZmxhZz10cnVlXSBFbmFibGUgLyBkaXNhYmxlIGZsYWcKCSAqIEByZXR1cm4ge0J1dHRvbnN9IFNlbGYgZm9yIGNoYWluaW5nCgkgKi8KCWVuYWJsZTogZnVuY3Rpb24gKCBub2RlLCBmbGFnICkKCXsKCQlpZiAoIGZsYWcgPT09IGZhbHNlICkgewoJCQlyZXR1cm4gdGhpcy5kaXNhYmxlKCBub2RlICk7CgkJfQoKCQl2YXIgYnV0dG9uID0gdGhpcy5fbm9kZVRvQnV0dG9uKCBub2RlICk7CgkJJChidXR0b24ubm9kZSkucmVtb3ZlQ2xhc3MoIHRoaXMuYy5kb20uYnV0dG9uLmRpc2FibGVkICk7CgoJCXJldHVybiB0aGlzOwoJfSwKCgkvKioKCSAqIEdldCB0aGUgaW5zdGFuY2UgbmFtZSBmb3IgdGhlIGJ1dHRvbiBzZXQgc2VsZWN0b3IKCSAqIEByZXR1cm4ge3N0cmluZ30gSW5zdGFuY2UgbmFtZQoJICovCgluYW1lOiBmdW5jdGlvbiAoKQoJewoJCXJldHVybiB0aGlzLmMubmFtZTsKCX0sCgoJLyoqCgkgKiBHZXQgYSBidXR0b24ncyBub2RlIG9mIHRoZSBidXR0b25zIGNvbnRhaW5lciBpZiBubyBidXR0b24gaXMgZ2l2ZW4KCSAqIEBwYXJhbSAge25vZGV9IFtub2RlXSBCdXR0b24gbm9kZQoJICogQHJldHVybiB7alF1ZXJ5fSBCdXR0b24gZWxlbWVudCwgb3IgY29udGFpbmVyCgkgKi8KCW5vZGU6IGZ1bmN0aW9uICggbm9kZSApCgl7CgkJaWYgKCAhIG5vZGUgKSB7CgkJCXJldHVybiB0aGlzLmRvbS5jb250YWluZXI7CgkJfQoKCQl2YXIgYnV0dG9uID0gdGhpcy5fbm9kZVRvQnV0dG9uKCBub2RlICk7CgkJcmV0dXJuICQoYnV0dG9uLm5vZGUpOwoJfSwKCgkvKioKCSAqIFNldCAvIGdldCBhIHByb2Nlc3NpbmcgY2xhc3Mgb24gdGhlIHNlbGVjdGVkIGJ1dHRvbgoJICogQHBhcmFtIHtlbGVtZW50fSBub2RlIFRyaWdnZXJpbmcgYnV0dG9uIG5vZGUKCSAqIEBwYXJhbSAge2Jvb2xlYW59IGZsYWcgdHJ1ZSB0byBhZGQsIGZhbHNlIHRvIHJlbW92ZSwgdW5kZWZpbmVkIHRvIGdldAoJICogQHJldHVybiB7Ym9vbGVhbnxCdXR0b25zfSBHZXR0ZXIgdmFsdWUgb3IgdGhpcyBpZiBhIHNldHRlci4KCSAqLwoJcHJvY2Vzc2luZzogZnVuY3Rpb24gKCBub2RlLCBmbGFnICkKCXsKCQl2YXIgZHQgPSB0aGlzLnMuZHQ7CgkJdmFyIGJ1dHRvbiA9IHRoaXMuX25vZGVUb0J1dHRvbiggbm9kZSApOwoKCQlpZiAoIGZsYWcgPT09IHVuZGVmaW5lZCApIHsKCQkJcmV0dXJuICQoYnV0dG9uLm5vZGUpLmhhc0NsYXNzKCAncHJvY2Vzc2luZycgKTsKCQl9CgoJCSQoYnV0dG9uLm5vZGUpLnRvZ2dsZUNsYXNzKCAncHJvY2Vzc2luZycsIGZsYWcgKTsKCgkJJChkdC50YWJsZSgpLm5vZGUoKSkudHJpZ2dlckhhbmRsZXIoICdidXR0b25zLXByb2Nlc3NpbmcuZHQnLCBbCgkJCWZsYWcsIGR0LmJ1dHRvbiggbm9kZSApLCBkdCwgJChub2RlKSwgYnV0dG9uLmNvbmYKCQldICk7CgoJCXJldHVybiB0aGlzOwoJfSwKCgkvKioKCSAqIFJlbW92ZSBhIGJ1dHRvbi4KCSAqIEBwYXJhbSAge25vZGV9IG5vZGUgQnV0dG9uIG5vZGUKCSAqIEByZXR1cm4ge0J1dHRvbnN9IFNlbGYgZm9yIGNoYWluaW5nCgkgKi8KCXJlbW92ZTogZnVuY3Rpb24gKCBub2RlICkKCXsKCQl2YXIgYnV0dG9uID0gdGhpcy5fbm9kZVRvQnV0dG9uKCBub2RlICk7CgkJdmFyIGhvc3QgPSB0aGlzLl9ub2RlVG9Ib3N0KCBub2RlICk7CgkJdmFyIGR0ID0gdGhpcy5zLmR0OwoKCQkvLyBSZW1vdmUgYW55IGNoaWxkIGJ1dHRvbnMgZmlyc3QKCQlpZiAoIGJ1dHRvbi5idXR0b25zLmxlbmd0aCApIHsKCQkJZm9yICggdmFyIGk9YnV0dG9uLmJ1dHRvbnMubGVuZ3RoLTEgOyBpPj0wIDsgaS0tICkgewoJCQkJdGhpcy5yZW1vdmUoIGJ1dHRvbi5idXR0b25zW2ldLm5vZGUgKTsKCQkJfQoJCX0KCgkJLy8gQWxsb3cgdGhlIGJ1dHRvbiB0byByZW1vdmUgZXZlbnQgaGFuZGxlcnMsIGV0YwoJCWlmICggYnV0dG9uLmNvbmYuZGVzdHJveSApIHsKCQkJYnV0dG9uLmNvbmYuZGVzdHJveS5jYWxsKCBkdC5idXR0b24obm9kZSksIGR0LCAkKG5vZGUpLCBidXR0b24uY29uZiApOwoJCX0KCgkJdGhpcy5fcmVtb3ZlS2V5KCBidXR0b24uY29uZiApOwoKCQkkKGJ1dHRvbi5ub2RlKS5yZW1vdmUoKTsKCgkJdmFyIGlkeCA9ICQuaW5BcnJheSggYnV0dG9uLCBob3N0ICk7CgkJaG9zdC5zcGxpY2UoIGlkeCwgMSApOwoKCQlyZXR1cm4gdGhpczsKCX0sCgoJLyoqCgkgKiBHZXQgdGhlIHRleHQgZm9yIGEgYnV0dG9uCgkgKiBAcGFyYW0gIHtpbnR8c3RyaW5nfSBub2RlIEJ1dHRvbiBpbmRleAoJICogQHJldHVybiB7c3RyaW5nfSBCdXR0b24gdGV4dAoJICovLyoqCgkgKiBTZXQgdGhlIHRleHQgZm9yIGEgYnV0dG9uCgkgKiBAcGFyYW0gIHtpbnR8c3RyaW5nfGZ1bmN0aW9ufSBub2RlIEJ1dHRvbiBpbmRleAoJICogQHBhcmFtICB7c3RyaW5nfSBsYWJlbCBUZXh0CgkgKiBAcmV0dXJuIHtCdXR0b25zfSBTZWxmIGZvciBjaGFpbmluZwoJICovCgl0ZXh0OiBmdW5jdGlvbiAoIG5vZGUsIGxhYmVsICkKCXsKCQl2YXIgYnV0dG9uID0gdGhpcy5fbm9kZVRvQnV0dG9uKCBub2RlICk7CgkJdmFyIGJ1dHRvbkxpbmVyID0gdGhpcy5jLmRvbS5jb2xsZWN0aW9uLmJ1dHRvbkxpbmVyOwoJCXZhciBsaW5lclRhZyA9IGJ1dHRvbi5pbkNvbGxlY3Rpb24gJiYgYnV0dG9uTGluZXIgJiYgYnV0dG9uTGluZXIudGFnID8KCQkJYnV0dG9uTGluZXIudGFnIDoKCQkJdGhpcy5jLmRvbS5idXR0b25MaW5lci50YWc7CgkJdmFyIGR0ID0gdGhpcy5zLmR0OwoJCXZhciBqcU5vZGUgPSAkKGJ1dHRvbi5ub2RlKTsKCQl2YXIgdGV4dCA9IGZ1bmN0aW9uICggb3B0ICkgewoJCQlyZXR1cm4gdHlwZW9mIG9wdCA9PT0gJ2Z1bmN0aW9uJyA/CgkJCQlvcHQoIGR0LCBqcU5vZGUsIGJ1dHRvbi5jb25mICkgOgoJCQkJb3B0OwoJCX07CgoJCWlmICggbGFiZWwgPT09IHVuZGVmaW5lZCApIHsKCQkJcmV0dXJuIHRleHQoIGJ1dHRvbi5jb25mLnRleHQgKTsKCQl9CgoJCWJ1dHRvbi5jb25mLnRleHQgPSBsYWJlbDsKCgkJaWYgKCBsaW5lclRhZyApIHsKCQkJanFOb2RlLmNoaWxkcmVuKCBsaW5lclRhZyApLmh0bWwoIHRleHQobGFiZWwpICk7CgkJfQoJCWVsc2UgewoJCQlqcU5vZGUuaHRtbCggdGV4dChsYWJlbCkgKTsKCQl9CgoJCXJldHVybiB0aGlzOwoJfSwKCgoJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJICogQ29uc3RydWN0b3IKCSAqLwoKCS8qKgoJICogQnV0dG9ucyBjb25zdHJ1Y3RvcgoJICogQHByaXZhdGUKCSAqLwoJX2NvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKQoJewoJCXZhciB0aGF0ID0gdGhpczsKCQl2YXIgZHQgPSB0aGlzLnMuZHQ7CgkJdmFyIGR0U2V0dGluZ3MgPSBkdC5zZXR0aW5ncygpWzBdOwoJCXZhciBidXR0b25zID0gIHRoaXMuYy5idXR0b25zOwoKCQlpZiAoICEgZHRTZXR0aW5ncy5fYnV0dG9ucyApIHsKCQkJZHRTZXR0aW5ncy5fYnV0dG9ucyA9IFtdOwoJCX0KCgkJZHRTZXR0aW5ncy5fYnV0dG9ucy5wdXNoKCB7CgkJCWluc3Q6IHRoaXMsCgkJCW5hbWU6IHRoaXMuYy5uYW1lCgkJfSApOwoKCQlmb3IgKCB2YXIgaT0wLCBpZW49YnV0dG9ucy5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJdGhpcy5hZGQoIGJ1dHRvbnNbaV0gKTsKCQl9CgoJCWR0Lm9uKCAnZGVzdHJveScsIGZ1bmN0aW9uICggZSwgc2V0dGluZ3MgKSB7CgkJCWlmICggc2V0dGluZ3MgPT09IGR0U2V0dGluZ3MgKSB7CgkJCQl0aGF0LmRlc3Ryb3koKTsKCQkJfQoJCX0gKTsKCgkJLy8gR2xvYmFsIGtleSBldmVudCBiaW5kaW5nIHRvIGxpc3RlbiBmb3IgYnV0dG9uIGtleXMKCQkkKCdib2R5Jykub24oICdrZXl1cC4nK3RoaXMucy5uYW1lc3BhY2UsIGZ1bmN0aW9uICggZSApIHsKCQkJaWYgKCAhIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSApIHsKCQkJCS8vIFNVc2UgYSBzdHJpbmcgb2YgY2hhcmFjdGVycyBmb3IgZmFzdCBsb29rdXAgb2YgaWYgd2UgbmVlZCB0bwoJCQkJLy8gaGFuZGxlIHRoaXMKCQkJCXZhciBjaGFyYWN0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUua2V5Q29kZSkudG9Mb3dlckNhc2UoKTsKCgkJCQlpZiAoIHRoYXQucy5saXN0ZW5LZXlzLnRvTG93ZXJDYXNlKCkuaW5kZXhPZiggY2hhcmFjdGVyICkgIT09IC0xICkgewoJCQkJCXRoYXQuX2tleXByZXNzKCBjaGFyYWN0ZXIsIGUgKTsKCQkJCX0KCQkJfQoJCX0gKTsKCX0sCgoKCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKCSAqIFByaXZhdGUgbWV0aG9kcwoJICovCgoJLyoqCgkgKiBBZGQgYSBuZXcgYnV0dG9uIHRvIHRoZSBrZXkgcHJlc3MgbGlzdGVuZXIKCSAqIEBwYXJhbSB7b2JqZWN0fSBjb25mIFJlc29sdmVkIGJ1dHRvbiBjb25maWd1cmF0aW9uIG9iamVjdAoJICogQHByaXZhdGUKCSAqLwoJX2FkZEtleTogZnVuY3Rpb24gKCBjb25mICkKCXsKCQlpZiAoIGNvbmYua2V5ICkgewoJCQl0aGlzLnMubGlzdGVuS2V5cyArPSAkLmlzUGxhaW5PYmplY3QoIGNvbmYua2V5ICkgPwoJCQkJY29uZi5rZXkua2V5IDoKCQkJCWNvbmYua2V5OwoJCX0KCX0sCgoJLyoqCgkgKiBJbnNlcnQgdGhlIGJ1dHRvbnMgaW50byB0aGUgY29udGFpbmVyLiBDYWxsIHdpdGhvdXQgcGFyYW1ldGVycyEKCSAqIEBwYXJhbSAge25vZGV9IFtjb250YWluZXJdIFJlY3Vyc2l2ZSBvbmx5IC0gSW5zZXJ0IHBvaW50CgkgKiBAcGFyYW0gIHthcnJheX0gW2J1dHRvbnNdIFJlY3Vyc2l2ZSBvbmx5IC0gQnV0dG9ucyBhcnJheQoJICogQHByaXZhdGUKCSAqLwoJX2RyYXc6IGZ1bmN0aW9uICggY29udGFpbmVyLCBidXR0b25zICkKCXsKCQlpZiAoICEgY29udGFpbmVyICkgewoJCQljb250YWluZXIgPSB0aGlzLmRvbS5jb250YWluZXI7CgkJCWJ1dHRvbnMgPSB0aGlzLnMuYnV0dG9uczsKCQl9CgoJCWNvbnRhaW5lci5jaGlsZHJlbigpLmRldGFjaCgpOwoKCQlmb3IgKCB2YXIgaT0wLCBpZW49YnV0dG9ucy5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJY29udGFpbmVyLmFwcGVuZCggYnV0dG9uc1tpXS5pbnNlcnRlciApOwoJCQljb250YWluZXIuYXBwZW5kKCAnICcgKTsKCgkJCWlmICggYnV0dG9uc1tpXS5idXR0b25zICYmIGJ1dHRvbnNbaV0uYnV0dG9ucy5sZW5ndGggKSB7CgkJCQl0aGlzLl9kcmF3KCBidXR0b25zW2ldLmNvbGxlY3Rpb24sIGJ1dHRvbnNbaV0uYnV0dG9ucyApOwoJCQl9CgkJfQoJfSwKCgkvKioKCSAqIENyZWF0ZSBidXR0b25zIGZyb20gYW4gYXJyYXkgb2YgYnV0dG9ucwoJICogQHBhcmFtICB7YXJyYXl9IGF0dGFjaFRvIEJ1dHRvbnMgYXJyYXkgdG8gYXR0YWNoIHRvCgkgKiBAcGFyYW0gIHtvYmplY3R9IGJ1dHRvbiBCdXR0b24gZGVmaW5pdGlvbgoJICogQHBhcmFtICB7Ym9vbGVhbn0gaW5Db2xsZWN0aW9uIHRydWUgaWYgdGhlIGJ1dHRvbiBpcyBpbiBhIGNvbGxlY3Rpb24KCSAqIEBwcml2YXRlCgkgKi8KCV9leHBhbmRCdXR0b246IGZ1bmN0aW9uICggYXR0YWNoVG8sIGJ1dHRvbiwgaW5Db2xsZWN0aW9uLCBhdHRhY2hQb2ludCApCgl7CgkJdmFyIGR0ID0gdGhpcy5zLmR0OwoJCXZhciBidXR0b25Db3VudGVyID0gMDsKCQl2YXIgYnV0dG9ucyA9ICEgJC5pc0FycmF5KCBidXR0b24gKSA/CgkJCVsgYnV0dG9uIF0gOgoJCQlidXR0b247CgoJCWZvciAoIHZhciBpPTAsIGllbj1idXR0b25zLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQl2YXIgY29uZiA9IHRoaXMuX3Jlc29sdmVFeHRlbmRzKCBidXR0b25zW2ldICk7CgoJCQlpZiAoICEgY29uZiApIHsKCQkJCWNvbnRpbnVlOwoJCQl9CgoJCQkvLyBJZiB0aGUgY29uZmlndXJhdGlvbiBpcyBhbiBhcnJheSwgdGhlbiBleHBhbmQgdGhlIGJ1dHRvbnMgYXQgdGhpcwoJCQkvLyBwb2ludAoJCQlpZiAoICQuaXNBcnJheSggY29uZiApICkgewoJCQkJdGhpcy5fZXhwYW5kQnV0dG9uKCBhdHRhY2hUbywgY29uZiwgaW5Db2xsZWN0aW9uLCBhdHRhY2hQb2ludCApOwoJCQkJY29udGludWU7CgkJCX0KCgkJCXZhciBidWlsdCA9IHRoaXMuX2J1aWxkQnV0dG9uKCBjb25mLCBpbkNvbGxlY3Rpb24gKTsKCQkJaWYgKCAhIGJ1aWx0ICkgewoJCQkJY29udGludWU7CgkJCX0KCgkJCWlmICggYXR0YWNoUG9pbnQgIT09IHVuZGVmaW5lZCApIHsKCQkJCWF0dGFjaFRvLnNwbGljZSggYXR0YWNoUG9pbnQsIDAsIGJ1aWx0ICk7CgkJCQlhdHRhY2hQb2ludCsrOwoJCQl9CgkJCWVsc2UgewoJCQkJYXR0YWNoVG8ucHVzaCggYnVpbHQgKTsKCQkJfQoKCQkJaWYgKCBidWlsdC5jb25mLmJ1dHRvbnMgKSB7CgkJCQlidWlsdC5jb2xsZWN0aW9uID0gJCgnPCcrdGhpcy5jLmRvbS5jb2xsZWN0aW9uLnRhZysnLz4nKTsKCgkJCQlidWlsdC5jb25mLl9jb2xsZWN0aW9uID0gYnVpbHQuY29sbGVjdGlvbjsKCgkJCQl0aGlzLl9leHBhbmRCdXR0b24oIGJ1aWx0LmJ1dHRvbnMsIGJ1aWx0LmNvbmYuYnV0dG9ucywgdHJ1ZSwgYXR0YWNoUG9pbnQgKTsKCQkJfQoKCQkJLy8gaW5pdCBjYWxsIGlzIG1hZGUgaGVyZSwgcmF0aGVyIHRoYW4gYnVpbGRCdXR0b24gYXMgaXQgbmVlZHMgdG8KCQkJLy8gYmUgc2VsZWN0YWJsZSwgYW5kIGZvciB0aGF0IGl0IG5lZWRzIHRvIGJlIGluIHRoZSBidXR0b25zIGFycmF5CgkJCWlmICggY29uZi5pbml0ICkgewoJCQkJY29uZi5pbml0LmNhbGwoIGR0LmJ1dHRvbiggYnVpbHQubm9kZSApLCBkdCwgJChidWlsdC5ub2RlKSwgY29uZiApOwoJCQl9CgoJCQlidXR0b25Db3VudGVyKys7CgkJfQoJfSwKCgkvKioKCSAqIENyZWF0ZSBhbiBpbmRpdmlkdWFsIGJ1dHRvbgoJICogQHBhcmFtICB7b2JqZWN0fSBjb25maWcgICAgICAgICAgICBSZXNvbHZlZCBidXR0b24gY29uZmlndXJhdGlvbgoJICogQHBhcmFtICB7Ym9vbGVhbn0gaW5Db2xsZWN0aW9uIGB0cnVlYCBpZiBhIGNvbGxlY3Rpb24gYnV0dG9uCgkgKiBAcmV0dXJuIHtqUXVlcnl9IENyZWF0ZWQgYnV0dG9uIG5vZGUgKGpRdWVyeSkKCSAqIEBwcml2YXRlCgkgKi8KCV9idWlsZEJ1dHRvbjogZnVuY3Rpb24gKCBjb25maWcsIGluQ29sbGVjdGlvbiApCgl7CgkJdmFyIGJ1dHRvbkRvbSA9IHRoaXMuYy5kb20uYnV0dG9uOwoJCXZhciBsaW5lckRvbSA9IHRoaXMuYy5kb20uYnV0dG9uTGluZXI7CgkJdmFyIGNvbGxlY3Rpb25Eb20gPSB0aGlzLmMuZG9tLmNvbGxlY3Rpb247CgkJdmFyIGR0ID0gdGhpcy5zLmR0OwoJCXZhciB0ZXh0ID0gZnVuY3Rpb24gKCBvcHQgKSB7CgkJCXJldHVybiB0eXBlb2Ygb3B0ID09PSAnZnVuY3Rpb24nID8KCQkJCW9wdCggZHQsIGJ1dHRvbiwgY29uZmlnICkgOgoJCQkJb3B0OwoJCX07CgoJCWlmICggaW5Db2xsZWN0aW9uICYmIGNvbGxlY3Rpb25Eb20uYnV0dG9uICkgewoJCQlidXR0b25Eb20gPSBjb2xsZWN0aW9uRG9tLmJ1dHRvbjsKCQl9CgoJCWlmICggaW5Db2xsZWN0aW9uICYmIGNvbGxlY3Rpb25Eb20uYnV0dG9uTGluZXIgKSB7CgkJCWxpbmVyRG9tID0gY29sbGVjdGlvbkRvbS5idXR0b25MaW5lcjsKCQl9CgoJCS8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBidXR0b24gaXMgYXZhaWxhYmxlIGJhc2VkIG9uIHdoYXRldmVyIHJlcXVpcmVtZW50cwoJCS8vIGl0IGhhcy4gRm9yIGV4YW1wbGUsIEZsYXNoIGJ1dHRvbnMgcmVxdWlyZSBGbGFzaAoJCWlmICggY29uZmlnLmF2YWlsYWJsZSAmJiAhIGNvbmZpZy5hdmFpbGFibGUoIGR0LCBjb25maWcgKSApIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJdmFyIGFjdGlvbiA9IGZ1bmN0aW9uICggZSwgZHQsIGJ1dHRvbiwgY29uZmlnICkgewoJCQljb25maWcuYWN0aW9uLmNhbGwoIGR0LmJ1dHRvbiggYnV0dG9uICksIGUsIGR0LCBidXR0b24sIGNvbmZpZyApOwoKCQkJJChkdC50YWJsZSgpLm5vZGUoKSkudHJpZ2dlckhhbmRsZXIoICdidXR0b25zLWFjdGlvbi5kdCcsIFsKCQkJCWR0LmJ1dHRvbiggYnV0dG9uICksIGR0LCBidXR0b24sIGNvbmZpZyAKCQkJXSApOwoJCX07CgoJCXZhciB0YWcgPSBjb25maWcudGFnIHx8IGJ1dHRvbkRvbS50YWc7CgkJdmFyIGNsaWNrQmx1cnMgPSBjb25maWcuY2xpY2tCbHVycyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGNvbmZpZy5jbGlja0JsdXJzCgkJdmFyIGJ1dHRvbiA9ICQoJzwnK3RhZysnLz4nKQoJCQkuYWRkQ2xhc3MoIGJ1dHRvbkRvbS5jbGFzc05hbWUgKQoJCQkuYXR0ciggJ3RhYmluZGV4JywgdGhpcy5zLmR0LnNldHRpbmdzKClbMF0uaVRhYkluZGV4ICkKCQkJLmF0dHIoICdhcmlhLWNvbnRyb2xzJywgdGhpcy5zLmR0LnRhYmxlKCkubm9kZSgpLmlkICkKCQkJLm9uKCAnY2xpY2suZHRiJywgZnVuY3Rpb24gKGUpIHsKCQkJCWUucHJldmVudERlZmF1bHQoKTsKCgkJCQlpZiAoICEgYnV0dG9uLmhhc0NsYXNzKCBidXR0b25Eb20uZGlzYWJsZWQgKSAmJiBjb25maWcuYWN0aW9uICkgewoJCQkJCWFjdGlvbiggZSwgZHQsIGJ1dHRvbiwgY29uZmlnICk7CgkJCQl9CgkJCQlpZiggY2xpY2tCbHVycyApIHsKCQkJCQlidXR0b24uYmx1cigpOwoJCQkJfQoJCQl9ICkKCQkJLm9uKCAna2V5dXAuZHRiJywgZnVuY3Rpb24gKGUpIHsKCQkJCWlmICggZS5rZXlDb2RlID09PSAxMyApIHsKCQkJCQlpZiAoICEgYnV0dG9uLmhhc0NsYXNzKCBidXR0b25Eb20uZGlzYWJsZWQgKSAmJiBjb25maWcuYWN0aW9uICkgewoJCQkJCQlhY3Rpb24oIGUsIGR0LCBidXR0b24sIGNvbmZpZyApOwoJCQkJCX0KCQkJCX0KCQkJfSApOwoKCQkvLyBNYWtlIGBhYCB0YWdzIGFjdCBsaWtlIGEgbGluawoJCWlmICggdGFnLnRvTG93ZXJDYXNlKCkgPT09ICdhJyApIHsKCQkJYnV0dG9uLmF0dHIoICdocmVmJywgJyMnICk7CgkJfQoKCQkvLyBCdXR0b24gdGFncyBzaG91bGQgaGF2ZSBgdHlwZT1idXR0b25gIHNvIHRoZXkgZG9uJ3QgaGF2ZSBhbnkgZGVmYXVsdCBiZWhhdmlvdXIKCQlpZiAoIHRhZy50b0xvd2VyQ2FzZSgpID09PSAnYnV0dG9uJyApIHsKCQkJYnV0dG9uLmF0dHIoICd0eXBlJywgJ2J1dHRvbicgKTsKCQl9CgoJCWlmICggbGluZXJEb20udGFnICkgewoJCQl2YXIgbGluZXIgPSAkKCc8JytsaW5lckRvbS50YWcrJy8+JykKCQkJCS5odG1sKCB0ZXh0KCBjb25maWcudGV4dCApICkKCQkJCS5hZGRDbGFzcyggbGluZXJEb20uY2xhc3NOYW1lICk7CgoJCQlpZiAoIGxpbmVyRG9tLnRhZy50b0xvd2VyQ2FzZSgpID09PSAnYScgKSB7CgkJCQlsaW5lci5hdHRyKCAnaHJlZicsICcjJyApOwoJCQl9CgoJCQlidXR0b24uYXBwZW5kKCBsaW5lciApOwoJCX0KCQllbHNlIHsKCQkJYnV0dG9uLmh0bWwoIHRleHQoIGNvbmZpZy50ZXh0ICkgKTsKCQl9CgoJCWlmICggY29uZmlnLmVuYWJsZWQgPT09IGZhbHNlICkgewoJCQlidXR0b24uYWRkQ2xhc3MoIGJ1dHRvbkRvbS5kaXNhYmxlZCApOwoJCX0KCgkJaWYgKCBjb25maWcuY2xhc3NOYW1lICkgewoJCQlidXR0b24uYWRkQ2xhc3MoIGNvbmZpZy5jbGFzc05hbWUgKTsKCQl9CgoJCWlmICggY29uZmlnLnRpdGxlQXR0ciApIHsKCQkJYnV0dG9uLmF0dHIoICd0aXRsZScsIHRleHQoIGNvbmZpZy50aXRsZUF0dHIgKSApOwoJCX0KCgkJaWYgKCBjb25maWcuYXR0ciApIHsKCQkJYnV0dG9uLmF0dHIoIGNvbmZpZy5hdHRyICk7CgkJfQoKCQlpZiAoICEgY29uZmlnLm5hbWVzcGFjZSApIHsKCQkJY29uZmlnLm5hbWVzcGFjZSA9ICcuZHQtYnV0dG9uLScrKF9idXR0b25Db3VudGVyKyspOwoJCX0KCgkJdmFyIGJ1dHRvbkNvbnRhaW5lciA9IHRoaXMuYy5kb20uYnV0dG9uQ29udGFpbmVyOwoJCXZhciBpbnNlcnRlcjsKCQlpZiAoIGJ1dHRvbkNvbnRhaW5lciAmJiBidXR0b25Db250YWluZXIudGFnICkgewoJCQlpbnNlcnRlciA9ICQoJzwnK2J1dHRvbkNvbnRhaW5lci50YWcrJy8+JykKCQkJCS5hZGRDbGFzcyggYnV0dG9uQ29udGFpbmVyLmNsYXNzTmFtZSApCgkJCQkuYXBwZW5kKCBidXR0b24gKTsKCQl9CgkJZWxzZSB7CgkJCWluc2VydGVyID0gYnV0dG9uOwoJCX0KCgkJdGhpcy5fYWRkS2V5KCBjb25maWcgKTsKCgkJLy8gU3R5bGUgaW50ZWdyYXRpb24gY2FsbGJhY2sgZm9yIERPTSBtYW5pcHVsYXRpb24KCQkvLyBOb3RlIHRoYXQgdGhpcyBpcyBfbm90XyBkb2N1bWVudGVkLiBJdCBpcyBjdXJyZW50bHkKCQkvLyBmb3Igc3R5bGUgaW50ZWdyYXRpb24gb25seQoJCWlmKCB0aGlzLmMuYnV0dG9uQ3JlYXRlZCApIHsKCQkJaW5zZXJ0ZXIgPSB0aGlzLmMuYnV0dG9uQ3JlYXRlZCggY29uZmlnLCBpbnNlcnRlciApOwoJCX0KCgkJcmV0dXJuIHsKCQkJY29uZjogICAgICAgICBjb25maWcsCgkJCW5vZGU6ICAgICAgICAgYnV0dG9uLmdldCgwKSwKCQkJaW5zZXJ0ZXI6ICAgICBpbnNlcnRlciwKCQkJYnV0dG9uczogICAgICBbXSwKCQkJaW5Db2xsZWN0aW9uOiBpbkNvbGxlY3Rpb24sCgkJCWNvbGxlY3Rpb246ICAgbnVsbAoJCX07Cgl9LAoKCS8qKgoJICogR2V0IHRoZSBidXR0b24gb2JqZWN0IGZyb20gYSBub2RlIChyZWN1cnNpdmUpCgkgKiBAcGFyYW0gIHtub2RlfSBub2RlIEJ1dHRvbiBub2RlCgkgKiBAcGFyYW0gIHthcnJheX0gW2J1dHRvbnNdIEJ1dHRvbiBhcnJheSwgdXNlcyBiYXNlIGlmIG5vdCBkZWZpbmVkCgkgKiBAcmV0dXJuIHtvYmplY3R9IEJ1dHRvbiBvYmplY3QKCSAqIEBwcml2YXRlCgkgKi8KCV9ub2RlVG9CdXR0b246IGZ1bmN0aW9uICggbm9kZSwgYnV0dG9ucyApCgl7CgkJaWYgKCAhIGJ1dHRvbnMgKSB7CgkJCWJ1dHRvbnMgPSB0aGlzLnMuYnV0dG9uczsKCQl9CgoJCWZvciAoIHZhciBpPTAsIGllbj1idXR0b25zLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQlpZiAoIGJ1dHRvbnNbaV0ubm9kZSA9PT0gbm9kZSApIHsKCQkJCXJldHVybiBidXR0b25zW2ldOwoJCQl9CgoJCQlpZiAoIGJ1dHRvbnNbaV0uYnV0dG9ucy5sZW5ndGggKSB7CgkJCQl2YXIgcmV0ID0gdGhpcy5fbm9kZVRvQnV0dG9uKCBub2RlLCBidXR0b25zW2ldLmJ1dHRvbnMgKTsKCgkJCQlpZiAoIHJldCApIHsKCQkJCQlyZXR1cm4gcmV0OwoJCQkJfQoJCQl9CgkJfQoJfSwKCgkvKioKCSAqIEdldCBjb250YWluZXIgYXJyYXkgZm9yIGEgYnV0dG9uIGZyb20gYSBidXR0b24gbm9kZSAocmVjdXJzaXZlKQoJICogQHBhcmFtICB7bm9kZX0gbm9kZSBCdXR0b24gbm9kZQoJICogQHBhcmFtICB7YXJyYXl9IFtidXR0b25zXSBCdXR0b24gYXJyYXksIHVzZXMgYmFzZSBpZiBub3QgZGVmaW5lZAoJICogQHJldHVybiB7YXJyYXl9IEJ1dHRvbidzIGhvc3QgYXJyYXkKCSAqIEBwcml2YXRlCgkgKi8KCV9ub2RlVG9Ib3N0OiBmdW5jdGlvbiAoIG5vZGUsIGJ1dHRvbnMgKQoJewoJCWlmICggISBidXR0b25zICkgewoJCQlidXR0b25zID0gdGhpcy5zLmJ1dHRvbnM7CgkJfQoKCQlmb3IgKCB2YXIgaT0wLCBpZW49YnV0dG9ucy5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJaWYgKCBidXR0b25zW2ldLm5vZGUgPT09IG5vZGUgKSB7CgkJCQlyZXR1cm4gYnV0dG9uczsKCQkJfQoKCQkJaWYgKCBidXR0b25zW2ldLmJ1dHRvbnMubGVuZ3RoICkgewoJCQkJdmFyIHJldCA9IHRoaXMuX25vZGVUb0hvc3QoIG5vZGUsIGJ1dHRvbnNbaV0uYnV0dG9ucyApOwoKCQkJCWlmICggcmV0ICkgewoJCQkJCXJldHVybiByZXQ7CgkJCQl9CgkJCX0KCQl9Cgl9LAoKCS8qKgoJICogSGFuZGxlIGEga2V5IHByZXNzIC0gZGV0ZXJtaW5lIGlmIGFueSBidXR0b24ncyBrZXkgY29uZmlndXJlZCBtYXRjaGVzCgkgKiB3aGF0IHdhcyB0eXBlZCBhbmQgdHJpZ2dlciB0aGUgYWN0aW9uIGlmIHNvLgoJICogQHBhcmFtICB7c3RyaW5nfSBjaGFyYWN0ZXIgVGhlIGNoYXJhY3RlciBwcmVzc2VkCgkgKiBAcGFyYW0gIHtvYmplY3R9IGUgS2V5IGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoaXMgY2FsbAoJICogQHByaXZhdGUKCSAqLwoJX2tleXByZXNzOiBmdW5jdGlvbiAoIGNoYXJhY3RlciwgZSApCgl7CgkJLy8gQ2hlY2sgaWYgdGhpcyBidXR0b24gcHJlc3MgYWxyZWFkeSBhY3RpdmF0ZWQgb24gYW5vdGhlciBpbnN0YW5jZSBvZiBCdXR0b25zCgkJaWYgKCBlLl9idXR0b25zSGFuZGxlZCApIHsKCQkJcmV0dXJuOwoJCX0KCgkJdmFyIHJ1biA9IGZ1bmN0aW9uICggY29uZiwgbm9kZSApIHsKCQkJaWYgKCAhIGNvbmYua2V5ICkgewoJCQkJcmV0dXJuOwoJCQl9CgoJCQlpZiAoIGNvbmYua2V5ID09PSBjaGFyYWN0ZXIgKSB7CgkJCQllLl9idXR0b25zSGFuZGxlZCA9IHRydWU7CgkJCQkkKG5vZGUpLmNsaWNrKCk7CgkJCX0KCQkJZWxzZSBpZiAoICQuaXNQbGFpbk9iamVjdCggY29uZi5rZXkgKSApIHsKCQkJCWlmICggY29uZi5rZXkua2V5ICE9PSBjaGFyYWN0ZXIgKSB7CgkJCQkJcmV0dXJuOwoJCQkJfQoKCQkJCWlmICggY29uZi5rZXkuc2hpZnRLZXkgJiYgISBlLnNoaWZ0S2V5ICkgewoJCQkJCXJldHVybjsKCQkJCX0KCgkJCQlpZiAoIGNvbmYua2V5LmFsdEtleSAmJiAhIGUuYWx0S2V5ICkgewoJCQkJCXJldHVybjsKCQkJCX0KCgkJCQlpZiAoIGNvbmYua2V5LmN0cmxLZXkgJiYgISBlLmN0cmxLZXkgKSB7CgkJCQkJcmV0dXJuOwoJCQkJfQoKCQkJCWlmICggY29uZi5rZXkubWV0YUtleSAmJiAhIGUubWV0YUtleSApIHsKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJLy8gTWFkZSBpdCB0aGlzIGZhciAtIGl0IGlzIGdvb2QKCQkJCWUuX2J1dHRvbnNIYW5kbGVkID0gdHJ1ZTsKCQkJCSQobm9kZSkuY2xpY2soKTsKCQkJfQoJCX07CgoJCXZhciByZWN1cnNlID0gZnVuY3Rpb24gKCBhICkgewoJCQlmb3IgKCB2YXIgaT0wLCBpZW49YS5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCXJ1biggYVtpXS5jb25mLCBhW2ldLm5vZGUgKTsKCgkJCQlpZiAoIGFbaV0uYnV0dG9ucy5sZW5ndGggKSB7CgkJCQkJcmVjdXJzZSggYVtpXS5idXR0b25zICk7CgkJCQl9CgkJCX0KCQl9OwoKCQlyZWN1cnNlKCB0aGlzLnMuYnV0dG9ucyApOwoJfSwKCgkvKioKCSAqIFJlbW92ZSBhIGtleSBmcm9tIHRoZSBrZXkgbGlzdGVuZXIgZm9yIHRoaXMgaW5zdGFuY2UgKHRvIGJlIHVzZWQgd2hlbiBhCgkgKiBidXR0b24gaXMgcmVtb3ZlZCkKCSAqIEBwYXJhbSAge29iamVjdH0gY29uZiBCdXR0b24gY29uZmlndXJhdGlvbgoJICogQHByaXZhdGUKCSAqLwoJX3JlbW92ZUtleTogZnVuY3Rpb24gKCBjb25mICkKCXsKCQlpZiAoIGNvbmYua2V5ICkgewoJCQl2YXIgY2hhcmFjdGVyID0gJC5pc1BsYWluT2JqZWN0KCBjb25mLmtleSApID8KCQkJCWNvbmYua2V5LmtleSA6CgkJCQljb25mLmtleTsKCgkJCS8vIFJlbW92ZSBvbmx5IG9uZSBjaGFyYWN0ZXIsIGFzIG11bHRpcGxlIGJ1dHRvbnMgY291bGQgaGF2ZSB0aGUKCQkJLy8gc2FtZSBsaXN0ZW5pbmcga2V5CgkJCXZhciBhID0gdGhpcy5zLmxpc3RlbktleXMuc3BsaXQoJycpOwoJCQl2YXIgaWR4ID0gJC5pbkFycmF5KCBjaGFyYWN0ZXIsIGEgKTsKCQkJYS5zcGxpY2UoIGlkeCwgMSApOwoJCQl0aGlzLnMubGlzdGVuS2V5cyA9IGEuam9pbignJyk7CgkJfQoJfSwKCgkvKioKCSAqIFJlc29sdmUgYSBidXR0b24gY29uZmlndXJhdGlvbgoJICogQHBhcmFtICB7c3RyaW5nfGZ1bmN0aW9ufG9iamVjdH0gY29uZiBCdXR0b24gY29uZmlnIHRvIHJlc29sdmUKCSAqIEByZXR1cm4ge29iamVjdH0gQnV0dG9uIGNvbmZpZ3VyYXRpb24KCSAqIEBwcml2YXRlCgkgKi8KCV9yZXNvbHZlRXh0ZW5kczogZnVuY3Rpb24gKCBjb25mICkKCXsKCQl2YXIgZHQgPSB0aGlzLnMuZHQ7CgkJdmFyIGksIGllbjsKCQl2YXIgdG9Db25mT2JqZWN0ID0gZnVuY3Rpb24gKCBiYXNlICkgewoJCQl2YXIgbG9vcCA9IDA7CgoJCQkvLyBMb29wIHVudGlsIHdlIGhhdmUgcmVzb2x2ZWQgdG8gYSBidXR0b24gY29uZmlndXJhdGlvbiwgb3IgYW4KCQkJLy8gYXJyYXkgb2YgYnV0dG9uIGNvbmZpZ3VyYXRpb25zICh3aGljaCB3aWxsIGJlIGl0ZXJhdGVkCgkJCS8vIHNlcGFyYXRlbHkpCgkJCXdoaWxlICggISAkLmlzUGxhaW5PYmplY3QoYmFzZSkgJiYgISAkLmlzQXJyYXkoYmFzZSkgKSB7CgkJCQlpZiAoIGJhc2UgPT09IHVuZGVmaW5lZCApIHsKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJaWYgKCB0eXBlb2YgYmFzZSA9PT0gJ2Z1bmN0aW9uJyApIHsKCQkJCQliYXNlID0gYmFzZSggZHQsIGNvbmYgKTsKCgkJCQkJaWYgKCAhIGJhc2UgKSB7CgkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlIGlmICggdHlwZW9mIGJhc2UgPT09ICdzdHJpbmcnICkgewoJCQkJCWlmICggISBfZHRCdXR0b25zWyBiYXNlIF0gKSB7CgkJCQkJCXRocm93ICdVbmtub3duIGJ1dHRvbiB0eXBlOiAnK2Jhc2U7CgkJCQkJfQoKCQkJCQliYXNlID0gX2R0QnV0dG9uc1sgYmFzZSBdOwoJCQkJfQoKCQkJCWxvb3ArKzsKCQkJCWlmICggbG9vcCA+IDMwICkgewoJCQkJCS8vIFByb3RlY3QgYWdhaW5zdCBtaXNjb25maWd1cmF0aW9uIGtpbGxpbmcgdGhlIGJyb3dzZXIKCQkJCQl0aHJvdyAnQnV0dG9uczogVG9vIG1hbnkgaXRlcmF0aW9ucyc7CgkJCQl9CgkJCX0KCgkJCXJldHVybiAkLmlzQXJyYXkoIGJhc2UgKSA/CgkJCQliYXNlIDoKCQkJCSQuZXh0ZW5kKCB7fSwgYmFzZSApOwoJCX07CgoJCWNvbmYgPSB0b0NvbmZPYmplY3QoIGNvbmYgKTsKCgkJd2hpbGUgKCBjb25mICYmIGNvbmYuZXh0ZW5kICkgewoJCQkvLyBVc2UgYHRvQ29uZk9iamVjdGAgaW4gY2FzZSB0aGUgYnV0dG9uIGRlZmluaXRpb24gYmVpbmcgZXh0ZW5kZWQKCQkJLy8gaXMgaXRzZWxmIGEgc3RyaW5nIG9yIGEgZnVuY3Rpb24KCQkJaWYgKCAhIF9kdEJ1dHRvbnNbIGNvbmYuZXh0ZW5kIF0gKSB7CgkJCQl0aHJvdyAnQ2Fubm90IGV4dGVuZCB1bmtub3duIGJ1dHRvbiB0eXBlOiAnK2NvbmYuZXh0ZW5kOwoJCQl9CgoJCQl2YXIgb2JqQXJyYXkgPSB0b0NvbmZPYmplY3QoIF9kdEJ1dHRvbnNbIGNvbmYuZXh0ZW5kIF0gKTsKCQkJaWYgKCAkLmlzQXJyYXkoIG9iakFycmF5ICkgKSB7CgkJCQlyZXR1cm4gb2JqQXJyYXk7CgkJCX0KCQkJZWxzZSBpZiAoICEgb2JqQXJyYXkgKSB7CgkJCQkvLyBUaGlzIGlzIGEgbGl0dGxlIGJydXRhbCBhcyBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byBoYXZlIGEKCQkJCS8vIHZhbGlkIGJ1dHRvbiB3aXRob3V0IHRoZSBleHRlbmQsIGJ1dCBpZiB0aGVyZSBpcyBubyBleHRlbmQKCQkJCS8vIHRoZW4gdGhlIGhvc3QgYnV0dG9uIHdvdWxkIGJlIGFjdGluZyBpbiBhbiB1bmRlZmluZWQgc3RhdGUKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoKCQkJLy8gU3Rhc2ggdGhlIGN1cnJlbnQgY2xhc3MgbmFtZQoJCQl2YXIgb3JpZ2luYWxDbGFzc05hbWUgPSBvYmpBcnJheS5jbGFzc05hbWU7CgoJCQljb25mID0gJC5leHRlbmQoIHt9LCBvYmpBcnJheSwgY29uZiApOwoKCQkJLy8gVGhlIGV4dGVuZCB3aWxsIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIG9yaWdpbmFsIGNsYXNzIG5hbWUgaWYgdGhlCgkJCS8vIGBjb25mYCBvYmplY3QgYWxzbyBhc3NpZ25lZCBhIGNsYXNzLCBidXQgd2Ugd2FudCB0byBjb25jYXRlbmF0ZQoJCQkvLyB0aGVtIHNvIHRoZXkgYXJlIGxpc3QgdGhhdCBpcyBjb21iaW5lZCBmcm9tIGFsbCBleHRlbmRlZCBidXR0b25zCgkJCWlmICggb3JpZ2luYWxDbGFzc05hbWUgJiYgY29uZi5jbGFzc05hbWUgIT09IG9yaWdpbmFsQ2xhc3NOYW1lICkgewoJCQkJY29uZi5jbGFzc05hbWUgPSBvcmlnaW5hbENsYXNzTmFtZSsnICcrY29uZi5jbGFzc05hbWU7CgkJCX0KCgkJCS8vIEJ1dHRvbnMgdG8gYmUgYWRkZWQgdG8gYSBjb2xsZWN0aW9uICAtZ2l2ZXMgdGhlIGFiaWxpdHkgdG8gZGVmaW5lCgkJCS8vIGlmIGJ1dHRvbnMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBzdGFydCBvciBlbmQgb2YgYSBjb2xsZWN0aW9uCgkJCXZhciBwb3N0Zml4QnV0dG9ucyA9IGNvbmYucG9zdGZpeEJ1dHRvbnM7CgkJCWlmICggcG9zdGZpeEJ1dHRvbnMgKSB7CgkJCQlpZiAoICEgY29uZi5idXR0b25zICkgewoJCQkJCWNvbmYuYnV0dG9ucyA9IFtdOwoJCQkJfQoKCQkJCWZvciAoIGk9MCwgaWVuPXBvc3RmaXhCdXR0b25zLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJCWNvbmYuYnV0dG9ucy5wdXNoKCBwb3N0Zml4QnV0dG9uc1tpXSApOwoJCQkJfQoKCQkJCWNvbmYucG9zdGZpeEJ1dHRvbnMgPSBudWxsOwoJCQl9CgoJCQl2YXIgcHJlZml4QnV0dG9ucyA9IGNvbmYucHJlZml4QnV0dG9uczsKCQkJaWYgKCBwcmVmaXhCdXR0b25zICkgewoJCQkJaWYgKCAhIGNvbmYuYnV0dG9ucyApIHsKCQkJCQljb25mLmJ1dHRvbnMgPSBbXTsKCQkJCX0KCgkJCQlmb3IgKCBpPTAsIGllbj1wcmVmaXhCdXR0b25zLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJCWNvbmYuYnV0dG9ucy5zcGxpY2UoIGksIDAsIHByZWZpeEJ1dHRvbnNbaV0gKTsKCQkJCX0KCgkJCQljb25mLnByZWZpeEJ1dHRvbnMgPSBudWxsOwoJCQl9CgoJCQkvLyBBbHRob3VnaCB3ZSB3YW50IHRoZSBgY29uZmAgb2JqZWN0IHRvIG92ZXJ3cml0ZSBhbG1vc3QgYWxsIG9mCgkJCS8vIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgYmVpbmcgZXh0ZW5kZWQsIHRoZSBgZXh0ZW5kYAoJCQkvLyBwcm9wZXJ0eSBzaG91bGQgY29tZSBmcm9tIHRoZSBvYmplY3QgYmVpbmcgZXh0ZW5kZWQKCQkJY29uZi5leHRlbmQgPSBvYmpBcnJheS5leHRlbmQ7CgkJfQoKCQlyZXR1cm4gY29uZjsKCX0sCgoJLyoqCgkgKiBEaXNwbGF5IChhbmQgcmVwbGFjZSBpZiB0aGVyZSBpcyBhbiBleGlzdGluZyBvbmUpIGEgcG9wb3ZlciBhdHRhY2hlZCB0byBhIGJ1dHRvbgoJICogQHBhcmFtIHtzdHJpbmd8bm9kZX0gY29udGVudCBDb250ZW50IHRvIHNob3cKCSAqIEBwYXJhbSB7RGF0YVRhYmxlLkFwaX0gaG9zdEJ1dHRvbiBEVCBBUEkgaW5zdGFuY2Ugb2YgdGhlIGJ1dHRvbgoJICogQHBhcmFtIHtvYmplY3R9IGluT3B0cyBPcHRpb25zIChzZWUgb2JqZWN0IGJlbG93IGZvciBhbGwgb3B0aW9ucykKCSAqLwoJX3BvcG92ZXI6IGZ1bmN0aW9uICggY29udGVudCwgaG9zdEJ1dHRvbiwgaW5PcHRzICkgewoJCXZhciBkdCA9IGhvc3RCdXR0b247CgkJdmFyIGJ1dHRvbnNTZXR0aW5ncyA9IHRoaXMuYzsKCQl2YXIgb3B0aW9ucyA9ICQuZXh0ZW5kKCB7CgkJCWFsaWduOiAnYnV0dG9uLWxlZnQnLCAvLyBidXR0b24tcmlnaHQsIGR0LWNvbnRhaW5lcgoJCQlhdXRvQ2xvc2U6IGZhbHNlLAoJCQliYWNrZ3JvdW5kOiB0cnVlLAoJCQliYWNrZ3JvdW5kQ2xhc3NOYW1lOiAnZHQtYnV0dG9uLWJhY2tncm91bmQnLAoJCQljb250ZW50Q2xhc3NOYW1lOiBidXR0b25zU2V0dGluZ3MuZG9tLmNvbGxlY3Rpb24uY2xhc3NOYW1lLAoJCQljb2xsZWN0aW9uTGF5b3V0OiAnJywKCQkJY29sbGVjdGlvblRpdGxlOiAnJywKCQkJZHJvcHVwOiBmYWxzZSwKCQkJZmFkZTogNDAwLAoJCQlyaWdodEFsaWduQ2xhc3NOYW1lOiAnZHQtYnV0dG9uLXJpZ2h0JywKCQkJdGFnOiBidXR0b25zU2V0dGluZ3MuZG9tLmNvbGxlY3Rpb24udGFnCgkJfSwgaW5PcHRzICk7CgkJdmFyIGhvc3ROb2RlID0gaG9zdEJ1dHRvbi5ub2RlKCk7CgoJCXZhciBjbG9zZSA9IGZ1bmN0aW9uICgpIHsKCQkJJCgnLmR0LWJ1dHRvbi1jb2xsZWN0aW9uJykuc3RvcCgpLmZhZGVPdXQoIG9wdGlvbnMuZmFkZSwgZnVuY3Rpb24gKCkgewoJCQkJJCh0aGlzKS5kZXRhY2goKTsKCQkJfSApOwoKCQkJJChkdC5idXR0b25zKCAnW2FyaWEtaGFzcG9wdXA9InRydWUiXVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0nICkubm9kZXMoKSkKCQkJCS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7CgoJCQkkKCdkaXYuZHQtYnV0dG9uLWJhY2tncm91bmQnKS5vZmYoICdjbGljay5kdGItY29sbGVjdGlvbicgKTsKCQkJQnV0dG9ucy5iYWNrZ3JvdW5kKCBmYWxzZSwgb3B0aW9ucy5iYWNrZ3JvdW5kQ2xhc3NOYW1lLCBvcHRpb25zLmZhZGUsIGhvc3ROb2RlICk7CgoJCQkkKCdib2R5Jykub2ZmKCAnLmR0Yi1jb2xsZWN0aW9uJyApOwoJCQlkdC5vZmYoICdidXR0b25zLWFjdGlvbi5iLWludGVybmFsJyApOwoJCX07CgoJCWlmIChjb250ZW50ID09PSBmYWxzZSkgewoJCQljbG9zZSgpOwoJCX0KCgkJdmFyIGV4aXN0aW5nRXhwYW5kZWQgPSAkKGR0LmJ1dHRvbnMoICdbYXJpYS1oYXNwb3B1cD0idHJ1ZSJdW2FyaWEtZXhwYW5kZWQ9InRydWUiXScgKS5ub2RlcygpKTsKCQlpZiAoIGV4aXN0aW5nRXhwYW5kZWQubGVuZ3RoICkgewoJCQlob3N0Tm9kZSA9IGV4aXN0aW5nRXhwYW5kZWQuZXEoMCk7CgoJCQljbG9zZSgpOwoJCX0KCgkJdmFyIGRpc3BsYXkgPSAkKCc8ZGl2Lz4nKQoJCQkuYWRkQ2xhc3MoJ2R0LWJ1dHRvbi1jb2xsZWN0aW9uJykKCQkJLmFkZENsYXNzKG9wdGlvbnMuY29sbGVjdGlvbkxheW91dCkKCQkJLmNzcygnZGlzcGxheScsICdub25lJyk7CgoJCWNvbnRlbnQgPSAkKGNvbnRlbnQpCgkJCS5hZGRDbGFzcyhvcHRpb25zLmNvbnRlbnRDbGFzc05hbWUpCgkJCS5hdHRyKCdyb2xlJywgJ21lbnUnKQoJCQkuYXBwZW5kVG8oZGlzcGxheSk7CgoJCWhvc3ROb2RlLmF0dHIoICdhcmlhLWV4cGFuZGVkJywgJ3RydWUnICk7CgoJCWlmICggaG9zdE5vZGUucGFyZW50cygnYm9keScpWzBdICE9PSBkb2N1bWVudC5ib2R5ICkgewoJCQlob3N0Tm9kZSA9IGRvY3VtZW50LmJvZHkubGFzdENoaWxkOwoJCX0KCgkJaWYgKCBvcHRpb25zLmNvbGxlY3Rpb25UaXRsZSApIHsKCQkJZGlzcGxheS5wcmVwZW5kKCc8ZGl2IGNsYXNzPSJkdC1idXR0b24tY29sbGVjdGlvbi10aXRsZSI+JytvcHRpb25zLmNvbGxlY3Rpb25UaXRsZSsnPC9kaXY+Jyk7CgkJfQoKCQlkaXNwbGF5CgkJCS5pbnNlcnRBZnRlciggaG9zdE5vZGUgKQoJCQkuZmFkZUluKCBvcHRpb25zLmZhZGUgKTsKCgkJdmFyIHRhYmxlQ29udGFpbmVyID0gJCggaG9zdEJ1dHRvbi50YWJsZSgpLmNvbnRhaW5lcigpICk7CgkJdmFyIHBvc2l0aW9uID0gZGlzcGxheS5jc3MoICdwb3NpdGlvbicgKTsKCgkJaWYgKCBvcHRpb25zLmFsaWduID09PSAnZHQtY29udGFpbmVyJyApIHsKCQkJaG9zdE5vZGUgPSBob3N0Tm9kZS5wYXJlbnQoKTsKCQkJZGlzcGxheS5jc3MoJ3dpZHRoJywgdGFibGVDb250YWluZXIud2lkdGgoKSk7CgkJfQoKCQlpZiAoIHBvc2l0aW9uID09PSAnYWJzb2x1dGUnICkgewoJCQl2YXIgaG9zdFBvc2l0aW9uID0gaG9zdE5vZGUucG9zaXRpb24oKTsKCgkJCWRpc3BsYXkuY3NzKCB7CgkJCQl0b3A6IGhvc3RQb3NpdGlvbi50b3AgKyBob3N0Tm9kZS5vdXRlckhlaWdodCgpLAoJCQkJbGVmdDogaG9zdFBvc2l0aW9uLmxlZnQKCQkJfSApOwoKCQkJLy8gY2FsY3VsYXRlIG92ZXJmbG93IHdoZW4gcG9zaXRpb25lZCBiZW5lYXRoCgkJCXZhciBjb2xsZWN0aW9uSGVpZ2h0ID0gZGlzcGxheS5vdXRlckhlaWdodCgpOwoJCQl2YXIgY29sbGVjdGlvbldpZHRoID0gZGlzcGxheS5vdXRlcldpZHRoKCk7CgkJCXZhciB0YWJsZUJvdHRvbSA9IHRhYmxlQ29udGFpbmVyLm9mZnNldCgpLnRvcCArIHRhYmxlQ29udGFpbmVyLmhlaWdodCgpOwoJCQl2YXIgbGlzdEJvdHRvbSA9IGhvc3RQb3NpdGlvbi50b3AgKyBob3N0Tm9kZS5vdXRlckhlaWdodCgpICsgY29sbGVjdGlvbkhlaWdodDsKCQkJdmFyIGJvdHRvbU92ZXJmbG93ID0gbGlzdEJvdHRvbSAtIHRhYmxlQm90dG9tOwoKCQkJLy8gY2FsY3VsYXRlIG92ZXJmbG93IHdoZW4gcG9zaXRpb25lZCBhYm92ZQoJCQl2YXIgbGlzdFRvcCA9IGhvc3RQb3NpdGlvbi50b3AgLSBjb2xsZWN0aW9uSGVpZ2h0OwoJCQl2YXIgdGFibGVUb3AgPSB0YWJsZUNvbnRhaW5lci5vZmZzZXQoKS50b3A7CgkJCXZhciB0b3BPdmVyZmxvdyA9IHRhYmxlVG9wIC0gbGlzdFRvcDsKCgkJCS8vIGlmIGJvdHRvbSBvdmVyZmxvdyBpcyBsYXJnZXIsIG1vdmUgdG8gdGhlIHRvcCBiZWNhdXNlIGl0IGZpdHMgYmV0dGVyLCBvciBpZiBkcm9wdXAgaXMgcmVxdWVzdGVkCgkJCXZhciBtb3ZlVG9wID0gaG9zdFBvc2l0aW9uLnRvcCAtIGNvbGxlY3Rpb25IZWlnaHQgLSA1OwoJCQlpZiAoIChib3R0b21PdmVyZmxvdyA+IHRvcE92ZXJmbG93IHx8IG9wdGlvbnMuZHJvcHVwKSAmJiAtbW92ZVRvcCA8IHRhYmxlVG9wICkgewoJCQkJZGlzcGxheS5jc3MoICd0b3AnLCBtb3ZlVG9wKTsKCQkJfQoKCQkJLy8gUmlnaHQgYWxpZ25tZW50IGlzIGVuYWJsZWQgb24gYSBjbGFzcywgZS5nLiBib290c3RyYXA6CgkJCS8vICQuZm4uZGF0YVRhYmxlLkJ1dHRvbnMuZGVmYXVsdHMuZG9tLmNvbGxlY3Rpb24uY2xhc3NOYW1lICs9ICIgZHJvcGRvd24tbWVudS1yaWdodCI7IAoJCQlpZiAoIGRpc3BsYXkuaGFzQ2xhc3MoIG9wdGlvbnMucmlnaHRBbGlnbkNsYXNzTmFtZSApIHx8IG9wdGlvbnMuYWxpZ24gPT09ICdidXR0b24tcmlnaHQnICkgewoJCQkJZGlzcGxheS5jc3MoICdsZWZ0JywgaG9zdFBvc2l0aW9uLmxlZnQgKyBob3N0Tm9kZS5vdXRlcldpZHRoKCkgLSBjb2xsZWN0aW9uV2lkdGggKTsKCQkJfQoKCQkJLy8gUmlnaHQgYWxpZ25tZW50IGluIHRhYmxlIGNvbnRhaW5lcgoJCQl2YXIgbGlzdFJpZ2h0ID0gaG9zdFBvc2l0aW9uLmxlZnQgKyBjb2xsZWN0aW9uV2lkdGg7CgkJCXZhciB0YWJsZVJpZ2h0ID0gdGFibGVDb250YWluZXIub2Zmc2V0KCkubGVmdCArIHRhYmxlQ29udGFpbmVyLndpZHRoKCk7CgkJCWlmICggbGlzdFJpZ2h0ID4gdGFibGVSaWdodCApIHsKCQkJCWRpc3BsYXkuY3NzKCAnbGVmdCcsIGhvc3RQb3NpdGlvbi5sZWZ0IC0gKCBsaXN0UmlnaHQgLSB0YWJsZVJpZ2h0ICkgKTsKCQkJfQoKCQkJLy8gUmlnaHQgYWxpZ25tZW50IHRvIHdpbmRvdwoJCQl2YXIgbGlzdE9mZnNldFJpZ2h0ID0gaG9zdE5vZGUub2Zmc2V0KCkubGVmdCArIGNvbGxlY3Rpb25XaWR0aDsKCQkJaWYgKCBsaXN0T2Zmc2V0UmlnaHQgPiAkKHdpbmRvdykud2lkdGgoKSApIHsKCQkJCWRpc3BsYXkuY3NzKCAnbGVmdCcsIGhvc3RQb3NpdGlvbi5sZWZ0IC0gKGxpc3RPZmZzZXRSaWdodC0kKHdpbmRvdykud2lkdGgoKSkgKTsKCQkJfQoJCX0KCQllbHNlIHsKCQkJLy8gRml4IHBvc2l0aW9uIC0gY2VudHJlIG9uIHNjcmVlbgoJCQl2YXIgdG9wID0gZGlzcGxheS5oZWlnaHQoKSAvIDI7CgkJCWlmICggdG9wID4gJCh3aW5kb3cpLmhlaWdodCgpIC8gMiApIHsKCQkJCXRvcCA9ICQod2luZG93KS5oZWlnaHQoKSAvIDI7CgkJCX0KCgkJCWRpc3BsYXkuY3NzKCAnbWFyZ2luVG9wJywgdG9wKi0xICk7CgkJfQoKCQlpZiAoIG9wdGlvbnMuYmFja2dyb3VuZCApIHsKCQkJQnV0dG9ucy5iYWNrZ3JvdW5kKCB0cnVlLCBvcHRpb25zLmJhY2tncm91bmRDbGFzc05hbWUsIG9wdGlvbnMuZmFkZSwgaG9zdE5vZGUgKTsKCQl9CgoJCS8vIFRoaXMgaXMgYm9ua2VycywgYnV0IGlmIHdlIGRvbid0IGhhdmUgYSBjbGljayBsaXN0ZW5lciBvbiB0aGUKCQkvLyBiYWNrZ3JvdW5kIGVsZW1lbnQsIGlPUyBTYWZhcmkgd2lsbCBpZ25vcmUgdGhlIGJvZHkgY2xpY2sKCQkvLyBsaXN0ZW5lciBiZWxvdy4gQW4gZW1wdHkgZnVuY3Rpb24gaGVyZSBpcyBhbGwgdGhhdCBpcwoJCS8vIHJlcXVpcmVkIHRvIG1ha2UgaXQgd29yay4uLgoJCSQoJ2Rpdi5kdC1idXR0b24tYmFja2dyb3VuZCcpLm9uKCAnY2xpY2suZHRiLWNvbGxlY3Rpb24nLCBmdW5jdGlvbiAoKSB7fSApOwoKCQkkKCdib2R5JykKCQkJLm9uKCAnY2xpY2suZHRiLWNvbGxlY3Rpb24nLCBmdW5jdGlvbiAoZSkgewoJCQkJLy8gYW5kU2VsZiBpcyBkZXByZWNhdGVkIGluIGpRMS44LCBidXQgd2Ugd2FudCAxLjcgY29tcGF0CgkJCQl2YXIgYmFjayA9ICQuZm4uYWRkQmFjayA/ICdhZGRCYWNrJyA6ICdhbmRTZWxmJzsKCgkJCQlpZiAoICEgJChlLnRhcmdldCkucGFyZW50cygpW2JhY2tdKCkuZmlsdGVyKCBjb250ZW50ICkubGVuZ3RoICkgewoJCQkJCWNsb3NlKCk7CgkJCQl9CgkJCX0gKQoJCQkub24oICdrZXl1cC5kdGItY29sbGVjdGlvbicsIGZ1bmN0aW9uIChlKSB7CgkJCQlpZiAoIGUua2V5Q29kZSA9PT0gMjcgKSB7CgkJCQkJY2xvc2UoKTsKCQkJCX0KCQkJfSApOwoKCQlpZiAoIG9wdGlvbnMuYXV0b0Nsb3NlICkgewoJCQlzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7CgkJCQlkdC5vbiggJ2J1dHRvbnMtYWN0aW9uLmItaW50ZXJuYWwnLCBmdW5jdGlvbiAoZSwgYnRuLCBkdCwgbm9kZSkgewoJCQkJCWlmICggbm9kZVswXSA9PT0gaG9zdE5vZGVbMF0gKSB7CgkJCQkJCXJldHVybjsKCQkJCQl9CgkJCQkJY2xvc2UoKTsKCQkJCX0gKTsKCQkJfSwgMCk7CgkJfQoJfQp9ICk7CgoKCi8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKICogU3RhdGljcwogKi8KCi8qKgogKiBTaG93IC8gaGlkZSBhIGJhY2tncm91bmQgbGF5ZXIgYmVoaW5kIGEgY29sbGVjdGlvbgogKiBAcGFyYW0gIHtib29sZWFufSBGbGFnIHRvIGluZGljYXRlIGlmIHRoZSBiYWNrZ3JvdW5kIHNob3VsZCBiZSBzaG93biBvcgogKiAgIGhpZGRlbiAKICogQHBhcmFtICB7c3RyaW5nfSBDbGFzcyB0byBhc3NpZ24gdG8gdGhlIGJhY2tncm91bmQKICogQHN0YXRpYwogKi8KQnV0dG9ucy5iYWNrZ3JvdW5kID0gZnVuY3Rpb24gKCBzaG93LCBjbGFzc05hbWUsIGZhZGUsIGluc2VydFBvaW50ICkgewoJaWYgKCBmYWRlID09PSB1bmRlZmluZWQgKSB7CgkJZmFkZSA9IDQwMDsKCX0KCWlmICggISBpbnNlcnRQb2ludCApIHsKCQlpbnNlcnRQb2ludCA9IGRvY3VtZW50LmJvZHk7Cgl9CgoJaWYgKCBzaG93ICkgewoJCSQoJzxkaXYvPicpCgkJCS5hZGRDbGFzcyggY2xhc3NOYW1lICkKCQkJLmNzcyggJ2Rpc3BsYXknLCAnbm9uZScgKQoJCQkuaW5zZXJ0QWZ0ZXIoIGluc2VydFBvaW50ICkKCQkJLnN0b3AoKQoJCQkuZmFkZUluKCBmYWRlICk7Cgl9CgllbHNlIHsKCQkkKCdkaXYuJytjbGFzc05hbWUpCgkJCS5zdG9wKCkKCQkJLmZhZGVPdXQoIGZhZGUsIGZ1bmN0aW9uICgpIHsKCQkJCSQodGhpcykKCQkJCQkucmVtb3ZlQ2xhc3MoIGNsYXNzTmFtZSApCgkJCQkJLnJlbW92ZSgpOwoJCQl9ICk7Cgl9Cn07CgovKioKICogSW5zdGFuY2Ugc2VsZWN0b3IgLSBzZWxlY3QgQnV0dG9ucyBpbnN0YW5jZXMgYmFzZWQgb24gYW4gaW5zdGFuY2Ugc2VsZWN0b3IKICogdmFsdWUgZnJvbSB0aGUgYnV0dG9ucyBhc3NpZ25lZCB0byBhIERhdGFUYWJsZS4gVGhpcyBpcyBvbmx5IHVzZWZ1bCBpZgogKiBtdWx0aXBsZSBpbnN0YW5jZXMgYXJlIGF0dGFjaGVkIHRvIGEgRGF0YVRhYmxlLgogKiBAcGFyYW0gIHtzdHJpbmd8aW50fGFycmF5fSBJbnN0YW5jZSBzZWxlY3RvciAtIHNlZSBgaW5zdGFuY2Utc2VsZWN0b3JgCiAqICAgZG9jdW1lbnRhdGlvbiBvbiB0aGUgRGF0YVRhYmxlcyBzaXRlCiAqIEBwYXJhbSAge2FycmF5fSBCdXR0b24gaW5zdGFuY2UgYXJyYXkgdGhhdCB3YXMgYXR0YWNoZWQgdG8gdGhlIERhdGFUYWJsZXMKICogICBzZXR0aW5ncyBvYmplY3QKICogQHJldHVybiB7YXJyYXl9IEJ1dHRvbnMgaW5zdGFuY2VzCiAqIEBzdGF0aWMKICovCkJ1dHRvbnMuaW5zdGFuY2VTZWxlY3RvciA9IGZ1bmN0aW9uICggZ3JvdXAsIGJ1dHRvbnMgKQp7CglpZiAoIGdyb3VwID09PSB1bmRlZmluZWQgfHwgZ3JvdXAgPT09IG51bGwgKSB7CgkJcmV0dXJuICQubWFwKCBidXR0b25zLCBmdW5jdGlvbiAoIHYgKSB7CgkJCXJldHVybiB2Lmluc3Q7CgkJfSApOwoJfQoKCXZhciByZXQgPSBbXTsKCXZhciBuYW1lcyA9ICQubWFwKCBidXR0b25zLCBmdW5jdGlvbiAoIHYgKSB7CgkJcmV0dXJuIHYubmFtZTsKCX0gKTsKCgkvLyBGbGF0dGVuIHRoZSBncm91cCBzZWxlY3RvciBpbnRvIGFuIGFycmF5IG9mIHNpbmdsZSBvcHRpb25zCgl2YXIgcHJvY2VzcyA9IGZ1bmN0aW9uICggaW5wdXQgKSB7CgkJaWYgKCAkLmlzQXJyYXkoIGlucHV0ICkgKSB7CgkJCWZvciAoIHZhciBpPTAsIGllbj1pbnB1dC5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCXByb2Nlc3MoIGlucHV0W2ldICk7CgkJCX0KCQkJcmV0dXJuOwoJCX0KCgkJaWYgKCB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnICkgewoJCQlpZiAoIGlucHV0LmluZGV4T2YoICcsJyApICE9PSAtMSApIHsKCQkJCS8vIFN0cmluZyBzZWxlY3RvciwgbGlzdCBvZiBuYW1lcwoJCQkJcHJvY2VzcyggaW5wdXQuc3BsaXQoJywnKSApOwoJCQl9CgkJCWVsc2UgewoJCQkJLy8gU3RyaW5nIHNlbGVjdG9yIGluZGl2aWR1YWwgbmFtZQoJCQkJdmFyIGlkeCA9ICQuaW5BcnJheSggJC50cmltKGlucHV0KSwgbmFtZXMgKTsKCgkJCQlpZiAoIGlkeCAhPT0gLTEgKSB7CgkJCQkJcmV0LnB1c2goIGJ1dHRvbnNbIGlkeCBdLmluc3QgKTsKCQkJCX0KCQkJfQoJCX0KCQllbHNlIGlmICggdHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJyApIHsKCQkJLy8gSW5kZXggc2VsZWN0b3IKCQkJcmV0LnB1c2goIGJ1dHRvbnNbIGlucHV0IF0uaW5zdCApOwoJCX0KCX07CgkKCXByb2Nlc3MoIGdyb3VwICk7CgoJcmV0dXJuIHJldDsKfTsKCi8qKgogKiBCdXR0b24gc2VsZWN0b3IgLSBzZWxlY3Qgb25lIG9yIG1vcmUgYnV0dG9ucyBmcm9tIGEgc2VsZWN0b3IgaW5wdXQgc28gc29tZQogKiBvcGVyYXRpb24gY2FuIGJlIHBlcmZvcm1lZCBvbiB0aGVtLgogKiBAcGFyYW0gIHthcnJheX0gQnV0dG9uIGluc3RhbmNlcyBhcnJheSB0aGF0IHRoZSBzZWxlY3RvciBzaG91bGQgb3BlcmF0ZSBvbgogKiBAcGFyYW0gIHtzdHJpbmd8aW50fG5vZGV8alF1ZXJ5fGFycmF5fSBCdXR0b24gc2VsZWN0b3IgLSBzZWUKICogICBgYnV0dG9uLXNlbGVjdG9yYCBkb2N1bWVudGF0aW9uIG9uIHRoZSBEYXRhVGFibGVzIHNpdGUKICogQHJldHVybiB7YXJyYXl9IEFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyBgaW5zdGAgYW5kIGBpZHhgIHByb3BlcnRpZXMgb2YKICogICB0aGUgc2VsZWN0ZWQgYnV0dG9ucyBzbyB5b3Uga25vdyB3aGljaCBpbnN0YW5jZSBlYWNoIGJ1dHRvbiBiZWxvbmdzIHRvLgogKiBAc3RhdGljCiAqLwpCdXR0b25zLmJ1dHRvblNlbGVjdG9yID0gZnVuY3Rpb24gKCBpbnN0cywgc2VsZWN0b3IgKQp7Cgl2YXIgcmV0ID0gW107Cgl2YXIgbm9kZUJ1aWxkZXIgPSBmdW5jdGlvbiAoIGEsIGJ1dHRvbnMsIGJhc2VJZHggKSB7CgkJdmFyIGJ1dHRvbjsKCQl2YXIgaWR4OwoKCQlmb3IgKCB2YXIgaT0wLCBpZW49YnV0dG9ucy5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJYnV0dG9uID0gYnV0dG9uc1tpXTsKCgkJCWlmICggYnV0dG9uICkgewoJCQkJaWR4ID0gYmFzZUlkeCAhPT0gdW5kZWZpbmVkID8KCQkJCQliYXNlSWR4K2kgOgoJCQkJCWkrJyc7CgoJCQkJYS5wdXNoKCB7CgkJCQkJbm9kZTogYnV0dG9uLm5vZGUsCgkJCQkJbmFtZTogYnV0dG9uLmNvbmYubmFtZSwKCQkJCQlpZHg6ICBpZHgKCQkJCX0gKTsKCgkJCQlpZiAoIGJ1dHRvbi5idXR0b25zICkgewoJCQkJCW5vZGVCdWlsZGVyKCBhLCBidXR0b24uYnV0dG9ucywgaWR4KyctJyApOwoJCQkJfQoJCQl9CgkJfQoJfTsKCgl2YXIgcnVuID0gZnVuY3Rpb24gKCBzZWxlY3RvciwgaW5zdCApIHsKCQl2YXIgaSwgaWVuOwoJCXZhciBidXR0b25zID0gW107CgkJbm9kZUJ1aWxkZXIoIGJ1dHRvbnMsIGluc3Qucy5idXR0b25zICk7CgoJCXZhciBub2RlcyA9ICQubWFwKCBidXR0b25zLCBmdW5jdGlvbiAodikgewoJCQlyZXR1cm4gdi5ub2RlOwoJCX0gKTsKCgkJaWYgKCAkLmlzQXJyYXkoIHNlbGVjdG9yICkgfHwgc2VsZWN0b3IgaW5zdGFuY2VvZiAkICkgewoJCQlmb3IgKCBpPTAsIGllbj1zZWxlY3Rvci5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCXJ1biggc2VsZWN0b3JbaV0sIGluc3QgKTsKCQkJfQoJCQlyZXR1cm47CgkJfQoKCQlpZiAoIHNlbGVjdG9yID09PSBudWxsIHx8IHNlbGVjdG9yID09PSB1bmRlZmluZWQgfHwgc2VsZWN0b3IgPT09ICcqJyApIHsKCQkJLy8gU2VsZWN0IGFsbAoJCQlmb3IgKCBpPTAsIGllbj1idXR0b25zLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJcmV0LnB1c2goIHsKCQkJCQlpbnN0OiBpbnN0LAoJCQkJCW5vZGU6IGJ1dHRvbnNbaV0ubm9kZQoJCQkJfSApOwoJCQl9CgkJfQoJCWVsc2UgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09ICdudW1iZXInICkgewoJCQkvLyBNYWluIGJ1dHRvbiBpbmRleCBzZWxlY3RvcgoJCQlyZXQucHVzaCggewoJCQkJaW5zdDogaW5zdCwKCQkJCW5vZGU6IGluc3Qucy5idXR0b25zWyBzZWxlY3RvciBdLm5vZGUKCQkJfSApOwoJCX0KCQllbHNlIGlmICggdHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJyApIHsKCQkJaWYgKCBzZWxlY3Rvci5pbmRleE9mKCAnLCcgKSAhPT0gLTEgKSB7CgkJCQkvLyBTcGxpdAoJCQkJdmFyIGEgPSBzZWxlY3Rvci5zcGxpdCgnLCcpOwoKCQkJCWZvciAoIGk9MCwgaWVuPWEubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQkJcnVuKCAkLnRyaW0oYVtpXSksIGluc3QgKTsKCQkJCX0KCQkJfQoJCQllbHNlIGlmICggc2VsZWN0b3IubWF0Y2goIC9eXGQrKFwtXGQrKSokLyApICkgewoJCQkJLy8gU3ViLWJ1dHRvbiBpbmRleCBzZWxlY3RvcgoJCQkJdmFyIGluZGV4ZXMgPSAkLm1hcCggYnV0dG9ucywgZnVuY3Rpb24gKHYpIHsKCQkJCQlyZXR1cm4gdi5pZHg7CgkJCQl9ICk7CgoJCQkJcmV0LnB1c2goIHsKCQkJCQlpbnN0OiBpbnN0LAoJCQkJCW5vZGU6IGJ1dHRvbnNbICQuaW5BcnJheSggc2VsZWN0b3IsIGluZGV4ZXMgKSBdLm5vZGUKCQkJCX0gKTsKCQkJfQoJCQllbHNlIGlmICggc2VsZWN0b3IuaW5kZXhPZiggJzpuYW1lJyApICE9PSAtMSApIHsKCQkJCS8vIEJ1dHRvbiBuYW1lIHNlbGVjdG9yCgkJCQl2YXIgbmFtZSA9IHNlbGVjdG9yLnJlcGxhY2UoICc6bmFtZScsICcnICk7CgoJCQkJZm9yICggaT0wLCBpZW49YnV0dG9ucy5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCQlpZiAoIGJ1dHRvbnNbaV0ubmFtZSA9PT0gbmFtZSApIHsKCQkJCQkJcmV0LnB1c2goIHsKCQkJCQkJCWluc3Q6IGluc3QsCgkJCQkJCQlub2RlOiBidXR0b25zW2ldLm5vZGUKCQkJCQkJfSApOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQllbHNlIHsKCQkJCS8vIGpRdWVyeSBzZWxlY3RvciBvbiB0aGUgbm9kZXMKCQkJCSQoIG5vZGVzICkuZmlsdGVyKCBzZWxlY3RvciApLmVhY2goIGZ1bmN0aW9uICgpIHsKCQkJCQlyZXQucHVzaCggewoJCQkJCQlpbnN0OiBpbnN0LAoJCQkJCQlub2RlOiB0aGlzCgkJCQkJfSApOwoJCQkJfSApOwoJCQl9CgkJfQoJCWVsc2UgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09ICdvYmplY3QnICYmIHNlbGVjdG9yLm5vZGVOYW1lICkgewoJCQkvLyBOb2RlIHNlbGVjdG9yCgkJCXZhciBpZHggPSAkLmluQXJyYXkoIHNlbGVjdG9yLCBub2RlcyApOwoKCQkJaWYgKCBpZHggIT09IC0xICkgewoJCQkJcmV0LnB1c2goIHsKCQkJCQlpbnN0OiBpbnN0LAoJCQkJCW5vZGU6IG5vZGVzWyBpZHggXQoJCQkJfSApOwoJCQl9CgkJfQoJfTsKCgoJZm9yICggdmFyIGk9MCwgaWVuPWluc3RzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCXZhciBpbnN0ID0gaW5zdHNbaV07CgoJCXJ1biggc2VsZWN0b3IsIGluc3QgKTsKCX0KCglyZXR1cm4gcmV0Owp9OwoKCi8qKgogKiBCdXR0b25zIGRlZmF1bHRzLiBGb3IgZnVsbCBkb2N1bWVudGF0aW9uLCBwbGVhc2UgcmVmZXIgdG8gdGhlIGRvY3Mvb3B0aW9uCiAqIGRpcmVjdG9yeSBvciB0aGUgRGF0YVRhYmxlcyBzaXRlLgogKiBAdHlwZSB7T2JqZWN0fQogKiBAc3RhdGljCiAqLwpCdXR0b25zLmRlZmF1bHRzID0gewoJYnV0dG9uczogWyAnY29weScsICdleGNlbCcsICdjc3YnLCAncGRmJywgJ3ByaW50JyBdLAoJbmFtZTogJ21haW4nLAoJdGFiSW5kZXg6IDAsCglkb206IHsKCQljb250YWluZXI6IHsKCQkJdGFnOiAnZGl2JywKCQkJY2xhc3NOYW1lOiAnZHQtYnV0dG9ucycKCQl9LAoJCWNvbGxlY3Rpb246IHsKCQkJdGFnOiAnZGl2JywKCQkJY2xhc3NOYW1lOiAnJwoJCX0sCgkJYnV0dG9uOiB7CgkJCS8vIEZsYXNoIGJ1dHRvbnMgd2lsbCBub3Qgd29yayB3aXRoIGA8YnV0dG9uPmAgaW4gSUUgLSBpdCBoYXMgdG8gYmUgYDxhPmAKCQkJdGFnOiAnQWN0aXZlWE9iamVjdCcgaW4gd2luZG93ID8KCQkJCSdhJyA6CgkJCQknYnV0dG9uJywKCQkJY2xhc3NOYW1lOiAnZHQtYnV0dG9uJywKCQkJYWN0aXZlOiAnYWN0aXZlJywKCQkJZGlzYWJsZWQ6ICdkaXNhYmxlZCcKCQl9LAoJCWJ1dHRvbkxpbmVyOiB7CgkJCXRhZzogJ3NwYW4nLAoJCQljbGFzc05hbWU6ICcnCgkJfQoJfQp9OwoKLyoqCiAqIFZlcnNpb24gaW5mb3JtYXRpb24KICogQHR5cGUge3N0cmluZ30KICogQHN0YXRpYwogKi8KQnV0dG9ucy52ZXJzaW9uID0gJzEuNi4xJzsKCgokLmV4dGVuZCggX2R0QnV0dG9ucywgewoJY29sbGVjdGlvbjogewoJCXRleHQ6IGZ1bmN0aW9uICggZHQgKSB7CgkJCXJldHVybiBkdC5pMThuKCAnYnV0dG9ucy5jb2xsZWN0aW9uJywgJ0NvbGxlY3Rpb24nICk7CgkJfSwKCQljbGFzc05hbWU6ICdidXR0b25zLWNvbGxlY3Rpb24nLAoJCWluaXQ6IGZ1bmN0aW9uICggZHQsIGJ1dHRvbiwgY29uZmlnICkgewoJCQlidXR0b24uYXR0ciggJ2FyaWEtZXhwYW5kZWQnLCBmYWxzZSApOwoJCX0sCgkJYWN0aW9uOiBmdW5jdGlvbiAoIGUsIGR0LCBidXR0b24sIGNvbmZpZyApIHsKCQkJZS5zdG9wUHJvcGFnYXRpb24oKTsKCgkJCWlmICggY29uZmlnLl9jb2xsZWN0aW9uLnBhcmVudHMoJ2JvZHknKS5sZW5ndGggKSB7CgkJCQl0aGlzLnBvcG92ZXIoZmFsc2UsIGNvbmZpZyk7CgkJCX0KCQkJZWxzZSB7CgkJCQl0aGlzLnBvcG92ZXIoY29uZmlnLl9jb2xsZWN0aW9uLCBjb25maWcpOwoJCQl9CgkJfSwKCQlhdHRyOiB7CgkJCSdhcmlhLWhhc3BvcHVwJzogdHJ1ZQoJCX0KCQkvLyBBbHNvIHRoZSBwb3BvdmVyIG9wdGlvbnMsIGRlZmluZWQgaW4gQnV0dG9ucy5wb3BvdmVyCgl9LAoJY29weTogZnVuY3Rpb24gKCBkdCwgY29uZiApIHsKCQlpZiAoIF9kdEJ1dHRvbnMuY29weUh0bWw1ICkgewoJCQlyZXR1cm4gJ2NvcHlIdG1sNSc7CgkJfQoJCWlmICggX2R0QnV0dG9ucy5jb3B5Rmxhc2ggJiYgX2R0QnV0dG9ucy5jb3B5Rmxhc2guYXZhaWxhYmxlKCBkdCwgY29uZiApICkgewoJCQlyZXR1cm4gJ2NvcHlGbGFzaCc7CgkJfQoJfSwKCWNzdjogZnVuY3Rpb24gKCBkdCwgY29uZiApIHsKCQkvLyBDb21tb24gb3B0aW9uIHRoYXQgd2lsbCB1c2UgdGhlIEhUTUw1IG9yIEZsYXNoIGV4cG9ydCBidXR0b25zCgkJaWYgKCBfZHRCdXR0b25zLmNzdkh0bWw1ICYmIF9kdEJ1dHRvbnMuY3N2SHRtbDUuYXZhaWxhYmxlKCBkdCwgY29uZiApICkgewoJCQlyZXR1cm4gJ2Nzdkh0bWw1JzsKCQl9CgkJaWYgKCBfZHRCdXR0b25zLmNzdkZsYXNoICYmIF9kdEJ1dHRvbnMuY3N2Rmxhc2guYXZhaWxhYmxlKCBkdCwgY29uZiApICkgewoJCQlyZXR1cm4gJ2NzdkZsYXNoJzsKCQl9Cgl9LAoJZXhjZWw6IGZ1bmN0aW9uICggZHQsIGNvbmYgKSB7CgkJLy8gQ29tbW9uIG9wdGlvbiB0aGF0IHdpbGwgdXNlIHRoZSBIVE1MNSBvciBGbGFzaCBleHBvcnQgYnV0dG9ucwoJCWlmICggX2R0QnV0dG9ucy5leGNlbEh0bWw1ICYmIF9kdEJ1dHRvbnMuZXhjZWxIdG1sNS5hdmFpbGFibGUoIGR0LCBjb25mICkgKSB7CgkJCXJldHVybiAnZXhjZWxIdG1sNSc7CgkJfQoJCWlmICggX2R0QnV0dG9ucy5leGNlbEZsYXNoICYmIF9kdEJ1dHRvbnMuZXhjZWxGbGFzaC5hdmFpbGFibGUoIGR0LCBjb25mICkgKSB7CgkJCXJldHVybiAnZXhjZWxGbGFzaCc7CgkJfQoJfSwKCXBkZjogZnVuY3Rpb24gKCBkdCwgY29uZiApIHsKCQkvLyBDb21tb24gb3B0aW9uIHRoYXQgd2lsbCB1c2UgdGhlIEhUTUw1IG9yIEZsYXNoIGV4cG9ydCBidXR0b25zCgkJaWYgKCBfZHRCdXR0b25zLnBkZkh0bWw1ICYmIF9kdEJ1dHRvbnMucGRmSHRtbDUuYXZhaWxhYmxlKCBkdCwgY29uZiApICkgewoJCQlyZXR1cm4gJ3BkZkh0bWw1JzsKCQl9CgkJaWYgKCBfZHRCdXR0b25zLnBkZkZsYXNoICYmIF9kdEJ1dHRvbnMucGRmRmxhc2guYXZhaWxhYmxlKCBkdCwgY29uZiApICkgewoJCQlyZXR1cm4gJ3BkZkZsYXNoJzsKCQl9Cgl9LAoJcGFnZUxlbmd0aDogZnVuY3Rpb24gKCBkdCApIHsKCQl2YXIgbGVuZ3RoTWVudSA9IGR0LnNldHRpbmdzKClbMF0uYUxlbmd0aE1lbnU7CgkJdmFyIHZhbHMgPSAkLmlzQXJyYXkoIGxlbmd0aE1lbnVbMF0gKSA/IGxlbmd0aE1lbnVbMF0gOiBsZW5ndGhNZW51OwoJCXZhciBsYW5nID0gJC5pc0FycmF5KCBsZW5ndGhNZW51WzBdICkgPyBsZW5ndGhNZW51WzFdIDogbGVuZ3RoTWVudTsKCQl2YXIgdGV4dCA9IGZ1bmN0aW9uICggZHQgKSB7CgkJCXJldHVybiBkdC5pMThuKCAnYnV0dG9ucy5wYWdlTGVuZ3RoJywgewoJCQkJIi0xIjogJ1Nob3cgYWxsIHJvd3MnLAoJCQkJXzogICAgJ1Nob3cgJWQgcm93cycKCQkJfSwgZHQucGFnZS5sZW4oKSApOwoJCX07CgoJCXJldHVybiB7CgkJCWV4dGVuZDogJ2NvbGxlY3Rpb24nLAoJCQl0ZXh0OiB0ZXh0LAoJCQljbGFzc05hbWU6ICdidXR0b25zLXBhZ2UtbGVuZ3RoJywKCQkJYXV0b0Nsb3NlOiB0cnVlLAoJCQlidXR0b25zOiAkLm1hcCggdmFscywgZnVuY3Rpb24gKCB2YWwsIGkgKSB7CgkJCQlyZXR1cm4gewoJCQkJCXRleHQ6IGxhbmdbaV0sCgkJCQkJY2xhc3NOYW1lOiAnYnV0dG9uLXBhZ2UtbGVuZ3RoJywKCQkJCQlhY3Rpb246IGZ1bmN0aW9uICggZSwgZHQgKSB7CgkJCQkJCWR0LnBhZ2UubGVuKCB2YWwgKS5kcmF3KCk7CgkJCQkJfSwKCQkJCQlpbml0OiBmdW5jdGlvbiAoIGR0LCBub2RlLCBjb25mICkgewoJCQkJCQl2YXIgdGhhdCA9IHRoaXM7CgkJCQkJCXZhciBmbiA9IGZ1bmN0aW9uICgpIHsKCQkJCQkJCXRoYXQuYWN0aXZlKCBkdC5wYWdlLmxlbigpID09PSB2YWwgKTsKCQkJCQkJfTsKCgkJCQkJCWR0Lm9uKCAnbGVuZ3RoLmR0Jytjb25mLm5hbWVzcGFjZSwgZm4gKTsKCQkJCQkJZm4oKTsKCQkJCQl9LAoJCQkJCWRlc3Ryb3k6IGZ1bmN0aW9uICggZHQsIG5vZGUsIGNvbmYgKSB7CgkJCQkJCWR0Lm9mZiggJ2xlbmd0aC5kdCcrY29uZi5uYW1lc3BhY2UgKTsKCQkJCQl9CgkJCQl9OwoJCQl9ICksCgkJCWluaXQ6IGZ1bmN0aW9uICggZHQsIG5vZGUsIGNvbmYgKSB7CgkJCQl2YXIgdGhhdCA9IHRoaXM7CgkJCQlkdC5vbiggJ2xlbmd0aC5kdCcrY29uZi5uYW1lc3BhY2UsIGZ1bmN0aW9uICgpIHsKCQkJCQl0aGF0LnRleHQoIGNvbmYudGV4dCApOwoJCQkJfSApOwoJCQl9LAoJCQlkZXN0cm95OiBmdW5jdGlvbiAoIGR0LCBub2RlLCBjb25mICkgewoJCQkJZHQub2ZmKCAnbGVuZ3RoLmR0Jytjb25mLm5hbWVzcGFjZSApOwoJCQl9CgkJfTsKCX0KfSApOwoKCi8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCiAqIERhdGFUYWJsZXMgQVBJCiAqCiAqIEZvciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLCBwbGVhc2UgcmVmZXIgdG8gdGhlIGRvY3MvYXBpIGRpcmVjdG9yeSBvciB0aGUKICogRGF0YVRhYmxlcyBzaXRlCiAqLwoKLy8gQnV0dG9ucyBncm91cCBhbmQgaW5kaXZpZHVhbCBidXR0b24gc2VsZWN0b3IKRGF0YVRhYmxlLkFwaS5yZWdpc3RlciggJ2J1dHRvbnMoKScsIGZ1bmN0aW9uICggZ3JvdXAsIHNlbGVjdG9yICkgewoJLy8gQXJndW1lbnQgc2hpZnRpbmcKCWlmICggc2VsZWN0b3IgPT09IHVuZGVmaW5lZCApIHsKCQlzZWxlY3RvciA9IGdyb3VwOwoJCWdyb3VwID0gdW5kZWZpbmVkOwoJfQoKCXRoaXMuc2VsZWN0b3IuYnV0dG9uR3JvdXAgPSBncm91cDsKCgl2YXIgcmVzID0gdGhpcy5pdGVyYXRvciggdHJ1ZSwgJ3RhYmxlJywgZnVuY3Rpb24gKCBjdHggKSB7CgkJaWYgKCBjdHguX2J1dHRvbnMgKSB7CgkJCXJldHVybiBCdXR0b25zLmJ1dHRvblNlbGVjdG9yKAoJCQkJQnV0dG9ucy5pbnN0YW5jZVNlbGVjdG9yKCBncm91cCwgY3R4Ll9idXR0b25zICksCgkJCQlzZWxlY3RvcgoJCQkpOwoJCX0KCX0sIHRydWUgKTsKCglyZXMuX2dyb3VwU2VsZWN0b3IgPSBncm91cDsKCXJldHVybiByZXM7Cn0gKTsKCi8vIEluZGl2aWR1YWwgYnV0dG9uIHNlbGVjdG9yCkRhdGFUYWJsZS5BcGkucmVnaXN0ZXIoICdidXR0b24oKScsIGZ1bmN0aW9uICggZ3JvdXAsIHNlbGVjdG9yICkgewoJLy8ganVzdCBydW4gYnV0dG9ucygpIGFuZCB0cnVuY2F0ZQoJdmFyIGJ1dHRvbnMgPSB0aGlzLmJ1dHRvbnMoIGdyb3VwLCBzZWxlY3RvciApOwoKCWlmICggYnV0dG9ucy5sZW5ndGggPiAxICkgewoJCWJ1dHRvbnMuc3BsaWNlKCAxLCBidXR0b25zLmxlbmd0aCApOwoJfQoKCXJldHVybiBidXR0b25zOwp9ICk7CgovLyBBY3RpdmUgYnV0dG9ucwpEYXRhVGFibGUuQXBpLnJlZ2lzdGVyUGx1cmFsKCAnYnV0dG9ucygpLmFjdGl2ZSgpJywgJ2J1dHRvbigpLmFjdGl2ZSgpJywgZnVuY3Rpb24gKCBmbGFnICkgewoJaWYgKCBmbGFnID09PSB1bmRlZmluZWQgKSB7CgkJcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbiAoIHNldCApIHsKCQkJcmV0dXJuIHNldC5pbnN0LmFjdGl2ZSggc2V0Lm5vZGUgKTsKCQl9ICk7Cgl9CgoJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24gKCBzZXQgKSB7CgkJc2V0Lmluc3QuYWN0aXZlKCBzZXQubm9kZSwgZmxhZyApOwoJfSApOwp9ICk7CgovLyBHZXQgLyBzZXQgYnV0dG9uIGFjdGlvbgpEYXRhVGFibGUuQXBpLnJlZ2lzdGVyUGx1cmFsKCAnYnV0dG9ucygpLmFjdGlvbigpJywgJ2J1dHRvbigpLmFjdGlvbigpJywgZnVuY3Rpb24gKCBhY3Rpb24gKSB7CglpZiAoIGFjdGlvbiA9PT0gdW5kZWZpbmVkICkgewoJCXJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24gKCBzZXQgKSB7CgkJCXJldHVybiBzZXQuaW5zdC5hY3Rpb24oIHNldC5ub2RlICk7CgkJfSApOwoJfQoKCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uICggc2V0ICkgewoJCXNldC5pbnN0LmFjdGlvbiggc2V0Lm5vZGUsIGFjdGlvbiApOwoJfSApOwp9ICk7CgovLyBFbmFibGUgLyBkaXNhYmxlIGJ1dHRvbnMKRGF0YVRhYmxlLkFwaS5yZWdpc3RlciggWydidXR0b25zKCkuZW5hYmxlKCknLCAnYnV0dG9uKCkuZW5hYmxlKCknXSwgZnVuY3Rpb24gKCBmbGFnICkgewoJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24gKCBzZXQgKSB7CgkJc2V0Lmluc3QuZW5hYmxlKCBzZXQubm9kZSwgZmxhZyApOwoJfSApOwp9ICk7CgovLyBEaXNhYmxlIGJ1dHRvbnMKRGF0YVRhYmxlLkFwaS5yZWdpc3RlciggWydidXR0b25zKCkuZGlzYWJsZSgpJywgJ2J1dHRvbigpLmRpc2FibGUoKSddLCBmdW5jdGlvbiAoKSB7CglyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiAoIHNldCApIHsKCQlzZXQuaW5zdC5kaXNhYmxlKCBzZXQubm9kZSApOwoJfSApOwp9ICk7CgovLyBHZXQgYnV0dG9uIG5vZGVzCkRhdGFUYWJsZS5BcGkucmVnaXN0ZXJQbHVyYWwoICdidXR0b25zKCkubm9kZXMoKScsICdidXR0b24oKS5ub2RlKCknLCBmdW5jdGlvbiAoKSB7Cgl2YXIganEgPSAkKCk7CgoJLy8galF1ZXJ5IHdpbGwgYXV0b21hdGljYWxseSByZWR1Y2UgZHVwbGljYXRlcyB0byBhIHNpbmdsZSBlbnRyeQoJJCggdGhpcy5lYWNoKCBmdW5jdGlvbiAoIHNldCApIHsKCQlqcSA9IGpxLmFkZCggc2V0Lmluc3Qubm9kZSggc2V0Lm5vZGUgKSApOwoJfSApICk7CgoJcmV0dXJuIGpxOwp9ICk7CgovLyBHZXQgLyBzZXQgYnV0dG9uIHByb2Nlc3Npbmcgc3RhdGUKRGF0YVRhYmxlLkFwaS5yZWdpc3RlclBsdXJhbCggJ2J1dHRvbnMoKS5wcm9jZXNzaW5nKCknLCAnYnV0dG9uKCkucHJvY2Vzc2luZygpJywgZnVuY3Rpb24gKCBmbGFnICkgewoJaWYgKCBmbGFnID09PSB1bmRlZmluZWQgKSB7CgkJcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbiAoIHNldCApIHsKCQkJcmV0dXJuIHNldC5pbnN0LnByb2Nlc3NpbmcoIHNldC5ub2RlICk7CgkJfSApOwoJfQoKCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uICggc2V0ICkgewoJCXNldC5pbnN0LnByb2Nlc3NpbmcoIHNldC5ub2RlLCBmbGFnICk7Cgl9ICk7Cn0gKTsKCi8vIEdldCAvIHNldCBidXR0b24gdGV4dCAoaS5lLiB0aGUgYnV0dG9uIGxhYmVscykKRGF0YVRhYmxlLkFwaS5yZWdpc3RlclBsdXJhbCggJ2J1dHRvbnMoKS50ZXh0KCknLCAnYnV0dG9uKCkudGV4dCgpJywgZnVuY3Rpb24gKCBsYWJlbCApIHsKCWlmICggbGFiZWwgPT09IHVuZGVmaW5lZCApIHsKCQlyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uICggc2V0ICkgewoJCQlyZXR1cm4gc2V0Lmluc3QudGV4dCggc2V0Lm5vZGUgKTsKCQl9ICk7Cgl9CgoJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24gKCBzZXQgKSB7CgkJc2V0Lmluc3QudGV4dCggc2V0Lm5vZGUsIGxhYmVsICk7Cgl9ICk7Cn0gKTsKCi8vIFRyaWdnZXIgYSBidXR0b24ncyBhY3Rpb24KRGF0YVRhYmxlLkFwaS5yZWdpc3RlclBsdXJhbCggJ2J1dHRvbnMoKS50cmlnZ2VyKCknLCAnYnV0dG9uKCkudHJpZ2dlcigpJywgZnVuY3Rpb24gKCkgewoJcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24gKCBzZXQgKSB7CgkJc2V0Lmluc3Qubm9kZSggc2V0Lm5vZGUgKS50cmlnZ2VyKCAnY2xpY2snICk7Cgl9ICk7Cn0gKTsKCi8vIEJ1dHRvbiByZXNvbHZlciB0byB0aGUgcG9wb3ZlcgpEYXRhVGFibGUuQXBpLnJlZ2lzdGVyKCAnYnV0dG9uKCkucG9wb3ZlcigpJywgZnVuY3Rpb24gKGNvbnRlbnQsIG9wdGlvbnMpIHsKCXJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24gKCBzZXQgKSB7CgkJcmV0dXJuIHNldC5pbnN0Ll9wb3BvdmVyKCBjb250ZW50LCB0aGlzLmJ1dHRvbih0aGlzWzBdLm5vZGUpLCBvcHRpb25zICk7Cgl9ICk7Cn0gKTsKCi8vIEdldCB0aGUgY29udGFpbmVyIGVsZW1lbnRzCkRhdGFUYWJsZS5BcGkucmVnaXN0ZXIoICdidXR0b25zKCkuY29udGFpbmVycygpJywgZnVuY3Rpb24gKCkgewoJdmFyIGpxID0gJCgpOwoJdmFyIGdyb3VwU2VsZWN0b3IgPSB0aGlzLl9ncm91cFNlbGVjdG9yOwoKCS8vIFdlIG5lZWQgdG8gdXNlIHRoZSBncm91cCBzZWxlY3RvciBkaXJlY3RseSwgc2luY2UgaWYgdGhlcmUgYXJlIG5vIGJ1dHRvbnMKCS8vIHRoZSByZXN1bHQgc2V0IHdpbGwgYmUgZW1wdHkKCXRoaXMuaXRlcmF0b3IoIHRydWUsICd0YWJsZScsIGZ1bmN0aW9uICggY3R4ICkgewoJCWlmICggY3R4Ll9idXR0b25zICkgewoJCQl2YXIgaW5zdHMgPSBCdXR0b25zLmluc3RhbmNlU2VsZWN0b3IoIGdyb3VwU2VsZWN0b3IsIGN0eC5fYnV0dG9ucyApOwoKCQkJZm9yICggdmFyIGk9MCwgaWVuPWluc3RzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJanEgPSBqcS5hZGQoIGluc3RzW2ldLmNvbnRhaW5lcigpICk7CgkJCX0KCQl9Cgl9ICk7CgoJcmV0dXJuIGpxOwp9ICk7CgpEYXRhVGFibGUuQXBpLnJlZ2lzdGVyKCAnYnV0dG9ucygpLmNvbnRhaW5lcigpJywgZnVuY3Rpb24gKCkgewoJLy8gQVBJIGxldmVsIG9mIG5lc3RpbmcgaXMgYGJ1dHRvbnMoKWAgc28gd2UgY2FuIHppcCBpbnRvIHRoZSBjb250YWluZXJzIG1ldGhvZAoJcmV0dXJuIHRoaXMuY29udGFpbmVycygpLmVxKDApOwp9ICk7CgovLyBBZGQgYSBuZXcgYnV0dG9uCkRhdGFUYWJsZS5BcGkucmVnaXN0ZXIoICdidXR0b24oKS5hZGQoKScsIGZ1bmN0aW9uICggaWR4LCBjb25mICkgewoJdmFyIGN0eCA9IHRoaXMuY29udGV4dDsKCgkvLyBEb24ndCB1c2UgYHRoaXNgIGFzIGl0IGNvdWxkIGJlIGVtcHR5IC0gc2VsZWN0IHRoZSBpbnN0YW5jZXMgZGlyZWN0bHkKCWlmICggY3R4Lmxlbmd0aCApIHsKCQl2YXIgaW5zdCA9IEJ1dHRvbnMuaW5zdGFuY2VTZWxlY3RvciggdGhpcy5fZ3JvdXBTZWxlY3RvciwgY3R4WzBdLl9idXR0b25zICk7CgoJCWlmICggaW5zdC5sZW5ndGggKSB7CgkJCWluc3RbMF0uYWRkKCBjb25mLCBpZHggKTsKCQl9Cgl9CgoJcmV0dXJuIHRoaXMuYnV0dG9uKCB0aGlzLl9ncm91cFNlbGVjdG9yLCBpZHggKTsKfSApOwoKLy8gRGVzdHJveSB0aGUgYnV0dG9uIHNldHMgc2VsZWN0ZWQKRGF0YVRhYmxlLkFwaS5yZWdpc3RlciggJ2J1dHRvbnMoKS5kZXN0cm95KCknLCBmdW5jdGlvbiAoKSB7Cgl0aGlzLnBsdWNrKCAnaW5zdCcgKS51bmlxdWUoKS5lYWNoKCBmdW5jdGlvbiAoIGluc3QgKSB7CgkJaW5zdC5kZXN0cm95KCk7Cgl9ICk7CgoJcmV0dXJuIHRoaXM7Cn0gKTsKCi8vIFJlbW92ZSBhIGJ1dHRvbgpEYXRhVGFibGUuQXBpLnJlZ2lzdGVyUGx1cmFsKCAnYnV0dG9ucygpLnJlbW92ZSgpJywgJ2J1dHRvbnMoKS5yZW1vdmUoKScsIGZ1bmN0aW9uICgpIHsKCXRoaXMuZWFjaCggZnVuY3Rpb24gKCBzZXQgKSB7CgkJc2V0Lmluc3QucmVtb3ZlKCBzZXQubm9kZSApOwoJfSApOwoKCXJldHVybiB0aGlzOwp9ICk7CgovLyBJbmZvcm1hdGlvbiBib3ggdGhhdCBjYW4gYmUgdXNlZCBieSBidXR0b25zCnZhciBfaW5mb1RpbWVyOwpEYXRhVGFibGUuQXBpLnJlZ2lzdGVyKCAnYnV0dG9ucy5pbmZvKCknLCBmdW5jdGlvbiAoIHRpdGxlLCBtZXNzYWdlLCB0aW1lICkgewoJdmFyIHRoYXQgPSB0aGlzOwoKCWlmICggdGl0bGUgPT09IGZhbHNlICkgewoJCXRoaXMub2ZmKCdkZXN0cm95LmJ0bi1pbmZvJyk7CgkJJCgnI2RhdGF0YWJsZXNfYnV0dG9uc19pbmZvJykuZmFkZU91dCggZnVuY3Rpb24gKCkgewoJCQkkKHRoaXMpLnJlbW92ZSgpOwoJCX0gKTsKCQljbGVhclRpbWVvdXQoIF9pbmZvVGltZXIgKTsKCQlfaW5mb1RpbWVyID0gbnVsbDsKCgkJcmV0dXJuIHRoaXM7Cgl9CgoJaWYgKCBfaW5mb1RpbWVyICkgewoJCWNsZWFyVGltZW91dCggX2luZm9UaW1lciApOwoJfQoKCWlmICggJCgnI2RhdGF0YWJsZXNfYnV0dG9uc19pbmZvJykubGVuZ3RoICkgewoJCSQoJyNkYXRhdGFibGVzX2J1dHRvbnNfaW5mbycpLnJlbW92ZSgpOwoJfQoKCXRpdGxlID0gdGl0bGUgPyAnPGgyPicrdGl0bGUrJzwvaDI+JyA6ICcnOwoKCSQoJzxkaXYgaWQ9ImRhdGF0YWJsZXNfYnV0dG9uc19pbmZvIiBjbGFzcz0iZHQtYnV0dG9uLWluZm8iLz4nKQoJCS5odG1sKCB0aXRsZSApCgkJLmFwcGVuZCggJCgnPGRpdi8+JylbIHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJyA/ICdodG1sJyA6ICdhcHBlbmQnIF0oIG1lc3NhZ2UgKSApCgkJLmNzcyggJ2Rpc3BsYXknLCAnbm9uZScgKQoJCS5hcHBlbmRUbyggJ2JvZHknICkKCQkuZmFkZUluKCk7CgoJaWYgKCB0aW1lICE9PSB1bmRlZmluZWQgJiYgdGltZSAhPT0gMCApIHsKCQlfaW5mb1RpbWVyID0gc2V0VGltZW91dCggZnVuY3Rpb24gKCkgewoJCQl0aGF0LmJ1dHRvbnMuaW5mbyggZmFsc2UgKTsKCQl9LCB0aW1lICk7Cgl9CgoJdGhpcy5vbignZGVzdHJveS5idG4taW5mbycsIGZ1bmN0aW9uICgpIHsKCQl0aGF0LmJ1dHRvbnMuaW5mbyhmYWxzZSk7Cgl9KTsKCglyZXR1cm4gdGhpczsKfSApOwoKLy8gR2V0IGRhdGEgZnJvbSB0aGUgdGFibGUgZm9yIGV4cG9ydCAtIHRoaXMgaXMgY29tbW9uIHRvIGEgbnVtYmVyIG9mIHBsdWctaW4KLy8gYnV0dG9ucyBzbyBpdCBpcyBpbmNsdWRlZCBpbiB0aGUgQnV0dG9ucyBjb3JlIGxpYnJhcnkKRGF0YVRhYmxlLkFwaS5yZWdpc3RlciggJ2J1dHRvbnMuZXhwb3J0RGF0YSgpJywgZnVuY3Rpb24gKCBvcHRpb25zICkgewoJaWYgKCB0aGlzLmNvbnRleHQubGVuZ3RoICkgewoJCXJldHVybiBfZXhwb3J0RGF0YSggbmV3IERhdGFUYWJsZS5BcGkoIHRoaXMuY29udGV4dFswXSApLCBvcHRpb25zICk7Cgl9Cn0gKTsKCi8vIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXhwb3J0IHRoYXQgaXMgY29tbW9uIHRvIG1hbnkgb2YgdGhlIGV4cG9ydCBkYXRhCi8vIHR5cGVzIChEUlkpCkRhdGFUYWJsZS5BcGkucmVnaXN0ZXIoICdidXR0b25zLmV4cG9ydEluZm8oKScsIGZ1bmN0aW9uICggY29uZiApIHsKCWlmICggISBjb25mICkgewoJCWNvbmYgPSB7fTsKCX0KCglyZXR1cm4gewoJCWZpbGVuYW1lOiBfZmlsZW5hbWUoIGNvbmYgKSwKCQl0aXRsZTogX3RpdGxlKCBjb25mICksCgkJbWVzc2FnZVRvcDogX21lc3NhZ2UodGhpcywgY29uZi5tZXNzYWdlIHx8IGNvbmYubWVzc2FnZVRvcCwgJ3RvcCcpLAoJCW1lc3NhZ2VCb3R0b206IF9tZXNzYWdlKHRoaXMsIGNvbmYubWVzc2FnZUJvdHRvbSwgJ2JvdHRvbScpCgl9Owp9ICk7CgoKCi8qKgogKiBHZXQgdGhlIGZpbGUgbmFtZSBmb3IgYW4gZXhwb3J0ZWQgZmlsZS4KICoKICogQHBhcmFtIHtvYmplY3R9CWNvbmZpZyBCdXR0b24gY29uZmlndXJhdGlvbgogKiBAcGFyYW0ge2Jvb2xlYW59IGluY0V4dGVuc2lvbiBJbmNsdWRlIHRoZSBmaWxlIG5hbWUgZXh0ZW5zaW9uCiAqLwp2YXIgX2ZpbGVuYW1lID0gZnVuY3Rpb24gKCBjb25maWcgKQp7CgkvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eQoJdmFyIGZpbGVuYW1lID0gY29uZmlnLmZpbGVuYW1lID09PSAnKicgJiYgY29uZmlnLnRpdGxlICE9PSAnKicgJiYgY29uZmlnLnRpdGxlICE9PSB1bmRlZmluZWQgJiYgY29uZmlnLnRpdGxlICE9PSBudWxsICYmIGNvbmZpZy50aXRsZSAhPT0gJycgPwoJCWNvbmZpZy50aXRsZSA6CgkJY29uZmlnLmZpbGVuYW1lOwoKCWlmICggdHlwZW9mIGZpbGVuYW1lID09PSAnZnVuY3Rpb24nICkgewoJCWZpbGVuYW1lID0gZmlsZW5hbWUoKTsKCX0KCglpZiAoIGZpbGVuYW1lID09PSB1bmRlZmluZWQgfHwgZmlsZW5hbWUgPT09IG51bGwgKSB7CgkJcmV0dXJuIG51bGw7Cgl9CgoJaWYgKCBmaWxlbmFtZS5pbmRleE9mKCAnKicgKSAhPT0gLTEgKSB7CgkJZmlsZW5hbWUgPSAkLnRyaW0oIGZpbGVuYW1lLnJlcGxhY2UoICcqJywgJCgnaGVhZCA+IHRpdGxlJykudGV4dCgpICkgKTsKCX0KCgkvLyBTdHJpcCBjaGFyYWN0ZXJzIHdoaWNoIHRoZSBPUyB3aWxsIG9iamVjdCB0bwoJZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV9cdTAwQTEtXHVGRkZGXC4sXC1fICFcKFwpXS9nLCAiIik7CgoJdmFyIGV4dGVuc2lvbiA9IF9zdHJpbmdPckZ1bmN0aW9uKCBjb25maWcuZXh0ZW5zaW9uICk7CglpZiAoICEgZXh0ZW5zaW9uICkgewoJCWV4dGVuc2lvbiA9ICcnOwoJfQoKCXJldHVybiBmaWxlbmFtZSArIGV4dGVuc2lvbjsKfTsKCi8qKgogKiBTaW1wbHkgdXRpbGl0eSBtZXRob2QgdG8gYWxsb3cgcGFyYW1ldGVycyB0byBiZSBnaXZlbiBhcyBhIGZ1bmN0aW9uCiAqCiAqIEBwYXJhbSB7dW5kZWZpbmVkfHN0cmluZ3xmdW5jdGlvbn0gb3B0aW9uIE9wdGlvbgogKiBAcmV0dXJuIHtudWxsfHN0cmluZ30gUmVzb2x2ZWQgdmFsdWUKICovCnZhciBfc3RyaW5nT3JGdW5jdGlvbiA9IGZ1bmN0aW9uICggb3B0aW9uICkKewoJaWYgKCBvcHRpb24gPT09IG51bGwgfHwgb3B0aW9uID09PSB1bmRlZmluZWQgKSB7CgkJcmV0dXJuIG51bGw7Cgl9CgllbHNlIGlmICggdHlwZW9mIG9wdGlvbiA9PT0gJ2Z1bmN0aW9uJyApIHsKCQlyZXR1cm4gb3B0aW9uKCk7Cgl9CglyZXR1cm4gb3B0aW9uOwp9OwoKLyoqCiAqIEdldCB0aGUgdGl0bGUgZm9yIGFuIGV4cG9ydGVkIGZpbGUuCiAqCiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcJQnV0dG9uIGNvbmZpZ3VyYXRpb24KICovCnZhciBfdGl0bGUgPSBmdW5jdGlvbiAoIGNvbmZpZyApCnsKCXZhciB0aXRsZSA9IF9zdHJpbmdPckZ1bmN0aW9uKCBjb25maWcudGl0bGUgKTsKCglyZXR1cm4gdGl0bGUgPT09IG51bGwgPwoJCW51bGwgOiB0aXRsZS5pbmRleE9mKCAnKicgKSAhPT0gLTEgPwoJCQl0aXRsZS5yZXBsYWNlKCAnKicsICQoJ2hlYWQgPiB0aXRsZScpLnRleHQoKSB8fCAnRXhwb3J0ZWQgZGF0YScgKSA6CgkJCXRpdGxlOwp9OwoKdmFyIF9tZXNzYWdlID0gZnVuY3Rpb24gKCBkdCwgb3B0aW9uLCBwb3NpdGlvbiApCnsKCXZhciBtZXNzYWdlID0gX3N0cmluZ09yRnVuY3Rpb24oIG9wdGlvbiApOwoJaWYgKCBtZXNzYWdlID09PSBudWxsICkgewoJCXJldHVybiBudWxsOwoJfQoKCXZhciBjYXB0aW9uID0gJCgnY2FwdGlvbicsIGR0LnRhYmxlKCkuY29udGFpbmVyKCkpLmVxKDApOwoJaWYgKCBtZXNzYWdlID09PSAnKicgKSB7CgkJdmFyIHNpZGUgPSBjYXB0aW9uLmNzcyggJ2NhcHRpb24tc2lkZScgKTsKCQlpZiAoIHNpZGUgIT09IHBvc2l0aW9uICkgewoJCQlyZXR1cm4gbnVsbDsKCQl9CgoJCXJldHVybiBjYXB0aW9uLmxlbmd0aCA/CgkJCWNhcHRpb24udGV4dCgpIDoKCQkJJyc7Cgl9CgoJcmV0dXJuIG1lc3NhZ2U7Cn07CgoKCgoKCgp2YXIgX2V4cG9ydFRleHRhcmVhID0gJCgnPHRleHRhcmVhLz4nKVswXTsKdmFyIF9leHBvcnREYXRhID0gZnVuY3Rpb24gKCBkdCwgaW5PcHRzICkKewoJdmFyIGNvbmZpZyA9ICQuZXh0ZW5kKCB0cnVlLCB7fSwgewoJCXJvd3M6ICAgICAgICAgICBudWxsLAoJCWNvbHVtbnM6ICAgICAgICAnJywKCQltb2RpZmllcjogICAgICAgewoJCQlzZWFyY2g6ICdhcHBsaWVkJywKCQkJb3JkZXI6ICAnYXBwbGllZCcKCQl9LAoJCW9ydGhvZ29uYWw6ICAgICAnZGlzcGxheScsCgkJc3RyaXBIdG1sOiAgICAgIHRydWUsCgkJc3RyaXBOZXdsaW5lczogIHRydWUsCgkJZGVjb2RlRW50aXRpZXM6IHRydWUsCgkJdHJpbTogICAgICAgICAgIHRydWUsCgkJZm9ybWF0OiAgICAgICAgIHsKCQkJaGVhZGVyOiBmdW5jdGlvbiAoIGQgKSB7CgkJCQlyZXR1cm4gc3RyaXAoIGQgKTsKCQkJfSwKCQkJZm9vdGVyOiBmdW5jdGlvbiAoIGQgKSB7CgkJCQlyZXR1cm4gc3RyaXAoIGQgKTsKCQkJfSwKCQkJYm9keTogZnVuY3Rpb24gKCBkICkgewoJCQkJcmV0dXJuIHN0cmlwKCBkICk7CgkJCX0KCQl9LAoJCWN1c3RvbWl6ZURhdGE6IG51bGwKCX0sIGluT3B0cyApOwoKCXZhciBzdHJpcCA9IGZ1bmN0aW9uICggc3RyICkgewoJCWlmICggdHlwZW9mIHN0ciAhPT0gJ3N0cmluZycgKSB7CgkJCXJldHVybiBzdHI7CgkJfQoKCQkvLyBBbHdheXMgcmVtb3ZlIHNjcmlwdCB0YWdzCgkJc3RyID0gc3RyLnJlcGxhY2UoIC88c2NyaXB0XGJbXjxdKig/Oig/ITxcL3NjcmlwdD4pPFtePF0qKSo8XC9zY3JpcHQ+L2dpLCAnJyApOwoKCQkvLyBBbHdheXMgcmVtb3ZlIGNvbW1lbnRzCgkJc3RyID0gc3RyLnJlcGxhY2UoIC88IVwtXC0uKj9cLVwtPi9nLCAnJyApOwoKCQlpZiAoIGNvbmZpZy5zdHJpcEh0bWwgKSB7CgkJCXN0ciA9IHN0ci5yZXBsYWNlKCAvPFtePl0qPi9nLCAnJyApOwoJCX0KCgkJaWYgKCBjb25maWcudHJpbSApIHsKCQkJc3RyID0gc3RyLnJlcGxhY2UoIC9eXHMrfFxzKyQvZywgJycgKTsKCQl9CgoJCWlmICggY29uZmlnLnN0cmlwTmV3bGluZXMgKSB7CgkJCXN0ciA9IHN0ci5yZXBsYWNlKCAvXG4vZywgJyAnICk7CgkJfQoKCQlpZiAoIGNvbmZpZy5kZWNvZGVFbnRpdGllcyApIHsKCQkJX2V4cG9ydFRleHRhcmVhLmlubmVySFRNTCA9IHN0cjsKCQkJc3RyID0gX2V4cG9ydFRleHRhcmVhLnZhbHVlOwoJCX0KCgkJcmV0dXJuIHN0cjsKCX07CgoKCXZhciBoZWFkZXIgPSBkdC5jb2x1bW5zKCBjb25maWcuY29sdW1ucyApLmluZGV4ZXMoKS5tYXAoIGZ1bmN0aW9uIChpZHgpIHsKCQl2YXIgZWwgPSBkdC5jb2x1bW4oIGlkeCApLmhlYWRlcigpOwoJCXJldHVybiBjb25maWcuZm9ybWF0LmhlYWRlciggZWwuaW5uZXJIVE1MLCBpZHgsIGVsICk7Cgl9ICkudG9BcnJheSgpOwoKCXZhciBmb290ZXIgPSBkdC50YWJsZSgpLmZvb3RlcigpID8KCQlkdC5jb2x1bW5zKCBjb25maWcuY29sdW1ucyApLmluZGV4ZXMoKS5tYXAoIGZ1bmN0aW9uIChpZHgpIHsKCQkJdmFyIGVsID0gZHQuY29sdW1uKCBpZHggKS5mb290ZXIoKTsKCQkJcmV0dXJuIGNvbmZpZy5mb3JtYXQuZm9vdGVyKCBlbCA/IGVsLmlubmVySFRNTCA6ICcnLCBpZHgsIGVsICk7CgkJfSApLnRvQXJyYXkoKSA6CgkJbnVsbDsKCQoJLy8gSWYgU2VsZWN0IGlzIGF2YWlsYWJsZSBvbiB0aGlzIHRhYmxlLCBhbmQgYW55IHJvd3MgYXJlIHNlbGVjdGVkLCBsaW1pdCB0aGUgZXhwb3J0CgkvLyB0byB0aGUgc2VsZWN0ZWQgcm93cy4gSWYgbm8gcm93cyBhcmUgc2VsZWN0ZWQsIGFsbCByb3dzIHdpbGwgYmUgZXhwb3J0ZWQuIFNwZWNpZnkKCS8vIGEgYHNlbGVjdGVkYCBtb2RpZmllciB0byBjb250cm9sIGRpcmVjdGx5LgoJdmFyIG1vZGlmaWVyID0gJC5leHRlbmQoIHt9LCBjb25maWcubW9kaWZpZXIgKTsKCWlmICggZHQuc2VsZWN0ICYmIHR5cGVvZiBkdC5zZWxlY3QuaW5mbyA9PT0gJ2Z1bmN0aW9uJyAmJiBtb2RpZmllci5zZWxlY3RlZCA9PT0gdW5kZWZpbmVkICkgewoJCWlmICggZHQucm93cyggY29uZmlnLnJvd3MsICQuZXh0ZW5kKCB7IHNlbGVjdGVkOiB0cnVlIH0sIG1vZGlmaWVyICkgKS5hbnkoKSApIHsKCQkJJC5leHRlbmQoIG1vZGlmaWVyLCB7IHNlbGVjdGVkOiB0cnVlIH0gKQoJCX0KCX0KCgl2YXIgcm93SW5kZXhlcyA9IGR0LnJvd3MoIGNvbmZpZy5yb3dzLCBtb2RpZmllciApLmluZGV4ZXMoKS50b0FycmF5KCk7Cgl2YXIgc2VsZWN0ZWRDZWxscyA9IGR0LmNlbGxzKCByb3dJbmRleGVzLCBjb25maWcuY29sdW1ucyApOwoJdmFyIGNlbGxzID0gc2VsZWN0ZWRDZWxscwoJCS5yZW5kZXIoIGNvbmZpZy5vcnRob2dvbmFsICkKCQkudG9BcnJheSgpOwoJdmFyIGNlbGxOb2RlcyA9IHNlbGVjdGVkQ2VsbHMKCQkubm9kZXMoKQoJCS50b0FycmF5KCk7CgoJdmFyIGNvbHVtbnMgPSBoZWFkZXIubGVuZ3RoOwoJdmFyIHJvd3MgPSBjb2x1bW5zID4gMCA/IGNlbGxzLmxlbmd0aCAvIGNvbHVtbnMgOiAwOwoJdmFyIGJvZHkgPSBbXTsKCXZhciBjZWxsQ291bnRlciA9IDA7CgoJZm9yICggdmFyIGk9MCwgaWVuPXJvd3MgOyBpPGllbiA7IGkrKyApIHsKCQl2YXIgcm93ID0gWyBjb2x1bW5zIF07CgoJCWZvciAoIHZhciBqPTAgOyBqPGNvbHVtbnMgOyBqKysgKSB7CgkJCXJvd1tqXSA9IGNvbmZpZy5mb3JtYXQuYm9keSggY2VsbHNbIGNlbGxDb3VudGVyIF0sIGksIGosIGNlbGxOb2Rlc1sgY2VsbENvdW50ZXIgXSApOwoJCQljZWxsQ291bnRlcisrOwoJCX0KCgkJYm9keVtpXSA9IHJvdzsKCX0KCgl2YXIgZGF0YSA9IHsKCQloZWFkZXI6IGhlYWRlciwKCQlmb290ZXI6IGZvb3RlciwKCQlib2R5OiAgIGJvZHkKCX07CgoJaWYgKCBjb25maWcuY3VzdG9taXplRGF0YSApIHsKCQljb25maWcuY3VzdG9taXplRGF0YSggZGF0YSApOwoJfQoKCXJldHVybiBkYXRhOwp9OwoKCi8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCiAqIERhdGFUYWJsZXMgaW50ZXJmYWNlCiAqLwoKLy8gQXR0YWNoIHRvIERhdGFUYWJsZXMgb2JqZWN0cyBmb3IgZ2xvYmFsIGFjY2VzcwokLmZuLmRhdGFUYWJsZS5CdXR0b25zID0gQnV0dG9uczsKJC5mbi5EYXRhVGFibGUuQnV0dG9ucyA9IEJ1dHRvbnM7CgoKCi8vIERhdGFUYWJsZXMgY3JlYXRpb24gLSBjaGVjayBpZiB0aGUgYnV0dG9ucyBoYXZlIGJlZW4gZGVmaW5lZCBmb3IgdGhpcyB0YWJsZSwKLy8gdGhleSB3aWxsIGhhdmUgYmVlbiBpZiB0aGUgYEJgIG9wdGlvbiB3YXMgdXNlZCBpbiBgZG9tYCwgb3RoZXJ3aXNlIHdlIHNob3VsZAovLyBjcmVhdGUgdGhlIGJ1dHRvbnMgaW5zdGFuY2UgaGVyZSBzbyB0aGV5IGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRoZSBkb2N1bWVudAovLyB1c2luZyB0aGUgQVBJLiBMaXN0ZW4gZm9yIGBpbml0YCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHByZSAxLjEwLjEwLCBidXQgdG8KLy8gYmUgcmVtb3ZlZCBpbiBmdXR1cmUuCiQoZG9jdW1lbnQpLm9uKCAnaW5pdC5kdCBwbHVnaW4taW5pdC5kdCcsIGZ1bmN0aW9uIChlLCBzZXR0aW5ncykgewoJaWYgKCBlLm5hbWVzcGFjZSAhPT0gJ2R0JyApIHsKCQlyZXR1cm47Cgl9CgoJdmFyIG9wdHMgPSBzZXR0aW5ncy5vSW5pdC5idXR0b25zIHx8IERhdGFUYWJsZS5kZWZhdWx0cy5idXR0b25zOwoKCWlmICggb3B0cyAmJiAhIHNldHRpbmdzLl9idXR0b25zICkgewoJCW5ldyBCdXR0b25zKCBzZXR0aW5ncywgb3B0cyApLmNvbnRhaW5lcigpOwoJfQp9ICk7CgpmdW5jdGlvbiBfaW5pdCAoIHNldHRpbmdzICkgewoJdmFyIGFwaSA9IG5ldyBEYXRhVGFibGUuQXBpKCBzZXR0aW5ncyApOwoJdmFyIG9wdHMgPSBhcGkuaW5pdCgpLmJ1dHRvbnMgfHwgRGF0YVRhYmxlLmRlZmF1bHRzLmJ1dHRvbnM7CgoJcmV0dXJuIG5ldyBCdXR0b25zKCBhcGksIG9wdHMgKS5jb250YWluZXIoKTsKfQoKLy8gRGF0YVRhYmxlcyBgZG9tYCBmZWF0dXJlIG9wdGlvbgpEYXRhVGFibGUuZXh0LmZlYXR1cmUucHVzaCggewoJZm5Jbml0OiBfaW5pdCwKCWNGZWF0dXJlOiAiQiIKfSApOwoKLy8gRGF0YVRhYmxlcyAyIGxheW91dCBmZWF0dXJlCmlmICggRGF0YVRhYmxlLmV4dC5mZWF0dXJlcyApIHsKCURhdGFUYWJsZS5leHQuZmVhdHVyZXMucmVnaXN0ZXIoICdidXR0b25zJywgX2luaXQgKTsKfQoKCnJldHVybiBCdXR0b25zOwp9KSk7CgoKLyohIEJvb3RzdHJhcCBpbnRlZ3JhdGlvbiBmb3IgRGF0YVRhYmxlcycgQnV0dG9ucwogKiDCqTIwMTYgU3ByeU1lZGlhIEx0ZCAtIGRhdGF0YWJsZXMubmV0L2xpY2Vuc2UKICovCgooZnVuY3Rpb24oIGZhY3RvcnkgKXsKCWlmICggdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkgewoJCS8vIEFNRAoJCWRlZmluZSggWydqcXVlcnknLCAnZGF0YXRhYmxlcy5uZXQtYnM0JywgJ2RhdGF0YWJsZXMubmV0LWJ1dHRvbnMnXSwgZnVuY3Rpb24gKCAkICkgewoJCQlyZXR1cm4gZmFjdG9yeSggJCwgd2luZG93LCBkb2N1bWVudCApOwoJCX0gKTsKCX0KCWVsc2UgaWYgKCB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgKSB7CgkJLy8gQ29tbW9uSlMKCQltb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb290LCAkKSB7CgkJCWlmICggISByb290ICkgewoJCQkJcm9vdCA9IHdpbmRvdzsKCQkJfQoKCQkJaWYgKCAhICQgfHwgISAkLmZuLmRhdGFUYWJsZSApIHsKCQkJCSQgPSByZXF1aXJlKCdkYXRhdGFibGVzLm5ldC1iczQnKShyb290LCAkKS4kOwoJCQl9CgoJCQlpZiAoICEgJC5mbi5kYXRhVGFibGUuQnV0dG9ucyApIHsKCQkJCXJlcXVpcmUoJ2RhdGF0YWJsZXMubmV0LWJ1dHRvbnMnKShyb290LCAkKTsKCQkJfQoKCQkJcmV0dXJuIGZhY3RvcnkoICQsIHJvb3QsIHJvb3QuZG9jdW1lbnQgKTsKCQl9OwoJfQoJZWxzZSB7CgkJLy8gQnJvd3NlcgoJCWZhY3RvcnkoIGpRdWVyeSwgd2luZG93LCBkb2N1bWVudCApOwoJfQp9KGZ1bmN0aW9uKCAkLCB3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQgKSB7Cid1c2Ugc3RyaWN0JzsKdmFyIERhdGFUYWJsZSA9ICQuZm4uZGF0YVRhYmxlOwoKJC5leHRlbmQoIHRydWUsIERhdGFUYWJsZS5CdXR0b25zLmRlZmF1bHRzLCB7Cglkb206IHsKCQljb250YWluZXI6IHsKCQkJY2xhc3NOYW1lOiAnZHQtYnV0dG9ucyBidG4tZ3JvdXAgZmxleC13cmFwJwoJCX0sCgkJYnV0dG9uOiB7CgkJCWNsYXNzTmFtZTogJ2J0biBidG4tc2Vjb25kYXJ5JwoJCX0sCgkJY29sbGVjdGlvbjogewoJCQl0YWc6ICdkaXYnLAoJCQljbGFzc05hbWU6ICdkcm9wZG93bi1tZW51JywKCQkJYnV0dG9uOiB7CgkJCQl0YWc6ICdhJywKCQkJCWNsYXNzTmFtZTogJ2R0LWJ1dHRvbiBkcm9wZG93bi1pdGVtJywKCQkJCWFjdGl2ZTogJ2FjdGl2ZScsCgkJCQlkaXNhYmxlZDogJ2Rpc2FibGVkJwoJCQl9CgkJfQoJfSwKCWJ1dHRvbkNyZWF0ZWQ6IGZ1bmN0aW9uICggY29uZmlnLCBidXR0b24gKSB7CgkJcmV0dXJuIGNvbmZpZy5idXR0b25zID8KCQkJJCgnPGRpdiBjbGFzcz0iYnRuLWdyb3VwIi8+JykuYXBwZW5kKGJ1dHRvbikgOgoJCQlidXR0b247Cgl9Cn0gKTsKCkRhdGFUYWJsZS5leHQuYnV0dG9ucy5jb2xsZWN0aW9uLmNsYXNzTmFtZSArPSAnIGRyb3Bkb3duLXRvZ2dsZSc7CkRhdGFUYWJsZS5leHQuYnV0dG9ucy5jb2xsZWN0aW9uLnJpZ2h0QWxpZ25DbGFzc05hbWUgPSAnZHJvcGRvd24tbWVudS1yaWdodCc7CgpyZXR1cm4gRGF0YVRhYmxlLkJ1dHRvbnM7Cn0pKTsKCgovKiEKICogQ29sdW1uIHZpc2liaWxpdHkgYnV0dG9ucyBmb3IgQnV0dG9ucyBhbmQgRGF0YVRhYmxlcy4KICogMjAxNiBTcHJ5TWVkaWEgTHRkIC0gZGF0YXRhYmxlcy5uZXQvbGljZW5zZQogKi8KCihmdW5jdGlvbiggZmFjdG9yeSApewoJaWYgKCB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7CgkJLy8gQU1ECgkJZGVmaW5lKCBbJ2pxdWVyeScsICdkYXRhdGFibGVzLm5ldCcsICdkYXRhdGFibGVzLm5ldC1idXR0b25zJ10sIGZ1bmN0aW9uICggJCApIHsKCQkJcmV0dXJuIGZhY3RvcnkoICQsIHdpbmRvdywgZG9jdW1lbnQgKTsKCQl9ICk7Cgl9CgllbHNlIGlmICggdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICkgewoJCS8vIENvbW1vbkpTCgkJbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocm9vdCwgJCkgewoJCQlpZiAoICEgcm9vdCApIHsKCQkJCXJvb3QgPSB3aW5kb3c7CgkJCX0KCgkJCWlmICggISAkIHx8ICEgJC5mbi5kYXRhVGFibGUgKSB7CgkJCQkkID0gcmVxdWlyZSgnZGF0YXRhYmxlcy5uZXQnKShyb290LCAkKS4kOwoJCQl9CgoJCQlpZiAoICEgJC5mbi5kYXRhVGFibGUuQnV0dG9ucyApIHsKCQkJCXJlcXVpcmUoJ2RhdGF0YWJsZXMubmV0LWJ1dHRvbnMnKShyb290LCAkKTsKCQkJfQoKCQkJcmV0dXJuIGZhY3RvcnkoICQsIHJvb3QsIHJvb3QuZG9jdW1lbnQgKTsKCQl9OwoJfQoJZWxzZSB7CgkJLy8gQnJvd3NlcgoJCWZhY3RvcnkoIGpRdWVyeSwgd2luZG93LCBkb2N1bWVudCApOwoJfQp9KGZ1bmN0aW9uKCAkLCB3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQgKSB7Cid1c2Ugc3RyaWN0JzsKdmFyIERhdGFUYWJsZSA9ICQuZm4uZGF0YVRhYmxlOwoKCiQuZXh0ZW5kKCBEYXRhVGFibGUuZXh0LmJ1dHRvbnMsIHsKCS8vIEEgY29sbGVjdGlvbiBvZiBjb2x1bW4gdmlzaWJpbGl0eSBidXR0b25zCgljb2x2aXM6IGZ1bmN0aW9uICggZHQsIGNvbmYgKSB7CgkJcmV0dXJuIHsKCQkJZXh0ZW5kOiAnY29sbGVjdGlvbicsCgkJCXRleHQ6IGZ1bmN0aW9uICggZHQgKSB7CgkJCQlyZXR1cm4gZHQuaTE4biggJ2J1dHRvbnMuY29sdmlzJywgJ0NvbHVtbiB2aXNpYmlsaXR5JyApOwoJCQl9LAoJCQljbGFzc05hbWU6ICdidXR0b25zLWNvbHZpcycsCgkJCWJ1dHRvbnM6IFsgewoJCQkJZXh0ZW5kOiAnY29sdW1uc1RvZ2dsZScsCgkJCQljb2x1bW5zOiBjb25mLmNvbHVtbnMsCgkJCQljb2x1bW5UZXh0OiBjb25mLmNvbHVtblRleHQKCQkJfSBdCgkJfTsKCX0sCgoJLy8gU2VsZWN0ZWQgY29sdW1ucyB3aXRoIGluZGl2aWR1YWwgYnV0dG9ucyAtIHRvZ2dsZSBjb2x1bW4gdmlzaWJpbGl0eQoJY29sdW1uc1RvZ2dsZTogZnVuY3Rpb24gKCBkdCwgY29uZiApIHsKCQl2YXIgY29sdW1ucyA9IGR0LmNvbHVtbnMoIGNvbmYuY29sdW1ucyApLmluZGV4ZXMoKS5tYXAoIGZ1bmN0aW9uICggaWR4ICkgewoJCQlyZXR1cm4gewoJCQkJZXh0ZW5kOiAnY29sdW1uVG9nZ2xlJywKCQkJCWNvbHVtbnM6IGlkeCwKCQkJCWNvbHVtblRleHQ6IGNvbmYuY29sdW1uVGV4dAoJCQl9OwoJCX0gKS50b0FycmF5KCk7CgoJCXJldHVybiBjb2x1bW5zOwoJfSwKCgkvLyBTaW5nbGUgYnV0dG9uIHRvIHRvZ2dsZSBjb2x1bW4gdmlzaWJpbGl0eQoJY29sdW1uVG9nZ2xlOiBmdW5jdGlvbiAoIGR0LCBjb25mICkgewoJCXJldHVybiB7CgkJCWV4dGVuZDogJ2NvbHVtblZpc2liaWxpdHknLAoJCQljb2x1bW5zOiBjb25mLmNvbHVtbnMsCgkJCWNvbHVtblRleHQ6IGNvbmYuY29sdW1uVGV4dAoJCX07Cgl9LAoKCS8vIFNlbGVjdGVkIGNvbHVtbnMgd2l0aCBpbmRpdmlkdWFsIGJ1dHRvbnMgLSBzZXQgY29sdW1uIHZpc2liaWxpdHkKCWNvbHVtbnNWaXNpYmlsaXR5OiBmdW5jdGlvbiAoIGR0LCBjb25mICkgewoJCXZhciBjb2x1bW5zID0gZHQuY29sdW1ucyggY29uZi5jb2x1bW5zICkuaW5kZXhlcygpLm1hcCggZnVuY3Rpb24gKCBpZHggKSB7CgkJCXJldHVybiB7CgkJCQlleHRlbmQ6ICdjb2x1bW5WaXNpYmlsaXR5JywKCQkJCWNvbHVtbnM6IGlkeCwKCQkJCXZpc2liaWxpdHk6IGNvbmYudmlzaWJpbGl0eSwKCQkJCWNvbHVtblRleHQ6IGNvbmYuY29sdW1uVGV4dAoJCQl9OwoJCX0gKS50b0FycmF5KCk7CgoJCXJldHVybiBjb2x1bW5zOwoJfSwKCgkvLyBTaW5nbGUgYnV0dG9uIHRvIHNldCBjb2x1bW4gdmlzaWJpbGl0eQoJY29sdW1uVmlzaWJpbGl0eTogewoJCWNvbHVtbnM6IHVuZGVmaW5lZCwgLy8gY29sdW1uIHNlbGVjdG9yCgkJdGV4dDogZnVuY3Rpb24gKCBkdCwgYnV0dG9uLCBjb25mICkgewoJCQlyZXR1cm4gY29uZi5fY29sdW1uVGV4dCggZHQsIGNvbmYgKTsKCQl9LAoJCWNsYXNzTmFtZTogJ2J1dHRvbnMtY29sdW1uVmlzaWJpbGl0eScsCgkJYWN0aW9uOiBmdW5jdGlvbiAoIGUsIGR0LCBidXR0b24sIGNvbmYgKSB7CgkJCXZhciBjb2wgPSBkdC5jb2x1bW5zKCBjb25mLmNvbHVtbnMgKTsKCQkJdmFyIGN1cnIgPSBjb2wudmlzaWJsZSgpOwoKCQkJY29sLnZpc2libGUoIGNvbmYudmlzaWJpbGl0eSAhPT0gdW5kZWZpbmVkID8KCQkJCWNvbmYudmlzaWJpbGl0eSA6CgkJCQkhIChjdXJyLmxlbmd0aCA/IGN1cnJbMF0gOiBmYWxzZSApCgkJCSk7CgkJfSwKCQlpbml0OiBmdW5jdGlvbiAoIGR0LCBidXR0b24sIGNvbmYgKSB7CgkJCXZhciB0aGF0ID0gdGhpczsKCQkJYnV0dG9uLmF0dHIoICdkYXRhLWN2LWlkeCcsIGNvbmYuY29sdW1ucyApOwoKCQkJZHQKCQkJCS5vbiggJ2NvbHVtbi12aXNpYmlsaXR5LmR0Jytjb25mLm5hbWVzcGFjZSwgZnVuY3Rpb24gKGUsIHNldHRpbmdzKSB7CgkJCQkJaWYgKCAhIHNldHRpbmdzLmJEZXN0cm95aW5nICYmIHNldHRpbmdzLm5UYWJsZSA9PSBkdC5zZXR0aW5ncygpWzBdLm5UYWJsZSApIHsKCQkJCQkJdGhhdC5hY3RpdmUoIGR0LmNvbHVtbiggY29uZi5jb2x1bW5zICkudmlzaWJsZSgpICk7CgkJCQkJfQoJCQkJfSApCgkJCQkub24oICdjb2x1bW4tcmVvcmRlci5kdCcrY29uZi5uYW1lc3BhY2UsIGZ1bmN0aW9uIChlLCBzZXR0aW5ncywgZGV0YWlscykgewoJCQkJCWlmICggZHQuY29sdW1ucyggY29uZi5jb2x1bW5zICkuY291bnQoKSAhPT0gMSApIHsKCQkJCQkJcmV0dXJuOwoJCQkJCX0KCgkJCQkJLy8gVGhpcyBidXR0b24gY29udHJvbHMgdGhlIHNhbWUgY29sdW1uIGluZGV4IGJ1dCB0aGUgdGV4dCBmb3IgdGhlIGNvbHVtbiBoYXMKCQkJCQkvLyBjaGFuZ2VkCgkJCQkJYnV0dG9uLnRleHQoIGNvbmYuX2NvbHVtblRleHQoIGR0LCBjb25mICkgKTsKCgkJCQkJLy8gU2luY2UgaXRzIGEgZGlmZmVyZW50IGNvbHVtbiwgd2UgbmVlZCB0byBjaGVjayBpdHMgdmlzaWJpbGl0eQoJCQkJCXRoYXQuYWN0aXZlKCBkdC5jb2x1bW4oIGNvbmYuY29sdW1ucyApLnZpc2libGUoKSApOwoJCQkJfSApOwoKCQkJdGhpcy5hY3RpdmUoIGR0LmNvbHVtbiggY29uZi5jb2x1bW5zICkudmlzaWJsZSgpICk7CgkJfSwKCQlkZXN0cm95OiBmdW5jdGlvbiAoIGR0LCBidXR0b24sIGNvbmYgKSB7CgkJCWR0CgkJCQkub2ZmKCAnY29sdW1uLXZpc2liaWxpdHkuZHQnK2NvbmYubmFtZXNwYWNlICkKCQkJCS5vZmYoICdjb2x1bW4tcmVvcmRlci5kdCcrY29uZi5uYW1lc3BhY2UgKTsKCQl9LAoKCQlfY29sdW1uVGV4dDogZnVuY3Rpb24gKCBkdCwgY29uZiApIHsKCQkJLy8gVXNlIERhdGFUYWJsZXMnIGludGVybmFsIGRhdGEgc3RydWN0dXJlIHVudGlsIHRoaXMgaXMgcHJlc2VudGVkCgkJCS8vIGlzIGEgcHVibGljIEFQSS4gVGhlIG90aGVyIG9wdGlvbiBpcyB0byB1c2UKCQkJLy8gYCQoIGNvbHVtbihjb2wpLm5vZGUoKSApLnRleHQoKWAgYnV0IHRoZSBub2RlIG1pZ2h0IG5vdCBoYXZlIGJlZW4KCQkJLy8gcG9wdWxhdGVkIHdoZW4gQnV0dG9ucyBpcyBjb25zdHJ1Y3RlZC4KCQkJdmFyIGlkeCA9IGR0LmNvbHVtbiggY29uZi5jb2x1bW5zICkuaW5kZXgoKTsKCQkJdmFyIHRpdGxlID0gZHQuc2V0dGluZ3MoKVswXS5hb0NvbHVtbnNbIGlkeCBdLnNUaXRsZQoJCQkJLnJlcGxhY2UoL1xuL2csIiAiKSAgICAgICAgLy8gcmVtb3ZlIG5ldyBsaW5lcwoJCQkJLnJlcGxhY2UoLzxiclxzKlwvPz4vZ2ksICIgIikgIC8vIHJlcGxhY2UgbGluZSBicmVha3Mgd2l0aCBzcGFjZXMKCQkJCS5yZXBsYWNlKC88c2VsZWN0KC4qPyk8XC9zZWxlY3Q+L2csICIiKSAvLyByZW1vdmUgc2VsZWN0IHRhZ3MsIGluY2x1ZGluZyBvcHRpb25zIHRleHQKCQkJCS5yZXBsYWNlKC88IVwtXC0uKj9cLVwtPi9nLCAiIikgLy8gc3RyaXAgSFRNTCBjb21tZW50cwoJCQkJLnJlcGxhY2UoLzwuKj8+L2csICIiKSAgIC8vIHN0cmlwIEhUTUwKCQkJCS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik7IC8vIHRyaW0KCgkJCXJldHVybiBjb25mLmNvbHVtblRleHQgPwoJCQkJY29uZi5jb2x1bW5UZXh0KCBkdCwgaWR4LCB0aXRsZSApIDoKCQkJCXRpdGxlOwoJCX0KCX0sCgoKCWNvbHZpc1Jlc3RvcmU6IHsKCQljbGFzc05hbWU6ICdidXR0b25zLWNvbHZpc1Jlc3RvcmUnLAoKCQl0ZXh0OiBmdW5jdGlvbiAoIGR0ICkgewoJCQlyZXR1cm4gZHQuaTE4biggJ2J1dHRvbnMuY29sdmlzUmVzdG9yZScsICdSZXN0b3JlIHZpc2liaWxpdHknICk7CgkJfSwKCgkJaW5pdDogZnVuY3Rpb24gKCBkdCwgYnV0dG9uLCBjb25mICkgewoJCQljb25mLl92aXNPcmlnaW5hbCA9IGR0LmNvbHVtbnMoKS5pbmRleGVzKCkubWFwKCBmdW5jdGlvbiAoIGlkeCApIHsKCQkJCXJldHVybiBkdC5jb2x1bW4oIGlkeCApLnZpc2libGUoKTsKCQkJfSApLnRvQXJyYXkoKTsKCQl9LAoKCQlhY3Rpb246IGZ1bmN0aW9uICggZSwgZHQsIGJ1dHRvbiwgY29uZiApIHsKCQkJZHQuY29sdW1ucygpLmV2ZXJ5KCBmdW5jdGlvbiAoIGkgKSB7CgkJCQkvLyBUYWtlIGludG8gYWNjb3VudCB0aGF0IENvbFJlb3JkZXIgbWlnaHQgaGF2ZSBkaXNydXB0ZWQgb3VyCgkJCQkvLyBpbmRleGVzCgkJCQl2YXIgaWR4ID0gZHQuY29sUmVvcmRlciAmJiBkdC5jb2xSZW9yZGVyLnRyYW5zcG9zZSA/CgkJCQkJZHQuY29sUmVvcmRlci50cmFuc3Bvc2UoIGksICd0b09yaWdpbmFsJyApIDoKCQkJCQlpOwoKCQkJCXRoaXMudmlzaWJsZSggY29uZi5fdmlzT3JpZ2luYWxbIGlkeCBdICk7CgkJCX0gKTsKCQl9Cgl9LAoKCgljb2x2aXNHcm91cDogewoJCWNsYXNzTmFtZTogJ2J1dHRvbnMtY29sdmlzR3JvdXAnLAoKCQlhY3Rpb246IGZ1bmN0aW9uICggZSwgZHQsIGJ1dHRvbiwgY29uZiApIHsKCQkJZHQuY29sdW1ucyggY29uZi5zaG93ICkudmlzaWJsZSggdHJ1ZSwgZmFsc2UgKTsKCQkJZHQuY29sdW1ucyggY29uZi5oaWRlICkudmlzaWJsZSggZmFsc2UsIGZhbHNlICk7CgoJCQlkdC5jb2x1bW5zLmFkanVzdCgpOwoJCX0sCgoJCXNob3c6IFtdLAoKCQloaWRlOiBbXQoJfQp9ICk7CgoKcmV0dXJuIERhdGFUYWJsZS5CdXR0b25zOwp9KSk7CgoKLyohCiAqIEZsYXNoIGV4cG9ydCBidXR0b25zIGZvciBCdXR0b25zIGFuZCBEYXRhVGFibGVzLgogKiAyMDE1LTIwMTcgU3ByeU1lZGlhIEx0ZCAtIGRhdGF0YWJsZXMubmV0L2xpY2Vuc2UKICoKICogWmVyb0NsaXBiYW9yZCAtIE1JVCBsaWNlbnNlCiAqIENvcHlyaWdodCAoYykgMjAxMiBKb3NlcGggSHVja2FieQogKi8KCihmdW5jdGlvbiggZmFjdG9yeSApewoJaWYgKCB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7CgkJLy8gQU1ECgkJZGVmaW5lKCBbJ2pxdWVyeScsICdkYXRhdGFibGVzLm5ldCcsICdkYXRhdGFibGVzLm5ldC1idXR0b25zJ10sIGZ1bmN0aW9uICggJCApIHsKCQkJcmV0dXJuIGZhY3RvcnkoICQsIHdpbmRvdywgZG9jdW1lbnQgKTsKCQl9ICk7Cgl9CgllbHNlIGlmICggdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICkgewoJCS8vIENvbW1vbkpTCgkJbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocm9vdCwgJCkgewoJCQlpZiAoICEgcm9vdCApIHsKCQkJCXJvb3QgPSB3aW5kb3c7CgkJCX0KCgkJCWlmICggISAkIHx8ICEgJC5mbi5kYXRhVGFibGUgKSB7CgkJCQkkID0gcmVxdWlyZSgnZGF0YXRhYmxlcy5uZXQnKShyb290LCAkKS4kOwoJCQl9CgoJCQlpZiAoICEgJC5mbi5kYXRhVGFibGUuQnV0dG9ucyApIHsKCQkJCXJlcXVpcmUoJ2RhdGF0YWJsZXMubmV0LWJ1dHRvbnMnKShyb290LCAkKTsKCQkJfQoKCQkJcmV0dXJuIGZhY3RvcnkoICQsIHJvb3QsIHJvb3QuZG9jdW1lbnQgKTsKCQl9OwoJfQoJZWxzZSB7CgkJLy8gQnJvd3NlcgoJCWZhY3RvcnkoIGpRdWVyeSwgd2luZG93LCBkb2N1bWVudCApOwoJfQp9KGZ1bmN0aW9uKCAkLCB3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQgKSB7Cid1c2Ugc3RyaWN0JzsKdmFyIERhdGFUYWJsZSA9ICQuZm4uZGF0YVRhYmxlOwoKCi8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgogKiBaZXJvQ2xpcGJvYXJkIGRlcGVuZGVuY3kKICovCgovKgogKiBaZXJvQ2xpcGJvYXJkIDEuMC40IHdpdGggbW9kaWZpY2F0aW9ucwogKiBBdXRob3I6IEpvc2VwaCBIdWNrYWJ5CiAqIExpY2Vuc2U6IE1JVAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTIgSm9zZXBoIEh1Y2thYnkKICovCnZhciBaZXJvQ2xpcGJvYXJkX1RhYmxlVG9vbHMgPSB7Cgl2ZXJzaW9uOiAiMS4wLjQtVGFibGVUb29sczIiLAoJY2xpZW50czoge30sIC8vIHJlZ2lzdGVyZWQgdXBsb2FkIGNsaWVudHMgb24gcGFnZSwgaW5kZXhlZCBieSBpZAoJbW92aWVQYXRoOiAnJywgLy8gVVJMIHRvIG1vdmllCgluZXh0SWQ6IDEsIC8vIElEIG9mIG5leHQgbW92aWUKCgkkOiBmdW5jdGlvbih0aGluZ3kpIHsKCQkvLyBzaW1wbGUgRE9NIGxvb2t1cCB1dGlsaXR5IGZ1bmN0aW9uCgkJaWYgKHR5cGVvZih0aGluZ3kpID09ICdzdHJpbmcnKSB7CgkJCXRoaW5neSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaW5neSk7CgkJfQoJCWlmICghdGhpbmd5LmFkZENsYXNzKSB7CgkJCS8vIGV4dGVuZCBlbGVtZW50IHdpdGggYSBmZXcgdXNlZnVsIG1ldGhvZHMKCQkJdGhpbmd5LmhpZGUgPSBmdW5jdGlvbigpIHsgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9OwoJCQl0aGluZ3kuc2hvdyA9IGZ1bmN0aW9uKCkgeyB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnJzsgfTsKCQkJdGhpbmd5LmFkZENsYXNzID0gZnVuY3Rpb24obmFtZSkgeyB0aGlzLnJlbW92ZUNsYXNzKG5hbWUpOyB0aGlzLmNsYXNzTmFtZSArPSAnICcgKyBuYW1lOyB9OwoJCQl0aGluZ3kucmVtb3ZlQ2xhc3MgPSBmdW5jdGlvbihuYW1lKSB7CgkJCQl0aGlzLmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lLnJlcGxhY2UoIG5ldyBSZWdFeHAoIlxccyoiICsgbmFtZSArICJcXHMqIiksICIgIikucmVwbGFjZSgvXlxzKy8sICcnKS5yZXBsYWNlKC9ccyskLywgJycpOwoJCQl9OwoJCQl0aGluZ3kuaGFzQ2xhc3MgPSBmdW5jdGlvbihuYW1lKSB7CgkJCQlyZXR1cm4gISF0aGlzLmNsYXNzTmFtZS5tYXRjaCggbmV3IFJlZ0V4cCgiXFxzKiIgKyBuYW1lICsgIlxccyoiKSApOwoJCQl9OwoJCX0KCQlyZXR1cm4gdGhpbmd5OwoJfSwKCglzZXRNb3ZpZVBhdGg6IGZ1bmN0aW9uKHBhdGgpIHsKCQkvLyBzZXQgcGF0aCB0byBaZXJvQ2xpcGJvYXJkLnN3ZgoJCXRoaXMubW92aWVQYXRoID0gcGF0aDsKCX0sCgoJZGlzcGF0Y2g6IGZ1bmN0aW9uKGlkLCBldmVudE5hbWUsIGFyZ3MpIHsKCQkvLyByZWNlaXZlIGV2ZW50IGZyb20gZmxhc2ggbW92aWUsIHNlbmQgdG8gY2xpZW50CgkJdmFyIGNsaWVudCA9IHRoaXMuY2xpZW50c1tpZF07CgkJaWYgKGNsaWVudCkgewoJCQljbGllbnQucmVjZWl2ZUV2ZW50KGV2ZW50TmFtZSwgYXJncyk7CgkJfQoJfSwKCglsb2c6IGZ1bmN0aW9uICggc3RyICkgewoJCWNvbnNvbGUubG9nKCAnRmxhc2g6ICcrc3RyICk7Cgl9LAoKCXJlZ2lzdGVyOiBmdW5jdGlvbihpZCwgY2xpZW50KSB7CgkJLy8gcmVnaXN0ZXIgbmV3IGNsaWVudCB0byByZWNlaXZlIGV2ZW50cwoJCXRoaXMuY2xpZW50c1tpZF0gPSBjbGllbnQ7Cgl9LAoKCWdldERPTU9iamVjdFBvc2l0aW9uOiBmdW5jdGlvbihvYmopIHsKCQkvLyBnZXQgYWJzb2x1dGUgY29vcmRpbmF0ZXMgZm9yIGRvbSBlbGVtZW50CgkJdmFyIGluZm8gPSB7CgkJCWxlZnQ6IDAsCgkJCXRvcDogMCwKCQkJd2lkdGg6IG9iai53aWR0aCA/IG9iai53aWR0aCA6IG9iai5vZmZzZXRXaWR0aCwKCQkJaGVpZ2h0OiBvYmouaGVpZ2h0ID8gb2JqLmhlaWdodCA6IG9iai5vZmZzZXRIZWlnaHQKCQl9OwoKCQlpZiAoIG9iai5zdHlsZS53aWR0aCAhPT0gIiIgKSB7CgkJCWluZm8ud2lkdGggPSBvYmouc3R5bGUud2lkdGgucmVwbGFjZSgicHgiLCIiKTsKCQl9CgoJCWlmICggb2JqLnN0eWxlLmhlaWdodCAhPT0gIiIgKSB7CgkJCWluZm8uaGVpZ2h0ID0gb2JqLnN0eWxlLmhlaWdodC5yZXBsYWNlKCJweCIsIiIpOwoJCX0KCgkJd2hpbGUgKG9iaikgewoJCQlpbmZvLmxlZnQgKz0gb2JqLm9mZnNldExlZnQ7CgkJCWluZm8udG9wICs9IG9iai5vZmZzZXRUb3A7CgkJCW9iaiA9IG9iai5vZmZzZXRQYXJlbnQ7CgkJfQoKCQlyZXR1cm4gaW5mbzsKCX0sCgoJQ2xpZW50OiBmdW5jdGlvbihlbGVtKSB7CgkJLy8gY29uc3RydWN0b3IgZm9yIG5ldyBzaW1wbGUgdXBsb2FkIGNsaWVudAoJCXRoaXMuaGFuZGxlcnMgPSB7fTsKCgkJLy8gdW5pcXVlIElECgkJdGhpcy5pZCA9IFplcm9DbGlwYm9hcmRfVGFibGVUb29scy5uZXh0SWQrKzsKCQl0aGlzLm1vdmllSWQgPSAnWmVyb0NsaXBib2FyZF9UYWJsZVRvb2xzTW92aWVfJyArIHRoaXMuaWQ7CgoJCS8vIHJlZ2lzdGVyIGNsaWVudCB3aXRoIHNpbmdsZXRvbiB0byByZWNlaXZlIGZsYXNoIGV2ZW50cwoJCVplcm9DbGlwYm9hcmRfVGFibGVUb29scy5yZWdpc3Rlcih0aGlzLmlkLCB0aGlzKTsKCgkJLy8gY3JlYXRlIG1vdmllCgkJaWYgKGVsZW0pIHsKCQkJdGhpcy5nbHVlKGVsZW0pOwoJCX0KCX0KfTsKClplcm9DbGlwYm9hcmRfVGFibGVUb29scy5DbGllbnQucHJvdG90eXBlID0gewoKCWlkOiAwLCAvLyB1bmlxdWUgSUQgZm9yIHVzCglyZWFkeTogZmFsc2UsIC8vIHdoZXRoZXIgbW92aWUgaXMgcmVhZHkgdG8gcmVjZWl2ZSBldmVudHMgb3Igbm90Cgltb3ZpZTogbnVsbCwgLy8gcmVmZXJlbmNlIHRvIG1vdmllIG9iamVjdAoJY2xpcFRleHQ6ICcnLCAvLyB0ZXh0IHRvIGNvcHkgdG8gY2xpcGJvYXJkCglmaWxlTmFtZTogJycsIC8vIGRlZmF1bHQgZmlsZSBzYXZlIG5hbWUKCWFjdGlvbjogJ2NvcHknLCAvLyBhY3Rpb24gdG8gcGVyZm9ybQoJaGFuZEN1cnNvckVuYWJsZWQ6IHRydWUsIC8vIHdoZXRoZXIgdG8gc2hvdyBoYW5kIGN1cnNvciwgb3IgZGVmYXVsdCBwb2ludGVyIGN1cnNvcgoJY3NzRWZmZWN0czogdHJ1ZSwgLy8gZW5hYmxlIENTUyBtb3VzZSBlZmZlY3RzIG9uIGRvbSBjb250YWluZXIKCWhhbmRsZXJzOiBudWxsLCAvLyB1c2VyIGV2ZW50IGhhbmRsZXJzCglzaXplZDogZmFsc2UsCglzaGVldE5hbWU6ICcnLCAvLyBkZWZhdWx0IHNoZWV0IG5hbWUgZm9yIGV4Y2VsIGV4cG9ydAoKCWdsdWU6IGZ1bmN0aW9uKGVsZW0sIHRpdGxlKSB7CgkJLy8gZ2x1ZSB0byBET00gZWxlbWVudAoJCS8vIGVsZW0gY2FuIGJlIElEIG9yIGFjdHVhbCBET00gZWxlbWVudCBvYmplY3QKCQl0aGlzLmRvbUVsZW1lbnQgPSBaZXJvQ2xpcGJvYXJkX1RhYmxlVG9vbHMuJChlbGVtKTsKCgkJLy8gZmxvYXQganVzdCBhYm92ZSBvYmplY3QsIG9yIHpJbmRleCA5OSBpZiBkb20gZWxlbWVudCBpc24ndCBzZXQKCQl2YXIgekluZGV4ID0gOTk7CgkJaWYgKHRoaXMuZG9tRWxlbWVudC5zdHlsZS56SW5kZXgpIHsKCQkJekluZGV4ID0gcGFyc2VJbnQodGhpcy5kb21FbGVtZW50LnN0eWxlLnpJbmRleCwgMTApICsgMTsKCQl9CgoJCS8vIGZpbmQgWC9ZIHBvc2l0aW9uIG9mIGRvbUVsZW1lbnQKCQl2YXIgYm94ID0gWmVyb0NsaXBib2FyZF9UYWJsZVRvb2xzLmdldERPTU9iamVjdFBvc2l0aW9uKHRoaXMuZG9tRWxlbWVudCk7CgoJCS8vIGNyZWF0ZSBmbG9hdGluZyBESVYgYWJvdmUgZWxlbWVudAoJCXRoaXMuZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJdmFyIHN0eWxlID0gdGhpcy5kaXYuc3R5bGU7CgkJc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnOwoJCXN0eWxlLmxlZnQgPSAnMHB4JzsKCQlzdHlsZS50b3AgPSAnMHB4JzsKCQlzdHlsZS53aWR0aCA9IChib3gud2lkdGgpICsgJ3B4JzsKCQlzdHlsZS5oZWlnaHQgPSBib3guaGVpZ2h0ICsgJ3B4JzsKCQlzdHlsZS56SW5kZXggPSB6SW5kZXg7CgoJCWlmICggdHlwZW9mIHRpdGxlICE9ICJ1bmRlZmluZWQiICYmIHRpdGxlICE9PSAiIiApIHsKCQkJdGhpcy5kaXYudGl0bGUgPSB0aXRsZTsKCQl9CgkJaWYgKCBib3gud2lkdGggIT09IDAgJiYgYm94LmhlaWdodCAhPT0gMCApIHsKCQkJdGhpcy5zaXplZCA9IHRydWU7CgkJfQoKCQkvLyBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI2YwMCc7IC8vIGRlYnVnCgkJaWYgKCB0aGlzLmRvbUVsZW1lbnQgKSB7CgkJCXRoaXMuZG9tRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmRpdik7CgkJCXRoaXMuZGl2LmlubmVySFRNTCA9IHRoaXMuZ2V0SFRNTCggYm94LndpZHRoLCBib3guaGVpZ2h0ICkucmVwbGFjZSgvJi9nLCAnJmFtcDsnKTsKCQl9Cgl9LAoKCXBvc2l0aW9uRWxlbWVudDogZnVuY3Rpb24oKSB7CgkJdmFyIGJveCA9IFplcm9DbGlwYm9hcmRfVGFibGVUb29scy5nZXRET01PYmplY3RQb3NpdGlvbih0aGlzLmRvbUVsZW1lbnQpOwoJCXZhciBzdHlsZSA9IHRoaXMuZGl2LnN0eWxlOwoKCQlzdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7CgkJLy9zdHlsZS5sZWZ0ID0gKHRoaXMuZG9tRWxlbWVudC5vZmZzZXRMZWZ0KSsncHgnOwoJCS8vc3R5bGUudG9wID0gdGhpcy5kb21FbGVtZW50Lm9mZnNldFRvcCsncHgnOwoJCXN0eWxlLndpZHRoID0gYm94LndpZHRoICsgJ3B4JzsKCQlzdHlsZS5oZWlnaHQgPSBib3guaGVpZ2h0ICsgJ3B4JzsKCgkJaWYgKCBib3gud2lkdGggIT09IDAgJiYgYm94LmhlaWdodCAhPT0gMCApIHsKCQkJdGhpcy5zaXplZCA9IHRydWU7CgkJfSBlbHNlIHsKCQkJcmV0dXJuOwoJCX0KCgkJdmFyIGZsYXNoID0gdGhpcy5kaXYuY2hpbGROb2Rlc1swXTsKCQlmbGFzaC53aWR0aCA9IGJveC53aWR0aDsKCQlmbGFzaC5oZWlnaHQgPSBib3guaGVpZ2h0OwoJfSwKCglnZXRIVE1MOiBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7CgkJLy8gcmV0dXJuIEhUTUwgZm9yIG1vdmllCgkJdmFyIGh0bWwgPSAnJzsKCQl2YXIgZmxhc2h2YXJzID0gJ2lkPScgKyB0aGlzLmlkICsKCQkJJyZ3aWR0aD0nICsgd2lkdGggKwoJCQknJmhlaWdodD0nICsgaGVpZ2h0OwoKCQlpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvTVNJRS8pKSB7CgkJCS8vIElFIGdldHMgYW4gT0JKRUNUIHRhZwoJCQl2YXIgcHJvdG9jb2wgPSBsb2NhdGlvbi5ocmVmLm1hdGNoKC9eaHR0cHMvaSkgPyAnaHR0cHM6Ly8nIDogJ2h0dHA6Ly8nOwoJCQlodG1sICs9ICc8b2JqZWN0IGNsYXNzaWQ9ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIgY29kZWJhc2U9IicrcHJvdG9jb2wrJ2Rvd25sb2FkLm1hY3JvbWVkaWEuY29tL3B1Yi9zaG9ja3dhdmUvY2Ficy9mbGFzaC9zd2ZsYXNoLmNhYiN2ZXJzaW9uPTEwLDAsMCwwIiB3aWR0aD0iJyt3aWR0aCsnIiBoZWlnaHQ9IicraGVpZ2h0KyciIGlkPSInK3RoaXMubW92aWVJZCsnIiBhbGlnbj0ibWlkZGxlIj48cGFyYW0gbmFtZT0iYWxsb3dTY3JpcHRBY2Nlc3MiIHZhbHVlPSJhbHdheXMiIC8+PHBhcmFtIG5hbWU9ImFsbG93RnVsbFNjcmVlbiIgdmFsdWU9ImZhbHNlIiAvPjxwYXJhbSBuYW1lPSJtb3ZpZSIgdmFsdWU9IicrWmVyb0NsaXBib2FyZF9UYWJsZVRvb2xzLm1vdmllUGF0aCsnIiAvPjxwYXJhbSBuYW1lPSJsb29wIiB2YWx1ZT0iZmFsc2UiIC8+PHBhcmFtIG5hbWU9Im1lbnUiIHZhbHVlPSJmYWxzZSIgLz48cGFyYW0gbmFtZT0icXVhbGl0eSIgdmFsdWU9ImJlc3QiIC8+PHBhcmFtIG5hbWU9ImJnY29sb3IiIHZhbHVlPSIjZmZmZmZmIiAvPjxwYXJhbSBuYW1lPSJmbGFzaHZhcnMiIHZhbHVlPSInK2ZsYXNodmFycysnIi8+PHBhcmFtIG5hbWU9Indtb2RlIiB2YWx1ZT0idHJhbnNwYXJlbnQiLz48L29iamVjdD4nOwoJCX0KCQllbHNlIHsKCQkJLy8gYWxsIG90aGVyIGJyb3dzZXJzIGdldCBhbiBFTUJFRCB0YWcKCQkJaHRtbCArPSAnPGVtYmVkIGlkPSInK3RoaXMubW92aWVJZCsnIiBzcmM9IicrWmVyb0NsaXBib2FyZF9UYWJsZVRvb2xzLm1vdmllUGF0aCsnIiBsb29wPSJmYWxzZSIgbWVudT0iZmFsc2UiIHF1YWxpdHk9ImJlc3QiIGJnY29sb3I9IiNmZmZmZmYiIHdpZHRoPSInK3dpZHRoKyciIGhlaWdodD0iJytoZWlnaHQrJyIgbmFtZT0iJyt0aGlzLm1vdmllSWQrJyIgYWxpZ249Im1pZGRsZSIgYWxsb3dTY3JpcHRBY2Nlc3M9ImFsd2F5cyIgYWxsb3dGdWxsU2NyZWVuPSJmYWxzZSIgdHlwZT0iYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giIHBsdWdpbnNwYWdlPSJodHRwOi8vd3d3Lm1hY3JvbWVkaWEuY29tL2dvL2dldGZsYXNocGxheWVyIiBmbGFzaHZhcnM9IicrZmxhc2h2YXJzKyciIHdtb2RlPSJ0cmFuc3BhcmVudCIgLz4nOwoJCX0KCQlyZXR1cm4gaHRtbDsKCX0sCgoJaGlkZTogZnVuY3Rpb24oKSB7CgkJLy8gdGVtcG9yYXJpbHkgaGlkZSBmbG9hdGVyIG9mZnNjcmVlbgoJCWlmICh0aGlzLmRpdikgewoJCQl0aGlzLmRpdi5zdHlsZS5sZWZ0ID0gJy0yMDAwcHgnOwoJCX0KCX0sCgoJc2hvdzogZnVuY3Rpb24oKSB7CgkJLy8gc2hvdyBvdXJzZWx2ZXMgYWZ0ZXIgYSBjYWxsIHRvIGhpZGUoKQoJCXRoaXMucmVwb3NpdGlvbigpOwoJfSwKCglkZXN0cm95OiBmdW5jdGlvbigpIHsKCQkvLyBkZXN0cm95IGNvbnRyb2wgYW5kIGZsb2F0ZXIKCQl2YXIgdGhhdCA9IHRoaXM7CgoJCWlmICh0aGlzLmRvbUVsZW1lbnQgJiYgdGhpcy5kaXYpIHsKCQkJJCh0aGlzLmRpdikucmVtb3ZlKCk7CgoJCQl0aGlzLmRvbUVsZW1lbnQgPSBudWxsOwoJCQl0aGlzLmRpdiA9IG51bGw7CgoJCQkkLmVhY2goIFplcm9DbGlwYm9hcmRfVGFibGVUb29scy5jbGllbnRzLCBmdW5jdGlvbiAoIGlkLCBjbGllbnQgKSB7CgkJCQlpZiAoIGNsaWVudCA9PT0gdGhhdCApIHsKCQkJCQlkZWxldGUgWmVyb0NsaXBib2FyZF9UYWJsZVRvb2xzLmNsaWVudHNbIGlkIF07CgkJCQl9CgkJCX0gKTsKCQl9Cgl9LAoKCXJlcG9zaXRpb246IGZ1bmN0aW9uKGVsZW0pIHsKCQkvLyByZXBvc2l0aW9uIG91ciBmbG9hdGluZyBkaXYsIG9wdGlvbmFsbHkgdG8gbmV3IGNvbnRhaW5lcgoJCS8vIHdhcm5pbmc6IGNvbnRhaW5lciBDQU5OT1QgY2hhbmdlIHNpemUsIG9ubHkgcG9zaXRpb24KCQlpZiAoZWxlbSkgewoJCQl0aGlzLmRvbUVsZW1lbnQgPSBaZXJvQ2xpcGJvYXJkX1RhYmxlVG9vbHMuJChlbGVtKTsKCQkJaWYgKCF0aGlzLmRvbUVsZW1lbnQpIHsKCQkJCXRoaXMuaGlkZSgpOwoJCQl9CgkJfQoKCQlpZiAodGhpcy5kb21FbGVtZW50ICYmIHRoaXMuZGl2KSB7CgkJCXZhciBib3ggPSBaZXJvQ2xpcGJvYXJkX1RhYmxlVG9vbHMuZ2V0RE9NT2JqZWN0UG9zaXRpb24odGhpcy5kb21FbGVtZW50KTsKCQkJdmFyIHN0eWxlID0gdGhpcy5kaXYuc3R5bGU7CgkJCXN0eWxlLmxlZnQgPSAnJyArIGJveC5sZWZ0ICsgJ3B4JzsKCQkJc3R5bGUudG9wID0gJycgKyBib3gudG9wICsgJ3B4JzsKCQl9Cgl9LAoKCWNsZWFyVGV4dDogZnVuY3Rpb24oKSB7CgkJLy8gY2xlYXIgdGhlIHRleHQgdG8gYmUgY29weSAvIHNhdmVkCgkJdGhpcy5jbGlwVGV4dCA9ICcnOwoJCWlmICh0aGlzLnJlYWR5KSB7CgkJCXRoaXMubW92aWUuY2xlYXJUZXh0KCk7CgkJfQoJfSwKCglhcHBlbmRUZXh0OiBmdW5jdGlvbihuZXdUZXh0KSB7CgkJLy8gYXBwZW5kIHRleHQgdG8gdGhhdCB3aGljaCBpcyB0byBiZSBjb3BpZWQgLyBzYXZlZAoJCXRoaXMuY2xpcFRleHQgKz0gbmV3VGV4dDsKCQlpZiAodGhpcy5yZWFkeSkgeyB0aGlzLm1vdmllLmFwcGVuZFRleHQobmV3VGV4dCkgO30KCX0sCgoJc2V0VGV4dDogZnVuY3Rpb24obmV3VGV4dCkgewoJCS8vIHNldCB0ZXh0IHRvIGJlIGNvcGllZCB0byBiZSBjb3BpZWQgLyBzYXZlZAoJCXRoaXMuY2xpcFRleHQgPSBuZXdUZXh0OwoJCWlmICh0aGlzLnJlYWR5KSB7IHRoaXMubW92aWUuc2V0VGV4dChuZXdUZXh0KSA7fQoJfSwKCglzZXRGaWxlTmFtZTogZnVuY3Rpb24obmV3VGV4dCkgewoJCS8vIHNldCB0aGUgZmlsZSBuYW1lCgkJdGhpcy5maWxlTmFtZSA9IG5ld1RleHQ7CgkJaWYgKHRoaXMucmVhZHkpIHsKCQkJdGhpcy5tb3ZpZS5zZXRGaWxlTmFtZShuZXdUZXh0KTsKCQl9Cgl9LAoKCXNldFNoZWV0RGF0YTogZnVuY3Rpb24oZGF0YSkgewoJCS8vIHNldCB0aGUgeGxzeCBzaGVldCBkYXRhCgkJaWYgKHRoaXMucmVhZHkpIHsKCQkJdGhpcy5tb3ZpZS5zZXRTaGVldERhdGEoIEpTT04uc3RyaW5naWZ5KCBkYXRhICkgKTsKCQl9Cgl9LAoKCXNldEFjdGlvbjogZnVuY3Rpb24obmV3VGV4dCkgewoJCS8vIHNldCBhY3Rpb24gKHNhdmUgb3IgY29weSkKCQl0aGlzLmFjdGlvbiA9IG5ld1RleHQ7CgkJaWYgKHRoaXMucmVhZHkpIHsKCQkJdGhpcy5tb3ZpZS5zZXRBY3Rpb24obmV3VGV4dCk7CgkJfQoJfSwKCglhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbihldmVudE5hbWUsIGZ1bmMpIHsKCQkvLyBhZGQgdXNlciBldmVudCBsaXN0ZW5lciBmb3IgZXZlbnQKCQkvLyBldmVudCB0eXBlczogbG9hZCwgcXVldWVTdGFydCwgZmlsZVN0YXJ0LCBmaWxlQ29tcGxldGUsIHF1ZXVlQ29tcGxldGUsIHByb2dyZXNzLCBlcnJvciwgY2FuY2VsCgkJZXZlbnROYW1lID0gZXZlbnROYW1lLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9eb24vLCAnJyk7CgkJaWYgKCF0aGlzLmhhbmRsZXJzW2V2ZW50TmFtZV0pIHsKCQkJdGhpcy5oYW5kbGVyc1tldmVudE5hbWVdID0gW107CgkJfQoJCXRoaXMuaGFuZGxlcnNbZXZlbnROYW1lXS5wdXNoKGZ1bmMpOwoJfSwKCglzZXRIYW5kQ3Vyc29yOiBmdW5jdGlvbihlbmFibGVkKSB7CgkJLy8gZW5hYmxlIGhhbmQgY3Vyc29yICh0cnVlKSwgb3IgZGVmYXVsdCBhcnJvdyBjdXJzb3IgKGZhbHNlKQoJCXRoaXMuaGFuZEN1cnNvckVuYWJsZWQgPSBlbmFibGVkOwoJCWlmICh0aGlzLnJlYWR5KSB7CgkJCXRoaXMubW92aWUuc2V0SGFuZEN1cnNvcihlbmFibGVkKTsKCQl9Cgl9LAoKCXNldENTU0VmZmVjdHM6IGZ1bmN0aW9uKGVuYWJsZWQpIHsKCQkvLyBlbmFibGUgb3IgZGlzYWJsZSBDU1MgZWZmZWN0cyBvbiBET00gY29udGFpbmVyCgkJdGhpcy5jc3NFZmZlY3RzID0gISFlbmFibGVkOwoJfSwKCglyZWNlaXZlRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50TmFtZSwgYXJncykgewoJCXZhciBzZWxmOwoKCQkvLyByZWNlaXZlIGV2ZW50IGZyb20gZmxhc2gKCQlldmVudE5hbWUgPSBldmVudE5hbWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL15vbi8sICcnKTsKCgkJLy8gc3BlY2lhbCBiZWhhdmlvciBmb3IgY2VydGFpbiBldmVudHMKCQlzd2l0Y2ggKGV2ZW50TmFtZSkgewoJCQljYXNlICdsb2FkJzoKCQkJCS8vIG1vdmllIGNsYWltcyBpdCBpcyByZWFkeSwgYnV0IGluIElFIHRoaXMgaXNuJ3QgYWx3YXlzIHRoZSBjYXNlLi4uCgkJCQkvLyBidWcgZml4OiBDYW5ub3QgZXh0ZW5kIEVNQkVEIERPTSBlbGVtZW50cyBpbiBGaXJlZm94LCBtdXN0IHVzZSB0cmFkaXRpb25hbCBmdW5jdGlvbgoJCQkJdGhpcy5tb3ZpZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMubW92aWVJZCk7CgkJCQlpZiAoIXRoaXMubW92aWUpIHsKCQkJCQlzZWxmID0gdGhpczsKCQkJCQlzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsgc2VsZi5yZWNlaXZlRXZlbnQoJ2xvYWQnLCBudWxsKTsgfSwgMSApOwoJCQkJCXJldHVybjsKCQkJCX0KCgkJCQkvLyBmaXJlZm94IG9uIHBjIG5lZWRzIGEgImtpY2siIGluIG9yZGVyIHRvIHNldCB0aGVzZSBpbiBjZXJ0YWluIGNhc2VzCgkJCQlpZiAoIXRoaXMucmVhZHkgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvRmlyZWZveC8pICYmIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1dpbmRvd3MvKSkgewoJCQkJCXNlbGYgPSB0aGlzOwoJCQkJCXNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgeyBzZWxmLnJlY2VpdmVFdmVudCgnbG9hZCcsIG51bGwpOyB9LCAxMDAgKTsKCQkJCQl0aGlzLnJlYWR5ID0gdHJ1ZTsKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJdGhpcy5yZWFkeSA9IHRydWU7CgkJCQl0aGlzLm1vdmllLmNsZWFyVGV4dCgpOwoJCQkJdGhpcy5tb3ZpZS5hcHBlbmRUZXh0KCB0aGlzLmNsaXBUZXh0ICk7CgkJCQl0aGlzLm1vdmllLnNldEZpbGVOYW1lKCB0aGlzLmZpbGVOYW1lICk7CgkJCQl0aGlzLm1vdmllLnNldEFjdGlvbiggdGhpcy5hY3Rpb24gKTsKCQkJCXRoaXMubW92aWUuc2V0SGFuZEN1cnNvciggdGhpcy5oYW5kQ3Vyc29yRW5hYmxlZCApOwoJCQkJYnJlYWs7CgoJCQljYXNlICdtb3VzZW92ZXInOgoJCQkJaWYgKHRoaXMuZG9tRWxlbWVudCAmJiB0aGlzLmNzc0VmZmVjdHMpIHsKCQkJCQkvL3RoaXMuZG9tRWxlbWVudC5hZGRDbGFzcygnaG92ZXInKTsKCQkJCQlpZiAodGhpcy5yZWNvdmVyQWN0aXZlKSB7CgkJCQkJCXRoaXMuZG9tRWxlbWVudC5hZGRDbGFzcygnYWN0aXZlJyk7CgkJCQkJfQoJCQkJfQoJCQkJYnJlYWs7CgoJCQljYXNlICdtb3VzZW91dCc6CgkJCQlpZiAodGhpcy5kb21FbGVtZW50ICYmIHRoaXMuY3NzRWZmZWN0cykgewoJCQkJCXRoaXMucmVjb3ZlckFjdGl2ZSA9IGZhbHNlOwoJCQkJCWlmICh0aGlzLmRvbUVsZW1lbnQuaGFzQ2xhc3MoJ2FjdGl2ZScpKSB7CgkJCQkJCXRoaXMuZG9tRWxlbWVudC5yZW1vdmVDbGFzcygnYWN0aXZlJyk7CgkJCQkJCXRoaXMucmVjb3ZlckFjdGl2ZSA9IHRydWU7CgkJCQkJfQoJCQkJCS8vdGhpcy5kb21FbGVtZW50LnJlbW92ZUNsYXNzKCdob3ZlcicpOwoJCQkJfQoJCQkJYnJlYWs7CgoJCQljYXNlICdtb3VzZWRvd24nOgoJCQkJaWYgKHRoaXMuZG9tRWxlbWVudCAmJiB0aGlzLmNzc0VmZmVjdHMpIHsKCQkJCQl0aGlzLmRvbUVsZW1lbnQuYWRkQ2xhc3MoJ2FjdGl2ZScpOwoJCQkJfQoJCQkJYnJlYWs7CgoJCQljYXNlICdtb3VzZXVwJzoKCQkJCWlmICh0aGlzLmRvbUVsZW1lbnQgJiYgdGhpcy5jc3NFZmZlY3RzKSB7CgkJCQkJdGhpcy5kb21FbGVtZW50LnJlbW92ZUNsYXNzKCdhY3RpdmUnKTsKCQkJCQl0aGlzLnJlY292ZXJBY3RpdmUgPSBmYWxzZTsKCQkJCX0KCQkJCWJyZWFrOwoJCX0gLy8gc3dpdGNoIGV2ZW50TmFtZQoKCQlpZiAodGhpcy5oYW5kbGVyc1tldmVudE5hbWVdKSB7CgkJCWZvciAodmFyIGlkeCA9IDAsIGxlbiA9IHRoaXMuaGFuZGxlcnNbZXZlbnROYW1lXS5sZW5ndGg7IGlkeCA8IGxlbjsgaWR4KyspIHsKCQkJCXZhciBmdW5jID0gdGhpcy5oYW5kbGVyc1tldmVudE5hbWVdW2lkeF07CgoJCQkJaWYgKHR5cGVvZihmdW5jKSA9PSAnZnVuY3Rpb24nKSB7CgkJCQkJLy8gYWN0dWFsIGZ1bmN0aW9uIHJlZmVyZW5jZQoJCQkJCWZ1bmModGhpcywgYXJncyk7CgkJCQl9CgkJCQllbHNlIGlmICgodHlwZW9mKGZ1bmMpID09ICdvYmplY3QnKSAmJiAoZnVuYy5sZW5ndGggPT0gMikpIHsKCQkJCQkvLyBQSFAgc3R5bGUgb2JqZWN0ICsgbWV0aG9kLCBpLmUuIFtteU9iamVjdCwgJ215TWV0aG9kJ10KCQkJCQlmdW5jWzBdWyBmdW5jWzFdIF0odGhpcywgYXJncyk7CgkJCQl9CgkJCQllbHNlIGlmICh0eXBlb2YoZnVuYykgPT0gJ3N0cmluZycpIHsKCQkJCQkvLyBuYW1lIG9mIGZ1bmN0aW9uCgkJCQkJd2luZG93W2Z1bmNdKHRoaXMsIGFyZ3MpOwoJCQkJfQoJCQl9IC8vIGZvcmVhY2ggZXZlbnQgaGFuZGxlciBkZWZpbmVkCgkJfSAvLyB1c2VyIGRlZmluZWQgaGFuZGxlciBmb3IgZXZlbnQKCX0KfTsKClplcm9DbGlwYm9hcmRfVGFibGVUb29scy5oYXNGbGFzaCA9IGZ1bmN0aW9uICgpCnsKCXRyeSB7CgkJdmFyIGZvID0gbmV3IEFjdGl2ZVhPYmplY3QoJ1Nob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoJyk7CgkJaWYgKGZvKSB7CgkJCXJldHVybiB0cnVlOwoJCX0KCX0KCWNhdGNoIChlKSB7CgkJaWYgKAoJCQluYXZpZ2F0b3IubWltZVR5cGVzICYmCgkJCW5hdmlnYXRvci5taW1lVHlwZXNbJ2FwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoJ10gIT09IHVuZGVmaW5lZCAmJgoJCQluYXZpZ2F0b3IubWltZVR5cGVzWydhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCddLmVuYWJsZWRQbHVnaW4KCQkpIHsKCQkJcmV0dXJuIHRydWU7CgkJfQoJfQoKCXJldHVybiBmYWxzZTsKfTsKCi8vIEZvciB0aGUgRmxhc2ggYmluZGluZyB0byB3b3JrLCBaZXJvQ2xpcGJvYXJkX1RhYmxlVG9vbHMgbXVzdCBiZSBvbiB0aGUgZ2xvYmFsCi8vIG9iamVjdCBsaXN0CndpbmRvdy5aZXJvQ2xpcGJvYXJkX1RhYmxlVG9vbHMgPSBaZXJvQ2xpcGJvYXJkX1RhYmxlVG9vbHM7CgoKCi8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgogKiBMb2NhbCAocHJpdmF0ZSkgZnVuY3Rpb25zCiAqLwoKLyoqCiAqIElmIGEgQnV0dG9ucyBpbnN0YW5jZSBpcyBpbml0bGFpc2VkIGJlZm9yZSBpdCBpcyBwbGFjZWQgaW50byB0aGUgRE9NLCBGbGFzaAogKiB3b24ndCBiZSBhYmxlIHRvIGJpbmQgdG8gaXQsIHNvIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdCBpcyBhdmFpbGFibGUsIHRoaXMKICogbWV0aG9kIGFic3RyYWN0cyB0aGF0IG91dC4KICoKICogQHBhcmFtIHtaZXJvQ2xpcGJvYXJkfSBmbGFzaCBaZXJvQ2xpcGJvYXJkIGluc3RhbmNlCiAqIEBwYXJhbSB7alF1ZXJ5fSBub2RlICBCdXR0b24KICovCnZhciBfZ2x1ZSA9IGZ1bmN0aW9uICggZmxhc2gsIG5vZGUgKQp7Cgl2YXIgaWQgPSBub2RlLmF0dHIoJ2lkJyk7CgoJaWYgKCBub2RlLnBhcmVudHMoJ2h0bWwnKS5sZW5ndGggKSB7CgkJZmxhc2guZ2x1ZSggbm9kZVswXSwgJycgKTsKCX0KCWVsc2UgewoJCXNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHsKCQkJX2dsdWUoIGZsYXNoLCBub2RlICk7CgkJfSwgNTAwICk7Cgl9Cn07CgovKioKICogR2V0IHRoZSBzaGVldCBuYW1lIGZvciBFeGNlbCBleHBvcnRzLgogKgogKiBAcGFyYW0ge29iamVjdH0gIGNvbmZpZyAgICAgICBCdXR0b24gY29uZmlndXJhdGlvbgogKi8KdmFyIF9zaGVldG5hbWUgPSBmdW5jdGlvbiAoIGNvbmZpZyApCnsKCXZhciBzaGVldE5hbWUgPSAnU2hlZXQxJzsKCglpZiAoIGNvbmZpZy5zaGVldE5hbWUgKSB7CgkJc2hlZXROYW1lID0gY29uZmlnLnNoZWV0TmFtZS5yZXBsYWNlKC9bXFtcXVwqXC9cXFw/XDpdL2csICcnKTsKCX0KCglyZXR1cm4gc2hlZXROYW1lOwp9OwoKLyoqCiAqIFNldCB0aGUgZmxhc2ggdGV4dC4gVGhpcyBoYXMgdG8gYmUgYnJva2VuIHVwIGludG8gY2h1bmtzIGFzIHRoZSBKYXZhc2NyaXB0IC8KICogRmxhc2ggYnJpZGdlIGhhcyBhIHNpemUgbGltaXQuIFRoZXJlIGlzIG5vIGluZGljYXRpb24gaW4gdGhlIEZsYXNoCiAqIGRvY3VtZW50YXRpb24gd2hhdCB0aGlzIGlzLCBhbmQgaXQgcHJvYmFibHkgZGVwZW5kcyB1cG9uIHRoZSBicm93c2VyLgogKiBFeHBlcmltZW50YXRpb24gc2hvd3MgdGhhdCB0aGUgcG9pbnQgaXMgYXJvdW5kIDUwayB3aGVuIGRhdGEgc3RhcnRzIHRvIGdldAogKiBsb3N0LCBzbyBhbiA4SyBsaW1pdCB1c2VkIGhlcmUgaXMgc2FmZS4KICoKICogQHBhcmFtIHtaZXJvQ2xpcGJvYXJkfSBmbGFzaCBaZXJvQ2xpcGJvYXJkIGluc3RhbmNlCiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgZGF0YSAgRGF0YSB0byBzZW5kIHRvIEZsYXNoCiAqLwp2YXIgX3NldFRleHQgPSBmdW5jdGlvbiAoIGZsYXNoLCBkYXRhICkKewoJdmFyIHBhcnRzID0gZGF0YS5tYXRjaCgvW1xzXFNdezEsODE5Mn0vZykgfHwgW107CgoJZmxhc2guY2xlYXJUZXh0KCk7Cglmb3IgKCB2YXIgaT0wLCBsZW49cGFydHMubGVuZ3RoIDsgaTxsZW4gOyBpKysgKQoJewoJCWZsYXNoLmFwcGVuZFRleHQoIHBhcnRzW2ldICk7Cgl9Cn07CgovKioKICogR2V0IHRoZSBuZXdsaW5lIGNoYXJhY3RlcihzKQogKgogKiBAcGFyYW0ge29iamVjdH0gIGNvbmZpZyBCdXR0b24gY29uZmlndXJhdGlvbgogKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICBOZXdsaW5lIGNoYXJhY3RlcgogKi8KdmFyIF9uZXdMaW5lID0gZnVuY3Rpb24gKCBjb25maWcgKQp7CglyZXR1cm4gY29uZmlnLm5ld2xpbmUgPwoJCWNvbmZpZy5uZXdsaW5lIDoKCQluYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9XaW5kb3dzLykgPwoJCQknXHJcbicgOgoJCQknXG4nOwp9OwoKLyoqCiAqIENvbWJpbmUgdGhlIGRhdGEgZnJvbSB0aGUgYGJ1dHRvbnMuZXhwb3J0RGF0YWAgbWV0aG9kIGludG8gYSBzdHJpbmcgdGhhdAogKiB3aWxsIGJlIHVzZWQgaW4gdGhlIGV4cG9ydCBmaWxlLgogKgogKiBAcGFyYW0gIHtEYXRhVGFibGUuQXBpfSBkdCAgICAgRGF0YVRhYmxlcyBBUEkgaW5zdGFuY2UKICogQHBhcmFtICB7b2JqZWN0fSAgICAgICAgY29uZmlnIEJ1dHRvbiBjb25maWd1cmF0aW9uCiAqIEByZXR1cm4ge29iamVjdH0gICAgICAgICAgICAgICBUaGUgZGF0YSB0byBleHBvcnQKICovCnZhciBfZXhwb3J0RGF0YSA9IGZ1bmN0aW9uICggZHQsIGNvbmZpZyApCnsKCXZhciBuZXdMaW5lID0gX25ld0xpbmUoIGNvbmZpZyApOwoJdmFyIGRhdGEgPSBkdC5idXR0b25zLmV4cG9ydERhdGEoIGNvbmZpZy5leHBvcnRPcHRpb25zICk7Cgl2YXIgYm91bmRhcnkgPSBjb25maWcuZmllbGRCb3VuZGFyeTsKCXZhciBzZXBhcmF0b3IgPSBjb25maWcuZmllbGRTZXBhcmF0b3I7Cgl2YXIgcmVCb3VuZGFyeSA9IG5ldyBSZWdFeHAoIGJvdW5kYXJ5LCAnZycgKTsKCXZhciBlc2NhcGVDaGFyID0gY29uZmlnLmVzY2FwZUNoYXIgIT09IHVuZGVmaW5lZCA/CgkJY29uZmlnLmVzY2FwZUNoYXIgOgoJCSdcXCc7Cgl2YXIgam9pbiA9IGZ1bmN0aW9uICggYSApIHsKCQl2YXIgcyA9ICcnOwoKCQkvLyBJZiB0aGVyZSBpcyBhIGZpZWxkIGJvdW5kYXJ5LCB0aGVuIHdlIG1pZ2h0IG5lZWQgdG8gZXNjYXBlIGl0IGluCgkJLy8gdGhlIHNvdXJjZSBkYXRhCgkJZm9yICggdmFyIGk9MCwgaWVuPWEubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCWlmICggaSA+IDAgKSB7CgkJCQlzICs9IHNlcGFyYXRvcjsKCQkJfQoKCQkJcyArPSBib3VuZGFyeSA/CgkJCQlib3VuZGFyeSArICgnJyArIGFbaV0pLnJlcGxhY2UoIHJlQm91bmRhcnksIGVzY2FwZUNoYXIrYm91bmRhcnkgKSArIGJvdW5kYXJ5IDoKCQkJCWFbaV07CgkJfQoKCQlyZXR1cm4gczsKCX07CgoJdmFyIGhlYWRlciA9IGNvbmZpZy5oZWFkZXIgPyBqb2luKCBkYXRhLmhlYWRlciApK25ld0xpbmUgOiAnJzsKCXZhciBmb290ZXIgPSBjb25maWcuZm9vdGVyICYmIGRhdGEuZm9vdGVyID8gbmV3TGluZStqb2luKCBkYXRhLmZvb3RlciApIDogJyc7Cgl2YXIgYm9keSA9IFtdOwoKCWZvciAoIHZhciBpPTAsIGllbj1kYXRhLmJvZHkubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJYm9keS5wdXNoKCBqb2luKCBkYXRhLmJvZHlbaV0gKSApOwoJfQoKCXJldHVybiB7CgkJc3RyOiBoZWFkZXIgKyBib2R5LmpvaW4oIG5ld0xpbmUgKSArIGZvb3RlciwKCQlyb3dzOiBib2R5Lmxlbmd0aAoJfTsKfTsKCgovLyBCYXNpYyBpbml0aWFsaXNhdGlvbiBmb3IgdGhlIGJ1dHRvbnMgaXMgY29tbW9uIGJldHdlZW4gdGhlbQp2YXIgZmxhc2hCdXR0b24gPSB7CglhdmFpbGFibGU6IGZ1bmN0aW9uICgpIHsKCQlyZXR1cm4gWmVyb0NsaXBib2FyZF9UYWJsZVRvb2xzLmhhc0ZsYXNoKCk7Cgl9LAoKCWluaXQ6IGZ1bmN0aW9uICggZHQsIGJ1dHRvbiwgY29uZmlnICkgewoJCS8vIEluc2VydCB0aGUgRmxhc2ggbW92aWUKCQlaZXJvQ2xpcGJvYXJkX1RhYmxlVG9vbHMubW92aWVQYXRoID0gRGF0YVRhYmxlLkJ1dHRvbnMuc3dmUGF0aDsKCQl2YXIgZmxhc2ggPSBuZXcgWmVyb0NsaXBib2FyZF9UYWJsZVRvb2xzLkNsaWVudCgpOwoKCQlmbGFzaC5zZXRIYW5kQ3Vyc29yKCB0cnVlICk7CgkJZmxhc2guYWRkRXZlbnRMaXN0ZW5lcignbW91c2VEb3duJywgZnVuY3Rpb24oY2xpZW50KSB7CgkJCWNvbmZpZy5fZnJvbUZsYXNoID0gdHJ1ZTsKCQkJZHQuYnV0dG9uKCBidXR0b25bMF0gKS50cmlnZ2VyKCk7CgkJCWNvbmZpZy5fZnJvbUZsYXNoID0gZmFsc2U7CgkJfSApOwoKCQlfZ2x1ZSggZmxhc2gsIGJ1dHRvbiApOwoKCQljb25maWcuX2ZsYXNoID0gZmxhc2g7Cgl9LAoKCWRlc3Ryb3k6IGZ1bmN0aW9uICggZHQsIGJ1dHRvbiwgY29uZmlnICkgewoJCWNvbmZpZy5fZmxhc2guZGVzdHJveSgpOwoJfSwKCglmaWVsZFNlcGFyYXRvcjogJywnLAoKCWZpZWxkQm91bmRhcnk6ICciJywKCglleHBvcnRPcHRpb25zOiB7fSwKCgl0aXRsZTogJyonLAoKCW1lc3NhZ2VUb3A6ICcqJywKCgltZXNzYWdlQm90dG9tOiAnKicsCgoJZmlsZW5hbWU6ICcqJywKCglleHRlbnNpb246ICcuY3N2JywKCgloZWFkZXI6IHRydWUsCgoJZm9vdGVyOiBmYWxzZQp9OwoKCi8qKgogKiBDb252ZXJ0IGZyb20gbnVtZXJpYyBwb3NpdGlvbiB0byBsZXR0ZXIgZm9yIGNvbHVtbiBuYW1lcyBpbiBFeGNlbAogKiBAcGFyYW0gIHtpbnR9IG4gQ29sdW1uIG51bWJlcgogKiBAcmV0dXJuIHtzdHJpbmd9IENvbHVtbiBsZXR0ZXIocykgbmFtZQogKi8KZnVuY3Rpb24gY3JlYXRlQ2VsbFBvcyggbiApewoJdmFyIG9yZEEgPSAnQScuY2hhckNvZGVBdCgwKTsKCXZhciBvcmRaID0gJ1onLmNoYXJDb2RlQXQoMCk7Cgl2YXIgbGVuID0gb3JkWiAtIG9yZEEgKyAxOwoJdmFyIHMgPSAiIjsKCgl3aGlsZSggbiA+PSAwICkgewoJCXMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKG4gJSBsZW4gKyBvcmRBKSArIHM7CgkJbiA9IE1hdGguZmxvb3IobiAvIGxlbikgLSAxOwoJfQoKCXJldHVybiBzOwp9CgovKioKICogQ3JlYXRlIGFuIFhNTCBub2RlIGFuZCBhZGQgYW55IGNoaWxkcmVuLCBhdHRyaWJ1dGVzLCBldGMgd2l0aG91dCBuZWVkaW5nIHRvCiAqIGJlIHZlcmJvc2UgaW4gdGhlIERPTS4KICoKICogQHBhcmFtICB7b2JqZWN0fSBkb2MgICAgICBYTUwgZG9jdW1lbnQKICogQHBhcmFtICB7c3RyaW5nfSBub2RlTmFtZSBOb2RlIG5hbWUKICogQHBhcmFtICB7b2JqZWN0fSBvcHRzICAgICBPcHRpb25zIC0gY2FuIGJlIGBhdHRyYCAoYXR0cmlidXRlcyksIGBjaGlsZHJlbmAKICogICAoY2hpbGQgbm9kZXMpIGFuZCBgdGV4dGAgKHRleHQgY29udGVudCkKICogQHJldHVybiB7bm9kZX0gICAgICAgICAgICBDcmVhdGVkIG5vZGUKICovCmZ1bmN0aW9uIF9jcmVhdGVOb2RlKCBkb2MsIG5vZGVOYW1lLCBvcHRzICl7Cgl2YXIgdGVtcE5vZGUgPSBkb2MuY3JlYXRlRWxlbWVudCggbm9kZU5hbWUgKTsKCglpZiAoIG9wdHMgKSB7CgkJaWYgKCBvcHRzLmF0dHIgKSB7CgkJCSQodGVtcE5vZGUpLmF0dHIoIG9wdHMuYXR0ciApOwoJCX0KCgkJaWYgKCBvcHRzLmNoaWxkcmVuICkgewoJCQkkLmVhY2goIG9wdHMuY2hpbGRyZW4sIGZ1bmN0aW9uICgga2V5LCB2YWx1ZSApIHsKCQkJCXRlbXBOb2RlLmFwcGVuZENoaWxkKCB2YWx1ZSApOwoJCQl9ICk7CgkJfQoKCQlpZiAoIG9wdHMudGV4dCAhPT0gbnVsbCAmJiBvcHRzLnRleHQgIT09IHVuZGVmaW5lZCApIHsKCQkJdGVtcE5vZGUuYXBwZW5kQ2hpbGQoIGRvYy5jcmVhdGVUZXh0Tm9kZSggb3B0cy50ZXh0ICkgKTsKCQl9Cgl9CgoJcmV0dXJuIHRlbXBOb2RlOwp9CgovKioKICogR2V0IHRoZSB3aWR0aCBmb3IgYW4gRXhjZWwgY29sdW1uIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZiB0aGF0IGNvbHVtbgogKiBAcGFyYW0gIHtvYmplY3R9IGRhdGEgRGF0YSBmb3IgZXhwb3J0CiAqIEBwYXJhbSAge2ludH0gICAgY29sICBDb2x1bW4gaW5kZXgKICogQHJldHVybiB7aW50fSAgICAgICAgIENvbHVtbiB3aWR0aAogKi8KZnVuY3Rpb24gX2V4Y2VsQ29sV2lkdGgoIGRhdGEsIGNvbCApIHsKCXZhciBtYXggPSBkYXRhLmhlYWRlcltjb2xdLmxlbmd0aDsKCXZhciBsZW4sIGxpbmVTcGxpdCwgc3RyOwoKCWlmICggZGF0YS5mb290ZXIgJiYgZGF0YS5mb290ZXJbY29sXS5sZW5ndGggPiBtYXggKSB7CgkJbWF4ID0gZGF0YS5mb290ZXJbY29sXS5sZW5ndGg7Cgl9CgoJZm9yICggdmFyIGk9MCwgaWVuPWRhdGEuYm9keS5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQl2YXIgcG9pbnQgPSBkYXRhLmJvZHlbaV1bY29sXTsKCQlzdHIgPSBwb2ludCAhPT0gbnVsbCAmJiBwb2ludCAhPT0gdW5kZWZpbmVkID8KCQkJcG9pbnQudG9TdHJpbmcoKSA6CgkJCScnOwoKCQkvLyBJZiB0aGVyZSBpcyBhIG5ld2xpbmUgY2hhcmFjdGVyLCB3b3Jrb3V0IHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uCgkJLy8gYmFzZWQgb24gdGhlIGxvbmdlc3QgbGluZSBpbiB0aGUgc3RyaW5nCgkJaWYgKCBzdHIuaW5kZXhPZignXG4nKSAhPT0gLTEgKSB7CgkJCWxpbmVTcGxpdCA9IHN0ci5zcGxpdCgnXG4nKTsKCQkJbGluZVNwbGl0LnNvcnQoIGZ1bmN0aW9uIChhLCBiKSB7CgkJCQlyZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDsKCQkJfSApOwoKCQkJbGVuID0gbGluZVNwbGl0WzBdLmxlbmd0aDsKCQl9CgkJZWxzZSB7CgkJCWxlbiA9IHN0ci5sZW5ndGg7CgkJfQoKCQlpZiAoIGxlbiA+IG1heCApIHsKCQkJbWF4ID0gbGVuOwoJCX0KCgkJLy8gTWF4IHdpZHRoIHJhdGhlciB0aGFuIGhhdmluZyBwb3RlbnRpYWxseSBtYXNzaXZlIGNvbHVtbiB3aWR0aHMKCQlpZiAoIG1heCA+IDQwICkgewoJCQlyZXR1cm4gNTI7IC8vIDQwICogMS4zCgkJfQoJfQoKCW1heCAqPSAxLjM7CgoJLy8gQW5kIGEgbWluIHdpZHRoCglyZXR1cm4gbWF4ID4gNiA/IG1heCA6IDY7Cn0KCiAgdmFyIF9zZXJpYWxpc2VyID0gIiI7CiAgICBpZiAodHlwZW9mIHdpbmRvdy5YTUxTZXJpYWxpemVyID09PSAndW5kZWZpbmVkJykgewogICAgICAgIF9zZXJpYWxpc2VyID0gbmV3IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5zZXJpYWxpemVUb1N0cmluZyA9IGZ1bmN0aW9uIChpbnB1dCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0LnhtbAogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgICAgX3NlcmlhbGlzZXIgPSAgbmV3IFhNTFNlcmlhbGl6ZXIoKTsKICAgIH0KCiAgICB2YXIgX2llRXhjZWw7CgoKLyoqCiAqIENvbnZlcnQgWE1MIGRvY3VtZW50cyBpbiBhbiBvYmplY3QgdG8gc3RyaW5ncwogKiBAcGFyYW0gIHtvYmplY3R9IG9iaiBYTFNYIGRvY3VtZW50IG9iamVjdAogKi8KZnVuY3Rpb24gX3hsc3hUb1N0cmluZ3MoIG9iaiApIHsKCWlmICggX2llRXhjZWwgPT09IHVuZGVmaW5lZCApIHsKCQkvLyBEZXRlY3QgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBJRSdzIF9hd2Z1bF8gc2VyaWFsaXNlciBieSBzZWVpbmcgaWYgaXQKCQkvLyBkcm9wIGF0dHJpYnV0ZXMKCQlfaWVFeGNlbCA9IF9zZXJpYWxpc2VyCgkJCS5zZXJpYWxpemVUb1N0cmluZygKCQkJCSQucGFyc2VYTUwoIGV4Y2VsU3RyaW5nc1sneGwvd29ya3NoZWV0cy9zaGVldDEueG1sJ10gKQoJCQkpCgkJCS5pbmRleE9mKCAneG1sbnM6cicgKSA9PT0gLTE7Cgl9CgoJJC5lYWNoKCBvYmosIGZ1bmN0aW9uICggbmFtZSwgdmFsICkgewoJCWlmICggJC5pc1BsYWluT2JqZWN0KCB2YWwgKSApIHsKCQkJX3hsc3hUb1N0cmluZ3MoIHZhbCApOwoJCX0KCQllbHNlIHsKCQkJaWYgKCBfaWVFeGNlbCApIHsKCQkJCS8vIElFJ3MgWE1MIHNlcmlhbGlzZXIgd2lsbCBkcm9wIHNvbWUgbmFtZSBzcGFjZSBhdHRyaWJ1dGVzIGZyb20KCQkJCS8vIGZyb20gdGhlIHJvb3Qgbm9kZSwgc28gd2UgbmVlZCB0byBzYXZlIHRoZW0uIERvIHRoaXMgYnkKCQkJCS8vIHJlcGxhY2luZyB0aGUgbmFtZXNwYWNlIG5vZGVzIHdpdGggYSByZWd1bGFyIGF0dHJpYnV0ZSB0aGF0CgkJCQkvLyB3ZSBjb252ZXJ0IGJhY2sgd2hlbiBzZXJpYWxpc2VkLiBFZGdlIGRvZXMgbm90IGhhdmUgdGhpcwoJCQkJLy8gaXNzdWUKCQkJCXZhciB3b3Jrc2hlZXQgPSB2YWwuY2hpbGROb2Rlc1swXTsKCQkJCXZhciBpLCBpZW47CgkJCQl2YXIgYXR0cnMgPSBbXTsKCgkJCQlmb3IgKCBpPXdvcmtzaGVldC5hdHRyaWJ1dGVzLmxlbmd0aC0xIDsgaT49MCA7IGktLSApIHsKCQkJCQl2YXIgYXR0ck5hbWUgPSB3b3Jrc2hlZXQuYXR0cmlidXRlc1tpXS5ub2RlTmFtZTsKCQkJCQl2YXIgYXR0clZhbHVlID0gd29ya3NoZWV0LmF0dHJpYnV0ZXNbaV0ubm9kZVZhbHVlOwoKCQkJCQlpZiAoIGF0dHJOYW1lLmluZGV4T2YoICc6JyApICE9PSAtMSApIHsKCQkJCQkJYXR0cnMucHVzaCggeyBuYW1lOiBhdHRyTmFtZSwgdmFsdWU6IGF0dHJWYWx1ZSB9ICk7CgoJCQkJCQl3b3Jrc2hlZXQucmVtb3ZlQXR0cmlidXRlKCBhdHRyTmFtZSApOwoJCQkJCX0KCQkJCX0KCgkJCQlmb3IgKCBpPTAsIGllbj1hdHRycy5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCQl2YXIgYXR0ciA9IHZhbC5jcmVhdGVBdHRyaWJ1dGUoIGF0dHJzW2ldLm5hbWUucmVwbGFjZSggJzonLCAnX2R0X2JfbmFtZXNwYWNlX3Rva2VuXycgKSApOwoJCQkJCWF0dHIudmFsdWUgPSBhdHRyc1tpXS52YWx1ZTsKCQkJCQl3b3Jrc2hlZXQuc2V0QXR0cmlidXRlTm9kZSggYXR0ciApOwoJCQkJfQoJCQl9CgoJCQl2YXIgc3RyID0gX3NlcmlhbGlzZXIuc2VyaWFsaXplVG9TdHJpbmcodmFsKTsKCgkJCS8vIEZpeCBJRSdzIFhNTAoJCQlpZiAoIF9pZUV4Y2VsICkgewoJCQkJLy8gSUUgZG9lc24ndCBpbmNsdWRlIHRoZSBYTUwgZGVjbGFyYXRpb24KCQkJCWlmICggc3RyLmluZGV4T2YoICc8P3htbCcgKSA9PT0gLTEgKSB7CgkJCQkJc3RyID0gJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4nK3N0cjsKCQkJCX0KCgkJCQkvLyBSZXR1cm4gbmFtZXNwYWNlIGF0dHJpYnV0ZXMgdG8gYmVpbmcgYXMgc3VjaAoJCQkJc3RyID0gc3RyLnJlcGxhY2UoIC9fZHRfYl9uYW1lc3BhY2VfdG9rZW5fL2csICc6JyApOwoJCQl9CgoJCQkvLyBTYWZhcmksIElFIGFuZCBFZGdlIHdpbGwgcHV0IGVtcHR5IG5hbWUgc3BhY2UgYXR0cmlidXRlcyBvbnRvCgkJCS8vIHZhcmlvdXMgZWxlbWVudHMgbWFraW5nIHRoZW0gdXNlbGVzcy4gVGhpcyBzdHJpcHMgdGhlbSBvdXQKCQkJc3RyID0gc3RyLnJlcGxhY2UoIC88KFtePD5dKj8pIHhtbG5zPSIiKFtePD5dKj8pPi9nLCAnPCQxICQyPicgKTsKCgkJCW9ialsgbmFtZSBdID0gc3RyOwoJCX0KCX0gKTsKfQoKLy8gRXhjZWwgLSBQcmUtZGVmaW5lZCBzdHJpbmdzIHRvIGJ1aWxkIGEgYmFzaWMgWExTWCBmaWxlCnZhciBleGNlbFN0cmluZ3MgPSB7CgkiX3JlbHMvLnJlbHMiOgoJCSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+JysKCQknPFJlbGF0aW9uc2hpcHMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcyI+JysKCQkJJzxSZWxhdGlvbnNoaXAgSWQ9InJJZDEiIFR5cGU9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiIFRhcmdldD0ieGwvd29ya2Jvb2sueG1sIi8+JysKCQknPC9SZWxhdGlvbnNoaXBzPicsCgoJInhsL19yZWxzL3dvcmtib29rLnhtbC5yZWxzIjoKCQknPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PicrCgkJJzxSZWxhdGlvbnNoaXBzIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMiPicrCgkJCSc8UmVsYXRpb25zaGlwIElkPSJySWQxIiBUeXBlPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCIgVGFyZ2V0PSJ3b3Jrc2hlZXRzL3NoZWV0MS54bWwiLz4nKwoJCQknPFJlbGF0aW9uc2hpcCBJZD0icklkMiIgVHlwZT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zdHlsZXMiIFRhcmdldD0ic3R5bGVzLnhtbCIvPicrCgkJJzwvUmVsYXRpb25zaGlwcz4nLAoKCSJbQ29udGVudF9UeXBlc10ueG1sIjoKCQknPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PicrCgkJJzxUeXBlcyB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9jb250ZW50LXR5cGVzIj4nKwoJCQknPERlZmF1bHQgRXh0ZW5zaW9uPSJ4bWwiIENvbnRlbnRUeXBlPSJhcHBsaWNhdGlvbi94bWwiIC8+JysKCQkJJzxEZWZhdWx0IEV4dGVuc2lvbj0icmVscyIgQ29udGVudFR5cGU9ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLnJlbGF0aW9uc2hpcHMreG1sIiAvPicrCgkJCSc8RGVmYXVsdCBFeHRlbnNpb249ImpwZWciIENvbnRlbnRUeXBlPSJpbWFnZS9qcGVnIiAvPicrCgkJCSc8T3ZlcnJpZGUgUGFydE5hbWU9Ii94bC93b3JrYm9vay54bWwiIENvbnRlbnRUeXBlPSJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbCIgLz4nKwoJCQknPE92ZXJyaWRlIFBhcnROYW1lPSIveGwvd29ya3NoZWV0cy9zaGVldDEueG1sIiBDb250ZW50VHlwZT0iYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwud29ya3NoZWV0K3htbCIgLz4nKwoJCQknPE92ZXJyaWRlIFBhcnROYW1lPSIveGwvc3R5bGVzLnhtbCIgQ29udGVudFR5cGU9ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnN0eWxlcyt4bWwiIC8+JysKCQknPC9UeXBlcz4nLAoKCSJ4bC93b3JrYm9vay54bWwiOgoJCSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+JysKCQknPHdvcmtib29rIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW4iIHhtbG5zOnI9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMiPicrCgkJCSc8ZmlsZVZlcnNpb24gYXBwTmFtZT0ieGwiIGxhc3RFZGl0ZWQ9IjUiIGxvd2VzdEVkaXRlZD0iNSIgcnVwQnVpbGQ9IjI0ODE2Ii8+JysKCQkJJzx3b3JrYm9va1ByIHNob3dJbmtBbm5vdGF0aW9uPSIwIiBhdXRvQ29tcHJlc3NQaWN0dXJlcz0iMCIvPicrCgkJCSc8Ym9va1ZpZXdzPicrCgkJCQknPHdvcmtib29rVmlldyB4V2luZG93PSIwIiB5V2luZG93PSIwIiB3aW5kb3dXaWR0aD0iMjU2MDAiIHdpbmRvd0hlaWdodD0iMTkwMjAiIHRhYlJhdGlvPSI1MDAiLz4nKwoJCQknPC9ib29rVmlld3M+JysKCQkJJzxzaGVldHM+JysKCQkJCSc8c2hlZXQgbmFtZT0iIiBzaGVldElkPSIxIiByOmlkPSJySWQxIi8+JysKCQkJJzwvc2hlZXRzPicrCgkJJzwvd29ya2Jvb2s+JywKCgkieGwvd29ya3NoZWV0cy9zaGVldDEueG1sIjoKCQknPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PicrCgkJJzx3b3Jrc2hlZXQgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIgeG1sbnM6cj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyIgeG1sbnM6bWM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2IiBtYzpJZ25vcmFibGU9IngxNGFjIiB4bWxuczp4MTRhYz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDA5LzkvYWMiPicrCgkJCSc8c2hlZXREYXRhLz4nKwoJCQknPG1lcmdlQ2VsbHMgY291bnQ9IjAiLz4nKwoJCSc8L3dvcmtzaGVldD4nLAoKCSJ4bC9zdHlsZXMueG1sIjoKCQknPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4nKwoJCSc8c3R5bGVTaGVldCB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIiB4bWxuczptYz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL21hcmt1cC1jb21wYXRpYmlsaXR5LzIwMDYiIG1jOklnbm9yYWJsZT0ieDE0YWMiIHhtbG5zOngxNGFjPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMDkvOS9hYyI+JysKCQkJJzxudW1GbXRzIGNvdW50PSI2Ij4nKwoJCQkJJzxudW1GbXQgbnVtRm10SWQ9IjE2NCIgZm9ybWF0Q29kZT0iIywjIzAuMDBfLVwgWyQkLTQ1Q10iLz4nKwoJCQkJJzxudW1GbXQgbnVtRm10SWQ9IjE2NSIgZm9ybWF0Q29kZT0iJnF1b3Q7wqMmcXVvdDsjLCMjMC4wMCIvPicrCgkJCQknPG51bUZtdCBudW1GbXRJZD0iMTY2IiBmb3JtYXRDb2RlPSJbJOKCrC0yXVwgIywjIzAuMDAiLz4nKwoJCQkJJzxudW1GbXQgbnVtRm10SWQ9IjE2NyIgZm9ybWF0Q29kZT0iMC4wJSIvPicrCgkJCQknPG51bUZtdCBudW1GbXRJZD0iMTY4IiBmb3JtYXRDb2RlPSIjLCMjMDsoIywjIzApIi8+JysKCQkJCSc8bnVtRm10IG51bUZtdElkPSIxNjkiIGZvcm1hdENvZGU9IiMsIyMwLjAwOygjLCMjMC4wMCkiLz4nKwoJCQknPC9udW1GbXRzPicrCgkJCSc8Zm9udHMgY291bnQ9IjUiIHgxNGFjOmtub3duRm9udHM9IjEiPicrCgkJCQknPGZvbnQ+JysKCQkJCQknPHN6IHZhbD0iMTEiIC8+JysKCQkJCQknPG5hbWUgdmFsPSJDYWxpYnJpIiAvPicrCgkJCQknPC9mb250PicrCgkJCQknPGZvbnQ+JysKCQkJCQknPHN6IHZhbD0iMTEiIC8+JysKCQkJCQknPG5hbWUgdmFsPSJDYWxpYnJpIiAvPicrCgkJCQkJJzxjb2xvciByZ2I9IkZGRkZGRkZGIiAvPicrCgkJCQknPC9mb250PicrCgkJCQknPGZvbnQ+JysKCQkJCQknPHN6IHZhbD0iMTEiIC8+JysKCQkJCQknPG5hbWUgdmFsPSJDYWxpYnJpIiAvPicrCgkJCQkJJzxiIC8+JysKCQkJCSc8L2ZvbnQ+JysKCQkJCSc8Zm9udD4nKwoJCQkJCSc8c3ogdmFsPSIxMSIgLz4nKwoJCQkJCSc8bmFtZSB2YWw9IkNhbGlicmkiIC8+JysKCQkJCQknPGkgLz4nKwoJCQkJJzwvZm9udD4nKwoJCQkJJzxmb250PicrCgkJCQkJJzxzeiB2YWw9IjExIiAvPicrCgkJCQkJJzxuYW1lIHZhbD0iQ2FsaWJyaSIgLz4nKwoJCQkJCSc8dSAvPicrCgkJCQknPC9mb250PicrCgkJCSc8L2ZvbnRzPicrCgkJCSc8ZmlsbHMgY291bnQ9IjYiPicrCgkJCQknPGZpbGw+JysKCQkJCQknPHBhdHRlcm5GaWxsIHBhdHRlcm5UeXBlPSJub25lIiAvPicrCgkJCQknPC9maWxsPicrCgkJCQknPGZpbGw+JysgLy8gRXhjZWwgYXBwZWFycyB0byB1c2UgdGhpcyBhcyBhIGRvdHRlZCBiYWNrZ3JvdW5kIHJlZ2FyZGxlc3Mgb2YgdmFsdWVzIGJ1dAoJCQkJCSc8cGF0dGVybkZpbGwgcGF0dGVyblR5cGU9Im5vbmUiIC8+JysgLy8gdG8gYmUgdmFsaWQgdG8gdGhlIHNjaGVtYSwgdXNlIGEgcGF0dGVybkZpbGwKCQkJCSc8L2ZpbGw+JysKCQkJCSc8ZmlsbD4nKwoJCQkJCSc8cGF0dGVybkZpbGwgcGF0dGVyblR5cGU9InNvbGlkIj4nKwoJCQkJCQknPGZnQ29sb3IgcmdiPSJGRkQ5RDlEOSIgLz4nKwoJCQkJCQknPGJnQ29sb3IgaW5kZXhlZD0iNjQiIC8+JysKCQkJCQknPC9wYXR0ZXJuRmlsbD4nKwoJCQkJJzwvZmlsbD4nKwoJCQkJJzxmaWxsPicrCgkJCQkJJzxwYXR0ZXJuRmlsbCBwYXR0ZXJuVHlwZT0ic29saWQiPicrCgkJCQkJCSc8ZmdDb2xvciByZ2I9IkZGRDk5Nzk1IiAvPicrCgkJCQkJCSc8YmdDb2xvciBpbmRleGVkPSI2NCIgLz4nKwoJCQkJCSc8L3BhdHRlcm5GaWxsPicrCgkJCQknPC9maWxsPicrCgkJCQknPGZpbGw+JysKCQkJCQknPHBhdHRlcm5GaWxsIHBhdHRlcm5UeXBlPSJzb2xpZCI+JysKCQkJCQkJJzxmZ0NvbG9yIHJnYj0iZmZjNmVmY2UiIC8+JysKCQkJCQkJJzxiZ0NvbG9yIGluZGV4ZWQ9IjY0IiAvPicrCgkJCQkJJzwvcGF0dGVybkZpbGw+JysKCQkJCSc8L2ZpbGw+JysKCQkJCSc8ZmlsbD4nKwoJCQkJCSc8cGF0dGVybkZpbGwgcGF0dGVyblR5cGU9InNvbGlkIj4nKwoJCQkJCQknPGZnQ29sb3IgcmdiPSJmZmM2Y2ZlZiIgLz4nKwoJCQkJCQknPGJnQ29sb3IgaW5kZXhlZD0iNjQiIC8+JysKCQkJCQknPC9wYXR0ZXJuRmlsbD4nKwoJCQkJJzwvZmlsbD4nKwoJCQknPC9maWxscz4nKwoJCQknPGJvcmRlcnMgY291bnQ9IjIiPicrCgkJCQknPGJvcmRlcj4nKwoJCQkJCSc8bGVmdCAvPicrCgkJCQkJJzxyaWdodCAvPicrCgkJCQkJJzx0b3AgLz4nKwoJCQkJCSc8Ym90dG9tIC8+JysKCQkJCQknPGRpYWdvbmFsIC8+JysKCQkJCSc8L2JvcmRlcj4nKwoJCQkJJzxib3JkZXIgZGlhZ29uYWxVcD0iZmFsc2UiIGRpYWdvbmFsRG93bj0iZmFsc2UiPicrCgkJCQkJJzxsZWZ0IHN0eWxlPSJ0aGluIj4nKwoJCQkJCQknPGNvbG9yIGF1dG89IjEiIC8+JysKCQkJCQknPC9sZWZ0PicrCgkJCQkJJzxyaWdodCBzdHlsZT0idGhpbiI+JysKCQkJCQkJJzxjb2xvciBhdXRvPSIxIiAvPicrCgkJCQkJJzwvcmlnaHQ+JysKCQkJCQknPHRvcCBzdHlsZT0idGhpbiI+JysKCQkJCQkJJzxjb2xvciBhdXRvPSIxIiAvPicrCgkJCQkJJzwvdG9wPicrCgkJCQkJJzxib3R0b20gc3R5bGU9InRoaW4iPicrCgkJCQkJCSc8Y29sb3IgYXV0bz0iMSIgLz4nKwoJCQkJCSc8L2JvdHRvbT4nKwoJCQkJCSc8ZGlhZ29uYWwgLz4nKwoJCQkJJzwvYm9yZGVyPicrCgkJCSc8L2JvcmRlcnM+JysKCQkJJzxjZWxsU3R5bGVYZnMgY291bnQ9IjEiPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIC8+JysKCQkJJzwvY2VsbFN0eWxlWGZzPicrCgkJCSc8Y2VsbFhmcyBjb3VudD0iNjEiPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjEiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjIiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjMiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjQiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMiIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjEiIGZpbGxJZD0iMiIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjIiIGZpbGxJZD0iMiIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjMiIGZpbGxJZD0iMiIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjQiIGZpbGxJZD0iMiIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMyIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjEiIGZpbGxJZD0iMyIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjIiIGZpbGxJZD0iMyIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjMiIGZpbGxJZD0iMyIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjQiIGZpbGxJZD0iMyIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iNCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjEiIGZpbGxJZD0iNCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjIiIGZpbGxJZD0iNCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjMiIGZpbGxJZD0iNCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjQiIGZpbGxJZD0iNCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iNSIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjEiIGZpbGxJZD0iNSIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjIiIGZpbGxJZD0iNSIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjMiIGZpbGxJZD0iNSIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjQiIGZpbGxJZD0iNSIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjEiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjIiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjMiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjQiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMiIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjEiIGZpbGxJZD0iMiIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjIiIGZpbGxJZD0iMiIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjMiIGZpbGxJZD0iMiIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjQiIGZpbGxJZD0iMiIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMyIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjEiIGZpbGxJZD0iMyIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjIiIGZpbGxJZD0iMyIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjMiIGZpbGxJZD0iMyIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjQiIGZpbGxJZD0iMyIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iNCIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjEiIGZpbGxJZD0iNCIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjIiIGZpbGxJZD0iNCIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjMiIGZpbGxJZD0iNCIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjQiIGZpbGxJZD0iNCIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iNSIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjEiIGZpbGxJZD0iNSIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjIiIGZpbGxJZD0iNSIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjMiIGZpbGxJZD0iNSIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjQiIGZpbGxJZD0iNSIgYm9yZGVySWQ9IjEiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlBbGlnbm1lbnQ9IjEiPicrCgkJCQkJJzxhbGlnbm1lbnQgaG9yaXpvbnRhbD0ibGVmdCIvPicrCgkJCQknPC94Zj4nKwoJCQkJJzx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiIHhmSWQ9IjAiIGFwcGx5QWxpZ25tZW50PSIxIj4nKwoJCQkJCSc8YWxpZ25tZW50IGhvcml6b250YWw9ImNlbnRlciIvPicrCgkJCQknPC94Zj4nKwoJCQkJJzx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiIHhmSWQ9IjAiIGFwcGx5QWxpZ25tZW50PSIxIj4nKwoJCQkJCSc8YWxpZ25tZW50IGhvcml6b250YWw9InJpZ2h0Ii8+JysKCQkJCSc8L3hmPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlBbGlnbm1lbnQ9IjEiPicrCgkJCQkJJzxhbGlnbm1lbnQgaG9yaXpvbnRhbD0iZmlsbCIvPicrCgkJCQknPC94Zj4nKwoJCQkJJzx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiIHhmSWQ9IjAiIGFwcGx5QWxpZ25tZW50PSIxIj4nKwoJCQkJCSc8YWxpZ25tZW50IHRleHRSb3RhdGlvbj0iOTAiLz4nKwoJCQkJJzwveGY+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIiB4ZklkPSIwIiBhcHBseUFsaWdubWVudD0iMSI+JysKCQkJCQknPGFsaWdubWVudCB3cmFwVGV4dD0iMSIvPicrCgkJCQknPC94Zj4nKwoJCQkJJzx4ZiBudW1GbXRJZD0iOSIgICBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlOdW1iZXJGb3JtYXQ9IjEiLz4nKwoJCQkJJzx4ZiBudW1GbXRJZD0iMTY0IiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlOdW1iZXJGb3JtYXQ9IjEiLz4nKwoJCQkJJzx4ZiBudW1GbXRJZD0iMTY1IiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlOdW1iZXJGb3JtYXQ9IjEiLz4nKwoJCQkJJzx4ZiBudW1GbXRJZD0iMTY2IiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlOdW1iZXJGb3JtYXQ9IjEiLz4nKwoJCQkJJzx4ZiBudW1GbXRJZD0iMTY3IiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlOdW1iZXJGb3JtYXQ9IjEiLz4nKwoJCQkJJzx4ZiBudW1GbXRJZD0iMTY4IiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlOdW1iZXJGb3JtYXQ9IjEiLz4nKwoJCQkJJzx4ZiBudW1GbXRJZD0iMTY5IiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlOdW1iZXJGb3JtYXQ9IjEiLz4nKwoJCQkJJzx4ZiBudW1GbXRJZD0iMyIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiIHhmSWQ9IjAiIGFwcGx5TnVtYmVyRm9ybWF0PSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjQiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIiB4ZklkPSIwIiBhcHBseU51bWJlckZvcm1hdD0iMSIvPicrCgkJCSc8L2NlbGxYZnM+JysKCQkJJzxjZWxsU3R5bGVzIGNvdW50PSIxIj4nKwoJCQkJJzxjZWxsU3R5bGUgbmFtZT0iTm9ybWFsIiB4ZklkPSIwIiBidWlsdGluSWQ9IjAiIC8+JysKCQkJJzwvY2VsbFN0eWxlcz4nKwoJCQknPGR4ZnMgY291bnQ9IjAiIC8+JysKCQkJJzx0YWJsZVN0eWxlcyBjb3VudD0iMCIgZGVmYXVsdFRhYmxlU3R5bGU9IlRhYmxlU3R5bGVNZWRpdW05IiBkZWZhdWx0UGl2b3RTdHlsZT0iUGl2b3RTdHlsZU1lZGl1bTQiIC8+JysKCQknPC9zdHlsZVNoZWV0PicKfTsKLy8gTm90ZSB3ZSBjb3VsZCB1c2UgMyBgZm9yYCBsb29wcyBmb3IgdGhlIHN0eWxlcywgYnV0IHdoZW4gZ3ppcHBlZCB0aGVyZSBpcwovLyB2aXJ0dWFsbHkgbm8gZGlmZmVyZW5jZSBpbiBzaXplLCBzaW5jZSB0aGUgYWJvdmUgY2FuIGJlIGVhc2lseSBjb21wcmVzc2VkCgovLyBQYXR0ZXJuIG1hdGNoaW5nIGZvciBzcGVjaWFsIG51bWJlciBmb3JtYXRzLiBQZXJoYXBzIHRoaXMgc2hvdWxkIGJlIGV4cG9zZWQKLy8gdmlhIGFuIEFQSSBpbiBmdXR1cmU/CnZhciBfZXhjZWxTcGVjaWFscyA9IFsKCXsgbWF0Y2g6IC9eXC0/XGQrXC5cZCUkLywgICAgICAgc3R5bGU6IDYwLCBmbXQ6IGZ1bmN0aW9uIChkKSB7IHJldHVybiBkLzEwMDsgfSB9LCAvLyBQcmVjZW50IHdpdGggZC5wLgoJeyBtYXRjaDogL15cLT9cZCtcLj9cZColJC8sICAgICBzdHlsZTogNTYsIGZtdDogZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQvMTAwOyB9IH0sIC8vIFBlcmNlbnQKCXsgbWF0Y2g6IC9eXC0/XCRbXGQsXSsuP1xkKiQvLCAgc3R5bGU6IDU3IH0sIC8vIERvbGxhcnMKCXsgbWF0Y2g6IC9eXC0/wqNbXGQsXSsuP1xkKiQvLCAgIHN0eWxlOiA1OCB9LCAvLyBQb3VuZHMKCXsgbWF0Y2g6IC9eXC0/4oKsW1xkLF0rLj9cZCokLywgICBzdHlsZTogNTkgfSwgLy8gRXVyb3MKCXsgbWF0Y2g6IC9eXChbXGQsXStcKSQvLCAgICAgICAgc3R5bGU6IDYxLCBmbXQ6IGZ1bmN0aW9uIChkKSB7IHJldHVybiAtMSAqIGQucmVwbGFjZSgvW1woXCldL2csICcnKTsgfSB9LCAgLy8gTmVnYXRpdmUgbnVtYmVycyBpbmRpY2F0ZWQgYnkgYnJhY2tldHMKCXsgbWF0Y2g6IC9eXChbXGQsXStcLlxkezJ9XCkkLywgc3R5bGU6IDYyLCBmbXQ6IGZ1bmN0aW9uIChkKSB7IHJldHVybiAtMSAqIGQucmVwbGFjZSgvW1woXCldL2csICcnKTsgfSB9LCAgLy8gTmVnYXRpdmUgbnVtYmVycyBpbmRpY2F0ZWQgYnkgYnJhY2tldHMgLSAyZC5wLgoJeyBtYXRjaDogL15bXGQsXSskLywgICAgICAgICAgICBzdHlsZTogNjMgfSwgLy8gTnVtYmVycyB3aXRoIHRob3VzYW5kIHNlcGFyYXRvcnMKCXsgbWF0Y2g6IC9eW1xkLF0rXC5cZHsyfSQvLCAgICAgc3R5bGU6IDY0IH0gIC8vIE51bWJlcnMgd2l0aCAyZC5wLiBhbmQgdGhvdXNhbmRzIHNlcGFyYXRvcnMKXTsKCgoKLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCiAqIERhdGFUYWJsZXMgb3B0aW9ucyBhbmQgbWV0aG9kcwogKi8KCi8vIFNldCB0aGUgZGVmYXVsdCBTV0YgcGF0aApEYXRhVGFibGUuQnV0dG9ucy5zd2ZQYXRoID0gJy8vY2RuLmRhdGF0YWJsZXMubmV0L2J1dHRvbnMvJytEYXRhVGFibGUuQnV0dG9ucy52ZXJzaW9uKycvc3dmL2ZsYXNoRXhwb3J0LnN3Zic7CgovLyBNZXRob2QgdG8gYWxsb3cgRmxhc2ggYnV0dG9ucyB0byBiZSByZXNpemVkIHdoZW4gbWFkZSB2aXNpYmxlIC0gYXMgdGhleSBhcmUKLy8gb2YgemVybyBoZWlnaHQgYW5kIHdpZHRoIGlmIGluaXRpYWxpc2VkIGhpZGRlbgpEYXRhVGFibGUuQXBpLnJlZ2lzdGVyKCAnYnV0dG9ucy5yZXNpemUoKScsIGZ1bmN0aW9uICgpIHsKCSQuZWFjaCggWmVyb0NsaXBib2FyZF9UYWJsZVRvb2xzLmNsaWVudHMsIGZ1bmN0aW9uICggaSwgY2xpZW50ICkgewoJCWlmICggY2xpZW50LmRvbUVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJiBjbGllbnQuZG9tRWxlbWVudC5wYXJlbnROb2RlICkgewoJCQljbGllbnQucG9zaXRpb25FbGVtZW50KCk7CgkJfQoJfSApOwp9ICk7CgoKLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCiAqIEJ1dHRvbiBkZWZpbml0aW9ucwogKi8KCi8vIENvcHkgdG8gY2xpcGJvYXJkCkRhdGFUYWJsZS5leHQuYnV0dG9ucy5jb3B5Rmxhc2ggPSAkLmV4dGVuZCgge30sIGZsYXNoQnV0dG9uLCB7CgljbGFzc05hbWU6ICdidXR0b25zLWNvcHkgYnV0dG9ucy1mbGFzaCcsCgoJdGV4dDogZnVuY3Rpb24gKCBkdCApIHsKCQlyZXR1cm4gZHQuaTE4biggJ2J1dHRvbnMuY29weScsICdDb3B5JyApOwoJfSwKCglhY3Rpb246IGZ1bmN0aW9uICggZSwgZHQsIGJ1dHRvbiwgY29uZmlnICkgewoJCS8vIENoZWNrIHRoYXQgdGhlIHRyaWdnZXIgZGlkIGFjdHVhbGx5IG9jY3VyIGR1ZSB0byBhIEZsYXNoIGFjdGl2YXRpb24KCQlpZiAoICEgY29uZmlnLl9mcm9tRmxhc2ggKSB7CgkJCXJldHVybjsKCQl9CgoJCXRoaXMucHJvY2Vzc2luZyggdHJ1ZSApOwoKCQl2YXIgZmxhc2ggPSBjb25maWcuX2ZsYXNoOwoJCXZhciBleHBvcnREYXRhID0gX2V4cG9ydERhdGEoIGR0LCBjb25maWcgKTsKCQl2YXIgaW5mbyA9IGR0LmJ1dHRvbnMuZXhwb3J0SW5mbyggY29uZmlnICk7CgkJdmFyIG5ld2xpbmUgPSBfbmV3TGluZShjb25maWcpOwoJCXZhciBvdXRwdXQgPSBleHBvcnREYXRhLnN0cjsKCgkJaWYgKCBpbmZvLnRpdGxlICkgewoJCQlvdXRwdXQgPSBpbmZvLnRpdGxlICsgbmV3bGluZSArIG5ld2xpbmUgKyBvdXRwdXQ7CgkJfQoKCQlpZiAoIGluZm8ubWVzc2FnZVRvcCApIHsKCQkJb3V0cHV0ID0gaW5mby5tZXNzYWdlVG9wICsgbmV3bGluZSArIG5ld2xpbmUgKyBvdXRwdXQ7CgkJfQoKCQlpZiAoIGluZm8ubWVzc2FnZUJvdHRvbSApIHsKCQkJb3V0cHV0ID0gb3V0cHV0ICsgbmV3bGluZSArIG5ld2xpbmUgKyBpbmZvLm1lc3NhZ2VCb3R0b207CgkJfQoKCQlpZiAoIGNvbmZpZy5jdXN0b21pemUgKSB7CgkJCW91dHB1dCA9IGNvbmZpZy5jdXN0b21pemUoIG91dHB1dCwgY29uZmlnLCBkdCApOwoJCX0KCgkJZmxhc2guc2V0QWN0aW9uKCAnY29weScgKTsKCQlfc2V0VGV4dCggZmxhc2gsIG91dHB1dCApOwoKCQl0aGlzLnByb2Nlc3NpbmcoIGZhbHNlICk7CgoJCWR0LmJ1dHRvbnMuaW5mbygKCQkJZHQuaTE4biggJ2J1dHRvbnMuY29weVRpdGxlJywgJ0NvcHkgdG8gY2xpcGJvYXJkJyApLAoJCQlkdC5pMThuKCAnYnV0dG9ucy5jb3B5U3VjY2VzcycsIHsKCQkJCV86ICdDb3BpZWQgJWQgcm93cyB0byBjbGlwYm9hcmQnLAoJCQkJMTogJ0NvcGllZCAxIHJvdyB0byBjbGlwYm9hcmQnCgkJCX0sIGRhdGEucm93cyApLAoJCQkzMDAwCgkJKTsKCX0sCgoJZmllbGRTZXBhcmF0b3I6ICdcdCcsCgoJZmllbGRCb3VuZGFyeTogJycKfSApOwoKLy8gQ1NWIHNhdmUgZmlsZQpEYXRhVGFibGUuZXh0LmJ1dHRvbnMuY3N2Rmxhc2ggPSAkLmV4dGVuZCgge30sIGZsYXNoQnV0dG9uLCB7CgljbGFzc05hbWU6ICdidXR0b25zLWNzdiBidXR0b25zLWZsYXNoJywKCgl0ZXh0OiBmdW5jdGlvbiAoIGR0ICkgewoJCXJldHVybiBkdC5pMThuKCAnYnV0dG9ucy5jc3YnLCAnQ1NWJyApOwoJfSwKCglhY3Rpb246IGZ1bmN0aW9uICggZSwgZHQsIGJ1dHRvbiwgY29uZmlnICkgewoJCS8vIFNldCB0aGUgdGV4dAoJCXZhciBmbGFzaCA9IGNvbmZpZy5fZmxhc2g7CgkJdmFyIGRhdGEgPSBfZXhwb3J0RGF0YSggZHQsIGNvbmZpZyApOwoJCXZhciBpbmZvID0gZHQuYnV0dG9ucy5leHBvcnRJbmZvKCBjb25maWcgKTsKCQl2YXIgb3V0cHV0ID0gY29uZmlnLmN1c3RvbWl6ZSA/CgkJCWNvbmZpZy5jdXN0b21pemUoIGRhdGEuc3RyLCBjb25maWcsIGR0ICkgOgoJCQlkYXRhLnN0cjsKCgkJZmxhc2guc2V0QWN0aW9uKCAnY3N2JyApOwoJCWZsYXNoLnNldEZpbGVOYW1lKCBpbmZvLmZpbGVuYW1lICk7CgkJX3NldFRleHQoIGZsYXNoLCBvdXRwdXQgKTsKCX0sCgoJZXNjYXBlQ2hhcjogJyInCn0gKTsKCi8vIEV4Y2VsIHNhdmUgZmlsZSAtIHRoaXMgaXMgcmVhbGx5IGEgQ1NWIGZpbGUgdXNpbmcgVVRGLTggdGhhdCBFeGNlbCBjYW4gcmVhZApEYXRhVGFibGUuZXh0LmJ1dHRvbnMuZXhjZWxGbGFzaCA9ICQuZXh0ZW5kKCB7fSwgZmxhc2hCdXR0b24sIHsKCWNsYXNzTmFtZTogJ2J1dHRvbnMtZXhjZWwgYnV0dG9ucy1mbGFzaCcsCgoJdGV4dDogZnVuY3Rpb24gKCBkdCApIHsKCQlyZXR1cm4gZHQuaTE4biggJ2J1dHRvbnMuZXhjZWwnLCAnRXhjZWwnICk7Cgl9LAoKCWFjdGlvbjogZnVuY3Rpb24gKCBlLCBkdCwgYnV0dG9uLCBjb25maWcgKSB7CgkJdGhpcy5wcm9jZXNzaW5nKCB0cnVlICk7CgoJCXZhciBmbGFzaCA9IGNvbmZpZy5fZmxhc2g7CgkJdmFyIHJvd1BvcyA9IDA7CgkJdmFyIHJlbHMgPSAkLnBhcnNlWE1MKCBleGNlbFN0cmluZ3NbJ3hsL3dvcmtzaGVldHMvc2hlZXQxLnhtbCddICkgOyAvL1BhcnNlcyB4bWwKCQl2YXIgcmVsc0dldCA9IHJlbHMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJzaGVldERhdGEiIClbMF07CgoJCXZhciB4bHN4ID0gewoJCQlfcmVsczogewoJCQkJIi5yZWxzIjogJC5wYXJzZVhNTCggZXhjZWxTdHJpbmdzWydfcmVscy8ucmVscyddICkKCQkJfSwKCQkJeGw6IHsKCQkJCV9yZWxzOiB7CgkJCQkJIndvcmtib29rLnhtbC5yZWxzIjogJC5wYXJzZVhNTCggZXhjZWxTdHJpbmdzWyd4bC9fcmVscy93b3JrYm9vay54bWwucmVscyddICkKCQkJCX0sCgkJCQkid29ya2Jvb2sueG1sIjogJC5wYXJzZVhNTCggZXhjZWxTdHJpbmdzWyd4bC93b3JrYm9vay54bWwnXSApLAoJCQkJInN0eWxlcy54bWwiOiAkLnBhcnNlWE1MKCBleGNlbFN0cmluZ3NbJ3hsL3N0eWxlcy54bWwnXSApLAoJCQkJIndvcmtzaGVldHMiOiB7CgkJCQkJInNoZWV0MS54bWwiOiByZWxzCgkJCQl9CgoJCQl9LAoJCQkiW0NvbnRlbnRfVHlwZXNdLnhtbCI6ICQucGFyc2VYTUwoIGV4Y2VsU3RyaW5nc1snW0NvbnRlbnRfVHlwZXNdLnhtbCddKQoJCX07CgoJCXZhciBkYXRhID0gZHQuYnV0dG9ucy5leHBvcnREYXRhKCBjb25maWcuZXhwb3J0T3B0aW9ucyApOwoJCXZhciBjdXJyZW50Um93LCByb3dOb2RlOwoJCXZhciBhZGRSb3cgPSBmdW5jdGlvbiAoIHJvdyApIHsKCQkJY3VycmVudFJvdyA9IHJvd1BvcysxOwoJCQlyb3dOb2RlID0gX2NyZWF0ZU5vZGUoIHJlbHMsICJyb3ciLCB7IGF0dHI6IHtyOmN1cnJlbnRSb3d9IH0gKTsKCgkJCWZvciAoIHZhciBpPTAsIGllbj1yb3cubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQkvLyBDb25jYXQgYm90aCB0aGUgQ2VsbCBDb2x1bW5zIGFzIGEgbGV0dGVyIGFuZCB0aGUgUm93IG9mIHRoZSBjZWxsLgoJCQkJdmFyIGNlbGxJZCA9IGNyZWF0ZUNlbGxQb3MoaSkgKyAnJyArIGN1cnJlbnRSb3c7CgkJCQl2YXIgY2VsbCA9IG51bGw7CgoJCQkJLy8gRm9yIG51bGwsIHVuZGVmaW5lZCBvZiBibGFuayBjZWxsLCBjb250aW51ZSBzbyBpdCBkb2Vzbid0IGNyZWF0ZSB0aGUgX2NyZWF0ZU5vZGUKCQkJCWlmICggcm93W2ldID09PSBudWxsIHx8IHJvd1tpXSA9PT0gdW5kZWZpbmVkIHx8IHJvd1tpXSA9PT0gJycgKSB7CgkJCQkJaWYgKCBjb25maWcuY3JlYXRlRW1wdHlDZWxscyA9PT0gdHJ1ZSApIHsKCQkJCQkJcm93W2ldID0gJyc7CgkJCQkJfQoJCQkJCWVsc2UgewoJCQkJCQljb250aW51ZTsKCQkJCQl9CgkJCQl9CgoJCQkJcm93W2ldID0gJC50cmltKCByb3dbaV0gKTsKCgkJCQkvLyBTcGVjaWFsIG51bWJlciBmb3JtYXR0aW5nIG9wdGlvbnMKCQkJCWZvciAoIHZhciBqPTAsIGplbj1fZXhjZWxTcGVjaWFscy5sZW5ndGggOyBqPGplbiA7IGorKyApIHsKCQkJCQl2YXIgc3BlY2lhbCA9IF9leGNlbFNwZWNpYWxzW2pdOwoKCQkJCQkvLyBUT0RPIE5lZWQgdG8gcHJvdmlkZSB0aGUgYWJpbGl0eSBmb3IgdGhlIHNwZWNpYWxzIHRvIHNheQoJCQkJCS8vIGlmIHRoZXkgYXJlIHJldHVybmluZyBhIHN0cmluZywgc2luY2UgYXQgdGhlIG1vbWVudCBpdCBpcwoJCQkJCS8vIGFzc3VtZWQgdG8gYmUgYSBudW1iZXIKCQkJCQlpZiAoIHJvd1tpXS5tYXRjaCAmJiAhIHJvd1tpXS5tYXRjaCgvXjBcZCsvKSAmJiByb3dbaV0ubWF0Y2goIHNwZWNpYWwubWF0Y2ggKSApIHsKCQkJCQkJdmFyIHZhbCA9IHJvd1tpXS5yZXBsYWNlKC9bXlxkXC5cLV0vZywgJycpOwoKCQkJCQkJaWYgKCBzcGVjaWFsLmZtdCApIHsKCQkJCQkJCXZhbCA9IHNwZWNpYWwuZm10KCB2YWwgKTsKCQkJCQkJfQoKCQkJCQkJY2VsbCA9IF9jcmVhdGVOb2RlKCByZWxzLCAnYycsIHsKCQkJCQkJCWF0dHI6IHsKCQkJCQkJCQlyOiBjZWxsSWQsCgkJCQkJCQkJczogc3BlY2lhbC5zdHlsZQoJCQkJCQkJfSwKCQkJCQkJCWNoaWxkcmVuOiBbCgkJCQkJCQkJX2NyZWF0ZU5vZGUoIHJlbHMsICd2JywgeyB0ZXh0OiB2YWwgfSApCgkJCQkJCQldCgkJCQkJCX0gKTsKCgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCgkJCQlpZiAoICEgY2VsbCApIHsKCQkJCQlpZiAoIHR5cGVvZiByb3dbaV0gPT09ICdudW1iZXInIHx8ICgKCQkJCQkJcm93W2ldLm1hdGNoICYmCgkJCQkJCXJvd1tpXS5tYXRjaCgvXi0/XGQrKFwuXGQrKT8kLykgJiYKCQkJCQkJISByb3dbaV0ubWF0Y2goL14wXGQrLykgKQoJCQkJCSkgewoJCQkJCQkvLyBEZXRlY3QgbnVtYmVycyAtIGRvbid0IG1hdGNoIG51bWJlcnMgd2l0aCBsZWFkaW5nIHplcm9zCgkJCQkJCS8vIG9yIGEgbmVnYXRpdmUgYW55d2hlcmUgYnV0IHRoZSBzdGFydAoJCQkJCQljZWxsID0gX2NyZWF0ZU5vZGUoIHJlbHMsICdjJywgewoJCQkJCQkJYXR0cjogewoJCQkJCQkJCXQ6ICduJywKCQkJCQkJCQlyOiBjZWxsSWQKCQkJCQkJCX0sCgkJCQkJCQljaGlsZHJlbjogWwoJCQkJCQkJCV9jcmVhdGVOb2RlKCByZWxzLCAndicsIHsgdGV4dDogcm93W2ldIH0gKQoJCQkJCQkJXQoJCQkJCQl9ICk7CgkJCQkJfQoJCQkJCWVsc2UgewoJCQkJCQkvLyBTdHJpbmcgb3V0cHV0IC0gcmVwbGFjZSBub24gc3RhbmRhcmQgY2hhcmFjdGVycyBmb3IgdGV4dCBvdXRwdXQKCQkJCQkJdmFyIHRleHQgPSAhIHJvd1tpXS5yZXBsYWNlID8KCQkJCQkJCXJvd1tpXSA6CgkJCQkJCQlyb3dbaV0ucmVwbGFjZSgvW1x4MDAtXHgwOVx4MEJceDBDXHgwRS1ceDFGXHg3Ri1ceDlGXS9nLCAnJyk7CgoJCQkJCQljZWxsID0gX2NyZWF0ZU5vZGUoIHJlbHMsICdjJywgewoJCQkJCQkJYXR0cjogewoJCQkJCQkJCXQ6ICdpbmxpbmVTdHInLAoJCQkJCQkJCXI6IGNlbGxJZAoJCQkJCQkJfSwKCQkJCQkJCWNoaWxkcmVuOnsKCQkJCQkJCQlyb3c6IF9jcmVhdGVOb2RlKCByZWxzLCAnaXMnLCB7CgkJCQkJCQkJCWNoaWxkcmVuOiB7CgkJCQkJCQkJCQlyb3c6IF9jcmVhdGVOb2RlKCByZWxzLCAndCcsIHsKCQkJCQkJCQkJCQl0ZXh0OiB0ZXh0CgkJCQkJCQkJCQl9ICkKCQkJCQkJCQkJfQoJCQkJCQkJCX0gKQoJCQkJCQkJfQoJCQkJCQl9ICk7CgkJCQkJfQoJCQkJfQoKCQkJCXJvd05vZGUuYXBwZW5kQ2hpbGQoIGNlbGwgKTsKCQkJfQoKCQkJcmVsc0dldC5hcHBlbmRDaGlsZChyb3dOb2RlKTsKCQkJcm93UG9zKys7CgkJfTsKCgkJJCggJ3NoZWV0cyBzaGVldCcsIHhsc3gueGxbJ3dvcmtib29rLnhtbCddICkuYXR0ciggJ25hbWUnLCBfc2hlZXRuYW1lKCBjb25maWcgKSApOwoKCQlpZiAoIGNvbmZpZy5jdXN0b21pemVEYXRhICkgewoJCQljb25maWcuY3VzdG9taXplRGF0YSggZGF0YSApOwoJCX0KCgkJdmFyIG1lcmdlQ2VsbHMgPSBmdW5jdGlvbiAoIHJvdywgY29sc3BhbiApIHsKCQkJdmFyIG1lcmdlQ2VsbHMgPSAkKCdtZXJnZUNlbGxzJywgcmVscyk7CgoJCQltZXJnZUNlbGxzWzBdLmFwcGVuZENoaWxkKCBfY3JlYXRlTm9kZSggcmVscywgJ21lcmdlQ2VsbCcsIHsKCQkJCWF0dHI6IHsKCQkJCQlyZWY6ICdBJytyb3crJzonK2NyZWF0ZUNlbGxQb3MoY29sc3Bhbikrcm93CgkJCQl9CgkJCX0gKSApOwoJCQltZXJnZUNlbGxzLmF0dHIoICdjb3VudCcsIG1lcmdlQ2VsbHMuYXR0ciggJ2NvdW50JyApKzEgKTsKCQkJJCgncm93OmVxKCcrKHJvdy0xKSsnKSBjJywgcmVscykuYXR0ciggJ3MnLCAnNTEnICk7IC8vIGNlbnRyZQoJCX07CgoJCS8vIFRpdGxlIGFuZCB0b3AgbWVzc2FnZXMKCQl2YXIgZXhwb3J0SW5mbyA9IGR0LmJ1dHRvbnMuZXhwb3J0SW5mbyggY29uZmlnICk7CgkJaWYgKCBleHBvcnRJbmZvLnRpdGxlICkgewoJCQlhZGRSb3coIFtleHBvcnRJbmZvLnRpdGxlXSwgcm93UG9zICk7CgkJCW1lcmdlQ2VsbHMoIHJvd1BvcywgZGF0YS5oZWFkZXIubGVuZ3RoLTEgKTsKCQl9CgoJCWlmICggZXhwb3J0SW5mby5tZXNzYWdlVG9wICkgewoJCQlhZGRSb3coIFtleHBvcnRJbmZvLm1lc3NhZ2VUb3BdLCByb3dQb3MgKTsKCQkJbWVyZ2VDZWxscyggcm93UG9zLCBkYXRhLmhlYWRlci5sZW5ndGgtMSApOwoJCX0KCgkJLy8gVGFibGUgaXRzZWxmCgkJaWYgKCBjb25maWcuaGVhZGVyICkgewoJCQlhZGRSb3coIGRhdGEuaGVhZGVyLCByb3dQb3MgKTsKCQkJJCgncm93Omxhc3QgYycsIHJlbHMpLmF0dHIoICdzJywgJzInICk7IC8vIGJvbGQKCQl9CgoJCWZvciAoIHZhciBuPTAsIGllPWRhdGEuYm9keS5sZW5ndGggOyBuPGllIDsgbisrICkgewoJCQlhZGRSb3coIGRhdGEuYm9keVtuXSwgcm93UG9zICk7CgkJfQoKCQlpZiAoIGNvbmZpZy5mb290ZXIgJiYgZGF0YS5mb290ZXIgKSB7CgkJCWFkZFJvdyggZGF0YS5mb290ZXIsIHJvd1Bvcyk7CgkJCSQoJ3JvdzpsYXN0IGMnLCByZWxzKS5hdHRyKCAncycsICcyJyApOyAvLyBib2xkCgkJfQoKCQkvLyBCZWxvdyB0aGUgdGFibGUKCQlpZiAoIGV4cG9ydEluZm8ubWVzc2FnZUJvdHRvbSApIHsKCQkJYWRkUm93KCBbZXhwb3J0SW5mby5tZXNzYWdlQm90dG9tXSwgcm93UG9zICk7CgkJCW1lcmdlQ2VsbHMoIHJvd1BvcywgZGF0YS5oZWFkZXIubGVuZ3RoLTEgKTsKCQl9CgoJCS8vIFNldCBjb2x1bW4gd2lkdGhzCgkJdmFyIGNvbHMgPSBfY3JlYXRlTm9kZSggcmVscywgJ2NvbHMnICk7CgkJJCgnd29ya3NoZWV0JywgcmVscykucHJlcGVuZCggY29scyApOwoKCQlmb3IgKCB2YXIgaT0wLCBpZW49ZGF0YS5oZWFkZXIubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCWNvbHMuYXBwZW5kQ2hpbGQoIF9jcmVhdGVOb2RlKCByZWxzLCAnY29sJywgewoJCQkJYXR0cjogewoJCQkJCW1pbjogaSsxLAoJCQkJCW1heDogaSsxLAoJCQkJCXdpZHRoOiBfZXhjZWxDb2xXaWR0aCggZGF0YSwgaSApLAoJCQkJCWN1c3RvbVdpZHRoOiAxCgkJCQl9CgkJCX0gKSApOwoJCX0KCgkJLy8gTGV0IHRoZSBkZXZlbG9wZXIgY3VzdG9taXNlIHRoZSBkb2N1bWVudCBpZiB0aGV5IHdhbnQgdG8KCQlpZiAoIGNvbmZpZy5jdXN0b21pemUgKSB7CgkJCWNvbmZpZy5jdXN0b21pemUoIHhsc3gsIGNvbmZpZywgZHQgKTsKCQl9CgoJCV94bHN4VG9TdHJpbmdzKCB4bHN4ICk7CgoJCWZsYXNoLnNldEFjdGlvbiggJ2V4Y2VsJyApOwoJCWZsYXNoLnNldEZpbGVOYW1lKCBleHBvcnRJbmZvLmZpbGVuYW1lICk7CgkJZmxhc2guc2V0U2hlZXREYXRhKCB4bHN4ICk7CgkJX3NldFRleHQoIGZsYXNoLCAnJyApOwoKCQl0aGlzLnByb2Nlc3NpbmcoIGZhbHNlICk7Cgl9LAoKCWV4dGVuc2lvbjogJy54bHN4JywKCQoJY3JlYXRlRW1wdHlDZWxsczogZmFsc2UKfSApOwoKCgovLyBQREYgZXhwb3J0CkRhdGFUYWJsZS5leHQuYnV0dG9ucy5wZGZGbGFzaCA9ICQuZXh0ZW5kKCB7fSwgZmxhc2hCdXR0b24sIHsKCWNsYXNzTmFtZTogJ2J1dHRvbnMtcGRmIGJ1dHRvbnMtZmxhc2gnLAoKCXRleHQ6IGZ1bmN0aW9uICggZHQgKSB7CgkJcmV0dXJuIGR0LmkxOG4oICdidXR0b25zLnBkZicsICdQREYnICk7Cgl9LAoKCWFjdGlvbjogZnVuY3Rpb24gKCBlLCBkdCwgYnV0dG9uLCBjb25maWcgKSB7CgkJdGhpcy5wcm9jZXNzaW5nKCB0cnVlICk7CgoJCS8vIFNldCB0aGUgdGV4dAoJCXZhciBmbGFzaCA9IGNvbmZpZy5fZmxhc2g7CgkJdmFyIGRhdGEgPSBkdC5idXR0b25zLmV4cG9ydERhdGEoIGNvbmZpZy5leHBvcnRPcHRpb25zICk7CgkJdmFyIGluZm8gPSBkdC5idXR0b25zLmV4cG9ydEluZm8oIGNvbmZpZyApOwoJCXZhciB0b3RhbFdpZHRoID0gZHQudGFibGUoKS5ub2RlKCkub2Zmc2V0V2lkdGg7CgoJCS8vIENhbGN1bGF0ZSB0aGUgY29sdW1uIHdpZHRoIHJhdGlvcyBmb3IgbGF5b3V0IG9mIHRoZSB0YWJsZSBpbiB0aGUgUERGCgkJdmFyIHJhdGlvcyA9IGR0LmNvbHVtbnMoIGNvbmZpZy5jb2x1bW5zICkuaW5kZXhlcygpLm1hcCggZnVuY3Rpb24gKCBpZHggKSB7CgkJCXJldHVybiBkdC5jb2x1bW4oIGlkeCApLmhlYWRlcigpLm9mZnNldFdpZHRoIC8gdG90YWxXaWR0aDsKCQl9ICk7CgoJCWZsYXNoLnNldEFjdGlvbiggJ3BkZicgKTsKCQlmbGFzaC5zZXRGaWxlTmFtZSggaW5mby5maWxlbmFtZSApOwoKCQlfc2V0VGV4dCggZmxhc2gsIEpTT04uc3RyaW5naWZ5KCB7CgkJCXRpdGxlOiAgICAgICAgIGluZm8udGl0bGUgfHwgJycsCgkJCW1lc3NhZ2VUb3A6ICAgIGluZm8ubWVzc2FnZVRvcCB8fCAnJywKCQkJbWVzc2FnZUJvdHRvbTogaW5mby5tZXNzYWdlQm90dG9tIHx8ICcnLAoJCQljb2xXaWR0aDogICAgICByYXRpb3MudG9BcnJheSgpLAoJCQlvcmllbnRhdGlvbjogICBjb25maWcub3JpZW50YXRpb24sCgkJCXNpemU6ICAgICAgICAgIGNvbmZpZy5wYWdlU2l6ZSwKCQkJaGVhZGVyOiAgICAgICAgY29uZmlnLmhlYWRlciA/IGRhdGEuaGVhZGVyIDogbnVsbCwKCQkJZm9vdGVyOiAgICAgICAgY29uZmlnLmZvb3RlciA/IGRhdGEuZm9vdGVyIDogbnVsbCwKCQkJYm9keTogICAgICAgICAgZGF0YS5ib2R5CgkJfSApICk7CgoJCXRoaXMucHJvY2Vzc2luZyggZmFsc2UgKTsKCX0sCgoJZXh0ZW5zaW9uOiAnLnBkZicsCgoJb3JpZW50YXRpb246ICdwb3J0cmFpdCcsCgoJcGFnZVNpemU6ICdBNCcsCgoJbmV3bGluZTogJ1xuJwp9ICk7CgoKcmV0dXJuIERhdGFUYWJsZS5CdXR0b25zOwp9KSk7CgoKLyohCiAqIEhUTUw1IGV4cG9ydCBidXR0b25zIGZvciBCdXR0b25zIGFuZCBEYXRhVGFibGVzLgogKiAyMDE2IFNwcnlNZWRpYSBMdGQgLSBkYXRhdGFibGVzLm5ldC9saWNlbnNlCiAqCiAqIEZpbGVTYXZlci5qcyAoMS4zLjMpIC0gTUlUIGxpY2Vuc2UKICogQ29weXJpZ2h0IMKpIDIwMTYgRWxpIEdyZXkgLSBodHRwOi8vZWxpZ3JleS5jb20KICovCgooZnVuY3Rpb24oIGZhY3RvcnkgKXsKCWlmICggdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkgewoJCS8vIEFNRAoJCWRlZmluZSggWydqcXVlcnknLCAnZGF0YXRhYmxlcy5uZXQnLCAnZGF0YXRhYmxlcy5uZXQtYnV0dG9ucyddLCBmdW5jdGlvbiAoICQgKSB7CgkJCXJldHVybiBmYWN0b3J5KCAkLCB3aW5kb3csIGRvY3VtZW50ICk7CgkJfSApOwoJfQoJZWxzZSBpZiAoIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyApIHsKCQkvLyBDb21tb25KUwoJCW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJvb3QsICQsIGpzemlwLCBwZGZtYWtlKSB7CgkJCWlmICggISByb290ICkgewoJCQkJcm9vdCA9IHdpbmRvdzsKCQkJfQoKCQkJaWYgKCAhICQgfHwgISAkLmZuLmRhdGFUYWJsZSApIHsKCQkJCSQgPSByZXF1aXJlKCdkYXRhdGFibGVzLm5ldCcpKHJvb3QsICQpLiQ7CgkJCX0KCgkJCWlmICggISAkLmZuLmRhdGFUYWJsZS5CdXR0b25zICkgewoJCQkJcmVxdWlyZSgnZGF0YXRhYmxlcy5uZXQtYnV0dG9ucycpKHJvb3QsICQpOwoJCQl9CgoJCQlyZXR1cm4gZmFjdG9yeSggJCwgcm9vdCwgcm9vdC5kb2N1bWVudCwganN6aXAsIHBkZm1ha2UgKTsKCQl9OwoJfQoJZWxzZSB7CgkJLy8gQnJvd3NlcgoJCWZhY3RvcnkoIGpRdWVyeSwgd2luZG93LCBkb2N1bWVudCApOwoJfQp9KGZ1bmN0aW9uKCAkLCB3aW5kb3csIGRvY3VtZW50LCBqc3ppcCwgcGRmbWFrZSwgdW5kZWZpbmVkICkgewondXNlIHN0cmljdCc7CnZhciBEYXRhVGFibGUgPSAkLmZuLmRhdGFUYWJsZTsKCi8vIEFsbG93IHRoZSBjb25zdHJ1Y3RvciB0byBwYXNzIGluIEpTWmlwIGFuZCBQREZNYWtlIGZyb20gZXh0ZXJuYWwgcmVxdWlyZXMuCi8vIE90aGVyd2lzZSwgdXNlIGdsb2JhbGx5IGRlZmluZWQgdmFyaWFibGVzLCBpZiB0aGV5IGFyZSBhdmFpbGFibGUuCmZ1bmN0aW9uIF9qc1ppcCAoKSB7CglyZXR1cm4ganN6aXAgfHwgd2luZG93LkpTWmlwOwp9CmZ1bmN0aW9uIF9wZGZNYWtlICgpIHsKCXJldHVybiBwZGZtYWtlIHx8IHdpbmRvdy5wZGZNYWtlOwp9CgpEYXRhVGFibGUuQnV0dG9ucy5wZGZNYWtlID0gZnVuY3Rpb24gKF8pIHsKCWlmICggISBfICkgewoJCXJldHVybiBfcGRmTWFrZSgpOwoJfQoJcGRmbWFrZSA9IG1fYWtlOwp9CgpEYXRhVGFibGUuQnV0dG9ucy5qc3ppcCA9IGZ1bmN0aW9uIChfKSB7CglpZiAoICEgXyApIHsKCQlyZXR1cm4gX2pzWmlwKCk7Cgl9Cglqc3ppcCA9IF87Cn0KCgovKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKICogRmlsZVNhdmVyLmpzIGRlcGVuZGVuY3kKICovCgovKmpzbGludCBiaXR3aXNlOiB0cnVlLCBpbmRlbnQ6IDQsIGxheGJyZWFrOiB0cnVlLCBsYXhjb21tYTogdHJ1ZSwgc21hcnR0YWJzOiB0cnVlLCBwbHVzcGx1czogdHJ1ZSAqLwoKdmFyIF9zYXZlQXMgPSAoZnVuY3Rpb24odmlldykgewoJInVzZSBzdHJpY3QiOwoJLy8gSUUgPDEwIGlzIGV4cGxpY2l0bHkgdW5zdXBwb3J0ZWQKCWlmICh0eXBlb2YgdmlldyA9PT0gInVuZGVmaW5lZCIgfHwgdHlwZW9mIG5hdmlnYXRvciAhPT0gInVuZGVmaW5lZCIgJiYgL01TSUUgWzEtOV1cLi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkgewoJCXJldHVybjsKCX0KCXZhcgoJCSAgZG9jID0gdmlldy5kb2N1bWVudAoJCSAgLy8gb25seSBnZXQgVVJMIHdoZW4gbmVjZXNzYXJ5IGluIGNhc2UgQmxvYi5qcyBoYXNuJ3Qgb3ZlcnJpZGRlbiBpdCB5ZXQKCQksIGdldF9VUkwgPSBmdW5jdGlvbigpIHsKCQkJcmV0dXJuIHZpZXcuVVJMIHx8IHZpZXcud2Via2l0VVJMIHx8IHZpZXc7CgkJfQoJCSwgc2F2ZV9saW5rID0gZG9jLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsICJhIikKCQksIGNhbl91c2Vfc2F2ZV9saW5rID0gImRvd25sb2FkIiBpbiBzYXZlX2xpbmsKCQksIGNsaWNrID0gZnVuY3Rpb24obm9kZSkgewoJCQl2YXIgZXZlbnQgPSBuZXcgTW91c2VFdmVudCgiY2xpY2siKTsKCQkJbm9kZS5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKCQl9CgkJLCBpc19zYWZhcmkgPSAvY29uc3RydWN0b3IvaS50ZXN0KHZpZXcuSFRNTEVsZW1lbnQpIHx8IHZpZXcuc2FmYXJpCgkJLCBpc19jaHJvbWVfaW9zID0vQ3JpT1NcL1tcZF0rLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpCgkJLCB0aHJvd19vdXRzaWRlID0gZnVuY3Rpb24oZXgpIHsKCQkJKHZpZXcuc2V0SW1tZWRpYXRlIHx8IHZpZXcuc2V0VGltZW91dCkoZnVuY3Rpb24oKSB7CgkJCQl0aHJvdyBleDsKCQkJfSwgMCk7CgkJfQoJCSwgZm9yY2Vfc2F2ZWFibGVfdHlwZSA9ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iCgkJLy8gdGhlIEJsb2IgQVBJIGlzIGZ1bmRhbWVudGFsbHkgYnJva2VuIGFzIHRoZXJlIGlzIG5vICJkb3dubG9hZGZpbmlzaGVkIiBldmVudCB0byBzdWJzY3JpYmUgdG8KCQksIGFyYml0cmFyeV9yZXZva2VfdGltZW91dCA9IDEwMDAgKiA0MCAvLyBpbiBtcwoJCSwgcmV2b2tlID0gZnVuY3Rpb24oZmlsZSkgewoJCQl2YXIgcmV2b2tlciA9IGZ1bmN0aW9uKCkgewoJCQkJaWYgKHR5cGVvZiBmaWxlID09PSAic3RyaW5nIikgeyAvLyBmaWxlIGlzIGFuIG9iamVjdCBVUkwKCQkJCQlnZXRfVVJMKCkucmV2b2tlT2JqZWN0VVJMKGZpbGUpOwoJCQkJfSBlbHNlIHsgLy8gZmlsZSBpcyBhIEZpbGUKCQkJCQlmaWxlLnJlbW92ZSgpOwoJCQkJfQoJCQl9OwoJCQlzZXRUaW1lb3V0KHJldm9rZXIsIGFyYml0cmFyeV9yZXZva2VfdGltZW91dCk7CgkJfQoJCSwgZGlzcGF0Y2ggPSBmdW5jdGlvbihmaWxlc2F2ZXIsIGV2ZW50X3R5cGVzLCBldmVudCkgewoJCQlldmVudF90eXBlcyA9IFtdLmNvbmNhdChldmVudF90eXBlcyk7CgkJCXZhciBpID0gZXZlbnRfdHlwZXMubGVuZ3RoOwoJCQl3aGlsZSAoaS0tKSB7CgkJCQl2YXIgbGlzdGVuZXIgPSBmaWxlc2F2ZXJbIm9uIiArIGV2ZW50X3R5cGVzW2ldXTsKCQkJCWlmICh0eXBlb2YgbGlzdGVuZXIgPT09ICJmdW5jdGlvbiIpIHsKCQkJCQl0cnkgewoJCQkJCQlsaXN0ZW5lci5jYWxsKGZpbGVzYXZlciwgZXZlbnQgfHwgZmlsZXNhdmVyKTsKCQkJCQl9IGNhdGNoIChleCkgewoJCQkJCQl0aHJvd19vdXRzaWRlKGV4KTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJLCBhdXRvX2JvbSA9IGZ1bmN0aW9uKGJsb2IpIHsKCQkJLy8gcHJlcGVuZCBCT00gZm9yIFVURi04IFhNTCBhbmQgdGV4dC8qIHR5cGVzIChpbmNsdWRpbmcgSFRNTCkKCQkJLy8gbm90ZTogeW91ciBicm93c2VyIHdpbGwgYXV0b21hdGljYWxseSBjb252ZXJ0IFVURi0xNiBVK0ZFRkYgdG8gRUYgQkIgQkYKCQkJaWYgKC9eXHMqKD86dGV4dFwvXFMqfGFwcGxpY2F0aW9uXC94bWx8XFMqXC9cUypcK3htbClccyo7LipjaGFyc2V0XHMqPVxzKnV0Zi04L2kudGVzdChibG9iLnR5cGUpKSB7CgkJCQlyZXR1cm4gbmV3IEJsb2IoW1N0cmluZy5mcm9tQ2hhckNvZGUoMHhGRUZGKSwgYmxvYl0sIHt0eXBlOiBibG9iLnR5cGV9KTsKCQkJfQoJCQlyZXR1cm4gYmxvYjsKCQl9CgkJLCBGaWxlU2F2ZXIgPSBmdW5jdGlvbihibG9iLCBuYW1lLCBub19hdXRvX2JvbSkgewoJCQlpZiAoIW5vX2F1dG9fYm9tKSB7CgkJCQlibG9iID0gYXV0b19ib20oYmxvYik7CgkJCX0KCQkJLy8gRmlyc3QgdHJ5IGEuZG93bmxvYWQsIHRoZW4gd2ViIGZpbGVzeXN0ZW0sIHRoZW4gb2JqZWN0IFVSTHMKCQkJdmFyCgkJCQkgIGZpbGVzYXZlciA9IHRoaXMKCQkJCSwgdHlwZSA9IGJsb2IudHlwZQoJCQkJLCBmb3JjZSA9IHR5cGUgPT09IGZvcmNlX3NhdmVhYmxlX3R5cGUKCQkJCSwgb2JqZWN0X3VybAoJCQkJLCBkaXNwYXRjaF9hbGwgPSBmdW5jdGlvbigpIHsKCQkJCQlkaXNwYXRjaChmaWxlc2F2ZXIsICJ3cml0ZXN0YXJ0IHByb2dyZXNzIHdyaXRlIHdyaXRlZW5kIi5zcGxpdCgiICIpKTsKCQkJCX0KCQkJCS8vIG9uIGFueSBmaWxlc3lzIGVycm9ycyByZXZlcnQgdG8gc2F2aW5nIHdpdGggb2JqZWN0IFVSTHMKCQkJCSwgZnNfZXJyb3IgPSBmdW5jdGlvbigpIHsKCQkJCQlpZiAoKGlzX2Nocm9tZV9pb3MgfHwgKGZvcmNlICYmIGlzX3NhZmFyaSkpICYmIHZpZXcuRmlsZVJlYWRlcikgewoJCQkJCQkvLyBTYWZhcmkgZG9lc24ndCBhbGxvdyBkb3dubG9hZGluZyBvZiBibG9iIHVybHMKCQkJCQkJdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CgkJCQkJCXJlYWRlci5vbmxvYWRlbmQgPSBmdW5jdGlvbigpIHsKCQkJCQkJCXZhciB1cmwgPSBpc19jaHJvbWVfaW9zID8gcmVhZGVyLnJlc3VsdCA6IHJlYWRlci5yZXN1bHQucmVwbGFjZSgvXmRhdGE6W147XSo7LywgJ2RhdGE6YXR0YWNobWVudC9maWxlOycpOwoJCQkJCQkJdmFyIHBvcHVwID0gdmlldy5vcGVuKHVybCwgJ19ibGFuaycpOwoJCQkJCQkJaWYoIXBvcHVwKSB2aWV3LmxvY2F0aW9uLmhyZWYgPSB1cmw7CgkJCQkJCQl1cmw9dW5kZWZpbmVkOyAvLyByZWxlYXNlIHJlZmVyZW5jZSBiZWZvcmUgZGlzcGF0Y2hpbmcKCQkJCQkJCWZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLkRPTkU7CgkJCQkJCQlkaXNwYXRjaF9hbGwoKTsKCQkJCQkJfTsKCQkJCQkJcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7CgkJCQkJCWZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLklOSVQ7CgkJCQkJCXJldHVybjsKCQkJCQl9CgkJCQkJLy8gZG9uJ3QgY3JlYXRlIG1vcmUgb2JqZWN0IFVSTHMgdGhhbiBuZWVkZWQKCQkJCQlpZiAoIW9iamVjdF91cmwpIHsKCQkJCQkJb2JqZWN0X3VybCA9IGdldF9VUkwoKS5jcmVhdGVPYmplY3RVUkwoYmxvYik7CgkJCQkJfQoJCQkJCWlmIChmb3JjZSkgewoJCQkJCQl2aWV3LmxvY2F0aW9uLmhyZWYgPSBvYmplY3RfdXJsOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXZhciBvcGVuZWQgPSB2aWV3Lm9wZW4ob2JqZWN0X3VybCwgIl9ibGFuayIpOwoJCQkJCQlpZiAoIW9wZW5lZCkgewoJCQkJCQkJLy8gQXBwbGUgZG9lcyBub3QgYWxsb3cgd2luZG93Lm9wZW4sIHNlZSBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbGlicmFyeS9zYWZhcmkvZG9jdW1lbnRhdGlvbi9Ub29scy9Db25jZXB0dWFsL1NhZmFyaUV4dGVuc2lvbkd1aWRlL1dvcmtpbmd3aXRoV2luZG93c2FuZFRhYnMvV29ya2luZ3dpdGhXaW5kb3dzYW5kVGFicy5odG1sCgkJCQkJCQl2aWV3LmxvY2F0aW9uLmhyZWYgPSBvYmplY3RfdXJsOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLkRPTkU7CgkJCQkJZGlzcGF0Y2hfYWxsKCk7CgkJCQkJcmV2b2tlKG9iamVjdF91cmwpOwoJCQkJfQoJCQk7CgkJCWZpbGVzYXZlci5yZWFkeVN0YXRlID0gZmlsZXNhdmVyLklOSVQ7CgoJCQlpZiAoY2FuX3VzZV9zYXZlX2xpbmspIHsKCQkJCW9iamVjdF91cmwgPSBnZXRfVVJMKCkuY3JlYXRlT2JqZWN0VVJMKGJsb2IpOwoJCQkJc2V0VGltZW91dChmdW5jdGlvbigpIHsKCQkJCQlzYXZlX2xpbmsuaHJlZiA9IG9iamVjdF91cmw7CgkJCQkJc2F2ZV9saW5rLmRvd25sb2FkID0gbmFtZTsKCQkJCQljbGljayhzYXZlX2xpbmspOwoJCQkJCWRpc3BhdGNoX2FsbCgpOwoJCQkJCXJldm9rZShvYmplY3RfdXJsKTsKCQkJCQlmaWxlc2F2ZXIucmVhZHlTdGF0ZSA9IGZpbGVzYXZlci5ET05FOwoJCQkJfSk7CgkJCQlyZXR1cm47CgkJCX0KCgkJCWZzX2Vycm9yKCk7CgkJfQoJCSwgRlNfcHJvdG8gPSBGaWxlU2F2ZXIucHJvdG90eXBlCgkJLCBzYXZlQXMgPSBmdW5jdGlvbihibG9iLCBuYW1lLCBub19hdXRvX2JvbSkgewoJCQlyZXR1cm4gbmV3IEZpbGVTYXZlcihibG9iLCBuYW1lIHx8IGJsb2IubmFtZSB8fCAiZG93bmxvYWQiLCBub19hdXRvX2JvbSk7CgkJfQoJOwoJLy8gSUUgMTArIChuYXRpdmUgc2F2ZUFzKQoJaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICJ1bmRlZmluZWQiICYmIG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKSB7CgkJcmV0dXJuIGZ1bmN0aW9uKGJsb2IsIG5hbWUsIG5vX2F1dG9fYm9tKSB7CgkJCW5hbWUgPSBuYW1lIHx8IGJsb2IubmFtZSB8fCAiZG93bmxvYWQiOwoKCQkJaWYgKCFub19hdXRvX2JvbSkgewoJCQkJYmxvYiA9IGF1dG9fYm9tKGJsb2IpOwoJCQl9CgkJCXJldHVybiBuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihibG9iLCBuYW1lKTsKCQl9OwoJfQoKCUZTX3Byb3RvLmFib3J0ID0gZnVuY3Rpb24oKXt9OwoJRlNfcHJvdG8ucmVhZHlTdGF0ZSA9IEZTX3Byb3RvLklOSVQgPSAwOwoJRlNfcHJvdG8uV1JJVElORyA9IDE7CglGU19wcm90by5ET05FID0gMjsKCglGU19wcm90by5lcnJvciA9CglGU19wcm90by5vbndyaXRlc3RhcnQgPQoJRlNfcHJvdG8ub25wcm9ncmVzcyA9CglGU19wcm90by5vbndyaXRlID0KCUZTX3Byb3RvLm9uYWJvcnQgPQoJRlNfcHJvdG8ub25lcnJvciA9CglGU19wcm90by5vbndyaXRlZW5kID0KCQludWxsOwoKCXJldHVybiBzYXZlQXM7Cn0oCgkgICB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgJiYgc2VsZgoJfHwgdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgJiYgd2luZG93Cgl8fCB0aGlzLmNvbnRlbnQKKSk7CgoKLy8gRXhwb3NlIGZpbGUgc2F2ZXIgb24gdGhlIERhdGFUYWJsZXMgQVBJLiBDYW4ndCBhdHRhY2ggdG8gYERhdGFUYWJsZXMuQnV0dG9uc2AKLy8gc2luY2UgdGhpcyBmaWxlIGNhbiBiZSBsb2FkZWQgYmVmb3JlIEJ1dHRvbidzIGNvcmUhCkRhdGFUYWJsZS5maWxlU2F2ZSA9IF9zYXZlQXM7CgoKLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCiAqIExvY2FsIChwcml2YXRlKSBmdW5jdGlvbnMKICovCgovKioKICogR2V0IHRoZSBzaGVldCBuYW1lIGZvciBFeGNlbCBleHBvcnRzLgogKgogKiBAcGFyYW0ge29iamVjdH0JY29uZmlnIEJ1dHRvbiBjb25maWd1cmF0aW9uCiAqLwp2YXIgX3NoZWV0bmFtZSA9IGZ1bmN0aW9uICggY29uZmlnICkKewoJdmFyIHNoZWV0TmFtZSA9ICdTaGVldDEnOwoKCWlmICggY29uZmlnLnNoZWV0TmFtZSApIHsKCQlzaGVldE5hbWUgPSBjb25maWcuc2hlZXROYW1lLnJlcGxhY2UoL1tcW1xdXCpcL1xcXD9cOl0vZywgJycpOwoJfQoKCXJldHVybiBzaGVldE5hbWU7Cn07CgovKioKICogR2V0IHRoZSBuZXdsaW5lIGNoYXJhY3RlcihzKQogKgogKiBAcGFyYW0ge29iamVjdH0JY29uZmlnIEJ1dHRvbiBjb25maWd1cmF0aW9uCiAqIEByZXR1cm4ge3N0cmluZ30JCQkJTmV3bGluZSBjaGFyYWN0ZXIKICovCnZhciBfbmV3TGluZSA9IGZ1bmN0aW9uICggY29uZmlnICkKewoJcmV0dXJuIGNvbmZpZy5uZXdsaW5lID8KCQljb25maWcubmV3bGluZSA6CgkJbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvV2luZG93cy8pID8KCQkJJ1xyXG4nIDoKCQkJJ1xuJzsKfTsKCi8qKgogKiBDb21iaW5lIHRoZSBkYXRhIGZyb20gdGhlIGBidXR0b25zLmV4cG9ydERhdGFgIG1ldGhvZCBpbnRvIGEgc3RyaW5nIHRoYXQKICogd2lsbCBiZSB1c2VkIGluIHRoZSBleHBvcnQgZmlsZS4KICoKICogQHBhcmFtCXtEYXRhVGFibGUuQXBpfSBkdAkJIERhdGFUYWJsZXMgQVBJIGluc3RhbmNlCiAqIEBwYXJhbQl7b2JqZWN0fQkJCQljb25maWcgQnV0dG9uIGNvbmZpZ3VyYXRpb24KICogQHJldHVybiB7b2JqZWN0fQkJCQkJCQkgVGhlIGRhdGEgdG8gZXhwb3J0CiAqLwp2YXIgX2V4cG9ydERhdGEgPSBmdW5jdGlvbiAoIGR0LCBjb25maWcgKQp7Cgl2YXIgbmV3TGluZSA9IF9uZXdMaW5lKCBjb25maWcgKTsKCXZhciBkYXRhID0gZHQuYnV0dG9ucy5leHBvcnREYXRhKCBjb25maWcuZXhwb3J0T3B0aW9ucyApOwoJdmFyIGJvdW5kYXJ5ID0gY29uZmlnLmZpZWxkQm91bmRhcnk7Cgl2YXIgc2VwYXJhdG9yID0gY29uZmlnLmZpZWxkU2VwYXJhdG9yOwoJdmFyIHJlQm91bmRhcnkgPSBuZXcgUmVnRXhwKCBib3VuZGFyeSwgJ2cnICk7Cgl2YXIgZXNjYXBlQ2hhciA9IGNvbmZpZy5lc2NhcGVDaGFyICE9PSB1bmRlZmluZWQgPwoJCWNvbmZpZy5lc2NhcGVDaGFyIDoKCQknXFwnOwoJdmFyIGpvaW4gPSBmdW5jdGlvbiAoIGEgKSB7CgkJdmFyIHMgPSAnJzsKCgkJLy8gSWYgdGhlcmUgaXMgYSBmaWVsZCBib3VuZGFyeSwgdGhlbiB3ZSBtaWdodCBuZWVkIHRvIGVzY2FwZSBpdCBpbgoJCS8vIHRoZSBzb3VyY2UgZGF0YQoJCWZvciAoIHZhciBpPTAsIGllbj1hLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQlpZiAoIGkgPiAwICkgewoJCQkJcyArPSBzZXBhcmF0b3I7CgkJCX0KCgkJCXMgKz0gYm91bmRhcnkgPwoJCQkJYm91bmRhcnkgKyAoJycgKyBhW2ldKS5yZXBsYWNlKCByZUJvdW5kYXJ5LCBlc2NhcGVDaGFyK2JvdW5kYXJ5ICkgKyBib3VuZGFyeSA6CgkJCQlhW2ldOwoJCX0KCgkJcmV0dXJuIHM7Cgl9OwoKCXZhciBoZWFkZXIgPSBjb25maWcuaGVhZGVyID8gam9pbiggZGF0YS5oZWFkZXIgKStuZXdMaW5lIDogJyc7Cgl2YXIgZm9vdGVyID0gY29uZmlnLmZvb3RlciAmJiBkYXRhLmZvb3RlciA/IG5ld0xpbmUram9pbiggZGF0YS5mb290ZXIgKSA6ICcnOwoJdmFyIGJvZHkgPSBbXTsKCglmb3IgKCB2YXIgaT0wLCBpZW49ZGF0YS5ib2R5Lmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCWJvZHkucHVzaCggam9pbiggZGF0YS5ib2R5W2ldICkgKTsKCX0KCglyZXR1cm4gewoJCXN0cjogaGVhZGVyICsgYm9keS5qb2luKCBuZXdMaW5lICkgKyBmb290ZXIsCgkJcm93czogYm9keS5sZW5ndGgKCX07Cn07CgovKioKICogT2xkZXIgdmVyc2lvbnMgb2YgU2FmYXJpIChwcmlvciB0byB0ZWNoIHByZXZpZXcgMTgpIGRvbid0IHN1cHBvcnQgdGhlCiAqIGRvd25sb2FkIG9wdGlvbiByZXF1aXJlZC4KICoKICogQHJldHVybiB7Qm9vbGVhbn0gYHRydWVgIGlmIG9sZCBTYWZhcmkKICovCnZhciBfaXNEdWZmU2FmYXJpID0gZnVuY3Rpb24gKCkKewoJdmFyIHNhZmFyaSA9IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignU2FmYXJpJykgIT09IC0xICYmCgkJbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUnKSA9PT0gLTEgJiYKCQluYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ09wZXJhJykgPT09IC0xOwoKCWlmICggISBzYWZhcmkgKSB7CgkJcmV0dXJuIGZhbHNlOwoJfQoKCXZhciB2ZXJzaW9uID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCggL0FwcGxlV2ViS2l0XC8oXGQrXC5cZCspLyApOwoJaWYgKCB2ZXJzaW9uICYmIHZlcnNpb24ubGVuZ3RoID4gMSAmJiB2ZXJzaW9uWzFdKjEgPCA2MDMuMSApIHsKCQlyZXR1cm4gdHJ1ZTsKCX0KCglyZXR1cm4gZmFsc2U7Cn07CgovKioKICogQ29udmVydCBmcm9tIG51bWVyaWMgcG9zaXRpb24gdG8gbGV0dGVyIGZvciBjb2x1bW4gbmFtZXMgaW4gRXhjZWwKICogQHBhcmFtICB7aW50fSBuIENvbHVtbiBudW1iZXIKICogQHJldHVybiB7c3RyaW5nfSBDb2x1bW4gbGV0dGVyKHMpIG5hbWUKICovCmZ1bmN0aW9uIGNyZWF0ZUNlbGxQb3MoIG4gKXsKCXZhciBvcmRBID0gJ0EnLmNoYXJDb2RlQXQoMCk7Cgl2YXIgb3JkWiA9ICdaJy5jaGFyQ29kZUF0KDApOwoJdmFyIGxlbiA9IG9yZFogLSBvcmRBICsgMTsKCXZhciBzID0gIiI7CgoJd2hpbGUoIG4gPj0gMCApIHsKCQlzID0gU3RyaW5nLmZyb21DaGFyQ29kZShuICUgbGVuICsgb3JkQSkgKyBzOwoJCW4gPSBNYXRoLmZsb29yKG4gLyBsZW4pIC0gMTsKCX0KCglyZXR1cm4gczsKfQoKdHJ5IHsKCXZhciBfc2VyaWFsaXNlciA9IG5ldyBYTUxTZXJpYWxpemVyKCk7Cgl2YXIgX2llRXhjZWw7Cn0KY2F0Y2ggKHQpIHt9CgovKioKICogUmVjdXJzaXZlbHkgYWRkIFhNTCBmaWxlcyBmcm9tIGFuIG9iamVjdCdzIHN0cnVjdHVyZSB0byBhIFpJUCBmaWxlLiBUaGlzCiAqIGFsbG93cyB0aGUgWFNMWCBmaWxlIHRvIGJlIGVhc2lseSBkZWZpbmVkIHdpdGggYW4gb2JqZWN0J3Mgc3RydWN0dXJlIG1hdGNoaW5nCiAqIHRoZSBmaWxlcyBzdHJ1Y3R1cmUuCiAqCiAqIEBwYXJhbSB7SlNaaXB9IHppcCBaSVAgcGFja2FnZQogKiBAcGFyYW0ge29iamVjdH0gb2JqIE9iamVjdCB0byBhZGQgKHJlY3Vyc2l2ZSkKICovCmZ1bmN0aW9uIF9hZGRUb1ppcCggemlwLCBvYmogKSB7CglpZiAoIF9pZUV4Y2VsID09PSB1bmRlZmluZWQgKSB7CgkJLy8gRGV0ZWN0IGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggSUUncyBfYXdmdWxfIHNlcmlhbGlzZXIgYnkgc2VlaW5nIGlmIGl0CgkJLy8gZHJvcCBhdHRyaWJ1dGVzCgkJX2llRXhjZWwgPSBfc2VyaWFsaXNlcgoJCQkuc2VyaWFsaXplVG9TdHJpbmcoCgkJCQkkLnBhcnNlWE1MKCBleGNlbFN0cmluZ3NbJ3hsL3dvcmtzaGVldHMvc2hlZXQxLnhtbCddICkKCQkJKQoJCQkuaW5kZXhPZiggJ3htbG5zOnInICkgPT09IC0xOwoJfQoKCSQuZWFjaCggb2JqLCBmdW5jdGlvbiAoIG5hbWUsIHZhbCApIHsKCQlpZiAoICQuaXNQbGFpbk9iamVjdCggdmFsICkgKSB7CgkJCXZhciBuZXdEaXIgPSB6aXAuZm9sZGVyKCBuYW1lICk7CgkJCV9hZGRUb1ppcCggbmV3RGlyLCB2YWwgKTsKCQl9CgkJZWxzZSB7CgkJCWlmICggX2llRXhjZWwgKSB7CgkJCQkvLyBJRSdzIFhNTCBzZXJpYWxpc2VyIHdpbGwgZHJvcCBzb21lIG5hbWUgc3BhY2UgYXR0cmlidXRlcyBmcm9tCgkJCQkvLyBmcm9tIHRoZSByb290IG5vZGUsIHNvIHdlIG5lZWQgdG8gc2F2ZSB0aGVtLiBEbyB0aGlzIGJ5CgkJCQkvLyByZXBsYWNpbmcgdGhlIG5hbWVzcGFjZSBub2RlcyB3aXRoIGEgcmVndWxhciBhdHRyaWJ1dGUgdGhhdAoJCQkJLy8gd2UgY29udmVydCBiYWNrIHdoZW4gc2VyaWFsaXNlZC4gRWRnZSBkb2VzIG5vdCBoYXZlIHRoaXMKCQkJCS8vIGlzc3VlCgkJCQl2YXIgd29ya3NoZWV0ID0gdmFsLmNoaWxkTm9kZXNbMF07CgkJCQl2YXIgaSwgaWVuOwoJCQkJdmFyIGF0dHJzID0gW107CgoJCQkJZm9yICggaT13b3Jrc2hlZXQuYXR0cmlidXRlcy5sZW5ndGgtMSA7IGk+PTAgOyBpLS0gKSB7CgkJCQkJdmFyIGF0dHJOYW1lID0gd29ya3NoZWV0LmF0dHJpYnV0ZXNbaV0ubm9kZU5hbWU7CgkJCQkJdmFyIGF0dHJWYWx1ZSA9IHdvcmtzaGVldC5hdHRyaWJ1dGVzW2ldLm5vZGVWYWx1ZTsKCgkJCQkJaWYgKCBhdHRyTmFtZS5pbmRleE9mKCAnOicgKSAhPT0gLTEgKSB7CgkJCQkJCWF0dHJzLnB1c2goIHsgbmFtZTogYXR0ck5hbWUsIHZhbHVlOiBhdHRyVmFsdWUgfSApOwoKCQkJCQkJd29ya3NoZWV0LnJlbW92ZUF0dHJpYnV0ZSggYXR0ck5hbWUgKTsKCQkJCQl9CgkJCQl9CgoJCQkJZm9yICggaT0wLCBpZW49YXR0cnMubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQkJdmFyIGF0dHIgPSB2YWwuY3JlYXRlQXR0cmlidXRlKCBhdHRyc1tpXS5uYW1lLnJlcGxhY2UoICc6JywgJ19kdF9iX25hbWVzcGFjZV90b2tlbl8nICkgKTsKCQkJCQlhdHRyLnZhbHVlID0gYXR0cnNbaV0udmFsdWU7CgkJCQkJd29ya3NoZWV0LnNldEF0dHJpYnV0ZU5vZGUoIGF0dHIgKTsKCQkJCX0KCQkJfQoKCQkJdmFyIHN0ciA9IF9zZXJpYWxpc2VyLnNlcmlhbGl6ZVRvU3RyaW5nKHZhbCk7CgoJCQkvLyBGaXggSUUncyBYTUwKCQkJaWYgKCBfaWVFeGNlbCApIHsKCQkJCS8vIElFIGRvZXNuJ3QgaW5jbHVkZSB0aGUgWE1MIGRlY2xhcmF0aW9uCgkJCQlpZiAoIHN0ci5pbmRleE9mKCAnPD94bWwnICkgPT09IC0xICkgewoJCQkJCXN0ciA9ICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+JytzdHI7CgkJCQl9CgoJCQkJLy8gUmV0dXJuIG5hbWVzcGFjZSBhdHRyaWJ1dGVzIHRvIGJlaW5nIGFzIHN1Y2gKCQkJCXN0ciA9IHN0ci5yZXBsYWNlKCAvX2R0X2JfbmFtZXNwYWNlX3Rva2VuXy9nLCAnOicgKTsKCgkJCQkvLyBSZW1vdmUgdGVzdGluZyBuYW1lIHNwYWNlIHRoYXQgSUUgcHV0cyBpbnRvIHRoZSBzcGFjZSBwcmVzZXJ2ZSBhdHRyCgkJCQlzdHIgPSBzdHIucmVwbGFjZSggL3htbG5zOk5TW1xkXSs9IiIgTlNbXGRdKzovZywgJycgKTsKCQkJfQoKCQkJLy8gU2FmYXJpLCBJRSBhbmQgRWRnZSB3aWxsIHB1dCBlbXB0eSBuYW1lIHNwYWNlIGF0dHJpYnV0ZXMgb250bwoJCQkvLyB2YXJpb3VzIGVsZW1lbnRzIG1ha2luZyB0aGVtIHVzZWxlc3MuIFRoaXMgc3RyaXBzIHRoZW0gb3V0CgkJCXN0ciA9IHN0ci5yZXBsYWNlKCAvPChbXjw+XSo/KSB4bWxucz0iIihbXjw+XSo/KT4vZywgJzwkMSAkMj4nICk7CgoJCQl6aXAuZmlsZSggbmFtZSwgc3RyICk7CgkJfQoJfSApOwp9CgovKioKICogQ3JlYXRlIGFuIFhNTCBub2RlIGFuZCBhZGQgYW55IGNoaWxkcmVuLCBhdHRyaWJ1dGVzLCBldGMgd2l0aG91dCBuZWVkaW5nIHRvCiAqIGJlIHZlcmJvc2UgaW4gdGhlIERPTS4KICoKICogQHBhcmFtICB7b2JqZWN0fSBkb2MgICAgICBYTUwgZG9jdW1lbnQKICogQHBhcmFtICB7c3RyaW5nfSBub2RlTmFtZSBOb2RlIG5hbWUKICogQHBhcmFtICB7b2JqZWN0fSBvcHRzICAgICBPcHRpb25zIC0gY2FuIGJlIGBhdHRyYCAoYXR0cmlidXRlcyksIGBjaGlsZHJlbmAKICogICAoY2hpbGQgbm9kZXMpIGFuZCBgdGV4dGAgKHRleHQgY29udGVudCkKICogQHJldHVybiB7bm9kZX0gICAgICAgICAgICBDcmVhdGVkIG5vZGUKICovCmZ1bmN0aW9uIF9jcmVhdGVOb2RlKCBkb2MsIG5vZGVOYW1lLCBvcHRzICkgewoJdmFyIHRlbXBOb2RlID0gZG9jLmNyZWF0ZUVsZW1lbnQoIG5vZGVOYW1lICk7CgoJaWYgKCBvcHRzICkgewoJCWlmICggb3B0cy5hdHRyICkgewoJCQkkKHRlbXBOb2RlKS5hdHRyKCBvcHRzLmF0dHIgKTsKCQl9CgoJCWlmICggb3B0cy5jaGlsZHJlbiApIHsKCQkJJC5lYWNoKCBvcHRzLmNoaWxkcmVuLCBmdW5jdGlvbiAoIGtleSwgdmFsdWUgKSB7CgkJCQl0ZW1wTm9kZS5hcHBlbmRDaGlsZCggdmFsdWUgKTsKCQkJfSApOwoJCX0KCgkJaWYgKCBvcHRzLnRleHQgIT09IG51bGwgJiYgb3B0cy50ZXh0ICE9PSB1bmRlZmluZWQgKSB7CgkJCXRlbXBOb2RlLmFwcGVuZENoaWxkKCBkb2MuY3JlYXRlVGV4dE5vZGUoIG9wdHMudGV4dCApICk7CgkJfQoJfQoKCXJldHVybiB0ZW1wTm9kZTsKfQoKLyoqCiAqIEdldCB0aGUgd2lkdGggZm9yIGFuIEV4Y2VsIGNvbHVtbiBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgdGhhdCBjb2x1bW4KICogQHBhcmFtICB7b2JqZWN0fSBkYXRhIERhdGEgZm9yIGV4cG9ydAogKiBAcGFyYW0gIHtpbnR9ICAgIGNvbCAgQ29sdW1uIGluZGV4CiAqIEByZXR1cm4ge2ludH0gICAgICAgICBDb2x1bW4gd2lkdGgKICovCmZ1bmN0aW9uIF9leGNlbENvbFdpZHRoKCBkYXRhLCBjb2wgKSB7Cgl2YXIgbWF4ID0gZGF0YS5oZWFkZXJbY29sXS5sZW5ndGg7Cgl2YXIgbGVuLCBsaW5lU3BsaXQsIHN0cjsKCglpZiAoIGRhdGEuZm9vdGVyICYmIGRhdGEuZm9vdGVyW2NvbF0ubGVuZ3RoID4gbWF4ICkgewoJCW1heCA9IGRhdGEuZm9vdGVyW2NvbF0ubGVuZ3RoOwoJfQoKCWZvciAoIHZhciBpPTAsIGllbj1kYXRhLmJvZHkubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJdmFyIHBvaW50ID0gZGF0YS5ib2R5W2ldW2NvbF07CgkJc3RyID0gcG9pbnQgIT09IG51bGwgJiYgcG9pbnQgIT09IHVuZGVmaW5lZCA/CgkJCXBvaW50LnRvU3RyaW5nKCkgOgoJCQknJzsKCgkJLy8gSWYgdGhlcmUgaXMgYSBuZXdsaW5lIGNoYXJhY3Rlciwgd29ya291dCB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbgoJCS8vIGJhc2VkIG9uIHRoZSBsb25nZXN0IGxpbmUgaW4gdGhlIHN0cmluZwoJCWlmICggc3RyLmluZGV4T2YoJ1xuJykgIT09IC0xICkgewoJCQlsaW5lU3BsaXQgPSBzdHIuc3BsaXQoJ1xuJyk7CgkJCWxpbmVTcGxpdC5zb3J0KCBmdW5jdGlvbiAoYSwgYikgewoJCQkJcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7CgkJCX0gKTsKCgkJCWxlbiA9IGxpbmVTcGxpdFswXS5sZW5ndGg7CgkJfQoJCWVsc2UgewoJCQlsZW4gPSBzdHIubGVuZ3RoOwoJCX0KCgkJaWYgKCBsZW4gPiBtYXggKSB7CgkJCW1heCA9IGxlbjsKCQl9CgoJCS8vIE1heCB3aWR0aCByYXRoZXIgdGhhbiBoYXZpbmcgcG90ZW50aWFsbHkgbWFzc2l2ZSBjb2x1bW4gd2lkdGhzCgkJaWYgKCBtYXggPiA0MCApIHsKCQkJcmV0dXJuIDU0OyAvLyA0MCAqIDEuMzUKCQl9Cgl9CgoJbWF4ICo9IDEuMzU7CgoJLy8gQW5kIGEgbWluIHdpZHRoCglyZXR1cm4gbWF4ID4gNiA/IG1heCA6IDY7Cn0KCi8vIEV4Y2VsIC0gUHJlLWRlZmluZWQgc3RyaW5ncyB0byBidWlsZCBhIGJhc2ljIFhMU1ggZmlsZQp2YXIgZXhjZWxTdHJpbmdzID0gewoJIl9yZWxzLy5yZWxzIjoKCQknPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PicrCgkJJzxSZWxhdGlvbnNoaXBzIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMiPicrCgkJCSc8UmVsYXRpb25zaGlwIElkPSJySWQxIiBUeXBlPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL29mZmljZURvY3VtZW50IiBUYXJnZXQ9InhsL3dvcmtib29rLnhtbCIvPicrCgkJJzwvUmVsYXRpb25zaGlwcz4nLAoKCSJ4bC9fcmVscy93b3JrYm9vay54bWwucmVscyI6CgkJJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4nKwoJCSc8UmVsYXRpb25zaGlwcyB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzIj4nKwoJCQknPFJlbGF0aW9uc2hpcCBJZD0icklkMSIgVHlwZT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiIFRhcmdldD0id29ya3NoZWV0cy9zaGVldDEueG1sIi8+JysKCQkJJzxSZWxhdGlvbnNoaXAgSWQ9InJJZDIiIFR5cGU9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvc3R5bGVzIiBUYXJnZXQ9InN0eWxlcy54bWwiLz4nKwoJCSc8L1JlbGF0aW9uc2hpcHM+JywKCgkiW0NvbnRlbnRfVHlwZXNdLnhtbCI6CgkJJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4nKwoJCSc8VHlwZXMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvY29udGVudC10eXBlcyI+JysKCQkJJzxEZWZhdWx0IEV4dGVuc2lvbj0ieG1sIiBDb250ZW50VHlwZT0iYXBwbGljYXRpb24veG1sIiAvPicrCgkJCSc8RGVmYXVsdCBFeHRlbnNpb249InJlbHMiIENvbnRlbnRUeXBlPSJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5yZWxhdGlvbnNoaXBzK3htbCIgLz4nKwoJCQknPERlZmF1bHQgRXh0ZW5zaW9uPSJqcGVnIiBDb250ZW50VHlwZT0iaW1hZ2UvanBlZyIgLz4nKwoJCQknPE92ZXJyaWRlIFBhcnROYW1lPSIveGwvd29ya2Jvb2sueG1sIiBDb250ZW50VHlwZT0iYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQubWFpbit4bWwiIC8+JysKCQkJJzxPdmVycmlkZSBQYXJ0TmFtZT0iL3hsL3dvcmtzaGVldHMvc2hlZXQxLnhtbCIgQ29udGVudFR5cGU9ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLndvcmtzaGVldCt4bWwiIC8+JysKCQkJJzxPdmVycmlkZSBQYXJ0TmFtZT0iL3hsL3N0eWxlcy54bWwiIENvbnRlbnRUeXBlPSJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zdHlsZXMreG1sIiAvPicrCgkJJzwvVHlwZXM+JywKCgkieGwvd29ya2Jvb2sueG1sIjoKCQknPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PicrCgkJJzx3b3JrYm9vayB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIiB4bWxuczpyPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIj4nKwoJCQknPGZpbGVWZXJzaW9uIGFwcE5hbWU9InhsIiBsYXN0RWRpdGVkPSI1IiBsb3dlc3RFZGl0ZWQ9IjUiIHJ1cEJ1aWxkPSIyNDgxNiIvPicrCgkJCSc8d29ya2Jvb2tQciBzaG93SW5rQW5ub3RhdGlvbj0iMCIgYXV0b0NvbXByZXNzUGljdHVyZXM9IjAiLz4nKwoJCQknPGJvb2tWaWV3cz4nKwoJCQkJJzx3b3JrYm9va1ZpZXcgeFdpbmRvdz0iMCIgeVdpbmRvdz0iMCIgd2luZG93V2lkdGg9IjI1NjAwIiB3aW5kb3dIZWlnaHQ9IjE5MDIwIiB0YWJSYXRpbz0iNTAwIi8+JysKCQkJJzwvYm9va1ZpZXdzPicrCgkJCSc8c2hlZXRzPicrCgkJCQknPHNoZWV0IG5hbWU9IlNoZWV0MSIgc2hlZXRJZD0iMSIgcjppZD0icklkMSIvPicrCgkJCSc8L3NoZWV0cz4nKwoJCQknPGRlZmluZWROYW1lcy8+JysKCQknPC93b3JrYm9vaz4nLAoKCSJ4bC93b3Jrc2hlZXRzL3NoZWV0MS54bWwiOgoJCSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+JysKCQknPHdvcmtzaGVldCB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIiB4bWxuczpyPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIiB4bWxuczptYz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL21hcmt1cC1jb21wYXRpYmlsaXR5LzIwMDYiIG1jOklnbm9yYWJsZT0ieDE0YWMiIHhtbG5zOngxNGFjPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMDkvOS9hYyI+JysKCQkJJzxzaGVldERhdGEvPicrCgkJCSc8bWVyZ2VDZWxscyBjb3VudD0iMCIvPicrCgkJJzwvd29ya3NoZWV0PicsCgoJInhsL3N0eWxlcy54bWwiOgoJCSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PicrCgkJJzxzdHlsZVNoZWV0IHhtbG5zPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW4iIHhtbG5zOm1jPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvbWFya3VwLWNvbXBhdGliaWxpdHkvMjAwNiIgbWM6SWdub3JhYmxlPSJ4MTRhYyIgeG1sbnM6eDE0YWM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAwOS85L2FjIj4nKwoJCQknPG51bUZtdHMgY291bnQ9IjYiPicrCgkJCQknPG51bUZtdCBudW1GbXRJZD0iMTY0IiBmb3JtYXRDb2RlPSIjLCMjMC4wMF8tXCBbJCQtNDVDXSIvPicrCgkJCQknPG51bUZtdCBudW1GbXRJZD0iMTY1IiBmb3JtYXRDb2RlPSImcXVvdDvCoyZxdW90OyMsIyMwLjAwIi8+JysKCQkJCSc8bnVtRm10IG51bUZtdElkPSIxNjYiIGZvcm1hdENvZGU9Ilsk4oKsLTJdXCAjLCMjMC4wMCIvPicrCgkJCQknPG51bUZtdCBudW1GbXRJZD0iMTY3IiBmb3JtYXRDb2RlPSIwLjAlIi8+JysKCQkJCSc8bnVtRm10IG51bUZtdElkPSIxNjgiIGZvcm1hdENvZGU9IiMsIyMwOygjLCMjMCkiLz4nKwoJCQkJJzxudW1GbXQgbnVtRm10SWQ9IjE2OSIgZm9ybWF0Q29kZT0iIywjIzAuMDA7KCMsIyMwLjAwKSIvPicrCgkJCSc8L251bUZtdHM+JysKCQkJJzxmb250cyBjb3VudD0iNSIgeDE0YWM6a25vd25Gb250cz0iMSI+JysKCQkJCSc8Zm9udD4nKwoJCQkJCSc8c3ogdmFsPSIxMSIgLz4nKwoJCQkJCSc8bmFtZSB2YWw9IkNhbGlicmkiIC8+JysKCQkJCSc8L2ZvbnQ+JysKCQkJCSc8Zm9udD4nKwoJCQkJCSc8c3ogdmFsPSIxMSIgLz4nKwoJCQkJCSc8bmFtZSB2YWw9IkNhbGlicmkiIC8+JysKCQkJCQknPGNvbG9yIHJnYj0iRkZGRkZGRkYiIC8+JysKCQkJCSc8L2ZvbnQ+JysKCQkJCSc8Zm9udD4nKwoJCQkJCSc8c3ogdmFsPSIxMSIgLz4nKwoJCQkJCSc8bmFtZSB2YWw9IkNhbGlicmkiIC8+JysKCQkJCQknPGIgLz4nKwoJCQkJJzwvZm9udD4nKwoJCQkJJzxmb250PicrCgkJCQkJJzxzeiB2YWw9IjExIiAvPicrCgkJCQkJJzxuYW1lIHZhbD0iQ2FsaWJyaSIgLz4nKwoJCQkJCSc8aSAvPicrCgkJCQknPC9mb250PicrCgkJCQknPGZvbnQ+JysKCQkJCQknPHN6IHZhbD0iMTEiIC8+JysKCQkJCQknPG5hbWUgdmFsPSJDYWxpYnJpIiAvPicrCgkJCQkJJzx1IC8+JysKCQkJCSc8L2ZvbnQ+JysKCQkJJzwvZm9udHM+JysKCQkJJzxmaWxscyBjb3VudD0iNiI+JysKCQkJCSc8ZmlsbD4nKwoJCQkJCSc8cGF0dGVybkZpbGwgcGF0dGVyblR5cGU9Im5vbmUiIC8+JysKCQkJCSc8L2ZpbGw+JysKCQkJCSc8ZmlsbD4nKyAvLyBFeGNlbCBhcHBlYXJzIHRvIHVzZSB0aGlzIGFzIGEgZG90dGVkIGJhY2tncm91bmQgcmVnYXJkbGVzcyBvZiB2YWx1ZXMgYnV0CgkJCQkJJzxwYXR0ZXJuRmlsbCBwYXR0ZXJuVHlwZT0ibm9uZSIgLz4nKyAvLyB0byBiZSB2YWxpZCB0byB0aGUgc2NoZW1hLCB1c2UgYSBwYXR0ZXJuRmlsbAoJCQkJJzwvZmlsbD4nKwoJCQkJJzxmaWxsPicrCgkJCQkJJzxwYXR0ZXJuRmlsbCBwYXR0ZXJuVHlwZT0ic29saWQiPicrCgkJCQkJCSc8ZmdDb2xvciByZ2I9IkZGRDlEOUQ5IiAvPicrCgkJCQkJCSc8YmdDb2xvciBpbmRleGVkPSI2NCIgLz4nKwoJCQkJCSc8L3BhdHRlcm5GaWxsPicrCgkJCQknPC9maWxsPicrCgkJCQknPGZpbGw+JysKCQkJCQknPHBhdHRlcm5GaWxsIHBhdHRlcm5UeXBlPSJzb2xpZCI+JysKCQkJCQkJJzxmZ0NvbG9yIHJnYj0iRkZEOTk3OTUiIC8+JysKCQkJCQkJJzxiZ0NvbG9yIGluZGV4ZWQ9IjY0IiAvPicrCgkJCQkJJzwvcGF0dGVybkZpbGw+JysKCQkJCSc8L2ZpbGw+JysKCQkJCSc8ZmlsbD4nKwoJCQkJCSc8cGF0dGVybkZpbGwgcGF0dGVyblR5cGU9InNvbGlkIj4nKwoJCQkJCQknPGZnQ29sb3IgcmdiPSJmZmM2ZWZjZSIgLz4nKwoJCQkJCQknPGJnQ29sb3IgaW5kZXhlZD0iNjQiIC8+JysKCQkJCQknPC9wYXR0ZXJuRmlsbD4nKwoJCQkJJzwvZmlsbD4nKwoJCQkJJzxmaWxsPicrCgkJCQkJJzxwYXR0ZXJuRmlsbCBwYXR0ZXJuVHlwZT0ic29saWQiPicrCgkJCQkJCSc8ZmdDb2xvciByZ2I9ImZmYzZjZmVmIiAvPicrCgkJCQkJCSc8YmdDb2xvciBpbmRleGVkPSI2NCIgLz4nKwoJCQkJCSc8L3BhdHRlcm5GaWxsPicrCgkJCQknPC9maWxsPicrCgkJCSc8L2ZpbGxzPicrCgkJCSc8Ym9yZGVycyBjb3VudD0iMiI+JysKCQkJCSc8Ym9yZGVyPicrCgkJCQkJJzxsZWZ0IC8+JysKCQkJCQknPHJpZ2h0IC8+JysKCQkJCQknPHRvcCAvPicrCgkJCQkJJzxib3R0b20gLz4nKwoJCQkJCSc8ZGlhZ29uYWwgLz4nKwoJCQkJJzwvYm9yZGVyPicrCgkJCQknPGJvcmRlciBkaWFnb25hbFVwPSJmYWxzZSIgZGlhZ29uYWxEb3duPSJmYWxzZSI+JysKCQkJCQknPGxlZnQgc3R5bGU9InRoaW4iPicrCgkJCQkJCSc8Y29sb3IgYXV0bz0iMSIgLz4nKwoJCQkJCSc8L2xlZnQ+JysKCQkJCQknPHJpZ2h0IHN0eWxlPSJ0aGluIj4nKwoJCQkJCQknPGNvbG9yIGF1dG89IjEiIC8+JysKCQkJCQknPC9yaWdodD4nKwoJCQkJCSc8dG9wIHN0eWxlPSJ0aGluIj4nKwoJCQkJCQknPGNvbG9yIGF1dG89IjEiIC8+JysKCQkJCQknPC90b3A+JysKCQkJCQknPGJvdHRvbSBzdHlsZT0idGhpbiI+JysKCQkJCQkJJzxjb2xvciBhdXRvPSIxIiAvPicrCgkJCQkJJzwvYm90dG9tPicrCgkJCQkJJzxkaWFnb25hbCAvPicrCgkJCQknPC9ib3JkZXI+JysKCQkJJzwvYm9yZGVycz4nKwoJCQknPGNlbGxTdHlsZVhmcyBjb3VudD0iMSI+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgLz4nKwoJCQknPC9jZWxsU3R5bGVYZnM+JysKCQkJJzxjZWxsWGZzIGNvdW50PSI2NyI+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMSIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMiIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMyIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iNCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIyIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMSIgZmlsbElkPSIyIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMiIgZmlsbElkPSIyIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMyIgZmlsbElkPSIyIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iNCIgZmlsbElkPSIyIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIzIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMSIgZmlsbElkPSIzIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMiIgZmlsbElkPSIzIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMyIgZmlsbElkPSIzIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iNCIgZmlsbElkPSIzIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSI0IiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMSIgZmlsbElkPSI0IiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMiIgZmlsbElkPSI0IiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMyIgZmlsbElkPSI0IiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iNCIgZmlsbElkPSI0IiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSI1IiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMSIgZmlsbElkPSI1IiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMiIgZmlsbElkPSI1IiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMyIgZmlsbElkPSI1IiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iNCIgZmlsbElkPSI1IiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMSIgZmlsbElkPSIwIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMiIgZmlsbElkPSIwIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMyIgZmlsbElkPSIwIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iNCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIyIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMSIgZmlsbElkPSIyIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMiIgZmlsbElkPSIyIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMyIgZmlsbElkPSIyIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iNCIgZmlsbElkPSIyIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIzIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMSIgZmlsbElkPSIzIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMiIgZmlsbElkPSIzIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMyIgZmlsbElkPSIzIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iNCIgZmlsbElkPSIzIiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSI0IiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMSIgZmlsbElkPSI0IiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMiIgZmlsbElkPSI0IiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMyIgZmlsbElkPSI0IiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iNCIgZmlsbElkPSI0IiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSI1IiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMSIgZmlsbElkPSI1IiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMiIgZmlsbElkPSI1IiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMyIgZmlsbElkPSI1IiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iNCIgZmlsbElkPSI1IiBib3JkZXJJZD0iMSIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIiB4ZklkPSIwIiBhcHBseUFsaWdubWVudD0iMSI+JysKCQkJCQknPGFsaWdubWVudCBob3Jpem9udGFsPSJsZWZ0Ii8+JysKCQkJCSc8L3hmPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlBbGlnbm1lbnQ9IjEiPicrCgkJCQkJJzxhbGlnbm1lbnQgaG9yaXpvbnRhbD0iY2VudGVyIi8+JysKCQkJCSc8L3hmPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlBbGlnbm1lbnQ9IjEiPicrCgkJCQkJJzxhbGlnbm1lbnQgaG9yaXpvbnRhbD0icmlnaHQiLz4nKwoJCQkJJzwveGY+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIiB4ZklkPSIwIiBhcHBseUFsaWdubWVudD0iMSI+JysKCQkJCQknPGFsaWdubWVudCBob3Jpem9udGFsPSJmaWxsIi8+JysKCQkJCSc8L3hmPicrCgkJCQknPHhmIG51bUZtdElkPSIwIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlBbGlnbm1lbnQ9IjEiPicrCgkJCQkJJzxhbGlnbm1lbnQgdGV4dFJvdGF0aW9uPSI5MCIvPicrCgkJCQknPC94Zj4nKwoJCQkJJzx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiIHhmSWQ9IjAiIGFwcGx5QWxpZ25tZW50PSIxIj4nKwoJCQkJCSc8YWxpZ25tZW50IHdyYXBUZXh0PSIxIi8+JysKCQkJCSc8L3hmPicrCgkJCQknPHhmIG51bUZtdElkPSI5IiAgIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIiB4ZklkPSIwIiBhcHBseU51bWJlckZvcm1hdD0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIxNjQiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIiB4ZklkPSIwIiBhcHBseU51bWJlckZvcm1hdD0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIxNjUiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIiB4ZklkPSIwIiBhcHBseU51bWJlckZvcm1hdD0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIxNjYiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIiB4ZklkPSIwIiBhcHBseU51bWJlckZvcm1hdD0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIxNjciIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIiB4ZklkPSIwIiBhcHBseU51bWJlckZvcm1hdD0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIxNjgiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIiB4ZklkPSIwIiBhcHBseU51bWJlckZvcm1hdD0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIxNjkiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIiB4ZklkPSIwIiBhcHBseU51bWJlckZvcm1hdD0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIzIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlOdW1iZXJGb3JtYXQ9IjEiLz4nKwoJCQkJJzx4ZiBudW1GbXRJZD0iNCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIiBhcHBseUZvbnQ9IjEiIGFwcGx5RmlsbD0iMSIgYXBwbHlCb3JkZXI9IjEiIHhmSWQ9IjAiIGFwcGx5TnVtYmVyRm9ybWF0PSIxIi8+JysKCQkJCSc8eGYgbnVtRm10SWQ9IjEiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIgYXBwbHlGb250PSIxIiBhcHBseUZpbGw9IjEiIGFwcGx5Qm9yZGVyPSIxIiB4ZklkPSIwIiBhcHBseU51bWJlckZvcm1hdD0iMSIvPicrCgkJCQknPHhmIG51bUZtdElkPSIyIiBmb250SWQ9IjAiIGZpbGxJZD0iMCIgYm9yZGVySWQ9IjAiIGFwcGx5Rm9udD0iMSIgYXBwbHlGaWxsPSIxIiBhcHBseUJvcmRlcj0iMSIgeGZJZD0iMCIgYXBwbHlOdW1iZXJGb3JtYXQ9IjEiLz4nKwoJCQknPC9jZWxsWGZzPicrCgkJCSc8Y2VsbFN0eWxlcyBjb3VudD0iMSI+JysKCQkJCSc8Y2VsbFN0eWxlIG5hbWU9Ik5vcm1hbCIgeGZJZD0iMCIgYnVpbHRpbklkPSIwIiAvPicrCgkJCSc8L2NlbGxTdHlsZXM+JysKCQkJJzxkeGZzIGNvdW50PSIwIiAvPicrCgkJCSc8dGFibGVTdHlsZXMgY291bnQ9IjAiIGRlZmF1bHRUYWJsZVN0eWxlPSJUYWJsZVN0eWxlTWVkaXVtOSIgZGVmYXVsdFBpdm90U3R5bGU9IlBpdm90U3R5bGVNZWRpdW00IiAvPicrCgkJJzwvc3R5bGVTaGVldD4nCn07Ci8vIE5vdGUgd2UgY291bGQgdXNlIDMgYGZvcmAgbG9vcHMgZm9yIHRoZSBzdHlsZXMsIGJ1dCB3aGVuIGd6aXBwZWQgdGhlcmUgaXMKLy8gdmlydHVhbGx5IG5vIGRpZmZlcmVuY2UgaW4gc2l6ZSwgc2luY2UgdGhlIGFib3ZlIGNhbiBiZSBlYXNpbHkgY29tcHJlc3NlZAoKLy8gUGF0dGVybiBtYXRjaGluZyBmb3Igc3BlY2lhbCBudW1iZXIgZm9ybWF0cy4gUGVyaGFwcyB0aGlzIHNob3VsZCBiZSBleHBvc2VkCi8vIHZpYSBhbiBBUEkgaW4gZnV0dXJlPwovLyBSZWY6IHNlY3Rpb24gMy44LjMwIC0gYnVpbHQgaW4gZm9ybWF0dGVycyBpbiBvcGVuIHNwcmVhZHNoZWV0Ci8vICAgaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9uZXdzL1RDNDVfY3VycmVudF93b3JrL09mZmljZSUyME9wZW4lMjBYTUwlMjBQYXJ0JTIwNCUyMC0lMjBNYXJrdXAlMjBMYW5ndWFnZSUyMFJlZmVyZW5jZS5wZGYKdmFyIF9leGNlbFNwZWNpYWxzID0gWwoJeyBtYXRjaDogL15cLT9cZCtcLlxkJSQvLCAgICAgICBzdHlsZTogNjAsIGZtdDogZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQvMTAwOyB9IH0sIC8vIFByZWNlbnQgd2l0aCBkLnAuCgl7IG1hdGNoOiAvXlwtP1xkK1wuP1xkKiUkLywgICAgIHN0eWxlOiA1NiwgZm10OiBmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC8xMDA7IH0gfSwgLy8gUGVyY2VudAoJeyBtYXRjaDogL15cLT9cJFtcZCxdKy4/XGQqJC8sICBzdHlsZTogNTcgfSwgLy8gRG9sbGFycwoJeyBtYXRjaDogL15cLT/Co1tcZCxdKy4/XGQqJC8sICAgc3R5bGU6IDU4IH0sIC8vIFBvdW5kcwoJeyBtYXRjaDogL15cLT/igqxbXGQsXSsuP1xkKiQvLCAgIHN0eWxlOiA1OSB9LCAvLyBFdXJvcwoJeyBtYXRjaDogL15cLT9cZCskLywgICAgICAgICAgICBzdHlsZTogNjUgfSwgLy8gTnVtYmVycyB3aXRob3V0IHRob3VzYW5kIHNlcGFyYXRvcnMKCXsgbWF0Y2g6IC9eXC0/XGQrXC5cZHsyfSQvLCAgICAgc3R5bGU6IDY2IH0sIC8vIE51bWJlcnMgMiBkLnAuIHdpdGhvdXQgdGhvdXNhbmRzIHNlcGFyYXRvcnMKCXsgbWF0Y2g6IC9eXChbXGQsXStcKSQvLCAgICAgICAgc3R5bGU6IDYxLCBmbXQ6IGZ1bmN0aW9uIChkKSB7IHJldHVybiAtMSAqIGQucmVwbGFjZSgvW1woXCldL2csICcnKTsgfSB9LCAgLy8gTmVnYXRpdmUgbnVtYmVycyBpbmRpY2F0ZWQgYnkgYnJhY2tldHMKCXsgbWF0Y2g6IC9eXChbXGQsXStcLlxkezJ9XCkkLywgc3R5bGU6IDYyLCBmbXQ6IGZ1bmN0aW9uIChkKSB7IHJldHVybiAtMSAqIGQucmVwbGFjZSgvW1woXCldL2csICcnKTsgfSB9LCAgLy8gTmVnYXRpdmUgbnVtYmVycyBpbmRpY2F0ZWQgYnkgYnJhY2tldHMgLSAyZC5wLgoJeyBtYXRjaDogL15cLT9bXGQsXSskLywgICAgICAgICBzdHlsZTogNjMgfSwgLy8gTnVtYmVycyB3aXRoIHRob3VzYW5kIHNlcGFyYXRvcnMKCXsgbWF0Y2g6IC9eXC0/W1xkLF0rXC5cZHsyfSQvLCAgc3R5bGU6IDY0IH0gIC8vIE51bWJlcnMgd2l0aCAyIGQucC4gYW5kIHRob3VzYW5kcyBzZXBhcmF0b3JzCl07CgoKCi8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgogKiBCdXR0b25zCiAqLwoKLy8KLy8gQ29weSB0byBjbGlwYm9hcmQKLy8KRGF0YVRhYmxlLmV4dC5idXR0b25zLmNvcHlIdG1sNSA9IHsKCWNsYXNzTmFtZTogJ2J1dHRvbnMtY29weSBidXR0b25zLWh0bWw1JywKCgl0ZXh0OiBmdW5jdGlvbiAoIGR0ICkgewoJCXJldHVybiBkdC5pMThuKCAnYnV0dG9ucy5jb3B5JywgJ0NvcHknICk7Cgl9LAoKCWFjdGlvbjogZnVuY3Rpb24gKCBlLCBkdCwgYnV0dG9uLCBjb25maWcgKSB7CgkJdGhpcy5wcm9jZXNzaW5nKCB0cnVlICk7CgoJCXZhciB0aGF0ID0gdGhpczsKCQl2YXIgZXhwb3J0RGF0YSA9IF9leHBvcnREYXRhKCBkdCwgY29uZmlnICk7CgkJdmFyIGluZm8gPSBkdC5idXR0b25zLmV4cG9ydEluZm8oIGNvbmZpZyApOwoJCXZhciBuZXdsaW5lID0gX25ld0xpbmUoY29uZmlnKTsKCQl2YXIgb3V0cHV0ID0gZXhwb3J0RGF0YS5zdHI7CgkJdmFyIGhpZGRlbkRpdiA9ICQoJzxkaXYvPicpCgkJCS5jc3MoIHsKCQkJCWhlaWdodDogMSwKCQkJCXdpZHRoOiAxLAoJCQkJb3ZlcmZsb3c6ICdoaWRkZW4nLAoJCQkJcG9zaXRpb246ICdmaXhlZCcsCgkJCQl0b3A6IDAsCgkJCQlsZWZ0OiAwCgkJCX0gKTsKCgkJaWYgKCBpbmZvLnRpdGxlICkgewoJCQlvdXRwdXQgPSBpbmZvLnRpdGxlICsgbmV3bGluZSArIG5ld2xpbmUgKyBvdXRwdXQ7CgkJfQoKCQlpZiAoIGluZm8ubWVzc2FnZVRvcCApIHsKCQkJb3V0cHV0ID0gaW5mby5tZXNzYWdlVG9wICsgbmV3bGluZSArIG5ld2xpbmUgKyBvdXRwdXQ7CgkJfQoKCQlpZiAoIGluZm8ubWVzc2FnZUJvdHRvbSApIHsKCQkJb3V0cHV0ID0gb3V0cHV0ICsgbmV3bGluZSArIG5ld2xpbmUgKyBpbmZvLm1lc3NhZ2VCb3R0b207CgkJfQoKCQlpZiAoIGNvbmZpZy5jdXN0b21pemUgKSB7CgkJCW91dHB1dCA9IGNvbmZpZy5jdXN0b21pemUoIG91dHB1dCwgY29uZmlnLCBkdCApOwoJCX0KCgkJdmFyIHRleHRhcmVhID0gJCgnPHRleHRhcmVhIHJlYWRvbmx5Lz4nKQoJCQkudmFsKCBvdXRwdXQgKQoJCQkuYXBwZW5kVG8oIGhpZGRlbkRpdiApOwoKCQkvLyBGb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHRoZSBjb3B5IGV4ZWNDb21tYW5kLCB0cnkgdG8gdXNlIGl0CgkJaWYgKCBkb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoJ2NvcHknKSApIHsKCQkJaGlkZGVuRGl2LmFwcGVuZFRvKCBkdC50YWJsZSgpLmNvbnRhaW5lcigpICk7CgkJCXRleHRhcmVhWzBdLmZvY3VzKCk7CgkJCXRleHRhcmVhWzBdLnNlbGVjdCgpOwoKCQkJdHJ5IHsKCQkJCXZhciBzdWNjZXNzZnVsID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoICdjb3B5JyApOwoJCQkJaGlkZGVuRGl2LnJlbW92ZSgpOwoKCQkJCWlmIChzdWNjZXNzZnVsKSB7CgkJCQkJZHQuYnV0dG9ucy5pbmZvKAoJCQkJCQlkdC5pMThuKCAnYnV0dG9ucy5jb3B5VGl0bGUnLCAnQ29weSB0byBjbGlwYm9hcmQnICksCgkJCQkJCWR0LmkxOG4oICdidXR0b25zLmNvcHlTdWNjZXNzJywgewoJCQkJCQkJMTogJ0NvcGllZCBvbmUgcm93IHRvIGNsaXBib2FyZCcsCgkJCQkJCQlfOiAnQ29waWVkICVkIHJvd3MgdG8gY2xpcGJvYXJkJwoJCQkJCQl9LCBleHBvcnREYXRhLnJvd3MgKSwKCQkJCQkJMjAwMAoJCQkJCSk7CgoJCQkJCXRoaXMucHJvY2Vzc2luZyggZmFsc2UgKTsKCQkJCQlyZXR1cm47CgkJCQl9CgkJCX0KCQkJY2F0Y2ggKHQpIHt9CgkJfQoKCQkvLyBPdGhlcndpc2Ugd2Ugc2hvdyB0aGUgdGV4dCBib3ggYW5kIGluc3RydWN0IHRoZSB1c2VyIHRvIHVzZSBpdAoJCXZhciBtZXNzYWdlID0gJCgnPHNwYW4+JytkdC5pMThuKCAnYnV0dG9ucy5jb3B5S2V5cycsCgkJCQknUHJlc3MgPGk+Y3RybDwvaT4gb3IgPGk+XHUyMzE4PC9pPiArIDxpPkM8L2k+IHRvIGNvcHkgdGhlIHRhYmxlIGRhdGE8YnI+dG8geW91ciBzeXN0ZW0gY2xpcGJvYXJkLjxicj48YnI+JysKCQkJCSdUbyBjYW5jZWwsIGNsaWNrIHRoaXMgbWVzc2FnZSBvciBwcmVzcyBlc2NhcGUuJyApKyc8L3NwYW4+JwoJCQkpCgkJCS5hcHBlbmQoIGhpZGRlbkRpdiApOwoKCQlkdC5idXR0b25zLmluZm8oIGR0LmkxOG4oICdidXR0b25zLmNvcHlUaXRsZScsICdDb3B5IHRvIGNsaXBib2FyZCcgKSwgbWVzc2FnZSwgMCApOwoKCQkvLyBTZWxlY3QgdGhlIHRleHQgc28gd2hlbiB0aGUgdXNlciBhY3RpdmF0ZXMgdGhlaXIgc3lzdGVtIGNsaXBib2FyZAoJCS8vIGl0IHdpbGwgY29weSB0aGF0IHRleHQKCQl0ZXh0YXJlYVswXS5mb2N1cygpOwoJCXRleHRhcmVhWzBdLnNlbGVjdCgpOwoKCQkvLyBFdmVudCB0byBoaWRlIHRoZSBtZXNzYWdlIHdoZW4gdGhlIHVzZXIgaXMgZG9uZQoJCXZhciBjb250YWluZXIgPSAkKG1lc3NhZ2UpLmNsb3Nlc3QoJy5kdC1idXR0b24taW5mbycpOwoJCXZhciBjbG9zZSA9IGZ1bmN0aW9uICgpIHsKCQkJY29udGFpbmVyLm9mZiggJ2NsaWNrLmJ1dHRvbnMtY29weScgKTsKCQkJJChkb2N1bWVudCkub2ZmKCAnLmJ1dHRvbnMtY29weScgKTsKCQkJZHQuYnV0dG9ucy5pbmZvKCBmYWxzZSApOwoJCX07CgoJCWNvbnRhaW5lci5vbiggJ2NsaWNrLmJ1dHRvbnMtY29weScsIGNsb3NlICk7CgkJJChkb2N1bWVudCkKCQkJLm9uKCAna2V5ZG93bi5idXR0b25zLWNvcHknLCBmdW5jdGlvbiAoZSkgewoJCQkJaWYgKCBlLmtleUNvZGUgPT09IDI3ICkgeyAvLyBlc2MKCQkJCQljbG9zZSgpOwoJCQkJCXRoYXQucHJvY2Vzc2luZyggZmFsc2UgKTsKCQkJCX0KCQkJfSApCgkJCS5vbiggJ2NvcHkuYnV0dG9ucy1jb3B5IGN1dC5idXR0b25zLWNvcHknLCBmdW5jdGlvbiAoKSB7CgkJCQljbG9zZSgpOwoJCQkJdGhhdC5wcm9jZXNzaW5nKCBmYWxzZSApOwoJCQl9ICk7Cgl9LAoKCWV4cG9ydE9wdGlvbnM6IHt9LAoKCWZpZWxkU2VwYXJhdG9yOiAnXHQnLAoKCWZpZWxkQm91bmRhcnk6ICcnLAoKCWhlYWRlcjogdHJ1ZSwKCglmb290ZXI6IGZhbHNlLAoKCXRpdGxlOiAnKicsCgoJbWVzc2FnZVRvcDogJyonLAoKCW1lc3NhZ2VCb3R0b206ICcqJwp9OwoKLy8KLy8gQ1NWIGV4cG9ydAovLwpEYXRhVGFibGUuZXh0LmJ1dHRvbnMuY3N2SHRtbDUgPSB7Cglib206IGZhbHNlLAoKCWNsYXNzTmFtZTogJ2J1dHRvbnMtY3N2IGJ1dHRvbnMtaHRtbDUnLAoKCWF2YWlsYWJsZTogZnVuY3Rpb24gKCkgewoJCXJldHVybiB3aW5kb3cuRmlsZVJlYWRlciAhPT0gdW5kZWZpbmVkICYmIHdpbmRvdy5CbG9iOwoJfSwKCgl0ZXh0OiBmdW5jdGlvbiAoIGR0ICkgewoJCXJldHVybiBkdC5pMThuKCAnYnV0dG9ucy5jc3YnLCAnQ1NWJyApOwoJfSwKCglhY3Rpb246IGZ1bmN0aW9uICggZSwgZHQsIGJ1dHRvbiwgY29uZmlnICkgewoJCXRoaXMucHJvY2Vzc2luZyggdHJ1ZSApOwoKCQkvLyBTZXQgdGhlIHRleHQKCQl2YXIgb3V0cHV0ID0gX2V4cG9ydERhdGEoIGR0LCBjb25maWcgKS5zdHI7CgkJdmFyIGluZm8gPSBkdC5idXR0b25zLmV4cG9ydEluZm8oY29uZmlnKTsKCQl2YXIgY2hhcnNldCA9IGNvbmZpZy5jaGFyc2V0OwoKCQlpZiAoIGNvbmZpZy5jdXN0b21pemUgKSB7CgkJCW91dHB1dCA9IGNvbmZpZy5jdXN0b21pemUoIG91dHB1dCwgY29uZmlnLCBkdCApOwoJCX0KCgkJaWYgKCBjaGFyc2V0ICE9PSBmYWxzZSApIHsKCQkJaWYgKCAhIGNoYXJzZXQgKSB7CgkJCQljaGFyc2V0ID0gZG9jdW1lbnQuY2hhcmFjdGVyU2V0IHx8IGRvY3VtZW50LmNoYXJzZXQ7CgkJCX0KCgkJCWlmICggY2hhcnNldCApIHsKCQkJCWNoYXJzZXQgPSAnO2NoYXJzZXQ9JytjaGFyc2V0OwoJCQl9CgkJfQoJCWVsc2UgewoJCQljaGFyc2V0ID0gJyc7CgkJfQoKCQlpZiAoIGNvbmZpZy5ib20gKSB7CgkJCW91dHB1dCA9ICdcdWZlZmYnICsgb3V0cHV0OwoJCX0KCgkJX3NhdmVBcygKCQkJbmV3IEJsb2IoIFtvdXRwdXRdLCB7dHlwZTogJ3RleHQvY3N2JytjaGFyc2V0fSApLAoJCQlpbmZvLmZpbGVuYW1lLAoJCQl0cnVlCgkJKTsKCgkJdGhpcy5wcm9jZXNzaW5nKCBmYWxzZSApOwoJfSwKCglmaWxlbmFtZTogJyonLAoKCWV4dGVuc2lvbjogJy5jc3YnLAoKCWV4cG9ydE9wdGlvbnM6IHt9LAoKCWZpZWxkU2VwYXJhdG9yOiAnLCcsCgoJZmllbGRCb3VuZGFyeTogJyInLAoKCWVzY2FwZUNoYXI6ICciJywKCgljaGFyc2V0OiBudWxsLAoKCWhlYWRlcjogdHJ1ZSwKCglmb290ZXI6IGZhbHNlCn07CgovLwovLyBFeGNlbCAoeGxzeCkgZXhwb3J0Ci8vCkRhdGFUYWJsZS5leHQuYnV0dG9ucy5leGNlbEh0bWw1ID0gewoJY2xhc3NOYW1lOiAnYnV0dG9ucy1leGNlbCBidXR0b25zLWh0bWw1JywKCglhdmFpbGFibGU6IGZ1bmN0aW9uICgpIHsKCQlyZXR1cm4gd2luZG93LkZpbGVSZWFkZXIgIT09IHVuZGVmaW5lZCAmJiBfanNaaXAoKSAhPT0gdW5kZWZpbmVkICYmICEgX2lzRHVmZlNhZmFyaSgpICYmIF9zZXJpYWxpc2VyOwoJfSwKCgl0ZXh0OiBmdW5jdGlvbiAoIGR0ICkgewoJCXJldHVybiBkdC5pMThuKCAnYnV0dG9ucy5leGNlbCcsICdFeGNlbCcgKTsKCX0sCgoJYWN0aW9uOiBmdW5jdGlvbiAoIGUsIGR0LCBidXR0b24sIGNvbmZpZyApIHsKCQl0aGlzLnByb2Nlc3NpbmcoIHRydWUgKTsKCgkJdmFyIHRoYXQgPSB0aGlzOwoJCXZhciByb3dQb3MgPSAwOwoJCXZhciBkYXRhU3RhcnRSb3csIGRhdGFFbmRSb3c7CgkJdmFyIGdldFhtbCA9IGZ1bmN0aW9uICggdHlwZSApIHsKCQkJdmFyIHN0ciA9IGV4Y2VsU3RyaW5nc1sgdHlwZSBdOwoKCQkJLy9zdHIgPSBzdHIucmVwbGFjZSggL3htbG5zOi9nLCAneG1sbnNfJyApLnJlcGxhY2UoIC9tYzovZywgJ21jXycgKTsKCgkJCXJldHVybiAkLnBhcnNlWE1MKCBzdHIgKTsKCQl9OwoJCXZhciByZWxzID0gZ2V0WG1sKCd4bC93b3Jrc2hlZXRzL3NoZWV0MS54bWwnKTsKCQl2YXIgcmVsc0dldCA9IHJlbHMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJzaGVldERhdGEiIClbMF07CgoJCXZhciB4bHN4ID0gewoJCQlfcmVsczogewoJCQkJIi5yZWxzIjogZ2V0WG1sKCdfcmVscy8ucmVscycpCgkJCX0sCgkJCXhsOiB7CgkJCQlfcmVsczogewoJCQkJCSJ3b3JrYm9vay54bWwucmVscyI6IGdldFhtbCgneGwvX3JlbHMvd29ya2Jvb2sueG1sLnJlbHMnKQoJCQkJfSwKCQkJCSJ3b3JrYm9vay54bWwiOiBnZXRYbWwoJ3hsL3dvcmtib29rLnhtbCcpLAoJCQkJInN0eWxlcy54bWwiOiBnZXRYbWwoJ3hsL3N0eWxlcy54bWwnKSwKCQkJCSJ3b3Jrc2hlZXRzIjogewoJCQkJCSJzaGVldDEueG1sIjogcmVscwoJCQkJfQoKCQkJfSwKCQkJIltDb250ZW50X1R5cGVzXS54bWwiOiBnZXRYbWwoJ1tDb250ZW50X1R5cGVzXS54bWwnKQoJCX07CgoJCXZhciBkYXRhID0gZHQuYnV0dG9ucy5leHBvcnREYXRhKCBjb25maWcuZXhwb3J0T3B0aW9ucyApOwoJCXZhciBjdXJyZW50Um93LCByb3dOb2RlOwoJCXZhciBhZGRSb3cgPSBmdW5jdGlvbiAoIHJvdyApIHsKCQkJY3VycmVudFJvdyA9IHJvd1BvcysxOwoJCQlyb3dOb2RlID0gX2NyZWF0ZU5vZGUoIHJlbHMsICJyb3ciLCB7IGF0dHI6IHtyOmN1cnJlbnRSb3d9IH0gKTsKCgkJCWZvciAoIHZhciBpPTAsIGllbj1yb3cubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQkvLyBDb25jYXQgYm90aCB0aGUgQ2VsbCBDb2x1bW5zIGFzIGEgbGV0dGVyIGFuZCB0aGUgUm93IG9mIHRoZSBjZWxsLgoJCQkJdmFyIGNlbGxJZCA9IGNyZWF0ZUNlbGxQb3MoaSkgKyAnJyArIGN1cnJlbnRSb3c7CgkJCQl2YXIgY2VsbCA9IG51bGw7CgoJCQkJLy8gRm9yIG51bGwsIHVuZGVmaW5lZCBvZiBibGFuayBjZWxsLCBjb250aW51ZSBzbyBpdCBkb2Vzbid0IGNyZWF0ZSB0aGUgX2NyZWF0ZU5vZGUKCQkJCWlmICggcm93W2ldID09PSBudWxsIHx8IHJvd1tpXSA9PT0gdW5kZWZpbmVkIHx8IHJvd1tpXSA9PT0gJycgKSB7CgkJCQkJaWYgKCBjb25maWcuY3JlYXRlRW1wdHlDZWxscyA9PT0gdHJ1ZSApIHsKCQkJCQkJcm93W2ldID0gJyc7CgkJCQkJfQoJCQkJCWVsc2UgewoJCQkJCQljb250aW51ZTsKCQkJCQl9CgkJCQl9CgoJCQkJdmFyIG9yaWdpbmFsQ29udGVudCA9IHJvd1tpXTsKCQkJCXJvd1tpXSA9ICQudHJpbSggcm93W2ldICk7CgoJCQkJLy8gU3BlY2lhbCBudW1iZXIgZm9ybWF0dGluZyBvcHRpb25zCgkJCQlmb3IgKCB2YXIgaj0wLCBqZW49X2V4Y2VsU3BlY2lhbHMubGVuZ3RoIDsgajxqZW4gOyBqKysgKSB7CgkJCQkJdmFyIHNwZWNpYWwgPSBfZXhjZWxTcGVjaWFsc1tqXTsKCgkJCQkJLy8gVE9ETyBOZWVkIHRvIHByb3ZpZGUgdGhlIGFiaWxpdHkgZm9yIHRoZSBzcGVjaWFscyB0byBzYXkKCQkJCQkvLyBpZiB0aGV5IGFyZSByZXR1cm5pbmcgYSBzdHJpbmcsIHNpbmNlIGF0IHRoZSBtb21lbnQgaXQgaXMKCQkJCQkvLyBhc3N1bWVkIHRvIGJlIGEgbnVtYmVyCgkJCQkJaWYgKCByb3dbaV0ubWF0Y2ggJiYgISByb3dbaV0ubWF0Y2goL14wXGQrLykgJiYgcm93W2ldLm1hdGNoKCBzcGVjaWFsLm1hdGNoICkgKSB7CgkJCQkJCXZhciB2YWwgPSByb3dbaV0ucmVwbGFjZSgvW15cZFwuXC1dL2csICcnKTsKCgkJCQkJCWlmICggc3BlY2lhbC5mbXQgKSB7CgkJCQkJCQl2YWwgPSBzcGVjaWFsLmZtdCggdmFsICk7CgkJCQkJCX0KCgkJCQkJCWNlbGwgPSBfY3JlYXRlTm9kZSggcmVscywgJ2MnLCB7CgkJCQkJCQlhdHRyOiB7CgkJCQkJCQkJcjogY2VsbElkLAoJCQkJCQkJCXM6IHNwZWNpYWwuc3R5bGUKCQkJCQkJCX0sCgkJCQkJCQljaGlsZHJlbjogWwoJCQkJCQkJCV9jcmVhdGVOb2RlKCByZWxzLCAndicsIHsgdGV4dDogdmFsIH0gKQoJCQkJCQkJXQoJCQkJCQl9ICk7CgoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgoJCQkJaWYgKCAhIGNlbGwgKSB7CgkJCQkJaWYgKCB0eXBlb2Ygcm93W2ldID09PSAnbnVtYmVyJyB8fCAoCgkJCQkJCXJvd1tpXS5tYXRjaCAmJgoJCQkJCQlyb3dbaV0ubWF0Y2goL14tP1xkKyhcLlxkKyk/JC8pICYmCgkJCQkJCSEgcm93W2ldLm1hdGNoKC9eMFxkKy8pICkKCQkJCQkpIHsKCQkJCQkJLy8gRGV0ZWN0IG51bWJlcnMgLSBkb24ndCBtYXRjaCBudW1iZXJzIHdpdGggbGVhZGluZyB6ZXJvcwoJCQkJCQkvLyBvciBhIG5lZ2F0aXZlIGFueXdoZXJlIGJ1dCB0aGUgc3RhcnQKCQkJCQkJY2VsbCA9IF9jcmVhdGVOb2RlKCByZWxzLCAnYycsIHsKCQkJCQkJCWF0dHI6IHsKCQkJCQkJCQl0OiAnbicsCgkJCQkJCQkJcjogY2VsbElkCgkJCQkJCQl9LAoJCQkJCQkJY2hpbGRyZW46IFsKCQkJCQkJCQlfY3JlYXRlTm9kZSggcmVscywgJ3YnLCB7IHRleHQ6IHJvd1tpXSB9ICkKCQkJCQkJCV0KCQkJCQkJfSApOwoJCQkJCX0KCQkJCQllbHNlIHsKCQkJCQkJLy8gU3RyaW5nIG91dHB1dCAtIHJlcGxhY2Ugbm9uIHN0YW5kYXJkIGNoYXJhY3RlcnMgZm9yIHRleHQgb3V0cHV0CgkJCQkJCXZhciB0ZXh0ID0gISBvcmlnaW5hbENvbnRlbnQucmVwbGFjZSA/CgkJCQkJCQlvcmlnaW5hbENvbnRlbnQgOgoJCQkJCQkJb3JpZ2luYWxDb250ZW50LnJlcGxhY2UoL1tceDAwLVx4MDlceDBCXHgwQ1x4MEUtXHgxRlx4N0YtXHg5Rl0vZywgJycpOwoKCQkJCQkJY2VsbCA9IF9jcmVhdGVOb2RlKCByZWxzLCAnYycsIHsKCQkJCQkJCWF0dHI6IHsKCQkJCQkJCQl0OiAnaW5saW5lU3RyJywKCQkJCQkJCQlyOiBjZWxsSWQKCQkJCQkJCX0sCgkJCQkJCQljaGlsZHJlbjp7CgkJCQkJCQkJcm93OiBfY3JlYXRlTm9kZSggcmVscywgJ2lzJywgewoJCQkJCQkJCQljaGlsZHJlbjogewoJCQkJCQkJCQkJcm93OiBfY3JlYXRlTm9kZSggcmVscywgJ3QnLCB7CgkJCQkJCQkJCQkJdGV4dDogdGV4dCwKCQkJCQkJCQkJCQlhdHRyOiB7CgkJCQkJCQkJCQkJCSd4bWw6c3BhY2UnOiAncHJlc2VydmUnCgkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJfSApCgkJCQkJCQkJCX0KCQkJCQkJCQl9ICkKCQkJCQkJCX0KCQkJCQkJfSApOwoJCQkJCX0KCQkJCX0KCgkJCQlyb3dOb2RlLmFwcGVuZENoaWxkKCBjZWxsICk7CgkJCX0KCgkJCXJlbHNHZXQuYXBwZW5kQ2hpbGQocm93Tm9kZSk7CgkJCXJvd1BvcysrOwoJCX07CgoJCWlmICggY29uZmlnLmN1c3RvbWl6ZURhdGEgKSB7CgkJCWNvbmZpZy5jdXN0b21pemVEYXRhKCBkYXRhICk7CgkJfQoKCQl2YXIgbWVyZ2VDZWxscyA9IGZ1bmN0aW9uICggcm93LCBjb2xzcGFuICkgewoJCQl2YXIgbWVyZ2VDZWxscyA9ICQoJ21lcmdlQ2VsbHMnLCByZWxzKTsKCgkJCW1lcmdlQ2VsbHNbMF0uYXBwZW5kQ2hpbGQoIF9jcmVhdGVOb2RlKCByZWxzLCAnbWVyZ2VDZWxsJywgewoJCQkJYXR0cjogewoJCQkJCXJlZjogJ0EnK3JvdysnOicrY3JlYXRlQ2VsbFBvcyhjb2xzcGFuKStyb3cKCQkJCX0KCQkJfSApICk7CgkJCW1lcmdlQ2VsbHMuYXR0ciggJ2NvdW50JywgcGFyc2VGbG9hdChtZXJnZUNlbGxzLmF0dHIoICdjb3VudCcgKSkrMSApOwoJCQkkKCdyb3c6ZXEoJysocm93LTEpKycpIGMnLCByZWxzKS5hdHRyKCAncycsICc1MScgKTsgLy8gY2VudHJlCgkJfTsKCgkJLy8gVGl0bGUgYW5kIHRvcCBtZXNzYWdlcwoJCXZhciBleHBvcnRJbmZvID0gZHQuYnV0dG9ucy5leHBvcnRJbmZvKCBjb25maWcgKTsKCQlpZiAoIGV4cG9ydEluZm8udGl0bGUgKSB7CgkJCWFkZFJvdyggW2V4cG9ydEluZm8udGl0bGVdLCByb3dQb3MgKTsKCQkJbWVyZ2VDZWxscyggcm93UG9zLCBkYXRhLmhlYWRlci5sZW5ndGgtMSApOwoJCX0KCgkJaWYgKCBleHBvcnRJbmZvLm1lc3NhZ2VUb3AgKSB7CgkJCWFkZFJvdyggW2V4cG9ydEluZm8ubWVzc2FnZVRvcF0sIHJvd1BvcyApOwoJCQltZXJnZUNlbGxzKCByb3dQb3MsIGRhdGEuaGVhZGVyLmxlbmd0aC0xICk7CgkJfQoKCgkJLy8gVGFibGUgaXRzZWxmCgkJaWYgKCBjb25maWcuaGVhZGVyICkgewoJCQlhZGRSb3coIGRhdGEuaGVhZGVyLCByb3dQb3MgKTsKCQkJJCgncm93Omxhc3QgYycsIHJlbHMpLmF0dHIoICdzJywgJzInICk7IC8vIGJvbGQKCQl9CgkKCQlkYXRhU3RhcnRSb3cgPSByb3dQb3M7CgoJCWZvciAoIHZhciBuPTAsIGllPWRhdGEuYm9keS5sZW5ndGggOyBuPGllIDsgbisrICkgewoJCQlhZGRSb3coIGRhdGEuYm9keVtuXSwgcm93UG9zICk7CgkJfQoJCgkJZGF0YUVuZFJvdyA9IHJvd1BvczsKCgkJaWYgKCBjb25maWcuZm9vdGVyICYmIGRhdGEuZm9vdGVyICkgewoJCQlhZGRSb3coIGRhdGEuZm9vdGVyLCByb3dQb3MpOwoJCQkkKCdyb3c6bGFzdCBjJywgcmVscykuYXR0ciggJ3MnLCAnMicgKTsgLy8gYm9sZAoJCX0KCgkJLy8gQmVsb3cgdGhlIHRhYmxlCgkJaWYgKCBleHBvcnRJbmZvLm1lc3NhZ2VCb3R0b20gKSB7CgkJCWFkZFJvdyggW2V4cG9ydEluZm8ubWVzc2FnZUJvdHRvbV0sIHJvd1BvcyApOwoJCQltZXJnZUNlbGxzKCByb3dQb3MsIGRhdGEuaGVhZGVyLmxlbmd0aC0xICk7CgkJfQoKCQkvLyBTZXQgY29sdW1uIHdpZHRocwoJCXZhciBjb2xzID0gX2NyZWF0ZU5vZGUoIHJlbHMsICdjb2xzJyApOwoJCSQoJ3dvcmtzaGVldCcsIHJlbHMpLnByZXBlbmQoIGNvbHMgKTsKCgkJZm9yICggdmFyIGk9MCwgaWVuPWRhdGEuaGVhZGVyLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQljb2xzLmFwcGVuZENoaWxkKCBfY3JlYXRlTm9kZSggcmVscywgJ2NvbCcsIHsKCQkJCWF0dHI6IHsKCQkJCQltaW46IGkrMSwKCQkJCQltYXg6IGkrMSwKCQkJCQl3aWR0aDogX2V4Y2VsQ29sV2lkdGgoIGRhdGEsIGkgKSwKCQkJCQljdXN0b21XaWR0aDogMQoJCQkJfQoJCQl9ICkgKTsKCQl9CgoJCS8vIFdvcmtib29rIG1vZGlmaWNhdGlvbnMKCQl2YXIgd29ya2Jvb2sgPSB4bHN4LnhsWyd3b3JrYm9vay54bWwnXTsKCgkJJCggJ3NoZWV0cyBzaGVldCcsIHdvcmtib29rICkuYXR0ciggJ25hbWUnLCBfc2hlZXRuYW1lKCBjb25maWcgKSApOwoKCQkvLyBBdXRvIGZpbHRlciBmb3IgY29sdW1ucwoJCWlmICggY29uZmlnLmF1dG9GaWx0ZXIgKSB7CgkJCSQoJ21lcmdlQ2VsbHMnLCByZWxzKS5iZWZvcmUoIF9jcmVhdGVOb2RlKCByZWxzLCAnYXV0b0ZpbHRlcicsIHsKCQkJCWF0dHI6IHsKCQkJCQlyZWY6ICdBJytkYXRhU3RhcnRSb3crJzonK2NyZWF0ZUNlbGxQb3MoZGF0YS5oZWFkZXIubGVuZ3RoLTEpK2RhdGFFbmRSb3cKCQkJCX0KCQkJfSApICk7CgoJCQkkKCdkZWZpbmVkTmFtZXMnLCB3b3JrYm9vaykuYXBwZW5kKCBfY3JlYXRlTm9kZSggd29ya2Jvb2ssICdkZWZpbmVkTmFtZScsIHsKCQkJCWF0dHI6IHsKCQkJCQluYW1lOiAnX3hsbm0uX0ZpbHRlckRhdGFiYXNlJywKCQkJCQlsb2NhbFNoZWV0SWQ6ICcwJywKCQkJCQloaWRkZW46IDEKCQkJCX0sCgkJCQl0ZXh0OiBfc2hlZXRuYW1lKGNvbmZpZykrJyEkQSQnK2RhdGFTdGFydFJvdysnOicrY3JlYXRlQ2VsbFBvcyhkYXRhLmhlYWRlci5sZW5ndGgtMSkrZGF0YUVuZFJvdwoJCQl9ICkgKTsKCQl9CgoJCS8vIExldCB0aGUgZGV2ZWxvcGVyIGN1c3RvbWlzZSB0aGUgZG9jdW1lbnQgaWYgdGhleSB3YW50IHRvCgkJaWYgKCBjb25maWcuY3VzdG9taXplICkgewoJCQljb25maWcuY3VzdG9taXplKCB4bHN4LCBjb25maWcsIGR0ICk7CgkJfQoKCQkvLyBFeGNlbCBkb2Vzbid0IGxpa2UgYW4gZW1wdHkgbWVyZ2VDZWxscyB0YWcKCQlpZiAoICQoJ21lcmdlQ2VsbHMnLCByZWxzKS5jaGlsZHJlbigpLmxlbmd0aCA9PT0gMCApIHsKCQkJJCgnbWVyZ2VDZWxscycsIHJlbHMpLnJlbW92ZSgpOwoJCX0KCgkJdmFyIGpzemlwID0gX2pzWmlwKCk7CgkJdmFyIHppcCA9IG5ldyBqc3ppcCgpOwoJCXZhciB6aXBDb25maWcgPSB7CgkJCXR5cGU6ICdibG9iJywKCQkJbWltZVR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcKCQl9OwoKCQlfYWRkVG9aaXAoIHppcCwgeGxzeCApOwoKCQlpZiAoIHppcC5nZW5lcmF0ZUFzeW5jICkgewoJCQkvLyBKU1ppcCAzKwoJCQl6aXAKCQkJCS5nZW5lcmF0ZUFzeW5jKCB6aXBDb25maWcgKQoJCQkJLnRoZW4oIGZ1bmN0aW9uICggYmxvYiApIHsKCQkJCQlfc2F2ZUFzKCBibG9iLCBleHBvcnRJbmZvLmZpbGVuYW1lICk7CgkJCQkJdGhhdC5wcm9jZXNzaW5nKCBmYWxzZSApOwoJCQkJfSApOwoJCX0KCQllbHNlIHsKCQkJLy8gSlNaaXAgMi41CgkJCV9zYXZlQXMoCgkJCQl6aXAuZ2VuZXJhdGUoIHppcENvbmZpZyApLAoJCQkJZXhwb3J0SW5mby5maWxlbmFtZQoJCQkpOwoJCQl0aGlzLnByb2Nlc3NpbmcoIGZhbHNlICk7CgkJfQoJfSwKCglmaWxlbmFtZTogJyonLAoKCWV4dGVuc2lvbjogJy54bHN4JywKCglleHBvcnRPcHRpb25zOiB7fSwKCgloZWFkZXI6IHRydWUsCgoJZm9vdGVyOiBmYWxzZSwKCgl0aXRsZTogJyonLAoKCW1lc3NhZ2VUb3A6ICcqJywKCgltZXNzYWdlQm90dG9tOiAnKicsCgoJY3JlYXRlRW1wdHlDZWxsczogZmFsc2UsCgoJYXV0b0ZpbHRlcjogZmFsc2UsCgoJc2hlZXROYW1lOiAnJwp9OwoKLy8KLy8gUERGIGV4cG9ydCAtIHVzaW5nIHBkZk1ha2UgLSBodHRwOi8vcGRmbWFrZS5vcmcKLy8KRGF0YVRhYmxlLmV4dC5idXR0b25zLnBkZkh0bWw1ID0gewoJY2xhc3NOYW1lOiAnYnV0dG9ucy1wZGYgYnV0dG9ucy1odG1sNScsCgoJYXZhaWxhYmxlOiBmdW5jdGlvbiAoKSB7CgkJcmV0dXJuIHdpbmRvdy5GaWxlUmVhZGVyICE9PSB1bmRlZmluZWQgJiYgX3BkZk1ha2UoKTsKCX0sCgoJdGV4dDogZnVuY3Rpb24gKCBkdCApIHsKCQlyZXR1cm4gZHQuaTE4biggJ2J1dHRvbnMucGRmJywgJ1BERicgKTsKCX0sCgoJYWN0aW9uOiBmdW5jdGlvbiAoIGUsIGR0LCBidXR0b24sIGNvbmZpZyApIHsKCQl0aGlzLnByb2Nlc3NpbmcoIHRydWUgKTsKCgkJdmFyIHRoYXQgPSB0aGlzOwoJCXZhciBkYXRhID0gZHQuYnV0dG9ucy5leHBvcnREYXRhKCBjb25maWcuZXhwb3J0T3B0aW9ucyApOwoJCXZhciBpbmZvID0gZHQuYnV0dG9ucy5leHBvcnRJbmZvKCBjb25maWcgKTsKCQl2YXIgcm93cyA9IFtdOwoKCQlpZiAoIGNvbmZpZy5oZWFkZXIgKSB7CgkJCXJvd3MucHVzaCggJC5tYXAoIGRhdGEuaGVhZGVyLCBmdW5jdGlvbiAoIGQgKSB7CgkJCQlyZXR1cm4gewoJCQkJCXRleHQ6IHR5cGVvZiBkID09PSAnc3RyaW5nJyA/IGQgOiBkKycnLAoJCQkJCXN0eWxlOiAndGFibGVIZWFkZXInCgkJCQl9OwoJCQl9ICkgKTsKCQl9CgoJCWZvciAoIHZhciBpPTAsIGllbj1kYXRhLmJvZHkubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCXJvd3MucHVzaCggJC5tYXAoIGRhdGEuYm9keVtpXSwgZnVuY3Rpb24gKCBkICkgewoJCQkJaWYgKCBkID09PSBudWxsIHx8IGQgPT09IHVuZGVmaW5lZCApIHsKCQkJCQlkID0gJyc7CgkJCQl9CgkJCQlyZXR1cm4gewoJCQkJCXRleHQ6IHR5cGVvZiBkID09PSAnc3RyaW5nJyA/IGQgOiBkKycnLAoJCQkJCXN0eWxlOiBpICUgMiA/ICd0YWJsZUJvZHlFdmVuJyA6ICd0YWJsZUJvZHlPZGQnCgkJCQl9OwoJCQl9ICkgKTsKCQl9CgoJCWlmICggY29uZmlnLmZvb3RlciAmJiBkYXRhLmZvb3RlcikgewoJCQlyb3dzLnB1c2goICQubWFwKCBkYXRhLmZvb3RlciwgZnVuY3Rpb24gKCBkICkgewoJCQkJcmV0dXJuIHsKCQkJCQl0ZXh0OiB0eXBlb2YgZCA9PT0gJ3N0cmluZycgPyBkIDogZCsnJywKCQkJCQlzdHlsZTogJ3RhYmxlRm9vdGVyJwoJCQkJfTsKCQkJfSApICk7CgkJfQoKCQl2YXIgZG9jID0gewoJCQlwYWdlU2l6ZTogY29uZmlnLnBhZ2VTaXplLAoJCQlwYWdlT3JpZW50YXRpb246IGNvbmZpZy5vcmllbnRhdGlvbiwKCQkJY29udGVudDogWwoJCQkJewoJCQkJCXRhYmxlOiB7CgkJCQkJCWhlYWRlclJvd3M6IDEsCgkJCQkJCWJvZHk6IHJvd3MKCQkJCQl9LAoJCQkJCWxheW91dDogJ25vQm9yZGVycycKCQkJCX0KCQkJXSwKCQkJc3R5bGVzOiB7CgkJCQl0YWJsZUhlYWRlcjogewoJCQkJCWJvbGQ6IHRydWUsCgkJCQkJZm9udFNpemU6IDExLAoJCQkJCWNvbG9yOiAnd2hpdGUnLAoJCQkJCWZpbGxDb2xvcjogJyMyZDQxNTQnLAoJCQkJCWFsaWdubWVudDogJ2NlbnRlcicKCQkJCX0sCgkJCQl0YWJsZUJvZHlFdmVuOiB7fSwKCQkJCXRhYmxlQm9keU9kZDogewoJCQkJCWZpbGxDb2xvcjogJyNmM2YzZjMnCgkJCQl9LAoJCQkJdGFibGVGb290ZXI6IHsKCQkJCQlib2xkOiB0cnVlLAoJCQkJCWZvbnRTaXplOiAxMSwKCQkJCQljb2xvcjogJ3doaXRlJywKCQkJCQlmaWxsQ29sb3I6ICcjMmQ0MTU0JwoJCQkJfSwKCQkJCXRpdGxlOiB7CgkJCQkJYWxpZ25tZW50OiAnY2VudGVyJywKCQkJCQlmb250U2l6ZTogMTUKCQkJCX0sCgkJCQltZXNzYWdlOiB7fQoJCQl9LAoJCQlkZWZhdWx0U3R5bGU6IHsKCQkJCWZvbnRTaXplOiAxMAoJCQl9CgkJfTsKCgkJaWYgKCBpbmZvLm1lc3NhZ2VUb3AgKSB7CgkJCWRvYy5jb250ZW50LnVuc2hpZnQoIHsKCQkJCXRleHQ6IGluZm8ubWVzc2FnZVRvcCwKCQkJCXN0eWxlOiAnbWVzc2FnZScsCgkJCQltYXJnaW46IFsgMCwgMCwgMCwgMTIgXQoJCQl9ICk7CgkJfQoKCQlpZiAoIGluZm8ubWVzc2FnZUJvdHRvbSApIHsKCQkJZG9jLmNvbnRlbnQucHVzaCggewoJCQkJdGV4dDogaW5mby5tZXNzYWdlQm90dG9tLAoJCQkJc3R5bGU6ICdtZXNzYWdlJywKCQkJCW1hcmdpbjogWyAwLCAwLCAwLCAxMiBdCgkJCX0gKTsKCQl9CgoJCWlmICggaW5mby50aXRsZSApIHsKCQkJZG9jLmNvbnRlbnQudW5zaGlmdCggewoJCQkJdGV4dDogaW5mby50aXRsZSwKCQkJCXN0eWxlOiAndGl0bGUnLAoJCQkJbWFyZ2luOiBbIDAsIDAsIDAsIDEyIF0KCQkJfSApOwoJCX0KCgkJaWYgKCBjb25maWcuY3VzdG9taXplICkgewoJCQljb25maWcuY3VzdG9taXplKCBkb2MsIGNvbmZpZywgZHQgKTsKCQl9CgoJCXZhciBwZGYgPSBfcGRmTWFrZSgpLmNyZWF0ZVBkZiggZG9jICk7CgoJCWlmICggY29uZmlnLmRvd25sb2FkID09PSAnb3BlbicgJiYgISBfaXNEdWZmU2FmYXJpKCkgKSB7CgkJCXBkZi5vcGVuKCk7CgkJfQoJCWVsc2UgewoJCQlwZGYuZG93bmxvYWQoIGluZm8uZmlsZW5hbWUgKTsKCQl9CgoJCXRoaXMucHJvY2Vzc2luZyggZmFsc2UgKTsKCX0sCgoJdGl0bGU6ICcqJywKCglmaWxlbmFtZTogJyonLAoKCWV4dGVuc2lvbjogJy5wZGYnLAoKCWV4cG9ydE9wdGlvbnM6IHt9LAoKCW9yaWVudGF0aW9uOiAncG9ydHJhaXQnLAoKCXBhZ2VTaXplOiAnQTQnLAoKCWhlYWRlcjogdHJ1ZSwKCglmb290ZXI6IGZhbHNlLAoKCW1lc3NhZ2VUb3A6ICcqJywKCgltZXNzYWdlQm90dG9tOiAnKicsCgoJY3VzdG9taXplOiBudWxsLAoKCWRvd25sb2FkOiAnZG93bmxvYWQnCn07CgoKcmV0dXJuIERhdGFUYWJsZS5CdXR0b25zOwp9KSk7CgoKLyohCiAqIFByaW50IGJ1dHRvbiBmb3IgQnV0dG9ucyBhbmQgRGF0YVRhYmxlcy4KICogMjAxNiBTcHJ5TWVkaWEgTHRkIC0gZGF0YXRhYmxlcy5uZXQvbGljZW5zZQogKi8KCihmdW5jdGlvbiggZmFjdG9yeSApewoJaWYgKCB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7CgkJLy8gQU1ECgkJZGVmaW5lKCBbJ2pxdWVyeScsICdkYXRhdGFibGVzLm5ldCcsICdkYXRhdGFibGVzLm5ldC1idXR0b25zJ10sIGZ1bmN0aW9uICggJCApIHsKCQkJcmV0dXJuIGZhY3RvcnkoICQsIHdpbmRvdywgZG9jdW1lbnQgKTsKCQl9ICk7Cgl9CgllbHNlIGlmICggdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICkgewoJCS8vIENvbW1vbkpTCgkJbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocm9vdCwgJCkgewoJCQlpZiAoICEgcm9vdCApIHsKCQkJCXJvb3QgPSB3aW5kb3c7CgkJCX0KCgkJCWlmICggISAkIHx8ICEgJC5mbi5kYXRhVGFibGUgKSB7CgkJCQkkID0gcmVxdWlyZSgnZGF0YXRhYmxlcy5uZXQnKShyb290LCAkKS4kOwoJCQl9CgoJCQlpZiAoICEgJC5mbi5kYXRhVGFibGUuQnV0dG9ucyApIHsKCQkJCXJlcXVpcmUoJ2RhdGF0YWJsZXMubmV0LWJ1dHRvbnMnKShyb290LCAkKTsKCQkJfQoKCQkJcmV0dXJuIGZhY3RvcnkoICQsIHJvb3QsIHJvb3QuZG9jdW1lbnQgKTsKCQl9OwoJfQoJZWxzZSB7CgkJLy8gQnJvd3NlcgoJCWZhY3RvcnkoIGpRdWVyeSwgd2luZG93LCBkb2N1bWVudCApOwoJfQp9KGZ1bmN0aW9uKCAkLCB3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQgKSB7Cid1c2Ugc3RyaWN0JzsKdmFyIERhdGFUYWJsZSA9ICQuZm4uZGF0YVRhYmxlOwoKCnZhciBfbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdhJyApOwoKLyoqCiAqIENsb25lIGxpbmsgYW5kIHN0eWxlIHRhZ3MsIHRha2luZyBpbnRvIGFjY291bnQgdGhlIG5lZWQgdG8gY2hhbmdlIHRoZSBzb3VyY2UKICogcGF0aC4KICoKICogQHBhcmFtICB7bm9kZX0gICAgIGVsIEVsZW1lbnQgdG8gY29udmVydAogKi8KdmFyIF9zdHlsZVRvQWJzID0gZnVuY3Rpb24oIGVsICkgewoJdmFyIHVybDsKCXZhciBjbG9uZSA9ICQoZWwpLmNsb25lKClbMF07Cgl2YXIgbGlua0hvc3Q7CgoJaWYgKCBjbG9uZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnbGluaycgKSB7CgkJY2xvbmUuaHJlZiA9IF9yZWxUb0FicyggY2xvbmUuaHJlZiApOwoJfQoKCXJldHVybiBjbG9uZS5vdXRlckhUTUw7Cn07CgovKioKICogQ29udmVydCBhIFVSTCBmcm9tIGEgcmVsYXRpdmUgdG8gYW4gYWJzb2x1dGUgYWRkcmVzcyBzbyBpdCB3aWxsIHdvcmsKICogY29ycmVjdGx5IGluIHRoZSBwb3B1cCB3aW5kb3cgd2hpY2ggaGFzIG5vIGJhc2UgVVJMLgogKgogKiBAcGFyYW0gIHtzdHJpbmd9IGhyZWYgVVJMCiAqLwp2YXIgX3JlbFRvQWJzID0gZnVuY3Rpb24oIGhyZWYgKSB7CgkvLyBBc3NpZ24gdG8gYSBsaW5rIG9uIHRoZSBvcmlnaW5hbCBwYWdlIHNvIHRoZSBicm93c2VyIHdpbGwgZG8gYWxsIHRoZQoJLy8gaGFyZCB3b3JrIG9mIGZpZ3VyaW5nIG91dCB3aGVyZSB0aGUgZmlsZSBhY3R1YWxseSBpcwoJX2xpbmsuaHJlZiA9IGhyZWY7Cgl2YXIgbGlua0hvc3QgPSBfbGluay5ob3N0OwoKCS8vIElFIGRvZXNuJ3QgaGF2ZSBhIHRyYWlsaW5nIHNsYXNoIG9uIHRoZSBob3N0CgkvLyBDaHJvbWUgaGFzIGl0IG9uIHRoZSBwYXRobmFtZQoJaWYgKCBsaW5rSG9zdC5pbmRleE9mKCcvJykgPT09IC0xICYmIF9saW5rLnBhdGhuYW1lLmluZGV4T2YoJy8nKSAhPT0gMCkgewoJCWxpbmtIb3N0ICs9ICcvJzsKCX0KCglyZXR1cm4gX2xpbmsucHJvdG9jb2wrIi8vIitsaW5rSG9zdCtfbGluay5wYXRobmFtZStfbGluay5zZWFyY2g7Cn07CgoKRGF0YVRhYmxlLmV4dC5idXR0b25zLnByaW50ID0gewoJY2xhc3NOYW1lOiAnYnV0dG9ucy1wcmludCcsCgoJdGV4dDogZnVuY3Rpb24gKCBkdCApIHsKCQlyZXR1cm4gZHQuaTE4biggJ2J1dHRvbnMucHJpbnQnLCAnUHJpbnQnICk7Cgl9LAoKCWFjdGlvbjogZnVuY3Rpb24gKCBlLCBkdCwgYnV0dG9uLCBjb25maWcgKSB7CgkJdmFyIGRhdGEgPSBkdC5idXR0b25zLmV4cG9ydERhdGEoCgkJCSQuZXh0ZW5kKCB7ZGVjb2RlRW50aXRpZXM6IGZhbHNlfSwgY29uZmlnLmV4cG9ydE9wdGlvbnMgKSAvLyBYU1MgcHJvdGVjdGlvbgoJCSk7CgkJdmFyIGV4cG9ydEluZm8gPSBkdC5idXR0b25zLmV4cG9ydEluZm8oIGNvbmZpZyApOwoJCXZhciBjb2x1bW5DbGFzc2VzID0gZHQKCQkJLmNvbHVtbnMoIGNvbmZpZy5leHBvcnRPcHRpb25zLmNvbHVtbnMgKQoJCQkuZmxhdHRlbigpCgkJCS5tYXAoIGZ1bmN0aW9uIChpZHgpIHsKCQkJCXJldHVybiBkdC5zZXR0aW5ncygpWzBdLmFvQ29sdW1uc1tkdC5jb2x1bW4oaWR4KS5pbmRleCgpXS5zQ2xhc3M7CgkJCX0gKQoJCQkudG9BcnJheSgpOwoKCQl2YXIgYWRkUm93ID0gZnVuY3Rpb24gKCBkLCB0YWcgKSB7CgkJCXZhciBzdHIgPSAnPHRyPic7CgoJCQlmb3IgKCB2YXIgaT0wLCBpZW49ZC5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCS8vIG51bGwgYW5kIHVuZGVmaW5lZCBhcmVuJ3QgdXNlZnVsIGluIHRoZSBwcmludCBvdXRwdXQKCQkJCXZhciBkYXRhT3V0ID0gZFtpXSA9PT0gbnVsbCB8fCBkW2ldID09PSB1bmRlZmluZWQgPwoJCQkJCScnIDoKCQkJCQlkW2ldOwoJCQkJdmFyIGNsYXNzQXR0ciA9IGNvbHVtbkNsYXNzZXNbaV0gPwoJCQkJCSdjbGFzcz0iJytjb2x1bW5DbGFzc2VzW2ldKyciJyA6CgkJCQkJJyc7CgoJCQkJc3RyICs9ICc8Jyt0YWcrJyAnK2NsYXNzQXR0cisnPicrZGF0YU91dCsnPC8nK3RhZysnPic7CgkJCX0KCgkJCXJldHVybiBzdHIgKyAnPC90cj4nOwoJCX07CgoJCS8vIENvbnN0cnVjdCBhIHRhYmxlIGZvciBwcmludGluZwoJCXZhciBodG1sID0gJzx0YWJsZSBjbGFzcz0iJytkdC50YWJsZSgpLm5vZGUoKS5jbGFzc05hbWUrJyI+JzsKCgkJaWYgKCBjb25maWcuaGVhZGVyICkgewoJCQlodG1sICs9ICc8dGhlYWQ+JysgYWRkUm93KCBkYXRhLmhlYWRlciwgJ3RoJyApICsnPC90aGVhZD4nOwoJCX0KCgkJaHRtbCArPSAnPHRib2R5Pic7CgkJZm9yICggdmFyIGk9MCwgaWVuPWRhdGEuYm9keS5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJaHRtbCArPSBhZGRSb3coIGRhdGEuYm9keVtpXSwgJ3RkJyApOwoJCX0KCQlodG1sICs9ICc8L3Rib2R5Pic7CgoJCWlmICggY29uZmlnLmZvb3RlciAmJiBkYXRhLmZvb3RlciApIHsKCQkJaHRtbCArPSAnPHRmb290PicrIGFkZFJvdyggZGF0YS5mb290ZXIsICd0aCcgKSArJzwvdGZvb3Q+JzsKCQl9CgkJaHRtbCArPSAnPC90YWJsZT4nOwoKCQkvLyBPcGVuIGEgbmV3IHdpbmRvdyBmb3IgdGhlIHByaW50YWJsZSB0YWJsZQoJCXZhciB3aW4gPSB3aW5kb3cub3BlbiggJycsICcnICk7CgkJd2luLmRvY3VtZW50LmNsb3NlKCk7CgoJCS8vIEluamVjdCB0aGUgdGl0bGUgYW5kIGFsc28gYSBjb3B5IG9mIHRoZSBzdHlsZSBhbmQgbGluayB0YWdzIGZyb20gdGhpcwoJCS8vIGRvY3VtZW50IHNvIHRoZSB0YWJsZSBjYW4gcmV0YWluIGl0cyBiYXNlIHN0eWxpbmcuIE5vdGUgdGhhdCB3ZSBoYXZlCgkJLy8gdG8gdXNlIHN0cmluZyBtYW5pcHVsYXRpb24gYXMgSUUgd29uJ3QgYWxsb3cgZWxlbWVudHMgdG8gYmUgY3JlYXRlZAoJCS8vIGluIHRoZSBob3N0IGRvY3VtZW50IGFuZCB0aGVuIGFwcGVuZGVkIHRvIHRoZSBuZXcgd2luZG93LgoJCXZhciBoZWFkID0gJzx0aXRsZT4nK2V4cG9ydEluZm8udGl0bGUrJzwvdGl0bGU+JzsKCQkkKCdzdHlsZSwgbGluaycpLmVhY2goIGZ1bmN0aW9uICgpIHsKCQkJaGVhZCArPSBfc3R5bGVUb0FicyggdGhpcyApOwoJCX0gKTsKCgkJdHJ5IHsKCQkJd2luLmRvY3VtZW50LmhlYWQuaW5uZXJIVE1MID0gaGVhZDsgLy8gV29yayBhcm91bmQgZm9yIEVkZ2UKCQl9CgkJY2F0Y2ggKGUpIHsKCQkJJCh3aW4uZG9jdW1lbnQuaGVhZCkuaHRtbCggaGVhZCApOyAvLyBPbGQgSUUKCQl9CgoJCS8vIEluamVjdCB0aGUgdGFibGUgYW5kIG90aGVyIHN1cnJvdW5kaW5nIGluZm9ybWF0aW9uCgkJd2luLmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0KCQkJJzxoMT4nK2V4cG9ydEluZm8udGl0bGUrJzwvaDE+JysKCQkJJzxkaXY+JysoZXhwb3J0SW5mby5tZXNzYWdlVG9wIHx8ICcnKSsnPC9kaXY+JysKCQkJaHRtbCsKCQkJJzxkaXY+JysoZXhwb3J0SW5mby5tZXNzYWdlQm90dG9tIHx8ICcnKSsnPC9kaXY+JzsKCgkJJCh3aW4uZG9jdW1lbnQuYm9keSkuYWRkQ2xhc3MoJ2R0LXByaW50LXZpZXcnKTsKCgkJJCgnaW1nJywgd2luLmRvY3VtZW50LmJvZHkpLmVhY2goIGZ1bmN0aW9uICggaSwgaW1nICkgewoJCQlpbWcuc2V0QXR0cmlidXRlKCAnc3JjJywgX3JlbFRvQWJzKCBpbWcuZ2V0QXR0cmlidXRlKCdzcmMnKSApICk7CgkJfSApOwoKCQlpZiAoIGNvbmZpZy5jdXN0b21pemUgKSB7CgkJCWNvbmZpZy5jdXN0b21pemUoIHdpbiwgY29uZmlnLCBkdCApOwoJCX0KCgkJLy8gQWxsb3cgc3R5bGVzaGVldHMgdGltZSB0byBsb2FkCgkJdmFyIGF1dG9QcmludCA9IGZ1bmN0aW9uICgpIHsKCQkJaWYgKCBjb25maWcuYXV0b1ByaW50ICkgewoJCQkJd2luLnByaW50KCk7IC8vIGJsb2NraW5nIC0gc28gY2xvc2Ugd2lsbCBub3QKCQkJCXdpbi5jbG9zZSgpOyAvLyBleGVjdXRlIHVudGlsIHRoaXMgaXMgZG9uZQoJCQl9CgkJfTsKCgkJaWYgKCBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9UcmlkZW50XC9cZC5cZC8pICkgeyAvLyBJRSBuZWVkcyB0byBjYWxsIHRoaXMgd2l0aG91dCBhIHNldFRpbWVvdXQKCQkJYXV0b1ByaW50KCk7CgkJfQoJCWVsc2UgewoJCQl3aW4uc2V0VGltZW91dCggYXV0b1ByaW50LCAxMDAwICk7CgkJfQoJfSwKCgl0aXRsZTogJyonLAoKCW1lc3NhZ2VUb3A6ICcqJywKCgltZXNzYWdlQm90dG9tOiAnKicsCgoJZXhwb3J0T3B0aW9uczoge30sCgoJaGVhZGVyOiB0cnVlLAoKCWZvb3RlcjogZmFsc2UsCgoJYXV0b1ByaW50OiB0cnVlLAoKCWN1c3RvbWl6ZTogbnVsbAp9OwoKCnJldHVybiBEYXRhVGFibGUuQnV0dG9uczsKfSkpOwoKCi8qISBDb2xSZW9yZGVyIDEuNS4yCiAqIMKpMjAxMC0yMDE5IFNwcnlNZWRpYSBMdGQgLSBkYXRhdGFibGVzLm5ldC9saWNlbnNlCiAqLwoKLyoqCiAqIEBzdW1tYXJ5ICAgICBDb2xSZW9yZGVyCiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlIHRoZSBhYmlsaXR5IHRvIHJlb3JkZXIgY29sdW1ucyBpbiBhIERhdGFUYWJsZQogKiBAdmVyc2lvbiAgICAgMS41LjIKICogQGZpbGUgICAgICAgIGRhdGFUYWJsZXMuY29sUmVvcmRlci5qcwogKiBAYXV0aG9yICAgICAgU3ByeU1lZGlhIEx0ZCAod3d3LnNwcnltZWRpYS5jby51aykKICogQGNvbnRhY3QgICAgIHd3dy5zcHJ5bWVkaWEuY28udWsvY29udGFjdAogKiBAY29weXJpZ2h0ICAgQ29weXJpZ2h0IDIwMTAtMjAxOSBTcHJ5TWVkaWEgTHRkLgogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGF2YWlsYWJsZSB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CiAqICAgTUlUIGxpY2Vuc2UgLSBodHRwOi8vZGF0YXRhYmxlcy5uZXQvbGljZW5zZS9taXQKICoKICogVGhpcyBzb3VyY2UgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgbGljZW5zZSBmaWxlcyBmb3IgZGV0YWlscy4KICoKICogRm9yIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvOiBodHRwOi8vd3d3LmRhdGF0YWJsZXMubmV0CiAqLwooZnVuY3Rpb24oIGZhY3RvcnkgKXsKCWlmICggdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkgewoJCS8vIEFNRAoJCWRlZmluZSggWydqcXVlcnknLCAnZGF0YXRhYmxlcy5uZXQnXSwgZnVuY3Rpb24gKCAkICkgewoJCQlyZXR1cm4gZmFjdG9yeSggJCwgd2luZG93LCBkb2N1bWVudCApOwoJCX0gKTsKCX0KCWVsc2UgaWYgKCB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgKSB7CgkJLy8gQ29tbW9uSlMKCQltb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb290LCAkKSB7CgkJCWlmICggISByb290ICkgewoJCQkJcm9vdCA9IHdpbmRvdzsKCQkJfQoKCQkJaWYgKCAhICQgfHwgISAkLmZuLmRhdGFUYWJsZSApIHsKCQkJCSQgPSByZXF1aXJlKCdkYXRhdGFibGVzLm5ldCcpKHJvb3QsICQpLiQ7CgkJCX0KCgkJCXJldHVybiBmYWN0b3J5KCAkLCByb290LCByb290LmRvY3VtZW50ICk7CgkJfTsKCX0KCWVsc2UgewoJCS8vIEJyb3dzZXIKCQlmYWN0b3J5KCBqUXVlcnksIHdpbmRvdywgZG9jdW1lbnQgKTsKCX0KfShmdW5jdGlvbiggJCwgd2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkICkgewondXNlIHN0cmljdCc7CnZhciBEYXRhVGFibGUgPSAkLmZuLmRhdGFUYWJsZTsKCgovKioKICogU3dpdGNoIHRoZSBrZXkgdmFsdWUgcGFpcmluZyBvZiBhbiBpbmRleCBhcnJheSB0byBiZSB2YWx1ZSBrZXkgKGkuZS4gdGhlIG9sZCB2YWx1ZSBpcyBub3cgdGhlCiAqIGtleSkuIEZvciBleGFtcGxlIGNvbnNpZGVyIFsgMiwgMCwgMSBdIHRoaXMgd291bGQgYmUgcmV0dXJuZWQgYXMgWyAxLCAyLCAwIF0uCiAqICBAbWV0aG9kICBmbkludmVydEtleVZhbHVlcwogKiAgQHBhcmFtICAgYXJyYXkgYUluIEFycmF5IHRvIHN3aXRjaCBhcm91bmQKICogIEByZXR1cm5zIGFycmF5CiAqLwpmdW5jdGlvbiBmbkludmVydEtleVZhbHVlcyggYUluICkKewoJdmFyIGFSZXQ9W107Cglmb3IgKCB2YXIgaT0wLCBpTGVuPWFJbi5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJewoJCWFSZXRbIGFJbltpXSBdID0gaTsKCX0KCXJldHVybiBhUmV0Owp9CgoKLyoqCiAqIE1vZGlmeSBhbiBhcnJheSBieSBzd2l0Y2hpbmcgdGhlIHBvc2l0aW9uIG9mIHR3byBlbGVtZW50cwogKiAgQG1ldGhvZCAgZm5BcnJheVN3aXRjaAogKiAgQHBhcmFtICAgYXJyYXkgYUFycmF5IEFycmF5IHRvIGNvbnNpZGVyLCB3aWxsIGJlIG1vZGlmaWVkIGJ5IHJlZmVyZW5jZSAoaS5lLiBubyByZXR1cm4pCiAqICBAcGFyYW0gICBpbnQgaUZyb20gRnJvbSBwb2ludAogKiAgQHBhcmFtICAgaW50IGlUbyBJbnNlcnQgcG9pbnQKICogIEByZXR1cm5zIHZvaWQKICovCmZ1bmN0aW9uIGZuQXJyYXlTd2l0Y2goIGFBcnJheSwgaUZyb20sIGlUbyApCnsKCXZhciBtU3RvcmUgPSBhQXJyYXkuc3BsaWNlKCBpRnJvbSwgMSApWzBdOwoJYUFycmF5LnNwbGljZSggaVRvLCAwLCBtU3RvcmUgKTsKfQoKCi8qKgogKiBTd2l0Y2ggdGhlIHBvc2l0aW9ucyBvZiBub2RlcyBpbiBhIHBhcmVudCBub2RlIChub3RlIHRoaXMgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIGZvcgogKiB0YWJsZSByb3dzKS4gTm90ZSB0aGlzIGZ1bmN0aW9uIGNvbnNpZGVycyBhbGwgZWxlbWVudCBub2RlcyB1bmRlciB0aGUgcGFyZW50IQogKiAgQG1ldGhvZCAgZm5Eb21Td2l0Y2gKICogIEBwYXJhbSAgIHN0cmluZyBzVGFnIFRhZyB0byBjb25zaWRlcgogKiAgQHBhcmFtICAgaW50IGlGcm9tIEVsZW1lbnQgdG8gbW92ZQogKiAgQHBhcmFtICAgaW50IFBvaW50IHRvIGVsZW1lbnQgdGhlIGVsZW1lbnQgdG8gKGJlZm9yZSB0aGlzIHBvaW50KSwgY2FuIGJlIG51bGwgZm9yIGFwcGVuZAogKiAgQHJldHVybnMgdm9pZAogKi8KZnVuY3Rpb24gZm5Eb21Td2l0Y2goIG5QYXJlbnQsIGlGcm9tLCBpVG8gKQp7Cgl2YXIgYW5UYWdzID0gW107Cglmb3IgKCB2YXIgaT0wLCBpTGVuPW5QYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJewoJCWlmICggblBhcmVudC5jaGlsZE5vZGVzW2ldLm5vZGVUeXBlID09IDEgKQoJCXsKCQkJYW5UYWdzLnB1c2goIG5QYXJlbnQuY2hpbGROb2Rlc1tpXSApOwoJCX0KCX0KCXZhciBuU3RvcmUgPSBhblRhZ3NbIGlGcm9tIF07CgoJaWYgKCBpVG8gIT09IG51bGwgKQoJewoJCW5QYXJlbnQuaW5zZXJ0QmVmb3JlKCBuU3RvcmUsIGFuVGFnc1tpVG9dICk7Cgl9CgllbHNlCgl7CgkJblBhcmVudC5hcHBlbmRDaGlsZCggblN0b3JlICk7Cgl9Cn0KCgovKioKICogUGx1Zy1pbiBmb3IgRGF0YVRhYmxlcyB3aGljaCB3aWxsIHJlb3JkZXIgdGhlIGludGVybmFsIGNvbHVtbiBzdHJ1Y3R1cmUgYnkgdGFraW5nIHRoZSBjb2x1bW4KICogZnJvbSBvbmUgcG9zaXRpb24gKGlGcm9tKSBhbmQgaW5zZXJ0IGl0IGludG8gYSBnaXZlbiBwb2ludCAoaVRvKS4KICogIEBtZXRob2QgICQuZm4uZGF0YVRhYmxlRXh0Lm9BcGkuZm5Db2xSZW9yZGVyCiAqICBAcGFyYW0gICBvYmplY3Qgb1NldHRpbmdzIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0IC0gYXV0b21hdGljYWxseSBhZGRlZCBieSBEYXRhVGFibGVzIQogKiAgQHBhcmFtICAgaW50IGlGcm9tIFRha2UgdGhlIGNvbHVtbiB0byBiZSByZXBvc2l0aW9uZWQgZnJvbSB0aGlzIHBvaW50CiAqICBAcGFyYW0gICBpbnQgaVRvIGFuZCBpbnNlcnQgaXQgaW50byB0aGlzIHBvaW50CiAqICBAcGFyYW0gICBib29sIGRyb3AgSW5kaWNhdGUgaWYgdGhlIHJlb3JkZXIgaXMgdGhlIGZpbmFsIG9uZSAoaS5lLiBhIGRyb3ApCiAqICAgIG5vdCBhIGxpdmUgcmVvcmRlcgogKiAgQHBhcmFtICAgYm9vbCBpbnZhbGlkYXRlUm93cyBzcGVlZHMgdXAgcHJvY2Vzc2luZyBpZiBmYWxzZSBwYXNzZWQKICogIEByZXR1cm5zIHZvaWQKICovCiQuZm4uZGF0YVRhYmxlRXh0Lm9BcGkuZm5Db2xSZW9yZGVyID0gZnVuY3Rpb24gKCBvU2V0dGluZ3MsIGlGcm9tLCBpVG8sIGRyb3AsIGludmFsaWRhdGVSb3dzICkKewoJdmFyIGksIGlMZW4sIGosIGpMZW4sIGplbiwgaUNvbHM9b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGgsIG5UcnMsIG9Db2w7Cgl2YXIgYXR0ck1hcCA9IGZ1bmN0aW9uICggb2JqLCBwcm9wLCBtYXBwaW5nICkgewoJCWlmICggISBvYmpbIHByb3AgXSB8fCB0eXBlb2Ygb2JqWyBwcm9wIF0gPT09ICdmdW5jdGlvbicgKSB7CgkJCXJldHVybjsKCQl9CgoJCXZhciBhID0gb2JqWyBwcm9wIF0uc3BsaXQoJy4nKTsKCQl2YXIgbnVtID0gYS5zaGlmdCgpOwoKCQlpZiAoIGlzTmFOKCBudW0qMSApICkgewoJCQlyZXR1cm47CgkJfQoKCQlvYmpbIHByb3AgXSA9IG1hcHBpbmdbIG51bSoxIF0rJy4nK2Euam9pbignLicpOwoJfTsKCgkvKiBTYW5pdHkgY2hlY2sgaW4gdGhlIGlucHV0ICovCglpZiAoIGlGcm9tID09IGlUbyApCgl7CgkJLyogUG9pbnRsZXNzIHJlb3JkZXIgKi8KCQlyZXR1cm47Cgl9CgoJaWYgKCBpRnJvbSA8IDAgfHwgaUZyb20gPj0gaUNvbHMgKQoJewoJCXRoaXMub0FwaS5fZm5Mb2coIG9TZXR0aW5ncywgMSwgIkNvbFJlb3JkZXIgJ2Zyb20nIGluZGV4IGlzIG91dCBvZiBib3VuZHM6ICIraUZyb20gKTsKCQlyZXR1cm47Cgl9CgoJaWYgKCBpVG8gPCAwIHx8IGlUbyA+PSBpQ29scyApCgl7CgkJdGhpcy5vQXBpLl9mbkxvZyggb1NldHRpbmdzLCAxLCAiQ29sUmVvcmRlciAndG8nIGluZGV4IGlzIG91dCBvZiBib3VuZHM6ICIraVRvICk7CgkJcmV0dXJuOwoJfQoKCS8qCgkgKiBDYWxjdWxhdGUgdGhlIG5ldyBjb2x1bW4gYXJyYXkgaW5kZXgsIHNvIHdlIGhhdmUgYSBtYXBwaW5nIGJldHdlZW4gdGhlIG9sZCBhbmQgbmV3CgkgKi8KCXZhciBhaU1hcHBpbmcgPSBbXTsKCWZvciAoIGk9MCwgaUxlbj1pQ29scyA7IGk8aUxlbiA7IGkrKyApCgl7CgkJYWlNYXBwaW5nW2ldID0gaTsKCX0KCWZuQXJyYXlTd2l0Y2goIGFpTWFwcGluZywgaUZyb20sIGlUbyApOwoJdmFyIGFpSW52ZXJ0TWFwcGluZyA9IGZuSW52ZXJ0S2V5VmFsdWVzKCBhaU1hcHBpbmcgKTsKCgoJLyoKCSAqIENvbnZlcnQgYWxsIGludGVybmFsIGluZGV4aW5nIHRvIHRoZSBuZXcgY29sdW1uIG9yZGVyIGluZGV4ZXMKCSAqLwoJLyogU29ydGluZyAqLwoJZm9yICggaT0wLCBpTGVuPW9TZXR0aW5ncy5hYVNvcnRpbmcubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCXsKCQlvU2V0dGluZ3MuYWFTb3J0aW5nW2ldWzBdID0gYWlJbnZlcnRNYXBwaW5nWyBvU2V0dGluZ3MuYWFTb3J0aW5nW2ldWzBdIF07Cgl9CgoJLyogRml4ZWQgc29ydGluZyAqLwoJaWYgKCBvU2V0dGluZ3MuYWFTb3J0aW5nRml4ZWQgIT09IG51bGwgKQoJewoJCWZvciAoIGk9MCwgaUxlbj1vU2V0dGluZ3MuYWFTb3J0aW5nRml4ZWQubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQl7CgkJCW9TZXR0aW5ncy5hYVNvcnRpbmdGaXhlZFtpXVswXSA9IGFpSW52ZXJ0TWFwcGluZ1sgb1NldHRpbmdzLmFhU29ydGluZ0ZpeGVkW2ldWzBdIF07CgkJfQoJfQoKCS8qIERhdGEgY29sdW1uIHNvcnRpbmcgKHRoZSBjb2x1bW4gd2hpY2ggdGhlIHNvcnQgZm9yIGEgZ2l2ZW4gY29sdW1uIHNob3VsZCB0YWtlIHBsYWNlIG9uKSAqLwoJZm9yICggaT0wLCBpTGVuPWlDb2xzIDsgaTxpTGVuIDsgaSsrICkKCXsKCQlvQ29sID0gb1NldHRpbmdzLmFvQ29sdW1uc1tpXTsKCQlmb3IgKCBqPTAsIGpMZW49b0NvbC5hRGF0YVNvcnQubGVuZ3RoIDsgajxqTGVuIDsgaisrICkKCQl7CgkJCW9Db2wuYURhdGFTb3J0W2pdID0gYWlJbnZlcnRNYXBwaW5nWyBvQ29sLmFEYXRhU29ydFtqXSBdOwoJCX0KCgkJLy8gVXBkYXRlIHRoZSBjb2x1bW4gaW5kZXhlcwoJCW9Db2wuaWR4ID0gYWlJbnZlcnRNYXBwaW5nWyBvQ29sLmlkeCBdOwoJfQoKCS8vIFVwZGF0ZSAxLjEwIG9wdGltaXNlZCBzb3J0IGNsYXNzIHJlbW92YWwgdmFyaWFibGUKCSQuZWFjaCggb1NldHRpbmdzLmFMYXN0U29ydCwgZnVuY3Rpb24gKGksIHZhbCkgewoJCW9TZXR0aW5ncy5hTGFzdFNvcnRbaV0uc3JjID0gYWlJbnZlcnRNYXBwaW5nWyB2YWwuc3JjIF07Cgl9ICk7CgoJLyogVXBkYXRlIHRoZSBHZXQgYW5kIFNldCBmdW5jdGlvbnMgZm9yIGVhY2ggY29sdW1uICovCglmb3IgKCBpPTAsIGlMZW49aUNvbHMgOyBpPGlMZW4gOyBpKysgKQoJewoJCW9Db2wgPSBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldOwoKCQlpZiAoIHR5cGVvZiBvQ29sLm1EYXRhID09ICdudW1iZXInICkgewoJCQlvQ29sLm1EYXRhID0gYWlJbnZlcnRNYXBwaW5nWyBvQ29sLm1EYXRhIF07CgkJfQoJCWVsc2UgaWYgKCAkLmlzUGxhaW5PYmplY3QoIG9Db2wubURhdGEgKSApIHsKCQkJLy8gSFRNTDUgZGF0YSBzb3VyY2VkCgkJCWF0dHJNYXAoIG9Db2wubURhdGEsICdfJywgICAgICBhaUludmVydE1hcHBpbmcgKTsKCQkJYXR0ck1hcCggb0NvbC5tRGF0YSwgJ2ZpbHRlcicsIGFpSW52ZXJ0TWFwcGluZyApOwoJCQlhdHRyTWFwKCBvQ29sLm1EYXRhLCAnc29ydCcsICAgYWlJbnZlcnRNYXBwaW5nICk7CgkJCWF0dHJNYXAoIG9Db2wubURhdGEsICd0eXBlJywgICBhaUludmVydE1hcHBpbmcgKTsKCQl9Cgl9CgoJLyoKCSAqIE1vdmUgdGhlIERPTSBlbGVtZW50cwoJICovCglpZiAoIG9TZXR0aW5ncy5hb0NvbHVtbnNbaUZyb21dLmJWaXNpYmxlICkKCXsKCQkvKiBDYWxjdWxhdGUgdGhlIGN1cnJlbnQgdmlzaWJsZSBpbmRleCBhbmQgdGhlIHBvaW50IHRvIGluc2VydCB0aGUgbm9kZSBiZWZvcmUuIFRoZSBpbnNlcnQKCQkgKiBiZWZvcmUgbmVlZHMgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhhdCB0aGVyZSBtaWdodCBub3QgYmUgYW4gZWxlbWVudCB0byBpbnNlcnQgYmVmb3JlLAoJCSAqIGluIHdoaWNoIGNhc2UgaXQgd2lsbCBiZSBudWxsLCBhbmQgYW4gYXBwZW5kQ2hpbGQgc2hvdWxkIGJlIHVzZWQKCQkgKi8KCQl2YXIgaVZpc2libGVJbmRleCA9IHRoaXMub0FwaS5fZm5Db2x1bW5JbmRleFRvVmlzaWJsZSggb1NldHRpbmdzLCBpRnJvbSApOwoJCXZhciBpSW5zZXJ0QmVmb3JlSW5kZXggPSBudWxsOwoKCQlpID0gaVRvIDwgaUZyb20gPyBpVG8gOiBpVG8gKyAxOwoJCXdoaWxlICggaUluc2VydEJlZm9yZUluZGV4ID09PSBudWxsICYmIGkgPCBpQ29scyApCgkJewoJCQlpSW5zZXJ0QmVmb3JlSW5kZXggPSB0aGlzLm9BcGkuX2ZuQ29sdW1uSW5kZXhUb1Zpc2libGUoIG9TZXR0aW5ncywgaSApOwoJCQlpKys7CgkJfQoKCQkvKiBIZWFkZXIgKi8KCQluVHJzID0gb1NldHRpbmdzLm5USGVhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndHInKTsKCQlmb3IgKCBpPTAsIGlMZW49blRycy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCXsKCQkJZm5Eb21Td2l0Y2goIG5UcnNbaV0sIGlWaXNpYmxlSW5kZXgsIGlJbnNlcnRCZWZvcmVJbmRleCApOwoJCX0KCgkJLyogRm9vdGVyICovCgkJaWYgKCBvU2V0dGluZ3MublRGb290ICE9PSBudWxsICkKCQl7CgkJCW5UcnMgPSBvU2V0dGluZ3MublRGb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0cicpOwoJCQlmb3IgKCBpPTAsIGlMZW49blRycy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlmbkRvbVN3aXRjaCggblRyc1tpXSwgaVZpc2libGVJbmRleCwgaUluc2VydEJlZm9yZUluZGV4ICk7CgkJCX0KCQl9CgoJCS8qIEJvZHkgKi8KCQlmb3IgKCBpPTAsIGlMZW49b1NldHRpbmdzLmFvRGF0YS5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCXsKCQkJaWYgKCBvU2V0dGluZ3MuYW9EYXRhW2ldLm5UciAhPT0gbnVsbCApCgkJCXsKCQkJCWZuRG9tU3dpdGNoKCBvU2V0dGluZ3MuYW9EYXRhW2ldLm5UciwgaVZpc2libGVJbmRleCwgaUluc2VydEJlZm9yZUluZGV4ICk7CgkJCX0KCQl9Cgl9CgoJLyoKCSAqIE1vdmUgdGhlIGludGVybmFsIGFycmF5IGVsZW1lbnRzCgkgKi8KCS8qIENvbHVtbnMgKi8KCWZuQXJyYXlTd2l0Y2goIG9TZXR0aW5ncy5hb0NvbHVtbnMsIGlGcm9tLCBpVG8gKTsKCgkvLyByZWdlbmVyYXRlIHRoZSBnZXQgLyBzZXQgZnVuY3Rpb25zCglmb3IgKCBpPTAsIGlMZW49aUNvbHMgOyBpPGlMZW4gOyBpKysgKSB7CgkJb1NldHRpbmdzLm9BcGkuX2ZuQ29sdW1uT3B0aW9ucyggb1NldHRpbmdzLCBpLCB7fSApOwoJfQoKCS8qIFNlYXJjaCBjb2x1bW5zICovCglmbkFycmF5U3dpdGNoKCBvU2V0dGluZ3MuYW9QcmVTZWFyY2hDb2xzLCBpRnJvbSwgaVRvICk7CgoJLyogQXJyYXkgYXJyYXkgLSBpbnRlcm5hbCBkYXRhIGFub2RlcyBjYWNoZSAqLwoJZm9yICggaT0wLCBpTGVuPW9TZXR0aW5ncy5hb0RhdGEubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCXsKCQl2YXIgZGF0YSA9IG9TZXR0aW5ncy5hb0RhdGFbaV07CgkJdmFyIGNlbGxzID0gZGF0YS5hbkNlbGxzOwoKCQlpZiAoIGNlbGxzICkgewoJCQlmbkFycmF5U3dpdGNoKCBjZWxscywgaUZyb20sIGlUbyApOwoKCQkJLy8gTG9uZ2VyIHRlcm0sIHNob3VsZCB0aGlzIGJlIG1vdmVkIGludG8gdGhlIERhdGFUYWJsZXMnIGludmFsaWRhdGUKCQkJLy8gbWV0aG9kcz8KCQkJZm9yICggaj0wLCBqZW49Y2VsbHMubGVuZ3RoIDsgajxqZW4gOyBqKysgKSB7CgkJCQlpZiAoIGNlbGxzW2pdICYmIGNlbGxzW2pdLl9EVF9DZWxsSW5kZXggKSB7CgkJCQkJY2VsbHNbal0uX0RUX0NlbGxJbmRleC5jb2x1bW4gPSBqOwoJCQkJfQoJCQl9CgkJfQoKCQkvLyBGb3IgRE9NIHNvdXJjZWQgZGF0YSwgdGhlIGludmFsaWRhdGUgd2lsbCByZXJlYWQgdGhlIGNlbGwgaW50bwoJCS8vIHRoZSBkYXRhIGFycmF5LCBidXQgZm9yIGRhdGEgc291cmNlcyBhcyBhbiBhcnJheSwgdGhleSBuZWVkIHRvCgkJLy8gYmUgZmxpcHBlZAoJCWlmICggZGF0YS5zcmMgIT09ICdkb20nICYmICQuaXNBcnJheSggZGF0YS5fYURhdGEgKSApIHsKCQkJZm5BcnJheVN3aXRjaCggZGF0YS5fYURhdGEsIGlGcm9tLCBpVG8gKTsKCQl9Cgl9CgoJLyogUmVwb3NpdGlvbiB0aGUgaGVhZGVyIGVsZW1lbnRzIGluIHRoZSBoZWFkZXIgbGF5b3V0IGFycmF5ICovCglmb3IgKCBpPTAsIGlMZW49b1NldHRpbmdzLmFvSGVhZGVyLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgl7CgkJZm5BcnJheVN3aXRjaCggb1NldHRpbmdzLmFvSGVhZGVyW2ldLCBpRnJvbSwgaVRvICk7Cgl9CgoJaWYgKCBvU2V0dGluZ3MuYW9Gb290ZXIgIT09IG51bGwgKQoJewoJCWZvciAoIGk9MCwgaUxlbj1vU2V0dGluZ3MuYW9Gb290ZXIubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQl7CgkJCWZuQXJyYXlTd2l0Y2goIG9TZXR0aW5ncy5hb0Zvb3RlcltpXSwgaUZyb20sIGlUbyApOwoJCX0KCX0KCglpZiAoIGludmFsaWRhdGVSb3dzIHx8IGludmFsaWRhdGVSb3dzID09PSB1bmRlZmluZWQgKQoJewoJCSQuZm4uZGF0YVRhYmxlLkFwaSggb1NldHRpbmdzICkucm93cygpLmludmFsaWRhdGUoKTsKCX0KCgkvKgoJICogVXBkYXRlIERhdGFUYWJsZXMnIGV2ZW50IGhhbmRsZXJzCgkgKi8KCgkvKiBTb3J0IGxpc3RlbmVyICovCglmb3IgKCBpPTAsIGlMZW49aUNvbHMgOyBpPGlMZW4gOyBpKysgKQoJewoJCSQob1NldHRpbmdzLmFvQ29sdW1uc1tpXS5uVGgpLm9mZignLkRUJyk7CgkJdGhpcy5vQXBpLl9mblNvcnRBdHRhY2hMaXN0ZW5lciggb1NldHRpbmdzLCBvU2V0dGluZ3MuYW9Db2x1bW5zW2ldLm5UaCwgaSApOwoJfQoKCgkvKiBGaXJlIGFuIGV2ZW50IHNvIG90aGVyIHBsdWctaW5zIGNhbiB1cGRhdGUgKi8KCSQob1NldHRpbmdzLm9JbnN0YW5jZSkudHJpZ2dlciggJ2NvbHVtbi1yZW9yZGVyLmR0JywgWyBvU2V0dGluZ3MsIHsKCQlmcm9tOiBpRnJvbSwKCQl0bzogaVRvLAoJCW1hcHBpbmc6IGFpSW52ZXJ0TWFwcGluZywKCQlkcm9wOiBkcm9wLAoKCQkvLyBPbGQgc3R5bGUgcGFyYW1ldGVycyBmb3IgY29tcGF0aWJpbGl0eQoJCWlGcm9tOiBpRnJvbSwKCQlpVG86IGlUbywKCQlhaUludmVydE1hcHBpbmc6IGFpSW52ZXJ0TWFwcGluZwoJfSBdICk7Cn07CgovKioKICogQ29sUmVvcmRlciBwcm92aWRlcyBjb2x1bW4gdmlzaWJpbGl0eSBjb250cm9sIGZvciBEYXRhVGFibGVzCiAqIEBjbGFzcyBDb2xSZW9yZGVyCiAqIEBjb25zdHJ1Y3RvcgogKiBAcGFyYW0ge29iamVjdH0gZHQgRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKICogQHBhcmFtIHtvYmplY3R9IG9wdHMgQ29sUmVvcmRlciBvcHRpb25zCiAqLwp2YXIgQ29sUmVvcmRlciA9IGZ1bmN0aW9uKCBkdCwgb3B0cyApCnsKCXZhciBzZXR0aW5ncyA9IG5ldyAkLmZuLmRhdGFUYWJsZS5BcGkoIGR0ICkuc2V0dGluZ3MoKVswXTsKCgkvLyBFbnN1cmUgdGhhdCB3ZSBjYW4ndCBpbml0aWFsaXNlIG9uIHRoZSBzYW1lIHRhYmxlIHR3aWNlCglpZiAoIHNldHRpbmdzLl9jb2xSZW9yZGVyICkgewoJCXJldHVybiBzZXR0aW5ncy5fY29sUmVvcmRlcjsKCX0KCgkvLyBBbGxvdyB0aGUgb3B0aW9ucyB0byBiZSBhIGJvb2xlYW4gZm9yIGRlZmF1bHRzCglpZiAoIG9wdHMgPT09IHRydWUgKSB7CgkJb3B0cyA9IHt9OwoJfQoKCS8vIENvbnZlcnQgZnJvbSBjYW1lbENhc2UgdG8gSHVuZ2FyaWFuLCBqdXN0IGFzIERhdGFUYWJsZXMgZG9lcwoJdmFyIGNhbWVsVG9IdW5nYXJpYW4gPSAkLmZuLmRhdGFUYWJsZS5jYW1lbFRvSHVuZ2FyaWFuOwoJaWYgKCBjYW1lbFRvSHVuZ2FyaWFuICkgewoJCWNhbWVsVG9IdW5nYXJpYW4oIENvbFJlb3JkZXIuZGVmYXVsdHMsIENvbFJlb3JkZXIuZGVmYXVsdHMsIHRydWUgKTsKCQljYW1lbFRvSHVuZ2FyaWFuKCBDb2xSZW9yZGVyLmRlZmF1bHRzLCBvcHRzIHx8IHt9ICk7Cgl9CgoKCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKCSAqIFB1YmxpYyBjbGFzcyB2YXJpYWJsZXMKCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCgoJLyoqCgkgKiBAbmFtZXNwYWNlIFNldHRpbmdzIG9iamVjdCB3aGljaCBjb250YWlucyBjdXN0b21pc2FibGUgaW5mb3JtYXRpb24gZm9yIENvbFJlb3JkZXIgaW5zdGFuY2UKCSAqLwoJdGhpcy5zID0gewoJCS8qKgoJCSAqIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogIEBwcm9wZXJ0eSBkdAoJCSAqICBAdHlwZSAgICAgT2JqZWN0CgkJICogIEBkZWZhdWx0ICBudWxsCgkJICovCgkJImR0IjogbnVsbCwKCgkJLyoqCgkJICogRW5hYmxlIGZsYWcKCQkgKiAgQHByb3BlcnR5IGR0CgkJICogIEB0eXBlICAgICBPYmplY3QKCQkgKiAgQGRlZmF1bHQgIG51bGwKCQkgKi8KCQkiZW5hYmxlIjogbnVsbCwKCgkJLyoqCgkJICogSW5pdGlhbGlzYXRpb24gb2JqZWN0IHVzZWQgZm9yIHRoaXMgaW5zdGFuY2UKCQkgKiAgQHByb3BlcnR5IGluaXQKCQkgKiAgQHR5cGUgICAgIG9iamVjdAoJCSAqICBAZGVmYXVsdCAge30KCQkgKi8KCQkiaW5pdCI6ICQuZXh0ZW5kKCB0cnVlLCB7fSwgQ29sUmVvcmRlci5kZWZhdWx0cywgb3B0cyApLAoKCQkvKioKCQkgKiBOdW1iZXIgb2YgY29sdW1ucyB0byBmaXggKG5vdCBhbGxvdyB0byBiZSByZW9yZGVyZWQpCgkJICogIEBwcm9wZXJ0eSBmaXhlZAoJCSAqICBAdHlwZSAgICAgaW50CgkJICogIEBkZWZhdWx0ICAwCgkJICovCgkJImZpeGVkIjogMCwKCgkJLyoqCgkJICogTnVtYmVyIG9mIGNvbHVtbnMgdG8gZml4IGNvdW50aW5nIGZyb20gcmlnaHQgKG5vdCBhbGxvdyB0byBiZSByZW9yZGVyZWQpCgkJICogIEBwcm9wZXJ0eSBmaXhlZFJpZ2h0CgkJICogIEB0eXBlICAgICBpbnQKCQkgKiAgQGRlZmF1bHQgIDAKCQkgKi8KCQkiZml4ZWRSaWdodCI6IDAsCgoJCS8qKgoJCSAqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBvbmNlIHRoZSByZW9yZGVyIGhhcyBiZWVuIGRvbmUKCQkgKiAgQHByb3BlcnR5IHJlb3JkZXJDYWxsYmFjawoJCSAqICBAdHlwZSAgICAgZnVuY3Rpb24KCQkgKiAgQGRlZmF1bHQgIG51bGwKCQkgKi8KCQkicmVvcmRlckNhbGxiYWNrIjogbnVsbCwKCgkJLyoqCgkJICogQG5hbWVzcGFjZSBJbmZvcm1hdGlvbiB1c2VkIGZvciB0aGUgbW91c2UgZHJhZwoJCSAqLwoJCSJtb3VzZSI6IHsKCQkJInN0YXJ0WCI6IC0xLAoJCQkic3RhcnRZIjogLTEsCgkJCSJvZmZzZXRYIjogLTEsCgkJCSJvZmZzZXRZIjogLTEsCgkJCSJ0YXJnZXQiOiAtMSwKCQkJInRhcmdldEluZGV4IjogLTEsCgkJCSJmcm9tSW5kZXgiOiAtMQoJCX0sCgoJCS8qKgoJCSAqIEluZm9ybWF0aW9uIHdoaWNoIGlzIHVzZWQgZm9yIHBvc2l0aW9uaW5nIHRoZSBpbnNlcnQgY3Vzb3IgYW5kIGtub3dpbmcgd2hlcmUgdG8gZG8gdGhlCgkJICogaW5zZXJ0LiBBcnJheSBvZiBvYmplY3RzIHdpdGggdGhlIHByb3BlcnRpZXM6CgkJICogICB4OiB4LWF4aXMgcG9zaXRpb24KCQkgKiAgIHRvOiBpbnNlcnQgcG9pbnQKCQkgKiAgQHByb3BlcnR5IGFvVGFyZ2V0cwoJCSAqICBAdHlwZSAgICAgYXJyYXkKCQkgKiAgQGRlZmF1bHQgIFtdCgkJICovCgkJImFvVGFyZ2V0cyI6IFtdCgl9OwoKCgkvKioKCSAqIEBuYW1lc3BhY2UgQ29tbW9uIGFuZCB1c2VmdWwgRE9NIGVsZW1lbnRzIGZvciB0aGUgY2xhc3MgaW5zdGFuY2UKCSAqLwoJdGhpcy5kb20gPSB7CgkJLyoqCgkJICogRHJhZ2dpbmcgZWxlbWVudCAodGhlIG9uZSB0aGUgbW91c2UgaXMgbW92aW5nKQoJCSAqICBAcHJvcGVydHkgZHJhZwoJCSAqICBAdHlwZSAgICAgZWxlbWVudAoJCSAqICBAZGVmYXVsdCAgbnVsbAoJCSAqLwoJCSJkcmFnIjogbnVsbCwKCgkJLyoqCgkJICogVGhlIGluc2VydCBjdXJzb3IKCQkgKiAgQHByb3BlcnR5IHBvaW50ZXIKCQkgKiAgQHR5cGUgICAgIGVsZW1lbnQKCQkgKiAgQGRlZmF1bHQgIG51bGwKCQkgKi8KCQkicG9pbnRlciI6IG51bGwKCX07CgoJLyogQ29uc3RydWN0b3IgbG9naWMgKi8KCXRoaXMucy5lbmFibGUgPSB0aGlzLnMuaW5pdC5iRW5hYmxlOwoJdGhpcy5zLmR0ID0gc2V0dGluZ3M7Cgl0aGlzLnMuZHQuX2NvbFJlb3JkZXIgPSB0aGlzOwoJdGhpcy5fZm5Db25zdHJ1Y3QoKTsKCglyZXR1cm4gdGhpczsKfTsKCgoKJC5leHRlbmQoIENvbFJlb3JkZXIucHJvdG90eXBlLCB7CgkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkgKiBQdWJsaWMgbWV0aG9kcwoJICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KCgkvKioKCSAqIEVuYWJsZSAvIGRpc2FibGUgZW5kIHVzZXIgaW50ZXJhY3Rpb24KCSAqLwoJZm5FbmFibGU6IGZ1bmN0aW9uICggZmxhZyApCgl7CgkJaWYgKCBmbGFnID09PSBmYWxzZSApIHsKCQkJcmV0dXJuIGZuRGlzYWJsZSgpOwoJCX0KCgkJdGhpcy5zLmVuYWJsZSA9IHRydWU7Cgl9LAoKCS8qKgoJICogRGlzYWJsZSBlbmQgdXNlciBpbnRlcmFjdGlvbgoJICovCglmbkRpc2FibGU6IGZ1bmN0aW9uICgpCgl7CgkJdGhpcy5zLmVuYWJsZSA9IGZhbHNlOwoJfSwKCgkvKioKCSAqIFJlc2V0IHRoZSBjb2x1bW4gb3JkZXJpbmcgdG8gdGhlIG9yaWdpbmFsIG9yZGVyaW5nIHRoYXQgd2FzIGRldGVjdGVkIG9uCgkgKiBzdGFydCB1cC4KCSAqICBAcmV0dXJuIHt0aGlzfSBSZXR1cm5zIGB0aGlzYCBmb3IgY2hhaW5pbmcuCgkgKgoJICogIEBleGFtcGxlCgkgKiAgICAvLyBEYXRhVGFibGVzIGluaXRpYWxpc2F0aW9uIHdpdGggQ29sUmVvcmRlcgoJICogICAgdmFyIHRhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCSAqICAgICAgICAic0RvbSI6ICdSbGZydGlwJwoJICogICAgfSApOwoJICoKCSAqICAgIC8vIEFkZCBjbGljayBldmVudCB0byBhIGJ1dHRvbiB0byByZXNldCB0aGUgb3JkZXJpbmcKCSAqICAgICQoJyNyZXNldE9yZGVyaW5nJykuY2xpY2soIGZ1bmN0aW9uIChlKSB7CgkgKiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoJICogICAgICAgICQuZm4uZGF0YVRhYmxlLkNvbFJlb3JkZXIoIHRhYmxlICkuZm5SZXNldCgpOwoJICogICAgfSApOwoJICovCgkiZm5SZXNldCI6IGZ1bmN0aW9uICgpCgl7CgkJdGhpcy5fZm5PcmRlckNvbHVtbnMoIHRoaXMuZm5PcmRlcigpICk7CgoJCXJldHVybiB0aGlzOwoJfSwKCgkvKioKCSAqIGBEZXByZWNhdGVkYCAtIEdldCB0aGUgY3VycmVudCBvcmRlciBvZiB0aGUgY29sdW1ucywgYXMgYW4gYXJyYXkuCgkgKiAgQHJldHVybiB7YXJyYXl9IEFycmF5IG9mIGNvbHVtbiBpZGVudGlmaWVycwoJICogIEBkZXByZWNhdGVkIGBmbk9yZGVyYCBzaG91bGQgYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRoaXMgbWV0aG9kLgoJICogICAgICBgZm5PcmRlcmAgYWN0cyBhcyBhIGdldHRlci9zZXR0ZXIuCgkgKi8KCSJmbkdldEN1cnJlbnRPcmRlciI6IGZ1bmN0aW9uICgpCgl7CgkJcmV0dXJuIHRoaXMuZm5PcmRlcigpOwoJfSwKCgkvKioKCSAqIEdldCB0aGUgY3VycmVudCBvcmRlciBvZiB0aGUgY29sdW1ucywgYXMgYW4gYXJyYXkuIE5vdGUgdGhhdCB0aGUgdmFsdWVzCgkgKiBnaXZlbiBpbiB0aGUgYXJyYXkgYXJlIHVuaXF1ZSBpZGVudGlmaWVycyBmb3IgZWFjaCBjb2x1bW4uIEN1cnJlbnRseQoJICogdGhlc2UgYXJlIHRoZSBvcmlnaW5hbCBvcmRlcmluZyBvZiB0aGUgY29sdW1ucyB0aGF0IHdhcyBkZXRlY3RlZCBvbgoJICogc3RhcnQgdXAsIGJ1dCB0aGlzIGNvdWxkIHBvdGVudGlhbGx5IGNoYW5nZSBpbiBmdXR1cmUuCgkgKiAgQHJldHVybiB7YXJyYXl9IEFycmF5IG9mIGNvbHVtbiBpZGVudGlmaWVycwoJICoKCSAqICBAZXhhbXBsZQoJICogICAgLy8gR2V0IGNvbHVtbiBvcmRlcmluZyBmb3IgdGhlIHRhYmxlCgkgKiAgICB2YXIgb3JkZXIgPSAkLmZuLmRhdGFUYWJsZS5Db2xSZW9yZGVyKCBkYXRhVGFibGUgKS5mbk9yZGVyKCk7CgkgKi8vKioKCSAqIFNldCB0aGUgb3JkZXIgb2YgdGhlIGNvbHVtbnMsIGZyb20gdGhlIHBvc2l0aW9ucyBpZGVudGlmaWVkIGluIHRoZQoJICogb3JkZXJpbmcgYXJyYXkgZ2l2ZW4uIE5vdGUgdGhhdCBDb2xSZW9yZGVyIHRha2VzIGEgYnJ1dGUgZm9yY2UgYXBwcm9hY2gKCSAqIHRvIHJlb3JkZXJpbmcsIHNvIGl0IGlzIHBvc3NpYmxlIG11bHRpcGxlIHJlb3JkZXJpbmcgZXZlbnRzIHdpbGwgb2NjdXIKCSAqIGJlZm9yZSB0aGUgZmluYWwgb3JkZXIgaXMgc2V0dGxlZCB1cG9uLgoJICogIEBwYXJhbSB7YXJyYXl9IFtzZXRdIEFycmF5IG9mIGNvbHVtbiBpZGVudGlmaWVycyBpbiB0aGUgbmV3IG9yZGVyLiBOb3RlCgkgKiAgICB0aGF0IGV2ZXJ5IGNvbHVtbiBtdXN0IGJlIGluY2x1ZGVkLCB1bmlxdWVseSwgaW4gdGhpcyBhcnJheS4KCSAqICBAcmV0dXJuIHt0aGlzfSBSZXR1cm5zIGB0aGlzYCBmb3IgY2hhaW5pbmcuCgkgKgoJICogIEBleGFtcGxlCgkgKiAgICAvLyBTd2FwIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNvbHVtbnMKCSAqICAgICQuZm4uZGF0YVRhYmxlLkNvbFJlb3JkZXIoIGRhdGFUYWJsZSApLmZuT3JkZXIoIFsxLCAwLCAyLCAzLCA0XSApOwoJICoKCSAqICBAZXhhbXBsZQoJICogICAgLy8gTW92ZSB0aGUgZmlyc3QgY29sdW1uIHRvIHRoZSBlbmQgZm9yIHRoZSB0YWJsZSBgI2V4YW1wbGVgCgkgKiAgICB2YXIgY3VyciA9ICQuZm4uZGF0YVRhYmxlLkNvbFJlb3JkZXIoICcjZXhhbXBsZScgKS5mbk9yZGVyKCk7CgkgKiAgICB2YXIgZmlyc3QgPSBjdXJyLnNoaWZ0KCk7CgkgKiAgICBjdXJyLnB1c2goIGZpcnN0ICk7CgkgKiAgICAkLmZuLmRhdGFUYWJsZS5Db2xSZW9yZGVyKCAnI2V4YW1wbGUnICkuZm5PcmRlciggY3VyciApOwoJICoKCSAqICBAZXhhbXBsZQoJICogICAgLy8gUmV2ZXJzZSB0aGUgdGFibGUncyBvcmRlcgoJICogICAgJC5mbi5kYXRhVGFibGUuQ29sUmVvcmRlciggJyNleGFtcGxlJyApLmZuT3JkZXIoCgkgKiAgICAgICQuZm4uZGF0YVRhYmxlLkNvbFJlb3JkZXIoICcjZXhhbXBsZScgKS5mbk9yZGVyKCkucmV2ZXJzZSgpCgkgKiAgICApOwoJICovCgkiZm5PcmRlciI6IGZ1bmN0aW9uICggc2V0LCBvcmlnaW5hbCApCgl7CgkJdmFyIGEgPSBbXSwgaSwgaWVuLCBqLCBqZW47CgkJdmFyIGNvbHVtbnMgPSB0aGlzLnMuZHQuYW9Db2x1bW5zOwoKCQlpZiAoIHNldCA9PT0gdW5kZWZpbmVkICl7CgkJCWZvciAoIGk9MCwgaWVuPWNvbHVtbnMubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQlhLnB1c2goIGNvbHVtbnNbaV0uX0NvbFJlb3JkZXJfaU9yaWdDb2wgKTsKCQkJfQoKCQkJcmV0dXJuIGE7CgkJfQoKCQkvLyBUaGUgb3JkZXIgZ2l2ZW4gaXMgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGluZGV4ZXMsIHJhdGhlciB0aGFuIHRoZQoJCS8vIGV4aXN0aW5nIG9uZXMsIHNvIHdlIG5lZWQgdG8gdHJhbnNsYXRlIGZyb20gdGhlIG9yaWdpbmFsIHRvIGN1cnJlbnQKCQkvLyBiZWZvcmUgdGhlbiBkb2luZyB0aGUgb3JkZXIKCQlpZiAoIG9yaWdpbmFsICkgewoJCQl2YXIgb3JkZXIgPSB0aGlzLmZuT3JkZXIoKTsKCgkJCWZvciAoIGk9MCwgaWVuPXNldC5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCWEucHVzaCggJC5pbkFycmF5KCBzZXRbaV0sIG9yZGVyICkgKTsKCQkJfQoKCQkJc2V0ID0gYTsKCQl9CgoJCXRoaXMuX2ZuT3JkZXJDb2x1bW5zKCBmbkludmVydEtleVZhbHVlcyggc2V0ICkgKTsKCgkJcmV0dXJuIHRoaXM7Cgl9LAoKCgkvKioKCSAqIENvbnZlcnQgZnJvbSB0aGUgb3JpZ2luYWwgY29sdW1uIGluZGV4LCB0byB0aGUgb3JpZ2luYWwKCSAqCgkgKiBAcGFyYW0gIHtpbnR8YXJyYXl9IGlkeCBJbmRleChlcykgdG8gY29udmVydAoJICogQHBhcmFtICB7c3RyaW5nfSBkaXIgVHJhbnNwb3NlIGRpcmVjdGlvbiAtIGBmcm9tT3JpZ2luYWxgIC8gYHRvQ3VycmVudGAKCSAqICAgb3IgYCd0b09yaWdpbmFsYCAvIGBmcm9tQ3VycmVudGAKCSAqIEByZXR1cm4ge2ludHxhcnJheX0gICAgIENvbnZlcnRlZCB2YWx1ZXMKCSAqLwoJZm5UcmFuc3Bvc2U6IGZ1bmN0aW9uICggaWR4LCBkaXIgKQoJewoJCWlmICggISBkaXIgKSB7CgkJCWRpciA9ICd0b0N1cnJlbnQnOwoJCX0KCgkJdmFyIG9yZGVyID0gdGhpcy5mbk9yZGVyKCk7CgkJdmFyIGNvbHVtbnMgPSB0aGlzLnMuZHQuYW9Db2x1bW5zOwoKCQlpZiAoIGRpciA9PT0gJ3RvQ3VycmVudCcgKSB7CgkJCS8vIEdpdmVuIGFuIG9yaWdpbmFsIGluZGV4LCB3YW50IHRoZSBjdXJyZW50CgkJCXJldHVybiAhICQuaXNBcnJheSggaWR4ICkgPwoJCQkJJC5pbkFycmF5KCBpZHgsIG9yZGVyICkgOgoJCQkJJC5tYXAoIGlkeCwgZnVuY3Rpb24gKCBpbmRleCApIHsKCQkJCQlyZXR1cm4gJC5pbkFycmF5KCBpbmRleCwgb3JkZXIgKTsKCQkJCX0gKTsKCQl9CgkJZWxzZSB7CgkJCS8vIEdpdmVuIGEgY3VycmVudCBpbmRleCwgd2FudCB0aGUgb3JpZ2luYWwKCQkJcmV0dXJuICEgJC5pc0FycmF5KCBpZHggKSA/CgkJCQljb2x1bW5zW2lkeF0uX0NvbFJlb3JkZXJfaU9yaWdDb2wgOgoJCQkJJC5tYXAoIGlkeCwgZnVuY3Rpb24gKCBpbmRleCApIHsKCQkJCQlyZXR1cm4gY29sdW1uc1tpbmRleF0uX0NvbFJlb3JkZXJfaU9yaWdDb2w7CgkJCQl9ICk7CgkJfQoJfSwKCgoJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJICogUHJpdmF0ZSBtZXRob2RzICh0aGV5IGFyZSBvZiBjb3Vyc2UgcHVibGljIGluIEpTLCBidXQgcmVjb21tZW5kZWQgYXMgcHJpdmF0ZSkKCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCgoJLyoqCgkgKiBDb25zdHJ1Y3RvciBsb2dpYwoJICogIEBtZXRob2QgIF9mbkNvbnN0cnVjdAoJICogIEByZXR1cm5zIHZvaWQKCSAqICBAcHJpdmF0ZQoJICovCgkiX2ZuQ29uc3RydWN0IjogZnVuY3Rpb24gKCkKCXsKCQl2YXIgdGhhdCA9IHRoaXM7CgkJdmFyIGlMZW4gPSB0aGlzLnMuZHQuYW9Db2x1bW5zLmxlbmd0aDsKCQl2YXIgdGFibGUgPSB0aGlzLnMuZHQublRhYmxlOwoJCXZhciBpOwoKCQkvKiBDb2x1bW5zIGRpc2NvdW50ZWQgZnJvbSByZW9yZGVyaW5nIC0gY291bnRpbmcgbGVmdCB0byByaWdodCAqLwoJCWlmICggdGhpcy5zLmluaXQuaUZpeGVkQ29sdW1ucyApCgkJewoJCQl0aGlzLnMuZml4ZWQgPSB0aGlzLnMuaW5pdC5pRml4ZWRDb2x1bW5zOwoJCX0KCgkJaWYgKCB0aGlzLnMuaW5pdC5pRml4ZWRDb2x1bW5zTGVmdCApCgkJewoJCQl0aGlzLnMuZml4ZWQgPSB0aGlzLnMuaW5pdC5pRml4ZWRDb2x1bW5zTGVmdDsKCQl9CgoJCS8qIENvbHVtbnMgZGlzY291bnRlZCBmcm9tIHJlb3JkZXJpbmcgLSBjb3VudGluZyByaWdodCB0byBsZWZ0ICovCgkJdGhpcy5zLmZpeGVkUmlnaHQgPSB0aGlzLnMuaW5pdC5pRml4ZWRDb2x1bW5zUmlnaHQgPwoJCQl0aGlzLnMuaW5pdC5pRml4ZWRDb2x1bW5zUmlnaHQgOgoJCQkwOwoKCQkvKiBEcm9wIGNhbGxiYWNrIGluaXRpYWxpc2F0aW9uIG9wdGlvbiAqLwoJCWlmICggdGhpcy5zLmluaXQuZm5SZW9yZGVyQ2FsbGJhY2sgKQoJCXsKCQkJdGhpcy5zLnJlb3JkZXJDYWxsYmFjayA9IHRoaXMucy5pbml0LmZuUmVvcmRlckNhbGxiYWNrOwoJCX0KCgkJLyogQWRkIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgZHJhZyBhbmQgZHJvcCwgYW5kIGFsc28gbWFyayB0aGUgb3JpZ2luYWwgY29sdW1uIG9yZGVyICovCgkJZm9yICggaSA9IDA7IGkgPCBpTGVuOyBpKysgKQoJCXsKCQkJaWYgKCBpID4gdGhpcy5zLmZpeGVkLTEgJiYgaSA8IGlMZW4gLSB0aGlzLnMuZml4ZWRSaWdodCApCgkJCXsKCQkJCXRoaXMuX2ZuTW91c2VMaXN0ZW5lciggaSwgdGhpcy5zLmR0LmFvQ29sdW1uc1tpXS5uVGggKTsKCQkJfQoKCQkJLyogTWFyayB0aGUgb3JpZ2luYWwgY29sdW1uIG9yZGVyIGZvciBsYXRlciByZWZlcmVuY2UgKi8KCQkJdGhpcy5zLmR0LmFvQ29sdW1uc1tpXS5fQ29sUmVvcmRlcl9pT3JpZ0NvbCA9IGk7CgkJfQoKCQkvKiBTdGF0ZSBzYXZpbmcgKi8KCQl0aGlzLnMuZHQub0FwaS5fZm5DYWxsYmFja1JlZyggdGhpcy5zLmR0LCAnYW9TdGF0ZVNhdmVQYXJhbXMnLCBmdW5jdGlvbiAob1MsIG9EYXRhKSB7CgkJCXRoYXQuX2ZuU3RhdGVTYXZlLmNhbGwoIHRoYXQsIG9EYXRhICk7CgkJfSwgIkNvbFJlb3JkZXJfU3RhdGUiICk7CgoJCS8qIEFuIGluaXRpYWwgY29sdW1uIG9yZGVyIGhhcyBiZWVuIHNwZWNpZmllZCAqLwoJCXZhciBhaU9yZGVyID0gbnVsbDsKCQlpZiAoIHRoaXMucy5pbml0LmFpT3JkZXIgKQoJCXsKCQkJYWlPcmRlciA9IHRoaXMucy5pbml0LmFpT3JkZXIuc2xpY2UoKTsKCQl9CgoJCS8qIFN0YXRlIGxvYWRpbmcsIG92ZXJyaWRlcyB0aGUgY29sdW1uIG9yZGVyIGdpdmVuICovCgkJaWYgKCB0aGlzLnMuZHQub0xvYWRlZFN0YXRlICYmIHR5cGVvZiB0aGlzLnMuZHQub0xvYWRlZFN0YXRlLkNvbFJlb3JkZXIgIT0gJ3VuZGVmaW5lZCcgJiYKCQkgIHRoaXMucy5kdC5vTG9hZGVkU3RhdGUuQ29sUmVvcmRlci5sZW5ndGggPT0gdGhpcy5zLmR0LmFvQ29sdW1ucy5sZW5ndGggKQoJCXsKCQkJYWlPcmRlciA9IHRoaXMucy5kdC5vTG9hZGVkU3RhdGUuQ29sUmVvcmRlcjsKCQl9CgoJCS8qIElmIHdlIGhhdmUgYW4gb3JkZXIgdG8gYXBwbHkgLSBkbyBzbyAqLwoJCWlmICggYWlPcmRlciApCgkJewoJCQkvKiBXZSBtaWdodCBiZSBjYWxsZWQgZHVyaW5nIG9yIGFmdGVyIHRoZSBEYXRhVGFibGVzIGluaXRpYWxpc2F0aW9uLiBJZiBiZWZvcmUsIHRoZW4gd2UgbmVlZAoJCQkgKiB0byB3YWl0IHVudGlsIHRoZSBkcmF3IGlzIGRvbmUsIGlmIGFmdGVyLCB0aGVuIGRvIHdoYXQgd2UgbmVlZCB0byBkbyByaWdodCBhd2F5CgkJCSAqLwoJCQlpZiAoICF0aGF0LnMuZHQuX2JJbml0Q29tcGxldGUgKQoJCQl7CgkJCQl2YXIgYkRvbmUgPSBmYWxzZTsKCQkJCSQodGFibGUpLm9uKCAnZHJhdy5kdC5jb2xSZW9yZGVyJywgZnVuY3Rpb24gKCkgewoJCQkJCWlmICggIXRoYXQucy5kdC5fYkluaXRDb21wbGV0ZSAmJiAhYkRvbmUgKQoJCQkJCXsKCQkJCQkJYkRvbmUgPSB0cnVlOwoJCQkJCQl2YXIgcmVzb3J0ID0gZm5JbnZlcnRLZXlWYWx1ZXMoIGFpT3JkZXIgKTsKCQkJCQkJdGhhdC5fZm5PcmRlckNvbHVtbnMuY2FsbCggdGhhdCwgcmVzb3J0ICk7CgkJCQkJfQoJCQkJfSApOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJdmFyIHJlc29ydCA9IGZuSW52ZXJ0S2V5VmFsdWVzKCBhaU9yZGVyICk7CgkJCQl0aGF0Ll9mbk9yZGVyQ29sdW1ucy5jYWxsKCB0aGF0LCByZXNvcnQgKTsKCQkJfQoJCX0KCQllbHNlIHsKCQkJdGhpcy5fZm5TZXRDb2x1bW5JbmRleGVzKCk7CgkJfQoKCQkvLyBEZXN0cm95IGNsZWFuIHVwCgkJJCh0YWJsZSkub24oICdkZXN0cm95LmR0LmNvbFJlb3JkZXInLCBmdW5jdGlvbiAoKSB7CgkJCSQodGFibGUpLm9mZiggJ2Rlc3Ryb3kuZHQuY29sUmVvcmRlciBkcmF3LmR0LmNvbFJlb3JkZXInICk7CgoJCQkkLmVhY2goIHRoYXQucy5kdC5hb0NvbHVtbnMsIGZ1bmN0aW9uIChpLCBjb2x1bW4pIHsKCQkJCSQoY29sdW1uLm5UaCkub2ZmKCcuQ29sUmVvcmRlcicpOwoJCQkJJChjb2x1bW4ublRoKS5yZW1vdmVBdHRyKCdkYXRhLWNvbHVtbi1pbmRleCcpOwoJCQl9ICk7CgoJCQl0aGF0LnMuZHQuX2NvbFJlb3JkZXIgPSBudWxsOwoJCQl0aGF0LnMgPSBudWxsOwoJCX0gKTsKCX0sCgoKCS8qKgoJICogU2V0IHRoZSBjb2x1bW4gb3JkZXIgZnJvbSBhbiBhcnJheQoJICogIEBtZXRob2QgIF9mbk9yZGVyQ29sdW1ucwoJICogIEBwYXJhbSAgIGFycmF5IGEgQW4gYXJyYXkgb2YgaW50ZWdlcnMgd2hpY2ggZGljdGF0ZSB0aGUgY29sdW1uIG9yZGVyIHRoYXQgc2hvdWxkIGJlIGFwcGxpZWQKCSAqICBAcmV0dXJucyB2b2lkCgkgKiAgQHByaXZhdGUKCSAqLwoJIl9mbk9yZGVyQ29sdW1ucyI6IGZ1bmN0aW9uICggYSApCgl7CgkJdmFyIGNoYW5nZWQgPSBmYWxzZTsKCgkJaWYgKCBhLmxlbmd0aCAhPSB0aGlzLnMuZHQuYW9Db2x1bW5zLmxlbmd0aCApCgkJewoJCQl0aGlzLnMuZHQub0luc3RhbmNlLm9BcGkuX2ZuTG9nKCB0aGlzLnMuZHQsIDEsICJDb2xSZW9yZGVyIC0gYXJyYXkgcmVvcmRlciBkb2VzIG5vdCAiKwoJCQkJIm1hdGNoIGtub3duIG51bWJlciBvZiBjb2x1bW5zLiBTa2lwcGluZy4iICk7CgkJCXJldHVybjsKCQl9CgoJCWZvciAoIHZhciBpPTAsIGlMZW49YS5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCXsKCQkJdmFyIGN1cnJJbmRleCA9ICQuaW5BcnJheSggaSwgYSApOwoJCQlpZiAoIGkgIT0gY3VyckluZGV4ICkKCQkJewoJCQkJLyogUmVvcmRlciBvdXIgc3dpdGNoaW5nIGFycmF5ICovCgkJCQlmbkFycmF5U3dpdGNoKCBhLCBjdXJySW5kZXgsIGkgKTsKCgkJCQkvKiBEbyB0aGUgY29sdW1uIHJlb3JkZXIgaW4gdGhlIHRhYmxlICovCgkJCQl0aGlzLnMuZHQub0luc3RhbmNlLmZuQ29sUmVvcmRlciggY3VyckluZGV4LCBpLCB0cnVlLCBmYWxzZSApOwoKCQkJCWNoYW5nZWQgPSB0cnVlOwoJCQl9CgkJfQoKCQl0aGlzLl9mblNldENvbHVtbkluZGV4ZXMoKTsKCgkJLy8gSGFzIGFueXRoaW5nIGFjdHVhbGx5IGNoYW5nZWQ/IElmIG5vdCwgdGhlbiBub3RoaW5nIGVsc2UgdG8gZG8KCQlpZiAoICEgY2hhbmdlZCApIHsKCQkJcmV0dXJuOwoJCX0KCgkJJC5mbi5kYXRhVGFibGUuQXBpKCB0aGlzLnMuZHQgKS5yb3dzKCkuaW52YWxpZGF0ZSgpOwoKCQkvKiBXaGVuIHNjcm9sbGluZyB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIHRoZSBjb2x1bW4gc2l6ZXMgdG8gYWxsb3cgZm9yIHRoZSBzaGlmdCAqLwoJCWlmICggdGhpcy5zLmR0Lm9TY3JvbGwuc1ggIT09ICIiIHx8IHRoaXMucy5kdC5vU2Nyb2xsLnNZICE9PSAiIiApCgkJewoJCQl0aGlzLnMuZHQub0luc3RhbmNlLmZuQWRqdXN0Q29sdW1uU2l6aW5nKCBmYWxzZSApOwoJCX0KCgkJLyogU2F2ZSB0aGUgc3RhdGUgKi8KCQl0aGlzLnMuZHQub0luc3RhbmNlLm9BcGkuX2ZuU2F2ZVN0YXRlKCB0aGlzLnMuZHQgKTsKCgkJaWYgKCB0aGlzLnMucmVvcmRlckNhbGxiYWNrICE9PSBudWxsICkKCQl7CgkJCXRoaXMucy5yZW9yZGVyQ2FsbGJhY2suY2FsbCggdGhpcyApOwoJCX0KCX0sCgoKCS8qKgoJICogQmVjYXVzZSB3ZSBjaGFuZ2UgdGhlIGluZGV4ZXMgb2YgY29sdW1ucyBpbiB0aGUgdGFibGUsIHJlbGF0aXZlIHRvIHRoZWlyIHN0YXJ0aW5nIHBvaW50CgkgKiB3ZSBuZWVkIHRvIHJlb3JkZXIgdGhlIHN0YXRlIGNvbHVtbnMgdG8gd2hhdCB0aGV5IGFyZSBhdCB0aGUgc3RhcnRpbmcgcG9pbnQgc28gd2UgY2FuCgkgKiB0aGVuIHJlYXJyYW5nZSB0aGVtIGFnYWluIG9uIHN0YXRlIGxvYWQhCgkgKiAgQG1ldGhvZCAgX2ZuU3RhdGVTYXZlCgkgKiAgQHBhcmFtICAgb2JqZWN0IG9TdGF0ZSBEYXRhVGFibGVzIHN0YXRlCgkgKiAgQHJldHVybnMgc3RyaW5nIEpTT04gZW5jb2RlZCBjb29raWUgc3RyaW5nIGZvciBEYXRhVGFibGVzCgkgKiAgQHByaXZhdGUKCSAqLwoJIl9mblN0YXRlU2F2ZSI6IGZ1bmN0aW9uICggb1N0YXRlICkKCXsKCQl2YXIgaSwgaUxlbiwgYUNvcHksIGlPcmlnQ29sdW1uOwoJCXZhciBvU2V0dGluZ3MgPSB0aGlzLnMuZHQ7CgkJdmFyIGNvbHVtbnMgPSBvU2V0dGluZ3MuYW9Db2x1bW5zOwoKCQlvU3RhdGUuQ29sUmVvcmRlciA9IFtdOwoKCQkvKiBTb3J0aW5nICovCgkJaWYgKCBvU3RhdGUuYWFTb3J0aW5nICkgewoJCQkvLyAxLjEwLjAtCgkJCWZvciAoIGk9MCA7IGk8b1N0YXRlLmFhU29ydGluZy5sZW5ndGggOyBpKysgKSB7CgkJCQlvU3RhdGUuYWFTb3J0aW5nW2ldWzBdID0gY29sdW1uc1sgb1N0YXRlLmFhU29ydGluZ1tpXVswXSBdLl9Db2xSZW9yZGVyX2lPcmlnQ29sOwoJCQl9CgoJCQl2YXIgYVNlYXJjaENvcHkgPSAkLmV4dGVuZCggdHJ1ZSwgW10sIG9TdGF0ZS5hb1NlYXJjaENvbHMgKTsKCgkJCWZvciAoIGk9MCwgaUxlbj1jb2x1bW5zLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCWlPcmlnQ29sdW1uID0gY29sdW1uc1tpXS5fQ29sUmVvcmRlcl9pT3JpZ0NvbDsKCgkJCQkvKiBDb2x1bW4gZmlsdGVyICovCgkJCQlvU3RhdGUuYW9TZWFyY2hDb2xzWyBpT3JpZ0NvbHVtbiBdID0gYVNlYXJjaENvcHlbaV07CgoJCQkJLyogVmlzaWJpbGl0eSAqLwoJCQkJb1N0YXRlLmFiVmlzQ29sc1sgaU9yaWdDb2x1bW4gXSA9IGNvbHVtbnNbaV0uYlZpc2libGU7CgoJCQkJLyogQ29sdW1uIHJlb3JkZXJpbmcgKi8KCQkJCW9TdGF0ZS5Db2xSZW9yZGVyLnB1c2goIGlPcmlnQ29sdW1uICk7CgkJCX0KCQl9CgkJZWxzZSBpZiAoIG9TdGF0ZS5vcmRlciApIHsKCQkJLy8gMS4xMC4xKwoJCQlmb3IgKCBpPTAgOyBpPG9TdGF0ZS5vcmRlci5sZW5ndGggOyBpKysgKSB7CgkJCQlvU3RhdGUub3JkZXJbaV1bMF0gPSBjb2x1bW5zWyBvU3RhdGUub3JkZXJbaV1bMF0gXS5fQ29sUmVvcmRlcl9pT3JpZ0NvbDsKCQkJfQoKCQkJdmFyIHN0YXRlQ29sdW1uc0NvcHkgPSAkLmV4dGVuZCggdHJ1ZSwgW10sIG9TdGF0ZS5jb2x1bW5zICk7CgoJCQlmb3IgKCBpPTAsIGlMZW49Y29sdW1ucy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlpT3JpZ0NvbHVtbiA9IGNvbHVtbnNbaV0uX0NvbFJlb3JkZXJfaU9yaWdDb2w7CgoJCQkJLyogQ29sdW1ucyAqLwoJCQkJb1N0YXRlLmNvbHVtbnNbIGlPcmlnQ29sdW1uIF0gPSBzdGF0ZUNvbHVtbnNDb3B5W2ldOwoKCQkJCS8qIENvbHVtbiByZW9yZGVyaW5nICovCgkJCQlvU3RhdGUuQ29sUmVvcmRlci5wdXNoKCBpT3JpZ0NvbHVtbiApOwoJCQl9CgkJfQoJfSwKCgoJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJICogTW91c2UgZHJvcCBhbmQgZHJhZwoJICovCgoJLyoqCgkgKiBBZGQgYSBtb3VzZSBkb3duIGxpc3RlbmVyIHRvIGEgcGFydGljbHVhciBUSCBlbGVtZW50CgkgKiAgQG1ldGhvZCAgX2ZuTW91c2VMaXN0ZW5lcgoJICogIEBwYXJhbSAgIGludCBpIENvbHVtbiBpbmRleAoJICogIEBwYXJhbSAgIGVsZW1lbnQgblRoIFRIIGVsZW1lbnQgY2xpY2tlZCBvbgoJICogIEByZXR1cm5zIHZvaWQKCSAqICBAcHJpdmF0ZQoJICovCgkiX2ZuTW91c2VMaXN0ZW5lciI6IGZ1bmN0aW9uICggaSwgblRoICkKCXsKCQl2YXIgdGhhdCA9IHRoaXM7CgkJJChuVGgpCgkJCS5vbiggJ21vdXNlZG93bi5Db2xSZW9yZGVyJywgZnVuY3Rpb24gKGUpIHsKCQkJCWlmICggdGhhdC5zLmVuYWJsZSAmJiBlLndoaWNoID09PSAxICkgewoJCQkJCXRoYXQuX2ZuTW91c2VEb3duLmNhbGwoIHRoYXQsIGUsIG5UaCApOwoJCQkJfQoJCQl9ICkKCQkJLm9uKCAndG91Y2hzdGFydC5Db2xSZW9yZGVyJywgZnVuY3Rpb24gKGUpIHsKCQkJCWlmICggdGhhdC5zLmVuYWJsZSApIHsKCQkJCQl0aGF0Ll9mbk1vdXNlRG93bi5jYWxsKCB0aGF0LCBlLCBuVGggKTsKCQkJCX0KCQkJfSApOwoJfSwKCgoJLyoqCgkgKiBNb3VzZSBkb3duIG9uIGEgVEggZWxlbWVudCBpbiB0aGUgdGFibGUgaGVhZGVyCgkgKiAgQG1ldGhvZCAgX2ZuTW91c2VEb3duCgkgKiAgQHBhcmFtICAgZXZlbnQgZSBNb3VzZSBldmVudAoJICogIEBwYXJhbSAgIGVsZW1lbnQgblRoIFRIIGVsZW1lbnQgdG8gYmUgZHJhZ2dlZAoJICogIEByZXR1cm5zIHZvaWQKCSAqICBAcHJpdmF0ZQoJICovCgkiX2ZuTW91c2VEb3duIjogZnVuY3Rpb24gKCBlLCBuVGggKQoJewoJCXZhciB0aGF0ID0gdGhpczsKCgkJLyogU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1vdXNlIHBvc2l0aW9uICovCgkJdmFyIHRhcmdldCA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoJ3RoLCB0ZCcpOwoJCXZhciBvZmZzZXQgPSB0YXJnZXQub2Zmc2V0KCk7CgkJdmFyIGlkeCA9IHBhcnNlSW50KCAkKG5UaCkuYXR0cignZGF0YS1jb2x1bW4taW5kZXgnKSwgMTAgKTsKCgkJaWYgKCBpZHggPT09IHVuZGVmaW5lZCApIHsKCQkJcmV0dXJuOwoJCX0KCgkJdGhpcy5zLm1vdXNlLnN0YXJ0WCA9IHRoaXMuX2ZuQ3Vyc29yUG9zaXRpb24oIGUsICdwYWdlWCcgKTsKCQl0aGlzLnMubW91c2Uuc3RhcnRZID0gdGhpcy5fZm5DdXJzb3JQb3NpdGlvbiggZSwgJ3BhZ2VZJyApOwoJCXRoaXMucy5tb3VzZS5vZmZzZXRYID0gdGhpcy5fZm5DdXJzb3JQb3NpdGlvbiggZSwgJ3BhZ2VYJyApIC0gb2Zmc2V0LmxlZnQ7CgkJdGhpcy5zLm1vdXNlLm9mZnNldFkgPSB0aGlzLl9mbkN1cnNvclBvc2l0aW9uKCBlLCAncGFnZVknICkgLSBvZmZzZXQudG9wOwoJCXRoaXMucy5tb3VzZS50YXJnZXQgPSB0aGlzLnMuZHQuYW9Db2x1bW5zWyBpZHggXS5uVGg7Ly90YXJnZXRbMF07CgkJdGhpcy5zLm1vdXNlLnRhcmdldEluZGV4ID0gaWR4OwoJCXRoaXMucy5tb3VzZS5mcm9tSW5kZXggPSBpZHg7CgoJCXRoaXMuX2ZuUmVnaW9ucygpOwoKCQkvKiBBZGQgZXZlbnQgaGFuZGxlcnMgdG8gdGhlIGRvY3VtZW50ICovCgkJJChkb2N1bWVudCkKCQkJLm9uKCAnbW91c2Vtb3ZlLkNvbFJlb3JkZXIgdG91Y2htb3ZlLkNvbFJlb3JkZXInLCBmdW5jdGlvbiAoZSkgewoJCQkJdGhhdC5fZm5Nb3VzZU1vdmUuY2FsbCggdGhhdCwgZSApOwoJCQl9ICkKCQkJLm9uKCAnbW91c2V1cC5Db2xSZW9yZGVyIHRvdWNoZW5kLkNvbFJlb3JkZXInLCBmdW5jdGlvbiAoZSkgewoJCQkJdGhhdC5fZm5Nb3VzZVVwLmNhbGwoIHRoYXQsIGUgKTsKCQkJfSApOwoJfSwKCgoJLyoqCgkgKiBEZWFsIHdpdGggYSBtb3VzZSBtb3ZlIGV2ZW50IHdoaWxlIGRyYWdnaW5nIGEgbm9kZQoJICogIEBtZXRob2QgIF9mbk1vdXNlTW92ZQoJICogIEBwYXJhbSAgIGV2ZW50IGUgTW91c2UgZXZlbnQKCSAqICBAcmV0dXJucyB2b2lkCgkgKiAgQHByaXZhdGUKCSAqLwoJIl9mbk1vdXNlTW92ZSI6IGZ1bmN0aW9uICggZSApCgl7CgkJdmFyIHRoYXQgPSB0aGlzOwoKCQlpZiAoIHRoaXMuZG9tLmRyYWcgPT09IG51bGwgKQoJCXsKCQkJLyogT25seSBjcmVhdGUgdGhlIGRyYWcgZWxlbWVudCBpZiB0aGUgbW91c2UgaGFzIG1vdmVkIGEgc3BlY2lmaWMgZGlzdGFuY2UgZnJvbSB0aGUgc3RhcnQKCQkJICogcG9pbnQgLSB0aGlzIGFsbG93cyB0aGUgdXNlciB0byBtYWtlIHNtYWxsIG1vdXNlIG1vdmVtZW50cyB3aGVuIHNvcnRpbmcgYW5kIG5vdCBoYXZlIGEKCQkJICogcG9zc2libHkgY29uZnVzaW5nIGRyYWcgZWxlbWVudCBzaG93aW5nIHVwCgkJCSAqLwoJCQlpZiAoIE1hdGgucG93KAoJCQkJTWF0aC5wb3codGhpcy5fZm5DdXJzb3JQb3NpdGlvbiggZSwgJ3BhZ2VYJykgLSB0aGlzLnMubW91c2Uuc3RhcnRYLCAyKSArCgkJCQlNYXRoLnBvdyh0aGlzLl9mbkN1cnNvclBvc2l0aW9uKCBlLCAncGFnZVknKSAtIHRoaXMucy5tb3VzZS5zdGFydFksIDIpLCAwLjUgKSA8IDUgKQoJCQl7CgkJCQlyZXR1cm47CgkJCX0KCQkJdGhpcy5fZm5DcmVhdGVEcmFnTm9kZSgpOwoJCX0KCgkJLyogUG9zaXRpb24gdGhlIGVsZW1lbnQgLSB3ZSByZXNwZWN0IHdoZXJlIGluIHRoZSBlbGVtZW50IHRoZSBjbGljayBvY2N1cmVkICovCgkJdGhpcy5kb20uZHJhZy5jc3MoIHsKCQkJbGVmdDogdGhpcy5fZm5DdXJzb3JQb3NpdGlvbiggZSwgJ3BhZ2VYJyApIC0gdGhpcy5zLm1vdXNlLm9mZnNldFgsCgkJCXRvcDogdGhpcy5fZm5DdXJzb3JQb3NpdGlvbiggZSwgJ3BhZ2VZJyApIC0gdGhpcy5zLm1vdXNlLm9mZnNldFkKCQl9ICk7CgoJCS8qIEJhc2VkIG9uIHRoZSBjdXJyZW50IG1vdXNlIHBvc2l0aW9uLCBjYWxjdWxhdGUgd2hlcmUgdGhlIGluc2VydCBzaG91bGQgZ28gKi8KCQl2YXIgdGFyZ2V0OwoJCXZhciBsYXN0VG9JbmRleCA9IHRoaXMucy5tb3VzZS50b0luZGV4OwoJCXZhciBjdXJzb3JYUG9zaW90aW9uID0gdGhpcy5fZm5DdXJzb3JQb3NpdGlvbihlLCAncGFnZVgnKTsKCQl2YXIgdGFyZ2V0c1ByZXYgPSBmdW5jdGlvbiAoaSkgewoJCQl3aGlsZSAoaSA+PSAwKSB7CgkJCQlpLS07CgoJCQkJaWYgKGkgPD0gMCkgewoJCQkJCXJldHVybiBudWxsOwoJCQkJfQoKCQkJCWlmICh0aGF0LnMuYW9UYXJnZXRzW2krMV0ueCAhPT0gdGhhdC5zLmFvVGFyZ2V0c1tpXS54KSB7CgkJCQkJcmV0dXJuIHRoYXQucy5hb1RhcmdldHNbaV07CgkJCQl9CgkJCX0KCQl9OwoJCXZhciBmaXJzdE5vdEhpZGRlbiA9IGZ1bmN0aW9uICgpIHsKCQkJZm9yICh2YXIgaT0wIDsgaTx0aGF0LnMuYW9UYXJnZXRzLmxlbmd0aC0xIDsgaSsrKSB7CgkJCQlpZiAodGhhdC5zLmFvVGFyZ2V0c1tpXS54ICE9PSB0aGF0LnMuYW9UYXJnZXRzW2krMV0ueCkgewoJCQkJCXJldHVybiB0aGF0LnMuYW9UYXJnZXRzW2ldOwoJCQkJfQoJCQl9CgkJfTsKCQl2YXIgbGFzdE5vdEhpZGRlbiA9IGZ1bmN0aW9uICgpIHsKCQkJZm9yICh2YXIgaT10aGF0LnMuYW9UYXJnZXRzLmxlbmd0aC0xIDsgaT4wIDsgaS0tKSB7CgkJCQlpZiAodGhhdC5zLmFvVGFyZ2V0c1tpXS54ICE9PSB0aGF0LnMuYW9UYXJnZXRzW2ktMV0ueCkgewoJCQkJCXJldHVybiB0aGF0LnMuYW9UYXJnZXRzW2ldOwoJCQkJfQoJCQl9CgkJfTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0aGlzLnMuYW9UYXJnZXRzLmxlbmd0aDsgaSsrKSB7CgkJCXZhciBwcmV2VGFyZ2V0ID0gdGFyZ2V0c1ByZXYoaSk7CgkJCWlmICghIHByZXZUYXJnZXQpIHsKCQkJCXByZXZUYXJnZXQgPSBmaXJzdE5vdEhpZGRlbigpOwoJCQl9CgoJCQl2YXIgcHJldlRhcmdldE1pZGRsZSA9IHByZXZUYXJnZXQueCArICh0aGlzLnMuYW9UYXJnZXRzW2ldLnggLSBwcmV2VGFyZ2V0LngpIC8gMjsKCiAgICAgICAgICAgIGlmICh0aGlzLl9mbklzTHRyKCkpIHsKICAgICAgICAgICAgICAgIGlmIChjdXJzb3JYUG9zaW90aW9uIDwgcHJldlRhcmdldE1pZGRsZSApIHsKICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBwcmV2VGFyZ2V0OwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKGN1cnNvclhQb3Npb3Rpb24gPiBwcmV2VGFyZ2V0TWlkZGxlKSB7CiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gcHJldlRhcmdldDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoJCX0KCiAgICAgICAgaWYgKHRhcmdldCkgewogICAgICAgICAgICB0aGlzLmRvbS5wb2ludGVyLmNzcygnbGVmdCcsIHRhcmdldC54KTsKICAgICAgICAgICAgdGhpcy5zLm1vdXNlLnRvSW5kZXggPSB0YXJnZXQudG87CiAgICAgICAgfQogICAgICAgIGVsc2UgewoJCQkvLyBUaGUgaW5zZXJ0IGVsZW1lbnQgd2Fzbid0IHBvc2l0aW9uZWQgaW4gdGhlIGFycmF5IChsZXNzIHRoYW4KCQkJLy8gb3BlcmF0b3IpLCBzbyB3ZSBwdXQgaXQgYXQgdGhlIGVuZAoJCQl0aGlzLmRvbS5wb2ludGVyLmNzcyggJ2xlZnQnLCBsYXN0Tm90SGlkZGVuKCkueCApOwoJCQl0aGlzLnMubW91c2UudG9JbmRleCA9IGxhc3ROb3RIaWRkZW4oKS50bzsKCQl9CgoJCS8vIFBlcmZvcm0gcmVvcmRlcmluZyBpZiByZWFsdGltZSB1cGRhdGluZyBpcyBvbiBhbmQgdGhlIGNvbHVtbiBoYXMgbW92ZWQKCQlpZiAoIHRoaXMucy5pbml0LmJSZWFsdGltZSAmJiBsYXN0VG9JbmRleCAhPT0gdGhpcy5zLm1vdXNlLnRvSW5kZXggKSB7CgkJCXRoaXMucy5kdC5vSW5zdGFuY2UuZm5Db2xSZW9yZGVyKCB0aGlzLnMubW91c2UuZnJvbUluZGV4LCB0aGlzLnMubW91c2UudG9JbmRleCApOwoJCQl0aGlzLnMubW91c2UuZnJvbUluZGV4ID0gdGhpcy5zLm1vdXNlLnRvSW5kZXg7CgoJCQkvLyBOb3QgZ3JlYXQgZm9yIHBlcmZvcm1hbmNlLCBidXQgcmVxdWlyZWQgdG8ga2VlcCBldmVyeXRoaW5nIGluIGFsaWdubWVudAoJCQlpZiAoIHRoaXMucy5kdC5vU2Nyb2xsLnNYICE9PSAiIiB8fCB0aGlzLnMuZHQub1Njcm9sbC5zWSAhPT0gIiIgKQoJCQl7CgkJCQl0aGlzLnMuZHQub0luc3RhbmNlLmZuQWRqdXN0Q29sdW1uU2l6aW5nKCBmYWxzZSApOwoJCQl9CgoJCQl0aGlzLl9mblJlZ2lvbnMoKTsKCQl9Cgl9LAoKCgkvKioKCSAqIEZpbmlzaCBvZmYgdGhlIG1vdXNlIGRyYWcgYW5kIGluc2VydCB0aGUgY29sdW1uIHdoZXJlIG5lZWRlZAoJICogIEBtZXRob2QgIF9mbk1vdXNlVXAKCSAqICBAcGFyYW0gICBldmVudCBlIE1vdXNlIGV2ZW50CgkgKiAgQHJldHVybnMgdm9pZAoJICogIEBwcml2YXRlCgkgKi8KCSJfZm5Nb3VzZVVwIjogZnVuY3Rpb24gKCBlICkKCXsKCQl2YXIgdGhhdCA9IHRoaXM7CgoJCSQoZG9jdW1lbnQpLm9mZiggJy5Db2xSZW9yZGVyJyApOwoKCQlpZiAoIHRoaXMuZG9tLmRyYWcgIT09IG51bGwgKQoJCXsKCQkJLyogUmVtb3ZlIHRoZSBndWlkZSBlbGVtZW50cyAqLwoJCQl0aGlzLmRvbS5kcmFnLnJlbW92ZSgpOwoJCQl0aGlzLmRvbS5wb2ludGVyLnJlbW92ZSgpOwoJCQl0aGlzLmRvbS5kcmFnID0gbnVsbDsKCQkJdGhpcy5kb20ucG9pbnRlciA9IG51bGw7CgoJCQkvKiBBY3R1YWxseSBkbyB0aGUgcmVvcmRlciAqLwoJCQl0aGlzLnMuZHQub0luc3RhbmNlLmZuQ29sUmVvcmRlciggdGhpcy5zLm1vdXNlLmZyb21JbmRleCwgdGhpcy5zLm1vdXNlLnRvSW5kZXgsIHRydWUgKTsKCQkJdGhpcy5fZm5TZXRDb2x1bW5JbmRleGVzKCk7CgoJCQkvKiBXaGVuIHNjcm9sbGluZyB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIHRoZSBjb2x1bW4gc2l6ZXMgdG8gYWxsb3cgZm9yIHRoZSBzaGlmdCAqLwoJCQlpZiAoIHRoaXMucy5kdC5vU2Nyb2xsLnNYICE9PSAiIiB8fCB0aGlzLnMuZHQub1Njcm9sbC5zWSAhPT0gIiIgKQoJCQl7CgkJCQl0aGlzLnMuZHQub0luc3RhbmNlLmZuQWRqdXN0Q29sdW1uU2l6aW5nKCBmYWxzZSApOwoJCQl9CgoJCQkvKiBTYXZlIHRoZSBzdGF0ZSAqLwoJCQl0aGlzLnMuZHQub0luc3RhbmNlLm9BcGkuX2ZuU2F2ZVN0YXRlKCB0aGlzLnMuZHQgKTsKCgkJCWlmICggdGhpcy5zLnJlb3JkZXJDYWxsYmFjayAhPT0gbnVsbCApCgkJCXsKCQkJCXRoaXMucy5yZW9yZGVyQ2FsbGJhY2suY2FsbCggdGhpcyApOwoJCQl9CgkJfQoJfSwKCgoJLyoqCgkgKiBDYWxjdWxhdGUgYSBjYWNoZWQgYXJyYXkgd2l0aCB0aGUgcG9pbnRzIG9mIHRoZSBjb2x1bW4gaW5zZXJ0cywgYW5kIHRoZQoJICogJ3RvJyBwb2ludHMKCSAqICBAbWV0aG9kICBfZm5SZWdpb25zCgkgKiAgQHJldHVybnMgdm9pZAoJICogIEBwcml2YXRlCgkgKi8KCSJfZm5SZWdpb25zIjogZnVuY3Rpb24gKCkKCXsKCQl2YXIgYW9Db2x1bW5zID0gdGhpcy5zLmR0LmFvQ29sdW1uczsKICAgICAgICB2YXIgaXNMVFIgPSB0aGlzLl9mbklzTHRyKCk7CgkJdGhpcy5zLmFvVGFyZ2V0cy5zcGxpY2UoMCwgdGhpcy5zLmFvVGFyZ2V0cy5sZW5ndGgpOwoJCXZhciBsYXN0Qm91bmQgPSAkKHRoaXMucy5kdC5uVGFibGUpLm9mZnNldCgpLmxlZnQ7CgogICAgICAgIHZhciBhb0NvbHVtbkJvdW5kcyA9IFtdOwogICAgICAgICQuZWFjaChhb0NvbHVtbnMsIGZ1bmN0aW9uIChpLCBjb2x1bW4pIHsKICAgICAgICAgICAgaWYgKGNvbHVtbi5iVmlzaWJsZSAmJiBjb2x1bW4ublRoLnN0eWxlLmRpc3BsYXkgIT09ICdub25lJykgewogICAgICAgICAgICAgICAgdmFyIG50aCA9ICQoY29sdW1uLm5UaCk7CgkJCQl2YXIgYm91bmQgPSBudGgub2Zmc2V0KCkubGVmdDsKCiAgICAgICAgICAgICAgICBpZiAoaXNMVFIpIHsKICAgICAgICAgICAgICAgICAgICBib3VuZCArPSBudGgub3V0ZXJXaWR0aCgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGFvQ29sdW1uQm91bmRzLnB1c2goewogICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLAogICAgICAgICAgICAgICAgICAgIGJvdW5kOiBib3VuZAoJCQkJfSk7CgoJCQkJbGFzdEJvdW5kID0gYm91bmQ7CgkJCX0KCQkJZWxzZSB7CiAgICAgICAgICAgICAgICBhb0NvbHVtbkJvdW5kcy5wdXNoKHsKCQkJCQlpbmRleDogaSwKCQkJCQlib3VuZDogbGFzdEJvdW5kCiAgICAgICAgICAgICAgICB9KTsKCQkJfQoJCX0pOwoKICAgICAgICB2YXIgZmlyc3RDb2x1bW4gPSBhb0NvbHVtbkJvdW5kc1swXTsKCQl2YXIgZmlyc3RDb2x1bW5XaWR0aCA9ICQoYW9Db2x1bW5zW2ZpcnN0Q29sdW1uLmluZGV4XS5uVGgpLm91dGVyV2lkdGgoKTsKCiAgICAgICAgdGhpcy5zLmFvVGFyZ2V0cy5wdXNoKHsKICAgICAgICAgICAgdG86IDAsCgkJCXg6IGZpcnN0Q29sdW1uLmJvdW5kIC0gZmlyc3RDb2x1bW5XaWR0aAogICAgICAgIH0pOwoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFvQ29sdW1uQm91bmRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBjb2x1bW5Cb3VuZCA9IGFvQ29sdW1uQm91bmRzW2ldOwogICAgICAgICAgICB2YXIgaVRvUG9pbnQgPSBjb2x1bW5Cb3VuZC5pbmRleDsKCiAgICAgICAgICAgIC8qIEZvciB0aGUgY29sdW1uIC8gaGVhZGVyIGluIHF1ZXN0aW9uLCB3ZSB3YW50IGl0J3MgcG9zaXRpb24gdG8gcmVtYWluIHRoZSBzYW1lIGlmIHRoZQogICAgICAgICAgICAqIHBvc2l0aW9uIGlzIGp1c3QgdG8gaXQncyBpbW1lZGlhdGUgbGVmdCBvciByaWdodCwgc28gd2Ugb25seSBpbmNyZW1lbnQgdGhlIGNvdW50ZXIgZm9yCiAgICAgICAgICAgICogb3RoZXIgY29sdW1ucwogICAgICAgICAgICAqLwogICAgICAgICAgICBpZiAoY29sdW1uQm91bmQuaW5kZXggPCB0aGlzLnMubW91c2UuZnJvbUluZGV4KSB7CiAgICAgICAgICAgICAgICBpVG9Qb2ludCsrOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0aGlzLnMuYW9UYXJnZXRzLnB1c2goewoJCQkJdG86IGlUb1BvaW50LAogICAgICAgICAgICAgICAgeDogY29sdW1uQm91bmQuYm91bmQKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKCQkvKiBEaXNhbGxvdyBjb2x1bW5zIGZvciBiZWluZyByZW9yZGVyZWQgYnkgZHJhZyBhbmQgZHJvcCwgY291bnRpbmcgcmlnaHQgdG8gbGVmdCAqLwoJCWlmICggdGhpcy5zLmZpeGVkUmlnaHQgIT09IDAgKQoJCXsKCQkJdGhpcy5zLmFvVGFyZ2V0cy5zcGxpY2UoIHRoaXMucy5hb1RhcmdldHMubGVuZ3RoIC0gdGhpcy5zLmZpeGVkUmlnaHQgKTsKCQl9CgoJCS8qIERpc2FsbG93IGNvbHVtbnMgZm9yIGJlaW5nIHJlb3JkZXJlZCBieSBkcmFnIGFuZCBkcm9wLCBjb3VudGluZyBsZWZ0IHRvIHJpZ2h0ICovCgkJaWYgKCB0aGlzLnMuZml4ZWQgIT09IDAgKQoJCXsKCQkJdGhpcy5zLmFvVGFyZ2V0cy5zcGxpY2UoIDAsIHRoaXMucy5maXhlZCApOwoJCX0KCX0sCgoKCS8qKgoJICogQ29weSB0aGUgVEggZWxlbWVudCB0aGF0IGlzIGJlaW5nIGRyYWdzIHNvIHRoZSB1c2VyIGhhcyB0aGUgaWRlYSB0aGF0IHRoZXkgYXJlIGFjdHVhbGx5CgkgKiBtb3ZpbmcgaXQgYXJvdW5kIHRoZSBwYWdlLgoJICogIEBtZXRob2QgIF9mbkNyZWF0ZURyYWdOb2RlCgkgKiAgQHJldHVybnMgdm9pZAoJICogIEBwcml2YXRlCgkgKi8KCSJfZm5DcmVhdGVEcmFnTm9kZSI6IGZ1bmN0aW9uICgpCgl7CgkJdmFyIHNjcm9sbGluZyA9IHRoaXMucy5kdC5vU2Nyb2xsLnNYICE9PSAiIiB8fCB0aGlzLnMuZHQub1Njcm9sbC5zWSAhPT0gIiI7CgoJCXZhciBvcmlnQ2VsbCA9IHRoaXMucy5kdC5hb0NvbHVtbnNbIHRoaXMucy5tb3VzZS50YXJnZXRJbmRleCBdLm5UaDsKCQl2YXIgb3JpZ1RyID0gb3JpZ0NlbGwucGFyZW50Tm9kZTsKCQl2YXIgb3JpZ1RoZWFkID0gb3JpZ1RyLnBhcmVudE5vZGU7CgkJdmFyIG9yaWdUYWJsZSA9IG9yaWdUaGVhZC5wYXJlbnROb2RlOwoJCXZhciBjbG9uZUNlbGwgPSAkKG9yaWdDZWxsKS5jbG9uZSgpOwoKCQkvLyBUaGlzIGlzIGEgc2xpZ2h0bHkgb2RkIGNvbWJpbmF0aW9uIG9mIGpRdWVyeSBhbmQgRE9NLCBidXQgaXQgaXMgdGhlCgkJLy8gZmFzdGVzdCBhbmQgbGVhc3QgcmVzb3VyY2UgaW50ZW5zaXZlIHdheSBJIGNvdWxkIHRoaW5rIG9mIGNsb25pbmcKCQkvLyB0aGUgdGFibGUgd2l0aCBqdXN0IGEgc2luZ2xlIGhlYWRlciBjZWxsIGluIGl0LgoJCXRoaXMuZG9tLmRyYWcgPSAkKG9yaWdUYWJsZS5jbG9uZU5vZGUoZmFsc2UpKQoJCQkuYWRkQ2xhc3MoICdEVENSX2Nsb25lZFRhYmxlJyApCgkJCS5hcHBlbmQoCgkJCQkkKG9yaWdUaGVhZC5jbG9uZU5vZGUoZmFsc2UpKS5hcHBlbmQoCgkJCQkJJChvcmlnVHIuY2xvbmVOb2RlKGZhbHNlKSkuYXBwZW5kKAoJCQkJCQljbG9uZUNlbGxbMF0KCQkJCQkpCgkJCQkpCgkJCSkKCQkJLmNzcyggewoJCQkJcG9zaXRpb246ICdhYnNvbHV0ZScsCgkJCQl0b3A6IDAsCgkJCQlsZWZ0OiAwLAoJCQkJd2lkdGg6ICQob3JpZ0NlbGwpLm91dGVyV2lkdGgoKSwKCQkJCWhlaWdodDogJChvcmlnQ2VsbCkub3V0ZXJIZWlnaHQoKQoJCQl9ICkKCQkJLmFwcGVuZFRvKCAnYm9keScgKTsKCgkJdGhpcy5kb20ucG9pbnRlciA9ICQoJzxkaXY+PC9kaXY+JykKCQkJLmFkZENsYXNzKCAnRFRDUl9wb2ludGVyJyApCgkJCS5jc3MoIHsKCQkJCXBvc2l0aW9uOiAnYWJzb2x1dGUnLAoJCQkJdG9wOiBzY3JvbGxpbmcgPwoJCQkJCSQoJ2Rpdi5kYXRhVGFibGVzX3Njcm9sbCcsIHRoaXMucy5kdC5uVGFibGVXcmFwcGVyKS5vZmZzZXQoKS50b3AgOgoJCQkJCSQodGhpcy5zLmR0Lm5UYWJsZSkub2Zmc2V0KCkudG9wLAoJCQkJaGVpZ2h0IDogc2Nyb2xsaW5nID8KCQkJCQkkKCdkaXYuZGF0YVRhYmxlc19zY3JvbGwnLCB0aGlzLnMuZHQublRhYmxlV3JhcHBlcikuaGVpZ2h0KCkgOgoJCQkJCSQodGhpcy5zLmR0Lm5UYWJsZSkuaGVpZ2h0KCkKCQkJfSApCgkJCS5hcHBlbmRUbyggJ2JvZHknICk7Cgl9LAoKCgkvKioKCSAqIEFkZCBhIGRhdGEgYXR0cmlidXRlIHRvIHRoZSBjb2x1bW4gaGVhZGVycywgc28gd2Uga25vdyB0aGUgaW5kZXggb2YKCSAqIHRoZSByb3cgdG8gYmUgcmVvcmRlcmVkLiBUaGlzIGFsbG93cyBmYXN0IGRldGVjdGlvbiBvZiB0aGUgaW5kZXgsIGFuZAoJICogZm9yIHRoaXMgcGx1Zy1pbiB0byB3b3JrIHdpdGggRml4ZWRIZWFkZXIgd2hpY2ggY2xvbmVzIHRoZSBub2Rlcy4KCSAqICBAcHJpdmF0ZQoJICovCgkiX2ZuU2V0Q29sdW1uSW5kZXhlcyI6IGZ1bmN0aW9uICgpCgl7CgkJJC5lYWNoKCB0aGlzLnMuZHQuYW9Db2x1bW5zLCBmdW5jdGlvbiAoaSwgY29sdW1uKSB7CgkJCSQoY29sdW1uLm5UaCkuYXR0cignZGF0YS1jb2x1bW4taW5kZXgnLCBpKTsKCQl9ICk7Cgl9LAoKCgkvKioKCSAqIEdldCBjdXJzb3IgcG9zaXRpb24gcmVnYXJkbGVzcyBvZiBtb3VzZSBvciB0b3VjaCBpbnB1dAoJICogQHBhcmFtICB7RXZlbnR9ICBlICAgIGpRdWVyeSBFdmVudAoJICogQHBhcmFtICB7c3RyaW5nfSBwcm9wIFByb3BlcnR5IHRvIGdldAoJICogQHJldHVybiB7bnVtYmVyfSAgICAgIFZhbHVlCgkgKi8KCV9mbkN1cnNvclBvc2l0aW9uOiBmdW5jdGlvbiAoIGUsIHByb3AgKSB7CgkJaWYgKCBlLnR5cGUuaW5kZXhPZigndG91Y2gnKSAhPT0gLTEgKSB7CgkJCXJldHVybiBlLm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXVsgcHJvcCBdOwoJCX0KCQlyZXR1cm4gZVsgcHJvcCBdOwogICAgfSwKCiAgICBfZm5Jc0x0cjogZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiAkKHRoaXMucy5kdC5uVGFibGUpLmNzcygnZGlyZWN0aW9uJykgIT09ICJydGwiOwogICAgfQp9ICk7CgoKCgoKLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCiAqIFN0YXRpYyBwYXJhbWV0ZXJzCiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KCgovKioKICogQ29sUmVvcmRlciBkZWZhdWx0IHNldHRpbmdzIGZvciBpbml0aWFsaXNhdGlvbgogKiAgQG5hbWVzcGFjZQogKiAgQHN0YXRpYwogKi8KQ29sUmVvcmRlci5kZWZhdWx0cyA9IHsKCS8qKgoJICogUHJlZGVmaW5lZCBvcmRlcmluZyBmb3IgdGhlIGNvbHVtbnMgdGhhdCB3aWxsIGJlIGFwcGxpZWQgYXV0b21hdGljYWxseQoJICogb24gaW5pdGlhbGlzYXRpb24uIElmIG5vdCBzcGVjaWZpZWQgdGhlbiB0aGUgb3JkZXIgdGhhdCB0aGUgY29sdW1ucyBhcmUKCSAqIGZvdW5kIHRvIGJlIGluIHRoZSBIVE1MIGlzIHRoZSBvcmRlciB1c2VkLgoJICogIEB0eXBlIGFycmF5CgkgKiAgQGRlZmF1bHQgbnVsbAoJICogIEBzdGF0aWMKCSAqLwoJYWlPcmRlcjogbnVsbCwKCgkvKioKCSAqIENvbFJlb3JkZXIgZW5hYmxlIG9uIGluaXRpYWxpc2F0aW9uCgkgKiAgQHR5cGUgYm9vbGVhbgoJICogIEBkZWZhdWx0IHRydWUKCSAqICBAc3RhdGljCgkgKi8KCWJFbmFibGU6IHRydWUsCgoJLyoqCgkgKiBSZWRyYXcgdGhlIHRhYmxlJ3MgY29sdW1uIG9yZGVyaW5nIGFzIHRoZSBlbmQgdXNlciBkcmF3cyB0aGUgY29sdW1uCgkgKiAoYHRydWVgKSBvciB3YWl0IHVudGlsIHRoZSBtb3VzZSBpcyByZWxlYXNlZCAoYGZhbHNlYCAtIGRlZmF1bHQpLiBOb3RlCgkgKiB0aGF0IHRoaXMgd2lsbCBwZXJmb3JtIGEgcmVkcmF3IG9uIGVhY2ggcmVvcmRlcmluZywgd2hpY2ggaW52b2x2ZXMgYW4KCSAqIEFqYXggcmVxdWVzdCBlYWNoIHRpbWUgaWYgeW91IGFyZSB1c2luZyBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nIGluCgkgKiBEYXRhVGFibGVzLgoJICogIEB0eXBlIGJvb2xlYW4KCSAqICBAZGVmYXVsdCBmYWxzZQoJICogIEBzdGF0aWMKCSAqLwoJYlJlYWx0aW1lOiB0cnVlLAoKCS8qKgoJICogSW5kaWNhdGUgaG93IG1hbnkgY29sdW1ucyBzaG91bGQgYmUgZml4ZWQgaW4gcG9zaXRpb24gKGNvdW50aW5nIGZyb20gdGhlCgkgKiBsZWZ0KS4gVGhpcyB3aWxsIHR5cGljYWxseSBiZSAxIGlmIHVzZWQsIGJ1dCBjYW4gYmUgYXMgaGlnaCBhcyB5b3UgbGlrZS4KCSAqICBAdHlwZSBpbnQKCSAqICBAZGVmYXVsdCAwCgkgKiAgQHN0YXRpYwoJICovCglpRml4ZWRDb2x1bW5zTGVmdDogMCwKCgkvKioKCSAqIEFzIGBpRml4ZWRDb2x1bW5zUmlnaHRgIGJ1dCBjb3VudGluZyBmcm9tIHRoZSByaWdodC4KCSAqICBAdHlwZSBpbnQKCSAqICBAZGVmYXVsdCAwCgkgKiAgQHN0YXRpYwoJICovCglpRml4ZWRDb2x1bW5zUmlnaHQ6IDAsCgoJLyoqCgkgKiBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGZpcmVkIHdoZW4gY29sdW1ucyBhcmUgcmVvcmRlcmVkLiBUaGUgYGNvbHVtbi0KCSAqIHJlb3JkZXJgIGV2ZW50IGlzIHByZWZlcnJlZCBvdmVyIHRoaXMgY2FsbGJhY2sKCSAqICBAdHlwZSBmdW5jdGlvbigpOnZvaWQKCSAqICBAZGVmYXVsdCBudWxsCgkgKiAgQHN0YXRpYwoJICovCglmblJlb3JkZXJDYWxsYmFjazogbnVsbAp9OwoKCgovKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKICogQ29uc3RhbnRzCiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KCi8qKgogKiBDb2xSZW9yZGVyIHZlcnNpb24KICogIEBjb25zdGFudCAgdmVyc2lvbgogKiAgQHR5cGUgICAgICBTdHJpbmcKICogIEBkZWZhdWx0ICAgQXMgY29kZQogKi8KQ29sUmVvcmRlci52ZXJzaW9uID0gIjEuNS4yIjsKCgoKLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCiAqIERhdGFUYWJsZXMgaW50ZXJmYWNlcwogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCgovLyBFeHBvc2UKJC5mbi5kYXRhVGFibGUuQ29sUmVvcmRlciA9IENvbFJlb3JkZXI7CiQuZm4uRGF0YVRhYmxlLkNvbFJlb3JkZXIgPSBDb2xSZW9yZGVyOwoKCi8vIFJlZ2lzdGVyIGEgbmV3IGZlYXR1cmUgd2l0aCBEYXRhVGFibGVzCmlmICggdHlwZW9mICQuZm4uZGF0YVRhYmxlID09ICJmdW5jdGlvbiIgJiYKICAgICB0eXBlb2YgJC5mbi5kYXRhVGFibGVFeHQuZm5WZXJzaW9uQ2hlY2sgPT0gImZ1bmN0aW9uIiAmJgogICAgICQuZm4uZGF0YVRhYmxlRXh0LmZuVmVyc2lvbkNoZWNrKCcxLjEwLjgnKSApCnsKCSQuZm4uZGF0YVRhYmxlRXh0LmFvRmVhdHVyZXMucHVzaCggewoJCSJmbkluaXQiOiBmdW5jdGlvbiggc2V0dGluZ3MgKSB7CgkJCXZhciB0YWJsZSA9IHNldHRpbmdzLm9JbnN0YW5jZTsKCgkJCWlmICggISBzZXR0aW5ncy5fY29sUmVvcmRlciApIHsKCQkJCXZhciBkdEluaXQgPSBzZXR0aW5ncy5vSW5pdDsKCQkJCXZhciBvcHRzID0gZHRJbml0LmNvbFJlb3JkZXIgfHwgZHRJbml0Lm9Db2xSZW9yZGVyIHx8IHt9OwoKCQkJCW5ldyBDb2xSZW9yZGVyKCBzZXR0aW5ncywgb3B0cyApOwoJCQl9CgkJCWVsc2UgewoJCQkJdGFibGUub0FwaS5fZm5Mb2coIHNldHRpbmdzLCAxLCAiQ29sUmVvcmRlciBhdHRlbXB0ZWQgdG8gaW5pdGlhbGlzZSB0d2ljZS4gSWdub3Jpbmcgc2Vjb25kIiApOwoJCQl9CgoJCQlyZXR1cm4gbnVsbDsgLyogTm8gbm9kZSBmb3IgRGF0YVRhYmxlcyB0byBpbnNlcnQgKi8KCQl9LAoJCSJjRmVhdHVyZSI6ICJSIiwKCQkic0ZlYXR1cmUiOiAiQ29sUmVvcmRlciIKCX0gKTsKfQplbHNlIHsKCWFsZXJ0KCAiV2FybmluZzogQ29sUmVvcmRlciByZXF1aXJlcyBEYXRhVGFibGVzIDEuMTAuOCBvciBncmVhdGVyIC0gd3d3LmRhdGF0YWJsZXMubmV0L2Rvd25sb2FkIik7Cn0KCgovLyBBdHRhY2ggYSBsaXN0ZW5lciB0byB0aGUgZG9jdW1lbnQgd2hpY2ggbGlzdGVucyBmb3IgRGF0YVRhYmxlcyBpbml0aWFsaXNhdGlvbgovLyBldmVudHMgc28gd2UgY2FuIGF1dG9tYXRpY2FsbHkgaW5pdGlhbGlzZQokKGRvY3VtZW50KS5vbiggJ3ByZUluaXQuZHQuY29sUmVvcmRlcicsIGZ1bmN0aW9uIChlLCBzZXR0aW5ncykgewoJaWYgKCBlLm5hbWVzcGFjZSAhPT0gJ2R0JyApIHsKCQlyZXR1cm47Cgl9CgoJdmFyIGluaXQgPSBzZXR0aW5ncy5vSW5pdC5jb2xSZW9yZGVyOwoJdmFyIGRlZmF1bHRzID0gRGF0YVRhYmxlLmRlZmF1bHRzLmNvbFJlb3JkZXI7CgoJaWYgKCBpbml0IHx8IGRlZmF1bHRzICkgewoJCXZhciBvcHRzID0gJC5leHRlbmQoIHt9LCBpbml0LCBkZWZhdWx0cyApOwoKCQlpZiAoIGluaXQgIT09IGZhbHNlICkgewoJCQluZXcgQ29sUmVvcmRlciggc2V0dGluZ3MsIG9wdHMgICk7CgkJfQoJfQp9ICk7CgoKLy8gQVBJIGF1Z21lbnRhdGlvbgokLmZuLmRhdGFUYWJsZS5BcGkucmVnaXN0ZXIoICdjb2xSZW9yZGVyLnJlc2V0KCknLCBmdW5jdGlvbiAoKSB7CglyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBjdHggKSB7CgkJY3R4Ll9jb2xSZW9yZGVyLmZuUmVzZXQoKTsKCX0gKTsKfSApOwoKJC5mbi5kYXRhVGFibGUuQXBpLnJlZ2lzdGVyKCAnY29sUmVvcmRlci5vcmRlcigpJywgZnVuY3Rpb24gKCBzZXQsIG9yaWdpbmFsICkgewoJaWYgKCBzZXQgKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggY3R4ICkgewoJCQljdHguX2NvbFJlb3JkZXIuZm5PcmRlciggc2V0LCBvcmlnaW5hbCApOwoJCX0gKTsKCX0KCglyZXR1cm4gdGhpcy5jb250ZXh0Lmxlbmd0aCA/CgkJdGhpcy5jb250ZXh0WzBdLl9jb2xSZW9yZGVyLmZuT3JkZXIoKSA6CgkJbnVsbDsKfSApOwoKJC5mbi5kYXRhVGFibGUuQXBpLnJlZ2lzdGVyKCAnY29sUmVvcmRlci50cmFuc3Bvc2UoKScsIGZ1bmN0aW9uICggaWR4LCBkaXIgKSB7CglyZXR1cm4gdGhpcy5jb250ZXh0Lmxlbmd0aCAmJiB0aGlzLmNvbnRleHRbMF0uX2NvbFJlb3JkZXIgPwoJCXRoaXMuY29udGV4dFswXS5fY29sUmVvcmRlci5mblRyYW5zcG9zZSggaWR4LCBkaXIgKSA6CgkJaWR4Owp9ICk7CgokLmZuLmRhdGFUYWJsZS5BcGkucmVnaXN0ZXIoICdjb2xSZW9yZGVyLm1vdmUoKScsIGZ1bmN0aW9uKCBmcm9tLCB0bywgZHJvcCwgaW52YWxpZGF0ZVJvd3MgKSB7CglpZiAodGhpcy5jb250ZXh0Lmxlbmd0aCkgewoJCXRoaXMuY29udGV4dFswXS5fY29sUmVvcmRlci5zLmR0Lm9JbnN0YW5jZS5mbkNvbFJlb3JkZXIoIGZyb20sIHRvLCBkcm9wLCBpbnZhbGlkYXRlUm93cyApOwoJCXRoaXMuY29udGV4dFswXS5fY29sUmVvcmRlci5fZm5TZXRDb2x1bW5JbmRleGVzKCk7Cgl9CglyZXR1cm4gdGhpczsKfSApOwoKJC5mbi5kYXRhVGFibGUuQXBpLnJlZ2lzdGVyKCAnY29sUmVvcmRlci5lbmFibGUoKScsIGZ1bmN0aW9uKCBmbGFnICkgewoJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggY3R4ICkgewoJCWlmICggY3R4Ll9jb2xSZW9yZGVyICkgewoJCQljdHguX2NvbFJlb3JkZXIuZm5FbmFibGUoIGZsYWcgKTsKCQl9Cgl9ICk7Cn0gKTsKCiQuZm4uZGF0YVRhYmxlLkFwaS5yZWdpc3RlciggJ2NvbFJlb3JkZXIuZGlzYWJsZSgpJywgZnVuY3Rpb24oKSB7CglyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBjdHggKSB7CgkJaWYgKCBjdHguX2NvbFJlb3JkZXIgKSB7CgkJCWN0eC5fY29sUmVvcmRlci5mbkRpc2FibGUoKTsKCQl9Cgl9ICk7Cn0gKTsKCgpyZXR1cm4gQ29sUmVvcmRlcjsKfSkpOwoKCi8qISBGaXhlZENvbHVtbnMgMy4zLjAKICogwqkyMDEwLTIwMTggU3ByeU1lZGlhIEx0ZCAtIGRhdGF0YWJsZXMubmV0L2xpY2Vuc2UKICovCgovKioKICogQHN1bW1hcnkgICAgIEZpeGVkQ29sdW1ucwogKiBAZGVzY3JpcHRpb24gRnJlZXplIGNvbHVtbnMgaW4gcGxhY2Ugb24gYSBzY3JvbGxpbmcgRGF0YVRhYmxlCiAqIEB2ZXJzaW9uICAgICAzLjMuMAogKiBAZmlsZSAgICAgICAgZGF0YVRhYmxlcy5maXhlZENvbHVtbnMuanMKICogQGF1dGhvciAgICAgIFNwcnlNZWRpYSBMdGQgKHd3dy5zcHJ5bWVkaWEuY28udWspCiAqIEBjb250YWN0ICAgICB3d3cuc3ByeW1lZGlhLmNvLnVrL2NvbnRhY3QKICogQGNvcHlyaWdodCAgIENvcHlyaWdodCAyMDEwLTIwMTggU3ByeU1lZGlhIEx0ZC4KICoKICogVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBhdmFpbGFibGUgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlOgogKiAgIE1JVCBsaWNlbnNlIC0gaHR0cDovL2RhdGF0YWJsZXMubmV0L2xpY2Vuc2UvbWl0CiAqCiAqIFRoaXMgc291cmNlIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CiAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCiAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIGxpY2Vuc2UgZmlsZXMgZm9yIGRldGFpbHMuCiAqCiAqIEZvciBkZXRhaWxzIHBsZWFzZSByZWZlciB0bzogaHR0cDovL3d3dy5kYXRhdGFibGVzLm5ldAogKi8KKGZ1bmN0aW9uKCBmYWN0b3J5ICl7CglpZiAoIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCApIHsKCQkvLyBBTUQKCQlkZWZpbmUoIFsnanF1ZXJ5JywgJ2RhdGF0YWJsZXMubmV0J10sIGZ1bmN0aW9uICggJCApIHsKCQkJcmV0dXJuIGZhY3RvcnkoICQsIHdpbmRvdywgZG9jdW1lbnQgKTsKCQl9ICk7Cgl9CgllbHNlIGlmICggdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICkgewoJCS8vIENvbW1vbkpTCgkJbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocm9vdCwgJCkgewoJCQlpZiAoICEgcm9vdCApIHsKCQkJCXJvb3QgPSB3aW5kb3c7CgkJCX0KCgkJCWlmICggISAkIHx8ICEgJC5mbi5kYXRhVGFibGUgKSB7CgkJCQkkID0gcmVxdWlyZSgnZGF0YXRhYmxlcy5uZXQnKShyb290LCAkKS4kOwoJCQl9CgoJCQlyZXR1cm4gZmFjdG9yeSggJCwgcm9vdCwgcm9vdC5kb2N1bWVudCApOwoJCX07Cgl9CgllbHNlIHsKCQkvLyBCcm93c2VyCgkJZmFjdG9yeSggalF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50ICk7Cgl9Cn0oZnVuY3Rpb24oICQsIHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCApIHsKJ3VzZSBzdHJpY3QnOwp2YXIgRGF0YVRhYmxlID0gJC5mbi5kYXRhVGFibGU7CnZhciBfZmlyZWZveFNjcm9sbDsKCi8qKgogKiBXaGVuIG1ha2luZyB1c2Ugb2YgRGF0YVRhYmxlcycgeC1heGlzIHNjcm9sbGluZyBmZWF0dXJlLCB5b3UgbWF5IHdpc2ggdG8KICogZml4IHRoZSBsZWZ0IG1vc3QgY29sdW1uIGluIHBsYWNlLiBUaGlzIHBsdWctaW4gZm9yIERhdGFUYWJsZXMgcHJvdmlkZXMKICogZXhhY3RseSB0aGlzIG9wdGlvbiAobm90ZSBmb3Igbm9uLXNjcm9sbGluZyB0YWJsZXMsIHBsZWFzZSB1c2UgdGhlCiAqIEZpeGVkSGVhZGVyIHBsdWctaW4sIHdoaWNoIGNhbiBmaXggaGVhZGVycyBhbmQgZm9vdGVycykuIEtleQogKiBmZWF0dXJlcyBpbmNsdWRlOgogKgogKiAqIEZyZWV6ZXMgdGhlIGxlZnQgb3IgcmlnaHQgbW9zdCBjb2x1bW5zIHRvIHRoZSBzaWRlIG9mIHRoZSB0YWJsZQogKiAqIE9wdGlvbiB0byBmcmVlemUgdHdvIG9yIG1vcmUgY29sdW1ucwogKiAqIEZ1bGwgaW50ZWdyYXRpb24gd2l0aCBEYXRhVGFibGVzJyBzY3JvbGxpbmcgb3B0aW9ucwogKiAqIFNwZWVkIC0gRml4ZWRDb2x1bW5zIGlzIGZhc3QgaW4gaXRzIG9wZXJhdGlvbgogKgogKiAgQGNsYXNzCiAqICBAY29uc3RydWN0b3IKICogIEBnbG9iYWwKICogIEBwYXJhbSB7b2JqZWN0fSBkdCBEYXRhVGFibGVzIGluc3RhbmNlLiBXaXRoIERhdGFUYWJsZXMgMS4xMCB0aGlzIGNhbiBhbHNvCiAqICAgIGJlIGEgalF1ZXJ5IGNvbGxlY3Rpb24sIGEgalF1ZXJ5IHNlbGVjdG9yLCBEYXRhVGFibGVzIEFQSSBpbnN0YW5jZSBvcgogKiAgICBzZXR0aW5ncyBvYmplY3QuCiAqICBAcGFyYW0ge29iamVjdH0gW2luaXQ9e31dIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBGaXhlZENvbHVtbnMuIE9wdGlvbnMgYXJlCiAqICAgIGRlZmluZWQgYnkge0BsaW5rIEZpeGVkQ29sdW1ucy5kZWZhdWx0c30KICoKICogIEByZXF1aXJlcyBqUXVlcnkgMS43KwogKiAgQHJlcXVpcmVzIERhdGFUYWJsZXMgMS44LjArCiAqCiAqICBAZXhhbXBsZQogKiAgICAgIHZhciB0YWJsZSA9ICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CiAqICAgICAgICAic2Nyb2xsWCI6ICIxMDAlIgogKiAgICAgIH0gKTsKICogICAgICBuZXcgJC5mbi5kYXRhVGFibGUuZml4ZWRDb2x1bW5zKCB0YWJsZSApOwogKi8KdmFyIEZpeGVkQ29sdW1ucyA9IGZ1bmN0aW9uICggZHQsIGluaXQgKSB7Cgl2YXIgdGhhdCA9IHRoaXM7CgoJLyogU2FuaXR5IGNoZWNrIC0geW91IGp1c3Qga25vdyBpdCB3aWxsIGhhcHBlbiAqLwoJaWYgKCAhICggdGhpcyBpbnN0YW5jZW9mIEZpeGVkQ29sdW1ucyApICkgewoJCWFsZXJ0KCAiRml4ZWRDb2x1bW5zIHdhcm5pbmc6IEZpeGVkQ29sdW1ucyBtdXN0IGJlIGluaXRpYWxpc2VkIHdpdGggdGhlICduZXcnIGtleXdvcmQuIiApOwoJCXJldHVybjsKCX0KCglpZiAoIGluaXQgPT09IHVuZGVmaW5lZCB8fCBpbml0ID09PSB0cnVlICkgewoJCWluaXQgPSB7fTsKCX0KCgkvLyBVc2UgdGhlIERhdGFUYWJsZXMgSHVuZ2FyaWFuIG5vdGF0aW9uIG1hcHBpbmcgbWV0aG9kLCBpZiBpdCBleGlzdHMgdG8KCS8vIHByb3ZpZGUgZm9yd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgY2FtZWwgY2FzZSB2YXJpYWJsZXMKCXZhciBjYW1lbFRvSHVuZ2FyaWFuID0gJC5mbi5kYXRhVGFibGUuY2FtZWxUb0h1bmdhcmlhbjsKCWlmICggY2FtZWxUb0h1bmdhcmlhbiApIHsKCQljYW1lbFRvSHVuZ2FyaWFuKCBGaXhlZENvbHVtbnMuZGVmYXVsdHMsIEZpeGVkQ29sdW1ucy5kZWZhdWx0cywgdHJ1ZSApOwoJCWNhbWVsVG9IdW5nYXJpYW4oIEZpeGVkQ29sdW1ucy5kZWZhdWx0cywgaW5pdCApOwoJfQoKCS8vIHYxLjEwIGFsbG93cyB0aGUgc2V0dGluZ3Mgb2JqZWN0IHRvIGJlIGdvdCBmb3JtIGEgbnVtYmVyIG9mIHNvdXJjZXMKCXZhciBkdFNldHRpbmdzID0gbmV3ICQuZm4uZGF0YVRhYmxlLkFwaSggZHQgKS5zZXR0aW5ncygpWzBdOwoKCS8qKgoJICogU2V0dGluZ3Mgb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGN1c3RvbWlzYWJsZSBpbmZvcm1hdGlvbiBmb3IgRml4ZWRDb2x1bW5zIGluc3RhbmNlCgkgKiBAbmFtZXNwYWNlCgkgKiBAZXh0ZW5kcyBGaXhlZENvbHVtbnMuZGVmYXVsdHMKCSAqIEBwcml2YXRlCgkgKi8KCXRoaXMucyA9IHsKCQkvKioKCQkgKiBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdHMKCQkgKiAgQHR5cGUgICAgIG9iamVjdAoJCSAqICBAZGVmYXVsdCAgT2J0YWluZWQgZnJvbSBEYXRhVGFibGVzIGluc3RhbmNlCgkJICovCgkJImR0IjogZHRTZXR0aW5ncywKCgkJLyoqCgkJICogTnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIERhdGFUYWJsZSAtIHN0b3JlZCBmb3IgcXVpY2sgYWNjZXNzCgkJICogIEB0eXBlICAgICBpbnQKCQkgKiAgQGRlZmF1bHQgIE9idGFpbmVkIGZyb20gRGF0YVRhYmxlcyBpbnN0YW5jZQoJCSAqLwoJCSJpVGFibGVDb2x1bW5zIjogZHRTZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoLAoKCQkvKioKCQkgKiBPcmlnaW5hbCBvdXRlciB3aWR0aHMgb2YgdGhlIGNvbHVtbnMgYXMgcmVuZGVyZWQgYnkgRGF0YVRhYmxlcyAtIHVzZWQgdG8gY2FsY3VsYXRlCgkJICogdGhlIEZpeGVkQ29sdW1ucyBncmlkIGJvdW5kaW5nIGJveAoJCSAqICBAdHlwZSAgICAgYXJyYXkuPGludD4KCQkgKiAgQGRlZmF1bHQgIFtdCgkJICovCgkJImFpT3V0ZXJXaWR0aHMiOiBbXSwKCgkJLyoqCgkJICogT3JpZ2luYWwgaW5uZXIgd2lkdGhzIG9mIHRoZSBjb2x1bW5zIGFzIHJlbmRlcmVkIGJ5IERhdGFUYWJsZXMgLSB1c2VkIHRvIGFwcGx5IHdpZHRocwoJCSAqIHRvIHRoZSBjb2x1bW5zCgkJICogIEB0eXBlICAgICBhcnJheS48aW50PgoJCSAqICBAZGVmYXVsdCAgW10KCQkgKi8KCQkiYWlJbm5lcldpZHRocyI6IFtdLAoKCgkJLyoqCgkJICogSXMgdGhlIGRvY3VtZW50IGxheW91dCByaWdodC10by1sZWZ0CgkJICogQHR5cGUgYm9vbGVhbgoJCSAqLwoJCXJ0bDogJChkdFNldHRpbmdzLm5UYWJsZSkuY3NzKCdkaXJlY3Rpb24nKSA9PT0gJ3J0bCcKCX07CgoKCS8qKgoJICogRE9NIGVsZW1lbnRzIHVzZWQgYnkgdGhlIGNsYXNzIGluc3RhbmNlCgkgKiBAbmFtZXNwYWNlCgkgKiBAcHJpdmF0ZQoJICoKCSAqLwoJdGhpcy5kb20gPSB7CgkJLyoqCgkJICogRGF0YVRhYmxlcyBzY3JvbGxpbmcgZWxlbWVudAoJCSAqICBAdHlwZSAgICAgbm9kZQoJCSAqICBAZGVmYXVsdCAgbnVsbAoJCSAqLwoJCSJzY3JvbGxlciI6IG51bGwsCgoJCS8qKgoJCSAqIERhdGFUYWJsZXMgaGVhZGVyIHRhYmxlCgkJICogIEB0eXBlICAgICBub2RlCgkJICogIEBkZWZhdWx0ICBudWxsCgkJICovCgkJImhlYWRlciI6IG51bGwsCgoJCS8qKgoJCSAqIERhdGFUYWJsZXMgYm9keSB0YWJsZQoJCSAqICBAdHlwZSAgICAgbm9kZQoJCSAqICBAZGVmYXVsdCAgbnVsbAoJCSAqLwoJCSJib2R5IjogbnVsbCwKCgkJLyoqCgkJICogRGF0YVRhYmxlcyBmb290ZXIgdGFibGUKCQkgKiAgQHR5cGUgICAgIG5vZGUKCQkgKiAgQGRlZmF1bHQgIG51bGwKCQkgKi8KCQkiZm9vdGVyIjogbnVsbCwKCgkJLyoqCgkJICogRGlzcGxheSBncmlkIGVsZW1lbnRzCgkJICogQG5hbWVzcGFjZQoJCSAqLwoJCSJncmlkIjogewoJCQkvKioKCQkJICogR3JpZCB3cmFwcGVyLiBUaGlzIGlzIHRoZSBjb250YWluZXIgZWxlbWVudCBmb3IgdGhlIDN4MyBncmlkCgkJCSAqICBAdHlwZSAgICAgbm9kZQoJCQkgKiAgQGRlZmF1bHQgIG51bGwKCQkJICovCgkJCSJ3cmFwcGVyIjogbnVsbCwKCgkJCS8qKgoJCQkgKiBEYXRhVGFibGVzIHNjcm9sbGluZyBlbGVtZW50LiBUaGlzIGVsZW1lbnQgaXMgdGhlIERhdGFUYWJsZXMKCQkJICogY29tcG9uZW50IGluIHRoZSBkaXNwbGF5IGdyaWQgKG1ha2luZyB1cCB0aGUgbWFpbiB0YWJsZSAtIGkuZS4KCQkJICogbm90IHRoZSBmaXhlZCBjb2x1bW5zKS4KCQkJICogIEB0eXBlICAgICBub2RlCgkJCSAqICBAZGVmYXVsdCAgbnVsbAoJCQkgKi8KCQkJImR0IjogbnVsbCwKCgkJCS8qKgoJCQkgKiBMZWZ0IGZpeGVkIGNvbHVtbiBncmlkIGNvbXBvbmVudHMKCQkJICogQG5hbWVzcGFjZQoJCQkgKi8KCQkJImxlZnQiOiB7CgkJCQkid3JhcHBlciI6IG51bGwsCgkJCQkiaGVhZCI6IG51bGwsCgkJCQkiYm9keSI6IG51bGwsCgkJCQkiZm9vdCI6IG51bGwKCQkJfSwKCgkJCS8qKgoJCQkgKiBSaWdodCBmaXhlZCBjb2x1bW4gZ3JpZCBjb21wb25lbnRzCgkJCSAqIEBuYW1lc3BhY2UKCQkJICovCgkJCSJyaWdodCI6IHsKCQkJCSJ3cmFwcGVyIjogbnVsbCwKCQkJCSJoZWFkIjogbnVsbCwKCQkJCSJib2R5IjogbnVsbCwKCQkJCSJmb290IjogbnVsbAoJCQl9CgkJfSwKCgkJLyoqCgkJICogQ2xvbmVkIHRhYmxlIG5vZGVzCgkJICogQG5hbWVzcGFjZQoJCSAqLwoJCSJjbG9uZSI6IHsKCQkJLyoqCgkJCSAqIExlZnQgY29sdW1uIGNsb25lZCB0YWJsZSBub2RlcwoJCQkgKiBAbmFtZXNwYWNlCgkJCSAqLwoJCQkibGVmdCI6IHsKCQkJCS8qKgoJCQkJICogQ2xvbmVkIGhlYWRlciB0YWJsZQoJCQkJICogIEB0eXBlICAgICBub2RlCgkJCQkgKiAgQGRlZmF1bHQgIG51bGwKCQkJCSAqLwoJCQkJImhlYWRlciI6IG51bGwsCgoJCQkJLyoqCgkJCQkgKiBDbG9uZWQgYm9keSB0YWJsZQoJCQkJICogIEB0eXBlICAgICBub2RlCgkJCQkgKiAgQGRlZmF1bHQgIG51bGwKCQkJCSAqLwoJCQkJImJvZHkiOiBudWxsLAoKCQkJCS8qKgoJCQkJICogQ2xvbmVkIGZvb3RlciB0YWJsZQoJCQkJICogIEB0eXBlICAgICBub2RlCgkJCQkgKiAgQGRlZmF1bHQgIG51bGwKCQkJCSAqLwoJCQkJImZvb3RlciI6IG51bGwKCQkJfSwKCgkJCS8qKgoJCQkgKiBSaWdodCBjb2x1bW4gY2xvbmVkIHRhYmxlIG5vZGVzCgkJCSAqIEBuYW1lc3BhY2UKCQkJICovCgkJCSJyaWdodCI6IHsKCQkJCS8qKgoJCQkJICogQ2xvbmVkIGhlYWRlciB0YWJsZQoJCQkJICogIEB0eXBlICAgICBub2RlCgkJCQkgKiAgQGRlZmF1bHQgIG51bGwKCQkJCSAqLwoJCQkJImhlYWRlciI6IG51bGwsCgoJCQkJLyoqCgkJCQkgKiBDbG9uZWQgYm9keSB0YWJsZQoJCQkJICogIEB0eXBlICAgICBub2RlCgkJCQkgKiAgQGRlZmF1bHQgIG51bGwKCQkJCSAqLwoJCQkJImJvZHkiOiBudWxsLAoKCQkJCS8qKgoJCQkJICogQ2xvbmVkIGZvb3RlciB0YWJsZQoJCQkJICogIEB0eXBlICAgICBub2RlCgkJCQkgKiAgQGRlZmF1bHQgIG51bGwKCQkJCSAqLwoJCQkJImZvb3RlciI6IG51bGwKCQkJfQoJCX0KCX07CgoJaWYgKCBkdFNldHRpbmdzLl9vRml4ZWRDb2x1bW5zICkgewoJCXRocm93ICdGaXhlZENvbHVtbnMgYWxyZWFkeSBpbml0aWFsaXNlZCBvbiB0aGlzIHRhYmxlJzsKCX0KCgkvKiBBdHRhY2ggdGhlIGluc3RhbmNlIHRvIHRoZSBEYXRhVGFibGVzIGluc3RhbmNlIHNvIGl0IGNhbiBiZSBhY2Nlc3NlZCBlYXNpbHkgKi8KCWR0U2V0dGluZ3MuX29GaXhlZENvbHVtbnMgPSB0aGlzOwoKCS8qIExldCdzIGRvIGl0ICovCglpZiAoICEgZHRTZXR0aW5ncy5fYkluaXRDb21wbGV0ZSApCgl7CgkJZHRTZXR0aW5ncy5vQXBpLl9mbkNhbGxiYWNrUmVnKCBkdFNldHRpbmdzLCAnYW9Jbml0Q29tcGxldGUnLCBmdW5jdGlvbiAoKSB7CgkJCXRoYXQuX2ZuQ29uc3RydWN0KCBpbml0ICk7CgkJfSwgJ0ZpeGVkQ29sdW1ucycgKTsKCX0KCWVsc2UKCXsKCQl0aGlzLl9mbkNvbnN0cnVjdCggaW5pdCApOwoJfQp9OwoKCgokLmV4dGVuZCggRml4ZWRDb2x1bW5zLnByb3RvdHlwZSAsIHsKCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKCSAqIFB1YmxpYyBtZXRob2RzCgkgKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLwoKCS8qKgoJICogVXBkYXRlIHRoZSBmaXhlZCBjb2x1bW5zIC0gaW5jbHVkaW5nIGhlYWRlcnMgYW5kIGZvb3RlcnMuIE5vdGUgdGhhdCBGaXhlZENvbHVtbnMgd2lsbAoJICogYXV0b21hdGljYWxseSB1cGRhdGUgdGhlIGRpc3BsYXkgd2hlbmV2ZXIgdGhlIGhvc3QgRGF0YVRhYmxlIHJlZHJhd3MuCgkgKiAgQHJldHVybnMge3ZvaWR9CgkgKiAgQGV4YW1wbGUKCSAqICAgICAgdmFyIHRhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCSAqICAgICAgICAgICJzY3JvbGxYIjogIjEwMCUiCgkgKiAgICAgIH0gKTsKCSAqICAgICAgdmFyIGZjID0gbmV3ICQuZm4uZGF0YVRhYmxlLmZpeGVkQ29sdW1ucyggdGFibGUgKTsKCSAqCgkgKiAgICAgIC8vIGF0IHNvbWUgbGF0ZXIgcG9pbnQgd2hlbiB0aGUgdGFibGUgaGFzIGJlZW4gbWFuaXB1bGF0ZWQuLi4uCgkgKiAgICAgIGZjLmZuVXBkYXRlKCk7CgkgKi8KCSJmblVwZGF0ZSI6IGZ1bmN0aW9uICgpCgl7CgkJdGhpcy5fZm5EcmF3KCB0cnVlICk7Cgl9LAoKCgkvKioKCSAqIFJlY2FsY3VsYXRlIHRoZSByZXNpemVzIG9mIHRoZSAzeDMgZ3JpZCB0aGF0IEZpeGVkQ29sdW1ucyB1c2VzIGZvciBkaXNwbGF5IG9mIHRoZSB0YWJsZS4KCSAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB1cGRhdGUgdGhlIHdpZHRoIG9mIHRoZSB0YWJsZSBjb250YWluZXIuIE5vdGUgdGhhdCBGaXhlZENvbHVtbnMgd2lsbAoJICogcGVyZm9ybSB0aGlzIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgd2luZG93LnJlc2l6ZSBldmVudCBpcyBmaXJlZC4KCSAqICBAcmV0dXJucyB7dm9pZH0KCSAqICBAZXhhbXBsZQoJICogICAgICB2YXIgdGFibGUgPSAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJICogICAgICAgICAgInNjcm9sbFgiOiAiMTAwJSIKCSAqICAgICAgfSApOwoJICogICAgICB2YXIgZmMgPSBuZXcgJC5mbi5kYXRhVGFibGUuZml4ZWRDb2x1bW5zKCB0YWJsZSApOwoJICoKCSAqICAgICAgLy8gUmVzaXplIHRoZSB0YWJsZSBjb250YWluZXIgYW5kIHRoZW4gaGF2ZSBGaXhlZENvbHVtbnMgYWRqdXN0IGl0cyBsYXlvdXQuLi4uCgkgKiAgICAgICQoJyNjb250ZW50Jykud2lkdGgoIDEyMDAgKTsKCSAqICAgICAgZmMuZm5SZWRyYXdMYXlvdXQoKTsKCSAqLwoJImZuUmVkcmF3TGF5b3V0IjogZnVuY3Rpb24gKCkKCXsKCQl0aGlzLl9mbkNvbENhbGMoKTsKCQl0aGlzLl9mbkdyaWRMYXlvdXQoKTsKCQl0aGlzLmZuVXBkYXRlKCk7Cgl9LAoKCgkvKioKCSAqIE1hcmsgYSByb3cgc3VjaCB0aGF0IGl0J3MgaGVpZ2h0IHNob3VsZCBiZSByZWNhbGN1bGF0ZWQgd2hlbiB1c2luZyAnc2VtaWF1dG8nIHJvdwoJICogaGVpZ2h0IG1hdGNoaW5nLiBUaGlzIGZ1bmN0aW9uIHdpbGwgaGF2ZSBubyBlZmZlY3Qgd2hlbiAnbm9uZScgb3IgJ2F1dG8nIHJvdyBoZWlnaHQKCSAqIG1hdGNoaW5nIGlzIHVzZWQuCgkgKiAgQHBhcmFtICAge05vZGV9IG5UciBUUiBlbGVtZW50IHRoYXQgc2hvdWxkIGhhdmUgaXQncyBoZWlnaHQgcmVjYWxjdWxhdGVkCgkgKiAgQHJldHVybnMge3ZvaWR9CgkgKiAgQGV4YW1wbGUKCSAqICAgICAgdmFyIHRhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCSAqICAgICAgICAgICJzY3JvbGxYIjogIjEwMCUiCgkgKiAgICAgIH0gKTsKCSAqICAgICAgdmFyIGZjID0gbmV3ICQuZm4uZGF0YVRhYmxlLmZpeGVkQ29sdW1ucyggdGFibGUgKTsKCSAqCgkgKiAgICAgIC8vIG1hbmlwdWxhdGUgdGhlIHRhYmxlIC0gbWFyayB0aGUgcm93IGFzIG5lZWRpbmcgYW4gdXBkYXRlIHRoZW4gdXBkYXRlIHRoZSB0YWJsZQoJICogICAgICAvLyB0aGlzIGFsbG93cyB0aGUgcmVkcmF3IHBlcmZvcm1lZCBieSBEYXRhVGFibGVzIGZuVXBkYXRlIHRvIHJlY2FsY3VsYXRlIHRoZSByb3cKCSAqICAgICAgLy8gaGVpZ2h0CgkgKiAgICAgIGZjLmZuUmVjYWxjdWxhdGVIZWlnaHQoKTsKCSAqICAgICAgdGFibGUuZm5VcGRhdGUoICQoJyNleGFtcGxlIHRib2R5IHRyOmVxKDApJylbMF0sIFsiaW5zZXJ0IGRhdGUiLCAxLCAyLCAzIC4uLiBdKTsKCSAqLwoJImZuUmVjYWxjdWxhdGVIZWlnaHQiOiBmdW5jdGlvbiAoIG5UciApCgl7CgkJZGVsZXRlIG5Uci5fRFRUQ19pSGVpZ2h0OwoJCW5Uci5zdHlsZS5oZWlnaHQgPSAnYXV0byc7Cgl9LAoKCgkvKioKCSAqIFNldCB0aGUgaGVpZ2h0IG9mIGEgZ2l2ZW4gcm93IC0gcHJvdmlkZXMgY3Jvc3MgYnJvd3NlciBjb21wYXRpYmlsaXR5CgkgKiAgQHBhcmFtICAge05vZGV9IG5UYXJnZXQgVFIgZWxlbWVudCB0aGF0IHNob3VsZCBoYXZlIGl0J3MgaGVpZ2h0IHJlY2FsY3VsYXRlZAoJICogIEBwYXJhbSAgIHtpbnR9IGlIZWlnaHQgSGVpZ2h0IGluIHBpeGVscyB0byBzZXQKCSAqICBAcmV0dXJucyB7dm9pZH0KCSAqICBAZXhhbXBsZQoJICogICAgICB2YXIgdGFibGUgPSAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJICogICAgICAgICAgInNjcm9sbFgiOiAiMTAwJSIKCSAqICAgICAgfSApOwoJICogICAgICB2YXIgZmMgPSBuZXcgJC5mbi5kYXRhVGFibGUuZml4ZWRDb2x1bW5zKCB0YWJsZSApOwoJICoKCSAqICAgICAgLy8gWW91IG1heSB3YW50IHRvIGRvIHRoaXMgYWZ0ZXIgbWFuaXB1bGF0aW5nIGEgcm93IGluIHRoZSBmaXhlZCBjb2x1bW4KCSAqICAgICAgZmMuZm5TZXRSb3dIZWlnaHQoICQoJyNleGFtcGxlIHRib2R5IHRyOmVxKDApJylbMF0sIDUwICk7CgkgKi8KCSJmblNldFJvd0hlaWdodCI6IGZ1bmN0aW9uICggblRhcmdldCwgaUhlaWdodCApCgl7CgkJblRhcmdldC5zdHlsZS5oZWlnaHQgPSBpSGVpZ2h0KyJweCI7Cgl9LAoKCgkvKioKCSAqIEdldCBkYXRhIGluZGV4IGluZm9ybWF0aW9uIGFib3V0IGEgcm93IG9yIGNlbGwgaW4gdGhlIHRhYmxlIGJvZHkuCgkgKiBUaGlzIGZ1bmN0aW9uIGlzIGZ1bmN0aW9uYWxseSBpZGVudGljYWwgdG8gZm5HZXRQb3NpdGlvbiBpbiBEYXRhVGFibGVzLAoJICogdGFraW5nIHRoZSBzYW1lIHBhcmFtZXRlciAoVEgsIFREIG9yIFRSIG5vZGUpIGFuZCByZXR1cm5pbmcgZXhhY3RseSB0aGUKCSAqIHRoZSBzYW1lIGluZm9ybWF0aW9uIChkYXRhIGluZGV4IGluZm9ybWF0aW9uKS4gVEhlIGRpZmZlcmVuY2UgYmV0d2VlbgoJICogdGhlIHR3byBpcyB0aGF0IHRoaXMgbWV0aG9kIHRha2VzIGludG8gYWNjb3VudCB0aGUgZml4ZWQgY29sdW1ucyBpbiB0aGUKCSAqIHRhYmxlLCBzbyB5b3UgY2FuIHBhc3MgaW4gbm9kZXMgZnJvbSB0aGUgbWFzdGVyIHRhYmxlLCBvciB0aGUgY2xvbmVkCgkgKiB0YWJsZXMgYW5kIGdldCB0aGUgaW5kZXggcG9zaXRpb24gZm9yIHRoZSBkYXRhIGluIHRoZSBtYWluIHRhYmxlLgoJICogIEBwYXJhbSB7bm9kZX0gbm9kZSBUUiwgVEggb3IgVEQgZWxlbWVudCB0byBnZXQgdGhlIGluZm9ybWF0aW9uIGFib3V0CgkgKiAgQHJldHVybnMge2ludH0gSWYgbk5vZGUgaXMgZ2l2ZW4gYXMgYSBUUiwgdGhlbiBhIHNpbmdsZSBpbmRleCBpcyAKCSAqICAgIHJldHVybmVkLCBvciBpZiBnaXZlbiBhcyBhIGNlbGwsIGFuIGFycmF5IG9mIFtyb3cgaW5kZXgsIGNvbHVtbiBpbmRleAoJICogICAgKHZpc2libGUpLCBjb2x1bW4gaW5kZXggKGFsbCldIGlzIGdpdmVuLgoJICovCgkiZm5HZXRQb3NpdGlvbiI6IGZ1bmN0aW9uICggbm9kZSApCgl7CgkJdmFyIGlkeDsKCQl2YXIgaW5zdCA9IHRoaXMucy5kdC5vSW5zdGFuY2U7CgoJCWlmICggISAkKG5vZGUpLnBhcmVudHMoJy5EVEZDX0Nsb25lZCcpLmxlbmd0aCApCgkJewoJCQkvLyBOb3QgaW4gYSBjbG9uZWQgdGFibGUKCQkJcmV0dXJuIGluc3QuZm5HZXRQb3NpdGlvbiggbm9kZSApOwoJCX0KCQllbHNlCgkJewoJCQkvLyBJdHMgaW4gdGhlIGNsb25lZCB0YWJsZSwgc28gbmVlZCB0byBsb29rIHVwIHBvc2l0aW9uCgkJCWlmICggbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAndHInICkgewoJCQkJaWR4ID0gJChub2RlKS5pbmRleCgpOwoJCQkJcmV0dXJuIGluc3QuZm5HZXRQb3NpdGlvbiggJCgndHInLCB0aGlzLnMuZHQublRCb2R5KVsgaWR4IF0gKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCXZhciBjb2xJZHggPSAkKG5vZGUpLmluZGV4KCk7CgkJCQlpZHggPSAkKG5vZGUucGFyZW50Tm9kZSkuaW5kZXgoKTsKCQkJCXZhciByb3cgPSBpbnN0LmZuR2V0UG9zaXRpb24oICQoJ3RyJywgdGhpcy5zLmR0Lm5UQm9keSlbIGlkeCBdICk7CgoJCQkJcmV0dXJuIFsKCQkJCQlyb3csCgkJCQkJY29sSWR4LAoJCQkJCWluc3Qub0FwaS5fZm5WaXNpYmxlVG9Db2x1bW5JbmRleCggdGhpcy5zLmR0LCBjb2xJZHggKQoJCQkJXTsKCQkJfQoJCX0KCX0sCgoJZm5Ub0ZpeGVkTm9kZTogZnVuY3Rpb24gKCByb3dJZHgsIGNvbElkeCApCgl7CgkJdmFyIGZvdW5kOwoKCQlpZiAoIGNvbElkeCA8IHRoaXMucy5pTGVmdENvbHVtbnMgKSB7CgkJCWZvdW5kID0gJCh0aGlzLmRvbS5jbG9uZS5sZWZ0LmJvZHkpLmZpbmQoJ1tkYXRhLWR0LXJvdz0nK3Jvd0lkeCsnXVtkYXRhLWR0LWNvbHVtbj0nK2NvbElkeCsnXScpOwoJCX0KCQllbHNlIGlmICggY29sSWR4ID49IHRoaXMucy5pUmlnaHRDb2x1bW5zICkgewoJCQlmb3VuZCA9ICQodGhpcy5kb20uY2xvbmUucmlnaHQuYm9keSkuZmluZCgnW2RhdGEtZHQtcm93PScrcm93SWR4KyddW2RhdGEtZHQtY29sdW1uPScrY29sSWR4KyddJyk7CgkJfQoKCQlpZiAoIGZvdW5kICYmIGZvdW5kLmxlbmd0aCApIHsKCQkJcmV0dXJuIGZvdW5kWzBdOwoJCX0KCgkJLy8gRmFsbGJhY2sgLSBub24tZml4ZWQgbm9kZQoJCXZhciB0YWJsZSA9IG5ldyAkLmZuLmRhdGFUYWJsZS5BcGkodGhpcy5zLmR0KTsKCQlyZXR1cm4gdGFibGUuY2VsbChyb3dJZHgsIGNvbElkeCkubm9kZSgpOwoJfSwKCgoJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJICogUHJpdmF0ZSBtZXRob2RzICh0aGV5IGFyZSBvZiBjb3Vyc2UgcHVibGljIGluIEpTLCBidXQgcmVjb21tZW5kZWQgYXMgcHJpdmF0ZSkKCSAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCgoJLyoqCgkgKiBJbml0aWFsaXNhdGlvbiBmb3IgRml4ZWRDb2x1bW5zCgkgKiAgQHBhcmFtICAge09iamVjdH0gb0luaXQgVXNlciBzZXR0aW5ncyBmb3IgaW5pdGlhbGlzYXRpb24KCSAqICBAcmV0dXJucyB7dm9pZH0KCSAqICBAcHJpdmF0ZQoJICovCgkiX2ZuQ29uc3RydWN0IjogZnVuY3Rpb24gKCBvSW5pdCApCgl7CgkJdmFyIGksIGlMZW4sIGlXaWR0aCwKCQkJdGhhdCA9IHRoaXM7CgoJCS8qIFNhbml0eSBjaGVja2luZyAqLwoJCWlmICggdHlwZW9mIHRoaXMucy5kdC5vSW5zdGFuY2UuZm5WZXJzaW9uQ2hlY2sgIT0gJ2Z1bmN0aW9uJyB8fAoJCSAgICAgdGhpcy5zLmR0Lm9JbnN0YW5jZS5mblZlcnNpb25DaGVjayggJzEuOC4wJyApICE9PSB0cnVlICkKCQl7CgkJCWFsZXJ0KCAiRml4ZWRDb2x1bW5zICIrRml4ZWRDb2x1bW5zLlZFUlNJT04rIiByZXF1aXJlZCBEYXRhVGFibGVzIDEuOC4wIG9yIGxhdGVyLiAiKwoJCQkJIlBsZWFzZSB1cGdyYWRlIHlvdXIgRGF0YVRhYmxlcyBpbnN0YWxsYXRpb24iICk7CgkJCXJldHVybjsKCQl9CgoJCWlmICggdGhpcy5zLmR0Lm9TY3JvbGwuc1ggPT09ICIiICkKCQl7CgkJCXRoaXMucy5kdC5vSW5zdGFuY2Uub0FwaS5fZm5Mb2coIHRoaXMucy5kdCwgMSwgIkZpeGVkQ29sdW1ucyBpcyBub3QgbmVlZGVkIChubyAiKwoJCQkJIngtc2Nyb2xsaW5nIGluIERhdGFUYWJsZXMgZW5hYmxlZCksIHNvIG5vIGFjdGlvbiB3aWxsIGJlIHRha2VuLiBVc2UgJ0ZpeGVkSGVhZGVyJyBmb3IgIisKCQkJCSJjb2x1bW4gZml4aW5nIHdoZW4gc2Nyb2xsaW5nIGlzIG5vdCBlbmFibGVkIiApOwoJCQlyZXR1cm47CgkJfQoKCQkvKiBBcHBseSB0aGUgc2V0dGluZ3MgZnJvbSB0aGUgdXNlciAvIGRlZmF1bHRzICovCgkJdGhpcy5zID0gJC5leHRlbmQoIHRydWUsIHRoaXMucywgRml4ZWRDb2x1bW5zLmRlZmF1bHRzLCBvSW5pdCApOwoKCQkvKiBTZXQgdXAgdGhlIERPTSBhcyB3ZSBuZWVkIGl0IGFuZCBjYWNoZSBub2RlcyAqLwoJCXZhciBjbGFzc2VzID0gdGhpcy5zLmR0Lm9DbGFzc2VzOwoJCXRoaXMuZG9tLmdyaWQuZHQgPSAkKHRoaXMucy5kdC5uVGFibGUpLnBhcmVudHMoJ2Rpdi4nK2NsYXNzZXMuc1Njcm9sbFdyYXBwZXIpWzBdOwoJCXRoaXMuZG9tLnNjcm9sbGVyID0gJCgnZGl2LicrY2xhc3Nlcy5zU2Nyb2xsQm9keSwgdGhpcy5kb20uZ3JpZC5kdCApWzBdOwoKCQkvKiBTZXQgdXAgdGhlIERPTSB0aGF0IHdlIHdhbnQgZm9yIHRoZSBmaXhlZCBjb2x1bW4gbGF5b3V0IGdyaWQgKi8KCQl0aGlzLl9mbkNvbENhbGMoKTsKCQl0aGlzLl9mbkdyaWRTZXR1cCgpOwoKCQkvKiBFdmVudCBoYW5kbGVycyAqLwoJCXZhciBtb3VzZUNvbnRyb2xsZXI7CgkJdmFyIG1vdXNlRG93biA9IGZhbHNlOwoKCQkvLyBXaGVuIHRoZSBtb3VzZSBpcyBkb3duIChkcmFnIHNjcm9sbCkgdGhlIG1vdXNlIGNvbnRyb2xsZXIgY2Fubm90CgkJLy8gY2hhbmdlLCBhcyB0aGUgYnJvd3NlciBrZWVwcyB0aGUgb3JpZ2luYWwgZWxlbWVudCBhcyB0aGUgc2Nyb2xsaW5nIG9uZQoJCSQodGhpcy5zLmR0Lm5UYWJsZVdyYXBwZXIpLm9uKCAnbW91c2Vkb3duLkRURkMnLCBmdW5jdGlvbiAoZSkgewoJCQlpZiAoIGUuYnV0dG9uID09PSAwICkgewoJCQkJbW91c2VEb3duID0gdHJ1ZTsKCgkJCQkkKGRvY3VtZW50KS5vbmUoICdtb3VzZXVwJywgZnVuY3Rpb24gKCkgewoJCQkJCW1vdXNlRG93biA9IGZhbHNlOwoJCQkJfSApOwoJCQl9CgkJfSApOwoKCQkvLyBXaGVuIHRoZSBib2R5IGlzIHNjcm9sbGVkIC0gc2Nyb2xsIHRoZSBsZWZ0IGFuZCByaWdodCBjb2x1bW5zCgkJJCh0aGlzLmRvbS5zY3JvbGxlcikKCQkJLm9uKCAnbW91c2VvdmVyLkRURkMgdG91Y2hzdGFydC5EVEZDJywgZnVuY3Rpb24gKCkgewoJCQkJaWYgKCAhIG1vdXNlRG93biApIHsKCQkJCQltb3VzZUNvbnRyb2xsZXIgPSAnbWFpbic7CgkJCQl9CgkJCX0gKQoJCQkub24oICdzY3JvbGwuRFRGQycsIGZ1bmN0aW9uIChlKSB7CgkJCQlpZiAoICEgbW91c2VDb250cm9sbGVyICYmIGUub3JpZ2luYWxFdmVudCApIHsKCQkJCQltb3VzZUNvbnRyb2xsZXIgPSAnbWFpbic7CgkJCQl9CgoJCQkJaWYgKCBtb3VzZUNvbnRyb2xsZXIgPT09ICdtYWluJyApIHsKCQkJCQlpZiAoIHRoYXQucy5pTGVmdENvbHVtbnMgPiAwICkgewoJCQkJCQl0aGF0LmRvbS5ncmlkLmxlZnQubGluZXIuc2Nyb2xsVG9wID0gdGhhdC5kb20uc2Nyb2xsZXIuc2Nyb2xsVG9wOwoJCQkJCX0KCQkJCQlpZiAoIHRoYXQucy5pUmlnaHRDb2x1bW5zID4gMCApIHsKCQkJCQkJdGhhdC5kb20uZ3JpZC5yaWdodC5saW5lci5zY3JvbGxUb3AgPSB0aGF0LmRvbS5zY3JvbGxlci5zY3JvbGxUb3A7CgkJCQkJfQoJCQkJfQoJCQl9ICk7CgoJCXZhciB3aGVlbFR5cGUgPSAnb253aGVlbCcgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykgPwoJCQknd2hlZWwuRFRGQycgOgoJCQknbW91c2V3aGVlbC5EVEZDJzsKCgkJaWYgKCB0aGF0LnMuaUxlZnRDb2x1bW5zID4gMCApIHsKCQkJLy8gV2hlbiBzY3JvbGxpbmcgdGhlIGxlZnQgY29sdW1uLCBzY3JvbGwgdGhlIGJvZHkgYW5kIHJpZ2h0IGNvbHVtbgoJCQkkKHRoYXQuZG9tLmdyaWQubGVmdC5saW5lcikKCQkJCS5vbiggJ21vdXNlb3Zlci5EVEZDIHRvdWNoc3RhcnQuRFRGQycsIGZ1bmN0aW9uICgpIHsKCQkJCQlpZiAoICEgbW91c2VEb3duICkgewoJCQkJCQltb3VzZUNvbnRyb2xsZXIgPSAnbGVmdCc7CgkJCQkJfQoJCQkJfSApCgkJCQkub24oICdzY3JvbGwuRFRGQycsIGZ1bmN0aW9uICggZSApIHsKCQkJCQlpZiAoICEgbW91c2VDb250cm9sbGVyICYmIGUub3JpZ2luYWxFdmVudCApIHsKCQkJCQkJbW91c2VDb250cm9sbGVyID0gJ2xlZnQnOwoJCQkJCX0KCgkJCQkJaWYgKCBtb3VzZUNvbnRyb2xsZXIgPT09ICdsZWZ0JyApIHsKCQkJCQkJdGhhdC5kb20uc2Nyb2xsZXIuc2Nyb2xsVG9wID0gdGhhdC5kb20uZ3JpZC5sZWZ0LmxpbmVyLnNjcm9sbFRvcDsKCQkJCQkJaWYgKCB0aGF0LnMuaVJpZ2h0Q29sdW1ucyA+IDAgKSB7CgkJCQkJCQl0aGF0LmRvbS5ncmlkLnJpZ2h0LmxpbmVyLnNjcm9sbFRvcCA9IHRoYXQuZG9tLmdyaWQubGVmdC5saW5lci5zY3JvbGxUb3A7CgkJCQkJCX0KCQkJCQl9CgkJCQl9ICkKCQkJCS5vbiggd2hlZWxUeXBlLCBmdW5jdGlvbihlKSB7CgkJCQkJLy8gUGFzcyBob3Jpem9udGFsIHNjcm9sbGluZyB0aHJvdWdoCgkJCQkJdmFyIHhEZWx0YSA9IGUudHlwZSA9PT0gJ3doZWVsJyA/CgkJCQkJCS1lLm9yaWdpbmFsRXZlbnQuZGVsdGFYIDoKCQkJCQkJZS5vcmlnaW5hbEV2ZW50LndoZWVsRGVsdGFYOwoJCQkJCXRoYXQuZG9tLnNjcm9sbGVyLnNjcm9sbExlZnQgLT0geERlbHRhOwoJCQkJfSApOwoJCX0KCgkJaWYgKCB0aGF0LnMuaVJpZ2h0Q29sdW1ucyA+IDAgKSB7CgkJCS8vIFdoZW4gc2Nyb2xsaW5nIHRoZSByaWdodCBjb2x1bW4sIHNjcm9sbCB0aGUgYm9keSBhbmQgdGhlIGxlZnQgY29sdW1uCgkJCSQodGhhdC5kb20uZ3JpZC5yaWdodC5saW5lcikKCQkJCS5vbiggJ21vdXNlb3Zlci5EVEZDIHRvdWNoc3RhcnQuRFRGQycsIGZ1bmN0aW9uICgpIHsKCQkJCQlpZiAoICEgbW91c2VEb3duICkgewoJCQkJCQltb3VzZUNvbnRyb2xsZXIgPSAncmlnaHQnOwoJCQkJCX0KCQkJCX0gKQoJCQkJLm9uKCAnc2Nyb2xsLkRURkMnLCBmdW5jdGlvbiAoIGUgKSB7CgkJCQkJaWYgKCAhIG1vdXNlQ29udHJvbGxlciAmJiBlLm9yaWdpbmFsRXZlbnQgKSB7CgkJCQkJCW1vdXNlQ29udHJvbGxlciA9ICdyaWdodCc7CgkJCQkJfQoKCQkJCQlpZiAoIG1vdXNlQ29udHJvbGxlciA9PT0gJ3JpZ2h0JyApIHsKCQkJCQkJdGhhdC5kb20uc2Nyb2xsZXIuc2Nyb2xsVG9wID0gdGhhdC5kb20uZ3JpZC5yaWdodC5saW5lci5zY3JvbGxUb3A7CgkJCQkJCWlmICggdGhhdC5zLmlMZWZ0Q29sdW1ucyA+IDAgKSB7CgkJCQkJCQl0aGF0LmRvbS5ncmlkLmxlZnQubGluZXIuc2Nyb2xsVG9wID0gdGhhdC5kb20uZ3JpZC5yaWdodC5saW5lci5zY3JvbGxUb3A7CgkJCQkJCX0KCQkJCQl9CgkJCQl9ICkKCQkJCS5vbiggd2hlZWxUeXBlLCBmdW5jdGlvbihlKSB7CgkJCQkJLy8gUGFzcyBob3Jpem9udGFsIHNjcm9sbGluZyB0aHJvdWdoCgkJCQkJdmFyIHhEZWx0YSA9IGUudHlwZSA9PT0gJ3doZWVsJyA/CgkJCQkJCS1lLm9yaWdpbmFsRXZlbnQuZGVsdGFYIDoKCQkJCQkJZS5vcmlnaW5hbEV2ZW50LndoZWVsRGVsdGFYOwoJCQkJCXRoYXQuZG9tLnNjcm9sbGVyLnNjcm9sbExlZnQgLT0geERlbHRhOwoJCQkJfSApOwoJCX0KCgkJJCh3aW5kb3cpLm9uKCAncmVzaXplLkRURkMnLCBmdW5jdGlvbiAoKSB7CgkJCXRoYXQuX2ZuR3JpZExheW91dC5jYWxsKCB0aGF0ICk7CgkJfSApOwoKCQl2YXIgYkZpcnN0RHJhdyA9IHRydWU7CgkJdmFyIGpxVGFibGUgPSAkKHRoaXMucy5kdC5uVGFibGUpOwoKCQlqcVRhYmxlCgkJCS5vbiggJ2RyYXcuZHQuRFRGQycsIGZ1bmN0aW9uICgpIHsKCQkJCXRoYXQuX2ZuQ29sQ2FsYygpOwoJCQkJdGhhdC5fZm5EcmF3LmNhbGwoIHRoYXQsIGJGaXJzdERyYXcgKTsKCQkJCWJGaXJzdERyYXcgPSBmYWxzZTsKCQkJfSApCgkJCS5vbiggJ2NvbHVtbi1zaXppbmcuZHQuRFRGQycsIGZ1bmN0aW9uICgpIHsKCQkJCXRoYXQuX2ZuQ29sQ2FsYygpOwoJCQkJdGhhdC5fZm5HcmlkTGF5b3V0KCB0aGF0ICk7CgkJCX0gKQoJCQkub24oICdjb2x1bW4tdmlzaWJpbGl0eS5kdC5EVEZDJywgZnVuY3Rpb24gKCBlLCBzZXR0aW5ncywgY29sdW1uLCB2aXMsIHJlY2FsYyApIHsKCQkJCWlmICggcmVjYWxjID09PSB1bmRlZmluZWQgfHwgcmVjYWxjICkgewoJCQkJCXRoYXQuX2ZuQ29sQ2FsYygpOwoJCQkJCXRoYXQuX2ZuR3JpZExheW91dCggdGhhdCApOwoJCQkJCXRoYXQuX2ZuRHJhdyggdHJ1ZSApOwoJCQkJfQoJCQl9ICkKCQkJLm9uKCAnc2VsZWN0LmR0LkRURkMgZGVzZWxlY3QuZHQuRFRGQycsIGZ1bmN0aW9uICggZSwgZHQsIHR5cGUsIGluZGV4ZXMgKSB7CgkJCQlpZiAoIGUubmFtZXNwYWNlID09PSAnZHQnICkgewoJCQkJCXRoYXQuX2ZuRHJhdyggZmFsc2UgKTsKCQkJCX0KCQkJfSApCgkJCS5vbiggJ2Rlc3Ryb3kuZHQuRFRGQycsIGZ1bmN0aW9uICgpIHsKCQkJCWpxVGFibGUub2ZmKCAnLkRURkMnICk7CgoJCQkJJCh0aGF0LmRvbS5zY3JvbGxlcikub2ZmKCAnLkRURkMnICk7CgkJCQkkKHdpbmRvdykub2ZmKCAnLkRURkMnICk7CgkJCQkkKHRoYXQucy5kdC5uVGFibGVXcmFwcGVyKS5vZmYoICcuRFRGQycgKTsKCgkJCQkkKHRoYXQuZG9tLmdyaWQubGVmdC5saW5lcikub2ZmKCAnLkRURkMgJyt3aGVlbFR5cGUgKTsKCQkJCSQodGhhdC5kb20uZ3JpZC5sZWZ0LndyYXBwZXIpLnJlbW92ZSgpOwoKCQkJCSQodGhhdC5kb20uZ3JpZC5yaWdodC5saW5lcikub2ZmKCAnLkRURkMgJyt3aGVlbFR5cGUgKTsKCQkJCSQodGhhdC5kb20uZ3JpZC5yaWdodC53cmFwcGVyKS5yZW1vdmUoKTsKCQkJfSApOwoKCQkvKiBHZXQgdGhpbmdzIHJpZ2h0IHRvIHN0YXJ0IHdpdGggLSBub3RlIHRoYXQgZHVlIHRvIGFkanVzdGluZyB0aGUgY29sdW1ucywgdGhlcmUgbXVzdCBiZQoJCSAqIGFub3RoZXIgcmVkcmF3IG9mIHRoZSBtYWluIHRhYmxlLiBJdCBkb2Vzbid0IG5lZWQgdG8gYmUgYSBmdWxsIHJlZHJhdyBob3dldmVyLgoJCSAqLwoJCXRoaXMuX2ZuR3JpZExheW91dCgpOwoJCXRoaXMucy5kdC5vSW5zdGFuY2UuZm5EcmF3KGZhbHNlKTsKCX0sCgoKCS8qKgoJICogQ2FsY3VsYXRlIHRoZSBjb2x1bW4gd2lkdGhzIGZvciB0aGUgZ3JpZCBsYXlvdXQKCSAqICBAcmV0dXJucyB7dm9pZH0KCSAqICBAcHJpdmF0ZQoJICovCgkiX2ZuQ29sQ2FsYyI6IGZ1bmN0aW9uICgpCgl7CgkJdmFyIHRoYXQgPSB0aGlzOwoJCXZhciBpTGVmdFdpZHRoID0gMDsKCQl2YXIgaVJpZ2h0V2lkdGggPSAwOwoKCQl0aGlzLnMuYWlJbm5lcldpZHRocyA9IFtdOwoJCXRoaXMucy5haU91dGVyV2lkdGhzID0gW107CgoJCSQuZWFjaCggdGhpcy5zLmR0LmFvQ29sdW1ucywgZnVuY3Rpb24gKGksIGNvbCkgewoJCQl2YXIgdGggPSAkKGNvbC5uVGgpOwoJCQl2YXIgYm9yZGVyOwoKCQkJaWYgKCAhIHRoLmZpbHRlcignOnZpc2libGUnKS5sZW5ndGggKSB7CgkJCQl0aGF0LnMuYWlJbm5lcldpZHRocy5wdXNoKCAwICk7CgkJCQl0aGF0LnMuYWlPdXRlcldpZHRocy5wdXNoKCAwICk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkvLyBJbm5lciB3aWR0aCBpcyB1c2VkIHRvIGFzc2lnbiB3aWR0aHMgdG8gY2VsbHMKCQkJCS8vIE91dGVyIHdpZHRoIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBjb250YWluZXIKCQkJCXZhciBpV2lkdGggPSB0aC5vdXRlcldpZHRoKCk7CgoJCQkJLy8gV2hlbiB3b3JraW5nIHdpdGggdGhlIGxlZnQgbW9zdC1jZWxsLCBuZWVkIHRvIGFkZCBvbiB0aGUKCQkJCS8vIHRhYmxlJ3MgYm9yZGVyIHRvIHRoZSBvdXRlcldpZHRoLCBzaW5jZSB3ZSBuZWVkIHRvIHRha2UKCQkJCS8vIGFjY291bnQgb2YgaXQsIGJ1dCBpdCBpc24ndCBpbiBhbnkgY2VsbAoJCQkJaWYgKCB0aGF0LnMuYWlPdXRlcldpZHRocy5sZW5ndGggPT09IDAgKSB7CgkJCQkJYm9yZGVyID0gJCh0aGF0LnMuZHQublRhYmxlKS5jc3MoJ2JvcmRlci1sZWZ0LXdpZHRoJyk7CgkJCQkJaVdpZHRoICs9IHR5cGVvZiBib3JkZXIgPT09ICdzdHJpbmcnICYmIGJvcmRlci5pbmRleE9mKCdweCcpID09PSAtMSA/CgkJCQkJCTEgOgoJCQkJCQlwYXJzZUludCggYm9yZGVyLCAxMCApOwoJCQkJfQoKCQkJCS8vIExpa2V3aXNlIHdpdGggdGhlIGZpbmFsIGNvbHVtbiBvbiB0aGUgcmlnaHQKCQkJCWlmICggdGhhdC5zLmFpT3V0ZXJXaWR0aHMubGVuZ3RoID09PSB0aGF0LnMuZHQuYW9Db2x1bW5zLmxlbmd0aC0xICkgewoJCQkJCWJvcmRlciA9ICQodGhhdC5zLmR0Lm5UYWJsZSkuY3NzKCdib3JkZXItcmlnaHQtd2lkdGgnKTsKCQkJCQlpV2lkdGggKz0gdHlwZW9mIGJvcmRlciA9PT0gJ3N0cmluZycgJiYgYm9yZGVyLmluZGV4T2YoJ3B4JykgPT09IC0xID8KCQkJCQkJMSA6CgkJCQkJCXBhcnNlSW50KCBib3JkZXIsIDEwICk7CgkJCQl9CgoJCQkJdGhhdC5zLmFpT3V0ZXJXaWR0aHMucHVzaCggaVdpZHRoICk7CgkJCQl0aGF0LnMuYWlJbm5lcldpZHRocy5wdXNoKCB0aC53aWR0aCgpICk7CgoJCQkJaWYgKCBpIDwgdGhhdC5zLmlMZWZ0Q29sdW1ucyApCgkJCQl7CgkJCQkJaUxlZnRXaWR0aCArPSBpV2lkdGg7CgkJCQl9CgoJCQkJaWYgKCB0aGF0LnMuaVRhYmxlQ29sdW1ucy10aGF0LnMuaVJpZ2h0Q29sdW1ucyA8PSBpICkKCQkJCXsKCQkJCQlpUmlnaHRXaWR0aCArPSBpV2lkdGg7CgkJCQl9CgkJCX0KCQl9ICk7CgoJCXRoaXMucy5pTGVmdFdpZHRoID0gaUxlZnRXaWR0aDsKCQl0aGlzLnMuaVJpZ2h0V2lkdGggPSBpUmlnaHRXaWR0aDsKCX0sCgoKCS8qKgoJICogU2V0IHVwIHRoZSBET00gZm9yIHRoZSBmaXhlZCBjb2x1bW4uIFRoZSB3YXkgdGhlIGxheW91dCB3b3JrcyBpcyB0byBjcmVhdGUgYSAxeDMgZ3JpZAoJICogZm9yIHRoZSBsZWZ0IGNvbHVtbiwgdGhlIERhdGFUYWJsZSAoZm9yIHdoaWNoIHdlIGp1c3QgcmV1c2UgdGhlIHNjcm9sbGluZyBlbGVtZW50IERhdGFUYWJsZQoJICogcHV0cyBpbnRvIHRoZSBET00pIGFuZCB0aGUgcmlnaHQgY29sdW1uLiBJbiBlYWNoIG9mIGhlIHR3byBmaXhlZCBjb2x1bW4gZWxlbWVudHMgdGhlcmUgaXMgYQoJICogZ3JvdXBpbmcgd3JhcHBlciBlbGVtZW50IGFuZCB0aGVuIGEgaGVhZCwgYm9keSBhbmQgZm9vdGVyIHdyYXBwZXIuIEluIGVhY2ggb2YgdGhlc2Ugd2UgdGhlbgoJICogcGxhY2UgdGhlIGNsb25lZCBoZWFkZXIsIGJvZHkgb3IgZm9vdGVyIHRhYmxlcy4gVGhpcyBlZmZlY3RpdmVseSBnaXZlcyBhcyAzeDMgZ3JpZCBzdHJ1Y3R1cmUuCgkgKiAgQHJldHVybnMge3ZvaWR9CgkgKiAgQHByaXZhdGUKCSAqLwoJIl9mbkdyaWRTZXR1cCI6IGZ1bmN0aW9uICgpCgl7CgkJdmFyIHRoYXQgPSB0aGlzOwoJCXZhciBvT3ZlcmZsb3cgPSB0aGlzLl9mbkRUT3ZlcmZsb3coKTsKCQl2YXIgYmxvY2s7CgoJCXRoaXMuZG9tLmJvZHkgPSB0aGlzLnMuZHQublRhYmxlOwoJCXRoaXMuZG9tLmhlYWRlciA9IHRoaXMucy5kdC5uVEhlYWQucGFyZW50Tm9kZTsKCQl0aGlzLmRvbS5oZWFkZXIucGFyZW50Tm9kZS5wYXJlbnROb2RlLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKCgkJdmFyIG5TV3JhcHBlciA9CgkJCSQoJzxkaXYgY2xhc3M9IkRURkNfU2Nyb2xsV3JhcHBlciIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyBjbGVhcjpib3RoOyI+JysKCQkJCSc8ZGl2IGNsYXNzPSJEVEZDX0xlZnRXcmFwcGVyIiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IHRvcDowOyBsZWZ0OjA7IiBhcmlhLWhpZGRlbj0idHJ1ZSI+JysKCQkJCQknPGRpdiBjbGFzcz0iRFRGQ19MZWZ0SGVhZFdyYXBwZXIiIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsgdG9wOjA7IGxlZnQ6MDsgb3ZlcmZsb3c6aGlkZGVuOyI+PC9kaXY+JysKCQkJCQknPGRpdiBjbGFzcz0iRFRGQ19MZWZ0Qm9keVdyYXBwZXIiIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OjA7IG92ZXJmbG93OmhpZGRlbjsiPicrCgkJCQkJCSc8ZGl2IGNsYXNzPSJEVEZDX0xlZnRCb2R5TGluZXIiIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsgdG9wOjA7IGxlZnQ6MDsgb3ZlcmZsb3cteTpzY3JvbGw7Ij48L2Rpdj4nKwoJCQkJCSc8L2Rpdj4nKwoJCQkJCSc8ZGl2IGNsYXNzPSJEVEZDX0xlZnRGb290V3JhcHBlciIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyB0b3A6MDsgbGVmdDowOyBvdmVyZmxvdzpoaWRkZW47Ij48L2Rpdj4nKwoJCQkJJzwvZGl2PicrCgkJCQknPGRpdiBjbGFzcz0iRFRGQ19SaWdodFdyYXBwZXIiIHN0eWxlPSJwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjA7IHJpZ2h0OjA7IiBhcmlhLWhpZGRlbj0idHJ1ZSI+JysKCQkJCQknPGRpdiBjbGFzcz0iRFRGQ19SaWdodEhlYWRXcmFwcGVyIiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7IHRvcDowOyBsZWZ0OjA7Ij4nKwoJCQkJCQknPGRpdiBjbGFzcz0iRFRGQ19SaWdodEhlYWRCbG9ja2VyIERURkNfQmxvY2tlciIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyB0b3A6MDsgYm90dG9tOjA7Ij48L2Rpdj4nKwoJCQkJCSc8L2Rpdj4nKwoJCQkJCSc8ZGl2IGNsYXNzPSJEVEZDX1JpZ2h0Qm9keVdyYXBwZXIiIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsgdG9wOjA7IGxlZnQ6MDsgaGVpZ2h0OjA7IG92ZXJmbG93OmhpZGRlbjsiPicrCgkJCQkJCSc8ZGl2IGNsYXNzPSJEVEZDX1JpZ2h0Qm9keUxpbmVyIiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7IHRvcDowOyBsZWZ0OjA7IG92ZXJmbG93LXk6c2Nyb2xsOyI+PC9kaXY+JysKCQkJCQknPC9kaXY+JysKCQkJCQknPGRpdiBjbGFzcz0iRFRGQ19SaWdodEZvb3RXcmFwcGVyIiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7IHRvcDowOyBsZWZ0OjA7Ij4nKwoJCQkJCQknPGRpdiBjbGFzcz0iRFRGQ19SaWdodEZvb3RCbG9ja2VyIERURkNfQmxvY2tlciIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyB0b3A6MDsgYm90dG9tOjA7Ij48L2Rpdj4nKwoJCQkJCSc8L2Rpdj4nKwoJCQkJJzwvZGl2PicrCgkJCSc8L2Rpdj4nKVswXTsKCQl2YXIgbkxlZnQgPSBuU1dyYXBwZXIuY2hpbGROb2Rlc1swXTsKCQl2YXIgblJpZ2h0ID0gblNXcmFwcGVyLmNoaWxkTm9kZXNbMV07CgoJCXRoaXMuZG9tLmdyaWQuZHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIG5TV3JhcHBlciwgdGhpcy5kb20uZ3JpZC5kdCApOwoJCW5TV3JhcHBlci5hcHBlbmRDaGlsZCggdGhpcy5kb20uZ3JpZC5kdCApOwoKCQl0aGlzLmRvbS5ncmlkLndyYXBwZXIgPSBuU1dyYXBwZXI7CgoJCWlmICggdGhpcy5zLmlMZWZ0Q29sdW1ucyA+IDAgKQoJCXsKCQkJdGhpcy5kb20uZ3JpZC5sZWZ0LndyYXBwZXIgPSBuTGVmdDsKCQkJdGhpcy5kb20uZ3JpZC5sZWZ0LmhlYWQgPSBuTGVmdC5jaGlsZE5vZGVzWzBdOwoJCQl0aGlzLmRvbS5ncmlkLmxlZnQuYm9keSA9IG5MZWZ0LmNoaWxkTm9kZXNbMV07CgkJCXRoaXMuZG9tLmdyaWQubGVmdC5saW5lciA9ICQoJ2Rpdi5EVEZDX0xlZnRCb2R5TGluZXInLCBuU1dyYXBwZXIpWzBdOwoKCQkJblNXcmFwcGVyLmFwcGVuZENoaWxkKCBuTGVmdCApOwoJCX0KCgkJaWYgKCB0aGlzLnMuaVJpZ2h0Q29sdW1ucyA+IDAgKQoJCXsKCQkJdGhpcy5kb20uZ3JpZC5yaWdodC53cmFwcGVyID0gblJpZ2h0OwoJCQl0aGlzLmRvbS5ncmlkLnJpZ2h0LmhlYWQgPSBuUmlnaHQuY2hpbGROb2Rlc1swXTsKCQkJdGhpcy5kb20uZ3JpZC5yaWdodC5ib2R5ID0gblJpZ2h0LmNoaWxkTm9kZXNbMV07CgkJCXRoaXMuZG9tLmdyaWQucmlnaHQubGluZXIgPSAkKCdkaXYuRFRGQ19SaWdodEJvZHlMaW5lcicsIG5TV3JhcHBlcilbMF07CgoJCQluUmlnaHQuc3R5bGUucmlnaHQgPSBvT3ZlcmZsb3cuYmFyKyJweCI7CgoJCQlibG9jayA9ICQoJ2Rpdi5EVEZDX1JpZ2h0SGVhZEJsb2NrZXInLCBuU1dyYXBwZXIpWzBdOwoJCQlibG9jay5zdHlsZS53aWR0aCA9IG9PdmVyZmxvdy5iYXIrInB4IjsKCQkJYmxvY2suc3R5bGUucmlnaHQgPSAtb092ZXJmbG93LmJhcisicHgiOwoJCQl0aGlzLmRvbS5ncmlkLnJpZ2h0LmhlYWRCbG9jayA9IGJsb2NrOwoKCQkJYmxvY2sgPSAkKCdkaXYuRFRGQ19SaWdodEZvb3RCbG9ja2VyJywgblNXcmFwcGVyKVswXTsKCQkJYmxvY2suc3R5bGUud2lkdGggPSBvT3ZlcmZsb3cuYmFyKyJweCI7CgkJCWJsb2NrLnN0eWxlLnJpZ2h0ID0gLW9PdmVyZmxvdy5iYXIrInB4IjsKCQkJdGhpcy5kb20uZ3JpZC5yaWdodC5mb290QmxvY2sgPSBibG9jazsKCgkJCW5TV3JhcHBlci5hcHBlbmRDaGlsZCggblJpZ2h0ICk7CgkJfQoKCQlpZiAoIHRoaXMucy5kdC5uVEZvb3QgKQoJCXsKCQkJdGhpcy5kb20uZm9vdGVyID0gdGhpcy5zLmR0Lm5URm9vdC5wYXJlbnROb2RlOwoJCQlpZiAoIHRoaXMucy5pTGVmdENvbHVtbnMgPiAwICkKCQkJewoJCQkJdGhpcy5kb20uZ3JpZC5sZWZ0LmZvb3QgPSBuTGVmdC5jaGlsZE5vZGVzWzJdOwoJCQl9CgkJCWlmICggdGhpcy5zLmlSaWdodENvbHVtbnMgPiAwICkKCQkJewoJCQkJdGhpcy5kb20uZ3JpZC5yaWdodC5mb290ID0gblJpZ2h0LmNoaWxkTm9kZXNbMl07CgkJCX0KCQl9CgoJCS8vIFJUTCBzdXBwb3J0IC0gc3dhcCB0aGUgcG9zaXRpb24gb2YgdGhlIGxlZnQgYW5kIHJpZ2h0IGNvbHVtbnMgKCM0OCkKCQlpZiAoIHRoaXMucy5ydGwgKSB7CgkJCSQoJ2Rpdi5EVEZDX1JpZ2h0SGVhZEJsb2NrZXInLCBuU1dyYXBwZXIpLmNzcyggewoJCQkJbGVmdDogLW9PdmVyZmxvdy5iYXIrJ3B4JywKCQkJCXJpZ2h0OiAnJwoJCQl9ICk7CgkJfQoJfSwKCgoJLyoqCgkgKiBTdHlsZSBhbmQgcG9zaXRpb24gdGhlIGdyaWQgdXNlZCBmb3IgdGhlIEZpeGVkQ29sdW1ucyBsYXlvdXQKCSAqICBAcmV0dXJucyB7dm9pZH0KCSAqICBAcHJpdmF0ZQoJICovCgkiX2ZuR3JpZExheW91dCI6IGZ1bmN0aW9uICgpCgl7CgkJdmFyIHRoYXQgPSB0aGlzOwoJCXZhciBvR3JpZCA9IHRoaXMuZG9tLmdyaWQ7CgkJdmFyIGlXaWR0aCA9ICQob0dyaWQud3JhcHBlcikud2lkdGgoKTsKCQl2YXIgaUJvZHlIZWlnaHQgPSB0aGlzLnMuZHQublRhYmxlLnBhcmVudE5vZGUub2Zmc2V0SGVpZ2h0OwoJCXZhciBpRnVsbEhlaWdodCA9IHRoaXMucy5kdC5uVGFibGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLm9mZnNldEhlaWdodDsKCQl2YXIgb092ZXJmbG93ID0gdGhpcy5fZm5EVE92ZXJmbG93KCk7CgkJdmFyIGlMZWZ0V2lkdGggPSB0aGlzLnMuaUxlZnRXaWR0aDsKCQl2YXIgaVJpZ2h0V2lkdGggPSB0aGlzLnMuaVJpZ2h0V2lkdGg7CgkJdmFyIHJ0bCA9ICQodGhpcy5kb20uYm9keSkuY3NzKCdkaXJlY3Rpb24nKSA9PT0gJ3J0bCc7CgkJdmFyIHdyYXBwZXI7CgkJdmFyIHNjcm9sbGJhckFkanVzdCA9IGZ1bmN0aW9uICggbm9kZSwgd2lkdGggKSB7CgkJCWlmICggISBvT3ZlcmZsb3cuYmFyICkgewoJCQkJLy8gSWYgdGhlcmUgaXMgbm8gc2Nyb2xsYmFyIChNYWNzKSB3ZSBuZWVkIHRvIGhpZGUgdGhlIGF1dG8gc2Nyb2xsYmFyCgkJCQlub2RlLnN0eWxlLndpZHRoID0gKHdpZHRoKzIwKSsicHgiOwoJCQkJbm9kZS5zdHlsZS5wYWRkaW5nUmlnaHQgPSAiMjBweCI7CgkJCQlub2RlLnN0eWxlLmJveFNpemluZyA9ICJib3JkZXItYm94IjsKCQkJfQoJCQllbHNlIGlmICggdGhhdC5fZmlyZWZveFNjcm9sbEVycm9yKCkgKSB7CgkJCQkvLyBTZWUgdGhlIGFib3ZlIGZ1bmN0aW9uIGZvciB3aHkgdGhpcyBpcyByZXF1aXJlZAoJCQkJaWYgKCAkKG5vZGUpLmhlaWdodCgpID4gMzQgKSB7CgkJCQkJbm9kZS5zdHlsZS53aWR0aCA9ICh3aWR0aCtvT3ZlcmZsb3cuYmFyKSsicHgiOwoJCQkJfQoJCQl9CgkJCWVsc2UgewoJCQkJLy8gT3RoZXJ3aXNlIGp1c3Qgb3ZlcmZsb3cgYnkgdGhlIHNjcm9sbGJhcgoJCQkJbm9kZS5zdHlsZS53aWR0aCA9ICh3aWR0aCtvT3ZlcmZsb3cuYmFyKSsicHgiOwoJCQl9CgkJfTsKCgkJLy8gV2hlbiB4IHNjcm9sbGluZyAtIGRvbid0IHBhaW50IHRoZSBmaXhlZCBjb2x1bW5zIG92ZXIgdGhlIHggc2Nyb2xsYmFyCgkJaWYgKCBvT3ZlcmZsb3cueCApCgkJewoJCQlpQm9keUhlaWdodCAtPSBvT3ZlcmZsb3cuYmFyOwoJCX0KCgkJb0dyaWQud3JhcHBlci5zdHlsZS5oZWlnaHQgPSBpRnVsbEhlaWdodCsicHgiOwoKCQlpZiAoIHRoaXMucy5pTGVmdENvbHVtbnMgPiAwICkKCQl7CgkJCXdyYXBwZXIgPSBvR3JpZC5sZWZ0LndyYXBwZXI7CgkJCXdyYXBwZXIuc3R5bGUud2lkdGggPSBpTGVmdFdpZHRoKydweCc7CgkJCXdyYXBwZXIuc3R5bGUuaGVpZ2h0ID0gJzFweCc7CgoJCQkvLyBTd2FwIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgY29sdW1ucyBmb3IgcnRsICgjNDgpCgkJCS8vIFRoaXMgaXMgYWx3YXlzIHVwIGFnYWluc3QgdGhlIGVkZ2UsIHNjcm9sbGJhciBvbiB0aGUgZmFyIHNpZGUKCQkJaWYgKCBydGwgKSB7CgkJCQl3cmFwcGVyLnN0eWxlLmxlZnQgPSAnJzsKCQkJCXdyYXBwZXIuc3R5bGUucmlnaHQgPSAwOwoJCQl9CgkJCWVsc2UgewoJCQkJd3JhcHBlci5zdHlsZS5sZWZ0ID0gMDsKCQkJCXdyYXBwZXIuc3R5bGUucmlnaHQgPSAnJzsKCQkJfQoKCQkJb0dyaWQubGVmdC5ib2R5LnN0eWxlLmhlaWdodCA9IGlCb2R5SGVpZ2h0KyJweCI7CgkJCWlmICggb0dyaWQubGVmdC5mb290ICkgewoJCQkJb0dyaWQubGVmdC5mb290LnN0eWxlLnRvcCA9IChvT3ZlcmZsb3cueCA/IG9PdmVyZmxvdy5iYXIgOiAwKSsicHgiOyAvLyBzaGlmdCBmb290ZXIgZm9yIHNjcm9sbGJhcgoJCQl9CgoJCQlzY3JvbGxiYXJBZGp1c3QoIG9HcmlkLmxlZnQubGluZXIsIGlMZWZ0V2lkdGggKTsKCQkJb0dyaWQubGVmdC5saW5lci5zdHlsZS5oZWlnaHQgPSBpQm9keUhlaWdodCsicHgiOwoJCQlvR3JpZC5sZWZ0LmxpbmVyLnN0eWxlLm1heEhlaWdodCA9IGlCb2R5SGVpZ2h0KyJweCI7CgkJfQoKCQlpZiAoIHRoaXMucy5pUmlnaHRDb2x1bW5zID4gMCApCgkJewoJCQl3cmFwcGVyID0gb0dyaWQucmlnaHQud3JhcHBlcjsKCQkJd3JhcHBlci5zdHlsZS53aWR0aCA9IGlSaWdodFdpZHRoKydweCc7CgkJCXdyYXBwZXIuc3R5bGUuaGVpZ2h0ID0gJzFweCc7CgoJCQkvLyBOZWVkIHRvIHRha2UgYWNjb3VudCBvZiB0aGUgdmVydGljYWwgc2Nyb2xsYmFyCgkJCWlmICggdGhpcy5zLnJ0bCApIHsKCQkJCXdyYXBwZXIuc3R5bGUubGVmdCA9IG9PdmVyZmxvdy55ID8gb092ZXJmbG93LmJhcisncHgnIDogMDsKCQkJCXdyYXBwZXIuc3R5bGUucmlnaHQgPSAnJzsKCQkJfQoJCQllbHNlIHsKCQkJCXdyYXBwZXIuc3R5bGUubGVmdCA9ICcnOwoJCQkJd3JhcHBlci5zdHlsZS5yaWdodCA9IG9PdmVyZmxvdy55ID8gb092ZXJmbG93LmJhcisncHgnIDogMDsKCQkJfQoKCQkJb0dyaWQucmlnaHQuYm9keS5zdHlsZS5oZWlnaHQgPSBpQm9keUhlaWdodCsicHgiOwoJCQlpZiAoIG9HcmlkLnJpZ2h0LmZvb3QgKSB7CgkJCQlvR3JpZC5yaWdodC5mb290LnN0eWxlLnRvcCA9IChvT3ZlcmZsb3cueCA/IG9PdmVyZmxvdy5iYXIgOiAwKSsicHgiOwoJCQl9CgoJCQlzY3JvbGxiYXJBZGp1c3QoIG9HcmlkLnJpZ2h0LmxpbmVyLCBpUmlnaHRXaWR0aCApOwoJCQlvR3JpZC5yaWdodC5saW5lci5zdHlsZS5oZWlnaHQgPSBpQm9keUhlaWdodCsicHgiOwoJCQlvR3JpZC5yaWdodC5saW5lci5zdHlsZS5tYXhIZWlnaHQgPSBpQm9keUhlaWdodCsicHgiOwoKCQkJb0dyaWQucmlnaHQuaGVhZEJsb2NrLnN0eWxlLmRpc3BsYXkgPSBvT3ZlcmZsb3cueSA/ICdibG9jaycgOiAnbm9uZSc7CgkJCW9HcmlkLnJpZ2h0LmZvb3RCbG9jay5zdHlsZS5kaXNwbGF5ID0gb092ZXJmbG93LnkgPyAnYmxvY2snIDogJ25vbmUnOwoJCX0KCX0sCgoKCS8qKgoJICogR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBEYXRhVGFibGUncyBzY3JvbGxpbmcgc3RhdGUgLSBzcGVjaWZpY2FsbHkgaWYgdGhlIHRhYmxlIGlzIHNjcm9sbGluZwoJICogb24gZWl0aGVyIHRoZSB4IG9yIHkgYXhpcywgYW5kIGFsc28gdGhlIHNjcm9sbGJhciB3aWR0aC4KCSAqICBAcmV0dXJucyB7b2JqZWN0fSBJbmZvcm1hdGlvbiBhYm91dCB0aGUgRGF0YVRhYmxlcyBzY3JvbGxpbmcgc3RhdGUgd2l0aCB0aGUgcHJvcGVydGllczoKCSAqICAgICd4JywgJ3knIGFuZCAnYmFyJwoJICogIEBwcml2YXRlCgkgKi8KCSJfZm5EVE92ZXJmbG93IjogZnVuY3Rpb24gKCkKCXsKCQl2YXIgblRhYmxlID0gdGhpcy5zLmR0Lm5UYWJsZTsKCQl2YXIgblRhYmxlU2Nyb2xsQm9keSA9IG5UYWJsZS5wYXJlbnROb2RlOwoJCXZhciBvdXQgPSB7CgkJCSJ4IjogZmFsc2UsCgkJCSJ5IjogZmFsc2UsCgkJCSJiYXIiOiB0aGlzLnMuZHQub1Njcm9sbC5pQmFyV2lkdGgKCQl9OwoKCQlpZiAoIG5UYWJsZS5vZmZzZXRXaWR0aCA+IG5UYWJsZVNjcm9sbEJvZHkuY2xpZW50V2lkdGggKQoJCXsKCQkJb3V0LnggPSB0cnVlOwoJCX0KCgkJaWYgKCBuVGFibGUub2Zmc2V0SGVpZ2h0ID4gblRhYmxlU2Nyb2xsQm9keS5jbGllbnRIZWlnaHQgKQoJCXsKCQkJb3V0LnkgPSB0cnVlOwoJCX0KCgkJcmV0dXJuIG91dDsKCX0sCgoKCS8qKgoJICogQ2xvbmUgYW5kIHBvc2l0aW9uIHRoZSBmaXhlZCBjb2x1bW5zCgkgKiAgQHJldHVybnMge3ZvaWR9CgkgKiAgQHBhcmFtICAge0Jvb2xlYW59IGJBbGwgSW5kaWNhdGUgaWYgdGhlIGhlYWRlciBhbmQgZm9vdGVyIHNob3VsZCBiZSB1cGRhdGVkIGFzIHdlbGwgKHRydWUpCgkgKiAgQHByaXZhdGUKCSAqLwoJIl9mbkRyYXciOiBmdW5jdGlvbiAoIGJBbGwgKQoJewoJCXRoaXMuX2ZuR3JpZExheW91dCgpOwoJCXRoaXMuX2ZuQ2xvbmVMZWZ0KCBiQWxsICk7CgkJdGhpcy5fZm5DbG9uZVJpZ2h0KCBiQWxsICk7CgoJCS8qIERyYXcgY2FsbGJhY2sgZnVuY3Rpb24gKi8KCQlpZiAoIHRoaXMucy5mbkRyYXdDYWxsYmFjayAhPT0gbnVsbCApCgkJewoJCQl0aGlzLnMuZm5EcmF3Q2FsbGJhY2suY2FsbCggdGhpcywgdGhpcy5kb20uY2xvbmUubGVmdCwgdGhpcy5kb20uY2xvbmUucmlnaHQgKTsKCQl9CgoJCS8qIEV2ZW50IHRyaWdnZXJpbmcgKi8KCQkkKHRoaXMpLnRyaWdnZXIoICdkcmF3LmR0ZmMnLCB7CgkJCSJsZWZ0Q2xvbmUiOiB0aGlzLmRvbS5jbG9uZS5sZWZ0LAoJCQkicmlnaHRDbG9uZSI6IHRoaXMuZG9tLmNsb25lLnJpZ2h0CgkJfSApOwoJfSwKCgoJLyoqCgkgKiBDbG9uZSB0aGUgcmlnaHQgY29sdW1ucwoJICogIEByZXR1cm5zIHt2b2lkfQoJICogIEBwYXJhbSAgIHtCb29sZWFufSBiQWxsIEluZGljYXRlIGlmIHRoZSBoZWFkZXIgYW5kIGZvb3RlciBzaG91bGQgYmUgdXBkYXRlZCBhcyB3ZWxsICh0cnVlKQoJICogIEBwcml2YXRlCgkgKi8KCSJfZm5DbG9uZVJpZ2h0IjogZnVuY3Rpb24gKCBiQWxsICkKCXsKCQlpZiAoIHRoaXMucy5pUmlnaHRDb2x1bW5zIDw9IDAgKSB7CgkJCXJldHVybjsKCQl9CgoJCXZhciB0aGF0ID0gdGhpcywKCQkJaSwganEsCgkJCWFpQ29sdW1ucyA9IFtdOwoKCQlmb3IgKCBpPXRoaXMucy5pVGFibGVDb2x1bW5zLXRoaXMucy5pUmlnaHRDb2x1bW5zIDsgaTx0aGlzLnMuaVRhYmxlQ29sdW1ucyA7IGkrKyApIHsKCQkJaWYgKCB0aGlzLnMuZHQuYW9Db2x1bW5zW2ldLmJWaXNpYmxlICkgewoJCQkJYWlDb2x1bW5zLnB1c2goIGkgKTsKCQkJfQoJCX0KCgkJdGhpcy5fZm5DbG9uZSggdGhpcy5kb20uY2xvbmUucmlnaHQsIHRoaXMuZG9tLmdyaWQucmlnaHQsIGFpQ29sdW1ucywgYkFsbCApOwoJfSwKCgoJLyoqCgkgKiBDbG9uZSB0aGUgbGVmdCBjb2x1bW5zCgkgKiAgQHJldHVybnMge3ZvaWR9CgkgKiAgQHBhcmFtICAge0Jvb2xlYW59IGJBbGwgSW5kaWNhdGUgaWYgdGhlIGhlYWRlciBhbmQgZm9vdGVyIHNob3VsZCBiZSB1cGRhdGVkIGFzIHdlbGwgKHRydWUpCgkgKiAgQHByaXZhdGUKCSAqLwoJIl9mbkNsb25lTGVmdCI6IGZ1bmN0aW9uICggYkFsbCApCgl7CgkJaWYgKCB0aGlzLnMuaUxlZnRDb2x1bW5zIDw9IDAgKSB7CgkJCXJldHVybjsKCQl9CgoJCXZhciB0aGF0ID0gdGhpcywKCQkJaSwganEsCgkJCWFpQ29sdW1ucyA9IFtdOwoKCQlmb3IgKCBpPTAgOyBpPHRoaXMucy5pTGVmdENvbHVtbnMgOyBpKysgKSB7CgkJCWlmICggdGhpcy5zLmR0LmFvQ29sdW1uc1tpXS5iVmlzaWJsZSApIHsKCQkJCWFpQ29sdW1ucy5wdXNoKCBpICk7CgkJCX0KCQl9CgoJCXRoaXMuX2ZuQ2xvbmUoIHRoaXMuZG9tLmNsb25lLmxlZnQsIHRoaXMuZG9tLmdyaWQubGVmdCwgYWlDb2x1bW5zLCBiQWxsICk7Cgl9LAoKCgkvKioKCSAqIE1ha2UgYSBjb3B5IG9mIHRoZSBsYXlvdXQgb2JqZWN0IGZvciBhIGhlYWRlciBvciBmb290ZXIgZWxlbWVudCBmcm9tIERhdGFUYWJsZXMuIE5vdGUgdGhhdAoJICogdGhpcyBtZXRob2Qgd2lsbCBjbG9uZSB0aGUgbm9kZXMgaW4gdGhlIGxheW91dCBvYmplY3QuCgkgKiAgQHJldHVybnMge0FycmF5fSBDb3B5IG9mIHRoZSBsYXlvdXQgYXJyYXkKCSAqICBAcGFyYW0gICB7T2JqZWN0fSBhb09yaWdpbmFsIExheW91dCBhcnJheSBmcm9tIERhdGFUYWJsZXMgKGFvSGVhZGVyIG9yIGFvRm9vdGVyKQoJICogIEBwYXJhbSAgIHtPYmplY3R9IGFpQ29sdW1ucyBDb2x1bW5zIHRvIGNvcHkKCSAqICBAcGFyYW0gICB7Ym9vbGVhbn0gZXZlbnRzIENvcHkgY2VsbCBldmVudHMgb3Igbm90CgkgKiAgQHByaXZhdGUKCSAqLwoJIl9mbkNvcHlMYXlvdXQiOiBmdW5jdGlvbiAoIGFvT3JpZ2luYWwsIGFpQ29sdW1ucywgZXZlbnRzICkKCXsKCQl2YXIgYVJldHVybiA9IFtdOwoJCXZhciBhQ2xvbmVzID0gW107CgkJdmFyIGFDbG9uZWQgPSBbXTsKCgkJZm9yICggdmFyIGk9MCwgaUxlbj1hb09yaWdpbmFsLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJewoJCQl2YXIgYVJvdyA9IFtdOwoJCQlhUm93Lm5UciA9ICQoYW9PcmlnaW5hbFtpXS5uVHIpLmNsb25lKGV2ZW50cywgZmFsc2UpWzBdOwoKCQkJZm9yICggdmFyIGo9MCwgakxlbj10aGlzLnMuaVRhYmxlQ29sdW1ucyA7IGo8akxlbiA7IGorKyApCgkJCXsKCQkJCWlmICggJC5pbkFycmF5KCBqLCBhaUNvbHVtbnMgKSA9PT0gLTEgKQoJCQkJewoJCQkJCWNvbnRpbnVlOwoJCQkJfQoKCQkJCXZhciBpQ2xvbmVkID0gJC5pbkFycmF5KCBhb09yaWdpbmFsW2ldW2pdLmNlbGwsIGFDbG9uZWQgKTsKCQkJCWlmICggaUNsb25lZCA9PT0gLTEgKQoJCQkJewoJCQkJCXZhciBuQ2xvbmUgPSAkKGFvT3JpZ2luYWxbaV1bal0uY2VsbCkuY2xvbmUoZXZlbnRzLCBmYWxzZSlbMF07CgkJCQkJYUNsb25lcy5wdXNoKCBuQ2xvbmUgKTsKCQkJCQlhQ2xvbmVkLnB1c2goIGFvT3JpZ2luYWxbaV1bal0uY2VsbCApOwoKCQkJCQlhUm93LnB1c2goIHsKCQkJCQkJImNlbGwiOiBuQ2xvbmUsCgkJCQkJCSJ1bmlxdWUiOiBhb09yaWdpbmFsW2ldW2pdLnVuaXF1ZQoJCQkJCX0gKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlhUm93LnB1c2goIHsKCQkJCQkJImNlbGwiOiBhQ2xvbmVzWyBpQ2xvbmVkIF0sCgkJCQkJCSJ1bmlxdWUiOiBhb09yaWdpbmFsW2ldW2pdLnVuaXF1ZQoJCQkJCX0gKTsKCQkJCX0KCQkJfQoKCQkJYVJldHVybi5wdXNoKCBhUm93ICk7CgkJfQoKCQlyZXR1cm4gYVJldHVybjsKCX0sCgoKCS8qKgoJICogQ2xvbmUgdGhlIERhdGFUYWJsZSBub2RlcyBhbmQgcGxhY2UgdGhlbSBpbiB0aGUgRE9NIChzaXplZCBjb3JyZWN0bHkpCgkgKiAgQHJldHVybnMge3ZvaWR9CgkgKiAgQHBhcmFtICAge09iamVjdH0gb0Nsb25lIE9iamVjdCBjb250YWluaW5nIHRoZSBoZWFkZXIsIGZvb3RlciBhbmQgYm9keSBjbG9uZWQgRE9NIGVsZW1lbnRzCgkgKiAgQHBhcmFtICAge09iamVjdH0gb0dyaWQgR3JpZCBvYmplY3QgY29udGFpbmluZyB0aGUgZGlzcGxheSBncmlkIGVsZW1lbnRzIGZvciB0aGUgY2xvbmVkCgkgKiAgICAgICAgICAgICAgICAgICAgY29sdW1uIChsZWZ0IG9yIHJpZ2h0KQoJICogIEBwYXJhbSAgIHtBcnJheX0gYWlDb2x1bW5zIENvbHVtbiBpbmRleGVzIHdoaWNoIHNob3VsZCBiZSBvcGVyYXRlZCBvbiBmcm9tIHRoZSBEYXRhVGFibGUKCSAqICBAcGFyYW0gICB7Qm9vbGVhbn0gYkFsbCBJbmRpY2F0ZSBpZiB0aGUgaGVhZGVyIGFuZCBmb290ZXIgc2hvdWxkIGJlIHVwZGF0ZWQgYXMgd2VsbCAodHJ1ZSkKCSAqICBAcHJpdmF0ZQoJICovCgkiX2ZuQ2xvbmUiOiBmdW5jdGlvbiAoIG9DbG9uZSwgb0dyaWQsIGFpQ29sdW1ucywgYkFsbCApCgl7CgkJdmFyIHRoYXQgPSB0aGlzLAoJCQlpLCBpTGVuLCBqLCBqTGVuLCBqcSwgblRhcmdldCwgaUNvbHVtbiwgbkNsb25lLCBpSW5kZXgsIGFvQ2xvbmVMYXlvdXQsCgkJCWpxQ2xvbmVUaGVhZCwgYW9GaXhlZEhlYWRlciwKCQkJZHQgPSB0aGlzLnMuZHQ7CgoJCS8qCgkJICogSGVhZGVyCgkJICovCgkJaWYgKCBiQWxsICkKCQl7CgkJCSQob0Nsb25lLmhlYWRlcikucmVtb3ZlKCk7CgoJCQlvQ2xvbmUuaGVhZGVyID0gJCh0aGlzLmRvbS5oZWFkZXIpLmNsb25lKHRydWUsIGZhbHNlKVswXTsKCQkJb0Nsb25lLmhlYWRlci5jbGFzc05hbWUgKz0gIiBEVEZDX0Nsb25lZCI7CgkJCW9DbG9uZS5oZWFkZXIuc3R5bGUud2lkdGggPSAiMTAwJSI7CgkJCW9HcmlkLmhlYWQuYXBwZW5kQ2hpbGQoIG9DbG9uZS5oZWFkZXIgKTsKCgkJCS8qIENvcHkgdGhlIERhdGFUYWJsZXMgbGF5b3V0IGNhY2hlIGZvciB0aGUgaGVhZGVyIGZvciBvdXIgZmxvYXRpbmcgY29sdW1uICovCgkJCWFvQ2xvbmVMYXlvdXQgPSB0aGlzLl9mbkNvcHlMYXlvdXQoIGR0LmFvSGVhZGVyLCBhaUNvbHVtbnMsIHRydWUgKTsKCQkJanFDbG9uZVRoZWFkID0gJCgnPnRoZWFkJywgb0Nsb25lLmhlYWRlcik7CgkJCWpxQ2xvbmVUaGVhZC5lbXB0eSgpOwoKCQkJLyogQWRkIHRoZSBjcmVhdGVkIGNsb25lZCBUUiBlbGVtZW50cyB0byB0aGUgdGFibGUgKi8KCQkJZm9yICggaT0wLCBpTGVuPWFvQ2xvbmVMYXlvdXQubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJewoJCQkJanFDbG9uZVRoZWFkWzBdLmFwcGVuZENoaWxkKCBhb0Nsb25lTGF5b3V0W2ldLm5UciApOwoJCQl9CgoJCQkvKiBVc2UgdGhlIGhhbmR5IF9mbkRyYXdIZWFkIGZ1bmN0aW9uIGluIERhdGFUYWJsZXMgdG8gZG8gdGhlIHJvd3NwYW4vY29sc3BhbgoJCQkgKiBjYWxjdWxhdGlvbnMgZm9yIHVzCgkJCSAqLwoJCQlkdC5vQXBpLl9mbkRyYXdIZWFkKCBkdCwgYW9DbG9uZUxheW91dCwgdHJ1ZSApOwoJCX0KCQllbHNlCgkJewoJCQkvKiBUbyBlbnN1cmUgdGhhdCB3ZSBjb3B5IGNlbGwgY2xhc3NlcyBleGFjdGx5LCByZWdhcmRsZXNzIG9mIGNvbHNwYW4sIG11bHRpcGxlIHJvd3MKCQkJICogZXRjLCB3ZSBtYWtlIGEgY29weSBvZiB0aGUgaGVhZGVyIGZyb20gdGhlIERhdGFUYWJsZSBhZ2FpbiwgYnV0IGRvbid0IGluc2VydCB0aGUKCQkJICogY2xvbmVkIGNlbGxzLCBqdXN0IGNvcHkgdGhlIGNsYXNzZXMgYWNyb3NzLiBUbyBnZXQgdGhlIG1hdGNoaW5nIGxheW91dCBmb3IgdGhlCgkJCSAqIGZpeGVkIGNvbXBvbmVudCwgd2UgdXNlIHRoZSBEYXRhVGFibGVzIF9mbkRldGVjdEhlYWRlciBtZXRob2QsIGFsbG93aW5nIDE6MSBtYXBwaW5nCgkJCSAqLwoJCQlhb0Nsb25lTGF5b3V0ID0gdGhpcy5fZm5Db3B5TGF5b3V0KCBkdC5hb0hlYWRlciwgYWlDb2x1bW5zLCBmYWxzZSApOwoJCQlhb0ZpeGVkSGVhZGVyPVtdOwoKCQkJZHQub0FwaS5fZm5EZXRlY3RIZWFkZXIoIGFvRml4ZWRIZWFkZXIsICQoJz50aGVhZCcsIG9DbG9uZS5oZWFkZXIpWzBdICk7CgoJCQlmb3IgKCBpPTAsIGlMZW49YW9DbG9uZUxheW91dC5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlmb3IgKCBqPTAsIGpMZW49YW9DbG9uZUxheW91dFtpXS5sZW5ndGggOyBqPGpMZW4gOyBqKysgKQoJCQkJewoJCQkJCWFvRml4ZWRIZWFkZXJbaV1bal0uY2VsbC5jbGFzc05hbWUgPSBhb0Nsb25lTGF5b3V0W2ldW2pdLmNlbGwuY2xhc3NOYW1lOwoKCQkJCQkvLyBJZiBqUXVlcnkgVUkgdGhlbWluZyBpcyB1c2VkIHdlIG5lZWQgdG8gY29weSB0aG9zZSBlbGVtZW50cyBhcyB3ZWxsCgkJCQkJJCgnc3Bhbi5EYXRhVGFibGVzX3NvcnRfaWNvbicsIGFvRml4ZWRIZWFkZXJbaV1bal0uY2VsbCkuZWFjaCggZnVuY3Rpb24gKCkgewoJCQkJCQl0aGlzLmNsYXNzTmFtZSA9ICQoJ3NwYW4uRGF0YVRhYmxlc19zb3J0X2ljb24nLCBhb0Nsb25lTGF5b3V0W2ldW2pdLmNlbGwpWzBdLmNsYXNzTmFtZTsKCQkJCQl9ICk7CgkJCQl9CgkJCX0KCQl9CgkJdGhpcy5fZm5FcXVhbGlzZUhlaWdodHMoICd0aGVhZCcsIHRoaXMuZG9tLmhlYWRlciwgb0Nsb25lLmhlYWRlciApOwoKCQkvKgoJCSAqIEJvZHkKCQkgKi8KCQlpZiAoIHRoaXMucy5zSGVpZ2h0TWF0Y2ggPT0gJ2F1dG8nICkKCQl7CgkJCS8qIFJlbW92ZSBhbnkgaGVpZ2h0cyB3aGljaCBoYXZlIGJlZW4gYXBwbGllZCBhbHJlYWR5IGFuZCBsZXQgdGhlIGJyb3dzZXIgZmlndXJlIGl0IG91dCAqLwoJCQkkKCc+dGJvZHk+dHInLCB0aGF0LmRvbS5ib2R5KS5jc3MoJ2hlaWdodCcsICdhdXRvJyk7CgkJfQoKCQlpZiAoIG9DbG9uZS5ib2R5ICE9PSBudWxsICkKCQl7CgkJCSQob0Nsb25lLmJvZHkpLnJlbW92ZSgpOwoJCQlvQ2xvbmUuYm9keSA9IG51bGw7CgkJfQoKCQlvQ2xvbmUuYm9keSA9ICQodGhpcy5kb20uYm9keSkuY2xvbmUodHJ1ZSlbMF07CgkJb0Nsb25lLmJvZHkuY2xhc3NOYW1lICs9ICIgRFRGQ19DbG9uZWQiOwoJCW9DbG9uZS5ib2R5LnN0eWxlLnBhZGRpbmdCb3R0b20gPSBkdC5vU2Nyb2xsLmlCYXJXaWR0aCsicHgiOwoJCW9DbG9uZS5ib2R5LnN0eWxlLm1hcmdpbkJvdHRvbSA9IChkdC5vU2Nyb2xsLmlCYXJXaWR0aCoyKSsicHgiOyAvKiBGb3IgSUUgKi8KCQlpZiAoIG9DbG9uZS5ib2R5LmdldEF0dHJpYnV0ZSgnaWQnKSAhPT0gbnVsbCApCgkJewoJCQlvQ2xvbmUuYm9keS5yZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7CgkJfQoKCQkkKCc+dGhlYWQ+dHInLCBvQ2xvbmUuYm9keSkuZW1wdHkoKTsKCQkkKCc+dGZvb3QnLCBvQ2xvbmUuYm9keSkucmVtb3ZlKCk7CgoJCXZhciBuQm9keSA9ICQoJ3Rib2R5Jywgb0Nsb25lLmJvZHkpWzBdOwoJCSQobkJvZHkpLmVtcHR5KCk7CgkJaWYgKCBkdC5haURpc3BsYXkubGVuZ3RoID4gMCApCgkJewoJCQkvKiBDb3B5IHRoZSBEYXRhVGFibGVzJyBoZWFkZXIgZWxlbWVudHMgdG8gZm9yY2UgdGhlIGNvbHVtbiB3aWR0aCBpbiBleGFjdGx5IHRoZQoJCQkgKiBzYW1lIHdheSB0aGF0IERhdGFUYWJsZXMgZG9lcyBpdCAtIGhhdmUgdGhlIGhlYWRlciBlbGVtZW50LCBhcHBseSB0aGUgd2lkdGggYW5kCgkJCSAqIGNvbGFwc2UgaXQgZG93bgoJCQkgKi8KCQkJdmFyIG5Jbm5lclRoZWFkID0gJCgnPnRoZWFkPnRyJywgb0Nsb25lLmJvZHkpWzBdOwoJCQlmb3IgKCBpSW5kZXg9MCA7IGlJbmRleDxhaUNvbHVtbnMubGVuZ3RoIDsgaUluZGV4KysgKQoJCQl7CgkJCQlpQ29sdW1uID0gYWlDb2x1bW5zW2lJbmRleF07CgoJCQkJbkNsb25lID0gJChkdC5hb0NvbHVtbnNbaUNvbHVtbl0ublRoKS5jbG9uZSh0cnVlKVswXTsKCQkJCW5DbG9uZS5pbm5lckhUTUwgPSAiIjsKCgkJCQl2YXIgb1N0eWxlID0gbkNsb25lLnN0eWxlOwoJCQkJb1N0eWxlLnBhZGRpbmdUb3AgPSAiMCI7CgkJCQlvU3R5bGUucGFkZGluZ0JvdHRvbSA9ICIwIjsKCQkJCW9TdHlsZS5ib3JkZXJUb3BXaWR0aCA9ICIwIjsKCQkJCW9TdHlsZS5ib3JkZXJCb3R0b21XaWR0aCA9ICIwIjsKCQkJCW9TdHlsZS5oZWlnaHQgPSAwOwoJCQkJb1N0eWxlLndpZHRoID0gdGhhdC5zLmFpSW5uZXJXaWR0aHNbaUNvbHVtbl0rInB4IjsKCgkJCQluSW5uZXJUaGVhZC5hcHBlbmRDaGlsZCggbkNsb25lICk7CgkJCX0KCgkJCS8qIEFkZCBpbiB0aGUgdGJvZHkgZWxlbWVudHMsIGNsb25pbmcgZm9ybSB0aGUgbWFzdGVyIHRhYmxlICovCgkJCSQoJz50Ym9keT50cicsIHRoYXQuZG9tLmJvZHkpLmVhY2goIGZ1bmN0aW9uICh6KSB7CgkJCQl2YXIgaSA9IHRoYXQucy5kdC5vRmVhdHVyZXMuYlNlcnZlclNpZGU9PT1mYWxzZSA/CgkJCQkJdGhhdC5zLmR0LmFpRGlzcGxheVsgdGhhdC5zLmR0Ll9pRGlzcGxheVN0YXJ0K3ogXSA6IHo7CgkJCQl2YXIgYVRkcyA9IHRoYXQucy5kdC5hb0RhdGFbIGkgXS5hbkNlbGxzIHx8ICQodGhpcykuY2hpbGRyZW4oJ3RkLCB0aCcpOwoKCQkJCXZhciBuID0gdGhpcy5jbG9uZU5vZGUoZmFsc2UpOwoJCQkJbi5yZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7CgkJCQluLnNldEF0dHJpYnV0ZSggJ2RhdGEtZHQtcm93JywgaSApOwoKCQkJCWZvciAoIGlJbmRleD0wIDsgaUluZGV4PGFpQ29sdW1ucy5sZW5ndGggOyBpSW5kZXgrKyApCgkJCQl7CgkJCQkJaUNvbHVtbiA9IGFpQ29sdW1uc1tpSW5kZXhdOwoKCQkJCQlpZiAoIGFUZHMubGVuZ3RoID4gMCApCgkJCQkJewoJCQkJCQluQ2xvbmUgPSAkKCBhVGRzW2lDb2x1bW5dICkuY2xvbmUodHJ1ZSwgdHJ1ZSlbMF07CgkJCQkJCW5DbG9uZS5yZW1vdmVBdHRyaWJ1dGUoICdpZCcgKTsKCQkJCQkJbkNsb25lLnNldEF0dHJpYnV0ZSggJ2RhdGEtZHQtcm93JywgaSApOwoJCQkJCQluQ2xvbmUuc2V0QXR0cmlidXRlKCAnZGF0YS1kdC1jb2x1bW4nLCBpQ29sdW1uICk7CgkJCQkJCW4uYXBwZW5kQ2hpbGQoIG5DbG9uZSApOwoJCQkJCX0KCQkJCX0KCQkJCW5Cb2R5LmFwcGVuZENoaWxkKCBuICk7CgkJCX0gKTsKCQl9CgkJZWxzZQoJCXsKCQkJJCgnPnRib2R5PnRyJywgdGhhdC5kb20uYm9keSkuZWFjaCggZnVuY3Rpb24gKHopIHsKCQkJCW5DbG9uZSA9IHRoaXMuY2xvbmVOb2RlKHRydWUpOwoJCQkJbkNsb25lLmNsYXNzTmFtZSArPSAnIERURkNfTm9EYXRhJzsKCQkJCSQoJ3RkJywgbkNsb25lKS5odG1sKCcnKTsKCQkJCW5Cb2R5LmFwcGVuZENoaWxkKCBuQ2xvbmUgKTsKCQkJfSApOwoJCX0KCgkJb0Nsb25lLmJvZHkuc3R5bGUud2lkdGggPSAiMTAwJSI7CgkJb0Nsb25lLmJvZHkuc3R5bGUubWFyZ2luID0gIjAiOwoJCW9DbG9uZS5ib2R5LnN0eWxlLnBhZGRpbmcgPSAiMCI7CgoJCS8vIEludGVyb3Agd2l0aCBTY3JvbGxlciAtIG5lZWQgdG8gdXNlIGEgaGVpZ2h0IGZvcmNpbmcgZWxlbWVudCBpbiB0aGUKCQkvLyBzY3JvbGxpbmcgYXJlYSBpbiB0aGUgc2FtZSB3YXkgdGhhdCBTY3JvbGxlciBkb2VzIGluIHRoZSBib2R5IHNjcm9sbC4KCQlpZiAoIGR0Lm9TY3JvbGxlciAhPT0gdW5kZWZpbmVkICkKCQl7CgkJCXZhciBzY3JvbGxlckZvcmNlciA9IGR0Lm9TY3JvbGxlci5kb20uZm9yY2U7CgoJCQlpZiAoICEgb0dyaWQuZm9yY2VyICkgewoJCQkJb0dyaWQuZm9yY2VyID0gc2Nyb2xsZXJGb3JjZXIuY2xvbmVOb2RlKCB0cnVlICk7CgkJCQlvR3JpZC5saW5lci5hcHBlbmRDaGlsZCggb0dyaWQuZm9yY2VyICk7CgkJCX0KCQkJZWxzZSB7CgkJCQlvR3JpZC5mb3JjZXIuc3R5bGUuaGVpZ2h0ID0gc2Nyb2xsZXJGb3JjZXIuc3R5bGUuaGVpZ2h0OwoJCQl9CgkJfQoKCQlvR3JpZC5saW5lci5hcHBlbmRDaGlsZCggb0Nsb25lLmJvZHkgKTsKCgkJdGhpcy5fZm5FcXVhbGlzZUhlaWdodHMoICd0Ym9keScsIHRoYXQuZG9tLmJvZHksIG9DbG9uZS5ib2R5ICk7CgoJCS8qCgkJICogRm9vdGVyCgkJICovCgkJaWYgKCBkdC5uVEZvb3QgIT09IG51bGwgKQoJCXsKCQkJaWYgKCBiQWxsICkKCQkJewoJCQkJaWYgKCBvQ2xvbmUuZm9vdGVyICE9PSBudWxsICkKCQkJCXsKCQkJCQlvQ2xvbmUuZm9vdGVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG9DbG9uZS5mb290ZXIgKTsKCQkJCX0KCQkJCW9DbG9uZS5mb290ZXIgPSAkKHRoaXMuZG9tLmZvb3RlcikuY2xvbmUodHJ1ZSwgdHJ1ZSlbMF07CgkJCQlvQ2xvbmUuZm9vdGVyLmNsYXNzTmFtZSArPSAiIERURkNfQ2xvbmVkIjsKCQkJCW9DbG9uZS5mb290ZXIuc3R5bGUud2lkdGggPSAiMTAwJSI7CgkJCQlvR3JpZC5mb290LmFwcGVuZENoaWxkKCBvQ2xvbmUuZm9vdGVyICk7CgoJCQkJLyogQ29weSB0aGUgZm9vdGVyIGp1c3QgbGlrZSB3ZSBkbyBmb3IgdGhlIGhlYWRlciAqLwoJCQkJYW9DbG9uZUxheW91dCA9IHRoaXMuX2ZuQ29weUxheW91dCggZHQuYW9Gb290ZXIsIGFpQ29sdW1ucywgdHJ1ZSApOwoJCQkJdmFyIGpxQ2xvbmVUZm9vdCA9ICQoJz50Zm9vdCcsIG9DbG9uZS5mb290ZXIpOwoJCQkJanFDbG9uZVRmb290LmVtcHR5KCk7CgoJCQkJZm9yICggaT0wLCBpTGVuPWFvQ2xvbmVMYXlvdXQubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJCXsKCQkJCQlqcUNsb25lVGZvb3RbMF0uYXBwZW5kQ2hpbGQoIGFvQ2xvbmVMYXlvdXRbaV0ublRyICk7CgkJCQl9CgkJCQlkdC5vQXBpLl9mbkRyYXdIZWFkKCBkdCwgYW9DbG9uZUxheW91dCwgdHJ1ZSApOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJYW9DbG9uZUxheW91dCA9IHRoaXMuX2ZuQ29weUxheW91dCggZHQuYW9Gb290ZXIsIGFpQ29sdW1ucywgZmFsc2UgKTsKCQkJCXZhciBhb0N1cnJGb290ZXI9W107CgoJCQkJZHQub0FwaS5fZm5EZXRlY3RIZWFkZXIoIGFvQ3VyckZvb3RlciwgJCgnPnRmb290Jywgb0Nsb25lLmZvb3RlcilbMF0gKTsKCgkJCQlmb3IgKCBpPTAsIGlMZW49YW9DbG9uZUxheW91dC5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQkJewoJCQkJCWZvciAoIGo9MCwgakxlbj1hb0Nsb25lTGF5b3V0W2ldLmxlbmd0aCA7IGo8akxlbiA7IGorKyApCgkJCQkJewoJCQkJCQlhb0N1cnJGb290ZXJbaV1bal0uY2VsbC5jbGFzc05hbWUgPSBhb0Nsb25lTGF5b3V0W2ldW2pdLmNlbGwuY2xhc3NOYW1lOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQl0aGlzLl9mbkVxdWFsaXNlSGVpZ2h0cyggJ3Rmb290JywgdGhpcy5kb20uZm9vdGVyLCBvQ2xvbmUuZm9vdGVyICk7CgkJfQoKCQkvKiBFcXVhbGlzZSB0aGUgY29sdW1uIHdpZHRocyBiZXR3ZWVuIHRoZSBoZWFkZXIgZm9vdGVyIGFuZCBib2R5IC0gYm9keSBnZXQncyBwcmlvcml0eSAqLwoJCXZhciBhblVuaXF1ZSA9IGR0Lm9BcGkuX2ZuR2V0VW5pcXVlVGhzKCBkdCwgJCgnPnRoZWFkJywgb0Nsb25lLmhlYWRlcilbMF0gKTsKCQkkKGFuVW5pcXVlKS5lYWNoKCBmdW5jdGlvbiAoaSkgewoJCQlpQ29sdW1uID0gYWlDb2x1bW5zW2ldOwoJCQl0aGlzLnN0eWxlLndpZHRoID0gdGhhdC5zLmFpSW5uZXJXaWR0aHNbaUNvbHVtbl0rInB4IjsKCQl9ICk7CgoJCWlmICggdGhhdC5zLmR0Lm5URm9vdCAhPT0gbnVsbCApCgkJewoJCQlhblVuaXF1ZSA9IGR0Lm9BcGkuX2ZuR2V0VW5pcXVlVGhzKCBkdCwgJCgnPnRmb290Jywgb0Nsb25lLmZvb3RlcilbMF0gKTsKCQkJJChhblVuaXF1ZSkuZWFjaCggZnVuY3Rpb24gKGkpIHsKCQkJCWlDb2x1bW4gPSBhaUNvbHVtbnNbaV07CgkJCQl0aGlzLnN0eWxlLndpZHRoID0gdGhhdC5zLmFpSW5uZXJXaWR0aHNbaUNvbHVtbl0rInB4IjsKCQkJfSApOwoJCX0KCX0sCgoKCS8qKgoJICogRnJvbSBhIGdpdmVuIHRhYmxlIG5vZGUgKFRIRUFEIGV0YyksIGdldCBhIGxpc3Qgb2YgVFIgZGlyZWN0IGNoaWxkIGVsZW1lbnRzCgkgKiAgQHBhcmFtICAge05vZGV9IG5JbiBUYWJsZSBlbGVtZW50IHRvIHNlYXJjaCBmb3IgVFIgZWxlbWVudHMgKFRIRUFELCBUQk9EWSBvciBURk9PVCBlbGVtZW50KQoJICogIEByZXR1cm5zIHtBcnJheX0gTGlzdCBvZiBUUiBlbGVtZW50cyBmb3VuZAoJICogIEBwcml2YXRlCgkgKi8KCSJfZm5HZXRUck5vZGVzIjogZnVuY3Rpb24gKCBuSW4gKQoJewoJCXZhciBhT3V0ID0gW107CgkJZm9yICggdmFyIGk9MCwgaUxlbj1uSW4uY2hpbGROb2Rlcy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCXsKCQkJaWYgKCBuSW4uY2hpbGROb2Rlc1tpXS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpID09ICJUUiIgKQoJCQl7CgkJCQlhT3V0LnB1c2goIG5Jbi5jaGlsZE5vZGVzW2ldICk7CgkJCX0KCQl9CgkJcmV0dXJuIGFPdXQ7Cgl9LAoKCgkvKioKCSAqIEVxdWFsaXNlIHRoZSBoZWlnaHRzIG9mIHRoZSByb3dzIGluIGEgZ2l2ZW4gdGFibGUgbm9kZSBpbiBhIGNyb3NzIGJyb3dzZXIgd2F5CgkgKiAgQHJldHVybnMge3ZvaWR9CgkgKiAgQHBhcmFtICAge1N0cmluZ30gbm9kZU5hbWUgTm9kZSB0eXBlIC0gdGhlYWQsIHRib2R5IG9yIHRmb290CgkgKiAgQHBhcmFtICAge05vZGV9IG9yaWdpbmFsIE9yaWdpbmFsIG5vZGUgdG8gdGFrZSB0aGUgaGVpZ2h0cyBmcm9tCgkgKiAgQHBhcmFtICAge05vZGV9IGNsb25lIENvcHkgdGhlIGhlaWdodHMgdG8KCSAqICBAcHJpdmF0ZQoJICovCgkiX2ZuRXF1YWxpc2VIZWlnaHRzIjogZnVuY3Rpb24gKCBub2RlTmFtZSwgb3JpZ2luYWwsIGNsb25lICkKCXsKCQlpZiAoIHRoaXMucy5zSGVpZ2h0TWF0Y2ggPT0gJ25vbmUnICYmIG5vZGVOYW1lICE9PSAndGhlYWQnICYmIG5vZGVOYW1lICE9PSAndGZvb3QnICkKCQl7CgkJCXJldHVybjsKCQl9CgoJCXZhciB0aGF0ID0gdGhpcywKCQkJaSwgaUxlbiwgaUhlaWdodCwgaUhlaWdodDIsIGlIZWlnaHRPcmlnaW5hbCwgaUhlaWdodENsb25lLAoJCQlyb290T3JpZ2luYWwgPSBvcmlnaW5hbC5nZXRFbGVtZW50c0J5VGFnTmFtZShub2RlTmFtZSlbMF0sCgkJCXJvb3RDbG9uZSAgICA9IGNsb25lLmdldEVsZW1lbnRzQnlUYWdOYW1lKG5vZGVOYW1lKVswXSwKCQkJanFCb3hIYWNrICAgID0gJCgnPicrbm9kZU5hbWUrJz50cjplcSgwKScsIG9yaWdpbmFsKS5jaGlsZHJlbignOmZpcnN0JyksCgkJCWlCb3hIYWNrICAgICA9IGpxQm94SGFjay5vdXRlckhlaWdodCgpIC0ganFCb3hIYWNrLmhlaWdodCgpLAoJCQlhbk9yaWdpbmFsICAgPSB0aGlzLl9mbkdldFRyTm9kZXMoIHJvb3RPcmlnaW5hbCApLAoJCQlhbkNsb25lICAgICAgPSB0aGlzLl9mbkdldFRyTm9kZXMoIHJvb3RDbG9uZSApLAoJCQloZWlnaHRzICAgICAgPSBbXTsKCgkJZm9yICggaT0wLCBpTGVuPWFuQ2xvbmUubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQl7CgkJCWlIZWlnaHRPcmlnaW5hbCA9IGFuT3JpZ2luYWxbaV0ub2Zmc2V0SGVpZ2h0OwoJCQlpSGVpZ2h0Q2xvbmUgPSBhbkNsb25lW2ldLm9mZnNldEhlaWdodDsKCQkJaUhlaWdodCA9IGlIZWlnaHRDbG9uZSA+IGlIZWlnaHRPcmlnaW5hbCA/IGlIZWlnaHRDbG9uZSA6IGlIZWlnaHRPcmlnaW5hbDsKCgkJCWlmICggdGhpcy5zLnNIZWlnaHRNYXRjaCA9PSAnc2VtaWF1dG8nICkKCQkJewoJCQkJYW5PcmlnaW5hbFtpXS5fRFRUQ19pSGVpZ2h0ID0gaUhlaWdodDsKCQkJfQoKCQkJaGVpZ2h0cy5wdXNoKCBpSGVpZ2h0ICk7CgkJfQoKCQlmb3IgKCBpPTAsIGlMZW49YW5DbG9uZS5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCXsKCQkJYW5DbG9uZVtpXS5zdHlsZS5oZWlnaHQgPSBoZWlnaHRzW2ldKyJweCI7CgkJCWFuT3JpZ2luYWxbaV0uc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0c1tpXSsicHgiOwoJCX0KCX0sCgoJLyoqCgkgKiBEZXRlcm1pbmUgaWYgdGhlIFVBIHN1ZmZlcnMgZnJvbSBGaXJlZm94J3Mgb3ZlcmZsb3c6c2Nyb2xsIHNjcm9sbGJhcnMKCSAqIG5vdCBiZWluZyBzaG93biBidWcuCgkgKgoJICogRmlyZWZveCBkb2Vzbid0IGRyYXcgc2Nyb2xsYmFycywgZXZlbiBpZiBpdCBpcyB0b2xkIHRvIHVzaW5nCgkgKiBvdmVyZmxvdzpzY3JvbGwsIGlmIHRoZSBkaXYgaXMgbGVzcyB0aGFuIDM0cHggaGVpZ2h0LiBTZWUgYnVncyAyOTIyODQgYW5kCgkgKiA3ODE4ODUuIFVzaW5nIFVBIGRldGVjdGlvbiBoZXJlIHNpbmNlIHRoaXMgaXMgcGFydGljdWxhcmx5IGhhcmQgdG8gZGV0ZWN0CgkgKiB1c2luZyBvYmplY3RzIC0gaXRzIGEgc3RyYWlnaHQgdXAgcmVuZGVyaW5nIGVycm9yIGluIEZpcmVmb3guCgkgKgoJICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBGaXJlZm94IGVycm9yIGlzIHByZXNlbnQsIGZhbHNlIG90aGVyd2lzZQoJICovCglfZmlyZWZveFNjcm9sbEVycm9yOiBmdW5jdGlvbiAoKSB7CgkJaWYgKCBfZmlyZWZveFNjcm9sbCA9PT0gdW5kZWZpbmVkICkgewoJCQl2YXIgdGVzdCA9ICQoJzxkaXYvPicpCgkJCQkuY3NzKCB7CgkJCQkJcG9zaXRpb246ICdhYnNvbHV0ZScsCgkJCQkJdG9wOiAwLAoJCQkJCWxlZnQ6IDAsCgkJCQkJaGVpZ2h0OiAxMCwKCQkJCQl3aWR0aDogNTAsCgkJCQkJb3ZlcmZsb3c6ICdzY3JvbGwnCgkJCQl9ICkKCQkJCS5hcHBlbmRUbyggJ2JvZHknICk7CgoJCQkvLyBNYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGFwcGx5IG9uIE1hY3Mgd2l0aCAwIHdpZHRoIHNjcm9sbGJhcnMKCQkJX2ZpcmVmb3hTY3JvbGwgPSAoCgkJCQl0ZXN0WzBdLmNsaWVudFdpZHRoID09PSB0ZXN0WzBdLm9mZnNldFdpZHRoICYmIHRoaXMuX2ZuRFRPdmVyZmxvdygpLmJhciAhPT0gMAoJCQkpOwoKCQkJdGVzdC5yZW1vdmUoKTsKCQl9CgoJCXJldHVybiBfZmlyZWZveFNjcm9sbDsKCX0KfSApOwoKCgovKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKICogU3RhdGljcwogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCgovKioKICogRml4ZWRDb2x1bW5zIGRlZmF1bHQgc2V0dGluZ3MgZm9yIGluaXRpYWxpc2F0aW9uCiAqICBAbmFtZSBGaXhlZENvbHVtbnMuZGVmYXVsdHMKICogIEBuYW1lc3BhY2UKICogIEBzdGF0aWMKICovCkZpeGVkQ29sdW1ucy5kZWZhdWx0cyA9IC8qKiBAbGVuZHMgRml4ZWRDb2x1bW5zLmRlZmF1bHRzICovewoJLyoqCgkgKiBOdW1iZXIgb2YgbGVmdCBoYW5kIGNvbHVtbnMgdG8gZml4IGluIHBvc2l0aW9uCgkgKiAgQHR5cGUgICAgIGludAoJICogIEBkZWZhdWx0ICAxCgkgKiAgQHN0YXRpYwoJICogIEBleGFtcGxlCgkgKiAgICAgIHZhciAgPSAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJICogICAgICAgICAgInNjcm9sbFgiOiAiMTAwJSIKCSAqICAgICAgfSApOwoJICogICAgICBuZXcgJC5mbi5kYXRhVGFibGUuZml4ZWRDb2x1bW5zKCB0YWJsZSwgewoJICogICAgICAgICAgImxlZnRDb2x1bW5zIjogMgoJICogICAgICB9ICk7CgkgKi8KCSJpTGVmdENvbHVtbnMiOiAxLAoKCS8qKgoJICogTnVtYmVyIG9mIHJpZ2h0IGhhbmQgY29sdW1ucyB0byBmaXggaW4gcG9zaXRpb24KCSAqICBAdHlwZSAgICAgaW50CgkgKiAgQGRlZmF1bHQgIDAKCSAqICBAc3RhdGljCgkgKiAgQGV4YW1wbGUKCSAqICAgICAgdmFyIHRhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCSAqICAgICAgICAgICJzY3JvbGxYIjogIjEwMCUiCgkgKiAgICAgIH0gKTsKCSAqICAgICAgbmV3ICQuZm4uZGF0YVRhYmxlLmZpeGVkQ29sdW1ucyggdGFibGUsIHsKCSAqICAgICAgICAgICJyaWdodENvbHVtbnMiOiAxCgkgKiAgICAgIH0gKTsKCSAqLwoJImlSaWdodENvbHVtbnMiOiAwLAoKCS8qKgoJICogRHJhdyBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgd2hlbiBGaXhlZENvbHVtbnMgaGFzIHJlZHJhd24gdGhlIGZpeGVkIGFzc2V0cwoJICogIEB0eXBlICAgICBmdW5jdGlvbihvYmplY3QsIG9iamVjdCk6dm9pZAoJICogIEBkZWZhdWx0ICBudWxsCgkgKiAgQHN0YXRpYwoJICogIEBleGFtcGxlCgkgKiAgICAgIHZhciB0YWJsZSA9ICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkgKiAgICAgICAgICAic2Nyb2xsWCI6ICIxMDAlIgoJICogICAgICB9ICk7CgkgKiAgICAgIG5ldyAkLmZuLmRhdGFUYWJsZS5maXhlZENvbHVtbnMoIHRhYmxlLCB7CgkgKiAgICAgICAgICAiZHJhd0NhbGxiYWNrIjogZnVuY3Rpb24gKCkgewoJICoJICAgICAgICAgICAgYWxlcnQoICJGaXhlZENvbHVtbnMgcmVkcmF3IiApOwoJICoJICAgICAgICB9CgkgKiAgICAgIH0gKTsKCSAqLwoJImZuRHJhd0NhbGxiYWNrIjogbnVsbCwKCgkvKioKCSAqIEhlaWdodCBtYXRjaGluZyBhbGdvcnRoaW0gdG8gdXNlLiBUaGlzIGNhbiBiZSAibm9uZSIgd2hpY2ggd2lsbCByZXN1bHQgaW4gbm8gaGVpZ2h0CgkgKiBtYXRjaGluZyBiZWluZyBhcHBsaWVkIGJ5IEZpeGVkQ29sdW1ucyAoaGVpZ2h0IG1hdGNoaW5nIGNvdWxkIGJlIGZvcmNlZCBieSBDU1MgaW4gdGhpcwoJICogY2FzZSksICJzZW1pYXV0byIgd2hlcmVieSB0aGUgaGVpZ2h0IGNhbGN1bGF0aW9uIHdpbGwgYmUgcGVyZm9ybWVkIG9uY2UsIGFuZCB0aGUgcmVzdWx0CgkgKiBjYWNoZWQgdG8gYmUgdXNlZCBhZ2FpbiAoZm5SZWNhbGN1bGF0ZUhlaWdodCBjYW4gYmUgdXNlZCB0byBmb3JjZSByZWNhbGN1bGF0aW9uKSwgb3IKCSAqICJhdXRvIiB3aGVuIGhlaWdodCBtYXRjaGluZyBpcyBwZXJmb3JtZWQgb24gZXZlcnkgZHJhdyAoc2xvd2VzdCBidXQgbXVzdCBhY2N1cmF0ZSkKCSAqICBAdHlwZSAgICAgc3RyaW5nCgkgKiAgQGRlZmF1bHQgIHNlbWlhdXRvCgkgKiAgQHN0YXRpYwoJICogIEBleGFtcGxlCgkgKiAgICAgIHZhciB0YWJsZSA9ICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkgKiAgICAgICAgICAic2Nyb2xsWCI6ICIxMDAlIgoJICogICAgICB9ICk7CgkgKiAgICAgIG5ldyAkLmZuLmRhdGFUYWJsZS5maXhlZENvbHVtbnMoIHRhYmxlLCB7CgkgKiAgICAgICAgICAiaGVpZ2h0TWF0Y2giOiAiYXV0byIKCSAqICAgICAgfSApOwoJICovCgkic0hlaWdodE1hdGNoIjogInNlbWlhdXRvIgp9OwoKCgoKLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCiAqIENvbnN0YW50cwogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCgovKioKICogRml4ZWRDb2x1bW5zIHZlcnNpb24KICogIEBuYW1lICAgICAgRml4ZWRDb2x1bW5zLnZlcnNpb24KICogIEB0eXBlICAgICAgU3RyaW5nCiAqICBAZGVmYXVsdCAgIFNlZSBjb2RlCiAqICBAc3RhdGljCiAqLwpGaXhlZENvbHVtbnMudmVyc2lvbiA9ICIzLjMuMCI7CgoKCi8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgogKiBEYXRhVGFibGVzIEFQSSBpbnRlZ3JhdGlvbgogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCgpEYXRhVGFibGUuQXBpLnJlZ2lzdGVyKCAnZml4ZWRDb2x1bW5zKCknLCBmdW5jdGlvbiAoKSB7CglyZXR1cm4gdGhpczsKfSApOwoKRGF0YVRhYmxlLkFwaS5yZWdpc3RlciggJ2ZpeGVkQ29sdW1ucygpLnVwZGF0ZSgpJywgZnVuY3Rpb24gKCkgewoJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggY3R4ICkgewoJCWlmICggY3R4Ll9vRml4ZWRDb2x1bW5zICkgewoJCQljdHguX29GaXhlZENvbHVtbnMuZm5VcGRhdGUoKTsKCQl9Cgl9ICk7Cn0gKTsKCkRhdGFUYWJsZS5BcGkucmVnaXN0ZXIoICdmaXhlZENvbHVtbnMoKS5yZWxheW91dCgpJywgZnVuY3Rpb24gKCkgewoJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggY3R4ICkgewoJCWlmICggY3R4Ll9vRml4ZWRDb2x1bW5zICkgewoJCQljdHguX29GaXhlZENvbHVtbnMuZm5SZWRyYXdMYXlvdXQoKTsKCQl9Cgl9ICk7Cn0gKTsKCkRhdGFUYWJsZS5BcGkucmVnaXN0ZXIoICdyb3dzKCkucmVjYWxjSGVpZ2h0KCknLCBmdW5jdGlvbiAoKSB7CglyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3JvdycsIGZ1bmN0aW9uICggY3R4LCBpZHggKSB7CgkJaWYgKCBjdHguX29GaXhlZENvbHVtbnMgKSB7CgkJCWN0eC5fb0ZpeGVkQ29sdW1ucy5mblJlY2FsY3VsYXRlSGVpZ2h0KCB0aGlzLnJvdyhpZHgpLm5vZGUoKSApOwoJCX0KCX0gKTsKfSApOwoKRGF0YVRhYmxlLkFwaS5yZWdpc3RlciggJ2ZpeGVkQ29sdW1ucygpLnJvd0luZGV4KCknLCBmdW5jdGlvbiAoIHJvdyApIHsKCXJvdyA9ICQocm93KTsKCglyZXR1cm4gcm93LnBhcmVudHMoJy5EVEZDX0Nsb25lZCcpLmxlbmd0aCA/CgkJdGhpcy5yb3dzKCB7IHBhZ2U6ICdjdXJyZW50JyB9ICkuaW5kZXhlcygpWyByb3cuaW5kZXgoKSBdIDoKCQl0aGlzLnJvdyggcm93ICkuaW5kZXgoKTsKfSApOwoKRGF0YVRhYmxlLkFwaS5yZWdpc3RlciggJ2ZpeGVkQ29sdW1ucygpLmNlbGxJbmRleCgpJywgZnVuY3Rpb24gKCBjZWxsICkgewoJY2VsbCA9ICQoY2VsbCk7CgoJaWYgKCBjZWxsLnBhcmVudHMoJy5EVEZDX0Nsb25lZCcpLmxlbmd0aCApIHsKCQl2YXIgcm93Q2xvbmVkSWR4ID0gY2VsbC5wYXJlbnQoKS5pbmRleCgpOwoJCXZhciByb3dJZHggPSB0aGlzLnJvd3MoIHsgcGFnZTogJ2N1cnJlbnQnIH0gKS5pbmRleGVzKClbIHJvd0Nsb25lZElkeCBdOwoJCXZhciBjb2x1bW5JZHg7CgoJCWlmICggY2VsbC5wYXJlbnRzKCcuRFRGQ19MZWZ0V3JhcHBlcicpLmxlbmd0aCApIHsKCQkJY29sdW1uSWR4ID0gY2VsbC5pbmRleCgpOwoJCX0KCQllbHNlIHsKCQkJdmFyIGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMoKS5mbGF0dGVuKCkubGVuZ3RoOwoJCQljb2x1bW5JZHggPSBjb2x1bW5zIC0gdGhpcy5jb250ZXh0WzBdLl9vRml4ZWRDb2x1bW5zLnMuaVJpZ2h0Q29sdW1ucyArIGNlbGwuaW5kZXgoKTsKCQl9CgoJCXJldHVybiB7CgkJCXJvdzogcm93SWR4LAoJCQljb2x1bW46IHRoaXMuY29sdW1uLmluZGV4KCAndG9EYXRhJywgY29sdW1uSWR4ICksCgkJCWNvbHVtblZpc2libGU6IGNvbHVtbklkeAoJCX07Cgl9CgllbHNlIHsKCQlyZXR1cm4gdGhpcy5jZWxsKCBjZWxsICkuaW5kZXgoKTsKCX0KfSApOwoKRGF0YVRhYmxlLkFwaS5yZWdpc3RlclBsdXJhbCggJ2NlbGxzKCkuZml4ZWROb2RlcygpJywgJ2NlbGwoKS5maXhlZE5vZGUoKScsIGZ1bmN0aW9uICgpIHsKCXJldHVybiB0aGlzLml0ZXJhdG9yKCAnY2VsbCcsIGZ1bmN0aW9uICggc2V0dGluZ3MsIHJvdywgY29sdW1uICkgewoJCXJldHVybiBzZXR0aW5ncy5fb0ZpeGVkQ29sdW1ucwoJCQk/IHNldHRpbmdzLl9vRml4ZWRDb2x1bW5zLmZuVG9GaXhlZE5vZGUoIHJvdywgY29sdW1uICkKCQkJOiB0aGlzLm5vZGUoKTsKCX0sIDEgKTsKfSApOwoKCgoKLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCiAqIEluaXRpYWxpc2F0aW9uCiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKi8KCi8vIEF0dGFjaCBhIGxpc3RlbmVyIHRvIHRoZSBkb2N1bWVudCB3aGljaCBsaXN0ZW5zIGZvciBEYXRhVGFibGVzIGluaXRpYWxpc2F0aW9uCi8vIGV2ZW50cyBzbyB3ZSBjYW4gYXV0b21hdGljYWxseSBpbml0aWFsaXNlCiQoZG9jdW1lbnQpLm9uKCAnaW5pdC5kdC5maXhlZENvbHVtbnMnLCBmdW5jdGlvbiAoZSwgc2V0dGluZ3MpIHsKCWlmICggZS5uYW1lc3BhY2UgIT09ICdkdCcgKSB7CgkJcmV0dXJuOwoJfQoKCXZhciBpbml0ID0gc2V0dGluZ3Mub0luaXQuZml4ZWRDb2x1bW5zOwoJdmFyIGRlZmF1bHRzID0gRGF0YVRhYmxlLmRlZmF1bHRzLmZpeGVkQ29sdW1uczsKCglpZiAoIGluaXQgfHwgZGVmYXVsdHMgKSB7CgkJdmFyIG9wdHMgPSAkLmV4dGVuZCgge30sIGluaXQsIGRlZmF1bHRzICk7CgoJCWlmICggaW5pdCAhPT0gZmFsc2UgKSB7CgkJCW5ldyBGaXhlZENvbHVtbnMoIHNldHRpbmdzLCBvcHRzICk7CgkJfQoJfQp9ICk7CgoKCi8vIE1ha2UgRml4ZWRDb2x1bW5zIGFjY2Vzc2libGUgZnJvbSB0aGUgRGF0YVRhYmxlcyBpbnN0YW5jZQokLmZuLmRhdGFUYWJsZS5GaXhlZENvbHVtbnMgPSBGaXhlZENvbHVtbnM7CiQuZm4uRGF0YVRhYmxlLkZpeGVkQ29sdW1ucyA9IEZpeGVkQ29sdW1uczsKCnJldHVybiBGaXhlZENvbHVtbnM7Cn0pKTsKCgovKiEgRml4ZWRIZWFkZXIgMy4xLjYKICogwqkyMDA5LTIwMTkgU3ByeU1lZGlhIEx0ZCAtIGRhdGF0YWJsZXMubmV0L2xpY2Vuc2UKICovCgovKioKICogQHN1bW1hcnkgICAgIEZpeGVkSGVhZGVyCiAqIEBkZXNjcmlwdGlvbiBGaXggYSB0YWJsZSdzIGhlYWRlciBvciBmb290ZXIsIHNvIGl0IGlzIGFsd2F5cyB2aXNpYmxlIHdoaWxlCiAqICAgICAgICAgICAgICBzY3JvbGxpbmcKICogQHZlcnNpb24gICAgIDMuMS42CiAqIEBmaWxlICAgICAgICBkYXRhVGFibGVzLmZpeGVkSGVhZGVyLmpzCiAqIEBhdXRob3IgICAgICBTcHJ5TWVkaWEgTHRkICh3d3cuc3ByeW1lZGlhLmNvLnVrKQogKiBAY29udGFjdCAgICAgd3d3LnNwcnltZWRpYS5jby51ay9jb250YWN0CiAqIEBjb3B5cmlnaHQgICBDb3B5cmlnaHQgMjAwOS0yMDE5IFNwcnlNZWRpYSBMdGQuCiAqCiAqIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgYXZhaWxhYmxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKICogICBNSVQgbGljZW5zZSAtIGh0dHA6Ly9kYXRhdGFibGVzLm5ldC9saWNlbnNlL21pdAogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQogKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBsaWNlbnNlIGZpbGVzIGZvciBkZXRhaWxzLgogKgogKiBGb3IgZGV0YWlscyBwbGVhc2UgcmVmZXIgdG86IGh0dHA6Ly93d3cuZGF0YXRhYmxlcy5uZXQKICovCgooZnVuY3Rpb24oIGZhY3RvcnkgKXsKCWlmICggdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkgewoJCS8vIEFNRAoJCWRlZmluZSggWydqcXVlcnknLCAnZGF0YXRhYmxlcy5uZXQnXSwgZnVuY3Rpb24gKCAkICkgewoJCQlyZXR1cm4gZmFjdG9yeSggJCwgd2luZG93LCBkb2N1bWVudCApOwoJCX0gKTsKCX0KCWVsc2UgaWYgKCB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgKSB7CgkJLy8gQ29tbW9uSlMKCQltb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb290LCAkKSB7CgkJCWlmICggISByb290ICkgewoJCQkJcm9vdCA9IHdpbmRvdzsKCQkJfQoKCQkJaWYgKCAhICQgfHwgISAkLmZuLmRhdGFUYWJsZSApIHsKCQkJCSQgPSByZXF1aXJlKCdkYXRhdGFibGVzLm5ldCcpKHJvb3QsICQpLiQ7CgkJCX0KCgkJCXJldHVybiBmYWN0b3J5KCAkLCByb290LCByb290LmRvY3VtZW50ICk7CgkJfTsKCX0KCWVsc2UgewoJCS8vIEJyb3dzZXIKCQlmYWN0b3J5KCBqUXVlcnksIHdpbmRvdywgZG9jdW1lbnQgKTsKCX0KfShmdW5jdGlvbiggJCwgd2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkICkgewondXNlIHN0cmljdCc7CnZhciBEYXRhVGFibGUgPSAkLmZuLmRhdGFUYWJsZTsKCgp2YXIgX2luc3RDb3VudGVyID0gMDsKCnZhciBGaXhlZEhlYWRlciA9IGZ1bmN0aW9uICggZHQsIGNvbmZpZyApIHsKCS8vIFNhbml0eSBjaGVjayAtIHlvdSBqdXN0IGtub3cgaXQgd2lsbCBoYXBwZW4KCWlmICggISAodGhpcyBpbnN0YW5jZW9mIEZpeGVkSGVhZGVyKSApIHsKCQl0aHJvdyAiRml4ZWRIZWFkZXIgbXVzdCBiZSBpbml0aWFsaXNlZCB3aXRoIHRoZSAnbmV3JyBrZXl3b3JkLiI7Cgl9CgoJLy8gQWxsb3cgYSBib29sZWFuIHRydWUgZm9yIGRlZmF1bHRzCglpZiAoIGNvbmZpZyA9PT0gdHJ1ZSApIHsKCQljb25maWcgPSB7fTsKCX0KCglkdCA9IG5ldyBEYXRhVGFibGUuQXBpKCBkdCApOwoKCXRoaXMuYyA9ICQuZXh0ZW5kKCB0cnVlLCB7fSwgRml4ZWRIZWFkZXIuZGVmYXVsdHMsIGNvbmZpZyApOwoKCXRoaXMucyA9IHsKCQlkdDogZHQsCgkJcG9zaXRpb246IHsKCQkJdGhlYWRUb3A6IDAsCgkJCXRib2R5VG9wOiAwLAoJCQl0Zm9vdFRvcDogMCwKCQkJdGZvb3RCb3R0b206IDAsCgkJCXdpZHRoOiAwLAoJCQlsZWZ0OiAwLAoJCQl0Zm9vdEhlaWdodDogMCwKCQkJdGhlYWRIZWlnaHQ6IDAsCgkJCXdpbmRvd0hlaWdodDogJCh3aW5kb3cpLmhlaWdodCgpLAoJCQl2aXNpYmxlOiB0cnVlCgkJfSwKCQloZWFkZXJNb2RlOiBudWxsLAoJCWZvb3Rlck1vZGU6IG51bGwsCgkJYXV0b1dpZHRoOiBkdC5zZXR0aW5ncygpWzBdLm9GZWF0dXJlcy5iQXV0b1dpZHRoLAoJCW5hbWVzcGFjZTogJy5kdGZjJysoX2luc3RDb3VudGVyKyspLAoJCXNjcm9sbExlZnQ6IHsKCQkJaGVhZGVyOiAtMSwKCQkJZm9vdGVyOiAtMQoJCX0sCgkJZW5hYmxlOiB0cnVlCgl9OwoKCXRoaXMuZG9tID0gewoJCWZsb2F0aW5nSGVhZGVyOiBudWxsLAoJCXRoZWFkOiAkKGR0LnRhYmxlKCkuaGVhZGVyKCkpLAoJCXRib2R5OiAkKGR0LnRhYmxlKCkuYm9keSgpKSwKCQl0Zm9vdDogJChkdC50YWJsZSgpLmZvb3RlcigpKSwKCQloZWFkZXI6IHsKCQkJaG9zdDogbnVsbCwKCQkJZmxvYXRpbmc6IG51bGwsCgkJCXBsYWNlaG9sZGVyOiBudWxsCgkJfSwKCQlmb290ZXI6IHsKCQkJaG9zdDogbnVsbCwKCQkJZmxvYXRpbmc6IG51bGwsCgkJCXBsYWNlaG9sZGVyOiBudWxsCgkJfQoJfTsKCgl0aGlzLmRvbS5oZWFkZXIuaG9zdCA9IHRoaXMuZG9tLnRoZWFkLnBhcmVudCgpOwoJdGhpcy5kb20uZm9vdGVyLmhvc3QgPSB0aGlzLmRvbS50Zm9vdC5wYXJlbnQoKTsKCgl2YXIgZHRTZXR0aW5ncyA9IGR0LnNldHRpbmdzKClbMF07CglpZiAoIGR0U2V0dGluZ3MuX2ZpeGVkSGVhZGVyICkgewoJCXRocm93ICJGaXhlZEhlYWRlciBhbHJlYWR5IGluaXRpYWxpc2VkIG9uIHRhYmxlICIrZHRTZXR0aW5ncy5uVGFibGUuaWQ7Cgl9CgoJZHRTZXR0aW5ncy5fZml4ZWRIZWFkZXIgPSB0aGlzOwoKCXRoaXMuX2NvbnN0cnVjdG9yKCk7Cn07CgoKLyoKICogVmFyaWFibGU6IEZpeGVkSGVhZGVyCiAqIFB1cnBvc2U6ICBQcm90b3R5cGUgZm9yIEZpeGVkSGVhZGVyCiAqIFNjb3BlOiAgICBnbG9iYWwKICovCiQuZXh0ZW5kKCBGaXhlZEhlYWRlci5wcm90b3R5cGUsIHsKCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkgKiBBUEkgbWV0aG9kcwoJICovCgoJLyoqCgkgKiBLaWxsIG9mZiBGSCBhbmQgYW55IGV2ZW50cwoJICovCglkZXN0cm95OiBmdW5jdGlvbiAoKSB7CgkJdGhpcy5zLmR0Lm9mZiggJy5kdGZjJyApOwoJCSQod2luZG93KS5vZmYoIHRoaXMucy5uYW1lc3BhY2UgKTsKCgkJaWYgKCB0aGlzLmMuaGVhZGVyICkgewoJCQl0aGlzLl9tb2RlQ2hhbmdlKCAnaW4tcGxhY2UnLCAnaGVhZGVyJywgdHJ1ZSApOwoJCX0KCgkJaWYgKCB0aGlzLmMuZm9vdGVyICYmIHRoaXMuZG9tLnRmb290Lmxlbmd0aCApIHsKCQkJdGhpcy5fbW9kZUNoYW5nZSggJ2luLXBsYWNlJywgJ2Zvb3RlcicsIHRydWUgKTsKCQl9Cgl9LAoKCS8qKgoJICogRW5hYmxlIC8gZGlzYWJsZSB0aGUgZml4ZWQgZWxlbWVudHMKCSAqCgkgKiBAcGFyYW0gIHtib29sZWFufSBlbmFibGUgYHRydWVgIHRvIGVuYWJsZSwgYGZhbHNlYCB0byBkaXNhYmxlCgkgKi8KCWVuYWJsZTogZnVuY3Rpb24gKCBlbmFibGUsIHVwZGF0ZSApCgl7CgkJdGhpcy5zLmVuYWJsZSA9IGVuYWJsZTsKCgkJaWYgKCB1cGRhdGUgfHwgdXBkYXRlID09PSB1bmRlZmluZWQgKSB7CgkJCXRoaXMuX3Bvc2l0aW9ucygpOwoJCQl0aGlzLl9zY3JvbGwoIHRydWUgKTsKCQl9Cgl9LAoKCS8qKgoJICogR2V0IGVuYWJsZWQgc3RhdHVzCgkgKi8KCWVuYWJsZWQ6IGZ1bmN0aW9uICgpCgl7CgkJcmV0dXJuIHRoaXMucy5lbmFibGU7Cgl9LAoJCgkvKioKCSAqIFNldCBoZWFkZXIgb2Zmc2V0IAoJICoKCSAqIEBwYXJhbSAge2ludH0gbmV3IHZhbHVlIGZvciBoZWFkZXJPZmZzZXQKCSAqLwoJaGVhZGVyT2Zmc2V0OiBmdW5jdGlvbiAoIG9mZnNldCApCgl7CgkJaWYgKCBvZmZzZXQgIT09IHVuZGVmaW5lZCApIHsKCQkJdGhpcy5jLmhlYWRlck9mZnNldCA9IG9mZnNldDsKCQkJdGhpcy51cGRhdGUoKTsKCQl9CgoJCXJldHVybiB0aGlzLmMuaGVhZGVyT2Zmc2V0OwoJfSwKCQoJLyoqCgkgKiBTZXQgZm9vdGVyIG9mZnNldAoJICoKCSAqIEBwYXJhbSAge2ludH0gbmV3IHZhbHVlIGZvciBmb290ZXJPZmZzZXQKCSAqLwoJZm9vdGVyT2Zmc2V0OiBmdW5jdGlvbiAoIG9mZnNldCApCgl7CgkJaWYgKCBvZmZzZXQgIT09IHVuZGVmaW5lZCApIHsKCQkJdGhpcy5jLmZvb3Rlck9mZnNldCA9IG9mZnNldDsKCQkJdGhpcy51cGRhdGUoKTsKCQl9CgoJCXJldHVybiB0aGlzLmMuZm9vdGVyT2Zmc2V0OwoJfSwKCgkKCS8qKgoJICogUmVjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXhlZCBlbGVtZW50cyBhbmQgZm9yY2UgdGhlbSBpbnRvIHBsYWNlCgkgKi8KCXVwZGF0ZTogZnVuY3Rpb24gKCkKCXsKCQl2YXIgdGFibGUgPSB0aGlzLnMuZHQudGFibGUoKS5ub2RlKCk7CgoJCWlmICggJCh0YWJsZSkuaXMoJzp2aXNpYmxlJykgKSB7CgkJCXRoaXMuZW5hYmxlKCB0cnVlLCBmYWxzZSApOwoJCX0KCQllbHNlIHsKCQkJdGhpcy5lbmFibGUoIGZhbHNlLCBmYWxzZSApOwoJCX0KCgkJdGhpcy5fcG9zaXRpb25zKCk7CgkJdGhpcy5fc2Nyb2xsKCB0cnVlICk7Cgl9LAoKCgkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJICogQ29uc3RydWN0b3IKCSAqLwoJCgkvKioKCSAqIEZpeGVkSGVhZGVyIGNvbnN0cnVjdG9yIC0gYWRkaW5nIHRoZSByZXF1aXJlZCBldmVudCBsaXN0ZW5lcnMgYW5kCgkgKiBzaW1wbGUgaW5pdGlhbGlzYXRpb24KCSAqCgkgKiBAcHJpdmF0ZQoJICovCglfY29uc3RydWN0b3I6IGZ1bmN0aW9uICgpCgl7CgkJdmFyIHRoYXQgPSB0aGlzOwoJCXZhciBkdCA9IHRoaXMucy5kdDsKCgkJJCh3aW5kb3cpCgkJCS5vbiggJ3Njcm9sbCcrdGhpcy5zLm5hbWVzcGFjZSwgZnVuY3Rpb24gKCkgewoJCQkJdGhhdC5fc2Nyb2xsKCk7CgkJCX0gKQoJCQkub24oICdyZXNpemUnK3RoaXMucy5uYW1lc3BhY2UsIERhdGFUYWJsZS51dGlsLnRocm90dGxlKCBmdW5jdGlvbiAoKSB7CgkJCQl0aGF0LnMucG9zaXRpb24ud2luZG93SGVpZ2h0ID0gJCh3aW5kb3cpLmhlaWdodCgpOwoJCQkJdGhhdC51cGRhdGUoKTsKCQkJfSwgNTAgKSApOwoKCQl2YXIgYXV0b0hlYWRlciA9ICQoJy5maC1maXhlZEhlYWRlcicpOwoJCWlmICggISB0aGlzLmMuaGVhZGVyT2Zmc2V0ICYmIGF1dG9IZWFkZXIubGVuZ3RoICkgewoJCQl0aGlzLmMuaGVhZGVyT2Zmc2V0ID0gYXV0b0hlYWRlci5vdXRlckhlaWdodCgpOwoJCX0KCgkJdmFyIGF1dG9Gb290ZXIgPSAkKCcuZmgtZml4ZWRGb290ZXInKTsKCQlpZiAoICEgdGhpcy5jLmZvb3Rlck9mZnNldCAmJiBhdXRvRm9vdGVyLmxlbmd0aCApIHsKCQkJdGhpcy5jLmZvb3Rlck9mZnNldCA9IGF1dG9Gb290ZXIub3V0ZXJIZWlnaHQoKTsKCQl9CgoJCWR0Lm9uKCAnY29sdW1uLXJlb3JkZXIuZHQuZHRmYyBjb2x1bW4tdmlzaWJpbGl0eS5kdC5kdGZjIGRyYXcuZHQuZHRmYyBjb2x1bW4tc2l6aW5nLmR0LmR0ZmMgcmVzcG9uc2l2ZS1kaXNwbGF5LmR0LmR0ZmMnLCBmdW5jdGlvbiAoKSB7CgkJCXRoYXQudXBkYXRlKCk7CgkJfSApOwoKCQlkdC5vbiggJ2Rlc3Ryb3kuZHRmYycsIGZ1bmN0aW9uICgpIHsKCQkJdGhhdC5kZXN0cm95KCk7CgkJfSApOwoKCQl0aGlzLl9wb3NpdGlvbnMoKTsKCQl0aGlzLl9zY3JvbGwoKTsKCX0sCgoKCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkgKiBQcml2YXRlIG1ldGhvZHMKCSAqLwoKCS8qKgoJICogQ2xvbmUgYSBmaXhlZCBpdGVtIHRvIGFjdCBhcyBhIHBsYWNlIGhvbGRlciBmb3IgdGhlIG9yaWdpbmFsIGVsZW1lbnQKCSAqIHdoaWNoIGlzIG1vdmVkIGludG8gYSBjbG9uZSBvZiB0aGUgdGFibGUgZWxlbWVudCwgYW5kIG1vdmVkIGFyb3VuZCB0aGUKCSAqIGRvY3VtZW50IHRvIGdpdmUgdGhlIGZpeGVkIGVmZmVjdC4KCSAqCgkgKiBAcGFyYW0gIHtzdHJpbmd9ICBpdGVtICAnaGVhZGVyJyBvciAnZm9vdGVyJwoJICogQHBhcmFtICB7Ym9vbGVhbn0gZm9yY2UgRm9yY2UgdGhlIGNsb25lIHRvIGhhcHBlbiwgb3IgYWxsb3cgYXV0b21hdGljCgkgKiAgIGRlY2lzaW9uIChyZXVzZSBleGlzdGluZyBpZiBhdmFpbGFibGUpCgkgKiBAcHJpdmF0ZQoJICovCglfY2xvbmU6IGZ1bmN0aW9uICggaXRlbSwgZm9yY2UgKQoJewoJCXZhciBkdCA9IHRoaXMucy5kdDsKCQl2YXIgaXRlbURvbSA9IHRoaXMuZG9tWyBpdGVtIF07CgkJdmFyIGl0ZW1FbGVtZW50ID0gaXRlbSA9PT0gJ2hlYWRlcicgPwoJCQl0aGlzLmRvbS50aGVhZCA6CgkJCXRoaXMuZG9tLnRmb290OwoKCQlpZiAoICEgZm9yY2UgJiYgaXRlbURvbS5mbG9hdGluZyApIHsKCQkJLy8gZXhpc3RpbmcgZmxvYXRpbmcgZWxlbWVudCAtIHJldXNlIGl0CgkJCWl0ZW1Eb20uZmxvYXRpbmcucmVtb3ZlQ2xhc3MoICdmaXhlZEhlYWRlci1mbG9hdGluZyBmaXhlZEhlYWRlci1sb2NrZWQnICk7CgkJfQoJCWVsc2UgewoJCQlpZiAoIGl0ZW1Eb20uZmxvYXRpbmcgKSB7CgkJCQlpdGVtRG9tLnBsYWNlaG9sZGVyLnJlbW92ZSgpOwoJCQkJdGhpcy5fdW5zaXplKCBpdGVtICk7CgkJCQlpdGVtRG9tLmZsb2F0aW5nLmNoaWxkcmVuKCkuZGV0YWNoKCk7CgkJCQlpdGVtRG9tLmZsb2F0aW5nLnJlbW92ZSgpOwoJCQl9CgoJCQlpdGVtRG9tLmZsb2F0aW5nID0gJCggZHQudGFibGUoKS5ub2RlKCkuY2xvbmVOb2RlKCBmYWxzZSApICkKCQkJCS5jc3MoICd0YWJsZS1sYXlvdXQnLCAnZml4ZWQnICkKCQkJCS5hdHRyKCAnYXJpYS1oaWRkZW4nLCAndHJ1ZScgKQoJCQkJLnJlbW92ZUF0dHIoICdpZCcgKQoJCQkJLmFwcGVuZCggaXRlbUVsZW1lbnQgKQoJCQkJLmFwcGVuZFRvKCAnYm9keScgKTsKCgkJCS8vIEluc2VydCBhIGZha2UgdGhlYWQvdGZvb3QgaW50byB0aGUgRGF0YVRhYmxlIHRvIHN0b3AgaXQganVtcGluZyBhcm91bmQKCQkJaXRlbURvbS5wbGFjZWhvbGRlciA9IGl0ZW1FbGVtZW50LmNsb25lKCBmYWxzZSApOwoJCQlpdGVtRG9tLnBsYWNlaG9sZGVyCgkJCQkuZmluZCggJypbaWRdJyApCgkJCQkucmVtb3ZlQXR0ciggJ2lkJyApOwoKCQkJaXRlbURvbS5ob3N0LnByZXBlbmQoIGl0ZW1Eb20ucGxhY2Vob2xkZXIgKTsKCgkJCS8vIENsb25lIHdpZHRocwoJCQl0aGlzLl9tYXRjaFdpZHRocyggaXRlbURvbS5wbGFjZWhvbGRlciwgaXRlbURvbS5mbG9hdGluZyApOwoJCX0KCX0sCgoJLyoqCgkgKiBDb3B5IHdpZHRocyBmcm9tIHRoZSBjZWxscyBpbiBvbmUgZWxlbWVudCB0byBhbm90aGVyLiBUaGlzIGlzIHJlcXVpcmVkCgkgKiBmb3IgdGhlIGZvb3RlciBhcyB0aGUgZm9vdGVyIGluIHRoZSBtYWluIHRhYmxlIHRha2VzIGl0cyBzaXplcyBmcm9tIHRoZQoJICogaGVhZGVyIGNvbHVtbnMuIFRoYXQgaXNuJ3QgcHJlc2VudCBpbiB0aGUgZm9vdGVyIHNvIHRvIGhhdmUgaXQgc3RpbGwKCSAqIGFsaWduIGNvcnJlY3RseSwgdGhlIHNpemVzIG5lZWQgdG8gYmUgY29waWVkIG92ZXIuIEl0IGlzIGFsc28gcmVxdWlyZWQKCSAqIGZvciB0aGUgaGVhZGVyIHdoZW4gYXV0byB3aWR0aCBpcyBub3QgZW5hYmxlZAoJICoKCSAqIEBwYXJhbSAge2pRdWVyeX0gZnJvbSBDb3B5IHdpZHRocyBmcm9tCgkgKiBAcGFyYW0gIHtqUXVlcnl9IHRvICAgQ29weSB3aWR0aHMgdG8KCSAqIEBwcml2YXRlCgkgKi8KCV9tYXRjaFdpZHRoczogZnVuY3Rpb24gKCBmcm9tLCB0byApIHsKCQl2YXIgZ2V0ID0gZnVuY3Rpb24gKCBuYW1lICkgewoJCQlyZXR1cm4gJChuYW1lLCBmcm9tKQoJCQkJLm1hcCggZnVuY3Rpb24gKCkgewoJCQkJCXJldHVybiAkKHRoaXMpLndpZHRoKCk7CgkJCQl9ICkudG9BcnJheSgpOwoJCX07CgoJCXZhciBzZXQgPSBmdW5jdGlvbiAoIG5hbWUsIHRvV2lkdGhzICkgewoJCQkkKG5hbWUsIHRvKS5lYWNoKCBmdW5jdGlvbiAoIGkgKSB7CgkJCQkkKHRoaXMpLmNzcyggewoJCQkJCXdpZHRoOiB0b1dpZHRoc1tpXSwKCQkJCQltaW5XaWR0aDogdG9XaWR0aHNbaV0KCQkJCX0gKTsKCQkJfSApOwoJCX07CgoJCXZhciB0aFdpZHRocyA9IGdldCggJ3RoJyApOwoJCXZhciB0ZFdpZHRocyA9IGdldCggJ3RkJyApOwoKCQlzZXQoICd0aCcsIHRoV2lkdGhzICk7CgkJc2V0KCAndGQnLCB0ZFdpZHRocyApOwoJfSwKCgkvKioKCSAqIFJlbW92ZSBhc3NpZ25lZCB3aWR0aHMgZnJvbSB0aGUgY2VsbHMgaW4gYW4gZWxlbWVudC4gVGhpcyBpcyByZXF1aXJlZAoJICogd2hlbiBpbnNlcnRpbmcgdGhlIGZvb3RlciBiYWNrIGludG8gdGhlIG1haW4gdGFibGUgc28gdGhlIHNpemUgaXMgZGVmaW5lZAoJICogYnkgdGhlIGhlYWRlciBjb2x1bW5zIGFuZCBhbHNvIHdoZW4gYXV0byB3aWR0aCBpcyBkaXNhYmxlZCBpbiB0aGUKCSAqIERhdGFUYWJsZS4KCSAqCgkgKiBAcGFyYW0gIHtzdHJpbmd9IGl0ZW0gVGhlIGBoZWFkZXJgIG9yIGBmb290ZXJgCgkgKiBAcHJpdmF0ZQoJICovCglfdW5zaXplOiBmdW5jdGlvbiAoIGl0ZW0gKSB7CgkJdmFyIGVsID0gdGhpcy5kb21bIGl0ZW0gXS5mbG9hdGluZzsKCgkJaWYgKCBlbCAmJiAoaXRlbSA9PT0gJ2Zvb3RlcicgfHwgKGl0ZW0gPT09ICdoZWFkZXInICYmICEgdGhpcy5zLmF1dG9XaWR0aCkpICkgewoJCQkkKCd0aCwgdGQnLCBlbCkuY3NzKCB7CgkJCQl3aWR0aDogJycsCgkJCQltaW5XaWR0aDogJycKCQkJfSApOwoJCX0KCQllbHNlIGlmICggZWwgJiYgaXRlbSA9PT0gJ2hlYWRlcicgKSB7CgkJCSQoJ3RoLCB0ZCcsIGVsKS5jc3MoICdtaW4td2lkdGgnLCAnJyApOwoJCX0KCX0sCgoJLyoqCgkgKiBSZXBvc2l0aW9uIHRoZSBmbG9hdGluZyBlbGVtZW50cyB0byB0YWtlIGFjY291bnQgb2YgaG9yaXpvbnRhbCBwYWdlCgkgKiBzY3JvbGwKCSAqCgkgKiBAcGFyYW0gIHtzdHJpbmd9IGl0ZW0gICAgICAgVGhlIGBoZWFkZXJgIG9yIGBmb290ZXJgCgkgKiBAcGFyYW0gIHtpbnR9ICAgIHNjcm9sbExlZnQgRG9jdW1lbnQgc2Nyb2xsTGVmdAoJICogQHByaXZhdGUKCSAqLwoJX2hvcml6b250YWw6IGZ1bmN0aW9uICggaXRlbSwgc2Nyb2xsTGVmdCApCgl7CgkJdmFyIGl0ZW1Eb20gPSB0aGlzLmRvbVsgaXRlbSBdOwoJCXZhciBwb3NpdGlvbiA9IHRoaXMucy5wb3NpdGlvbjsKCQl2YXIgbGFzdFNjcm9sbExlZnQgPSB0aGlzLnMuc2Nyb2xsTGVmdDsKCgkJaWYgKCBpdGVtRG9tLmZsb2F0aW5nICYmIGxhc3RTY3JvbGxMZWZ0WyBpdGVtIF0gIT09IHNjcm9sbExlZnQgKSB7CgkJCWl0ZW1Eb20uZmxvYXRpbmcuY3NzKCAnbGVmdCcsIHBvc2l0aW9uLmxlZnQgLSBzY3JvbGxMZWZ0ICk7CgoJCQlsYXN0U2Nyb2xsTGVmdFsgaXRlbSBdID0gc2Nyb2xsTGVmdDsKCQl9Cgl9LAoKCS8qKgoJICogQ2hhbmdlIGZyb20gb25lIGRpc3BsYXkgbW9kZSB0byBhbm90aGVyLiBFYWNoIGZpeGVkIGl0ZW0gY2FuIGJlIGluIG9uZQoJICogb2Y6CgkgKgoJICogKiBgaW4tcGxhY2VgIC0gSW4gdGhlIG1haW4gRGF0YVRhYmxlCgkgKiAqIGBpbmAgLSBGbG9hdGluZyBvdmVyIHRoZSBEYXRhVGFibGUKCSAqICogYGJlbG93YCAtIChIZWFkZXIgb25seSkgRml4ZWQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgdGFibGUgYm9keQoJICogKiBgYWJvdmVgIC0gKEZvb3RlciBvbmx5KSBGaXhlZCB0byB0aGUgdG9wIG9mIHRoZSB0YWJsZSBib2R5CgkgKiAKCSAqIEBwYXJhbSAge3N0cmluZ30gIG1vZGUgICAgICAgIE1vZGUgdGhhdCB0aGUgaXRlbSBzaG91bGQgYmUgc2hvd24gaW4KCSAqIEBwYXJhbSAge3N0cmluZ30gIGl0ZW0gICAgICAgICdoZWFkZXInIG9yICdmb290ZXInCgkgKiBAcGFyYW0gIHtib29sZWFufSBmb3JjZUNoYW5nZSBGb3JjZSBhIHJlZHJhdyBvZiB0aGUgbW9kZSwgZXZlbiBpZiBhbHJlYWR5CgkgKiAgICAgaW4gdGhhdCBtb2RlLgoJICogQHByaXZhdGUKCSAqLwoJX21vZGVDaGFuZ2U6IGZ1bmN0aW9uICggbW9kZSwgaXRlbSwgZm9yY2VDaGFuZ2UgKQoJewoJCXZhciBkdCA9IHRoaXMucy5kdDsKCQl2YXIgaXRlbURvbSA9IHRoaXMuZG9tWyBpdGVtIF07CgkJdmFyIHBvc2l0aW9uID0gdGhpcy5zLnBvc2l0aW9uOwoKCQkvLyBSZWNvcmQgZm9jdXMuIEJyb3dzZXIncyB3aWxsIGNhdXNlIGlucHV0IGVsZW1lbnRzIHRvIGxvb3NlIGZvY3VzIGlmCgkJLy8gdGhleSBhcmUgaW5zZXJ0ZWQgZWxzZSB3aGVyZSBpbiB0aGUgZG9jCgkJdmFyIHRhYmxlUGFydCA9IHRoaXMuZG9tWyBpdGVtPT09J2Zvb3RlcicgPyAndGZvb3QnIDogJ3RoZWFkJyBdOwoJCXZhciBmb2N1cyA9ICQuY29udGFpbnMoIHRhYmxlUGFydFswXSwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCApID8KCQkJZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA6CgkJCW51bGw7CgkJCgkJaWYgKCBmb2N1cyApIHsKCQkJZm9jdXMuYmx1cigpOwoJCX0KCgkJaWYgKCBtb2RlID09PSAnaW4tcGxhY2UnICkgewoJCQkvLyBJbnNlcnQgdGhlIGhlYWRlciBiYWNrIGludG8gdGhlIHRhYmxlJ3MgcmVhbCBoZWFkZXIKCQkJaWYgKCBpdGVtRG9tLnBsYWNlaG9sZGVyICkgewoJCQkJaXRlbURvbS5wbGFjZWhvbGRlci5yZW1vdmUoKTsKCQkJCWl0ZW1Eb20ucGxhY2Vob2xkZXIgPSBudWxsOwoJCQl9CgoJCQl0aGlzLl91bnNpemUoIGl0ZW0gKTsKCgkJCWlmICggaXRlbSA9PT0gJ2hlYWRlcicgKSB7CgkJCQlpdGVtRG9tLmhvc3QucHJlcGVuZCggdGFibGVQYXJ0ICk7CgkJCX0KCQkJZWxzZSB7CgkJCQlpdGVtRG9tLmhvc3QuYXBwZW5kKCB0YWJsZVBhcnQgKTsKCQkJfQoKCQkJaWYgKCBpdGVtRG9tLmZsb2F0aW5nICkgewoJCQkJaXRlbURvbS5mbG9hdGluZy5yZW1vdmUoKTsKCQkJCWl0ZW1Eb20uZmxvYXRpbmcgPSBudWxsOwoJCQl9CgkJfQoJCWVsc2UgaWYgKCBtb2RlID09PSAnaW4nICkgewoJCQkvLyBSZW1vdmUgdGhlIGhlYWRlciBmcm9tIHRoZSByZWFkIGhlYWRlciBhbmQgaW5zZXJ0IGludG8gYSBmaXhlZAoJCQkvLyBwb3NpdGlvbmVkIGZsb2F0aW5nIHRhYmxlIGNsb25lCgkJCXRoaXMuX2Nsb25lKCBpdGVtLCBmb3JjZUNoYW5nZSApOwoKCQkJaXRlbURvbS5mbG9hdGluZwoJCQkJLmFkZENsYXNzKCAnZml4ZWRIZWFkZXItZmxvYXRpbmcnICkKCQkJCS5jc3MoIGl0ZW0gPT09ICdoZWFkZXInID8gJ3RvcCcgOiAnYm90dG9tJywgdGhpcy5jW2l0ZW0rJ09mZnNldCddICkKCQkJCS5jc3MoICdsZWZ0JywgcG9zaXRpb24ubGVmdCsncHgnICkKCQkJCS5jc3MoICd3aWR0aCcsIHBvc2l0aW9uLndpZHRoKydweCcgKTsKCgkJCWlmICggaXRlbSA9PT0gJ2Zvb3RlcicgKSB7CgkJCQlpdGVtRG9tLmZsb2F0aW5nLmNzcyggJ3RvcCcsICcnICk7CgkJCX0KCQl9CgkJZWxzZSBpZiAoIG1vZGUgPT09ICdiZWxvdycgKSB7IC8vIG9ubHkgdXNlZCBmb3IgdGhlIGhlYWRlcgoJCQkvLyBGaXggdGhlIHBvc2l0aW9uIG9mIHRoZSBmbG9hdGluZyBoZWFkZXIgYXQgYmFzZSBvZiB0aGUgdGFibGUgYm9keQoJCQl0aGlzLl9jbG9uZSggaXRlbSwgZm9yY2VDaGFuZ2UgKTsKCgkJCWl0ZW1Eb20uZmxvYXRpbmcKCQkJCS5hZGRDbGFzcyggJ2ZpeGVkSGVhZGVyLWxvY2tlZCcgKQoJCQkJLmNzcyggJ3RvcCcsIHBvc2l0aW9uLnRmb290VG9wIC0gcG9zaXRpb24udGhlYWRIZWlnaHQgKQoJCQkJLmNzcyggJ2xlZnQnLCBwb3NpdGlvbi5sZWZ0KydweCcgKQoJCQkJLmNzcyggJ3dpZHRoJywgcG9zaXRpb24ud2lkdGgrJ3B4JyApOwoJCX0KCQllbHNlIGlmICggbW9kZSA9PT0gJ2Fib3ZlJyApIHsgLy8gb25seSB1c2VkIGZvciB0aGUgZm9vdGVyCgkJCS8vIEZpeCB0aGUgcG9zaXRpb24gb2YgdGhlIGZsb2F0aW5nIGZvb3RlciBhdCB0b3Agb2YgdGhlIHRhYmxlIGJvZHkKCQkJdGhpcy5fY2xvbmUoIGl0ZW0sIGZvcmNlQ2hhbmdlICk7CgoJCQlpdGVtRG9tLmZsb2F0aW5nCgkJCQkuYWRkQ2xhc3MoICdmaXhlZEhlYWRlci1sb2NrZWQnICkKCQkJCS5jc3MoICd0b3AnLCBwb3NpdGlvbi50Ym9keVRvcCApCgkJCQkuY3NzKCAnbGVmdCcsIHBvc2l0aW9uLmxlZnQrJ3B4JyApCgkJCQkuY3NzKCAnd2lkdGgnLCBwb3NpdGlvbi53aWR0aCsncHgnICk7CgkJfQoKCQkvLyBSZXN0b3JlIGZvY3VzIGlmIGl0IHdhcyBsb3N0CgkJaWYgKCBmb2N1cyAmJiBmb2N1cyAhPT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCApIHsKCQkJc2V0VGltZW91dCggZnVuY3Rpb24gKCkgewoJCQkJZm9jdXMuZm9jdXMoKTsKCQkJfSwgMTAgKTsKCQl9CgoJCXRoaXMucy5zY3JvbGxMZWZ0LmhlYWRlciA9IC0xOwoJCXRoaXMucy5zY3JvbGxMZWZ0LmZvb3RlciA9IC0xOwoJCXRoaXMuc1tpdGVtKydNb2RlJ10gPSBtb2RlOwoJfSwKCgkvKioKCSAqIENhY2hlIHRoZSBwb3NpdGlvbmFsIGluZm9ybWF0aW9uIHRoYXQgaXMgcmVxdWlyZWQgZm9yIHRoZSBtb2RlCgkgKiBjYWxjdWxhdGlvbnMgdGhhdCBGaXhlZEhlYWRlciBwZXJmb3Jtcy4KCSAqCgkgKiBAcHJpdmF0ZQoJICovCglfcG9zaXRpb25zOiBmdW5jdGlvbiAoKQoJewoJCXZhciBkdCA9IHRoaXMucy5kdDsKCQl2YXIgdGFibGUgPSBkdC50YWJsZSgpOwoJCXZhciBwb3NpdGlvbiA9IHRoaXMucy5wb3NpdGlvbjsKCQl2YXIgZG9tID0gdGhpcy5kb207CgkJdmFyIHRhYmxlTm9kZSA9ICQodGFibGUubm9kZSgpKTsKCgkJLy8gTmVlZCB0byB1c2UgdGhlIGhlYWRlciBhbmQgZm9vdGVyIHRoYXQgYXJlIGluIHRoZSBtYWluIHRhYmxlLAoJCS8vIHJlZ2FyZGxlc3Mgb2YgaWYgdGhleSBhcmUgY2xvbmVzLCBzaW5jZSB0aGV5IGhvbGQgdGhlIHBvc2l0aW9ucyB3ZQoJCS8vIHdhbnQgdG8gbWVhc3VyZSBmcm9tCgkJdmFyIHRoZWFkID0gdGFibGVOb2RlLmNoaWxkcmVuKCd0aGVhZCcpOwoJCXZhciB0Zm9vdCA9IHRhYmxlTm9kZS5jaGlsZHJlbigndGZvb3QnKTsKCQl2YXIgdGJvZHkgPSBkb20udGJvZHk7CgoJCXBvc2l0aW9uLnZpc2libGUgPSB0YWJsZU5vZGUuaXMoJzp2aXNpYmxlJyk7CgkJcG9zaXRpb24ud2lkdGggPSB0YWJsZU5vZGUub3V0ZXJXaWR0aCgpOwoJCXBvc2l0aW9uLmxlZnQgPSB0YWJsZU5vZGUub2Zmc2V0KCkubGVmdDsKCQlwb3NpdGlvbi50aGVhZFRvcCA9IHRoZWFkLm9mZnNldCgpLnRvcDsKCQlwb3NpdGlvbi50Ym9keVRvcCA9IHRib2R5Lm9mZnNldCgpLnRvcDsKCQlwb3NpdGlvbi50Ym9keUhlaWdodCA9IHRib2R5Lm91dGVySGVpZ2h0KCk7CgkJcG9zaXRpb24udGhlYWRIZWlnaHQgPSBwb3NpdGlvbi50Ym9keVRvcCAtIHBvc2l0aW9uLnRoZWFkVG9wOwoKCQlpZiAoIHRmb290Lmxlbmd0aCApIHsKCQkJcG9zaXRpb24udGZvb3RUb3AgPSB0Zm9vdC5vZmZzZXQoKS50b3A7CgkJCXBvc2l0aW9uLnRmb290Qm90dG9tID0gcG9zaXRpb24udGZvb3RUb3AgKyB0Zm9vdC5vdXRlckhlaWdodCgpOwoJCQlwb3NpdGlvbi50Zm9vdEhlaWdodCA9IHBvc2l0aW9uLnRmb290Qm90dG9tIC0gcG9zaXRpb24udGZvb3RUb3A7CgkJfQoJCWVsc2UgewoJCQlwb3NpdGlvbi50Zm9vdFRvcCA9IHBvc2l0aW9uLnRib2R5VG9wICsgdGJvZHkub3V0ZXJIZWlnaHQoKTsKCQkJcG9zaXRpb24udGZvb3RCb3R0b20gPSBwb3NpdGlvbi50Zm9vdFRvcDsKCQkJcG9zaXRpb24udGZvb3RIZWlnaHQgPSBwb3NpdGlvbi50Zm9vdFRvcDsKCQl9Cgl9LAoKCgkvKioKCSAqIE1vZGUgY2FsY3VsYXRpb24gLSBkZXRlcm1pbmUgd2hhdCBtb2RlIHRoZSBmaXhlZCBpdGVtcyBzaG91bGQgYmUgcGxhY2VkCgkgKiBpbnRvLgoJICoKCSAqIEBwYXJhbSAge2Jvb2xlYW59IGZvcmNlQ2hhbmdlIEZvcmNlIGEgcmVkcmF3IG9mIHRoZSBtb2RlLCBldmVuIGlmIGFscmVhZHkKCSAqICAgICBpbiB0aGF0IG1vZGUuCgkgKiBAcHJpdmF0ZQoJICovCglfc2Nyb2xsOiBmdW5jdGlvbiAoIGZvcmNlQ2hhbmdlICkKCXsKCQl2YXIgd2luZG93VG9wID0gJChkb2N1bWVudCkuc2Nyb2xsVG9wKCk7CgkJdmFyIHdpbmRvd0xlZnQgPSAkKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCk7CgkJdmFyIHBvc2l0aW9uID0gdGhpcy5zLnBvc2l0aW9uOwoJCXZhciBoZWFkZXJNb2RlLCBmb290ZXJNb2RlOwoKCQlpZiAoIHRoaXMuYy5oZWFkZXIgKSB7CgkJCWlmICggISB0aGlzLnMuZW5hYmxlICkgewoJCQkJaGVhZGVyTW9kZSA9ICdpbi1wbGFjZSc7CgkJCX0KCQkJZWxzZSBpZiAoICEgcG9zaXRpb24udmlzaWJsZSB8fCB3aW5kb3dUb3AgPD0gcG9zaXRpb24udGhlYWRUb3AgLSB0aGlzLmMuaGVhZGVyT2Zmc2V0ICkgewoJCQkJaGVhZGVyTW9kZSA9ICdpbi1wbGFjZSc7CgkJCX0KCQkJZWxzZSBpZiAoIHdpbmRvd1RvcCA8PSBwb3NpdGlvbi50Zm9vdFRvcCAtIHBvc2l0aW9uLnRoZWFkSGVpZ2h0IC0gdGhpcy5jLmhlYWRlck9mZnNldCApIHsKCQkJCWhlYWRlck1vZGUgPSAnaW4nOwoJCQl9CgkJCWVsc2UgewoJCQkJaGVhZGVyTW9kZSA9ICdiZWxvdyc7CgkJCX0KCgkJCWlmICggZm9yY2VDaGFuZ2UgfHwgaGVhZGVyTW9kZSAhPT0gdGhpcy5zLmhlYWRlck1vZGUgKSB7CgkJCQl0aGlzLl9tb2RlQ2hhbmdlKCBoZWFkZXJNb2RlLCAnaGVhZGVyJywgZm9yY2VDaGFuZ2UgKTsKCQkJfQoKCQkJdGhpcy5faG9yaXpvbnRhbCggJ2hlYWRlcicsIHdpbmRvd0xlZnQgKTsKCQl9CgoJCWlmICggdGhpcy5jLmZvb3RlciAmJiB0aGlzLmRvbS50Zm9vdC5sZW5ndGggKSB7CgkJCWlmICggISB0aGlzLnMuZW5hYmxlICkgewoJCQkJaGVhZGVyTW9kZSA9ICdpbi1wbGFjZSc7CgkJCX0KCQkJZWxzZSBpZiAoICEgcG9zaXRpb24udmlzaWJsZSB8fCB3aW5kb3dUb3AgKyBwb3NpdGlvbi53aW5kb3dIZWlnaHQgPj0gcG9zaXRpb24udGZvb3RCb3R0b20gKyB0aGlzLmMuZm9vdGVyT2Zmc2V0ICkgewoJCQkJZm9vdGVyTW9kZSA9ICdpbi1wbGFjZSc7CgkJCX0KCQkJZWxzZSBpZiAoIHBvc2l0aW9uLndpbmRvd0hlaWdodCArIHdpbmRvd1RvcCA+IHBvc2l0aW9uLnRib2R5VG9wICsgcG9zaXRpb24udGZvb3RIZWlnaHQgKyB0aGlzLmMuZm9vdGVyT2Zmc2V0ICkgewoJCQkJZm9vdGVyTW9kZSA9ICdpbic7CgkJCX0KCQkJZWxzZSB7CgkJCQlmb290ZXJNb2RlID0gJ2Fib3ZlJzsKCQkJfQoKCQkJaWYgKCBmb3JjZUNoYW5nZSB8fCBmb290ZXJNb2RlICE9PSB0aGlzLnMuZm9vdGVyTW9kZSApIHsKCQkJCXRoaXMuX21vZGVDaGFuZ2UoIGZvb3Rlck1vZGUsICdmb290ZXInLCBmb3JjZUNoYW5nZSApOwoJCQl9CgoJCQl0aGlzLl9ob3Jpem9udGFsKCAnZm9vdGVyJywgd2luZG93TGVmdCApOwoJCX0KCX0KfSApOwoKCi8qKgogKiBWZXJzaW9uCiAqIEB0eXBlIHtTdHJpbmd9CiAqIEBzdGF0aWMKICovCkZpeGVkSGVhZGVyLnZlcnNpb24gPSAiMy4xLjYiOwoKLyoqCiAqIERlZmF1bHRzCiAqIEB0eXBlIHtPYmplY3R9CiAqIEBzdGF0aWMKICovCkZpeGVkSGVhZGVyLmRlZmF1bHRzID0gewoJaGVhZGVyOiB0cnVlLAoJZm9vdGVyOiBmYWxzZSwKCWhlYWRlck9mZnNldDogMCwKCWZvb3Rlck9mZnNldDogMAp9OwoKCi8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCiAqIERhdGFUYWJsZXMgaW50ZXJmYWNlcwogKi8KCi8vIEF0dGFjaCBmb3IgY29uc3RydWN0b3IgYWNjZXNzCiQuZm4uZGF0YVRhYmxlLkZpeGVkSGVhZGVyID0gRml4ZWRIZWFkZXI7CiQuZm4uRGF0YVRhYmxlLkZpeGVkSGVhZGVyID0gRml4ZWRIZWFkZXI7CgoKLy8gRGF0YVRhYmxlcyBjcmVhdGlvbiAtIGNoZWNrIGlmIHRoZSBGaXhlZEhlYWRlciBvcHRpb24gaGFzIGJlZW4gZGVmaW5lZCBvbiB0aGUKLy8gdGFibGUgYW5kIGlmIHNvLCBpbml0aWFsaXNlCiQoZG9jdW1lbnQpLm9uKCAnaW5pdC5kdC5kdGZoJywgZnVuY3Rpb24gKGUsIHNldHRpbmdzLCBqc29uKSB7CglpZiAoIGUubmFtZXNwYWNlICE9PSAnZHQnICkgewoJCXJldHVybjsKCX0KCgl2YXIgaW5pdCA9IHNldHRpbmdzLm9Jbml0LmZpeGVkSGVhZGVyOwoJdmFyIGRlZmF1bHRzID0gRGF0YVRhYmxlLmRlZmF1bHRzLmZpeGVkSGVhZGVyOwoKCWlmICggKGluaXQgfHwgZGVmYXVsdHMpICYmICEgc2V0dGluZ3MuX2ZpeGVkSGVhZGVyICkgewoJCXZhciBvcHRzID0gJC5leHRlbmQoIHt9LCBkZWZhdWx0cywgaW5pdCApOwoKCQlpZiAoIGluaXQgIT09IGZhbHNlICkgewoJCQluZXcgRml4ZWRIZWFkZXIoIHNldHRpbmdzLCBvcHRzICk7CgkJfQoJfQp9ICk7CgovLyBEYXRhVGFibGVzIEFQSSBtZXRob2RzCkRhdGFUYWJsZS5BcGkucmVnaXN0ZXIoICdmaXhlZEhlYWRlcigpJywgZnVuY3Rpb24gKCkge30gKTsKCkRhdGFUYWJsZS5BcGkucmVnaXN0ZXIoICdmaXhlZEhlYWRlci5hZGp1c3QoKScsIGZ1bmN0aW9uICgpIHsKCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIGN0eCApIHsKCQl2YXIgZmggPSBjdHguX2ZpeGVkSGVhZGVyOwoKCQlpZiAoIGZoICkgewoJCQlmaC51cGRhdGUoKTsKCQl9Cgl9ICk7Cn0gKTsKCkRhdGFUYWJsZS5BcGkucmVnaXN0ZXIoICdmaXhlZEhlYWRlci5lbmFibGUoKScsIGZ1bmN0aW9uICggZmxhZyApIHsKCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIGN0eCApIHsKCQl2YXIgZmggPSBjdHguX2ZpeGVkSGVhZGVyOwoKCQlmbGFnID0gKCBmbGFnICE9PSB1bmRlZmluZWQgPyBmbGFnIDogdHJ1ZSApOwoJCWlmICggZmggJiYgZmxhZyAhPT0gZmguZW5hYmxlZCgpICkgewoJCQlmaC5lbmFibGUoIGZsYWcgKTsKCQl9Cgl9ICk7Cn0gKTsKCkRhdGFUYWJsZS5BcGkucmVnaXN0ZXIoICdmaXhlZEhlYWRlci5lbmFibGVkKCknLCBmdW5jdGlvbiAoKSB7CglpZiAoIHRoaXMuY29udGV4dC5sZW5ndGggKSB7CgkJdmFyIGZ4ID0gdGhpcy5jb250ZW50WzBdLl9maXhlZEhlYWRlcjsKCgkJaWYgKCBmaCApIHsKCQkJcmV0dXJuIGZoLmVuYWJsZWQoKTsKCQl9Cgl9CgoJcmV0dXJuIGZhbHNlOwp9ICk7CgpEYXRhVGFibGUuQXBpLnJlZ2lzdGVyKCAnZml4ZWRIZWFkZXIuZGlzYWJsZSgpJywgZnVuY3Rpb24gKCApIHsKCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIGN0eCApIHsKCQl2YXIgZmggPSBjdHguX2ZpeGVkSGVhZGVyOwoKCQlpZiAoIGZoICYmIGZoLmVuYWJsZWQoKSApIHsKCQkJZmguZW5hYmxlKCBmYWxzZSApOwoJCX0KCX0gKTsKfSApOwoKJC5lYWNoKCBbJ2hlYWRlcicsICdmb290ZXInXSwgZnVuY3Rpb24gKCBpLCBlbCApIHsKCURhdGFUYWJsZS5BcGkucmVnaXN0ZXIoICdmaXhlZEhlYWRlci4nK2VsKydPZmZzZXQoKScsIGZ1bmN0aW9uICggb2Zmc2V0ICkgewoJCXZhciBjdHggPSB0aGlzLmNvbnRleHQ7CgoJCWlmICggb2Zmc2V0ID09PSB1bmRlZmluZWQgKSB7CgkJCXJldHVybiBjdHgubGVuZ3RoICYmIGN0eFswXS5fZml4ZWRIZWFkZXIgPwoJCQkJY3R4WzBdLl9maXhlZEhlYWRlcltlbCArJ09mZnNldCddKCkgOgoJCQkJdW5kZWZpbmVkOwoJCX0KCgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggY3R4ICkgewoJCQl2YXIgZmggPSBjdHguX2ZpeGVkSGVhZGVyOwoKCQkJaWYgKCBmaCApIHsKCQkJCWZoWyBlbCArJ09mZnNldCcgXSggb2Zmc2V0ICk7CgkJCX0KCQl9ICk7Cgl9ICk7Cn0gKTsKCgpyZXR1cm4gRml4ZWRIZWFkZXI7Cn0pKTsKCgovKiEgS2V5VGFibGUgMi41LjEKICogwqkyMDA5LTIwMTkgU3ByeU1lZGlhIEx0ZCAtIGRhdGF0YWJsZXMubmV0L2xpY2Vuc2UKICovCgovKioKICogQHN1bW1hcnkgICAgIEtleVRhYmxlCiAqIEBkZXNjcmlwdGlvbiBTcHJlYWRzaGVldCBsaWtlIGtleWJvYXJkIG5hdmlnYXRpb24gZm9yIERhdGFUYWJsZXMKICogQHZlcnNpb24gICAgIDIuNS4xCiAqIEBmaWxlICAgICAgICBkYXRhVGFibGVzLmtleVRhYmxlLmpzCiAqIEBhdXRob3IgICAgICBTcHJ5TWVkaWEgTHRkICh3d3cuc3ByeW1lZGlhLmNvLnVrKQogKiBAY29udGFjdCAgICAgd3d3LnNwcnltZWRpYS5jby51ay9jb250YWN0CiAqIEBjb3B5cmlnaHQgICBDb3B5cmlnaHQgMjAwOS0yMDE5IFNwcnlNZWRpYSBMdGQuCiAqCiAqIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgYXZhaWxhYmxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKICogICBNSVQgbGljZW5zZSAtIGh0dHA6Ly9kYXRhdGFibGVzLm5ldC9saWNlbnNlL21pdAogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQogKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBsaWNlbnNlIGZpbGVzIGZvciBkZXRhaWxzLgogKgogKiBGb3IgZGV0YWlscyBwbGVhc2UgcmVmZXIgdG86IGh0dHA6Ly93d3cuZGF0YXRhYmxlcy5uZXQKICovCgooZnVuY3Rpb24oIGZhY3RvcnkgKXsKCWlmICggdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkgewoJCS8vIEFNRAoJCWRlZmluZSggWydqcXVlcnknLCAnZGF0YXRhYmxlcy5uZXQnXSwgZnVuY3Rpb24gKCAkICkgewoJCQlyZXR1cm4gZmFjdG9yeSggJCwgd2luZG93LCBkb2N1bWVudCApOwoJCX0gKTsKCX0KCWVsc2UgaWYgKCB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgKSB7CgkJLy8gQ29tbW9uSlMKCQltb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb290LCAkKSB7CgkJCWlmICggISByb290ICkgewoJCQkJcm9vdCA9IHdpbmRvdzsKCQkJfQoKCQkJaWYgKCAhICQgfHwgISAkLmZuLmRhdGFUYWJsZSApIHsKCQkJCSQgPSByZXF1aXJlKCdkYXRhdGFibGVzLm5ldCcpKHJvb3QsICQpLiQ7CgkJCX0KCgkJCXJldHVybiBmYWN0b3J5KCAkLCByb290LCByb290LmRvY3VtZW50ICk7CgkJfTsKCX0KCWVsc2UgewoJCS8vIEJyb3dzZXIKCQlmYWN0b3J5KCBqUXVlcnksIHdpbmRvdywgZG9jdW1lbnQgKTsKCX0KfShmdW5jdGlvbiggJCwgd2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkICkgewondXNlIHN0cmljdCc7CnZhciBEYXRhVGFibGUgPSAkLmZuLmRhdGFUYWJsZTsKdmFyIG5hbWVzcGFjZUNvdW50ZXIgPSAwOwoKCnZhciBLZXlUYWJsZSA9IGZ1bmN0aW9uICggZHQsIG9wdHMgKSB7CgkvLyBTYW5pdHkgY2hlY2sgdGhhdCB3ZSBhcmUgdXNpbmcgRGF0YVRhYmxlcyAxLjEwIG9yIG5ld2VyCglpZiAoICEgRGF0YVRhYmxlLnZlcnNpb25DaGVjayB8fCAhIERhdGFUYWJsZS52ZXJzaW9uQ2hlY2soICcxLjEwLjgnICkgKSB7CgkJdGhyb3cgJ0tleVRhYmxlIHJlcXVpcmVzIERhdGFUYWJsZXMgMS4xMC44IG9yIG5ld2VyJzsKCX0KCgkvLyBVc2VyIGFuZCBkZWZhdWx0cyBjb25maWd1cmF0aW9uIG9iamVjdAoJdGhpcy5jID0gJC5leHRlbmQoIHRydWUsIHt9LAoJCURhdGFUYWJsZS5kZWZhdWx0cy5rZXlUYWJsZSwKCQlLZXlUYWJsZS5kZWZhdWx0cywKCQlvcHRzCgkpOwoKCS8vIEludGVybmFsIHNldHRpbmdzCgl0aGlzLnMgPSB7CgkJLyoqIEB0eXBlIHtEYXRhVGFibGUuQXBpfSBEYXRhVGFibGVzJyBBUEkgaW5zdGFuY2UgKi8KCQlkdDogbmV3IERhdGFUYWJsZS5BcGkoIGR0ICksCgoJCWVuYWJsZTogdHJ1ZSwKCgkJLyoqIEB0eXBlIHtib29sfSBGbGFnIGZvciBpZiBhIGRyYXcgaXMgdHJpZ2dlcmVkIGJ5IGZvY3VzICovCgkJZm9jdXNEcmF3OiBmYWxzZSwKCgkJLyoqIEB0eXBlIHtib29sfSBGbGFnIHRvIGluZGljYXRlIHdoZW4gd2FpdGluZyBmb3IgYSBkcmF3IHRvIGhhcHBlbi4KCQkgICogICBXaWxsIGlnbm9yZSBrZXkgcHJlc3NlcyBhdCB0aGlzIHBvaW50CgkJICAqLwoJCXdhaXRpbmdGb3JEcmF3OiBmYWxzZSwKCgkJLyoqIEB0eXBlIHtvYmplY3R9IEluZm9ybWF0aW9uIGFib3V0IHRoZSBsYXN0IGNlbGwgdGhhdCB3YXMgZm9jdXNlZCAqLwoJCWxhc3RGb2N1czogbnVsbCwKCgkJLyoqIEB0eXBlIHtzdHJpbmd9IFVuaXF1ZSBuYW1lc3BhY2UgcGVyIGluc3RhbmNlICovCgkJbmFtZXNwYWNlOiAnLmtleVRhYmxlLScrKG5hbWVzcGFjZUNvdW50ZXIrKykKCX07CgoJLy8gRE9NIGl0ZW1zCgl0aGlzLmRvbSA9IHsKCgl9OwoKCS8vIENoZWNrIGlmIHJvdyByZW9yZGVyIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGlzZWQgb24gdGhpcyB0YWJsZQoJdmFyIHNldHRpbmdzID0gdGhpcy5zLmR0LnNldHRpbmdzKClbMF07Cgl2YXIgZXhpc2l0aW5nID0gc2V0dGluZ3Mua2V5dGFibGU7CglpZiAoIGV4aXNpdGluZyApIHsKCQlyZXR1cm4gZXhpc2l0aW5nOwoJfQoKCXNldHRpbmdzLmtleXRhYmxlID0gdGhpczsKCXRoaXMuX2NvbnN0cnVjdG9yKCk7Cn07CgoKJC5leHRlbmQoIEtleVRhYmxlLnByb3RvdHlwZSwgewoJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJICogQVBJIG1ldGhvZHMgZm9yIERhdGFUYWJsZXMgQVBJIGludGVyZmFjZQoJICovCgoJLyoqCgkgKiBCbHVyIHRoZSB0YWJsZSdzIGNlbGwgZm9jdXMKCSAqLwoJYmx1cjogZnVuY3Rpb24gKCkKCXsKCQl0aGlzLl9ibHVyKCk7Cgl9LAoKCS8qKgoJICogRW5hYmxlIGNlbGwgZm9jdXMgZm9yIHRoZSB0YWJsZQoJICoKCSAqIEBwYXJhbSAge3N0cmluZ30gc3RhdGUgQ2FuIGJlIGB0cnVlYCwgYGZhbHNlYCBvciBgLXN0cmluZyBuYXZpZ2F0aW9uLW9ubHlgCgkgKi8KCWVuYWJsZTogZnVuY3Rpb24gKCBzdGF0ZSApCgl7CgkJdGhpcy5zLmVuYWJsZSA9IHN0YXRlOwoJfSwKCgkvKioKCSAqIEZvY3VzIG9uIGEgY2VsbAoJICogQHBhcmFtICB7aW50ZWdlcn0gcm93ICAgIFJvdyBpbmRleAoJICogQHBhcmFtICB7aW50ZWdlcn0gY29sdW1uIENvbHVtbiBpbmRleAoJICovCglmb2N1czogZnVuY3Rpb24gKCByb3csIGNvbHVtbiApCgl7CgkJdGhpcy5fZm9jdXMoIHRoaXMucy5kdC5jZWxsKCByb3csIGNvbHVtbiApICk7Cgl9LAoKCS8qKgoJICogSXMgdGhlIGNlbGwgZm9jdXNlZAoJICogQHBhcmFtICB7b2JqZWN0fSBjZWxsIENlbGwgaW5kZXggdG8gY2hlY2sKCSAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIGZvY3VzZWQsIGZhbHNlIG90aGVyd2lzZQoJICovCglmb2N1c2VkOiBmdW5jdGlvbiAoIGNlbGwgKQoJewoJCXZhciBsYXN0Rm9jdXMgPSB0aGlzLnMubGFzdEZvY3VzOwoKCQlpZiAoICEgbGFzdEZvY3VzICkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQl2YXIgbGFzdElkeCA9IHRoaXMucy5sYXN0Rm9jdXMuY2VsbC5pbmRleCgpOwoJCXJldHVybiBjZWxsLnJvdyA9PT0gbGFzdElkeC5yb3cgJiYgY2VsbC5jb2x1bW4gPT09IGxhc3RJZHguY29sdW1uOwoJfSwKCgoJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJICogQ29uc3RydWN0b3IKCSAqLwoKCS8qKgoJICogSW5pdGlhbGlzZSB0aGUgS2V5VGFibGUgaW5zdGFuY2UKCSAqCgkgKiBAcHJpdmF0ZQoJICovCglfY29uc3RydWN0b3I6IGZ1bmN0aW9uICgpCgl7CgkJdGhpcy5fdGFiSW5wdXQoKTsKCgkJdmFyIHRoYXQgPSB0aGlzOwoJCXZhciBkdCA9IHRoaXMucy5kdDsKCQl2YXIgdGFibGUgPSAkKCBkdC50YWJsZSgpLm5vZGUoKSApOwoJCXZhciBuYW1lc3BhY2UgPSB0aGlzLnMubmFtZXNwYWNlOwoJCXZhciBlZGl0b3JCbG9jayA9IGZhbHNlOwoKCQkvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHRoZSBjZWxsIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgdGFibGUKCQlpZiAoIHRhYmxlLmNzcygncG9zaXRpb24nKSA9PT0gJ3N0YXRpYycgKSB7CgkJCXRhYmxlLmNzcyggJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJyApOwoJCX0KCgkJLy8gQ2xpY2sgdG8gZm9jdXMKCQkkKCBkdC50YWJsZSgpLmJvZHkoKSApLm9uKCAnY2xpY2snK25hbWVzcGFjZSwgJ3RoLCB0ZCcsIGZ1bmN0aW9uIChlKSB7CgkJCWlmICggdGhhdC5zLmVuYWJsZSA9PT0gZmFsc2UgKSB7CgkJCQlyZXR1cm47CgkJCX0KCgkJCXZhciBjZWxsID0gZHQuY2VsbCggdGhpcyApOwoKCQkJaWYgKCAhIGNlbGwuYW55KCkgKSB7CgkJCQlyZXR1cm47CgkJCX0KCgkJCXRoYXQuX2ZvY3VzKCBjZWxsLCBudWxsLCBmYWxzZSwgZSApOwoJCX0gKTsKCgkJLy8gS2V5IGV2ZW50cwoJCSQoIGRvY3VtZW50ICkub24oICdrZXlkb3duJytuYW1lc3BhY2UsIGZ1bmN0aW9uIChlKSB7CgkJCWlmICggISBlZGl0b3JCbG9jayApIHsKCQkJCXRoYXQuX2tleSggZSApOwoJCQl9CgkJfSApOwoKCQkvLyBDbGljayBibHVyCgkJaWYgKCB0aGlzLmMuYmx1cmFibGUgKSB7CgkJCSQoIGRvY3VtZW50ICkub24oICdtb3VzZWRvd24nK25hbWVzcGFjZSwgZnVuY3Rpb24gKCBlICkgewoJCQkJLy8gQ2xpY2sgb24gdGhlIHNlYXJjaCBpbnB1dCB3aWxsIGJsdXIgZm9jdXMKCQkJCWlmICggJChlLnRhcmdldCkucGFyZW50cyggJy5kYXRhVGFibGVzX2ZpbHRlcicgKS5sZW5ndGggKSB7CgkJCQkJdGhhdC5fYmx1cigpOwoJCQkJfQoKCQkJCS8vIElmIHRoZSBjbGljayB3YXMgaW5zaWRlIHRoZSBEYXRhVGFibGVzIGNvbnRhaW5lciwgZG9uJ3QgYmx1cgoJCQkJaWYgKCAkKGUudGFyZ2V0KS5wYXJlbnRzKCkuZmlsdGVyKCBkdC50YWJsZSgpLmNvbnRhaW5lcigpICkubGVuZ3RoICkgewoJCQkJCXJldHVybjsKCQkJCX0KCgkJCQkvLyBEb24ndCBibHVyIGluIEVkaXRvciBmb3JtCgkJCQlpZiAoICQoZS50YXJnZXQpLnBhcmVudHMoJ2Rpdi5EVEUnKS5sZW5ndGggKSB7CgkJCQkJcmV0dXJuOwoJCQkJfQoKCQkJCS8vIE9yIGFuIEVkaXRvciBkYXRlIGlucHV0CgkJCQlpZiAoICQoZS50YXJnZXQpLnBhcmVudHMoJ2Rpdi5lZGl0b3ItZGF0ZXRpbWUnKS5sZW5ndGggKSB7CgkJCQkJcmV0dXJuOwoJCQkJfQoKCQkJCS8vSWYgdGhlIGNsaWNrIHdhcyBpbnNpZGUgdGhlIGZpeGVkIGNvbHVtbnMgY29udGFpbmVyLCBkb24ndCBibHVyCgkJCQlpZiAoICQoZS50YXJnZXQpLnBhcmVudHMoKS5maWx0ZXIoJy5EVEZDX0Nsb25lZCcpLmxlbmd0aCApIHsKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJdGhhdC5fYmx1cigpOwoJCQl9ICk7CgkJfQoKCQlpZiAoIHRoaXMuYy5lZGl0b3IgKSB7CgkJCXZhciBlZGl0b3IgPSB0aGlzLmMuZWRpdG9yOwoKCQkJLy8gTmVlZCB0byBkaXNhYmxlIEtleVRhYmxlIHdoZW4gdGhlIG1haW4gZWRpdG9yIGlzIHNob3duCgkJCWVkaXRvci5vbiggJ29wZW4ua2V5VGFibGVNYWluJywgZnVuY3Rpb24gKGUsIG1vZGUsIGFjdGlvbikgewoJCQkJaWYgKCBtb2RlICE9PSAnaW5saW5lJyAmJiB0aGF0LnMuZW5hYmxlICkgewoJCQkJCXRoYXQuZW5hYmxlKCBmYWxzZSApOwoKCQkJCQllZGl0b3Iub25lKCAnY2xvc2UnK25hbWVzcGFjZSwgZnVuY3Rpb24gKCkgewoJCQkJCQl0aGF0LmVuYWJsZSggdHJ1ZSApOwoJCQkJCX0gKTsKCQkJCX0KCQkJfSApOwoKCQkJaWYgKCB0aGlzLmMuZWRpdE9uRm9jdXMgKSB7CgkJCQlkdC5vbiggJ2tleS1mb2N1cycrbmFtZXNwYWNlKycga2V5LXJlZm9jdXMnK25hbWVzcGFjZSwgZnVuY3Rpb24gKCBlLCBkdCwgY2VsbCwgb3JpZyApIHsKCQkJCQl0aGF0Ll9lZGl0b3IoIG51bGwsIG9yaWcsIHRydWUgKTsKCQkJCX0gKTsKCQkJfQoKCQkJLy8gQWN0aXZhdGUgRWRpdG9yIHdoZW4gYSBrZXkgaXMgcHJlc3NlZCAod2lsbCBiZSBpZ25vcmVkLCBpZgoJCQkvLyBhbHJlYWR5IGFjdGl2ZSkuCgkJCWR0Lm9uKCAna2V5JytuYW1lc3BhY2UsIGZ1bmN0aW9uICggZSwgZHQsIGtleSwgY2VsbCwgb3JpZyApIHsKCQkJCXRoYXQuX2VkaXRvcigga2V5LCBvcmlnLCBmYWxzZSApOwoJCQl9ICk7CgoJCQkvLyBBY3RpdmUgZWRpdGluZyBvbiBkb3VibGUgY2xpY2sgLSBpdCB3aWxsIGFscmVhZHkgaGF2ZSBmb2N1cyBmcm9tCgkJCS8vIHRoZSBjbGljayBldmVudCBoYW5kbGVyIGFib3ZlCgkJCSQoIGR0LnRhYmxlKCkuYm9keSgpICkub24oICdkYmxjbGljaycrbmFtZXNwYWNlLCAndGgsIHRkJywgZnVuY3Rpb24gKGUpIHsKCQkJCWlmICggdGhhdC5zLmVuYWJsZSA9PT0gZmFsc2UgKSB7CgkJCQkJcmV0dXJuOwoJCQkJfQoKCQkJCXZhciBjZWxsID0gZHQuY2VsbCggdGhpcyApOwoKCQkJCWlmICggISBjZWxsLmFueSgpICkgewoJCQkJCXJldHVybjsKCQkJCX0KCgkJCQl0aGF0Ll9lZGl0b3IoIG51bGwsIGUsIHRydWUgKTsKCQkJfSApOwoKCQkJLy8gV2hpbGUgRWRpdG9yIGlzIGJ1c3kgcHJvY2Vzc2luZywgd2UgZG9uJ3Qgd2FudCB0byBwcm9jZXNzIGFueSBrZXkgZXZlbnRzCgkJCWVkaXRvcgoJCQkJLm9uKCdwcmVTdWJtaXQnLCBmdW5jdGlvbiAoKSB7CgkJCQkJZWRpdG9yQmxvY2sgPSB0cnVlOwoJCQkJfSApCgkJCQkub24oJ3ByZVN1Ym1pdENhbmNlbGxlZCcsIGZ1bmN0aW9uICgpIHsKCQkJCQllZGl0b3JCbG9jayA9IGZhbHNlOwoJCQkJfSApCgkJCQkub24oJ3N1Ym1pdENvbXBsZXRlJywgZnVuY3Rpb24gKCkgewoJCQkJCWVkaXRvckJsb2NrID0gZmFsc2U7CgkJCQl9ICk7CgkJfQoKCQkvLyBTdGF2ZSBzYXZpbmcKCQlpZiAoIGR0LnNldHRpbmdzKClbMF0ub0ZlYXR1cmVzLmJTdGF0ZVNhdmUgKSB7CgkJCWR0Lm9uKCAnc3RhdGVTYXZlUGFyYW1zJytuYW1lc3BhY2UsIGZ1bmN0aW9uIChlLCBzLCBkKSB7CgkJCQlkLmtleVRhYmxlID0gdGhhdC5zLmxhc3RGb2N1cyA/CgkJCQkJdGhhdC5zLmxhc3RGb2N1cy5jZWxsLmluZGV4KCkgOgoJCQkJCW51bGw7CgkJCX0gKTsKCQl9CgoJCS8vIFJlZHJhdyAtIHJldGFpbiBmb2N1cyBvbiB0aGUgY3VycmVudCBjZWxsCgkJZHQub24oICdkcmF3JytuYW1lc3BhY2UsIGZ1bmN0aW9uIChlKSB7CgkJCWlmICggdGhhdC5zLmZvY3VzRHJhdyApIHsKCQkJCXJldHVybjsKCQkJfQoKCQkJdmFyIGxhc3RGb2N1cyA9IHRoYXQucy5sYXN0Rm9jdXM7CgoJCQlpZiAoIGxhc3RGb2N1cyAmJiBsYXN0Rm9jdXMubm9kZSAmJiAkKGxhc3RGb2N1cy5ub2RlKS5jbG9zZXN0KCdib2R5JykgPT09IGRvY3VtZW50LmJvZHkgKSB7CgkJCQl2YXIgcmVsYXRpdmUgPSB0aGF0LnMubGFzdEZvY3VzLnJlbGF0aXZlOwoJCQkJdmFyIGluZm8gPSBkdC5wYWdlLmluZm8oKTsKCQkJCXZhciByb3cgPSByZWxhdGl2ZS5yb3cgKyBpbmZvLnN0YXJ0OwoKCQkJCWlmICggaW5mby5yZWNvcmRzRGlzcGxheSA9PT0gMCApIHsKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJLy8gUmV2ZXJzZSBpZiBuZWVkZWQKCQkJCWlmICggcm93ID49IGluZm8ucmVjb3Jkc0Rpc3BsYXkgKSB7CgkJCQkJcm93ID0gaW5mby5yZWNvcmRzRGlzcGxheSAtIDE7CgkJCQl9CgoJCQkJdGhhdC5fZm9jdXMoIHJvdywgcmVsYXRpdmUuY29sdW1uLCB0cnVlLCBlICk7CgkJCX0KCQl9ICk7CgoJCS8vIENsaXBib2FyZCBzdXBwb3J0CgkJaWYgKCB0aGlzLmMuY2xpcGJvYXJkICkgewoJCQl0aGlzLl9jbGlwYm9hcmQoKTsKCQl9CgoJCWR0Lm9uKCAnZGVzdHJveScrbmFtZXNwYWNlLCBmdW5jdGlvbiAoKSB7CgkJCXRoYXQuX2JsdXIoIHRydWUgKTsKCgkJCS8vIEV2ZW50IHRpZHkgdXAKCQkJZHQub2ZmKCBuYW1lc3BhY2UgKTsKCgkJCSQoIGR0LnRhYmxlKCkuYm9keSgpICkKCQkJCS5vZmYoICdjbGljaycrbmFtZXNwYWNlLCAndGgsIHRkJyApCgkJCQkub2ZmKCAnZGJsY2xpY2snK25hbWVzcGFjZSwgJ3RoLCB0ZCcgKTsKCgkJCSQoIGRvY3VtZW50ICkKCQkJCS5vZmYoICdtb3VzZWRvd24nK25hbWVzcGFjZSApCgkJCQkub2ZmKCAna2V5ZG93bicrbmFtZXNwYWNlICkKCQkJCS5vZmYoICdjb3B5JytuYW1lc3BhY2UgKQoJCQkJLm9mZiggJ3Bhc3RlJytuYW1lc3BhY2UgKTsKCQl9ICk7CgoJCS8vIEluaXRpYWwgZm9jdXMgY29tZXMgZnJvbSBzdGF0ZSBvciBvcHRpb25zCgkJdmFyIHN0YXRlID0gZHQuc3RhdGUubG9hZGVkKCk7CgoJCWlmICggc3RhdGUgJiYgc3RhdGUua2V5VGFibGUgKSB7CgkJCS8vIFdhaXQgdW50aWwgaW5pdCBpcyBkb25lCgkJCWR0Lm9uZSggJ2luaXQnLCBmdW5jdGlvbiAoKSB7CgkJCQl2YXIgY2VsbCA9IGR0LmNlbGwoIHN0YXRlLmtleVRhYmxlICk7CgoJCQkJLy8gRW5zdXJlIHRoYXQgdGhlIHNhdmVkIGNlbGwgc3RpbGwgZXhpc3RzCgkJCQlpZiAoIGNlbGwuYW55KCkgKSB7CgkJCQkJY2VsbC5mb2N1cygpOwoJCQkJfQoJCQl9ICk7CgkJfQoJCWVsc2UgaWYgKCB0aGlzLmMuZm9jdXMgKSB7CgkJCWR0LmNlbGwoIHRoaXMuYy5mb2N1cyApLmZvY3VzKCk7CgkJfQoJfSwKCgoJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJICogUHJpdmF0ZSBtZXRob2RzCgkgKi8KCgkvKioKCSAqIEJsdXIgdGhlIGNvbnRyb2wKCSAqCgkgKiBAcGFyYW0ge2Jvb2xlYW59IFtub0V2ZW50cz1mYWxzZV0gRG9uJ3QgdHJpZ2dlciB1cGRhdGVzIC8gZXZlbnRzIChmb3IgZGVzdHJveWluZykKCSAqIEBwcml2YXRlCgkgKi8KCV9ibHVyOiBmdW5jdGlvbiAobm9FdmVudHMpCgl7CgkJaWYgKCAhIHRoaXMucy5lbmFibGUgfHwgISB0aGlzLnMubGFzdEZvY3VzICkgewoJCQlyZXR1cm47CgkJfQoKCQl2YXIgY2VsbCA9IHRoaXMucy5sYXN0Rm9jdXMuY2VsbDsKCgkJJCggY2VsbC5ub2RlKCkgKS5yZW1vdmVDbGFzcyggdGhpcy5jLmNsYXNzTmFtZSApOwoJCXRoaXMucy5sYXN0Rm9jdXMgPSBudWxsOwoKCQlpZiAoICEgbm9FdmVudHMgKSB7CgkJCXRoaXMuX3VwZGF0ZUZpeGVkQ29sdW1ucyhjZWxsLmluZGV4KCkuY29sdW1uKTsKCgkJCXRoaXMuX2VtaXRFdmVudCggJ2tleS1ibHVyJywgWyB0aGlzLnMuZHQsIGNlbGwgXSApOwoJCX0KCX0sCgoKCS8qKgoJICogQ2xpcGJvYXJkIGludGVyYWN0aW9uIGhhbmRsZXJzCgkgKgoJICogQHByaXZhdGUKCSAqLwoJX2NsaXBib2FyZDogZnVuY3Rpb24gKCkgewoJCXZhciBkdCA9IHRoaXMucy5kdDsKCQl2YXIgdGhhdCA9IHRoaXM7CgkJdmFyIG5hbWVzcGFjZSA9IHRoaXMucy5uYW1lc3BhY2U7CgoJCS8vIElFOCBkb2Vzbid0IHN1cHBvcnQgZ2V0dGluZyBzZWxlY3RlZCB0ZXh0CgkJaWYgKCAhIHdpbmRvdy5nZXRTZWxlY3Rpb24gKSB7CgkJCXJldHVybjsKCQl9CgoJCSQoZG9jdW1lbnQpLm9uKCAnY29weScrbmFtZXNwYWNlLCBmdW5jdGlvbiAoZWpxKSB7CgkJCXZhciBlID0gZWpxLm9yaWdpbmFsRXZlbnQ7CgkJCXZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKTsKCQkJdmFyIGZvY3VzZWQgPSB0aGF0LnMubGFzdEZvY3VzOwoKCQkJLy8gT25seSBjb3B5IGNlbGwgdGV4dCB0byBjbGlwYm9hcmQgaWYgdGhlcmUgaXMgbm8gb3RoZXIgc2VsZWN0aW9uCgkJCS8vIGFuZCB0aGVyZSBpcyBhIGZvY3VzZWQgY2VsbAoJCQlpZiAoICEgc2VsZWN0aW9uICYmIGZvY3VzZWQgKSB7CgkJCQllLmNsaXBib2FyZERhdGEuc2V0RGF0YSgKCQkJCQkndGV4dC9wbGFpbicsCgkJCQkJZm9jdXNlZC5jZWxsLnJlbmRlciggdGhhdC5jLmNsaXBib2FyZE9ydGhvZ29uYWwgKQoJCQkJKTsKCQkJCWUucHJldmVudERlZmF1bHQoKTsKCQkJfQoJCX0gKTsKCgkJJChkb2N1bWVudCkub24oICdwYXN0ZScrbmFtZXNwYWNlLCBmdW5jdGlvbiAoZWpxKSB7CgkJCXZhciBlID0gZWpxLm9yaWdpbmFsRXZlbnQ7CgkJCXZhciBmb2N1c2VkID0gdGhhdC5zLmxhc3RGb2N1czsKCQkJdmFyIGFjdGl2ZUVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsKCQkJdmFyIGVkaXRvciA9IHRoYXQuYy5lZGl0b3I7CgkJCXZhciBwYXN0ZWRUZXh0OwoKCQkJaWYgKCBmb2N1c2VkICYmICghIGFjdGl2ZUVsIHx8IGFjdGl2ZUVsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdib2R5JykgKSB7CgkJCQllLnByZXZlbnREZWZhdWx0KCk7CgoJCQkJaWYgKCB3aW5kb3cuY2xpcGJvYXJkRGF0YSAmJiB3aW5kb3cuY2xpcGJvYXJkRGF0YS5nZXREYXRhICkgewoJCQkJCS8vIElFCgkJCQkJcGFzdGVkVGV4dCA9IHdpbmRvdy5jbGlwYm9hcmREYXRhLmdldERhdGEoJ1RleHQnKTsKCQkJCX0KCQkJCWVsc2UgaWYgKCBlLmNsaXBib2FyZERhdGEgJiYgZS5jbGlwYm9hcmREYXRhLmdldERhdGEgKSB7CgkJCQkJLy8gRXZlcnl0aGluZyBlbHNlCgkJCQkJcGFzdGVkVGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJyk7CgkJCQl9CgoJCQkJaWYgKCBlZGl0b3IgKSB7CgkJCQkJLy8gR290IEVkaXRvciAtIG5lZWQgdG8gYWN0aXZhdGUgaW5saW5lIGVkaXRpbmcsCgkJCQkJLy8gc2V0IHRoZSB2YWx1ZSBhbmQgc3VibWl0CgkJCQkJZWRpdG9yCgkJCQkJCS5pbmxpbmUoIGZvY3VzZWQuY2VsbC5pbmRleCgpICkKCQkJCQkJLnNldCggZWRpdG9yLmRpc3BsYXllZCgpWzBdLCBwYXN0ZWRUZXh0ICkKCQkJCQkJLnN1Ym1pdCgpOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJLy8gTm8gZWRpdG9yLCBzbyBqdXN0IGR1bXAgdGhlIGRhdGEgaW4KCQkJCQlmb2N1c2VkLmNlbGwuZGF0YSggcGFzdGVkVGV4dCApOwoJCQkJCWR0LmRyYXcoZmFsc2UpOwoJCQkJfQoJCQl9CgkJfSApOwoJfSwKCgoJLyoqCgkgKiBHZXQgYW4gYXJyYXkgb2YgdGhlIGNvbHVtbiBpbmRleGVzIHRoYXQgS2V5VGFibGUgY2FuIG9wZXJhdGUgb24uIFRoaXMKCSAqIGlzIGEgbWVyZ2Ugb2YgdGhlIHVzZXIgc3VwcGxpZWQgY29sdW1ucyBhbmQgdGhlIHZpc2libGUgY29sdW1ucy4KCSAqCgkgKiBAcHJpdmF0ZQoJICovCglfY29sdW1uczogZnVuY3Rpb24gKCkKCXsKCQl2YXIgZHQgPSB0aGlzLnMuZHQ7CgkJdmFyIHVzZXIgPSBkdC5jb2x1bW5zKCB0aGlzLmMuY29sdW1ucyApLmluZGV4ZXMoKTsKCQl2YXIgb3V0ID0gW107CgoJCWR0LmNvbHVtbnMoICc6dmlzaWJsZScgKS5ldmVyeSggZnVuY3Rpb24gKGkpIHsKCQkJaWYgKCB1c2VyLmluZGV4T2YoIGkgKSAhPT0gLTEgKSB7CgkJCQlvdXQucHVzaCggaSApOwoJCQl9CgkJfSApOwoKCQlyZXR1cm4gb3V0OwoJfSwKCgoJLyoqCgkgKiBQZXJmb3JtIGV4Y2VsIGxpa2UgbmF2aWdhdGlvbiBmb3IgRWRpdG9yIGJ5IHRyaWdnZXJpbmcgYW4gZWRpdCBvbiBrZXkKCSAqIHByZXNzCgkgKgoJICogQHBhcmFtICB7aW50ZWdlcn0ga2V5IEtleSBjb2RlIGZvciB0aGUgcHJlc3NlZCBrZXkKCSAqIEBwYXJhbSAge29iamVjdH0gb3JpZyBPcmlnaW5hbCBldmVudAoJICogQHByaXZhdGUKCSAqLwoJX2VkaXRvcjogZnVuY3Rpb24gKCBrZXksIG9yaWcsIGhhcmRFZGl0ICkKCXsKCQl2YXIgdGhhdCA9IHRoaXM7CgkJdmFyIGR0ID0gdGhpcy5zLmR0OwoJCXZhciBlZGl0b3IgPSB0aGlzLmMuZWRpdG9yOwoJCXZhciBlZGl0Q2VsbCA9IHRoaXMucy5sYXN0Rm9jdXMuY2VsbDsKCQl2YXIgbmFtZXNwYWNlID0gdGhpcy5zLm5hbWVzcGFjZTsKCgkJLy8gRG8gbm90aGluZyBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIGlubGluZSBlZGl0IGluIHRoaXMgY2VsbAoJCWlmICggJCgnZGl2LkRURScsIGVkaXRDZWxsLm5vZGUoKSkubGVuZ3RoICkgewoJCQlyZXR1cm47CgkJfQoKCQkvLyBEb24ndCBhY3RpdmF0ZSBFZGl0b3Igb24gY29udHJvbCBrZXkgcHJlc3NlcwoJCWlmICgga2V5ICE9PSBudWxsICYmICgKCQkJKGtleSA+PSAweDAwICYmIGtleSA8PSAweDA5KSB8fAoJCQlrZXkgPT09IDB4MGIgfHwKCQkJa2V5ID09PSAweDBjIHx8CgkJCShrZXkgPj0gMHgwZSAmJiBrZXkgPD0gMHgxZikgfHwKCQkJKGtleSA+PSAweDcwICYmIGtleSA8PSAweDdiKSB8fAoJCQkoa2V5ID49IDB4N2YgJiYga2V5IDw9IDB4OWYpCgkJKSApIHsKCQkJcmV0dXJuOwoJCX0KCgkJb3JpZy5zdG9wUHJvcGFnYXRpb24oKTsKCgkJLy8gUmV0dXJuIGtleSBzaG91bGQgZG8gbm90aGluZyAtIGZvciB0ZXh0YXJlYXMgaXQgd291bGQgZW1wdHkgdGhlCgkJLy8gY29udGVudHMKCQlpZiAoIGtleSA9PT0gMTMgKSB7CgkJCW9yaWcucHJldmVudERlZmF1bHQoKTsKCQl9CgoJCXZhciBlZGl0SW5saW5lID0gZnVuY3Rpb24gKCkgewoJCQllZGl0b3IKCQkJCS5vbmUoICdvcGVuJytuYW1lc3BhY2UsIGZ1bmN0aW9uICgpIHsKCQkJCQkvLyBSZW1vdmUgY2FuY2VsIG9wZW4KCQkJCQllZGl0b3Iub2ZmKCAnY2FuY2VsT3BlbicrbmFtZXNwYWNlICk7CgoJCQkJCS8vIEV4Y2VsIHN0eWxlIC0gc2VsZWN0IGFsbCB0ZXh0CgkJCQkJaWYgKCAhIGhhcmRFZGl0ICkgewoJCQkJCQkkKCdkaXYuRFRFX0ZpZWxkX0lucHV0Q29udHJvbCBpbnB1dCwgZGl2LkRURV9GaWVsZF9JbnB1dENvbnRyb2wgdGV4dGFyZWEnKS5zZWxlY3QoKTsKCQkJCQl9CgoJCQkJCS8vIFJlZHVjZSB0aGUga2V5cyB0aGUgS2V5cyBsaXN0ZW5zIGZvcgoJCQkJCWR0LmtleXMuZW5hYmxlKCBoYXJkRWRpdCA/ICd0YWItb25seScgOiAnbmF2aWdhdGlvbi1vbmx5JyApOwoKCQkJCQkvLyBPbiBibHVyIG9mIHRoZSBuYXZpZ2F0aW9uIHN1Ym1pdAoJCQkJCWR0Lm9uKCAna2V5LWJsdXIuZWRpdG9yJywgZnVuY3Rpb24gKGUsIGR0LCBjZWxsKSB7CgkJCQkJCWlmICggZWRpdG9yLmRpc3BsYXllZCgpICYmIGNlbGwubm9kZSgpID09PSBlZGl0Q2VsbC5ub2RlKCkgKSB7CgkJCQkJCQllZGl0b3Iuc3VibWl0KCk7CgkJCQkJCX0KCQkJCQl9ICk7CgoJCQkJCS8vIEhpZ2hsaWdodCB0aGUgY2VsbCBhIGRpZmZlcmVudCBjb2xvdXIgb24gZnVsbCBlZGl0CgkJCQkJaWYgKCBoYXJkRWRpdCApIHsKCQkJCQkJJCggZHQudGFibGUoKS5jb250YWluZXIoKSApLmFkZENsYXNzKCdkdGstZm9jdXMtYWx0Jyk7CgkJCQkJfQoKCQkJCQkvLyBJZiB0aGUgZGV2IGNhbmNlbHMgdGhlIHN1Ym1pdCwgd2UgbmVlZCB0byByZXR1cm4gZm9jdXMKCQkJCQllZGl0b3Iub24oICdwcmVTdWJtaXRDYW5jZWxsZWQnK25hbWVzcGFjZSwgZnVuY3Rpb24gKCkgewoJCQkJCQlzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7CgkJCQkJCQl0aGF0Ll9mb2N1cyggZWRpdENlbGwsIG51bGwsIGZhbHNlICk7CgkJCQkJCX0sIDUwICk7CgkJCQkJfSApOwoKCQkJCQllZGl0b3Iub24oICdzdWJtaXRVbnN1Y2Nlc3NmdWwnK25hbWVzcGFjZSwgZnVuY3Rpb24gKCkgewoJCQkJCQl0aGF0Ll9mb2N1cyggZWRpdENlbGwsIG51bGwsIGZhbHNlICk7CgkJCQkJfSApOwoKCQkJCQkvLyBSZXN0b3JlIGZ1bGwga2V5IG5hdmlnYXRpb24gb24gY2xvc2UKCQkJCQllZGl0b3Iub25lKCAnY2xvc2UnLCBmdW5jdGlvbiAoKSB7CgkJCQkJCWR0LmtleXMuZW5hYmxlKCB0cnVlICk7CgkJCQkJCWR0Lm9mZiggJ2tleS1ibHVyLmVkaXRvcicgKTsKCQkJCQkJZWRpdG9yLm9mZiggbmFtZXNwYWNlICk7CgkJCQkJCSQoIGR0LnRhYmxlKCkuY29udGFpbmVyKCkgKS5yZW1vdmVDbGFzcygnZHRrLWZvY3VzLWFsdCcpOwoJCQkJCX0gKTsKCQkJCX0gKQoJCQkJLm9uZSggJ2NhbmNlbE9wZW4nK25hbWVzcGFjZSwgZnVuY3Rpb24gKCkgewoJCQkJCS8vIGBwcmVPcGVuYCBjYW4gY2FuY2VsIHRoZSBkaXNwbGF5IG9mIHRoZSBmb3JtLCBzbyBpdAoJCQkJCS8vIG1pZ2h0IGJlIHRoYXQgdGhlIG9wZW4gZXZlbnQgaGFuZGxlciBpc24ndCBuZWVkZWQKCQkJCQllZGl0b3Iub2ZmKCBuYW1lc3BhY2UgKTsKCQkJCX0gKQoJCQkJLmlubGluZSggZWRpdENlbGwuaW5kZXgoKSApOwoJCX07CgoJCS8vIEVkaXRvciAxLjcgbGlzdGVucyBmb3IgYHJldHVybmAgb24ga2V5dXAsIHNvIGlmIHJldHVybiBpcyB0aGUgdHJpZ2dlcgoJCS8vIGtleSwgd2UgbmVlZCB0byB3YWl0IGZvciBga2V5dXBgIG90aGVyd2lzZSBFZGl0b3Igd291bGQganVzdCBzdWJtaXQKCQkvLyB0aGUgY29udGVudCB0cmlnZ2VyZWQgYnkgdGhpcyBrZXlwcmVzcy4KCQlpZiAoIGtleSA9PT0gMTMgKSB7CgkJCWhhcmRFZGl0ID0gdHJ1ZTsKCgkJCSQoZG9jdW1lbnQpLm9uZSggJ2tleXVwJywgZnVuY3Rpb24gKCkgeyAvLyBpbW1lZGlhdGVseSByZW1vdmVkCgkJCQllZGl0SW5saW5lKCk7CgkJCX0gKTsKCQl9CgkJZWxzZSB7CgkJCWVkaXRJbmxpbmUoKTsKCQl9Cgl9LAoKCgkvKioKCSAqIEVtaXQgYW4gZXZlbnQgb24gdGhlIERhdGFUYWJsZSBmb3IgbGlzdGVuZXJzCgkgKgoJICogQHBhcmFtICB7c3RyaW5nfSBuYW1lIEV2ZW50IG5hbWUKCSAqIEBwYXJhbSAge2FycmF5fSBhcmdzIEV2ZW50IGFyZ3VtZW50cwoJICogQHByaXZhdGUKCSAqLwoJX2VtaXRFdmVudDogZnVuY3Rpb24gKCBuYW1lLCBhcmdzICkKCXsKCQl0aGlzLnMuZHQuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggY3R4LCBpICkgewoJCQkkKGN0eC5uVGFibGUpLnRyaWdnZXJIYW5kbGVyKCBuYW1lLCBhcmdzICk7CgkJfSApOwoJfSwKCgoJLyoqCgkgKiBGb2N1cyBvbiBhIHBhcnRpY3VsYXIgY2VsbCwgc2hpZnRpbmcgdGhlIHRhYmxlJ3MgcGFnaW5nIGlmIHJlcXVpcmVkCgkgKgoJICogQHBhcmFtICB7RGF0YVRhYmxlcy5BcGl8aW50ZWdlcn0gcm93IENhbiBiZSBnaXZlbiBhcyBhbiBBUEkgaW5zdGFuY2UgdGhhdAoJICogICBjb250YWlucyB0aGUgY2VsbCB0byBmb2N1cyBvciBhcyBhbiBpbnRlZ2VyLiBBcyB0aGUgbGF0dGVyIGl0IGlzIHRoZQoJICogICB2aXNpYmxlIHJvdyBpbmRleCAoZnJvbSB0aGUgd2hvbGUgZGF0YSBzZXQpIC0gTk9UIHRoZSBkYXRhIGluZGV4CgkgKiBAcGFyYW0gIHtpbnRlZ2VyfSBbY29sdW1uXSBOb3QgcmVxdWlyZWQgaWYgYSBjZWxsIGlzIGdpdmVuIGFzIHRoZSBmaXJzdAoJICogICBwYXJhbWV0ZXIuIE90aGVyd2lzZSB0aGlzIGlzIHRoZSBjb2x1bW4gZGF0YSBpbmRleCBmb3IgdGhlIGNlbGwgdG8KCSAqICAgZm9jdXMgb24KCSAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NoaWZ0PXRydWVdIFNob3VsZCB0aGUgdmlld3BvcnQgYmUgbW92ZWQgdG8gc2hvdyBjZWxsCgkgKiBAcHJpdmF0ZQoJICovCglfZm9jdXM6IGZ1bmN0aW9uICggcm93LCBjb2x1bW4sIHNoaWZ0LCBvcmlnaW5hbEV2ZW50ICkKCXsKCQl2YXIgdGhhdCA9IHRoaXM7CgkJdmFyIGR0ID0gdGhpcy5zLmR0OwoJCXZhciBwYWdlSW5mbyA9IGR0LnBhZ2UuaW5mbygpOwoJCXZhciBsYXN0Rm9jdXMgPSB0aGlzLnMubGFzdEZvY3VzOwoKCQlpZiAoICEgb3JpZ2luYWxFdmVudCkgewoJCQlvcmlnaW5hbEV2ZW50ID0gbnVsbDsKCQl9CgoJCWlmICggISB0aGlzLnMuZW5hYmxlICkgewoJCQlyZXR1cm47CgkJfQoKCQlpZiAoIHR5cGVvZiByb3cgIT09ICdudW1iZXInICkgewoJCQkvLyBJdHMgYW4gQVBJIGluc3RhbmNlIC0gY2hlY2sgdGhhdCB0aGVyZSBpcyBhY3R1YWxseSBhIHJvdwoJCQlpZiAoICEgcm93LmFueSgpICkgewoJCQkJcmV0dXJuOwoJCQl9CgoJCQkvLyBDb252ZXJ0IHRoZSBjZWxsIHRvIGEgcm93IGFuZCBjb2x1bW4KCQkJdmFyIGluZGV4ID0gcm93LmluZGV4KCk7CgkJCWNvbHVtbiA9IGluZGV4LmNvbHVtbjsKCQkJcm93ID0gZHQKCQkJCS5yb3dzKCB7IGZpbHRlcjogJ2FwcGxpZWQnLCBvcmRlcjogJ2FwcGxpZWQnIH0gKQoJCQkJLmluZGV4ZXMoKQoJCQkJLmluZGV4T2YoIGluZGV4LnJvdyApOwoJCQkKCQkJLy8gRG9uJ3QgZm9jdXMgcm93cyB0aGF0IHdlcmUgZmlsdGVyZWQgb3V0LgoJCQlpZiAoIHJvdyA8IDAgKSB7CgkJCQlyZXR1cm47CgkJCX0KCgkJCS8vIEZvciBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nIG5vcm1hbGlzZSB0aGUgcm93IGJ5IGFkZGluZyB0aGUgc3RhcnQKCQkJLy8gcG9pbnQsIHNpbmNlIGByb3dzKCkuaW5kZXhlcygpYCBpbmNsdWRlcyBvbmx5IHJvd3MgdGhhdCBhcmUKCQkJLy8gYXZhaWxhYmxlIGF0IHRoZSBjbGllbnQtc2lkZQoJCQlpZiAoIHBhZ2VJbmZvLnNlcnZlclNpZGUgKSB7CgkJCQlyb3cgKz0gcGFnZUluZm8uc3RhcnQ7CgkJCX0KCQl9CgoJCS8vIElzIHRoZSByb3cgb24gdGhlIGN1cnJlbnQgcGFnZT8gSWYgbm90LCB3ZSBuZWVkIHRvIHJlZHJhdyB0byBzaG93IHRoZQoJCS8vIHBhZ2UKCQlpZiAoIHBhZ2VJbmZvLmxlbmd0aCAhPT0gLTEgJiYgKHJvdyA8IHBhZ2VJbmZvLnN0YXJ0IHx8IHJvdyA+PSBwYWdlSW5mby5zdGFydCtwYWdlSW5mby5sZW5ndGgpICkgewoJCQl0aGlzLnMuZm9jdXNEcmF3ID0gdHJ1ZTsKCQkJdGhpcy5zLndhaXRpbmdGb3JEcmF3ID0gdHJ1ZTsKCgkJCWR0CgkJCQkub25lKCAnZHJhdycsIGZ1bmN0aW9uICgpIHsKCQkJCQl0aGF0LnMuZm9jdXNEcmF3ID0gZmFsc2U7CgkJCQkJdGhhdC5zLndhaXRpbmdGb3JEcmF3ID0gZmFsc2U7CgkJCQkJdGhhdC5fZm9jdXMoIHJvdywgY29sdW1uLCB1bmRlZmluZWQsIG9yaWdpbmFsRXZlbnQgKTsKCQkJCX0gKQoJCQkJLnBhZ2UoIE1hdGguZmxvb3IoIHJvdyAvIHBhZ2VJbmZvLmxlbmd0aCApICkKCQkJCS5kcmF3KCBmYWxzZSApOwoKCQkJcmV0dXJuOwoJCX0KCgkJLy8gSW4gdGhlIGF2YWlsYWJsZSBjb2x1bW5zPwoJCWlmICggJC5pbkFycmF5KCBjb2x1bW4sIHRoaXMuX2NvbHVtbnMoKSApID09PSAtMSApIHsKCQkJcmV0dXJuOwoJCX0KCgkJLy8gRGUtbm9ybWFsaXNlIHRoZSBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nIHJvdywgc28gd2Ugc2VsZWN0IHRoZSByb3cKCQkvLyBpbiBpdHMgZGlzcGxheWVkIHBvc2l0aW9uCgkJaWYgKCBwYWdlSW5mby5zZXJ2ZXJTaWRlICkgewoJCQlyb3cgLT0gcGFnZUluZm8uc3RhcnQ7CgkJfQoKCQkvLyBHZXQgdGhlIGNlbGwgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiAtIGlnbm9yaW5nIGFueSBjZWxscyB3aGljaCBtaWdodAoJCS8vIG5vdCBoYXZlIGJlZW4gcmVuZGVyZWQgKHRoZXJlZm9yZSBjYW4ndCB1c2UgYDplcSgpYCBzZWxlY3RvcikuCgkJdmFyIGNlbGxzID0gZHQuY2VsbHMoIG51bGwsIGNvbHVtbiwge3NlYXJjaDogJ2FwcGxpZWQnLCBvcmRlcjogJ2FwcGxpZWQnfSApLmZsYXR0ZW4oKTsKCQl2YXIgY2VsbCA9IGR0LmNlbGwoIGNlbGxzWyByb3cgXSApOwoKCQlpZiAoIGxhc3RGb2N1cyApIHsKCQkJLy8gRG9uJ3QgdHJpZ2dlciBhIHJlZm9jdXMgb24gdGhlIHNhbWUgY2VsbAoJCQlpZiAoIGxhc3RGb2N1cy5ub2RlID09PSBjZWxsLm5vZGUoKSApIHsKCQkJCXRoaXMuX2VtaXRFdmVudCggJ2tleS1yZWZvY3VzJywgWyB0aGlzLnMuZHQsIGNlbGwsIG9yaWdpbmFsRXZlbnQgfHwgbnVsbCBdICk7CgkJCQlyZXR1cm47CgkJCX0KCgkJCS8vIE90aGVyd2lzZSBibHVyIHRoZSBvbGQgZm9jdXMKCQkJdGhpcy5fYmx1cigpOwoJCX0KCgkJLy8gQ2xlYXIgZm9jdXMgZnJvbSBvdGhlciB0YWJsZXMKCQl0aGlzLl9yZW1vdmVPdGhlckZvY3VzKCk7CgoJCXZhciBub2RlID0gJCggY2VsbC5ub2RlKCkgKTsKCQlub2RlLmFkZENsYXNzKCB0aGlzLmMuY2xhc3NOYW1lICk7CgoJCXRoaXMuX3VwZGF0ZUZpeGVkQ29sdW1ucyhjb2x1bW4pOwoKCQkvLyBTaGlmdCB2aWV3cG9pbnQgYW5kIHBhZ2UgdG8gbWFrZSBjZWxsIHZpc2libGUKCQlpZiAoIHNoaWZ0ID09PSB1bmRlZmluZWQgfHwgc2hpZnQgPT09IHRydWUgKSB7CgkJCXRoaXMuX3Njcm9sbCggJCh3aW5kb3cpLCAkKGRvY3VtZW50LmJvZHkpLCBub2RlLCAnb2Zmc2V0JyApOwoKCQkJdmFyIGJvZHlQYXJlbnQgPSBkdC50YWJsZSgpLmJvZHkoKS5wYXJlbnROb2RlOwoJCQlpZiAoIGJvZHlQYXJlbnQgIT09IGR0LnRhYmxlKCkuaGVhZGVyKCkucGFyZW50Tm9kZSApIHsKCQkJCXZhciBwYXJlbnQgPSAkKGJvZHlQYXJlbnQucGFyZW50Tm9kZSk7CgoJCQkJdGhpcy5fc2Nyb2xsKCBwYXJlbnQsIHBhcmVudCwgbm9kZSwgJ3Bvc2l0aW9uJyApOwoJCQl9CgkJfQoKCQkvLyBFdmVudCBhbmQgZmluaXNoCgkJdGhpcy5zLmxhc3RGb2N1cyA9IHsKCQkJY2VsbDogY2VsbCwKCQkJbm9kZTogY2VsbC5ub2RlKCksCgkJCXJlbGF0aXZlOiB7CgkJCQlyb3c6IGR0LnJvd3MoIHsgcGFnZTogJ2N1cnJlbnQnIH0gKS5pbmRleGVzKCkuaW5kZXhPZiggY2VsbC5pbmRleCgpLnJvdyApLAoJCQkJY29sdW1uOiBjZWxsLmluZGV4KCkuY29sdW1uCgkJCX0KCQl9OwoKCQl0aGlzLl9lbWl0RXZlbnQoICdrZXktZm9jdXMnLCBbIHRoaXMucy5kdCwgY2VsbCwgb3JpZ2luYWxFdmVudCB8fCBudWxsIF0gKTsKCQlkdC5zdGF0ZS5zYXZlKCk7Cgl9LAoKCgkvKioKCSAqIEhhbmRsZSBrZXkgcHJlc3MKCSAqCgkgKiBAcGFyYW0gIHtvYmplY3R9IGUgRXZlbnQKCSAqIEBwcml2YXRlCgkgKi8KCV9rZXk6IGZ1bmN0aW9uICggZSApCgl7CgkJLy8gSWYgd2UgYXJlIHdhaXRpbmcgZm9yIGEgZHJhdyB0byBoYXBwZW4gZnJvbSBhbm90aGVyIGtleSBldmVudCwgdGhlbgoJCS8vIGRvIG5vdGhpbmcgZm9yIHRoaXMgbmV3IGtleSBwcmVzcy4KCQlpZiAoIHRoaXMucy53YWl0aW5nRm9yRHJhdyApIHsKCQkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJCQlyZXR1cm47CgkJfQoKCQl2YXIgZW5hYmxlID0gdGhpcy5zLmVuYWJsZTsKCQl2YXIgbmF2RW5hYmxlID0gZW5hYmxlID09PSB0cnVlIHx8IGVuYWJsZSA9PT0gJ25hdmlnYXRpb24tb25seSc7CgkJaWYgKCAhIGVuYWJsZSApIHsKCQkJcmV0dXJuOwoJCX0KCgkJaWYgKCAoZS5rZXlDb2RlID09PSAwIHx8IGUuY3RybEtleSB8fCBlLm1ldGFLZXkgfHwgZS5hbHRLZXkpICYmICEoZS5jdHJsS2V5ICYmIGUuYWx0S2V5KSApIHsKCQkJcmV0dXJuOwoJCX0KCgkJLy8gSWYgbm90IGZvY3VzZWQsIHRoZW4gdGhlcmUgaXMgbm8ga2V5IGFjdGlvbiB0byB0YWtlCgkJdmFyIGxhc3RGb2N1cyA9IHRoaXMucy5sYXN0Rm9jdXM7CgkJaWYgKCAhIGxhc3RGb2N1cyApIHsKCQkJcmV0dXJuOwoJCX0KCgkJLy8gQW5kIHRoZSBsYXN0IGZvY3VzIHN0aWxsIGV4aXN0cyEKCQlpZiAoICEgdGhpcy5zLmR0LmNlbGwobGFzdEZvY3VzLm5vZGUpLmFueSgpICkgewoJCQl0aGlzLnMubGFzdEZvY3VzID0gbnVsbDsKCQkJcmV0dXJuOwoJCX0KCgkJdmFyIHRoYXQgPSB0aGlzOwoJCXZhciBkdCA9IHRoaXMucy5kdDsKCQl2YXIgc2Nyb2xsaW5nID0gdGhpcy5zLmR0LnNldHRpbmdzKClbMF0ub1Njcm9sbC5zWSA/IHRydWUgOiBmYWxzZTsKCgkJLy8gSWYgd2UgYXJlIG5vdCBsaXN0ZW5pbmcgZm9yIHRoaXMga2V5LCBkbyBub3RoaW5nCgkJaWYgKCB0aGlzLmMua2V5cyAmJiAkLmluQXJyYXkoIGUua2V5Q29kZSwgdGhpcy5jLmtleXMgKSA9PT0gLTEgKSB7CgkJCXJldHVybjsKCQl9CgoJCXN3aXRjaCggZS5rZXlDb2RlICkgewoJCQljYXNlIDk6IC8vIHRhYgoJCQkJLy8gYGVuYWJsZWAgY2FuIGJlIHRhYi1vbmx5CgkJCQl0aGlzLl9zaGlmdCggZSwgZS5zaGlmdEtleSA/ICdsZWZ0JyA6ICdyaWdodCcsIHRydWUgKTsKCQkJCWJyZWFrOwoKCQkJY2FzZSAyNzogLy8gZXNjCgkJCQlpZiAoIHRoaXMucy5ibHVyYWJsZSAmJiBlbmFibGUgPT09IHRydWUgKSB7CgkJCQkJdGhpcy5fYmx1cigpOwoJCQkJfQoJCQkJYnJlYWs7CgoJCQljYXNlIDMzOiAvLyBwYWdlIHVwIChwcmV2aW91cyBwYWdlKQoJCQljYXNlIDM0OiAvLyBwYWdlIGRvd24gKG5leHQgcGFnZSkKCQkJCWlmICggbmF2RW5hYmxlICYmICFzY3JvbGxpbmcgKSB7CgkJCQkJZS5wcmV2ZW50RGVmYXVsdCgpOwoKCQkJCQlkdAoJCQkJCQkucGFnZSggZS5rZXlDb2RlID09PSAzMyA/ICdwcmV2aW91cycgOiAnbmV4dCcgKQoJCQkJCQkuZHJhdyggZmFsc2UgKTsKCQkJCX0KCQkJCWJyZWFrOwoKCQkJY2FzZSAzNTogLy8gZW5kIChlbmQgb2YgY3VycmVudCBwYWdlKQoJCQljYXNlIDM2OiAvLyBob21lIChzdGFydCBvZiBjdXJyZW50IHBhZ2UpCgkJCQlpZiAoIG5hdkVuYWJsZSApIHsKCQkJCQllLnByZXZlbnREZWZhdWx0KCk7CgkJCQkJdmFyIGluZGV4ZXMgPSBkdC5jZWxscygge3BhZ2U6ICdjdXJyZW50J30gKS5pbmRleGVzKCk7CgkJCQkJdmFyIGNvbEluZGV4ZXMgPSB0aGlzLl9jb2x1bW5zKCk7CgoJCQkJCXRoaXMuX2ZvY3VzKCBkdC5jZWxsKAoJCQkJCQlpbmRleGVzWyBlLmtleUNvZGUgPT09IDM1ID8gaW5kZXhlcy5sZW5ndGgtMSA6IGNvbEluZGV4ZXNbMF0gXQoJCQkJCSksIG51bGwsIHRydWUsIGUgKTsKCQkJCX0KCQkJCWJyZWFrOwoKCQkJY2FzZSAzNzogLy8gbGVmdCBhcnJvdwoJCQkJaWYgKCBuYXZFbmFibGUgKSB7CgkJCQkJdGhpcy5fc2hpZnQoIGUsICdsZWZ0JyApOwoJCQkJfQoJCQkJYnJlYWs7CgoJCQljYXNlIDM4OiAvLyB1cCBhcnJvdwoJCQkJaWYgKCBuYXZFbmFibGUgKSB7CgkJCQkJdGhpcy5fc2hpZnQoIGUsICd1cCcgKTsKCQkJCX0KCQkJCWJyZWFrOwoKCQkJY2FzZSAzOTogLy8gcmlnaHQgYXJyb3cKCQkJCWlmICggbmF2RW5hYmxlICkgewoJCQkJCXRoaXMuX3NoaWZ0KCBlLCAncmlnaHQnICk7CgkJCQl9CgkJCQlicmVhazsKCgkJCWNhc2UgNDA6IC8vIGRvd24gYXJyb3cKCQkJCWlmICggbmF2RW5hYmxlICkgewoJCQkJCXRoaXMuX3NoaWZ0KCBlLCAnZG93bicgKTsKCQkJCX0KCQkJCWJyZWFrOwoKCQkJY2FzZSAxMTM6IC8vIEYyIC0gRXhjZWwgbGlrZSBoYXJkIGVkaXQKCQkJCWlmICggdGhpcy5jLmVkaXRvciApIHsKCQkJCQl0aGlzLl9lZGl0b3IobnVsbCwgZSwgdHJ1ZSk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQkvLyBlbHNlIGZhbGx0aHJvdWdoCgoJCQlkZWZhdWx0OgoJCQkJLy8gRXZlcnl0aGluZyBlbHNlIC0gcGFzcyB0aHJvdWdoIG9ubHkgd2hlbiBmdWxseSBlbmFibGVkCgkJCQlpZiAoIGVuYWJsZSA9PT0gdHJ1ZSApIHsKCQkJCQl0aGlzLl9lbWl0RXZlbnQoICdrZXknLCBbIGR0LCBlLmtleUNvZGUsIHRoaXMucy5sYXN0Rm9jdXMuY2VsbCwgZSBdICk7CgkJCQl9CgkJCQlicmVhazsKCQl9Cgl9LAoKCS8qKgoJICogUmVtb3ZlIGZvY3VzIGZyb20gYWxsIHRhYmxlcyBvdGhlciB0aGFuIHRoaXMgb25lCgkgKi8KCV9yZW1vdmVPdGhlckZvY3VzOiBmdW5jdGlvbiAoKQoJewoJCXZhciB0aGlzVGFibGUgPSB0aGlzLnMuZHQudGFibGUoKS5ub2RlKCk7CgoJCSQuZm4uZGF0YVRhYmxlLnRhYmxlcyh7YXBpOnRydWV9KS5pdGVyYXRvcigndGFibGUnLCBmdW5jdGlvbiAoc2V0dGluZ3MpIHsKCQkJaWYgKHRoaXMudGFibGUoKS5ub2RlKCkgIT09IHRoaXNUYWJsZSkgewoJCQkJdGhpcy5jZWxsLmJsdXIoKTsKCQkJfQoJCX0pOwoJfSwKCgkvKioKCSAqIFNjcm9sbCBhIGNvbnRhaW5lciB0byBtYWtlIGEgY2VsbCB2aXNpYmxlIGluIGl0LiBUaGlzIGNhbiBiZSB1c2VkIGZvcgoJICogYm90aCBEYXRhVGFibGVzIHNjcm9sbGluZyBhbmQgbmF0aXZlIHdpbmRvdyBzY3JvbGxpbmcuCgkgKgoJICogQHBhcmFtICB7alF1ZXJ5fSBjb250YWluZXIgU2Nyb2xsaW5nIGNvbnRhaW5lcgoJICogQHBhcmFtICB7alF1ZXJ5fSBzY3JvbGxlciAgSXRlbSBiZWluZyBzY3JvbGxlZAoJICogQHBhcmFtICB7alF1ZXJ5fSBjZWxsICAgICAgQ2VsbCBpbiB0aGUgc2Nyb2xsZXIKCSAqIEBwYXJhbSAge3N0cmluZ30gcG9zT2ZmICAgIGBwb3NpdGlvbmAgb3IgYG9mZnNldGAgLSB3aGljaCB0byB1c2UgZm9yIHRoZQoJICogICBjYWxjdWxhdGlvbi4gYG9mZnNldGAgZm9yIHRoZSBkb2N1bWVudCwgb3RoZXJ3aXNlIGBwb3NpdGlvbmAKCSAqIEBwcml2YXRlCgkgKi8KCV9zY3JvbGw6IGZ1bmN0aW9uICggY29udGFpbmVyLCBzY3JvbGxlciwgY2VsbCwgcG9zT2ZmICkKCXsKCQl2YXIgb2Zmc2V0ID0gY2VsbFtwb3NPZmZdKCk7CgkJdmFyIGhlaWdodCA9IGNlbGwub3V0ZXJIZWlnaHQoKTsKCQl2YXIgd2lkdGggPSBjZWxsLm91dGVyV2lkdGgoKTsKCgkJdmFyIHNjcm9sbFRvcCA9IHNjcm9sbGVyLnNjcm9sbFRvcCgpOwoJCXZhciBzY3JvbGxMZWZ0ID0gc2Nyb2xsZXIuc2Nyb2xsTGVmdCgpOwoJCXZhciBjb250YWluZXJIZWlnaHQgPSBjb250YWluZXIuaGVpZ2h0KCk7CgkJdmFyIGNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyLndpZHRoKCk7CgoJCS8vIElmIFNjcm9sbGVyIGlzIGJlaW5nIHVzZWQsIHRoZSB0YWJsZSBjYW4gYmUgYHBvc2l0aW9uOiBhYnNvbHV0ZWAgYW5kIHRoYXQKCQkvLyBuZWVkcyB0byBiZSB0YWtlbiBhY2NvdW50IG9mIGluIHRoZSBvZmZzZXQuIElmIG5vIFNjcm9sbGVyLCB0aGlzIHdpbGwgYmUgMAoJCWlmICggcG9zT2ZmID09PSAncG9zaXRpb24nICkgewoJCQlvZmZzZXQudG9wICs9IHBhcnNlSW50KCBjZWxsLmNsb3Nlc3QoJ3RhYmxlJykuY3NzKCd0b3AnKSwgMTAgKTsKCQl9CgoJCS8vIFRvcCBjb3JyZWN0aW9uCgkJaWYgKCBvZmZzZXQudG9wIDwgc2Nyb2xsVG9wICkgewoJCQlzY3JvbGxlci5zY3JvbGxUb3AoIG9mZnNldC50b3AgKTsKCQl9CgoJCS8vIExlZnQgY29ycmVjdGlvbgoJCWlmICggb2Zmc2V0LmxlZnQgPCBzY3JvbGxMZWZ0ICkgewoJCQlzY3JvbGxlci5zY3JvbGxMZWZ0KCBvZmZzZXQubGVmdCApOwoJCX0KCgkJLy8gQm90dG9tIGNvcnJlY3Rpb24KCQlpZiAoIG9mZnNldC50b3AgKyBoZWlnaHQgPiBzY3JvbGxUb3AgKyBjb250YWluZXJIZWlnaHQgJiYgaGVpZ2h0IDwgY29udGFpbmVySGVpZ2h0ICkgewoJCQlzY3JvbGxlci5zY3JvbGxUb3AoIG9mZnNldC50b3AgKyBoZWlnaHQgLSBjb250YWluZXJIZWlnaHQgKTsKCQl9CgoJCS8vIFJpZ2h0IGNvcnJlY3Rpb24KCQlpZiAoIG9mZnNldC5sZWZ0ICsgd2lkdGggPiBzY3JvbGxMZWZ0ICsgY29udGFpbmVyV2lkdGggJiYgd2lkdGggPCBjb250YWluZXJXaWR0aCApIHsKCQkJc2Nyb2xsZXIuc2Nyb2xsTGVmdCggb2Zmc2V0LmxlZnQgKyB3aWR0aCAtIGNvbnRhaW5lcldpZHRoICk7CgkJfQoJfSwKCgoJLyoqCgkgKiBDYWxjdWxhdGUgYSBzaW5nbGUgb2Zmc2V0IG1vdmVtZW50IGluIHRoZSB0YWJsZSAtIHVwLCBkb3duLCBsZWZ0IGFuZAoJICogcmlnaHQgYW5kIHRoZW4gcGVyZm9ybSB0aGUgZm9jdXMgaWYgcG9zc2libGUKCSAqCgkgKiBAcGFyYW0gIHtvYmplY3R9ICBlICAgICAgICAgICBFdmVudCBvYmplY3QKCSAqIEBwYXJhbSAge3N0cmluZ30gIGRpcmVjdGlvbiAgIE1vdmVtZW50IGRpcmVjdGlvbgoJICogQHBhcmFtICB7Ym9vbGVhbn0ga2V5Qmx1cmFibGUgYHRydWVgIGlmIHRoZSBrZXkgcHJlc3MgY2FuIHJlc3VsdCBpbiB0aGUKCSAqICAgdGFibGUgYmVpbmcgYmx1cnJlZC4gVGhpcyBpcyBzbyBhcnJvdyBrZXlzIHdvbid0IGJsdXIgdGhlIHRhYmxlLCBidXQKCSAqICAgdGFiIHdpbGwuCgkgKiBAcHJpdmF0ZQoJICovCglfc2hpZnQ6IGZ1bmN0aW9uICggZSwgZGlyZWN0aW9uLCBrZXlCbHVyYWJsZSApCgl7CgkJdmFyIHRoYXQgICAgICAgICA9IHRoaXM7CgkJdmFyIGR0ICAgICAgICAgICA9IHRoaXMucy5kdDsKCQl2YXIgcGFnZUluZm8gICAgID0gZHQucGFnZS5pbmZvKCk7CgkJdmFyIHJvd3MgICAgICAgICA9IHBhZ2VJbmZvLnJlY29yZHNEaXNwbGF5OwoJCXZhciBjdXJyZW50Q2VsbCAgPSB0aGlzLnMubGFzdEZvY3VzLmNlbGw7CgkJdmFyIGNvbHVtbnMgICAgICA9IHRoaXMuX2NvbHVtbnMoKTsKCgkJaWYgKCAhIGN1cnJlbnRDZWxsICkgewoJCQlyZXR1cm47CgkJfQoKCQl2YXIgY3VyclJvdyA9IGR0CgkJCS5yb3dzKCB7IGZpbHRlcjogJ2FwcGxpZWQnLCBvcmRlcjogJ2FwcGxpZWQnIH0gKQoJCQkuaW5kZXhlcygpCgkJCS5pbmRleE9mKCBjdXJyZW50Q2VsbC5pbmRleCgpLnJvdyApOwoKCQkvLyBXaGVuIHNlcnZlci1zaWRlIHByb2Nlc3NpbmcsIGByb3dzKCkuaW5kZXhlcygpYCBvbmx5IGdpdmVzIHRoZSByb3dzCgkJLy8gdGhhdCBhcmUgYXZhaWxhYmxlIGF0IHRoZSBjbGllbnQtc2lkZSwgc28gd2UgbmVlZCB0byBub3JtYWxpc2UgdGhlCgkJLy8gcm93J3MgY3VycmVudCBwb3NpdGlvbiBieSB0aGUgZGlzcGxheSBzdGFydCBwb2ludAoJCWlmICggcGFnZUluZm8uc2VydmVyU2lkZSApIHsKCQkJY3VyclJvdyArPSBwYWdlSW5mby5zdGFydDsKCQl9CgoJCXZhciBjdXJyQ29sID0gZHQKCQkJLmNvbHVtbnMoIGNvbHVtbnMgKQoJCQkuaW5kZXhlcygpCgkJCS5pbmRleE9mKCBjdXJyZW50Q2VsbC5pbmRleCgpLmNvbHVtbiApOwoKCQl2YXIKCQkJcm93ID0gY3VyclJvdywKCQkJY29sdW1uID0gY29sdW1uc1sgY3VyckNvbCBdOyAvLyByb3cgaXMgdGhlIGRpc3BsYXksIGNvbHVtbiBpcyBhbiBpbmRleAoKCQlpZiAoIGRpcmVjdGlvbiA9PT0gJ3JpZ2h0JyApIHsKCQkJaWYgKCBjdXJyQ29sID49IGNvbHVtbnMubGVuZ3RoIC0gMSApIHsKCQkJCXJvdysrOwoJCQkJY29sdW1uID0gY29sdW1uc1swXTsKCQkJfQoJCQllbHNlIHsKCQkJCWNvbHVtbiA9IGNvbHVtbnNbIGN1cnJDb2wrMSBdOwoJCQl9CgkJfQoJCWVsc2UgaWYgKCBkaXJlY3Rpb24gPT09ICdsZWZ0JyApIHsKCQkJaWYgKCBjdXJyQ29sID09PSAwICkgewoJCQkJcm93LS07CgkJCQljb2x1bW4gPSBjb2x1bW5zWyBjb2x1bW5zLmxlbmd0aCAtIDEgXTsKCQkJfQoJCQllbHNlIHsKCQkJCWNvbHVtbiA9IGNvbHVtbnNbIGN1cnJDb2wtMSBdOwoJCQl9CgkJfQoJCWVsc2UgaWYgKCBkaXJlY3Rpb24gPT09ICd1cCcgKSB7CgkJCXJvdy0tOwoJCX0KCQllbHNlIGlmICggZGlyZWN0aW9uID09PSAnZG93bicgKSB7CgkJCXJvdysrOwoJCX0KCgkJaWYgKCByb3cgPj0gMCAmJiByb3cgPCByb3dzICYmICQuaW5BcnJheSggY29sdW1uLCBjb2x1bW5zICkgIT09IC0xICkgewoJCQlpZiAoZSkgewoJCQkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJCQl9CgoJCQl0aGlzLl9mb2N1cyggcm93LCBjb2x1bW4sIHRydWUsIGUgKTsKCQl9CgkJZWxzZSBpZiAoICEga2V5Qmx1cmFibGUgfHwgISB0aGlzLmMuYmx1cmFibGUgKSB7CgkJCS8vIE5vIG5ldyBmb2N1cywgYnV0IGlmIHRoZSB0YWJsZSBpc24ndCBibHVyYWJsZSwgdGhlbiBkb24ndCBsb29zZQoJCQkvLyBmb2N1cwoJCQlpZiAoZSkgewoJCQkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJCQl9CgkJfQoJCWVsc2UgewoJCQl0aGlzLl9ibHVyKCk7CgkJfQoJfSwKCgoJLyoqCgkgKiBDcmVhdGUgYSBoaWRkZW4gaW5wdXQgZWxlbWVudCB0aGF0IGNhbiByZWNlaXZlIGZvY3VzIG9uIGJlaGFsZiBvZiB0aGUKCSAqIHRhYmxlCgkgKgoJICogQHByaXZhdGUKCSAqLwoJX3RhYklucHV0OiBmdW5jdGlvbiAoKQoJewoJCXZhciB0aGF0ID0gdGhpczsKCQl2YXIgZHQgPSB0aGlzLnMuZHQ7CgkJdmFyIHRhYkluZGV4ID0gdGhpcy5jLnRhYkluZGV4ICE9PSBudWxsID8KCQkJdGhpcy5jLnRhYkluZGV4IDoKCQkJZHQuc2V0dGluZ3MoKVswXS5pVGFiSW5kZXg7CgoJCWlmICggdGFiSW5kZXggPT0gLTEgKSB7CgkJCXJldHVybjsKCQl9CgoJCXZhciBkaXYgPSAkKCc8ZGl2PjxpbnB1dCB0eXBlPSJ0ZXh0IiB0YWJpbmRleD0iJyt0YWJJbmRleCsnIi8+PC9kaXY+JykKCQkJLmNzcyggewoJCQkJcG9zaXRpb246ICdhYnNvbHV0ZScsCgkJCQloZWlnaHQ6IDEsCgkJCQl3aWR0aDogMCwKCQkJCW92ZXJmbG93OiAnaGlkZGVuJwoJCQl9ICkKCQkJLmluc2VydEJlZm9yZSggZHQudGFibGUoKS5ub2RlKCkgKTsKCgkJZGl2LmNoaWxkcmVuKCkub24oICdmb2N1cycsIGZ1bmN0aW9uIChlKSB7CgkJCXZhciBjZWxsID0gZHQuY2VsbCgnOmVxKDApJywgdGhhdC5fY29sdW1ucygpLCB7cGFnZTogJ2N1cnJlbnQnfSk7CgoJCQlpZiAoIGNlbGwuYW55KCkgKSB7CgkJCQl0aGF0Ll9mb2N1cyggY2VsbCwgbnVsbCwgdHJ1ZSwgZSApOwoJCQl9CgkJfSApOwoJfSwKCgkvKioKCSAqIFVwZGF0ZSBmaXhlZCBjb2x1bW5zIGlmIHRoZXkgYXJlIGVuYWJsZWQgYW5kIGlmIHRoZSBjZWxsIHdlIGFyZQoJICogZm9jdXNpbmcgaXMgaW5zaWRlIGEgZml4ZWQgY29sdW1uCgkgKiBAcGFyYW0gIHtpbnRlZ2VyfSBjb2x1bW4gSW5kZXggb2YgdGhlIGNvbHVtbiBiZWluZyBjaGFuZ2VkCgkgKiBAcHJpdmF0ZQoJICovCglfdXBkYXRlRml4ZWRDb2x1bW5zOiBmdW5jdGlvbiggY29sdW1uICkKCXsKCQl2YXIgZHQgPSB0aGlzLnMuZHQ7CgkJdmFyIHNldHRpbmdzID0gZHQuc2V0dGluZ3MoKVswXTsKCgkJaWYgKCBzZXR0aW5ncy5fb0ZpeGVkQ29sdW1ucyApIHsKCQkJdmFyIGxlZnRDb2xzID0gc2V0dGluZ3MuX29GaXhlZENvbHVtbnMucy5pTGVmdENvbHVtbnM7CgkJCXZhciByaWdodENvbHMgPSBzZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoIC0gc2V0dGluZ3MuX29GaXhlZENvbHVtbnMucy5pUmlnaHRDb2x1bW5zOwoKCQkJaWYgKGNvbHVtbiA8IGxlZnRDb2xzIHx8IGNvbHVtbiA+PSByaWdodENvbHMpIHsKCQkJCWR0LmZpeGVkQ29sdW1ucygpLnVwZGF0ZSgpOwoJCQl9CgkJfQoJfQp9ICk7CgoKLyoqCiAqIEtleVRhYmxlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIGluaXRpYWxpc2F0aW9uCiAqCiAqIEBuYW1lc3BhY2UKICogQG5hbWUgS2V5VGFibGUuZGVmYXVsdHMKICogQHN0YXRpYwogKi8KS2V5VGFibGUuZGVmYXVsdHMgPSB7CgkvKioKCSAqIENhbiBmb2N1cyBiZSByZW1vdmVkIGZyb20gdGhlIHRhYmxlCgkgKiBAdHlwZSB7Qm9vbGVhbn0KCSAqLwoJYmx1cmFibGU6IHRydWUsCgoJLyoqCgkgKiBDbGFzcyB0byBnaXZlIHRvIHRoZSBmb2N1c2VkIGNlbGwKCSAqIEB0eXBlIHtTdHJpbmd9CgkgKi8KCWNsYXNzTmFtZTogJ2ZvY3VzJywKCgkvKioKCSAqIEVuYWJsZSBvciBkaXNhYmxlIGNsaXBib2FyZCBzdXBwb3J0CgkgKiBAdHlwZSB7Qm9vbGVhbn0KCSAqLwoJY2xpcGJvYXJkOiB0cnVlLAoKCS8qKgoJICogT3J0aG9nb25hbCBkYXRhIHRoYXQgc2hvdWxkIGJlIGNvcGllZCB0byBjbGlwYm9hcmQKCSAqIEB0eXBlIHtzdHJpbmd9CgkgKi8KCWNsaXBib2FyZE9ydGhvZ29uYWw6ICdkaXNwbGF5JywKCgkvKioKCSAqIENvbHVtbnMgdGhhdCBjYW4gYmUgZm9jdXNlZC4gVGhpcyBpcyBhdXRvbWF0aWNhbGx5IG1lcmdlZCB3aXRoIHRoZQoJICogdmlzaWJsZSBjb2x1bW5zIGFzIG9ubHkgdmlzaWJsZSBjb2x1bW5zIGNhbiBnYWluIGZvY3VzLgoJICogQHR5cGUge1N0cmluZ30KCSAqLwoJY29sdW1uczogJycsIC8vIGFsbAoKCS8qKgoJICogRWRpdG9yIGluc3RhbmNlIHRvIGF1dG9tYXRpY2FsbHkgcGVyZm9ybSBFeGNlbCBsaWtlIG5hdmlnYXRpb24KCSAqIEB0eXBlIHtFZGl0b3J9CgkgKi8KCWVkaXRvcjogbnVsbCwKCgkvKioKCSAqIFRyaWdnZXIgZWRpdGluZyBpbW1lZGlhdGVseSBvbiBmb2N1cwoJICogQHR5cGUge2Jvb2xlYW59CgkgKi8KCWVkaXRPbkZvY3VzOiBmYWxzZSwKCgkvKioKCSAqIFNlbGVjdCBhIGNlbGwgdG8gYXV0b21hdGljYWxseSBzZWxlY3Qgb24gc3RhcnQgdXAuIGBudWxsYCBmb3Igbm8KCSAqIGF1dG9tYXRpYyBzZWxlY3Rpb24KCSAqIEB0eXBlIHtjZWxsLXNlbGVjdG9yfQoJICovCglmb2N1czogbnVsbCwKCgkvKioKCSAqIEFycmF5IG9mIGtleXMgdG8gbGlzdGVuIGZvcgoJICogQHR5cGUge251bGx8YXJyYXl9CgkgKi8KCWtleXM6IG51bGwsCgoJLyoqCgkgKiBUYWIgaW5kZXggZm9yIHdoZXJlIHRoZSB0YWJsZSBzaG91bGQgc2l0IGluIHRoZSBkb2N1bWVudCdzIHRhYiBmbG93CgkgKiBAdHlwZSB7aW50ZWdlcnxudWxsfQoJICovCgl0YWJJbmRleDogbnVsbAp9OwoKCgpLZXlUYWJsZS52ZXJzaW9uID0gIjIuNS4xIjsKCgokLmZuLmRhdGFUYWJsZS5LZXlUYWJsZSA9IEtleVRhYmxlOwokLmZuLkRhdGFUYWJsZS5LZXlUYWJsZSA9IEtleVRhYmxlOwoKCkRhdGFUYWJsZS5BcGkucmVnaXN0ZXIoICdjZWxsLmJsdXIoKScsIGZ1bmN0aW9uICgpIHsKCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoY3R4KSB7CgkJaWYgKCBjdHgua2V5dGFibGUgKSB7CgkJCWN0eC5rZXl0YWJsZS5ibHVyKCk7CgkJfQoJfSApOwp9ICk7CgpEYXRhVGFibGUuQXBpLnJlZ2lzdGVyKCAnY2VsbCgpLmZvY3VzKCknLCBmdW5jdGlvbiAoKSB7CglyZXR1cm4gdGhpcy5pdGVyYXRvciggJ2NlbGwnLCBmdW5jdGlvbiAoY3R4LCByb3csIGNvbHVtbikgewoJCWlmICggY3R4LmtleXRhYmxlICkgewoJCQljdHgua2V5dGFibGUuZm9jdXMoIHJvdywgY29sdW1uICk7CgkJfQoJfSApOwp9ICk7CgpEYXRhVGFibGUuQXBpLnJlZ2lzdGVyKCAna2V5cy5kaXNhYmxlKCknLCBmdW5jdGlvbiAoKSB7CglyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKGN0eCkgewoJCWlmICggY3R4LmtleXRhYmxlICkgewoJCQljdHgua2V5dGFibGUuZW5hYmxlKCBmYWxzZSApOwoJCX0KCX0gKTsKfSApOwoKRGF0YVRhYmxlLkFwaS5yZWdpc3RlciggJ2tleXMuZW5hYmxlKCknLCBmdW5jdGlvbiAoIG9wdHMgKSB7CglyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKGN0eCkgewoJCWlmICggY3R4LmtleXRhYmxlICkgewoJCQljdHgua2V5dGFibGUuZW5hYmxlKCBvcHRzID09PSB1bmRlZmluZWQgPyB0cnVlIDogb3B0cyApOwoJCX0KCX0gKTsKfSApOwoKRGF0YVRhYmxlLkFwaS5yZWdpc3RlciggJ2tleXMubW92ZSgpJywgZnVuY3Rpb24gKCBkaXIgKSB7CglyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKGN0eCkgewoJCWlmICggY3R4LmtleXRhYmxlICkgewoJCQljdHgua2V5dGFibGUuX3NoaWZ0KCBudWxsLCBkaXIsIGZhbHNlICk7CgkJfQoJfSApOwp9ICk7CgovLyBDZWxsIHNlbGVjdG9yCkRhdGFUYWJsZS5leHQuc2VsZWN0b3IuY2VsbC5wdXNoKCBmdW5jdGlvbiAoIHNldHRpbmdzLCBvcHRzLCBjZWxscyApIHsKCXZhciBmb2N1c2VkID0gb3B0cy5mb2N1c2VkOwoJdmFyIGt0ID0gc2V0dGluZ3Mua2V5dGFibGU7Cgl2YXIgb3V0ID0gW107CgoJaWYgKCAhIGt0IHx8IGZvY3VzZWQgPT09IHVuZGVmaW5lZCApIHsKCQlyZXR1cm4gY2VsbHM7Cgl9CgoJZm9yICggdmFyIGk9MCwgaWVuPWNlbGxzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCWlmICggKGZvY3VzZWQgPT09IHRydWUgJiYgIGt0LmZvY3VzZWQoIGNlbGxzW2ldICkgKSB8fAoJCQkgKGZvY3VzZWQgPT09IGZhbHNlICYmICEga3QuZm9jdXNlZCggY2VsbHNbaV0gKSApCgkJKSB7CgkJCW91dC5wdXNoKCBjZWxsc1tpXSApOwoJCX0KCX0KCglyZXR1cm4gb3V0Owp9ICk7CgoKLy8gQXR0YWNoIGEgbGlzdGVuZXIgdG8gdGhlIGRvY3VtZW50IHdoaWNoIGxpc3RlbnMgZm9yIERhdGFUYWJsZXMgaW5pdGlhbGlzYXRpb24KLy8gZXZlbnRzIHNvIHdlIGNhbiBhdXRvbWF0aWNhbGx5IGluaXRpYWxpc2UKJChkb2N1bWVudCkub24oICdwcmVJbml0LmR0LmR0aycsIGZ1bmN0aW9uIChlLCBzZXR0aW5ncywganNvbikgewoJaWYgKCBlLm5hbWVzcGFjZSAhPT0gJ2R0JyApIHsKCQlyZXR1cm47Cgl9CgoJdmFyIGluaXQgPSBzZXR0aW5ncy5vSW5pdC5rZXlzOwoJdmFyIGRlZmF1bHRzID0gRGF0YVRhYmxlLmRlZmF1bHRzLmtleXM7CgoJaWYgKCBpbml0IHx8IGRlZmF1bHRzICkgewoJCXZhciBvcHRzID0gJC5leHRlbmQoIHt9LCBkZWZhdWx0cywgaW5pdCApOwoKCQlpZiAoIGluaXQgIT09IGZhbHNlICkgewoJCQluZXcgS2V5VGFibGUoIHNldHRpbmdzLCBvcHRzICApOwoJCX0KCX0KfSApOwoKCnJldHVybiBLZXlUYWJsZTsKfSkpOwoKCi8qISBSZXNwb25zaXZlIDIuMi4zCiAqIDIwMTQtMjAxOCBTcHJ5TWVkaWEgTHRkIC0gZGF0YXRhYmxlcy5uZXQvbGljZW5zZQogKi8KCi8qKgogKiBAc3VtbWFyeSAgICAgUmVzcG9uc2l2ZQogKiBAZGVzY3JpcHRpb24gUmVzcG9uc2l2ZSB0YWJsZXMgcGx1Zy1pbiBmb3IgRGF0YVRhYmxlcwogKiBAdmVyc2lvbiAgICAgMi4yLjMKICogQGZpbGUgICAgICAgIGRhdGFUYWJsZXMucmVzcG9uc2l2ZS5qcwogKiBAYXV0aG9yICAgICAgU3ByeU1lZGlhIEx0ZCAod3d3LnNwcnltZWRpYS5jby51aykKICogQGNvbnRhY3QgICAgIHd3dy5zcHJ5bWVkaWEuY28udWsvY29udGFjdAogKiBAY29weXJpZ2h0ICAgQ29weXJpZ2h0IDIwMTQtMjAxOCBTcHJ5TWVkaWEgTHRkLgogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGF2YWlsYWJsZSB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CiAqICAgTUlUIGxpY2Vuc2UgLSBodHRwOi8vZGF0YXRhYmxlcy5uZXQvbGljZW5zZS9taXQKICoKICogVGhpcyBzb3VyY2UgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgbGljZW5zZSBmaWxlcyBmb3IgZGV0YWlscy4KICoKICogRm9yIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvOiBodHRwOi8vd3d3LmRhdGF0YWJsZXMubmV0CiAqLwooZnVuY3Rpb24oIGZhY3RvcnkgKXsKCWlmICggdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkgewoJCS8vIEFNRAoJCWRlZmluZSggWydqcXVlcnknLCAnZGF0YXRhYmxlcy5uZXQnXSwgZnVuY3Rpb24gKCAkICkgewoJCQlyZXR1cm4gZmFjdG9yeSggJCwgd2luZG93LCBkb2N1bWVudCApOwoJCX0gKTsKCX0KCWVsc2UgaWYgKCB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgKSB7CgkJLy8gQ29tbW9uSlMKCQltb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb290LCAkKSB7CgkJCWlmICggISByb290ICkgewoJCQkJcm9vdCA9IHdpbmRvdzsKCQkJfQoKCQkJaWYgKCAhICQgfHwgISAkLmZuLmRhdGFUYWJsZSApIHsKCQkJCSQgPSByZXF1aXJlKCdkYXRhdGFibGVzLm5ldCcpKHJvb3QsICQpLiQ7CgkJCX0KCgkJCXJldHVybiBmYWN0b3J5KCAkLCByb290LCByb290LmRvY3VtZW50ICk7CgkJfTsKCX0KCWVsc2UgewoJCS8vIEJyb3dzZXIKCQlmYWN0b3J5KCBqUXVlcnksIHdpbmRvdywgZG9jdW1lbnQgKTsKCX0KfShmdW5jdGlvbiggJCwgd2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkICkgewondXNlIHN0cmljdCc7CnZhciBEYXRhVGFibGUgPSAkLmZuLmRhdGFUYWJsZTsKCgovKioKICogUmVzcG9uc2l2ZSBpcyBhIHBsdWctaW4gZm9yIHRoZSBEYXRhVGFibGVzIGxpYnJhcnkgdGhhdCBtYWtlcyB1c2Ugb2YKICogRGF0YVRhYmxlcycgYWJpbGl0eSB0byBjaGFuZ2UgdGhlIHZpc2liaWxpdHkgb2YgY29sdW1ucywgY2hhbmdpbmcgdGhlCiAqIHZpc2liaWxpdHkgb2YgY29sdW1ucyBzbyB0aGUgZGlzcGxheWVkIGNvbHVtbnMgZml0IGludG8gdGhlIHRhYmxlIGNvbnRhaW5lci4KICogVGhlIGVuZCByZXN1bHQgaXMgdGhhdCBjb21wbGV4IHRhYmxlcyB3aWxsIGJlIGR5bmFtaWNhbGx5IGFkanVzdGVkIHRvIGZpdAogKiBpbnRvIHRoZSB2aWV3cG9ydCwgYmUgaXQgb24gYSBkZXNrdG9wLCB0YWJsZXQgb3IgbW9iaWxlIGJyb3dzZXIuCiAqCiAqIFJlc3BvbnNpdmUgZm9yIERhdGFUYWJsZXMgaGFzIHR3byBtb2RlcyBvZiBvcGVyYXRpb24sIHdoaWNoIGNhbiB1c2VkCiAqIGluZGl2aWR1YWxseSBvciBjb21iaW5lZDoKICoKICogKiBDbGFzcyBuYW1lIGJhc2VkIGNvbnRyb2wgLSBjb2x1bW5zIGFzc2lnbmVkIGNsYXNzIG5hbWVzIHRoYXQgbWF0Y2ggdGhlCiAqICAgYnJlYWtwb2ludCBsb2dpYyBjYW4gYmUgc2hvd24gLyBoaWRkZW4gYXMgcmVxdWlyZWQgZm9yIGVhY2ggYnJlYWtwb2ludC4KICogKiBBdXRvbWF0aWMgY29udHJvbCAtIGNvbHVtbnMgYXJlIGF1dG9tYXRpY2FsbHkgaGlkZGVuIHdoZW4gdGhlcmUgaXMgbm8KICogICByb29tIGxlZnQgdG8gZGlzcGxheSB0aGVtLiBDb2x1bW5zIHJlbW92ZWQgZnJvbSB0aGUgcmlnaHQuCiAqCiAqIEluIGFkZGl0aW9uYWwgdG8gY29sdW1uIHZpc2liaWxpdHkgY29udHJvbCwgUmVzcG9uc2l2ZSBhbHNvIGhhcyBidWlsdCBpbnRvCiAqIG9wdGlvbnMgdG8gdXNlIERhdGFUYWJsZXMnIGNoaWxkIHJvdyBkaXNwbGF5IHRvIHNob3cgLyBoaWRlIHRoZSBpbmZvcm1hdGlvbgogKiBmcm9tIHRoZSB0YWJsZSB0aGF0IGhhcyBiZWVuIGhpZGRlbi4gVGhlcmUgYXJlIGFsc28gdHdvIG1vZGVzIG9mIG9wZXJhdGlvbgogKiBmb3IgdGhpcyBjaGlsZCByb3cgZGlzcGxheToKICoKICogKiBJbmxpbmUgLSB3aGVuIHRoZSBjb250cm9sIGVsZW1lbnQgdGhhdCB0aGUgdXNlciBjYW4gdXNlIHRvIHNob3cgLyBoaWRlCiAqICAgY2hpbGQgcm93cyBpcyBkaXNwbGF5ZWQgaW5zaWRlIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIHRhYmxlLgogKiAqIENvbHVtbiAtIHdoZXJlIGEgd2hvbGUgY29sdW1uIGlzIGRlZGljYXRlZCB0byBiZSB0aGUgc2hvdyAvIGhpZGUgY29udHJvbC4KICoKICogSW5pdGlhbGlzYXRpb24gb2YgUmVzcG9uc2l2ZSBpcyBwZXJmb3JtZWQgYnk6CiAqCiAqICogQWRkaW5nIHRoZSBjbGFzcyBgcmVzcG9uc2l2ZWAgb3IgYGR0LXJlc3BvbnNpdmVgIHRvIHRoZSB0YWJsZS4gSW4gdGhpcyBjYXNlCiAqICAgUmVzcG9uc2l2ZSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgaW5pdGlhbGlzZWQgd2l0aCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uCiAqICAgb3B0aW9ucyB3aGVuIHRoZSBEYXRhVGFibGUgaXMgY3JlYXRlZC4KICogKiBVc2luZyB0aGUgYHJlc3BvbnNpdmVgIG9wdGlvbiBpbiB0aGUgRGF0YVRhYmxlcyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoaXMKICogICBjYW4gYWxzbyBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgb3Igc2ltcGx5IHNldCB0bwogKiAgIGB0cnVlYCB0byB1c2UgdGhlIGRlZmF1bHRzLgogKgogKiAgQGNsYXNzCiAqICBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QgZm9yIHRoZSBob3N0IHRhYmxlCiAqICBAcGFyYW0ge29iamVjdH0gW29wdHNdIENvbmZpZ3VyYXRpb24gb3B0aW9ucwogKiAgQHJlcXVpcmVzIGpRdWVyeSAxLjcrCiAqICBAcmVxdWlyZXMgRGF0YVRhYmxlcyAxLjEwLjMrCiAqCiAqICBAZXhhbXBsZQogKiAgICAgICQoJyNleGFtcGxlJykuRGF0YVRhYmxlKCB7CiAqICAgICAgICByZXNwb25zaXZlOiB0cnVlCiAqICAgICAgfSApOwogKiAgICB9ICk7CiAqLwp2YXIgUmVzcG9uc2l2ZSA9IGZ1bmN0aW9uICggc2V0dGluZ3MsIG9wdHMgKSB7CgkvLyBTYW5pdHkgY2hlY2sgdGhhdCB3ZSBhcmUgdXNpbmcgRGF0YVRhYmxlcyAxLjEwIG9yIG5ld2VyCglpZiAoICEgRGF0YVRhYmxlLnZlcnNpb25DaGVjayB8fCAhIERhdGFUYWJsZS52ZXJzaW9uQ2hlY2soICcxLjEwLjEwJyApICkgewoJCXRocm93ICdEYXRhVGFibGVzIFJlc3BvbnNpdmUgcmVxdWlyZXMgRGF0YVRhYmxlcyAxLjEwLjEwIG9yIG5ld2VyJzsKCX0KCgl0aGlzLnMgPSB7CgkJZHQ6IG5ldyBEYXRhVGFibGUuQXBpKCBzZXR0aW5ncyApLAoJCWNvbHVtbnM6IFtdLAoJCWN1cnJlbnQ6IFtdCgl9OwoKCS8vIENoZWNrIGlmIHJlc3BvbnNpdmUgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXNlZCBvbiB0aGlzIHRhYmxlCglpZiAoIHRoaXMucy5kdC5zZXR0aW5ncygpWzBdLnJlc3BvbnNpdmUgKSB7CgkJcmV0dXJuOwoJfQoKCS8vIGRldGFpbHMgaXMgYW4gb2JqZWN0LCBidXQgZm9yIHNpbXBsaWNpdHkgdGhlIHVzZXIgY2FuIGdpdmUgaXQgYXMgYSBzdHJpbmcKCS8vIG9yIGEgYm9vbGVhbgoJaWYgKCBvcHRzICYmIHR5cGVvZiBvcHRzLmRldGFpbHMgPT09ICdzdHJpbmcnICkgewoJCW9wdHMuZGV0YWlscyA9IHsgdHlwZTogb3B0cy5kZXRhaWxzIH07Cgl9CgllbHNlIGlmICggb3B0cyAmJiBvcHRzLmRldGFpbHMgPT09IGZhbHNlICkgewoJCW9wdHMuZGV0YWlscyA9IHsgdHlwZTogZmFsc2UgfTsKCX0KCWVsc2UgaWYgKCBvcHRzICYmIG9wdHMuZGV0YWlscyA9PT0gdHJ1ZSApIHsKCQlvcHRzLmRldGFpbHMgPSB7IHR5cGU6ICdpbmxpbmUnIH07Cgl9CgoJdGhpcy5jID0gJC5leHRlbmQoIHRydWUsIHt9LCBSZXNwb25zaXZlLmRlZmF1bHRzLCBEYXRhVGFibGUuZGVmYXVsdHMucmVzcG9uc2l2ZSwgb3B0cyApOwoJc2V0dGluZ3MucmVzcG9uc2l2ZSA9IHRoaXM7Cgl0aGlzLl9jb25zdHJ1Y3RvcigpOwp9OwoKJC5leHRlbmQoIFJlc3BvbnNpdmUucHJvdG90eXBlLCB7CgkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkgKiBDb25zdHJ1Y3RvcgoJICovCgoJLyoqCgkgKiBJbml0aWFsaXNlIHRoZSBSZXNwb25zaXZlIGluc3RhbmNlCgkgKgoJICogQHByaXZhdGUKCSAqLwoJX2NvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKQoJewoJCXZhciB0aGF0ID0gdGhpczsKCQl2YXIgZHQgPSB0aGlzLnMuZHQ7CgkJdmFyIGR0UHJpdmF0ZVNldHRpbmdzID0gZHQuc2V0dGluZ3MoKVswXTsKCQl2YXIgb2xkV2luZG93V2lkdGggPSAkKHdpbmRvdykud2lkdGgoKTsKCgkJZHQuc2V0dGluZ3MoKVswXS5fcmVzcG9uc2l2ZSA9IHRoaXM7CgoJCS8vIFVzZSBEYXRhVGFibGVzJyB0aHJvdHRsZSBmdW5jdGlvbiB0byBhdm9pZCBwcm9jZXNzb3IgdGhyYXNoaW5nIG9uCgkJLy8gcmVzaXplCgkJJCh3aW5kb3cpLm9uKCAncmVzaXplLmR0ciBvcmllbnRhdGlvbmNoYW5nZS5kdHInLCBEYXRhVGFibGUudXRpbC50aHJvdHRsZSggZnVuY3Rpb24gKCkgewoJCQkvLyBpT1MgaGFzIGEgYnVnIHdoZXJlYnkgcmVzaXplIGNhbiBmaXJlIHdoZW4gb25seSBzY3JvbGxpbmcKCQkJLy8gU2VlOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzg4OTg0MTIKCQkJdmFyIHdpZHRoID0gJCh3aW5kb3cpLndpZHRoKCk7CgoJCQlpZiAoIHdpZHRoICE9PSBvbGRXaW5kb3dXaWR0aCApIHsKCQkJCXRoYXQuX3Jlc2l6ZSgpOwoJCQkJb2xkV2luZG93V2lkdGggPSB3aWR0aDsKCQkJfQoJCX0gKSApOwoKCQkvLyBEYXRhVGFibGVzIGRvZXNuJ3QgY3VycmVudGx5IHRyaWdnZXIgYW4gZXZlbnQgd2hlbiBhIHJvdyBpcyBhZGRlZCwgc28KCQkvLyB3ZSBuZWVkIHRvIGhvb2sgaW50byBpdHMgcHJpdmF0ZSBBUEkgdG8gZW5mb3JjZSB0aGUgaGlkZGVuIHJvd3Mgd2hlbgoJCS8vIG5ldyBkYXRhIGlzIGFkZGVkCgkJZHRQcml2YXRlU2V0dGluZ3Mub0FwaS5fZm5DYWxsYmFja1JlZyggZHRQcml2YXRlU2V0dGluZ3MsICdhb1Jvd0NyZWF0ZWRDYWxsYmFjaycsIGZ1bmN0aW9uICh0ciwgZGF0YSwgaWR4KSB7CgkJCWlmICggJC5pbkFycmF5KCBmYWxzZSwgdGhhdC5zLmN1cnJlbnQgKSAhPT0gLTEgKSB7CgkJCQkkKCc+dGQsID50aCcsIHRyKS5lYWNoKCBmdW5jdGlvbiAoIGkgKSB7CgkJCQkJdmFyIGlkeCA9IGR0LmNvbHVtbi5pbmRleCggJ3RvRGF0YScsIGkgKTsKCgkJCQkJaWYgKCB0aGF0LnMuY3VycmVudFtpZHhdID09PSBmYWxzZSApIHsKCQkJCQkJJCh0aGlzKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOwoJCQkJCX0KCQkJCX0gKTsKCQkJfQoJCX0gKTsKCgkJLy8gRGVzdHJveSBldmVudCBoYW5kbGVyCgkJZHQub24oICdkZXN0cm95LmR0cicsIGZ1bmN0aW9uICgpIHsKCQkJZHQub2ZmKCAnLmR0cicgKTsKCQkJJCggZHQudGFibGUoKS5ib2R5KCkgKS5vZmYoICcuZHRyJyApOwoJCQkkKHdpbmRvdykub2ZmKCAncmVzaXplLmR0ciBvcmllbnRhdGlvbmNoYW5nZS5kdHInICk7CgoJCQkvLyBSZXN0b3JlIHRoZSBjb2x1bW5zIHRoYXQgd2UndmUgaGlkZGVuCgkJCSQuZWFjaCggdGhhdC5zLmN1cnJlbnQsIGZ1bmN0aW9uICggaSwgdmFsICkgewoJCQkJaWYgKCB2YWwgPT09IGZhbHNlICkgewoJCQkJCXRoYXQuX3NldENvbHVtblZpcyggaSwgdHJ1ZSApOwoJCQkJfQoJCQl9ICk7CgkJfSApOwoKCQkvLyBSZW9yZGVyIHRoZSBicmVha3BvaW50cyBhcnJheSBoZXJlIGluIGNhc2UgdGhleSBoYXZlIGJlZW4gYWRkZWQgb3V0CgkJLy8gb2Ygb3JkZXIKCQl0aGlzLmMuYnJlYWtwb2ludHMuc29ydCggZnVuY3Rpb24gKGEsIGIpIHsKCQkJcmV0dXJuIGEud2lkdGggPCBiLndpZHRoID8gMSA6CgkJCQlhLndpZHRoID4gYi53aWR0aCA/IC0xIDogMDsKCQl9ICk7CgoJCXRoaXMuX2NsYXNzTG9naWMoKTsKCQl0aGlzLl9yZXNpemVBdXRvKCk7CgoJCS8vIERldGFpbHMgaGFuZGxlcgoJCXZhciBkZXRhaWxzID0gdGhpcy5jLmRldGFpbHM7CgoJCWlmICggZGV0YWlscy50eXBlICE9PSBmYWxzZSApIHsKCQkJdGhhdC5fZGV0YWlsc0luaXQoKTsKCgkJCS8vIERhdGFUYWJsZXMgd2lsbCB0cmlnZ2VyIHRoaXMgZXZlbnQgb24gZXZlcnkgY29sdW1uIGl0IHNob3dzIGFuZAoJCQkvLyBoaWRlcyBpbmRpdmlkdWFsbHkKCQkJZHQub24oICdjb2x1bW4tdmlzaWJpbGl0eS5kdHInLCBmdW5jdGlvbiAoKSB7CgkJCQkvLyBVc2UgYSBzbWFsbCBkZWJvdW5jZSB0byBhbGxvdyBtdWx0aXBsZSBjb2x1bW5zIHRvIGJlIHNldCB0b2dldGhlcgoJCQkJaWYgKCB0aGF0Ll90aW1lciApIHsKCQkJCQljbGVhclRpbWVvdXQoIHRoYXQuX3RpbWVyICk7CgkJCQl9CgoJCQkJdGhhdC5fdGltZXIgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7CgkJCQkJdGhhdC5fdGltZXIgPSBudWxsOwoKCQkJCQl0aGF0Ll9jbGFzc0xvZ2ljKCk7CgkJCQkJdGhhdC5fcmVzaXplQXV0bygpOwoJCQkJCXRoYXQuX3Jlc2l6ZSgpOwoKCQkJCQl0aGF0Ll9yZWRyYXdDaGlsZHJlbigpOwoJCQkJfSwgMTAwICk7CgkJCX0gKTsKCgkJCS8vIFJlZHJhdyB0aGUgZGV0YWlscyBib3ggb24gZWFjaCBkcmF3IHdoaWNoIHdpbGwgaGFwcGVuIGlmIHRoZSBkYXRhCgkJCS8vIGhhcyBjaGFuZ2VkLiBUaGlzIGlzIHVzZWQgdW50aWwgRGF0YVRhYmxlcyBpbXBsZW1lbnRzIGEgbmF0aXZlCgkJCS8vIGB1cGRhdGVkYCBldmVudCBmb3Igcm93cwoJCQlkdC5vbiggJ2RyYXcuZHRyJywgZnVuY3Rpb24gKCkgewoJCQkJdGhhdC5fcmVkcmF3Q2hpbGRyZW4oKTsKCQkJfSApOwoKCQkJJChkdC50YWJsZSgpLm5vZGUoKSkuYWRkQ2xhc3MoICdkdHItJytkZXRhaWxzLnR5cGUgKTsKCQl9CgoJCWR0Lm9uKCAnY29sdW1uLXJlb3JkZXIuZHRyJywgZnVuY3Rpb24gKGUsIHNldHRpbmdzLCBkZXRhaWxzKSB7CgkJCXRoYXQuX2NsYXNzTG9naWMoKTsKCQkJdGhhdC5fcmVzaXplQXV0bygpOwoJCQl0aGF0Ll9yZXNpemUoKTsKCQl9ICk7CgoJCS8vIENoYW5nZSBpbiBjb2x1bW4gc2l6ZXMgbWVhbnMgd2UgbmVlZCB0byBjYWxjCgkJZHQub24oICdjb2x1bW4tc2l6aW5nLmR0cicsIGZ1bmN0aW9uICgpIHsKCQkJdGhhdC5fcmVzaXplQXV0bygpOwoJCQl0aGF0Ll9yZXNpemUoKTsKCQl9KTsKCgkJLy8gT24gQWpheCByZWxvYWQgd2Ugd2FudCB0byByZW9wZW4gYW55IGNoaWxkIHJvd3Mgd2hpY2ggYXJlIGRpc3BsYXllZAoJCS8vIGJ5IHJlc3BvbnNpdmUKCQlkdC5vbiggJ3ByZVhoci5kdHInLCBmdW5jdGlvbiAoKSB7CgkJCXZhciByb3dJZHMgPSBbXTsKCQkJZHQucm93cygpLmV2ZXJ5KCBmdW5jdGlvbiAoKSB7CgkJCQlpZiAoIHRoaXMuY2hpbGQuaXNTaG93bigpICkgewoJCQkJCXJvd0lkcy5wdXNoKCB0aGlzLmlkKHRydWUpICk7CgkJCQl9CgkJCX0gKTsKCgkJCWR0Lm9uZSggJ2RyYXcuZHRyJywgZnVuY3Rpb24gKCkgewoJCQkJdGhhdC5fcmVzaXplQXV0bygpOwoJCQkJdGhhdC5fcmVzaXplKCk7CgoJCQkJZHQucm93cyggcm93SWRzICkuZXZlcnkoIGZ1bmN0aW9uICgpIHsKCQkJCQl0aGF0Ll9kZXRhaWxzRGlzcGxheSggdGhpcywgZmFsc2UgKTsKCQkJCX0gKTsKCQkJfSApOwoJCX0pOwoKCQlkdC5vbiggJ2luaXQuZHRyJywgZnVuY3Rpb24gKGUsIHNldHRpbmdzLCBkZXRhaWxzKSB7CgkJCXRoYXQuX3Jlc2l6ZUF1dG8oKTsKCQkJdGhhdC5fcmVzaXplKCk7CgoJCQkvLyBJZiBjb2x1bW5zIHdlcmUgaGlkZGVuLCB0aGVuIERhdGFUYWJsZXMgbmVlZHMgdG8gYWRqdXN0IHRoZQoJCQkvLyBjb2x1bW4gc2l6aW5nCgkJCWlmICggJC5pbkFycmF5KCBmYWxzZSwgdGhhdC5zLmN1cnJlbnQgKSApIHsKCQkJCWR0LmNvbHVtbnMuYWRqdXN0KCk7CgkJCX0KCQl9ICk7CgoJCS8vIEZpcnN0IHBhc3MgLSBkcmF3IHRoZSB0YWJsZSBmb3IgdGhlIGN1cnJlbnQgdmlld3BvcnQgc2l6ZQoJCXRoaXMuX3Jlc2l6ZSgpOwoJfSwKCgoJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJICogUHJpdmF0ZSBtZXRob2RzCgkgKi8KCgkvKioKCSAqIENhbGN1bGF0ZSB0aGUgdmlzaWJpbGl0eSBmb3IgdGhlIGNvbHVtbnMgaW4gYSB0YWJsZSBmb3IgYSBnaXZlbgoJICogYnJlYWtwb2ludC4gVGhlIHJlc3VsdCBpcyBwcmUtZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgY2xhc3MgbG9naWMgaWYKCSAqIGNsYXNzIG5hbWVzIGFyZSB1c2VkIHRvIGNvbnRyb2wgYWxsIGNvbHVtbnMsIGJ1dCB0aGUgd2lkdGggb2YgdGhlIHRhYmxlCgkgKiBpcyBhbHNvIHVzZWQgaWYgdGhlcmUgYXJlIGNvbHVtbnMgd2hpY2ggYXJlIHRvIGJlIGF1dG9tYXRpY2FsbHkgc2hvd24KCSAqIGFuZCBoaWRkZW4uCgkgKgoJICogQHBhcmFtICB7c3RyaW5nfSBicmVha3BvaW50IEJyZWFrcG9pbnQgbmFtZSB0byB1c2UgZm9yIHRoZSBjYWxjdWxhdGlvbgoJICogQHJldHVybiB7YXJyYXl9IEFycmF5IG9mIGJvb2xlYW4gdmFsdWVzIGluaXRpYXRpbmcgdGhlIHZpc2liaWxpdHkgb2YgZWFjaAoJICogICBjb2x1bW4uCgkgKiAgQHByaXZhdGUKCSAqLwoJX2NvbHVtbnNWaXNpYmxpdHk6IGZ1bmN0aW9uICggYnJlYWtwb2ludCApCgl7CgkJdmFyIGR0ID0gdGhpcy5zLmR0OwoJCXZhciBjb2x1bW5zID0gdGhpcy5zLmNvbHVtbnM7CgkJdmFyIGksIGllbjsKCgkJLy8gQ3JlYXRlIGFuIGFycmF5IHRoYXQgZGVmaW5lcyB0aGUgY29sdW1uIG9yZGVyaW5nIGJhc2VkIGZpcnN0IG9uIHRoZQoJCS8vIGNvbHVtbidzIHByaW9yaXR5LCBhbmQgc2Vjb25kbHkgdGhlIGNvbHVtbiBpbmRleC4gVGhpcyBhbGxvd3MgdGhlCgkJLy8gY29sdW1ucyB0byBiZSByZW1vdmVkIGZyb20gdGhlIHJpZ2h0IGlmIHRoZSBwcmlvcml0eSBtYXRjaGVzCgkJdmFyIG9yZGVyID0gY29sdW1ucwoJCQkubWFwKCBmdW5jdGlvbiAoIGNvbCwgaWR4ICkgewoJCQkJcmV0dXJuIHsKCQkJCQljb2x1bW5JZHg6IGlkeCwKCQkJCQlwcmlvcml0eTogY29sLnByaW9yaXR5CgkJCQl9OwoJCQl9ICkKCQkJLnNvcnQoIGZ1bmN0aW9uICggYSwgYiApIHsKCQkJCWlmICggYS5wcmlvcml0eSAhPT0gYi5wcmlvcml0eSApIHsKCQkJCQlyZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7CgkJCQl9CgkJCQlyZXR1cm4gYS5jb2x1bW5JZHggLSBiLmNvbHVtbklkeDsKCQkJfSApOwoKCQkvLyBDbGFzcyBsb2dpYyAtIGRldGVybWluZSB3aGljaCBjb2x1bW5zIGFyZSBpbiB0aGlzIGJyZWFrcG9pbnQgYmFzZWQKCQkvLyBvbiB0aGUgY2xhc3Nlcy4gSWYgbm8gY2xhc3MgY29udHJvbCAoaS5lLiBgYXV0b2ApIHRoZW4gYC1gIGlzIHVzZWQKCQkvLyB0byBpbmRpY2F0ZSB0aGlzIHRvIHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbgoJCXZhciBkaXNwbGF5ID0gJC5tYXAoIGNvbHVtbnMsIGZ1bmN0aW9uICggY29sLCBpICkgewoJCQlpZiAoIGR0LmNvbHVtbihpKS52aXNpYmxlKCkgPT09IGZhbHNlICkgewoJCQkJcmV0dXJuICdub3QtdmlzaWJsZSc7CgkJCX0KCQkJcmV0dXJuIGNvbC5hdXRvICYmIGNvbC5taW5XaWR0aCA9PT0gbnVsbCA/CgkJCQlmYWxzZSA6CgkJCQljb2wuYXV0byA9PT0gdHJ1ZSA/CgkJCQkJJy0nIDoKCQkJCQkkLmluQXJyYXkoIGJyZWFrcG9pbnQsIGNvbC5pbmNsdWRlSW4gKSAhPT0gLTE7CgkJfSApOwoKCQkvLyBBdXRvIGNvbHVtbiBjb250cm9sIC0gZmlyc3QgcGFzczogaG93IG11Y2ggd2lkdGggaXMgdGFrZW4gYnkgdGhlCgkJLy8gb25lcyB0aGF0IG11c3QgYmUgaW5jbHVkZWQgZnJvbSB0aGUgbm9uLWF1dG8gY29sdW1ucwoJCXZhciByZXF1aXJlZFdpZHRoID0gMDsKCQlmb3IgKCBpPTAsIGllbj1kaXNwbGF5Lmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQlpZiAoIGRpc3BsYXlbaV0gPT09IHRydWUgKSB7CgkJCQlyZXF1aXJlZFdpZHRoICs9IGNvbHVtbnNbaV0ubWluV2lkdGg7CgkJCX0KCQl9CgoJCS8vIFNlY29uZCBwYXNzLCB1c2UgdXAgYW55IHJlbWFpbmluZyB3aWR0aCBmb3Igb3RoZXIgY29sdW1ucy4gRm9yCgkJLy8gc2Nyb2xsaW5nIHRhYmxlcyB3ZSBuZWVkIHRvIHN1YnRyYWN0IHRoZSB3aWR0aCBvZiB0aGUgc2Nyb2xsYmFyLiBJdAoJCS8vIG1heSBub3QgYmUgcmVxdWlyZXMgd2hpY2ggbWFrZXMgdGhpcyBzdWItb3B0aW1hbCwgYnV0IGl0IHdvdWxkCgkJLy8gcmVxdWlyZSBhbm90aGVyIGZ1bGwgcmVkcmF3IHRvIG1ha2UgY29tcGxldGUgdXNlIG9mIHRob3NlIGV4dHJhIGZldwoJCS8vIHBpeGVscwoJCXZhciBzY3JvbGxpbmcgPSBkdC5zZXR0aW5ncygpWzBdLm9TY3JvbGw7CgkJdmFyIGJhciA9IHNjcm9sbGluZy5zWSB8fCBzY3JvbGxpbmcuc1ggPyBzY3JvbGxpbmcuaUJhcldpZHRoIDogMDsKCQl2YXIgd2lkdGhBdmFpbGFibGUgPSBkdC50YWJsZSgpLmNvbnRhaW5lcigpLm9mZnNldFdpZHRoIC0gYmFyOwoJCXZhciB1c2VkV2lkdGggPSB3aWR0aEF2YWlsYWJsZSAtIHJlcXVpcmVkV2lkdGg7CgoJCS8vIENvbnRyb2wgY29sdW1uIG5lZWRzIHRvIGFsd2F5cyBiZSBpbmNsdWRlZC4gVGhpcyBtYWtlcyBpdCBzdWItCgkJLy8gb3B0aW1hbCBpbiB0ZXJtcyBvZiB1c2luZyB0aGUgYXZhaWxhYmxlIHdpdGgsIGJ1dCB0byBzdG9wIGxheW91dAoJCS8vIHRocmFzaGluZyBvciBvdmVyZmxvdy4gQWxzbyB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIHRoZSBjb250cm9sIGNvbHVtbgoJCS8vIHdpZHRoIGZpcnN0IHNvIHdlIGtub3cgaG93IG11Y2ggd2lkdGggaXMgYXZhaWxhYmxlIGZvciB0aGUgb3RoZXIKCQkvLyBjb2x1bW5zLCBzaW5jZSB0aGUgY29udHJvbCBjb2x1bW4gbWlnaHQgbm90IGJlIHRoZSBmaXJzdCBvbmUgc2hvd24KCQlmb3IgKCBpPTAsIGllbj1kaXNwbGF5Lmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQlpZiAoIGNvbHVtbnNbaV0uY29udHJvbCApIHsKCQkJCXVzZWRXaWR0aCAtPSBjb2x1bW5zW2ldLm1pbldpZHRoOwoJCQl9CgkJfQoKCQkvLyBBbGxvdyBjb2x1bW5zIHRvIGJlIHNob3duIChjb3VudGluZyBieSBwcmlvcml0eSBhbmQgdGhlbiByaWdodCB0bwoJCS8vIGxlZnQpIHVudGlsIHdlIHJ1biBvdXQgb2Ygcm9vbQoJCXZhciBlbXB0eSA9IGZhbHNlOwoJCWZvciAoIGk9MCwgaWVuPW9yZGVyLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQl2YXIgY29sSWR4ID0gb3JkZXJbaV0uY29sdW1uSWR4OwoKCQkJaWYgKCBkaXNwbGF5W2NvbElkeF0gPT09ICctJyAmJiAhIGNvbHVtbnNbY29sSWR4XS5jb250cm9sICYmIGNvbHVtbnNbY29sSWR4XS5taW5XaWR0aCApIHsKCQkJCS8vIE9uY2Ugd2UndmUgZm91bmQgYSBjb2x1bW4gdGhhdCB3b24ndCBmaXQgd2UgZG9uJ3QgbGV0IGFueQoJCQkJLy8gb3RoZXJzIGRpc3BsYXkgZWl0aGVyLCBvciBjb2x1bW5zIG1pZ2h0IGRpc2FwcGVhciBpbiB0aGUKCQkJCS8vIG1pZGRsZSBvZiB0aGUgdGFibGUKCQkJCWlmICggZW1wdHkgfHwgdXNlZFdpZHRoIC0gY29sdW1uc1tjb2xJZHhdLm1pbldpZHRoIDwgMCApIHsKCQkJCQllbXB0eSA9IHRydWU7CgkJCQkJZGlzcGxheVtjb2xJZHhdID0gZmFsc2U7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlkaXNwbGF5W2NvbElkeF0gPSB0cnVlOwoJCQkJfQoKCQkJCXVzZWRXaWR0aCAtPSBjb2x1bW5zW2NvbElkeF0ubWluV2lkdGg7CgkJCX0KCQl9CgoJCS8vIERldGVybWluZSBpZiB0aGUgJ2NvbnRyb2wnIGNvbHVtbiBzaG91bGQgYmUgc2hvd24gKGlmIHRoZXJlIGlzIG9uZSkuCgkJLy8gVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHRoZXJlIGlzIGEgaGlkZGVuIGNvbHVtbiAodGhhdCBpcyBub3QgdGhlCgkJLy8gY29udHJvbCBjb2x1bW4pLiBUaGUgdHdvIGxvb3BzIGxvb2sgaW5lZmZpY2llbnQgaGVyZSwgYnV0IHRoZXkgYXJlCgkJLy8gdHJpdmlhbCBhbmQgd2lsbCBmbHkgdGhyb3VnaC4gV2UgbmVlZCB0byBrbm93IHRoZSBvdXRjb21lIGZyb20gdGhlCgkJLy8gZmlyc3QgLCBiZWZvcmUgdGhlIGFjdGlvbiBpbiB0aGUgc2Vjb25kIGNhbiBiZSB0YWtlbgoJCXZhciBzaG93Q29udHJvbCA9IGZhbHNlOwoKCQlmb3IgKCBpPTAsIGllbj1jb2x1bW5zLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQlpZiAoICEgY29sdW1uc1tpXS5jb250cm9sICYmICEgY29sdW1uc1tpXS5uZXZlciAmJiBkaXNwbGF5W2ldID09PSBmYWxzZSApIHsKCQkJCXNob3dDb250cm9sID0gdHJ1ZTsKCQkJCWJyZWFrOwoJCQl9CgkJfQoKCQlmb3IgKCBpPTAsIGllbj1jb2x1bW5zLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQlpZiAoIGNvbHVtbnNbaV0uY29udHJvbCApIHsKCQkJCWRpc3BsYXlbaV0gPSBzaG93Q29udHJvbDsKCQkJfQoKCQkJLy8gUmVwbGFjZSBub3QgdmlzaWJsZSBzdHJpbmcgd2l0aCBmYWxzZSBmcm9tIHRoZSBjb250cm9sIGNvbHVtbiBkZXRlY3Rpb24gYWJvdmUKCQkJaWYgKCBkaXNwbGF5W2ldID09PSAnbm90LXZpc2libGUnICkgewoJCQkJZGlzcGxheVtpXSA9IGZhbHNlOwoJCQl9CgkJfQoKCQkvLyBGaW5hbGx5IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNvbHVtbiB0aGF0CgkJLy8gaXMgdmlzaWJsZQoJCWlmICggJC5pbkFycmF5KCB0cnVlLCBkaXNwbGF5ICkgPT09IC0xICkgewoJCQlkaXNwbGF5WzBdID0gdHJ1ZTsKCQl9CgoJCXJldHVybiBkaXNwbGF5OwoJfSwKCgoJLyoqCgkgKiBDcmVhdGUgdGhlIGludGVybmFsIGBjb2x1bW5zYCBhcnJheSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb2x1bW5zCgkgKiBmb3IgdGhlIHRhYmxlLiBUaGlzIGluY2x1ZGVzIGRldGVybWluaW5nIHdoaWNoIGJyZWFrcG9pbnRzIHRoZSBjb2x1bW4KCSAqIHdpbGwgYXBwZWFyIGluLCBiYXNlZCB1cG9uIGNsYXNzIG5hbWVzIGluIHRoZSBjb2x1bW4sIHdoaWNoIG1ha2VzIHVwIHRoZQoJICogdmFzdCBtYWpvcml0eSBvZiB0aGlzIG1ldGhvZC4KCSAqCgkgKiBAcHJpdmF0ZQoJICovCglfY2xhc3NMb2dpYzogZnVuY3Rpb24gKCkKCXsKCQl2YXIgdGhhdCA9IHRoaXM7CgkJdmFyIGNhbGMgPSB7fTsKCQl2YXIgYnJlYWtwb2ludHMgPSB0aGlzLmMuYnJlYWtwb2ludHM7CgkJdmFyIGR0ID0gdGhpcy5zLmR0OwoJCXZhciBjb2x1bW5zID0gZHQuY29sdW1ucygpLmVxKDApLm1hcCggZnVuY3Rpb24gKGkpIHsKCQkJdmFyIGNvbHVtbiA9IHRoaXMuY29sdW1uKGkpOwoJCQl2YXIgY2xhc3NOYW1lID0gY29sdW1uLmhlYWRlcigpLmNsYXNzTmFtZTsKCQkJdmFyIHByaW9yaXR5ID0gZHQuc2V0dGluZ3MoKVswXS5hb0NvbHVtbnNbaV0ucmVzcG9uc2l2ZVByaW9yaXR5OwoKCQkJaWYgKCBwcmlvcml0eSA9PT0gdW5kZWZpbmVkICkgewoJCQkJdmFyIGRhdGFQcmlvcml0eSA9ICQoY29sdW1uLmhlYWRlcigpKS5kYXRhKCdwcmlvcml0eScpOwoKCQkJCXByaW9yaXR5ID0gZGF0YVByaW9yaXR5ICE9PSB1bmRlZmluZWQgPwoJCQkJCWRhdGFQcmlvcml0eSAqIDEgOgoJCQkJCTEwMDAwOwoJCQl9CgoJCQlyZXR1cm4gewoJCQkJY2xhc3NOYW1lOiBjbGFzc05hbWUsCgkJCQlpbmNsdWRlSW46IFtdLAoJCQkJYXV0bzogICAgICBmYWxzZSwKCQkJCWNvbnRyb2w6ICAgZmFsc2UsCgkJCQluZXZlcjogICAgIGNsYXNzTmFtZS5tYXRjaCgvXGJuZXZlclxiLykgPyB0cnVlIDogZmFsc2UsCgkJCQlwcmlvcml0eTogIHByaW9yaXR5CgkJCX07CgkJfSApOwoKCQkvLyBTaW1wbHkgYWRkIGEgYnJlYWtwb2ludCB0byBgaW5jbHVkZUluYCBhcnJheSwgZW5zdXJpbmcgdGhhdCB0aGVyZSBhcmUKCQkvLyBubyBkdXBsaWNhdGVzCgkJdmFyIGFkZCA9IGZ1bmN0aW9uICggY29sSWR4LCBuYW1lICkgewoJCQl2YXIgaW5jbHVkZUluID0gY29sdW1uc1sgY29sSWR4IF0uaW5jbHVkZUluOwoKCQkJaWYgKCAkLmluQXJyYXkoIG5hbWUsIGluY2x1ZGVJbiApID09PSAtMSApIHsKCQkJCWluY2x1ZGVJbi5wdXNoKCBuYW1lICk7CgkJCX0KCQl9OwoKCQl2YXIgY29sdW1uID0gZnVuY3Rpb24gKCBjb2xJZHgsIG5hbWUsIG9wZXJhdG9yLCBtYXRjaGVkICkgewoJCQl2YXIgc2l6ZSwgaSwgaWVuOwoKCQkJaWYgKCAhIG9wZXJhdG9yICkgewoJCQkJY29sdW1uc1sgY29sSWR4IF0uaW5jbHVkZUluLnB1c2goIG5hbWUgKTsKCQkJfQoJCQllbHNlIGlmICggb3BlcmF0b3IgPT09ICdtYXgtJyApIHsKCQkJCS8vIEFkZCB0aGlzIGJyZWFrcG9pbnQgYW5kIGFsbCBzbWFsbGVyCgkJCQlzaXplID0gdGhhdC5fZmluZCggbmFtZSApLndpZHRoOwoKCQkJCWZvciAoIGk9MCwgaWVuPWJyZWFrcG9pbnRzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJCWlmICggYnJlYWtwb2ludHNbaV0ud2lkdGggPD0gc2l6ZSApIHsKCQkJCQkJYWRkKCBjb2xJZHgsIGJyZWFrcG9pbnRzW2ldLm5hbWUgKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJZWxzZSBpZiAoIG9wZXJhdG9yID09PSAnbWluLScgKSB7CgkJCQkvLyBBZGQgdGhpcyBicmVha3BvaW50IGFuZCBhbGwgbGFyZ2VyCgkJCQlzaXplID0gdGhhdC5fZmluZCggbmFtZSApLndpZHRoOwoKCQkJCWZvciAoIGk9MCwgaWVuPWJyZWFrcG9pbnRzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJCWlmICggYnJlYWtwb2ludHNbaV0ud2lkdGggPj0gc2l6ZSApIHsKCQkJCQkJYWRkKCBjb2xJZHgsIGJyZWFrcG9pbnRzW2ldLm5hbWUgKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJZWxzZSBpZiAoIG9wZXJhdG9yID09PSAnbm90LScgKSB7CgkJCQkvLyBBZGQgYWxsIGJ1dCB0aGlzIGJyZWFrcG9pbnQKCQkJCWZvciAoIGk9MCwgaWVuPWJyZWFrcG9pbnRzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJCWlmICggYnJlYWtwb2ludHNbaV0ubmFtZS5pbmRleE9mKCBtYXRjaGVkICkgPT09IC0xICkgewoJCQkJCQlhZGQoIGNvbElkeCwgYnJlYWtwb2ludHNbaV0ubmFtZSApOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX07CgoJCS8vIExvb3Agb3ZlciBlYWNoIGNvbHVtbiBhbmQgZGV0ZXJtaW5lIGlmIGl0IGhhcyBhIHJlc3BvbnNpdmUgY29udHJvbAoJCS8vIGNsYXNzCgkJY29sdW1ucy5lYWNoKCBmdW5jdGlvbiAoIGNvbCwgaSApIHsKCQkJdmFyIGNsYXNzTmFtZXMgPSBjb2wuY2xhc3NOYW1lLnNwbGl0KCcgJyk7CgkJCXZhciBoYXNDbGFzcyA9IGZhbHNlOwoKCQkJLy8gU3BsaXQgdGhlIGNsYXNzIG5hbWUgdXAgc28gbXVsdGlwbGUgcnVsZXMgY2FuIGJlIGFwcGxpZWQgaWYgbmVlZGVkCgkJCWZvciAoIHZhciBrPTAsIGtlbj1jbGFzc05hbWVzLmxlbmd0aCA7IGs8a2VuIDsgaysrICkgewoJCQkJdmFyIGNsYXNzTmFtZSA9ICQudHJpbSggY2xhc3NOYW1lc1trXSApOwoKCQkJCWlmICggY2xhc3NOYW1lID09PSAnYWxsJyApIHsKCQkJCQkvLyBJbmNsdWRlIGluIGFsbAoJCQkJCWhhc0NsYXNzID0gdHJ1ZTsKCQkJCQljb2wuaW5jbHVkZUluID0gJC5tYXAoIGJyZWFrcG9pbnRzLCBmdW5jdGlvbiAoYSkgewoJCQkJCQlyZXR1cm4gYS5uYW1lOwoJCQkJCX0gKTsKCQkJCQlyZXR1cm47CgkJCQl9CgkJCQllbHNlIGlmICggY2xhc3NOYW1lID09PSAnbm9uZScgfHwgY29sLm5ldmVyICkgewoJCQkJCS8vIEluY2x1ZGUgaW4gbm9uZSAoZGVmYXVsdCkgYW5kIG5vIGF1dG8KCQkJCQloYXNDbGFzcyA9IHRydWU7CgkJCQkJcmV0dXJuOwoJCQkJfQoJCQkJZWxzZSBpZiAoIGNsYXNzTmFtZSA9PT0gJ2NvbnRyb2wnICkgewoJCQkJCS8vIFNwZWNpYWwgY29sdW1uIHRoYXQgaXMgb25seSB2aXNpYmxlLCB3aGVuIG9uZSBvZiB0aGUgb3RoZXIKCQkJCQkvLyBjb2x1bW5zIGlzIGhpZGRlbi4gVGhpcyBpcyB1c2VkIGZvciB0aGUgZGV0YWlscyBjb250cm9sCgkJCQkJaGFzQ2xhc3MgPSB0cnVlOwoJCQkJCWNvbC5jb250cm9sID0gdHJ1ZTsKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJJC5lYWNoKCBicmVha3BvaW50cywgZnVuY3Rpb24gKCBqLCBicmVha3BvaW50ICkgewoJCQkJCS8vIERvZXMgdGhpcyBjb2x1bW4gaGF2ZSBhIGNsYXNzIHRoYXQgbWF0Y2hlcyB0aGlzIGJyZWFrcG9pbnQ/CgkJCQkJdmFyIGJyb2tlblBvaW50ID0gYnJlYWtwb2ludC5uYW1lLnNwbGl0KCctJyk7CgkJCQkJdmFyIHJlID0gbmV3IFJlZ0V4cCggJyhtaW5cXC18bWF4XFwtfG5vdFxcLSk/KCcrYnJva2VuUG9pbnRbMF0rJykoXFwtW19hLXpBLVowLTldKT8nICk7CgkJCQkJdmFyIG1hdGNoID0gY2xhc3NOYW1lLm1hdGNoKCByZSApOwoKCQkJCQlpZiAoIG1hdGNoICkgewoJCQkJCQloYXNDbGFzcyA9IHRydWU7CgoJCQkJCQlpZiAoIG1hdGNoWzJdID09PSBicm9rZW5Qb2ludFswXSAmJiBtYXRjaFszXSA9PT0gJy0nK2Jyb2tlblBvaW50WzFdICkgewoJCQkJCQkJLy8gQ2xhc3MgbmFtZSBtYXRjaGVzIGJyZWFrcG9pbnQgbmFtZSBmdWxseQoJCQkJCQkJY29sdW1uKCBpLCBicmVha3BvaW50Lm5hbWUsIG1hdGNoWzFdLCBtYXRjaFsyXSttYXRjaFszXSApOwoJCQkJCQl9CgkJCQkJCWVsc2UgaWYgKCBtYXRjaFsyXSA9PT0gYnJva2VuUG9pbnRbMF0gJiYgISBtYXRjaFszXSApIHsKCQkJCQkJCS8vIENsYXNzIG5hbWUgbWF0Y2hlZCBwcmltYXJ5IGJyZWFrcG9pbnQgbmFtZSB3aXRoIG5vIHF1YWxpZmllcgoJCQkJCQkJY29sdW1uKCBpLCBicmVha3BvaW50Lm5hbWUsIG1hdGNoWzFdLCBtYXRjaFsyXSApOwoJCQkJCQl9CgkJCQkJfQoJCQkJfSApOwoJCQl9CgoJCQkvLyBJZiB0aGVyZSB3YXMgbm8gY29udHJvbCBjbGFzcywgdGhlbiBhdXRvbWF0aWMgc2l6aW5nIGlzIHVzZWQKCQkJaWYgKCAhIGhhc0NsYXNzICkgewoJCQkJY29sLmF1dG8gPSB0cnVlOwoJCQl9CgkJfSApOwoKCQl0aGlzLnMuY29sdW1ucyA9IGNvbHVtbnM7Cgl9LAoKCgkvKioKCSAqIFNob3cgdGhlIGRldGFpbHMgZm9yIHRoZSBjaGlsZCByb3cKCSAqCgkgKiBAcGFyYW0gIHtEYXRhVGFibGVzLkFwaX0gcm93ICAgIEFQSSBpbnN0YW5jZSBmb3IgdGhlIHJvdwoJICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICAgIHVwZGF0ZSBVcGRhdGUgZmxhZwoJICogQHByaXZhdGUKCSAqLwoJX2RldGFpbHNEaXNwbGF5OiBmdW5jdGlvbiAoIHJvdywgdXBkYXRlICkKCXsKCQl2YXIgdGhhdCA9IHRoaXM7CgkJdmFyIGR0ID0gdGhpcy5zLmR0OwoJCXZhciBkZXRhaWxzID0gdGhpcy5jLmRldGFpbHM7CgoJCWlmICggZGV0YWlscyAmJiBkZXRhaWxzLnR5cGUgIT09IGZhbHNlICkgewoJCQl2YXIgcmVzID0gZGV0YWlscy5kaXNwbGF5KCByb3csIHVwZGF0ZSwgZnVuY3Rpb24gKCkgewoJCQkJcmV0dXJuIGRldGFpbHMucmVuZGVyZXIoCgkJCQkJZHQsIHJvd1swXSwgdGhhdC5fZGV0YWlsc09iaihyb3dbMF0pCgkJCQkpOwoJCQl9ICk7CgoJCQlpZiAoIHJlcyA9PT0gdHJ1ZSB8fCByZXMgPT09IGZhbHNlICkgewoJCQkJJChkdC50YWJsZSgpLm5vZGUoKSkudHJpZ2dlckhhbmRsZXIoICdyZXNwb25zaXZlLWRpc3BsYXkuZHQnLCBbZHQsIHJvdywgcmVzLCB1cGRhdGVdICk7CgkJCX0KCQl9Cgl9LAoKCgkvKioKCSAqIEluaXRpYWxpc2F0aW9uIGZvciB0aGUgZGV0YWlscyBoYW5kbGVyCgkgKgoJICogQHByaXZhdGUKCSAqLwoJX2RldGFpbHNJbml0OiBmdW5jdGlvbiAoKQoJewoJCXZhciB0aGF0ICAgID0gdGhpczsKCQl2YXIgZHQgICAgICA9IHRoaXMucy5kdDsKCQl2YXIgZGV0YWlscyA9IHRoaXMuYy5kZXRhaWxzOwoKCQkvLyBUaGUgaW5saW5lIHR5cGUgYWx3YXlzIHVzZXMgdGhlIGZpcnN0IGNoaWxkIGFzIHRoZSB0YXJnZXQKCQlpZiAoIGRldGFpbHMudHlwZSA9PT0gJ2lubGluZScgKSB7CgkJCWRldGFpbHMudGFyZ2V0ID0gJ3RkOmZpcnN0LWNoaWxkLCB0aDpmaXJzdC1jaGlsZCc7CgkJfQoKCQkvLyBLZXlib2FyZCBhY2Nlc3NpYmlsaXR5CgkJZHQub24oICdkcmF3LmR0cicsIGZ1bmN0aW9uICgpIHsKCQkJdGhhdC5fdGFiSW5kZXhlcygpOwoJCX0gKTsKCQl0aGF0Ll90YWJJbmRleGVzKCk7IC8vIEluaXRpYWwgZHJhdyBoYXMgYWxyZWFkeSBoYXBwZW5lZAoKCQkkKCBkdC50YWJsZSgpLmJvZHkoKSApLm9uKCAna2V5dXAuZHRyJywgJ3RkLCB0aCcsIGZ1bmN0aW9uIChlKSB7CgkJCWlmICggZS5rZXlDb2RlID09PSAxMyAmJiAkKHRoaXMpLmRhdGEoJ2R0ci1rZXlib2FyZCcpICkgewoJCQkJJCh0aGlzKS5jbGljaygpOwoJCQl9CgkJfSApOwoKCQkvLyB0eXBlLnRhcmdldCBjYW4gYmUgYSBzdHJpbmcgalF1ZXJ5IHNlbGVjdG9yIG9yIGEgY29sdW1uIGluZGV4CgkJdmFyIHRhcmdldCAgID0gZGV0YWlscy50YXJnZXQ7CgkJdmFyIHNlbGVjdG9yID0gdHlwZW9mIHRhcmdldCA9PT0gJ3N0cmluZycgPyB0YXJnZXQgOiAndGQsIHRoJzsKCgkJLy8gQ2xpY2sgaGFuZGxlciB0byBzaG93IC8gaGlkZSB0aGUgZGV0YWlscyByb3dzIHdoZW4gdGhleSBhcmUgYXZhaWxhYmxlCgkJJCggZHQudGFibGUoKS5ib2R5KCkgKQoJCQkub24oICdjbGljay5kdHIgbW91c2Vkb3duLmR0ciBtb3VzZXVwLmR0cicsIHNlbGVjdG9yLCBmdW5jdGlvbiAoZSkgewoJCQkJLy8gSWYgdGhlIHRhYmxlIGlzIG5vdCBjb2xsYXBzZWQgKGkuZS4gdGhlcmUgaXMgbm8gaGlkZGVuIGNvbHVtbnMpCgkJCQkvLyB0aGVuIHRha2Ugbm8gYWN0aW9uCgkJCQlpZiAoICEgJChkdC50YWJsZSgpLm5vZGUoKSkuaGFzQ2xhc3MoJ2NvbGxhcHNlZCcgKSApIHsKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJLy8gQ2hlY2sgdGhhdCB0aGUgcm93IGlzIGFjdHVhbGx5IGEgRGF0YVRhYmxlJ3MgY29udHJvbGxlZCBub2RlCgkJCQlpZiAoICQuaW5BcnJheSggJCh0aGlzKS5jbG9zZXN0KCd0cicpLmdldCgwKSwgZHQucm93cygpLm5vZGVzKCkudG9BcnJheSgpICkgPT09IC0xICkgewoJCQkJCXJldHVybjsKCQkJCX0KCgkJCQkvLyBGb3IgY29sdW1uIGluZGV4LCB3ZSBkZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGFjdCBvciBub3QgaW4gdGhlCgkJCQkvLyBoYW5kbGVyIC0gb3RoZXJ3aXNlIGl0IGlzIGFscmVhZHkgb2theQoJCQkJaWYgKCB0eXBlb2YgdGFyZ2V0ID09PSAnbnVtYmVyJyApIHsKCQkJCQl2YXIgdGFyZ2V0SWR4ID0gdGFyZ2V0IDwgMCA/CgkJCQkJCWR0LmNvbHVtbnMoKS5lcSgwKS5sZW5ndGggKyB0YXJnZXQgOgoJCQkJCQl0YXJnZXQ7CgoJCQkJCWlmICggZHQuY2VsbCggdGhpcyApLmluZGV4KCkuY29sdW1uICE9PSB0YXJnZXRJZHggKSB7CgkJCQkJCXJldHVybjsKCQkJCQl9CgkJCQl9CgoJCQkJLy8gJCgpLmNsb3Nlc3QoKSBpbmNsdWRlcyBpdHNlbGYgaW4gaXRzIGNoZWNrCgkJCQl2YXIgcm93ID0gZHQucm93KCAkKHRoaXMpLmNsb3Nlc3QoJ3RyJykgKTsKCgkJCQkvLyBDaGVjayBldmVudCB0eXBlIHRvIGRvIGFuIGFjdGlvbgoJCQkJaWYgKCBlLnR5cGUgPT09ICdjbGljaycgKSB7CgkJCQkJLy8gVGhlIHJlbmRlcmVyIGlzIGdpdmVuIGFzIGEgZnVuY3Rpb24gc28gdGhlIGNhbGxlciBjYW4gZXhlY3V0ZSBpdAoJCQkJCS8vIG9ubHkgd2hlbiB0aGV5IG5lZWQgKGkuZS4gaWYgaGlkaW5nIHRoZXJlIGlzIG5vIHBvaW50IGlzIHJ1bm5pbmcKCQkJCQkvLyB0aGUgcmVuZGVyZXIpCgkJCQkJdGhhdC5fZGV0YWlsc0Rpc3BsYXkoIHJvdywgZmFsc2UgKTsKCQkJCX0KCQkJCWVsc2UgaWYgKCBlLnR5cGUgPT09ICdtb3VzZWRvd24nICkgewoJCQkJCS8vIEZvciBtb3VzZSB1c2VycywgcHJldmVudCB0aGUgZm9jdXMgcmluZyBmcm9tIHNob3dpbmcKCQkJCQkkKHRoaXMpLmNzcygnb3V0bGluZScsICdub25lJyk7CgkJCQl9CgkJCQllbHNlIGlmICggZS50eXBlID09PSAnbW91c2V1cCcgKSB7CgkJCQkJLy8gQW5kIHRoZW4gcmUtYWxsb3cgYXQgdGhlIGVuZCBvZiB0aGUgY2xpY2sKCQkJCQkkKHRoaXMpLmJsdXIoKS5jc3MoJ291dGxpbmUnLCAnJyk7CgkJCQl9CgkJCX0gKTsKCX0sCgoKCS8qKgoJICogR2V0IHRoZSBkZXRhaWxzIHRvIHBhc3MgdG8gYSByZW5kZXJlciBmb3IgYSByb3cKCSAqIEBwYXJhbSAge2ludH0gcm93SWR4IFJvdyBpbmRleAoJICogQHByaXZhdGUKCSAqLwoJX2RldGFpbHNPYmo6IGZ1bmN0aW9uICggcm93SWR4ICkKCXsKCQl2YXIgdGhhdCA9IHRoaXM7CgkJdmFyIGR0ID0gdGhpcy5zLmR0OwoKCQlyZXR1cm4gJC5tYXAoIHRoaXMucy5jb2x1bW5zLCBmdW5jdGlvbiggY29sLCBpICkgewoJCQkvLyBOZXZlciBhbmQgY29udHJvbCBjb2x1bW5zIHNob3VsZCBub3QgYmUgcGFzc2VkIHRvIHRoZSByZW5kZXJlcgoJCQlpZiAoIGNvbC5uZXZlciB8fCBjb2wuY29udHJvbCApIHsKCQkJCXJldHVybjsKCQkJfQoKCQkJcmV0dXJuIHsKCQkJCXRpdGxlOiAgICAgICBkdC5zZXR0aW5ncygpWzBdLmFvQ29sdW1uc1sgaSBdLnNUaXRsZSwKCQkJCWRhdGE6ICAgICAgICBkdC5jZWxsKCByb3dJZHgsIGkgKS5yZW5kZXIoIHRoYXQuYy5vcnRob2dvbmFsICksCgkJCQloaWRkZW46ICAgICAgZHQuY29sdW1uKCBpICkudmlzaWJsZSgpICYmICF0aGF0LnMuY3VycmVudFsgaSBdLAoJCQkJY29sdW1uSW5kZXg6IGksCgkJCQlyb3dJbmRleDogICAgcm93SWR4CgkJCX07CgkJfSApOwoJfSwKCgoJLyoqCgkgKiBGaW5kIGEgYnJlYWtwb2ludCBvYmplY3QgZnJvbSBhIG5hbWUKCSAqCgkgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWUgQnJlYWtwb2ludCBuYW1lIHRvIGZpbmQKCSAqIEByZXR1cm4ge29iamVjdH0gICAgICBCcmVha3BvaW50IGRlc2NyaXB0aW9uIG9iamVjdAoJICogQHByaXZhdGUKCSAqLwoJX2ZpbmQ6IGZ1bmN0aW9uICggbmFtZSApCgl7CgkJdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5jLmJyZWFrcG9pbnRzOwoKCQlmb3IgKCB2YXIgaT0wLCBpZW49YnJlYWtwb2ludHMubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCWlmICggYnJlYWtwb2ludHNbaV0ubmFtZSA9PT0gbmFtZSApIHsKCQkJCXJldHVybiBicmVha3BvaW50c1tpXTsKCQkJfQoJCX0KCX0sCgoKCS8qKgoJICogUmUtY3JlYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hpbGQgcm93cyBhcyB0aGUgZGlzcGxheSBoYXMgY2hhbmdlZCBpbgoJICogc29tZSB3YXkuCgkgKgoJICogQHByaXZhdGUKCSAqLwoJX3JlZHJhd0NoaWxkcmVuOiBmdW5jdGlvbiAoKQoJewoJCXZhciB0aGF0ID0gdGhpczsKCQl2YXIgZHQgPSB0aGlzLnMuZHQ7CgoJCWR0LnJvd3MoIHtwYWdlOiAnY3VycmVudCd9ICkuaXRlcmF0b3IoICdyb3cnLCBmdW5jdGlvbiAoIHNldHRpbmdzLCBpZHggKSB7CgkJCXZhciByb3cgPSBkdC5yb3coIGlkeCApOwoKCQkJdGhhdC5fZGV0YWlsc0Rpc3BsYXkoIGR0LnJvdyggaWR4ICksIHRydWUgKTsKCQl9ICk7Cgl9LAoKCgkvKioKCSAqIEFsdGVyIHRoZSB0YWJsZSBkaXNwbGF5IGZvciBhIHJlc2l6ZWQgdmlld3BvcnQuIFRoaXMgaW52b2x2ZXMgZmlyc3QKCSAqIGRldGVybWluaW5nIHdoYXQgYnJlYWtwb2ludCB0aGUgd2luZG93IGN1cnJlbnRseSBpcyBpbiwgZ2V0dGluZyB0aGUKCSAqIGNvbHVtbiB2aXNpYmlsaXRpZXMgdG8gYXBwbHkgYW5kIHRoZW4gc2V0dGluZyB0aGVtLgoJICoKCSAqIEBwcml2YXRlCgkgKi8KCV9yZXNpemU6IGZ1bmN0aW9uICgpCgl7CgkJdmFyIHRoYXQgPSB0aGlzOwoJCXZhciBkdCA9IHRoaXMucy5kdDsKCQl2YXIgd2lkdGggPSAkKHdpbmRvdykud2lkdGgoKTsKCQl2YXIgYnJlYWtwb2ludHMgPSB0aGlzLmMuYnJlYWtwb2ludHM7CgkJdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50c1swXS5uYW1lOwoJCXZhciBjb2x1bW5zID0gdGhpcy5zLmNvbHVtbnM7CgkJdmFyIGksIGllbjsKCQl2YXIgb2xkVmlzID0gdGhpcy5zLmN1cnJlbnQuc2xpY2UoKTsKCgkJLy8gRGV0ZXJtaW5lIHdoYXQgYnJlYWtwb2ludCB3ZSBhcmUgY3VycmVudGx5IGF0CgkJZm9yICggaT1icmVha3BvaW50cy5sZW5ndGgtMSA7IGk+PTAgOyBpLS0gKSB7CgkJCWlmICggd2lkdGggPD0gYnJlYWtwb2ludHNbaV0ud2lkdGggKSB7CgkJCQlicmVha3BvaW50ID0gYnJlYWtwb2ludHNbaV0ubmFtZTsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCQoJCS8vIFNob3cgdGhlIGNvbHVtbnMgZm9yIHRoYXQgYnJlYWsgcG9pbnQKCQl2YXIgY29sdW1uc1ZpcyA9IHRoaXMuX2NvbHVtbnNWaXNpYmxpdHkoIGJyZWFrcG9pbnQgKTsKCQl0aGlzLnMuY3VycmVudCA9IGNvbHVtbnNWaXM7CgoJCS8vIFNldCB0aGUgY2xhc3MgYmVmb3JlIHRoZSBjb2x1bW4gdmlzaWJpbGl0eSBpcyBjaGFuZ2VkIHNvIGV2ZW50CgkJLy8gbGlzdGVuZXJzIGtub3cgd2hhdCB0aGUgc3RhdGUgaXMuIE5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZQoJCS8vIGFueSBjb2x1bW5zIHRoYXQgYXJlIG5vdCB2aXNpYmxlIGJ1dCBjYW4gYmUgc2hvd24KCQl2YXIgY29sbGFwc2VkQ2xhc3MgPSBmYWxzZTsKCQlmb3IgKCBpPTAsIGllbj1jb2x1bW5zLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQlpZiAoIGNvbHVtbnNWaXNbaV0gPT09IGZhbHNlICYmICEgY29sdW1uc1tpXS5uZXZlciAmJiAhIGNvbHVtbnNbaV0uY29udHJvbCAmJiAhIGR0LmNvbHVtbihpKS52aXNpYmxlKCkgPT09IGZhbHNlICkgewoJCQkJY29sbGFwc2VkQ2xhc3MgPSB0cnVlOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgoJCSQoIGR0LnRhYmxlKCkubm9kZSgpICkudG9nZ2xlQ2xhc3MoICdjb2xsYXBzZWQnLCBjb2xsYXBzZWRDbGFzcyApOwoKCQl2YXIgY2hhbmdlZCA9IGZhbHNlOwoJCXZhciB2aXNpYmxlID0gMDsKCgkJZHQuY29sdW1ucygpLmVxKDApLmVhY2goIGZ1bmN0aW9uICggY29sSWR4LCBpICkgewoJCQlpZiAoIGNvbHVtbnNWaXNbaV0gPT09IHRydWUgKSB7CgkJCQl2aXNpYmxlKys7CgkJCX0KCgkJCWlmICggY29sdW1uc1Zpc1tpXSAhPT0gb2xkVmlzW2ldICkgewoJCQkJY2hhbmdlZCA9IHRydWU7CgkJCQl0aGF0Ll9zZXRDb2x1bW5WaXMoIGNvbElkeCwgY29sdW1uc1Zpc1tpXSApOwoJCQl9CgkJfSApOwoKCQlpZiAoIGNoYW5nZWQgKSB7CgkJCXRoaXMuX3JlZHJhd0NoaWxkcmVuKCk7CgoJCQkvLyBJbmZvcm0gbGlzdGVuZXJzIG9mIHRoZSBjaGFuZ2UKCQkJJChkdC50YWJsZSgpLm5vZGUoKSkudHJpZ2dlciggJ3Jlc3BvbnNpdmUtcmVzaXplLmR0JywgW2R0LCB0aGlzLnMuY3VycmVudF0gKTsKCgkJCS8vIElmIG5vIHJlY29yZHMsIHVwZGF0ZSB0aGUgIk5vIHJlY29yZHMiIGRpc3BsYXkgZWxlbWVudAoJCQlpZiAoIGR0LnBhZ2UuaW5mbygpLnJlY29yZHNEaXNwbGF5ID09PSAwICkgewoJCQkJJCgndGQnLCBkdC50YWJsZSgpLmJvZHkoKSkuZXEoMCkuYXR0cignY29sc3BhbicsIHZpc2libGUpOwoJCQl9CgkJfQoJfSwKCgoJLyoqCgkgKiBEZXRlcm1pbmUgdGhlIHdpZHRoIG9mIGVhY2ggY29sdW1uIGluIHRoZSB0YWJsZSBzbyB0aGUgYXV0byBjb2x1bW4gaGlkaW5nCgkgKiBoYXMgdGhhdCBpbmZvcm1hdGlvbiB0byB3b3JrIHdpdGguIFRoaXMgbWV0aG9kIGlzIG5ldmVyIGdvaW5nIHRvIGJlIDEwMCUKCSAqIHBlcmZlY3Qgc2luY2UgY29sdW1uIHdpZHRocyBjYW4gY2hhbmdlIHNsaWdodGx5IHBlciBwYWdlLCBidXQgd2l0aG91dAoJICogc2VyaW91c2x5IGNvbXByb21pc2luZyBwZXJmb3JtYW5jZSB0aGlzIGlzIHF1aXRlIGVmZmVjdGl2ZS4KCSAqCgkgKiBAcHJpdmF0ZQoJICovCglfcmVzaXplQXV0bzogZnVuY3Rpb24gKCkKCXsKCQl2YXIgZHQgPSB0aGlzLnMuZHQ7CgkJdmFyIGNvbHVtbnMgPSB0aGlzLnMuY29sdW1uczsKCgkJLy8gQXJlIHdlIGFsbG93ZWQgdG8gZG8gYXV0byBzaXppbmc/CgkJaWYgKCAhIHRoaXMuYy5hdXRvICkgewoJCQlyZXR1cm47CgkJfQoKCQkvLyBBcmUgdGhlcmUgYW55IGNvbHVtbnMgdGhhdCBhY3R1YWxseSBuZWVkIGF1dG8tc2l6aW5nLCBvciBkbyB0aGV5IGFsbAoJCS8vIGhhdmUgY2xhc3NlcyBkZWZpbmVkCgkJaWYgKCAkLmluQXJyYXkoIHRydWUsICQubWFwKCBjb2x1bW5zLCBmdW5jdGlvbiAoYykgeyByZXR1cm4gYy5hdXRvOyB9ICkgKSA9PT0gLTEgKSB7CgkJCXJldHVybjsKCQl9CgoJCS8vIE5lZWQgdG8gcmVzdG9yZSBhbGwgY2hpbGRyZW4uIFRoZXkgd2lsbCBiZSByZWluc3RhdGVkIGJ5IGEgcmUtcmVuZGVyCgkJaWYgKCAhICQuaXNFbXB0eU9iamVjdCggX2NoaWxkTm9kZVN0b3JlICkgKSB7CgkJCSQuZWFjaCggX2NoaWxkTm9kZVN0b3JlLCBmdW5jdGlvbiAoIGtleSApIHsKCQkJCXZhciBpZHggPSBrZXkuc3BsaXQoJy0nKTsKCgkJCQlfY2hpbGROb2Rlc1Jlc3RvcmUoIGR0LCBpZHhbMF0qMSwgaWR4WzFdKjEgKTsKCQkJfSApOwoJCX0KCgkJLy8gQ2xvbmUgdGhlIHRhYmxlIHdpdGggdGhlIGN1cnJlbnQgZGF0YSBpbiBpdAoJCXZhciB0YWJsZVdpZHRoICAgPSBkdC50YWJsZSgpLm5vZGUoKS5vZmZzZXRXaWR0aDsKCQl2YXIgY29sdW1uV2lkdGhzID0gZHQuY29sdW1uczsKCQl2YXIgY2xvbmVkVGFibGUgID0gZHQudGFibGUoKS5ub2RlKCkuY2xvbmVOb2RlKCBmYWxzZSApOwoJCXZhciBjbG9uZWRIZWFkZXIgPSAkKCBkdC50YWJsZSgpLmhlYWRlcigpLmNsb25lTm9kZSggZmFsc2UgKSApLmFwcGVuZFRvKCBjbG9uZWRUYWJsZSApOwoJCXZhciBjbG9uZWRCb2R5ICAgPSAkKCBkdC50YWJsZSgpLmJvZHkoKSApLmNsb25lKCBmYWxzZSwgZmFsc2UgKS5lbXB0eSgpLmFwcGVuZFRvKCBjbG9uZWRUYWJsZSApOyAvLyB1c2UgalF1ZXJ5IGJlY2F1c2Ugb2YgSUU4CgoJCS8vIEhlYWRlcgoJCXZhciBoZWFkZXJDZWxscyA9IGR0LmNvbHVtbnMoKQoJCQkuaGVhZGVyKCkKCQkJLmZpbHRlciggZnVuY3Rpb24gKGlkeCkgewoJCQkJcmV0dXJuIGR0LmNvbHVtbihpZHgpLnZpc2libGUoKTsKCQkJfSApCgkJCS50byQoKQoJCQkuY2xvbmUoIGZhbHNlICkKCQkJLmNzcyggJ2Rpc3BsYXknLCAndGFibGUtY2VsbCcgKQoJCQkuY3NzKCAnbWluLXdpZHRoJywgMCApOwoKCQkvLyBCb2R5IHJvd3MgLSB3ZSBkb24ndCBuZWVkIHRvIHRha2UgYWNjb3VudCBvZiBEYXRhVGFibGVzJyBjb2x1bW4KCQkvLyB2aXNpYmlsaXR5IHNpbmNlIHdlIGltcGxlbWVudCBvdXIgb3duIGhlcmUgKGhlbmNlIHRoZSBgZGlzcGxheWAgc2V0KQoJCSQoY2xvbmVkQm9keSkKCQkJLmFwcGVuZCggJChkdC5yb3dzKCB7IHBhZ2U6ICdjdXJyZW50JyB9ICkubm9kZXMoKSkuY2xvbmUoIGZhbHNlICkgKQoJCQkuZmluZCggJ3RoLCB0ZCcgKS5jc3MoICdkaXNwbGF5JywgJycgKTsKCgkJLy8gRm9vdGVyCgkJdmFyIGZvb3RlciA9IGR0LnRhYmxlKCkuZm9vdGVyKCk7CgkJaWYgKCBmb290ZXIgKSB7CgkJCXZhciBjbG9uZWRGb290ZXIgPSAkKCBmb290ZXIuY2xvbmVOb2RlKCBmYWxzZSApICkuYXBwZW5kVG8oIGNsb25lZFRhYmxlICk7CgkJCXZhciBmb290ZXJDZWxscyA9IGR0LmNvbHVtbnMoKQoJCQkJLmZvb3RlcigpCgkJCQkuZmlsdGVyKCBmdW5jdGlvbiAoaWR4KSB7CgkJCQkJcmV0dXJuIGR0LmNvbHVtbihpZHgpLnZpc2libGUoKTsKCQkJCX0gKQoJCQkJLnRvJCgpCgkJCQkuY2xvbmUoIGZhbHNlICkKCQkJCS5jc3MoICdkaXNwbGF5JywgJ3RhYmxlLWNlbGwnICk7CgoJCQkkKCc8dHIvPicpCgkJCQkuYXBwZW5kKCBmb290ZXJDZWxscyApCgkJCQkuYXBwZW5kVG8oIGNsb25lZEZvb3RlciApOwoJCX0KCgkJJCgnPHRyLz4nKQoJCQkuYXBwZW5kKCBoZWFkZXJDZWxscyApCgkJCS5hcHBlbmRUbyggY2xvbmVkSGVhZGVyICk7CgoJCS8vIEluIHRoZSBpbmxpbmUgY2FzZSBleHRyYSBwYWRkaW5nIGlzIGFwcGxpZWQgdG8gdGhlIGZpcnN0IGNvbHVtbiB0bwoJCS8vIGdpdmUgc3BhY2UgZm9yIHRoZSBzaG93IC8gaGlkZSBpY29uLiBXZSBuZWVkIHRvIHVzZSB0aGlzIGluIHRoZQoJCS8vIGNhbGN1bGF0aW9uCgkJaWYgKCB0aGlzLmMuZGV0YWlscy50eXBlID09PSAnaW5saW5lJyApIHsKCQkJJChjbG9uZWRUYWJsZSkuYWRkQ2xhc3MoICdkdHItaW5saW5lIGNvbGxhcHNlZCcgKTsKCQl9CgkJCgkJLy8gSXQgaXMgdW5zYWZlIHRvIGluc2VydCBlbGVtZW50cyB3aXRoIHRoZSBzYW1lIG5hbWUgaW50byB0aGUgRE9NCgkJLy8gbXVsdGlwbGUgdGltZXMuIEZvciBleGFtcGxlLCBjbG9uaW5nIGFuZCBpbnNlcnRpbmcgYSBjaGVja2VkIHJhZGlvCgkJLy8gY2xlYXJzIHRoZSBjaGNlY2tlZCBzdGF0ZSBvZiB0aGUgb3JpZ2luYWwgcmFkaW8uCgkJJCggY2xvbmVkVGFibGUgKS5maW5kKCAnW25hbWVdJyApLnJlbW92ZUF0dHIoICduYW1lJyApOwoKCQkvLyBBIHBvc2l0aW9uIGFic29sdXRlIHRhYmxlIHdvdWxkIHRha2UgdGhlIHRhYmxlIG91dCBvZiB0aGUgZmxvdyBvZgoJCS8vIG91ciBjb250YWluZXIgZWxlbWVudCwgYnlwYXNzaW5nIHRoZSBoZWlnaHQgYW5kIHdpZHRoIChTY3JvbGxlcikKCQkkKCBjbG9uZWRUYWJsZSApLmNzcyggJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJyApCgkJCgkJdmFyIGluc2VydGVkID0gJCgnPGRpdi8+JykKCQkJLmNzcyggewoJCQkJd2lkdGg6IDEsCgkJCQloZWlnaHQ6IDEsCgkJCQlvdmVyZmxvdzogJ2hpZGRlbicsCgkJCQljbGVhcjogJ2JvdGgnCgkJCX0gKQoJCQkuYXBwZW5kKCBjbG9uZWRUYWJsZSApOwoKCQlpbnNlcnRlZC5pbnNlcnRCZWZvcmUoIGR0LnRhYmxlKCkubm9kZSgpICk7CgoJCS8vIFRoZSBjbG9uZWQgaGVhZGVyIG5vdyBjb250YWlucyB0aGUgc21hbGxlc3QgdGhhdCBlYWNoIGNvbHVtbiBjYW4gYmUKCQloZWFkZXJDZWxscy5lYWNoKCBmdW5jdGlvbiAoaSkgewoJCQl2YXIgaWR4ID0gZHQuY29sdW1uLmluZGV4KCAnZnJvbVZpc2libGUnLCBpICk7CgkJCWNvbHVtbnNbIGlkeCBdLm1pbldpZHRoID0gIHRoaXMub2Zmc2V0V2lkdGggfHwgMDsKCQl9ICk7CgoJCWluc2VydGVkLnJlbW92ZSgpOwoJfSwKCgkvKioKCSAqIFNldCBhIGNvbHVtbidzIHZpc2liaWxpdHkuCgkgKgoJICogV2UgZG9uJ3QgdXNlIERhdGFUYWJsZXMnIGNvbHVtbiB2aXNpYmlsaXR5IGNvbnRyb2xzIGluIG9yZGVyIHRvIGVuc3VyZQoJICogdGhhdCBjb2x1bW4gdmlzaWJpbGl0eSBjYW4gUmVzcG9uc2l2ZSBjYW4gbm8tZXhpc3QuIFNpbmNlIG9ubHkgSUU4KyBpcwoJICogc3VwcG9ydGVkIChhbmQgYWxsIGV2ZXJncmVlbiBicm93c2VycyBvZiBjb3Vyc2UpIHRoZSBjb250cm9sIG9mIHRoZQoJICogZGlzcGxheSBhdHRyaWJ1dGUgd29ya3Mgd2VsbC4KCSAqCgkgKiBAcGFyYW0ge2ludGVnZXJ9IGNvbCAgICAgIENvbHVtbiBpbmRleAoJICogQHBhcmFtIHtib29sZWFufSBzaG93SGlkZSBTaG93IG9yIGhpZGUgKHRydWUgb3IgZmFsc2UpCgkgKiBAcHJpdmF0ZQoJICovCglfc2V0Q29sdW1uVmlzOiBmdW5jdGlvbiAoIGNvbCwgc2hvd0hpZGUgKQoJewoJCXZhciBkdCA9IHRoaXMucy5kdDsKCQl2YXIgZGlzcGxheSA9IHNob3dIaWRlID8gJycgOiAnbm9uZSc7IC8vIGVtcHR5IHN0cmluZyB3aWxsIHJlbW92ZSB0aGUgYXR0cgoKCQkkKCBkdC5jb2x1bW4oIGNvbCApLmhlYWRlcigpICkuY3NzKCAnZGlzcGxheScsIGRpc3BsYXkgKTsKCQkkKCBkdC5jb2x1bW4oIGNvbCApLmZvb3RlcigpICkuY3NzKCAnZGlzcGxheScsIGRpc3BsYXkgKTsKCQlkdC5jb2x1bW4oIGNvbCApLm5vZGVzKCkudG8kKCkuY3NzKCAnZGlzcGxheScsIGRpc3BsYXkgKTsKCgkJLy8gSWYgdGhlIGFyZSBjaGlsZCBub2RlcyBzdG9yZWQsIHdlIG1pZ2h0IG5lZWQgdG8gcmVpbnNlcnQgdGhlbQoJCWlmICggISAkLmlzRW1wdHlPYmplY3QoIF9jaGlsZE5vZGVTdG9yZSApICkgewoJCQlkdC5jZWxscyggbnVsbCwgY29sICkuaW5kZXhlcygpLmVhY2goIGZ1bmN0aW9uIChpZHgpIHsKCQkJCV9jaGlsZE5vZGVzUmVzdG9yZSggZHQsIGlkeC5yb3csIGlkeC5jb2x1bW4gKTsKCQkJfSApOwoJCX0KCX0sCgoKCS8qKgoJICogVXBkYXRlIHRoZSBjZWxsIHRhYiBpbmRleGVzIGZvciBrZXlib2FyZCBhY2Nlc3NpYmlsaXR5LiBUaGlzIGlzIGNhbGxlZCBvbgoJICogZXZlcnkgdGFibGUgZHJhdyAtIHRoYXQgaXMgcG90ZW50aWFsbHkgaW5lZmZpY2llbnQsIGJ1dCBhbHNvIHRoZSBsZWFzdAoJICogY29tcGxleCBvcHRpb24gZ2l2ZW4gdGhhdCBjb2x1bW4gdmlzaWJpbGl0eSBjYW4gY2hhbmdlIG9uIHRoZSBmbHkuIEl0cyBhCgkgKiBzaGFtZSB1c2VyLWZvY3VzIHdhcyByZW1vdmVkIGZyb20gQ1NTIDMgVUksIGFzIGl0IHdvdWxkIGhhdmUgc29sdmVkIHRoaXMKCSAqIGlzc3VlIHdpdGggYSBzaW5nbGUgQ1NTIHN0YXRlbWVudC4KCSAqCgkgKiBAcHJpdmF0ZQoJICovCglfdGFiSW5kZXhlczogZnVuY3Rpb24gKCkKCXsKCQl2YXIgZHQgPSB0aGlzLnMuZHQ7CgkJdmFyIGNlbGxzID0gZHQuY2VsbHMoIHsgcGFnZTogJ2N1cnJlbnQnIH0gKS5ub2RlcygpLnRvJCgpOwoJCXZhciBjdHggPSBkdC5zZXR0aW5ncygpWzBdOwoJCXZhciB0YXJnZXQgPSB0aGlzLmMuZGV0YWlscy50YXJnZXQ7CgoJCWNlbGxzLmZpbHRlciggJ1tkYXRhLWR0ci1rZXlib2FyZF0nICkucmVtb3ZlRGF0YSggJ1tkYXRhLWR0ci1rZXlib2FyZF0nICk7CgoJCWlmICggdHlwZW9mIHRhcmdldCA9PT0gJ251bWJlcicgKSB7CgkJCWR0LmNlbGxzKCBudWxsLCB0YXJnZXQsIHsgcGFnZTogJ2N1cnJlbnQnIH0gKS5ub2RlcygpLnRvJCgpCgkJCQkuYXR0ciggJ3RhYkluZGV4JywgY3R4LmlUYWJJbmRleCApCgkJCQkuZGF0YSggJ2R0ci1rZXlib2FyZCcsIDEgKTsKCQl9CgkJZWxzZSB7CgkJCS8vIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrIC0gd2UgbmVlZCB0byBsaW1pdCB0aGUgc2VsZWN0ZWQgbm9kZXMgdG8ganVzdAoJCQkvLyB0aG9zZSBvZiB0aGlzIHRhYmxlCgkJCWlmICggdGFyZ2V0ID09PSAndGQ6Zmlyc3QtY2hpbGQsIHRoOmZpcnN0LWNoaWxkJyApIHsKCQkJCXRhcmdldCA9ICc+dGQ6Zmlyc3QtY2hpbGQsID50aDpmaXJzdC1jaGlsZCc7CgkJCX0KCgkJCSQoIHRhcmdldCwgZHQucm93cyggeyBwYWdlOiAnY3VycmVudCcgfSApLm5vZGVzKCkgKQoJCQkJLmF0dHIoICd0YWJJbmRleCcsIGN0eC5pVGFiSW5kZXggKQoJCQkJLmRhdGEoICdkdHIta2V5Ym9hcmQnLCAxICk7CgkJfQoJfQp9ICk7CgoKLyoqCiAqIExpc3Qgb2YgZGVmYXVsdCBicmVha3BvaW50cy4gRWFjaCBpdGVtIGluIHRoZSBhcnJheSBpcyBhbiBvYmplY3Qgd2l0aCB0d28KICogcHJvcGVydGllczoKICoKICogKiBgbmFtZWAgLSB0aGUgYnJlYWtwb2ludCBuYW1lLgogKiAqIGB3aWR0aGAgLSB0aGUgYnJlYWtwb2ludCB3aWR0aAogKgogKiBAbmFtZSBSZXNwb25zaXZlLmJyZWFrcG9pbnRzCiAqIEBzdGF0aWMKICovClJlc3BvbnNpdmUuYnJlYWtwb2ludHMgPSBbCgl7IG5hbWU6ICdkZXNrdG9wJywgIHdpZHRoOiBJbmZpbml0eSB9LAoJeyBuYW1lOiAndGFibGV0LWwnLCB3aWR0aDogMTAyNCB9LAoJeyBuYW1lOiAndGFibGV0LXAnLCB3aWR0aDogNzY4IH0sCgl7IG5hbWU6ICdtb2JpbGUtbCcsIHdpZHRoOiA0ODAgfSwKCXsgbmFtZTogJ21vYmlsZS1wJywgd2lkdGg6IDMyMCB9Cl07CgoKLyoqCiAqIERpc3BsYXkgbWV0aG9kcyAtIGZ1bmN0aW9ucyB3aGljaCBkZWZpbmUgaG93IHRoZSBoaWRkZW4gZGF0YSBzaG91bGQgYmUgc2hvd24KICogaW4gdGhlIHRhYmxlLgogKgogKiBAbmFtZXNwYWNlCiAqIEBuYW1lIFJlc3BvbnNpdmUuZGVmYXVsdHMKICogQHN0YXRpYwogKi8KUmVzcG9uc2l2ZS5kaXNwbGF5ID0gewoJY2hpbGRSb3c6IGZ1bmN0aW9uICggcm93LCB1cGRhdGUsIHJlbmRlciApIHsKCQlpZiAoIHVwZGF0ZSApIHsKCQkJaWYgKCAkKHJvdy5ub2RlKCkpLmhhc0NsYXNzKCdwYXJlbnQnKSApIHsKCQkJCXJvdy5jaGlsZCggcmVuZGVyKCksICdjaGlsZCcgKS5zaG93KCk7CgoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQl9CgkJZWxzZSB7CgkJCWlmICggISByb3cuY2hpbGQuaXNTaG93bigpICApIHsKCQkJCXJvdy5jaGlsZCggcmVuZGVyKCksICdjaGlsZCcgKS5zaG93KCk7CgkJCQkkKCByb3cubm9kZSgpICkuYWRkQ2xhc3MoICdwYXJlbnQnICk7CgoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQkJZWxzZSB7CgkJCQlyb3cuY2hpbGQoIGZhbHNlICk7CgkJCQkkKCByb3cubm9kZSgpICkucmVtb3ZlQ2xhc3MoICdwYXJlbnQnICk7CgoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJfQoJfSwKCgljaGlsZFJvd0ltbWVkaWF0ZTogZnVuY3Rpb24gKCByb3csIHVwZGF0ZSwgcmVuZGVyICkgewoJCWlmICggKCEgdXBkYXRlICYmIHJvdy5jaGlsZC5pc1Nob3duKCkpIHx8ICEgcm93LnJlc3BvbnNpdmUuaGFzSGlkZGVuKCkgKSB7CgkJCS8vIFVzZXIgaW50ZXJhY3Rpb24gYW5kIHRoZSByb3cgaXMgc2hvdywgb3Igbm90aGluZyB0byBzaG93CgkJCXJvdy5jaGlsZCggZmFsc2UgKTsKCQkJJCggcm93Lm5vZGUoKSApLnJlbW92ZUNsYXNzKCAncGFyZW50JyApOwoKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQllbHNlIHsKCQkJLy8gRGlzcGxheQoJCQlyb3cuY2hpbGQoIHJlbmRlcigpLCAnY2hpbGQnICkuc2hvdygpOwoJCQkkKCByb3cubm9kZSgpICkuYWRkQ2xhc3MoICdwYXJlbnQnICk7CgoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9LAoKCS8vIFRoaXMgaXMgYSB3cmFwcGVyIHNvIHRoZSBtb2RhbCBvcHRpb25zIGZvciBCb290c3RyYXAgYW5kIGpRdWVyeSBVSSBjYW4KCS8vIGhhdmUgb3B0aW9ucyBwYXNzZWQgaW50byB0aGVtLiBUaGlzIHNwZWNpZmljIG9uZSBkb2Vzbid0IG5lZWQgdG8gYmUgYQoJLy8gZnVuY3Rpb24gYnV0IGl0IGlzIGZvciBjb25zaXN0ZW5jeSBpbiB0aGUgYG1vZGFsYCBuYW1lCgltb2RhbDogZnVuY3Rpb24gKCBvcHRpb25zICkgewoJCXJldHVybiBmdW5jdGlvbiAoIHJvdywgdXBkYXRlLCByZW5kZXIgKSB7CgkJCWlmICggISB1cGRhdGUgKSB7CgkJCQkvLyBTaG93IGEgbW9kYWwKCQkJCXZhciBjbG9zZSA9IGZ1bmN0aW9uICgpIHsKCQkJCQltb2RhbC5yZW1vdmUoKTsgLy8gd2lsbCB0aWR5IGV2ZW50cyBmb3IgdXMKCQkJCQkkKGRvY3VtZW50KS5vZmYoICdrZXlwcmVzcy5kdHInICk7CgkJCQl9OwoKCQkJCXZhciBtb2RhbCA9ICQoJzxkaXYgY2xhc3M9ImR0ci1tb2RhbCIvPicpCgkJCQkJLmFwcGVuZCggJCgnPGRpdiBjbGFzcz0iZHRyLW1vZGFsLWRpc3BsYXkiLz4nKQoJCQkJCQkuYXBwZW5kKCAkKCc8ZGl2IGNsYXNzPSJkdHItbW9kYWwtY29udGVudCIvPicpCgkJCQkJCQkuYXBwZW5kKCByZW5kZXIoKSApCgkJCQkJCSkKCQkJCQkJLmFwcGVuZCggJCgnPGRpdiBjbGFzcz0iZHRyLW1vZGFsLWNsb3NlIj4mdGltZXM7PC9kaXY+JyApCgkJCQkJCQkuY2xpY2soIGZ1bmN0aW9uICgpIHsKCQkJCQkJCQljbG9zZSgpOwoJCQkJCQkJfSApCgkJCQkJCSkKCQkJCQkpCgkJCQkJLmFwcGVuZCggJCgnPGRpdiBjbGFzcz0iZHRyLW1vZGFsLWJhY2tncm91bmQiLz4nKQoJCQkJCQkuY2xpY2soIGZ1bmN0aW9uICgpIHsKCQkJCQkJCWNsb3NlKCk7CgkJCQkJCX0gKQoJCQkJCSkKCQkJCQkuYXBwZW5kVG8oICdib2R5JyApOwoKCQkJCSQoZG9jdW1lbnQpLm9uKCAna2V5dXAuZHRyJywgZnVuY3Rpb24gKGUpIHsKCQkJCQlpZiAoIGUua2V5Q29kZSA9PT0gMjcgKSB7CgkJCQkJCWUuc3RvcFByb3BhZ2F0aW9uKCk7CgoJCQkJCQljbG9zZSgpOwoJCQkJCX0KCQkJCX0gKTsKCQkJfQoJCQllbHNlIHsKCQkJCSQoJ2Rpdi5kdHItbW9kYWwtY29udGVudCcpCgkJCQkJLmVtcHR5KCkKCQkJCQkuYXBwZW5kKCByZW5kZXIoKSApOwoJCQl9CgoJCQlpZiAoIG9wdGlvbnMgJiYgb3B0aW9ucy5oZWFkZXIgKSB7CgkJCQkkKCdkaXYuZHRyLW1vZGFsLWNvbnRlbnQnKS5wcmVwZW5kKAoJCQkJCSc8aDI+JytvcHRpb25zLmhlYWRlciggcm93ICkrJzwvaDI+JwoJCQkJKTsKCQkJfQoJCX07Cgl9Cn07CgoKdmFyIF9jaGlsZE5vZGVTdG9yZSA9IHt9OwoKZnVuY3Rpb24gX2NoaWxkTm9kZXMoIGR0LCByb3csIGNvbCApIHsKCXZhciBuYW1lID0gcm93KyctJytjb2w7CgoJaWYgKCBfY2hpbGROb2RlU3RvcmVbIG5hbWUgXSApIHsKCQlyZXR1cm4gX2NoaWxkTm9kZVN0b3JlWyBuYW1lIF07Cgl9CgoJLy8gaHR0cHM6Ly9qc3BlcmYuY29tL2NoaWxkbm9kZXMtYXJyYXktc2xpY2UtdnMtbG9vcAoJdmFyIG5vZGVzID0gW107Cgl2YXIgY2hpbGRyZW4gPSBkdC5jZWxsKCByb3csIGNvbCApLm5vZGUoKS5jaGlsZE5vZGVzOwoJZm9yICggdmFyIGk9MCwgaWVuPWNoaWxkcmVuLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCW5vZGVzLnB1c2goIGNoaWxkcmVuW2ldICk7Cgl9CgoJX2NoaWxkTm9kZVN0b3JlWyBuYW1lIF0gPSBub2RlczsKCglyZXR1cm4gbm9kZXM7Cn0KCmZ1bmN0aW9uIF9jaGlsZE5vZGVzUmVzdG9yZSggZHQsIHJvdywgY29sICkgewoJdmFyIG5hbWUgPSByb3crJy0nK2NvbDsKCglpZiAoICEgX2NoaWxkTm9kZVN0b3JlWyBuYW1lIF0gKSB7CgkJcmV0dXJuOwoJfQoKCXZhciBub2RlID0gZHQuY2VsbCggcm93LCBjb2wgKS5ub2RlKCk7Cgl2YXIgc3RvcmUgPSBfY2hpbGROb2RlU3RvcmVbIG5hbWUgXTsKCXZhciBwYXJlbnQgPSBzdG9yZVswXS5wYXJlbnROb2RlOwoJdmFyIHBhcmVudENoaWxkcmVuID0gcGFyZW50LmNoaWxkTm9kZXM7Cgl2YXIgYSA9IFtdOwoKCWZvciAoIHZhciBpPTAsIGllbj1wYXJlbnRDaGlsZHJlbi5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQlhLnB1c2goIHBhcmVudENoaWxkcmVuW2ldICk7Cgl9CgoJZm9yICggdmFyIGo9MCwgamVuPWEubGVuZ3RoIDsgajxqZW4gOyBqKysgKSB7CgkJbm9kZS5hcHBlbmRDaGlsZCggYVtqXSApOwoJfQoKCV9jaGlsZE5vZGVTdG9yZVsgbmFtZSBdID0gdW5kZWZpbmVkOwp9CgoKLyoqCiAqIERpc3BsYXkgbWV0aG9kcyAtIGZ1bmN0aW9ucyB3aGljaCBkZWZpbmUgaG93IHRoZSBoaWRkZW4gZGF0YSBzaG91bGQgYmUgc2hvd24KICogaW4gdGhlIHRhYmxlLgogKgogKiBAbmFtZXNwYWNlCiAqIEBuYW1lIFJlc3BvbnNpdmUuZGVmYXVsdHMKICogQHN0YXRpYwogKi8KUmVzcG9uc2l2ZS5yZW5kZXJlciA9IHsKCWxpc3RIaWRkZW5Ob2RlczogZnVuY3Rpb24gKCkgewoJCXJldHVybiBmdW5jdGlvbiAoIGFwaSwgcm93SWR4LCBjb2x1bW5zICkgewoJCQl2YXIgdWwgPSAkKCc8dWwgZGF0YS1kdHItaW5kZXg9Iicrcm93SWR4KyciIGNsYXNzPSJkdHItZGV0YWlscyIvPicpOwoJCQl2YXIgZm91bmQgPSBmYWxzZTsKCgkJCXZhciBkYXRhID0gJC5lYWNoKCBjb2x1bW5zLCBmdW5jdGlvbiAoIGksIGNvbCApIHsKCQkJCWlmICggY29sLmhpZGRlbiApIHsKCQkJCQkkKAoJCQkJCQknPGxpIGRhdGEtZHRyLWluZGV4PSInK2NvbC5jb2x1bW5JbmRleCsnIiBkYXRhLWR0LXJvdz0iJytjb2wucm93SW5kZXgrJyIgZGF0YS1kdC1jb2x1bW49IicrY29sLmNvbHVtbkluZGV4KyciPicrCgkJCQkJCQknPHNwYW4gY2xhc3M9ImR0ci10aXRsZSI+JysKCQkJCQkJCQljb2wudGl0bGUrCgkJCQkJCQknPC9zcGFuPiAnKwoJCQkJCQknPC9saT4nCgkJCQkJKQoJCQkJCQkuYXBwZW5kKCAkKCc8c3BhbiBjbGFzcz0iZHRyLWRhdGEiLz4nKS5hcHBlbmQoIF9jaGlsZE5vZGVzKCBhcGksIGNvbC5yb3dJbmRleCwgY29sLmNvbHVtbkluZGV4ICkgKSApLy8gYXBpLmNlbGwoIGNvbC5yb3dJbmRleCwgY29sLmNvbHVtbkluZGV4ICkubm9kZSgpLmNoaWxkTm9kZXMgKSApCgkJCQkJCS5hcHBlbmRUbyggdWwgKTsKCgkJCQkJZm91bmQgPSB0cnVlOwoJCQkJfQoJCQl9ICk7CgoJCQlyZXR1cm4gZm91bmQgPwoJCQkJdWwgOgoJCQkJZmFsc2U7CgkJfTsKCX0sCgoJbGlzdEhpZGRlbjogZnVuY3Rpb24gKCkgewoJCXJldHVybiBmdW5jdGlvbiAoIGFwaSwgcm93SWR4LCBjb2x1bW5zICkgewoJCQl2YXIgZGF0YSA9ICQubWFwKCBjb2x1bW5zLCBmdW5jdGlvbiAoIGNvbCApIHsKCQkJCXJldHVybiBjb2wuaGlkZGVuID8KCQkJCQknPGxpIGRhdGEtZHRyLWluZGV4PSInK2NvbC5jb2x1bW5JbmRleCsnIiBkYXRhLWR0LXJvdz0iJytjb2wucm93SW5kZXgrJyIgZGF0YS1kdC1jb2x1bW49IicrY29sLmNvbHVtbkluZGV4KyciPicrCgkJCQkJCSc8c3BhbiBjbGFzcz0iZHRyLXRpdGxlIj4nKwoJCQkJCQkJY29sLnRpdGxlKwoJCQkJCQknPC9zcGFuPiAnKwoJCQkJCQknPHNwYW4gY2xhc3M9ImR0ci1kYXRhIj4nKwoJCQkJCQkJY29sLmRhdGErCgkJCQkJCSc8L3NwYW4+JysKCQkJCQknPC9saT4nIDoKCQkJCQknJzsKCQkJfSApLmpvaW4oJycpOwoKCQkJcmV0dXJuIGRhdGEgPwoJCQkJJCgnPHVsIGRhdGEtZHRyLWluZGV4PSInK3Jvd0lkeCsnIiBjbGFzcz0iZHRyLWRldGFpbHMiLz4nKS5hcHBlbmQoIGRhdGEgKSA6CgkJCQlmYWxzZTsKCQl9Cgl9LAoKCXRhYmxlQWxsOiBmdW5jdGlvbiAoIG9wdGlvbnMgKSB7CgkJb3B0aW9ucyA9ICQuZXh0ZW5kKCB7CgkJCXRhYmxlQ2xhc3M6ICcnCgkJfSwgb3B0aW9ucyApOwoKCQlyZXR1cm4gZnVuY3Rpb24gKCBhcGksIHJvd0lkeCwgY29sdW1ucyApIHsKCQkJdmFyIGRhdGEgPSAkLm1hcCggY29sdW1ucywgZnVuY3Rpb24gKCBjb2wgKSB7CgkJCQlyZXR1cm4gJzx0ciBkYXRhLWR0LXJvdz0iJytjb2wucm93SW5kZXgrJyIgZGF0YS1kdC1jb2x1bW49IicrY29sLmNvbHVtbkluZGV4KyciPicrCgkJCQkJCSc8dGQ+Jytjb2wudGl0bGUrJzonKyc8L3RkPiAnKwoJCQkJCQknPHRkPicrY29sLmRhdGErJzwvdGQ+JysKCQkJCQknPC90cj4nOwoJCQl9ICkuam9pbignJyk7CgoJCQlyZXR1cm4gJCgnPHRhYmxlIGNsYXNzPSInK29wdGlvbnMudGFibGVDbGFzcysnIGR0ci1kZXRhaWxzIiB3aWR0aD0iMTAwJSIvPicpLmFwcGVuZCggZGF0YSApOwoJCX0KCX0KfTsKCi8qKgogKiBSZXNwb25zaXZlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIGluaXRpYWxpc2F0aW9uCiAqCiAqIEBuYW1lc3BhY2UKICogQG5hbWUgUmVzcG9uc2l2ZS5kZWZhdWx0cwogKiBAc3RhdGljCiAqLwpSZXNwb25zaXZlLmRlZmF1bHRzID0gewoJLyoqCgkgKiBMaXN0IG9mIGJyZWFrcG9pbnRzIGZvciB0aGUgaW5zdGFuY2UuIE5vdGUgdGhhdCB0aGlzIG1lYW5zIHRoYXQgZWFjaAoJICogaW5zdGFuY2UgY2FuIGhhdmUgaXRzIG93biBicmVha3BvaW50cy4gQWRkaXRpb25hbGx5LCB0aGUgYnJlYWtwb2ludHMKCSAqIGNhbm5vdCBiZSBjaGFuZ2VkIG9uY2UgYW4gaW5zdGFuY2UgaGFzIGJlZW4gY3JlYXNlZC4KCSAqCgkgKiBAdHlwZSB7QXJyYXl9CgkgKiBAZGVmYXVsdCBUYWtlcyB0aGUgdmFsdWUgb2YgYFJlc3BvbnNpdmUuYnJlYWtwb2ludHNgCgkgKi8KCWJyZWFrcG9pbnRzOiBSZXNwb25zaXZlLmJyZWFrcG9pbnRzLAoKCS8qKgoJICogRW5hYmxlIC8gZGlzYWJsZSBhdXRvIGhpZGluZyBjYWxjdWxhdGlvbnMuIEl0IGNhbiBoZWxwIHRvIGluY3JlYXNlCgkgKiBwZXJmb3JtYW5jZSBzbGlnaHRseSBpZiB5b3UgZGlzYWJsZSB0aGlzIG9wdGlvbiwgYnV0IGFsbCBjb2x1bW5zIHdvdWxkCgkgKiBuZWVkIHRvIGhhdmUgYnJlYWtwb2ludCBjbGFzc2VzIGFzc2lnbmVkIHRvIHRoZW0KCSAqCgkgKiBAdHlwZSB7Qm9vbGVhbn0KCSAqIEBkZWZhdWx0ICBgdHJ1ZWAKCSAqLwoJYXV0bzogdHJ1ZSwKCgkvKioKCSAqIERldGFpbHMgY29udHJvbC4gSWYgZ2l2ZW4gYXMgYSBzdHJpbmcgdmFsdWUsIHRoZSBgdHlwZWAgcHJvcGVydHkgb2YgdGhlCgkgKiBkZWZhdWx0IG9iamVjdCBpcyBzZXQgdG8gdGhhdCB2YWx1ZSwgYW5kIHRoZSBkZWZhdWx0cyB1c2VkIGZvciB0aGUgcmVzdAoJICogb2YgdGhlIG9iamVjdCAtIHRoaXMgaXMgZm9yIGVhc2Ugb2YgaW1wbGVtZW50YXRpb24uCgkgKgoJICogVGhlIG9iamVjdCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CgkgKgoJICogKiBgZGlzcGxheWAgLSBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB0byBzaG93IGFuZCBoaWRlIHRoZSBoaWRkZW4gZGV0YWlscwoJICogKiBgcmVuZGVyZXJgIC0gZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgZm9yIGRpc3BsYXkgb2YgdGhlIGNoaWxkIHJvdyBkYXRhLgoJICogICBUaGUgZGVmYXVsdCBmdW5jdGlvbiB3aWxsIHNob3cgdGhlIGRhdGEgZnJvbSB0aGUgaGlkZGVuIGNvbHVtbnMKCSAqICogYHRhcmdldGAgLSBVc2VkIGFzIHRoZSBzZWxlY3RvciBmb3Igd2hhdCBvYmplY3RzIHRvIGF0dGFjaCB0aGUgY2hpbGQKCSAqICAgb3BlbiAvIGNsb3NlIHRvCgkgKiAqIGB0eXBlYCAtIGBmYWxzZWAgdG8gZGlzYWJsZSB0aGUgZGV0YWlscyBkaXNwbGF5LCBgaW5saW5lYCBvciBgY29sdW1uYAoJICogICBmb3IgdGhlIHR3byBjb250cm9sIHR5cGVzCgkgKgoJICogQHR5cGUge09iamVjdHxzdHJpbmd9CgkgKi8KCWRldGFpbHM6IHsKCQlkaXNwbGF5OiBSZXNwb25zaXZlLmRpc3BsYXkuY2hpbGRSb3csCgoJCXJlbmRlcmVyOiBSZXNwb25zaXZlLnJlbmRlcmVyLmxpc3RIaWRkZW4oKSwKCgkJdGFyZ2V0OiAwLAoKCQl0eXBlOiAnaW5saW5lJwoJfSwKCgkvKioKCSAqIE9ydGhvZ29uYWwgZGF0YSByZXF1ZXN0IG9wdGlvbi4gVGhpcyBpcyB1c2VkIHRvIGRlZmluZSB0aGUgZGF0YSB0eXBlCgkgKiByZXF1ZXN0ZWQgd2hlbiBSZXNwb25zaXZlIGdldHMgdGhlIGRhdGEgdG8gc2hvdyBpbiB0aGUgY2hpbGQgcm93LgoJICoKCSAqIEB0eXBlIHtTdHJpbmd9CgkgKi8KCW9ydGhvZ29uYWw6ICdkaXNwbGF5Jwp9OwoKCi8qCiAqIEFQSQogKi8KdmFyIEFwaSA9ICQuZm4uZGF0YVRhYmxlLkFwaTsKCi8vIERvZXNuJ3QgZG8gYW55dGhpbmcgLSB3b3JrIGFyb3VuZCBmb3IgYSBidWcgaW4gRFQuLi4gTm90IGRvY3VtZW50ZWQKQXBpLnJlZ2lzdGVyKCAncmVzcG9uc2l2ZSgpJywgZnVuY3Rpb24gKCkgewoJcmV0dXJuIHRoaXM7Cn0gKTsKCkFwaS5yZWdpc3RlciggJ3Jlc3BvbnNpdmUuaW5kZXgoKScsIGZ1bmN0aW9uICggbGkgKSB7CglsaSA9ICQobGkpOwoKCXJldHVybiB7CgkJY29sdW1uOiBsaS5kYXRhKCdkdHItaW5kZXgnKSwKCQlyb3c6ICAgIGxpLnBhcmVudCgpLmRhdGEoJ2R0ci1pbmRleCcpCgl9Owp9ICk7CgpBcGkucmVnaXN0ZXIoICdyZXNwb25zaXZlLnJlYnVpbGQoKScsIGZ1bmN0aW9uICgpIHsKCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIGN0eCApIHsKCQlpZiAoIGN0eC5fcmVzcG9uc2l2ZSApIHsKCQkJY3R4Ll9yZXNwb25zaXZlLl9jbGFzc0xvZ2ljKCk7CgkJfQoJfSApOwp9ICk7CgpBcGkucmVnaXN0ZXIoICdyZXNwb25zaXZlLnJlY2FsYygpJywgZnVuY3Rpb24gKCkgewoJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggY3R4ICkgewoJCWlmICggY3R4Ll9yZXNwb25zaXZlICkgewoJCQljdHguX3Jlc3BvbnNpdmUuX3Jlc2l6ZUF1dG8oKTsKCQkJY3R4Ll9yZXNwb25zaXZlLl9yZXNpemUoKTsKCQl9Cgl9ICk7Cn0gKTsKCkFwaS5yZWdpc3RlciggJ3Jlc3BvbnNpdmUuaGFzSGlkZGVuKCknLCBmdW5jdGlvbiAoKSB7Cgl2YXIgY3R4ID0gdGhpcy5jb250ZXh0WzBdOwoKCXJldHVybiBjdHguX3Jlc3BvbnNpdmUgPwoJCSQuaW5BcnJheSggZmFsc2UsIGN0eC5fcmVzcG9uc2l2ZS5zLmN1cnJlbnQgKSAhPT0gLTEgOgoJCWZhbHNlOwp9ICk7CgpBcGkucmVnaXN0ZXJQbHVyYWwoICdjb2x1bW5zKCkucmVzcG9uc2l2ZUhpZGRlbigpJywgJ2NvbHVtbigpLnJlc3BvbnNpdmVIaWRkZW4oKScsIGZ1bmN0aW9uICgpIHsKCXJldHVybiB0aGlzLml0ZXJhdG9yKCAnY29sdW1uJywgZnVuY3Rpb24gKCBzZXR0aW5ncywgY29sdW1uICkgewoJCXJldHVybiBzZXR0aW5ncy5fcmVzcG9uc2l2ZSA/CgkJCXNldHRpbmdzLl9yZXNwb25zaXZlLnMuY3VycmVudFsgY29sdW1uIF0gOgoJCQlmYWxzZTsKCX0sIDEgKTsKfSApOwoKCi8qKgogKiBWZXJzaW9uIGluZm9ybWF0aW9uCiAqCiAqIEBuYW1lIFJlc3BvbnNpdmUudmVyc2lvbgogKiBAc3RhdGljCiAqLwpSZXNwb25zaXZlLnZlcnNpb24gPSAnMi4yLjMnOwoKCiQuZm4uZGF0YVRhYmxlLlJlc3BvbnNpdmUgPSBSZXNwb25zaXZlOwokLmZuLkRhdGFUYWJsZS5SZXNwb25zaXZlID0gUmVzcG9uc2l2ZTsKCi8vIEF0dGFjaCBhIGxpc3RlbmVyIHRvIHRoZSBkb2N1bWVudCB3aGljaCBsaXN0ZW5zIGZvciBEYXRhVGFibGVzIGluaXRpYWxpc2F0aW9uCi8vIGV2ZW50cyBzbyB3ZSBjYW4gYXV0b21hdGljYWxseSBpbml0aWFsaXNlCiQoZG9jdW1lbnQpLm9uKCAncHJlSW5pdC5kdC5kdHInLCBmdW5jdGlvbiAoZSwgc2V0dGluZ3MsIGpzb24pIHsKCWlmICggZS5uYW1lc3BhY2UgIT09ICdkdCcgKSB7CgkJcmV0dXJuOwoJfQoKCWlmICggJChzZXR0aW5ncy5uVGFibGUpLmhhc0NsYXNzKCAncmVzcG9uc2l2ZScgKSB8fAoJCSAkKHNldHRpbmdzLm5UYWJsZSkuaGFzQ2xhc3MoICdkdC1yZXNwb25zaXZlJyApIHx8CgkJIHNldHRpbmdzLm9Jbml0LnJlc3BvbnNpdmUgfHwKCQkgRGF0YVRhYmxlLmRlZmF1bHRzLnJlc3BvbnNpdmUKCSkgewoJCXZhciBpbml0ID0gc2V0dGluZ3Mub0luaXQucmVzcG9uc2l2ZTsKCgkJaWYgKCBpbml0ICE9PSBmYWxzZSApIHsKCQkJbmV3IFJlc3BvbnNpdmUoIHNldHRpbmdzLCAkLmlzUGxhaW5PYmplY3QoIGluaXQgKSA/IGluaXQgOiB7fSAgKTsKCQl9Cgl9Cn0gKTsKCgpyZXR1cm4gUmVzcG9uc2l2ZTsKfSkpOwoKCi8qISBSb3dHcm91cCAxLjEuMQogKiDCqTIwMTctMjAxOSBTcHJ5TWVkaWEgTHRkIC0gZGF0YXRhYmxlcy5uZXQvbGljZW5zZQogKi8KCi8qKgogKiBAc3VtbWFyeSAgICAgUm93R3JvdXAKICogQGRlc2NyaXB0aW9uIFJvd0dyb3VwaW5nIGZvciBEYXRhVGFibGVzCiAqIEB2ZXJzaW9uICAgICAxLjEuMQogKiBAZmlsZSAgICAgICAgZGF0YVRhYmxlcy5yb3dHcm91cC5qcwogKiBAYXV0aG9yICAgICAgU3ByeU1lZGlhIEx0ZCAod3d3LnNwcnltZWRpYS5jby51aykKICogQGNvbnRhY3QgICAgIGRhdGF0YWJsZXMubmV0CiAqIEBjb3B5cmlnaHQgICBDb3B5cmlnaHQgMjAxNy0yMDE5IFNwcnlNZWRpYSBMdGQuCiAqCiAqIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgYXZhaWxhYmxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKICogICBNSVQgbGljZW5zZSAtIGh0dHA6Ly9kYXRhdGFibGVzLm5ldC9saWNlbnNlL21pdAogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQogKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBsaWNlbnNlIGZpbGVzIGZvciBkZXRhaWxzLgogKgogKiBGb3IgZGV0YWlscyBwbGVhc2UgcmVmZXIgdG86IGh0dHA6Ly93d3cuZGF0YXRhYmxlcy5uZXQKICovCgooZnVuY3Rpb24oIGZhY3RvcnkgKXsKCWlmICggdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkgewoJCS8vIEFNRAoJCWRlZmluZSggWydqcXVlcnknLCAnZGF0YXRhYmxlcy5uZXQnXSwgZnVuY3Rpb24gKCAkICkgewoJCQlyZXR1cm4gZmFjdG9yeSggJCwgd2luZG93LCBkb2N1bWVudCApOwoJCX0gKTsKCX0KCWVsc2UgaWYgKCB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgKSB7CgkJLy8gQ29tbW9uSlMKCQltb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb290LCAkKSB7CgkJCWlmICggISByb290ICkgewoJCQkJcm9vdCA9IHdpbmRvdzsKCQkJfQoKCQkJaWYgKCAhICQgfHwgISAkLmZuLmRhdGFUYWJsZSApIHsKCQkJCSQgPSByZXF1aXJlKCdkYXRhdGFibGVzLm5ldCcpKHJvb3QsICQpLiQ7CgkJCX0KCgkJCXJldHVybiBmYWN0b3J5KCAkLCByb290LCByb290LmRvY3VtZW50ICk7CgkJfTsKCX0KCWVsc2UgewoJCS8vIEJyb3dzZXIKCQlmYWN0b3J5KCBqUXVlcnksIHdpbmRvdywgZG9jdW1lbnQgKTsKCX0KfShmdW5jdGlvbiggJCwgd2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkICkgewondXNlIHN0cmljdCc7CnZhciBEYXRhVGFibGUgPSAkLmZuLmRhdGFUYWJsZTsKCgp2YXIgUm93R3JvdXAgPSBmdW5jdGlvbiAoIGR0LCBvcHRzICkgewoJLy8gU2FuaXR5IGNoZWNrIHRoYXQgd2UgYXJlIHVzaW5nIERhdGFUYWJsZXMgMS4xMCBvciBuZXdlcgoJaWYgKCAhIERhdGFUYWJsZS52ZXJzaW9uQ2hlY2sgfHwgISBEYXRhVGFibGUudmVyc2lvbkNoZWNrKCAnMS4xMC44JyApICkgewoJCXRocm93ICdSb3dHcm91cCByZXF1aXJlcyBEYXRhVGFibGVzIDEuMTAuOCBvciBuZXdlcic7Cgl9CgoJLy8gVXNlciBhbmQgZGVmYXVsdHMgY29uZmlndXJhdGlvbiBvYmplY3QKCXRoaXMuYyA9ICQuZXh0ZW5kKCB0cnVlLCB7fSwKCQlEYXRhVGFibGUuZGVmYXVsdHMucm93R3JvdXAsCgkJUm93R3JvdXAuZGVmYXVsdHMsCgkJb3B0cwoJKTsKCgkvLyBJbnRlcm5hbCBzZXR0aW5ncwoJdGhpcy5zID0gewoJCWR0OiBuZXcgRGF0YVRhYmxlLkFwaSggZHQgKQoJfTsKCgkvLyBET00gaXRlbXMKCXRoaXMuZG9tID0gewoKCX07CgoJLy8gQ2hlY2sgaWYgcm93IGdyb3VwaW5nIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGlzZWQgb24gdGhpcyB0YWJsZQoJdmFyIHNldHRpbmdzID0gdGhpcy5zLmR0LnNldHRpbmdzKClbMF07Cgl2YXIgZXhpc3RpbmcgPSBzZXR0aW5ncy5yb3dHcm91cDsKCWlmICggZXhpc3RpbmcgKSB7CgkJcmV0dXJuIGV4aXN0aW5nOwoJfQoKCXNldHRpbmdzLnJvd0dyb3VwID0gdGhpczsKCXRoaXMuX2NvbnN0cnVjdG9yKCk7Cn07CgoKJC5leHRlbmQoIFJvd0dyb3VwLnByb3RvdHlwZSwgewoJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJICogQVBJIG1ldGhvZHMgZm9yIERhdGFUYWJsZXMgQVBJIGludGVyZmFjZQoJICovCgoJLyoqCgkgKiBHZXQvc2V0IHRoZSBncm91cGluZyBkYXRhIHNvdXJjZSAtIG5lZWQgdG8gY2FsbCBkcmF3IGFmdGVyIHRoaXMgaXMKCSAqIGV4ZWN1dGVkIGFzIGEgc2V0dGVyCgkgKiBAcmV0dXJucyBzdHJpbmd+Um93R3JvdXAKCSAqLwoJZGF0YVNyYzogZnVuY3Rpb24gKCB2YWwgKQoJewoJCWlmICggdmFsID09PSB1bmRlZmluZWQgKSB7CgkJCXJldHVybiB0aGlzLmMuZGF0YVNyYzsKCQl9CgoJCXZhciBkdCA9IHRoaXMucy5kdDsKCgkJdGhpcy5jLmRhdGFTcmMgPSB2YWw7CgoJCSQoZHQudGFibGUoKS5ub2RlKCkpLnRyaWdnZXJIYW5kbGVyKCAncm93Z3JvdXAtZGF0YXNyYy5kdCcsIFsgZHQsIHZhbCBdICk7CgoJCXJldHVybiB0aGlzOwoJfSwKCgkvKioKCSAqIERpc2FibGUgLSBuZWVkIHRvIGNhbGwgZHJhdyBhZnRlciB0aGlzIGlzIGV4ZWN1dGVkCgkgKiBAcmV0dXJucyBSb3dHcm91cAoJICovCglkaXNhYmxlOiBmdW5jdGlvbiAoKQoJewoJCXRoaXMuYy5lbmFibGUgPSBmYWxzZTsKCQlyZXR1cm4gdGhpczsKCX0sCgoJLyoqCgkgKiBFbmFibGUgLSBuZWVkIHRvIGNhbGwgZHJhdyBhZnRlciB0aGlzIGlzIGV4ZWN1dGVkCgkgKiBAcmV0dXJucyBSb3dHcm91cAoJICovCgllbmFibGU6IGZ1bmN0aW9uICggZmxhZyApCgl7CgkJaWYgKCBmbGFnID09PSBmYWxzZSApIHsKCQkJcmV0dXJuIHRoaXMuZGlzYWJsZSgpOwoJCX0KCgkJdGhpcy5jLmVuYWJsZSA9IHRydWU7CgkJcmV0dXJuIHRoaXM7Cgl9LAoKCgkvKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkgKiBDb25zdHJ1Y3RvcgoJICovCglfY29uc3RydWN0b3I6IGZ1bmN0aW9uICgpCgl7CgkJdmFyIHRoYXQgPSB0aGlzOwoJCXZhciBkdCA9IHRoaXMucy5kdDsKCgkJZHQub24oICdkcmF3LmR0cmcnLCBmdW5jdGlvbiAoKSB7CgkJCWlmICggdGhhdC5jLmVuYWJsZSApIHsKCQkJCXRoYXQuX2RyYXcoKTsKCQkJfQoJCX0gKTsKCgkJZHQub24oICdjb2x1bW4tdmlzaWJpbGl0eS5kdC5kdHJnIHJlc3BvbnNpdmUtcmVzaXplLmR0LmR0cmcnLCBmdW5jdGlvbiAoKSB7CgkJCXRoYXQuX2FkanVzdENvbHNwYW4oKTsKCQl9ICk7CgoJCWR0Lm9uKCAnZGVzdHJveScsIGZ1bmN0aW9uICgpIHsKCQkJZHQub2ZmKCAnLmR0cmcnICk7CgkJfSApOwoKCQlkdC5vbigncmVzcG9uc2l2ZS1yZXNpemUuZHQnLCBmdW5jdGlvbiAoKSB7CgkJCXRoYXQuX2FkanVzdENvbHNwYW4oKTsKCQl9KQoJfSwKCgoJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJICogUHJpdmF0ZSBtZXRob2RzCgkgKi8KCgkvKioKCSAqIEFkanVzdCBjb2x1bW4gc3BhbiB3aGVuIGNvbHVtbiB2aXNpYmlsaXR5IGNoYW5nZXMKCSAqIEBwcml2YXRlCgkgKi8KCV9hZGp1c3RDb2xzcGFuOiBmdW5jdGlvbiAoKQoJewoJCSQoICd0ci4nK3RoaXMuYy5jbGFzc05hbWUsIHRoaXMucy5kdC50YWJsZSgpLmJvZHkoKSApLmZpbmQoJ3RkJykKCQkJLmF0dHIoICdjb2xzcGFuJywgdGhpcy5fY29sc3BhbigpICk7Cgl9LAoKCS8qKgoJICogR2V0IHRoZSBudW1iZXIgb2YgY29sdW1ucyB0aGF0IGEgZ3JvdXBpbmcgcm93IHNob3VsZCBzcGFuCgkgKiBAcHJpdmF0ZQoJICovCglfY29sc3BhbjogZnVuY3Rpb24gKCkKCXsKCQlyZXR1cm4gdGhpcy5zLmR0LmNvbHVtbnMoKS52aXNpYmxlKCkucmVkdWNlKCBmdW5jdGlvbiAoYSwgYikgewoJCQlyZXR1cm4gYSArIGI7CgkJfSwgMCApOwoJfSwKCgoJLyoqCgkgKiBVcGRhdGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbmV2ZXIgd2UgbmVlZCB0byBkcmF3IHRoZSBncm91cGluZyByb3dzLgoJICogVGhpcyBpcyBiYXNpY2FsbHkgYSBib290c3RyYXAgZm9yIHRoZSBzZWxmIGl0ZXJhdGl2ZSBfZ3JvdXAgYW5kIF9ncm91cERpc3BsYXkKCSAqIG1ldGhvZHMKCSAqIEBwcml2YXRlCgkgKi8KCV9kcmF3OiBmdW5jdGlvbiAoKQoJewoJCXZhciBkdCA9IHRoaXMucy5kdDsKCQl2YXIgZ3JvdXBlZFJvd3MgPSB0aGlzLl9ncm91cCggMCwgZHQucm93cyggeyBwYWdlOiAnY3VycmVudCcgfSApLmluZGV4ZXMoKSApOwoKCQl0aGlzLl9ncm91cERpc3BsYXkoIDAsIGdyb3VwZWRSb3dzICk7Cgl9LAoKCS8qKgoJICogR2V0IHRoZSBncm91cGluZyBpbmZvcm1hdGlvbiBmcm9tIGEgZGF0YSBzZXQgKGluZGV4KSBvZiByb3dzCgkgKiBAcGFyYW0ge251bWJlcn0gbGV2ZWwgTmVzdGluZyBsZXZlbAoJICogQHBhcmFtIHtEYXRhVGFibGVzLkFwaX0gcm93cyBBUEkgb2YgdGhlIHJvd3MgdG8gY29uc2lkZXIgZm9yIHRoaXMgZ3JvdXAKCSAqIEByZXR1cm5zIHtvYmplY3RbXX0gTmVzdGVkIGdyb3VwaW5nIGluZm9ybWF0aW9uIC0gaXQgaXMgc3RydWN0dXJlZCBsaWtlIHRoaXM6CgkgKgl7CgkgKgkJZGF0YVBvaW50OiAnRWRpbmJ1cmdoJywKCSAqCQlyb3dzOiBbIDEsMiwzLDQsNSw2LDcgXSwKCSAqCQljaGlsZHJlbjogWyB7CgkgKgkJCWRhdGFQb2ludDogJ2RldmVsb3BlcicKCSAqCQkJcm93czogWyAxLCAyLCAzIF0KCSAqCQl9LAoJICoJCXsKCSAqCQkJZGF0YVBvaW50OiAnc3VwcG9ydCcsCgkgKgkJCXJvd3M6IFsgNCwgNSwgNiwgNyBdCgkgKgkJfSBdCgkgKgl9CgkgKiBAcHJpdmF0ZQoJICovCglfZ3JvdXA6IGZ1bmN0aW9uICggbGV2ZWwsIHJvd3MgKSB7CgkJdmFyIGZucyA9ICQuaXNBcnJheSggdGhpcy5jLmRhdGFTcmMgKSA/IHRoaXMuYy5kYXRhU3JjIDogWyB0aGlzLmMuZGF0YVNyYyBdOwoJCXZhciBmbiA9IERhdGFUYWJsZS5leHQub0FwaS5fZm5HZXRPYmplY3REYXRhRm4oIGZuc1sgbGV2ZWwgXSApOwoJCXZhciBkdCA9IHRoaXMucy5kdDsKCQl2YXIgZ3JvdXAsIGxhc3Q7CgkJdmFyIGRhdGEgPSBbXTsKCQl2YXIgdGhhdCA9IHRoaXM7CgoJCWZvciAoIHZhciBpPTAsIGllbj1yb3dzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQl2YXIgcm93SW5kZXggPSByb3dzW2ldOwoJCQl2YXIgcm93RGF0YSA9IGR0LnJvdyggcm93SW5kZXggKS5kYXRhKCk7CgkJCXZhciBncm91cCA9IGZuKCByb3dEYXRhICk7CgoJCQlpZiAoIGdyb3VwID09PSBudWxsIHx8IGdyb3VwID09PSB1bmRlZmluZWQgKSB7CgkJCQlncm91cCA9IHRoYXQuYy5lbXB0eURhdGFHcm91cDsKCQkJfQoJCQkKCQkJaWYgKCBsYXN0ID09PSB1bmRlZmluZWQgfHwgZ3JvdXAgIT09IGxhc3QgKSB7CgkJCQlkYXRhLnB1c2goIHsKCQkJCQlkYXRhUG9pbnQ6IGdyb3VwLAoJCQkJCXJvd3M6IFtdCgkJCQl9ICk7CgoJCQkJbGFzdCA9IGdyb3VwOwoJCQl9CgoJCQlkYXRhWyBkYXRhLmxlbmd0aC0xIF0ucm93cy5wdXNoKCByb3dJbmRleCApOwoJCX0KCgkJaWYgKCBmbnNbIGxldmVsKzEgXSAhPT0gdW5kZWZpbmVkICkgewoJCQlmb3IgKCB2YXIgaT0wLCBpZW49ZGF0YS5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCWRhdGFbaV0uY2hpbGRyZW4gPSB0aGlzLl9ncm91cCggbGV2ZWwrMSwgZGF0YVtpXS5yb3dzICk7CgkJCX0KCQl9CgoJCXJldHVybiBkYXRhOwoJfSwKCgkvKioKCSAqIFJvdyBncm91cCBkaXNwbGF5IC0gaW5zZXJ0IHRoZSByb3dzIGludG8gdGhlIGRvY3VtZW50CgkgKiBAcGFyYW0ge251bWJlcn0gbGV2ZWwgTmVzdGluZyBsZXZlbAoJICogQHBhcmFtIHtvYmplY3RbXX0gZ3JvdXBzIFRha2VzIHRoZSBuZXN0ZWQgYXJyYXkgZnJvbSBgX2dyb3VwYAoJICogQHByaXZhdGUKCSAqLwoJX2dyb3VwRGlzcGxheTogZnVuY3Rpb24gKCBsZXZlbCwgZ3JvdXBzICkKCXsKCQl2YXIgZHQgPSB0aGlzLnMuZHQ7CgkJdmFyIGRpc3BsYXk7CgkKCQlmb3IgKCB2YXIgaT0wLCBpZW49Z3JvdXBzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQl2YXIgZ3JvdXAgPSBncm91cHNbaV07CgkJCXZhciBncm91cE5hbWUgPSBncm91cC5kYXRhUG9pbnQ7CgkJCXZhciByb3c7CgkJCXZhciByb3dzID0gZ3JvdXAucm93czsKCgkJCWlmICggdGhpcy5jLnN0YXJ0UmVuZGVyICkgewoJCQkJZGlzcGxheSA9IHRoaXMuYy5zdGFydFJlbmRlci5jYWxsKCB0aGlzLCBkdC5yb3dzKHJvd3MpLCBncm91cE5hbWUsIGxldmVsICk7CgkJCQlyb3cgPSB0aGlzLl9yb3dXcmFwKCBkaXNwbGF5LCB0aGlzLmMuc3RhcnRDbGFzc05hbWUsIGxldmVsICk7CgoJCQkJaWYgKCByb3cgKSB7CgkJCQkJcm93Lmluc2VydEJlZm9yZSggZHQucm93KCByb3dzWzBdICkubm9kZSgpICk7CgkJCQl9CgkJCX0KCgkJCWlmICggdGhpcy5jLmVuZFJlbmRlciApIHsKCQkJCWRpc3BsYXkgPSB0aGlzLmMuZW5kUmVuZGVyLmNhbGwoIHRoaXMsIGR0LnJvd3Mocm93cyksIGdyb3VwTmFtZSwgbGV2ZWwgKTsKCQkJCXJvdyA9IHRoaXMuX3Jvd1dyYXAoIGRpc3BsYXksIHRoaXMuYy5lbmRDbGFzc05hbWUsIGxldmVsICk7CgoJCQkJaWYgKCByb3cgKSB7CgkJCQkJcm93Lmluc2VydEFmdGVyKCBkdC5yb3coIHJvd3NbIHJvd3MubGVuZ3RoLTEgXSApLm5vZGUoKSApOwoJCQkJfQoJCQl9CgoJCQlpZiAoIGdyb3VwLmNoaWxkcmVuICkgewoJCQkJdGhpcy5fZ3JvdXBEaXNwbGF5KCBsZXZlbCsxLCBncm91cC5jaGlsZHJlbiApOwoJCQl9CgkJfQoJfSwKCgkvKioKCSAqIFRha2UgYSByZW5kZXJlZCB2YWx1ZSBmcm9tIGFuIGVuZCB1c2VyIGFuZCBtYWtlIGl0IHN1aXRhYmxlIGZvciBkaXNwbGF5CgkgKiBhcyBhIHJvdywgYnkgd3JhcHBpbmcgaXQgaW4gYSByb3csIG9yIGRldGVjdGluZyB0aGF0IGl0IGlzIGEgcm93LgoJICogQHBhcmFtIHtub2RlfGpRdWVyeXxzdHJpbmd9IGRpc3BsYXkgRGlzcGxheSB2YWx1ZQoJICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSBDbGFzcyB0byBhZGQgdG8gdGhlIHJvdwoJICogQHBhcmFtIHthcnJheX0gZ3JvdXAKCSAqIEBwYXJhbSB7bnVtYmVyfSBncm91cCBsZXZlbAoJICogQHByaXZhdGUKCSAqLwoJX3Jvd1dyYXA6IGZ1bmN0aW9uICggZGlzcGxheSwgY2xhc3NOYW1lLCBsZXZlbCApCgl7CgkJdmFyIHJvdzsKCQkKCQlpZiAoIGRpc3BsYXkgPT09IG51bGwgfHwgZGlzcGxheSA9PT0gJycgKSB7CgkJCWRpc3BsYXkgPSB0aGlzLmMuZW1wdHlEYXRhR3JvdXA7CgkJfQoKCQlpZiAoIGRpc3BsYXkgPT09IHVuZGVmaW5lZCB8fCBkaXNwbGF5ID09PSBudWxsICkgewoJCQlyZXR1cm4gbnVsbDsKCQl9CgkJCgkJaWYgKCB0eXBlb2YgZGlzcGxheSA9PT0gJ29iamVjdCcgJiYgZGlzcGxheS5ub2RlTmFtZSAmJiBkaXNwbGF5Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICd0cicpIHsKCQkJcm93ID0gJChkaXNwbGF5KTsKCQl9CgkJZWxzZSBpZiAoZGlzcGxheSBpbnN0YW5jZW9mICQgJiYgZGlzcGxheS5sZW5ndGggJiYgZGlzcGxheVswXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAndHInKSB7CgkJCXJvdyA9IGRpc3BsYXk7CgkJfQoJCWVsc2UgewoJCQlyb3cgPSAkKCc8dHIvPicpCgkJCQkuYXBwZW5kKAoJCQkJCSQoJzx0ZC8+JykKCQkJCQkJLmF0dHIoICdjb2xzcGFuJywgdGhpcy5fY29sc3BhbigpICkKCQkJCQkJLmFwcGVuZCggZGlzcGxheSAgKQoJCQkJKTsKCQl9CgoJCXJldHVybiByb3cKCQkJLmFkZENsYXNzKCB0aGlzLmMuY2xhc3NOYW1lICkKCQkJLmFkZENsYXNzKCBjbGFzc05hbWUgKQoJCQkuYWRkQ2xhc3MoICdkdHJnLWxldmVsLScrbGV2ZWwgKTsKCX0KfSApOwoKCi8qKgogKiBSb3dHcm91cCBkZWZhdWx0IHNldHRpbmdzIGZvciBpbml0aWFsaXNhdGlvbgogKgogKiBAbmFtZXNwYWNlCiAqIEBuYW1lIFJvd0dyb3VwLmRlZmF1bHRzCiAqIEBzdGF0aWMKICovClJvd0dyb3VwLmRlZmF1bHRzID0gewoJLyoqCgkgKiBDbGFzcyB0byBhcHBseSB0byBncm91cGluZyByb3dzIC0gYXBwbGllZCB0byBib3RoIHRoZSBzdGFydCBhbmQKCSAqIGVuZCBncm91cGluZyByb3dzLgoJICogQHR5cGUgc3RyaW5nCgkgKi8KCWNsYXNzTmFtZTogJ2R0cmctZ3JvdXAnLAoKCS8qKgoJICogRGF0YSBwcm9wZXJ0eSBmcm9tIHdoaWNoIHRvIHJlYWQgdGhlIGdyb3VwaW5nIGluZm9ybWF0aW9uCgkgKiBAdHlwZSBzdHJpbmd8aW50ZWdlcnxhcnJheQoJICovCglkYXRhU3JjOiAwLAoKCS8qKgoJICogVGV4dCB0byBzaG93IGlmIG5vIGRhdGEgaXMgZm91bmQgZm9yIGEgZ3JvdXAKCSAqIEB0eXBlIHN0cmluZwoJICovCgllbXB0eURhdGFHcm91cDogJ05vIGdyb3VwJywKCgkvKioKCSAqIEluaXRpYWwgZW5hYmxlbWVudCBzdGF0ZQoJICogQGJvb2xlYW4KCSAqLwoJZW5hYmxlOiB0cnVlLAoKCS8qKgoJICogQ2xhc3MgbmFtZSB0byBnaXZlIHRvIHRoZSBlbmQgZ3JvdXBpbmcgcm93CgkgKiBAdHlwZSBzdHJpbmcKCSAqLwoJZW5kQ2xhc3NOYW1lOiAnZHRyZy1lbmQnLAoKCS8qKgoJICogRW5kIGdyb3VwaW5nIGxhYmVsIGZ1bmN0aW9uCgkgKiBAZnVuY3Rpb24KCSAqLwoJZW5kUmVuZGVyOiBudWxsLAoKCS8qKgoJICogQ2xhc3MgbmFtZSB0byBnaXZlIHRvIHRoZSBzdGFydCBncm91cGluZyByb3cKCSAqIEB0eXBlIHN0cmluZwoJICovCglzdGFydENsYXNzTmFtZTogJ2R0cmctc3RhcnQnLAoKCS8qKgoJICogU3RhcnQgZ3JvdXBpbmcgbGFiZWwgZnVuY3Rpb24KCSAqIEBmdW5jdGlvbgoJICovCglzdGFydFJlbmRlcjogZnVuY3Rpb24gKCByb3dzLCBncm91cCApIHsKCQlyZXR1cm4gZ3JvdXA7Cgl9Cn07CgoKUm93R3JvdXAudmVyc2lvbiA9ICIxLjEuMSI7CgoKJC5mbi5kYXRhVGFibGUuUm93R3JvdXAgPSBSb3dHcm91cDsKJC5mbi5EYXRhVGFibGUuUm93R3JvdXAgPSBSb3dHcm91cDsKCgpEYXRhVGFibGUuQXBpLnJlZ2lzdGVyKCAncm93R3JvdXAoKScsIGZ1bmN0aW9uICgpIHsKCXJldHVybiB0aGlzOwp9ICk7CgpEYXRhVGFibGUuQXBpLnJlZ2lzdGVyKCAncm93R3JvdXAoKS5kaXNhYmxlKCknLCBmdW5jdGlvbiAoKSB7CglyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKGN0eCkgewoJCWlmICggY3R4LnJvd0dyb3VwICkgewoJCQljdHgucm93R3JvdXAuZW5hYmxlKCBmYWxzZSApOwoJCX0KCX0gKTsKfSApOwoKRGF0YVRhYmxlLkFwaS5yZWdpc3RlciggJ3Jvd0dyb3VwKCkuZW5hYmxlKCknLCBmdW5jdGlvbiAoIG9wdHMgKSB7CglyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKGN0eCkgewoJCWlmICggY3R4LnJvd0dyb3VwICkgewoJCQljdHgucm93R3JvdXAuZW5hYmxlKCBvcHRzID09PSB1bmRlZmluZWQgPyB0cnVlIDogb3B0cyApOwoJCX0KCX0gKTsKfSApOwoKRGF0YVRhYmxlLkFwaS5yZWdpc3RlciggJ3Jvd0dyb3VwKCkuZGF0YVNyYygpJywgZnVuY3Rpb24gKCB2YWwgKSB7CglpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkgewoJCXJldHVybiB0aGlzLmNvbnRleHRbMF0ucm93R3JvdXAuZGF0YVNyYygpOwoJfQoKCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoY3R4KSB7CgkJaWYgKCBjdHgucm93R3JvdXAgKSB7CgkJCWN0eC5yb3dHcm91cC5kYXRhU3JjKCB2YWwgKTsKCQl9Cgl9ICk7Cn0gKTsKCgovLyBBdHRhY2ggYSBsaXN0ZW5lciB0byB0aGUgZG9jdW1lbnQgd2hpY2ggbGlzdGVucyBmb3IgRGF0YVRhYmxlcyBpbml0aWFsaXNhdGlvbgovLyBldmVudHMgc28gd2UgY2FuIGF1dG9tYXRpY2FsbHkgaW5pdGlhbGlzZQokKGRvY3VtZW50KS5vbiggJ3ByZUluaXQuZHQuZHRyZycsIGZ1bmN0aW9uIChlLCBzZXR0aW5ncywganNvbikgewoJaWYgKCBlLm5hbWVzcGFjZSAhPT0gJ2R0JyApIHsKCQlyZXR1cm47Cgl9CgoJdmFyIGluaXQgPSBzZXR0aW5ncy5vSW5pdC5yb3dHcm91cDsKCXZhciBkZWZhdWx0cyA9IERhdGFUYWJsZS5kZWZhdWx0cy5yb3dHcm91cDsKCglpZiAoIGluaXQgfHwgZGVmYXVsdHMgKSB7CgkJdmFyIG9wdHMgPSAkLmV4dGVuZCgge30sIGRlZmF1bHRzLCBpbml0ICk7CgoJCWlmICggaW5pdCAhPT0gZmFsc2UgKSB7CgkJCW5ldyBSb3dHcm91cCggc2V0dGluZ3MsIG9wdHMgICk7CgkJfQoJfQp9ICk7CgoKcmV0dXJuIFJvd0dyb3VwOwoKfSkpOwoKCi8qISBSb3dSZW9yZGVyIDEuMi42CiAqIDIwMTUtMjAxOSBTcHJ5TWVkaWEgTHRkIC0gZGF0YXRhYmxlcy5uZXQvbGljZW5zZQogKi8KCi8qKgogKiBAc3VtbWFyeSAgICAgUm93UmVvcmRlcgogKiBAZGVzY3JpcHRpb24gUm93IHJlb3JkZXJpbmcgZXh0ZW5zaW9uIGZvciBEYXRhVGFibGVzCiAqIEB2ZXJzaW9uICAgICAxLjIuNgogKiBAZmlsZSAgICAgICAgZGF0YVRhYmxlcy5yb3dSZW9yZGVyLmpzCiAqIEBhdXRob3IgICAgICBTcHJ5TWVkaWEgTHRkICh3d3cuc3ByeW1lZGlhLmNvLnVrKQogKiBAY29udGFjdCAgICAgd3d3LnNwcnltZWRpYS5jby51ay9jb250YWN0CiAqIEBjb3B5cmlnaHQgICBDb3B5cmlnaHQgMjAxNS0yMDE5IFNwcnlNZWRpYSBMdGQuCiAqCiAqIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgYXZhaWxhYmxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKICogICBNSVQgbGljZW5zZSAtIGh0dHA6Ly9kYXRhdGFibGVzLm5ldC9saWNlbnNlL21pdAogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAogKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQogKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBsaWNlbnNlIGZpbGVzIGZvciBkZXRhaWxzLgogKgogKiBGb3IgZGV0YWlscyBwbGVhc2UgcmVmZXIgdG86IGh0dHA6Ly93d3cuZGF0YXRhYmxlcy5uZXQKICovCgooZnVuY3Rpb24oIGZhY3RvcnkgKXsKCWlmICggdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkgewoJCS8vIEFNRAoJCWRlZmluZSggWydqcXVlcnknLCAnZGF0YXRhYmxlcy5uZXQnXSwgZnVuY3Rpb24gKCAkICkgewoJCQlyZXR1cm4gZmFjdG9yeSggJCwgd2luZG93LCBkb2N1bWVudCApOwoJCX0gKTsKCX0KCWVsc2UgaWYgKCB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgKSB7CgkJLy8gQ29tbW9uSlMKCQltb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb290LCAkKSB7CgkJCWlmICggISByb290ICkgewoJCQkJcm9vdCA9IHdpbmRvdzsKCQkJfQoKCQkJaWYgKCAhICQgfHwgISAkLmZuLmRhdGFUYWJsZSApIHsKCQkJCSQgPSByZXF1aXJlKCdkYXRhdGFibGVzLm5ldCcpKHJvb3QsICQpLiQ7CgkJCX0KCgkJCXJldHVybiBmYWN0b3J5KCAkLCByb290LCByb290LmRvY3VtZW50ICk7CgkJfTsKCX0KCWVsc2UgewoJCS8vIEJyb3dzZXIKCQlmYWN0b3J5KCBqUXVlcnksIHdpbmRvdywgZG9jdW1lbnQgKTsKCX0KfShmdW5jdGlvbiggJCwgd2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkICkgewondXNlIHN0cmljdCc7CnZhciBEYXRhVGFibGUgPSAkLmZuLmRhdGFUYWJsZTsKCgovKioKICogUm93UmVvcmRlciBwcm92aWRlcyB0aGUgYWJpbGl0eSBpbiBEYXRhVGFibGVzIHRvIGNsaWNrIGFuZCBkcmFnIHJvd3MgdG8KICogcmVvcmRlciB0aGVtLiBXaGVuIGEgcm93IGlzIGRyb3BwZWQgdGhlIGRhdGEgZm9yIHRoZSByb3dzIGVmZmVjdGVkIHdpbGwgYmUKICogdXBkYXRlZCB0byByZWZsZWN0IHRoZSBjaGFuZ2UuIE5vcm1hbGx5IHRoaXMgZGF0YSBwb2ludCBzaG91bGQgYWxzbyBiZSB0aGUKICogY29sdW1uIGJlaW5nIHNvcnRlZCB1cG9uIGluIHRoZSBEYXRhVGFibGUgYnV0IHRoaXMgZG9lcyBub3QgbmVlZCB0byBiZSB0aGUKICogY2FzZS4gUm93UmVvcmRlciBpbXBsZW1lbnRzIGEgImRhdGEgc3dhcCIgbWV0aG9kIC0gc28gdGhlIHJvd3MgYmVpbmcKICogcmVvcmRlcmVkIHRha2UgdGhlIHZhbHVlIG9mIHRoZSBkYXRhIHBvaW50IGZyb20gdGhlIHJvdyB0aGF0IHVzZWQgdG8gb2NjdXB5CiAqIHRoZSByb3cncyBuZXcgcG9zaXRpb24uCiAqCiAqIEluaXRpYWxpc2F0aW9uIGlzIGRvbmUgYnkgZWl0aGVyOgogKgogKiAqIGByb3dSZW9yZGVyYCBwYXJhbWV0ZXIgaW4gdGhlIERhdGFUYWJsZSBpbml0aWFsaXNhdGlvbiBvYmplY3QKICogKiBgbmV3ICQuZm4uZGF0YVRhYmxlLlJvd1Jlb3JkZXIoIHRhYmxlLCBvcHRzIClgIGFmdGVyIERhdGFUYWJsZXMKICogICBpbml0aWFsaXNhdGlvbi4KICogCiAqICBAY2xhc3MKICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdCBmb3IgdGhlIGhvc3QgdGFibGUKICogIEBwYXJhbSB7b2JqZWN0fSBbb3B0c10gQ29uZmlndXJhdGlvbiBvcHRpb25zCiAqICBAcmVxdWlyZXMgalF1ZXJ5IDEuNysKICogIEByZXF1aXJlcyBEYXRhVGFibGVzIDEuMTAuNysKICovCnZhciBSb3dSZW9yZGVyID0gZnVuY3Rpb24gKCBkdCwgb3B0cyApIHsKCS8vIFNhbml0eSBjaGVjayB0aGF0IHdlIGFyZSB1c2luZyBEYXRhVGFibGVzIDEuMTAgb3IgbmV3ZXIKCWlmICggISBEYXRhVGFibGUudmVyc2lvbkNoZWNrIHx8ICEgRGF0YVRhYmxlLnZlcnNpb25DaGVjayggJzEuMTAuOCcgKSApIHsKCQl0aHJvdyAnRGF0YVRhYmxlcyBSb3dSZW9yZGVyIHJlcXVpcmVzIERhdGFUYWJsZXMgMS4xMC44IG9yIG5ld2VyJzsKCX0KCgkvLyBVc2VyIGFuZCBkZWZhdWx0cyBjb25maWd1cmF0aW9uIG9iamVjdAoJdGhpcy5jID0gJC5leHRlbmQoIHRydWUsIHt9LAoJCURhdGFUYWJsZS5kZWZhdWx0cy5yb3dSZW9yZGVyLAoJCVJvd1Jlb3JkZXIuZGVmYXVsdHMsCgkJb3B0cwoJKTsKCgkvLyBJbnRlcm5hbCBzZXR0aW5ncwoJdGhpcy5zID0gewoJCS8qKiBAdHlwZSB7aW50ZWdlcn0gU2Nyb2xsIGJvZHkgdG9wIGNhY2hlICovCgkJYm9keVRvcDogbnVsbCwKCgkJLyoqIEB0eXBlIHtEYXRhVGFibGUuQXBpfSBEYXRhVGFibGVzJyBBUEkgaW5zdGFuY2UgKi8KCQlkdDogbmV3IERhdGFUYWJsZS5BcGkoIGR0ICksCgoJCS8qKiBAdHlwZSB7ZnVuY3Rpb259IERhdGEgZmV0Y2ggZnVuY3Rpb24gKi8KCQlnZXREYXRhRm46IERhdGFUYWJsZS5leHQub0FwaS5fZm5HZXRPYmplY3REYXRhRm4oIHRoaXMuYy5kYXRhU3JjICksCgoJCS8qKiBAdHlwZSB7YXJyYXl9IFBpeGVsIHBvc2l0aW9ucyBmb3Igcm93IGluc2VydGlvbiBjYWxjdWxhdGlvbiAqLwoJCW1pZGRsZXM6IG51bGwsCgoJCS8qKiBAdHlwZSB7T2JqZWN0fSBDYWNoZWQgZGltZW5zaW9uIGluZm9ybWF0aW9uIGZvciB1c2UgaW4gdGhlIG1vdXNlIG1vdmUgZXZlbnQgaGFuZGxlciAqLwoJCXNjcm9sbDoge30sCgoJCS8qKiBAdHlwZSB7aW50ZWdlcn0gSW50ZXJ2YWwgb2JqZWN0IHVzZWQgZm9yIHNtb290aCBzY3JvbGxpbmcgKi8KCQlzY3JvbGxJbnRlcnZhbDogbnVsbCwKCgkJLyoqIEB0eXBlIHtmdW5jdGlvbn0gRGF0YSBzZXQgZnVuY3Rpb24gKi8KCQlzZXREYXRhRm46IERhdGFUYWJsZS5leHQub0FwaS5fZm5TZXRPYmplY3REYXRhRm4oIHRoaXMuYy5kYXRhU3JjICksCgoJCS8qKiBAdHlwZSB7T2JqZWN0fSBNb3VzZSBkb3duIGluZm9ybWF0aW9uICovCgkJc3RhcnQ6IHsKCQkJdG9wOiAwLAoJCQlsZWZ0OiAwLAoJCQlvZmZzZXRUb3A6IDAsCgkJCW9mZnNldExlZnQ6IDAsCgkJCW5vZGVzOiBbXQoJCX0sCgoJCS8qKiBAdHlwZSB7aW50ZWdlcn0gV2luZG93IGhlaWdodCBjYWNoZWQgdmFsdWUgKi8KCQl3aW5kb3dIZWlnaHQ6IDAsCgoJCS8qKiBAdHlwZSB7aW50ZWdlcn0gRG9jdW1lbnQgb3V0ZXIgaGVpZ2h0IGNhY2hlZCB2YWx1ZSAqLwoJCWRvY3VtZW50T3V0ZXJIZWlnaHQ6IDAsCgoJCS8qKiBAdHlwZSB7aW50ZWdlcn0gRE9NIGNsb25lIG91dGVyIGhlaWdodCBjYWNoZWQgdmFsdWUgKi8KCQlkb21DbG9uZU91dGVySGVpZ2h0OiAwCgl9OwoKCS8vIERPTSBpdGVtcwoJdGhpcy5kb20gPSB7CgkJLyoqIEB0eXBlIHtqUXVlcnl9IENsb25lZCByb3cgYmVpbmcgbW92ZWQgYXJvdW5kICovCgkJY2xvbmU6IG51bGwsCgoJCS8qKiBAdHlwZSB7alF1ZXJ5fSBEYXRhVGFibGVzIHNjcm9sbGluZyBjb250YWluZXIgKi8KCQlkdFNjcm9sbDogJCgnZGl2LmRhdGFUYWJsZXNfc2Nyb2xsQm9keScsIHRoaXMucy5kdC50YWJsZSgpLmNvbnRhaW5lcigpKQoJfTsKCgkvLyBDaGVjayBpZiByb3cgcmVvcmRlciBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpc2VkIG9uIHRoaXMgdGFibGUKCXZhciBzZXR0aW5ncyA9IHRoaXMucy5kdC5zZXR0aW5ncygpWzBdOwoJdmFyIGV4aXNpdGluZyA9IHNldHRpbmdzLnJvd3Jlb3JkZXI7CglpZiAoIGV4aXNpdGluZyApIHsKCQlyZXR1cm4gZXhpc2l0aW5nOwoJfQoKCXNldHRpbmdzLnJvd3Jlb3JkZXIgPSB0aGlzOwoJdGhpcy5fY29uc3RydWN0b3IoKTsKfTsKCgokLmV4dGVuZCggUm93UmVvcmRlci5wcm90b3R5cGUsIHsKCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKCSAqIENvbnN0cnVjdG9yCgkgKi8KCgkvKioKCSAqIEluaXRpYWxpc2UgdGhlIFJvd1Jlb3JkZXIgaW5zdGFuY2UKCSAqCgkgKiBAcHJpdmF0ZQoJICovCglfY29uc3RydWN0b3I6IGZ1bmN0aW9uICgpCgl7CgkJdmFyIHRoYXQgPSB0aGlzOwoJCXZhciBkdCA9IHRoaXMucy5kdDsKCQl2YXIgdGFibGUgPSAkKCBkdC50YWJsZSgpLm5vZGUoKSApOwoKCQkvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHRoZSByb3cgcG9zaXRpb25zIHJlbGF0aXZlIHRvIHRoZSB0YWJsZQoJCWlmICggdGFibGUuY3NzKCdwb3NpdGlvbicpID09PSAnc3RhdGljJyApIHsKCQkJdGFibGUuY3NzKCAncG9zaXRpb24nLCAncmVsYXRpdmUnICk7CgkJfQoKCQkvLyBsaXN0ZW4gZm9yIG1vdXNlIGRvd24gb24gdGhlIHRhcmdldCBjb2x1bW4gLSB3ZSBoYXZlIHRvIGltcGxlbWVudAoJCS8vIHRoaXMgcmF0aGVyIHRoYW4gdXNpbmcgSFRNTDUgZHJhZyBhbmQgZHJvcCBhcyBkcmFnIGFuZCBkcm9wIGRvZXNuJ3QKCQkvLyBhcHBlYXIgdG8gd29yayBvbiB0YWJsZSByb3dzIGF0IHRoaXMgdGltZS4gQWxzbyBtb2JpbGUgYnJvd3NlcnMgYXJlCgkJLy8gbm90IHN1cHBvcnRlZC4KCQkvLyBVc2UgYHRhYmxlKCkuY29udGFpbmVyKClgIHJhdGhlciB0aGFuIGp1c3QgdGhlIHRhYmxlIG5vZGUgZm9yIElFOCAtCgkJLy8gb3RoZXJ3aXNlIGl0IG9ubHkgd29ya3Mgb25jZS4uLgoJCSQoZHQudGFibGUoKS5jb250YWluZXIoKSkub24oICdtb3VzZWRvd24ucm93UmVvcmRlciB0b3VjaHN0YXJ0LnJvd1Jlb3JkZXInLCB0aGlzLmMuc2VsZWN0b3IsIGZ1bmN0aW9uIChlKSB7CgkJCWlmICggISB0aGF0LmMuZW5hYmxlICkgewoJCQkJcmV0dXJuOwoJCQl9CgoJCQkvLyBJZ25vcmUgZXhjbHVkZWQgY2hpbGRyZW4gb2YgdGhlIHNlbGVjdG9yCgkJCWlmICggJChlLnRhcmdldCkuaXModGhhdC5jLmV4Y2x1ZGVkQ2hpbGRyZW4pICkgewoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCgkJCXZhciB0ciA9ICQodGhpcykuY2xvc2VzdCgndHInKTsKCQkJdmFyIHJvdyA9IGR0LnJvdyggdHIgKTsKCgkJCS8vIERvdWJsZSBjaGVjayB0aGF0IGl0IGlzIGEgRGF0YVRhYmxlIHJvdwoJCQlpZiAoIHJvdy5hbnkoKSApIHsKCQkJCXRoYXQuX2VtaXRFdmVudCggJ3ByZS1yb3ctcmVvcmRlcicsIHsKCQkJCQlub2RlOiByb3cubm9kZSgpLAoJCQkJCWluZGV4OiByb3cuaW5kZXgoKQoJCQkJfSApOwoKCQkJCXRoYXQuX21vdXNlRG93biggZSwgdHIgKTsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCX0gKTsKCgkJZHQub24oICdkZXN0cm95LnJvd1Jlb3JkZXInLCBmdW5jdGlvbiAoKSB7CgkJCSQoZHQudGFibGUoKS5jb250YWluZXIoKSkub2ZmKCAnLnJvd1Jlb3JkZXInICk7CgkJCWR0Lm9mZiggJy5yb3dSZW9yZGVyJyApOwoJCX0gKTsKCX0sCgoKCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKCSAqIFByaXZhdGUgbWV0aG9kcwoJICovCgkKCS8qKgoJICogQ2FjaGUgdGhlIG1lYXN1cmVtZW50cyB0aGF0IFJvd1Jlb3JkZXIgbmVlZHMgaW4gdGhlIG1vdXNlIG1vdmUgaGFuZGxlcgoJICogdG8gYXR0ZW1wdCB0byBzcGVlZCB0aGluZ3MgdXAsIHJhdGhlciB0aGFuIHJlYWRpbmcgZnJvbSB0aGUgRE9NLgoJICoKCSAqIEBwcml2YXRlCgkgKi8KCV9jYWNoZVBvc2l0aW9uczogZnVuY3Rpb24gKCkKCXsKCQl2YXIgZHQgPSB0aGlzLnMuZHQ7CgoJCS8vIEZydXN0cmF0aW5nbHksIGlmIHdlIGFkZCBgcG9zaXRpb246cmVsYXRpdmVgIHRvIHRoZSB0Ym9keSwgdGhlCgkJLy8gcG9zaXRpb24gaXMgc3RpbGwgcmVsYXRpdmVseSB0byB0aGUgcGFyZW50LiBTbyB3ZSBuZWVkIHRvIGFkanVzdAoJCS8vIGZvciB0aGF0CgkJdmFyIGhlYWRlckhlaWdodCA9ICQoIGR0LnRhYmxlKCkubm9kZSgpICkuZmluZCgndGhlYWQnKS5vdXRlckhlaWdodCgpOwoKCQkvLyBOZWVkIHRvIHBhc3MgdGhlIG5vZGVzIHRocm91Z2ggalF1ZXJ5IHRvIGdldCB0aGVtIGluIGRvY3VtZW50IG9yZGVyLAoJCS8vIG5vdCB3aGF0IERhdGFUYWJsZXMgdGhpbmtzIGl0IGlzLCBzaW5jZSB3ZSBoYXZlIGJlZW4gYWx0ZXJpbmcgdGhlCgkJLy8gb3JkZXIKCQl2YXIgbm9kZXMgPSAkLnVuaXF1ZSggZHQucm93cyggeyBwYWdlOiAnY3VycmVudCcgfSApLm5vZGVzKCkudG9BcnJheSgpICk7CgkJdmFyIHRvcHMgPSAkLm1hcCggbm9kZXMsIGZ1bmN0aW9uICggbm9kZSwgaSApIHsKCQkJcmV0dXJuICQobm9kZSkucG9zaXRpb24oKS50b3AgLSBoZWFkZXJIZWlnaHQ7CgkJfSApOwoKCQl2YXIgbWlkZGxlcyA9ICQubWFwKCB0b3BzLCBmdW5jdGlvbiAoIHRvcCwgaSApIHsKCQkJcmV0dXJuIHRvcHMubGVuZ3RoIDwgaS0xID8KCQkJCSh0b3AgKyB0b3BzW2krMV0pIC8gMiA6CgkJCQkodG9wICsgdG9wICsgJCggZHQucm93KCAnOmxhc3QtY2hpbGQnICkubm9kZSgpICkub3V0ZXJIZWlnaHQoKSApIC8gMjsKCQl9ICk7CgoJCXRoaXMucy5taWRkbGVzID0gbWlkZGxlczsKCQl0aGlzLnMuYm9keVRvcCA9ICQoIGR0LnRhYmxlKCkuYm9keSgpICkub2Zmc2V0KCkudG9wOwoJCXRoaXMucy53aW5kb3dIZWlnaHQgPSAkKHdpbmRvdykuaGVpZ2h0KCk7CgkJdGhpcy5zLmRvY3VtZW50T3V0ZXJIZWlnaHQgPSAkKGRvY3VtZW50KS5vdXRlckhlaWdodCgpOwoJfSwKCgoJLyoqCgkgKiBDbG9uZSBhIHJvdyBzbyBpdCBjYW4gYmUgZmxvYXRlZCBhcm91bmQgdGhlIHNjcmVlbgoJICoKCSAqIEBwYXJhbSAge2pRdWVyeX0gdGFyZ2V0IE5vZGUgdG8gYmUgY2xvbmVkCgkgKiBAcHJpdmF0ZQoJICovCglfY2xvbmU6IGZ1bmN0aW9uICggdGFyZ2V0ICkKCXsKCQl2YXIgZHQgPSB0aGlzLnMuZHQ7CgkJdmFyIGNsb25lID0gJCggZHQudGFibGUoKS5ub2RlKCkuY2xvbmVOb2RlKGZhbHNlKSApCgkJCS5hZGRDbGFzcyggJ2R0LXJvd1Jlb3JkZXItZmxvYXQnICkKCQkJLmFwcGVuZCgnPHRib2R5Lz4nKQoJCQkuYXBwZW5kKCB0YXJnZXQuY2xvbmUoIGZhbHNlICkgKTsKCgkJLy8gTWF0Y2ggdGhlIHRhYmxlIGFuZCBjb2x1bW4gd2lkdGhzIC0gcmVhZCBhbGwgc2l6ZXMgYmVmb3JlIHNldHRpbmcKCQkvLyB0byByZWR1Y2UgcmVmbG93cwoJCXZhciB0YWJsZVdpZHRoID0gdGFyZ2V0Lm91dGVyV2lkdGgoKTsKCQl2YXIgdGFibGVIZWlnaHQgPSB0YXJnZXQub3V0ZXJIZWlnaHQoKTsKCQl2YXIgc2l6ZXMgPSB0YXJnZXQuY2hpbGRyZW4oKS5tYXAoIGZ1bmN0aW9uICgpIHsKCQkJcmV0dXJuICQodGhpcykud2lkdGgoKTsKCQl9ICk7CgoJCWNsb25lCgkJCS53aWR0aCggdGFibGVXaWR0aCApCgkJCS5oZWlnaHQoIHRhYmxlSGVpZ2h0ICkKCQkJLmZpbmQoJ3RyJykuY2hpbGRyZW4oKS5lYWNoKCBmdW5jdGlvbiAoaSkgewoJCQkJdGhpcy5zdHlsZS53aWR0aCA9IHNpemVzW2ldKydweCc7CgkJCX0gKTsKCgkJLy8gSW5zZXJ0IGludG8gdGhlIGRvY3VtZW50IHRvIGhhdmUgaXQgZmxvYXRpbmcgYXJvdW5kCgkJY2xvbmUuYXBwZW5kVG8oICdib2R5JyApOwoKCQl0aGlzLmRvbS5jbG9uZSA9IGNsb25lOwoJCXRoaXMucy5kb21DbG9uZU91dGVySGVpZ2h0ID0gY2xvbmUub3V0ZXJIZWlnaHQoKTsKCX0sCgoKCS8qKgoJICogVXBkYXRlIHRoZSBjbG9uZWQgaXRlbSdzIHBvc2l0aW9uIGluIHRoZSBkb2N1bWVudAoJICoKCSAqIEBwYXJhbSAge29iamVjdH0gZSBFdmVudCBnaXZpbmcgdGhlIG1vdXNlJ3MgcG9zaXRpb24KCSAqIEBwcml2YXRlCgkgKi8KCV9jbG9uZVBvc2l0aW9uOiBmdW5jdGlvbiAoIGUgKQoJewoJCXZhciBzdGFydCA9IHRoaXMucy5zdGFydDsKCQl2YXIgdG9wRGlmZiA9IHRoaXMuX2V2ZW50VG9QYWdlKCBlLCAnWScgKSAtIHN0YXJ0LnRvcDsKCQl2YXIgbGVmdERpZmYgPSB0aGlzLl9ldmVudFRvUGFnZSggZSwgJ1gnICkgLSBzdGFydC5sZWZ0OwoJCXZhciBzbmFwID0gdGhpcy5jLnNuYXBYOwoJCXZhciBsZWZ0OwoJCXZhciB0b3AgPSB0b3BEaWZmICsgc3RhcnQub2Zmc2V0VG9wOwoKCQlpZiAoIHNuYXAgPT09IHRydWUgKSB7CgkJCWxlZnQgPSBzdGFydC5vZmZzZXRMZWZ0OwoJCX0KCQllbHNlIGlmICggdHlwZW9mIHNuYXAgPT09ICdudW1iZXInICkgewoJCQlsZWZ0ID0gc3RhcnQub2Zmc2V0TGVmdCArIHNuYXA7CgkJfQoJCWVsc2UgewoJCQlsZWZ0ID0gbGVmdERpZmYgKyBzdGFydC5vZmZzZXRMZWZ0OwoJCX0KCgkJaWYodG9wIDwgMCkgewoJCQl0b3AgPSAwCgkJfQoJCWVsc2UgaWYodG9wICsgdGhpcy5zLmRvbUNsb25lT3V0ZXJIZWlnaHQgPiB0aGlzLnMuZG9jdW1lbnRPdXRlckhlaWdodCkgewoJCQl0b3AgPSB0aGlzLnMuZG9jdW1lbnRPdXRlckhlaWdodCAtIHRoaXMucy5kb21DbG9uZU91dGVySGVpZ2h0OwoJCX0KCgkJdGhpcy5kb20uY2xvbmUuY3NzKCB7CgkJCXRvcDogdG9wLAoJCQlsZWZ0OiBsZWZ0CgkJfSApOwoJfSwKCgoJLyoqCgkgKiBFbWl0IGFuIGV2ZW50IG9uIHRoZSBEYXRhVGFibGUgZm9yIGxpc3RlbmVycwoJICoKCSAqIEBwYXJhbSAge3N0cmluZ30gbmFtZSBFdmVudCBuYW1lCgkgKiBAcGFyYW0gIHthcnJheX0gYXJncyBFdmVudCBhcmd1bWVudHMKCSAqIEBwcml2YXRlCgkgKi8KCV9lbWl0RXZlbnQ6IGZ1bmN0aW9uICggbmFtZSwgYXJncyApCgl7CgkJdGhpcy5zLmR0Lml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIGN0eCwgaSApIHsKCQkJJChjdHgublRhYmxlKS50cmlnZ2VySGFuZGxlciggbmFtZSsnLmR0JywgYXJncyApOwoJCX0gKTsKCX0sCgoKCS8qKgoJICogR2V0IHBhZ2VYL1kgcG9zaXRpb24gZnJvbSBhbiBldmVudCwgcmVnYXJkbGVzcyBvZiBpZiBpdCBpcyBhIG1vdXNlIG9yCgkgKiB0b3VjaCBldmVudC4KCSAqCgkgKiBAcGFyYW0gIHtvYmplY3R9IGUgRXZlbnQKCSAqIEBwYXJhbSAge3N0cmluZ30gcG9zIFggb3IgWSAobXVzdCBiZSBhIGNhcGl0YWwpCgkgKiBAcHJpdmF0ZQoJICovCglfZXZlbnRUb1BhZ2U6IGZ1bmN0aW9uICggZSwgcG9zICkKCXsKCQlpZiAoIGUudHlwZS5pbmRleE9mKCAndG91Y2gnICkgIT09IC0xICkgewoJCQlyZXR1cm4gZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF1bICdwYWdlJytwb3MgXTsKCQl9CgoJCXJldHVybiBlWyAncGFnZScrcG9zIF07Cgl9LAoKCgkvKioKCSAqIE1vdXNlIGRvd24gZXZlbnQgaGFuZGxlci4gUmVhZCBpbml0aWFsIHBvc2l0aW9ucyBhbmQgYWRkIGV2ZW50IGhhbmRsZXJzCgkgKiBmb3IgdGhlIG1vdmUuCgkgKgoJICogQHBhcmFtICB7b2JqZWN0fSBlICAgICAgTW91c2UgZXZlbnQKCSAqIEBwYXJhbSAge2pRdWVyeX0gdGFyZ2V0IFRSIGVsZW1lbnQgdGhhdCBpcyB0byBiZSBtb3ZlZAoJICogQHByaXZhdGUKCSAqLwoJX21vdXNlRG93bjogZnVuY3Rpb24gKCBlLCB0YXJnZXQgKQoJewoJCXZhciB0aGF0ID0gdGhpczsKCQl2YXIgZHQgPSB0aGlzLnMuZHQ7CgkJdmFyIHN0YXJ0ID0gdGhpcy5zLnN0YXJ0OwoKCQl2YXIgb2Zmc2V0ID0gdGFyZ2V0Lm9mZnNldCgpOwoJCXN0YXJ0LnRvcCA9IHRoaXMuX2V2ZW50VG9QYWdlKCBlLCAnWScgKTsKCQlzdGFydC5sZWZ0ID0gdGhpcy5fZXZlbnRUb1BhZ2UoIGUsICdYJyApOwoJCXN0YXJ0Lm9mZnNldFRvcCA9IG9mZnNldC50b3A7CgkJc3RhcnQub2Zmc2V0TGVmdCA9IG9mZnNldC5sZWZ0OwoJCXN0YXJ0Lm5vZGVzID0gJC51bmlxdWUoIGR0LnJvd3MoIHsgcGFnZTogJ2N1cnJlbnQnIH0gKS5ub2RlcygpLnRvQXJyYXkoKSApOwoKCQl0aGlzLl9jYWNoZVBvc2l0aW9ucygpOwoJCXRoaXMuX2Nsb25lKCB0YXJnZXQgKTsKCQl0aGlzLl9jbG9uZVBvc2l0aW9uKCBlICk7CgoJCXRoaXMuZG9tLnRhcmdldCA9IHRhcmdldDsKCQl0YXJnZXQuYWRkQ2xhc3MoICdkdC1yb3dSZW9yZGVyLW1vdmluZycgKTsKCgkJJCggZG9jdW1lbnQgKQoJCQkub24oICdtb3VzZXVwLnJvd1Jlb3JkZXIgdG91Y2hlbmQucm93UmVvcmRlcicsIGZ1bmN0aW9uIChlKSB7CgkJCQl0aGF0Ll9tb3VzZVVwKGUpOwoJCQl9ICkKCQkJLm9uKCAnbW91c2Vtb3ZlLnJvd1Jlb3JkZXIgdG91Y2htb3ZlLnJvd1Jlb3JkZXInLCBmdW5jdGlvbiAoZSkgewoJCQkJdGhhdC5fbW91c2VNb3ZlKGUpOwoJCQl9ICk7CgoJCS8vIENoZWNrIGlmIHdpbmRvdyBpcyB4LXNjcm9sbGluZyAtIGlmIG5vdCwgZGlzYWJsZSBpdCBmb3IgdGhlIGR1cmF0aW9uCgkJLy8gb2YgdGhlIGRyYWcKCQlpZiAoICQod2luZG93KS53aWR0aCgpID09PSAkKGRvY3VtZW50KS53aWR0aCgpICkgewoJCQkkKGRvY3VtZW50LmJvZHkpLmFkZENsYXNzKCAnZHQtcm93UmVvcmRlci1ub092ZXJmbG93JyApOwoJCX0KCgkJLy8gQ2FjaGUgc2Nyb2xsaW5nIGluZm9ybWF0aW9uIHNvIG1vdXNlIG1vdmUgZG9lc24ndCBuZWVkIHRvIHJlYWQuCgkJLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHdpbmRvdyBhbmQgRFQgc2Nyb2xsZXIgd2lsbCBub3QgY2hhbmdlIHNpemUKCQkvLyBkdXJpbmcgYW4gcm93IGRyYWcsIHdoaWNoIEkgdGhpbmsgaXMgYSBmYWlyIGFzc3VtcHRpb24KCQl2YXIgc2Nyb2xsV3JhcHBlciA9IHRoaXMuZG9tLmR0U2Nyb2xsOwoJCXRoaXMucy5zY3JvbGwgPSB7CgkJCXdpbmRvd0hlaWdodDogJCh3aW5kb3cpLmhlaWdodCgpLAoJCQl3aW5kb3dXaWR0aDogICQod2luZG93KS53aWR0aCgpLAoJCQlkdFRvcDogICAgICAgIHNjcm9sbFdyYXBwZXIubGVuZ3RoID8gc2Nyb2xsV3JhcHBlci5vZmZzZXQoKS50b3AgOiBudWxsLAoJCQlkdExlZnQ6ICAgICAgIHNjcm9sbFdyYXBwZXIubGVuZ3RoID8gc2Nyb2xsV3JhcHBlci5vZmZzZXQoKS5sZWZ0IDogbnVsbCwKCQkJZHRIZWlnaHQ6ICAgICBzY3JvbGxXcmFwcGVyLmxlbmd0aCA/IHNjcm9sbFdyYXBwZXIub3V0ZXJIZWlnaHQoKSA6IG51bGwsCgkJCWR0V2lkdGg6ICAgICAgc2Nyb2xsV3JhcHBlci5sZW5ndGggPyBzY3JvbGxXcmFwcGVyLm91dGVyV2lkdGgoKSA6IG51bGwKCQl9OwoJfSwKCgoJLyoqCgkgKiBNb3VzZSBtb3ZlIGV2ZW50IGhhbmRsZXIgLSBtb3ZlIHRoZSBjbG9uZWQgcm93IGFuZCBzaHVmZmxlIHRoZSB0YWJsZSdzCgkgKiByb3dzIGlmIHJlcXVpcmVkLgoJICoKCSAqIEBwYXJhbSAge29iamVjdH0gZSBNb3VzZSBldmVudAoJICogQHByaXZhdGUKCSAqLwoJX21vdXNlTW92ZTogZnVuY3Rpb24gKCBlICkKCXsKCQl0aGlzLl9jbG9uZVBvc2l0aW9uKCBlICk7CgoJCS8vIFRyYW5zZm9ybSB0aGUgbW91c2UgcG9zaXRpb24gaW50byBhIHBvc2l0aW9uIGluIHRoZSB0YWJsZSdzIGJvZHkKCQl2YXIgYm9keVkgPSB0aGlzLl9ldmVudFRvUGFnZSggZSwgJ1knICkgLSB0aGlzLnMuYm9keVRvcDsKCQl2YXIgbWlkZGxlcyA9IHRoaXMucy5taWRkbGVzOwoJCXZhciBpbnNlcnRQb2ludCA9IG51bGw7CgkJdmFyIGR0ID0gdGhpcy5zLmR0OwoJCXZhciBib2R5ID0gZHQudGFibGUoKS5ib2R5KCk7CgoJCS8vIERldGVybWluZSB3aGVyZSB0aGUgcm93IHNob3VsZCBiZSBpbnNlcnRlZCBiYXNlZCBvbiB0aGUgbW91c2UKCQkvLyBwb3NpdGlvbgoJCWZvciAoIHZhciBpPTAsIGllbj1taWRkbGVzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQlpZiAoIGJvZHlZIDwgbWlkZGxlc1tpXSApIHsKCQkJCWluc2VydFBvaW50ID0gaTsKCQkJCWJyZWFrOwoJCQl9CgkJfQoKCQlpZiAoIGluc2VydFBvaW50ID09PSBudWxsICkgewoJCQlpbnNlcnRQb2ludCA9IG1pZGRsZXMubGVuZ3RoOwoJCX0KCgkJLy8gUGVyZm9ybSB0aGUgRE9NIHNodWZmbGUgaWYgaXQgaGFzIGNoYW5nZWQgZnJvbSBsYXN0IHRpbWUKCQlpZiAoIHRoaXMucy5sYXN0SW5zZXJ0ID09PSBudWxsIHx8IHRoaXMucy5sYXN0SW5zZXJ0ICE9PSBpbnNlcnRQb2ludCApIHsKCQkJaWYgKCBpbnNlcnRQb2ludCA9PT0gMCApIHsKCQkJCXRoaXMuZG9tLnRhcmdldC5wcmVwZW5kVG8oIGJvZHkgKTsKCQkJfQoJCQllbHNlIHsKCQkJCXZhciBub2RlcyA9ICQudW5pcXVlKCBkdC5yb3dzKCB7IHBhZ2U6ICdjdXJyZW50JyB9ICkubm9kZXMoKS50b0FycmF5KCkgKTsKCgkJCQlpZiAoIGluc2VydFBvaW50ID4gdGhpcy5zLmxhc3RJbnNlcnQgKSB7CgkJCQkJdGhpcy5kb20udGFyZ2V0Lmluc2VydEFmdGVyKCBub2Rlc1sgaW5zZXJ0UG9pbnQtMSBdICk7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQl0aGlzLmRvbS50YXJnZXQuaW5zZXJ0QmVmb3JlKCBub2Rlc1sgaW5zZXJ0UG9pbnQgXSApOwoJCQkJfQoJCQl9CgoJCQl0aGlzLl9jYWNoZVBvc2l0aW9ucygpOwoKCQkJdGhpcy5zLmxhc3RJbnNlcnQgPSBpbnNlcnRQb2ludDsKCQl9CgoJCXRoaXMuX3NoaWZ0U2Nyb2xsKCBlICk7Cgl9LAoKCgkvKioKCSAqIE1vdXNlIHVwIGV2ZW50IGhhbmRsZXIgLSByZWxlYXNlIHRoZSBldmVudCBoYW5kbGVycyBhbmQgcGVyZm9ybSB0aGUKCSAqIHRhYmxlIHVwZGF0ZXMKCSAqCgkgKiBAcGFyYW0gIHtvYmplY3R9IGUgTW91c2UgZXZlbnQKCSAqIEBwcml2YXRlCgkgKi8KCV9tb3VzZVVwOiBmdW5jdGlvbiAoIGUgKQoJewoJCXZhciB0aGF0ID0gdGhpczsKCQl2YXIgZHQgPSB0aGlzLnMuZHQ7CgkJdmFyIGksIGllbjsKCQl2YXIgZGF0YVNyYyA9IHRoaXMuYy5kYXRhU3JjOwoKCQl0aGlzLmRvbS5jbG9uZS5yZW1vdmUoKTsKCQl0aGlzLmRvbS5jbG9uZSA9IG51bGw7CgoJCXRoaXMuZG9tLnRhcmdldC5yZW1vdmVDbGFzcyggJ2R0LXJvd1Jlb3JkZXItbW92aW5nJyApOwoJCS8vdGhpcy5kb20udGFyZ2V0ID0gbnVsbDsKCgkJJChkb2N1bWVudCkub2ZmKCAnLnJvd1Jlb3JkZXInICk7CgkJJChkb2N1bWVudC5ib2R5KS5yZW1vdmVDbGFzcyggJ2R0LXJvd1Jlb3JkZXItbm9PdmVyZmxvdycgKTsKCgkJY2xlYXJJbnRlcnZhbCggdGhpcy5zLnNjcm9sbEludGVydmFsICk7CgkJdGhpcy5zLnNjcm9sbEludGVydmFsID0gbnVsbDsKCgkJLy8gQ2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlCgkJdmFyIHN0YXJ0Tm9kZXMgPSB0aGlzLnMuc3RhcnQubm9kZXM7CgkJdmFyIGVuZE5vZGVzID0gJC51bmlxdWUoIGR0LnJvd3MoIHsgcGFnZTogJ2N1cnJlbnQnIH0gKS5ub2RlcygpLnRvQXJyYXkoKSApOwoJCXZhciBpZERpZmYgPSB7fTsKCQl2YXIgZnVsbERpZmYgPSBbXTsKCQl2YXIgZGlmZk5vZGVzID0gW107CgkJdmFyIGdldERhdGFGbiA9IHRoaXMucy5nZXREYXRhRm47CgkJdmFyIHNldERhdGFGbiA9IHRoaXMucy5zZXREYXRhRm47CgoJCWZvciAoIGk9MCwgaWVuPXN0YXJ0Tm9kZXMubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCWlmICggc3RhcnROb2Rlc1tpXSAhPT0gZW5kTm9kZXNbaV0gKSB7CgkJCQl2YXIgaWQgPSBkdC5yb3coIGVuZE5vZGVzW2ldICkuaWQoKTsKCQkJCXZhciBlbmRSb3dEYXRhID0gZHQucm93KCBlbmROb2Rlc1tpXSApLmRhdGEoKTsKCQkJCXZhciBzdGFydFJvd0RhdGEgPSBkdC5yb3coIHN0YXJ0Tm9kZXNbaV0gKS5kYXRhKCk7CgoJCQkJaWYgKCBpZCApIHsKCQkJCQlpZERpZmZbIGlkIF0gPSBnZXREYXRhRm4oIHN0YXJ0Um93RGF0YSApOwoJCQkJfQoKCQkJCWZ1bGxEaWZmLnB1c2goIHsKCQkJCQlub2RlOiBlbmROb2Rlc1tpXSwKCQkJCQlvbGREYXRhOiBnZXREYXRhRm4oIGVuZFJvd0RhdGEgKSwKCQkJCQluZXdEYXRhOiBnZXREYXRhRm4oIHN0YXJ0Um93RGF0YSApLAoJCQkJCW5ld1Bvc2l0aW9uOiBpLAoJCQkJCW9sZFBvc2l0aW9uOiAkLmluQXJyYXkoIGVuZE5vZGVzW2ldLCBzdGFydE5vZGVzICkKCQkJCX0gKTsKCgkJCQlkaWZmTm9kZXMucHVzaCggZW5kTm9kZXNbaV0gKTsKCQkJfQoJCX0KCQkKCQkvLyBDcmVhdGUgZXZlbnQgYXJncwoJCXZhciBldmVudEFyZ3MgPSBbIGZ1bGxEaWZmLCB7CgkJCWRhdGFTcmM6ICAgICAgIGRhdGFTcmMsCgkJCW5vZGVzOiAgICAgICAgIGRpZmZOb2RlcywKCQkJdmFsdWVzOiAgICAgICAgaWREaWZmLAoJCQl0cmlnZ2VyUm93OiAgICBkdC5yb3coIHRoaXMuZG9tLnRhcmdldCApLAoJCQlvcmlnaW5hbEV2ZW50OiBlCgkJfSBdOwoJCQoJCS8vIEVtaXQgZXZlbnQKCQl0aGlzLl9lbWl0RXZlbnQoICdyb3ctcmVvcmRlcicsIGV2ZW50QXJncyApOwoKCQl2YXIgdXBkYXRlID0gZnVuY3Rpb24gKCkgewoJCQlpZiAoIHRoYXQuYy51cGRhdGUgKSB7CgkJCQlmb3IgKCBpPTAsIGllbj1mdWxsRGlmZi5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCQl2YXIgcm93ID0gZHQucm93KCBmdWxsRGlmZltpXS5ub2RlICk7CgkJCQkJdmFyIHJvd0RhdGEgPSByb3cuZGF0YSgpOwoKCQkJCQlzZXREYXRhRm4oIHJvd0RhdGEsIGZ1bGxEaWZmW2ldLm5ld0RhdGEgKTsKCgkJCQkJLy8gSW52YWxpZGF0ZSB0aGUgY2VsbCB0aGF0IGhhcyB0aGUgc2FtZSBkYXRhIHNvdXJjZSBhcyB0aGUgZGF0YVNyYwoJCQkJCWR0LmNvbHVtbnMoKS5ldmVyeSggZnVuY3Rpb24gKCkgewoJCQkJCQlpZiAoIHRoaXMuZGF0YVNyYygpID09PSBkYXRhU3JjICkgewoJCQkJCQkJZHQuY2VsbCggZnVsbERpZmZbaV0ubm9kZSwgdGhpcy5pbmRleCgpICkuaW52YWxpZGF0ZSggJ2RhdGEnICk7CgkJCQkJCX0KCQkJCQl9ICk7CgkJCQl9CgoJCQkJLy8gVHJpZ2dlciByb3cgcmVvcmRlcmVkIGV2ZW50CgkJCQl0aGF0Ll9lbWl0RXZlbnQoICdyb3ctcmVvcmRlcmVkJywgZXZlbnRBcmdzICk7CgoJCQkJZHQuZHJhdyggZmFsc2UgKTsKCQkJfQoJCX07CgoJCS8vIEVkaXRvciBpbnRlcmZhY2UKCQlpZiAoIHRoaXMuYy5lZGl0b3IgKSB7CgkJCS8vIERpc2FibGUgdXNlciBpbnRlcmFjdGlvbiB3aGlsZSBFZGl0b3IgaXMgc3VibWl0dGluZwoJCQl0aGlzLmMuZW5hYmxlID0gZmFsc2U7CgoJCQl0aGlzLmMuZWRpdG9yCgkJCQkuZWRpdCgKCQkJCQlkaWZmTm9kZXMsCgkJCQkJZmFsc2UsCgkJCQkJJC5leHRlbmQoIHtzdWJtaXQ6ICdjaGFuZ2VkJ30sIHRoaXMuYy5mb3JtT3B0aW9ucyApCgkJCQkpCgkJCQkubXVsdGlTZXQoIGRhdGFTcmMsIGlkRGlmZiApCgkJCQkub25lKCAncHJlU3VibWl0Q2FuY2VsbGVkLnJvd1Jlb3JkZXInLCBmdW5jdGlvbiAoKSB7CgkJCQkJdGhhdC5jLmVuYWJsZSA9IHRydWU7CgkJCQkJdGhhdC5jLmVkaXRvci5vZmYoICcucm93UmVvcmRlcicgKTsKCQkJCQlkdC5kcmF3KCBmYWxzZSApOwoJCQkJfSApCgkJCQkub25lKCAnc3VibWl0VW5zdWNjZXNzZnVsLnJvd1Jlb3JkZXInLCBmdW5jdGlvbiAoKSB7CgkJCQkJZHQuZHJhdyggZmFsc2UgKTsKCQkJCX0gKQoJCQkJLm9uZSggJ3N1Ym1pdFN1Y2Nlc3Mucm93UmVvcmRlcicsIGZ1bmN0aW9uICgpIHsKCQkJCQl1cGRhdGUoKTsKCQkJCX0gKQoJCQkJLm9uZSggJ3N1Ym1pdENvbXBsZXRlJywgZnVuY3Rpb24gKCkgewoJCQkJCXRoYXQuYy5lbmFibGUgPSB0cnVlOwoJCQkJCXRoYXQuYy5lZGl0b3Iub2ZmKCAnLnJvd1Jlb3JkZXInICk7CgkJCQl9ICkKCQkJCS5zdWJtaXQoKTsKCQl9CgkJZWxzZSB7CgkJCXVwZGF0ZSgpOwoJCX0KCX0sCgoKCS8qKgoJICogTW92ZSB0aGUgd2luZG93IGFuZCBEYXRhVGFibGVzIHNjcm9sbGluZyBkdXJpbmcgYSBkcmFnIHRvIHNjcm9sbCBuZXcKCSAqIGNvbnRlbnQgaW50byB2aWV3LgoJICoKCSAqIFRoaXMgbWF0Y2hlcyB0aGUgYF9zaGlmdFNjcm9sbGAgbWV0aG9kIHVzZWQgaW4gQXV0b0ZpbGwsIGJ1dCBvbmx5CgkgKiBob3Jpem9udGFsIHNjcm9sbGluZyBpcyBjb25zaWRlcmVkIGhlcmUuCgkgKgoJICogQHBhcmFtICB7b2JqZWN0fSBlIE1vdXNlIG1vdmUgZXZlbnQgb2JqZWN0CgkgKiBAcHJpdmF0ZQoJICovCglfc2hpZnRTY3JvbGw6IGZ1bmN0aW9uICggZSApCgl7CgkJdmFyIHRoYXQgPSB0aGlzOwoJCXZhciBkdCA9IHRoaXMucy5kdDsKCQl2YXIgc2Nyb2xsID0gdGhpcy5zLnNjcm9sbDsKCQl2YXIgcnVuSW50ZXJ2YWwgPSBmYWxzZTsKCQl2YXIgc2Nyb2xsU3BlZWQgPSA1OwoJCXZhciBidWZmZXIgPSA2NTsKCQl2YXIKCQkJd2luZG93WSA9IGUucGFnZVkgLSBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCwKCQkJd2luZG93VmVydCwKCQkJZHRWZXJ0OwoKCQkvLyBXaW5kb3cgY2FsY3VsYXRpb25zIC0gYmFzZWQgb24gdGhlIG1vdXNlIHBvc2l0aW9uIGluIHRoZSB3aW5kb3csCgkJLy8gcmVnYXJkbGVzcyBvZiBzY3JvbGxpbmcKCQlpZiAoIHdpbmRvd1kgPCBidWZmZXIgKSB7CgkJCXdpbmRvd1ZlcnQgPSBzY3JvbGxTcGVlZCAqIC0xOwoJCX0KCQllbHNlIGlmICggd2luZG93WSA+IHNjcm9sbC53aW5kb3dIZWlnaHQgLSBidWZmZXIgKSB7CgkJCXdpbmRvd1ZlcnQgPSBzY3JvbGxTcGVlZDsKCQl9CgoJCS8vIERhdGFUYWJsZXMgc2Nyb2xsaW5nIGNhbGN1bGF0aW9ucyAtIGJhc2VkIG9uIHRoZSB0YWJsZSdzIHBvc2l0aW9uIGluCgkJLy8gdGhlIGRvY3VtZW50IGFuZCB0aGUgbW91c2UgcG9zaXRpb24gb24gdGhlIHBhZ2UKCQlpZiAoIHNjcm9sbC5kdFRvcCAhPT0gbnVsbCAmJiBlLnBhZ2VZIDwgc2Nyb2xsLmR0VG9wICsgYnVmZmVyICkgewoJCQlkdFZlcnQgPSBzY3JvbGxTcGVlZCAqIC0xOwoJCX0KCQllbHNlIGlmICggc2Nyb2xsLmR0VG9wICE9PSBudWxsICYmIGUucGFnZVkgPiBzY3JvbGwuZHRUb3AgKyBzY3JvbGwuZHRIZWlnaHQgLSBidWZmZXIgKSB7CgkJCWR0VmVydCA9IHNjcm9sbFNwZWVkOwoJCX0KCgkJLy8gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBXZSB3YW50IHRvIGNvbnRpbnVlIHNjcm9sbGluZwoJCS8vIHdpdGhvdXQgcmVxdWlyaW5nIGEgbW91c2UgbW92ZSwgc28gd2UgbmVlZCBhbiBpbnRlcnZhbCB0byBiZQoJCS8vIHRyaWdnZXJlZC4gVGhlIGludGVydmFsIHNob3VsZCBjb250aW51ZSB1bnRpbCBpdCBpcyBubyBsb25nZXIgbmVlZGVkLAoJCS8vIGJ1dCBpdCBtdXN0IGFsc28gdXNlIHRoZSBsYXRlc3Qgc2Nyb2xsIGNvbW1hbmRzIChmb3IgZXhhbXBsZSBjb25zaWRlcgoJCS8vIHRoYXQgdGhlIG1vdXNlIG1pZ2h0IG1vdmUgZnJvbSBzY3JvbGxpbmcgdXAgdG8gc2Nyb2xsaW5nIGxlZnQsIGFsbAoJCS8vIHdpdGggdGhlIHNhbWUgaW50ZXJ2YWwgcnVubmluZy4gV2UgdXNlIHRoZSBgc2Nyb2xsYCBvYmplY3QgdG8gInBhc3MiCgkJLy8gdGhpcyBpbmZvcm1hdGlvbiB0byB0aGUgaW50ZXJ2YWwuIENhbid0IHVzZSBsb2NhbCB2YXJpYWJsZXMgYXMgdGhleQoJCS8vIHdvdWxkbid0IGJlIHRoZSBvbmVzIHRoYXQgYXJlIHVzZWQgYnkgYW4gYWxyZWFkeSBleGlzdGluZyBpbnRlcnZhbCEKCQlpZiAoIHdpbmRvd1ZlcnQgfHwgZHRWZXJ0ICkgewoJCQlzY3JvbGwud2luZG93VmVydCA9IHdpbmRvd1ZlcnQ7CgkJCXNjcm9sbC5kdFZlcnQgPSBkdFZlcnQ7CgkJCXJ1bkludGVydmFsID0gdHJ1ZTsKCQl9CgkJZWxzZSBpZiAoIHRoaXMucy5zY3JvbGxJbnRlcnZhbCApIHsKCQkJLy8gRG9uJ3QgbmVlZCB0byBzY3JvbGwgLSByZW1vdmUgYW55IGV4aXN0aW5nIHRpbWVyCgkJCWNsZWFySW50ZXJ2YWwoIHRoaXMucy5zY3JvbGxJbnRlcnZhbCApOwoJCQl0aGlzLnMuc2Nyb2xsSW50ZXJ2YWwgPSBudWxsOwoJCX0KCgkJLy8gSWYgd2UgbmVlZCB0byBydW4gdGhlIGludGVydmFsIHRvIHNjcm9sbCBhbmQgdGhlcmUgaXMgbm8gZXhpc3RpbmcKCQkvLyBpbnRlcnZhbCAoaWYgdGhlcmUgaXMgYW4gZXhpc3Rpbmcgb25lLCBpdCB3aWxsIGNvbnRpbnVlIHRvIHJ1bikKCQlpZiAoICEgdGhpcy5zLnNjcm9sbEludGVydmFsICYmIHJ1bkludGVydmFsICkgewoJCQl0aGlzLnMuc2Nyb2xsSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCggZnVuY3Rpb24gKCkgewoJCQkJLy8gRG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBzZXR0aW5nIHNjcm9sbCA8MCBvciBiZXlvbmQgdGhlCgkJCQkvLyBzY3JvbGwgYm91bmQgYXMgdGhlIGJyb3dzZXIgd2lsbCBqdXN0IHJlamVjdCB0aGF0LgoJCQkJaWYgKCBzY3JvbGwud2luZG93VmVydCApIHsKCQkJCQlkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCArPSBzY3JvbGwud2luZG93VmVydDsKCQkJCX0KCgkJCQkvLyBEYXRhVGFibGVzIHNjcm9sbGluZwoJCQkJaWYgKCBzY3JvbGwuZHRWZXJ0ICkgewoJCQkJCXZhciBzY3JvbGxlciA9IHRoYXQuZG9tLmR0U2Nyb2xsWzBdOwoKCQkJCQlpZiAoIHNjcm9sbC5kdFZlcnQgKSB7CgkJCQkJCXNjcm9sbGVyLnNjcm9sbFRvcCArPSBzY3JvbGwuZHRWZXJ0OwoJCQkJCX0KCQkJCX0KCQkJfSwgMjAgKTsKCQl9Cgl9Cn0gKTsKCgoKLyoqCiAqIFJvd1Jlb3JkZXIgZGVmYXVsdCBzZXR0aW5ncyBmb3IgaW5pdGlhbGlzYXRpb24KICoKICogQG5hbWVzcGFjZQogKiBAbmFtZSBSb3dSZW9yZGVyLmRlZmF1bHRzCiAqIEBzdGF0aWMKICovClJvd1Jlb3JkZXIuZGVmYXVsdHMgPSB7CgkvKioKCSAqIERhdGEgcG9pbnQgaW4gdGhlIGhvc3Qgcm93J3MgZGF0YSBzb3VyY2Ugb2JqZWN0IGZvciB3aGVyZSB0byBnZXQgYW5kIHNldAoJICogdGhlIGRhdGEgdG8gcmVvcmRlci4gVGhpcyB3aWxsIG5vcm1hbGx5IGFsc28gYmUgdGhlIHNvcnRpbmcgY29sdW1uLgoJICoKCSAqIEB0eXBlIHtOdW1iZXJ9CgkgKi8KCWRhdGFTcmM6IDAsCgoJLyoqCgkgKiBFZGl0b3IgaW5zdGFuY2UgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgdXBkYXRlCgkgKgoJICogQHR5cGUge0RhdGFUYWJsZS5FZGl0b3J9CgkgKi8KCWVkaXRvcjogbnVsbCwKCgkvKioKCSAqIEVuYWJsZSAvIGRpc2FibGUgUm93UmVvcmRlcidzIHVzZXIgaW50ZXJhY3Rpb24KCSAqIEB0eXBlIHtCb29sZWFufQoJICovCgllbmFibGU6IHRydWUsCgoJLyoqCgkgKiBGb3JtIG9wdGlvbnMgdG8gcGFzcyB0byBFZGl0b3Igd2hlbiBzdWJtaXR0aW5nIGEgY2hhbmdlIGluIHRoZSByb3cgb3JkZXIuCgkgKiBTZWUgdGhlIEVkaXRvciBgZnJvbS1vcHRpb25zYCBvYmplY3QgZm9yIGRldGFpbHMgb2YgdGhlIG9wdGlvbnMKCSAqIGF2YWlsYWJsZS4KCSAqIEB0eXBlIHtPYmplY3R9CgkgKi8KCWZvcm1PcHRpb25zOiB7fSwKCgkvKioKCSAqIERyYWcgaGFuZGxlIHNlbGVjdG9yLiBUaGlzIGRlZmluZXMgdGhlIGVsZW1lbnQgdGhhdCB3aGVuIGRyYWdnZWQgd2lsbAoJICogcmVvcmRlciBhIHJvdy4KCSAqCgkgKiBAdHlwZSB7U3RyaW5nfQoJICovCglzZWxlY3RvcjogJ3RkOmZpcnN0LWNoaWxkJywKCgkvKioKCSAqIE9wdGlvbmFsbHkgbG9jayB0aGUgZHJhZ2dlZCByb3cncyB4LXBvc2l0aW9uLiBUaGlzIGNhbiBiZSBgdHJ1ZWAgdG8KCSAqIGZpeCB0aGUgcG9zaXRpb24gbWF0Y2ggdGhlIGhvc3QgdGFibGUncywgYGZhbHNlYCB0byBhbGxvdyBmcmVlIG1vdmVtZW50CgkgKiBvZiB0aGUgcm93LCBvciBhIG51bWJlciB0byBkZWZpbmUgYW4gb2Zmc2V0IGZyb20gdGhlIGhvc3QgdGFibGUuCgkgKgoJICogQHR5cGUge0Jvb2xlYW58bnVtYmVyfQoJICovCglzbmFwWDogZmFsc2UsCgoJLyoqCgkgKiBVcGRhdGUgdGhlIHRhYmxlJ3MgZGF0YSBvbiBkcm9wCgkgKgoJICogQHR5cGUge0Jvb2xlYW59CgkgKi8KCXVwZGF0ZTogdHJ1ZSwKCgkvKioKCSAqIFNlbGVjdG9yIGZvciBjaGlsZHJlbiBvZiB0aGUgZHJhZyBoYW5kbGUgc2VsZWN0b3IgdGhhdCBtb3VzZURvd24gZXZlbnRzCgkgKiB3aWxsIGJlIHBhc3NlZCB0aHJvdWdoIHRvIGFuZCBkcmFnIHdpbGwgbm90IGFjdGl2YXRlCgkgKgoJICogQHR5cGUge1N0cmluZ30KCSAqLwoJZXhjbHVkZWRDaGlsZHJlbjogJ2EnCn07CgoKLyoKICogQVBJCiAqLwp2YXIgQXBpID0gJC5mbi5kYXRhVGFibGUuQXBpOwoKLy8gRG9lc24ndCBkbyBhbnl0aGluZyAtIHdvcmsgYXJvdW5kIGZvciBhIGJ1ZyBpbiBEVC4uLiBOb3QgZG9jdW1lbnRlZApBcGkucmVnaXN0ZXIoICdyb3dSZW9yZGVyKCknLCBmdW5jdGlvbiAoKSB7CglyZXR1cm4gdGhpczsKfSApOwoKQXBpLnJlZ2lzdGVyKCAncm93UmVvcmRlci5lbmFibGUoKScsIGZ1bmN0aW9uICggdG9nZ2xlICkgewoJaWYgKCB0b2dnbGUgPT09IHVuZGVmaW5lZCApIHsKCQl0b2dnbGUgPSB0cnVlOwoJfQoKCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIGN0eCApIHsKCQlpZiAoIGN0eC5yb3dyZW9yZGVyICkgewoJCQljdHgucm93cmVvcmRlci5jLmVuYWJsZSA9IHRvZ2dsZTsKCQl9Cgl9ICk7Cn0gKTsKCkFwaS5yZWdpc3RlciggJ3Jvd1Jlb3JkZXIuZGlzYWJsZSgpJywgZnVuY3Rpb24gKCkgewoJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggY3R4ICkgewoJCWlmICggY3R4LnJvd3Jlb3JkZXIgKSB7CgkJCWN0eC5yb3dyZW9yZGVyLmMuZW5hYmxlID0gZmFsc2U7CgkJfQoJfSApOwp9ICk7CgoKLyoqCiAqIFZlcnNpb24gaW5mb3JtYXRpb24KICoKICogQG5hbWUgUm93UmVvcmRlci52ZXJzaW9uCiAqIEBzdGF0aWMKICovClJvd1Jlb3JkZXIudmVyc2lvbiA9ICcxLjIuNic7CgoKJC5mbi5kYXRhVGFibGUuUm93UmVvcmRlciA9IFJvd1Jlb3JkZXI7CiQuZm4uRGF0YVRhYmxlLlJvd1Jlb3JkZXIgPSBSb3dSZW9yZGVyOwoKLy8gQXR0YWNoIGEgbGlzdGVuZXIgdG8gdGhlIGRvY3VtZW50IHdoaWNoIGxpc3RlbnMgZm9yIERhdGFUYWJsZXMgaW5pdGlhbGlzYXRpb24KLy8gZXZlbnRzIHNvIHdlIGNhbiBhdXRvbWF0aWNhbGx5IGluaXRpYWxpc2UKJChkb2N1bWVudCkub24oICdpbml0LmR0LmR0cicsIGZ1bmN0aW9uIChlLCBzZXR0aW5ncywganNvbikgewoJaWYgKCBlLm5hbWVzcGFjZSAhPT0gJ2R0JyApIHsKCQlyZXR1cm47Cgl9CgoJdmFyIGluaXQgPSBzZXR0aW5ncy5vSW5pdC5yb3dSZW9yZGVyOwoJdmFyIGRlZmF1bHRzID0gRGF0YVRhYmxlLmRlZmF1bHRzLnJvd1Jlb3JkZXI7CgoJaWYgKCBpbml0IHx8IGRlZmF1bHRzICkgewoJCXZhciBvcHRzID0gJC5leHRlbmQoIHt9LCBpbml0LCBkZWZhdWx0cyApOwoKCQlpZiAoIGluaXQgIT09IGZhbHNlICkgewoJCQluZXcgUm93UmVvcmRlciggc2V0dGluZ3MsIG9wdHMgICk7CgkJfQoJfQp9ICk7CgoKcmV0dXJuIFJvd1Jlb3JkZXI7Cn0pKTsKCgovKiEgU2Nyb2xsZXIgMi4wLjEKICogwqkyMDExLTIwMTkgU3ByeU1lZGlhIEx0ZCAtIGRhdGF0YWJsZXMubmV0L2xpY2Vuc2UKICovCgovKioKICogQHN1bW1hcnkgICAgIFNjcm9sbGVyCiAqIEBkZXNjcmlwdGlvbiBWaXJ0dWFsIHJlbmRlcmluZyBmb3IgRGF0YVRhYmxlcwogKiBAdmVyc2lvbiAgICAgMi4wLjEKICogQGZpbGUgICAgICAgIGRhdGFUYWJsZXMuc2Nyb2xsZXIuanMKICogQGF1dGhvciAgICAgIFNwcnlNZWRpYSBMdGQgKHd3dy5zcHJ5bWVkaWEuY28udWspCiAqIEBjb250YWN0ICAgICB3d3cuc3ByeW1lZGlhLmNvLnVrL2NvbnRhY3QKICogQGNvcHlyaWdodCAgIENvcHlyaWdodCAyMDExLTIwMTkgU3ByeU1lZGlhIEx0ZC4KICoKICogVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBhdmFpbGFibGUgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlOgogKiAgIE1JVCBsaWNlbnNlIC0gaHR0cDovL2RhdGF0YWJsZXMubmV0L2xpY2Vuc2UvbWl0CiAqCiAqIFRoaXMgc291cmNlIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CiAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCiAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIGxpY2Vuc2UgZmlsZXMgZm9yIGRldGFpbHMuCiAqCiAqIEZvciBkZXRhaWxzIHBsZWFzZSByZWZlciB0bzogaHR0cDovL3d3dy5kYXRhdGFibGVzLm5ldAogKi8KCihmdW5jdGlvbiggZmFjdG9yeSApewoJaWYgKCB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7CgkJLy8gQU1ECgkJZGVmaW5lKCBbJ2pxdWVyeScsICdkYXRhdGFibGVzLm5ldCddLCBmdW5jdGlvbiAoICQgKSB7CgkJCXJldHVybiBmYWN0b3J5KCAkLCB3aW5kb3csIGRvY3VtZW50ICk7CgkJfSApOwoJfQoJZWxzZSBpZiAoIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyApIHsKCQkvLyBDb21tb25KUwoJCW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJvb3QsICQpIHsKCQkJaWYgKCAhIHJvb3QgKSB7CgkJCQlyb290ID0gd2luZG93OwoJCQl9CgoJCQlpZiAoICEgJCB8fCAhICQuZm4uZGF0YVRhYmxlICkgewoJCQkJJCA9IHJlcXVpcmUoJ2RhdGF0YWJsZXMubmV0Jykocm9vdCwgJCkuJDsKCQkJfQoKCQkJcmV0dXJuIGZhY3RvcnkoICQsIHJvb3QsIHJvb3QuZG9jdW1lbnQgKTsKCQl9OwoJfQoJZWxzZSB7CgkJLy8gQnJvd3NlcgoJCWZhY3RvcnkoIGpRdWVyeSwgd2luZG93LCBkb2N1bWVudCApOwoJfQp9KGZ1bmN0aW9uKCAkLCB3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQgKSB7Cid1c2Ugc3RyaWN0JzsKdmFyIERhdGFUYWJsZSA9ICQuZm4uZGF0YVRhYmxlOwoKCi8qKgogKiBTY3JvbGxlciBpcyBhIHZpcnR1YWwgcmVuZGVyaW5nIHBsdWctaW4gZm9yIERhdGFUYWJsZXMgd2hpY2ggYWxsb3dzIGxhcmdlCiAqIGRhdGFzZXRzIHRvIGJlIGRyYXduIG9uIHNjcmVlbiBldmVyeSBxdWlja2x5LiBXaGF0IHRoZSB2aXJ0dWFsIHJlbmRlcmluZyBtZWFucwogKiBpcyB0aGF0IG9ubHkgdGhlIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgdGFibGUgKGFuZCBhIGJpdCB0byBlaXRoZXIgc2lkZSB0byBtYWtlCiAqIHRoZSBzY3JvbGxpbmcgc21vb3RoKSBpcyBkcmF3biwgd2hpbGUgdGhlIHNjcm9sbGluZyBjb250YWluZXIgZ2l2ZXMgdGhlCiAqIHZpc3VhbCBpbXByZXNzaW9uIHRoYXQgdGhlIHdob2xlIHRhYmxlIGlzIHZpc2libGUuIFRoaXMgaXMgZG9uZSBieSBtYWtpbmcgdXNlCiAqIG9mIHRoZSBwYWdpbmF0aW9uIGFiaWxpdGllcyBvZiBEYXRhVGFibGVzIGFuZCBtb3ZpbmcgdGhlIHRhYmxlIGFyb3VuZCBpbiB0aGUKICogc2Nyb2xsaW5nIGNvbnRhaW5lciBEYXRhVGFibGVzIGFkZHMgdG8gdGhlIHBhZ2UuIFRoZSBzY3JvbGxpbmcgY29udGFpbmVyIGlzCiAqIGZvcmNlZCB0byB0aGUgaGVpZ2h0IGl0IHdvdWxkIGJlIGZvciB0aGUgZnVsbCB0YWJsZSBkaXNwbGF5IHVzaW5nIGFuIGV4dHJhCiAqIGVsZW1lbnQuCiAqCiAqIE5vdGUgdGhhdCByb3dzIGluIHRoZSB0YWJsZSBNVVNUIGFsbCBiZSB0aGUgc2FtZSBoZWlnaHQuIEluZm9ybWF0aW9uIGluIGEgY2VsbAogKiB3aGljaCBleHBhbmRzIG9uIHRvIG11bHRpcGxlIGxpbmVzIHdpbGwgY2F1c2Ugc29tZSBvZGQgYmVoYXZpb3VyIGluIHRoZSBzY3JvbGxpbmcuCiAqCiAqIFNjcm9sbGVyIGlzIGluaXRpYWxpc2VkIGJ5IHNpbXBseSBpbmNsdWRpbmcgdGhlIGxldHRlciAnUycgaW4gdGhlIHNEb20gZm9yIHRoZQogKiB0YWJsZSB5b3Ugd2FudCB0byBoYXZlIHRoaXMgZmVhdHVyZSBlbmFibGVkIG9uLiBOb3RlIHRoYXQgdGhlICdTJyBtdXN0IGNvbWUKICogQUZURVIgdGhlICd0JyBwYXJhbWV0ZXIgaW4gYGRvbWAuCiAqCiAqIEtleSBmZWF0dXJlcyBpbmNsdWRlOgogKiAgIDx1bCBjbGFzcz0ibGltaXRfbGVuZ3RoIj4KICogICAgIDxsaT5TcGVlZCEgVGhlIGFpbSBvZiBTY3JvbGxlciBmb3IgRGF0YVRhYmxlcyBpcyB0byBtYWtlIHJlbmRlcmluZyBsYXJnZSBkYXRhIHNldHMgZmFzdDwvbGk+CiAqICAgICA8bGk+RnVsbCBjb21wYXRpYmlsaXR5IHdpdGggZGVmZXJyZWQgcmVuZGVyaW5nIGluIERhdGFUYWJsZXMgZm9yIG1heGltdW0gc3BlZWQ8L2xpPgogKiAgICAgPGxpPkRpc3BsYXkgbWlsbGlvbnMgb2Ygcm93czwvbGk+CiAqICAgICA8bGk+SW50ZWdyYXRpb24gd2l0aCBzdGF0ZSBzYXZpbmcgaW4gRGF0YVRhYmxlcyAoc2Nyb2xsaW5nIHBvc2l0aW9uIGlzIHNhdmVkKTwvbGk+CiAqICAgICA8bGk+RWFzeSB0byB1c2U8L2xpPgogKiAgIDwvdWw+CiAqCiAqICBAY2xhc3MKICogIEBjb25zdHJ1Y3RvcgogKiAgQGdsb2JhbAogKiAgQHBhcmFtIHtvYmplY3R9IGR0IERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0IG9yIEFQSSBpbnN0YW5jZQogKiAgQHBhcmFtIHtvYmplY3R9IFtvcHRzPXt9XSBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgRml4ZWRDb2x1bW5zLiBPcHRpb25zIAogKiAgICBhcmUgZGVmaW5lZCBieSB7QGxpbmsgU2Nyb2xsZXIuZGVmYXVsdHN9CiAqCiAqICBAcmVxdWlyZXMgalF1ZXJ5IDEuNysKICogIEByZXF1aXJlcyBEYXRhVGFibGVzIDEuMTAuMCsKICoKICogIEBleGFtcGxlCiAqICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewogKiAgICAgICAgJCgnI2V4YW1wbGUnKS5EYXRhVGFibGUoIHsKICogICAgICAgICAgICAic2Nyb2xsWSI6ICIyMDBweCIsCiAqICAgICAgICAgICAgImFqYXgiOiAibWVkaWEvZGF0YXNldC9sYXJnZS50eHQiLAogKiAgICAgICAgICAgICJzY3JvbGxlciI6IHRydWUsCiAqICAgICAgICAgICAgImRlZmVyUmVuZGVyIjogdHJ1ZQogKiAgICAgICAgfSApOwogKiAgICB9ICk7CiAqLwp2YXIgU2Nyb2xsZXIgPSBmdW5jdGlvbiAoIGR0LCBvcHRzICkgewoJLyogU2FuaXR5IGNoZWNrIC0geW91IGp1c3Qga25vdyBpdCB3aWxsIGhhcHBlbiAqLwoJaWYgKCAhICh0aGlzIGluc3RhbmNlb2YgU2Nyb2xsZXIpICkgewoJCWFsZXJ0KCAiU2Nyb2xsZXIgd2FybmluZzogU2Nyb2xsZXIgbXVzdCBiZSBpbml0aWFsaXNlZCB3aXRoIHRoZSAnbmV3JyBrZXl3b3JkLiIgKTsKCQlyZXR1cm47Cgl9CgoJaWYgKCBvcHRzID09PSB1bmRlZmluZWQgKSB7CgkJb3B0cyA9IHt9OwoJfQoKCXZhciBkdEFwaSA9ICQuZm4uZGF0YVRhYmxlLkFwaSggZHQgKTsKCgkvKioKCSAqIFNldHRpbmdzIG9iamVjdCB3aGljaCBjb250YWlucyBjdXN0b21pc2FibGUgaW5mb3JtYXRpb24gZm9yIHRoZSBTY3JvbGxlciBpbnN0YW5jZQoJICogQG5hbWVzcGFjZQoJICogQHByaXZhdGUKCSAqIEBleHRlbmRzIFNjcm9sbGVyLmRlZmF1bHRzCgkgKi8KCXRoaXMucyA9IHsKCQkvKioKCQkgKiBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICBAdHlwZSAgICAgb2JqZWN0CgkJICogIEBkZWZhdWx0ICBQYXNzZWQgaW4gYXMgZmlyc3QgcGFyYW1ldGVyIHRvIGNvbnN0cnVjdG9yCgkJICovCgkJZHQ6IGR0QXBpLnNldHRpbmdzKClbMF0sCgoJCS8qKgoJCSAqIERhdGFUYWJsZXMgQVBJIGluc3RhbmNlCgkJICogIEB0eXBlICAgICBEYXRhVGFibGUuQXBpCgkJICovCgkJZHRBcGk6IGR0QXBpLAoKCQkvKioKCQkgKiBQaXhlbCBsb2NhdGlvbiBvZiB0aGUgdG9wIG9mIHRoZSBkcmF3biB0YWJsZSBpbiB0aGUgdmlld3BvcnQKCQkgKiAgQHR5cGUgICAgIGludAoJCSAqICBAZGVmYXVsdCAgMAoJCSAqLwoJCXRhYmxlVG9wOiAwLAoKCQkvKioKCQkgKiBQaXhlbCBsb2NhdGlvbiBvZiB0aGUgYm90dG9tIG9mIHRoZSBkcmF3biB0YWJsZSBpbiB0aGUgdmlld3BvcnQKCQkgKiAgQHR5cGUgICAgIGludAoJCSAqICBAZGVmYXVsdCAgMAoJCSAqLwoJCXRhYmxlQm90dG9tOiAwLAoKCQkvKioKCQkgKiBQaXhlbCBsb2NhdGlvbiBvZiB0aGUgYm91bmRhcnkgZm9yIHdoZW4gdGhlIG5leHQgZGF0YSBzZXQgc2hvdWxkIGJlIGxvYWRlZCBhbmQgZHJhd24KCQkgKiB3aGVuIHNjcm9sbGluZyB1cCB0aGUgd2F5LgoJCSAqICBAdHlwZSAgICAgaW50CgkJICogIEBkZWZhdWx0ICAwCgkJICogIEBwcml2YXRlCgkJICovCgkJcmVkcmF3VG9wOiAwLAoKCQkvKioKCQkgKiBQaXhlbCBsb2NhdGlvbiBvZiB0aGUgYm91bmRhcnkgZm9yIHdoZW4gdGhlIG5leHQgZGF0YSBzZXQgc2hvdWxkIGJlIGxvYWRlZCBhbmQgZHJhd24KCQkgKiB3aGVuIHNjcm9sbGluZyBkb3duIHRoZSB3YXkuIE5vdGUgdGhhdCB0aGlzIGlzIGFjdHVhbGx5IGNhbGN1bGF0ZWQgYXMgdGhlIG9mZnNldCBmcm9tCgkJICogdGhlIHRvcC4KCQkgKiAgQHR5cGUgICAgIGludAoJCSAqICBAZGVmYXVsdCAgMAoJCSAqICBAcHJpdmF0ZQoJCSAqLwoJCXJlZHJhd0JvdHRvbTogMCwKCgkJLyoqCgkJICogQXV0byByb3cgaGVpZ2h0IG9yIG5vdCBpbmRpY2F0b3IKCQkgKiAgQHR5cGUgICAgIGJvb2wKCQkgKiAgQGRlZmF1bHQgIDAKCQkgKi8KCQlhdXRvSGVpZ2h0OiB0cnVlLAoKCQkvKioKCQkgKiBOdW1iZXIgb2Ygcm93cyBjYWxjdWxhdGVkIGFzIHZpc2libGUgaW4gdGhlIHZpc2libGUgdmlld3BvcnQKCQkgKiAgQHR5cGUgICAgIGludAoJCSAqICBAZGVmYXVsdCAgMAoJCSAqLwoJCXZpZXdwb3J0Um93czogMCwKCgkJLyoqCgkJICogc2V0VGltZW91dCByZWZlcmVuY2UgZm9yIHN0YXRlIHNhdmluZywgdXNlZCB3aGVuIHN0YXRlIHNhdmluZyBpcyBlbmFibGVkIGluIHRoZSBEYXRhVGFibGUKCQkgKiBhbmQgd2hlbiB0aGUgdXNlciBzY3JvbGxzIHRoZSB2aWV3cG9ydCBpbiBvcmRlciB0byBzdG9wIHRoZSBjb29raWUgc2V0IHRha2luZyB0b28gbXVjaAoJCSAqIENQVSEKCQkgKiAgQHR5cGUgICAgIGludAoJCSAqICBAZGVmYXVsdCAgMAoJCSAqLwoJCXN0YXRlVE86IG51bGwsCgoJCS8qKgoJCSAqIHNldFRpbWVvdXQgcmVmZXJlbmNlIGZvciB0aGUgcmVkcmF3LCB1c2VkIHdoZW4gc2VydmVyLXNpZGUgcHJvY2Vzc2luZyBpcyBlbmFibGVkIGluIHRoZQoJCSAqIERhdGFUYWJsZXMgaW4gb3JkZXIgdG8gcHJldmVudCBEb1NpbmcgdGhlIHNlcnZlcgoJCSAqICBAdHlwZSAgICAgaW50CgkJICogIEBkZWZhdWx0ICBudWxsCgkJICovCgkJZHJhd1RPOiBudWxsLAoKCQloZWlnaHRzOiB7CgkJCWp1bXA6IG51bGwsCgkJCXBhZ2U6IG51bGwsCgkJCXZpcnR1YWw6IG51bGwsCgkJCXNjcm9sbDogbnVsbCwKCgkJCS8qKgoJCQkgKiBIZWlnaHQgb2Ygcm93cyBpbiB0aGUgdGFibGUKCQkJICogIEB0eXBlICAgICBpbnQKCQkJICogIEBkZWZhdWx0ICAwCgkJCSAqLwoJCQlyb3c6IG51bGwsCgoJCQkvKioKCQkJICogUGl4ZWwgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydAoJCQkgKiAgQHR5cGUgICAgIGludAoJCQkgKiAgQGRlZmF1bHQgIDAKCQkJICovCgkJCXZpZXdwb3J0OiBudWxsLAoJCQlsYWJlbEZhY3RvcjogMQoJCX0sCgoJCXRvcFJvd0Zsb2F0OiAwLAoJCXNjcm9sbERyYXdEaWZmOiBudWxsLAoJCWxvYWRlclZpc2libGU6IGZhbHNlLAoJCWZvcmNlUmVwb3NpdGlvbjogZmFsc2UsCgkJYmFzZVJvd1RvcDogMCwKCQliYXNlU2Nyb2xsVG9wOiAwLAoJCW1vdXNlZG93bjogZmFsc2UsCgkJbGFzdFNjcm9sbFRvcDogMAoJfTsKCgkvLyBAdG9kbyBUaGUgZGVmYXVsdHMgc2hvdWxkIGV4dGVuZCBhIGBjYCBwcm9wZXJ0eSBhbmQgdGhlIGludGVybmFsIHNldHRpbmdzCgkvLyBvbmx5IGhlbGQgaW4gdGhlIGBzYCBwcm9wZXJ0eS4gQXQgdGhlIG1vbWVudCB0aGV5IGFyZSBtaXhlZAoJdGhpcy5zID0gJC5leHRlbmQoIHRoaXMucywgU2Nyb2xsZXIub0RlZmF1bHRzLCBvcHRzICk7CgoJLy8gV29ya2Fyb3VuZCBmb3Igcm93IGhlaWdodCBiZWluZyByZWFkIGZyb20gaGVpZ2h0IG9iamVjdCAoc2VlIGFib3ZlIGNvbW1lbnQpCgl0aGlzLnMuaGVpZ2h0cy5yb3cgPSB0aGlzLnMucm93SGVpZ2h0OwoKCS8qKgoJICogRE9NIGVsZW1lbnRzIHVzZWQgYnkgdGhlIGNsYXNzIGluc3RhbmNlCgkgKiBAcHJpdmF0ZQoJICogQG5hbWVzcGFjZQoJICoKCSAqLwoJdGhpcy5kb20gPSB7CgkJImZvcmNlIjogICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksCgkJImxhYmVsIjogICAgJCgnPGRpdiBjbGFzcz0iZHRzX2xhYmVsIj4wPC9kaXY+JyksCgkJInNjcm9sbGVyIjogbnVsbCwKCQkidGFibGUiOiAgICBudWxsLAoJCSJsb2FkZXIiOiAgIG51bGwKCX07CgoJLy8gQXR0YWNoIHRoZSBpbnN0YW5jZSB0byB0aGUgRGF0YVRhYmxlcyBpbnN0YW5jZSBzbyBpdCBjYW4gYmUgYWNjZXNzZWQgaW4KCS8vIGZ1dHVyZS4gRG9uJ3QgaW5pdGlhbGlzZSBTY3JvbGxlciB0d2ljZSBvbiB0aGUgc2FtZSB0YWJsZQoJaWYgKCB0aGlzLnMuZHQub1Njcm9sbGVyICkgewoJCXJldHVybjsKCX0KCgl0aGlzLnMuZHQub1Njcm9sbGVyID0gdGhpczsKCgkvKiBMZXQncyBkbyBpdCAqLwoJdGhpcy5jb25zdHJ1Y3QoKTsKfTsKCgoKJC5leHRlbmQoIFNjcm9sbGVyLnByb3RvdHlwZSwgewoJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJICogUHVibGljIG1ldGhvZHMgLSB0byBiZSBleHBvc2VkIHZpYSB0aGUgRGF0YVRhYmxlcyBBUEkKCSAqLwoKCS8qKgoJICogQ2FsY3VsYXRlIGFuZCBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgbWFueSByb3dzIGFyZSB0byBiZSBkaXNwbGF5ZWQKCSAqIGluIHRoZSBzY3JvbGxpbmcgdmlld3BvcnQsIGJhc2VkIG9uIGN1cnJlbnQgZGltZW5zaW9ucyBpbiB0aGUgYnJvd3NlcidzCgkgKiByZW5kZXJpbmcuIFRoaXMgY2FuIGJlIHBhcnRpY3VsYXJseSB1c2VmdWwgaWYgdGhlIHRhYmxlIGlzIGluaXRpYWxseQoJICogZHJhd24gaW4gYSBoaWRkZW4gZWxlbWVudCAtIGZvciBleGFtcGxlIGluIGEgdGFiLgoJICogIEBwYXJhbSB7Ym9vbH0gW3JlZHJhdz10cnVlXSBSZWRyYXcgdGhlIHRhYmxlIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIHJlY2FsY3VsYXRpb24sIHdpdGgKCSAqICAgIHRoZSBuZXcgZGltZW5zaW9ucyBmb3JtaW5nIHRoZSBiYXNpcyBmb3IgdGhlIGRyYXcuCgkgKiAgQHJldHVybnMge3ZvaWR9CgkgKi8KCW1lYXN1cmU6IGZ1bmN0aW9uICggcmVkcmF3ICkKCXsKCQlpZiAoIHRoaXMucy5hdXRvSGVpZ2h0ICkKCQl7CgkJCXRoaXMuX2NhbGNSb3dIZWlnaHQoKTsKCQl9CgoJCXZhciBoZWlnaHRzID0gdGhpcy5zLmhlaWdodHM7CgoJCWlmICggaGVpZ2h0cy5yb3cgKSB7CgkJCWhlaWdodHMudmlld3BvcnQgPSAkLmNvbnRhaW5zKGRvY3VtZW50LCB0aGlzLmRvbS5zY3JvbGxlcikgPwoJCQkJdGhpcy5kb20uc2Nyb2xsZXIuY2xpZW50SGVpZ2h0IDoKCQkJCXRoaXMuX3BhcnNlSGVpZ2h0KCQodGhpcy5kb20uc2Nyb2xsZXIpLmNzcygnaGVpZ2h0JykpOwoKCQkJLy8gSWYgY29sbGFwc2VkIChubyBoZWlnaHQpIHVzZSB0aGUgbWF4LWhlaWdodCBwYXJhbWV0ZXIKCQkJaWYgKCAhIGhlaWdodHMudmlld3BvcnQgKSB7CgkJCQloZWlnaHRzLnZpZXdwb3J0ID0gdGhpcy5fcGFyc2VIZWlnaHQoJCh0aGlzLmRvbS5zY3JvbGxlcikuY3NzKCdtYXgtaGVpZ2h0JykpOwoJCQl9CgoJCQl0aGlzLnMudmlld3BvcnRSb3dzID0gcGFyc2VJbnQoIGhlaWdodHMudmlld3BvcnQgLyBoZWlnaHRzLnJvdywgMTAgKSsxOwoJCQl0aGlzLnMuZHQuX2lEaXNwbGF5TGVuZ3RoID0gdGhpcy5zLnZpZXdwb3J0Um93cyAqIHRoaXMucy5kaXNwbGF5QnVmZmVyOwoJCX0KCgkJdmFyIGxhYmVsID0gdGhpcy5kb20ubGFiZWwub3V0ZXJIZWlnaHQoKTsKCQloZWlnaHRzLmxhYmVsRmFjdG9yID0gKGhlaWdodHMudmlld3BvcnQtbGFiZWwpIC8gaGVpZ2h0cy5zY3JvbGw7CgoJCWlmICggcmVkcmF3ID09PSB1bmRlZmluZWQgfHwgcmVkcmF3ICkKCQl7CgkJCXRoaXMucy5kdC5vSW5zdGFuY2UuZm5EcmF3KCBmYWxzZSApOwoJCX0KCX0sCgoJLyoqCgkgKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBkaXNwbGF5ZWQgcmVjb3JkIHJhbmdlLiBUaGlzIGNvcnJlc3BvbmRzIHRvCgkgKiB0aGUgaW5mb3JtYXRpb24gdXN1YWxseSBkaXNwbGF5ZWQgaW4gdGhlICJJbmZvIiBibG9jayBvZiB0aGUgdGFibGUuCgkgKgoJICogQHJldHVybnMge29iamVjdH0gaW5mbyBhcyBhbiBvYmplY3Q6CgkgKiAgewoJICogICAgICBzdGFydDoge2ludH0sIC8vIHRoZSAwLWluZGV4ZWQgcmVjb3JkIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXdwb3J0CgkgKiAgICAgIGVuZDogICB7aW50fSwgLy8gdGhlIDAtaW5kZXhlZCByZWNvcmQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdmlld3BvcnQKCSAqICB9CgkqLwoJcGFnZUluZm86IGZ1bmN0aW9uKCkKCXsKCQl2YXIgCgkJCWR0ID0gdGhpcy5zLmR0LAoJCQlpU2Nyb2xsVG9wID0gdGhpcy5kb20uc2Nyb2xsZXIuc2Nyb2xsVG9wLAoJCQlpVG90YWwgPSBkdC5mblJlY29yZHNEaXNwbGF5KCksCgkJCWlQb3NzaWJsZUVuZCA9IE1hdGguY2VpbCh0aGlzLnBpeGVsc1RvUm93KGlTY3JvbGxUb3AgKyB0aGlzLnMuaGVpZ2h0cy52aWV3cG9ydCwgZmFsc2UsIHRoaXMucy5hbmkpKTsKCgkJcmV0dXJuIHsKCQkJc3RhcnQ6IE1hdGguZmxvb3IodGhpcy5waXhlbHNUb1JvdyhpU2Nyb2xsVG9wLCBmYWxzZSwgdGhpcy5zLmFuaSkpLAoJCQllbmQ6IGlUb3RhbCA8IGlQb3NzaWJsZUVuZCA/IGlUb3RhbC0xIDogaVBvc3NpYmxlRW5kLTEKCQl9OwoJfSwKCgkvKioKCSAqIENhbGN1bGF0ZSB0aGUgcm93IG51bWJlciB0aGF0IHdpbGwgYmUgZm91bmQgYXQgdGhlIGdpdmVuIHBpeGVsIHBvc2l0aW9uCgkgKiAoeS1zY3JvbGwpLgoJICoKCSAqIFBsZWFzZSBub3RlIHRoYXQgd2hlbiB0aGUgaGVpZ2h0IG9mIHRoZSBmdWxsIHRhYmxlIGV4Y2VlZHMgMSBtaWxsaW9uCgkgKiBwaXhlbHMsIFNjcm9sbGVyIHN3aXRjaGVzIGludG8gYSBub24tbGluZWFyIG1vZGUgZm9yIHRoZSBzY3JvbGxiYXIgdG8gZml0CgkgKiBhbGwgb2YgdGhlIHJlY29yZHMgaW50byBhIGZpbml0ZSBhcmVhLCBidXQgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbGluZWFyCgkgKiB2YWx1ZSAocmVsYXRpdmUgdG8gdGhlIGxhc3Qgbm9uLWxpbmVhciBwb3NpdGlvbmluZykuCgkgKiAgQHBhcmFtIHtpbnR9IHBpeGVscyBPZmZzZXQgZnJvbSB0b3AgdG8gY2FsY3VsYXRlIHRoZSByb3cgbnVtYmVyIG9mCgkgKiAgQHBhcmFtIHtpbnR9IFtpbnRQYXJzZT10cnVlXSBJZiBhbiBpbnRlZ2VyIHZhbHVlIHNob3VsZCBiZSByZXR1cm5lZAoJICogIEBwYXJhbSB7aW50fSBbdmlydHVhbD1mYWxzZV0gUGVyZm9ybSB0aGUgY2FsY3VsYXRpb25zIGluIHRoZSB2aXJ0dWFsIGRvbWFpbgoJICogIEByZXR1cm5zIHtpbnR9IFJvdyBpbmRleAoJICovCglwaXhlbHNUb1JvdzogZnVuY3Rpb24gKCBwaXhlbHMsIGludFBhcnNlLCB2aXJ0dWFsICkKCXsKCQl2YXIgZGlmZiA9IHBpeGVscyAtIHRoaXMucy5iYXNlU2Nyb2xsVG9wOwoJCXZhciByb3cgPSB2aXJ0dWFsID8KCQkJKHRoaXMuX2RvbWFpbiggJ3BoeXNpY2FsVG9WaXJ0dWFsJywgdGhpcy5zLmJhc2VTY3JvbGxUb3AgKSArIGRpZmYpIC8gdGhpcy5zLmhlaWdodHMucm93IDoKCQkJKCBkaWZmIC8gdGhpcy5zLmhlaWdodHMucm93ICkgKyB0aGlzLnMuYmFzZVJvd1RvcDsKCgkJcmV0dXJuIGludFBhcnNlIHx8IGludFBhcnNlID09PSB1bmRlZmluZWQgPwoJCQlwYXJzZUludCggcm93LCAxMCApIDoKCQkJcm93OwoJfSwKCgkvKioKCSAqIENhbGN1bGF0ZSB0aGUgcGl4ZWwgcG9zaXRpb24gZnJvbSB0aGUgdG9wIG9mIHRoZSBzY3JvbGxpbmcgY29udGFpbmVyIGZvcgoJICogYSBnaXZlbiByb3cKCSAqICBAcGFyYW0ge2ludH0gaVJvdyBSb3cgbnVtYmVyIHRvIGNhbGN1bGF0ZSB0aGUgcG9zaXRpb24gb2YKCSAqICBAcmV0dXJucyB7aW50fSBQaXhlbHMKCSAqLwoJcm93VG9QaXhlbHM6IGZ1bmN0aW9uICggcm93SWR4LCBpbnRQYXJzZSwgdmlydHVhbCApCgl7CgkJdmFyIHBpeGVsczsKCQl2YXIgZGlmZiA9IHJvd0lkeCAtIHRoaXMucy5iYXNlUm93VG9wOwoKCQlpZiAoIHZpcnR1YWwgKSB7CgkJCXBpeGVscyA9IHRoaXMuX2RvbWFpbiggJ3ZpcnR1YWxUb1BoeXNpY2FsJywgdGhpcy5zLmJhc2VTY3JvbGxUb3AgKTsKCQkJcGl4ZWxzICs9IGRpZmYgKiB0aGlzLnMuaGVpZ2h0cy5yb3c7CgkJfQoJCWVsc2UgewoJCQlwaXhlbHMgPSB0aGlzLnMuYmFzZVNjcm9sbFRvcDsKCQkJcGl4ZWxzICs9IGRpZmYgKiB0aGlzLnMuaGVpZ2h0cy5yb3c7CgkJfQoKCQlyZXR1cm4gaW50UGFyc2UgfHwgaW50UGFyc2UgPT09IHVuZGVmaW5lZCA/CgkJCXBhcnNlSW50KCBwaXhlbHMsIDEwICkgOgoJCQlwaXhlbHM7Cgl9LAoKCgkvKioKCSAqIENhbGN1bGF0ZSB0aGUgcm93IG51bWJlciB0aGF0IHdpbGwgYmUgZm91bmQgYXQgdGhlIGdpdmVuIHBpeGVsIHBvc2l0aW9uICh5LXNjcm9sbCkKCSAqICBAcGFyYW0ge2ludH0gcm93IFJvdyBpbmRleCB0byBzY3JvbGwgdG8KCSAqICBAcGFyYW0ge2Jvb2x9IFthbmltYXRlPXRydWVdIEFuaW1hdGUgdGhlIHRyYW5zaXRpb24gb3Igbm90CgkgKiAgQHJldHVybnMge3ZvaWR9CgkgKi8KCXNjcm9sbFRvUm93OiBmdW5jdGlvbiAoIHJvdywgYW5pbWF0ZSApCgl7CgkJdmFyIHRoYXQgPSB0aGlzOwoJCXZhciBhbmkgPSBmYWxzZTsKCQl2YXIgcHggPSB0aGlzLnJvd1RvUGl4ZWxzKCByb3cgKTsKCgkJLy8gV2UgbmVlZCB0byBrbm93IGlmIHRoZSB0YWJsZSB3aWxsIHJlZHJhdyBvciBub3QgYmVmb3JlIGRvaW5nIHRoZQoJCS8vIHNjcm9sbC4gSWYgaXQgd2lsbCBub3QgcmVkcmF3LCB0aGVuIHdlIG5lZWQgdG8gdXNlIHRoZSBjdXJyZW50bHkKCQkvLyBkaXNwbGF5ZWQgdGFibGUsIGFuZCBzY3JvbGwgd2l0aCB0aGUgcGh5c2ljYWwgcGl4ZWxzLiBPdGhlcndpc2UsIHdlCgkJLy8gbmVlZCB0byBjYWxjdWxhdGUgdGhlIHRhYmxlJ3MgbmV3IHBvc2l0aW9uIGZyb20gdGhlIHZpcnR1YWwKCQkvLyB0cmFuc2Zvcm0uCgkJdmFyIHByZVJvd3MgPSAoKHRoaXMucy5kaXNwbGF5QnVmZmVyLTEpLzIpICogdGhpcy5zLnZpZXdwb3J0Um93czsKCQl2YXIgZHJhd1JvdyA9IHJvdyAtIHByZVJvd3M7CgkJaWYgKCBkcmF3Um93IDwgMCApIHsKCQkJZHJhd1JvdyA9IDA7CgkJfQoKCQlpZiAoIChweCA+IHRoaXMucy5yZWRyYXdCb3R0b20gfHwgcHggPCB0aGlzLnMucmVkcmF3VG9wKSAmJiB0aGlzLnMuZHQuX2lEaXNwbGF5U3RhcnQgIT09IGRyYXdSb3cgKSB7CgkJCWFuaSA9IHRydWU7CgkJCXB4ID0gdGhpcy5fZG9tYWluKCAndmlydHVhbFRvUGh5c2ljYWwnLCByb3cgKiB0aGlzLnMuaGVpZ2h0cy5yb3cgKTsKCgkJCS8vIElmIHdlIG5lZWQgcmVjb3JkcyBvdXRzaWRlIHRoZSBjdXJyZW50IGRyYXcgcmVnaW9uLCBidXQgdGhlIG5ldwoJCQkvLyBzY3JvbGxpbmcgcG9zaXRpb24gaXMgaW5zaWRlIHRoYXQgKGR1ZSB0byB0aGUgbm9uLWxpbmVhciBuYXR1cmUKCQkJLy8gZm9yIGxhcmdlciBudW1iZXJzIG9mIHJlY29yZHMpLCB3ZSBuZWVkIHRvIGZvcmNlIHBvc2l0aW9uIHVwZGF0ZS4KCQkJaWYgKCB0aGlzLnMucmVkcmF3VG9wIDwgcHggJiYgcHggPCB0aGlzLnMucmVkcmF3Qm90dG9tICkgewoJCQkJdGhpcy5zLmZvcmNlUmVwb3NpdGlvbiA9IHRydWU7CgkJCQlhbmltYXRlID0gZmFsc2U7CgkJCX0KCQl9CgoJCWlmICggYW5pbWF0ZSA9PT0gdW5kZWZpbmVkIHx8IGFuaW1hdGUgKQoJCXsKCQkJdGhpcy5zLmFuaSA9IGFuaTsKCQkJJCh0aGlzLmRvbS5zY3JvbGxlcikuYW5pbWF0ZSggewoJCQkJInNjcm9sbFRvcCI6IHB4CgkJCX0sIGZ1bmN0aW9uICgpIHsKCQkJCS8vIFRoaXMgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHRoZSBhbmltYXRpb24gaGFzIGNvbXBsZXRlZCBhbmQKCQkJCS8vIHRoZSBmaW5hbCBzY3JvbGwgZXZlbnQgZmlyZWQKCQkJCXNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHsKCQkJCQl0aGF0LnMuYW5pID0gZmFsc2U7CgkJCQl9LCAyNTAgKTsKCQkJfSApOwoJCX0KCQllbHNlCgkJewoJCQkkKHRoaXMuZG9tLnNjcm9sbGVyKS5zY3JvbGxUb3AoIHB4ICk7CgkJfQoJfSwKCgoJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJICogQ29uc3RydWN0b3IKCSAqLwoKCS8qKgoJICogSW5pdGlhbGlzYXRpb24gZm9yIFNjcm9sbGVyCgkgKiAgQHJldHVybnMge3ZvaWR9CgkgKiAgQHByaXZhdGUKCSAqLwoJY29uc3RydWN0OiBmdW5jdGlvbiAoKQoJewoJCXZhciB0aGF0ID0gdGhpczsKCQl2YXIgZHQgPSB0aGlzLnMuZHRBcGk7CgoJCS8qIFNhbml0eSBjaGVjayAqLwoJCWlmICggIXRoaXMucy5kdC5vRmVhdHVyZXMuYlBhZ2luYXRlICkgewoJCQl0aGlzLnMuZHQub0FwaS5fZm5Mb2coIHRoaXMucy5kdCwgMCwgJ1BhZ2luYXRpb24gbXVzdCBiZSBlbmFibGVkIGZvciBTY3JvbGxlcicgKTsKCQkJcmV0dXJuOwoJCX0KCgkJLyogSW5zZXJ0IGEgZGl2IGVsZW1lbnQgdGhhdCB3ZSBjYW4gdXNlIHRvIGZvcmNlIHRoZSBEVCBzY3JvbGxpbmcgY29udGFpbmVyIHRvCgkJICogdGhlIGhlaWdodCB0aGF0IHdvdWxkIGJlIHJlcXVpcmVkIGlmIHRoZSB3aG9sZSB0YWJsZSB3YXMgYmVpbmcgZGlzcGxheWVkCgkJICovCgkJdGhpcy5kb20uZm9yY2Uuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwoJCXRoaXMuZG9tLmZvcmNlLnN0eWxlLnRvcCA9ICIwcHgiOwoJCXRoaXMuZG9tLmZvcmNlLnN0eWxlLmxlZnQgPSAiMHB4IjsKCQl0aGlzLmRvbS5mb3JjZS5zdHlsZS53aWR0aCA9ICIxcHgiOwoKCQl0aGlzLmRvbS5zY3JvbGxlciA9ICQoJ2Rpdi4nK3RoaXMucy5kdC5vQ2xhc3Nlcy5zU2Nyb2xsQm9keSwgdGhpcy5zLmR0Lm5UYWJsZVdyYXBwZXIpWzBdOwoJCXRoaXMuZG9tLnNjcm9sbGVyLmFwcGVuZENoaWxkKCB0aGlzLmRvbS5mb3JjZSApOwoJCXRoaXMuZG9tLnNjcm9sbGVyLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKCgkJdGhpcy5kb20udGFibGUgPSAkKCc+dGFibGUnLCB0aGlzLmRvbS5zY3JvbGxlcilbMF07CgkJdGhpcy5kb20udGFibGUuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwoJCXRoaXMuZG9tLnRhYmxlLnN0eWxlLnRvcCA9ICIwcHgiOwoJCXRoaXMuZG9tLnRhYmxlLnN0eWxlLmxlZnQgPSAiMHB4IjsKCgkJLy8gQWRkIGNsYXNzIHRvICdhbm5vdW5jZScgdGhhdCB3ZSBhcmUgYSBTY3JvbGxlciB0YWJsZQoJCSQoZHQudGFibGUoKS5jb250YWluZXIoKSkuYWRkQ2xhc3MoJ2R0cyBEVFMnKTsKCgkJLy8gQWRkIGEgJ2xvYWRpbmcnIGluZGljYXRvcgoJCWlmICggdGhpcy5zLmxvYWRpbmdJbmRpY2F0b3IgKQoJCXsKCQkJdGhpcy5kb20ubG9hZGVyID0gJCgnPGRpdiBjbGFzcz0iZGF0YVRhYmxlc19wcm9jZXNzaW5nIGR0c19sb2FkaW5nIj4nK3RoaXMucy5kdC5vTGFuZ3VhZ2Uuc0xvYWRpbmdSZWNvcmRzKyc8L2Rpdj4nKQoJCQkJLmNzcygnZGlzcGxheScsICdub25lJyk7CgoJCQkkKHRoaXMuZG9tLnNjcm9sbGVyLnBhcmVudE5vZGUpCgkJCQkuY3NzKCdwb3NpdGlvbicsICdyZWxhdGl2ZScpCgkJCQkuYXBwZW5kKCB0aGlzLmRvbS5sb2FkZXIgKTsKCQl9CgoJCXRoaXMuZG9tLmxhYmVsLmFwcGVuZFRvKHRoaXMuZG9tLnNjcm9sbGVyKTsKCgkJLyogSW5pdGlhbCBzaXplIGNhbGN1bGF0aW9ucyAqLwoJCWlmICggdGhpcy5zLmhlaWdodHMucm93ICYmIHRoaXMucy5oZWlnaHRzLnJvdyAhPSAnYXV0bycgKQoJCXsKCQkJdGhpcy5zLmF1dG9IZWlnaHQgPSBmYWxzZTsKCQl9CgkJdGhpcy5tZWFzdXJlKCBmYWxzZSApOwoKCQkvLyBTY3JvbGxpbmcgY2FsbGJhY2sgdG8gc2VlIGlmIGEgcGFnZSBjaGFuZ2UgaXMgbmVlZGVkIC0gdXNlIGEgdGhyb3R0bGVkCgkJLy8gZnVuY3Rpb24gZm9yIHRoZSBzYXZlIHNhdmUgY2FsbGJhY2sgc28gd2UgYXJlbid0IGhpdHRpbmcgaXQgb24gZXZlcnkKCQkvLyBzY3JvbGwKCQl0aGlzLnMuaW5nbm9yZVNjcm9sbCA9IHRydWU7CgkJdGhpcy5zLnN0YXRlU2F2ZVRocm90dGxlID0gdGhpcy5zLmR0Lm9BcGkuX2ZuVGhyb3R0bGUoIGZ1bmN0aW9uICgpIHsKCQkJdGhhdC5zLmR0QXBpLnN0YXRlLnNhdmUoKTsKCQl9LCA1MDAgKTsKCQkkKHRoaXMuZG9tLnNjcm9sbGVyKS5vbiggJ3Njcm9sbC5kdC1zY3JvbGxlcicsIGZ1bmN0aW9uIChlKSB7CgkJCXRoYXQuX3Njcm9sbC5jYWxsKCB0aGF0ICk7CgkJfSApOwoKCQkvLyBJbiBpT1Mgd2UgY2F0Y2ggdGhlIHRvdWNoc3RhcnQgZXZlbnQgaW4gY2FzZSB0aGUgdXNlciB0cmllcyB0byBzY3JvbGwKCQkvLyB3aGlsZSB0aGUgZGlzcGxheSBpcyBhbHJlYWR5IHNjcm9sbGluZwoJCSQodGhpcy5kb20uc2Nyb2xsZXIpLm9uKCd0b3VjaHN0YXJ0LmR0LXNjcm9sbGVyJywgZnVuY3Rpb24gKCkgewoJCQl0aGF0Ll9zY3JvbGwuY2FsbCggdGhhdCApOwoJCX0gKTsKCgkJJCh0aGlzLmRvbS5zY3JvbGxlcikKCQkJLm9uKCdtb3VzZWRvd24uZHQtc2Nyb2xsZXInLCBmdW5jdGlvbiAoKSB7CgkJCQl0aGF0LnMubW91c2Vkb3duID0gdHJ1ZTsKCQkJfSkKCQkJLm9uKCdtb3VzZXVwLmR0LXNjcm9sbGVyJywgZnVuY3Rpb24gKCkgewoJCQkJdGhhdC5zLm1vdXNldXAgPSBmYWxzZTsKCQkJCXRoYXQuZG9tLmxhYmVsLmNzcygnZGlzcGxheScsICdub25lJyk7CgkJCX0pOwoKCQkvLyBPbiByZXNpemUsIHVwZGF0ZSB0aGUgaW5mb3JtYXRpb24gZWxlbWVudCwgc2luY2UgdGhlIG51bWJlciBvZiByb3dzIHNob3duIG1pZ2h0IGNoYW5nZQoJCSQod2luZG93KS5vbiggJ3Jlc2l6ZS5kdC1zY3JvbGxlcicsIGZ1bmN0aW9uICgpIHsKCQkJdGhhdC5tZWFzdXJlKCBmYWxzZSApOwoJCQl0aGF0Ll9pbmZvKCk7CgkJfSApOwoKCQkvLyBBZGQgYSBzdGF0ZSBzYXZpbmcgcGFyYW1ldGVyIHRvIHRoZSBEVCBzdGF0ZSBzYXZpbmcgc28gd2UgY2FuIHJlc3RvcmUgdGhlIGV4YWN0CgkJLy8gcG9zaXRpb24gb2YgdGhlIHNjcm9sbGluZy4gU2xpZ2h0bHkgc3VycHJpc2luZ2x5IHRoZSBzY3JvbGwgcG9zaXRpb24gaXNuJ3QgYWN0dWFsbHkKCQkvLyBzdG9yZWQsIGJ1dCByYXRoZXIgdGhhIGJhc2UgdW5pdHMgd2hpY2ggYXJlIG5lZWRlZCB0byBjYWxjdWxhdGUgaXQuIFRoaXMgYWxsb3dzIGZvcgoJCS8vIHZpcnR1YWwgc2Nyb2xsaW5nIGFzIHdlbGwuCgkJdmFyIGluaXRpYWxTdGF0ZVNhdmUgPSB0cnVlOwoJCXZhciBsb2FkZWRTdGF0ZSA9IGR0LnN0YXRlLmxvYWRlZCgpOwoKCQlkdC5vbiggJ3N0YXRlU2F2ZVBhcmFtcy5zY3JvbGxlcicsIGZ1bmN0aW9uICggZSwgc2V0dGluZ3MsIGRhdGEgKSB7CgkJCS8vIE5lZWQgdG8gdXNlZCB0aGUgc2F2ZWQgcG9zaXRpb24gb24gaW5pdAoJCQlkYXRhLnNjcm9sbGVyID0gewoJCQkJdG9wUm93OiBpbml0aWFsU3RhdGVTYXZlICYmIGxvYWRlZFN0YXRlICYmIGxvYWRlZFN0YXRlLnNjcm9sbGVyID8KCQkJCQlsb2FkZWRTdGF0ZS5zY3JvbGxlci50b3BSb3cgOgoJCQkJCXRoYXQucy50b3BSb3dGbG9hdCwKCQkJCWJhc2VTY3JvbGxUb3A6IHRoYXQucy5iYXNlU2Nyb2xsVG9wLAoJCQkJYmFzZVJvd1RvcDogdGhhdC5zLmJhc2VSb3dUb3AKCQkJfTsKCgkJCWluaXRpYWxTdGF0ZVNhdmUgPSBmYWxzZTsKCQl9ICk7CgoJCWlmICggbG9hZGVkU3RhdGUgJiYgbG9hZGVkU3RhdGUuc2Nyb2xsZXIgKSB7CgkJCXRoaXMucy50b3BSb3dGbG9hdCA9IGxvYWRlZFN0YXRlLnNjcm9sbGVyLnRvcFJvdzsKCQkJdGhpcy5zLmJhc2VTY3JvbGxUb3AgPSBsb2FkZWRTdGF0ZS5zY3JvbGxlci5iYXNlU2Nyb2xsVG9wOwoJCQl0aGlzLnMuYmFzZVJvd1RvcCA9IGxvYWRlZFN0YXRlLnNjcm9sbGVyLmJhc2VSb3dUb3A7CgkJfQoKCQlkdC5vbiggJ2luaXQuc2Nyb2xsZXInLCBmdW5jdGlvbiAoKSB7CgkJCXRoYXQubWVhc3VyZSggZmFsc2UgKTsKCgkJCS8vIFNldHRpbmcgdG8gYGp1bXBgIHdpbGwgaW5zdHJ1Y3QgX2RyYXcgdG8gY2FsY3VsYXRlIHRoZSBzY3JvbGwgdG9wCgkJCS8vIHBvc2l0aW9uCgkJCXRoYXQucy5zY3JvbGxUeXBlID0gJ2p1bXAnOwoJCQl0aGF0Ll9kcmF3KCk7CgoJCQkvLyBVcGRhdGUgdGhlIHNjcm9sbGVyIHdoZW4gdGhlIERhdGFUYWJsZSBpcyByZWRyYXduCgkJCWR0Lm9uKCAnZHJhdy5zY3JvbGxlcicsIGZ1bmN0aW9uICgpIHsKCQkJCXRoYXQuX2RyYXcoKTsKCQkJfSk7CgkJfSApOwoKCQkvLyBTZXQgaGVpZ2h0IGJlZm9yZSB0aGUgZHJhdyBoYXBwZW5zLCBhbGxvd2luZyBldmVyeXRoaW5nIGVsc2UgdG8gdXBkYXRlCgkJLy8gb24gZHJhdyBjb21wbGV0ZSB3aXRob3V0IHdvcnJ5IGZvciByb2Rlci4KCQlkdC5vbiggJ3ByZURyYXcuZHQuc2Nyb2xsZXInLCBmdW5jdGlvbiAoKSB7CgkJCXRoYXQuX3Njcm9sbEZvcmNlKCk7CgkJfSApOwoKCQkvLyBEZXN0cnVjdG9yCgkJZHQub24oICdkZXN0cm95LnNjcm9sbGVyJywgZnVuY3Rpb24gKCkgewoJCQkkKHdpbmRvdykub2ZmKCAncmVzaXplLmR0LXNjcm9sbGVyJyApOwoJCQkkKHRoYXQuZG9tLnNjcm9sbGVyKS5vZmYoJy5kdC1zY3JvbGxlcicpOwoJCQkkKHRoYXQucy5kdC5uVGFibGUpLm9mZiggJy5zY3JvbGxlcicgKTsKCgkJCSQodGhhdC5zLmR0Lm5UYWJsZVdyYXBwZXIpLnJlbW92ZUNsYXNzKCdEVFMnKTsKCQkJJCgnZGl2LkRUU19Mb2FkaW5nJywgdGhhdC5kb20uc2Nyb2xsZXIucGFyZW50Tm9kZSkucmVtb3ZlKCk7CgoJCQl0aGF0LmRvbS50YWJsZS5zdHlsZS5wb3NpdGlvbiA9ICIiOwoJCQl0aGF0LmRvbS50YWJsZS5zdHlsZS50b3AgPSAiIjsKCQkJdGhhdC5kb20udGFibGUuc3R5bGUubGVmdCA9ICIiOwoJCX0gKTsKCX0sCgoKCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKCSAqIFByaXZhdGUgbWV0aG9kcwoJICovCgoJLyoqCgkgKiBBdXRvbWF0aWMgY2FsY3VsYXRpb24gb2YgdGFibGUgcm93IGhlaWdodC4gVGhpcyBpcyBqdXN0IGEgbGl0dGxlIHRyaWNreSBoZXJlIGFzIHVzaW5nCgkgKiBpbml0aWFsaXNhdGlvbiBEYXRhVGFibGVzIGhhcyB0YWxlIHRoZSB0YWJsZSBvdXQgb2YgdGhlIGRvY3VtZW50LCBzbyB3ZSBuZWVkIHRvIGNyZWF0ZQoJICogYSBuZXcgdGFibGUgYW5kIGluc2VydCBpdCBpbnRvIHRoZSBkb2N1bWVudCwgY2FsY3VsYXRlIHRoZSByb3cgaGVpZ2h0IGFuZCB0aGVuIHdoaXAgdGhlCgkgKiB0YWJsZSBvdXQuCgkgKiAgQHJldHVybnMge3ZvaWR9CgkgKiAgQHByaXZhdGUKCSAqLwoJX2NhbGNSb3dIZWlnaHQ6IGZ1bmN0aW9uICgpCgl7CgkJdmFyIGR0ID0gdGhpcy5zLmR0OwoJCXZhciBvcmlnVGFibGUgPSBkdC5uVGFibGU7CgkJdmFyIG5UYWJsZSA9IG9yaWdUYWJsZS5jbG9uZU5vZGUoIGZhbHNlICk7CgkJdmFyIHRib2R5ID0gJCgnPHRib2R5Lz4nKS5hcHBlbmRUbyggblRhYmxlICk7CgkJdmFyIGNvbnRhaW5lciA9ICQoCgkJCSc8ZGl2IGNsYXNzPSInK2R0Lm9DbGFzc2VzLnNXcmFwcGVyKycgRFRTIj4nKwoJCQkJJzxkaXYgY2xhc3M9IicrZHQub0NsYXNzZXMuc1Njcm9sbFdyYXBwZXIrJyI+JysKCQkJCQknPGRpdiBjbGFzcz0iJytkdC5vQ2xhc3Nlcy5zU2Nyb2xsQm9keSsnIj48L2Rpdj4nKwoJCQkJJzwvZGl2PicrCgkJCSc8L2Rpdj4nCgkJKTsKCgkJLy8gV2FudCAzIHJvd3MgaW4gdGhlIHNpemluZyB0YWJsZSBzbyA6Zmlyc3QtY2hpbGQgYW5kIDpsYXN0LWNoaWxkCgkJLy8gQ1NTIHN0eWxlcyBkb24ndCBjb21lIGludG8gcGxheSAtIHRha2UgdGhlIHNpemUgb2YgdGhlIG1pZGRsZSByb3cKCQkkKCd0Ym9keSB0cjpsdCg0KScsIG9yaWdUYWJsZSkuY2xvbmUoKS5hcHBlbmRUbyggdGJvZHkgKTsKICAgICAgICB2YXIgcm93c0NvdW50ID0gJCgndHInLCB0Ym9keSkubGVuZ3RoOwoKICAgICAgICBpZiAoIHJvd3NDb3VudCA9PT0gMSApIHsKICAgICAgICAgICAgdGJvZHkucHJlcGVuZCgnPHRyPjx0ZD4mIzE2MDs8L3RkPjwvdHI+Jyk7CiAgICAgICAgICAgIHRib2R5LmFwcGVuZCgnPHRyPjx0ZD4mIzE2MDs8L3RkPjwvdHI+Jyk7CgkJfQoJCWVsc2UgewogICAgICAgICAgICBmb3IgKDsgcm93c0NvdW50IDwgMzsgcm93c0NvdW50KyspIHsKICAgICAgICAgICAgICAgIHRib2R5LmFwcGVuZCgnPHRyPjx0ZD4mIzE2MDs8L3RkPjwvdHI+Jyk7CiAgICAgICAgICAgIH0KCQl9CgkKCQkkKCdkaXYuJytkdC5vQ2xhc3Nlcy5zU2Nyb2xsQm9keSwgY29udGFpbmVyKS5hcHBlbmQoIG5UYWJsZSApOwoKCQkvLyBJZiBpbml0aWFsaXNlZCB1c2luZyBgZG9tYCwgdXNlIHRoZSBob2xkaW5nIGVsZW1lbnQgYXMgdGhlIGluc2VydCBwb2ludAoJCXZhciBpbnNlcnRFbCA9IHRoaXMucy5kdC5uSG9sZGluZyB8fCBvcmlnVGFibGUucGFyZW50Tm9kZTsKCgkJaWYgKCAhICQoaW5zZXJ0RWwpLmlzKCc6dmlzaWJsZScpICkgewoJCQlpbnNlcnRFbCA9ICdib2R5JzsKCQl9CgoJCWNvbnRhaW5lci5hcHBlbmRUbyggaW5zZXJ0RWwgKTsKCQl0aGlzLnMuaGVpZ2h0cy5yb3cgPSAkKCd0cicsIHRib2R5KS5lcSgxKS5vdXRlckhlaWdodCgpOwoKCQljb250YWluZXIucmVtb3ZlKCk7Cgl9LAoKCS8qKgoJICogRHJhdyBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCBpcyBmaXJlZCB3aGVuIHRoZSBEYXRhVGFibGUgaXMgcmVkcmF3bi4gVGhlIG1haW4gZnVuY3Rpb24gb2YKCSAqIHRoaXMgbWV0aG9kIGlzIHRvIHBvc2l0aW9uIHRoZSBkcmF3biB0YWJsZSBjb3JyZWN0bHkgdGhlIHNjcm9sbGluZyBjb250YWluZXIgZm9yIHRoZSByb3dzCgkgKiB0aGF0IGlzIGRpc3BsYXlzIGFzIGEgcmVzdWx0IG9mIHRoZSBzY3JvbGxpbmcgcG9zaXRpb24uCgkgKiAgQHJldHVybnMge3ZvaWR9CgkgKiAgQHByaXZhdGUKCSAqLwoJX2RyYXc6IGZ1bmN0aW9uICgpCgl7CgkJdmFyCgkJCXRoYXQgPSB0aGlzLAoJCQloZWlnaHRzID0gdGhpcy5zLmhlaWdodHMsCgkJCWlTY3JvbGxUb3AgPSB0aGlzLmRvbS5zY3JvbGxlci5zY3JvbGxUb3AsCgkJCWlUYWJsZUhlaWdodCA9ICQodGhpcy5zLmR0Lm5UYWJsZSkuaGVpZ2h0KCksCgkJCWRpc3BsYXlTdGFydCA9IHRoaXMucy5kdC5faURpc3BsYXlTdGFydCwKCQkJZGlzcGxheUxlbiA9IHRoaXMucy5kdC5faURpc3BsYXlMZW5ndGgsCgkJCWRpc3BsYXlFbmQgPSB0aGlzLnMuZHQuZm5SZWNvcmRzRGlzcGxheSgpOwoKCQkvLyBEaXNhYmxlIHRoZSBzY3JvbGwgZXZlbnQgbGlzdGVuZXIgd2hpbGUgd2UgYXJlIHVwZGF0aW5nIHRoZSBET00KCQl0aGlzLnMuc2tpcCA9IHRydWU7CgoJCS8vIElmIHBhZ2luZyBpcyByZXNldAoJCWlmICggKHRoaXMucy5kdC5iU29ydGVkIHx8IHRoaXMucy5kdC5iRmlsdGVyZWQpICYmIGRpc3BsYXlTdGFydCA9PT0gMCAmJiAhdGhpcy5zLmR0Ll9kcmF3SG9sZCApIHsKCQkJdGhpcy5zLnRvcFJvd0Zsb2F0ID0gMDsKCQl9CgoJCWlTY3JvbGxUb3AgPSB0aGlzLnMuc2Nyb2xsVHlwZSA9PT0gJ2p1bXAnID8KCQkJdGhpcy5fZG9tYWluKCAndmlydHVhbFRvUGh5c2ljYWwnLCB0aGlzLnMudG9wUm93RmxvYXQgKiBoZWlnaHRzLnJvdyApIDoKCQkJaVNjcm9sbFRvcDsKCgkJLy8gU3RvcmUgcG9zaXRpb25hbCBpbmZvcm1hdGlvbiBzbyBwb3NpdGlvbmFsIGNhbGN1bGF0aW9ucyBjYW4gYmUgYmFzZWQKCQkvLyB1cG9uIHRoZSBjdXJyZW50IHRhYmxlIGRyYXcgcG9zaXRpb24KCQl0aGlzLnMuYmFzZVNjcm9sbFRvcCA9IGlTY3JvbGxUb3A7CgkJdGhpcy5zLmJhc2VSb3dUb3AgPSB0aGlzLnMudG9wUm93RmxvYXQ7CgoJCS8vIFBvc2l0aW9uIHRoZSB0YWJsZSBpbiB0aGUgdmlydHVhbCBzY3JvbGxlcgoJCXZhciB0YWJsZVRvcCA9IGlTY3JvbGxUb3AgLSAoKHRoaXMucy50b3BSb3dGbG9hdCAtIGRpc3BsYXlTdGFydCkgKiBoZWlnaHRzLnJvdyk7CgkJaWYgKCBkaXNwbGF5U3RhcnQgPT09IDAgKSB7CgkJCXRhYmxlVG9wID0gMDsKCQl9CgkJZWxzZSBpZiAoIGRpc3BsYXlTdGFydCArIGRpc3BsYXlMZW4gPj0gZGlzcGxheUVuZCApIHsKCQkJdGFibGVUb3AgPSBoZWlnaHRzLnNjcm9sbCAtIGlUYWJsZUhlaWdodDsKCQl9CgoJCXRoaXMuZG9tLnRhYmxlLnN0eWxlLnRvcCA9IHRhYmxlVG9wKydweCc7CgoJCS8qIENhY2hlIHNvbWUgaW5mb3JtYXRpb24gZm9yIHRoZSBzY3JvbGxlciAqLwoJCXRoaXMucy50YWJsZVRvcCA9IHRhYmxlVG9wOwoJCXRoaXMucy50YWJsZUJvdHRvbSA9IGlUYWJsZUhlaWdodCArIHRoaXMucy50YWJsZVRvcDsKCgkJLy8gQ2FsY3VsYXRlIHRoZSBib3VuZGFyaWVzIGZvciB3aGVyZSBhIHJlZHJhdyB3aWxsIGJlIHRyaWdnZXJlZCBieSB0aGUKCQkvLyBzY3JvbGwgZXZlbnQgbGlzdGVuZXIKCQl2YXIgYm91bmRhcnlQeCA9IChpU2Nyb2xsVG9wIC0gdGhpcy5zLnRhYmxlVG9wKSAqIHRoaXMucy5ib3VuZGFyeVNjYWxlOwoJCXRoaXMucy5yZWRyYXdUb3AgPSBpU2Nyb2xsVG9wIC0gYm91bmRhcnlQeDsKCQl0aGlzLnMucmVkcmF3Qm90dG9tID0gaVNjcm9sbFRvcCArIGJvdW5kYXJ5UHggPiBoZWlnaHRzLnNjcm9sbCAtIGhlaWdodHMudmlld3BvcnQgLSBoZWlnaHRzLnJvdyA/CgkJCWhlaWdodHMuc2Nyb2xsIC0gaGVpZ2h0cy52aWV3cG9ydCAtIGhlaWdodHMucm93IDoKCQkJaVNjcm9sbFRvcCArIGJvdW5kYXJ5UHg7CgoJCXRoaXMucy5za2lwID0gZmFsc2U7CgoJCS8vIFJlc3RvcmUgdGhlIHNjcm9sbGluZyBwb3NpdGlvbiB0aGF0IHdhcyBzYXZlZCBieSBEYXRhVGFibGUncyBzdGF0ZQoJCS8vIHNhdmluZyBOb3RlIHRoYXQgdGhpcyBpcyBkb25lIG9uIHRoZSBzZWNvbmQgZHJhdyB3aGVuIGRhdGEgaXMgQWpheAoJCS8vIHNvdXJjZWQsIGFuZCB0aGUgZmlyc3QgZHJhdyB3aGVuIERPTSBzb3VyZWQKCQlpZiAoIHRoaXMucy5kdC5vRmVhdHVyZXMuYlN0YXRlU2F2ZSAmJiB0aGlzLnMuZHQub0xvYWRlZFN0YXRlICE9PSBudWxsICYmCgkJCSB0eXBlb2YgdGhpcy5zLmR0Lm9Mb2FkZWRTdGF0ZS5pU2Nyb2xsZXIgIT0gJ3VuZGVmaW5lZCcgKQoJCXsKCQkJLy8gQSBxdWlyayBvZiBEYXRhVGFibGVzIGlzIHRoYXQgdGhlIGRyYXcgY2FsbGJhY2sgd2lsbCBvY2N1ciBvbiBhbgoJCQkvLyBlbXB0eSBzZXQgaWYgQWpheCBzb3VyY2VkLCBidXQgbm90IGlmIHNlcnZlci1zaWRlIHByb2Nlc3NpbmcuCgkJCXZhciBhamF4U291cmNlZCA9ICh0aGlzLnMuZHQuc0FqYXhTb3VyY2UgfHwgdGhhdC5zLmR0LmFqYXgpICYmICEgdGhpcy5zLmR0Lm9GZWF0dXJlcy5iU2VydmVyU2lkZSA/CgkJCQl0cnVlIDoKCQkJCWZhbHNlOwoKCQkJaWYgKCAoIGFqYXhTb3VyY2VkICYmIHRoaXMucy5kdC5pRHJhdyA9PSAyKSB8fAoJCQkgICAgICghYWpheFNvdXJjZWQgJiYgdGhpcy5zLmR0LmlEcmF3ID09IDEpICkKCQkJewoJCQkJc2V0VGltZW91dCggZnVuY3Rpb24gKCkgewoJCQkJCSQodGhhdC5kb20uc2Nyb2xsZXIpLnNjcm9sbFRvcCggdGhhdC5zLmR0Lm9Mb2FkZWRTdGF0ZS5pU2Nyb2xsZXIgKTsKCQkJCQl0aGF0LnMucmVkcmF3VG9wID0gdGhhdC5zLmR0Lm9Mb2FkZWRTdGF0ZS5pU2Nyb2xsZXIgLSAoaGVpZ2h0cy52aWV3cG9ydC8yKTsKCgkJCQkJLy8gSW4gb3JkZXIgdG8gcHJldmVudCBsYXlvdXQgdGhyYXNoaW5nIHdlIG5lZWQgYW5vdGhlcgoJCQkJCS8vIHNtYWxsIGRlbGF5CgkJCQkJc2V0VGltZW91dCggZnVuY3Rpb24gKCkgewoJCQkJCQl0aGF0LnMuaW5nbm9yZVNjcm9sbCA9IGZhbHNlOwoJCQkJCX0sIDAgKTsKCQkJCX0sIDAgKTsKCQkJfQoJCX0KCQllbHNlIHsKCQkJdGhhdC5zLmluZ25vcmVTY3JvbGwgPSBmYWxzZTsKCQl9CgoJCS8vIEJlY2F1c2Ugb2YgdGhlIG9yZGVyIG9mIHRoZSBEVCBjYWxsYmFja3MsIHRoZSBpbmZvIHVwZGF0ZSB3aWxsCgkJLy8gdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlIG9uZSB3ZSB3YW50IGhlcmUuIFNvIGEgJ3RocmVhZCcgYnJlYWsgaXMKCQkvLyBuZWVkZWQuICBPbmx5IGFkZCB0aGUgdGhyZWFkIGJyZWFrIGlmIGJJbmZvIGlzIHNldAoJCWlmICggdGhpcy5zLmR0Lm9GZWF0dXJlcy5iSW5mbyApIHsKCQkJc2V0VGltZW91dCggZnVuY3Rpb24gKCkgewoJCQkJdGhhdC5faW5mby5jYWxsKCB0aGF0ICk7CgkJCX0sIDAgKTsKCQl9CgoJCS8vIEhpZGUgdGhlIGxvYWRpbmcgaW5kaWNhdG9yCgkJaWYgKCB0aGlzLmRvbS5sb2FkZXIgJiYgdGhpcy5zLmxvYWRlclZpc2libGUgKSB7CgkJCXRoaXMuZG9tLmxvYWRlci5jc3MoICdkaXNwbGF5JywgJ25vbmUnICk7CgkJCXRoaXMucy5sb2FkZXJWaXNpYmxlID0gZmFsc2U7CgkJfQoJfSwKCgkvKioKCSAqIENvbnZlcnQgZnJvbSBvbmUgZG9tYWluIHRvIGFub3RoZXIuIFRoZSBwaHlzaWNhbCBkb21haW4gaXMgdGhlIGFjdHVhbAoJICogcGl4ZWwgY291bnQgb24gdGhlIHNjcmVlbiwgd2hpbGUgdGhlIHZpcnR1YWwgaXMgaWYgd2UgaGFkIGJyb3dzZXJzIHdoaWNoCgkgKiBoYWQgc2Nyb2xsaW5nIGNvbnRhaW5lcnMgb2YgaW5maW5pdGUgaGVpZ2h0IChpLmUuIHRoZSBhYnNvbHV0ZSB2YWx1ZSkKCSAqCgkgKiAgQHBhcmFtIHtzdHJpbmd9IGRpciBEb21haW4gdHJhbnNmb3JtIGRpcmVjdGlvbiwgYHZpcnR1YWxUb1BoeXNpY2FsYCBvcgoJICogICAgYHBoeXNpY2FsVG9WaXJ0dWFsYCAKCSAqICBAcmV0dXJucyB7bnVtYmVyfSBDYWxjdWxhdGVkIHRyYW5zZm9ybQoJICogIEBwcml2YXRlCgkgKi8KCV9kb21haW46IGZ1bmN0aW9uICggZGlyLCB2YWwgKQoJewoJCXZhciBoZWlnaHRzID0gdGhpcy5zLmhlaWdodHM7CgkJdmFyIGRpZmY7CgkJdmFyIG1hZ2ljID0gMTAwMDA7IC8vIHRoZSBwb2ludCBhdCB3aGljaCB0aGUgbm9uLWxpbmVhciBjYWxjdWxhdGlvbnMgc3RhcnQgdG8gaGFwcGVuCgoJCS8vIElmIHRoZSB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBoZWlnaHQgbWF0Y2gsIHRoZW4gd2UgdXNlIGEgbGluZWFyCgkJLy8gdHJhbnNmb3JtIGJldHdlZW4gdGhlIHR3bywgYWxsb3dpbmcgdGhlIHNjcm9sbGJhciB0byBiZSBsaW5lYXIKCQlpZiAoIGhlaWdodHMudmlydHVhbCA9PT0gaGVpZ2h0cy5zY3JvbGwgKSB7CgkJCXJldHVybiB2YWw7CgkJfQoKCQkvLyBJbiB0aGUgZmlyc3QgMTBrIHBpeGVscyBhbmQgdGhlIGxhc3QgMTBrIHBpeGVscywgd2Ugd2FudCB0aGUgc2Nyb2xsaW5nCgkJLy8gdG8gYmUgbGluZWFyLiBBZnRlciB0aGF0IGl0IGNhbiBiZSBub24tbGluZWFyLiBJdCB3b3VsZCBiZSB1bnVzdWFsIGZvcgoJCS8vIGFueW9uZSB0byBtb3VzZSB3aGVlbCB0aHJvdWdoIHRoYXQgbXVjaC4KCQlpZiAoIHZhbCA8IG1hZ2ljICkgewoJCQlyZXR1cm4gdmFsOwoJCX0KCQllbHNlIGlmICggZGlyID09PSAndmlydHVhbFRvUGh5c2ljYWwnICYmIHZhbCA+PSBoZWlnaHRzLnZpcnR1YWwgLSBtYWdpYyApIHsKCQkJZGlmZiA9IGhlaWdodHMudmlydHVhbCAtIHZhbDsKCQkJcmV0dXJuIGhlaWdodHMuc2Nyb2xsIC0gZGlmZjsKCQl9CgkJZWxzZSBpZiAoIGRpciA9PT0gJ3BoeXNpY2FsVG9WaXJ0dWFsJyAmJiB2YWwgPj0gaGVpZ2h0cy5zY3JvbGwgLSBtYWdpYyApIHsKCQkJZGlmZiA9IGhlaWdodHMuc2Nyb2xsIC0gdmFsOwoJCQlyZXR1cm4gaGVpZ2h0cy52aXJ0dWFsIC0gZGlmZjsKCQl9CgoJCS8vIE90aGVyd2lzZSwgd2Ugd2FudCBhIG5vbi1saW5lYXIgc2Nyb2xsYmFyIHRvIHRha2UgYWNjb3VudCBvZiB0aGUKCQkvLyByZWRyYXdpbmcgcmVnaW9ucyBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgdGFibGUsIG90aGVyd2lzZSB0aGVzZQoJCS8vIGNhbiBzdHV0dGVyIGJhZGx5IC0gb24gbGFyZ2UgdGFibGVzIDMwcHggKGZvciBleGFtcGxlKSBzY3JvbGwgbWlnaHQKCQkvLyBiZSBodW5kcmVkcyBvZiByb3dzLCBzbyB0aGUgdGFibGUgd291bGQgYmUgcmVkcmF3aW5nIGV2ZXJ5IGZldyBweCBhdAoJCS8vIHRoZSBzdGFydCBhbmQgZW5kLiBVc2UgYSBzaW1wbGUgbGluZWFyIGVxLiB0byBzdG9wIHRoaXMsIGVmZmVjdGl2ZWx5CgkJLy8gY2F1c2luZyBhIGtpbmsgaW4gdGhlIHNjcm9sbGluZyByYXRpby4gSXQgZG9lcyBtZWFuIHRoZSBzY3JvbGxiYXIgaXMKCQkvLyBub24tbGluZWFyLCBidXQgd2l0aCBzdWNoIG1hc3NpdmUgZGF0YSBzZXRzLCB0aGUgc2Nyb2xsYmFyIGlzIGdvaW5nCgkJLy8gdG8gYmUgYSBiZXN0IGd1ZXNzIGFueXdheQoJCXZhciBtID0gKGhlaWdodHMudmlydHVhbCAtIG1hZ2ljIC0gbWFnaWMpIC8gKGhlaWdodHMuc2Nyb2xsIC0gbWFnaWMgLSBtYWdpYyk7CgkJdmFyIGMgPSBtYWdpYyAtIChtKm1hZ2ljKTsKCgkJcmV0dXJuIGRpciA9PT0gJ3ZpcnR1YWxUb1BoeXNpY2FsJyA/CgkJCSh2YWwtYykgLyBtIDoKCQkJKG0qdmFsKSArIGM7Cgl9LAoKCS8qKgoJICogVXBkYXRlIGFueSBpbmZvcm1hdGlvbiBlbGVtZW50cyB0aGF0IGFyZSBjb250cm9sbGVkIGJ5IHRoZSBEYXRhVGFibGUgYmFzZWQgb24gdGhlIHNjcm9sbGluZwoJICogdmlld3BvcnQgYW5kIHdoYXQgcm93cyBhcmUgdmlzaWJsZSBpbiBpdC4gVGhpcyBmdW5jdGlvbiBiYXNpY2FsbHkgYWN0cyBpbiB0aGUgc2FtZSB3YXkgYXMKCSAqIF9mblVwZGF0ZUluZm8gaW4gRGF0YVRhYmxlcywgYW5kIGVmZmVjdGl2ZWx5IHJlcGxhY2VzIHRoYXQgZnVuY3Rpb24uCgkgKiAgQHJldHVybnMge3ZvaWR9CgkgKiAgQHByaXZhdGUKCSAqLwoJX2luZm86IGZ1bmN0aW9uICgpCgl7CgkJaWYgKCAhdGhpcy5zLmR0Lm9GZWF0dXJlcy5iSW5mbyApCgkJewoJCQlyZXR1cm47CgkJfQoKCQl2YXIKCQkJZHQgPSB0aGlzLnMuZHQsCgkJCWxhbmd1YWdlID0gZHQub0xhbmd1YWdlLAoJCQlpU2Nyb2xsVG9wID0gdGhpcy5kb20uc2Nyb2xsZXIuc2Nyb2xsVG9wLAoJCQlpU3RhcnQgPSBNYXRoLmZsb29yKCB0aGlzLnBpeGVsc1RvUm93KGlTY3JvbGxUb3AsIGZhbHNlLCB0aGlzLnMuYW5pKSsxICksCgkJCWlNYXggPSBkdC5mblJlY29yZHNUb3RhbCgpLAoJCQlpVG90YWwgPSBkdC5mblJlY29yZHNEaXNwbGF5KCksCgkJCWlQb3NzaWJsZUVuZCA9IE1hdGguY2VpbCggdGhpcy5waXhlbHNUb1JvdyhpU2Nyb2xsVG9wK3RoaXMucy5oZWlnaHRzLnZpZXdwb3J0LCBmYWxzZSwgdGhpcy5zLmFuaSkgKSwKCQkJaUVuZCA9IGlUb3RhbCA8IGlQb3NzaWJsZUVuZCA/IGlUb3RhbCA6IGlQb3NzaWJsZUVuZCwKCQkJc1N0YXJ0ID0gZHQuZm5Gb3JtYXROdW1iZXIoIGlTdGFydCApLAoJCQlzRW5kID0gZHQuZm5Gb3JtYXROdW1iZXIoIGlFbmQgKSwKCQkJc01heCA9IGR0LmZuRm9ybWF0TnVtYmVyKCBpTWF4ICksCgkJCXNUb3RhbCA9IGR0LmZuRm9ybWF0TnVtYmVyKCBpVG90YWwgKSwKCQkJc091dDsKCgkJaWYgKCBkdC5mblJlY29yZHNEaXNwbGF5KCkgPT09IDAgJiYKCQkJICAgZHQuZm5SZWNvcmRzRGlzcGxheSgpID09IGR0LmZuUmVjb3Jkc1RvdGFsKCkgKQoJCXsKCQkJLyogRW1wdHkgcmVjb3JkIHNldCAqLwoJCQlzT3V0ID0gbGFuZ3VhZ2Uuc0luZm9FbXB0eSsgbGFuZ3VhZ2Uuc0luZm9Qb3N0Rml4OwoJCX0KCQllbHNlIGlmICggZHQuZm5SZWNvcmRzRGlzcGxheSgpID09PSAwICkKCQl7CgkJCS8qIEVtcHR5IHJlY29yZCBzZXQgYWZ0ZXIgZmlsdGVyaW5nICovCgkJCXNPdXQgPSBsYW5ndWFnZS5zSW5mb0VtcHR5ICsnICcrCgkJCQlsYW5ndWFnZS5zSW5mb0ZpbHRlcmVkLnJlcGxhY2UoJ19NQVhfJywgc01heCkrCgkJCQkJbGFuZ3VhZ2Uuc0luZm9Qb3N0Rml4OwoJCX0KCQllbHNlIGlmICggZHQuZm5SZWNvcmRzRGlzcGxheSgpID09IGR0LmZuUmVjb3Jkc1RvdGFsKCkgKQoJCXsKCQkJLyogTm9ybWFsIHJlY29yZCBzZXQgKi8KCQkJc091dCA9IGxhbmd1YWdlLnNJbmZvLgoJCQkJCXJlcGxhY2UoJ19TVEFSVF8nLCBzU3RhcnQpLgoJCQkJCXJlcGxhY2UoJ19FTkRfJywgICBzRW5kKS4KCQkJCQlyZXBsYWNlKCdfTUFYXycsICAgc01heCkuCgkJCQkJcmVwbGFjZSgnX1RPVEFMXycsIHNUb3RhbCkrCgkJCQlsYW5ndWFnZS5zSW5mb1Bvc3RGaXg7CgkJfQoJCWVsc2UKCQl7CgkJCS8qIFJlY29yZCBzZXQgYWZ0ZXIgZmlsdGVyaW5nICovCgkJCXNPdXQgPSBsYW5ndWFnZS5zSW5mby4KCQkJCQlyZXBsYWNlKCdfU1RBUlRfJywgc1N0YXJ0KS4KCQkJCQlyZXBsYWNlKCdfRU5EXycsICAgc0VuZCkuCgkJCQkJcmVwbGFjZSgnX01BWF8nLCAgIHNNYXgpLgoJCQkJCXJlcGxhY2UoJ19UT1RBTF8nLCBzVG90YWwpICsnICcrCgkJCQlsYW5ndWFnZS5zSW5mb0ZpbHRlcmVkLnJlcGxhY2UoCgkJCQkJJ19NQVhfJywKCQkJCQlkdC5mbkZvcm1hdE51bWJlcihkdC5mblJlY29yZHNUb3RhbCgpKQoJCQkJKSsKCQkJCWxhbmd1YWdlLnNJbmZvUG9zdEZpeDsKCQl9CgoJCXZhciBjYWxsYmFjayA9IGxhbmd1YWdlLmZuSW5mb0NhbGxiYWNrOwoJCWlmICggY2FsbGJhY2sgKSB7CgkJCXNPdXQgPSBjYWxsYmFjay5jYWxsKCBkdC5vSW5zdGFuY2UsCgkJCQlkdCwgaVN0YXJ0LCBpRW5kLCBpTWF4LCBpVG90YWwsIHNPdXQKCQkJKTsKCQl9CgoJCXZhciBuID0gZHQuYWFuRmVhdHVyZXMuaTsKCQlpZiAoIHR5cGVvZiBuICE9ICd1bmRlZmluZWQnICkKCQl7CgkJCWZvciAoIHZhciBpPTAsIGlMZW49bi5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQkkKG5baV0pLmh0bWwoIHNPdXQgKTsKCQkJfQoJCX0KCgkJLy8gRFQgZG9lc24ndCBhY3R1YWxseSAoeWV0KSB0cmlnZ2VyIHRoaXMgZXZlbnQsIGJ1dCBpdCB3aWxsIGluIGZ1dHVyZQoJCSQoZHQublRhYmxlKS50cmlnZ2VySGFuZGxlciggJ2luZm8uZHQnICk7Cgl9LAoKCS8qKgoJICogUGFyc2UgQ1NTIGhlaWdodCBwcm9wZXJ0eSBzdHJpbmcgYXMgbnVtYmVyCgkgKgoJICogQW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHBhcnNlIHRoZSBzdHJpbmcgYXMgYSBudW1iZXIuIEN1cnJlbnRseSBzdXBwb3J0ZWQgdW5pdHMgYXJlICdweCcsCgkgKiAndmgnLCBhbmQgJ3JlbScuICdlbScgaXMgcGFydGlhbGx5IHN1cHBvcnRlZDsgaXQgd29ya3MgYXMgbG9uZyBhcyB0aGUgcGFyZW50IGVsZW1lbnQncwoJICogZm9udCBzaXplIG1hdGNoZXMgdGhlIGJvZHkgZWxlbWVudC4gWmVybyBpcyByZXR1cm5lZCBmb3IgdW5yZWNvZ25pemVkIHN0cmluZ3MuCgkgKiAgQHBhcmFtIHtzdHJpbmd9IGNzc0hlaWdodCBDU1MgaGVpZ2h0IHByb3BlcnR5IHN0cmluZwoJICogIEByZXR1cm5zIHtudW1iZXJ9IGhlaWdodAoJICogIEBwcml2YXRlCgkgKi8KCV9wYXJzZUhlaWdodDogZnVuY3Rpb24oY3NzSGVpZ2h0KSB7CgkJdmFyIGhlaWdodDsKCQl2YXIgbWF0Y2hlcyA9IC9eKFsrLV0/KD86XGQrKD86XC5cZCspP3xcLlxkKykpKHB4fGVtfHJlbXx2aCkkLy5leGVjKGNzc0hlaWdodCk7CgoJCWlmIChtYXRjaGVzID09PSBudWxsKSB7CgkJCXJldHVybiAwOwoJCX0KCgkJdmFyIHZhbHVlID0gcGFyc2VGbG9hdChtYXRjaGVzWzFdKTsKCQl2YXIgdW5pdCA9IG1hdGNoZXNbMl07CgoJCWlmICggdW5pdCA9PT0gJ3B4JyApIHsKCQkJaGVpZ2h0ID0gdmFsdWU7CgkJfQoJCWVsc2UgaWYgKCB1bml0ID09PSAndmgnICkgewoJCQloZWlnaHQgPSAoIHZhbHVlIC8gMTAwICkgKiAkKHdpbmRvdykuaGVpZ2h0KCk7CgkJfQoJCWVsc2UgaWYgKCB1bml0ID09PSAncmVtJyApIHsKCQkJaGVpZ2h0ID0gdmFsdWUgKiBwYXJzZUZsb2F0KCQoJzpyb290JykuY3NzKCdmb250LXNpemUnKSk7CgkJfQoJCWVsc2UgaWYgKCB1bml0ID09PSAnZW0nICkgewoJCQloZWlnaHQgPSB2YWx1ZSAqIHBhcnNlRmxvYXQoJCgnYm9keScpLmNzcygnZm9udC1zaXplJykpOwoJCX0KCgkJcmV0dXJuIGhlaWdodCA/CgkJCWhlaWdodCA6CgkJCTA7Cgl9LAoKCS8qKgoJICogU2Nyb2xsaW5nIGZ1bmN0aW9uIC0gZmlyZWQgd2hlbmV2ZXIgdGhlIHNjcm9sbGluZyBwb3NpdGlvbiBpcyBjaGFuZ2VkLgoJICogVGhpcyBtZXRob2QgbmVlZHMgdG8gdXNlIHRoZSBzdG9yZWQgdmFsdWVzIHRvIHNlZSBpZiB0aGUgdGFibGUgc2hvdWxkIGJlCgkgKiByZWRyYXduIGFzIHdlIGFyZSBtb3ZpbmcgdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGlzCgkgKiBjdXJyZW50bHkgZHJhd24gb3Igbm90LiBJZiBuZWVkZWQsIHRoZW4gaXQgd2lsbCByZWRyYXcgdGhlIHRhYmxlIGJhc2VkIG9uCgkgKiB0aGUgbmV3IHBvc2l0aW9uLgoJICogIEByZXR1cm5zIHt2b2lkfQoJICogIEBwcml2YXRlCgkgKi8KCV9zY3JvbGw6IGZ1bmN0aW9uICgpCgl7CgkJdmFyCgkJCXRoYXQgPSB0aGlzLAoJCQloZWlnaHRzID0gdGhpcy5zLmhlaWdodHMsCgkJCWlTY3JvbGxUb3AgPSB0aGlzLmRvbS5zY3JvbGxlci5zY3JvbGxUb3AsCgkJCWlUb3BSb3c7CgoJCWlmICggdGhpcy5zLnNraXAgKSB7CgkJCXJldHVybjsKCQl9CgoJCWlmICggdGhpcy5zLmluZ25vcmVTY3JvbGwgKSB7CgkJCXJldHVybjsKCQl9CgoJCWlmICggaVNjcm9sbFRvcCA9PT0gdGhpcy5zLmxhc3RTY3JvbGxUb3AgKSB7CgkJCXJldHVybjsKCQl9CgoJCS8qIElmIHRoZSB0YWJsZSBoYXMgYmVlbiBzb3J0ZWQgb3IgZmlsdGVyZWQsIHRoZW4gd2UgdXNlIHRoZSByZWRyYXcgdGhhdAoJCSAqIERhdGFUYWJsZXMgYXMgZG9uZSwgcmF0aGVyIHRoYW4gcGVyZm9ybWluZyBvdXIgb3duCgkJICovCgkJaWYgKCB0aGlzLnMuZHQuYkZpbHRlcmVkIHx8IHRoaXMucy5kdC5iU29ydGVkICkgewoJCQl0aGlzLnMubGFzdFNjcm9sbFRvcCA9IDA7CgkJCXJldHVybjsKCQl9CgoJCS8qIFVwZGF0ZSB0aGUgdGFibGUncyBpbmZvcm1hdGlvbiBkaXNwbGF5IGZvciB3aGF0IGlzIG5vdyBpbiB0aGUgdmlld3BvcnQgKi8KCQl0aGlzLl9pbmZvKCk7CgoJCS8qIFdlIGRvbid0IHdhbnQgdG8gc3RhdGUgc2F2ZSBvbiBldmVyeSBzY3JvbGwgZXZlbnQgLSB0aGF0J3MgaGVhdnkKCQkgKiBoYW5kZWQsIHNvIHVzZSBhIHRpbWVvdXQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBzYXZpbmcgb25seSB3aGVuIHRoZQoJCSAqIHNjcm9sbGluZyBoYXMgZmluaXNoZWQKCQkgKi8KCQljbGVhclRpbWVvdXQoIHRoaXMucy5zdGF0ZVRPICk7CgkJdGhpcy5zLnN0YXRlVE8gPSBzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7CgkJCXRoYXQucy5kdEFwaS5zdGF0ZS5zYXZlKCk7CgkJfSwgMjUwICk7CgoJCXRoaXMucy5zY3JvbGxUeXBlID0gTWF0aC5hYnMoaVNjcm9sbFRvcCAtIHRoaXMucy5sYXN0U2Nyb2xsVG9wKSA+IGhlaWdodHMudmlld3BvcnQgPwoJCQknanVtcCcgOgoJCQknY29udCc7CgoJCXRoaXMucy50b3BSb3dGbG9hdCA9IHRoaXMucy5zY3JvbGxUeXBlID09PSAnY29udCcgPwoJCQl0aGlzLnBpeGVsc1RvUm93KCBpU2Nyb2xsVG9wLCBmYWxzZSwgZmFsc2UgKSA6CgkJCXRoaXMuX2RvbWFpbiggJ3BoeXNpY2FsVG9WaXJ0dWFsJywgaVNjcm9sbFRvcCApIC8gaGVpZ2h0cy5yb3c7CgoJCWlmICggdGhpcy5zLnRvcFJvd0Zsb2F0IDwgMCApIHsKCQkJdGhpcy5zLnRvcFJvd0Zsb2F0ID0gMDsKCQl9CgoJCS8qIENoZWNrIGlmIHRoZSBzY3JvbGwgcG9pbnQgaXMgb3V0c2lkZSB0aGUgdHJpZ2dlciBib3VuZGFyeSB3aGljaCB3b3VsZCByZXF1aXJlZAoJCSAqIGEgRGF0YVRhYmxlcyByZWRyYXcKCQkgKi8KCQlpZiAoIHRoaXMucy5mb3JjZVJlcG9zaXRpb24gfHwgaVNjcm9sbFRvcCA8IHRoaXMucy5yZWRyYXdUb3AgfHwgaVNjcm9sbFRvcCA+IHRoaXMucy5yZWRyYXdCb3R0b20gKSB7CgkJCXZhciBwcmVSb3dzID0gTWF0aC5jZWlsKCAoKHRoaXMucy5kaXNwbGF5QnVmZmVyLTEpLzIpICogdGhpcy5zLnZpZXdwb3J0Um93cyApOwoKCQkJaVRvcFJvdyA9IHBhcnNlSW50KHRoaXMucy50b3BSb3dGbG9hdCwgMTApIC0gcHJlUm93czsKCQkJdGhpcy5zLmZvcmNlUmVwb3NpdGlvbiA9IGZhbHNlOwoKCQkJaWYgKCBpVG9wUm93IDw9IDAgKSB7CgkJCQkvKiBBdCB0aGUgc3RhcnQgb2YgdGhlIHRhYmxlICovCgkJCQlpVG9wUm93ID0gMDsKCQkJfQoJCQllbHNlIGlmICggaVRvcFJvdyArIHRoaXMucy5kdC5faURpc3BsYXlMZW5ndGggPiB0aGlzLnMuZHQuZm5SZWNvcmRzRGlzcGxheSgpICkgewoJCQkJLyogQXQgdGhlIGVuZCBvZiB0aGUgdGFibGUgKi8KCQkJCWlUb3BSb3cgPSB0aGlzLnMuZHQuZm5SZWNvcmRzRGlzcGxheSgpIC0gdGhpcy5zLmR0Ll9pRGlzcGxheUxlbmd0aDsKCQkJCWlmICggaVRvcFJvdyA8IDAgKSB7CgkJCQkJaVRvcFJvdyA9IDA7CgkJCQl9CgkJCX0KCQkJZWxzZSBpZiAoIGlUb3BSb3cgJSAyICE9PSAwICkgewoJCQkJLy8gRm9yIHRoZSByb3ctc3RyaXBpbmcgY2xhc3NlcyAob2RkL2V2ZW4pIHdlIHdhbnQgb25seSB0byBzdGFydAoJCQkJLy8gb24gZXZlbnMgb3RoZXJ3aXNlIHRoZSBzdHJpcGVzIHdpbGwgY2hhbmdlIGJldHdlZW4gZHJhd3MgYW5kCgkJCQkvLyBsb29rIHJ1YmJpc2gKCQkJCWlUb3BSb3crKzsKCQkJfQoKCgkJCWlmICggaVRvcFJvdyAhPSB0aGlzLnMuZHQuX2lEaXNwbGF5U3RhcnQgKSB7CgkJCQkvKiBDYWNoZSB0aGUgbmV3IHRhYmxlIHBvc2l0aW9uIGZvciBxdWljayBsb29rdXBzICovCgkJCQl0aGlzLnMudGFibGVUb3AgPSAkKHRoaXMucy5kdC5uVGFibGUpLm9mZnNldCgpLnRvcDsKCQkJCXRoaXMucy50YWJsZUJvdHRvbSA9ICQodGhpcy5zLmR0Lm5UYWJsZSkuaGVpZ2h0KCkgKyB0aGlzLnMudGFibGVUb3A7CgoJCQkJdmFyIGRyYXcgPSAgZnVuY3Rpb24gKCkgewoJCQkJCWlmICggdGhhdC5zLnNjcm9sbERyYXdSZXEgPT09IG51bGwgKSB7CgkJCQkJCXRoYXQucy5zY3JvbGxEcmF3UmVxID0gaVNjcm9sbFRvcDsKCQkJCQl9CgoJCQkJCXRoYXQucy5kdC5faURpc3BsYXlTdGFydCA9IGlUb3BSb3c7CgkJCQkJdGhhdC5zLmR0Lm9BcGkuX2ZuRHJhdyggdGhhdC5zLmR0ICk7CgkJCQl9OwoKCQkJCS8qIERvIHRoZSBEYXRhVGFibGVzIHJlZHJhdyBiYXNlZCBvbiB0aGUgY2FsY3VsYXRlZCBzdGFydCBwb2ludCAtIG5vdGUgdGhhdCB3aGVuCgkJCQkgKiB1c2luZyBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nIHdlIGludHJvZHVjZSBhIHNtYWxsIGRlbGF5IHRvIG5vdCBEb1MgdGhlIHNlcnZlci4uLgoJCQkJICovCgkJCQlpZiAoIHRoaXMucy5kdC5vRmVhdHVyZXMuYlNlcnZlclNpZGUgKSB7CgkJCQkJY2xlYXJUaW1lb3V0KCB0aGlzLnMuZHJhd1RPICk7CgkJCQkJdGhpcy5zLmRyYXdUTyA9IHNldFRpbWVvdXQoIGRyYXcsIHRoaXMucy5zZXJ2ZXJXYWl0ICk7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlkcmF3KCk7CgkJCQl9CgoJCQkJaWYgKCB0aGlzLmRvbS5sb2FkZXIgJiYgISB0aGlzLnMubG9hZGVyVmlzaWJsZSApIHsKCQkJCQl0aGlzLmRvbS5sb2FkZXIuY3NzKCAnZGlzcGxheScsICdibG9jaycgKTsKCQkJCQl0aGlzLnMubG9hZGVyVmlzaWJsZSA9IHRydWU7CgkJCQl9CgkJCX0KCQl9CgkJZWxzZSB7CgkJCXRoaXMucy50b3BSb3dGbG9hdCA9IHRoaXMucGl4ZWxzVG9Sb3coIGlTY3JvbGxUb3AsIGZhbHNlLCB0cnVlICk7CgkJfQoKCQl0aGlzLnMubGFzdFNjcm9sbFRvcCA9IGlTY3JvbGxUb3A7CgkJdGhpcy5zLnN0YXRlU2F2ZVRocm90dGxlKCk7CgoJCWlmICggdGhpcy5zLnNjcm9sbFR5cGUgPT09ICdqdW1wJyAmJiB0aGlzLnMubW91c2Vkb3duICkgewoJCQl0aGlzLmRvbS5sYWJlbAoJCQkJLmh0bWwoIHRoaXMucy5kdC5mbkZvcm1hdE51bWJlciggcGFyc2VJbnQoIHRoaXMucy50b3BSb3dGbG9hdCwgMTAgKSsxICkgKQoJCQkJLmNzcyggJ3RvcCcsIGlTY3JvbGxUb3AgKyAoaVNjcm9sbFRvcCAqIGhlaWdodHMubGFiZWxGYWN0b3IgKSApCgkJCQkuY3NzKCAnZGlzcGxheScsICdibG9jaycgKTsKCQl9Cgl9LAoKCS8qKgoJICogRm9yY2UgdGhlIHNjcm9sbGluZyBjb250YWluZXIgdG8gaGF2ZSBoZWlnaHQgYmV5b25kIHRoYXQgb2YganVzdCB0aGUKCSAqIHRhYmxlIHRoYXQgaGFzIGJlZW4gZHJhd24gc28gdGhlIHVzZXIgY2FuIHNjcm9sbCB0aGUgd2hvbGUgZGF0YSBzZXQuCgkgKgoJICogTm90ZSB0aGF0IGlmIHRoZSBjYWxjdWxhdGVkIHJlcXVpcmVkIHNjcm9sbGluZyBoZWlnaHQgZXhjZWVkcyBhIG1heGltdW0KCSAqIHZhbHVlICgxIG1pbGxpb24gcGl4ZWxzIC0gaGFyZC1jb2RlZCkgdGhlIGZvcmNpbmcgZWxlbWVudCB3aWxsIGJlIHNldAoJICogb25seSB0byB0aGF0IG1heGltdW0gdmFsdWUgYW5kIHZpcnR1YWwgLyBwaHlzaWNhbCBkb21haW4gdHJhbnNmb3JtcyB3aWxsCgkgKiBiZSB1c2VkIHRvIGFsbG93IFNjcm9sbGVyIHRvIGRpc3BsYXkgdGFibGVzIG9mIGFueSBudW1iZXIgb2YgcmVjb3Jkcy4KCSAqICBAcmV0dXJucyB7dm9pZH0KCSAqICBAcHJpdmF0ZQoJICovCglfc2Nyb2xsRm9yY2U6IGZ1bmN0aW9uICgpCgl7CgkJdmFyIGhlaWdodHMgPSB0aGlzLnMuaGVpZ2h0czsKCQl2YXIgbWF4ID0gMTAwMDAwMDsKCgkJaGVpZ2h0cy52aXJ0dWFsID0gaGVpZ2h0cy5yb3cgKiB0aGlzLnMuZHQuZm5SZWNvcmRzRGlzcGxheSgpOwoJCWhlaWdodHMuc2Nyb2xsID0gaGVpZ2h0cy52aXJ0dWFsOwoKCQlpZiAoIGhlaWdodHMuc2Nyb2xsID4gbWF4ICkgewoJCQloZWlnaHRzLnNjcm9sbCA9IG1heDsKCQl9CgoJCS8vIE1pbmltdW0gaGVpZ2h0IHNvIHRoZXJlIGlzIGFsd2F5cyBhIHJvdyB2aXNpYmxlICh0aGUgJ25vIHJvd3MgZm91bmQnCgkJLy8gaWYgcmVkdWNlZCB0byB6ZXJvIGZpbHRlcmluZykKCQl0aGlzLmRvbS5mb3JjZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHRzLnNjcm9sbCA+IHRoaXMucy5oZWlnaHRzLnJvdyA/CgkJCWhlaWdodHMuc2Nyb2xsKydweCcgOgoJCQl0aGlzLnMuaGVpZ2h0cy5yb3crJ3B4JzsKCX0KfSApOwoKCgovKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKICogU3RhdGljcwogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICovCgoKLyoqCiAqIFNjcm9sbGVyIGRlZmF1bHQgc2V0dGluZ3MgZm9yIGluaXRpYWxpc2F0aW9uCiAqICBAbmFtZXNwYWNlCiAqICBAbmFtZSBTY3JvbGxlci5kZWZhdWx0cwogKiAgQHN0YXRpYwogKi8KU2Nyb2xsZXIuZGVmYXVsdHMgPSB7CgkvKioKCSAqIFNjcm9sbGVyIHVzZXMgdGhlIGJvdW5kYXJ5IHNjYWxpbmcgZmFjdG9yIHRvIGRlY2lkZSB3aGVuIHRvIHJlZHJhdyB0aGUgdGFibGUgLSB3aGljaCBpdAoJICogdHlwaWNhbGx5IGRvZXMgYmVmb3JlIHlvdSByZWFjaCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50bHkgbG9hZGVkIGRhdGEgc2V0IChpbiBvcmRlciB0bwoJICogYWxsb3cgdGhlIGRhdGEgdG8gbG9vayBjb250aW51b3VzIHRvIGEgdXNlciBzY3JvbGxpbmcgdGhyb3VnaCB0aGUgZGF0YSkuIElmIGdpdmVuIGFzIDAKCSAqIHRoZW4gdGhlIHRhYmxlIHdpbGwgYmUgcmVkcmF3biB3aGVuZXZlciB0aGUgdmlld3BvcnQgaXMgc2Nyb2xsZWQsIHdoaWxlIDEgd291bGQgbm90CgkgKiByZWRyYXcgdGhlIHRhYmxlIHVudGlsIHRoZSBjdXJyZW50bHkgbG9hZGVkIGRhdGEgaGFzIGFsbCBiZWVuIHNob3duLiBZb3Ugd2lsbCB3YW50CgkgKiBzb21ldGhpbmcgaW4gdGhlIG1pZGRsZSAtIHRoZSBkZWZhdWx0IGZhY3RvciBvZiAwLjUgaXMgdXN1YWxseSBzdWl0YWJsZS4KCSAqICBAdHlwZSAgICAgZmxvYXQKCSAqICBAZGVmYXVsdCAgMC41CgkgKiAgQHN0YXRpYwoJICovCglib3VuZGFyeVNjYWxlOiAwLjUsCgoJLyoqCgkgKiBUaGUgZGlzcGxheSBidWZmZXIgaXMgd2hhdCBTY3JvbGxlciB1c2VzIHRvIGNhbGN1bGF0ZSBob3cgbWFueSByb3dzIGl0IHNob3VsZCBwcmUtZmV0Y2gKCSAqIGZvciBzY3JvbGxpbmcuIFNjcm9sbGVyIGF1dG9tYXRpY2FsbHkgYWRqdXN0cyBEYXRhVGFibGVzJyBkaXNwbGF5IGxlbmd0aCB0byBwcmUtZmV0Y2gKCSAqIHJvd3MgdGhhdCB3aWxsIGJlIHNob3duIGluICJuZWFyIHNjcm9sbGluZyIgKGkuZS4ganVzdCBiZXlvbmQgdGhlIGN1cnJlbnQgZGlzcGxheSBhcmVhKS4KCSAqIFRoZSB2YWx1ZSBpcyBiYXNlZCB1cG9uIHRoZSBudW1iZXIgb2Ygcm93cyB0aGF0IGNhbiBiZSBkaXNwbGF5ZWQgaW4gdGhlIHZpZXdwb3J0IChpLmUuCgkgKiBhIHZhbHVlIG9mIDEpLCBhbmQgd2lsbCBhcHBseSB0aGUgZGlzcGxheSByYW5nZSB0byByZWNvcmRzIGJlZm9yZSBiZWZvcmUgYW5kIGFmdGVyIHRoZQoJICogY3VycmVudCB2aWV3cG9ydCAtIGkuZS4gYSBmYWN0b3Igb2YgMyB3aWxsIGFsbG93IFNjcm9sbGVyIHRvIHByZS1mZXRjaCAxIHZpZXdwb3J0J3Mgd29ydGgKCSAqIG9mIHJvd3MgYmVmb3JlIHRoZSBjdXJyZW50IHZpZXdwb3J0LCB0aGUgY3VycmVudCB2aWV3cG9ydCdzIHJvd3MgYW5kIDEgdmlld3BvcnQncyB3b3J0aAoJICogb2Ygcm93cyBhZnRlciB0aGUgY3VycmVudCB2aWV3cG9ydC4gQWRqdXN0aW5nIHRoaXMgdmFsdWUgY2FuIGJlIHVzZWZ1bCBmb3IgZW5zdXJpbmcKCSAqIHNtb290aCBzY3JvbGxpbmcgYmFzZWQgb24geW91ciBkYXRhIHNldC4KCSAqICBAdHlwZSAgICAgaW50CgkgKiAgQGRlZmF1bHQgIDcKCSAqICBAc3RhdGljCgkgKi8KCWRpc3BsYXlCdWZmZXI6IDksCgoJLyoqCgkgKiBTaG93IChvciBub3QpIHRoZSBsb2FkaW5nIGVsZW1lbnQgaW4gdGhlIGJhY2tncm91bmQgb2YgdGhlIHRhYmxlLiBOb3RlIHRoYXQgeW91IHNob3VsZAoJICogaW5jbHVkZSB0aGUgZGF0YVRhYmxlcy5zY3JvbGxlci5jc3MgZmlsZSBmb3IgdGhpcyB0byBiZSBkaXNwbGF5ZWQgY29ycmVjdGx5LgoJICogIEB0eXBlICAgICBib29sZWFuCgkgKiAgQGRlZmF1bHQgIGZhbHNlCgkgKiAgQHN0YXRpYwoJICovCglsb2FkaW5nSW5kaWNhdG9yOiBmYWxzZSwKCgkvKioKCSAqIFNjcm9sbGVyIHdpbGwgYXR0ZW1wdCB0byBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZSB0aGUgaGVpZ2h0IG9mIHJvd3MgZm9yIGl0J3MgaW50ZXJuYWwKCSAqIGNhbGN1bGF0aW9ucy4gSG93ZXZlciB0aGUgaGVpZ2h0IHRoYXQgaXMgdXNlZCBjYW4gYmUgb3ZlcnJpZGRlbiB1c2luZyB0aGlzIHBhcmFtZXRlci4KCSAqICBAdHlwZSAgICAgaW50fHN0cmluZwoJICogIEBkZWZhdWx0ICBhdXRvCgkgKiAgQHN0YXRpYwoJICovCglyb3dIZWlnaHQ6ICJhdXRvIiwKCgkvKioKCSAqIFdoZW4gdXNpbmcgc2VydmVyLXNpZGUgcHJvY2Vzc2luZywgU2Nyb2xsZXIgd2lsbCB3YWl0IGEgc21hbGwgYW1vdW50IG9mIHRpbWUgdG8gYWxsb3cKCSAqIHRoZSBzY3JvbGxpbmcgdG8gZmluaXNoIGJlZm9yZSByZXF1ZXN0aW5nIG1vcmUgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIuIFRoaXMgcHJldmVudHMKCSAqIHlvdSBmcm9tIERvU2luZyB5b3VyIG93biBzZXJ2ZXIhIFRoZSB3YWl0IHRpbWUgY2FuIGJlIGNvbmZpZ3VyZWQgYnkgdGhpcyBwYXJhbWV0ZXIuCgkgKiAgQHR5cGUgICAgIGludAoJICogIEBkZWZhdWx0ICAyMDAKCSAqICBAc3RhdGljCgkgKi8KCXNlcnZlcldhaXQ6IDIwMAp9OwoKU2Nyb2xsZXIub0RlZmF1bHRzID0gU2Nyb2xsZXIuZGVmYXVsdHM7CgoKCi8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgogKiBDb25zdGFudHMKICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLwoKLyoqCiAqIFNjcm9sbGVyIHZlcnNpb24KICogIEB0eXBlICAgICAgU3RyaW5nCiAqICBAZGVmYXVsdCAgIFNlZSBjb2RlCiAqICBAbmFtZSAgICAgIFNjcm9sbGVyLnZlcnNpb24KICogIEBzdGF0aWMKICovClNjcm9sbGVyLnZlcnNpb24gPSAiMi4wLjEiOwoKCgovKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKICogSW5pdGlhbGlzYXRpb24KICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqLwoKLy8gQXR0YWNoIGEgbGlzdGVuZXIgdG8gdGhlIGRvY3VtZW50IHdoaWNoIGxpc3RlbnMgZm9yIERhdGFUYWJsZXMgaW5pdGlhbGlzYXRpb24KLy8gZXZlbnRzIHNvIHdlIGNhbiBhdXRvbWF0aWNhbGx5IGluaXRpYWxpc2UKJChkb2N1bWVudCkub24oICdwcmVJbml0LmR0LmR0c2Nyb2xsZXInLCBmdW5jdGlvbiAoZSwgc2V0dGluZ3MpIHsKCWlmICggZS5uYW1lc3BhY2UgIT09ICdkdCcgKSB7CgkJcmV0dXJuOwoJfQoKCXZhciBpbml0ID0gc2V0dGluZ3Mub0luaXQuc2Nyb2xsZXI7Cgl2YXIgZGVmYXVsdHMgPSBEYXRhVGFibGUuZGVmYXVsdHMuc2Nyb2xsZXI7CgoJaWYgKCBpbml0IHx8IGRlZmF1bHRzICkgewoJCXZhciBvcHRzID0gJC5leHRlbmQoIHt9LCBpbml0LCBkZWZhdWx0cyApOwoKCQlpZiAoIGluaXQgIT09IGZhbHNlICkgewoJCQluZXcgU2Nyb2xsZXIoIHNldHRpbmdzLCBvcHRzICApOwoJCX0KCX0KfSApOwoKCi8vIEF0dGFjaCBTY3JvbGxlciB0byBEYXRhVGFibGVzIHNvIGl0IGNhbiBiZSBhY2Nlc3NlZCBhcyBhbiAnZXh0cmEnCiQuZm4uZGF0YVRhYmxlLlNjcm9sbGVyID0gU2Nyb2xsZXI7CiQuZm4uRGF0YVRhYmxlLlNjcm9sbGVyID0gU2Nyb2xsZXI7CgoKLy8gRGF0YVRhYmxlcyAxLjEwIEFQSSBtZXRob2QgYWxpYXNlcwp2YXIgQXBpID0gJC5mbi5kYXRhVGFibGUuQXBpOwoKQXBpLnJlZ2lzdGVyKCAnc2Nyb2xsZXIoKScsIGZ1bmN0aW9uICgpIHsKCXJldHVybiB0aGlzOwp9ICk7CgovLyBVbmRvY3VtZW50ZWQgYW5kIGRlcHJlY2F0ZWQgLSBpcyBpdCBhY3R1YWxseSB1c2VmdWwgYXQgYWxsPwpBcGkucmVnaXN0ZXIoICdzY3JvbGxlcigpLnJvd1RvUGl4ZWxzKCknLCBmdW5jdGlvbiAoIHJvd0lkeCwgaW50UGFyc2UsIHZpcnR1YWwgKSB7Cgl2YXIgY3R4ID0gdGhpcy5jb250ZXh0OwoKCWlmICggY3R4Lmxlbmd0aCAmJiBjdHhbMF0ub1Njcm9sbGVyICkgewoJCXJldHVybiBjdHhbMF0ub1Njcm9sbGVyLnJvd1RvUGl4ZWxzKCByb3dJZHgsIGludFBhcnNlLCB2aXJ0dWFsICk7Cgl9CgkvLyB1bmRlZmluZWQKfSApOwoKLy8gVW5kb2N1bWVudGVkIGFuZCBkZXByZWNhdGVkIC0gaXMgaXQgYWN0dWFsbHkgdXNlZnVsIGF0IGFsbD8KQXBpLnJlZ2lzdGVyKCAnc2Nyb2xsZXIoKS5waXhlbHNUb1JvdygpJywgZnVuY3Rpb24gKCBwaXhlbHMsIGludFBhcnNlLCB2aXJ0dWFsICkgewoJdmFyIGN0eCA9IHRoaXMuY29udGV4dDsKCglpZiAoIGN0eC5sZW5ndGggJiYgY3R4WzBdLm9TY3JvbGxlciApIHsKCQlyZXR1cm4gY3R4WzBdLm9TY3JvbGxlci5waXhlbHNUb1JvdyggcGl4ZWxzLCBpbnRQYXJzZSwgdmlydHVhbCApOwoJfQoJLy8gdW5kZWZpbmVkCn0gKTsKCi8vIGBzY3JvbGxlcigpLnNjcm9sbFRvUm93KClgIGlzIHVuZG9jdW1lbnRlZCBhbmQgZGVwcmVjYXRlZC4gVXNlIGBzY3JvbGxlci50b1Bvc2l0aW9uKCkKQXBpLnJlZ2lzdGVyKCBbJ3Njcm9sbGVyKCkuc2Nyb2xsVG9Sb3coKScsICdzY3JvbGxlci50b1Bvc2l0aW9uKCknXSwgZnVuY3Rpb24gKCBpZHgsIGFuaSApIHsKCXRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggY3R4ICkgewoJCWlmICggY3R4Lm9TY3JvbGxlciApIHsKCQkJY3R4Lm9TY3JvbGxlci5zY3JvbGxUb1JvdyggaWR4LCBhbmkgKTsKCQl9Cgl9ICk7CgoJcmV0dXJuIHRoaXM7Cn0gKTsKCkFwaS5yZWdpc3RlciggJ3JvdygpLnNjcm9sbFRvKCknLCBmdW5jdGlvbiAoIGFuaSApIHsKCXZhciB0aGF0ID0gdGhpczsKCgl0aGlzLml0ZXJhdG9yKCAncm93JywgZnVuY3Rpb24gKCBjdHgsIHJvd0lkeCApIHsKCQlpZiAoIGN0eC5vU2Nyb2xsZXIgKSB7CgkJCXZhciBkaXNwbGF5SWR4ID0gdGhhdAoJCQkJLnJvd3MoIHsgb3JkZXI6ICdhcHBsaWVkJywgc2VhcmNoOiAnYXBwbGllZCcgfSApCgkJCQkuaW5kZXhlcygpCgkJCQkuaW5kZXhPZiggcm93SWR4ICk7CgoJCQljdHgub1Njcm9sbGVyLnNjcm9sbFRvUm93KCBkaXNwbGF5SWR4LCBhbmkgKTsKCQl9Cgl9ICk7CgoJcmV0dXJuIHRoaXM7Cn0gKTsKCkFwaS5yZWdpc3RlciggJ3Njcm9sbGVyLm1lYXN1cmUoKScsIGZ1bmN0aW9uICggcmVkcmF3ICkgewoJdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBjdHggKSB7CgkJaWYgKCBjdHgub1Njcm9sbGVyICkgewoJCQljdHgub1Njcm9sbGVyLm1lYXN1cmUoIHJlZHJhdyApOwoJCX0KCX0gKTsKCglyZXR1cm4gdGhpczsKfSApOwoKQXBpLnJlZ2lzdGVyKCAnc2Nyb2xsZXIucGFnZSgpJywgZnVuY3Rpb24oKSB7Cgl2YXIgY3R4ID0gdGhpcy5jb250ZXh0OwoKCWlmICggY3R4Lmxlbmd0aCAmJiBjdHhbMF0ub1Njcm9sbGVyICkgewoJCXJldHVybiBjdHhbMF0ub1Njcm9sbGVyLnBhZ2VJbmZvKCk7Cgl9CgkvLyB1bmRlZmluZWQKfSApOwoKcmV0dXJuIFNjcm9sbGVyOwp9KSk7CgoKLyohIFNlYXJjaFBhbmVzIDEuMC4xCiAqIDIwMTktMjAyMCBTcHJ5TWVkaWEgTHRkIC0gZGF0YXRhYmxlcy5uZXQvbGljZW5zZQogKi8KKGZ1bmN0aW9uICgpIHsKICAgICd1c2Ugc3RyaWN0JzsKCiAgICB2YXIgRGF0YVRhYmxlID0gJC5mbi5kYXRhVGFibGU7CiAgICB2YXIgU2VhcmNoUGFuZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHsKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGVzIHRoZSBwYW5lcywgc2V0cyB1cCB0aGUgc2VhcmNoIGZ1bmN0aW9uCiAgICAgICAgICogQHBhcmFtIHBhbmVTZXR0aW5ncyBUaGUgc2V0dGluZ3MgZm9yIHRoZSBzZWFyY2hQYW5lcwogICAgICAgICAqIEBwYXJhbSBvcHRzIFRoZSBvcHRpb25zIGZvciB0aGUgZGVmYXVsdCBmZWF0dXJlcwogICAgICAgICAqIEBwYXJhbSBpZHggdGhlIGluZGV4IG9mIHRoZSBjb2x1bW4gZm9yIHRoaXMgcGFuZQogICAgICAgICAqIEByZXR1cm5zIHtvYmplY3R9IHRoZSBwYW5lIHRoYXQgaGFzIGJlZW4gY3JlYXRlZCwgaW5jbHVkaW5nIHRoZSB0YWJsZSBhbmQgdGhlIGluZGV4IG9mIHRoZSBwYW5lCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gU2VhcmNoUGFuZShwYW5lU2V0dGluZ3MsIG9wdHMsIGlkeCwgbGF5b3V0LCBwYW5lc0NvbnRhaW5lciwgcGFuZXMpIHsKICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICAgICAgaWYgKHBhbmVzID09PSB2b2lkIDApIHsgcGFuZXMgPSBudWxsOyB9CiAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHJlcXVpcmVkIHZlcnNpb24gb2YgRGF0YVRhYmxlcyBpcyBpbmNsdWRlZAogICAgICAgICAgICBpZiAoIURhdGFUYWJsZSB8fCAhRGF0YVRhYmxlLnZlcnNpb25DaGVjayB8fCAhRGF0YVRhYmxlLnZlcnNpb25DaGVjaygnMS4xMC4wJykpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2VhcmNoUGFuZSByZXF1aXJlcyBEYXRhVGFibGVzIDEuMTAgb3IgbmV3ZXInKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBDaGVjayB0aGF0IFNlbGVjdCBpcyBpbmNsdWRlZAogICAgICAgICAgICBpZiAoIURhdGFUYWJsZS5zZWxlY3QpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2VhcmNoUGFuZSByZXF1aXJlcyBTZWxlY3QnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgdGFibGUgPSBuZXcgRGF0YVRhYmxlLkFwaShwYW5lU2V0dGluZ3MpOwogICAgICAgICAgICB0aGlzLmNsYXNzZXMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgU2VhcmNoUGFuZS5jbGFzc2VzKTsKICAgICAgICAgICAgLy8gR2V0IG9wdGlvbnMgZnJvbSB1c2VyCiAgICAgICAgICAgIHRoaXMuYyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBTZWFyY2hQYW5lLmRlZmF1bHRzLCBvcHRzKTsKICAgICAgICAgICAgdGhpcy5jdXN0b21QYW5lU2V0dGluZ3MgPSBwYW5lczsKICAgICAgICAgICAgdGhpcy5zID0gewogICAgICAgICAgICAgICAgY2FzY2FkZVJlZ2VuOiBmYWxzZSwKICAgICAgICAgICAgICAgIGNsZWFyaW5nOiBmYWxzZSwKICAgICAgICAgICAgICAgIGNvbE9wdHM6IFtdLAogICAgICAgICAgICAgICAgZGVzZWxlY3Q6IGZhbHNlLAogICAgICAgICAgICAgICAgZGlzcGxheWVkOiBmYWxzZSwKICAgICAgICAgICAgICAgIGR0OiB0YWJsZSwKICAgICAgICAgICAgICAgIGR0UGFuZTogdW5kZWZpbmVkLAogICAgICAgICAgICAgICAgZmlsdGVyaW5nQWN0aXZlOiBmYWxzZSwKICAgICAgICAgICAgICAgIGluZGV4OiBpZHgsCiAgICAgICAgICAgICAgICBpbmRleGVzOiBbXSwKICAgICAgICAgICAgICAgIGxhc3RTZWxlY3Q6IGZhbHNlLAogICAgICAgICAgICAgICAgcmVkcmF3OiBmYWxzZSwKICAgICAgICAgICAgICAgIHJvd0RhdGE6IHsKICAgICAgICAgICAgICAgICAgICBhcnJheUZpbHRlcjogW10sCiAgICAgICAgICAgICAgICAgICAgYXJyYXlPcmlnaW5hbDogW10sCiAgICAgICAgICAgICAgICAgICAgYXJyYXlUb3RhbHM6IFtdLAogICAgICAgICAgICAgICAgICAgIGJpbnM6IHt9LAogICAgICAgICAgICAgICAgICAgIGJpbnNPcmlnaW5hbDoge30sCiAgICAgICAgICAgICAgICAgICAgYmluc1RvdGFsOiB7fSwKICAgICAgICAgICAgICAgICAgICBmaWx0ZXJNYXA6IG5ldyBNYXAoKQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHNlYXJjaEZ1bmN0aW9uOiB1bmRlZmluZWQsCiAgICAgICAgICAgICAgICBzZWxlY3RQcmVzZW50OiBmYWxzZSwKICAgICAgICAgICAgICAgIHVwZGF0aW5nOiBmYWxzZQogICAgICAgICAgICB9OwogICAgICAgICAgICB2YXIgcm93TGVuZ3RoID0gdGFibGUuY29sdW1ucygpLmVxKDApLnRvQXJyYXkoKS5sZW5ndGg7CiAgICAgICAgICAgIHRoaXMuY29sRXhpc3RzID0gdGhpcy5zLmluZGV4IDwgcm93TGVuZ3RoOwogICAgICAgICAgICAvLyBBZGQgZXh0cmEgZWxlbWVudHMgdG8gRE9NIG9iamVjdCBpbmNsdWRpbmcgY2xlYXIgYW5kIGhpZGUgYnV0dG9ucwogICAgICAgICAgICB0aGlzLmMubGF5b3V0ID0gbGF5b3V0OwogICAgICAgICAgICB2YXIgbGF5VmFsID0gcGFyc2VJbnQobGF5b3V0LnNwbGl0KCctJylbMV0sIDEwKTsKICAgICAgICAgICAgdGhpcy5kb20gPSB7CiAgICAgICAgICAgICAgICBidXR0b25Hcm91cDogJCgnPGRpdi8+JykuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLmJ1dHRvbkdyb3VwKSwKICAgICAgICAgICAgICAgIGNsZWFyOiAkKCc8YnV0dG9uIHR5cGU9ImJ1dHRvbiI+JiMyMTU7PC9idXR0b24+JykKICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLmR1bGwpCiAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5wYW5lQnV0dG9uKQogICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuY2xlYXJCdXR0b24pLAogICAgICAgICAgICAgICAgY29udGFpbmVyOiAkKCc8ZGl2Lz4nKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuY29udGFpbmVyKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMubGF5b3V0ICsKICAgICAgICAgICAgICAgICAgICAobGF5VmFsIDwgNyA/IGxheW91dCA6IGxheW91dC5zcGxpdCgnLScpWzBdICsgJy02JykpLAogICAgICAgICAgICAgICAgY291bnRCdXR0b246ICQoJzxidXR0b24gdHlwZT0iYnV0dG9uIj48L2J1dHRvbj4nKQogICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcyh0aGlzLmNsYXNzZXMucGFuZUJ1dHRvbikKICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLmNvdW50QnV0dG9uKSwKICAgICAgICAgICAgICAgIGR0UDogJCgnPHRhYmxlPjx0aGVhZD48dHI+PHRoPicgKwogICAgICAgICAgICAgICAgICAgICh0aGlzLmNvbEV4aXN0cwogICAgICAgICAgICAgICAgICAgICAgICA/ICQodGFibGUuY29sdW1uKHRoaXMuY29sRXhpc3RzID8gdGhpcy5zLmluZGV4IDogMCkuaGVhZGVyKCkpLnRleHQoKQogICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuY3VzdG9tUGFuZVNldHRpbmdzLmhlYWRlciB8fCAnQ3VzdG9tIFBhbmUnKSArICc8L3RoPjx0aC8+PC90cj48L3RoZWFkPjwvdGFibGU+JyksCiAgICAgICAgICAgICAgICBsb3dlcjogJCgnPGRpdi8+JykuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLnN1YlJvdzIpLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5uYXJyb3dCdXR0b24pLAogICAgICAgICAgICAgICAgbmFtZUJ1dHRvbjogJCgnPGJ1dHRvbiB0eXBlPSJidXR0b24iPjwvYnV0dG9uPicpLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5wYW5lQnV0dG9uKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMubmFtZUJ1dHRvbiksCiAgICAgICAgICAgICAgICBzZWFyY2hCb3g6ICQoJzxpbnB1dC8+JykuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLnBhbmVJbnB1dEJ1dHRvbikuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLnNlYXJjaCksCiAgICAgICAgICAgICAgICBzZWFyY2hCdXR0b246ICQoJzxidXR0b24gdHlwZSA9ICJidXR0b24iIGNsYXNzPSInICsgdGhpcy5jbGFzc2VzLnNlYXJjaEljb24gKyAnIj48L2J1dHRvbj4nKQogICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcyh0aGlzLmNsYXNzZXMucGFuZUJ1dHRvbiksCiAgICAgICAgICAgICAgICBzZWFyY2hDb250OiAkKCc8ZGl2Lz4nKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuc2VhcmNoQ29udCksCiAgICAgICAgICAgICAgICBzZWFyY2hMYWJlbENvbnQ6ICQoJzxkaXYvPicpLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5zZWFyY2hMYWJlbENvbnQpLAogICAgICAgICAgICAgICAgdG9wUm93OiAkKCc8ZGl2Lz4nKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMudG9wUm93KSwKICAgICAgICAgICAgICAgIHVwcGVyOiAkKCc8ZGl2Lz4nKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuc3ViUm93MSkuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLm5hcnJvd1NlYXJjaCkKICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5zLmRpc3BsYXllZCA9IGZhbHNlOwogICAgICAgICAgICB0YWJsZSA9IHRoaXMucy5kdDsKICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25zID0gW107CiAgICAgICAgICAgIHRoaXMucy5jb2xPcHRzID0gdGhpcy5jb2xFeGlzdHMgPyB0aGlzLl9nZXRPcHRpb25zKCkgOiB0aGlzLl9nZXRCb251c09wdGlvbnMoKTsKICAgICAgICAgICAgdmFyIGNvbE9wdHMgPSB0aGlzLnMuY29sT3B0czsKICAgICAgICAgICAgdmFyIGNsZWFyID0gJCgnPGJ1dHRvbiB0eXBlPSJidXR0b24iPlg8L2J1dHRvbj4nKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMucGFuZUJ1dHRvbik7CiAgICAgICAgICAgICQoY2xlYXIpLnRleHQodGFibGUuaTE4bignc2VhcmNoUGFuZXMuY2xlYXJQYW5lJywgJ1gnKSk7CiAgICAgICAgICAgIHRoaXMuZG9tLmNvbnRhaW5lci5hZGRDbGFzcyhjb2xPcHRzLmNsYXNzTmFtZSk7CiAgICAgICAgICAgIHRoaXMuZG9tLmNvbnRhaW5lci5hZGRDbGFzcygodGhpcy5jdXN0b21QYW5lU2V0dGluZ3MgIT09IG51bGwgJiYgdGhpcy5jdXN0b21QYW5lU2V0dGluZ3MuY2xhc3NOYW1lICE9PSB1bmRlZmluZWQpCiAgICAgICAgICAgICAgICA/IHRoaXMuY3VzdG9tUGFuZVNldHRpbmdzLmNsYXNzTmFtZQogICAgICAgICAgICAgICAgOiAnJyk7CiAgICAgICAgICAgICQocGFuZXNDb250YWluZXIpLmFwcGVuZCh0aGlzLmRvbS5jb250YWluZXIpOwogICAgICAgICAgICB2YXIgdGFibGVOb2RlID0gdGFibGUudGFibGUoMCkubm9kZSgpOwogICAgICAgICAgICAvLyBDdXN0b20gc2VhcmNoIGZ1bmN0aW9uIGZvciB0YWJsZQogICAgICAgICAgICB0aGlzLnMuc2VhcmNoRnVuY3Rpb24gPSBmdW5jdGlvbiAoc2V0dGluZ3MsIHNlYXJjaERhdGEsIGRhdGFJbmRleCwgb3JpZ0RhdGEpIHsKICAgICAgICAgICAgICAgIC8vIElmIG5vIGRhdGEgaGFzIGJlZW4gc2VsZWN0ZWQgdGhlbiBzaG93IGFsbAogICAgICAgICAgICAgICAgaWYgKF90aGlzLnNlbGVjdGlvbnMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3MublRhYmxlICE9PSB0YWJsZU5vZGUpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBmaWx0ZXIgPSAnJzsKICAgICAgICAgICAgICAgIGlmIChfdGhpcy5jb2xFeGlzdHMpIHsKICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgZmlsdGVyZWQgZGF0YQogICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IHNlYXJjaERhdGFbX3RoaXMucy5pbmRleF07CiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbE9wdHMub3J0aG9nb25hbC5maWx0ZXIgIT09ICdmaWx0ZXInKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgZmlsdGVyIHZhbHVlIGZyb20gdGhlIG1hcAogICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBfdGhpcy5zLnJvd0RhdGEuZmlsdGVyTWFwLmdldChkYXRhSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyIGluc3RhbmNlb2YgJC5mbi5kYXRhVGFibGUuQXBpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBmaWx0ZXIudG9BcnJheSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9zZWFyY2goZmlsdGVyLCBkYXRhSW5kZXgpOwogICAgICAgICAgICB9OwogICAgICAgICAgICAkLmZuLmRhdGFUYWJsZS5leHQuc2VhcmNoLnB1c2godGhpcy5zLnNlYXJjaEZ1bmN0aW9uKTsKICAgICAgICAgICAgLy8gSWYgdGhlIGNsZWFyIGJ1dHRvbiBmb3IgdGhpcyBwYW5lIGlzIGNsaWNrZWQgY2xlYXIgdGhlIHNlbGVjdGlvbnMKICAgICAgICAgICAgaWYgKHRoaXMuYy5jbGVhcikgewogICAgICAgICAgICAgICAgJChjbGVhcikub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2hlcyA9IF90aGlzLmRvbS5jb250YWluZXIuZmluZChfdGhpcy5jbGFzc2VzLnNlYXJjaCk7CiAgICAgICAgICAgICAgICAgICAgc2VhcmNoZXMuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykudmFsKCcnKTsKICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS50cmlnZ2VyKCdpbnB1dCcpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIF90aGlzLmNsZWFyUGFuZSgpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gU29tZXRpbWVzIHRoZSB0b3Agcm93IG9mIHRoZSBwYW5lcyBjb250YWluaW5nIHRoZSBzZWFyY2ggYm94IGFuZCBvcmRlcmluZyBidXR0b25zIGFwcGVhcnMKICAgICAgICAgICAgLy8gIHdlaXJkIGlmIHRoZSB3aWR0aCBvZiB0aGUgcGFuZXMgaXMgbG93ZXIgdGhhbiBleHBlY3RlZCwgdGhpcyBmaXhlcyB0aGUgZGVzaWduLgogICAgICAgICAgICAvLyBFcXVhbGx5IHRoaXMgbWF5IG9jY3VyIHdoZW4gdGhlIHRhYmxlIGlzIHJlc2l6ZWQuCiAgICAgICAgICAgIHRhYmxlLm9uKCdkcmF3LmR0c3AnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBfdGhpcy5fYWRqdXN0VG9wUm93KCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAkKHdpbmRvdykub24oJ3Jlc2l6ZS5kdHNwJywgRGF0YVRhYmxlLnV0aWwudGhyb3R0bGUoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgX3RoaXMuX2FkanVzdFRvcFJvdygpOwogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIC8vIFdoZW4gY29sdW1uLXJlb3JkZXIgaXMgcHJlc2VudCBhbmQgdGhlIGNvbHVtbnMgYXJlIG1vdmVkLCBpdCBpcyBuZWNlc3NhcnkgdG8KICAgICAgICAgICAgLy8gIHJlYXNzaWduIGFsbCBvZiB0aGUgcGFuZXMgaW5kZXhlcyB0byB0aGUgbmV3IGluZGV4IG9mIHRoZSBjb2x1bW4uCiAgICAgICAgICAgIHRhYmxlLm9uKCdjb2x1bW4tcmVvcmRlci5kdHNwJywgZnVuY3Rpb24gKGUsIHNldHRpbmdzLCBkZXRhaWxzKSB7CiAgICAgICAgICAgICAgICBfdGhpcy5zLmluZGV4ID0gZGV0YWlscy5tYXBwaW5nW190aGlzLnMuaW5kZXhdOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEluIHRoZSBjYXNlIG9mIGEgcmVidWlsZCB0aGVyZSBpcyBwb3RlbnRpYWwgZm9yIG5ldyBkYXRhIHRvIGhhdmUgYmVlbiBpbmNsdWRlZCBvciByZW1vdmVkCiAgICAgICAgICogc28gYWxsIG9mIHRoZSByb3dEYXRhIG11c3QgYmUgcmVzZXQgYXMgYSBwcmVjYXV0aW9uLgogICAgICAgICAqLwogICAgICAgIFNlYXJjaFBhbmUucHJvdG90eXBlLmNsZWFyRGF0YSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5zLnJvd0RhdGEgPSB7CiAgICAgICAgICAgICAgICBhcnJheUZpbHRlcjogW10sCiAgICAgICAgICAgICAgICBhcnJheU9yaWdpbmFsOiBbXSwKICAgICAgICAgICAgICAgIGFycmF5VG90YWxzOiBbXSwKICAgICAgICAgICAgICAgIGJpbnM6IHt9LAogICAgICAgICAgICAgICAgYmluc09yaWdpbmFsOiB7fSwKICAgICAgICAgICAgICAgIGJpbnNUb3RhbDoge30sCiAgICAgICAgICAgICAgICBmaWx0ZXJNYXA6IG5ldyBNYXAoKQogICAgICAgICAgICB9OwogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogQ2xlYXIgdGhlIHNlbGVjdGlvbnMgaW4gdGhlIHBhbmUKICAgICAgICAgKi8KICAgICAgICBTZWFyY2hQYW5lLnByb3RvdHlwZS5jbGVhclBhbmUgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIC8vIERlc2VsZWN0IGFsbCByb3dzIHdoaWNoIGFyZSBzZWxlY3RlZCBhbmQgdXBkYXRlIHRoZSB0YWJsZSBhbmQgZmlsdGVyIGNvdW50LgogICAgICAgICAgICB0aGlzLnMuZHRQYW5lLnJvd3MoeyBzZWxlY3RlZDogdHJ1ZSB9KS5kZXNlbGVjdCgpOwogICAgICAgICAgICB0aGlzLnVwZGF0ZVRhYmxlKCk7CiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogU3RyaXBzIGFsbCBvZiB0aGUgU2VhcmNoUGFuZXMgZWxlbWVudHMgZnJvbSB0aGUgZG9jdW1lbnQgYW5kIHR1cm5zIGFsbCBvZiB0aGUgbGlzdGVuZXJzIGZvciB0aGUgYnV0dG9ucyBvZmYKICAgICAgICAgKi8KICAgICAgICBTZWFyY2hQYW5lLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAkKHRoaXMucy5kdFBhbmUpLm9mZignLmR0c3AnKTsKICAgICAgICAgICAgJCh0aGlzLnMuZHQpLm9mZignLmR0c3AnKTsKICAgICAgICAgICAgJCh0aGlzLmRvbS5uYW1lQnV0dG9uKS5vZmYoJy5kdHNwJyk7CiAgICAgICAgICAgICQodGhpcy5kb20uY291bnRCdXR0b24pLm9mZignLmR0c3AnKTsKICAgICAgICAgICAgJCh0aGlzLmRvbS5jbGVhcikub2ZmKCcuZHRzcCcpOwogICAgICAgICAgICAkKHRoaXMuZG9tLnNlYXJjaEJ1dHRvbikub2ZmKCcuZHRzcCcpOwogICAgICAgICAgICAkKHRoaXMuZG9tLmNvbnRhaW5lcikucmVtb3ZlKCk7CiAgICAgICAgICAgIHZhciBzZWFyY2hJZHggPSAkLmZuLmRhdGFUYWJsZS5leHQuc2VhcmNoLmluZGV4T2YodGhpcy5zLnNlYXJjaEZ1bmN0aW9uKTsKICAgICAgICAgICAgd2hpbGUgKHNlYXJjaElkeCAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICQuZm4uZGF0YVRhYmxlLmV4dC5zZWFyY2guc3BsaWNlKHNlYXJjaElkeCwgMSk7CiAgICAgICAgICAgICAgICBzZWFyY2hJZHggPSAkLmZuLmRhdGFUYWJsZS5leHQuc2VhcmNoLmluZGV4T2YodGhpcy5zLnNlYXJjaEZ1bmN0aW9uKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBJZiB0aGUgZGF0YXRhYmxlcyBoYXZlIGJlZW4gZGVmaW5lZCBmb3IgdGhlIHBhbmVzIHRoZW4gYWxzbyBkZXN0cm95IHRoZXNlCiAgICAgICAgICAgIGlmICh0aGlzLnMuZHRQYW5lICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIHRoaXMucy5kdFBhbmUuZGVzdHJveSgpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICAvKioKICAgICAgICAgKiBVcGRhdGVzIHRoZSBudW1iZXIgb2YgZmlsdGVycyB0aGF0IGhhdmUgYmVlbiBhcHBsaWVkIGluIHRoZSB0aXRsZQogICAgICAgICAqLwogICAgICAgIFNlYXJjaFBhbmUucHJvdG90eXBlLmdldFBhbmVDb3VudCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMucy5kdFBhbmUgIT09IHVuZGVmaW5lZCA/CiAgICAgICAgICAgICAgICB0aGlzLnMuZHRQYW5lLnJvd3MoeyBzZWxlY3RlZDogdHJ1ZSB9KS5kYXRhKCkudG9BcnJheSgpLmxlbmd0aCA6CiAgICAgICAgICAgICAgICAwOwogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogUmVidWlsZHMgdGhlIHBhbmVzIGZyb20gdGhlIHN0YXJ0IGhhdmluZyBkZWxldGVkIHRoZSBvbGQgb25lcwogICAgICAgICAqLwogICAgICAgIFNlYXJjaFBhbmUucHJvdG90eXBlLnJlYnVpbGRQYW5lID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aGlzLmNsZWFyRGF0YSgpOwogICAgICAgICAgICAvLyBXaGVuIHJlYnVpbGRpbmcgc3RyaXAgYWxsIG9mIHRoZSBIVE1MIEVsZW1lbnRzIG91dCBvZiB0aGUgY29udGFpbmVyIGFuZCBzdGFydCBmcm9tIHNjcmF0Y2gKICAgICAgICAgICAgaWYgKHRoaXMucy5kdFBhbmUgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgdGhpcy5zLmR0UGFuZS5jbGVhcigpLmRlc3Ryb3koKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmRvbS5jb250YWluZXIucmVtb3ZlQ2xhc3ModGhpcy5jbGFzc2VzLmhpZGRlbik7CiAgICAgICAgICAgIHRoaXMucy5kaXNwbGF5ZWQgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy5fYnVpbGRQYW5lKCk7CiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogcmVtb3ZlcyB0aGUgcGFuZSBmcm9tIHRoZSBwYWdlIGFuZCBzZXRzIHRoZSBkaXNwbGF5ZWQgcHJvcGVydHkgdG8gZmFsc2UuCiAgICAgICAgICovCiAgICAgICAgU2VhcmNoUGFuZS5wcm90b3R5cGUucmVtb3ZlUGFuZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5zLmRpc3BsYXllZCA9IGZhbHNlOwogICAgICAgICAgICAkKHRoaXMuZG9tLmNvbnRhaW5lcikuaGlkZSgpOwogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogU2V0cyB0aGUgY2FzY2FkZVJlZ2VuIHByb3BlcnR5IG9mIHRoZSBwYW5lLiBBY2Nlc3NpYmxlIGZyb20gYWJvdmUgYmVjYXVzZSBhcyBTZWFyY2hQYW5lcy50cyBkZWFscyB3aXRoIHRoZSByZWJ1aWxkcy4KICAgICAgICAgKiBAcGFyYW0gdmFsIHRoZSBib29sZWFuIHZhbHVlIHRoYXQgdGhlIGNhc2NhZGVSZWdlbiBwcm9wZXJ0eSBpcyB0byBiZSBzZXQgdG8KICAgICAgICAgKi8KICAgICAgICBTZWFyY2hQYW5lLnByb3RvdHlwZS5zZXRDYXNjYWRlUmVnZW4gPSBmdW5jdGlvbiAodmFsKSB7CiAgICAgICAgICAgIHRoaXMucy5jYXNjYWRlUmVnZW4gPSB2YWw7CiAgICAgICAgfTsKICAgICAgICAvKioKICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0aGUgY2xlYXJpbmcgcHJvcGVydHkgdG8gYmUgYXNzaWduZWQuIFRoaXMgaXMgdXNlZCB3aGVuIGltcGxlbWVudGluZyBjYXNjYWRlUGFuZS4KICAgICAgICAgKiBJbiBzZXR0aW5nIHRoaXMgdG8gdHJ1ZSBmb3IgdGhlIGNsZWFyaW5nIG9mIHRoZSBwYW5lcyBzZWxlY3Rpb24gb24gdGhlIGRlc2VsZWN0cyBpdCBmb3JjZXMgdGhlIHBhbmUgdG8KICAgICAgICAgKiByZXBvcHVsYXRlIGZyb20gdGhlIGVudGlyZSBkYXRhc2V0IG5vdCBqdXN0IHRoZSBkaXNwbGF5ZWQgdmFsdWVzLgogICAgICAgICAqIEBwYXJhbSB2YWwgdGhlIGJvb2xlYW4gdmFsdWUgd2hpY2ggdGhlIGNsZWFyaW5nIHByb3BlcnR5IGlzIHRvIGJlIGFzc2lnbmVkCiAgICAgICAgICovCiAgICAgICAgU2VhcmNoUGFuZS5wcm90b3R5cGUuc2V0Q2xlYXIgPSBmdW5jdGlvbiAodmFsKSB7CiAgICAgICAgICAgIHRoaXMucy5jbGVhcmluZyA9IHZhbDsKICAgICAgICB9OwogICAgICAgIC8qKgogICAgICAgICAqIFVwZGF0ZXMgdGhlIHZhbHVlcyBvZiBhbGwgb2YgdGhlIHBhbmVzCiAgICAgICAgICogQHBhcmFtIGRyYXcgd2hldGhlciB0aGlzIGhhcyBiZWVuIHRyaWdnZXJlZCBieSBhIGRyYXcgZXZlbnQgb3Igbm90CiAgICAgICAgICovCiAgICAgICAgU2VhcmNoUGFuZS5wcm90b3R5cGUudXBkYXRlUGFuZSA9IGZ1bmN0aW9uIChkcmF3KSB7CiAgICAgICAgICAgIGlmIChkcmF3ID09PSB2b2lkIDApIHsgZHJhdyA9IGZhbHNlOyB9CiAgICAgICAgICAgIHRoaXMucy51cGRhdGluZyA9IHRydWU7CiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUNvbW1vbihkcmF3KTsKICAgICAgICAgICAgdGhpcy5zLnVwZGF0aW5nID0gZmFsc2U7CiAgICAgICAgfTsKICAgICAgICAvKioKICAgICAgICAgKiBVcGRhdGVzIHRoZSBwYW5lcyBpZiBvbmUgb2YgdGhlIG9wdGlvbnMgdG8gZG8gc28gaGFzIGJlZW4gc2V0IHRvIHRydWUKICAgICAgICAgKiAgIHJhdGhlciB0aGFuIHRoZSBmaWx0ZXJlZCBtZXNzYWdlIHdoZW4gdXNpbmcgdmlld1RvdGFsLgogICAgICAgICAqLwogICAgICAgIFNlYXJjaFBhbmUucHJvdG90eXBlLnVwZGF0ZVRhYmxlID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgc2VsZWN0ZWRSb3dzID0gdGhpcy5zLmR0UGFuZS5yb3dzKHsgc2VsZWN0ZWQ6IHRydWUgfSkuZGF0YSgpLnRvQXJyYXkoKTsKICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25zID0gc2VsZWN0ZWRSb3dzOwogICAgICAgICAgICB0aGlzLl9zZWFyY2hFeHRyYXMoKTsKICAgICAgICAgICAgLy8gSWYgZWl0aGVyIG9mIHRoZSBvcHRpb25zIHRoYXQgZWZmZWN0IGhvdyB0aGUgcGFuZXMgYXJlIGRpc3BsYXllZCBhcmUgc2VsZWN0ZWQgdGhlbiB1cGRhdGUgdGhlIFBhbmVzCiAgICAgICAgICAgIGlmICh0aGlzLmMuY2FzY2FkZVBhbmVzIHx8IHRoaXMuYy52aWV3VG90YWwpIHsKICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUGFuZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICAvKioKICAgICAgICAgKiBUYWtlcyBpbiBwb3RlbnRpYWxseSB1bmRldGVjdGVkIHJvd3MgYW5kIGFkZHMgdGhlbSB0byB0aGUgYXJyYXkgaWYgdGhleSBhcmUgbm90IHlldCBmZWF0dXJlZAogICAgICAgICAqIEBwYXJhbSBmaWx0ZXIgdGhlIGZpbHRlciB2YWx1ZSBvZiB0aGUgcG90ZW50aWFsIHJvdwogICAgICAgICAqIEBwYXJhbSBkaXNwbGF5IHRoZSBkaXNwbGF5IHZhbHVlIG9mIHRoZSBwb3RlbnRpYWwgcm93CiAgICAgICAgICogQHBhcmFtIHNvcnQgdGhlIHNvcnQgdmFsdWUgb2YgdGhlIHBvdGVudGlhbCByb3cKICAgICAgICAgKiBAcGFyYW0gdHlwZSB0aGUgdHlwZSB2YWx1ZSBvZiB0aGUgcG90ZW50aWFsIHJvdwogICAgICAgICAqIEBwYXJhbSBhcnJheUZpbHRlciB0aGUgYXJyYXkgdG8gYmUgcG9wdWxhdGVkCiAgICAgICAgICogQHBhcmFtIGJpbnMgdGhlIGJpbnMgdG8gYmUgcG9wdWxhdGVkCiAgICAgICAgICovCiAgICAgICAgU2VhcmNoUGFuZS5wcm90b3R5cGUuX2FkZE9wdGlvbiA9IGZ1bmN0aW9uIChmaWx0ZXIsIGRpc3BsYXksIHNvcnQsIHR5cGUsIGFycmF5RmlsdGVyLCBiaW5zKSB7CiAgICAgICAgICAgIC8vIElmIHRoZSBmaWx0ZXIgaXMgYW4gYXJyYXkgdGhlbiB0YWtlIGEgbm90ZSBvZiB0aGlzLCBhbmQgYWRkIHRoZSBlbGVtZW50cyB0byB0aGUgYXJyYXlGaWx0ZXIgYXJyYXkKICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyKSB8fCBmaWx0ZXIgaW5zdGFuY2VvZiBEYXRhVGFibGUuQXBpKSB7CiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRvIGFuIGFycmF5IHNvIHRoYXQgd2UgY2FuIHdvcmsgd2l0aCBpdAogICAgICAgICAgICAgICAgaWYgKGZpbHRlciBpbnN0YW5jZW9mIERhdGFUYWJsZS5BcGkpIHsKICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBmaWx0ZXIudG9BcnJheSgpOwogICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBkaXNwbGF5LnRvQXJyYXkoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIubGVuZ3RoID09PSBkaXNwbGF5Lmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsdGVyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmVuJ3Qgc2VlbiB0aGlzIHJvdyBiZWZvcmUgYWRkIGl0CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmluc1tmaWx0ZXJbaV1dKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5zW2ZpbHRlcltpXV0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlGaWx0ZXIucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZGlzcGxheVtpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcltpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0OiBzb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBqdXN0IGluY3JlbWVudCB0aGUgY291bnQKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5zW2ZpbHRlcltpXV0rKzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Rpc3BsYXkgYW5kIGZpbHRlciBub3QgdGhlIHNhbWUgbGVuZ3RoJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gSWYgdGhlIHZhbHVlcyB3ZXJlIGFmZmVjdGVkIGJ5IG90aG9nb25hbCBkYXRhIGFuZCBhcmUgbm90IGFuIGFycmF5IHRoZW4gY2hlY2sgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50CiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB0aGlzLnMuY29sT3B0cy5vcnRob2dvbmFsID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgaWYgKCFiaW5zW2ZpbHRlcl0pIHsKICAgICAgICAgICAgICAgICAgICBiaW5zW2ZpbHRlcl0gPSAxOwogICAgICAgICAgICAgICAgICAgIGFycmF5RmlsdGVyLnB1c2goewogICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBkaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGZpbHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgc29ydDogc29ydCwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYmluc1tmaWx0ZXJdKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIE90aGVyd2lzZSB3ZSBtdXN0IGp1c3QgYmUgYWRkaW5nIGFuIG9wdGlvbgogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGFycmF5RmlsdGVyLnB1c2goewogICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGRpc3BsYXksCiAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgc29ydDogc29ydCwKICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogQWRkcyBhIHJvdyB0byB0aGUgcGFuZXMgdGFibGUKICAgICAgICAgKiBAcGFyYW0gZGlzcGxheSB0aGUgdmFsdWUgdG8gYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyCiAgICAgICAgICogQHBhcmFtIGZpbHRlciB0aGUgdmFsdWUgdG8gYmUgZmlsdGVyZWQgb24gd2hlbiBzZWFyY2hwYW5lcyBpcyBpbXBsZW1lbnRlZAogICAgICAgICAqIEBwYXJhbSBzaG93biB0aGUgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIHRhYmxlIHRoYXQgYXJlIGN1cnJlbnRseSB2aXNpYmxlIG1hdGNoaW5nIHRoaXMgY3JpdGVyaWEKICAgICAgICAgKiBAcGFyYW0gdG90YWwgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIGluIHRoZSB0YWJsZSB0aGF0IG1hdGNoIHRoaXMgY3JpdGVyaWEKICAgICAgICAgKiBAcGFyYW0gc29ydCB0aGUgdmFsdWUgdG8gYmUgc29ydGVkIGluIHRoZSBwYW5lIHRhYmxlCiAgICAgICAgICogQHBhcmFtIHR5cGUgdGhlIHZhbHVlIG9mIHdoaWNoIHRoZSB0eXBlIGlzIHRvIGJlIGRlcml2ZWQgZnJvbQogICAgICAgICAqLwogICAgICAgIFNlYXJjaFBhbmUucHJvdG90eXBlLl9hZGRSb3cgPSBmdW5jdGlvbiAoZGlzcGxheSwgZmlsdGVyLCBzaG93biwgdG90YWwsIHNvcnQsIHR5cGUpIHsKICAgICAgICAgICAgdmFyIGluZGV4OwogICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5zLmluZGV4ZXM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBfYVtfaV07CiAgICAgICAgICAgICAgICBpZiAoZW50cnkuZmlsdGVyID09PSBmaWx0ZXIpIHsKICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGVudHJ5LmluZGV4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICBpbmRleCA9IHRoaXMucy5pbmRleGVzLmxlbmd0aDsKICAgICAgICAgICAgICAgIHRoaXMucy5pbmRleGVzLnB1c2goeyBmaWx0ZXI6IGZpbHRlciwgaW5kZXg6IGluZGV4IH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0aGlzLnMuZHRQYW5lLnJvdy5hZGQoewogICAgICAgICAgICAgICAgZGlzcGxheTogZGlzcGxheSAhPT0gJycgPyBkaXNwbGF5IDogdGhpcy5jLmVtcHR5TWVzc2FnZSwKICAgICAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyLAogICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LAogICAgICAgICAgICAgICAgc2hvd246IHNob3duLAogICAgICAgICAgICAgICAgc29ydDogc29ydCAhPT0gJycgPyBzb3J0IDogdGhpcy5jLmVtcHR5TWVzc2FnZSwKICAgICAgICAgICAgICAgIHRvdGFsOiB0b3RhbCwKICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUKICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKICAgICAgICAvKioKICAgICAgICAgKiBBZGp1c3RzIHRoZSBsYXlvdXQgb2YgdGhlIHRvcCByb3cgd2hlbiB0aGUgc2NyZWVuIGlzIHJlc2l6ZWQKICAgICAgICAgKi8KICAgICAgICBTZWFyY2hQYW5lLnByb3RvdHlwZS5fYWRqdXN0VG9wUm93ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgc3ViQ29udGFpbmVycyA9IHRoaXMuZG9tLmNvbnRhaW5lci5maW5kKCcuJyArIHRoaXMuY2xhc3Nlcy5zdWJSb3dzQ29udGFpbmVyKTsKICAgICAgICAgICAgdmFyIHN1YlJvdzEgPSB0aGlzLmRvbS5jb250YWluZXIuZmluZCgnLmR0c3Atc3ViUm93MScpOwogICAgICAgICAgICB2YXIgc3ViUm93MiA9IHRoaXMuZG9tLmNvbnRhaW5lci5maW5kKCcuZHRzcC1zdWJSb3cyJyk7CiAgICAgICAgICAgIHZhciB0b3BSb3cgPSB0aGlzLmRvbS5jb250YWluZXIuZmluZCgnLicgKyB0aGlzLmNsYXNzZXMudG9wUm93KTsKICAgICAgICAgICAgLy8gSWYgdGhlIHdpZHRoIGlzIDAgdGhlbiBpdCBpcyBzYWZlIHRvIGFzc3VtZSB0aGF0IHRoZSBwYW5lIGhhcyBub3QgeWV0IGJlZW4gZGlzcGxheWVkLgogICAgICAgICAgICAvLyAgRXZlbiBpZiBpdCBoYXMsIGlmIHRoZSB3aWR0aCBpcyAwIGl0IHdvbid0IG1ha2UgYSBkaWZmZXJlbmNlIGlmIGl0IGhhcyB0aGUgbmFycm93IGNsYXNzIG9yIG5vdAogICAgICAgICAgICBpZiAoKCQoc3ViQ29udGFpbmVyc1swXSkud2lkdGgoKSA8IDI1MiB8fCAkKHRvcFJvd1swXSkud2lkdGgoKSA8IDI1MikgJiYgJChzdWJDb250YWluZXJzWzBdKS53aWR0aCgpICE9PSAwKSB7CiAgICAgICAgICAgICAgICAkKHN1YkNvbnRhaW5lcnNbMF0pLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5uYXJyb3cpOwogICAgICAgICAgICAgICAgJChzdWJSb3cxWzBdKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMubmFycm93U3ViKS5yZW1vdmVDbGFzcyh0aGlzLmNsYXNzZXMubmFycm93U2VhcmNoKTsKICAgICAgICAgICAgICAgICQoc3ViUm93MlswXSkuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLm5hcnJvd1N1YikucmVtb3ZlQ2xhc3ModGhpcy5jbGFzc2VzLm5hcnJvd0J1dHRvbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkKHN1YkNvbnRhaW5lcnNbMF0pLnJlbW92ZUNsYXNzKHRoaXMuY2xhc3Nlcy5uYXJyb3cpOwogICAgICAgICAgICAgICAgJChzdWJSb3cxWzBdKS5yZW1vdmVDbGFzcyh0aGlzLmNsYXNzZXMubmFycm93U3ViKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMubmFycm93U2VhcmNoKTsKICAgICAgICAgICAgICAgICQoc3ViUm93MlswXSkucmVtb3ZlQ2xhc3ModGhpcy5jbGFzc2VzLm5hcnJvd1N1YikuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLm5hcnJvd0J1dHRvbik7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIC8qKgogICAgICAgICAqIE1ldGhvZCB0byBjb25zdHJ1Y3QgdGhlIGFjdHVhbCBwYW5lLgogICAgICAgICAqLwogICAgICAgIFNlYXJjaFBhbmUucHJvdG90eXBlLl9idWlsZFBhbmUgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgICAgICAgIC8vIEFsaWFzZXMKICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25zID0gW107CiAgICAgICAgICAgIHZhciB0YWJsZSA9IHRoaXMucy5kdDsKICAgICAgICAgICAgdmFyIGNvbHVtbiA9IHRhYmxlLmNvbHVtbih0aGlzLmNvbEV4aXN0cyA/IHRoaXMucy5pbmRleCA6IDApOwogICAgICAgICAgICB2YXIgY29sT3B0cyA9IHRoaXMucy5jb2xPcHRzOwogICAgICAgICAgICB2YXIgcm93RGF0YSA9IHRoaXMucy5yb3dEYXRhOwogICAgICAgICAgICAvLyBPdGhlciBWYXJpYWJsZXMKICAgICAgICAgICAgdmFyIGNvdW50TWVzc2FnZSA9IHRhYmxlLmkxOG4oJ3NlYXJjaFBhbmVzLmNvdW50JywgJ3t0b3RhbH0nKTsKICAgICAgICAgICAgdmFyIGZpbHRlcmVkTWVzc2FnZSA9IHRhYmxlLmkxOG4oJ3NlYXJjaFBhbmVzLmNvdW50RmlsdGVyZWQnLCAne3Nob3dufSAoe3RvdGFsfSknKTsKICAgICAgICAgICAgdmFyIGxvYWRlZEZpbHRlciA9IHRhYmxlLnN0YXRlLmxvYWRlZCgpOwogICAgICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBjdXN0b20gcGFuZSBpbiBwbGFjZQogICAgICAgICAgICBpZiAodGhpcy5jb2xFeGlzdHMpIHsKICAgICAgICAgICAgICAgIHZhciBpZHggPSAtMTsKICAgICAgICAgICAgICAgIGlmIChsb2FkZWRGaWx0ZXIgJiYgbG9hZGVkRmlsdGVyLnNlYXJjaFBhbmVzICYmIGxvYWRlZEZpbHRlci5zZWFyY2hQYW5lcy5wYW5lcykgewogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9hZGVkRmlsdGVyLnNlYXJjaFBhbmVzLnBhbmVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2FkZWRGaWx0ZXIuc2VhcmNoUGFuZXMucGFuZXNbaV0uaWQgPT09IHRoaXMucy5pbmRleCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4ID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gUGVyZm9ybSBjaGVja3MgdGhhdCBkbyBub3QgcmVxdWlyZSBwb3B1bGF0ZSBwYW5lIHRvIHJ1bgogICAgICAgICAgICAgICAgaWYgKChjb2xPcHRzLnNob3cgPT09IGZhbHNlCiAgICAgICAgICAgICAgICAgICAgfHwgKGNvbE9wdHMuc2hvdyAhPT0gdW5kZWZpbmVkICYmIGNvbE9wdHMuc2hvdyAhPT0gdHJ1ZSkpICYmCiAgICAgICAgICAgICAgICAgICAgaWR4ID09PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tLmNvbnRhaW5lci5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuaGlkZGVuKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnMuZGlzcGxheWVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sT3B0cy5zaG93ID09PSB0cnVlIHx8IGlkeCAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnMuZGlzcGxheWVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIE9ubHkgcnVuIHBvcHVsYXRlUGFuZSBpZiB0aGUgZGF0YSBoYXMgbm90IGJlZW4gY29sbGVjdGVkIHlldAogICAgICAgICAgICAgICAgaWYgKHJvd0RhdGEuYXJyYXlGaWx0ZXIubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wdWxhdGVQYW5lKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRlZEZpbHRlciAmJiBsb2FkZWRGaWx0ZXIuc2VhcmNoUGFuZXMgJiYgbG9hZGVkRmlsdGVyLnNlYXJjaFBhbmVzLnBhbmVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBpbmRleCBpcyBub3QgZm91bmQgdGhlbiBubyBkYXRhIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBzdGF0ZSBmb3IgdGhpcyBwYW5lLAogICAgICAgICAgICAgICAgICAgICAgICAvLyAgd2hpY2ggd2lsbCBvbmx5IG9jY3VyIGlmIGl0IGhhcyBwcmV2aW91c2x5IGZhaWxlZCB0byBtZWV0IHRoZSBjcml0ZXJpYSB0byBiZQogICAgICAgICAgICAgICAgICAgICAgICAvLyAgZGlzcGxheWVkLCB0aGVyZWZvcmUgd2UgY2FuIGp1c3QgaGlkZSBpdCBhZ2FpbiBoZXJlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZHggIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhLmJpbnNPcmlnaW5hbCA9IGxvYWRlZEZpbHRlci5zZWFyY2hQYW5lcy5wYW5lc1tpZHhdLmJpbnM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhLmFycmF5T3JpZ2luYWwgPSBsb2FkZWRGaWx0ZXIuc2VhcmNoUGFuZXMucGFuZXNbaWR4XS5hcnJheUZpbHRlcjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tLmNvbnRhaW5lci5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuaGlkZGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucy5kaXNwbGF5ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcm93RGF0YS5hcnJheU9yaWdpbmFsID0gcm93RGF0YS5hcnJheUZpbHRlcjsKICAgICAgICAgICAgICAgICAgICAgICAgcm93RGF0YS5iaW5zT3JpZ2luYWwgPSByb3dEYXRhLmJpbnM7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIGJpbkxlbmd0aCA9IE9iamVjdC5rZXlzKHJvd0RhdGEuYmluc09yaWdpbmFsKS5sZW5ndGg7CiAgICAgICAgICAgICAgICB2YXIgdW5pcXVlUmF0aW8gPSB0aGlzLl91bmlxdWVSYXRpbyhiaW5MZW5ndGgsIHRhYmxlLnJvd3MoKVswXS5sZW5ndGgpOwogICAgICAgICAgICAgICAgLy8gRG9uJ3Qgc2hvdyB0aGUgcGFuZSBpZiB0aGVyZSBpc24ndCBlbm91Z2ggdmFyaWFuY2UgaW4gdGhlIGRhdGEsIG9yIHRoZXJlIGlzIG9ubHkgMSBlbnRyeSBmb3IgdGhhdCBwYW5lCiAgICAgICAgICAgICAgICBpZiAodGhpcy5zLmRpc3BsYXllZCA9PT0gZmFsc2UgJiYgKChjb2xPcHRzLnNob3cgPT09IHVuZGVmaW5lZCAmJiBjb2xPcHRzLnRocmVzaG9sZCA9PT0gbnVsbCA/CiAgICAgICAgICAgICAgICAgICAgdW5pcXVlUmF0aW8gPiB0aGlzLmMudGhyZXNob2xkIDoKICAgICAgICAgICAgICAgICAgICB1bmlxdWVSYXRpbyA+IGNvbE9wdHMudGhyZXNob2xkKQogICAgICAgICAgICAgICAgICAgIHx8IChjb2xPcHRzLnNob3cgIT09IHRydWUgJiYgYmluTGVuZ3RoIDw9IDEpKSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tLmNvbnRhaW5lci5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuaGlkZGVuKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnMuZGlzcGxheWVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gSWYgdGhlIG9wdGlvbiB2aWV3VG90YWwgaXMgdHJ1ZSB0aGVuIGZpbmQKICAgICAgICAgICAgICAgIC8vIHRoZSB0b3RhbCBjb3VudCBmb3IgdGhlIHdob2xlIHRhYmxlIHRvIGRpc3BsYXkgYWxvbmdzaWRlIHRoZSBkaXNwbGF5ZWQgY291bnQKICAgICAgICAgICAgICAgIGlmICh0aGlzLmMudmlld1RvdGFsICYmIHJvd0RhdGEuYXJyYXlUb3RhbHMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGV0YWlsc1BhbmUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJvd0RhdGEuYmluc1RvdGFsID0gcm93RGF0YS5iaW5zOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5kb20uY29udGFpbmVyLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5zaG93KTsKICAgICAgICAgICAgICAgIHRoaXMucy5kaXNwbGF5ZWQgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5zLmRpc3BsYXllZCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gSWYgdGhlIHZhcmlhbmNlIGlzIGFjY2NlcHRhYmxlIHRoZW4gZGlzcGxheSB0aGUgc2VhcmNoIHBhbmUKICAgICAgICAgICAgdGhpcy5fZGlzcGxheVBhbmUoKTsKICAgICAgICAgICAgLy8gSGVyZSwgd2hlbiB0aGUgc3RhdGUgaXMgbG9hZGVkIGlmIHRoZSBkYXRhIG9iamVjdCBvbiB0aGUgb3JpZ2luYWwgdGFibGUgaXMgZW1wdHksCiAgICAgICAgICAgIC8vICB0aGVuIGEgc3RhdGUuY2xlYXIoKSBtdXN0IGhhdmUgb2NjdXJyZWQsIHNvIGRlbGV0ZSBhbGwgb2YgdGhlIHBhbmVzIHRhYmxlcyBzdGF0ZSBvYmplY3RzIHRvby4KICAgICAgICAgICAgdGhpcy5kb20uZHRQLm9uKCdzdGF0ZUxvYWRQYXJhbXMuZHQnLCBmdW5jdGlvbiAoZSwgc2V0dGluZ3MsIGRhdGEpIHsKICAgICAgICAgICAgICAgIGlmICgkLmlzRW1wdHlPYmplY3QodGFibGUuc3RhdGUubG9hZGVkKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgJC5lYWNoKGRhdGEsIGZ1bmN0aW9uIChpbmRleCwgdmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGRhdGFbaW5kZXhdOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgLy8gRGVjbGFyZSB0aGUgZGF0YXRhYmxlIGZvciB0aGUgcGFuZQogICAgICAgICAgICB2YXIgZXJyTW9kZSA9ICQuZm4uZGF0YVRhYmxlLmV4dC5lcnJNb2RlOwogICAgICAgICAgICAkLmZuLmRhdGFUYWJsZS5leHQuZXJyTW9kZSA9ICdub25lJzsKICAgICAgICAgICAgdmFyIGhhdmVTY3JvbGxlciA9IERhdGFUYWJsZS5TY3JvbGxlcjsKICAgICAgICAgICAgdGhpcy5zLmR0UGFuZSA9ICQodGhpcy5kb20uZHRQKS5EYXRhVGFibGUoJC5leHRlbmQodHJ1ZSwgewogICAgICAgICAgICAgICAgZG9tOiAndCcsCiAgICAgICAgICAgICAgICBjb2x1bW5EZWZzOiBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdkdHNwLW5hbWVDb2x1bW4nLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiAnZGlzcGxheScsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcjogZnVuY3Rpb24gKGRhdGEsIHR5cGUsIHJvdykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdzb3J0JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb3cuc29ydDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICd0eXBlJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb3cudHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMucy5maWx0ZXJpbmdBY3RpdmUgJiYgX3RoaXMuYy52aWV3VG90YWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG1lc3NhZ2UgPSBmaWx0ZXJlZE1lc3NhZ2UucmVwbGFjZSgve3RvdGFsfS8sIHJvdy50b3RhbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1lc3NhZ2UgPSBjb3VudE1lc3NhZ2UucmVwbGFjZSgve3RvdGFsfS8sIHJvdy50b3RhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC97c2hvd259Lywgcm93LnNob3duKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChtZXNzYWdlLmluZGV4T2YoJ3t0b3RhbH0nKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC97dG90YWx9Lywgcm93LnRvdGFsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChtZXNzYWdlLmluZGV4T2YoJ3tzaG93bn0nKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC97c2hvd259Lywgcm93LnNob3duKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBkaXNwbGF5aW5nIHRoZSBjb3VudCBpbiB0aGUgc2FtZSBjb2x1bW5lIGFzIHRoZSBuYW1lIG9mIHRoZSBzZWFyY2ggb3B0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBzbyB0aGF0IHRoZXJlIGlzIG5vdCBuZWVkIHRvIGNhbGwgY29sdW1ucy5hZGp1c3QoKSwgd2hpY2ggaW4gdHVybiBzcGVlZHMgdXAgdGhlIGNvZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaXNwbGF5TWVzc2FnZSA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBpbGwgPSAnPHNwYW4gY2xhc3M9IicgKyBfdGhpcy5jbGFzc2VzLnBpbGwgKyAnIj4nICsgbWVzc2FnZSArICc8L3NwYW4+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5jLmhpZGVDb3VudCB8fCBjb2xPcHRzLmhpZGVDb3VudCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbGwgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX3RoaXMuYy5kYXRhTGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheU1lc3NhZ2UgPSAnPHNwYW4gY2xhc3M9IicgKyBfdGhpcy5jbGFzc2VzLm5hbWUgKyAnIj4nICsgZGF0YSArICc8L3NwYW4+JyArIHBpbGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkYXRhLmxlbmd0aCA+IF90aGlzLmMuZGF0YUxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlNZXNzYWdlID0gJzxzcGFuIGNsYXNzPSInICsgX3RoaXMuY2xhc3Nlcy5uYW1lICsgJyI+JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGRhdGEuc3Vic3RyKDAsIF90aGlzLmMuZGF0YUxlbmd0aCkgKyAnLi4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICc8L3NwYW4+JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHBpbGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5TWVzc2FnZSA9ICc8c3BhbiBjbGFzcz0iJyArIF90aGlzLmNsYXNzZXMubmFtZSArICciPicgKyBkYXRhICsgJzwvc3Bhbj4nICsgcGlsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkaXNwbGF5TWVzc2FnZTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0czogMCwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWNjZXNzaW5nIHRoZSBwcml2YXRlIGRhdGF0YWJsZXMgcHJvcGVydHkgdG8gc2V0IHR5cGUgYmFzZWQgb24gdGhlIG9yaWdpbmFsIHRhYmxlLgogICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIG51bGwgaWYgbm90IGRlZmluZWQgYnkgdGhlIHVzZXIsIG1lYW5pbmcgdGhhdCBhdXRvbWF0aWMgdHlwZSBkZXRlY3Rpb24gd291bGQgdGFrZSBwbGFjZQogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0YWJsZS5zZXR0aW5ncygpWzBdLmFvQ29sdW1uc1t0aGlzLnMuaW5kZXhdICE9PSB1bmRlZmluZWQgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUuc2V0dGluZ3MoKVswXS5hb0NvbHVtbnNbdGhpcy5zLmluZGV4XS5fc01hbnVhbFR5cGUgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdkdHNwLWNvdW50Q29sdW1uICcgKyB0aGlzLmNsYXNzZXMuYmFkZ2VQaWxsLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiAndG90YWwnLAogICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzOiAxLAogICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBmYWxzZQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBkZWZlclJlbmRlcjogdHJ1ZSwKICAgICAgICAgICAgICAgIGluZm86IGZhbHNlLAogICAgICAgICAgICAgICAgcGFnaW5nOiBoYXZlU2Nyb2xsZXIgPyB0cnVlIDogZmFsc2UsCiAgICAgICAgICAgICAgICBzY3JvbGxZOiAnMjAwcHgnLAogICAgICAgICAgICAgICAgc2Nyb2xsZXI6IGhhdmVTY3JvbGxlciA/IHRydWUgOiBmYWxzZSwKICAgICAgICAgICAgICAgIHNlbGVjdDogdHJ1ZSwKICAgICAgICAgICAgICAgIHN0YXRlU2F2ZTogdGFibGUuc2V0dGluZ3MoKVswXS5vRmVhdHVyZXMuYlN0YXRlU2F2ZSA/IHRydWUgOiBmYWxzZQogICAgICAgICAgICB9LCB0aGlzLmMuZHRPcHRzLCBjb2xPcHRzICE9PSB1bmRlZmluZWQgPyBjb2xPcHRzLmR0T3B0cyA6IHt9LCAodGhpcy5jdXN0b21QYW5lU2V0dGluZ3MgIT09IG51bGwgJiYgdGhpcy5jdXN0b21QYW5lU2V0dGluZ3MuZHRPcHRzICE9PSB1bmRlZmluZWQpCiAgICAgICAgICAgICAgICA/IHRoaXMuY3VzdG9tUGFuZVNldHRpbmdzLmR0T3B0cwogICAgICAgICAgICAgICAgOiB7fSkpOwogICAgICAgICAgICAkKHRoaXMuZG9tLmR0UCkuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLnRhYmxlKTsKICAgICAgICAgICAgLy8gVGhpcyBpcyBoYWNreSBidXQgbmVjZXNzYXJ5IGZvciB3aGVuIGRhdGF0YWJsZXMgaXMgZ2VuZXJhdGluZyB0aGUgY29sdW1uIHRpdGxlcyBhdXRvbWF0aWNhbGx5CiAgICAgICAgICAgICQodGhpcy5kb20uc2VhcmNoQm94KS5hdHRyKCdwbGFjZWhvbGRlcicsIGNvbE9wdHMuaGVhZGVyICE9PSB1bmRlZmluZWQKICAgICAgICAgICAgICAgID8gY29sT3B0cy5oZWFkZXIKICAgICAgICAgICAgICAgIDogdGhpcy5jb2xFeGlzdHMKICAgICAgICAgICAgICAgICAgICA/IHRhYmxlLnNldHRpbmdzKClbMF0uYW9Db2x1bW5zW3RoaXMucy5pbmRleF0uc1RpdGxlCiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmN1c3RvbVBhbmVTZXR0aW5ncy5oZWFkZXIgfHwgJ0N1c3RvbSBQYW5lJyk7CiAgICAgICAgICAgIC8vIEFzIHRoZSBwYW5lIHRhYmxlIGlzIG5vdCBpbiB0aGUgZG9jdW1lbnQgeWV0IHdlIG11c3QgaW5pdGlhbGlzZSBzZWxlY3Qgb3Vyc2VsdmVzCiAgICAgICAgICAgICQuZm4uZGF0YVRhYmxlLnNlbGVjdC5pbml0KHRoaXMucy5kdFBhbmUpOwogICAgICAgICAgICAkLmZuLmRhdGFUYWJsZS5leHQuZXJyTW9kZSA9IGVyck1vZGU7CiAgICAgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIGN1c3RvbSBwYW5lCiAgICAgICAgICAgIGlmICh0aGlzLmNvbEV4aXN0cykgewogICAgICAgICAgICAgICAgLy8gT24gaW5pdGlhbGlzYXRpb24sIGRvIHdlIG5lZWQgdG8gc2V0IGEgZmlsdGVyaW5nIHZhbHVlIGZyb20gYQogICAgICAgICAgICAgICAgLy8gc2F2ZWQgc3RhdGUgb3IgaW5pdCBvcHRpb24/CiAgICAgICAgICAgICAgICB2YXIgc2VhcmNoID0gY29sdW1uLnNlYXJjaCgpOwogICAgICAgICAgICAgICAgc2VhcmNoID0gc2VhcmNoID8gc2VhcmNoLnN1YnN0cigxLCBzZWFyY2gubGVuZ3RoIC0gMikuc3BsaXQoJ3wnKSA6IFtdOwogICAgICAgICAgICAgICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBlbXB0eSBjZWxscwogICAgICAgICAgICAgICAgdmFyIGNvdW50XzEgPSAwOwogICAgICAgICAgICAgICAgcm93RGF0YS5hcnJheUZpbHRlci5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZmlsdGVyID09PSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICBjb3VudF8xKys7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAvLyBBZGQgYWxsIG9mIHRoZSBzZWFyY2ggb3B0aW9ucyB0byB0aGUgcGFuZQogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGllbiA9IHJvd0RhdGEuYXJyYXlGaWx0ZXIubGVuZ3RoOyBpIDwgaWVuOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAocm93RGF0YS5hcnJheUZpbHRlcltpXSAmJiAocm93RGF0YS5iaW5zW3Jvd0RhdGEuYXJyYXlGaWx0ZXJbaV0uZmlsdGVyXSAhPT0gdW5kZWZpbmVkIHx8ICF0aGlzLmMuY2FzY2FkZVBhbmVzKSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm93ID0gdGhpcy5fYWRkUm93KHJvd0RhdGEuYXJyYXlGaWx0ZXJbaV0uZGlzcGxheSwgcm93RGF0YS5hcnJheUZpbHRlcltpXS5maWx0ZXIsIHJvd0RhdGEuYmluc1tyb3dEYXRhLmFycmF5RmlsdGVyW2ldLmZpbHRlcl0sIHJvd0RhdGEuYmluc1RvdGFsW3Jvd0RhdGEuYXJyYXlGaWx0ZXJbaV0uZmlsdGVyXSwgcm93RGF0YS5hcnJheUZpbHRlcltpXS5zb3J0LCByb3dEYXRhLmFycmF5RmlsdGVyW2ldLnR5cGUpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sT3B0cy5wcmVTZWxlY3QgIT09IHVuZGVmaW5lZCAmJiBjb2xPcHRzLnByZVNlbGVjdC5pbmRleE9mKHJvd0RhdGEuYXJyYXlGaWx0ZXJbaV0uZmlsdGVyKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5zZWxlY3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkUm93KHRoaXMuYy5lbXB0eU1lc3NhZ2UsIGNvdW50XzEsIGNvdW50XzEsIHRoaXMuYy5lbXB0eU1lc3NhZ2UsIHRoaXMuYy5lbXB0eU1lc3NhZ2UsIHRoaXMuYy5lbXB0eU1lc3NhZ2UpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgY3VzdG9tIG9wdGlvbnMgc2V0IG9yIGl0IGlzIGEgY3VzdG9tIHBhbmUgdGhlbiBnZXQgdGhlbQogICAgICAgICAgICBpZiAoY29sT3B0cy5vcHRpb25zICE9PSB1bmRlZmluZWQgfHwKICAgICAgICAgICAgICAgICh0aGlzLmN1c3RvbVBhbmVTZXR0aW5ncyAhPT0gbnVsbCAmJiB0aGlzLmN1c3RvbVBhbmVTZXR0aW5ncy5vcHRpb25zICE9PSB1bmRlZmluZWQpKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9nZXRDb21wYXJpc29uUm93cygpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIERhdGFUYWJsZS5zZWxlY3QuaW5pdCh0aGlzLnMuZHRQYW5lKTsKICAgICAgICAgICAgLy8gRGlzcGxheSB0aGUgcGFuZQogICAgICAgICAgICB0aGlzLnMuZHRQYW5lLmRyYXcoKTsKICAgICAgICAgICAgLy8gV2hlbiBhbiBpdGVtIGlzIHNlbGVjdGVkIG9uIHRoZSBwYW5lLCBhZGQgdGhlc2UgdG8gdGhlIGFycmF5IHdoaWNoIGhvbGRzIHNlbGVjdGVkIGl0ZW1zLgogICAgICAgICAgICAvLyBDdXN0b20gc2VhcmNoIHdpbGwgcGVyZm9ybS4KICAgICAgICAgICAgdGhpcy5zLmR0UGFuZS5vbignc2VsZWN0LmR0c3AnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodDApOwogICAgICAgICAgICAgICAgJChfdGhpcy5kb20uY2xlYXIpLnJlbW92ZUNsYXNzKF90aGlzLmNsYXNzZXMuZHVsbCk7CiAgICAgICAgICAgICAgICBfdGhpcy5zLnNlbGVjdFByZXNlbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5zLnVwZGF0aW5nKSB7CiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX21ha2VTZWxlY3Rpb24oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF90aGlzLnMuc2VsZWN0UHJlc2VudCA9IGZhbHNlOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgLy8gV2hlbiBzYXZpbmcgdGhlIHN0YXRlIHN0b3JlIGFsbCBvZiB0aGUgc2VsZWN0ZWQgcm93cyBmb3IgcHJlc2VsZWN0aW9uIG5leHQgdGltZSBhcm91bmQKICAgICAgICAgICAgdGhpcy5zLmR0Lm9uKCdzdGF0ZVNhdmVQYXJhbXMuZHRzcCcsIGZ1bmN0aW9uIChlLCBzZXR0aW5ncywgZGF0YSkgewogICAgICAgICAgICAgICAgLy8gSWYgdGhlIGRhdGEgYmVpbmcgcGFzc2VkIGluIGlzIGVtcHR5IHRoZW4gYSBzdGF0ZSBjbGVhciBtdXN0IGhhdmUgb2NjdXJlZCBzbyBjbGVhciB0aGUgcGFuZXMgc3RhdGUgYXMgd2VsbAogICAgICAgICAgICAgICAgaWYgKCQuaXNFbXB0eU9iamVjdChkYXRhKSkgewogICAgICAgICAgICAgICAgICAgIF90aGlzLnMuZHRQYW5lLnN0YXRlLmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gW107CiAgICAgICAgICAgICAgICB2YXIgc2VhcmNoVGVybTsKICAgICAgICAgICAgICAgIHZhciBvcmRlcjsKICAgICAgICAgICAgICAgIHZhciBiaW5zOwogICAgICAgICAgICAgICAgdmFyIGFycmF5RmlsdGVyOwogICAgICAgICAgICAgICAgLy8gR2V0IGFsbCBvZiB0aGUgZGF0YSBuZWVkZWQgZm9yIHRoZSBzdGF0ZSBzYXZlIGZyb20gdGhlIHBhbmUKICAgICAgICAgICAgICAgIGlmIChfdGhpcy5zLmR0UGFuZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBfdGhpcy5zLmR0UGFuZS5yb3dzKHsgc2VsZWN0ZWQ6IHRydWUgfSkuZGF0YSgpLm1hcChmdW5jdGlvbiAoaXRlbSkgeyByZXR1cm4gaXRlbS5maWx0ZXIudG9TdHJpbmcoKTsgfSkudG9BcnJheSgpOwogICAgICAgICAgICAgICAgICAgIHNlYXJjaFRlcm0gPSAkKF90aGlzLmRvbS5zZWFyY2hCb3gpLnZhbCgpOwogICAgICAgICAgICAgICAgICAgIG9yZGVyID0gX3RoaXMucy5kdFBhbmUub3JkZXIoKTsKICAgICAgICAgICAgICAgICAgICBiaW5zID0gcm93RGF0YS5iaW5zT3JpZ2luYWw7CiAgICAgICAgICAgICAgICAgICAgYXJyYXlGaWx0ZXIgPSByb3dEYXRhLmFycmF5T3JpZ2luYWw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZGF0YS5zZWFyY2hQYW5lcyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgZGF0YS5zZWFyY2hQYW5lcyA9IHt9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGRhdGEuc2VhcmNoUGFuZXMucGFuZXMgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGRhdGEuc2VhcmNoUGFuZXMucGFuZXMgPSBbXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgcGFuZXMgZGF0YSB0byB0aGUgc3RhdGUgb2JqZWN0CiAgICAgICAgICAgICAgICBkYXRhLnNlYXJjaFBhbmVzLnBhbmVzLnB1c2goewogICAgICAgICAgICAgICAgICAgIGFycmF5RmlsdGVyOiBhcnJheUZpbHRlciwKICAgICAgICAgICAgICAgICAgICBiaW5zOiBiaW5zLAogICAgICAgICAgICAgICAgICAgIGlkOiBfdGhpcy5zLmluZGV4LAogICAgICAgICAgICAgICAgICAgIG9yZGVyOiBvcmRlciwKICAgICAgICAgICAgICAgICAgICBzZWFyY2hUZXJtOiBzZWFyY2hUZXJtLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAvLyBSZWxvYWQgdGhlIHNlbGVjdGlvbiwgc2VhcmNoYm94IGVudHJ5IGFuZCBvcmRlcmluZyBmcm9tIHRoZSBwcmV2aW91cyBzdGF0ZQogICAgICAgICAgICBpZiAobG9hZGVkRmlsdGVyICYmIGxvYWRlZEZpbHRlci5zZWFyY2hQYW5lcyAmJiBsb2FkZWRGaWx0ZXIuc2VhcmNoUGFuZXMucGFuZXMpIHsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5jLmNhc2NhZGVQYW5lcykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbG9hZFNlbGVjdChsb2FkZWRGaWx0ZXIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IGxvYWRlZEZpbHRlci5zZWFyY2hQYW5lcy5wYW5lczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcGFuZSA9IF9hW19pXTsKICAgICAgICAgICAgICAgICAgICBpZiAocGFuZS5pZCA9PT0gdGhpcy5zLmluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcy5kb20uc2VhcmNoQm94KS52YWwocGFuZS5zZWFyY2hUZXJtKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zLmR0Lm9yZGVyKHBhbmUub3JkZXIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnMuZHRQYW5lLm9uKCd1c2VyLXNlbGVjdC5kdHNwJywgZnVuY3Rpb24gKGUsIF9kdCwgdHlwZSwgY2VsbCwgb3JpZ2luYWxFdmVudCkgewogICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIC8vIFdoZW4gdGhlIGJ1dHRvbiB0byBvcmRlciBieSB0aGUgbmFtZSBvZiB0aGUgb3B0aW9ucyBpcyBjbGlja2VkIHRoZW4KICAgICAgICAgICAgLy8gIGNoYW5nZSB0aGUgb3JkZXJpbmcgdG8gd2hhdGV2ZXIgaXQgaXNuJ3QgY3VycmVudGx5CiAgICAgICAgICAgICQodGhpcy5kb20ubmFtZUJ1dHRvbikub24oJ2NsaWNrLmR0c3AnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB2YXIgY3VycmVudE9yZGVyID0gX3RoaXMucy5kdFBhbmUub3JkZXIoKVswXVsxXTsKICAgICAgICAgICAgICAgIF90aGlzLnMuZHRQYW5lLm9yZGVyKFswLCBjdXJyZW50T3JkZXIgPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYyddKS5kcmF3KCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAvLyBXaGVuIHRoZSBidXR0b24gdG8gb3JkZXIgYnkgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBjb2x1bW4gaXMgY2xpY2tlZCB0aGVuCiAgICAgICAgICAgIC8vICBjaGFuZ2UgdGhlIG9yZGVyaW5nIHRvIHdoYXRldmVyIGl0IGlzbid0IGN1cnJlbnRseQogICAgICAgICAgICAkKHRoaXMuZG9tLmNvdW50QnV0dG9uKS5vbignY2xpY2suZHRzcCcsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBjdXJyZW50T3JkZXIgPSBfdGhpcy5zLmR0UGFuZS5vcmRlcigpWzBdWzFdOwogICAgICAgICAgICAgICAgX3RoaXMucy5kdFBhbmUub3JkZXIoWzEsIGN1cnJlbnRPcmRlciA9PT0gJ2FzYycgPyAnZGVzYycgOiAnYXNjJ10pLmRyYXcoKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIC8vIFdoZW4gdGhlIGNsZWFyIGJ1dHRvbiBpcyBjbGlja2VkIHJlc2V0IHRoZSBwYW5lCiAgICAgICAgICAgICQodGhpcy5kb20uY2xlYXIpLm9uKCdjbGljay5kdHNwJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIHNlYXJjaGVzID0gX3RoaXMuZG9tLmNvbnRhaW5lci5maW5kKCcuJyArIF90aGlzLmNsYXNzZXMuc2VhcmNoKTsKICAgICAgICAgICAgICAgIHNlYXJjaGVzLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdmFsdWUgb2YgdGhlIHNlYXJjaCBib3ggdG8gYmUgYW4gZW1wdHkgc3RyaW5nIGFuZCB0aGVuIHNlYXJjaCBvbiB0aGF0LCBlZmZlY3RpdmVseSByZXNldGluZwogICAgICAgICAgICAgICAgICAgICQodGhpcykudmFsKCcnKTsKICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnRyaWdnZXIoJ2lucHV0Jyk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIF90aGlzLmNsZWFyUGFuZSgpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgLy8gV2hlbiB0aGUgc2VhcmNoIGJ1dHRvbiBpcyBjbGlja2VkIHRoZW4gZHJhdyBmb2N1cyB0byB0aGUgc2VhcmNoIGJveAogICAgICAgICAgICAkKHRoaXMuZG9tLnNlYXJjaEJ1dHRvbikub24oJ2NsaWNrLmR0c3AnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAkKF90aGlzLmRvbS5zZWFyY2hCb3gpLmZvY3VzKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAvLyBXaGVuIGEgY2hhcmFjdGVyIGlzIGlucHV0dGVkIGludG8gdGhlIHNlYXJjaGJveCBzZWFyY2ggdGhlIHBhbmUgZm9yIG1hdGNoaW5nIHZhbHVlcy4KICAgICAgICAgICAgLy8gRG9pbmcgaXQgdGhpcyB3YXkgbWVhbnMgdGhhdCBubyBidXR0b24gaGFzIHRvIGJlIGNsaWNrZWQgdG8gdHJpZ2dlciBhIHNlYXJjaCwgaXQgaXMgZG9uZSBhc3luY2hyb25vdXNseQogICAgICAgICAgICAkKHRoaXMuZG9tLnNlYXJjaEJveCkub24oJ2lucHV0LmR0c3AnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBfdGhpcy5zLmR0UGFuZS5zZWFyY2goJChfdGhpcy5kb20uc2VhcmNoQm94KS52YWwoKSkuZHJhdygpOwogICAgICAgICAgICAgICAgX3RoaXMucy5kdC5zdGF0ZS5zYXZlKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAvLyBEZWNsYXJlIHRpbWVvdXQgVmFyaWFibGUKICAgICAgICAgICAgdmFyIHQwOwogICAgICAgICAgICAvLyBXaGVuIGFuIGl0ZW0gaXMgZGVzZWxlY3RlZCBvbiB0aGUgcGFuZSwgcmUgYWRkIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbXMgdG8gdGhlIGFycmF5CiAgICAgICAgICAgIC8vIHdoaWNoIGhvbGRzIHNlbGVjdGVkIGl0ZW1zLiBDdXN0b20gc2VhcmNoIHdpbGwgYmUgcGVyZm9ybWVkLgogICAgICAgICAgICB0aGlzLnMuZHRQYW5lLm9uKCdkZXNlbGVjdC5kdHNwJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdDAgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBfdGhpcy5zLmRlc2VsZWN0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMucy5kdFBhbmUucm93cyh7IHNlbGVjdGVkOiB0cnVlIH0pLmRhdGEoKS50b0FycmF5KCkubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQoX3RoaXMuZG9tLmNsZWFyKS5hZGRDbGFzcyhfdGhpcy5jbGFzc2VzLmR1bGwpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBfdGhpcy5fbWFrZVNlbGVjdGlvbigpOwogICAgICAgICAgICAgICAgICAgIF90aGlzLnMuZGVzZWxlY3QgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBfdGhpcy5zLmR0LnN0YXRlLnNhdmUoKTsKICAgICAgICAgICAgICAgIH0sIDUwKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0byBzYXZlIHRoZSBzdGF0ZSBvbmNlIHRoZSBwYW5lIGhhcyBiZWVuIGJ1aWx0CiAgICAgICAgICAgIHRoaXMucy5kdC5zdGF0ZS5zYXZlKCk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogVXBkYXRlIHRoZSBhcnJheSB3aGljaCBob2xkcyB0aGUgZGlzcGxheSBhbmQgZmlsdGVyIHZhbHVlcyBmb3IgdGhlIHRhYmxlCiAgICAgICAgICovCiAgICAgICAgU2VhcmNoUGFuZS5wcm90b3R5cGUuX2RldGFpbHNQYW5lID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgICAgICB2YXIgdGFibGUgPSB0aGlzLnMuZHQ7CiAgICAgICAgICAgIHRoaXMucy5yb3dEYXRhLmFycmF5VG90YWxzID0gW107CiAgICAgICAgICAgIHRoaXMucy5yb3dEYXRhLmJpbnNUb3RhbCA9IHt9OwogICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSB0aGlzLnMuZHQuc2V0dGluZ3MoKVswXTsKICAgICAgICAgICAgdGFibGUucm93cygpLmV2ZXJ5KGZ1bmN0aW9uIChyb3dJZHgpIHsKICAgICAgICAgICAgICAgIF90aGlzLl9wb3B1bGF0ZVBhbmVBcnJheShyb3dJZHgsIF90aGlzLnMucm93RGF0YS5hcnJheVRvdGFscywgc2V0dGluZ3MsIF90aGlzLnMucm93RGF0YS5iaW5zVG90YWwpOwogICAgICAgICAgICB9KTsKICAgICAgICB9OwogICAgICAgIC8qKgogICAgICAgICAqIEFwcGVuZHMgYWxsIG9mIHRoZSBIVE1MIGVsZW1lbnRzIHRvIHRoZWlyIHJlbGV2YW50IHBhcmVudCBFbGVtZW50cwogICAgICAgICAqLwogICAgICAgIFNlYXJjaFBhbmUucHJvdG90eXBlLl9kaXNwbGF5UGFuZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuZG9tLmNvbnRhaW5lcjsKICAgICAgICAgICAgdmFyIGNvbE9wdHMgPSB0aGlzLnMuY29sT3B0czsKICAgICAgICAgICAgdmFyIGxheVZhbCA9IHBhcnNlSW50KHRoaXMuYy5sYXlvdXQuc3BsaXQoJy0nKVsxXSwgMTApOwogICAgICAgICAgICAvLyAgRW1wdHkgZXZlcnl0aGluZyB0byBzdGFydCBhZ2FpbgogICAgICAgICAgICAkKHRoaXMuZG9tLnRvcFJvdykuZW1wdHkoKTsKICAgICAgICAgICAgJCh0aGlzLmRvbS5kdFApLmVtcHR5KCk7CiAgICAgICAgICAgICQodGhpcy5kb20udG9wUm93KS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMudG9wUm93KTsKICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiAzIGNvbHVtbnMgZGVmaW5lZCB0aGVuIG1ha2UgdGhlcmUgYmUgYSBzbWFsbGVyIGdhcCBiZXR3ZWVuIHRoZSBwYW5lcwogICAgICAgICAgICBpZiAobGF5VmFsID4gMykgewogICAgICAgICAgICAgICAgJCh0aGlzLmRvbS5jb250YWluZXIpLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5zbWFsbEdhcCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJCh0aGlzLmRvbS50b3BSb3cpLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5zdWJSb3dzQ29udGFpbmVyKTsKICAgICAgICAgICAgJCh0aGlzLmRvbS51cHBlcikuYXBwZW5kVG8odGhpcy5kb20udG9wUm93KTsKICAgICAgICAgICAgJCh0aGlzLmRvbS5sb3dlcikuYXBwZW5kVG8odGhpcy5kb20udG9wUm93KTsKICAgICAgICAgICAgJCh0aGlzLmRvbS5zZWFyY2hDb250KS5hcHBlbmRUbyh0aGlzLmRvbS51cHBlcik7CiAgICAgICAgICAgICQodGhpcy5kb20uYnV0dG9uR3JvdXApLmFwcGVuZFRvKHRoaXMuZG9tLmxvd2VyKTsKICAgICAgICAgICAgLy8gSWYgbm8gc2VsZWN0aW9ucyBoYXZlIGJlZW4gbWFkZSBpbiB0aGUgcGFuZSB0aGVuIGRpc2FibGUgdGhlIGNsZWFyIGJ1dHRvbgogICAgICAgICAgICBpZiAodGhpcy5jLmR0T3B0cy5zZWFyY2hpbmcgPT09IGZhbHNlIHx8CiAgICAgICAgICAgICAgICAoY29sT3B0cy5kdE9wdHMgIT09IHVuZGVmaW5lZCAmJgogICAgICAgICAgICAgICAgICAgIGNvbE9wdHMuZHRPcHRzLnNlYXJjaGluZyA9PT0gZmFsc2UpIHx8CiAgICAgICAgICAgICAgICAoIXRoaXMuYy5jb250cm9scyB8fCAhY29sT3B0cy5jb250cm9scykgfHwKICAgICAgICAgICAgICAgICh0aGlzLmN1c3RvbVBhbmVTZXR0aW5ncyAhPT0gbnVsbCAmJgogICAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tUGFuZVNldHRpbmdzLmR0T3B0cyAhPT0gdW5kZWZpbmVkICYmCiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXN0b21QYW5lU2V0dGluZ3MuZHRPcHRzLnNlYXJjaGluZyAhPT0gdW5kZWZpbmVkICYmCiAgICAgICAgICAgICAgICAgICAgIXRoaXMuY3VzdG9tUGFuZVNldHRpbmdzLmR0T3B0cy5zZWFyY2hpbmcpKSB7CiAgICAgICAgICAgICAgICAkKHRoaXMuZG9tLnNlYXJjaEJveCkuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKQogICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcyh0aGlzLmNsYXNzZXMucGFuZUlucHV0QnV0dG9uKQogICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuZGlzYWJsZWRCdXR0b24pOwogICAgICAgICAgICB9CiAgICAgICAgICAgICQodGhpcy5kb20uc2VhcmNoQm94KS5hcHBlbmRUbyh0aGlzLmRvbS5zZWFyY2hDb250KTsKICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgc2VhcmNoQ29udCBkaXYuIFdvcnRoIG5vdGluZyB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBjaGFuZ2Ugd2hlbiB1c2luZyBzZW1hbnRpYyB1aQogICAgICAgICAgICB0aGlzLl9zZWFyY2hDb250U2V0dXAoKTsKICAgICAgICAgICAgLy8gSWYgdGhlIGNsZWFyIGJ1dHRvbiBpcyBhbGxvd2VkIHRvIHNob3cgdGhlbiBkaXNwbGF5IGl0CiAgICAgICAgICAgIGlmICh0aGlzLmMuY2xlYXIgJiYgdGhpcy5jLmNvbnRyb2xzICYmIGNvbE9wdHMuY29udHJvbHMpIHsKICAgICAgICAgICAgICAgICQodGhpcy5kb20uY2xlYXIpLmFwcGVuZFRvKHRoaXMuZG9tLmJ1dHRvbkdyb3VwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpcy5jLm9yZGVyYWJsZSAmJiBjb2xPcHRzLm9yZGVyYWJsZSAmJiB0aGlzLmMuY29udHJvbHMgJiYgY29sT3B0cy5jb250cm9scykgewogICAgICAgICAgICAgICAgJCh0aGlzLmRvbS5uYW1lQnV0dG9uKS5hcHBlbmRUbyh0aGlzLmRvbS5idXR0b25Hcm91cCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gSWYgdGhlIGNvdW50IGNvbHVtbiBpcyBoaWRkZW4gdGhlbiBkb24ndCBkaXNwbGF5IHRoZSBvcmRlcmluZyBidXR0b24gZm9yIGl0CiAgICAgICAgICAgIGlmICghdGhpcy5jLmhpZGVDb3VudCAmJgogICAgICAgICAgICAgICAgIWNvbE9wdHMuaGlkZUNvdW50ICYmCiAgICAgICAgICAgICAgICB0aGlzLmMub3JkZXJhYmxlICYmCiAgICAgICAgICAgICAgICBjb2xPcHRzLm9yZGVyYWJsZSAmJgogICAgICAgICAgICAgICAgdGhpcy5jLmNvbnRyb2xzICYmCiAgICAgICAgICAgICAgICBjb2xPcHRzLmNvbnRyb2xzKSB7CiAgICAgICAgICAgICAgICAkKHRoaXMuZG9tLmNvdW50QnV0dG9uKS5hcHBlbmRUbyh0aGlzLmRvbS5idXR0b25Hcm91cCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJCh0aGlzLmRvbS50b3BSb3cpLnByZXBlbmRUbyh0aGlzLmRvbS5jb250YWluZXIpOwogICAgICAgICAgICAkKGNvbnRhaW5lcikuYXBwZW5kKHRoaXMuZG9tLmR0UCk7CiAgICAgICAgICAgICQoY29udGFpbmVyKS5zaG93KCk7CiAgICAgICAgfTsKICAgICAgICAvKioKICAgICAgICAgKiBGaW5kIHRoZSB1bmlxdWUgZmlsdGVyIHZhbHVlcyBpbiBhbiBhcnJheQogICAgICAgICAqIEBwYXJhbSBkYXRhIGVtcHR5IGFycmF5IHRvIHBvcHVsYXRlIHdpdGggZGF0YSB3aGljaCBoYXMgbm90IHlldCBiZWVuIGZvdW5kCiAgICAgICAgICogQHBhcmFtIGFycmF5RmlsdGVyIHRoZSBhcnJheSBvZiBhbGwgb2YgdGhlIGRpc3BsYXkgYW5kIGZpbHRlciB2YWx1ZXMgZm9yIHRoZSB0YWJsZQogICAgICAgICAqLwogICAgICAgIFNlYXJjaFBhbmUucHJvdG90eXBlLl9maW5kVW5pcXVlID0gZnVuY3Rpb24gKGRhdGEsIGFycmF5RmlsdGVyKSB7CiAgICAgICAgICAgIHZhciBwcmV2ID0gW107CiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgYXJyYXlGaWx0ZXJfMSA9IGFycmF5RmlsdGVyOyBfaSA8IGFycmF5RmlsdGVyXzEubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgZmlsdGVyRWwgPSBhcnJheUZpbHRlcl8xW19pXTsKICAgICAgICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGhhcyBub3QgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCB0aGVuIGFkZCBpdCB0byB0aGUgdW5pcXVlIGFycmF5IGFuZCB0aGUgcHJldmlvdXNseSBwcm9jZXNzZWQgYXJyYXkuCiAgICAgICAgICAgICAgICBpZiAocHJldi5pbmRleE9mKGZpbHRlckVsLmZpbHRlcikgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogZmlsdGVyRWwuZGlzcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJFbC5maWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnQ6IGZpbHRlckVsLnNvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGZpbHRlckVsLnR5cGUKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBwcmV2LnB1c2goZmlsdGVyRWwuZmlsdGVyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0cyB0aGUgb3B0aW9ucyBmb3IgdGhlIHJvdyBmb3IgdGhlIGN1c3RvbVBhbmVzCiAgICAgICAgICogQHJldHVybnMge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSByb3cgZXh0ZW5kZWQgdG8gaW5jbHVkZSB0aGUgb3B0aW9ucyBmcm9tIHRoZSB1c2VyLgogICAgICAgICAqLwogICAgICAgIFNlYXJjaFBhbmUucHJvdG90eXBlLl9nZXRCb251c09wdGlvbnMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVzZXQgdGhlIHRocmVzaG9sZHMgYXMgaWYgdGhleSBoYXZlIGEgdmFsdWUgaW4gY29sT3B0cyB0aGVuIHRoYXQgdmFsdWUgd2lsbCBiZSB1c2VkCiAgICAgICAgICAgIHZhciBkZWZhdWx0TXV0YXRvciA9IHsKICAgICAgICAgICAgICAgIG9ydGhvZ29uYWw6IHsKICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQ6IG51bGwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB0aHJlc2hvbGQ6IG51bGwKICAgICAgICAgICAgfTsKICAgICAgICAgICAgcmV0dXJuICQuZXh0ZW5kKHRydWUsIHt9LCBTZWFyY2hQYW5lLmRlZmF1bHRzLCBkZWZhdWx0TXV0YXRvciwgdGhpcy5jICE9PSB1bmRlZmluZWQgPyB0aGlzLmMgOiB7fSk7CiAgICAgICAgfTsKICAgICAgICAvKioKICAgICAgICAgKiBBZGRzIHRoZSBjdXN0b20gb3B0aW9ucyB0byB0aGUgcGFuZQogICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygcm93cyB3aGljaCBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIHBhbmUKICAgICAgICAgKi8KICAgICAgICBTZWFyY2hQYW5lLnByb3RvdHlwZS5fZ2V0Q29tcGFyaXNvblJvd3MgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBjb2xPcHRzID0gdGhpcy5zLmNvbE9wdHM7CiAgICAgICAgICAgIC8vIEZpbmQgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbnMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyBpcyBhIHBhbmUgZm9yIGEgc3BlY2lmaWMgY29sdW1uIG9yIGEgY3VzdG9tIHBhbmUKICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSBjb2xPcHRzLm9wdGlvbnMgIT09IHVuZGVmaW5lZAogICAgICAgICAgICAgICAgPyBjb2xPcHRzLm9wdGlvbnMKICAgICAgICAgICAgICAgIDogdGhpcy5jdXN0b21QYW5lU2V0dGluZ3MgIT09IG51bGwgJiYgdGhpcy5jdXN0b21QYW5lU2V0dGluZ3Mub3B0aW9ucyAhPT0gdW5kZWZpbmVkCiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmN1c3RvbVBhbmVTZXR0aW5ncy5vcHRpb25zCiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7CiAgICAgICAgICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgdGFibGVWYWxzID0gdGhpcy5zLmR0LnJvd3MoeyBzZWFyY2g6ICdhcHBsaWVkJyB9KS5kYXRhKCkudG9BcnJheSgpOwogICAgICAgICAgICB2YXIgYXBwUm93cyA9IHRoaXMucy5kdC5yb3dzKHsgc2VhcmNoOiAnYXBwbGllZCcgfSk7CiAgICAgICAgICAgIHZhciB0YWJsZVZhbHNUb3RhbCA9IHRoaXMucy5kdC5yb3dzKCkuZGF0YSgpLnRvQXJyYXkoKTsKICAgICAgICAgICAgdmFyIGFsbFJvd3MgPSB0aGlzLnMuZHQucm93cygpOwogICAgICAgICAgICB2YXIgcm93cyA9IFtdOwogICAgICAgICAgICAvLyBDbGVhciBhbGwgb2YgdGhlIG90aGVyIHJvd3MgZnJvbSB0aGUgcGFuZSwgb25seSBjdXN0b20gb3B0aW9ucyBhcmUgdG8gYmUgZGlzcGxheWVkIHdoZW4gdGhleSBhcmUgZGVmaW5lZAogICAgICAgICAgICB0aGlzLnMuZHRQYW5lLmNsZWFyKCk7CiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgb3B0aW9uc18xID0gb3B0aW9uczsgX2kgPCBvcHRpb25zXzEubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgY29tcCA9IG9wdGlvbnNfMVtfaV07CiAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXNlIHRoZSBvYmplY3Qgd2hpY2ggaXMgdG8gYmUgcGxhY2VkIGluIHRoZSByb3cKICAgICAgICAgICAgICAgIHZhciBpbnNlcnQgPSBjb21wLmxhYmVsICE9PSAnJyA/IGNvbXAubGFiZWwgOiB0aGlzLmMuZW1wdHlNZXNzYWdlOwogICAgICAgICAgICAgICAgdmFyIGNvbXBhcmlzb25PYmogPSB7CiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5zZXJ0LAogICAgICAgICAgICAgICAgICAgIGZpbHRlcjogdHlwZW9mIGNvbXAudmFsdWUgPT09ICdmdW5jdGlvbicgPyBjb21wLnZhbHVlIDogW10sCiAgICAgICAgICAgICAgICAgICAgc2hvd246IDAsCiAgICAgICAgICAgICAgICAgICAgc29ydDogaW5zZXJ0LAogICAgICAgICAgICAgICAgICAgIHRvdGFsOiAwLAogICAgICAgICAgICAgICAgICAgIHR5cGU6IGluc2VydAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIC8vIElmIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIGluIHBsYWNlCiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbXAudmFsdWUgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgICAgICAgICAvLyBDb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBmdW5jdGlvbiBldmFsdWF0ZXMgdG8gdHJ1ZSBmb3IgdGhlIGRhdGEgY3VycmVudGx5IGJlaW5nIGRpc3BsYXllZAogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHRWYWwgPSAwOyB0VmFsIDwgdGFibGVWYWxzLmxlbmd0aDsgdFZhbCsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wLnZhbHVlLmNhbGwodGhpcy5zLmR0LCB0YWJsZVZhbHNbdFZhbF0sIGFwcFJvd3NbMF1bdFZhbF0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJpc29uT2JqLnNob3duKys7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgZnVuY3Rpb24gZXZhbHVhdGVzIHRvIHRydWUgZm9yIHRoZSBvcmlnaW5hbCBkYXRhIGluIHRoZSBUYWJsZQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFibGVWYWxzVG90YWwubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXAudmFsdWUuY2FsbCh0aGlzLnMuZHQsIHRhYmxlVmFsc1RvdGFsW2ldLCBhbGxSb3dzWzBdW2ldKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyaXNvbk9iai50b3RhbCsrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY29tcGFyaXNvbk9iagogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29tcGFyaXNvbk9iai5maWx0ZXIgIT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyaXNvbk9iai5maWx0ZXIucHVzaChjb21wLmZpbHRlcik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gSWYgY2FzY2FkZVBhbmVzIGlzIG5vdCBhY3RpdmUgb3IgaWYgaXQgaXMgYW5kIHRoZSBjb21wYXJpc29uT2JqIHNob3VsZCBiZSBzaG93biB0aGVuIGFkZCBpdCB0byB0aGUgcGFuZQogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmMuY2FzY2FkZVBhbmVzIHx8ICh0aGlzLmMuY2FzY2FkZVBhbmVzICYmIGNvbXBhcmlzb25PYmouc2hvd24gIT09IDApKSB7CiAgICAgICAgICAgICAgICAgICAgcm93cy5wdXNoKHRoaXMuX2FkZFJvdyhjb21wYXJpc29uT2JqLmRpc3BsYXksIGNvbXBhcmlzb25PYmouZmlsdGVyLCBjb21wYXJpc29uT2JqLnNob3duLCBjb21wYXJpc29uT2JqLnRvdGFsLCBjb21wYXJpc29uT2JqLnNvcnQsIGNvbXBhcmlzb25PYmoudHlwZSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByb3dzOwogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0cyB0aGUgb3B0aW9ucyBmb3IgdGhlIHJvdyBmb3IgdGhlIGN1c3RvbVBhbmVzCiAgICAgICAgICogQHJldHVybnMge29iamVjdH0gVGhlIG9wdGlvbnMgZm9yIHRoZSByb3cgZXh0ZW5kZWQgdG8gaW5jbHVkZSB0aGUgb3B0aW9ucyBmcm9tIHRoZSB1c2VyLgogICAgICAgICAqLwogICAgICAgIFNlYXJjaFBhbmUucHJvdG90eXBlLl9nZXRPcHRpb25zID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgdGFibGUgPSB0aGlzLnMuZHQ7CiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVzZXQgdGhlIHRocmVzaG9sZHMgYXMgaWYgdGhleSBoYXZlIGEgdmFsdWUgaW4gY29sT3B0cyB0aGVuIHRoYXQgdmFsdWUgd2lsbCBiZSB1c2VkCiAgICAgICAgICAgIHZhciBkZWZhdWx0TXV0YXRvciA9IHsKICAgICAgICAgICAgICAgIG9ydGhvZ29uYWw6IHsKICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQ6IG51bGwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB0aHJlc2hvbGQ6IG51bGwKICAgICAgICAgICAgfTsKICAgICAgICAgICAgcmV0dXJuICQuZXh0ZW5kKHRydWUsIHt9LCBTZWFyY2hQYW5lLmRlZmF1bHRzLCBkZWZhdWx0TXV0YXRvciwgdGFibGUuc2V0dGluZ3MoKVswXS5hb0NvbHVtbnNbdGhpcy5zLmluZGV4XS5zZWFyY2hQYW5lcyk7CiAgICAgICAgfTsKICAgICAgICAvKioKICAgICAgICAgKiBUaGlzIG1ldGhvZCBhbGxvd3MgZm9yIGNoYW5nZXMgdG8gdGhlIHBhbmVzIGFuZCB0YWJsZSB0byBiZSBtYWRlIHdoZW4gYSBzZWxlY3Rpb24gb3IgYSBkZXNlbGVjdGlvbiBvY2N1cnMKICAgICAgICAgKiBAcGFyYW0gc2VsZWN0IERlbm90ZXMgd2hldGhlciBhIHNlbGVjdGlvbiBoYXMgYmVlbiBtYWRlIG9yIG5vdAogICAgICAgICAqLwogICAgICAgIFNlYXJjaFBhbmUucHJvdG90eXBlLl9tYWtlU2VsZWN0aW9uID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aGlzLnVwZGF0ZVRhYmxlKCk7CiAgICAgICAgICAgIHRoaXMucy51cGRhdGluZyA9IHRydWU7CiAgICAgICAgICAgIHRoaXMucy5kdC5kcmF3KCk7CiAgICAgICAgICAgIHRoaXMucy51cGRhdGluZyA9IGZhbHNlOwogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogRmlsbCB0aGUgYXJyYXkgd2l0aCB0aGUgdmFsdWVzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlCiAgICAgICAgICovCiAgICAgICAgU2VhcmNoUGFuZS5wcm90b3R5cGUuX3BvcHVsYXRlUGFuZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIHRhYmxlID0gdGhpcy5zLmR0OwogICAgICAgICAgICB0aGlzLnMucm93RGF0YS5hcnJheUZpbHRlciA9IFtdOwogICAgICAgICAgICB0aGlzLnMucm93RGF0YS5iaW5zID0ge307CiAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IHRoaXMucy5kdC5zZXR0aW5ncygpWzBdOwogICAgICAgICAgICAvLyBJZiBjYXNjYWRlUGFuZXMgb3Igdmlld1RvdGFsIGFyZSBhY3RpdmUgaXQgaXMgbmVjZXNzYXJ5IHRvIGdldCB0aGUgZGF0YSB3aGljaCBpcyBjdXJyZW50bHkKICAgICAgICAgICAgLy8gIGJlaW5nIGRpc3BsYXllZCBmb3IgdGhlaXIgZnVuY3Rpb25hbGl0eS4KICAgICAgICAgICAgdmFyIGluZGV4QXJyYXkgPSAodGhpcy5jLmNhc2NhZGVQYW5lcyB8fCB0aGlzLmMudmlld1RvdGFsKSAmJiAhdGhpcy5zLmNsZWFyaW5nID8KICAgICAgICAgICAgICAgIHRhYmxlLnJvd3MoeyBzZWFyY2g6ICdhcHBsaWVkJyB9KS5pbmRleGVzKCkgOgogICAgICAgICAgICAgICAgdGFibGUucm93cygpLmluZGV4ZXMoKTsKICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBpbmRleEFycmF5XzEgPSBpbmRleEFycmF5OyBfaSA8IGluZGV4QXJyYXlfMS5sZW5ndGg7IF9pKyspIHsKICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGluZGV4QXJyYXlfMVtfaV07CiAgICAgICAgICAgICAgICB0aGlzLl9wb3B1bGF0ZVBhbmVBcnJheShpbmRleCwgdGhpcy5zLnJvd0RhdGEuYXJyYXlGaWx0ZXIsIHNldHRpbmdzKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogUG9wdWxhdGVzIGFuIGFycmF5IHdpdGggYWxsIG9mIHRoZSBkYXRhIGZvciB0aGUgdGFibGUKICAgICAgICAgKiBAcGFyYW0gcm93SWR4IFRoZSBjdXJyZW50IHJvdyBpbmRleCB0byBiZSBjb21wYXJlZAogICAgICAgICAqIEBwYXJhbSBhcnJheUZpbHRlciBUaGUgYXJyYXkgdGhhdCBpcyB0byBiZSBwb3B1bGF0ZWQgd2l0aCByb3cgRGV0YWlscwogICAgICAgICAqIEBwYXJhbSBiaW5zIFRoZSBiaW5zIG9iamVjdCB0aGF0IGlzIHRvIGJlIHBvcHVsYXRlZCB3aXRoIHRoZSByb3cgY291bnRzCiAgICAgICAgICovCiAgICAgICAgU2VhcmNoUGFuZS5wcm90b3R5cGUuX3BvcHVsYXRlUGFuZUFycmF5ID0gZnVuY3Rpb24gKHJvd0lkeCwgYXJyYXlGaWx0ZXIsIHNldHRpbmdzLCBiaW5zKSB7CiAgICAgICAgICAgIGlmIChiaW5zID09PSB2b2lkIDApIHsgYmlucyA9IHRoaXMucy5yb3dEYXRhLmJpbnM7IH0KICAgICAgICAgICAgdmFyIGNvbE9wdHMgPSB0aGlzLnMuY29sT3B0czsKICAgICAgICAgICAgLy8gUmV0cmlldmUgdGhlIHJlbmRlcmVkIGRhdGEgZnJvbSB0aGUgY2VsbCB1c2luZyB0aGUgZm5HZXRDZWxsRGF0YSBmdW5jdGlvbgogICAgICAgICAgICAvLyAgcmF0aGVyIHRoYW4gdGhlIGNlbGwoKS5yZW5kZXIgQVBJIG1ldGhvZCBmb3Igb3B0aW1pc2F0aW9uCiAgICAgICAgICAgIGlmICh0eXBlb2YgY29sT3B0cy5vcnRob2dvbmFsID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgdmFyIHJlbmRlcmVkID0gc2V0dGluZ3Mub0FwaS5fZm5HZXRDZWxsRGF0YShzZXR0aW5ncywgcm93SWR4LCB0aGlzLnMuaW5kZXgsIGNvbE9wdHMub3J0aG9nb25hbCk7CiAgICAgICAgICAgICAgICB0aGlzLnMucm93RGF0YS5maWx0ZXJNYXAuc2V0KHJvd0lkeCwgcmVuZGVyZWQpOwogICAgICAgICAgICAgICAgdGhpcy5fYWRkT3B0aW9uKHJlbmRlcmVkLCByZW5kZXJlZCwgcmVuZGVyZWQsIHJlbmRlcmVkLCBhcnJheUZpbHRlciwgYmlucyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgZmlsdGVyID0gc2V0dGluZ3Mub0FwaS5fZm5HZXRDZWxsRGF0YShzZXR0aW5ncywgcm93SWR4LCB0aGlzLnMuaW5kZXgsIGNvbE9wdHMub3J0aG9nb25hbC5zZWFyY2gpOwogICAgICAgICAgICAgICAgdGhpcy5zLnJvd0RhdGEuZmlsdGVyTWFwLnNldChyb3dJZHgsIGZpbHRlcik7CiAgICAgICAgICAgICAgICBpZiAoIWJpbnNbZmlsdGVyXSkgewogICAgICAgICAgICAgICAgICAgIGJpbnNbZmlsdGVyXSA9IDE7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkT3B0aW9uKGZpbHRlciwgc2V0dGluZ3Mub0FwaS5fZm5HZXRDZWxsRGF0YShzZXR0aW5ncywgcm93SWR4LCB0aGlzLnMuaW5kZXgsIGNvbE9wdHMub3J0aG9nb25hbC5kaXNwbGF5KSwgc2V0dGluZ3Mub0FwaS5fZm5HZXRDZWxsRGF0YShzZXR0aW5ncywgcm93SWR4LCB0aGlzLnMuaW5kZXgsIGNvbE9wdHMub3J0aG9nb25hbC5zb3J0KSwgc2V0dGluZ3Mub0FwaS5fZm5HZXRDZWxsRGF0YShzZXR0aW5ncywgcm93SWR4LCB0aGlzLnMuaW5kZXgsIGNvbE9wdHMub3J0aG9nb25hbC50eXBlKSwgYXJyYXlGaWx0ZXIsIGJpbnMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYmluc1tmaWx0ZXJdKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICAvKioKICAgICAgICAgKiBSZWxvYWRzIGFsbCBvZiB0aGUgcHJldmlvdXMgc2VsZWN0cyBpbnRvIHRoZSBwYW5lcwogICAgICAgICAqIEBwYXJhbSBsb2FkZWRGaWx0ZXIgVGhlIGxvYWRlZCBmaWx0ZXJzIGZyb20gYSBwcmV2aW91cyBzdGF0ZQogICAgICAgICAqLwogICAgICAgIFNlYXJjaFBhbmUucHJvdG90eXBlLl9yZWxvYWRTZWxlY3QgPSBmdW5jdGlvbiAobG9hZGVkRmlsdGVyKSB7CiAgICAgICAgICAgIC8vIElmIHRoZSBzdGF0ZSB3YXMgbm90IHNhdmVkIGRvbid0IHNlbGVjdGVkIGFueQogICAgICAgICAgICBpZiAobG9hZGVkRmlsdGVyID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgaWR4OwogICAgICAgICAgICAvLyBGb3IgZWFjaCBwYW5lLCBjaGVjayB0aGF0IHRoZSBsb2FkZWRGaWx0ZXIgbGlzdCBleGlzdHMgYW5kIGlzIG5vdCBudWxsLAogICAgICAgICAgICAvLyBmaW5kIHRoZSBpZCBvZiBlYWNoIHNlYXJjaCBpdGVtIGFuZCBzZXQgaXQgdG8gYmUgc2VsZWN0ZWQuCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9hZGVkRmlsdGVyLnNlYXJjaFBhbmVzLnBhbmVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAobG9hZGVkRmlsdGVyLnNlYXJjaFBhbmVzLnBhbmVzW2ldLmlkID09PSB0aGlzLnMuaW5kZXgpIHsKICAgICAgICAgICAgICAgICAgICBpZHggPSBpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpZHggIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgdmFyIHRhYmxlID0gdGhpcy5zLmR0UGFuZTsKICAgICAgICAgICAgICAgIHZhciByb3dzID0gdGFibGUucm93cyh7IG9yZGVyOiAnaW5kZXgnIH0pLmRhdGEoKS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsgcmV0dXJuIGl0ZW0uZmlsdGVyICE9PSBudWxsID8KICAgICAgICAgICAgICAgICAgICBpdGVtLmZpbHRlci50b1N0cmluZygpIDoKICAgICAgICAgICAgICAgICAgICBudWxsOyB9KS50b0FycmF5KCk7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gbG9hZGVkRmlsdGVyLnNlYXJjaFBhbmVzLnBhbmVzW2lkeF0uc2VsZWN0ZWQ7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGZpbHRlciA9IF9hW19pXTsKICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSAtMTsKICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gcm93cy5pbmRleE9mKGZpbHRlci50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGlkID4gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUucm93KGlkKS5zZWxlY3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zLmR0LnN0YXRlLnNhdmUoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIC8qKgogICAgICAgICAqIFRoaXMgbWV0aG9kIGRlY2lkZXMgd2hldGhlciBhIHJvdyBzaG91bGQgY29udHJpYnV0ZSB0byB0aGUgcGFuZSBvciBub3QKICAgICAgICAgKiBAcGFyYW0gZmlsdGVyIHRoZSB2YWx1ZSB0aGF0IHRoZSByb3cgaXMgdG8gYmUgZmlsdGVyZWQgb24KICAgICAgICAgKiBAcGFyYW0gZGF0YUluZGV4IHRoZSByb3cgaW5kZXgKICAgICAgICAgKi8KICAgICAgICBTZWFyY2hQYW5lLnByb3RvdHlwZS5fc2VhcmNoID0gZnVuY3Rpb24gKGZpbHRlciwgZGF0YUluZGV4KSB7CiAgICAgICAgICAgIHZhciBjb2xPcHRzID0gdGhpcy5zLmNvbE9wdHM7CiAgICAgICAgICAgIHZhciB0YWJsZSA9IHRoaXMucy5kdDsKICAgICAgICAgICAgLy8gRm9yIGVhY2ggaXRlbSBzZWxlY3RlZCBpbiB0aGUgcGFuZSwgY2hlY2sgaWYgaXQgaXMgYXZhaWxhYmxlIGluIHRoZSBjZWxsCiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLnNlbGVjdGlvbnM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgY29sU2VsZWN0ID0gX2FbX2ldOwogICAgICAgICAgICAgICAgLy8gaWYgdGhlIGZpbHRlciBpcyBhbiBhcnJheSB0aGVuIGlzIHRoZSBjb2x1bW4gcHJlc2VudCBpbiBpdAogICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyKSkgewogICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIuaW5kZXhPZihjb2xTZWxlY3QuZmlsdGVyKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gaWYgdGhlIGZpbHRlciBpcyBhIGZ1bmN0aW9uIHRoZW4gZG9lcyBpdCBtZWV0IHRoZSBjcml0ZXJpYSBvZiB0aGF0IGZ1bmN0aW9uIG9yIG5vdAogICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNvbFNlbGVjdC5maWx0ZXIgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY29sU2VsZWN0LmZpbHRlci5jYWxsKHRhYmxlLCB0YWJsZS5yb3coZGF0YUluZGV4KS5kYXRhKCksIGRhdGFJbmRleCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnMucmVkcmF3KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVBhbmUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sT3B0cy5jb21iaW5lciA9PT0gJ29yJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNvbWJpbmVyIGlzIGFuICJhbmQiIHRoZW4gd2UgbmVlZCB0byBjaGVjayBhZ2FpbnN0IGFsbCBwb3NzaWJsZSBzZWxlY3Rpb25zCiAgICAgICAgICAgICAgICAgICAgLy8gIHNvIGlmIGl0IGZhaWxzIGhlcmUgdGhlbiB0aGUgYW5kIGlzIG5vdCBtZXQgYW5kIHJldHVybiBmYWxzZQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbE9wdHMuY29tYmluZXIgPT09ICdhbmQnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgaWYgdGhlIHR3byBmaWx0ZXIgdmFsdWVzIGFyZSBlcXVhbCB0aGVuIHJldHVybiB0cnVlCiAgICAgICAgICAgICAgICBlbHNlIGlmIChmaWx0ZXIgPT09IGNvbFNlbGVjdC5maWx0ZXIpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBJZiB0aGUgY29tYmluZXIgaXMgYW4gYW5kIHRoZW4gd2UgbmVlZCB0byBjaGVjayBhZ2FpbnN0IGFsbCBwb3NzaWJsZSBzZWxlY3Rpb25zCiAgICAgICAgICAgIC8vICBzbyByZXR1cm4gdHJ1ZSBoZXJlIGlmIHNvIGJlY2F1c2UgaXQgd291bGQgaGF2ZSByZXR1cm5lZCBmYWxzZSBlYXJsaWVyIGlmIGl0IGhhZCBmYWlsZWQKICAgICAgICAgICAgaWYgKGNvbE9wdHMuY29tYmluZXIgPT09ICdhbmQnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBPdGhlcndpc2UgaXQgaGFzbid0IG1hdGNoZWQgd2l0aCBhbnl0aGluZyBieSB0aGlzIHBvaW50IHNvIGl0IG11c3QgYmUgZmFsc2UKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIC8qKgogICAgICAgICAqIENyZWF0ZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBzZWFyY2hDb250IGRpdgogICAgICAgICAqCiAgICAgICAgICogTk9URSBUaGlzIGlzIG92ZXJyaWRkZW4gd2hlbiBzZW1hbnRpYyB1aSBzdHlsaW5nIGluIG9yZGVyIHRvIGludGVncmF0ZSB0aGUgc2VhcmNoIGJ1dHRvbiBpbnRvIHRoZSB0ZXh0IGJveC4KICAgICAgICAgKi8KICAgICAgICBTZWFyY2hQYW5lLnByb3RvdHlwZS5fc2VhcmNoQ29udFNldHVwID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZiAodGhpcy5jLmNvbnRyb2xzICYmIHRoaXMucy5jb2xPcHRzLmNvbnRyb2xzKSB7CiAgICAgICAgICAgICAgICAkKHRoaXMuZG9tLnNlYXJjaEJ1dHRvbikuYXBwZW5kVG8odGhpcy5kb20uc2VhcmNoTGFiZWxDb250KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoISh0aGlzLmMuZHRPcHRzLnNlYXJjaGluZyA9PT0gZmFsc2UgfHwKICAgICAgICAgICAgICAgIHRoaXMucy5jb2xPcHRzLmR0T3B0cy5zZWFyY2hpbmcgPT09IGZhbHNlIHx8CiAgICAgICAgICAgICAgICAodGhpcy5jdXN0b21QYW5lU2V0dGluZ3MgIT09IG51bGwgJiYKICAgICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbVBhbmVTZXR0aW5ncy5kdE9wdHMgIT09IHVuZGVmaW5lZCAmJgogICAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tUGFuZVNldHRpbmdzLmR0T3B0cy5zZWFyY2hpbmcgIT09IHVuZGVmaW5lZCAmJgogICAgICAgICAgICAgICAgICAgICF0aGlzLmN1c3RvbVBhbmVTZXR0aW5ncy5kdE9wdHMuc2VhcmNoaW5nKSkpIHsKICAgICAgICAgICAgICAgICQodGhpcy5kb20uc2VhcmNoTGFiZWxDb250KS5hcHBlbmRUbyh0aGlzLmRvbS5zZWFyY2hDb250KTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogQWRkcyBvdXRsaW5lIHRvIHRoZSBwYW5lIHdoZW4gYSBzZWxlY3Rpb24gaGFzIGJlZW4gbWFkZQogICAgICAgICAqLwogICAgICAgIFNlYXJjaFBhbmUucHJvdG90eXBlLl9zZWFyY2hFeHRyYXMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciB1cGRhdGluZyA9IHRoaXMucy51cGRhdGluZzsKICAgICAgICAgICAgdGhpcy5zLnVwZGF0aW5nID0gdHJ1ZTsKICAgICAgICAgICAgdmFyIGZpbHRlcnMgPSB0aGlzLnMuZHRQYW5lLnJvd3MoeyBzZWxlY3RlZDogdHJ1ZSB9KS5kYXRhKCkucGx1Y2soJ2ZpbHRlcicpLnRvQXJyYXkoKTsKICAgICAgICAgICAgdmFyIG51bGxJbmRleCA9IGZpbHRlcnMuaW5kZXhPZih0aGlzLmMuZW1wdHlNZXNzYWdlKTsKICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9ICQodGhpcy5zLmR0UGFuZS50YWJsZSgpLmNvbnRhaW5lcigpKTsKICAgICAgICAgICAgLy8gSWYgbnVsbCBpbmRleCBpcyBmb3VuZCB0aGVuIHNlYXJjaCBmb3IgZW1wdHkgY2VsbHMgYXMgYSBmaWx0ZXIuCiAgICAgICAgICAgIGlmIChudWxsSW5kZXggPiAtMSkgewogICAgICAgICAgICAgICAgZmlsdGVyc1tudWxsSW5kZXhdID0gJyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gSWYgYSBmaWx0ZXIgaGFzIGJlZW4gYXBwbGllZCB0aGVuIG91dGxpbmUgdGhlIHJlc3BlY3RpdmUgcGFuZSwgcmVtb3ZlIGl0IHdoZW4gaXQgbm8gbG9uZ2VyIGlzLgogICAgICAgICAgICBpZiAoZmlsdGVycy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICBjb250YWluZXIuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLnNlbGVjdGVkKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChmaWx0ZXJzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgICAgY29udGFpbmVyLnJlbW92ZUNsYXNzKHRoaXMuY2xhc3Nlcy5zZWxlY3RlZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5zLnVwZGF0aW5nID0gdXBkYXRpbmc7CiAgICAgICAgfTsKICAgICAgICAvKioKICAgICAgICAgKiBGaW5kcyB0aGUgcmF0aW8gb2YgdGhlIG51bWJlciBvZiBkaWZmZXJlbnQgb3B0aW9ucyBpbiB0aGUgdGFibGUgdG8gdGhlIG51bWJlciBvZiByb3dzCiAgICAgICAgICogQHBhcmFtIGJpbnMgdGhlIG51bWJlciBvZiBkaWZmZXJlbnQgb3B0aW9ucyBpbiB0aGUgdGFibGUKICAgICAgICAgKiBAcGFyYW0gcm93Q291bnQgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIGluIHRoZSB0YWJsZQogICAgICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IHJldHVybnMgdGhlIHJhdGlvCiAgICAgICAgICovCiAgICAgICAgU2VhcmNoUGFuZS5wcm90b3R5cGUuX3VuaXF1ZVJhdGlvID0gZnVuY3Rpb24gKGJpbnMsIHJvd0NvdW50KSB7CiAgICAgICAgICAgIGlmIChyb3dDb3VudCA+IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiBiaW5zIC8gcm93Q291bnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogdXBkYXRlcyB0aGUgb3B0aW9ucyB3aXRoaW4gdGhlIHBhbmUKICAgICAgICAgKiBAcGFyYW0gZHJhdyBhIGZsYWcgdG8gZGVmaW5lIHdoZXRoZXIgdGhpcyBoYXMgYmVlbiBjYWxsZWQgZHVlIHRvIGEgZHJhdyBldmVudCBvciBub3QKICAgICAgICAgKi8KICAgICAgICBTZWFyY2hQYW5lLnByb3RvdHlwZS5fdXBkYXRlQ29tbW9uID0gZnVuY3Rpb24gKGRyYXcpIHsKICAgICAgICAgICAgaWYgKGRyYXcgPT09IHZvaWQgMCkgeyBkcmF3ID0gZmFsc2U7IH0KICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBwYW5lcyBpZiBkb2luZyBhIGRlc2VsZWN0LiBpZiBkb2luZyBhIHNlbGVjdCB0aGVuCiAgICAgICAgICAgIC8vIHVwZGF0ZSBhbGwgb2YgdGhlIHBhbmVzIGV4Y2VwdCBmb3IgdGhlIG9uZSBjYXVzaW5nIHRoZSBjaGFuZ2UKICAgICAgICAgICAgaWYgKHRoaXMucy5kdFBhbmUgIT09IHVuZGVmaW5lZCAmJgogICAgICAgICAgICAgICAgKCghdGhpcy5zLmZpbHRlcmluZ0FjdGl2ZSB8fCB0aGlzLmMuY2FzY2FkZVBhbmVzKSB8fCBkcmF3ID09PSB0cnVlKSAmJgogICAgICAgICAgICAgICAgKHRoaXMuYy5jYXNjYWRlUGFuZXMgIT09IHRydWUgfHwgdGhpcy5zLnNlbGVjdFByZXNlbnQgIT09IHRydWUpICYmICF0aGlzLnMubGFzdFNlbGVjdCkgewogICAgICAgICAgICAgICAgdmFyIGNvbE9wdHMgPSB0aGlzLnMuY29sT3B0czsKICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHRoaXMucy5kdFBhbmUucm93cyh7IHNlbGVjdGVkOiB0cnVlIH0pLmRhdGEoKS50b0FycmF5KCk7CiAgICAgICAgICAgICAgICB2YXIgc2Nyb2xsVG9wID0gJCh0aGlzLnMuZHRQYW5lLnRhYmxlKCkubm9kZSgpKS5wYXJlbnQoKVswXS5zY3JvbGxUb3A7CiAgICAgICAgICAgICAgICB2YXIgcm93RGF0YSA9IHRoaXMucy5yb3dEYXRhOwogICAgICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIHBhbmUgaW4gcHJlcGFyYXRpb24gZm9yIGFkZGluZyB0aGUgdXBkYXRlZCBzZWFyY2ggb3B0aW9ucwogICAgICAgICAgICAgICAgdGhpcy5zLmR0UGFuZS5jbGVhcigpOwogICAgICAgICAgICAgICAgLy8gSWYgaXQgaXMgbm90IGEgY3VzdG9tIHBhbmUKICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbEV4aXN0cykgewogICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgcnVuIHBvcHVsYXRlUGFuZSBpZiB0aGUgZGF0YSBoYXMgbm90IGJlZW4gY29sbGVjdGVkIHlldAogICAgICAgICAgICAgICAgICAgIGlmIChyb3dEYXRhLmFycmF5RmlsdGVyLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3B1bGF0ZVBhbmUoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgY2FzY2FkZVBhbmVzIGlzIGFjdGl2ZSBhbmQgdGhlIHRhYmxlIGhhcyByZXR1cm5lZCB0byBpdHMgZGVmYXVsdCBzdGF0ZSB0aGVuCiAgICAgICAgICAgICAgICAgICAgLy8gIHRoZXJlIGlzIGEgbmVlZCB0byB1cGRhdGUgY2VydGFpbiBwYXJ0cyBvZnRoZSByb3dEYXRhLgogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuYy5jYXNjYWRlUGFuZXMKICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5zLmR0LnJvd3MoKS5kYXRhKCkudG9BcnJheSgpLmxlbmd0aCA9PT0gdGhpcy5zLmR0LnJvd3MoeyBzZWFyY2g6ICdhcHBsaWVkJyB9KS5kYXRhKCkudG9BcnJheSgpLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhLmFycmF5RmlsdGVyID0gcm93RGF0YS5hcnJheU9yaWdpbmFsOwogICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhLmJpbnMgPSByb3dEYXRhLmJpbnNPcmlnaW5hbDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGlmIHZpZXdUb3RhbCBvciBjYXNjYWRlUGFuZXMgaXMgYWN0aXZlIHRoZW4gdGhlIGRhdGEgZnJvbSB0aGUgdGFibGUgbXVzdCBiZSByZWFkLgogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuYy52aWV3VG90YWwgfHwgdGhpcy5jLmNhc2NhZGVQYW5lcykgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3B1bGF0ZVBhbmUoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHZpZXdUb3RhbCBvcHRpb24gaXMgc2VsZWN0ZWQgdGhlbiBmaW5kIHRoZSB0b3RhbHMgZm9yIHRoZSB0YWJsZQogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmMudmlld1RvdGFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RldGFpbHNQYW5lKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhLmJpbnNUb3RhbCA9IHJvd0RhdGEuYmluczsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYy52aWV3VG90YWwgJiYgIXRoaXMuYy5jYXNjYWRlUGFuZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcm93RGF0YS5hcnJheUZpbHRlciA9IHJvd0RhdGEuYXJyYXlUb3RhbHM7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGRhdGFQKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGJvdGggdmlldyBUb3RhbCBhbmQgY2FzY2FkZVBhbmVzIGhhdmUgYmVlbiBzZWxlY3RlZCBhbmQgdGhlIGNvdW50IG9mIHRoZSByb3cgaXMgbm90IDAgdGhlbiBhZGQgaXQgdG8gcGFuZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBEbyB0aGlzIGFsc28gaWYgdGhlIHZpZXdUb3RhbCBvcHRpb24gaGFzIGJlZW4gc2VsZWN0ZWQgYW5kIGNhc2NhZGVQYW5lcyBoYXMgbm90CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhUCAmJiAoKHJvd0RhdGEuYmluc1tkYXRhUC5maWx0ZXJdICE9PSB1bmRlZmluZWQgJiYgcm93RGF0YS5iaW5zW2RhdGFQLmZpbHRlcl0gIT09IDAgJiYgdGhpc18xLmMuY2FzY2FkZVBhbmVzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIXRoaXNfMS5jLmNhc2NhZGVQYW5lcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGhpc18xLnMuY2xlYXJpbmcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm93ID0gdGhpc18xLl9hZGRSb3coZGF0YVAuZGlzcGxheSwgZGF0YVAuZmlsdGVyLCAhdGhpc18xLmMudmlld1RvdGFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyByb3dEYXRhLmJpbnNbZGF0YVAuZmlsdGVyXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcm93RGF0YS5iaW5zW2RhdGFQLmZpbHRlcl0gIT09IHVuZGVmaW5lZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJvd0RhdGEuYmluc1tkYXRhUC5maWx0ZXJdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMCwgdGhpc18xLmMudmlld1RvdGFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBTdHJpbmcocm93RGF0YS5iaW5zVG90YWxbZGF0YVAuZmlsdGVyXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJvd0RhdGEuYmluc1tkYXRhUC5maWx0ZXJdLCBkYXRhUC5zb3J0LCBkYXRhUC50eXBlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgb3V0IGlmIHRoZSBmaWx0ZXIgd2FzIHNlbGVjdGVkIGluIHRoZSBwcmV2aW91cyBzZWFyY2gsIGlmIHNvIHNlbGVjdCBpdCBhbmQgcmVtb3ZlIGZyb20gYXJyYXkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0SW5kZXggPSBzZWxlY3RlZC5maW5kSW5kZXgoZnVuY3Rpb24gKGVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5maWx0ZXIgPT09IGRhdGFQLmZpbHRlcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdEluZGV4ICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5zZWxlY3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZC5zcGxpY2Uoc2VsZWN0SW5kZXgsIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICB2YXIgdGhpc18xID0gdGhpczsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gcm93RGF0YS5hcnJheUZpbHRlcjsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGFQID0gX2FbX2ldOwogICAgICAgICAgICAgICAgICAgICAgICBfbG9vcF8xKGRhdGFQKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKGNvbE9wdHMuc2VhcmNoUGFuZXMgIT09IHVuZGVmaW5lZCAmJiBjb2xPcHRzLnNlYXJjaFBhbmVzLm9wdGlvbnMgIT09IHVuZGVmaW5lZCkgfHwKICAgICAgICAgICAgICAgICAgICBjb2xPcHRzLm9wdGlvbnMgIT09IHVuZGVmaW5lZCB8fAogICAgICAgICAgICAgICAgICAgICh0aGlzLmN1c3RvbVBhbmVTZXR0aW5ncyAhPT0gbnVsbCAmJiB0aGlzLmN1c3RvbVBhbmVTZXR0aW5ncy5vcHRpb25zICE9PSB1bmRlZmluZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJvd3MgPSB0aGlzLl9nZXRDb21wYXJpc29uUm93cygpOwogICAgICAgICAgICAgICAgICAgIHZhciBfbG9vcF8yID0gZnVuY3Rpb24gKHJvdykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0SW5kZXggPSBzZWxlY3RlZC5maW5kSW5kZXgoZnVuY3Rpb24gKGVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRpc3BsYXkgPT09IHJvdy5kYXRhKCkuZGlzcGxheSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdEluZGV4ICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LnNlbGVjdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQuc3BsaWNlKHNlbGVjdEluZGV4LCAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSAwLCByb3dzXzEgPSByb3dzOyBfYiA8IHJvd3NfMS5sZW5ndGg7IF9iKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IHJvd3NfMVtfYl07CiAgICAgICAgICAgICAgICAgICAgICAgIF9sb29wXzIocm93KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBBZGQgc2VhcmNoIG9wdGlvbnMgd2hpY2ggd2VyZSBwcmV2aW91c2x5IHNlbGVjdGVkIGJ1dCB3aG9zIHJlc3VsdHMgYXJlIG5vCiAgICAgICAgICAgICAgICAvLyBsb25nZXIgcHJlc2VudCBpbiB0aGUgcmVzdWx0aW5nIGRhdGEgc2V0LgogICAgICAgICAgICAgICAgZm9yICh2YXIgX2MgPSAwLCBzZWxlY3RlZF8xID0gc2VsZWN0ZWQ7IF9jIDwgc2VsZWN0ZWRfMS5sZW5ndGg7IF9jKyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRFbCA9IHNlbGVjdGVkXzFbX2NdOwogICAgICAgICAgICAgICAgICAgIHZhciByb3cgPSB0aGlzLl9hZGRSb3coc2VsZWN0ZWRFbC5kaXNwbGF5LCBzZWxlY3RlZEVsLmZpbHRlciwgMCwgdGhpcy5jLnZpZXdUb3RhbAogICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGVjdGVkRWwudG90YWwKICAgICAgICAgICAgICAgICAgICAgICAgOiAwLCBzZWxlY3RlZEVsLmZpbHRlciwgc2VsZWN0ZWRFbC5maWx0ZXIpOwogICAgICAgICAgICAgICAgICAgIHJvdy5zZWxlY3QoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMucy5kdFBhbmUuZHJhdygpOwogICAgICAgICAgICAgICAgdGhpcy5zLmR0UGFuZS50YWJsZSgpLm5vZGUoKS5wYXJlbnROb2RlLnNjcm9sbFRvcCA9IHNjcm9sbFRvcDsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgU2VhcmNoUGFuZS52ZXJzaW9uID0gJzEuMC4xJzsKICAgICAgICBTZWFyY2hQYW5lLmNsYXNzZXMgPSB7CiAgICAgICAgICAgIGJ1dHRvbkdyb3VwOiAnZHRzcC1idXR0b25Hcm91cCcsCiAgICAgICAgICAgIGJ1dHRvblN1YjogJ2R0c3AtYnV0dG9uU3ViJywKICAgICAgICAgICAgY2xlYXI6ICdkdHNwLWNsZWFyJywKICAgICAgICAgICAgY2xlYXJBbGw6ICdkdHNwLWNsZWFyQWxsJywKICAgICAgICAgICAgY2xlYXJCdXR0b246ICdjbGVhckJ1dHRvbicsCiAgICAgICAgICAgIGNvbnRhaW5lcjogJ2R0c3Atc2VhcmNoUGFuZScsCiAgICAgICAgICAgIGNvdW50QnV0dG9uOiAnZHRzcC1jb3VudEJ1dHRvbicsCiAgICAgICAgICAgIGRpc2FibGVkQnV0dG9uOiAnZHRzcC1kaXNhYmxlZEJ1dHRvbicsCiAgICAgICAgICAgIGR1bGw6ICdkdHNwLWR1bGwnLAogICAgICAgICAgICBoaWRkZW46ICdkdHNwLWhpZGRlbicsCiAgICAgICAgICAgIGhpZGU6ICdkdHNwLWhpZGUnLAogICAgICAgICAgICBsYXlvdXQ6ICdkdHNwLScsCiAgICAgICAgICAgIG5hbWU6ICdkdHNwLW5hbWUnLAogICAgICAgICAgICBuYW1lQnV0dG9uOiAnZHRzcC1uYW1lQnV0dG9uJywKICAgICAgICAgICAgbmFycm93OiAnZHRzcC1uYXJyb3cnLAogICAgICAgICAgICBwYW5lQnV0dG9uOiAnZHRzcC1wYW5lQnV0dG9uJywKICAgICAgICAgICAgcGFuZUlucHV0QnV0dG9uOiAnZHRzcC1wYW5lSW5wdXRCdXR0b24nLAogICAgICAgICAgICBwaWxsOiAnZHRzcC1waWxsJywKICAgICAgICAgICAgc2VhcmNoOiAnZHRzcC1zZWFyY2gnLAogICAgICAgICAgICBzZWFyY2hDb250OiAnZHRzcC1zZWFyY2hDb250JywKICAgICAgICAgICAgc2VhcmNoSWNvbjogJ2R0c3Atc2VhcmNoSWNvbicsCiAgICAgICAgICAgIHNlYXJjaExhYmVsQ29udDogJ2R0c3Atc2VhcmNoQnV0dG9uQ29udCcsCiAgICAgICAgICAgIHNlbGVjdGVkOiAnZHRzcC1zZWxlY3RlZCcsCiAgICAgICAgICAgIHNtYWxsR2FwOiAnZHRzcC1zbWFsbEdhcCcsCiAgICAgICAgICAgIHN1YlJvdzE6ICdkdHNwLXN1YlJvdzEnLAogICAgICAgICAgICBzdWJSb3cyOiAnZHRzcC1zdWJSb3cyJywKICAgICAgICAgICAgc3ViUm93c0NvbnRhaW5lcjogJ2R0c3Atc3ViUm93c0NvbnRhaW5lcicsCiAgICAgICAgICAgIHRpdGxlOiAnZHRzcC10aXRsZScsCiAgICAgICAgICAgIHRvcFJvdzogJ2R0c3AtdG9wUm93JwogICAgICAgIH07CiAgICAgICAgLy8gRGVmaW5lIFNlYXJjaFBhbmVzIGRlZmF1bHQgb3B0aW9ucwogICAgICAgIFNlYXJjaFBhbmUuZGVmYXVsdHMgPSB7CiAgICAgICAgICAgIGNhc2NhZGVQYW5lczogZmFsc2UsCiAgICAgICAgICAgIGNsZWFyOiB0cnVlLAogICAgICAgICAgICBjb21iaW5lcjogJ29yJywKICAgICAgICAgICAgY29udHJvbHM6IHRydWUsCiAgICAgICAgICAgIGNvbnRhaW5lcjogZnVuY3Rpb24gKGR0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZHQudGFibGUoKS5jb250YWluZXIoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGF0YUxlbmd0aDogMzAsCiAgICAgICAgICAgIGR0T3B0czoge30sCiAgICAgICAgICAgIGVtcHR5TWVzc2FnZTogJzxpPk5vIERhdGE8L2k+JywKICAgICAgICAgICAgaGlkZUNvdW50OiBmYWxzZSwKICAgICAgICAgICAgbGF5b3V0OiAnY29sdW1ucy0zJywKICAgICAgICAgICAgb3JkZXJhYmxlOiB0cnVlLAogICAgICAgICAgICBvcnRob2dvbmFsOiB7CiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZGlzcGxheScsCiAgICAgICAgICAgICAgICBoaWRlQ291bnQ6IGZhbHNlLAogICAgICAgICAgICAgICAgc2VhcmNoOiAnZmlsdGVyJywKICAgICAgICAgICAgICAgIHNob3c6IHVuZGVmaW5lZCwKICAgICAgICAgICAgICAgIHNvcnQ6ICdzb3J0JywKICAgICAgICAgICAgICAgIHRocmVzaG9sZDogMC42LAogICAgICAgICAgICAgICAgdHlwZTogJ3R5cGUnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHByZVNlbGVjdDogW10sCiAgICAgICAgICAgIHRocmVzaG9sZDogMC42LAogICAgICAgICAgICB2aWV3VG90YWw6IGZhbHNlCiAgICAgICAgfTsKICAgICAgICByZXR1cm4gU2VhcmNoUGFuZTsKICAgIH0oKSk7CgogICAgdmFyIERhdGFUYWJsZSQxID0gJC5mbi5kYXRhVGFibGU7CiAgICB2YXIgU2VhcmNoUGFuZXMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7CiAgICAgICAgZnVuY3Rpb24gU2VhcmNoUGFuZXMocGFuZVNldHRpbmdzLCBvcHRzLCBmcm9tSW5pdCkgewogICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgICAgICBpZiAoZnJvbUluaXQgPT09IHZvaWQgMCkgeyBmcm9tSW5pdCA9IGZhbHNlOyB9CiAgICAgICAgICAgIHRoaXMucmVnZW5lcmF0aW5nID0gZmFsc2U7CiAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHJlcXVpcmVkIHZlcnNpb24gb2YgRGF0YVRhYmxlcyBpcyBpbmNsdWRlZAogICAgICAgICAgICBpZiAoIURhdGFUYWJsZSQxIHx8ICFEYXRhVGFibGUkMS52ZXJzaW9uQ2hlY2sgfHwgIURhdGFUYWJsZSQxLnZlcnNpb25DaGVjaygnMS4xMC4wJykpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2VhcmNoUGFuZSByZXF1aXJlcyBEYXRhVGFibGVzIDEuMTAgb3IgbmV3ZXInKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBDaGVjayB0aGF0IFNlbGVjdCBpcyBpbmNsdWRlZAogICAgICAgICAgICBpZiAoIURhdGFUYWJsZSQxLnNlbGVjdCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWFyY2hQYW5lIHJlcXVpcmVzIFNlbGVjdCcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciB0YWJsZSA9IG5ldyBEYXRhVGFibGUkMS5BcGkocGFuZVNldHRpbmdzKTsKICAgICAgICAgICAgdGhpcy5jbGFzc2VzID0gJC5leHRlbmQodHJ1ZSwge30sIFNlYXJjaFBhbmVzLmNsYXNzZXMpOwogICAgICAgICAgICAvLyBHZXQgb3B0aW9ucyBmcm9tIHVzZXIKICAgICAgICAgICAgdGhpcy5jID0gJC5leHRlbmQodHJ1ZSwge30sIFNlYXJjaFBhbmVzLmRlZmF1bHRzLCBvcHRzKTsKICAgICAgICAgICAgLy8gQWRkIGV4dHJhIGVsZW1lbnRzIHRvIERPTSBvYmplY3QgaW5jbHVkaW5nIGNsZWFyCiAgICAgICAgICAgIHRoaXMuZG9tID0gewogICAgICAgICAgICAgICAgY2xlYXJBbGw6ICQoJzxidXR0b24gdHlwZT0iYnV0dG9uIj5DbGVhciBBbGw8L2J1dHRvbj4nKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuY2xlYXJBbGwpLAogICAgICAgICAgICAgICAgY29udGFpbmVyOiAkKCc8ZGl2Lz4nKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMucGFuZXMpLnRleHQodGFibGUuaTE4bignc2VhcmNoUGFuZXMubG9hZE1lc3NhZ2UnLCAnTG9hZGluZyBTZWFyY2ggUGFuZXMuLi4nKSksCiAgICAgICAgICAgICAgICBlbXB0eU1lc3NhZ2U6ICQoJzxkaXYvPicpLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5lbXB0eU1lc3NhZ2UpLAogICAgICAgICAgICAgICAgb3B0aW9uczogJCgnPGRpdi8+JykuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLmNvbnRhaW5lciksCiAgICAgICAgICAgICAgICBwYW5lczogJCgnPGRpdi8+JykuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLmNvbnRhaW5lciksCiAgICAgICAgICAgICAgICB0aXRsZTogJCgnPGRpdi8+JykuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLnRpdGxlKSwKICAgICAgICAgICAgICAgIHRpdGxlUm93OiAkKCc8ZGl2Lz4nKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMudGl0bGVSb3cpLAogICAgICAgICAgICAgICAgd3JhcHBlcjogJCgnPGRpdi8+JykKICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5zID0gewogICAgICAgICAgICAgICAgY29sT3B0czogW10sCiAgICAgICAgICAgICAgICBkdDogdGFibGUsCiAgICAgICAgICAgICAgICBmaWx0ZXJQYW5lOiAtMSwKICAgICAgICAgICAgICAgIHBhbmVzOiBbXSwKICAgICAgICAgICAgICAgIHNlbGVjdGlvbkxpc3Q6IFtdLAogICAgICAgICAgICAgICAgdXBkYXRpbmc6IGZhbHNlCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHRhYmxlLnNldHRpbmdzKClbMF0uX3NlYXJjaFBhbmVzID0gdGhpczsKICAgICAgICAgICAgdGhpcy5kb20uY2xlYXJBbGwudGV4dCh0YWJsZS5pMThuKCdzZWFyY2hQYW5lcy5jbGVhck1lc3NhZ2UnLCAnQ2xlYXIgQWxsJykpOwogICAgICAgICAgICB0aGlzLl9nZXRTdGF0ZSgpOwogICAgICAgICAgICBpZiAodGhpcy5zLmR0LnNldHRpbmdzKClbMF0uX2JJbml0Q29tcGxldGUgfHwgZnJvbUluaXQpIHsKICAgICAgICAgICAgICAgIHRoaXMuX3BhbmVEZWNsYXJlKHRhYmxlLCBwYW5lU2V0dGluZ3MsIG9wdHMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdGFibGUub24oJ3ByZUluaXQuZHQnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3BhbmVEZWNsYXJlKHRhYmxlLCBwYW5lU2V0dGluZ3MsIG9wdHMpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogQ2xlYXIgdGhlIHNlbGVjdGlvbnMgb2YgYWxsIG9mIHRoZSBwYW5lcwogICAgICAgICAqLwogICAgICAgIFNlYXJjaFBhbmVzLnByb3RvdHlwZS5jbGVhclNlbGVjdGlvbnMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIC8vIExvYWQgaW4gYWxsIG9mIHRoZSBzZWFyY2hCb3hlcyBpbiB0aGUgZG9jdW1lbnRzCiAgICAgICAgICAgIHZhciBzZWFyY2hlcyA9IHRoaXMuZG9tLmNvbnRhaW5lci5maW5kKHRoaXMuY2xhc3Nlcy5zZWFyY2gpOwogICAgICAgICAgICAvLyBGb3IgZWFjaCBzZWFyY2hCb3ggc2V0IHRoZSBpbnB1dCB0ZXh0IHRvIGJlIGVtcHR5IGFuZCB0aGVuIHRyaWdnZXIKICAgICAgICAgICAgLy8gIGFuIGlucHV0IG9uIHRoZW0gc28gdGhhdCB0aGV5IG5vIGxvbmdlciBmaWx0ZXIgdGhlIHBhbmVzCiAgICAgICAgICAgIHNlYXJjaGVzLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgJCh0aGlzKS52YWwoJycpOwogICAgICAgICAgICAgICAgJCh0aGlzKS50cmlnZ2VyKCdpbnB1dCcpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdmFyIHJldHVybkFycmF5ID0gW107CiAgICAgICAgICAgIC8vIEZvciBldmVyeSBwYW5lLCBjbGVhciB0aGUgc2VsZWN0aW9ucyBpbiB0aGUgcGFuZQogICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5zLnBhbmVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgewogICAgICAgICAgICAgICAgdmFyIHBhbmUgPSBfYVtfaV07CiAgICAgICAgICAgICAgICBpZiAocGFuZS5zLmR0UGFuZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuQXJyYXkucHVzaChwYW5lLmNsZWFyUGFuZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnMuZHQuZHJhdygpOwogICAgICAgICAgICByZXR1cm4gcmV0dXJuQXJyYXk7CiAgICAgICAgfTsKICAgICAgICAvKioKICAgICAgICAgKiByZXR1cm5zIHRoZSBjb250YWluZXIgbm9kZSBmb3IgdGhlIHNlYXJjaFBhbmVzCiAgICAgICAgICovCiAgICAgICAgU2VhcmNoUGFuZXMucHJvdG90eXBlLmdldE5vZGUgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvbS5jb250YWluZXI7CiAgICAgICAgfTsKICAgICAgICAvKioKICAgICAgICAgKiByZWJ1aWxkcyBhbGwgb2YgdGhlIHBhbmVzCiAgICAgICAgICovCiAgICAgICAgU2VhcmNoUGFuZXMucHJvdG90eXBlLnJlYnVpbGQgPSBmdW5jdGlvbiAodGFyZ2V0SWR4KSB7CiAgICAgICAgICAgIGlmICh0YXJnZXRJZHggPT09IHZvaWQgMCkgeyB0YXJnZXRJZHggPSBmYWxzZTsgfQogICAgICAgICAgICAkKHRoaXMuZG9tLmVtcHR5TWVzc2FnZSkucmVtb3ZlKCk7CiAgICAgICAgICAgIC8vIEFzIGEgcmVidWlsZCBmcm9tIHNjcmF0Y2ggaXMgcmVxdWlyZWQsIGVtcHR5IHRoZSBzZWFyY2hwYW5lcyBjb250YWluZXIuCiAgICAgICAgICAgIHZhciByZXR1cm5BcnJheSA9IFtdOwogICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9ucygpOwogICAgICAgICAgICAvLyBSZWJ1aWxkIGVhY2ggcGFuZSBpbmRpdmlkdWFsbHksIGlmIGEgc3BlY2lmaWMgcGFuZSBoYXMgYmVlbiBzZWxlY3RlZCB0aGVuIG9ubHkgcmVidWlsZCB0aGF0IG9uZQogICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5zLnBhbmVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgewogICAgICAgICAgICAgICAgdmFyIHBhbmUgPSBfYVtfaV07CiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0SWR4ICE9PSBmYWxzZSAmJiBwYW5lLnMuaW5kZXggIT09IHRhcmdldElkeCkgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcGFuZS5jbGVhckRhdGEoKTsKICAgICAgICAgICAgICAgIHJldHVybkFycmF5LnB1c2gocGFuZS5yZWJ1aWxkUGFuZSgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBBdHRhY2ggcGFuZXMsIGNsZWFyIGJ1dHRvbnMsIGFuZCB0aXRsZSBiYXIgdG8gdGhlIGRvY3VtZW50CiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlckNvdW50KCk7CiAgICAgICAgICAgIHRoaXMuX2F0dGFjaFBhbmVDb250YWluZXIoKTsKICAgICAgICAgICAgLy8gSWYgYSBzaW5nbGUgcGFuZSBoYXMgYmVlbiByZWJ1aWx0IHRoZW4gcmV0dXJuIG9ubHkgdGhhdCBwYW5lCiAgICAgICAgICAgIGlmIChyZXR1cm5BcnJheS5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5BcnJheVswXTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBPdGhlcndpc2UgcmV0dXJuIGFsbCBvZiB0aGUgcGFuZXMgdGhhdCBoYXZlIGJlZW4gcmVidWlsdAogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5BcnJheTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogUmVkcmF3cyBhbGwgb2YgdGhlIHBhbmVzCiAgICAgICAgICovCiAgICAgICAgU2VhcmNoUGFuZXMucHJvdG90eXBlLnJlZHJhd1BhbmVzID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgdGFibGUgPSB0aGlzLnMuZHQ7CiAgICAgICAgICAgIC8vIE9ubHkgZG8gdGhpcyBpZiB0aGUgcmVkcmF3IGlzbid0IGJlaW5nIHRyaWdnZXJlZCBieSB0aGUgcGFuZXMgdXBkYXRpbmcgdGhlbXNlbHZlcwogICAgICAgICAgICBpZiAoIXRoaXMucy51cGRhdGluZykgewogICAgICAgICAgICAgICAgdmFyIGZpbHRlckFjdGl2ZSA9IHRydWU7CiAgICAgICAgICAgICAgICB2YXIgZmlsdGVyUGFuZSA9IHRoaXMucy5maWx0ZXJQYW5lOwogICAgICAgICAgICAgICAgLy8gSWYgdGhlIG51bWJlciBvZiByb3dzIGN1cnJlbnRseSB2aXNpYmxlIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgdGFibGUKICAgICAgICAgICAgICAgIC8vICB0aGVuIHRoZXJlIGNhbid0IGJlIGFueSBmaWx0ZXJpbmcgdGFraW5nIHBsYWNlCiAgICAgICAgICAgICAgICBpZiAodGFibGUucm93cyh7IHNlYXJjaDogJ2FwcGxpZWQnIH0pLmRhdGEoKS50b0FycmF5KCkubGVuZ3RoID09PSB0YWJsZS5yb3dzKCkuZGF0YSgpLnRvQXJyYXkoKS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBmaWx0ZXJBY3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBpZiB2aWV3VG90YWwgaXMgYWN0aXZlIHRoZW4gaXQgaXMgbmVjZXNzYXJ5IHRvIGRldGVybWluZSB3aGljaCBwYW5lcyBhIHNlbGVjdCBpcyBwcmVzZW50IGluLgogICAgICAgICAgICAgICAgLy8gIElmIHRoZXJlIGlzIG9ubHkgb25lIHBhbmUgd2l0aCBhIHNlbGVjdGlvbiBwcmVzZW50IHRoZW4gaXQgc2hvdWxkIG5vdCBzaG93IHRoZSBmaWx0ZXJlZCBtZXNzYWdlIGFzCiAgICAgICAgICAgICAgICAvLyAgbW9yZSBzZWxlY3Rpb25zIG1heSBiZSBtYWRlIGluIHRoYXQgcGFuZS4KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuYy52aWV3VG90YWwpIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5zLnBhbmVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFuZSA9IF9hW19pXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhbmUucy5kdFBhbmUgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdExlbmd0aCA9IHBhbmUucy5kdFBhbmUucm93cyh7IHNlbGVjdGVkOiB0cnVlIH0pLmRhdGEoKS50b0FycmF5KCkubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgZmlsdGVyUGFuZSA9PT0gLTEgdGhlbiBhIHBhbmUgd2l0aCBhIHNlbGVjdGlvbiBoYXMgbm90IGJlZW4gZm91bmQgeWV0LCBzbyBzZXQgZmlsdGVyUGFuZSB0byB0aGF0IHBhbmVzIGluZGV4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0TGVuZ3RoID4gMCAmJiBmaWx0ZXJQYW5lID09PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhbmUgPSBwYW5lLnMuaW5kZXg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGVuIGlmIGFub3RoZXIgcGFuZSBpcyBmb3VuZCB3aXRoIGEgc2VsZWN0aW9uIHRoZW4gc2V0IGZpbHRlclBhbmUgdG8gbnVsbCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIHNob3cgdGhhdCBtdWx0aXBsZSBwYW5lcyBoYXZlIHNlbGVjdGlvbnMgcHJlc2VudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2VsZWN0TGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhbmUgPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIGRlc2VsZWN0SWR4ID0gdm9pZCAwOwogICAgICAgICAgICAgICAgdmFyIG5ld1NlbGVjdGlvbkxpc3QgPSBbXTsKICAgICAgICAgICAgICAgIC8vIERvbid0IHJ1biB0aGlzIGlmIGl0IGlzIGR1ZSB0byB0aGUgcGFuZXMgcmVnZW5lcmF0aW5nCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucmVnZW5lcmF0aW5nKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSAwLCBfYyA9IHRoaXMucy5wYW5lczsgX2IgPCBfYy5sZW5ndGg7IF9iKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhbmUgPSBfY1tfYl07CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZW50aWZ5IHRoZSBwYW5lIHdoZXJlIGEgc2VsZWN0aW9uIG9yIGRlc2VsZWN0aW9uIGhhcyBiZWVuIG1hZGUgYW5kIGFkZCBpdCB0byB0aGUgbGlzdC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhbmUucy5zZWxlY3RQcmVzZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnMuc2VsZWN0aW9uTGlzdC5wdXNoKHsgaW5kZXg6IHBhbmUucy5pbmRleCwgcm93czogcGFuZS5zLmR0UGFuZS5yb3dzKHsgc2VsZWN0ZWQ6IHRydWUgfSkuZGF0YSgpLnRvQXJyYXkoKSwgcHJvdGVjdDogZmFsc2UgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZS5zdGF0ZS5zYXZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwYW5lLnMuZGVzZWxlY3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2VsZWN0SWR4ID0gcGFuZS5zLmluZGV4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkRGF0YSA9IHBhbmUucy5kdFBhbmUucm93cyh7IHNlbGVjdGVkOiB0cnVlIH0pLmRhdGEoKS50b0FycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWREYXRhLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnMuc2VsZWN0aW9uTGlzdC5wdXNoKHsgaW5kZXg6IHBhbmUucy5pbmRleCwgcm93czogc2VsZWN0ZWREYXRhLCBwcm90ZWN0OiB0cnVlIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnMuc2VsZWN0aW9uTGlzdC5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXN0ID0gdGhpcy5zLnNlbGVjdGlvbkxpc3RbdGhpcy5zLnNlbGVjdGlvbkxpc3QubGVuZ3RoIC0gMV0uaW5kZXg7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9kID0gMCwgX2UgPSB0aGlzLnMucGFuZXM7IF9kIDwgX2UubGVuZ3RoOyBfZCsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFuZSA9IF9lW19kXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmUucy5sYXN0U2VsZWN0ID0gKHBhbmUucy5pbmRleCA9PT0gbGFzdCAmJiB0aGlzLnMuc2VsZWN0aW9uTGlzdC5sZW5ndGggPT09IDEpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBzZWxlY3Rpb25zIGZyb20gdGhlIGxpc3QgZnJvbSB0aGUgcGFuZSB3aGVyZSBhIGRlc2VsZWN0IGhhcyB0YWtlbiBwbGFjZQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zLnNlbGVjdGlvbkxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucy5zZWxlY3Rpb25MaXN0W2ldLmluZGV4ICE9PSBkZXNlbGVjdElkeCB8fCB0aGlzLnMuc2VsZWN0aW9uTGlzdFtpXS5wcm90ZWN0ID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZnVydGhlciA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmluZCBvdXQgaWYgdGhpcyBzZWxlY3Rpb24gaXMgdGhlIGxhc3Qgb25lIGluIHRoZSBsaXN0IGZvciB0aGF0IHBhbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSBpICsgMTsgaiA8IHRoaXMucy5zZWxlY3Rpb25MaXN0Lmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucy5zZWxlY3Rpb25MaXN0W2pdLmluZGV4ID09PSB0aGlzLnMuc2VsZWN0aW9uTGlzdFtpXS5pbmRleCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdXJ0aGVyID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gc2VsZWN0aW9ucyBmb3IgdGhpcyBwYW5lIGluIHRoZSBsaXN0IHRoZW4ganVzdCBwdXNoIHRoaXMgb25lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZ1cnRoZXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25MaXN0LnB1c2godGhpcy5zLnNlbGVjdGlvbkxpc3RbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucy5zZWxlY3Rpb25MaXN0W2ldLnByb3RlY3QgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgYWxsIG9mIHRoZSBwYW5lcyB0byByZWZsZWN0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBmaWx0ZXJzCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2YgPSAwLCBfZyA9IHRoaXMucy5wYW5lczsgX2YgPCBfZy5sZW5ndGg7IF9mKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhbmUgPSBfZ1tfZl07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYW5lLnMuZHRQYW5lICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wRmlsdGVyID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmUucy5maWx0ZXJpbmdBY3RpdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmaWx0ZXJQYW5lICE9PSAtMSAmJiBmaWx0ZXJQYW5lICE9PSBudWxsICYmIGZpbHRlclBhbmUgPT09IHBhbmUucy5pbmRleCkgfHwgZmlsdGVyQWN0aXZlID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBGaWx0ZXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lLnMuZmlsdGVyaW5nQWN0aXZlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lLnVwZGF0ZVBhbmUoIXRlbXBGaWx0ZXIgPyBmYWxzZSA6IGZpbHRlckFjdGl2ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBsYWJlbCB0aGF0IHNob3dzIGhvdyBtYW55IGZpbHRlcnMgYXJlIGluIHBsYWNlCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlRmlsdGVyQ291bnQoKTsKICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbGVuZ3RoIG9mIHRoZSBzZWxlY3Rpb25zIGFyZSBkaWZmZXJlbnQgdGhlbiBzb21lIG9mIHRoZW0gaGF2ZSBiZWVuIHJlbW92ZWQgYW5kIGEgZGVzZWxlY3QgaGFzIG9jY3VyZWQKICAgICAgICAgICAgICAgICAgICBpZiAobmV3U2VsZWN0aW9uTGlzdC5sZW5ndGggPiAwICYmIG5ld1NlbGVjdGlvbkxpc3QubGVuZ3RoIDwgdGhpcy5zLnNlbGVjdGlvbkxpc3QubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nhc2NhZGVSZWdlbihuZXdTZWxlY3Rpb25MaXN0KTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3QgPSBuZXdTZWxlY3Rpb25MaXN0W25ld1NlbGVjdGlvbkxpc3QubGVuZ3RoIC0gMV0uaW5kZXg7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9oID0gMCwgX2ogPSB0aGlzLnMucGFuZXM7IF9oIDwgX2oubGVuZ3RoOyBfaCsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFuZSA9IF9qW19oXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmUucy5sYXN0U2VsZWN0ID0gKHBhbmUucy5pbmRleCA9PT0gbGFzdCAmJiB0aGlzLnMuc2VsZWN0aW9uTGlzdC5sZW5ndGggPT09IDEpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5ld1NlbGVjdGlvbkxpc3QubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgYWxsIG9mIHRoZSBvdGhlciBwYW5lcyBhcyB5b3Ugd291bGQganVzdCBtYWtpbmcgYSBub3JtYWwgc2VsZWN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9rID0gMCwgX2wgPSB0aGlzLnMucGFuZXM7IF9rIDwgX2wubGVuZ3RoOyBfaysrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFuZVVwZGF0ZSA9IF9sW19rXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYW5lVXBkYXRlLnMuZHRQYW5lICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcEZpbHRlciA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZVVwZGF0ZS5zLmZpbHRlcmluZ0FjdGl2ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmaWx0ZXJQYW5lICE9PSAtMSAmJiBmaWx0ZXJQYW5lICE9PSBudWxsICYmIGZpbHRlclBhbmUgPT09IHBhbmVVcGRhdGUucy5pbmRleCkgfHwgZmlsdGVyQWN0aXZlID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRmlsdGVyID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVVcGRhdGUucy5maWx0ZXJpbmdBY3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZVVwZGF0ZS51cGRhdGVQYW5lKCF0ZW1wRmlsdGVyID8gdGVtcEZpbHRlciA6IGZpbHRlckFjdGl2ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfbSA9IDAsIF9vID0gdGhpcy5zLnBhbmVzOyBfbSA8IF9vLmxlbmd0aDsgX20rKykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFuZSA9IF9vW19tXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhbmUucy5kdFBhbmUgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXBGaWx0ZXIgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZS5zLmZpbHRlcmluZ0FjdGl2ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGZpbHRlclBhbmUgIT09IC0xICYmIGZpbHRlclBhbmUgIT09IG51bGwgJiYgZmlsdGVyUGFuZSA9PT0gcGFuZS5zLmluZGV4KSB8fCBmaWx0ZXJBY3RpdmUgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcEZpbHRlciA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmUucy5maWx0ZXJpbmdBY3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmUudXBkYXRlUGFuZSghdGVtcEZpbHRlciA/IHRlbXBGaWx0ZXIgOiBmaWx0ZXJBY3RpdmUpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbGFiZWwgdGhhdCBzaG93cyBob3cgbWFueSBmaWx0ZXJzIGFyZSBpbiBwbGFjZQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlckNvdW50KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIWZpbHRlckFjdGl2ZSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMucy5zZWxlY3Rpb25MaXN0ID0gW107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIC8qKgogICAgICAgICAqIEF0dGFjaCB0aGUgcGFuZXMsIGJ1dHRvbnMgYW5kIHRpdGxlIHRvIHRoZSBkb2N1bWVudAogICAgICAgICAqLwogICAgICAgIFNlYXJjaFBhbmVzLnByb3RvdHlwZS5fYXR0YWNoID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAkKHRoaXMuZG9tLmNvbnRhaW5lcikucmVtb3ZlQ2xhc3ModGhpcy5jbGFzc2VzLmhpZGUpOwogICAgICAgICAgICAkKHRoaXMuZG9tLnRpdGxlUm93KS5yZW1vdmVDbGFzcyh0aGlzLmNsYXNzZXMuaGlkZSk7CiAgICAgICAgICAgICQodGhpcy5kb20udGl0bGVSb3cpLnJlbW92ZSgpOwogICAgICAgICAgICAkKHRoaXMuZG9tLnRpdGxlKS5hcHBlbmRUbyh0aGlzLmRvbS50aXRsZVJvdyk7CiAgICAgICAgICAgIC8vIElmIHRoZSBjbGVhciBidXR0b24gaXMgcGVybWl0dGVkIGF0dGFjaCBpdAogICAgICAgICAgICBpZiAodGhpcy5jLmNsZWFyKSB7CiAgICAgICAgICAgICAgICAkKHRoaXMuZG9tLmNsZWFyQWxsKS5hcHBlbmRUbyh0aGlzLmRvbS50aXRsZVJvdyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJCh0aGlzLmRvbS50aXRsZVJvdykuYXBwZW5kVG8odGhpcy5kb20uY29udGFpbmVyKTsKICAgICAgICAgICAgLy8gQXR0YWNoIHRoZSBjb250YWluZXIgZm9yIGVhY2ggaW5kaXZpZHVhbCBwYW5lIHRvIHRoZSBvdmVyYWxsIGNvbnRhaW5lcgogICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5zLnBhbmVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgewogICAgICAgICAgICAgICAgdmFyIHBhbmUgPSBfYVtfaV07CiAgICAgICAgICAgICAgICAkKHBhbmUuZG9tLmNvbnRhaW5lcikuYXBwZW5kVG8odGhpcy5kb20ucGFuZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEF0dGFjaCBldmVyeXRoaW5nIHRvIHRoZSBkb2N1bWVudAogICAgICAgICAgICAkKHRoaXMuZG9tLnBhbmVzKS5hcHBlbmRUbyh0aGlzLmRvbS5jb250YWluZXIpOwogICAgICAgICAgICBpZiAoJCgnZGl2LicgKyB0aGlzLmNsYXNzZXMuY29udGFpbmVyKS5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgICAgICQodGhpcy5kb20uY29udGFpbmVyKS5wcmVwZW5kVG8odGhpcy5zLmR0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdGhpcy5kb20uY29udGFpbmVyOwogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogQXR0YWNoIHRoZSB0b3Agcm93IGNvbnRhaW5pbmcgdGhlIGZpbHRlciBjb3VudCBhbmQgY2xlYXIgYWxsIGJ1dHRvbgogICAgICAgICAqLwogICAgICAgIFNlYXJjaFBhbmVzLnByb3RvdHlwZS5fYXR0YWNoRXh0cmFzID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAkKHRoaXMuZG9tLmNvbnRhaW5lcikucmVtb3ZlQ2xhc3ModGhpcy5jbGFzc2VzLmhpZGUpOwogICAgICAgICAgICAkKHRoaXMuZG9tLnRpdGxlUm93KS5yZW1vdmVDbGFzcyh0aGlzLmNsYXNzZXMuaGlkZSk7CiAgICAgICAgICAgICQodGhpcy5kb20udGl0bGVSb3cpLnJlbW92ZSgpOwogICAgICAgICAgICAkKHRoaXMuZG9tLnRpdGxlKS5hcHBlbmRUbyh0aGlzLmRvbS50aXRsZVJvdyk7CiAgICAgICAgICAgIC8vIElmIHRoZSBjbGVhciBidXR0b24gaXMgcGVybWl0dGVkIGF0dGFjaCBpdAogICAgICAgICAgICBpZiAodGhpcy5jLmNsZWFyKSB7CiAgICAgICAgICAgICAgICAkKHRoaXMuZG9tLmNsZWFyQWxsKS5hcHBlbmRUbyh0aGlzLmRvbS50aXRsZVJvdyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJCh0aGlzLmRvbS50aXRsZVJvdykuYXBwZW5kVG8odGhpcy5kb20uY29udGFpbmVyKTsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9tLmNvbnRhaW5lcjsKICAgICAgICB9OwogICAgICAgIC8qKgogICAgICAgICAqIElmIHRoZXJlIGFyZSBubyBwYW5lcyB0byBkaXNwbGF5IHRoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGVpdGhlcgogICAgICAgICAqICAgZGlzcGxheSBhIG1lc3NhZ2UgaW4gdGhlaXIgcGxhY2Ugb3IgaGlkZSB0aGVtIGNvbXBsZXRlbHkuCiAgICAgICAgICovCiAgICAgICAgU2VhcmNoUGFuZXMucHJvdG90eXBlLl9hdHRhY2hNZXNzYWdlID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAvLyBDcmVhdGUgYSBtZXNzYWdlIHRvIGRpc3BsYXkgb24gdGhlIHNjcmVlbgogICAgICAgICAgICB2YXIgbWVzc2FnZTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB0aGlzLnMuZHQuaTE4bignc2VhcmNoUGFuZXMuZW1wdHlQYW5lcycsICdObyBTZWFyY2hQYW5lcycpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgbWVzc2FnZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgYW4gZW1wdHkgc3RyaW5nIHRoZW4gc2VhcmNoUGFuZXMuZW1wdHlQYW5lcyBpcyB1bmRlZmluZWQsCiAgICAgICAgICAgIC8vICB0aGVyZWZvcmUgdGhlIHBhbmUgY29udGFpbmVyIHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGRpc3BsYXkKICAgICAgICAgICAgaWYgKG1lc3NhZ2UgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICQodGhpcy5kb20uY29udGFpbmVyKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuaGlkZSk7CiAgICAgICAgICAgICAgICAkKHRoaXMuZG9tLnRpdGxlUm93KS5yZW1vdmVDbGFzcyh0aGlzLmNsYXNzZXMuaGlkZSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkKHRoaXMuZG9tLmNvbnRhaW5lcikucmVtb3ZlQ2xhc3ModGhpcy5jbGFzc2VzLmhpZGUpOwogICAgICAgICAgICAgICAgJCh0aGlzLmRvbS50aXRsZVJvdykuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLmhpZGUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIE90aGVyd2lzZSBkaXNwbGF5IHRoZSBtZXNzYWdlCiAgICAgICAgICAgICQodGhpcy5kb20uZW1wdHlNZXNzYWdlKS50ZXh0KG1lc3NhZ2UpOwogICAgICAgICAgICB0aGlzLmRvbS5lbXB0eU1lc3NhZ2UuYXBwZW5kVG8odGhpcy5kb20uY29udGFpbmVyKTsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9tLmNvbnRhaW5lcjsKICAgICAgICB9OwogICAgICAgIC8qKgogICAgICAgICAqIEF0dGFjaGVzIHRoZSBwYW5lcyB0byB0aGUgZG9jdW1lbnQgYW5kIGRpc3BsYXlzIGEgbWVzc2FnZSBvciBoaWRlcyBpZiB0aGVyZSBhcmUgbm9uZQogICAgICAgICAqLwogICAgICAgIFNlYXJjaFBhbmVzLnByb3RvdHlwZS5fYXR0YWNoUGFuZUNvbnRhaW5lciA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgLy8gSWYgYSBwYW5lIGlzIHRvIGJlIGRpc3BsYXllZCB0aGVuIGF0dGFjaCB0aGUgbm9ybWFsIHBhbmUgb3V0cHV0CiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLnMucGFuZXM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgcGFuZSA9IF9hW19pXTsKICAgICAgICAgICAgICAgIGlmIChwYW5lLnMuZGlzcGxheWVkID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFjaCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIE90aGVyd2lzZSBhdHRhY2ggdGhlIGN1c3RvbSBtZXNzYWdlIG9yIHJlbW92ZSB0aGUgY29udGFpbmVyIGZyb20gdGhlIGRpc3BsYXkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F0dGFjaE1lc3NhZ2UoKTsKICAgICAgICB9OwogICAgICAgIC8qKgogICAgICAgICAqIFByZXBhcmVzIHRoZSBwYW5lcyBmb3Igc2VsZWN0aW9ucyB0byBiZSBtYWRlIHdoZW4gY2FzY2FkZSBpcyBhY3RpdmUgYW5kIGEgZGVzZWxlY3QgaGFzIG9jY3VyZWQKICAgICAgICAgKiBAcGFyYW0gbmV3U2VsZWN0aW9uTGlzdCB0aGUgbGlzdCBvZiBzZWxlY3Rpb25zIHdoaWNoIGFyZSB0byBiZSBtYWRlCiAgICAgICAgICovCiAgICAgICAgU2VhcmNoUGFuZXMucHJvdG90eXBlLl9jYXNjYWRlUmVnZW4gPSBmdW5jdGlvbiAobmV3U2VsZWN0aW9uTGlzdCkgewogICAgICAgICAgICAvLyBTZXQgdGhpcyB0byB0cnVlIHNvIHRoYXQgdGhlIGFjdGlvbnMgdGFrZW4gZG8gbm90IGNhdXNlIHRoaXMgdG8gcnVuIHVudGlsIGl0IGlzIGZpbmlzaGVkCiAgICAgICAgICAgIHRoaXMucmVnZW5lcmF0aW5nID0gdHJ1ZTsKICAgICAgICAgICAgLy8gSWYgb25seSBvbmUgcGFuZSBoYXMgYmVlbiBzZWxlY3RlZCB0aGVuIHRha2Ugbm90ZSBvZiBpdHMgaW5kZXgKICAgICAgICAgICAgdmFyIHNvbGVQYW5lID0gLTE7CiAgICAgICAgICAgIGlmIChuZXdTZWxlY3Rpb25MaXN0Lmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgICAgICAgc29sZVBhbmUgPSBuZXdTZWxlY3Rpb25MaXN0WzBdLmluZGV4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIExldCB0aGUgcGFuZSBrbm93IHRoYXQgYSBjYXNjYWRlUmVnZW4gaXMgdGFraW5nIHBsYWNlIHRvIGF2b2lkIHVuZXhwZWN0ZWQgYmVoYXZpb3VyCiAgICAgICAgICAgIC8vICBhbmQgY2xlYXIgYWxsIG9mIHRoZSBwcmV2aW91cyBzZWxlY3Rpb25zIGluIHRoZSBwYW5lCiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLnMucGFuZXM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgcGFuZSA9IF9hW19pXTsKICAgICAgICAgICAgICAgIHBhbmUuc2V0Q2FzY2FkZVJlZ2VuKHRydWUpOwogICAgICAgICAgICAgICAgcGFuZS5zZXRDbGVhcih0cnVlKTsKICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIHBhbmUgd2l0aCB0aGUgb25seSBzZWxlY3Rpb24gdGhlbiBwYXNzIGl0IGFzIGEgcGFyYW1ldGVyIGludG8gY2xlYXJQYW5lCiAgICAgICAgICAgICAgICBpZiAoKHBhbmUucy5kdFBhbmUgIT09IHVuZGVmaW5lZCAmJiBwYW5lLnMuaW5kZXggPT09IHNvbGVQYW5lKSB8fCBwYW5lLnMuZHRQYW5lICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBwYW5lLmNsZWFyUGFuZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcGFuZS5zZXRDbGVhcihmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gUmVtYWtlIFNlbGVjdGlvbnMKICAgICAgICAgICAgdGhpcy5fbWFrZUNhc2NhZGVTZWxlY3Rpb25zKG5ld1NlbGVjdGlvbkxpc3QpOwogICAgICAgICAgICAvLyBTZXQgdGhlIHNlbGVjdGlvbiBsaXN0IHByb3BlcnR5IHRvIGJlIHRoZSBsaXN0IHdpdGhvdXQgdGhlIHNlbGVjdGlvbnMgZnJvbSB0aGUgZGVzZWxlY3QgcGFuZQogICAgICAgICAgICB0aGlzLnMuc2VsZWN0aW9uTGlzdCA9IG5ld1NlbGVjdGlvbkxpc3Q7CiAgICAgICAgICAgIC8vIFRoZSByZWdlbmVyYXRpb24gb2Ygc2VsZWN0aW9ucyBpcyBvdmVyIHNvIHNldCBpdCBiYWNrIHRvIGZhbHNlCiAgICAgICAgICAgIGZvciAodmFyIF9iID0gMCwgX2MgPSB0aGlzLnMucGFuZXM7IF9iIDwgX2MubGVuZ3RoOyBfYisrKSB7CiAgICAgICAgICAgICAgICB2YXIgcGFuZSA9IF9jW19iXTsKICAgICAgICAgICAgICAgIHBhbmUuc2V0Q2FzY2FkZVJlZ2VuKGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnJlZ2VuZXJhdGluZyA9IGZhbHNlOwogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogQXR0YWNoZXMgdGhlIG1lc3NhZ2UgdG8gdGhlIGRvY3VtZW50IGJ1dCBkb2VzIG5vdCBhZGQgYW55IHBhbmVzCiAgICAgICAgICovCiAgICAgICAgU2VhcmNoUGFuZXMucHJvdG90eXBlLl9jaGVja01lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIC8vIElmIGEgcGFuZSBpcyB0byBiZSBkaXNwbGF5ZWQgdGhlbiBhdHRhY2ggdGhlIG5vcm1hbCBwYW5lIG91dHB1dAogICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gdGhpcy5zLnBhbmVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgewogICAgICAgICAgICAgICAgdmFyIHBhbmUgPSBfYVtfaV07CiAgICAgICAgICAgICAgICBpZiAocGFuZS5zLmRpc3BsYXllZCA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBPdGhlcndpc2UgYXR0YWNoIHRoZSBjdXN0b20gbWVzc2FnZSBvciByZW1vdmUgdGhlIGNvbnRhaW5lciBmcm9tIHRoZSBkaXNwbGF5CiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdHRhY2hNZXNzYWdlKCk7CiAgICAgICAgfTsKICAgICAgICAvKioKICAgICAgICAgKiBHZXRzIHRoZSBzZWxlY3Rpb24gbGlzdCBmcm9tIHRoZSBwcmV2aW91cyBzdGF0ZSBhbmQgc3RvcmVzIGl0IGluIHRoZSBzZWxlY3Rpb25MaXN0IFByb3BlcnR5CiAgICAgICAgICovCiAgICAgICAgU2VhcmNoUGFuZXMucHJvdG90eXBlLl9nZXRTdGF0ZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGxvYWRlZEZpbHRlciA9IHRoaXMucy5kdC5zdGF0ZS5sb2FkZWQoKTsKICAgICAgICAgICAgaWYgKGxvYWRlZEZpbHRlciAmJiBsb2FkZWRGaWx0ZXIuc2VhcmNoUGFuZXMgJiYgbG9hZGVkRmlsdGVyLnNlYXJjaFBhbmVzLnNlbGVjdGlvbkxpc3QgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgdGhpcy5zLnNlbGVjdGlvbkxpc3QgPSBsb2FkZWRGaWx0ZXIuc2VhcmNoUGFuZXMuc2VsZWN0aW9uTGlzdDsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogTWFrZXMgYWxsIG9mIHRoZSBzZWxlY3Rpb25zIHdoZW4gY2FzY2FkZSBpcyBhY3RpdmUKICAgICAgICAgKiBAcGFyYW0gbmV3U2VsZWN0aW9uTGlzdCB0aGUgbGlzdCBvZiBzZWxlY3Rpb25zIHRvIGJlIG1hZGUsIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgb3JpZ2luYWxseSBzZWxlY3RlZAogICAgICAgICAqLwogICAgICAgIFNlYXJjaFBhbmVzLnByb3RvdHlwZS5fbWFrZUNhc2NhZGVTZWxlY3Rpb25zID0gZnVuY3Rpb24gKG5ld1NlbGVjdGlvbkxpc3QpIHsKICAgICAgICAgICAgLy8gbWFrZSBzZWxlY3Rpb25zIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgbWFkZSBwcmV2aW91c2x5LCBleGNsdWRpbmcgdGhvc2UgZnJvbSB0aGUgcGFuZSB3aGVyZSBhIGRlc2VsZWN0IHdhcyBtYWRlCiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgbmV3U2VsZWN0aW9uTGlzdF8xID0gbmV3U2VsZWN0aW9uTGlzdDsgX2kgPCBuZXdTZWxlY3Rpb25MaXN0XzEubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uTGlzdF8xW19pXTsKICAgICAgICAgICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKHBhbmUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAocGFuZS5zLmluZGV4ID09PSBzZWxlY3Rpb24uaW5kZXggJiYgcGFuZS5zLmR0UGFuZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSBhbnkgc2VsZWN0aW9ucyBjdXJyZW50bHkgaW4gdGhlIHBhbmUgdGhlbiBkZXNlbGVjdCB0aGVtIGFzIHdlIGFyZSBhYm91dCB0byBtYWtlIG91ciBuZXcgc2VsZWN0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFuZS5zLmR0UGFuZS5yb3dzKHsgc2VsZWN0ZWQ6IHRydWUgfSkuZGF0YSgpLnRvQXJyYXkoKS5sZW5ndGggPiAwICYmIHBhbmUucy5kdFBhbmUgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZS5zZXRDbGVhcih0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmUuY2xlYXJQYW5lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lLnNldENsZWFyKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2xvb3BfMiA9IGZ1bmN0aW9uIChyb3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmUucy5kdFBhbmUucm93cygpLmV2ZXJ5KGZ1bmN0aW9uIChyb3dJZHgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFuZS5zLmR0UGFuZS5yb3cocm93SWR4KS5kYXRhKCkuZmlsdGVyID09PSByb3cuZmlsdGVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmUucy5kdFBhbmUucm93KHJvd0lkeCkuc2VsZWN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdCBldmVyeSByb3cgaW4gdGhlIHBhbmUgdGhhdCB3YXMgc2VsZWN0ZWQgcHJldmlvdXNseQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gc2VsZWN0aW9uLnJvd3M7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm93ID0gX2FbX2ldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgX2xvb3BfMihyb3cpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbGFiZWwgdGhhdCBzaG93cyBob3cgbWFueSBmaWx0ZXJzIGFyZSBpbiBwbGFjZQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzXzEuX3VwZGF0ZUZpbHRlckNvdW50KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIHZhciB0aGlzXzEgPSB0aGlzOwogICAgICAgICAgICAgICAgLy8gQXMgdGhlIHNlbGVjdGlvbnMgbWF5IGhhdmUgYmVlbiBtYWRlIGFjcm9zcyB0aGUgcGFuZXMgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdG8gdGhlIHBhbmUgaW5kZXggd2UgbXVzdCBpZGVudGlmeQogICAgICAgICAgICAgICAgLy8gIHdoaWNoIHBhbmUgaGFzIHRoZSBpbmRleCBvZiB0aGUgc2VsZWN0aW9uLiBUaGlzIGlzIGFsc28gaW1wb3J0YW50IGZvciBjb2xyZW9yZGVyIGV0YwogICAgICAgICAgICAgICAgZm9yICh2YXIgX2EgPSAwLCBfYiA9IHRoaXMucy5wYW5lczsgX2EgPCBfYi5sZW5ndGg7IF9hKyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcGFuZSA9IF9iW19hXTsKICAgICAgICAgICAgICAgICAgICBfbG9vcF8xKHBhbmUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBzdGF0ZSBpcyBzYXZlZCBhZnRlciBhbGwgb2YgdGhlc2Ugc2VsZWN0aW9ucwogICAgICAgICAgICB0aGlzLnMuZHQuc3RhdGUuc2F2ZSgpOwogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogRGVjbGFyZXMgdGhlIGluc3RhbmNlcyBvZiBpbmRpdmlkdWFsIHNlYXJjaHBhbmVzIGRlcGVuZGFudCBvbiB0aGUgbnVtYmVyIG9mIGNvbHVtbnMuCiAgICAgICAgICogSXQgaXMgbmVjZXNzYXJ5IHRvIHJ1biB0aGlzIG9uY2UgcHJlSW5pdCBoYXMgY29tcGxldGVkIG90aGVyd2lzZSBubyBwYW5lcyB3aWxsIGJlCiAgICAgICAgICogIGNyZWF0ZWQgYXMgdGhlIGNvbHVtbiBjb3VudCB3aWxsIGJlIDAuCiAgICAgICAgICogQHBhcmFtIHRhYmxlIHRoZSBEYXRhVGFibGUgYXBpIGZvciB0aGUgcGFyZW50IHRhYmxlCiAgICAgICAgICogQHBhcmFtIHBhbmVTZXR0aW5ncyB0aGUgc2V0dGluZ3MgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yCiAgICAgICAgICogQHBhcmFtIG9wdHMgdGhlIG9wdGlvbnMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yCiAgICAgICAgICovCiAgICAgICAgU2VhcmNoUGFuZXMucHJvdG90eXBlLl9wYW5lRGVjbGFyZSA9IGZ1bmN0aW9uICh0YWJsZSwgcGFuZVNldHRpbmdzLCBvcHRzKSB7CiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgICAgICAgIC8vIENyZWF0ZSBQYW5lcwogICAgICAgICAgICB0YWJsZQogICAgICAgICAgICAgICAgLmNvbHVtbnModGhpcy5jLmNvbHVtbnMubGVuZ3RoID4gMCA/IHRoaXMuYy5jb2x1bW5zIDogdW5kZWZpbmVkKQogICAgICAgICAgICAgICAgLmVxKDApCiAgICAgICAgICAgICAgICAuZWFjaChmdW5jdGlvbiAoaWR4KSB7CiAgICAgICAgICAgICAgICBfdGhpcy5zLnBhbmVzLnB1c2gobmV3IFNlYXJjaFBhbmUocGFuZVNldHRpbmdzLCBvcHRzLCBpZHgsIF90aGlzLmMubGF5b3V0LCBfdGhpcy5kb20ucGFuZXMpKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFueSBleHRyYSBjdXN0b20gcGFuZXMgZGVmaW5lZCB0aGVuIGNyZWF0ZSBwYW5lcyBmb3IgdGhlbSB0b28KICAgICAgICAgICAgdmFyIHJvd0xlbmd0aCA9IHRhYmxlLmNvbHVtbnMoKS5lcSgwKS50b0FycmF5KCkubGVuZ3RoOwogICAgICAgICAgICB2YXIgcGFuZUxlbmd0aCA9IHRoaXMuYy5wYW5lcy5sZW5ndGg7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZUxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgaWQgPSByb3dMZW5ndGggKyBpOwogICAgICAgICAgICAgICAgdGhpcy5zLnBhbmVzLnB1c2gobmV3IFNlYXJjaFBhbmUocGFuZVNldHRpbmdzLCBvcHRzLCBpZCwgdGhpcy5jLmxheW91dCwgdGhpcy5kb20ucGFuZXMsIHRoaXMuYy5wYW5lc1tpXSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIElmIHRoaXMgaW50ZXJuYWwgcHJvcGVydHkgaXMgdHJ1ZSB0aGVuIHRoZSBEYXRhVGFibGUgaGFzIGJlZW4gaW5pdGlhbGlzZWQgYWxyZWFkeQogICAgICAgICAgICBpZiAodGhpcy5zLmR0LnNldHRpbmdzKClbMF0uX2JJbml0Q29tcGxldGUpIHsKICAgICAgICAgICAgICAgIHRoaXMuX3BhbmVTdGFydHVwKHRhYmxlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBhZGQgdGhlIHBhbmVTdGFydHVwIGZ1bmN0aW9uIHRvIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSB0byBiZSBydW4gd2hlbiB0aGUgdGFibGUgaXMgaW5pdGlhbGlzZWQKICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBnYXJhdW50ZWUgdGhhdCB0aGUgcGFuZXMgYXJlIGluaXRpYWxpc2VkIGJlZm9yZSB0aGUgaW5pdCBldmVudCBhbmQgaW5pdCBDb21wbGV0ZSBjYWxsYmFjayBpcyBmaXJlZAogICAgICAgICAgICAgICAgdGhpcy5zLmR0LnNldHRpbmdzKClbMF0uYW9Jbml0Q29tcGxldGUucHVzaCh7IGZuOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wYW5lU3RhcnR1cCh0YWJsZSk7CiAgICAgICAgICAgICAgICAgICAgfSB9KTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogUnVucyB0aGUgc3RhcnQgdXAgZnVuY3Rpb25zIGZvciB0aGUgcGFuZXMgdG8gZW5hYmxlIGxpc3RlbmVycyBhbmQgcG9wdWxhdGUgcGFuZXMKICAgICAgICAgKiBAcGFyYW0gdGFibGUgdGhlIERhdGFUYWJsZSBhcGkgZm9yIHRoZSBwYXJlbnQgVGFibGUKICAgICAgICAgKi8KICAgICAgICBTZWFyY2hQYW5lcy5wcm90b3R5cGUuX3BhbmVTdGFydHVwID0gZnVuY3Rpb24gKHRhYmxlKSB7CiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgICAgICAgIC8vIE1hZ2ljIG51bWJlciBvZiA1MDAgaXMgYSBndWVzcyBhdCB3aGF0IHdpbGwgYmUgZmFzdAogICAgICAgICAgICBpZiAodGhpcy5zLmR0LnBhZ2UuaW5mbygpLnJlY29yZHNUb3RhbCA8PSA1MDApIHsKICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0dXAodGFibGUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N0YXJ0dXAodGFibGUpOwogICAgICAgICAgICAgICAgfSwgMTAwKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogSW5pdGlhbGlzZXMgdGhlIHRhYmxlcyBwcmV2aW91cy9wcmVzZXQgc2VsZWN0aW9ucyBhbmQgaW5pdGlhbGlzZXMgY2FsbGJhY2tzIGZvciBldmVudHMKICAgICAgICAgKiBAcGFyYW0gdGFibGUgdGhlIHBhcmVudCB0YWJsZSBmb3Igd2hpY2ggdGhlIHNlYXJjaFBhbmVzIGFyZSBiZWluZyBjcmVhdGVkCiAgICAgICAgICovCiAgICAgICAgU2VhcmNoUGFuZXMucHJvdG90eXBlLl9zdGFydHVwID0gZnVuY3Rpb24gKHRhYmxlKSB7CiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgICAgICAgICQodGhpcy5kb20uY29udGFpbmVyKS50ZXh0KCcnKTsKICAgICAgICAgICAgLy8gQXR0YWNoIGNsZWFyIGJ1dHRvbiBhbmQgdGl0bGUgYmFyIHRvIHRoZSBkb2N1bWVudAogICAgICAgICAgICB0aGlzLl9hdHRhY2hFeHRyYXMoKTsKICAgICAgICAgICAgJCh0aGlzLmRvbS5jb250YWluZXIpLmFwcGVuZCh0aGlzLmRvbS5wYW5lcyk7CiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSB0aGlzLnMucGFuZXM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgcGFuZSA9IF9hW19pXTsKICAgICAgICAgICAgICAgIHBhbmUucmVidWlsZFBhbmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLl91cGRhdGVGaWx0ZXJDb3VudCgpOwogICAgICAgICAgICB0aGlzLl9jaGVja01lc3NhZ2UoKTsKICAgICAgICAgICAgLy8gV2hlbiBhIGRyYXcgaXMgY2FsbGVkIG9uIHRoZSBEYXRhVGFibGUsIHVwZGF0ZSBhbGwgb2YgdGhlIHBhbmVzIGluY2FzZSB0aGUgZGF0YSBpbiB0aGUgRGF0YVRhYmxlIGhhcyBjaGFuZ2VkCiAgICAgICAgICAgIHRhYmxlLm9uKCdkcmF3LmR0c3BzJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgX3RoaXMuX3VwZGF0ZUZpbHRlckNvdW50KCk7CiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuYy5jYXNjYWRlUGFuZXMgfHwgX3RoaXMuYy52aWV3VG90YWwpIHsKICAgICAgICAgICAgICAgICAgICBfdGhpcy5yZWRyYXdQYW5lcygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX3RoaXMucy5maWx0ZXJQYW5lID0gLTE7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAvLyBXaGVuZXZlciBhIHN0YXRlIHNhdmUgb2NjdXJzIHN0b3JlIHRoZSBzZWxlY3Rpb24gbGlzdCBpbiB0aGUgc3RhdGUgb2JqZWN0CiAgICAgICAgICAgIHRoaXMucy5kdC5vbignc3RhdGVTYXZlUGFyYW1zLmR0c3AnLCBmdW5jdGlvbiAoZSwgc2V0dGluZ3MsIGRhdGEpIHsKICAgICAgICAgICAgICAgIGlmIChkYXRhLnNlYXJjaFBhbmVzID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBkYXRhLnNlYXJjaFBhbmVzID0ge307CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkYXRhLnNlYXJjaFBhbmVzLnNlbGVjdGlvbkxpc3QgPSBfdGhpcy5zLnNlbGVjdGlvbkxpc3Q7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAvLyBJZiBjYXNjYWRlUGFuZXMgaXMgYWN0aXZlIHRoZW4gbWFrZSB0aGUgcHJldmlvdXMgc2VsZWN0aW9ucyBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIHByZXZpb3VzbHkKICAgICAgICAgICAgaWYgKHRoaXMucy5zZWxlY3Rpb25MaXN0Lmxlbmd0aCA+IDAgJiYgdGhpcy5jLmNhc2NhZGVQYW5lcykgewogICAgICAgICAgICAgICAgdGhpcy5fY2FzY2FkZVJlZ2VuKHRoaXMucy5zZWxlY3Rpb25MaXN0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBQcmVTZWxlY3QgYW55IHNlbGVjdGlvbnMgd2hpY2ggaGF2ZSBiZWVuIGRlZmluZWQgdXNpbmcgdGhlIHByZVNlbGVjdCBvcHRpb24KICAgICAgICAgICAgdGFibGUKICAgICAgICAgICAgICAgIC5jb2x1bW5zKHRoaXMuYy5jb2x1bW5zLmxlbmd0aCA+IDAgPyB0aGlzLmMuY29sdW1ucyA6IHVuZGVmaW5lZCkKICAgICAgICAgICAgICAgIC5lcSgwKQogICAgICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24gKGlkeCkgewogICAgICAgICAgICAgICAgaWYgKF90aGlzLnMucGFuZXNbaWR4XSAhPT0gdW5kZWZpbmVkICYmCiAgICAgICAgICAgICAgICAgICAgX3RoaXMucy5wYW5lc1tpZHhdLnMuZHRQYW5lICE9PSB1bmRlZmluZWQgJiYKICAgICAgICAgICAgICAgICAgICBfdGhpcy5zLnBhbmVzW2lkeF0ucy5jb2xPcHRzLnByZVNlbGVjdCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxlTGVuZ3RoID0gX3RoaXMucy5wYW5lc1tpZHhdLnMuZHRQYW5lLnJvd3MoKS5kYXRhKCkudG9BcnJheSgpLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYmxlTGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLnMucGFuZXNbaWR4XS5zLmNvbE9wdHMucHJlU2VsZWN0LmluZGV4T2YoX3RoaXMucy5wYW5lc1tpZHhdLnMuZHRQYW5lLmNlbGwoaSwgMCkuZGF0YSgpKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnMucGFuZXNbaWR4XS5zLmR0UGFuZS5yb3coaSkuc2VsZWN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5zLnBhbmVzW2lkeF0udXBkYXRlVGFibGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdGl0bGUgYmFyIHRvIHNob3cgaG93IG1hbnkgZmlsdGVycyBoYXZlIGJlZW4gc2VsZWN0ZWQKICAgICAgICAgICAgdGhpcy5fdXBkYXRlRmlsdGVyQ291bnQoKTsKICAgICAgICAgICAgLy8gSWYgdGhlIHRhYmxlIGlzIGRlc3Ryb3llZCBhbmQgcmVzdGFydGVkIHRoZW4gY2xlYXIgdGhlIHNlbGVjdGlvbnMgc28gdGhhdCB0aGV5IGRvIG5vdCBwZXJzaXN0LgogICAgICAgICAgICB0YWJsZS5vbignZGVzdHJveS5kdHNwcycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2EgPSBfdGhpcy5zLnBhbmVzOyBfaSA8IF9hLmxlbmd0aDsgX2krKykgewogICAgICAgICAgICAgICAgICAgIHZhciBwYW5lID0gX2FbX2ldOwogICAgICAgICAgICAgICAgICAgIHBhbmUuZGVzdHJveSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGFibGUub2ZmKCcuZHRzcHMnKTsKICAgICAgICAgICAgICAgICQoX3RoaXMuZG9tLmNsZWFyQWxsKS5vZmYoJy5kdHNwcycpOwogICAgICAgICAgICAgICAgJChfdGhpcy5kb20uY29udGFpbmVyKS5yZW1vdmUoKTsKICAgICAgICAgICAgICAgIF90aGlzLmNsZWFyU2VsZWN0aW9ucygpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgLy8gV2hlbiB0aGUgY2xlYXIgQWxsIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkIGNsZWFyIGFsbCBvZiB0aGUgc2VsZWN0aW9ucyBpbiB0aGUgcGFuZXMKICAgICAgICAgICAgaWYgKHRoaXMuYy5jbGVhcikgewogICAgICAgICAgICAgICAgJCh0aGlzLmRvbS5jbGVhckFsbCkub24oJ2NsaWNrLmR0c3BzJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIF90aGlzLmNsZWFyU2VsZWN0aW9ucygpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGFibGUuc2V0dGluZ3MoKVswXS5fc2VhcmNoUGFuZXMgPSB0aGlzOwogICAgICAgIH07CiAgICAgICAgLyoqCiAgICAgICAgICogVXBkYXRlcyB0aGUgbnVtYmVyIG9mIGZpbHRlcnMgdGhhdCBoYXZlIGJlZW4gYXBwbGllZCBpbiB0aGUgdGl0bGUKICAgICAgICAgKi8KICAgICAgICBTZWFyY2hQYW5lcy5wcm90b3R5cGUuX3VwZGF0ZUZpbHRlckNvdW50ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZmlsdGVyQ291bnQgPSAwOwogICAgICAgICAgICAvLyBBZGQgdGhlIG51bWJlciBvZiBhbGwgb2YgdGhlIGZpbHRlcnMgdGhyb3VnaG91dCB0aGUgcGFuZXMKICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfYSA9IHRoaXMucy5wYW5lczsgX2kgPCBfYS5sZW5ndGg7IF9pKyspIHsKICAgICAgICAgICAgICAgIHZhciBwYW5lID0gX2FbX2ldOwogICAgICAgICAgICAgICAgaWYgKHBhbmUucy5kdFBhbmUgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGZpbHRlckNvdW50ICs9IHBhbmUuZ2V0UGFuZUNvdW50KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gUnVuIHRoZSBtZXNzYWdlIHRocm91Z2ggdGhlIGludGVybmF0aW9uYWxpc2F0aW9uIG1ldGhvZCB0byBpbXByb3ZlIHJlYWRhYmlsaXR5CiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gdGhpcy5zLmR0LmkxOG4oJ3NlYXJjaFBhbmVzLnRpdGxlJywgJ0ZpbHRlcnMgQWN0aXZlIC0gJWQnLCBmaWx0ZXJDb3VudCk7CiAgICAgICAgICAgICQodGhpcy5kb20udGl0bGUpLnRleHQobWVzc2FnZSk7CiAgICAgICAgfTsKICAgICAgICBTZWFyY2hQYW5lcy52ZXJzaW9uID0gJzEuMC4xJzsKICAgICAgICBTZWFyY2hQYW5lcy5jbGFzc2VzID0gewogICAgICAgICAgICBjbGVhcjogJ2R0c3AtY2xlYXInLAogICAgICAgICAgICBjbGVhckFsbDogJ2R0c3AtY2xlYXJBbGwnLAogICAgICAgICAgICBjb250YWluZXI6ICdkdHNwLXNlYXJjaFBhbmVzJywKICAgICAgICAgICAgZW1wdHlNZXNzYWdlOiAnZHRzcC1lbXB0eU1lc3NhZ2UnLAogICAgICAgICAgICBoaWRlOiAnZHRzcC1oaWRkZW4nLAogICAgICAgICAgICBwYW5lczogJ2R0c3AtcGFuZXNDb250YWluZXInLAogICAgICAgICAgICBzZWFyY2g6ICdkdHNwLXNlYXJjaCcsCiAgICAgICAgICAgIHRpdGxlOiAnZHRzcC10aXRsZScsCiAgICAgICAgICAgIHRpdGxlUm93OiAnZHRzcC10aXRsZVJvdycKICAgICAgICB9OwogICAgICAgIC8vIERlZmluZSBTZWFyY2hQYW5lcyBkZWZhdWx0IG9wdGlvbnMKICAgICAgICBTZWFyY2hQYW5lcy5kZWZhdWx0cyA9IHsKICAgICAgICAgICAgY2FzY2FkZVBhbmVzOiBmYWxzZSwKICAgICAgICAgICAgY2xlYXI6IHRydWUsCiAgICAgICAgICAgIGNvbnRhaW5lcjogZnVuY3Rpb24gKGR0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZHQudGFibGUoKS5jb250YWluZXIoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgY29sdW1uczogW10sCiAgICAgICAgICAgIGxheW91dDogJ2NvbHVtbnMtMycsCiAgICAgICAgICAgIHBhbmVzOiBbXSwKICAgICAgICAgICAgdmlld1RvdGFsOiBmYWxzZQogICAgICAgIH07CiAgICAgICAgcmV0dXJuIFNlYXJjaFBhbmVzOwogICAgfSgpKTsKCiAgICAvKiEgU2VhcmNoUGFuZXMgMS4wLjEKICAgICAqIDIwMTktMjAyMCBTcHJ5TWVkaWEgTHRkIC0gZGF0YXRhYmxlcy5uZXQvbGljZW5zZQogICAgICovCiAgICAvLyBEYXRhVGFibGVzIGV4dGVuc2lvbnMgY29tbW9uIFVNRC4gTm90ZSB0aGF0IHRoaXMgYWxsb3dzIGZvciBBTUQsIENvbW1vbkpTCiAgICAvLyAod2l0aCB3aW5kb3cgYW5kIGpRdWVyeSBiZWluZyBhbGxvd2VkIGFzIHBhcmFtZXRlcnMgdG8gdGhlIHJldHVybmVkCiAgICAvLyBmdW5jdGlvbikgb3IganVzdCBkZWZhdWx0IGJyb3dzZXIgbG9hZGluZy4KICAgIChmdW5jdGlvbiAoZmFjdG9yeSkgewogICAgICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsKICAgICAgICAgICAgLy8gQU1ECiAgICAgICAgICAgIGRlZmluZShbJ2pxdWVyeScsICdkYXRhdGFibGVzLm5ldCddLCBmdW5jdGlvbiAoJCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhY3RvcnkoJCwgd2luZG93LCBkb2N1bWVudCk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHsKICAgICAgICAgICAgLy8gQ29tbW9uSlMKICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocm9vdCwgJCkgewogICAgICAgICAgICAgICAgaWYgKCFyb290KSB7CiAgICAgICAgICAgICAgICAgICAgcm9vdCA9IHdpbmRvdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghJCB8fCAhJC5mbi5kYXRhVGFibGUpIHsKICAgICAgICAgICAgICAgICAgICAkID0gcmVxdWlyZSgnZGF0YXRhYmxlcy5uZXQnKShyb290LCAkKS4kOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGZhY3RvcnkoJCwgcm9vdCwgcm9vdC5kb2N1bWVudCk7CiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAvLyBCcm93c2VyIC0gYXNzdW1lIGpRdWVyeSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZAogICAgICAgICAgICBmYWN0b3J5KHdpbmRvdy5qUXVlcnksIHdpbmRvdywgZG9jdW1lbnQpOwogICAgICAgIH0KICAgIH0oZnVuY3Rpb24gKCQsIHdpbmRvdywgZG9jdW1lbnQpIHsKICAgICAgICB2YXIgRGF0YVRhYmxlID0gJC5mbi5kYXRhVGFibGU7CiAgICAgICAgJC5mbi5kYXRhVGFibGUuU2VhcmNoUGFuZXMgPSBTZWFyY2hQYW5lczsKICAgICAgICAkLmZuLkRhdGFUYWJsZS5TZWFyY2hQYW5lcyA9IFNlYXJjaFBhbmVzOwogICAgICAgICQuZm4uZGF0YVRhYmxlLlNlYXJjaFBhbmUgPSBTZWFyY2hQYW5lOwogICAgICAgICQuZm4uRGF0YVRhYmxlLlNlYXJjaFBhbmUgPSBTZWFyY2hQYW5lOwogICAgICAgIERhdGFUYWJsZS5BcGkucmVnaXN0ZXIoJ3NlYXJjaFBhbmVzLnJlYnVpbGQoKScsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0b3IoJ3RhYmxlJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoUGFuZXMpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFBhbmVzLnJlYnVpbGQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgRGF0YVRhYmxlLkFwaS5yZWdpc3RlcignY29sdW1uKCkucGFuZU9wdGlvbnMoKScsIGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZXJhdG9yKCdjb2x1bW4nLCBmdW5jdGlvbiAoaWR4KSB7CiAgICAgICAgICAgICAgICB2YXIgY29sID0gdGhpcy5hb0NvbHVtbnNbaWR4XTsKICAgICAgICAgICAgICAgIGlmICghY29sLnNlYXJjaFBhbmVzKSB7CiAgICAgICAgICAgICAgICAgICAgY29sLnNlYXJjaFBhbmVzID0ge307CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb2wuc2VhcmNoUGFuZXMudmFsdWVzID0gb3B0aW9uczsKICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFBhbmVzKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hQYW5lcy5yZWJ1aWxkKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIHZhciBhcGlSZWdpc3RlciA9ICQuZm4uZGF0YVRhYmxlLkFwaS5yZWdpc3RlcjsKICAgICAgICBhcGlSZWdpc3Rlcignc2VhcmNoUGFuZXMoKScsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSk7CiAgICAgICAgYXBpUmVnaXN0ZXIoJ3NlYXJjaFBhbmVzLmNsZWFyU2VsZWN0aW9ucygpJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgY3R4ID0gdGhpcy5jb250ZXh0WzBdOwogICAgICAgICAgICBjdHguX3NlYXJjaFBhbmVzLmNsZWFyU2VsZWN0aW9ucygpOwogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9KTsKICAgICAgICBhcGlSZWdpc3Rlcignc2VhcmNoUGFuZXMucmVidWlsZFBhbmUoKScsIGZ1bmN0aW9uICh0YXJnZXRJZHgpIHsKICAgICAgICAgICAgdmFyIGN0eCA9IHRoaXMuY29udGV4dFswXTsKICAgICAgICAgICAgY3R4Ll9zZWFyY2hQYW5lcy5yZWJ1aWxkKHRhcmdldElkeCk7CiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0pOwogICAgICAgIGFwaVJlZ2lzdGVyKCdzZWFyY2hQYW5lcy5jb250YWluZXIoKScsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGN0eCA9IHRoaXMuY29udGV4dFswXTsKICAgICAgICAgICAgcmV0dXJuIGN0eC5fc2VhcmNoUGFuZXMuZ2V0Tm9kZSgpOwogICAgICAgIH0pOwogICAgICAgICQuZm4uZGF0YVRhYmxlLmV4dC5idXR0b25zLnNlYXJjaFBhbmVzQ2xlYXIgPSB7CiAgICAgICAgICAgIHRleHQ6ICdDbGVhciBQYW5lcycsCiAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24gKGUsIGR0LCBub2RlLCBjb25maWcpIHsKICAgICAgICAgICAgICAgIGR0LnNlYXJjaFBhbmVzLmNsZWFyU2VsZWN0aW9ucygpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICAkLmZuLmRhdGFUYWJsZS5leHQuYnV0dG9ucy5zZWFyY2hQYW5lcyA9IHsKICAgICAgICAgICAgdGV4dDogJ1NlYXJjaCBQYW5lcycsCiAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChkdCwgbm9kZSwgY29uZmlnKSB7CiAgICAgICAgICAgICAgICB2YXIgcGFuZXMgPSBuZXcgJC5mbi5kYXRhVGFibGUuU2VhcmNoUGFuZXMoZHQsIHsKICAgICAgICAgICAgICAgICAgICBmaWx0ZXJDaGFuZ2VkOiBmdW5jdGlvbiAoY291bnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZHQuYnV0dG9uKG5vZGUpLnRleHQoZHQuaTE4bignc2VhcmNoUGFuZXMuY29sbGFwc2UnLCB7IDA6ICdTZWFyY2hQYW5lcycsIF86ICdTZWFyY2hQYW5lcyAoJWQpJyB9LCBjb3VudCkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBkdC5pMThuKCdzZWFyY2hQYW5lcy5jb2xsYXBzZScsICdTZWFyY2hQYW5lcycpOwogICAgICAgICAgICAgICAgZHQuYnV0dG9uKG5vZGUpLnRleHQobWVzc2FnZSk7CiAgICAgICAgICAgICAgICBjb25maWcuX3BhbmVzID0gcGFuZXM7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGFjdGlvbjogZnVuY3Rpb24gKGUsIGR0LCBub2RlLCBjb25maWcpIHsKICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXIoY29uZmlnLl9wYW5lcy5nZXROb2RlKCksIHsKICAgICAgICAgICAgICAgICAgICBhbGlnbjogJ2R0LWNvbnRhaW5lcicKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgY29uZmlnLl9wYW5lcy5hZGp1c3QoKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgZnVuY3Rpb24gX2luaXQoc2V0dGluZ3MsIGZyb21QcmUpIHsKICAgICAgICAgICAgaWYgKGZyb21QcmUgPT09IHZvaWQgMCkgeyBmcm9tUHJlID0gZmFsc2U7IH0KICAgICAgICAgICAgdmFyIGFwaSA9IG5ldyBEYXRhVGFibGUuQXBpKHNldHRpbmdzKTsKICAgICAgICAgICAgdmFyIG9wdHMgPSBhcGkuaW5pdCgpLnNlYXJjaFBhbmVzIHx8IERhdGFUYWJsZS5kZWZhdWx0cy5zZWFyY2hQYW5lczsKICAgICAgICAgICAgdmFyIHNlYXJjaFBhbmVzID0gbmV3IFNlYXJjaFBhbmVzKGFwaSwgb3B0cywgZnJvbVByZSk7CiAgICAgICAgICAgIHZhciBub2RlID0gc2VhcmNoUGFuZXMuZ2V0Tm9kZSgpOwogICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICB9CiAgICAgICAgLy8gQXR0YWNoIGEgbGlzdGVuZXIgdG8gdGhlIGRvY3VtZW50IHdoaWNoIGxpc3RlbnMgZm9yIERhdGFUYWJsZXMgaW5pdGlhbGlzYXRpb24KICAgICAgICAvLyBldmVudHMgc28gd2UgY2FuIGF1dG9tYXRpY2FsbHkgaW5pdGlhbGlzZQogICAgICAgICQoZG9jdW1lbnQpLm9uKCdwcmVJbml0LmR0LmR0c3AnLCBmdW5jdGlvbiAoZSwgc2V0dGluZ3MsIGpzb24pIHsKICAgICAgICAgICAgaWYgKGUubmFtZXNwYWNlICE9PSAnZHQnKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHNldHRpbmdzLm9Jbml0LnNlYXJjaFBhbmVzIHx8CiAgICAgICAgICAgICAgICBEYXRhVGFibGUuZGVmYXVsdHMuc2VhcmNoUGFuZXMpIHsKICAgICAgICAgICAgICAgIGlmICghc2V0dGluZ3MuX3NlYXJjaFBhbmVzKSB7CiAgICAgICAgICAgICAgICAgICAgX2luaXQoc2V0dGluZ3MsIHRydWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgLy8gRGF0YVRhYmxlcyBgZG9tYCBmZWF0dXJlIG9wdGlvbgogICAgICAgIERhdGFUYWJsZS5leHQuZmVhdHVyZS5wdXNoKHsKICAgICAgICAgICAgY0ZlYXR1cmU6ICdQJywKICAgICAgICAgICAgZm5Jbml0OiBfaW5pdAogICAgICAgIH0pOwogICAgICAgIC8vIERhdGFUYWJsZXMgMiBsYXlvdXQgZmVhdHVyZQogICAgICAgIGlmIChEYXRhVGFibGUuZXh0LmZlYXR1cmVzKSB7CiAgICAgICAgICAgIERhdGFUYWJsZS5leHQuZmVhdHVyZXMucmVnaXN0ZXIoJ3NlYXJjaFBhbmVzJywgX2luaXQpOwogICAgICAgIH0KICAgIH0pKTsKCn0oKSk7CgoKLyohIFNlbGVjdCBmb3IgRGF0YVRhYmxlcyAxLjMuMQogKiAyMDE1LTIwMTkgU3ByeU1lZGlhIEx0ZCAtIGRhdGF0YWJsZXMubmV0L2xpY2Vuc2UvbWl0CiAqLwoKLyoqCiAqIEBzdW1tYXJ5ICAgICBTZWxlY3QgZm9yIERhdGFUYWJsZXMKICogQGRlc2NyaXB0aW9uIEEgY29sbGVjdGlvbiBvZiBBUEkgbWV0aG9kcywgZXZlbnRzIGFuZCBidXR0b25zIGZvciBEYXRhVGFibGVzCiAqICAgdGhhdCBwcm92aWRlcyBzZWxlY3Rpb24gb3B0aW9ucyBvZiB0aGUgaXRlbXMgaW4gYSBEYXRhVGFibGUKICogQHZlcnNpb24gICAgIDEuMy4xCiAqIEBmaWxlICAgICAgICBkYXRhVGFibGVzLnNlbGVjdC5qcwogKiBAYXV0aG9yICAgICAgU3ByeU1lZGlhIEx0ZCAod3d3LnNwcnltZWRpYS5jby51aykKICogQGNvbnRhY3QgICAgIGRhdGF0YWJsZXMubmV0L2ZvcnVtcwogKiBAY29weXJpZ2h0ICAgQ29weXJpZ2h0IDIwMTUtMjAxOSBTcHJ5TWVkaWEgTHRkLgogKgogKiBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGF2YWlsYWJsZSB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CiAqICAgTUlUIGxpY2Vuc2UgLSBodHRwOi8vZGF0YXRhYmxlcy5uZXQvbGljZW5zZS9taXQKICoKICogVGhpcyBzb3VyY2UgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgbGljZW5zZSBmaWxlcyBmb3IgZGV0YWlscy4KICoKICogRm9yIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvOiBodHRwOi8vd3d3LmRhdGF0YWJsZXMubmV0L2V4dGVuc2lvbnMvc2VsZWN0CiAqLwooZnVuY3Rpb24oIGZhY3RvcnkgKXsKCWlmICggdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkgewoJCS8vIEFNRAoJCWRlZmluZSggWydqcXVlcnknLCAnZGF0YXRhYmxlcy5uZXQnXSwgZnVuY3Rpb24gKCAkICkgewoJCQlyZXR1cm4gZmFjdG9yeSggJCwgd2luZG93LCBkb2N1bWVudCApOwoJCX0gKTsKCX0KCWVsc2UgaWYgKCB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgKSB7CgkJLy8gQ29tbW9uSlMKCQltb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb290LCAkKSB7CgkJCWlmICggISByb290ICkgewoJCQkJcm9vdCA9IHdpbmRvdzsKCQkJfQoKCQkJaWYgKCAhICQgfHwgISAkLmZuLmRhdGFUYWJsZSApIHsKCQkJCSQgPSByZXF1aXJlKCdkYXRhdGFibGVzLm5ldCcpKHJvb3QsICQpLiQ7CgkJCX0KCgkJCXJldHVybiBmYWN0b3J5KCAkLCByb290LCByb290LmRvY3VtZW50ICk7CgkJfTsKCX0KCWVsc2UgewoJCS8vIEJyb3dzZXIKCQlmYWN0b3J5KCBqUXVlcnksIHdpbmRvdywgZG9jdW1lbnQgKTsKCX0KfShmdW5jdGlvbiggJCwgd2luZG93LCBkb2N1bWVudCwgdW5kZWZpbmVkICkgewondXNlIHN0cmljdCc7CnZhciBEYXRhVGFibGUgPSAkLmZuLmRhdGFUYWJsZTsKCgovLyBWZXJzaW9uIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dlcgpEYXRhVGFibGUuc2VsZWN0ID0ge307CgpEYXRhVGFibGUuc2VsZWN0LnZlcnNpb24gPSAnMS4zLjEnOwoKRGF0YVRhYmxlLnNlbGVjdC5pbml0ID0gZnVuY3Rpb24gKCBkdCApIHsKCXZhciBjdHggPSBkdC5zZXR0aW5ncygpWzBdOwoJdmFyIGluaXQgPSBjdHgub0luaXQuc2VsZWN0OwoJdmFyIGRlZmF1bHRzID0gRGF0YVRhYmxlLmRlZmF1bHRzLnNlbGVjdDsKCXZhciBvcHRzID0gaW5pdCA9PT0gdW5kZWZpbmVkID8KCQlkZWZhdWx0cyA6CgkJaW5pdDsKCgkvLyBTZXQgZGVmYXVsdHMKCXZhciBpdGVtcyA9ICdyb3cnOwoJdmFyIHN0eWxlID0gJ2FwaSc7Cgl2YXIgYmx1cmFibGUgPSBmYWxzZTsKCXZhciB0b2dnbGVhYmxlID0gdHJ1ZTsKCXZhciBpbmZvID0gdHJ1ZTsKCXZhciBzZWxlY3RvciA9ICd0ZCwgdGgnOwoJdmFyIGNsYXNzTmFtZSA9ICdzZWxlY3RlZCc7Cgl2YXIgc2V0U3R5bGUgPSBmYWxzZTsKCgljdHguX3NlbGVjdCA9IHt9OwoKCS8vIEluaXRpYWxpc2F0aW9uIGN1c3RvbWlzYXRpb25zCglpZiAoIG9wdHMgPT09IHRydWUgKSB7CgkJc3R5bGUgPSAnb3MnOwoJCXNldFN0eWxlID0gdHJ1ZTsKCX0KCWVsc2UgaWYgKCB0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycgKSB7CgkJc3R5bGUgPSBvcHRzOwoJCXNldFN0eWxlID0gdHJ1ZTsKCX0KCWVsc2UgaWYgKCAkLmlzUGxhaW5PYmplY3QoIG9wdHMgKSApIHsKCQlpZiAoIG9wdHMuYmx1cmFibGUgIT09IHVuZGVmaW5lZCApIHsKCQkJYmx1cmFibGUgPSBvcHRzLmJsdXJhYmxlOwoJCX0KCQkKCQlpZiAoIG9wdHMudG9nZ2xlYWJsZSAhPT0gdW5kZWZpbmVkICkgewoJCQl0b2dnbGVhYmxlID0gb3B0cy50b2dnbGVhYmxlOwoJCX0KCgkJaWYgKCBvcHRzLmluZm8gIT09IHVuZGVmaW5lZCApIHsKCQkJaW5mbyA9IG9wdHMuaW5mbzsKCQl9CgoJCWlmICggb3B0cy5pdGVtcyAhPT0gdW5kZWZpbmVkICkgewoJCQlpdGVtcyA9IG9wdHMuaXRlbXM7CgkJfQoKCQlpZiAoIG9wdHMuc3R5bGUgIT09IHVuZGVmaW5lZCApIHsKCQkJc3R5bGUgPSBvcHRzLnN0eWxlOwoJCQlzZXRTdHlsZSA9IHRydWU7CgkJfQoJCWVsc2UgewoJCQlzdHlsZSA9ICdvcyc7CgkJCXNldFN0eWxlID0gdHJ1ZTsKCQl9CgoJCWlmICggb3B0cy5zZWxlY3RvciAhPT0gdW5kZWZpbmVkICkgewoJCQlzZWxlY3RvciA9IG9wdHMuc2VsZWN0b3I7CgkJfQoKCQlpZiAoIG9wdHMuY2xhc3NOYW1lICE9PSB1bmRlZmluZWQgKSB7CgkJCWNsYXNzTmFtZSA9IG9wdHMuY2xhc3NOYW1lOwoJCX0KCX0KCglkdC5zZWxlY3Quc2VsZWN0b3IoIHNlbGVjdG9yICk7CglkdC5zZWxlY3QuaXRlbXMoIGl0ZW1zICk7CglkdC5zZWxlY3Quc3R5bGUoIHN0eWxlICk7CglkdC5zZWxlY3QuYmx1cmFibGUoIGJsdXJhYmxlICk7CglkdC5zZWxlY3QudG9nZ2xlYWJsZSggdG9nZ2xlYWJsZSApOwoJZHQuc2VsZWN0LmluZm8oIGluZm8gKTsKCWN0eC5fc2VsZWN0LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKCgoJLy8gU29ydCB0YWJsZSBiYXNlZCBvbiBzZWxlY3RlZCByb3dzLiBSZXF1aXJlcyBTZWxlY3QgRGF0YXRhYmxlcyBleHRlbnNpb24KCSQuZm4uZGF0YVRhYmxlLmV4dC5vcmRlclsnc2VsZWN0LWNoZWNrYm94J10gPSBmdW5jdGlvbiAoIHNldHRpbmdzLCBjb2wgKSB7CgkJcmV0dXJuIHRoaXMuYXBpKCkuY29sdW1uKCBjb2wsIHtvcmRlcjogJ2luZGV4J30gKS5ub2RlcygpLm1hcCggZnVuY3Rpb24gKCB0ZCApIHsKCQkJaWYgKCBzZXR0aW5ncy5fc2VsZWN0Lml0ZW1zID09PSAncm93JyApIHsKCQkJCXJldHVybiAkKCB0ZCApLnBhcmVudCgpLmhhc0NsYXNzKCBzZXR0aW5ncy5fc2VsZWN0LmNsYXNzTmFtZSApOwoJCQl9IGVsc2UgaWYgKCBzZXR0aW5ncy5fc2VsZWN0Lml0ZW1zID09PSAnY2VsbCcgKSB7CgkJCQlyZXR1cm4gJCggdGQgKS5oYXNDbGFzcyggc2V0dGluZ3MuX3NlbGVjdC5jbGFzc05hbWUgKTsKCQkJfQoJCQlyZXR1cm4gZmFsc2U7CgkJfSk7Cgl9OwoKCS8vIElmIHRoZSBpbml0IG9wdGlvbnMgaGF2ZW4ndCBlbmFibGVkIHNlbGVjdCwgYnV0IHRoZXJlIGlzIGEgc2VsZWN0YWJsZQoJLy8gY2xhc3MgbmFtZSwgdGhlbiBlbmFibGUKCWlmICggISBzZXRTdHlsZSAmJiAkKCBkdC50YWJsZSgpLm5vZGUoKSApLmhhc0NsYXNzKCAnc2VsZWN0YWJsZScgKSApIHsKCQlkdC5zZWxlY3Quc3R5bGUoICdvcycgKTsKCX0KfTsKCi8qCgpTZWxlY3QgaXMgYSBjb2xsZWN0aW9uIG9mIEFQSSBtZXRob2RzLCBldmVudCBoYW5kbGVycywgZXZlbnQgZW1pdHRlcnMgYW5kCmJ1dHRvbnMgKGZvciB0aGUgYEJ1dHRvbnNgIGV4dGVuc2lvbikgZm9yIERhdGFUYWJsZXMuIEl0IHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcKZmVhdHVyZXMsIHdpdGggYW4gb3ZlcnZpZXcgb2YgaG93IHRoZXkgYXJlIGltcGxlbWVudGVkOgoKIyMgU2VsZWN0aW9uIG9mIHJvd3MsIGNvbHVtbnMgYW5kIGNlbGxzLiBXaGV0aGVyIGFuIGl0ZW0gaXMgc2VsZWN0ZWQgb3Igbm90IGlzCiAgIHN0b3JlZCBpbjoKCiogcm93czogYSBgX3NlbGVjdF9zZWxlY3RlZGAgcHJvcGVydHkgd2hpY2ggY29udGFpbnMgYSBib29sZWFuIHZhbHVlIG9mIHRoZQogIERhdGFUYWJsZXMnIGBhb0RhdGFgIG9iamVjdCBmb3IgZWFjaCByb3cKKiBjb2x1bW5zOiBhIGBfc2VsZWN0X3NlbGVjdGVkYCBwcm9wZXJ0eSB3aGljaCBjb250YWlucyBhIGJvb2xlYW4gdmFsdWUgb2YgdGhlCiAgRGF0YVRhYmxlcycgYGFvQ29sdW1uc2Agb2JqZWN0IGZvciBlYWNoIGNvbHVtbgoqIGNlbGxzOiBhIGBfc2VsZWN0ZWRfY2VsbHNgIHByb3BlcnR5IHdoaWNoIGNvbnRhaW5zIGFuIGFycmF5IG9mIGJvb2xlYW4gdmFsdWVzCiAgb2YgdGhlIGBhb0RhdGFgIG9iamVjdCBmb3IgZWFjaCByb3cuIFRoZSBhcnJheSBpcyB0aGUgc2FtZSBsZW5ndGggYXMgdGhlCiAgY29sdW1ucyBhcnJheSwgd2l0aCBlYWNoIGVsZW1lbnQgb2YgaXQgcmVwcmVzZW50aW5nIGEgY2VsbC4KClRoaXMgbWV0aG9kIG9mIHVzaW5nIGJvb2xlYW4gZmxhZ3MgYWxsb3dzIFNlbGVjdCB0byBvcGVyYXRlIHdoZW4gbm9kZXMgaGF2ZSBub3QKYmVlbiBjcmVhdGVkIGZvciByb3dzIC8gY2VsbHMgKERhdGFUYWJsZXMnIGRlZmVyIHJlbmRlcmluZyBmZWF0dXJlKS4KCiMjIEFQSSBtZXRob2RzCgpBIHJhbmdlIG9mIEFQSSBtZXRob2RzIGFyZSBhdmFpbGFibGUgZm9yIHRyaWdnZXJpbmcgc2VsZWN0aW9uIGFuZCBkZS1zZWxlY3Rpb24Kb2Ygcm93cy4gTWV0aG9kcyBhcmUgYWxzbyBhdmFpbGFibGUgdG8gY29uZmlndXJlIHRoZSBzZWxlY3Rpb24gZXZlbnRzIHRoYXQgY2FuCmJlIHRyaWdnZXJlZCBieSBhbiBlbmQgdXNlciAoc3VjaCBhcyB3aGljaCBpdGVtcyBhcmUgdG8gYmUgc2VsZWN0ZWQpLiBUbyBhIGxhcmdlCmV4dGVudCwgdGhlc2Ugb2YgQVBJIG1ldGhvZHMgKmlzKiBTZWxlY3QuIEl0IGlzIGJhc2ljYWxseSBhIGNvbGxlY3Rpb24gb2YgaGVscGVyCmZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBpdGVtcyBpbiBhIERhdGFUYWJsZS4KCkNvbmZpZ3VyYXRpb24gb2Ygc2VsZWN0IGlzIGhlbGQgaW4gdGhlIG9iamVjdCBgX3NlbGVjdGAgd2hpY2ggaXMgYXR0YWNoZWQgdG8gdGhlCkRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0IG9uIGluaXRpYWxpc2F0aW9uLiBTZWxlY3QgYmVpbmcgYXZhaWxhYmxlIG9uIGEgdGFibGUKaXMgbm90IG9wdGlvbmFsIHdoZW4gU2VsZWN0IGlzIGxvYWRlZCwgYnV0IGl0cyBkZWZhdWx0IGlzIGZvciBzZWxlY3Rpb24gb25seSB0bwpiZSBhdmFpbGFibGUgdmlhIHRoZSBBUEkgLSBzbyB0aGUgZW5kIHVzZXIgd291bGRuJ3QgYmUgYWJsZSB0byBzZWxlY3Qgcm93cwp3aXRob3V0IGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbi4KClRoZSBgX3NlbGVjdGAgb2JqZWN0IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKCmBgYAp7CglpdGVtczpzdHJpbmcgICAgICAgLSBDYW4gYmUgYHJvd3NgLCBgY29sdW1uc2Agb3IgYGNlbGxzYC4gRGVmaW5lcyB3aGF0IGl0ZW0gCgkgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHNlbGVjdGVkIGlmIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gYWN0aXZhdGUgcm93CgkgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gdXNpbmcgdGhlIG1vdXNlLgoJc3R5bGU6c3RyaW5nICAgICAgIC0gQ2FuIGJlIGBub25lYCwgYHNpbmdsZWAsIGBtdWx0aWAgb3IgYG9zYC4gRGVmaW5lcyB0aGUKCSAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aW9uIHN0eWxlIHdoZW4gc2VsZWN0aW5nIGl0ZW1zCglibHVyYWJsZTpib29sZWFuICAgLSBJZiByb3cgc2VsZWN0aW9uIGNhbiBiZSBjbGVhcmVkIGJ5IGNsaWNraW5nIG91dHNpZGUgb2YKCSAgICAgICAgICAgICAgICAgICAgIHRoZSB0YWJsZQoJdG9nZ2xlYWJsZTpib29sZWFuIC0gSWYgcm93IHNlbGVjdGlvbiBjYW4gYmUgY2FuY2VsbGVkIGJ5IHJlcGVhdGVkIGNsaWNraW5nCgkgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgcm93CglpbmZvOmJvb2xlYW4gICAgICAgLSBJZiB0aGUgc2VsZWN0aW9uIHN1bW1hcnkgc2hvdWxkIGJlIHNob3duIGluIHRoZSB0YWJsZQoJICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gZWxlbWVudHMKfQpgYGAKCkluIGFkZGl0aW9uIHRvIHRoZSBBUEkgbWV0aG9kcywgU2VsZWN0IGFsc28gZXh0ZW5kcyB0aGUgRGF0YVRhYmxlcyBzZWxlY3RvcgpvcHRpb25zIGZvciByb3dzLCBjb2x1bW5zIGFuZCBjZWxscyBhZGRpbmcgYSBgc2VsZWN0ZWRgIG9wdGlvbiB0byB0aGUgc2VsZWN0b3IKb3B0aW9ucyBvYmplY3QsIGFsbG93aW5nIHRoZSBkZXZlbG9wZXIgdG8gc2VsZWN0IG9ubHkgc2VsZWN0ZWQgaXRlbXMgb3IKdW5zZWxlY3RlZCBpdGVtcy4KCiMjIE1vdXNlIHNlbGVjdGlvbiBvZiBpdGVtcwoKQ2xpY2tpbmcgb24gaXRlbXMgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IGl0ZW1zLiBUaGlzIGlzIGRvbmUgYnkgYSBzaW1wbGUgZXZlbnQKaGFuZGxlciB0aGF0IHdpbGwgc2VsZWN0IHRoZSBpdGVtcyB1c2luZyB0aGUgQVBJIG1ldGhvZHMuCgogKi8KCgovKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgogKiBMb2NhbCBmdW5jdGlvbnMKICovCgovKioKICogQWRkIG9uZSBvciBtb3JlIGNlbGxzIHRvIHRoZSBzZWxlY3Rpb24gd2hlbiBzaGlmdCBjbGlja2luZyBpbiBPUyBzZWxlY3Rpb24KICogc3R5bGUgY2VsbCBzZWxlY3Rpb24uCiAqCiAqIENlbGwgcmFuZ2UgaXMgbW9yZSBjb21wbGljYXRlZCB0aGFuIHJvdyBhbmQgY29sdW1uIGFzIHdlIHdhbnQgdG8gc2VsZWN0CiAqIGluIHRoZSB2aXNpYmxlIGdyaWQgcmF0aGVyIHRoYW4gYnkgaW5kZXggaW4gc2VxdWVuY2UuIEZvciBleGFtcGxlLCBpZiB5b3UKICogY2xpY2sgZmlyc3QgaW4gY2VsbCAxLTEgYW5kIHRoZW4gc2hpZnQgY2xpY2sgaW4gMi0yIC0gY2VsbHMgMS0yIGFuZCAyLTEKICogc2hvdWxkIGFsc28gYmUgc2VsZWN0ZWQgKGFuZCBub3QgMS0zLCAxLTQuIGV0YykKICogCiAqIEBwYXJhbSAge0RhdGFUYWJsZS5BcGl9IGR0ICAgRGF0YVRhYmxlCiAqIEBwYXJhbSAge29iamVjdH0gICAgICAgIGlkeCAgQ2VsbCBpbmRleCB0byBzZWxlY3QgdG8KICogQHBhcmFtICB7b2JqZWN0fSAgICAgICAgbGFzdCBDZWxsIGluZGV4IHRvIHNlbGVjdCBmcm9tCiAqIEBwcml2YXRlCiAqLwpmdW5jdGlvbiBjZWxsUmFuZ2UoIGR0LCBpZHgsIGxhc3QgKQp7Cgl2YXIgaW5kZXhlczsKCXZhciBjb2x1bW5JbmRleGVzOwoJdmFyIHJvd0luZGV4ZXM7Cgl2YXIgc2VsZWN0Q29sdW1ucyA9IGZ1bmN0aW9uICggc3RhcnQsIGVuZCApIHsKCQlpZiAoIHN0YXJ0ID4gZW5kICkgewoJCQl2YXIgdG1wID0gZW5kOwoJCQllbmQgPSBzdGFydDsKCQkJc3RhcnQgPSB0bXA7CgkJfQoJCQoJCXZhciByZWNvcmQgPSBmYWxzZTsKCQlyZXR1cm4gZHQuY29sdW1ucyggJzp2aXNpYmxlJyApLmluZGV4ZXMoKS5maWx0ZXIoIGZ1bmN0aW9uIChpKSB7CgkJCWlmICggaSA9PT0gc3RhcnQgKSB7CgkJCQlyZWNvcmQgPSB0cnVlOwoJCQl9CgkJCQoJCQlpZiAoIGkgPT09IGVuZCApIHsgLy8gbm90IGVsc2UgaWYsIGFzIHN0YXJ0IG1pZ2h0ID09PSBlbmQKCQkJCXJlY29yZCA9IGZhbHNlOwoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCgkJCXJldHVybiByZWNvcmQ7CgkJfSApOwoJfTsKCgl2YXIgc2VsZWN0Um93cyA9IGZ1bmN0aW9uICggc3RhcnQsIGVuZCApIHsKCQl2YXIgaW5kZXhlcyA9IGR0LnJvd3MoIHsgc2VhcmNoOiAnYXBwbGllZCcgfSApLmluZGV4ZXMoKTsKCgkJLy8gV2hpY2ggY29tZXMgZmlyc3QgLSBtaWdodCBuZWVkIHRvIHN3YXAKCQlpZiAoIGluZGV4ZXMuaW5kZXhPZiggc3RhcnQgKSA+IGluZGV4ZXMuaW5kZXhPZiggZW5kICkgKSB7CgkJCXZhciB0bXAgPSBlbmQ7CgkJCWVuZCA9IHN0YXJ0OwoJCQlzdGFydCA9IHRtcDsKCQl9CgoJCXZhciByZWNvcmQgPSBmYWxzZTsKCQlyZXR1cm4gaW5kZXhlcy5maWx0ZXIoIGZ1bmN0aW9uIChpKSB7CgkJCWlmICggaSA9PT0gc3RhcnQgKSB7CgkJCQlyZWNvcmQgPSB0cnVlOwoJCQl9CgkJCQoJCQlpZiAoIGkgPT09IGVuZCApIHsKCQkJCXJlY29yZCA9IGZhbHNlOwoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCgkJCXJldHVybiByZWNvcmQ7CgkJfSApOwoJfTsKCglpZiAoICEgZHQuY2VsbHMoIHsgc2VsZWN0ZWQ6IHRydWUgfSApLmFueSgpICYmICEgbGFzdCApIHsKCQkvLyBzZWxlY3QgZnJvbSB0aGUgdG9wIGxlZnQgY2VsbCB0byB0aGlzIG9uZQoJCWNvbHVtbkluZGV4ZXMgPSBzZWxlY3RDb2x1bW5zKCAwLCBpZHguY29sdW1uICk7CgkJcm93SW5kZXhlcyA9IHNlbGVjdFJvd3MoIDAgLCBpZHgucm93ICk7Cgl9CgllbHNlIHsKCQkvLyBHZXQgY29sdW1uIGluZGV4ZXMgYmV0d2VlbiBvbGQgYW5kIG5ldwoJCWNvbHVtbkluZGV4ZXMgPSBzZWxlY3RDb2x1bW5zKCBsYXN0LmNvbHVtbiwgaWR4LmNvbHVtbiApOwoJCXJvd0luZGV4ZXMgPSBzZWxlY3RSb3dzKCBsYXN0LnJvdyAsIGlkeC5yb3cgKTsKCX0KCglpbmRleGVzID0gZHQuY2VsbHMoIHJvd0luZGV4ZXMsIGNvbHVtbkluZGV4ZXMgKS5mbGF0dGVuKCk7CgoJaWYgKCAhIGR0LmNlbGxzKCBpZHgsIHsgc2VsZWN0ZWQ6IHRydWUgfSApLmFueSgpICkgewoJCS8vIFNlbGVjdCByYW5nZQoJCWR0LmNlbGxzKCBpbmRleGVzICkuc2VsZWN0KCk7Cgl9CgllbHNlIHsKCQkvLyBEZXNlbGVjdCByYW5nZQoJCWR0LmNlbGxzKCBpbmRleGVzICkuZGVzZWxlY3QoKTsKCX0KfQoKLyoqCiAqIERpc2FibGUgbW91c2Ugc2VsZWN0aW9uIGJ5IHJlbW92aW5nIHRoZSBzZWxlY3RvcnMKICoKICogQHBhcmFtIHtEYXRhVGFibGUuQXBpfSBkdCBEYXRhVGFibGUgdG8gcmVtb3ZlIGV2ZW50cyBmcm9tCiAqIEBwcml2YXRlCiAqLwpmdW5jdGlvbiBkaXNhYmxlTW91c2VTZWxlY3Rpb24oIGR0ICkKewoJdmFyIGN0eCA9IGR0LnNldHRpbmdzKClbMF07Cgl2YXIgc2VsZWN0b3IgPSBjdHguX3NlbGVjdC5zZWxlY3RvcjsKCgkkKCBkdC50YWJsZSgpLmNvbnRhaW5lcigpICkKCQkub2ZmKCAnbW91c2Vkb3duLmR0U2VsZWN0Jywgc2VsZWN0b3IgKQoJCS5vZmYoICdtb3VzZXVwLmR0U2VsZWN0Jywgc2VsZWN0b3IgKQoJCS5vZmYoICdjbGljay5kdFNlbGVjdCcsIHNlbGVjdG9yICk7CgoJJCgnYm9keScpLm9mZiggJ2NsaWNrLmR0U2VsZWN0JyArIF9zYWZlSWQoZHQudGFibGUoKS5ub2RlKCkpICk7Cn0KCi8qKgogKiBBdHRhY2ggbW91c2UgbGlzdGVuZXJzIHRvIHRoZSB0YWJsZSB0byBhbGxvdyBtb3VzZSBzZWxlY3Rpb24gb2YgaXRlbXMKICoKICogQHBhcmFtIHtEYXRhVGFibGUuQXBpfSBkdCBEYXRhVGFibGUgdG8gcmVtb3ZlIGV2ZW50cyBmcm9tCiAqIEBwcml2YXRlCiAqLwpmdW5jdGlvbiBlbmFibGVNb3VzZVNlbGVjdGlvbiAoIGR0ICkKewoJdmFyIGNvbnRhaW5lciA9ICQoIGR0LnRhYmxlKCkuY29udGFpbmVyKCkgKTsKCXZhciBjdHggPSBkdC5zZXR0aW5ncygpWzBdOwoJdmFyIHNlbGVjdG9yID0gY3R4Ll9zZWxlY3Quc2VsZWN0b3I7Cgl2YXIgbWF0Y2hTZWxlY3Rpb247CgoJY29udGFpbmVyCgkJLm9uKCAnbW91c2Vkb3duLmR0U2VsZWN0Jywgc2VsZWN0b3IsIGZ1bmN0aW9uKGUpIHsKCQkJLy8gRGlzYWxsb3cgdGV4dCBzZWxlY3Rpb24gZm9yIHNoaWZ0IGNsaWNraW5nIG9uIHRoZSB0YWJsZSBzbyBtdWx0aQoJCQkvLyBlbGVtZW50IHNlbGVjdGlvbiBkb2Vzbid0IGxvb2sgdGVycmlibGUhCgkJCWlmICggZS5zaGlmdEtleSB8fCBlLm1ldGFLZXkgfHwgZS5jdHJsS2V5ICkgewoJCQkJY29udGFpbmVyCgkJCQkJLmNzcyggJy1tb3otdXNlci1zZWxlY3QnLCAnbm9uZScgKQoJCQkJCS5vbmUoJ3NlbGVjdHN0YXJ0LmR0U2VsZWN0Jywgc2VsZWN0b3IsIGZ1bmN0aW9uICgpIHsKCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCX0gKTsKCQkJfQoKCQkJaWYgKCB3aW5kb3cuZ2V0U2VsZWN0aW9uICkgewoJCQkJbWF0Y2hTZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CgkJCX0KCQl9ICkKCQkub24oICdtb3VzZXVwLmR0U2VsZWN0Jywgc2VsZWN0b3IsIGZ1bmN0aW9uKCkgewoJCQkvLyBBbGxvdyB0ZXh0IHNlbGVjdGlvbiB0byBvY2N1ciBhZ2FpbiwgTW96aWxsYSBzdHlsZSAodGVzdGVkIGluIEZGCgkJCS8vIDM1LjAuMSAtIHN0aWxsIHJlcXVpcmVkKQoJCQljb250YWluZXIuY3NzKCAnLW1vei11c2VyLXNlbGVjdCcsICcnICk7CgkJfSApCgkJLm9uKCAnY2xpY2suZHRTZWxlY3QnLCBzZWxlY3RvciwgZnVuY3Rpb24gKCBlICkgewoJCQl2YXIgaXRlbXMgPSBkdC5zZWxlY3QuaXRlbXMoKTsKCQkJdmFyIGlkeDsKCgkJCS8vIElmIHRleHQgd2FzIHNlbGVjdGVkIChjbGljayBhbmQgZHJhZyksIHRoZW4gd2Ugc2hvdWxkbid0IGNoYW5nZQoJCQkvLyB0aGUgcm93J3Mgc2VsZWN0ZWQgc3RhdGUKCQkJaWYgKCBtYXRjaFNlbGVjdGlvbiApIHsKCQkJCXZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CgoJCQkJLy8gSWYgdGhlIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgc2VsZWN0aW9uIGlzIG5vdCBpbiB0aGUgdGFibGUsIHdlIGNhbiBpZ25vcmUgaXQKCQkJCS8vIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgZGV2ZWxvcGVyIHNlbGVjdHMgdGV4dCBmcm9tIHRoZSBjbGljayBldmVudAoJCQkJaWYgKCAhIHNlbGVjdGlvbi5hbmNob3JOb2RlIHx8ICQoc2VsZWN0aW9uLmFuY2hvck5vZGUpLmNsb3Nlc3QoJ3RhYmxlJylbMF0gPT09IGR0LnRhYmxlKCkubm9kZSgpICkgewoJCQkJCWlmICggc2VsZWN0aW9uICE9PSBtYXRjaFNlbGVjdGlvbiApIHsKCQkJCQkJcmV0dXJuOwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJdmFyIGN0eCA9IGR0LnNldHRpbmdzKClbMF07CgkJCXZhciB3cmFwcGVyQ2xhc3MgPSAkLnRyaW0oZHQuc2V0dGluZ3MoKVswXS5vQ2xhc3Nlcy5zV3JhcHBlcikucmVwbGFjZSgvICsvZywgJy4nKTsKCgkJCS8vIElnbm9yZSBjbGlja3MgaW5zaWRlIGEgc3ViLXRhYmxlCgkJCWlmICggJChlLnRhcmdldCkuY2xvc2VzdCgnZGl2Licrd3JhcHBlckNsYXNzKVswXSAhPSBkdC50YWJsZSgpLmNvbnRhaW5lcigpICkgewoJCQkJcmV0dXJuOwoJCQl9CgoJCQl2YXIgY2VsbCA9IGR0LmNlbGwoICQoZS50YXJnZXQpLmNsb3Nlc3QoJ3RkLCB0aCcpICk7CgoJCQkvLyBDaGVjayB0aGUgY2VsbCBhY3R1YWxseSBiZWxvbmdzIHRvIHRoZSBob3N0IERhdGFUYWJsZSAoc28gY2hpbGQKCQkJLy8gcm93cywgZXRjLCBhcmUgaWdub3JlZCkKCQkJaWYgKCAhIGNlbGwuYW55KCkgKSB7CgkJCQlyZXR1cm47CgkJCX0KCgkJCXZhciBldmVudCA9ICQuRXZlbnQoJ3VzZXItc2VsZWN0LmR0Jyk7CgkJCWV2ZW50VHJpZ2dlciggZHQsIGV2ZW50LCBbIGl0ZW1zLCBjZWxsLCBlIF0gKTsKCgkJCWlmICggZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7CgkJCQlyZXR1cm47CgkJCX0KCgkJCXZhciBjZWxsSW5kZXggPSBjZWxsLmluZGV4KCk7CgkJCWlmICggaXRlbXMgPT09ICdyb3cnICkgewoJCQkJaWR4ID0gY2VsbEluZGV4LnJvdzsKCQkJCXR5cGVTZWxlY3QoIGUsIGR0LCBjdHgsICdyb3cnLCBpZHggKTsKCQkJfQoJCQllbHNlIGlmICggaXRlbXMgPT09ICdjb2x1bW4nICkgewoJCQkJaWR4ID0gY2VsbC5pbmRleCgpLmNvbHVtbjsKCQkJCXR5cGVTZWxlY3QoIGUsIGR0LCBjdHgsICdjb2x1bW4nLCBpZHggKTsKCQkJfQoJCQllbHNlIGlmICggaXRlbXMgPT09ICdjZWxsJyApIHsKCQkJCWlkeCA9IGNlbGwuaW5kZXgoKTsKCQkJCXR5cGVTZWxlY3QoIGUsIGR0LCBjdHgsICdjZWxsJywgaWR4ICk7CgkJCX0KCgkJCWN0eC5fc2VsZWN0X2xhc3RDZWxsID0gY2VsbEluZGV4OwoJCX0gKTsKCgkvLyBCbHVyYWJsZQoJJCgnYm9keScpLm9uKCAnY2xpY2suZHRTZWxlY3QnICsgX3NhZmVJZChkdC50YWJsZSgpLm5vZGUoKSksIGZ1bmN0aW9uICggZSApIHsKCQlpZiAoIGN0eC5fc2VsZWN0LmJsdXJhYmxlICkgewoJCQkvLyBJZiB0aGUgY2xpY2sgd2FzIGluc2lkZSB0aGUgRGF0YVRhYmxlcyBjb250YWluZXIsIGRvbid0IGJsdXIKCQkJaWYgKCAkKGUudGFyZ2V0KS5wYXJlbnRzKCkuZmlsdGVyKCBkdC50YWJsZSgpLmNvbnRhaW5lcigpICkubGVuZ3RoICkgewoJCQkJcmV0dXJuOwoJCQl9CgoJCQkvLyBJZ25vcmUgZWxlbWVudHMgd2hpY2ggaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgRE9NIChpLmUuIHBhZ2luZwoJCQkvLyBidXR0b25zKQoJCQlpZiAoICQoZS50YXJnZXQpLnBhcmVudHMoJ2h0bWwnKS5sZW5ndGggPT09IDAgKSB7CgkJCSAJcmV0dXJuOwoJCQl9CgoJCQkvLyBEb24ndCBibHVyIGluIEVkaXRvciBmb3JtCgkJCWlmICggJChlLnRhcmdldCkucGFyZW50cygnZGl2LkRURScpLmxlbmd0aCApIHsKCQkJCXJldHVybjsKCQkJfQoKCQkJY2xlYXIoIGN0eCwgdHJ1ZSApOwoJCX0KCX0gKTsKfQoKLyoqCiAqIFRyaWdnZXIgYW4gZXZlbnQgb24gYSBEYXRhVGFibGUKICoKICogQHBhcmFtIHtEYXRhVGFibGUuQXBpfSBhcGkgICAgICBEYXRhVGFibGUgdG8gdHJpZ2dlciBldmVudHMgb24KICogQHBhcmFtICB7Ym9vbGVhbn0gICAgICBzZWxlY3RlZCB0cnVlIGlmIHNlbGVjdGVkLCBmYWxzZSBpZiBkZXNlbGVjdGVkCiAqIEBwYXJhbSAge3N0cmluZ30gICAgICAgdHlwZSAgICAgSXRlbSB0eXBlIGFjdGluZyBvbgogKiBAcGFyYW0gIHtib29sZWFufSAgICAgIGFueSAgICAgIFJlcXVpcmUgdGhhdCB0aGVyZSBhcmUgdmFsdWVzIGJlZm9yZQogKiAgICAgdHJpZ2dlcmluZwogKiBAcHJpdmF0ZQogKi8KZnVuY3Rpb24gZXZlbnRUcmlnZ2VyICggYXBpLCB0eXBlLCBhcmdzLCBhbnkgKQp7CglpZiAoIGFueSAmJiAhIGFwaS5mbGF0dGVuKCkubGVuZ3RoICkgewoJCXJldHVybjsKCX0KCglpZiAoIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyApIHsKCQl0eXBlID0gdHlwZSArJy5kdCc7Cgl9CgoJYXJncy51bnNoaWZ0KCBhcGkgKTsKCgkkKGFwaS50YWJsZSgpLm5vZGUoKSkudHJpZ2dlciggdHlwZSwgYXJncyApOwp9CgovKioKICogVXBkYXRlIHRoZSBpbmZvcm1hdGlvbiBlbGVtZW50IG9mIHRoZSBEYXRhVGFibGUgc2hvd2luZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKICogaXRlbXMgc2VsZWN0ZWQuIFRoaXMgaXMgZG9uZSBieSBhZGRpbmcgdGFncyB0byB0aGUgZXhpc3RpbmcgdGV4dAogKiAKICogQHBhcmFtIHtEYXRhVGFibGUuQXBpfSBhcGkgRGF0YVRhYmxlIHRvIHVwZGF0ZQogKiBAcHJpdmF0ZQogKi8KZnVuY3Rpb24gaW5mbyAoIGFwaSApCnsKCXZhciBjdHggPSBhcGkuc2V0dGluZ3MoKVswXTsKCglpZiAoICEgY3R4Ll9zZWxlY3QuaW5mbyB8fCAhIGN0eC5hYW5GZWF0dXJlcy5pICkgewoJCXJldHVybjsKCX0KCglpZiAoIGFwaS5zZWxlY3Quc3R5bGUoKSA9PT0gJ2FwaScgKSB7CgkJcmV0dXJuOwoJfQoKCXZhciByb3dzICAgID0gYXBpLnJvd3MoIHsgc2VsZWN0ZWQ6IHRydWUgfSApLmZsYXR0ZW4oKS5sZW5ndGg7Cgl2YXIgY29sdW1ucyA9IGFwaS5jb2x1bW5zKCB7IHNlbGVjdGVkOiB0cnVlIH0gKS5mbGF0dGVuKCkubGVuZ3RoOwoJdmFyIGNlbGxzICAgPSBhcGkuY2VsbHMoIHsgc2VsZWN0ZWQ6IHRydWUgfSApLmZsYXR0ZW4oKS5sZW5ndGg7CgoJdmFyIGFkZCA9IGZ1bmN0aW9uICggZWwsIG5hbWUsIG51bSApIHsKCQllbC5hcHBlbmQoICQoJzxzcGFuIGNsYXNzPSJzZWxlY3QtaXRlbSIvPicpLmFwcGVuZCggYXBpLmkxOG4oCgkJCSdzZWxlY3QuJytuYW1lKydzJywKCQkJeyBfOiAnJWQgJytuYW1lKydzIHNlbGVjdGVkJywgMDogJycsIDE6ICcxICcrbmFtZSsnIHNlbGVjdGVkJyB9LAoJCQludW0KCQkpICkgKTsKCX07CgoJLy8gSW50ZXJuYWwga25vd2xlZGdlIG9mIERhdGFUYWJsZXMgdG8gbG9vcCBvdmVyIGFsbCBpbmZvcm1hdGlvbiBlbGVtZW50cwoJJC5lYWNoKCBjdHguYWFuRmVhdHVyZXMuaSwgZnVuY3Rpb24gKCBpLCBlbCApIHsKCQllbCA9ICQoZWwpOwoKCQl2YXIgb3V0cHV0ICA9ICQoJzxzcGFuIGNsYXNzPSJzZWxlY3QtaW5mbyIvPicpOwoJCWFkZCggb3V0cHV0LCAncm93Jywgcm93cyApOwoJCWFkZCggb3V0cHV0LCAnY29sdW1uJywgY29sdW1ucyApOwoJCWFkZCggb3V0cHV0LCAnY2VsbCcsIGNlbGxzICApOwoKCQl2YXIgZXhpc2l0aW5nID0gZWwuY2hpbGRyZW4oJ3NwYW4uc2VsZWN0LWluZm8nKTsKCQlpZiAoIGV4aXNpdGluZy5sZW5ndGggKSB7CgkJCWV4aXNpdGluZy5yZW1vdmUoKTsKCQl9CgoJCWlmICggb3V0cHV0LnRleHQoKSAhPT0gJycgKSB7CgkJCWVsLmFwcGVuZCggb3V0cHV0ICk7CgkJfQoJfSApOwp9CgovKioKICogSW5pdGlhbGlzYXRpb24gb2YgYSBuZXcgdGFibGUuIEF0dGFjaCBldmVudCBoYW5kbGVycyBhbmQgY2FsbGJhY2tzIHRvIGFsbG93CiAqIFNlbGVjdCB0byBvcGVyYXRlIGNvcnJlY3RseS4KICoKICogVGhpcyB3aWxsIG9jY3VyIF9hZnRlcl8gdGhlIGluaXRpYWwgRGF0YVRhYmxlcyBpbml0aWFsaXNhdGlvbiwgYWx0aG91Z2gKICogYmVmb3JlIEFqYXggZGF0YSBpcyByZW5kZXJlZCwgaWYgdGhlcmUgaXMgYWpheCBkYXRhCiAqCiAqIEBwYXJhbSAge0RhdGFUYWJsZS5zZXR0aW5nc30gY3R4IFNldHRpbmdzIG9iamVjdCB0byBvcGVyYXRlIG9uCiAqIEBwcml2YXRlCiAqLwpmdW5jdGlvbiBpbml0ICggY3R4ICkgewoJdmFyIGFwaSA9IG5ldyBEYXRhVGFibGUuQXBpKCBjdHggKTsKCgkvLyBSb3cgY2FsbGJhY2sgc28gdGhhdCBjbGFzc2VzIGNhbiBiZSBhZGRlZCB0byByb3dzIGFuZCBjZWxscyBpZiB0aGUgaXRlbQoJLy8gd2FzIHNlbGVjdGVkIGJlZm9yZSB0aGUgZWxlbWVudCB3YXMgY3JlYXRlZC4gVGhpcyB3aWxsIGhhcHBlbiB3aXRoIHRoZQoJLy8gYGRlZmVyUmVuZGVyYCBvcHRpb24gZW5hYmxlZC4KCS8vIAoJLy8gVGhpcyBtZXRob2Qgb2YgYXR0YWNoaW5nIHRvIGBhb1Jvd0NyZWF0ZWRDYWxsYmFja2AgaXMgYSBoYWNrIHVudGlsCgkvLyBEYXRhVGFibGVzIGhhcyBwcm9wZXIgZXZlbnRzIGZvciByb3cgbWFuaXB1bGF0aW9uIElmIHlvdSBhcmUgcmV2aWV3aW5nCgkvLyB0aGlzIGNvZGUgdG8gY3JlYXRlIHlvdXIgb3duIHBsdWctaW5zLCBwbGVhc2UgZG8gbm90IGRvIHRoaXMhCgljdHguYW9Sb3dDcmVhdGVkQ2FsbGJhY2sucHVzaCggewoJCWZuOiBmdW5jdGlvbiAoIHJvdywgZGF0YSwgaW5kZXggKSB7CgkJCXZhciBpLCBpZW47CgkJCXZhciBkID0gY3R4LmFvRGF0YVsgaW5kZXggXTsKCgkJCS8vIFJvdwoJCQlpZiAoIGQuX3NlbGVjdF9zZWxlY3RlZCApIHsKCQkJCSQoIHJvdyApLmFkZENsYXNzKCBjdHguX3NlbGVjdC5jbGFzc05hbWUgKTsKCQkJfQoKCQkJLy8gQ2VsbHMgYW5kIGNvbHVtbnMgLSBpZiBzZXBhcmF0ZWQgb3V0LCB3ZSB3b3VsZCBuZWVkIHRvIGRvIHR3bwoJCQkvLyBsb29wcywgc28gaXQgbWFrZXMgc2Vuc2UgdG8gY29tYmluZSB0aGVtIGludG8gYSBzaW5nbGUgb25lCgkJCWZvciAoIGk9MCwgaWVuPWN0eC5hb0NvbHVtbnMubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQlpZiAoIGN0eC5hb0NvbHVtbnNbaV0uX3NlbGVjdF9zZWxlY3RlZCB8fCAoZC5fc2VsZWN0ZWRfY2VsbHMgJiYgZC5fc2VsZWN0ZWRfY2VsbHNbaV0pICkgewoJCQkJCSQoZC5hbkNlbGxzW2ldKS5hZGRDbGFzcyggY3R4Ll9zZWxlY3QuY2xhc3NOYW1lICk7CgkJCQl9CgkJCX0KCQl9LAoJCXNOYW1lOiAnc2VsZWN0LWRlZmVyUmVuZGVyJwoJfSApOwoKCS8vIE9uIEFqYXggcmVsb2FkIHdlIHdhbnQgdG8gcmVzZWxlY3QgYWxsIHJvd3Mgd2hpY2ggYXJlIGN1cnJlbnRseSBzZWxlY3RlZCwKCS8vIGlmIHRoZXJlIGlzIGFuIHJvd0lkIChpLmUuIGEgdW5pcXVlIHZhbHVlIHRvIGlkZW50aWZ5IGVhY2ggcm93IHdpdGgpCglhcGkub24oICdwcmVYaHIuZHQuZHRTZWxlY3QnLCBmdW5jdGlvbiAoKSB7CgkJLy8gbm90ZSB0aGF0IGNvbHVtbiBzZWxlY3Rpb24gZG9lc24ndCBuZWVkIHRvIGJlIGNhY2hlZCBhbmQgdGhlbgoJCS8vIHJlc2VsZWN0ZWQsIGFzIHRoZXkgYXJlIGFscmVhZHkgc2VsZWN0ZWQKCQl2YXIgcm93cyA9IGFwaS5yb3dzKCB7IHNlbGVjdGVkOiB0cnVlIH0gKS5pZHMoIHRydWUgKS5maWx0ZXIoIGZ1bmN0aW9uICggZCApIHsKCQkJcmV0dXJuIGQgIT09IHVuZGVmaW5lZDsKCQl9ICk7CgoJCXZhciBjZWxscyA9IGFwaS5jZWxscyggeyBzZWxlY3RlZDogdHJ1ZSB9ICkuZXEoMCkubWFwKCBmdW5jdGlvbiAoIGNlbGxJZHggKSB7CgkJCXZhciBpZCA9IGFwaS5yb3coIGNlbGxJZHgucm93ICkuaWQoIHRydWUgKTsKCQkJcmV0dXJuIGlkID8KCQkJCXsgcm93OiBpZCwgY29sdW1uOiBjZWxsSWR4LmNvbHVtbiB9IDoKCQkJCXVuZGVmaW5lZDsKCQl9ICkuZmlsdGVyKCBmdW5jdGlvbiAoIGQgKSB7CgkJCXJldHVybiBkICE9PSB1bmRlZmluZWQ7CgkJfSApOwoKCQkvLyBPbiB0aGUgbmV4dCBkcmF3LCByZXNlbGVjdCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zCgkJYXBpLm9uZSggJ2RyYXcuZHQuZHRTZWxlY3QnLCBmdW5jdGlvbiAoKSB7CgkJCWFwaS5yb3dzKCByb3dzICkuc2VsZWN0KCk7CgoJCQkvLyBgY2VsbHNgIGlzIG5vdCBhIGNlbGwgaW5kZXggc2VsZWN0b3IsIHNvIGl0IG5lZWRzIGEgbG9vcAoJCQlpZiAoIGNlbGxzLmFueSgpICkgewoJCQkJY2VsbHMuZWFjaCggZnVuY3Rpb24gKCBpZCApIHsKCQkJCQlhcGkuY2VsbHMoIGlkLnJvdywgaWQuY29sdW1uICkuc2VsZWN0KCk7CgkJCQl9ICk7CgkJCX0KCQl9ICk7Cgl9ICk7CgoJLy8gVXBkYXRlIHRoZSB0YWJsZSBpbmZvcm1hdGlvbiBlbGVtZW50IHdpdGggc2VsZWN0ZWQgaXRlbSBzdW1tYXJ5CglhcGkub24oICdkcmF3LmR0U2VsZWN0LmR0IHNlbGVjdC5kdFNlbGVjdC5kdCBkZXNlbGVjdC5kdFNlbGVjdC5kdCBpbmZvLmR0JywgZnVuY3Rpb24gKCkgewoJCWluZm8oIGFwaSApOwoJfSApOwoKCS8vIENsZWFuIHVwIGFuZCByZWxlYXNlCglhcGkub24oICdkZXN0cm95LmR0U2VsZWN0JywgZnVuY3Rpb24gKCkgewoJCWRpc2FibGVNb3VzZVNlbGVjdGlvbiggYXBpICk7CgkJYXBpLm9mZiggJy5kdFNlbGVjdCcgKTsKCX0gKTsKfQoKLyoqCiAqIEFkZCBvbmUgb3IgbW9yZSBpdGVtcyAocm93cyBvciBjb2x1bW5zKSB0byB0aGUgc2VsZWN0aW9uIHdoZW4gc2hpZnQgY2xpY2tpbmcKICogaW4gT1Mgc2VsZWN0aW9uIHN0eWxlCiAqCiAqIEBwYXJhbSAge0RhdGFUYWJsZS5BcGl9IGR0ICAgRGF0YVRhYmxlCiAqIEBwYXJhbSAge3N0cmluZ30gICAgICAgIHR5cGUgUm93IG9yIGNvbHVtbiByYW5nZSBzZWxlY3RvcgogKiBAcGFyYW0gIHtvYmplY3R9ICAgICAgICBpZHggIEl0ZW0gaW5kZXggdG8gc2VsZWN0IHRvCiAqIEBwYXJhbSAge29iamVjdH0gICAgICAgIGxhc3QgSXRlbSBpbmRleCB0byBzZWxlY3QgZnJvbQogKiBAcHJpdmF0ZQogKi8KZnVuY3Rpb24gcm93Q29sdW1uUmFuZ2UoIGR0LCB0eXBlLCBpZHgsIGxhc3QgKQp7CgkvLyBBZGQgYSByYW5nZSBvZiByb3dzIGZyb20gdGhlIGxhc3Qgc2VsZWN0ZWQgcm93IHRvIHRoaXMgb25lCgl2YXIgaW5kZXhlcyA9IGR0W3R5cGUrJ3MnXSggeyBzZWFyY2g6ICdhcHBsaWVkJyB9ICkuaW5kZXhlcygpOwoJdmFyIGlkeDEgPSAkLmluQXJyYXkoIGxhc3QsIGluZGV4ZXMgKTsKCXZhciBpZHgyID0gJC5pbkFycmF5KCBpZHgsIGluZGV4ZXMgKTsKCglpZiAoICEgZHRbdHlwZSsncyddKCB7IHNlbGVjdGVkOiB0cnVlIH0gKS5hbnkoKSAmJiBpZHgxID09PSAtMSApIHsKCQkvLyBzZWxlY3QgZnJvbSB0b3AgdG8gaGVyZSAtIHNsaWdodGx5IG9kZCwgYnV0IGJvdGggV2luZG93cyBhbmQgTWFjIE9TCgkJLy8gZG8gdGhpcwoJCWluZGV4ZXMuc3BsaWNlKCAkLmluQXJyYXkoIGlkeCwgaW5kZXhlcyApKzEsIGluZGV4ZXMubGVuZ3RoICk7Cgl9CgllbHNlIHsKCQkvLyByZXZlcnNlIHNvIHdlIGNhbiBzaGlmdCBjbGljayAndXAnIGFzIHdlbGwgYXMgZG93bgoJCWlmICggaWR4MSA+IGlkeDIgKSB7CgkJCXZhciB0bXAgPSBpZHgyOwoJCQlpZHgyID0gaWR4MTsKCQkJaWR4MSA9IHRtcDsKCQl9CgoJCWluZGV4ZXMuc3BsaWNlKCBpZHgyKzEsIGluZGV4ZXMubGVuZ3RoICk7CgkJaW5kZXhlcy5zcGxpY2UoIDAsIGlkeDEgKTsKCX0KCglpZiAoICEgZHRbdHlwZV0oIGlkeCwgeyBzZWxlY3RlZDogdHJ1ZSB9ICkuYW55KCkgKSB7CgkJLy8gU2VsZWN0IHJhbmdlCgkJZHRbdHlwZSsncyddKCBpbmRleGVzICkuc2VsZWN0KCk7Cgl9CgllbHNlIHsKCQkvLyBEZXNlbGVjdCByYW5nZSAtIG5lZWQgdG8ga2VlcCB0aGUgY2xpY2tlZCBvbiByb3cgc2VsZWN0ZWQKCQlpbmRleGVzLnNwbGljZSggJC5pbkFycmF5KCBpZHgsIGluZGV4ZXMgKSwgMSApOwoJCWR0W3R5cGUrJ3MnXSggaW5kZXhlcyApLmRlc2VsZWN0KCk7Cgl9Cn0KCi8qKgogKiBDbGVhciBhbGwgc2VsZWN0ZWQgaXRlbXMKICoKICogQHBhcmFtICB7RGF0YVRhYmxlLnNldHRpbmdzfSBjdHggU2V0dGluZ3Mgb2JqZWN0IG9mIHRoZSBob3N0IERhdGFUYWJsZQogKiBAcGFyYW0gIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdIEZvcmNlIHRoZSBkZS1zZWxlY3Rpb24gdG8gaGFwcGVuLCByZWdhcmRsZXNzCiAqICAgICBvZiBzZWxlY3Rpb24gc3R5bGUKICogQHByaXZhdGUKICovCmZ1bmN0aW9uIGNsZWFyKCBjdHgsIGZvcmNlICkKewoJaWYgKCBmb3JjZSB8fCBjdHguX3NlbGVjdC5zdHlsZSA9PT0gJ3NpbmdsZScgKSB7CgkJdmFyIGFwaSA9IG5ldyBEYXRhVGFibGUuQXBpKCBjdHggKTsKCQkKCQlhcGkucm93cyggeyBzZWxlY3RlZDogdHJ1ZSB9ICkuZGVzZWxlY3QoKTsKCQlhcGkuY29sdW1ucyggeyBzZWxlY3RlZDogdHJ1ZSB9ICkuZGVzZWxlY3QoKTsKCQlhcGkuY2VsbHMoIHsgc2VsZWN0ZWQ6IHRydWUgfSApLmRlc2VsZWN0KCk7Cgl9Cn0KCi8qKgogKiBTZWxlY3QgaXRlbXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBmb3Igc3R5bGUgYW5kIGl0ZW1zLgogKgogKiBAcGFyYW0gIHtvYmplY3R9ICAgICAgICAgICAgIGUgICAgTW91c2UgZXZlbnQgb2JqZWN0CiAqIEBwYXJhbSAge0RhdGFUYWJsZXMuQXBpfSAgICAgZHQgICBEYXRhVGFibGUKICogQHBhcmFtICB7RGF0YVRhYmxlLnNldHRpbmdzfSBjdHggIFNldHRpbmdzIG9iamVjdCBvZiB0aGUgaG9zdCBEYXRhVGFibGUKICogQHBhcmFtICB7c3RyaW5nfSAgICAgICAgICAgICB0eXBlIEl0ZW1zIHRvIHNlbGVjdAogKiBAcGFyYW0gIHtpbnR8b2JqZWN0fSAgICAgICAgIGlkeCAgSW5kZXggb2YgdGhlIGl0ZW0gdG8gc2VsZWN0CiAqIEBwcml2YXRlCiAqLwpmdW5jdGlvbiB0eXBlU2VsZWN0ICggZSwgZHQsIGN0eCwgdHlwZSwgaWR4ICkKewoJdmFyIHN0eWxlID0gZHQuc2VsZWN0LnN0eWxlKCk7Cgl2YXIgdG9nZ2xlYWJsZSA9IGR0LnNlbGVjdC50b2dnbGVhYmxlKCk7Cgl2YXIgaXNTZWxlY3RlZCA9IGR0W3R5cGVdKCBpZHgsIHsgc2VsZWN0ZWQ6IHRydWUgfSApLmFueSgpOwoJCglpZiAoIGlzU2VsZWN0ZWQgJiYgISB0b2dnbGVhYmxlICkgewoJCXJldHVybjsKCX0KCglpZiAoIHN0eWxlID09PSAnb3MnICkgewoJCWlmICggZS5jdHJsS2V5IHx8IGUubWV0YUtleSApIHsKCQkJLy8gQWRkIG9yIHJlbW92ZSBmcm9tIHRoZSBzZWxlY3Rpb24KCQkJZHRbdHlwZV0oIGlkeCApLnNlbGVjdCggISBpc1NlbGVjdGVkICk7CgkJfQoJCWVsc2UgaWYgKCBlLnNoaWZ0S2V5ICkgewoJCQlpZiAoIHR5cGUgPT09ICdjZWxsJyApIHsKCQkJCWNlbGxSYW5nZSggZHQsIGlkeCwgY3R4Ll9zZWxlY3RfbGFzdENlbGwgfHwgbnVsbCApOwoJCQl9CgkJCWVsc2UgewoJCQkJcm93Q29sdW1uUmFuZ2UoIGR0LCB0eXBlLCBpZHgsIGN0eC5fc2VsZWN0X2xhc3RDZWxsID8KCQkJCQljdHguX3NlbGVjdF9sYXN0Q2VsbFt0eXBlXSA6CgkJCQkJbnVsbAoJCQkJKTsKCQkJfQoJCX0KCQllbHNlIHsKCQkJLy8gTm8gY21kIG9yIHNoaWZ0IGNsaWNrIC0gZGVzZWxlY3QgaWYgc2VsZWN0ZWQsIG9yIHNlbGVjdAoJCQkvLyB0aGlzIHJvdyBvbmx5CgkJCXZhciBzZWxlY3RlZCA9IGR0W3R5cGUrJ3MnXSggeyBzZWxlY3RlZDogdHJ1ZSB9ICk7CgoJCQlpZiAoIGlzU2VsZWN0ZWQgJiYgc2VsZWN0ZWQuZmxhdHRlbigpLmxlbmd0aCA9PT0gMSApIHsKCQkJCWR0W3R5cGVdKCBpZHggKS5kZXNlbGVjdCgpOwoJCQl9CgkJCWVsc2UgewoJCQkJc2VsZWN0ZWQuZGVzZWxlY3QoKTsKCQkJCWR0W3R5cGVdKCBpZHggKS5zZWxlY3QoKTsKCQkJfQoJCX0KCX0gZWxzZSBpZiAoIHN0eWxlID09ICdtdWx0aStzaGlmdCcgKSB7CgkJaWYgKCBlLnNoaWZ0S2V5ICkgewoJCQlpZiAoIHR5cGUgPT09ICdjZWxsJyApIHsKCQkJCWNlbGxSYW5nZSggZHQsIGlkeCwgY3R4Ll9zZWxlY3RfbGFzdENlbGwgfHwgbnVsbCApOwoJCQl9CgkJCWVsc2UgewoJCQkJcm93Q29sdW1uUmFuZ2UoIGR0LCB0eXBlLCBpZHgsIGN0eC5fc2VsZWN0X2xhc3RDZWxsID8KCQkJCQljdHguX3NlbGVjdF9sYXN0Q2VsbFt0eXBlXSA6CgkJCQkJbnVsbAoJCQkJKTsKCQkJfQoJCX0KCQllbHNlIHsKCQkJZHRbIHR5cGUgXSggaWR4ICkuc2VsZWN0KCAhIGlzU2VsZWN0ZWQgKTsKCQl9Cgl9CgllbHNlIHsKCQlkdFsgdHlwZSBdKCBpZHggKS5zZWxlY3QoICEgaXNTZWxlY3RlZCApOwoJfQp9CgpmdW5jdGlvbiBfc2FmZUlkKCBub2RlICkgewoJcmV0dXJuIG5vZGUuaWQucmVwbGFjZSgvW15hLXpBLVowLTlcLVxfXS9nLCAnLScpOwp9CgoKCi8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCiAqIERhdGFUYWJsZXMgc2VsZWN0b3JzCiAqLwoKLy8gcm93IGFuZCBjb2x1bW4gYXJlIGJhc2ljYWxseSBpZGVudGljYWwganVzdCBhc3NpZ25lZCB0byBkaWZmZXJlbnQgcHJvcGVydGllcwovLyBhbmQgY2hlY2tpbmcgYSBkaWZmZXJlbnQgYXJyYXksIHNvIHdlIGNhbiBkeW5hbWljYWxseSBjcmVhdGUgdGhlIGZ1bmN0aW9ucyB0bwovLyByZWR1Y2UgdGhlIGNvZGUgc2l6ZQokLmVhY2goIFsKCXsgdHlwZTogJ3JvdycsIHByb3A6ICdhb0RhdGEnIH0sCgl7IHR5cGU6ICdjb2x1bW4nLCBwcm9wOiAnYW9Db2x1bW5zJyB9Cl0sIGZ1bmN0aW9uICggaSwgbyApIHsKCURhdGFUYWJsZS5leHQuc2VsZWN0b3JbIG8udHlwZSBdLnB1c2goIGZ1bmN0aW9uICggc2V0dGluZ3MsIG9wdHMsIGluZGV4ZXMgKSB7CgkJdmFyIHNlbGVjdGVkID0gb3B0cy5zZWxlY3RlZDsKCQl2YXIgZGF0YTsKCQl2YXIgb3V0ID0gW107CgoJCWlmICggc2VsZWN0ZWQgIT09IHRydWUgJiYgc2VsZWN0ZWQgIT09IGZhbHNlICkgewoJCQlyZXR1cm4gaW5kZXhlczsKCQl9CgoJCWZvciAoIHZhciBpPTAsIGllbj1pbmRleGVzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQlkYXRhID0gc2V0dGluZ3NbIG8ucHJvcCBdWyBpbmRleGVzW2ldIF07CgoJCQlpZiAoIChzZWxlY3RlZCA9PT0gdHJ1ZSAmJiBkYXRhLl9zZWxlY3Rfc2VsZWN0ZWQgPT09IHRydWUpIHx8CgkJCSAgICAgKHNlbGVjdGVkID09PSBmYWxzZSAmJiAhIGRhdGEuX3NlbGVjdF9zZWxlY3RlZCApCgkJCSkgewoJCQkJb3V0LnB1c2goIGluZGV4ZXNbaV0gKTsKCQkJfQoJCX0KCgkJcmV0dXJuIG91dDsKCX0gKTsKfSApOwoKRGF0YVRhYmxlLmV4dC5zZWxlY3Rvci5jZWxsLnB1c2goIGZ1bmN0aW9uICggc2V0dGluZ3MsIG9wdHMsIGNlbGxzICkgewoJdmFyIHNlbGVjdGVkID0gb3B0cy5zZWxlY3RlZDsKCXZhciByb3dEYXRhOwoJdmFyIG91dCA9IFtdOwoKCWlmICggc2VsZWN0ZWQgPT09IHVuZGVmaW5lZCApIHsKCQlyZXR1cm4gY2VsbHM7Cgl9CgoJZm9yICggdmFyIGk9MCwgaWVuPWNlbGxzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCXJvd0RhdGEgPSBzZXR0aW5ncy5hb0RhdGFbIGNlbGxzW2ldLnJvdyBdOwoKCQlpZiAoIChzZWxlY3RlZCA9PT0gdHJ1ZSAmJiByb3dEYXRhLl9zZWxlY3RlZF9jZWxscyAmJiByb3dEYXRhLl9zZWxlY3RlZF9jZWxsc1sgY2VsbHNbaV0uY29sdW1uIF0gPT09IHRydWUpIHx8CgkJICAgICAoc2VsZWN0ZWQgPT09IGZhbHNlICYmICggISByb3dEYXRhLl9zZWxlY3RlZF9jZWxscyB8fCAhIHJvd0RhdGEuX3NlbGVjdGVkX2NlbGxzWyBjZWxsc1tpXS5jb2x1bW4gXSApICkKCQkpIHsKCQkJb3V0LnB1c2goIGNlbGxzW2ldICk7CgkJfQoJfQoKCXJldHVybiBvdXQ7Cn0gKTsKCgoKLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKICogRGF0YVRhYmxlcyBBUEkKICoKICogRm9yIGNvbXBsZXRlIGRvY3VtZW50YXRpb24sIHBsZWFzZSByZWZlciB0byB0aGUgZG9jcy9hcGkgZGlyZWN0b3J5IG9yIHRoZQogKiBEYXRhVGFibGVzIHNpdGUKICovCgovLyBMb2NhbCB2YXJpYWJsZXMgdG8gaW1wcm92ZSBjb21wcmVzc2lvbgp2YXIgYXBpUmVnaXN0ZXIgPSBEYXRhVGFibGUuQXBpLnJlZ2lzdGVyOwp2YXIgYXBpUmVnaXN0ZXJQbHVyYWwgPSBEYXRhVGFibGUuQXBpLnJlZ2lzdGVyUGx1cmFsOwoKYXBpUmVnaXN0ZXIoICdzZWxlY3QoKScsIGZ1bmN0aW9uICgpIHsKCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIGN0eCApIHsKCQlEYXRhVGFibGUuc2VsZWN0LmluaXQoIG5ldyBEYXRhVGFibGUuQXBpKCBjdHggKSApOwoJfSApOwp9ICk7CgphcGlSZWdpc3RlciggJ3NlbGVjdC5ibHVyYWJsZSgpJywgZnVuY3Rpb24gKCBmbGFnICkgewoJaWYgKCBmbGFnID09PSB1bmRlZmluZWQgKSB7CgkJcmV0dXJuIHRoaXMuY29udGV4dFswXS5fc2VsZWN0LmJsdXJhYmxlOwoJfQoKCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIGN0eCApIHsKCQljdHguX3NlbGVjdC5ibHVyYWJsZSA9IGZsYWc7Cgl9ICk7Cn0gKTsKCmFwaVJlZ2lzdGVyKCAnc2VsZWN0LnRvZ2dsZWFibGUoKScsIGZ1bmN0aW9uICggZmxhZyApIHsKCWlmICggZmxhZyA9PT0gdW5kZWZpbmVkICkgewoJCXJldHVybiB0aGlzLmNvbnRleHRbMF0uX3NlbGVjdC50b2dnbGVhYmxlOwoJfQoKCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIGN0eCApIHsKCQljdHguX3NlbGVjdC50b2dnbGVhYmxlID0gZmxhZzsKCX0gKTsKfSApOwoKYXBpUmVnaXN0ZXIoICdzZWxlY3QuaW5mbygpJywgZnVuY3Rpb24gKCBmbGFnICkgewoJaWYgKCBpbmZvID09PSB1bmRlZmluZWQgKSB7CgkJcmV0dXJuIHRoaXMuY29udGV4dFswXS5fc2VsZWN0LmluZm87Cgl9CgoJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggY3R4ICkgewoJCWN0eC5fc2VsZWN0LmluZm8gPSBmbGFnOwoJfSApOwp9ICk7CgphcGlSZWdpc3RlciggJ3NlbGVjdC5pdGVtcygpJywgZnVuY3Rpb24gKCBpdGVtcyApIHsKCWlmICggaXRlbXMgPT09IHVuZGVmaW5lZCApIHsKCQlyZXR1cm4gdGhpcy5jb250ZXh0WzBdLl9zZWxlY3QuaXRlbXM7Cgl9CgoJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggY3R4ICkgewoJCWN0eC5fc2VsZWN0Lml0ZW1zID0gaXRlbXM7CgoJCWV2ZW50VHJpZ2dlciggbmV3IERhdGFUYWJsZS5BcGkoIGN0eCApLCAnc2VsZWN0SXRlbXMnLCBbIGl0ZW1zIF0gKTsKCX0gKTsKfSApOwoKLy8gVGFrZXMgZWZmZWN0IGZyb20gdGhlIF9uZXh0XyBzZWxlY3Rpb24uIE5vbmUgZGlzYWJsZXMgZnV0dXJlIHNlbGVjdGlvbiwgYnV0Ci8vIGRvZXMgbm90IGNsZWFyIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4gVXNlIHRoZSBgZGVzZWxlY3RgIG1ldGhvZHMgZm9yIHRoYXQKYXBpUmVnaXN0ZXIoICdzZWxlY3Quc3R5bGUoKScsIGZ1bmN0aW9uICggc3R5bGUgKSB7CglpZiAoIHN0eWxlID09PSB1bmRlZmluZWQgKSB7CgkJcmV0dXJuIHRoaXMuY29udGV4dFswXS5fc2VsZWN0LnN0eWxlOwoJfQoKCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIGN0eCApIHsKCQljdHguX3NlbGVjdC5zdHlsZSA9IHN0eWxlOwoKCQlpZiAoICEgY3R4Ll9zZWxlY3RfaW5pdCApIHsKCQkJaW5pdCggY3R4ICk7CgkJfQoKCQkvLyBBZGQgLyByZW1vdmUgbW91c2UgZXZlbnQgaGFuZGxlcnMuIFRoZXkgYXJlbid0IHJlcXVpcmVkIHdoZW4gb25seQoJCS8vIEFQSSBzZWxlY3Rpb24gaXMgYXZhaWxhYmxlCgkJdmFyIGR0ID0gbmV3IERhdGFUYWJsZS5BcGkoIGN0eCApOwoJCWRpc2FibGVNb3VzZVNlbGVjdGlvbiggZHQgKTsKCQkKCQlpZiAoIHN0eWxlICE9PSAnYXBpJyApIHsKCQkJZW5hYmxlTW91c2VTZWxlY3Rpb24oIGR0ICk7CgkJfQoKCQlldmVudFRyaWdnZXIoIG5ldyBEYXRhVGFibGUuQXBpKCBjdHggKSwgJ3NlbGVjdFN0eWxlJywgWyBzdHlsZSBdICk7Cgl9ICk7Cn0gKTsKCmFwaVJlZ2lzdGVyKCAnc2VsZWN0LnNlbGVjdG9yKCknLCBmdW5jdGlvbiAoIHNlbGVjdG9yICkgewoJaWYgKCBzZWxlY3RvciA9PT0gdW5kZWZpbmVkICkgewoJCXJldHVybiB0aGlzLmNvbnRleHRbMF0uX3NlbGVjdC5zZWxlY3RvcjsKCX0KCglyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBjdHggKSB7CgkJZGlzYWJsZU1vdXNlU2VsZWN0aW9uKCBuZXcgRGF0YVRhYmxlLkFwaSggY3R4ICkgKTsKCgkJY3R4Ll9zZWxlY3Quc2VsZWN0b3IgPSBzZWxlY3RvcjsKCgkJaWYgKCBjdHguX3NlbGVjdC5zdHlsZSAhPT0gJ2FwaScgKSB7CgkJCWVuYWJsZU1vdXNlU2VsZWN0aW9uKCBuZXcgRGF0YVRhYmxlLkFwaSggY3R4ICkgKTsKCQl9Cgl9ICk7Cn0gKTsKCgoKYXBpUmVnaXN0ZXJQbHVyYWwoICdyb3dzKCkuc2VsZWN0KCknLCAncm93KCkuc2VsZWN0KCknLCBmdW5jdGlvbiAoIHNlbGVjdCApIHsKCXZhciBhcGkgPSB0aGlzOwoKCWlmICggc2VsZWN0ID09PSBmYWxzZSApIHsKCQlyZXR1cm4gdGhpcy5kZXNlbGVjdCgpOwoJfQoKCXRoaXMuaXRlcmF0b3IoICdyb3cnLCBmdW5jdGlvbiAoIGN0eCwgaWR4ICkgewoJCWNsZWFyKCBjdHggKTsKCgkJY3R4LmFvRGF0YVsgaWR4IF0uX3NlbGVjdF9zZWxlY3RlZCA9IHRydWU7CgkJJCggY3R4LmFvRGF0YVsgaWR4IF0ublRyICkuYWRkQ2xhc3MoIGN0eC5fc2VsZWN0LmNsYXNzTmFtZSApOwoJfSApOwoKCXRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggY3R4LCBpICkgewoJCWV2ZW50VHJpZ2dlciggYXBpLCAnc2VsZWN0JywgWyAncm93JywgYXBpW2ldIF0sIHRydWUgKTsKCX0gKTsKCglyZXR1cm4gdGhpczsKfSApOwoKYXBpUmVnaXN0ZXJQbHVyYWwoICdjb2x1bW5zKCkuc2VsZWN0KCknLCAnY29sdW1uKCkuc2VsZWN0KCknLCBmdW5jdGlvbiAoIHNlbGVjdCApIHsKCXZhciBhcGkgPSB0aGlzOwoKCWlmICggc2VsZWN0ID09PSBmYWxzZSApIHsKCQlyZXR1cm4gdGhpcy5kZXNlbGVjdCgpOwoJfQoKCXRoaXMuaXRlcmF0b3IoICdjb2x1bW4nLCBmdW5jdGlvbiAoIGN0eCwgaWR4ICkgewoJCWNsZWFyKCBjdHggKTsKCgkJY3R4LmFvQ29sdW1uc1sgaWR4IF0uX3NlbGVjdF9zZWxlY3RlZCA9IHRydWU7CgoJCXZhciBjb2x1bW4gPSBuZXcgRGF0YVRhYmxlLkFwaSggY3R4ICkuY29sdW1uKCBpZHggKTsKCgkJJCggY29sdW1uLmhlYWRlcigpICkuYWRkQ2xhc3MoIGN0eC5fc2VsZWN0LmNsYXNzTmFtZSApOwoJCSQoIGNvbHVtbi5mb290ZXIoKSApLmFkZENsYXNzKCBjdHguX3NlbGVjdC5jbGFzc05hbWUgKTsKCgkJY29sdW1uLm5vZGVzKCkudG8kKCkuYWRkQ2xhc3MoIGN0eC5fc2VsZWN0LmNsYXNzTmFtZSApOwoJfSApOwoKCXRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggY3R4LCBpICkgewoJCWV2ZW50VHJpZ2dlciggYXBpLCAnc2VsZWN0JywgWyAnY29sdW1uJywgYXBpW2ldIF0sIHRydWUgKTsKCX0gKTsKCglyZXR1cm4gdGhpczsKfSApOwoKYXBpUmVnaXN0ZXJQbHVyYWwoICdjZWxscygpLnNlbGVjdCgpJywgJ2NlbGwoKS5zZWxlY3QoKScsIGZ1bmN0aW9uICggc2VsZWN0ICkgewoJdmFyIGFwaSA9IHRoaXM7CgoJaWYgKCBzZWxlY3QgPT09IGZhbHNlICkgewoJCXJldHVybiB0aGlzLmRlc2VsZWN0KCk7Cgl9CgoJdGhpcy5pdGVyYXRvciggJ2NlbGwnLCBmdW5jdGlvbiAoIGN0eCwgcm93SWR4LCBjb2xJZHggKSB7CgkJY2xlYXIoIGN0eCApOwoKCQl2YXIgZGF0YSA9IGN0eC5hb0RhdGFbIHJvd0lkeCBdOwoKCQlpZiAoIGRhdGEuX3NlbGVjdGVkX2NlbGxzID09PSB1bmRlZmluZWQgKSB7CgkJCWRhdGEuX3NlbGVjdGVkX2NlbGxzID0gW107CgkJfQoKCQlkYXRhLl9zZWxlY3RlZF9jZWxsc1sgY29sSWR4IF0gPSB0cnVlOwoKCQlpZiAoIGRhdGEuYW5DZWxscyApIHsKCQkJJCggZGF0YS5hbkNlbGxzWyBjb2xJZHggXSApLmFkZENsYXNzKCBjdHguX3NlbGVjdC5jbGFzc05hbWUgKTsKCQl9Cgl9ICk7CgoJdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBjdHgsIGkgKSB7CgkJZXZlbnRUcmlnZ2VyKCBhcGksICdzZWxlY3QnLCBbICdjZWxsJywgYXBpW2ldIF0sIHRydWUgKTsKCX0gKTsKCglyZXR1cm4gdGhpczsKfSApOwoKCmFwaVJlZ2lzdGVyUGx1cmFsKCAncm93cygpLmRlc2VsZWN0KCknLCAncm93KCkuZGVzZWxlY3QoKScsIGZ1bmN0aW9uICgpIHsKCXZhciBhcGkgPSB0aGlzOwoKCXRoaXMuaXRlcmF0b3IoICdyb3cnLCBmdW5jdGlvbiAoIGN0eCwgaWR4ICkgewoJCWN0eC5hb0RhdGFbIGlkeCBdLl9zZWxlY3Rfc2VsZWN0ZWQgPSBmYWxzZTsKCQkkKCBjdHguYW9EYXRhWyBpZHggXS5uVHIgKS5yZW1vdmVDbGFzcyggY3R4Ll9zZWxlY3QuY2xhc3NOYW1lICk7Cgl9ICk7CgoJdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBjdHgsIGkgKSB7CgkJZXZlbnRUcmlnZ2VyKCBhcGksICdkZXNlbGVjdCcsIFsgJ3JvdycsIGFwaVtpXSBdLCB0cnVlICk7Cgl9ICk7CgoJcmV0dXJuIHRoaXM7Cn0gKTsKCmFwaVJlZ2lzdGVyUGx1cmFsKCAnY29sdW1ucygpLmRlc2VsZWN0KCknLCAnY29sdW1uKCkuZGVzZWxlY3QoKScsIGZ1bmN0aW9uICgpIHsKCXZhciBhcGkgPSB0aGlzOwoKCXRoaXMuaXRlcmF0b3IoICdjb2x1bW4nLCBmdW5jdGlvbiAoIGN0eCwgaWR4ICkgewoJCWN0eC5hb0NvbHVtbnNbIGlkeCBdLl9zZWxlY3Rfc2VsZWN0ZWQgPSBmYWxzZTsKCgkJdmFyIGFwaSA9IG5ldyBEYXRhVGFibGUuQXBpKCBjdHggKTsKCQl2YXIgY29sdW1uID0gYXBpLmNvbHVtbiggaWR4ICk7CgoJCSQoIGNvbHVtbi5oZWFkZXIoKSApLnJlbW92ZUNsYXNzKCBjdHguX3NlbGVjdC5jbGFzc05hbWUgKTsKCQkkKCBjb2x1bW4uZm9vdGVyKCkgKS5yZW1vdmVDbGFzcyggY3R4Ll9zZWxlY3QuY2xhc3NOYW1lICk7CgoJCS8vIE5lZWQgdG8gbG9vcCBvdmVyIGVhY2ggY2VsbCwgcmF0aGVyIHRoYW4ganVzdCB1c2luZwoJCS8vIGBjb2x1bW4oKS5ub2RlcygpYCBhcyBjZWxscyB3aGljaCBhcmUgaW5kaXZpZHVhbGx5IHNlbGVjdGVkIHNob3VsZAoJCS8vIG5vdCBoYXZlIHRoZSBgc2VsZWN0ZWRgIGNsYXNzIHJlbW92ZWQgZnJvbSB0aGVtCgkJYXBpLmNlbGxzKCBudWxsLCBpZHggKS5pbmRleGVzKCkuZWFjaCggZnVuY3Rpb24gKGNlbGxJZHgpIHsKCQkJdmFyIGRhdGEgPSBjdHguYW9EYXRhWyBjZWxsSWR4LnJvdyBdOwoJCQl2YXIgY2VsbFNlbGVjdGVkID0gZGF0YS5fc2VsZWN0ZWRfY2VsbHM7CgoJCQlpZiAoIGRhdGEuYW5DZWxscyAmJiAoISBjZWxsU2VsZWN0ZWQgfHwgISBjZWxsU2VsZWN0ZWRbIGNlbGxJZHguY29sdW1uIF0pICkgewoJCQkJJCggZGF0YS5hbkNlbGxzWyBjZWxsSWR4LmNvbHVtbiAgXSApLnJlbW92ZUNsYXNzKCBjdHguX3NlbGVjdC5jbGFzc05hbWUgKTsKCQkJfQoJCX0gKTsKCX0gKTsKCgl0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIGN0eCwgaSApIHsKCQlldmVudFRyaWdnZXIoIGFwaSwgJ2Rlc2VsZWN0JywgWyAnY29sdW1uJywgYXBpW2ldIF0sIHRydWUgKTsKCX0gKTsKCglyZXR1cm4gdGhpczsKfSApOwoKYXBpUmVnaXN0ZXJQbHVyYWwoICdjZWxscygpLmRlc2VsZWN0KCknLCAnY2VsbCgpLmRlc2VsZWN0KCknLCBmdW5jdGlvbiAoKSB7Cgl2YXIgYXBpID0gdGhpczsKCgl0aGlzLml0ZXJhdG9yKCAnY2VsbCcsIGZ1bmN0aW9uICggY3R4LCByb3dJZHgsIGNvbElkeCApIHsKCQl2YXIgZGF0YSA9IGN0eC5hb0RhdGFbIHJvd0lkeCBdOwoKCQlkYXRhLl9zZWxlY3RlZF9jZWxsc1sgY29sSWR4IF0gPSBmYWxzZTsKCgkJLy8gUmVtb3ZlIGNsYXNzIG9ubHkgaWYgdGhlIGNlbGxzIGV4aXN0LCBhbmQgdGhlIGNlbGwgaXMgbm90IGNvbHVtbgoJCS8vIHNlbGVjdGVkLCBpbiB3aGljaCBjYXNlIHRoZSBjbGFzcyBzaG91bGQgcmVtYWluIChzaW5jZSBpdCBpcyBzZWxlY3RlZAoJCS8vIGluIHRoZSBjb2x1bW4pCgkJaWYgKCBkYXRhLmFuQ2VsbHMgJiYgISBjdHguYW9Db2x1bW5zWyBjb2xJZHggXS5fc2VsZWN0X3NlbGVjdGVkICkgewoJCQkkKCBkYXRhLmFuQ2VsbHNbIGNvbElkeCBdICkucmVtb3ZlQ2xhc3MoIGN0eC5fc2VsZWN0LmNsYXNzTmFtZSApOwoJCX0KCX0gKTsKCgl0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIGN0eCwgaSApIHsKCQlldmVudFRyaWdnZXIoIGFwaSwgJ2Rlc2VsZWN0JywgWyAnY2VsbCcsIGFwaVtpXSBdLCB0cnVlICk7Cgl9ICk7CgoJcmV0dXJuIHRoaXM7Cn0gKTsKCgoKLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICoKICogQnV0dG9ucwogKi8KZnVuY3Rpb24gaTE4biggbGFiZWwsIGRlZiApIHsKCXJldHVybiBmdW5jdGlvbiAoZHQpIHsKCQlyZXR1cm4gZHQuaTE4biggJ2J1dHRvbnMuJytsYWJlbCwgZGVmICk7Cgl9Owp9CgovLyBDb21tb24gZXZlbnRzIHdpdGggc3VpdGFibGUgbmFtZXNwYWNlcwpmdW5jdGlvbiBuYW1lc3BhY2VkRXZlbnRzICggY29uZmlnICkgewoJdmFyIHVuaXF1ZSA9IGNvbmZpZy5fZXZlbnROYW1lc3BhY2U7CgoJcmV0dXJuICdkcmF3LmR0LkRUJyt1bmlxdWUrJyBzZWxlY3QuZHQuRFQnK3VuaXF1ZSsnIGRlc2VsZWN0LmR0LkRUJyt1bmlxdWU7Cn0KCmZ1bmN0aW9uIGVuYWJsZWQgKCBkdCwgY29uZmlnICkgewoJaWYgKCAkLmluQXJyYXkoICdyb3dzJywgY29uZmlnLmxpbWl0VG8gKSAhPT0gLTEgJiYgZHQucm93cyggeyBzZWxlY3RlZDogdHJ1ZSB9ICkuYW55KCkgKSB7CgkJcmV0dXJuIHRydWU7Cgl9CgoJaWYgKCAkLmluQXJyYXkoICdjb2x1bW5zJywgY29uZmlnLmxpbWl0VG8gKSAhPT0gLTEgJiYgZHQuY29sdW1ucyggeyBzZWxlY3RlZDogdHJ1ZSB9ICkuYW55KCkgKSB7CgkJcmV0dXJuIHRydWU7Cgl9CgoJaWYgKCAkLmluQXJyYXkoICdjZWxscycsIGNvbmZpZy5saW1pdFRvICkgIT09IC0xICYmIGR0LmNlbGxzKCB7IHNlbGVjdGVkOiB0cnVlIH0gKS5hbnkoKSApIHsKCQlyZXR1cm4gdHJ1ZTsKCX0KCglyZXR1cm4gZmFsc2U7Cn0KCnZhciBfYnV0dG9uTmFtZXNwYWNlID0gMDsKCiQuZXh0ZW5kKCBEYXRhVGFibGUuZXh0LmJ1dHRvbnMsIHsKCXNlbGVjdGVkOiB7CgkJdGV4dDogaTE4biggJ3NlbGVjdGVkJywgJ1NlbGVjdGVkJyApLAoJCWNsYXNzTmFtZTogJ2J1dHRvbnMtc2VsZWN0ZWQnLAoJCWxpbWl0VG86IFsgJ3Jvd3MnLCAnY29sdW1ucycsICdjZWxscycgXSwKCQlpbml0OiBmdW5jdGlvbiAoIGR0LCBub2RlLCBjb25maWcgKSB7CgkJCXZhciB0aGF0ID0gdGhpczsKCQkJY29uZmlnLl9ldmVudE5hbWVzcGFjZSA9ICcuc2VsZWN0JysoX2J1dHRvbk5hbWVzcGFjZSsrKTsKCgkJCS8vIC5EVCBuYW1lc3BhY2UgbGlzdGVuZXJzIGFyZSByZW1vdmVkIGJ5IERhdGFUYWJsZXMgYXV0b21hdGljYWxseQoJCQkvLyBvbiB0YWJsZSBkZXN0cm95CgkJCWR0Lm9uKCBuYW1lc3BhY2VkRXZlbnRzKGNvbmZpZyksIGZ1bmN0aW9uICgpIHsKCQkJCXRoYXQuZW5hYmxlKCBlbmFibGVkKGR0LCBjb25maWcpICk7CgkJCX0gKTsKCgkJCXRoaXMuZGlzYWJsZSgpOwoJCX0sCgkJZGVzdHJveTogZnVuY3Rpb24gKCBkdCwgbm9kZSwgY29uZmlnICkgewoJCQlkdC5vZmYoIGNvbmZpZy5fZXZlbnROYW1lc3BhY2UgKTsKCQl9Cgl9LAoJc2VsZWN0ZWRTaW5nbGU6IHsKCQl0ZXh0OiBpMThuKCAnc2VsZWN0ZWRTaW5nbGUnLCAnU2VsZWN0ZWQgc2luZ2xlJyApLAoJCWNsYXNzTmFtZTogJ2J1dHRvbnMtc2VsZWN0ZWQtc2luZ2xlJywKCQlpbml0OiBmdW5jdGlvbiAoIGR0LCBub2RlLCBjb25maWcgKSB7CgkJCXZhciB0aGF0ID0gdGhpczsKCQkJY29uZmlnLl9ldmVudE5hbWVzcGFjZSA9ICcuc2VsZWN0JysoX2J1dHRvbk5hbWVzcGFjZSsrKTsKCgkJCWR0Lm9uKCBuYW1lc3BhY2VkRXZlbnRzKGNvbmZpZyksIGZ1bmN0aW9uICgpIHsKCQkJCXZhciBjb3VudCA9IGR0LnJvd3MoIHsgc2VsZWN0ZWQ6IHRydWUgfSApLmZsYXR0ZW4oKS5sZW5ndGggKwoJCQkJICAgICAgICAgICAgZHQuY29sdW1ucyggeyBzZWxlY3RlZDogdHJ1ZSB9ICkuZmxhdHRlbigpLmxlbmd0aCArCgkJCQkgICAgICAgICAgICBkdC5jZWxscyggeyBzZWxlY3RlZDogdHJ1ZSB9ICkuZmxhdHRlbigpLmxlbmd0aDsKCgkJCQl0aGF0LmVuYWJsZSggY291bnQgPT09IDEgKTsKCQkJfSApOwoKCQkJdGhpcy5kaXNhYmxlKCk7CgkJfSwKCQlkZXN0cm95OiBmdW5jdGlvbiAoIGR0LCBub2RlLCBjb25maWcgKSB7CgkJCWR0Lm9mZiggY29uZmlnLl9ldmVudE5hbWVzcGFjZSApOwoJCX0KCX0sCglzZWxlY3RBbGw6IHsKCQl0ZXh0OiBpMThuKCAnc2VsZWN0QWxsJywgJ1NlbGVjdCBhbGwnICksCgkJY2xhc3NOYW1lOiAnYnV0dG9ucy1zZWxlY3QtYWxsJywKCQlhY3Rpb246IGZ1bmN0aW9uICgpIHsKCQkJdmFyIGl0ZW1zID0gdGhpcy5zZWxlY3QuaXRlbXMoKTsKCQkJdGhpc1sgaXRlbXMrJ3MnIF0oKS5zZWxlY3QoKTsKCQl9Cgl9LAoJc2VsZWN0Tm9uZTogewoJCXRleHQ6IGkxOG4oICdzZWxlY3ROb25lJywgJ0Rlc2VsZWN0IGFsbCcgKSwKCQljbGFzc05hbWU6ICdidXR0b25zLXNlbGVjdC1ub25lJywKCQlhY3Rpb246IGZ1bmN0aW9uICgpIHsKCQkJY2xlYXIoIHRoaXMuc2V0dGluZ3MoKVswXSwgdHJ1ZSApOwoJCX0sCgkJaW5pdDogZnVuY3Rpb24gKCBkdCwgbm9kZSwgY29uZmlnICkgewoJCQl2YXIgdGhhdCA9IHRoaXM7CgkJCWNvbmZpZy5fZXZlbnROYW1lc3BhY2UgPSAnLnNlbGVjdCcrKF9idXR0b25OYW1lc3BhY2UrKyk7CgoJCQlkdC5vbiggbmFtZXNwYWNlZEV2ZW50cyhjb25maWcpLCBmdW5jdGlvbiAoKSB7CgkJCQl2YXIgY291bnQgPSBkdC5yb3dzKCB7IHNlbGVjdGVkOiB0cnVlIH0gKS5mbGF0dGVuKCkubGVuZ3RoICsKCQkJCSAgICAgICAgICAgIGR0LmNvbHVtbnMoIHsgc2VsZWN0ZWQ6IHRydWUgfSApLmZsYXR0ZW4oKS5sZW5ndGggKwoJCQkJICAgICAgICAgICAgZHQuY2VsbHMoIHsgc2VsZWN0ZWQ6IHRydWUgfSApLmZsYXR0ZW4oKS5sZW5ndGg7CgoJCQkJdGhhdC5lbmFibGUoIGNvdW50ID4gMCApOwoJCQl9ICk7CgoJCQl0aGlzLmRpc2FibGUoKTsKCQl9LAoJCWRlc3Ryb3k6IGZ1bmN0aW9uICggZHQsIG5vZGUsIGNvbmZpZyApIHsKCQkJZHQub2ZmKCBjb25maWcuX2V2ZW50TmFtZXNwYWNlICk7CgkJfQoJfQp9ICk7CgokLmVhY2goIFsgJ1JvdycsICdDb2x1bW4nLCAnQ2VsbCcgXSwgZnVuY3Rpb24gKCBpLCBpdGVtICkgewoJdmFyIGxjID0gaXRlbS50b0xvd2VyQ2FzZSgpOwoKCURhdGFUYWJsZS5leHQuYnV0dG9uc1sgJ3NlbGVjdCcraXRlbSsncycgXSA9IHsKCQl0ZXh0OiBpMThuKCAnc2VsZWN0JytpdGVtKydzJywgJ1NlbGVjdCAnK2xjKydzJyApLAoJCWNsYXNzTmFtZTogJ2J1dHRvbnMtc2VsZWN0LScrbGMrJ3MnLAoJCWFjdGlvbjogZnVuY3Rpb24gKCkgewoJCQl0aGlzLnNlbGVjdC5pdGVtcyggbGMgKTsKCQl9LAoJCWluaXQ6IGZ1bmN0aW9uICggZHQgKSB7CgkJCXZhciB0aGF0ID0gdGhpczsKCgkJCWR0Lm9uKCAnc2VsZWN0SXRlbXMuZHQuRFQnLCBmdW5jdGlvbiAoIGUsIGN0eCwgaXRlbXMgKSB7CgkJCQl0aGF0LmFjdGl2ZSggaXRlbXMgPT09IGxjICk7CgkJCX0gKTsKCQl9Cgl9Owp9ICk7CgoKCi8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCiAqIEluaXRpYWxpc2F0aW9uCiAqLwoKLy8gRGF0YVRhYmxlcyBjcmVhdGlvbiAtIGNoZWNrIGlmIHNlbGVjdCBoYXMgYmVlbiBkZWZpbmVkIGluIHRoZSBvcHRpb25zLiBOb3RlCi8vIHRoaXMgcmVxdWlyZWQgdGhhdCB0aGUgdGFibGUgYmUgaW4gdGhlIGRvY3VtZW50ISBJZiBpdCBpc24ndCB0aGVuIHNvbWV0aGluZwovLyBuZWVkcyB0byB0cmlnZ2VyIHRoaXMgbWV0aG9kIHVuZm9ydHVuYXRlbHkuIFRoZSBuZXh0IG1ham9yIHJlbGVhc2Ugb2YKLy8gRGF0YVRhYmxlcyB3aWxsIHJld29yayB0aGUgZXZlbnRzIGFuZCBhZGRyZXNzIHRoaXMuCiQoZG9jdW1lbnQpLm9uKCAncHJlSW5pdC5kdC5kdFNlbGVjdCcsIGZ1bmN0aW9uIChlLCBjdHgpIHsKCWlmICggZS5uYW1lc3BhY2UgIT09ICdkdCcgKSB7CgkJcmV0dXJuOwoJfQoKCURhdGFUYWJsZS5zZWxlY3QuaW5pdCggbmV3IERhdGFUYWJsZS5BcGkoIGN0eCApICk7Cn0gKTsKCgpyZXR1cm4gRGF0YVRhYmxlLnNlbGVjdDsKfSkpOwoKCg==]]></data>
	</file>
	<file>
	  <filename>/js/dev/math.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIG1hdGguanMKICogaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMKICoKICogTWF0aC5qcyBpcyBhbiBleHRlbnNpdmUgbWF0aCBsaWJyYXJ5IGZvciBKYXZhU2NyaXB0IGFuZCBOb2RlLmpzLAogKiBJdCBmZWF0dXJlcyByZWFsIGFuZCBjb21wbGV4IG51bWJlcnMsIHVuaXRzLCBtYXRyaWNlcywgYSBsYXJnZSBzZXQgb2YKICogbWF0aGVtYXRpY2FsIGZ1bmN0aW9ucywgYW5kIGEgZmxleGlibGUgZXhwcmVzc2lvbiBwYXJzZXIuCiAqCiAqIEB2ZXJzaW9uIDYuNi4xCiAqIEBkYXRlICAgIDIwMjAtMDItMjYKICoKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgSm9zIGRlIEpvbmcgPHdqb3NkZWpvbmdAZ21haWwuY29tPgogKgogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKICogb2YgdGhlIExpY2Vuc2UgYXQKICoKICogaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCiAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCiAqIHRoZSBMaWNlbnNlLgogKi8KCihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7CglpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpCgkJbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7CgllbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkKCQlkZWZpbmUoW10sIGZhY3RvcnkpOwoJZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpCgkJZXhwb3J0c1sibWF0aCJdID0gZmFjdG9yeSgpOwoJZWxzZQoJCXJvb3RbIm1hdGgiXSA9IGZhY3RvcnkoKTsKfSkodGhpcywgZnVuY3Rpb24oKSB7CnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCi8qKioqKiovIAkvLyBUaGUgbW9kdWxlIGNhY2hlCi8qKioqKiovIAl2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9OwovKioqKioqLwovKioqKioqLyAJLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb24KLyoqKioqKi8gCWZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHsKLyoqKioqKi8KLyoqKioqKi8gCQkvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGUKLyoqKioqKi8gCQlpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkgewovKioqKioqLyAJCQlyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0czsKLyoqKioqKi8gCQl9Ci8qKioqKiovIAkJLy8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSkKLyoqKioqKi8gCQl2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7Ci8qKioqKiovIAkJCWk6IG1vZHVsZUlkLAovKioqKioqLyAJCQlsOiBmYWxzZSwKLyoqKioqKi8gCQkJZXhwb3J0czoge30KLyoqKioqKi8gCQl9OwovKioqKioqLwovKioqKioqLyAJCS8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvbgovKioqKioqLyAJCW1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pOwovKioqKioqLwovKioqKioqLyAJCS8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWQKLyoqKioqKi8gCQltb2R1bGUubCA9IHRydWU7Ci8qKioqKiovCi8qKioqKiovIAkJLy8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGUKLyoqKioqKi8gCQlyZXR1cm4gbW9kdWxlLmV4cG9ydHM7Ci8qKioqKiovIAl9Ci8qKioqKiovCi8qKioqKiovCi8qKioqKiovIAkvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKQovKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlczsKLyoqKioqKi8KLyoqKioqKi8gCS8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlCi8qKioqKiovIAlfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzOwovKioqKioqLwovKioqKioqLyAJLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzCi8qKioqKiovIAlfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHsKLyoqKioqKi8gCQlpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7Ci8qKioqKiovIAkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pOwovKioqKioqLyAJCX0KLyoqKioqKi8gCX07Ci8qKioqKiovCi8qKioqKiovIAkvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzCi8qKioqKiovIAlfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7Ci8qKioqKiovIAkJaWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7Ci8qKioqKiovIAkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pOwovKioqKioqLyAJCX0KLyoqKioqKi8gCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pOwovKioqKioqLyAJfTsKLyoqKioqKi8KLyoqKioqKi8gCS8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdAovKioqKioqLyAJLy8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0Ci8qKioqKiovIAkvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnMKLyoqKioqKi8gCS8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdAovKioqKioqLyAJLy8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZQovKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHsKLyoqKioqKi8gCQlpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTsKLyoqKioqKi8gCQlpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlOwovKioqKioqLyAJCWlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7Ci8qKioqKiovIAkJdmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKLyoqKioqKi8gCQlfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpOwovKioqKioqLyAJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTsKLyoqKioqKi8gCQlpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7Ci8qKioqKiovIAkJcmV0dXJuIG5zOwovKioqKioqLyAJfTsKLyoqKioqKi8KLyoqKioqKi8gCS8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzCi8qKioqKiovIAlfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHsKLyoqKioqKi8gCQl2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID8KLyoqKioqKi8gCQkJZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDoKLyoqKioqKi8gCQkJZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTsKLyoqKioqKi8gCQlfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7Ci8qKioqKiovIAkJcmV0dXJuIGdldHRlcjsKLyoqKioqKi8gCX07Ci8qKioqKiovCi8qKioqKiovIAkvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwKLyoqKioqKi8gCV9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTsKLyoqKioqKi8KLyoqKioqKi8gCS8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fCi8qKioqKiovIAlfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSAiIjsKLyoqKioqKi8KLyoqKioqKi8KLyoqKioqKi8gCS8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0cwovKioqKioqLyAJcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTkpOwovKioqKioqLyB9KQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqLyAoWwovKiAwICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZmFjdG9yeTsgfSk7Ci8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBzb3J0RmFjdG9yaWVzICovCi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBjcmVhdGUgKi8KLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNGYWN0b3J5OyB9KTsKLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGFzc2VydERlcGVuZGVuY2llcyAqLwovKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgaXNPcHRpb25hbERlcGVuZGVuY3kgKi8KLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RyaXBPcHRpb25hbE5vdGF0aW9uOyB9KTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9hcnJheV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7CgoKLyoqCiAqIENyZWF0ZSBhIGZhY3RvcnkgZnVuY3Rpb24sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGluamVjdCBkZXBlbmRlbmNpZXMuCiAqCiAqIFRoZSBjcmVhdGVkIGZ1bmN0aW9ucyBhcmUgbWVtb2l6ZWQsIGEgY29uc2VjdXRpdmUgY2FsbCBvZiB0aGUgZmFjdG9yeQogKiB3aXRoIHRoZSBleGFjdCBzYW1lIGlucHV0cyB3aWxsIHJldHVybiB0aGUgc2FtZSBmdW5jdGlvbiBpbnN0YW5jZS4KICogVGhlIG1lbW9pemVkIGNhY2hlIGlzIGV4cG9zZWQgb24gYGZhY3RvcnkuY2FjaGVgIGFuZCBjYW4gYmUgY2xlYXJlZAogKiBpZiBuZWVkZWQuCiAqCiAqIEV4YW1wbGU6CiAqCiAqICAgICBjb25zdCBuYW1lID0gJ2xvZycKICogICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ2RpdmlkZVNjYWxhcicsICdDb21wbGV4J10KICoKICogICAgIGV4cG9ydCBjb25zdCBjcmVhdGVMb2cgPSBmYWN0b3J5KG5hbWUsIGRlcGVuZGVuY2llcywgKHsgdHlwZWQsIGNvbmZpZywgZGl2aWRlU2NhbGFyLCBDb21wbGV4IH0pID0+IHsKICogICAgICAgLy8gLi4uIGNyZWF0ZSB0aGUgZnVuY3Rpb24gbG9nIGhlcmUgYW5kIHJldHVybiBpdAogKiAgICAgfQogKgogKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgICAgICAgICAgTmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gYmUgY3JlYXRlZAogKiBAcGFyYW0ge3N0cmluZ1tdfSBkZXBlbmRlbmNpZXMgVGhlIG5hbWVzIG9mIGFsbCByZXF1aXJlZCBkZXBlbmRlbmNpZXMKICogQHBhcmFtIHtmdW5jdGlvbn0gY3JlYXRlICAgICAgIENhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCB3aXRoIGFuIG9iamVjdCB3aXRoIGFsbCBkZXBlbmRlbmNpZXMKICogQHBhcmFtIHtPYmplY3R9IFttZXRhXSAgICAgICAgIE9wdGlvbmFsIG9iamVjdCB3aXRoIG1ldGEgaW5mb3JtYXRpb24gdGhhdCB3aWxsIGJlIGF0dGFjaGVkCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgY3JlYXRlZCBmYWN0b3J5IGZ1bmN0aW9uIGFzIHByb3BlcnR5IGBtZXRhYC4KICogQHJldHVybnMge2Z1bmN0aW9ufQogKi8KCmZ1bmN0aW9uIGZhY3RvcnkobmFtZSwgZGVwZW5kZW5jaWVzLCBjcmVhdGUsIG1ldGEpIHsKICBmdW5jdGlvbiBhc3NlcnRBbmRDcmVhdGUoc2NvcGUpIHsKICAgIC8vIHdlIG9ubHkgcGFzcyB0aGUgcmVxdWVzdGVkIGRlcGVuZGVuY2llcyB0byB0aGUgZmFjdG9yeSBmdW5jdGlvbgogICAgLy8gdG8gcHJldmVudCBmdW5jdGlvbnMgdG8gcmVseSBvbiBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHkKICAgIC8vIHJlcXVlc3RlZC4KICAgIHZhciBkZXBzID0gT2JqZWN0KF9vYmplY3RfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1svKiBwaWNrU2hhbGxvdyAqLyAiaiJdKShzY29wZSwgZGVwZW5kZW5jaWVzLm1hcChzdHJpcE9wdGlvbmFsTm90YXRpb24pKTsKICAgIGFzc2VydERlcGVuZGVuY2llcyhuYW1lLCBkZXBlbmRlbmNpZXMsIHNjb3BlKTsKICAgIHJldHVybiBjcmVhdGUoZGVwcyk7CiAgfQoKICBhc3NlcnRBbmRDcmVhdGUuaXNGYWN0b3J5ID0gdHJ1ZTsKICBhc3NlcnRBbmRDcmVhdGUuZm4gPSBuYW1lOwogIGFzc2VydEFuZENyZWF0ZS5kZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXMuc2xpY2UoKS5zb3J0KCk7CgogIGlmIChtZXRhKSB7CiAgICBhc3NlcnRBbmRDcmVhdGUubWV0YSA9IG1ldGE7CiAgfQoKICByZXR1cm4gYXNzZXJ0QW5kQ3JlYXRlOwp9Ci8qKgogKiBTb3J0IGFsbCBmYWN0b3JpZXMgc3VjaCB0aGF0IHdoZW4gbG9hZGluZyBpbiBvcmRlciwgdGhlIGRlcGVuZGVuY2llcyBhcmUgcmVzb2x2ZWQuCiAqCiAqIEBwYXJhbSB7QXJyYXl9IGZhY3RvcmllcwogKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYSBuZXcgYXJyYXkgd2l0aCB0aGUgc29ydGVkIGZhY3Rvcmllcy4KICovCgpmdW5jdGlvbiBzb3J0RmFjdG9yaWVzKGZhY3RvcmllcykgewogIHZhciBmYWN0b3JpZXNCeU5hbWUgPSB7fTsKICBmYWN0b3JpZXMuZm9yRWFjaChmdW5jdGlvbiAoZmFjdG9yeSkgewogICAgZmFjdG9yaWVzQnlOYW1lW2ZhY3RvcnkuZm5dID0gZmFjdG9yeTsKICB9KTsKCiAgZnVuY3Rpb24gY29udGFpbnNEZXBlbmRlbmN5KGZhY3RvcnksIGRlcGVuZGVuY3kpIHsKICAgIC8vIFRPRE86IGRldGVjdCBjaXJjdWxhciByZWZlcmVuY2VzCiAgICBpZiAoaXNGYWN0b3J5KGZhY3RvcnkpKSB7CiAgICAgIGlmIChPYmplY3QoX2FycmF5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bLyogY29udGFpbnMgKi8gImIiXSkoZmFjdG9yeS5kZXBlbmRlbmNpZXMsIGRlcGVuZGVuY3kuZm4gfHwgZGVwZW5kZW5jeS5uYW1lKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CgogICAgICBpZiAoZmFjdG9yeS5kZXBlbmRlbmNpZXMuc29tZShmdW5jdGlvbiAoZCkgewogICAgICAgIHJldHVybiBjb250YWluc0RlcGVuZGVuY3koZmFjdG9yaWVzQnlOYW1lW2RdLCBkZXBlbmRlbmN5KTsKICAgICAgfSkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZhciBzb3J0ZWQgPSBbXTsKCiAgZnVuY3Rpb24gYWRkRmFjdG9yeShmYWN0b3J5KSB7CiAgICB2YXIgaW5kZXggPSAwOwoKICAgIHdoaWxlIChpbmRleCA8IHNvcnRlZC5sZW5ndGggJiYgIWNvbnRhaW5zRGVwZW5kZW5jeShzb3J0ZWRbaW5kZXhdLCBmYWN0b3J5KSkgewogICAgICBpbmRleCsrOwogICAgfQoKICAgIHNvcnRlZC5zcGxpY2UoaW5kZXgsIDAsIGZhY3RvcnkpOwogIH0gLy8gc29ydCByZWd1bGFyIGZhY3RvcnkgZnVuY3Rpb25zCgoKICBmYWN0b3JpZXMuZmlsdGVyKGlzRmFjdG9yeSkuZm9yRWFjaChhZGRGYWN0b3J5KTsgLy8gc29ydCBsZWdhY3kgZmFjdG9yeSBmdW5jdGlvbnMgQUZURVIgdGhlIHJlZ3VsYXIgZmFjdG9yeSBmdW5jdGlvbnMKCiAgZmFjdG9yaWVzLmZpbHRlcihmdW5jdGlvbiAoZmFjdG9yeSkgewogICAgcmV0dXJuICFpc0ZhY3RvcnkoZmFjdG9yeSk7CiAgfSkuZm9yRWFjaChhZGRGYWN0b3J5KTsKICByZXR1cm4gc29ydGVkOwp9IC8vIFRPRE86IGNvbW1lbnQgb3IgY2xlYW51cCBpZiB1bnVzZWQgaW4gdGhlIGVuZAoKZnVuY3Rpb24gY3JlYXRlKGZhY3RvcmllcykgewogIHZhciBzY29wZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307CiAgc29ydEZhY3RvcmllcyhmYWN0b3JpZXMpLmZvckVhY2goZnVuY3Rpb24gKGZhY3RvcnkpIHsKICAgIHJldHVybiBmYWN0b3J5KHNjb3BlKTsKICB9KTsKICByZXR1cm4gc2NvcGU7Cn0KLyoqCiAqIFRlc3Qgd2hldGhlciBhbiBvYmplY3QgaXMgYSBmYWN0b3J5LiBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gaXQgaGFzCiAqIHByb3BlcnRpZXMgbmFtZSwgZGVwZW5kZW5jaWVzLCBhbmQgYSBmdW5jdGlvbiBjcmVhdGUuCiAqIEBwYXJhbSB7Kn0gb2JqCiAqIEByZXR1cm5zIHtib29sZWFufQogKi8KCmZ1bmN0aW9uIGlzRmFjdG9yeShvYmopIHsKICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLmZuID09PSAnc3RyaW5nJyAmJiBBcnJheS5pc0FycmF5KG9iai5kZXBlbmRlbmNpZXMpOwp9Ci8qKgogKiBBc3NlcnQgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIG9mIGEgbGlzdCB3aXRoIGRlcGVuZGVuY2llcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBwcm92aWRlZCBzY29wZS4KICoKICogV2lsbCB0aHJvdyBhbiBleGNlcHRpb24gd2hlbiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzIG1pc3NpbmcuCiAqCiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgTmFtZSBmb3IgdGhlIGZ1bmN0aW9uIHRvIGJlIGNyZWF0ZWQuIFVzZWQgdG8gZ2VuZXJhdGUgYSB1c2VmdWwgZXJyb3IgbWVzc2FnZQogKiBAcGFyYW0ge3N0cmluZ1tdfSBkZXBlbmRlbmNpZXMKICogQHBhcmFtIHtPYmplY3R9IHNjb3BlCiAqLwoKZnVuY3Rpb24gYXNzZXJ0RGVwZW5kZW5jaWVzKG5hbWUsIGRlcGVuZGVuY2llcywgc2NvcGUpIHsKICB2YXIgYWxsRGVmaW5lZCA9IGRlcGVuZGVuY2llcy5maWx0ZXIoZnVuY3Rpb24gKGRlcGVuZGVuY3kpIHsKICAgIHJldHVybiAhaXNPcHRpb25hbERlcGVuZGVuY3koZGVwZW5kZW5jeSk7CiAgfSkgLy8gZmlsdGVyIG9wdGlvbmFscwogIC5ldmVyeShmdW5jdGlvbiAoZGVwZW5kZW5jeSkgewogICAgcmV0dXJuIHNjb3BlW2RlcGVuZGVuY3ldICE9PSB1bmRlZmluZWQ7CiAgfSk7CgogIGlmICghYWxsRGVmaW5lZCkgewogICAgdmFyIG1pc3NpbmdEZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXMuZmlsdGVyKGZ1bmN0aW9uIChkZXBlbmRlbmN5KSB7CiAgICAgIHJldHVybiBzY29wZVtkZXBlbmRlbmN5XSA9PT0gdW5kZWZpbmVkOwogICAgfSk7IC8vIFRPRE86IGNyZWF0ZSBhIGN1c3RvbSBlcnJvciBjbGFzcyBmb3IgdGhpcywgYSBNYXRoanNFcnJvciBvciBzb21ldGhpbmcgbGlrZSB0aGF0CgogICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY3JlYXRlIGZ1bmN0aW9uIFwiIi5jb25jYXQobmFtZSwgIlwiLCAiKSArICJzb21lIGRlcGVuZGVuY2llcyBhcmUgbWlzc2luZzogIi5jb25jYXQobWlzc2luZ0RlcGVuZGVuY2llcy5tYXAoZnVuY3Rpb24gKGQpIHsKICAgICAgcmV0dXJuICJcIiIuY29uY2F0KGQsICJcIiIpOwogICAgfSkuam9pbignLCAnKSwgIi4iKSk7CiAgfQp9CmZ1bmN0aW9uIGlzT3B0aW9uYWxEZXBlbmRlbmN5KGRlcGVuZGVuY3kpIHsKICByZXR1cm4gZGVwZW5kZW5jeSAmJiBkZXBlbmRlbmN5WzBdID09PSAnPyc7Cn0KZnVuY3Rpb24gc3RyaXBPcHRpb25hbE5vdGF0aW9uKGRlcGVuZGVuY3kpIHsKICByZXR1cm4gZGVwZW5kZW5jeSAmJiBkZXBlbmRlbmN5WzBdID09PSAnPycgPyBkZXBlbmRlbmN5LnNsaWNlKDEpIDogZGVwZW5kZW5jeTsKfQoKLyoqKi8gfSksCi8qIDEgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKInVzZSBzdHJpY3QiOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJ5IiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc051bWJlcjsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzQmlnTnVtYmVyOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiaiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNDb21wbGV4OyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAibyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNGcmFjdGlvbjsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzVW5pdDsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzU3RyaW5nOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNBcnJheTsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInYiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzTWF0cml4OyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiaSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNDb2xsZWN0aW9uOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAibiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNEZW5zZU1hdHJpeDsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzU3BhcnNlTWF0cml4OyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNSYW5nZTsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzSW5kZXg7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJnIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc0Jvb2xlYW47IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJHIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc1Jlc3VsdFNldDsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzSGVscDsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInAiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzRnVuY3Rpb247IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc0RhdGU7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJGIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc1JlZ0V4cDsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInoiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzT2JqZWN0OyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAieCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNOdWxsOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiSyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNVbmRlZmluZWQ7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc0FjY2Vzc29yTm9kZTsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzQXJyYXlOb2RlOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNBc3NpZ25tZW50Tm9kZTsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImYiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzQmxvY2tOb2RlOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNDb25kaXRpb25hbE5vZGU7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc0NvbnN0YW50Tm9kZTsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzRnVuY3Rpb25Ob2RlOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAidSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNJbmRleE5vZGU7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJ3IiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc05vZGU7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJBIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc09iamVjdE5vZGU7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJCIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc09wZXJhdG9yTm9kZTsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzUGFyZW50aGVzaXNOb2RlOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiRSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNSYW5nZU5vZGU7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJKIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc1N5bWJvbE5vZGU7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJoIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc0NoYWluOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiTSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdHlwZU9mOyB9KTsKZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gInN5bWJvbCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/ICJzeW1ib2wiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9CgovLyB0eXBlIGNoZWNrcyBmb3IgYWxsIGtub3duIHR5cGVzCi8vCi8vIG5vdGUgdGhhdDoKLy8KLy8gLSBjaGVjayBieSBkdWNrLXR5cGluZyBvbiBhIHByb3BlcnR5IGxpa2UgYGlzVW5pdGAsIGluc3RlYWQgb2YgY2hlY2tpbmcgaW5zdGFuY2VvZi4KLy8gICBpbnN0YW5jZW9mIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgdGhhdCB3b3VsZCBub3QgYWxsb3cgdG8gcGFzcyBkYXRhIGZyb20KLy8gICBvbmUgaW5zdGFuY2Ugb2YgbWF0aC5qcyB0byBhbm90aGVyIHNpbmNlIGVhY2ggaGFzIGl0J3Mgb3duIGluc3RhbmNlIG9mIFVuaXQuCi8vIC0gY2hlY2sgdGhlIGBpc1VuaXRgIHByb3BlcnR5IHZpYSB0aGUgY29uc3RydWN0b3IsIHNvIHRoZXJlIHdpbGwgYmUgbm8KLy8gICBtYXRjaGVzIGZvciAiZmFrZSIgaW5zdGFuY2VzIGxpa2UgcGxhaW4gb2JqZWN0cyB3aXRoIGEgcHJvcGVydHkgYGlzVW5pdGAuCi8vICAgVGhhdCBpcyBpbXBvcnRhbnQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuCi8vIC0gSXQgbXVzdCBub3QgYmUgcG9zc2libGUgdG8gb3ZlcnJpZGUgdGhlIHR5cGUgY2hlY2tzIHVzZWQgaW50ZXJuYWxseSwKLy8gICBmb3Igc2VjdXJpdHkgcmVhc29ucywgc28gdGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgZXhwb3NlZCBpbiB0aGUgZXhwcmVzc2lvbgovLyAgIHBhcnNlci4KZnVuY3Rpb24gaXNOdW1iZXIoeCkgewogIHJldHVybiB0eXBlb2YgeCA9PT0gJ251bWJlcic7Cn0KZnVuY3Rpb24gaXNCaWdOdW1iZXIoeCkgewogIHJldHVybiB4ICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzQmlnTnVtYmVyID09PSB0cnVlIHx8IGZhbHNlOwp9CmZ1bmN0aW9uIGlzQ29tcGxleCh4KSB7CiAgcmV0dXJuIHggJiYgX3R5cGVvZih4KSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHgpLmlzQ29tcGxleCA9PT0gdHJ1ZSB8fCBmYWxzZTsKfQpmdW5jdGlvbiBpc0ZyYWN0aW9uKHgpIHsKICByZXR1cm4geCAmJiBfdHlwZW9mKHgpID09PSAnb2JqZWN0JyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoeCkuaXNGcmFjdGlvbiA9PT0gdHJ1ZSB8fCBmYWxzZTsKfQpmdW5jdGlvbiBpc1VuaXQoeCkgewogIHJldHVybiB4ICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzVW5pdCA9PT0gdHJ1ZSB8fCBmYWxzZTsKfQpmdW5jdGlvbiBpc1N0cmluZyh4KSB7CiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnc3RyaW5nJzsKfQp2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7CmZ1bmN0aW9uIGlzTWF0cml4KHgpIHsKICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc01hdHJpeCA9PT0gdHJ1ZSB8fCBmYWxzZTsKfQovKioKICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYSBjb2xsZWN0aW9uOiBhbiBBcnJheSBvciBNYXRyaXgKICogQHBhcmFtIHsqfSB4CiAqIEByZXR1cm5zIHtib29sZWFufSBpc0NvbGxlY3Rpb24KICovCgpmdW5jdGlvbiBpc0NvbGxlY3Rpb24oeCkgewogIHJldHVybiBBcnJheS5pc0FycmF5KHgpIHx8IGlzTWF0cml4KHgpOwp9CmZ1bmN0aW9uIGlzRGVuc2VNYXRyaXgoeCkgewogIHJldHVybiB4ICYmIHguaXNEZW5zZU1hdHJpeCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc01hdHJpeCA9PT0gdHJ1ZSB8fCBmYWxzZTsKfQpmdW5jdGlvbiBpc1NwYXJzZU1hdHJpeCh4KSB7CiAgcmV0dXJuIHggJiYgeC5pc1NwYXJzZU1hdHJpeCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc01hdHJpeCA9PT0gdHJ1ZSB8fCBmYWxzZTsKfQpmdW5jdGlvbiBpc1JhbmdlKHgpIHsKICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc1JhbmdlID09PSB0cnVlIHx8IGZhbHNlOwp9CmZ1bmN0aW9uIGlzSW5kZXgoeCkgewogIHJldHVybiB4ICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzSW5kZXggPT09IHRydWUgfHwgZmFsc2U7Cn0KZnVuY3Rpb24gaXNCb29sZWFuKHgpIHsKICByZXR1cm4gdHlwZW9mIHggPT09ICdib29sZWFuJzsKfQpmdW5jdGlvbiBpc1Jlc3VsdFNldCh4KSB7CiAgcmV0dXJuIHggJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNSZXN1bHRTZXQgPT09IHRydWUgfHwgZmFsc2U7Cn0KZnVuY3Rpb24gaXNIZWxwKHgpIHsKICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc0hlbHAgPT09IHRydWUgfHwgZmFsc2U7Cn0KZnVuY3Rpb24gaXNGdW5jdGlvbih4KSB7CiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nOwp9CmZ1bmN0aW9uIGlzRGF0ZSh4KSB7CiAgcmV0dXJuIHggaW5zdGFuY2VvZiBEYXRlOwp9CmZ1bmN0aW9uIGlzUmVnRXhwKHgpIHsKICByZXR1cm4geCBpbnN0YW5jZW9mIFJlZ0V4cDsKfQpmdW5jdGlvbiBpc09iamVjdCh4KSB7CiAgcmV0dXJuICEhKHggJiYgX3R5cGVvZih4KSA9PT0gJ29iamVjdCcgJiYgeC5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0ICYmICFpc0NvbXBsZXgoeCkgJiYgIWlzRnJhY3Rpb24oeCkpOwp9CmZ1bmN0aW9uIGlzTnVsbCh4KSB7CiAgcmV0dXJuIHggPT09IG51bGw7Cn0KZnVuY3Rpb24gaXNVbmRlZmluZWQoeCkgewogIHJldHVybiB4ID09PSB1bmRlZmluZWQ7Cn0KZnVuY3Rpb24gaXNBY2Nlc3Nvck5vZGUoeCkgewogIHJldHVybiB4ICYmIHguaXNBY2Nlc3Nvck5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlOwp9CmZ1bmN0aW9uIGlzQXJyYXlOb2RlKHgpIHsKICByZXR1cm4geCAmJiB4LmlzQXJyYXlOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTsKfQpmdW5jdGlvbiBpc0Fzc2lnbm1lbnROb2RlKHgpIHsKICByZXR1cm4geCAmJiB4LmlzQXNzaWdubWVudE5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlOwp9CmZ1bmN0aW9uIGlzQmxvY2tOb2RlKHgpIHsKICByZXR1cm4geCAmJiB4LmlzQmxvY2tOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTsKfQpmdW5jdGlvbiBpc0NvbmRpdGlvbmFsTm9kZSh4KSB7CiAgcmV0dXJuIHggJiYgeC5pc0NvbmRpdGlvbmFsTm9kZSA9PT0gdHJ1ZSAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGUgPT09IHRydWUgfHwgZmFsc2U7Cn0KZnVuY3Rpb24gaXNDb25zdGFudE5vZGUoeCkgewogIHJldHVybiB4ICYmIHguaXNDb25zdGFudE5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlOwp9CmZ1bmN0aW9uIGlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSh4KSB7CiAgcmV0dXJuIHggJiYgeC5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlOwp9CmZ1bmN0aW9uIGlzRnVuY3Rpb25Ob2RlKHgpIHsKICByZXR1cm4geCAmJiB4LmlzRnVuY3Rpb25Ob2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTsKfQpmdW5jdGlvbiBpc0luZGV4Tm9kZSh4KSB7CiAgcmV0dXJuIHggJiYgeC5pc0luZGV4Tm9kZSA9PT0gdHJ1ZSAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGUgPT09IHRydWUgfHwgZmFsc2U7Cn0KZnVuY3Rpb24gaXNOb2RlKHgpIHsKICByZXR1cm4geCAmJiB4LmlzTm9kZSA9PT0gdHJ1ZSAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGUgPT09IHRydWUgfHwgZmFsc2U7Cn0KZnVuY3Rpb24gaXNPYmplY3ROb2RlKHgpIHsKICByZXR1cm4geCAmJiB4LmlzT2JqZWN0Tm9kZSA9PT0gdHJ1ZSAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGUgPT09IHRydWUgfHwgZmFsc2U7Cn0KZnVuY3Rpb24gaXNPcGVyYXRvck5vZGUoeCkgewogIHJldHVybiB4ICYmIHguaXNPcGVyYXRvck5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlOwp9CmZ1bmN0aW9uIGlzUGFyZW50aGVzaXNOb2RlKHgpIHsKICByZXR1cm4geCAmJiB4LmlzUGFyZW50aGVzaXNOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTsKfQpmdW5jdGlvbiBpc1JhbmdlTm9kZSh4KSB7CiAgcmV0dXJuIHggJiYgeC5pc1JhbmdlTm9kZSA9PT0gdHJ1ZSAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGUgPT09IHRydWUgfHwgZmFsc2U7Cn0KZnVuY3Rpb24gaXNTeW1ib2xOb2RlKHgpIHsKICByZXR1cm4geCAmJiB4LmlzU3ltYm9sTm9kZSA9PT0gdHJ1ZSAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGUgPT09IHRydWUgfHwgZmFsc2U7Cn0KZnVuY3Rpb24gaXNDaGFpbih4KSB7CiAgcmV0dXJuIHggJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNDaGFpbiA9PT0gdHJ1ZSB8fCBmYWxzZTsKfQpmdW5jdGlvbiB0eXBlT2YoeCkgewogIHZhciB0ID0gX3R5cGVvZih4KTsKCiAgaWYgKHQgPT09ICdvYmplY3QnKSB7CiAgICAvLyBKYXZhU2NyaXB0IHR5cGVzCiAgICBpZiAoeCA9PT0gbnVsbCkgcmV0dXJuICdudWxsJzsKICAgIGlmIChBcnJheS5pc0FycmF5KHgpKSByZXR1cm4gJ0FycmF5JzsKICAgIGlmICh4IGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuICdEYXRlJzsKICAgIGlmICh4IGluc3RhbmNlb2YgUmVnRXhwKSByZXR1cm4gJ1JlZ0V4cCc7IC8vIG1hdGguanMgdHlwZXMKCiAgICBpZiAoaXNCaWdOdW1iZXIoeCkpIHJldHVybiAnQmlnTnVtYmVyJzsKICAgIGlmIChpc0NvbXBsZXgoeCkpIHJldHVybiAnQ29tcGxleCc7CiAgICBpZiAoaXNGcmFjdGlvbih4KSkgcmV0dXJuICdGcmFjdGlvbic7CiAgICBpZiAoaXNNYXRyaXgoeCkpIHJldHVybiAnTWF0cml4JzsKICAgIGlmIChpc1VuaXQoeCkpIHJldHVybiAnVW5pdCc7CiAgICBpZiAoaXNJbmRleCh4KSkgcmV0dXJuICdJbmRleCc7CiAgICBpZiAoaXNSYW5nZSh4KSkgcmV0dXJuICdSYW5nZSc7CiAgICBpZiAoaXNSZXN1bHRTZXQoeCkpIHJldHVybiAnUmVzdWx0U2V0JzsKICAgIGlmIChpc05vZGUoeCkpIHJldHVybiB4LnR5cGU7CiAgICBpZiAoaXNDaGFpbih4KSkgcmV0dXJuICdDaGFpbic7CiAgICBpZiAoaXNIZWxwKHgpKSByZXR1cm4gJ0hlbHAnOwogICAgcmV0dXJuICdPYmplY3QnOwogIH0KCiAgaWYgKHQgPT09ICdmdW5jdGlvbicpIHJldHVybiAnRnVuY3Rpb24nOwogIHJldHVybiB0OyAvLyBjYW4gYmUgJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbicsIC4uLgp9CgovKioqLyB9KSwKLyogMiAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoidXNlIHN0cmljdCI7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U2l6ZTsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHZhbGlkYXRlOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdmFsaWRhdGVJbmRleDsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIm8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlc2l6ZTsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIm4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlc2hhcGU7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJwIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzcXVlZXplOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdW5zcXVlZXplOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZmxhdHRlbjsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIm0iLCBmdW5jdGlvbigpIHsgcmV0dXJuIG1hcDsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImYiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZvckVhY2g7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjIiwgZnVuY3Rpb24oKSB7IHJldHVybiBmaWx0ZXI7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJkIiwgZnVuY3Rpb24oKSB7IHJldHVybiBmaWx0ZXJSZWdFeHA7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBqb2luOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiaSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaWRlbnRpZnk7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJnIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZW5lcmFsaXplOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiaCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0QXJyYXlEYXRhVHlwZTsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGxhc3Q7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJqIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbml0aWFsOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY29udGFpbnM7IH0pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX251bWJlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9pc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zdHJpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXJyb3JfRGltZW5zaW9uRXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7Ci8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZXJyb3JfSW5kZXhFcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7CgoKCgoKLyoqCiAqIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5LgogKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgc2l6ZSBvZiB0aGUgZmlyc3QgZW50cnksIGl0IGRvZXMgbm90IHZhbGlkYXRlCiAqIHdoZXRoZXIgYWxsIGRpbWVuc2lvbnMgbWF0Y2guICh1c2UgZnVuY3Rpb24gYHZhbGlkYXRlYCBmb3IgdGhhdCkKICogQHBhcmFtIHtBcnJheX0geAogKiBAUmV0dXJuIHtOdW1iZXJbXX0gc2l6ZQogKi8KCmZ1bmN0aW9uIGFycmF5U2l6ZSh4KSB7CiAgdmFyIHMgPSBbXTsKCiAgd2hpbGUgKEFycmF5LmlzQXJyYXkoeCkpIHsKICAgIHMucHVzaCh4Lmxlbmd0aCk7CiAgICB4ID0geFswXTsKICB9CgogIHJldHVybiBzOwp9Ci8qKgogKiBSZWN1cnNpdmVseSB2YWxpZGF0ZSB3aGV0aGVyIGVhY2ggZWxlbWVudCBpbiBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5CiAqIGhhcyBhIHNpemUgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdmlkZWQgc2l6ZSBhcnJheS4KICogQHBhcmFtIHtBcnJheX0gYXJyYXkgICAgQXJyYXkgdG8gYmUgdmFsaWRhdGVkCiAqIEBwYXJhbSB7bnVtYmVyW119IHNpemUgIEFycmF5IHdpdGggdGhlIHNpemUgb2YgZWFjaCBkaW1lbnNpb24KICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgIEN1cnJlbnQgZGltZW5zaW9uCiAqIEB0aHJvd3MgRGltZW5zaW9uRXJyb3IKICogQHByaXZhdGUKICovCgpmdW5jdGlvbiBfdmFsaWRhdGUoYXJyYXksIHNpemUsIGRpbSkgewogIHZhciBpOwogIHZhciBsZW4gPSBhcnJheS5sZW5ndGg7CgogIGlmIChsZW4gIT09IHNpemVbZGltXSkgewogICAgdGhyb3cgbmV3IF9lcnJvcl9EaW1lbnNpb25FcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWy8qIERpbWVuc2lvbkVycm9yICovICJhIl0obGVuLCBzaXplW2RpbV0pOwogIH0KCiAgaWYgKGRpbSA8IHNpemUubGVuZ3RoIC0gMSkgewogICAgLy8gcmVjdXJzaXZlbHkgdmFsaWRhdGUgZWFjaCBjaGlsZCBhcnJheQogICAgdmFyIGRpbU5leHQgPSBkaW0gKyAxOwoKICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICB2YXIgY2hpbGQgPSBhcnJheVtpXTsKCiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZCkpIHsKICAgICAgICB0aHJvdyBuZXcgX2Vycm9yX0RpbWVuc2lvbkVycm9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bLyogRGltZW5zaW9uRXJyb3IgKi8gImEiXShzaXplLmxlbmd0aCAtIDEsIHNpemUubGVuZ3RoLCAnPCcpOwogICAgICB9CgogICAgICBfdmFsaWRhdGUoYXJyYXlbaV0sIHNpemUsIGRpbU5leHQpOwogICAgfQogIH0gZWxzZSB7CiAgICAvLyBsYXN0IGRpbWVuc2lvbi4gbm9uZSBvZiB0aGUgY2hpbGRzIG1heSBiZSBhbiBhcnJheQogICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFycmF5W2ldKSkgewogICAgICAgIHRocm93IG5ldyBfZXJyb3JfRGltZW5zaW9uRXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1svKiBEaW1lbnNpb25FcnJvciAqLyAiYSJdKHNpemUubGVuZ3RoICsgMSwgc2l6ZS5sZW5ndGgsICc+Jyk7CiAgICAgIH0KICAgIH0KICB9Cn0KLyoqCiAqIFZhbGlkYXRlIHdoZXRoZXIgZWFjaCBlbGVtZW50IGluIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXkgaGFzCiAqIGEgc2l6ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm92aWRlZCBzaXplIGFycmF5LgogKiBAcGFyYW0ge0FycmF5fSBhcnJheSAgICBBcnJheSB0byBiZSB2YWxpZGF0ZWQKICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZSAgQXJyYXkgd2l0aCB0aGUgc2l6ZSBvZiBlYWNoIGRpbWVuc2lvbgogKiBAdGhyb3dzIERpbWVuc2lvbkVycm9yCiAqLwoKCmZ1bmN0aW9uIHZhbGlkYXRlKGFycmF5LCBzaXplKSB7CiAgdmFyIGlzU2NhbGFyID0gc2l6ZS5sZW5ndGggPT09IDA7CgogIGlmIChpc1NjYWxhcikgewogICAgLy8gc2NhbGFyCiAgICBpZiAoQXJyYXkuaXNBcnJheShhcnJheSkpIHsKICAgICAgdGhyb3cgbmV3IF9lcnJvcl9EaW1lbnNpb25FcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWy8qIERpbWVuc2lvbkVycm9yICovICJhIl0oYXJyYXkubGVuZ3RoLCAwKTsKICAgIH0KICB9IGVsc2UgewogICAgLy8gYXJyYXkKICAgIF92YWxpZGF0ZShhcnJheSwgc2l6ZSwgMCk7CiAgfQp9Ci8qKgogKiBUZXN0IHdoZXRoZXIgaW5kZXggaXMgYW4gaW50ZWdlciBudW1iZXIgd2l0aCBpbmRleCA+PSAwIGFuZCBpbmRleCA8IGxlbmd0aAogKiB3aGVuIGxlbmd0aCBpcyBwcm92aWRlZAogKiBAcGFyYW0ge251bWJlcn0gaW5kZXggICAgWmVyby1iYXNlZCBpbmRleAogKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTGVuZ3RoIG9mIHRoZSBhcnJheQogKi8KCmZ1bmN0aW9uIHZhbGlkYXRlSW5kZXgoaW5kZXgsIGxlbmd0aCkgewogIGlmICghT2JqZWN0KF9pc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWy8qIGlzTnVtYmVyICovICJ5Il0pKGluZGV4KSB8fCAhT2JqZWN0KF9udW1iZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1svKiBpc0ludGVnZXIgKi8gImkiXSkoaW5kZXgpKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmRleCBtdXN0IGJlIGFuIGludGVnZXIgKHZhbHVlOiAnICsgaW5kZXggKyAnKScpOwogIH0KCiAgaWYgKGluZGV4IDwgMCB8fCB0eXBlb2YgbGVuZ3RoID09PSAnbnVtYmVyJyAmJiBpbmRleCA+PSBsZW5ndGgpIHsKICAgIHRocm93IG5ldyBfZXJyb3JfSW5kZXhFcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWy8qIEluZGV4RXJyb3IgKi8gImEiXShpbmRleCwgbGVuZ3RoKTsKICB9Cn0KLyoqCiAqIFJlc2l6ZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5LiBUaGUgcmVzaXplZCBhcnJheSBpcyByZXR1cm5lZC4KICogQHBhcmFtIHtBcnJheX0gYXJyYXkgICAgICAgICBBcnJheSB0byBiZSByZXNpemVkCiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHNpemUgQXJyYXkgd2l0aCB0aGUgc2l6ZSBvZiBlYWNoIGRpbWVuc2lvbgogKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWU9MF0gIFZhbHVlIHRvIGJlIGZpbGxlZCBpbiBpbiBuZXcgZW50cmllcywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvIGJ5IGRlZmF1bHQuIFNwZWNpZnkgZm9yIGV4YW1wbGUgYG51bGxgLAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGNsZWFybHkgc2VlIGVudHJpZXMgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHkKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQuCiAqIEByZXR1cm4ge0FycmF5fSBhcnJheSAgICAgICAgIFRoZSByZXNpemVkIGFycmF5CiAqLwoKZnVuY3Rpb24gcmVzaXplKGFycmF5LCBzaXplLCBkZWZhdWx0VmFsdWUpIHsKICAvLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3Igc2NhbGFycywgaGF2aW5nIHNpemU9W10gPwogIC8vIGNoZWNrIHRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudHMKICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXkpIHx8ICFBcnJheS5pc0FycmF5KHNpemUpKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCcpOwogIH0KCiAgaWYgKHNpemUubGVuZ3RoID09PSAwKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc2l6aW5nIHRvIHNjYWxhciBpcyBub3Qgc3VwcG9ydGVkJyk7CiAgfSAvLyBjaGVjayB3aGV0aGVyIHNpemUgY29udGFpbnMgcG9zaXRpdmUgaW50ZWdlcnMKCgogIHNpemUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHsKICAgIGlmICghT2JqZWN0KF9pc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWy8qIGlzTnVtYmVyICovICJ5Il0pKHZhbHVlKSB8fCAhT2JqZWN0KF9udW1iZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1svKiBpc0ludGVnZXIgKi8gImkiXSkodmFsdWUpIHx8IHZhbHVlIDwgMCkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHNpemUsIG11c3QgY29udGFpbiBwb3NpdGl2ZSBpbnRlZ2VycyAnICsgJyhzaXplOiAnICsgT2JqZWN0KF9zdHJpbmdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1svKiBmb3JtYXQgKi8gImQiXSkoc2l6ZSkgKyAnKScpOwogICAgfQogIH0pOyAvLyByZWN1cnNpdmVseSByZXNpemUgdGhlIGFycmF5CgogIHZhciBfZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiAwOwoKICBfcmVzaXplKGFycmF5LCBzaXplLCAwLCBfZGVmYXVsdFZhbHVlKTsKCiAgcmV0dXJuIGFycmF5Owp9Ci8qKgogKiBSZWN1cnNpdmVseSByZXNpemUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheQogKiBAcGFyYW0ge0FycmF5fSBhcnJheSAgICAgICAgIEFycmF5IHRvIGJlIHJlc2l6ZWQKICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZSAgICAgICBBcnJheSB3aXRoIHRoZSBzaXplIG9mIGVhY2ggZGltZW5zaW9uCiAqIEBwYXJhbSB7bnVtYmVyfSBkaW0gICAgICAgICAgQ3VycmVudCBkaW1lbnNpb24KICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSAgICBWYWx1ZSB0byBiZSBmaWxsZWQgaW4gaW4gbmV3IGVudHJpZXMsCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIGJ5IGRlZmF1bHQuCiAqIEBwcml2YXRlCiAqLwoKZnVuY3Rpb24gX3Jlc2l6ZShhcnJheSwgc2l6ZSwgZGltLCBkZWZhdWx0VmFsdWUpIHsKICB2YXIgaTsKICB2YXIgZWxlbTsKICB2YXIgb2xkTGVuID0gYXJyYXkubGVuZ3RoOwogIHZhciBuZXdMZW4gPSBzaXplW2RpbV07CiAgdmFyIG1pbkxlbiA9IE1hdGgubWluKG9sZExlbiwgbmV3TGVuKTsgLy8gYXBwbHkgbmV3IGxlbmd0aAoKICBhcnJheS5sZW5ndGggPSBuZXdMZW47CgogIGlmIChkaW0gPCBzaXplLmxlbmd0aCAtIDEpIHsKICAgIC8vIG5vbi1sYXN0IGRpbWVuc2lvbgogICAgdmFyIGRpbU5leHQgPSBkaW0gKyAxOyAvLyByZXNpemUgZXhpc3RpbmcgY2hpbGQgYXJyYXlzCgogICAgZm9yIChpID0gMDsgaSA8IG1pbkxlbjsgaSsrKSB7CiAgICAgIC8vIHJlc2l6ZSBjaGlsZCBhcnJheQogICAgICBlbGVtID0gYXJyYXlbaV07CgogICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZWxlbSkpIHsKICAgICAgICBlbGVtID0gW2VsZW1dOyAvLyBhZGQgYSBkaW1lbnNpb24KCiAgICAgICAgYXJyYXlbaV0gPSBlbGVtOwogICAgICB9CgogICAgICBfcmVzaXplKGVsZW0sIHNpemUsIGRpbU5leHQsIGRlZmF1bHRWYWx1ZSk7CiAgICB9IC8vIGNyZWF0ZSBuZXcgY2hpbGQgYXJyYXlzCgoKICAgIGZvciAoaSA9IG1pbkxlbjsgaSA8IG5ld0xlbjsgaSsrKSB7CiAgICAgIC8vIGdldCBjaGlsZCBhcnJheQogICAgICBlbGVtID0gW107CiAgICAgIGFycmF5W2ldID0gZWxlbTsgLy8gcmVzaXplIG5ldyBjaGlsZCBhcnJheQoKICAgICAgX3Jlc2l6ZShlbGVtLCBzaXplLCBkaW1OZXh0LCBkZWZhdWx0VmFsdWUpOwogICAgfQogIH0gZWxzZSB7CiAgICAvLyBsYXN0IGRpbWVuc2lvbgogICAgLy8gcmVtb3ZlIGRpbWVuc2lvbnMgb2YgZXhpc3RpbmcgdmFsdWVzCiAgICBmb3IgKGkgPSAwOyBpIDwgbWluTGVuOyBpKyspIHsKICAgICAgd2hpbGUgKEFycmF5LmlzQXJyYXkoYXJyYXlbaV0pKSB7CiAgICAgICAgYXJyYXlbaV0gPSBhcnJheVtpXVswXTsKICAgICAgfQogICAgfSAvLyBmaWxsIG5ldyBlbGVtZW50cyB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlCgoKICAgIGZvciAoaSA9IG1pbkxlbjsgaSA8IG5ld0xlbjsgaSsrKSB7CiAgICAgIGFycmF5W2ldID0gZGVmYXVsdFZhbHVlOwogICAgfQogIH0KfQovKioKICogUmUtc2hhcGUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheSB0byBmaXQgdGhlIHNwZWNpZmllZCBkaW1lbnNpb25zCiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5ICAgICAgICAgICBBcnJheSB0byBiZSByZXNoYXBlZAogKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBzaXplcyAgTGlzdCBvZiBzaXplcyBmb3IgZWFjaCBkaW1lbnNpb24KICogQHJldHVybnMge0FycmF5fSAgICAgICAgICAgICAgIEFycmF5IHdob3NlIGRhdGEgaGFzIGJlZW4gZm9ybWF0dGVkIHRvIGZpdCB0aGUKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBkaW1lbnNpb25zCiAqCiAqIEB0aHJvd3Mge0RpbWVuc2lvbkVycm9yfSAgICAgICBJZiB0aGUgcHJvZHVjdCBvZiB0aGUgbmV3IGRpbWVuc2lvbiBzaXplcyBkb2VzCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgZXF1YWwgdGhhdCBvZiB0aGUgb2xkIG9uZXMKICovCgoKZnVuY3Rpb24gcmVzaGFwZShhcnJheSwgc2l6ZXMpIHsKICB2YXIgZmxhdEFycmF5ID0gZmxhdHRlbihhcnJheSk7CiAgdmFyIG5ld0FycmF5OwoKICBmdW5jdGlvbiBwcm9kdWN0KGFycikgewogICAgcmV0dXJuIGFyci5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGN1cnIpIHsKICAgICAgcmV0dXJuIHByZXYgKiBjdXJyOwogICAgfSk7CiAgfQoKICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXkpIHx8ICFBcnJheS5pc0FycmF5KHNpemVzKSkgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQnKTsKICB9CgogIGlmIChzaXplcy5sZW5ndGggPT09IDApIHsKICAgIHRocm93IG5ldyBfZXJyb3JfRGltZW5zaW9uRXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1svKiBEaW1lbnNpb25FcnJvciAqLyAiYSJdKDAsIHByb2R1Y3QoYXJyYXlTaXplKGFycmF5KSksICchPScpOwogIH0KCiAgdmFyIHRvdGFsU2l6ZSA9IDE7CgogIGZvciAodmFyIHNpemVJbmRleCA9IDA7IHNpemVJbmRleCA8IHNpemVzLmxlbmd0aDsgc2l6ZUluZGV4KyspIHsKICAgIHRvdGFsU2l6ZSAqPSBzaXplc1tzaXplSW5kZXhdOwogIH0KCiAgaWYgKGZsYXRBcnJheS5sZW5ndGggIT09IHRvdGFsU2l6ZSkgewogICAgdGhyb3cgbmV3IF9lcnJvcl9EaW1lbnNpb25FcnJvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWy8qIERpbWVuc2lvbkVycm9yICovICJhIl0ocHJvZHVjdChzaXplcyksIHByb2R1Y3QoYXJyYXlTaXplKGFycmF5KSksICchPScpOwogIH0KCiAgdHJ5IHsKICAgIG5ld0FycmF5ID0gX3Jlc2hhcGUoZmxhdEFycmF5LCBzaXplcyk7CiAgfSBjYXRjaCAoZSkgewogICAgaWYgKGUgaW5zdGFuY2VvZiBfZXJyb3JfRGltZW5zaW9uRXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1svKiBEaW1lbnNpb25FcnJvciAqLyAiYSJdKSB7CiAgICAgIHRocm93IG5ldyBfZXJyb3JfRGltZW5zaW9uRXJyb3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1svKiBEaW1lbnNpb25FcnJvciAqLyAiYSJdKHByb2R1Y3Qoc2l6ZXMpLCBwcm9kdWN0KGFycmF5U2l6ZShhcnJheSkpLCAnIT0nKTsKICAgIH0KCiAgICB0aHJvdyBlOwogIH0KCiAgcmV0dXJuIG5ld0FycmF5Owp9Ci8qKgogKiBJdGVyYXRpdmVseSByZS1zaGFwZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5IHRvIGZpdCB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbnMKICogQHBhcmFtIHtBcnJheX0gYXJyYXkgICAgICAgICAgIEFycmF5IHRvIGJlIHJlc2hhcGVkCiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHNpemVzICBMaXN0IG9mIHNpemVzIGZvciBlYWNoIGRpbWVuc2lvbgogKiBAcmV0dXJucyB7QXJyYXl9ICAgICAgICAgICAgICAgQXJyYXkgd2hvc2UgZGF0YSBoYXMgYmVlbiBmb3JtYXR0ZWQgdG8gZml0IHRoZQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGRpbWVuc2lvbnMKICovCgpmdW5jdGlvbiBfcmVzaGFwZShhcnJheSwgc2l6ZXMpIHsKICAvLyB0ZXN0aW5nIGlmIHRoZXJlIGFyZSBlbm91Z2ggZWxlbWVudHMgZm9yIHRoZSByZXF1ZXN0ZWQgc2hhcGUKICB2YXIgdG1wQXJyYXkgPSBhcnJheTsKICB2YXIgdG1wQXJyYXkyOyAvLyBmb3IgZWFjaCBkaW1lbnNpb25zIHN0YXJ0aW5nIGJ5IHRoZSBsYXN0IG9uZSBhbmQgaWdub3JpbmcgdGhlIGZpcnN0IG9uZQoKICBmb3IgKHZhciBzaXplSW5kZXggPSBzaXplcy5sZW5ndGggLSAxOyBzaXplSW5kZXggPiAwOyBzaXplSW5kZXgtLSkgewogICAgdmFyIHNpemUgPSBzaXplc1tzaXplSW5kZXhdOwogICAgdG1wQXJyYXkyID0gW107IC8vIGFnZ3JlZ2F0ZSB0aGUgZWxlbWVudHMgb2YgdGhlIGN1cnJlbnQgdG1wQXJyYXkgaW4gZWxlbWVudHMgb2YgdGhlIHJlcXVlc3RlZCBzaXplCgogICAgdmFyIGxlbmd0aCA9IHRtcEFycmF5Lmxlbmd0aCAvIHNpemU7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB0bXBBcnJheTIucHVzaCh0bXBBcnJheS5zbGljZShpICogc2l6ZSwgKGkgKyAxKSAqIHNpemUpKTsKICAgIH0gLy8gc2V0IGl0IGFzIHRoZSBuZXcgdG1wQXJyYXkgZm9yIHRoZSBuZXh0IGxvb3AgdHVybiBvciBmb3IgcmV0dXJuCgoKICAgIHRtcEFycmF5ID0gdG1wQXJyYXkyOwogIH0KCiAgcmV0dXJuIHRtcEFycmF5Owp9Ci8qKgogKiBTcXVlZXplIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXkKICogQHBhcmFtIHtBcnJheX0gYXJyYXkKICogQHBhcmFtIHtBcnJheX0gW3NpemVdCiAqIEByZXR1cm5zIHtBcnJheX0gcmV0dXJucyB0aGUgYXJyYXkgaXRzZWxmCiAqLwoKCmZ1bmN0aW9uIHNxdWVlemUoYXJyYXksIHNpemUpIHsKICB2YXIgcyA9IHNpemUgfHwgYXJyYXlTaXplKGFycmF5KTsgLy8gc3F1ZWV6ZSBvdXRlciBkaW1lbnNpb25zCgogIHdoaWxlIChBcnJheS5pc0FycmF5KGFycmF5KSAmJiBhcnJheS5sZW5ndGggPT09IDEpIHsKICAgIGFycmF5ID0gYXJyYXlbMF07CiAgICBzLnNoaWZ0KCk7CiAgfSAvLyBmaW5kIHRoZSBmaXJzdCBkaW1lbnNpb24gdG8gYmUgc3F1ZWV6ZWQKCgogIHZhciBkaW1zID0gcy5sZW5ndGg7CgogIHdoaWxlIChzW2RpbXMgLSAxXSA9PT0gMSkgewogICAgZGltcy0tOwogIH0gLy8gc3F1ZWV6ZSBpbm5lciBkaW1lbnNpb25zCgoKICBpZiAoZGltcyA8IHMubGVuZ3RoKSB7CiAgICBhcnJheSA9IF9zcXVlZXplKGFycmF5LCBkaW1zLCAwKTsKICAgIHMubGVuZ3RoID0gZGltczsKICB9CgogIHJldHVybiBhcnJheTsKfQovKioKICogUmVjdXJzaXZlbHkgc3F1ZWV6ZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5CiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5CiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1zIFJlcXVpcmVkIG51bWJlciBvZiBkaW1lbnNpb25zCiAqIEBwYXJhbSB7bnVtYmVyfSBkaW0gIEN1cnJlbnQgZGltZW5zaW9uCiAqIEByZXR1cm5zIHtBcnJheSB8ICp9IFJldHVybnMgdGhlIHNxdWVlemVkIGFycmF5CiAqIEBwcml2YXRlCiAqLwoKZnVuY3Rpb24gX3NxdWVlemUoYXJyYXksIGRpbXMsIGRpbSkgewogIHZhciBpLCBpaTsKCiAgaWYgKGRpbSA8IGRpbXMpIHsKICAgIHZhciBuZXh0ID0gZGltICsgMTsKCiAgICBmb3IgKGkgPSAwLCBpaSA9IGFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgYXJyYXlbaV0gPSBfc3F1ZWV6ZShhcnJheVtpXSwgZGltcywgbmV4dCk7CiAgICB9CiAgfSBlbHNlIHsKICAgIHdoaWxlIChBcnJheS5pc0FycmF5KGFycmF5KSkgewogICAgICBhcnJheSA9IGFycmF5WzBdOwogICAgfQogIH0KCiAgcmV0dXJuIGFycmF5Owp9Ci8qKgogKiBVbnNxdWVlemUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheTogYWRkIGRpbWVuc2lvbnMgd2hlbiBtaXNzaW5nCiAqCiAqIFBhcmFtdGVyIGBzaXplYCB3aWxsIGJlIG11dGF0ZWQgdG8gbWF0Y2ggdGhlIG5ldywgdW5xdWVlemVkIG1hdHJpeCBzaXplLgogKgogKiBAcGFyYW0ge0FycmF5fSBhcnJheQogKiBAcGFyYW0ge251bWJlcn0gZGltcyAgICAgICBEZXNpcmVkIG51bWJlciBvZiBkaW1lbnNpb25zIG9mIHRoZSBhcnJheQogKiBAcGFyYW0ge251bWJlcn0gW291dGVyXSAgICBOdW1iZXIgb2Ygb3V0ZXIgZGltZW5zaW9ucyB0byBiZSBhZGRlZAogKiBAcGFyYW0ge0FycmF5fSBbc2l6ZV0gQ3VycmVudCBzaXplIG9mIGFycmF5LgogKiBAcmV0dXJucyB7QXJyYXl9IHJldHVybnMgdGhlIGFycmF5IGl0c2VsZgogKiBAcHJpdmF0ZQogKi8KCgpmdW5jdGlvbiB1bnNxdWVlemUoYXJyYXksIGRpbXMsIG91dGVyLCBzaXplKSB7CiAgdmFyIHMgPSBzaXplIHx8IGFycmF5U2l6ZShhcnJheSk7IC8vIHVuc3F1ZWV6ZSBvdXRlciBkaW1lbnNpb25zCgogIGlmIChvdXRlcikgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvdXRlcjsgaSsrKSB7CiAgICAgIGFycmF5ID0gW2FycmF5XTsKICAgICAgcy51bnNoaWZ0KDEpOwogICAgfQogIH0gLy8gdW5zcXVlZXplIGlubmVyIGRpbWVuc2lvbnMKCgogIGFycmF5ID0gX3Vuc3F1ZWV6ZShhcnJheSwgZGltcywgMCk7CgogIHdoaWxlIChzLmxlbmd0aCA8IGRpbXMpIHsKICAgIHMucHVzaCgxKTsKICB9CgogIHJldHVybiBhcnJheTsKfQovKioKICogUmVjdXJzaXZlbHkgdW5zcXVlZXplIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXkKICogQHBhcmFtIHtBcnJheX0gYXJyYXkKICogQHBhcmFtIHtudW1iZXJ9IGRpbXMgUmVxdWlyZWQgbnVtYmVyIG9mIGRpbWVuc2lvbnMKICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgQ3VycmVudCBkaW1lbnNpb24KICogQHJldHVybnMge0FycmF5IHwgKn0gUmV0dXJucyB0aGUgc3F1ZWV6ZWQgYXJyYXkKICogQHByaXZhdGUKICovCgpmdW5jdGlvbiBfdW5zcXVlZXplKGFycmF5LCBkaW1zLCBkaW0pIHsKICB2YXIgaSwgaWk7CgogIGlmIChBcnJheS5pc0FycmF5KGFycmF5KSkgewogICAgdmFyIG5leHQgPSBkaW0gKyAxOwoKICAgIGZvciAoaSA9IDAsIGlpID0gYXJyYXkubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICBhcnJheVtpXSA9IF91bnNxdWVlemUoYXJyYXlbaV0sIGRpbXMsIG5leHQpOwogICAgfQogIH0gZWxzZSB7CiAgICBmb3IgKHZhciBkID0gZGltOyBkIDwgZGltczsgZCsrKSB7CiAgICAgIGFycmF5ID0gW2FycmF5XTsKICAgIH0KICB9CgogIHJldHVybiBhcnJheTsKfQovKioKICogRmxhdHRlbiBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5LCBwdXQgYWxsIGVsZW1lbnRzIGluIGEgb25lIGRpbWVuc2lvbmFsCiAqIGFycmF5CiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5ICAgQSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheQogKiBAcmV0dXJuIHtBcnJheX0gICAgICAgIFRoZSBmbGF0dGVuZWQgYXJyYXkgKDEgZGltZW5zaW9uYWwpCiAqLwoKCmZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHsKICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXkpKSB7CiAgICAvLyBpZiBub3QgYW4gYXJyYXksIHJldHVybiBhcyBpcwogICAgcmV0dXJuIGFycmF5OwogIH0KCiAgdmFyIGZsYXQgPSBbXTsKICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uIGNhbGxiYWNrKHZhbHVlKSB7CiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgdmFsdWUuZm9yRWFjaChjYWxsYmFjayk7IC8vIHRyYXZlcnNlIHRocm91Z2ggc3ViLWFycmF5cyByZWN1cnNpdmVseQogICAgfSBlbHNlIHsKICAgICAgZmxhdC5wdXNoKHZhbHVlKTsKICAgIH0KICB9KTsKICByZXR1cm4gZmxhdDsKfQovKioKICogQSBzYWZlIG1hcAogKiBAcGFyYW0ge0FycmF5fSBhcnJheQogKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjawogKi8KCmZ1bmN0aW9uIG1hcChhcnJheSwgY2FsbGJhY2spIHsKICByZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGFycmF5LCBjYWxsYmFjayk7Cn0KLyoqCiAqIEEgc2FmZSBmb3JFYWNoCiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5CiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrCiAqLwoKZnVuY3Rpb24gZm9yRWFjaChhcnJheSwgY2FsbGJhY2spIHsKICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGFycmF5LCBjYWxsYmFjayk7Cn0KLyoqCiAqIEEgc2FmZSBmaWx0ZXIKICogQHBhcmFtIHtBcnJheX0gYXJyYXkKICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sKICovCgpmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrKSB7CiAgaWYgKGFycmF5U2l6ZShhcnJheSkubGVuZ3RoICE9PSAxKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgb25lIGRpbWVuc2lvbmFsIG1hdHJpY2VzIHN1cHBvcnRlZCcpOwogIH0KCiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChhcnJheSwgY2FsbGJhY2spOwp9Ci8qKgogKiBGaWx0ZXIgdmFsdWVzIGluIGEgY2FsbGJhY2sgZ2l2ZW4gYSByZWd1bGFyIGV4cHJlc3Npb24KICogQHBhcmFtIHtBcnJheX0gYXJyYXkKICogQHBhcmFtIHtSZWdFeHB9IHJlZ2V4cAogKiBAcmV0dXJuIHtBcnJheX0gUmV0dXJucyB0aGUgZmlsdGVyZWQgYXJyYXkKICogQHByaXZhdGUKICovCgpmdW5jdGlvbiBmaWx0ZXJSZWdFeHAoYXJyYXksIHJlZ2V4cCkgewogIGlmIChhcnJheVNpemUoYXJyYXkpLmxlbmd0aCAhPT0gMSkgewogICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IG9uZSBkaW1lbnNpb25hbCBtYXRyaWNlcyBzdXBwb3J0ZWQnKTsKICB9CgogIHJldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoYXJyYXksIGZ1bmN0aW9uIChlbnRyeSkgewogICAgcmV0dXJuIHJlZ2V4cC50ZXN0KGVudHJ5KTsKICB9KTsKfQovKioKICogQSBzYWZlIGpvaW4KICogQHBhcmFtIHtBcnJheX0gYXJyYXkKICogQHBhcmFtIHtzdHJpbmd9IHNlcGFyYXRvcgogKi8KCmZ1bmN0aW9uIGpvaW4oYXJyYXksIHNlcGFyYXRvcikgewogIHJldHVybiBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFycmF5LCBzZXBhcmF0b3IpOwp9Ci8qKgogKiBBc3NpZ24gYSBudW1lcmljIGlkZW50aWZpZXIgdG8gZXZlcnkgZWxlbWVudCBvZiBhIHNvcnRlZCBhcnJheQogKiBAcGFyYW0ge0FycmF5fSBhICBBbiBhcnJheQogKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIHRoZSBvcmlnaW5hbCB2YWx1ZSBhbmQgaXRzIGlkZW50aWZpZXIKICovCgpmdW5jdGlvbiBpZGVudGlmeShhKSB7CiAgaWYgKCFBcnJheS5pc0FycmF5KGEpKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBpbnB1dCBleHBlY3RlZCcpOwogIH0KCiAgaWYgKGEubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm4gYTsKICB9CgogIHZhciBiID0gW107CiAgdmFyIGNvdW50ID0gMDsKICBiWzBdID0gewogICAgdmFsdWU6IGFbMF0sCiAgICBpZGVudGlmaWVyOiAwCiAgfTsKCiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhLmxlbmd0aDsgaSsrKSB7CiAgICBpZiAoYVtpXSA9PT0gYVtpIC0gMV0pIHsKICAgICAgY291bnQrKzsKICAgIH0gZWxzZSB7CiAgICAgIGNvdW50ID0gMDsKICAgIH0KCiAgICBiLnB1c2goewogICAgICB2YWx1ZTogYVtpXSwKICAgICAgaWRlbnRpZmllcjogY291bnQKICAgIH0pOwogIH0KCiAgcmV0dXJuIGI7Cn0KLyoqCiAqIFJlbW92ZSB0aGUgbnVtZXJpYyBpZGVudGlmaWVyIGZyb20gdGhlIGVsZW1lbnRzCiAqIEBwYXJhbSB7YXJyYXl9IGEgIEFuIGFycmF5CiAqIEByZXR1cm4ge2FycmF5fSBBbiBhcnJheSBvZiB2YWx1ZXMgd2l0aG91dCBpZGVudGlmaWVycwogKi8KCmZ1bmN0aW9uIGdlbmVyYWxpemUoYSkgewogIGlmICghQXJyYXkuaXNBcnJheShhKSkgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgaW5wdXQgZXhwZWN0ZWQnKTsKICB9CgogIGlmIChhLmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIGE7CiAgfQoKICB2YXIgYiA9IFtdOwoKICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKICAgIGIucHVzaChhW2ldLnZhbHVlKTsKICB9CgogIHJldHVybiBiOwp9Ci8qKgogKiBDaGVjayB0aGUgZGF0YXR5cGUgb2YgYSBnaXZlbiBvYmplY3QKICogVGhpcyBpcyBhIGxvdyBsZXZlbCBpbXBsZW1lbnRhdGlvbiB0aGF0IHNob3VsZCBvbmx5IGJlIHVzZWQgYnkKICogcGFyZW50IE1hdHJpeCBjbGFzc2VzIHN1Y2ggYXMgU3BhcnNlTWF0cml4IG9yIERlbnNlTWF0cml4CiAqIFRoaXMgbWV0aG9kIGRvZXMgbm90IHZhbGlkYXRlIEFycmF5IE1hdHJpeCBzaGFwZQogKiBAcGFyYW0ge0FycmF5fSBhcnJheQogKiBAcGFyYW0ge2Z1bmN0aW9ufSB0eXBlT2YgICBDYWxsYmFjayBmdW5jdGlvbiB0byB1c2UgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGEgdmFsdWUKICogQHJldHVybiBzdHJpbmcKICovCgpmdW5jdGlvbiBnZXRBcnJheURhdGFUeXBlKGFycmF5LCB0eXBlT2YpIHsKICB2YXIgdHlwZTsgLy8gdG8gaG9sZCB0eXBlIGluZm8KCiAgdmFyIGxlbmd0aCA9IDA7IC8vIHRvIGhvbGQgbGVuZ3RoIHZhbHVlIHRvIGVuc3VyZSBpdCBoYXMgY29uc2lzdGVudCBzaXplcwoKICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgaXRlbSA9IGFycmF5W2ldOwogICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGl0ZW0pOyAvLyBTYXZpbmcgdGhlIHRhcmdldCBtYXRyaXggcm93IHNpemUKCiAgICBpZiAoaSA9PT0gMCAmJiBpc0FycmF5KSB7CiAgICAgIGxlbmd0aCA9IGl0ZW0ubGVuZ3RoOwogICAgfSAvLyBJZiB0aGUgY3VycmVudCBpdGVtIGlzIGFuIGFycmF5IGJ1dCB0aGUgbGVuZ3RoIGRvZXMgbm90IGVxdWFsIHRoZSB0YXJnZXRWZWN0b3JTaXplCgoKICAgIGlmIChpc0FycmF5ICYmIGl0ZW0ubGVuZ3RoICE9PSBsZW5ndGgpIHsKICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgIH0KCiAgICB2YXIgaXRlbVR5cGUgPSBpc0FycmF5ID8gZ2V0QXJyYXlEYXRhVHlwZShpdGVtLCB0eXBlT2YpIC8vIHJlY3Vyc2UgaW50byBhIG5lc3RlZCBhcnJheQogICAgOiB0eXBlT2YoaXRlbSk7CgogICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkgewogICAgICB0eXBlID0gaXRlbVR5cGU7IC8vIGZpcnN0IGl0ZW0KICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gaXRlbVR5cGUpIHsKICAgICAgcmV0dXJuICdtaXhlZCc7CiAgICB9IGVsc2Ugey8vIHdlJ3JlIGdvb2QsIGV2ZXJ5dGhpbmcgaGFzIHRoZSBzYW1lIHR5cGUgc28gZmFyCiAgICB9CiAgfQoKICByZXR1cm4gdHlwZTsKfQovKioKICogUmV0dXJuIHRoZSBsYXN0IGl0ZW0gZnJvbSBhbiBhcnJheQogKiBAcGFyYW0gYXJyYXkKICogQHJldHVybnMgeyp9CiAqLwoKZnVuY3Rpb24gbGFzdChhcnJheSkgewogIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsKfQovKioKICogR2V0IGFsbCBidXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhcnJheS4KICovCgpmdW5jdGlvbiBpbml0aWFsKGFycmF5KSB7CiAgcmV0dXJuIGFycmF5LnNsaWNlKDAsIGFycmF5Lmxlbmd0aCAtIDEpOwp9Ci8qKgogKiBUZXN0IHdoZXRoZXIgYW4gYXJyYXkgb3Igc3RyaW5nIGNvbnRhaW5zIGFuIGl0ZW0KICogQHBhcmFtIHtBcnJheSB8IHN0cmluZ30gYXJyYXkKICogQHBhcmFtIHsqfSBpdGVtCiAqIEByZXR1cm4ge2Jvb2xlYW59CiAqLwoKZnVuY3Rpb24gY29udGFpbnMoYXJyYXksIGl0ZW0pIHsKICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtKSAhPT0gLTE7Cn0KCi8qKiovIH0pLAovKiAzICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY2xvbmU7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJpIiwgZnVuY3Rpb24oKSB7IHJldHVybiBtYXBPYmplY3Q7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBleHRlbmQ7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJiIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZWVwRXh0ZW5kOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGVlcFN0cmljdEVxdWFsOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGVlcEZsYXR0ZW47IH0pOwovKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgY2FuRGVmaW5lUHJvcGVydHkgKi8KLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiaCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbGF6eTsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImsiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRyYXZlcnNlOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaGFzT3duUHJvcGVydHk7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJnIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc0xlZ2FjeUZhY3Rvcnk7IH0pOwovKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZ2V0ICovCi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBzZXQgKi8KLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHBpY2sgKi8KLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiaiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcGlja1NoYWxsb3c7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJsIiwgZnVuY3Rpb24oKSB7IHJldHVybiB2YWx1ZXM7IH0pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2lzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpOwpmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyAiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAic3ltYm9sIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gInN5bWJvbCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH0KCgovKioKICogQ2xvbmUgYW4gb2JqZWN0CiAqCiAqICAgICBjbG9uZSh4KQogKgogKiBDYW4gY2xvbmUgYW55IHByaW1pdGl2ZSB0eXBlLCBhcnJheSwgYW5kIG9iamVjdC4KICogSWYgeCBoYXMgYSBmdW5jdGlvbiBjbG9uZSwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgdG8gY2xvbmUgdGhlIG9iamVjdC4KICoKICogQHBhcmFtIHsqfSB4CiAqIEByZXR1cm4geyp9IGNsb25lCiAqLwoKZnVuY3Rpb24gY2xvbmUoeCkgewogIHZhciB0eXBlID0gX3R5cGVvZih4KTsgLy8gaW1tdXRhYmxlIHByaW1pdGl2ZSB0eXBlcwoKCiAgaWYgKHR5cGUgPT09ICdudW1iZXInIHx8IHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGUgPT09ICdib29sZWFuJyB8fCB4ID09PSBudWxsIHx8IHggPT09IHVuZGVmaW5lZCkgewogICAgcmV0dXJuIHg7CiAgfSAvLyB1c2UgY2xvbmUgZnVuY3Rpb24gb2YgdGhlIG9iamVjdCB3aGVuIGF2YWlsYWJsZQoKCiAgaWYgKHR5cGVvZiB4LmNsb25lID09PSAnZnVuY3Rpb24nKSB7CiAgICByZXR1cm4geC5jbG9uZSgpOwogIH0gLy8gYXJyYXkKCgogIGlmIChBcnJheS5pc0FycmF5KHgpKSB7CiAgICByZXR1cm4geC5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgIHJldHVybiBjbG9uZSh2YWx1ZSk7CiAgICB9KTsKICB9CgogIGlmICh4IGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIG5ldyBEYXRlKHgudmFsdWVPZigpKTsKICBpZiAoT2JqZWN0KF9pc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWy8qIGlzQmlnTnVtYmVyICovICJlIl0pKHgpKSByZXR1cm4geDsgLy8gYmlnbnVtYmVycyBhcmUgaW1tdXRhYmxlCgogIGlmICh4IGluc3RhbmNlb2YgUmVnRXhwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2xvbmUgJyArIHgpOyAvLyBUT0RPOiBjbG9uZSBhIFJlZ0V4cAogIC8vIG9iamVjdAoKICByZXR1cm4gbWFwT2JqZWN0KHgsIGNsb25lKTsKfQovKioKICogQXBwbHkgbWFwIHRvIGFsbCBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdAogKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrCiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRoIG1hcHBlZCBwcm9wZXJ0aWVzCiAqLwoKZnVuY3Rpb24gbWFwT2JqZWN0KG9iamVjdCwgY2FsbGJhY2spIHsKICB2YXIgY2xvbmUgPSB7fTsKCiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkgewogICAgaWYgKGhhc093blByb3BlcnR5KG9iamVjdCwga2V5KSkgewogICAgICBjbG9uZVtrZXldID0gY2FsbGJhY2sob2JqZWN0W2tleV0pOwogICAgfQogIH0KCiAgcmV0dXJuIGNsb25lOwp9Ci8qKgogKiBFeHRlbmQgb2JqZWN0IGEgd2l0aCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYgogKiBAcGFyYW0ge09iamVjdH0gYQogKiBAcGFyYW0ge09iamVjdH0gYgogKiBAcmV0dXJuIHtPYmplY3R9IGEKICovCgpmdW5jdGlvbiBleHRlbmQoYSwgYikgewogIGZvciAodmFyIHByb3AgaW4gYikgewogICAgaWYgKGhhc093blByb3BlcnR5KGIsIHByb3ApKSB7CiAgICAgIGFbcHJvcF0gPSBiW3Byb3BdOwogICAgfQogIH0KCiAgcmV0dXJuIGE7Cn0KLyoqCiAqIERlZXAgZXh0ZW5kIGFuIG9iamVjdCBhIHdpdGggdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIKICogQHBhcmFtIHtPYmplY3R9IGEKICogQHBhcmFtIHtPYmplY3R9IGIKICogQHJldHVybnMge09iamVjdH0KICovCgpmdW5jdGlvbiBkZWVwRXh0ZW5kKGEsIGIpIHsKICAvLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgQXJyYXlzIHRvIGRlZXBFeHRlbmQKICBpZiAoQXJyYXkuaXNBcnJheShiKSkgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmQnKTsKICB9CgogIGZvciAodmFyIHByb3AgaW4gYikgewogICAgaWYgKGhhc093blByb3BlcnR5KGIsIHByb3ApKSB7CiAgICAgIGlmIChiW3Byb3BdICYmIGJbcHJvcF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkgewogICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgIGFbcHJvcF0gPSB7fTsKICAgICAgICB9CgogICAgICAgIGlmIChhW3Byb3BdICYmIGFbcHJvcF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkgewogICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYVtwcm9wXSA9IGJbcHJvcF07CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZCcpOwogICAgICB9IGVsc2UgewogICAgICAgIGFbcHJvcF0gPSBiW3Byb3BdOwogICAgICB9CiAgICB9CiAgfQoKICByZXR1cm4gYTsKfQovKioKICogRGVlcCB0ZXN0IGVxdWFsaXR5IG9mIGFsbCBmaWVsZHMgaW4gdHdvIHBhaXJzIG9mIGFycmF5cyBvciBvYmplY3RzLgogKiBDb21wYXJlcyB2YWx1ZXMgYW5kIGZ1bmN0aW9ucyBzdHJpY3RseSAoaWUuIDIgaXMgbm90IHRoZSBzYW1lIGFzICcyJykuCiAqIEBwYXJhbSB7QXJyYXkgfCBPYmplY3R9IGEKICogQHBhcmFtIHtBcnJheSB8IE9iamVjdH0gYgogKiBAcmV0dXJucyB7Ym9vbGVhbn0KICovCgpmdW5jdGlvbiBkZWVwU3RyaWN0RXF1YWwoYSwgYikgewogIHZhciBwcm9wLCBpLCBsZW47CgogIGlmIChBcnJheS5pc0FycmF5KGEpKSB7CiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYikpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGZvciAoaSA9IDAsIGxlbiA9IGEubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgaWYgKCFkZWVwU3RyaWN0RXF1YWwoYVtpXSwgYltpXSkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gdHJ1ZTsKICB9IGVsc2UgaWYgKHR5cGVvZiBhID09PSAnZnVuY3Rpb24nKSB7CiAgICByZXR1cm4gYSA9PT0gYjsKICB9IGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBPYmplY3QpIHsKICAgIGlmIChBcnJheS5pc0FycmF5KGIpIHx8ICEoYiBpbnN0YW5jZW9mIE9iamVjdCkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGZvciAocHJvcCBpbiBhKSB7CiAgICAgIC8vIG5vaW5zcGVjdGlvbiBKU1VuZmlsdGVyZWRGb3JJbkxvb3AKICAgICAgaWYgKCEocHJvcCBpbiBiKSB8fCAhZGVlcFN0cmljdEVxdWFsKGFbcHJvcF0sIGJbcHJvcF0pKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CgogICAgZm9yIChwcm9wIGluIGIpIHsKICAgICAgLy8gbm9pbnNwZWN0aW9uIEpTVW5maWx0ZXJlZEZvckluTG9vcAogICAgICBpZiAoIShwcm9wIGluIGEpIHx8ICFkZWVwU3RyaWN0RXF1YWwoYVtwcm9wXSwgYltwcm9wXSkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gdHJ1ZTsKICB9IGVsc2UgewogICAgcmV0dXJuIGEgPT09IGI7CiAgfQp9Ci8qKgogKiBSZWN1cnNpdmVseSBmbGF0dGVuIGEgbmVzdGVkIG9iamVjdC4KICogQHBhcmFtIHtPYmplY3R9IG5lc3RlZE9iamVjdAogKiBAcmV0dXJuIHtPYmplY3R9IFJldHVybnMgdGhlIGZsYXR0ZW5lZCBvYmplY3QKICovCgpmdW5jdGlvbiBkZWVwRmxhdHRlbihuZXN0ZWRPYmplY3QpIHsKICB2YXIgZmxhdHRlbmVkT2JqZWN0ID0ge307CgogIF9kZWVwRmxhdHRlbihuZXN0ZWRPYmplY3QsIGZsYXR0ZW5lZE9iamVjdCk7CgogIHJldHVybiBmbGF0dGVuZWRPYmplY3Q7Cn0gLy8gaGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgZGVlcEZsYXR0ZW4KCmZ1bmN0aW9uIF9kZWVwRmxhdHRlbihuZXN0ZWRPYmplY3QsIGZsYXR0ZW5lZE9iamVjdCkgewogIGZvciAodmFyIHByb3AgaW4gbmVzdGVkT2JqZWN0KSB7CiAgICBpZiAoaGFzT3duUHJvcGVydHkobmVzdGVkT2JqZWN0LCBwcm9wKSkgewogICAgICB2YXIgdmFsdWUgPSBuZXN0ZWRPYmplY3RbcHJvcF07CgogICAgICBpZiAoX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7CiAgICAgICAgX2RlZXBGbGF0dGVuKHZhbHVlLCBmbGF0dGVuZWRPYmplY3QpOwogICAgICB9IGVsc2UgewogICAgICAgIGZsYXR0ZW5lZE9iamVjdFtwcm9wXSA9IHZhbHVlOwogICAgICB9CiAgICB9CiAgfQp9Ci8qKgogKiBUZXN0IHdoZXRoZXIgdGhlIGN1cnJlbnQgSmF2YVNjcmlwdCBlbmdpbmUgc3VwcG9ydHMgT2JqZWN0LmRlZmluZVByb3BlcnR5CiAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm5zIHRydWUgaWYgc3VwcG9ydGVkCiAqLwoKCmZ1bmN0aW9uIGNhbkRlZmluZVByb3BlcnR5KCkgewogIC8vIHRlc3QgbmVlZGVkIGZvciBicm9rZW4gSUU4IGltcGxlbWVudGF0aW9uCiAgdHJ5IHsKICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAneCcsIHsKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHt9CiAgICAgIH0pOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9IGNhdGNoIChlKSB7fQoKICByZXR1cm4gZmFsc2U7Cn0KLyoqCiAqIEF0dGFjaCBhIGxhenkgbG9hZGluZyBwcm9wZXJ0eSB0byBhIGNvbnN0YW50LgogKiBUaGUgZ2l2ZW4gZnVuY3Rpb24gYGZuYCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBmaXJzdCByZXF1ZXN0ZWQuCiAqCiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgICAgICAgICBPYmplY3Qgd2hlcmUgdG8gYWRkIHRoZSBwcm9wZXJ0eQogKiBAcGFyYW0ge3N0cmluZ30gcHJvcCAgICAgICAgICAgUHJvcGVydHkgbmFtZQogKiBAcGFyYW0ge0Z1bmN0aW9ufSB2YWx1ZVJlc29sdmVyIEZ1bmN0aW9uIHJldHVybmluZyB0aGUgcHJvcGVydHkgdmFsdWUuIENhbGxlZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBhcmd1bWVudHMuCiAqLwoKZnVuY3Rpb24gbGF6eShvYmplY3QsIHByb3AsIHZhbHVlUmVzb2x2ZXIpIHsKICB2YXIgX3VuaW5pdGlhbGl6ZWQgPSB0cnVlOwoKICB2YXIgX3ZhbHVlOwoKICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wLCB7CiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgaWYgKF91bmluaXRpYWxpemVkKSB7CiAgICAgICAgX3ZhbHVlID0gdmFsdWVSZXNvbHZlcigpOwogICAgICAgIF91bmluaXRpYWxpemVkID0gZmFsc2U7CiAgICAgIH0KCiAgICAgIHJldHVybiBfdmFsdWU7CiAgICB9LAogICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHsKICAgICAgX3ZhbHVlID0gdmFsdWU7CiAgICAgIF91bmluaXRpYWxpemVkID0gZmFsc2U7CiAgICB9LAogICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgZW51bWVyYWJsZTogdHJ1ZQogIH0pOwp9Ci8qKgogKiBUcmF2ZXJzZSBhIHBhdGggaW50byBhbiBvYmplY3QuCiAqIFdoZW4gYSBuYW1lc3BhY2UgaXMgbWlzc2luZywgaXQgd2lsbCBiZSBjcmVhdGVkCiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gcGF0aCAgIEEgZG90IHNlcGFyYXRlZCBzdHJpbmcgbGlrZSAnbmFtZS5zcGFjZScKICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIHRoZSBvYmplY3QgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aAogKi8KCmZ1bmN0aW9uIHRyYXZlcnNlKG9iamVjdCwgcGF0aCkgewogIGlmIChwYXRoICYmIHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykgewogICAgcmV0dXJuIHRyYXZlcnNlKG9iamVjdCwgcGF0aC5zcGxpdCgnLicpKTsKICB9CgogIHZhciBvYmogPSBvYmplY3Q7CgogIGlmIChwYXRoKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGtleSA9IHBhdGhbaV07CgogICAgICBpZiAoIShrZXkgaW4gb2JqKSkgewogICAgICAgIG9ialtrZXldID0ge307CiAgICAgIH0KCiAgICAgIG9iaiA9IG9ialtrZXldOwogICAgfQogIH0KCiAgcmV0dXJuIG9iajsKfQovKioKICogQSBzYWZlIGhhc093blByb3BlcnR5CiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5CiAqLwoKZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSkgewogIHJldHVybiBvYmplY3QgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7Cn0KLyoqCiAqIFRlc3Qgd2hldGhlciBhbiBvYmplY3QgaXMgYSBmYWN0b3J5LiBhIGZhY3RvcnkgaGFzIGZpZWxkczoKICoKICogLSBmYWN0b3J5OiBmdW5jdGlvbiAodHlwZTogT2JqZWN0LCBjb25maWc6IE9iamVjdCwgbG9hZDogZnVuY3Rpb24sIHR5cGVkOiBmdW5jdGlvbiBbLCBtYXRoOiBPYmplY3RdKSAgIChyZXF1aXJlZCkKICogLSBuYW1lOiBzdHJpbmcgKG9wdGlvbmFsKQogKiAtIHBhdGg6IHN0cmluZyAgICBBIGRvdCBzZXBhcmF0ZWQgcGF0aCAob3B0aW9uYWwpCiAqIC0gbWF0aDogYm9vbGVhbiAgIElmIHRydWUgKGZhbHNlIGJ5IGRlZmF1bHQpLCB0aGUgbWF0aCBuYW1lc3BhY2UgaXMgcGFzc2VkCiAqICAgICAgICAgICAgICAgICAgIGFzIGZpZnRoIGFyZ3VtZW50IG9mIHRoZSBmYWN0b3J5IGZ1bmN0aW9uCiAqCiAqIEBwYXJhbSB7Kn0gb2JqZWN0CiAqIEByZXR1cm5zIHtib29sZWFufQogKi8KCmZ1bmN0aW9uIGlzTGVnYWN5RmFjdG9yeShvYmplY3QpIHsKICByZXR1cm4gb2JqZWN0ICYmIHR5cGVvZiBvYmplY3QuZmFjdG9yeSA9PT0gJ2Z1bmN0aW9uJzsKfQovKioKICogR2V0IGEgbmVzdGVkIHByb3BlcnR5IGZyb20gYW4gb2JqZWN0CiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gcGF0aAogKiBAcmV0dXJucyB7T2JqZWN0fQogKi8KCmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgpIHsKICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7CiAgICBpZiAoaXNQYXRoKHBhdGgpKSB7CiAgICAgIHJldHVybiBnZXQob2JqZWN0LCBwYXRoLnNwbGl0KCcuJykpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG9iamVjdFtwYXRoXTsKICAgIH0KICB9CgogIHZhciBjaGlsZCA9IG9iamVjdDsKCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIga2V5ID0gcGF0aFtpXTsKICAgIGNoaWxkID0gY2hpbGQgPyBjaGlsZFtrZXldIDogdW5kZWZpbmVkOwogIH0KCiAgcmV0dXJuIGNoaWxkOwp9Ci8qKgogKiBTZXQgYSBuZXN0ZWQgcHJvcGVydHkgaW4gYW4gb2JqZWN0CiAqIE11dGF0ZXMgdGhlIG9iamVjdCBpdHNlbGYKICogSWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkCiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gcGF0aAogKiBAcGFyYW0geyp9IHZhbHVlCiAqIEByZXR1cm5zIHtPYmplY3R9CiAqLwoKZnVuY3Rpb24gc2V0KG9iamVjdCwgcGF0aCwgdmFsdWUpIHsKICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7CiAgICBpZiAoaXNQYXRoKHBhdGgpKSB7CiAgICAgIHJldHVybiBzZXQob2JqZWN0LCBwYXRoLnNwbGl0KCcuJyksIHZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIG9iamVjdFtwYXRoXSA9IHZhbHVlOwogICAgICByZXR1cm4gb2JqZWN0OwogICAgfQogIH0KCiAgdmFyIGNoaWxkID0gb2JqZWN0OwoKICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoIC0gMTsgaSsrKSB7CiAgICB2YXIga2V5ID0gcGF0aFtpXTsKCiAgICBpZiAoY2hpbGRba2V5XSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIGNoaWxkW2tleV0gPSB7fTsKICAgIH0KCiAgICBjaGlsZCA9IGNoaWxkW2tleV07CiAgfQoKICBpZiAocGF0aC5sZW5ndGggPiAwKSB7CiAgICB2YXIgbGFzdEtleSA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTsKICAgIGNoaWxkW2xhc3RLZXldID0gdmFsdWU7CiAgfQoKICByZXR1cm4gb2JqZWN0Owp9Ci8qKgogKiBDcmVhdGUgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBwaWNrZWQgb2JqZWN0IHByb3BlcnRpZXMKICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wZXJ0aWVzCiAqIEBwYXJhbSB7ZnVuY3Rpb259IFt0cmFuc2Zvcm1dIE9wdGlvbmFsIHZhbHVlIHRvIHRyYW5zZm9ybSBhIHZhbHVlIHdoZW4gcGlja2luZyBpdAogKiBAcmV0dXJuIHtPYmplY3R9CiAqLwoKZnVuY3Rpb24gcGljayhvYmplY3QsIHByb3BlcnRpZXMsIHRyYW5zZm9ybSkgewogIHZhciBjb3B5ID0ge307CgogIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykgewogICAgdmFyIGtleSA9IHByb3BlcnRpZXNbaV07CiAgICB2YXIgdmFsdWUgPSBnZXQob2JqZWN0LCBrZXkpOwoKICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgIHNldChjb3B5LCBrZXksIHRyYW5zZm9ybSA/IHRyYW5zZm9ybSh2YWx1ZSwga2V5KSA6IHZhbHVlKTsKICAgIH0KICB9CgogIHJldHVybiBjb3B5Owp9Ci8qKgogKiBTaGFsbG93IHZlcnNpb24gb2YgcGljaywgY3JlYXRpbmcgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBwaWNrZWQgb2JqZWN0IHByb3BlcnRpZXMKICogYnV0IG5vdCBmb3IgbmVzdGVkIHByb3BlcnRpZXMKICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wZXJ0aWVzCiAqIEByZXR1cm4ge09iamVjdH0KICovCgpmdW5jdGlvbiBwaWNrU2hhbGxvdyhvYmplY3QsIHByb3BlcnRpZXMpIHsKICB2YXIgY29weSA9IHt9OwoKICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBrZXkgPSBwcm9wZXJ0aWVzW2ldOwogICAgdmFyIHZhbHVlID0gb2JqZWN0W2tleV07CgogICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHsKICAgICAgY29weVtrZXldID0gdmFsdWU7CiAgICB9CiAgfQoKICByZXR1cm4gY29weTsKfQpmdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7CiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubWFwKGZ1bmN0aW9uIChrZXkpIHsKICAgIHJldHVybiBvYmplY3Rba2V5XTsKICB9KTsKfSAvLyBoZWxwZXIgZnVuY3Rpb24gdG8gdGVzdCB3aGV0aGVyIGEgc3RyaW5nIGNvbnRhaW5zIGEgcGF0aCBsaWtlICd1c2VyLm5hbWUnCgpmdW5jdGlvbiBpc1BhdGgoc3RyKSB7CiAgcmV0dXJuIHN0ci5pbmRleE9mKCcuJykgIT09IC0xOwp9CgovKioqLyB9KSwKLyogNCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoidXNlIHN0cmljdCI7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzSW50ZWdlcjsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIm4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNpZ247IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBsb2cyOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiaiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbG9nMTA7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBsb2cxcDsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNicnQ7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJnIiwgZnVuY3Rpb24oKSB7IHJldHVybiBleHBtMTsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZvcm1hdDsgfSk7Ci8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBzcGxpdE51bWJlciAqLwovKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgdG9FbmdpbmVlcmluZyAqLwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJxIiwgZnVuY3Rpb24oKSB7IHJldHVybiB0b0ZpeGVkOyB9KTsKLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHRvRXhwb25lbnRpYWwgKi8KLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHRvUHJlY2lzaW9uICovCi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCByb3VuZERpZ2l0cyAqLwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJmIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkaWdpdHM7IH0pOwovKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgREJMX0VQU0lMT04gKi8KLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAibSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbmVhcmx5RXF1YWw7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhY29zaDsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFzaW5oOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXRhbmg7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjb3NoOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAibyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2luaDsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInAiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRhbmg7IH0pOwovKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX29iamVjdF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTsKLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9pc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTsKCgovKioKICogQHR5cGVkZWYge3tzaWduOiAnKycgfCAnLScgfCAnJywgY29lZmZpY2llbnRzOiBudW1iZXJbXSwgZXhwb25lbnQ6IG51bWJlcn19IFNwbGl0VmFsdWUKICovCgovKioKICogQ2hlY2sgaWYgYSBudW1iZXIgaXMgaW50ZWdlcgogKiBAcGFyYW0ge251bWJlciB8IGJvb2xlYW59IHZhbHVlCiAqIEByZXR1cm4ge2Jvb2xlYW59IGlzSW50ZWdlcgogKi8KCmZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkgewogIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykgewogICAgcmV0dXJuIHRydWU7CiAgfQoKICByZXR1cm4gaXNGaW5pdGUodmFsdWUpID8gdmFsdWUgPT09IE1hdGgucm91bmQodmFsdWUpIDogZmFsc2U7IC8vIE5vdGU6IHdlIHVzZSA9PSwgbm90ID09PSwgYXMgd2UgY2FuIGhhdmUgQm9vbGVhbnMgYXMgd2VsbAp9Ci8qKgogKiBDYWxjdWxhdGUgdGhlIHNpZ24gb2YgYSBudW1iZXIKICogQHBhcmFtIHtudW1iZXJ9IHgKICogQHJldHVybnMge251bWJlcn0KICovCgp2YXIgc2lnbiA9Ci8qICNfX1BVUkVfXyAqLwpNYXRoLnNpZ24gfHwgZnVuY3Rpb24gKHgpIHsKICBpZiAoeCA+IDApIHsKICAgIHJldHVybiAxOwogIH0gZWxzZSBpZiAoeCA8IDApIHsKICAgIHJldHVybiAtMTsKICB9IGVsc2UgewogICAgcmV0dXJuIDA7CiAgfQp9OwovKioKICogQ2FsY3VsYXRlIHRoZSBiYXNlLTIgbG9nYXJpdGhtIG9mIGEgbnVtYmVyCiAqIEBwYXJhbSB7bnVtYmVyfSB4CiAqIEByZXR1cm5zIHtudW1iZXJ9CiAqLwoKdmFyIGxvZzIgPQovKiAjX19QVVJFX18gKi8KTWF0aC5sb2cyIHx8IGZ1bmN0aW9uIGxvZzIoeCkgewogIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yOwp9OwovKioKICogQ2FsY3VsYXRlIHRoZSBiYXNlLTEwIGxvZ2FyaXRobSBvZiBhIG51bWJlcgogKiBAcGFyYW0ge251bWJlcn0geAogKiBAcmV0dXJucyB7bnVtYmVyfQogKi8KCnZhciBsb2cxMCA9Ci8qICNfX1BVUkVfXyAqLwpNYXRoLmxvZzEwIHx8IGZ1bmN0aW9uIGxvZzEwKHgpIHsKICByZXR1cm4gTWF0aC5sb2coeCkgLyBNYXRoLkxOMTA7Cn07Ci8qKgogKiBDYWxjdWxhdGUgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIGEgbnVtYmVyICsgMQogKiBAcGFyYW0ge251bWJlcn0geAogKiBAcmV0dXJucyB7bnVtYmVyfQogKi8KCnZhciBsb2cxcCA9Ci8qICNfX1BVUkVfXyAqLwpNYXRoLmxvZzFwIHx8IGZ1bmN0aW9uICh4KSB7CiAgcmV0dXJuIE1hdGgubG9nKHggKyAxKTsKfTsKLyoqCiAqIENhbGN1bGF0ZSBjdWJpYyByb290IGZvciBhIG51bWJlcgogKgogKiBDb2RlIGZyb20gZXM2LXNoaW0uanM6CiAqICAgaHR0cHM6Ly9naXRodWIuY29tL3BhdWxtaWxsci9lczYtc2hpbS9ibG9iL21hc3Rlci9lczYtc2hpbS5qcyNMMTU2NC1MMTU3NwogKgogKiBAcGFyYW0ge251bWJlcn0geAogKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjdWJpYyByb290IG9mIHgKICovCgp2YXIgY2JydCA9Ci8qICNfX1BVUkVfXyAqLwpNYXRoLmNicnQgfHwgZnVuY3Rpb24gY2JydCh4KSB7CiAgaWYgKHggPT09IDApIHsKICAgIHJldHVybiB4OwogIH0KCiAgdmFyIG5lZ2F0ZSA9IHggPCAwOwogIHZhciByZXN1bHQ7CgogIGlmIChuZWdhdGUpIHsKICAgIHggPSAteDsKICB9CgogIGlmIChpc0Zpbml0ZSh4KSkgewogICAgcmVzdWx0ID0gTWF0aC5leHAoTWF0aC5sb2coeCkgLyAzKTsgLy8gZnJvbSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DdWJlX3Jvb3QjTnVtZXJpY2FsX21ldGhvZHMKCiAgICByZXN1bHQgPSAoeCAvIChyZXN1bHQgKiByZXN1bHQpICsgMiAqIHJlc3VsdCkgLyAzOwogIH0gZWxzZSB7CiAgICByZXN1bHQgPSB4OwogIH0KCiAgcmV0dXJuIG5lZ2F0ZSA/IC1yZXN1bHQgOiByZXN1bHQ7Cn07Ci8qKgogKiBDYWxjdWxhdGVzIGV4cG9uZW50aWF0aW9uIG1pbnVzIDEKICogQHBhcmFtIHtudW1iZXJ9IHgKICogQHJldHVybiB7bnVtYmVyfSByZXMKICovCgp2YXIgZXhwbTEgPQovKiAjX19QVVJFX18gKi8KTWF0aC5leHBtMSB8fCBmdW5jdGlvbiBleHBtMSh4KSB7CiAgcmV0dXJuIHggPj0gMmUtNCB8fCB4IDw9IC0yZS00ID8gTWF0aC5leHAoeCkgLSAxIDogeCArIHggKiB4IC8gMiArIHggKiB4ICogeCAvIDY7Cn07Ci8qKgogKiBDb252ZXJ0IGEgbnVtYmVyIHRvIGEgZm9ybWF0dGVkIHN0cmluZyByZXByZXNlbnRhdGlvbi4KICoKICogU3ludGF4OgogKgogKiAgICBmb3JtYXQodmFsdWUpCiAqICAgIGZvcm1hdCh2YWx1ZSwgb3B0aW9ucykKICogICAgZm9ybWF0KHZhbHVlLCBwcmVjaXNpb24pCiAqICAgIGZvcm1hdCh2YWx1ZSwgZm4pCiAqCiAqIFdoZXJlOgogKgogKiAgICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byBiZSBmb3JtYXR0ZWQKICogICAge09iamVjdH0gb3B0aW9ucyBBbiBvYmplY3Qgd2l0aCBmb3JtYXR0aW5nIG9wdGlvbnMuIEF2YWlsYWJsZSBvcHRpb25zOgogKiAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmd9IG5vdGF0aW9uCiAqICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBub3RhdGlvbi4gQ2hvb3NlIGZyb206CiAqICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZCcgICAgICAgICAgQWx3YXlzIHVzZSByZWd1bGFyIG51bWJlciBub3RhdGlvbi4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSAnMTIzLjQwJyBhbmQgJzE0MDAwMDAwJwogKiAgICAgICAgICAgICAgICAgICAgICAgICAnZXhwb25lbnRpYWwnICAgIEFsd2F5cyB1c2UgZXhwb25lbnRpYWwgbm90YXRpb24uCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEuMjM0ZSsyJyBhbmQgJzEuNGUrNycKICogICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZ2luZWVyaW5nJyAgICBBbHdheXMgdXNlIGVuZ2luZWVyaW5nIG5vdGF0aW9uLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlICcxMjMuNGUrMCcgYW5kICcxNC4wZSs2JwogKiAgICAgICAgICAgICAgICAgICAgICAgICAnYXV0bycgKGRlZmF1bHQpIFJlZ3VsYXIgbnVtYmVyIG5vdGF0aW9uIGZvciBudW1iZXJzCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2aW5nIGFuIGFic29sdXRlIHZhbHVlIGJldHdlZW4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgbG93ZXJFeHBgIGFuZCBgdXBwZXJFeHBgIGJvdW5kcywgYW5kCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcyBleHBvbmVudGlhbCBub3RhdGlvbiBlbHNld2hlcmUuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG93ZXIgYm91bmQgaXMgaW5jbHVkZWQsIHVwcGVyIGJvdW5kCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZXhjbHVkZWQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40JyBhbmQgJzEuNGU3Jy4KICogICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSBwcmVjaXNpb24gICBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDE2IHRvIHJvdW5kCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRpZ2l0cyBvZiB0aGUgbnVtYmVyLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb25zICdleHBvbmVudGlhbCcsCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZ2luZWVyaW5nJywgYW5kICdhdXRvJywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcHJlY2lzaW9uYCBkZWZpbmVzIHRoZSB0b3RhbAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgcmV0dXJuZWQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gY2FzZSBvZiBub3RhdGlvbiAnZml4ZWQnLAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwcmVjaXNpb25gIGRlZmluZXMgdGhlIG51bWJlciBvZgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50IGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50LgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwcmVjaXNpb25gIGlzIHVuZGVmaW5lZCBieSBkZWZhdWx0LAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCByb3VuZGluZyBhbnkgZGlnaXRzLgogKiAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGxvd2VyRXhwICAgIEV4cG9uZW50IGRldGVybWluaW5nIHRoZSBsb3dlciBib3VuZGFyeQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmb3JtYXR0aW5nIGEgdmFsdWUgd2l0aCBhbiBleHBvbmVudAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYG5vdGF0aW9uPSdhdXRvYC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IHZhbHVlIGlzIGAtM2AuCiAqICAgICAgICAgICAgICAgICAgICAge251bWJlcn0gdXBwZXJFeHAgICAgRXhwb25lbnQgZGV0ZXJtaW5pbmcgdGhlIHVwcGVyIGJvdW5kYXJ5CiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZvcm1hdHRpbmcgYSB2YWx1ZSB3aXRoIGFuIGV4cG9uZW50CiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBgbm90YXRpb249J2F1dG9gLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgdmFsdWUgaXMgYDVgLgogKiAgICB7RnVuY3Rpb259IGZuICAgIEEgY3VzdG9tIGZvcm1hdHRpbmcgZnVuY3Rpb24uIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZQogKiAgICAgICAgICAgICAgICAgICAgIGJ1aWx0LWluIG5vdGF0aW9ucy4gRnVuY3Rpb24gYGZuYCBpcyBjYWxsZWQgd2l0aCBgdmFsdWVgIGFzCiAqICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIGFuZCBtdXN0IHJldHVybiBhIHN0cmluZy4gSXMgdXNlZnVsIGZvciBleGFtcGxlIHRvCiAqICAgICAgICAgICAgICAgICAgICAgZm9ybWF0IGFsbCB2YWx1ZXMgaW5zaWRlIGEgbWF0cml4IGluIGEgcGFydGljdWxhciB3YXkuCiAqCiAqIEV4YW1wbGVzOgogKgogKiAgICBmb3JtYXQoNi40KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnNi40JwogKiAgICBmb3JtYXQoMTI0MDAwMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMS4yNGU2JwogKiAgICBmb3JtYXQoMS8zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMC4zMzMzMzMzMzMzMzMzMzMzJwogKiAgICBmb3JtYXQoMS8zLCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMC4zMzMnCiAqICAgIGZvcm1hdCgyMTM4NSwgMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICcyMTAwMCcKICogICAgZm9ybWF0KDEyLjA3MSwge25vdGF0aW9uOiAnZml4ZWQnfSkgICAgICAgICAgICAgICAgLy8gJzEyJwogKiAgICBmb3JtYXQoMi4zLCAgICB7bm90YXRpb246ICdmaXhlZCcsIHByZWNpc2lvbjogMn0pICAvLyAnMi4zMCcKICogICAgZm9ybWF0KDUyLjgsICAge25vdGF0aW9uOiAnZXhwb25lbnRpYWwnfSkgICAgICAgICAgLy8gJzUuMjhlKzEnCiAqICAgIGZvcm1hdCgxMjM0NTY3OCwge25vdGF0aW9uOiAnZW5naW5lZXJpbmcnfSkgICAgICAgIC8vICcxMi4zNDU2NzhlKzYnCiAqCiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZQogKiBAcGFyYW0ge09iamVjdCB8IEZ1bmN0aW9uIHwgbnVtYmVyfSBbb3B0aW9uc10KICogQHJldHVybiB7c3RyaW5nfSBzdHIgVGhlIGZvcm1hdHRlZCB2YWx1ZQogKi8KCmZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSwgb3B0aW9ucykgewogIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykgewogICAgLy8gaGFuZGxlIGZvcm1hdCh2YWx1ZSwgZm4pCiAgICByZXR1cm4gb3B0aW9ucyh2YWx1ZSk7CiAgfSAvLyBoYW5kbGUgc3BlY2lhbCBjYXNlcwoKCiAgaWYgKHZhbHVlID09PSBJbmZpbml0eSkgewogICAgcmV0dXJuICdJbmZpbml0eSc7CiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gLUluZmluaXR5KSB7CiAgICByZXR1cm4gJy1JbmZpbml0eSc7CiAgfSBlbHNlIGlmIChpc05hTih2YWx1ZSkpIHsKICAgIHJldHVybiAnTmFOJzsKICB9IC8vIGRlZmF1bHQgdmFsdWVzIGZvciBvcHRpb25zCgoKICB2YXIgbm90YXRpb24gPSAnYXV0byc7CiAgdmFyIHByZWNpc2lvbjsKCiAgaWYgKG9wdGlvbnMpIHsKICAgIC8vIGRldGVybWluZSBub3RhdGlvbiBmcm9tIG9wdGlvbnMKICAgIGlmIChvcHRpb25zLm5vdGF0aW9uKSB7CiAgICAgIG5vdGF0aW9uID0gb3B0aW9ucy5ub3RhdGlvbjsKICAgIH0gLy8gZGV0ZXJtaW5lIHByZWNpc2lvbiBmcm9tIG9wdGlvbnMKCgogICAgaWYgKE9iamVjdChfaXNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1svKiBpc051bWJlciAqLyAieSJdKShvcHRpb25zKSkgewogICAgICBwcmVjaXNpb24gPSBvcHRpb25zOwogICAgfSBlbHNlIGlmIChPYmplY3QoX2lzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bLyogaXNOdW1iZXIgKi8gInkiXSkob3B0aW9ucy5wcmVjaXNpb24pKSB7CiAgICAgIHByZWNpc2lvbiA9IG9wdGlvbnMucHJlY2lzaW9uOwogICAgfQogIH0gLy8gaGFuZGxlIHRoZSB2YXJpb3VzIG5vdGF0aW9ucwoKCiAgc3dpdGNoIChub3RhdGlvbikgewogICAgY2FzZSAnZml4ZWQnOgogICAgICByZXR1cm4gdG9GaXhlZCh2YWx1ZSwgcHJlY2lzaW9uKTsKCiAgICBjYXNlICdleHBvbmVudGlhbCc6CiAgICAgIHJldHVybiB0b0V4cG9uZW50aWFsKHZhbHVlLCBwcmVjaXNpb24pOwoKICAgIGNhc2UgJ2VuZ2luZWVyaW5nJzoKICAgICAgcmV0dXJuIHRvRW5naW5lZXJpbmcodmFsdWUsIHByZWNpc2lvbik7CgogICAgY2FzZSAnYXV0byc6CiAgICAgIC8vIFRPRE86IGNsZWFuIHVwIHNvbWUgZGF5LiBEZXByZWNhdGVkIHNpbmNlOiAyMDE4LTAxLTI0CiAgICAgIC8vIEBkZXByZWNhdGVkIHVwcGVyIGFuZCBsb3dlciBhcmUgcmVwbGFjZWQgd2l0aCB1cHBlckV4cCBhbmQgbG93ZXJFeHAgc2luY2UgdjQuMC4wCiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXhwb25lbnRpYWwgJiYgKG9wdGlvbnMuZXhwb25lbnRpYWwubG93ZXIgIT09IHVuZGVmaW5lZCB8fCBvcHRpb25zLmV4cG9uZW50aWFsLnVwcGVyICE9PSB1bmRlZmluZWQpKSB7CiAgICAgICAgdmFyIGZpeGVkT3B0aW9ucyA9IE9iamVjdChfb2JqZWN0X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bLyogbWFwT2JqZWN0ICovICJpIl0pKG9wdGlvbnMsIGZ1bmN0aW9uICh4KSB7CiAgICAgICAgICByZXR1cm4geDsKICAgICAgICB9KTsKICAgICAgICBmaXhlZE9wdGlvbnMuZXhwb25lbnRpYWwgPSB1bmRlZmluZWQ7CgogICAgICAgIGlmIChvcHRpb25zLmV4cG9uZW50aWFsLmxvd2VyICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgIGZpeGVkT3B0aW9ucy5sb3dlckV4cCA9IE1hdGgucm91bmQoTWF0aC5sb2cob3B0aW9ucy5leHBvbmVudGlhbC5sb3dlcikgLyBNYXRoLkxOMTApOwogICAgICAgIH0KCiAgICAgICAgaWYgKG9wdGlvbnMuZXhwb25lbnRpYWwudXBwZXIgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgZml4ZWRPcHRpb25zLnVwcGVyRXhwID0gTWF0aC5yb3VuZChNYXRoLmxvZyhvcHRpb25zLmV4cG9uZW50aWFsLnVwcGVyKSAvIE1hdGguTE4xMCk7CiAgICAgICAgfQoKICAgICAgICBjb25zb2xlLndhcm4oJ0RlcHJlY2F0aW9uIHdhcm5pbmc6IEZvcm1hdHRpbmcgb3B0aW9ucyBleHBvbmVudGlhbC5sb3dlciBhbmQgZXhwb25lbnRpYWwudXBwZXIgJyArICcobWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZSkgJyArICdhcmUgcmVwbGFjZWQgd2l0aCBleHBvbmVudGlhbC5sb3dlckV4cCBhbmQgZXhwb25lbnRpYWwudXBwZXJFeHAgJyArICcobWluaW11bSBhbmQgbWF4aW11bSBleHBvbmVudCkgc2luY2UgdmVyc2lvbiA0LjAuMC4gJyArICdSZXBsYWNlICcgKyBKU09OLnN0cmluZ2lmeShvcHRpb25zKSArICcgd2l0aCAnICsgSlNPTi5zdHJpbmdpZnkoZml4ZWRPcHRpb25zKSk7CiAgICAgICAgcmV0dXJuIHRvUHJlY2lzaW9uKHZhbHVlLCBwcmVjaXNpb24sIGZpeGVkT3B0aW9ucyk7CiAgICAgIH0gLy8gcmVtb3ZlIHRyYWlsaW5nIHplcm9zIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50CgoKICAgICAgcmV0dXJuIHRvUHJlY2lzaW9uKHZhbHVlLCBwcmVjaXNpb24sIG9wdGlvbnMgJiYgb3B0aW9ucykucmVwbGFjZSgvKChcLlxkKj8pKDArKSkoJHxlKS8sIGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZGlnaXRzID0gYXJndW1lbnRzWzJdOwogICAgICAgIHZhciBlID0gYXJndW1lbnRzWzRdOwogICAgICAgIHJldHVybiBkaWdpdHMgIT09ICcuJyA/IGRpZ2l0cyArIGUgOiBlOwogICAgICB9KTsKCiAgICBkZWZhdWx0OgogICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbm90YXRpb24gIicgKyBub3RhdGlvbiArICciLiAnICsgJ0Nob29zZSAiYXV0byIsICJleHBvbmVudGlhbCIsIG9yICJmaXhlZCIuJyk7CiAgfQp9Ci8qKgogKiBTcGxpdCBhIG51bWJlciBpbnRvIHNpZ24sIGNvZWZmaWNpZW50cywgYW5kIGV4cG9uZW50CiAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSB2YWx1ZQogKiBAcmV0dXJuIHtTcGxpdFZhbHVlfQogKiAgICAgICAgICAgICAgUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyBzaWduLCBjb2VmZmljaWVudHMsIGFuZCBleHBvbmVudAogKi8KCmZ1bmN0aW9uIHNwbGl0TnVtYmVyKHZhbHVlKSB7CiAgLy8gcGFyc2UgdGhlIGlucHV0IHZhbHVlCiAgdmFyIG1hdGNoID0gU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eMCo/KC0/KShcZCtcLj9cZCopKGUoWystXT9cZCspKT8kLyk7CgogIGlmICghbWF0Y2gpIHsKICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignSW52YWxpZCBudW1iZXIgJyArIHZhbHVlKTsKICB9CgogIHZhciBzaWduID0gbWF0Y2hbMV07CiAgdmFyIGRpZ2l0cyA9IG1hdGNoWzJdOwogIHZhciBleHBvbmVudCA9IHBhcnNlRmxvYXQobWF0Y2hbNF0gfHwgJzAnKTsKICB2YXIgZG90ID0gZGlnaXRzLmluZGV4T2YoJy4nKTsKICBleHBvbmVudCArPSBkb3QgIT09IC0xID8gZG90IC0gMSA6IGRpZ2l0cy5sZW5ndGggLSAxOwogIHZhciBjb2VmZmljaWVudHMgPSBkaWdpdHMucmVwbGFjZSgnLicsICcnKSAvLyByZW1vdmUgdGhlIGRvdCAobXVzdCBiZSByZW1vdmVkIGJlZm9yZSByZW1vdmluZyBsZWFkaW5nIHplcm9zKQogIC5yZXBsYWNlKC9eMCovLCBmdW5jdGlvbiAoemVyb3MpIHsKICAgIC8vIHJlbW92ZSBsZWFkaW5nIHplcm9zLCBhZGQgdGhlaXIgY291bnQgdG8gdGhlIGV4cG9uZW50CiAgICBleHBvbmVudCAtPSB6ZXJvcy5sZW5ndGg7CiAgICByZXR1cm4gJyc7CiAgfSkucmVwbGFjZSgvMCokLywgJycpIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvcwogIC5zcGxpdCgnJykubWFwKGZ1bmN0aW9uIChkKSB7CiAgICByZXR1cm4gcGFyc2VJbnQoZCk7CiAgfSk7CgogIGlmIChjb2VmZmljaWVudHMubGVuZ3RoID09PSAwKSB7CiAgICBjb2VmZmljaWVudHMucHVzaCgwKTsKICAgIGV4cG9uZW50Kys7CiAgfQoKICByZXR1cm4gewogICAgc2lnbjogc2lnbiwKICAgIGNvZWZmaWNpZW50czogY29lZmZpY2llbnRzLAogICAgZXhwb25lbnQ6IGV4cG9uZW50CiAgfTsKfQovKioKICogRm9ybWF0IGEgbnVtYmVyIGluIGVuZ2luZWVyaW5nIG5vdGF0aW9uLiBMaWtlICcxLjIzZSs2JywgJzIuM2UrMCcsICczLjUwMGUtMycKICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IHZhbHVlCiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uXSAgICAgICAgT3B0aW9uYWwgbnVtYmVyIG9mIHNpZ25pZmljYW50IGZpZ3VyZXMgdG8gcmV0dXJuLgogKi8KCmZ1bmN0aW9uIHRvRW5naW5lZXJpbmcodmFsdWUsIHByZWNpc2lvbikgewogIGlmIChpc05hTih2YWx1ZSkgfHwgIWlzRmluaXRlKHZhbHVlKSkgewogICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7CiAgfQoKICB2YXIgcm91bmRlZCA9IHJvdW5kRGlnaXRzKHNwbGl0TnVtYmVyKHZhbHVlKSwgcHJlY2lzaW9uKTsKICB2YXIgZSA9IHJvdW5kZWQuZXhwb25lbnQ7CiAgdmFyIGMgPSByb3VuZGVkLmNvZWZmaWNpZW50czsgLy8gZmluZCBuZWFyZXN0IGxvd2VyIG11bHRpcGxlIG9mIDMgZm9yIGV4cG9uZW50CgogIHZhciBuZXdFeHAgPSBlICUgMyA9PT0gMCA/IGUgOiBlIDwgMCA/IGUgLSAzIC0gZSAlIDMgOiBlIC0gZSAlIDM7CgogIGlmIChPYmplY3QoX2lzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bLyogaXNOdW1iZXIgKi8gInkiXSkocHJlY2lzaW9uKSkgewogICAgLy8gYWRkIHplcm9lcyB0byBnaXZlIGNvcnJlY3Qgc2lnIGZpZ3MKICAgIHdoaWxlIChwcmVjaXNpb24gPiBjLmxlbmd0aCB8fCBlIC0gbmV3RXhwICsgMSA+IGMubGVuZ3RoKSB7CiAgICAgIGMucHVzaCgwKTsKICAgIH0KICB9IGVsc2UgewogICAgLy8gY29uY2F0ZW5hdGUgY29lZmZpY2llbnRzIHdpdGggbmVjZXNzYXJ5IHplcm9zCiAgICB2YXIgc2lnbmlmaWNhbmRzRGlmZiA9IGUgPj0gMCA/IGUgOiBNYXRoLmFicyhuZXdFeHApOyAvLyBhZGQgemVyb3MgaWYgbmVjZXNzYXJ5IChmb3IgZXg6IDFlKzgpCgogICAgd2hpbGUgKGMubGVuZ3RoIC0gMSA8IHNpZ25pZmljYW5kc0RpZmYpIHsKICAgICAgYy5wdXNoKDApOwogICAgfQogIH0gLy8gZmluZCBkaWZmZXJlbmNlIGluIGV4cG9uZW50cwoKCiAgdmFyIGV4cERpZmYgPSBNYXRoLmFicyhlIC0gbmV3RXhwKTsKICB2YXIgZGVjaW1hbElkeCA9IDE7IC8vIHB1c2ggZGVjaW1hbCBpbmRleCBvdmVyIGJ5IGV4cERpZmYgdGltZXMKCiAgd2hpbGUgKGV4cERpZmYgPiAwKSB7CiAgICBkZWNpbWFsSWR4Kys7CiAgICBleHBEaWZmLS07CiAgfSAvLyBpZiBhbGwgY29lZmZpY2llbnQgdmFsdWVzIGFyZSB6ZXJvIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IGFuZCBwcmVjaXNpb24gaXMgdW5zZXQsIGRvbid0IGFkZCBhIGRlY2ltYWwgdmFsdWUuCiAgLy8gb3RoZXJ3aXNlIGNvbmNhdCB3aXRoIHRoZSByZXN0IG9mIHRoZSBjb2VmZmljaWVudHMKCgogIHZhciBkZWNpbWFscyA9IGMuc2xpY2UoZGVjaW1hbElkeCkuam9pbignJyk7CiAgdmFyIGRlY2ltYWxWYWwgPSBPYmplY3QoX2lzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bLyogaXNOdW1iZXIgKi8gInkiXSkocHJlY2lzaW9uKSAmJiBkZWNpbWFscy5sZW5ndGggfHwgZGVjaW1hbHMubWF0Y2goL1sxLTldLykgPyAnLicgKyBkZWNpbWFscyA6ICcnOwogIHZhciBzdHIgPSBjLnNsaWNlKDAsIGRlY2ltYWxJZHgpLmpvaW4oJycpICsgZGVjaW1hbFZhbCArICdlJyArIChlID49IDAgPyAnKycgOiAnJykgKyBuZXdFeHAudG9TdHJpbmcoKTsKICByZXR1cm4gcm91bmRlZC5zaWduICsgc3RyOwp9Ci8qKgogKiBGb3JtYXQgYSBudW1iZXIgd2l0aCBmaXhlZCBub3RhdGlvbi4KICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IHZhbHVlCiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPXVuZGVmaW5lZF0gIE9wdGlvbmFsIG51bWJlciBvZiBkZWNpbWFscyBhZnRlciB0aGUKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCBwb2ludC4gbnVsbCBieSBkZWZhdWx0LgogKi8KCmZ1bmN0aW9uIHRvRml4ZWQodmFsdWUsIHByZWNpc2lvbikgewogIGlmIChpc05hTih2YWx1ZSkgfHwgIWlzRmluaXRlKHZhbHVlKSkgewogICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7CiAgfQoKICB2YXIgc3BsaXRWYWx1ZSA9IHNwbGl0TnVtYmVyKHZhbHVlKTsKICB2YXIgcm91bmRlZCA9IHR5cGVvZiBwcmVjaXNpb24gPT09ICdudW1iZXInID8gcm91bmREaWdpdHMoc3BsaXRWYWx1ZSwgc3BsaXRWYWx1ZS5leHBvbmVudCArIDEgKyBwcmVjaXNpb24pIDogc3BsaXRWYWx1ZTsKICB2YXIgYyA9IHJvdW5kZWQuY29lZmZpY2llbnRzOwogIHZhciBwID0gcm91bmRlZC5leHBvbmVudCArIDE7IC8vIGV4cG9uZW50IG1heSBoYXZlIGNoYW5nZWQKICAvLyBhcHBlbmQgemVyb3MgaWYgbmVlZGVkCgogIHZhciBwcCA9IHAgKyAocHJlY2lzaW9uIHx8IDApOwoKICBpZiAoYy5sZW5ndGggPCBwcCkgewogICAgYyA9IGMuY29uY2F0KHplcm9zKHBwIC0gYy5sZW5ndGgpKTsKICB9IC8vIHByZXBlbmQgemVyb3MgaWYgbmVlZGVkCgoKICBpZiAocCA8IDApIHsKICAgIGMgPSB6ZXJvcygtcCArIDEpLmNvbmNhdChjKTsKICAgIHAgPSAxOwogIH0gLy8gaW5zZXJ0IGEgZG90IGlmIG5lZWRlZAoKCiAgaWYgKHAgPCBjLmxlbmd0aCkgewogICAgYy5zcGxpY2UocCwgMCwgcCA9PT0gMCA/ICcwLicgOiAnLicpOwogIH0KCiAgcmV0dXJuIHJvdW5kZWQuc2lnbiArIGMuam9pbignJyk7Cn0KLyoqCiAqIEZvcm1hdCBhIG51bWJlciBpbiBleHBvbmVudGlhbCBub3RhdGlvbi4gTGlrZSAnMS4yM2UrNScsICcyLjNlKzAnLCAnMy41MDBlLTMnCiAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSB2YWx1ZQogKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbl0gIE51bWJlciBvZiBkaWdpdHMgaW4gZm9ybWF0dGVkIG91dHB1dC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBub3QgcHJvdmlkZWQsIHRoZSBtYXhpbXVtIGF2YWlsYWJsZSBkaWdpdHMKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB1c2VkLgogKi8KCmZ1bmN0aW9uIHRvRXhwb25lbnRpYWwodmFsdWUsIHByZWNpc2lvbikgewogIGlmIChpc05hTih2YWx1ZSkgfHwgIWlzRmluaXRlKHZhbHVlKSkgewogICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7CiAgfSAvLyByb3VuZCBpZiBuZWVkZWQsIGVsc2UgY3JlYXRlIGEgY2xvbmUKCgogIHZhciBzcGxpdCA9IHNwbGl0TnVtYmVyKHZhbHVlKTsKICB2YXIgcm91bmRlZCA9IHByZWNpc2lvbiA/IHJvdW5kRGlnaXRzKHNwbGl0LCBwcmVjaXNpb24pIDogc3BsaXQ7CiAgdmFyIGMgPSByb3VuZGVkLmNvZWZmaWNpZW50czsKICB2YXIgZSA9IHJvdW5kZWQuZXhwb25lbnQ7IC8vIGFwcGVuZCB6ZXJvcyBpZiBuZWVkZWQKCiAgaWYgKGMubGVuZ3RoIDwgcHJlY2lzaW9uKSB7CiAgICBjID0gYy5jb25jYXQoemVyb3MocHJlY2lzaW9uIC0gYy5sZW5ndGgpKTsKICB9IC8vIGZvcm1hdCBhcyBgQy5DQ0NlK0VFRWAgb3IgYEMuQ0NDZS1FRUVgCgoKICB2YXIgZmlyc3QgPSBjLnNoaWZ0KCk7CiAgcmV0dXJuIHJvdW5kZWQuc2lnbiArIGZpcnN0ICsgKGMubGVuZ3RoID4gMCA/ICcuJyArIGMuam9pbignJykgOiAnJykgKyAnZScgKyAoZSA+PSAwID8gJysnIDogJycpICsgZTsKfQovKioKICogRm9ybWF0IGEgbnVtYmVyIHdpdGggYSBjZXJ0YWluIHByZWNpc2lvbgogKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gdmFsdWUKICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249dW5kZWZpbmVkXSBPcHRpb25hbCBudW1iZXIgb2YgZGlnaXRzLgogKiBAcGFyYW0ge3tsb3dlckV4cDogbnVtYmVyIHwgdW5kZWZpbmVkLCB1cHBlckV4cDogbnVtYmVyIHwgdW5kZWZpbmVkfX0gW29wdGlvbnNdCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdDoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd2VyRXhwID0gLTMgKGluY2wpCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHBlciA9ICs1IChleGNsKQogKiBAcmV0dXJuIHtzdHJpbmd9CiAqLwoKZnVuY3Rpb24gdG9QcmVjaXNpb24odmFsdWUsIHByZWNpc2lvbiwgb3B0aW9ucykgewogIGlmIChpc05hTih2YWx1ZSkgfHwgIWlzRmluaXRlKHZhbHVlKSkgewogICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7CiAgfSAvLyBkZXRlcm1pbmUgbG93ZXIgYW5kIHVwcGVyIGJvdW5kIGZvciBleHBvbmVudGlhbCBub3RhdGlvbi4KCgogIHZhciBsb3dlckV4cCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5sb3dlckV4cCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5sb3dlckV4cCA6IC0zOwogIHZhciB1cHBlckV4cCA9IG9wdGlvbnMgJiYgb3B0aW9ucy51cHBlckV4cCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy51cHBlckV4cCA6IDU7CiAgdmFyIHNwbGl0ID0gc3BsaXROdW1iZXIodmFsdWUpOwogIHZhciByb3VuZGVkID0gcHJlY2lzaW9uID8gcm91bmREaWdpdHMoc3BsaXQsIHByZWNpc2lvbikgOiBzcGxpdDsKCiAgaWYgKHJvdW5kZWQuZXhwb25lbnQgPCBsb3dlckV4cCB8fCByb3VuZGVkLmV4cG9uZW50ID49IHVwcGVyRXhwKSB7CiAgICAvLyBleHBvbmVudGlhbCBub3RhdGlvbgogICAgcmV0dXJuIHRvRXhwb25lbnRpYWwodmFsdWUsIHByZWNpc2lvbik7CiAgfSBlbHNlIHsKICAgIHZhciBjID0gcm91bmRlZC5jb2VmZmljaWVudHM7CiAgICB2YXIgZSA9IHJvdW5kZWQuZXhwb25lbnQ7IC8vIGFwcGVuZCB0cmFpbGluZyB6ZXJvcwoKICAgIGlmIChjLmxlbmd0aCA8IHByZWNpc2lvbikgewogICAgICBjID0gYy5jb25jYXQoemVyb3MocHJlY2lzaW9uIC0gYy5sZW5ndGgpKTsKICAgIH0gLy8gYXBwZW5kIHRyYWlsaW5nIHplcm9zCiAgICAvLyBUT0RPOiBzaW1wbGlmeSB0aGUgbmV4dCBzdGF0ZW1lbnQKCgogICAgYyA9IGMuY29uY2F0KHplcm9zKGUgLSBjLmxlbmd0aCArIDEgKyAoYy5sZW5ndGggPCBwcmVjaXNpb24gPyBwcmVjaXNpb24gLSBjLmxlbmd0aCA6IDApKSk7IC8vIHByZXBlbmQgemVyb3MKCiAgICBjID0gemVyb3MoLWUpLmNvbmNhdChjKTsKICAgIHZhciBkb3QgPSBlID4gMCA/IGUgOiAwOwoKICAgIGlmIChkb3QgPCBjLmxlbmd0aCAtIDEpIHsKICAgICAgYy5zcGxpY2UoZG90ICsgMSwgMCwgJy4nKTsKICAgIH0KCiAgICByZXR1cm4gcm91bmRlZC5zaWduICsgYy5qb2luKCcnKTsKICB9Cn0KLyoqCiAqIFJvdW5kIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIGEgbnVtYmVyICoKICogQHBhcmFtIHtTcGxpdFZhbHVlfSBzcGxpdCAgICAgICBBIHZhbHVlIHNwbGl0IHdpdGggLnNwbGl0TnVtYmVyKHZhbHVlKQogKiBAcGFyYW0ge251bWJlcn0gcHJlY2lzaW9uICBBIHBvc2l0aXZlIGludGVnZXIKICogQHJldHVybiB7U3BsaXRWYWx1ZX0KICogICAgICAgICAgICAgIFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgc2lnbiwgY29lZmZpY2llbnRzLCBhbmQgZXhwb25lbnQKICogICAgICAgICAgICAgIHdpdGggcm91bmRlZCBkaWdpdHMKICovCgpmdW5jdGlvbiByb3VuZERpZ2l0cyhzcGxpdCwgcHJlY2lzaW9uKSB7CiAgLy8gY3JlYXRlIGEgY2xvbmUKICB2YXIgcm91bmRlZCA9IHsKICAgIHNpZ246IHNwbGl0LnNpZ24sCiAgICBjb2VmZmljaWVudHM6IHNwbGl0LmNvZWZmaWNpZW50cywKICAgIGV4cG9uZW50OiBzcGxpdC5leHBvbmVudAogIH07CiAgdmFyIGMgPSByb3VuZGVkLmNvZWZmaWNpZW50czsgLy8gcHJlcGVuZCB6ZXJvcyBpZiBuZWVkZWQKCiAgd2hpbGUgKHByZWNpc2lvbiA8PSAwKSB7CiAgICBjLnVuc2hpZnQoMCk7CiAgICByb3VuZGVkLmV4cG9uZW50Kys7CiAgICBwcmVjaXNpb24rKzsKICB9CgogIGlmIChjLmxlbmd0aCA+IHByZWNpc2lvbikgewogICAgdmFyIHJlbW92ZWQgPSBjLnNwbGljZShwcmVjaXNpb24sIGMubGVuZ3RoIC0gcHJlY2lzaW9uKTsKCiAgICBpZiAocmVtb3ZlZFswXSA+PSA1KSB7CiAgICAgIHZhciBpID0gcHJlY2lzaW9uIC0gMTsKICAgICAgY1tpXSsrOwoKICAgICAgd2hpbGUgKGNbaV0gPT09IDEwKSB7CiAgICAgICAgYy5wb3AoKTsKCiAgICAgICAgaWYgKGkgPT09IDApIHsKICAgICAgICAgIGMudW5zaGlmdCgwKTsKICAgICAgICAgIHJvdW5kZWQuZXhwb25lbnQrKzsKICAgICAgICAgIGkrKzsKICAgICAgICB9CgogICAgICAgIGktLTsKICAgICAgICBjW2ldKys7CiAgICAgIH0KICAgIH0KICB9CgogIHJldHVybiByb3VuZGVkOwp9Ci8qKgogKiBDcmVhdGUgYW4gYXJyYXkgZmlsbGVkIHdpdGggemVyb3MuCiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGgKICogQHJldHVybiB7QXJyYXl9CiAqLwoKZnVuY3Rpb24gemVyb3MobGVuZ3RoKSB7CiAgdmFyIGFyciA9IFtdOwoKICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICBhcnIucHVzaCgwKTsKICB9CgogIHJldHVybiBhcnI7Cn0KLyoqCiAqIENvdW50IHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mIGEgbnVtYmVyLgogKgogKiBGb3IgZXhhbXBsZToKICogICAyLjM0IHJldHVybnMgMwogKiAgIDAuMDAzNCByZXR1cm5zIDIKICogICAxMjAuNWUrMzAgcmV0dXJucyA0CiAqCiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZQogKiBAcmV0dXJuIHtudW1iZXJ9IGRpZ2l0cyAgIE51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMKICovCgoKZnVuY3Rpb24gZGlnaXRzKHZhbHVlKSB7CiAgcmV0dXJuIHZhbHVlLnRvRXhwb25lbnRpYWwoKS5yZXBsYWNlKC9lLiokLywgJycpIC8vIHJlbW92ZSBleHBvbmVudGlhbCBub3RhdGlvbgogIC5yZXBsYWNlKC9eMFwuPzAqfFwuLywgJycpIC8vIHJlbW92ZSBkZWNpbWFsIHBvaW50IGFuZCBsZWFkaW5nIHplcm9zCiAgLmxlbmd0aDsKfQovKioKICogTWluaW11bSBudW1iZXIgYWRkZWQgdG8gb25lIHRoYXQgbWFrZXMgdGhlIHJlc3VsdCBkaWZmZXJlbnQgdGhhbiBvbmUKICovCgp2YXIgREJMX0VQU0lMT04gPSBOdW1iZXIuRVBTSUxPTiB8fCAyLjIyMDQ0NjA0OTI1MDMxMzA4MDg0NzI2MzMzNjE4MTZFLTE2OwovKioKICogQ29tcGFyZXMgdHdvIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuCiAqIEBwYXJhbSB7bnVtYmVyfSB4ICAgICAgICAgIEZpcnN0IHZhbHVlIHRvIGNvbXBhcmUKICogQHBhcmFtIHtudW1iZXJ9IHkgICAgICAgICAgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmUKICogQHBhcmFtIHtudW1iZXJ9IFtlcHNpbG9uXSAgVGhlIG1heGltdW0gcmVsYXRpdmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHkKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgZXBzaWxvbiBpcyB1bmRlZmluZWQgb3IgbnVsbCwgdGhlIGZ1bmN0aW9uIHdpbGwKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCB3aGV0aGVyIHggYW5kIHkgYXJlIGV4YWN0bHkgZXF1YWwuCiAqIEByZXR1cm4ge2Jvb2xlYW59IHdoZXRoZXIgdGhlIHR3byBudW1iZXJzIGFyZSBuZWFybHkgZXF1YWwKKi8KCmZ1bmN0aW9uIG5lYXJseUVxdWFsKHgsIHksIGVwc2lsb24pIHsKICAvLyBpZiBlcHNpbG9uIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0ZXN0IHdoZXRoZXIgeCBhbmQgeSBhcmUgZXhhY3RseSBlcXVhbAogIGlmIChlcHNpbG9uID09PSBudWxsIHx8IGVwc2lsb24gPT09IHVuZGVmaW5lZCkgewogICAgcmV0dXJuIHggPT09IHk7CiAgfQoKICBpZiAoeCA9PT0geSkgewogICAgcmV0dXJuIHRydWU7CiAgfSAvLyBOYU4KCgogIGlmIChpc05hTih4KSB8fCBpc05hTih5KSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0gLy8gYXQgdGhpcyBwb2ludCB4IGFuZCB5IHNob3VsZCBiZSBmaW5pdGUKCgogIGlmIChpc0Zpbml0ZSh4KSAmJiBpc0Zpbml0ZSh5KSkgewogICAgLy8gY2hlY2sgbnVtYmVycyBhcmUgdmVyeSBjbG9zZSwgbmVlZGVkIHdoZW4gY29tcGFyaW5nIG51bWJlcnMgbmVhciB6ZXJvCiAgICB2YXIgZGlmZiA9IE1hdGguYWJzKHggLSB5KTsKCiAgICBpZiAoZGlmZiA8IERCTF9FUFNJTE9OKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgLy8gdXNlIHJlbGF0aXZlIGVycm9yCiAgICAgIHJldHVybiBkaWZmIDw9IE1hdGgubWF4KE1hdGguYWJzKHgpLCBNYXRoLmFicyh5KSkgKiBlcHNpbG9uOwogICAgfQogIH0gLy8gSW5maW5pdGUgYW5kIE51bWJlciBvciBuZWdhdGl2ZSBJbmZpbml0ZSBhbmQgcG9zaXRpdmUgSW5maW5pdGUgY2FzZXMKCgogIHJldHVybiBmYWxzZTsKfQovKioKICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2NvcyBvZiBhIG51bWJlcgogKiBAcGFyYW0ge251bWJlcn0geAogKiBAcmV0dXJuIHtudW1iZXJ9CiAqLwoKdmFyIGFjb3NoID0gTWF0aC5hY29zaCB8fCBmdW5jdGlvbiAoeCkgewogIHJldHVybiBNYXRoLmxvZyhNYXRoLnNxcnQoeCAqIHggLSAxKSArIHgpOwp9Owp2YXIgYXNpbmggPSBNYXRoLmFzaW5oIHx8IGZ1bmN0aW9uICh4KSB7CiAgcmV0dXJuIE1hdGgubG9nKE1hdGguc3FydCh4ICogeCArIDEpICsgeCk7Cn07Ci8qKgogKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjdGFuZ2VudCBvZiBhIG51bWJlcgogKiBAcGFyYW0ge251bWJlcn0geAogKiBAcmV0dXJuIHtudW1iZXJ9CiAqLwoKdmFyIGF0YW5oID0gTWF0aC5hdGFuaCB8fCBmdW5jdGlvbiAoeCkgewogIHJldHVybiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSkgLyAyOwp9OwovKioKICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiBhIG51bWJlcgogKiBAcGFyYW0ge251bWJlcn0geAogKiBAcmV0dXJucyB7bnVtYmVyfQogKi8KCnZhciBjb3NoID0gTWF0aC5jb3NoIHx8IGZ1bmN0aW9uICh4KSB7CiAgcmV0dXJuIChNYXRoLmV4cCh4KSArIE1hdGguZXhwKC14KSkgLyAyOwp9OwovKioKICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgYSBudW1iZXIKICogQHBhcmFtIHtudW1iZXJ9IHgKICogQHJldHVybnMge251bWJlcn0KICovCgp2YXIgc2luaCA9IE1hdGguc2luaCB8fCBmdW5jdGlvbiAoeCkgewogIHJldHVybiAoTWF0aC5leHAoeCkgLSBNYXRoLmV4cCgteCkpIC8gMjsKfTsKLyoqCiAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIGEgbnVtYmVyCiAqIEBwYXJhbSB7bnVtYmVyfSB4CiAqIEByZXR1cm5zIHtudW1iZXJ9CiAqLwoKdmFyIHRhbmggPSBNYXRoLnRhbmggfHwgZnVuY3Rpb24gKHgpIHsKICB2YXIgZSA9IE1hdGguZXhwKDIgKiB4KTsKICByZXR1cm4gKGUgLSAxKSAvIChlICsgMSk7Cn07CgovKioqLyB9KSwKLyogNSAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoidXNlIHN0cmljdCI7CgovLyBFWFRFUk5BTCBNT0RVTEU6IC4vc3JjL3V0aWxzL2lzLmpzCnZhciBpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7CgovLyBFWFRFUk5BTCBNT0RVTEU6IC4vc3JjL3V0aWxzL251bWJlci5qcwp2YXIgbnVtYmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTsKCi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvdXRpbHMvb2JqZWN0LmpzCnZhciBvYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpOwoKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdXRpbHMvYmlnbnVtYmVyL2Zvcm1hdHRlci5qcwoKLyoqCiAqIENvbnZlcnQgYSBCaWdOdW1iZXIgdG8gYSBmb3JtYXR0ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgogKgogKiBTeW50YXg6CiAqCiAqICAgIGZvcm1hdCh2YWx1ZSkKICogICAgZm9ybWF0KHZhbHVlLCBvcHRpb25zKQogKiAgICBmb3JtYXQodmFsdWUsIHByZWNpc2lvbikKICogICAgZm9ybWF0KHZhbHVlLCBmbikKICoKICogV2hlcmU6CiAqCiAqICAgIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIGJlIGZvcm1hdHRlZAogKiAgICB7T2JqZWN0fSBvcHRpb25zIEFuIG9iamVjdCB3aXRoIGZvcm1hdHRpbmcgb3B0aW9ucy4gQXZhaWxhYmxlIG9wdGlvbnM6CiAqICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbm90YXRpb24KICogICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG5vdGF0aW9uLiBDaG9vc2UgZnJvbToKICogICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkJyAgICAgICAgICBBbHdheXMgdXNlIHJlZ3VsYXIgbnVtYmVyIG5vdGF0aW9uLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlICcxMjMuNDAnIGFuZCAnMTQwMDAwMDAnCiAqICAgICAgICAgICAgICAgICAgICAgICAgICdleHBvbmVudGlhbCcgICAgQWx3YXlzIHVzZSBleHBvbmVudGlhbCBub3RhdGlvbi4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSAnMS4yMzRlKzInIGFuZCAnMS40ZSs3JwogKiAgICAgICAgICAgICAgICAgICAgICAgICAnYXV0bycgKGRlZmF1bHQpIFJlZ3VsYXIgbnVtYmVyIG5vdGF0aW9uIGZvciBudW1iZXJzCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2aW5nIGFuIGFic29sdXRlIHZhbHVlIGJldHdlZW4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgbG93ZXJgIGFuZCBgdXBwZXJgIGJvdW5kcywgYW5kIHVzZXMKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudGlhbCBub3RhdGlvbiBlbHNld2hlcmUuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG93ZXIgYm91bmQgaXMgaW5jbHVkZWQsIHVwcGVyIGJvdW5kCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZXhjbHVkZWQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40JyBhbmQgJzEuNGU3Jy4KICogICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSBwcmVjaXNpb24gICBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDE2IHRvIHJvdW5kCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRpZ2l0cyBvZiB0aGUgbnVtYmVyLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb25zICdleHBvbmVudGlhbCcsCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZ2luZWVyaW5nJywgYW5kICdhdXRvJywKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcHJlY2lzaW9uYCBkZWZpbmVzIHRoZSB0b3RhbAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgcmV0dXJuZWQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gY2FzZSBvZiBub3RhdGlvbiAnZml4ZWQnLAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwcmVjaXNpb25gIGRlZmluZXMgdGhlIG51bWJlciBvZgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50IGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50LgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwcmVjaXNpb25gIGlzIHVuZGVmaW5lZCBieSBkZWZhdWx0LgogKiAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGxvd2VyRXhwICAgIEV4cG9uZW50IGRldGVybWluaW5nIHRoZSBsb3dlciBib3VuZGFyeQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmb3JtYXR0aW5nIGEgdmFsdWUgd2l0aCBhbiBleHBvbmVudAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYG5vdGF0aW9uPSdhdXRvYC4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IHZhbHVlIGlzIGAtM2AuCiAqICAgICAgICAgICAgICAgICAgICAge251bWJlcn0gdXBwZXJFeHAgICAgRXhwb25lbnQgZGV0ZXJtaW5pbmcgdGhlIHVwcGVyIGJvdW5kYXJ5CiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZvcm1hdHRpbmcgYSB2YWx1ZSB3aXRoIGFuIGV4cG9uZW50CiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBgbm90YXRpb249J2F1dG9gLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgdmFsdWUgaXMgYDVgLgogKiAgICB7RnVuY3Rpb259IGZuICAgIEEgY3VzdG9tIGZvcm1hdHRpbmcgZnVuY3Rpb24uIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZQogKiAgICAgICAgICAgICAgICAgICAgIGJ1aWx0LWluIG5vdGF0aW9ucy4gRnVuY3Rpb24gYGZuYCBpcyBjYWxsZWQgd2l0aCBgdmFsdWVgIGFzCiAqICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIGFuZCBtdXN0IHJldHVybiBhIHN0cmluZy4gSXMgdXNlZnVsIGZvciBleGFtcGxlIHRvCiAqICAgICAgICAgICAgICAgICAgICAgZm9ybWF0IGFsbCB2YWx1ZXMgaW5zaWRlIGEgbWF0cml4IGluIGEgcGFydGljdWxhciB3YXkuCiAqCiAqIEV4YW1wbGVzOgogKgogKiAgICBmb3JtYXQoNi40KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnNi40JwogKiAgICBmb3JtYXQoMTI0MDAwMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMS4yNGU2JwogKiAgICBmb3JtYXQoMS8zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMC4zMzMzMzMzMzMzMzMzMzMzJwogKiAgICBmb3JtYXQoMS8zLCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMC4zMzMnCiAqICAgIGZvcm1hdCgyMTM4NSwgMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICcyMTAwMCcKICogICAgZm9ybWF0KDEyZTgsIHtub3RhdGlvbjogJ2ZpeGVkJ30pICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAnMTIwMDAwMDAwMCcKICogICAgZm9ybWF0KDIuMywgICAge25vdGF0aW9uOiAnZml4ZWQnLCBwcmVjaXNpb246IDR9KSAgLy8gcmV0dXJucyAnMi4zMDAwJwogKiAgICBmb3JtYXQoNTIuOCwgICB7bm90YXRpb246ICdleHBvbmVudGlhbCd9KSAgICAgICAgICAvLyByZXR1cm5zICc1LjI4ZSsxJwogKiAgICBmb3JtYXQoMTI0MDAsICB7bm90YXRpb246ICdlbmdpbmVlcmluZyd9KSAgICAgICAgICAvLyByZXR1cm5zICcxMi40MDBlKzMnCiAqCiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB2YWx1ZQogKiBAcGFyYW0ge09iamVjdCB8IEZ1bmN0aW9uIHwgbnVtYmVyfSBbb3B0aW9uc10KICogQHJldHVybiB7c3RyaW5nfSBzdHIgVGhlIGZvcm1hdHRlZCB2YWx1ZQogKi8KCmZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSwgb3B0aW9ucykgewogIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykgewogICAgLy8gaGFuZGxlIGZvcm1hdCh2YWx1ZSwgZm4pCiAgICByZXR1cm4gb3B0aW9ucyh2YWx1ZSk7CiAgfSAvLyBoYW5kbGUgc3BlY2lhbCBjYXNlcwoKCiAgaWYgKCF2YWx1ZS5pc0Zpbml0ZSgpKSB7CiAgICByZXR1cm4gdmFsdWUuaXNOYU4oKSA/ICdOYU4nIDogdmFsdWUuZ3QoMCkgPyAnSW5maW5pdHknIDogJy1JbmZpbml0eSc7CiAgfSAvLyBkZWZhdWx0IHZhbHVlcyBmb3Igb3B0aW9ucwoKCiAgdmFyIG5vdGF0aW9uID0gJ2F1dG8nOwogIHZhciBwcmVjaXNpb247CgogIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHsKICAgIC8vIGRldGVybWluZSBub3RhdGlvbiBmcm9tIG9wdGlvbnMKICAgIGlmIChvcHRpb25zLm5vdGF0aW9uKSB7CiAgICAgIG5vdGF0aW9uID0gb3B0aW9ucy5ub3RhdGlvbjsKICAgIH0gLy8gZGV0ZXJtaW5lIHByZWNpc2lvbiBmcm9tIG9wdGlvbnMKCgogICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJykgewogICAgICBwcmVjaXNpb24gPSBvcHRpb25zOwogICAgfSBlbHNlIGlmIChvcHRpb25zLnByZWNpc2lvbikgewogICAgICBwcmVjaXNpb24gPSBvcHRpb25zLnByZWNpc2lvbjsKICAgIH0KICB9IC8vIGhhbmRsZSB0aGUgdmFyaW91cyBub3RhdGlvbnMKCgogIHN3aXRjaCAobm90YXRpb24pIHsKICAgIGNhc2UgJ2ZpeGVkJzoKICAgICAgcmV0dXJuIHRvRml4ZWQodmFsdWUsIHByZWNpc2lvbik7CgogICAgY2FzZSAnZXhwb25lbnRpYWwnOgogICAgICByZXR1cm4gdG9FeHBvbmVudGlhbCh2YWx1ZSwgcHJlY2lzaW9uKTsKCiAgICBjYXNlICdlbmdpbmVlcmluZyc6CiAgICAgIHJldHVybiB0b0VuZ2luZWVyaW5nKHZhbHVlLCBwcmVjaXNpb24pOwoKICAgIGNhc2UgJ2F1dG8nOgogICAgICB7CiAgICAgICAgLy8gVE9ETzogY2xlYW4gdXAgc29tZSBkYXkuIERlcHJlY2F0ZWQgc2luY2U6IDIwMTgtMDEtMjQKICAgICAgICAvLyBAZGVwcmVjYXRlZCB1cHBlciBhbmQgbG93ZXIgYXJlIHJlcGxhY2VkIHdpdGggdXBwZXJFeHAgYW5kIGxvd2VyRXhwIHNpbmNlIHY0LjAuMAogICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXhwb25lbnRpYWwgJiYgKG9wdGlvbnMuZXhwb25lbnRpYWwubG93ZXIgIT09IHVuZGVmaW5lZCB8fCBvcHRpb25zLmV4cG9uZW50aWFsLnVwcGVyICE9PSB1bmRlZmluZWQpKSB7CiAgICAgICAgICB2YXIgZml4ZWRPcHRpb25zID0gT2JqZWN0KG9iamVjdFsiaSIgLyogbWFwT2JqZWN0ICovXSkob3B0aW9ucywgZnVuY3Rpb24gKHgpIHsKICAgICAgICAgICAgcmV0dXJuIHg7CiAgICAgICAgICB9KTsKICAgICAgICAgIGZpeGVkT3B0aW9ucy5leHBvbmVudGlhbCA9IHVuZGVmaW5lZDsKCiAgICAgICAgICBpZiAob3B0aW9ucy5leHBvbmVudGlhbC5sb3dlciAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGZpeGVkT3B0aW9ucy5sb3dlckV4cCA9IE1hdGgucm91bmQoTWF0aC5sb2cob3B0aW9ucy5leHBvbmVudGlhbC5sb3dlcikgLyBNYXRoLkxOMTApOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChvcHRpb25zLmV4cG9uZW50aWFsLnVwcGVyICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgZml4ZWRPcHRpb25zLnVwcGVyRXhwID0gTWF0aC5yb3VuZChNYXRoLmxvZyhvcHRpb25zLmV4cG9uZW50aWFsLnVwcGVyKSAvIE1hdGguTE4xMCk7CiAgICAgICAgICB9CgogICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiBGb3JtYXR0aW5nIG9wdGlvbnMgZXhwb25lbnRpYWwubG93ZXIgYW5kIGV4cG9uZW50aWFsLnVwcGVyICcgKyAnKG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWUpICcgKyAnYXJlIHJlcGxhY2VkIHdpdGggZXhwb25lbnRpYWwubG93ZXJFeHAgYW5kIGV4cG9uZW50aWFsLnVwcGVyRXhwICcgKyAnKG1pbmltdW0gYW5kIG1heGltdW0gZXhwb25lbnQpIHNpbmNlIHZlcnNpb24gNC4wLjAuICcgKyAnUmVwbGFjZSAnICsgSlNPTi5zdHJpbmdpZnkob3B0aW9ucykgKyAnIHdpdGggJyArIEpTT04uc3RyaW5naWZ5KGZpeGVkT3B0aW9ucykpOwogICAgICAgICAgcmV0dXJuIGZvcm1hdCh2YWx1ZSwgZml4ZWRPcHRpb25zKTsKICAgICAgICB9IC8vIGRldGVybWluZSBsb3dlciBhbmQgdXBwZXIgYm91bmQgZm9yIGV4cG9uZW50aWFsIG5vdGF0aW9uLgogICAgICAgIC8vIFRPRE86IGltcGxlbWVudCBzdXBwb3J0IGZvciB1cHBlciBhbmQgbG93ZXIgdG8gYmUgQmlnTnVtYmVycyB0aGVtc2VsdmVzCgoKICAgICAgICB2YXIgbG93ZXJFeHAgPSBvcHRpb25zICYmIG9wdGlvbnMubG93ZXJFeHAgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubG93ZXJFeHAgOiAtMzsKICAgICAgICB2YXIgdXBwZXJFeHAgPSBvcHRpb25zICYmIG9wdGlvbnMudXBwZXJFeHAgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMudXBwZXJFeHAgOiA1OyAvLyBoYW5kbGUgc3BlY2lhbCBjYXNlIHplcm8KCiAgICAgICAgaWYgKHZhbHVlLmlzWmVybygpKSByZXR1cm4gJzAnOyAvLyBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdG8gb3V0cHV0IGV4cG9uZW50aWFsIG5vdGF0aW9uCgogICAgICAgIHZhciBzdHI7CiAgICAgICAgdmFyIHJvdW5kZWQgPSB2YWx1ZS50b1NpZ25pZmljYW50RGlnaXRzKHByZWNpc2lvbik7CiAgICAgICAgdmFyIGV4cCA9IHJvdW5kZWQuZTsKCiAgICAgICAgaWYgKGV4cCA+PSBsb3dlckV4cCAmJiBleHAgPCB1cHBlckV4cCkgewogICAgICAgICAgLy8gbm9ybWFsIG51bWJlciBub3RhdGlvbgogICAgICAgICAgc3RyID0gcm91bmRlZC50b0ZpeGVkKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIGV4cG9uZW50aWFsIG5vdGF0aW9uCiAgICAgICAgICBzdHIgPSB0b0V4cG9uZW50aWFsKHZhbHVlLCBwcmVjaXNpb24pOwogICAgICAgIH0gLy8gcmVtb3ZlIHRyYWlsaW5nIHplcm9zIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50CgoKICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoLygoXC5cZCo/KSgwKykpKCR8ZSkvLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZGlnaXRzID0gYXJndW1lbnRzWzJdOwogICAgICAgICAgdmFyIGUgPSBhcmd1bWVudHNbNF07CiAgICAgICAgICByZXR1cm4gZGlnaXRzICE9PSAnLicgPyBkaWdpdHMgKyBlIDogZTsKICAgICAgICB9KTsKICAgICAgfQoKICAgIGRlZmF1bHQ6CiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBub3RhdGlvbiAiJyArIG5vdGF0aW9uICsgJyIuICcgKyAnQ2hvb3NlICJhdXRvIiwgImV4cG9uZW50aWFsIiwgb3IgImZpeGVkIi4nKTsKICB9Cn0KLyoqCiAqIEZvcm1hdCBhIEJpZ051bWJlciBpbiBlbmdpbmVlcmluZyBub3RhdGlvbi4gTGlrZSAnMS4yM2UrNicsICcyLjNlKzAnLCAnMy41MDBlLTMnCiAqIEBwYXJhbSB7QmlnTnVtYmVyIHwgc3RyaW5nfSB2YWx1ZQogKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbl0gICAgICAgIE9wdGlvbmFsIG51bWJlciBvZiBzaWduaWZpY2FudCBmaWd1cmVzIHRvIHJldHVybi4KICovCgpmdW5jdGlvbiB0b0VuZ2luZWVyaW5nKHZhbHVlLCBwcmVjaXNpb24pIHsKICAvLyBmaW5kIG5lYXJlc3QgbG93ZXIgbXVsdGlwbGUgb2YgMyBmb3IgZXhwb25lbnQKICB2YXIgZSA9IHZhbHVlLmU7CiAgdmFyIG5ld0V4cCA9IGUgJSAzID09PSAwID8gZSA6IGUgPCAwID8gZSAtIDMgLSBlICUgMyA6IGUgLSBlICUgMzsgLy8gZmluZCBkaWZmZXJlbmNlIGluIGV4cG9uZW50cywgYW5kIGNhbGN1bGF0ZSB0aGUgdmFsdWUgd2l0aG91dCBleHBvbmVudAoKICB2YXIgdmFsdWVXaXRob3V0RXhwID0gdmFsdWUubXVsKE1hdGgucG93KDEwLCAtbmV3RXhwKSk7CiAgdmFyIHZhbHVlU3RyID0gdmFsdWVXaXRob3V0RXhwLnRvUHJlY2lzaW9uKHByZWNpc2lvbik7CgogIGlmICh2YWx1ZVN0ci5pbmRleE9mKCdlJykgIT09IC0xKSB7CiAgICB2YWx1ZVN0ciA9IHZhbHVlV2l0aG91dEV4cC50b1N0cmluZygpOwogIH0KCiAgcmV0dXJuIHZhbHVlU3RyICsgJ2UnICsgKGUgPj0gMCA/ICcrJyA6ICcnKSArIG5ld0V4cC50b1N0cmluZygpOwp9Ci8qKgogKiBGb3JtYXQgYSBudW1iZXIgaW4gZXhwb25lbnRpYWwgbm90YXRpb24uIExpa2UgJzEuMjNlKzUnLCAnMi4zZSswJywgJzMuNTAwZS0zJwogKiBAcGFyYW0ge0JpZ051bWJlcn0gdmFsdWUKICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb25dICBOdW1iZXIgb2YgZGlnaXRzIGluIGZvcm1hdHRlZCBvdXRwdXQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgbWF4aW11bSBhdmFpbGFibGUgZGlnaXRzCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdXNlZC4KICogQHJldHVybnMge3N0cmluZ30gc3RyCiAqLwoKZnVuY3Rpb24gdG9FeHBvbmVudGlhbCh2YWx1ZSwgcHJlY2lzaW9uKSB7CiAgaWYgKHByZWNpc2lvbiAhPT0gdW5kZWZpbmVkKSB7CiAgICByZXR1cm4gdmFsdWUudG9FeHBvbmVudGlhbChwcmVjaXNpb24gLSAxKTsgLy8gTm90ZSB0aGUgb2Zmc2V0IG9mIG9uZQogIH0gZWxzZSB7CiAgICByZXR1cm4gdmFsdWUudG9FeHBvbmVudGlhbCgpOwogIH0KfQovKioKICogRm9ybWF0IGEgbnVtYmVyIHdpdGggZml4ZWQgbm90YXRpb24uCiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB2YWx1ZQogKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj11bmRlZmluZWRdIE9wdGlvbmFsIG51bWJlciBvZiBkZWNpbWFscyBhZnRlciB0aGUKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNpbWFsIHBvaW50LiBVbmRlZmluZWQgYnkgZGVmYXVsdC4KICovCgpmdW5jdGlvbiB0b0ZpeGVkKHZhbHVlLCBwcmVjaXNpb24pIHsKICByZXR1cm4gdmFsdWUudG9GaXhlZChwcmVjaXNpb24pOwp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3V0aWxzL3N0cmluZy5qcwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJiIiwgZnVuY3Rpb24oKSB7IHJldHVybiBlbmRzV2l0aDsgfSk7Ci8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0cmluZ19mb3JtYXQ7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdHJpbmdpZnk7IH0pOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdHJpbmdfZXNjYXBlOyB9KTsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY29tcGFyZVRleHQ7IH0pOwpmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyAiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2YiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAic3ltYm9sIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gInN5bWJvbCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH0KCgoKCi8qKgogKiBDaGVjayBpZiBhIHRleHQgZW5kcyB3aXRoIGEgY2VydGFpbiBzdHJpbmcuCiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0CiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2gKICovCgpmdW5jdGlvbiBlbmRzV2l0aCh0ZXh0LCBzZWFyY2gpIHsKICB2YXIgc3RhcnQgPSB0ZXh0Lmxlbmd0aCAtIHNlYXJjaC5sZW5ndGg7CiAgdmFyIGVuZCA9IHRleHQubGVuZ3RoOwogIHJldHVybiB0ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kKSA9PT0gc2VhcmNoOwp9Ci8qKgogKiBGb3JtYXQgYSB2YWx1ZSBvZiBhbnkgdHlwZSBpbnRvIGEgc3RyaW5nLgogKgogKiBVc2FnZToKICogICAgIG1hdGguZm9ybWF0KHZhbHVlKQogKiAgICAgbWF0aC5mb3JtYXQodmFsdWUsIHByZWNpc2lvbikKICoKICogV2hlbiB2YWx1ZSBpcyBhIGZ1bmN0aW9uOgogKgogKiAtIFdoZW4gdGhlIGZ1bmN0aW9uIGhhcyBhIHByb3BlcnR5IGBzeW50YXhgLCBpdCByZXR1cm5zIHRoaXMKICogICBzeW50YXggZGVzY3JpcHRpb24uCiAqIC0gSW4gb3RoZXIgY2FzZXMsIGEgc3RyaW5nIGAnZnVuY3Rpb24nYCBpcyByZXR1cm5lZC4KICoKICogV2hlbiBgdmFsdWVgIGlzIGFuIE9iamVjdDoKICoKICogLSBXaGVuIHRoZSBvYmplY3QgY29udGFpbnMgYSBwcm9wZXJ0eSBgZm9ybWF0YCBiZWluZyBhIGZ1bmN0aW9uLCB0aGlzCiAqICAgZnVuY3Rpb24gaXMgaW52b2tlZCBhcyBgdmFsdWUuZm9ybWF0KG9wdGlvbnMpYCBhbmQgdGhlIHJlc3VsdCBpcyByZXR1cm5lZC4KICogLSBXaGVuIHRoZSBvYmplY3QgaGFzIGl0cyBvd24gYHRvU3RyaW5nYCBtZXRob2QsIHRoaXMgbWV0aG9kIGlzIGludm9rZWQKICogICBhbmQgdGhlIHJlc3VsdCBpcyByZXR1cm5lZC4KICogLSBJbiBvdGhlciBjYXNlcyB0aGUgZnVuY3Rpb24gd2lsbCBsb29wIG92ZXIgYWxsIG9iamVjdCBwcm9wZXJ0aWVzIGFuZAogKiAgIHJldHVybiBKU09OIG9iamVjdCBub3RhdGlvbiBsaWtlICd7ImEiOiAyLCAiYiI6IDN9Jy4KICoKICogRXhhbXBsZSB1c2FnZToKICogICAgIG1hdGguZm9ybWF0KDIvNykgICAgICAgICAgICAgICAgLy8gJzAuMjg1NzE0Mjg1NzE0Mjg1NycKICogICAgIG1hdGguZm9ybWF0KG1hdGgucGksIDMpICAgICAgICAgLy8gJzMuMTQnCiAqICAgICBtYXRoLmZvcm1hdChuZXcgQ29tcGxleCgyLCAzKSkgIC8vICcyICsgM2knCiAqICAgICBtYXRoLmZvcm1hdCgnaGVsbG8nKSAgICAgICAgICAgIC8vICciaGVsbG8iJwogKgogKiBAcGFyYW0geyp9IHZhbHVlICAgICAgICAgICAgIFZhbHVlIHRvIGJlIHN0cmluZ2lmaWVkCiAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWUKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGUKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLgogKiBAcmV0dXJuIHtzdHJpbmd9IHN0cgogKi8KCmZ1bmN0aW9uIHN0cmluZ19mb3JtYXQodmFsdWUsIG9wdGlvbnMpIHsKICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgewogICAgcmV0dXJuIE9iamVjdChudW1iZXJbImgiIC8qIGZvcm1hdCAqL10pKHZhbHVlLCBvcHRpb25zKTsKICB9CgogIGlmIChPYmplY3QoaXNbImUiIC8qIGlzQmlnTnVtYmVyICovXSkodmFsdWUpKSB7CiAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCBvcHRpb25zKTsKICB9IC8vIG5vdGU6IHdlIHVzZSB1bnNhZmUgZHVjay10eXBpbmcgaGVyZSB0byBjaGVjayBmb3IgRnJhY3Rpb25zLCB0aGlzIGlzCiAgLy8gb2sgaGVyZSBzaW5jZSB3ZSdyZSBvbmx5IGludm9raW5nIHRvU3RyaW5nIG9yIGNvbmNhdGVuYXRpbmcgaXRzIHZhbHVlcwoKCiAgaWYgKGxvb2tzTGlrZUZyYWN0aW9uKHZhbHVlKSkgewogICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuZnJhY3Rpb24gIT09ICdkZWNpbWFsJykgewogICAgICAvLyBvdXRwdXQgYXMgcmF0aW8sIGxpa2UgJzEvMycKICAgICAgcmV0dXJuIHZhbHVlLnMgKiB2YWx1ZS5uICsgJy8nICsgdmFsdWUuZDsKICAgIH0gZWxzZSB7CiAgICAgIC8vIG91dHB1dCBhcyBkZWNpbWFsLCBsaWtlICcwLigzKScKICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7CiAgICB9CiAgfQoKICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHsKICAgIHJldHVybiBmb3JtYXRBcnJheSh2YWx1ZSwgb3B0aW9ucyk7CiAgfQoKICBpZiAoT2JqZWN0KGlzWyJJIiAvKiBpc1N0cmluZyAqL10pKHZhbHVlKSkgewogICAgcmV0dXJuICciJyArIHZhbHVlICsgJyInOwogIH0KCiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykgewogICAgcmV0dXJuIHZhbHVlLnN5bnRheCA/IFN0cmluZyh2YWx1ZS5zeW50YXgpIDogJ2Z1bmN0aW9uJzsKICB9CgogIGlmICh2YWx1ZSAmJiBfdHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcpIHsKICAgIGlmICh0eXBlb2YgdmFsdWUuZm9ybWF0ID09PSAnZnVuY3Rpb24nKSB7CiAgICAgIHJldHVybiB2YWx1ZS5mb3JtYXQob3B0aW9ucyk7CiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLnRvU3RyaW5nKG9wdGlvbnMpICE9PSB7fS50b1N0cmluZygpKSB7CiAgICAgIC8vIHRoaXMgb2JqZWN0IGhhcyBhIG5vbi1uYXRpdmUgdG9TdHJpbmcgbWV0aG9kLCB1c2UgdGhhdCBvbmUKICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKG9wdGlvbnMpOwogICAgfSBlbHNlIHsKICAgICAgdmFyIGVudHJpZXMgPSBPYmplY3Qua2V5cyh2YWx1ZSkubWFwKGZ1bmN0aW9uIChrZXkpIHsKICAgICAgICByZXR1cm4gJyInICsga2V5ICsgJyI6ICcgKyBzdHJpbmdfZm9ybWF0KHZhbHVlW2tleV0sIG9wdGlvbnMpOwogICAgICB9KTsKICAgICAgcmV0dXJuICd7JyArIGVudHJpZXMuam9pbignLCAnKSArICd9JzsKICAgIH0KICB9CgogIHJldHVybiBTdHJpbmcodmFsdWUpOwp9Ci8qKgogKiBTdHJpbmdpZnkgYSB2YWx1ZSBpbnRvIGEgc3RyaW5nIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMuCiAqIFVuZXNjYXBlZCBkb3VibGUgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcyBpbnNpZGUgdGhlIHZhbHVlIGFyZSBlc2NhcGVkLgogKiBAcGFyYW0geyp9IHZhbHVlCiAqIEByZXR1cm4ge3N0cmluZ30KICovCgpmdW5jdGlvbiBzdHJpbmdpZnkodmFsdWUpIHsKICB2YXIgdGV4dCA9IFN0cmluZyh2YWx1ZSk7CiAgdmFyIGVzY2FwZWQgPSAnJzsKICB2YXIgaSA9IDA7CgogIHdoaWxlIChpIDwgdGV4dC5sZW5ndGgpIHsKICAgIHZhciBjID0gdGV4dC5jaGFyQXQoaSk7CgogICAgaWYgKGMgPT09ICdcXCcpIHsKICAgICAgZXNjYXBlZCArPSBjOwogICAgICBpKys7CiAgICAgIGMgPSB0ZXh0LmNoYXJBdChpKTsKCiAgICAgIGlmIChjID09PSAnJyB8fCAnIlxcL2JmbnJ0dScuaW5kZXhPZihjKSA9PT0gLTEpIHsKICAgICAgICBlc2NhcGVkICs9ICdcXCc7IC8vIG5vIHZhbGlkIGVzY2FwZSBjaGFyYWN0ZXIgLT4gZXNjYXBlIGl0CiAgICAgIH0KCiAgICAgIGVzY2FwZWQgKz0gYzsKICAgIH0gZWxzZSBpZiAoYyA9PT0gJyInKSB7CiAgICAgIGVzY2FwZWQgKz0gJ1xcIic7CiAgICB9IGVsc2UgewogICAgICBlc2NhcGVkICs9IGM7CiAgICB9CgogICAgaSsrOwogIH0KCiAgcmV0dXJuICciJyArIGVzY2FwZWQgKyAnIic7Cn0KLyoqCiAqIEVzY2FwZSBzcGVjaWFsIEhUTUwgY2hhcmFjdGVycwogKiBAcGFyYW0geyp9IHZhbHVlCiAqIEByZXR1cm4ge3N0cmluZ30KICovCgpmdW5jdGlvbiBzdHJpbmdfZXNjYXBlKHZhbHVlKSB7CiAgdmFyIHRleHQgPSBTdHJpbmcodmFsdWUpOwogIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvIi9nLCAnJnF1b3Q7JykucmVwbGFjZSgvJy9nLCAnJiMzOTsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpOwogIHJldHVybiB0ZXh0Owp9Ci8qKgogKiBSZWN1cnNpdmVseSBmb3JtYXQgYW4gbi1kaW1lbnNpb25hbCBtYXRyaXgKICogRXhhbXBsZSBvdXRwdXQ6ICJbWzEsIDJdLCBbMywgNF1dIgogKiBAcGFyYW0ge0FycmF5fSBhcnJheQogKiBAcGFyYW0ge09iamVjdCB8IG51bWJlciB8IEZ1bmN0aW9ufSBbb3B0aW9uc10gIEZvcm1hdHRpbmcgb3B0aW9ucy4gU2VlCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliL3V0aWxzL251bWJlcjpmb3JtYXQgZm9yIGEKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiBvZiB0aGUgYXZhaWxhYmxlCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy4KICogQHJldHVybnMge3N0cmluZ30gc3RyCiAqLwoKZnVuY3Rpb24gZm9ybWF0QXJyYXkoYXJyYXksIG9wdGlvbnMpIHsKICBpZiAoQXJyYXkuaXNBcnJheShhcnJheSkpIHsKICAgIHZhciBzdHIgPSAnWyc7CiAgICB2YXIgbGVuID0gYXJyYXkubGVuZ3RoOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgaWYgKGkgIT09IDApIHsKICAgICAgICBzdHIgKz0gJywgJzsKICAgICAgfQoKICAgICAgc3RyICs9IGZvcm1hdEFycmF5KGFycmF5W2ldLCBvcHRpb25zKTsKICAgIH0KCiAgICBzdHIgKz0gJ10nOwogICAgcmV0dXJuIHN0cjsKICB9IGVsc2UgewogICAgcmV0dXJuIHN0cmluZ19mb3JtYXQoYXJyYXksIG9wdGlvbnMpOwogIH0KfQovKioKICogQ2hlY2sgd2hldGhlciBhIHZhbHVlIGxvb2tzIGxpa2UgYSBGcmFjdGlvbiAodW5zYWZlIGR1Y2stdHlwZSBjaGVjaykKICogQHBhcmFtIHsqfSB2YWx1ZQogKiBAcmV0dXJuIHtib29sZWFufQogKi8KCgpmdW5jdGlvbiBsb29rc0xpa2VGcmFjdGlvbih2YWx1ZSkgewogIHJldHVybiB2YWx1ZSAmJiBfdHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbHVlLnMgPT09ICdudW1iZXInICYmIHR5cGVvZiB2YWx1ZS5uID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmFsdWUuZCA9PT0gJ251bWJlcicgfHwgZmFsc2U7Cn0KLyoqCiAqIENvbXBhcmUgdHdvIHN0cmluZ3MKICogQHBhcmFtIHtzdHJpbmd9IHgKICogQHBhcmFtIHtzdHJpbmd9IHkKICogQHJldHVybnMge251bWJlcn0KICovCgoKZnVuY3Rpb24gY29tcGFyZVRleHQoeCwgeSkgewogIC8vIHdlIGRvbid0IHdhbnQgdG8gY29udmVydCBudW1iZXJzIHRvIHN0cmluZywgb25seSBhY2NlcHQgc3RyaW5nIGlucHV0CiAgaWYgKCFPYmplY3QoaXNbIkkiIC8qIGlzU3RyaW5nICovXSkoeCkpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiBjb21wYXJlVGV4dCAnICsgJyhleHBlY3RlZDogc3RyaW5nIG9yIEFycmF5IG9yIE1hdHJpeCwgYWN0dWFsOiAnICsgT2JqZWN0KGlzWyJNIiAvKiB0eXBlT2YgKi9dKSh4KSArICcsIGluZGV4OiAwKScpOwogIH0KCiAgaWYgKCFPYmplY3QoaXNbIkkiIC8qIGlzU3RyaW5nICovXSkoeSkpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiBjb21wYXJlVGV4dCAnICsgJyhleHBlY3RlZDogc3RyaW5nIG9yIEFycmF5IG9yIE1hdHJpeCwgYWN0dWFsOiAnICsgT2JqZWN0KGlzWyJNIiAvKiB0eXBlT2YgKi9dKSh5KSArICcsIGluZGV4OiAxKScpOwogIH0KCiAgcmV0dXJuIHggPT09IHkgPyAwIDogeCA+IHkgPyAxIDogLTE7Cn0KCi8qKiovIH0pLAovKiA2ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRGltZW5zaW9uRXJyb3I7IH0pOwovKioKICogQ3JlYXRlIGEgcmFuZ2UgZXJyb3Igd2l0aCB0aGUgbWVzc2FnZToKICogICAgICdEaW1lbnNpb24gbWlzbWF0Y2ggKDxhY3R1YWwgc2l6ZT4gIT0gPGV4cGVjdGVkIHNpemU+KScKICogQHBhcmFtIHtudW1iZXIgfCBudW1iZXJbXX0gYWN0dWFsICAgICAgICBUaGUgYWN0dWFsIHNpemUKICogQHBhcmFtIHtudW1iZXIgfCBudW1iZXJbXX0gZXhwZWN0ZWQgICAgICBUaGUgZXhwZWN0ZWQgc2l6ZQogKiBAcGFyYW0ge3N0cmluZ30gW3JlbGF0aW9uPSchPSddICAgICAgICAgIE9wdGlvbmFsIHJlbGF0aW9uIGJldHdlZW4gYWN0dWFsCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGV4cGVjdGVkIHNpemU6ICchPScsICc8JywgZXRjLgogKiBAZXh0ZW5kcyBSYW5nZUVycm9yCiAqLwpmdW5jdGlvbiBEaW1lbnNpb25FcnJvcihhY3R1YWwsIGV4cGVjdGVkLCByZWxhdGlvbikgewogIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEaW1lbnNpb25FcnJvcikpIHsKICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7CiAgfQoKICB0aGlzLmFjdHVhbCA9IGFjdHVhbDsKICB0aGlzLmV4cGVjdGVkID0gZXhwZWN0ZWQ7CiAgdGhpcy5yZWxhdGlvbiA9IHJlbGF0aW9uOwogIHRoaXMubWVzc2FnZSA9ICdEaW1lbnNpb24gbWlzbWF0Y2ggKCcgKyAoQXJyYXkuaXNBcnJheShhY3R1YWwpID8gJ1snICsgYWN0dWFsLmpvaW4oJywgJykgKyAnXScgOiBhY3R1YWwpICsgJyAnICsgKHRoaXMucmVsYXRpb24gfHwgJyE9JykgKyAnICcgKyAoQXJyYXkuaXNBcnJheShleHBlY3RlZCkgPyAnWycgKyBleHBlY3RlZC5qb2luKCcsICcpICsgJ10nIDogZXhwZWN0ZWQpICsgJyknOwogIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjazsKfQpEaW1lbnNpb25FcnJvci5wcm90b3R5cGUgPSBuZXcgUmFuZ2VFcnJvcigpOwpEaW1lbnNpb25FcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSYW5nZUVycm9yOwpEaW1lbnNpb25FcnJvci5wcm90b3R5cGUubmFtZSA9ICdEaW1lbnNpb25FcnJvcic7CkRpbWVuc2lvbkVycm9yLnByb3RvdHlwZS5pc0RpbWVuc2lvbkVycm9yID0gdHJ1ZTsKCi8qKiovIH0pLAovKiA3ICovLAovKiA4ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gd2Fybk9uY2U7IH0pOwovKioKICogTG9nIGEgY29uc29sZS53YXJuIG1lc3NhZ2Ugb25seSBvbmNlCiAqLwp2YXIgd2Fybk9uY2UgPSBmdW5jdGlvbiAoKSB7CiAgdmFyIG1lc3NhZ2VzID0ge307CiAgcmV0dXJuIGZ1bmN0aW9uIHdhcm5PbmNlKCkgewogICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07CiAgICB9CgogICAgdmFyIG1lc3NhZ2UgPSBhcmdzLmpvaW4oJywgJyk7CgogICAgaWYgKCFtZXNzYWdlc1ttZXNzYWdlXSkgewogICAgICB2YXIgX2NvbnNvbGU7CgogICAgICBtZXNzYWdlc1ttZXNzYWdlXSA9IHRydWU7CgogICAgICAoX2NvbnNvbGUgPSBjb25zb2xlKS53YXJuLmFwcGx5KF9jb25zb2xlLCBbJ1dhcm5pbmc6J10uY29uY2F0KGFyZ3MpKTsKICAgIH0KICB9Owp9KCk7CgovKioqLyB9KSwKLyogOSAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7Cgp2YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXywgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187LyoqCiAqIEBsaWNlbnNlIENvbXBsZXguanMgdjIuMC4xMSAxMS8wMi8yMDE2CiAqCiAqIENvcHlyaWdodCAoYykgMjAxNiwgUm9iZXJ0IEVpc2VsZSAocm9iZXJ0QHhhcmcub3JnKQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICoqLwoKLyoqCiAqCiAqIFRoaXMgY2xhc3MgYWxsb3dzIHRoZSBtYW5pcHVsYXRpb24gb2YgY29tcGxleCBudW1iZXJzLgogKiBZb3UgY2FuIHBhc3MgYSBjb21wbGV4IG51bWJlciBpbiBkaWZmZXJlbnQgZm9ybWF0cy4gRWl0aGVyIGFzIG9iamVjdCwgZG91YmxlLCBzdHJpbmcgb3IgdHdvIGludGVnZXIgcGFyYW1ldGVycy4KICoKICogT2JqZWN0IGZvcm0KICogeyByZTogPHJlYWw+LCBpbTogPGltYWdpbmFyeT4gfQogKiB7IGFyZzogPGFuZ2xlPiwgYWJzOiA8cmFkaXVzPiB9CiAqIHsgcGhpOiA8YW5nbGU+LCByOiA8cmFkaXVzPiB9CiAqCiAqIEFycmF5IC8gVmVjdG9yIGZvcm0KICogWyByZWFsLCBpbWFnaW5hcnkgXQogKgogKiBEb3VibGUgZm9ybQogKiA5OS4zIC0gU2luZ2xlIGRvdWJsZSB2YWx1ZQogKgogKiBTdHJpbmcgZm9ybQogKiAnMjMuMTMzNycgLSBTaW1wbGUgcmVhbCBudW1iZXIKICogJzE1KzNpJyAtIGEgc2ltcGxlIGNvbXBsZXggbnVtYmVyCiAqICczLWknIC0gYSBzaW1wbGUgY29tcGxleCBudW1iZXIKICoKICogRXhhbXBsZToKICoKICogdmFyIGMgPSBuZXcgQ29tcGxleCgnOTkuMys4aScpOwogKiBjLm11bCh7cjogMywgaTogOX0pLmRpdig0LjkpLnN1YigzLCAyKTsKICoKICovCgooZnVuY3Rpb24ocm9vdCkgewoKICAndXNlIHN0cmljdCc7CgogIHZhciBjb3NoID0gZnVuY3Rpb24oeCkgewogICAgcmV0dXJuIChNYXRoLmV4cCh4KSArIE1hdGguZXhwKC14KSkgKiAwLjU7CiAgfTsKCiAgdmFyIHNpbmggPSBmdW5jdGlvbih4KSB7CiAgICByZXR1cm4gKE1hdGguZXhwKHgpIC0gTWF0aC5leHAoLXgpKSAqIDAuNTsKICB9OwoKICAvKioKICAgKiBDYWxjdWxhdGVzIGNvcyh4KSAtIDEgdXNpbmcgVGF5bG9yIHNlcmllcyBpZiB4IGlzIHNtYWxsLgogICAqCiAgICogQHBhcmFtIHtudW1iZXJ9IHgKICAgKiBAcmV0dXJucyB7bnVtYmVyfSBjb3MoeCkgLSAxCiAgICovCgogIHZhciBjb3NtMSA9IGZ1bmN0aW9uKHgpIHsKICAgIHZhciBsaW1pdCA9IE1hdGguUEkvNDsKICAgIGlmICh4IDwgLWxpbWl0IHx8IHggPiBsaW1pdCkgewogICAgICByZXR1cm4gKE1hdGguY29zKHgpIC0gMS4wKTsKICAgIH0KCiAgICB2YXIgeHggPSB4ICogeDsKICAgIHJldHVybiB4eCAqCiAgICAgICgtMC41ICsgeHggKgogICAgICAgICgxLzI0ICsgeHggKgogICAgICAgICAgKC0xLzcyMCArIHh4ICoKICAgICAgICAgICAgKDEvNDAzMjAgKyB4eCAqCiAgICAgICAgICAgICAgKC0xLzM2Mjg4MDAgKyB4eCAqCiAgICAgICAgICAgICAgICAoMS80NzkwMDE0NjAwICsgeHggKgogICAgICAgICAgICAgICAgICAoLTEvODcxNzgyOTEyMDAgKyB4eCAqCiAgICAgICAgICAgICAgICAgICAgKDEvMjA5MjI3ODk4ODgwMDApCiAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICApCiAgICAgICAgICAgICkKICAgICAgICAgICkKICAgICAgICApCiAgICAgICkKICB9OwoKICB2YXIgaHlwb3QgPSBmdW5jdGlvbih4LCB5KSB7CgogICAgdmFyIGEgPSBNYXRoLmFicyh4KTsKICAgIHZhciBiID0gTWF0aC5hYnMoeSk7CgogICAgaWYgKGEgPCAzMDAwICYmIGIgPCAzMDAwKSB7CiAgICAgIHJldHVybiBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7CiAgICB9CgogICAgaWYgKGEgPCBiKSB7CiAgICAgIGEgPSBiOwogICAgICBiID0geCAvIHk7CiAgICB9IGVsc2UgewogICAgICBiID0geSAvIHg7CiAgICB9CiAgICByZXR1cm4gYSAqIE1hdGguc3FydCgxICsgYiAqIGIpOwogIH07CgogIHZhciBwYXJzZXJfZXhpdCA9IGZ1bmN0aW9uKCkgewogICAgdGhyb3cgU3ludGF4RXJyb3IoJ0ludmFsaWQgUGFyYW0nKTsKICB9OwoKICAvKioKICAgKiBDYWxjdWxhdGVzIGxvZyhzcXJ0KGFeMitiXjIpKSBpbiBhIHdheSB0byBhdm9pZCBvdmVyZmxvd3MKICAgKgogICAqIEBwYXJhbSB7bnVtYmVyfSBhCiAgICogQHBhcmFtIHtudW1iZXJ9IGIKICAgKiBAcmV0dXJucyB7bnVtYmVyfQogICAqLwogIGZ1bmN0aW9uIGxvZ0h5cG90KGEsIGIpIHsKCiAgICB2YXIgX2EgPSBNYXRoLmFicyhhKTsKICAgIHZhciBfYiA9IE1hdGguYWJzKGIpOwoKICAgIGlmIChhID09PSAwKSB7CiAgICAgIHJldHVybiBNYXRoLmxvZyhfYik7CiAgICB9CgogICAgaWYgKGIgPT09IDApIHsKICAgICAgcmV0dXJuIE1hdGgubG9nKF9hKTsKICAgIH0KCiAgICBpZiAoX2EgPCAzMDAwICYmIF9iIDwgMzAwMCkgewogICAgICByZXR1cm4gTWF0aC5sb2coYSAqIGEgKyBiICogYikgKiAwLjU7CiAgICB9CgogICAgLyogSSBnb3QgNCBpZGVhcyB0byBjb21wdXRlIHRoaXMgcHJvcGVydHkgd2l0aG91dCBvdmVyZmxvdzoKICAgICAqCiAgICAgKiBUZXN0aW5nIDEwMDAwMDAgdGltZXMgd2l0aCByYW5kb20gc2FtcGxlcyBmb3IgYSxiIOKIiCBbMSwgMTAwMDAwMDAwMF0gYWdhaW5zdCBhIGJpZyBkZWNpbWFsIGxpYnJhcnkgdG8gZ2V0IGFuIGVycm9yIGVzdGltYXRlCiAgICAgKgogICAgICogMS4gT25seSBlbGltaW5hdGUgdGhlIHNxdWFyZSByb290OiAoT1ZFUkFMTCBFUlJPUjogMy45MTIyNDgzMDMwOTUxMTE2ZS0xMSkKCiAgICAgTWF0aC5sb2coYSAqIGEgKyBiICogYikgLyAyCgogICAgICoKICAgICAqCiAgICAgKiAyLiBUcnkgdG8gdXNlIHRoZSBub24tb3ZlcmZsb3dpbmcgcHl0aGFnb3JhczogKE9WRVJBTEwgRVJST1I6IDguODg5NzYwMDM5MjEwMTU5ZS0xMCkKCiAgICAgdmFyIGZuID0gZnVuY3Rpb24oYSwgYikgewogICAgIGEgPSBNYXRoLmFicyhhKTsKICAgICBiID0gTWF0aC5hYnMoYik7CiAgICAgdmFyIHQgPSBNYXRoLm1pbihhLCBiKTsKICAgICBhID0gTWF0aC5tYXgoYSwgYik7CiAgICAgdCA9IHQgLyBhOwoKICAgICByZXR1cm4gTWF0aC5sb2coYSkgKyBNYXRoLmxvZygxICsgdCAqIHQpIC8gMjsKICAgICB9OwoKICAgICAqIDMuIEFidXNlIHRoZSBpZGVudGl0eSBjb3MoYXRhbih5L3gpID0geCAvIHNxcnQoeF4yK3leMik6IChPVkVSQUxMIEVSUk9SOiAzLjQ3ODAxNzg3MzcwMzcyMDRlLTEwKQoKICAgICBNYXRoLmxvZyhhIC8gTWF0aC5jb3MoTWF0aC5hdGFuMihiLCBhKSkpCgogICAgICogNC4gVXNlIDMuIGFuZCBhcHBseSBsb2cgcnVsZXM6IChPVkVSQUxMIEVSUk9SOiAxLjIwMTQwODc1MDI2MjA4OTZlLTkpCgogICAgIE1hdGgubG9nKGEpIC0gTWF0aC5sb2coTWF0aC5jb3MoTWF0aC5hdGFuMihiLCBhKSkpCgogICAgICovCgogICAgcmV0dXJuIE1hdGgubG9nKGEgLyBNYXRoLmNvcyhNYXRoLmF0YW4yKGIsIGEpKSk7CiAgfQoKICB2YXIgcGFyc2UgPSBmdW5jdGlvbihhLCBiKSB7CgogICAgdmFyIHogPSB7J3JlJzogMCwgJ2ltJzogMH07CgogICAgaWYgKGEgPT09IHVuZGVmaW5lZCB8fCBhID09PSBudWxsKSB7CiAgICAgIHpbJ3JlJ10gPQogICAgICAgICAgICAgIHpbJ2ltJ10gPSAwOwogICAgfSBlbHNlIGlmIChiICE9PSB1bmRlZmluZWQpIHsKICAgICAgelsncmUnXSA9IGE7CiAgICAgIHpbJ2ltJ10gPSBiOwogICAgfSBlbHNlCiAgICAgIHN3aXRjaCAodHlwZW9mIGEpIHsKCiAgICAgICAgY2FzZSAnb2JqZWN0JzoKCiAgICAgICAgICBpZiAoJ2ltJyBpbiBhICYmICdyZScgaW4gYSkgewogICAgICAgICAgICB6WydyZSddID0gYVsncmUnXTsKICAgICAgICAgICAgelsnaW0nXSA9IGFbJ2ltJ107CiAgICAgICAgICB9IGVsc2UgaWYgKCdhYnMnIGluIGEgJiYgJ2FyZycgaW4gYSkgewogICAgICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShhWydhYnMnXSkgJiYgTnVtYmVyLmlzRmluaXRlKGFbJ2FyZyddKSkgewogICAgICAgICAgICAgIHJldHVybiBDb21wbGV4WydJTkZJTklUWSddOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHpbJ3JlJ10gPSBhWydhYnMnXSAqIE1hdGguY29zKGFbJ2FyZyddKTsKICAgICAgICAgICAgelsnaW0nXSA9IGFbJ2FicyddICogTWF0aC5zaW4oYVsnYXJnJ10pOwogICAgICAgICAgfSBlbHNlIGlmICgncicgaW4gYSAmJiAncGhpJyBpbiBhKSB7CiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGFbJ3InXSkgJiYgTnVtYmVyLmlzRmluaXRlKGFbJ3BoaSddKSkgewogICAgICAgICAgICAgIHJldHVybiBDb21wbGV4WydJTkZJTklUWSddOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHpbJ3JlJ10gPSBhWydyJ10gKiBNYXRoLmNvcyhhWydwaGknXSk7CiAgICAgICAgICAgIHpbJ2ltJ10gPSBhWydyJ10gKiBNYXRoLnNpbihhWydwaGknXSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGEubGVuZ3RoID09PSAyKSB7IC8vIFF1aWNrIGFycmF5IGNoZWNrCiAgICAgICAgICAgIHpbJ3JlJ10gPSBhWzBdOwogICAgICAgICAgICB6WydpbSddID0gYVsxXTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBhcnNlcl9leGl0KCk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnc3RyaW5nJzoKCiAgICAgICAgICB6WydpbSddID0gLyogdm9pZCAqLwogICAgICAgICAgICAgICAgICB6WydyZSddID0gMDsKCiAgICAgICAgICB2YXIgdG9rZW5zID0gYS5tYXRjaCgvXGQrXC4/XGQqZVsrLV0/XGQrfFxkK1wuP1xkKnxcLlxkK3wuL2cpOwogICAgICAgICAgdmFyIHBsdXMgPSAxOwogICAgICAgICAgdmFyIG1pbnVzID0gMDsKCiAgICAgICAgICBpZiAodG9rZW5zID09PSBudWxsKSB7CiAgICAgICAgICAgIHBhcnNlcl9leGl0KCk7CiAgICAgICAgICB9CgogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKCiAgICAgICAgICAgIHZhciBjID0gdG9rZW5zW2ldOwoKICAgICAgICAgICAgaWYgKGMgPT09ICcgJyB8fCBjID09PSAnXHQnIHx8IGMgPT09ICdcbicpIHsKICAgICAgICAgICAgICAvKiB2b2lkICovCiAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJysnKSB7CiAgICAgICAgICAgICAgcGx1cysrOwogICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICctJykgewogICAgICAgICAgICAgIG1pbnVzKys7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJ2knIHx8IGMgPT09ICdJJykgewoKICAgICAgICAgICAgICBpZiAocGx1cyArIG1pbnVzID09PSAwKSB7CiAgICAgICAgICAgICAgICBwYXJzZXJfZXhpdCgpOwogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgaWYgKHRva2Vuc1tpICsgMV0gIT09ICcgJyAmJiAhaXNOYU4odG9rZW5zW2kgKyAxXSkpIHsKICAgICAgICAgICAgICAgIHpbJ2ltJ10gKz0gcGFyc2VGbG9hdCgobWludXMgJSAyID8gJy0nIDogJycpICsgdG9rZW5zW2kgKyAxXSk7CiAgICAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHpbJ2ltJ10gKz0gcGFyc2VGbG9hdCgobWludXMgJSAyID8gJy0nIDogJycpICsgJzEnKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcGx1cyA9IG1pbnVzID0gMDsKCiAgICAgICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICAgIGlmIChwbHVzICsgbWludXMgPT09IDAgfHwgaXNOYU4oYykpIHsKICAgICAgICAgICAgICAgIHBhcnNlcl9leGl0KCk7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBpZiAodG9rZW5zW2kgKyAxXSA9PT0gJ2knIHx8IHRva2Vuc1tpICsgMV0gPT09ICdJJykgewogICAgICAgICAgICAgICAgelsnaW0nXSArPSBwYXJzZUZsb2F0KChtaW51cyAlIDIgPyAnLScgOiAnJykgKyBjKTsKICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgelsncmUnXSArPSBwYXJzZUZsb2F0KChtaW51cyAlIDIgPyAnLScgOiAnJykgKyBjKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcGx1cyA9IG1pbnVzID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIC8vIFN0aWxsIHNvbWV0aGluZyBvbiB0aGUgc3RhY2sKICAgICAgICAgIGlmIChwbHVzICsgbWludXMgPiAwKSB7CiAgICAgICAgICAgIHBhcnNlcl9leGl0KCk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnbnVtYmVyJzoKICAgICAgICAgIHpbJ2ltJ10gPSAwOwogICAgICAgICAgelsncmUnXSA9IGE7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHBhcnNlcl9leGl0KCk7CiAgICAgIH0KCiAgICBpZiAoaXNOYU4oelsncmUnXSkgfHwgaXNOYU4oelsnaW0nXSkpIHsKICAgICAgLy8gSWYgYSBjYWxjdWxhdGlvbiBpcyBOYU4sIHdlIHRyZWF0IGl0IGFzIE5hTiBhbmQgZG9uJ3QgdGhyb3cKICAgICAgLy9wYXJzZXJfZXhpdCgpOwogICAgfQoKICAgIHJldHVybiB6OwogIH07CgogIC8qKgogICAqIEBjb25zdHJ1Y3RvcgogICAqIEByZXR1cm5zIHtDb21wbGV4fQogICAqLwogIGZ1bmN0aW9uIENvbXBsZXgoYSwgYikgewoKICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDb21wbGV4KSkgewogICAgICByZXR1cm4gbmV3IENvbXBsZXgoYSwgYik7CiAgICB9CgogICAgdmFyIHogPSBwYXJzZShhLCBiKTsKCiAgICB0aGlzWydyZSddID0gelsncmUnXTsKICAgIHRoaXNbJ2ltJ10gPSB6WydpbSddOwogIH0KCiAgQ29tcGxleC5wcm90b3R5cGUgPSB7CgogICAgJ3JlJzogMCwKICAgICdpbSc6IDAsCgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGVzIHRoZSBzaWduIG9mIGEgY29tcGxleCBudW1iZXIsIHdoaWNoIGlzIGEgbm9ybWFsaXplZCBjb21wbGV4CiAgICAgKgogICAgICogQHJldHVybnMge0NvbXBsZXh9CiAgICAgKi8KICAgICdzaWduJzogZnVuY3Rpb24oKSB7CgogICAgICB2YXIgYWJzID0gdGhpc1snYWJzJ10oKTsKCiAgICAgIHJldHVybiBuZXcgQ29tcGxleCgKICAgICAgICAgICAgICB0aGlzWydyZSddIC8gYWJzLAogICAgICAgICAgICAgIHRoaXNbJ2ltJ10gLyBhYnMpOwogICAgfSwKCiAgICAvKioKICAgICAqIEFkZHMgdHdvIGNvbXBsZXggbnVtYmVycwogICAgICoKICAgICAqIEByZXR1cm5zIHtDb21wbGV4fQogICAgICovCiAgICAnYWRkJzogZnVuY3Rpb24oYSwgYikgewoKICAgICAgdmFyIHogPSBuZXcgQ29tcGxleChhLCBiKTsKCiAgICAgIC8vIEluZmluaXR5ICsgSW5maW5pdHkgPSBOYU4KICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpICYmIHpbJ2lzSW5maW5pdGUnXSgpKSB7CiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ05BTiddOwogICAgICB9CgogICAgICAvLyBJbmZpbml0eSArIHogPSBJbmZpbml0eSB7IHdoZXJlIHogIT0gSW5maW5pdHkgfQogICAgICBpZiAodGhpc1snaXNJbmZpbml0ZSddKCkgfHwgelsnaXNJbmZpbml0ZSddKCkpIHsKICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTsKICAgICAgfQoKICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KAogICAgICAgICAgICAgIHRoaXNbJ3JlJ10gKyB6WydyZSddLAogICAgICAgICAgICAgIHRoaXNbJ2ltJ10gKyB6WydpbSddKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBTdWJ0cmFjdHMgdHdvIGNvbXBsZXggbnVtYmVycwogICAgICoKICAgICAqIEByZXR1cm5zIHtDb21wbGV4fQogICAgICovCiAgICAnc3ViJzogZnVuY3Rpb24oYSwgYikgewoKICAgICAgdmFyIHogPSBuZXcgQ29tcGxleChhLCBiKTsKCiAgICAgIC8vIEluZmluaXR5IC0gSW5maW5pdHkgPSBOYU4KICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpICYmIHpbJ2lzSW5maW5pdGUnXSgpKSB7CiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ05BTiddOwogICAgICB9CgogICAgICAvLyBJbmZpbml0eSAtIHogPSBJbmZpbml0eSB7IHdoZXJlIHogIT0gSW5maW5pdHkgfQogICAgICBpZiAodGhpc1snaXNJbmZpbml0ZSddKCkgfHwgelsnaXNJbmZpbml0ZSddKCkpIHsKICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTsKICAgICAgfQoKICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KAogICAgICAgICAgICAgIHRoaXNbJ3JlJ10gLSB6WydyZSddLAogICAgICAgICAgICAgIHRoaXNbJ2ltJ10gLSB6WydpbSddKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBNdWx0aXBsaWVzIHR3byBjb21wbGV4IG51bWJlcnMKICAgICAqCiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH0KICAgICAqLwogICAgJ211bCc6IGZ1bmN0aW9uKGEsIGIpIHsKCiAgICAgIHZhciB6ID0gbmV3IENvbXBsZXgoYSwgYik7CgogICAgICAvLyBJbmZpbml0eSAqIDAgPSBOYU4KICAgICAgaWYgKCh0aGlzWydpc0luZmluaXRlJ10oKSAmJiB6Wydpc1plcm8nXSgpKSB8fCAodGhpc1snaXNaZXJvJ10oKSAmJiB6Wydpc0luZmluaXRlJ10oKSkpIHsKICAgICAgICByZXR1cm4gQ29tcGxleFsnTkFOJ107CiAgICAgIH0KCiAgICAgIC8vIEluZmluaXR5ICogeiA9IEluZmluaXR5IHsgd2hlcmUgeiAhPSAwIH0KICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpIHx8IHpbJ2lzSW5maW5pdGUnXSgpKSB7CiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ0lORklOSVRZJ107CiAgICAgIH0KCiAgICAgIC8vIFNob3J0IGNpcmN1aXQgZm9yIHJlYWwgdmFsdWVzCiAgICAgIGlmICh6WydpbSddID09PSAwICYmIHRoaXNbJ2ltJ10gPT09IDApIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgodGhpc1sncmUnXSAqIHpbJ3JlJ10sIDApOwogICAgICB9CgogICAgICByZXR1cm4gbmV3IENvbXBsZXgoCiAgICAgICAgICAgICAgdGhpc1sncmUnXSAqIHpbJ3JlJ10gLSB0aGlzWydpbSddICogelsnaW0nXSwKICAgICAgICAgICAgICB0aGlzWydyZSddICogelsnaW0nXSArIHRoaXNbJ2ltJ10gKiB6WydyZSddKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBEaXZpZGVzIHR3byBjb21wbGV4IG51bWJlcnMKICAgICAqCiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH0KICAgICAqLwogICAgJ2Rpdic6IGZ1bmN0aW9uKGEsIGIpIHsKCiAgICAgIHZhciB6ID0gbmV3IENvbXBsZXgoYSwgYik7CgogICAgICAvLyAwIC8gMCA9IE5hTiBhbmQgSW5maW5pdHkgLyBJbmZpbml0eSA9IE5hTgogICAgICBpZiAoKHRoaXNbJ2lzWmVybyddKCkgJiYgelsnaXNaZXJvJ10oKSkgfHwgKHRoaXNbJ2lzSW5maW5pdGUnXSgpICYmIHpbJ2lzSW5maW5pdGUnXSgpKSkgewogICAgICAgIHJldHVybiBDb21wbGV4WydOQU4nXTsKICAgICAgfQoKICAgICAgLy8gSW5maW5pdHkgLyAwID0gSW5maW5pdHkKICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpIHx8IHpbJ2lzWmVybyddKCkpIHsKICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTsKICAgICAgfQoKICAgICAgLy8gMCAvIEluZmluaXR5ID0gMAogICAgICBpZiAodGhpc1snaXNaZXJvJ10oKSB8fCB6Wydpc0luZmluaXRlJ10oKSkgewogICAgICAgIHJldHVybiBDb21wbGV4WydaRVJPJ107CiAgICAgIH0KCiAgICAgIGEgPSB0aGlzWydyZSddOwogICAgICBiID0gdGhpc1snaW0nXTsKCiAgICAgIHZhciBjID0gelsncmUnXTsKICAgICAgdmFyIGQgPSB6WydpbSddOwogICAgICB2YXIgdCwgeDsKCiAgICAgIGlmICgwID09PSBkKSB7CiAgICAgICAgLy8gRGl2aXNvciBpcyByZWFsCiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KGEgLyBjLCBiIC8gYyk7CiAgICAgIH0KCiAgICAgIGlmIChNYXRoLmFicyhjKSA8IE1hdGguYWJzKGQpKSB7CgogICAgICAgIHggPSBjIC8gZDsKICAgICAgICB0ID0gYyAqIHggKyBkOwoKICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoCiAgICAgICAgICAgICAgICAoYSAqIHggKyBiKSAvIHQsCiAgICAgICAgICAgICAgICAoYiAqIHggLSBhKSAvIHQpOwoKICAgICAgfSBlbHNlIHsKCiAgICAgICAgeCA9IGQgLyBjOwogICAgICAgIHQgPSBkICogeCArIGM7CgogICAgICAgIHJldHVybiBuZXcgQ29tcGxleCgKICAgICAgICAgICAgICAgIChhICsgYiAqIHgpIC8gdCwKICAgICAgICAgICAgICAgIChiIC0gYSAqIHgpIC8gdCk7CiAgICAgIH0KICAgIH0sCgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGUgdGhlIHBvd2VyIG9mIHR3byBjb21wbGV4IG51bWJlcnMKICAgICAqCiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH0KICAgICAqLwogICAgJ3Bvdyc6IGZ1bmN0aW9uKGEsIGIpIHsKCiAgICAgIHZhciB6ID0gbmV3IENvbXBsZXgoYSwgYik7CgogICAgICBhID0gdGhpc1sncmUnXTsKICAgICAgYiA9IHRoaXNbJ2ltJ107CgogICAgICBpZiAoelsnaXNaZXJvJ10oKSkgewogICAgICAgIHJldHVybiBDb21wbGV4WydPTkUnXTsKICAgICAgfQoKICAgICAgLy8gSWYgdGhlIGV4cG9uZW50IGlzIHJlYWwKICAgICAgaWYgKHpbJ2ltJ10gPT09IDApIHsKCiAgICAgICAgaWYgKGIgPT09IDAgJiYgYSA+PSAwKSB7CgogICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KE1hdGgucG93KGEsIHpbJ3JlJ10pLCAwKTsKCiAgICAgICAgfSBlbHNlIGlmIChhID09PSAwKSB7IC8vIElmIGJhc2UgaXMgZnVsbHkgaW1hZ2luYXJ5CgogICAgICAgICAgc3dpdGNoICgoelsncmUnXSAlIDQgKyA0KSAlIDQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLnBvdyhiLCB6WydyZSddKSwgMCk7CiAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgTWF0aC5wb3coYiwgelsncmUnXSkpOwogICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KC1NYXRoLnBvdyhiLCB6WydyZSddKSwgMCk7CiAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgLU1hdGgucG93KGIsIHpbJ3JlJ10pKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qIEkgY291bGRuJ3QgZmluZCBhIGdvb2QgZm9ybXVsYSwgc28gaGVyZSBpcyBhIGRlcml2YXRpb24gYW5kIG9wdGltaXphdGlvbgogICAgICAgKgogICAgICAgKiB6XzFeel8yID0gKGEgKyBiaSleKGMgKyBkaSkKICAgICAgICogICAgICAgICA9IGV4cCgoYyArIGRpKSAqIGxvZyhhICsgYmkpCiAgICAgICAqICAgICAgICAgPSBwb3coYV4yICsgYl4yLCAoYyArIGRpKSAvIDIpICogZXhwKGkoYyArIGRpKWF0YW4yKGIsIGEpKQogICAgICAgKiA9Pi4uLgogICAgICAgKiBSZSA9IChwb3coYV4yICsgYl4yLCBjIC8gMikgKiBleHAoLWQgKiBhdGFuMihiLCBhKSkpICogY29zKGQgKiBsb2coYV4yICsgYl4yKSAvIDIgKyBjICogYXRhbjIoYiwgYSkpCiAgICAgICAqIEltID0gKHBvdyhhXjIgKyBiXjIsIGMgLyAyKSAqIGV4cCgtZCAqIGF0YW4yKGIsIGEpKSkgKiBzaW4oZCAqIGxvZyhhXjIgKyBiXjIpIC8gMiArIGMgKiBhdGFuMihiLCBhKSkKICAgICAgICoKICAgICAgICogPT4uLi4KICAgICAgICogUmUgPSBleHAoYyAqIGxvZyhzcXJ0KGFeMiArIGJeMikpIC0gZCAqIGF0YW4yKGIsIGEpKSAqIGNvcyhkICogbG9nKHNxcnQoYV4yICsgYl4yKSkgKyBjICogYXRhbjIoYiwgYSkpCiAgICAgICAqIEltID0gZXhwKGMgKiBsb2coc3FydChhXjIgKyBiXjIpKSAtIGQgKiBhdGFuMihiLCBhKSkgKiBzaW4oZCAqIGxvZyhzcXJ0KGFeMiArIGJeMikpICsgYyAqIGF0YW4yKGIsIGEpKQogICAgICAgKgogICAgICAgKiA9PgogICAgICAgKiBSZSA9IGV4cChjICogbG9nc3EyIC0gZCAqIGFyZyh6XzEpKSAqIGNvcyhkICogbG9nc3EyICsgYyAqIGFyZyh6XzEpKQogICAgICAgKiBJbSA9IGV4cChjICogbG9nc3EyIC0gZCAqIGFyZyh6XzEpKSAqIHNpbihkICogbG9nc3EyICsgYyAqIGFyZyh6XzEpKQogICAgICAgKgogICAgICAgKi8KCiAgICAgIGlmIChhID09PSAwICYmIGIgPT09IDAgJiYgelsncmUnXSA+IDAgJiYgelsnaW0nXSA+PSAwKSB7CiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ1pFUk8nXTsKICAgICAgfQoKICAgICAgdmFyIGFyZyA9IE1hdGguYXRhbjIoYiwgYSk7CiAgICAgIHZhciBsb2ggPSBsb2dIeXBvdChhLCBiKTsKCiAgICAgIGEgPSBNYXRoLmV4cCh6WydyZSddICogbG9oIC0gelsnaW0nXSAqIGFyZyk7CiAgICAgIGIgPSB6WydpbSddICogbG9oICsgelsncmUnXSAqIGFyZzsKICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KAogICAgICAgICAgICAgIGEgKiBNYXRoLmNvcyhiKSwKICAgICAgICAgICAgICBhICogTWF0aC5zaW4oYikpOwogICAgfSwKCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBzcXVhcmUgcm9vdAogICAgICoKICAgICAqIEByZXR1cm5zIHtDb21wbGV4fQogICAgICovCiAgICAnc3FydCc6IGZ1bmN0aW9uKCkgewoKICAgICAgdmFyIGEgPSB0aGlzWydyZSddOwogICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107CiAgICAgIHZhciByID0gdGhpc1snYWJzJ10oKTsKCiAgICAgIHZhciByZSwgaW07CgogICAgICBpZiAoYSA+PSAwKSB7CgogICAgICAgIGlmIChiID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoTWF0aC5zcXJ0KGEpLCAwKTsKICAgICAgICB9CgogICAgICAgIHJlID0gMC41ICogTWF0aC5zcXJ0KDIuMCAqIChyICsgYSkpOwogICAgICB9IGVsc2UgewogICAgICAgIHJlID0gTWF0aC5hYnMoYikgLyBNYXRoLnNxcnQoMiAqIChyIC0gYSkpOwogICAgICB9CgogICAgICBpZiAoYSA8PSAwKSB7CiAgICAgICAgaW0gPSAwLjUgKiBNYXRoLnNxcnQoMi4wICogKHIgLSBhKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW0gPSBNYXRoLmFicyhiKSAvIE1hdGguc3FydCgyICogKHIgKyBhKSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBuZXcgQ29tcGxleChyZSwgYiA8IDAgPyAtaW0gOiBpbSk7CiAgICB9LAoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGV4cG9uZW50CiAgICAgKgogICAgICogQHJldHVybnMge0NvbXBsZXh9CiAgICAgKi8KICAgICdleHAnOiBmdW5jdGlvbigpIHsKCiAgICAgIHZhciB0bXAgPSBNYXRoLmV4cCh0aGlzWydyZSddKTsKCiAgICAgIGlmICh0aGlzWydpbSddID09PSAwKSB7CiAgICAgICAgLy9yZXR1cm4gbmV3IENvbXBsZXgodG1wLCAwKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IENvbXBsZXgoCiAgICAgICAgICAgICAgdG1wICogTWF0aC5jb3ModGhpc1snaW0nXSksCiAgICAgICAgICAgICAgdG1wICogTWF0aC5zaW4odGhpc1snaW0nXSkpOwogICAgfSwKCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBleHBvbmVudCBhbmQgc3VidHJhY3RzIG9uZS4KICAgICAqCiAgICAgKiBUaGlzIG1heSBiZSBtb3JlIGFjY3VyYXRlIHRoYW4gYENvbXBsZXgoeCkuZXhwKCkuc3ViKDEpYCBpZgogICAgICogYHhgIGlzIHNtYWxsLgogICAgICoKICAgICAqIEByZXR1cm5zIHtDb21wbGV4fQogICAgICovCiAgICAnZXhwbTEnOiBmdW5jdGlvbigpIHsKCiAgICAgIC8qKgogICAgICAgKiBleHAoYSArIGkqYikgLSAxCiAgICAgICA9IGV4cChhKSAqIChjb3MoYikgKyBqKnNpbihiKSkgLSAxCiAgICAgICA9IGV4cG0xKGEpKmNvcyhiKSArIGNvc20xKGIpICsgaipleHAoYSkqc2luKGIpCiAgICAgICAqLwoKICAgICAgdmFyIGEgPSB0aGlzWydyZSddOwogICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107CgogICAgICByZXR1cm4gbmV3IENvbXBsZXgoCiAgICAgICAgICAgICAgTWF0aC5leHBtMShhKSAqIE1hdGguY29zKGIpICsgY29zbTEoYiksCiAgICAgICAgICAgICAgTWF0aC5leHAoYSkgKiBNYXRoLnNpbihiKSk7CiAgICB9LAoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlIHRoZSBuYXR1cmFsIGxvZwogICAgICoKICAgICAqIEByZXR1cm5zIHtDb21wbGV4fQogICAgICovCiAgICAnbG9nJzogZnVuY3Rpb24oKSB7CgogICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107CiAgICAgIHZhciBiID0gdGhpc1snaW0nXTsKCiAgICAgIGlmIChiID09PSAwICYmIGEgPiAwKSB7CiAgICAgICAgLy9yZXR1cm4gbmV3IENvbXBsZXgoTWF0aC5sb2coYSksIDApOwogICAgICB9CgogICAgICByZXR1cm4gbmV3IENvbXBsZXgoCiAgICAgICAgICAgICAgbG9nSHlwb3QoYSwgYiksCiAgICAgICAgICAgICAgTWF0aC5hdGFuMihiLCBhKSk7CiAgICB9LAoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGNvbXBsZXggbnVtYmVyCiAgICAgKgogICAgICogQHJldHVybnMge251bWJlcn0KICAgICAqLwogICAgJ2Ficyc6IGZ1bmN0aW9uKCkgewoKICAgICAgcmV0dXJuIGh5cG90KHRoaXNbJ3JlJ10sIHRoaXNbJ2ltJ10pOwogICAgfSwKCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSB0aGUgYW5nbGUgb2YgdGhlIGNvbXBsZXggbnVtYmVyCiAgICAgKgogICAgICogQHJldHVybnMge251bWJlcn0KICAgICAqLwogICAgJ2FyZyc6IGZ1bmN0aW9uKCkgewoKICAgICAgcmV0dXJuIE1hdGguYXRhbjIodGhpc1snaW0nXSwgdGhpc1sncmUnXSk7CiAgICB9LAoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlIHRoZSBzaW5lIG9mIHRoZSBjb21wbGV4IG51bWJlcgogICAgICoKICAgICAqIEByZXR1cm5zIHtDb21wbGV4fQogICAgICovCiAgICAnc2luJzogZnVuY3Rpb24oKSB7CgogICAgICAvLyBzaW4oYykgPSAoZV5iIC0gZV4oLWIpKSAvICgyaSkKCiAgICAgIHZhciBhID0gdGhpc1sncmUnXTsKICAgICAgdmFyIGIgPSB0aGlzWydpbSddOwoKICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KAogICAgICAgICAgICAgIE1hdGguc2luKGEpICogY29zaChiKSwKICAgICAgICAgICAgICBNYXRoLmNvcyhhKSAqIHNpbmgoYikpOwogICAgfSwKCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSB0aGUgY29zaW5lCiAgICAgKgogICAgICogQHJldHVybnMge0NvbXBsZXh9CiAgICAgKi8KICAgICdjb3MnOiBmdW5jdGlvbigpIHsKCiAgICAgIC8vIGNvcyh6KSA9IChlXmIgKyBlXigtYikpIC8gMgoKICAgICAgdmFyIGEgPSB0aGlzWydyZSddOwogICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107CgogICAgICByZXR1cm4gbmV3IENvbXBsZXgoCiAgICAgICAgICAgICAgTWF0aC5jb3MoYSkgKiBjb3NoKGIpLAogICAgICAgICAgICAgIC1NYXRoLnNpbihhKSAqIHNpbmgoYikpOwogICAgfSwKCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSB0aGUgdGFuZ2VudAogICAgICoKICAgICAqIEByZXR1cm5zIHtDb21wbGV4fQogICAgICovCiAgICAndGFuJzogZnVuY3Rpb24oKSB7CgogICAgICAvLyB0YW4oYykgPSAoZV4oY2kpIC0gZV4oLWNpKSkgLyAoaShlXihjaSkgKyBlXigtY2kpKSkKCiAgICAgIHZhciBhID0gMiAqIHRoaXNbJ3JlJ107CiAgICAgIHZhciBiID0gMiAqIHRoaXNbJ2ltJ107CiAgICAgIHZhciBkID0gTWF0aC5jb3MoYSkgKyBjb3NoKGIpOwoKICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KAogICAgICAgICAgICAgIE1hdGguc2luKGEpIC8gZCwKICAgICAgICAgICAgICBzaW5oKGIpIC8gZCk7CiAgICB9LAoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlIHRoZSBjb3RhbmdlbnQKICAgICAqCiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH0KICAgICAqLwogICAgJ2NvdCc6IGZ1bmN0aW9uKCkgewoKICAgICAgLy8gY290KGMpID0gaShlXihjaSkgKyBlXigtY2kpKSAvIChlXihjaSkgLSBlXigtY2kpKQoKICAgICAgdmFyIGEgPSAyICogdGhpc1sncmUnXTsKICAgICAgdmFyIGIgPSAyICogdGhpc1snaW0nXTsKICAgICAgdmFyIGQgPSBNYXRoLmNvcyhhKSAtIGNvc2goYik7CgogICAgICByZXR1cm4gbmV3IENvbXBsZXgoCiAgICAgICAgICAgICAgLU1hdGguc2luKGEpIC8gZCwKICAgICAgICAgICAgICBzaW5oKGIpIC8gZCk7CiAgICB9LAoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlIHRoZSBzZWNhbnQKICAgICAqCiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH0KICAgICAqLwogICAgJ3NlYyc6IGZ1bmN0aW9uKCkgewoKICAgICAgLy8gc2VjKGMpID0gMiAvIChlXihjaSkgKyBlXigtY2kpKQoKICAgICAgdmFyIGEgPSB0aGlzWydyZSddOwogICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107CiAgICAgIHZhciBkID0gMC41ICogY29zaCgyICogYikgKyAwLjUgKiBNYXRoLmNvcygyICogYSk7CgogICAgICByZXR1cm4gbmV3IENvbXBsZXgoCiAgICAgICAgICAgICAgTWF0aC5jb3MoYSkgKiBjb3NoKGIpIC8gZCwKICAgICAgICAgICAgICBNYXRoLnNpbihhKSAqIHNpbmgoYikgLyBkKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvc2VjYW5zCiAgICAgKgogICAgICogQHJldHVybnMge0NvbXBsZXh9CiAgICAgKi8KICAgICdjc2MnOiBmdW5jdGlvbigpIHsKCiAgICAgIC8vIGNzYyhjKSA9IDJpIC8gKGVeKGNpKSAtIGVeKC1jaSkpCgogICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107CiAgICAgIHZhciBiID0gdGhpc1snaW0nXTsKICAgICAgdmFyIGQgPSAwLjUgKiBjb3NoKDIgKiBiKSAtIDAuNSAqIE1hdGguY29zKDIgKiBhKTsKCiAgICAgIHJldHVybiBuZXcgQ29tcGxleCgKICAgICAgICAgICAgICBNYXRoLnNpbihhKSAqIGNvc2goYikgLyBkLAogICAgICAgICAgICAgIC1NYXRoLmNvcyhhKSAqIHNpbmgoYikgLyBkKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYXJjdXMgc2ludXMKICAgICAqCiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH0KICAgICAqLwogICAgJ2FzaW4nOiBmdW5jdGlvbigpIHsKCiAgICAgIC8vIGFzaW4oYykgPSAtaSAqIGxvZyhjaSArIHNxcnQoMSAtIGNeMikpCgogICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107CiAgICAgIHZhciBiID0gdGhpc1snaW0nXTsKCiAgICAgIHZhciB0MSA9IG5ldyBDb21wbGV4KAogICAgICAgICAgICAgIGIgKiBiIC0gYSAqIGEgKyAxLAogICAgICAgICAgICAgIC0yICogYSAqIGIpWydzcXJ0J10oKTsKCiAgICAgIHZhciB0MiA9IG5ldyBDb21wbGV4KAogICAgICAgICAgICAgIHQxWydyZSddIC0gYiwKICAgICAgICAgICAgICB0MVsnaW0nXSArIGEpWydsb2cnXSgpOwoKICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHQyWydpbSddLCAtdDJbJ3JlJ10pOwogICAgfSwKCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhcmN1cyBjb3NpbnVzCiAgICAgKgogICAgICogQHJldHVybnMge0NvbXBsZXh9CiAgICAgKi8KICAgICdhY29zJzogZnVuY3Rpb24oKSB7CgogICAgICAvLyBhY29zKGMpID0gaSAqIGxvZyhjIC0gaSAqIHNxcnQoMSAtIGNeMikpCgogICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107CiAgICAgIHZhciBiID0gdGhpc1snaW0nXTsKCiAgICAgIHZhciB0MSA9IG5ldyBDb21wbGV4KAogICAgICAgICAgICAgIGIgKiBiIC0gYSAqIGEgKyAxLAogICAgICAgICAgICAgIC0yICogYSAqIGIpWydzcXJ0J10oKTsKCiAgICAgIHZhciB0MiA9IG5ldyBDb21wbGV4KAogICAgICAgICAgICAgIHQxWydyZSddIC0gYiwKICAgICAgICAgICAgICB0MVsnaW0nXSArIGEpWydsb2cnXSgpOwoKICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KE1hdGguUEkgLyAyIC0gdDJbJ2ltJ10sIHQyWydyZSddKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYXJjdXMgdGFuZ2VudAogICAgICoKICAgICAqIEByZXR1cm5zIHtDb21wbGV4fQogICAgICovCiAgICAnYXRhbic6IGZ1bmN0aW9uKCkgewoKICAgICAgLy8gYXRhbihjKSA9IGkgLyAyIGxvZygoaSArIHgpIC8gKGkgLSB4KSkKCiAgICAgIHZhciBhID0gdGhpc1sncmUnXTsKICAgICAgdmFyIGIgPSB0aGlzWydpbSddOwoKICAgICAgaWYgKGEgPT09IDApIHsKCiAgICAgICAgaWYgKGIgPT09IDEpIHsKICAgICAgICAgIHJldHVybiBuZXcgQ29tcGxleCgwLCBJbmZpbml0eSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoYiA9PT0gLTEpIHsKICAgICAgICAgIHJldHVybiBuZXcgQ29tcGxleCgwLCAtSW5maW5pdHkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgdmFyIGQgPSBhICogYSArICgxLjAgLSBiKSAqICgxLjAgLSBiKTsKCiAgICAgIHZhciB0MSA9IG5ldyBDb21wbGV4KAogICAgICAgICAgICAgICgxIC0gYiAqIGIgLSBhICogYSkgLyBkLAogICAgICAgICAgICAgIC0yICogYSAvIGQpLmxvZygpOwoKICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KC0wLjUgKiB0MVsnaW0nXSwgMC41ICogdDFbJ3JlJ10pOwogICAgfSwKCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhcmN1cyBjb3RhbmdlbnQKICAgICAqCiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH0KICAgICAqLwogICAgJ2Fjb3QnOiBmdW5jdGlvbigpIHsKCiAgICAgIC8vIGFjb3QoYykgPSBpIC8gMiBsb2coKGMgLSBpKSAvIChjICsgaSkpCgogICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107CiAgICAgIHZhciBiID0gdGhpc1snaW0nXTsKCiAgICAgIGlmIChiID09PSAwKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KE1hdGguYXRhbjIoMSwgYSksIDApOwogICAgICB9CgogICAgICB2YXIgZCA9IGEgKiBhICsgYiAqIGI7CiAgICAgIHJldHVybiAoZCAhPT0gMCkKICAgICAgICAgICAgICA/IG5ldyBDb21wbGV4KAogICAgICAgICAgICAgICAgICAgICAgYSAvIGQsCiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmF0YW4oKQogICAgICAgICAgICAgIDogbmV3IENvbXBsZXgoCiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsCiAgICAgICAgICAgICAgICAgICAgICAoYiAhPT0gMCkgPyAtYiAvIDAgOiAwKS5hdGFuKCk7CiAgICB9LAoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFyY3VzIHNlY2FudAogICAgICoKICAgICAqIEByZXR1cm5zIHtDb21wbGV4fQogICAgICovCiAgICAnYXNlYyc6IGZ1bmN0aW9uKCkgewoKICAgICAgLy8gYXNlYyhjKSA9IC1pICogbG9nKDEgLyBjICsgc3FydCgxIC0gaSAvIGNeMikpCgogICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107CiAgICAgIHZhciBiID0gdGhpc1snaW0nXTsKCiAgICAgIGlmIChhID09PSAwICYmIGIgPT09IDApIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgSW5maW5pdHkpOwogICAgICB9CgogICAgICB2YXIgZCA9IGEgKiBhICsgYiAqIGI7CiAgICAgIHJldHVybiAoZCAhPT0gMCkKICAgICAgICAgICAgICA/IG5ldyBDb21wbGV4KAogICAgICAgICAgICAgICAgICAgICAgYSAvIGQsCiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmFjb3MoKQogICAgICAgICAgICAgIDogbmV3IENvbXBsZXgoCiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsCiAgICAgICAgICAgICAgICAgICAgICAoYiAhPT0gMCkgPyAtYiAvIDAgOiAwKS5hY29zKCk7CiAgICB9LAoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFyY3VzIGNvc2VjYW5zCiAgICAgKgogICAgICogQHJldHVybnMge0NvbXBsZXh9CiAgICAgKi8KICAgICdhY3NjJzogZnVuY3Rpb24oKSB7CgogICAgICAvLyBhY3NjKGMpID0gLWkgKiBsb2coaSAvIGMgKyBzcXJ0KDEgLSAxIC8gY14yKSkKCiAgICAgIHZhciBhID0gdGhpc1sncmUnXTsKICAgICAgdmFyIGIgPSB0aGlzWydpbSddOwoKICAgICAgaWYgKGEgPT09IDAgJiYgYiA9PT0gMCkgewogICAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLlBJIC8gMiwgSW5maW5pdHkpOwogICAgICB9CgogICAgICB2YXIgZCA9IGEgKiBhICsgYiAqIGI7CiAgICAgIHJldHVybiAoZCAhPT0gMCkKICAgICAgICAgICAgICA/IG5ldyBDb21wbGV4KAogICAgICAgICAgICAgICAgICAgICAgYSAvIGQsCiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmFzaW4oKQogICAgICAgICAgICAgIDogbmV3IENvbXBsZXgoCiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsCiAgICAgICAgICAgICAgICAgICAgICAoYiAhPT0gMCkgPyAtYiAvIDAgOiAwKS5hc2luKCk7CiAgICB9LAoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IHNpbmgKICAgICAqCiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH0KICAgICAqLwogICAgJ3NpbmgnOiBmdW5jdGlvbigpIHsKCiAgICAgIC8vIHNpbmgoYykgPSAoZV5jIC0gZV4tYykgLyAyCgogICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107CiAgICAgIHZhciBiID0gdGhpc1snaW0nXTsKCiAgICAgIHJldHVybiBuZXcgQ29tcGxleCgKICAgICAgICAgICAgICBzaW5oKGEpICogTWF0aC5jb3MoYiksCiAgICAgICAgICAgICAgY29zaChhKSAqIE1hdGguc2luKGIpKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggY29zaAogICAgICoKICAgICAqIEByZXR1cm5zIHtDb21wbGV4fQogICAgICovCiAgICAnY29zaCc6IGZ1bmN0aW9uKCkgewoKICAgICAgLy8gY29zaChjKSA9IChlXmMgKyBlXi1jKSAvIDIKCiAgICAgIHZhciBhID0gdGhpc1sncmUnXTsKICAgICAgdmFyIGIgPSB0aGlzWydpbSddOwoKICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KAogICAgICAgICAgICAgIGNvc2goYSkgKiBNYXRoLmNvcyhiKSwKICAgICAgICAgICAgICBzaW5oKGEpICogTWF0aC5zaW4oYikpOwogICAgfSwKCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCB0YW5oCiAgICAgKgogICAgICogQHJldHVybnMge0NvbXBsZXh9CiAgICAgKi8KICAgICd0YW5oJzogZnVuY3Rpb24oKSB7CgogICAgICAvLyB0YW5oKGMpID0gKGVeYyAtIGVeLWMpIC8gKGVeYyArIGVeLWMpCgogICAgICB2YXIgYSA9IDIgKiB0aGlzWydyZSddOwogICAgICB2YXIgYiA9IDIgKiB0aGlzWydpbSddOwogICAgICB2YXIgZCA9IGNvc2goYSkgKyBNYXRoLmNvcyhiKTsKCiAgICAgIHJldHVybiBuZXcgQ29tcGxleCgKICAgICAgICAgICAgICBzaW5oKGEpIC8gZCwKICAgICAgICAgICAgICBNYXRoLnNpbihiKSAvIGQpOwogICAgfSwKCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBjb3RoCiAgICAgKgogICAgICogQHJldHVybnMge0NvbXBsZXh9CiAgICAgKi8KICAgICdjb3RoJzogZnVuY3Rpb24oKSB7CgogICAgICAvLyBjb3RoKGMpID0gKGVeYyArIGVeLWMpIC8gKGVeYyAtIGVeLWMpCgogICAgICB2YXIgYSA9IDIgKiB0aGlzWydyZSddOwogICAgICB2YXIgYiA9IDIgKiB0aGlzWydpbSddOwogICAgICB2YXIgZCA9IGNvc2goYSkgLSBNYXRoLmNvcyhiKTsKCiAgICAgIHJldHVybiBuZXcgQ29tcGxleCgKICAgICAgICAgICAgICBzaW5oKGEpIC8gZCwKICAgICAgICAgICAgICAtTWF0aC5zaW4oYikgLyBkKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggY290aAogICAgICoKICAgICAqIEByZXR1cm5zIHtDb21wbGV4fQogICAgICovCiAgICAnY3NjaCc6IGZ1bmN0aW9uKCkgewoKICAgICAgLy8gY3NjaChjKSA9IDIgLyAoZV5jIC0gZV4tYykKCiAgICAgIHZhciBhID0gdGhpc1sncmUnXTsKICAgICAgdmFyIGIgPSB0aGlzWydpbSddOwogICAgICB2YXIgZCA9IE1hdGguY29zKDIgKiBiKSAtIGNvc2goMiAqIGEpOwoKICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KAogICAgICAgICAgICAgIC0yICogc2luaChhKSAqIE1hdGguY29zKGIpIC8gZCwKICAgICAgICAgICAgICAyICogY29zaChhKSAqIE1hdGguc2luKGIpIC8gZCk7CiAgICB9LAoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IHNlY2gKICAgICAqCiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH0KICAgICAqLwogICAgJ3NlY2gnOiBmdW5jdGlvbigpIHsKCiAgICAgIC8vIHNlY2goYykgPSAyIC8gKGVeYyArIGVeLWMpCgogICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107CiAgICAgIHZhciBiID0gdGhpc1snaW0nXTsKICAgICAgdmFyIGQgPSBNYXRoLmNvcygyICogYikgKyBjb3NoKDIgKiBhKTsKCiAgICAgIHJldHVybiBuZXcgQ29tcGxleCgKICAgICAgICAgICAgICAyICogY29zaChhKSAqIE1hdGguY29zKGIpIC8gZCwKICAgICAgICAgICAgICAtMiAqIHNpbmgoYSkgKiBNYXRoLnNpbihiKSAvIGQpOwogICAgfSwKCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhc2luaAogICAgICoKICAgICAqIEByZXR1cm5zIHtDb21wbGV4fQogICAgICovCiAgICAnYXNpbmgnOiBmdW5jdGlvbigpIHsKCiAgICAgIC8vIGFzaW5oKGMpID0gbG9nKGMgKyBzcXJ0KGNeMiArIDEpKQoKICAgICAgdmFyIHRtcCA9IHRoaXNbJ2ltJ107CiAgICAgIHRoaXNbJ2ltJ10gPSAtdGhpc1sncmUnXTsKICAgICAgdGhpc1sncmUnXSA9IHRtcDsKICAgICAgdmFyIHJlcyA9IHRoaXNbJ2FzaW4nXSgpOwoKICAgICAgdGhpc1sncmUnXSA9IC10aGlzWydpbSddOwogICAgICB0aGlzWydpbSddID0gdG1wOwogICAgICB0bXAgPSByZXNbJ3JlJ107CgogICAgICByZXNbJ3JlJ10gPSAtcmVzWydpbSddOwogICAgICByZXNbJ2ltJ10gPSB0bXA7CiAgICAgIHJldHVybiByZXM7CiAgICB9LAoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFzaW5oCiAgICAgKgogICAgICogQHJldHVybnMge0NvbXBsZXh9CiAgICAgKi8KICAgICdhY29zaCc6IGZ1bmN0aW9uKCkgewoKICAgICAgLy8gYWNvc2goYykgPSBsb2coYyArIHNxcnQoY14yIC0gMSkpCgogICAgICB2YXIgcmVzID0gdGhpc1snYWNvcyddKCk7CiAgICAgIGlmIChyZXNbJ2ltJ10gPD0gMCkgewogICAgICAgIHZhciB0bXAgPSByZXNbJ3JlJ107CiAgICAgICAgcmVzWydyZSddID0gLXJlc1snaW0nXTsKICAgICAgICByZXNbJ2ltJ10gPSB0bXA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHRtcCA9IHJlc1snaW0nXTsKICAgICAgICByZXNbJ2ltJ10gPSAtcmVzWydyZSddOwogICAgICAgIHJlc1sncmUnXSA9IHRtcDsKICAgICAgfQogICAgICByZXR1cm4gcmVzOwogICAgfSwKCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhdGFuaAogICAgICoKICAgICAqIEByZXR1cm5zIHtDb21wbGV4fQogICAgICovCiAgICAnYXRhbmgnOiBmdW5jdGlvbigpIHsKCiAgICAgIC8vIGF0YW5oKGMpID0gbG9nKCgxK2MpIC8gKDEtYykpIC8gMgoKICAgICAgdmFyIGEgPSB0aGlzWydyZSddOwogICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107CgogICAgICB2YXIgbm9JTSA9IGEgPiAxICYmIGIgPT09IDA7CiAgICAgIHZhciBvbmVNaW51cyA9IDEgLSBhOwogICAgICB2YXIgb25lUGx1cyA9IDEgKyBhOwogICAgICB2YXIgZCA9IG9uZU1pbnVzICogb25lTWludXMgKyBiICogYjsKCiAgICAgIHZhciB4ID0gKGQgIT09IDApCiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleCgKICAgICAgICAgICAgICAgICAgICAgIChvbmVQbHVzICogb25lTWludXMgLSBiICogYikgLyBkLAogICAgICAgICAgICAgICAgICAgICAgKGIgKiBvbmVNaW51cyArIG9uZVBsdXMgKiBiKSAvIGQpCiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleCgKICAgICAgICAgICAgICAgICAgICAgIChhICE9PSAtMSkgPyAoYSAvIDApIDogMCwKICAgICAgICAgICAgICAgICAgICAgIChiICE9PSAwKSA/IChiIC8gMCkgOiAwKTsKCiAgICAgIHZhciB0ZW1wID0geFsncmUnXTsKICAgICAgeFsncmUnXSA9IGxvZ0h5cG90KHhbJ3JlJ10sIHhbJ2ltJ10pIC8gMjsKICAgICAgeFsnaW0nXSA9IE1hdGguYXRhbjIoeFsnaW0nXSwgdGVtcCkgLyAyOwogICAgICBpZiAobm9JTSkgewogICAgICAgIHhbJ2ltJ10gPSAteFsnaW0nXTsKICAgICAgfQogICAgICByZXR1cm4geDsKICAgIH0sCgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYWNvdGgKICAgICAqCiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH0KICAgICAqLwogICAgJ2Fjb3RoJzogZnVuY3Rpb24oKSB7CgogICAgICAvLyBhY290aChjKSA9IGxvZygoYysxKSAvIChjLTEpKSAvIDIKCiAgICAgIHZhciBhID0gdGhpc1sncmUnXTsKICAgICAgdmFyIGIgPSB0aGlzWydpbSddOwoKICAgICAgaWYgKGEgPT09IDAgJiYgYiA9PT0gMCkgewogICAgICAgIHJldHVybiBuZXcgQ29tcGxleCgwLCBNYXRoLlBJIC8gMik7CiAgICAgIH0KCiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjsKICAgICAgcmV0dXJuIChkICE9PSAwKQogICAgICAgICAgICAgID8gbmV3IENvbXBsZXgoCiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCwKICAgICAgICAgICAgICAgICAgICAgIC1iIC8gZCkuYXRhbmgoKQogICAgICAgICAgICAgIDogbmV3IENvbXBsZXgoCiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsCiAgICAgICAgICAgICAgICAgICAgICAoYiAhPT0gMCkgPyAtYiAvIDAgOiAwKS5hdGFuaCgpOwogICAgfSwKCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhY3NjaAogICAgICoKICAgICAqIEByZXR1cm5zIHtDb21wbGV4fQogICAgICovCiAgICAnYWNzY2gnOiBmdW5jdGlvbigpIHsKCiAgICAgIC8vIGFjc2NoKGMpID0gbG9nKCgxK3NxcnQoMStjXjIpKS9jKQoKICAgICAgdmFyIGEgPSB0aGlzWydyZSddOwogICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107CgogICAgICBpZiAoYiA9PT0gMCkgewoKICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoCiAgICAgICAgICAgICAgICAoYSAhPT0gMCkKICAgICAgICAgICAgICAgID8gTWF0aC5sb2coYSArIE1hdGguc3FydChhICogYSArIDEpKQogICAgICAgICAgICAgICAgOiBJbmZpbml0eSwgMCk7CiAgICAgIH0KCiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjsKICAgICAgcmV0dXJuIChkICE9PSAwKQogICAgICAgICAgICAgID8gbmV3IENvbXBsZXgoCiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCwKICAgICAgICAgICAgICAgICAgICAgIC1iIC8gZCkuYXNpbmgoKQogICAgICAgICAgICAgIDogbmV3IENvbXBsZXgoCiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsCiAgICAgICAgICAgICAgICAgICAgICAoYiAhPT0gMCkgPyAtYiAvIDAgOiAwKS5hc2luaCgpOwogICAgfSwKCiAgICAvKioKICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhc2VjaAogICAgICoKICAgICAqIEByZXR1cm5zIHtDb21wbGV4fQogICAgICovCiAgICAnYXNlY2gnOiBmdW5jdGlvbigpIHsKCiAgICAgIC8vIGFzZWNoKGMpID0gbG9nKCgxK3NxcnQoMS1jXjIpKS9jKQoKICAgICAgdmFyIGEgPSB0aGlzWydyZSddOwogICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107CgogICAgICBpZiAodGhpc1snaXNaZXJvJ10oKSkgewogICAgICAgIHJldHVybiBDb21wbGV4WydJTkZJTklUWSddOwogICAgICB9CgogICAgICB2YXIgZCA9IGEgKiBhICsgYiAqIGI7CiAgICAgIHJldHVybiAoZCAhPT0gMCkKICAgICAgICAgICAgICA/IG5ldyBDb21wbGV4KAogICAgICAgICAgICAgICAgICAgICAgYSAvIGQsCiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmFjb3NoKCkKICAgICAgICAgICAgICA6IG5ldyBDb21wbGV4KAogICAgICAgICAgICAgICAgICAgICAgKGEgIT09IDApID8gYSAvIDAgOiAwLAogICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYWNvc2goKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggaW52ZXJzZSAxL3oKICAgICAqCiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH0KICAgICAqLwogICAgJ2ludmVyc2UnOiBmdW5jdGlvbigpIHsKCiAgICAgIC8vIDEgLyAwID0gSW5maW5pdHkgYW5kIDEgLyBJbmZpbml0eSA9IDAKICAgICAgaWYgKHRoaXNbJ2lzWmVybyddKCkpIHsKICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTsKICAgICAgfQoKICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpKSB7CiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ1pFUk8nXTsKICAgICAgfQoKICAgICAgdmFyIGEgPSB0aGlzWydyZSddOwogICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107CgogICAgICB2YXIgZCA9IGEgKiBhICsgYiAqIGI7CgogICAgICByZXR1cm4gbmV3IENvbXBsZXgoYSAvIGQsIC1iIC8gZCk7CiAgICB9LAoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY29tcGxleCBjb25qdWdhdGUKICAgICAqCiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH0KICAgICAqLwogICAgJ2Nvbmp1Z2F0ZSc6IGZ1bmN0aW9uKCkgewoKICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHRoaXNbJ3JlJ10sIC10aGlzWydpbSddKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBuZWdhdGVkIGNvbXBsZXggbnVtYmVyCiAgICAgKgogICAgICogQHJldHVybnMge0NvbXBsZXh9CiAgICAgKi8KICAgICduZWcnOiBmdW5jdGlvbigpIHsKCiAgICAgIHJldHVybiBuZXcgQ29tcGxleCgtdGhpc1sncmUnXSwgLXRoaXNbJ2ltJ10pOwogICAgfSwKCiAgICAvKioKICAgICAqIENlaWxzIHRoZSBhY3R1YWwgY29tcGxleCBudW1iZXIKICAgICAqCiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH0KICAgICAqLwogICAgJ2NlaWwnOiBmdW5jdGlvbihwbGFjZXMpIHsKCiAgICAgIHBsYWNlcyA9IE1hdGgucG93KDEwLCBwbGFjZXMgfHwgMCk7CgogICAgICByZXR1cm4gbmV3IENvbXBsZXgoCiAgICAgICAgICAgICAgTWF0aC5jZWlsKHRoaXNbJ3JlJ10gKiBwbGFjZXMpIC8gcGxhY2VzLAogICAgICAgICAgICAgIE1hdGguY2VpbCh0aGlzWydpbSddICogcGxhY2VzKSAvIHBsYWNlcyk7CiAgICB9LAoKICAgIC8qKgogICAgICogRmxvb3JzIHRoZSBhY3R1YWwgY29tcGxleCBudW1iZXIKICAgICAqCiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH0KICAgICAqLwogICAgJ2Zsb29yJzogZnVuY3Rpb24ocGxhY2VzKSB7CgogICAgICBwbGFjZXMgPSBNYXRoLnBvdygxMCwgcGxhY2VzIHx8IDApOwoKICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KAogICAgICAgICAgICAgIE1hdGguZmxvb3IodGhpc1sncmUnXSAqIHBsYWNlcykgLyBwbGFjZXMsCiAgICAgICAgICAgICAgTWF0aC5mbG9vcih0aGlzWydpbSddICogcGxhY2VzKSAvIHBsYWNlcyk7CiAgICB9LAoKICAgIC8qKgogICAgICogQ2VpbHMgdGhlIGFjdHVhbCBjb21wbGV4IG51bWJlcgogICAgICoKICAgICAqIEByZXR1cm5zIHtDb21wbGV4fQogICAgICovCiAgICAncm91bmQnOiBmdW5jdGlvbihwbGFjZXMpIHsKCiAgICAgIHBsYWNlcyA9IE1hdGgucG93KDEwLCBwbGFjZXMgfHwgMCk7CgogICAgICByZXR1cm4gbmV3IENvbXBsZXgoCiAgICAgICAgICAgICAgTWF0aC5yb3VuZCh0aGlzWydyZSddICogcGxhY2VzKSAvIHBsYWNlcywKICAgICAgICAgICAgICBNYXRoLnJvdW5kKHRoaXNbJ2ltJ10gKiBwbGFjZXMpIC8gcGxhY2VzKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBDb21wYXJlcyB0d28gY29tcGxleCBudW1iZXJzCiAgICAgKgogICAgICogKipOb3RlOioqIG5ldyBDb21wbGV4KEluZmluaXR5KS5lcXVhbHMoSW5maW5pdHkpID09PSBmYWxzZQogICAgICoKICAgICAqIEByZXR1cm5zIHtib29sZWFufQogICAgICovCiAgICAnZXF1YWxzJzogZnVuY3Rpb24oYSwgYikgewoKICAgICAgdmFyIHogPSBuZXcgQ29tcGxleChhLCBiKTsKCiAgICAgIHJldHVybiBNYXRoLmFicyh6WydyZSddIC0gdGhpc1sncmUnXSkgPD0gQ29tcGxleFsnRVBTSUxPTiddICYmCiAgICAgICAgICAgICAgTWF0aC5hYnMoelsnaW0nXSAtIHRoaXNbJ2ltJ10pIDw9IENvbXBsZXhbJ0VQU0lMT04nXTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBDbG9uZXMgdGhlIGFjdHVhbCBvYmplY3QKICAgICAqCiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH0KICAgICAqLwogICAgJ2Nsb25lJzogZnVuY3Rpb24oKSB7CgogICAgICByZXR1cm4gbmV3IENvbXBsZXgodGhpc1sncmUnXSwgdGhpc1snaW0nXSk7CiAgICB9LAoKICAgIC8qKgogICAgICogR2V0cyBhIHN0cmluZyBvZiB0aGUgYWN0dWFsIGNvbXBsZXggbnVtYmVyCiAgICAgKgogICAgICogQHJldHVybnMge3N0cmluZ30KICAgICAqLwogICAgJ3RvU3RyaW5nJzogZnVuY3Rpb24oKSB7CgogICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107CiAgICAgIHZhciBiID0gdGhpc1snaW0nXTsKICAgICAgdmFyIHJldCA9ICcnOwoKICAgICAgaWYgKHRoaXNbJ2lzTmFOJ10oKSkgewogICAgICAgIHJldHVybiAnTmFOJzsKICAgICAgfQoKICAgICAgaWYgKHRoaXNbJ2lzWmVybyddKCkpIHsKICAgICAgICByZXR1cm4gJzAnOwogICAgICB9CgogICAgICBpZiAodGhpc1snaXNJbmZpbml0ZSddKCkpIHsKICAgICAgICByZXR1cm4gJ0luZmluaXR5JzsKICAgICAgfQoKICAgICAgaWYgKGEgIT09IDApIHsKICAgICAgICByZXQgKz0gYTsKICAgICAgfQoKICAgICAgaWYgKGIgIT09IDApIHsKCiAgICAgICAgaWYgKGEgIT09IDApIHsKICAgICAgICAgIHJldCArPSBiIDwgMCA/ICcgLSAnIDogJyArICc7CiAgICAgICAgfSBlbHNlIGlmIChiIDwgMCkgewogICAgICAgICAgcmV0ICs9ICctJzsKICAgICAgICB9CgogICAgICAgIGIgPSBNYXRoLmFicyhiKTsKCiAgICAgICAgaWYgKDEgIT09IGIpIHsKICAgICAgICAgIHJldCArPSBiOwogICAgICAgIH0KICAgICAgICByZXQgKz0gJ2knOwogICAgICB9CgogICAgICBpZiAoIXJldCkKICAgICAgICByZXR1cm4gJzAnOwoKICAgICAgcmV0dXJuIHJldDsKICAgIH0sCgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgbnVtYmVyIGFzIGEgdmVjdG9yCiAgICAgKgogICAgICogQHJldHVybnMge0FycmF5fQogICAgICovCiAgICAndG9WZWN0b3InOiBmdW5jdGlvbigpIHsKCiAgICAgIHJldHVybiBbdGhpc1sncmUnXSwgdGhpc1snaW0nXV07CiAgICB9LAoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHJlYWwgdmFsdWUgb2YgdGhlIGN1cnJlbnQgb2JqZWN0CiAgICAgKgogICAgICogQHJldHVybnMge251bWJlcnxudWxsfQogICAgICovCiAgICAndmFsdWVPZic6IGZ1bmN0aW9uKCkgewoKICAgICAgaWYgKHRoaXNbJ2ltJ10gPT09IDApIHsKICAgICAgICByZXR1cm4gdGhpc1sncmUnXTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0sCgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBjb21wbGV4IG51bWJlciBpcyBub3Qgb24gdGhlIFJpZW1hbm4gc3BoZXJlLgogICAgICoKICAgICAqIEByZXR1cm5zIHtib29sZWFufQogICAgICovCiAgICAnaXNOYU4nOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGlzTmFOKHRoaXNbJ3JlJ10pIHx8IGlzTmFOKHRoaXNbJ2ltJ10pOwogICAgfSwKCiAgICAvKioKICAgICAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgYSBjb21wbGV4IG51bWJlciBpcyBhdCB0aGUgemVybyBwb2xlIG9mIHRoZQogICAgICogUmllbWFubiBzcGhlcmUuCiAgICAgKgogICAgICogQHJldHVybnMge2Jvb2xlYW59CiAgICAgKi8KICAgICdpc1plcm8nOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuICgKICAgICAgICAgICAgICAodGhpc1sncmUnXSA9PT0gMCB8fCB0aGlzWydyZSddID09PSAtMCkgJiYKICAgICAgICAgICAgICAodGhpc1snaW0nXSA9PT0gMCB8fCB0aGlzWydpbSddID09PSAtMCkKICAgICAgICAgICAgICApOwogICAgfSwKCiAgICAvKioKICAgICAqIERldGVybWluZXMgd2hldGhlciBhIGNvbXBsZXggbnVtYmVyIGlzIG5vdCBhdCB0aGUgaW5maW5pdHkgcG9sZSBvZiB0aGUKICAgICAqIFJpZW1hbm4gc3BoZXJlLgogICAgICoKICAgICAqIEByZXR1cm5zIHtib29sZWFufQogICAgICovCiAgICAnaXNGaW5pdGUnOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGlzRmluaXRlKHRoaXNbJ3JlJ10pICYmIGlzRmluaXRlKHRoaXNbJ2ltJ10pOwogICAgfSwKCiAgICAvKioKICAgICAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgYSBjb21wbGV4IG51bWJlciBpcyBhdCB0aGUgaW5maW5pdHkgcG9sZSBvZiB0aGUKICAgICAqIFJpZW1hbm4gc3BoZXJlLgogICAgICoKICAgICAqIEByZXR1cm5zIHtib29sZWFufQogICAgICovCiAgICAnaXNJbmZpbml0ZSc6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gISh0aGlzWydpc05hTiddKCkgfHwgdGhpc1snaXNGaW5pdGUnXSgpKTsKICAgIH0KICB9OwoKICBDb21wbGV4WydaRVJPJ10gPSBuZXcgQ29tcGxleCgwLCAwKTsKICBDb21wbGV4WydPTkUnXSA9IG5ldyBDb21wbGV4KDEsIDApOwogIENvbXBsZXhbJ0knXSA9IG5ldyBDb21wbGV4KDAsIDEpOwogIENvbXBsZXhbJ1BJJ10gPSBuZXcgQ29tcGxleChNYXRoLlBJLCAwKTsKICBDb21wbGV4WydFJ10gPSBuZXcgQ29tcGxleChNYXRoLkUsIDApOwogIENvbXBsZXhbJ0lORklOSVRZJ10gPSBuZXcgQ29tcGxleChJbmZpbml0eSwgSW5maW5pdHkpOwogIENvbXBsZXhbJ05BTiddID0gbmV3IENvbXBsZXgoTmFOLCBOYU4pOwogIENvbXBsZXhbJ0VQU0lMT04nXSA9IDFlLTE2OwoKICBpZiAodHJ1ZSkgewogICAgIShfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fID0gW10sIF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fID0gKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gQ29tcGxleDsKICAgIH0pLmFwcGx5KGV4cG9ydHMsIF9fV0VCUEFDS19BTURfREVGSU5FX0FSUkFZX18pLAoJCQkJX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gIT09IHVuZGVmaW5lZCAmJiAobW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXykpOwogIH0gZWxzZSB7fQoKfSkodGhpcyk7CgoKLyoqKi8gfSksCi8qIDEwICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSW5kZXhFcnJvcjsgfSk7Ci8qKgogKiBDcmVhdGUgYSByYW5nZSBlcnJvciB3aXRoIHRoZSBtZXNzYWdlOgogKiAgICAgJ0luZGV4IG91dCBvZiByYW5nZSAoaW5kZXggPCBtaW4pJwogKiAgICAgJ0luZGV4IG91dCBvZiByYW5nZSAoaW5kZXggPCBtYXgpJwogKgogKiBAcGFyYW0ge251bWJlcn0gaW5kZXggICAgIFRoZSBhY3R1YWwgaW5kZXgKICogQHBhcmFtIHtudW1iZXJ9IFttaW49MF0gICBNaW5pbXVtIGluZGV4IChpbmNsdWRlZCkKICogQHBhcmFtIHtudW1iZXJ9IFttYXhdICAgICBNYXhpbXVtIGluZGV4IChleGNsdWRlZCkKICogQGV4dGVuZHMgUmFuZ2VFcnJvcgogKi8KZnVuY3Rpb24gSW5kZXhFcnJvcihpbmRleCwgbWluLCBtYXgpIHsKICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW5kZXhFcnJvcikpIHsKICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7CiAgfQoKICB0aGlzLmluZGV4ID0gaW5kZXg7CgogIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykgewogICAgdGhpcy5taW4gPSAwOwogICAgdGhpcy5tYXggPSBtaW47CiAgfSBlbHNlIHsKICAgIHRoaXMubWluID0gbWluOwogICAgdGhpcy5tYXggPSBtYXg7CiAgfQoKICBpZiAodGhpcy5taW4gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmluZGV4IDwgdGhpcy5taW4pIHsKICAgIHRoaXMubWVzc2FnZSA9ICdJbmRleCBvdXQgb2YgcmFuZ2UgKCcgKyB0aGlzLmluZGV4ICsgJyA8ICcgKyB0aGlzLm1pbiArICcpJzsKICB9IGVsc2UgaWYgKHRoaXMubWF4ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5pbmRleCA+PSB0aGlzLm1heCkgewogICAgdGhpcy5tZXNzYWdlID0gJ0luZGV4IG91dCBvZiByYW5nZSAoJyArIHRoaXMuaW5kZXggKyAnID4gJyArICh0aGlzLm1heCAtIDEpICsgJyknOwogIH0gZWxzZSB7CiAgICB0aGlzLm1lc3NhZ2UgPSAnSW5kZXggb3V0IG9mIHJhbmdlICgnICsgdGhpcy5pbmRleCArICcpJzsKICB9CgogIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjazsKfQpJbmRleEVycm9yLnByb3RvdHlwZSA9IG5ldyBSYW5nZUVycm9yKCk7CkluZGV4RXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZ2VFcnJvcjsKSW5kZXhFcnJvci5wcm90b3R5cGUubmFtZSA9ICdJbmRleEVycm9yJzsKSW5kZXhFcnJvci5wcm90b3R5cGUuaXNJbmRleEVycm9yID0gdHJ1ZTsKCi8qKiovIH0pLAovKiAxMSAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7Cgp2YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXywgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187LyoqCiAqIEBsaWNlbnNlIEZyYWN0aW9uLmpzIHY0LjAuMTIgMDkvMDkvMjAxNQogKiBodHRwOi8vd3d3Lnhhcmcub3JnLzIwMTQvMDMvcmF0aW9uYWwtbnVtYmVycy1pbi1qYXZhc2NyaXB0LwogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTUsIFJvYmVydCBFaXNlbGUgKHJvYmVydEB4YXJnLm9yZykKICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuCiAqKi8KCgovKioKICoKICogVGhpcyBjbGFzcyBvZmZlcnMgdGhlIHBvc3NpYmlsaXR5IHRvIGNhbGN1bGF0ZSBmcmFjdGlvbnMuCiAqIFlvdSBjYW4gcGFzcyBhIGZyYWN0aW9uIGluIGRpZmZlcmVudCBmb3JtYXRzLiBFaXRoZXIgYXMgYXJyYXksIGFzIGRvdWJsZSwgYXMgc3RyaW5nIG9yIGFzIGFuIGludGVnZXIuCiAqCiAqIEFycmF5L09iamVjdCBmb3JtCiAqIFsgMCA9PiA8bm9taW5hdG9yPiwgMSA9PiA8ZGVub21pbmF0b3I+IF0KICogWyBuID0+IDxub21pbmF0b3I+LCBkID0+IDxkZW5vbWluYXRvcj4gXQogKgogKiBJbnRlZ2VyIGZvcm0KICogLSBTaW5nbGUgaW50ZWdlciB2YWx1ZQogKgogKiBEb3VibGUgZm9ybQogKiAtIFNpbmdsZSBkb3VibGUgdmFsdWUKICoKICogU3RyaW5nIGZvcm0KICogMTIzLjQ1NiAtIGEgc2ltcGxlIGRvdWJsZQogKiAxMjMvNDU2IC0gYSBzdHJpbmcgZnJhY3Rpb24KICogMTIzLic0NTYnIC0gYSBkb3VibGUgd2l0aCByZXBlYXRpbmcgZGVjaW1hbCBwbGFjZXMKICogMTIzLig0NTYpIC0gc3lub255bQogKiAxMjMuNDUnNicgLSBhIGRvdWJsZSB3aXRoIHJlcGVhdGluZyBsYXN0IHBsYWNlCiAqIDEyMy40NSg2KSAtIHN5bm9ueW0KICoKICogRXhhbXBsZToKICoKICogdmFyIGYgPSBuZXcgRnJhY3Rpb24oIjkuNCczMSciKTsKICogZi5tdWwoWy00LCAzXSkuZGl2KDQuOSk7CiAqCiAqLwoKKGZ1bmN0aW9uKHJvb3QpIHsKCiAgInVzZSBzdHJpY3QiOwoKICAvLyBNYXhpbXVtIHNlYXJjaCBkZXB0aCBmb3IgY3ljbGljIHJhdGlvbmFsIG51bWJlcnMuIDIwMDAgc2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2guCiAgLy8gRXhhbXBsZTogMS83ID0gMC4oMTQyODU3KSBoYXMgNiByZXBlYXRpbmcgZGVjaW1hbCBwbGFjZXMuCiAgLy8gSWYgTUFYX0NZQ0xFX0xFTiBnZXRzIHJlZHVjZWQsIGxvbmcgY3ljbGVzIHdpbGwgbm90IGJlIGRldGVjdGVkIGFuZCB0b1N0cmluZygpIG9ubHkgZ2V0cyB0aGUgZmlyc3QgMTAgZGlnaXRzCiAgdmFyIE1BWF9DWUNMRV9MRU4gPSAyMDAwOwoKICAvLyBQYXJzZWQgZGF0YSB0byBhdm9pZCBjYWxsaW5nICJuZXciIGFsbCB0aGUgdGltZQogIHZhciBQID0gewogICAgInMiOiAxLAogICAgIm4iOiAwLAogICAgImQiOiAxCiAgfTsKCiAgZnVuY3Rpb24gY3JlYXRlRXJyb3IobmFtZSkgewoKICAgIGZ1bmN0aW9uIGVycm9yQ29uc3RydWN0b3IoKSB7CiAgICAgIHZhciB0ZW1wID0gRXJyb3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgdGVtcFsnbmFtZSddID0gdGhpc1snbmFtZSddID0gbmFtZTsKICAgICAgdGhpc1snc3RhY2snXSA9IHRlbXBbJ3N0YWNrJ107CiAgICAgIHRoaXNbJ21lc3NhZ2UnXSA9IHRlbXBbJ21lc3NhZ2UnXTsKICAgIH0KCiAgICAvKioKICAgICAqIEVycm9yIGNvbnN0cnVjdG9yCiAgICAgKgogICAgICogQGNvbnN0cnVjdG9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIEludGVybWVkaWF0ZUluaGVyaXRvcigpIHt9CiAgICBJbnRlcm1lZGlhdGVJbmhlcml0b3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlOwogICAgZXJyb3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBuZXcgSW50ZXJtZWRpYXRlSW5oZXJpdG9yKCk7CgogICAgcmV0dXJuIGVycm9yQ29uc3RydWN0b3I7CiAgfQoKICB2YXIgRGl2aXNpb25CeVplcm8gPSBGcmFjdGlvblsnRGl2aXNpb25CeVplcm8nXSA9IGNyZWF0ZUVycm9yKCdEaXZpc2lvbkJ5WmVybycpOwogIHZhciBJbnZhbGlkUGFyYW1ldGVyID0gRnJhY3Rpb25bJ0ludmFsaWRQYXJhbWV0ZXInXSA9IGNyZWF0ZUVycm9yKCdJbnZhbGlkUGFyYW1ldGVyJyk7CgogIGZ1bmN0aW9uIGFzc2lnbihuLCBzKSB7CgogICAgaWYgKGlzTmFOKG4gPSBwYXJzZUludChuLCAxMCkpKSB7CiAgICAgIHRocm93SW52YWxpZFBhcmFtKCk7CiAgICB9CiAgICByZXR1cm4gbiAqIHM7CiAgfQoKICBmdW5jdGlvbiB0aHJvd0ludmFsaWRQYXJhbSgpIHsKICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyKCk7CiAgfQoKICB2YXIgcGFyc2UgPSBmdW5jdGlvbihwMSwgcDIpIHsKCiAgICB2YXIgbiA9IDAsIGQgPSAxLCBzID0gMTsKICAgIHZhciB2ID0gMCwgdyA9IDAsIHggPSAwLCB5ID0gMSwgeiA9IDE7CgogICAgdmFyIEEgPSAwLCBCID0gMTsKICAgIHZhciBDID0gMSwgRCA9IDE7CgogICAgdmFyIE4gPSAxMDAwMDAwMDsKICAgIHZhciBNOwoKICAgIGlmIChwMSA9PT0gdW5kZWZpbmVkIHx8IHAxID09PSBudWxsKSB7CiAgICAgIC8qIHZvaWQgKi8KICAgIH0gZWxzZSBpZiAocDIgIT09IHVuZGVmaW5lZCkgewogICAgICBuID0gcDE7CiAgICAgIGQgPSBwMjsKICAgICAgcyA9IG4gKiBkOwogICAgfSBlbHNlCiAgICAgIHN3aXRjaCAodHlwZW9mIHAxKSB7CgogICAgICAgIGNhc2UgIm9iamVjdCI6CiAgICAgICAgewogICAgICAgICAgaWYgKCJkIiBpbiBwMSAmJiAibiIgaW4gcDEpIHsKICAgICAgICAgICAgbiA9IHAxWyJuIl07CiAgICAgICAgICAgIGQgPSBwMVsiZCJdOwogICAgICAgICAgICBpZiAoInMiIGluIHAxKQogICAgICAgICAgICAgIG4gKj0gcDFbInMiXTsKICAgICAgICAgIH0gZWxzZSBpZiAoMCBpbiBwMSkgewogICAgICAgICAgICBuID0gcDFbMF07CiAgICAgICAgICAgIGlmICgxIGluIHAxKQogICAgICAgICAgICAgIGQgPSBwMVsxXTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93SW52YWxpZFBhcmFtKCk7CiAgICAgICAgICB9CiAgICAgICAgICBzID0gbiAqIGQ7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAibnVtYmVyIjoKICAgICAgICB7CiAgICAgICAgICBpZiAocDEgPCAwKSB7CiAgICAgICAgICAgIHMgPSBwMTsKICAgICAgICAgICAgcDEgPSAtcDE7CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKHAxICUgMSA9PT0gMCkgewogICAgICAgICAgICBuID0gcDE7CiAgICAgICAgICB9IGVsc2UgaWYgKHAxID4gMCkgeyAvLyBjaGVjayBmb3IgIT0gMCwgc2NhbGUgd291bGQgYmVjb21lIE5hTiAobG9nKDApKSwgd2hpY2ggY29udmVyZ2VzIHJlYWxseSBzbG93CgogICAgICAgICAgICBpZiAocDEgPj0gMSkgewogICAgICAgICAgICAgIHogPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcigxICsgTWF0aC5sb2cocDEpIC8gTWF0aC5MTjEwKSk7CiAgICAgICAgICAgICAgcDEgLz0gejsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gVXNpbmcgRmFyZXkgU2VxdWVuY2VzCiAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cuam9obmRjb29rLmNvbS9ibG9nLzIwMTAvMTAvMjAvYmVzdC1yYXRpb25hbC1hcHByb3hpbWF0aW9uLwoKICAgICAgICAgICAgd2hpbGUgKEIgPD0gTiAmJiBEIDw9IE4pIHsKICAgICAgICAgICAgICBNID0gKEEgKyBDKSAvIChCICsgRCk7CgogICAgICAgICAgICAgIGlmIChwMSA9PT0gTSkgewogICAgICAgICAgICAgICAgaWYgKEIgKyBEIDw9IE4pIHsKICAgICAgICAgICAgICAgICAgbiA9IEEgKyBDOwogICAgICAgICAgICAgICAgICBkID0gQiArIEQ7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEQgPiBCKSB7CiAgICAgICAgICAgICAgICAgIG4gPSBDOwogICAgICAgICAgICAgICAgICBkID0gRDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIG4gPSBBOwogICAgICAgICAgICAgICAgICBkID0gQjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgICAgIGlmIChwMSA+IE0pIHsKICAgICAgICAgICAgICAgICAgQSArPSBDOwogICAgICAgICAgICAgICAgICBCICs9IEQ7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBDICs9IEE7CiAgICAgICAgICAgICAgICAgIEQgKz0gQjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoQiA+IE4pIHsKICAgICAgICAgICAgICAgICAgbiA9IEM7CiAgICAgICAgICAgICAgICAgIGQgPSBEOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgbiA9IEE7CiAgICAgICAgICAgICAgICAgIGQgPSBCOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBuICo9IHo7CiAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKHAxKSB8fCBpc05hTihwMikpIHsKICAgICAgICAgICAgZCA9IG4gPSBOYU47CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAic3RyaW5nIjoKICAgICAgICB7CiAgICAgICAgICBCID0gcDEubWF0Y2goL1xkK3wuL2cpOwoKICAgICAgICAgIGlmIChCID09PSBudWxsKQogICAgICAgICAgICB0aHJvd0ludmFsaWRQYXJhbSgpOwoKICAgICAgICAgIGlmIChCW0FdID09PSAnLScpIHsvLyBDaGVjayBmb3IgbWludXMgc2lnbiBhdCB0aGUgYmVnaW5uaW5nCiAgICAgICAgICAgIHMgPSAtMTsKICAgICAgICAgICAgQSsrOwogICAgICAgICAgfSBlbHNlIGlmIChCW0FdID09PSAnKycpIHsvLyBDaGVjayBmb3IgcGx1cyBzaWduIGF0IHRoZSBiZWdpbm5pbmcKICAgICAgICAgICAgQSsrOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChCLmxlbmd0aCA9PT0gQSArIDEpIHsgLy8gQ2hlY2sgaWYgaXQncyBqdXN0IGEgc2ltcGxlIG51bWJlciAiMTIzNCIKICAgICAgICAgICAgdyA9IGFzc2lnbihCW0ErK10sIHMpOwogICAgICAgICAgfSBlbHNlIGlmIChCW0EgKyAxXSA9PT0gJy4nIHx8IEJbQV0gPT09ICcuJykgeyAvLyBDaGVjayBpZiBpdCdzIGEgZGVjaW1hbCBudW1iZXIKCiAgICAgICAgICAgIGlmIChCW0FdICE9PSAnLicpIHsgLy8gSGFuZGxlIDAuNSBhbmQgLjUKICAgICAgICAgICAgICB2ID0gYXNzaWduKEJbQSsrXSwgcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgQSsrOwoKICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGRlY2ltYWwgcGxhY2VzCiAgICAgICAgICAgIGlmIChBICsgMSA9PT0gQi5sZW5ndGggfHwgQltBICsgMV0gPT09ICcoJyAmJiBCW0EgKyAzXSA9PT0gJyknIHx8IEJbQSArIDFdID09PSAiJyIgJiYgQltBICsgM10gPT09ICInIikgewogICAgICAgICAgICAgIHcgPSBhc3NpZ24oQltBXSwgcyk7CiAgICAgICAgICAgICAgeSA9IE1hdGgucG93KDEwLCBCW0FdLmxlbmd0aCk7CiAgICAgICAgICAgICAgQSsrOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBDaGVjayBmb3IgcmVwZWF0aW5nIHBsYWNlcwogICAgICAgICAgICBpZiAoQltBXSA9PT0gJygnICYmIEJbQSArIDJdID09PSAnKScgfHwgQltBXSA9PT0gIiciICYmIEJbQSArIDJdID09PSAiJyIpIHsKICAgICAgICAgICAgICB4ID0gYXNzaWduKEJbQSArIDFdLCBzKTsKICAgICAgICAgICAgICB6ID0gTWF0aC5wb3coMTAsIEJbQSArIDFdLmxlbmd0aCkgLSAxOwogICAgICAgICAgICAgIEEgKz0gMzsKICAgICAgICAgICAgfQoKICAgICAgICAgIH0gZWxzZSBpZiAoQltBICsgMV0gPT09ICcvJyB8fCBCW0EgKyAxXSA9PT0gJzonKSB7IC8vIENoZWNrIGZvciBhIHNpbXBsZSBmcmFjdGlvbiAiMTIzLzQ1NiIgb3IgIjEyMzo0NTYiCiAgICAgICAgICAgIHcgPSBhc3NpZ24oQltBXSwgcyk7CiAgICAgICAgICAgIHkgPSBhc3NpZ24oQltBICsgMl0sIDEpOwogICAgICAgICAgICBBICs9IDM7CiAgICAgICAgICB9IGVsc2UgaWYgKEJbQSArIDNdID09PSAnLycgJiYgQltBICsgMV0gPT09ICcgJykgeyAvLyBDaGVjayBmb3IgYSBjb21wbGV4IGZyYWN0aW9uICIxMjMgMS8yIgogICAgICAgICAgICB2ID0gYXNzaWduKEJbQV0sIHMpOwogICAgICAgICAgICB3ID0gYXNzaWduKEJbQSArIDJdLCBzKTsKICAgICAgICAgICAgeSA9IGFzc2lnbihCW0EgKyA0XSwgMSk7CiAgICAgICAgICAgIEEgKz0gNTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoQi5sZW5ndGggPD0gQSkgeyAvLyBDaGVjayBmb3IgbW9yZSB0b2tlbnMgb24gdGhlIHN0YWNrCiAgICAgICAgICAgIGQgPSB5ICogejsKICAgICAgICAgICAgcyA9IC8qIHZvaWQgKi8KICAgICAgICAgICAgICAgICAgICBuID0geCArIGQgKiB2ICsgeiAqIHc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQoKICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaCBvbiBlcnJvciAqLwogICAgICAgIH0KICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdGhyb3dJbnZhbGlkUGFyYW0oKTsKICAgICAgfQoKICAgIGlmIChkID09PSAwKSB7CiAgICAgIHRocm93IG5ldyBEaXZpc2lvbkJ5WmVybygpOwogICAgfQoKICAgIFBbInMiXSA9IHMgPCAwID8gLTEgOiAxOwogICAgUFsibiJdID0gTWF0aC5hYnMobik7CiAgICBQWyJkIl0gPSBNYXRoLmFicyhkKTsKICB9OwoKICBmdW5jdGlvbiBtb2Rwb3coYiwgZSwgbSkgewoKICAgIHZhciByID0gMTsKICAgIGZvciAoOyBlID4gMDsgYiA9IChiICogYikgJSBtLCBlID4+PSAxKSB7CgogICAgICBpZiAoZSAmIDEpIHsKICAgICAgICByID0gKHIgKiBiKSAlIG07CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByOwogIH0KCgogIGZ1bmN0aW9uIGN5Y2xlTGVuKG4sIGQpIHsKCiAgICBmb3IgKDsgZCAlIDIgPT09IDA7CiAgICAgICAgICAgIGQgLz0gMikgewogICAgfQoKICAgIGZvciAoOyBkICUgNSA9PT0gMDsKICAgICAgICAgICAgZCAvPSA1KSB7CiAgICB9CgogICAgaWYgKGQgPT09IDEpIC8vIENhdGNoIG5vbi1jeWNsaWMgbnVtYmVycwogICAgICByZXR1cm4gMDsKCiAgICAvLyBJZiB3ZSB3b3VsZCBsaWtlIHRvIGNvbXB1dGUgcmVhbGx5IGxhcmdlIG51bWJlcnMgcXVpY2tlciwgd2UgY291bGQgbWFrZSB1c2Ugb2YgRmVybWF0J3MgbGl0dGxlIHRoZW9yZW06CiAgICAvLyAxMF4oZC0xKSAlIGQgPT0gMQogICAgLy8gSG93ZXZlciwgd2UgZG9uJ3QgbmVlZCBzdWNoIGxhcmdlIG51bWJlcnMgYW5kIE1BWF9DWUNMRV9MRU4gc2hvdWxkIGJlIHRoZSBjYXBzdG9uZSwKICAgIC8vIGFzIHdlIHdhbnQgdG8gdHJhbnNsYXRlIHRoZSBudW1iZXJzIHRvIHN0cmluZ3MuCgogICAgdmFyIHJlbSA9IDEwICUgZDsKICAgIHZhciB0ID0gMTsKCiAgICBmb3IgKDsgcmVtICE9PSAxOyB0KyspIHsKICAgICAgcmVtID0gcmVtICogMTAgJSBkOwoKICAgICAgaWYgKHQgPiBNQVhfQ1lDTEVfTEVOKQogICAgICAgIHJldHVybiAwOyAvLyBSZXR1cm5pbmcgMCBoZXJlIG1lYW5zIHRoYXQgd2UgZG9uJ3QgcHJpbnQgaXQgYXMgYSBjeWNsaWMgbnVtYmVyLiBJdCdzIGxpa2VseSB0aGF0IHRoZSBhbnN3ZXIgaXMgYGQtMWAKICAgIH0KICAgIHJldHVybiB0OwogIH0KCgogICAgIGZ1bmN0aW9uIGN5Y2xlU3RhcnQobiwgZCwgbGVuKSB7CgogICAgdmFyIHJlbTEgPSAxOwogICAgdmFyIHJlbTIgPSBtb2Rwb3coMTAsIGxlbiwgZCk7CgogICAgZm9yICh2YXIgdCA9IDA7IHQgPCAzMDA7IHQrKykgeyAvLyBzIDwgfmxvZzEwKE51bWJlci5NQVhfVkFMVUUpCiAgICAgIC8vIFNvbHZlIDEwXnMgPT0gMTBeKHMrdCkgKG1vZCBkKQoKICAgICAgaWYgKHJlbTEgPT09IHJlbTIpCiAgICAgICAgcmV0dXJuIHQ7CgogICAgICByZW0xID0gcmVtMSAqIDEwICUgZDsKICAgICAgcmVtMiA9IHJlbTIgKiAxMCAlIGQ7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgogIGZ1bmN0aW9uIGdjZChhLCBiKSB7CgogICAgaWYgKCFhKQogICAgICByZXR1cm4gYjsKICAgIGlmICghYikKICAgICAgcmV0dXJuIGE7CgogICAgd2hpbGUgKDEpIHsKICAgICAgYSAlPSBiOwogICAgICBpZiAoIWEpCiAgICAgICAgcmV0dXJuIGI7CiAgICAgIGIgJT0gYTsKICAgICAgaWYgKCFiKQogICAgICAgIHJldHVybiBhOwogICAgfQogIH07CgogIC8qKgogICAqIE1vZHVsZSBjb25zdHJ1Y3RvcgogICAqCiAgICogQGNvbnN0cnVjdG9yCiAgICogQHBhcmFtIHtudW1iZXJ8RnJhY3Rpb249fSBhCiAgICogQHBhcmFtIHtudW1iZXI9fSBiCiAgICovCiAgZnVuY3Rpb24gRnJhY3Rpb24oYSwgYikgewoKICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBGcmFjdGlvbikpIHsKICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihhLCBiKTsKICAgIH0KCiAgICBwYXJzZShhLCBiKTsKCiAgICBpZiAoRnJhY3Rpb25bJ1JFRFVDRSddKSB7CiAgICAgIGEgPSBnY2QoUFsiZCJdLCBQWyJuIl0pOyAvLyBBYnVzZSBhCiAgICB9IGVsc2UgewogICAgICBhID0gMTsKICAgIH0KCiAgICB0aGlzWyJzIl0gPSBQWyJzIl07CiAgICB0aGlzWyJuIl0gPSBQWyJuIl0gLyBhOwogICAgdGhpc1siZCJdID0gUFsiZCJdIC8gYTsKICB9CgogIC8qKgogICAqIEJvb2xlYW4gZ2xvYmFsIHZhcmlhYmxlIHRvIGJlIGFibGUgdG8gZGlzYWJsZSBhdXRvbWF0aWMgcmVkdWN0aW9uIG9mIHRoZSBmcmFjdGlvbgogICAqCiAgICovCiAgRnJhY3Rpb25bJ1JFRFVDRSddID0gMTsKCiAgRnJhY3Rpb24ucHJvdG90eXBlID0gewoKICAgICJzIjogMSwKICAgICJuIjogMCwKICAgICJkIjogMSwKCiAgICAvKioKICAgICAqIENhbGN1bGF0ZXMgdGhlIGFic29sdXRlIHZhbHVlCiAgICAgKgogICAgICogRXg6IG5ldyBGcmFjdGlvbigtNCkuYWJzKCkgPT4gNAogICAgICoqLwogICAgImFicyI6IGZ1bmN0aW9uKCkgewoKICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih0aGlzWyJuIl0sIHRoaXNbImQiXSk7CiAgICB9LAoKICAgIC8qKgogICAgICogSW52ZXJ0cyB0aGUgc2lnbiBvZiB0aGUgY3VycmVudCBmcmFjdGlvbgogICAgICoKICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oLTQpLm5lZygpID0+IDQKICAgICAqKi8KICAgICJuZWciOiBmdW5jdGlvbigpIHsKCiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oLXRoaXNbInMiXSAqIHRoaXNbIm4iXSwgdGhpc1siZCJdKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBBZGRzIHR3byByYXRpb25hbCBudW1iZXJzCiAgICAgKgogICAgICogRXg6IG5ldyBGcmFjdGlvbih7bjogMiwgZDogM30pLmFkZCgiMTQuOSIpID0+IDQ2NyAvIDMwCiAgICAgKiovCiAgICAiYWRkIjogZnVuY3Rpb24oYSwgYikgewoKICAgICAgcGFyc2UoYSwgYik7CiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oCiAgICAgICAgICAgICAgdGhpc1sicyJdICogdGhpc1sibiJdICogUFsiZCJdICsgUFsicyJdICogdGhpc1siZCJdICogUFsibiJdLAogICAgICAgICAgICAgIHRoaXNbImQiXSAqIFBbImQiXQogICAgICAgICAgICAgICk7CiAgICB9LAoKICAgIC8qKgogICAgICogU3VidHJhY3RzIHR3byByYXRpb25hbCBudW1iZXJzCiAgICAgKgogICAgICogRXg6IG5ldyBGcmFjdGlvbih7bjogMiwgZDogM30pLmFkZCgiMTQuOSIpID0+IC00MjcgLyAzMAogICAgICoqLwogICAgInN1YiI6IGZ1bmN0aW9uKGEsIGIpIHsKCiAgICAgIHBhcnNlKGEsIGIpOwogICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKAogICAgICAgICAgICAgIHRoaXNbInMiXSAqIHRoaXNbIm4iXSAqIFBbImQiXSAtIFBbInMiXSAqIHRoaXNbImQiXSAqIFBbIm4iXSwKICAgICAgICAgICAgICB0aGlzWyJkIl0gKiBQWyJkIl0KICAgICAgICAgICAgICApOwogICAgfSwKCiAgICAvKioKICAgICAqIE11bHRpcGxpZXMgdHdvIHJhdGlvbmFsIG51bWJlcnMKICAgICAqCiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKCItMTcuKDM0NSkiKS5tdWwoMykgPT4gNTc3NiAvIDExMQogICAgICoqLwogICAgIm11bCI6IGZ1bmN0aW9uKGEsIGIpIHsKCiAgICAgIHBhcnNlKGEsIGIpOwogICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKAogICAgICAgICAgICAgIHRoaXNbInMiXSAqIFBbInMiXSAqIHRoaXNbIm4iXSAqIFBbIm4iXSwKICAgICAgICAgICAgICB0aGlzWyJkIl0gKiBQWyJkIl0KICAgICAgICAgICAgICApOwogICAgfSwKCiAgICAvKioKICAgICAqIERpdmlkZXMgdHdvIHJhdGlvbmFsIG51bWJlcnMKICAgICAqCiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKCItMTcuKDM0NSkiKS5pbnZlcnNlKCkuZGl2KDMpCiAgICAgKiovCiAgICAiZGl2IjogZnVuY3Rpb24oYSwgYikgewoKICAgICAgcGFyc2UoYSwgYik7CiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oCiAgICAgICAgICAgICAgdGhpc1sicyJdICogUFsicyJdICogdGhpc1sibiJdICogUFsiZCJdLAogICAgICAgICAgICAgIHRoaXNbImQiXSAqIFBbIm4iXQogICAgICAgICAgICAgICk7CiAgICB9LAoKICAgIC8qKgogICAgICogQ2xvbmVzIHRoZSBhY3R1YWwgb2JqZWN0CiAgICAgKgogICAgICogRXg6IG5ldyBGcmFjdGlvbigiLTE3LigzNDUpIikuY2xvbmUoKQogICAgICoqLwogICAgImNsb25lIjogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24odGhpcyk7CiAgICB9LAoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlcyB0aGUgbW9kdWxvIG9mIHR3byByYXRpb25hbCBudW1iZXJzIC0gYSBtb3JlIHByZWNpc2UgZm1vZAogICAgICoKICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oJzQuKDMpJykubW9kKFs3LCA4XSkgPT4gKDEzLzMpICUgKDcvOCkgPSAoNS82KQogICAgICoqLwogICAgIm1vZCI6IGZ1bmN0aW9uKGEsIGIpIHsKCiAgICAgIGlmIChpc05hTih0aGlzWyduJ10pIHx8IGlzTmFOKHRoaXNbJ2QnXSkpIHsKICAgICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE5hTik7CiAgICAgIH0KCiAgICAgIGlmIChhID09PSB1bmRlZmluZWQpIHsKICAgICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKHRoaXNbInMiXSAqIHRoaXNbIm4iXSAlIHRoaXNbImQiXSwgMSk7CiAgICAgIH0KCiAgICAgIHBhcnNlKGEsIGIpOwogICAgICBpZiAoMCA9PT0gUFsibiJdICYmIDAgPT09IHRoaXNbImQiXSkgewogICAgICAgIEZyYWN0aW9uKDAsIDApOyAvLyBUaHJvdyBEaXZpc2lvbkJ5WmVybwogICAgICB9CgogICAgICAvKgogICAgICAgKiBGaXJzdCBzaWxseSBhdHRlbXB0LCBraW5kYSBzbG93CiAgICAgICAqCiAgICAgICByZXR1cm4gdGhhdFsic3ViIl0oewogICAgICAgIm4iOiBudW1bIm4iXSAqIE1hdGguZmxvb3IoKHRoaXMubiAvIHRoaXMuZCkgLyAobnVtLm4gLyBudW0uZCkpLAogICAgICAgImQiOiBudW1bImQiXSwKICAgICAgICJzIjogdGhpc1sicyJdCiAgICAgICB9KTsqLwoKICAgICAgLyoKICAgICAgICogTmV3IGF0dGVtcHQ6IGExIC8gYjEgPSBhMiAvIGIyICogcSArIHIKICAgICAgICogPT4gYjIgKiBhMSA9IGEyICogYjEgKiBxICsgYjEgKiBiMiAqIHIKICAgICAgICogPT4gKGIyICogYTEgJSBhMiAqIGIxKSAvIChiMSAqIGIyKQogICAgICAgKi8KICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbigKICAgICAgICAgICAgICB0aGlzWyJzIl0gKiAoUFsiZCJdICogdGhpc1sibiJdKSAlIChQWyJuIl0gKiB0aGlzWyJkIl0pLAogICAgICAgICAgICAgIFBbImQiXSAqIHRoaXNbImQiXQogICAgICAgICAgICAgICk7CiAgICB9LAoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlcyB0aGUgZnJhY3Rpb25hbCBnY2Qgb2YgdHdvIHJhdGlvbmFsIG51bWJlcnMKICAgICAqCiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKDUsOCkuZ2NkKDMsNykgPT4gMS81NgogICAgICovCiAgICAiZ2NkIjogZnVuY3Rpb24oYSwgYikgewoKICAgICAgcGFyc2UoYSwgYik7CgogICAgICAvLyBnY2QoYSAvIGIsIGMgLyBkKSA9IGdjZChhLCBjKSAvIGxjbShiLCBkKQoKICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihnY2QoUFsibiJdLCB0aGlzWyJuIl0pICogZ2NkKFBbImQiXSwgdGhpc1siZCJdKSwgUFsiZCJdICogdGhpc1siZCJdKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGVzIHRoZSBmcmFjdGlvbmFsIGxjbSBvZiB0d28gcmF0aW9uYWwgbnVtYmVycwogICAgICoKICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oNSw4KS5sY20oMyw3KSA9PiAxNQogICAgICovCiAgICAibGNtIjogZnVuY3Rpb24oYSwgYikgewoKICAgICAgcGFyc2UoYSwgYik7CgogICAgICAvLyBsY20oYSAvIGIsIGMgLyBkKSA9IGxjbShhLCBjKSAvIGdjZChiLCBkKQoKICAgICAgaWYgKFBbIm4iXSA9PT0gMCAmJiB0aGlzWyJuIl0gPT09IDApIHsKICAgICAgICByZXR1cm4gbmV3IEZyYWN0aW9uOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oUFsibiJdICogdGhpc1sibiJdLCBnY2QoUFsibiJdLCB0aGlzWyJuIl0pICogZ2NkKFBbImQiXSwgdGhpc1siZCJdKSk7CiAgICB9LAoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlcyB0aGUgY2VpbCBvZiBhIHJhdGlvbmFsIG51bWJlcgogICAgICoKICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oJzQuKDMpJykuY2VpbCgpID0+ICg1IC8gMSkKICAgICAqKi8KICAgICJjZWlsIjogZnVuY3Rpb24ocGxhY2VzKSB7CgogICAgICBwbGFjZXMgPSBNYXRoLnBvdygxMCwgcGxhY2VzIHx8IDApOwoKICAgICAgaWYgKGlzTmFOKHRoaXNbIm4iXSkgfHwgaXNOYU4odGhpc1siZCJdKSkgewogICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTmFOKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE1hdGguY2VpbChwbGFjZXMgKiB0aGlzWyJzIl0gKiB0aGlzWyJuIl0gLyB0aGlzWyJkIl0pLCBwbGFjZXMpOwogICAgfSwKCiAgICAvKioKICAgICAqIENhbGN1bGF0ZXMgdGhlIGZsb29yIG9mIGEgcmF0aW9uYWwgbnVtYmVyCiAgICAgKgogICAgICogRXg6IG5ldyBGcmFjdGlvbignNC4oMyknKS5mbG9vcigpID0+ICg0IC8gMSkKICAgICAqKi8KICAgICJmbG9vciI6IGZ1bmN0aW9uKHBsYWNlcykgewoKICAgICAgcGxhY2VzID0gTWF0aC5wb3coMTAsIHBsYWNlcyB8fCAwKTsKCiAgICAgIGlmIChpc05hTih0aGlzWyJuIl0pIHx8IGlzTmFOKHRoaXNbImQiXSkpIHsKICAgICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE5hTik7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihNYXRoLmZsb29yKHBsYWNlcyAqIHRoaXNbInMiXSAqIHRoaXNbIm4iXSAvIHRoaXNbImQiXSksIHBsYWNlcyk7CiAgICB9LAoKICAgIC8qKgogICAgICogUm91bmRzIGEgcmF0aW9uYWwgbnVtYmVycwogICAgICoKICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oJzQuKDMpJykucm91bmQoKSA9PiAoNCAvIDEpCiAgICAgKiovCiAgICAicm91bmQiOiBmdW5jdGlvbihwbGFjZXMpIHsKCiAgICAgIHBsYWNlcyA9IE1hdGgucG93KDEwLCBwbGFjZXMgfHwgMCk7CgogICAgICBpZiAoaXNOYU4odGhpc1sibiJdKSB8fCBpc05hTih0aGlzWyJkIl0pKSB7CiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihOYU4pOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTWF0aC5yb3VuZChwbGFjZXMgKiB0aGlzWyJzIl0gKiB0aGlzWyJuIl0gLyB0aGlzWyJkIl0pLCBwbGFjZXMpOwogICAgfSwKCiAgICAvKioKICAgICAqIEdldHMgdGhlIGludmVyc2Ugb2YgdGhlIGZyYWN0aW9uLCBtZWFucyBudW1lcmF0b3IgYW5kIGRlbnVtZXJhdG9yIGFyZSBleGNoYW5nZWQKICAgICAqCiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFstMywgNF0pLmludmVyc2UoKSA9PiAtNCAvIDMKICAgICAqKi8KICAgICJpbnZlcnNlIjogZnVuY3Rpb24oKSB7CgogICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKHRoaXNbInMiXSAqIHRoaXNbImQiXSwgdGhpc1sibiJdKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGVzIHRoZSBmcmFjdGlvbiB0byBzb21lIGludGVnZXIgZXhwb25lbnQKICAgICAqCiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKC0xLDIpLnBvdygtMykgPT4gLTgKICAgICAqLwogICAgInBvdyI6IGZ1bmN0aW9uKG0pIHsKCiAgICAgIGlmIChtIDwgMCkgewogICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTWF0aC5wb3codGhpc1sncyddICogdGhpc1siZCJdLCAtbSksIE1hdGgucG93KHRoaXNbIm4iXSwgLW0pKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE1hdGgucG93KHRoaXNbJ3MnXSAqIHRoaXNbIm4iXSwgbSksIE1hdGgucG93KHRoaXNbImQiXSwgbSkpOwogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgdHdvIHJhdGlvbmFsIG51bWJlcnMgYXJlIHRoZSBzYW1lCiAgICAgKgogICAgICogRXg6IG5ldyBGcmFjdGlvbigxOS42KS5lcXVhbHMoWzk4LCA1XSk7CiAgICAgKiovCiAgICAiZXF1YWxzIjogZnVuY3Rpb24oYSwgYikgewoKICAgICAgcGFyc2UoYSwgYik7CiAgICAgIHJldHVybiB0aGlzWyJzIl0gKiB0aGlzWyJuIl0gKiBQWyJkIl0gPT09IFBbInMiXSAqIFBbIm4iXSAqIHRoaXNbImQiXTsgLy8gU2FtZSBhcyBjb21wYXJlKCkgPT09IDAKICAgIH0sCgogICAgLyoqCiAgICAgKiBDaGVjayBpZiB0d28gcmF0aW9uYWwgbnVtYmVycyBhcmUgdGhlIHNhbWUKICAgICAqCiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKDE5LjYpLmVxdWFscyhbOTgsIDVdKTsKICAgICAqKi8KICAgICJjb21wYXJlIjogZnVuY3Rpb24oYSwgYikgewoKICAgICAgcGFyc2UoYSwgYik7CiAgICAgIHZhciB0ID0gKHRoaXNbInMiXSAqIHRoaXNbIm4iXSAqIFBbImQiXSAtIFBbInMiXSAqIFBbIm4iXSAqIHRoaXNbImQiXSk7CiAgICAgIHJldHVybiAoMCA8IHQpIC0gKHQgPCAwKTsKICAgIH0sCgogICAgInNpbXBsaWZ5IjogZnVuY3Rpb24oZXBzKSB7CgogICAgICAvLyBGaXJzdCBuYWl2ZSBpbXBsZW1lbnRhdGlvbiwgbmVlZHMgaW1wcm92ZW1lbnQKCiAgICAgIGlmIChpc05hTih0aGlzWyduJ10pIHx8IGlzTmFOKHRoaXNbJ2QnXSkpIHsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfQoKICAgICAgdmFyIGNvbnQgPSB0aGlzWydhYnMnXSgpWyd0b0NvbnRpbnVlZCddKCk7CgogICAgICBlcHMgPSBlcHMgfHwgMC4wMDE7CgogICAgICBmdW5jdGlvbiByZWMoYSkgewogICAgICAgIGlmIChhLmxlbmd0aCA9PT0gMSkKICAgICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oYVswXSk7CiAgICAgICAgcmV0dXJuIHJlYyhhLnNsaWNlKDEpKVsnaW52ZXJzZSddKClbJ2FkZCddKGFbMF0pOwogICAgICB9CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnQubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgdG1wID0gcmVjKGNvbnQuc2xpY2UoMCwgaSArIDEpKTsKICAgICAgICBpZiAodG1wWydzdWInXSh0aGlzWydhYnMnXSgpKVsnYWJzJ10oKS52YWx1ZU9mKCkgPCBlcHMpIHsKICAgICAgICAgIHJldHVybiB0bXBbJ211bCddKHRoaXNbJ3MnXSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSwKCiAgICAvKioKICAgICAqIENoZWNrIGlmIHR3byByYXRpb25hbCBudW1iZXJzIGFyZSBkaXZpc2libGUKICAgICAqCiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKDE5LjYpLmRpdmlzaWJsZSgxLjUpOwogICAgICovCiAgICAiZGl2aXNpYmxlIjogZnVuY3Rpb24oYSwgYikgewoKICAgICAgcGFyc2UoYSwgYik7CiAgICAgIHJldHVybiAhKCEoUFsibiJdICogdGhpc1siZCJdKSB8fCAoKHRoaXNbIm4iXSAqIFBbImQiXSkgJSAoUFsibiJdICogdGhpc1siZCJdKSkpOwogICAgfSwKCiAgICAvKioKICAgICAqIFJldHVybnMgYSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmcmFjdGlvbgogICAgICoKICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oIjEwMC4nOTE4MjMnIikudmFsdWVPZigpID0+IDEwMC45MTgyMzkxODIzOTE4MwogICAgICoqLwogICAgJ3ZhbHVlT2YnOiBmdW5jdGlvbigpIHsKCiAgICAgIHJldHVybiB0aGlzWyJzIl0gKiB0aGlzWyJuIl0gLyB0aGlzWyJkIl07CiAgICB9LAoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0cmluZy1mcmFjdGlvbiByZXByZXNlbnRhdGlvbiBvZiBhIEZyYWN0aW9uIG9iamVjdAogICAgICoKICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oIjEuJzMnIikudG9GcmFjdGlvbigpID0+ICI0IDEvMyIKICAgICAqKi8KICAgICd0b0ZyYWN0aW9uJzogZnVuY3Rpb24oZXhjbHVkZVdob2xlKSB7CgogICAgICB2YXIgd2hvbGUsIHN0ciA9ICIiOwogICAgICB2YXIgbiA9IHRoaXNbIm4iXTsKICAgICAgdmFyIGQgPSB0aGlzWyJkIl07CiAgICAgIGlmICh0aGlzWyJzIl0gPCAwKSB7CiAgICAgICAgc3RyICs9ICctJzsKICAgICAgfQoKICAgICAgaWYgKGQgPT09IDEpIHsKICAgICAgICBzdHIgKz0gbjsKICAgICAgfSBlbHNlIHsKCiAgICAgICAgaWYgKGV4Y2x1ZGVXaG9sZSAmJiAod2hvbGUgPSBNYXRoLmZsb29yKG4gLyBkKSkgPiAwKSB7CiAgICAgICAgICBzdHIgKz0gd2hvbGU7CiAgICAgICAgICBzdHIgKz0gIiAiOwogICAgICAgICAgbiAlPSBkOwogICAgICAgIH0KCiAgICAgICAgc3RyICs9IG47CiAgICAgICAgc3RyICs9ICcvJzsKICAgICAgICBzdHIgKz0gZDsKICAgICAgfQogICAgICByZXR1cm4gc3RyOwogICAgfSwKCiAgICAvKioKICAgICAqIFJldHVybnMgYSBsYXRleCByZXByZXNlbnRhdGlvbiBvZiBhIEZyYWN0aW9uIG9iamVjdAogICAgICoKICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oIjEuJzMnIikudG9MYXRleCgpID0+ICJcZnJhY3s0fXszfSIKICAgICAqKi8KICAgICd0b0xhdGV4JzogZnVuY3Rpb24oZXhjbHVkZVdob2xlKSB7CgogICAgICB2YXIgd2hvbGUsIHN0ciA9ICIiOwogICAgICB2YXIgbiA9IHRoaXNbIm4iXTsKICAgICAgdmFyIGQgPSB0aGlzWyJkIl07CiAgICAgIGlmICh0aGlzWyJzIl0gPCAwKSB7CiAgICAgICAgc3RyICs9ICctJzsKICAgICAgfQoKICAgICAgaWYgKGQgPT09IDEpIHsKICAgICAgICBzdHIgKz0gbjsKICAgICAgfSBlbHNlIHsKCiAgICAgICAgaWYgKGV4Y2x1ZGVXaG9sZSAmJiAod2hvbGUgPSBNYXRoLmZsb29yKG4gLyBkKSkgPiAwKSB7CiAgICAgICAgICBzdHIgKz0gd2hvbGU7CiAgICAgICAgICBuICU9IGQ7CiAgICAgICAgfQoKICAgICAgICBzdHIgKz0gIlxcZnJhY3siOwogICAgICAgIHN0ciArPSBuOwogICAgICAgIHN0ciArPSAnfXsnOwogICAgICAgIHN0ciArPSBkOwogICAgICAgIHN0ciArPSAnfSc7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0cjsKICAgIH0sCgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbnRpbnVlZCBmcmFjdGlvbiBlbGVtZW50cwogICAgICoKICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oIjcvOCIpLnRvQ29udGludWVkKCkgPT4gWzAsMSw3XQogICAgICovCiAgICAndG9Db250aW51ZWQnOiBmdW5jdGlvbigpIHsKCiAgICAgIHZhciB0OwogICAgICB2YXIgYSA9IHRoaXNbJ24nXTsKICAgICAgdmFyIGIgPSB0aGlzWydkJ107CiAgICAgIHZhciByZXMgPSBbXTsKCiAgICAgIGlmIChpc05hTih0aGlzWyduJ10pIHx8IGlzTmFOKHRoaXNbJ2QnXSkpIHsKICAgICAgICByZXR1cm4gcmVzOwogICAgICB9CgogICAgICBkbyB7CiAgICAgICAgcmVzLnB1c2goTWF0aC5mbG9vcihhIC8gYikpOwogICAgICAgIHQgPSBhICUgYjsKICAgICAgICBhID0gYjsKICAgICAgICBiID0gdDsKICAgICAgfSB3aGlsZSAoYSAhPT0gMSk7CgogICAgICByZXR1cm4gcmVzOwogICAgfSwKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBmcmFjdGlvbiB3aXRoIGFsbCBkaWdpdHMKICAgICAqCiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKCIxMDAuJzkxODIzJyIpLnRvU3RyaW5nKCkgPT4gIjEwMC4oOTE4MjMpIgogICAgICoqLwogICAgJ3RvU3RyaW5nJzogZnVuY3Rpb24oZGVjKSB7CgogICAgICB2YXIgZzsKICAgICAgdmFyIE4gPSB0aGlzWyJuIl07CiAgICAgIHZhciBEID0gdGhpc1siZCJdOwoKICAgICAgaWYgKGlzTmFOKE4pIHx8IGlzTmFOKEQpKSB7CiAgICAgICAgcmV0dXJuICJOYU4iOwogICAgICB9CgogICAgICBpZiAoIUZyYWN0aW9uWydSRURVQ0UnXSkgewogICAgICAgIGcgPSBnY2QoTiwgRCk7CiAgICAgICAgTiAvPSBnOwogICAgICAgIEQgLz0gZzsKICAgICAgfQoKICAgICAgZGVjID0gZGVjIHx8IDE1OyAvLyAxNSA9IGRlY2ltYWwgcGxhY2VzIHdoZW4gbm8gcmVwaXRhdGlvbgoKICAgICAgdmFyIGN5Y0xlbiA9IGN5Y2xlTGVuKE4sIEQpOyAvLyBDeWNsZSBsZW5ndGgKICAgICAgdmFyIGN5Y09mZiA9IGN5Y2xlU3RhcnQoTiwgRCwgY3ljTGVuKTsgLy8gQ3ljbGUgc3RhcnQKCiAgICAgIHZhciBzdHIgPSB0aGlzWydzJ10gPT09IC0xID8gIi0iIDogIiI7CgogICAgICBzdHIgKz0gTiAvIEQgfCAwOwoKICAgICAgTiAlPSBEOwogICAgICBOICo9IDEwOwoKICAgICAgaWYgKE4pCiAgICAgICAgc3RyICs9ICIuIjsKCiAgICAgIGlmIChjeWNMZW4pIHsKCiAgICAgICAgZm9yICh2YXIgaSA9IGN5Y09mZjsgaS0tOyApIHsKICAgICAgICAgIHN0ciArPSBOIC8gRCB8IDA7CiAgICAgICAgICBOICU9IEQ7CiAgICAgICAgICBOICo9IDEwOwogICAgICAgIH0KICAgICAgICBzdHIgKz0gIigiOwogICAgICAgIGZvciAodmFyIGkgPSBjeWNMZW47IGktLTsgKSB7CiAgICAgICAgICBzdHIgKz0gTiAvIEQgfCAwOwogICAgICAgICAgTiAlPSBEOwogICAgICAgICAgTiAqPSAxMDsKICAgICAgICB9CiAgICAgICAgc3RyICs9ICIpIjsKICAgICAgfSBlbHNlIHsKICAgICAgICBmb3IgKHZhciBpID0gZGVjOyBOICYmIGktLTsgKSB7CiAgICAgICAgICBzdHIgKz0gTiAvIEQgfCAwOwogICAgICAgICAgTiAlPSBEOwogICAgICAgICAgTiAqPSAxMDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHN0cjsKICAgIH0KICB9OwoKICBpZiAodHJ1ZSkgewogICAgIShfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fID0gW10sIF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fID0gKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gRnJhY3Rpb247CiAgICB9KS5hcHBseShleHBvcnRzLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fKSwKCQkJCV9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fICE9PSB1bmRlZmluZWQgJiYgKG1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18pKTsKICB9IGVsc2Uge30KCn0pKHRoaXMpOwoKCi8qKiovIH0pLAovKiAxMiAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CgovKg0KICogTmF0dXJhbCBTb3J0IGFsZ29yaXRobSBmb3IgSmF2YXNjcmlwdCAtIFZlcnNpb24gMC43IC0gUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UNCiAqIEF1dGhvcjogSmltIFBhbG1lciAoYmFzZWQgb24gY2h1bmtpbmcgaWRlYSBmcm9tIERhdmUgS29lbGxlKQ0KICovDQovKmpzaGludCB1bnVzZWQ6ZmFsc2UgKi8NCm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbmF0dXJhbFNvcnQgKGEsIGIpIHsNCgkidXNlIHN0cmljdCI7DQoJdmFyIHJlID0gLyheKFsrXC1dPyg/OjB8WzEtOV1cZCopKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPyk/JHxeMHhbMC05YS1mXSskfFxkKykvZ2ksDQoJCXNyZSA9IC8oXlsgXSp8WyBdKiQpL2csDQoJCWRyZSA9IC8oXihbXHcgXSssP1tcdyBdKyk/W1x3IF0rLD9bXHcgXStcZCs6XGQrKDpcZCspP1tcdyBdP3xeXGR7MSw0fVtcL1wtXVxkezEsNH1bXC9cLV1cZHsxLDR9fF5cdyssIFx3KyBcZCssIFxkezR9KS8sDQoJCWhyZSA9IC9eMHhbMC05YS1mXSskL2ksDQoJCW9yZSA9IC9eMC8sDQoJCWkgPSBmdW5jdGlvbihzKSB7IHJldHVybiBuYXR1cmFsU29ydC5pbnNlbnNpdGl2ZSAmJiAoJycgKyBzKS50b0xvd2VyQ2FzZSgpIHx8ICcnICsgczsgfSwNCgkJLy8gY29udmVydCBhbGwgdG8gc3RyaW5ncyBzdHJpcCB3aGl0ZXNwYWNlDQoJCXggPSBpKGEpLnJlcGxhY2Uoc3JlLCAnJykgfHwgJycsDQoJCXkgPSBpKGIpLnJlcGxhY2Uoc3JlLCAnJykgfHwgJycsDQoJCS8vIGNodW5rL3Rva2VuaXplDQoJCXhOID0geC5yZXBsYWNlKHJlLCAnXDAkMVwwJykucmVwbGFjZSgvXDAkLywnJykucmVwbGFjZSgvXlwwLywnJykuc3BsaXQoJ1wwJyksDQoJCXlOID0geS5yZXBsYWNlKHJlLCAnXDAkMVwwJykucmVwbGFjZSgvXDAkLywnJykucmVwbGFjZSgvXlwwLywnJykuc3BsaXQoJ1wwJyksDQoJCS8vIG51bWVyaWMsIGhleCBvciBkYXRlIGRldGVjdGlvbg0KCQl4RCA9IHBhcnNlSW50KHgubWF0Y2goaHJlKSwgMTYpIHx8ICh4Ti5sZW5ndGggIT09IDEgJiYgeC5tYXRjaChkcmUpICYmIERhdGUucGFyc2UoeCkpLA0KCQl5RCA9IHBhcnNlSW50KHkubWF0Y2goaHJlKSwgMTYpIHx8IHhEICYmIHkubWF0Y2goZHJlKSAmJiBEYXRlLnBhcnNlKHkpIHx8IG51bGwsDQoJCW9GeE5jTCwgb0Z5TmNMOw0KCS8vIGZpcnN0IHRyeSBhbmQgc29ydCBIZXggY29kZXMgb3IgRGF0ZXMNCglpZiAoeUQpIHsNCgkJaWYgKCB4RCA8IHlEICkgeyByZXR1cm4gLTE7IH0NCgkJZWxzZSBpZiAoIHhEID4geUQgKSB7IHJldHVybiAxOyB9DQoJfQ0KCS8vIG5hdHVyYWwgc29ydGluZyB0aHJvdWdoIHNwbGl0IG51bWVyaWMgc3RyaW5ncyBhbmQgZGVmYXVsdCBzdHJpbmdzDQoJZm9yKHZhciBjTG9jPTAsIG51bVM9TWF0aC5tYXgoeE4ubGVuZ3RoLCB5Ti5sZW5ndGgpOyBjTG9jIDwgbnVtUzsgY0xvYysrKSB7DQoJCS8vIGZpbmQgZmxvYXRzIG5vdCBzdGFydGluZyB3aXRoICcwJywgc3RyaW5nIG9yIDAgaWYgbm90IGRlZmluZWQgKENsaW50IFByaWVzdCkNCgkJb0Z4TmNMID0gISh4TltjTG9jXSB8fCAnJykubWF0Y2gob3JlKSAmJiBwYXJzZUZsb2F0KHhOW2NMb2NdKSB8fCB4TltjTG9jXSB8fCAwOw0KCQlvRnlOY0wgPSAhKHlOW2NMb2NdIHx8ICcnKS5tYXRjaChvcmUpICYmIHBhcnNlRmxvYXQoeU5bY0xvY10pIHx8IHlOW2NMb2NdIHx8IDA7DQoJCS8vIGhhbmRsZSBudW1lcmljIHZzIHN0cmluZyBjb21wYXJpc29uIC0gbnVtYmVyIDwgc3RyaW5nIC0gKEt5bGUgQWRhbXMpDQoJCWlmIChpc05hTihvRnhOY0wpICE9PSBpc05hTihvRnlOY0wpKSB7IHJldHVybiAoaXNOYU4ob0Z4TmNMKSkgPyAxIDogLTE7IH0NCgkJLy8gcmVseSBvbiBzdHJpbmcgY29tcGFyaXNvbiBpZiBkaWZmZXJlbnQgdHlwZXMgLSBpLmUuICcwMicgPCAyICE9ICcwMicgPCAnMicNCgkJZWxzZSBpZiAodHlwZW9mIG9GeE5jTCAhPT0gdHlwZW9mIG9GeU5jTCkgew0KCQkJb0Z4TmNMICs9ICcnOw0KCQkJb0Z5TmNMICs9ICcnOw0KCQl9DQoJCWlmIChvRnhOY0wgPCBvRnlOY0wpIHsgcmV0dXJuIC0xOyB9DQoJCWlmIChvRnhOY0wgPiBvRnlOY0wpIHsgcmV0dXJuIDE7IH0NCgl9DQoJcmV0dXJuIDA7DQp9Ow0KCgovKioqLyB9KSwKLyogMTMgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKInVzZSBzdHJpY3QiOwovKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJhIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBcmd1bWVudHNFcnJvcjsgfSk7Ci8qKgogKiBDcmVhdGUgYSBzeW50YXggZXJyb3Igd2l0aCB0aGUgbWVzc2FnZToKICogICAgICdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGluIGZ1bmN0aW9uIDxmbj4gKDxjb3VudD4gcHJvdmlkZWQsIDxtaW4+LTxtYXg+IGV4cGVjdGVkKScKICogQHBhcmFtIHtzdHJpbmd9IGZuICAgICBGdW5jdGlvbiBuYW1lCiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudCAgQWN0dWFsIGFyZ3VtZW50IGNvdW50CiAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gICAgTWluaW11bSByZXF1aXJlZCBhcmd1bWVudCBjb3VudAogKiBAcGFyYW0ge251bWJlcn0gW21heF0gIE1heGltdW0gcmVxdWlyZWQgYXJndW1lbnQgY291bnQKICogQGV4dGVuZHMgRXJyb3IKICovCmZ1bmN0aW9uIEFyZ3VtZW50c0Vycm9yKGZuLCBjb3VudCwgbWluLCBtYXgpIHsKICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQXJndW1lbnRzRXJyb3IpKSB7CiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpOwogIH0KCiAgdGhpcy5mbiA9IGZuOwogIHRoaXMuY291bnQgPSBjb3VudDsKICB0aGlzLm1pbiA9IG1pbjsKICB0aGlzLm1heCA9IG1heDsKICB0aGlzLm1lc3NhZ2UgPSAnV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbiBmdW5jdGlvbiAnICsgZm4gKyAnICgnICsgY291bnQgKyAnIHByb3ZpZGVkLCAnICsgbWluICsgKG1heCAhPT0gdW5kZWZpbmVkICYmIG1heCAhPT0gbnVsbCA/ICctJyArIG1heCA6ICcnKSArICcgZXhwZWN0ZWQpJzsKICB0aGlzLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7Cn0KQXJndW1lbnRzRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yKCk7CkFyZ3VtZW50c0Vycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVycm9yOwpBcmd1bWVudHNFcnJvci5wcm90b3R5cGUubmFtZSA9ICdBcmd1bWVudHNFcnJvcic7CkFyZ3VtZW50c0Vycm9yLnByb3RvdHlwZS5pc0FyZ3VtZW50c0Vycm9yID0gdHJ1ZTsKCi8qKiovIH0pLAovKiAxNCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoidXNlIHN0cmljdCI7CnZhciBfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18sIF9fV0VCUEFDS19BTURfREVGSU5FX0FSUkFZX18sIF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fOy8qKgogKiB0eXBlZC1mdW5jdGlvbgogKgogKiBUeXBlIGNoZWNraW5nIGZvciBKYXZhU2NyaXB0IGZ1bmN0aW9ucwogKgogKiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL3R5cGVkLWZ1bmN0aW9uCiAqLwoKCihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkgewogIGlmICh0cnVlKSB7CiAgICAvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuCiAgICAhKF9fV0VCUEFDS19BTURfREVGSU5FX0FSUkFZX18gPSBbXSwgX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fID0gKGZhY3RvcnkpLAoJCQkJX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gPSAodHlwZW9mIF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXyA9PT0gJ2Z1bmN0aW9uJyA/CgkJCQkoX19XRUJQQUNLX0FNRF9ERUZJTkVfRkFDVE9SWV9fLmFwcGx5KGV4cG9ydHMsIF9fV0VCUEFDS19BTURfREVGSU5FX0FSUkFZX18pKSA6IF9fV0VCUEFDS19BTURfREVGSU5FX0ZBQ1RPUllfXyksCgkJCQlfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyAhPT0gdW5kZWZpbmVkICYmIChtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fKSk7CiAgfSBlbHNlIHt9Cn0odGhpcywgZnVuY3Rpb24gKCkgewoKICBmdW5jdGlvbiBvayAoKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGZ1bmN0aW9uIG5vdE9rICgpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIGZ1bmN0aW9uIHVuZGVmICgpIHsKICAgIHJldHVybiB1bmRlZmluZWQ7CiAgfQoKICAvKioKICAgKiBAdHlwZWRlZiB7ewogICAqICAgcGFyYW1zOiBQYXJhbVtdLAogICAqICAgZm46IGZ1bmN0aW9uCiAgICogfX0gU2lnbmF0dXJlCiAgICoKICAgKiBAdHlwZWRlZiB7ewogICAqICAgdHlwZXM6IFR5cGVbXSwKICAgKiAgIHJlc3RQYXJhbTogYm9vbGVhbgogICAqIH19IFBhcmFtCiAgICoKICAgKiBAdHlwZWRlZiB7ewogICAqICAgbmFtZTogc3RyaW5nLAogICAqICAgdHlwZUluZGV4OiBudW1iZXIsCiAgICogICB0ZXN0OiBmdW5jdGlvbiwKICAgKiAgIGNvbnZlcnNpb24/OiBDb252ZXJzaW9uRGVmLAogICAqICAgY29udmVyc2lvbkluZGV4OiBudW1iZXIsCiAgICogfX0gVHlwZQogICAqCiAgICogQHR5cGVkZWYge3sKICAgKiAgIGZyb206IHN0cmluZywKICAgKiAgIHRvOiBzdHJpbmcsCiAgICogICBjb252ZXJ0OiBmdW5jdGlvbiAoKikgOiAqCiAgICogfX0gQ29udmVyc2lvbkRlZgogICAqCiAgICogQHR5cGVkZWYge3sKICAgKiAgIG5hbWU6IHN0cmluZywKICAgKiAgIHRlc3Q6IGZ1bmN0aW9uKCopIDogYm9vbGVhbgogICAqIH19IFR5cGVEZWYKICAgKi8KCiAgLy8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHR5cGVkLWZ1bmN0aW9uCiAgZnVuY3Rpb24gY3JlYXRlICgpIHsKICAgIC8vIGRhdGEgdHlwZSB0ZXN0cwogICAgdmFyIF90eXBlcyA9IFsKICAgICAgeyBuYW1lOiAnbnVtYmVyJywgICAgdGVzdDogZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyB9IH0sCiAgICAgIHsgbmFtZTogJ3N0cmluZycsICAgIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB0eXBlb2YgeCA9PT0gJ3N0cmluZycgfSB9LAogICAgICB7IG5hbWU6ICdib29sZWFuJywgICB0ZXN0OiBmdW5jdGlvbiAoeCkgeyByZXR1cm4gdHlwZW9mIHggPT09ICdib29sZWFuJyB9IH0sCiAgICAgIHsgbmFtZTogJ0Z1bmN0aW9uJywgIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJ30gfSwKICAgICAgeyBuYW1lOiAnQXJyYXknLCAgICAgdGVzdDogQXJyYXkuaXNBcnJheSB9LAogICAgICB7IG5hbWU6ICdEYXRlJywgICAgICB0ZXN0OiBmdW5jdGlvbiAoeCkgeyByZXR1cm4geCBpbnN0YW5jZW9mIERhdGUgfSB9LAogICAgICB7IG5hbWU6ICdSZWdFeHAnLCAgICB0ZXN0OiBmdW5jdGlvbiAoeCkgeyByZXR1cm4geCBpbnN0YW5jZW9mIFJlZ0V4cCB9IH0sCiAgICAgIHsgbmFtZTogJ09iamVjdCcsICAgIHRlc3Q6IGZ1bmN0aW9uICh4KSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiB4ICE9PSBudWxsICYmIHguY29uc3RydWN0b3IgPT09IE9iamVjdAogICAgICB9fSwKICAgICAgeyBuYW1lOiAnbnVsbCcsICAgICAgdGVzdDogZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggPT09IG51bGwgfSB9LAogICAgICB7IG5hbWU6ICd1bmRlZmluZWQnLCB0ZXN0OiBmdW5jdGlvbiAoeCkgeyByZXR1cm4geCA9PT0gdW5kZWZpbmVkIH0gfQogICAgXTsKCiAgICB2YXIgYW55VHlwZSA9IHsKICAgICAgbmFtZTogJ2FueScsCiAgICAgIHRlc3Q6IG9rCiAgICB9CgogICAgLy8gdHlwZXMgd2hpY2ggbmVlZCB0byBiZSBpZ25vcmVkCiAgICB2YXIgX2lnbm9yZSA9IFtdOwoKICAgIC8vIHR5cGUgY29udmVyc2lvbnMKICAgIHZhciBfY29udmVyc2lvbnMgPSBbXTsKCiAgICAvLyBUaGlzIGlzIGEgdGVtcG9yYXJ5IG9iamVjdCwgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGEgdHlwZWQgZnVuY3Rpb24gYXQgdGhlIGVuZAogICAgdmFyIHR5cGVkID0gewogICAgICB0eXBlczogX3R5cGVzLAogICAgICBjb252ZXJzaW9uczogX2NvbnZlcnNpb25zLAogICAgICBpZ25vcmU6IF9pZ25vcmUKICAgIH07CgogICAgLyoqCiAgICAgKiBGaW5kIHRoZSB0ZXN0IGZ1bmN0aW9uIGZvciBhIHR5cGUKICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlTmFtZQogICAgICogQHJldHVybiB7VHlwZURlZn0gUmV0dXJucyB0aGUgdHlwZSBkZWZpbml0aW9uIHdoZW4gZm91bmQsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgVGhyb3dzIGEgVHlwZUVycm9yIG90aGVyd2lzZQogICAgICovCiAgICBmdW5jdGlvbiBmaW5kVHlwZUJ5TmFtZSAodHlwZU5hbWUpIHsKICAgICAgdmFyIGVudHJ5ID0gZmluZEluQXJyYXkodHlwZWQudHlwZXMsIGZ1bmN0aW9uIChlbnRyeSkgewogICAgICAgIHJldHVybiBlbnRyeS5uYW1lID09PSB0eXBlTmFtZTsKICAgICAgfSk7CgogICAgICBpZiAoZW50cnkpIHsKICAgICAgICByZXR1cm4gZW50cnk7CiAgICAgIH0KCiAgICAgIGlmICh0eXBlTmFtZSA9PT0gJ2FueScpIHsgLy8gc3BlY2lhbCBiYWtlZC1pbiBjYXNlICdhbnknCiAgICAgICAgcmV0dXJuIGFueVR5cGU7CiAgICAgIH0KCiAgICAgIHZhciBoaW50ID0gZmluZEluQXJyYXkodHlwZWQudHlwZXMsIGZ1bmN0aW9uIChlbnRyeSkgewogICAgICAgIHJldHVybiBlbnRyeS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IHR5cGVOYW1lLnRvTG93ZXJDYXNlKCk7CiAgICAgIH0pOwoKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biB0eXBlICInICsgdHlwZU5hbWUgKyAnIicgKwogICAgICAgICAgKGhpbnQgPyAoJy4gRGlkIHlvdSBtZWFuICInICsgaGludC5uYW1lICsgJyI/JykgOiAnJykpOwogICAgfQoKICAgIC8qKgogICAgICogRmluZCB0aGUgaW5kZXggb2YgYSB0eXBlIGRlZmluaXRpb24uIEhhbmRsZXMgc3BlY2lhbCBjYXNlICdhbnknCiAgICAgKiBAcGFyYW0ge1R5cGVEZWZ9IHR5cGUKICAgICAqIEByZXR1cm4ge251bWJlcn0KICAgICAqLwogICAgZnVuY3Rpb24gZmluZFR5cGVJbmRleCh0eXBlKSB7CiAgICAgIGlmICh0eXBlID09PSBhbnlUeXBlKSB7CiAgICAgICAgcmV0dXJuIDk5OTsKICAgICAgfQoKICAgICAgcmV0dXJuIHR5cGVkLnR5cGVzLmluZGV4T2YodHlwZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGaW5kIGEgdHlwZSB0aGF0IG1hdGNoZXMgYSB2YWx1ZS4KICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUKICAgICAqIEByZXR1cm4ge3N0cmluZ30gUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZmlyc3QgdHlwZSBmb3Igd2hpY2gKICAgICAqICAgICAgICAgICAgICAgICAgdGhlIHR5cGUgdGVzdCBtYXRjaGVzIHRoZSB2YWx1ZS4KICAgICAqLwogICAgZnVuY3Rpb24gZmluZFR5cGVOYW1lKHZhbHVlKSB7CiAgICAgIHZhciBlbnRyeSA9IGZpbmRJbkFycmF5KHR5cGVkLnR5cGVzLCBmdW5jdGlvbiAoZW50cnkpIHsKICAgICAgICByZXR1cm4gZW50cnkudGVzdCh2YWx1ZSk7CiAgICAgIH0pOwoKICAgICAgaWYgKGVudHJ5KSB7CiAgICAgICAgcmV0dXJuIGVudHJ5Lm5hbWU7CiAgICAgIH0KCiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlIGhhcyB1bmtub3duIHR5cGUuIFZhbHVlOiAnICsgdmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICogRmluZCBhIHNwZWNpZmljIHNpZ25hdHVyZSBmcm9tIGEgKGNvbXBvc2VkKSB0eXBlZCBmdW5jdGlvbiwgZm9yIGV4YW1wbGU6CiAgICAgKgogICAgICogICB0eXBlZC5maW5kKGZuLCBbJ251bWJlcicsICdzdHJpbmcnXSkKICAgICAqICAgdHlwZWQuZmluZChmbiwgJ251bWJlciwgc3RyaW5nJykKICAgICAqCiAgICAgKiBGdW5jdGlvbiBmaW5kIG9ubHkgb25seSB3b3JrcyBmb3IgZXhhY3QgbWF0Y2hlcy4KICAgICAqCiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgICAgICAgICAgICAgICAgICBBIHR5cGVkLWZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge3N0cmluZyB8IHN0cmluZ1tdfSBzaWduYXR1cmUgICBTaWduYXR1cmUgdG8gYmUgZm91bmQsIGNhbiBiZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gYXJyYXkgb3IgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nLgogICAgICogQHJldHVybiB7RnVuY3Rpb259ICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgbWF0Y2hpbmcgc2lnbmF0dXJlLCBvcgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIGFuIGVycm9yIHdoZW4gbm8gc2lnbmF0dXJlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBmb3VuZC4KICAgICAqLwogICAgZnVuY3Rpb24gZmluZCAoZm4sIHNpZ25hdHVyZSkgewogICAgICBpZiAoIWZuLnNpZ25hdHVyZXMpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbiBpcyBubyB0eXBlZC1mdW5jdGlvbicpOwogICAgICB9CgogICAgICAvLyBub3JtYWxpemUgaW5wdXQKICAgICAgdmFyIGFycjsKICAgICAgaWYgKHR5cGVvZiBzaWduYXR1cmUgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgYXJyID0gc2lnbmF0dXJlLnNwbGl0KCcsJyk7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGFycltpXSA9IGFycltpXS50cmltKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc2lnbmF0dXJlKSkgewogICAgICAgIGFyciA9IHNpZ25hdHVyZTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdHJpbmcgYXJyYXkgb3IgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIGV4cGVjdGVkJyk7CiAgICAgIH0KCiAgICAgIHZhciBzdHIgPSBhcnIuam9pbignLCcpOwoKICAgICAgLy8gZmluZCBhbiBleGFjdCBtYXRjaAogICAgICB2YXIgbWF0Y2ggPSBmbi5zaWduYXR1cmVzW3N0cl07CiAgICAgIGlmIChtYXRjaCkgewogICAgICAgIHJldHVybiBtYXRjaDsKICAgICAgfQoKICAgICAgLy8gVE9ETzogZXh0ZW5kIGZpbmQgdG8gbWF0Y2ggbm9uLWV4YWN0IHNpZ25hdHVyZXMKCiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NpZ25hdHVyZSBub3QgZm91bmQgKHNpZ25hdHVyZTogJyArIChmbi5uYW1lIHx8ICd1bm5hbWVkJykgKyAnKCcgKyBhcnIuam9pbignLCAnKSArICcpKScpOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydCBhIGdpdmVuIHZhbHVlIHRvIGFub3RoZXIgZGF0YSB0eXBlLgogICAgICogQHBhcmFtIHsqfSB2YWx1ZQogICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUKICAgICAqLwogICAgZnVuY3Rpb24gY29udmVydCAodmFsdWUsIHR5cGUpIHsKICAgICAgdmFyIGZyb20gPSBmaW5kVHlwZU5hbWUodmFsdWUpOwoKICAgICAgLy8gY2hlY2sgY29udmVyc2lvbiBpcyBuZWVkZWQKICAgICAgaWYgKHR5cGUgPT09IGZyb20pIHsKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgIH0KCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZWQuY29udmVyc2lvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgY29udmVyc2lvbiA9IHR5cGVkLmNvbnZlcnNpb25zW2ldOwogICAgICAgIGlmIChjb252ZXJzaW9uLmZyb20gPT09IGZyb20gJiYgY29udmVyc2lvbi50byA9PT0gdHlwZSkgewogICAgICAgICAgcmV0dXJuIGNvbnZlcnNpb24uY29udmVydCh2YWx1ZSk7CiAgICAgICAgfQogICAgICB9CgogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGZyb20gJyArIGZyb20gKyAnIHRvICcgKyB0eXBlKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBTdHJpbmdpZnkgcGFyYW1ldGVycyBpbiBhIG5vcm1hbGl6ZWQgd2F5CiAgICAgKiBAcGFyYW0ge1BhcmFtW119IHBhcmFtcwogICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICovCiAgICBmdW5jdGlvbiBzdHJpbmdpZnlQYXJhbXMgKHBhcmFtcykgewogICAgICByZXR1cm4gcGFyYW1zCiAgICAgICAgICAubWFwKGZ1bmN0aW9uIChwYXJhbSkgewogICAgICAgICAgICB2YXIgdHlwZU5hbWVzID0gcGFyYW0udHlwZXMubWFwKGdldFR5cGVOYW1lKTsKCiAgICAgICAgICAgIHJldHVybiAocGFyYW0ucmVzdFBhcmFtID8gJy4uLicgOiAnJykgKyB0eXBlTmFtZXMuam9pbignfCcpOwogICAgICAgICAgfSkKICAgICAgICAgIC5qb2luKCcsJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBQYXJzZSBhIHBhcmFtZXRlciwgbGlrZSAiLi4ubnVtYmVyIHwgYm9vbGVhbiIKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbQogICAgICogQHBhcmFtIHtDb252ZXJzaW9uRGVmW119IGNvbnZlcnNpb25zCiAgICAgKiBAcmV0dXJuIHtQYXJhbX0gcGFyYW0KICAgICAqLwogICAgZnVuY3Rpb24gcGFyc2VQYXJhbSAocGFyYW0sIGNvbnZlcnNpb25zKSB7CiAgICAgIHZhciByZXN0UGFyYW0gPSBwYXJhbS5pbmRleE9mKCcuLi4nKSA9PT0gMDsKICAgICAgdmFyIHR5cGVzID0gKCFyZXN0UGFyYW0pCiAgICAgICAgICA/IHBhcmFtCiAgICAgICAgICA6IChwYXJhbS5sZW5ndGggPiAzKQogICAgICAgICAgICAgID8gcGFyYW0uc2xpY2UoMykKICAgICAgICAgICAgICA6ICdhbnknOwoKICAgICAgdmFyIHR5cGVOYW1lcyA9IHR5cGVzLnNwbGl0KCd8JykubWFwKHRyaW0pCiAgICAgICAgICAuZmlsdGVyKG5vdEVtcHR5KQogICAgICAgICAgLmZpbHRlcihub3RJZ25vcmUpOwoKICAgICAgdmFyIG1hdGNoaW5nQ29udmVyc2lvbnMgPSBmaWx0ZXJDb252ZXJzaW9ucyhjb252ZXJzaW9ucywgdHlwZU5hbWVzKTsKCiAgICAgIHZhciBleGFjdFR5cGVzID0gdHlwZU5hbWVzLm1hcChmdW5jdGlvbiAodHlwZU5hbWUpIHsKICAgICAgICB2YXIgdHlwZSA9IGZpbmRUeXBlQnlOYW1lKHR5cGVOYW1lKTsKCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIG5hbWU6IHR5cGVOYW1lLAogICAgICAgICAgdHlwZUluZGV4OiBmaW5kVHlwZUluZGV4KHR5cGUpLAogICAgICAgICAgdGVzdDogdHlwZS50ZXN0LAogICAgICAgICAgY29udmVyc2lvbjogbnVsbCwKICAgICAgICAgIGNvbnZlcnNpb25JbmRleDogLTEKICAgICAgICB9OwogICAgICB9KTsKCiAgICAgIHZhciBjb252ZXJ0aWJsZVR5cGVzID0gbWF0Y2hpbmdDb252ZXJzaW9ucy5tYXAoZnVuY3Rpb24gKGNvbnZlcnNpb24pIHsKICAgICAgICB2YXIgdHlwZSA9IGZpbmRUeXBlQnlOYW1lKGNvbnZlcnNpb24uZnJvbSk7CgogICAgICAgIHJldHVybiB7CiAgICAgICAgICBuYW1lOiBjb252ZXJzaW9uLmZyb20sCiAgICAgICAgICB0eXBlSW5kZXg6IGZpbmRUeXBlSW5kZXgodHlwZSksCiAgICAgICAgICB0ZXN0OiB0eXBlLnRlc3QsCiAgICAgICAgICBjb252ZXJzaW9uOiBjb252ZXJzaW9uLAogICAgICAgICAgY29udmVyc2lvbkluZGV4OiBjb252ZXJzaW9ucy5pbmRleE9mKGNvbnZlcnNpb24pCiAgICAgICAgfTsKICAgICAgfSk7CgogICAgICByZXR1cm4gewogICAgICAgIHR5cGVzOiBleGFjdFR5cGVzLmNvbmNhdChjb252ZXJ0aWJsZVR5cGVzKSwKICAgICAgICByZXN0UGFyYW06IHJlc3RQYXJhbQogICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2UgYSBzaWduYXR1cmUgd2l0aCBjb21tYSBzZXBhcmF0ZWQgcGFyYW1ldGVycywKICAgICAqIGxpa2UgIm51bWJlciB8IGJvb2xlYW4sIC4uLnN0cmluZyIKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduYXR1cmUKICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuCiAgICAgKiBAcGFyYW0ge0NvbnZlcnNpb25EZWZbXX0gY29udmVyc2lvbnMKICAgICAqIEByZXR1cm4ge1NpZ25hdHVyZSB8IG51bGx9IHNpZ25hdHVyZQogICAgICovCiAgICBmdW5jdGlvbiBwYXJzZVNpZ25hdHVyZSAoc2lnbmF0dXJlLCBmbiwgY29udmVyc2lvbnMpIHsKICAgICAgdmFyIHBhcmFtcyA9IFtdOwoKICAgICAgaWYgKHNpZ25hdHVyZS50cmltKCkgIT09ICcnKSB7CiAgICAgICAgcGFyYW1zID0gc2lnbmF0dXJlCiAgICAgICAgICAgIC5zcGxpdCgnLCcpCiAgICAgICAgICAgIC5tYXAodHJpbSkKICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAocGFyYW0sIGluZGV4LCBhcnJheSkgewogICAgICAgICAgICAgIHZhciBwYXJzZWRQYXJhbSA9IHBhcnNlUGFyYW0ocGFyYW0sIGNvbnZlcnNpb25zKTsKCiAgICAgICAgICAgICAgaWYgKHBhcnNlZFBhcmFtLnJlc3RQYXJhbSAmJiAoaW5kZXggIT09IGFycmF5Lmxlbmd0aCAtIDEpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1VuZXhwZWN0ZWQgcmVzdCBwYXJhbWV0ZXIgIicgKyBwYXJhbSArICciOiAnICsKICAgICAgICAgICAgICAgICAgICAnb25seSBhbGxvd2VkIGZvciB0aGUgbGFzdCBwYXJhbWV0ZXInKTsKICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIHJldHVybiBwYXJzZWRQYXJhbTsKICAgICAgICAgIH0pOwogICAgICB9CgogICAgICBpZiAocGFyYW1zLnNvbWUoaXNJbnZhbGlkUGFyYW0pKSB7CiAgICAgICAgLy8gaW52YWxpZCBzaWduYXR1cmU6IGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgaGFzIG5vIHR5cGVzCiAgICAgICAgLy8gKHRoZXkgbWF5IGhhdmUgYmVlbiBmaWx0ZXJlZCkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQoKICAgICAgcmV0dXJuIHsKICAgICAgICBwYXJhbXM6IHBhcmFtcywKICAgICAgICBmbjogZm4KICAgICAgfTsKICAgIH0KCiAgICAvKioKICAgICAqIFRlc3Qgd2hldGhlciBhIHNldCBvZiBwYXJhbXMgY29udGFpbnMgYSByZXN0UGFyYW0KICAgICAqIEBwYXJhbSB7UGFyYW1bXX0gcGFyYW1zCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgbGFzdCBwYXJhbWV0ZXIgaXMgYSByZXN0UGFyYW0KICAgICAqLwogICAgZnVuY3Rpb24gaGFzUmVzdFBhcmFtKHBhcmFtcykgewogICAgICB2YXIgcGFyYW0gPSBsYXN0KHBhcmFtcykKICAgICAgcmV0dXJuIHBhcmFtID8gcGFyYW0ucmVzdFBhcmFtIDogZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBUZXN0IHdoZXRoZXIgYSBwYXJhbWV0ZXIgY29udGFpbnMgY29udmVyc2lvbnMKICAgICAqIEBwYXJhbSB7UGFyYW19IHBhcmFtCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhdCBsZWFzdCBvbmUgb2YgdGhlIHBhcmFtZXRlcnMKICAgICAqICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIGEgY29udmVyc2lvbi4KICAgICAqLwogICAgZnVuY3Rpb24gaGFzQ29udmVyc2lvbnMocGFyYW0pIHsKICAgICAgcmV0dXJuIHBhcmFtLnR5cGVzLnNvbWUoZnVuY3Rpb24gKHR5cGUpIHsKICAgICAgICByZXR1cm4gdHlwZS5jb252ZXJzaW9uICE9IG51bGw7CiAgICAgIH0pOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgdHlwZSB0ZXN0IGZvciBhIHNpbmdsZSBwYXJhbWV0ZXIsIHdoaWNoIGNhbiBoYXZlIG9uZSBvciBtdWx0aXBsZQogICAgICogdHlwZXMuCiAgICAgKiBAcGFyYW0ge1BhcmFtfSBwYXJhbQogICAgICogQHJldHVybiB7ZnVuY3Rpb24oeDogKikgOiBib29sZWFufSBSZXR1cm5zIGEgdGVzdCBmdW5jdGlvbgogICAgICovCiAgICBmdW5jdGlvbiBjb21waWxlVGVzdChwYXJhbSkgewogICAgICBpZiAoIXBhcmFtIHx8IHBhcmFtLnR5cGVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIC8vIG5vdGhpbmcgdG8gZG8KICAgICAgICByZXR1cm4gb2s7CiAgICAgIH0KICAgICAgZWxzZSBpZiAocGFyYW0udHlwZXMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgcmV0dXJuIGZpbmRUeXBlQnlOYW1lKHBhcmFtLnR5cGVzWzBdLm5hbWUpLnRlc3Q7CiAgICAgIH0KICAgICAgZWxzZSBpZiAocGFyYW0udHlwZXMubGVuZ3RoID09PSAyKSB7CiAgICAgICAgdmFyIHRlc3QwID0gZmluZFR5cGVCeU5hbWUocGFyYW0udHlwZXNbMF0ubmFtZSkudGVzdDsKICAgICAgICB2YXIgdGVzdDEgPSBmaW5kVHlwZUJ5TmFtZShwYXJhbS50eXBlc1sxXS5uYW1lKS50ZXN0OwogICAgICAgIHJldHVybiBmdW5jdGlvbiBvcih4KSB7CiAgICAgICAgICByZXR1cm4gdGVzdDAoeCkgfHwgdGVzdDEoeCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UgeyAvLyBwYXJhbS50eXBlcy5sZW5ndGggPiAyCiAgICAgICAgdmFyIHRlc3RzID0gcGFyYW0udHlwZXMubWFwKGZ1bmN0aW9uICh0eXBlKSB7CiAgICAgICAgICByZXR1cm4gZmluZFR5cGVCeU5hbWUodHlwZS5uYW1lKS50ZXN0OwogICAgICAgIH0pCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG9yKHgpIHsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKHRlc3RzW2ldKHgpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIHRlc3QgZm9yIGFsbCBwYXJhbWV0ZXJzIG9mIGEgc2lnbmF0dXJlCiAgICAgKiBAcGFyYW0ge1BhcmFtW119IHBhcmFtcwogICAgICogQHJldHVybiB7ZnVuY3Rpb24oYXJnczogQXJyYXk8Kj4pIDogYm9vbGVhbn0KICAgICAqLwogICAgZnVuY3Rpb24gY29tcGlsZVRlc3RzKHBhcmFtcykgewogICAgICB2YXIgdGVzdHMsIHRlc3QwLCB0ZXN0MTsKCiAgICAgIGlmIChoYXNSZXN0UGFyYW0ocGFyYW1zKSkgewogICAgICAgIC8vIHZhcmlhYmxlIGFyZ3VtZW50cyBsaWtlICcuLi5udW1iZXInCiAgICAgICAgdGVzdHMgPSBpbml0aWFsKHBhcmFtcykubWFwKGNvbXBpbGVUZXN0KTsKICAgICAgICB2YXIgdmFySW5kZXggPSB0ZXN0cy5sZW5ndGg7CiAgICAgICAgdmFyIGxhc3RUZXN0ID0gY29tcGlsZVRlc3QobGFzdChwYXJhbXMpKTsKICAgICAgICB2YXIgdGVzdFJlc3RQYXJhbSA9IGZ1bmN0aW9uIChhcmdzKSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gdmFySW5kZXg7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmICghbGFzdFRlc3QoYXJnc1tpXSkpIHsKICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRlc3RBcmdzKGFyZ3MpIHsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKCF0ZXN0c1tpXShhcmdzW2ldKSkgewogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRlc3RSZXN0UGFyYW0oYXJncykgJiYgKGFyZ3MubGVuZ3RoID49IHZhckluZGV4ICsgMSk7CiAgICAgICAgfTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICAvLyBubyB2YXJpYWJsZSBhcmd1bWVudHMKICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRlc3RBcmdzKGFyZ3MpIHsKICAgICAgICAgICAgcmV0dXJuIGFyZ3MubGVuZ3RoID09PSAwOwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgdGVzdDAgPSBjb21waWxlVGVzdChwYXJhbXNbMF0pOwogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRlc3RBcmdzKGFyZ3MpIHsKICAgICAgICAgICAgcmV0dXJuIHRlc3QwKGFyZ3NbMF0pICYmIGFyZ3MubGVuZ3RoID09PSAxOwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMikgewogICAgICAgICAgdGVzdDAgPSBjb21waWxlVGVzdChwYXJhbXNbMF0pOwogICAgICAgICAgdGVzdDEgPSBjb21waWxlVGVzdChwYXJhbXNbMV0pOwogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRlc3RBcmdzKGFyZ3MpIHsKICAgICAgICAgICAgcmV0dXJuIHRlc3QwKGFyZ3NbMF0pICYmIHRlc3QxKGFyZ3NbMV0pICYmIGFyZ3MubGVuZ3RoID09PSAyOwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7IC8vIGFyZ3VtZW50cy5sZW5ndGggPiAyCiAgICAgICAgICB0ZXN0cyA9IHBhcmFtcy5tYXAoY29tcGlsZVRlc3QpOwogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRlc3RBcmdzKGFyZ3MpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIGlmICghdGVzdHNbaV0oYXJnc1tpXSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGFyZ3MubGVuZ3RoID09PSB0ZXN0cy5sZW5ndGg7CiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRmluZCB0aGUgcGFyYW1ldGVyIGF0IGEgc3BlY2lmaWMgaW5kZXggb2YgYSBzaWduYXR1cmUuCiAgICAgKiBIYW5kbGVzIHJlc3QgcGFyYW1ldGVycy4KICAgICAqIEBwYXJhbSB7U2lnbmF0dXJlfSBzaWduYXR1cmUKICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleAogICAgICogQHJldHVybiB7UGFyYW0gfCBudWxsfSBSZXR1cm5zIHRoZSBtYXRjaGluZyBwYXJhbWV0ZXIgd2hlbiBmb3VuZCwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCBvdGhlcndpc2UuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFBhcmFtQXRJbmRleChzaWduYXR1cmUsIGluZGV4KSB7CiAgICAgIHJldHVybiBpbmRleCA8IHNpZ25hdHVyZS5wYXJhbXMubGVuZ3RoCiAgICAgICAgICA/IHNpZ25hdHVyZS5wYXJhbXNbaW5kZXhdCiAgICAgICAgICA6IGhhc1Jlc3RQYXJhbShzaWduYXR1cmUucGFyYW1zKQogICAgICAgICAgICAgID8gbGFzdChzaWduYXR1cmUucGFyYW1zKQogICAgICAgICAgICAgIDogbnVsbAogICAgfQoKICAgIC8qKgogICAgICogR2V0IGFsbCB0eXBlIG5hbWVzIG9mIGEgcGFyYW1ldGVyCiAgICAgKiBAcGFyYW0ge1NpZ25hdHVyZX0gc2lnbmF0dXJlCiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgKICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhjbHVkZUNvbnZlcnNpb25zCiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gUmV0dXJucyBhbiBhcnJheSB3aXRoIHR5cGUgbmFtZXMKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0RXhwZWN0ZWRUeXBlTmFtZXMgKHNpZ25hdHVyZSwgaW5kZXgsIGV4Y2x1ZGVDb252ZXJzaW9ucykgewogICAgICB2YXIgcGFyYW0gPSBnZXRQYXJhbUF0SW5kZXgoc2lnbmF0dXJlLCBpbmRleCk7CiAgICAgIHZhciB0eXBlcyA9IHBhcmFtCiAgICAgICAgICA/IGV4Y2x1ZGVDb252ZXJzaW9ucwogICAgICAgICAgICAgICAgICA/IHBhcmFtLnR5cGVzLmZpbHRlcihpc0V4YWN0VHlwZSkKICAgICAgICAgICAgICAgICAgOiBwYXJhbS50eXBlcwogICAgICAgICAgOiBbXTsKCiAgICAgIHJldHVybiB0eXBlcy5tYXAoZ2V0VHlwZU5hbWUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbmFtZSBvZiBhIHR5cGUKICAgICAqIEBwYXJhbSB7VHlwZX0gdHlwZQogICAgICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0eXBlIG5hbWUKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0VHlwZU5hbWUodHlwZSkgewogICAgICByZXR1cm4gdHlwZS5uYW1lOwogICAgfQoKICAgIC8qKgogICAgICogVGVzdCB3aGV0aGVyIGEgdHlwZSBpcyBhbiBleGFjdCB0eXBlIG9yIGNvbnZlcnNpb24KICAgICAqIEBwYXJhbSB7VHlwZX0gdHlwZQogICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4KICAgICAqLwogICAgZnVuY3Rpb24gaXNFeGFjdFR5cGUodHlwZSkgewogICAgICByZXR1cm4gdHlwZS5jb252ZXJzaW9uID09PSBudWxsIHx8IHR5cGUuY29udmVyc2lvbiA9PT0gdW5kZWZpbmVkOwogICAgfQoKICAgIC8qKgogICAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBlcnJvciBtZXNzYWdlczogY3JlYXRlIGFuIGFycmF5IHdpdGgKICAgICAqIGFsbCBhdmFpbGFibGUgdHlwZXMgb24gYSBzcGVjaWZpYyBhcmd1bWVudCBpbmRleC4KICAgICAqIEBwYXJhbSB7U2lnbmF0dXJlW119IHNpZ25hdHVyZXMKICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleAogICAgICogQHJldHVybiB7c3RyaW5nW119IFJldHVybnMgYW4gYXJyYXkgd2l0aCBhdmFpbGFibGUgdHlwZXMKICAgICAqLwogICAgZnVuY3Rpb24gbWVyZ2VFeHBlY3RlZFBhcmFtcyhzaWduYXR1cmVzLCBpbmRleCkgewogICAgICB2YXIgdHlwZU5hbWVzID0gdW5pcShmbGF0TWFwKHNpZ25hdHVyZXMsIGZ1bmN0aW9uIChzaWduYXR1cmUpIHsKICAgICAgICByZXR1cm4gZ2V0RXhwZWN0ZWRUeXBlTmFtZXMoc2lnbmF0dXJlLCBpbmRleCwgZmFsc2UpOwogICAgICB9KSk7CgogICAgICByZXR1cm4gKHR5cGVOYW1lcy5pbmRleE9mKCdhbnknKSAhPT0gLTEpID8gWydhbnknXSA6IHR5cGVOYW1lczsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZQogICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge2FycmF5LjwqPn0gYXJncyAgICAgICAgICBUaGUgYWN0dWFsIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge1NpZ25hdHVyZVtdfSBzaWduYXR1cmVzICBBIGxpc3Qgd2l0aCBhdmFpbGFibGUgc2lnbmF0dXJlcwogICAgICogQHJldHVybiB7VHlwZUVycm9yfSBSZXR1cm5zIGEgdHlwZSBlcnJvciB3aXRoIGFkZGl0aW9uYWwgZGF0YQogICAgICogICAgICAgICAgICAgICAgICAgICBhdHRhY2hlZCB0byBpdCBpbiB0aGUgcHJvcGVydHkgYGRhdGFgCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyZWF0ZUVycm9yKG5hbWUsIGFyZ3MsIHNpZ25hdHVyZXMpIHsKICAgICAgdmFyIGVyciwgZXhwZWN0ZWQ7CiAgICAgIHZhciBfbmFtZSA9IG5hbWUgfHwgJ3VubmFtZWQnOwoKICAgICAgLy8gdGVzdCBmb3Igd3JvbmcgdHlwZSBhdCBzb21lIGluZGV4CiAgICAgIHZhciBtYXRjaGluZ1NpZ25hdHVyZXMgPSBzaWduYXR1cmVzOwogICAgICB2YXIgaW5kZXg7CiAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFyZ3MubGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgICAgdmFyIG5leHRNYXRjaGluZ0RlZnMgPSBtYXRjaGluZ1NpZ25hdHVyZXMuZmlsdGVyKGZ1bmN0aW9uIChzaWduYXR1cmUpIHsKICAgICAgICAgIHZhciB0ZXN0ID0gY29tcGlsZVRlc3QoZ2V0UGFyYW1BdEluZGV4KHNpZ25hdHVyZSwgaW5kZXgpKTsKICAgICAgICAgIHJldHVybiAoaW5kZXggPCBzaWduYXR1cmUucGFyYW1zLmxlbmd0aCB8fCBoYXNSZXN0UGFyYW0oc2lnbmF0dXJlLnBhcmFtcykpICYmCiAgICAgICAgICAgICAgdGVzdChhcmdzW2luZGV4XSk7CiAgICAgICAgfSk7CgogICAgICAgIGlmIChuZXh0TWF0Y2hpbmdEZWZzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgLy8gbm8gbWF0Y2hpbmcgc2lnbmF0dXJlcyBhbnltb3JlLCB0aHJvdyBlcnJvciAid3JvbmcgdHlwZSIKICAgICAgICAgIGV4cGVjdGVkID0gbWVyZ2VFeHBlY3RlZFBhcmFtcyhtYXRjaGluZ1NpZ25hdHVyZXMsIGluZGV4KTsKICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHZhciBhY3R1YWxUeXBlID0gZmluZFR5cGVOYW1lKGFyZ3NbaW5kZXhdKTsKCiAgICAgICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiAnICsgX25hbWUgKwogICAgICAgICAgICAgICAgJyAoZXhwZWN0ZWQ6ICcgKyBleHBlY3RlZC5qb2luKCcgb3IgJykgKwogICAgICAgICAgICAgICAgJywgYWN0dWFsOiAnICsgYWN0dWFsVHlwZSArICcsIGluZGV4OiAnICsgaW5kZXggKyAnKScpOwogICAgICAgICAgICBlcnIuZGF0YSA9IHsKICAgICAgICAgICAgICBjYXRlZ29yeTogJ3dyb25nVHlwZScsCiAgICAgICAgICAgICAgZm46IF9uYW1lLAogICAgICAgICAgICAgIGluZGV4OiBpbmRleCwKICAgICAgICAgICAgICBhY3R1YWw6IGFjdHVhbFR5cGUsCiAgICAgICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBtYXRjaGluZ1NpZ25hdHVyZXMgPSBuZXh0TWF0Y2hpbmdEZWZzOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gdGVzdCBmb3IgdG9vIGZldyBhcmd1bWVudHMKICAgICAgdmFyIGxlbmd0aHMgPSBtYXRjaGluZ1NpZ25hdHVyZXMubWFwKGZ1bmN0aW9uIChzaWduYXR1cmUpIHsKICAgICAgICByZXR1cm4gaGFzUmVzdFBhcmFtKHNpZ25hdHVyZS5wYXJhbXMpID8gSW5maW5pdHkgOiBzaWduYXR1cmUucGFyYW1zLmxlbmd0aDsKICAgICAgfSk7CiAgICAgIGlmIChhcmdzLmxlbmd0aCA8IE1hdGgubWluLmFwcGx5KG51bGwsIGxlbmd0aHMpKSB7CiAgICAgICAgZXhwZWN0ZWQgPSBtZXJnZUV4cGVjdGVkUGFyYW1zKG1hdGNoaW5nU2lnbmF0dXJlcywgaW5kZXgpOwogICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ1RvbyBmZXcgYXJndW1lbnRzIGluIGZ1bmN0aW9uICcgKyBfbmFtZSArCiAgICAgICAgICAgICcgKGV4cGVjdGVkOiAnICsgZXhwZWN0ZWQuam9pbignIG9yICcpICsKICAgICAgICAgICAgJywgaW5kZXg6ICcgKyBhcmdzLmxlbmd0aCArICcpJyk7CiAgICAgICAgZXJyLmRhdGEgPSB7CiAgICAgICAgICBjYXRlZ29yeTogJ3Rvb0Zld0FyZ3MnLAogICAgICAgICAgZm46IF9uYW1lLAogICAgICAgICAgaW5kZXg6IGFyZ3MubGVuZ3RoLAogICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkCiAgICAgICAgfQogICAgICAgIHJldHVybiBlcnI7CiAgICAgIH0KCiAgICAgIC8vIHRlc3QgZm9yIHRvbyBtYW55IGFyZ3VtZW50cwogICAgICB2YXIgbWF4TGVuZ3RoID0gTWF0aC5tYXguYXBwbHkobnVsbCwgbGVuZ3Rocyk7CiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IG1heExlbmd0aCkgewogICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ1RvbyBtYW55IGFyZ3VtZW50cyBpbiBmdW5jdGlvbiAnICsgX25hbWUgKwogICAgICAgICAgICAnIChleHBlY3RlZDogJyArIG1heExlbmd0aCArICcsIGFjdHVhbDogJyArIGFyZ3MubGVuZ3RoICsgJyknKTsKICAgICAgICBlcnIuZGF0YSA9IHsKICAgICAgICAgIGNhdGVnb3J5OiAndG9vTWFueUFyZ3MnLAogICAgICAgICAgZm46IF9uYW1lLAogICAgICAgICAgaW5kZXg6IGFyZ3MubGVuZ3RoLAogICAgICAgICAgZXhwZWN0ZWRMZW5ndGg6IG1heExlbmd0aAogICAgICAgIH0KICAgICAgICByZXR1cm4gZXJyOwogICAgICB9CgogICAgICBlcnIgPSBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgb2YgdHlwZSAiJyArIGFyZ3Muam9pbignLCAnKSArCiAgICAgICAgICAnIiBkbyBub3QgbWF0Y2ggYW55IG9mIHRoZSBkZWZpbmVkIHNpZ25hdHVyZXMgb2YgZnVuY3Rpb24gJyArIF9uYW1lICsgJy4nKTsKICAgICAgZXJyLmRhdGEgPSB7CiAgICAgICAgY2F0ZWdvcnk6ICdtaXNtYXRjaCcsCiAgICAgICAgYWN0dWFsOiBhcmdzLm1hcChmaW5kVHlwZU5hbWUpCiAgICAgIH0KICAgICAgcmV0dXJuIGVycjsKICAgIH0KCiAgICAvKioKICAgICAqIEZpbmQgdGhlIGxvd2VzdCBpbmRleCBvZiBhbGwgZXhhY3QgdHlwZXMgb2YgYSBwYXJhbWV0ZXIgKG5vIGNvbnZlcnNpb25zKQogICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW0KICAgICAqIEByZXR1cm4ge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGxvd2VzdCB0eXBlIGluIHR5cGVkLnR5cGVzCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldExvd2VzdFR5cGVJbmRleCAocGFyYW0pIHsKICAgICAgdmFyIG1pbiA9IDk5OTsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW0udHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoaXNFeGFjdFR5cGUocGFyYW0udHlwZXNbaV0pKSB7CiAgICAgICAgICBtaW4gPSBNYXRoLm1pbihtaW4sIHBhcmFtLnR5cGVzW2ldLnR5cGVJbmRleCk7CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gbWluOwogICAgfQoKICAgIC8qKgogICAgICogRmluZCB0aGUgbG93ZXN0IGluZGV4IG9mIHRoZSBjb252ZXJzaW9uIG9mIGFsbCB0eXBlcyBvZiB0aGUgcGFyYW1ldGVyCiAgICAgKiBoYXZpbmcgYSBjb252ZXJzaW9uCiAgICAgKiBAcGFyYW0ge1BhcmFtfSBwYXJhbQogICAgICogQHJldHVybiB7bnVtYmVyfSBSZXR1cm5zIHRoZSBsb3dlc3QgaW5kZXggb2YgdGhlIGNvbnZlcnNpb25zIG9mIHRoaXMgdHlwZQogICAgICovCiAgICBmdW5jdGlvbiBnZXRMb3dlc3RDb252ZXJzaW9uSW5kZXggKHBhcmFtKSB7CiAgICAgIHZhciBtaW4gPSA5OTk7CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtLnR5cGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKCFpc0V4YWN0VHlwZShwYXJhbS50eXBlc1tpXSkpIHsKICAgICAgICAgIG1pbiA9IE1hdGgubWluKG1pbiwgcGFyYW0udHlwZXNbaV0uY29udmVyc2lvbkluZGV4KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiBtaW47CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21wYXJlIHR3byBwYXJhbXMKICAgICAqIEBwYXJhbSB7UGFyYW19IHBhcmFtMQogICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW0yCiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHJldHVybnMgYSBuZWdhdGl2ZSBudW1iZXIgd2hlbiBwYXJhbTEgbXVzdCBnZXQgYSBsb3dlcgogICAgICogICAgICAgICAgICAgICAgICBpbmRleCB0aGFuIHBhcmFtMiwgYSBwb3NpdGl2ZSBudW1iZXIgd2hlbiB0aGUgb3Bwb3NpdGUsCiAgICAgKiAgICAgICAgICAgICAgICAgIG9yIHplcm8gd2hlbiBib3RoIGFyZSBlcXVhbAogICAgICovCiAgICBmdW5jdGlvbiBjb21wYXJlUGFyYW1zIChwYXJhbTEsIHBhcmFtMikgewogICAgICB2YXIgYzsKCiAgICAgIC8vIGNvbXBhcmUgaGF2aW5nIGEgcmVzdCBwYXJhbWV0ZXIgb3Igbm90CiAgICAgIGMgPSBwYXJhbTEucmVzdFBhcmFtIC0gcGFyYW0yLnJlc3RQYXJhbTsKICAgICAgaWYgKGMgIT09IDApIHsKICAgICAgICByZXR1cm4gYzsKICAgICAgfQoKICAgICAgLy8gY29tcGFyZSBoYXZpbmcgY29udmVyc2lvbnMgb3Igbm90CiAgICAgIGMgPSBoYXNDb252ZXJzaW9ucyhwYXJhbTEpIC0gaGFzQ29udmVyc2lvbnMocGFyYW0yKTsKICAgICAgaWYgKGMgIT09IDApIHsKICAgICAgICByZXR1cm4gYzsKICAgICAgfQoKICAgICAgLy8gY29tcGFyZSB0aGUgaW5kZXggb2YgdGhlIHR5cGVzCiAgICAgIGMgPSBnZXRMb3dlc3RUeXBlSW5kZXgocGFyYW0xKSAtIGdldExvd2VzdFR5cGVJbmRleChwYXJhbTIpOwogICAgICBpZiAoYyAhPT0gMCkgewogICAgICAgIHJldHVybiBjOwogICAgICB9CgogICAgICAvLyBjb21wYXJlIHRoZSBpbmRleCBvZiBhbnkgY29udmVyc2lvbgogICAgICByZXR1cm4gZ2V0TG93ZXN0Q29udmVyc2lvbkluZGV4KHBhcmFtMSkgLSBnZXRMb3dlc3RDb252ZXJzaW9uSW5kZXgocGFyYW0yKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbXBhcmUgdHdvIHNpZ25hdHVyZXMKICAgICAqIEBwYXJhbSB7U2lnbmF0dXJlfSBzaWduYXR1cmUxCiAgICAgKiBAcGFyYW0ge1NpZ25hdHVyZX0gc2lnbmF0dXJlMgogICAgICogQHJldHVybiB7bnVtYmVyfSByZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyIHdoZW4gcGFyYW0xIG11c3QgZ2V0IGEgbG93ZXIKICAgICAqICAgICAgICAgICAgICAgICAgaW5kZXggdGhhbiBwYXJhbTIsIGEgcG9zaXRpdmUgbnVtYmVyIHdoZW4gdGhlIG9wcG9zaXRlLAogICAgICogICAgICAgICAgICAgICAgICBvciB6ZXJvIHdoZW4gYm90aCBhcmUgZXF1YWwKICAgICAqLwogICAgZnVuY3Rpb24gY29tcGFyZVNpZ25hdHVyZXMgKHNpZ25hdHVyZTEsIHNpZ25hdHVyZTIpIHsKICAgICAgdmFyIGxlbiA9IE1hdGgubWluKHNpZ25hdHVyZTEucGFyYW1zLmxlbmd0aCwgc2lnbmF0dXJlMi5wYXJhbXMubGVuZ3RoKTsKICAgICAgdmFyIGk7CiAgICAgIHZhciBjOwoKICAgICAgLy8gY29tcGFyZSB3aGV0aGVyIHRoZSBwYXJhbXMgaGF2ZSBjb252ZXJzaW9ucyBhdCBhbGwgb3Igbm90CiAgICAgIGMgPSBzaWduYXR1cmUxLnBhcmFtcy5zb21lKGhhc0NvbnZlcnNpb25zKSAtIHNpZ25hdHVyZTIucGFyYW1zLnNvbWUoaGFzQ29udmVyc2lvbnMpCiAgICAgIGlmIChjICE9PSAwKSB7CiAgICAgICAgcmV0dXJuIGM7CiAgICAgIH0KCiAgICAgIC8vIG5leHQgY29tcGFyZSB3aGV0aGVyIHRoZSBwYXJhbXMgaGF2ZSBjb252ZXJzaW9ucyBvbmUgYnkgb25lCiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgIGMgPSBoYXNDb252ZXJzaW9ucyhzaWduYXR1cmUxLnBhcmFtc1tpXSkgLSBoYXNDb252ZXJzaW9ucyhzaWduYXR1cmUyLnBhcmFtc1tpXSk7CiAgICAgICAgaWYgKGMgIT09IDApIHsKICAgICAgICAgIHJldHVybiBjOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gY29tcGFyZSB0aGUgdHlwZXMgb2YgdGhlIHBhcmFtcyBvbmUgYnkgb25lCiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgIGMgPSBjb21wYXJlUGFyYW1zKHNpZ25hdHVyZTEucGFyYW1zW2ldLCBzaWduYXR1cmUyLnBhcmFtc1tpXSk7CiAgICAgICAgaWYgKGMgIT09IDApIHsKICAgICAgICAgIHJldHVybiBjOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gY29tcGFyZSB0aGUgbnVtYmVyIG9mIHBhcmFtcwogICAgICByZXR1cm4gc2lnbmF0dXJlMS5wYXJhbXMubGVuZ3RoIC0gc2lnbmF0dXJlMi5wYXJhbXMubGVuZ3RoOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHBhcmFtcyBjb250YWluaW5nIGFsbCB0eXBlcyB0aGF0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gdGhlIGRlZmluZWQgdHlwZXMuCiAgICAgKgogICAgICogQHBhcmFtIHtDb252ZXJzaW9uRGVmW119IGNvbnZlcnNpb25zCiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSB0eXBlTmFtZXMKICAgICAqIEByZXR1cm4ge0NvbnZlcnNpb25EZWZbXX0gUmV0dXJucyB0aGUgY29udmVyc2lvbnMgdGhhdCBhcmUgYXZhaWxhYmxlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBldmVyeSB0eXBlIChpZiBhbnkpCiAgICAgKi8KICAgIGZ1bmN0aW9uIGZpbHRlckNvbnZlcnNpb25zKGNvbnZlcnNpb25zLCB0eXBlTmFtZXMpIHsKICAgICAgdmFyIG1hdGNoZXMgPSB7fTsKCiAgICAgIGNvbnZlcnNpb25zLmZvckVhY2goZnVuY3Rpb24gKGNvbnZlcnNpb24pIHsKICAgICAgICBpZiAodHlwZU5hbWVzLmluZGV4T2YoY29udmVyc2lvbi5mcm9tKSA9PT0gLTEgJiYKICAgICAgICAgICAgdHlwZU5hbWVzLmluZGV4T2YoY29udmVyc2lvbi50bykgIT09IC0xICYmCiAgICAgICAgICAgICFtYXRjaGVzW2NvbnZlcnNpb24uZnJvbV0pIHsKICAgICAgICAgIG1hdGNoZXNbY29udmVyc2lvbi5mcm9tXSA9IGNvbnZlcnNpb247CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhtYXRjaGVzKS5tYXAoZnVuY3Rpb24gKGZyb20pIHsKICAgICAgICByZXR1cm4gbWF0Y2hlc1tmcm9tXTsKICAgICAgfSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBQcmVwcm9jZXNzIGFyZ3VtZW50cyBiZWZvcmUgY2FsbGluZyB0aGUgb3JpZ2luYWwgZnVuY3Rpb246CiAgICAgKiAtIGlmIG5lZWRlZCBjb252ZXJ0IHRoZSBwYXJhbWV0ZXJzCiAgICAgKiAtIGluIGNhc2Ugb2YgcmVzdCBwYXJhbWV0ZXJzLCBtb3ZlIHRoZSByZXN0IHBhcmFtZXRlcnMgaW50byBhbiBBcnJheQogICAgICogQHBhcmFtIHtQYXJhbVtdfSBwYXJhbXMKICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuCiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIHdyYXBwZWQgZnVuY3Rpb24KICAgICAqLwogICAgZnVuY3Rpb24gY29tcGlsZUFyZ3NQcmVwcm9jZXNzaW5nKHBhcmFtcywgZm4pIHsKICAgICAgdmFyIGZuQ29udmVydCA9IGZuOwoKICAgICAgLy8gVE9ETzogY2FuIHdlIG1ha2UgdGhpcyB3cmFwcGVyIGZ1bmN0aW9uIHNtYXJ0ZXIvc2ltcGxlcj8KCiAgICAgIGlmIChwYXJhbXMuc29tZShoYXNDb252ZXJzaW9ucykpIHsKICAgICAgICB2YXIgcmVzdFBhcmFtID0gaGFzUmVzdFBhcmFtKHBhcmFtcyk7CiAgICAgICAgdmFyIGNvbXBpbGVkQ29udmVyc2lvbnMgPSBwYXJhbXMubWFwKGNvbXBpbGVBcmdDb252ZXJzaW9uKQoKICAgICAgICBmbkNvbnZlcnQgPSBmdW5jdGlvbiBjb252ZXJ0QXJncygpIHsKICAgICAgICAgIHZhciBhcmdzID0gW107CiAgICAgICAgICB2YXIgbGFzdCA9IHJlc3RQYXJhbSA/IGFyZ3VtZW50cy5sZW5ndGggLSAxIDogYXJndW1lbnRzLmxlbmd0aDsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdDsgaSsrKSB7CiAgICAgICAgICAgIGFyZ3NbaV0gPSBjb21waWxlZENvbnZlcnNpb25zW2ldKGFyZ3VtZW50c1tpXSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAocmVzdFBhcmFtKSB7CiAgICAgICAgICAgIGFyZ3NbbGFzdF0gPSBhcmd1bWVudHNbbGFzdF0ubWFwKGNvbXBpbGVkQ29udmVyc2lvbnNbbGFzdF0pOwogICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmdzKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZhciBmblByZXByb2Nlc3MgPSBmbkNvbnZlcnQ7CiAgICAgIGlmIChoYXNSZXN0UGFyYW0ocGFyYW1zKSkgewogICAgICAgIHZhciBvZmZzZXQgPSBwYXJhbXMubGVuZ3RoIC0gMTsKCiAgICAgICAgZm5QcmVwcm9jZXNzID0gZnVuY3Rpb24gcHJlcHJvY2Vzc1Jlc3RQYXJhbXMgKCkgewogICAgICAgICAgcmV0dXJuIGZuQ29udmVydC5hcHBseShudWxsLAogICAgICAgICAgICAgIHNsaWNlKGFyZ3VtZW50cywgMCwgb2Zmc2V0KS5jb25jYXQoW3NsaWNlKGFyZ3VtZW50cywgb2Zmc2V0KV0pKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiBmblByZXByb2Nlc3M7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21waWxlIGNvbnZlcnNpb24gZm9yIGEgcGFyYW1ldGVyIHRvIHRoZSByaWdodCB0eXBlCiAgICAgKiBAcGFyYW0ge1BhcmFtfSBwYXJhbQogICAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgdGhlIHdyYXBwZWQgZnVuY3Rpb24gdGhhdCB3aWxsIGNvbnZlcnQgYXJndW1lbnRzCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBjb21waWxlQXJnQ29udmVyc2lvbihwYXJhbSkgewogICAgICB2YXIgdGVzdDAsIHRlc3QxLCBjb252ZXJzaW9uMCwgY29udmVyc2lvbjE7CiAgICAgIHZhciB0ZXN0cyA9IFtdOwogICAgICB2YXIgY29udmVyc2lvbnMgPSBbXTsKCiAgICAgIHBhcmFtLnR5cGVzLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHsKICAgICAgICBpZiAodHlwZS5jb252ZXJzaW9uKSB7CiAgICAgICAgICB0ZXN0cy5wdXNoKGZpbmRUeXBlQnlOYW1lKHR5cGUuY29udmVyc2lvbi5mcm9tKS50ZXN0KTsKICAgICAgICAgIGNvbnZlcnNpb25zLnB1c2godHlwZS5jb252ZXJzaW9uLmNvbnZlcnQpOwogICAgICAgIH0KICAgICAgfSk7CgogICAgICAvLyBjcmVhdGUgb3B0aW1pemVkIGNvbnZlcnNpb24gZnVuY3Rpb25zIGRlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIGNvbnZlcnNpb25zCiAgICAgIHN3aXRjaCAoY29udmVyc2lvbnMubGVuZ3RoKSB7CiAgICAgICAgY2FzZSAwOgogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnZlcnRBcmcoYXJnKSB7CiAgICAgICAgICAgIHJldHVybiBhcmc7CiAgICAgICAgICB9CgogICAgICAgIGNhc2UgMToKICAgICAgICAgIHRlc3QwID0gdGVzdHNbMF0KICAgICAgICAgIGNvbnZlcnNpb24wID0gY29udmVyc2lvbnNbMF07CiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29udmVydEFyZyhhcmcpIHsKICAgICAgICAgICAgaWYgKHRlc3QwKGFyZykpIHsKICAgICAgICAgICAgICByZXR1cm4gY29udmVyc2lvbjAoYXJnKQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBhcmc7CiAgICAgICAgICB9CgogICAgICAgIGNhc2UgMjoKICAgICAgICAgIHRlc3QwID0gdGVzdHNbMF0KICAgICAgICAgIHRlc3QxID0gdGVzdHNbMV0KICAgICAgICAgIGNvbnZlcnNpb24wID0gY29udmVyc2lvbnNbMF07CiAgICAgICAgICBjb252ZXJzaW9uMSA9IGNvbnZlcnNpb25zWzFdOwogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnZlcnRBcmcoYXJnKSB7CiAgICAgICAgICAgIGlmICh0ZXN0MChhcmcpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnNpb24wKGFyZykKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGVzdDEoYXJnKSkgewogICAgICAgICAgICAgIHJldHVybiBjb252ZXJzaW9uMShhcmcpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGFyZzsKICAgICAgICAgIH0KCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjb252ZXJ0QXJnKGFyZykgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnZlcnNpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgaWYgKHRlc3RzW2ldKGFyZykpIHsKICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJzaW9uc1tpXShhcmcpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gYXJnOwogICAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0IGFuIGFycmF5IHdpdGggc2lnbmF0dXJlcyBpbnRvIGEgbWFwIHdpdGggc2lnbmF0dXJlcywKICAgICAqIHdoZXJlIHNpZ25hdHVyZXMgd2l0aCB1bmlvbiB0eXBlcyBhcmUgc3BsaXQgaW50byBzZXBhcmF0ZSBzaWduYXR1cmVzCiAgICAgKgogICAgICogVGhyb3dzIGFuIGVycm9yIHdoZW4gdGhlcmUgYXJlIGNvbmZsaWN0aW5nIHR5cGVzCiAgICAgKgogICAgICogQHBhcmFtIHtTaWduYXR1cmVbXX0gc2lnbmF0dXJlcwogICAgICogQHJldHVybiB7T2JqZWN0LjxzdHJpbmcsIGZ1bmN0aW9uPn0gIFJldHVybnMgYSBtYXAgd2l0aCBzaWduYXR1cmVzCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMga2V5IGFuZCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGlzIHNpZ25hdHVyZSBhcyB2YWx1ZS4KICAgICAqLwogICAgZnVuY3Rpb24gY3JlYXRlU2lnbmF0dXJlc01hcChzaWduYXR1cmVzKSB7CiAgICAgIHZhciBzaWduYXR1cmVzTWFwID0ge307CiAgICAgIHNpZ25hdHVyZXMuZm9yRWFjaChmdW5jdGlvbiAoc2lnbmF0dXJlKSB7CiAgICAgICAgaWYgKCFzaWduYXR1cmUucGFyYW1zLnNvbWUoaGFzQ29udmVyc2lvbnMpKSB7CiAgICAgICAgICBzcGxpdFBhcmFtcyhzaWduYXR1cmUucGFyYW1zLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbXMpIHsKICAgICAgICAgICAgc2lnbmF0dXJlc01hcFtzdHJpbmdpZnlQYXJhbXMocGFyYW1zKV0gPSBzaWduYXR1cmUuZm47CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0pOwoKICAgICAgcmV0dXJuIHNpZ25hdHVyZXNNYXA7CiAgICB9CgogICAgLyoqCiAgICAgKiBTcGxpdCBwYXJhbXMgd2l0aCB1bmlvbiB0eXBlcyBpbiB0byBzZXBhcmF0ZSBwYXJhbXMuCiAgICAgKgogICAgICogRm9yIGV4YW1wbGU6CiAgICAgKgogICAgICogICAgIHNwbGl0UGFyYW1zKFtbJ0FycmF5JywgJ09iamVjdCddLCBbJ3N0cmluZycsICdSZWdFeHAnXSkKICAgICAqICAgICAvLyByZXR1cm5zOgogICAgICogICAgIC8vIFsKICAgICAqICAgICAvLyAgIFsnQXJyYXknLCAnc3RyaW5nJ10sCiAgICAgKiAgICAgLy8gICBbJ0FycmF5JywgJ1JlZ0V4cCddLAogICAgICogICAgIC8vICAgWydPYmplY3QnLCAnc3RyaW5nJ10sCiAgICAgKiAgICAgLy8gICBbJ09iamVjdCcsICdSZWdFeHAnXQogICAgICogICAgIC8vIF0KICAgICAqCiAgICAgKiBAcGFyYW0ge1BhcmFtW119IHBhcmFtcwogICAgICogQHBhcmFtIHtib29sZWFufSBpZ25vcmVDb252ZXJzaW9uVHlwZXMKICAgICAqIEByZXR1cm4ge1BhcmFtW119CiAgICAgKi8KICAgIGZ1bmN0aW9uIHNwbGl0UGFyYW1zKHBhcmFtcywgaWdub3JlQ29udmVyc2lvblR5cGVzKSB7CiAgICAgIGZ1bmN0aW9uIF9zcGxpdFBhcmFtcyhwYXJhbXMsIGluZGV4LCB0eXBlcykgewogICAgICAgIGlmIChpbmRleCA8IHBhcmFtcy5sZW5ndGgpIHsKICAgICAgICAgIHZhciBwYXJhbSA9IHBhcmFtc1tpbmRleF0KICAgICAgICAgIHZhciBmaWx0ZXJlZFR5cGVzID0gaWdub3JlQ29udmVyc2lvblR5cGVzCiAgICAgICAgICAgICAgPyBwYXJhbS50eXBlcy5maWx0ZXIoaXNFeGFjdFR5cGUpCiAgICAgICAgICAgICAgOiBwYXJhbS50eXBlczsKICAgICAgICAgIHZhciB0eXBlR3JvdXBzCgogICAgICAgICAgaWYgKHBhcmFtLnJlc3RQYXJhbSkgewogICAgICAgICAgICAvLyBzcGxpdCB0aGUgdHlwZXMgb2YgYSByZXN0IHBhcmFtZXRlciBpbiB0d286CiAgICAgICAgICAgIC8vIG9uZSB3aXRoIG9ubHkgZXhhY3QgdHlwZXMsIGFuZCBvbmUgd2l0aCBleGFjdCB0eXBlcyBhbmQgY29udmVyc2lvbnMKICAgICAgICAgICAgdmFyIGV4YWN0VHlwZXMgPSBmaWx0ZXJlZFR5cGVzLmZpbHRlcihpc0V4YWN0VHlwZSkKICAgICAgICAgICAgdHlwZUdyb3VwcyA9IGV4YWN0VHlwZXMubGVuZ3RoIDwgZmlsdGVyZWRUeXBlcy5sZW5ndGgKICAgICAgICAgICAgICAgID8gW2V4YWN0VHlwZXMsIGZpbHRlcmVkVHlwZXNdCiAgICAgICAgICAgICAgICA6IFtmaWx0ZXJlZFR5cGVzXQoKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAvLyBzcGxpdCBhbGwgdGhlIHR5cGVzIG9mIGEgcmVndWxhciBwYXJhbWV0ZXIgaW50byBvbmUgdHlwZSBwZXIgZ3JvdXAKICAgICAgICAgICAgdHlwZUdyb3VwcyA9IGZpbHRlcmVkVHlwZXMubWFwKGZ1bmN0aW9uICh0eXBlKSB7CiAgICAgICAgICAgICAgcmV0dXJuIFt0eXBlXQogICAgICAgICAgICB9KQogICAgICAgICAgfQoKICAgICAgICAgIC8vIHJlY3Vyc2Ugb3ZlciB0aGUgZ3JvdXBzIHdpdGggdHlwZXMKICAgICAgICAgIHJldHVybiBmbGF0TWFwKHR5cGVHcm91cHMsIGZ1bmN0aW9uICh0eXBlR3JvdXApIHsKICAgICAgICAgICAgcmV0dXJuIF9zcGxpdFBhcmFtcyhwYXJhbXMsIGluZGV4ICsgMSwgdHlwZXMuY29uY2F0KFt0eXBlR3JvdXBdKSk7CiAgICAgICAgICB9KTsKCiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgLy8gd2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBwYXJhbWV0ZXJzLiBOb3cgYnVpbGQgYSBuZXcgUGFyYW0KICAgICAgICAgIHZhciBzcGxpdHRlZFBhcmFtcyA9IHR5cGVzLm1hcChmdW5jdGlvbiAodHlwZSwgdHlwZUluZGV4KSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgdHlwZXM6IHR5cGUsCiAgICAgICAgICAgICAgcmVzdFBhcmFtOiAodHlwZUluZGV4ID09PSBwYXJhbXMubGVuZ3RoIC0gMSkgJiYgaGFzUmVzdFBhcmFtKHBhcmFtcykKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CgogICAgICAgICAgcmV0dXJuIFtzcGxpdHRlZFBhcmFtc107CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gX3NwbGl0UGFyYW1zKHBhcmFtcywgMCwgW10pOwogICAgfQoKICAgIC8qKgogICAgICogVGVzdCB3aGV0aGVyIHR3byBzaWduYXR1cmVzIGhhdmUgYSBjb25mbGljdGluZyBzaWduYXR1cmUKICAgICAqIEBwYXJhbSB7U2lnbmF0dXJlfSBzaWduYXR1cmUxCiAgICAgKiBAcGFyYW0ge1NpZ25hdHVyZX0gc2lnbmF0dXJlMgogICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIHNpZ25hdHVyZXMgY29uZmxpY3QsIGZhbHNlIG90aGVyd2lzZS4KICAgICAqLwogICAgZnVuY3Rpb24gaGFzQ29uZmxpY3RpbmdQYXJhbXMoc2lnbmF0dXJlMSwgc2lnbmF0dXJlMikgewogICAgICB2YXIgaWkgPSBNYXRoLm1heChzaWduYXR1cmUxLnBhcmFtcy5sZW5ndGgsIHNpZ25hdHVyZTIucGFyYW1zLmxlbmd0aCk7CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlpOyBpKyspIHsKICAgICAgICB2YXIgdHlwZXNOYW1lczEgPSBnZXRFeHBlY3RlZFR5cGVOYW1lcyhzaWduYXR1cmUxLCBpLCB0cnVlKTsKICAgICAgICB2YXIgdHlwZXNOYW1lczIgPSBnZXRFeHBlY3RlZFR5cGVOYW1lcyhzaWduYXR1cmUyLCBpLCB0cnVlKTsKCiAgICAgICAgaWYgKCFoYXNPdmVybGFwKHR5cGVzTmFtZXMxLCB0eXBlc05hbWVzMikpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZhciBsZW4xID0gc2lnbmF0dXJlMS5wYXJhbXMubGVuZ3RoOwogICAgICB2YXIgbGVuMiA9IHNpZ25hdHVyZTIucGFyYW1zLmxlbmd0aDsKICAgICAgdmFyIHJlc3RQYXJhbTEgPSBoYXNSZXN0UGFyYW0oc2lnbmF0dXJlMS5wYXJhbXMpOwogICAgICB2YXIgcmVzdFBhcmFtMiA9IGhhc1Jlc3RQYXJhbShzaWduYXR1cmUyLnBhcmFtcyk7CgogICAgICByZXR1cm4gcmVzdFBhcmFtMQogICAgICAgICAgPyByZXN0UGFyYW0yID8gKGxlbjEgPT09IGxlbjIpIDogKGxlbjIgPj0gbGVuMSkKICAgICAgICAgIDogcmVzdFBhcmFtMiA/IChsZW4xID49IGxlbjIpICA6IChsZW4xID09PSBsZW4yKQogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgdHlwZWQgZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lICAgICAgICAgICAgICAgVGhlIG5hbWUgZm9yIHRoZSB0eXBlZCBmdW5jdGlvbgogICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywgZnVuY3Rpb24+fSBzaWduYXR1cmVzTWFwCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuIG9iamVjdCB3aXRoIG9uZSBvcgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBzaWduYXR1cmVzIGFzIGtleSwgYW5kIHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUgYXMgdmFsdWUuCiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gIFJldHVybnMgdGhlIGNyZWF0ZWQgdHlwZWQgZnVuY3Rpb24uCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyZWF0ZVR5cGVkRnVuY3Rpb24obmFtZSwgc2lnbmF0dXJlc01hcCkgewogICAgICBpZiAoT2JqZWN0LmtleXMoc2lnbmF0dXJlc01hcCkubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdObyBzaWduYXR1cmVzIHByb3ZpZGVkJyk7CiAgICAgIH0KCiAgICAgIC8vIHBhcnNlIHRoZSBzaWduYXR1cmVzLCBhbmQgY2hlY2sgZm9yIGNvbmZsaWN0cwogICAgICB2YXIgcGFyc2VkU2lnbmF0dXJlcyA9IFtdOwogICAgICBPYmplY3Qua2V5cyhzaWduYXR1cmVzTWFwKQogICAgICAgICAgLm1hcChmdW5jdGlvbiAoc2lnbmF0dXJlKSB7CiAgICAgICAgICAgIHJldHVybiBwYXJzZVNpZ25hdHVyZShzaWduYXR1cmUsIHNpZ25hdHVyZXNNYXBbc2lnbmF0dXJlXSwgdHlwZWQuY29udmVyc2lvbnMpOwogICAgICAgICAgfSkKICAgICAgICAgIC5maWx0ZXIobm90TnVsbCkKICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChwYXJzZWRTaWduYXR1cmUpIHsKICAgICAgICAgICAgLy8gY2hlY2sgd2hldGhlciB0aGlzIHBhcmFtZXRlciBjb25mbGljdHMgd2l0aCBhbHJlYWR5IHBhcnNlZCBzaWduYXR1cmVzCiAgICAgICAgICAgIHZhciBjb25mbGljdGluZ1NpZ25hdHVyZSA9IGZpbmRJbkFycmF5KHBhcnNlZFNpZ25hdHVyZXMsIGZ1bmN0aW9uIChzKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGhhc0NvbmZsaWN0aW5nUGFyYW1zKHMsIHBhcnNlZFNpZ25hdHVyZSkKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlmIChjb25mbGljdGluZ1NpZ25hdHVyZSkgewogICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvbmZsaWN0aW5nIHNpZ25hdHVyZXMgIicgKwogICAgICAgICAgICAgICAgICBzdHJpbmdpZnlQYXJhbXMoY29uZmxpY3RpbmdTaWduYXR1cmUucGFyYW1zKSArICciIGFuZCAiJyArCiAgICAgICAgICAgICAgICAgIHN0cmluZ2lmeVBhcmFtcyhwYXJzZWRTaWduYXR1cmUucGFyYW1zKSArICciLicpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBwYXJzZWRTaWduYXR1cmVzLnB1c2gocGFyc2VkU2lnbmF0dXJlKTsKICAgICAgICAgIH0pOwoKICAgICAgLy8gc3BsaXQgYW5kIGZpbHRlciB0aGUgdHlwZXMgb2YgdGhlIHNpZ25hdHVyZXMsIGFuZCB0aGVuIG9yZGVyIHRoZW0KICAgICAgdmFyIHNpZ25hdHVyZXMgPSBmbGF0TWFwKHBhcnNlZFNpZ25hdHVyZXMsIGZ1bmN0aW9uIChwYXJzZWRTaWduYXR1cmUpIHsKICAgICAgICB2YXIgcGFyYW1zID0gcGFyc2VkU2lnbmF0dXJlID8gc3BsaXRQYXJhbXMocGFyc2VkU2lnbmF0dXJlLnBhcmFtcywgZmFsc2UpIDogW10KCiAgICAgICAgcmV0dXJuIHBhcmFtcy5tYXAoZnVuY3Rpb24gKHBhcmFtcykgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsCiAgICAgICAgICAgIGZuOiBwYXJzZWRTaWduYXR1cmUuZm4KICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICAgIH0pLmZpbHRlcihub3ROdWxsKTsKCiAgICAgIHNpZ25hdHVyZXMuc29ydChjb21wYXJlU2lnbmF0dXJlcyk7CgogICAgICAvLyB3ZSBjcmVhdGUgYSBoaWdobHkgb3B0aW1pemVkIGNoZWNrcyBmb3IgdGhlIGZpcnN0IGNvdXBsZSBvZiBzaWduYXR1cmVzIHdpdGggbWF4IDIgYXJndW1lbnRzCiAgICAgIHZhciBvazAgPSBzaWduYXR1cmVzWzBdICYmIHNpZ25hdHVyZXNbMF0ucGFyYW1zLmxlbmd0aCA8PSAyICYmICFoYXNSZXN0UGFyYW0oc2lnbmF0dXJlc1swXS5wYXJhbXMpOwogICAgICB2YXIgb2sxID0gc2lnbmF0dXJlc1sxXSAmJiBzaWduYXR1cmVzWzFdLnBhcmFtcy5sZW5ndGggPD0gMiAmJiAhaGFzUmVzdFBhcmFtKHNpZ25hdHVyZXNbMV0ucGFyYW1zKTsKICAgICAgdmFyIG9rMiA9IHNpZ25hdHVyZXNbMl0gJiYgc2lnbmF0dXJlc1syXS5wYXJhbXMubGVuZ3RoIDw9IDIgJiYgIWhhc1Jlc3RQYXJhbShzaWduYXR1cmVzWzJdLnBhcmFtcyk7CiAgICAgIHZhciBvazMgPSBzaWduYXR1cmVzWzNdICYmIHNpZ25hdHVyZXNbM10ucGFyYW1zLmxlbmd0aCA8PSAyICYmICFoYXNSZXN0UGFyYW0oc2lnbmF0dXJlc1szXS5wYXJhbXMpOwogICAgICB2YXIgb2s0ID0gc2lnbmF0dXJlc1s0XSAmJiBzaWduYXR1cmVzWzRdLnBhcmFtcy5sZW5ndGggPD0gMiAmJiAhaGFzUmVzdFBhcmFtKHNpZ25hdHVyZXNbNF0ucGFyYW1zKTsKICAgICAgdmFyIG9rNSA9IHNpZ25hdHVyZXNbNV0gJiYgc2lnbmF0dXJlc1s1XS5wYXJhbXMubGVuZ3RoIDw9IDIgJiYgIWhhc1Jlc3RQYXJhbShzaWduYXR1cmVzWzVdLnBhcmFtcyk7CiAgICAgIHZhciBhbGxPayA9IG9rMCAmJiBvazEgJiYgb2syICYmIG9rMyAmJiBvazQgJiYgb2s1OwoKICAgICAgLy8gY29tcGlsZSB0aGUgdGVzdHMKICAgICAgdmFyIHRlc3RzID0gc2lnbmF0dXJlcy5tYXAoZnVuY3Rpb24gKHNpZ25hdHVyZSkgewogICAgICAgIHJldHVybiBjb21waWxlVGVzdHMoc2lnbmF0dXJlLnBhcmFtcyk7CiAgICAgIH0pOwoKICAgICAgdmFyIHRlc3QwMCA9IG9rMCA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbMF0ucGFyYW1zWzBdKSA6IG5vdE9rOwogICAgICB2YXIgdGVzdDEwID0gb2sxID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1sxXS5wYXJhbXNbMF0pIDogbm90T2s7CiAgICAgIHZhciB0ZXN0MjAgPSBvazIgPyBjb21waWxlVGVzdChzaWduYXR1cmVzWzJdLnBhcmFtc1swXSkgOiBub3RPazsKICAgICAgdmFyIHRlc3QzMCA9IG9rMyA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbM10ucGFyYW1zWzBdKSA6IG5vdE9rOwogICAgICB2YXIgdGVzdDQwID0gb2s0ID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1s0XS5wYXJhbXNbMF0pIDogbm90T2s7CiAgICAgIHZhciB0ZXN0NTAgPSBvazUgPyBjb21waWxlVGVzdChzaWduYXR1cmVzWzVdLnBhcmFtc1swXSkgOiBub3RPazsKCiAgICAgIHZhciB0ZXN0MDEgPSBvazAgPyBjb21waWxlVGVzdChzaWduYXR1cmVzWzBdLnBhcmFtc1sxXSkgOiBub3RPazsKICAgICAgdmFyIHRlc3QxMSA9IG9rMSA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbMV0ucGFyYW1zWzFdKSA6IG5vdE9rOwogICAgICB2YXIgdGVzdDIxID0gb2syID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1syXS5wYXJhbXNbMV0pIDogbm90T2s7CiAgICAgIHZhciB0ZXN0MzEgPSBvazMgPyBjb21waWxlVGVzdChzaWduYXR1cmVzWzNdLnBhcmFtc1sxXSkgOiBub3RPazsKICAgICAgdmFyIHRlc3Q0MSA9IG9rNCA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbNF0ucGFyYW1zWzFdKSA6IG5vdE9rOwogICAgICB2YXIgdGVzdDUxID0gb2s1ID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1s1XS5wYXJhbXNbMV0pIDogbm90T2s7CgogICAgICAvLyBjb21waWxlIHRoZSBmdW5jdGlvbnMKICAgICAgdmFyIGZucyA9IHNpZ25hdHVyZXMubWFwKGZ1bmN0aW9uKHNpZ25hdHVyZSkgewogICAgICAgIHJldHVybiBjb21waWxlQXJnc1ByZXByb2Nlc3Npbmcoc2lnbmF0dXJlLnBhcmFtcywgc2lnbmF0dXJlLmZuKQogICAgICB9KTsKCiAgICAgIHZhciBmbjAgPSBvazAgPyBmbnNbMF0gOiB1bmRlZjsKICAgICAgdmFyIGZuMSA9IG9rMSA/IGZuc1sxXSA6IHVuZGVmOwogICAgICB2YXIgZm4yID0gb2syID8gZm5zWzJdIDogdW5kZWY7CiAgICAgIHZhciBmbjMgPSBvazMgPyBmbnNbM10gOiB1bmRlZjsKICAgICAgdmFyIGZuNCA9IG9rNCA/IGZuc1s0XSA6IHVuZGVmOwogICAgICB2YXIgZm41ID0gb2s1ID8gZm5zWzVdIDogdW5kZWY7CgogICAgICB2YXIgbGVuMCA9IG9rMCA/IHNpZ25hdHVyZXNbMF0ucGFyYW1zLmxlbmd0aCA6IC0xOwogICAgICB2YXIgbGVuMSA9IG9rMSA/IHNpZ25hdHVyZXNbMV0ucGFyYW1zLmxlbmd0aCA6IC0xOwogICAgICB2YXIgbGVuMiA9IG9rMiA/IHNpZ25hdHVyZXNbMl0ucGFyYW1zLmxlbmd0aCA6IC0xOwogICAgICB2YXIgbGVuMyA9IG9rMyA/IHNpZ25hdHVyZXNbM10ucGFyYW1zLmxlbmd0aCA6IC0xOwogICAgICB2YXIgbGVuNCA9IG9rNCA/IHNpZ25hdHVyZXNbNF0ucGFyYW1zLmxlbmd0aCA6IC0xOwogICAgICB2YXIgbGVuNSA9IG9rNSA/IHNpZ25hdHVyZXNbNV0ucGFyYW1zLmxlbmd0aCA6IC0xOwoKICAgICAgLy8gc2ltcGxlIGFuZCBnZW5lcmljLCBidXQgYWxzbyBzbG93CiAgICAgIHZhciBpU3RhcnQgPSBhbGxPayA/IDYgOiAwOwogICAgICB2YXIgaUVuZCA9IHNpZ25hdHVyZXMubGVuZ3RoOwogICAgICB2YXIgZ2VuZXJpYyA9IGZ1bmN0aW9uIGdlbmVyaWMoKSB7CiAgICAgICAgJ3VzZSBzdHJpY3QnOwoKICAgICAgICBmb3IgKHZhciBpID0gaVN0YXJ0OyBpIDwgaUVuZDsgaSsrKSB7CiAgICAgICAgICBpZiAodGVzdHNbaV0oYXJndW1lbnRzKSkgewogICAgICAgICAgICByZXR1cm4gZm5zW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBjcmVhdGVFcnJvcihuYW1lLCBhcmd1bWVudHMsIHNpZ25hdHVyZXMpOwogICAgICB9CgogICAgICAvLyBjcmVhdGUgdGhlIHR5cGVkIGZ1bmN0aW9uCiAgICAgIC8vIGZhc3QsIHNwZWNpYWxpemVkIHZlcnNpb24uIEZhbGxzIGJhY2sgdG8gdGhlIHNsb3dlciwgZ2VuZXJpYyBvbmUgaWYgbmVlZGVkCiAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIGZuKGFyZzAsIGFyZzEpIHsKICAgICAgICAndXNlIHN0cmljdCc7CgogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSBsZW4wICYmIHRlc3QwMChhcmcwKSAmJiB0ZXN0MDEoYXJnMSkpIHsgcmV0dXJuIGZuMC5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjEgJiYgdGVzdDEwKGFyZzApICYmIHRlc3QxMShhcmcxKSkgeyByZXR1cm4gZm4xLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH0KICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gbGVuMiAmJiB0ZXN0MjAoYXJnMCkgJiYgdGVzdDIxKGFyZzEpKSB7IHJldHVybiBmbjIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfQogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSBsZW4zICYmIHRlc3QzMChhcmcwKSAmJiB0ZXN0MzEoYXJnMSkpIHsgcmV0dXJuIGZuMy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjQgJiYgdGVzdDQwKGFyZzApICYmIHRlc3Q0MShhcmcxKSkgeyByZXR1cm4gZm40LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH0KICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gbGVuNSAmJiB0ZXN0NTAoYXJnMCkgJiYgdGVzdDUxKGFyZzEpKSB7IHJldHVybiBmbjUuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsgfQoKICAgICAgICByZXR1cm4gZ2VuZXJpYy5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgICB9CgogICAgICAvLyBhdHRhY2ggbmFtZSB0aGUgdHlwZWQgZnVuY3Rpb24KICAgICAgdHJ5IHsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICduYW1lJywge3ZhbHVlOiBuYW1lfSk7CiAgICAgIH0KICAgICAgY2F0Y2ggKGVycikgewogICAgICAgIC8vIG9sZCBicm93c2VycyBkbyBub3Qgc3VwcG9ydCBPYmplY3QuZGVmaW5lUHJvcGVydHkgYW5kIHNvbWUgZG9uJ3Qgc3VwcG9ydCBzZXR0aW5nIHRoZSBuYW1lIHByb3BlcnR5CiAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIG5hbWUgaXMgbm90IGVzc2VudGlhbCBmb3IgdGhlIGZ1bmN0aW9uaW5nLCBpdCdzIG1vc3RseSB1c2VmdWwgZm9yIGRlYnVnZ2luZywKICAgICAgICAvLyBzbyBpdCdzIGZpbmUgdG8gaGF2ZSB1bm5hbWVkIGZ1bmN0aW9ucy4KICAgICAgfQoKICAgICAgLy8gYXR0YWNoIHNpZ25hdHVyZXMgdG8gdGhlIGZ1bmN0aW9uCiAgICAgIGZuLnNpZ25hdHVyZXMgPSBjcmVhdGVTaWduYXR1cmVzTWFwKHNpZ25hdHVyZXMpOwoKICAgICAgcmV0dXJuIGZuOwogICAgfQoKICAgIC8qKgogICAgICogVGVzdCB3aGV0aGVyIGEgdHlwZSBzaG91bGQgYmUgTk9UIGJlIGlnbm9yZWQKICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZQogICAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAqLwogICAgZnVuY3Rpb24gbm90SWdub3JlKHR5cGVOYW1lKSB7CiAgICAgIHJldHVybiB0eXBlZC5pZ25vcmUuaW5kZXhPZih0eXBlTmFtZSkgPT09IC0xOwogICAgfQoKICAgIC8qKgogICAgICogdHJpbSBhIHN0cmluZwogICAgICogQHBhcmFtIHtzdHJpbmd9IHN0cgogICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICovCiAgICBmdW5jdGlvbiB0cmltKHN0cikgewogICAgICByZXR1cm4gc3RyLnRyaW0oKTsKICAgIH0KCiAgICAvKioKICAgICAqIFRlc3Qgd2hldGhlciBhIHN0cmluZyBpcyBub3QgZW1wdHkKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIKICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgKi8KICAgIGZ1bmN0aW9uIG5vdEVtcHR5KHN0cikgewogICAgICByZXR1cm4gISFzdHI7CiAgICB9CgogICAgLyoqCiAgICAgKiB0ZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBub3Qgc3RyaWN0IGVxdWFsIHRvIG51bGwKICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUKICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgKi8KICAgIGZ1bmN0aW9uIG5vdE51bGwodmFsdWUpIHsKICAgICAgcmV0dXJuIHZhbHVlICE9PSBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogVGVzdCB3aGV0aGVyIGEgcGFyYW1ldGVyIGhhcyBubyB0eXBlcyBkZWZpbmVkCiAgICAgKiBAcGFyYW0ge1BhcmFtfSBwYXJhbQogICAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAqLwogICAgZnVuY3Rpb24gaXNJbnZhbGlkUGFyYW0gKHBhcmFtKSB7CiAgICAgIHJldHVybiBwYXJhbS50eXBlcy5sZW5ndGggPT09IDA7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYWxsIGJ1dCB0aGUgbGFzdCBpdGVtcyBvZiBhbiBhcnJheQogICAgICogQHBhcmFtIHtBcnJheX0gYXJyCiAgICAgKiBAcmV0dXJuIHtBcnJheX0KICAgICAqLwogICAgZnVuY3Rpb24gaW5pdGlhbChhcnIpIHsKICAgICAgcmV0dXJuIGFyci5zbGljZSgwLCBhcnIubGVuZ3RoIC0gMSk7CiAgICB9CgogICAgLyoqCiAgICAgKiByZXR1cm4gdGhlIGxhc3QgaXRlbSBvZiBhbiBhcnJheQogICAgICogQHBhcmFtIHtBcnJheX0gYXJyCiAgICAgKiBAcmV0dXJuIHsqfQogICAgICovCiAgICBmdW5jdGlvbiBsYXN0KGFycikgewogICAgICByZXR1cm4gYXJyW2Fyci5sZW5ndGggLSAxXTsKICAgIH0KCiAgICAvKioKICAgICAqIFNsaWNlIGFuIGFycmF5IG9yIGZ1bmN0aW9uIEFyZ3VtZW50cwogICAgICogQHBhcmFtIHtBcnJheSB8IEFyZ3VtZW50cyB8IElBcmd1bWVudHN9IGFycgogICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0CiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZF0KICAgICAqIEByZXR1cm4ge0FycmF5fQogICAgICovCiAgICBmdW5jdGlvbiBzbGljZShhcnIsIHN0YXJ0LCBlbmQpIHsKICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyciwgc3RhcnQsIGVuZCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUZXN0IHdoZXRoZXIgYW4gYXJyYXkgY29udGFpbnMgc29tZSBpdGVtCiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheQogICAgICogQHBhcmFtIHsqfSBpdGVtCiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgYXJyYXkgY29udGFpbnMgaXRlbSwgZmFsc2UgaWYgbm90LgogICAgICovCiAgICBmdW5jdGlvbiBjb250YWlucyhhcnJheSwgaXRlbSkgewogICAgICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtKSAhPT0gLTE7CiAgICB9CgogICAgLyoqCiAgICAgKiBUZXN0IHdoZXRoZXIgdHdvIGFycmF5cyBoYXZlIG92ZXJsYXBwaW5nIGl0ZW1zCiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheTEKICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5MgogICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gYXQgbGVhc3Qgb25lIGl0ZW0gZXhpc3RzIGluIGJvdGggYXJyYXlzCiAgICAgKi8KICAgIGZ1bmN0aW9uIGhhc092ZXJsYXAoYXJyYXkxLCBhcnJheTIpIHsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheTEubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoY29udGFpbnMoYXJyYXkyLCBhcnJheTFbaV0pKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgZmlyc3QgaXRlbSBmcm9tIGFuIGFycmF5IGZvciB3aGljaCB0ZXN0KGFycltpXSkgcmV0dXJucyB0cnVlCiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnIKICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHRlc3QKICAgICAqIEByZXR1cm4geyogfCB1bmRlZmluZWR9IFJldHVybnMgdGhlIGZpcnN0IG1hdGNoaW5nIGl0ZW0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHVuZGVmaW5lZCB3aGVuIHRoZXJlIGlzIG5vIG1hdGNoCiAgICAgKi8KICAgIGZ1bmN0aW9uIGZpbmRJbkFycmF5KGFyciwgdGVzdCkgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh0ZXN0KGFycltpXSkpIHsKICAgICAgICAgIHJldHVybiBhcnJbaV07CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBGaWx0ZXIgdW5pcXVlIGl0ZW1zIG9mIGFuIGFycmF5IHdpdGggc3RyaW5ncwogICAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJyCiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0KICAgICAqLwogICAgZnVuY3Rpb24gdW5pcShhcnIpIHsKICAgICAgdmFyIGVudHJpZXMgPSB7fQogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgewogICAgICAgIGVudHJpZXNbYXJyW2ldXSA9IHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGVudHJpZXMpOwogICAgfQoKICAgIC8qKgogICAgICogRmxhdCBtYXAgdGhlIHJlc3VsdCBpbnZva2luZyBhIGNhbGxiYWNrIGZvciBldmVyeSBpdGVtIGluIGFuIGFycmF5LgogICAgICogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vc2FtZ2lsZXMvNzYyZWUzMzdkZmY0ODYyM2U3MjkKICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycgogICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sKICAgICAqIEByZXR1cm4ge0FycmF5fQogICAgICovCiAgICBmdW5jdGlvbiBmbGF0TWFwKGFyciwgY2FsbGJhY2spIHsKICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGFyci5tYXAoY2FsbGJhY2spKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBmdW5jdGlvbiBuYW1lIGZyb20gYSBzZXQgb2YgdHlwZWQgZnVuY3Rpb25zLAogICAgICogYW5kIGNoZWNrIHdoZXRoZXIgdGhlIG5hbWUgb2YgYWxsIGZ1bmN0aW9ucyBtYXRjaCAoaWYgZ2l2ZW4pCiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uW119IGZucwogICAgICovCiAgICBmdW5jdGlvbiBnZXROYW1lIChmbnMpIHsKICAgICAgdmFyIG5hbWUgPSAnJzsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGZuID0gZm5zW2ldOwoKICAgICAgICAvLyBjaGVjayB3aGV0aGVyIHRoZSBuYW1lcyBhcmUgdGhlIHNhbWUgd2hlbiBkZWZpbmVkCiAgICAgICAgaWYgKCh0eXBlb2YgZm4uc2lnbmF0dXJlcyA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGZuLnNpZ25hdHVyZSA9PT0gJ3N0cmluZycpICYmIGZuLm5hbWUgIT09ICcnKSB7CiAgICAgICAgICBpZiAobmFtZSA9PT0gJycpIHsKICAgICAgICAgICAgbmFtZSA9IGZuLm5hbWU7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChuYW1lICE9PSBmbi5uYW1lKSB7CiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0Z1bmN0aW9uIG5hbWVzIGRvIG5vdCBtYXRjaCAoZXhwZWN0ZWQ6ICcgKyBuYW1lICsgJywgYWN0dWFsOiAnICsgZm4ubmFtZSArICcpJyk7CiAgICAgICAgICAgIGVyci5kYXRhID0gewogICAgICAgICAgICAgIGFjdHVhbDogZm4ubmFtZSwKICAgICAgICAgICAgICBleHBlY3RlZDogbmFtZQogICAgICAgICAgICB9OwogICAgICAgICAgICB0aHJvdyBlcnI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gbmFtZTsKICAgIH0KCiAgICAvLyBleHRyYWN0IGFuZCBtZXJnZSBhbGwgc2lnbmF0dXJlcyBvZiBhIGxpc3Qgd2l0aCB0eXBlZCBmdW5jdGlvbnMKICAgIGZ1bmN0aW9uIGV4dHJhY3RTaWduYXR1cmVzKGZucykgewogICAgICB2YXIgZXJyOwogICAgICB2YXIgc2lnbmF0dXJlc01hcCA9IHt9OwoKICAgICAgZnVuY3Rpb24gdmFsaWRhdGVVbmlxdWUoX3NpZ25hdHVyZSwgX2ZuKSB7CiAgICAgICAgaWYgKHNpZ25hdHVyZXNNYXAuaGFzT3duUHJvcGVydHkoX3NpZ25hdHVyZSkgJiYgX2ZuICE9PSBzaWduYXR1cmVzTWFwW19zaWduYXR1cmVdKSB7CiAgICAgICAgICBlcnIgPSBuZXcgRXJyb3IoJ1NpZ25hdHVyZSAiJyArIF9zaWduYXR1cmUgKyAnIiBpcyBkZWZpbmVkIHR3aWNlJyk7CiAgICAgICAgICBlcnIuZGF0YSA9IHtzaWduYXR1cmU6IF9zaWduYXR1cmV9OwogICAgICAgICAgdGhyb3cgZXJyOwogICAgICAgICAgLy8gZWxzZTogYm90aCBzaWduYXR1cmVzIHBvaW50IHRvIHRoZSBzYW1lIGZ1bmN0aW9uLCB0aGF0J3MgZmluZQogICAgICAgIH0KICAgICAgfQoKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgZm4gPSBmbnNbaV07CgogICAgICAgIC8vIHRlc3Qgd2hldGhlciB0aGlzIGlzIGEgdHlwZWQtZnVuY3Rpb24KICAgICAgICBpZiAodHlwZW9mIGZuLnNpZ25hdHVyZXMgPT09ICdvYmplY3QnKSB7CiAgICAgICAgICAvLyBtZXJnZSB0aGUgc2lnbmF0dXJlcwogICAgICAgICAgZm9yICh2YXIgc2lnbmF0dXJlIGluIGZuLnNpZ25hdHVyZXMpIHsKICAgICAgICAgICAgaWYgKGZuLnNpZ25hdHVyZXMuaGFzT3duUHJvcGVydHkoc2lnbmF0dXJlKSkgewogICAgICAgICAgICAgIHZhbGlkYXRlVW5pcXVlKHNpZ25hdHVyZSwgZm4uc2lnbmF0dXJlc1tzaWduYXR1cmVdKTsKICAgICAgICAgICAgICBzaWduYXR1cmVzTWFwW3NpZ25hdHVyZV0gPSBmbi5zaWduYXR1cmVzW3NpZ25hdHVyZV07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGZuLnNpZ25hdHVyZSA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgIHZhbGlkYXRlVW5pcXVlKGZuLnNpZ25hdHVyZSwgZm4pOwogICAgICAgICAgc2lnbmF0dXJlc01hcFtmbi5zaWduYXR1cmVdID0gZm47CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgZXJyID0gbmV3IFR5cGVFcnJvcignRnVuY3Rpb24gaXMgbm8gdHlwZWQtZnVuY3Rpb24gKGluZGV4OiAnICsgaSArICcpJyk7CiAgICAgICAgICBlcnIuZGF0YSA9IHtpbmRleDogaX07CiAgICAgICAgICB0aHJvdyBlcnI7CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gc2lnbmF0dXJlc01hcDsKICAgIH0KCiAgICB0eXBlZCA9IGNyZWF0ZVR5cGVkRnVuY3Rpb24oJ3R5cGVkJywgewogICAgICAnc3RyaW5nLCBPYmplY3QnOiBjcmVhdGVUeXBlZEZ1bmN0aW9uLAogICAgICAnT2JqZWN0JzogZnVuY3Rpb24gKHNpZ25hdHVyZXNNYXApIHsKICAgICAgICAvLyBmaW5kIGV4aXN0aW5nIG5hbWUKICAgICAgICB2YXIgZm5zID0gW107CiAgICAgICAgZm9yICh2YXIgc2lnbmF0dXJlIGluIHNpZ25hdHVyZXNNYXApIHsKICAgICAgICAgIGlmIChzaWduYXR1cmVzTWFwLmhhc093blByb3BlcnR5KHNpZ25hdHVyZSkpIHsKICAgICAgICAgICAgZm5zLnB1c2goc2lnbmF0dXJlc01hcFtzaWduYXR1cmVdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIG5hbWUgPSBnZXROYW1lKGZucyk7CiAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVkRnVuY3Rpb24obmFtZSwgc2lnbmF0dXJlc01hcCk7CiAgICAgIH0sCiAgICAgICcuLi5GdW5jdGlvbic6IGZ1bmN0aW9uIChmbnMpIHsKICAgICAgICByZXR1cm4gY3JlYXRlVHlwZWRGdW5jdGlvbihnZXROYW1lKGZucyksIGV4dHJhY3RTaWduYXR1cmVzKGZucykpOwogICAgICB9LAogICAgICAnc3RyaW5nLCAuLi5GdW5jdGlvbic6IGZ1bmN0aW9uIChuYW1lLCBmbnMpIHsKICAgICAgICByZXR1cm4gY3JlYXRlVHlwZWRGdW5jdGlvbihuYW1lLCBleHRyYWN0U2lnbmF0dXJlcyhmbnMpKTsKICAgICAgfQogICAgfSk7CgogICAgdHlwZWQuY3JlYXRlID0gY3JlYXRlOwogICAgdHlwZWQudHlwZXMgPSBfdHlwZXM7CiAgICB0eXBlZC5jb252ZXJzaW9ucyA9IF9jb252ZXJzaW9uczsKICAgIHR5cGVkLmlnbm9yZSA9IF9pZ25vcmU7CiAgICB0eXBlZC5jb252ZXJ0ID0gY29udmVydDsKICAgIHR5cGVkLmZpbmQgPSBmaW5kOwoKICAgIC8qKgogICAgICogYWRkIGEgdHlwZQogICAgICogQHBhcmFtIHt7bmFtZTogc3RyaW5nLCB0ZXN0OiBmdW5jdGlvbn19IHR5cGUKICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2JlZm9yZU9iamVjdFRlc3Q9dHJ1ZV0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0cnVlLCB0aGUgbmV3IHRlc3Qgd2lsbCBiZSBpbnNlcnRlZCBiZWZvcmUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdGVzdCB3aXRoIG5hbWUgJ09iamVjdCcgKGlmIGFueSksIHNpbmNlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMgZm9yIE9iamVjdCBtYXRjaCBBcnJheSBhbmQgY2xhc3NlcyB0b28uCiAgICAgKi8KICAgIHR5cGVkLmFkZFR5cGUgPSBmdW5jdGlvbiAodHlwZSwgYmVmb3JlT2JqZWN0VGVzdCkgewogICAgICBpZiAoIXR5cGUgfHwgdHlwZW9mIHR5cGUubmFtZSAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUudGVzdCAhPT0gJ2Z1bmN0aW9uJykgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCB3aXRoIHByb3BlcnRpZXMge25hbWU6IHN0cmluZywgdGVzdDogZnVuY3Rpb259IGV4cGVjdGVkJyk7CiAgICAgIH0KCiAgICAgIGlmIChiZWZvcmVPYmplY3RUZXN0ICE9PSBmYWxzZSkgewogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZWQudHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGlmICh0eXBlZC50eXBlc1tpXS5uYW1lID09PSAnT2JqZWN0JykgewogICAgICAgICAgICB0eXBlZC50eXBlcy5zcGxpY2UoaSwgMCwgdHlwZSk7CiAgICAgICAgICAgIHJldHVybgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgdHlwZWQudHlwZXMucHVzaCh0eXBlKTsKICAgIH07CgogICAgLy8gYWRkIGEgY29udmVyc2lvbgogICAgdHlwZWQuYWRkQ29udmVyc2lvbiA9IGZ1bmN0aW9uIChjb252ZXJzaW9uKSB7CiAgICAgIGlmICghY29udmVyc2lvbgogICAgICAgICAgfHwgdHlwZW9mIGNvbnZlcnNpb24uZnJvbSAhPT0gJ3N0cmluZycKICAgICAgICAgIHx8IHR5cGVvZiBjb252ZXJzaW9uLnRvICE9PSAnc3RyaW5nJwogICAgICAgICAgfHwgdHlwZW9mIGNvbnZlcnNpb24uY29udmVydCAhPT0gJ2Z1bmN0aW9uJykgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCB3aXRoIHByb3BlcnRpZXMge2Zyb206IHN0cmluZywgdG86IHN0cmluZywgY29udmVydDogZnVuY3Rpb259IGV4cGVjdGVkJyk7CiAgICAgIH0KCiAgICAgIHR5cGVkLmNvbnZlcnNpb25zLnB1c2goY29udmVyc2lvbik7CiAgICB9OwoKICAgIHJldHVybiB0eXBlZDsKICB9CgogIHJldHVybiBjcmVhdGUoKTsKfSkpOwoKLyoqKi8gfSksCi8qIDE1ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKGdsb2JhbCkgew0KDQp2YXIgd2lkdGggPSAyNTY7Ly8gZWFjaCBSQzQgb3V0cHV0IGlzIDAgPD0geCA8IDI1Ng0KdmFyIGNodW5rcyA9IDY7Ly8gYXQgbGVhc3Qgc2l4IFJDNCBvdXRwdXRzIGZvciBlYWNoIGRvdWJsZQ0KdmFyIGRpZ2l0cyA9IDUyOy8vIHRoZXJlIGFyZSA1MiBzaWduaWZpY2FudCBkaWdpdHMgaW4gYSBkb3VibGUNCnZhciBwb29sID0gW107Ly8gcG9vbDogZW50cm9weSBwb29sIHN0YXJ0cyBlbXB0eQ0KdmFyIEdMT0JBTCA9IHR5cGVvZiBnbG9iYWwgPT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsOw0KDQovLw0KLy8gVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlbGF0ZWQgdG8gSUVFRSA3NTQgbGltaXRzLg0KLy8NCnZhciBzdGFydGRlbm9tID0gTWF0aC5wb3cod2lkdGgsIGNodW5rcyksDQogICAgc2lnbmlmaWNhbmNlID0gTWF0aC5wb3coMiwgZGlnaXRzKSwNCiAgICBvdmVyZmxvdyA9IHNpZ25pZmljYW5jZSAqIDIsDQogICAgbWFzayA9IHdpZHRoIC0gMTsNCg0KDQp2YXIgb2xkUmFuZG9tID0gTWF0aC5yYW5kb207DQoNCi8vDQovLyBzZWVkcmFuZG9tKCkNCi8vIFRoaXMgaXMgdGhlIHNlZWRyYW5kb20gZnVuY3Rpb24gZGVzY3JpYmVkIGFib3ZlLg0KLy8NCm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oc2VlZCwgb3B0aW9ucykgew0KICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdsb2JhbCA9PT0gdHJ1ZSkgew0KICAgIG9wdGlvbnMuZ2xvYmFsID0gZmFsc2U7DQogICAgTWF0aC5yYW5kb20gPSBtb2R1bGUuZXhwb3J0cyhzZWVkLCBvcHRpb25zKTsNCiAgICBvcHRpb25zLmdsb2JhbCA9IHRydWU7DQogICAgcmV0dXJuIE1hdGgucmFuZG9tOw0KICB9DQogIHZhciB1c2VfZW50cm9weSA9IChvcHRpb25zICYmIG9wdGlvbnMuZW50cm9weSkgfHwgZmFsc2U7DQogIHZhciBrZXkgPSBbXTsNCg0KICAvLyBGbGF0dGVuIHRoZSBzZWVkIHN0cmluZyBvciBidWlsZCBvbmUgZnJvbSBsb2NhbCBlbnRyb3B5IGlmIG5lZWRlZC4NCiAgdmFyIHNob3J0c2VlZCA9IG1peGtleShmbGF0dGVuKA0KICAgIHVzZV9lbnRyb3B5ID8gW3NlZWQsIHRvc3RyaW5nKHBvb2wpXSA6DQogICAgMCBpbiBhcmd1bWVudHMgPyBzZWVkIDogYXV0b3NlZWQoKSwgMyksIGtleSk7DQoNCiAgLy8gVXNlIHRoZSBzZWVkIHRvIGluaXRpYWxpemUgYW4gQVJDNCBnZW5lcmF0b3IuDQogIHZhciBhcmM0ID0gbmV3IEFSQzQoa2V5KTsNCg0KICAvLyBNaXggdGhlIHJhbmRvbW5lc3MgaW50byBhY2N1bXVsYXRlZCBlbnRyb3B5Lg0KICBtaXhrZXkodG9zdHJpbmcoYXJjNC5TKSwgcG9vbCk7DQoNCiAgLy8gT3ZlcnJpZGUgTWF0aC5yYW5kb20NCg0KICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSByYW5kb20gZG91YmxlIGluIFswLCAxKSB0aGF0IGNvbnRhaW5zDQogIC8vIHJhbmRvbW5lc3MgaW4gZXZlcnkgYml0IG9mIHRoZSBtYW50aXNzYSBvZiB0aGUgSUVFRSA3NTQgdmFsdWUuDQoNCiAgcmV0dXJuIGZ1bmN0aW9uKCkgeyAgICAgICAgIC8vIENsb3N1cmUgdG8gcmV0dXJuIGEgcmFuZG9tIGRvdWJsZToNCiAgICB2YXIgbiA9IGFyYzQuZyhjaHVua3MpLCAgICAgICAgICAgICAvLyBTdGFydCB3aXRoIGEgbnVtZXJhdG9yIG4gPCAyIF4gNDgNCiAgICAgICAgZCA9IHN0YXJ0ZGVub20sICAgICAgICAgICAgICAgICAvLyAgIGFuZCBkZW5vbWluYXRvciBkID0gMiBeIDQ4Lg0KICAgICAgICB4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgYW5kIG5vICdleHRyYSBsYXN0IGJ5dGUnLg0KICAgIHdoaWxlIChuIDwgc2lnbmlmaWNhbmNlKSB7ICAgICAgICAgIC8vIEZpbGwgdXAgYWxsIHNpZ25pZmljYW50IGRpZ2l0cyBieQ0KICAgICAgbiA9IChuICsgeCkgKiB3aWR0aDsgICAgICAgICAgICAgIC8vICAgc2hpZnRpbmcgbnVtZXJhdG9yIGFuZA0KICAgICAgZCAqPSB3aWR0aDsgICAgICAgICAgICAgICAgICAgICAgIC8vICAgZGVub21pbmF0b3IgYW5kIGdlbmVyYXRpbmcgYQ0KICAgICAgeCA9IGFyYzQuZygxKTsgICAgICAgICAgICAgICAgICAgIC8vICAgbmV3IGxlYXN0LXNpZ25pZmljYW50LWJ5dGUuDQogICAgfQ0KICAgIHdoaWxlIChuID49IG92ZXJmbG93KSB7ICAgICAgICAgICAgIC8vIFRvIGF2b2lkIHJvdW5kaW5nIHVwLCBiZWZvcmUgYWRkaW5nDQogICAgICBuIC89IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBsYXN0IGJ5dGUsIHNoaWZ0IGV2ZXJ5dGhpbmcNCiAgICAgIGQgLz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIHJpZ2h0IHVzaW5nIGludGVnZXIgTWF0aCB1bnRpbA0KICAgICAgeCA+Pj49IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgd2UgaGF2ZSBleGFjdGx5IHRoZSBkZXNpcmVkIGJpdHMuDQogICAgfQ0KICAgIHJldHVybiAobiArIHgpIC8gZDsgICAgICAgICAgICAgICAgIC8vIEZvcm0gdGhlIG51bWJlciB3aXRoaW4gWzAsIDEpLg0KICB9Ow0KfTsNCg0KbW9kdWxlLmV4cG9ydHMucmVzZXRHbG9iYWwgPSBmdW5jdGlvbiAoKSB7DQogIE1hdGgucmFuZG9tID0gb2xkUmFuZG9tOw0KfTsNCg0KLy8NCi8vIEFSQzQNCi8vDQovLyBBbiBBUkM0IGltcGxlbWVudGF0aW9uLiAgVGhlIGNvbnN0cnVjdG9yIHRha2VzIGEga2V5IGluIHRoZSBmb3JtIG9mDQovLyBhbiBhcnJheSBvZiBhdCBtb3N0ICh3aWR0aCkgaW50ZWdlcnMgdGhhdCBzaG91bGQgYmUgMCA8PSB4IDwgKHdpZHRoKS4NCi8vDQovLyBUaGUgZyhjb3VudCkgbWV0aG9kIHJldHVybnMgYSBwc2V1ZG9yYW5kb20gaW50ZWdlciB0aGF0IGNvbmNhdGVuYXRlcw0KLy8gdGhlIG5leHQgKGNvdW50KSBvdXRwdXRzIGZyb20gQVJDNC4gIEl0cyByZXR1cm4gdmFsdWUgaXMgYSBudW1iZXIgeA0KLy8gdGhhdCBpcyBpbiB0aGUgcmFuZ2UgMCA8PSB4IDwgKHdpZHRoIF4gY291bnQpLg0KLy8NCi8qKiBAY29uc3RydWN0b3IgKi8NCmZ1bmN0aW9uIEFSQzQoa2V5KSB7DQogIHZhciB0LCBrZXlsZW4gPSBrZXkubGVuZ3RoLA0KICAgICAgbWUgPSB0aGlzLCBpID0gMCwgaiA9IG1lLmkgPSBtZS5qID0gMCwgcyA9IG1lLlMgPSBbXTsNCg0KICAvLyBUaGUgZW1wdHkga2V5IFtdIGlzIHRyZWF0ZWQgYXMgWzBdLg0KICBpZiAoIWtleWxlbikgeyBrZXkgPSBba2V5bGVuKytdOyB9DQoNCiAgLy8gU2V0IHVwIFMgdXNpbmcgdGhlIHN0YW5kYXJkIGtleSBzY2hlZHVsaW5nIGFsZ29yaXRobS4NCiAgd2hpbGUgKGkgPCB3aWR0aCkgew0KICAgIHNbaV0gPSBpKys7DQogIH0NCiAgZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpKyspIHsNCiAgICBzW2ldID0gc1tqID0gbWFzayAmIChqICsga2V5W2kgJSBrZXlsZW5dICsgKHQgPSBzW2ldKSldOw0KICAgIHNbal0gPSB0Ow0KICB9DQoNCiAgLy8gVGhlICJnIiBtZXRob2QgcmV0dXJucyB0aGUgbmV4dCAoY291bnQpIG91dHB1dHMgYXMgb25lIG51bWJlci4NCiAgKG1lLmcgPSBmdW5jdGlvbihjb3VudCkgew0KICAgIC8vIFVzaW5nIGluc3RhbmNlIG1lbWJlcnMgaW5zdGVhZCBvZiBjbG9zdXJlIHN0YXRlIG5lYXJseSBkb3VibGVzIHNwZWVkLg0KICAgIHZhciB0LCByID0gMCwNCiAgICAgICAgaSA9IG1lLmksIGogPSBtZS5qLCBzID0gbWUuUzsNCiAgICB3aGlsZSAoY291bnQtLSkgew0KICAgICAgdCA9IHNbaSA9IG1hc2sgJiAoaSArIDEpXTsNCiAgICAgIHIgPSByICogd2lkdGggKyBzW21hc2sgJiAoKHNbaV0gPSBzW2ogPSBtYXNrICYgKGogKyB0KV0pICsgKHNbal0gPSB0KSldOw0KICAgIH0NCiAgICBtZS5pID0gaTsgbWUuaiA9IGo7DQogICAgcmV0dXJuIHI7DQogICAgLy8gRm9yIHJvYnVzdCB1bnByZWRpY3RhYmlsaXR5IGRpc2NhcmQgYW4gaW5pdGlhbCBiYXRjaCBvZiB2YWx1ZXMuDQogICAgLy8gU2VlIGh0dHA6Ly93d3cucnNhLmNvbS9yc2FsYWJzL25vZGUuYXNwP2lkPTIwMDkNCiAgfSkod2lkdGgpOw0KfQ0KDQovLw0KLy8gZmxhdHRlbigpDQovLyBDb252ZXJ0cyBhbiBvYmplY3QgdHJlZSB0byBuZXN0ZWQgYXJyYXlzIG9mIHN0cmluZ3MuDQovLw0KZnVuY3Rpb24gZmxhdHRlbihvYmosIGRlcHRoKSB7DQogIHZhciByZXN1bHQgPSBbXSwgdHlwID0gKHR5cGVvZiBvYmopWzBdLCBwcm9wOw0KICBpZiAoZGVwdGggJiYgdHlwID09ICdvJykgew0KICAgIGZvciAocHJvcCBpbiBvYmopIHsNCiAgICAgIHRyeSB7IHJlc3VsdC5wdXNoKGZsYXR0ZW4ob2JqW3Byb3BdLCBkZXB0aCAtIDEpKTsgfSBjYXRjaCAoZSkge30NCiAgICB9DQogIH0NCiAgcmV0dXJuIChyZXN1bHQubGVuZ3RoID8gcmVzdWx0IDogdHlwID09ICdzJyA/IG9iaiA6IG9iaiArICdcMCcpOw0KfQ0KDQovLw0KLy8gbWl4a2V5KCkNCi8vIE1peGVzIGEgc3RyaW5nIHNlZWQgaW50byBhIGtleSB0aGF0IGlzIGFuIGFycmF5IG9mIGludGVnZXJzLCBhbmQNCi8vIHJldHVybnMgYSBzaG9ydGVuZWQgc3RyaW5nIHNlZWQgdGhhdCBpcyBlcXVpdmFsZW50IHRvIHRoZSByZXN1bHQga2V5Lg0KLy8NCmZ1bmN0aW9uIG1peGtleShzZWVkLCBrZXkpIHsNCiAgdmFyIHN0cmluZ3NlZWQgPSBzZWVkICsgJycsIHNtZWFyLCBqID0gMDsNCiAgd2hpbGUgKGogPCBzdHJpbmdzZWVkLmxlbmd0aCkgew0KICAgIGtleVttYXNrICYgal0gPQ0KICAgICAgbWFzayAmICgoc21lYXIgXj0ga2V5W21hc2sgJiBqXSAqIDE5KSArIHN0cmluZ3NlZWQuY2hhckNvZGVBdChqKyspKTsNCiAgfQ0KICByZXR1cm4gdG9zdHJpbmcoa2V5KTsNCn0NCg0KLy8NCi8vIGF1dG9zZWVkKCkNCi8vIFJldHVybnMgYW4gb2JqZWN0IGZvciBhdXRvc2VlZGluZywgdXNpbmcgd2luZG93LmNyeXB0byBpZiBhdmFpbGFibGUuDQovLw0KLyoqIEBwYXJhbSB7VWludDhBcnJheT19IHNlZWQgKi8NCmZ1bmN0aW9uIGF1dG9zZWVkKHNlZWQpIHsNCiAgdHJ5IHsNCiAgICBHTE9CQUwuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhzZWVkID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgpKTsNCiAgICByZXR1cm4gdG9zdHJpbmcoc2VlZCk7DQogIH0gY2F0Y2ggKGUpIHsNCiAgICByZXR1cm4gWytuZXcgRGF0ZSwgR0xPQkFMLCBHTE9CQUwubmF2aWdhdG9yICYmIEdMT0JBTC5uYXZpZ2F0b3IucGx1Z2lucywNCiAgICAgICAgICAgIEdMT0JBTC5zY3JlZW4sIHRvc3RyaW5nKHBvb2wpXTsNCiAgfQ0KfQ0KDQovLw0KLy8gdG9zdHJpbmcoKQ0KLy8gQ29udmVydHMgYW4gYXJyYXkgb2YgY2hhcmNvZGVzIHRvIGEgc3RyaW5nDQovLw0KZnVuY3Rpb24gdG9zdHJpbmcoYSkgew0KICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseSgwLCBhKTsNCn0NCg0KLy8NCi8vIFdoZW4gc2VlZHJhbmRvbS5qcyBpcyBsb2FkZWQsIHdlIGltbWVkaWF0ZWx5IG1peCBhIGZldyBiaXRzDQovLyBmcm9tIHRoZSBidWlsdC1pbiBSTkcgaW50byB0aGUgZW50cm9weSBwb29sLiAgQmVjYXVzZSB3ZSBkbw0KLy8gbm90IHdhbnQgdG8gaW50ZWZlcmUgd2l0aCBkZXRlcm1pbnN0aWMgUFJORyBzdGF0ZSBsYXRlciwNCi8vIHNlZWRyYW5kb20gd2lsbCBub3QgY2FsbCBNYXRoLnJhbmRvbSBvbiBpdHMgb3duIGFnYWluIGFmdGVyDQovLyBpbml0aWFsaXphdGlvbi4NCi8vDQptaXhrZXkoTWF0aC5yYW5kb20oKSwgcG9vbCk7DQoKLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKHRoaXMsIF9fd2VicGFja19yZXF1aXJlX18oMjApKSkKCi8qKiovIH0pLAovKiAxNiAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7Cgp2YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187OyhmdW5jdGlvbiAoZ2xvYmFsU2NvcGUpIHsNCiAgJ3VzZSBzdHJpY3QnOw0KDQoNCiAgLyoNCiAgICogIGRlY2ltYWwuanMgdjEwLjIuMA0KICAgKiAgQW4gYXJiaXRyYXJ5LXByZWNpc2lvbiBEZWNpbWFsIHR5cGUgZm9yIEphdmFTY3JpcHQuDQogICAqICBodHRwczovL2dpdGh1Yi5jb20vTWlrZU1jbC9kZWNpbWFsLmpzDQogICAqICBDb3B5cmlnaHQgKGMpIDIwMTkgTWljaGFlbCBNY2xhdWdobGluIDxNOGNoODhsQGdtYWlsLmNvbT4NCiAgICogIE1JVCBMaWNlbmNlDQogICAqLw0KDQoNCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEVESVRBQkxFIERFRkFVTFRTICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy8NCg0KDQogICAgLy8gVGhlIG1heGltdW0gZXhwb25lbnQgbWFnbml0dWRlLg0KICAgIC8vIFRoZSBsaW1pdCBvbiB0aGUgdmFsdWUgb2YgYHRvRXhwTmVnYCwgYHRvRXhwUG9zYCwgYG1pbkVgIGFuZCBgbWF4RWAuDQogIHZhciBFWFBfTElNSVQgPSA5ZTE1LCAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDllMTUNCg0KICAgIC8vIFRoZSBsaW1pdCBvbiB0aGUgdmFsdWUgb2YgYHByZWNpc2lvbmAsIGFuZCBvbiB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGFyZ3VtZW50IHRvDQogICAgLy8gYHRvRGVjaW1hbFBsYWNlc2AsIGB0b0V4cG9uZW50aWFsYCwgYHRvRml4ZWRgLCBgdG9QcmVjaXNpb25gIGFuZCBgdG9TaWduaWZpY2FudERpZ2l0c2AuDQogICAgTUFYX0RJR0lUUyA9IDFlOSwgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDFlOQ0KDQogICAgLy8gQmFzZSBjb252ZXJzaW9uIGFscGhhYmV0Lg0KICAgIE5VTUVSQUxTID0gJzAxMjM0NTY3ODlhYmNkZWYnLA0KDQogICAgLy8gVGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIDEwICgxMDI1IGRpZ2l0cykuDQogICAgTE4xMCA9ICcyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwMTEwMTQ4ODYyODc3Mjk3NjAzMzMyNzkwMDk2NzU3MjYwOTY3NzM1MjQ4MDIzNTk5NzIwNTA4OTU5ODI5ODM0MTk2Nzc4NDA0MjI4NjI0ODYzMzQwOTUyNTQ2NTA4MjgwNjc1NjY2NjI4NzM2OTA5ODc4MTY4OTQ4MjkwNzIwODMyNTU1NDY4MDg0Mzc5OTg5NDgyNjIzMzE5ODUyODM5MzUwNTMwODk2NTM3NzczMjYyODg0NjE2MzM2NjIyMjI4NzY5ODIxOTg4Njc0NjU0MzY2NzQ3NDQwNDI0MzI3NDM2NTE1NTA0ODkzNDMxNDkzOTM5MTQ3OTYxOTQwNDQwMDIyMjEwNTEwMTcxNDE3NDgwMDM2ODgwODQwMTI2NDcwODA2ODU1Njc3NDMyMTYyMjgzNTUyMjAxMTQ4MDQ2NjM3MTU2NTkxMjEzNzM0NTA3NDc4NTY5NDc2ODM0NjM2MTY3OTIxMDE4MDY0NDUwNzA2NDgwMDAyNzc1MDI2ODQ5MTY3NDY1NTA1ODY4NTY5MzU2NzM0MjA2NzA1ODExMzY0MjkyMjQ1NTQ0MDU3NTg5MjU3MjQyMDgyNDEzMTQ2OTU2ODkwMTY3NTg5NDAyNTY3NzYzMTEzNTY5MTkyOTIwMzMzNzY1ODcxNDE2NjAyMzAxMDU3MDMwODk2MzQ1NzIwNzU0NDAzNzA4NDc0Njk5NDAxNjgyNjkyODI4MDg0ODExODQyODkzMTQ4NDg1MjQ5NDg2NDQ4NzE5Mjc4MDk2NzYyNzEyNzU3NzUzOTcwMjc2Njg2MDU5NTI0OTY3MTY2NzQxODM0ODU3MDQ0MjI1MDcxOTc5NjUwMDQ3MTQ5NTEwNTA0OTIyMTQ3NzY1Njc2MzY5Mzg2NjI5NzY5Nzk1MjIxMTA3MTgyNjQ1NDk3MzQ3NzI2NjI0MjU3MDk0MjkzMjI1ODI3OTg1MDI1ODU1MDk3ODUyNjUzODMyMDc2MDY3MjYzMTcxNjQzMDk1MDU5OTUwODc4MDc1MjM3MTAzMzMxMDExOTc4NTc1NDczMzE1NDE0MjE4MDg0Mjc1NDM4NjM1OTE3NzgxMTcwNTQzMDk4Mjc0ODIzODUwNDU2NDgwMTkwOTU2MTAyOTkyOTE4MjQzMTgyMzc1MjUzNTc3MDk3NTA1Mzk1NjUxODc2OTc1MTAzNzQ5NzA4ODg2OTIxODAyMDUxODkzMzk1MDcyMzg1MzkyMDUxNDQ2MzQxOTcyNjUyODcyODY5NjUxMTA4NjI1NzE0OTIxOTg4NDk5Nzg3NDg4NzM3NzEzNDU2ODYyMDkxNjcwNTgnLA0KDQogICAgLy8gUGkgKDEwMjUgZGlnaXRzKS4NCiAgICBQSSA9ICczLjE0MTU5MjY1MzU4OTc5MzIzODQ2MjY0MzM4MzI3OTUwMjg4NDE5NzE2OTM5OTM3NTEwNTgyMDk3NDk0NDU5MjMwNzgxNjQwNjI4NjIwODk5ODYyODAzNDgyNTM0MjExNzA2Nzk4MjE0ODA4NjUxMzI4MjMwNjY0NzA5Mzg0NDYwOTU1MDU4MjIzMTcyNTM1OTQwODEyODQ4MTExNzQ1MDI4NDEwMjcwMTkzODUyMTEwNTU1OTY0NDYyMjk0ODk1NDkzMDM4MTk2NDQyODgxMDk3NTY2NTkzMzQ0NjEyODQ3NTY0ODIzMzc4Njc4MzE2NTI3MTIwMTkwOTE0NTY0ODU2NjkyMzQ2MDM0ODYxMDQ1NDMyNjY0ODIxMzM5MzYwNzI2MDI0OTE0MTI3MzcyNDU4NzAwNjYwNjMxNTU4ODE3NDg4MTUyMDkyMDk2MjgyOTI1NDA5MTcxNTM2NDM2Nzg5MjU5MDM2MDAxMTMzMDUzMDU0ODgyMDQ2NjUyMTM4NDE0Njk1MTk0MTUxMTYwOTQzMzA1NzI3MDM2NTc1OTU5MTk1MzA5MjE4NjExNzM4MTkzMjYxMTc5MzEwNTExODU0ODA3NDQ2MjM3OTk2Mjc0OTU2NzM1MTg4NTc1MjcyNDg5MTIyNzkzODE4MzAxMTk0OTEyOTgzMzY3MzM2MjQ0MDY1NjY0MzA4NjAyMTM5NDk0NjM5NTIyNDczNzE5MDcwMjE3OTg2MDk0MzcwMjc3MDUzOTIxNzE3NjI5MzE3Njc1MjM4NDY3NDgxODQ2NzY2OTQwNTEzMjAwMDU2ODEyNzE0NTI2MzU2MDgyNzc4NTc3MTM0Mjc1Nzc4OTYwOTE3MzYzNzE3ODcyMTQ2ODQ0MDkwMTIyNDk1MzQzMDE0NjU0OTU4NTM3MTA1MDc5MjI3OTY4OTI1ODkyMzU0MjAxOTk1NjExMjEyOTAyMTk2MDg2NDAzNDQxODE1OTgxMzYyOTc3NDc3MTMwOTk2MDUxODcwNzIxMTM0OTk5OTk5ODM3Mjk3ODA0OTk1MTA1OTczMTczMjgxNjA5NjMxODU5NTAyNDQ1OTQ1NTM0NjkwODMwMjY0MjUyMjMwODI1MzM0NDY4NTAzNTI2MTkzMTE4ODE3MTAxMDAwMzEzNzgzODc1Mjg4NjU4NzUzMzIwODM4MTQyMDYxNzE3NzY2OTE0NzMwMzU5ODI1MzQ5MDQyODc1NTQ2ODczMTE1OTU2Mjg2Mzg4MjM1Mzc4NzU5Mzc1MTk1Nzc4MTg1Nzc4MDUzMjE3MTIyNjgwNjYxMzAwMTkyNzg3NjYxMTE5NTkwOTIxNjQyMDE5ODkzODA5NTI1NzIwMTA2NTQ4NTg2MzI3ODknLA0KDQoNCiAgICAvLyBUaGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgb2YgdGhlIERlY2ltYWwgY29uc3RydWN0b3IuDQogICAgREVGQVVMVFMgPSB7DQoNCiAgICAgIC8vIFRoZXNlIHZhbHVlcyBtdXN0IGJlIGludGVnZXJzIHdpdGhpbiB0aGUgc3RhdGVkIHJhbmdlcyAoaW5jbHVzaXZlKS4NCiAgICAgIC8vIE1vc3Qgb2YgdGhlc2UgdmFsdWVzIGNhbiBiZSBjaGFuZ2VkIGF0IHJ1bi10aW1lIHVzaW5nIHRoZSBgRGVjaW1hbC5jb25maWdgIG1ldGhvZC4NCg0KICAgICAgLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBvZiB0aGUgcmVzdWx0IG9mIGEgY2FsY3VsYXRpb24gb3IgYmFzZSBjb252ZXJzaW9uLg0KICAgICAgLy8gRS5nLiBgRGVjaW1hbC5jb25maWcoeyBwcmVjaXNpb246IDIwIH0pO2ANCiAgICAgIHByZWNpc2lvbjogMjAsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEgdG8gTUFYX0RJR0lUUw0KDQogICAgICAvLyBUaGUgcm91bmRpbmcgbW9kZSB1c2VkIHdoZW4gcm91bmRpbmcgdG8gYHByZWNpc2lvbmAuDQogICAgICAvLw0KICAgICAgLy8gUk9VTkRfVVAgICAgICAgICAwIEF3YXkgZnJvbSB6ZXJvLg0KICAgICAgLy8gUk9VTkRfRE9XTiAgICAgICAxIFRvd2FyZHMgemVyby4NCiAgICAgIC8vIFJPVU5EX0NFSUwgICAgICAgMiBUb3dhcmRzICtJbmZpbml0eS4NCiAgICAgIC8vIFJPVU5EX0ZMT09SICAgICAgMyBUb3dhcmRzIC1JbmZpbml0eS4NCiAgICAgIC8vIFJPVU5EX0hBTEZfVVAgICAgNCBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdXAuDQogICAgICAvLyBST1VORF9IQUxGX0RPV04gIDUgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIGRvd24uDQogICAgICAvLyBST1VORF9IQUxGX0VWRU4gIDYgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHRvd2FyZHMgZXZlbiBuZWlnaGJvdXIuDQogICAgICAvLyBST1VORF9IQUxGX0NFSUwgIDcgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHRvd2FyZHMgK0luZmluaXR5Lg0KICAgICAgLy8gUk9VTkRfSEFMRl9GTE9PUiA4IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzIC1JbmZpbml0eS4NCiAgICAgIC8vDQogICAgICAvLyBFLmcuDQogICAgICAvLyBgRGVjaW1hbC5yb3VuZGluZyA9IDQ7YA0KICAgICAgLy8gYERlY2ltYWwucm91bmRpbmcgPSBEZWNpbWFsLlJPVU5EX0hBTEZfVVA7YA0KICAgICAgcm91bmRpbmc6IDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byA4DQoNCiAgICAgIC8vIFRoZSBtb2R1bG8gbW9kZSB1c2VkIHdoZW4gY2FsY3VsYXRpbmcgdGhlIG1vZHVsdXM6IGEgbW9kIG4uDQogICAgICAvLyBUaGUgcXVvdGllbnQgKHEgPSBhIC8gbikgaXMgY2FsY3VsYXRlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcm91bmRpbmcgbW9kZS4NCiAgICAgIC8vIFRoZSByZW1haW5kZXIgKHIpIGlzIGNhbGN1bGF0ZWQgYXM6IHIgPSBhIC0gbiAqIHEuDQogICAgICAvLw0KICAgICAgLy8gVVAgICAgICAgICAwIFRoZSByZW1haW5kZXIgaXMgcG9zaXRpdmUgaWYgdGhlIGRpdmlkZW5kIGlzIG5lZ2F0aXZlLCBlbHNlIGlzIG5lZ2F0aXZlLg0KICAgICAgLy8gRE9XTiAgICAgICAxIFRoZSByZW1haW5kZXIgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlkZW5kIChKYXZhU2NyaXB0ICUpLg0KICAgICAgLy8gRkxPT1IgICAgICAzIFRoZSByZW1haW5kZXIgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlzb3IgKFB5dGhvbiAlKS4NCiAgICAgIC8vIEhBTEZfRVZFTiAgNiBUaGUgSUVFRSA3NTQgcmVtYWluZGVyIGZ1bmN0aW9uLg0KICAgICAgLy8gRVVDTElEICAgICA5IEV1Y2xpZGlhbiBkaXZpc2lvbi4gcSA9IHNpZ24obikgKiBmbG9vcihhIC8gYWJzKG4pKS4gQWx3YXlzIHBvc2l0aXZlLg0KICAgICAgLy8NCiAgICAgIC8vIFRydW5jYXRlZCBkaXZpc2lvbiAoMSksIGZsb29yZWQgZGl2aXNpb24gKDMpLCB0aGUgSUVFRSA3NTQgcmVtYWluZGVyICg2KSwgYW5kIEV1Y2xpZGlhbg0KICAgICAgLy8gZGl2aXNpb24gKDkpIGFyZSBjb21tb25seSB1c2VkIGZvciB0aGUgbW9kdWx1cyBvcGVyYXRpb24uIFRoZSBvdGhlciByb3VuZGluZyBtb2RlcyBjYW4gYWxzbw0KICAgICAgLy8gYmUgdXNlZCwgYnV0IHRoZXkgbWF5IG5vdCBnaXZlIHVzZWZ1bCByZXN1bHRzLg0KICAgICAgbW9kdWxvOiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byA5DQoNCiAgICAgIC8vIFRoZSBleHBvbmVudCB2YWx1ZSBhdCBhbmQgYmVuZWF0aCB3aGljaCBgdG9TdHJpbmdgIHJldHVybnMgZXhwb25lbnRpYWwgbm90YXRpb24uDQogICAgICAvLyBKYXZhU2NyaXB0IG51bWJlcnM6IC03DQogICAgICB0b0V4cE5lZzogLTcsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIC1FWFBfTElNSVQNCg0KICAgICAgLy8gVGhlIGV4cG9uZW50IHZhbHVlIGF0IGFuZCBhYm92ZSB3aGljaCBgdG9TdHJpbmdgIHJldHVybnMgZXhwb25lbnRpYWwgbm90YXRpb24uDQogICAgICAvLyBKYXZhU2NyaXB0IG51bWJlcnM6IDIxDQogICAgICB0b0V4cFBvczogIDIxLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIEVYUF9MSU1JVA0KDQogICAgICAvLyBUaGUgbWluaW11bSBleHBvbmVudCB2YWx1ZSwgYmVuZWF0aCB3aGljaCB1bmRlcmZsb3cgdG8gemVybyBvY2N1cnMuDQogICAgICAvLyBKYXZhU2NyaXB0IG51bWJlcnM6IC0zMjQgICg1ZS0zMjQpDQogICAgICBtaW5FOiAtRVhQX0xJTUlULCAgICAgICAgICAgICAgICAgICAgICAvLyAtMSB0byAtRVhQX0xJTUlUDQoNCiAgICAgIC8vIFRoZSBtYXhpbXVtIGV4cG9uZW50IHZhbHVlLCBhYm92ZSB3aGljaCBvdmVyZmxvdyB0byBJbmZpbml0eSBvY2N1cnMuDQogICAgICAvLyBKYXZhU2NyaXB0IG51bWJlcnM6IDMwOCAgKDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4KQ0KICAgICAgbWF4RTogRVhQX0xJTUlULCAgICAgICAgICAgICAgICAgICAgICAgLy8gMSB0byBFWFBfTElNSVQNCg0KICAgICAgLy8gV2hldGhlciB0byB1c2UgY3J5cHRvZ3JhcGhpY2FsbHktc2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiwgaWYgYXZhaWxhYmxlLg0KICAgICAgY3J5cHRvOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ1ZS9mYWxzZQ0KICAgIH0sDQoNCg0KICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQgT0YgRURJVEFCTEUgREVGQVVMVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvLw0KDQoNCiAgICBEZWNpbWFsLCBpbmV4YWN0LCBub0NvbmZsaWN0LCBxdWFkcmFudCwNCiAgICBleHRlcm5hbCA9IHRydWUsDQoNCiAgICBkZWNpbWFsRXJyb3IgPSAnW0RlY2ltYWxFcnJvcl0gJywNCiAgICBpbnZhbGlkQXJndW1lbnQgPSBkZWNpbWFsRXJyb3IgKyAnSW52YWxpZCBhcmd1bWVudDogJywNCiAgICBwcmVjaXNpb25MaW1pdEV4Y2VlZGVkID0gZGVjaW1hbEVycm9yICsgJ1ByZWNpc2lvbiBsaW1pdCBleGNlZWRlZCcsDQogICAgY3J5cHRvVW5hdmFpbGFibGUgPSBkZWNpbWFsRXJyb3IgKyAnY3J5cHRvIHVuYXZhaWxhYmxlJywNCg0KICAgIG1hdGhmbG9vciA9IE1hdGguZmxvb3IsDQogICAgbWF0aHBvdyA9IE1hdGgucG93LA0KDQogICAgaXNCaW5hcnkgPSAvXjBiKFswMV0rKFwuWzAxXSopP3xcLlswMV0rKShwWystXT9cZCspPyQvaSwNCiAgICBpc0hleCA9IC9eMHgoWzAtOWEtZl0rKFwuWzAtOWEtZl0qKT98XC5bMC05YS1mXSspKHBbKy1dP1xkKyk/JC9pLA0KICAgIGlzT2N0YWwgPSAvXjBvKFswLTddKyhcLlswLTddKik/fFwuWzAtN10rKShwWystXT9cZCspPyQvaSwNCiAgICBpc0RlY2ltYWwgPSAvXihcZCsoXC5cZCopP3xcLlxkKykoZVsrLV0/XGQrKT8kL2ksDQoNCiAgICBCQVNFID0gMWU3LA0KICAgIExPR19CQVNFID0gNywNCiAgICBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MSwNCg0KICAgIExOMTBfUFJFQ0lTSU9OID0gTE4xMC5sZW5ndGggLSAxLA0KICAgIFBJX1BSRUNJU0lPTiA9IFBJLmxlbmd0aCAtIDEsDQoNCiAgICAvLyBEZWNpbWFsLnByb3RvdHlwZSBvYmplY3QNCiAgICBQID0geyBuYW1lOiAnW29iamVjdCBEZWNpbWFsXScgfTsNCg0KDQogIC8vIERlY2ltYWwgcHJvdG90eXBlIG1ldGhvZHMNCg0KDQogIC8qDQogICAqICBhYnNvbHV0ZVZhbHVlICAgICAgICAgICAgIGFicw0KICAgKiAgY2VpbA0KICAgKiAgY29tcGFyZWRUbyAgICAgICAgICAgICAgICBjbXANCiAgICogIGNvc2luZSAgICAgICAgICAgICAgICAgICAgY29zDQogICAqICBjdWJlUm9vdCAgICAgICAgICAgICAgICAgIGNicnQNCiAgICogIGRlY2ltYWxQbGFjZXMgICAgICAgICAgICAgZHANCiAgICogIGRpdmlkZWRCeSAgICAgICAgICAgICAgICAgZGl2DQogICAqICBkaXZpZGVkVG9JbnRlZ2VyQnkgICAgICAgIGRpdlRvSW50DQogICAqICBlcXVhbHMgICAgICAgICAgICAgICAgICAgIGVxDQogICAqICBmbG9vcg0KICAgKiAgZ3JlYXRlclRoYW4gICAgICAgICAgICAgICBndA0KICAgKiAgZ3JlYXRlclRoYW5PckVxdWFsVG8gICAgICBndGUNCiAgICogIGh5cGVyYm9saWNDb3NpbmUgICAgICAgICAgY29zaA0KICAgKiAgaHlwZXJib2xpY1NpbmUgICAgICAgICAgICBzaW5oDQogICAqICBoeXBlcmJvbGljVGFuZ2VudCAgICAgICAgIHRhbmgNCiAgICogIGludmVyc2VDb3NpbmUgICAgICAgICAgICAgYWNvcw0KICAgKiAgaW52ZXJzZUh5cGVyYm9saWNDb3NpbmUgICBhY29zaA0KICAgKiAgaW52ZXJzZUh5cGVyYm9saWNTaW5lICAgICBhc2luaA0KICAgKiAgaW52ZXJzZUh5cGVyYm9saWNUYW5nZW50ICBhdGFuaA0KICAgKiAgaW52ZXJzZVNpbmUgICAgICAgICAgICAgICBhc2luDQogICAqICBpbnZlcnNlVGFuZ2VudCAgICAgICAgICAgIGF0YW4NCiAgICogIGlzRmluaXRlDQogICAqICBpc0ludGVnZXIgICAgICAgICAgICAgICAgIGlzSW50DQogICAqICBpc05hTg0KICAgKiAgaXNOZWdhdGl2ZSAgICAgICAgICAgICAgICBpc05lZw0KICAgKiAgaXNQb3NpdGl2ZSAgICAgICAgICAgICAgICBpc1Bvcw0KICAgKiAgaXNaZXJvDQogICAqICBsZXNzVGhhbiAgICAgICAgICAgICAgICAgIGx0DQogICAqICBsZXNzVGhhbk9yRXF1YWxUbyAgICAgICAgIGx0ZQ0KICAgKiAgbG9nYXJpdGhtICAgICAgICAgICAgICAgICBsb2cNCiAgICogIFttYXhpbXVtXSAgICAgICAgICAgICAgICAgW21heF0NCiAgICogIFttaW5pbXVtXSAgICAgICAgICAgICAgICAgW21pbl0NCiAgICogIG1pbnVzICAgICAgICAgICAgICAgICAgICAgc3ViDQogICAqICBtb2R1bG8gICAgICAgICAgICAgICAgICAgIG1vZA0KICAgKiAgbmF0dXJhbEV4cG9uZW50aWFsICAgICAgICBleHANCiAgICogIG5hdHVyYWxMb2dhcml0aG0gICAgICAgICAgbG4NCiAgICogIG5lZ2F0ZWQgICAgICAgICAgICAgICAgICAgbmVnDQogICAqICBwbHVzICAgICAgICAgICAgICAgICAgICAgIGFkZA0KICAgKiAgcHJlY2lzaW9uICAgICAgICAgICAgICAgICBzZA0KICAgKiAgcm91bmQNCiAgICogIHNpbmUgICAgICAgICAgICAgICAgICAgICAgc2luDQogICAqICBzcXVhcmVSb290ICAgICAgICAgICAgICAgIHNxcnQNCiAgICogIHRhbmdlbnQgICAgICAgICAgICAgICAgICAgdGFuDQogICAqICB0aW1lcyAgICAgICAgICAgICAgICAgICAgIG11bA0KICAgKiAgdG9CaW5hcnkNCiAgICogIHRvRGVjaW1hbFBsYWNlcyAgICAgICAgICAgdG9EUA0KICAgKiAgdG9FeHBvbmVudGlhbA0KICAgKiAgdG9GaXhlZA0KICAgKiAgdG9GcmFjdGlvbg0KICAgKiAgdG9IZXhhZGVjaW1hbCAgICAgICAgICAgICB0b0hleA0KICAgKiAgdG9OZWFyZXN0DQogICAqICB0b051bWJlcg0KICAgKiAgdG9PY3RhbA0KICAgKiAgdG9Qb3dlciAgICAgICAgICAgICAgICAgICBwb3cNCiAgICogIHRvUHJlY2lzaW9uDQogICAqICB0b1NpZ25pZmljYW50RGlnaXRzICAgICAgIHRvU0QNCiAgICogIHRvU3RyaW5nDQogICAqICB0cnVuY2F0ZWQgICAgICAgICAgICAgICAgIHRydW5jDQogICAqICB2YWx1ZU9mICAgICAgICAgICAgICAgICAgIHRvSlNPTg0KICAgKi8NCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuDQogICAqDQogICAqLw0KICBQLmFic29sdXRlVmFsdWUgPSBQLmFicyA9IGZ1bmN0aW9uICgpIHsNCiAgICB2YXIgeCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpOw0KICAgIGlmICh4LnMgPCAwKSB4LnMgPSAxOw0KICAgIHJldHVybiBmaW5hbGlzZSh4KTsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcm91bmRlZCB0byBhIHdob2xlIG51bWJlciBpbiB0aGUNCiAgICogZGlyZWN0aW9uIG9mIHBvc2l0aXZlIEluZmluaXR5Lg0KICAgKg0KICAgKi8NCiAgUC5jZWlsID0gZnVuY3Rpb24gKCkgew0KICAgIHJldHVybiBmaW5hbGlzZShuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKSwgdGhpcy5lICsgMSwgMik7DQogIH07DQoNCg0KICAvKg0KICAgKiBSZXR1cm4NCiAgICogICAxICAgIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBvZiBgeWAsDQogICAqICAtMSAgICBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGxlc3MgdGhhbiB0aGUgdmFsdWUgb2YgYHlgLA0KICAgKiAgIDAgICAgaWYgdGhleSBoYXZlIHRoZSBzYW1lIHZhbHVlLA0KICAgKiAgIE5hTiAgaWYgdGhlIHZhbHVlIG9mIGVpdGhlciBEZWNpbWFsIGlzIE5hTi4NCiAgICoNCiAgICovDQogIFAuY29tcGFyZWRUbyA9IFAuY21wID0gZnVuY3Rpb24gKHkpIHsNCiAgICB2YXIgaSwgaiwgeGRMLCB5ZEwsDQogICAgICB4ID0gdGhpcywNCiAgICAgIHhkID0geC5kLA0KICAgICAgeWQgPSAoeSA9IG5ldyB4LmNvbnN0cnVjdG9yKHkpKS5kLA0KICAgICAgeHMgPSB4LnMsDQogICAgICB5cyA9IHkuczsNCg0KICAgIC8vIEVpdGhlciBOYU4gb3IgwrFJbmZpbml0eT8NCiAgICBpZiAoIXhkIHx8ICF5ZCkgew0KICAgICAgcmV0dXJuICF4cyB8fCAheXMgPyBOYU4gOiB4cyAhPT0geXMgPyB4cyA6IHhkID09PSB5ZCA/IDAgOiAheGQgXiB4cyA8IDAgPyAxIDogLTE7DQogICAgfQ0KDQogICAgLy8gRWl0aGVyIHplcm8/DQogICAgaWYgKCF4ZFswXSB8fCAheWRbMF0pIHJldHVybiB4ZFswXSA/IHhzIDogeWRbMF0gPyAteXMgOiAwOw0KDQogICAgLy8gU2lnbnMgZGlmZmVyPw0KICAgIGlmICh4cyAhPT0geXMpIHJldHVybiB4czsNCg0KICAgIC8vIENvbXBhcmUgZXhwb25lbnRzLg0KICAgIGlmICh4LmUgIT09IHkuZSkgcmV0dXJuIHguZSA+IHkuZSBeIHhzIDwgMCA/IDEgOiAtMTsNCg0KICAgIHhkTCA9IHhkLmxlbmd0aDsNCiAgICB5ZEwgPSB5ZC5sZW5ndGg7DQoNCiAgICAvLyBDb21wYXJlIGRpZ2l0IGJ5IGRpZ2l0Lg0KICAgIGZvciAoaSA9IDAsIGogPSB4ZEwgPCB5ZEwgPyB4ZEwgOiB5ZEw7IGkgPCBqOyArK2kpIHsNCiAgICAgIGlmICh4ZFtpXSAhPT0geWRbaV0pIHJldHVybiB4ZFtpXSA+IHlkW2ldIF4geHMgPCAwID8gMSA6IC0xOw0KICAgIH0NCg0KICAgIC8vIENvbXBhcmUgbGVuZ3Rocy4NCiAgICByZXR1cm4geGRMID09PSB5ZEwgPyAwIDogeGRMID4geWRMIF4geHMgPCAwID8gMSA6IC0xOw0KICB9Ow0KDQoNCiAgLyoNCiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGNvc2luZSBvZiB0aGUgdmFsdWUgaW4gcmFkaWFucyBvZiB0aGlzIERlY2ltYWwuDQogICAqDQogICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldDQogICAqIFJhbmdlOiBbLTEsIDFdDQogICAqDQogICAqIGNvcygwKSAgICAgICAgID0gMQ0KICAgKiBjb3MoLTApICAgICAgICA9IDENCiAgICogY29zKEluZmluaXR5KSAgPSBOYU4NCiAgICogY29zKC1JbmZpbml0eSkgPSBOYU4NCiAgICogY29zKE5hTikgICAgICAgPSBOYU4NCiAgICoNCiAgICovDQogIFAuY29zaW5lID0gUC5jb3MgPSBmdW5jdGlvbiAoKSB7DQogICAgdmFyIHByLCBybSwNCiAgICAgIHggPSB0aGlzLA0KICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7DQoNCiAgICBpZiAoIXguZCkgcmV0dXJuIG5ldyBDdG9yKE5hTik7DQoNCiAgICAvLyBjb3MoMCkgPSBjb3MoLTApID0gMQ0KICAgIGlmICgheC5kWzBdKSByZXR1cm4gbmV3IEN0b3IoMSk7DQoNCiAgICBwciA9IEN0b3IucHJlY2lzaW9uOw0KICAgIHJtID0gQ3Rvci5yb3VuZGluZzsNCiAgICBDdG9yLnByZWNpc2lvbiA9IHByICsgTWF0aC5tYXgoeC5lLCB4LnNkKCkpICsgTE9HX0JBU0U7DQogICAgQ3Rvci5yb3VuZGluZyA9IDE7DQoNCiAgICB4ID0gY29zaW5lKEN0b3IsIHRvTGVzc1RoYW5IYWxmUGkoQ3RvciwgeCkpOw0KDQogICAgQ3Rvci5wcmVjaXNpb24gPSBwcjsNCiAgICBDdG9yLnJvdW5kaW5nID0gcm07DQoNCiAgICByZXR1cm4gZmluYWxpc2UocXVhZHJhbnQgPT0gMiB8fCBxdWFkcmFudCA9PSAzID8geC5uZWcoKSA6IHgsIHByLCBybSwgdHJ1ZSk7DQogIH07DQoNCg0KICAvKg0KICAgKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgY3ViZSByb290IG9mIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwsIHJvdW5kZWQgdG8NCiAgICogYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC4NCiAgICoNCiAgICogIGNicnQoMCkgID0gIDANCiAgICogIGNicnQoLTApID0gLTANCiAgICogIGNicnQoMSkgID0gIDENCiAgICogIGNicnQoLTEpID0gLTENCiAgICogIGNicnQoTikgID0gIE4NCiAgICogIGNicnQoLUkpID0gLUkNCiAgICogIGNicnQoSSkgID0gIEkNCiAgICoNCiAgICogTWF0aC5jYnJ0KHgpID0gKHggPCAwID8gLU1hdGgucG93KC14LCAxLzMpIDogTWF0aC5wb3coeCwgMS8zKSkNCiAgICoNCiAgICovDQogIFAuY3ViZVJvb3QgPSBQLmNicnQgPSBmdW5jdGlvbiAoKSB7DQogICAgdmFyIGUsIG0sIG4sIHIsIHJlcCwgcywgc2QsIHQsIHQzLCB0M3BsdXN4LA0KICAgICAgeCA9IHRoaXMsDQogICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjsNCg0KICAgIGlmICgheC5pc0Zpbml0ZSgpIHx8IHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTsNCiAgICBleHRlcm5hbCA9IGZhbHNlOw0KDQogICAgLy8gSW5pdGlhbCBlc3RpbWF0ZS4NCiAgICBzID0geC5zICogbWF0aHBvdyh4LnMgKiB4LCAxIC8gMyk7DQoNCiAgICAgLy8gTWF0aC5jYnJ0IHVuZGVyZmxvdy9vdmVyZmxvdz8NCiAgICAgLy8gUGFzcyB4IHRvIE1hdGgucG93IGFzIGludGVnZXIsIHRoZW4gYWRqdXN0IHRoZSBleHBvbmVudCBvZiB0aGUgcmVzdWx0Lg0KICAgIGlmICghcyB8fCBNYXRoLmFicyhzKSA9PSAxIC8gMCkgew0KICAgICAgbiA9IGRpZ2l0c1RvU3RyaW5nKHguZCk7DQogICAgICBlID0geC5lOw0KDQogICAgICAvLyBBZGp1c3QgbiBleHBvbmVudCBzbyBpdCBpcyBhIG11bHRpcGxlIG9mIDMgYXdheSBmcm9tIHggZXhwb25lbnQuDQogICAgICBpZiAocyA9IChlIC0gbi5sZW5ndGggKyAxKSAlIDMpIG4gKz0gKHMgPT0gMSB8fCBzID09IC0yID8gJzAnIDogJzAwJyk7DQogICAgICBzID0gbWF0aHBvdyhuLCAxIC8gMyk7DQoNCiAgICAgIC8vIFJhcmVseSwgZSBtYXkgYmUgb25lIGxlc3MgdGhhbiB0aGUgcmVzdWx0IGV4cG9uZW50IHZhbHVlLg0KICAgICAgZSA9IG1hdGhmbG9vcigoZSArIDEpIC8gMykgLSAoZSAlIDMgPT0gKGUgPCAwID8gLTEgOiAyKSk7DQoNCiAgICAgIGlmIChzID09IDEgLyAwKSB7DQogICAgICAgIG4gPSAnNWUnICsgZTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIG4gPSBzLnRvRXhwb25lbnRpYWwoKTsNCiAgICAgICAgbiA9IG4uc2xpY2UoMCwgbi5pbmRleE9mKCdlJykgKyAxKSArIGU7DQogICAgICB9DQoNCiAgICAgIHIgPSBuZXcgQ3RvcihuKTsNCiAgICAgIHIucyA9IHguczsNCiAgICB9IGVsc2Ugew0KICAgICAgciA9IG5ldyBDdG9yKHMudG9TdHJpbmcoKSk7DQogICAgfQ0KDQogICAgc2QgPSAoZSA9IEN0b3IucHJlY2lzaW9uKSArIDM7DQoNCiAgICAvLyBIYWxsZXkncyBtZXRob2QuDQogICAgLy8gVE9ETz8gQ29tcGFyZSBOZXd0b24ncyBtZXRob2QuDQogICAgZm9yICg7Oykgew0KICAgICAgdCA9IHI7DQogICAgICB0MyA9IHQudGltZXModCkudGltZXModCk7DQogICAgICB0M3BsdXN4ID0gdDMucGx1cyh4KTsNCiAgICAgIHIgPSBkaXZpZGUodDNwbHVzeC5wbHVzKHgpLnRpbWVzKHQpLCB0M3BsdXN4LnBsdXModDMpLCBzZCArIDIsIDEpOw0KDQogICAgICAvLyBUT0RPPyBSZXBsYWNlIHdpdGggZm9yLWxvb3AgYW5kIGNoZWNrUm91bmRpbmdEaWdpdHMuDQogICAgICBpZiAoZGlnaXRzVG9TdHJpbmcodC5kKS5zbGljZSgwLCBzZCkgPT09IChuID0gZGlnaXRzVG9TdHJpbmcoci5kKSkuc2xpY2UoMCwgc2QpKSB7DQogICAgICAgIG4gPSBuLnNsaWNlKHNkIC0gMywgc2QgKyAxKTsNCg0KICAgICAgICAvLyBUaGUgNHRoIHJvdW5kaW5nIGRpZ2l0IG1heSBiZSBpbiBlcnJvciBieSAtMSBzbyBpZiB0aGUgNCByb3VuZGluZyBkaWdpdHMgYXJlIDk5OTkgb3IgNDk5OQ0KICAgICAgICAvLyAsIGkuZS4gYXBwcm9hY2hpbmcgYSByb3VuZGluZyBib3VuZGFyeSwgY29udGludWUgdGhlIGl0ZXJhdGlvbi4NCiAgICAgICAgaWYgKG4gPT0gJzk5OTknIHx8ICFyZXAgJiYgbiA9PSAnNDk5OScpIHsNCg0KICAgICAgICAgIC8vIE9uIHRoZSBmaXJzdCBpdGVyYXRpb24gb25seSwgY2hlY2sgdG8gc2VlIGlmIHJvdW5kaW5nIHVwIGdpdmVzIHRoZSBleGFjdCByZXN1bHQgYXMgdGhlDQogICAgICAgICAgLy8gbmluZXMgbWF5IGluZmluaXRlbHkgcmVwZWF0Lg0KICAgICAgICAgIGlmICghcmVwKSB7DQogICAgICAgICAgICBmaW5hbGlzZSh0LCBlICsgMSwgMCk7DQoNCiAgICAgICAgICAgIGlmICh0LnRpbWVzKHQpLnRpbWVzKHQpLmVxKHgpKSB7DQogICAgICAgICAgICAgIHIgPSB0Ow0KICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQoNCiAgICAgICAgICBzZCArPSA0Ow0KICAgICAgICAgIHJlcCA9IDE7DQogICAgICAgIH0gZWxzZSB7DQoNCiAgICAgICAgICAvLyBJZiB0aGUgcm91bmRpbmcgZGlnaXRzIGFyZSBudWxsLCAwezAsNH0gb3IgNTB7MCwzfSwgY2hlY2sgZm9yIGFuIGV4YWN0IHJlc3VsdC4NCiAgICAgICAgICAvLyBJZiBub3QsIHRoZW4gdGhlcmUgYXJlIGZ1cnRoZXIgZGlnaXRzIGFuZCBtIHdpbGwgYmUgdHJ1dGh5Lg0KICAgICAgICAgIGlmICghK24gfHwgIStuLnNsaWNlKDEpICYmIG4uY2hhckF0KDApID09ICc1Jykgew0KDQogICAgICAgICAgICAvLyBUcnVuY2F0ZSB0byB0aGUgZmlyc3Qgcm91bmRpbmcgZGlnaXQuDQogICAgICAgICAgICBmaW5hbGlzZShyLCBlICsgMSwgMSk7DQogICAgICAgICAgICBtID0gIXIudGltZXMocikudGltZXMocikuZXEoeCk7DQogICAgICAgICAgfQ0KDQogICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQoNCiAgICBleHRlcm5hbCA9IHRydWU7DQoNCiAgICByZXR1cm4gZmluYWxpc2UociwgZSwgQ3Rvci5yb3VuZGluZywgbSk7DQogIH07DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyBvZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLg0KICAgKg0KICAgKi8NCiAgUC5kZWNpbWFsUGxhY2VzID0gUC5kcCA9IGZ1bmN0aW9uICgpIHsNCiAgICB2YXIgdywNCiAgICAgIGQgPSB0aGlzLmQsDQogICAgICBuID0gTmFOOw0KDQogICAgaWYgKGQpIHsNCiAgICAgIHcgPSBkLmxlbmd0aCAtIDE7DQogICAgICBuID0gKHcgLSBtYXRoZmxvb3IodGhpcy5lIC8gTE9HX0JBU0UpKSAqIExPR19CQVNFOw0KDQogICAgICAvLyBTdWJ0cmFjdCB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm9zIG9mIHRoZSBsYXN0IHdvcmQuDQogICAgICB3ID0gZFt3XTsNCiAgICAgIGlmICh3KSBmb3IgKDsgdyAlIDEwID09IDA7IHcgLz0gMTApIG4tLTsNCiAgICAgIGlmIChuIDwgMCkgbiA9IDA7DQogICAgfQ0KDQogICAgcmV0dXJuIG47DQogIH07DQoNCg0KICAvKg0KICAgKiAgbiAvIDAgPSBJDQogICAqICBuIC8gTiA9IE4NCiAgICogIG4gLyBJID0gMA0KICAgKiAgMCAvIG4gPSAwDQogICAqICAwIC8gMCA9IE4NCiAgICogIDAgLyBOID0gTg0KICAgKiAgMCAvIEkgPSAwDQogICAqICBOIC8gbiA9IE4NCiAgICogIE4gLyAwID0gTg0KICAgKiAgTiAvIE4gPSBODQogICAqICBOIC8gSSA9IE4NCiAgICogIEkgLyBuID0gSQ0KICAgKiAgSSAvIDAgPSBJDQogICAqICBJIC8gTiA9IE4NCiAgICogIEkgLyBJID0gTg0KICAgKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGRpdmlkZWQgYnkgYHlgLCByb3VuZGVkIHRvDQogICAqIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuDQogICAqDQogICAqLw0KICBQLmRpdmlkZWRCeSA9IFAuZGl2ID0gZnVuY3Rpb24gKHkpIHsNCiAgICByZXR1cm4gZGl2aWRlKHRoaXMsIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHkpKTsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnRlZ2VyIHBhcnQgb2YgZGl2aWRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbA0KICAgKiBieSB0aGUgdmFsdWUgb2YgYHlgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuDQogICAqDQogICAqLw0KICBQLmRpdmlkZWRUb0ludGVnZXJCeSA9IFAuZGl2VG9JbnQgPSBmdW5jdGlvbiAoeSkgew0KICAgIHZhciB4ID0gdGhpcywNCiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yOw0KICAgIHJldHVybiBmaW5hbGlzZShkaXZpZGUoeCwgbmV3IEN0b3IoeSksIDAsIDEsIDEpLCBDdG9yLnByZWNpc2lvbiwgQ3Rvci5yb3VuZGluZyk7DQogIH07DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBgeWAsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuDQogICAqDQogICAqLw0KICBQLmVxdWFscyA9IFAuZXEgPSBmdW5jdGlvbiAoeSkgew0KICAgIHJldHVybiB0aGlzLmNtcCh5KSA9PT0gMDsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcm91bmRlZCB0byBhIHdob2xlIG51bWJlciBpbiB0aGUNCiAgICogZGlyZWN0aW9uIG9mIG5lZ2F0aXZlIEluZmluaXR5Lg0KICAgKg0KICAgKi8NCiAgUC5mbG9vciA9IGZ1bmN0aW9uICgpIHsNCiAgICByZXR1cm4gZmluYWxpc2UobmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyksIHRoaXMuZSArIDEsIDMpOw0KICB9Ow0KDQoNCiAgLyoNCiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mIGB5YCwgb3RoZXJ3aXNlIHJldHVybg0KICAgKiBmYWxzZS4NCiAgICoNCiAgICovDQogIFAuZ3JlYXRlclRoYW4gPSBQLmd0ID0gZnVuY3Rpb24gKHkpIHsNCiAgICByZXR1cm4gdGhpcy5jbXAoeSkgPiAwOw0KICB9Ow0KDQoNCiAgLyoNCiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIGB5YCwNCiAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS4NCiAgICoNCiAgICovDQogIFAuZ3JlYXRlclRoYW5PckVxdWFsVG8gPSBQLmd0ZSA9IGZ1bmN0aW9uICh5KSB7DQogICAgdmFyIGsgPSB0aGlzLmNtcCh5KTsNCiAgICByZXR1cm4gayA9PSAxIHx8IGsgPT09IDA7DQogIH07DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgaHlwZXJib2xpYyBjb3NpbmUgb2YgdGhlIHZhbHVlIGluIHJhZGlhbnMgb2YgdGhpcw0KICAgKiBEZWNpbWFsLg0KICAgKg0KICAgKiBEb21haW46IFstSW5maW5pdHksIEluZmluaXR5XQ0KICAgKiBSYW5nZTogWzEsIEluZmluaXR5XQ0KICAgKg0KICAgKiBjb3NoKHgpID0gMSArIHheMi8yISArIHheNC80ISArIHheNi82ISArIC4uLg0KICAgKg0KICAgKiBjb3NoKDApICAgICAgICAgPSAxDQogICAqIGNvc2goLTApICAgICAgICA9IDENCiAgICogY29zaChJbmZpbml0eSkgID0gSW5maW5pdHkNCiAgICogY29zaCgtSW5maW5pdHkpID0gSW5maW5pdHkNCiAgICogY29zaChOYU4pICAgICAgID0gTmFODQogICAqDQogICAqICB4ICAgICAgICB0aW1lIHRha2VuIChtcykgICByZXN1bHQNCiAgICogMTAwMCAgICAgIDkgICAgICAgICAgICAgICAgIDkuODUwMzU1NTcwMDg1MjM0OTY5NGUrNDMzDQogICAqIDEwMDAwICAgICAyNSAgICAgICAgICAgICAgICA0LjQwMzQwOTExMjgzMTQ2MDc5MzZlKzQzNDINCiAgICogMTAwMDAwICAgIDE3MSAgICAgICAgICAgICAgIDEuNDAzMzMxNjgwMjEzMDYxNTg5N2UrNDM0MjkNCiAgICogMTAwMDAwMCAgIDM4MTcgICAgICAgICAgICAgIDEuNTE2NjA3Njk4NDAxMDQzNzcyNWUrNDM0Mjk0DQogICAqIDEwMDAwMDAwICBhYmFuZG9uZWQgYWZ0ZXIgMiBtaW51dGUgd2FpdA0KICAgKg0KICAgKiBUT0RPPyBDb21wYXJlIHBlcmZvcm1hbmNlIG9mIGNvc2goeCkgPSAwLjUgKiAoZXhwKHgpICsgZXhwKC14KSkNCiAgICoNCiAgICovDQogIFAuaHlwZXJib2xpY0Nvc2luZSA9IFAuY29zaCA9IGZ1bmN0aW9uICgpIHsNCiAgICB2YXIgaywgbiwgcHIsIHJtLCBsZW4sDQogICAgICB4ID0gdGhpcywNCiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLA0KICAgICAgb25lID0gbmV3IEN0b3IoMSk7DQoNCiAgICBpZiAoIXguaXNGaW5pdGUoKSkgcmV0dXJuIG5ldyBDdG9yKHgucyA/IDEgLyAwIDogTmFOKTsNCiAgICBpZiAoeC5pc1plcm8oKSkgcmV0dXJuIG9uZTsNCg0KICAgIHByID0gQ3Rvci5wcmVjaXNpb247DQogICAgcm0gPSBDdG9yLnJvdW5kaW5nOw0KICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyBNYXRoLm1heCh4LmUsIHguc2QoKSkgKyA0Ow0KICAgIEN0b3Iucm91bmRpbmcgPSAxOw0KICAgIGxlbiA9IHguZC5sZW5ndGg7DQoNCiAgICAvLyBBcmd1bWVudCByZWR1Y3Rpb246IGNvcyg0eCkgPSAxIC0gOGNvc14yKHgpICsgOGNvc140KHgpICsgMQ0KICAgIC8vIGkuZS4gY29zKHgpID0gMSAtIGNvc14yKHgvNCkoOCAtIDhjb3NeMih4LzQpKQ0KDQogICAgLy8gRXN0aW1hdGUgdGhlIG9wdGltdW0gbnVtYmVyIG9mIHRpbWVzIHRvIHVzZSB0aGUgYXJndW1lbnQgcmVkdWN0aW9uLg0KICAgIC8vIFRPRE8/IEVzdGltYXRpb24gcmV1c2VkIGZyb20gY29zaW5lKCkgYW5kIG1heSBub3QgYmUgb3B0aW1hbCBoZXJlLg0KICAgIGlmIChsZW4gPCAzMikgew0KICAgICAgayA9IE1hdGguY2VpbChsZW4gLyAzKTsNCiAgICAgIG4gPSAoMSAvIHRpbnlQb3coNCwgaykpLnRvU3RyaW5nKCk7DQogICAgfSBlbHNlIHsNCiAgICAgIGsgPSAxNjsNCiAgICAgIG4gPSAnMi4zMjgzMDY0MzY1Mzg2OTYyODkwNjI1ZS0xMCc7DQogICAgfQ0KDQogICAgeCA9IHRheWxvclNlcmllcyhDdG9yLCAxLCB4LnRpbWVzKG4pLCBuZXcgQ3RvcigxKSwgdHJ1ZSk7DQoNCiAgICAvLyBSZXZlcnNlIGFyZ3VtZW50IHJlZHVjdGlvbg0KICAgIHZhciBjb3NoMl94LA0KICAgICAgaSA9IGssDQogICAgICBkOCA9IG5ldyBDdG9yKDgpOw0KICAgIGZvciAoOyBpLS07KSB7DQogICAgICBjb3NoMl94ID0geC50aW1lcyh4KTsNCiAgICAgIHggPSBvbmUubWludXMoY29zaDJfeC50aW1lcyhkOC5taW51cyhjb3NoMl94LnRpbWVzKGQ4KSkpKTsNCiAgICB9DQoNCiAgICByZXR1cm4gZmluYWxpc2UoeCwgQ3Rvci5wcmVjaXNpb24gPSBwciwgQ3Rvci5yb3VuZGluZyA9IHJtLCB0cnVlKTsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgdGhlIHZhbHVlIGluIHJhZGlhbnMgb2YgdGhpcw0KICAgKiBEZWNpbWFsLg0KICAgKg0KICAgKiBEb21haW46IFstSW5maW5pdHksIEluZmluaXR5XQ0KICAgKiBSYW5nZTogWy1JbmZpbml0eSwgSW5maW5pdHldDQogICAqDQogICAqIHNpbmgoeCkgPSB4ICsgeF4zLzMhICsgeF41LzUhICsgeF43LzchICsgLi4uDQogICAqDQogICAqIHNpbmgoMCkgICAgICAgICA9IDANCiAgICogc2luaCgtMCkgICAgICAgID0gLTANCiAgICogc2luaChJbmZpbml0eSkgID0gSW5maW5pdHkNCiAgICogc2luaCgtSW5maW5pdHkpID0gLUluZmluaXR5DQogICAqIHNpbmgoTmFOKSAgICAgICA9IE5hTg0KICAgKg0KICAgKiB4ICAgICAgICB0aW1lIHRha2VuIChtcykNCiAgICogMTAgICAgICAgMiBtcw0KICAgKiAxMDAgICAgICA1IG1zDQogICAqIDEwMDAgICAgIDE0IG1zDQogICAqIDEwMDAwICAgIDgyIG1zDQogICAqIDEwMDAwMCAgIDg4NiBtcyAgICAgICAgICAgIDEuNDAzMzMxNjgwMjEzMDYxNTg5N2UrNDM0MjkNCiAgICogMjAwMDAwICAgMjYxMyBtcw0KICAgKiAzMDAwMDAgICA1NDA3IG1zDQogICAqIDQwMDAwMCAgIDg4MjQgbXMNCiAgICogNTAwMDAwICAgMTMwMjYgbXMgICAgICAgICAgOC43MDgwNjQzNjEyNzE4MDg0MTI5ZSsyMTcxNDYNCiAgICogMTAwMDAwMCAgNDg1NDMgbXMNCiAgICoNCiAgICogVE9ETz8gQ29tcGFyZSBwZXJmb3JtYW5jZSBvZiBzaW5oKHgpID0gMC41ICogKGV4cCh4KSAtIGV4cCgteCkpDQogICAqDQogICAqLw0KICBQLmh5cGVyYm9saWNTaW5lID0gUC5zaW5oID0gZnVuY3Rpb24gKCkgew0KICAgIHZhciBrLCBwciwgcm0sIGxlbiwNCiAgICAgIHggPSB0aGlzLA0KICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7DQoNCiAgICBpZiAoIXguaXNGaW5pdGUoKSB8fCB4LmlzWmVybygpKSByZXR1cm4gbmV3IEN0b3IoeCk7DQoNCiAgICBwciA9IEN0b3IucHJlY2lzaW9uOw0KICAgIHJtID0gQ3Rvci5yb3VuZGluZzsNCiAgICBDdG9yLnByZWNpc2lvbiA9IHByICsgTWF0aC5tYXgoeC5lLCB4LnNkKCkpICsgNDsNCiAgICBDdG9yLnJvdW5kaW5nID0gMTsNCiAgICBsZW4gPSB4LmQubGVuZ3RoOw0KDQogICAgaWYgKGxlbiA8IDMpIHsNCiAgICAgIHggPSB0YXlsb3JTZXJpZXMoQ3RvciwgMiwgeCwgeCwgdHJ1ZSk7DQogICAgfSBlbHNlIHsNCg0KICAgICAgLy8gQWx0ZXJuYXRpdmUgYXJndW1lbnQgcmVkdWN0aW9uOiBzaW5oKDN4KSA9IHNpbmgoeCkoMyArIDRzaW5oXjIoeCkpDQogICAgICAvLyBpLmUuIHNpbmgoeCkgPSBzaW5oKHgvMykoMyArIDRzaW5oXjIoeC8zKSkNCiAgICAgIC8vIDMgbXVsdGlwbGljYXRpb25zIGFuZCAxIGFkZGl0aW9uDQoNCiAgICAgIC8vIEFyZ3VtZW50IHJlZHVjdGlvbjogc2luaCg1eCkgPSBzaW5oKHgpKDUgKyBzaW5oXjIoeCkoMjAgKyAxNnNpbmheMih4KSkpDQogICAgICAvLyBpLmUuIHNpbmgoeCkgPSBzaW5oKHgvNSkoNSArIHNpbmheMih4LzUpKDIwICsgMTZzaW5oXjIoeC81KSkpDQogICAgICAvLyA0IG11bHRpcGxpY2F0aW9ucyBhbmQgMiBhZGRpdGlvbnMNCg0KICAgICAgLy8gRXN0aW1hdGUgdGhlIG9wdGltdW0gbnVtYmVyIG9mIHRpbWVzIHRvIHVzZSB0aGUgYXJndW1lbnQgcmVkdWN0aW9uLg0KICAgICAgayA9IDEuNCAqIE1hdGguc3FydChsZW4pOw0KICAgICAgayA9IGsgPiAxNiA/IDE2IDogayB8IDA7DQoNCiAgICAgIHggPSB4LnRpbWVzKDEgLyB0aW55UG93KDUsIGspKTsNCiAgICAgIHggPSB0YXlsb3JTZXJpZXMoQ3RvciwgMiwgeCwgeCwgdHJ1ZSk7DQoNCiAgICAgIC8vIFJldmVyc2UgYXJndW1lbnQgcmVkdWN0aW9uDQogICAgICB2YXIgc2luaDJfeCwNCiAgICAgICAgZDUgPSBuZXcgQ3Rvcig1KSwNCiAgICAgICAgZDE2ID0gbmV3IEN0b3IoMTYpLA0KICAgICAgICBkMjAgPSBuZXcgQ3RvcigyMCk7DQogICAgICBmb3IgKDsgay0tOykgew0KICAgICAgICBzaW5oMl94ID0geC50aW1lcyh4KTsNCiAgICAgICAgeCA9IHgudGltZXMoZDUucGx1cyhzaW5oMl94LnRpbWVzKGQxNi50aW1lcyhzaW5oMl94KS5wbHVzKGQyMCkpKSk7DQogICAgICB9DQogICAgfQ0KDQogICAgQ3Rvci5wcmVjaXNpb24gPSBwcjsNCiAgICBDdG9yLnJvdW5kaW5nID0gcm07DQoNCiAgICByZXR1cm4gZmluYWxpc2UoeCwgcHIsIHJtLCB0cnVlKTsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgdGhlIHZhbHVlIGluIHJhZGlhbnMgb2YgdGhpcw0KICAgKiBEZWNpbWFsLg0KICAgKg0KICAgKiBEb21haW46IFstSW5maW5pdHksIEluZmluaXR5XQ0KICAgKiBSYW5nZTogWy0xLCAxXQ0KICAgKg0KICAgKiB0YW5oKHgpID0gc2luaCh4KSAvIGNvc2goeCkNCiAgICoNCiAgICogdGFuaCgwKSAgICAgICAgID0gMA0KICAgKiB0YW5oKC0wKSAgICAgICAgPSAtMA0KICAgKiB0YW5oKEluZmluaXR5KSAgPSAxDQogICAqIHRhbmgoLUluZmluaXR5KSA9IC0xDQogICAqIHRhbmgoTmFOKSAgICAgICA9IE5hTg0KICAgKg0KICAgKi8NCiAgUC5oeXBlcmJvbGljVGFuZ2VudCA9IFAudGFuaCA9IGZ1bmN0aW9uICgpIHsNCiAgICB2YXIgcHIsIHJtLA0KICAgICAgeCA9IHRoaXMsDQogICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjsNCg0KICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoeC5zKTsNCiAgICBpZiAoeC5pc1plcm8oKSkgcmV0dXJuIG5ldyBDdG9yKHgpOw0KDQogICAgcHIgPSBDdG9yLnByZWNpc2lvbjsNCiAgICBybSA9IEN0b3Iucm91bmRpbmc7DQogICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDc7DQogICAgQ3Rvci5yb3VuZGluZyA9IDE7DQoNCiAgICByZXR1cm4gZGl2aWRlKHguc2luaCgpLCB4LmNvc2goKSwgQ3Rvci5wcmVjaXNpb24gPSBwciwgQ3Rvci5yb3VuZGluZyA9IHJtKTsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBhcmNjb3NpbmUgKGludmVyc2UgY29zaW5lKSBpbiByYWRpYW5zIG9mIHRoZSB2YWx1ZSBvZg0KICAgKiB0aGlzIERlY2ltYWwuDQogICAqDQogICAqIERvbWFpbjogWy0xLCAxXQ0KICAgKiBSYW5nZTogWzAsIHBpXQ0KICAgKg0KICAgKiBhY29zKHgpID0gcGkvMiAtIGFzaW4oeCkNCiAgICoNCiAgICogYWNvcygwKSAgICAgICA9IHBpLzINCiAgICogYWNvcygtMCkgICAgICA9IHBpLzINCiAgICogYWNvcygxKSAgICAgICA9IDANCiAgICogYWNvcygtMSkgICAgICA9IHBpDQogICAqIGFjb3MoMS8yKSAgICAgPSBwaS8zDQogICAqIGFjb3MoLTEvMikgICAgPSAyKnBpLzMNCiAgICogYWNvcyh8eHwgPiAxKSA9IE5hTg0KICAgKiBhY29zKE5hTikgICAgID0gTmFODQogICAqDQogICAqLw0KICBQLmludmVyc2VDb3NpbmUgPSBQLmFjb3MgPSBmdW5jdGlvbiAoKSB7DQogICAgdmFyIGhhbGZQaSwNCiAgICAgIHggPSB0aGlzLA0KICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsDQogICAgICBrID0geC5hYnMoKS5jbXAoMSksDQogICAgICBwciA9IEN0b3IucHJlY2lzaW9uLA0KICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nOw0KDQogICAgaWYgKGsgIT09IC0xKSB7DQogICAgICByZXR1cm4gayA9PT0gMA0KICAgICAgICAvLyB8eHwgaXMgMQ0KICAgICAgICA/IHguaXNOZWcoKSA/IGdldFBpKEN0b3IsIHByLCBybSkgOiBuZXcgQ3RvcigwKQ0KICAgICAgICAvLyB8eHwgPiAxIG9yIHggaXMgTmFODQogICAgICAgIDogbmV3IEN0b3IoTmFOKTsNCiAgICB9DQoNCiAgICBpZiAoeC5pc1plcm8oKSkgcmV0dXJuIGdldFBpKEN0b3IsIHByICsgNCwgcm0pLnRpbWVzKDAuNSk7DQoNCiAgICAvLyBUT0RPPyBTcGVjaWFsIGNhc2UgYWNvcygwLjUpID0gcGkvMyBhbmQgYWNvcygtMC41KSA9IDIqcGkvMw0KDQogICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDY7DQogICAgQ3Rvci5yb3VuZGluZyA9IDE7DQoNCiAgICB4ID0geC5hc2luKCk7DQogICAgaGFsZlBpID0gZ2V0UGkoQ3RvciwgcHIgKyA0LCBybSkudGltZXMoMC41KTsNCg0KICAgIEN0b3IucHJlY2lzaW9uID0gcHI7DQogICAgQ3Rvci5yb3VuZGluZyA9IHJtOw0KDQogICAgcmV0dXJuIGhhbGZQaS5taW51cyh4KTsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBoeXBlcmJvbGljIGNvc2luZSBpbiByYWRpYW5zIG9mIHRoZQ0KICAgKiB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuDQogICAqDQogICAqIERvbWFpbjogWzEsIEluZmluaXR5XQ0KICAgKiBSYW5nZTogWzAsIEluZmluaXR5XQ0KICAgKg0KICAgKiBhY29zaCh4KSA9IGxuKHggKyBzcXJ0KHheMiAtIDEpKQ0KICAgKg0KICAgKiBhY29zaCh4IDwgMSkgICAgID0gTmFODQogICAqIGFjb3NoKE5hTikgICAgICAgPSBOYU4NCiAgICogYWNvc2goSW5maW5pdHkpICA9IEluZmluaXR5DQogICAqIGFjb3NoKC1JbmZpbml0eSkgPSBOYU4NCiAgICogYWNvc2goMCkgICAgICAgICA9IE5hTg0KICAgKiBhY29zaCgtMCkgICAgICAgID0gTmFODQogICAqIGFjb3NoKDEpICAgICAgICAgPSAwDQogICAqIGFjb3NoKC0xKSAgICAgICAgPSBOYU4NCiAgICoNCiAgICovDQogIFAuaW52ZXJzZUh5cGVyYm9saWNDb3NpbmUgPSBQLmFjb3NoID0gZnVuY3Rpb24gKCkgew0KICAgIHZhciBwciwgcm0sDQogICAgICB4ID0gdGhpcywNCiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yOw0KDQogICAgaWYgKHgubHRlKDEpKSByZXR1cm4gbmV3IEN0b3IoeC5lcSgxKSA/IDAgOiBOYU4pOw0KICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoeCk7DQoNCiAgICBwciA9IEN0b3IucHJlY2lzaW9uOw0KICAgIHJtID0gQ3Rvci5yb3VuZGluZzsNCiAgICBDdG9yLnByZWNpc2lvbiA9IHByICsgTWF0aC5tYXgoTWF0aC5hYnMoeC5lKSwgeC5zZCgpKSArIDQ7DQogICAgQ3Rvci5yb3VuZGluZyA9IDE7DQogICAgZXh0ZXJuYWwgPSBmYWxzZTsNCg0KICAgIHggPSB4LnRpbWVzKHgpLm1pbnVzKDEpLnNxcnQoKS5wbHVzKHgpOw0KDQogICAgZXh0ZXJuYWwgPSB0cnVlOw0KICAgIEN0b3IucHJlY2lzaW9uID0gcHI7DQogICAgQ3Rvci5yb3VuZGluZyA9IHJtOw0KDQogICAgcmV0dXJuIHgubG4oKTsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBoeXBlcmJvbGljIHNpbmUgaW4gcmFkaWFucyBvZiB0aGUgdmFsdWUNCiAgICogb2YgdGhpcyBEZWNpbWFsLg0KICAgKg0KICAgKiBEb21haW46IFstSW5maW5pdHksIEluZmluaXR5XQ0KICAgKiBSYW5nZTogWy1JbmZpbml0eSwgSW5maW5pdHldDQogICAqDQogICAqIGFzaW5oKHgpID0gbG4oeCArIHNxcnQoeF4yICsgMSkpDQogICAqDQogICAqIGFzaW5oKE5hTikgICAgICAgPSBOYU4NCiAgICogYXNpbmgoSW5maW5pdHkpICA9IEluZmluaXR5DQogICAqIGFzaW5oKC1JbmZpbml0eSkgPSAtSW5maW5pdHkNCiAgICogYXNpbmgoMCkgICAgICAgICA9IDANCiAgICogYXNpbmgoLTApICAgICAgICA9IC0wDQogICAqDQogICAqLw0KICBQLmludmVyc2VIeXBlcmJvbGljU2luZSA9IFAuYXNpbmggPSBmdW5jdGlvbiAoKSB7DQogICAgdmFyIHByLCBybSwNCiAgICAgIHggPSB0aGlzLA0KICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7DQoNCiAgICBpZiAoIXguaXNGaW5pdGUoKSB8fCB4LmlzWmVybygpKSByZXR1cm4gbmV3IEN0b3IoeCk7DQoNCiAgICBwciA9IEN0b3IucHJlY2lzaW9uOw0KICAgIHJtID0gQ3Rvci5yb3VuZGluZzsNCiAgICBDdG9yLnByZWNpc2lvbiA9IHByICsgMiAqIE1hdGgubWF4KE1hdGguYWJzKHguZSksIHguc2QoKSkgKyA2Ow0KICAgIEN0b3Iucm91bmRpbmcgPSAxOw0KICAgIGV4dGVybmFsID0gZmFsc2U7DQoNCiAgICB4ID0geC50aW1lcyh4KS5wbHVzKDEpLnNxcnQoKS5wbHVzKHgpOw0KDQogICAgZXh0ZXJuYWwgPSB0cnVlOw0KICAgIEN0b3IucHJlY2lzaW9uID0gcHI7DQogICAgQ3Rvci5yb3VuZGluZyA9IHJtOw0KDQogICAgcmV0dXJuIHgubG4oKTsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgaW4gcmFkaWFucyBvZiB0aGUNCiAgICogdmFsdWUgb2YgdGhpcyBEZWNpbWFsLg0KICAgKg0KICAgKiBEb21haW46IFstMSwgMV0NCiAgICogUmFuZ2U6IFstSW5maW5pdHksIEluZmluaXR5XQ0KICAgKg0KICAgKiBhdGFuaCh4KSA9IDAuNSAqIGxuKCgxICsgeCkgLyAoMSAtIHgpKQ0KICAgKg0KICAgKiBhdGFuaCh8eHwgPiAxKSAgID0gTmFODQogICAqIGF0YW5oKE5hTikgICAgICAgPSBOYU4NCiAgICogYXRhbmgoSW5maW5pdHkpICA9IE5hTg0KICAgKiBhdGFuaCgtSW5maW5pdHkpID0gTmFODQogICAqIGF0YW5oKDApICAgICAgICAgPSAwDQogICAqIGF0YW5oKC0wKSAgICAgICAgPSAtMA0KICAgKiBhdGFuaCgxKSAgICAgICAgID0gSW5maW5pdHkNCiAgICogYXRhbmgoLTEpICAgICAgICA9IC1JbmZpbml0eQ0KICAgKg0KICAgKi8NCiAgUC5pbnZlcnNlSHlwZXJib2xpY1RhbmdlbnQgPSBQLmF0YW5oID0gZnVuY3Rpb24gKCkgew0KICAgIHZhciBwciwgcm0sIHdwciwgeHNkLA0KICAgICAgeCA9IHRoaXMsDQogICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjsNCg0KICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoTmFOKTsNCiAgICBpZiAoeC5lID49IDApIHJldHVybiBuZXcgQ3Rvcih4LmFicygpLmVxKDEpID8geC5zIC8gMCA6IHguaXNaZXJvKCkgPyB4IDogTmFOKTsNCg0KICAgIHByID0gQ3Rvci5wcmVjaXNpb247DQogICAgcm0gPSBDdG9yLnJvdW5kaW5nOw0KICAgIHhzZCA9IHguc2QoKTsNCg0KICAgIGlmIChNYXRoLm1heCh4c2QsIHByKSA8IDIgKiAteC5lIC0gMSkgcmV0dXJuIGZpbmFsaXNlKG5ldyBDdG9yKHgpLCBwciwgcm0sIHRydWUpOw0KDQogICAgQ3Rvci5wcmVjaXNpb24gPSB3cHIgPSB4c2QgLSB4LmU7DQoNCiAgICB4ID0gZGl2aWRlKHgucGx1cygxKSwgbmV3IEN0b3IoMSkubWludXMoeCksIHdwciArIHByLCAxKTsNCg0KICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyA0Ow0KICAgIEN0b3Iucm91bmRpbmcgPSAxOw0KDQogICAgeCA9IHgubG4oKTsNCg0KICAgIEN0b3IucHJlY2lzaW9uID0gcHI7DQogICAgQ3Rvci5yb3VuZGluZyA9IHJtOw0KDQogICAgcmV0dXJuIHgudGltZXMoMC41KTsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBhcmNzaW5lIChpbnZlcnNlIHNpbmUpIGluIHJhZGlhbnMgb2YgdGhlIHZhbHVlIG9mIHRoaXMNCiAgICogRGVjaW1hbC4NCiAgICoNCiAgICogRG9tYWluOiBbLUluZmluaXR5LCBJbmZpbml0eV0NCiAgICogUmFuZ2U6IFstcGkvMiwgcGkvMl0NCiAgICoNCiAgICogYXNpbih4KSA9IDIqYXRhbih4LygxICsgc3FydCgxIC0geF4yKSkpDQogICAqDQogICAqIGFzaW4oMCkgICAgICAgPSAwDQogICAqIGFzaW4oLTApICAgICAgPSAtMA0KICAgKiBhc2luKDEvMikgICAgID0gcGkvNg0KICAgKiBhc2luKC0xLzIpICAgID0gLXBpLzYNCiAgICogYXNpbigxKSAgICAgICA9IHBpLzINCiAgICogYXNpbigtMSkgICAgICA9IC1waS8yDQogICAqIGFzaW4ofHh8ID4gMSkgPSBOYU4NCiAgICogYXNpbihOYU4pICAgICA9IE5hTg0KICAgKg0KICAgKiBUT0RPPyBDb21wYXJlIHBlcmZvcm1hbmNlIG9mIFRheWxvciBzZXJpZXMuDQogICAqDQogICAqLw0KICBQLmludmVyc2VTaW5lID0gUC5hc2luID0gZnVuY3Rpb24gKCkgew0KICAgIHZhciBoYWxmUGksIGssDQogICAgICBwciwgcm0sDQogICAgICB4ID0gdGhpcywNCiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yOw0KDQogICAgaWYgKHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTsNCg0KICAgIGsgPSB4LmFicygpLmNtcCgxKTsNCiAgICBwciA9IEN0b3IucHJlY2lzaW9uOw0KICAgIHJtID0gQ3Rvci5yb3VuZGluZzsNCg0KICAgIGlmIChrICE9PSAtMSkgew0KDQogICAgICAvLyB8eHwgaXMgMQ0KICAgICAgaWYgKGsgPT09IDApIHsNCiAgICAgICAgaGFsZlBpID0gZ2V0UGkoQ3RvciwgcHIgKyA0LCBybSkudGltZXMoMC41KTsNCiAgICAgICAgaGFsZlBpLnMgPSB4LnM7DQogICAgICAgIHJldHVybiBoYWxmUGk7DQogICAgICB9DQoNCiAgICAgIC8vIHx4fCA+IDEgb3IgeCBpcyBOYU4NCiAgICAgIHJldHVybiBuZXcgQ3RvcihOYU4pOw0KICAgIH0NCg0KICAgIC8vIFRPRE8/IFNwZWNpYWwgY2FzZSBhc2luKDEvMikgPSBwaS82IGFuZCBhc2luKC0xLzIpID0gLXBpLzYNCg0KICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyA2Ow0KICAgIEN0b3Iucm91bmRpbmcgPSAxOw0KDQogICAgeCA9IHguZGl2KG5ldyBDdG9yKDEpLm1pbnVzKHgudGltZXMoeCkpLnNxcnQoKS5wbHVzKDEpKS5hdGFuKCk7DQoNCiAgICBDdG9yLnByZWNpc2lvbiA9IHByOw0KICAgIEN0b3Iucm91bmRpbmcgPSBybTsNCg0KICAgIHJldHVybiB4LnRpbWVzKDIpOw0KICB9Ow0KDQoNCiAgLyoNCiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGFyY3RhbmdlbnQgKGludmVyc2UgdGFuZ2VudCkgaW4gcmFkaWFucyBvZiB0aGUgdmFsdWUNCiAgICogb2YgdGhpcyBEZWNpbWFsLg0KICAgKg0KICAgKiBEb21haW46IFstSW5maW5pdHksIEluZmluaXR5XQ0KICAgKiBSYW5nZTogWy1waS8yLCBwaS8yXQ0KICAgKg0KICAgKiBhdGFuKHgpID0geCAtIHheMy8zICsgeF41LzUgLSB4XjcvNyArIC4uLg0KICAgKg0KICAgKiBhdGFuKDApICAgICAgICAgPSAwDQogICAqIGF0YW4oLTApICAgICAgICA9IC0wDQogICAqIGF0YW4oMSkgICAgICAgICA9IHBpLzQNCiAgICogYXRhbigtMSkgICAgICAgID0gLXBpLzQNCiAgICogYXRhbihJbmZpbml0eSkgID0gcGkvMg0KICAgKiBhdGFuKC1JbmZpbml0eSkgPSAtcGkvMg0KICAgKiBhdGFuKE5hTikgICAgICAgPSBOYU4NCiAgICoNCiAgICovDQogIFAuaW52ZXJzZVRhbmdlbnQgPSBQLmF0YW4gPSBmdW5jdGlvbiAoKSB7DQogICAgdmFyIGksIGosIGssIG4sIHB4LCB0LCByLCB3cHIsIHgyLA0KICAgICAgeCA9IHRoaXMsDQogICAgICBDdG9yID0geC5jb25zdHJ1Y3RvciwNCiAgICAgIHByID0gQ3Rvci5wcmVjaXNpb24sDQogICAgICBybSA9IEN0b3Iucm91bmRpbmc7DQoNCiAgICBpZiAoIXguaXNGaW5pdGUoKSkgew0KICAgICAgaWYgKCF4LnMpIHJldHVybiBuZXcgQ3RvcihOYU4pOw0KICAgICAgaWYgKHByICsgNCA8PSBQSV9QUkVDSVNJT04pIHsNCiAgICAgICAgciA9IGdldFBpKEN0b3IsIHByICsgNCwgcm0pLnRpbWVzKDAuNSk7DQogICAgICAgIHIucyA9IHguczsNCiAgICAgICAgcmV0dXJuIHI7DQogICAgICB9DQogICAgfSBlbHNlIGlmICh4LmlzWmVybygpKSB7DQogICAgICByZXR1cm4gbmV3IEN0b3IoeCk7DQogICAgfSBlbHNlIGlmICh4LmFicygpLmVxKDEpICYmIHByICsgNCA8PSBQSV9QUkVDSVNJT04pIHsNCiAgICAgIHIgPSBnZXRQaShDdG9yLCBwciArIDQsIHJtKS50aW1lcygwLjI1KTsNCiAgICAgIHIucyA9IHguczsNCiAgICAgIHJldHVybiByOw0KICAgIH0NCg0KICAgIEN0b3IucHJlY2lzaW9uID0gd3ByID0gcHIgKyAxMDsNCiAgICBDdG9yLnJvdW5kaW5nID0gMTsNCg0KICAgIC8vIFRPRE8/IGlmICh4ID49IDEgJiYgcHIgPD0gUElfUFJFQ0lTSU9OKSBhdGFuKHgpID0gaGFsZlBpICogeC5zIC0gYXRhbigxIC8geCk7DQoNCiAgICAvLyBBcmd1bWVudCByZWR1Y3Rpb24NCiAgICAvLyBFbnN1cmUgfHh8IDwgMC40Mg0KICAgIC8vIGF0YW4oeCkgPSAyICogYXRhbih4IC8gKDEgKyBzcXJ0KDEgKyB4XjIpKSkNCg0KICAgIGsgPSBNYXRoLm1pbigyOCwgd3ByIC8gTE9HX0JBU0UgKyAyIHwgMCk7DQoNCiAgICBmb3IgKGkgPSBrOyBpOyAtLWkpIHggPSB4LmRpdih4LnRpbWVzKHgpLnBsdXMoMSkuc3FydCgpLnBsdXMoMSkpOw0KDQogICAgZXh0ZXJuYWwgPSBmYWxzZTsNCg0KICAgIGogPSBNYXRoLmNlaWwod3ByIC8gTE9HX0JBU0UpOw0KICAgIG4gPSAxOw0KICAgIHgyID0geC50aW1lcyh4KTsNCiAgICByID0gbmV3IEN0b3IoeCk7DQogICAgcHggPSB4Ow0KDQogICAgLy8gYXRhbih4KSA9IHggLSB4XjMvMyArIHheNS81IC0geF43LzcgKyAuLi4NCiAgICBmb3IgKDsgaSAhPT0gLTE7KSB7DQogICAgICBweCA9IHB4LnRpbWVzKHgyKTsNCiAgICAgIHQgPSByLm1pbnVzKHB4LmRpdihuICs9IDIpKTsNCg0KICAgICAgcHggPSBweC50aW1lcyh4Mik7DQogICAgICByID0gdC5wbHVzKHB4LmRpdihuICs9IDIpKTsNCg0KICAgICAgaWYgKHIuZFtqXSAhPT0gdm9pZCAwKSBmb3IgKGkgPSBqOyByLmRbaV0gPT09IHQuZFtpXSAmJiBpLS07KTsNCiAgICB9DQoNCiAgICBpZiAoaykgciA9IHIudGltZXMoMiA8PCAoayAtIDEpKTsNCg0KICAgIGV4dGVybmFsID0gdHJ1ZTsNCg0KICAgIHJldHVybiBmaW5hbGlzZShyLCBDdG9yLnByZWNpc2lvbiA9IHByLCBDdG9yLnJvdW5kaW5nID0gcm0sIHRydWUpOw0KICB9Ow0KDQoNCiAgLyoNCiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyBhIGZpbml0ZSBudW1iZXIsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuDQogICAqDQogICAqLw0KICBQLmlzRmluaXRlID0gZnVuY3Rpb24gKCkgew0KICAgIHJldHVybiAhIXRoaXMuZDsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgYW4gaW50ZWdlciwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS4NCiAgICoNCiAgICovDQogIFAuaXNJbnRlZ2VyID0gUC5pc0ludCA9IGZ1bmN0aW9uICgpIHsNCiAgICByZXR1cm4gISF0aGlzLmQgJiYgbWF0aGZsb29yKHRoaXMuZSAvIExPR19CQVNFKSA+IHRoaXMuZC5sZW5ndGggLSAyOw0KICB9Ow0KDQoNCiAgLyoNCiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyBOYU4sIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuDQogICAqDQogICAqLw0KICBQLmlzTmFOID0gZnVuY3Rpb24gKCkgew0KICAgIHJldHVybiAhdGhpcy5zOw0KICB9Ow0KDQoNCiAgLyoNCiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyBuZWdhdGl2ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS4NCiAgICoNCiAgICovDQogIFAuaXNOZWdhdGl2ZSA9IFAuaXNOZWcgPSBmdW5jdGlvbiAoKSB7DQogICAgcmV0dXJuIHRoaXMucyA8IDA7DQogIH07DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIHBvc2l0aXZlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLg0KICAgKg0KICAgKi8NCiAgUC5pc1Bvc2l0aXZlID0gUC5pc1BvcyA9IGZ1bmN0aW9uICgpIHsNCiAgICByZXR1cm4gdGhpcy5zID4gMDsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgMCBvciAtMCwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS4NCiAgICoNCiAgICovDQogIFAuaXNaZXJvID0gZnVuY3Rpb24gKCkgew0KICAgIHJldHVybiAhIXRoaXMuZCAmJiB0aGlzLmRbMF0gPT09IDA7DQogIH07DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGxlc3MgdGhhbiBgeWAsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuDQogICAqDQogICAqLw0KICBQLmxlc3NUaGFuID0gUC5sdCA9IGZ1bmN0aW9uICh5KSB7DQogICAgcmV0dXJuIHRoaXMuY21wKHkpIDwgMDsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGB5YCwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS4NCiAgICoNCiAgICovDQogIFAubGVzc1RoYW5PckVxdWFsVG8gPSBQLmx0ZSA9IGZ1bmN0aW9uICh5KSB7DQogICAgcmV0dXJuIHRoaXMuY21wKHkpIDwgMTsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiB0aGUgbG9nYXJpdGhtIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgdG8gdGhlIHNwZWNpZmllZCBiYXNlLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gDQogICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuDQogICAqDQogICAqIElmIG5vIGJhc2UgaXMgc3BlY2lmaWVkLCByZXR1cm4gbG9nWzEwXShhcmcpLg0KICAgKg0KICAgKiBsb2dbYmFzZV0oYXJnKSA9IGxuKGFyZykgLyBsbihiYXNlKQ0KICAgKg0KICAgKiBUaGUgcmVzdWx0IHdpbGwgYWx3YXlzIGJlIGNvcnJlY3RseSByb3VuZGVkIGlmIHRoZSBiYXNlIG9mIHRoZSBsb2cgaXMgMTAsIGFuZCAnYWxtb3N0IGFsd2F5cycNCiAgICogb3RoZXJ3aXNlOg0KICAgKg0KICAgKiBEZXBlbmRpbmcgb24gdGhlIHJvdW5kaW5nIG1vZGUsIHRoZSByZXN1bHQgbWF5IGJlIGluY29ycmVjdGx5IHJvdW5kZWQgaWYgdGhlIGZpcnN0IGZpZnRlZW4NCiAgICogcm91bmRpbmcgZGlnaXRzIGFyZSBbNDldOTk5OTk5OTk5OTk5OTkgb3IgWzUwXTAwMDAwMDAwMDAwMDAwLiBJbiB0aGF0IGNhc2UsIHRoZSBtYXhpbXVtIGVycm9yDQogICAqIGJldHdlZW4gdGhlIHJlc3VsdCBhbmQgdGhlIGNvcnJlY3RseSByb3VuZGVkIHJlc3VsdCB3aWxsIGJlIG9uZSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLg0KICAgKg0KICAgKiBsb2dbLWJdKGEpICAgICAgID0gTmFODQogICAqIGxvZ1swXShhKSAgICAgICAgPSBOYU4NCiAgICogbG9nWzFdKGEpICAgICAgICA9IE5hTg0KICAgKiBsb2dbTmFOXShhKSAgICAgID0gTmFODQogICAqIGxvZ1tJbmZpbml0eV0oYSkgPSBOYU4NCiAgICogbG9nW2JdKDApICAgICAgICA9IC1JbmZpbml0eQ0KICAgKiBsb2dbYl0oLTApICAgICAgID0gLUluZmluaXR5DQogICAqIGxvZ1tiXSgtYSkgICAgICAgPSBOYU4NCiAgICogbG9nW2JdKDEpICAgICAgICA9IDANCiAgICogbG9nW2JdKEluZmluaXR5KSA9IEluZmluaXR5DQogICAqIGxvZ1tiXShOYU4pICAgICAgPSBOYU4NCiAgICoNCiAgICogW2Jhc2VdIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBiYXNlIG9mIHRoZSBsb2dhcml0aG0uDQogICAqDQogICAqLw0KICBQLmxvZ2FyaXRobSA9IFAubG9nID0gZnVuY3Rpb24gKGJhc2UpIHsNCiAgICB2YXIgaXNCYXNlMTAsIGQsIGRlbm9taW5hdG9yLCBrLCBpbmYsIG51bSwgc2QsIHIsDQogICAgICBhcmcgPSB0aGlzLA0KICAgICAgQ3RvciA9IGFyZy5jb25zdHJ1Y3RvciwNCiAgICAgIHByID0gQ3Rvci5wcmVjaXNpb24sDQogICAgICBybSA9IEN0b3Iucm91bmRpbmcsDQogICAgICBndWFyZCA9IDU7DQoNCiAgICAvLyBEZWZhdWx0IGJhc2UgaXMgMTAuDQogICAgaWYgKGJhc2UgPT0gbnVsbCkgew0KICAgICAgYmFzZSA9IG5ldyBDdG9yKDEwKTsNCiAgICAgIGlzQmFzZTEwID0gdHJ1ZTsNCiAgICB9IGVsc2Ugew0KICAgICAgYmFzZSA9IG5ldyBDdG9yKGJhc2UpOw0KICAgICAgZCA9IGJhc2UuZDsNCg0KICAgICAgLy8gUmV0dXJuIE5hTiBpZiBiYXNlIGlzIG5lZ2F0aXZlLCBvciBub24tZmluaXRlLCBvciBpcyAwIG9yIDEuDQogICAgICBpZiAoYmFzZS5zIDwgMCB8fCAhZCB8fCAhZFswXSB8fCBiYXNlLmVxKDEpKSByZXR1cm4gbmV3IEN0b3IoTmFOKTsNCg0KICAgICAgaXNCYXNlMTAgPSBiYXNlLmVxKDEwKTsNCiAgICB9DQoNCiAgICBkID0gYXJnLmQ7DQoNCiAgICAvLyBJcyBhcmcgbmVnYXRpdmUsIG5vbi1maW5pdGUsIDAgb3IgMT8NCiAgICBpZiAoYXJnLnMgPCAwIHx8ICFkIHx8ICFkWzBdIHx8IGFyZy5lcSgxKSkgew0KICAgICAgcmV0dXJuIG5ldyBDdG9yKGQgJiYgIWRbMF0gPyAtMSAvIDAgOiBhcmcucyAhPSAxID8gTmFOIDogZCA/IDAgOiAxIC8gMCk7DQogICAgfQ0KDQogICAgLy8gVGhlIHJlc3VsdCB3aWxsIGhhdmUgYSBub24tdGVybWluYXRpbmcgZGVjaW1hbCBleHBhbnNpb24gaWYgYmFzZSBpcyAxMCBhbmQgYXJnIGlzIG5vdCBhbg0KICAgIC8vIGludGVnZXIgcG93ZXIgb2YgMTAuDQogICAgaWYgKGlzQmFzZTEwKSB7DQogICAgICBpZiAoZC5sZW5ndGggPiAxKSB7DQogICAgICAgIGluZiA9IHRydWU7DQogICAgICB9IGVsc2Ugew0KICAgICAgICBmb3IgKGsgPSBkWzBdOyBrICUgMTAgPT09IDA7KSBrIC89IDEwOw0KICAgICAgICBpbmYgPSBrICE9PSAxOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIGV4dGVybmFsID0gZmFsc2U7DQogICAgc2QgPSBwciArIGd1YXJkOw0KICAgIG51bSA9IG5hdHVyYWxMb2dhcml0aG0oYXJnLCBzZCk7DQogICAgZGVub21pbmF0b3IgPSBpc0Jhc2UxMCA/IGdldExuMTAoQ3Rvciwgc2QgKyAxMCkgOiBuYXR1cmFsTG9nYXJpdGhtKGJhc2UsIHNkKTsNCg0KICAgIC8vIFRoZSByZXN1bHQgd2lsbCBoYXZlIDUgcm91bmRpbmcgZGlnaXRzLg0KICAgIHIgPSBkaXZpZGUobnVtLCBkZW5vbWluYXRvciwgc2QsIDEpOw0KDQogICAgLy8gSWYgYXQgYSByb3VuZGluZyBib3VuZGFyeSwgaS5lLiB0aGUgcmVzdWx0J3Mgcm91bmRpbmcgZGlnaXRzIGFyZSBbNDldOTk5OSBvciBbNTBdMDAwMCwNCiAgICAvLyBjYWxjdWxhdGUgMTAgZnVydGhlciBkaWdpdHMuDQogICAgLy8NCiAgICAvLyBJZiB0aGUgcmVzdWx0IGlzIGtub3duIHRvIGhhdmUgYW4gaW5maW5pdGUgZGVjaW1hbCBleHBhbnNpb24sIHJlcGVhdCB0aGlzIHVudGlsIGl0IGlzIGNsZWFyDQogICAgLy8gdGhhdCB0aGUgcmVzdWx0IGlzIGFib3ZlIG9yIGJlbG93IHRoZSBib3VuZGFyeS4gT3RoZXJ3aXNlLCBpZiBhZnRlciBjYWxjdWxhdGluZyB0aGUgMTANCiAgICAvLyBmdXJ0aGVyIGRpZ2l0cywgdGhlIGxhc3QgMTQgYXJlIG5pbmVzLCByb3VuZCB1cCBhbmQgYXNzdW1lIHRoZSByZXN1bHQgaXMgZXhhY3QuDQogICAgLy8gQWxzbyBhc3N1bWUgdGhlIHJlc3VsdCBpcyBleGFjdCBpZiB0aGUgbGFzdCAxNCBhcmUgemVyby4NCiAgICAvLw0KICAgIC8vIEV4YW1wbGUgb2YgYSByZXN1bHQgdGhhdCB3aWxsIGJlIGluY29ycmVjdGx5IHJvdW5kZWQ6DQogICAgLy8gbG9nWzEwNDg1NzZdKDQ1MDM1OTk2MjczNzA1MDIpID0gMi42MDAwMDAwMDAwMDAwMDAwOTYxMDI3OTUxMTQ0NDc0Ni4uLg0KICAgIC8vIFRoZSBhYm92ZSByZXN1bHQgY29ycmVjdGx5IHJvdW5kZWQgdXNpbmcgUk9VTkRfQ0VJTCB0byAxIGRlY2ltYWwgcGxhY2Ugc2hvdWxkIGJlIDIuNywgYnV0IGl0DQogICAgLy8gd2lsbCBiZSBnaXZlbiBhcyAyLjYgYXMgdGhlcmUgYXJlIDE1IHplcm9zIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSByZXF1ZXN0ZWQgZGVjaW1hbCBwbGFjZSwgc28NCiAgICAvLyB0aGUgZXhhY3QgcmVzdWx0IHdvdWxkIGJlIGFzc3VtZWQgdG8gYmUgMi42LCB3aGljaCByb3VuZGVkIHVzaW5nIFJPVU5EX0NFSUwgdG8gMSBkZWNpbWFsDQogICAgLy8gcGxhY2UgaXMgc3RpbGwgMi42Lg0KICAgIGlmIChjaGVja1JvdW5kaW5nRGlnaXRzKHIuZCwgayA9IHByLCBybSkpIHsNCg0KICAgICAgZG8gew0KICAgICAgICBzZCArPSAxMDsNCiAgICAgICAgbnVtID0gbmF0dXJhbExvZ2FyaXRobShhcmcsIHNkKTsNCiAgICAgICAgZGVub21pbmF0b3IgPSBpc0Jhc2UxMCA/IGdldExuMTAoQ3Rvciwgc2QgKyAxMCkgOiBuYXR1cmFsTG9nYXJpdGhtKGJhc2UsIHNkKTsNCiAgICAgICAgciA9IGRpdmlkZShudW0sIGRlbm9taW5hdG9yLCBzZCwgMSk7DQoNCiAgICAgICAgaWYgKCFpbmYpIHsNCg0KICAgICAgICAgIC8vIENoZWNrIGZvciAxNCBuaW5lcyBmcm9tIHRoZSAybmQgcm91bmRpbmcgZGlnaXQsIGFzIHRoZSBmaXJzdCBtYXkgYmUgNC4NCiAgICAgICAgICBpZiAoK2RpZ2l0c1RvU3RyaW5nKHIuZCkuc2xpY2UoayArIDEsIGsgKyAxNSkgKyAxID09IDFlMTQpIHsNCiAgICAgICAgICAgIHIgPSBmaW5hbGlzZShyLCBwciArIDEsIDApOw0KICAgICAgICAgIH0NCg0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgICB9IHdoaWxlIChjaGVja1JvdW5kaW5nRGlnaXRzKHIuZCwgayArPSAxMCwgcm0pKTsNCiAgICB9DQoNCiAgICBleHRlcm5hbCA9IHRydWU7DQoNCiAgICByZXR1cm4gZmluYWxpc2UociwgcHIsIHJtKTsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBtYXhpbXVtIG9mIHRoZSBhcmd1bWVudHMgYW5kIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuDQogICAqDQogICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfQ0KICAgKg0KICBQLm1heCA9IGZ1bmN0aW9uICgpIHsNCiAgICBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKGFyZ3VtZW50cywgdGhpcyk7DQogICAgcmV0dXJuIG1heE9yTWluKHRoaXMuY29uc3RydWN0b3IsIGFyZ3VtZW50cywgJ2x0Jyk7DQogIH07DQogICAqLw0KDQoNCiAgLyoNCiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG1pbmltdW0gb2YgdGhlIGFyZ3VtZW50cyBhbmQgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC4NCiAgICoNCiAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9DQogICAqDQogIFAubWluID0gZnVuY3Rpb24gKCkgew0KICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwoYXJndW1lbnRzLCB0aGlzKTsNCiAgICByZXR1cm4gbWF4T3JNaW4odGhpcy5jb25zdHJ1Y3RvciwgYXJndW1lbnRzLCAnZ3QnKTsNCiAgfTsNCiAgICovDQoNCg0KICAvKg0KICAgKiAgbiAtIDAgPSBuDQogICAqICBuIC0gTiA9IE4NCiAgICogIG4gLSBJID0gLUkNCiAgICogIDAgLSBuID0gLW4NCiAgICogIDAgLSAwID0gMA0KICAgKiAgMCAtIE4gPSBODQogICAqICAwIC0gSSA9IC1JDQogICAqICBOIC0gbiA9IE4NCiAgICogIE4gLSAwID0gTg0KICAgKiAgTiAtIE4gPSBODQogICAqICBOIC0gSSA9IE4NCiAgICogIEkgLSBuID0gSQ0KICAgKiAgSSAtIDAgPSBJDQogICAqICBJIC0gTiA9IE4NCiAgICogIEkgLSBJID0gTg0KICAgKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIG1pbnVzIGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYA0KICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLg0KICAgKg0KICAgKi8NCiAgUC5taW51cyA9IFAuc3ViID0gZnVuY3Rpb24gKHkpIHsNCiAgICB2YXIgZCwgZSwgaSwgaiwgaywgbGVuLCBwciwgcm0sIHhkLCB4ZSwgeExUeSwgeWQsDQogICAgICB4ID0gdGhpcywNCiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yOw0KDQogICAgeSA9IG5ldyBDdG9yKHkpOw0KDQogICAgLy8gSWYgZWl0aGVyIGlzIG5vdCBmaW5pdGUuLi4NCiAgICBpZiAoIXguZCB8fCAheS5kKSB7DQoNCiAgICAgIC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIGlzIE5hTi4NCiAgICAgIGlmICgheC5zIHx8ICF5LnMpIHkgPSBuZXcgQ3RvcihOYU4pOw0KDQogICAgICAvLyBSZXR1cm4geSBuZWdhdGVkIGlmIHggaXMgZmluaXRlIGFuZCB5IGlzIMKxSW5maW5pdHkuDQogICAgICBlbHNlIGlmICh4LmQpIHkucyA9IC15LnM7DQoNCiAgICAgIC8vIFJldHVybiB4IGlmIHkgaXMgZmluaXRlIGFuZCB4IGlzIMKxSW5maW5pdHkuDQogICAgICAvLyBSZXR1cm4geCBpZiBib3RoIGFyZSDCsUluZmluaXR5IHdpdGggZGlmZmVyZW50IHNpZ25zLg0KICAgICAgLy8gUmV0dXJuIE5hTiBpZiBib3RoIGFyZSDCsUluZmluaXR5IHdpdGggdGhlIHNhbWUgc2lnbi4NCiAgICAgIGVsc2UgeSA9IG5ldyBDdG9yKHkuZCB8fCB4LnMgIT09IHkucyA/IHggOiBOYU4pOw0KDQogICAgICByZXR1cm4geTsNCiAgICB9DQoNCiAgICAvLyBJZiBzaWducyBkaWZmZXIuLi4NCiAgICBpZiAoeC5zICE9IHkucykgew0KICAgICAgeS5zID0gLXkuczsNCiAgICAgIHJldHVybiB4LnBsdXMoeSk7DQogICAgfQ0KDQogICAgeGQgPSB4LmQ7DQogICAgeWQgPSB5LmQ7DQogICAgcHIgPSBDdG9yLnByZWNpc2lvbjsNCiAgICBybSA9IEN0b3Iucm91bmRpbmc7DQoNCiAgICAvLyBJZiBlaXRoZXIgaXMgemVyby4uLg0KICAgIGlmICgheGRbMF0gfHwgIXlkWzBdKSB7DQoNCiAgICAgIC8vIFJldHVybiB5IG5lZ2F0ZWQgaWYgeCBpcyB6ZXJvIGFuZCB5IGlzIG5vbi16ZXJvLg0KICAgICAgaWYgKHlkWzBdKSB5LnMgPSAteS5zOw0KDQogICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIHplcm8gYW5kIHggaXMgbm9uLXplcm8uDQogICAgICBlbHNlIGlmICh4ZFswXSkgeSA9IG5ldyBDdG9yKHgpOw0KDQogICAgICAvLyBSZXR1cm4gemVybyBpZiBib3RoIGFyZSB6ZXJvLg0KICAgICAgLy8gRnJvbSBJRUVFIDc1NCAoMjAwOCkgNi4zOiAwIC0gMCA9IC0wIC0gLTAgPSAtMCB3aGVuIHJvdW5kaW5nIHRvIC1JbmZpbml0eS4NCiAgICAgIGVsc2UgcmV0dXJuIG5ldyBDdG9yKHJtID09PSAzID8gLTAgOiAwKTsNCg0KICAgICAgcmV0dXJuIGV4dGVybmFsID8gZmluYWxpc2UoeSwgcHIsIHJtKSA6IHk7DQogICAgfQ0KDQogICAgLy8geCBhbmQgeSBhcmUgZmluaXRlLCBub24temVybyBudW1iZXJzIHdpdGggdGhlIHNhbWUgc2lnbi4NCg0KICAgIC8vIENhbGN1bGF0ZSBiYXNlIDFlNyBleHBvbmVudHMuDQogICAgZSA9IG1hdGhmbG9vcih5LmUgLyBMT0dfQkFTRSk7DQogICAgeGUgPSBtYXRoZmxvb3IoeC5lIC8gTE9HX0JBU0UpOw0KDQogICAgeGQgPSB4ZC5zbGljZSgpOw0KICAgIGsgPSB4ZSAtIGU7DQoNCiAgICAvLyBJZiBiYXNlIDFlNyBleHBvbmVudHMgZGlmZmVyLi4uDQogICAgaWYgKGspIHsNCiAgICAgIHhMVHkgPSBrIDwgMDsNCg0KICAgICAgaWYgKHhMVHkpIHsNCiAgICAgICAgZCA9IHhkOw0KICAgICAgICBrID0gLWs7DQogICAgICAgIGxlbiA9IHlkLmxlbmd0aDsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIGQgPSB5ZDsNCiAgICAgICAgZSA9IHhlOw0KICAgICAgICBsZW4gPSB4ZC5sZW5ndGg7DQogICAgICB9DQoNCiAgICAgIC8vIE51bWJlcnMgd2l0aCBtYXNzaXZlbHkgZGlmZmVyZW50IGV4cG9uZW50cyB3b3VsZCByZXN1bHQgaW4gYSB2ZXJ5IGhpZ2ggbnVtYmVyIG9mDQogICAgICAvLyB6ZXJvcyBuZWVkaW5nIHRvIGJlIHByZXBlbmRlZCwgYnV0IHRoaXMgY2FuIGJlIGF2b2lkZWQgd2hpbGUgc3RpbGwgZW5zdXJpbmcgY29ycmVjdA0KICAgICAgLy8gcm91bmRpbmcgYnkgbGltaXRpbmcgdGhlIG51bWJlciBvZiB6ZXJvcyB0byBgTWF0aC5jZWlsKHByIC8gTE9HX0JBU0UpICsgMmAuDQogICAgICBpID0gTWF0aC5tYXgoTWF0aC5jZWlsKHByIC8gTE9HX0JBU0UpLCBsZW4pICsgMjsNCg0KICAgICAgaWYgKGsgPiBpKSB7DQogICAgICAgIGsgPSBpOw0KICAgICAgICBkLmxlbmd0aCA9IDE7DQogICAgICB9DQoNCiAgICAgIC8vIFByZXBlbmQgemVyb3MgdG8gZXF1YWxpc2UgZXhwb25lbnRzLg0KICAgICAgZC5yZXZlcnNlKCk7DQogICAgICBmb3IgKGkgPSBrOyBpLS07KSBkLnB1c2goMCk7DQogICAgICBkLnJldmVyc2UoKTsNCg0KICAgIC8vIEJhc2UgMWU3IGV4cG9uZW50cyBlcXVhbC4NCiAgICB9IGVsc2Ugew0KDQogICAgICAvLyBDaGVjayBkaWdpdHMgdG8gZGV0ZXJtaW5lIHdoaWNoIGlzIHRoZSBiaWdnZXIgbnVtYmVyLg0KDQogICAgICBpID0geGQubGVuZ3RoOw0KICAgICAgbGVuID0geWQubGVuZ3RoOw0KICAgICAgeExUeSA9IGkgPCBsZW47DQogICAgICBpZiAoeExUeSkgbGVuID0gaTsNCg0KICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7DQogICAgICAgIGlmICh4ZFtpXSAhPSB5ZFtpXSkgew0KICAgICAgICAgIHhMVHkgPSB4ZFtpXSA8IHlkW2ldOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgICB9DQoNCiAgICAgIGsgPSAwOw0KICAgIH0NCg0KICAgIGlmICh4TFR5KSB7DQogICAgICBkID0geGQ7DQogICAgICB4ZCA9IHlkOw0KICAgICAgeWQgPSBkOw0KICAgICAgeS5zID0gLXkuczsNCiAgICB9DQoNCiAgICBsZW4gPSB4ZC5sZW5ndGg7DQoNCiAgICAvLyBBcHBlbmQgemVyb3MgdG8gYHhkYCBpZiBzaG9ydGVyLg0KICAgIC8vIERvbid0IGFkZCB6ZXJvcyB0byBgeWRgIGlmIHNob3J0ZXIgYXMgc3VidHJhY3Rpb24gb25seSBuZWVkcyB0byBzdGFydCBhdCBgeWRgIGxlbmd0aC4NCiAgICBmb3IgKGkgPSB5ZC5sZW5ndGggLSBsZW47IGkgPiAwOyAtLWkpIHhkW2xlbisrXSA9IDA7DQoNCiAgICAvLyBTdWJ0cmFjdCB5ZCBmcm9tIHhkLg0KICAgIGZvciAoaSA9IHlkLmxlbmd0aDsgaSA+IGs7KSB7DQoNCiAgICAgIGlmICh4ZFstLWldIDwgeWRbaV0pIHsNCiAgICAgICAgZm9yIChqID0gaTsgaiAmJiB4ZFstLWpdID09PSAwOykgeGRbal0gPSBCQVNFIC0gMTsNCiAgICAgICAgLS14ZFtqXTsNCiAgICAgICAgeGRbaV0gKz0gQkFTRTsNCiAgICAgIH0NCg0KICAgICAgeGRbaV0gLT0geWRbaV07DQogICAgfQ0KDQogICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLg0KICAgIGZvciAoOyB4ZFstLWxlbl0gPT09IDA7KSB4ZC5wb3AoKTsNCg0KICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuDQogICAgZm9yICg7IHhkWzBdID09PSAwOyB4ZC5zaGlmdCgpKSAtLWU7DQoNCiAgICAvLyBaZXJvPw0KICAgIGlmICgheGRbMF0pIHJldHVybiBuZXcgQ3RvcihybSA9PT0gMyA/IC0wIDogMCk7DQoNCiAgICB5LmQgPSB4ZDsNCiAgICB5LmUgPSBnZXRCYXNlMTBFeHBvbmVudCh4ZCwgZSk7DQoNCiAgICByZXR1cm4gZXh0ZXJuYWwgPyBmaW5hbGlzZSh5LCBwciwgcm0pIDogeTsNCiAgfTsNCg0KDQogIC8qDQogICAqICAgbiAlIDAgPSAgTg0KICAgKiAgIG4gJSBOID0gIE4NCiAgICogICBuICUgSSA9ICBuDQogICAqICAgMCAlIG4gPSAgMA0KICAgKiAgLTAgJSBuID0gLTANCiAgICogICAwICUgMCA9ICBODQogICAqICAgMCAlIE4gPSAgTg0KICAgKiAgIDAgJSBJID0gIDANCiAgICogICBOICUgbiA9ICBODQogICAqICAgTiAlIDAgPSAgTg0KICAgKiAgIE4gJSBOID0gIE4NCiAgICogICBOICUgSSA9ICBODQogICAqICAgSSAlIG4gPSAgTg0KICAgKiAgIEkgJSAwID0gIE4NCiAgICogICBJICUgTiA9ICBODQogICAqICAgSSAlIEkgPSAgTg0KICAgKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIG1vZHVsbyBgeWAsIHJvdW5kZWQgdG8NCiAgICogYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC4NCiAgICoNCiAgICogVGhlIHJlc3VsdCBkZXBlbmRzIG9uIHRoZSBtb2R1bG8gbW9kZS4NCiAgICoNCiAgICovDQogIFAubW9kdWxvID0gUC5tb2QgPSBmdW5jdGlvbiAoeSkgew0KICAgIHZhciBxLA0KICAgICAgeCA9IHRoaXMsDQogICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjsNCg0KICAgIHkgPSBuZXcgQ3Rvcih5KTsNCg0KICAgIC8vIFJldHVybiBOYU4gaWYgeCBpcyDCsUluZmluaXR5IG9yIE5hTiwgb3IgeSBpcyBOYU4gb3IgwrEwLg0KICAgIGlmICgheC5kIHx8ICF5LnMgfHwgeS5kICYmICF5LmRbMF0pIHJldHVybiBuZXcgQ3RvcihOYU4pOw0KDQogICAgLy8gUmV0dXJuIHggaWYgeSBpcyDCsUluZmluaXR5IG9yIHggaXMgwrEwLg0KICAgIGlmICgheS5kIHx8IHguZCAmJiAheC5kWzBdKSB7DQogICAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoeCksIEN0b3IucHJlY2lzaW9uLCBDdG9yLnJvdW5kaW5nKTsNCiAgICB9DQoNCiAgICAvLyBQcmV2ZW50IHJvdW5kaW5nIG9mIGludGVybWVkaWF0ZSBjYWxjdWxhdGlvbnMuDQogICAgZXh0ZXJuYWwgPSBmYWxzZTsNCg0KICAgIGlmIChDdG9yLm1vZHVsbyA9PSA5KSB7DQoNCiAgICAgIC8vIEV1Y2xpZGlhbiBkaXZpc2lvbjogcSA9IHNpZ24oeSkgKiBmbG9vcih4IC8gYWJzKHkpKQ0KICAgICAgLy8gcmVzdWx0ID0geCAtIHEgKiB5ICAgIHdoZXJlICAwIDw9IHJlc3VsdCA8IGFicyh5KQ0KICAgICAgcSA9IGRpdmlkZSh4LCB5LmFicygpLCAwLCAzLCAxKTsNCiAgICAgIHEucyAqPSB5LnM7DQogICAgfSBlbHNlIHsNCiAgICAgIHEgPSBkaXZpZGUoeCwgeSwgMCwgQ3Rvci5tb2R1bG8sIDEpOw0KICAgIH0NCg0KICAgIHEgPSBxLnRpbWVzKHkpOw0KDQogICAgZXh0ZXJuYWwgPSB0cnVlOw0KDQogICAgcmV0dXJuIHgubWludXMocSk7DQogIH07DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbmF0dXJhbCBleHBvbmVudGlhbCBvZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLA0KICAgKiBpLmUuIHRoZSBiYXNlIGUgcmFpc2VkIHRvIHRoZSBwb3dlciB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gDQogICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuDQogICAqDQogICAqLw0KICBQLm5hdHVyYWxFeHBvbmVudGlhbCA9IFAuZXhwID0gZnVuY3Rpb24gKCkgew0KICAgIHJldHVybiBuYXR1cmFsRXhwb25lbnRpYWwodGhpcyk7DQogIH07DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCwNCiAgICogcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLg0KICAgKg0KICAgKi8NCiAgUC5uYXR1cmFsTG9nYXJpdGhtID0gUC5sbiA9IGZ1bmN0aW9uICgpIHsNCiAgICByZXR1cm4gbmF0dXJhbExvZ2FyaXRobSh0aGlzKTsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgbmVnYXRlZCwgaS5lLiBhcyBpZiBtdWx0aXBsaWVkIGJ5DQogICAqIC0xLg0KICAgKg0KICAgKi8NCiAgUC5uZWdhdGVkID0gUC5uZWcgPSBmdW5jdGlvbiAoKSB7DQogICAgdmFyIHggPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTsNCiAgICB4LnMgPSAteC5zOw0KICAgIHJldHVybiBmaW5hbGlzZSh4KTsNCiAgfTsNCg0KDQogIC8qDQogICAqICBuICsgMCA9IG4NCiAgICogIG4gKyBOID0gTg0KICAgKiAgbiArIEkgPSBJDQogICAqICAwICsgbiA9IG4NCiAgICogIDAgKyAwID0gMA0KICAgKiAgMCArIE4gPSBODQogICAqICAwICsgSSA9IEkNCiAgICogIE4gKyBuID0gTg0KICAgKiAgTiArIDAgPSBODQogICAqICBOICsgTiA9IE4NCiAgICogIE4gKyBJID0gTg0KICAgKiAgSSArIG4gPSBJDQogICAqICBJICsgMCA9IEkNCiAgICogIEkgKyBOID0gTg0KICAgKiAgSSArIEkgPSBJDQogICAqDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcGx1cyBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmANCiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC4NCiAgICoNCiAgICovDQogIFAucGx1cyA9IFAuYWRkID0gZnVuY3Rpb24gKHkpIHsNCiAgICB2YXIgY2FycnksIGQsIGUsIGksIGssIGxlbiwgcHIsIHJtLCB4ZCwgeWQsDQogICAgICB4ID0gdGhpcywNCiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yOw0KDQogICAgeSA9IG5ldyBDdG9yKHkpOw0KDQogICAgLy8gSWYgZWl0aGVyIGlzIG5vdCBmaW5pdGUuLi4NCiAgICBpZiAoIXguZCB8fCAheS5kKSB7DQoNCiAgICAgIC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIGlzIE5hTi4NCiAgICAgIGlmICgheC5zIHx8ICF5LnMpIHkgPSBuZXcgQ3RvcihOYU4pOw0KDQogICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIGZpbml0ZSBhbmQgeCBpcyDCsUluZmluaXR5Lg0KICAgICAgLy8gUmV0dXJuIHggaWYgYm90aCBhcmUgwrFJbmZpbml0eSB3aXRoIHRoZSBzYW1lIHNpZ24uDQogICAgICAvLyBSZXR1cm4gTmFOIGlmIGJvdGggYXJlIMKxSW5maW5pdHkgd2l0aCBkaWZmZXJlbnQgc2lnbnMuDQogICAgICAvLyBSZXR1cm4geSBpZiB4IGlzIGZpbml0ZSBhbmQgeSBpcyDCsUluZmluaXR5Lg0KICAgICAgZWxzZSBpZiAoIXguZCkgeSA9IG5ldyBDdG9yKHkuZCB8fCB4LnMgPT09IHkucyA/IHggOiBOYU4pOw0KDQogICAgICByZXR1cm4geTsNCiAgICB9DQoNCiAgICAgLy8gSWYgc2lnbnMgZGlmZmVyLi4uDQogICAgaWYgKHgucyAhPSB5LnMpIHsNCiAgICAgIHkucyA9IC15LnM7DQogICAgICByZXR1cm4geC5taW51cyh5KTsNCiAgICB9DQoNCiAgICB4ZCA9IHguZDsNCiAgICB5ZCA9IHkuZDsNCiAgICBwciA9IEN0b3IucHJlY2lzaW9uOw0KICAgIHJtID0gQ3Rvci5yb3VuZGluZzsNCg0KICAgIC8vIElmIGVpdGhlciBpcyB6ZXJvLi4uDQogICAgaWYgKCF4ZFswXSB8fCAheWRbMF0pIHsNCg0KICAgICAgLy8gUmV0dXJuIHggaWYgeSBpcyB6ZXJvLg0KICAgICAgLy8gUmV0dXJuIHkgaWYgeSBpcyBub24temVyby4NCiAgICAgIGlmICgheWRbMF0pIHkgPSBuZXcgQ3Rvcih4KTsNCg0KICAgICAgcmV0dXJuIGV4dGVybmFsID8gZmluYWxpc2UoeSwgcHIsIHJtKSA6IHk7DQogICAgfQ0KDQogICAgLy8geCBhbmQgeSBhcmUgZmluaXRlLCBub24temVybyBudW1iZXJzIHdpdGggdGhlIHNhbWUgc2lnbi4NCg0KICAgIC8vIENhbGN1bGF0ZSBiYXNlIDFlNyBleHBvbmVudHMuDQogICAgayA9IG1hdGhmbG9vcih4LmUgLyBMT0dfQkFTRSk7DQogICAgZSA9IG1hdGhmbG9vcih5LmUgLyBMT0dfQkFTRSk7DQoNCiAgICB4ZCA9IHhkLnNsaWNlKCk7DQogICAgaSA9IGsgLSBlOw0KDQogICAgLy8gSWYgYmFzZSAxZTcgZXhwb25lbnRzIGRpZmZlci4uLg0KICAgIGlmIChpKSB7DQoNCiAgICAgIGlmIChpIDwgMCkgew0KICAgICAgICBkID0geGQ7DQogICAgICAgIGkgPSAtaTsNCiAgICAgICAgbGVuID0geWQubGVuZ3RoOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgZCA9IHlkOw0KICAgICAgICBlID0gazsNCiAgICAgICAgbGVuID0geGQubGVuZ3RoOw0KICAgICAgfQ0KDQogICAgICAvLyBMaW1pdCBudW1iZXIgb2YgemVyb3MgcHJlcGVuZGVkIHRvIG1heChjZWlsKHByIC8gTE9HX0JBU0UpLCBsZW4pICsgMS4NCiAgICAgIGsgPSBNYXRoLmNlaWwocHIgLyBMT0dfQkFTRSk7DQogICAgICBsZW4gPSBrID4gbGVuID8gayArIDEgOiBsZW4gKyAxOw0KDQogICAgICBpZiAoaSA+IGxlbikgew0KICAgICAgICBpID0gbGVuOw0KICAgICAgICBkLmxlbmd0aCA9IDE7DQogICAgICB9DQoNCiAgICAgIC8vIFByZXBlbmQgemVyb3MgdG8gZXF1YWxpc2UgZXhwb25lbnRzLiBOb3RlOiBGYXN0ZXIgdG8gdXNlIHJldmVyc2UgdGhlbiBkbyB1bnNoaWZ0cy4NCiAgICAgIGQucmV2ZXJzZSgpOw0KICAgICAgZm9yICg7IGktLTspIGQucHVzaCgwKTsNCiAgICAgIGQucmV2ZXJzZSgpOw0KICAgIH0NCg0KICAgIGxlbiA9IHhkLmxlbmd0aDsNCiAgICBpID0geWQubGVuZ3RoOw0KDQogICAgLy8gSWYgeWQgaXMgbG9uZ2VyIHRoYW4geGQsIHN3YXAgeGQgYW5kIHlkIHNvIHhkIHBvaW50cyB0byB0aGUgbG9uZ2VyIGFycmF5Lg0KICAgIGlmIChsZW4gLSBpIDwgMCkgew0KICAgICAgaSA9IGxlbjsNCiAgICAgIGQgPSB5ZDsNCiAgICAgIHlkID0geGQ7DQogICAgICB4ZCA9IGQ7DQogICAgfQ0KDQogICAgLy8gT25seSBzdGFydCBhZGRpbmcgYXQgeWQubGVuZ3RoIC0gMSBhcyB0aGUgZnVydGhlciBkaWdpdHMgb2YgeGQgY2FuIGJlIGxlZnQgYXMgdGhleSBhcmUuDQogICAgZm9yIChjYXJyeSA9IDA7IGk7KSB7DQogICAgICBjYXJyeSA9ICh4ZFstLWldID0geGRbaV0gKyB5ZFtpXSArIGNhcnJ5KSAvIEJBU0UgfCAwOw0KICAgICAgeGRbaV0gJT0gQkFTRTsNCiAgICB9DQoNCiAgICBpZiAoY2FycnkpIHsNCiAgICAgIHhkLnVuc2hpZnQoY2FycnkpOw0KICAgICAgKytlOw0KICAgIH0NCg0KICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy4NCiAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGZvciB6ZXJvLCBhcyAreCArICt5ICE9IDAgJiYgLXggKyAteSAhPSAwDQogICAgZm9yIChsZW4gPSB4ZC5sZW5ndGg7IHhkWy0tbGVuXSA9PSAwOykgeGQucG9wKCk7DQoNCiAgICB5LmQgPSB4ZDsNCiAgICB5LmUgPSBnZXRCYXNlMTBFeHBvbmVudCh4ZCwgZSk7DQoNCiAgICByZXR1cm4gZXh0ZXJuYWwgPyBmaW5hbGlzZSh5LCBwciwgcm0pIDogeTsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBvZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLg0KICAgKg0KICAgKiBbel0ge2Jvb2xlYW58bnVtYmVyfSBXaGV0aGVyIHRvIGNvdW50IGludGVnZXItcGFydCB0cmFpbGluZyB6ZXJvczogdHJ1ZSwgZmFsc2UsIDEgb3IgMC4NCiAgICoNCiAgICovDQogIFAucHJlY2lzaW9uID0gUC5zZCA9IGZ1bmN0aW9uICh6KSB7DQogICAgdmFyIGssDQogICAgICB4ID0gdGhpczsNCg0KICAgIGlmICh6ICE9PSB2b2lkIDAgJiYgeiAhPT0gISF6ICYmIHogIT09IDEgJiYgeiAhPT0gMCkgdGhyb3cgRXJyb3IoaW52YWxpZEFyZ3VtZW50ICsgeik7DQoNCiAgICBpZiAoeC5kKSB7DQogICAgICBrID0gZ2V0UHJlY2lzaW9uKHguZCk7DQogICAgICBpZiAoeiAmJiB4LmUgKyAxID4gaykgayA9IHguZSArIDE7DQogICAgfSBlbHNlIHsNCiAgICAgIGsgPSBOYU47DQogICAgfQ0KDQogICAgcmV0dXJuIGs7DQogIH07DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIHJvdW5kZWQgdG8gYSB3aG9sZSBudW1iZXIgdXNpbmcNCiAgICogcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLg0KICAgKg0KICAgKi8NCiAgUC5yb3VuZCA9IGZ1bmN0aW9uICgpIHsNCiAgICB2YXIgeCA9IHRoaXMsDQogICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjsNCg0KICAgIHJldHVybiBmaW5hbGlzZShuZXcgQ3Rvcih4KSwgeC5lICsgMSwgQ3Rvci5yb3VuZGluZyk7DQogIH07DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgc2luZSBvZiB0aGUgdmFsdWUgaW4gcmFkaWFucyBvZiB0aGlzIERlY2ltYWwuDQogICAqDQogICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldDQogICAqIFJhbmdlOiBbLTEsIDFdDQogICAqDQogICAqIHNpbih4KSA9IHggLSB4XjMvMyEgKyB4XjUvNSEgLSAuLi4NCiAgICoNCiAgICogc2luKDApICAgICAgICAgPSAwDQogICAqIHNpbigtMCkgICAgICAgID0gLTANCiAgICogc2luKEluZmluaXR5KSAgPSBOYU4NCiAgICogc2luKC1JbmZpbml0eSkgPSBOYU4NCiAgICogc2luKE5hTikgICAgICAgPSBOYU4NCiAgICoNCiAgICovDQogIFAuc2luZSA9IFAuc2luID0gZnVuY3Rpb24gKCkgew0KICAgIHZhciBwciwgcm0sDQogICAgICB4ID0gdGhpcywNCiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yOw0KDQogICAgaWYgKCF4LmlzRmluaXRlKCkpIHJldHVybiBuZXcgQ3RvcihOYU4pOw0KICAgIGlmICh4LmlzWmVybygpKSByZXR1cm4gbmV3IEN0b3IoeCk7DQoNCiAgICBwciA9IEN0b3IucHJlY2lzaW9uOw0KICAgIHJtID0gQ3Rvci5yb3VuZGluZzsNCiAgICBDdG9yLnByZWNpc2lvbiA9IHByICsgTWF0aC5tYXgoeC5lLCB4LnNkKCkpICsgTE9HX0JBU0U7DQogICAgQ3Rvci5yb3VuZGluZyA9IDE7DQoNCiAgICB4ID0gc2luZShDdG9yLCB0b0xlc3NUaGFuSGFsZlBpKEN0b3IsIHgpKTsNCg0KICAgIEN0b3IucHJlY2lzaW9uID0gcHI7DQogICAgQ3Rvci5yb3VuZGluZyA9IHJtOw0KDQogICAgcmV0dXJuIGZpbmFsaXNlKHF1YWRyYW50ID4gMiA/IHgubmVnKCkgOiB4LCBwciwgcm0sIHRydWUpOw0KICB9Ow0KDQoNCiAgLyoNCiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHNxdWFyZSByb290IG9mIHRoaXMgRGVjaW1hbCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYA0KICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLg0KICAgKg0KICAgKiAgc3FydCgtbikgPSAgTg0KICAgKiAgc3FydChOKSAgPSAgTg0KICAgKiAgc3FydCgtSSkgPSAgTg0KICAgKiAgc3FydChJKSAgPSAgSQ0KICAgKiAgc3FydCgwKSAgPSAgMA0KICAgKiAgc3FydCgtMCkgPSAtMA0KICAgKg0KICAgKi8NCiAgUC5zcXVhcmVSb290ID0gUC5zcXJ0ID0gZnVuY3Rpb24gKCkgew0KICAgIHZhciBtLCBuLCBzZCwgciwgcmVwLCB0LA0KICAgICAgeCA9IHRoaXMsDQogICAgICBkID0geC5kLA0KICAgICAgZSA9IHguZSwNCiAgICAgIHMgPSB4LnMsDQogICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjsNCg0KICAgIC8vIE5lZ2F0aXZlL05hTi9JbmZpbml0eS96ZXJvPw0KICAgIGlmIChzICE9PSAxIHx8ICFkIHx8ICFkWzBdKSB7DQogICAgICByZXR1cm4gbmV3IEN0b3IoIXMgfHwgcyA8IDAgJiYgKCFkIHx8IGRbMF0pID8gTmFOIDogZCA/IHggOiAxIC8gMCk7DQogICAgfQ0KDQogICAgZXh0ZXJuYWwgPSBmYWxzZTsNCg0KICAgIC8vIEluaXRpYWwgZXN0aW1hdGUuDQogICAgcyA9IE1hdGguc3FydCgreCk7DQoNCiAgICAvLyBNYXRoLnNxcnQgdW5kZXJmbG93L292ZXJmbG93Pw0KICAgIC8vIFBhc3MgeCB0byBNYXRoLnNxcnQgYXMgaW50ZWdlciwgdGhlbiBhZGp1c3QgdGhlIGV4cG9uZW50IG9mIHRoZSByZXN1bHQuDQogICAgaWYgKHMgPT0gMCB8fCBzID09IDEgLyAwKSB7DQogICAgICBuID0gZGlnaXRzVG9TdHJpbmcoZCk7DQoNCiAgICAgIGlmICgobi5sZW5ndGggKyBlKSAlIDIgPT0gMCkgbiArPSAnMCc7DQogICAgICBzID0gTWF0aC5zcXJ0KG4pOw0KICAgICAgZSA9IG1hdGhmbG9vcigoZSArIDEpIC8gMikgLSAoZSA8IDAgfHwgZSAlIDIpOw0KDQogICAgICBpZiAocyA9PSAxIC8gMCkgew0KICAgICAgICBuID0gJzFlJyArIGU7DQogICAgICB9IGVsc2Ugew0KICAgICAgICBuID0gcy50b0V4cG9uZW50aWFsKCk7DQogICAgICAgIG4gPSBuLnNsaWNlKDAsIG4uaW5kZXhPZignZScpICsgMSkgKyBlOw0KICAgICAgfQ0KDQogICAgICByID0gbmV3IEN0b3Iobik7DQogICAgfSBlbHNlIHsNCiAgICAgIHIgPSBuZXcgQ3RvcihzLnRvU3RyaW5nKCkpOw0KICAgIH0NCg0KICAgIHNkID0gKGUgPSBDdG9yLnByZWNpc2lvbikgKyAzOw0KDQogICAgLy8gTmV3dG9uLVJhcGhzb24gaXRlcmF0aW9uLg0KICAgIGZvciAoOzspIHsNCiAgICAgIHQgPSByOw0KICAgICAgciA9IHQucGx1cyhkaXZpZGUoeCwgdCwgc2QgKyAyLCAxKSkudGltZXMoMC41KTsNCg0KICAgICAgLy8gVE9ETz8gUmVwbGFjZSB3aXRoIGZvci1sb29wIGFuZCBjaGVja1JvdW5kaW5nRGlnaXRzLg0KICAgICAgaWYgKGRpZ2l0c1RvU3RyaW5nKHQuZCkuc2xpY2UoMCwgc2QpID09PSAobiA9IGRpZ2l0c1RvU3RyaW5nKHIuZCkpLnNsaWNlKDAsIHNkKSkgew0KICAgICAgICBuID0gbi5zbGljZShzZCAtIDMsIHNkICsgMSk7DQoNCiAgICAgICAgLy8gVGhlIDR0aCByb3VuZGluZyBkaWdpdCBtYXkgYmUgaW4gZXJyb3IgYnkgLTEgc28gaWYgdGhlIDQgcm91bmRpbmcgZGlnaXRzIGFyZSA5OTk5IG9yDQogICAgICAgIC8vIDQ5OTksIGkuZS4gYXBwcm9hY2hpbmcgYSByb3VuZGluZyBib3VuZGFyeSwgY29udGludWUgdGhlIGl0ZXJhdGlvbi4NCiAgICAgICAgaWYgKG4gPT0gJzk5OTknIHx8ICFyZXAgJiYgbiA9PSAnNDk5OScpIHsNCg0KICAgICAgICAgIC8vIE9uIHRoZSBmaXJzdCBpdGVyYXRpb24gb25seSwgY2hlY2sgdG8gc2VlIGlmIHJvdW5kaW5nIHVwIGdpdmVzIHRoZSBleGFjdCByZXN1bHQgYXMgdGhlDQogICAgICAgICAgLy8gbmluZXMgbWF5IGluZmluaXRlbHkgcmVwZWF0Lg0KICAgICAgICAgIGlmICghcmVwKSB7DQogICAgICAgICAgICBmaW5hbGlzZSh0LCBlICsgMSwgMCk7DQoNCiAgICAgICAgICAgIGlmICh0LnRpbWVzKHQpLmVxKHgpKSB7DQogICAgICAgICAgICAgIHIgPSB0Ow0KICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQoNCiAgICAgICAgICBzZCArPSA0Ow0KICAgICAgICAgIHJlcCA9IDE7DQogICAgICAgIH0gZWxzZSB7DQoNCiAgICAgICAgICAvLyBJZiB0aGUgcm91bmRpbmcgZGlnaXRzIGFyZSBudWxsLCAwezAsNH0gb3IgNTB7MCwzfSwgY2hlY2sgZm9yIGFuIGV4YWN0IHJlc3VsdC4NCiAgICAgICAgICAvLyBJZiBub3QsIHRoZW4gdGhlcmUgYXJlIGZ1cnRoZXIgZGlnaXRzIGFuZCBtIHdpbGwgYmUgdHJ1dGh5Lg0KICAgICAgICAgIGlmICghK24gfHwgIStuLnNsaWNlKDEpICYmIG4uY2hhckF0KDApID09ICc1Jykgew0KDQogICAgICAgICAgICAvLyBUcnVuY2F0ZSB0byB0aGUgZmlyc3Qgcm91bmRpbmcgZGlnaXQuDQogICAgICAgICAgICBmaW5hbGlzZShyLCBlICsgMSwgMSk7DQogICAgICAgICAgICBtID0gIXIudGltZXMocikuZXEoeCk7DQogICAgICAgICAgfQ0KDQogICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQoNCiAgICBleHRlcm5hbCA9IHRydWU7DQoNCiAgICByZXR1cm4gZmluYWxpc2UociwgZSwgQ3Rvci5yb3VuZGluZywgbSk7DQogIH07DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdGFuZ2VudCBvZiB0aGUgdmFsdWUgaW4gcmFkaWFucyBvZiB0aGlzIERlY2ltYWwuDQogICAqDQogICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldDQogICAqIFJhbmdlOiBbLUluZmluaXR5LCBJbmZpbml0eV0NCiAgICoNCiAgICogdGFuKDApICAgICAgICAgPSAwDQogICAqIHRhbigtMCkgICAgICAgID0gLTANCiAgICogdGFuKEluZmluaXR5KSAgPSBOYU4NCiAgICogdGFuKC1JbmZpbml0eSkgPSBOYU4NCiAgICogdGFuKE5hTikgICAgICAgPSBOYU4NCiAgICoNCiAgICovDQogIFAudGFuZ2VudCA9IFAudGFuID0gZnVuY3Rpb24gKCkgew0KICAgIHZhciBwciwgcm0sDQogICAgICB4ID0gdGhpcywNCiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yOw0KDQogICAgaWYgKCF4LmlzRmluaXRlKCkpIHJldHVybiBuZXcgQ3RvcihOYU4pOw0KICAgIGlmICh4LmlzWmVybygpKSByZXR1cm4gbmV3IEN0b3IoeCk7DQoNCiAgICBwciA9IEN0b3IucHJlY2lzaW9uOw0KICAgIHJtID0gQ3Rvci5yb3VuZGluZzsNCiAgICBDdG9yLnByZWNpc2lvbiA9IHByICsgMTA7DQogICAgQ3Rvci5yb3VuZGluZyA9IDE7DQoNCiAgICB4ID0geC5zaW4oKTsNCiAgICB4LnMgPSAxOw0KICAgIHggPSBkaXZpZGUoeCwgbmV3IEN0b3IoMSkubWludXMoeC50aW1lcyh4KSkuc3FydCgpLCBwciArIDEwLCAwKTsNCg0KICAgIEN0b3IucHJlY2lzaW9uID0gcHI7DQogICAgQ3Rvci5yb3VuZGluZyA9IHJtOw0KDQogICAgcmV0dXJuIGZpbmFsaXNlKHF1YWRyYW50ID09IDIgfHwgcXVhZHJhbnQgPT0gNCA/IHgubmVnKCkgOiB4LCBwciwgcm0sIHRydWUpOw0KICB9Ow0KDQoNCiAgLyoNCiAgICogIG4gKiAwID0gMA0KICAgKiAgbiAqIE4gPSBODQogICAqICBuICogSSA9IEkNCiAgICogIDAgKiBuID0gMA0KICAgKiAgMCAqIDAgPSAwDQogICAqICAwICogTiA9IE4NCiAgICogIDAgKiBJID0gTg0KICAgKiAgTiAqIG4gPSBODQogICAqICBOICogMCA9IE4NCiAgICogIE4gKiBOID0gTg0KICAgKiAgTiAqIEkgPSBODQogICAqICBJICogbiA9IEkNCiAgICogIEkgKiAwID0gTg0KICAgKiAgSSAqIE4gPSBODQogICAqICBJICogSSA9IEkNCiAgICoNCiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhpcyBEZWNpbWFsIHRpbWVzIGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudA0KICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLg0KICAgKg0KICAgKi8NCiAgUC50aW1lcyA9IFAubXVsID0gZnVuY3Rpb24gKHkpIHsNCiAgICB2YXIgY2FycnksIGUsIGksIGssIHIsIHJMLCB0LCB4ZEwsIHlkTCwNCiAgICAgIHggPSB0aGlzLA0KICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsDQogICAgICB4ZCA9IHguZCwNCiAgICAgIHlkID0gKHkgPSBuZXcgQ3Rvcih5KSkuZDsNCg0KICAgIHkucyAqPSB4LnM7DQoNCiAgICAgLy8gSWYgZWl0aGVyIGlzIE5hTiwgwrFJbmZpbml0eSBvciDCsTAuLi4NCiAgICBpZiAoIXhkIHx8ICF4ZFswXSB8fCAheWQgfHwgIXlkWzBdKSB7DQoNCiAgICAgIHJldHVybiBuZXcgQ3RvcigheS5zIHx8IHhkICYmICF4ZFswXSAmJiAheWQgfHwgeWQgJiYgIXlkWzBdICYmICF4ZA0KDQogICAgICAgIC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIGlzIE5hTi4NCiAgICAgICAgLy8gUmV0dXJuIE5hTiBpZiB4IGlzIMKxMCBhbmQgeSBpcyDCsUluZmluaXR5LCBvciB5IGlzIMKxMCBhbmQgeCBpcyDCsUluZmluaXR5Lg0KICAgICAgICA/IE5hTg0KDQogICAgICAgIC8vIFJldHVybiDCsUluZmluaXR5IGlmIGVpdGhlciBpcyDCsUluZmluaXR5Lg0KICAgICAgICAvLyBSZXR1cm4gwrEwIGlmIGVpdGhlciBpcyDCsTAuDQogICAgICAgIDogIXhkIHx8ICF5ZCA/IHkucyAvIDAgOiB5LnMgKiAwKTsNCiAgICB9DQoNCiAgICBlID0gbWF0aGZsb29yKHguZSAvIExPR19CQVNFKSArIG1hdGhmbG9vcih5LmUgLyBMT0dfQkFTRSk7DQogICAgeGRMID0geGQubGVuZ3RoOw0KICAgIHlkTCA9IHlkLmxlbmd0aDsNCg0KICAgIC8vIEVuc3VyZSB4ZCBwb2ludHMgdG8gdGhlIGxvbmdlciBhcnJheS4NCiAgICBpZiAoeGRMIDwgeWRMKSB7DQogICAgICByID0geGQ7DQogICAgICB4ZCA9IHlkOw0KICAgICAgeWQgPSByOw0KICAgICAgckwgPSB4ZEw7DQogICAgICB4ZEwgPSB5ZEw7DQogICAgICB5ZEwgPSByTDsNCiAgICB9DQoNCiAgICAvLyBJbml0aWFsaXNlIHRoZSByZXN1bHQgYXJyYXkgd2l0aCB6ZXJvcy4NCiAgICByID0gW107DQogICAgckwgPSB4ZEwgKyB5ZEw7DQogICAgZm9yIChpID0gckw7IGktLTspIHIucHVzaCgwKTsNCg0KICAgIC8vIE11bHRpcGx5IQ0KICAgIGZvciAoaSA9IHlkTDsgLS1pID49IDA7KSB7DQogICAgICBjYXJyeSA9IDA7DQogICAgICBmb3IgKGsgPSB4ZEwgKyBpOyBrID4gaTspIHsNCiAgICAgICAgdCA9IHJba10gKyB5ZFtpXSAqIHhkW2sgLSBpIC0gMV0gKyBjYXJyeTsNCiAgICAgICAgcltrLS1dID0gdCAlIEJBU0UgfCAwOw0KICAgICAgICBjYXJyeSA9IHQgLyBCQVNFIHwgMDsNCiAgICAgIH0NCg0KICAgICAgcltrXSA9IChyW2tdICsgY2FycnkpICUgQkFTRSB8IDA7DQogICAgfQ0KDQogICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLg0KICAgIGZvciAoOyAhclstLXJMXTspIHIucG9wKCk7DQoNCiAgICBpZiAoY2FycnkpICsrZTsNCiAgICBlbHNlIHIuc2hpZnQoKTsNCg0KICAgIHkuZCA9IHI7DQogICAgeS5lID0gZ2V0QmFzZTEwRXhwb25lbnQociwgZSk7DQoNCiAgICByZXR1cm4gZXh0ZXJuYWwgPyBmaW5hbGlzZSh5LCBDdG9yLnByZWNpc2lvbiwgQ3Rvci5yb3VuZGluZykgOiB5Ow0KICB9Ow0KDQoNCiAgLyoNCiAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGluIGJhc2UgMiwgcm91bmQgdG8gYHNkYCBzaWduaWZpY2FudA0KICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm1gLg0KICAgKg0KICAgKiBJZiB0aGUgb3B0aW9uYWwgYHNkYCBhcmd1bWVudCBpcyBwcmVzZW50IHRoZW4gcmV0dXJuIGJpbmFyeSBleHBvbmVudGlhbCBub3RhdGlvbi4NCiAgICoNCiAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDEgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuDQogICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS4NCiAgICoNCiAgICovDQogIFAudG9CaW5hcnkgPSBmdW5jdGlvbiAoc2QsIHJtKSB7DQogICAgcmV0dXJuIHRvU3RyaW5nQmluYXJ5KHRoaXMsIDIsIHNkLCBybSk7DQogIH07DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIHJvdW5kZWQgdG8gYSBtYXhpbXVtIG9mIGBkcGANCiAgICogZGVjaW1hbCBwbGFjZXMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm1gIG9yIGByb3VuZGluZ2AgaWYgYHJtYCBpcyBvbWl0dGVkLg0KICAgKg0KICAgKiBJZiBgZHBgIGlzIG9taXR0ZWQsIHJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuDQogICAqDQogICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuDQogICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS4NCiAgICoNCiAgICovDQogIFAudG9EZWNpbWFsUGxhY2VzID0gUC50b0RQID0gZnVuY3Rpb24gKGRwLCBybSkgew0KICAgIHZhciB4ID0gdGhpcywNCiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yOw0KDQogICAgeCA9IG5ldyBDdG9yKHgpOw0KICAgIGlmIChkcCA9PT0gdm9pZCAwKSByZXR1cm4geDsNCg0KICAgIGNoZWNrSW50MzIoZHAsIDAsIE1BWF9ESUdJVFMpOw0KDQogICAgaWYgKHJtID09PSB2b2lkIDApIHJtID0gQ3Rvci5yb3VuZGluZzsNCiAgICBlbHNlIGNoZWNrSW50MzIocm0sIDAsIDgpOw0KDQogICAgcmV0dXJuIGZpbmFsaXNlKHgsIGRwICsgeC5lICsgMSwgcm0pOw0KICB9Ow0KDQoNCiAgLyoNCiAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGluIGV4cG9uZW50aWFsIG5vdGF0aW9uIHJvdW5kZWQgdG8NCiAgICogYGRwYCBmaXhlZCBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuDQogICAqDQogICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuDQogICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS4NCiAgICoNCiAgICovDQogIFAudG9FeHBvbmVudGlhbCA9IGZ1bmN0aW9uIChkcCwgcm0pIHsNCiAgICB2YXIgc3RyLA0KICAgICAgeCA9IHRoaXMsDQogICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjsNCg0KICAgIGlmIChkcCA9PT0gdm9pZCAwKSB7DQogICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh4LCB0cnVlKTsNCiAgICB9IGVsc2Ugew0KICAgICAgY2hlY2tJbnQzMihkcCwgMCwgTUFYX0RJR0lUUyk7DQoNCiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSBybSA9IEN0b3Iucm91bmRpbmc7DQogICAgICBlbHNlIGNoZWNrSW50MzIocm0sIDAsIDgpOw0KDQogICAgICB4ID0gZmluYWxpc2UobmV3IEN0b3IoeCksIGRwICsgMSwgcm0pOw0KICAgICAgc3RyID0gZmluaXRlVG9TdHJpbmcoeCwgdHJ1ZSwgZHAgKyAxKTsNCiAgICB9DQoNCiAgICByZXR1cm4geC5pc05lZygpICYmICF4LmlzWmVybygpID8gJy0nICsgc3RyIDogc3RyOw0KICB9Ow0KDQoNCiAgLyoNCiAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGluIG5vcm1hbCAoZml4ZWQtcG9pbnQpIG5vdGF0aW9uIHRvDQogICAqIGBkcGAgZml4ZWQgZGVjaW1hbCBwbGFjZXMgYW5kIHJvdW5kZWQgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm1gIG9yIGByb3VuZGluZ2AgaWYgYHJtYCBpcw0KICAgKiBvbWl0dGVkLg0KICAgKg0KICAgKiBBcyB3aXRoIEphdmFTY3JpcHQgbnVtYmVycywgKC0wKS50b0ZpeGVkKDApIGlzICcwJywgYnV0IGUuZy4gKC0wLjAwMDAxKS50b0ZpeGVkKDApIGlzICctMCcuDQogICAqDQogICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuDQogICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS4NCiAgICoNCiAgICogKC0wKS50b0ZpeGVkKDApIGlzICcwJywgYnV0ICgtMC4xKS50b0ZpeGVkKDApIGlzICctMCcuDQogICAqICgtMCkudG9GaXhlZCgxKSBpcyAnMC4wJywgYnV0ICgtMC4wMSkudG9GaXhlZCgxKSBpcyAnLTAuMCcuDQogICAqICgtMCkudG9GaXhlZCgzKSBpcyAnMC4wMDAnLg0KICAgKiAoLTAuNSkudG9GaXhlZCgwKSBpcyAnLTAnLg0KICAgKg0KICAgKi8NCiAgUC50b0ZpeGVkID0gZnVuY3Rpb24gKGRwLCBybSkgew0KICAgIHZhciBzdHIsIHksDQogICAgICB4ID0gdGhpcywNCiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yOw0KDQogICAgaWYgKGRwID09PSB2b2lkIDApIHsNCiAgICAgIHN0ciA9IGZpbml0ZVRvU3RyaW5nKHgpOw0KICAgIH0gZWxzZSB7DQogICAgICBjaGVja0ludDMyKGRwLCAwLCBNQVhfRElHSVRTKTsNCg0KICAgICAgaWYgKHJtID09PSB2b2lkIDApIHJtID0gQ3Rvci5yb3VuZGluZzsNCiAgICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7DQoNCiAgICAgIHkgPSBmaW5hbGlzZShuZXcgQ3Rvcih4KSwgZHAgKyB4LmUgKyAxLCBybSk7DQogICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh5LCBmYWxzZSwgZHAgKyB5LmUgKyAxKTsNCiAgICB9DQoNCiAgICAvLyBUbyBkZXRlcm1pbmUgd2hldGhlciB0byBhZGQgdGhlIG1pbnVzIHNpZ24gbG9vayBhdCB0aGUgdmFsdWUgYmVmb3JlIGl0IHdhcyByb3VuZGVkLA0KICAgIC8vIGkuZS4gbG9vayBhdCBgeGAgcmF0aGVyIHRoYW4gYHlgLg0KICAgIHJldHVybiB4LmlzTmVnKCkgJiYgIXguaXNaZXJvKCkgPyAnLScgKyBzdHIgOiBzdHI7DQogIH07DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYW4gYXJyYXkgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgYXMgYSBzaW1wbGUgZnJhY3Rpb24gd2l0aCBhbiBpbnRlZ2VyDQogICAqIG51bWVyYXRvciBhbmQgYW4gaW50ZWdlciBkZW5vbWluYXRvci4NCiAgICoNCiAgICogVGhlIGRlbm9taW5hdG9yIHdpbGwgYmUgYSBwb3NpdGl2ZSBub24temVybyB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNwZWNpZmllZCBtYXhpbXVtDQogICAqIGRlbm9taW5hdG9yLiBJZiBhIG1heGltdW0gZGVub21pbmF0b3IgaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlbm9taW5hdG9yIHdpbGwgYmUgdGhlIGxvd2VzdA0KICAgKiB2YWx1ZSBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBudW1iZXIgZXhhY3RseS4NCiAgICoNCiAgICogW21heERdIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IE1heGltdW0gZGVub21pbmF0b3IuIEludGVnZXIgPj0gMSBhbmQgPCBJbmZpbml0eS4NCiAgICoNCiAgICovDQogIFAudG9GcmFjdGlvbiA9IGZ1bmN0aW9uIChtYXhEKSB7DQogICAgdmFyIGQsIGQwLCBkMSwgZDIsIGUsIGssIG4sIG4wLCBuMSwgcHIsIHEsIHIsDQogICAgICB4ID0gdGhpcywNCiAgICAgIHhkID0geC5kLA0KICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7DQoNCiAgICBpZiAoIXhkKSByZXR1cm4gbmV3IEN0b3IoeCk7DQoNCiAgICBuMSA9IGQwID0gbmV3IEN0b3IoMSk7DQogICAgZDEgPSBuMCA9IG5ldyBDdG9yKDApOw0KDQogICAgZCA9IG5ldyBDdG9yKGQxKTsNCiAgICBlID0gZC5lID0gZ2V0UHJlY2lzaW9uKHhkKSAtIHguZSAtIDE7DQogICAgayA9IGUgJSBMT0dfQkFTRTsNCiAgICBkLmRbMF0gPSBtYXRocG93KDEwLCBrIDwgMCA/IExPR19CQVNFICsgayA6IGspOw0KDQogICAgaWYgKG1heEQgPT0gbnVsbCkgew0KDQogICAgICAvLyBkIGlzIDEwKiplLCB0aGUgbWluaW11bSBtYXgtZGVub21pbmF0b3IgbmVlZGVkLg0KICAgICAgbWF4RCA9IGUgPiAwID8gZCA6IG4xOw0KICAgIH0gZWxzZSB7DQogICAgICBuID0gbmV3IEN0b3IobWF4RCk7DQogICAgICBpZiAoIW4uaXNJbnQoKSB8fCBuLmx0KG4xKSkgdGhyb3cgRXJyb3IoaW52YWxpZEFyZ3VtZW50ICsgbik7DQogICAgICBtYXhEID0gbi5ndChkKSA/IChlID4gMCA/IGQgOiBuMSkgOiBuOw0KICAgIH0NCg0KICAgIGV4dGVybmFsID0gZmFsc2U7DQogICAgbiA9IG5ldyBDdG9yKGRpZ2l0c1RvU3RyaW5nKHhkKSk7DQogICAgcHIgPSBDdG9yLnByZWNpc2lvbjsNCiAgICBDdG9yLnByZWNpc2lvbiA9IGUgPSB4ZC5sZW5ndGggKiBMT0dfQkFTRSAqIDI7DQoNCiAgICBmb3IgKDs7KSAgew0KICAgICAgcSA9IGRpdmlkZShuLCBkLCAwLCAxLCAxKTsNCiAgICAgIGQyID0gZDAucGx1cyhxLnRpbWVzKGQxKSk7DQogICAgICBpZiAoZDIuY21wKG1heEQpID09IDEpIGJyZWFrOw0KICAgICAgZDAgPSBkMTsNCiAgICAgIGQxID0gZDI7DQogICAgICBkMiA9IG4xOw0KICAgICAgbjEgPSBuMC5wbHVzKHEudGltZXMoZDIpKTsNCiAgICAgIG4wID0gZDI7DQogICAgICBkMiA9IGQ7DQogICAgICBkID0gbi5taW51cyhxLnRpbWVzKGQyKSk7DQogICAgICBuID0gZDI7DQogICAgfQ0KDQogICAgZDIgPSBkaXZpZGUobWF4RC5taW51cyhkMCksIGQxLCAwLCAxLCAxKTsNCiAgICBuMCA9IG4wLnBsdXMoZDIudGltZXMobjEpKTsNCiAgICBkMCA9IGQwLnBsdXMoZDIudGltZXMoZDEpKTsNCiAgICBuMC5zID0gbjEucyA9IHguczsNCg0KICAgIC8vIERldGVybWluZSB3aGljaCBmcmFjdGlvbiBpcyBjbG9zZXIgdG8geCwgbjAvZDAgb3IgbjEvZDE/DQogICAgciA9IGRpdmlkZShuMSwgZDEsIGUsIDEpLm1pbnVzKHgpLmFicygpLmNtcChkaXZpZGUobjAsIGQwLCBlLCAxKS5taW51cyh4KS5hYnMoKSkgPCAxDQogICAgICAgID8gW24xLCBkMV0gOiBbbjAsIGQwXTsNCg0KICAgIEN0b3IucHJlY2lzaW9uID0gcHI7DQogICAgZXh0ZXJuYWwgPSB0cnVlOw0KDQogICAgcmV0dXJuIHI7DQogIH07DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaW4gYmFzZSAxNiwgcm91bmQgdG8gYHNkYCBzaWduaWZpY2FudA0KICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm1gLg0KICAgKg0KICAgKiBJZiB0aGUgb3B0aW9uYWwgYHNkYCBhcmd1bWVudCBpcyBwcmVzZW50IHRoZW4gcmV0dXJuIGJpbmFyeSBleHBvbmVudGlhbCBub3RhdGlvbi4NCiAgICoNCiAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDEgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuDQogICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS4NCiAgICoNCiAgICovDQogIFAudG9IZXhhZGVjaW1hbCA9IFAudG9IZXggPSBmdW5jdGlvbiAoc2QsIHJtKSB7DQogICAgcmV0dXJuIHRvU3RyaW5nQmluYXJ5KHRoaXMsIDE2LCBzZCwgcm0pOw0KICB9Ow0KDQoNCiAgLyoNCiAgICogUmV0dXJucyBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIGB5YCBpbiB0aGUgZGlyZWN0aW9uIG9mIHJvdW5kaW5nDQogICAqIG1vZGUgYHJtYCwgb3IgYERlY2ltYWwucm91bmRpbmdgIGlmIGBybWAgaXMgb21pdHRlZCwgdG8gdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC4NCiAgICoNCiAgICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGFsd2F5cyBoYXZlIHRoZSBzYW1lIHNpZ24gYXMgdGhpcyBEZWNpbWFsLCB1bmxlc3MgZWl0aGVyIHRoaXMgRGVjaW1hbA0KICAgKiBvciBgeWAgaXMgTmFOLCBpbiB3aGljaCBjYXNlIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBhbHNvIGJlIE5hTi4NCiAgICoNCiAgICogVGhlIHJldHVybiB2YWx1ZSBpcyBub3QgYWZmZWN0ZWQgYnkgdGhlIHZhbHVlIG9mIGBwcmVjaXNpb25gLg0KICAgKg0KICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBtYWduaXR1ZGUgdG8gcm91bmQgdG8gYSBtdWx0aXBsZSBvZi4NCiAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLg0KICAgKg0KICAgKiAndG9OZWFyZXN0KCkgcm91bmRpbmcgbW9kZSBub3QgYW4gaW50ZWdlcjoge3JtfScNCiAgICogJ3RvTmVhcmVzdCgpIHJvdW5kaW5nIG1vZGUgb3V0IG9mIHJhbmdlOiB7cm19Jw0KICAgKg0KICAgKi8NCiAgUC50b05lYXJlc3QgPSBmdW5jdGlvbiAoeSwgcm0pIHsNCiAgICB2YXIgeCA9IHRoaXMsDQogICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjsNCg0KICAgIHggPSBuZXcgQ3Rvcih4KTsNCg0KICAgIGlmICh5ID09IG51bGwpIHsNCg0KICAgICAgLy8gSWYgeCBpcyBub3QgZmluaXRlLCByZXR1cm4geC4NCiAgICAgIGlmICgheC5kKSByZXR1cm4geDsNCg0KICAgICAgeSA9IG5ldyBDdG9yKDEpOw0KICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nOw0KICAgIH0gZWxzZSB7DQogICAgICB5ID0gbmV3IEN0b3IoeSk7DQogICAgICBpZiAocm0gPT09IHZvaWQgMCkgew0KICAgICAgICBybSA9IEN0b3Iucm91bmRpbmc7DQogICAgICB9IGVsc2Ugew0KICAgICAgICBjaGVja0ludDMyKHJtLCAwLCA4KTsNCiAgICAgIH0NCg0KICAgICAgLy8gSWYgeCBpcyBub3QgZmluaXRlLCByZXR1cm4geCBpZiB5IGlzIG5vdCBOYU4sIGVsc2UgTmFOLg0KICAgICAgaWYgKCF4LmQpIHJldHVybiB5LnMgPyB4IDogeTsNCg0KICAgICAgLy8gSWYgeSBpcyBub3QgZmluaXRlLCByZXR1cm4gSW5maW5pdHkgd2l0aCB0aGUgc2lnbiBvZiB4IGlmIHkgaXMgSW5maW5pdHksIGVsc2UgTmFOLg0KICAgICAgaWYgKCF5LmQpIHsNCiAgICAgICAgaWYgKHkucykgeS5zID0geC5zOw0KICAgICAgICByZXR1cm4geTsNCiAgICAgIH0NCiAgICB9DQoNCiAgICAvLyBJZiB5IGlzIG5vdCB6ZXJvLCBjYWxjdWxhdGUgdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgeSB0byB4Lg0KICAgIGlmICh5LmRbMF0pIHsNCiAgICAgIGV4dGVybmFsID0gZmFsc2U7DQogICAgICB4ID0gZGl2aWRlKHgsIHksIDAsIHJtLCAxKS50aW1lcyh5KTsNCiAgICAgIGV4dGVybmFsID0gdHJ1ZTsNCiAgICAgIGZpbmFsaXNlKHgpOw0KDQogICAgLy8gSWYgeSBpcyB6ZXJvLCByZXR1cm4gemVybyB3aXRoIHRoZSBzaWduIG9mIHguDQogICAgfSBlbHNlIHsNCiAgICAgIHkucyA9IHguczsNCiAgICAgIHggPSB5Ow0KICAgIH0NCg0KICAgIHJldHVybiB4Ow0KICB9Ow0KDQoNCiAgLyoNCiAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgY29udmVydGVkIHRvIGEgbnVtYmVyIHByaW1pdGl2ZS4NCiAgICogWmVybyBrZWVwcyBpdHMgc2lnbi4NCiAgICoNCiAgICovDQogIFAudG9OdW1iZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgcmV0dXJuICt0aGlzOw0KICB9Ow0KDQoNCiAgLyoNCiAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGluIGJhc2UgOCwgcm91bmQgdG8gYHNkYCBzaWduaWZpY2FudA0KICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm1gLg0KICAgKg0KICAgKiBJZiB0aGUgb3B0aW9uYWwgYHNkYCBhcmd1bWVudCBpcyBwcmVzZW50IHRoZW4gcmV0dXJuIGJpbmFyeSBleHBvbmVudGlhbCBub3RhdGlvbi4NCiAgICoNCiAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDEgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuDQogICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS4NCiAgICoNCiAgICovDQogIFAudG9PY3RhbCA9IGZ1bmN0aW9uIChzZCwgcm0pIHsNCiAgICByZXR1cm4gdG9TdHJpbmdCaW5hcnkodGhpcywgOCwgc2QsIHJtKTsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcmFpc2VkIHRvIHRoZSBwb3dlciBgeWAsIHJvdW5kZWQNCiAgICogdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC4NCiAgICoNCiAgICogRUNNQVNjcmlwdCBjb21wbGlhbnQuDQogICAqDQogICAqICAgcG93KHgsIE5hTikgICAgICAgICAgICAgICAgICAgICAgICAgICA9IE5hTg0KICAgKiAgIHBvdyh4LCDCsTApICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMQ0KDQogICAqICAgcG93KE5hTiwgbm9uLXplcm8pICAgICAgICAgICAgICAgICAgICA9IE5hTg0KICAgKiAgIHBvdyhhYnMoeCkgPiAxLCArSW5maW5pdHkpICAgICAgICAgICAgPSArSW5maW5pdHkNCiAgICogICBwb3coYWJzKHgpID4gMSwgLUluZmluaXR5KSAgICAgICAgICAgID0gKzANCiAgICogICBwb3coYWJzKHgpID09IDEsIMKxSW5maW5pdHkpICAgICAgICAgICA9IE5hTg0KICAgKiAgIHBvdyhhYnMoeCkgPCAxLCArSW5maW5pdHkpICAgICAgICAgICAgPSArMA0KICAgKiAgIHBvdyhhYnMoeCkgPCAxLCAtSW5maW5pdHkpICAgICAgICAgICAgPSArSW5maW5pdHkNCiAgICogICBwb3coK0luZmluaXR5LCB5ID4gMCkgICAgICAgICAgICAgICAgID0gK0luZmluaXR5DQogICAqICAgcG93KCtJbmZpbml0eSwgeSA8IDApICAgICAgICAgICAgICAgICA9ICswDQogICAqICAgcG93KC1JbmZpbml0eSwgb2RkIGludGVnZXIgPiAwKSAgICAgICA9IC1JbmZpbml0eQ0KICAgKiAgIHBvdygtSW5maW5pdHksIGV2ZW4gaW50ZWdlciA+IDApICAgICAgPSArSW5maW5pdHkNCiAgICogICBwb3coLUluZmluaXR5LCBvZGQgaW50ZWdlciA8IDApICAgICAgID0gLTANCiAgICogICBwb3coLUluZmluaXR5LCBldmVuIGludGVnZXIgPCAwKSAgICAgID0gKzANCiAgICogICBwb3coKzAsIHkgPiAwKSAgICAgICAgICAgICAgICAgICAgICAgID0gKzANCiAgICogICBwb3coKzAsIHkgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgID0gK0luZmluaXR5DQogICAqICAgcG93KC0wLCBvZGQgaW50ZWdlciA+IDApICAgICAgICAgICAgICA9IC0wDQogICAqICAgcG93KC0wLCBldmVuIGludGVnZXIgPiAwKSAgICAgICAgICAgICA9ICswDQogICAqICAgcG93KC0wLCBvZGQgaW50ZWdlciA8IDApICAgICAgICAgICAgICA9IC1JbmZpbml0eQ0KICAgKiAgIHBvdygtMCwgZXZlbiBpbnRlZ2VyIDwgMCkgICAgICAgICAgICAgPSArSW5maW5pdHkNCiAgICogICBwb3coZmluaXRlIHggPCAwLCBmaW5pdGUgbm9uLWludGVnZXIpID0gTmFODQogICAqDQogICAqIEZvciBub24taW50ZWdlciBvciB2ZXJ5IGxhcmdlIGV4cG9uZW50cyBwb3coeCwgeSkgaXMgY2FsY3VsYXRlZCB1c2luZw0KICAgKg0KICAgKiAgIHheeSA9IGV4cCh5KmxuKHgpKQ0KICAgKg0KICAgKiBBc3N1bWluZyB0aGUgZmlyc3QgMTUgcm91bmRpbmcgZGlnaXRzIGFyZSBlYWNoIGVxdWFsbHkgbGlrZWx5IHRvIGJlIGFueSBkaWdpdCAwLTksIHRoZQ0KICAgKiBwcm9iYWJpbGl0eSBvZiBhbiBpbmNvcnJlY3RseSByb3VuZGVkIHJlc3VsdA0KICAgKiBQKFs0OV05ezE0fSB8IFs1MF0wezE0fSkgPSAyICogMC4yICogMTBeLTE0ID0gNGUtMTUgPSAxLzIuNWUrMTQNCiAgICogaS5lLiAxIGluIDI1MCwwMDAsMDAwLDAwMCwwMDANCiAgICoNCiAgICogSWYgYSByZXN1bHQgaXMgaW5jb3JyZWN0bHkgcm91bmRlZCB0aGUgbWF4aW11bSBlcnJvciB3aWxsIGJlIDEgdWxwICh1bml0IGluIGxhc3QgcGxhY2UpLg0KICAgKg0KICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBwb3dlciB0byB3aGljaCB0byByYWlzZSB0aGlzIERlY2ltYWwuDQogICAqDQogICAqLw0KICBQLnRvUG93ZXIgPSBQLnBvdyA9IGZ1bmN0aW9uICh5KSB7DQogICAgdmFyIGUsIGssIHByLCByLCBybSwgcywNCiAgICAgIHggPSB0aGlzLA0KICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsDQogICAgICB5biA9ICsoeSA9IG5ldyBDdG9yKHkpKTsNCg0KICAgIC8vIEVpdGhlciDCsUluZmluaXR5LCBOYU4gb3IgwrEwPw0KICAgIGlmICgheC5kIHx8ICF5LmQgfHwgIXguZFswXSB8fCAheS5kWzBdKSByZXR1cm4gbmV3IEN0b3IobWF0aHBvdygreCwgeW4pKTsNCg0KICAgIHggPSBuZXcgQ3Rvcih4KTsNCg0KICAgIGlmICh4LmVxKDEpKSByZXR1cm4geDsNCg0KICAgIHByID0gQ3Rvci5wcmVjaXNpb247DQogICAgcm0gPSBDdG9yLnJvdW5kaW5nOw0KDQogICAgaWYgKHkuZXEoMSkpIHJldHVybiBmaW5hbGlzZSh4LCBwciwgcm0pOw0KDQogICAgLy8geSBleHBvbmVudA0KICAgIGUgPSBtYXRoZmxvb3IoeS5lIC8gTE9HX0JBU0UpOw0KDQogICAgLy8gSWYgeSBpcyBhIHNtYWxsIGludGVnZXIgdXNlIHRoZSAnZXhwb25lbnRpYXRpb24gYnkgc3F1YXJpbmcnIGFsZ29yaXRobS4NCiAgICBpZiAoZSA+PSB5LmQubGVuZ3RoIC0gMSAmJiAoayA9IHluIDwgMCA/IC15biA6IHluKSA8PSBNQVhfU0FGRV9JTlRFR0VSKSB7DQogICAgICByID0gaW50UG93KEN0b3IsIHgsIGssIHByKTsNCiAgICAgIHJldHVybiB5LnMgPCAwID8gbmV3IEN0b3IoMSkuZGl2KHIpIDogZmluYWxpc2UociwgcHIsIHJtKTsNCiAgICB9DQoNCiAgICBzID0geC5zOw0KDQogICAgLy8gaWYgeCBpcyBuZWdhdGl2ZQ0KICAgIGlmIChzIDwgMCkgew0KDQogICAgICAvLyBpZiB5IGlzIG5vdCBhbiBpbnRlZ2VyDQogICAgICBpZiAoZSA8IHkuZC5sZW5ndGggLSAxKSByZXR1cm4gbmV3IEN0b3IoTmFOKTsNCg0KICAgICAgLy8gUmVzdWx0IGlzIHBvc2l0aXZlIGlmIHggaXMgbmVnYXRpdmUgYW5kIHRoZSBsYXN0IGRpZ2l0IG9mIGludGVnZXIgeSBpcyBldmVuLg0KICAgICAgaWYgKCh5LmRbZV0gJiAxKSA9PSAwKSBzID0gMTsNCg0KICAgICAgLy8gaWYgeC5lcSgtMSkNCiAgICAgIGlmICh4LmUgPT0gMCAmJiB4LmRbMF0gPT0gMSAmJiB4LmQubGVuZ3RoID09IDEpIHsNCiAgICAgICAgeC5zID0gczsNCiAgICAgICAgcmV0dXJuIHg7DQogICAgICB9DQogICAgfQ0KDQogICAgLy8gRXN0aW1hdGUgcmVzdWx0IGV4cG9uZW50Lg0KICAgIC8vIHheeSA9IDEwXmUsICB3aGVyZSBlID0geSAqIGxvZzEwKHgpDQogICAgLy8gbG9nMTAoeCkgPSBsb2cxMCh4X3NpZ25pZmljYW5kKSArIHhfZXhwb25lbnQNCiAgICAvLyBsb2cxMCh4X3NpZ25pZmljYW5kKSA9IGxuKHhfc2lnbmlmaWNhbmQpIC8gbG4oMTApDQogICAgayA9IG1hdGhwb3coK3gsIHluKTsNCiAgICBlID0gayA9PSAwIHx8ICFpc0Zpbml0ZShrKQ0KICAgICAgPyBtYXRoZmxvb3IoeW4gKiAoTWF0aC5sb2coJzAuJyArIGRpZ2l0c1RvU3RyaW5nKHguZCkpIC8gTWF0aC5MTjEwICsgeC5lICsgMSkpDQogICAgICA6IG5ldyBDdG9yKGsgKyAnJykuZTsNCg0KICAgIC8vIEV4cG9uZW50IGVzdGltYXRlIG1heSBiZSBpbmNvcnJlY3QgZS5nLiB4OiAwLjk5OTk5OTk5OTk5OTk5OTk5OSwgeTogMi4yOSwgZTogMCwgci5lOiAtMS4NCg0KICAgIC8vIE92ZXJmbG93L3VuZGVyZmxvdz8NCiAgICBpZiAoZSA+IEN0b3IubWF4RSArIDEgfHwgZSA8IEN0b3IubWluRSAtIDEpIHJldHVybiBuZXcgQ3RvcihlID4gMCA/IHMgLyAwIDogMCk7DQoNCiAgICBleHRlcm5hbCA9IGZhbHNlOw0KICAgIEN0b3Iucm91bmRpbmcgPSB4LnMgPSAxOw0KDQogICAgLy8gRXN0aW1hdGUgdGhlIGV4dHJhIGd1YXJkIGRpZ2l0cyBuZWVkZWQgdG8gZW5zdXJlIGZpdmUgY29ycmVjdCByb3VuZGluZyBkaWdpdHMgZnJvbQ0KICAgIC8vIG5hdHVyYWxMb2dhcml0aG0oeCkuIEV4YW1wbGUgb2YgZmFpbHVyZSB3aXRob3V0IHRoZXNlIGV4dHJhIGRpZ2l0cyAocHJlY2lzaW9uOiAxMCk6DQogICAgLy8gbmV3IERlY2ltYWwoMi4zMjQ1NikucG93KCcyMDg3OTg3NDM2NTM0NTY2LjQ2NDExJykNCiAgICAvLyBzaG91bGQgYmUgMS4xNjIzNzc4MjNlKzc2NDkxNDkwNTE3MzgxNSwgYnV0IGlzIDEuMTYyMzU1ODIzZSs3NjQ5MTQ5MDUxNzM4MTUNCiAgICBrID0gTWF0aC5taW4oMTIsIChlICsgJycpLmxlbmd0aCk7DQoNCiAgICAvLyByID0geF55ID0gZXhwKHkqbG4oeCkpDQogICAgciA9IG5hdHVyYWxFeHBvbmVudGlhbCh5LnRpbWVzKG5hdHVyYWxMb2dhcml0aG0oeCwgcHIgKyBrKSksIHByKTsNCg0KICAgIC8vIHIgbWF5IGJlIEluZmluaXR5LCBlLmcuICgwLjk5OTk5OTk5OTk5OTk5OTkpLnBvdygtMWUrNDApDQogICAgaWYgKHIuZCkgew0KDQogICAgICAvLyBUcnVuY2F0ZSB0byB0aGUgcmVxdWlyZWQgcHJlY2lzaW9uIHBsdXMgZml2ZSByb3VuZGluZyBkaWdpdHMuDQogICAgICByID0gZmluYWxpc2UociwgcHIgKyA1LCAxKTsNCg0KICAgICAgLy8gSWYgdGhlIHJvdW5kaW5nIGRpZ2l0cyBhcmUgWzQ5XTk5OTkgb3IgWzUwXTAwMDAgaW5jcmVhc2UgdGhlIHByZWNpc2lvbiBieSAxMCBhbmQgcmVjYWxjdWxhdGUNCiAgICAgIC8vIHRoZSByZXN1bHQuDQogICAgICBpZiAoY2hlY2tSb3VuZGluZ0RpZ2l0cyhyLmQsIHByLCBybSkpIHsNCiAgICAgICAgZSA9IHByICsgMTA7DQoNCiAgICAgICAgLy8gVHJ1bmNhdGUgdG8gdGhlIGluY3JlYXNlZCBwcmVjaXNpb24gcGx1cyBmaXZlIHJvdW5kaW5nIGRpZ2l0cy4NCiAgICAgICAgciA9IGZpbmFsaXNlKG5hdHVyYWxFeHBvbmVudGlhbCh5LnRpbWVzKG5hdHVyYWxMb2dhcml0aG0oeCwgZSArIGspKSwgZSksIGUgKyA1LCAxKTsNCg0KICAgICAgICAvLyBDaGVjayBmb3IgMTQgbmluZXMgZnJvbSB0aGUgMm5kIHJvdW5kaW5nIGRpZ2l0ICh0aGUgZmlyc3Qgcm91bmRpbmcgZGlnaXQgbWF5IGJlIDQgb3IgOSkuDQogICAgICAgIGlmICgrZGlnaXRzVG9TdHJpbmcoci5kKS5zbGljZShwciArIDEsIHByICsgMTUpICsgMSA9PSAxZTE0KSB7DQogICAgICAgICAgciA9IGZpbmFsaXNlKHIsIHByICsgMSwgMCk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQoNCiAgICByLnMgPSBzOw0KICAgIGV4dGVybmFsID0gdHJ1ZTsNCiAgICBDdG9yLnJvdW5kaW5nID0gcm07DQoNCiAgICByZXR1cm4gZmluYWxpc2UociwgcHIsIHJtKTsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCByb3VuZGVkIHRvIGBzZGAgc2lnbmlmaWNhbnQgZGlnaXRzDQogICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC4NCiAgICoNCiAgICogUmV0dXJuIGV4cG9uZW50aWFsIG5vdGF0aW9uIGlmIGBzZGAgaXMgbGVzcyB0aGFuIHRoZSBudW1iZXIgb2YgZGlnaXRzIG5lY2Vzc2FyeSB0byByZXByZXNlbnQNCiAgICogdGhlIGludGVnZXIgcGFydCBvZiB0aGUgdmFsdWUgaW4gbm9ybWFsIG5vdGF0aW9uLg0KICAgKg0KICAgKiBbc2RdIHtudW1iZXJ9IFNpZ25pZmljYW50IGRpZ2l0cy4gSW50ZWdlciwgMSB0byBNQVhfRElHSVRTIGluY2x1c2l2ZS4NCiAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLg0KICAgKg0KICAgKi8NCiAgUC50b1ByZWNpc2lvbiA9IGZ1bmN0aW9uIChzZCwgcm0pIHsNCiAgICB2YXIgc3RyLA0KICAgICAgeCA9IHRoaXMsDQogICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjsNCg0KICAgIGlmIChzZCA9PT0gdm9pZCAwKSB7DQogICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh4LCB4LmUgPD0gQ3Rvci50b0V4cE5lZyB8fCB4LmUgPj0gQ3Rvci50b0V4cFBvcyk7DQogICAgfSBlbHNlIHsNCiAgICAgIGNoZWNrSW50MzIoc2QsIDEsIE1BWF9ESUdJVFMpOw0KDQogICAgICBpZiAocm0gPT09IHZvaWQgMCkgcm0gPSBDdG9yLnJvdW5kaW5nOw0KICAgICAgZWxzZSBjaGVja0ludDMyKHJtLCAwLCA4KTsNCg0KICAgICAgeCA9IGZpbmFsaXNlKG5ldyBDdG9yKHgpLCBzZCwgcm0pOw0KICAgICAgc3RyID0gZmluaXRlVG9TdHJpbmcoeCwgc2QgPD0geC5lIHx8IHguZSA8PSBDdG9yLnRvRXhwTmVnLCBzZCk7DQogICAgfQ0KDQogICAgcmV0dXJuIHguaXNOZWcoKSAmJiAheC5pc1plcm8oKSA/ICctJyArIHN0ciA6IHN0cjsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcm91bmRlZCB0byBhIG1heGltdW0gb2YgYHNkYA0KICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm1gLCBvciB0byBgcHJlY2lzaW9uYCBhbmQgYHJvdW5kaW5nYCByZXNwZWN0aXZlbHkgaWYNCiAgICogb21pdHRlZC4NCiAgICoNCiAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDEgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuDQogICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS4NCiAgICoNCiAgICogJ3RvU0QoKSBkaWdpdHMgb3V0IG9mIHJhbmdlOiB7c2R9Jw0KICAgKiAndG9TRCgpIGRpZ2l0cyBub3QgYW4gaW50ZWdlcjoge3NkfScNCiAgICogJ3RvU0QoKSByb3VuZGluZyBtb2RlIG5vdCBhbiBpbnRlZ2VyOiB7cm19Jw0KICAgKiAndG9TRCgpIHJvdW5kaW5nIG1vZGUgb3V0IG9mIHJhbmdlOiB7cm19Jw0KICAgKg0KICAgKi8NCiAgUC50b1NpZ25pZmljYW50RGlnaXRzID0gUC50b1NEID0gZnVuY3Rpb24gKHNkLCBybSkgew0KICAgIHZhciB4ID0gdGhpcywNCiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yOw0KDQogICAgaWYgKHNkID09PSB2b2lkIDApIHsNCiAgICAgIHNkID0gQ3Rvci5wcmVjaXNpb247DQogICAgICBybSA9IEN0b3Iucm91bmRpbmc7DQogICAgfSBlbHNlIHsNCiAgICAgIGNoZWNrSW50MzIoc2QsIDEsIE1BWF9ESUdJVFMpOw0KDQogICAgICBpZiAocm0gPT09IHZvaWQgMCkgcm0gPSBDdG9yLnJvdW5kaW5nOw0KICAgICAgZWxzZSBjaGVja0ludDMyKHJtLCAwLCA4KTsNCiAgICB9DQoNCiAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoeCksIHNkLCBybSk7DQogIH07DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuDQogICAqDQogICAqIFJldHVybiBleHBvbmVudGlhbCBub3RhdGlvbiBpZiB0aGlzIERlY2ltYWwgaGFzIGEgcG9zaXRpdmUgZXhwb25lbnQgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuDQogICAqIGB0b0V4cFBvc2AsIG9yIGEgbmVnYXRpdmUgZXhwb25lbnQgZXF1YWwgdG8gb3IgbGVzcyB0aGFuIGB0b0V4cE5lZ2AuDQogICAqDQogICAqLw0KICBQLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgew0KICAgIHZhciB4ID0gdGhpcywNCiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLA0KICAgICAgc3RyID0gZmluaXRlVG9TdHJpbmcoeCwgeC5lIDw9IEN0b3IudG9FeHBOZWcgfHwgeC5lID49IEN0b3IudG9FeHBQb3MpOw0KDQogICAgcmV0dXJuIHguaXNOZWcoKSAmJiAheC5pc1plcm8oKSA/ICctJyArIHN0ciA6IHN0cjsNCiAgfTsNCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgdHJ1bmNhdGVkIHRvIGEgd2hvbGUgbnVtYmVyLg0KICAgKg0KICAgKi8NCiAgUC50cnVuY2F0ZWQgPSBQLnRydW5jID0gZnVuY3Rpb24gKCkgew0KICAgIHJldHVybiBmaW5hbGlzZShuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKSwgdGhpcy5lICsgMSwgMSk7DQogIH07DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuDQogICAqIFVubGlrZSBgdG9TdHJpbmdgLCBuZWdhdGl2ZSB6ZXJvIHdpbGwgaW5jbHVkZSB0aGUgbWludXMgc2lnbi4NCiAgICoNCiAgICovDQogIFAudmFsdWVPZiA9IFAudG9KU09OID0gZnVuY3Rpb24gKCkgew0KICAgIHZhciB4ID0gdGhpcywNCiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLA0KICAgICAgc3RyID0gZmluaXRlVG9TdHJpbmcoeCwgeC5lIDw9IEN0b3IudG9FeHBOZWcgfHwgeC5lID49IEN0b3IudG9FeHBQb3MpOw0KDQogICAgcmV0dXJuIHguaXNOZWcoKSA/ICctJyArIHN0ciA6IHN0cjsNCiAgfTsNCg0KDQogIC8qDQogIC8vIEFkZCBhbGlhc2VzIHRvIG1hdGNoIEJpZ0RlY2ltYWwgbWV0aG9kIG5hbWVzLg0KICAvLyBQLmFkZCA9IFAucGx1czsNCiAgUC5zdWJ0cmFjdCA9IFAubWludXM7DQogIFAubXVsdGlwbHkgPSBQLnRpbWVzOw0KICBQLmRpdmlkZSA9IFAuZGl2Ow0KICBQLnJlbWFpbmRlciA9IFAubW9kOw0KICBQLmNvbXBhcmVUbyA9IFAuY21wOw0KICBQLm5lZ2F0ZSA9IFAubmVnOw0KICAgKi8NCg0KDQogIC8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIERlY2ltYWwucHJvdG90eXBlIChQKSBhbmQvb3IgRGVjaW1hbCBtZXRob2RzLCBhbmQgdGhlaXIgY2FsbGVycy4NCg0KDQogIC8qDQogICAqICBkaWdpdHNUb1N0cmluZyAgICAgICAgICAgUC5jdWJlUm9vdCwgUC5sb2dhcml0aG0sIFAuc3F1YXJlUm9vdCwgUC50b0ZyYWN0aW9uLCBQLnRvUG93ZXIsDQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluaXRlVG9TdHJpbmcsIG5hdHVyYWxFeHBvbmVudGlhbCwgbmF0dXJhbExvZ2FyaXRobQ0KICAgKiAgY2hlY2tJbnQzMiAgICAgICAgICAgICAgIFAudG9EZWNpbWFsUGxhY2VzLCBQLnRvRXhwb25lbnRpYWwsIFAudG9GaXhlZCwgUC50b05lYXJlc3QsDQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgUC50b1ByZWNpc2lvbiwgUC50b1NpZ25pZmljYW50RGlnaXRzLCB0b1N0cmluZ0JpbmFyeSwgcmFuZG9tDQogICAqICBjaGVja1JvdW5kaW5nRGlnaXRzICAgICAgUC5sb2dhcml0aG0sIFAudG9Qb3dlciwgbmF0dXJhbEV4cG9uZW50aWFsLCBuYXR1cmFsTG9nYXJpdGhtDQogICAqICBjb252ZXJ0QmFzZSAgICAgICAgICAgICAgdG9TdHJpbmdCaW5hcnksIHBhcnNlT3RoZXINCiAgICogIGNvcyAgICAgICAgICAgICAgICAgICAgICBQLmNvcw0KICAgKiAgZGl2aWRlICAgICAgICAgICAgICAgICAgIFAuYXRhbmgsIFAuY3ViZVJvb3QsIFAuZGl2aWRlZEJ5LCBQLmRpdmlkZWRUb0ludGVnZXJCeSwNCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBQLmxvZ2FyaXRobSwgUC5tb2R1bG8sIFAuc3F1YXJlUm9vdCwgUC50YW4sIFAudGFuaCwgUC50b0ZyYWN0aW9uLA0KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAudG9OZWFyZXN0LCB0b1N0cmluZ0JpbmFyeSwgbmF0dXJhbEV4cG9uZW50aWFsLCBuYXR1cmFsTG9nYXJpdGhtLA0KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheWxvclNlcmllcywgYXRhbjIsIHBhcnNlT3RoZXINCiAgICogIGZpbmFsaXNlICAgICAgICAgICAgICAgICBQLmFic29sdXRlVmFsdWUsIFAuYXRhbiwgUC5hdGFuaCwgUC5jZWlsLCBQLmNvcywgUC5jb3NoLA0KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAuY3ViZVJvb3QsIFAuZGl2aWRlZFRvSW50ZWdlckJ5LCBQLmZsb29yLCBQLmxvZ2FyaXRobSwgUC5taW51cywNCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBQLm1vZHVsbywgUC5uZWdhdGVkLCBQLnBsdXMsIFAucm91bmQsIFAuc2luLCBQLnNpbmgsIFAuc3F1YXJlUm9vdCwNCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBQLnRhbiwgUC50aW1lcywgUC50b0RlY2ltYWxQbGFjZXMsIFAudG9FeHBvbmVudGlhbCwgUC50b0ZpeGVkLA0KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAudG9OZWFyZXN0LCBQLnRvUG93ZXIsIFAudG9QcmVjaXNpb24sIFAudG9TaWduaWZpY2FudERpZ2l0cywNCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBQLnRydW5jYXRlZCwgZGl2aWRlLCBnZXRMbjEwLCBnZXRQaSwgbmF0dXJhbEV4cG9uZW50aWFsLA0KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdHVyYWxMb2dhcml0aG0sIGNlaWwsIGZsb29yLCByb3VuZCwgdHJ1bmMNCiAgICogIGZpbml0ZVRvU3RyaW5nICAgICAgICAgICBQLnRvRXhwb25lbnRpYWwsIFAudG9GaXhlZCwgUC50b1ByZWNpc2lvbiwgUC50b1N0cmluZywgUC52YWx1ZU9mLA0KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nQmluYXJ5DQogICAqICBnZXRCYXNlMTBFeHBvbmVudCAgICAgICAgUC5taW51cywgUC5wbHVzLCBQLnRpbWVzLCBwYXJzZU90aGVyDQogICAqICBnZXRMbjEwICAgICAgICAgICAgICAgICAgUC5sb2dhcml0aG0sIG5hdHVyYWxMb2dhcml0aG0NCiAgICogIGdldFBpICAgICAgICAgICAgICAgICAgICBQLmFjb3MsIFAuYXNpbiwgUC5hdGFuLCB0b0xlc3NUaGFuSGFsZlBpLCBhdGFuMg0KICAgKiAgZ2V0UHJlY2lzaW9uICAgICAgICAgICAgIFAucHJlY2lzaW9uLCBQLnRvRnJhY3Rpb24NCiAgICogIGdldFplcm9TdHJpbmcgICAgICAgICAgICBkaWdpdHNUb1N0cmluZywgZmluaXRlVG9TdHJpbmcNCiAgICogIGludFBvdyAgICAgICAgICAgICAgICAgICBQLnRvUG93ZXIsIHBhcnNlT3RoZXINCiAgICogIGlzT2RkICAgICAgICAgICAgICAgICAgICB0b0xlc3NUaGFuSGFsZlBpDQogICAqICBtYXhPck1pbiAgICAgICAgICAgICAgICAgbWF4LCBtaW4NCiAgICogIG5hdHVyYWxFeHBvbmVudGlhbCAgICAgICBQLm5hdHVyYWxFeHBvbmVudGlhbCwgUC50b1Bvd2VyDQogICAqICBuYXR1cmFsTG9nYXJpdGhtICAgICAgICAgUC5hY29zaCwgUC5hc2luaCwgUC5hdGFuaCwgUC5sb2dhcml0aG0sIFAubmF0dXJhbExvZ2FyaXRobSwNCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBQLnRvUG93ZXIsIG5hdHVyYWxFeHBvbmVudGlhbA0KICAgKiAgbm9uRmluaXRlVG9TdHJpbmcgICAgICAgIGZpbml0ZVRvU3RyaW5nLCB0b1N0cmluZ0JpbmFyeQ0KICAgKiAgcGFyc2VEZWNpbWFsICAgICAgICAgICAgIERlY2ltYWwNCiAgICogIHBhcnNlT3RoZXIgICAgICAgICAgICAgICBEZWNpbWFsDQogICAqICBzaW4gICAgICAgICAgICAgICAgICAgICAgUC5zaW4NCiAgICogIHRheWxvclNlcmllcyAgICAgICAgICAgICBQLmNvc2gsIFAuc2luaCwgY29zLCBzaW4NCiAgICogIHRvTGVzc1RoYW5IYWxmUGkgICAgICAgICBQLmNvcywgUC5zaW4NCiAgICogIHRvU3RyaW5nQmluYXJ5ICAgICAgICAgICBQLnRvQmluYXJ5LCBQLnRvSGV4YWRlY2ltYWwsIFAudG9PY3RhbA0KICAgKiAgdHJ1bmNhdGUgICAgICAgICAgICAgICAgIGludFBvdw0KICAgKg0KICAgKiAgVGhyb3dzOiAgICAgICAgICAgICAgICAgIFAubG9nYXJpdGhtLCBQLnByZWNpc2lvbiwgUC50b0ZyYWN0aW9uLCBjaGVja0ludDMyLCBnZXRMbjEwLCBnZXRQaSwNCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBuYXR1cmFsTG9nYXJpdGhtLCBjb25maWcsIHBhcnNlT3RoZXIsIHJhbmRvbSwgRGVjaW1hbA0KICAgKi8NCg0KDQogIGZ1bmN0aW9uIGRpZ2l0c1RvU3RyaW5nKGQpIHsNCiAgICB2YXIgaSwgaywgd3MsDQogICAgICBpbmRleE9mTGFzdFdvcmQgPSBkLmxlbmd0aCAtIDEsDQogICAgICBzdHIgPSAnJywNCiAgICAgIHcgPSBkWzBdOw0KDQogICAgaWYgKGluZGV4T2ZMYXN0V29yZCA+IDApIHsNCiAgICAgIHN0ciArPSB3Ow0KICAgICAgZm9yIChpID0gMTsgaSA8IGluZGV4T2ZMYXN0V29yZDsgaSsrKSB7DQogICAgICAgIHdzID0gZFtpXSArICcnOw0KICAgICAgICBrID0gTE9HX0JBU0UgLSB3cy5sZW5ndGg7DQogICAgICAgIGlmIChrKSBzdHIgKz0gZ2V0WmVyb1N0cmluZyhrKTsNCiAgICAgICAgc3RyICs9IHdzOw0KICAgICAgfQ0KDQogICAgICB3ID0gZFtpXTsNCiAgICAgIHdzID0gdyArICcnOw0KICAgICAgayA9IExPR19CQVNFIC0gd3MubGVuZ3RoOw0KICAgICAgaWYgKGspIHN0ciArPSBnZXRaZXJvU3RyaW5nKGspOw0KICAgIH0gZWxzZSBpZiAodyA9PT0gMCkgew0KICAgICAgcmV0dXJuICcwJzsNCiAgICB9DQoNCiAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3Mgb2YgbGFzdCB3Lg0KICAgIGZvciAoOyB3ICUgMTAgPT09IDA7KSB3IC89IDEwOw0KDQogICAgcmV0dXJuIHN0ciArIHc7DQogIH0NCg0KDQogIGZ1bmN0aW9uIGNoZWNrSW50MzIoaSwgbWluLCBtYXgpIHsNCiAgICBpZiAoaSAhPT0gfn5pIHx8IGkgPCBtaW4gfHwgaSA+IG1heCkgew0KICAgICAgdGhyb3cgRXJyb3IoaW52YWxpZEFyZ3VtZW50ICsgaSk7DQogICAgfQ0KICB9DQoNCg0KICAvKg0KICAgKiBDaGVjayA1IHJvdW5kaW5nIGRpZ2l0cyBpZiBgcmVwZWF0aW5nYCBpcyBudWxsLCA0IG90aGVyd2lzZS4NCiAgICogYHJlcGVhdGluZyA9PSBudWxsYCBpZiBjYWxsZXIgaXMgYGxvZ2Agb3IgYHBvd2AsDQogICAqIGByZXBlYXRpbmcgIT0gbnVsbGAgaWYgY2FsbGVyIGlzIGBuYXR1cmFsTG9nYXJpdGhtYCBvciBgbmF0dXJhbEV4cG9uZW50aWFsYC4NCiAgICovDQogIGZ1bmN0aW9uIGNoZWNrUm91bmRpbmdEaWdpdHMoZCwgaSwgcm0sIHJlcGVhdGluZykgew0KICAgIHZhciBkaSwgaywgciwgcmQ7DQoNCiAgICAvLyBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgYXJyYXkgZC4NCiAgICBmb3IgKGsgPSBkWzBdOyBrID49IDEwOyBrIC89IDEwKSAtLWk7DQoNCiAgICAvLyBJcyB0aGUgcm91bmRpbmcgZGlnaXQgaW4gdGhlIGZpcnN0IHdvcmQgb2YgZD8NCiAgICBpZiAoLS1pIDwgMCkgew0KICAgICAgaSArPSBMT0dfQkFTRTsNCiAgICAgIGRpID0gMDsNCiAgICB9IGVsc2Ugew0KICAgICAgZGkgPSBNYXRoLmNlaWwoKGkgKyAxKSAvIExPR19CQVNFKTsNCiAgICAgIGkgJT0gTE9HX0JBU0U7DQogICAgfQ0KDQogICAgLy8gaSBpcyB0aGUgaW5kZXggKDAgLSA2KSBvZiB0aGUgcm91bmRpbmcgZGlnaXQuDQogICAgLy8gRS5nLiBpZiB3aXRoaW4gdGhlIHdvcmQgMzQ4NzU2MyB0aGUgZmlyc3Qgcm91bmRpbmcgZGlnaXQgaXMgNSwNCiAgICAvLyB0aGVuIGkgPSA0LCBrID0gMTAwMCwgcmQgPSAzNDg3NTYzICUgMTAwMCA9IDU2Mw0KICAgIGsgPSBtYXRocG93KDEwLCBMT0dfQkFTRSAtIGkpOw0KICAgIHJkID0gZFtkaV0gJSBrIHwgMDsNCg0KICAgIGlmIChyZXBlYXRpbmcgPT0gbnVsbCkgew0KICAgICAgaWYgKGkgPCAzKSB7DQogICAgICAgIGlmIChpID09IDApIHJkID0gcmQgLyAxMDAgfCAwOw0KICAgICAgICBlbHNlIGlmIChpID09IDEpIHJkID0gcmQgLyAxMCB8IDA7DQogICAgICAgIHIgPSBybSA8IDQgJiYgcmQgPT0gOTk5OTkgfHwgcm0gPiAzICYmIHJkID09IDQ5OTk5IHx8IHJkID09IDUwMDAwIHx8IHJkID09IDA7DQogICAgICB9IGVsc2Ugew0KICAgICAgICByID0gKHJtIDwgNCAmJiByZCArIDEgPT0gayB8fCBybSA+IDMgJiYgcmQgKyAxID09IGsgLyAyKSAmJg0KICAgICAgICAgIChkW2RpICsgMV0gLyBrIC8gMTAwIHwgMCkgPT0gbWF0aHBvdygxMCwgaSAtIDIpIC0gMSB8fA0KICAgICAgICAgICAgKHJkID09IGsgLyAyIHx8IHJkID09IDApICYmIChkW2RpICsgMV0gLyBrIC8gMTAwIHwgMCkgPT0gMDsNCiAgICAgIH0NCiAgICB9IGVsc2Ugew0KICAgICAgaWYgKGkgPCA0KSB7DQogICAgICAgIGlmIChpID09IDApIHJkID0gcmQgLyAxMDAwIHwgMDsNCiAgICAgICAgZWxzZSBpZiAoaSA9PSAxKSByZCA9IHJkIC8gMTAwIHwgMDsNCiAgICAgICAgZWxzZSBpZiAoaSA9PSAyKSByZCA9IHJkIC8gMTAgfCAwOw0KICAgICAgICByID0gKHJlcGVhdGluZyB8fCBybSA8IDQpICYmIHJkID09IDk5OTkgfHwgIXJlcGVhdGluZyAmJiBybSA+IDMgJiYgcmQgPT0gNDk5OTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHIgPSAoKHJlcGVhdGluZyB8fCBybSA8IDQpICYmIHJkICsgMSA9PSBrIHx8DQogICAgICAgICghcmVwZWF0aW5nICYmIHJtID4gMykgJiYgcmQgKyAxID09IGsgLyAyKSAmJg0KICAgICAgICAgIChkW2RpICsgMV0gLyBrIC8gMTAwMCB8IDApID09IG1hdGhwb3coMTAsIGkgLSAzKSAtIDE7DQogICAgICB9DQogICAgfQ0KDQogICAgcmV0dXJuIHI7DQogIH0NCg0KDQogIC8vIENvbnZlcnQgc3RyaW5nIG9mIGBiYXNlSW5gIHRvIGFuIGFycmF5IG9mIG51bWJlcnMgb2YgYGJhc2VPdXRgLg0KICAvLyBFZy4gY29udmVydEJhc2UoJzI1NScsIDEwLCAxNikgcmV0dXJucyBbMTUsIDE1XS4NCiAgLy8gRWcuIGNvbnZlcnRCYXNlKCdmZicsIDE2LCAxMCkgcmV0dXJucyBbMiwgNSwgNV0uDQogIGZ1bmN0aW9uIGNvbnZlcnRCYXNlKHN0ciwgYmFzZUluLCBiYXNlT3V0KSB7DQogICAgdmFyIGosDQogICAgICBhcnIgPSBbMF0sDQogICAgICBhcnJMLA0KICAgICAgaSA9IDAsDQogICAgICBzdHJMID0gc3RyLmxlbmd0aDsNCg0KICAgIGZvciAoOyBpIDwgc3RyTDspIHsNCiAgICAgIGZvciAoYXJyTCA9IGFyci5sZW5ndGg7IGFyckwtLTspIGFyclthcnJMXSAqPSBiYXNlSW47DQogICAgICBhcnJbMF0gKz0gTlVNRVJBTFMuaW5kZXhPZihzdHIuY2hhckF0KGkrKykpOw0KICAgICAgZm9yIChqID0gMDsgaiA8IGFyci5sZW5ndGg7IGorKykgew0KICAgICAgICBpZiAoYXJyW2pdID4gYmFzZU91dCAtIDEpIHsNCiAgICAgICAgICBpZiAoYXJyW2ogKyAxXSA9PT0gdm9pZCAwKSBhcnJbaiArIDFdID0gMDsNCiAgICAgICAgICBhcnJbaiArIDFdICs9IGFycltqXSAvIGJhc2VPdXQgfCAwOw0KICAgICAgICAgIGFycltqXSAlPSBiYXNlT3V0Ow0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KDQogICAgcmV0dXJuIGFyci5yZXZlcnNlKCk7DQogIH0NCg0KDQogIC8qDQogICAqIGNvcyh4KSA9IDEgLSB4XjIvMiEgKyB4XjQvNCEgLSAuLi4NCiAgICogfHh8IDwgcGkvMg0KICAgKg0KICAgKi8NCiAgZnVuY3Rpb24gY29zaW5lKEN0b3IsIHgpIHsNCiAgICB2YXIgaywgeSwNCiAgICAgIGxlbiA9IHguZC5sZW5ndGg7DQoNCiAgICAvLyBBcmd1bWVudCByZWR1Y3Rpb246IGNvcyg0eCkgPSA4Kihjb3NeNCh4KSAtIGNvc14yKHgpKSArIDENCiAgICAvLyBpLmUuIGNvcyh4KSA9IDgqKGNvc140KHgvNCkgLSBjb3NeMih4LzQpKSArIDENCg0KICAgIC8vIEVzdGltYXRlIHRoZSBvcHRpbXVtIG51bWJlciBvZiB0aW1lcyB0byB1c2UgdGhlIGFyZ3VtZW50IHJlZHVjdGlvbi4NCiAgICBpZiAobGVuIDwgMzIpIHsNCiAgICAgIGsgPSBNYXRoLmNlaWwobGVuIC8gMyk7DQogICAgICB5ID0gKDEgLyB0aW55UG93KDQsIGspKS50b1N0cmluZygpOw0KICAgIH0gZWxzZSB7DQogICAgICBrID0gMTY7DQogICAgICB5ID0gJzIuMzI4MzA2NDM2NTM4Njk2Mjg5MDYyNWUtMTAnOw0KICAgIH0NCg0KICAgIEN0b3IucHJlY2lzaW9uICs9IGs7DQoNCiAgICB4ID0gdGF5bG9yU2VyaWVzKEN0b3IsIDEsIHgudGltZXMoeSksIG5ldyBDdG9yKDEpKTsNCg0KICAgIC8vIFJldmVyc2UgYXJndW1lbnQgcmVkdWN0aW9uDQogICAgZm9yICh2YXIgaSA9IGs7IGktLTspIHsNCiAgICAgIHZhciBjb3MyeCA9IHgudGltZXMoeCk7DQogICAgICB4ID0gY29zMngudGltZXMoY29zMngpLm1pbnVzKGNvczJ4KS50aW1lcyg4KS5wbHVzKDEpOw0KICAgIH0NCg0KICAgIEN0b3IucHJlY2lzaW9uIC09IGs7DQoNCiAgICByZXR1cm4geDsNCiAgfQ0KDQoNCiAgLyoNCiAgICogUGVyZm9ybSBkaXZpc2lvbiBpbiB0aGUgc3BlY2lmaWVkIGJhc2UuDQogICAqLw0KICB2YXIgZGl2aWRlID0gKGZ1bmN0aW9uICgpIHsNCg0KICAgIC8vIEFzc3VtZXMgbm9uLXplcm8geCBhbmQgaywgYW5kIGhlbmNlIG5vbi16ZXJvIHJlc3VsdC4NCiAgICBmdW5jdGlvbiBtdWx0aXBseUludGVnZXIoeCwgaywgYmFzZSkgew0KICAgICAgdmFyIHRlbXAsDQogICAgICAgIGNhcnJ5ID0gMCwNCiAgICAgICAgaSA9IHgubGVuZ3RoOw0KDQogICAgICBmb3IgKHggPSB4LnNsaWNlKCk7IGktLTspIHsNCiAgICAgICAgdGVtcCA9IHhbaV0gKiBrICsgY2Fycnk7DQogICAgICAgIHhbaV0gPSB0ZW1wICUgYmFzZSB8IDA7DQogICAgICAgIGNhcnJ5ID0gdGVtcCAvIGJhc2UgfCAwOw0KICAgICAgfQ0KDQogICAgICBpZiAoY2FycnkpIHgudW5zaGlmdChjYXJyeSk7DQoNCiAgICAgIHJldHVybiB4Ow0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNvbXBhcmUoYSwgYiwgYUwsIGJMKSB7DQogICAgICB2YXIgaSwgcjsNCg0KICAgICAgaWYgKGFMICE9IGJMKSB7DQogICAgICAgIHIgPSBhTCA+IGJMID8gMSA6IC0xOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgZm9yIChpID0gciA9IDA7IGkgPCBhTDsgaSsrKSB7DQogICAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkgew0KICAgICAgICAgICAgciA9IGFbaV0gPiBiW2ldID8gMSA6IC0xOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQoNCiAgICAgIHJldHVybiByOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHN1YnRyYWN0KGEsIGIsIGFMLCBiYXNlKSB7DQogICAgICB2YXIgaSA9IDA7DQoNCiAgICAgIC8vIFN1YnRyYWN0IGIgZnJvbSBhLg0KICAgICAgZm9yICg7IGFMLS07KSB7DQogICAgICAgIGFbYUxdIC09IGk7DQogICAgICAgIGkgPSBhW2FMXSA8IGJbYUxdID8gMSA6IDA7DQogICAgICAgIGFbYUxdID0gaSAqIGJhc2UgKyBhW2FMXSAtIGJbYUxdOw0KICAgICAgfQ0KDQogICAgICAvLyBSZW1vdmUgbGVhZGluZyB6ZXJvcy4NCiAgICAgIGZvciAoOyAhYVswXSAmJiBhLmxlbmd0aCA+IDE7KSBhLnNoaWZ0KCk7DQogICAgfQ0KDQogICAgcmV0dXJuIGZ1bmN0aW9uICh4LCB5LCBwciwgcm0sIGRwLCBiYXNlKSB7DQogICAgICB2YXIgY21wLCBlLCBpLCBrLCBsb2dCYXNlLCBtb3JlLCBwcm9kLCBwcm9kTCwgcSwgcWQsIHJlbSwgcmVtTCwgcmVtMCwgc2QsIHQsIHhpLCB4TCwgeWQwLA0KICAgICAgICB5TCwgeXosDQogICAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLA0KICAgICAgICBzaWduID0geC5zID09IHkucyA/IDEgOiAtMSwNCiAgICAgICAgeGQgPSB4LmQsDQogICAgICAgIHlkID0geS5kOw0KDQogICAgICAvLyBFaXRoZXIgTmFOLCBJbmZpbml0eSBvciAwPw0KICAgICAgaWYgKCF4ZCB8fCAheGRbMF0gfHwgIXlkIHx8ICF5ZFswXSkgew0KDQogICAgICAgIHJldHVybiBuZXcgQ3RvcigvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBOYU4sIG9yIGJvdGggSW5maW5pdHkgb3IgMC4NCiAgICAgICAgICAheC5zIHx8ICF5LnMgfHwgKHhkID8geWQgJiYgeGRbMF0gPT0geWRbMF0gOiAheWQpID8gTmFOIDoNCg0KICAgICAgICAgIC8vIFJldHVybiDCsTAgaWYgeCBpcyAwIG9yIHkgaXMgwrFJbmZpbml0eSwgb3IgcmV0dXJuIMKxSW5maW5pdHkgYXMgeSBpcyAwLg0KICAgICAgICAgIHhkICYmIHhkWzBdID09IDAgfHwgIXlkID8gc2lnbiAqIDAgOiBzaWduIC8gMCk7DQogICAgICB9DQoNCiAgICAgIGlmIChiYXNlKSB7DQogICAgICAgIGxvZ0Jhc2UgPSAxOw0KICAgICAgICBlID0geC5lIC0geS5lOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgYmFzZSA9IEJBU0U7DQogICAgICAgIGxvZ0Jhc2UgPSBMT0dfQkFTRTsNCiAgICAgICAgZSA9IG1hdGhmbG9vcih4LmUgLyBsb2dCYXNlKSAtIG1hdGhmbG9vcih5LmUgLyBsb2dCYXNlKTsNCiAgICAgIH0NCg0KICAgICAgeUwgPSB5ZC5sZW5ndGg7DQogICAgICB4TCA9IHhkLmxlbmd0aDsNCiAgICAgIHEgPSBuZXcgQ3RvcihzaWduKTsNCiAgICAgIHFkID0gcS5kID0gW107DQoNCiAgICAgIC8vIFJlc3VsdCBleHBvbmVudCBtYXkgYmUgb25lIGxlc3MgdGhhbiBlLg0KICAgICAgLy8gVGhlIGRpZ2l0IGFycmF5IG9mIGEgRGVjaW1hbCBmcm9tIHRvU3RyaW5nQmluYXJ5IG1heSBoYXZlIHRyYWlsaW5nIHplcm9zLg0KICAgICAgZm9yIChpID0gMDsgeWRbaV0gPT0gKHhkW2ldIHx8IDApOyBpKyspOw0KDQogICAgICBpZiAoeWRbaV0gPiAoeGRbaV0gfHwgMCkpIGUtLTsNCg0KICAgICAgaWYgKHByID09IG51bGwpIHsNCiAgICAgICAgc2QgPSBwciA9IEN0b3IucHJlY2lzaW9uOw0KICAgICAgICBybSA9IEN0b3Iucm91bmRpbmc7DQogICAgICB9IGVsc2UgaWYgKGRwKSB7DQogICAgICAgIHNkID0gcHIgKyAoeC5lIC0geS5lKSArIDE7DQogICAgICB9IGVsc2Ugew0KICAgICAgICBzZCA9IHByOw0KICAgICAgfQ0KDQogICAgICBpZiAoc2QgPCAwKSB7DQogICAgICAgIHFkLnB1c2goMSk7DQogICAgICAgIG1vcmUgPSB0cnVlOw0KICAgICAgfSBlbHNlIHsNCg0KICAgICAgICAvLyBDb252ZXJ0IHByZWNpc2lvbiBpbiBudW1iZXIgb2YgYmFzZSAxMCBkaWdpdHMgdG8gYmFzZSAxZTcgZGlnaXRzLg0KICAgICAgICBzZCA9IHNkIC8gbG9nQmFzZSArIDIgfCAwOw0KICAgICAgICBpID0gMDsNCg0KICAgICAgICAvLyBkaXZpc29yIDwgMWU3DQogICAgICAgIGlmICh5TCA9PSAxKSB7DQogICAgICAgICAgayA9IDA7DQogICAgICAgICAgeWQgPSB5ZFswXTsNCiAgICAgICAgICBzZCsrOw0KDQogICAgICAgICAgLy8gayBpcyB0aGUgY2FycnkuDQogICAgICAgICAgZm9yICg7IChpIDwgeEwgfHwgaykgJiYgc2QtLTsgaSsrKSB7DQogICAgICAgICAgICB0ID0gayAqIGJhc2UgKyAoeGRbaV0gfHwgMCk7DQogICAgICAgICAgICBxZFtpXSA9IHQgLyB5ZCB8IDA7DQogICAgICAgICAgICBrID0gdCAlIHlkIHwgMDsNCiAgICAgICAgICB9DQoNCiAgICAgICAgICBtb3JlID0gayB8fCBpIDwgeEw7DQoNCiAgICAgICAgLy8gZGl2aXNvciA+PSAxZTcNCiAgICAgICAgfSBlbHNlIHsNCg0KICAgICAgICAgIC8vIE5vcm1hbGlzZSB4ZCBhbmQgeWQgc28gaGlnaGVzdCBvcmRlciBkaWdpdCBvZiB5ZCBpcyA+PSBiYXNlLzINCiAgICAgICAgICBrID0gYmFzZSAvICh5ZFswXSArIDEpIHwgMDsNCg0KICAgICAgICAgIGlmIChrID4gMSkgew0KICAgICAgICAgICAgeWQgPSBtdWx0aXBseUludGVnZXIoeWQsIGssIGJhc2UpOw0KICAgICAgICAgICAgeGQgPSBtdWx0aXBseUludGVnZXIoeGQsIGssIGJhc2UpOw0KICAgICAgICAgICAgeUwgPSB5ZC5sZW5ndGg7DQogICAgICAgICAgICB4TCA9IHhkLmxlbmd0aDsNCiAgICAgICAgICB9DQoNCiAgICAgICAgICB4aSA9IHlMOw0KICAgICAgICAgIHJlbSA9IHhkLnNsaWNlKDAsIHlMKTsNCiAgICAgICAgICByZW1MID0gcmVtLmxlbmd0aDsNCg0KICAgICAgICAgIC8vIEFkZCB6ZXJvcyB0byBtYWtlIHJlbWFpbmRlciBhcyBsb25nIGFzIGRpdmlzb3IuDQogICAgICAgICAgZm9yICg7IHJlbUwgPCB5TDspIHJlbVtyZW1MKytdID0gMDsNCg0KICAgICAgICAgIHl6ID0geWQuc2xpY2UoKTsNCiAgICAgICAgICB5ei51bnNoaWZ0KDApOw0KICAgICAgICAgIHlkMCA9IHlkWzBdOw0KDQogICAgICAgICAgaWYgKHlkWzFdID49IGJhc2UgLyAyKSArK3lkMDsNCg0KICAgICAgICAgIGRvIHsNCiAgICAgICAgICAgIGsgPSAwOw0KDQogICAgICAgICAgICAvLyBDb21wYXJlIGRpdmlzb3IgYW5kIHJlbWFpbmRlci4NCiAgICAgICAgICAgIGNtcCA9IGNvbXBhcmUoeWQsIHJlbSwgeUwsIHJlbUwpOw0KDQogICAgICAgICAgICAvLyBJZiBkaXZpc29yIDwgcmVtYWluZGVyLg0KICAgICAgICAgICAgaWYgKGNtcCA8IDApIHsNCg0KICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdHJpYWwgZGlnaXQsIGsuDQogICAgICAgICAgICAgIHJlbTAgPSByZW1bMF07DQogICAgICAgICAgICAgIGlmICh5TCAhPSByZW1MKSByZW0wID0gcmVtMCAqIGJhc2UgKyAocmVtWzFdIHx8IDApOw0KDQogICAgICAgICAgICAgIC8vIGsgd2lsbCBiZSBob3cgbWFueSB0aW1lcyB0aGUgZGl2aXNvciBnb2VzIGludG8gdGhlIGN1cnJlbnQgcmVtYWluZGVyLg0KICAgICAgICAgICAgICBrID0gcmVtMCAvIHlkMCB8IDA7DQoNCiAgICAgICAgICAgICAgLy8gIEFsZ29yaXRobToNCiAgICAgICAgICAgICAgLy8gIDEuIHByb2R1Y3QgPSBkaXZpc29yICogdHJpYWwgZGlnaXQgKGspDQogICAgICAgICAgICAgIC8vICAyLiBpZiBwcm9kdWN0ID4gcmVtYWluZGVyOiBwcm9kdWN0IC09IGRpdmlzb3IsIGstLQ0KICAgICAgICAgICAgICAvLyAgMy4gcmVtYWluZGVyIC09IHByb2R1Y3QNCiAgICAgICAgICAgICAgLy8gIDQuIGlmIHByb2R1Y3Qgd2FzIDwgcmVtYWluZGVyIGF0IDI6DQogICAgICAgICAgICAgIC8vICAgIDUuIGNvbXBhcmUgbmV3IHJlbWFpbmRlciBhbmQgZGl2aXNvcg0KICAgICAgICAgICAgICAvLyAgICA2LiBJZiByZW1haW5kZXIgPiBkaXZpc29yOiByZW1haW5kZXIgLT0gZGl2aXNvciwgaysrDQoNCiAgICAgICAgICAgICAgaWYgKGsgPiAxKSB7DQogICAgICAgICAgICAgICAgaWYgKGsgPj0gYmFzZSkgayA9IGJhc2UgLSAxOw0KDQogICAgICAgICAgICAgICAgLy8gcHJvZHVjdCA9IGRpdmlzb3IgKiB0cmlhbCBkaWdpdC4NCiAgICAgICAgICAgICAgICBwcm9kID0gbXVsdGlwbHlJbnRlZ2VyKHlkLCBrLCBiYXNlKTsNCiAgICAgICAgICAgICAgICBwcm9kTCA9IHByb2QubGVuZ3RoOw0KICAgICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoOw0KDQogICAgICAgICAgICAgICAgLy8gQ29tcGFyZSBwcm9kdWN0IGFuZCByZW1haW5kZXIuDQogICAgICAgICAgICAgICAgY21wID0gY29tcGFyZShwcm9kLCByZW0sIHByb2RMLCByZW1MKTsNCg0KICAgICAgICAgICAgICAgIC8vIHByb2R1Y3QgPiByZW1haW5kZXIuDQogICAgICAgICAgICAgICAgaWYgKGNtcCA9PSAxKSB7DQogICAgICAgICAgICAgICAgICBrLS07DQoNCiAgICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSBwcm9kdWN0Lg0KICAgICAgICAgICAgICAgICAgc3VidHJhY3QocHJvZCwgeUwgPCBwcm9kTCA/IHl6IDogeWQsIHByb2RMLCBiYXNlKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0gZWxzZSB7DQoNCiAgICAgICAgICAgICAgICAvLyBjbXAgaXMgLTEuDQogICAgICAgICAgICAgICAgLy8gSWYgayBpcyAwLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNvbXBhcmUgeWQgYW5kIHJlbSBhZ2FpbiBiZWxvdywgc28gY2hhbmdlIGNtcCB0byAxDQogICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgaXQuIElmIGsgaXMgMSB0aGVyZSBpcyBhIG5lZWQgdG8gY29tcGFyZSB5ZCBhbmQgcmVtIGFnYWluIGJlbG93Lg0KICAgICAgICAgICAgICAgIGlmIChrID09IDApIGNtcCA9IGsgPSAxOw0KICAgICAgICAgICAgICAgIHByb2QgPSB5ZC5zbGljZSgpOw0KICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDsNCiAgICAgICAgICAgICAgaWYgKHByb2RMIDwgcmVtTCkgcHJvZC51bnNoaWZ0KDApOw0KDQogICAgICAgICAgICAgIC8vIFN1YnRyYWN0IHByb2R1Y3QgZnJvbSByZW1haW5kZXIuDQogICAgICAgICAgICAgIHN1YnRyYWN0KHJlbSwgcHJvZCwgcmVtTCwgYmFzZSk7DQoNCiAgICAgICAgICAgICAgLy8gSWYgcHJvZHVjdCB3YXMgPCBwcmV2aW91cyByZW1haW5kZXIuDQogICAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpIHsNCiAgICAgICAgICAgICAgICByZW1MID0gcmVtLmxlbmd0aDsNCg0KICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgZGl2aXNvciBhbmQgbmV3IHJlbWFpbmRlci4NCiAgICAgICAgICAgICAgICBjbXAgPSBjb21wYXJlKHlkLCByZW0sIHlMLCByZW1MKTsNCg0KICAgICAgICAgICAgICAgIC8vIElmIGRpdmlzb3IgPCBuZXcgcmVtYWluZGVyLCBzdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLg0KICAgICAgICAgICAgICAgIGlmIChjbXAgPCAxKSB7DQogICAgICAgICAgICAgICAgICBrKys7DQoNCiAgICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIuDQogICAgICAgICAgICAgICAgICBzdWJ0cmFjdChyZW0sIHlMIDwgcmVtTCA/IHl6IDogeWQsIHJlbUwsIGJhc2UpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT09IDApIHsNCiAgICAgICAgICAgICAgaysrOw0KICAgICAgICAgICAgICByZW0gPSBbMF07DQogICAgICAgICAgICB9ICAgIC8vIGlmIGNtcCA9PT0gMSwgayB3aWxsIGJlIDANCg0KICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXh0IGRpZ2l0LCBrLCB0byB0aGUgcmVzdWx0IGFycmF5Lg0KICAgICAgICAgICAgcWRbaSsrXSA9IGs7DQoNCiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVtYWluZGVyLg0KICAgICAgICAgICAgaWYgKGNtcCAmJiByZW1bMF0pIHsNCiAgICAgICAgICAgICAgcmVtW3JlbUwrK10gPSB4ZFt4aV0gfHwgMDsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIHJlbSA9IFt4ZFt4aV1dOw0KICAgICAgICAgICAgICByZW1MID0gMTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgIH0gd2hpbGUgKCh4aSsrIDwgeEwgfHwgcmVtWzBdICE9PSB2b2lkIDApICYmIHNkLS0pOw0KDQogICAgICAgICAgbW9yZSA9IHJlbVswXSAhPT0gdm9pZCAwOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gTGVhZGluZyB6ZXJvPw0KICAgICAgICBpZiAoIXFkWzBdKSBxZC5zaGlmdCgpOw0KICAgICAgfQ0KDQogICAgICAvLyBsb2dCYXNlIGlzIDEgd2hlbiBkaXZpZGUgaXMgYmVpbmcgdXNlZCBmb3IgYmFzZSBjb252ZXJzaW9uLg0KICAgICAgaWYgKGxvZ0Jhc2UgPT0gMSkgew0KICAgICAgICBxLmUgPSBlOw0KICAgICAgICBpbmV4YWN0ID0gbW9yZTsNCiAgICAgIH0gZWxzZSB7DQoNCiAgICAgICAgLy8gVG8gY2FsY3VsYXRlIHEuZSwgZmlyc3QgZ2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHFkWzBdLg0KICAgICAgICBmb3IgKGkgPSAxLCBrID0gcWRbMF07IGsgPj0gMTA7IGsgLz0gMTApIGkrKzsNCiAgICAgICAgcS5lID0gaSArIGUgKiBsb2dCYXNlIC0gMTsNCg0KICAgICAgICBmaW5hbGlzZShxLCBkcCA/IHByICsgcS5lICsgMSA6IHByLCBybSwgbW9yZSk7DQogICAgICB9DQoNCiAgICAgIHJldHVybiBxOw0KICAgIH07DQogIH0pKCk7DQoNCg0KICAvKg0KICAgKiBSb3VuZCBgeGAgdG8gYHNkYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm1gLg0KICAgKiBDaGVjayBmb3Igb3Zlci91bmRlci1mbG93Lg0KICAgKi8NCiAgIGZ1bmN0aW9uIGZpbmFsaXNlKHgsIHNkLCBybSwgaXNUcnVuY2F0ZWQpIHsNCiAgICB2YXIgZGlnaXRzLCBpLCBqLCBrLCByZCwgcm91bmRVcCwgdywgeGQsIHhkaSwNCiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yOw0KDQogICAgLy8gRG9uJ3Qgcm91bmQgaWYgc2QgaXMgbnVsbCBvciB1bmRlZmluZWQuDQogICAgb3V0OiBpZiAoc2QgIT0gbnVsbCkgew0KICAgICAgeGQgPSB4LmQ7DQoNCiAgICAgIC8vIEluZmluaXR5L05hTi4NCiAgICAgIGlmICgheGQpIHJldHVybiB4Ow0KDQogICAgICAvLyByZDogdGhlIHJvdW5kaW5nIGRpZ2l0LCBpLmUuIHRoZSBkaWdpdCBhZnRlciB0aGUgZGlnaXQgdGhhdCBtYXkgYmUgcm91bmRlZCB1cC4NCiAgICAgIC8vIHc6IHRoZSB3b3JkIG9mIHhkIGNvbnRhaW5pbmcgcmQsIGEgYmFzZSAxZTcgbnVtYmVyLg0KICAgICAgLy8geGRpOiB0aGUgaW5kZXggb2YgdyB3aXRoaW4geGQuDQogICAgICAvLyBkaWdpdHM6IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHcuDQogICAgICAvLyBpOiB3aGF0IHdvdWxkIGJlIHRoZSBpbmRleCBvZiByZCB3aXRoaW4gdyBpZiBhbGwgdGhlIG51bWJlcnMgd2VyZSA3IGRpZ2l0cyBsb25nIChpLmUuIGlmDQogICAgICAvLyB0aGV5IGhhZCBsZWFkaW5nIHplcm9zKQ0KICAgICAgLy8gajogaWYgPiAwLCB0aGUgYWN0dWFsIGluZGV4IG9mIHJkIHdpdGhpbiB3IChpZiA8IDAsIHJkIGlzIGEgbGVhZGluZyB6ZXJvKS4NCg0KICAgICAgLy8gR2V0IHRoZSBsZW5ndGggb2YgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGRpZ2l0cyBhcnJheSB4ZC4NCiAgICAgIGZvciAoZGlnaXRzID0gMSwgayA9IHhkWzBdOyBrID49IDEwOyBrIC89IDEwKSBkaWdpdHMrKzsNCiAgICAgIGkgPSBzZCAtIGRpZ2l0czsNCg0KICAgICAgLy8gSXMgdGhlIHJvdW5kaW5nIGRpZ2l0IGluIHRoZSBmaXJzdCB3b3JkIG9mIHhkPw0KICAgICAgaWYgKGkgPCAwKSB7DQogICAgICAgIGkgKz0gTE9HX0JBU0U7DQogICAgICAgIGogPSBzZDsNCiAgICAgICAgdyA9IHhkW3hkaSA9IDBdOw0KDQogICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiB3Lg0KICAgICAgICByZCA9IHcgLyBtYXRocG93KDEwLCBkaWdpdHMgLSBqIC0gMSkgJSAxMCB8IDA7DQogICAgICB9IGVsc2Ugew0KICAgICAgICB4ZGkgPSBNYXRoLmNlaWwoKGkgKyAxKSAvIExPR19CQVNFKTsNCiAgICAgICAgayA9IHhkLmxlbmd0aDsNCiAgICAgICAgaWYgKHhkaSA+PSBrKSB7DQogICAgICAgICAgaWYgKGlzVHJ1bmNhdGVkKSB7DQoNCiAgICAgICAgICAgIC8vIE5lZWRlZCBieSBgbmF0dXJhbEV4cG9uZW50aWFsYCwgYG5hdHVyYWxMb2dhcml0aG1gIGFuZCBgc3F1YXJlUm9vdGAuDQogICAgICAgICAgICBmb3IgKDsgaysrIDw9IHhkaTspIHhkLnB1c2goMCk7DQogICAgICAgICAgICB3ID0gcmQgPSAwOw0KICAgICAgICAgICAgZGlnaXRzID0gMTsNCiAgICAgICAgICAgIGkgJT0gTE9HX0JBU0U7DQogICAgICAgICAgICBqID0gaSAtIExPR19CQVNFICsgMTsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgYnJlYWsgb3V0Ow0KICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB3ID0gayA9IHhkW3hkaV07DQoNCiAgICAgICAgICAvLyBHZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2Ygdy4NCiAgICAgICAgICBmb3IgKGRpZ2l0cyA9IDE7IGsgPj0gMTA7IGsgLz0gMTApIGRpZ2l0cysrOw0KDQogICAgICAgICAgLy8gR2V0IHRoZSBpbmRleCBvZiByZCB3aXRoaW4gdy4NCiAgICAgICAgICBpICU9IExPR19CQVNFOw0KDQogICAgICAgICAgLy8gR2V0IHRoZSBpbmRleCBvZiByZCB3aXRoaW4gdywgYWRqdXN0ZWQgZm9yIGxlYWRpbmcgemVyb3MuDQogICAgICAgICAgLy8gVGhlIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIHcgaXMgZ2l2ZW4gYnkgTE9HX0JBU0UgLSBkaWdpdHMuDQogICAgICAgICAgaiA9IGkgLSBMT0dfQkFTRSArIGRpZ2l0czsNCg0KICAgICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiB3Lg0KICAgICAgICAgIHJkID0gaiA8IDAgPyAwIDogdyAvIG1hdGhwb3coMTAsIGRpZ2l0cyAtIGogLSAxKSAlIDEwIHwgMDsNCiAgICAgICAgfQ0KICAgICAgfQ0KDQogICAgICAvLyBBcmUgdGhlcmUgYW55IG5vbi16ZXJvIGRpZ2l0cyBhZnRlciB0aGUgcm91bmRpbmcgZGlnaXQ/DQogICAgICBpc1RydW5jYXRlZCA9IGlzVHJ1bmNhdGVkIHx8IHNkIDwgMCB8fA0KICAgICAgICB4ZFt4ZGkgKyAxXSAhPT0gdm9pZCAwIHx8IChqIDwgMCA/IHcgOiB3ICUgbWF0aHBvdygxMCwgZGlnaXRzIC0gaiAtIDEpKTsNCg0KICAgICAgLy8gVGhlIGV4cHJlc3Npb24gYHcgJSBtYXRocG93KDEwLCBkaWdpdHMgLSBqIC0gMSlgIHJldHVybnMgYWxsIHRoZSBkaWdpdHMgb2YgdyB0byB0aGUgcmlnaHQNCiAgICAgIC8vIG9mIHRoZSBkaWdpdCBhdCAobGVmdC10by1yaWdodCkgaW5kZXggaiwgZS5nLiBpZiB3IGlzIDkwODcxNCBhbmQgaiBpcyAyLCB0aGUgZXhwcmVzc2lvbg0KICAgICAgLy8gd2lsbCBnaXZlIDcxNC4NCg0KICAgICAgcm91bmRVcCA9IHJtIDwgNA0KICAgICAgICA/IChyZCB8fCBpc1RydW5jYXRlZCkgJiYgKHJtID09IDAgfHwgcm0gPT0gKHgucyA8IDAgPyAzIDogMikpDQogICAgICAgIDogcmQgPiA1IHx8IHJkID09IDUgJiYgKHJtID09IDQgfHwgaXNUcnVuY2F0ZWQgfHwgcm0gPT0gNiAmJg0KDQogICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgZGlnaXQgdG8gdGhlIGxlZnQgb2YgdGhlIHJvdW5kaW5nIGRpZ2l0IGlzIG9kZC4NCiAgICAgICAgICAoKGkgPiAwID8gaiA+IDAgPyB3IC8gbWF0aHBvdygxMCwgZGlnaXRzIC0gaikgOiAwIDogeGRbeGRpIC0gMV0pICUgMTApICYgMSB8fA0KICAgICAgICAgICAgcm0gPT0gKHgucyA8IDAgPyA4IDogNykpOw0KDQogICAgICBpZiAoc2QgPCAxIHx8ICF4ZFswXSkgew0KICAgICAgICB4ZC5sZW5ndGggPSAwOw0KICAgICAgICBpZiAocm91bmRVcCkgew0KDQogICAgICAgICAgLy8gQ29udmVydCBzZCB0byBkZWNpbWFsIHBsYWNlcy4NCiAgICAgICAgICBzZCAtPSB4LmUgKyAxOw0KDQogICAgICAgICAgLy8gMSwgMC4xLCAwLjAxLCAwLjAwMSwgMC4wMDAxIGV0Yy4NCiAgICAgICAgICB4ZFswXSA9IG1hdGhwb3coMTAsIChMT0dfQkFTRSAtIHNkICUgTE9HX0JBU0UpICUgTE9HX0JBU0UpOw0KICAgICAgICAgIHguZSA9IC1zZCB8fCAwOw0KICAgICAgICB9IGVsc2Ugew0KDQogICAgICAgICAgLy8gWmVyby4NCiAgICAgICAgICB4ZFswXSA9IHguZSA9IDA7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4geDsNCiAgICAgIH0NCg0KICAgICAgLy8gUmVtb3ZlIGV4Y2VzcyBkaWdpdHMuDQogICAgICBpZiAoaSA9PSAwKSB7DQogICAgICAgIHhkLmxlbmd0aCA9IHhkaTsNCiAgICAgICAgayA9IDE7DQogICAgICAgIHhkaS0tOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgeGQubGVuZ3RoID0geGRpICsgMTsNCiAgICAgICAgayA9IG1hdGhwb3coMTAsIExPR19CQVNFIC0gaSk7DQoNCiAgICAgICAgLy8gRS5nLiA1NjcwMCBiZWNvbWVzIDU2MDAwIGlmIDcgaXMgdGhlIHJvdW5kaW5nIGRpZ2l0Lg0KICAgICAgICAvLyBqID4gMCBtZWFucyBpID4gbnVtYmVyIG9mIGxlYWRpbmcgemVyb3Mgb2Ygdy4NCiAgICAgICAgeGRbeGRpXSA9IGogPiAwID8gKHcgLyBtYXRocG93KDEwLCBkaWdpdHMgLSBqKSAlIG1hdGhwb3coMTAsIGopIHwgMCkgKiBrIDogMDsNCiAgICAgIH0NCg0KICAgICAgaWYgKHJvdW5kVXApIHsNCiAgICAgICAgZm9yICg7Oykgew0KDQogICAgICAgICAgLy8gSXMgdGhlIGRpZ2l0IHRvIGJlIHJvdW5kZWQgdXAgaW4gdGhlIGZpcnN0IHdvcmQgb2YgeGQ/DQogICAgICAgICAgaWYgKHhkaSA9PSAwKSB7DQoNCiAgICAgICAgICAgIC8vIGkgd2lsbCBiZSB0aGUgbGVuZ3RoIG9mIHhkWzBdIGJlZm9yZSBrIGlzIGFkZGVkLg0KICAgICAgICAgICAgZm9yIChpID0gMSwgaiA9IHhkWzBdOyBqID49IDEwOyBqIC89IDEwKSBpKys7DQogICAgICAgICAgICBqID0geGRbMF0gKz0gazsNCiAgICAgICAgICAgIGZvciAoayA9IDE7IGogPj0gMTA7IGogLz0gMTApIGsrKzsNCg0KICAgICAgICAgICAgLy8gaWYgaSAhPSBrIHRoZSBsZW5ndGggaGFzIGluY3JlYXNlZC4NCiAgICAgICAgICAgIGlmIChpICE9IGspIHsNCiAgICAgICAgICAgICAgeC5lKys7DQogICAgICAgICAgICAgIGlmICh4ZFswXSA9PSBCQVNFKSB4ZFswXSA9IDE7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB4ZFt4ZGldICs9IGs7DQogICAgICAgICAgICBpZiAoeGRbeGRpXSAhPSBCQVNFKSBicmVhazsNCiAgICAgICAgICAgIHhkW3hkaS0tXSA9IDA7DQogICAgICAgICAgICBrID0gMTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCg0KICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLg0KICAgICAgZm9yIChpID0geGQubGVuZ3RoOyB4ZFstLWldID09PSAwOykgeGQucG9wKCk7DQogICAgfQ0KDQogICAgaWYgKGV4dGVybmFsKSB7DQoNCiAgICAgIC8vIE92ZXJmbG93Pw0KICAgICAgaWYgKHguZSA+IEN0b3IubWF4RSkgew0KDQogICAgICAgIC8vIEluZmluaXR5Lg0KICAgICAgICB4LmQgPSBudWxsOw0KICAgICAgICB4LmUgPSBOYU47DQoNCiAgICAgIC8vIFVuZGVyZmxvdz8NCiAgICAgIH0gZWxzZSBpZiAoeC5lIDwgQ3Rvci5taW5FKSB7DQoNCiAgICAgICAgLy8gWmVyby4NCiAgICAgICAgeC5lID0gMDsNCiAgICAgICAgeC5kID0gWzBdOw0KICAgICAgICAvLyBDdG9yLnVuZGVyZmxvdyA9IHRydWU7DQogICAgICB9IC8vIGVsc2UgQ3Rvci51bmRlcmZsb3cgPSBmYWxzZTsNCiAgICB9DQoNCiAgICByZXR1cm4geDsNCiAgfQ0KDQoNCiAgZnVuY3Rpb24gZmluaXRlVG9TdHJpbmcoeCwgaXNFeHAsIHNkKSB7DQogICAgaWYgKCF4LmlzRmluaXRlKCkpIHJldHVybiBub25GaW5pdGVUb1N0cmluZyh4KTsNCiAgICB2YXIgaywNCiAgICAgIGUgPSB4LmUsDQogICAgICBzdHIgPSBkaWdpdHNUb1N0cmluZyh4LmQpLA0KICAgICAgbGVuID0gc3RyLmxlbmd0aDsNCg0KICAgIGlmIChpc0V4cCkgew0KICAgICAgaWYgKHNkICYmIChrID0gc2QgLSBsZW4pID4gMCkgew0KICAgICAgICBzdHIgPSBzdHIuY2hhckF0KDApICsgJy4nICsgc3RyLnNsaWNlKDEpICsgZ2V0WmVyb1N0cmluZyhrKTsNCiAgICAgIH0gZWxzZSBpZiAobGVuID4gMSkgew0KICAgICAgICBzdHIgPSBzdHIuY2hhckF0KDApICsgJy4nICsgc3RyLnNsaWNlKDEpOw0KICAgICAgfQ0KDQogICAgICBzdHIgPSBzdHIgKyAoeC5lIDwgMCA/ICdlJyA6ICdlKycpICsgeC5lOw0KICAgIH0gZWxzZSBpZiAoZSA8IDApIHsNCiAgICAgIHN0ciA9ICcwLicgKyBnZXRaZXJvU3RyaW5nKC1lIC0gMSkgKyBzdHI7DQogICAgICBpZiAoc2QgJiYgKGsgPSBzZCAtIGxlbikgPiAwKSBzdHIgKz0gZ2V0WmVyb1N0cmluZyhrKTsNCiAgICB9IGVsc2UgaWYgKGUgPj0gbGVuKSB7DQogICAgICBzdHIgKz0gZ2V0WmVyb1N0cmluZyhlICsgMSAtIGxlbik7DQogICAgICBpZiAoc2QgJiYgKGsgPSBzZCAtIGUgLSAxKSA+IDApIHN0ciA9IHN0ciArICcuJyArIGdldFplcm9TdHJpbmcoayk7DQogICAgfSBlbHNlIHsNCiAgICAgIGlmICgoayA9IGUgKyAxKSA8IGxlbikgc3RyID0gc3RyLnNsaWNlKDAsIGspICsgJy4nICsgc3RyLnNsaWNlKGspOw0KICAgICAgaWYgKHNkICYmIChrID0gc2QgLSBsZW4pID4gMCkgew0KICAgICAgICBpZiAoZSArIDEgPT09IGxlbikgc3RyICs9ICcuJzsNCiAgICAgICAgc3RyICs9IGdldFplcm9TdHJpbmcoayk7DQogICAgICB9DQogICAgfQ0KDQogICAgcmV0dXJuIHN0cjsNCiAgfQ0KDQoNCiAgLy8gQ2FsY3VsYXRlIHRoZSBiYXNlIDEwIGV4cG9uZW50IGZyb20gdGhlIGJhc2UgMWU3IGV4cG9uZW50Lg0KICBmdW5jdGlvbiBnZXRCYXNlMTBFeHBvbmVudChkaWdpdHMsIGUpIHsNCiAgICB2YXIgdyA9IGRpZ2l0c1swXTsNCg0KICAgIC8vIEFkZCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgZGlnaXRzIGFycmF5Lg0KICAgIGZvciAoIGUgKj0gTE9HX0JBU0U7IHcgPj0gMTA7IHcgLz0gMTApIGUrKzsNCiAgICByZXR1cm4gZTsNCiAgfQ0KDQoNCiAgZnVuY3Rpb24gZ2V0TG4xMChDdG9yLCBzZCwgcHIpIHsNCiAgICBpZiAoc2QgPiBMTjEwX1BSRUNJU0lPTikgew0KDQogICAgICAvLyBSZXNldCBnbG9iYWwgc3RhdGUgaW4gY2FzZSB0aGUgZXhjZXB0aW9uIGlzIGNhdWdodC4NCiAgICAgIGV4dGVybmFsID0gdHJ1ZTsNCiAgICAgIGlmIChwcikgQ3Rvci5wcmVjaXNpb24gPSBwcjsNCiAgICAgIHRocm93IEVycm9yKHByZWNpc2lvbkxpbWl0RXhjZWVkZWQpOw0KICAgIH0NCiAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoTE4xMCksIHNkLCAxLCB0cnVlKTsNCiAgfQ0KDQoNCiAgZnVuY3Rpb24gZ2V0UGkoQ3Rvciwgc2QsIHJtKSB7DQogICAgaWYgKHNkID4gUElfUFJFQ0lTSU9OKSB0aHJvdyBFcnJvcihwcmVjaXNpb25MaW1pdEV4Y2VlZGVkKTsNCiAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoUEkpLCBzZCwgcm0sIHRydWUpOw0KICB9DQoNCg0KICBmdW5jdGlvbiBnZXRQcmVjaXNpb24oZGlnaXRzKSB7DQogICAgdmFyIHcgPSBkaWdpdHMubGVuZ3RoIC0gMSwNCiAgICAgIGxlbiA9IHcgKiBMT0dfQkFTRSArIDE7DQoNCiAgICB3ID0gZGlnaXRzW3ddOw0KDQogICAgLy8gSWYgbm9uLXplcm8uLi4NCiAgICBpZiAodykgew0KDQogICAgICAvLyBTdWJ0cmFjdCB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm9zIG9mIHRoZSBsYXN0IHdvcmQuDQogICAgICBmb3IgKDsgdyAlIDEwID09IDA7IHcgLz0gMTApIGxlbi0tOw0KDQogICAgICAvLyBBZGQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgdGhlIGZpcnN0IHdvcmQuDQogICAgICBmb3IgKHcgPSBkaWdpdHNbMF07IHcgPj0gMTA7IHcgLz0gMTApIGxlbisrOw0KICAgIH0NCg0KICAgIHJldHVybiBsZW47DQogIH0NCg0KDQogIGZ1bmN0aW9uIGdldFplcm9TdHJpbmcoaykgew0KICAgIHZhciB6cyA9ICcnOw0KICAgIGZvciAoOyBrLS07KSB6cyArPSAnMCc7DQogICAgcmV0dXJuIHpzOw0KICB9DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgRGVjaW1hbCBgeGAgdG8gdGhlIHBvd2VyIGBuYCwgd2hlcmUgYG5gIGlzIGFuDQogICAqIGludGVnZXIgb2YgdHlwZSBudW1iZXIuDQogICAqDQogICAqIEltcGxlbWVudHMgJ2V4cG9uZW50aWF0aW9uIGJ5IHNxdWFyaW5nJy4gQ2FsbGVkIGJ5IGBwb3dgIGFuZCBgcGFyc2VPdGhlcmAuDQogICAqDQogICAqLw0KICBmdW5jdGlvbiBpbnRQb3coQ3RvciwgeCwgbiwgcHIpIHsNCiAgICB2YXIgaXNUcnVuY2F0ZWQsDQogICAgICByID0gbmV3IEN0b3IoMSksDQoNCiAgICAgIC8vIE1heCBuIG9mIDkwMDcxOTkyNTQ3NDA5OTEgdGFrZXMgNTMgbG9vcCBpdGVyYXRpb25zLg0KICAgICAgLy8gTWF4aW11bSBkaWdpdHMgYXJyYXkgbGVuZ3RoOyBsZWF2ZXMgWzI4LCAzNF0gZ3VhcmQgZGlnaXRzLg0KICAgICAgayA9IE1hdGguY2VpbChwciAvIExPR19CQVNFICsgNCk7DQoNCiAgICBleHRlcm5hbCA9IGZhbHNlOw0KDQogICAgZm9yICg7Oykgew0KICAgICAgaWYgKG4gJSAyKSB7DQogICAgICAgIHIgPSByLnRpbWVzKHgpOw0KICAgICAgICBpZiAodHJ1bmNhdGUoci5kLCBrKSkgaXNUcnVuY2F0ZWQgPSB0cnVlOw0KICAgICAgfQ0KDQogICAgICBuID0gbWF0aGZsb29yKG4gLyAyKTsNCiAgICAgIGlmIChuID09PSAwKSB7DQoNCiAgICAgICAgLy8gVG8gZW5zdXJlIGNvcnJlY3Qgcm91bmRpbmcgd2hlbiByLmQgaXMgdHJ1bmNhdGVkLCBpbmNyZW1lbnQgdGhlIGxhc3Qgd29yZCBpZiBpdCBpcyB6ZXJvLg0KICAgICAgICBuID0gci5kLmxlbmd0aCAtIDE7DQogICAgICAgIGlmIChpc1RydW5jYXRlZCAmJiByLmRbbl0gPT09IDApICsrci5kW25dOw0KICAgICAgICBicmVhazsNCiAgICAgIH0NCg0KICAgICAgeCA9IHgudGltZXMoeCk7DQogICAgICB0cnVuY2F0ZSh4LmQsIGspOw0KICAgIH0NCg0KICAgIGV4dGVybmFsID0gdHJ1ZTsNCg0KICAgIHJldHVybiByOw0KICB9DQoNCg0KICBmdW5jdGlvbiBpc09kZChuKSB7DQogICAgcmV0dXJuIG4uZFtuLmQubGVuZ3RoIC0gMV0gJiAxOw0KICB9DQoNCg0KICAvKg0KICAgKiBIYW5kbGUgYG1heGAgYW5kIGBtaW5gLiBgbHRndGAgaXMgJ2x0JyBvciAnZ3QnLg0KICAgKi8NCiAgZnVuY3Rpb24gbWF4T3JNaW4oQ3RvciwgYXJncywgbHRndCkgew0KICAgIHZhciB5LA0KICAgICAgeCA9IG5ldyBDdG9yKGFyZ3NbMF0pLA0KICAgICAgaSA9IDA7DQoNCiAgICBmb3IgKDsgKytpIDwgYXJncy5sZW5ndGg7KSB7DQogICAgICB5ID0gbmV3IEN0b3IoYXJnc1tpXSk7DQogICAgICBpZiAoIXkucykgew0KICAgICAgICB4ID0geTsNCiAgICAgICAgYnJlYWs7DQogICAgICB9IGVsc2UgaWYgKHhbbHRndF0oeSkpIHsNCiAgICAgICAgeCA9IHk7DQogICAgICB9DQogICAgfQ0KDQogICAgcmV0dXJuIHg7DQogIH0NCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBuYXR1cmFsIGV4cG9uZW50aWFsIG9mIGB4YCByb3VuZGVkIHRvIGBzZGAgc2lnbmlmaWNhbnQNCiAgICogZGlnaXRzLg0KICAgKg0KICAgKiBUYXlsb3IvTWFjbGF1cmluIHNlcmllcy4NCiAgICoNCiAgICogZXhwKHgpID0geF4wLzAhICsgeF4xLzEhICsgeF4yLzIhICsgeF4zLzMhICsgLi4uDQogICAqDQogICAqIEFyZ3VtZW50IHJlZHVjdGlvbjoNCiAgICogICBSZXBlYXQgeCA9IHggLyAzMiwgayArPSA1LCB1bnRpbCB8eHwgPCAwLjENCiAgICogICBleHAoeCkgPSBleHAoeCAvIDJeayleKDJeaykNCiAgICoNCiAgICogUHJldmlvdXNseSwgdGhlIGFyZ3VtZW50IHdhcyBpbml0aWFsbHkgcmVkdWNlZCBieQ0KICAgKiBleHAoeCkgPSBleHAocikgKiAxMF5rICB3aGVyZSByID0geCAtIGsgKiBsbjEwLCBrID0gZmxvb3IoeCAvIGxuMTApDQogICAqIHRvIGZpcnN0IHB1dCByIGluIHRoZSByYW5nZSBbMCwgbG4xMF0sIGJlZm9yZSBkaXZpZGluZyBieSAzMiB1bnRpbCB8eHwgPCAwLjEsIGJ1dCB0aGlzIHdhcw0KICAgKiBmb3VuZCB0byBiZSBzbG93ZXIgdGhhbiBqdXN0IGRpdmlkaW5nIHJlcGVhdGVkbHkgYnkgMzIgYXMgYWJvdmUuDQogICAqDQogICAqIE1heCBpbnRlZ2VyIGFyZ3VtZW50OiBleHAoJzIwNzIzMjY1ODM2OTQ2NDEzJykgPSA2LjNlKzkwMDAwMDAwMDAwMDAwMDANCiAgICogTWluIGludGVnZXIgYXJndW1lbnQ6IGV4cCgnLTIwNzIzMjY1ODM2OTQ2NDExJykgPSAxLjJlLTkwMDAwMDAwMDAwMDAwMDANCiAgICogKE1hdGggb2JqZWN0IGludGVnZXIgbWluL21heDogTWF0aC5leHAoNzA5KSA9IDguMmUrMzA3LCBNYXRoLmV4cCgtNzQ1KSA9IDVlLTMyNCkNCiAgICoNCiAgICogIGV4cChJbmZpbml0eSkgID0gSW5maW5pdHkNCiAgICogIGV4cCgtSW5maW5pdHkpID0gMA0KICAgKiAgZXhwKE5hTikgICAgICAgPSBOYU4NCiAgICogIGV4cCjCsTApICAgICAgICA9IDENCiAgICoNCiAgICogIGV4cCh4KSBpcyBub24tdGVybWluYXRpbmcgZm9yIGFueSBmaW5pdGUsIG5vbi16ZXJvIHguDQogICAqDQogICAqICBUaGUgcmVzdWx0IHdpbGwgYWx3YXlzIGJlIGNvcnJlY3RseSByb3VuZGVkLg0KICAgKg0KICAgKi8NCiAgZnVuY3Rpb24gbmF0dXJhbEV4cG9uZW50aWFsKHgsIHNkKSB7DQogICAgdmFyIGRlbm9taW5hdG9yLCBndWFyZCwgaiwgcG93LCBzdW0sIHQsIHdwciwNCiAgICAgIHJlcCA9IDAsDQogICAgICBpID0gMCwNCiAgICAgIGsgPSAwLA0KICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsDQogICAgICBybSA9IEN0b3Iucm91bmRpbmcsDQogICAgICBwciA9IEN0b3IucHJlY2lzaW9uOw0KDQogICAgLy8gMC9OYU4vSW5maW5pdHk/DQogICAgaWYgKCF4LmQgfHwgIXguZFswXSB8fCB4LmUgPiAxNykgew0KDQogICAgICByZXR1cm4gbmV3IEN0b3IoeC5kDQogICAgICAgID8gIXguZFswXSA/IDEgOiB4LnMgPCAwID8gMCA6IDEgLyAwDQogICAgICAgIDogeC5zID8geC5zIDwgMCA/IDAgOiB4IDogMCAvIDApOw0KICAgIH0NCg0KICAgIGlmIChzZCA9PSBudWxsKSB7DQogICAgICBleHRlcm5hbCA9IGZhbHNlOw0KICAgICAgd3ByID0gcHI7DQogICAgfSBlbHNlIHsNCiAgICAgIHdwciA9IHNkOw0KICAgIH0NCg0KICAgIHQgPSBuZXcgQ3RvcigwLjAzMTI1KTsNCg0KICAgIC8vIHdoaWxlIGFicyh4KSA+PSAwLjENCiAgICB3aGlsZSAoeC5lID4gLTIpIHsNCg0KICAgICAgLy8geCA9IHggLyAyXjUNCiAgICAgIHggPSB4LnRpbWVzKHQpOw0KICAgICAgayArPSA1Ow0KICAgIH0NCg0KICAgIC8vIFVzZSAyICogbG9nMTAoMl5rKSArIDUgKGVtcGlyaWNhbGx5IGRlcml2ZWQpIHRvIGVzdGltYXRlIHRoZSBpbmNyZWFzZSBpbiBwcmVjaXNpb24NCiAgICAvLyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBmaXJzdCA0IHJvdW5kaW5nIGRpZ2l0cyBhcmUgY29ycmVjdC4NCiAgICBndWFyZCA9IE1hdGgubG9nKG1hdGhwb3coMiwgaykpIC8gTWF0aC5MTjEwICogMiArIDUgfCAwOw0KICAgIHdwciArPSBndWFyZDsNCiAgICBkZW5vbWluYXRvciA9IHBvdyA9IHN1bSA9IG5ldyBDdG9yKDEpOw0KICAgIEN0b3IucHJlY2lzaW9uID0gd3ByOw0KDQogICAgZm9yICg7Oykgew0KICAgICAgcG93ID0gZmluYWxpc2UocG93LnRpbWVzKHgpLCB3cHIsIDEpOw0KICAgICAgZGVub21pbmF0b3IgPSBkZW5vbWluYXRvci50aW1lcygrK2kpOw0KICAgICAgdCA9IHN1bS5wbHVzKGRpdmlkZShwb3csIGRlbm9taW5hdG9yLCB3cHIsIDEpKTsNCg0KICAgICAgaWYgKGRpZ2l0c1RvU3RyaW5nKHQuZCkuc2xpY2UoMCwgd3ByKSA9PT0gZGlnaXRzVG9TdHJpbmcoc3VtLmQpLnNsaWNlKDAsIHdwcikpIHsNCiAgICAgICAgaiA9IGs7DQogICAgICAgIHdoaWxlIChqLS0pIHN1bSA9IGZpbmFsaXNlKHN1bS50aW1lcyhzdW0pLCB3cHIsIDEpOw0KDQogICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgZmlyc3QgNCByb3VuZGluZyBkaWdpdHMgYXJlIFs0OV05OTkuDQogICAgICAgIC8vIElmIHNvLCByZXBlYXQgdGhlIHN1bW1hdGlvbiB3aXRoIGEgaGlnaGVyIHByZWNpc2lvbiwgb3RoZXJ3aXNlDQogICAgICAgIC8vIGUuZy4gd2l0aCBwcmVjaXNpb246IDE4LCByb3VuZGluZzogMQ0KICAgICAgICAvLyBleHAoMTguNDA0MjcyNDYyNTk1MDM0MDgzNTY3NzkzOTE5ODQzNzYxKSA9IDk4MzcyNTYwLjEyMjk5OTk5OTkgKHNob3VsZCBiZSA5ODM3MjU2MC4xMjMpDQogICAgICAgIC8vIGB3cHIgLSBndWFyZGAgaXMgdGhlIGluZGV4IG9mIGZpcnN0IHJvdW5kaW5nIGRpZ2l0Lg0KICAgICAgICBpZiAoc2QgPT0gbnVsbCkgew0KDQogICAgICAgICAgaWYgKHJlcCA8IDMgJiYgY2hlY2tSb3VuZGluZ0RpZ2l0cyhzdW0uZCwgd3ByIC0gZ3VhcmQsIHJtLCByZXApKSB7DQogICAgICAgICAgICBDdG9yLnByZWNpc2lvbiA9IHdwciArPSAxMDsNCiAgICAgICAgICAgIGRlbm9taW5hdG9yID0gcG93ID0gdCA9IG5ldyBDdG9yKDEpOw0KICAgICAgICAgICAgaSA9IDA7DQogICAgICAgICAgICByZXArKzsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuIGZpbmFsaXNlKHN1bSwgQ3Rvci5wcmVjaXNpb24gPSBwciwgcm0sIGV4dGVybmFsID0gdHJ1ZSk7DQogICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIEN0b3IucHJlY2lzaW9uID0gcHI7DQogICAgICAgICAgcmV0dXJuIHN1bTsNCiAgICAgICAgfQ0KICAgICAgfQ0KDQogICAgICBzdW0gPSB0Ow0KICAgIH0NCiAgfQ0KDQoNCiAgLyoNCiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIGB4YCByb3VuZGVkIHRvIGBzZGAgc2lnbmlmaWNhbnQNCiAgICogZGlnaXRzLg0KICAgKg0KICAgKiAgbG4oLW4pICAgICAgICA9IE5hTg0KICAgKiAgbG4oMCkgICAgICAgICA9IC1JbmZpbml0eQ0KICAgKiAgbG4oLTApICAgICAgICA9IC1JbmZpbml0eQ0KICAgKiAgbG4oMSkgICAgICAgICA9IDANCiAgICogIGxuKEluZmluaXR5KSAgPSBJbmZpbml0eQ0KICAgKiAgbG4oLUluZmluaXR5KSA9IE5hTg0KICAgKiAgbG4oTmFOKSAgICAgICA9IE5hTg0KICAgKg0KICAgKiAgbG4obikgKG4gIT0gMSkgaXMgbm9uLXRlcm1pbmF0aW5nLg0KICAgKg0KICAgKi8NCiAgZnVuY3Rpb24gbmF0dXJhbExvZ2FyaXRobSh5LCBzZCkgew0KICAgIHZhciBjLCBjMCwgZGVub21pbmF0b3IsIGUsIG51bWVyYXRvciwgcmVwLCBzdW0sIHQsIHdwciwgeDEsIHgyLA0KICAgICAgbiA9IDEsDQogICAgICBndWFyZCA9IDEwLA0KICAgICAgeCA9IHksDQogICAgICB4ZCA9IHguZCwNCiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLA0KICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nLA0KICAgICAgcHIgPSBDdG9yLnByZWNpc2lvbjsNCg0KICAgIC8vIElzIHggbmVnYXRpdmUgb3IgSW5maW5pdHksIE5hTiwgMCBvciAxPw0KICAgIGlmICh4LnMgPCAwIHx8ICF4ZCB8fCAheGRbMF0gfHwgIXguZSAmJiB4ZFswXSA9PSAxICYmIHhkLmxlbmd0aCA9PSAxKSB7DQogICAgICByZXR1cm4gbmV3IEN0b3IoeGQgJiYgIXhkWzBdID8gLTEgLyAwIDogeC5zICE9IDEgPyBOYU4gOiB4ZCA/IDAgOiB4KTsNCiAgICB9DQoNCiAgICBpZiAoc2QgPT0gbnVsbCkgew0KICAgICAgZXh0ZXJuYWwgPSBmYWxzZTsNCiAgICAgIHdwciA9IHByOw0KICAgIH0gZWxzZSB7DQogICAgICB3cHIgPSBzZDsNCiAgICB9DQoNCiAgICBDdG9yLnByZWNpc2lvbiA9IHdwciArPSBndWFyZDsNCiAgICBjID0gZGlnaXRzVG9TdHJpbmcoeGQpOw0KICAgIGMwID0gYy5jaGFyQXQoMCk7DQoNCiAgICBpZiAoTWF0aC5hYnMoZSA9IHguZSkgPCAxLjVlMTUpIHsNCg0KICAgICAgLy8gQXJndW1lbnQgcmVkdWN0aW9uLg0KICAgICAgLy8gVGhlIHNlcmllcyBjb252ZXJnZXMgZmFzdGVyIHRoZSBjbG9zZXIgdGhlIGFyZ3VtZW50IGlzIHRvIDEsIHNvIHVzaW5nDQogICAgICAvLyBsbihhXmIpID0gYiAqIGxuKGEpLCAgIGxuKGEpID0gbG4oYV5iKSAvIGINCiAgICAgIC8vIG11bHRpcGx5IHRoZSBhcmd1bWVudCBieSBpdHNlbGYgdW50aWwgdGhlIGxlYWRpbmcgZGlnaXRzIG9mIHRoZSBzaWduaWZpY2FuZCBhcmUgNywgOCwgOSwNCiAgICAgIC8vIDEwLCAxMSwgMTIgb3IgMTMsIHJlY29yZGluZyB0aGUgbnVtYmVyIG9mIG11bHRpcGxpY2F0aW9ucyBzbyB0aGUgc3VtIG9mIHRoZSBzZXJpZXMgY2FuDQogICAgICAvLyBsYXRlciBiZSBkaXZpZGVkIGJ5IHRoaXMgbnVtYmVyLCB0aGVuIHNlcGFyYXRlIG91dCB0aGUgcG93ZXIgb2YgMTAgdXNpbmcNCiAgICAgIC8vIGxuKGEqMTBeYikgPSBsbihhKSArIGIqbG4oMTApLg0KDQogICAgICAvLyBtYXggbiBpcyAyMSAoZ2l2ZXMgMC45LCAxLjAgb3IgMS4xKSAoOWUxNSAvIDIxID0gNC4yZTE0KS4NCiAgICAgIC8vd2hpbGUgKGMwIDwgOSAmJiBjMCAhPSAxIHx8IGMwID09IDEgJiYgYy5jaGFyQXQoMSkgPiAxKSB7DQogICAgICAvLyBtYXggbiBpcyA2IChnaXZlcyAwLjcgLSAxLjMpDQogICAgICB3aGlsZSAoYzAgPCA3ICYmIGMwICE9IDEgfHwgYzAgPT0gMSAmJiBjLmNoYXJBdCgxKSA+IDMpIHsNCiAgICAgICAgeCA9IHgudGltZXMoeSk7DQogICAgICAgIGMgPSBkaWdpdHNUb1N0cmluZyh4LmQpOw0KICAgICAgICBjMCA9IGMuY2hhckF0KDApOw0KICAgICAgICBuKys7DQogICAgICB9DQoNCiAgICAgIGUgPSB4LmU7DQoNCiAgICAgIGlmIChjMCA+IDEpIHsNCiAgICAgICAgeCA9IG5ldyBDdG9yKCcwLicgKyBjKTsNCiAgICAgICAgZSsrOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgeCA9IG5ldyBDdG9yKGMwICsgJy4nICsgYy5zbGljZSgxKSk7DQogICAgICB9DQogICAgfSBlbHNlIHsNCg0KICAgICAgLy8gVGhlIGFyZ3VtZW50IHJlZHVjdGlvbiBtZXRob2QgYWJvdmUgbWF5IHJlc3VsdCBpbiBvdmVyZmxvdyBpZiB0aGUgYXJndW1lbnQgeSBpcyBhIG1hc3NpdmUNCiAgICAgIC8vIG51bWJlciB3aXRoIGV4cG9uZW50ID49IDE1MDAwMDAwMDAwMDAwMDAgKDllMTUgLyA2ID0gMS41ZTE1KSwgc28gaW5zdGVhZCByZWNhbGwgdGhpcw0KICAgICAgLy8gZnVuY3Rpb24gdXNpbmcgbG4oeCoxMF5lKSA9IGxuKHgpICsgZSpsbigxMCkuDQogICAgICB0ID0gZ2V0TG4xMChDdG9yLCB3cHIgKyAyLCBwcikudGltZXMoZSArICcnKTsNCiAgICAgIHggPSBuYXR1cmFsTG9nYXJpdGhtKG5ldyBDdG9yKGMwICsgJy4nICsgYy5zbGljZSgxKSksIHdwciAtIGd1YXJkKS5wbHVzKHQpOw0KICAgICAgQ3Rvci5wcmVjaXNpb24gPSBwcjsNCg0KICAgICAgcmV0dXJuIHNkID09IG51bGwgPyBmaW5hbGlzZSh4LCBwciwgcm0sIGV4dGVybmFsID0gdHJ1ZSkgOiB4Ow0KICAgIH0NCg0KICAgIC8vIHgxIGlzIHggcmVkdWNlZCB0byBhIHZhbHVlIG5lYXIgMS4NCiAgICB4MSA9IHg7DQoNCiAgICAvLyBUYXlsb3Igc2VyaWVzLg0KICAgIC8vIGxuKHkpID0gbG4oKDEgKyB4KS8oMSAtIHgpKSA9IDIoeCArIHheMy8zICsgeF41LzUgKyB4XjcvNyArIC4uLikNCiAgICAvLyB3aGVyZSB4ID0gKHkgLSAxKS8oeSArIDEpICAgICh8eHwgPCAxKQ0KICAgIHN1bSA9IG51bWVyYXRvciA9IHggPSBkaXZpZGUoeC5taW51cygxKSwgeC5wbHVzKDEpLCB3cHIsIDEpOw0KICAgIHgyID0gZmluYWxpc2UoeC50aW1lcyh4KSwgd3ByLCAxKTsNCiAgICBkZW5vbWluYXRvciA9IDM7DQoNCiAgICBmb3IgKDs7KSB7DQogICAgICBudW1lcmF0b3IgPSBmaW5hbGlzZShudW1lcmF0b3IudGltZXMoeDIpLCB3cHIsIDEpOw0KICAgICAgdCA9IHN1bS5wbHVzKGRpdmlkZShudW1lcmF0b3IsIG5ldyBDdG9yKGRlbm9taW5hdG9yKSwgd3ByLCAxKSk7DQoNCiAgICAgIGlmIChkaWdpdHNUb1N0cmluZyh0LmQpLnNsaWNlKDAsIHdwcikgPT09IGRpZ2l0c1RvU3RyaW5nKHN1bS5kKS5zbGljZSgwLCB3cHIpKSB7DQogICAgICAgIHN1bSA9IHN1bS50aW1lcygyKTsNCg0KICAgICAgICAvLyBSZXZlcnNlIHRoZSBhcmd1bWVudCByZWR1Y3Rpb24uIENoZWNrIHRoYXQgZSBpcyBub3QgMCBiZWNhdXNlLCBiZXNpZGVzIHByZXZlbnRpbmcgYW4NCiAgICAgICAgLy8gdW5uZWNlc3NhcnkgY2FsY3VsYXRpb24sIC0wICsgMCA9ICswIGFuZCB0byBlbnN1cmUgY29ycmVjdCByb3VuZGluZyAtMCBuZWVkcyB0byBzdGF5IC0wLg0KICAgICAgICBpZiAoZSAhPT0gMCkgc3VtID0gc3VtLnBsdXMoZ2V0TG4xMChDdG9yLCB3cHIgKyAyLCBwcikudGltZXMoZSArICcnKSk7DQogICAgICAgIHN1bSA9IGRpdmlkZShzdW0sIG5ldyBDdG9yKG4pLCB3cHIsIDEpOw0KDQogICAgICAgIC8vIElzIHJtID4gMyBhbmQgdGhlIGZpcnN0IDQgcm91bmRpbmcgZGlnaXRzIDQ5OTksIG9yIHJtIDwgNCAob3IgdGhlIHN1bW1hdGlvbiBoYXMNCiAgICAgICAgLy8gYmVlbiByZXBlYXRlZCBwcmV2aW91c2x5KSBhbmQgdGhlIGZpcnN0IDQgcm91bmRpbmcgZGlnaXRzIDk5OTk/DQogICAgICAgIC8vIElmIHNvLCByZXN0YXJ0IHRoZSBzdW1tYXRpb24gd2l0aCBhIGhpZ2hlciBwcmVjaXNpb24sIG90aGVyd2lzZQ0KICAgICAgICAvLyBlLmcuIHdpdGggcHJlY2lzaW9uOiAxMiwgcm91bmRpbmc6IDENCiAgICAgICAgLy8gbG4oMTM1NTIwMDI4LjYxMjYwOTE3MTQyNjUzODE1MzMpID0gMTguNzI0NjI5OTk5OSB3aGVuIGl0IHNob3VsZCBiZSAxOC43MjQ2My4NCiAgICAgICAgLy8gYHdwciAtIGd1YXJkYCBpcyB0aGUgaW5kZXggb2YgZmlyc3Qgcm91bmRpbmcgZGlnaXQuDQogICAgICAgIGlmIChzZCA9PSBudWxsKSB7DQogICAgICAgICAgaWYgKGNoZWNrUm91bmRpbmdEaWdpdHMoc3VtLmQsIHdwciAtIGd1YXJkLCBybSwgcmVwKSkgew0KICAgICAgICAgICAgQ3Rvci5wcmVjaXNpb24gPSB3cHIgKz0gZ3VhcmQ7DQogICAgICAgICAgICB0ID0gbnVtZXJhdG9yID0geCA9IGRpdmlkZSh4MS5taW51cygxKSwgeDEucGx1cygxKSwgd3ByLCAxKTsNCiAgICAgICAgICAgIHgyID0gZmluYWxpc2UoeC50aW1lcyh4KSwgd3ByLCAxKTsNCiAgICAgICAgICAgIGRlbm9taW5hdG9yID0gcmVwID0gMTsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuIGZpbmFsaXNlKHN1bSwgQ3Rvci5wcmVjaXNpb24gPSBwciwgcm0sIGV4dGVybmFsID0gdHJ1ZSk7DQogICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIEN0b3IucHJlY2lzaW9uID0gcHI7DQogICAgICAgICAgcmV0dXJuIHN1bTsNCiAgICAgICAgfQ0KICAgICAgfQ0KDQogICAgICBzdW0gPSB0Ow0KICAgICAgZGVub21pbmF0b3IgKz0gMjsNCiAgICB9DQogIH0NCg0KDQogIC8vIMKxSW5maW5pdHksIE5hTi4NCiAgZnVuY3Rpb24gbm9uRmluaXRlVG9TdHJpbmcoeCkgew0KICAgIC8vIFVuc2lnbmVkLg0KICAgIHJldHVybiBTdHJpbmcoeC5zICogeC5zIC8gMCk7DQogIH0NCg0KDQogIC8qDQogICAqIFBhcnNlIHRoZSB2YWx1ZSBvZiBhIG5ldyBEZWNpbWFsIGB4YCBmcm9tIHN0cmluZyBgc3RyYC4NCiAgICovDQogIGZ1bmN0aW9uIHBhcnNlRGVjaW1hbCh4LCBzdHIpIHsNCiAgICB2YXIgZSwgaSwgbGVuOw0KDQogICAgLy8gRGVjaW1hbCBwb2ludD8NCiAgICBpZiAoKGUgPSBzdHIuaW5kZXhPZignLicpKSA+IC0xKSBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTsNCg0KICAgIC8vIEV4cG9uZW50aWFsIGZvcm0/DQogICAgaWYgKChpID0gc3RyLnNlYXJjaCgvZS9pKSkgPiAwKSB7DQoNCiAgICAgIC8vIERldGVybWluZSBleHBvbmVudC4NCiAgICAgIGlmIChlIDwgMCkgZSA9IGk7DQogICAgICBlICs9ICtzdHIuc2xpY2UoaSArIDEpOw0KICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBpKTsNCiAgICB9IGVsc2UgaWYgKGUgPCAwKSB7DQoNCiAgICAgIC8vIEludGVnZXIuDQogICAgICBlID0gc3RyLmxlbmd0aDsNCiAgICB9DQoNCiAgICAvLyBEZXRlcm1pbmUgbGVhZGluZyB6ZXJvcy4NCiAgICBmb3IgKGkgPSAwOyBzdHIuY2hhckNvZGVBdChpKSA9PT0gNDg7IGkrKyk7DQoNCiAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuDQogICAgZm9yIChsZW4gPSBzdHIubGVuZ3RoOyBzdHIuY2hhckNvZGVBdChsZW4gLSAxKSA9PT0gNDg7IC0tbGVuKTsNCiAgICBzdHIgPSBzdHIuc2xpY2UoaSwgbGVuKTsNCg0KICAgIGlmIChzdHIpIHsNCiAgICAgIGxlbiAtPSBpOw0KICAgICAgeC5lID0gZSA9IGUgLSBpIC0gMTsNCiAgICAgIHguZCA9IFtdOw0KDQogICAgICAvLyBUcmFuc2Zvcm0gYmFzZQ0KDQogICAgICAvLyBlIGlzIHRoZSBiYXNlIDEwIGV4cG9uZW50Lg0KICAgICAgLy8gaSBpcyB3aGVyZSB0byBzbGljZSBzdHIgdG8gZ2V0IHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBkaWdpdHMgYXJyYXkuDQogICAgICBpID0gKGUgKyAxKSAlIExPR19CQVNFOw0KICAgICAgaWYgKGUgPCAwKSBpICs9IExPR19CQVNFOw0KDQogICAgICBpZiAoaSA8IGxlbikgew0KICAgICAgICBpZiAoaSkgeC5kLnB1c2goK3N0ci5zbGljZSgwLCBpKSk7DQogICAgICAgIGZvciAobGVuIC09IExPR19CQVNFOyBpIDwgbGVuOykgeC5kLnB1c2goK3N0ci5zbGljZShpLCBpICs9IExPR19CQVNFKSk7DQogICAgICAgIHN0ciA9IHN0ci5zbGljZShpKTsNCiAgICAgICAgaSA9IExPR19CQVNFIC0gc3RyLmxlbmd0aDsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIGkgLT0gbGVuOw0KICAgICAgfQ0KDQogICAgICBmb3IgKDsgaS0tOykgc3RyICs9ICcwJzsNCiAgICAgIHguZC5wdXNoKCtzdHIpOw0KDQogICAgICBpZiAoZXh0ZXJuYWwpIHsNCg0KICAgICAgICAvLyBPdmVyZmxvdz8NCiAgICAgICAgaWYgKHguZSA+IHguY29uc3RydWN0b3IubWF4RSkgew0KDQogICAgICAgICAgLy8gSW5maW5pdHkuDQogICAgICAgICAgeC5kID0gbnVsbDsNCiAgICAgICAgICB4LmUgPSBOYU47DQoNCiAgICAgICAgLy8gVW5kZXJmbG93Pw0KICAgICAgICB9IGVsc2UgaWYgKHguZSA8IHguY29uc3RydWN0b3IubWluRSkgew0KDQogICAgICAgICAgLy8gWmVyby4NCiAgICAgICAgICB4LmUgPSAwOw0KICAgICAgICAgIHguZCA9IFswXTsNCiAgICAgICAgICAvLyB4LmNvbnN0cnVjdG9yLnVuZGVyZmxvdyA9IHRydWU7DQogICAgICAgIH0gLy8gZWxzZSB4LmNvbnN0cnVjdG9yLnVuZGVyZmxvdyA9IGZhbHNlOw0KICAgICAgfQ0KICAgIH0gZWxzZSB7DQoNCiAgICAgIC8vIFplcm8uDQogICAgICB4LmUgPSAwOw0KICAgICAgeC5kID0gWzBdOw0KICAgIH0NCg0KICAgIHJldHVybiB4Ow0KICB9DQoNCg0KICAvKg0KICAgKiBQYXJzZSB0aGUgdmFsdWUgb2YgYSBuZXcgRGVjaW1hbCBgeGAgZnJvbSBhIHN0cmluZyBgc3RyYCwgd2hpY2ggaXMgbm90IGEgZGVjaW1hbCB2YWx1ZS4NCiAgICovDQogIGZ1bmN0aW9uIHBhcnNlT3RoZXIoeCwgc3RyKSB7DQogICAgdmFyIGJhc2UsIEN0b3IsIGRpdmlzb3IsIGksIGlzRmxvYXQsIGxlbiwgcCwgeGQsIHhlOw0KDQogICAgaWYgKHN0ciA9PT0gJ0luZmluaXR5JyB8fCBzdHIgPT09ICdOYU4nKSB7DQogICAgICBpZiAoIStzdHIpIHgucyA9IE5hTjsNCiAgICAgIHguZSA9IE5hTjsNCiAgICAgIHguZCA9IG51bGw7DQogICAgICByZXR1cm4geDsNCiAgICB9DQoNCiAgICBpZiAoaXNIZXgudGVzdChzdHIpKSAgew0KICAgICAgYmFzZSA9IDE2Ow0KICAgICAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7DQogICAgfSBlbHNlIGlmIChpc0JpbmFyeS50ZXN0KHN0cikpICB7DQogICAgICBiYXNlID0gMjsNCiAgICB9IGVsc2UgaWYgKGlzT2N0YWwudGVzdChzdHIpKSAgew0KICAgICAgYmFzZSA9IDg7DQogICAgfSBlbHNlIHsNCiAgICAgIHRocm93IEVycm9yKGludmFsaWRBcmd1bWVudCArIHN0cik7DQogICAgfQ0KDQogICAgLy8gSXMgdGhlcmUgYSBiaW5hcnkgZXhwb25lbnQgcGFydD8NCiAgICBpID0gc3RyLnNlYXJjaCgvcC9pKTsNCg0KICAgIGlmIChpID4gMCkgew0KICAgICAgcCA9ICtzdHIuc2xpY2UoaSArIDEpOw0KICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygyLCBpKTsNCiAgICB9IGVsc2Ugew0KICAgICAgc3RyID0gc3RyLnNsaWNlKDIpOw0KICAgIH0NCg0KICAgIC8vIENvbnZlcnQgYHN0cmAgYXMgYW4gaW50ZWdlciB0aGVuIGRpdmlkZSB0aGUgcmVzdWx0IGJ5IGBiYXNlYCByYWlzZWQgdG8gYSBwb3dlciBzdWNoIHRoYXQgdGhlDQogICAgLy8gZnJhY3Rpb24gcGFydCB3aWxsIGJlIHJlc3RvcmVkLg0KICAgIGkgPSBzdHIuaW5kZXhPZignLicpOw0KICAgIGlzRmxvYXQgPSBpID49IDA7DQogICAgQ3RvciA9IHguY29uc3RydWN0b3I7DQoNCiAgICBpZiAoaXNGbG9hdCkgew0KICAgICAgc3RyID0gc3RyLnJlcGxhY2UoJy4nLCAnJyk7DQogICAgICBsZW4gPSBzdHIubGVuZ3RoOw0KICAgICAgaSA9IGxlbiAtIGk7DQoNCiAgICAgIC8vIGxvZ1sxMF0oMTYpID0gMS4yMDQxLi4uICwgbG9nWzEwXSg4OCkgPSAxLjk0NDQuLi4uDQogICAgICBkaXZpc29yID0gaW50UG93KEN0b3IsIG5ldyBDdG9yKGJhc2UpLCBpLCBpICogMik7DQogICAgfQ0KDQogICAgeGQgPSBjb252ZXJ0QmFzZShzdHIsIGJhc2UsIEJBU0UpOw0KICAgIHhlID0geGQubGVuZ3RoIC0gMTsNCg0KICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy4NCiAgICBmb3IgKGkgPSB4ZTsgeGRbaV0gPT09IDA7IC0taSkgeGQucG9wKCk7DQogICAgaWYgKGkgPCAwKSByZXR1cm4gbmV3IEN0b3IoeC5zICogMCk7DQogICAgeC5lID0gZ2V0QmFzZTEwRXhwb25lbnQoeGQsIHhlKTsNCiAgICB4LmQgPSB4ZDsNCiAgICBleHRlcm5hbCA9IGZhbHNlOw0KDQogICAgLy8gQXQgd2hhdCBwcmVjaXNpb24gdG8gcGVyZm9ybSB0aGUgZGl2aXNpb24gdG8gZW5zdXJlIGV4YWN0IGNvbnZlcnNpb24/DQogICAgLy8gbWF4RGVjaW1hbEludGVnZXJQYXJ0RGlnaXRDb3VudCA9IGNlaWwobG9nWzEwXShiKSAqIG90aGVyQmFzZUludGVnZXJQYXJ0RGlnaXRDb3VudCkNCiAgICAvLyBsb2dbMTBdKDIpID0gMC4zMDEwMywgbG9nWzEwXSg4KSA9IDAuOTAzMDksIGxvZ1sxMF0oMTYpID0gMS4yMDQxMg0KICAgIC8vIEUuZy4gY2VpbCgxLjIgKiAzKSA9IDQsIHNvIHVwIHRvIDQgZGVjaW1hbCBkaWdpdHMgYXJlIG5lZWRlZCB0byByZXByZXNlbnQgMyBoZXggaW50IGRpZ2l0cy4NCiAgICAvLyBtYXhEZWNpbWFsRnJhY3Rpb25QYXJ0RGlnaXRDb3VudCA9IHtIZXg6NHxPY3Q6M3xCaW46MX0gKiBvdGhlckJhc2VGcmFjdGlvblBhcnREaWdpdENvdW50DQogICAgLy8gVGhlcmVmb3JlIHVzaW5nIDQgKiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBzdHIgd2lsbCBhbHdheXMgYmUgZW5vdWdoLg0KICAgIGlmIChpc0Zsb2F0KSB4ID0gZGl2aWRlKHgsIGRpdmlzb3IsIGxlbiAqIDQpOw0KDQogICAgLy8gTXVsdGlwbHkgYnkgdGhlIGJpbmFyeSBleHBvbmVudCBwYXJ0IGlmIHByZXNlbnQuDQogICAgaWYgKHApIHggPSB4LnRpbWVzKE1hdGguYWJzKHApIDwgNTQgPyBtYXRocG93KDIsIHApIDogRGVjaW1hbC5wb3coMiwgcCkpOw0KICAgIGV4dGVybmFsID0gdHJ1ZTsNCg0KICAgIHJldHVybiB4Ow0KICB9DQoNCg0KICAvKg0KICAgKiBzaW4oeCkgPSB4IC0geF4zLzMhICsgeF41LzUhIC0gLi4uDQogICAqIHx4fCA8IHBpLzINCiAgICoNCiAgICovDQogIGZ1bmN0aW9uIHNpbmUoQ3RvciwgeCkgew0KICAgIHZhciBrLA0KICAgICAgbGVuID0geC5kLmxlbmd0aDsNCg0KICAgIGlmIChsZW4gPCAzKSByZXR1cm4gdGF5bG9yU2VyaWVzKEN0b3IsIDIsIHgsIHgpOw0KDQogICAgLy8gQXJndW1lbnQgcmVkdWN0aW9uOiBzaW4oNXgpID0gMTYqc2luXjUoeCkgLSAyMCpzaW5eMyh4KSArIDUqc2luKHgpDQogICAgLy8gaS5lLiBzaW4oeCkgPSAxNipzaW5eNSh4LzUpIC0gMjAqc2luXjMoeC81KSArIDUqc2luKHgvNSkNCiAgICAvLyBhbmQgIHNpbih4KSA9IHNpbih4LzUpKDUgKyBzaW5eMih4LzUpKDE2c2luXjIoeC81KSAtIDIwKSkNCg0KICAgIC8vIEVzdGltYXRlIHRoZSBvcHRpbXVtIG51bWJlciBvZiB0aW1lcyB0byB1c2UgdGhlIGFyZ3VtZW50IHJlZHVjdGlvbi4NCiAgICBrID0gMS40ICogTWF0aC5zcXJ0KGxlbik7DQogICAgayA9IGsgPiAxNiA/IDE2IDogayB8IDA7DQoNCiAgICB4ID0geC50aW1lcygxIC8gdGlueVBvdyg1LCBrKSk7DQogICAgeCA9IHRheWxvclNlcmllcyhDdG9yLCAyLCB4LCB4KTsNCg0KICAgIC8vIFJldmVyc2UgYXJndW1lbnQgcmVkdWN0aW9uDQogICAgdmFyIHNpbjJfeCwNCiAgICAgIGQ1ID0gbmV3IEN0b3IoNSksDQogICAgICBkMTYgPSBuZXcgQ3RvcigxNiksDQogICAgICBkMjAgPSBuZXcgQ3RvcigyMCk7DQogICAgZm9yICg7IGstLTspIHsNCiAgICAgIHNpbjJfeCA9IHgudGltZXMoeCk7DQogICAgICB4ID0geC50aW1lcyhkNS5wbHVzKHNpbjJfeC50aW1lcyhkMTYudGltZXMoc2luMl94KS5taW51cyhkMjApKSkpOw0KICAgIH0NCg0KICAgIHJldHVybiB4Ow0KICB9DQoNCg0KICAvLyBDYWxjdWxhdGUgVGF5bG9yIHNlcmllcyBmb3IgYGNvc2AsIGBjb3NoYCwgYHNpbmAgYW5kIGBzaW5oYC4NCiAgZnVuY3Rpb24gdGF5bG9yU2VyaWVzKEN0b3IsIG4sIHgsIHksIGlzSHlwZXJib2xpYykgew0KICAgIHZhciBqLCB0LCB1LCB4MiwNCiAgICAgIGkgPSAxLA0KICAgICAgcHIgPSBDdG9yLnByZWNpc2lvbiwNCiAgICAgIGsgPSBNYXRoLmNlaWwocHIgLyBMT0dfQkFTRSk7DQoNCiAgICBleHRlcm5hbCA9IGZhbHNlOw0KICAgIHgyID0geC50aW1lcyh4KTsNCiAgICB1ID0gbmV3IEN0b3IoeSk7DQoNCiAgICBmb3IgKDs7KSB7DQogICAgICB0ID0gZGl2aWRlKHUudGltZXMoeDIpLCBuZXcgQ3RvcihuKysgKiBuKyspLCBwciwgMSk7DQogICAgICB1ID0gaXNIeXBlcmJvbGljID8geS5wbHVzKHQpIDogeS5taW51cyh0KTsNCiAgICAgIHkgPSBkaXZpZGUodC50aW1lcyh4MiksIG5ldyBDdG9yKG4rKyAqIG4rKyksIHByLCAxKTsNCiAgICAgIHQgPSB1LnBsdXMoeSk7DQoNCiAgICAgIGlmICh0LmRba10gIT09IHZvaWQgMCkgew0KICAgICAgICBmb3IgKGogPSBrOyB0LmRbal0gPT09IHUuZFtqXSAmJiBqLS07KTsNCiAgICAgICAgaWYgKGogPT0gLTEpIGJyZWFrOw0KICAgICAgfQ0KDQogICAgICBqID0gdTsNCiAgICAgIHUgPSB5Ow0KICAgICAgeSA9IHQ7DQogICAgICB0ID0gajsNCiAgICAgIGkrKzsNCiAgICB9DQoNCiAgICBleHRlcm5hbCA9IHRydWU7DQogICAgdC5kLmxlbmd0aCA9IGsgKyAxOw0KDQogICAgcmV0dXJuIHQ7DQogIH0NCg0KDQogIC8vIEV4cG9uZW50IGUgbXVzdCBiZSBwb3NpdGl2ZSBhbmQgbm9uLXplcm8uDQogIGZ1bmN0aW9uIHRpbnlQb3coYiwgZSkgew0KICAgIHZhciBuID0gYjsNCiAgICB3aGlsZSAoLS1lKSBuICo9IGI7DQogICAgcmV0dXJuIG47DQogIH0NCg0KDQogIC8vIFJldHVybiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYHhgIHJlZHVjZWQgdG8gbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGhhbGYgcGkuDQogIGZ1bmN0aW9uIHRvTGVzc1RoYW5IYWxmUGkoQ3RvciwgeCkgew0KICAgIHZhciB0LA0KICAgICAgaXNOZWcgPSB4LnMgPCAwLA0KICAgICAgcGkgPSBnZXRQaShDdG9yLCBDdG9yLnByZWNpc2lvbiwgMSksDQogICAgICBoYWxmUGkgPSBwaS50aW1lcygwLjUpOw0KDQogICAgeCA9IHguYWJzKCk7DQoNCiAgICBpZiAoeC5sdGUoaGFsZlBpKSkgew0KICAgICAgcXVhZHJhbnQgPSBpc05lZyA/IDQgOiAxOw0KICAgICAgcmV0dXJuIHg7DQogICAgfQ0KDQogICAgdCA9IHguZGl2VG9JbnQocGkpOw0KDQogICAgaWYgKHQuaXNaZXJvKCkpIHsNCiAgICAgIHF1YWRyYW50ID0gaXNOZWcgPyAzIDogMjsNCiAgICB9IGVsc2Ugew0KICAgICAgeCA9IHgubWludXModC50aW1lcyhwaSkpOw0KDQogICAgICAvLyAwIDw9IHggPCBwaQ0KICAgICAgaWYgKHgubHRlKGhhbGZQaSkpIHsNCiAgICAgICAgcXVhZHJhbnQgPSBpc09kZCh0KSA/IChpc05lZyA/IDIgOiAzKSA6IChpc05lZyA/IDQgOiAxKTsNCiAgICAgICAgcmV0dXJuIHg7DQogICAgICB9DQoNCiAgICAgIHF1YWRyYW50ID0gaXNPZGQodCkgPyAoaXNOZWcgPyAxIDogNCkgOiAoaXNOZWcgPyAzIDogMik7DQogICAgfQ0KDQogICAgcmV0dXJuIHgubWludXMocGkpLmFicygpOw0KICB9DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIERlY2ltYWwgYHhgIGFzIGEgc3RyaW5nIGluIGJhc2UgYGJhc2VPdXRgLg0KICAgKg0KICAgKiBJZiB0aGUgb3B0aW9uYWwgYHNkYCBhcmd1bWVudCBpcyBwcmVzZW50IGluY2x1ZGUgYSBiaW5hcnkgZXhwb25lbnQgc3VmZml4Lg0KICAgKi8NCiAgZnVuY3Rpb24gdG9TdHJpbmdCaW5hcnkoeCwgYmFzZU91dCwgc2QsIHJtKSB7DQogICAgdmFyIGJhc2UsIGUsIGksIGssIGxlbiwgcm91bmRVcCwgc3RyLCB4ZCwgeSwNCiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLA0KICAgICAgaXNFeHAgPSBzZCAhPT0gdm9pZCAwOw0KDQogICAgaWYgKGlzRXhwKSB7DQogICAgICBjaGVja0ludDMyKHNkLCAxLCBNQVhfRElHSVRTKTsNCiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSBybSA9IEN0b3Iucm91bmRpbmc7DQogICAgICBlbHNlIGNoZWNrSW50MzIocm0sIDAsIDgpOw0KICAgIH0gZWxzZSB7DQogICAgICBzZCA9IEN0b3IucHJlY2lzaW9uOw0KICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nOw0KICAgIH0NCg0KICAgIGlmICgheC5pc0Zpbml0ZSgpKSB7DQogICAgICBzdHIgPSBub25GaW5pdGVUb1N0cmluZyh4KTsNCiAgICB9IGVsc2Ugew0KICAgICAgc3RyID0gZmluaXRlVG9TdHJpbmcoeCk7DQogICAgICBpID0gc3RyLmluZGV4T2YoJy4nKTsNCg0KICAgICAgLy8gVXNlIGV4cG9uZW50aWFsIG5vdGF0aW9uIGFjY29yZGluZyB0byBgdG9FeHBQb3NgIGFuZCBgdG9FeHBOZWdgPyBObywgYnV0IGlmIHJlcXVpcmVkOg0KICAgICAgLy8gbWF4QmluYXJ5RXhwb25lbnQgPSBmbG9vcigoZGVjaW1hbEV4cG9uZW50ICsgMSkgKiBsb2dbMl0oMTApKQ0KICAgICAgLy8gbWluQmluYXJ5RXhwb25lbnQgPSBmbG9vcihkZWNpbWFsRXhwb25lbnQgKiBsb2dbMl0oMTApKQ0KICAgICAgLy8gbG9nWzJdKDEwKSA9IDMuMzIxOTI4MDk0ODg3MzYyMzQ3ODcwMzE5NDI5NDg5MzkwMTc1ODY0DQoNCiAgICAgIGlmIChpc0V4cCkgew0KICAgICAgICBiYXNlID0gMjsNCiAgICAgICAgaWYgKGJhc2VPdXQgPT0gMTYpIHsNCiAgICAgICAgICBzZCA9IHNkICogNCAtIDM7DQogICAgICAgIH0gZWxzZSBpZiAoYmFzZU91dCA9PSA4KSB7DQogICAgICAgICAgc2QgPSBzZCAqIDMgLSAyOw0KICAgICAgICB9DQogICAgICB9IGVsc2Ugew0KICAgICAgICBiYXNlID0gYmFzZU91dDsNCiAgICAgIH0NCg0KICAgICAgLy8gQ29udmVydCB0aGUgbnVtYmVyIGFzIGFuIGludGVnZXIgdGhlbiBkaXZpZGUgdGhlIHJlc3VsdCBieSBpdHMgYmFzZSByYWlzZWQgdG8gYSBwb3dlciBzdWNoDQogICAgICAvLyB0aGF0IHRoZSBmcmFjdGlvbiBwYXJ0IHdpbGwgYmUgcmVzdG9yZWQuDQoNCiAgICAgIC8vIE5vbi1pbnRlZ2VyLg0KICAgICAgaWYgKGkgPj0gMCkgew0KICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTsNCiAgICAgICAgeSA9IG5ldyBDdG9yKDEpOw0KICAgICAgICB5LmUgPSBzdHIubGVuZ3RoIC0gaTsNCiAgICAgICAgeS5kID0gY29udmVydEJhc2UoZmluaXRlVG9TdHJpbmcoeSksIDEwLCBiYXNlKTsNCiAgICAgICAgeS5lID0geS5kLmxlbmd0aDsNCiAgICAgIH0NCg0KICAgICAgeGQgPSBjb252ZXJ0QmFzZShzdHIsIDEwLCBiYXNlKTsNCiAgICAgIGUgPSBsZW4gPSB4ZC5sZW5ndGg7DQoNCiAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy4NCiAgICAgIGZvciAoOyB4ZFstLWxlbl0gPT0gMDspIHhkLnBvcCgpOw0KDQogICAgICBpZiAoIXhkWzBdKSB7DQogICAgICAgIHN0ciA9IGlzRXhwID8gJzBwKzAnIDogJzAnOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgaWYgKGkgPCAwKSB7DQogICAgICAgICAgZS0tOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHggPSBuZXcgQ3Rvcih4KTsNCiAgICAgICAgICB4LmQgPSB4ZDsNCiAgICAgICAgICB4LmUgPSBlOw0KICAgICAgICAgIHggPSBkaXZpZGUoeCwgeSwgc2QsIHJtLCAwLCBiYXNlKTsNCiAgICAgICAgICB4ZCA9IHguZDsNCiAgICAgICAgICBlID0geC5lOw0KICAgICAgICAgIHJvdW5kVXAgPSBpbmV4YWN0Ow0KICAgICAgICB9DQoNCiAgICAgICAgLy8gVGhlIHJvdW5kaW5nIGRpZ2l0LCBpLmUuIHRoZSBkaWdpdCBhZnRlciB0aGUgZGlnaXQgdGhhdCBtYXkgYmUgcm91bmRlZCB1cC4NCiAgICAgICAgaSA9IHhkW3NkXTsNCiAgICAgICAgayA9IGJhc2UgLyAyOw0KICAgICAgICByb3VuZFVwID0gcm91bmRVcCB8fCB4ZFtzZCArIDFdICE9PSB2b2lkIDA7DQoNCiAgICAgICAgcm91bmRVcCA9IHJtIDwgNA0KICAgICAgICAgID8gKGkgIT09IHZvaWQgMCB8fCByb3VuZFVwKSAmJiAocm0gPT09IDAgfHwgcm0gPT09ICh4LnMgPCAwID8gMyA6IDIpKQ0KICAgICAgICAgIDogaSA+IGsgfHwgaSA9PT0gayAmJiAocm0gPT09IDQgfHwgcm91bmRVcCB8fCBybSA9PT0gNiAmJiB4ZFtzZCAtIDFdICYgMSB8fA0KICAgICAgICAgICAgcm0gPT09ICh4LnMgPCAwID8gOCA6IDcpKTsNCg0KICAgICAgICB4ZC5sZW5ndGggPSBzZDsNCg0KICAgICAgICBpZiAocm91bmRVcCkgew0KDQogICAgICAgICAgLy8gUm91bmRpbmcgdXAgbWF5IG1lYW4gdGhlIHByZXZpb3VzIGRpZ2l0IGhhcyB0byBiZSByb3VuZGVkIHVwIGFuZCBzbyBvbi4NCiAgICAgICAgICBmb3IgKDsgKyt4ZFstLXNkXSA+IGJhc2UgLSAxOykgew0KICAgICAgICAgICAgeGRbc2RdID0gMDsNCiAgICAgICAgICAgIGlmICghc2QpIHsNCiAgICAgICAgICAgICAgKytlOw0KICAgICAgICAgICAgICB4ZC51bnNoaWZ0KDEpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vIERldGVybWluZSB0cmFpbGluZyB6ZXJvcy4NCiAgICAgICAgZm9yIChsZW4gPSB4ZC5sZW5ndGg7ICF4ZFtsZW4gLSAxXTsgLS1sZW4pOw0KDQogICAgICAgIC8vIEUuZy4gWzQsIDExLCAxNV0gYmVjb21lcyA0YmYuDQogICAgICAgIGZvciAoaSA9IDAsIHN0ciA9ICcnOyBpIDwgbGVuOyBpKyspIHN0ciArPSBOVU1FUkFMUy5jaGFyQXQoeGRbaV0pOw0KDQogICAgICAgIC8vIEFkZCBiaW5hcnkgZXhwb25lbnQgc3VmZml4Pw0KICAgICAgICBpZiAoaXNFeHApIHsNCiAgICAgICAgICBpZiAobGVuID4gMSkgew0KICAgICAgICAgICAgaWYgKGJhc2VPdXQgPT0gMTYgfHwgYmFzZU91dCA9PSA4KSB7DQogICAgICAgICAgICAgIGkgPSBiYXNlT3V0ID09IDE2ID8gNCA6IDM7DQogICAgICAgICAgICAgIGZvciAoLS1sZW47IGxlbiAlIGk7IGxlbisrKSBzdHIgKz0gJzAnOw0KICAgICAgICAgICAgICB4ZCA9IGNvbnZlcnRCYXNlKHN0ciwgYmFzZSwgYmFzZU91dCk7DQogICAgICAgICAgICAgIGZvciAobGVuID0geGQubGVuZ3RoOyAheGRbbGVuIC0gMV07IC0tbGVuKTsNCg0KICAgICAgICAgICAgICAvLyB4ZFswXSB3aWxsIGFsd2F5cyBiZSBiZSAxDQogICAgICAgICAgICAgIGZvciAoaSA9IDEsIHN0ciA9ICcxLic7IGkgPCBsZW47IGkrKykgc3RyICs9IE5VTUVSQUxTLmNoYXJBdCh4ZFtpXSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICBzdHIgPSBzdHIuY2hhckF0KDApICsgJy4nICsgc3RyLnNsaWNlKDEpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCg0KICAgICAgICAgIHN0ciA9ICBzdHIgKyAoZSA8IDAgPyAncCcgOiAncCsnKSArIGU7DQogICAgICAgIH0gZWxzZSBpZiAoZSA8IDApIHsNCiAgICAgICAgICBmb3IgKDsgKytlOykgc3RyID0gJzAnICsgc3RyOw0KICAgICAgICAgIHN0ciA9ICcwLicgKyBzdHI7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgaWYgKCsrZSA+IGxlbikgZm9yIChlIC09IGxlbjsgZS0tIDspIHN0ciArPSAnMCc7DQogICAgICAgICAgZWxzZSBpZiAoZSA8IGxlbikgc3RyID0gc3RyLnNsaWNlKDAsIGUpICsgJy4nICsgc3RyLnNsaWNlKGUpOw0KICAgICAgICB9DQogICAgICB9DQoNCiAgICAgIHN0ciA9IChiYXNlT3V0ID09IDE2ID8gJzB4JyA6IGJhc2VPdXQgPT0gMiA/ICcwYicgOiBiYXNlT3V0ID09IDggPyAnMG8nIDogJycpICsgc3RyOw0KICAgIH0NCg0KICAgIHJldHVybiB4LnMgPCAwID8gJy0nICsgc3RyIDogc3RyOw0KICB9DQoNCg0KICAvLyBEb2VzIG5vdCBzdHJpcCB0cmFpbGluZyB6ZXJvcy4NCiAgZnVuY3Rpb24gdHJ1bmNhdGUoYXJyLCBsZW4pIHsNCiAgICBpZiAoYXJyLmxlbmd0aCA+IGxlbikgew0KICAgICAgYXJyLmxlbmd0aCA9IGxlbjsNCiAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCiAgfQ0KDQoNCiAgLy8gRGVjaW1hbCBtZXRob2RzDQoNCg0KICAvKg0KICAgKiAgYWJzDQogICAqICBhY29zDQogICAqICBhY29zaA0KICAgKiAgYWRkDQogICAqICBhc2luDQogICAqICBhc2luaA0KICAgKiAgYXRhbg0KICAgKiAgYXRhbmgNCiAgICogIGF0YW4yDQogICAqICBjYnJ0DQogICAqICBjZWlsDQogICAqICBjbG9uZQ0KICAgKiAgY29uZmlnDQogICAqICBjb3MNCiAgICogIGNvc2gNCiAgICogIGRpdg0KICAgKiAgZXhwDQogICAqICBmbG9vcg0KICAgKiAgaHlwb3QNCiAgICogIGxuDQogICAqICBsb2cNCiAgICogIGxvZzINCiAgICogIGxvZzEwDQogICAqICBtYXgNCiAgICogIG1pbg0KICAgKiAgbW9kDQogICAqICBtdWwNCiAgICogIHBvdw0KICAgKiAgcmFuZG9tDQogICAqICByb3VuZA0KICAgKiAgc2V0DQogICAqICBzaWduDQogICAqICBzaW4NCiAgICogIHNpbmgNCiAgICogIHNxcnQNCiAgICogIHN1Yg0KICAgKiAgdGFuDQogICAqICB0YW5oDQogICAqICB0cnVuYw0KICAgKi8NCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBgeGAuDQogICAqDQogICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0NCiAgICoNCiAgICovDQogIGZ1bmN0aW9uIGFicyh4KSB7DQogICAgcmV0dXJuIG5ldyB0aGlzKHgpLmFicygpOw0KICB9DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjY29zaW5lIGluIHJhZGlhbnMgb2YgYHhgLg0KICAgKg0KICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9DQogICAqDQogICAqLw0KICBmdW5jdGlvbiBhY29zKHgpIHsNCiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYWNvcygpOw0KICB9DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgaW52ZXJzZSBvZiB0aGUgaHlwZXJib2xpYyBjb3NpbmUgb2YgYHhgLCByb3VuZGVkIHRvDQogICAqIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuDQogICAqDQogICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLg0KICAgKg0KICAgKi8NCiAgZnVuY3Rpb24gYWNvc2goeCkgew0KICAgIHJldHVybiBuZXcgdGhpcyh4KS5hY29zaCgpOw0KICB9DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgc3VtIG9mIGB4YCBhbmQgYHlgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50DQogICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuDQogICAqDQogICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0NCiAgICogeSB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfQ0KICAgKg0KICAgKi8NCiAgZnVuY3Rpb24gYWRkKHgsIHkpIHsNCiAgICByZXR1cm4gbmV3IHRoaXMoeCkucGx1cyh5KTsNCiAgfQ0KDQoNCiAgLyoNCiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGFyY3NpbmUgaW4gcmFkaWFucyBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmANCiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC4NCiAgICoNCiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfQ0KICAgKg0KICAgKi8NCiAgZnVuY3Rpb24gYXNpbih4KSB7DQogICAgcmV0dXJuIG5ldyB0aGlzKHgpLmFzaW4oKTsNCiAgfQ0KDQoNCiAgLyoNCiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgc2luZSBvZiBgeGAsIHJvdW5kZWQgdG8NCiAgICogYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC4NCiAgICoNCiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuDQogICAqDQogICAqLw0KICBmdW5jdGlvbiBhc2luaCh4KSB7DQogICAgcmV0dXJuIG5ldyB0aGlzKHgpLmFzaW5oKCk7DQogIH0NCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBhcmN0YW5nZW50IGluIHJhZGlhbnMgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gDQogICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuDQogICAqDQogICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0NCiAgICoNCiAgICovDQogIGZ1bmN0aW9uIGF0YW4oeCkgew0KICAgIHJldHVybiBuZXcgdGhpcyh4KS5hdGFuKCk7DQogIH0NCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgYHhgLCByb3VuZGVkIHRvDQogICAqIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuDQogICAqDQogICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLg0KICAgKg0KICAgKi8NCiAgZnVuY3Rpb24gYXRhbmgoeCkgew0KICAgIHJldHVybiBuZXcgdGhpcyh4KS5hdGFuaCgpOw0KICB9DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjdGFuZ2VudCBpbiByYWRpYW5zIG9mIGB5L3hgIGluIHRoZSByYW5nZSAtcGkgdG8gcGkNCiAgICogKGluY2x1c2l2ZSksIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC4NCiAgICoNCiAgICogRG9tYWluOiBbLUluZmluaXR5LCBJbmZpbml0eV0NCiAgICogUmFuZ2U6IFstcGksIHBpXQ0KICAgKg0KICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSB5LWNvb3JkaW5hdGUuDQogICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gVGhlIHgtY29vcmRpbmF0ZS4NCiAgICoNCiAgICogYXRhbjIowrEwLCAtMCkgICAgICAgICAgICAgICA9IMKxcGkNCiAgICogYXRhbjIowrEwLCArMCkgICAgICAgICAgICAgICA9IMKxMA0KICAgKiBhdGFuMijCsTAsIC14KSAgICAgICAgICAgICAgID0gwrFwaSBmb3IgeCA+IDANCiAgICogYXRhbjIowrEwLCB4KSAgICAgICAgICAgICAgICA9IMKxMCBmb3IgeCA+IDANCiAgICogYXRhbjIoLXksIMKxMCkgICAgICAgICAgICAgICA9IC1waS8yIGZvciB5ID4gMA0KICAgKiBhdGFuMih5LCDCsTApICAgICAgICAgICAgICAgID0gcGkvMiBmb3IgeSA+IDANCiAgICogYXRhbjIowrF5LCAtSW5maW5pdHkpICAgICAgICA9IMKxcGkgZm9yIGZpbml0ZSB5ID4gMA0KICAgKiBhdGFuMijCsXksICtJbmZpbml0eSkgICAgICAgID0gwrEwIGZvciBmaW5pdGUgeSA+IDANCiAgICogYXRhbjIowrFJbmZpbml0eSwgeCkgICAgICAgICA9IMKxcGkvMiBmb3IgZmluaXRlIHgNCiAgICogYXRhbjIowrFJbmZpbml0eSwgLUluZmluaXR5KSA9IMKxMypwaS80DQogICAqIGF0YW4yKMKxSW5maW5pdHksICtJbmZpbml0eSkgPSDCsXBpLzQNCiAgICogYXRhbjIoTmFOLCB4KSA9IE5hTg0KICAgKiBhdGFuMih5LCBOYU4pID0gTmFODQogICAqDQogICAqLw0KICBmdW5jdGlvbiBhdGFuMih5LCB4KSB7DQogICAgeSA9IG5ldyB0aGlzKHkpOw0KICAgIHggPSBuZXcgdGhpcyh4KTsNCiAgICB2YXIgciwNCiAgICAgIHByID0gdGhpcy5wcmVjaXNpb24sDQogICAgICBybSA9IHRoaXMucm91bmRpbmcsDQogICAgICB3cHIgPSBwciArIDQ7DQoNCiAgICAvLyBFaXRoZXIgTmFODQogICAgaWYgKCF5LnMgfHwgIXgucykgew0KICAgICAgciA9IG5ldyB0aGlzKE5hTik7DQoNCiAgICAvLyBCb3RoIMKxSW5maW5pdHkNCiAgICB9IGVsc2UgaWYgKCF5LmQgJiYgIXguZCkgew0KICAgICAgciA9IGdldFBpKHRoaXMsIHdwciwgMSkudGltZXMoeC5zID4gMCA/IDAuMjUgOiAwLjc1KTsNCiAgICAgIHIucyA9IHkuczsNCg0KICAgIC8vIHggaXMgwrFJbmZpbml0eSBvciB5IGlzIMKxMA0KICAgIH0gZWxzZSBpZiAoIXguZCB8fCB5LmlzWmVybygpKSB7DQogICAgICByID0geC5zIDwgMCA/IGdldFBpKHRoaXMsIHByLCBybSkgOiBuZXcgdGhpcygwKTsNCiAgICAgIHIucyA9IHkuczsNCg0KICAgIC8vIHkgaXMgwrFJbmZpbml0eSBvciB4IGlzIMKxMA0KICAgIH0gZWxzZSBpZiAoIXkuZCB8fCB4LmlzWmVybygpKSB7DQogICAgICByID0gZ2V0UGkodGhpcywgd3ByLCAxKS50aW1lcygwLjUpOw0KICAgICAgci5zID0geS5zOw0KDQogICAgLy8gQm90aCBub24temVybyBhbmQgZmluaXRlDQogICAgfSBlbHNlIGlmICh4LnMgPCAwKSB7DQogICAgICB0aGlzLnByZWNpc2lvbiA9IHdwcjsNCiAgICAgIHRoaXMucm91bmRpbmcgPSAxOw0KICAgICAgciA9IHRoaXMuYXRhbihkaXZpZGUoeSwgeCwgd3ByLCAxKSk7DQogICAgICB4ID0gZ2V0UGkodGhpcywgd3ByLCAxKTsNCiAgICAgIHRoaXMucHJlY2lzaW9uID0gcHI7DQogICAgICB0aGlzLnJvdW5kaW5nID0gcm07DQogICAgICByID0geS5zIDwgMCA/IHIubWludXMoeCkgOiByLnBsdXMoeCk7DQogICAgfSBlbHNlIHsNCiAgICAgIHIgPSB0aGlzLmF0YW4oZGl2aWRlKHksIHgsIHdwciwgMSkpOw0KICAgIH0NCg0KICAgIHJldHVybiByOw0KICB9DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgY3ViZSByb290IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudA0KICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLg0KICAgKg0KICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9DQogICAqDQogICAqLw0KICBmdW5jdGlvbiBjYnJ0KHgpIHsNCiAgICByZXR1cm4gbmV3IHRoaXMoeCkuY2JydCgpOw0KICB9DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgcm91bmRlZCB0byBhbiBpbnRlZ2VyIHVzaW5nIGBST1VORF9DRUlMYC4NCiAgICoNCiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfQ0KICAgKg0KICAgKi8NCiAgZnVuY3Rpb24gY2VpbCh4KSB7DQogICAgcmV0dXJuIGZpbmFsaXNlKHggPSBuZXcgdGhpcyh4KSwgeC5lICsgMSwgMik7DQogIH0NCg0KDQogIC8qDQogICAqIENvbmZpZ3VyZSBnbG9iYWwgc2V0dGluZ3MgZm9yIGEgRGVjaW1hbCBjb25zdHJ1Y3Rvci4NCiAgICoNCiAgICogYG9iamAgaXMgYW4gb2JqZWN0IHdpdGggb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzLA0KICAgKg0KICAgKiAgIHByZWNpc2lvbiAge251bWJlcn0NCiAgICogICByb3VuZGluZyAgIHtudW1iZXJ9DQogICAqICAgdG9FeHBOZWcgICB7bnVtYmVyfQ0KICAgKiAgIHRvRXhwUG9zICAge251bWJlcn0NCiAgICogICBtYXhFICAgICAgIHtudW1iZXJ9DQogICAqICAgbWluRSAgICAgICB7bnVtYmVyfQ0KICAgKiAgIG1vZHVsbyAgICAge251bWJlcn0NCiAgICogICBjcnlwdG8gICAgIHtib29sZWFufG51bWJlcn0NCiAgICogICBkZWZhdWx0cyAgIHt0cnVlfQ0KICAgKg0KICAgKiBFLmcuIERlY2ltYWwuY29uZmlnKHsgcHJlY2lzaW9uOiAyMCwgcm91bmRpbmc6IDQgfSkNCiAgICoNCiAgICovDQogIGZ1bmN0aW9uIGNvbmZpZyhvYmopIHsNCiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JykgdGhyb3cgRXJyb3IoZGVjaW1hbEVycm9yICsgJ09iamVjdCBleHBlY3RlZCcpOw0KICAgIHZhciBpLCBwLCB2LA0KICAgICAgdXNlRGVmYXVsdHMgPSBvYmouZGVmYXVsdHMgPT09IHRydWUsDQogICAgICBwcyA9IFsNCiAgICAgICAgJ3ByZWNpc2lvbicsIDEsIE1BWF9ESUdJVFMsDQogICAgICAgICdyb3VuZGluZycsIDAsIDgsDQogICAgICAgICd0b0V4cE5lZycsIC1FWFBfTElNSVQsIDAsDQogICAgICAgICd0b0V4cFBvcycsIDAsIEVYUF9MSU1JVCwNCiAgICAgICAgJ21heEUnLCAwLCBFWFBfTElNSVQsDQogICAgICAgICdtaW5FJywgLUVYUF9MSU1JVCwgMCwNCiAgICAgICAgJ21vZHVsbycsIDAsIDkNCiAgICAgIF07DQoNCiAgICBmb3IgKGkgPSAwOyBpIDwgcHMubGVuZ3RoOyBpICs9IDMpIHsNCiAgICAgIGlmIChwID0gcHNbaV0sIHVzZURlZmF1bHRzKSB0aGlzW3BdID0gREVGQVVMVFNbcF07DQogICAgICBpZiAoKHYgPSBvYmpbcF0pICE9PSB2b2lkIDApIHsNCiAgICAgICAgaWYgKG1hdGhmbG9vcih2KSA9PT0gdiAmJiB2ID49IHBzW2kgKyAxXSAmJiB2IDw9IHBzW2kgKyAyXSkgdGhpc1twXSA9IHY7DQogICAgICAgIGVsc2UgdGhyb3cgRXJyb3IoaW52YWxpZEFyZ3VtZW50ICsgcCArICc6ICcgKyB2KTsNCiAgICAgIH0NCiAgICB9DQoNCiAgICBpZiAocCA9ICdjcnlwdG8nLCB1c2VEZWZhdWx0cykgdGhpc1twXSA9IERFRkFVTFRTW3BdOw0KICAgIGlmICgodiA9IG9ialtwXSkgIT09IHZvaWQgMCkgew0KICAgICAgaWYgKHYgPT09IHRydWUgfHwgdiA9PT0gZmFsc2UgfHwgdiA9PT0gMCB8fCB2ID09PSAxKSB7DQogICAgICAgIGlmICh2KSB7DQogICAgICAgICAgaWYgKHR5cGVvZiBjcnlwdG8gIT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvICYmDQogICAgICAgICAgICAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcyB8fCBjcnlwdG8ucmFuZG9tQnl0ZXMpKSB7DQogICAgICAgICAgICB0aGlzW3BdID0gdHJ1ZTsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhyb3cgRXJyb3IoY3J5cHRvVW5hdmFpbGFibGUpOw0KICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzW3BdID0gZmFsc2U7DQogICAgICAgIH0NCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRocm93IEVycm9yKGludmFsaWRBcmd1bWVudCArIHAgKyAnOiAnICsgdik7DQogICAgICB9DQogICAgfQ0KDQogICAgcmV0dXJuIHRoaXM7DQogIH0NCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBjb3NpbmUgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50DQogICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuDQogICAqDQogICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLg0KICAgKg0KICAgKi8NCiAgZnVuY3Rpb24gY29zKHgpIHsNCiAgICByZXR1cm4gbmV3IHRoaXMoeCkuY29zKCk7DQogIH0NCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiBgeGAsIHJvdW5kZWQgdG8gcHJlY2lzaW9uDQogICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuDQogICAqDQogICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLg0KICAgKg0KICAgKi8NCiAgZnVuY3Rpb24gY29zaCh4KSB7DQogICAgcmV0dXJuIG5ldyB0aGlzKHgpLmNvc2goKTsNCiAgfQ0KDQoNCiAgLyoNCiAgICogQ3JlYXRlIGFuZCByZXR1cm4gYSBEZWNpbWFsIGNvbnN0cnVjdG9yIHdpdGggdGhlIHNhbWUgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGFzIHRoaXMgRGVjaW1hbA0KICAgKiBjb25zdHJ1Y3Rvci4NCiAgICoNCiAgICovDQogIGZ1bmN0aW9uIGNsb25lKG9iaikgew0KICAgIHZhciBpLCBwLCBwczsNCg0KICAgIC8qDQogICAgICogVGhlIERlY2ltYWwgY29uc3RydWN0b3IgYW5kIGV4cG9ydGVkIGZ1bmN0aW9uLg0KICAgICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIGluc3RhbmNlLg0KICAgICAqDQogICAgICogdiB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIG51bWVyaWMgdmFsdWUuDQogICAgICoNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBEZWNpbWFsKHYpIHsNCiAgICAgIHZhciBlLCBpLCB0LA0KICAgICAgICB4ID0gdGhpczsNCg0KICAgICAgLy8gRGVjaW1hbCBjYWxsZWQgd2l0aG91dCBuZXcuDQogICAgICBpZiAoISh4IGluc3RhbmNlb2YgRGVjaW1hbCkpIHJldHVybiBuZXcgRGVjaW1hbCh2KTsNCg0KICAgICAgLy8gUmV0YWluIGEgcmVmZXJlbmNlIHRvIHRoaXMgRGVjaW1hbCBjb25zdHJ1Y3RvciwgYW5kIHNoYWRvdyBEZWNpbWFsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcg0KICAgICAgLy8gd2hpY2ggcG9pbnRzIHRvIE9iamVjdC4NCiAgICAgIHguY29uc3RydWN0b3IgPSBEZWNpbWFsOw0KDQogICAgICAvLyBEdXBsaWNhdGUuDQogICAgICBpZiAodiBpbnN0YW5jZW9mIERlY2ltYWwpIHsNCiAgICAgICAgeC5zID0gdi5zOw0KDQogICAgICAgIGlmIChleHRlcm5hbCkgew0KICAgICAgICAgIGlmICghdi5kIHx8IHYuZSA+IERlY2ltYWwubWF4RSkgew0KDQogICAgICAgICAgICAvLyBJbmZpbml0eS4NCiAgICAgICAgICAgIHguZSA9IE5hTjsNCiAgICAgICAgICAgIHguZCA9IG51bGw7DQogICAgICAgICAgfSBlbHNlIGlmICh2LmUgPCBEZWNpbWFsLm1pbkUpIHsNCg0KICAgICAgICAgICAgLy8gWmVyby4NCiAgICAgICAgICAgIHguZSA9IDA7DQogICAgICAgICAgICB4LmQgPSBbMF07DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHguZSA9IHYuZTsNCiAgICAgICAgICAgIHguZCA9IHYuZC5zbGljZSgpOw0KICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB4LmUgPSB2LmU7DQogICAgICAgICAgeC5kID0gdi5kID8gdi5kLnNsaWNlKCkgOiB2LmQ7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm47DQogICAgICB9DQoNCiAgICAgIHQgPSB0eXBlb2YgdjsNCg0KICAgICAgaWYgKHQgPT09ICdudW1iZXInKSB7DQogICAgICAgIGlmICh2ID09PSAwKSB7DQogICAgICAgICAgeC5zID0gMSAvIHYgPCAwID8gLTEgOiAxOw0KICAgICAgICAgIHguZSA9IDA7DQogICAgICAgICAgeC5kID0gWzBdOw0KICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICh2IDwgMCkgew0KICAgICAgICAgIHYgPSAtdjsNCiAgICAgICAgICB4LnMgPSAtMTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB4LnMgPSAxOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBzbWFsbCBpbnRlZ2Vycy4NCiAgICAgICAgaWYgKHYgPT09IH5+diAmJiB2IDwgMWU3KSB7DQogICAgICAgICAgZm9yIChlID0gMCwgaSA9IHY7IGkgPj0gMTA7IGkgLz0gMTApIGUrKzsNCg0KICAgICAgICAgIGlmIChleHRlcm5hbCkgew0KICAgICAgICAgICAgaWYgKGUgPiBEZWNpbWFsLm1heEUpIHsNCiAgICAgICAgICAgICAgeC5lID0gTmFOOw0KICAgICAgICAgICAgICB4LmQgPSBudWxsOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChlIDwgRGVjaW1hbC5taW5FKSB7DQogICAgICAgICAgICAgIHguZSA9IDA7DQogICAgICAgICAgICAgIHguZCA9IFswXTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIHguZSA9IGU7DQogICAgICAgICAgICAgIHguZCA9IFt2XTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgeC5lID0gZTsNCiAgICAgICAgICAgIHguZCA9IFt2XTsNCiAgICAgICAgICB9DQoNCiAgICAgICAgICByZXR1cm47DQoNCiAgICAgICAgLy8gSW5maW5pdHksIE5hTi4NCiAgICAgICAgfSBlbHNlIGlmICh2ICogMCAhPT0gMCkgew0KICAgICAgICAgIGlmICghdikgeC5zID0gTmFOOw0KICAgICAgICAgIHguZSA9IE5hTjsNCiAgICAgICAgICB4LmQgPSBudWxsOw0KICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBwYXJzZURlY2ltYWwoeCwgdi50b1N0cmluZygpKTsNCg0KICAgICAgfSBlbHNlIGlmICh0ICE9PSAnc3RyaW5nJykgew0KICAgICAgICB0aHJvdyBFcnJvcihpbnZhbGlkQXJndW1lbnQgKyB2KTsNCiAgICAgIH0NCg0KICAgICAgLy8gTWludXMgc2lnbj8NCiAgICAgIGlmICgoaSA9IHYuY2hhckNvZGVBdCgwKSkgPT09IDQ1KSB7DQogICAgICAgIHYgPSB2LnNsaWNlKDEpOw0KICAgICAgICB4LnMgPSAtMTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIC8vIFBsdXMgc2lnbj8NCiAgICAgICAgaWYgKGkgPT09IDQzKSB2ID0gdi5zbGljZSgxKTsNCiAgICAgICAgeC5zID0gMTsNCiAgICAgIH0NCg0KICAgICAgcmV0dXJuIGlzRGVjaW1hbC50ZXN0KHYpID8gcGFyc2VEZWNpbWFsKHgsIHYpIDogcGFyc2VPdGhlcih4LCB2KTsNCiAgICB9DQoNCiAgICBEZWNpbWFsLnByb3RvdHlwZSA9IFA7DQoNCiAgICBEZWNpbWFsLlJPVU5EX1VQID0gMDsNCiAgICBEZWNpbWFsLlJPVU5EX0RPV04gPSAxOw0KICAgIERlY2ltYWwuUk9VTkRfQ0VJTCA9IDI7DQogICAgRGVjaW1hbC5ST1VORF9GTE9PUiA9IDM7DQogICAgRGVjaW1hbC5ST1VORF9IQUxGX1VQID0gNDsNCiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfRE9XTiA9IDU7DQogICAgRGVjaW1hbC5ST1VORF9IQUxGX0VWRU4gPSA2Ow0KICAgIERlY2ltYWwuUk9VTkRfSEFMRl9DRUlMID0gNzsNCiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfRkxPT1IgPSA4Ow0KICAgIERlY2ltYWwuRVVDTElEID0gOTsNCg0KICAgIERlY2ltYWwuY29uZmlnID0gRGVjaW1hbC5zZXQgPSBjb25maWc7DQogICAgRGVjaW1hbC5jbG9uZSA9IGNsb25lOw0KICAgIERlY2ltYWwuaXNEZWNpbWFsID0gaXNEZWNpbWFsSW5zdGFuY2U7DQoNCiAgICBEZWNpbWFsLmFicyA9IGFiczsNCiAgICBEZWNpbWFsLmFjb3MgPSBhY29zOw0KICAgIERlY2ltYWwuYWNvc2ggPSBhY29zaDsgICAgICAgIC8vIEVTNg0KICAgIERlY2ltYWwuYWRkID0gYWRkOw0KICAgIERlY2ltYWwuYXNpbiA9IGFzaW47DQogICAgRGVjaW1hbC5hc2luaCA9IGFzaW5oOyAgICAgICAgLy8gRVM2DQogICAgRGVjaW1hbC5hdGFuID0gYXRhbjsNCiAgICBEZWNpbWFsLmF0YW5oID0gYXRhbmg7ICAgICAgICAvLyBFUzYNCiAgICBEZWNpbWFsLmF0YW4yID0gYXRhbjI7DQogICAgRGVjaW1hbC5jYnJ0ID0gY2JydDsgICAgICAgICAgLy8gRVM2DQogICAgRGVjaW1hbC5jZWlsID0gY2VpbDsNCiAgICBEZWNpbWFsLmNvcyA9IGNvczsNCiAgICBEZWNpbWFsLmNvc2ggPSBjb3NoOyAgICAgICAgICAvLyBFUzYNCiAgICBEZWNpbWFsLmRpdiA9IGRpdjsNCiAgICBEZWNpbWFsLmV4cCA9IGV4cDsNCiAgICBEZWNpbWFsLmZsb29yID0gZmxvb3I7DQogICAgRGVjaW1hbC5oeXBvdCA9IGh5cG90OyAgICAgICAgLy8gRVM2DQogICAgRGVjaW1hbC5sbiA9IGxuOw0KICAgIERlY2ltYWwubG9nID0gbG9nOw0KICAgIERlY2ltYWwubG9nMTAgPSBsb2cxMDsgICAgICAgIC8vIEVTNg0KICAgIERlY2ltYWwubG9nMiA9IGxvZzI7ICAgICAgICAgIC8vIEVTNg0KICAgIERlY2ltYWwubWF4ID0gbWF4Ow0KICAgIERlY2ltYWwubWluID0gbWluOw0KICAgIERlY2ltYWwubW9kID0gbW9kOw0KICAgIERlY2ltYWwubXVsID0gbXVsOw0KICAgIERlY2ltYWwucG93ID0gcG93Ow0KICAgIERlY2ltYWwucmFuZG9tID0gcmFuZG9tOw0KICAgIERlY2ltYWwucm91bmQgPSByb3VuZDsNCiAgICBEZWNpbWFsLnNpZ24gPSBzaWduOyAgICAgICAgICAvLyBFUzYNCiAgICBEZWNpbWFsLnNpbiA9IHNpbjsNCiAgICBEZWNpbWFsLnNpbmggPSBzaW5oOyAgICAgICAgICAvLyBFUzYNCiAgICBEZWNpbWFsLnNxcnQgPSBzcXJ0Ow0KICAgIERlY2ltYWwuc3ViID0gc3ViOw0KICAgIERlY2ltYWwudGFuID0gdGFuOw0KICAgIERlY2ltYWwudGFuaCA9IHRhbmg7ICAgICAgICAgIC8vIEVTNg0KICAgIERlY2ltYWwudHJ1bmMgPSB0cnVuYzsgICAgICAgIC8vIEVTNg0KDQogICAgaWYgKG9iaiA9PT0gdm9pZCAwKSBvYmogPSB7fTsNCiAgICBpZiAob2JqKSB7DQogICAgICBpZiAob2JqLmRlZmF1bHRzICE9PSB0cnVlKSB7DQogICAgICAgIHBzID0gWydwcmVjaXNpb24nLCAncm91bmRpbmcnLCAndG9FeHBOZWcnLCAndG9FeHBQb3MnLCAnbWF4RScsICdtaW5FJywgJ21vZHVsbycsICdjcnlwdG8nXTsNCiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBzLmxlbmd0aDspIGlmICghb2JqLmhhc093blByb3BlcnR5KHAgPSBwc1tpKytdKSkgb2JqW3BdID0gdGhpc1twXTsNCiAgICAgIH0NCiAgICB9DQoNCiAgICBEZWNpbWFsLmNvbmZpZyhvYmopOw0KDQogICAgcmV0dXJuIERlY2ltYWw7DQogIH0NCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIGB4YCBkaXZpZGVkIGJ5IGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudA0KICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLg0KICAgKg0KICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9DQogICAqIHkge251bWJlcnxzdHJpbmd8RGVjaW1hbH0NCiAgICoNCiAgICovDQogIGZ1bmN0aW9uIGRpdih4LCB5KSB7DQogICAgcmV0dXJuIG5ldyB0aGlzKHgpLmRpdih5KTsNCiAgfQ0KDQoNCiAgLyoNCiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG5hdHVyYWwgZXhwb25lbnRpYWwgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gDQogICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuDQogICAqDQogICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gVGhlIHBvd2VyIHRvIHdoaWNoIHRvIHJhaXNlIHRoZSBiYXNlIG9mIHRoZSBuYXR1cmFsIGxvZy4NCiAgICoNCiAgICovDQogIGZ1bmN0aW9uIGV4cCh4KSB7DQogICAgcmV0dXJuIG5ldyB0aGlzKHgpLmV4cCgpOw0KICB9DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgcm91bmQgdG8gYW4gaW50ZWdlciB1c2luZyBgUk9VTkRfRkxPT1JgLg0KICAgKg0KICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9DQogICAqDQogICAqLw0KICBmdW5jdGlvbiBmbG9vcih4KSB7DQogICAgcmV0dXJuIGZpbmFsaXNlKHggPSBuZXcgdGhpcyh4KSwgeC5lICsgMSwgMyk7DQogIH0NCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgc3VtIG9mIHRoZSBzcXVhcmVzIG9mIHRoZSBhcmd1bWVudHMsDQogICAqIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC4NCiAgICoNCiAgICogaHlwb3QoYSwgYiwgLi4uKSA9IHNxcnQoYV4yICsgYl4yICsgLi4uKQ0KICAgKg0KICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8RGVjaW1hbH0NCiAgICoNCiAgICovDQogIGZ1bmN0aW9uIGh5cG90KCkgew0KICAgIHZhciBpLCBuLA0KICAgICAgdCA9IG5ldyB0aGlzKDApOw0KDQogICAgZXh0ZXJuYWwgPSBmYWxzZTsNCg0KICAgIGZvciAoaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOykgew0KICAgICAgbiA9IG5ldyB0aGlzKGFyZ3VtZW50c1tpKytdKTsNCiAgICAgIGlmICghbi5kKSB7DQogICAgICAgIGlmIChuLnMpIHsNCiAgICAgICAgICBleHRlcm5hbCA9IHRydWU7DQogICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKDEgLyAwKTsNCiAgICAgICAgfQ0KICAgICAgICB0ID0gbjsNCiAgICAgIH0gZWxzZSBpZiAodC5kKSB7DQogICAgICAgIHQgPSB0LnBsdXMobi50aW1lcyhuKSk7DQogICAgICB9DQogICAgfQ0KDQogICAgZXh0ZXJuYWwgPSB0cnVlOw0KDQogICAgcmV0dXJuIHQuc3FydCgpOw0KICB9DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gdHJ1ZSBpZiBvYmplY3QgaXMgYSBEZWNpbWFsIGluc3RhbmNlICh3aGVyZSBEZWNpbWFsIGlzIGFueSBEZWNpbWFsIGNvbnN0cnVjdG9yKSwNCiAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS4NCiAgICoNCiAgICovDQogIGZ1bmN0aW9uIGlzRGVjaW1hbEluc3RhbmNlKG9iaikgew0KICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBEZWNpbWFsIHx8IG9iaiAmJiBvYmoubmFtZSA9PT0gJ1tvYmplY3QgRGVjaW1hbF0nIHx8IGZhbHNlOw0KICB9DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gDQogICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuDQogICAqDQogICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0NCiAgICoNCiAgICovDQogIGZ1bmN0aW9uIGxuKHgpIHsNCiAgICByZXR1cm4gbmV3IHRoaXMoeCkubG4oKTsNCiAgfQ0KDQoNCiAgLyoNCiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGxvZyBvZiBgeGAgdG8gdGhlIGJhc2UgYHlgLCBvciB0byBiYXNlIDEwIGlmIG5vIGJhc2UNCiAgICogaXMgc3BlY2lmaWVkLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuDQogICAqDQogICAqIGxvZ1t5XSh4KQ0KICAgKg0KICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBhcmd1bWVudCBvZiB0aGUgbG9nYXJpdGhtLg0KICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBiYXNlIG9mIHRoZSBsb2dhcml0aG0uDQogICAqDQogICAqLw0KICBmdW5jdGlvbiBsb2coeCwgeSkgew0KICAgIHJldHVybiBuZXcgdGhpcyh4KS5sb2coeSk7DQogIH0NCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBiYXNlIDIgbG9nYXJpdGhtIG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYA0KICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLg0KICAgKg0KICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9DQogICAqDQogICAqLw0KICBmdW5jdGlvbiBsb2cyKHgpIHsNCiAgICByZXR1cm4gbmV3IHRoaXMoeCkubG9nKDIpOw0KICB9DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYmFzZSAxMCBsb2dhcml0aG0gb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gDQogICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuDQogICAqDQogICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0NCiAgICoNCiAgICovDQogIGZ1bmN0aW9uIGxvZzEwKHgpIHsNCiAgICByZXR1cm4gbmV3IHRoaXMoeCkubG9nKDEwKTsNCiAgfQ0KDQoNCiAgLyoNCiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG1heGltdW0gb2YgdGhlIGFyZ3VtZW50cy4NCiAgICoNCiAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9DQogICAqDQogICAqLw0KICBmdW5jdGlvbiBtYXgoKSB7DQogICAgcmV0dXJuIG1heE9yTWluKHRoaXMsIGFyZ3VtZW50cywgJ2x0Jyk7DQogIH0NCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBtaW5pbXVtIG9mIHRoZSBhcmd1bWVudHMuDQogICAqDQogICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfQ0KICAgKg0KICAgKi8NCiAgZnVuY3Rpb24gbWluKCkgew0KICAgIHJldHVybiBtYXhPck1pbih0aGlzLCBhcmd1bWVudHMsICdndCcpOw0KICB9DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgbW9kdWxvIGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMNCiAgICogdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLg0KICAgKg0KICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9DQogICAqIHkge251bWJlcnxzdHJpbmd8RGVjaW1hbH0NCiAgICoNCiAgICovDQogIGZ1bmN0aW9uIG1vZCh4LCB5KSB7DQogICAgcmV0dXJuIG5ldyB0aGlzKHgpLm1vZCh5KTsNCiAgfQ0KDQoNCiAgLyoNCiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgYHhgIG11bHRpcGxpZWQgYnkgYHlgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50DQogICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuDQogICAqDQogICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0NCiAgICogeSB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfQ0KICAgKg0KICAgKi8NCiAgZnVuY3Rpb24gbXVsKHgsIHkpIHsNCiAgICByZXR1cm4gbmV3IHRoaXMoeCkubXVsKHkpOw0KICB9DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgcmFpc2VkIHRvIHRoZSBwb3dlciBgeWAsIHJvdW5kZWQgdG8gcHJlY2lzaW9uDQogICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuDQogICAqDQogICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gVGhlIGJhc2UuDQogICAqIHkge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gVGhlIGV4cG9uZW50Lg0KICAgKg0KICAgKi8NCiAgZnVuY3Rpb24gcG93KHgsIHkpIHsNCiAgICByZXR1cm4gbmV3IHRoaXMoeCkucG93KHkpOw0KICB9DQoNCg0KICAvKg0KICAgKiBSZXR1cm5zIGEgbmV3IERlY2ltYWwgd2l0aCBhIHJhbmRvbSB2YWx1ZSBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gMCBhbmQgbGVzcyB0aGFuIDEsIGFuZCB3aXRoDQogICAqIGBzZGAsIG9yIGBEZWNpbWFsLnByZWNpc2lvbmAgaWYgYHNkYCBpcyBvbWl0dGVkLCBzaWduaWZpY2FudCBkaWdpdHMgKG9yIGxlc3MgaWYgdHJhaWxpbmcgemVyb3MNCiAgICogYXJlIHByb2R1Y2VkKS4NCiAgICoNCiAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDAgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuDQogICAqDQogICAqLw0KICBmdW5jdGlvbiByYW5kb20oc2QpIHsNCiAgICB2YXIgZCwgZSwgaywgbiwNCiAgICAgIGkgPSAwLA0KICAgICAgciA9IG5ldyB0aGlzKDEpLA0KICAgICAgcmQgPSBbXTsNCg0KICAgIGlmIChzZCA9PT0gdm9pZCAwKSBzZCA9IHRoaXMucHJlY2lzaW9uOw0KICAgIGVsc2UgY2hlY2tJbnQzMihzZCwgMSwgTUFYX0RJR0lUUyk7DQoNCiAgICBrID0gTWF0aC5jZWlsKHNkIC8gTE9HX0JBU0UpOw0KDQogICAgaWYgKCF0aGlzLmNyeXB0bykgew0KICAgICAgZm9yICg7IGkgPCBrOykgcmRbaSsrXSA9IE1hdGgucmFuZG9tKCkgKiAxZTcgfCAwOw0KDQogICAgLy8gQnJvd3NlcnMgc3VwcG9ydGluZyBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLg0KICAgIH0gZWxzZSBpZiAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcykgew0KICAgICAgZCA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KGspKTsNCg0KICAgICAgZm9yICg7IGkgPCBrOykgew0KICAgICAgICBuID0gZFtpXTsNCg0KICAgICAgICAvLyAwIDw9IG4gPCA0Mjk0OTY3Mjk2DQogICAgICAgIC8vIFByb2JhYmlsaXR5IG4gPj0gNC4yOWU5LCBpcyA0OTY3Mjk2IC8gNDI5NDk2NzI5NiA9IDAuMDAxMTYgKDEgaW4gODY1KS4NCiAgICAgICAgaWYgKG4gPj0gNC4yOWU5KSB7DQogICAgICAgICAgZFtpXSA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXTsNCiAgICAgICAgfSBlbHNlIHsNCg0KICAgICAgICAgIC8vIDAgPD0gbiA8PSA0Mjg5OTk5OTk5DQogICAgICAgICAgLy8gMCA8PSAobiAlIDFlNykgPD0gOTk5OTk5OQ0KICAgICAgICAgIHJkW2krK10gPSBuICUgMWU3Ow0KICAgICAgICB9DQogICAgICB9DQoNCiAgICAvLyBOb2RlLmpzIHN1cHBvcnRpbmcgY3J5cHRvLnJhbmRvbUJ5dGVzLg0KICAgIH0gZWxzZSBpZiAoY3J5cHRvLnJhbmRvbUJ5dGVzKSB7DQoNCiAgICAgIC8vIGJ1ZmZlcg0KICAgICAgZCA9IGNyeXB0by5yYW5kb21CeXRlcyhrICo9IDQpOw0KDQogICAgICBmb3IgKDsgaSA8IGs7KSB7DQoNCiAgICAgICAgLy8gMCA8PSBuIDwgMjE0NzQ4MzY0OA0KICAgICAgICBuID0gZFtpXSArIChkW2kgKyAxXSA8PCA4KSArIChkW2kgKyAyXSA8PCAxNikgKyAoKGRbaSArIDNdICYgMHg3ZikgPDwgMjQpOw0KDQogICAgICAgIC8vIFByb2JhYmlsaXR5IG4gPj0gMi4xNGU5LCBpcyA3NDgzNjQ4IC8gMjE0NzQ4MzY0OCA9IDAuMDAzNSAoMSBpbiAyODYpLg0KICAgICAgICBpZiAobiA+PSAyLjE0ZTkpIHsNCiAgICAgICAgICBjcnlwdG8ucmFuZG9tQnl0ZXMoNCkuY29weShkLCBpKTsNCiAgICAgICAgfSBlbHNlIHsNCg0KICAgICAgICAgIC8vIDAgPD0gbiA8PSAyMTM5OTk5OTk5DQogICAgICAgICAgLy8gMCA8PSAobiAlIDFlNykgPD0gOTk5OTk5OQ0KICAgICAgICAgIHJkLnB1c2gobiAlIDFlNyk7DQogICAgICAgICAgaSArPSA0Ow0KICAgICAgICB9DQogICAgICB9DQoNCiAgICAgIGkgPSBrIC8gNDsNCiAgICB9IGVsc2Ugew0KICAgICAgdGhyb3cgRXJyb3IoY3J5cHRvVW5hdmFpbGFibGUpOw0KICAgIH0NCg0KICAgIGsgPSByZFstLWldOw0KICAgIHNkICU9IExPR19CQVNFOw0KDQogICAgLy8gQ29udmVydCB0cmFpbGluZyBkaWdpdHMgdG8gemVyb3MgYWNjb3JkaW5nIHRvIHNkLg0KICAgIGlmIChrICYmIHNkKSB7DQogICAgICBuID0gbWF0aHBvdygxMCwgTE9HX0JBU0UgLSBzZCk7DQogICAgICByZFtpXSA9IChrIC8gbiB8IDApICogbjsNCiAgICB9DQoNCiAgICAvLyBSZW1vdmUgdHJhaWxpbmcgd29yZHMgd2hpY2ggYXJlIHplcm8uDQogICAgZm9yICg7IHJkW2ldID09PSAwOyBpLS0pIHJkLnBvcCgpOw0KDQogICAgLy8gWmVybz8NCiAgICBpZiAoaSA8IDApIHsNCiAgICAgIGUgPSAwOw0KICAgICAgcmQgPSBbMF07DQogICAgfSBlbHNlIHsNCiAgICAgIGUgPSAtMTsNCg0KICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgd29yZHMgd2hpY2ggYXJlIHplcm8gYW5kIGFkanVzdCBleHBvbmVudCBhY2NvcmRpbmdseS4NCiAgICAgIGZvciAoOyByZFswXSA9PT0gMDsgZSAtPSBMT0dfQkFTRSkgcmQuc2hpZnQoKTsNCg0KICAgICAgLy8gQ291bnQgdGhlIGRpZ2l0cyBvZiB0aGUgZmlyc3Qgd29yZCBvZiByZCB0byBkZXRlcm1pbmUgbGVhZGluZyB6ZXJvcy4NCiAgICAgIGZvciAoayA9IDEsIG4gPSByZFswXTsgbiA+PSAxMDsgbiAvPSAxMCkgaysrOw0KDQogICAgICAvLyBBZGp1c3QgdGhlIGV4cG9uZW50IGZvciBsZWFkaW5nIHplcm9zIG9mIHRoZSBmaXJzdCB3b3JkIG9mIHJkLg0KICAgICAgaWYgKGsgPCBMT0dfQkFTRSkgZSAtPSBMT0dfQkFTRSAtIGs7DQogICAgfQ0KDQogICAgci5lID0gZTsNCiAgICByLmQgPSByZDsNCg0KICAgIHJldHVybiByOw0KICB9DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgcm91bmRlZCB0byBhbiBpbnRlZ2VyIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC4NCiAgICoNCiAgICogVG8gZW11bGF0ZSBgTWF0aC5yb3VuZGAsIHNldCByb3VuZGluZyB0byA3IChST1VORF9IQUxGX0NFSUwpLg0KICAgKg0KICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9DQogICAqDQogICAqLw0KICBmdW5jdGlvbiByb3VuZCh4KSB7DQogICAgcmV0dXJuIGZpbmFsaXNlKHggPSBuZXcgdGhpcyh4KSwgeC5lICsgMSwgdGhpcy5yb3VuZGluZyk7DQogIH0NCg0KDQogIC8qDQogICAqIFJldHVybg0KICAgKiAgIDEgICAgaWYgeCA+IDAsDQogICAqICAtMSAgICBpZiB4IDwgMCwNCiAgICogICAwICAgIGlmIHggaXMgMCwNCiAgICogIC0wICAgIGlmIHggaXMgLTAsDQogICAqICAgTmFOICBvdGhlcndpc2UNCiAgICoNCiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfQ0KICAgKg0KICAgKi8NCiAgZnVuY3Rpb24gc2lnbih4KSB7DQogICAgeCA9IG5ldyB0aGlzKHgpOw0KICAgIHJldHVybiB4LmQgPyAoeC5kWzBdID8geC5zIDogMCAqIHgucykgOiB4LnMgfHwgTmFOOw0KICB9DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgc2luZSBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzDQogICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC4NCiAgICoNCiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuDQogICAqDQogICAqLw0KICBmdW5jdGlvbiBzaW4oeCkgew0KICAgIHJldHVybiBuZXcgdGhpcyh4KS5zaW4oKTsNCiAgfQ0KDQoNCiAgLyoNCiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGh5cGVyYm9saWMgc2luZSBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmANCiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC4NCiAgICoNCiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuDQogICAqDQogICAqLw0KICBmdW5jdGlvbiBzaW5oKHgpIHsNCiAgICByZXR1cm4gbmV3IHRoaXMoeCkuc2luaCgpOw0KICB9DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgc3F1YXJlIHJvb3Qgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50DQogICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuDQogICAqDQogICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0NCiAgICoNCiAgICovDQogIGZ1bmN0aW9uIHNxcnQoeCkgew0KICAgIHJldHVybiBuZXcgdGhpcyh4KS5zcXJ0KCk7DQogIH0NCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIGB4YCBtaW51cyBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzDQogICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC4NCiAgICoNCiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfQ0KICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9DQogICAqDQogICAqLw0KICBmdW5jdGlvbiBzdWIoeCwgeSkgew0KICAgIHJldHVybiBuZXcgdGhpcyh4KS5zdWIoeSk7DQogIH0NCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB0YW5nZW50IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudA0KICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLg0KICAgKg0KICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IEEgdmFsdWUgaW4gcmFkaWFucy4NCiAgICoNCiAgICovDQogIGZ1bmN0aW9uIHRhbih4KSB7DQogICAgcmV0dXJuIG5ldyB0aGlzKHgpLnRhbigpOw0KICB9DQoNCg0KICAvKg0KICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYA0KICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLg0KICAgKg0KICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IEEgdmFsdWUgaW4gcmFkaWFucy4NCiAgICoNCiAgICovDQogIGZ1bmN0aW9uIHRhbmgoeCkgew0KICAgIHJldHVybiBuZXcgdGhpcyh4KS50YW5oKCk7DQogIH0NCg0KDQogIC8qDQogICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIGB4YCB0cnVuY2F0ZWQgdG8gYW4gaW50ZWdlci4NCiAgICoNCiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfQ0KICAgKg0KICAgKi8NCiAgZnVuY3Rpb24gdHJ1bmMoeCkgew0KICAgIHJldHVybiBmaW5hbGlzZSh4ID0gbmV3IHRoaXMoeCksIHguZSArIDEsIDEpOw0KICB9DQoNCg0KICAvLyBDcmVhdGUgYW5kIGNvbmZpZ3VyZSBpbml0aWFsIERlY2ltYWwgY29uc3RydWN0b3IuDQogIERlY2ltYWwgPSBjbG9uZShERUZBVUxUUyk7DQoNCiAgRGVjaW1hbFsnZGVmYXVsdCddID0gRGVjaW1hbC5EZWNpbWFsID0gRGVjaW1hbDsNCg0KICAvLyBDcmVhdGUgdGhlIGludGVybmFsIGNvbnN0YW50cyBmcm9tIHRoZWlyIHN0cmluZyB2YWx1ZXMuDQogIExOMTAgPSBuZXcgRGVjaW1hbChMTjEwKTsNCiAgUEkgPSBuZXcgRGVjaW1hbChQSSk7DQoNCg0KICAvLyBFeHBvcnQuDQoNCg0KICAvLyBBTUQuDQogIGlmICh0cnVlKSB7DQogICAgIShfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyA9IChmdW5jdGlvbiAoKSB7DQogICAgICByZXR1cm4gRGVjaW1hbDsNCiAgICB9KS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18sIGV4cG9ydHMsIG1vZHVsZSksCgkJCQlfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyAhPT0gdW5kZWZpbmVkICYmIChtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fKSk7DQoNCiAgLy8gTm9kZSBhbmQgb3RoZXIgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBtb2R1bGUuZXhwb3J0cy4NCiAgfSBlbHNlIHt9DQp9KSh0aGlzKTsNCgoKLyoqKi8gfSksCi8qIDE3ICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKCgovLyBNYXAgdGhlIGNoYXJhY3RlcnMgdG8gZXNjYXBlIHRvIHRoZWlyIGVzY2FwZWQgdmFsdWVzLiBUaGUgbGlzdCBpcyBkZXJpdmVkCi8vIGZyb20gaHR0cDovL3d3dy5jZXNwZWRlcy5vcmcvYmxvZy84NS9ob3ctdG8tZXNjYXBlLWxhdGV4LXNwZWNpYWwtY2hhcmFjdGVycwoKdmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsKCnZhciBkZWZhdWx0RXNjYXBlcyA9IHsKICAieyI6ICJcXHsiLAogICJ9IjogIlxcfSIsCiAgIlxcIjogIlxcdGV4dGJhY2tzbGFzaHt9IiwKICAiIyI6ICJcXCMiLAogICQ6ICJcXCQiLAogICIlIjogIlxcJSIsCiAgIiYiOiAiXFwmIiwKICAiXiI6ICJcXHRleHRhc2NpaWNpcmN1bXt9IiwKICBfOiAiXFxfIiwKICAifiI6ICJcXHRleHRhc2NpaXRpbGRle30iCn07CnZhciBmb3JtYXRFc2NhcGVzID0gewogICJcdTIwMTMiOiAiXFwtLSIsCiAgIlx1MjAxNCI6ICJcXC0tLSIsCiAgIiAiOiAifiIsCiAgIlx0IjogIlxccXF1YWR7fSIsCiAgIlxyXG4iOiAiXFxuZXdsaW5le30iLAogICJcbiI6ICJcXG5ld2xpbmV7fSIKfTsKCnZhciBkZWZhdWx0RXNjYXBlTWFwRm4gPSBmdW5jdGlvbiBkZWZhdWx0RXNjYXBlTWFwRm4oZGVmYXVsdEVzY2FwZXMsIGZvcm1hdEVzY2FwZXMpIHsKICByZXR1cm4gX2V4dGVuZHMoe30sIGRlZmF1bHRFc2NhcGVzLCBmb3JtYXRFc2NhcGVzKTsKfTsKCi8qKgogKiBFc2NhcGUgYSBzdHJpbmcgdG8gYmUgdXNlZCBpbiBMYVRlWCBkb2N1bWVudHMuCiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgdGhlIHN0cmluZyB0byBiZSBlc2NhcGVkLgogKiBAcGFyYW0ge2Jvb2xlYW59IHBhcmFtcy5wcmVzZXJ2ZUZvcm1hdHRpbmcgd2hldGhlciBmb3JtYXR0aW5nIGVzY2FwZXMgc2hvdWxkCiAqICBiZSBwZXJmb3JtZWQgKGRlZmF1bHQ6IGZhbHNlKS4KICogQHBhcmFtIHtmdW5jdGlvbn0gcGFyYW1zLmVzY2FwZU1hcEZuIHRoZSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIGVzY2FwZSBtYXBzLgogKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBlc2NhcGVkIHN0cmluZywgcmVhZHkgdG8gYmUgdXNlZCBpbiBMYVRlWC4KICovCm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0cikgewogIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSwKICAgICAgX3JlZiRwcmVzZXJ2ZUZvcm1hdHRpID0gX3JlZi5wcmVzZXJ2ZUZvcm1hdHRpbmcsCiAgICAgIHByZXNlcnZlRm9ybWF0dGluZyA9IF9yZWYkcHJlc2VydmVGb3JtYXR0aSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBfcmVmJHByZXNlcnZlRm9ybWF0dGksCiAgICAgIF9yZWYkZXNjYXBlTWFwRm4gPSBfcmVmLmVzY2FwZU1hcEZuLAogICAgICBlc2NhcGVNYXBGbiA9IF9yZWYkZXNjYXBlTWFwRm4gPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRFc2NhcGVNYXBGbiA6IF9yZWYkZXNjYXBlTWFwRm47CgogIHZhciBydW5uaW5nU3RyID0gU3RyaW5nKHN0cik7CiAgdmFyIHJlc3VsdCA9ICIiOwoKICB2YXIgZXNjYXBlcyA9IGVzY2FwZU1hcEZuKF9leHRlbmRzKHt9LCBkZWZhdWx0RXNjYXBlcyksIHByZXNlcnZlRm9ybWF0dGluZyA/IF9leHRlbmRzKHt9LCBmb3JtYXRFc2NhcGVzKSA6IHt9KTsKICB2YXIgZXNjYXBlS2V5cyA9IE9iamVjdC5rZXlzKGVzY2FwZXMpOyAvLyBhcyBpdCBpcyByZXVzZWQgbGF0ZXIgb24KCiAgLy8gQWxnb3JpdGhtOiBHbyB0aHJvdWdoIHRoZSBzdHJpbmcgY2hhcmFjdGVyIGJ5IGNoYXJhY3RlciwgaWYgaXQgbWF0Y2hlcwogIC8vIHdpdGggb25lIG9mIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgdGhlbiB3ZSdsbCByZXBsYWNlIGl0IHdpdGggdGhlIGVzY2FwZWQKICAvLyB2ZXJzaW9uLgoKICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcCgpIHsKICAgIHZhciBzcGVjaWFsQ2hhckZvdW5kID0gZmFsc2U7CiAgICBlc2NhcGVLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSwgaW5kZXgpIHsKICAgICAgaWYgKHNwZWNpYWxDaGFyRm91bmQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHJ1bm5pbmdTdHIubGVuZ3RoID49IGtleS5sZW5ndGggJiYgcnVubmluZ1N0ci5zbGljZSgwLCBrZXkubGVuZ3RoKSA9PT0ga2V5KSB7CiAgICAgICAgcmVzdWx0ICs9IGVzY2FwZXNbZXNjYXBlS2V5c1tpbmRleF1dOwogICAgICAgIHJ1bm5pbmdTdHIgPSBydW5uaW5nU3RyLnNsaWNlKGtleS5sZW5ndGgsIHJ1bm5pbmdTdHIubGVuZ3RoKTsKICAgICAgICBzcGVjaWFsQ2hhckZvdW5kID0gdHJ1ZTsKICAgICAgfQogICAgfSk7CiAgICBpZiAoIXNwZWNpYWxDaGFyRm91bmQpIHsKICAgICAgcmVzdWx0ICs9IHJ1bm5pbmdTdHIuc2xpY2UoMCwgMSk7CiAgICAgIHJ1bm5pbmdTdHIgPSBydW5uaW5nU3RyLnNsaWNlKDEsIHJ1bm5pbmdTdHIubGVuZ3RoKTsKICAgIH0KICB9OwoKICB3aGlsZSAocnVubmluZ1N0cikgewogICAgX2xvb3AoKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfTsKCi8qKiovIH0pLAovKiAxOCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7CgpmdW5jdGlvbiBFICgpIHsKICAvLyBLZWVwIHRoaXMgZW1wdHkgc28gaXQncyBlYXNpZXIgdG8gaW5oZXJpdCBmcm9tCiAgLy8gKHZpYSBodHRwczovL2dpdGh1Yi5jb20vbGlwc21hY2sgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc2NvdHRjb3JnYW4vdGlueS1lbWl0dGVyL2lzc3Vlcy8zKQp9CgpFLnByb3RvdHlwZSA9IHsKICBvbjogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBjdHgpIHsKICAgIHZhciBlID0gdGhpcy5lIHx8ICh0aGlzLmUgPSB7fSk7CgogICAgKGVbbmFtZV0gfHwgKGVbbmFtZV0gPSBbXSkpLnB1c2goewogICAgICBmbjogY2FsbGJhY2ssCiAgICAgIGN0eDogY3R4CiAgICB9KTsKCiAgICByZXR1cm4gdGhpczsKICB9LAoKICBvbmNlOiBmdW5jdGlvbiAobmFtZSwgY2FsbGJhY2ssIGN0eCkgewogICAgdmFyIHNlbGYgPSB0aGlzOwogICAgZnVuY3Rpb24gbGlzdGVuZXIgKCkgewogICAgICBzZWxmLm9mZihuYW1lLCBsaXN0ZW5lcik7CiAgICAgIGNhbGxiYWNrLmFwcGx5KGN0eCwgYXJndW1lbnRzKTsKICAgIH07CgogICAgbGlzdGVuZXIuXyA9IGNhbGxiYWNrCiAgICByZXR1cm4gdGhpcy5vbihuYW1lLCBsaXN0ZW5lciwgY3R4KTsKICB9LAoKICBlbWl0OiBmdW5jdGlvbiAobmFtZSkgewogICAgdmFyIGRhdGEgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7CiAgICB2YXIgZXZ0QXJyID0gKCh0aGlzLmUgfHwgKHRoaXMuZSA9IHt9KSlbbmFtZV0gfHwgW10pLnNsaWNlKCk7CiAgICB2YXIgaSA9IDA7CiAgICB2YXIgbGVuID0gZXZ0QXJyLmxlbmd0aDsKCiAgICBmb3IgKGk7IGkgPCBsZW47IGkrKykgewogICAgICBldnRBcnJbaV0uZm4uYXBwbHkoZXZ0QXJyW2ldLmN0eCwgZGF0YSk7CiAgICB9CgogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgb2ZmOiBmdW5jdGlvbiAobmFtZSwgY2FsbGJhY2spIHsKICAgIHZhciBlID0gdGhpcy5lIHx8ICh0aGlzLmUgPSB7fSk7CiAgICB2YXIgZXZ0cyA9IGVbbmFtZV07CiAgICB2YXIgbGl2ZUV2ZW50cyA9IFtdOwoKICAgIGlmIChldnRzICYmIGNhbGxiYWNrKSB7CiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBldnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgaWYgKGV2dHNbaV0uZm4gIT09IGNhbGxiYWNrICYmIGV2dHNbaV0uZm4uXyAhPT0gY2FsbGJhY2spCiAgICAgICAgICBsaXZlRXZlbnRzLnB1c2goZXZ0c1tpXSk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBSZW1vdmUgZXZlbnQgZnJvbSBxdWV1ZSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrCiAgICAvLyBTdWdnZXN0ZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2xhemQKICAgIC8vIFJlZjogaHR0cHM6Ly9naXRodWIuY29tL3Njb3R0Y29yZ2FuL3RpbnktZW1pdHRlci9jb21taXQvYzZlYmZhYTliYzk3M2IzM2QxMTBhODRhMzA3NzQyYjdjZjk0Yzk1MyNjb21taXRjb21tZW50LTUwMjQ5MTAKCiAgICAobGl2ZUV2ZW50cy5sZW5ndGgpCiAgICAgID8gZVtuYW1lXSA9IGxpdmVFdmVudHMKICAgICAgOiBkZWxldGUgZVtuYW1lXTsKCiAgICByZXR1cm4gdGhpczsKICB9Cn07Cgptb2R1bGUuZXhwb3J0cyA9IEU7Cm1vZHVsZS5leHBvcnRzLlRpbnlFbWl0dGVyID0gRTsKCgovKioqLyB9KSwKLyogMTkgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKdmFyIGFsbCA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpOwoKdmFyIF9yZXF1aXJlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMiksCiAgICBjcmVhdGUgPSBfcmVxdWlyZS5jcmVhdGU7Cgp2YXIgZGVmYXVsdEluc3RhbmNlID0gY3JlYXRlKGFsbCk7IC8vIFRPRE86IG5vdCBuaWNlIGhhdmluZyB0byByZXZlcnQgdG8gQ29tbW9uSlMsIGZpbmQgYW4gRVM2IHNvbHV0aW9uCgptb2R1bGUuZXhwb3J0cyA9Ci8qICNfX1BVUkVfXyAqLwpkZWZhdWx0SW5zdGFuY2U7CgovKioqLyB9KSwKLyogMjAgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewoKdmFyIGc7CgovLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZQpnID0gKGZ1bmN0aW9uKCkgewoJcmV0dXJuIHRoaXM7Cn0pKCk7Cgp0cnkgewoJLy8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApCglnID0gZyB8fCBuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKTsKfSBjYXRjaCAoZSkgewoJLy8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGUKCWlmICh0eXBlb2Ygd2luZG93ID09PSAib2JqZWN0IikgZyA9IHdpbmRvdzsKfQoKLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLgovLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQncwovLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59Cgptb2R1bGUuZXhwb3J0cyA9IGc7CgoKLyoqKi8gfSksCi8qIDIxICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwoKLy8gRVhURVJOQUwgTU9EVUxFOiAuL3NyYy91dGlscy9pcy5qcwp2YXIgaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpOwoKLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy90eXBlZC1mdW5jdGlvbi90eXBlZC1mdW5jdGlvbi5qcwp2YXIgdHlwZWRfZnVuY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTsKdmFyIHR5cGVkX2Z1bmN0aW9uX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHR5cGVkX2Z1bmN0aW9uKTsKCi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvdXRpbHMvbnVtYmVyLmpzCnZhciB1dGlsc19udW1iZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOwoKLy8gRVhURVJOQUwgTU9EVUxFOiAuL3NyYy91dGlscy9mYWN0b3J5LmpzCnZhciBmYWN0b3J5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTsKCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2NvcmUvZnVuY3Rpb24vdHlwZWQuanMKLyoqCiAqIENyZWF0ZSBhIHR5cGVkLWZ1bmN0aW9uIHdoaWNoIGNoZWNrcyB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyBhbmQKICogY2FuIG1hdGNoIHRoZW0gYWdhaW5zdCBtdWx0aXBsZSBwcm92aWRlZCBzaWduYXR1cmVzLiBUaGUgdHlwZWQtZnVuY3Rpb24KICogYXV0b21hdGljYWxseSBjb252ZXJ0cyBpbnB1dHMgaW4gb3JkZXIgdG8gZmluZCBhIG1hdGNoaW5nIHNpZ25hdHVyZS4KICogVHlwZWQgZnVuY3Rpb25zIHRocm93IGluZm9ybWF0aXZlIGVycm9ycyBpbiBjYXNlIG9mIHdyb25nIGlucHV0IGFyZ3VtZW50cy4KICoKICogU2VlIHRoZSBsaWJyYXJ5IFt0eXBlZC1mdW5jdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy90eXBlZC1mdW5jdGlvbikKICogZm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24uCiAqCiAqIFN5bnRheDoKICoKICogICAgIG1hdGgudHlwZWQobmFtZSwgc2lnbmF0dXJlcykgOiBmdW5jdGlvbgogKiAgICAgbWF0aC50eXBlZChzaWduYXR1cmVzKSA6IGZ1bmN0aW9uCiAqCiAqIEV4YW1wbGVzOgogKgogKiAgICAgLy8gY3JlYXRlIGEgdHlwZWQgZnVuY3Rpb24gd2l0aCBtdWx0aXBsZSB0eXBlcyBwZXIgYXJndW1lbnQgKHR5cGUgdW5pb24pCiAqICAgICBjb25zdCBmbjIgPSB0eXBlZCh7CiAqICAgICAgICdudW1iZXIgfCBib29sZWFuJzogZnVuY3Rpb24gKGIpIHsKICogICAgICAgICByZXR1cm4gJ2IgaXMgYSBudW1iZXIgb3IgYm9vbGVhbicKICogICAgICAgfSwKICogICAgICAgJ3N0cmluZywgbnVtYmVyIHwgYm9vbGVhbic6IGZ1bmN0aW9uIChhLCBiKSB7CiAqICAgICAgICAgcmV0dXJuICdhIGlzIGEgc3RyaW5nLCBiIGlzIGEgbnVtYmVyIG9yIGJvb2xlYW4nCiAqICAgICAgIH0KICogICAgIH0pCiAqCiAqICAgICAvLyBjcmVhdGUgYSB0eXBlZCBmdW5jdGlvbiB3aXRoIGFuIGFueSB0eXBlIGFyZ3VtZW50CiAqICAgICBjb25zdCBsb2cgPSB0eXBlZCh7CiAqICAgICAgICdzdHJpbmcsIGFueSc6IGZ1bmN0aW9uIChldmVudCwgZGF0YSkgewogKiAgICAgICAgIGNvbnNvbGUubG9nKCdldmVudDogJyArIGV2ZW50ICsgJywgZGF0YTogJyArIEpTT04uc3RyaW5naWZ5KGRhdGEpKQogKiAgICAgICB9CiAqICAgICB9KQogKgogKiBAcGFyYW0ge3N0cmluZ30gW25hbWVdICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25hbCBuYW1lIGZvciB0aGUgdHlwZWQtZnVuY3Rpb24KICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBmdW5jdGlvbj59IHNpZ25hdHVyZXMgICBPYmplY3Qgd2l0aCBvbmUgb3IgbXVsdGlwbGUgZnVuY3Rpb24gc2lnbmF0dXJlcwogKiBAcmV0dXJucyB7ZnVuY3Rpb259IFRoZSBjcmVhdGVkIHR5cGVkLWZ1bmN0aW9uLgogKi8KCgoKIC8vIHJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdHlwZWQtZnVuY3Rpb24KCnZhciBfY3JlYXRlVHlwZWQyID0gZnVuY3Rpb24gX2NyZWF0ZVR5cGVkKCkgewogIC8vIGluaXRpYWxseSwgcmV0dXJuIHRoZSBvcmlnaW5hbCBpbnN0YW5jZSBvZiB0eXBlZC1mdW5jdGlvbgogIC8vIGNvbnNlY3V0aXZlbHksIHJldHVybiBhIG5ldyBpbnN0YW5jZSBmcm9tIHR5cGVkLmNyZWF0ZS4KICBfY3JlYXRlVHlwZWQyID0gdHlwZWRfZnVuY3Rpb25fZGVmYXVsdC5hLmNyZWF0ZTsKICByZXR1cm4gdHlwZWRfZnVuY3Rpb25fZGVmYXVsdC5hOwp9OwoKdmFyIHR5cGVkX2RlcGVuZGVuY2llcyA9IFsnP0JpZ051bWJlcicsICc/Q29tcGxleCcsICc/RGVuc2VNYXRyaXgnLCAnP0ZyYWN0aW9uJ107Ci8qKgogKiBGYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyB0eXBlZCBpbnN0YW5jZQogKiBAcGFyYW0ge09iamVjdH0gZGVwZW5kZW5jaWVzICAgT2JqZWN0IHdpdGggZGF0YSB0eXBlcyBsaWtlIENvbXBsZXggYW5kIEJpZ051bWJlcgogKiBAcmV0dXJucyB7RnVuY3Rpb259CiAqLwoKdmFyIHR5cGVkX2NyZWF0ZVR5cGVkID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoJ3R5cGVkJywgdHlwZWRfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiBjcmVhdGVUeXBlZChfcmVmKSB7CiAgdmFyIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLAogICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LAogICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXgsCiAgICAgIEZyYWN0aW9uID0gX3JlZi5GcmFjdGlvbjsKCiAgLy8gVE9ETzogdHlwZWQtZnVuY3Rpb24gbXVzdCBiZSBhYmxlIHRvIHNpbGVudGx5IGlnbm9yZSBzaWduYXR1cmVzIHdpdGggdW5rbm93biBkYXRhIHR5cGVzCiAgLy8gZ2V0IGEgbmV3IGluc3RhbmNlIG9mIHR5cGVkLWZ1bmN0aW9uCiAgdmFyIHR5cGVkID0gX2NyZWF0ZVR5cGVkMigpOyAvLyBkZWZpbmUgYWxsIHR5cGVzLiBUaGUgb3JkZXIgb2YgdGhlIHR5cGVzIGRldGVybWluZXMgaW4gd2hpY2ggb3JkZXIgZnVuY3Rpb24KICAvLyBhcmd1bWVudHMgYXJlIHR5cGUtY2hlY2tlZCAoc28gZm9yIHBlcmZvcm1hbmNlIGl0J3MgaW1wb3J0YW50IHRvIHB1dCB0aGUKICAvLyBtb3N0IHVzZWQgdHlwZXMgZmlyc3QpLgoKCiAgdHlwZWQudHlwZXMgPSBbewogICAgbmFtZTogJ251bWJlcicsCiAgICB0ZXN0OiBpc1sieSIgLyogaXNOdW1iZXIgKi9dCiAgfSwgewogICAgbmFtZTogJ0NvbXBsZXgnLAogICAgdGVzdDogaXNbImoiIC8qIGlzQ29tcGxleCAqL10KICB9LCB7CiAgICBuYW1lOiAnQmlnTnVtYmVyJywKICAgIHRlc3Q6IGlzWyJlIiAvKiBpc0JpZ051bWJlciAqL10KICB9LCB7CiAgICBuYW1lOiAnRnJhY3Rpb24nLAogICAgdGVzdDogaXNbIm8iIC8qIGlzRnJhY3Rpb24gKi9dCiAgfSwgewogICAgbmFtZTogJ1VuaXQnLAogICAgdGVzdDogaXNbIkwiIC8qIGlzVW5pdCAqL10KICB9LCB7CiAgICBuYW1lOiAnc3RyaW5nJywKICAgIHRlc3Q6IGlzWyJJIiAvKiBpc1N0cmluZyAqL10KICB9LCB7CiAgICBuYW1lOiAnQ2hhaW4nLAogICAgdGVzdDogaXNbImgiIC8qIGlzQ2hhaW4gKi9dCiAgfSwgewogICAgbmFtZTogJ0FycmF5JywKICAgIHRlc3Q6IGlzWyJiIiAvKiBpc0FycmF5ICovXQogIH0sIHsKICAgIG5hbWU6ICdNYXRyaXgnLAogICAgdGVzdDogaXNbInYiIC8qIGlzTWF0cml4ICovXQogIH0sIHsKICAgIG5hbWU6ICdEZW5zZU1hdHJpeCcsCiAgICB0ZXN0OiBpc1sibiIgLyogaXNEZW5zZU1hdHJpeCAqL10KICB9LCB7CiAgICBuYW1lOiAnU3BhcnNlTWF0cml4JywKICAgIHRlc3Q6IGlzWyJIIiAvKiBpc1NwYXJzZU1hdHJpeCAqL10KICB9LCB7CiAgICBuYW1lOiAnUmFuZ2UnLAogICAgdGVzdDogaXNbIkQiIC8qIGlzUmFuZ2UgKi9dCiAgfSwgewogICAgbmFtZTogJ0luZGV4JywKICAgIHRlc3Q6IGlzWyJ0IiAvKiBpc0luZGV4ICovXQogIH0sIHsKICAgIG5hbWU6ICdib29sZWFuJywKICAgIHRlc3Q6IGlzWyJnIiAvKiBpc0Jvb2xlYW4gKi9dCiAgfSwgewogICAgbmFtZTogJ1Jlc3VsdFNldCcsCiAgICB0ZXN0OiBpc1siRyIgLyogaXNSZXN1bHRTZXQgKi9dCiAgfSwgewogICAgbmFtZTogJ0hlbHAnLAogICAgdGVzdDogaXNbInMiIC8qIGlzSGVscCAqL10KICB9LCB7CiAgICBuYW1lOiAnZnVuY3Rpb24nLAogICAgdGVzdDogaXNbInAiIC8qIGlzRnVuY3Rpb24gKi9dCiAgfSwgewogICAgbmFtZTogJ0RhdGUnLAogICAgdGVzdDogaXNbIm0iIC8qIGlzRGF0ZSAqL10KICB9LCB7CiAgICBuYW1lOiAnUmVnRXhwJywKICAgIHRlc3Q6IGlzWyJGIiAvKiBpc1JlZ0V4cCAqL10KICB9LCB7CiAgICBuYW1lOiAnbnVsbCcsCiAgICB0ZXN0OiBpc1sieCIgLyogaXNOdWxsICovXQogIH0sIHsKICAgIG5hbWU6ICd1bmRlZmluZWQnLAogICAgdGVzdDogaXNbIksiIC8qIGlzVW5kZWZpbmVkICovXQogIH0sIHsKICAgIG5hbWU6ICdBY2Nlc3Nvck5vZGUnLAogICAgdGVzdDogaXNbImEiIC8qIGlzQWNjZXNzb3JOb2RlICovXQogIH0sIHsKICAgIG5hbWU6ICdBcnJheU5vZGUnLAogICAgdGVzdDogaXNbImMiIC8qIGlzQXJyYXlOb2RlICovXQogIH0sIHsKICAgIG5hbWU6ICdBc3NpZ25tZW50Tm9kZScsCiAgICB0ZXN0OiBpc1siZCIgLyogaXNBc3NpZ25tZW50Tm9kZSAqL10KICB9LCB7CiAgICBuYW1lOiAnQmxvY2tOb2RlJywKICAgIHRlc3Q6IGlzWyJmIiAvKiBpc0Jsb2NrTm9kZSAqL10KICB9LCB7CiAgICBuYW1lOiAnQ29uZGl0aW9uYWxOb2RlJywKICAgIHRlc3Q6IGlzWyJrIiAvKiBpc0NvbmRpdGlvbmFsTm9kZSAqL10KICB9LCB7CiAgICBuYW1lOiAnQ29uc3RhbnROb2RlJywKICAgIHRlc3Q6IGlzWyJsIiAvKiBpc0NvbnN0YW50Tm9kZSAqL10KICB9LCB7CiAgICBuYW1lOiAnRnVuY3Rpb25Ob2RlJywKICAgIHRlc3Q6IGlzWyJyIiAvKiBpc0Z1bmN0aW9uTm9kZSAqL10KICB9LCB7CiAgICBuYW1lOiAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZScsCiAgICB0ZXN0OiBpc1sicSIgLyogaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlICovXQogIH0sIHsKICAgIG5hbWU6ICdJbmRleE5vZGUnLAogICAgdGVzdDogaXNbInUiIC8qIGlzSW5kZXhOb2RlICovXQogIH0sIHsKICAgIG5hbWU6ICdOb2RlJywKICAgIHRlc3Q6IGlzWyJ3IiAvKiBpc05vZGUgKi9dCiAgfSwgewogICAgbmFtZTogJ09iamVjdE5vZGUnLAogICAgdGVzdDogaXNbIkEiIC8qIGlzT2JqZWN0Tm9kZSAqL10KICB9LCB7CiAgICBuYW1lOiAnT3BlcmF0b3JOb2RlJywKICAgIHRlc3Q6IGlzWyJCIiAvKiBpc09wZXJhdG9yTm9kZSAqL10KICB9LCB7CiAgICBuYW1lOiAnUGFyZW50aGVzaXNOb2RlJywKICAgIHRlc3Q6IGlzWyJDIiAvKiBpc1BhcmVudGhlc2lzTm9kZSAqL10KICB9LCB7CiAgICBuYW1lOiAnUmFuZ2VOb2RlJywKICAgIHRlc3Q6IGlzWyJFIiAvKiBpc1JhbmdlTm9kZSAqL10KICB9LCB7CiAgICBuYW1lOiAnU3ltYm9sTm9kZScsCiAgICB0ZXN0OiBpc1siSiIgLyogaXNTeW1ib2xOb2RlICovXQogIH0sIHsKICAgIG5hbWU6ICdPYmplY3QnLAogICAgdGVzdDogaXNbInoiIC8qIGlzT2JqZWN0ICovXQogIH0gLy8gb3JkZXIgJ09iamVjdCcgbGFzdCwgaXQgbWF0Y2hlcyBvbiBvdGhlciBjbGFzc2VzIHRvbwogIF07CiAgdHlwZWQuY29udmVyc2lvbnMgPSBbewogICAgZnJvbTogJ251bWJlcicsCiAgICB0bzogJ0JpZ051bWJlcicsCiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHsKICAgICAgaWYgKCFCaWdOdW1iZXIpIHsKICAgICAgICB0aHJvd05vQmlnbnVtYmVyKHgpOwogICAgICB9IC8vIG5vdGU6IGNvbnZlcnNpb24gZnJvbSBudW1iZXIgdG8gQmlnTnVtYmVyIGNhbiBmYWlsIGlmIHggaGFzID4xNSBkaWdpdHMKCgogICAgICBpZiAoT2JqZWN0KHV0aWxzX251bWJlclsiZiIgLyogZGlnaXRzICovXSkoeCkgPiAxNSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBpbXBsaWNpdGx5IGNvbnZlcnQgYSBudW1iZXIgd2l0aCA+MTUgc2lnbmlmaWNhbnQgZGlnaXRzIHRvIEJpZ051bWJlciAnICsgJyh2YWx1ZTogJyArIHggKyAnKS4gJyArICdVc2UgZnVuY3Rpb24gYmlnbnVtYmVyKHgpIHRvIGNvbnZlcnQgdG8gQmlnTnVtYmVyLicpOwogICAgICB9CgogICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4KTsKICAgIH0KICB9LCB7CiAgICBmcm9tOiAnbnVtYmVyJywKICAgIHRvOiAnQ29tcGxleCcsCiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHsKICAgICAgaWYgKCFDb21wbGV4KSB7CiAgICAgICAgdGhyb3dOb0NvbXBsZXgoeCk7CiAgICAgIH0KCiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKTsKICAgIH0KICB9LCB7CiAgICBmcm9tOiAnbnVtYmVyJywKICAgIHRvOiAnc3RyaW5nJywKICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkgewogICAgICByZXR1cm4geCArICcnOwogICAgfQogIH0sIHsKICAgIGZyb206ICdCaWdOdW1iZXInLAogICAgdG86ICdDb21wbGV4JywKICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkgewogICAgICBpZiAoIUNvbXBsZXgpIHsKICAgICAgICB0aHJvd05vQ29tcGxleCh4KTsKICAgICAgfQoKICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudG9OdW1iZXIoKSwgMCk7CiAgICB9CiAgfSwgewogICAgZnJvbTogJ0ZyYWN0aW9uJywKICAgIHRvOiAnQmlnTnVtYmVyJywKICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgaW1wbGljaXRseSBjb252ZXJ0IGEgRnJhY3Rpb24gdG8gQmlnTnVtYmVyIG9yIHZpY2UgdmVyc2EuICcgKyAnVXNlIGZ1bmN0aW9uIGJpZ251bWJlcih4KSB0byBjb252ZXJ0IHRvIEJpZ051bWJlciBvciBmcmFjdGlvbih4KSB0byBjb252ZXJ0IHRvIEZyYWN0aW9uLicpOwogICAgfQogIH0sIHsKICAgIGZyb206ICdGcmFjdGlvbicsCiAgICB0bzogJ0NvbXBsZXgnLAogICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7CiAgICAgIGlmICghQ29tcGxleCkgewogICAgICAgIHRocm93Tm9Db21wbGV4KHgpOwogICAgICB9CgogICAgICByZXR1cm4gbmV3IENvbXBsZXgoeC52YWx1ZU9mKCksIDApOwogICAgfQogIH0sIHsKICAgIGZyb206ICdudW1iZXInLAogICAgdG86ICdGcmFjdGlvbicsCiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHsKICAgICAgaWYgKCFGcmFjdGlvbikgewogICAgICAgIHRocm93Tm9GcmFjdGlvbih4KTsKICAgICAgfQoKICAgICAgdmFyIGYgPSBuZXcgRnJhY3Rpb24oeCk7CgogICAgICBpZiAoZi52YWx1ZU9mKCkgIT09IHgpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgaW1wbGljaXRseSBjb252ZXJ0IGEgbnVtYmVyIHRvIGEgRnJhY3Rpb24gd2hlbiB0aGVyZSB3aWxsIGJlIGEgbG9zcyBvZiBwcmVjaXNpb24gJyArICcodmFsdWU6ICcgKyB4ICsgJykuICcgKyAnVXNlIGZ1bmN0aW9uIGZyYWN0aW9uKHgpIHRvIGNvbnZlcnQgdG8gRnJhY3Rpb24uJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiBmOwogICAgfQogIH0sIHsKICAgIC8vIEZJWE1FOiBhZGQgY29udmVyc2lvbiBmcm9tIEZyYWN0aW9uIHRvIG51bWJlciwgZm9yIGV4YW1wbGUgZm9yIGBzcXJ0KGZyYWN0aW9uKDEsMykpYAogICAgLy8gIGZyb206ICdGcmFjdGlvbicsCiAgICAvLyAgdG86ICdudW1iZXInLAogICAgLy8gIGNvbnZlcnQ6IGZ1bmN0aW9uICh4KSB7CiAgICAvLyAgICByZXR1cm4geC52YWx1ZU9mKCkKICAgIC8vICB9CiAgICAvLyB9LCB7CiAgICBmcm9tOiAnc3RyaW5nJywKICAgIHRvOiAnbnVtYmVyJywKICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkgewogICAgICB2YXIgbiA9IE51bWJlcih4KTsKCiAgICAgIGlmIChpc05hTihuKSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgIicgKyB4ICsgJyIgdG8gYSBudW1iZXInKTsKICAgICAgfQoKICAgICAgcmV0dXJuIG47CiAgICB9CiAgfSwgewogICAgZnJvbTogJ3N0cmluZycsCiAgICB0bzogJ0JpZ051bWJlcicsCiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHsKICAgICAgaWYgKCFCaWdOdW1iZXIpIHsKICAgICAgICB0aHJvd05vQmlnbnVtYmVyKHgpOwogICAgICB9CgogICAgICB0cnkgewogICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHgpOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0ICInICsgeCArICciIHRvIEJpZ051bWJlcicpOwogICAgICB9CiAgICB9CiAgfSwgewogICAgZnJvbTogJ3N0cmluZycsCiAgICB0bzogJ0ZyYWN0aW9uJywKICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkgewogICAgICBpZiAoIUZyYWN0aW9uKSB7CiAgICAgICAgdGhyb3dOb0ZyYWN0aW9uKHgpOwogICAgICB9CgogICAgICB0cnkgewogICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oeCk7CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgIicgKyB4ICsgJyIgdG8gRnJhY3Rpb24nKTsKICAgICAgfQogICAgfQogIH0sIHsKICAgIGZyb206ICdzdHJpbmcnLAogICAgdG86ICdDb21wbGV4JywKICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkgewogICAgICBpZiAoIUNvbXBsZXgpIHsKICAgICAgICB0aHJvd05vQ29tcGxleCh4KTsKICAgICAgfQoKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCk7CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgIicgKyB4ICsgJyIgdG8gQ29tcGxleCcpOwogICAgICB9CiAgICB9CiAgfSwgewogICAgZnJvbTogJ2Jvb2xlYW4nLAogICAgdG86ICdudW1iZXInLAogICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7CiAgICAgIHJldHVybiAreDsKICAgIH0KICB9LCB7CiAgICBmcm9tOiAnYm9vbGVhbicsCiAgICB0bzogJ0JpZ051bWJlcicsCiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHsKICAgICAgaWYgKCFCaWdOdW1iZXIpIHsKICAgICAgICB0aHJvd05vQmlnbnVtYmVyKHgpOwogICAgICB9CgogICAgICByZXR1cm4gbmV3IEJpZ051bWJlcigreCk7CiAgICB9CiAgfSwgewogICAgZnJvbTogJ2Jvb2xlYW4nLAogICAgdG86ICdGcmFjdGlvbicsCiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHsKICAgICAgaWYgKCFGcmFjdGlvbikgewogICAgICAgIHRocm93Tm9GcmFjdGlvbih4KTsKICAgICAgfQoKICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbigreCk7CiAgICB9CiAgfSwgewogICAgZnJvbTogJ2Jvb2xlYW4nLAogICAgdG86ICdzdHJpbmcnLAogICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7CiAgICAgIHJldHVybiBTdHJpbmcoeCk7CiAgICB9CiAgfSwgewogICAgZnJvbTogJ0FycmF5JywKICAgIHRvOiAnTWF0cml4JywKICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoYXJyYXkpIHsKICAgICAgaWYgKCFEZW5zZU1hdHJpeCkgewogICAgICAgIHRocm93Tm9NYXRyaXgoKTsKICAgICAgfQoKICAgICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeChhcnJheSk7CiAgICB9CiAgfSwgewogICAgZnJvbTogJ01hdHJpeCcsCiAgICB0bzogJ0FycmF5JywKICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQobWF0cml4KSB7CiAgICAgIHJldHVybiBtYXRyaXgudmFsdWVPZigpOwogICAgfQogIH1dOwogIHJldHVybiB0eXBlZDsKfSk7CgpmdW5jdGlvbiB0aHJvd05vQmlnbnVtYmVyKHgpIHsKICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHZhbHVlICIuY29uY2F0KHgsICIgaW50byBhIEJpZ051bWJlcjogbm8gY2xhc3MgJ0JpZ051bWJlcicgcHJvdmlkZWQiKSk7Cn0KCmZ1bmN0aW9uIHRocm93Tm9Db21wbGV4KHgpIHsKICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHZhbHVlICIuY29uY2F0KHgsICIgaW50byBhIENvbXBsZXggbnVtYmVyOiBubyBjbGFzcyAnQ29tcGxleCcgcHJvdmlkZWQiKSk7Cn0KCmZ1bmN0aW9uIHRocm93Tm9NYXRyaXgoKSB7CiAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCBhcnJheSBpbnRvIGEgTWF0cml4OiBubyBjbGFzcyBcJ0RlbnNlTWF0cml4XCcgcHJvdmlkZWQnKTsKfQoKZnVuY3Rpb24gdGhyb3dOb0ZyYWN0aW9uKHgpIHsKICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHZhbHVlICIuY29uY2F0KHgsICIgaW50byBhIEZyYWN0aW9uLCBubyBjbGFzcyAnRnJhY3Rpb24nIHByb3ZpZGVkLiIpKTsKfQovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy90eXBlL3Jlc3VsdHNldC9SZXN1bHRTZXQuanMKCnZhciBSZXN1bHRTZXRfbmFtZSA9ICdSZXN1bHRTZXQnOwp2YXIgUmVzdWx0U2V0X2RlcGVuZGVuY2llcyA9IFtdOwp2YXIgY3JlYXRlUmVzdWx0U2V0ID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoUmVzdWx0U2V0X25hbWUsIFJlc3VsdFNldF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uICgpIHsKICAvKioKICAgKiBBIFJlc3VsdFNldCBjb250YWlucyBhIGxpc3Qgb3IgcmVzdWx0cwogICAqIEBjbGFzcyBSZXN1bHRTZXQKICAgKiBAcGFyYW0ge0FycmF5fSBlbnRyaWVzCiAgICogQGNvbnN0cnVjdG9yIFJlc3VsdFNldAogICAqLwogIGZ1bmN0aW9uIFJlc3VsdFNldChlbnRyaWVzKSB7CiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVzdWx0U2V0KSkgewogICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpOwogICAgfQoKICAgIHRoaXMuZW50cmllcyA9IGVudHJpZXMgfHwgW107CiAgfQogIC8qKgogICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uCiAgICovCgoKICBSZXN1bHRTZXQucHJvdG90eXBlLnR5cGUgPSAnUmVzdWx0U2V0JzsKICBSZXN1bHRTZXQucHJvdG90eXBlLmlzUmVzdWx0U2V0ID0gdHJ1ZTsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBhcnJheSB3aXRoIHJlc3VsdHMgaG9sZCBieSB0aGlzIFJlc3VsdFNldAogICAqIEBtZW1iZXJvZiBSZXN1bHRTZXQKICAgKiBAcmV0dXJucyB7QXJyYXl9IGVudHJpZXMKICAgKi8KCiAgUmVzdWx0U2V0LnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHRoaXMuZW50cmllczsKICB9OwogIC8qKgogICAqIFJldHVybnMgdGhlIHN0cmluZ2lmaWVkIHJlc3VsdHMgb2YgdGhlIFJlc3VsdFNldAogICAqIEBtZW1iZXJvZiBSZXN1bHRTZXQKICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJpbmcKICAgKi8KCgogIFJlc3VsdFNldC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gJ1snICsgdGhpcy5lbnRyaWVzLmpvaW4oJywgJykgKyAnXSc7CiAgfTsKICAvKioKICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBSZXN1bHRTZXQKICAgKiBAbWVtYmVyb2YgUmVzdWx0U2V0CiAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6CiAgICogICAgICAgICAgICAgICAgICAgYHsibWF0aGpzIjogIlJlc3VsdFNldCIsICJlbnRyaWVzIjogWy4uLl19YAogICAqLwoKCiAgUmVzdWx0U2V0LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gewogICAgICBtYXRoanM6ICdSZXN1bHRTZXQnLAogICAgICBlbnRyaWVzOiB0aGlzLmVudHJpZXMKICAgIH07CiAgfTsKICAvKioKICAgKiBJbnN0YW50aWF0ZSBhIFJlc3VsdFNldCBmcm9tIGEgSlNPTiBvYmplY3QKICAgKiBAbWVtYmVyb2YgUmVzdWx0U2V0CiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczoKICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHsibWF0aGpzIjogIlJlc3VsdFNldCIsICJlbnRyaWVzIjogWy4uLl19YAogICAqIEByZXR1cm4ge1Jlc3VsdFNldH0KICAgKi8KCgogIFJlc3VsdFNldC5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7CiAgICByZXR1cm4gbmV3IFJlc3VsdFNldChqc29uLmVudHJpZXMpOwogIH07CgogIHJldHVybiBSZXN1bHRTZXQ7Cn0sIHsKICBpc0NsYXNzOiB0cnVlCn0pOwovLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2RlY2ltYWwuanMvZGVjaW1hbC5qcwp2YXIgZGVjaW1hbCA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpOwp2YXIgZGVjaW1hbF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihkZWNpbWFsKTsKCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3R5cGUvYmlnbnVtYmVyL0JpZ051bWJlci5qcwoKCnZhciBCaWdOdW1iZXJfbmFtZSA9ICdCaWdOdW1iZXInOwp2YXIgQmlnTnVtYmVyX2RlcGVuZGVuY2llcyA9IFsnP29uJywgJ2NvbmZpZyddOwp2YXIgY3JlYXRlQmlnTnVtYmVyQ2xhc3MgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShCaWdOdW1iZXJfbmFtZSwgQmlnTnVtYmVyX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgb24gPSBfcmVmLm9uLAogICAgICBjb25maWcgPSBfcmVmLmNvbmZpZzsKICB2YXIgQmlnTnVtYmVyID0gZGVjaW1hbF9kZWZhdWx0LmEuY2xvbmUoewogICAgcHJlY2lzaW9uOiBjb25maWcucHJlY2lzaW9uCiAgfSk7CiAgLyoqCiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb24KICAgKi8KCiAgQmlnTnVtYmVyLnByb3RvdHlwZS50eXBlID0gJ0JpZ051bWJlcic7CiAgQmlnTnVtYmVyLnByb3RvdHlwZS5pc0JpZ051bWJlciA9IHRydWU7CiAgLyoqCiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIEJpZ051bWJlciBjb250YWluaW5nCiAgICogdHlwZSBpbmZvcm1hdGlvbgogICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOgogICAqICAgICAgICAgICAgICAgICAgIGB7Im1hdGhqcyI6ICJCaWdOdW1iZXIiLCAidmFsdWUiOiAiMC4yIn1gCiAgICovCgogIEJpZ051bWJlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHsKICAgICAgbWF0aGpzOiAnQmlnTnVtYmVyJywKICAgICAgdmFsdWU6IHRoaXMudG9TdHJpbmcoKQogICAgfTsKICB9OwogIC8qKgogICAqIEluc3RhbnRpYXRlIGEgQmlnTnVtYmVyIGZyb20gYSBKU09OIG9iamVjdAogICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBhIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6CiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7Im1hdGhqcyI6ICJCaWdOdW1iZXIiLCAidmFsdWUiOiAiMC4yIn1gCiAgICogQHJldHVybiB7QmlnTnVtYmVyfQogICAqLwoKCiAgQmlnTnVtYmVyLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHsKICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKGpzb24udmFsdWUpOwogIH07CgogIGlmIChvbikgewogICAgLy8gbGlzdGVuIGZvciBjaGFuZ2VkIGluIHRoZSBjb25maWd1cmF0aW9uLCBhdXRvbWF0aWNhbGx5IGFwcGx5IGNoYW5nZWQgcHJlY2lzaW9uCiAgICBvbignY29uZmlnJywgZnVuY3Rpb24gKGN1cnIsIHByZXYpIHsKICAgICAgaWYgKGN1cnIucHJlY2lzaW9uICE9PSBwcmV2LnByZWNpc2lvbikgewogICAgICAgIEJpZ051bWJlci5jb25maWcoewogICAgICAgICAgcHJlY2lzaW9uOiBjdXJyLnByZWNpc2lvbgogICAgICAgIH0pOwogICAgICB9CiAgICB9KTsKICB9CgogIHJldHVybiBCaWdOdW1iZXI7Cn0sIHsKICBpc0NsYXNzOiB0cnVlCn0pOwovLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2NvbXBsZXguanMvY29tcGxleC5qcwp2YXIgY29tcGxleF9qc19jb21wbGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTsKdmFyIGNvbXBsZXhfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29tcGxleF9qc19jb21wbGV4KTsKCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3R5cGUvY29tcGxleC9Db21wbGV4LmpzCmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7ICJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7IGlmICh0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICJzeW1ib2wiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyAic3ltYm9sIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfQoKCgoKCnZhciBDb21wbGV4X25hbWUgPSAnQ29tcGxleCc7CnZhciBDb21wbGV4X2RlcGVuZGVuY2llcyA9IFtdOwp2YXIgY3JlYXRlQ29tcGxleENsYXNzID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoQ29tcGxleF9uYW1lLCBDb21wbGV4X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKCkgewogIC8qKgogICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uCiAgICovCiAgY29tcGxleF9kZWZhdWx0LmEucHJvdG90eXBlLnR5cGUgPSAnQ29tcGxleCc7CiAgY29tcGxleF9kZWZhdWx0LmEucHJvdG90eXBlLmlzQ29tcGxleCA9IHRydWU7CiAgLyoqCiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcGxleCBudW1iZXIKICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczoKICAgKiAgICAgICAgICAgICAgICAgICBgeyJtYXRoanMiOiAiQ29tcGxleCIsICJyZSI6IDIsICJpbSI6IDN9YAogICAqLwoKICBjb21wbGV4X2RlZmF1bHQuYS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHsKICAgICAgbWF0aGpzOiAnQ29tcGxleCcsCiAgICAgIHJlOiB0aGlzLnJlLAogICAgICBpbTogdGhpcy5pbQogICAgfTsKICB9OwogIC8qCiAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgY29tcGxleCBudW1iZXIgaW4gcG9sYXIgbm90YXRpb24KICAgKiBUaGUgYW5nbGUgcGhpIHdpbGwgYmUgc2V0IGluIHRoZSBpbnRlcnZhbCBvZiBbLXBpLCBwaV0uCiAgICogQHJldHVybiB7e3I6IG51bWJlciwgcGhpOiBudW1iZXJ9fSBSZXR1cm5zIGFuZCBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHIgYW5kIHBoaS4KICAgKi8KCgogIGNvbXBsZXhfZGVmYXVsdC5hLnByb3RvdHlwZS50b1BvbGFyID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHsKICAgICAgcjogdGhpcy5hYnMoKSwKICAgICAgcGhpOiB0aGlzLmFyZygpCiAgICB9OwogIH07CiAgLyoqCiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21wbGV4IG51bWJlciwKICAgKiB3aXRoIG9wdGlvbmFsIGZvcm1hdHRpbmcgb3B0aW9ucy4KICAgKiBAcGFyYW0ge09iamVjdCB8IG51bWJlciB8IEZ1bmN0aW9ufSBbb3B0aW9uc10gIEZvcm1hdHRpbmcgb3B0aW9ucy4gU2VlCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy4KICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0cgogICAqLwoKCiAgY29tcGxleF9kZWZhdWx0LmEucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICB2YXIgc3RyID0gJyc7CiAgICB2YXIgaW0gPSB0aGlzLmltOwogICAgdmFyIHJlID0gdGhpcy5yZTsKICAgIHZhciBzdHJSZSA9IE9iamVjdCh1dGlsc19udW1iZXJbImgiIC8qIGZvcm1hdCAqL10pKHRoaXMucmUsIG9wdGlvbnMpOwogICAgdmFyIHN0ckltID0gT2JqZWN0KHV0aWxzX251bWJlclsiaCIgLyogZm9ybWF0ICovXSkodGhpcy5pbSwgb3B0aW9ucyk7IC8vIHJvdW5kIGVpdGhlciByZSBvciBpbSB3aGVuIHNtYWxsZXIgdGhhbiB0aGUgY29uZmlndXJlZCBwcmVjaXNpb24KCiAgICB2YXIgcHJlY2lzaW9uID0gT2JqZWN0KGlzWyJ5IiAvKiBpc051bWJlciAqL10pKG9wdGlvbnMpID8gb3B0aW9ucyA6IG9wdGlvbnMgPyBvcHRpb25zLnByZWNpc2lvbiA6IG51bGw7CgogICAgaWYgKHByZWNpc2lvbiAhPT0gbnVsbCkgewogICAgICB2YXIgZXBzaWxvbiA9IE1hdGgucG93KDEwLCAtcHJlY2lzaW9uKTsKCiAgICAgIGlmIChNYXRoLmFicyhyZSAvIGltKSA8IGVwc2lsb24pIHsKICAgICAgICByZSA9IDA7CiAgICAgIH0KCiAgICAgIGlmIChNYXRoLmFicyhpbSAvIHJlKSA8IGVwc2lsb24pIHsKICAgICAgICBpbSA9IDA7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoaW0gPT09IDApIHsKICAgICAgLy8gcmVhbCB2YWx1ZQogICAgICBzdHIgPSBzdHJSZTsKICAgIH0gZWxzZSBpZiAocmUgPT09IDApIHsKICAgICAgLy8gcHVyZWx5IGNvbXBsZXggdmFsdWUKICAgICAgaWYgKGltID09PSAxKSB7CiAgICAgICAgc3RyID0gJ2knOwogICAgICB9IGVsc2UgaWYgKGltID09PSAtMSkgewogICAgICAgIHN0ciA9ICctaSc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RyID0gc3RySW0gKyAnaSc7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIGNvbXBsZXggdmFsdWUKICAgICAgaWYgKGltIDwgMCkgewogICAgICAgIGlmIChpbSA9PT0gLTEpIHsKICAgICAgICAgIHN0ciA9IHN0clJlICsgJyAtIGknOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdHIgPSBzdHJSZSArICcgLSAnICsgc3RySW0uc3Vic3RyaW5nKDEpICsgJ2knOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoaW0gPT09IDEpIHsKICAgICAgICAgIHN0ciA9IHN0clJlICsgJyArIGknOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdHIgPSBzdHJSZSArICcgKyAnICsgc3RySW0gKyAnaSc7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHN0cjsKICB9OwogIC8qKgogICAqIENyZWF0ZSBhIGNvbXBsZXggbnVtYmVyIGZyb20gcG9sYXIgY29vcmRpbmF0ZXMKICAgKgogICAqIFVzYWdlOgogICAqCiAgICogICAgIENvbXBsZXguZnJvbVBvbGFyKHI6IG51bWJlciwgcGhpOiBudW1iZXIpIDogQ29tcGxleAogICAqICAgICBDb21wbGV4LmZyb21Qb2xhcih7cjogbnVtYmVyLCBwaGk6IG51bWJlcn0pIDogQ29tcGxleAogICAqCiAgICogQHBhcmFtIHsqfSBhcmdzLi4uCiAgICogQHJldHVybiB7Q29tcGxleH0KICAgKi8KCgogIGNvbXBsZXhfZGVmYXVsdC5hLmZyb21Qb2xhciA9IGZ1bmN0aW9uIChhcmdzKSB7CiAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgY2FzZSAxOgogICAgICAgIHsKICAgICAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbMF07CgogICAgICAgICAgaWYgKF90eXBlb2YoYXJnKSA9PT0gJ29iamVjdCcpIHsKICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXhfZGVmYXVsdCgpKGFyZyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnB1dCBoYXMgdG8gYmUgYW4gb2JqZWN0IHdpdGggciBhbmQgcGhpIGtleXMuJyk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgY2FzZSAyOgogICAgICAgIHsKICAgICAgICAgIHZhciByID0gYXJndW1lbnRzWzBdOwogICAgICAgICAgdmFyIHBoaSA9IGFyZ3VtZW50c1sxXTsKCiAgICAgICAgICBpZiAoT2JqZWN0KGlzWyJ5IiAvKiBpc051bWJlciAqL10pKHIpKSB7CiAgICAgICAgICAgIGlmIChPYmplY3QoaXNbIkwiIC8qIGlzVW5pdCAqL10pKHBoaSkgJiYgcGhpLmhhc0Jhc2UoJ0FOR0xFJykpIHsKICAgICAgICAgICAgICAvLyBjb252ZXJ0IHVuaXQgdG8gYSBudW1iZXIgaW4gcmFkaWFucwogICAgICAgICAgICAgIHBoaSA9IHBoaS50b051bWJlcigncmFkJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChPYmplY3QoaXNbInkiIC8qIGlzTnVtYmVyICovXSkocGhpKSkgewogICAgICAgICAgICAgIHJldHVybiBuZXcgY29tcGxleF9kZWZhdWx0LmEoewogICAgICAgICAgICAgICAgcjogciwKICAgICAgICAgICAgICAgIHBoaTogcGhpCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BoaSBpcyBub3QgYSBudW1iZXIgbm9yIGFuIGFuZ2xlIHVuaXQuJyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSYWRpdXMgciBpcyBub3QgYSBudW1iZXIuJyk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1dyb25nIG51bWJlciBvZiBhcmd1bWVudHMgaW4gZnVuY3Rpb24gZnJvbVBvbGFyJyk7CiAgICB9CiAgfTsKCiAgY29tcGxleF9kZWZhdWx0LmEucHJvdG90eXBlLnZhbHVlT2YgPSBjb21wbGV4X2RlZmF1bHQuYS5wcm90b3R5cGUudG9TdHJpbmc7CiAgLyoqCiAgICogQ3JlYXRlIGEgQ29tcGxleCBudW1iZXIgZnJvbSBhIEpTT04gb2JqZWN0CiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEEgSlNPTiBPYmplY3Qgc3RydWN0dXJlZCBhcwogICAqICAgICAgICAgICAgICAgICAgICAgICB7Im1hdGhqcyI6ICJDb21wbGV4IiwgInJlIjogMiwgImltIjogM30KICAgKiAgICAgICAgICAgICAgICAgICAgICAgQWxsIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsLCBkZWZhdWx0IHZhbHVlcwogICAqICAgICAgICAgICAgICAgICAgICAgICBmb3IgYHJlYCBhbmQgYGltYCBhcmUgMC4KICAgKiBAcmV0dXJuIHtDb21wbGV4fSBSZXR1cm5zIGEgbmV3IENvbXBsZXggbnVtYmVyCiAgICovCgogIGNvbXBsZXhfZGVmYXVsdC5hLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHsKICAgIHJldHVybiBuZXcgY29tcGxleF9kZWZhdWx0LmEoanNvbik7CiAgfTsKICAvKioKICAgKiBDb21wYXJlIHR3byBjb21wbGV4IG51bWJlcnMsIGBhYCBhbmQgYGJgOgogICAqCiAgICogLSBSZXR1cm5zIDEgd2hlbiB0aGUgcmVhbCBwYXJ0IG9mIGBhYCBpcyBsYXJnZXIgdGhhbiB0aGUgcmVhbCBwYXJ0IG9mIGBiYAogICAqIC0gUmV0dXJucyAtMSB3aGVuIHRoZSByZWFsIHBhcnQgb2YgYGFgIGlzIHNtYWxsZXIgdGhhbiB0aGUgcmVhbCBwYXJ0IG9mIGBiYAogICAqIC0gUmV0dXJucyAxIHdoZW4gdGhlIHJlYWwgcGFydHMgYXJlIGVxdWFsCiAgICogICBhbmQgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGBhYCBpcyBsYXJnZXIgdGhhbiB0aGUgaW1hZ2luYXJ5IHBhcnQgb2YgYGJgCiAgICogLSBSZXR1cm5zIC0xIHdoZW4gdGhlIHJlYWwgcGFydHMgYXJlIGVxdWFsCiAgICogICBhbmQgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGBhYCBpcyBzbWFsbGVyIHRoYW4gdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGBiYAogICAqIC0gUmV0dXJucyAwIHdoZW4gYm90aCByZWFsIGFuZCBpbWFnaW5hcnkgcGFydHMgYXJlIGVxdWFsLgogICAqCiAgICogQHBhcmFtcyB7Q29tcGxleH0gYQogICAqIEBwYXJhbXMge0NvbXBsZXh9IGIKICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb21wYXJpc29uIHJlc3VsdDogLTEsIDAsIG9yIDEKICAgKi8KCgogIGNvbXBsZXhfZGVmYXVsdC5hLmNvbXBhcmUgPSBmdW5jdGlvbiAoYSwgYikgewogICAgaWYgKGEucmUgPiBiLnJlKSB7CiAgICAgIHJldHVybiAxOwogICAgfQoKICAgIGlmIChhLnJlIDwgYi5yZSkgewogICAgICByZXR1cm4gLTE7CiAgICB9CgogICAgaWYgKGEuaW0gPiBiLmltKSB7CiAgICAgIHJldHVybiAxOwogICAgfQoKICAgIGlmIChhLmltIDwgYi5pbSkgewogICAgICByZXR1cm4gLTE7CiAgICB9CgogICAgcmV0dXJuIDA7CiAgfTsKCiAgcmV0dXJuIGNvbXBsZXhfZGVmYXVsdC5hOwp9LCB7CiAgaXNDbGFzczogdHJ1ZQp9KTsKLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9mcmFjdGlvbi5qcy9mcmFjdGlvbi5qcwp2YXIgZnJhY3Rpb25fanNfZnJhY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTsKdmFyIGZyYWN0aW9uX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGZyYWN0aW9uX2pzX2ZyYWN0aW9uKTsKCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3R5cGUvZnJhY3Rpb24vRnJhY3Rpb24uanMKCgp2YXIgRnJhY3Rpb25fbmFtZSA9ICdGcmFjdGlvbic7CnZhciBGcmFjdGlvbl9kZXBlbmRlbmNpZXMgPSBbXTsKdmFyIGNyZWF0ZUZyYWN0aW9uQ2xhc3MgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShGcmFjdGlvbl9uYW1lLCBGcmFjdGlvbl9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uICgpIHsKICAvKioKICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvbgogICAqLwogIGZyYWN0aW9uX2RlZmF1bHQuYS5wcm90b3R5cGUudHlwZSA9ICdGcmFjdGlvbic7CiAgZnJhY3Rpb25fZGVmYXVsdC5hLnByb3RvdHlwZS5pc0ZyYWN0aW9uID0gdHJ1ZTsKICAvKioKICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgRnJhY3Rpb24gY29udGFpbmluZyB0eXBlIGluZm9ybWF0aW9uCiAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6CiAgICogICAgICAgICAgICAgICAgICAgYHsibWF0aGpzIjogIkZyYWN0aW9uIiwgIm4iOiAzLCAiZCI6IDh9YAogICAqLwoKICBmcmFjdGlvbl9kZWZhdWx0LmEucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB7CiAgICAgIG1hdGhqczogJ0ZyYWN0aW9uJywKICAgICAgbjogdGhpcy5zICogdGhpcy5uLAogICAgICBkOiB0aGlzLmQKICAgIH07CiAgfTsKICAvKioKICAgKiBJbnN0YW50aWF0ZSBhIEZyYWN0aW9uIGZyb20gYSBKU09OIG9iamVjdAogICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBhIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6CiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7Im1hdGhqcyI6ICJGcmFjdGlvbiIsICJuIjogMywgImQiOiA4fWAKICAgKiBAcmV0dXJuIHtCaWdOdW1iZXJ9CiAgICovCgoKICBmcmFjdGlvbl9kZWZhdWx0LmEuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikgewogICAgcmV0dXJuIG5ldyBmcmFjdGlvbl9kZWZhdWx0LmEoanNvbik7CiAgfTsKCiAgcmV0dXJuIGZyYWN0aW9uX2RlZmF1bHQuYTsKfSwgewogIGlzQ2xhc3M6IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3R5cGUvbWF0cml4L1JhbmdlLmpzCgoKCnZhciBSYW5nZV9uYW1lID0gJ1JhbmdlJzsKdmFyIFJhbmdlX2RlcGVuZGVuY2llcyA9IFtdOwp2YXIgY3JlYXRlUmFuZ2VDbGFzcyA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKFJhbmdlX25hbWUsIFJhbmdlX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKCkgewogIC8qKgogICAqIENyZWF0ZSBhIHJhbmdlLiBBIHJhbmdlIGhhcyBhIHN0YXJ0LCBzdGVwLCBhbmQgZW5kLCBhbmQgY29udGFpbnMgZnVuY3Rpb25zCiAgICogdG8gaXRlcmF0ZSBvdmVyIHRoZSByYW5nZS4KICAgKgogICAqIEEgcmFuZ2UgY2FuIGJlIGNvbnN0cnVjdGVkIGFzOgogICAqCiAgICogICAgIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKHN0YXJ0LCBlbmQpCiAgICogICAgIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApCiAgICoKICAgKiBUbyBnZXQgdGhlIHJlc3VsdCBvZiB0aGUgcmFuZ2U6CiAgICogICAgIHJhbmdlLmZvckVhY2goZnVuY3Rpb24gKHgpIHsKICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHgpCiAgICogICAgIH0pCiAgICogICAgIHJhbmdlLm1hcChmdW5jdGlvbiAoeCkgewogICAqICAgICAgICAgcmV0dXJuIG1hdGguc2luKHgpCiAgICogICAgIH0pCiAgICogICAgIHJhbmdlLnRvQXJyYXkoKQogICAqCiAgICogRXhhbXBsZSB1c2FnZToKICAgKgogICAqICAgICBjb25zdCBjID0gbmV3IFJhbmdlKDIsIDYpICAgICAgIC8vIDI6MTo1CiAgICogICAgIGMudG9BcnJheSgpICAgICAgICAgICAgICAgICAgICAgLy8gWzIsIDMsIDQsIDVdCiAgICogICAgIGNvbnN0IGQgPSBuZXcgUmFuZ2UoMiwgLTMsIC0xKSAgLy8gMjotMTotMgogICAqICAgICBkLnRvQXJyYXkoKSAgICAgICAgICAgICAgICAgICAgIC8vIFsyLCAxLCAwLCAtMSwgLTJdCiAgICoKICAgKiBAY2xhc3MgUmFuZ2UKICAgKiBAY29uc3RydWN0b3IgUmFuZ2UKICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgIGluY2x1ZGVkIGxvd2VyIGJvdW5kCiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCAgICBleGNsdWRlZCB1cHBlciBib3VuZAogICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcF0gc3RlcCBzaXplLCBkZWZhdWx0IHZhbHVlIGlzIDEKICAgKi8KICBmdW5jdGlvbiBSYW5nZShzdGFydCwgZW5kLCBzdGVwKSB7CiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmFuZ2UpKSB7CiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7CiAgICB9CgogICAgdmFyIGhhc1N0YXJ0ID0gc3RhcnQgIT09IG51bGwgJiYgc3RhcnQgIT09IHVuZGVmaW5lZDsKICAgIHZhciBoYXNFbmQgPSBlbmQgIT09IG51bGwgJiYgZW5kICE9PSB1bmRlZmluZWQ7CiAgICB2YXIgaGFzU3RlcCA9IHN0ZXAgIT09IG51bGwgJiYgc3RlcCAhPT0gdW5kZWZpbmVkOwoKICAgIGlmIChoYXNTdGFydCkgewogICAgICBpZiAoT2JqZWN0KGlzWyJlIiAvKiBpc0JpZ051bWJlciAqL10pKHN0YXJ0KSkgewogICAgICAgIHN0YXJ0ID0gc3RhcnQudG9OdW1iZXIoKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RhcnQgIT09ICdudW1iZXInKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIHN0YXJ0IG11c3QgYmUgYSBudW1iZXInKTsKICAgICAgfQogICAgfQoKICAgIGlmIChoYXNFbmQpIHsKICAgICAgaWYgKE9iamVjdChpc1siZSIgLyogaXNCaWdOdW1iZXIgKi9dKShlbmQpKSB7CiAgICAgICAgZW5kID0gZW5kLnRvTnVtYmVyKCk7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCAhPT0gJ251bWJlcicpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgZW5kIG11c3QgYmUgYSBudW1iZXInKTsKICAgICAgfQogICAgfQoKICAgIGlmIChoYXNTdGVwKSB7CiAgICAgIGlmIChPYmplY3QoaXNbImUiIC8qIGlzQmlnTnVtYmVyICovXSkoc3RlcCkpIHsKICAgICAgICBzdGVwID0gc3RlcC50b051bWJlcigpOwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGVwICE9PSAnbnVtYmVyJykgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BhcmFtZXRlciBzdGVwIG11c3QgYmUgYSBudW1iZXInKTsKICAgICAgfQogICAgfQoKICAgIHRoaXMuc3RhcnQgPSBoYXNTdGFydCA/IHBhcnNlRmxvYXQoc3RhcnQpIDogMDsKICAgIHRoaXMuZW5kID0gaGFzRW5kID8gcGFyc2VGbG9hdChlbmQpIDogMDsKICAgIHRoaXMuc3RlcCA9IGhhc1N0ZXAgPyBwYXJzZUZsb2F0KHN0ZXApIDogMTsKICB9CiAgLyoqCiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb24KICAgKi8KCgogIFJhbmdlLnByb3RvdHlwZS50eXBlID0gJ1JhbmdlJzsKICBSYW5nZS5wcm90b3R5cGUuaXNSYW5nZSA9IHRydWU7CiAgLyoqCiAgICogUGFyc2UgYSBzdHJpbmcgaW50byBhIHJhbmdlLAogICAqIFRoZSBzdHJpbmcgY29udGFpbnMgdGhlIHN0YXJ0LCBvcHRpb25hbCBzdGVwLCBhbmQgZW5kLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbi4KICAgKiBJZiB0aGUgc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCByYW5nZSwgbnVsbCBpcyByZXR1cm5lZC4KICAgKiBGb3IgZXhhbXBsZSBzdHI9JzA6MjoxMScuCiAgICogQG1lbWJlcm9mIFJhbmdlCiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cgogICAqIEByZXR1cm4ge1JhbmdlIHwgbnVsbH0gcmFuZ2UKICAgKi8KCiAgUmFuZ2UucGFyc2UgPSBmdW5jdGlvbiAoc3RyKSB7CiAgICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgdmFyIGFyZ3MgPSBzdHIuc3BsaXQoJzonKTsKICAgIHZhciBudW1zID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZykgewogICAgICByZXR1cm4gcGFyc2VGbG9hdChhcmcpOwogICAgfSk7CiAgICB2YXIgaW52YWxpZCA9IG51bXMuc29tZShmdW5jdGlvbiAobnVtKSB7CiAgICAgIHJldHVybiBpc05hTihudW0pOwogICAgfSk7CgogICAgaWYgKGludmFsaWQpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgc3dpdGNoIChudW1zLmxlbmd0aCkgewogICAgICBjYXNlIDI6CiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShudW1zWzBdLCBudW1zWzFdKTsKCiAgICAgIGNhc2UgMzoKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKG51bXNbMF0sIG51bXNbMl0sIG51bXNbMV0pOwoKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9OwogIC8qKgogICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoZSByYW5nZQogICAqIEByZXR1cm4ge1JhbmdlfSBjbG9uZQogICAqLwoKCiAgUmFuZ2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0LCB0aGlzLmVuZCwgdGhpcy5zdGVwKTsKICB9OwogIC8qKgogICAqIFJldHJpZXZlIHRoZSBzaXplIG9mIHRoZSByYW5nZS4KICAgKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgb25lIG51bWJlciwgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgcmFuZ2UuCiAgICogQG1lbWJlcm9mIFJhbmdlCiAgICogQHJldHVybnMge251bWJlcltdfSBzaXplCiAgICovCgoKICBSYW5nZS5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uICgpIHsKICAgIHZhciBsZW4gPSAwOwogICAgdmFyIHN0YXJ0ID0gdGhpcy5zdGFydDsKICAgIHZhciBzdGVwID0gdGhpcy5zdGVwOwogICAgdmFyIGVuZCA9IHRoaXMuZW5kOwogICAgdmFyIGRpZmYgPSBlbmQgLSBzdGFydDsKCiAgICBpZiAoT2JqZWN0KHV0aWxzX251bWJlclsibiIgLyogc2lnbiAqL10pKHN0ZXApID09PSBPYmplY3QodXRpbHNfbnVtYmVyWyJuIiAvKiBzaWduICovXSkoZGlmZikpIHsKICAgICAgbGVuID0gTWF0aC5jZWlsKGRpZmYgLyBzdGVwKTsKICAgIH0gZWxzZSBpZiAoZGlmZiA9PT0gMCkgewogICAgICBsZW4gPSAwOwogICAgfQoKICAgIGlmIChpc05hTihsZW4pKSB7CiAgICAgIGxlbiA9IDA7CiAgICB9CgogICAgcmV0dXJuIFtsZW5dOwogIH07CiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBtaW5pbXVtIHZhbHVlIGluIHRoZSByYW5nZQogICAqIEBtZW1iZXJvZiBSYW5nZQogICAqIEByZXR1cm4ge251bWJlciB8IHVuZGVmaW5lZH0gbWluCiAgICovCgoKICBSYW5nZS5wcm90b3R5cGUubWluID0gZnVuY3Rpb24gKCkgewogICAgdmFyIHNpemUgPSB0aGlzLnNpemUoKVswXTsKCiAgICBpZiAoc2l6ZSA+IDApIHsKICAgICAgaWYgKHRoaXMuc3RlcCA+IDApIHsKICAgICAgICAvLyBwb3NpdGl2ZSBzdGVwCiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gbmVnYXRpdmUgc3RlcAogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0ICsgKHNpemUgLSAxKSAqIHRoaXMuc3RlcDsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgIH0KICB9OwogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgbWF4aW11bSB2YWx1ZSBpbiB0aGUgcmFuZ2UKICAgKiBAbWVtYmVyb2YgUmFuZ2UKICAgKiBAcmV0dXJuIHtudW1iZXIgfCB1bmRlZmluZWR9IG1heAogICAqLwoKCiAgUmFuZ2UucHJvdG90eXBlLm1heCA9IGZ1bmN0aW9uICgpIHsKICAgIHZhciBzaXplID0gdGhpcy5zaXplKClbMF07CgogICAgaWYgKHNpemUgPiAwKSB7CiAgICAgIGlmICh0aGlzLnN0ZXAgPiAwKSB7CiAgICAgICAgLy8gcG9zaXRpdmUgc3RlcAogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0ICsgKHNpemUgLSAxKSAqIHRoaXMuc3RlcDsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBuZWdhdGl2ZSBzdGVwCiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQ7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICB9CiAgfTsKICAvKioKICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggdmFsdWUgaW4gdGhlIHJhbmdlLgogICAqIEBtZW1iZXJvZiBSYW5nZQogICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIG1ldGhvZCBpcyBpbnZva2VkIHdpdGggdGhyZWUKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBSYW5nZSBiZWluZyB0cmF2ZXJzZWQuCiAgICovCgoKICBSYW5nZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgewogICAgdmFyIHggPSB0aGlzLnN0YXJ0OwogICAgdmFyIHN0ZXAgPSB0aGlzLnN0ZXA7CiAgICB2YXIgZW5kID0gdGhpcy5lbmQ7CiAgICB2YXIgaSA9IDA7CgogICAgaWYgKHN0ZXAgPiAwKSB7CiAgICAgIHdoaWxlICh4IDwgZW5kKSB7CiAgICAgICAgY2FsbGJhY2soeCwgW2ldLCB0aGlzKTsKICAgICAgICB4ICs9IHN0ZXA7CiAgICAgICAgaSsrOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHN0ZXAgPCAwKSB7CiAgICAgIHdoaWxlICh4ID4gZW5kKSB7CiAgICAgICAgY2FsbGJhY2soeCwgW2ldLCB0aGlzKTsKICAgICAgICB4ICs9IHN0ZXA7CiAgICAgICAgaSsrOwogICAgICB9CiAgICB9CiAgfTsKICAvKioKICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggdmFsdWUgaW4gdGhlIFJhbmdlLCBhbmQgcmV0dXJuIHRoZQogICAqIHJlc3VsdHMgYXMgYW4gYXJyYXkKICAgKiBAbWVtYmVyb2YgUmFuZ2UKICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBtZXRob2QgaXMgaW52b2tlZCB3aXRoIHRocmVlCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGVsZW1lbnQsIGFuZCB0aGUgTWF0cml4IGJlaW5nIHRyYXZlcnNlZC4KICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5CiAgICovCgoKICBSYW5nZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICB2YXIgYXJyYXkgPSBbXTsKICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBvYmopIHsKICAgICAgYXJyYXlbaW5kZXhbMF1dID0gY2FsbGJhY2sodmFsdWUsIGluZGV4LCBvYmopOwogICAgfSk7CiAgICByZXR1cm4gYXJyYXk7CiAgfTsKICAvKioKICAgKiBDcmVhdGUgYW4gQXJyYXkgd2l0aCBhIGNvcHkgb2YgdGhlIFJhbmdlcyBkYXRhCiAgICogQG1lbWJlcm9mIFJhbmdlCiAgICogQHJldHVybnMge0FycmF5fSBhcnJheQogICAqLwoKCiAgUmFuZ2UucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7CiAgICB2YXIgYXJyYXkgPSBbXTsKICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7CiAgICAgIGFycmF5W2luZGV4WzBdXSA9IHZhbHVlOwogICAgfSk7CiAgICByZXR1cm4gYXJyYXk7CiAgfTsKICAvKioKICAgKiBHZXQgdGhlIHByaW1pdGl2ZSB2YWx1ZSBvZiB0aGUgUmFuZ2UsIGEgb25lIGRpbWVuc2lvbmFsIGFycmF5CiAgICogQG1lbWJlcm9mIFJhbmdlCiAgICogQHJldHVybnMge0FycmF5fSBhcnJheQogICAqLwoKCiAgUmFuZ2UucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbiAoKSB7CiAgICAvLyBUT0RPOiBpbXBsZW1lbnQgYSBjYWNoaW5nIG1lY2hhbmlzbSBmb3IgcmFuZ2UudmFsdWVPZigpCiAgICByZXR1cm4gdGhpcy50b0FycmF5KCk7CiAgfTsKICAvKioKICAgKiBHZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJhbmdlLCB3aXRoIG9wdGlvbmFsIGZvcm1hdHRpbmcgb3B0aW9ucy4KICAgKiBPdXRwdXQgaXMgZm9ybWF0dGVkIGFzICdzdGFydDpzdGVwOmVuZCcsIGZvciBleGFtcGxlICcyOjYnIG9yICcwOjAuMjoxMScKICAgKiBAbWVtYmVyb2YgUmFuZ2UKICAgKiBAcGFyYW0ge09iamVjdCB8IG51bWJlciB8IGZ1bmN0aW9ufSBbb3B0aW9uc10gIEZvcm1hdHRpbmcgb3B0aW9ucy4gU2VlCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy4KICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHIKICAgKi8KCgogIFJhbmdlLnByb3RvdHlwZS5mb3JtYXQgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgdmFyIHN0ciA9IE9iamVjdCh1dGlsc19udW1iZXJbImgiIC8qIGZvcm1hdCAqL10pKHRoaXMuc3RhcnQsIG9wdGlvbnMpOwoKICAgIGlmICh0aGlzLnN0ZXAgIT09IDEpIHsKICAgICAgc3RyICs9ICc6JyArIE9iamVjdCh1dGlsc19udW1iZXJbImgiIC8qIGZvcm1hdCAqL10pKHRoaXMuc3RlcCwgb3B0aW9ucyk7CiAgICB9CgogICAgc3RyICs9ICc6JyArIE9iamVjdCh1dGlsc19udW1iZXJbImgiIC8qIGZvcm1hdCAqL10pKHRoaXMuZW5kLCBvcHRpb25zKTsKICAgIHJldHVybiBzdHI7CiAgfTsKICAvKioKICAgKiBHZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJhbmdlLgogICAqIEBtZW1iZXJvZiBSYW5nZQogICAqIEByZXR1cm5zIHtzdHJpbmd9CiAgICovCgoKICBSYW5nZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gdGhpcy5mb3JtYXQoKTsKICB9OwogIC8qKgogICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIHJhbmdlCiAgICogQG1lbWJlcm9mIFJhbmdlCiAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6CiAgICogICAgICAgICAgICAgICAgICAgYHsibWF0aGpzIjogIlJhbmdlIiwgInN0YXJ0IjogMiwgImVuZCI6IDQsICJzdGVwIjogMX1gCiAgICovCgoKICBSYW5nZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHsKICAgICAgbWF0aGpzOiAnUmFuZ2UnLAogICAgICBzdGFydDogdGhpcy5zdGFydCwKICAgICAgZW5kOiB0aGlzLmVuZCwKICAgICAgc3RlcDogdGhpcy5zdGVwCiAgICB9OwogIH07CiAgLyoqCiAgICogSW5zdGFudGlhdGUgYSBSYW5nZSBmcm9tIGEgSlNPTiBvYmplY3QKICAgKiBAbWVtYmVyb2YgUmFuZ2UKICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiBBIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6CiAgICogICAgICAgICAgICAgICAgICAgICAgYHsibWF0aGpzIjogIlJhbmdlIiwgInN0YXJ0IjogMiwgImVuZCI6IDQsICJzdGVwIjogMX1gCiAgICogQHJldHVybiB7UmFuZ2V9CiAgICovCgoKICBSYW5nZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7CiAgICByZXR1cm4gbmV3IFJhbmdlKGpzb24uc3RhcnQsIGpzb24uZW5kLCBqc29uLnN0ZXApOwogIH07CgogIHJldHVybiBSYW5nZTsKfSwgewogIGlzQ2xhc3M6IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3R5cGUvbWF0cml4L01hdHJpeC5qcwoKdmFyIE1hdHJpeF9uYW1lID0gJ01hdHJpeCc7CnZhciBNYXRyaXhfZGVwZW5kZW5jaWVzID0gW107CnZhciBjcmVhdGVNYXRyaXhDbGFzcyA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKE1hdHJpeF9uYW1lLCBNYXRyaXhfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoKSB7CiAgLyoqCiAgICogQGNvbnN0cnVjdG9yIE1hdHJpeAogICAqCiAgICogQSBNYXRyaXggaXMgYSB3cmFwcGVyIGFyb3VuZCBhbiBBcnJheS4gQSBtYXRyaXggY2FuIGhvbGQgYSBtdWx0aSBkaW1lbnNpb25hbAogICAqIGFycmF5LiBBIG1hdHJpeCBjYW4gYmUgY29uc3RydWN0ZWQgYXM6CiAgICoKICAgKiAgICAgbGV0IG1hdHJpeCA9IG1hdGgubWF0cml4KGRhdGEpCiAgICoKICAgKiBNYXRyaXggY29udGFpbnMgdGhlIGZ1bmN0aW9ucyB0byByZXNpemUsIGdldCBhbmQgc2V0IHZhbHVlcywgZ2V0IHRoZSBzaXplLAogICAqIGNsb25lIHRoZSBtYXRyaXggYW5kIHRvIGNvbnZlcnQgdGhlIG1hdHJpeCB0byBhIHZlY3RvciwgYXJyYXksIG9yIHNjYWxhci4KICAgKiBGdXJ0aGVybW9yZSwgb25lIGNhbiBpdGVyYXRlIG92ZXIgdGhlIG1hdHJpeCB1c2luZyBtYXAgYW5kIGZvckVhY2guCiAgICogVGhlIGludGVybmFsIEFycmF5IG9mIHRoZSBNYXRyaXggY2FuIGJlIGFjY2Vzc2VkIHVzaW5nIHRoZSBmdW5jdGlvbiB2YWx1ZU9mLgogICAqCiAgICogRXhhbXBsZSB1c2FnZToKICAgKgogICAqICAgICBsZXQgbWF0cml4ID0gbWF0aC5tYXRyaXgoW1sxLCAyXSwgWzMsIDRdXSkKICAgKiAgICAgbWF0aXguc2l6ZSgpICAgICAgICAgICAgICAvLyBbMiwgMl0KICAgKiAgICAgbWF0cml4LnJlc2l6ZShbMywgMl0sIDUpCiAgICogICAgIG1hdHJpeC52YWx1ZU9mKCkgICAgICAgICAgLy8gW1sxLCAyXSwgWzMsIDRdLCBbNSwgNV1dCiAgICogICAgIG1hdHJpeC5zdWJzZXQoWzEsMl0pICAgICAgIC8vIDMgKGluZGV4ZXMgYXJlIHplcm8tYmFzZWQpCiAgICoKICAgKi8KICBmdW5jdGlvbiBNYXRyaXgoKSB7CiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTWF0cml4KSkgewogICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpOwogICAgfQogIH0KICAvKioKICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvbgogICAqLwoKCiAgTWF0cml4LnByb3RvdHlwZS50eXBlID0gJ01hdHJpeCc7CiAgTWF0cml4LnByb3RvdHlwZS5pc01hdHJpeCA9IHRydWU7CiAgLyoqCiAgICogR2V0IHRoZSBNYXRyaXggc3RvcmFnZSBjb25zdHJ1Y3RvciBmb3IgdGhlIGdpdmVuIGZvcm1hdC4KICAgKgogICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgICAgICAgVGhlIE1hdHJpeCBzdG9yYWdlIGZvcm1hdC4KICAgKgogICAqIEByZXR1cm4ge0Z1bmN0aW9ufSAgICAgICAgICAgVGhlIE1hdHJpeCBzdG9yYWdlIGNvbnN0cnVjdG9yLgogICAqLwoKICBNYXRyaXguc3RvcmFnZSA9IGZ1bmN0aW9uIChmb3JtYXQpIHsKICAgIC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheQogICAgdGhyb3cgbmV3IEVycm9yKCdNYXRyaXguc3RvcmFnZSBpcyBkZXByZWNhdGVkIHNpbmNlIHY2LjAuMC4gJyArICdVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gbWF0aC5tYXRyaXggaW5zdGVhZC4nKTsKICB9OwogIC8qKgogICAqIEdldCB0aGUgc3RvcmFnZSBmb3JtYXQgdXNlZCBieSB0aGUgbWF0cml4LgogICAqCiAgICogVXNhZ2U6CiAgICogICAgIGNvbnN0IGZvcm1hdCA9IG1hdHJpeC5zdG9yYWdlKCkgICAvLyByZXRyaWV2ZSBzdG9yYWdlIGZvcm1hdAogICAqCiAgICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgVGhlIHN0b3JhZ2UgZm9ybWF0LgogICAqLwoKCiAgTWF0cml4LnByb3RvdHlwZS5zdG9yYWdlID0gZnVuY3Rpb24gKCkgewogICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zCiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2Ugc3RvcmFnZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTsKICB9OwogIC8qKgogICAqIEdldCB0aGUgZGF0YXR5cGUgb2YgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBtYXRyaXguCiAgICoKICAgKiBVc2FnZToKICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LmRhdGF0eXBlKCkgICAgLy8gcmV0cmlldmUgbWF0cml4IGRhdGF0eXBlCiAgICoKICAgKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICBUaGUgZGF0YXR5cGUuCiAgICovCgoKICBNYXRyaXgucHJvdG90eXBlLmRhdGF0eXBlID0gZnVuY3Rpb24gKCkgewogICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zCiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2UgZGF0YXR5cGUgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7CiAgfTsKICAvKioKICAgKiBDcmVhdGUgYSBuZXcgTWF0cml4IFdpdGggdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgbWF0cml4IGluc3RhbmNlCiAgICogQHBhcmFtIHtBcnJheSB8IE9iamVjdH0gZGF0YQogICAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YXR5cGVdCiAgICovCgoKICBNYXRyaXgucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBkYXRhdHlwZSkgewogICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGNyZWF0ZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTsKICB9OwogIC8qKgogICAqIEdldCBhIHN1YnNldCBvZiB0aGUgbWF0cml4LCBvciByZXBsYWNlIGEgc3Vic2V0IG9mIHRoZSBtYXRyaXguCiAgICoKICAgKiBVc2FnZToKICAgKiAgICAgY29uc3Qgc3Vic2V0ID0gbWF0cml4LnN1YnNldChpbmRleCkgICAgICAgICAgICAgICAvLyByZXRyaWV2ZSBzdWJzZXQKICAgKiAgICAgY29uc3QgdmFsdWUgPSBtYXRyaXguc3Vic2V0KGluZGV4LCByZXBsYWNlbWVudCkgICAvLyByZXBsYWNlIHN1YnNldAogICAqCiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXgKICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgKn0gW3JlcGxhY2VtZW50XQogICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT0wXSAgICAgIERlZmF1bHQgdmFsdWUsIGZpbGxlZCBpbiBvbiBuZXcgZW50cmllcyB3aGVuCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IG1hdHJpeCBlbGVtZW50cyB3aWxsIGJlIGZpbGxlZCB3aXRoIHplcm9zLgogICAqLwoKCiAgTWF0cml4LnByb3RvdHlwZS5zdWJzZXQgPSBmdW5jdGlvbiAoaW5kZXgsIHJlcGxhY2VtZW50LCBkZWZhdWx0VmFsdWUpIHsKICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9ucwogICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHN1YnNldCBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTsKICB9OwogIC8qKgogICAqIEdldCBhIHNpbmdsZSBlbGVtZW50IGZyb20gdGhlIG1hdHJpeC4KICAgKiBAcGFyYW0ge251bWJlcltdfSBpbmRleCAgIFplcm8tYmFzZWQgaW5kZXgKICAgKiBAcmV0dXJuIHsqfSB2YWx1ZQogICAqLwoKCiAgTWF0cml4LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoaW5kZXgpIHsKICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9ucwogICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGdldCBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTsKICB9OwogIC8qKgogICAqIFJlcGxhY2UgYSBzaW5nbGUgZWxlbWVudCBpbiB0aGUgbWF0cml4LgogICAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleAogICAqIEBwYXJhbSB7Kn0gdmFsdWUKICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdICAgICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMgd2hlbgogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXRyaXggaXMgcmVzaXplZC4gSWYgbm90IHByb3ZpZGVkLAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBsZWZ0IHVuZGVmaW5lZC4KICAgKiBAcmV0dXJuIHtNYXRyaXh9IHNlbGYKICAgKi8KCgogIE1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7CiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnMKICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBzZXQgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7CiAgfTsKICAvKioKICAgKiBSZXNpemUgdGhlIG1hdHJpeCB0byB0aGUgZ2l2ZW4gc2l6ZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeCB3aGVuCiAgICogYGNvcHk9dHJ1ZWAsIG90aGVyd2lzZSByZXR1cm4gdGhlIG1hdHJpeCBpdHNlbGYgKHJlc2l6ZSBpbiBwbGFjZSkuCiAgICoKICAgKiBAcGFyYW0ge251bWJlcltdfSBzaXplICAgICAgICAgICBUaGUgbmV3IHNpemUgdGhlIG1hdHJpeCBzaG91bGQgaGF2ZS4KICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWU9MF0gICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMuCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgbWF0cml4IGVsZW1lbnRzIHdpbGwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBmaWxsZWQgd2l0aCB6ZXJvcy4KICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb3B5XSAgICAgICAgICBSZXR1cm4gYSByZXNpemVkIGNvcHkgb2YgdGhlIG1hdHJpeAogICAqCiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgVGhlIHJlc2l6ZWQgbWF0cml4CiAgICovCgoKICBNYXRyaXgucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uIChzaXplLCBkZWZhdWx0VmFsdWUpIHsKICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9ucwogICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHJlc2l6ZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTsKICB9OwogIC8qKgogICAqIFJlc2hhcGUgdGhlIG1hdHJpeCB0byB0aGUgZ2l2ZW4gc2l6ZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeCB3aGVuCiAgICogYGNvcHk9dHJ1ZWAsIG90aGVyd2lzZSByZXR1cm4gdGhlIG1hdHJpeCBpdHNlbGYgKHJlc2hhcGUgaW4gcGxhY2UpLgogICAqCiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuCiAgICogQHBhcmFtIHtib29sZWFufSBbY29weV0gICAgICAgICAgUmV0dXJuIGEgcmVzaGFwZWQgY29weSBvZiB0aGUgbWF0cml4CiAgICoKICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBUaGUgcmVzaGFwZWQgbWF0cml4CiAgICovCgoKICBNYXRyaXgucHJvdG90eXBlLnJlc2hhcGUgPSBmdW5jdGlvbiAoc2l6ZSwgZGVmYXVsdFZhbHVlKSB7CiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnMKICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSByZXNoYXBlIG9uIGEgTWF0cml4IGludGVyZmFjZScpOwogIH07CiAgLyoqCiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhlIG1hdHJpeAogICAqIEByZXR1cm4ge01hdHJpeH0gY2xvbmUKICAgKi8KCgogIE1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnMKICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBjbG9uZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTsKICB9OwogIC8qKgogICAqIFJldHJpZXZlIHRoZSBzaXplIG9mIHRoZSBtYXRyaXguCiAgICogQHJldHVybnMge251bWJlcltdfSBzaXplCiAgICovCgoKICBNYXRyaXgucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiAoKSB7CiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnMKICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBzaXplIG9uIGEgTWF0cml4IGludGVyZmFjZScpOwogIH07CiAgLyoqCiAgICogQ3JlYXRlIGEgbmV3IG1hdHJpeCB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvbgogICAqIGVhY2ggZW50cnkgb2YgdGhlIG1hdHJpeC4KICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggdGhyZWUKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXggYmVpbmcgdHJhdmVyc2VkLgogICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NraXBaZXJvc10gSW52b2tlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBub24temVybyB2YWx1ZXMgb25seS4KICAgKgogICAqIEByZXR1cm4ge01hdHJpeH0gbWF0cml4CiAgICovCgoKICBNYXRyaXgucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgc2tpcFplcm9zKSB7CiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnMKICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBtYXAgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7CiAgfTsKICAvKioKICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gb24gZWFjaCBlbnRyeSBvZiB0aGUgbWF0cml4LgogICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCB0aHJlZQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXgKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIE1hdHJpeCBiZWluZyB0cmF2ZXJzZWQuCiAgICovCgoKICBNYXRyaXgucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9ucwogICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGZvckVhY2ggb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7CiAgfTsKICAvKioKICAgKiBDcmVhdGUgYW4gQXJyYXkgd2l0aCBhIGNvcHkgb2YgdGhlIGRhdGEgb2YgdGhlIE1hdHJpeAogICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXkKICAgKi8KCgogIE1hdHJpeC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICgpIHsKICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9ucwogICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHRvQXJyYXkgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7CiAgfTsKICAvKioKICAgKiBHZXQgdGhlIHByaW1pdGl2ZSB2YWx1ZSBvZiB0aGUgTWF0cml4OiBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXkKICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5CiAgICovCgoKICBNYXRyaXgucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbiAoKSB7CiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnMKICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSB2YWx1ZU9mIG9uIGEgTWF0cml4IGludGVyZmFjZScpOwogIH07CiAgLyoqCiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXgsIHdpdGggb3B0aW9uYWwgZm9ybWF0dGluZyBvcHRpb25zLgogICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWUKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYi91dGlscy9udW1iZXI6Zm9ybWF0IGZvciBhCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiBvZiB0aGUgYXZhaWxhYmxlCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLgogICAqIEByZXR1cm5zIHtzdHJpbmd9IHN0cgogICAqLwoKCiAgTWF0cml4LnByb3RvdHlwZS5mb3JtYXQgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zCiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2UgZm9ybWF0IG9uIGEgTWF0cml4IGludGVyZmFjZScpOwogIH07CiAgLyoqCiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXgKICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHIKICAgKi8KCgogIE1hdHJpeC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnMKICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSB0b1N0cmluZyBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTsKICB9OwoKICByZXR1cm4gTWF0cml4Owp9LCB7CiAgaXNDbGFzczogdHJ1ZQp9KTsKLy8gRVhURVJOQUwgTU9EVUxFOiAuL3NyYy91dGlscy9hcnJheS5qcwp2YXIgdXRpbHNfYXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpOwoKLy8gRVhURVJOQUwgTU9EVUxFOiAuL3NyYy91dGlscy9zdHJpbmcuanMgKyAxIG1vZHVsZXMKdmFyIHV0aWxzX3N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7CgovLyBFWFRFUk5BTCBNT0RVTEU6IC4vc3JjL3V0aWxzL29iamVjdC5qcwp2YXIgdXRpbHNfb2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTsKCi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvZXJyb3IvRGltZW5zaW9uRXJyb3IuanMKdmFyIERpbWVuc2lvbkVycm9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTsKCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3R5cGUvbWF0cml4L0RlbnNlTWF0cml4LmpzCgoKCgoKCgp2YXIgRGVuc2VNYXRyaXhfbmFtZSA9ICdEZW5zZU1hdHJpeCc7CnZhciBEZW5zZU1hdHJpeF9kZXBlbmRlbmNpZXMgPSBbJ01hdHJpeCddOwp2YXIgY3JlYXRlRGVuc2VNYXRyaXhDbGFzcyA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKERlbnNlTWF0cml4X25hbWUsIERlbnNlTWF0cml4X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgTWF0cml4ID0gX3JlZi5NYXRyaXg7CgogIC8qKgogICAqIERlbnNlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbi4gQSByZWd1bGFyLCBkZW5zZSBtYXRyaXgsIHN1cHBvcnRpbmcgbXVsdGktZGltZW5zaW9uYWwgbWF0cmljZXMuIFRoaXMgaXMgdGhlIGRlZmF1bHQgbWF0cml4IHR5cGUuCiAgICogQGNsYXNzIERlbnNlTWF0cml4CiAgICovCiAgZnVuY3Rpb24gRGVuc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpIHsKICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEZW5zZU1hdHJpeCkpIHsKICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTsKICAgIH0KCiAgICBpZiAoZGF0YXR5cGUgJiYgIU9iamVjdChpc1siSSIgLyogaXNTdHJpbmcgKi9dKShkYXRhdHlwZSkpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGF0eXBlOiAnICsgZGF0YXR5cGUpOwogICAgfQoKICAgIGlmIChPYmplY3QoaXNbInYiIC8qIGlzTWF0cml4ICovXSkoZGF0YSkpIHsKICAgICAgLy8gY2hlY2sgZGF0YSBpcyBhIERlbnNlTWF0cml4CiAgICAgIGlmIChkYXRhLnR5cGUgPT09ICdEZW5zZU1hdHJpeCcpIHsKICAgICAgICAvLyBjbG9uZSBkYXRhICYgc2l6ZQogICAgICAgIHRoaXMuX2RhdGEgPSBPYmplY3QodXRpbHNfb2JqZWN0WyJhIiAvKiBjbG9uZSAqL10pKGRhdGEuX2RhdGEpOwogICAgICAgIHRoaXMuX3NpemUgPSBPYmplY3QodXRpbHNfb2JqZWN0WyJhIiAvKiBjbG9uZSAqL10pKGRhdGEuX3NpemUpOwogICAgICAgIHRoaXMuX2RhdGF0eXBlID0gZGF0YXR5cGUgfHwgZGF0YS5fZGF0YXR5cGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gYnVpbGQgZGF0YSBmcm9tIGV4aXN0aW5nIG1hdHJpeAogICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhLnRvQXJyYXkoKTsKICAgICAgICB0aGlzLl9zaXplID0gZGF0YS5zaXplKCk7CiAgICAgICAgdGhpcy5fZGF0YXR5cGUgPSBkYXRhdHlwZSB8fCBkYXRhLl9kYXRhdHlwZTsKICAgICAgfQogICAgfSBlbHNlIGlmIChkYXRhICYmIE9iamVjdChpc1siYiIgLyogaXNBcnJheSAqL10pKGRhdGEuZGF0YSkgJiYgT2JqZWN0KGlzWyJiIiAvKiBpc0FycmF5ICovXSkoZGF0YS5zaXplKSkgewogICAgICAvLyBpbml0aWFsaXplIGZpZWxkcyBmcm9tIEpTT04gcmVwcmVzZW50YXRpb24KICAgICAgdGhpcy5fZGF0YSA9IGRhdGEuZGF0YTsKICAgICAgdGhpcy5fc2l6ZSA9IGRhdGEuc2l6ZTsgLy8gdmVyaWZ5IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBhcnJheQoKICAgICAgT2JqZWN0KHV0aWxzX2FycmF5WyJyIiAvKiB2YWxpZGF0ZSAqL10pKHRoaXMuX2RhdGEsIHRoaXMuX3NpemUpOwogICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGF0eXBlIHx8IGRhdGEuZGF0YXR5cGU7CiAgICB9IGVsc2UgaWYgKE9iamVjdChpc1siYiIgLyogaXNBcnJheSAqL10pKGRhdGEpKSB7CiAgICAgIC8vIHJlcGxhY2UgbmVzdGVkIE1hdHJpY2VzIHdpdGggQXJyYXlzCiAgICAgIHRoaXMuX2RhdGEgPSBwcmVwcm9jZXNzKGRhdGEpOyAvLyBnZXQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGFycmF5CgogICAgICB0aGlzLl9zaXplID0gT2JqZWN0KHV0aWxzX2FycmF5WyJhIiAvKiBhcnJheVNpemUgKi9dKSh0aGlzLl9kYXRhKTsgLy8gdmVyaWZ5IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBhcnJheSwgVE9ETzogY29tcHV0ZSBzaXplIHdoaWxlIHByb2Nlc3NpbmcgYXJyYXkKCiAgICAgIE9iamVjdCh1dGlsc19hcnJheVsiciIgLyogdmFsaWRhdGUgKi9dKSh0aGlzLl9kYXRhLCB0aGlzLl9zaXplKTsgLy8gZGF0YSB0eXBlIHVua25vd24KCiAgICAgIHRoaXMuX2RhdGF0eXBlID0gZGF0YXR5cGU7CiAgICB9IGVsc2UgaWYgKGRhdGEpIHsKICAgICAgLy8gdW5zdXBwb3J0ZWQgdHlwZQogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIGRhdGEgKCcgKyBPYmplY3QoaXNbIk0iIC8qIHR5cGVPZiAqL10pKGRhdGEpICsgJyknKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIG5vdGhpbmcgcHJvdmlkZWQKICAgICAgdGhpcy5fZGF0YSA9IFtdOwogICAgICB0aGlzLl9zaXplID0gWzBdOwogICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGF0eXBlOwogICAgfQogIH0KCiAgRGVuc2VNYXRyaXgucHJvdG90eXBlID0gbmV3IE1hdHJpeCgpOwogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBEZW5zZU1hdHJpeAogICAqLwoKICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuY3JlYXRlRGVuc2VNYXRyaXggPSBmdW5jdGlvbiAoZGF0YSwgZGF0YXR5cGUpIHsKICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpOwogIH07CiAgLyoqCiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb24KICAgKi8KCgogIERlbnNlTWF0cml4LnByb3RvdHlwZS50eXBlID0gJ0RlbnNlTWF0cml4JzsKICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuaXNEZW5zZU1hdHJpeCA9IHRydWU7CiAgLyoqCiAgICogR2V0IHRoZSBtYXRyaXggdHlwZQogICAqCiAgICogVXNhZ2U6CiAgICogICAgY29uc3QgbWF0cml4VHlwZSA9IG1hdHJpeC5nZXREYXRhVHlwZSgpICAvLyByZXRyaWV2ZXMgdGhlIG1hdHJpeCB0eXBlCiAgICoKICAgKiBAbWVtYmVyT2YgRGVuc2VNYXRyaXgKICAgKiBAcmV0dXJuIHtzdHJpbmd9ICAgdHlwZSBpbmZvcm1hdGlvbjsgaWYgbXVsdGlwbGUgdHlwZXMgYXJlIGZvdW5kIGZyb20gdGhlIE1hdHJpeCwgaXQgd2lsbCByZXR1cm4gIm1peGVkIgogICAqLwoKICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuZ2V0RGF0YVR5cGUgPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gT2JqZWN0KHV0aWxzX2FycmF5WyJoIiAvKiBnZXRBcnJheURhdGFUeXBlICovXSkodGhpcy5fZGF0YSwgaXNbIk0iIC8qIHR5cGVPZiAqL10pOwogIH07CiAgLyoqCiAgICogR2V0IHRoZSBzdG9yYWdlIGZvcm1hdCB1c2VkIGJ5IHRoZSBtYXRyaXguCiAgICoKICAgKiBVc2FnZToKICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LnN0b3JhZ2UoKSAgLy8gcmV0cmlldmUgc3RvcmFnZSBmb3JtYXQKICAgKgogICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeAogICAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgIFRoZSBzdG9yYWdlIGZvcm1hdC4KICAgKi8KCgogIERlbnNlTWF0cml4LnByb3RvdHlwZS5zdG9yYWdlID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuICdkZW5zZSc7CiAgfTsKICAvKioKICAgKiBHZXQgdGhlIGRhdGF0eXBlIG9mIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgbWF0cml4LgogICAqCiAgICogVXNhZ2U6CiAgICogICAgIGNvbnN0IGZvcm1hdCA9IG1hdHJpeC5kYXRhdHlwZSgpICAgLy8gcmV0cmlldmUgbWF0cml4IGRhdGF0eXBlCiAgICoKICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXgKICAgKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICBUaGUgZGF0YXR5cGUuCiAgICovCgoKICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuZGF0YXR5cGUgPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gdGhpcy5fZGF0YXR5cGU7CiAgfTsKICAvKioKICAgKiBDcmVhdGUgYSBuZXcgRGVuc2VNYXRyaXgKICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXgKICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhCiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhdHlwZV0KICAgKi8KCgogIERlbnNlTWF0cml4LnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbiAoZGF0YSwgZGF0YXR5cGUpIHsKICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpOwogIH07CiAgLyoqCiAgICogR2V0IGEgc3Vic2V0IG9mIHRoZSBtYXRyaXgsIG9yIHJlcGxhY2UgYSBzdWJzZXQgb2YgdGhlIG1hdHJpeC4KICAgKgogICAqIFVzYWdlOgogICAqICAgICBjb25zdCBzdWJzZXQgPSBtYXRyaXguc3Vic2V0KGluZGV4KSAgICAgICAgICAgICAgIC8vIHJldHJpZXZlIHN1YnNldAogICAqICAgICBjb25zdCB2YWx1ZSA9IG1hdHJpeC5zdWJzZXQoaW5kZXgsIHJlcGxhY2VtZW50KSAgIC8vIHJlcGxhY2Ugc3Vic2V0CiAgICoKICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXgKICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleAogICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXggfCAqfSBbcmVwbGFjZW1lbnRdCiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW4KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuIElmIG5vdCBwcm92aWRlZCwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgbWF0cml4IGVsZW1lbnRzIHdpbGwgYmUgZmlsbGVkIHdpdGggemVyb3MuCiAgICovCgoKICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuc3Vic2V0ID0gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKSB7CiAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgY2FzZSAxOgogICAgICAgIHJldHVybiBfZ2V0KHRoaXMsIGluZGV4KTsKICAgICAgLy8gaW50ZW50aW9uYWwgZmFsbCB0aHJvdWdoCgogICAgICBjYXNlIDI6CiAgICAgIGNhc2UgMzoKICAgICAgICByZXR1cm4gX3NldCh0aGlzLCBpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSk7CgogICAgICBkZWZhdWx0OgogICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cycpOwogICAgfQogIH07CiAgLyoqCiAgICogR2V0IGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgbWF0cml4LgogICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeAogICAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleAogICAqIEByZXR1cm4geyp9IHZhbHVlCiAgICovCgoKICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGluZGV4KSB7CiAgICBpZiAoIU9iamVjdChpc1siYiIgLyogaXNBcnJheSAqL10pKGluZGV4KSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCcpOwogICAgfQoKICAgIGlmIChpbmRleC5sZW5ndGggIT09IHRoaXMuX3NpemUubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBEaW1lbnNpb25FcnJvclsiYSIgLyogRGltZW5zaW9uRXJyb3IgKi9dKGluZGV4Lmxlbmd0aCwgdGhpcy5fc2l6ZS5sZW5ndGgpOwogICAgfSAvLyBjaGVjayBpbmRleAoKCiAgICBmb3IgKHZhciB4ID0gMDsgeCA8IGluZGV4Lmxlbmd0aDsgeCsrKSB7CiAgICAgIE9iamVjdCh1dGlsc19hcnJheVsicyIgLyogdmFsaWRhdGVJbmRleCAqL10pKGluZGV4W3hdLCB0aGlzLl9zaXplW3hdKTsKICAgIH0KCiAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7CgogICAgZm9yICh2YXIgaSA9IDAsIGlpID0gaW5kZXgubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICB2YXIgaW5kZXhJID0gaW5kZXhbaV07CiAgICAgIE9iamVjdCh1dGlsc19hcnJheVsicyIgLyogdmFsaWRhdGVJbmRleCAqL10pKGluZGV4SSwgZGF0YS5sZW5ndGgpOwogICAgICBkYXRhID0gZGF0YVtpbmRleEldOwogICAgfQoKICAgIHJldHVybiBkYXRhOwogIH07CiAgLyoqCiAgICogUmVwbGFjZSBhIHNpbmdsZSBlbGVtZW50IGluIHRoZSBtYXRyaXguCiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4CiAgICogQHBhcmFtIHtudW1iZXJbXX0gaW5kZXggICBaZXJvLWJhc2VkIGluZGV4CiAgICogQHBhcmFtIHsqfSB2YWx1ZQogICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gICAgICAgIERlZmF1bHQgdmFsdWUsIGZpbGxlZCBpbiBvbiBuZXcgZW50cmllcyB3aGVuCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IG1hdHJpeCBlbGVtZW50cyB3aWxsIGJlIGxlZnQgdW5kZWZpbmVkLgogICAqIEByZXR1cm4ge0RlbnNlTWF0cml4fSBzZWxmCiAgICovCgoKICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7CiAgICBpZiAoIU9iamVjdChpc1siYiIgLyogaXNBcnJheSAqL10pKGluZGV4KSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCcpOwogICAgfQoKICAgIGlmIChpbmRleC5sZW5ndGggPCB0aGlzLl9zaXplLmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgRGltZW5zaW9uRXJyb3JbImEiIC8qIERpbWVuc2lvbkVycm9yICovXShpbmRleC5sZW5ndGgsIHRoaXMuX3NpemUubGVuZ3RoLCAnPCcpOwogICAgfQoKICAgIHZhciBpLCBpaSwgaW5kZXhJOyAvLyBlbmxhcmdlIG1hdHJpeCB3aGVuIG5lZWRlZAoKICAgIHZhciBzaXplID0gaW5kZXgubWFwKGZ1bmN0aW9uIChpKSB7CiAgICAgIHJldHVybiBpICsgMTsKICAgIH0pOwoKICAgIF9maXQodGhpcywgc2l6ZSwgZGVmYXVsdFZhbHVlKTsgLy8gdHJhdmVyc2Ugb3ZlciB0aGUgZGltZW5zaW9ucwoKCiAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7CgogICAgZm9yIChpID0gMCwgaWkgPSBpbmRleC5sZW5ndGggLSAxOyBpIDwgaWk7IGkrKykgewogICAgICBpbmRleEkgPSBpbmRleFtpXTsKICAgICAgT2JqZWN0KHV0aWxzX2FycmF5WyJzIiAvKiB2YWxpZGF0ZUluZGV4ICovXSkoaW5kZXhJLCBkYXRhLmxlbmd0aCk7CiAgICAgIGRhdGEgPSBkYXRhW2luZGV4SV07CiAgICB9IC8vIHNldCBuZXcgdmFsdWUKCgogICAgaW5kZXhJID0gaW5kZXhbaW5kZXgubGVuZ3RoIC0gMV07CiAgICBPYmplY3QodXRpbHNfYXJyYXlbInMiIC8qIHZhbGlkYXRlSW5kZXggKi9dKShpbmRleEksIGRhdGEubGVuZ3RoKTsKICAgIGRhdGFbaW5kZXhJXSA9IHZhbHVlOwogICAgcmV0dXJuIHRoaXM7CiAgfTsKICAvKioKICAgKiBHZXQgYSBzdWJtYXRyaXggb2YgdGhpcyBtYXRyaXgKICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXgKICAgKiBAcGFyYW0ge0RlbnNlTWF0cml4fSBtYXRyaXgKICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleCAgIFplcm8tYmFzZWQgaW5kZXgKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gX2dldChtYXRyaXgsIGluZGV4KSB7CiAgICBpZiAoIU9iamVjdChpc1sidCIgLyogaXNJbmRleCAqL10pKGluZGV4KSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGluZGV4Jyk7CiAgICB9CgogICAgdmFyIGlzU2NhbGFyID0gaW5kZXguaXNTY2FsYXIoKTsKCiAgICBpZiAoaXNTY2FsYXIpIHsKICAgICAgLy8gcmV0dXJuIGEgc2NhbGFyCiAgICAgIHJldHVybiBtYXRyaXguZ2V0KGluZGV4Lm1pbigpKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIHZhbGlkYXRlIGRpbWVuc2lvbnMKICAgICAgdmFyIHNpemUgPSBpbmRleC5zaXplKCk7CgogICAgICBpZiAoc2l6ZS5sZW5ndGggIT09IG1hdHJpeC5fc2l6ZS5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgRGltZW5zaW9uRXJyb3JbImEiIC8qIERpbWVuc2lvbkVycm9yICovXShzaXplLmxlbmd0aCwgbWF0cml4Ll9zaXplLmxlbmd0aCk7CiAgICAgIH0gLy8gdmFsaWRhdGUgaWYgYW55IG9mIHRoZSByYW5nZXMgaW4gdGhlIGluZGV4IGlzIG91dCBvZiByYW5nZQoKCiAgICAgIHZhciBtaW4gPSBpbmRleC5taW4oKTsKICAgICAgdmFyIG1heCA9IGluZGV4Lm1heCgpOwoKICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbWF0cml4Ll9zaXplLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgICBPYmplY3QodXRpbHNfYXJyYXlbInMiIC8qIHZhbGlkYXRlSW5kZXggKi9dKShtaW5baV0sIG1hdHJpeC5fc2l6ZVtpXSk7CiAgICAgICAgT2JqZWN0KHV0aWxzX2FycmF5WyJzIiAvKiB2YWxpZGF0ZUluZGV4ICovXSkobWF4W2ldLCBtYXRyaXguX3NpemVbaV0pOwogICAgICB9IC8vIHJldHJpZXZlIHN1Ym1hdHJpeAogICAgICAvLyBUT0RPOiBtb3JlIGVmZmljaWVudCB3aGVuIGNyZWF0aW5nIGFuIGVtcHR5IG1hdHJpeCBhbmQgc2V0dGluZyBfZGF0YSBhbmQgX3NpemUgbWFudWFsbHkKCgogICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KF9nZXRTdWJtYXRyaXgobWF0cml4Ll9kYXRhLCBpbmRleCwgc2l6ZS5sZW5ndGgsIDApLCBtYXRyaXguX2RhdGF0eXBlKTsKICAgIH0KICB9CiAgLyoqCiAgICogUmVjdXJzaXZlbHkgZ2V0IGEgc3VibWF0cml4IG9mIGEgbXVsdGkgZGltZW5zaW9uYWwgbWF0cml4LgogICAqIEluZGV4IGlzIG5vdCBjaGVja2VkIGZvciBjb3JyZWN0IG51bWJlciBvciBsZW5ndGggb2YgZGltZW5zaW9ucy4KICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXgKICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhCiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXgKICAgKiBAcGFyYW0ge251bWJlcn0gZGltcyAgIFRvdGFsIG51bWJlciBvZiBkaW1lbnNpb25zCiAgICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgICBDdXJyZW50IGRpbWVuc2lvbgogICAqIEByZXR1cm4ge0FycmF5fSBzdWJtYXRyaXgKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gX2dldFN1Ym1hdHJpeChkYXRhLCBpbmRleCwgZGltcywgZGltKSB7CiAgICB2YXIgbGFzdCA9IGRpbSA9PT0gZGltcyAtIDE7CiAgICB2YXIgcmFuZ2UgPSBpbmRleC5kaW1lbnNpb24oZGltKTsKCiAgICBpZiAobGFzdCkgewogICAgICByZXR1cm4gcmFuZ2UubWFwKGZ1bmN0aW9uIChpKSB7CiAgICAgICAgT2JqZWN0KHV0aWxzX2FycmF5WyJzIiAvKiB2YWxpZGF0ZUluZGV4ICovXSkoaSwgZGF0YS5sZW5ndGgpOwogICAgICAgIHJldHVybiBkYXRhW2ldOwogICAgICB9KS52YWx1ZU9mKCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gcmFuZ2UubWFwKGZ1bmN0aW9uIChpKSB7CiAgICAgICAgT2JqZWN0KHV0aWxzX2FycmF5WyJzIiAvKiB2YWxpZGF0ZUluZGV4ICovXSkoaSwgZGF0YS5sZW5ndGgpOwogICAgICAgIHZhciBjaGlsZCA9IGRhdGFbaV07CiAgICAgICAgcmV0dXJuIF9nZXRTdWJtYXRyaXgoY2hpbGQsIGluZGV4LCBkaW1zLCBkaW0gKyAxKTsKICAgICAgfSkudmFsdWVPZigpOwogICAgfQogIH0KICAvKioKICAgKiBSZXBsYWNlIGEgc3VibWF0cml4IGluIHRoaXMgbWF0cml4CiAgICogSW5kZXhlcyBhcmUgemVyby1iYXNlZC4KICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXgKICAgKiBAcGFyYW0ge0RlbnNlTWF0cml4fSBtYXRyaXgKICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleAogICAqIEBwYXJhbSB7RGVuc2VNYXRyaXggfCBBcnJheSB8ICp9IHN1Ym1hdHJpeAogICAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlICAgICAgICAgIERlZmF1bHQgdmFsdWUsIGZpbGxlZCBpbiBvbiBuZXcgZW50cmllcyB3aGVuCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLgogICAqIEByZXR1cm4ge0RlbnNlTWF0cml4fSBtYXRyaXgKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gX3NldChtYXRyaXgsIGluZGV4LCBzdWJtYXRyaXgsIGRlZmF1bHRWYWx1ZSkgewogICAgaWYgKCFpbmRleCB8fCBpbmRleC5pc0luZGV4ICE9PSB0cnVlKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaW5kZXgnKTsKICAgIH0gLy8gZ2V0IGluZGV4IHNpemUgYW5kIGNoZWNrIHdoZXRoZXIgdGhlIGluZGV4IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlCgoKICAgIHZhciBpU2l6ZSA9IGluZGV4LnNpemUoKTsKICAgIHZhciBpc1NjYWxhciA9IGluZGV4LmlzU2NhbGFyKCk7IC8vIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgc3VibWF0cml4LCBhbmQgY29udmVydCBpdCBpbnRvIGFuIEFycmF5IGlmIG5lZWRlZAoKICAgIHZhciBzU2l6ZTsKCiAgICBpZiAoT2JqZWN0KGlzWyJ2IiAvKiBpc01hdHJpeCAqL10pKHN1Ym1hdHJpeCkpIHsKICAgICAgc1NpemUgPSBzdWJtYXRyaXguc2l6ZSgpOwogICAgICBzdWJtYXRyaXggPSBzdWJtYXRyaXgudmFsdWVPZigpOwogICAgfSBlbHNlIHsKICAgICAgc1NpemUgPSBPYmplY3QodXRpbHNfYXJyYXlbImEiIC8qIGFycmF5U2l6ZSAqL10pKHN1Ym1hdHJpeCk7CiAgICB9CgogICAgaWYgKGlzU2NhbGFyKSB7CiAgICAgIC8vIHNldCBhIHNjYWxhcgogICAgICAvLyBjaGVjayB3aGV0aGVyIHN1Ym1hdHJpeCBpcyBhIHNjYWxhcgogICAgICBpZiAoc1NpemUubGVuZ3RoICE9PSAwKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU2NhbGFyIGV4cGVjdGVkJyk7CiAgICAgIH0KCiAgICAgIG1hdHJpeC5zZXQoaW5kZXgubWluKCksIHN1Ym1hdHJpeCwgZGVmYXVsdFZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIHNldCBhIHN1Ym1hdHJpeAogICAgICAvLyB2YWxpZGF0ZSBkaW1lbnNpb25zCiAgICAgIGlmIChpU2l6ZS5sZW5ndGggPCBtYXRyaXguX3NpemUubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IERpbWVuc2lvbkVycm9yWyJhIiAvKiBEaW1lbnNpb25FcnJvciAqL10oaVNpemUubGVuZ3RoLCBtYXRyaXguX3NpemUubGVuZ3RoLCAnPCcpOwogICAgICB9CgogICAgICBpZiAoc1NpemUubGVuZ3RoIDwgaVNpemUubGVuZ3RoKSB7CiAgICAgICAgLy8gY2FsY3VsYXRlIG51bWJlciBvZiBtaXNzaW5nIG91dGVyIGRpbWVuc2lvbnMKICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgdmFyIG91dGVyID0gMDsKCiAgICAgICAgd2hpbGUgKGlTaXplW2ldID09PSAxICYmIHNTaXplW2ldID09PSAxKSB7CiAgICAgICAgICBpKys7CiAgICAgICAgfQoKICAgICAgICB3aGlsZSAoaVNpemVbaV0gPT09IDEpIHsKICAgICAgICAgIG91dGVyKys7CiAgICAgICAgICBpKys7CiAgICAgICAgfSAvLyB1bnNxdWVlemUgYm90aCBvdXRlciBhbmQgaW5uZXIgZGltZW5zaW9ucwoKCiAgICAgICAgc3VibWF0cml4ID0gT2JqZWN0KHV0aWxzX2FycmF5WyJxIiAvKiB1bnNxdWVlemUgKi9dKShzdWJtYXRyaXgsIGlTaXplLmxlbmd0aCwgb3V0ZXIsIHNTaXplKTsKICAgICAgfSAvLyBjaGVjayB3aGV0aGVyIHRoZSBzaXplIG9mIHRoZSBzdWJtYXRyaXggbWF0Y2hlcyB0aGUgaW5kZXggc2l6ZQoKCiAgICAgIGlmICghT2JqZWN0KHV0aWxzX29iamVjdFsiZCIgLyogZGVlcFN0cmljdEVxdWFsICovXSkoaVNpemUsIHNTaXplKSkgewogICAgICAgIHRocm93IG5ldyBEaW1lbnNpb25FcnJvclsiYSIgLyogRGltZW5zaW9uRXJyb3IgKi9dKGlTaXplLCBzU2l6ZSwgJz4nKTsKICAgICAgfSAvLyBlbmxhcmdlIG1hdHJpeCB3aGVuIG5lZWRlZAoKCiAgICAgIHZhciBzaXplID0gaW5kZXgubWF4KCkubWFwKGZ1bmN0aW9uIChpKSB7CiAgICAgICAgcmV0dXJuIGkgKyAxOwogICAgICB9KTsKCiAgICAgIF9maXQobWF0cml4LCBzaXplLCBkZWZhdWx0VmFsdWUpOyAvLyBpbnNlcnQgdGhlIHN1YiBtYXRyaXgKCgogICAgICB2YXIgZGltcyA9IGlTaXplLmxlbmd0aDsKICAgICAgdmFyIGRpbSA9IDA7CgogICAgICBfc2V0U3VibWF0cml4KG1hdHJpeC5fZGF0YSwgaW5kZXgsIHN1Ym1hdHJpeCwgZGltcywgZGltKTsKICAgIH0KCiAgICByZXR1cm4gbWF0cml4OwogIH0KICAvKioKICAgKiBSZXBsYWNlIGEgc3VibWF0cml4IG9mIGEgbXVsdGkgZGltZW5zaW9uYWwgbWF0cml4LgogICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeAogICAqIEBwYXJhbSB7QXJyYXl9IGRhdGEKICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleAogICAqIEBwYXJhbSB7QXJyYXl9IHN1Ym1hdHJpeAogICAqIEBwYXJhbSB7bnVtYmVyfSBkaW1zICAgVG90YWwgbnVtYmVyIG9mIGRpbWVuc2lvbnMKICAgKiBAcGFyYW0ge251bWJlcn0gZGltCiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIF9zZXRTdWJtYXRyaXgoZGF0YSwgaW5kZXgsIHN1Ym1hdHJpeCwgZGltcywgZGltKSB7CiAgICB2YXIgbGFzdCA9IGRpbSA9PT0gZGltcyAtIDE7CiAgICB2YXIgcmFuZ2UgPSBpbmRleC5kaW1lbnNpb24oZGltKTsKCiAgICBpZiAobGFzdCkgewogICAgICByYW5nZS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhSW5kZXgsIHN1YkluZGV4KSB7CiAgICAgICAgT2JqZWN0KHV0aWxzX2FycmF5WyJzIiAvKiB2YWxpZGF0ZUluZGV4ICovXSkoZGF0YUluZGV4KTsKICAgICAgICBkYXRhW2RhdGFJbmRleF0gPSBzdWJtYXRyaXhbc3ViSW5kZXhbMF1dOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIHJhbmdlLmZvckVhY2goZnVuY3Rpb24gKGRhdGFJbmRleCwgc3ViSW5kZXgpIHsKICAgICAgICBPYmplY3QodXRpbHNfYXJyYXlbInMiIC8qIHZhbGlkYXRlSW5kZXggKi9dKShkYXRhSW5kZXgpOwoKICAgICAgICBfc2V0U3VibWF0cml4KGRhdGFbZGF0YUluZGV4XSwgaW5kZXgsIHN1Ym1hdHJpeFtzdWJJbmRleFswXV0sIGRpbXMsIGRpbSArIDEpOwogICAgICB9KTsKICAgIH0KICB9CiAgLyoqCiAgICogUmVzaXplIHRoZSBtYXRyaXggdG8gdGhlIGdpdmVuIHNpemUuIFJldHVybnMgYSBjb3B5IG9mIHRoZSBtYXRyaXggd2hlbgogICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNpemUgaW4gcGxhY2UpLgogICAqCiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4CiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuCiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzLgogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBwcm92aWRlZCwgdGhlIG1hdHJpeCBlbGVtZW50cyB3aWxsCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgZmlsbGVkIHdpdGggemVyb3MuCiAgICogQHBhcmFtIHtib29sZWFufSBbY29weV0gICAgICAgICAgUmV0dXJuIGEgcmVzaXplZCBjb3B5IG9mIHRoZSBtYXRyaXgKICAgKgogICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgIFRoZSByZXNpemVkIG1hdHJpeAogICAqLwoKCiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uIChzaXplLCBkZWZhdWx0VmFsdWUsIGNvcHkpIHsKICAgIC8vIHZhbGlkYXRlIGFyZ3VtZW50cwogICAgaWYgKCFPYmplY3QoaXNbImIiIC8qIGlzQXJyYXkgKi9dKShzaXplKSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCcpOwogICAgfSAvLyBtYXRyaXggdG8gcmVzaXplCgoKICAgIHZhciBtID0gY29weSA/IHRoaXMuY2xvbmUoKSA6IHRoaXM7IC8vIHJlc2l6ZSBtYXRyaXgKCiAgICByZXR1cm4gX3Jlc2l6ZShtLCBzaXplLCBkZWZhdWx0VmFsdWUpOwogIH07CgogIGZ1bmN0aW9uIF9yZXNpemUobWF0cml4LCBzaXplLCBkZWZhdWx0VmFsdWUpIHsKICAgIC8vIGNoZWNrIHNpemUKICAgIGlmIChzaXplLmxlbmd0aCA9PT0gMCkgewogICAgICAvLyBmaXJzdCB2YWx1ZSBpbiBtYXRyaXgKICAgICAgdmFyIHYgPSBtYXRyaXguX2RhdGE7IC8vIGdvIGRlZXAKCiAgICAgIHdoaWxlIChPYmplY3QoaXNbImIiIC8qIGlzQXJyYXkgKi9dKSh2KSkgewogICAgICAgIHYgPSB2WzBdOwogICAgICB9CgogICAgICByZXR1cm4gdjsKICAgIH0gLy8gcmVzaXplIG1hdHJpeAoKCiAgICBtYXRyaXguX3NpemUgPSBzaXplLnNsaWNlKDApOyAvLyBjb3B5IHRoZSBhcnJheQoKICAgIG1hdHJpeC5fZGF0YSA9IE9iamVjdCh1dGlsc19hcnJheVsibyIgLyogcmVzaXplICovXSkobWF0cml4Ll9kYXRhLCBtYXRyaXguX3NpemUsIGRlZmF1bHRWYWx1ZSk7IC8vIHJldHVybiBtYXRyaXgKCiAgICByZXR1cm4gbWF0cml4OwogIH0KICAvKioKICAgKiBSZXNoYXBlIHRoZSBtYXRyaXggdG8gdGhlIGdpdmVuIHNpemUuIFJldHVybnMgYSBjb3B5IG9mIHRoZSBtYXRyaXggd2hlbgogICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNoYXBlIGluIHBsYWNlKS4KICAgKgogICAqIE5PVEU6IFRoaXMgbWlnaHQgYmUgYmV0dGVyIHN1aXRlZCB0byBjb3B5IGJ5IGRlZmF1bHQsIGluc3RlYWQgb2YgbW9kaWZ5aW5nCiAgICogICAgICAgaW4gcGxhY2UuIEZvciBub3csIGl0IG9wZXJhdGVzIGluIHBsYWNlIHRvIHJlbWFpbiBjb25zaXN0ZW50IHdpdGgKICAgKiAgICAgICByZXNpemUoKS4KICAgKgogICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeAogICAqIEBwYXJhbSB7bnVtYmVyW119IHNpemUgICAgICAgICAgIFRoZSBuZXcgc2l6ZSB0aGUgbWF0cml4IHNob3VsZCBoYXZlLgogICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHldICAgICAgICAgIFJldHVybiBhIHJlc2hhcGVkIGNvcHkgb2YgdGhlIG1hdHJpeAogICAqCiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgVGhlIHJlc2hhcGVkIG1hdHJpeAogICAqLwoKCiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLnJlc2hhcGUgPSBmdW5jdGlvbiAoc2l6ZSwgY29weSkgewogICAgdmFyIG0gPSBjb3B5ID8gdGhpcy5jbG9uZSgpIDogdGhpczsKICAgIG0uX2RhdGEgPSBPYmplY3QodXRpbHNfYXJyYXlbIm4iIC8qIHJlc2hhcGUgKi9dKShtLl9kYXRhLCBzaXplKTsKICAgIG0uX3NpemUgPSBzaXplLnNsaWNlKDApOwogICAgcmV0dXJuIG07CiAgfTsKICAvKioKICAgKiBFbmxhcmdlIHRoZSBtYXRyaXggd2hlbiBpdCBpcyBzbWFsbGVyIHRoYW4gZ2l2ZW4gc2l6ZS4KICAgKiBJZiB0aGUgbWF0cml4IGlzIGxhcmdlciBvciBlcXVhbCBzaXplZCwgbm90aGluZyBpcyBkb25lLgogICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeAogICAqIEBwYXJhbSB7RGVuc2VNYXRyaXh9IG1hdHJpeCAgICAgICAgICAgVGhlIG1hdHJpeCB0byBiZSByZXNpemVkCiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZQogICAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlICAgICAgICAgIERlZmF1bHQgdmFsdWUsIGZpbGxlZCBpbiBvbiBuZXcgZW50cmllcy4KICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gX2ZpdChtYXRyaXgsIHNpemUsIGRlZmF1bHRWYWx1ZSkgewogICAgdmFyIC8vIGNvcHkgdGhlIGFycmF5CiAgICBuZXdTaXplID0gbWF0cml4Ll9zaXplLnNsaWNlKDApOwoKICAgIHZhciBjaGFuZ2VkID0gZmFsc2U7IC8vIGFkZCBkaW1lbnNpb25zIHdoZW4gbmVlZGVkCgogICAgd2hpbGUgKG5ld1NpemUubGVuZ3RoIDwgc2l6ZS5sZW5ndGgpIHsKICAgICAgbmV3U2l6ZS5wdXNoKDApOwogICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgIH0gLy8gZW5sYXJnZSBzaXplIHdoZW4gbmVlZGVkCgoKICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHNpemUubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICBpZiAoc2l6ZVtpXSA+IG5ld1NpemVbaV0pIHsKICAgICAgICBuZXdTaXplW2ldID0gc2l6ZVtpXTsKICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgfQogICAgfQoKICAgIGlmIChjaGFuZ2VkKSB7CiAgICAgIC8vIHJlc2l6ZSBvbmx5IHdoZW4gc2l6ZSBpcyBjaGFuZ2VkCiAgICAgIF9yZXNpemUobWF0cml4LCBuZXdTaXplLCBkZWZhdWx0VmFsdWUpOwogICAgfQogIH0KICAvKioKICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGUgbWF0cml4CiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4CiAgICogQHJldHVybiB7RGVuc2VNYXRyaXh9IGNsb25lCiAgICovCgoKICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CiAgICB2YXIgbSA9IG5ldyBEZW5zZU1hdHJpeCh7CiAgICAgIGRhdGE6IE9iamVjdCh1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSkodGhpcy5fZGF0YSksCiAgICAgIHNpemU6IE9iamVjdCh1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSkodGhpcy5fc2l6ZSksCiAgICAgIGRhdGF0eXBlOiB0aGlzLl9kYXRhdHlwZQogICAgfSk7CiAgICByZXR1cm4gbTsKICB9OwogIC8qKgogICAqIFJldHJpZXZlIHRoZSBzaXplIG9mIHRoZSBtYXRyaXguCiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4CiAgICogQHJldHVybnMge251bWJlcltdfSBzaXplCiAgICovCgoKICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB0aGlzLl9zaXplLnNsaWNlKDApOyAvLyByZXR1cm4gYSBjbG9uZSBvZiBfc2l6ZQogIH07CiAgLyoqCiAgICogQ3JlYXRlIGEgbmV3IG1hdHJpeCB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvbgogICAqIGVhY2ggZW50cnkgb2YgdGhlIG1hdHJpeC4KICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXgKICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggdGhyZWUKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXggYmVpbmcgdHJhdmVyc2VkLgogICAqCiAgICogQHJldHVybiB7RGVuc2VNYXRyaXh9IG1hdHJpeAogICAqLwoKCiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgewogICAgLy8gbWF0cml4IGluc3RhbmNlCiAgICB2YXIgbWUgPSB0aGlzOwoKICAgIHZhciByZWN1cnNlID0gZnVuY3Rpb24gcmVjdXJzZSh2YWx1ZSwgaW5kZXgpIHsKICAgICAgaWYgKE9iamVjdChpc1siYiIgLyogaXNBcnJheSAqL10pKHZhbHVlKSkgewogICAgICAgIHJldHVybiB2YWx1ZS5tYXAoZnVuY3Rpb24gKGNoaWxkLCBpKSB7CiAgICAgICAgICByZXR1cm4gcmVjdXJzZShjaGlsZCwgaW5kZXguY29uY2F0KGkpKTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIGluZGV4LCBtZSk7CiAgICAgIH0KICAgIH07IC8vIGRldGVybWluZSB0aGUgbmV3IGRhdGF0eXBlIHdoZW4gdGhlIG9yaWdpbmFsIG1hdHJpeCBoYXMgZGF0YXR5cGUgZGVmaW5lZAogICAgLy8gVE9ETzogc2hvdWxkIGJlIGRvbmUgaW4gbWF0cml4IGNvbnN0cnVjdG9yIGluc3RlYWQKCgogICAgdmFyIGRhdGEgPSByZWN1cnNlKHRoaXMuX2RhdGEsIFtdKTsKICAgIHZhciBkYXRhdHlwZSA9IHRoaXMuX2RhdGF0eXBlICE9PSB1bmRlZmluZWQgPyBPYmplY3QodXRpbHNfYXJyYXlbImgiIC8qIGdldEFycmF5RGF0YVR5cGUgKi9dKShkYXRhLCBpc1siTSIgLyogdHlwZU9mICovXSkgOiB1bmRlZmluZWQ7CiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTsKICB9OwogIC8qKgogICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmdW5jdGlvbiBvbiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXguCiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4CiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRocmVlCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGVsZW1lbnQsIGFuZCB0aGUgTWF0cml4IGJlaW5nIHRyYXZlcnNlZC4KICAgKi8KCgogIERlbnNlTWF0cml4LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICAvLyBtYXRyaXggaW5zdGFuY2UKICAgIHZhciBtZSA9IHRoaXM7CgogICAgdmFyIHJlY3Vyc2UgPSBmdW5jdGlvbiByZWN1cnNlKHZhbHVlLCBpbmRleCkgewogICAgICBpZiAoT2JqZWN0KGlzWyJiIiAvKiBpc0FycmF5ICovXSkodmFsdWUpKSB7CiAgICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQsIGkpIHsKICAgICAgICAgIHJlY3Vyc2UoY2hpbGQsIGluZGV4LmNvbmNhdChpKSk7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY2FsbGJhY2sodmFsdWUsIGluZGV4LCBtZSk7CiAgICAgIH0KICAgIH07CgogICAgcmVjdXJzZSh0aGlzLl9kYXRhLCBbXSk7CiAgfTsKICAvKioKICAgKiBDcmVhdGUgYW4gQXJyYXkgd2l0aCBhIGNvcHkgb2YgdGhlIGRhdGEgb2YgdGhlIERlbnNlTWF0cml4CiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4CiAgICogQHJldHVybnMge0FycmF5fSBhcnJheQogICAqLwoKCiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gT2JqZWN0KHV0aWxzX29iamVjdFsiYSIgLyogY2xvbmUgKi9dKSh0aGlzLl9kYXRhKTsKICB9OwogIC8qKgogICAqIEdldCB0aGUgcHJpbWl0aXZlIHZhbHVlIG9mIHRoZSBEZW5zZU1hdHJpeDogYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5CiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4CiAgICogQHJldHVybnMge0FycmF5fSBhcnJheQogICAqLwoKCiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gdGhpcy5fZGF0YTsKICB9OwogIC8qKgogICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4LCB3aXRoIG9wdGlvbmFsIGZvcm1hdHRpbmcgb3B0aW9ucy4KICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXgKICAgKiBAcGFyYW0ge09iamVjdCB8IG51bWJlciB8IEZ1bmN0aW9ufSBbb3B0aW9uc10gIEZvcm1hdHRpbmcgb3B0aW9ucy4gU2VlCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy4KICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHIKICAgKi8KCgogIERlbnNlTWF0cml4LnByb3RvdHlwZS5mb3JtYXQgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgcmV0dXJuIE9iamVjdCh1dGlsc19zdHJpbmdbImQiIC8qIGZvcm1hdCAqL10pKHRoaXMuX2RhdGEsIG9wdGlvbnMpOwogIH07CiAgLyoqCiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXgKICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXgKICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHIKICAgKi8KCgogIERlbnNlTWF0cml4LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiBPYmplY3QodXRpbHNfc3RyaW5nWyJkIiAvKiBmb3JtYXQgKi9dKSh0aGlzLl9kYXRhKTsKICB9OwogIC8qKgogICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeAogICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeAogICAqIEByZXR1cm5zIHtPYmplY3R9CiAgICovCgoKICBEZW5zZU1hdHJpeC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHsKICAgICAgbWF0aGpzOiAnRGVuc2VNYXRyaXgnLAogICAgICBkYXRhOiB0aGlzLl9kYXRhLAogICAgICBzaXplOiB0aGlzLl9zaXplLAogICAgICBkYXRhdHlwZTogdGhpcy5fZGF0YXR5cGUKICAgIH07CiAgfTsKICAvKioKICAgKiBHZXQgdGhlIGt0aCBNYXRyaXggZGlhZ29uYWwuCiAgICoKICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXgKICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gW2s9MF0gICAgIFRoZSBrdGggZGlhZ29uYWwgd2hlcmUgdGhlIHZlY3RvciB3aWxsIHJldHJpZXZlZC4KICAgKgogICAqIEByZXR1cm5zIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICAgVGhlIG1hdHJpeCB3aXRoIHRoZSBkaWFnb25hbCB2YWx1ZXMuCiAgICovCgoKICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuZGlhZ29uYWwgPSBmdW5jdGlvbiAoaykgewogICAgLy8gdmFsaWRhdGUgayBpZiBhbnkKICAgIGlmIChrKSB7CiAgICAgIC8vIGNvbnZlcnQgQmlnTnVtYmVyIHRvIGEgbnVtYmVyCiAgICAgIGlmIChPYmplY3QoaXNbImUiIC8qIGlzQmlnTnVtYmVyICovXSkoaykpIHsKICAgICAgICBrID0gay50b051bWJlcigpOwogICAgICB9IC8vIGlzIG11c3QgYmUgYW4gaW50ZWdlcgoKCiAgICAgIGlmICghT2JqZWN0KGlzWyJ5IiAvKiBpc051bWJlciAqL10pKGspIHx8ICFPYmplY3QodXRpbHNfbnVtYmVyWyJpIiAvKiBpc0ludGVnZXIgKi9dKShrKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBwYXJhbWV0ZXIgayBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyJyk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIGRlZmF1bHQgdmFsdWUKICAgICAgayA9IDA7CiAgICB9CgogICAgdmFyIGtTdXBlciA9IGsgPiAwID8gayA6IDA7CiAgICB2YXIga1N1YiA9IGsgPCAwID8gLWsgOiAwOyAvLyByb3dzICYgY29sdW1ucwoKICAgIHZhciByb3dzID0gdGhpcy5fc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gdGhpcy5fc2l6ZVsxXTsgLy8gbnVtYmVyIGRpYWdvbmFsIHZhbHVlcwoKICAgIHZhciBuID0gTWF0aC5taW4ocm93cyAtIGtTdWIsIGNvbHVtbnMgLSBrU3VwZXIpOyAvLyB4IGlzIGEgbWF0cml4IGdldCBkaWFnb25hbCBmcm9tIG1hdHJpeAoKICAgIHZhciBkYXRhID0gW107IC8vIGxvb3Agcm93cwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgIGRhdGFbaV0gPSB0aGlzLl9kYXRhW2kgKyBrU3ViXVtpICsga1N1cGVyXTsKICAgIH0gLy8gY3JlYXRlIERlbnNlTWF0cml4CgoKICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoewogICAgICBkYXRhOiBkYXRhLAogICAgICBzaXplOiBbbl0sCiAgICAgIGRhdGF0eXBlOiB0aGlzLl9kYXRhdHlwZQogICAgfSk7CiAgfTsKICAvKioKICAgKiBDcmVhdGUgYSBkaWFnb25hbCBtYXRyaXguCiAgICoKICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXgKICAgKiBAcGFyYW0ge0FycmF5fSBzaXplICAgICAgICAgICAgICAgICAgICAgVGhlIG1hdHJpeCBzaXplLgogICAqIEBwYXJhbSB7bnVtYmVyIHwgTWF0cml4IHwgQXJyYXkgfSB2YWx1ZSBUaGUgdmFsdWVzIGZvciB0aGUgZGlhZ29uYWwuCiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFtrPTBdICAgICAgIFRoZSBrdGggZGlhZ29uYWwgd2hlcmUgdGhlIHZlY3RvciB3aWxsIGJlIGZpbGxlZCBpbi4KICAgKiBAcGFyYW0ge251bWJlcn0gW2RlZmF1bHRWYWx1ZV0gICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIG5vbi1kaWFnb25hbAogICAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YXR5cGVdICAgICAgICAgICAgICBUaGUgZGF0YXR5cGUgZm9yIHRoZSBkaWFnb25hbAogICAqCiAgICogQHJldHVybnMge0RlbnNlTWF0cml4fQogICAqLwoKCiAgRGVuc2VNYXRyaXguZGlhZ29uYWwgPSBmdW5jdGlvbiAoc2l6ZSwgdmFsdWUsIGssIGRlZmF1bHRWYWx1ZSkgewogICAgaWYgKCFPYmplY3QoaXNbImIiIC8qIGlzQXJyYXkgKi9dKShzaXplKSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCwgc2l6ZSBwYXJhbWV0ZXInKTsKICAgIH0KCiAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHR3byBkaW1lbnNpb25zIG1hdHJpeCBhcmUgc3VwcG9ydGVkJyk7CiAgICB9IC8vIG1hcCBzaXplICYgdmFsaWRhdGUKCgogICAgc2l6ZSA9IHNpemUubWFwKGZ1bmN0aW9uIChzKSB7CiAgICAgIC8vIGNoZWNrIGl0IGlzIGEgYmlnIG51bWJlcgogICAgICBpZiAoT2JqZWN0KGlzWyJlIiAvKiBpc0JpZ051bWJlciAqL10pKHMpKSB7CiAgICAgICAgLy8gY29udmVydCBpdAogICAgICAgIHMgPSBzLnRvTnVtYmVyKCk7CiAgICAgIH0gLy8gdmFsaWRhdGUgYXJndW1lbnRzCgoKICAgICAgaWYgKCFPYmplY3QoaXNbInkiIC8qIGlzTnVtYmVyICovXSkocykgfHwgIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKHMpIHx8IHMgPCAxKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaXplIHZhbHVlcyBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiBzOwogICAgfSk7IC8vIHZhbGlkYXRlIGsgaWYgYW55CgogICAgaWYgKGspIHsKICAgICAgLy8gY29udmVydCBCaWdOdW1iZXIgdG8gYSBudW1iZXIKICAgICAgaWYgKE9iamVjdChpc1siZSIgLyogaXNCaWdOdW1iZXIgKi9dKShrKSkgewogICAgICAgIGsgPSBrLnRvTnVtYmVyKCk7CiAgICAgIH0gLy8gaXMgbXVzdCBiZSBhbiBpbnRlZ2VyCgoKICAgICAgaWYgKCFPYmplY3QoaXNbInkiIC8qIGlzTnVtYmVyICovXSkoaykgfHwgIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKGspKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHBhcmFtZXRlciBrIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXInKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gZGVmYXVsdCB2YWx1ZQogICAgICBrID0gMDsKICAgIH0KCiAgICB2YXIga1N1cGVyID0gayA+IDAgPyBrIDogMDsKICAgIHZhciBrU3ViID0gayA8IDAgPyAtayA6IDA7IC8vIHJvd3MgYW5kIGNvbHVtbnMKCiAgICB2YXIgcm93cyA9IHNpemVbMF07CiAgICB2YXIgY29sdW1ucyA9IHNpemVbMV07IC8vIG51bWJlciBvZiBub24temVybyBpdGVtcwoKICAgIHZhciBuID0gTWF0aC5taW4ocm93cyAtIGtTdWIsIGNvbHVtbnMgLSBrU3VwZXIpOyAvLyB2YWx1ZSBleHRyYWN0aW9uIGZ1bmN0aW9uCgogICAgdmFyIF92YWx1ZTsgLy8gY2hlY2sgdmFsdWUKCgogICAgaWYgKE9iamVjdChpc1siYiIgLyogaXNBcnJheSAqL10pKHZhbHVlKSkgewogICAgICAvLyB2YWxpZGF0ZSBhcnJheQogICAgICBpZiAodmFsdWUubGVuZ3RoICE9PSBuKSB7CiAgICAgICAgLy8gbnVtYmVyIG9mIHZhbHVlcyBpbiBhcnJheSBtdXN0IGJlIG4KICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWUgYXJyYXkgbGVuZ3RoJyk7CiAgICAgIH0gLy8gZGVmaW5lIGZ1bmN0aW9uCgoKICAgICAgX3ZhbHVlID0gZnVuY3Rpb24gX3ZhbHVlKGkpIHsKICAgICAgICAvLyByZXR1cm4gdmFsdWUgQCBpCiAgICAgICAgcmV0dXJuIHZhbHVlW2ldOwogICAgICB9OwogICAgfSBlbHNlIGlmIChPYmplY3QoaXNbInYiIC8qIGlzTWF0cml4ICovXSkodmFsdWUpKSB7CiAgICAgIC8vIG1hdHJpeCBzaXplCiAgICAgIHZhciBtcyA9IHZhbHVlLnNpemUoKTsgLy8gdmFsaWRhdGUgbWF0cml4CgogICAgICBpZiAobXMubGVuZ3RoICE9PSAxIHx8IG1zWzBdICE9PSBuKSB7CiAgICAgICAgLy8gbnVtYmVyIG9mIHZhbHVlcyBpbiBhcnJheSBtdXN0IGJlIG4KICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWF0cml4IGxlbmd0aCcpOwogICAgICB9IC8vIGRlZmluZSBmdW5jdGlvbgoKCiAgICAgIF92YWx1ZSA9IGZ1bmN0aW9uIF92YWx1ZShpKSB7CiAgICAgICAgLy8gcmV0dXJuIHZhbHVlIEAgaQogICAgICAgIHJldHVybiB2YWx1ZS5nZXQoW2ldKTsKICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIGRlZmluZSBmdW5jdGlvbgogICAgICBfdmFsdWUgPSBmdW5jdGlvbiBfdmFsdWUoKSB7CiAgICAgICAgLy8gcmV0dXJuIHZhbHVlCiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICB9OwogICAgfSAvLyBkaXNjb3ZlciBkZWZhdWx0IHZhbHVlIGlmIG5lZWRlZAoKCiAgICBpZiAoIWRlZmF1bHRWYWx1ZSkgewogICAgICAvLyBjaGVjayBmaXJzdCB2YWx1ZSBpbiBhcnJheQogICAgICBkZWZhdWx0VmFsdWUgPSBPYmplY3QoaXNbImUiIC8qIGlzQmlnTnVtYmVyICovXSkoX3ZhbHVlKDApKSA/IF92YWx1ZSgwKS5tdWwoMCkgLy8gdHJpY2sgdG8gY3JlYXRlIGEgQmlnTnVtYmVyIHdpdGggdmFsdWUgemVybwogICAgICA6IDA7CiAgICB9IC8vIGVtcHR5IGFycmF5CgoKICAgIHZhciBkYXRhID0gW107IC8vIGNoZWNrIHdlIG5lZWQgdG8gcmVzaXplIGFycmF5CgogICAgaWYgKHNpemUubGVuZ3RoID4gMCkgewogICAgICAvLyByZXNpemUgYXJyYXkKICAgICAgZGF0YSA9IE9iamVjdCh1dGlsc19hcnJheVsibyIgLyogcmVzaXplICovXSkoZGF0YSwgc2l6ZSwgZGVmYXVsdFZhbHVlKTsgLy8gZmlsbCBkaWFnb25hbAoKICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBuOyBkKyspIHsKICAgICAgICBkYXRhW2QgKyBrU3ViXVtkICsga1N1cGVyXSA9IF92YWx1ZShkKTsKICAgICAgfQogICAgfSAvLyBjcmVhdGUgRGVuc2VNYXRyaXgKCgogICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7CiAgICAgIGRhdGE6IGRhdGEsCiAgICAgIHNpemU6IFtyb3dzLCBjb2x1bW5zXQogICAgfSk7CiAgfTsKICAvKioKICAgKiBHZW5lcmF0ZSBhIG1hdHJpeCBmcm9tIGEgSlNPTiBvYmplY3QKICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXgKICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZQogICAqICAgICAgICAgICAgICAgICAgICAgICBgeyJtYXRoanMiOiAiRGVuc2VNYXRyaXgiLCBkYXRhOiBbXSwgc2l6ZTogW119YCwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsCiAgICogQHJldHVybnMge0RlbnNlTWF0cml4fQogICAqLwoKCiAgRGVuc2VNYXRyaXguZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikgewogICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeChqc29uKTsKICB9OwogIC8qKgogICAqIFN3YXAgcm93cyBpIGFuZCBqIGluIE1hdHJpeC4KICAgKgogICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeAogICAqIEBwYXJhbSB7bnVtYmVyfSBpICAgICAgIE1hdHJpeCByb3cgaW5kZXggMQogICAqIEBwYXJhbSB7bnVtYmVyfSBqICAgICAgIE1hdHJpeCByb3cgaW5kZXggMgogICAqCiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgVGhlIG1hdHJpeCByZWZlcmVuY2UKICAgKi8KCgogIERlbnNlTWF0cml4LnByb3RvdHlwZS5zd2FwUm93cyA9IGZ1bmN0aW9uIChpLCBqKSB7CiAgICAvLyBjaGVjayBpbmRleAogICAgaWYgKCFPYmplY3QoaXNbInkiIC8qIGlzTnVtYmVyICovXSkoaSkgfHwgIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKGkpIHx8ICFPYmplY3QoaXNbInkiIC8qIGlzTnVtYmVyICovXSkoaikgfHwgIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKGopKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignUm93IGluZGV4IG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTsKICAgIH0gLy8gY2hlY2sgZGltZW5zaW9ucwoKCiAgICBpZiAodGhpcy5fc2l6ZS5sZW5ndGggIT09IDIpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHR3byBkaW1lbnNpb25hbCBtYXRyaXggaXMgc3VwcG9ydGVkJyk7CiAgICB9IC8vIHZhbGlkYXRlIGluZGV4CgoKICAgIE9iamVjdCh1dGlsc19hcnJheVsicyIgLyogdmFsaWRhdGVJbmRleCAqL10pKGksIHRoaXMuX3NpemVbMF0pOwogICAgT2JqZWN0KHV0aWxzX2FycmF5WyJzIiAvKiB2YWxpZGF0ZUluZGV4ICovXSkoaiwgdGhpcy5fc2l6ZVswXSk7IC8vIHN3YXAgcm93cwoKICAgIERlbnNlTWF0cml4Ll9zd2FwUm93cyhpLCBqLCB0aGlzLl9kYXRhKTsgLy8gcmV0dXJuIGN1cnJlbnQgaW5zdGFuY2UKCgogICAgcmV0dXJuIHRoaXM7CiAgfTsKICAvKioKICAgKiBTd2FwIHJvd3MgaSBhbmQgaiBpbiBEZW5zZSBNYXRyaXggZGF0YSBzdHJ1Y3R1cmUuCiAgICoKICAgKiBAcGFyYW0ge251bWJlcn0gaSAgICAgICBNYXRyaXggcm93IGluZGV4IDEKICAgKiBAcGFyYW0ge251bWJlcn0gaiAgICAgICBNYXRyaXggcm93IGluZGV4IDIKICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhICAgICBNYXRyaXggZGF0YQogICAqLwoKCiAgRGVuc2VNYXRyaXguX3N3YXBSb3dzID0gZnVuY3Rpb24gKGksIGosIGRhdGEpIHsKICAgIC8vIHN3YXAgdmFsdWVzIGkgPC0+IGoKICAgIHZhciB2aSA9IGRhdGFbaV07CiAgICBkYXRhW2ldID0gZGF0YVtqXTsKICAgIGRhdGFbal0gPSB2aTsKICB9OwogIC8qKgogICAqIFByZXByb2Nlc3MgZGF0YSwgd2hpY2ggY2FuIGJlIGFuIEFycmF5IG9yIERlbnNlTWF0cml4IHdpdGggbmVzdGVkIEFycmF5cyBhbmQKICAgKiBNYXRyaWNlcy4gUmVwbGFjZXMgYWxsIG5lc3RlZCBNYXRyaWNlcyB3aXRoIEFycmF5cwogICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeAogICAqIEBwYXJhbSB7QXJyYXl9IGRhdGEKICAgKiBAcmV0dXJuIHtBcnJheX0gZGF0YQogICAqLwoKCiAgZnVuY3Rpb24gcHJlcHJvY2VzcyhkYXRhKSB7CiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkYXRhLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgdmFyIGVsZW0gPSBkYXRhW2ldOwoKICAgICAgaWYgKE9iamVjdChpc1siYiIgLyogaXNBcnJheSAqL10pKGVsZW0pKSB7CiAgICAgICAgZGF0YVtpXSA9IHByZXByb2Nlc3MoZWxlbSk7CiAgICAgIH0gZWxzZSBpZiAoZWxlbSAmJiBlbGVtLmlzTWF0cml4ID09PSB0cnVlKSB7CiAgICAgICAgZGF0YVtpXSA9IHByZXByb2Nlc3MoZWxlbS52YWx1ZU9mKCkpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGRhdGE7CiAgfQoKICByZXR1cm4gRGVuc2VNYXRyaXg7Cn0sIHsKICBpc0NsYXNzOiB0cnVlCn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi91dGlscy9jbG9uZS5qcwoKCnZhciBjbG9uZV9uYW1lID0gJ2Nsb25lJzsKdmFyIGNsb25lX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnXTsKdmFyIGNyZWF0ZUNsb25lID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoY2xvbmVfbmFtZSwgY2xvbmVfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7CgogIC8qKgogICAqIENsb25lIGFuIG9iamVjdC4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBtYXRoLmNsb25lKHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguY2xvbmUoMy41KSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzLjUKICAgKiAgICBtYXRoLmNsb25lKG1hdGguY29tcGxleCgnMi00aScpIC8vIHJldHVybnMgQ29tcGxleCAyIC0gNGkKICAgKiAgICBtYXRoLmNsb25lKG1hdGgudW5pdCg0NSwgJ2RlZycpKSAgLy8gcmV0dXJucyBVbml0IDQ1IGRlZwogICAqICAgIG1hdGguY2xvbmUoW1sxLCAyXSwgWzMsIDRdXSkgICAgICAvLyByZXR1cm5zIEFycmF5IFtbMSwgMl0sIFszLCA0XV0KICAgKiAgICBtYXRoLmNsb25lKCJoZWxsbyB3b3JsZCIpICAgICAgICAgLy8gcmV0dXJucyBzdHJpbmcgImhlbGxvIHdvcmxkIgogICAqCiAgICogQHBhcmFtIHsqfSB4ICAgT2JqZWN0IHRvIGJlIGNsb25lZAogICAqIEByZXR1cm4geyp9IEEgY2xvbmUgb2Ygb2JqZWN0IHgKICAgKi8KICByZXR1cm4gdHlwZWQoY2xvbmVfbmFtZSwgewogICAgYW55OiB1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXQogIH0pOwp9KTsKLy8gRVhURVJOQUwgTU9EVUxFOiAuL3NyYy9lcnJvci9JbmRleEVycm9yLmpzCnZhciBJbmRleEVycm9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7CgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy91dGlscy9jb2xsZWN0aW9uLmpzCgoKCi8qKgogKiBUZXN0IHdoZXRoZXIgYW4gYXJyYXkgY29udGFpbnMgY29sbGVjdGlvbnMKICogQHBhcmFtIHtBcnJheX0gYXJyYXkKICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBhcnJheSBjb250YWlucyBvbmUgb3IgbXVsdGlwbGUKICogICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25zIChBcnJheXMgb3IgTWF0cmljZXMpLiBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZS4KICovCgpmdW5jdGlvbiBjb250YWluc0NvbGxlY3Rpb25zKGFycmF5KSB7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgewogICAgaWYgKE9iamVjdChpc1siaSIgLyogaXNDb2xsZWN0aW9uICovXSkoYXJyYXlbaV0pKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KCiAgcmV0dXJuIGZhbHNlOwp9Ci8qKgogKiBSZWN1cnNpdmVseSBsb29wIG92ZXIgYWxsIGVsZW1lbnRzIGluIGEgZ2l2ZW4gbXVsdGkgZGltZW5zaW9uYWwgYXJyYXkKICogYW5kIGludm9rZSB0aGUgY2FsbGJhY2sgb24gZWFjaCBvZiB0aGUgZWxlbWVudHMuCiAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IGFycmF5CiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICBUaGUgY2FsbGJhY2sgbWV0aG9kIGlzIGludm9rZWQgd2l0aCBvbmUKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcjogdGhlIGN1cnJlbnQgZWxlbWVudCBpbiB0aGUgYXJyYXkKICovCgpmdW5jdGlvbiBkZWVwRm9yRWFjaChhcnJheSwgY2FsbGJhY2spIHsKICBpZiAoT2JqZWN0KGlzWyJ2IiAvKiBpc01hdHJpeCAqL10pKGFycmF5KSkgewogICAgYXJyYXkgPSBhcnJheS52YWx1ZU9mKCk7CiAgfQoKICBmb3IgKHZhciBpID0gMCwgaWkgPSBhcnJheS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICB2YXIgdmFsdWUgPSBhcnJheVtpXTsKCiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgZGVlcEZvckVhY2godmFsdWUsIGNhbGxiYWNrKTsKICAgIH0gZWxzZSB7CiAgICAgIGNhbGxiYWNrKHZhbHVlKTsKICAgIH0KICB9Cn0KLyoqCiAqIEV4ZWN1dGUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGVsZW1lbnQgd2lzZSBmb3IgZWFjaCBlbGVtZW50IGluIGFycmF5IGFuZCBhbnkKICogbmVzdGVkIGFycmF5CiAqIFJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgcmVzdWx0cwogKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBhcnJheQogKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCB0d28gcGFyYW1ldGVyczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTEgYW5kIHZhbHVlMiwgd2hpY2ggY29udGFpbiB0aGUgY3VycmVudAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgb2YgYm90aCBhcnJheXMuCiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NraXBaZXJvc10gSW52b2tlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBub24temVybyB2YWx1ZXMgb25seS4KICoKICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9IHJlcwogKi8KCmZ1bmN0aW9uIGRlZXBNYXAoYXJyYXksIGNhbGxiYWNrLCBza2lwWmVyb3MpIHsKICBpZiAoYXJyYXkgJiYgdHlwZW9mIGFycmF5Lm1hcCA9PT0gJ2Z1bmN0aW9uJykgewogICAgLy8gVE9ETzogcmVwbGFjZSBhcnJheS5tYXAgd2l0aCBhIGZvciBsb29wIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UKICAgIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKHgpIHsKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgY2FsbGJhY2ssIHNraXBaZXJvcyk7CiAgICB9KTsKICB9IGVsc2UgewogICAgcmV0dXJuIGNhbGxiYWNrKGFycmF5KTsKICB9Cn0KLyoqCiAqIFJlZHVjZSBhIGdpdmVuIG1hdHJpeCBvciBhcnJheSB0byBhIG5ldyBtYXRyaXggb3IKICogYXJyYXkgd2l0aCBvbmUgbGVzcyBkaW1lbnNpb24sIGFwcGx5aW5nIHRoZSBnaXZlbgogKiBjYWxsYmFjayBpbiB0aGUgc2VsZWN0ZWQgZGltZW5zaW9uLgogKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBtYXQKICogQHBhcmFtIHtudW1iZXJ9IGRpbQogKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjawogKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gcmVzCiAqLwoKZnVuY3Rpb24gcmVkdWNlKG1hdCwgZGltLCBjYWxsYmFjaykgewogIHZhciBzaXplID0gQXJyYXkuaXNBcnJheShtYXQpID8gT2JqZWN0KHV0aWxzX2FycmF5WyJhIiAvKiBhcnJheVNpemUgKi9dKShtYXQpIDogbWF0LnNpemUoKTsKCiAgaWYgKGRpbSA8IDAgfHwgZGltID49IHNpemUubGVuZ3RoKSB7CiAgICAvLyBUT0RPOiB3b3VsZCBiZSBtb3JlIGNsZWFyIHdoZW4gdGhyb3dpbmcgYSBEaW1lbnNpb25FcnJvciBoZXJlCiAgICB0aHJvdyBuZXcgSW5kZXhFcnJvclsiYSIgLyogSW5kZXhFcnJvciAqL10oZGltLCBzaXplLmxlbmd0aCk7CiAgfQoKICBpZiAoT2JqZWN0KGlzWyJ2IiAvKiBpc01hdHJpeCAqL10pKG1hdCkpIHsKICAgIHJldHVybiBtYXQuY3JlYXRlKF9yZWR1Y2UobWF0LnZhbHVlT2YoKSwgZGltLCBjYWxsYmFjaykpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gX3JlZHVjZShtYXQsIGRpbSwgY2FsbGJhY2spOwogIH0KfQovKioKICogUmVjdXJzaXZlbHkgcmVkdWNlIGEgbWF0cml4CiAqIEBwYXJhbSB7QXJyYXl9IG1hdAogKiBAcGFyYW0ge251bWJlcn0gZGltCiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCiAqIEByZXR1cm5zIHtBcnJheX0gcmV0CiAqIEBwcml2YXRlCiAqLwoKZnVuY3Rpb24gX3JlZHVjZShtYXQsIGRpbSwgY2FsbGJhY2spIHsKICB2YXIgaSwgcmV0LCB2YWwsIHRyYW47CgogIGlmIChkaW0gPD0gMCkgewogICAgaWYgKCFBcnJheS5pc0FycmF5KG1hdFswXSkpIHsKICAgICAgdmFsID0gbWF0WzBdOwoKICAgICAgZm9yIChpID0gMTsgaSA8IG1hdC5sZW5ndGg7IGkrKykgewogICAgICAgIHZhbCA9IGNhbGxiYWNrKHZhbCwgbWF0W2ldKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHZhbDsKICAgIH0gZWxzZSB7CiAgICAgIHRyYW4gPSBfc3dpdGNoKG1hdCk7CiAgICAgIHJldCA9IFtdOwoKICAgICAgZm9yIChpID0gMDsgaSA8IHRyYW4ubGVuZ3RoOyBpKyspIHsKICAgICAgICByZXRbaV0gPSBfcmVkdWNlKHRyYW5baV0sIGRpbSAtIDEsIGNhbGxiYWNrKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHJldDsKICAgIH0KICB9IGVsc2UgewogICAgcmV0ID0gW107CgogICAgZm9yIChpID0gMDsgaSA8IG1hdC5sZW5ndGg7IGkrKykgewogICAgICByZXRbaV0gPSBfcmVkdWNlKG1hdFtpXSwgZGltIC0gMSwgY2FsbGJhY2spOwogICAgfQoKICAgIHJldHVybiByZXQ7CiAgfQp9Ci8qKgogKiBUcmFuc3Bvc2UgYSBtYXRyaXgKICogQHBhcmFtIHtBcnJheX0gbWF0CiAqIEByZXR1cm5zIHtBcnJheX0gcmV0CiAqIEBwcml2YXRlCiAqLwoKCmZ1bmN0aW9uIF9zd2l0Y2gobWF0KSB7CiAgdmFyIEkgPSBtYXQubGVuZ3RoOwogIHZhciBKID0gbWF0WzBdLmxlbmd0aDsKICB2YXIgaSwgajsKICB2YXIgcmV0ID0gW107CgogIGZvciAoaiA9IDA7IGogPCBKOyBqKyspIHsKICAgIHZhciB0bXAgPSBbXTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgSTsgaSsrKSB7CiAgICAgIHRtcC5wdXNoKG1hdFtpXVtqXSk7CiAgICB9CgogICAgcmV0LnB1c2godG1wKTsKICB9CgogIHJldHVybiByZXQ7Cn0gLy8gVE9ETzogZG9jdW1lbnQgZnVuY3Rpb24gc2NhdHRlcgoKCmZ1bmN0aW9uIHNjYXR0ZXIoYSwgaiwgdywgeCwgdSwgbWFyaywgY2luZGV4LCBmLCBpbnZlcnNlLCB1cGRhdGUsIHZhbHVlKSB7CiAgLy8gYSBhcnJheXMKICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlczsKICB2YXIgYWluZGV4ID0gYS5faW5kZXg7CiAgdmFyIGFwdHIgPSBhLl9wdHI7IC8vIHZhcnMKCiAgdmFyIGssIGswLCBrMSwgaTsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAocGF0dGVybiBtYXRyaXgpCgogIGlmICh4KSB7CiAgICAvLyB2YWx1ZXMgaW4gagogICAgZm9yIChrMCA9IGFwdHJbal0sIGsxID0gYXB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHsKICAgICAgLy8gcm93CiAgICAgIGkgPSBhaW5kZXhba107IC8vIGNoZWNrIHZhbHVlIGV4aXN0cyBpbiBjdXJyZW50IGoKCiAgICAgIGlmICh3W2ldICE9PSBtYXJrKSB7CiAgICAgICAgLy8gaSBpcyBuZXcgZW50cnkgaW4gagogICAgICAgIHdbaV0gPSBtYXJrOyAvLyBhZGQgaSB0byBwYXR0ZXJuIG9mIEMKCiAgICAgICAgY2luZGV4LnB1c2goaSk7IC8vIHgoaSkgPSBBLCBjaGVjayB3ZSBuZWVkIHRvIGNhbGwgZnVuY3Rpb24gdGhpcyB0aW1lCgogICAgICAgIGlmICh1cGRhdGUpIHsKICAgICAgICAgIC8vIGNvcHkgdmFsdWUgdG8gd29ya3NwYWNlIGNhbGxpbmcgY2FsbGJhY2sgZnVuY3Rpb24KICAgICAgICAgIHhbaV0gPSBpbnZlcnNlID8gZihhdmFsdWVzW2tdLCB2YWx1ZSkgOiBmKHZhbHVlLCBhdmFsdWVzW2tdKTsgLy8gZnVuY3Rpb24gd2FzIGNhbGxlZCBvbiBjdXJyZW50IHJvdwoKICAgICAgICAgIHVbaV0gPSBtYXJrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBjb3B5IHZhbHVlIHRvIHdvcmtzcGFjZQogICAgICAgICAgeFtpXSA9IGF2YWx1ZXNba107CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8vIGkgZXhpc3RzIGluIEMgYWxyZWFkeQogICAgICAgIHhbaV0gPSBpbnZlcnNlID8gZihhdmFsdWVzW2tdLCB4W2ldKSA6IGYoeFtpXSwgYXZhbHVlc1trXSk7IC8vIGZ1bmN0aW9uIHdhcyBjYWxsZWQgb24gY3VycmVudCByb3cKCiAgICAgICAgdVtpXSA9IG1hcms7CiAgICAgIH0KICAgIH0KICB9IGVsc2UgewogICAgLy8gdmFsdWVzIGluIGoKICAgIGZvciAoazAgPSBhcHRyW2pdLCBrMSA9IGFwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7CiAgICAgIC8vIHJvdwogICAgICBpID0gYWluZGV4W2tdOyAvLyBjaGVjayB2YWx1ZSBleGlzdHMgaW4gY3VycmVudCBqCgogICAgICBpZiAod1tpXSAhPT0gbWFyaykgewogICAgICAgIC8vIGkgaXMgbmV3IGVudHJ5IGluIGoKICAgICAgICB3W2ldID0gbWFyazsgLy8gYWRkIGkgdG8gcGF0dGVybiBvZiBDCgogICAgICAgIGNpbmRleC5wdXNoKGkpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIGluZGljYXRlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgb24gY3VycmVudCByb3cKICAgICAgICB1W2ldID0gbWFyazsKICAgICAgfQogICAgfQogIH0KfQovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi91dGlscy9pc0ludGVnZXIuanMKCgoKdmFyIGlzSW50ZWdlcl9uYW1lID0gJ2lzSW50ZWdlcic7CnZhciBpc0ludGVnZXJfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddOwp2YXIgY3JlYXRlSXNJbnRlZ2VyID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoaXNJbnRlZ2VyX25hbWUsIGlzSW50ZWdlcl9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDsKCiAgLyoqCiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYW4gaW50ZWdlciBudW1iZXIuCiAgICogVGhlIGZ1bmN0aW9uIHN1cHBvcnRzIGBudW1iZXJgLCBgQmlnTnVtYmVyYCwgYW5kIGBGcmFjdGlvbmAuCiAgICoKICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBtYXRoLmlzSW50ZWdlcih4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmlzSW50ZWdlcigyKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZQogICAqICAgIG1hdGguaXNJbnRlZ2VyKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlCiAgICogICAgbWF0aC5pc0ludGVnZXIoMC41KSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlCiAgICogICAgbWF0aC5pc0ludGVnZXIobWF0aC5iaWdudW1iZXIoNTAwKSkgICAvLyByZXR1cm5zIHRydWUKICAgKiAgICBtYXRoLmlzSW50ZWdlcihtYXRoLmZyYWN0aW9uKDQpKSAgICAgIC8vIHJldHVybnMgdHJ1ZQogICAqICAgIG1hdGguaXNJbnRlZ2VyKCczJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlCiAgICogICAgbWF0aC5pc0ludGVnZXIoWzMsIDAuNSwgLTJdKSAgICAgICAgICAvLyByZXR1cm5zIFt0cnVlLCBmYWxzZSwgdHJ1ZV0KICAgKiAgICBtYXRoLmlzSW50ZWdlcihtYXRoLmNvbXBsZXgoJzItNGknKSAgIC8vIHRocm93cyBhbiBlcnJvcgogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBpc051bWVyaWMsIGlzUG9zaXRpdmUsIGlzTmVnYXRpdmUsIGlzWmVybwogICAqCiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IEFycmF5IHwgTWF0cml4fSB4ICAgVmFsdWUgdG8gYmUgdGVzdGVkCiAgICogQHJldHVybiB7Ym9vbGVhbn0gIFJldHVybnMgdHJ1ZSB3aGVuIGB4YCBjb250YWlucyBhIG51bWVyaWMsIGludGVnZXIgdmFsdWUuCiAgICogICAgICAgICAgICAgICAgICAgIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIG9mIGFuIHVua25vd24gZGF0YSB0eXBlLgogICAqLwogIHZhciBpc0ludGVnZXIgPSB0eXBlZChpc0ludGVnZXJfbmFtZSwgewogICAgbnVtYmVyOiB1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10sCiAgICAvLyBUT0RPOiB3aGF0IHRvIGRvIHdpdGggaXNJbnRlZ2VyKGFkZCgwLjEsIDAuMikpICA/CiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiB4LmlzSW50KCk7CiAgICB9LAogICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHsKICAgICAgcmV0dXJuIHguZCA9PT0gMSAmJiBpc0Zpbml0ZSh4Lm4pOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgaXNJbnRlZ2VyKTsKICAgIH0KICB9KTsKICByZXR1cm4gaXNJbnRlZ2VyOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvcGxhaW4vbnVtYmVyL3V0aWxzLmpzCgp2YXIgdXRpbHNfbjEgPSAnbnVtYmVyJzsKZnVuY3Rpb24gaXNJbnRlZ2VyTnVtYmVyKHgpIHsKICByZXR1cm4gT2JqZWN0KHV0aWxzX251bWJlclsiaSIgLyogaXNJbnRlZ2VyICovXSkoeCk7Cn0KaXNJbnRlZ2VyTnVtYmVyLnNpZ25hdHVyZSA9IHV0aWxzX24xOwpmdW5jdGlvbiBpc05lZ2F0aXZlTnVtYmVyKHgpIHsKICByZXR1cm4geCA8IDA7Cn0KaXNOZWdhdGl2ZU51bWJlci5zaWduYXR1cmUgPSB1dGlsc19uMTsKZnVuY3Rpb24gaXNQb3NpdGl2ZU51bWJlcih4KSB7CiAgcmV0dXJuIHggPiAwOwp9CmlzUG9zaXRpdmVOdW1iZXIuc2lnbmF0dXJlID0gdXRpbHNfbjE7CmZ1bmN0aW9uIGlzWmVyb051bWJlcih4KSB7CiAgcmV0dXJuIHggPT09IDA7Cn0KaXNaZXJvTnVtYmVyLnNpZ25hdHVyZSA9IHV0aWxzX24xOwpmdW5jdGlvbiBpc05hTk51bWJlcih4KSB7CiAgcmV0dXJuIE51bWJlci5pc05hTih4KTsKfQppc05hTk51bWJlci5zaWduYXR1cmUgPSB1dGlsc19uMTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vdXRpbHMvaXNOZWdhdGl2ZS5qcwoKCgp2YXIgaXNOZWdhdGl2ZV9uYW1lID0gJ2lzTmVnYXRpdmUnOwp2YXIgaXNOZWdhdGl2ZV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107CnZhciBjcmVhdGVJc05lZ2F0aXZlID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoaXNOZWdhdGl2ZV9uYW1lLCBpc05lZ2F0aXZlX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkOwoKICAvKioKICAgKiBUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBuZWdhdGl2ZTogc21hbGxlciB0aGFuIHplcm8uCiAgICogVGhlIGZ1bmN0aW9uIHN1cHBvcnRzIHR5cGVzIGBudW1iZXJgLCBgQmlnTnVtYmVyYCwgYEZyYWN0aW9uYCwgYW5kIGBVbml0YC4KICAgKgogICAqIFRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudC13aXNlIGluIGNhc2Ugb2YgQXJyYXkgb3IgTWF0cml4IGlucHV0LgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIG1hdGguaXNOZWdhdGl2ZSh4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmlzTmVnYXRpdmUoMykgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlCiAgICogICAgbWF0aC5pc05lZ2F0aXZlKC0yKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlCiAgICogICAgbWF0aC5pc05lZ2F0aXZlKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZQogICAqICAgIG1hdGguaXNOZWdhdGl2ZSgtMCkgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2UKICAgKiAgICBtYXRoLmlzTmVnYXRpdmUobWF0aC5iaWdudW1iZXIoMikpICAgICAvLyByZXR1cm5zIGZhbHNlCiAgICogICAgbWF0aC5pc05lZ2F0aXZlKG1hdGguZnJhY3Rpb24oLTIsIDUpKSAgLy8gcmV0dXJucyB0cnVlCiAgICogICAgbWF0aC5pc05lZ2F0aXZlKCctMicpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlCiAgICogICAgbWF0aC5pc05lZ2F0aXZlKFsyLCAwLCAtM10nKSAgICAgICAgICAgLy8gcmV0dXJucyBbZmFsc2UsIGZhbHNlLCB0cnVlXQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBpc051bWVyaWMsIGlzUG9zaXRpdmUsIGlzWmVybywgaXNJbnRlZ2VyCiAgICoKICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBWYWx1ZSB0byBiZSB0ZXN0ZWQKICAgKiBAcmV0dXJuIHtib29sZWFufSAgUmV0dXJucyB0cnVlIHdoZW4gYHhgIGlzIGxhcmdlciB0aGFuIHplcm8uCiAgICogICAgICAgICAgICAgICAgICAgIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIG9mIGFuIHVua25vd24gZGF0YSB0eXBlLgogICAqLwogIHZhciBpc05lZ2F0aXZlID0gdHlwZWQoaXNOZWdhdGl2ZV9uYW1lLCB7CiAgICBudW1iZXI6IGlzTmVnYXRpdmVOdW1iZXIsCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiB4LmlzTmVnKCkgJiYgIXguaXNaZXJvKCkgJiYgIXguaXNOYU4oKTsKICAgIH0sCiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkgewogICAgICByZXR1cm4geC5zIDwgMDsgLy8gSXQncyBlbm91Z2ggdG8gZGVjaWRlIG9uIHRoZSBzaWduCiAgICB9LAogICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7CiAgICAgIHJldHVybiBpc05lZ2F0aXZlKHgudmFsdWUpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgaXNOZWdhdGl2ZSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGlzTmVnYXRpdmU7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi91dGlscy9pc051bWVyaWMuanMKCgp2YXIgaXNOdW1lcmljX25hbWUgPSAnaXNOdW1lcmljJzsKdmFyIGlzTnVtZXJpY19kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107CnZhciBjcmVhdGVJc051bWVyaWMgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShpc051bWVyaWNfbmFtZSwgaXNOdW1lcmljX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkOwoKICAvKioKICAgKiBUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBhbiBudW1lcmljIHZhbHVlLgogICAqCiAgICogVGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50LXdpc2UgaW4gY2FzZSBvZiBBcnJheSBvciBNYXRyaXggaW5wdXQuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICAgbWF0aC5pc051bWVyaWMoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5pc051bWVyaWMoMikgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWUKICAgKiAgICBtYXRoLmlzTnVtZXJpYygnMicpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2UKICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZSgnMicpICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZQogICAqICAgIG1hdGguaXNOdW1lcmljKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlCiAgICogICAgbWF0aC5pc051bWVyaWMobWF0aC5iaWdudW1iZXIoNTAwKSkgICAvLyByZXR1cm5zIHRydWUKICAgKiAgICBtYXRoLmlzTnVtZXJpYyhtYXRoLmZyYWN0aW9uKDQpKSAgICAgIC8vIHJldHVybnMgdHJ1ZQogICAqICAgIG1hdGguaXNOdW1lcmljKG1hdGguY29tcGxleCgnMi00aScpICAgLy8gcmV0dXJucyBmYWxzZQogICAqICAgIG1hdGguaXNOdW1lcmljKFsyLjMsICdmb28nLCBmYWxzZV0pICAgLy8gcmV0dXJucyBbdHJ1ZSwgZmFsc2UsIHRydWVdCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGlzWmVybywgaXNQb3NpdGl2ZSwgaXNOZWdhdGl2ZSwgaXNJbnRlZ2VyLCBoYXNOdW1lcmljVmFsdWUKICAgKgogICAqIEBwYXJhbSB7Kn0geCAgICAgICBWYWx1ZSB0byBiZSB0ZXN0ZWQKICAgKiBAcmV0dXJuIHtib29sZWFufSAgUmV0dXJucyB0cnVlIHdoZW4gYHhgIGlzIGEgYG51bWJlcmAsIGBCaWdOdW1iZXJgLAogICAqICAgICAgICAgICAgICAgICAgICBgRnJhY3Rpb25gLCBvciBgYm9vbGVhbmAuIFJldHVybnMgZmFsc2UgZm9yIG90aGVyIHR5cGVzLgogICAqICAgICAgICAgICAgICAgICAgICBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSBvZiB1bmtub3duIHR5cGVzLgogICAqLwogIHZhciBpc051bWVyaWMgPSB0eXBlZChpc051bWVyaWNfbmFtZSwgewogICAgJ251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbic6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckZyYWN0aW9uQm9vbGVhbigpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9LAogICAgJ0NvbXBsZXggfCBVbml0IHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCB8IE5vZGUnOiBmdW5jdGlvbiBDb21wbGV4VW5pdFN0cmluZ051bGxVbmRlZmluZWROb2RlKCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkgewogICAgICByZXR1cm4gZGVlcE1hcCh4LCBpc051bWVyaWMpOwogICAgfQogIH0pOwogIHJldHVybiBpc051bWVyaWM7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi91dGlscy9oYXNOdW1lcmljVmFsdWUuanMKCnZhciBoYXNOdW1lcmljVmFsdWVfbmFtZSA9ICdoYXNOdW1lcmljVmFsdWUnOwp2YXIgaGFzTnVtZXJpY1ZhbHVlX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnaXNOdW1lcmljJ107CnZhciBjcmVhdGVIYXNOdW1lcmljVmFsdWUgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShoYXNOdW1lcmljVmFsdWVfbmFtZSwgaGFzTnVtZXJpY1ZhbHVlX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBpc051bWVyaWMgPSBfcmVmLmlzTnVtZXJpYzsKCiAgLyoqCiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYW4gbnVtZXJpYyB2YWx1ZS4KICAgKgogICAqIEluIGNhc2Ugb2YgYSBzdHJpbmcsIHRydWUgaXMgcmV0dXJuZWQgaWYgdGhlIHN0cmluZyBjb250YWlucyBhIG51bWVyaWMgdmFsdWUuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICAgbWF0aC5oYXNOdW1lcmljVmFsdWUoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5oYXNOdW1lcmljVmFsdWUoMikgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWUKICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZSgnMicpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZQogICAqICAgIG1hdGguaXNOdW1lcmljKCcyJykgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZQogICAqICAgIG1hdGguaGFzTnVtZXJpY1ZhbHVlKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlCiAgICogICAgbWF0aC5oYXNOdW1lcmljVmFsdWUobWF0aC5iaWdudW1iZXIoNTAwKSkgICAvLyByZXR1cm5zIHRydWUKICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZShtYXRoLmZyYWN0aW9uKDQpKSAgICAgIC8vIHJldHVybnMgdHJ1ZQogICAqICAgIG1hdGguaGFzTnVtZXJpY1ZhbHVlKG1hdGguY29tcGxleCgnMi00aScpICAgLy8gcmV0dXJucyBmYWxzZQogICAqICAgIG1hdGguaGFzTnVtZXJpY1ZhbHVlKFsyLjMsICdmb28nLCBmYWxzZV0pICAgLy8gcmV0dXJucyBbdHJ1ZSwgZmFsc2UsIHRydWVdCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGlzWmVybywgaXNQb3NpdGl2ZSwgaXNOZWdhdGl2ZSwgaXNJbnRlZ2VyLCBpc051bWVyaWMKICAgKgogICAqIEBwYXJhbSB7Kn0geCAgICAgICBWYWx1ZSB0byBiZSB0ZXN0ZWQKICAgKiBAcmV0dXJuIHtib29sZWFufSAgUmV0dXJucyB0cnVlIHdoZW4gYHhgIGlzIGEgYG51bWJlcmAsIGBCaWdOdW1iZXJgLAogICAqICAgICAgICAgICAgICAgICAgICBgRnJhY3Rpb25gLCBgQm9vbGVhbmAsIG9yIGEgYFN0cmluZ2AgY29udGFpbmluZyBudW1iZXIuIFJldHVybnMgZmFsc2UgZm9yIG90aGVyIHR5cGVzLgogICAqICAgICAgICAgICAgICAgICAgICBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSBvZiB1bmtub3duIHR5cGVzLgogICAqLwogIHJldHVybiB0eXBlZChoYXNOdW1lcmljVmFsdWVfbmFtZSwgewogICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoeCkgewogICAgICByZXR1cm4geC50cmltKCkubGVuZ3RoID4gMCAmJiAhaXNOYU4oTnVtYmVyKHgpKTsKICAgIH0sCiAgICBhbnk6IGZ1bmN0aW9uIGFueSh4KSB7CiAgICAgIHJldHVybiBpc051bWVyaWMoeCk7CiAgICB9CiAgfSk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi91dGlscy9pc1Bvc2l0aXZlLmpzCgoKCnZhciBpc1Bvc2l0aXZlX25hbWUgPSAnaXNQb3NpdGl2ZSc7CnZhciBpc1Bvc2l0aXZlX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnXTsKdmFyIGNyZWF0ZUlzUG9zaXRpdmUgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShpc1Bvc2l0aXZlX25hbWUsIGlzUG9zaXRpdmVfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7CgogIC8qKgogICAqIFRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIHBvc2l0aXZlOiBsYXJnZXIgdGhhbiB6ZXJvLgogICAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyB0eXBlcyBgbnVtYmVyYCwgYEJpZ051bWJlcmAsIGBGcmFjdGlvbmAsIGFuZCBgVW5pdGAuCiAgICoKICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBtYXRoLmlzUG9zaXRpdmUoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5pc1Bvc2l0aXZlKDMpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlCiAgICogICAgbWF0aC5pc1Bvc2l0aXZlKC0yKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZQogICAqICAgIG1hdGguaXNQb3NpdGl2ZSgwKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2UKICAgKiAgICBtYXRoLmlzUG9zaXRpdmUoLTApICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlCiAgICogICAgbWF0aC5pc1Bvc2l0aXZlKDAuNSkgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlCiAgICogICAgbWF0aC5pc1Bvc2l0aXZlKG1hdGguYmlnbnVtYmVyKDIpKSAgICAgLy8gcmV0dXJucyB0cnVlCiAgICogICAgbWF0aC5pc1Bvc2l0aXZlKG1hdGguZnJhY3Rpb24oLTIsIDUpKSAgLy8gcmV0dXJucyBmYWxzZQogICAqICAgIG1hdGguaXNQb3NpdGl2ZShtYXRoLmZyYWN0aW9uKDEsMykpICAgIC8vIHJldHVybnMgZmFsc2UKICAgKiAgICBtYXRoLmlzUG9zaXRpdmUoJzInKSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWUKICAgKiAgICBtYXRoLmlzUG9zaXRpdmUoWzIsIDAsIC0zXSkgICAgICAgICAgICAvLyByZXR1cm5zIFt0cnVlLCBmYWxzZSwgZmFsc2VdCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGlzTnVtZXJpYywgaXNaZXJvLCBpc05lZ2F0aXZlLCBpc0ludGVnZXIKICAgKgogICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIFZhbHVlIHRvIGJlIHRlc3RlZAogICAqIEByZXR1cm4ge2Jvb2xlYW59ICBSZXR1cm5zIHRydWUgd2hlbiBgeGAgaXMgbGFyZ2VyIHRoYW4gemVyby4KICAgKiAgICAgICAgICAgICAgICAgICAgVGhyb3dzIGFuIGVycm9yIGluIGNhc2Ugb2YgYW4gdW5rbm93biBkYXRhIHR5cGUuCiAgICovCiAgdmFyIGlzUG9zaXRpdmUgPSB0eXBlZChpc1Bvc2l0aXZlX25hbWUsIHsKICAgIG51bWJlcjogaXNQb3NpdGl2ZU51bWJlciwKICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHsKICAgICAgcmV0dXJuICF4LmlzTmVnKCkgJiYgIXguaXNaZXJvKCkgJiYgIXguaXNOYU4oKTsKICAgIH0sCiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkgewogICAgICByZXR1cm4geC5zID4gMCAmJiB4Lm4gPiAwOwogICAgfSwKICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkgewogICAgICByZXR1cm4gaXNQb3NpdGl2ZSh4LnZhbHVlKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIHJldHVybiBkZWVwTWFwKHgsIGlzUG9zaXRpdmUpOwogICAgfQogIH0pOwogIHJldHVybiBpc1Bvc2l0aXZlOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vdXRpbHMvaXNaZXJvLmpzCgoKCnZhciBpc1plcm9fbmFtZSA9ICdpc1plcm8nOwp2YXIgaXNaZXJvX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnXTsKdmFyIGNyZWF0ZUlzWmVybyA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGlzWmVyb19uYW1lLCBpc1plcm9fZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7CgogIC8qKgogICAqIFRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIHplcm8uCiAgICogVGhlIGZ1bmN0aW9uIGNhbiBjaGVjayBmb3IgemVybyBmb3IgdHlwZXMgYG51bWJlcmAsIGBCaWdOdW1iZXJgLCBgRnJhY3Rpb25gLAogICAqIGBDb21wbGV4YCwgYW5kIGBVbml0YC4KICAgKgogICAqIFRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudC13aXNlIGluIGNhc2Ugb2YgQXJyYXkgb3IgTWF0cml4IGlucHV0LgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIG1hdGguaXNaZXJvKHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguaXNaZXJvKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlCiAgICogICAgbWF0aC5pc1plcm8oMikgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlCiAgICogICAgbWF0aC5pc1plcm8oMC41KSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlCiAgICogICAgbWF0aC5pc1plcm8obWF0aC5iaWdudW1iZXIoMCkpICAgICAvLyByZXR1cm5zIHRydWUKICAgKiAgICBtYXRoLmlzWmVybyhtYXRoLmZyYWN0aW9uKDApKSAgICAgIC8vIHJldHVybnMgdHJ1ZQogICAqICAgIG1hdGguaXNaZXJvKG1hdGguZnJhY3Rpb24oMSwzKSkgICAgLy8gcmV0dXJucyBmYWxzZQogICAqICAgIG1hdGguaXNaZXJvKG1hdGguY29tcGxleCgnMiAtIDRpJykgLy8gcmV0dXJucyBmYWxzZQogICAqICAgIG1hdGguaXNaZXJvKG1hdGguY29tcGxleCgnMGknKSAgICAgLy8gcmV0dXJucyB0cnVlCiAgICogICAgbWF0aC5pc1plcm8oJzAnKSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWUKICAgKiAgICBtYXRoLmlzWmVybygnMicpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2UKICAgKiAgICBtYXRoLmlzWmVybyhbMiwgMCwgLTNdJykgICAgICAgICAgIC8vIHJldHVybnMgW2ZhbHNlLCB0cnVlLCBmYWxzZV0KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgaXNOdW1lcmljLCBpc1Bvc2l0aXZlLCBpc05lZ2F0aXZlLCBpc0ludGVnZXIKICAgKgogICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEZyYWN0aW9uIHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICAgICAgIFZhbHVlIHRvIGJlIHRlc3RlZAogICAqIEByZXR1cm4ge2Jvb2xlYW59ICBSZXR1cm5zIHRydWUgd2hlbiBgeGAgaXMgemVyby4KICAgKiAgICAgICAgICAgICAgICAgICAgVGhyb3dzIGFuIGVycm9yIGluIGNhc2Ugb2YgYW4gdW5rbm93biBkYXRhIHR5cGUuCiAgICovCiAgdmFyIGlzWmVybyA9IHR5cGVkKGlzWmVyb19uYW1lLCB7CiAgICBudW1iZXI6IGlzWmVyb051bWJlciwKICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHsKICAgICAgcmV0dXJuIHguaXNaZXJvKCk7CiAgICB9LAogICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7CiAgICAgIHJldHVybiB4LnJlID09PSAwICYmIHguaW0gPT09IDA7CiAgICB9LAogICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHsKICAgICAgcmV0dXJuIHguZCA9PT0gMSAmJiB4Lm4gPT09IDA7CiAgICB9LAogICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7CiAgICAgIHJldHVybiBpc1plcm8oeC52YWx1ZSk7CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkgewogICAgICByZXR1cm4gZGVlcE1hcCh4LCBpc1plcm8pOwogICAgfQogIH0pOwogIHJldHVybiBpc1plcm87Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi91dGlscy9pc05hTi5qcwoKCgp2YXIgaXNOYU5fbmFtZSA9ICdpc05hTic7CnZhciBpc05hTl9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107CnZhciBjcmVhdGVJc05hTiA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGlzTmFOX25hbWUsIGlzTmFOX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkOwoKICAvKioKICAgKiBUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBOYU4gKG5vdCBhIG51bWJlcikuCiAgICogVGhlIGZ1bmN0aW9uIHN1cHBvcnRzIHR5cGVzIGBudW1iZXJgLCBgQmlnTnVtYmVyYCwgYEZyYWN0aW9uYCwgYFVuaXRgIGFuZCBgQ29tcGxleGAuCiAgICoKICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBtYXRoLmlzTmFOKHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguaXNOYU4oMykgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlCiAgICogICAgbWF0aC5pc05hTihOYU4pICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZQogICAqICAgIG1hdGguaXNOYU4oMCkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlCiAgICogICAgbWF0aC5pc05hTihtYXRoLmJpZ251bWJlcihOYU4pKSAgIC8vIHJldHVybnMgdHJ1ZQogICAqICAgIG1hdGguaXNOYU4obWF0aC5iaWdudW1iZXIoMCkpICAgICAvLyByZXR1cm5zIGZhbHNlCiAgICogICAgbWF0aC5pc05hTihtYXRoLmZyYWN0aW9uKC0yLCA1KSkgIC8vIHJldHVybnMgZmFsc2UKICAgKiAgICBtYXRoLmlzTmFOKCctMicpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZQogICAqICAgIG1hdGguaXNOYU4oWzIsIDAsIC0zLCBOYU5dJykgICAgICAvLyByZXR1cm5zIFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlXQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBpc051bWVyaWMsIGlzTmVnYXRpdmUsIGlzUG9zaXRpdmUsIGlzWmVybywgaXNJbnRlZ2VyCiAgICoKICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBWYWx1ZSB0byBiZSB0ZXN0ZWQKICAgKiBAcmV0dXJuIHtib29sZWFufSAgUmV0dXJucyB0cnVlIHdoZW4gYHhgIGlzIE5hTi4KICAgKiAgICAgICAgICAgICAgICAgICAgVGhyb3dzIGFuIGVycm9yIGluIGNhc2Ugb2YgYW4gdW5rbm93biBkYXRhIHR5cGUuCiAgICovCiAgcmV0dXJuIHR5cGVkKGlzTmFOX25hbWUsIHsKICAgIG51bWJlcjogaXNOYU5OdW1iZXIsCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiB4LmlzTmFOKCk7CiAgICB9LAogICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSwKICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkgewogICAgICByZXR1cm4geC5pc05hTigpOwogICAgfSwKICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkgewogICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKHgudmFsdWUpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgTnVtYmVyLmlzTmFOKTsKICAgIH0KICB9KTsKfSk7Ci8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvdXRpbHMvbG9nLmpzCnZhciB1dGlsc19sb2cgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpOwoKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vdXRpbHMvdHlwZU9mLmpzCgoKCnZhciB0eXBlT2ZfbmFtZSA9ICd0eXBlT2YnOwp2YXIgdHlwZU9mX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnXTsKdmFyIGNyZWF0ZVR5cGVPZiA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHR5cGVPZl9uYW1lLCB0eXBlT2ZfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7CgogIC8qKgogICAqIERldGVybWluZSB0aGUgdHlwZSBvZiBhIHZhcmlhYmxlLgogICAqCiAgICogRnVuY3Rpb24gYHR5cGVPZmAgcmVjb2duaXplcyB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIG9iamVjdHM6CiAgICoKICAgKiBPYmplY3QgICAgICAgICAgICAgICAgIHwgUmV0dXJucyAgICAgICB8IEV4YW1wbGUKICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAqIG51bGwgICAgICAgICAgICAgICAgICAgfCBgJ251bGwnYCAgICAgIHwgYG1hdGgudHlwZU9mKG51bGwpYAogICAqIG51bWJlciAgICAgICAgICAgICAgICAgfCBgJ251bWJlcidgICAgIHwgYG1hdGgudHlwZU9mKDMuNSlgCiAgICogYm9vbGVhbiAgICAgICAgICAgICAgICB8IGAnYm9vbGVhbidgICAgfCBgbWF0aC50eXBlT2YodHJ1ZSlgCiAgICogc3RyaW5nICAgICAgICAgICAgICAgICB8IGAnc3RyaW5nJ2AgICAgfCBgbWF0aC50eXBlT2YoJ2hlbGxvIHdvcmxkJylgCiAgICogQXJyYXkgICAgICAgICAgICAgICAgICB8IGAnQXJyYXknYCAgICAgfCBgbWF0aC50eXBlT2YoWzEsIDIsIDNdKWAKICAgKiBEYXRlICAgICAgICAgICAgICAgICAgIHwgYCdEYXRlJ2AgICAgICB8IGBtYXRoLnR5cGVPZihuZXcgRGF0ZSgpKWAKICAgKiBGdW5jdGlvbiAgICAgICAgICAgICAgIHwgYCdGdW5jdGlvbidgICB8IGBtYXRoLnR5cGVPZihmdW5jdGlvbiAoKSB7fSlgCiAgICogT2JqZWN0ICAgICAgICAgICAgICAgICB8IGAnT2JqZWN0J2AgICAgfCBgbWF0aC50eXBlT2Yoe2E6IDIsIGI6IDN9KWAKICAgKiBSZWdFeHAgICAgICAgICAgICAgICAgIHwgYCdSZWdFeHAnYCAgICB8IGBtYXRoLnR5cGVPZigvYSByZWdleHAvKWAKICAgKiB1bmRlZmluZWQgICAgICAgICAgICAgIHwgYCd1bmRlZmluZWQnYCB8IGBtYXRoLnR5cGVPZih1bmRlZmluZWQpYAogICAqIG1hdGguQmlnTnVtYmVyICAgICAgICAgfCBgJ0JpZ051bWJlcidgIHwgYG1hdGgudHlwZU9mKG1hdGguYmlnbnVtYmVyKCcyLjNlNTAwJykpYAogICAqIG1hdGguQ2hhaW4gICAgICAgICAgICAgfCBgJ0NoYWluJ2AgICAgIHwgYG1hdGgudHlwZU9mKG1hdGguY2hhaW4oMikpYAogICAqIG1hdGguQ29tcGxleCAgICAgICAgICAgfCBgJ0NvbXBsZXgnYCAgIHwgYG1hdGgudHlwZU9mKG1hdGguY29tcGxleCgyLCAzKSlgCiAgICogbWF0aC5GcmFjdGlvbiAgICAgICAgICB8IGAnRnJhY3Rpb24nYCAgfCBgbWF0aC50eXBlT2YobWF0aC5mcmFjdGlvbigxLCAzKSlgCiAgICogbWF0aC5IZWxwICAgICAgICAgICAgICB8IGAnSGVscCdgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5oZWxwKCdzcXJ0JykpYAogICAqIG1hdGguSGVscCAgICAgICAgICAgICAgfCBgJ0hlbHAnYCAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGguaGVscCgnc3FydCcpKWAKICAgKiBtYXRoLkluZGV4ICAgICAgICAgICAgIHwgYCdJbmRleCdgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLmluZGV4KDEsIDMpKWAKICAgKiBtYXRoLk1hdHJpeCAgICAgICAgICAgIHwgYCdNYXRyaXgnYCAgICB8IGBtYXRoLnR5cGVPZihtYXRoLm1hdHJpeChbWzEsMl0sIFszLCA0XV0pKWAKICAgKiBtYXRoLlJhbmdlICAgICAgICAgICAgIHwgYCdSYW5nZSdgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLnJhbmdlKDAsIDEwKSlgCiAgICogbWF0aC5SZXN1bHRTZXQgICAgICAgICB8IGAnUmVzdWx0U2V0J2AgfCBgbWF0aC50eXBlT2YobWF0aC5ldmFsdWF0ZSgnYT0yXG5iPTMnKSlgCiAgICogbWF0aC5Vbml0ICAgICAgICAgICAgICB8IGAnVW5pdCdgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC51bml0KCc0NSBkZWcnKSlgCiAgICogbWF0aC5BY2Nlc3Nvck5vZGUgICAgICAgICAgICB8IGAnQWNjZXNzb3JOb2RlJ2AgICAgICAgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCdBWzJdJykpYAogICAqIG1hdGguQXJyYXlOb2RlICAgICAgICAgICAgICAgfCBgJ0FycmF5Tm9kZSdgICAgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnWzEsMiwzXScpKWAKICAgKiBtYXRoLkFzc2lnbm1lbnROb2RlICAgICAgICAgIHwgYCdBc3NpZ25tZW50Tm9kZSdgICAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJ3g9MicpKWAKICAgKiBtYXRoLkJsb2NrTm9kZSAgICAgICAgICAgICAgIHwgYCdCbG9ja05vZGUnYCAgICAgICAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJ2E9MjsgYj0zJykpYAogICAqIG1hdGguQ29uZGl0aW9uYWxOb2RlICAgICAgICAgfCBgJ0NvbmRpdGlvbmFsTm9kZSdgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgneDwwID8gLXggOiB4JykpYAogICAqIG1hdGguQ29uc3RhbnROb2RlICAgICAgICAgICAgfCBgJ0NvbnN0YW50Tm9kZSdgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnMi4zJykpYAogICAqIG1hdGguRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSAgfCBgJ0Z1bmN0aW9uQXNzaWdubWVudE5vZGUnYCAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnZih4KT14XjInKSlgCiAgICogbWF0aC5GdW5jdGlvbk5vZGUgICAgICAgICAgICB8IGAnRnVuY3Rpb25Ob2RlJ2AgICAgICAgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCdzcXJ0KDQpJykpYAogICAqIG1hdGguSW5kZXhOb2RlICAgICAgICAgICAgICAgfCBgJ0luZGV4Tm9kZSdgICAgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnQVsyXScpLmluZGV4KWAKICAgKiBtYXRoLk9iamVjdE5vZGUgICAgICAgICAgICAgIHwgYCdPYmplY3ROb2RlJ2AgICAgICAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJ3thOjJ9JykpYAogICAqIG1hdGguUGFyZW50aGVzaXNOb2RlICAgICAgICAgfCBgJ1BhcmVudGhlc2lzTm9kZSdgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnKDIrMyknKSlgCiAgICogbWF0aC5SYW5nZU5vZGUgICAgICAgICAgICAgICB8IGAnUmFuZ2VOb2RlJ2AgICAgICAgICAgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCcxOjEwJykpYAogICAqIG1hdGguU3ltYm9sTm9kZSAgICAgICAgICAgICAgfCBgJ1N5bWJvbE5vZGUnYCAgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgneCcpKWAKICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGgudHlwZU9mKHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGgudHlwZU9mKDMuNSkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zICdudW1iZXInCiAgICogICAgbWF0aC50eXBlT2YobWF0aC5jb21wbGV4KCcyLTRpJykpICAgIC8vIHJldHVybnMgJ0NvbXBsZXgnCiAgICogICAgbWF0aC50eXBlT2YobWF0aC51bml0KCc0NSBkZWcnKSkgICAgIC8vIHJldHVybnMgJ1VuaXQnCiAgICogICAgbWF0aC50eXBlT2YoJ2hlbGxvIHdvcmxkJykgICAgICAgICAgIC8vIHJldHVybnMgJ3N0cmluZycKICAgKgogICAqIEBwYXJhbSB7Kn0geCAgICAgVGhlIHZhcmlhYmxlIGZvciB3aGljaCB0byB0ZXN0IHRoZSB0eXBlLgogICAqIEByZXR1cm4ge3N0cmluZ30gUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgdHlwZS4gUHJpbWl0aXZlIHR5cGVzIGFyZSBsb3dlciBjYXNlLAogICAqICAgICAgICAgICAgICAgICAgbm9uLXByaW1pdGl2ZSB0eXBlcyBhcmUgdXBwZXItY2FtZWwtY2FzZS4KICAgKiAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlICdudW1iZXInLCAnc3RyaW5nJywgJ0FycmF5JywgJ0RhdGUnLgogICAqLwogIHJldHVybiB0eXBlZCh0eXBlT2ZfbmFtZSwgewogICAgYW55OiBpc1siTSIgLyogdHlwZU9mICovXQogIH0pOwp9KTsgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA2LjAuMC4gRGF0ZTogMjAxOC0xMS0wNgoKdmFyIGNyZWF0ZURlcHJlY2F0ZWRUeXBlb2YgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKSgndHlwZW9mJywgW10sIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gZnVuY3Rpb24gKCkgewogICAgT2JqZWN0KHV0aWxzX2xvZ1siYSIgLyogd2Fybk9uY2UgKi9dKSgnRnVuY3Rpb24gInR5cGVvZiIgaGFzIGJlZW4gcmVuYW1lZCB0byAidHlwZU9mIiBpbiB2Ni4wLjAsIHBsZWFzZSB1c2UgdGhlIG5ldyBmdW5jdGlvbiBpbnN0ZWFkLicpOwoKICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykgewogICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldOwogICAgfQoKICAgIHJldHVybiBpc1siTSIgLyogdHlwZU9mICovXS5hcHBseShpc1siTSIgLyogdHlwZU9mICovXSwgYXJncyk7CiAgfTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3V0aWxzL2JpZ251bWJlci9uZWFybHlFcXVhbC5qcwovKioKICogQ29tcGFyZXMgdHdvIEJpZ051bWJlcnMuCiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB4ICAgICAgIEZpcnN0IHZhbHVlIHRvIGNvbXBhcmUKICogQHBhcmFtIHtCaWdOdW1iZXJ9IHkgICAgICAgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmUKICogQHBhcmFtIHtudW1iZXJ9IFtlcHNpbG9uXSAgVGhlIG1heGltdW0gcmVsYXRpdmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHkKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgZXBzaWxvbiBpcyB1bmRlZmluZWQgb3IgbnVsbCwgdGhlIGZ1bmN0aW9uIHdpbGwKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCB3aGV0aGVyIHggYW5kIHkgYXJlIGV4YWN0bHkgZXF1YWwuCiAqIEByZXR1cm4ge2Jvb2xlYW59IHdoZXRoZXIgdGhlIHR3byBudW1iZXJzIGFyZSBuZWFybHkgZXF1YWwKICovCmZ1bmN0aW9uIG5lYXJseUVxdWFsKHgsIHksIGVwc2lsb24pIHsKICAvLyBpZiBlcHNpbG9uIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0ZXN0IHdoZXRoZXIgeCBhbmQgeSBhcmUgZXhhY3RseSBlcXVhbAogIGlmIChlcHNpbG9uID09PSBudWxsIHx8IGVwc2lsb24gPT09IHVuZGVmaW5lZCkgewogICAgcmV0dXJuIHguZXEoeSk7CiAgfSAvLyB1c2UgIj09IiBvcGVyYXRvciwgaGFuZGxlcyBpbmZpbml0aWVzCgoKICBpZiAoeC5lcSh5KSkgewogICAgcmV0dXJuIHRydWU7CiAgfSAvLyBOYU4KCgogIGlmICh4LmlzTmFOKCkgfHwgeS5pc05hTigpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfSAvLyBhdCB0aGlzIHBvaW50IHggYW5kIHkgc2hvdWxkIGJlIGZpbml0ZQoKCiAgaWYgKHguaXNGaW5pdGUoKSAmJiB5LmlzRmluaXRlKCkpIHsKICAgIC8vIGNoZWNrIG51bWJlcnMgYXJlIHZlcnkgY2xvc2UsIG5lZWRlZCB3aGVuIGNvbXBhcmluZyBudW1iZXJzIG5lYXIgemVybwogICAgdmFyIGRpZmYgPSB4Lm1pbnVzKHkpLmFicygpOwoKICAgIGlmIChkaWZmLmlzWmVybygpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgLy8gdXNlIHJlbGF0aXZlIGVycm9yCiAgICAgIHZhciBtYXggPSB4LmNvbnN0cnVjdG9yLm1heCh4LmFicygpLCB5LmFicygpKTsKICAgICAgcmV0dXJuIGRpZmYubHRlKG1heC50aW1lcyhlcHNpbG9uKSk7CiAgICB9CiAgfSAvLyBJbmZpbml0ZSBhbmQgTnVtYmVyIG9yIG5lZ2F0aXZlIEluZmluaXRlIGFuZCBwb3NpdGl2ZSBJbmZpbml0ZSBjYXNlcwoKCiAgcmV0dXJuIGZhbHNlOwp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3V0aWxzL2NvbXBsZXguanMKCi8qKgogKiBUZXN0IHdoZXRoZXIgdHdvIGNvbXBsZXggdmFsdWVzIGFyZSBlcXVhbCBwcm92aWRlZCBhIGdpdmVuIGVwc2lsb24uCiAqIERvZXMgbm90IHVzZSBvciBjaGFuZ2UgdGhlIGdsb2JhbCBDb21wbGV4LkVQU0lMT04gc2V0dGluZwogKiBAcGFyYW0ge0NvbXBsZXh9IHgKICogQHBhcmFtIHtDb21wbGV4fSB5CiAqIEBwYXJhbSB7bnVtYmVyfSBlcHNpbG9uCiAqIEByZXR1cm5zIHtib29sZWFufQogKi8KCmZ1bmN0aW9uIGNvbXBsZXhFcXVhbHMoeCwgeSwgZXBzaWxvbikgewogIHJldHVybiBPYmplY3QodXRpbHNfbnVtYmVyWyJtIiAvKiBuZWFybHlFcXVhbCAqL10pKHgucmUsIHkucmUsIGVwc2lsb24pICYmIE9iamVjdCh1dGlsc19udW1iZXJbIm0iIC8qIG5lYXJseUVxdWFsICovXSkoeC5pbSwgeS5pbSwgZXBzaWxvbik7Cn0KLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbFNjYWxhci5qcwoKCgoKdmFyIGVxdWFsU2NhbGFyX25hbWUgPSAnZXF1YWxTY2FsYXInOwp2YXIgZXF1YWxTY2FsYXJfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnXTsKdmFyIGNyZWF0ZUVxdWFsU2NhbGFyID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoZXF1YWxTY2FsYXJfbmFtZSwgZXF1YWxTY2FsYXJfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnOwoKICAvKioKICAgKiBUZXN0IHdoZXRoZXIgdHdvIHNjYWxhciB2YWx1ZXMgYXJlIG5lYXJseSBlcXVhbC4KICAgKgogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbiB8IENvbXBsZXggfCBVbml0fSB4ICAgRmlyc3QgdmFsdWUgdG8gY29tcGFyZQogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbiB8IENvbXBsZXh9IHkgICAgICAgICAgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmUKICAgKiBAcmV0dXJuIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0cnVlIHdoZW4gdGhlIGNvbXBhcmVkIHZhbHVlcyBhcmUgZXF1YWwsIGVsc2UgcmV0dXJucyBmYWxzZQogICAqIEBwcml2YXRlCiAgICovCiAgdmFyIGVxdWFsU2NhbGFyID0gdHlwZWQoZXF1YWxTY2FsYXJfbmFtZSwgewogICAgJ2Jvb2xlYW4sIGJvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuQm9vbGVhbih4LCB5KSB7CiAgICAgIHJldHVybiB4ID09PSB5OwogICAgfSwKICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7CiAgICAgIHJldHVybiBPYmplY3QodXRpbHNfbnVtYmVyWyJtIiAvKiBuZWFybHlFcXVhbCAqL10pKHgsIHksIGNvbmZpZy5lcHNpbG9uKTsKICAgIH0sCiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkgewogICAgICByZXR1cm4geC5lcSh5KSB8fCBuZWFybHlFcXVhbCh4LCB5LCBjb25maWcuZXBzaWxvbik7CiAgICB9LAogICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkgewogICAgICByZXR1cm4geC5lcXVhbHMoeSk7CiAgICB9LAogICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7CiAgICAgIHJldHVybiBjb21wbGV4RXF1YWxzKHgsIHksIGNvbmZpZy5lcHNpbG9uKTsKICAgIH0sCiAgICAnVW5pdCwgVW5pdCc6IGZ1bmN0aW9uIFVuaXRVbml0KHgsIHkpIHsKICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBhcmUgdW5pdHMgd2l0aCBkaWZmZXJlbnQgYmFzZScpOwogICAgICB9CgogICAgICByZXR1cm4gZXF1YWxTY2FsYXIoeC52YWx1ZSwgeS52YWx1ZSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGVxdWFsU2NhbGFyOwp9KTsKdmFyIGNyZWF0ZUVxdWFsU2NhbGFyTnVtYmVyID0gT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShlcXVhbFNjYWxhcl9uYW1lLCBbJ3R5cGVkJywgJ2NvbmZpZyddLCBmdW5jdGlvbiAoX3JlZjIpIHsKICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCwKICAgICAgY29uZmlnID0gX3JlZjIuY29uZmlnOwogIHJldHVybiB0eXBlZChlcXVhbFNjYWxhcl9uYW1lLCB7CiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkgewogICAgICByZXR1cm4gT2JqZWN0KHV0aWxzX251bWJlclsibSIgLyogbmVhcmx5RXF1YWwgKi9dKSh4LCB5LCBjb25maWcuZXBzaWxvbik7CiAgICB9CiAgfSk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy90eXBlL21hdHJpeC9TcGFyc2VNYXRyaXguanMKCgoKCgoKCnZhciBTcGFyc2VNYXRyaXhfbmFtZSA9ICdTcGFyc2VNYXRyaXgnOwp2YXIgU3BhcnNlTWF0cml4X2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZXF1YWxTY2FsYXInLCAnTWF0cml4J107CnZhciBjcmVhdGVTcGFyc2VNYXRyaXhDbGFzcyA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKFNwYXJzZU1hdHJpeF9uYW1lLCBTcGFyc2VNYXRyaXhfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhciwKICAgICAgTWF0cml4ID0gX3JlZi5NYXRyaXg7CgogIC8qKgogICAqIFNwYXJzZSBNYXRyaXggaW1wbGVtZW50YXRpb24uIFRoaXMgdHlwZSBpbXBsZW1lbnRzIGEgQ29tcHJlc3NlZCBDb2x1bW4gU3RvcmFnZSBmb3JtYXQKICAgKiBmb3Igc3BhcnNlIG1hdHJpY2VzLgogICAqIEBjbGFzcyBTcGFyc2VNYXRyaXgKICAgKi8KICBmdW5jdGlvbiBTcGFyc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpIHsKICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTcGFyc2VNYXRyaXgpKSB7CiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7CiAgICB9CgogICAgaWYgKGRhdGF0eXBlICYmICFPYmplY3QoaXNbIkkiIC8qIGlzU3RyaW5nICovXSkoZGF0YXR5cGUpKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRhdHlwZTogJyArIGRhdGF0eXBlKTsKICAgIH0KCiAgICBpZiAoT2JqZWN0KGlzWyJ2IiAvKiBpc01hdHJpeCAqL10pKGRhdGEpKSB7CiAgICAgIC8vIGNyZWF0ZSBmcm9tIG1hdHJpeAogICAgICBfY3JlYXRlRnJvbU1hdHJpeCh0aGlzLCBkYXRhLCBkYXRhdHlwZSk7CiAgICB9IGVsc2UgaWYgKGRhdGEgJiYgT2JqZWN0KGlzWyJiIiAvKiBpc0FycmF5ICovXSkoZGF0YS5pbmRleCkgJiYgT2JqZWN0KGlzWyJiIiAvKiBpc0FycmF5ICovXSkoZGF0YS5wdHIpICYmIE9iamVjdChpc1siYiIgLyogaXNBcnJheSAqL10pKGRhdGEuc2l6ZSkpIHsKICAgICAgLy8gaW5pdGlhbGl6ZSBmaWVsZHMKICAgICAgdGhpcy5fdmFsdWVzID0gZGF0YS52YWx1ZXM7CiAgICAgIHRoaXMuX2luZGV4ID0gZGF0YS5pbmRleDsKICAgICAgdGhpcy5fcHRyID0gZGF0YS5wdHI7CiAgICAgIHRoaXMuX3NpemUgPSBkYXRhLnNpemU7CiAgICAgIHRoaXMuX2RhdGF0eXBlID0gZGF0YXR5cGUgfHwgZGF0YS5kYXRhdHlwZTsKICAgIH0gZWxzZSBpZiAoT2JqZWN0KGlzWyJiIiAvKiBpc0FycmF5ICovXSkoZGF0YSkpIHsKICAgICAgLy8gY3JlYXRlIGZyb20gYXJyYXkKICAgICAgX2NyZWF0ZUZyb21BcnJheSh0aGlzLCBkYXRhLCBkYXRhdHlwZSk7CiAgICB9IGVsc2UgaWYgKGRhdGEpIHsKICAgICAgLy8gdW5zdXBwb3J0ZWQgdHlwZQogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIGRhdGEgKCcgKyBPYmplY3QoaXNbIk0iIC8qIHR5cGVPZiAqL10pKGRhdGEpICsgJyknKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIG5vdGhpbmcgcHJvdmlkZWQKICAgICAgdGhpcy5fdmFsdWVzID0gW107CiAgICAgIHRoaXMuX2luZGV4ID0gW107CiAgICAgIHRoaXMuX3B0ciA9IFswXTsKICAgICAgdGhpcy5fc2l6ZSA9IFswLCAwXTsKICAgICAgdGhpcy5fZGF0YXR5cGUgPSBkYXRhdHlwZTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIF9jcmVhdGVGcm9tTWF0cml4KG1hdHJpeCwgc291cmNlLCBkYXRhdHlwZSkgewogICAgLy8gY2hlY2sgbWF0cml4IHR5cGUKICAgIGlmIChzb3VyY2UudHlwZSA9PT0gJ1NwYXJzZU1hdHJpeCcpIHsKICAgICAgLy8gY2xvbmUgYXJyYXlzCiAgICAgIG1hdHJpeC5fdmFsdWVzID0gc291cmNlLl92YWx1ZXMgPyBPYmplY3QodXRpbHNfb2JqZWN0WyJhIiAvKiBjbG9uZSAqL10pKHNvdXJjZS5fdmFsdWVzKSA6IHVuZGVmaW5lZDsKICAgICAgbWF0cml4Ll9pbmRleCA9IE9iamVjdCh1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSkoc291cmNlLl9pbmRleCk7CiAgICAgIG1hdHJpeC5fcHRyID0gT2JqZWN0KHV0aWxzX29iamVjdFsiYSIgLyogY2xvbmUgKi9dKShzb3VyY2UuX3B0cik7CiAgICAgIG1hdHJpeC5fc2l6ZSA9IE9iamVjdCh1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSkoc291cmNlLl9zaXplKTsKICAgICAgbWF0cml4Ll9kYXRhdHlwZSA9IGRhdGF0eXBlIHx8IHNvdXJjZS5fZGF0YXR5cGU7CiAgICB9IGVsc2UgewogICAgICAvLyBidWlsZCBmcm9tIG1hdHJpeCBkYXRhCiAgICAgIF9jcmVhdGVGcm9tQXJyYXkobWF0cml4LCBzb3VyY2UudmFsdWVPZigpLCBkYXRhdHlwZSB8fCBzb3VyY2UuX2RhdGF0eXBlKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIF9jcmVhdGVGcm9tQXJyYXkobWF0cml4LCBkYXRhLCBkYXRhdHlwZSkgewogICAgLy8gaW5pdGlhbGl6ZSBmaWVsZHMKICAgIG1hdHJpeC5fdmFsdWVzID0gW107CiAgICBtYXRyaXguX2luZGV4ID0gW107CiAgICBtYXRyaXguX3B0ciA9IFtdOwogICAgbWF0cml4Ll9kYXRhdHlwZSA9IGRhdGF0eXBlOyAvLyBkaXNjb3ZlciByb3dzICYgY29sdW1ucywgZG8gbm90IHVzZSBtYXRoLnNpemUoKSB0byBhdm9pZCBsb29waW5nIGFycmF5IHR3aWNlCgogICAgdmFyIHJvd3MgPSBkYXRhLmxlbmd0aDsKICAgIHZhciBjb2x1bW5zID0gMDsgLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZQoKICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlCgogICAgdmFyIHplcm8gPSAwOwoKICAgIGlmIChPYmplY3QoaXNbIkkiIC8qIGlzU3RyaW5nICovXSkoZGF0YXR5cGUpKSB7CiAgICAgIC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZGF0YXR5cGUsIGRhdGF0eXBlKQogICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkYXRhdHlwZSwgZGF0YXR5cGVdKSB8fCBlcXVhbFNjYWxhcjsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlCgogICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkYXRhdHlwZSk7CiAgICB9IC8vIGNoZWNrIHdlIGhhdmUgcm93cyAoZW1wdHkgYXJyYXkpCgoKICAgIGlmIChyb3dzID4gMCkgewogICAgICAvLyBjb2x1bW4gaW5kZXgKICAgICAgdmFyIGogPSAwOwoKICAgICAgZG8gewogICAgICAgIC8vIHN0b3JlIHBvaW50ZXIgdG8gdmFsdWVzIGluZGV4CiAgICAgICAgbWF0cml4Ll9wdHIucHVzaChtYXRyaXguX2luZGV4Lmxlbmd0aCk7IC8vIGxvb3Agcm93cwoKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspIHsKICAgICAgICAgIC8vIGN1cnJlbnQgcm93CiAgICAgICAgICB2YXIgcm93ID0gZGF0YVtpXTsgLy8gY2hlY2sgcm93IGlzIGFuIGFycmF5CgogICAgICAgICAgaWYgKE9iamVjdChpc1siYiIgLyogaXNBcnJheSAqL10pKHJvdykpIHsKICAgICAgICAgICAgLy8gdXBkYXRlIGNvbHVtbnMgaWYgbmVlZGVkIChvbmx5IG9uIGZpcnN0IGNvbHVtbikKICAgICAgICAgICAgaWYgKGogPT09IDAgJiYgY29sdW1ucyA8IHJvdy5sZW5ndGgpIHsKICAgICAgICAgICAgICBjb2x1bW5zID0gcm93Lmxlbmd0aDsKICAgICAgICAgICAgfSAvLyBjaGVjayByb3cgaGFzIGNvbHVtbgoKCiAgICAgICAgICAgIGlmIChqIDwgcm93Lmxlbmd0aCkgewogICAgICAgICAgICAgIC8vIHZhbHVlCiAgICAgICAgICAgICAgdmFyIHYgPSByb3dbal07IC8vIGNoZWNrIHZhbHVlICE9IDAKCiAgICAgICAgICAgICAgaWYgKCFlcSh2LCB6ZXJvKSkgewogICAgICAgICAgICAgICAgLy8gc3RvcmUgdmFsdWUKICAgICAgICAgICAgICAgIG1hdHJpeC5fdmFsdWVzLnB1c2godik7IC8vIGluZGV4CgoKICAgICAgICAgICAgICAgIG1hdHJpeC5faW5kZXgucHVzaChpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIHVwZGF0ZSBjb2x1bW5zIGlmIG5lZWRlZCAob25seSBvbiBmaXJzdCBjb2x1bW4pCiAgICAgICAgICAgIGlmIChqID09PSAwICYmIGNvbHVtbnMgPCAxKSB7CiAgICAgICAgICAgICAgY29sdW1ucyA9IDE7CiAgICAgICAgICAgIH0gLy8gY2hlY2sgdmFsdWUgIT0gMCAocm93IGlzIGEgc2NhbGFyKQoKCiAgICAgICAgICAgIGlmICghZXEocm93LCB6ZXJvKSkgewogICAgICAgICAgICAgIC8vIHN0b3JlIHZhbHVlCiAgICAgICAgICAgICAgbWF0cml4Ll92YWx1ZXMucHVzaChyb3cpOyAvLyBpbmRleAoKCiAgICAgICAgICAgICAgbWF0cml4Ll9pbmRleC5wdXNoKGkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSAvLyBpbmNyZW1lbnQgaW5kZXgKCgogICAgICAgIGorKzsKICAgICAgfSB3aGlsZSAoaiA8IGNvbHVtbnMpOwogICAgfSAvLyBzdG9yZSBudW1iZXIgb2YgdmFsdWVzIGluIHB0cgoKCiAgICBtYXRyaXguX3B0ci5wdXNoKG1hdHJpeC5faW5kZXgubGVuZ3RoKTsgLy8gc2l6ZQoKCiAgICBtYXRyaXguX3NpemUgPSBbcm93cywgY29sdW1uc107CiAgfQoKICBTcGFyc2VNYXRyaXgucHJvdG90eXBlID0gbmV3IE1hdHJpeCgpOwogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBTcGFyc2VNYXRyaXgKICAgKi8KCiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5jcmVhdGVTcGFyc2VNYXRyaXggPSBmdW5jdGlvbiAoZGF0YSwgZGF0YXR5cGUpIHsKICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTsKICB9OwogIC8qKgogICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uCiAgICovCgoKICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLnR5cGUgPSAnU3BhcnNlTWF0cml4JzsKICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmlzU3BhcnNlTWF0cml4ID0gdHJ1ZTsKICAvKioKICAgKiBHZXQgdGhlIG1hdHJpeCB0eXBlCiAgICoKICAgKiBVc2FnZToKICAgKiAgICBjb25zdCBtYXRyaXhUeXBlID0gbWF0cml4LmdldERhdGFUeXBlKCkgIC8vIHJldHJpZXZlcyB0aGUgbWF0cml4IHR5cGUKICAgKgogICAqIEBtZW1iZXJPZiBTcGFyc2VNYXRyaXgKICAgKiBAcmV0dXJuIHtzdHJpbmd9ICAgdHlwZSBpbmZvcm1hdGlvbjsgaWYgbXVsdGlwbGUgdHlwZXMgYXJlIGZvdW5kIGZyb20gdGhlIE1hdHJpeCwgaXQgd2lsbCByZXR1cm4gIm1peGVkIgogICAqLwoKICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmdldERhdGFUeXBlID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIE9iamVjdCh1dGlsc19hcnJheVsiaCIgLyogZ2V0QXJyYXlEYXRhVHlwZSAqL10pKHRoaXMuX3ZhbHVlcywgaXNbIk0iIC8qIHR5cGVPZiAqL10pOwogIH07CiAgLyoqCiAgICogR2V0IHRoZSBzdG9yYWdlIGZvcm1hdCB1c2VkIGJ5IHRoZSBtYXRyaXguCiAgICoKICAgKiBVc2FnZToKICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LnN0b3JhZ2UoKSAgIC8vIHJldHJpZXZlIHN0b3JhZ2UgZm9ybWF0CiAgICoKICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4CiAgICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgVGhlIHN0b3JhZ2UgZm9ybWF0LgogICAqLwoKCiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5zdG9yYWdlID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuICdzcGFyc2UnOwogIH07CiAgLyoqCiAgICogR2V0IHRoZSBkYXRhdHlwZSBvZiB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIG1hdHJpeC4KICAgKgogICAqIFVzYWdlOgogICAqICAgICBjb25zdCBmb3JtYXQgPSBtYXRyaXguZGF0YXR5cGUoKSAgICAvLyByZXRyaWV2ZSBtYXRyaXggZGF0YXR5cGUKICAgKgogICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXgKICAgKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICBUaGUgZGF0YXR5cGUuCiAgICovCgoKICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmRhdGF0eXBlID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHRoaXMuX2RhdGF0eXBlOwogIH07CiAgLyoqCiAgICogQ3JlYXRlIGEgbmV3IFNwYXJzZU1hdHJpeAogICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXgKICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhCiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhdHlwZV0KICAgKi8KCgogIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24gKGRhdGEsIGRhdGF0eXBlKSB7CiAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChkYXRhLCBkYXRhdHlwZSk7CiAgfTsKICAvKioKICAgKiBHZXQgdGhlIG1hdHJpeCBkZW5zaXR5LgogICAqCiAgICogVXNhZ2U6CiAgICogICAgIGNvbnN0IGRlbnNpdHkgPSBtYXRyaXguZGVuc2l0eSgpICAgICAgICAgICAgICAgICAgIC8vIHJldHJpZXZlIG1hdHJpeCBkZW5zaXR5CiAgICoKICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4CiAgICogQHJldHVybiB7bnVtYmVyfSAgICAgICAgICAgVGhlIG1hdHJpeCBkZW5zaXR5LgogICAqLwoKCiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5kZW5zaXR5ID0gZnVuY3Rpb24gKCkgewogICAgLy8gcm93cyAmIGNvbHVtbnMKICAgIHZhciByb3dzID0gdGhpcy5fc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gdGhpcy5fc2l6ZVsxXTsgLy8gY2FsY3VsYXRlIGRlbnNpdHkKCiAgICByZXR1cm4gcm93cyAhPT0gMCAmJiBjb2x1bW5zICE9PSAwID8gdGhpcy5faW5kZXgubGVuZ3RoIC8gKHJvd3MgKiBjb2x1bW5zKSA6IDA7CiAgfTsKICAvKioKICAgKiBHZXQgYSBzdWJzZXQgb2YgdGhlIG1hdHJpeCwgb3IgcmVwbGFjZSBhIHN1YnNldCBvZiB0aGUgbWF0cml4LgogICAqCiAgICogVXNhZ2U6CiAgICogICAgIGNvbnN0IHN1YnNldCA9IG1hdHJpeC5zdWJzZXQoaW5kZXgpICAgICAgICAgICAgICAgLy8gcmV0cmlldmUgc3Vic2V0CiAgICogICAgIGNvbnN0IHZhbHVlID0gbWF0cml4LnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQpICAgLy8gcmVwbGFjZSBzdWJzZXQKICAgKgogICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXgKICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleAogICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXggfCAqfSBbcmVwbGFjZW1lbnRdCiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW4KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuIElmIG5vdCBwcm92aWRlZCwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgbWF0cml4IGVsZW1lbnRzIHdpbGwgYmUgZmlsbGVkIHdpdGggemVyb3MuCiAgICovCgoKICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLnN1YnNldCA9IGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSkgewogICAgLy8gY2hlY2sgaXQgaXMgYSBwYXR0ZXJuIG1hdHJpeAogICAgaWYgKCF0aGlzLl92YWx1ZXMpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHN1YnNldCBvbiBhIFBhdHRlcm4gb25seSBtYXRyaXgnKTsKICAgIH0gLy8gY2hlY2sgYXJndW1lbnRzCgoKICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkgewogICAgICBjYXNlIDE6CiAgICAgICAgcmV0dXJuIF9nZXRzdWJzZXQodGhpcywgaW5kZXgpOwogICAgICAvLyBpbnRlbnRpb25hbCBmYWxsIHRocm91Z2gKCiAgICAgIGNhc2UgMjoKICAgICAgY2FzZSAzOgogICAgICAgIHJldHVybiBfc2V0c3Vic2V0KHRoaXMsIGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKTsKCiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzJyk7CiAgICB9CiAgfTsKCiAgZnVuY3Rpb24gX2dldHN1YnNldChtYXRyaXgsIGlkeCkgewogICAgLy8gY2hlY2sgaWR4CiAgICBpZiAoIU9iamVjdChpc1sidCIgLyogaXNJbmRleCAqL10pKGlkeCkpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBpbmRleCcpOwogICAgfQoKICAgIHZhciBpc1NjYWxhciA9IGlkeC5pc1NjYWxhcigpOwoKICAgIGlmIChpc1NjYWxhcikgewogICAgICAvLyByZXR1cm4gYSBzY2FsYXIKICAgICAgcmV0dXJuIG1hdHJpeC5nZXQoaWR4Lm1pbigpKTsKICAgIH0gLy8gdmFsaWRhdGUgZGltZW5zaW9ucwoKCiAgICB2YXIgc2l6ZSA9IGlkeC5zaXplKCk7CgogICAgaWYgKHNpemUubGVuZ3RoICE9PSBtYXRyaXguX3NpemUubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBEaW1lbnNpb25FcnJvclsiYSIgLyogRGltZW5zaW9uRXJyb3IgKi9dKHNpemUubGVuZ3RoLCBtYXRyaXguX3NpemUubGVuZ3RoKTsKICAgIH0gLy8gdmFycwoKCiAgICB2YXIgaSwgaWksIGssIGtrOyAvLyB2YWxpZGF0ZSBpZiBhbnkgb2YgdGhlIHJhbmdlcyBpbiB0aGUgaW5kZXggaXMgb3V0IG9mIHJhbmdlCgogICAgdmFyIG1pbiA9IGlkeC5taW4oKTsKICAgIHZhciBtYXggPSBpZHgubWF4KCk7CgogICAgZm9yIChpID0gMCwgaWkgPSBtYXRyaXguX3NpemUubGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICBPYmplY3QodXRpbHNfYXJyYXlbInMiIC8qIHZhbGlkYXRlSW5kZXggKi9dKShtaW5baV0sIG1hdHJpeC5fc2l6ZVtpXSk7CiAgICAgIE9iamVjdCh1dGlsc19hcnJheVsicyIgLyogdmFsaWRhdGVJbmRleCAqL10pKG1heFtpXSwgbWF0cml4Ll9zaXplW2ldKTsKICAgIH0gLy8gbWF0cml4IGFycmF5cwoKCiAgICB2YXIgbXZhbHVlcyA9IG1hdHJpeC5fdmFsdWVzOwogICAgdmFyIG1pbmRleCA9IG1hdHJpeC5faW5kZXg7CiAgICB2YXIgbXB0ciA9IG1hdHJpeC5fcHRyOyAvLyByb3dzICYgY29sdW1ucyBkaW1lbnNpb25zIGZvciByZXN1bHQgbWF0cml4CgogICAgdmFyIHJvd3MgPSBpZHguZGltZW5zaW9uKDApOwogICAgdmFyIGNvbHVtbnMgPSBpZHguZGltZW5zaW9uKDEpOyAvLyB3b3Jrc3BhY2UgJiBwZXJtdXRhdGlvbiB2ZWN0b3IKCiAgICB2YXIgdyA9IFtdOwogICAgdmFyIHB2ID0gW107IC8vIGxvb3Agcm93cyBpbiByZXN1bHRpbmcgbWF0cml4CgogICAgcm93cy5mb3JFYWNoKGZ1bmN0aW9uIChpLCByKSB7CiAgICAgIC8vIHVwZGF0ZSBwZXJtdXRhdGlvbiB2ZWN0b3IKICAgICAgcHZbaV0gPSByWzBdOyAvLyBtYXJrIGkgaW4gd29ya3NwYWNlCgogICAgICB3W2ldID0gdHJ1ZTsKICAgIH0pOyAvLyByZXN1bHQgbWF0cml4IGFycmF5cwoKICAgIHZhciB2YWx1ZXMgPSBtdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7CiAgICB2YXIgaW5kZXggPSBbXTsKICAgIHZhciBwdHIgPSBbXTsgLy8gbG9vcCBjb2x1bW5zIGluIHJlc3VsdCBtYXRyaXgKCiAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGopIHsKICAgICAgLy8gdXBkYXRlIHB0cgogICAgICBwdHIucHVzaChpbmRleC5sZW5ndGgpOyAvLyBsb29wIHZhbHVlcyBpbiBjb2x1bW4gagoKICAgICAgZm9yIChrID0gbXB0cltqXSwga2sgPSBtcHRyW2ogKyAxXTsgayA8IGtrOyBrKyspIHsKICAgICAgICAvLyByb3cKICAgICAgICBpID0gbWluZGV4W2tdOyAvLyBjaGVjayByb3cgaXMgaW4gcmVzdWx0IG1hdHJpeAoKICAgICAgICBpZiAod1tpXSA9PT0gdHJ1ZSkgewogICAgICAgICAgLy8gcHVzaCBpbmRleAogICAgICAgICAgaW5kZXgucHVzaChwdltpXSk7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXMKCiAgICAgICAgICBpZiAodmFsdWVzKSB7CiAgICAgICAgICAgIHZhbHVlcy5wdXNoKG12YWx1ZXNba10pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSk7IC8vIHVwZGF0ZSBwdHIKCiAgICBwdHIucHVzaChpbmRleC5sZW5ndGgpOyAvLyByZXR1cm4gbWF0cml4CgogICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgoewogICAgICB2YWx1ZXM6IHZhbHVlcywKICAgICAgaW5kZXg6IGluZGV4LAogICAgICBwdHI6IHB0ciwKICAgICAgc2l6ZTogc2l6ZSwKICAgICAgZGF0YXR5cGU6IG1hdHJpeC5fZGF0YXR5cGUKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gX3NldHN1YnNldChtYXRyaXgsIGluZGV4LCBzdWJtYXRyaXgsIGRlZmF1bHRWYWx1ZSkgewogICAgLy8gY2hlY2sgaW5kZXgKICAgIGlmICghaW5kZXggfHwgaW5kZXguaXNJbmRleCAhPT0gdHJ1ZSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGluZGV4Jyk7CiAgICB9IC8vIGdldCBpbmRleCBzaXplIGFuZCBjaGVjayB3aGV0aGVyIHRoZSBpbmRleCBjb250YWlucyBhIHNpbmdsZSB2YWx1ZQoKCiAgICB2YXIgaVNpemUgPSBpbmRleC5zaXplKCk7CiAgICB2YXIgaXNTY2FsYXIgPSBpbmRleC5pc1NjYWxhcigpOyAvLyBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIHN1Ym1hdHJpeCwgYW5kIGNvbnZlcnQgaXQgaW50byBhbiBBcnJheSBpZiBuZWVkZWQKCiAgICB2YXIgc1NpemU7CgogICAgaWYgKE9iamVjdChpc1sidiIgLyogaXNNYXRyaXggKi9dKShzdWJtYXRyaXgpKSB7CiAgICAgIC8vIHN1Ym1hdHJpeCBzaXplCiAgICAgIHNTaXplID0gc3VibWF0cml4LnNpemUoKTsgLy8gdXNlIGFycmF5IHJlcHJlc2VudGF0aW9uCgogICAgICBzdWJtYXRyaXggPSBzdWJtYXRyaXgudG9BcnJheSgpOwogICAgfSBlbHNlIHsKICAgICAgLy8gZ2V0IHN1Ym1hdHJpeCBzaXplIChhcnJheSwgc2NhbGFyKQogICAgICBzU2l6ZSA9IE9iamVjdCh1dGlsc19hcnJheVsiYSIgLyogYXJyYXlTaXplICovXSkoc3VibWF0cml4KTsKICAgIH0gLy8gY2hlY2sgaW5kZXggaXMgYSBzY2FsYXIKCgogICAgaWYgKGlzU2NhbGFyKSB7CiAgICAgIC8vIHZlcmlmeSBzdWJtYXRyaXggaXMgYSBzY2FsYXIKICAgICAgaWYgKHNTaXplLmxlbmd0aCAhPT0gMCkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NjYWxhciBleHBlY3RlZCcpOwogICAgICB9IC8vIHNldCB2YWx1ZQoKCiAgICAgIG1hdHJpeC5zZXQoaW5kZXgubWluKCksIHN1Ym1hdHJpeCwgZGVmYXVsdFZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIHZhbGlkYXRlIGRpbWVuc2lvbnMsIGluZGV4IHNpemUgbXVzdCBiZSBvbmUgb3IgdHdvIGRpbWVuc2lvbnMKICAgICAgaWYgKGlTaXplLmxlbmd0aCAhPT0gMSAmJiBpU2l6ZS5sZW5ndGggIT09IDIpIHsKICAgICAgICB0aHJvdyBuZXcgRGltZW5zaW9uRXJyb3JbImEiIC8qIERpbWVuc2lvbkVycm9yICovXShpU2l6ZS5sZW5ndGgsIG1hdHJpeC5fc2l6ZS5sZW5ndGgsICc8Jyk7CiAgICAgIH0gLy8gY2hlY2sgc3VibWF0cml4IGFuZCBpbmRleCBoYXZlIHRoZSBzYW1lIGRpbWVuc2lvbnMKCgogICAgICBpZiAoc1NpemUubGVuZ3RoIDwgaVNpemUubGVuZ3RoKSB7CiAgICAgICAgLy8gY2FsY3VsYXRlIG51bWJlciBvZiBtaXNzaW5nIG91dGVyIGRpbWVuc2lvbnMKICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgdmFyIG91dGVyID0gMDsKCiAgICAgICAgd2hpbGUgKGlTaXplW2ldID09PSAxICYmIHNTaXplW2ldID09PSAxKSB7CiAgICAgICAgICBpKys7CiAgICAgICAgfQoKICAgICAgICB3aGlsZSAoaVNpemVbaV0gPT09IDEpIHsKICAgICAgICAgIG91dGVyKys7CiAgICAgICAgICBpKys7CiAgICAgICAgfSAvLyB1bnNxdWVlemUgYm90aCBvdXRlciBhbmQgaW5uZXIgZGltZW5zaW9ucwoKCiAgICAgICAgc3VibWF0cml4ID0gT2JqZWN0KHV0aWxzX2FycmF5WyJxIiAvKiB1bnNxdWVlemUgKi9dKShzdWJtYXRyaXgsIGlTaXplLmxlbmd0aCwgb3V0ZXIsIHNTaXplKTsKICAgICAgfSAvLyBjaGVjayB3aGV0aGVyIHRoZSBzaXplIG9mIHRoZSBzdWJtYXRyaXggbWF0Y2hlcyB0aGUgaW5kZXggc2l6ZQoKCiAgICAgIGlmICghT2JqZWN0KHV0aWxzX29iamVjdFsiZCIgLyogZGVlcFN0cmljdEVxdWFsICovXSkoaVNpemUsIHNTaXplKSkgewogICAgICAgIHRocm93IG5ldyBEaW1lbnNpb25FcnJvclsiYSIgLyogRGltZW5zaW9uRXJyb3IgKi9dKGlTaXplLCBzU2l6ZSwgJz4nKTsKICAgICAgfSAvLyBvZmZzZXRzCgoKICAgICAgdmFyIHgwID0gaW5kZXgubWluKClbMF07CiAgICAgIHZhciB5MCA9IGluZGV4Lm1pbigpWzFdOyAvLyBzdWJtYXRyaXggcm93cyBhbmQgY29sdW1ucwoKICAgICAgdmFyIG0gPSBzU2l6ZVswXTsKICAgICAgdmFyIG4gPSBzU2l6ZVsxXTsgLy8gbG9vcCBzdWJtYXRyaXgKCiAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgbTsgeCsrKSB7CiAgICAgICAgLy8gbG9vcCBjb2x1bW5zCiAgICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCBuOyB5KyspIHsKICAgICAgICAgIC8vIHZhbHVlIGF0IGksIGoKICAgICAgICAgIHZhciB2ID0gc3VibWF0cml4W3hdW3ldOyAvLyBpbnZva2Ugc2V0ICh6ZXJvIHZhbHVlIHdpbGwgcmVtb3ZlIGVudHJ5IGZyb20gbWF0cml4KQoKICAgICAgICAgIG1hdHJpeC5zZXQoW3ggKyB4MCwgeSArIHkwXSwgdiwgZGVmYXVsdFZhbHVlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbWF0cml4OwogIH0KICAvKioKICAgKiBHZXQgYSBzaW5nbGUgZWxlbWVudCBmcm9tIHRoZSBtYXRyaXguCiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeAogICAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleAogICAqIEByZXR1cm4geyp9IHZhbHVlCiAgICovCgoKICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChpbmRleCkgewogICAgaWYgKCFPYmplY3QoaXNbImIiIC8qIGlzQXJyYXkgKi9dKShpbmRleCkpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQnKTsKICAgIH0KCiAgICBpZiAoaW5kZXgubGVuZ3RoICE9PSB0aGlzLl9zaXplLmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgRGltZW5zaW9uRXJyb3JbImEiIC8qIERpbWVuc2lvbkVycm9yICovXShpbmRleC5sZW5ndGgsIHRoaXMuX3NpemUubGVuZ3RoKTsKICAgIH0gLy8gY2hlY2sgaXQgaXMgYSBwYXR0ZXJuIG1hdHJpeAoKCiAgICBpZiAoIXRoaXMuX3ZhbHVlcykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2UgZ2V0IG9uIGEgUGF0dGVybiBvbmx5IG1hdHJpeCcpOwogICAgfSAvLyByb3cgYW5kIGNvbHVtbgoKCiAgICB2YXIgaSA9IGluZGV4WzBdOwogICAgdmFyIGogPSBpbmRleFsxXTsgLy8gY2hlY2sgaSwgaiBhcmUgdmFsaWQKCiAgICBPYmplY3QodXRpbHNfYXJyYXlbInMiIC8qIHZhbGlkYXRlSW5kZXggKi9dKShpLCB0aGlzLl9zaXplWzBdKTsKICAgIE9iamVjdCh1dGlsc19hcnJheVsicyIgLyogdmFsaWRhdGVJbmRleCAqL10pKGosIHRoaXMuX3NpemVbMV0pOyAvLyBmaW5kIHZhbHVlIGluZGV4CgogICAgdmFyIGsgPSBfZ2V0VmFsdWVJbmRleChpLCB0aGlzLl9wdHJbal0sIHRoaXMuX3B0cltqICsgMV0sIHRoaXMuX2luZGV4KTsgLy8gY2hlY2sgayBpcyBwcmlvciB0byBuZXh0IGNvbHVtbiBrIGFuZCBpdCBpcyBpbiB0aGUgY29ycmVjdCByb3cKCgogICAgaWYgKGsgPCB0aGlzLl9wdHJbaiArIDFdICYmIHRoaXMuX2luZGV4W2tdID09PSBpKSB7CiAgICAgIHJldHVybiB0aGlzLl92YWx1ZXNba107CiAgICB9CgogICAgcmV0dXJuIDA7CiAgfTsKICAvKioKICAgKiBSZXBsYWNlIGEgc2luZ2xlIGVsZW1lbnQgaW4gdGhlIG1hdHJpeC4KICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4CiAgICogQHBhcmFtIHtudW1iZXJbXX0gaW5kZXggICBaZXJvLWJhc2VkIGluZGV4CiAgICogQHBhcmFtIHsqfSB2CiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSAgICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW4KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuIElmIG5vdCBwcm92aWRlZCwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgbWF0cml4IGVsZW1lbnRzIHdpbGwgYmUgc2V0IHRvIHplcm8uCiAgICogQHJldHVybiB7U3BhcnNlTWF0cml4fSBzZWxmCiAgICovCgoKICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChpbmRleCwgdiwgZGVmYXVsdFZhbHVlKSB7CiAgICBpZiAoIU9iamVjdChpc1siYiIgLyogaXNBcnJheSAqL10pKGluZGV4KSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCcpOwogICAgfQoKICAgIGlmIChpbmRleC5sZW5ndGggIT09IHRoaXMuX3NpemUubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBEaW1lbnNpb25FcnJvclsiYSIgLyogRGltZW5zaW9uRXJyb3IgKi9dKGluZGV4Lmxlbmd0aCwgdGhpcy5fc2l6ZS5sZW5ndGgpOwogICAgfSAvLyBjaGVjayBpdCBpcyBhIHBhdHRlcm4gbWF0cml4CgoKICAgIGlmICghdGhpcy5fdmFsdWVzKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBzZXQgb24gYSBQYXR0ZXJuIG9ubHkgbWF0cml4Jyk7CiAgICB9IC8vIHJvdyBhbmQgY29sdW1uCgoKICAgIHZhciBpID0gaW5kZXhbMF07CiAgICB2YXIgaiA9IGluZGV4WzFdOyAvLyByb3dzICYgY29sdW1ucwoKICAgIHZhciByb3dzID0gdGhpcy5fc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gdGhpcy5fc2l6ZVsxXTsgLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZQoKICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlCgogICAgdmFyIHplcm8gPSAwOwoKICAgIGlmIChPYmplY3QoaXNbIkkiIC8qIGlzU3RyaW5nICovXSkodGhpcy5fZGF0YXR5cGUpKSB7CiAgICAgIC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZGF0YXR5cGUsIGRhdGF0eXBlKQogICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFt0aGlzLl9kYXRhdHlwZSwgdGhpcy5fZGF0YXR5cGVdKSB8fCBlcXVhbFNjYWxhcjsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlCgogICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCB0aGlzLl9kYXRhdHlwZSk7CiAgICB9IC8vIGNoZWNrIHdlIG5lZWQgdG8gcmVzaXplIG1hdHJpeAoKCiAgICBpZiAoaSA+IHJvd3MgLSAxIHx8IGogPiBjb2x1bW5zIC0gMSkgewogICAgICAvLyByZXNpemUgbWF0cml4CiAgICAgIF9yZXNpemUodGhpcywgTWF0aC5tYXgoaSArIDEsIHJvd3MpLCBNYXRoLm1heChqICsgMSwgY29sdW1ucyksIGRlZmF1bHRWYWx1ZSk7IC8vIHVwZGF0ZSByb3dzICYgY29sdW1ucwoKCiAgICAgIHJvd3MgPSB0aGlzLl9zaXplWzBdOwogICAgICBjb2x1bW5zID0gdGhpcy5fc2l6ZVsxXTsKICAgIH0gLy8gY2hlY2sgaSwgaiBhcmUgdmFsaWQKCgogICAgT2JqZWN0KHV0aWxzX2FycmF5WyJzIiAvKiB2YWxpZGF0ZUluZGV4ICovXSkoaSwgcm93cyk7CiAgICBPYmplY3QodXRpbHNfYXJyYXlbInMiIC8qIHZhbGlkYXRlSW5kZXggKi9dKShqLCBjb2x1bW5zKTsgLy8gZmluZCB2YWx1ZSBpbmRleAoKICAgIHZhciBrID0gX2dldFZhbHVlSW5kZXgoaSwgdGhpcy5fcHRyW2pdLCB0aGlzLl9wdHJbaiArIDFdLCB0aGlzLl9pbmRleCk7IC8vIGNoZWNrIGsgaXMgcHJpb3IgdG8gbmV4dCBjb2x1bW4gayBhbmQgaXQgaXMgaW4gdGhlIGNvcnJlY3Qgcm93CgoKICAgIGlmIChrIDwgdGhpcy5fcHRyW2ogKyAxXSAmJiB0aGlzLl9pbmRleFtrXSA9PT0gaSkgewogICAgICAvLyBjaGVjayB2YWx1ZSAhPSAwCiAgICAgIGlmICghZXEodiwgemVybykpIHsKICAgICAgICAvLyB1cGRhdGUgdmFsdWUKICAgICAgICB0aGlzLl92YWx1ZXNba10gPSB2OwogICAgICB9IGVsc2UgewogICAgICAgIC8vIHJlbW92ZSB2YWx1ZSBmcm9tIG1hdHJpeAogICAgICAgIF9yZW1vdmUoaywgaiwgdGhpcy5fdmFsdWVzLCB0aGlzLl9pbmRleCwgdGhpcy5fcHRyKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gaW5zZXJ0IHZhbHVlIEAgKGksIGopCiAgICAgIF9pbnNlcnQoaywgaSwgaiwgdiwgdGhpcy5fdmFsdWVzLCB0aGlzLl9pbmRleCwgdGhpcy5fcHRyKTsKICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9OwoKICBmdW5jdGlvbiBfZ2V0VmFsdWVJbmRleChpLCB0b3AsIGJvdHRvbSwgaW5kZXgpIHsKICAgIC8vIGNoZWNrIHJvdyBpcyBvbiB0aGUgYm90dG9tIHNpZGUKICAgIGlmIChib3R0b20gLSB0b3AgPT09IDApIHsKICAgICAgcmV0dXJuIGJvdHRvbTsKICAgIH0gLy8gbG9vcCByb3dzIFt0b3AsIGJvdHRvbVsKCgogICAgZm9yICh2YXIgciA9IHRvcDsgciA8IGJvdHRvbTsgcisrKSB7CiAgICAgIC8vIGNoZWNrIHdlIGZvdW5kIHZhbHVlIGluZGV4CiAgICAgIGlmIChpbmRleFtyXSA9PT0gaSkgewogICAgICAgIHJldHVybiByOwogICAgICB9CiAgICB9IC8vIHdlIGRpZCBub3QgZmluZCByb3cKCgogICAgcmV0dXJuIHRvcDsKICB9CgogIGZ1bmN0aW9uIF9yZW1vdmUoaywgaiwgdmFsdWVzLCBpbmRleCwgcHRyKSB7CiAgICAvLyByZW1vdmUgdmFsdWUgQCBrCiAgICB2YWx1ZXMuc3BsaWNlKGssIDEpOwogICAgaW5kZXguc3BsaWNlKGssIDEpOyAvLyB1cGRhdGUgcG9pbnRlcnMKCiAgICBmb3IgKHZhciB4ID0gaiArIDE7IHggPCBwdHIubGVuZ3RoOyB4KyspIHsKICAgICAgcHRyW3hdLS07CiAgICB9CiAgfQoKICBmdW5jdGlvbiBfaW5zZXJ0KGssIGksIGosIHYsIHZhbHVlcywgaW5kZXgsIHB0cikgewogICAgLy8gaW5zZXJ0IHZhbHVlCiAgICB2YWx1ZXMuc3BsaWNlKGssIDAsIHYpOyAvLyB1cGRhdGUgcm93IGZvciBrCgogICAgaW5kZXguc3BsaWNlKGssIDAsIGkpOyAvLyB1cGRhdGUgY29sdW1uIHBvaW50ZXJzCgogICAgZm9yICh2YXIgeCA9IGogKyAxOyB4IDwgcHRyLmxlbmd0aDsgeCsrKSB7CiAgICAgIHB0clt4XSsrOwogICAgfQogIH0KICAvKioKICAgKiBSZXNpemUgdGhlIG1hdHJpeCB0byB0aGUgZ2l2ZW4gc2l6ZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeCB3aGVuCiAgICogYGNvcHk9dHJ1ZWAsIG90aGVyd2lzZSByZXR1cm4gdGhlIG1hdHJpeCBpdHNlbGYgKHJlc2l6ZSBpbiBwbGFjZSkuCiAgICoKICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4CiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuCiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzLgogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBwcm92aWRlZCwgdGhlIG1hdHJpeCBlbGVtZW50cyB3aWxsCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgZmlsbGVkIHdpdGggemVyb3MuCiAgICogQHBhcmFtIHtib29sZWFufSBbY29weV0gICAgICAgICAgUmV0dXJuIGEgcmVzaXplZCBjb3B5IG9mIHRoZSBtYXRyaXgKICAgKgogICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgIFRoZSByZXNpemVkIG1hdHJpeAogICAqLwoKCiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoc2l6ZSwgZGVmYXVsdFZhbHVlLCBjb3B5KSB7CiAgICAvLyB2YWxpZGF0ZSBhcmd1bWVudHMKICAgIGlmICghT2JqZWN0KGlzWyJiIiAvKiBpc0FycmF5ICovXSkoc2l6ZSkpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQnKTsKICAgIH0KCiAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHR3byBkaW1lbnNpb25zIG1hdHJpeCBhcmUgc3VwcG9ydGVkJyk7CiAgICB9IC8vIGNoZWNrIHNpemVzCgoKICAgIHNpemUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgaWYgKCFPYmplY3QoaXNbInkiIC8qIGlzTnVtYmVyICovXSkodmFsdWUpIHx8ICFPYmplY3QodXRpbHNfbnVtYmVyWyJpIiAvKiBpc0ludGVnZXIgKi9dKSh2YWx1ZSkgfHwgdmFsdWUgPCAwKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzaXplLCBtdXN0IGNvbnRhaW4gcG9zaXRpdmUgaW50ZWdlcnMgJyArICcoc2l6ZTogJyArIE9iamVjdCh1dGlsc19zdHJpbmdbImQiIC8qIGZvcm1hdCAqL10pKHNpemUpICsgJyknKTsKICAgICAgfQogICAgfSk7IC8vIG1hdHJpeCB0byByZXNpemUKCiAgICB2YXIgbSA9IGNvcHkgPyB0aGlzLmNsb25lKCkgOiB0aGlzOyAvLyByZXNpemUgbWF0cml4CgogICAgcmV0dXJuIF9yZXNpemUobSwgc2l6ZVswXSwgc2l6ZVsxXSwgZGVmYXVsdFZhbHVlKTsKICB9OwoKICBmdW5jdGlvbiBfcmVzaXplKG1hdHJpeCwgcm93cywgY29sdW1ucywgZGVmYXVsdFZhbHVlKSB7CiAgICAvLyB2YWx1ZSB0byBpbnNlcnQgYXQgdGhlIHRpbWUgb2YgZ3Jvd2luZyBtYXRyaXgKICAgIHZhciB2YWx1ZSA9IGRlZmF1bHRWYWx1ZSB8fCAwOyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlCgogICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWUKCiAgICB2YXIgemVybyA9IDA7CgogICAgaWYgKE9iamVjdChpc1siSSIgLyogaXNTdHJpbmcgKi9dKShtYXRyaXguX2RhdGF0eXBlKSkgewogICAgICAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGRhdGF0eXBlLCBkYXRhdHlwZSkKICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbbWF0cml4Ll9kYXRhdHlwZSwgbWF0cml4Ll9kYXRhdHlwZV0pIHx8IGVxdWFsU2NhbGFyOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGUKCiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIG1hdHJpeC5fZGF0YXR5cGUpOyAvLyBjb252ZXJ0IHZhbHVlIHRvIHRoZSBzYW1lIGRhdGF0eXBlCgogICAgICB2YWx1ZSA9IHR5cGVkLmNvbnZlcnQodmFsdWUsIG1hdHJpeC5fZGF0YXR5cGUpOwogICAgfSAvLyBzaG91bGQgd2UgaW5zZXJ0IHRoZSB2YWx1ZT8KCgogICAgdmFyIGlucyA9ICFlcSh2YWx1ZSwgemVybyk7IC8vIG9sZCBjb2x1bW5zIGFuZCByb3dzCgogICAgdmFyIHIgPSBtYXRyaXguX3NpemVbMF07CiAgICB2YXIgYyA9IG1hdHJpeC5fc2l6ZVsxXTsKICAgIHZhciBpLCBqLCBrOyAvLyBjaGVjayB3ZSBuZWVkIHRvIGluY3JlYXNlIGNvbHVtbnMKCiAgICBpZiAoY29sdW1ucyA+IGMpIHsKICAgICAgLy8gbG9vcCBuZXcgY29sdW1ucwogICAgICBmb3IgKGogPSBjOyBqIDwgY29sdW1uczsgaisrKSB7CiAgICAgICAgLy8gdXBkYXRlIG1hdHJpeC5fcHRyIGZvciBjdXJyZW50IGNvbHVtbgogICAgICAgIG1hdHJpeC5fcHRyW2pdID0gbWF0cml4Ll92YWx1ZXMubGVuZ3RoOyAvLyBjaGVjayB3ZSBuZWVkIHRvIGluc2VydCBtYXRyaXguX3ZhbHVlcwoKICAgICAgICBpZiAoaW5zKSB7CiAgICAgICAgICAvLyBsb29wIHJvd3MKICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCByOyBpKyspIHsKICAgICAgICAgICAgLy8gYWRkIG5ldyBtYXRyaXguX3ZhbHVlcwogICAgICAgICAgICBtYXRyaXguX3ZhbHVlcy5wdXNoKHZhbHVlKTsgLy8gdXBkYXRlIG1hdHJpeC5faW5kZXgKCgogICAgICAgICAgICBtYXRyaXguX2luZGV4LnB1c2goaSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IC8vIHN0b3JlIG51bWJlciBvZiBtYXRyaXguX3ZhbHVlcyBpbiBtYXRyaXguX3B0cgoKCiAgICAgIG1hdHJpeC5fcHRyW2NvbHVtbnNdID0gbWF0cml4Ll92YWx1ZXMubGVuZ3RoOwogICAgfSBlbHNlIGlmIChjb2x1bW5zIDwgYykgewogICAgICAvLyB0cnVuY2F0ZSBtYXRyaXguX3B0cgogICAgICBtYXRyaXguX3B0ci5zcGxpY2UoY29sdW1ucyArIDEsIGMgLSBjb2x1bW5zKTsgLy8gdHJ1bmNhdGUgbWF0cml4Ll92YWx1ZXMgYW5kIG1hdHJpeC5faW5kZXgKCgogICAgICBtYXRyaXguX3ZhbHVlcy5zcGxpY2UobWF0cml4Ll9wdHJbY29sdW1uc10sIG1hdHJpeC5fdmFsdWVzLmxlbmd0aCk7CgogICAgICBtYXRyaXguX2luZGV4LnNwbGljZShtYXRyaXguX3B0cltjb2x1bW5zXSwgbWF0cml4Ll9pbmRleC5sZW5ndGgpOwogICAgfSAvLyB1cGRhdGUgY29sdW1ucwoKCiAgICBjID0gY29sdW1uczsgLy8gY2hlY2sgd2UgbmVlZCB0byBpbmNyZWFzZSByb3dzCgogICAgaWYgKHJvd3MgPiByKSB7CiAgICAgIC8vIGNoZWNrIHdlIGhhdmUgdG8gaW5zZXJ0IHZhbHVlcwogICAgICBpZiAoaW5zKSB7CiAgICAgICAgLy8gaW5zZXJ0cwogICAgICAgIHZhciBuID0gMDsgLy8gbG9vcCBjb2x1bW5zCgogICAgICAgIGZvciAoaiA9IDA7IGogPCBjOyBqKyspIHsKICAgICAgICAgIC8vIHVwZGF0ZSBtYXRyaXguX3B0ciBmb3IgY3VycmVudCBjb2x1bW4KICAgICAgICAgIG1hdHJpeC5fcHRyW2pdID0gbWF0cml4Ll9wdHJbal0gKyBuOyAvLyB3aGVyZSB0byBpbnNlcnQgbWF0cml4Ll92YWx1ZXMKCiAgICAgICAgICBrID0gbWF0cml4Ll9wdHJbaiArIDFdICsgbjsgLy8gcG9pbnRlcgoKICAgICAgICAgIHZhciBwID0gMDsgLy8gbG9vcCBuZXcgcm93cywgaW5pdGlhbGl6ZSBwb2ludGVyCgogICAgICAgICAgZm9yIChpID0gcjsgaSA8IHJvd3M7IGkrKywgcCsrKSB7CiAgICAgICAgICAgIC8vIGFkZCB2YWx1ZQogICAgICAgICAgICBtYXRyaXguX3ZhbHVlcy5zcGxpY2UoayArIHAsIDAsIHZhbHVlKTsgLy8gdXBkYXRlIG1hdHJpeC5faW5kZXgKCgogICAgICAgICAgICBtYXRyaXguX2luZGV4LnNwbGljZShrICsgcCwgMCwgaSk7IC8vIGluY3JlbWVudCBpbnNlcnRzCgoKICAgICAgICAgICAgbisrOwogICAgICAgICAgfQogICAgICAgIH0gLy8gc3RvcmUgbnVtYmVyIG9mIG1hdHJpeC5fdmFsdWVzIGluIG1hdHJpeC5fcHRyCgoKICAgICAgICBtYXRyaXguX3B0cltjXSA9IG1hdHJpeC5fdmFsdWVzLmxlbmd0aDsKICAgICAgfQogICAgfSBlbHNlIGlmIChyb3dzIDwgcikgewogICAgICAvLyBkZWxldGVzCiAgICAgIHZhciBkID0gMDsgLy8gbG9vcCBjb2x1bW5zCgogICAgICBmb3IgKGogPSAwOyBqIDwgYzsgaisrKSB7CiAgICAgICAgLy8gdXBkYXRlIG1hdHJpeC5fcHRyIGZvciBjdXJyZW50IGNvbHVtbgogICAgICAgIG1hdHJpeC5fcHRyW2pdID0gbWF0cml4Ll9wdHJbal0gLSBkOyAvLyB3aGVyZSBtYXRyaXguX3ZhbHVlcyBzdGFydCBmb3IgbmV4dCBjb2x1bW4KCiAgICAgICAgdmFyIGswID0gbWF0cml4Ll9wdHJbal07CiAgICAgICAgdmFyIGsxID0gbWF0cml4Ll9wdHJbaiArIDFdIC0gZDsgLy8gbG9vcCBtYXRyaXguX2luZGV4CgogICAgICAgIGZvciAoayA9IGswOyBrIDwgazE7IGsrKykgewogICAgICAgICAgLy8gcm93CiAgICAgICAgICBpID0gbWF0cml4Ll9pbmRleFtrXTsgLy8gY2hlY2sgd2UgbmVlZCB0byBkZWxldGUgdmFsdWUgYW5kIG1hdHJpeC5faW5kZXgKCiAgICAgICAgICBpZiAoaSA+IHJvd3MgLSAxKSB7CiAgICAgICAgICAgIC8vIHJlbW92ZSB2YWx1ZQogICAgICAgICAgICBtYXRyaXguX3ZhbHVlcy5zcGxpY2UoaywgMSk7IC8vIHJlbW92ZSBpdGVtIGZyb20gbWF0cml4Ll9pbmRleAoKCiAgICAgICAgICAgIG1hdHJpeC5faW5kZXguc3BsaWNlKGssIDEpOyAvLyBpbmNyZWFzZSBkZWxldGVzCgoKICAgICAgICAgICAgZCsrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSAvLyB1cGRhdGUgbWF0cml4Ll9wdHIgZm9yIGN1cnJlbnQgY29sdW1uCgoKICAgICAgbWF0cml4Ll9wdHJbal0gPSBtYXRyaXguX3ZhbHVlcy5sZW5ndGg7CiAgICB9IC8vIHVwZGF0ZSBtYXRyaXguX3NpemUKCgogICAgbWF0cml4Ll9zaXplWzBdID0gcm93czsKICAgIG1hdHJpeC5fc2l6ZVsxXSA9IGNvbHVtbnM7IC8vIHJldHVybiBtYXRyaXgKCiAgICByZXR1cm4gbWF0cml4OwogIH0KICAvKioKICAgKiBSZXNoYXBlIHRoZSBtYXRyaXggdG8gdGhlIGdpdmVuIHNpemUuIFJldHVybnMgYSBjb3B5IG9mIHRoZSBtYXRyaXggd2hlbgogICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNoYXBlIGluIHBsYWNlKS4KICAgKgogICAqIE5PVEU6IFRoaXMgbWlnaHQgYmUgYmV0dGVyIHN1aXRlZCB0byBjb3B5IGJ5IGRlZmF1bHQsIGluc3RlYWQgb2YgbW9kaWZ5aW5nCiAgICogICAgICAgaW4gcGxhY2UuIEZvciBub3csIGl0IG9wZXJhdGVzIGluIHBsYWNlIHRvIHJlbWFpbiBjb25zaXN0ZW50IHdpdGgKICAgKiAgICAgICByZXNpemUoKS4KICAgKgogICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXgKICAgKiBAcGFyYW0ge251bWJlcltdfSBzaXplICAgICAgICAgICBUaGUgbmV3IHNpemUgdGhlIG1hdHJpeCBzaG91bGQgaGF2ZS4KICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb3B5XSAgICAgICAgICBSZXR1cm4gYSByZXNoYXBlZCBjb3B5IG9mIHRoZSBtYXRyaXgKICAgKgogICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgIFRoZSByZXNoYXBlZCBtYXRyaXgKICAgKi8KCgogIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUucmVzaGFwZSA9IGZ1bmN0aW9uIChzaXplLCBjb3B5KSB7CiAgICAvLyB2YWxpZGF0ZSBhcmd1bWVudHMKICAgIGlmICghT2JqZWN0KGlzWyJiIiAvKiBpc0FycmF5ICovXSkoc2l6ZSkpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQnKTsKICAgIH0KCiAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdTcGFyc2UgbWF0cmljZXMgY2FuIG9ubHkgYmUgcmVzaGFwZWQgaW4gdHdvIGRpbWVuc2lvbnMnKTsKICAgIH0gLy8gY2hlY2sgc2l6ZXMKCgogICAgc2l6ZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICBpZiAoIU9iamVjdChpc1sieSIgLyogaXNOdW1iZXIgKi9dKSh2YWx1ZSkgfHwgIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKHZhbHVlKSB8fCB2YWx1ZSA8IDApIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHNpemUsIG11c3QgY29udGFpbiBwb3NpdGl2ZSBpbnRlZ2VycyAnICsgJyhzaXplOiAnICsgT2JqZWN0KHV0aWxzX3N0cmluZ1siZCIgLyogZm9ybWF0ICovXSkoc2l6ZSkgKyAnKScpOwogICAgICB9CiAgICB9KTsgLy8gbSAqIG4gbXVzdCBub3QgY2hhbmdlCgogICAgaWYgKHRoaXMuX3NpemVbMF0gKiB0aGlzLl9zaXplWzFdICE9PSBzaXplWzBdICogc2l6ZVsxXSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc2hhcGluZyBzcGFyc2UgbWF0cml4IHdpbGwgcmVzdWx0IGluIHRoZSB3cm9uZyBudW1iZXIgb2YgZWxlbWVudHMnKTsKICAgIH0gLy8gbWF0cml4IHRvIHJlc2hhcGUKCgogICAgdmFyIG0gPSBjb3B5ID8gdGhpcy5jbG9uZSgpIDogdGhpczsgLy8gcmV0dXJuIHVuY2hhbmdlZCBpZiB0aGUgc2FtZSBzaGFwZQoKICAgIGlmICh0aGlzLl9zaXplWzBdID09PSBzaXplWzBdICYmIHRoaXMuX3NpemVbMV0gPT09IHNpemVbMV0pIHsKICAgICAgcmV0dXJuIG07CiAgICB9IC8vIENvbnZlcnQgdG8gQ09PIGZvcm1hdCAoZ2VuZXJhdGUgYSBjb2x1bW4gaW5kZXgpCgoKICAgIHZhciBjb2xJbmRleCA9IFtdOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbS5fcHRyLmxlbmd0aDsgaSsrKSB7CiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbS5fcHRyW2kgKyAxXSAtIG0uX3B0cltpXTsgaisrKSB7CiAgICAgICAgY29sSW5kZXgucHVzaChpKTsKICAgICAgfQogICAgfSAvLyBDbG9uZSB0aGUgdmFsdWVzIGFycmF5CgoKICAgIHZhciB2YWx1ZXMgPSBtLl92YWx1ZXMuc2xpY2UoKTsgLy8gQ2xvbmUgdGhlIHJvdyBpbmRleCBhcnJheQoKCiAgICB2YXIgcm93SW5kZXggPSBtLl9pbmRleC5zbGljZSgpOyAvLyBUcmFuc2Zvcm0gdGhlIChyb3csIGNvbHVtbikgaW5kaWNlcwoKCiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbS5faW5kZXgubGVuZ3RoOyBfaSsrKSB7CiAgICAgIHZhciByMSA9IHJvd0luZGV4W19pXTsKICAgICAgdmFyIGMxID0gY29sSW5kZXhbX2ldOwogICAgICB2YXIgZmxhdCA9IHIxICogbS5fc2l6ZVsxXSArIGMxOwogICAgICBjb2xJbmRleFtfaV0gPSBmbGF0ICUgc2l6ZVsxXTsKICAgICAgcm93SW5kZXhbX2ldID0gTWF0aC5mbG9vcihmbGF0IC8gc2l6ZVsxXSk7CiAgICB9IC8vIE5vdyByZXNoYXBpbmcgaXMgc3VwcG9zZWQgdG8gcHJlc2VydmUgdGhlIHJvdy1tYWpvciBvcmRlciwgQlVUIHRoZXNlIHNwYXJzZSBtYXRyaWNlcyBhcmUgc3RvcmVkCiAgICAvLyBpbiBjb2x1bW4tbWFqb3Igb3JkZXIsIHNvIHdlIGhhdmUgdG8gcmVvcmRlciB0aGUgdmFsdWUgYXJyYXkgbm93LiBPbmUgb3B0aW9uIGlzIHRvIHVzZSBhIG11bHRpc29ydCwKICAgIC8vIHNvcnRpbmcgc2V2ZXJhbCBhcnJheXMgYmFzZWQgb24gc29tZSBvdGhlciBhcnJheS4KICAgIC8vIE9SLCB3ZSBjb3VsZCBlYXNpbHkganVzdDoKICAgIC8vIDEuIFJlbW92ZSBhbGwgdmFsdWVzIGZyb20gdGhlIG1hdHJpeAoKCiAgICBtLl92YWx1ZXMubGVuZ3RoID0gMDsKICAgIG0uX2luZGV4Lmxlbmd0aCA9IDA7CiAgICBtLl9wdHIubGVuZ3RoID0gc2l6ZVsxXSArIDE7CiAgICBtLl9zaXplID0gc2l6ZS5zbGljZSgpOwoKICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG0uX3B0ci5sZW5ndGg7IF9pMisrKSB7CiAgICAgIG0uX3B0cltfaTJdID0gMDsKICAgIH0gLy8gMi4gUmUtaW5zZXJ0IGFsbCBlbGVtZW50cyBpbiB0aGUgcHJvcGVyIG9yZGVyIChzaW1wbGlmaWVkIGNvZGUgZnJvbSBTcGFyc2VNYXRyaXgucHJvdG90eXBlLnNldCkKICAgIC8vIFRoaXMgc3RlcCBpcyBwcm9iYWJseSB0aGUgbW9zdCB0aW1lLWNvbnN1bWluZwoKCiAgICBmb3IgKHZhciBoID0gMDsgaCA8IHZhbHVlcy5sZW5ndGg7IGgrKykgewogICAgICB2YXIgX2kzID0gcm93SW5kZXhbaF07CiAgICAgIHZhciBfaiA9IGNvbEluZGV4W2hdOwogICAgICB2YXIgdiA9IHZhbHVlc1toXTsKCiAgICAgIHZhciBrID0gX2dldFZhbHVlSW5kZXgoX2kzLCBtLl9wdHJbX2pdLCBtLl9wdHJbX2ogKyAxXSwgbS5faW5kZXgpOwoKICAgICAgX2luc2VydChrLCBfaTMsIF9qLCB2LCBtLl92YWx1ZXMsIG0uX2luZGV4LCBtLl9wdHIpOwogICAgfSAvLyBUaGUgdmFsdWUgaW5kaWNlcyBhcmUgaW5zZXJ0ZWQgb3V0IG9mIG9yZGVyLCBidXQgYXBwYXJlbnRseSB0aGF0J3MuLi4gc3RpbGwgT0s/CgoKICAgIHJldHVybiBtOwogIH07CiAgLyoqCiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhlIG1hdHJpeAogICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXgKICAgKiBAcmV0dXJuIHtTcGFyc2VNYXRyaXh9IGNsb25lCiAgICovCgoKICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgewogICAgdmFyIG0gPSBuZXcgU3BhcnNlTWF0cml4KHsKICAgICAgdmFsdWVzOiB0aGlzLl92YWx1ZXMgPyBPYmplY3QodXRpbHNfb2JqZWN0WyJhIiAvKiBjbG9uZSAqL10pKHRoaXMuX3ZhbHVlcykgOiB1bmRlZmluZWQsCiAgICAgIGluZGV4OiBPYmplY3QodXRpbHNfb2JqZWN0WyJhIiAvKiBjbG9uZSAqL10pKHRoaXMuX2luZGV4KSwKICAgICAgcHRyOiBPYmplY3QodXRpbHNfb2JqZWN0WyJhIiAvKiBjbG9uZSAqL10pKHRoaXMuX3B0ciksCiAgICAgIHNpemU6IE9iamVjdCh1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSkodGhpcy5fc2l6ZSksCiAgICAgIGRhdGF0eXBlOiB0aGlzLl9kYXRhdHlwZQogICAgfSk7CiAgICByZXR1cm4gbTsKICB9OwogIC8qKgogICAqIFJldHJpZXZlIHRoZSBzaXplIG9mIHRoZSBtYXRyaXguCiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeAogICAqIEByZXR1cm5zIHtudW1iZXJbXX0gc2l6ZQogICAqLwoKCiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHRoaXMuX3NpemUuc2xpY2UoMCk7IC8vIGNvcHkgdGhlIEFycmF5CiAgfTsKICAvKioKICAgKiBDcmVhdGUgYSBuZXcgbWF0cml4IHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGV4ZWN1dGVkIG9uCiAgICogZWFjaCBlbnRyeSBvZiB0aGUgbWF0cml4LgogICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXgKICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggdGhyZWUKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXggYmVpbmcgdHJhdmVyc2VkLgogICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NraXBaZXJvc10gSW52b2tlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBub24temVybyB2YWx1ZXMgb25seS4KICAgKgogICAqIEByZXR1cm4ge1NwYXJzZU1hdHJpeH0gbWF0cml4CiAgICovCgoKICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgc2tpcFplcm9zKSB7CiAgICAvLyBjaGVjayBpdCBpcyBhIHBhdHRlcm4gbWF0cml4CiAgICBpZiAoIXRoaXMuX3ZhbHVlcykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2UgbWFwIG9uIGEgUGF0dGVybiBvbmx5IG1hdHJpeCcpOwogICAgfSAvLyBtYXRyaXggaW5zdGFuY2UKCgogICAgdmFyIG1lID0gdGhpczsgLy8gcm93cyBhbmQgY29sdW1ucwoKICAgIHZhciByb3dzID0gdGhpcy5fc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gdGhpcy5fc2l6ZVsxXTsgLy8gaW52b2tlIGNhbGxiYWNrCgogICAgdmFyIGludm9rZSA9IGZ1bmN0aW9uIGludm9rZSh2LCBpLCBqKSB7CiAgICAgIC8vIGludm9rZSBjYWxsYmFjawogICAgICByZXR1cm4gY2FsbGJhY2sodiwgW2ksIGpdLCBtZSk7CiAgICB9OyAvLyBpbnZva2UgX21hcAoKCiAgICByZXR1cm4gX21hcCh0aGlzLCAwLCByb3dzIC0gMSwgMCwgY29sdW1ucyAtIDEsIGludm9rZSwgc2tpcFplcm9zKTsKICB9OwogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBtYXRyaXggd2l0aCB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhlY3V0ZWQgb24gdGhlIGludGVydmFsCiAgICogW21pblJvdy4ubWF4Um93LCBtaW5Db2x1bW4uLm1heENvbHVtbl0uCiAgICovCgoKICBmdW5jdGlvbiBfbWFwKG1hdHJpeCwgbWluUm93LCBtYXhSb3csIG1pbkNvbHVtbiwgbWF4Q29sdW1uLCBjYWxsYmFjaywgc2tpcFplcm9zKSB7CiAgICAvLyByZXN1bHQgYXJyYXlzCiAgICB2YXIgdmFsdWVzID0gW107CiAgICB2YXIgaW5kZXggPSBbXTsKICAgIHZhciBwdHIgPSBbXTsgLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZQoKICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlCgogICAgdmFyIHplcm8gPSAwOwoKICAgIGlmIChPYmplY3QoaXNbIkkiIC8qIGlzU3RyaW5nICovXSkobWF0cml4Ll9kYXRhdHlwZSkpIHsKICAgICAgLy8gZmluZCBzaWduYXR1cmUgdGhhdCBtYXRjaGVzIChkYXRhdHlwZSwgZGF0YXR5cGUpCiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW21hdHJpeC5fZGF0YXR5cGUsIG1hdHJpeC5fZGF0YXR5cGVdKSB8fCBlcXVhbFNjYWxhcjsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlCgogICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBtYXRyaXguX2RhdGF0eXBlKTsKICAgIH0gLy8gaW52b2tlIGNhbGxiYWNrCgoKICAgIHZhciBpbnZva2UgPSBmdW5jdGlvbiBpbnZva2UodiwgeCwgeSkgewogICAgICAvLyBpbnZva2UgY2FsbGJhY2sKICAgICAgdiA9IGNhbGxiYWNrKHYsIHgsIHkpOyAvLyBjaGVjayB2YWx1ZSAhPSAwCgogICAgICBpZiAoIWVxKHYsIHplcm8pKSB7CiAgICAgICAgLy8gc3RvcmUgdmFsdWUKICAgICAgICB2YWx1ZXMucHVzaCh2KTsgLy8gaW5kZXgKCiAgICAgICAgaW5kZXgucHVzaCh4KTsKICAgICAgfQogICAgfTsgLy8gbG9vcCBjb2x1bW5zCgoKICAgIGZvciAodmFyIGogPSBtaW5Db2x1bW47IGogPD0gbWF4Q29sdW1uOyBqKyspIHsKICAgICAgLy8gc3RvcmUgcG9pbnRlciB0byB2YWx1ZXMgaW5kZXgKICAgICAgcHRyLnB1c2godmFsdWVzLmxlbmd0aCk7IC8vIGswIDw9IGsgPCBrMSB3aGVyZSBrMCA9IF9wdHJbal0gJiYgazEgPSBfcHRyW2orMV0KCiAgICAgIHZhciBrMCA9IG1hdHJpeC5fcHRyW2pdOwogICAgICB2YXIgazEgPSBtYXRyaXguX3B0cltqICsgMV07CgogICAgICBpZiAoc2tpcFplcm9zKSB7CiAgICAgICAgLy8gbG9vcCBrIHdpdGhpbiBbazAsIGsxWwogICAgICAgIGZvciAodmFyIGsgPSBrMDsgayA8IGsxOyBrKyspIHsKICAgICAgICAgIC8vIHJvdyBpbmRleAogICAgICAgICAgdmFyIGkgPSBtYXRyaXguX2luZGV4W2tdOyAvLyBjaGVjayBpIGlzIGluIHJhbmdlCgogICAgICAgICAgaWYgKGkgPj0gbWluUm93ICYmIGkgPD0gbWF4Um93KSB7CiAgICAgICAgICAgIC8vIHZhbHVlIEAgawogICAgICAgICAgICBpbnZva2UobWF0cml4Ll92YWx1ZXNba10sIGkgLSBtaW5Sb3csIGogLSBtaW5Db2x1bW4pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBjcmVhdGUgYSBjYWNoZSBob2xkaW5nIGFsbCBkZWZpbmVkIHZhbHVlcwogICAgICAgIHZhciBfdmFsdWVzID0ge307CgogICAgICAgIGZvciAodmFyIF9rID0gazA7IF9rIDwgazE7IF9rKyspIHsKICAgICAgICAgIHZhciBfaTQgPSBtYXRyaXguX2luZGV4W19rXTsKICAgICAgICAgIF92YWx1ZXNbX2k0XSA9IG1hdHJpeC5fdmFsdWVzW19rXTsKICAgICAgICB9IC8vIGxvb3Agb3ZlciBhbGwgcm93cyAoaW5kZXhlcyBjYW4gYmUgdW5vcmRlcmVkIHNvIHdlIGNhbid0IHVzZSB0aGF0KSwKICAgICAgICAvLyBhbmQgZWl0aGVyIHJlYWQgdGhlIHZhbHVlIG9yIHplcm8KCgogICAgICAgIGZvciAodmFyIF9pNSA9IG1pblJvdzsgX2k1IDw9IG1heFJvdzsgX2k1KyspIHsKICAgICAgICAgIHZhciB2YWx1ZSA9IF9pNSBpbiBfdmFsdWVzID8gX3ZhbHVlc1tfaTVdIDogMDsKICAgICAgICAgIGludm9rZSh2YWx1ZSwgX2k1IC0gbWluUm93LCBqIC0gbWluQ29sdW1uKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gLy8gc3RvcmUgbnVtYmVyIG9mIHZhbHVlcyBpbiBwdHIKCgogICAgcHRyLnB1c2godmFsdWVzLmxlbmd0aCk7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4CgogICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgoewogICAgICB2YWx1ZXM6IHZhbHVlcywKICAgICAgaW5kZXg6IGluZGV4LAogICAgICBwdHI6IHB0ciwKICAgICAgc2l6ZTogW21heFJvdyAtIG1pblJvdyArIDEsIG1heENvbHVtbiAtIG1pbkNvbHVtbiArIDFdCiAgICB9KTsKICB9CiAgLyoqCiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9uIGVhY2ggZW50cnkgb2YgdGhlIG1hdHJpeC4KICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4CiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRocmVlCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGVsZW1lbnQsIGFuZCB0aGUgTWF0cml4IGJlaW5nIHRyYXZlcnNlZC4KICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwWmVyb3NdIEludm9rZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igbm9uLXplcm8gdmFsdWVzIG9ubHkuCiAgICovCgoKICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHNraXBaZXJvcykgewogICAgLy8gY2hlY2sgaXQgaXMgYSBwYXR0ZXJuIG1hdHJpeAogICAgaWYgKCF0aGlzLl92YWx1ZXMpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGZvckVhY2ggb24gYSBQYXR0ZXJuIG9ubHkgbWF0cml4Jyk7CiAgICB9IC8vIG1hdHJpeCBpbnN0YW5jZQoKCiAgICB2YXIgbWUgPSB0aGlzOyAvLyByb3dzIGFuZCBjb2x1bW5zCgogICAgdmFyIHJvd3MgPSB0aGlzLl9zaXplWzBdOwogICAgdmFyIGNvbHVtbnMgPSB0aGlzLl9zaXplWzFdOyAvLyBsb29wIGNvbHVtbnMKCiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykgewogICAgICAvLyBrMCA8PSBrIDwgazEgd2hlcmUgazAgPSBfcHRyW2pdICYmIGsxID0gX3B0cltqKzFdCiAgICAgIHZhciBrMCA9IHRoaXMuX3B0cltqXTsKICAgICAgdmFyIGsxID0gdGhpcy5fcHRyW2ogKyAxXTsKCiAgICAgIGlmIChza2lwWmVyb3MpIHsKICAgICAgICAvLyBsb29wIGsgd2l0aGluIFtrMCwgazFbCiAgICAgICAgZm9yICh2YXIgayA9IGswOyBrIDwgazE7IGsrKykgewogICAgICAgICAgLy8gcm93IGluZGV4CiAgICAgICAgICB2YXIgaSA9IHRoaXMuX2luZGV4W2tdOyAvLyB2YWx1ZSBAIGsKCiAgICAgICAgICBjYWxsYmFjayh0aGlzLl92YWx1ZXNba10sIFtpLCBqXSwgbWUpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBjcmVhdGUgYSBjYWNoZSBob2xkaW5nIGFsbCBkZWZpbmVkIHZhbHVlcwogICAgICAgIHZhciB2YWx1ZXMgPSB7fTsKCiAgICAgICAgZm9yICh2YXIgX2syID0gazA7IF9rMiA8IGsxOyBfazIrKykgewogICAgICAgICAgdmFyIF9pNiA9IHRoaXMuX2luZGV4W19rMl07CiAgICAgICAgICB2YWx1ZXNbX2k2XSA9IHRoaXMuX3ZhbHVlc1tfazJdOwogICAgICAgIH0gLy8gbG9vcCBvdmVyIGFsbCByb3dzIChpbmRleGVzIGNhbiBiZSB1bm9yZGVyZWQgc28gd2UgY2FuJ3QgdXNlIHRoYXQpLAogICAgICAgIC8vIGFuZCBlaXRoZXIgcmVhZCB0aGUgdmFsdWUgb3IgemVybwoKCiAgICAgICAgZm9yICh2YXIgX2k3ID0gMDsgX2k3IDwgcm93czsgX2k3KyspIHsKICAgICAgICAgIHZhciB2YWx1ZSA9IF9pNyBpbiB2YWx1ZXMgPyB2YWx1ZXNbX2k3XSA6IDA7CiAgICAgICAgICBjYWxsYmFjayh2YWx1ZSwgW19pNywgal0sIG1lKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9OwogIC8qKgogICAqIENyZWF0ZSBhbiBBcnJheSB3aXRoIGEgY29weSBvZiB0aGUgZGF0YSBvZiB0aGUgU3BhcnNlTWF0cml4CiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeAogICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXkKICAgKi8KCgogIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiBfdG9BcnJheSh0aGlzLl92YWx1ZXMsIHRoaXMuX2luZGV4LCB0aGlzLl9wdHIsIHRoaXMuX3NpemUsIHRydWUpOwogIH07CiAgLyoqCiAgICogR2V0IHRoZSBwcmltaXRpdmUgdmFsdWUgb2YgdGhlIFNwYXJzZU1hdHJpeDogYSB0d28gZGltZW5zaW9ucyBhcnJheQogICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXgKICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5CiAgICovCgoKICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gX3RvQXJyYXkodGhpcy5fdmFsdWVzLCB0aGlzLl9pbmRleCwgdGhpcy5fcHRyLCB0aGlzLl9zaXplLCBmYWxzZSk7CiAgfTsKCiAgZnVuY3Rpb24gX3RvQXJyYXkodmFsdWVzLCBpbmRleCwgcHRyLCBzaXplLCBjb3B5KSB7CiAgICAvLyByb3dzIGFuZCBjb2x1bW5zCiAgICB2YXIgcm93cyA9IHNpemVbMF07CiAgICB2YXIgY29sdW1ucyA9IHNpemVbMV07IC8vIHJlc3VsdAoKICAgIHZhciBhID0gW107IC8vIHZhcnMKCiAgICB2YXIgaSwgajsgLy8gaW5pdGlhbGl6ZSBhcnJheQoKICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHsKICAgICAgYVtpXSA9IFtdOwoKICAgICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykgewogICAgICAgIGFbaV1bal0gPSAwOwogICAgICB9CiAgICB9IC8vIGxvb3AgY29sdW1ucwoKCiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7CiAgICAgIC8vIGswIDw9IGsgPCBrMSB3aGVyZSBrMCA9IF9wdHJbal0gJiYgazEgPSBfcHRyW2orMV0KICAgICAgdmFyIGswID0gcHRyW2pdOwogICAgICB2YXIgazEgPSBwdHJbaiArIDFdOyAvLyBsb29wIGsgd2l0aGluIFtrMCwgazFbCgogICAgICBmb3IgKHZhciBrID0gazA7IGsgPCBrMTsgaysrKSB7CiAgICAgICAgLy8gcm93IGluZGV4CiAgICAgICAgaSA9IGluZGV4W2tdOyAvLyBzZXQgdmFsdWUgKHVzZSBvbmUgZm9yIHBhdHRlcm4gbWF0cml4KQoKICAgICAgICBhW2ldW2pdID0gdmFsdWVzID8gY29weSA/IE9iamVjdCh1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSkodmFsdWVzW2tdKSA6IHZhbHVlc1trXSA6IDE7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gYTsKICB9CiAgLyoqCiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXgsIHdpdGggb3B0aW9uYWwgZm9ybWF0dGluZyBvcHRpb25zLgogICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXgKICAgKiBAcGFyYW0ge09iamVjdCB8IG51bWJlciB8IEZ1bmN0aW9ufSBbb3B0aW9uc10gIEZvcm1hdHRpbmcgb3B0aW9ucy4gU2VlCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy4KICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHIKICAgKi8KCgogIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgIC8vIHJvd3MgYW5kIGNvbHVtbnMKICAgIHZhciByb3dzID0gdGhpcy5fc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gdGhpcy5fc2l6ZVsxXTsgLy8gZGVuc2l0eQoKICAgIHZhciBkZW5zaXR5ID0gdGhpcy5kZW5zaXR5KCk7IC8vIHJvd3MgJiBjb2x1bW5zCgogICAgdmFyIHN0ciA9ICdTcGFyc2UgTWF0cml4IFsnICsgT2JqZWN0KHV0aWxzX3N0cmluZ1siZCIgLyogZm9ybWF0ICovXSkocm93cywgb3B0aW9ucykgKyAnIHggJyArIE9iamVjdCh1dGlsc19zdHJpbmdbImQiIC8qIGZvcm1hdCAqL10pKGNvbHVtbnMsIG9wdGlvbnMpICsgJ10gZGVuc2l0eTogJyArIE9iamVjdCh1dGlsc19zdHJpbmdbImQiIC8qIGZvcm1hdCAqL10pKGRlbnNpdHksIG9wdGlvbnMpICsgJ1xuJzsgLy8gbG9vcCBjb2x1bW5zCgogICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHsKICAgICAgLy8gazAgPD0gayA8IGsxIHdoZXJlIGswID0gX3B0cltqXSAmJiBrMSA9IF9wdHJbaisxXQogICAgICB2YXIgazAgPSB0aGlzLl9wdHJbal07CiAgICAgIHZhciBrMSA9IHRoaXMuX3B0cltqICsgMV07IC8vIGxvb3AgayB3aXRoaW4gW2swLCBrMVsKCiAgICAgIGZvciAodmFyIGsgPSBrMDsgayA8IGsxOyBrKyspIHsKICAgICAgICAvLyByb3cgaW5kZXgKICAgICAgICB2YXIgaSA9IHRoaXMuX2luZGV4W2tdOyAvLyBhcHBlbmQgdmFsdWUKCiAgICAgICAgc3RyICs9ICdcbiAgICAoJyArIE9iamVjdCh1dGlsc19zdHJpbmdbImQiIC8qIGZvcm1hdCAqL10pKGksIG9wdGlvbnMpICsgJywgJyArIE9iamVjdCh1dGlsc19zdHJpbmdbImQiIC8qIGZvcm1hdCAqL10pKGosIG9wdGlvbnMpICsgJykgPT0+ICcgKyAodGhpcy5fdmFsdWVzID8gT2JqZWN0KHV0aWxzX3N0cmluZ1siZCIgLyogZm9ybWF0ICovXSkodGhpcy5fdmFsdWVzW2tdLCBvcHRpb25zKSA6ICdYJyk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gc3RyOwogIH07CiAgLyoqCiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXgKICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4CiAgICogQHJldHVybnMge3N0cmluZ30gc3RyCiAgICovCgoKICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIE9iamVjdCh1dGlsc19zdHJpbmdbImQiIC8qIGZvcm1hdCAqL10pKHRoaXMudG9BcnJheSgpKTsKICB9OwogIC8qKgogICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeAogICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXgKICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAqLwoKCiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gewogICAgICBtYXRoanM6ICdTcGFyc2VNYXRyaXgnLAogICAgICB2YWx1ZXM6IHRoaXMuX3ZhbHVlcywKICAgICAgaW5kZXg6IHRoaXMuX2luZGV4LAogICAgICBwdHI6IHRoaXMuX3B0ciwKICAgICAgc2l6ZTogdGhpcy5fc2l6ZSwKICAgICAgZGF0YXR5cGU6IHRoaXMuX2RhdGF0eXBlCiAgICB9OwogIH07CiAgLyoqCiAgICogR2V0IHRoZSBrdGggTWF0cml4IGRpYWdvbmFsLgogICAqCiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeAogICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBbaz0wXSAgICAgVGhlIGt0aCBkaWFnb25hbCB3aGVyZSB0aGUgdmVjdG9yIHdpbGwgcmV0cmlldmVkLgogICAqCiAgICogQHJldHVybnMge01hdHJpeH0gICAgICAgICAgICAgICAgICAgICBUaGUgbWF0cml4IHZlY3RvciB3aXRoIHRoZSBkaWFnb25hbCB2YWx1ZXMuCiAgICovCgoKICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmRpYWdvbmFsID0gZnVuY3Rpb24gKGspIHsKICAgIC8vIHZhbGlkYXRlIGsgaWYgYW55CiAgICBpZiAoaykgewogICAgICAvLyBjb252ZXJ0IEJpZ051bWJlciB0byBhIG51bWJlcgogICAgICBpZiAoT2JqZWN0KGlzWyJlIiAvKiBpc0JpZ051bWJlciAqL10pKGspKSB7CiAgICAgICAgayA9IGsudG9OdW1iZXIoKTsKICAgICAgfSAvLyBpcyBtdXN0IGJlIGFuIGludGVnZXIKCgogICAgICBpZiAoIU9iamVjdChpc1sieSIgLyogaXNOdW1iZXIgKi9dKShrKSB8fCAhT2JqZWN0KHV0aWxzX251bWJlclsiaSIgLyogaXNJbnRlZ2VyICovXSkoaykpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgcGFyYW1ldGVyIGsgbXVzdCBiZSBhbiBpbnRlZ2VyIG51bWJlcicpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBkZWZhdWx0IHZhbHVlCiAgICAgIGsgPSAwOwogICAgfQoKICAgIHZhciBrU3VwZXIgPSBrID4gMCA/IGsgOiAwOwogICAgdmFyIGtTdWIgPSBrIDwgMCA/IC1rIDogMDsgLy8gcm93cyAmIGNvbHVtbnMKCiAgICB2YXIgcm93cyA9IHRoaXMuX3NpemVbMF07CiAgICB2YXIgY29sdW1ucyA9IHRoaXMuX3NpemVbMV07IC8vIG51bWJlciBkaWFnb25hbCB2YWx1ZXMKCiAgICB2YXIgbiA9IE1hdGgubWluKHJvd3MgLSBrU3ViLCBjb2x1bW5zIC0ga1N1cGVyKTsgLy8gZGlhZ29uYWwgYXJyYXlzCgogICAgdmFyIHZhbHVlcyA9IFtdOwogICAgdmFyIGluZGV4ID0gW107CiAgICB2YXIgcHRyID0gW107IC8vIGluaXRpYWwgcHRyIHZhbHVlCgogICAgcHRyWzBdID0gMDsgLy8gbG9vcCBjb2x1bW5zCgogICAgZm9yICh2YXIgaiA9IGtTdXBlcjsgaiA8IGNvbHVtbnMgJiYgdmFsdWVzLmxlbmd0aCA8IG47IGorKykgewogICAgICAvLyBrMCA8PSBrIDwgazEgd2hlcmUgazAgPSBfcHRyW2pdICYmIGsxID0gX3B0cltqKzFdCiAgICAgIHZhciBrMCA9IHRoaXMuX3B0cltqXTsKICAgICAgdmFyIGsxID0gdGhpcy5fcHRyW2ogKyAxXTsgLy8gbG9vcCB4IHdpdGhpbiBbazAsIGsxWwoKICAgICAgZm9yICh2YXIgeCA9IGswOyB4IDwgazE7IHgrKykgewogICAgICAgIC8vIHJvdyBpbmRleAogICAgICAgIHZhciBpID0gdGhpcy5faW5kZXhbeF07IC8vIGNoZWNrIHJvdwoKICAgICAgICBpZiAoaSA9PT0gaiAtIGtTdXBlciArIGtTdWIpIHsKICAgICAgICAgIC8vIHZhbHVlIG9uIHRoaXMgY29sdW1uCiAgICAgICAgICB2YWx1ZXMucHVzaCh0aGlzLl92YWx1ZXNbeF0pOyAvLyBzdG9yZSByb3cKCiAgICAgICAgICBpbmRleFt2YWx1ZXMubGVuZ3RoIC0gMV0gPSBpIC0ga1N1YjsgLy8gZXhpdCBsb29wCgogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9IC8vIGNsb3NlIHB0cgoKCiAgICBwdHIucHVzaCh2YWx1ZXMubGVuZ3RoKTsgLy8gcmV0dXJuIG1hdHJpeAoKICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KHsKICAgICAgdmFsdWVzOiB2YWx1ZXMsCiAgICAgIGluZGV4OiBpbmRleCwKICAgICAgcHRyOiBwdHIsCiAgICAgIHNpemU6IFtuLCAxXQogICAgfSk7CiAgfTsKICAvKioKICAgKiBHZW5lcmF0ZSBhIG1hdHJpeCBmcm9tIGEgSlNPTiBvYmplY3QKICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4CiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2UKICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHsibWF0aGpzIjogIlNwYXJzZU1hdHJpeCIsICJ2YWx1ZXMiOiBbXSwgImluZGV4IjogW10sICJwdHIiOiBbXSwgInNpemUiOiBbXX1gLAogICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWwKICAgKiBAcmV0dXJucyB7U3BhcnNlTWF0cml4fQogICAqLwoKCiAgU3BhcnNlTWF0cml4LmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHsKICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGpzb24pOwogIH07CiAgLyoqCiAgICogQ3JlYXRlIGEgZGlhZ29uYWwgbWF0cml4LgogICAqCiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeAogICAqIEBwYXJhbSB7QXJyYXl9IHNpemUgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXRyaXggc2l6ZS4KICAgKiBAcGFyYW0ge251bWJlciB8IEFycmF5IHwgTWF0cml4IH0gdmFsdWUgICBUaGUgdmFsdWVzIGZvciB0aGUgZGlhZ29uYWwuCiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFtrPTBdICAgICAgICAgVGhlIGt0aCBkaWFnb25hbCB3aGVyZSB0aGUgdmVjdG9yIHdpbGwgYmUgZmlsbGVkIGluLgogICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVmYXVsdFZhbHVlXSAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBub24tZGlhZ29uYWwKICAgKiBAcGFyYW0ge3N0cmluZ30gW2RhdGF0eXBlXSAgICAgICAgICAgICAgICBUaGUgTWF0cml4IGRhdGF0eXBlLCB2YWx1ZXMgbXVzdCBiZSBvZiB0aGlzIGRhdGF0eXBlLgogICAqCiAgICogQHJldHVybnMge1NwYXJzZU1hdHJpeH0KICAgKi8KCgogIFNwYXJzZU1hdHJpeC5kaWFnb25hbCA9IGZ1bmN0aW9uIChzaXplLCB2YWx1ZSwgaywgZGVmYXVsdFZhbHVlLCBkYXRhdHlwZSkgewogICAgaWYgKCFPYmplY3QoaXNbImIiIC8qIGlzQXJyYXkgKi9dKShzaXplKSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCwgc2l6ZSBwYXJhbWV0ZXInKTsKICAgIH0KCiAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHR3byBkaW1lbnNpb25zIG1hdHJpeCBhcmUgc3VwcG9ydGVkJyk7CiAgICB9IC8vIG1hcCBzaXplICYgdmFsaWRhdGUKCgogICAgc2l6ZSA9IHNpemUubWFwKGZ1bmN0aW9uIChzKSB7CiAgICAgIC8vIGNoZWNrIGl0IGlzIGEgYmlnIG51bWJlcgogICAgICBpZiAoT2JqZWN0KGlzWyJlIiAvKiBpc0JpZ051bWJlciAqL10pKHMpKSB7CiAgICAgICAgLy8gY29udmVydCBpdAogICAgICAgIHMgPSBzLnRvTnVtYmVyKCk7CiAgICAgIH0gLy8gdmFsaWRhdGUgYXJndW1lbnRzCgoKICAgICAgaWYgKCFPYmplY3QoaXNbInkiIC8qIGlzTnVtYmVyICovXSkocykgfHwgIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKHMpIHx8IHMgPCAxKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaXplIHZhbHVlcyBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiBzOwogICAgfSk7IC8vIHZhbGlkYXRlIGsgaWYgYW55CgogICAgaWYgKGspIHsKICAgICAgLy8gY29udmVydCBCaWdOdW1iZXIgdG8gYSBudW1iZXIKICAgICAgaWYgKE9iamVjdChpc1siZSIgLyogaXNCaWdOdW1iZXIgKi9dKShrKSkgewogICAgICAgIGsgPSBrLnRvTnVtYmVyKCk7CiAgICAgIH0gLy8gaXMgbXVzdCBiZSBhbiBpbnRlZ2VyCgoKICAgICAgaWYgKCFPYmplY3QoaXNbInkiIC8qIGlzTnVtYmVyICovXSkoaykgfHwgIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKGspKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHBhcmFtZXRlciBrIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXInKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gZGVmYXVsdCB2YWx1ZQogICAgICBrID0gMDsKICAgIH0gLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZQoKCiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZQoKICAgIHZhciB6ZXJvID0gMDsKCiAgICBpZiAoT2JqZWN0KGlzWyJJIiAvKiBpc1N0cmluZyAqL10pKGRhdGF0eXBlKSkgewogICAgICAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGRhdGF0eXBlLCBkYXRhdHlwZSkKICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbZGF0YXR5cGUsIGRhdGF0eXBlXSkgfHwgZXF1YWxTY2FsYXI7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZQoKICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZGF0YXR5cGUpOwogICAgfQoKICAgIHZhciBrU3VwZXIgPSBrID4gMCA/IGsgOiAwOwogICAgdmFyIGtTdWIgPSBrIDwgMCA/IC1rIDogMDsgLy8gcm93cyBhbmQgY29sdW1ucwoKICAgIHZhciByb3dzID0gc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gc2l6ZVsxXTsgLy8gbnVtYmVyIG9mIG5vbi16ZXJvIGl0ZW1zCgogICAgdmFyIG4gPSBNYXRoLm1pbihyb3dzIC0ga1N1YiwgY29sdW1ucyAtIGtTdXBlcik7IC8vIHZhbHVlIGV4dHJhY3Rpb24gZnVuY3Rpb24KCiAgICB2YXIgX3ZhbHVlOyAvLyBjaGVjayB2YWx1ZQoKCiAgICBpZiAoT2JqZWN0KGlzWyJiIiAvKiBpc0FycmF5ICovXSkodmFsdWUpKSB7CiAgICAgIC8vIHZhbGlkYXRlIGFycmF5CiAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IG4pIHsKICAgICAgICAvLyBudW1iZXIgb2YgdmFsdWVzIGluIGFycmF5IG11c3QgYmUgbgogICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB2YWx1ZSBhcnJheSBsZW5ndGgnKTsKICAgICAgfSAvLyBkZWZpbmUgZnVuY3Rpb24KCgogICAgICBfdmFsdWUgPSBmdW5jdGlvbiBfdmFsdWUoaSkgewogICAgICAgIC8vIHJldHVybiB2YWx1ZSBAIGkKICAgICAgICByZXR1cm4gdmFsdWVbaV07CiAgICAgIH07CiAgICB9IGVsc2UgaWYgKE9iamVjdChpc1sidiIgLyogaXNNYXRyaXggKi9dKSh2YWx1ZSkpIHsKICAgICAgLy8gbWF0cml4IHNpemUKICAgICAgdmFyIG1zID0gdmFsdWUuc2l6ZSgpOyAvLyB2YWxpZGF0ZSBtYXRyaXgKCiAgICAgIGlmIChtcy5sZW5ndGggIT09IDEgfHwgbXNbMF0gIT09IG4pIHsKICAgICAgICAvLyBudW1iZXIgb2YgdmFsdWVzIGluIGFycmF5IG11c3QgYmUgbgogICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXRyaXggbGVuZ3RoJyk7CiAgICAgIH0gLy8gZGVmaW5lIGZ1bmN0aW9uCgoKICAgICAgX3ZhbHVlID0gZnVuY3Rpb24gX3ZhbHVlKGkpIHsKICAgICAgICAvLyByZXR1cm4gdmFsdWUgQCBpCiAgICAgICAgcmV0dXJuIHZhbHVlLmdldChbaV0pOwogICAgICB9OwogICAgfSBlbHNlIHsKICAgICAgLy8gZGVmaW5lIGZ1bmN0aW9uCiAgICAgIF92YWx1ZSA9IGZ1bmN0aW9uIF92YWx1ZSgpIHsKICAgICAgICAvLyByZXR1cm4gdmFsdWUKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgIH07CiAgICB9IC8vIGNyZWF0ZSBhcnJheXMKCgogICAgdmFyIHZhbHVlcyA9IFtdOwogICAgdmFyIGluZGV4ID0gW107CiAgICB2YXIgcHRyID0gW107IC8vIGxvb3AgaXRlbXMKCiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykgewogICAgICAvLyBudW1iZXIgb2Ygcm93cyB3aXRoIHZhbHVlCiAgICAgIHB0ci5wdXNoKHZhbHVlcy5sZW5ndGgpOyAvLyBkaWFnb25hbCBpbmRleAoKICAgICAgdmFyIGkgPSBqIC0ga1N1cGVyOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHNldCBkaWFnb25hbCB2YWx1ZQoKICAgICAgaWYgKGkgPj0gMCAmJiBpIDwgbikgewogICAgICAgIC8vIGdldCB2YWx1ZSBAIGkKICAgICAgICB2YXIgdiA9IF92YWx1ZShpKTsgLy8gY2hlY2sgZm9yIHplcm8KCgogICAgICAgIGlmICghZXEodiwgemVybykpIHsKICAgICAgICAgIC8vIGNvbHVtbgogICAgICAgICAgaW5kZXgucHVzaChpICsga1N1Yik7IC8vIGFkZCB2YWx1ZQoKICAgICAgICAgIHZhbHVlcy5wdXNoKHYpOwogICAgICAgIH0KICAgICAgfQogICAgfSAvLyBsYXN0IHZhbHVlIHNob3VsZCBiZSBudW1iZXIgb2YgdmFsdWVzCgoKICAgIHB0ci5wdXNoKHZhbHVlcy5sZW5ndGgpOyAvLyBjcmVhdGUgU3BhcnNlTWF0cml4CgogICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgoewogICAgICB2YWx1ZXM6IHZhbHVlcywKICAgICAgaW5kZXg6IGluZGV4LAogICAgICBwdHI6IHB0ciwKICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdCiAgICB9KTsKICB9OwogIC8qKgogICAqIFN3YXAgcm93cyBpIGFuZCBqIGluIE1hdHJpeC4KICAgKgogICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXgKICAgKiBAcGFyYW0ge251bWJlcn0gaSAgICAgICBNYXRyaXggcm93IGluZGV4IDEKICAgKiBAcGFyYW0ge251bWJlcn0gaiAgICAgICBNYXRyaXggcm93IGluZGV4IDIKICAgKgogICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgIFRoZSBtYXRyaXggcmVmZXJlbmNlCiAgICovCgoKICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLnN3YXBSb3dzID0gZnVuY3Rpb24gKGksIGopIHsKICAgIC8vIGNoZWNrIGluZGV4CiAgICBpZiAoIU9iamVjdChpc1sieSIgLyogaXNOdW1iZXIgKi9dKShpKSB8fCAhT2JqZWN0KHV0aWxzX251bWJlclsiaSIgLyogaXNJbnRlZ2VyICovXSkoaSkgfHwgIU9iamVjdChpc1sieSIgLyogaXNOdW1iZXIgKi9dKShqKSB8fCAhT2JqZWN0KHV0aWxzX251bWJlclsiaSIgLyogaXNJbnRlZ2VyICovXSkoaikpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb3cgaW5kZXggbXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VycycpOwogICAgfSAvLyBjaGVjayBkaW1lbnNpb25zCgoKICAgIGlmICh0aGlzLl9zaXplLmxlbmd0aCAhPT0gMikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgdHdvIGRpbWVuc2lvbmFsIG1hdHJpeCBpcyBzdXBwb3J0ZWQnKTsKICAgIH0gLy8gdmFsaWRhdGUgaW5kZXgKCgogICAgT2JqZWN0KHV0aWxzX2FycmF5WyJzIiAvKiB2YWxpZGF0ZUluZGV4ICovXSkoaSwgdGhpcy5fc2l6ZVswXSk7CiAgICBPYmplY3QodXRpbHNfYXJyYXlbInMiIC8qIHZhbGlkYXRlSW5kZXggKi9dKShqLCB0aGlzLl9zaXplWzBdKTsgLy8gc3dhcCByb3dzCgogICAgU3BhcnNlTWF0cml4Ll9zd2FwUm93cyhpLCBqLCB0aGlzLl9zaXplWzFdLCB0aGlzLl92YWx1ZXMsIHRoaXMuX2luZGV4LCB0aGlzLl9wdHIpOyAvLyByZXR1cm4gY3VycmVudCBpbnN0YW5jZQoKCiAgICByZXR1cm4gdGhpczsKICB9OwogIC8qKgogICAqIExvb3Agcm93cyB3aXRoIGRhdGEgaW4gY29sdW1uIGouCiAgICoKICAgKiBAcGFyYW0ge251bWJlcn0gaiAgICAgICAgICAgIENvbHVtbgogICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyAgICAgICAgTWF0cml4IHZhbHVlcwogICAqIEBwYXJhbSB7QXJyYXl9IGluZGV4ICAgICAgICAgTWF0cml4IHJvdyBpbmRlY2VzCiAgICogQHBhcmFtIHtBcnJheX0gcHRyICAgICAgICAgICBNYXRyaXggY29sdW1uIHBvaW50ZXJzCiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIGZvciBldmVyeSByb3cgaW4gY29sdW1uIGoKICAgKi8KCgogIFNwYXJzZU1hdHJpeC5fZm9yRWFjaFJvdyA9IGZ1bmN0aW9uIChqLCB2YWx1ZXMsIGluZGV4LCBwdHIsIGNhbGxiYWNrKSB7CiAgICAvLyBpbmRlY2VzIGZvciBjb2x1bW4gagogICAgdmFyIGswID0gcHRyW2pdOwogICAgdmFyIGsxID0gcHRyW2ogKyAxXTsgLy8gbG9vcAoKICAgIGZvciAodmFyIGsgPSBrMDsgayA8IGsxOyBrKyspIHsKICAgICAgLy8gaW52b2tlIGNhbGxiYWNrCiAgICAgIGNhbGxiYWNrKGluZGV4W2tdLCB2YWx1ZXNba10pOwogICAgfQogIH07CiAgLyoqCiAgICogU3dhcCByb3dzIHggYW5kIHkgaW4gU3BhcnNlIE1hdHJpeCBkYXRhIHN0cnVjdHVyZXMuCiAgICoKICAgKiBAcGFyYW0ge251bWJlcn0geCAgICAgICAgIE1hdHJpeCByb3cgaW5kZXggMQogICAqIEBwYXJhbSB7bnVtYmVyfSB5ICAgICAgICAgTWF0cml4IHJvdyBpbmRleCAyCiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbnMgICBOdW1iZXIgb2YgY29sdW1ucyBpbiBtYXRyaXgKICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgICAgIE1hdHJpeCB2YWx1ZXMKICAgKiBAcGFyYW0ge0FycmF5fSBpbmRleCAgICAgIE1hdHJpeCByb3cgaW5kZWNlcwogICAqIEBwYXJhbSB7QXJyYXl9IHB0ciAgICAgICAgTWF0cml4IGNvbHVtbiBwb2ludGVycwogICAqLwoKCiAgU3BhcnNlTWF0cml4Ll9zd2FwUm93cyA9IGZ1bmN0aW9uICh4LCB5LCBjb2x1bW5zLCB2YWx1ZXMsIGluZGV4LCBwdHIpIHsKICAgIC8vIGxvb3AgY29sdW1ucwogICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHsKICAgICAgLy8gazAgPD0gayA8IGsxIHdoZXJlIGswID0gX3B0cltqXSAmJiBrMSA9IF9wdHJbaisxXQogICAgICB2YXIgazAgPSBwdHJbal07CiAgICAgIHZhciBrMSA9IHB0cltqICsgMV07IC8vIGZpbmQgdmFsdWUgaW5kZXggQCB4CgogICAgICB2YXIga3ggPSBfZ2V0VmFsdWVJbmRleCh4LCBrMCwgazEsIGluZGV4KTsgLy8gZmluZCB2YWx1ZSBpbmRleCBAIHgKCgogICAgICB2YXIga3kgPSBfZ2V0VmFsdWVJbmRleCh5LCBrMCwgazEsIGluZGV4KTsgLy8gY2hlY2sgYm90aCByb3dzIGV4aXN0IGluIG1hdHJpeAoKCiAgICAgIGlmIChreCA8IGsxICYmIGt5IDwgazEgJiYgaW5kZXhba3hdID09PSB4ICYmIGluZGV4W2t5XSA9PT0geSkgewogICAgICAgIC8vIHN3YXAgdmFsdWVzIChjaGVjayBmb3IgcGF0dGVybiBtYXRyaXgpCiAgICAgICAgaWYgKHZhbHVlcykgewogICAgICAgICAgdmFyIHYgPSB2YWx1ZXNba3hdOwogICAgICAgICAgdmFsdWVzW2t4XSA9IHZhbHVlc1treV07CiAgICAgICAgICB2YWx1ZXNba3ldID0gdjsKICAgICAgICB9IC8vIG5leHQgY29sdW1uCgoKICAgICAgICBjb250aW51ZTsKICAgICAgfSAvLyBjaGVjayB4IHJvdyBleGlzdCAmIG5vIHkgcm93CgoKICAgICAgaWYgKGt4IDwgazEgJiYgaW5kZXhba3hdID09PSB4ICYmIChreSA+PSBrMSB8fCBpbmRleFtreV0gIT09IHkpKSB7CiAgICAgICAgLy8gdmFsdWUgQCB4IChjaGVjayBmb3IgcGF0dGVybiBtYXRyaXgpCiAgICAgICAgdmFyIHZ4ID0gdmFsdWVzID8gdmFsdWVzW2t4XSA6IHVuZGVmaW5lZDsgLy8gaW5zZXJ0IHZhbHVlIEAgeQoKICAgICAgICBpbmRleC5zcGxpY2Uoa3ksIDAsIHkpOwoKICAgICAgICBpZiAodmFsdWVzKSB7CiAgICAgICAgICB2YWx1ZXMuc3BsaWNlKGt5LCAwLCB2eCk7CiAgICAgICAgfSAvLyByZW1vdmUgdmFsdWUgQCB4IChhZGp1c3QgYXJyYXkgaW5kZXggaWYgbmVlZGVkKQoKCiAgICAgICAgaW5kZXguc3BsaWNlKGt5IDw9IGt4ID8ga3ggKyAxIDoga3gsIDEpOwoKICAgICAgICBpZiAodmFsdWVzKSB7CiAgICAgICAgICB2YWx1ZXMuc3BsaWNlKGt5IDw9IGt4ID8ga3ggKyAxIDoga3gsIDEpOwogICAgICAgIH0gLy8gbmV4dCBjb2x1bW4KCgogICAgICAgIGNvbnRpbnVlOwogICAgICB9IC8vIGNoZWNrIHkgcm93IGV4aXN0ICYgbm8geCByb3cKCgogICAgICBpZiAoa3kgPCBrMSAmJiBpbmRleFtreV0gPT09IHkgJiYgKGt4ID49IGsxIHx8IGluZGV4W2t4XSAhPT0geCkpIHsKICAgICAgICAvLyB2YWx1ZSBAIHkgKGNoZWNrIGZvciBwYXR0ZXJuIG1hdHJpeCkKICAgICAgICB2YXIgdnkgPSB2YWx1ZXMgPyB2YWx1ZXNba3ldIDogdW5kZWZpbmVkOyAvLyBpbnNlcnQgdmFsdWUgQCB4CgogICAgICAgIGluZGV4LnNwbGljZShreCwgMCwgeCk7CgogICAgICAgIGlmICh2YWx1ZXMpIHsKICAgICAgICAgIHZhbHVlcy5zcGxpY2Uoa3gsIDAsIHZ5KTsKICAgICAgICB9IC8vIHJlbW92ZSB2YWx1ZSBAIHkgKGFkanVzdCBhcnJheSBpbmRleCBpZiBuZWVkZWQpCgoKICAgICAgICBpbmRleC5zcGxpY2Uoa3ggPD0ga3kgPyBreSArIDEgOiBreSwgMSk7CgogICAgICAgIGlmICh2YWx1ZXMpIHsKICAgICAgICAgIHZhbHVlcy5zcGxpY2Uoa3ggPD0ga3kgPyBreSArIDEgOiBreSwgMSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfTsKCiAgcmV0dXJuIFNwYXJzZU1hdHJpeDsKfSwgewogIGlzQ2xhc3M6IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3R5cGUvbnVtYmVyLmpzCgoKdmFyIG51bWJlcl9uYW1lID0gJ251bWJlcic7CnZhciBudW1iZXJfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddOwp2YXIgY3JlYXRlTnVtYmVyID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkobnVtYmVyX25hbWUsIG51bWJlcl9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDsKCiAgLyoqCiAgICogQ3JlYXRlIGEgbnVtYmVyIG9yIGNvbnZlcnQgYSBzdHJpbmcsIGJvb2xlYW4sIG9yIHVuaXQgdG8gYSBudW1iZXIuCiAgICogV2hlbiB2YWx1ZSBpcyBhIG1hdHJpeCwgYWxsIGVsZW1lbnRzIHdpbGwgYmUgY29udmVydGVkIHRvIG51bWJlci4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGgubnVtYmVyKHZhbHVlKQogICAqICAgIG1hdGgubnVtYmVyKHVuaXQsIHZhbHVlbGVzc1VuaXQpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGgubnVtYmVyKDIpICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDIKICAgKiAgICBtYXRoLm51bWJlcignNy4yJykgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA3LjIKICAgKiAgICBtYXRoLm51bWJlcih0cnVlKSAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAxCiAgICogICAgbWF0aC5udW1iZXIoW3RydWUsIGZhbHNlLCB0cnVlLCB0cnVlXSkgLy8gcmV0dXJucyBbMSwgMCwgMSwgMV0KICAgKiAgICBtYXRoLm51bWJlcihtYXRoLnVuaXQoJzUyY20nKSwgJ20nKSAgICAvLyByZXR1cm5zIDAuNTIKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgYmlnbnVtYmVyLCBib29sZWFuLCBjb21wbGV4LCBpbmRleCwgbWF0cml4LCBzdHJpbmcsIHVuaXQKICAgKgogICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgQXJyYXkgfCBNYXRyaXggfCBVbml0IHwgbnVsbH0gW3ZhbHVlXSAgVmFsdWUgdG8gYmUgY29udmVydGVkCiAgICogQHBhcmFtIHtVbml0IHwgc3RyaW5nfSBbdmFsdWVsZXNzVW5pdF0gQSB2YWx1ZWxlc3MgdW5pdCwgdXNlZCB0byBjb252ZXJ0IGEgdW5pdCB0byBhIG51bWJlcgogICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSBUaGUgY3JlYXRlZCBudW1iZXIKICAgKi8KICB2YXIgbnVtYmVyID0gdHlwZWQoJ251bWJlcicsIHsKICAgICcnOiBmdW5jdGlvbiBfKCkgewogICAgICByZXR1cm4gMDsKICAgIH0sCiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7CiAgICAgIHJldHVybiB4OwogICAgfSwKICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHsKICAgICAgaWYgKHggPT09ICdOYU4nKSByZXR1cm4gTmFOOwogICAgICB2YXIgbnVtID0gTnVtYmVyKHgpOwoKICAgICAgaWYgKGlzTmFOKG51bSkpIHsKICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1N0cmluZyAiJyArIHggKyAnIiBpcyBubyB2YWxpZCBudW1iZXInKTsKICAgICAgfQoKICAgICAgcmV0dXJuIG51bTsKICAgIH0sCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiB4LnRvTnVtYmVyKCk7CiAgICB9LAogICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHsKICAgICAgcmV0dXJuIHgudmFsdWVPZigpOwogICAgfSwKICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY29uZCBhcmd1bWVudCB3aXRoIHZhbHVlbGVzcyB1bml0IGV4cGVjdGVkJyk7CiAgICB9LAogICAgIm51bGwiOiBmdW5jdGlvbiBfbnVsbCh4KSB7CiAgICAgIHJldHVybiAwOwogICAgfSwKICAgICdVbml0LCBzdHJpbmcgfCBVbml0JzogZnVuY3Rpb24gVW5pdFN0cmluZ1VuaXQodW5pdCwgdmFsdWVsZXNzVW5pdCkgewogICAgICByZXR1cm4gdW5pdC50b051bWJlcih2YWx1ZWxlc3NVbml0KTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIHJldHVybiBkZWVwTWFwKHgsIG51bWJlcik7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG51bWJlcjsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3R5cGUvc3RyaW5nLmpzCgoKCnZhciBzdHJpbmdfbmFtZSA9ICdzdHJpbmcnOwp2YXIgc3RyaW5nX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnXTsKdmFyIGNyZWF0ZVN0cmluZyA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHN0cmluZ19uYW1lLCBzdHJpbmdfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7CgogIC8qKgogICAqIENyZWF0ZSBhIHN0cmluZyBvciBjb252ZXJ0IGFueSBvYmplY3QgaW50byBhIHN0cmluZy4KICAgKiBFbGVtZW50cyBvZiBBcnJheXMgYW5kIE1hdHJpY2VzIGFyZSBwcm9jZXNzZWQgZWxlbWVudCB3aXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5zdHJpbmcodmFsdWUpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguc3RyaW5nKDQuMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIHN0cmluZyAnNC4yJwogICAqICAgIG1hdGguc3RyaW5nKG1hdGguY29tcGxleCgzLCAyKSAvLyByZXR1cm5zIHN0cmluZyAnMyArIDJpJwogICAqCiAgICogICAgY29uc3QgdSA9IG1hdGgudW5pdCg1LCAna20nKQogICAqICAgIG1hdGguc3RyaW5nKHUudG8oJ20nKSkgICAgICAgICAvLyByZXR1cm5zIHN0cmluZyAnNTAwMCBtJwogICAqCiAgICogICAgbWF0aC5zdHJpbmcoW3RydWUsIGZhbHNlXSkgICAgIC8vIHJldHVybnMgWyd0cnVlJywgJ2ZhbHNlJ10KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgYmlnbnVtYmVyLCBib29sZWFuLCBjb21wbGV4LCBpbmRleCwgbWF0cml4LCBudW1iZXIsIHVuaXQKICAgKgogICAqIEBwYXJhbSB7KiB8IEFycmF5IHwgTWF0cml4IHwgbnVsbH0gW3ZhbHVlXSAgQSB2YWx1ZSB0byBjb252ZXJ0IHRvIGEgc3RyaW5nCiAgICogQHJldHVybiB7c3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBjcmVhdGVkIHN0cmluZwogICAqLwogIHZhciBzdHJpbmcgPSB0eXBlZChzdHJpbmdfbmFtZSwgewogICAgJyc6IGZ1bmN0aW9uIF8oKSB7CiAgICAgIHJldHVybiAnJzsKICAgIH0sCiAgICBudW1iZXI6IHV0aWxzX251bWJlclsiaCIgLyogZm9ybWF0ICovXSwKICAgICJudWxsIjogZnVuY3Rpb24gX251bGwoeCkgewogICAgICByZXR1cm4gJ251bGwnOwogICAgfSwKICAgICJib29sZWFuIjogZnVuY3Rpb24gYm9vbGVhbih4KSB7CiAgICAgIHJldHVybiB4ICsgJyc7CiAgICB9LAogICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoeCkgewogICAgICByZXR1cm4geDsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIHJldHVybiBkZWVwTWFwKHgsIHN0cmluZyk7CiAgICB9LAogICAgYW55OiBmdW5jdGlvbiBhbnkoeCkgewogICAgICByZXR1cm4gU3RyaW5nKHgpOwogICAgfQogIH0pOwogIHJldHVybiBzdHJpbmc7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy90eXBlL2Jvb2xlYW4uanMKCgp2YXIgYm9vbGVhbl9uYW1lID0gJ2Jvb2xlYW4nOwp2YXIgYm9vbGVhbl9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107CnZhciBjcmVhdGVCb29sZWFuID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoYm9vbGVhbl9uYW1lLCBib29sZWFuX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkOwoKICAvKioKICAgKiBDcmVhdGUgYSBib29sZWFuIG9yIGNvbnZlcnQgYSBzdHJpbmcgb3IgbnVtYmVyIHRvIGEgYm9vbGVhbi4KICAgKiBJbiBjYXNlIG9mIGEgbnVtYmVyLCBgdHJ1ZWAgaXMgcmV0dXJuZWQgZm9yIG5vbi16ZXJvIG51bWJlcnMsIGFuZCBgZmFsc2VgIGluCiAgICogY2FzZSBvZiB6ZXJvLgogICAqIFN0cmluZ3MgY2FuIGJlIGAndHJ1ZSdgIG9yIGAnZmFsc2UnYCwgb3IgY2FuIGNvbnRhaW4gYSBudW1iZXIuCiAgICogV2hlbiB2YWx1ZSBpcyBhIG1hdHJpeCwgYWxsIGVsZW1lbnRzIHdpbGwgYmUgY29udmVydGVkIHRvIGJvb2xlYW4uCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmJvb2xlYW4oeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5ib29sZWFuKDApICAgICAvLyByZXR1cm5zIGZhbHNlCiAgICogICAgbWF0aC5ib29sZWFuKDEpICAgICAvLyByZXR1cm5zIHRydWUKICAgKiAgICBtYXRoLmJvb2xlYW4oLTMpICAgICAvLyByZXR1cm5zIHRydWUKICAgKiAgICBtYXRoLmJvb2xlYW4oJ3RydWUnKSAgICAgLy8gcmV0dXJucyB0cnVlCiAgICogICAgbWF0aC5ib29sZWFuKCdmYWxzZScpICAgICAvLyByZXR1cm5zIGZhbHNlCiAgICogICAgbWF0aC5ib29sZWFuKFsxLCAwLCAxLCAxXSkgICAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCB0cnVlLCB0cnVlXQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBiaWdudW1iZXIsIGNvbXBsZXgsIGluZGV4LCBtYXRyaXgsIHN0cmluZywgdW5pdAogICAqCiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgQXJyYXkgfCBNYXRyaXggfCBudWxsfSB2YWx1ZSAgQSB2YWx1ZSBvZiBhbnkgdHlwZQogICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gVGhlIGJvb2xlYW4gdmFsdWUKICAgKi8KICB2YXIgYm9vbCA9IHR5cGVkKGJvb2xlYW5fbmFtZSwgewogICAgJyc6IGZ1bmN0aW9uIF8oKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0sCiAgICAiYm9vbGVhbiI6IGZ1bmN0aW9uIGJvb2xlYW4oeCkgewogICAgICByZXR1cm4geDsKICAgIH0sCiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7CiAgICAgIHJldHVybiAhIXg7CiAgICB9LAogICAgIm51bGwiOiBmdW5jdGlvbiBfbnVsbCh4KSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0sCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiAheC5pc1plcm8oKTsKICAgIH0sCiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyh4KSB7CiAgICAgIC8vIHRyeSBjYXNlIGluc2Vuc2l0aXZlCiAgICAgIHZhciBsY2FzZSA9IHgudG9Mb3dlckNhc2UoKTsKCiAgICAgIGlmIChsY2FzZSA9PT0gJ3RydWUnKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0gZWxzZSBpZiAobGNhc2UgPT09ICdmYWxzZScpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0gLy8gdGVzdCB3aGV0aGVyIHZhbHVlIGlzIGEgdmFsaWQgbnVtYmVyCgoKICAgICAgdmFyIG51bSA9IE51bWJlcih4KTsKCiAgICAgIGlmICh4ICE9PSAnJyAmJiAhaXNOYU4obnVtKSkgewogICAgICAgIHJldHVybiAhIW51bTsKICAgICAgfQoKICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCAiJyArIHggKyAnIiB0byBhIGJvb2xlYW4nKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIHJldHVybiBkZWVwTWFwKHgsIGJvb2wpOwogICAgfQogIH0pOwogIHJldHVybiBib29sOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdHlwZS9iaWdudW1iZXIvZnVuY3Rpb24vYmlnbnVtYmVyLmpzCgoKdmFyIGJpZ251bWJlcl9uYW1lID0gJ2JpZ251bWJlcic7CnZhciBiaWdudW1iZXJfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTsKdmFyIGNyZWF0ZUJpZ251bWJlciA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGJpZ251bWJlcl9uYW1lLCBiaWdudW1iZXJfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyOwoKICAvKioKICAgKiBDcmVhdGUgYSBCaWdOdW1iZXIsIHdoaWNoIGNhbiBzdG9yZSBudW1iZXJzIHdpdGggYXJiaXRyYXJ5IHByZWNpc2lvbi4KICAgKiBXaGVuIGEgbWF0cml4IGlzIHByb3ZpZGVkLCBhbGwgZWxlbWVudHMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gQmlnTnVtYmVyLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5iaWdudW1iZXIoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgMC4xICsgMC4yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuMzAwMDAwMDAwMDAwMDAwMDQKICAgKiAgICBtYXRoLmJpZ251bWJlcigwLjEpICsgbWF0aC5iaWdudW1iZXIoMC4yKSAgLy8gcmV0dXJucyBCaWdOdW1iZXIgMC4zCiAgICoKICAgKgogICAqICAgIDcuMmU1MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciBJbmZpbml0eQogICAqICAgIG1hdGguYmlnbnVtYmVyKCc3LjJlNTAwJykgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIEJpZ051bWJlciA3LjJlNTAwCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGJvb2xlYW4sIGNvbXBsZXgsIGluZGV4LCBtYXRyaXgsIHN0cmluZywgdW5pdAogICAqCiAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmcgfCBGcmFjdGlvbiB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4IHwgYm9vbGVhbiB8IG51bGx9IFt2YWx1ZV0gIFZhbHVlIGZvciB0aGUgYmlnIG51bWJlciwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIGJ5IGRlZmF1bHQuCiAgICogQHJldHVybnMge0JpZ051bWJlcn0gVGhlIGNyZWF0ZWQgYmlnbnVtYmVyCiAgICovCiAgdmFyIGJpZ251bWJlciA9IHR5cGVkKCdiaWdudW1iZXInLCB7CiAgICAnJzogZnVuY3Rpb24gXygpIHsKICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMCk7CiAgICB9LAogICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkgewogICAgICAvLyBjb252ZXJ0IHRvIHN0cmluZyB0byBwcmV2ZW50IGVycm9ycyBpbiBjYXNlIG9mID4xNSBkaWdpdHMKICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCArICcnKTsKICAgIH0sCiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyh4KSB7CiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHgpOwogICAgfSwKICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHsKICAgICAgLy8gd2UgYXNzdW1lIGEgQmlnTnVtYmVyIGlzIGltbXV0YWJsZQogICAgICByZXR1cm4geDsKICAgIH0sCiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkgewogICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4Lm4pLmRpdih4LmQpLnRpbWVzKHgucyk7CiAgICB9LAogICAgIm51bGwiOiBmdW5jdGlvbiBfbnVsbCh4KSB7CiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKDApOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgYmlnbnVtYmVyKTsKICAgIH0KICB9KTsKICByZXR1cm4gYmlnbnVtYmVyOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdHlwZS9jb21wbGV4L2Z1bmN0aW9uL2NvbXBsZXguanMKCgp2YXIgY29tcGxleF9uYW1lID0gJ2NvbXBsZXgnOwp2YXIgY29tcGxleF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0NvbXBsZXgnXTsKdmFyIGNyZWF0ZUNvbXBsZXggPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShjb21wbGV4X25hbWUsIGNvbXBsZXhfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7CgogIC8qKgogICAqIENyZWF0ZSBhIGNvbXBsZXggdmFsdWUgb3IgY29udmVydCBhIHZhbHVlIHRvIGEgY29tcGxleCB2YWx1ZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBtYXRoLmNvbXBsZXgoKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZXMgYSBjb21wbGV4IHZhbHVlIHdpdGggemVybwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0LgogICAqICAgICBtYXRoLmNvbXBsZXgocmUgOiBudW1iZXIsIGltIDogc3RyaW5nKSAgIC8vIGNyZWF0ZXMgYSBjb21wbGV4IHZhbHVlIHdpdGggcHJvdmlkZWQKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZXMgZm9yIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0LgogICAqICAgICBtYXRoLmNvbXBsZXgocmUgOiBudW1iZXIpICAgICAgICAgICAgICAgIC8vIGNyZWF0ZXMgYSBjb21wbGV4IHZhbHVlIHdpdGggcHJvdmlkZWQKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWFsIHZhbHVlIGFuZCB6ZXJvIGltYWdpbmFyeSBwYXJ0LgogICAqICAgICBtYXRoLmNvbXBsZXgoY29tcGxleCA6IENvbXBsZXgpICAgICAgICAgIC8vIGNsb25lcyB0aGUgcHJvdmlkZWQgY29tcGxleCB2YWx1ZS4KICAgKiAgICAgbWF0aC5jb21wbGV4KGFyZyA6IHN0cmluZykgICAgICAgICAgICAgICAvLyBwYXJzZXMgYSBzdHJpbmcgaW50byBhIGNvbXBsZXggdmFsdWUuCiAgICogICAgIG1hdGguY29tcGxleChhcnJheSA6IEFycmF5KSAgICAgICAgICAgICAgLy8gY29udmVydHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIG1hdHJpeCBlbGVtZW50IHdpc2UgaW50byBhCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29tcGxleCB2YWx1ZS4KICAgKiAgICAgbWF0aC5jb21wbGV4KHtyZTogbnVtYmVyLCBpbTogbnVtYmVyfSkgICAvLyBjcmVhdGVzIGEgY29tcGxleCB2YWx1ZSB3aXRoIHByb3ZpZGVkCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWVzIGZvciByZWFsIGFuIGltYWdpbmFyeSBwYXJ0LgogICAqICAgICBtYXRoLmNvbXBsZXgoe3I6IG51bWJlciwgcGhpOiBudW1iZXJ9KSAgIC8vIGNyZWF0ZXMgYSBjb21wbGV4IHZhbHVlIHdpdGggcHJvdmlkZWQKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb2xhciBjb29yZGluYXRlcwogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBjb25zdCBhID0gbWF0aC5jb21wbGV4KDMsIC00KSAgICAgLy8gYSA9IENvbXBsZXggMyAtIDRpCiAgICogICAgYS5yZSA9IDUgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgPSBDb21wbGV4IDUgLSA0aQogICAqICAgIGNvbnN0IGkgPSBhLmltICAgICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgLTQKICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KCcyICsgNmknKSAgLy8gQ29tcGxleCAyICsgNmkKICAgKiAgICBjb25zdCBjID0gbWF0aC5jb21wbGV4KCkgICAgICAgICAgLy8gQ29tcGxleCAwICsgMGkKICAgKiAgICBjb25zdCBkID0gbWF0aC5hZGQoYSwgYikgICAgICAgICAgLy8gQ29tcGxleCA1ICsgMmkKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgYmlnbnVtYmVyLCBib29sZWFuLCBpbmRleCwgbWF0cml4LCBudW1iZXIsIHN0cmluZywgdW5pdAogICAqCiAgICogQHBhcmFtIHsqIHwgQXJyYXkgfCBNYXRyaXh9IFthcmdzXQogICAqICAgICAgICAgICAgQXJndW1lbnRzIHNwZWNpZnlpbmcgdGhlIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0IG9mIHRoZSBjb21wbGV4IG51bWJlcgogICAqIEByZXR1cm4ge0NvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyBhIGNvbXBsZXggdmFsdWUKICAgKi8KICB2YXIgY29tcGxleCA9IHR5cGVkKCdjb21wbGV4JywgewogICAgJyc6IGZ1bmN0aW9uIF8oKSB7CiAgICAgIHJldHVybiBDb21wbGV4LlpFUk87CiAgICB9LAogICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkgewogICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCk7CiAgICB9LAogICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHJlLCBpbSkgewogICAgICByZXR1cm4gbmV3IENvbXBsZXgocmUsIGltKTsKICAgIH0sCiAgICAvLyBUT0RPOiB0aGlzIHNpZ25hdHVyZSBzaG91bGQgYmUgcmVkdW5kYW50CiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIocmUsIGltKSB7CiAgICAgIHJldHVybiBuZXcgQ29tcGxleChyZS50b051bWJlcigpLCBpbS50b051bWJlcigpKTsKICAgIH0sCiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkgewogICAgICByZXR1cm4gbmV3IENvbXBsZXgoeC52YWx1ZU9mKCksIDApOwogICAgfSwKICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkgewogICAgICByZXR1cm4geC5jbG9uZSgpOwogICAgfSwKICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHsKICAgICAgcmV0dXJuIENvbXBsZXgoeCk7IC8vIGZvciBleGFtcGxlICcyICsgM2knCiAgICB9LAogICAgIm51bGwiOiBmdW5jdGlvbiBfbnVsbCh4KSB7CiAgICAgIHJldHVybiBDb21wbGV4KDApOwogICAgfSwKICAgIE9iamVjdDogZnVuY3Rpb24gT2JqZWN0KHgpIHsKICAgICAgaWYgKCdyZScgaW4geCAmJiAnaW0nIGluIHgpIHsKICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoeC5yZSwgeC5pbSk7CiAgICAgIH0KCiAgICAgIGlmICgncicgaW4geCAmJiAncGhpJyBpbiB4IHx8ICdhYnMnIGluIHggJiYgJ2FyZycgaW4geCkgewogICAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4KTsKICAgICAgfQoKICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIChyZSBhbmQgaW0pIG9yIChyIGFuZCBwaGkpIG9yIChhYnMgYW5kIGFyZyknKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIHJldHVybiBkZWVwTWFwKHgsIGNvbXBsZXgpOwogICAgfQogIH0pOwogIHJldHVybiBjb21wbGV4Owp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdHlwZS9mcmFjdGlvbi9mdW5jdGlvbi9mcmFjdGlvbi5qcwoKCnZhciBmcmFjdGlvbl9uYW1lID0gJ2ZyYWN0aW9uJzsKdmFyIGZyYWN0aW9uX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnRnJhY3Rpb24nXTsKdmFyIGNyZWF0ZUZyYWN0aW9uID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoZnJhY3Rpb25fbmFtZSwgZnJhY3Rpb25fZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIEZyYWN0aW9uID0gX3JlZi5GcmFjdGlvbjsKCiAgLyoqCiAgICogQ3JlYXRlIGEgZnJhY3Rpb24gY29udmVydCBhIHZhbHVlIHRvIGEgZnJhY3Rpb24uCiAgICoKICAgKiBTeW50YXg6CiAgICogICAgIG1hdGguZnJhY3Rpb24obnVtZXJhdG9yLCBkZW5vbWluYXRvcikKICAgKiAgICAgbWF0aC5mcmFjdGlvbih7bjogbnVtZXJhdG9yLCBkOiBkZW5vbWluYXRvcn0pCiAgICogICAgIG1hdGguZnJhY3Rpb24obWF0cml4OiBBcnJheSB8IE1hdHJpeCkgICAgICAgICBUdXJuIGFsbCBtYXRyaXggZW50cmllcwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50byBmcmFjdGlvbnMKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgIG1hdGguZnJhY3Rpb24oMSwgMykKICAgKiAgICAgbWF0aC5mcmFjdGlvbignMi8zJykKICAgKiAgICAgbWF0aC5mcmFjdGlvbih7bjogMiwgZDogM30pCiAgICogICAgIG1hdGguZnJhY3Rpb24oWzAuMiwgMC4yNSwgMS4yNV0pCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGJpZ251bWJlciwgbnVtYmVyLCBzdHJpbmcsIHVuaXQKICAgKgogICAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gW2FyZ3NdCiAgICogICAgICAgICAgICBBcmd1bWVudHMgc3BlY2lmeWluZyB0aGUgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciBvZgogICAqICAgICAgICAgICAgdGhlIGZyYWN0aW9uCiAgICogQHJldHVybiB7RnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyBhIGZyYWN0aW9uCiAgICovCiAgdmFyIGZyYWN0aW9uID0gdHlwZWQoJ2ZyYWN0aW9uJywgewogICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkgewogICAgICBpZiAoIWlzRmluaXRlKHgpIHx8IGlzTmFOKHgpKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHggKyAnIGNhbm5vdCBiZSByZXByZXNlbnRlZCBhcyBhIGZyYWN0aW9uJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oeCk7CiAgICB9LAogICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoeCkgewogICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKHgpOwogICAgfSwKICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcihudW1lcmF0b3IsIGRlbm9taW5hdG9yKSB7CiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24obnVtZXJhdG9yLCBkZW5vbWluYXRvcik7CiAgICB9LAogICAgIm51bGwiOiBmdW5jdGlvbiBfbnVsbCh4KSB7CiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oMCk7CiAgICB9LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkgewogICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKHgudG9TdHJpbmcoKSk7CiAgICB9LAogICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHsKICAgICAgcmV0dXJuIHg7IC8vIGZyYWN0aW9ucyBhcmUgaW1tdXRhYmxlCiAgICB9LAogICAgT2JqZWN0OiBmdW5jdGlvbiBPYmplY3QoeCkgewogICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKHgpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgZnJhY3Rpb24pOwogICAgfQogIH0pOwogIHJldHVybiBmcmFjdGlvbjsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3R5cGUvbWF0cml4L2Z1bmN0aW9uL21hdHJpeC5qcwoKdmFyIG1hdHJpeF9uYW1lID0gJ21hdHJpeCc7CnZhciBtYXRyaXhfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdNYXRyaXgnLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4J107CnZhciBjcmVhdGVNYXRyaXggPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShtYXRyaXhfbmFtZSwgbWF0cml4X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBNYXRyaXggPSBfcmVmLk1hdHJpeCwKICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4LAogICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDsKCiAgLyoqCiAgICogQ3JlYXRlIGEgTWF0cml4LiBUaGUgZnVuY3Rpb24gY3JlYXRlcyBhIG5ldyBgbWF0aC5NYXRyaXhgIG9iamVjdCBmcm9tCiAgICogYW4gYEFycmF5YC4gQSBNYXRyaXggaGFzIHV0aWxpdHkgZnVuY3Rpb25zIHRvIG1hbmlwdWxhdGUgdGhlIGRhdGEgaW4gdGhlCiAgICogbWF0cml4LCBsaWtlIGdldHRpbmcgdGhlIHNpemUgYW5kIGdldHRpbmcgb3Igc2V0dGluZyB2YWx1ZXMgaW4gdGhlIG1hdHJpeC4KICAgKiBTdXBwb3J0ZWQgc3RvcmFnZSBmb3JtYXRzIGFyZSAnZGVuc2UnIGFuZCAnc3BhcnNlJy4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGgubWF0cml4KCkgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBhbiBlbXB0eSBtYXRyaXggdXNpbmcgZGVmYXVsdCBzdG9yYWdlIGZvcm1hdCAoZGVuc2UpLgogICAqICAgIG1hdGgubWF0cml4KGRhdGEpICAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBhIG1hdHJpeCB3aXRoIGluaXRpYWwgZGF0YSB1c2luZyBkZWZhdWx0IHN0b3JhZ2UgZm9ybWF0IChkZW5zZSkuCiAgICogICAgbWF0aC5tYXRyaXgoJ2RlbnNlJykgICAgICAgICAgICAgICAgICAvLyBjcmVhdGVzIGFuIGVtcHR5IG1hdHJpeCB1c2luZyB0aGUgZ2l2ZW4gc3RvcmFnZSBmb3JtYXQuCiAgICogICAgbWF0aC5tYXRyaXgoZGF0YSwgJ2RlbnNlJykgICAgICAgICAgICAvLyBjcmVhdGVzIGEgbWF0cml4IHdpdGggaW5pdGlhbCBkYXRhIHVzaW5nIHRoZSBnaXZlbiBzdG9yYWdlIGZvcm1hdC4KICAgKiAgICBtYXRoLm1hdHJpeChkYXRhLCAnc3BhcnNlJykgICAgICAgICAgIC8vIGNyZWF0ZXMgYSBzcGFyc2UgbWF0cml4IHdpdGggaW5pdGlhbCBkYXRhLgogICAqICAgIG1hdGgubWF0cml4KGRhdGEsICdzcGFyc2UnLCAnbnVtYmVyJykgLy8gY3JlYXRlcyBhIHNwYXJzZSBtYXRyaXggd2l0aCBpbml0aWFsIGRhdGEsIG51bWJlciBkYXRhIHR5cGUuCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIGxldCBtID0gbWF0aC5tYXRyaXgoW1sxLCAyXSwgWzMsIDRdXSkKICAgKiAgICBtLnNpemUoKSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFycmF5IFsyLCAyXQogICAqICAgIG0ucmVzaXplKFszLCAyXSwgNSkKICAgKiAgICBtLnZhbHVlT2YoKSAgICAgICAgICAgICAgICAgICAgIC8vIEFycmF5IFtbMSwgMl0sIFszLCA0XSwgWzUsIDVdXQogICAqICAgIG0uZ2V0KFsxLCAwXSkgICAgICAgICAgICAgICAgICAgIC8vIG51bWJlciAzCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGJpZ251bWJlciwgYm9vbGVhbiwgY29tcGxleCwgaW5kZXgsIG51bWJlciwgc3RyaW5nLCB1bml0LCBzcGFyc2UKICAgKgogICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtkYXRhXSAgICBBIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5CiAgICogQHBhcmFtIHtzdHJpbmd9IFtmb3JtYXRdICAgICAgICAgIFRoZSBNYXRyaXggc3RvcmFnZSBmb3JtYXQKICAgKgogICAqIEByZXR1cm4ge01hdHJpeH0gVGhlIGNyZWF0ZWQgbWF0cml4CiAgICovCiAgcmV0dXJuIHR5cGVkKG1hdHJpeF9uYW1lLCB7CiAgICAnJzogZnVuY3Rpb24gXygpIHsKICAgICAgcmV0dXJuIF9jcmVhdGUoW10pOwogICAgfSwKICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKGZvcm1hdCkgewogICAgICByZXR1cm4gX2NyZWF0ZShbXSwgZm9ybWF0KTsKICAgIH0sCiAgICAnc3RyaW5nLCBzdHJpbmcnOiBmdW5jdGlvbiBzdHJpbmdTdHJpbmcoZm9ybWF0LCBkYXRhdHlwZSkgewogICAgICByZXR1cm4gX2NyZWF0ZShbXSwgZm9ybWF0LCBkYXRhdHlwZSk7CiAgICB9LAogICAgQXJyYXk6IGZ1bmN0aW9uIEFycmF5KGRhdGEpIHsKICAgICAgcmV0dXJuIF9jcmVhdGUoZGF0YSk7CiAgICB9LAogICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoZGF0YSkgewogICAgICByZXR1cm4gX2NyZWF0ZShkYXRhLCBkYXRhLnN0b3JhZ2UoKSk7CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcnOiBfY3JlYXRlLAogICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcsIHN0cmluZyc6IF9jcmVhdGUKICB9KTsKICAvKioKICAgKiBDcmVhdGUgYSBuZXcgTWF0cml4IHdpdGggZ2l2ZW4gc3RvcmFnZSBmb3JtYXQKICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhCiAgICogQHBhcmFtIHtzdHJpbmd9IFtmb3JtYXRdCiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhdHlwZV0KICAgKiBAcmV0dXJucyB7TWF0cml4fSBSZXR1cm5zIGEgbmV3IE1hdHJpeAogICAqIEBwcml2YXRlCiAgICovCgogIGZ1bmN0aW9uIF9jcmVhdGUoZGF0YSwgZm9ybWF0LCBkYXRhdHlwZSkgewogICAgLy8gZ2V0IHN0b3JhZ2UgZm9ybWF0IGNvbnN0cnVjdG9yCiAgICBpZiAoZm9ybWF0ID09PSAnZGVuc2UnIHx8IGZvcm1hdCA9PT0gJ2RlZmF1bHQnIHx8IGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpOwogICAgfQoKICAgIGlmIChmb3JtYXQgPT09ICdzcGFyc2UnKSB7CiAgICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTsKICAgIH0KCiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIG1hdHJpeCB0eXBlICcgKyBKU09OLnN0cmluZ2lmeShmb3JtYXQpICsgJy4nKTsKICB9Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy90eXBlL3VuaXQvZnVuY3Rpb24vc3BsaXRVbml0LmpzCgp2YXIgc3BsaXRVbml0X25hbWUgPSAnc3BsaXRVbml0JzsKdmFyIHNwbGl0VW5pdF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107CnZhciBjcmVhdGVTcGxpdFVuaXQgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShzcGxpdFVuaXRfbmFtZSwgc3BsaXRVbml0X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkOwoKICAvKioKICAgKiBTcGxpdCBhIHVuaXQgaW4gYW4gYXJyYXkgb2YgdW5pdHMgd2hvc2Ugc3VtIGlzIGVxdWFsIHRvIHRoZSBvcmlnaW5hbCB1bml0LgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIHNwbGl0VW5pdCh1bml0OiBVbml0LCBwYXJ0czogQXJyYXkuPFVuaXQ+KQogICAqCiAgICogRXhhbXBsZToKICAgKgogICAqICAgICBtYXRoLnNwbGl0VW5pdChuZXcgVW5pdCgxLCAnbScpLCBbJ2ZlZXQnLCAnaW5jaCddKQogICAqICAgICAvLyBbIDMgZmVldCwgMy4zNzAwNzg3NDAxNTc1IGluY2ggXQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICAgdW5pdAogICAqCiAgICogQHBhcmFtIHtBcnJheX0gW3BhcnRzXSBBbiBhcnJheSBvZiBzdHJpbmdzIG9yIHZhbHVlbGVzcyB1bml0cy4KICAgKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgdW5pdHMuCiAgICovCiAgcmV0dXJuIHR5cGVkKHNwbGl0VW5pdF9uYW1lLCB7CiAgICAnVW5pdCwgQXJyYXknOiBmdW5jdGlvbiBVbml0QXJyYXkodW5pdCwgcGFydHMpIHsKICAgICAgcmV0dXJuIHVuaXQuc3BsaXRVbml0KHBhcnRzKTsKICAgIH0KICB9KTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3BsYWluL251bWJlci9hcml0aG1ldGljLmpzCgp2YXIgYXJpdGhtZXRpY19uMSA9ICdudW1iZXInOwp2YXIgYXJpdGhtZXRpY19uMiA9ICdudW1iZXIsIG51bWJlcic7CmZ1bmN0aW9uIGFic051bWJlcihhKSB7CiAgcmV0dXJuIE1hdGguYWJzKGEpOwp9CmFic051bWJlci5zaWduYXR1cmUgPSBhcml0aG1ldGljX24xOwpmdW5jdGlvbiBhZGROdW1iZXIoYSwgYikgewogIHJldHVybiBhICsgYjsKfQphZGROdW1iZXIuc2lnbmF0dXJlID0gYXJpdGhtZXRpY19uMjsKZnVuY3Rpb24gc3VidHJhY3ROdW1iZXIoYSwgYikgewogIHJldHVybiBhIC0gYjsKfQpzdWJ0cmFjdE51bWJlci5zaWduYXR1cmUgPSBhcml0aG1ldGljX24yOwpmdW5jdGlvbiBtdWx0aXBseU51bWJlcihhLCBiKSB7CiAgcmV0dXJuIGEgKiBiOwp9Cm11bHRpcGx5TnVtYmVyLnNpZ25hdHVyZSA9IGFyaXRobWV0aWNfbjI7CmZ1bmN0aW9uIGRpdmlkZU51bWJlcihhLCBiKSB7CiAgcmV0dXJuIGEgLyBiOwp9CmRpdmlkZU51bWJlci5zaWduYXR1cmUgPSBhcml0aG1ldGljX24yOwpmdW5jdGlvbiB1bmFyeU1pbnVzTnVtYmVyKHgpIHsKICByZXR1cm4gLXg7Cn0KdW5hcnlNaW51c051bWJlci5zaWduYXR1cmUgPSBhcml0aG1ldGljX24xOwpmdW5jdGlvbiB1bmFyeVBsdXNOdW1iZXIoeCkgewogIHJldHVybiB4Owp9CnVuYXJ5UGx1c051bWJlci5zaWduYXR1cmUgPSBhcml0aG1ldGljX24xOwpmdW5jdGlvbiBjYnJ0TnVtYmVyKHgpIHsKICByZXR1cm4gT2JqZWN0KHV0aWxzX251bWJlclsiZCIgLyogY2JydCAqL10pKHgpOwp9CmNicnROdW1iZXIuc2lnbmF0dXJlID0gYXJpdGhtZXRpY19uMTsKZnVuY3Rpb24gY2VpbE51bWJlcih4KSB7CiAgcmV0dXJuIE1hdGguY2VpbCh4KTsKfQpjZWlsTnVtYmVyLnNpZ25hdHVyZSA9IGFyaXRobWV0aWNfbjE7CmZ1bmN0aW9uIGN1YmVOdW1iZXIoeCkgewogIHJldHVybiB4ICogeCAqIHg7Cn0KY3ViZU51bWJlci5zaWduYXR1cmUgPSBhcml0aG1ldGljX24xOwpmdW5jdGlvbiBleHBOdW1iZXIoeCkgewogIHJldHVybiBNYXRoLmV4cCh4KTsKfQpleHBOdW1iZXIuc2lnbmF0dXJlID0gYXJpdGhtZXRpY19uMTsKZnVuY3Rpb24gZXhwbTFOdW1iZXIoeCkgewogIHJldHVybiBPYmplY3QodXRpbHNfbnVtYmVyWyJnIiAvKiBleHBtMSAqL10pKHgpOwp9CmV4cG0xTnVtYmVyLnNpZ25hdHVyZSA9IGFyaXRobWV0aWNfbjE7CmZ1bmN0aW9uIGZpeE51bWJlcih4KSB7CiAgcmV0dXJuIHggPiAwID8gTWF0aC5mbG9vcih4KSA6IE1hdGguY2VpbCh4KTsKfQpmaXhOdW1iZXIuc2lnbmF0dXJlID0gYXJpdGhtZXRpY19uMTsKZnVuY3Rpb24gZmxvb3JOdW1iZXIoeCkgewogIHJldHVybiBNYXRoLmZsb29yKHgpOwp9CmZsb29yTnVtYmVyLnNpZ25hdHVyZSA9IGFyaXRobWV0aWNfbjE7Ci8qKgogKiBDYWxjdWxhdGUgZ2NkIGZvciBudW1iZXJzCiAqIEBwYXJhbSB7bnVtYmVyfSBhCiAqIEBwYXJhbSB7bnVtYmVyfSBiCiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkZW5vbWluYXRvciBvZiBhIGFuZCBiCiAqLwoKZnVuY3Rpb24gZ2NkTnVtYmVyKGEsIGIpIHsKICBpZiAoIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKGEpIHx8ICFPYmplY3QodXRpbHNfbnVtYmVyWyJpIiAvKiBpc0ludGVnZXIgKi9dKShiKSkgewogICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIGdjZCBtdXN0IGJlIGludGVnZXIgbnVtYmVycycpOwogIH0gLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXVjbGlkZWFuX2FsZ29yaXRobQoKCiAgdmFyIHI7CgogIHdoaWxlIChiICE9PSAwKSB7CiAgICByID0gYSAlIGI7CiAgICBhID0gYjsKICAgIGIgPSByOwogIH0KCiAgcmV0dXJuIGEgPCAwID8gLWEgOiBhOwp9CmdjZE51bWJlci5zaWduYXR1cmUgPSBhcml0aG1ldGljX24yOwovKioKICogQ2FsY3VsYXRlIGxjbSBmb3IgdHdvIG51bWJlcnMKICogQHBhcmFtIHtudW1iZXJ9IGEKICogQHBhcmFtIHtudW1iZXJ9IGIKICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbGVhc3QgY29tbW9uIG11bHRpcGxlIG9mIGEgYW5kIGIKICovCgpmdW5jdGlvbiBsY21OdW1iZXIoYSwgYikgewogIGlmICghT2JqZWN0KHV0aWxzX251bWJlclsiaSIgLyogaXNJbnRlZ2VyICovXSkoYSkgfHwgIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKGIpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24gbGNtIG11c3QgYmUgaW50ZWdlciBudW1iZXJzJyk7CiAgfQoKICBpZiAoYSA9PT0gMCB8fCBiID09PSAwKSB7CiAgICByZXR1cm4gMDsKICB9IC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V1Y2xpZGVhbl9hbGdvcml0aG0KICAvLyBldmFsdWF0ZSBsY20gaGVyZSBpbmxpbmUgdG8gcmVkdWNlIG92ZXJoZWFkCgoKICB2YXIgdDsKICB2YXIgcHJvZCA9IGEgKiBiOwoKICB3aGlsZSAoYiAhPT0gMCkgewogICAgdCA9IGI7CiAgICBiID0gYSAlIHQ7CiAgICBhID0gdDsKICB9CgogIHJldHVybiBNYXRoLmFicyhwcm9kIC8gYSk7Cn0KbGNtTnVtYmVyLnNpZ25hdHVyZSA9IGFyaXRobWV0aWNfbjI7Ci8qKgogKiBDYWxjdWxhdGUgdGhlIGxvZ2FyaXRobSBvZiBhIHZhbHVlLgogKiBAcGFyYW0ge251bWJlcn0geAogKiBAcmV0dXJuIHtudW1iZXJ9CiAqLwoKZnVuY3Rpb24gbG9nTnVtYmVyKHgpIHsKICByZXR1cm4gTWF0aC5sb2coeCk7Cn0KbG9nTnVtYmVyLnNpZ25hdHVyZSA9IGFyaXRobWV0aWNfbjE7Ci8qKgogKiBDYWxjdWxhdGUgdGhlIDEwLWJhc2UgbG9nYXJpdGhtIG9mIGEgbnVtYmVyCiAqIEBwYXJhbSB7bnVtYmVyfSB4CiAqIEByZXR1cm4ge251bWJlcn0KICovCgpmdW5jdGlvbiBsb2cxME51bWJlcih4KSB7CiAgcmV0dXJuIE9iamVjdCh1dGlsc19udW1iZXJbImoiIC8qIGxvZzEwICovXSkoeCk7Cn0KbG9nMTBOdW1iZXIuc2lnbmF0dXJlID0gYXJpdGhtZXRpY19uMTsKLyoqCiAqIENhbGN1bGF0ZSB0aGUgMi1iYXNlIGxvZ2FyaXRobSBvZiBhIG51bWJlcgogKiBAcGFyYW0ge251bWJlcn0geAogKiBAcmV0dXJuIHtudW1iZXJ9CiAqLwoKZnVuY3Rpb24gbG9nMk51bWJlcih4KSB7CiAgcmV0dXJuIE9iamVjdCh1dGlsc19udW1iZXJbImwiIC8qIGxvZzIgKi9dKSh4KTsKfQpsb2cyTnVtYmVyLnNpZ25hdHVyZSA9IGFyaXRobWV0aWNfbjE7Ci8qKgogKiBDYWxjdWxhdGUgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIGEgYG51bWJlcisxYAogKiBAcGFyYW0ge251bWJlcn0geAogKiBAcmV0dXJucyB7bnVtYmVyfQogKi8KCmZ1bmN0aW9uIGxvZzFwTnVtYmVyKHgpIHsKICByZXR1cm4gT2JqZWN0KHV0aWxzX251bWJlclsiayIgLyogbG9nMXAgKi9dKSh4KTsKfQpsb2cxcE51bWJlci5zaWduYXR1cmUgPSBhcml0aG1ldGljX24xOwovKioKICogQ2FsY3VsYXRlIHRoZSBtb2R1bHVzIG9mIHR3byBudW1iZXJzCiAqIEBwYXJhbSB7bnVtYmVyfSB4CiAqIEBwYXJhbSB7bnVtYmVyfSB5CiAqIEByZXR1cm5zIHtudW1iZXJ9IHJlcwogKiBAcHJpdmF0ZQogKi8KCmZ1bmN0aW9uIG1vZE51bWJlcih4LCB5KSB7CiAgaWYgKHkgPiAwKSB7CiAgICAvLyBXZSBkb24ndCB1c2UgSmF2YVNjcmlwdCdzICUgb3BlcmF0b3IgaGVyZSBhcyB0aGlzIGRvZXNuJ3Qgd29yawogICAgLy8gY29ycmVjdGx5IGZvciB4IDwgMCBhbmQgeCA9PT0gMAogICAgLy8gc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01vZHVsb19vcGVyYXRpb24KICAgIHJldHVybiB4IC0geSAqIE1hdGguZmxvb3IoeCAvIHkpOwogIH0gZWxzZSBpZiAoeSA9PT0gMCkgewogICAgcmV0dXJuIHg7CiAgfSBlbHNlIHsKICAgIC8vIHkgPCAwCiAgICAvLyBUT0RPOiBpbXBsZW1lbnQgbW9kIGZvciBhIG5lZ2F0aXZlIGRpdmlzb3IKICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBtb2QgZm9yIGEgbmVnYXRpdmUgZGl2aXNvcicpOwogIH0KfQptb2ROdW1iZXIuc2lnbmF0dXJlID0gYXJpdGhtZXRpY19uMjsKLyoqCiAqIENhbGN1bGF0ZSB0aGUgbnRoIHJvb3Qgb2YgYSwgc29sdmUgeF5yb290ID09IGEKICogaHR0cDovL3Jvc2V0dGFjb2RlLm9yZy93aWtpL050aF9yb290I0phdmFTY3JpcHQKICogQHBhcmFtIHtudW1iZXJ9IGEKICogQHBhcmFtIHtudW1iZXJ9IHJvb3QKICogQHByaXZhdGUKICovCgpmdW5jdGlvbiBudGhSb290TnVtYmVyKGEsIHJvb3QpIHsKICB2YXIgaW52ID0gcm9vdCA8IDA7CgogIGlmIChpbnYpIHsKICAgIHJvb3QgPSAtcm9vdDsKICB9CgogIGlmIChyb290ID09PSAwKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBub24temVybycpOwogIH0KCiAgaWYgKGEgPCAwICYmIE1hdGguYWJzKHJvb3QpICUgMiAhPT0gMSkgewogICAgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgb2RkIHdoZW4gYSBpcyBuZWdhdGl2ZS4nKTsKICB9IC8vIGVkZ2UgY2FzZXMgemVybyBhbmQgaW5maW5pdHkKCgogIGlmIChhID09PSAwKSB7CiAgICByZXR1cm4gaW52ID8gSW5maW5pdHkgOiAwOwogIH0KCiAgaWYgKCFpc0Zpbml0ZShhKSkgewogICAgcmV0dXJuIGludiA/IDAgOiBhOwogIH0KCiAgdmFyIHggPSBNYXRoLnBvdyhNYXRoLmFicyhhKSwgMSAvIHJvb3QpOyAvLyBJZiBhIDwgMCwgd2UgcmVxdWlyZSB0aGF0IHJvb3QgaXMgYW4gb2RkIGludGVnZXIsCiAgLy8gc28gKC0xKSBeICgxL3Jvb3QpID0gLTEKCiAgeCA9IGEgPCAwID8gLXggOiB4OwogIHJldHVybiBpbnYgPyAxIC8geCA6IHg7IC8vIFZlcnkgbmljZSBhbGdvcml0aG0sIGJ1dCBmYWlscyB3aXRoIG50aFJvb3QoLTIsIDMpLgogIC8vIE5ld3RvbidzIG1ldGhvZCBoYXMgc29tZSB3ZWxsLWtub3duIHByb2JsZW1zIGF0IHRpbWVzOgogIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL05ld3RvbiUyN3NfbWV0aG9kI0ZhaWx1cmVfYW5hbHlzaXMKCiAgLyoKICBsZXQgeCA9IDEgLy8gSW5pdGlhbCBndWVzcwogIGxldCB4UHJldiA9IDEKICBsZXQgaSA9IDAKICBjb25zdCBpTWF4ID0gMTAwMDAKICBkbyB7CiAgICBjb25zdCBkZWx0YSA9IChhIC8gTWF0aC5wb3coeCwgcm9vdCAtIDEpIC0geCkgLyByb290CiAgICB4UHJldiA9IHgKICAgIHggPSB4ICsgZGVsdGEKICAgIGkrKwogIH0KICB3aGlsZSAoeFByZXYgIT09IHggJiYgaSA8IGlNYXgpCiAgIGlmICh4UHJldiAhPT0geCkgewogICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiBudGhSb290IGZhaWxlZCB0byBjb252ZXJnZScpCiAgfQogICByZXR1cm4gaW52ID8gMSAvIHggOiB4CiAgKi8KfQpudGhSb290TnVtYmVyLnNpZ25hdHVyZSA9IGFyaXRobWV0aWNfbjI7CmZ1bmN0aW9uIHNpZ25OdW1iZXIoeCkgewogIHJldHVybiBPYmplY3QodXRpbHNfbnVtYmVyWyJuIiAvKiBzaWduICovXSkoeCk7Cn0Kc2lnbk51bWJlci5zaWduYXR1cmUgPSBhcml0aG1ldGljX24xOwpmdW5jdGlvbiBzcXJ0TnVtYmVyKHgpIHsKICByZXR1cm4gTWF0aC5zcXJ0KHgpOwp9CnNxcnROdW1iZXIuc2lnbmF0dXJlID0gYXJpdGhtZXRpY19uMTsKZnVuY3Rpb24gc3F1YXJlTnVtYmVyKHgpIHsKICByZXR1cm4geCAqIHg7Cn0Kc3F1YXJlTnVtYmVyLnNpZ25hdHVyZSA9IGFyaXRobWV0aWNfbjE7Ci8qKgogKiBDYWxjdWxhdGUgeGdjZCBmb3IgdHdvIG51bWJlcnMKICogQHBhcmFtIHtudW1iZXJ9IGEKICogQHBhcmFtIHtudW1iZXJ9IGIKICogQHJldHVybiB7bnVtYmVyfSByZXN1bHQKICogQHByaXZhdGUKICovCgpmdW5jdGlvbiB4Z2NkTnVtYmVyKGEsIGIpIHsKICAvLyBzb3VyY2U6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V4dGVuZGVkX0V1Y2xpZGVhbl9hbGdvcml0aG0KICB2YXIgdDsgLy8gdXNlZCB0byBzd2FwIHR3byB2YXJpYWJsZXMKCiAgdmFyIHE7IC8vIHF1b3RpZW50CgogIHZhciByOyAvLyByZW1haW5kZXIKCiAgdmFyIHggPSAwOwogIHZhciBsYXN0eCA9IDE7CiAgdmFyIHkgPSAxOwogIHZhciBsYXN0eSA9IDA7CgogIGlmICghT2JqZWN0KHV0aWxzX251bWJlclsiaSIgLyogaXNJbnRlZ2VyICovXSkoYSkgfHwgIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKGIpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24geGdjZCBtdXN0IGJlIGludGVnZXIgbnVtYmVycycpOwogIH0KCiAgd2hpbGUgKGIpIHsKICAgIHEgPSBNYXRoLmZsb29yKGEgLyBiKTsKICAgIHIgPSBhIC0gcSAqIGI7CiAgICB0ID0geDsKICAgIHggPSBsYXN0eCAtIHEgKiB4OwogICAgbGFzdHggPSB0OwogICAgdCA9IHk7CiAgICB5ID0gbGFzdHkgLSBxICogeTsKICAgIGxhc3R5ID0gdDsKICAgIGEgPSBiOwogICAgYiA9IHI7CiAgfQoKICB2YXIgcmVzOwoKICBpZiAoYSA8IDApIHsKICAgIHJlcyA9IFstYSwgLWxhc3R4LCAtbGFzdHldOwogIH0gZWxzZSB7CiAgICByZXMgPSBbYSwgYSA/IGxhc3R4IDogMCwgbGFzdHldOwogIH0KCiAgcmV0dXJuIHJlczsKfQp4Z2NkTnVtYmVyLnNpZ25hdHVyZSA9IGFyaXRobWV0aWNfbjI7Ci8qKgogKiBDYWxjdWxhdGVzIHRoZSBwb3dlciBvZiB4IHRvIHksIHheeSwgZm9yIHR3byBudW1iZXJzLgogKiBAcGFyYW0ge251bWJlcn0geAogKiBAcGFyYW0ge251bWJlcn0geQogKiBAcmV0dXJuIHtudW1iZXJ9IHJlcwogKi8KCmZ1bmN0aW9uIHBvd051bWJlcih4LCB5KSB7CiAgLy8geF5JbmZpbml0eSA9PT0gMCBpZiAtMSA8IHggPCAxCiAgLy8gQSByZWFsIG51bWJlciAwIGlzIHJldHVybmVkIGluc3RlYWQgb2YgY29tcGxleCgwKQogIGlmICh4ICogeCA8IDEgJiYgeSA9PT0gSW5maW5pdHkgfHwgeCAqIHggPiAxICYmIHkgPT09IC1JbmZpbml0eSkgewogICAgcmV0dXJuIDA7CiAgfQoKICByZXR1cm4gTWF0aC5wb3coeCwgeSk7Cn0KcG93TnVtYmVyLnNpZ25hdHVyZSA9IGFyaXRobWV0aWNfbjI7Ci8qKgogKiByb3VuZCBhIG51bWJlciB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGRlY2ltYWxzLCBvciB0byB6ZXJvIGlmIGRlY2ltYWxzIGlzCiAqIG5vdCBwcm92aWRlZAogKiBAcGFyYW0ge251bWJlcn0gdmFsdWUKICogQHBhcmFtIHtudW1iZXJ9IGRlY2ltYWxzICAgICAgIG51bWJlciBvZiBkZWNpbWFscywgYmV0d2VlbiAwIGFuZCAxNSAoMCBieSBkZWZhdWx0KQogKiBAcmV0dXJuIHtudW1iZXJ9IHJvdW5kZWRWYWx1ZQogKi8KCmZ1bmN0aW9uIHJvdW5kTnVtYmVyKHZhbHVlKSB7CiAgdmFyIGRlY2ltYWxzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwOwogIHJldHVybiBwYXJzZUZsb2F0KE9iamVjdCh1dGlsc19udW1iZXJbInEiIC8qIHRvRml4ZWQgKi9dKSh2YWx1ZSwgZGVjaW1hbHMpKTsKfQpyb3VuZE51bWJlci5zaWduYXR1cmUgPSBhcml0aG1ldGljX24yOwovKioKICogQ2FsY3VsYXRlIHRoZSBub3JtIG9mIGEgbnVtYmVyLCB0aGUgYWJzb2x1dGUgdmFsdWUuCiAqIEBwYXJhbSB7bnVtYmVyfSB4CiAqIEByZXR1cm4ge251bWJlcn0KICovCgpmdW5jdGlvbiBub3JtTnVtYmVyKHgpIHsKICByZXR1cm4gTWF0aC5hYnMoeCk7Cn0Kbm9ybU51bWJlci5zaWduYXR1cmUgPSBhcml0aG1ldGljX24xOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5TWludXMuanMKCgoKdmFyIHVuYXJ5TWludXNfbmFtZSA9ICd1bmFyeU1pbnVzJzsKdmFyIHVuYXJ5TWludXNfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddOwp2YXIgY3JlYXRlVW5hcnlNaW51cyA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHVuYXJ5TWludXNfbmFtZSwgdW5hcnlNaW51c19kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDsKCiAgLyoqCiAgICogSW52ZXJzZSB0aGUgc2lnbiBvZiBhIHZhbHVlLCBhcHBseSBhIHVuYXJ5IG1pbnVzIG9wZXJhdGlvbi4KICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuIEJvb2xlYW4gdmFsdWVzIGFuZAogICAqIHN0cmluZ3Mgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBudW1iZXIuIEZvciBjb21wbGV4IG51bWJlcnMsIGJvdGggcmVhbCBhbmQKICAgKiBjb21wbGV4IHZhbHVlIGFyZSBpbnZlcnRlZC4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGgudW5hcnlNaW51cyh4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLnVuYXJ5TWludXMoMy41KSAgICAgIC8vIHJldHVybnMgLTMuNQogICAqICAgIG1hdGgudW5hcnlNaW51cygtNC4yKSAgICAgLy8gcmV0dXJucyA0LjIKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgYWRkLCBzdWJ0cmFjdCwgdW5hcnlQbHVzCiAgICoKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtYmVyIHRvIGJlIGludmVydGVkLgogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0aGUgdmFsdWUgd2l0aCBpbnZlcnRlZCBzaWduLgogICAqLwogIHZhciB1bmFyeU1pbnVzID0gdHlwZWQodW5hcnlNaW51c19uYW1lLCB7CiAgICBudW1iZXI6IHVuYXJ5TWludXNOdW1iZXIsCiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHsKICAgICAgcmV0dXJuIHgubmVnKCk7CiAgICB9LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkgewogICAgICByZXR1cm4geC5uZWcoKTsKICAgIH0sCiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkgewogICAgICByZXR1cm4geC5uZWcoKTsKICAgIH0sCiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHsKICAgICAgdmFyIHJlcyA9IHguY2xvbmUoKTsKICAgICAgcmVzLnZhbHVlID0gdW5hcnlNaW51cyh4LnZhbHVlKTsKICAgICAgcmV0dXJuIHJlczsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgdW5hcnlNaW51cygwKSA9IDAKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgdW5hcnlNaW51cywgdHJ1ZSk7CiAgICB9IC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBzdHJpbmcKCiAgfSk7CiAgcmV0dXJuIHVuYXJ5TWludXM7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5UGx1cy5qcwoKCgp2YXIgdW5hcnlQbHVzX25hbWUgPSAndW5hcnlQbHVzJzsKdmFyIHVuYXJ5UGx1c19kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdCaWdOdW1iZXInXTsKdmFyIGNyZWF0ZVVuYXJ5UGx1cyA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHVuYXJ5UGx1c19uYW1lLCB1bmFyeVBsdXNfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLAogICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjsKCiAgLyoqCiAgICogVW5hcnkgcGx1cyBvcGVyYXRpb24uCiAgICogQm9vbGVhbiB2YWx1ZXMgYW5kIHN0cmluZ3Mgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBudW1iZXIsIG51bWVyaWMgdmFsdWVzIHdpbGwgYmUgcmV0dXJuZWQgYXMgaXMuCiAgICoKICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC51bmFyeVBsdXMoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC51bmFyeVBsdXMoMy41KSAgICAgIC8vIHJldHVybnMgMy41CiAgICogICAgbWF0aC51bmFyeVBsdXMoMSkgICAgIC8vIHJldHVybnMgMQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICB1bmFyeU1pbnVzLCBhZGQsIHN1YnRyYWN0CiAgICoKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IHN0cmluZyB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHgKICAgKiAgICAgICAgICAgIElucHV0IHZhbHVlCiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fQogICAqICAgICAgICAgICAgUmV0dXJucyB0aGUgaW5wdXQgdmFsdWUgd2hlbiBudW1lcmljLCBjb252ZXJ0cyB0byBhIG51bWJlciB3aGVuIGlucHV0IGlzIG5vbi1udW1lcmljLgogICAqLwogIHZhciB1bmFyeVBsdXMgPSB0eXBlZCh1bmFyeVBsdXNfbmFtZSwgewogICAgbnVtYmVyOiB1bmFyeVBsdXNOdW1iZXIsCiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHsKICAgICAgcmV0dXJuIHg7IC8vIGNvbXBsZXggbnVtYmVycyBhcmUgaW1tdXRhYmxlCiAgICB9LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkgewogICAgICByZXR1cm4geDsgLy8gYmlnbnVtYmVycyBhcmUgaW1tdXRhYmxlCiAgICB9LAogICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHsKICAgICAgcmV0dXJuIHg7IC8vIGZyYWN0aW9ucyBhcmUgaW1tdXRhYmxlCiAgICB9LAogICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7CiAgICAgIHJldHVybiB4LmNsb25lKCk7CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkgewogICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIHVuYXJ5UGx1cygwKSA9IDAKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgdW5hcnlQbHVzLCB0cnVlKTsKICAgIH0sCiAgICAnYm9vbGVhbiB8IHN0cmluZyc6IGZ1bmN0aW9uIGJvb2xlYW5TdHJpbmcoeCkgewogICAgICAvLyBjb252ZXJ0IHRvIGEgbnVtYmVyIG9yIGJpZ251bWJlcgogICAgICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKCt4KSA6ICt4OwogICAgfQogIH0pOwogIHJldHVybiB1bmFyeVBsdXM7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hcml0aG1ldGljL2Ficy5qcwoKCgp2YXIgYWJzX25hbWUgPSAnYWJzJzsKdmFyIGFic19kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107CnZhciBjcmVhdGVBYnMgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShhYnNfbmFtZSwgYWJzX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkOwoKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIGFic29sdXRlIHZhbHVlIG9mIGEgbnVtYmVyLiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcwogICAqIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmFicyh4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmFicygzLjUpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDMuNQogICAqICAgIG1hdGguYWJzKC00LjIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNC4yCiAgICoKICAgKiAgICBtYXRoLmFicyhbMywgLTUsIC0xLCAwLCAyXSkgIC8vIHJldHVybnMgQXJyYXkgWzMsIDUsIDEsIDAsIDJdCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIHNpZ24KICAgKgogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH0geAogICAqICAgICAgICAgICAgQSBudW1iZXIgb3IgbWF0cml4IGZvciB3aGljaCB0byBnZXQgdGhlIGFic29sdXRlIHZhbHVlCiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fQogICAqICAgICAgICAgICAgQWJzb2x1dGUgdmFsdWUgb2YgYHhgCiAgICovCiAgdmFyIGFicyA9IHR5cGVkKGFic19uYW1lLCB7CiAgICBudW1iZXI6IGFic051bWJlciwKICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkgewogICAgICByZXR1cm4geC5hYnMoKTsKICAgIH0sCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiB4LmFicygpOwogICAgfSwKICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7CiAgICAgIHJldHVybiB4LmFicygpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBhYnMoMCkgPSAwCiAgICAgIHJldHVybiBkZWVwTWFwKHgsIGFicywgdHJ1ZSk7CiAgICB9LAogICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7CiAgICAgIHJldHVybiB4LmFicygpOwogICAgfQogIH0pOwogIHJldHVybiBhYnM7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9tYXRyaXgvYXBwbHkuanMKCgoKCnZhciBhcHBseV9uYW1lID0gJ2FwcGx5JzsKdmFyIGFwcGx5X2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnaXNJbnRlZ2VyJ107CnZhciBjcmVhdGVBcHBseSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGFwcGx5X25hbWUsIGFwcGx5X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBpc0ludGVnZXIgPSBfcmVmLmlzSW50ZWdlcjsKCiAgLyoqCiAgICogQXBwbHkgYSBmdW5jdGlvbiB0aGF0IG1hcHMgYW4gYXJyYXkgdG8gYSBzY2FsYXIKICAgKiBhbG9uZyBhIGdpdmVuIGF4aXMgb2YgYSBtYXRyaXggb3IgYXJyYXkuCiAgICogUmV0dXJucyBhIG5ldyBtYXRyaXggb3IgYXJyYXkgd2l0aCBvbmUgbGVzcyBkaW1lbnNpb24gdGhhbiB0aGUgaW5wdXQuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICAgbWF0aC5hcHBseShBLCBkaW0sIGNhbGxiYWNrKQogICAqCiAgICogV2hlcmU6CiAgICoKICAgKiAtIGBkaW06IG51bWJlcmAgaXMgYSB6ZXJvLWJhc2VkIGRpbWVuc2lvbiBvdmVyIHdoaWNoIHRvIGNvbmNhdGVuYXRlIHRoZSBtYXRyaWNlcy4KICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgY29uc3QgQSA9IFtbMSwgMl0sIFszLCA0XV0KICAgKiAgICBjb25zdCBzdW0gPSBtYXRoLnN1bQogICAqCiAgICogICAgbWF0aC5hcHBseShBLCAwLCBzdW0pICAgICAgICAgICAgIC8vIHJldHVybnMgWzQsIDZdCiAgICogICAgbWF0aC5hcHBseShBLCAxLCBzdW0pICAgICAgICAgICAgIC8vIHJldHVybnMgWzMsIDddCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIG1hcCwgZmlsdGVyLCBmb3JFYWNoCiAgICoKICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBhcnJheSAgIFRoZSBpbnB1dCBNYXRyaXgKICAgKiBAcGFyYW0ge251bWJlcn0gZGltICAgICAgICAgICAgIFRoZSBkaW1lbnNpb24gYWxvbmcgd2hpY2ggdGhlIGNhbGxiYWNrIGlzIGFwcGxpZWQKICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGFwcGxpZWQuIFRoaXMgRnVuY3Rpb24KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCB0YWtlIGFuIGFycmF5IG9yIDEtZCBtYXRyaXggYXMgYW4gaW5wdXQgYW5kCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSBudW1iZXIuCiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9IHJlcyAgICBUaGUgcmVzaWR1YWwgbWF0cml4IHdpdGggdGhlIGZ1bmN0aW9uIGFwcGxpZWQgb3ZlciBzb21lIGRpbWVuc2lvbi4KICAgKi8KICB2YXIgYXBwbHkgPSB0eXBlZChhcHBseV9uYW1lLCB7CiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlciwgZnVuY3Rpb24nOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlckJpZ051bWJlckZ1bmN0aW9uKG1hdCwgZGltLCBjYWxsYmFjaykgewogICAgICBpZiAoIWlzSW50ZWdlcihkaW0pKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW50ZWdlciBudW1iZXIgZXhwZWN0ZWQgZm9yIGRpbWVuc2lvbicpOwogICAgICB9CgogICAgICB2YXIgc2l6ZSA9IEFycmF5LmlzQXJyYXkobWF0KSA/IE9iamVjdCh1dGlsc19hcnJheVsiYSIgLyogYXJyYXlTaXplICovXSkobWF0KSA6IG1hdC5zaXplKCk7CgogICAgICBpZiAoZGltIDwgMCB8fCBkaW0gPj0gc2l6ZS5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgSW5kZXhFcnJvclsiYSIgLyogSW5kZXhFcnJvciAqL10oZGltLCBzaXplLmxlbmd0aCk7CiAgICAgIH0KCiAgICAgIGlmIChPYmplY3QoaXNbInYiIC8qIGlzTWF0cml4ICovXSkobWF0KSkgewogICAgICAgIHJldHVybiBtYXQuY3JlYXRlKF9hcHBseShtYXQudmFsdWVPZigpLCBkaW0sIGNhbGxiYWNrKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIF9hcHBseShtYXQsIGRpbSwgY2FsbGJhY2spOwogICAgICB9CiAgICB9CiAgfSk7CiAgcmV0dXJuIGFwcGx5Owp9KTsKLyoqCiAqIFJlY3Vyc2l2ZWx5IHJlZHVjZSBhIG1hdHJpeAogKiBAcGFyYW0ge0FycmF5fSBtYXQKICogQHBhcmFtIHtudW1iZXJ9IGRpbQogKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjawogKiBAcmV0dXJucyB7QXJyYXl9IHJldAogKiBAcHJpdmF0ZQogKi8KCmZ1bmN0aW9uIF9hcHBseShtYXQsIGRpbSwgY2FsbGJhY2spIHsKICB2YXIgaSwgcmV0LCB0cmFuOwoKICBpZiAoZGltIDw9IDApIHsKICAgIGlmICghQXJyYXkuaXNBcnJheShtYXRbMF0pKSB7CiAgICAgIHJldHVybiBjYWxsYmFjayhtYXQpOwogICAgfSBlbHNlIHsKICAgICAgdHJhbiA9IGFwcGx5X3N3aXRjaChtYXQpOwogICAgICByZXQgPSBbXTsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmFuLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgcmV0W2ldID0gX2FwcGx5KHRyYW5baV0sIGRpbSAtIDEsIGNhbGxiYWNrKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHJldDsKICAgIH0KICB9IGVsc2UgewogICAgcmV0ID0gW107CgogICAgZm9yIChpID0gMDsgaSA8IG1hdC5sZW5ndGg7IGkrKykgewogICAgICByZXRbaV0gPSBfYXBwbHkobWF0W2ldLCBkaW0gLSAxLCBjYWxsYmFjayk7CiAgICB9CgogICAgcmV0dXJuIHJldDsKICB9Cn0KLyoqCiAqIFRyYW5zcG9zZSBhIG1hdHJpeAogKiBAcGFyYW0ge0FycmF5fSBtYXQKICogQHJldHVybnMge0FycmF5fSByZXQKICogQHByaXZhdGUKICovCgoKZnVuY3Rpb24gYXBwbHlfc3dpdGNoKG1hdCkgewogIHZhciBJID0gbWF0Lmxlbmd0aDsKICB2YXIgSiA9IG1hdFswXS5sZW5ndGg7CiAgdmFyIGksIGo7CiAgdmFyIHJldCA9IFtdOwoKICBmb3IgKGogPSAwOyBqIDwgSjsgaisrKSB7CiAgICB2YXIgdG1wID0gW107CgogICAgZm9yIChpID0gMDsgaSA8IEk7IGkrKykgewogICAgICB0bXAucHVzaChtYXRbaV1bal0pOwogICAgfQoKICAgIHJldC5wdXNoKHRtcCk7CiAgfQoKICByZXR1cm4gcmV0Owp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWRkU2NhbGFyLmpzCgoKdmFyIGFkZFNjYWxhcl9uYW1lID0gJ2FkZFNjYWxhcic7CnZhciBhZGRTY2FsYXJfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddOwp2YXIgY3JlYXRlQWRkU2NhbGFyID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoYWRkU2NhbGFyX25hbWUsIGFkZFNjYWxhcl9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDsKCiAgLyoqCiAgICogQWRkIHR3byBzY2FsYXIgdmFsdWVzLCBgeCArIHlgLgogICAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yIGludGVybmFsIHVzZTogaXQgaXMgdXNlZCBieSB0aGUgcHVibGljIGZ1bmN0aW9uCiAgICogYGFkZGAKICAgKgogICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCBjb2xsZWN0aW9ucyAoQXJyYXkgb3IgTWF0cml4KS4KICAgKgogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXR9IHggICBGaXJzdCB2YWx1ZSB0byBhZGQKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXh9IHkgICAgICAgICAgU2Vjb25kIHZhbHVlIHRvIGFkZAogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXR9ICAgICBTdW0gb2YgYHhgIGFuZCBgeWAKICAgKiBAcHJpdmF0ZQogICAqLwogIHZhciBhZGRTY2FsYXIgPSB0eXBlZChhZGRTY2FsYXJfbmFtZSwgewogICAgJ251bWJlciwgbnVtYmVyJzogYWRkTnVtYmVyLAogICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7CiAgICAgIHJldHVybiB4LmFkZCh5KTsKICAgIH0sCiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkgewogICAgICByZXR1cm4geC5wbHVzKHkpOwogICAgfSwKICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHsKICAgICAgcmV0dXJuIHguYWRkKHkpOwogICAgfSwKICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkgewogICAgICBpZiAoeC52YWx1ZSA9PT0gbnVsbCB8fCB4LnZhbHVlID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVyIHggY29udGFpbnMgYSB1bml0IHdpdGggdW5kZWZpbmVkIHZhbHVlJyk7CiAgICAgIGlmICh5LnZhbHVlID09PSBudWxsIHx8IHkudmFsdWUgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgeSBjb250YWlucyBhIHVuaXQgd2l0aCB1bmRlZmluZWQgdmFsdWUnKTsKICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkgdGhyb3cgbmV3IEVycm9yKCdVbml0cyBkbyBub3QgbWF0Y2gnKTsKICAgICAgdmFyIHJlcyA9IHguY2xvbmUoKTsKICAgICAgcmVzLnZhbHVlID0gYWRkU2NhbGFyKHJlcy52YWx1ZSwgeS52YWx1ZSk7CiAgICAgIHJlcy5maXhQcmVmaXggPSBmYWxzZTsKICAgICAgcmV0dXJuIHJlczsKICAgIH0KICB9KTsKICByZXR1cm4gYWRkU2NhbGFyOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYXJpdGhtZXRpYy9jYnJ0LmpzCgoKCgp2YXIgY2JydF9uYW1lID0gJ2NicnQnOwp2YXIgY2JydF9kZXBlbmRlbmNpZXMgPSBbJ2NvbmZpZycsICd0eXBlZCcsICdpc05lZ2F0aXZlJywgJ3VuYXJ5TWludXMnLCAnbWF0cml4JywgJ0NvbXBsZXgnLCAnQmlnTnVtYmVyJywgJ0ZyYWN0aW9uJ107CnZhciBjcmVhdGVDYnJ0ID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoY2JydF9uYW1lLCBjYnJ0X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgaXNOZWdhdGl2ZSA9IF9yZWYuaXNOZWdhdGl2ZSwKICAgICAgdW5hcnlNaW51cyA9IF9yZWYudW5hcnlNaW51cywKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXgsCiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLAogICAgICBGcmFjdGlvbiA9IF9yZWYuRnJhY3Rpb247CgogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgY3ViaWMgcm9vdCBvZiBhIHZhbHVlLgogICAqCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguY2JydCh4KQogICAqICAgIG1hdGguY2JydCh4LCBhbGxSb290cykKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5jYnJ0KDI3KSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMwogICAqICAgIG1hdGguY3ViZSgzKSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDI3CiAgICogICAgbWF0aC5jYnJ0KC02NCkgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgLTQKICAgKiAgICBtYXRoLmNicnQobWF0aC51bml0KCcyNyBtXjMnKSkgLy8gcmV0dXJucyBVbml0IDMgbQogICAqICAgIG1hdGguY2JydChbMjcsIDY0LCAxMjVdKSAgICAgICAvLyByZXR1cm5zIFszLCA0LCA1XQogICAqCiAgICogICAgY29uc3QgeCA9IG1hdGguY29tcGxleCgnOGknKQogICAqICAgIG1hdGguY2JydCh4KSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMS43MzIwNTA4MDc1Njg5ICsgaQogICAqICAgIG1hdGguY2JydCh4LCB0cnVlKSAgICAgICAgICAgICAvLyByZXR1cm5zIE1hdHJpeCBbCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAxLjczMjA1MDgwNzU2ODkgKyBpCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIC0xLjczMjA1MDgwNzU2ODkgKyBpCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIC0yaQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gXQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBzcXVhcmUsIHNxcnQsIGN1YmUKICAgKgogICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geAogICAqICAgICAgICAgICAgVmFsdWUgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgY3ViaWMgcm9vdC4KICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxSb290c10gIE9wdGlvbmFsLCBmYWxzZSBieSBkZWZhdWx0LiBPbmx5IGFwcGxpY2FibGUKICAgKiAgICAgICAgICAgIHdoZW4gYHhgIGlzIGEgbnVtYmVyIG9yIGNvbXBsZXggbnVtYmVyLiBJZiB0cnVlLCBhbGwgY29tcGxleAogICAqICAgICAgICAgICAgcm9vdHMgYXJlIHJldHVybmVkLCBpZiBmYWxzZSAoZGVmYXVsdCkgdGhlIHByaW5jaXBhbCByb290IGlzCiAgICogICAgICAgICAgICByZXR1cm5lZC4KICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fQogICAqICAgICAgICAgICAgUmV0dXJucyB0aGUgY3ViaWMgcm9vdCBvZiBgeGAKICAgKi8KICB2YXIgY2JydCA9IHR5cGVkKGNicnRfbmFtZSwgewogICAgbnVtYmVyOiBjYnJ0TnVtYmVyLAogICAgLy8gbm90ZTogc2lnbmF0dXJlICdudW1iZXIsIGJvb2xlYW4nIGlzIGFsc28gc3VwcG9ydGVkLAogICAgLy8gICAgICAgY3JlYXRlZCBieSB0eXBlZCBhcyBpdCBrbm93cyBob3cgdG8gY29udmVydCBudW1iZXIgdG8gQ29tcGxleAogICAgQ29tcGxleDogX2NicnRDb21wbGV4LAogICAgJ0NvbXBsZXgsIGJvb2xlYW4nOiBfY2JydENvbXBsZXgsCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiB4LmNicnQoKTsKICAgIH0sCiAgICBVbml0OiBfY2JydFVuaXQsCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgY2JydCgwKSA9IDAKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgY2JydCwgdHJ1ZSk7CiAgICB9CiAgfSk7CiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBjdWJpYyByb290IGZvciBhIGNvbXBsZXggbnVtYmVyCiAgICogQHBhcmFtIHtDb21wbGV4fSB4CiAgICogQHBhcmFtIHtib29sZWFufSBbYWxsUm9vdHNdICAgSWYgdHJ1ZSwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGFycmF5CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhbGwgdGhyZWUgcm9vdHMuIElmIGZhbHNlIG9yIHVuZGVmaW5lZCwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJpbmNpcGFsIHJvb3QgaXMgcmV0dXJuZWQuCiAgICogQHJldHVybnMge0NvbXBsZXggfCBBcnJheS48Q29tcGxleD4gfCBNYXRyaXguPENvbXBsZXg+fSBSZXR1cm5zIHRoZSBjdWJpYyByb290KHMpIG9mIHgKICAgKiBAcHJpdmF0ZQogICAqLwoKICBmdW5jdGlvbiBfY2JydENvbXBsZXgoeCwgYWxsUm9vdHMpIHsKICAgIC8vIGh0dHBzOi8vd3d3Lndpa2l3YW5kLmNvbS9lbi9DdWJlX3Jvb3QjL0NvbXBsZXhfbnVtYmVycwogICAgdmFyIGFyZzMgPSB4LmFyZygpIC8gMzsKICAgIHZhciBhYnMgPSB4LmFicygpOyAvLyBwcmluY2lwYWwgcm9vdDoKCiAgICB2YXIgcHJpbmNpcGFsID0gbmV3IENvbXBsZXgoY2JydE51bWJlcihhYnMpLCAwKS5tdWwobmV3IENvbXBsZXgoMCwgYXJnMykuZXhwKCkpOwoKICAgIGlmIChhbGxSb290cykgewogICAgICB2YXIgYWxsID0gW3ByaW5jaXBhbCwgbmV3IENvbXBsZXgoY2JydE51bWJlcihhYnMpLCAwKS5tdWwobmV3IENvbXBsZXgoMCwgYXJnMyArIE1hdGguUEkgKiAyIC8gMykuZXhwKCkpLCBuZXcgQ29tcGxleChjYnJ0TnVtYmVyKGFicyksIDApLm11bChuZXcgQ29tcGxleCgwLCBhcmczIC0gTWF0aC5QSSAqIDIgLyAzKS5leHAoKSldOwogICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IGFsbCA6IG1hdHJpeChhbGwpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHByaW5jaXBhbDsKICAgIH0KICB9CiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBjdWJpYyByb290IGZvciBhIFVuaXQKICAgKiBAcGFyYW0ge1VuaXR9IHgKICAgKiBAcmV0dXJuIHtVbml0fSBSZXR1cm5zIHRoZSBjdWJpYyByb290IG9mIHgKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gX2NicnRVbml0KHgpIHsKICAgIGlmICh4LnZhbHVlICYmIE9iamVjdChpc1siaiIgLyogaXNDb21wbGV4ICovXSkoeC52YWx1ZSkpIHsKICAgICAgdmFyIHJlc3VsdCA9IHguY2xvbmUoKTsKICAgICAgcmVzdWx0LnZhbHVlID0gMS4wOwogICAgICByZXN1bHQgPSByZXN1bHQucG93KDEuMCAvIDMpOyAvLyBDb21wdXRlIHRoZSB1bml0cwoKICAgICAgcmVzdWx0LnZhbHVlID0gX2NicnRDb21wbGV4KHgudmFsdWUpOyAvLyBDb21wdXRlIHRoZSB2YWx1ZQoKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBuZWdhdGUgPSBpc05lZ2F0aXZlKHgudmFsdWUpOwoKICAgICAgaWYgKG5lZ2F0ZSkgewogICAgICAgIHgudmFsdWUgPSB1bmFyeU1pbnVzKHgudmFsdWUpOwogICAgICB9IC8vIFRPRE86IGNyZWF0ZSBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhpcwoKCiAgICAgIHZhciB0aGlyZDsKCiAgICAgIGlmIChPYmplY3QoaXNbImUiIC8qIGlzQmlnTnVtYmVyICovXSkoeC52YWx1ZSkpIHsKICAgICAgICB0aGlyZCA9IG5ldyBCaWdOdW1iZXIoMSkuZGl2KDMpOwogICAgICB9IGVsc2UgaWYgKE9iamVjdChpc1sibyIgLyogaXNGcmFjdGlvbiAqL10pKHgudmFsdWUpKSB7CiAgICAgICAgdGhpcmQgPSBuZXcgRnJhY3Rpb24oMSwgMyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcmQgPSAxIC8gMzsKICAgICAgfQoKICAgICAgdmFyIF9yZXN1bHQgPSB4LnBvdyh0aGlyZCk7CgogICAgICBpZiAobmVnYXRlKSB7CiAgICAgICAgX3Jlc3VsdC52YWx1ZSA9IHVuYXJ5TWludXMoX3Jlc3VsdC52YWx1ZSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBfcmVzdWx0OwogICAgfQogIH0KCiAgcmV0dXJuIGNicnQ7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hcml0aG1ldGljL2NlaWwuanMKCgoKCgp2YXIgY2VpbF9uYW1lID0gJ2NlaWwnOwp2YXIgY2VpbF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdyb3VuZCddOwp2YXIgY3JlYXRlQ2VpbCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGNlaWxfbmFtZSwgY2VpbF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIHJvdW5kID0gX3JlZi5yb3VuZDsKCiAgLyoqCiAgICogUm91bmQgYSB2YWx1ZSB0b3dhcmRzIHBsdXMgaW5maW5pdHkKICAgKiBJZiBgeGAgaXMgY29tcGxleCwgYm90aCByZWFsIGFuZCBpbWFnaW5hcnkgcGFydCBhcmUgcm91bmRlZCB0b3dhcmRzIHBsdXMgaW5maW5pdHkuCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguY2VpbCh4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmNlaWwoMy4yKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDQKICAgKiAgICBtYXRoLmNlaWwoMy44KSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDQKICAgKiAgICBtYXRoLmNlaWwoLTQuMikgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC00CiAgICogICAgbWF0aC5jZWlsKC00LjcpICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAtNAogICAqCiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgzLjIsIC0yLjcpCiAgICogICAgbWF0aC5jZWlsKGMpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggNCAtIDJpCiAgICoKICAgKiAgICBtYXRoLmNlaWwoWzMuMiwgMy44LCAtNC43XSkgIC8vIHJldHVybnMgQXJyYXkgWzQsIDQsIC00XQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBmbG9vciwgZml4LCByb3VuZAogICAqCiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIE51bWJlciB0byBiZSByb3VuZGVkCiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFJvdW5kZWQgdmFsdWUKICAgKi8KICB2YXIgY2VpbCA9IHR5cGVkKCdjZWlsJywgewogICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkgewogICAgICBpZiAoT2JqZWN0KHV0aWxzX251bWJlclsibSIgLyogbmVhcmx5RXF1YWwgKi9dKSh4LCByb3VuZCh4KSwgY29uZmlnLmVwc2lsb24pKSB7CiAgICAgICAgcmV0dXJuIHJvdW5kKHgpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBjZWlsTnVtYmVyKHgpOwogICAgICB9CiAgICB9LAogICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7CiAgICAgIHJldHVybiB4LmNlaWwoKTsKICAgIH0sCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIGlmIChuZWFybHlFcXVhbCh4LCByb3VuZCh4KSwgY29uZmlnLmVwc2lsb24pKSB7CiAgICAgICAgcmV0dXJuIHJvdW5kKHgpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB4LmNlaWwoKTsKICAgICAgfQogICAgfSwKICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7CiAgICAgIHJldHVybiB4LmNlaWwoKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgY2VpbCgwKSA9IDAKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgY2VpbCwgdHJ1ZSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGNlaWw7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hcml0aG1ldGljL2N1YmUuanMKCgoKdmFyIGN1YmVfbmFtZSA9ICdjdWJlJzsKdmFyIGN1YmVfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddOwp2YXIgY3JlYXRlQ3ViZSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGN1YmVfbmFtZSwgY3ViZV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDsKCiAgLyoqCiAgICogQ29tcHV0ZSB0aGUgY3ViZSBvZiBhIHZhbHVlLCBgeCAqIHggKiB4YC4KICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5jdWJlKHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguY3ViZSgyKSAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDgKICAgKiAgICBtYXRoLnBvdygyLCAzKSAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA4CiAgICogICAgbWF0aC5jdWJlKDQpICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNjQKICAgKiAgICA0ICogNCAqIDQgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA2NAogICAqCiAgICogICAgbWF0aC5jdWJlKFsxLCAyLCAzLCA0XSkgLy8gcmV0dXJucyBBcnJheSBbMSwgOCwgMjcsIDY0XQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBtdWx0aXBseSwgc3F1YXJlLCBwb3csIGNicnQKICAgKgogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH0geCAgTnVtYmVyIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIGN1YmUKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9IEN1YmUgb2YgeAogICAqLwogIHZhciBjdWJlID0gdHlwZWQoY3ViZV9uYW1lLCB7CiAgICBudW1iZXI6IGN1YmVOdW1iZXIsCiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHsKICAgICAgcmV0dXJuIHgubXVsKHgpLm11bCh4KTsgLy8gSXMgZmFzdGVyIHRoYW4gcG93KHgsIDMpCiAgICB9LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkgewogICAgICByZXR1cm4geC50aW1lcyh4KS50aW1lcyh4KTsKICAgIH0sCiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkgewogICAgICByZXR1cm4geC5wb3coMyk7IC8vIElzIGZhc3RlciB0aGFuIG11bCgpbXVsKCltdWwoKQogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBjdWJlKDApID0gMAogICAgICByZXR1cm4gZGVlcE1hcCh4LCBjdWJlLCB0cnVlKTsKICAgIH0sCiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHsKICAgICAgcmV0dXJuIHgucG93KDMpOwogICAgfQogIH0pOwogIHJldHVybiBjdWJlOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYXJpdGhtZXRpYy9leHAuanMKCgoKdmFyIGV4cF9uYW1lID0gJ2V4cCc7CnZhciBleHBfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddOwp2YXIgY3JlYXRlRXhwID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoZXhwX25hbWUsIGV4cF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDsKCiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBleHBvbmVudCBvZiBhIHZhbHVlLgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmV4cCh4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmV4cCgyKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDcuMzg5MDU2MDk4OTMwNjQ5NQogICAqICAgIG1hdGgucG93KG1hdGguZSwgMikgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNy4zODkwNTYwOTg5MzA2NDk1CiAgICogICAgbWF0aC5sb2cobWF0aC5leHAoMikpICAgICAgICAvLyByZXR1cm5zIG51bWJlciAyCiAgICoKICAgKiAgICBtYXRoLmV4cChbMSwgMiwgM10pCiAgICogICAgLy8gcmV0dXJucyBBcnJheSBbCiAgICogICAgLy8gICAyLjcxODI4MTgyODQ1OTA0NSwKICAgKiAgICAvLyAgIDcuMzg5MDU2MDk4OTMwNjQ5NSwKICAgKiAgICAvLyAgIDIwLjA4NTUzNjkyMzE4NzY2OAogICAqICAgIC8vIF0KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgZXhwbTEsIGxvZywgcG93CiAgICoKICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgQSBudW1iZXIgb3IgbWF0cml4IHRvIGV4cG9uZW50aWF0ZQogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gRXhwb25lbnQgb2YgYHhgCiAgICovCiAgdmFyIGV4cCA9IHR5cGVkKGV4cF9uYW1lLCB7CiAgICBudW1iZXI6IGV4cE51bWJlciwKICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkgewogICAgICByZXR1cm4geC5leHAoKTsKICAgIH0sCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiB4LmV4cCgpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgLy8gVE9ETzogZXhwKHNwYXJzZSkgc2hvdWxkIHJldHVybiBhIGRlbnNlIG1hdHJpeCBzaW5jZSBleHAoMCk9PTEKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgZXhwKTsKICAgIH0KICB9KTsKICByZXR1cm4gZXhwOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYXJpdGhtZXRpYy9leHBtMS5qcwoKCgp2YXIgZXhwbTFfbmFtZSA9ICdleHBtMSc7CnZhciBleHBtMV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0NvbXBsZXgnXTsKdmFyIGNyZWF0ZUV4cG0xID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoZXhwbTFfbmFtZSwgZXhwbTFfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIF9Db21wbGV4ID0gX3JlZi5Db21wbGV4OwoKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIHZhbHVlIG9mIHN1YnRyYWN0aW5nIDEgZnJvbSB0aGUgZXhwb25lbnRpYWwgdmFsdWUuCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguZXhwbTEoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5leHBtMSgyKSAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA2LjM4OTA1NjA5ODkzMDY1CiAgICogICAgbWF0aC5wb3cobWF0aC5lLCAyKSAtIDEgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA2LjM4OTA1NjA5ODkzMDY0OTUKICAgKiAgICBtYXRoLmxvZyhtYXRoLmV4cG0xKDIpICsgMSkgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDIKICAgKgogICAqICAgIG1hdGguZXhwbTEoWzEsIDIsIDNdKQogICAqICAgIC8vIHJldHVybnMgQXJyYXkgWwogICAqICAgIC8vICAgMS43MTgyODE4Mjg0NTkwNDUsCiAgICogICAgLy8gICA2LjM4OTA1NjA5ODkzMDY0OTUsCiAgICogICAgLy8gICAxOS4wODU1MzY5MjMxODc2NjgKICAgKiAgICAvLyBdCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGV4cCwgbG9nLCBwb3cKICAgKgogICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBBIG51bWJlciBvciBtYXRyaXggdG8gYXBwbHkgZXhwbTEKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEV4cG9uZW50IG9mIGB4YAogICAqLwogIHZhciBleHBtMSA9IHR5cGVkKGV4cG0xX25hbWUsIHsKICAgIG51bWJlcjogZXhwbTFOdW1iZXIsCiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHsKICAgICAgdmFyIHIgPSBNYXRoLmV4cCh4LnJlKTsKICAgICAgcmV0dXJuIG5ldyBfQ29tcGxleChyICogTWF0aC5jb3MoeC5pbSkgLSAxLCByICogTWF0aC5zaW4oeC5pbSkpOwogICAgfSwKICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHsKICAgICAgcmV0dXJuIHguZXhwKCkubWludXMoMSk7CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkgewogICAgICByZXR1cm4gZGVlcE1hcCh4LCBleHBtMSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGV4cG0xOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYXJpdGhtZXRpYy9maXguanMKCgp2YXIgZml4X25hbWUgPSAnZml4JzsKdmFyIGZpeF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0NvbXBsZXgnLCAnY2VpbCcsICdmbG9vciddOwp2YXIgY3JlYXRlRml4ID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoZml4X25hbWUsIGZpeF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgX0NvbXBsZXggPSBfcmVmLkNvbXBsZXgsCiAgICAgIGNlaWwgPSBfcmVmLmNlaWwsCiAgICAgIGZsb29yID0gX3JlZi5mbG9vcjsKCiAgLyoqCiAgICogUm91bmQgYSB2YWx1ZSB0b3dhcmRzIHplcm8uCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguZml4KHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguZml4KDMuMikgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMwogICAqICAgIG1hdGguZml4KDMuOCkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMwogICAqICAgIG1hdGguZml4KC00LjIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTQKICAgKiAgICBtYXRoLmZpeCgtNC43KSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC00CiAgICoKICAgKiAgICBjb25zdCBjID0gbWF0aC5jb21wbGV4KDMuMiwgLTIuNykKICAgKiAgICBtYXRoLmZpeChjKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgQ29tcGxleCAzIC0gMmkKICAgKgogICAqICAgIG1hdGguZml4KFszLjIsIDMuOCwgLTQuN10pICAgLy8gcmV0dXJucyBBcnJheSBbMywgMywgLTRdCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGNlaWwsIGZsb29yLCByb3VuZAogICAqCiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCBOdW1iZXIgdG8gYmUgcm91bmRlZAogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgIFJvdW5kZWQgdmFsdWUKICAgKi8KICB2YXIgZml4ID0gdHlwZWQoJ2ZpeCcsIHsKICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHsKICAgICAgcmV0dXJuIHggPiAwID8gZmxvb3IoeCkgOiBjZWlsKHgpOwogICAgfSwKICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkgewogICAgICByZXR1cm4gbmV3IF9Db21wbGV4KHgucmUgPiAwID8gTWF0aC5mbG9vcih4LnJlKSA6IE1hdGguY2VpbCh4LnJlKSwgeC5pbSA+IDAgPyBNYXRoLmZsb29yKHguaW0pIDogTWF0aC5jZWlsKHguaW0pKTsKICAgIH0sCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiB4LmlzTmVnYXRpdmUoKSA/IGNlaWwoeCkgOiBmbG9vcih4KTsKICAgIH0sCiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkgewogICAgICByZXR1cm4geC5zIDwgMCA/IHguY2VpbCgpIDogeC5mbG9vcigpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBmaXgoMCkgPSAwCiAgICAgIHJldHVybiBkZWVwTWFwKHgsIGZpeCwgdHJ1ZSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGZpeDsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2FyaXRobWV0aWMvZmxvb3IuanMKCgoKCnZhciBmbG9vcl9uYW1lID0gJ2Zsb29yJzsKdmFyIGZsb29yX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ3JvdW5kJ107CnZhciBjcmVhdGVGbG9vciA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGZsb29yX25hbWUsIGZsb29yX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBjb25maWcgPSBfcmVmLmNvbmZpZywKICAgICAgcm91bmQgPSBfcmVmLnJvdW5kOwoKICAvKioKICAgKiBSb3VuZCBhIHZhbHVlIHRvd2FyZHMgbWludXMgaW5maW5pdHkuCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguZmxvb3IoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5mbG9vcigzLjIpICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzCiAgICogICAgbWF0aC5mbG9vcigzLjgpICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzCiAgICogICAgbWF0aC5mbG9vcigtNC4yKSAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAtNQogICAqICAgIG1hdGguZmxvb3IoLTQuNykgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTUKICAgKgogICAqICAgIGNvbnN0IGMgPSBtYXRoLmNvbXBsZXgoMy4yLCAtMi43KQogICAqICAgIG1hdGguZmxvb3IoYykgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDMgLSAzaQogICAqCiAgICogICAgbWF0aC5mbG9vcihbMy4yLCAzLjgsIC00LjddKSAvLyByZXR1cm5zIEFycmF5IFszLCAzLCAtNV0KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgY2VpbCwgZml4LCByb3VuZAogICAqCiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIE51bWJlciB0byBiZSByb3VuZGVkCiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFJvdW5kZWQgdmFsdWUKICAgKi8KICB2YXIgZmxvb3IgPSB0eXBlZCgnZmxvb3InLCB7CiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7CiAgICAgIGlmIChPYmplY3QodXRpbHNfbnVtYmVyWyJtIiAvKiBuZWFybHlFcXVhbCAqL10pKHgsIHJvdW5kKHgpLCBjb25maWcuZXBzaWxvbikpIHsKICAgICAgICByZXR1cm4gcm91bmQoeCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoeCk7CiAgICAgIH0KICAgIH0sCiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHsKICAgICAgcmV0dXJuIHguZmxvb3IoKTsKICAgIH0sCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIGlmIChuZWFybHlFcXVhbCh4LCByb3VuZCh4KSwgY29uZmlnLmVwc2lsb24pKSB7CiAgICAgICAgcmV0dXJuIHJvdW5kKHgpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB4LmZsb29yKCk7CiAgICAgIH0KICAgIH0sCiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkgewogICAgICByZXR1cm4geC5mbG9vcigpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBmbG9vcigwKSA9IDAKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgZmxvb3IsIHRydWUpOwogICAgfQogIH0pOwogIHJldHVybiBmbG9vcjsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAxLmpzCgoKdmFyIGFsZ29yaXRobTAxX25hbWUgPSAnYWxnb3JpdGhtMDEnOwp2YXIgYWxnb3JpdGhtMDFfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddOwp2YXIgY3JlYXRlQWxnb3JpdGhtMDEgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShhbGdvcml0aG0wMV9uYW1lLCBhbGdvcml0aG0wMV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDsKCiAgLyoqCiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggbm9uemVybyBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihEaWosIFNpaikuCiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBOTlogdGltZXMgKG51bWJlciBvZiBub256ZXJvIGl0ZW1zIGluIFNwYXJzZU1hdHJpeCkuCiAgICoKICAgKgogICAqICAgICAgICAgIOKUjCAgZihEaWosIFNpaikgIDsgUyhpLGopICE9PSAwCiAgICogQyhpLGopID0g4pSkCiAgICogICAgICAgICAg4pSUICBEaWogICAgICAgICAgOyBvdGhlcndpc2UKICAgKgogICAqCiAgICogQHBhcmFtIHtNYXRyaXh9ICAgZGVuc2VNYXRyaXggICAgICAgVGhlIERlbnNlTWF0cml4IGluc3RhbmNlIChEKQogICAqIEBwYXJhbSB7TWF0cml4fSAgIHNwYXJzZU1hdHJpeCAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKFMpCiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICAgICAgICAgVGhlIGYoRGlqLFNpaikgb3BlcmF0aW9uIHRvIGludm9rZSwgd2hlcmUgRGlqID0gRGVuc2VNYXRyaXgoaSxqKSBhbmQgU2lqID0gU3BhcnNlTWF0cml4KGksaikKICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBpbnZlcnNlICAgICAgICAgICBBIHRydWUgdmFsdWUgaW5kaWNhdGVzIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkIGYoU2lqLERpaikKICAgKgogICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIERlbnNlTWF0cml4IChDKQogICAqCiAgICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzQ3NzU3MQogICAqLwogIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0xKGRlbnNlTWF0cml4LCBzcGFyc2VNYXRyaXgsIGNhbGxiYWNrLCBpbnZlcnNlKSB7CiAgICAvLyBkZW5zZSBtYXRyaXggYXJyYXlzCiAgICB2YXIgYWRhdGEgPSBkZW5zZU1hdHJpeC5fZGF0YTsKICAgIHZhciBhc2l6ZSA9IGRlbnNlTWF0cml4Ll9zaXplOwogICAgdmFyIGFkdCA9IGRlbnNlTWF0cml4Ll9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXMKCiAgICB2YXIgYnZhbHVlcyA9IHNwYXJzZU1hdHJpeC5fdmFsdWVzOwogICAgdmFyIGJpbmRleCA9IHNwYXJzZU1hdHJpeC5faW5kZXg7CiAgICB2YXIgYnB0ciA9IHNwYXJzZU1hdHJpeC5fcHRyOwogICAgdmFyIGJzaXplID0gc3BhcnNlTWF0cml4Ll9zaXplOwogICAgdmFyIGJkdCA9IHNwYXJzZU1hdHJpeC5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnMKCiAgICBpZiAoYXNpemUubGVuZ3RoICE9PSBic2l6ZS5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IERpbWVuc2lvbkVycm9yWyJhIiAvKiBEaW1lbnNpb25FcnJvciAqL10oYXNpemUubGVuZ3RoLCBic2l6ZS5sZW5ndGgpOwogICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1ucwoKCiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTsKICAgIH0gLy8gc3BhcnNlIG1hdHJpeCBjYW5ub3QgYmUgYSBQYXR0ZXJuIG1hdHJpeAoKCiAgICBpZiAoIWJ2YWx1ZXMpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gRGVuc2UgTWF0cml4IGFuZCBQYXR0ZXJuIFNwYXJzZSBNYXRyaXgnKTsKICAgIH0gLy8gcm93cyAmIGNvbHVtbnMKCgogICAgdmFyIHJvd3MgPSBhc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIHByb2Nlc3MgZGF0YSB0eXBlcwoKICAgIHZhciBkdCA9IHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0ID8gYWR0IDogdW5kZWZpbmVkOyAvLyBjYWxsYmFjayBmdW5jdGlvbgoKICAgIHZhciBjZiA9IGR0ID8gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pIDogY2FsbGJhY2s7IC8vIHZhcnMKCiAgICB2YXIgaSwgajsgLy8gcmVzdWx0IChEZW5zZU1hdHJpeCkKCiAgICB2YXIgY2RhdGEgPSBbXTsgLy8gaW5pdGlhbGl6ZSBjCgogICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykgewogICAgICBjZGF0YVtpXSA9IFtdOwogICAgfSAvLyB3b3Jrc3BhY2UKCgogICAgdmFyIHggPSBbXTsgLy8gbWFya3MgaW5kaWNhdGluZyB3ZSBoYXZlIGEgdmFsdWUgaW4geCBmb3IgYSBnaXZlbiBjb2x1bW4KCiAgICB2YXIgdyA9IFtdOyAvLyBsb29wIGNvbHVtbnMgaW4gYgoKICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHsKICAgICAgLy8gY29sdW1uIG1hcmsKICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gdmFsdWVzIGluIGNvbHVtbiBqCgogICAgICBmb3IgKHZhciBrMCA9IGJwdHJbal0sIGsxID0gYnB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHsKICAgICAgICAvLyByb3cKICAgICAgICBpID0gYmluZGV4W2tdOyAvLyB1cGRhdGUgd29ya3NwYWNlCgogICAgICAgIHhbaV0gPSBpbnZlcnNlID8gY2YoYnZhbHVlc1trXSwgYWRhdGFbaV1bal0pIDogY2YoYWRhdGFbaV1bal0sIGJ2YWx1ZXNba10pOyAvLyBtYXJrIGkgYXMgdXBkYXRlZAoKICAgICAgICB3W2ldID0gbWFyazsKICAgICAgfSAvLyBsb29wIHJvd3MKCgogICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7CiAgICAgICAgLy8gY2hlY2sgcm93IGlzIGluIHdvcmtzcGFjZQogICAgICAgIGlmICh3W2ldID09PSBtYXJrKSB7CiAgICAgICAgICAvLyBjW2ldW2pdIHdhcyBhbHJlYWR5IGNhbGN1bGF0ZWQKICAgICAgICAgIGNkYXRhW2ldW2pdID0geFtpXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gaXRlbSBkb2VzIG5vdCBleGlzdCBpbiBTCiAgICAgICAgICBjZGF0YVtpXVtqXSA9IGFkYXRhW2ldW2pdOwogICAgICAgIH0KICAgICAgfQogICAgfSAvLyByZXR1cm4gZGVuc2UgbWF0cml4CgoKICAgIHJldHVybiBkZW5zZU1hdHJpeC5jcmVhdGVEZW5zZU1hdHJpeCh7CiAgICAgIGRhdGE6IGNkYXRhLAogICAgICBzaXplOiBbcm93cywgY29sdW1uc10sCiAgICAgIGRhdGF0eXBlOiBkdAogICAgfSk7CiAgfTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA0LmpzCgoKdmFyIGFsZ29yaXRobTA0X25hbWUgPSAnYWxnb3JpdGhtMDQnOwp2YXIgYWxnb3JpdGhtMDRfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhciddOwp2YXIgY3JlYXRlQWxnb3JpdGhtMDQgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShhbGdvcml0aG0wNF9uYW1lLCBhbGdvcml0aG0wNF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyOwoKICAvKioKICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBBIGFuZCBTcGFyc2VNYXRyaXggQiBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKEFpaiwgQmlqKS4KICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIE1BWChOTlpBLCBOTlpCKSB0aW1lcwogICAqCiAgICoKICAgKiAgICAgICAgICDilIwgIGYoQWlqLCBCaWopICA7IEEoaSxqKSAhPT0gMCAmJiBCKGksaikgIT09IDAKICAgKiBDKGksaikgPSDilKQgIEEoaSxqKSAgICAgICA7IEEoaSxqKSAhPT0gMAogICAqICAgICAgICAgIOKUlCAgQihpLGopICAgICAgIDsgQihpLGopICE9PSAwCiAgICoKICAgKgogICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEEpCiAgICogQHBhcmFtIHtNYXRyaXh9ICAgYiAgICAgICAgICAgICAgICAgVGhlIFNwYXJzZU1hdHJpeCBpbnN0YW5jZSAoQikKICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosQmlqKSBvcGVyYXRpb24gdG8gaW52b2tlCiAgICoKICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBTcGFyc2VNYXRyaXggKEMpCiAgICoKICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjIwMjk0CiAgICovCiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTA0KGEsIGIsIGNhbGxiYWNrKSB7CiAgICAvLyBzcGFyc2UgbWF0cml4IGFycmF5cwogICAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7CiAgICB2YXIgYWluZGV4ID0gYS5faW5kZXg7CiAgICB2YXIgYXB0ciA9IGEuX3B0cjsKICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7CiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzCgogICAgdmFyIGJ2YWx1ZXMgPSBiLl92YWx1ZXM7CiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7CiAgICB2YXIgYnB0ciA9IGIuX3B0cjsKICAgIHZhciBic2l6ZSA9IGIuX3NpemU7CiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnMKCiAgICBpZiAoYXNpemUubGVuZ3RoICE9PSBic2l6ZS5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IERpbWVuc2lvbkVycm9yWyJhIiAvKiBEaW1lbnNpb25FcnJvciAqL10oYXNpemUubGVuZ3RoLCBic2l6ZS5sZW5ndGgpOwogICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1ucwoKCiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTsKICAgIH0gLy8gcm93cyAmIGNvbHVtbnMKCgogICAgdmFyIHJvd3MgPSBhc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlCgogICAgdmFyIGR0OyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlCgogICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWUKCiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2UKCiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzCgogICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7CiAgICAgIC8vIGRhdGF0eXBlCiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdCkKCiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGUKCiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2sKCiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pOwogICAgfSAvLyByZXN1bHQgYXJyYXlzCgoKICAgIHZhciBjdmFsdWVzID0gYXZhbHVlcyAmJiBidmFsdWVzID8gW10gOiB1bmRlZmluZWQ7CiAgICB2YXIgY2luZGV4ID0gW107CiAgICB2YXIgY3B0ciA9IFtdOyAvLyB3b3Jrc3BhY2UKCiAgICB2YXIgeGEgPSBhdmFsdWVzICYmIGJ2YWx1ZXMgPyBbXSA6IHVuZGVmaW5lZDsKICAgIHZhciB4YiA9IGF2YWx1ZXMgJiYgYnZhbHVlcyA/IFtdIDogdW5kZWZpbmVkOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtbgoKICAgIHZhciB3YSA9IFtdOwogICAgdmFyIHdiID0gW107IC8vIHZhcnMKCiAgICB2YXIgaSwgaiwgaywgazAsIGsxOyAvLyBsb29wIGNvbHVtbnMKCiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7CiAgICAgIC8vIHVwZGF0ZSBjcHRyCiAgICAgIGNwdHJbal0gPSBjaW5kZXgubGVuZ3RoOyAvLyBjb2x1bW5zIG1hcmsKCiAgICAgIHZhciBtYXJrID0gaiArIDE7IC8vIGxvb3AgQSg6LGopCgogICAgICBmb3IgKGswID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykgewogICAgICAgIC8vIHJvdwogICAgICAgIGkgPSBhaW5kZXhba107IC8vIHVwZGF0ZSBjCgogICAgICAgIGNpbmRleC5wdXNoKGkpOyAvLyB1cGRhdGUgd29ya3NwYWNlCgogICAgICAgIHdhW2ldID0gbWFyazsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcwoKICAgICAgICBpZiAoeGEpIHsKICAgICAgICAgIHhhW2ldID0gYXZhbHVlc1trXTsKICAgICAgICB9CiAgICAgIH0gLy8gbG9vcCBCKDosaikKCgogICAgICBmb3IgKGswID0gYnB0cltqXSwgazEgPSBicHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykgewogICAgICAgIC8vIHJvdwogICAgICAgIGkgPSBiaW5kZXhba107IC8vIGNoZWNrIHJvdyBleGlzdHMgaW4gQQoKICAgICAgICBpZiAod2FbaV0gPT09IG1hcmspIHsKICAgICAgICAgIC8vIHVwZGF0ZSByZWNvcmQgaW4geGEgQCBpCiAgICAgICAgICBpZiAoeGEpIHsKICAgICAgICAgICAgLy8gaW52b2tlIGNhbGxiYWNrCiAgICAgICAgICAgIHZhciB2ID0gY2YoeGFbaV0sIGJ2YWx1ZXNba10pOyAvLyBjaGVjayBmb3IgemVybwoKICAgICAgICAgICAgaWYgKCFlcSh2LCB6ZXJvKSkgewogICAgICAgICAgICAgIC8vIHVwZGF0ZSB3b3Jrc3BhY2UKICAgICAgICAgICAgICB4YVtpXSA9IHY7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy8gcmVtb3ZlIG1hcmsgKGluZGV4IHdpbGwgYmUgcmVtb3ZlZCBsYXRlcikKICAgICAgICAgICAgICB3YVtpXSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gdXBkYXRlIGMKICAgICAgICAgIGNpbmRleC5wdXNoKGkpOyAvLyB1cGRhdGUgd29ya3NwYWNlCgogICAgICAgICAgd2JbaV0gPSBtYXJrOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzCgogICAgICAgICAgaWYgKHhiKSB7CiAgICAgICAgICAgIHhiW2ldID0gYnZhbHVlc1trXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAobm9uIHBhdHRlcm4gbWF0cml4KQoKCiAgICAgIGlmICh4YSAmJiB4YikgewogICAgICAgIC8vIGluaXRpYWxpemUgZmlyc3QgaW5kZXggaW4gagogICAgICAgIGsgPSBjcHRyW2pdOyAvLyBsb29wIGluZGV4IGluIGoKCiAgICAgICAgd2hpbGUgKGsgPCBjaW5kZXgubGVuZ3RoKSB7CiAgICAgICAgICAvLyByb3cKICAgICAgICAgIGkgPSBjaW5kZXhba107IC8vIGNoZWNrIHdvcmtzcGFjZSBoYXMgdmFsdWUgQCBpCgogICAgICAgICAgaWYgKHdhW2ldID09PSBtYXJrKSB7CiAgICAgICAgICAgIC8vIHB1c2ggdmFsdWUgKEFpaiAhPSAwIHx8IChBaWogIT0gMCAmJiBCaWogIT0gMCkpCiAgICAgICAgICAgIGN2YWx1ZXNba10gPSB4YVtpXTsgLy8gaW5jcmVtZW50IHBvaW50ZXIKCiAgICAgICAgICAgIGsrKzsKICAgICAgICAgIH0gZWxzZSBpZiAod2JbaV0gPT09IG1hcmspIHsKICAgICAgICAgICAgLy8gcHVzaCB2YWx1ZSAoYmlqICE9IDApCiAgICAgICAgICAgIGN2YWx1ZXNba10gPSB4YltpXTsgLy8gaW5jcmVtZW50IHBvaW50ZXIKCiAgICAgICAgICAgIGsrKzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIHJlbW92ZSBpbmRleCBAIGsKICAgICAgICAgICAgY2luZGV4LnNwbGljZShrLCAxKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gLy8gdXBkYXRlIGNwdHIKCgogICAgY3B0cltjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4CgogICAgcmV0dXJuIGEuY3JlYXRlU3BhcnNlTWF0cml4KHsKICAgICAgdmFsdWVzOiBjdmFsdWVzLAogICAgICBpbmRleDogY2luZGV4LAogICAgICBwdHI6IGNwdHIsCiAgICAgIHNpemU6IFtyb3dzLCBjb2x1bW5zXSwKICAgICAgZGF0YXR5cGU6IGR0CiAgICB9KTsKICB9Owp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTAuanMKCnZhciBhbGdvcml0aG0xMF9uYW1lID0gJ2FsZ29yaXRobTEwJzsKdmFyIGFsZ29yaXRobTEwX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnRGVuc2VNYXRyaXgnXTsKdmFyIGNyZWF0ZUFsZ29yaXRobTEwID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoYWxnb3JpdGhtMTBfbmFtZSwgYWxnb3JpdGhtMTBfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDsKCiAgLyoqCiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggUyBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKFNpaiwgYikuCiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBOWiB0aW1lcyAobnVtYmVyIG9mIG5vbnplcm8gaXRlbXMgaW4gUykuCiAgICoKICAgKgogICAqICAgICAgICAgIOKUjCAgZihTaWosIGIpICA7IFMoaSxqKSAhPT0gMAogICAqIEMoaSxqKSA9IOKUpAogICAqICAgICAgICAgIOKUlCAgYiAgICAgICAgICA7IG90aGVyd2lzZQogICAqCiAgICoKICAgKiBAcGFyYW0ge01hdHJpeH0gICBzICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChTKQogICAqIEBwYXJhbSB7U2NhbGFyfSAgIGIgICAgICAgICAgICAgICAgIFRoZSBTY2FsYXIgdmFsdWUKICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosYikgb3BlcmF0aW9uIHRvIGludm9rZQogICAqIEBwYXJhbSB7Ym9vbGVhbn0gIGludmVyc2UgICAgICAgICAgIEEgdHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgY2FsbGJhY2sgc2hvdWxkIGJlIGludm9rZWQgZihiLFNpaikKICAgKgogICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIERlbnNlTWF0cml4IChDKQogICAqCiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjI2ODEzCiAgICovCiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTEwKHMsIGIsIGNhbGxiYWNrLCBpbnZlcnNlKSB7CiAgICAvLyBzcGFyc2UgbWF0cml4IGFycmF5cwogICAgdmFyIGF2YWx1ZXMgPSBzLl92YWx1ZXM7CiAgICB2YXIgYWluZGV4ID0gcy5faW5kZXg7CiAgICB2YXIgYXB0ciA9IHMuX3B0cjsKICAgIHZhciBhc2l6ZSA9IHMuX3NpemU7CiAgICB2YXIgYWR0ID0gcy5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggY2Fubm90IGJlIGEgUGF0dGVybiBtYXRyaXgKCiAgICBpZiAoIWF2YWx1ZXMpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gUGF0dGVybiBTcGFyc2UgTWF0cml4IGFuZCBTY2FsYXIgdmFsdWUnKTsKICAgIH0gLy8gcm93cyAmIGNvbHVtbnMKCgogICAgdmFyIHJvd3MgPSBhc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlCgogICAgdmFyIGR0OyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlCgogICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlcwoKICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJykgewogICAgICAvLyBkYXRhdHlwZQogICAgICBkdCA9IGFkdDsgLy8gY29udmVydCBiIHRvIHRoZSBzYW1lIGRhdGF0eXBlCgogICAgICBiID0gdHlwZWQuY29udmVydChiLCBkdCk7IC8vIGNhbGxiYWNrCgogICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTsKICAgIH0gLy8gcmVzdWx0IGFycmF5cwoKCiAgICB2YXIgY2RhdGEgPSBbXTsgLy8gd29ya3NwYWNlcwoKICAgIHZhciB4ID0gW107IC8vIG1hcmtzIGluZGljYXRpbmcgd2UgaGF2ZSBhIHZhbHVlIGluIHggZm9yIGEgZ2l2ZW4gY29sdW1uCgogICAgdmFyIHcgPSBbXTsgLy8gbG9vcCBjb2x1bW5zCgogICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHsKICAgICAgLy8gY29sdW1ucyBtYXJrCiAgICAgIHZhciBtYXJrID0gaiArIDE7IC8vIHZhbHVlcyBpbiBqCgogICAgICBmb3IgKHZhciBrMCA9IGFwdHJbal0sIGsxID0gYXB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHsKICAgICAgICAvLyByb3cKICAgICAgICB2YXIgciA9IGFpbmRleFtrXTsgLy8gdXBkYXRlIHdvcmtzcGFjZQoKICAgICAgICB4W3JdID0gYXZhbHVlc1trXTsKICAgICAgICB3W3JdID0gbWFyazsKICAgICAgfSAvLyBsb29wIHJvd3MKCgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3M7IGkrKykgewogICAgICAgIC8vIGluaXRpYWxpemUgQyBvbiBmaXJzdCBjb2x1bW4KICAgICAgICBpZiAoaiA9PT0gMCkgewogICAgICAgICAgLy8gY3JlYXRlIHJvdyBhcnJheQogICAgICAgICAgY2RhdGFbaV0gPSBbXTsKICAgICAgICB9IC8vIGNoZWNrIHNwYXJzZSBtYXRyaXggaGFzIGEgdmFsdWUgQCBpLGoKCgogICAgICAgIGlmICh3W2ldID09PSBtYXJrKSB7CiAgICAgICAgICAvLyBpbnZva2UgY2FsbGJhY2ssIHVwZGF0ZSBDCiAgICAgICAgICBjZGF0YVtpXVtqXSA9IGludmVyc2UgPyBjZihiLCB4W2ldKSA6IGNmKHhbaV0sIGIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBkZW5zZSBtYXRyaXggdmFsdWUgQCBpLCBqCiAgICAgICAgICBjZGF0YVtpXVtqXSA9IGI7CiAgICAgICAgfQogICAgICB9CiAgICB9IC8vIHJldHVybiBkZW5zZSBtYXRyaXgKCgogICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7CiAgICAgIGRhdGE6IGNkYXRhLAogICAgICBzaXplOiBbcm93cywgY29sdW1uc10sCiAgICAgIGRhdGF0eXBlOiBkdAogICAgfSk7CiAgfTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzLmpzCgoKdmFyIGFsZ29yaXRobTEzX25hbWUgPSAnYWxnb3JpdGhtMTMnOwp2YXIgYWxnb3JpdGhtMTNfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddOwp2YXIgY3JlYXRlQWxnb3JpdGhtMTMgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShhbGdvcml0aG0xM19uYW1lLCBhbGdvcml0aG0xM19kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDsKCiAgLyoqCiAgICogSXRlcmF0ZXMgb3ZlciBEZW5zZU1hdHJpeCBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihBaWouLnosIEJpai4ueikuCiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNeE4gdGltZXMuCiAgICoKICAgKiBDKGksaiwuLi56KSA9IGYoQWlqLi56LCBCaWouLnopCiAgICoKICAgKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICAgICBUaGUgRGVuc2VNYXRyaXggaW5zdGFuY2UgKEEpCiAgICogQHBhcmFtIHtNYXRyaXh9ICAgYiAgICAgICAgICAgICAgICAgVGhlIERlbnNlTWF0cml4IGluc3RhbmNlIChCKQogICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpai4ueixCaWouLnopIG9wZXJhdGlvbiB0byBpbnZva2UKICAgKgogICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIERlbnNlTWF0cml4IChDKQogICAqCiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjU4NjU4CiAgICovCiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTEzKGEsIGIsIGNhbGxiYWNrKSB7CiAgICAvLyBhIGFycmF5cwogICAgdmFyIGFkYXRhID0gYS5fZGF0YTsKICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7CiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIGIgYXJyYXlzCgogICAgdmFyIGJkYXRhID0gYi5fZGF0YTsKICAgIHZhciBic2l6ZSA9IGIuX3NpemU7CiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIGMgYXJyYXlzCgogICAgdmFyIGNzaXplID0gW107IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnMKCiAgICBpZiAoYXNpemUubGVuZ3RoICE9PSBic2l6ZS5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IERpbWVuc2lvbkVycm9yWyJhIiAvKiBEaW1lbnNpb25FcnJvciAqL10oYXNpemUubGVuZ3RoLCBic2l6ZS5sZW5ndGgpOwogICAgfSAvLyB2YWxpZGF0ZSBlYWNoIG9uZSBvZiB0aGUgZGltZW5zaW9uIHNpemVzCgoKICAgIGZvciAodmFyIHMgPSAwOyBzIDwgYXNpemUubGVuZ3RoOyBzKyspIHsKICAgICAgLy8gbXVzdCBtYXRjaAogICAgICBpZiAoYXNpemVbc10gIT09IGJzaXplW3NdKSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCcgKyBhc2l6ZSArICcpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCcgKyBic2l6ZSArICcpJyk7CiAgICAgIH0gLy8gdXBkYXRlIGRpbWVuc2lvbiBpbiBjCgoKICAgICAgY3NpemVbc10gPSBhc2l6ZVtzXTsKICAgIH0gLy8gZGF0YXR5cGUKCgogICAgdmFyIGR0OyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlCgogICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlcwoKICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJyAmJiBhZHQgPT09IGJkdCkgewogICAgICAvLyBkYXRhdHlwZQogICAgICBkdCA9IGFkdDsgLy8gY2FsbGJhY2sKCiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pOwogICAgfSAvLyBwb3B1bGF0ZSBjZGF0YSwgaXRlcmF0ZSB0aHJvdWdoIGRpbWVuc2lvbnMKCgogICAgdmFyIGNkYXRhID0gY3NpemUubGVuZ3RoID4gMCA/IF9pdGVyYXRlKGNmLCAwLCBjc2l6ZSwgY3NpemVbMF0sIGFkYXRhLCBiZGF0YSkgOiBbXTsgLy8gYyBtYXRyaXgKCiAgICByZXR1cm4gYS5jcmVhdGVEZW5zZU1hdHJpeCh7CiAgICAgIGRhdGE6IGNkYXRhLAogICAgICBzaXplOiBjc2l6ZSwKICAgICAgZGF0YXR5cGU6IGR0CiAgICB9KTsKICB9OyAvLyByZWN1cnNpdmUgZnVuY3Rpb24KCiAgZnVuY3Rpb24gX2l0ZXJhdGUoZiwgbGV2ZWwsIHMsIG4sIGF2LCBidikgewogICAgLy8gaW5pdGlhbGl6ZSBhcnJheSBmb3IgdGhpcyBsZXZlbAogICAgdmFyIGN2ID0gW107IC8vIGNoZWNrIHdlIHJlYWNoIHRoZSBsYXN0IGxldmVsCgogICAgaWYgKGxldmVsID09PSBzLmxlbmd0aCAtIDEpIHsKICAgICAgLy8gbG9vcCBhcnJheXMgaW4gbGFzdCBsZXZlbAogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIC8vIGludm9rZSBjYWxsYmFjayBhbmQgc3RvcmUgdmFsdWUKICAgICAgICBjdltpXSA9IGYoYXZbaV0sIGJ2W2ldKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gaXRlcmF0ZSBjdXJyZW50IGxldmVsCiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7CiAgICAgICAgLy8gaXRlcmF0ZSBuZXh0IGxldmVsCiAgICAgICAgY3Zbal0gPSBfaXRlcmF0ZShmLCBsZXZlbCArIDEsIHMsIHNbbGV2ZWwgKyAxXSwgYXZbal0sIGJ2W2pdKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBjdjsKICB9Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNC5qcwoKCnZhciBhbGdvcml0aG0xNF9uYW1lID0gJ2FsZ29yaXRobTE0JzsKdmFyIGFsZ29yaXRobTE0X2RlcGVuZGVuY2llcyA9IFsndHlwZWQnXTsKdmFyIGNyZWF0ZUFsZ29yaXRobTE0ID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoYWxnb3JpdGhtMTRfbmFtZSwgYWxnb3JpdGhtMTRfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7CgogIC8qKgogICAqIEl0ZXJhdGVzIG92ZXIgRGVuc2VNYXRyaXggaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoQWlqLi56LCBiKS4KICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIE14TiB0aW1lcy4KICAgKgogICAqIEMoaSxqLC4uLnopID0gZihBaWouLnosIGIpCiAgICoKICAgKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICAgICBUaGUgRGVuc2VNYXRyaXggaW5zdGFuY2UgKEEpCiAgICogQHBhcmFtIHtTY2FsYXJ9ICAgYiAgICAgICAgICAgICAgICAgVGhlIFNjYWxhciB2YWx1ZQogICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpai4ueixiKSBvcGVyYXRpb24gdG8gaW52b2tlCiAgICogQHBhcmFtIHtib29sZWFufSAgaW52ZXJzZSAgICAgICAgICAgQSB0cnVlIHZhbHVlIGluZGljYXRlcyBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBmKGIsQWlqLi56KQogICAqCiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgRGVuc2VNYXRyaXggKEMpCiAgICoKICAgKiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2NTkwNDIKICAgKi8KICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMTQoYSwgYiwgY2FsbGJhY2ssIGludmVyc2UpIHsKICAgIC8vIGEgYXJyYXlzCiAgICB2YXIgYWRhdGEgPSBhLl9kYXRhOwogICAgdmFyIGFzaXplID0gYS5fc2l6ZTsKICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gZGF0YXR5cGUKCiAgICB2YXIgZHQ7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2UKCiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzCgogICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7CiAgICAgIC8vIGRhdGF0eXBlCiAgICAgIGR0ID0gYWR0OyAvLyBjb252ZXJ0IGIgdG8gdGhlIHNhbWUgZGF0YXR5cGUKCiAgICAgIGIgPSB0eXBlZC5jb252ZXJ0KGIsIGR0KTsgLy8gY2FsbGJhY2sKCiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pOwogICAgfSAvLyBwb3B1bGF0ZSBjZGF0YSwgaXRlcmF0ZSB0aHJvdWdoIGRpbWVuc2lvbnMKCgogICAgdmFyIGNkYXRhID0gYXNpemUubGVuZ3RoID4gMCA/IF9pdGVyYXRlKGNmLCAwLCBhc2l6ZSwgYXNpemVbMF0sIGFkYXRhLCBiLCBpbnZlcnNlKSA6IFtdOyAvLyBjIG1hdHJpeAoKICAgIHJldHVybiBhLmNyZWF0ZURlbnNlTWF0cml4KHsKICAgICAgZGF0YTogY2RhdGEsCiAgICAgIHNpemU6IE9iamVjdCh1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSkoYXNpemUpLAogICAgICBkYXRhdHlwZTogZHQKICAgIH0pOwogIH07IC8vIHJlY3Vyc2l2ZSBmdW5jdGlvbgoKICBmdW5jdGlvbiBfaXRlcmF0ZShmLCBsZXZlbCwgcywgbiwgYXYsIGJ2LCBpbnZlcnNlKSB7CiAgICAvLyBpbml0aWFsaXplIGFycmF5IGZvciB0aGlzIGxldmVsCiAgICB2YXIgY3YgPSBbXTsgLy8gY2hlY2sgd2UgcmVhY2ggdGhlIGxhc3QgbGV2ZWwKCiAgICBpZiAobGV2ZWwgPT09IHMubGVuZ3RoIC0gMSkgewogICAgICAvLyBsb29wIGFycmF5cyBpbiBsYXN0IGxldmVsCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgLy8gaW52b2tlIGNhbGxiYWNrIGFuZCBzdG9yZSB2YWx1ZQogICAgICAgIGN2W2ldID0gaW52ZXJzZSA/IGYoYnYsIGF2W2ldKSA6IGYoYXZbaV0sIGJ2KTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gaXRlcmF0ZSBjdXJyZW50IGxldmVsCiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7CiAgICAgICAgLy8gaXRlcmF0ZSBuZXh0IGxldmVsCiAgICAgICAgY3Zbal0gPSBfaXRlcmF0ZShmLCBsZXZlbCArIDEsIHMsIHNbbGV2ZWwgKyAxXSwgYXZbal0sIGJ2LCBpbnZlcnNlKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBjdjsKICB9Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hcml0aG1ldGljL2djZC5qcwoKCgoKCgoKdmFyIGdjZF9uYW1lID0gJ2djZCc7CnZhciBnY2RfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnQmlnTnVtYmVyJywgJ0RlbnNlTWF0cml4J107CnZhciBjcmVhdGVHY2QgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShnY2RfbmFtZSwgZ2NkX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCwKICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLAogICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlciwKICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4OwogIHZhciBhbGdvcml0aG0wMSA9IGNyZWF0ZUFsZ29yaXRobTAxKHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIHZhciBhbGdvcml0aG0wNCA9IGNyZWF0ZUFsZ29yaXRobTA0KHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcgogIH0pOwogIHZhciBhbGdvcml0aG0xMCA9IGNyZWF0ZUFsZ29yaXRobTEwKHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeAogIH0pOwogIHZhciBhbGdvcml0aG0xMyA9IGNyZWF0ZUFsZ29yaXRobTEzKHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIHZhciBhbGdvcml0aG0xNCA9IGNyZWF0ZUFsZ29yaXRobTE0KHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IgZm9yIHR3byBvciBtb3JlIHZhbHVlcyBvciBhcnJheXMuCiAgICoKICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5nY2QoYSwgYikKICAgKiAgICBtYXRoLmdjZChhLCBiLCBjLCAuLi4pCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguZ2NkKDgsIDEyKSAgICAgICAgICAgICAgLy8gcmV0dXJucyA0CiAgICogICAgbWF0aC5nY2QoLTQsIDYpICAgICAgICAgICAgICAvLyByZXR1cm5zIDIKICAgKiAgICBtYXRoLmdjZCgyNSwgMTUsIC0xMCkgICAgICAgIC8vIHJldHVybnMgNQogICAqCiAgICogICAgbWF0aC5nY2QoWzgsIC00XSwgWzEyLCA2XSkgICAvLyByZXR1cm5zIFs0LCAyXQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBsY20sIHhnY2QKICAgKgogICAqIEBwYXJhbSB7Li4uIG51bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQXJyYXkgfCBNYXRyaXh9IGFyZ3MgIFR3byBvciBtb3JlIGludGVnZXIgbnVtYmVycwogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yCiAgICovCgogIHZhciBnY2QgPSB0eXBlZChnY2RfbmFtZSwgewogICAgJ251bWJlciwgbnVtYmVyJzogZ2NkTnVtYmVyLAogICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogX2djZEJpZ051bWJlciwKICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHsKICAgICAgcmV0dXJuIHguZ2NkKHkpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wNCh4LCB5LCBnY2QpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeSwgeCwgZ2NkLCB0cnVlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTAxKHgsIHksIGdjZCwgZmFsc2UpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGdjZCk7CiAgICB9LAogICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBnY2QobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTsKICAgIH0sCiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gZ2NkKG1hdHJpeCh4KSwgeSk7CiAgICB9LAogICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGdjZCh4LCBtYXRyaXgoeSkpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh4LCB5LCBnY2QsIGZhbHNlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGdjZCwgZmFsc2UpOwogICAgfSwKICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh5LCB4LCBnY2QsIHRydWUpOwogICAgfSwKICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyRGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgZ2NkLCB0cnVlKTsKICAgIH0sCiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBnY2QsIGZhbHNlKS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ251bWJlciB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgZ2NkLCB0cnVlKS52YWx1ZU9mKCk7CiAgICB9LAogICAgLy8gVE9ETzogbmVlZCBhIHNtYXJ0ZXIgbm90YXRpb24gaGVyZQogICAgJ0FycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyLCBBcnJheSB8IE1hdHJpeCB8IG51bWJlciB8IEJpZ051bWJlciwgLi4uQXJyYXkgfCBNYXRyaXggfCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlckJpZ051bWJlckFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYSwgYiwgYXJncykgewogICAgICB2YXIgcmVzID0gZ2NkKGEsIGIpOwoKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgcmVzID0gZ2NkKHJlcywgYXJnc1tpXSk7CiAgICAgIH0KCiAgICAgIHJldHVybiByZXM7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGdjZDsKICAvKioKICAgKiBDYWxjdWxhdGUgZ2NkIGZvciBCaWdOdW1iZXJzCiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGEKICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYgogICAqIEByZXR1cm5zIHtCaWdOdW1iZXJ9IFJldHVybnMgZ3JlYXRlc3QgY29tbW9uIGRlbm9taW5hdG9yIG9mIGEgYW5kIGIKICAgKiBAcHJpdmF0ZQogICAqLwoKICBmdW5jdGlvbiBfZ2NkQmlnTnVtYmVyKGEsIGIpIHsKICAgIGlmICghYS5pc0ludCgpIHx8ICFiLmlzSW50KCkpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIGdjZCBtdXN0IGJlIGludGVnZXIgbnVtYmVycycpOwogICAgfSAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FdWNsaWRlYW5fYWxnb3JpdGhtCgoKICAgIHZhciB6ZXJvID0gbmV3IEJpZ051bWJlcigwKTsKCiAgICB3aGlsZSAoIWIuaXNaZXJvKCkpIHsKICAgICAgdmFyIHIgPSBhLm1vZChiKTsKICAgICAgYSA9IGI7CiAgICAgIGIgPSByOwogICAgfQoKICAgIHJldHVybiBhLmx0KHplcm8pID8gYS5uZWcoKSA6IGE7CiAgfQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDIuanMKCgp2YXIgYWxnb3JpdGhtMDJfbmFtZSA9ICdhbGdvcml0aG0wMic7CnZhciBhbGdvcml0aG0wMl9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJ107CnZhciBjcmVhdGVBbGdvcml0aG0wMiA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGFsZ29yaXRobTAyX25hbWUsIGFsZ29yaXRobTAyX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7CgogIC8qKgogICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IG5vbnplcm8gaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoRGlqLCBTaWopLgogICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTk5aIHRpbWVzIChudW1iZXIgb2Ygbm9uemVybyBpdGVtcyBpbiBTcGFyc2VNYXRyaXgpLgogICAqCiAgICoKICAgKiAgICAgICAgICDilIwgIGYoRGlqLCBTaWopICA7IFMoaSxqKSAhPT0gMAogICAqIEMoaSxqKSA9IOKUpAogICAqICAgICAgICAgIOKUlCAgMCAgICAgICAgICAgIDsgb3RoZXJ3aXNlCiAgICoKICAgKgogICAqIEBwYXJhbSB7TWF0cml4fSAgIGRlbnNlTWF0cml4ICAgICAgIFRoZSBEZW5zZU1hdHJpeCBpbnN0YW5jZSAoRCkKICAgKiBAcGFyYW0ge01hdHJpeH0gICBzcGFyc2VNYXRyaXggICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChTKQogICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKERpaixTaWopIG9wZXJhdGlvbiB0byBpbnZva2UsIHdoZXJlIERpaiA9IERlbnNlTWF0cml4KGksaikgYW5kIFNpaiA9IFNwYXJzZU1hdHJpeChpLGopCiAgICogQHBhcmFtIHtib29sZWFufSAgaW52ZXJzZSAgICAgICAgICAgQSB0cnVlIHZhbHVlIGluZGljYXRlcyBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBmKFNpaixEaWopCiAgICoKICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBTcGFyc2VNYXRyaXggKEMpCiAgICoKICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NDc3NTcxCiAgICovCiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTAyKGRlbnNlTWF0cml4LCBzcGFyc2VNYXRyaXgsIGNhbGxiYWNrLCBpbnZlcnNlKSB7CiAgICAvLyBkZW5zZSBtYXRyaXggYXJyYXlzCiAgICB2YXIgYWRhdGEgPSBkZW5zZU1hdHJpeC5fZGF0YTsKICAgIHZhciBhc2l6ZSA9IGRlbnNlTWF0cml4Ll9zaXplOwogICAgdmFyIGFkdCA9IGRlbnNlTWF0cml4Ll9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXMKCiAgICB2YXIgYnZhbHVlcyA9IHNwYXJzZU1hdHJpeC5fdmFsdWVzOwogICAgdmFyIGJpbmRleCA9IHNwYXJzZU1hdHJpeC5faW5kZXg7CiAgICB2YXIgYnB0ciA9IHNwYXJzZU1hdHJpeC5fcHRyOwogICAgdmFyIGJzaXplID0gc3BhcnNlTWF0cml4Ll9zaXplOwogICAgdmFyIGJkdCA9IHNwYXJzZU1hdHJpeC5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnMKCiAgICBpZiAoYXNpemUubGVuZ3RoICE9PSBic2l6ZS5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IERpbWVuc2lvbkVycm9yWyJhIiAvKiBEaW1lbnNpb25FcnJvciAqL10oYXNpemUubGVuZ3RoLCBic2l6ZS5sZW5ndGgpOwogICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1ucwoKCiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTsKICAgIH0gLy8gc3BhcnNlIG1hdHJpeCBjYW5ub3QgYmUgYSBQYXR0ZXJuIG1hdHJpeAoKCiAgICBpZiAoIWJ2YWx1ZXMpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gRGVuc2UgTWF0cml4IGFuZCBQYXR0ZXJuIFNwYXJzZSBNYXRyaXgnKTsKICAgIH0gLy8gcm93cyAmIGNvbHVtbnMKCgogICAgdmFyIHJvd3MgPSBhc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlCgogICAgdmFyIGR0OyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlCgogICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWUKCiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2UKCiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzCgogICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7CiAgICAgIC8vIGRhdGF0eXBlCiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdCkKCiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGUKCiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2sKCiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pOwogICAgfSAvLyByZXN1bHQgKFNwYXJzZU1hdHJpeCkKCgogICAgdmFyIGN2YWx1ZXMgPSBbXTsKICAgIHZhciBjaW5kZXggPSBbXTsKICAgIHZhciBjcHRyID0gW107IC8vIGxvb3AgY29sdW1ucyBpbiBiCgogICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHsKICAgICAgLy8gdXBkYXRlIGNwdHIKICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIHZhbHVlcyBpbiBjb2x1bW4gagoKICAgICAgZm9yICh2YXIgazAgPSBicHRyW2pdLCBrMSA9IGJwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7CiAgICAgICAgLy8gcm93CiAgICAgICAgdmFyIGkgPSBiaW5kZXhba107IC8vIHVwZGF0ZSBDKGksaikKCiAgICAgICAgdmFyIGNpaiA9IGludmVyc2UgPyBjZihidmFsdWVzW2tdLCBhZGF0YVtpXVtqXSkgOiBjZihhZGF0YVtpXVtqXSwgYnZhbHVlc1trXSk7IC8vIGNoZWNrIGZvciBub256ZXJvCgogICAgICAgIGlmICghZXEoY2lqLCB6ZXJvKSkgewogICAgICAgICAgLy8gcHVzaCBpICYgdgogICAgICAgICAgY2luZGV4LnB1c2goaSk7CiAgICAgICAgICBjdmFsdWVzLnB1c2goY2lqKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gLy8gdXBkYXRlIGNwdHIKCgogICAgY3B0cltjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4CgogICAgcmV0dXJuIHNwYXJzZU1hdHJpeC5jcmVhdGVTcGFyc2VNYXRyaXgoewogICAgICB2YWx1ZXM6IGN2YWx1ZXMsCiAgICAgIGluZGV4OiBjaW5kZXgsCiAgICAgIHB0cjogY3B0ciwKICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLAogICAgICBkYXRhdHlwZTogZHQKICAgIH0pOwogIH07Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNi5qcwoKCgp2YXIgYWxnb3JpdGhtMDZfbmFtZSA9ICdhbGdvcml0aG0wNic7CnZhciBhbGdvcml0aG0wNl9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJ107CnZhciBjcmVhdGVBbGdvcml0aG0wNiA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGFsZ29yaXRobTA2X25hbWUsIGFsZ29yaXRobTA2X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7CgogIC8qKgogICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IEEgYW5kIFNwYXJzZU1hdHJpeCBCIG5vbnplcm8gaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoQWlqLCBCaWopLgogICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgKEFueiBVIEJueikgdGltZXMsIHdoZXJlIEFueiBhbmQgQm56IGFyZSB0aGUgbm9uemVybyBlbGVtZW50cyBpbiBib3RoIG1hdHJpY2VzLgogICAqCiAgICoKICAgKiAgICAgICAgICDilIwgIGYoQWlqLCBCaWopICA7IEEoaSxqKSAhPT0gMCAmJiBCKGksaikgIT09IDAKICAgKiBDKGksaikgPSDilKQKICAgKiAgICAgICAgICDilJQgIDAgICAgICAgICAgICA7IG90aGVyd2lzZQogICAqCiAgICoKICAgKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChBKQogICAqIEBwYXJhbSB7TWF0cml4fSAgIGIgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEIpCiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICAgICAgICAgVGhlIGYoQWlqLEJpaikgb3BlcmF0aW9uIHRvIGludm9rZQogICAqCiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgU3BhcnNlTWF0cml4IChDKQogICAqCiAgICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzYyMDI5NAogICAqLwogIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0wNihhLCBiLCBjYWxsYmFjaykgewogICAgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXMKICAgIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzOwogICAgdmFyIGFzaXplID0gYS5fc2l6ZTsKICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXMKCiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlczsKICAgIHZhciBic2l6ZSA9IGIuX3NpemU7CiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnMKCiAgICBpZiAoYXNpemUubGVuZ3RoICE9PSBic2l6ZS5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IERpbWVuc2lvbkVycm9yWyJhIiAvKiBEaW1lbnNpb25FcnJvciAqL10oYXNpemUubGVuZ3RoLCBic2l6ZS5sZW5ndGgpOwogICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1ucwoKCiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTsKICAgIH0gLy8gcm93cyAmIGNvbHVtbnMKCgogICAgdmFyIHJvd3MgPSBhc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlCgogICAgdmFyIGR0OyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlCgogICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWUKCiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2UKCiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzCgogICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7CiAgICAgIC8vIGRhdGF0eXBlCiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdCkKCiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGUKCiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2sKCiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pOwogICAgfSAvLyByZXN1bHQgYXJyYXlzCgoKICAgIHZhciBjdmFsdWVzID0gYXZhbHVlcyAmJiBidmFsdWVzID8gW10gOiB1bmRlZmluZWQ7CiAgICB2YXIgY2luZGV4ID0gW107CiAgICB2YXIgY3B0ciA9IFtdOyAvLyB3b3Jrc3BhY2VzCgogICAgdmFyIHggPSBjdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7IC8vIG1hcmtzIGluZGljYXRpbmcgd2UgaGF2ZSBhIHZhbHVlIGluIHggZm9yIGEgZ2l2ZW4gY29sdW1uCgogICAgdmFyIHcgPSBbXTsgLy8gbWFya3MgaW5kaWNhdGluZyB2YWx1ZSBpbiBhIGdpdmVuIHJvdyBoYXMgYmVlbiB1cGRhdGVkCgogICAgdmFyIHUgPSBbXTsgLy8gbG9vcCBjb2x1bW5zCgogICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHsKICAgICAgLy8gdXBkYXRlIGNwdHIKICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIGNvbHVtbnMgbWFyawoKICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gc2NhdHRlciB0aGUgdmFsdWVzIG9mIEEoOixqKSBpbnRvIHdvcmtzcGFjZQoKICAgICAgc2NhdHRlcihhLCBqLCB3LCB4LCB1LCBtYXJrLCBjaW5kZXgsIGNmKTsgLy8gc2NhdHRlciB0aGUgdmFsdWVzIG9mIEIoOixqKSBpbnRvIHdvcmtzcGFjZQoKICAgICAgc2NhdHRlcihiLCBqLCB3LCB4LCB1LCBtYXJrLCBjaW5kZXgsIGNmKTsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAobm9uIHBhdHRlcm4gbWF0cml4KQoKICAgICAgaWYgKHgpIHsKICAgICAgICAvLyBpbml0aWFsaXplIGZpcnN0IGluZGV4IGluIGoKICAgICAgICB2YXIgayA9IGNwdHJbal07IC8vIGxvb3AgaW5kZXggaW4gagoKICAgICAgICB3aGlsZSAoayA8IGNpbmRleC5sZW5ndGgpIHsKICAgICAgICAgIC8vIHJvdwogICAgICAgICAgdmFyIGkgPSBjaW5kZXhba107IC8vIGNoZWNrIGZ1bmN0aW9uIHdhcyBpbnZva2VkIG9uIGN1cnJlbnQgcm93IChBaWogIT0wICYmIEJpaiAhPSAwKQoKICAgICAgICAgIGlmICh1W2ldID09PSBtYXJrKSB7CiAgICAgICAgICAgIC8vIHZhbHVlIEAgaQogICAgICAgICAgICB2YXIgdiA9IHhbaV07IC8vIGNoZWNrIGZvciB6ZXJvIHZhbHVlCgogICAgICAgICAgICBpZiAoIWVxKHYsIHplcm8pKSB7CiAgICAgICAgICAgICAgLy8gcHVzaCB2YWx1ZQogICAgICAgICAgICAgIGN2YWx1ZXMucHVzaCh2KTsgLy8gaW5jcmVtZW50IHBvaW50ZXIKCiAgICAgICAgICAgICAgaysrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIC8vIHJlbW92ZSB2YWx1ZSBAIGksIGRvIG5vdCBpbmNyZW1lbnQgcG9pbnRlcgogICAgICAgICAgICAgIGNpbmRleC5zcGxpY2UoaywgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIHJlbW92ZSB2YWx1ZSBAIGksIGRvIG5vdCBpbmNyZW1lbnQgcG9pbnRlcgogICAgICAgICAgICBjaW5kZXguc3BsaWNlKGssIDEpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBpbml0aWFsaXplIGZpcnN0IGluZGV4IGluIGoKICAgICAgICB2YXIgcCA9IGNwdHJbal07IC8vIGxvb3AgaW5kZXggaW4gagoKICAgICAgICB3aGlsZSAocCA8IGNpbmRleC5sZW5ndGgpIHsKICAgICAgICAgIC8vIHJvdwogICAgICAgICAgdmFyIHIgPSBjaW5kZXhbcF07IC8vIGNoZWNrIGZ1bmN0aW9uIHdhcyBpbnZva2VkIG9uIGN1cnJlbnQgcm93IChBaWogIT0wICYmIEJpaiAhPSAwKQoKICAgICAgICAgIGlmICh1W3JdICE9PSBtYXJrKSB7CiAgICAgICAgICAgIC8vIHJlbW92ZSB2YWx1ZSBAIGksIGRvIG5vdCBpbmNyZW1lbnQgcG9pbnRlcgogICAgICAgICAgICBjaW5kZXguc3BsaWNlKHAsIDEpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gaW5jcmVtZW50IHBvaW50ZXIKICAgICAgICAgICAgcCsrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSAvLyB1cGRhdGUgY3B0cgoKCiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXgKCiAgICByZXR1cm4gYS5jcmVhdGVTcGFyc2VNYXRyaXgoewogICAgICB2YWx1ZXM6IGN2YWx1ZXMsCiAgICAgIGluZGV4OiBjaW5kZXgsCiAgICAgIHB0cjogY3B0ciwKICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLAogICAgICBkYXRhdHlwZTogZHQKICAgIH0pOwogIH07Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMS5qcwoKdmFyIGFsZ29yaXRobTExX25hbWUgPSAnYWxnb3JpdGhtMTEnOwp2YXIgYWxnb3JpdGhtMTFfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhciddOwp2YXIgY3JlYXRlQWxnb3JpdGhtMTEgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShhbGdvcml0aG0xMV9uYW1lLCBhbGdvcml0aG0xMV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyOwoKICAvKioKICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBTIG5vbnplcm8gaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoU2lqLCBiKS4KICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIE5aIHRpbWVzIChudW1iZXIgb2Ygbm9uemVybyBpdGVtcyBpbiBTKS4KICAgKgogICAqCiAgICogICAgICAgICAg4pSMICBmKFNpaiwgYikgIDsgUyhpLGopICE9PSAwCiAgICogQyhpLGopID0g4pSkCiAgICogICAgICAgICAg4pSUICAwICAgICAgICAgIDsgb3RoZXJ3aXNlCiAgICoKICAgKgogICAqIEBwYXJhbSB7TWF0cml4fSAgIHMgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKFMpCiAgICogQHBhcmFtIHtTY2FsYXJ9ICAgYiAgICAgICAgICAgICAgICAgVGhlIFNjYWxhciB2YWx1ZQogICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixiKSBvcGVyYXRpb24gdG8gaW52b2tlCiAgICogQHBhcmFtIHtib29sZWFufSAgaW52ZXJzZSAgICAgICAgICAgQSB0cnVlIHZhbHVlIGluZGljYXRlcyBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBmKGIsU2lqKQogICAqCiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgU3BhcnNlTWF0cml4IChDKQogICAqCiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjI2ODEzCiAgICovCiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTExKHMsIGIsIGNhbGxiYWNrLCBpbnZlcnNlKSB7CiAgICAvLyBzcGFyc2UgbWF0cml4IGFycmF5cwogICAgdmFyIGF2YWx1ZXMgPSBzLl92YWx1ZXM7CiAgICB2YXIgYWluZGV4ID0gcy5faW5kZXg7CiAgICB2YXIgYXB0ciA9IHMuX3B0cjsKICAgIHZhciBhc2l6ZSA9IHMuX3NpemU7CiAgICB2YXIgYWR0ID0gcy5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggY2Fubm90IGJlIGEgUGF0dGVybiBtYXRyaXgKCiAgICBpZiAoIWF2YWx1ZXMpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gUGF0dGVybiBTcGFyc2UgTWF0cml4IGFuZCBTY2FsYXIgdmFsdWUnKTsKICAgIH0gLy8gcm93cyAmIGNvbHVtbnMKCgogICAgdmFyIHJvd3MgPSBhc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlCgogICAgdmFyIGR0OyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlCgogICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWUKCiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2UKCiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzCgogICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7CiAgICAgIC8vIGRhdGF0eXBlCiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdCkKCiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGUKCiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY29udmVydCBiIHRvIHRoZSBzYW1lIGRhdGF0eXBlCgogICAgICBiID0gdHlwZWQuY29udmVydChiLCBkdCk7IC8vIGNhbGxiYWNrCgogICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTsKICAgIH0gLy8gcmVzdWx0IGFycmF5cwoKCiAgICB2YXIgY3ZhbHVlcyA9IFtdOwogICAgdmFyIGNpbmRleCA9IFtdOwogICAgdmFyIGNwdHIgPSBbXTsgLy8gbG9vcCBjb2x1bW5zCgogICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHsKICAgICAgLy8gaW5pdGlhbGl6ZSBwdHIKICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIHZhbHVlcyBpbiBqCgogICAgICBmb3IgKHZhciBrMCA9IGFwdHJbal0sIGsxID0gYXB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHsKICAgICAgICAvLyByb3cKICAgICAgICB2YXIgaSA9IGFpbmRleFtrXTsgLy8gaW52b2tlIGNhbGxiYWNrCgogICAgICAgIHZhciB2ID0gaW52ZXJzZSA/IGNmKGIsIGF2YWx1ZXNba10pIDogY2YoYXZhbHVlc1trXSwgYik7IC8vIGNoZWNrIHZhbHVlIGlzIHplcm8KCiAgICAgICAgaWYgKCFlcSh2LCB6ZXJvKSkgewogICAgICAgICAgLy8gcHVzaCBpbmRleCAmIHZhbHVlCiAgICAgICAgICBjaW5kZXgucHVzaChpKTsKICAgICAgICAgIGN2YWx1ZXMucHVzaCh2KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gLy8gdXBkYXRlIHB0cgoKCiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXgKCiAgICByZXR1cm4gcy5jcmVhdGVTcGFyc2VNYXRyaXgoewogICAgICB2YWx1ZXM6IGN2YWx1ZXMsCiAgICAgIGluZGV4OiBjaW5kZXgsCiAgICAgIHB0cjogY3B0ciwKICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLAogICAgICBkYXRhdHlwZTogZHQKICAgIH0pOwogIH07Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hcml0aG1ldGljL2xjbS5qcwoKCgoKCgoKdmFyIGxjbV9uYW1lID0gJ2xjbSc7CnZhciBsY21fZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInXTsKdmFyIGNyZWF0ZUxjbSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGxjbV9uYW1lLCBsY21fZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LAogICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7CiAgdmFyIGFsZ29yaXRobTAyID0gY3JlYXRlQWxnb3JpdGhtMDIoewogICAgdHlwZWQ6IHR5cGVkLAogICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyCiAgfSk7CiAgdmFyIGFsZ29yaXRobTA2ID0gY3JlYXRlQWxnb3JpdGhtMDYoewogICAgdHlwZWQ6IHR5cGVkLAogICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyCiAgfSk7CiAgdmFyIGFsZ29yaXRobTExID0gY3JlYXRlQWxnb3JpdGhtMTEoewogICAgdHlwZWQ6IHR5cGVkLAogICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyCiAgfSk7CiAgdmFyIGFsZ29yaXRobTEzID0gY3JlYXRlQWxnb3JpdGhtMTMoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgdmFyIGFsZ29yaXRobTE0ID0gY3JlYXRlQWxnb3JpdGhtMTQoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUgZm9yIHR3byBvciBtb3JlIHZhbHVlcyBvciBhcnJheXMuCiAgICoKICAgKiBsY20gaXMgZGVmaW5lZCBhczoKICAgKgogICAqICAgICBsY20oYSwgYikgPSBhYnMoYSAqIGIpIC8gZ2NkKGEsIGIpCiAgICoKICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5sY20oYSwgYikKICAgKiAgICBtYXRoLmxjbShhLCBiLCBjLCAuLi4pCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGgubGNtKDQsIDYpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxMgogICAqICAgIG1hdGgubGNtKDYsIDIxKSAgICAgICAgICAgICAgLy8gcmV0dXJucyA0MgogICAqICAgIG1hdGgubGNtKDYsIDIxLCA1KSAgICAgICAgICAgLy8gcmV0dXJucyAyMTAKICAgKgogICAqICAgIG1hdGgubGNtKFs0LCA2XSwgWzYsIDIxXSkgICAgLy8gcmV0dXJucyBbMTIsIDQyXQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBnY2QsIHhnY2QKICAgKgogICAqIEBwYXJhbSB7Li4uIG51bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBhcmdzICBUd28gb3IgbW9yZSBpbnRlZ2VyIG51bWJlcnMKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbGVhc3QgY29tbW9uIG11bHRpcGxlCiAgICovCgogIHZhciBsY20gPSB0eXBlZChsY21fbmFtZSwgewogICAgJ251bWJlciwgbnVtYmVyJzogbGNtTnVtYmVyLAogICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogX2xjbUJpZ051bWJlciwKICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHsKICAgICAgcmV0dXJuIHgubGNtKHkpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wNih4LCB5LCBsY20pOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDIoeSwgeCwgbGNtLCB0cnVlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHgsIHksIGxjbSwgZmFsc2UpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGxjbSk7CiAgICB9LAogICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBsY20obWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTsKICAgIH0sCiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gbGNtKG1hdHJpeCh4KSwgeSk7CiAgICB9LAogICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGxjbSh4LCBtYXRyaXgoeSkpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBsY20sIGZhbHNlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGxjbSwgZmFsc2UpOwogICAgfSwKICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh5LCB4LCBsY20sIHRydWUpOwogICAgfSwKICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyRGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbGNtLCB0cnVlKTsKICAgIH0sCiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBsY20sIGZhbHNlKS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ251bWJlciB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgbGNtLCB0cnVlKS52YWx1ZU9mKCk7CiAgICB9LAogICAgLy8gVE9ETzogbmVlZCBhIHNtYXJ0ZXIgbm90YXRpb24gaGVyZQogICAgJ0FycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyLCBBcnJheSB8IE1hdHJpeCB8IG51bWJlciB8IEJpZ051bWJlciwgLi4uQXJyYXkgfCBNYXRyaXggfCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlckJpZ051bWJlckFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYSwgYiwgYXJncykgewogICAgICB2YXIgcmVzID0gbGNtKGEsIGIpOwoKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgcmVzID0gbGNtKHJlcywgYXJnc1tpXSk7CiAgICAgIH0KCiAgICAgIHJldHVybiByZXM7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGxjbTsKICAvKioKICAgKiBDYWxjdWxhdGUgbGNtIGZvciB0d28gQmlnTnVtYmVycwogICAqIEBwYXJhbSB7QmlnTnVtYmVyfSBhCiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGIKICAgKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUgb2YgYSBhbmQgYgogICAqIEBwcml2YXRlCiAgICovCgogIGZ1bmN0aW9uIF9sY21CaWdOdW1iZXIoYSwgYikgewogICAgaWYgKCFhLmlzSW50KCkgfHwgIWIuaXNJbnQoKSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24gbGNtIG11c3QgYmUgaW50ZWdlciBudW1iZXJzJyk7CiAgICB9CgogICAgaWYgKGEuaXNaZXJvKCkpIHsKICAgICAgcmV0dXJuIGE7CiAgICB9CgogICAgaWYgKGIuaXNaZXJvKCkpIHsKICAgICAgcmV0dXJuIGI7CiAgICB9IC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V1Y2xpZGVhbl9hbGdvcml0aG0KICAgIC8vIGV2YWx1YXRlIGxjbSBoZXJlIGlubGluZSB0byByZWR1Y2Ugb3ZlcmhlYWQKCgogICAgdmFyIHByb2QgPSBhLnRpbWVzKGIpOwoKICAgIHdoaWxlICghYi5pc1plcm8oKSkgewogICAgICB2YXIgdCA9IGI7CiAgICAgIGIgPSBhLm1vZCh0KTsKICAgICAgYSA9IHQ7CiAgICB9CgogICAgcmV0dXJuIHByb2QuZGl2KGEpLmFicygpOwogIH0KfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMTAuanMKCgoKdmFyIGxvZzEwX25hbWUgPSAnbG9nMTAnOwp2YXIgbG9nMTBfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCddOwp2YXIgY3JlYXRlTG9nMTAgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShsb2cxMF9uYW1lLCBsb2cxMF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIF9Db21wbGV4ID0gX3JlZi5Db21wbGV4OwoKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIDEwLWJhc2UgbG9nYXJpdGhtIG9mIGEgdmFsdWUuIFRoaXMgaXMgdGhlIHNhbWUgYXMgY2FsY3VsYXRpbmcgYGxvZyh4LCAxMClgLgogICAqCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGgubG9nMTAoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5sb2cxMCgwLjAwMDAxKSAgICAgICAgICAgIC8vIHJldHVybnMgLTUKICAgKiAgICBtYXRoLmxvZzEwKDEwMDAwKSAgICAgICAgICAgICAgLy8gcmV0dXJucyA0CiAgICogICAgbWF0aC5sb2coMTAwMDApIC8gbWF0aC5sb2coMTApIC8vIHJldHVybnMgNAogICAqICAgIG1hdGgucG93KDEwLCA0KSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEwMDAwCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGV4cCwgbG9nLCBsb2cxcCwgbG9nMgogICAqCiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHgKICAgKiAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIGxvZ2FyaXRobS4KICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9CiAgICogICAgICAgICAgICBSZXR1cm5zIHRoZSAxMC1iYXNlIGxvZ2FyaXRobSBvZiBgeGAKICAgKi8KICB2YXIgbG9nMTAgPSB0eXBlZChsb2cxMF9uYW1lLCB7CiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7CiAgICAgIGlmICh4ID49IDAgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7CiAgICAgICAgcmV0dXJuIGxvZzEwTnVtYmVyKHgpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIG5lZ2F0aXZlIHZhbHVlIC0+IGNvbXBsZXggdmFsdWUgY29tcHV0YXRpb24KICAgICAgICByZXR1cm4gbmV3IF9Db21wbGV4KHgsIDApLmxvZygpLmRpdihNYXRoLkxOMTApOwogICAgICB9CiAgICB9LAogICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7CiAgICAgIHJldHVybiBuZXcgX0NvbXBsZXgoeCkubG9nKCkuZGl2KE1hdGguTE4xMCk7CiAgICB9LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkgewogICAgICBpZiAoIXguaXNOZWdhdGl2ZSgpIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkgewogICAgICAgIHJldHVybiB4LmxvZygpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIGRvd25ncmFkZSB0byBudW1iZXIsIHJldHVybiBDb21wbGV4IHZhbHVlZCByZXN1bHQKICAgICAgICByZXR1cm4gbmV3IF9Db21wbGV4KHgudG9OdW1iZXIoKSwgMCkubG9nKCkuZGl2KE1hdGguTE4xMCk7CiAgICAgIH0KICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIHJldHVybiBkZWVwTWFwKHgsIGxvZzEwKTsKICAgIH0KICB9KTsKICByZXR1cm4gbG9nMTA7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hcml0aG1ldGljL2xvZzIuanMKCgoKdmFyIGxvZzJfbmFtZSA9ICdsb2cyJzsKdmFyIGxvZzJfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCddOwp2YXIgY3JlYXRlTG9nMiA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGxvZzJfbmFtZSwgbG9nMl9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7CgogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgMi1iYXNlIG9mIGEgdmFsdWUuIFRoaXMgaXMgdGhlIHNhbWUgYXMgY2FsY3VsYXRpbmcgYGxvZyh4LCAyKWAuCiAgICoKICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5sb2cyKHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGgubG9nMigwLjAzMTI1KSAgICAgICAgICAgLy8gcmV0dXJucyAtNQogICAqICAgIG1hdGgubG9nMigxNikgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA0CiAgICogICAgbWF0aC5sb2cyKDE2KSAvIG1hdGgubG9nMigyKSAvLyByZXR1cm5zIDQKICAgKiAgICBtYXRoLnBvdygyLCA0KSAgICAgICAgICAgICAgIC8vIHJldHVybnMgMTYKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgZXhwLCBsb2csIGxvZzFwLCBsb2cxMAogICAqCiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHgKICAgKiAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIGxvZ2FyaXRobS4KICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9CiAgICogICAgICAgICAgICBSZXR1cm5zIHRoZSAyLWJhc2UgbG9nYXJpdGhtIG9mIGB4YAogICAqLwogIHZhciBsb2cyID0gdHlwZWQobG9nMl9uYW1lLCB7CiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7CiAgICAgIGlmICh4ID49IDAgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7CiAgICAgICAgcmV0dXJuIGxvZzJOdW1iZXIoeCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gbmVnYXRpdmUgdmFsdWUgLT4gY29tcGxleCB2YWx1ZSBjb21wdXRhdGlvbgogICAgICAgIHJldHVybiBfbG9nMkNvbXBsZXgobmV3IENvbXBsZXgoeCwgMCkpOwogICAgICB9CiAgICB9LAogICAgQ29tcGxleDogX2xvZzJDb21wbGV4LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkgewogICAgICBpZiAoIXguaXNOZWdhdGl2ZSgpIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkgewogICAgICAgIHJldHVybiB4LmxvZygyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBkb3duZ3JhZGUgdG8gbnVtYmVyLCByZXR1cm4gQ29tcGxleCB2YWx1ZWQgcmVzdWx0CiAgICAgICAgcmV0dXJuIF9sb2cyQ29tcGxleChuZXcgQ29tcGxleCh4LnRvTnVtYmVyKCksIDApKTsKICAgICAgfQogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgbG9nMik7CiAgICB9CiAgfSk7CiAgLyoqCiAgICogQ2FsY3VsYXRlIGxvZzIgZm9yIGEgY29tcGxleCB2YWx1ZQogICAqIEBwYXJhbSB7Q29tcGxleH0geAogICAqIEByZXR1cm5zIHtDb21wbGV4fQogICAqIEBwcml2YXRlCiAgICovCgogIGZ1bmN0aW9uIF9sb2cyQ29tcGxleCh4KSB7CiAgICB2YXIgbmV3WCA9IE1hdGguc3FydCh4LnJlICogeC5yZSArIHguaW0gKiB4LmltKTsKICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLmxvZzIgPyBNYXRoLmxvZzIobmV3WCkgOiBNYXRoLmxvZyhuZXdYKSAvIE1hdGguTE4yLCBNYXRoLmF0YW4yKHguaW0sIHgucmUpIC8gTWF0aC5MTjIpOwogIH0KCiAgcmV0dXJuIGxvZzI7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMy5qcwoKCnZhciBhbGdvcml0aG0wM19uYW1lID0gJ2FsZ29yaXRobTAzJzsKdmFyIGFsZ29yaXRobTAzX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnXTsKdmFyIGNyZWF0ZUFsZ29yaXRobTAzID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoYWxnb3JpdGhtMDNfbmFtZSwgYWxnb3JpdGhtMDNfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7CgogIC8qKgogICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKERpaiwgU2lqKS4KICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIE0qTiB0aW1lcy4KICAgKgogICAqCiAgICogICAgICAgICAg4pSMICBmKERpaiwgU2lqKSAgOyBTKGksaikgIT09IDAKICAgKiBDKGksaikgPSDilKQKICAgKiAgICAgICAgICDilJQgIGYoRGlqLCAwKSAgICA7IG90aGVyd2lzZQogICAqCiAgICoKICAgKiBAcGFyYW0ge01hdHJpeH0gICBkZW5zZU1hdHJpeCAgICAgICBUaGUgRGVuc2VNYXRyaXggaW5zdGFuY2UgKEQpCiAgICogQHBhcmFtIHtNYXRyaXh9ICAgc3BhcnNlTWF0cml4ICAgICAgVGhlIFNwYXJzZU1hdHJpeCBpbnN0YW5jZSAoQykKICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihEaWosU2lqKSBvcGVyYXRpb24gdG8gaW52b2tlLCB3aGVyZSBEaWogPSBEZW5zZU1hdHJpeChpLGopIGFuZCBTaWogPSBTcGFyc2VNYXRyaXgoaSxqKQogICAqIEBwYXJhbSB7Ym9vbGVhbn0gIGludmVyc2UgICAgICAgICAgIEEgdHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgY2FsbGJhY2sgc2hvdWxkIGJlIGludm9rZWQgZihTaWosRGlqKQogICAqCiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgRGVuc2VNYXRyaXggKEMpCiAgICoKICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NDc3NTcxCiAgICovCiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTAzKGRlbnNlTWF0cml4LCBzcGFyc2VNYXRyaXgsIGNhbGxiYWNrLCBpbnZlcnNlKSB7CiAgICAvLyBkZW5zZSBtYXRyaXggYXJyYXlzCiAgICB2YXIgYWRhdGEgPSBkZW5zZU1hdHJpeC5fZGF0YTsKICAgIHZhciBhc2l6ZSA9IGRlbnNlTWF0cml4Ll9zaXplOwogICAgdmFyIGFkdCA9IGRlbnNlTWF0cml4Ll9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXMKCiAgICB2YXIgYnZhbHVlcyA9IHNwYXJzZU1hdHJpeC5fdmFsdWVzOwogICAgdmFyIGJpbmRleCA9IHNwYXJzZU1hdHJpeC5faW5kZXg7CiAgICB2YXIgYnB0ciA9IHNwYXJzZU1hdHJpeC5fcHRyOwogICAgdmFyIGJzaXplID0gc3BhcnNlTWF0cml4Ll9zaXplOwogICAgdmFyIGJkdCA9IHNwYXJzZU1hdHJpeC5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnMKCiAgICBpZiAoYXNpemUubGVuZ3RoICE9PSBic2l6ZS5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IERpbWVuc2lvbkVycm9yWyJhIiAvKiBEaW1lbnNpb25FcnJvciAqL10oYXNpemUubGVuZ3RoLCBic2l6ZS5sZW5ndGgpOwogICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1ucwoKCiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTsKICAgIH0gLy8gc3BhcnNlIG1hdHJpeCBjYW5ub3QgYmUgYSBQYXR0ZXJuIG1hdHJpeAoKCiAgICBpZiAoIWJ2YWx1ZXMpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gRGVuc2UgTWF0cml4IGFuZCBQYXR0ZXJuIFNwYXJzZSBNYXRyaXgnKTsKICAgIH0gLy8gcm93cyAmIGNvbHVtbnMKCgogICAgdmFyIHJvd3MgPSBhc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlCgogICAgdmFyIGR0OyAvLyB6ZXJvIHZhbHVlCgogICAgdmFyIHplcm8gPSAwOyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlCgogICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlcwoKICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJyAmJiBhZHQgPT09IGJkdCkgewogICAgICAvLyBkYXRhdHlwZQogICAgICBkdCA9IGFkdDsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlCgogICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkdCk7IC8vIGNhbGxiYWNrCgogICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTsKICAgIH0gLy8gcmVzdWx0IChEZW5zZU1hdHJpeCkKCgogICAgdmFyIGNkYXRhID0gW107IC8vIGluaXRpYWxpemUgZGVuc2UgbWF0cml4CgogICAgZm9yICh2YXIgeiA9IDA7IHogPCByb3dzOyB6KyspIHsKICAgICAgLy8gaW5pdGlhbGl6ZSByb3cKICAgICAgY2RhdGFbel0gPSBbXTsKICAgIH0gLy8gd29ya3NwYWNlCgoKICAgIHZhciB4ID0gW107IC8vIG1hcmtzIGluZGljYXRpbmcgd2UgaGF2ZSBhIHZhbHVlIGluIHggZm9yIGEgZ2l2ZW4gY29sdW1uCgogICAgdmFyIHcgPSBbXTsgLy8gbG9vcCBjb2x1bW5zIGluIGIKCiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykgewogICAgICAvLyBjb2x1bW4gbWFyawogICAgICB2YXIgbWFyayA9IGogKyAxOyAvLyB2YWx1ZXMgaW4gY29sdW1uIGoKCiAgICAgIGZvciAodmFyIGswID0gYnB0cltqXSwgazEgPSBicHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykgewogICAgICAgIC8vIHJvdwogICAgICAgIHZhciBpID0gYmluZGV4W2tdOyAvLyB1cGRhdGUgd29ya3NwYWNlCgogICAgICAgIHhbaV0gPSBpbnZlcnNlID8gY2YoYnZhbHVlc1trXSwgYWRhdGFbaV1bal0pIDogY2YoYWRhdGFbaV1bal0sIGJ2YWx1ZXNba10pOwogICAgICAgIHdbaV0gPSBtYXJrOwogICAgICB9IC8vIHByb2Nlc3Mgd29ya3NwYWNlCgoKICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCByb3dzOyB5KyspIHsKICAgICAgICAvLyBjaGVjayB3ZSBoYXZlIGEgY2FsY3VsYXRlZCB2YWx1ZSBmb3IgY3VycmVudCByb3cKICAgICAgICBpZiAod1t5XSA9PT0gbWFyaykgewogICAgICAgICAgLy8gdXNlIGNhbGN1bGF0ZWQgdmFsdWUKICAgICAgICAgIGNkYXRhW3ldW2pdID0geFt5XTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gY2FsY3VsYXRlIHZhbHVlCiAgICAgICAgICBjZGF0YVt5XVtqXSA9IGludmVyc2UgPyBjZih6ZXJvLCBhZGF0YVt5XVtqXSkgOiBjZihhZGF0YVt5XVtqXSwgemVybyk7CiAgICAgICAgfQogICAgICB9CiAgICB9IC8vIHJldHVybiBkZW5zZSBtYXRyaXgKCgogICAgcmV0dXJuIGRlbnNlTWF0cml4LmNyZWF0ZURlbnNlTWF0cml4KHsKICAgICAgZGF0YTogY2RhdGEsCiAgICAgIHNpemU6IFtyb3dzLCBjb2x1bW5zXSwKICAgICAgZGF0YXR5cGU6IGR0CiAgICB9KTsKICB9Owp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDUuanMKCgp2YXIgYWxnb3JpdGhtMDVfbmFtZSA9ICdhbGdvcml0aG0wNSc7CnZhciBhbGdvcml0aG0wNV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJ107CnZhciBjcmVhdGVBbGdvcml0aG0wNSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGFsZ29yaXRobTA1X25hbWUsIGFsZ29yaXRobTA1X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7CgogIC8qKgogICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IEEgYW5kIFNwYXJzZU1hdHJpeCBCIG5vbnplcm8gaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoQWlqLCBCaWopLgogICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTUFYKE5OWkEsIE5OWkIpIHRpbWVzCiAgICoKICAgKgogICAqICAgICAgICAgIOKUjCAgZihBaWosIEJpaikgIDsgQShpLGopICE9PSAwIHx8IEIoaSxqKSAhPT0gMAogICAqIEMoaSxqKSA9IOKUpAogICAqICAgICAgICAgIOKUlCAgMCAgICAgICAgICAgIDsgb3RoZXJ3aXNlCiAgICoKICAgKgogICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEEpCiAgICogQHBhcmFtIHtNYXRyaXh9ICAgYiAgICAgICAgICAgICAgICAgVGhlIFNwYXJzZU1hdHJpeCBpbnN0YW5jZSAoQikKICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosQmlqKSBvcGVyYXRpb24gdG8gaW52b2tlCiAgICoKICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBTcGFyc2VNYXRyaXggKEMpCiAgICoKICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjIwMjk0CiAgICovCiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTA1KGEsIGIsIGNhbGxiYWNrKSB7CiAgICAvLyBzcGFyc2UgbWF0cml4IGFycmF5cwogICAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7CiAgICB2YXIgYWluZGV4ID0gYS5faW5kZXg7CiAgICB2YXIgYXB0ciA9IGEuX3B0cjsKICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7CiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzCgogICAgdmFyIGJ2YWx1ZXMgPSBiLl92YWx1ZXM7CiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7CiAgICB2YXIgYnB0ciA9IGIuX3B0cjsKICAgIHZhciBic2l6ZSA9IGIuX3NpemU7CiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnMKCiAgICBpZiAoYXNpemUubGVuZ3RoICE9PSBic2l6ZS5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IERpbWVuc2lvbkVycm9yWyJhIiAvKiBEaW1lbnNpb25FcnJvciAqL10oYXNpemUubGVuZ3RoLCBic2l6ZS5sZW5ndGgpOwogICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1ucwoKCiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTsKICAgIH0gLy8gcm93cyAmIGNvbHVtbnMKCgogICAgdmFyIHJvd3MgPSBhc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlCgogICAgdmFyIGR0OyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlCgogICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWUKCiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2UKCiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzCgogICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7CiAgICAgIC8vIGRhdGF0eXBlCiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdCkKCiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGUKCiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2sKCiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pOwogICAgfSAvLyByZXN1bHQgYXJyYXlzCgoKICAgIHZhciBjdmFsdWVzID0gYXZhbHVlcyAmJiBidmFsdWVzID8gW10gOiB1bmRlZmluZWQ7CiAgICB2YXIgY2luZGV4ID0gW107CiAgICB2YXIgY3B0ciA9IFtdOyAvLyB3b3Jrc3BhY2VzCgogICAgdmFyIHhhID0gY3ZhbHVlcyA/IFtdIDogdW5kZWZpbmVkOwogICAgdmFyIHhiID0gY3ZhbHVlcyA/IFtdIDogdW5kZWZpbmVkOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtbgoKICAgIHZhciB3YSA9IFtdOwogICAgdmFyIHdiID0gW107IC8vIHZhcnMKCiAgICB2YXIgaSwgaiwgaywgazE7IC8vIGxvb3AgY29sdW1ucwoKICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHsKICAgICAgLy8gdXBkYXRlIGNwdHIKICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIGNvbHVtbnMgbWFyawoKICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gbG9vcCB2YWx1ZXMgQSg6LGopCgogICAgICBmb3IgKGsgPSBhcHRyW2pdLCBrMSA9IGFwdHJbaiArIDFdOyBrIDwgazE7IGsrKykgewogICAgICAgIC8vIHJvdwogICAgICAgIGkgPSBhaW5kZXhba107IC8vIHB1c2ggaW5kZXgKCiAgICAgICAgY2luZGV4LnB1c2goaSk7IC8vIHVwZGF0ZSB3b3Jrc3BhY2UKCiAgICAgICAgd2FbaV0gPSBtYXJrOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzCgogICAgICAgIGlmICh4YSkgewogICAgICAgICAgeGFbaV0gPSBhdmFsdWVzW2tdOwogICAgICAgIH0KICAgICAgfSAvLyBsb29wIHZhbHVlcyBCKDosaikKCgogICAgICBmb3IgKGsgPSBicHRyW2pdLCBrMSA9IGJwdHJbaiArIDFdOyBrIDwgazE7IGsrKykgewogICAgICAgIC8vIHJvdwogICAgICAgIGkgPSBiaW5kZXhba107IC8vIGNoZWNrIHJvdyBleGlzdGVkIGluIEEKCiAgICAgICAgaWYgKHdhW2ldICE9PSBtYXJrKSB7CiAgICAgICAgICAvLyBwdXNoIGluZGV4CiAgICAgICAgICBjaW5kZXgucHVzaChpKTsKICAgICAgICB9IC8vIHVwZGF0ZSB3b3Jrc3BhY2UKCgogICAgICAgIHdiW2ldID0gbWFyazsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcwoKICAgICAgICBpZiAoeGIpIHsKICAgICAgICAgIHhiW2ldID0gYnZhbHVlc1trXTsKICAgICAgICB9CiAgICAgIH0gLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAobm9uIHBhdHRlcm4gbWF0cml4KQoKCiAgICAgIGlmIChjdmFsdWVzKSB7CiAgICAgICAgLy8gaW5pdGlhbGl6ZSBmaXJzdCBpbmRleCBpbiBqCiAgICAgICAgayA9IGNwdHJbal07IC8vIGxvb3AgaW5kZXggaW4gagoKICAgICAgICB3aGlsZSAoayA8IGNpbmRleC5sZW5ndGgpIHsKICAgICAgICAgIC8vIHJvdwogICAgICAgICAgaSA9IGNpbmRleFtrXTsgLy8gbWFya3MKCiAgICAgICAgICB2YXIgd2FpID0gd2FbaV07CiAgICAgICAgICB2YXIgd2JpID0gd2JbaV07IC8vIGNoZWNrIEFpaiBvciBCaWogYXJlIG5vbnplcm8KCiAgICAgICAgICBpZiAod2FpID09PSBtYXJrIHx8IHdiaSA9PT0gbWFyaykgewogICAgICAgICAgICAvLyBtYXRyaXggdmFsdWVzIEAgaSxqCiAgICAgICAgICAgIHZhciB2YSA9IHdhaSA9PT0gbWFyayA/IHhhW2ldIDogemVybzsKICAgICAgICAgICAgdmFyIHZiID0gd2JpID09PSBtYXJrID8geGJbaV0gOiB6ZXJvOyAvLyBDaWoKCiAgICAgICAgICAgIHZhciB2YyA9IGNmKHZhLCB2Yik7IC8vIGNoZWNrIGZvciB6ZXJvCgogICAgICAgICAgICBpZiAoIWVxKHZjLCB6ZXJvKSkgewogICAgICAgICAgICAgIC8vIHB1c2ggdmFsdWUKICAgICAgICAgICAgICBjdmFsdWVzLnB1c2godmMpOyAvLyBpbmNyZW1lbnQgcG9pbnRlcgoKICAgICAgICAgICAgICBrKys7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy8gcmVtb3ZlIHZhbHVlIEAgaSwgZG8gbm90IGluY3JlbWVudCBwb2ludGVyCiAgICAgICAgICAgICAgY2luZGV4LnNwbGljZShrLCAxKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSAvLyB1cGRhdGUgY3B0cgoKCiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXgKCiAgICByZXR1cm4gYS5jcmVhdGVTcGFyc2VNYXRyaXgoewogICAgICB2YWx1ZXM6IGN2YWx1ZXMsCiAgICAgIGluZGV4OiBjaW5kZXgsCiAgICAgIHB0cjogY3B0ciwKICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLAogICAgICBkYXRhdHlwZTogZHQKICAgIH0pOwogIH07Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMi5qcwoKdmFyIGFsZ29yaXRobTEyX25hbWUgPSAnYWxnb3JpdGhtMTInOwp2YXIgYWxnb3JpdGhtMTJfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdEZW5zZU1hdHJpeCddOwp2YXIgY3JlYXRlQWxnb3JpdGhtMTIgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShhbGdvcml0aG0xMl9uYW1lLCBhbGdvcml0aG0xMl9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4OwoKICAvKioKICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBTIG5vbnplcm8gaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoU2lqLCBiKS4KICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIE14TiB0aW1lcy4KICAgKgogICAqCiAgICogICAgICAgICAg4pSMICBmKFNpaiwgYikgIDsgUyhpLGopICE9PSAwCiAgICogQyhpLGopID0g4pSkCiAgICogICAgICAgICAg4pSUICBmKDAsIGIpICAgIDsgb3RoZXJ3aXNlCiAgICoKICAgKgogICAqIEBwYXJhbSB7TWF0cml4fSAgIHMgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKFMpCiAgICogQHBhcmFtIHtTY2FsYXJ9ICAgYiAgICAgICAgICAgICAgICAgVGhlIFNjYWxhciB2YWx1ZQogICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixiKSBvcGVyYXRpb24gdG8gaW52b2tlCiAgICogQHBhcmFtIHtib29sZWFufSAgaW52ZXJzZSAgICAgICAgICAgQSB0cnVlIHZhbHVlIGluZGljYXRlcyBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBmKGIsU2lqKQogICAqCiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgRGVuc2VNYXRyaXggKEMpCiAgICoKICAgKiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2MjY4MTMKICAgKi8KICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMTIocywgYiwgY2FsbGJhY2ssIGludmVyc2UpIHsKICAgIC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzCiAgICB2YXIgYXZhbHVlcyA9IHMuX3ZhbHVlczsKICAgIHZhciBhaW5kZXggPSBzLl9pbmRleDsKICAgIHZhciBhcHRyID0gcy5fcHRyOwogICAgdmFyIGFzaXplID0gcy5fc2l6ZTsKICAgIHZhciBhZHQgPSBzLl9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBjYW5ub3QgYmUgYSBQYXR0ZXJuIG1hdHJpeAoKICAgIGlmICghYXZhbHVlcykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwZXJmb3JtIG9wZXJhdGlvbiBvbiBQYXR0ZXJuIFNwYXJzZSBNYXRyaXggYW5kIFNjYWxhciB2YWx1ZScpOwogICAgfSAvLyByb3dzICYgY29sdW1ucwoKCiAgICB2YXIgcm93cyA9IGFzaXplWzBdOwogICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGUKCiAgICB2YXIgZHQ7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2UKCiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzCgogICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7CiAgICAgIC8vIGRhdGF0eXBlCiAgICAgIGR0ID0gYWR0OyAvLyBjb252ZXJ0IGIgdG8gdGhlIHNhbWUgZGF0YXR5cGUKCiAgICAgIGIgPSB0eXBlZC5jb252ZXJ0KGIsIGR0KTsgLy8gY2FsbGJhY2sKCiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pOwogICAgfSAvLyByZXN1bHQgYXJyYXlzCgoKICAgIHZhciBjZGF0YSA9IFtdOyAvLyB3b3Jrc3BhY2VzCgogICAgdmFyIHggPSBbXTsgLy8gbWFya3MgaW5kaWNhdGluZyB3ZSBoYXZlIGEgdmFsdWUgaW4geCBmb3IgYSBnaXZlbiBjb2x1bW4KCiAgICB2YXIgdyA9IFtdOyAvLyBsb29wIGNvbHVtbnMKCiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykgewogICAgICAvLyBjb2x1bW5zIG1hcmsKICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gdmFsdWVzIGluIGoKCiAgICAgIGZvciAodmFyIGswID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykgewogICAgICAgIC8vIHJvdwogICAgICAgIHZhciByID0gYWluZGV4W2tdOyAvLyB1cGRhdGUgd29ya3NwYWNlCgogICAgICAgIHhbcl0gPSBhdmFsdWVzW2tdOwogICAgICAgIHdbcl0gPSBtYXJrOwogICAgICB9IC8vIGxvb3Agcm93cwoKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93czsgaSsrKSB7CiAgICAgICAgLy8gaW5pdGlhbGl6ZSBDIG9uIGZpcnN0IGNvbHVtbgogICAgICAgIGlmIChqID09PSAwKSB7CiAgICAgICAgICAvLyBjcmVhdGUgcm93IGFycmF5CiAgICAgICAgICBjZGF0YVtpXSA9IFtdOwogICAgICAgIH0gLy8gY2hlY2sgc3BhcnNlIG1hdHJpeCBoYXMgYSB2YWx1ZSBAIGksagoKCiAgICAgICAgaWYgKHdbaV0gPT09IG1hcmspIHsKICAgICAgICAgIC8vIGludm9rZSBjYWxsYmFjaywgdXBkYXRlIEMKICAgICAgICAgIGNkYXRhW2ldW2pdID0gaW52ZXJzZSA/IGNmKGIsIHhbaV0pIDogY2YoeFtpXSwgYik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIGRlbnNlIG1hdHJpeCB2YWx1ZSBAIGksIGoKICAgICAgICAgIGNkYXRhW2ldW2pdID0gaW52ZXJzZSA/IGNmKGIsIDApIDogY2YoMCwgYik7CiAgICAgICAgfQogICAgICB9CiAgICB9IC8vIHJldHVybiBkZW5zZSBtYXRyaXgKCgogICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7CiAgICAgIGRhdGE6IGNkYXRhLAogICAgICBzaXplOiBbcm93cywgY29sdW1uc10sCiAgICAgIGRhdGF0eXBlOiBkdAogICAgfSk7CiAgfTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2FyaXRobWV0aWMvbW9kLmpzCgoKCgoKCgoKCnZhciBtb2RfbmFtZSA9ICdtb2QnOwp2YXIgbW9kX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ0RlbnNlTWF0cml4J107CnZhciBjcmVhdGVNb2QgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShtb2RfbmFtZSwgbW9kX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCwKICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLAogICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7CiAgdmFyIGFsZ29yaXRobTAyID0gY3JlYXRlQWxnb3JpdGhtMDIoewogICAgdHlwZWQ6IHR5cGVkLAogICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyCiAgfSk7CiAgdmFyIGFsZ29yaXRobTAzID0gY3JlYXRlQWxnb3JpdGhtMDMoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgdmFyIGFsZ29yaXRobTA1ID0gY3JlYXRlQWxnb3JpdGhtMDUoewogICAgdHlwZWQ6IHR5cGVkLAogICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyCiAgfSk7CiAgdmFyIGFsZ29yaXRobTExID0gY3JlYXRlQWxnb3JpdGhtMTEoewogICAgdHlwZWQ6IHR5cGVkLAogICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyCiAgfSk7CiAgdmFyIGFsZ29yaXRobTEyID0gY3JlYXRlQWxnb3JpdGhtMTIoewogICAgdHlwZWQ6IHR5cGVkLAogICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4CiAgfSk7CiAgdmFyIGFsZ29yaXRobTEzID0gY3JlYXRlQWxnb3JpdGhtMTMoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgdmFyIGFsZ29yaXRobTE0ID0gY3JlYXRlQWxnb3JpdGhtMTQoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgLyoqCiAgICogQ2FsY3VsYXRlcyB0aGUgbW9kdWx1cywgdGhlIHJlbWFpbmRlciBvZiBhbiBpbnRlZ2VyIGRpdmlzaW9uLgogICAqCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKgogICAqIFRoZSBtb2R1bHVzIGlzIGRlZmluZWQgYXM6CiAgICoKICAgKiAgICAgeCAtIHkgKiBmbG9vcih4IC8geSkKICAgKgogICAqIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Nb2R1bG9fb3BlcmF0aW9uLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5tb2QoeCwgeSkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5tb2QoOCwgMykgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAyCiAgICogICAgbWF0aC5tb2QoMTEsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxCiAgICoKICAgKiAgICBmdW5jdGlvbiBpc09kZCh4KSB7CiAgICogICAgICByZXR1cm4gbWF0aC5tb2QoeCwgMikgIT0gMAogICAqICAgIH0KICAgKgogICAqICAgIGlzT2RkKDIpICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2UKICAgKiAgICBpc09kZCgzKSAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWUKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgZGl2aWRlCiAgICoKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IEFycmF5IHwgTWF0cml4fSB4IERpdmlkZW5kCiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0geSBEaXZpc29yCiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIGB4YCBkaXZpZGVkIGJ5IGB5YC4KICAgKi8KCiAgdmFyIG1vZCA9IHR5cGVkKG1vZF9uYW1lLCB7CiAgICAnbnVtYmVyLCBudW1iZXInOiBtb2ROdW1iZXIsCiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkgewogICAgICByZXR1cm4geS5pc1plcm8oKSA/IHggOiB4Lm1vZCh5KTsKICAgIH0sCiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7CiAgICAgIHJldHVybiB4Lm1vZCh5KTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDUoeCwgeSwgbW9kLCBmYWxzZSk7CiAgICB9LAogICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCBtb2QsIHRydWUpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgbW9kLCBmYWxzZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgbW9kKTsKICAgIH0sCiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIG1vZChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpOwogICAgfSwKICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBtb2QobWF0cml4KHgpLCB5KTsKICAgIH0sCiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gbW9kKHgsIG1hdHJpeCh5KSk7CiAgICB9LAogICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIG1vZCwgZmFsc2UpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgbW9kLCBmYWxzZSk7CiAgICB9LAogICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIG1vZCwgdHJ1ZSk7CiAgICB9LAogICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBtb2QsIHRydWUpOwogICAgfSwKICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIG1vZCwgZmFsc2UpLnZhbHVlT2YoKTsKICAgIH0sCiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBtb2QsIHRydWUpLnZhbHVlT2YoKTsKICAgIH0KICB9KTsKICByZXR1cm4gbW9kOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYXJpdGhtZXRpYy9tdWx0aXBseVNjYWxhci5qcwoKCnZhciBtdWx0aXBseVNjYWxhcl9uYW1lID0gJ211bHRpcGx5U2NhbGFyJzsKdmFyIG11bHRpcGx5U2NhbGFyX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnXTsKdmFyIGNyZWF0ZU11bHRpcGx5U2NhbGFyID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkobXVsdGlwbHlTY2FsYXJfbmFtZSwgbXVsdGlwbHlTY2FsYXJfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7CgogIC8qKgogICAqIE11bHRpcGx5IHR3byBzY2FsYXIgdmFsdWVzLCBgeCAqIHlgLgogICAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yIGludGVybmFsIHVzZTogaXQgaXMgdXNlZCBieSB0aGUgcHVibGljIGZ1bmN0aW9uCiAgICogYG11bHRpcGx5YAogICAqCiAgICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGNvbGxlY3Rpb25zIChBcnJheSBvciBNYXRyaXgpLgogICAqCiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0geCAgIEZpcnN0IHZhbHVlIHRvIG11bHRpcGx5CiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4fSB5ICAgICAgICAgIFNlY29uZCB2YWx1ZSB0byBtdWx0aXBseQogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXR9ICAgICBNdWx0aXBsaWNhdGlvbiBvZiBgeGAgYW5kIGB5YAogICAqIEBwcml2YXRlCiAgICovCiAgdmFyIG11bHRpcGx5U2NhbGFyID0gdHlwZWQoJ211bHRpcGx5U2NhbGFyJywgewogICAgJ251bWJlciwgbnVtYmVyJzogbXVsdGlwbHlOdW1iZXIsCiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHsKICAgICAgcmV0dXJuIHgubXVsKHkpOwogICAgfSwKICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7CiAgICAgIHJldHVybiB4LnRpbWVzKHkpOwogICAgfSwKICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHsKICAgICAgcmV0dXJuIHgubXVsKHkpOwogICAgfSwKICAgICdudW1iZXIgfCBGcmFjdGlvbiB8IEJpZ051bWJlciB8IENvbXBsZXgsIFVuaXQnOiBmdW5jdGlvbiBudW1iZXJGcmFjdGlvbkJpZ051bWJlckNvbXBsZXhVbml0KHgsIHkpIHsKICAgICAgdmFyIHJlcyA9IHkuY2xvbmUoKTsKICAgICAgcmVzLnZhbHVlID0gcmVzLnZhbHVlID09PSBudWxsID8gcmVzLl9ub3JtYWxpemUoeCkgOiBtdWx0aXBseVNjYWxhcihyZXMudmFsdWUsIHgpOwogICAgICByZXR1cm4gcmVzOwogICAgfSwKICAgICdVbml0LCBudW1iZXIgfCBGcmFjdGlvbiB8IEJpZ051bWJlciB8IENvbXBsZXgnOiBmdW5jdGlvbiBVbml0TnVtYmVyRnJhY3Rpb25CaWdOdW1iZXJDb21wbGV4KHgsIHkpIHsKICAgICAgdmFyIHJlcyA9IHguY2xvbmUoKTsKICAgICAgcmVzLnZhbHVlID0gcmVzLnZhbHVlID09PSBudWxsID8gcmVzLl9ub3JtYWxpemUoeSkgOiBtdWx0aXBseVNjYWxhcihyZXMudmFsdWUsIHkpOwogICAgICByZXR1cm4gcmVzOwogICAgfSwKICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkgewogICAgICByZXR1cm4geC5tdWx0aXBseSh5KTsKICAgIH0KICB9KTsKICByZXR1cm4gbXVsdGlwbHlTY2FsYXI7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hcml0aG1ldGljL211bHRpcGx5LmpzCgoKCgoKCnZhciBtdWx0aXBseV9uYW1lID0gJ211bHRpcGx5JzsKdmFyIG11bHRpcGx5X2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2FkZFNjYWxhcicsICdtdWx0aXBseVNjYWxhcicsICdlcXVhbFNjYWxhciddOwp2YXIgY3JlYXRlTXVsdGlwbHkgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShtdWx0aXBseV9uYW1lLCBtdWx0aXBseV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLAogICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsCiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcjsKICB2YXIgYWxnb3JpdGhtMTEgPSBjcmVhdGVBbGdvcml0aG0xMSh7CiAgICB0eXBlZDogdHlwZWQsCiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIKICB9KTsKICB2YXIgYWxnb3JpdGhtMTQgPSBjcmVhdGVBbGdvcml0aG0xNCh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICAvKioKICAgKiBNdWx0aXBseSB0d28gb3IgbW9yZSB2YWx1ZXMsIGB4ICogeWAuCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgbWF0cml4IHByb2R1Y3QgaXMgY2FsY3VsYXRlZC4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGgubXVsdGlwbHkoeCwgeSkKICAgKiAgICBtYXRoLm11bHRpcGx5KHgsIHksIHosIC4uLikKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5tdWx0aXBseSg0LCA1LjIpICAgICAgICAvLyByZXR1cm5zIG51bWJlciAyMC44CiAgICogICAgbWF0aC5tdWx0aXBseSgyLCAzLCA0KSAgICAgICAvLyByZXR1cm5zIG51bWJlciAyNAogICAqCiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKQogICAqICAgIGNvbnN0IGIgPSBtYXRoLmNvbXBsZXgoNCwgMSkKICAgKiAgICBtYXRoLm11bHRpcGx5KGEsIGIpICAgICAgICAgIC8vIHJldHVybnMgQ29tcGxleCA1ICsgMTRpCiAgICoKICAgKiAgICBjb25zdCBjID0gW1sxLCAyXSwgWzQsIDNdXQogICAqICAgIGNvbnN0IGQgPSBbWzEsIDIsIDNdLCBbMywgLTQsIDddXQogICAqICAgIG1hdGgubXVsdGlwbHkoYywgZCkgICAgICAgICAgLy8gcmV0dXJucyBBcnJheSBbWzcsIC02LCAxN10sIFsxMywgLTQsIDMzXV0KICAgKgogICAqICAgIGNvbnN0IGUgPSBtYXRoLnVuaXQoJzIuMSBrbScpCiAgICogICAgbWF0aC5tdWx0aXBseSgzLCBlKSAgICAgICAgICAvLyByZXR1cm5zIFVuaXQgNi4zIGttCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGRpdmlkZSwgcHJvZCwgY3Jvc3MsIGRvdAogICAqCiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIG11bHRpcGx5CiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBtdWx0aXBseQogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0gTXVsdGlwbGljYXRpb24gb2YgYHhgIGFuZCBgeWAKICAgKi8KCiAgdmFyIG11bHRpcGx5ID0gdHlwZWQobXVsdGlwbHlfbmFtZSwgT2JqZWN0KHV0aWxzX29iamVjdFsiZSIgLyogZXh0ZW5kICovXSkoewogICAgLy8gd2UgZXh0ZW5kIHRoZSBzaWduYXR1cmVzIG9mIG11bHRpcGx5U2NhbGFyIHdpdGggc2lnbmF0dXJlcyBkZWFsaW5nIHdpdGggbWF0cmljZXMKICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHsKICAgICAgLy8gY2hlY2sgZGltZW5zaW9ucwogICAgICBfdmFsaWRhdGVNYXRyaXhEaW1lbnNpb25zKE9iamVjdCh1dGlsc19hcnJheVsiYSIgLyogYXJyYXlTaXplICovXSkoeCksIE9iamVjdCh1dGlsc19hcnJheVsiYSIgLyogYXJyYXlTaXplICovXSkoeSkpOyAvLyB1c2UgZGVuc2UgbWF0cml4IGltcGxlbWVudGF0aW9uCgoKICAgICAgdmFyIG0gPSBtdWx0aXBseShtYXRyaXgoeCksIG1hdHJpeCh5KSk7IC8vIHJldHVybiBhcnJheSBvciBzY2FsYXIKCiAgICAgIHJldHVybiBPYmplY3QoaXNbInYiIC8qIGlzTWF0cml4ICovXSkobSkgPyBtLnZhbHVlT2YoKSA6IG07CiAgICB9LAogICAgJ01hdHJpeCwgTWF0cml4JzogZnVuY3Rpb24gTWF0cml4TWF0cml4KHgsIHkpIHsKICAgICAgLy8gZGltZW5zaW9ucwogICAgICB2YXIgeHNpemUgPSB4LnNpemUoKTsKICAgICAgdmFyIHlzaXplID0geS5zaXplKCk7IC8vIGNoZWNrIGRpbWVuc2lvbnMKCiAgICAgIF92YWxpZGF0ZU1hdHJpeERpbWVuc2lvbnMoeHNpemUsIHlzaXplKTsgLy8gcHJvY2VzcyBkaW1lbnNpb25zCgoKICAgICAgaWYgKHhzaXplLmxlbmd0aCA9PT0gMSkgewogICAgICAgIC8vIHByb2Nlc3MgeSBkaW1lbnNpb25zCiAgICAgICAgaWYgKHlzaXplLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgLy8gVmVjdG9yICogVmVjdG9yCiAgICAgICAgICByZXR1cm4gX211bHRpcGx5VmVjdG9yVmVjdG9yKHgsIHksIHhzaXplWzBdKTsKICAgICAgICB9IC8vIFZlY3RvciAqIE1hdHJpeAoKCiAgICAgICAgcmV0dXJuIF9tdWx0aXBseVZlY3Rvck1hdHJpeCh4LCB5KTsKICAgICAgfSAvLyBwcm9jZXNzIHkgZGltZW5zaW9ucwoKCiAgICAgIGlmICh5c2l6ZS5sZW5ndGggPT09IDEpIHsKICAgICAgICAvLyBNYXRyaXggKiBWZWN0b3IKICAgICAgICByZXR1cm4gX211bHRpcGx5TWF0cml4VmVjdG9yKHgsIHkpOwogICAgICB9IC8vIE1hdHJpeCAqIE1hdHJpeAoKCiAgICAgIHJldHVybiBfbXVsdGlwbHlNYXRyaXhNYXRyaXgoeCwgeSk7CiAgICB9LAogICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBNYXRyaXggKiBNYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIG11bHRpcGx5KHgsIG1hdHJpeCh5KSk7CiAgICB9LAogICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7CiAgICAgIC8vIHVzZSBNYXRyaXggKiBNYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIG11bHRpcGx5KG1hdHJpeCh4LCB5LnN0b3JhZ2UoKSksIHkpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBtdWx0aXBseVNjYWxhciwgZmFsc2UpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKTsKICAgIH0sCiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeSwgeCwgbXVsdGlwbHlTY2FsYXIsIHRydWUpOwogICAgfSwKICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbXVsdGlwbHlTY2FsYXIsIHRydWUpOwogICAgfSwKICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSkudmFsdWVPZigpOwogICAgfSwKICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ2FueSwgYW55JzogbXVsdGlwbHlTY2FsYXIsCiAgICAnYW55LCBhbnksIC4uLmFueSc6IGZ1bmN0aW9uIGFueUFueUFueSh4LCB5LCByZXN0KSB7CiAgICAgIHZhciByZXN1bHQgPSBtdWx0aXBseSh4LCB5KTsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdC5sZW5ndGg7IGkrKykgewogICAgICAgIHJlc3VsdCA9IG11bHRpcGx5KHJlc3VsdCwgcmVzdFtpXSk7CiAgICAgIH0KCiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgfSwgbXVsdGlwbHlTY2FsYXIuc2lnbmF0dXJlcykpOwoKICBmdW5jdGlvbiBfdmFsaWRhdGVNYXRyaXhEaW1lbnNpb25zKHNpemUxLCBzaXplMikgewogICAgLy8gY2hlY2sgbGVmdCBvcGVyYW5kIGRpbWVuc2lvbnMKICAgIHN3aXRjaCAoc2l6ZTEubGVuZ3RoKSB7CiAgICAgIGNhc2UgMToKICAgICAgICAvLyBjaGVjayBzaXplMgogICAgICAgIHN3aXRjaCAoc2l6ZTIubGVuZ3RoKSB7CiAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIC8vIFZlY3RvciB4IFZlY3RvcgogICAgICAgICAgICBpZiAoc2l6ZTFbMF0gIT09IHNpemUyWzBdKSB7CiAgICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3IKICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoIGluIG11bHRpcGxpY2F0aW9uLiBWZWN0b3JzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGgnKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAvLyBWZWN0b3IgeCBNYXRyaXgKICAgICAgICAgICAgaWYgKHNpemUxWzBdICE9PSBzaXplMlswXSkgewogICAgICAgICAgICAgIC8vIHRocm93IGVycm9yCiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gVmVjdG9yIGxlbmd0aCAoJyArIHNpemUxWzBdICsgJykgbXVzdCBtYXRjaCBNYXRyaXggcm93cyAoJyArIHNpemUyWzBdICsgJyknKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBtdWx0aXBseSBhIDEgb3IgMiBkaW1lbnNpb25hbCBtYXRyaXggKE1hdHJpeCBCIGhhcyAnICsgc2l6ZTIubGVuZ3RoICsgJyBkaW1lbnNpb25zKScpOwogICAgICAgIH0KCiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIDI6CiAgICAgICAgLy8gY2hlY2sgc2l6ZTIKICAgICAgICBzd2l0Y2ggKHNpemUyLmxlbmd0aCkgewogICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAvLyBNYXRyaXggeCBWZWN0b3IKICAgICAgICAgICAgaWYgKHNpemUxWzFdICE9PSBzaXplMlswXSkgewogICAgICAgICAgICAgIC8vIHRocm93IGVycm9yCiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gTWF0cml4IGNvbHVtbnMgKCcgKyBzaXplMVsxXSArICcpIG11c3QgbWF0Y2ggVmVjdG9yIGxlbmd0aCAoJyArIHNpemUyWzBdICsgJyknKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAvLyBNYXRyaXggeCBNYXRyaXgKICAgICAgICAgICAgaWYgKHNpemUxWzFdICE9PSBzaXplMlswXSkgewogICAgICAgICAgICAgIC8vIHRocm93IGVycm9yCiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gTWF0cml4IEEgY29sdW1ucyAoJyArIHNpemUxWzFdICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiByb3dzICgnICsgc2l6ZTJbMF0gKyAnKScpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBicmVhazsKCiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBvbmx5IG11bHRpcGx5IGEgMSBvciAyIGRpbWVuc2lvbmFsIG1hdHJpeCAoTWF0cml4IEIgaGFzICcgKyBzaXplMi5sZW5ndGggKyAnIGRpbWVuc2lvbnMpJyk7CiAgICAgICAgfQoKICAgICAgICBicmVhazsKCiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBtdWx0aXBseSBhIDEgb3IgMiBkaW1lbnNpb25hbCBtYXRyaXggKE1hdHJpeCBBIGhhcyAnICsgc2l6ZTEubGVuZ3RoICsgJyBkaW1lbnNpb25zKScpOwogICAgfQogIH0KICAvKioKICAgKiBDID0gQSAqIEIKICAgKgogICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE4pCiAgICogQHBhcmFtIHtNYXRyaXh9IGIgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTikKICAgKgogICAqIEByZXR1cm4ge251bWJlcn0gICAgICAgICAgICAgU2NhbGFyIHZhbHVlCiAgICovCgoKICBmdW5jdGlvbiBfbXVsdGlwbHlWZWN0b3JWZWN0b3IoYSwgYiwgbikgewogICAgLy8gY2hlY2sgZW1wdHkgdmVjdG9yCiAgICBpZiAobiA9PT0gMCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBtdWx0aXBseSB0d28gZW1wdHkgdmVjdG9ycycpOwogICAgfSAvLyBhIGRlbnNlCgoKICAgIHZhciBhZGF0YSA9IGEuX2RhdGE7CiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIGIgZGVuc2UKCiAgICB2YXIgYmRhdGEgPSBiLl9kYXRhOwogICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyBkYXRhdHlwZQoKICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2UKCiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2UKCiAgICB2YXIgbWYgPSBtdWx0aXBseVNjYWxhcjsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzCgogICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHsKICAgICAgLy8gZGF0YXR5cGUKICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdCkKCiAgICAgIGFmID0gdHlwZWQuZmluZChhZGRTY2FsYXIsIFtkdCwgZHRdKTsKICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7CiAgICB9IC8vIHJlc3VsdCAoZG8gbm90IGluaXRpYWxpemUgaXQgd2l0aCB6ZXJvKQoKCiAgICB2YXIgYyA9IG1mKGFkYXRhWzBdLCBiZGF0YVswXSk7IC8vIGxvb3AgZGF0YQoKICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbjsgaSsrKSB7CiAgICAgIC8vIG11bHRpcGx5IGFuZCBhY2N1bXVsYXRlCiAgICAgIGMgPSBhZihjLCBtZihhZGF0YVtpXSwgYmRhdGFbaV0pKTsKICAgIH0KCiAgICByZXR1cm4gYzsKICB9CiAgLyoqCiAgICogQyA9IEEgKiBCCiAgICoKICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIERlbnNlIFZlY3RvciAgIChNKQogICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgTWF0cml4ICAgICAgICAgKE14TikKICAgKgogICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE4pCiAgICovCgoKICBmdW5jdGlvbiBfbXVsdGlwbHlWZWN0b3JNYXRyaXgoYSwgYikgewogICAgLy8gcHJvY2VzcyBzdG9yYWdlCiAgICBpZiAoYi5zdG9yYWdlKCkgIT09ICdkZW5zZScpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciBTcGFyc2VNYXRyaXggbm90IGltcGxlbWVudGVkJyk7CiAgICB9CgogICAgcmV0dXJuIF9tdWx0aXBseVZlY3RvckRlbnNlTWF0cml4KGEsIGIpOwogIH0KICAvKioKICAgKiBDID0gQSAqIEIKICAgKgogICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE0pCiAgICogQHBhcmFtIHtNYXRyaXh9IGIgICAgICAgICAgICBEZW5zZSBNYXRyaXggICAoTXhOKQogICAqCiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTikKICAgKi8KCgogIGZ1bmN0aW9uIF9tdWx0aXBseVZlY3RvckRlbnNlTWF0cml4KGEsIGIpIHsKICAgIC8vIGEgZGVuc2UKICAgIHZhciBhZGF0YSA9IGEuX2RhdGE7CiAgICB2YXIgYXNpemUgPSBhLl9zaXplOwogICAgdmFyIGFkdCA9IGEuX2RhdGF0eXBlOyAvLyBiIGRlbnNlCgogICAgdmFyIGJkYXRhID0gYi5fZGF0YTsKICAgIHZhciBic2l6ZSA9IGIuX3NpemU7CiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHJvd3MgJiBjb2x1bW5zCgogICAgdmFyIGFsZW5ndGggPSBhc2l6ZVswXTsKICAgIHZhciBiY29sdW1ucyA9IGJzaXplWzFdOyAvLyBkYXRhdHlwZQoKICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2UKCiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2UKCiAgICB2YXIgbWYgPSBtdWx0aXBseVNjYWxhcjsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzCgogICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHsKICAgICAgLy8gZGF0YXR5cGUKICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdCkKCiAgICAgIGFmID0gdHlwZWQuZmluZChhZGRTY2FsYXIsIFtkdCwgZHRdKTsKICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7CiAgICB9IC8vIHJlc3VsdAoKCiAgICB2YXIgYyA9IFtdOyAvLyBsb29wIG1hdHJpeCBjb2x1bW5zCgogICAgZm9yICh2YXIgaiA9IDA7IGogPCBiY29sdW1uczsgaisrKSB7CiAgICAgIC8vIHN1bSAoZG8gbm90IGluaXRpYWxpemUgaXQgd2l0aCB6ZXJvKQogICAgICB2YXIgc3VtID0gbWYoYWRhdGFbMF0sIGJkYXRhWzBdW2pdKTsgLy8gbG9vcCB2ZWN0b3IKCiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYWxlbmd0aDsgaSsrKSB7CiAgICAgICAgLy8gbXVsdGlwbHkgJiBhY2N1bXVsYXRlCiAgICAgICAgc3VtID0gYWYoc3VtLCBtZihhZGF0YVtpXSwgYmRhdGFbaV1bal0pKTsKICAgICAgfQoKICAgICAgY1tqXSA9IHN1bTsKICAgIH0gLy8gcmV0dXJuIG1hdHJpeAoKCiAgICByZXR1cm4gYS5jcmVhdGVEZW5zZU1hdHJpeCh7CiAgICAgIGRhdGE6IGMsCiAgICAgIHNpemU6IFtiY29sdW1uc10sCiAgICAgIGRhdGF0eXBlOiBkdAogICAgfSk7CiAgfQogIC8qKgogICAqIEMgPSBBICogQgogICAqCiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBNYXRyaXggICAgICAgICAoTXhOKQogICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE4pCiAgICoKICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgIERlbnNlIFZlY3RvciAgIChNKQogICAqLwoKCiAgdmFyIF9tdWx0aXBseU1hdHJpeFZlY3RvciA9IHR5cGVkKCdfbXVsdGlwbHlNYXRyaXhWZWN0b3InLCB7CiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IF9tdWx0aXBseURlbnNlTWF0cml4VmVjdG9yLAogICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogX211bHRpcGx5U3BhcnNlTWF0cml4VmVjdG9yCiAgfSk7CiAgLyoqCiAgICogQyA9IEEgKiBCCiAgICoKICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIE1hdHJpeCAgICAgICAgIChNeE4pCiAgICogQHBhcmFtIHtNYXRyaXh9IGIgICAgICAgICAgICBNYXRyaXggICAgICAgICAoTnhDKQogICAqCiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBNYXRyaXggICAgICAgICAoTXhDKQogICAqLwoKCiAgdmFyIF9tdWx0aXBseU1hdHJpeE1hdHJpeCA9IHR5cGVkKCdfbXVsdGlwbHlNYXRyaXhNYXRyaXgnLCB7CiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogX211bHRpcGx5RGVuc2VNYXRyaXhEZW5zZU1hdHJpeCwKICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogX211bHRpcGx5RGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgsCiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IF9tdWx0aXBseVNwYXJzZU1hdHJpeERlbnNlTWF0cml4LAogICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogX211bHRpcGx5U3BhcnNlTWF0cml4U3BhcnNlTWF0cml4CiAgfSk7CiAgLyoqCiAgICogQyA9IEEgKiBCCiAgICoKICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIERlbnNlTWF0cml4ICAoTXhOKQogICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2UgVmVjdG9yIChOKQogICAqCiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBEZW5zZSBWZWN0b3IgKE0pCiAgICovCgoKICBmdW5jdGlvbiBfbXVsdGlwbHlEZW5zZU1hdHJpeFZlY3RvcihhLCBiKSB7CiAgICAvLyBhIGRlbnNlCiAgICB2YXIgYWRhdGEgPSBhLl9kYXRhOwogICAgdmFyIGFzaXplID0gYS5fc2l6ZTsKICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBkZW5zZQoKICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7CiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHJvd3MgJiBjb2x1bW5zCgogICAgdmFyIGFyb3dzID0gYXNpemVbMF07CiAgICB2YXIgYWNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGUKCiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlCgogICAgdmFyIGFmID0gYWRkU2NhbGFyOyAvLyBtdWx0aXBseVNjYWxhciBzaWduYXR1cmUgdG8gdXNlCgogICAgdmFyIG1mID0gbXVsdGlwbHlTY2FsYXI7IC8vIHByb2Nlc3MgZGF0YSB0eXBlcwoKICAgIGlmIChhZHQgJiYgYmR0ICYmIGFkdCA9PT0gYmR0ICYmIHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7CiAgICAgIC8vIGRhdGF0eXBlCiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZXMgdGhhdCBtYXRjaGVzIChkdCwgZHQpCgogICAgICBhZiA9IHR5cGVkLmZpbmQoYWRkU2NhbGFyLCBbZHQsIGR0XSk7CiAgICAgIG1mID0gdHlwZWQuZmluZChtdWx0aXBseVNjYWxhciwgW2R0LCBkdF0pOwogICAgfSAvLyByZXN1bHQKCgogICAgdmFyIGMgPSBbXTsgLy8gbG9vcCBtYXRyaXggYSByb3dzCgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcm93czsgaSsrKSB7CiAgICAgIC8vIGN1cnJlbnQgcm93CiAgICAgIHZhciByb3cgPSBhZGF0YVtpXTsgLy8gc3VtIChkbyBub3QgaW5pdGlhbGl6ZSBpdCB3aXRoIHplcm8pCgogICAgICB2YXIgc3VtID0gbWYocm93WzBdLCBiZGF0YVswXSk7IC8vIGxvb3AgbWF0cml4IGEgY29sdW1ucwoKICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBhY29sdW1uczsgaisrKSB7CiAgICAgICAgLy8gbXVsdGlwbHkgJiBhY2N1bXVsYXRlCiAgICAgICAgc3VtID0gYWYoc3VtLCBtZihyb3dbal0sIGJkYXRhW2pdKSk7CiAgICAgIH0KCiAgICAgIGNbaV0gPSBzdW07CiAgICB9IC8vIHJldHVybiBtYXRyaXgKCgogICAgcmV0dXJuIGEuY3JlYXRlRGVuc2VNYXRyaXgoewogICAgICBkYXRhOiBjLAogICAgICBzaXplOiBbYXJvd3NdLAogICAgICBkYXRhdHlwZTogZHQKICAgIH0pOwogIH0KICAvKioKICAgKiBDID0gQSAqIEIKICAgKgogICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgRGVuc2VNYXRyaXggICAgKE14TikKICAgKiBAcGFyYW0ge01hdHJpeH0gYiAgICAgICAgICAgIERlbnNlTWF0cml4ICAgIChOeEMpCiAgICoKICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgIERlbnNlTWF0cml4ICAgIChNeEMpCiAgICovCgoKICBmdW5jdGlvbiBfbXVsdGlwbHlEZW5zZU1hdHJpeERlbnNlTWF0cml4KGEsIGIpIHsKICAgIC8vIGEgZGVuc2UKICAgIHZhciBhZGF0YSA9IGEuX2RhdGE7CiAgICB2YXIgYXNpemUgPSBhLl9zaXplOwogICAgdmFyIGFkdCA9IGEuX2RhdGF0eXBlOyAvLyBiIGRlbnNlCgogICAgdmFyIGJkYXRhID0gYi5fZGF0YTsKICAgIHZhciBic2l6ZSA9IGIuX3NpemU7CiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHJvd3MgJiBjb2x1bW5zCgogICAgdmFyIGFyb3dzID0gYXNpemVbMF07CiAgICB2YXIgYWNvbHVtbnMgPSBhc2l6ZVsxXTsKICAgIHZhciBiY29sdW1ucyA9IGJzaXplWzFdOyAvLyBkYXRhdHlwZQoKICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2UKCiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2UKCiAgICB2YXIgbWYgPSBtdWx0aXBseVNjYWxhcjsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzCgogICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHsKICAgICAgLy8gZGF0YXR5cGUKICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdCkKCiAgICAgIGFmID0gdHlwZWQuZmluZChhZGRTY2FsYXIsIFtkdCwgZHRdKTsKICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7CiAgICB9IC8vIHJlc3VsdAoKCiAgICB2YXIgYyA9IFtdOyAvLyBsb29wIG1hdHJpeCBhIHJvd3MKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyb3dzOyBpKyspIHsKICAgICAgLy8gY3VycmVudCByb3cKICAgICAgdmFyIHJvdyA9IGFkYXRhW2ldOyAvLyBpbml0aWFsaXplIHJvdyBhcnJheQoKICAgICAgY1tpXSA9IFtdOyAvLyBsb29wIG1hdHJpeCBiIGNvbHVtbnMKCiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYmNvbHVtbnM7IGorKykgewogICAgICAgIC8vIHN1bSAoYXZvaWQgaW5pdGlhbGl6aW5nIHN1bSB0byB6ZXJvKQogICAgICAgIHZhciBzdW0gPSBtZihyb3dbMF0sIGJkYXRhWzBdW2pdKTsgLy8gbG9vcCBtYXRyaXggYSBjb2x1bW5zCgogICAgICAgIGZvciAodmFyIHggPSAxOyB4IDwgYWNvbHVtbnM7IHgrKykgewogICAgICAgICAgLy8gbXVsdGlwbHkgJiBhY2N1bXVsYXRlCiAgICAgICAgICBzdW0gPSBhZihzdW0sIG1mKHJvd1t4XSwgYmRhdGFbeF1bal0pKTsKICAgICAgICB9CgogICAgICAgIGNbaV1bal0gPSBzdW07CiAgICAgIH0KICAgIH0gLy8gcmV0dXJuIG1hdHJpeAoKCiAgICByZXR1cm4gYS5jcmVhdGVEZW5zZU1hdHJpeCh7CiAgICAgIGRhdGE6IGMsCiAgICAgIHNpemU6IFthcm93cywgYmNvbHVtbnNdLAogICAgICBkYXRhdHlwZTogZHQKICAgIH0pOwogIH0KICAvKioKICAgKiBDID0gQSAqIEIKICAgKgogICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgRGVuc2VNYXRyaXggICAgKE14TikKICAgKiBAcGFyYW0ge01hdHJpeH0gYiAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgIChOeEMpCiAgICoKICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgIChNeEMpCiAgICovCgoKICBmdW5jdGlvbiBfbXVsdGlwbHlEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeChhLCBiKSB7CiAgICAvLyBhIGRlbnNlCiAgICB2YXIgYWRhdGEgPSBhLl9kYXRhOwogICAgdmFyIGFzaXplID0gYS5fc2l6ZTsKICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBzcGFyc2UKCiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlczsKICAgIHZhciBiaW5kZXggPSBiLl9pbmRleDsKICAgIHZhciBicHRyID0gYi5fcHRyOwogICAgdmFyIGJzaXplID0gYi5fc2l6ZTsKICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgYiBtYXRyaXgKCiAgICBpZiAoIWJ2YWx1ZXMpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbXVsdGlwbHkgRGVuc2UgTWF0cml4IHRpbWVzIFBhdHRlcm4gb25seSBNYXRyaXgnKTsKICAgIH0gLy8gcm93cyAmIGNvbHVtbnMKCgogICAgdmFyIGFyb3dzID0gYXNpemVbMF07CiAgICB2YXIgYmNvbHVtbnMgPSBic2l6ZVsxXTsgLy8gZGF0YXR5cGUKCiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlCgogICAgdmFyIGFmID0gYWRkU2NhbGFyOyAvLyBtdWx0aXBseVNjYWxhciBzaWduYXR1cmUgdG8gdXNlCgogICAgdmFyIG1mID0gbXVsdGlwbHlTY2FsYXI7IC8vIGVxdWFsU2NhbGFyIHNpZ25hdHVyZSB0byB1c2UKCiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZQoKICAgIHZhciB6ZXJvID0gMDsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzCgogICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHsKICAgICAgLy8gZGF0YXR5cGUKICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdCkKCiAgICAgIGFmID0gdHlwZWQuZmluZChhZGRTY2FsYXIsIFtkdCwgZHRdKTsKICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7CiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGUKCiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsKICAgIH0gLy8gcmVzdWx0CgoKICAgIHZhciBjdmFsdWVzID0gW107CiAgICB2YXIgY2luZGV4ID0gW107CiAgICB2YXIgY3B0ciA9IFtdOyAvLyBjIG1hdHJpeAoKICAgIHZhciBjID0gYi5jcmVhdGVTcGFyc2VNYXRyaXgoewogICAgICB2YWx1ZXM6IGN2YWx1ZXMsCiAgICAgIGluZGV4OiBjaW5kZXgsCiAgICAgIHB0cjogY3B0ciwKICAgICAgc2l6ZTogW2Fyb3dzLCBiY29sdW1uc10sCiAgICAgIGRhdGF0eXBlOiBkdAogICAgfSk7IC8vIGxvb3AgYiBjb2x1bW5zCgogICAgZm9yICh2YXIgamIgPSAwOyBqYiA8IGJjb2x1bW5zOyBqYisrKSB7CiAgICAgIC8vIHVwZGF0ZSBwdHIKICAgICAgY3B0cltqYl0gPSBjaW5kZXgubGVuZ3RoOyAvLyBpbmRlY2VzIGluIGNvbHVtbiBqYgoKICAgICAgdmFyIGtiMCA9IGJwdHJbamJdOwogICAgICB2YXIga2IxID0gYnB0cltqYiArIDFdOyAvLyBkbyBub3QgcHJvY2VzcyBjb2x1bW4gamIgaWYgbm8gZGF0YSBleGlzdHMKCiAgICAgIGlmIChrYjEgPiBrYjApIHsKICAgICAgICAvLyBsYXN0IHJvdyBtYXJrIHByb2Nlc3NlZAogICAgICAgIHZhciBsYXN0ID0gMDsgLy8gbG9vcCBhIHJvd3MKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcm93czsgaSsrKSB7CiAgICAgICAgICAvLyBjb2x1bW4gbWFyawogICAgICAgICAgdmFyIG1hcmsgPSBpICsgMTsgLy8gQ1tpLCBqYl0KCiAgICAgICAgICB2YXIgY2lqID0gdm9pZCAwOyAvLyB2YWx1ZXMgaW4gYiBjb2x1bW4gagoKICAgICAgICAgIGZvciAodmFyIGtiID0ga2IwOyBrYiA8IGtiMTsga2IrKykgewogICAgICAgICAgICAvLyByb3cKICAgICAgICAgICAgdmFyIGliID0gYmluZGV4W2tiXTsgLy8gY2hlY2sgdmFsdWUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQKCiAgICAgICAgICAgIGlmIChsYXN0ICE9PSBtYXJrKSB7CiAgICAgICAgICAgICAgLy8gZmlyc3QgdmFsdWUgaW4gY29sdW1uIGpiCiAgICAgICAgICAgICAgY2lqID0gbWYoYWRhdGFbaV1baWJdLCBidmFsdWVzW2tiXSk7IC8vIHVwZGF0ZSBtYXJrCgogICAgICAgICAgICAgIGxhc3QgPSBtYXJrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIC8vIGFjY3VtdWxhdGUgdmFsdWUKICAgICAgICAgICAgICBjaWogPSBhZihjaWosIG1mKGFkYXRhW2ldW2liXSwgYnZhbHVlc1trYl0pKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSAvLyBjaGVjayBjb2x1bW4gaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCB2YWx1ZSAhPSAwCgoKICAgICAgICAgIGlmIChsYXN0ID09PSBtYXJrICYmICFlcShjaWosIHplcm8pKSB7CiAgICAgICAgICAgIC8vIHB1c2ggcm93ICYgdmFsdWUKICAgICAgICAgICAgY2luZGV4LnB1c2goaSk7CiAgICAgICAgICAgIGN2YWx1ZXMucHVzaChjaWopOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSAvLyB1cGRhdGUgcHRyCgoKICAgIGNwdHJbYmNvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXgKCiAgICByZXR1cm4gYzsKICB9CiAgLyoqCiAgICogQyA9IEEgKiBCCiAgICoKICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAoTXhOKQogICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2UgVmVjdG9yIChOKQogICAqCiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBTcGFyc2VNYXRyaXggICAgKE0sIDEpCiAgICovCgoKICBmdW5jdGlvbiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhWZWN0b3IoYSwgYikgewogICAgLy8gYSBzcGFyc2UKICAgIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzOwogICAgdmFyIGFpbmRleCA9IGEuX2luZGV4OwogICAgdmFyIGFwdHIgPSBhLl9wdHI7CiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGEgbWF0cml4CgogICAgaWYgKCFhdmFsdWVzKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IG11bHRpcGx5IFBhdHRlcm4gb25seSBNYXRyaXggdGltZXMgRGVuc2UgTWF0cml4Jyk7CiAgICB9IC8vIGIgZGVuc2UKCgogICAgdmFyIGJkYXRhID0gYi5fZGF0YTsKICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gcm93cyAmIGNvbHVtbnMKCiAgICB2YXIgYXJvd3MgPSBhLl9zaXplWzBdOwogICAgdmFyIGJyb3dzID0gYi5fc2l6ZVswXTsgLy8gcmVzdWx0CgogICAgdmFyIGN2YWx1ZXMgPSBbXTsKICAgIHZhciBjaW5kZXggPSBbXTsKICAgIHZhciBjcHRyID0gW107IC8vIGRhdGF0eXBlCgogICAgdmFyIGR0OyAvLyBhZGRTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZQoKICAgIHZhciBhZiA9IGFkZFNjYWxhcjsgLy8gbXVsdGlwbHlTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZQoKICAgIHZhciBtZiA9IG11bHRpcGx5U2NhbGFyOyAvLyBlcXVhbFNjYWxhciBzaWduYXR1cmUgdG8gdXNlCgogICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWUKCiAgICB2YXIgemVybyA9IDA7IC8vIHByb2Nlc3MgZGF0YSB0eXBlcwoKICAgIGlmIChhZHQgJiYgYmR0ICYmIGFkdCA9PT0gYmR0ICYmIHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7CiAgICAgIC8vIGRhdGF0eXBlCiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZXMgdGhhdCBtYXRjaGVzIChkdCwgZHQpCgogICAgICBhZiA9IHR5cGVkLmZpbmQoYWRkU2NhbGFyLCBbZHQsIGR0XSk7CiAgICAgIG1mID0gdHlwZWQuZmluZChtdWx0aXBseVNjYWxhciwgW2R0LCBkdF0pOwogICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkdCwgZHRdKTsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlCgogICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkdCk7CiAgICB9IC8vIHdvcmtzcGFjZQoKCiAgICB2YXIgeCA9IFtdOyAvLyB2ZWN0b3Igd2l0aCBtYXJrcyBpbmRpY2F0aW5nIGEgdmFsdWUgeFtpXSBleGlzdHMgaW4gYSBnaXZlbiBjb2x1bW4KCiAgICB2YXIgdyA9IFtdOyAvLyB1cGRhdGUgcHRyCgogICAgY3B0clswXSA9IDA7IC8vIHJvd3MgaW4gYgoKICAgIGZvciAodmFyIGliID0gMDsgaWIgPCBicm93czsgaWIrKykgewogICAgICAvLyBiW2liXQogICAgICB2YXIgdmJpID0gYmRhdGFbaWJdOyAvLyBjaGVjayBiW2liXSAhPSAwLCBhdm9pZCBsb29wcwoKICAgICAgaWYgKCFlcSh2YmksIHplcm8pKSB7CiAgICAgICAgLy8gQSB2YWx1ZXMgJiBpbmRleCBpbiBpYiBjb2x1bW4KICAgICAgICBmb3IgKHZhciBrYTAgPSBhcHRyW2liXSwga2ExID0gYXB0cltpYiArIDFdLCBrYSA9IGthMDsga2EgPCBrYTE7IGthKyspIHsKICAgICAgICAgIC8vIGEgcm93CiAgICAgICAgICB2YXIgaWEgPSBhaW5kZXhba2FdOyAvLyBjaGVjayB2YWx1ZSBleGlzdHMgaW4gY3VycmVudCBqCgogICAgICAgICAgaWYgKCF3W2lhXSkgewogICAgICAgICAgICAvLyBpYSBpcyBuZXcgZW50cnkgaW4gagogICAgICAgICAgICB3W2lhXSA9IHRydWU7IC8vIGFkZCBpIHRvIHBhdHRlcm4gb2YgQwoKICAgICAgICAgICAgY2luZGV4LnB1c2goaWEpOyAvLyB4KGlhKSA9IEEKCiAgICAgICAgICAgIHhbaWFdID0gbWYodmJpLCBhdmFsdWVzW2thXSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBpIGV4aXN0cyBpbiBDIGFscmVhZHkKICAgICAgICAgICAgeFtpYV0gPSBhZih4W2lhXSwgbWYodmJpLCBhdmFsdWVzW2thXSkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSAvLyBjb3B5IHZhbHVlcyBmcm9tIHggdG8gY29sdW1uIGpiIG9mIGMKCgogICAgZm9yICh2YXIgcDEgPSBjaW5kZXgubGVuZ3RoLCBwID0gMDsgcCA8IHAxOyBwKyspIHsKICAgICAgLy8gcm93CiAgICAgIHZhciBpYyA9IGNpbmRleFtwXTsgLy8gY29weSB2YWx1ZQoKICAgICAgY3ZhbHVlc1twXSA9IHhbaWNdOwogICAgfSAvLyB1cGRhdGUgcHRyCgoKICAgIGNwdHJbMV0gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeAoKICAgIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7CiAgICAgIHZhbHVlczogY3ZhbHVlcywKICAgICAgaW5kZXg6IGNpbmRleCwKICAgICAgcHRyOiBjcHRyLAogICAgICBzaXplOiBbYXJvd3MsIDFdLAogICAgICBkYXRhdHlwZTogZHQKICAgIH0pOwogIH0KICAvKioKICAgKiBDID0gQSAqIEIKICAgKgogICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgU3BhcnNlTWF0cml4ICAgICAgKE14TikKICAgKiBAcGFyYW0ge01hdHJpeH0gYiAgICAgICAgICAgIERlbnNlTWF0cml4ICAgICAgIChOeEMpCiAgICoKICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAgIChNeEMpCiAgICovCgoKICBmdW5jdGlvbiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeChhLCBiKSB7CiAgICAvLyBhIHNwYXJzZQogICAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7CiAgICB2YXIgYWluZGV4ID0gYS5faW5kZXg7CiAgICB2YXIgYXB0ciA9IGEuX3B0cjsKICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgYSBtYXRyaXgKCiAgICBpZiAoIWF2YWx1ZXMpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbXVsdGlwbHkgUGF0dGVybiBvbmx5IE1hdHJpeCB0aW1lcyBEZW5zZSBNYXRyaXgnKTsKICAgIH0gLy8gYiBkZW5zZQoKCiAgICB2YXIgYmRhdGEgPSBiLl9kYXRhOwogICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyByb3dzICYgY29sdW1ucwoKICAgIHZhciBhcm93cyA9IGEuX3NpemVbMF07CiAgICB2YXIgYnJvd3MgPSBiLl9zaXplWzBdOwogICAgdmFyIGJjb2x1bW5zID0gYi5fc2l6ZVsxXTsgLy8gZGF0YXR5cGUKCiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlCgogICAgdmFyIGFmID0gYWRkU2NhbGFyOyAvLyBtdWx0aXBseVNjYWxhciBzaWduYXR1cmUgdG8gdXNlCgogICAgdmFyIG1mID0gbXVsdGlwbHlTY2FsYXI7IC8vIGVxdWFsU2NhbGFyIHNpZ25hdHVyZSB0byB1c2UKCiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZQoKICAgIHZhciB6ZXJvID0gMDsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzCgogICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHsKICAgICAgLy8gZGF0YXR5cGUKICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdCkKCiAgICAgIGFmID0gdHlwZWQuZmluZChhZGRTY2FsYXIsIFtkdCwgZHRdKTsKICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7CiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGUKCiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsKICAgIH0gLy8gcmVzdWx0CgoKICAgIHZhciBjdmFsdWVzID0gW107CiAgICB2YXIgY2luZGV4ID0gW107CiAgICB2YXIgY3B0ciA9IFtdOyAvLyBjIG1hdHJpeAoKICAgIHZhciBjID0gYS5jcmVhdGVTcGFyc2VNYXRyaXgoewogICAgICB2YWx1ZXM6IGN2YWx1ZXMsCiAgICAgIGluZGV4OiBjaW5kZXgsCiAgICAgIHB0cjogY3B0ciwKICAgICAgc2l6ZTogW2Fyb3dzLCBiY29sdW1uc10sCiAgICAgIGRhdGF0eXBlOiBkdAogICAgfSk7IC8vIHdvcmtzcGFjZQoKICAgIHZhciB4ID0gW107IC8vIHZlY3RvciB3aXRoIG1hcmtzIGluZGljYXRpbmcgYSB2YWx1ZSB4W2ldIGV4aXN0cyBpbiBhIGdpdmVuIGNvbHVtbgoKICAgIHZhciB3ID0gW107IC8vIGxvb3AgYiBjb2x1bW5zCgogICAgZm9yICh2YXIgamIgPSAwOyBqYiA8IGJjb2x1bW5zOyBqYisrKSB7CiAgICAgIC8vIHVwZGF0ZSBwdHIKICAgICAgY3B0cltqYl0gPSBjaW5kZXgubGVuZ3RoOyAvLyBtYXJrIGluIHdvcmtzcGFjZSBmb3IgY3VycmVudCBjb2x1bW4KCiAgICAgIHZhciBtYXJrID0gamIgKyAxOyAvLyByb3dzIGluIGpiCgogICAgICBmb3IgKHZhciBpYiA9IDA7IGliIDwgYnJvd3M7IGliKyspIHsKICAgICAgICAvLyBiW2liLCBqYl0KICAgICAgICB2YXIgdmJpaiA9IGJkYXRhW2liXVtqYl07IC8vIGNoZWNrIGJbaWIsIGpiXSAhPSAwLCBhdm9pZCBsb29wcwoKICAgICAgICBpZiAoIWVxKHZiaWosIHplcm8pKSB7CiAgICAgICAgICAvLyBBIHZhbHVlcyAmIGluZGV4IGluIGliIGNvbHVtbgogICAgICAgICAgZm9yICh2YXIga2EwID0gYXB0cltpYl0sIGthMSA9IGFwdHJbaWIgKyAxXSwga2EgPSBrYTA7IGthIDwga2ExOyBrYSsrKSB7CiAgICAgICAgICAgIC8vIGEgcm93CiAgICAgICAgICAgIHZhciBpYSA9IGFpbmRleFtrYV07IC8vIGNoZWNrIHZhbHVlIGV4aXN0cyBpbiBjdXJyZW50IGoKCiAgICAgICAgICAgIGlmICh3W2lhXSAhPT0gbWFyaykgewogICAgICAgICAgICAgIC8vIGlhIGlzIG5ldyBlbnRyeSBpbiBqCiAgICAgICAgICAgICAgd1tpYV0gPSBtYXJrOyAvLyBhZGQgaSB0byBwYXR0ZXJuIG9mIEMKCiAgICAgICAgICAgICAgY2luZGV4LnB1c2goaWEpOyAvLyB4KGlhKSA9IEEKCiAgICAgICAgICAgICAgeFtpYV0gPSBtZih2YmlqLCBhdmFsdWVzW2thXSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy8gaSBleGlzdHMgaW4gQyBhbHJlYWR5CiAgICAgICAgICAgICAgeFtpYV0gPSBhZih4W2lhXSwgbWYodmJpaiwgYXZhbHVlc1trYV0pKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSAvLyBjb3B5IHZhbHVlcyBmcm9tIHggdG8gY29sdW1uIGpiIG9mIGMKCgogICAgICBmb3IgKHZhciBwMCA9IGNwdHJbamJdLCBwMSA9IGNpbmRleC5sZW5ndGgsIHAgPSBwMDsgcCA8IHAxOyBwKyspIHsKICAgICAgICAvLyByb3cKICAgICAgICB2YXIgaWMgPSBjaW5kZXhbcF07IC8vIGNvcHkgdmFsdWUKCiAgICAgICAgY3ZhbHVlc1twXSA9IHhbaWNdOwogICAgICB9CiAgICB9IC8vIHVwZGF0ZSBwdHIKCgogICAgY3B0cltiY29sdW1uc10gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeAoKICAgIHJldHVybiBjOwogIH0KICAvKioKICAgKiBDID0gQSAqIEIKICAgKgogICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgU3BhcnNlTWF0cml4ICAgICAgKE14TikKICAgKiBAcGFyYW0ge01hdHJpeH0gYiAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAgIChOeEMpCiAgICoKICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAgIChNeEMpCiAgICovCgoKICBmdW5jdGlvbiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoYSwgYikgewogICAgLy8gYSBzcGFyc2UKICAgIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzOwogICAgdmFyIGFpbmRleCA9IGEuX2luZGV4OwogICAgdmFyIGFwdHIgPSBhLl9wdHI7CiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIGIgc3BhcnNlCgogICAgdmFyIGJ2YWx1ZXMgPSBiLl92YWx1ZXM7CiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7CiAgICB2YXIgYnB0ciA9IGIuX3B0cjsKICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gcm93cyAmIGNvbHVtbnMKCiAgICB2YXIgYXJvd3MgPSBhLl9zaXplWzBdOwogICAgdmFyIGJjb2x1bW5zID0gYi5fc2l6ZVsxXTsgLy8gZmxhZyBpbmRpY2F0aW5nIGJvdGggbWF0cmljZXMgKGEgJiBiKSBjb250YWluIGRhdGEKCiAgICB2YXIgdmFsdWVzID0gYXZhbHVlcyAmJiBidmFsdWVzOyAvLyBkYXRhdHlwZQoKICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2UKCiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2UKCiAgICB2YXIgbWYgPSBtdWx0aXBseVNjYWxhcjsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzCgogICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHsKICAgICAgLy8gZGF0YXR5cGUKICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdCkKCiAgICAgIGFmID0gdHlwZWQuZmluZChhZGRTY2FsYXIsIFtkdCwgZHRdKTsKICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7CiAgICB9IC8vIHJlc3VsdAoKCiAgICB2YXIgY3ZhbHVlcyA9IHZhbHVlcyA/IFtdIDogdW5kZWZpbmVkOwogICAgdmFyIGNpbmRleCA9IFtdOwogICAgdmFyIGNwdHIgPSBbXTsgLy8gYyBtYXRyaXgKCiAgICB2YXIgYyA9IGEuY3JlYXRlU3BhcnNlTWF0cml4KHsKICAgICAgdmFsdWVzOiBjdmFsdWVzLAogICAgICBpbmRleDogY2luZGV4LAogICAgICBwdHI6IGNwdHIsCiAgICAgIHNpemU6IFthcm93cywgYmNvbHVtbnNdLAogICAgICBkYXRhdHlwZTogZHQKICAgIH0pOyAvLyB3b3Jrc3BhY2UKCiAgICB2YXIgeCA9IHZhbHVlcyA/IFtdIDogdW5kZWZpbmVkOyAvLyB2ZWN0b3Igd2l0aCBtYXJrcyBpbmRpY2F0aW5nIGEgdmFsdWUgeFtpXSBleGlzdHMgaW4gYSBnaXZlbiBjb2x1bW4KCiAgICB2YXIgdyA9IFtdOyAvLyB2YXJpYWJsZXMKCiAgICB2YXIga2EsIGthMCwga2ExLCBrYiwga2IwLCBrYjEsIGlhLCBpYjsgLy8gbG9vcCBiIGNvbHVtbnMKCiAgICBmb3IgKHZhciBqYiA9IDA7IGpiIDwgYmNvbHVtbnM7IGpiKyspIHsKICAgICAgLy8gdXBkYXRlIHB0cgogICAgICBjcHRyW2piXSA9IGNpbmRleC5sZW5ndGg7IC8vIG1hcmsgaW4gd29ya3NwYWNlIGZvciBjdXJyZW50IGNvbHVtbgoKICAgICAgdmFyIG1hcmsgPSBqYiArIDE7IC8vIEIgdmFsdWVzICYgaW5kZXggaW4gagoKICAgICAgZm9yIChrYjAgPSBicHRyW2piXSwga2IxID0gYnB0cltqYiArIDFdLCBrYiA9IGtiMDsga2IgPCBrYjE7IGtiKyspIHsKICAgICAgICAvLyBiIHJvdwogICAgICAgIGliID0gYmluZGV4W2tiXTsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcwoKICAgICAgICBpZiAodmFsdWVzKSB7CiAgICAgICAgICAvLyBsb29wIHZhbHVlcyBpbiBhWzosaWJdCiAgICAgICAgICBmb3IgKGthMCA9IGFwdHJbaWJdLCBrYTEgPSBhcHRyW2liICsgMV0sIGthID0ga2EwOyBrYSA8IGthMTsga2ErKykgewogICAgICAgICAgICAvLyByb3cKICAgICAgICAgICAgaWEgPSBhaW5kZXhba2FdOyAvLyBjaGVjayB2YWx1ZSBleGlzdHMgaW4gY3VycmVudCBqCgogICAgICAgICAgICBpZiAod1tpYV0gIT09IG1hcmspIHsKICAgICAgICAgICAgICAvLyBpYSBpcyBuZXcgZW50cnkgaW4gagogICAgICAgICAgICAgIHdbaWFdID0gbWFyazsgLy8gYWRkIGkgdG8gcGF0dGVybiBvZiBDCgogICAgICAgICAgICAgIGNpbmRleC5wdXNoKGlhKTsgLy8geChpYSkgPSBBCgogICAgICAgICAgICAgIHhbaWFdID0gbWYoYnZhbHVlc1trYl0sIGF2YWx1ZXNba2FdKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAvLyBpIGV4aXN0cyBpbiBDIGFscmVhZHkKICAgICAgICAgICAgICB4W2lhXSA9IGFmKHhbaWFdLCBtZihidmFsdWVzW2tiXSwgYXZhbHVlc1trYV0pKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBsb29wIHZhbHVlcyBpbiBhWzosaWJdCiAgICAgICAgICBmb3IgKGthMCA9IGFwdHJbaWJdLCBrYTEgPSBhcHRyW2liICsgMV0sIGthID0ga2EwOyBrYSA8IGthMTsga2ErKykgewogICAgICAgICAgICAvLyByb3cKICAgICAgICAgICAgaWEgPSBhaW5kZXhba2FdOyAvLyBjaGVjayB2YWx1ZSBleGlzdHMgaW4gY3VycmVudCBqCgogICAgICAgICAgICBpZiAod1tpYV0gIT09IG1hcmspIHsKICAgICAgICAgICAgICAvLyBpYSBpcyBuZXcgZW50cnkgaW4gagogICAgICAgICAgICAgIHdbaWFdID0gbWFyazsgLy8gYWRkIGkgdG8gcGF0dGVybiBvZiBDCgogICAgICAgICAgICAgIGNpbmRleC5wdXNoKGlhKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgbWF0cml4IHZhbHVlcyAocGF0dGVybiBtYXRyaXgpCgoKICAgICAgaWYgKHZhbHVlcykgewogICAgICAgIC8vIGNvcHkgdmFsdWVzIGZyb20geCB0byBjb2x1bW4gamIgb2YgYwogICAgICAgIGZvciAodmFyIHAwID0gY3B0cltqYl0sIHAxID0gY2luZGV4Lmxlbmd0aCwgcCA9IHAwOyBwIDwgcDE7IHArKykgewogICAgICAgICAgLy8gcm93CiAgICAgICAgICB2YXIgaWMgPSBjaW5kZXhbcF07IC8vIGNvcHkgdmFsdWUKCiAgICAgICAgICBjdmFsdWVzW3BdID0geFtpY107CiAgICAgICAgfQogICAgICB9CiAgICB9IC8vIHVwZGF0ZSBwdHIKCgogICAgY3B0cltiY29sdW1uc10gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeAoKICAgIHJldHVybiBjOwogIH0KCiAgcmV0dXJuIG11bHRpcGx5Owp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYXJpdGhtZXRpYy9udGhSb290LmpzCgoKCgoKCgoKdmFyIG50aFJvb3RfbmFtZSA9ICdudGhSb290JzsKdmFyIG50aFJvb3RfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnQmlnTnVtYmVyJ107CnZhciBjcmVhdGVOdGhSb290ID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkobnRoUm9vdF9uYW1lLCBudGhSb290X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCwKICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLAogICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7CiAgdmFyIGFsZ29yaXRobTAxID0gY3JlYXRlQWxnb3JpdGhtMDEoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgdmFyIGFsZ29yaXRobTAyID0gY3JlYXRlQWxnb3JpdGhtMDIoewogICAgdHlwZWQ6IHR5cGVkLAogICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyCiAgfSk7CiAgdmFyIGFsZ29yaXRobTA2ID0gY3JlYXRlQWxnb3JpdGhtMDYoewogICAgdHlwZWQ6IHR5cGVkLAogICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyCiAgfSk7CiAgdmFyIGFsZ29yaXRobTExID0gY3JlYXRlQWxnb3JpdGhtMTEoewogICAgdHlwZWQ6IHR5cGVkLAogICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyCiAgfSk7CiAgdmFyIGFsZ29yaXRobTEzID0gY3JlYXRlQWxnb3JpdGhtMTMoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgdmFyIGFsZ29yaXRobTE0ID0gY3JlYXRlQWxnb3JpdGhtMTQoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBudGggcm9vdCBvZiBhIHZhbHVlLgogICAqIFRoZSBwcmluY2lwYWwgbnRoIHJvb3Qgb2YgYSBwb3NpdGl2ZSByZWFsIG51bWJlciBBLCBpcyB0aGUgcG9zaXRpdmUgcmVhbAogICAqIHNvbHV0aW9uIG9mIHRoZSBlcXVhdGlvbgogICAqCiAgICogICAgIHhecm9vdCA9IEEKICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICAgbWF0aC5udGhSb290KGEpCiAgICogICAgIG1hdGgubnRoUm9vdChhLCByb290KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICAgbWF0aC5udGhSb290KDksIDIpICAgIC8vIHJldHVybnMgMywgYXMgM14yID09IDkKICAgKiAgICAgbWF0aC5zcXJ0KDkpICAgICAgICAgIC8vIHJldHVybnMgMywgYXMgM14yID09IDkKICAgKiAgICAgbWF0aC5udGhSb290KDY0LCAzKSAgIC8vIHJldHVybnMgNCwgYXMgNF4zID09IDY0CiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgICBzcXJ0LCBwb3cKICAgKgogICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXggfCBDb21wbGV4fSBhCiAgICogICAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIG50aCByb290CiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFtyb290PTJdICAgIFRoZSByb290LgogICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0aGUgbnRoIHJvb3Qgb2YgYGFgCiAgICovCgogIHZhciBjb21wbGV4RXJyID0gJycgKyAnQ29tcGxleCBudW1iZXIgbm90IHN1cHBvcnRlZCBpbiBmdW5jdGlvbiBudGhSb290LiAnICsgJ1VzZSBudGhSb290cyBpbnN0ZWFkLic7CiAgdmFyIG50aFJvb3QgPSB0eXBlZChudGhSb290X25hbWUsIHsKICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHsKICAgICAgcmV0dXJuIG50aFJvb3ROdW1iZXIoeCwgMik7CiAgICB9LAogICAgJ251bWJlciwgbnVtYmVyJzogbnRoUm9vdE51bWJlciwKICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHsKICAgICAgcmV0dXJuIF9iaWdOdGhSb290KHgsIG5ldyBfQmlnTnVtYmVyKDIpKTsKICAgIH0sCiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKGNvbXBsZXhFcnIpOwogICAgfSwKICAgICdDb21wbGV4LCBudW1iZXInOiBmdW5jdGlvbiBDb21wbGV4TnVtYmVyKHgsIHkpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKGNvbXBsZXhFcnIpOwogICAgfSwKICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IF9iaWdOdGhSb290LAogICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkgewogICAgICByZXR1cm4gbnRoUm9vdCh4LCAyKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICAvLyBkZW5zaXR5IG11c3QgYmUgb25lIChubyB6ZXJvcyBpbiBtYXRyaXgpCiAgICAgIGlmICh5LmRlbnNpdHkoKSA9PT0gMSkgewogICAgICAgIC8vIHNwYXJzZSArIHNwYXJzZQogICAgICAgIHJldHVybiBhbGdvcml0aG0wNih4LCB5LCBudGhSb290KTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyB0aHJvdyBleGNlcHRpb24KICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBub24temVybycpOwogICAgICB9CiAgICB9LAogICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCBudGhSb290LCB0cnVlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgLy8gZGVuc2l0eSBtdXN0IGJlIG9uZSAobm8gemVyb3MgaW4gbWF0cml4KQogICAgICBpZiAoeS5kZW5zaXR5KCkgPT09IDEpIHsKICAgICAgICAvLyBkZW5zZSArIHNwYXJzZQogICAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCBudGhSb290LCBmYWxzZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gdGhyb3cgZXhjZXB0aW9uCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgbm9uLXplcm8nKTsKICAgICAgfQogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIG50aFJvb3QpOwogICAgfSwKICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gbnRoUm9vdChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpOwogICAgfSwKICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBudGhSb290KG1hdHJpeCh4KSwgeSk7CiAgICB9LAogICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIG50aFJvb3QoeCwgbWF0cml4KHkpKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbnRoUm9vdCwgZmFsc2UpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gRGVuc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgbnRoUm9vdCwgZmFsc2UpOwogICAgfSwKICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIC8vIGRlbnNpdHkgbXVzdCBiZSBvbmUgKG5vIHplcm9zIGluIG1hdHJpeCkKICAgICAgaWYgKHkuZGVuc2l0eSgpID09PSAxKSB7CiAgICAgICAgLy8gc3BhcnNlIC0gc2NhbGFyCiAgICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHksIHgsIG50aFJvb3QsIHRydWUpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIHRocm93IGV4Y2VwdGlvbgogICAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIG5vbi16ZXJvJyk7CiAgICAgIH0KICAgIH0sCiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIG50aFJvb3QsIHRydWUpOwogICAgfSwKICAgICdBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlOdW1iZXJCaWdOdW1iZXIoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBudGhSb290KG1hdHJpeCh4KSwgeSkudmFsdWVPZigpOwogICAgfSwKICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBudGhSb290KHgsIG1hdHJpeCh5KSkudmFsdWVPZigpOwogICAgfQogIH0pOwogIHJldHVybiBudGhSb290OwogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgbnRoIHJvb3Qgb2YgYSBmb3IgQmlnTnVtYmVycywgc29sdmUgeF5yb290ID09IGEKICAgKiBodHRwczovL3Jvc2V0dGFjb2RlLm9yZy93aWtpL050aF9yb290I0phdmFTY3JpcHQKICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYQogICAqIEBwYXJhbSB7QmlnTnVtYmVyfSByb290CiAgICogQHByaXZhdGUKICAgKi8KCiAgZnVuY3Rpb24gX2JpZ050aFJvb3QoYSwgcm9vdCkgewogICAgdmFyIHByZWNpc2lvbiA9IF9CaWdOdW1iZXIucHJlY2lzaW9uOwoKICAgIHZhciBCaWcgPSBfQmlnTnVtYmVyLmNsb25lKHsKICAgICAgcHJlY2lzaW9uOiBwcmVjaXNpb24gKyAyCiAgICB9KTsKCiAgICB2YXIgemVybyA9IG5ldyBfQmlnTnVtYmVyKDApOwogICAgdmFyIG9uZSA9IG5ldyBCaWcoMSk7CiAgICB2YXIgaW52ID0gcm9vdC5pc05lZ2F0aXZlKCk7CgogICAgaWYgKGludikgewogICAgICByb290ID0gcm9vdC5uZWcoKTsKICAgIH0KCiAgICBpZiAocm9vdC5pc1plcm8oKSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBub24temVybycpOwogICAgfQoKICAgIGlmIChhLmlzTmVnYXRpdmUoKSAmJiAhcm9vdC5hYnMoKS5tb2QoMikuZXF1YWxzKDEpKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIG9kZCB3aGVuIGEgaXMgbmVnYXRpdmUuJyk7CiAgICB9IC8vIGVkZ2UgY2FzZXMgemVybyBhbmQgaW5maW5pdHkKCgogICAgaWYgKGEuaXNaZXJvKCkpIHsKICAgICAgcmV0dXJuIGludiA/IG5ldyBCaWcoSW5maW5pdHkpIDogMDsKICAgIH0KCiAgICBpZiAoIWEuaXNGaW5pdGUoKSkgewogICAgICByZXR1cm4gaW52ID8gemVybyA6IGE7CiAgICB9CgogICAgdmFyIHggPSBhLmFicygpLnBvdyhvbmUuZGl2KHJvb3QpKTsgLy8gSWYgYSA8IDAsIHdlIHJlcXVpcmUgdGhhdCByb290IGlzIGFuIG9kZCBpbnRlZ2VyLAogICAgLy8gc28gKC0xKSBeICgxL3Jvb3QpID0gLTEKCiAgICB4ID0gYS5pc05lZygpID8geC5uZWcoKSA6IHg7CiAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoKGludiA/IG9uZS5kaXYoeCkgOiB4KS50b1ByZWNpc2lvbihwcmVjaXNpb24pKTsKICB9Cn0pOwp2YXIgY3JlYXRlTnRoUm9vdE51bWJlciA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKG50aFJvb3RfbmFtZSwgWyd0eXBlZCddLCBmdW5jdGlvbiAoX3JlZjIpIHsKICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZDsKICByZXR1cm4gdHlwZWQobnRoUm9vdF9uYW1lLCB7CiAgICBudW1iZXI6IG50aFJvb3ROdW1iZXIsCiAgICAnbnVtYmVyLCBudW1iZXInOiBudGhSb290TnVtYmVyCiAgfSk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hcml0aG1ldGljL3NpZ24uanMKCgoKdmFyIHNpZ25fbmFtZSA9ICdzaWduJzsKdmFyIHNpZ25fZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInLCAnRnJhY3Rpb24nLCAnY29tcGxleCddOwp2YXIgY3JlYXRlU2lnbiA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHNpZ25fbmFtZSwgc2lnbl9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLAogICAgICBjb21wbGV4ID0gX3JlZi5jb21wbGV4LAogICAgICBfRnJhY3Rpb24gPSBfcmVmLkZyYWN0aW9uOwoKICAvKioKICAgKiBDb21wdXRlIHRoZSBzaWduIG9mIGEgdmFsdWUuIFRoZSBzaWduIG9mIGEgdmFsdWUgeCBpczoKICAgKgogICAqIC0gIDEgd2hlbiB4ID4gMAogICAqIC0gLTEgd2hlbiB4IDwgMAogICAqIC0gIDAgd2hlbiB4ID09IDAKICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLnNpZ24oeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5zaWduKDMuNSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEKICAgKiAgICBtYXRoLnNpZ24oLTQuMikgICAgICAgICAgICAgIC8vIHJldHVybnMgLTEKICAgKiAgICBtYXRoLnNpZ24oMCkgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMAogICAqCiAgICogICAgbWF0aC5zaWduKFszLCA1LCAtMiwgMCwgMl0pICAvLyByZXR1cm5zIFsxLCAxLCAtMSwgMCwgMV0KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgYWJzCiAgICoKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9IHgKICAgKiAgICAgICAgICAgIFRoZSBudW1iZXIgZm9yIHdoaWNoIHRvIGRldGVybWluZSB0aGUgc2lnbgogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH1lCiAgICogICAgICAgICAgICBUaGUgc2lnbiBvZiBgeGAKICAgKi8KICB2YXIgc2lnbiA9IHR5cGVkKHNpZ25fbmFtZSwgewogICAgbnVtYmVyOiBzaWduTnVtYmVyLAogICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7CiAgICAgIHJldHVybiB4LmltID09PSAwID8gY29tcGxleChzaWduTnVtYmVyKHgucmUpKSA6IHguc2lnbigpOwogICAgfSwKICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHsKICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKHguY21wKDApKTsKICAgIH0sCiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkgewogICAgICByZXR1cm4gbmV3IF9GcmFjdGlvbih4LnMsIDEpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBzaWduKDApID0gMAogICAgICByZXR1cm4gZGVlcE1hcCh4LCBzaWduLCB0cnVlKTsKICAgIH0sCiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHsKICAgICAgcmV0dXJuIHNpZ24oeC52YWx1ZSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIHNpZ247Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hcml0aG1ldGljL3NxcnQuanMKCgp2YXIgc3FydF9uYW1lID0gJ3NxcnQnOwp2YXIgc3FydF9kZXBlbmRlbmNpZXMgPSBbJ2NvbmZpZycsICd0eXBlZCcsICdDb21wbGV4J107CnZhciBjcmVhdGVTcXJ0ID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoc3FydF9uYW1lLCBzcXJ0X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDsKCiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBzcXVhcmUgcm9vdCBvZiBhIHZhbHVlLgogICAqCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguc3FydCh4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLnNxcnQoMjUpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgNQogICAqICAgIG1hdGguc3F1YXJlKDUpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAyNQogICAqICAgIG1hdGguc3FydCgtNCkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDJpCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIHNxdWFyZSwgbXVsdGlwbHksIGN1YmUsIGNicnQsIHNxcnRtCiAgICoKICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9IHgKICAgKiAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIHNxdWFyZSByb290LgogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9CiAgICogICAgICAgICAgICBSZXR1cm5zIHRoZSBzcXVhcmUgcm9vdCBvZiBgeGAKICAgKi8KICB2YXIgc3FydCA9IHR5cGVkKCdzcXJ0JywgewogICAgbnVtYmVyOiBfc3FydE51bWJlciwKICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkgewogICAgICByZXR1cm4geC5zcXJ0KCk7CiAgICB9LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkgewogICAgICBpZiAoIXguaXNOZWdhdGl2ZSgpIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkgewogICAgICAgIHJldHVybiB4LnNxcnQoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBuZWdhdGl2ZSB2YWx1ZSAtPiBkb3duZ3JhZGUgdG8gbnVtYmVyIHRvIGRvIGNvbXBsZXggdmFsdWUgY29tcHV0YXRpb24KICAgICAgICByZXR1cm4gX3NxcnROdW1iZXIoeC50b051bWJlcigpKTsKICAgICAgfQogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBzcXJ0KDApID0gMAogICAgICByZXR1cm4gZGVlcE1hcCh4LCBzcXJ0LCB0cnVlKTsKICAgIH0sCiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHsKICAgICAgLy8gU29tZWRheSB3aWxsIHdvcmsgZm9yIGNvbXBsZXggdW5pdHMgd2hlbiB0aGV5IGFyZSBpbXBsZW1lbnRlZAogICAgICByZXR1cm4geC5wb3coMC41KTsKICAgIH0KICB9KTsKICAvKioKICAgKiBDYWxjdWxhdGUgc3FydCBmb3IgYSBudW1iZXIKICAgKiBAcGFyYW0ge251bWJlcn0geAogICAqIEByZXR1cm5zIHtudW1iZXIgfCBDb21wbGV4fSBSZXR1cm5zIHRoZSBzcXVhcmUgcm9vdCBvZiB4CiAgICogQHByaXZhdGUKICAgKi8KCiAgZnVuY3Rpb24gX3NxcnROdW1iZXIoeCkgewogICAgaWYgKGlzTmFOKHgpKSB7CiAgICAgIHJldHVybiBOYU47CiAgICB9IGVsc2UgaWYgKHggPj0gMCB8fCBjb25maWcucHJlZGljdGFibGUpIHsKICAgICAgcmV0dXJuIE1hdGguc3FydCh4KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5zcXJ0KCk7CiAgICB9CiAgfQoKICByZXR1cm4gc3FydDsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3F1YXJlLmpzCgoKCnZhciBzcXVhcmVfbmFtZSA9ICdzcXVhcmUnOwp2YXIgc3F1YXJlX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnXTsKdmFyIGNyZWF0ZVNxdWFyZSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHNxdWFyZV9uYW1lLCBzcXVhcmVfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7CgogIC8qKgogICAqIENvbXB1dGUgdGhlIHNxdWFyZSBvZiBhIHZhbHVlLCBgeCAqIHhgLgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLnNxdWFyZSh4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLnNxdWFyZSgyKSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNAogICAqICAgIG1hdGguc3F1YXJlKDMpICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA5CiAgICogICAgbWF0aC5wb3coMywgMikgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDkKICAgKiAgICBtYXRoLm11bHRpcGx5KDMsIDMpICAgICAgLy8gcmV0dXJucyBudW1iZXIgOQogICAqCiAgICogICAgbWF0aC5zcXVhcmUoWzEsIDIsIDMsIDRdKSAgLy8gcmV0dXJucyBBcnJheSBbMSwgNCwgOSwgMTZdCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIG11bHRpcGx5LCBjdWJlLCBzcXJ0LCBwb3cKICAgKgogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH0geAogICAqICAgICAgICAgICAgTnVtYmVyIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIHNxdWFyZQogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH0KICAgKiAgICAgICAgICAgIFNxdWFyZWQgdmFsdWUKICAgKi8KICB2YXIgc3F1YXJlID0gdHlwZWQoc3F1YXJlX25hbWUsIHsKICAgIG51bWJlcjogc3F1YXJlTnVtYmVyLAogICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7CiAgICAgIHJldHVybiB4Lm11bCh4KTsKICAgIH0sCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiB4LnRpbWVzKHgpOwogICAgfSwKICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7CiAgICAgIHJldHVybiB4Lm11bCh4KTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2Ugc3F1YXJlKDApID0gMAogICAgICByZXR1cm4gZGVlcE1hcCh4LCBzcXVhcmUsIHRydWUpOwogICAgfSwKICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkgewogICAgICByZXR1cm4geC5wb3coMik7CiAgICB9CiAgfSk7CiAgcmV0dXJuIHNxdWFyZTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3VidHJhY3QuanMKCgoKCgoKCgp2YXIgc3VidHJhY3RfbmFtZSA9ICdzdWJ0cmFjdCc7CnZhciBzdWJ0cmFjdF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdhZGRTY2FsYXInLCAndW5hcnlNaW51cycsICdEZW5zZU1hdHJpeCddOwp2YXIgY3JlYXRlU3VidHJhY3QgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShzdWJ0cmFjdF9uYW1lLCBzdWJ0cmFjdF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhciwKICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsCiAgICAgIHVuYXJ5TWludXMgPSBfcmVmLnVuYXJ5TWludXMsCiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDsKICAvLyBUT0RPOiBzcGxpdCBmdW5jdGlvbiBzdWJ0cmFjdCBpbiB0d286IHN1YnRyYWN0IGFuZCBzdWJ0cmFjdFNjYWxhcgogIHZhciBhbGdvcml0aG0wMSA9IGNyZWF0ZUFsZ29yaXRobTAxKHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIHZhciBhbGdvcml0aG0wMyA9IGNyZWF0ZUFsZ29yaXRobTAzKHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIHZhciBhbGdvcml0aG0wNSA9IGNyZWF0ZUFsZ29yaXRobTA1KHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcgogIH0pOwogIHZhciBhbGdvcml0aG0xMCA9IGNyZWF0ZUFsZ29yaXRobTEwKHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeAogIH0pOwogIHZhciBhbGdvcml0aG0xMyA9IGNyZWF0ZUFsZ29yaXRobTEzKHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIHZhciBhbGdvcml0aG0xNCA9IGNyZWF0ZUFsZ29yaXRobTE0KHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIC8qKgogICAqIFN1YnRyYWN0IHR3byB2YWx1ZXMsIGB4IC0geWAuCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguc3VidHJhY3QoeCwgeSkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5zdWJ0cmFjdCg1LjMsIDIpICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzLjMKICAgKgogICAqICAgIGNvbnN0IGEgPSBtYXRoLmNvbXBsZXgoMiwgMykKICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KDQsIDEpCiAgICogICAgbWF0aC5zdWJ0cmFjdChhLCBiKSAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggLTIgKyAyaQogICAqCiAgICogICAgbWF0aC5zdWJ0cmFjdChbNSwgNywgNF0sIDQpICAvLyByZXR1cm5zIEFycmF5IFsxLCAzLCAwXQogICAqCiAgICogICAgY29uc3QgYyA9IG1hdGgudW5pdCgnMi4xIGttJykKICAgKiAgICBjb25zdCBkID0gbWF0aC51bml0KCc1MDBtJykKICAgKiAgICBtYXRoLnN1YnRyYWN0KGMsIGQpICAgICAgICAgIC8vIHJldHVybnMgVW5pdCAxLjYga20KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgYWRkCiAgICoKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHgKICAgKiAgICAgICAgICAgIEluaXRpYWwgdmFsdWUKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkKICAgKiAgICAgICAgICAgIFZhbHVlIHRvIHN1YnRyYWN0IGZyb20gYHhgCiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fQogICAqICAgICAgICAgICAgU3VidHJhY3Rpb24gb2YgYHhgIGFuZCBgeWAKICAgKi8KCiAgdmFyIHN1YnRyYWN0ID0gdHlwZWQoc3VidHJhY3RfbmFtZSwgewogICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHsKICAgICAgcmV0dXJuIHggLSB5OwogICAgfSwKICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoeCwgeSkgewogICAgICByZXR1cm4geC5zdWIoeSk7CiAgICB9LAogICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHsKICAgICAgcmV0dXJuIHgubWludXMoeSk7CiAgICB9LAogICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkgewogICAgICByZXR1cm4geC5zdWIoeSk7CiAgICB9LAogICAgJ1VuaXQsIFVuaXQnOiBmdW5jdGlvbiBVbml0VW5pdCh4LCB5KSB7CiAgICAgIGlmICh4LnZhbHVlID09PSBudWxsKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgeCBjb250YWlucyBhIHVuaXQgd2l0aCB1bmRlZmluZWQgdmFsdWUnKTsKICAgICAgfQoKICAgICAgaWYgKHkudmFsdWUgPT09IG51bGwpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciB5IGNvbnRhaW5zIGEgdW5pdCB3aXRoIHVuZGVmaW5lZCB2YWx1ZScpOwogICAgICB9CgogICAgICBpZiAoIXguZXF1YWxCYXNlKHkpKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbml0cyBkbyBub3QgbWF0Y2gnKTsKICAgICAgfQoKICAgICAgdmFyIHJlcyA9IHguY2xvbmUoKTsKICAgICAgcmVzLnZhbHVlID0gc3VidHJhY3QocmVzLnZhbHVlLCB5LnZhbHVlKTsKICAgICAgcmVzLmZpeFByZWZpeCA9IGZhbHNlOwogICAgICByZXR1cm4gcmVzOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIGNoZWNrRXF1YWxEaW1lbnNpb25zKHgsIHkpOwogICAgICByZXR1cm4gYWxnb3JpdGhtMDUoeCwgeSwgc3VidHJhY3QpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICBjaGVja0VxdWFsRGltZW5zaW9ucyh4LCB5KTsKICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHksIHgsIHN1YnRyYWN0LCB0cnVlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgY2hlY2tFcXVhbERpbWVuc2lvbnMoeCwgeSk7CiAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCBzdWJ0cmFjdCwgZmFsc2UpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgY2hlY2tFcXVhbERpbWVuc2lvbnMoeCwgeSk7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBzdWJ0cmFjdCk7CiAgICB9LAogICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBzdWJ0cmFjdChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpOwogICAgfSwKICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBzdWJ0cmFjdChtYXRyaXgoeCksIHkpOwogICAgfSwKICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBzdWJ0cmFjdCh4LCBtYXRyaXgoeSkpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh4LCB1bmFyeU1pbnVzKHkpLCBhZGRTY2FsYXIpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgc3VidHJhY3QpOwogICAgfSwKICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh5LCB4LCBzdWJ0cmFjdCwgdHJ1ZSk7CiAgICB9LAogICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBzdWJ0cmFjdCwgdHJ1ZSk7CiAgICB9LAogICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgc3VidHJhY3QsIGZhbHNlKS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgc3VidHJhY3QsIHRydWUpLnZhbHVlT2YoKTsKICAgIH0KICB9KTsKICByZXR1cm4gc3VidHJhY3Q7Cn0pOwovKioKICogQ2hlY2sgd2hldGhlciBtYXRyaXggeCBhbmQgeSBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBkaW1lbnNpb25zLgogKiBUaHJvd3MgYSBEaW1lbnNpb25FcnJvciB3aGVuIGRpbWVuc2lvbnMgYXJlIG5vdCBlcXVhbAogKiBAcGFyYW0ge01hdHJpeH0geAogKiBAcGFyYW0ge01hdHJpeH0geQogKi8KCmZ1bmN0aW9uIGNoZWNrRXF1YWxEaW1lbnNpb25zKHgsIHkpIHsKICB2YXIgeHNpemUgPSB4LnNpemUoKTsKICB2YXIgeXNpemUgPSB5LnNpemUoKTsKCiAgaWYgKHhzaXplLmxlbmd0aCAhPT0geXNpemUubGVuZ3RoKSB7CiAgICB0aHJvdyBuZXcgRGltZW5zaW9uRXJyb3JbImEiIC8qIERpbWVuc2lvbkVycm9yICovXSh4c2l6ZS5sZW5ndGgsIHlzaXplLmxlbmd0aCk7CiAgfQp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2FyaXRobWV0aWMveGdjZC5qcwoKCnZhciB4Z2NkX25hbWUgPSAneGdjZCc7CnZhciB4Z2NkX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdHJpeCcsICdCaWdOdW1iZXInXTsKdmFyIGNyZWF0ZVhnY2QgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKSh4Z2NkX25hbWUsIHhnY2RfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCwKICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7CgogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgZXh0ZW5kZWQgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IgZm9yIHR3byB2YWx1ZXMuCiAgICogU2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V4dGVuZGVkX0V1Y2xpZGVhbl9hbGdvcml0aG0uCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLnhnY2QoYSwgYikKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC54Z2NkKDgsIDEyKSAgICAgICAgICAgICAvLyByZXR1cm5zIFs0LCAtMSwgMV0KICAgKiAgICBtYXRoLmdjZCg4LCAxMikgICAgICAgICAgICAgIC8vIHJldHVybnMgNAogICAqICAgIG1hdGgueGdjZCgzNjE2MywgMjExOTkpICAgICAgLy8gcmV0dXJucyBbMTI0NywgLTcsIDEyXQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBnY2QsIGxjbQogICAqCiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IGEgIEFuIGludGVnZXIgbnVtYmVyCiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IGIgIEFuIGludGVnZXIgbnVtYmVyCiAgICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgICAgICBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgMyBpbnRlZ2VycyBgW2RpdiwgbSwgbl1gCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBgZGl2ID0gZ2NkKGEsIGIpYCBhbmQgYGEqbSArIGIqbiA9IGRpdmAKICAgKi8KICByZXR1cm4gdHlwZWQoeGdjZF9uYW1lLCB7CiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoYSwgYikgewogICAgICB2YXIgcmVzID0geGdjZE51bWJlcihhLCBiKTsKICAgICAgcmV0dXJuIGNvbmZpZy5tYXRyaXggPT09ICdBcnJheScgPyByZXMgOiBtYXRyaXgocmVzKTsKICAgIH0sCiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfeGdjZEJpZ051bWJlciAvLyBUT0RPOiBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgRnJhY3Rpb24KCiAgfSk7CiAgLyoqCiAgICogQ2FsY3VsYXRlIHhnY2QgZm9yIHR3byBCaWdOdW1iZXJzCiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGEKICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYgogICAqIEByZXR1cm4ge0JpZ051bWJlcltdfSByZXN1bHQKICAgKiBAcHJpdmF0ZQogICAqLwoKICBmdW5jdGlvbiBfeGdjZEJpZ051bWJlcihhLCBiKSB7CiAgICAvLyBzb3VyY2U6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V4dGVuZGVkX0V1Y2xpZGVhbl9hbGdvcml0aG0KICAgIHZhciAvLyB1c2VkIHRvIHN3YXAgdHdvIHZhcmlhYmxlcwogICAgdDsKICAgIHZhciAvLyBxdW90aWVudAogICAgcTsKICAgIHZhciAvLyByZW1haW5kZXIKICAgIHI7CiAgICB2YXIgemVybyA9IG5ldyBCaWdOdW1iZXIoMCk7CiAgICB2YXIgb25lID0gbmV3IEJpZ051bWJlcigxKTsKICAgIHZhciB4ID0gemVybzsKICAgIHZhciBsYXN0eCA9IG9uZTsKICAgIHZhciB5ID0gb25lOwogICAgdmFyIGxhc3R5ID0gemVybzsKCiAgICBpZiAoIWEuaXNJbnQoKSB8fCAhYi5pc0ludCgpKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiB4Z2NkIG11c3QgYmUgaW50ZWdlciBudW1iZXJzJyk7CiAgICB9CgogICAgd2hpbGUgKCFiLmlzWmVybygpKSB7CiAgICAgIHEgPSBhLmRpdihiKS5mbG9vcigpOwogICAgICByID0gYS5tb2QoYik7CiAgICAgIHQgPSB4OwogICAgICB4ID0gbGFzdHgubWludXMocS50aW1lcyh4KSk7CiAgICAgIGxhc3R4ID0gdDsKICAgICAgdCA9IHk7CiAgICAgIHkgPSBsYXN0eS5taW51cyhxLnRpbWVzKHkpKTsKICAgICAgbGFzdHkgPSB0OwogICAgICBhID0gYjsKICAgICAgYiA9IHI7CiAgICB9CgogICAgdmFyIHJlczsKCiAgICBpZiAoYS5sdCh6ZXJvKSkgewogICAgICByZXMgPSBbYS5uZWcoKSwgbGFzdHgubmVnKCksIGxhc3R5Lm5lZygpXTsKICAgIH0gZWxzZSB7CiAgICAgIHJlcyA9IFthLCAhYS5pc1plcm8oKSA/IGxhc3R4IDogMCwgbGFzdHldOwogICAgfQoKICAgIHJldHVybiBjb25maWcubWF0cml4ID09PSAnQXJyYXknID8gcmVzIDogbWF0cml4KHJlcyk7CiAgfQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDkuanMKCgp2YXIgYWxnb3JpdGhtMDlfbmFtZSA9ICdhbGdvcml0aG0wOSc7CnZhciBhbGdvcml0aG0wOV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJ107CnZhciBjcmVhdGVBbGdvcml0aG0wOSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGFsZ29yaXRobTA5X25hbWUsIGFsZ29yaXRobTA5X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7CgogIC8qKgogICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IEEgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoQWlqLCBCaWopLgogICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTlpBIHRpbWVzLCBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50cyBpbiBBLgogICAqCiAgICoKICAgKiAgICAgICAgICDilIwgIGYoQWlqLCBCaWopICA7IEEoaSxqKSAhPT0gMAogICAqIEMoaSxqKSA9IOKUpAogICAqICAgICAgICAgIOKUlCAgMCAgICAgICAgICAgIDsgb3RoZXJ3aXNlCiAgICoKICAgKgogICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEEpCiAgICogQHBhcmFtIHtNYXRyaXh9ICAgYiAgICAgICAgICAgICAgICAgVGhlIFNwYXJzZU1hdHJpeCBpbnN0YW5jZSAoQikKICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosQmlqKSBvcGVyYXRpb24gdG8gaW52b2tlCiAgICoKICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBTcGFyc2VNYXRyaXggKEMpCiAgICoKICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjIwMjk0CiAgICovCiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTA5KGEsIGIsIGNhbGxiYWNrKSB7CiAgICAvLyBzcGFyc2UgbWF0cml4IGFycmF5cwogICAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7CiAgICB2YXIgYWluZGV4ID0gYS5faW5kZXg7CiAgICB2YXIgYXB0ciA9IGEuX3B0cjsKICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7CiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzCgogICAgdmFyIGJ2YWx1ZXMgPSBiLl92YWx1ZXM7CiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7CiAgICB2YXIgYnB0ciA9IGIuX3B0cjsKICAgIHZhciBic2l6ZSA9IGIuX3NpemU7CiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnMKCiAgICBpZiAoYXNpemUubGVuZ3RoICE9PSBic2l6ZS5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IERpbWVuc2lvbkVycm9yWyJhIiAvKiBEaW1lbnNpb25FcnJvciAqL10oYXNpemUubGVuZ3RoLCBic2l6ZS5sZW5ndGgpOwogICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1ucwoKCiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTsKICAgIH0gLy8gcm93cyAmIGNvbHVtbnMKCgogICAgdmFyIHJvd3MgPSBhc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlCgogICAgdmFyIGR0OyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlCgogICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWUKCiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2UKCiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzCgogICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7CiAgICAgIC8vIGRhdGF0eXBlCiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdCkKCiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGUKCiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2sKCiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pOwogICAgfSAvLyByZXN1bHQgYXJyYXlzCgoKICAgIHZhciBjdmFsdWVzID0gYXZhbHVlcyAmJiBidmFsdWVzID8gW10gOiB1bmRlZmluZWQ7CiAgICB2YXIgY2luZGV4ID0gW107CiAgICB2YXIgY3B0ciA9IFtdOyAvLyB3b3Jrc3BhY2VzCgogICAgdmFyIHggPSBjdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7IC8vIG1hcmtzIGluZGljYXRpbmcgd2UgaGF2ZSBhIHZhbHVlIGluIHggZm9yIGEgZ2l2ZW4gY29sdW1uCgogICAgdmFyIHcgPSBbXTsgLy8gdmFycwoKICAgIHZhciBpLCBqLCBrLCBrMCwgazE7IC8vIGxvb3AgY29sdW1ucwoKICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHsKICAgICAgLy8gdXBkYXRlIGNwdHIKICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIGNvbHVtbiBtYXJrCgogICAgICB2YXIgbWFyayA9IGogKyAxOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzCgogICAgICBpZiAoeCkgewogICAgICAgIC8vIGxvb3AgQig6LGopCiAgICAgICAgZm9yIChrMCA9IGJwdHJbal0sIGsxID0gYnB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHsKICAgICAgICAgIC8vIHJvdwogICAgICAgICAgaSA9IGJpbmRleFtrXTsgLy8gdXBkYXRlIHdvcmtzcGFjZQoKICAgICAgICAgIHdbaV0gPSBtYXJrOwogICAgICAgICAgeFtpXSA9IGJ2YWx1ZXNba107CiAgICAgICAgfQogICAgICB9IC8vIGxvb3AgQSg6LGopCgoKICAgICAgZm9yIChrMCA9IGFwdHJbal0sIGsxID0gYXB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHsKICAgICAgICAvLyByb3cKICAgICAgICBpID0gYWluZGV4W2tdOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzCgogICAgICAgIGlmICh4KSB7CiAgICAgICAgICAvLyBiIHZhbHVlIEAgaSxqCiAgICAgICAgICB2YXIgdmIgPSB3W2ldID09PSBtYXJrID8geFtpXSA6IHplcm87IC8vIGludm9rZSBmCgogICAgICAgICAgdmFyIHZjID0gY2YoYXZhbHVlc1trXSwgdmIpOyAvLyBjaGVjayB6ZXJvIHZhbHVlCgogICAgICAgICAgaWYgKCFlcSh2YywgemVybykpIHsKICAgICAgICAgICAgLy8gcHVzaCBpbmRleAogICAgICAgICAgICBjaW5kZXgucHVzaChpKTsgLy8gcHVzaCB2YWx1ZQoKICAgICAgICAgICAgY3ZhbHVlcy5wdXNoKHZjKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gcHVzaCBpbmRleAogICAgICAgICAgY2luZGV4LnB1c2goaSk7CiAgICAgICAgfQogICAgICB9CiAgICB9IC8vIHVwZGF0ZSBjcHRyCgoKICAgIGNwdHJbY29sdW1uc10gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeAoKICAgIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7CiAgICAgIHZhbHVlczogY3ZhbHVlcywKICAgICAgaW5kZXg6IGNpbmRleCwKICAgICAgcHRyOiBjcHRyLAogICAgICBzaXplOiBbcm93cywgY29sdW1uc10sCiAgICAgIGRhdGF0eXBlOiBkdAogICAgfSk7CiAgfTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90TXVsdGlwbHkuanMKCgoKCgoKdmFyIGRvdE11bHRpcGx5X25hbWUgPSAnZG90TXVsdGlwbHknOwp2YXIgZG90TXVsdGlwbHlfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInXTsKdmFyIGNyZWF0ZURvdE11bHRpcGx5ID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoZG90TXVsdGlwbHlfbmFtZSwgZG90TXVsdGlwbHlfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LAogICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsCiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcjsKICB2YXIgYWxnb3JpdGhtMDIgPSBjcmVhdGVBbGdvcml0aG0wMih7CiAgICB0eXBlZDogdHlwZWQsCiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIKICB9KTsKICB2YXIgYWxnb3JpdGhtMDkgPSBjcmVhdGVBbGdvcml0aG0wOSh7CiAgICB0eXBlZDogdHlwZWQsCiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIKICB9KTsKICB2YXIgYWxnb3JpdGhtMTEgPSBjcmVhdGVBbGdvcml0aG0xMSh7CiAgICB0eXBlZDogdHlwZWQsCiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIKICB9KTsKICB2YXIgYWxnb3JpdGhtMTMgPSBjcmVhdGVBbGdvcml0aG0xMyh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICB2YXIgYWxnb3JpdGhtMTQgPSBjcmVhdGVBbGdvcml0aG0xNCh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICAvKioKICAgKiBNdWx0aXBseSB0d28gbWF0cmljZXMgZWxlbWVudCB3aXNlLiBUaGUgZnVuY3Rpb24gYWNjZXB0cyBib3RoIG1hdHJpY2VzIGFuZAogICAqIHNjYWxhciB2YWx1ZXMuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmRvdE11bHRpcGx5KHgsIHkpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguZG90TXVsdGlwbHkoMiwgNCkgLy8gcmV0dXJucyA4CiAgICoKICAgKiAgICBhID0gW1s5LCA1XSwgWzYsIDFdXQogICAqICAgIGIgPSBbWzMsIDJdLCBbNSwgMl1dCiAgICoKICAgKiAgICBtYXRoLmRvdE11bHRpcGx5KGEsIGIpIC8vIHJldHVybnMgW1syNywgMTBdLCBbMzAsIDJdXQogICAqICAgIG1hdGgubXVsdGlwbHkoYSwgYikgICAgLy8gcmV0dXJucyBbWzUyLCAyOF0sIFsyMywgMTRdXQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBtdWx0aXBseSwgZGl2aWRlLCBkb3REaXZpZGUKICAgKgogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBMZWZ0IGhhbmQgdmFsdWUKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgUmlnaHQgaGFuZCB2YWx1ZQogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0gICAgICAgICAgICAgICAgICAgIE11bHRpcGxpY2F0aW9uIG9mIGB4YCBhbmQgYHlgCiAgICovCgogIHZhciBkb3RNdWx0aXBseSA9IHR5cGVkKGRvdE11bHRpcGx5X25hbWUsIHsKICAgICdhbnksIGFueSc6IG11bHRpcGx5U2NhbGFyLAogICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTA5KHgsIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSk7CiAgICB9LAogICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCBtdWx0aXBseVNjYWxhciwgdHJ1ZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wMih4LCB5LCBtdWx0aXBseVNjYWxhciwgZmFsc2UpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIG11bHRpcGx5U2NhbGFyKTsKICAgIH0sCiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGRvdE11bHRpcGx5KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGRvdE11bHRpcGx5KG1hdHJpeCh4KSwgeSk7CiAgICB9LAogICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGRvdE11bHRpcGx5KHgsIG1hdHJpeCh5KSk7CiAgICB9LAogICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBtdWx0aXBseVNjYWxhciwgZmFsc2UpOwogICAgfSwKICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh5LCB4LCBtdWx0aXBseVNjYWxhciwgdHJ1ZSk7CiAgICB9LAogICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBtdWx0aXBseVNjYWxhciwgdHJ1ZSk7CiAgICB9LAogICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgbXVsdGlwbHlTY2FsYXIsIHRydWUpLnZhbHVlT2YoKTsKICAgIH0KICB9KTsKICByZXR1cm4gZG90TXVsdGlwbHk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy91dGlscy9iaWdudW1iZXIvYml0d2lzZS5qcwovKioKICogQml0d2lzZSBhbmQgZm9yIEJpZ251bWJlcnMKICoKICogU3BlY2lhbCBDYXNlczoKICogICBOICYgIG4gPSAgTgogKiAgIG4gJiAgMCA9ICAwCiAqICAgbiAmIC0xID0gIG4KICogICBuICYgIG4gPSAgbgogKiAgIEkgJiAgSSA9ICBJCiAqICAtSSAmIC1JID0gLUkKICogICBJICYgLUkgPSAgMAogKiAgIEkgJiAgbiA9ICBuCiAqICAgSSAmIC1uID0gIEkKICogIC1JICYgIG4gPSAgMAogKiAgLUkgJiAtbiA9IC1JCiAqCiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB4CiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB5CiAqIEByZXR1cm4ge0JpZ051bWJlcn0gUmVzdWx0IG9mIGB4YCAmIGB5YCwgaXMgZnVsbHkgcHJlY2lzZQogKiBAcHJpdmF0ZQogKi8KZnVuY3Rpb24gYml0QW5kQmlnTnVtYmVyKHgsIHkpIHsKICBpZiAoeC5pc0Zpbml0ZSgpICYmICF4LmlzSW50ZWdlcigpIHx8IHkuaXNGaW5pdGUoKSAmJiAheS5pc0ludGVnZXIoKSkgewogICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRBbmQnKTsKICB9CgogIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yOwoKICBpZiAoeC5pc05hTigpIHx8IHkuaXNOYU4oKSkgewogICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTsKICB9CgogIGlmICh4LmlzWmVybygpIHx8IHkuZXEoLTEpIHx8IHguZXEoeSkpIHsKICAgIHJldHVybiB4OwogIH0KCiAgaWYgKHkuaXNaZXJvKCkgfHwgeC5lcSgtMSkpIHsKICAgIHJldHVybiB5OwogIH0KCiAgaWYgKCF4LmlzRmluaXRlKCkgfHwgIXkuaXNGaW5pdGUoKSkgewogICAgaWYgKCF4LmlzRmluaXRlKCkgJiYgIXkuaXNGaW5pdGUoKSkgewogICAgICBpZiAoeC5pc05lZ2F0aXZlKCkgPT09IHkuaXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgcmV0dXJuIHg7CiAgICAgIH0KCiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKDApOwogICAgfQoKICAgIGlmICgheC5pc0Zpbml0ZSgpKSB7CiAgICAgIGlmICh5LmlzTmVnYXRpdmUoKSkgewogICAgICAgIHJldHVybiB4OwogICAgICB9CgogICAgICBpZiAoeC5pc05lZ2F0aXZlKCkpIHsKICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcigwKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHk7CiAgICB9CgogICAgaWYgKCF5LmlzRmluaXRlKCkpIHsKICAgICAgaWYgKHguaXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgcmV0dXJuIHk7CiAgICAgIH0KCiAgICAgIGlmICh5LmlzTmVnYXRpdmUoKSkgewogICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKDApOwogICAgICB9CgogICAgICByZXR1cm4geDsKICAgIH0KICB9CgogIHJldHVybiBiaXR3aXNlKHgsIHksIGZ1bmN0aW9uIChhLCBiKSB7CiAgICByZXR1cm4gYSAmIGI7CiAgfSk7Cn0KLyoqCiAqIEJpdHdpc2Ugbm90CiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB4CiAqIEByZXR1cm4ge0JpZ051bWJlcn0gUmVzdWx0IG9mIH5geGAsIGZ1bGx5IHByZWNpc2UKICoKICovCgpmdW5jdGlvbiBiaXROb3RCaWdOdW1iZXIoeCkgewogIGlmICh4LmlzRmluaXRlKCkgJiYgIXguaXNJbnRlZ2VyKCkpIHsKICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlciBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXROb3QnKTsKICB9CgogIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yOwogIHZhciBwcmV2UHJlYyA9IEJpZ051bWJlci5wcmVjaXNpb247CiAgQmlnTnVtYmVyLmNvbmZpZyh7CiAgICBwcmVjaXNpb246IDFFOQogIH0pOwogIHZhciByZXN1bHQgPSB4LnBsdXMobmV3IEJpZ051bWJlcigxKSk7CiAgcmVzdWx0LnMgPSAtcmVzdWx0LnMgfHwgbnVsbDsKICBCaWdOdW1iZXIuY29uZmlnKHsKICAgIHByZWNpc2lvbjogcHJldlByZWMKICB9KTsKICByZXR1cm4gcmVzdWx0Owp9Ci8qKgogKiBCaXR3aXNlIE9SIGZvciBCaWdOdW1iZXJzCiAqCiAqIFNwZWNpYWwgQ2FzZXM6CiAqICAgTiB8ICBuID0gIE4KICogICBuIHwgIDAgPSAgbgogKiAgIG4gfCAtMSA9IC0xCiAqICAgbiB8ICBuID0gIG4KICogICBJIHwgIEkgPSAgSQogKiAgLUkgfCAtSSA9IC1JCiAqICAgSSB8IC1uID0gLTEKICogICBJIHwgLUkgPSAtMQogKiAgIEkgfCAgbiA9ICBJCiAqICAtSSB8ICBuID0gLUkKICogIC1JIHwgLW4gPSAtbgogKgogKiBAcGFyYW0ge0JpZ051bWJlcn0geAogKiBAcGFyYW0ge0JpZ051bWJlcn0geQogKiBAcmV0dXJuIHtCaWdOdW1iZXJ9IFJlc3VsdCBvZiBgeGAgfCBgeWAsIGZ1bGx5IHByZWNpc2UKICovCgpmdW5jdGlvbiBiaXRPckJpZ051bWJlcih4LCB5KSB7CiAgaWYgKHguaXNGaW5pdGUoKSAmJiAheC5pc0ludGVnZXIoKSB8fCB5LmlzRmluaXRlKCkgJiYgIXkuaXNJbnRlZ2VyKCkpIHsKICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gYml0T3InKTsKICB9CgogIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yOwoKICBpZiAoeC5pc05hTigpIHx8IHkuaXNOYU4oKSkgewogICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTsKICB9CgogIHZhciBuZWdPbmUgPSBuZXcgQmlnTnVtYmVyKC0xKTsKCiAgaWYgKHguaXNaZXJvKCkgfHwgeS5lcShuZWdPbmUpIHx8IHguZXEoeSkpIHsKICAgIHJldHVybiB5OwogIH0KCiAgaWYgKHkuaXNaZXJvKCkgfHwgeC5lcShuZWdPbmUpKSB7CiAgICByZXR1cm4geDsKICB9CgogIGlmICgheC5pc0Zpbml0ZSgpIHx8ICF5LmlzRmluaXRlKCkpIHsKICAgIGlmICgheC5pc0Zpbml0ZSgpICYmICF4LmlzTmVnYXRpdmUoKSAmJiB5LmlzTmVnYXRpdmUoKSB8fCB4LmlzTmVnYXRpdmUoKSAmJiAheS5pc05lZ2F0aXZlKCkgJiYgIXkuaXNGaW5pdGUoKSkgewogICAgICByZXR1cm4gbmVnT25lOwogICAgfQoKICAgIGlmICh4LmlzTmVnYXRpdmUoKSAmJiB5LmlzTmVnYXRpdmUoKSkgewogICAgICByZXR1cm4geC5pc0Zpbml0ZSgpID8geCA6IHk7CiAgICB9CgogICAgcmV0dXJuIHguaXNGaW5pdGUoKSA/IHkgOiB4OwogIH0KCiAgcmV0dXJuIGJpdHdpc2UoeCwgeSwgZnVuY3Rpb24gKGEsIGIpIHsKICAgIHJldHVybiBhIHwgYjsKICB9KTsKfQovKioKICogQXBwbGllcyBiaXR3aXNlIGZ1bmN0aW9uIHRvIG51bWJlcnMKICogQHBhcmFtIHtCaWdOdW1iZXJ9IHgKICogQHBhcmFtIHtCaWdOdW1iZXJ9IHkKICogQHBhcmFtIHtmdW5jdGlvbiAoYSwgYil9IGZ1bmMKICogQHJldHVybiB7QmlnTnVtYmVyfQogKi8KCmZ1bmN0aW9uIGJpdHdpc2UoeCwgeSwgZnVuYykgewogIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yOwogIHZhciB4Qml0cywgeUJpdHM7CiAgdmFyIHhTaWduID0gKyh4LnMgPCAwKTsKICB2YXIgeVNpZ24gPSArKHkucyA8IDApOwoKICBpZiAoeFNpZ24pIHsKICAgIHhCaXRzID0gZGVjQ29lZmZpY2llbnRUb0JpbmFyeVN0cmluZyhiaXROb3RCaWdOdW1iZXIoeCkpOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeEJpdHMubGVuZ3RoOyArK2kpIHsKICAgICAgeEJpdHNbaV0gXj0gMTsKICAgIH0KICB9IGVsc2UgewogICAgeEJpdHMgPSBkZWNDb2VmZmljaWVudFRvQmluYXJ5U3RyaW5nKHgpOwogIH0KCiAgaWYgKHlTaWduKSB7CiAgICB5Qml0cyA9IGRlY0NvZWZmaWNpZW50VG9CaW5hcnlTdHJpbmcoYml0Tm90QmlnTnVtYmVyKHkpKTsKCiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgeUJpdHMubGVuZ3RoOyArK19pKSB7CiAgICAgIHlCaXRzW19pXSBePSAxOwogICAgfQogIH0gZWxzZSB7CiAgICB5Qml0cyA9IGRlY0NvZWZmaWNpZW50VG9CaW5hcnlTdHJpbmcoeSk7CiAgfQoKICB2YXIgbWluQml0cywgbWF4Qml0cywgbWluU2lnbjsKCiAgaWYgKHhCaXRzLmxlbmd0aCA8PSB5Qml0cy5sZW5ndGgpIHsKICAgIG1pbkJpdHMgPSB4Qml0czsKICAgIG1heEJpdHMgPSB5Qml0czsKICAgIG1pblNpZ24gPSB4U2lnbjsKICB9IGVsc2UgewogICAgbWluQml0cyA9IHlCaXRzOwogICAgbWF4Qml0cyA9IHhCaXRzOwogICAgbWluU2lnbiA9IHlTaWduOwogIH0KCiAgdmFyIHNob3J0TGVuID0gbWluQml0cy5sZW5ndGg7CiAgdmFyIGxvbmdMZW4gPSBtYXhCaXRzLmxlbmd0aDsKICB2YXIgZXhwRnVuY1ZhbCA9IGZ1bmMoeFNpZ24sIHlTaWduKSBeIDE7CiAgdmFyIG91dFZhbCA9IG5ldyBCaWdOdW1iZXIoZXhwRnVuY1ZhbCBeIDEpOwogIHZhciB0d29Qb3dlciA9IG5ldyBCaWdOdW1iZXIoMSk7CiAgdmFyIHR3byA9IG5ldyBCaWdOdW1iZXIoMik7CiAgdmFyIHByZXZQcmVjID0gQmlnTnVtYmVyLnByZWNpc2lvbjsKICBCaWdOdW1iZXIuY29uZmlnKHsKICAgIHByZWNpc2lvbjogMUU5CiAgfSk7CgogIHdoaWxlIChzaG9ydExlbiA+IDApIHsKICAgIGlmIChmdW5jKG1pbkJpdHNbLS1zaG9ydExlbl0sIG1heEJpdHNbLS1sb25nTGVuXSkgPT09IGV4cEZ1bmNWYWwpIHsKICAgICAgb3V0VmFsID0gb3V0VmFsLnBsdXModHdvUG93ZXIpOwogICAgfQoKICAgIHR3b1Bvd2VyID0gdHdvUG93ZXIudGltZXModHdvKTsKICB9CgogIHdoaWxlIChsb25nTGVuID4gMCkgewogICAgaWYgKGZ1bmMobWluU2lnbiwgbWF4Qml0c1stLWxvbmdMZW5dKSA9PT0gZXhwRnVuY1ZhbCkgewogICAgICBvdXRWYWwgPSBvdXRWYWwucGx1cyh0d29Qb3dlcik7CiAgICB9CgogICAgdHdvUG93ZXIgPSB0d29Qb3dlci50aW1lcyh0d28pOwogIH0KCiAgQmlnTnVtYmVyLmNvbmZpZyh7CiAgICBwcmVjaXNpb246IHByZXZQcmVjCiAgfSk7CgogIGlmIChleHBGdW5jVmFsID09PSAwKSB7CiAgICBvdXRWYWwucyA9IC1vdXRWYWwuczsKICB9CgogIHJldHVybiBvdXRWYWw7Cn0KLyogRXh0cmFjdGVkIGZyb20gZGVjaW1hbC5qcywgYW5kIGVkaXRlZCB0byBzcGVjaWFsaXplLiAqLwoKZnVuY3Rpb24gZGVjQ29lZmZpY2llbnRUb0JpbmFyeVN0cmluZyh4KSB7CiAgLy8gQ29udmVydCB0byBzdHJpbmcKICB2YXIgYSA9IHguZDsgLy8gYXJyYXkgd2l0aCBkaWdpdHMKCiAgdmFyIHIgPSBhWzBdICsgJyc7CgogIGZvciAodmFyIGkgPSAxOyBpIDwgYS5sZW5ndGg7ICsraSkgewogICAgdmFyIHMgPSBhW2ldICsgJyc7CgogICAgZm9yICh2YXIgeiA9IDcgLSBzLmxlbmd0aDsgei0tOykgewogICAgICBzID0gJzAnICsgczsKICAgIH0KCiAgICByICs9IHM7CiAgfQoKICB2YXIgaiA9IHIubGVuZ3RoOwoKICB3aGlsZSAoci5jaGFyQXQoaikgPT09ICcwJykgewogICAgai0tOwogIH0KCiAgdmFyIHhlID0geC5lOwogIHZhciBzdHIgPSByLnNsaWNlKDAsIGogKyAxIHx8IDEpOwogIHZhciBzdHJMID0gc3RyLmxlbmd0aDsKCiAgaWYgKHhlID4gMCkgewogICAgaWYgKCsreGUgPiBzdHJMKSB7CiAgICAgIC8vIEFwcGVuZCB6ZXJvcy4KICAgICAgeGUgLT0gc3RyTDsKCiAgICAgIHdoaWxlICh4ZS0tKSB7CiAgICAgICAgc3RyICs9ICcwJzsKICAgICAgfQogICAgfSBlbHNlIGlmICh4ZSA8IHN0ckwpIHsKICAgICAgc3RyID0gc3RyLnNsaWNlKDAsIHhlKSArICcuJyArIHN0ci5zbGljZSh4ZSk7CiAgICB9CiAgfSAvLyBDb252ZXJ0IGZyb20gYmFzZSAxMCAoZGVjaW1hbCkgdG8gYmFzZSAyCgoKICB2YXIgYXJyID0gWzBdOwoKICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBzdHIubGVuZ3RoOykgewogICAgdmFyIGFyckwgPSBhcnIubGVuZ3RoOwoKICAgIHdoaWxlIChhcnJMLS0pIHsKICAgICAgYXJyW2FyckxdICo9IDEwOwogICAgfQoKICAgIGFyclswXSArPSBwYXJzZUludChzdHIuY2hhckF0KF9pMisrKSk7IC8vIGNvbnZlcnQgdG8gaW50CgogICAgZm9yICh2YXIgX2ogPSAwOyBfaiA8IGFyci5sZW5ndGg7ICsrX2opIHsKICAgICAgaWYgKGFycltfal0gPiAxKSB7CiAgICAgICAgaWYgKGFycltfaiArIDFdID09PSBudWxsIHx8IGFycltfaiArIDFdID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgIGFycltfaiArIDFdID0gMDsKICAgICAgICB9CgogICAgICAgIGFycltfaiArIDFdICs9IGFycltfal0gPj4gMTsKICAgICAgICBhcnJbX2pdICY9IDE7CiAgICAgIH0KICAgIH0KICB9CgogIHJldHVybiBhcnIucmV2ZXJzZSgpOwp9Ci8qKgogKiBCaXR3aXNlIFhPUiBmb3IgQmlnTnVtYmVycwogKgogKiBTcGVjaWFsIENhc2VzOgogKiAgIE4gXiAgbiA9ICBOCiAqICAgbiBeICAwID0gIG4KICogICBuIF4gIG4gPSAgMAogKiAgIG4gXiAtMSA9IH5uCiAqICAgSSBeICBuID0gIEkKICogICBJIF4gLW4gPSAtSQogKiAgIEkgXiAtSSA9IC0xCiAqICAtSSBeICBuID0gLUkKICogIC1JIF4gLW4gPSAgSQogKgogKiBAcGFyYW0ge0JpZ051bWJlcn0geAogKiBAcGFyYW0ge0JpZ051bWJlcn0geQogKiBAcmV0dXJuIHtCaWdOdW1iZXJ9IFJlc3VsdCBvZiBgeGAgXiBgeWAsIGZ1bGx5IHByZWNpc2UKICoKICovCgoKZnVuY3Rpb24gYml0d2lzZV9iaXRYb3IoeCwgeSkgewogIGlmICh4LmlzRmluaXRlKCkgJiYgIXguaXNJbnRlZ2VyKCkgfHwgeS5pc0Zpbml0ZSgpICYmICF5LmlzSW50ZWdlcigpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGJpdFhvcicpOwogIH0KCiAgdmFyIEJpZ051bWJlciA9IHguY29uc3RydWN0b3I7CgogIGlmICh4LmlzTmFOKCkgfHwgeS5pc05hTigpKSB7CiAgICByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pOwogIH0KCiAgaWYgKHguaXNaZXJvKCkpIHsKICAgIHJldHVybiB5OwogIH0KCiAgaWYgKHkuaXNaZXJvKCkpIHsKICAgIHJldHVybiB4OwogIH0KCiAgaWYgKHguZXEoeSkpIHsKICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKDApOwogIH0KCiAgdmFyIG5lZ09uZSA9IG5ldyBCaWdOdW1iZXIoLTEpOwoKICBpZiAoeC5lcShuZWdPbmUpKSB7CiAgICByZXR1cm4gYml0Tm90QmlnTnVtYmVyKHkpOwogIH0KCiAgaWYgKHkuZXEobmVnT25lKSkgewogICAgcmV0dXJuIGJpdE5vdEJpZ051bWJlcih4KTsKICB9CgogIGlmICgheC5pc0Zpbml0ZSgpIHx8ICF5LmlzRmluaXRlKCkpIHsKICAgIGlmICgheC5pc0Zpbml0ZSgpICYmICF5LmlzRmluaXRlKCkpIHsKICAgICAgcmV0dXJuIG5lZ09uZTsKICAgIH0KCiAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4LmlzTmVnYXRpdmUoKSA9PT0geS5pc05lZ2F0aXZlKCkgPyBJbmZpbml0eSA6IC1JbmZpbml0eSk7CiAgfQoKICByZXR1cm4gYml0d2lzZSh4LCB5LCBmdW5jdGlvbiAoYSwgYikgewogICAgcmV0dXJuIGEgXiBiOwogIH0pOwp9Ci8qKgogKiBCaXR3aXNlIGxlZnQgc2hpZnQKICoKICogU3BlY2lhbCBDYXNlczoKICogIG4gPDwgLW4gPSBOCiAqICBuIDw8ICBOID0gTgogKiAgTiA8PCAgbiA9IE4KICogIG4gPDwgIDAgPSBuCiAqICAwIDw8ICBuID0gMAogKiAgSSA8PCAgSSA9IE4KICogIEkgPDwgIG4gPSBJCiAqICBuIDw8ICBJID0gSQogKgogKiBAcGFyYW0ge0JpZ051bWJlcn0geAogKiBAcGFyYW0ge0JpZ051bWJlcn0geQogKiBAcmV0dXJuIHtCaWdOdW1iZXJ9IFJlc3VsdCBvZiBgeGAgPDwgYHlgCiAqCiAqLwoKZnVuY3Rpb24gbGVmdFNoaWZ0QmlnTnVtYmVyKHgsIHkpIHsKICBpZiAoeC5pc0Zpbml0ZSgpICYmICF4LmlzSW50ZWdlcigpIHx8IHkuaXNGaW5pdGUoKSAmJiAheS5pc0ludGVnZXIoKSkgewogICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBsZWZ0U2hpZnQnKTsKICB9CgogIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yOwoKICBpZiAoeC5pc05hTigpIHx8IHkuaXNOYU4oKSB8fCB5LmlzTmVnYXRpdmUoKSAmJiAheS5pc1plcm8oKSkgewogICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTsKICB9CgogIGlmICh4LmlzWmVybygpIHx8IHkuaXNaZXJvKCkpIHsKICAgIHJldHVybiB4OwogIH0KCiAgaWYgKCF4LmlzRmluaXRlKCkgJiYgIXkuaXNGaW5pdGUoKSkgewogICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTsKICB9IC8vIE1hdGgucG93KDIsIHkpIGlzIGZ1bGx5IHByZWNpc2UgZm9yIHkgPCA1NSwgYW5kIGZhc3QKCgogIGlmICh5Lmx0KDU1KSkgewogICAgcmV0dXJuIHgudGltZXMoTWF0aC5wb3coMiwgeS50b051bWJlcigpKSArICcnKTsKICB9CgogIHJldHVybiB4LnRpbWVzKG5ldyBCaWdOdW1iZXIoMikucG93KHkpKTsKfQovKgogKiBTcGVjaWFsIENhc2VzOgogKiAgIG4gPj4gLW4gPSAgTgogKiAgIG4gPj4gIE4gPSAgTgogKiAgIE4gPj4gIG4gPSAgTgogKiAgIEkgPj4gIEkgPSAgTgogKiAgIG4gPj4gIDAgPSAgbgogKiAgIEkgPj4gIG4gPSAgSQogKiAgLUkgPj4gIG4gPSAtSQogKiAgLUkgPj4gIEkgPSAtSQogKiAgIG4gPj4gIEkgPSAgSQogKiAgLW4gPj4gIEkgPSAtMQogKiAgIDAgPj4gIG4gPSAgMAogKgogKiBAcGFyYW0ge0JpZ051bWJlcn0gdmFsdWUKICogQHBhcmFtIHtCaWdOdW1iZXJ9IHZhbHVlCiAqIEByZXR1cm4ge0JpZ051bWJlcn0gUmVzdWx0IG9mIGB4YCA+PiBgeWAKICoKICovCgpmdW5jdGlvbiByaWdodEFyaXRoU2hpZnRCaWdOdW1iZXIoeCwgeSkgewogIGlmICh4LmlzRmluaXRlKCkgJiYgIXguaXNJbnRlZ2VyKCkgfHwgeS5pc0Zpbml0ZSgpICYmICF5LmlzSW50ZWdlcigpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHJpZ2h0QXJpdGhTaGlmdCcpOwogIH0KCiAgdmFyIEJpZ051bWJlciA9IHguY29uc3RydWN0b3I7CgogIGlmICh4LmlzTmFOKCkgfHwgeS5pc05hTigpIHx8IHkuaXNOZWdhdGl2ZSgpICYmICF5LmlzWmVybygpKSB7CiAgICByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pOwogIH0KCiAgaWYgKHguaXNaZXJvKCkgfHwgeS5pc1plcm8oKSkgewogICAgcmV0dXJuIHg7CiAgfQoKICBpZiAoIXkuaXNGaW5pdGUoKSkgewogICAgaWYgKHguaXNOZWdhdGl2ZSgpKSB7CiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKC0xKTsKICAgIH0KCiAgICBpZiAoIXguaXNGaW5pdGUoKSkgewogICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pOwogICAgfQoKICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKDApOwogIH0gLy8gTWF0aC5wb3coMiwgeSkgaXMgZnVsbHkgcHJlY2lzZSBmb3IgeSA8IDU1LCBhbmQgZmFzdAoKCiAgaWYgKHkubHQoNTUpKSB7CiAgICByZXR1cm4geC5kaXYoTWF0aC5wb3coMiwgeS50b051bWJlcigpKSArICcnKS5mbG9vcigpOwogIH0KCiAgcmV0dXJuIHguZGl2KG5ldyBCaWdOdW1iZXIoMikucG93KHkpKS5mbG9vcigpOwp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3BsYWluL251bWJlci9iaXR3aXNlLmpzCgp2YXIgYml0d2lzZV9uMSA9ICdudW1iZXInOwp2YXIgYml0d2lzZV9uMiA9ICdudW1iZXIsIG51bWJlcic7CmZ1bmN0aW9uIGJpdEFuZE51bWJlcih4LCB5KSB7CiAgaWYgKCFPYmplY3QodXRpbHNfbnVtYmVyWyJpIiAvKiBpc0ludGVnZXIgKi9dKSh4KSB8fCAhT2JqZWN0KHV0aWxzX251bWJlclsiaSIgLyogaXNJbnRlZ2VyICovXSkoeSkpIHsKICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gYml0QW5kJyk7CiAgfQoKICByZXR1cm4geCAmIHk7Cn0KYml0QW5kTnVtYmVyLnNpZ25hdHVyZSA9IGJpdHdpc2VfbjI7CmZ1bmN0aW9uIGJpdE5vdE51bWJlcih4KSB7CiAgaWYgKCFPYmplY3QodXRpbHNfbnVtYmVyWyJpIiAvKiBpc0ludGVnZXIgKi9dKSh4KSkgewogICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VyIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGJpdE5vdCcpOwogIH0KCiAgcmV0dXJuIH54Owp9CmJpdE5vdE51bWJlci5zaWduYXR1cmUgPSBiaXR3aXNlX24xOwpmdW5jdGlvbiBiaXRPck51bWJlcih4LCB5KSB7CiAgaWYgKCFPYmplY3QodXRpbHNfbnVtYmVyWyJpIiAvKiBpc0ludGVnZXIgKi9dKSh4KSB8fCAhT2JqZWN0KHV0aWxzX251bWJlclsiaSIgLyogaXNJbnRlZ2VyICovXSkoeSkpIHsKICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gYml0T3InKTsKICB9CgogIHJldHVybiB4IHwgeTsKfQpiaXRPck51bWJlci5zaWduYXR1cmUgPSBiaXR3aXNlX24yOwpmdW5jdGlvbiBiaXRYb3JOdW1iZXIoeCwgeSkgewogIGlmICghT2JqZWN0KHV0aWxzX251bWJlclsiaSIgLyogaXNJbnRlZ2VyICovXSkoeCkgfHwgIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKHkpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGJpdFhvcicpOwogIH0KCiAgcmV0dXJuIHggXiB5Owp9CmJpdFhvck51bWJlci5zaWduYXR1cmUgPSBiaXR3aXNlX24yOwpmdW5jdGlvbiBsZWZ0U2hpZnROdW1iZXIoeCwgeSkgewogIGlmICghT2JqZWN0KHV0aWxzX251bWJlclsiaSIgLyogaXNJbnRlZ2VyICovXSkoeCkgfHwgIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKHkpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGxlZnRTaGlmdCcpOwogIH0KCiAgcmV0dXJuIHggPDwgeTsKfQpsZWZ0U2hpZnROdW1iZXIuc2lnbmF0dXJlID0gYml0d2lzZV9uMjsKZnVuY3Rpb24gcmlnaHRBcml0aFNoaWZ0TnVtYmVyKHgsIHkpIHsKICBpZiAoIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKHgpIHx8ICFPYmplY3QodXRpbHNfbnVtYmVyWyJpIiAvKiBpc0ludGVnZXIgKi9dKSh5KSkgewogICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiByaWdodEFyaXRoU2hpZnQnKTsKICB9CgogIHJldHVybiB4ID4+IHk7Cn0KcmlnaHRBcml0aFNoaWZ0TnVtYmVyLnNpZ25hdHVyZSA9IGJpdHdpc2VfbjI7CmZ1bmN0aW9uIHJpZ2h0TG9nU2hpZnROdW1iZXIoeCwgeSkgewogIGlmICghT2JqZWN0KHV0aWxzX251bWJlclsiaSIgLyogaXNJbnRlZ2VyICovXSkoeCkgfHwgIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKHkpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHJpZ2h0TG9nU2hpZnQnKTsKICB9CgogIHJldHVybiB4ID4+PiB5Owp9CnJpZ2h0TG9nU2hpZnROdW1iZXIuc2lnbmF0dXJlID0gYml0d2lzZV9uMjsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYml0d2lzZS9iaXRBbmQuanMKCgoKCgoKCgp2YXIgYml0QW5kX25hbWUgPSAnYml0QW5kJzsKdmFyIGJpdEFuZF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhciddOwp2YXIgY3JlYXRlQml0QW5kID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoYml0QW5kX25hbWUsIGJpdEFuZF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcjsKICB2YXIgYWxnb3JpdGhtMDIgPSBjcmVhdGVBbGdvcml0aG0wMih7CiAgICB0eXBlZDogdHlwZWQsCiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIKICB9KTsKICB2YXIgYWxnb3JpdGhtMDYgPSBjcmVhdGVBbGdvcml0aG0wNih7CiAgICB0eXBlZDogdHlwZWQsCiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIKICB9KTsKICB2YXIgYWxnb3JpdGhtMTEgPSBjcmVhdGVBbGdvcml0aG0xMSh7CiAgICB0eXBlZDogdHlwZWQsCiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIKICB9KTsKICB2YXIgYWxnb3JpdGhtMTMgPSBjcmVhdGVBbGdvcml0aG0xMyh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICB2YXIgYWxnb3JpdGhtMTQgPSBjcmVhdGVBbGdvcml0aG0xNCh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICAvKioKICAgKiBCaXR3aXNlIEFORCB0d28gdmFsdWVzLCBgeCAmIHlgLgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmJpdEFuZCh4LCB5KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmJpdEFuZCg1MywgMTMxKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDEKICAgKgogICAqICAgIG1hdGguYml0QW5kKFsxLCAxMiwgMzFdLCA0MikgICAgICAgLy8gcmV0dXJucyBBcnJheSBbMCwgOCwgMTBdCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGJpdE5vdCwgYml0T3IsIGJpdFhvciwgbGVmdFNoaWZ0LCByaWdodEFyaXRoU2hpZnQsIHJpZ2h0TG9nU2hpZnQKICAgKgogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGFuZAogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBhbmQKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gQU5EIG9mIGB4YCBhbmQgYHlgCiAgICovCgogIHZhciBiaXRBbmQgPSB0eXBlZChiaXRBbmRfbmFtZSwgewogICAgJ251bWJlciwgbnVtYmVyJzogYml0QW5kTnVtYmVyLAogICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogYml0QW5kQmlnTnVtYmVyLAogICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTA2KHgsIHksIGJpdEFuZCwgZmFsc2UpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDIoeSwgeCwgYml0QW5kLCB0cnVlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHgsIHksIGJpdEFuZCwgZmFsc2UpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGJpdEFuZCk7CiAgICB9LAogICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBiaXRBbmQobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTsKICAgIH0sCiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYml0QW5kKG1hdHJpeCh4KSwgeSk7CiAgICB9LAogICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGJpdEFuZCh4LCBtYXRyaXgoeSkpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBiaXRBbmQsIGZhbHNlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGJpdEFuZCwgZmFsc2UpOwogICAgfSwKICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh5LCB4LCBiaXRBbmQsIHRydWUpOwogICAgfSwKICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgYml0QW5kLCB0cnVlKTsKICAgIH0sCiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBiaXRBbmQsIGZhbHNlKS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgYml0QW5kLCB0cnVlKS52YWx1ZU9mKCk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGJpdEFuZDsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2JpdHdpc2UvYml0Tm90LmpzCgoKCgp2YXIgYml0Tm90X25hbWUgPSAnYml0Tm90JzsKdmFyIGJpdE5vdF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107CnZhciBjcmVhdGVCaXROb3QgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShiaXROb3RfbmFtZSwgYml0Tm90X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkOwoKICAvKioKICAgKiBCaXR3aXNlIE5PVCB2YWx1ZSwgYH54YC4KICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqIEZvciB1bml0cywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBvbiB0aGUgYmVzdCBwcmVmaXggYmFzZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguYml0Tm90KHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguYml0Tm90KDEpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTIKICAgKgogICAqICAgIG1hdGguYml0Tm90KFsyLCAtMywgNF0pICAgICAgLy8gcmV0dXJucyBBcnJheSBbLTMsIDIsIDVdCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGJpdEFuZCwgYml0T3IsIGJpdFhvciwgbGVmdFNoaWZ0LCByaWdodEFyaXRoU2hpZnQsIHJpZ2h0TG9nU2hpZnQKICAgKgogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IFZhbHVlIHRvIG5vdAogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBOT1Qgb2YgYHhgCiAgICovCiAgdmFyIGJpdE5vdCA9IHR5cGVkKGJpdE5vdF9uYW1lLCB7CiAgICBudW1iZXI6IGJpdE5vdE51bWJlciwKICAgIEJpZ051bWJlcjogYml0Tm90QmlnTnVtYmVyLAogICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkgewogICAgICByZXR1cm4gZGVlcE1hcCh4LCBiaXROb3QpOwogICAgfQogIH0pOwogIHJldHVybiBiaXROb3Q7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9iaXR3aXNlL2JpdE9yLmpzCgoKCgoKCgoKdmFyIGJpdE9yX25hbWUgPSAnYml0T3InOwp2YXIgYml0T3JfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTsKdmFyIGNyZWF0ZUJpdE9yID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoYml0T3JfbmFtZSwgYml0T3JfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LAogICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsCiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDsKICB2YXIgYWxnb3JpdGhtMDEgPSBjcmVhdGVBbGdvcml0aG0wMSh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICB2YXIgYWxnb3JpdGhtMDQgPSBjcmVhdGVBbGdvcml0aG0wNCh7CiAgICB0eXBlZDogdHlwZWQsCiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIKICB9KTsKICB2YXIgYWxnb3JpdGhtMTAgPSBjcmVhdGVBbGdvcml0aG0xMCh7CiAgICB0eXBlZDogdHlwZWQsCiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgKICB9KTsKICB2YXIgYWxnb3JpdGhtMTMgPSBjcmVhdGVBbGdvcml0aG0xMyh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICB2YXIgYWxnb3JpdGhtMTQgPSBjcmVhdGVBbGdvcml0aG0xNCh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICAvKioKICAgKiBCaXR3aXNlIE9SIHR3byB2YWx1ZXMsIGB4IHwgeWAuCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKiBGb3IgdW5pdHMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgb24gdGhlIGxvd2VzdCBwcmludCBiYXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5iaXRPcih4LCB5KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmJpdE9yKDEsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMwogICAqCiAgICogICAgbWF0aC5iaXRPcihbMSwgMiwgM10sIDQpICAgICAgIC8vIHJldHVybnMgQXJyYXkgWzUsIDYsIDddCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGJpdEFuZCwgYml0Tm90LCBiaXRYb3IsIGxlZnRTaGlmdCwgcmlnaHRBcml0aFNoaWZ0LCByaWdodExvZ1NoaWZ0CiAgICoKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBvcgogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBvcgogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBPUiBvZiBgeGAgYW5kIGB5YAogICAqLwoKICB2YXIgYml0T3IgPSB0eXBlZChiaXRPcl9uYW1lLCB7CiAgICAnbnVtYmVyLCBudW1iZXInOiBiaXRPck51bWJlciwKICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGJpdE9yQmlnTnVtYmVyLAogICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTA0KHgsIHksIGJpdE9yKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTAxKHksIHgsIGJpdE9yLCB0cnVlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTAxKHgsIHksIGJpdE9yLCBmYWxzZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgYml0T3IpOwogICAgfSwKICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYml0T3IobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTsKICAgIH0sCiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYml0T3IobWF0cml4KHgpLCB5KTsKICAgIH0sCiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYml0T3IoeCwgbWF0cml4KHkpKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeCwgeSwgYml0T3IsIGZhbHNlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGJpdE9yLCBmYWxzZSk7CiAgICB9LAogICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHksIHgsIGJpdE9yLCB0cnVlKTsKICAgIH0sCiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGJpdE9yLCB0cnVlKTsKICAgIH0sCiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBiaXRPciwgZmFsc2UpLnZhbHVlT2YoKTsKICAgIH0sCiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBiaXRPciwgdHJ1ZSkudmFsdWVPZigpOwogICAgfQogIH0pOwogIHJldHVybiBiaXRPcjsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3LmpzCgoKdmFyIGFsZ29yaXRobTA3X25hbWUgPSAnYWxnb3JpdGhtMDcnOwp2YXIgYWxnb3JpdGhtMDdfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdEZW5zZU1hdHJpeCddOwp2YXIgY3JlYXRlQWxnb3JpdGhtMDcgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShhbGdvcml0aG0wN19uYW1lLCBhbGdvcml0aG0wN19kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4OwoKICAvKioKICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBBIGFuZCBTcGFyc2VNYXRyaXggQiBpdGVtcyAoemVybyBhbmQgbm9uemVybykgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoQWlqLCBCaWopLgogICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTXhOIHRpbWVzLgogICAqCiAgICogQyhpLGopID0gZihBaWosIEJpaikKICAgKgogICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEEpCiAgICogQHBhcmFtIHtNYXRyaXh9ICAgYiAgICAgICAgICAgICAgICAgVGhlIFNwYXJzZU1hdHJpeCBpbnN0YW5jZSAoQikKICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosQmlqKSBvcGVyYXRpb24gdG8gaW52b2tlCiAgICoKICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBEZW5zZU1hdHJpeCAoQykKICAgKgogICAqIHNlZSBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2MjAyOTQKICAgKi8KICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMDcoYSwgYiwgY2FsbGJhY2spIHsKICAgIC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzCiAgICB2YXIgYXNpemUgPSBhLl9zaXplOwogICAgdmFyIGFkdCA9IGEuX2RhdGF0eXBlOyAvLyBzcGFyc2UgbWF0cml4IGFycmF5cwoKICAgIHZhciBic2l6ZSA9IGIuX3NpemU7CiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnMKCiAgICBpZiAoYXNpemUubGVuZ3RoICE9PSBic2l6ZS5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IERpbWVuc2lvbkVycm9yWyJhIiAvKiBEaW1lbnNpb25FcnJvciAqL10oYXNpemUubGVuZ3RoLCBic2l6ZS5sZW5ndGgpOwogICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1ucwoKCiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTsKICAgIH0gLy8gcm93cyAmIGNvbHVtbnMKCgogICAgdmFyIHJvd3MgPSBhc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlCgogICAgdmFyIGR0OyAvLyB6ZXJvIHZhbHVlCgogICAgdmFyIHplcm8gPSAwOyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlCgogICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlcwoKICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJyAmJiBhZHQgPT09IGJkdCkgewogICAgICAvLyBkYXRhdHlwZQogICAgICBkdCA9IGFkdDsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlCgogICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkdCk7IC8vIGNhbGxiYWNrCgogICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTsKICAgIH0gLy8gdmFycwoKCiAgICB2YXIgaSwgajsgLy8gcmVzdWx0IGFycmF5cwoKICAgIHZhciBjZGF0YSA9IFtdOyAvLyBpbml0aWFsaXplIGMKCiAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7CiAgICAgIGNkYXRhW2ldID0gW107CiAgICB9IC8vIHdvcmtzcGFjZXMKCgogICAgdmFyIHhhID0gW107CiAgICB2YXIgeGIgPSBbXTsgLy8gbWFya3MgaW5kaWNhdGluZyB3ZSBoYXZlIGEgdmFsdWUgaW4geCBmb3IgYSBnaXZlbiBjb2x1bW4KCiAgICB2YXIgd2EgPSBbXTsKICAgIHZhciB3YiA9IFtdOyAvLyBsb29wIGNvbHVtbnMKCiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7CiAgICAgIC8vIGNvbHVtbnMgbWFyawogICAgICB2YXIgbWFyayA9IGogKyAxOyAvLyBzY2F0dGVyIHRoZSB2YWx1ZXMgb2YgQSg6LGopIGludG8gd29ya3NwYWNlCgogICAgICBfc2NhdHRlcihhLCBqLCB3YSwgeGEsIG1hcmspOyAvLyBzY2F0dGVyIHRoZSB2YWx1ZXMgb2YgQig6LGopIGludG8gd29ya3NwYWNlCgoKICAgICAgX3NjYXR0ZXIoYiwgaiwgd2IsIHhiLCBtYXJrKTsgLy8gbG9vcCByb3dzCgoKICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykgewogICAgICAgIC8vIG1hdHJpeCB2YWx1ZXMgQCBpLGoKICAgICAgICB2YXIgdmEgPSB3YVtpXSA9PT0gbWFyayA/IHhhW2ldIDogemVybzsKICAgICAgICB2YXIgdmIgPSB3YltpXSA9PT0gbWFyayA/IHhiW2ldIDogemVybzsgLy8gaW52b2tlIGNhbGxiYWNrCgogICAgICAgIGNkYXRhW2ldW2pdID0gY2YodmEsIHZiKTsKICAgICAgfQogICAgfSAvLyByZXR1cm4gZGVuc2UgbWF0cml4CgoKICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoewogICAgICBkYXRhOiBjZGF0YSwKICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLAogICAgICBkYXRhdHlwZTogZHQKICAgIH0pOwogIH07CgogIGZ1bmN0aW9uIF9zY2F0dGVyKG0sIGosIHcsIHgsIG1hcmspIHsKICAgIC8vIGEgYXJyYXlzCiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzOwogICAgdmFyIGluZGV4ID0gbS5faW5kZXg7CiAgICB2YXIgcHRyID0gbS5fcHRyOyAvLyBsb29wIHZhbHVlcyBpbiBjb2x1bW4gagoKICAgIGZvciAodmFyIGsgPSBwdHJbal0sIGsxID0gcHRyW2ogKyAxXTsgayA8IGsxOyBrKyspIHsKICAgICAgLy8gcm93CiAgICAgIHZhciBpID0gaW5kZXhba107IC8vIHVwZGF0ZSB3b3Jrc3BhY2UKCiAgICAgIHdbaV0gPSBtYXJrOwogICAgICB4W2ldID0gdmFsdWVzW2tdOwogICAgfQogIH0KfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2JpdHdpc2UvYml0WG9yLmpzCgoKCgoKCgoKdmFyIGJpdFhvcl9uYW1lID0gJ2JpdFhvcic7CnZhciBiaXRYb3JfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTsKdmFyIGNyZWF0ZUJpdFhvciA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGJpdFhvcl9uYW1lLCBiaXRYb3JfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LAogICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7CiAgdmFyIGFsZ29yaXRobTAzID0gY3JlYXRlQWxnb3JpdGhtMDMoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgdmFyIGFsZ29yaXRobTA3ID0gY3JlYXRlQWxnb3JpdGhtMDcoewogICAgdHlwZWQ6IHR5cGVkLAogICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4CiAgfSk7CiAgdmFyIGFsZ29yaXRobTEyID0gY3JlYXRlQWxnb3JpdGhtMTIoewogICAgdHlwZWQ6IHR5cGVkLAogICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4CiAgfSk7CiAgdmFyIGFsZ29yaXRobTEzID0gY3JlYXRlQWxnb3JpdGhtMTMoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgdmFyIGFsZ29yaXRobTE0ID0gY3JlYXRlQWxnb3JpdGhtMTQoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgLyoqCiAgICogQml0d2lzZSBYT1IgdHdvIHZhbHVlcywgYHggXiB5YC4KICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5iaXRYb3IoeCwgeSkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5iaXRYb3IoMSwgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzCiAgICoKICAgKiAgICBtYXRoLmJpdFhvcihbMiwgMywgNF0sIDQpICAgICAgIC8vIHJldHVybnMgQXJyYXkgWzYsIDcsIDBdCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGJpdEFuZCwgYml0Tm90LCBiaXRPciwgbGVmdFNoaWZ0LCByaWdodEFyaXRoU2hpZnQsIHJpZ2h0TG9nU2hpZnQKICAgKgogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIHhvcgogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byB4b3IKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gWE9SIG9mIGB4YCBhbmQgYHlgCiAgICovCgogIHZhciBiaXRYb3IgPSB0eXBlZChiaXRYb3JfbmFtZSwgewogICAgJ251bWJlciwgbnVtYmVyJzogYml0WG9yTnVtYmVyLAogICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogYml0d2lzZV9iaXRYb3IsCiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgYml0WG9yKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHksIHgsIGJpdFhvciwgdHJ1ZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBiaXRYb3IsIGZhbHNlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBiaXRYb3IpOwogICAgfSwKICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYml0WG9yKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGJpdFhvcihtYXRyaXgoeCksIHkpOwogICAgfSwKICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBiaXRYb3IoeCwgbWF0cml4KHkpKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeCwgeSwgYml0WG9yLCBmYWxzZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBiaXRYb3IsIGZhbHNlKTsKICAgIH0sCiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgYml0WG9yLCB0cnVlKTsKICAgIH0sCiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGJpdFhvciwgdHJ1ZSk7CiAgICB9LAogICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgYml0WG9yLCBmYWxzZSkudmFsdWVPZigpOwogICAgfSwKICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIGJpdFhvciwgdHJ1ZSkudmFsdWVPZigpOwogICAgfQogIH0pOwogIHJldHVybiBiaXRYb3I7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9jb21wbGV4L2FyZy5qcwoKCnZhciBhcmdfbmFtZSA9ICdhcmcnOwp2YXIgYXJnX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnXTsKdmFyIGNyZWF0ZUFyZyA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGFyZ19uYW1lLCBhcmdfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7CgogIC8qKgogICAqIENvbXB1dGUgdGhlIGFyZ3VtZW50IG9mIGEgY29tcGxleCB2YWx1ZS4KICAgKiBGb3IgYSBjb21wbGV4IG51bWJlciBgYSArIGJpYCwgdGhlIGFyZ3VtZW50IGlzIGNvbXB1dGVkIGFzIGBhdGFuMihiLCBhKWAuCiAgICoKICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5hcmcoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAyKQogICAqICAgIG1hdGguYXJnKGEpIC8gbWF0aC5waSAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjI1CiAgICoKICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KCcyICsgM2knKQogICAqICAgIG1hdGguYXJnKGIpICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjk4Mjc5MzcyMzI0NzMyOQogICAqICAgIG1hdGguYXRhbjIoMywgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjk4Mjc5MzcyMzI0NzMyOQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICByZSwgaW0sIGNvbmosIGFicwogICAqCiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHgKICAgKiAgICAgICAgICAgIEEgY29tcGxleCBudW1iZXIgb3IgYXJyYXkgd2l0aCBjb21wbGV4IG51bWJlcnMKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gVGhlIGFyZ3VtZW50IG9mIHgKICAgKi8KICB2YXIgYXJnID0gdHlwZWQoYXJnX25hbWUsIHsKICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHsKICAgICAgcmV0dXJuIE1hdGguYXRhbjIoMCwgeCk7CiAgICB9LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkgewogICAgICByZXR1cm4geC5jb25zdHJ1Y3Rvci5hdGFuMigwLCB4KTsKICAgIH0sCiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHsKICAgICAgcmV0dXJuIHguYXJnKCk7CiAgICB9LAogICAgLy8gVE9ETzogaW1wbGVtZW50IEJpZ051bWJlciBzdXBwb3J0IGZvciBmdW5jdGlvbiBhcmcKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgYXJnKTsKICAgIH0KICB9KTsKICByZXR1cm4gYXJnOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vY29tcGxleC9jb25qLmpzCgoKdmFyIGNvbmpfbmFtZSA9ICdjb25qJzsKdmFyIGNvbmpfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddOwp2YXIgY3JlYXRlQ29uaiA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGNvbmpfbmFtZSwgY29ual9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDsKCiAgLyoqCiAgICogQ29tcHV0ZSB0aGUgY29tcGxleCBjb25qdWdhdGUgb2YgYSBjb21wbGV4IHZhbHVlLgogICAqIElmIGB4ID0gYStiaWAsIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiBgeGAgaXMgYGEgLSBiaWAuCiAgICoKICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5jb25qKHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguY29uaihtYXRoLmNvbXBsZXgoJzIgKyAzaScpKSAgLy8gcmV0dXJucyBDb21wbGV4IDIgLSAzaQogICAqICAgIG1hdGguY29uaihtYXRoLmNvbXBsZXgoJzIgLSAzaScpKSAgLy8gcmV0dXJucyBDb21wbGV4IDIgKyAzaQogICAqICAgIG1hdGguY29uaihtYXRoLmNvbXBsZXgoJy01LjJpJykpICAvLyByZXR1cm5zIENvbXBsZXggNS4yaQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICByZSwgaW0sIGFyZywgYWJzCiAgICoKICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geAogICAqICAgICAgICAgICAgQSBjb21wbGV4IG51bWJlciBvciBhcnJheSB3aXRoIGNvbXBsZXggbnVtYmVycwogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0KICAgKiAgICAgICAgICAgIFRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiB4CiAgICovCiAgdmFyIGNvbmogPSB0eXBlZChjb25qX25hbWUsIHsKICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHsKICAgICAgcmV0dXJuIHg7CiAgICB9LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkgewogICAgICByZXR1cm4geDsKICAgIH0sCiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHsKICAgICAgcmV0dXJuIHguY29uanVnYXRlKCk7CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkgewogICAgICByZXR1cm4gZGVlcE1hcCh4LCBjb25qKTsKICAgIH0KICB9KTsKICByZXR1cm4gY29uajsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2NvbXBsZXgvaW0uanMKCgp2YXIgaW1fbmFtZSA9ICdpbSc7CnZhciBpbV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107CnZhciBjcmVhdGVJbSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGltX25hbWUsIGltX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkOwoKICAvKioKICAgKiBHZXQgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIuCiAgICogRm9yIGEgY29tcGxleCBudW1iZXIgYGEgKyBiaWAsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGBiYC4KICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmltKHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIGNvbnN0IGEgPSBtYXRoLmNvbXBsZXgoMiwgMykKICAgKiAgICBtYXRoLnJlKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMgogICAqICAgIG1hdGguaW0oYSkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzCiAgICoKICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgnLTUuMmknKSkgLy8gcmV0dXJucyBudW1iZXIgLTUuMgogICAqICAgIG1hdGgucmUobWF0aC5jb21wbGV4KDIuNCkpICAgICAvLyByZXR1cm5zIG51bWJlciAwCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIHJlLCBjb25qLCBhYnMsIGFyZwogICAqCiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHgKICAgKiAgICAgICAgICAgIEEgY29tcGxleCBudW1iZXIgb3IgYXJyYXkgd2l0aCBjb21wbGV4IG51bWJlcnMKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gVGhlIGltYWdpbmFyeSBwYXJ0IG9mIHgKICAgKi8KICB2YXIgaW0gPSB0eXBlZChpbV9uYW1lLCB7CiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7CiAgICAgIHJldHVybiAwOwogICAgfSwKICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHsKICAgICAgcmV0dXJuIHgubXVsKDApOwogICAgfSwKICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkgewogICAgICByZXR1cm4geC5pbTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIHJldHVybiBkZWVwTWFwKHgsIGltKTsKICAgIH0KICB9KTsKICByZXR1cm4gaW07Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9jb21wbGV4L3JlLmpzCgoKdmFyIHJlX25hbWUgPSAncmUnOwp2YXIgcmVfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddOwp2YXIgY3JlYXRlUmUgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShyZV9uYW1lLCByZV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDsKCiAgLyoqCiAgICogR2V0IHRoZSByZWFsIHBhcnQgb2YgYSBjb21wbGV4IG51bWJlci4KICAgKiBGb3IgYSBjb21wbGV4IG51bWJlciBgYSArIGJpYCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYGFgLgogICAqCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGgucmUoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKQogICAqICAgIG1hdGgucmUoYSkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAyCiAgICogICAgbWF0aC5pbShhKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDMKICAgKgogICAqICAgIG1hdGgucmUobWF0aC5jb21wbGV4KCctNS4yaScpKSAvLyByZXR1cm5zIG51bWJlciAwCiAgICogICAgbWF0aC5yZShtYXRoLmNvbXBsZXgoMi40KSkgICAgIC8vIHJldHVybnMgbnVtYmVyIDIuNAogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBpbSwgY29uaiwgYWJzLCBhcmcKICAgKgogICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4CiAgICogICAgICAgICAgICBBIGNvbXBsZXggbnVtYmVyIG9yIGFycmF5IHdpdGggY29tcGxleCBudW1iZXJzCiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IFRoZSByZWFsIHBhcnQgb2YgeAogICAqLwogIHZhciByZSA9IHR5cGVkKHJlX25hbWUsIHsKICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHsKICAgICAgcmV0dXJuIHg7CiAgICB9LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkgewogICAgICByZXR1cm4geDsKICAgIH0sCiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHsKICAgICAgcmV0dXJuIHgucmU7CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkgewogICAgICByZXR1cm4gZGVlcE1hcCh4LCByZSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIHJlOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvcGxhaW4vbnVtYmVyL2xvZ2ljYWwuanMKdmFyIGxvZ2ljYWxfbjEgPSAnbnVtYmVyJzsKdmFyIGxvZ2ljYWxfbjIgPSAnbnVtYmVyLCBudW1iZXInOwpmdW5jdGlvbiBub3ROdW1iZXIoeCkgewogIHJldHVybiAheDsKfQpub3ROdW1iZXIuc2lnbmF0dXJlID0gbG9naWNhbF9uMTsKZnVuY3Rpb24gb3JOdW1iZXIoeCwgeSkgewogIHJldHVybiAhISh4IHx8IHkpOwp9Cm9yTnVtYmVyLnNpZ25hdHVyZSA9IGxvZ2ljYWxfbjI7CmZ1bmN0aW9uIHhvck51bWJlcih4LCB5KSB7CiAgcmV0dXJuICEheCAhPT0gISF5Owp9Cnhvck51bWJlci5zaWduYXR1cmUgPSBsb2dpY2FsX24yOwpmdW5jdGlvbiBhbmROdW1iZXIoeCwgeSkgewogIHJldHVybiAhISh4ICYmIHkpOwp9CmFuZE51bWJlci5zaWduYXR1cmUgPSBsb2dpY2FsX24yOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9sb2dpY2FsL25vdC5qcwoKCgp2YXIgbm90X25hbWUgPSAnbm90JzsKdmFyIG5vdF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107CnZhciBjcmVhdGVOb3QgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShub3RfbmFtZSwgbm90X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkOwoKICAvKioKICAgKiBMb2dpY2FsIGBub3RgLiBGbGlwcyBib29sZWFuIHZhbHVlIG9mIGEgZ2l2ZW4gcGFyYW1ldGVyLgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLm5vdCh4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLm5vdCgyKSAgICAgIC8vIHJldHVybnMgZmFsc2UKICAgKiAgICBtYXRoLm5vdCgwKSAgICAgIC8vIHJldHVybnMgdHJ1ZQogICAqICAgIG1hdGgubm90KHRydWUpICAgLy8gcmV0dXJucyBmYWxzZQogICAqCiAgICogICAgYSA9IFsyLCAtNywgMF0KICAgKiAgICBtYXRoLm5vdChhKSAgICAgIC8vIHJldHVybnMgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV0KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgYW5kLCBvciwgeG9yCiAgICoKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNoZWNrCiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fQogICAqICAgICAgICAgICAgUmV0dXJucyB0cnVlIHdoZW4gaW5wdXQgaXMgYSB6ZXJvIG9yIGVtcHR5IHZhbHVlLgogICAqLwogIHZhciBub3QgPSB0eXBlZChub3RfbmFtZSwgewogICAgbnVtYmVyOiBub3ROdW1iZXIsCiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHsKICAgICAgcmV0dXJuIHgucmUgPT09IDAgJiYgeC5pbSA9PT0gMDsKICAgIH0sCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiB4LmlzWmVybygpIHx8IHguaXNOYU4oKTsKICAgIH0sCiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHsKICAgICAgcmV0dXJuIHgudmFsdWUgIT09IG51bGwgPyBub3QoeC52YWx1ZSkgOiB0cnVlOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgbm90KTsKICAgIH0KICB9KTsKICByZXR1cm4gbm90Owp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vbG9naWNhbC9vci5qcwoKCgoKCgoKdmFyIG9yX25hbWUgPSAnb3InOwp2YXIgb3JfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTsKdmFyIGNyZWF0ZU9yID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkob3JfbmFtZSwgb3JfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LAogICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsCiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDsKICB2YXIgYWxnb3JpdGhtMDMgPSBjcmVhdGVBbGdvcml0aG0wMyh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICB2YXIgYWxnb3JpdGhtMDUgPSBjcmVhdGVBbGdvcml0aG0wNSh7CiAgICB0eXBlZDogdHlwZWQsCiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIKICB9KTsKICB2YXIgYWxnb3JpdGhtMTIgPSBjcmVhdGVBbGdvcml0aG0xMih7CiAgICB0eXBlZDogdHlwZWQsCiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgKICB9KTsKICB2YXIgYWxnb3JpdGhtMTMgPSBjcmVhdGVBbGdvcml0aG0xMyh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICB2YXIgYWxnb3JpdGhtMTQgPSBjcmVhdGVBbGdvcml0aG0xNCh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICAvKioKICAgKiBMb2dpY2FsIGBvcmAuIFRlc3QgaWYgYXQgbGVhc3Qgb25lIHZhbHVlIGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGgub3IoeCwgeSkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5vcigyLCA0KSAgIC8vIHJldHVybnMgdHJ1ZQogICAqCiAgICogICAgYSA9IFsyLCA1LCAwXQogICAqICAgIGIgPSBbMCwgMjIsIDBdCiAgICogICAgYyA9IDAKICAgKgogICAqICAgIG1hdGgub3IoYSwgYikgICAvLyByZXR1cm5zIFt0cnVlLCB0cnVlLCBmYWxzZV0KICAgKiAgICBtYXRoLm9yKGIsIGMpICAgLy8gcmV0dXJucyBbZmFsc2UsIHRydWUsIGZhbHNlXQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBhbmQsIG5vdCwgeG9yCiAgICoKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNoZWNrCiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gY2hlY2sKICAgKiBAcmV0dXJuIHtib29sZWFuIHwgQXJyYXkgfCBNYXRyaXh9CiAgICogICAgICAgICAgICBSZXR1cm5zIHRydWUgd2hlbiBvbmUgb2YgdGhlIGlucHV0cyBpcyBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLgogICAqLwoKICB2YXIgb3IgPSB0eXBlZChvcl9uYW1lLCB7CiAgICAnbnVtYmVyLCBudW1iZXInOiBvck51bWJlciwKICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoeCwgeSkgewogICAgICByZXR1cm4geC5yZSAhPT0gMCB8fCB4LmltICE9PSAwIHx8IHkucmUgIT09IDAgfHwgeS5pbSAhPT0gMDsKICAgIH0sCiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkgewogICAgICByZXR1cm4gIXguaXNaZXJvKCkgJiYgIXguaXNOYU4oKSB8fCAheS5pc1plcm8oKSAmJiAheS5pc05hTigpOwogICAgfSwKICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkgewogICAgICByZXR1cm4gb3IoeC52YWx1ZSB8fCAwLCB5LnZhbHVlIHx8IDApOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wNSh4LCB5LCBvcik7CiAgICB9LAogICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBvciwgdHJ1ZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBvciwgZmFsc2UpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIG9yKTsKICAgIH0sCiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIG9yKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIG9yKG1hdHJpeCh4KSwgeSk7CiAgICB9LAogICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIG9yKHgsIG1hdHJpeCh5KSk7CiAgICB9LAogICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIG9yLCBmYWxzZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBvciwgZmFsc2UpOwogICAgfSwKICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBvciwgdHJ1ZSk7CiAgICB9LAogICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBvciwgdHJ1ZSk7CiAgICB9LAogICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgb3IsIGZhbHNlKS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgb3IsIHRydWUpLnZhbHVlT2YoKTsKICAgIH0KICB9KTsKICByZXR1cm4gb3I7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9sb2dpY2FsL3hvci5qcwoKCgoKCgoKdmFyIHhvcl9uYW1lID0gJ3hvcic7CnZhciB4b3JfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTsKdmFyIGNyZWF0ZVhvciA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHhvcl9uYW1lLCB4b3JfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LAogICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7CiAgdmFyIGFsZ29yaXRobTAzID0gY3JlYXRlQWxnb3JpdGhtMDMoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgdmFyIGFsZ29yaXRobTA3ID0gY3JlYXRlQWxnb3JpdGhtMDcoewogICAgdHlwZWQ6IHR5cGVkLAogICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4CiAgfSk7CiAgdmFyIGFsZ29yaXRobTEyID0gY3JlYXRlQWxnb3JpdGhtMTIoewogICAgdHlwZWQ6IHR5cGVkLAogICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4CiAgfSk7CiAgdmFyIGFsZ29yaXRobTEzID0gY3JlYXRlQWxnb3JpdGhtMTMoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgdmFyIGFsZ29yaXRobTE0ID0gY3JlYXRlQWxnb3JpdGhtMTQoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgLyoqCiAgICogTG9naWNhbCBgeG9yYC4gVGVzdCB3aGV0aGVyIG9uZSBhbmQgb25seSBvbmUgdmFsdWUgaXMgZGVmaW5lZCB3aXRoIGEgbm9uemVyby9ub25lbXB0eSB2YWx1ZS4KICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC54b3IoeCwgeSkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC54b3IoMiwgNCkgICAvLyByZXR1cm5zIGZhbHNlCiAgICoKICAgKiAgICBhID0gWzIsIDAsIDBdCiAgICogICAgYiA9IFsyLCA3LCAwXQogICAqICAgIGMgPSAwCiAgICoKICAgKiAgICBtYXRoLnhvcihhLCBiKSAgIC8vIHJldHVybnMgW2ZhbHNlLCB0cnVlLCBmYWxzZV0KICAgKiAgICBtYXRoLnhvcihhLCBjKSAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCBmYWxzZV0KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgYW5kLCBub3QsIG9yCiAgICoKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNoZWNrCiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gY2hlY2sKICAgKiBAcmV0dXJuIHtib29sZWFuIHwgQXJyYXkgfCBNYXRyaXh9CiAgICogICAgICAgICAgICBSZXR1cm5zIHRydWUgd2hlbiBvbmUgYW5kIG9ubHkgb25lIGlucHV0IGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuCiAgICovCgogIHZhciB4b3IgPSB0eXBlZCh4b3JfbmFtZSwgewogICAgJ251bWJlciwgbnVtYmVyJzogeG9yTnVtYmVyLAogICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7CiAgICAgIHJldHVybiAoeC5yZSAhPT0gMCB8fCB4LmltICE9PSAwKSAhPT0gKHkucmUgIT09IDAgfHwgeS5pbSAhPT0gMCk7CiAgICB9LAogICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHsKICAgICAgcmV0dXJuICgheC5pc1plcm8oKSAmJiAheC5pc05hTigpKSAhPT0gKCF5LmlzWmVybygpICYmICF5LmlzTmFOKCkpOwogICAgfSwKICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkgewogICAgICByZXR1cm4geG9yKHgudmFsdWUgfHwgMCwgeS52YWx1ZSB8fCAwKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgeG9yKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHksIHgsIHhvciwgdHJ1ZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCB4b3IsIGZhbHNlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCB4b3IpOwogICAgfSwKICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4geG9yKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIHhvcihtYXRyaXgoeCksIHkpOwogICAgfSwKICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiB4b3IoeCwgbWF0cml4KHkpKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeCwgeSwgeG9yLCBmYWxzZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCB4b3IsIGZhbHNlKTsKICAgIH0sCiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgeG9yLCB0cnVlKTsKICAgIH0sCiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIHhvciwgdHJ1ZSk7CiAgICB9LAogICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgeG9yLCBmYWxzZSkudmFsdWVPZigpOwogICAgfSwKICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIHhvciwgdHJ1ZSkudmFsdWVPZigpOwogICAgfQogIH0pOwogIHJldHVybiB4b3I7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9tYXRyaXgvY29uY2F0LmpzCgoKCgoKCnZhciBjb25jYXRfbmFtZSA9ICdjb25jYXQnOwp2YXIgY29uY2F0X2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2lzSW50ZWdlciddOwp2YXIgY3JlYXRlQ29uY2F0ID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoY29uY2F0X25hbWUsIGNvbmNhdF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyOwoKICAvKioKICAgKiBDb25jYXRlbmF0ZSB0d28gb3IgbW9yZSBtYXRyaWNlcy4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBtYXRoLmNvbmNhdChBLCBCLCBDLCAuLi4pCiAgICogICAgIG1hdGguY29uY2F0KEEsIEIsIEMsIC4uLiwgZGltKQogICAqCiAgICogV2hlcmU6CiAgICoKICAgKiAtIGBkaW06IG51bWJlcmAgaXMgYSB6ZXJvLWJhc2VkIGRpbWVuc2lvbiBvdmVyIHdoaWNoIHRvIGNvbmNhdGVuYXRlIHRoZSBtYXRyaWNlcy4KICAgKiAgIEJ5IGRlZmF1bHQgdGhlIGxhc3QgZGltZW5zaW9uIG9mIHRoZSBtYXRyaWNlcy4KICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgY29uc3QgQSA9IFtbMSwgMl0sIFs1LCA2XV0KICAgKiAgICBjb25zdCBCID0gW1szLCA0XSwgWzcsIDhdXQogICAqCiAgICogICAgbWF0aC5jb25jYXQoQSwgQikgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtbMSwgMiwgMywgNF0sIFs1LCA2LCA3LCA4XV0KICAgKiAgICBtYXRoLmNvbmNhdChBLCBCLCAwKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCAyXSwgWzUsIDZdLCBbMywgNF0sIFs3LCA4XV0KICAgKiAgICBtYXRoLmNvbmNhdCgnaGVsbG8nLCAnICcsICd3b3JsZCcpIC8vIHJldHVybnMgJ2hlbGxvIHdvcmxkJwogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBzaXplLCBzcXVlZXplLCBzdWJzZXQsIHRyYW5zcG9zZQogICAqCiAgICogQHBhcmFtIHsuLi4gQXJyYXkgfCBNYXRyaXh9IGFyZ3MgICAgIFR3byBvciBtb3JlIG1hdHJpY2VzCiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9IENvbmNhdGVuYXRlZCBtYXRyaXgKICAgKi8KICByZXR1cm4gdHlwZWQoY29uY2F0X25hbWUsIHsKICAgIC8vIFRPRE86IGNoYW5nZSBzaWduYXR1cmUgdG8gJy4uLkFycmF5IHwgTWF0cml4LCBkaW0/JyB3aGVuIHN1cHBvcnRlZAogICAgJy4uLkFycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYXJncykgewogICAgICB2YXIgaTsKICAgICAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoOwogICAgICB2YXIgZGltID0gLTE7IC8vIHplcm8tYmFzZWQgZGltZW5zaW9uCgogICAgICB2YXIgcHJldkRpbTsKICAgICAgdmFyIGFzTWF0cml4ID0gZmFsc2U7CiAgICAgIHZhciBtYXRyaWNlcyA9IFtdOyAvLyBjb250YWlucyBtdWx0aSBkaW1lbnNpb25hbCBhcnJheXMKCiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgIHZhciBhcmcgPSBhcmdzW2ldOyAvLyB0ZXN0IHdoZXRoZXIgd2UgbmVlZCB0byByZXR1cm4gYSBNYXRyaXggKGlmIG5vdCB3ZSByZXR1cm4gYW4gQXJyYXkpCgogICAgICAgIGlmIChPYmplY3QoaXNbInYiIC8qIGlzTWF0cml4ICovXSkoYXJnKSkgewogICAgICAgICAgYXNNYXRyaXggPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKE9iamVjdChpc1sieSIgLyogaXNOdW1iZXIgKi9dKShhcmcpIHx8IE9iamVjdChpc1siZSIgLyogaXNCaWdOdW1iZXIgKi9dKShhcmcpKSB7CiAgICAgICAgICBpZiAoaSAhPT0gbGVuIC0gMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RpbWVuc2lvbiBtdXN0IGJlIHNwZWNpZmllZCBhcyBsYXN0IGFyZ3VtZW50Jyk7CiAgICAgICAgICB9IC8vIGxhc3QgYXJndW1lbnQgY29udGFpbnMgdGhlIGRpbWVuc2lvbiBvbiB3aGljaCB0byBjb25jYXRlbmF0ZQoKCiAgICAgICAgICBwcmV2RGltID0gZGltOwogICAgICAgICAgZGltID0gYXJnLnZhbHVlT2YoKTsgLy8gY2hhbmdlIEJpZ051bWJlciB0byBudW1iZXIKCiAgICAgICAgICBpZiAoIWlzSW50ZWdlcihkaW0pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludGVnZXIgbnVtYmVyIGV4cGVjdGVkIGZvciBkaW1lbnNpb24nKTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoZGltIDwgMCB8fCBpID4gMCAmJiBkaW0gPiBwcmV2RGltKSB7CiAgICAgICAgICAgIC8vIFRPRE86IHdvdWxkIGJlIG1vcmUgY2xlYXIgd2hlbiB0aHJvd2luZyBhIERpbWVuc2lvbkVycm9yIGhlcmUKICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4RXJyb3JbImEiIC8qIEluZGV4RXJyb3IgKi9dKGRpbSwgcHJldkRpbSArIDEpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyB0aGlzIGlzIGEgbWF0cml4IG9yIGFycmF5CiAgICAgICAgICB2YXIgbSA9IE9iamVjdCh1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSkoYXJnKS52YWx1ZU9mKCk7CiAgICAgICAgICB2YXIgc2l6ZSA9IE9iamVjdCh1dGlsc19hcnJheVsiYSIgLyogYXJyYXlTaXplICovXSkobSk7CiAgICAgICAgICBtYXRyaWNlc1tpXSA9IG07CiAgICAgICAgICBwcmV2RGltID0gZGltOwogICAgICAgICAgZGltID0gc2l6ZS5sZW5ndGggLSAxOyAvLyB2ZXJpZnkgd2hldGhlciBlYWNoIG9mIHRoZSBtYXRyaWNlcyBoYXMgdGhlIHNhbWUgbnVtYmVyIG9mIGRpbWVuc2lvbnMKCiAgICAgICAgICBpZiAoaSA+IDAgJiYgZGltICE9PSBwcmV2RGltKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBEaW1lbnNpb25FcnJvclsiYSIgLyogRGltZW5zaW9uRXJyb3IgKi9dKHByZXZEaW0gKyAxLCBkaW0gKyAxKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmIChtYXRyaWNlcy5sZW5ndGggPT09IDApIHsKICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0F0IGxlYXN0IG9uZSBtYXRyaXggZXhwZWN0ZWQnKTsKICAgICAgfQoKICAgICAgdmFyIHJlcyA9IG1hdHJpY2VzLnNoaWZ0KCk7CgogICAgICB3aGlsZSAobWF0cmljZXMubGVuZ3RoKSB7CiAgICAgICAgcmVzID0gX2NvbmNhdChyZXMsIG1hdHJpY2VzLnNoaWZ0KCksIGRpbSwgMCk7CiAgICAgIH0KCiAgICAgIHJldHVybiBhc01hdHJpeCA/IG1hdHJpeChyZXMpIDogcmVzOwogICAgfSwKICAgICcuLi5zdHJpbmcnOiBmdW5jdGlvbiBzdHJpbmcoYXJncykgewogICAgICByZXR1cm4gYXJncy5qb2luKCcnKTsKICAgIH0KICB9KTsKfSk7Ci8qKgogKiBSZWN1cnNpdmVseSBjb25jYXRlbmF0ZSB0d28gbWF0cmljZXMuCiAqIFRoZSBjb250ZW50cyBvZiB0aGUgbWF0cmljZXMgaXMgbm90IGNsb25lZC4KICogQHBhcmFtIHtBcnJheX0gYSAgICAgICAgICAgICBNdWx0aSBkaW1lbnNpb25hbCBhcnJheQogKiBAcGFyYW0ge0FycmF5fSBiICAgICAgICAgICAgIE11bHRpIGRpbWVuc2lvbmFsIGFycmF5CiAqIEBwYXJhbSB7bnVtYmVyfSBjb25jYXREaW0gICAgVGhlIGRpbWVuc2lvbiBvbiB3aGljaCB0byBjb25jYXRlbmF0ZSAoemVyby1iYXNlZCkKICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgICAgICAgICBUaGUgY3VycmVudCBkaW0gKHplcm8tYmFzZWQpCiAqIEByZXR1cm4ge0FycmF5fSBjICAgICAgICAgICAgVGhlIGNvbmNhdGVuYXRlZCBtYXRyaXgKICogQHByaXZhdGUKICovCgpmdW5jdGlvbiBfY29uY2F0KGEsIGIsIGNvbmNhdERpbSwgZGltKSB7CiAgaWYgKGRpbSA8IGNvbmNhdERpbSkgewogICAgLy8gcmVjdXJzZSBpbnRvIG5leHQgZGltZW5zaW9uCiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBEaW1lbnNpb25FcnJvclsiYSIgLyogRGltZW5zaW9uRXJyb3IgKi9dKGEubGVuZ3RoLCBiLmxlbmd0aCk7CiAgICB9CgogICAgdmFyIGMgPSBbXTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKICAgICAgY1tpXSA9IF9jb25jYXQoYVtpXSwgYltpXSwgY29uY2F0RGltLCBkaW0gKyAxKTsKICAgIH0KCiAgICByZXR1cm4gYzsKICB9IGVsc2UgewogICAgLy8gY29uY2F0ZW5hdGUgdGhpcyBkaW1lbnNpb24KICAgIHJldHVybiBhLmNvbmNhdChiKTsKICB9Cn0KLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vbWF0cml4L2NvbHVtbi5qcwoKCgp2YXIgY29sdW1uX25hbWUgPSAnY29sdW1uJzsKdmFyIGNvbHVtbl9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0luZGV4JywgJ21hdHJpeCcsICdyYW5nZSddOwp2YXIgY3JlYXRlQ29sdW1uID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoY29sdW1uX25hbWUsIGNvbHVtbl9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgSW5kZXggPSBfcmVmLkluZGV4LAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCwKICAgICAgcmFuZ2UgPSBfcmVmLnJhbmdlOwoKICAvKioKICAgKiBSZXR1cm4gYSBjb2x1bW4gZnJvbSBhIE1hdHJpeC4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBtYXRoLmNvbHVtbih2YWx1ZSwgaW5kZXgpCiAgICoKICAgKiBFeGFtcGxlOgogICAqCiAgICogICAgIC8vIGdldCBhIGNvbHVtbgogICAqICAgICBjb25zdCBkID0gW1sxLCAyXSwgWzMsIDRdXQogICAqICAgICBtYXRoLmNvbHVtbihkLCAxKSAvLyByZXR1cm5zIFtbMl0sIFs0XV0KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgIHJvdwogICAqCiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeCB9IHZhbHVlICAgQW4gYXJyYXkgb3IgbWF0cml4CiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiAgICAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBjb2x1bW4KICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgICAgICBUaGUgcmV0cmlldmVkIGNvbHVtbgogICAqLwogIHZhciBjb2x1bW4gPSB0eXBlZChjb2x1bW5fbmFtZSwgewogICAgJ01hdHJpeCwgbnVtYmVyJzogX2NvbHVtbiwKICAgICdBcnJheSwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlOdW1iZXIodmFsdWUsIGNvbHVtbikgewogICAgICByZXR1cm4gX2NvbHVtbihtYXRyaXgoT2JqZWN0KHV0aWxzX29iamVjdFsiYSIgLyogY2xvbmUgKi9dKSh2YWx1ZSkpLCBjb2x1bW4pLnZhbHVlT2YoKTsKICAgIH0KICB9KTsKICByZXR1cm4gY29sdW1uOwogIC8qKgogICAqIFJldHJpZXZlIGEgY29sdW1uIG9mIGEgbWF0cml4CiAgICogQHBhcmFtIHtNYXRyaXggfSB2YWx1ZSAgQSBtYXRyaXgKICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uICBUaGUgaW5kZXggb2YgdGhlIGNvbHVtbgogICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgIFRoZSByZXRyaWV2ZWQgY29sdW1uCiAgICovCgogIGZ1bmN0aW9uIF9jb2x1bW4odmFsdWUsIGNvbHVtbikgewogICAgLy8gY2hlY2sgZGltZW5zaW9ucwogICAgaWYgKHZhbHVlLnNpemUoKS5sZW5ndGggIT09IDIpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHR3byBkaW1lbnNpb25hbCBtYXRyaXggaXMgc3VwcG9ydGVkJyk7CiAgICB9CgogICAgT2JqZWN0KHV0aWxzX2FycmF5WyJzIiAvKiB2YWxpZGF0ZUluZGV4ICovXSkoY29sdW1uLCB2YWx1ZS5zaXplKClbMV0pOwogICAgdmFyIHJvd1JhbmdlID0gcmFuZ2UoMCwgdmFsdWUuc2l6ZSgpWzBdKTsKICAgIHZhciBpbmRleCA9IG5ldyBJbmRleChyb3dSYW5nZSwgY29sdW1uKTsKICAgIHJldHVybiB2YWx1ZS5zdWJzZXQoaW5kZXgpOwogIH0KfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL21hdHJpeC9jcm9zcy5qcwoKCnZhciBjcm9zc19uYW1lID0gJ2Nyb3NzJzsKdmFyIGNyb3NzX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ3N1YnRyYWN0JywgJ211bHRpcGx5J107CnZhciBjcmVhdGVDcm9zcyA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGNyb3NzX25hbWUsIGNyb3NzX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCwKICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LAogICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHk7CgogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgY3Jvc3MgcHJvZHVjdCBmb3IgdHdvIHZlY3RvcnMgaW4gdGhyZWUgZGltZW5zaW9uYWwgc3BhY2UuCiAgICogVGhlIGNyb3NzIHByb2R1Y3Qgb2YgYEEgPSBbYTEsIGEyLCBhM11gIGFuZCBgQiA9IFtiMSwgYjIsIGIzXWAgaXMgZGVmaW5lZAogICAqIGFzOgogICAqCiAgICogICAgY3Jvc3MoQSwgQikgPSBbCiAgICogICAgICBhMiAqIGIzIC0gYTMgKiBiMiwKICAgKiAgICAgIGEzICogYjEgLSBhMSAqIGIzLAogICAqICAgICAgYTEgKiBiMiAtIGEyICogYjEKICAgKiAgICBdCiAgICoKICAgKiBJZiBvbmUgb2YgdGhlIGlucHV0IHZlY3RvcnMgaGFzIGEgZGltZW5zaW9uIGdyZWF0ZXIgdGhhbiAxLCB0aGUgb3V0cHV0CiAgICogdmVjdG9yIHdpbGwgYmUgYSAxeDMgKDItZGltZW5zaW9uYWwpIG1hdHJpeC4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguY3Jvc3MoeCwgeSkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5jcm9zcyhbMSwgMSwgMF0sICAgWzAsIDEsIDFdKSAgICAgICAvLyBSZXR1cm5zIFsxLCAtMSwgMV0KICAgKiAgICBtYXRoLmNyb3NzKFszLCAtMywgMV0sICBbNCwgOSwgMl0pICAgICAgIC8vIFJldHVybnMgWy0xNSwgLTIsIDM5XQogICAqICAgIG1hdGguY3Jvc3MoWzIsIDMsIDRdLCAgIFs1LCA2LCA3XSkgICAgICAgLy8gUmV0dXJucyBbLTMsIDYsIC0zXQogICAqICAgIG1hdGguY3Jvc3MoW1sxLCAyLCAzXV0sIFtbNF0sIFs1XSwgWzZdXSkgLy8gUmV0dXJucyBbWy0zLCA2LCAtM11dCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGRvdCwgbXVsdGlwbHkKICAgKgogICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB4ICAgRmlyc3QgdmVjdG9yCiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHkgICBTZWNvbmQgdmVjdG9yCiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgICBSZXR1cm5zIHRoZSBjcm9zcyBwcm9kdWN0IG9mIGB4YCBhbmQgYHlgCiAgICovCiAgcmV0dXJuIHR5cGVkKGNyb3NzX25hbWUsIHsKICAgICdNYXRyaXgsIE1hdHJpeCc6IGZ1bmN0aW9uIE1hdHJpeE1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBtYXRyaXgoX2Nyb3NzKHgudG9BcnJheSgpLCB5LnRvQXJyYXkoKSkpOwogICAgfSwKICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkgewogICAgICByZXR1cm4gbWF0cml4KF9jcm9zcyh4LnRvQXJyYXkoKSwgeSkpOwogICAgfSwKICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gbWF0cml4KF9jcm9zcyh4LCB5LnRvQXJyYXkoKSkpOwogICAgfSwKICAgICdBcnJheSwgQXJyYXknOiBfY3Jvc3MKICB9KTsKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIGNyb3NzIHByb2R1Y3QgZm9yIHR3byBhcnJheXMKICAgKiBAcGFyYW0ge0FycmF5fSB4ICBGaXJzdCB2ZWN0b3IKICAgKiBAcGFyYW0ge0FycmF5fSB5ICBTZWNvbmQgdmVjdG9yCiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHggYW5kIHkKICAgKiBAcHJpdmF0ZQogICAqLwoKICBmdW5jdGlvbiBfY3Jvc3MoeCwgeSkgewogICAgdmFyIGhpZ2hlc3REaW1lbnNpb24gPSBNYXRoLm1heChPYmplY3QodXRpbHNfYXJyYXlbImEiIC8qIGFycmF5U2l6ZSAqL10pKHgpLmxlbmd0aCwgT2JqZWN0KHV0aWxzX2FycmF5WyJhIiAvKiBhcnJheVNpemUgKi9dKSh5KS5sZW5ndGgpOwogICAgeCA9IE9iamVjdCh1dGlsc19hcnJheVsicCIgLyogc3F1ZWV6ZSAqL10pKHgpOwogICAgeSA9IE9iamVjdCh1dGlsc19hcnJheVsicCIgLyogc3F1ZWV6ZSAqL10pKHkpOwogICAgdmFyIHhTaXplID0gT2JqZWN0KHV0aWxzX2FycmF5WyJhIiAvKiBhcnJheVNpemUgKi9dKSh4KTsKICAgIHZhciB5U2l6ZSA9IE9iamVjdCh1dGlsc19hcnJheVsiYSIgLyogYXJyYXlTaXplICovXSkoeSk7CgogICAgaWYgKHhTaXplLmxlbmd0aCAhPT0gMSB8fCB5U2l6ZS5sZW5ndGggIT09IDEgfHwgeFNpemVbMF0gIT09IDMgfHwgeVNpemVbMF0gIT09IDMpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlY3RvcnMgd2l0aCBsZW5ndGggMyBleHBlY3RlZCAnICsgJyhTaXplIEEgPSBbJyArIHhTaXplLmpvaW4oJywgJykgKyAnXSwgQiA9IFsnICsgeVNpemUuam9pbignLCAnKSArICddKScpOwogICAgfQoKICAgIHZhciBwcm9kdWN0ID0gW3N1YnRyYWN0KG11bHRpcGx5KHhbMV0sIHlbMl0pLCBtdWx0aXBseSh4WzJdLCB5WzFdKSksIHN1YnRyYWN0KG11bHRpcGx5KHhbMl0sIHlbMF0pLCBtdWx0aXBseSh4WzBdLCB5WzJdKSksIHN1YnRyYWN0KG11bHRpcGx5KHhbMF0sIHlbMV0pLCBtdWx0aXBseSh4WzFdLCB5WzBdKSldOwoKICAgIGlmIChoaWdoZXN0RGltZW5zaW9uID4gMSkgewogICAgICByZXR1cm4gW3Byb2R1Y3RdOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHByb2R1Y3Q7CiAgICB9CiAgfQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vbWF0cml4L2RpYWcuanMKCgoKCnZhciBkaWFnX25hbWUgPSAnZGlhZyc7CnZhciBkaWFnX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ0RlbnNlTWF0cml4JywgJ1NwYXJzZU1hdHJpeCddOwp2YXIgY3JlYXRlRGlhZyA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGRpYWdfbmFtZSwgZGlhZ19kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeCwKICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7CgogIC8qKgogICAqIENyZWF0ZSBhIGRpYWdvbmFsIG1hdHJpeCBvciByZXRyaWV2ZSB0aGUgZGlhZ29uYWwgb2YgYSBtYXRyaXgKICAgKgogICAqIFdoZW4gYHhgIGlzIGEgdmVjdG9yLCBhIG1hdHJpeCB3aXRoIHZlY3RvciBgeGAgb24gdGhlIGRpYWdvbmFsIHdpbGwgYmUgcmV0dXJuZWQuCiAgICogV2hlbiBgeGAgaXMgYSB0d28gZGltZW5zaW9uYWwgbWF0cml4LCB0aGUgbWF0cml4ZXMgYGtgdGggZGlhZ29uYWwgd2lsbCBiZSByZXR1cm5lZCBhcyB2ZWN0b3IuCiAgICogV2hlbiBrIGlzIHBvc2l0aXZlLCB0aGUgdmFsdWVzIGFyZSBwbGFjZWQgb24gdGhlIHN1cGVyIGRpYWdvbmFsLgogICAqIFdoZW4gayBpcyBuZWdhdGl2ZSwgdGhlIHZhbHVlcyBhcmUgcGxhY2VkIG9uIHRoZSBzdWIgZGlhZ29uYWwuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICAgbWF0aC5kaWFnKFgpCiAgICogICAgIG1hdGguZGlhZyhYLCBmb3JtYXQpCiAgICogICAgIG1hdGguZGlhZyhYLCBrKQogICAqICAgICBtYXRoLmRpYWcoWCwgaywgZm9ybWF0KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICAgLy8gY3JlYXRlIGEgZGlhZ29uYWwgbWF0cml4CiAgICogICAgIG1hdGguZGlhZyhbMSwgMiwgM10pICAgICAgLy8gcmV0dXJucyBbWzEsIDAsIDBdLCBbMCwgMiwgMF0sIFswLCAwLCAzXV0KICAgKiAgICAgbWF0aC5kaWFnKFsxLCAyLCAzXSwgMSkgICAvLyByZXR1cm5zIFtbMCwgMSwgMCwgMF0sIFswLCAwLCAyLCAwXSwgWzAsIDAsIDAsIDNdXQogICAqICAgICBtYXRoLmRpYWcoWzEsIDIsIDNdLCAtMSkgIC8vIHJldHVybnMgW1swLCAwLCAwXSwgWzEsIDAsIDBdLCBbMCwgMiwgMF0sIFswLCAwLCAzXV0KICAgKgogICAqICAgIC8vIHJldHJpZXZlIHRoZSBkaWFnb25hbCBmcm9tIGEgbWF0cml4CiAgICogICAgY29uc3QgYSA9IFtbMSwgMiwgM10sIFs0LCA1LCA2XSwgWzcsIDgsIDldXQogICAqICAgIG1hdGguZGlhZyhhKSAgIC8vIHJldHVybnMgWzEsIDUsIDldCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgICBvbmVzLCB6ZXJvcywgaWRlbnRpdHkKICAgKgogICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICAgICAgICAgQSB0d28gZGltZW5zaW9uYWwgbWF0cml4IG9yIGEgdmVjdG9yCiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFtrPTBdICBUaGUgZGlhZ29uYWwgd2hlcmUgdGhlIHZlY3RvciB3aWxsIGJlIGZpbGxlZAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gb3IgcmV0cmlldmVkLgogICAqIEBwYXJhbSB7c3RyaW5nfSBbZm9ybWF0PSdkZW5zZSddICAgVGhlIG1hdHJpeCBzdG9yYWdlIGZvcm1hdC4KICAgKgogICAqIEByZXR1cm5zIHtNYXRyaXggfCBBcnJheX0gRGlhZ29uYWwgbWF0cml4IGZyb20gaW5wdXQgdmVjdG9yLCBvciBkaWFnb25hbCBmcm9tIGlucHV0IG1hdHJpeC4KICAgKi8KICByZXR1cm4gdHlwZWQoZGlhZ19uYW1lLCB7CiAgICAvLyBGSVhNRTogc2ltcGxpZnkgdGhpcyBodWdlIGFtb3VudCBvZiBzaWduYXR1cmVzIGFzIHNvb24gYXMgdHlwZWQtZnVuY3Rpb24gc3VwcG9ydHMgb3B0aW9uYWwgYXJndW1lbnRzCiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkgewogICAgICByZXR1cm4gX2RpYWcoeCwgMCwgT2JqZWN0KHV0aWxzX2FycmF5WyJhIiAvKiBhcnJheVNpemUgKi9dKSh4KSwgbnVsbCk7CiAgICB9LAogICAgJ0FycmF5LCBudW1iZXInOiBmdW5jdGlvbiBBcnJheU51bWJlcih4LCBrKSB7CiAgICAgIHJldHVybiBfZGlhZyh4LCBrLCBPYmplY3QodXRpbHNfYXJyYXlbImEiIC8qIGFycmF5U2l6ZSAqL10pKHgpLCBudWxsKTsKICAgIH0sCiAgICAnQXJyYXksIEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5QmlnTnVtYmVyKHgsIGspIHsKICAgICAgcmV0dXJuIF9kaWFnKHgsIGsudG9OdW1iZXIoKSwgT2JqZWN0KHV0aWxzX2FycmF5WyJhIiAvKiBhcnJheVNpemUgKi9dKSh4KSwgbnVsbCk7CiAgICB9LAogICAgJ0FycmF5LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheVN0cmluZyh4LCBmb3JtYXQpIHsKICAgICAgcmV0dXJuIF9kaWFnKHgsIDAsIE9iamVjdCh1dGlsc19hcnJheVsiYSIgLyogYXJyYXlTaXplICovXSkoeCksIGZvcm1hdCk7CiAgICB9LAogICAgJ0FycmF5LCBudW1iZXIsIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5TnVtYmVyU3RyaW5nKHgsIGssIGZvcm1hdCkgewogICAgICByZXR1cm4gX2RpYWcoeCwgaywgT2JqZWN0KHV0aWxzX2FycmF5WyJhIiAvKiBhcnJheVNpemUgKi9dKSh4KSwgZm9ybWF0KTsKICAgIH0sCiAgICAnQXJyYXksIEJpZ051bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gQXJyYXlCaWdOdW1iZXJTdHJpbmcoeCwgaywgZm9ybWF0KSB7CiAgICAgIHJldHVybiBfZGlhZyh4LCBrLnRvTnVtYmVyKCksIE9iamVjdCh1dGlsc19hcnJheVsiYSIgLyogYXJyYXlTaXplICovXSkoeCksIGZvcm1hdCk7CiAgICB9LAogICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkgewogICAgICByZXR1cm4gX2RpYWcoeCwgMCwgeC5zaXplKCksIHguc3RvcmFnZSgpKTsKICAgIH0sCiAgICAnTWF0cml4LCBudW1iZXInOiBmdW5jdGlvbiBNYXRyaXhOdW1iZXIoeCwgaykgewogICAgICByZXR1cm4gX2RpYWcoeCwgaywgeC5zaXplKCksIHguc3RvcmFnZSgpKTsKICAgIH0sCiAgICAnTWF0cml4LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBNYXRyaXhCaWdOdW1iZXIoeCwgaykgewogICAgICByZXR1cm4gX2RpYWcoeCwgay50b051bWJlcigpLCB4LnNpemUoKSwgeC5zdG9yYWdlKCkpOwogICAgfSwKICAgICdNYXRyaXgsIHN0cmluZyc6IGZ1bmN0aW9uIE1hdHJpeFN0cmluZyh4LCBmb3JtYXQpIHsKICAgICAgcmV0dXJuIF9kaWFnKHgsIDAsIHguc2l6ZSgpLCBmb3JtYXQpOwogICAgfSwKICAgICdNYXRyaXgsIG51bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4TnVtYmVyU3RyaW5nKHgsIGssIGZvcm1hdCkgewogICAgICByZXR1cm4gX2RpYWcoeCwgaywgeC5zaXplKCksIGZvcm1hdCk7CiAgICB9LAogICAgJ01hdHJpeCwgQmlnTnVtYmVyLCBzdHJpbmcnOiBmdW5jdGlvbiBNYXRyaXhCaWdOdW1iZXJTdHJpbmcoeCwgaywgZm9ybWF0KSB7CiAgICAgIHJldHVybiBfZGlhZyh4LCBrLnRvTnVtYmVyKCksIHguc2l6ZSgpLCBmb3JtYXQpOwogICAgfQogIH0pOwogIC8qKgogICAqIENyZWVhdGUgZGlhZ29uYWwgbWF0cml4IGZyb20gYSB2ZWN0b3Igb3IgdmljZSB2ZXJzYQogICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHgKICAgKiBAcGFyYW0ge251bWJlcn0gawogICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgU3RvcmFnZSBmb3JtYXQgZm9yIG1hdHJpeC4gSWYgbnVsbCwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gQXJyYXkgaXMgcmV0dXJuZWQKICAgKiBAcmV0dXJucyB7QXJyYXkgfCBNYXRyaXh9CiAgICogQHByaXZhdGUKICAgKi8KCiAgZnVuY3Rpb24gX2RpYWcoeCwgaywgc2l6ZSwgZm9ybWF0KSB7CiAgICBpZiAoIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKGspKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NlY29uZCBwYXJhbWV0ZXIgaW4gZnVuY3Rpb24gZGlhZyBtdXN0IGJlIGFuIGludGVnZXInKTsKICAgIH0KCiAgICB2YXIga1N1cGVyID0gayA+IDAgPyBrIDogMDsKICAgIHZhciBrU3ViID0gayA8IDAgPyAtayA6IDA7IC8vIGNoZWNrIGRpbWVuc2lvbnMKCiAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7CiAgICAgIGNhc2UgMToKICAgICAgICByZXR1cm4gX2NyZWF0ZURpYWdvbmFsTWF0cml4KHgsIGssIGZvcm1hdCwgc2l6ZVswXSwga1N1Yiwga1N1cGVyKTsKCiAgICAgIGNhc2UgMjoKICAgICAgICByZXR1cm4gX2dldERpYWdvbmFsKHgsIGssIGZvcm1hdCwgc2l6ZSwga1N1Yiwga1N1cGVyKTsKICAgIH0KCiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IGZvciBmdW5jdGlvbiBkaWFnIG11c3QgYmUgMiBkaW1lbnNpb25hbCcpOwogIH0KCiAgZnVuY3Rpb24gX2NyZWF0ZURpYWdvbmFsTWF0cml4KHgsIGssIGZvcm1hdCwgbCwga1N1Yiwga1N1cGVyKSB7CiAgICAvLyBtYXRyaXggc2l6ZQogICAgdmFyIG1zID0gW2wgKyBrU3ViLCBsICsga1N1cGVyXTsKCiAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdCAhPT0gJ3NwYXJzZScgJiYgZm9ybWF0ICE9PSAnZGVuc2UnKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gbWF0cml4IHR5cGUgIi5jb25jYXQoZm9ybWF0LCAiXCIiKSk7CiAgICB9IC8vIGNyZWF0ZSBkaWFnb25hbCBtYXRyaXgKCgogICAgdmFyIG0gPSBmb3JtYXQgPT09ICdzcGFyc2UnID8gU3BhcnNlTWF0cml4LmRpYWdvbmFsKG1zLCB4LCBrKSA6IERlbnNlTWF0cml4LmRpYWdvbmFsKG1zLCB4LCBrKTsgLy8gY2hlY2sgd2UgbmVlZCB0byByZXR1cm4gYSBtYXRyaXgKCiAgICByZXR1cm4gZm9ybWF0ICE9PSBudWxsID8gbSA6IG0udmFsdWVPZigpOwogIH0KCiAgZnVuY3Rpb24gX2dldERpYWdvbmFsKHgsIGssIGZvcm1hdCwgcywga1N1Yiwga1N1cGVyKSB7CiAgICAvLyBjaGVjayB4IGlzIGEgTWF0cml4CiAgICBpZiAoT2JqZWN0KGlzWyJ2IiAvKiBpc01hdHJpeCAqL10pKHgpKSB7CiAgICAgIC8vIGdldCBkaWFnb25hbCBtYXRyaXgKICAgICAgdmFyIGRtID0geC5kaWFnb25hbChrKTsgLy8gY2hlY2sgd2UgbmVlZCB0byByZXR1cm4gYSBtYXRyaXgKCiAgICAgIGlmIChmb3JtYXQgIT09IG51bGwpIHsKICAgICAgICAvLyBjaGVjayB3ZSBuZWVkIHRvIGNoYW5nZSBtYXRyaXggZm9ybWF0CiAgICAgICAgaWYgKGZvcm1hdCAhPT0gZG0uc3RvcmFnZSgpKSB7CiAgICAgICAgICByZXR1cm4gbWF0cml4KGRtLCBmb3JtYXQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGRtOwogICAgICB9CgogICAgICByZXR1cm4gZG0udmFsdWVPZigpOwogICAgfSAvLyB2ZWN0b3Igc2l6ZQoKCiAgICB2YXIgbiA9IE1hdGgubWluKHNbMF0gLSBrU3ViLCBzWzFdIC0ga1N1cGVyKTsgLy8gZGlhZ29uYWwgdmFsdWVzCgogICAgdmFyIHZlY3RvciA9IFtdOyAvLyBsb29wIGRpYWdvbmFsCgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgdmVjdG9yW2ldID0geFtpICsga1N1Yl1baSArIGtTdXBlcl07CiAgICB9IC8vIGNoZWNrIHdlIG5lZWQgdG8gcmV0dXJuIGEgbWF0cml4CgoKICAgIHJldHVybiBmb3JtYXQgIT09IG51bGwgPyBtYXRyaXgodmVjdG9yKSA6IHZlY3RvcjsKICB9Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9tYXRyaXgvZXllLmpzCi8vIFRPRE86IGZ1bmN0aW9uIGV5ZSBpcyByZW1vdmVkIHNpbmNlIHY1LjAuMCAoSnVuZSAyMDE4KS4gUmVtb3ZlIGl0IHNvbWUgZGF5LgoKdmFyIGNyZWF0ZUV5ZSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKCdleWUnLCBbXSwgZnVuY3Rpb24gKCkgewogIHJldHVybiBmdW5jdGlvbiBleWUoKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uICJleWUiIGlzIHJlbmFtZWQgdG8gImlkZW50aXR5IiBzaW5jZSBtYXRoanMgdmVyc2lvbiA1LjAuMC4gJyArICdUbyBrZWVwIGV5ZSB3b3JraW5nLCBjcmVhdGUgYW4gYWxpYXMgZm9yIGl0IHVzaW5nICJtYXRoLmltcG9ydCh7ZXllOiBtYXRoLmlkZW50aXR5fSwge292ZXJyaWRlOiB0cnVlfSkiJyk7CiAgfTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3V0aWxzL2Z1bmN0aW9uLmpzCmZ1bmN0aW9uIGZ1bmN0aW9uX3R5cGVvZihvYmopIHsgIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gInN5bWJvbCIpIHsgZnVuY3Rpb25fdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IGZ1bmN0aW9uX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyAic3ltYm9sIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIGZ1bmN0aW9uX3R5cGVvZihvYmopOyB9CgovLyBmdW5jdGlvbiB1dGlscwoKLyoqCiAqIE1lbW9pemUgYSBnaXZlbiBmdW5jdGlvbiBieSBjYWNoaW5nIHRoZSBjb21wdXRlZCByZXN1bHQuCiAqIFRoZSBjYWNoZSBvZiBhIG1lbW9pemVkIGZ1bmN0aW9uIGNhbiBiZSBjbGVhcmVkIGJ5IGRlbGV0aW5nIHRoZSBgY2FjaGVgCiAqIHByb3BlcnR5IG9mIHRoZSBmdW5jdGlvbi4KICoKICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gICAgICAgICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gdG8gYmUgbWVtb2l6ZWQuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVzdCBiZSBhIHB1cmUgZnVuY3Rpb24uCiAqIEBwYXJhbSB7ZnVuY3Rpb24oYXJnczogQXJyYXkpfSBbaGFzaGVyXSAgQSBjdXN0b20gaGFzaCBidWlsZGVyLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElzIEpTT04uc3RyaW5naWZ5IGJ5IGRlZmF1bHQuCiAqIEByZXR1cm4ge2Z1bmN0aW9ufSAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24KICovCmZ1bmN0aW9uIG1lbW9pemUoZm4sIGhhc2hlcikgewogIHJldHVybiBmdW5jdGlvbiBtZW1vaXplKCkgewogICAgaWYgKGZ1bmN0aW9uX3R5cGVvZihtZW1vaXplLmNhY2hlKSAhPT0gJ29iamVjdCcpIHsKICAgICAgbWVtb2l6ZS5jYWNoZSA9IHt9OwogICAgfQoKICAgIHZhciBhcmdzID0gW107CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTsKICAgIH0KCiAgICB2YXIgaGFzaCA9IGhhc2hlciA/IGhhc2hlcihhcmdzKSA6IEpTT04uc3RyaW5naWZ5KGFyZ3MpOwoKICAgIGlmICghKGhhc2ggaW4gbWVtb2l6ZS5jYWNoZSkpIHsKICAgICAgbWVtb2l6ZS5jYWNoZVtoYXNoXSA9IGZuLmFwcGx5KGZuLCBhcmdzKTsKICAgIH0KCiAgICByZXR1cm4gbWVtb2l6ZS5jYWNoZVtoYXNoXTsKICB9Owp9Ci8qKgogKiBNZW1vaXplIGEgZ2l2ZW4gZnVuY3Rpb24gYnkgY2FjaGluZyBhbGwgcmVzdWx0cyBhbmQgdGhlIGFyZ3VtZW50cywKICogYW5kIGNvbXBhcmluZyBhZ2FpbnN0IHRoZSBhcmd1bWVudHMgb2YgcHJldmlvdXMgcmVzdWx0cyBiZWZvcmUKICogZXhlY3V0aW5nIGFnYWluLgogKiBUaGlzIGlzIGxlc3MgcGVyZm9ybWFudCB0aGFuIGBtZW1vaXplYCB3aGljaCBjYWxjdWxhdGVzIGEgaGFzaCwKICogd2hpY2ggaXMgdmVyeSBmYXN0IHRvIGNvbXBhcmUuIFVzZSBgbWVtb2l6ZUNvbXBhcmVgIG9ubHkgd2hlbiBpdCBpcwogKiBub3QgcG9zc2libGUgdG8gY3JlYXRlIGEgdW5pcXVlIHNlcmlhbGl6YWJsZSBoYXNoIGZyb20gdGhlIGZ1bmN0aW9uCiAqIGFyZ3VtZW50cy4KICogVGhlIGlzRXF1YWwgZnVuY3Rpb24gbXVzdCBjb21wYXJlIHR3byBzZXRzIG9mIGFyZ3VtZW50cwogKiBhbmQgcmV0dXJuIHRydWUgd2hlbiBlcXVhbCAoY2FuIGJlIGEgZGVlcCBlcXVhbGl0eSBjaGVjayBmb3IgZXhhbXBsZSkuCiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuCiAqIEBwYXJhbSB7ZnVuY3Rpb24oYTogKiwgYjogKikgOiBib29sZWFufSBpc0VxdWFsCiAqIEByZXR1cm5zIHtmdW5jdGlvbn0KICovCgpmdW5jdGlvbiBtZW1vaXplQ29tcGFyZShmbiwgaXNFcXVhbCkgewogIHZhciBtZW1vaXplID0gZnVuY3Rpb24gbWVtb2l6ZSgpIHsKICAgIHZhciBhcmdzID0gW107CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTsKICAgIH0KCiAgICBmb3IgKHZhciBjID0gMDsgYyA8IG1lbW9pemUuY2FjaGUubGVuZ3RoOyBjKyspIHsKICAgICAgdmFyIGNhY2hlZCA9IG1lbW9pemUuY2FjaGVbY107CgogICAgICBpZiAoaXNFcXVhbChhcmdzLCBjYWNoZWQuYXJncykpIHsKICAgICAgICAvLyBUT0RPOiBtb3ZlIHRoaXMgY2FjaGUgZW50cnkgdG8gdGhlIHRvcCBzbyByZWNlbnRseSB1c2VkIGVudHJpZXMgbW92ZSB1cD8KICAgICAgICByZXR1cm4gY2FjaGVkLnJlczsKICAgICAgfQogICAgfQoKICAgIHZhciByZXMgPSBmbi5hcHBseShmbiwgYXJncyk7CiAgICBtZW1vaXplLmNhY2hlLnVuc2hpZnQoewogICAgICBhcmdzOiBhcmdzLAogICAgICByZXM6IHJlcwogICAgfSk7CiAgICByZXR1cm4gcmVzOwogIH07CgogIG1lbW9pemUuY2FjaGUgPSBbXTsKICByZXR1cm4gbWVtb2l6ZTsKfQovKioKICogRmluZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYXJndW1lbnRzIGV4cGVjdGVkIGJ5IGEgdHlwZWQgZnVuY3Rpb24uCiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuICAgQSB0eXBlZCBmdW5jdGlvbgogKiBAcmV0dXJuIHtudW1iZXJ9IFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGV4cGVjdGVkIGFyZ3VtZW50cy4KICogICAgICAgICAgICAgICAgICBSZXR1cm5zIC0xIHdoZW4gbm8gc2lnbmF0dXJlcyB3aGVyZSBmb3VuZCBvbiB0aGUgZnVuY3Rpb24uCiAqLwoKZnVuY3Rpb24gbWF4QXJndW1lbnRDb3VudChmbikgewogIHJldHVybiBPYmplY3Qua2V5cyhmbi5zaWduYXR1cmVzIHx8IHt9KS5yZWR1Y2UoZnVuY3Rpb24gKGFyZ3MsIHNpZ25hdHVyZSkgewogICAgdmFyIGNvdW50ID0gKHNpZ25hdHVyZS5tYXRjaCgvLC9nKSB8fCBbXSkubGVuZ3RoICsgMTsKICAgIHJldHVybiBNYXRoLm1heChhcmdzLCBjb3VudCk7CiAgfSwgLTEpOwp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL21hdHJpeC9maWx0ZXIuanMKCgoKdmFyIGZpbHRlcl9uYW1lID0gJ2ZpbHRlcic7CnZhciBmaWx0ZXJfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddOwp2YXIgY3JlYXRlRmlsdGVyID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoZmlsdGVyX25hbWUsIGZpbHRlcl9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDsKCiAgLyoqCiAgICogRmlsdGVyIHRoZSBpdGVtcyBpbiBhbiBhcnJheSBvciBvbmUgZGltZW5zaW9uYWwgbWF0cml4LgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5maWx0ZXIoeCwgdGVzdCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgZnVuY3Rpb24gaXNQb3NpdGl2ZSAoeCkgewogICAqICAgICAgcmV0dXJuIHggPiAwCiAgICogICAgfQogICAqICAgIG1hdGguZmlsdGVyKFs2LCAtMiwgLTEsIDQsIDNdLCBpc1Bvc2l0aXZlKSAvLyByZXR1cm5zIFs2LCA0LCAzXQogICAqCiAgICogICAgbWF0aC5maWx0ZXIoWyIyMyIsICJmb28iLCAiMTAwIiwgIjU1IiwgImJhciJdLCAvWzAtOV0rLykgLy8gcmV0dXJucyBbIjIzIiwgIjEwMCIsICI1NSJdCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGZvckVhY2gsIG1hcCwgc29ydAogICAqCiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICBBIG9uZSBkaW1lbnNpb25hbCBtYXRyaXggb3IgYXJyYXkgdG8gZmlsdGVyCiAgICogQHBhcmFtIHtGdW5jdGlvbiB8IFJlZ0V4cH0gdGVzdAogICAqICAgICAgICBBIGZ1bmN0aW9uIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byB0ZXN0IGl0ZW1zLgogICAqICAgICAgICBBbGwgZW50cmllcyBmb3Igd2hpY2ggYHRlc3RgIHJldHVybnMgdHJ1ZSBhcmUgcmV0dXJuZWQuCiAgICogICAgICAgIFdoZW4gYHRlc3RgIGlzIGEgZnVuY3Rpb24sIGl0IGlzIGludm9rZWQgd2l0aCB0aHJlZSBwYXJhbWV0ZXJzOgogICAqICAgICAgICB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZQogICAqICAgICAgICBtYXRyaXgvYXJyYXkgYmVpbmcgdHJhdmVyc2VkLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLgogICAqIEByZXR1cm4ge01hdHJpeCB8IEFycmF5fSBSZXR1cm5zIHRoZSBmaWx0ZXJlZCBtYXRyaXguCiAgICovCiAgcmV0dXJuIHR5cGVkKCdmaWx0ZXInLCB7CiAgICAnQXJyYXksIGZ1bmN0aW9uJzogX2ZpbHRlckNhbGxiYWNrLAogICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCB0ZXN0KSB7CiAgICAgIHJldHVybiB4LmNyZWF0ZShfZmlsdGVyQ2FsbGJhY2soeC50b0FycmF5KCksIHRlc3QpKTsKICAgIH0sCiAgICAnQXJyYXksIFJlZ0V4cCc6IHV0aWxzX2FycmF5WyJkIiAvKiBmaWx0ZXJSZWdFeHAgKi9dLAogICAgJ01hdHJpeCwgUmVnRXhwJzogZnVuY3Rpb24gTWF0cml4UmVnRXhwKHgsIHRlc3QpIHsKICAgICAgcmV0dXJuIHguY3JlYXRlKE9iamVjdCh1dGlsc19hcnJheVsiZCIgLyogZmlsdGVyUmVnRXhwICovXSkoeC50b0FycmF5KCksIHRlc3QpKTsKICAgIH0KICB9KTsKfSk7Ci8qKgogKiBGaWx0ZXIgdmFsdWVzIGluIGEgY2FsbGJhY2sgZ2l2ZW4gYSBjYWxsYmFjayBmdW5jdGlvbgogKiBAcGFyYW0ge0FycmF5fSB4CiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCiAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIHRoZSBmaWx0ZXJlZCBhcnJheQogKiBAcHJpdmF0ZQogKi8KCmZ1bmN0aW9uIF9maWx0ZXJDYWxsYmFjayh4LCBjYWxsYmFjaykgewogIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzCiAgdmFyIGFyZ3MgPSBtYXhBcmd1bWVudENvdW50KGNhbGxiYWNrKTsKICByZXR1cm4gT2JqZWN0KHV0aWxzX2FycmF5WyJjIiAvKiBmaWx0ZXIgKi9dKSh4LCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkgewogICAgLy8gaW52b2tlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIHRoZSByaWdodCBudW1iZXIgb2YgYXJndW1lbnRzCiAgICBpZiAoYXJncyA9PT0gMSkgewogICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUpOwogICAgfSBlbHNlIGlmIChhcmdzID09PSAyKSB7CiAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSwgW2luZGV4XSk7CiAgICB9IGVsc2UgewogICAgICAvLyAzIG9yIC0xCiAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSwgW2luZGV4XSwgYXJyYXkpOwogICAgfQogIH0pOwp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL21hdHJpeC9mbGF0dGVuLmpzCgoKCnZhciBmbGF0dGVuX25hbWUgPSAnZmxhdHRlbic7CnZhciBmbGF0dGVuX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4J107CnZhciBjcmVhdGVGbGF0dGVuID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoZmxhdHRlbl9uYW1lLCBmbGF0dGVuX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDsKCiAgLyoqCiAgICogRmxhdHRlbiBhIG11bHRpIGRpbWVuc2lvbmFsIG1hdHJpeCBpbnRvIGEgc2luZ2xlIGRpbWVuc2lvbmFsIG1hdHJpeC4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguZmxhdHRlbih4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmZsYXR0ZW4oW1sxLDJdLCBbMyw0XV0pICAgLy8gcmV0dXJucyBbMSwgMiwgMywgNF0KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgY29uY2F0LCByZXNpemUsIHNpemUsIHNxdWVlemUKICAgKgogICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICBNYXRyaXggdG8gYmUgZmxhdHRlbmVkCiAgICogQHJldHVybiB7TWF0cml4IHwgQXJyYXl9IFJldHVybnMgdGhlIGZsYXR0ZW5lZCBtYXRyaXgKICAgKi8KICByZXR1cm4gdHlwZWQoZmxhdHRlbl9uYW1lLCB7CiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkgewogICAgICByZXR1cm4gT2JqZWN0KHV0aWxzX2FycmF5WyJlIiAvKiBmbGF0dGVuICovXSkoT2JqZWN0KHV0aWxzX29iamVjdFsiYSIgLyogY2xvbmUgKi9dKSh4KSk7CiAgICB9LAogICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkgewogICAgICB2YXIgZmxhdCA9IE9iamVjdCh1dGlsc19hcnJheVsiZSIgLyogZmxhdHRlbiAqL10pKE9iamVjdCh1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSkoeC50b0FycmF5KCkpKTsgLy8gVE9ETzogcmV0dXJuIHRoZSBzYW1lIG1hdHJpeCB0eXBlIGFzIHgKCiAgICAgIHJldHVybiBtYXRyaXgoZmxhdCk7CiAgICB9CiAgfSk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9tYXRyaXgvZm9yRWFjaC5qcwoKCgp2YXIgZm9yRWFjaF9uYW1lID0gJ2ZvckVhY2gnOwp2YXIgZm9yRWFjaF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107CnZhciBjcmVhdGVGb3JFYWNoID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoZm9yRWFjaF9uYW1lLCBmb3JFYWNoX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkOwoKICAvKioKICAgKiBJdGVyYXRlIG92ZXIgYWxsIGVsZW1lbnRzIG9mIGEgbWF0cml4L2FycmF5LCBhbmQgZXhlY3V0ZXMgdGhlIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5mb3JFYWNoKHgsIGNhbGxiYWNrKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmZvckVhY2goWzEsIDIsIDNdLCBmdW5jdGlvbih2YWx1ZSkgewogICAqICAgICAgY29uc29sZS5sb2codmFsdWUpCiAgICogICAgfSkKICAgKiAgICAvLyBvdXRwdXRzIDEsIDIsIDMKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgZmlsdGVyLCBtYXAsIHNvcnQKICAgKgogICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICAgVGhlIG1hdHJpeCB0byBpdGVyYXRlIG9uLgogICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCB0aHJlZQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXgKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIE1hdHJpeC9hcnJheSBiZWluZyB0cmF2ZXJzZWQuCiAgICovCiAgcmV0dXJuIHR5cGVkKGZvckVhY2hfbmFtZSwgewogICAgJ0FycmF5LCBmdW5jdGlvbic6IGZvckVhY2hfZm9yRWFjaCwKICAgICdNYXRyaXgsIGZ1bmN0aW9uJzogZnVuY3Rpb24gTWF0cml4RnVuY3Rpb24oeCwgY2FsbGJhY2spIHsKICAgICAgcmV0dXJuIHguZm9yRWFjaChjYWxsYmFjayk7CiAgICB9CiAgfSk7Cn0pOwovKioKICogZm9yRWFjaCBmb3IgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheQogKiBAcGFyYW0ge0FycmF5fSBhcnJheQogKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjawogKiBAcHJpdmF0ZQogKi8KCmZ1bmN0aW9uIGZvckVhY2hfZm9yRWFjaChhcnJheSwgY2FsbGJhY2spIHsKICAvLyBmaWd1cmUgb3V0IHdoYXQgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhwZWN0cwogIHZhciBhcmdzID0gbWF4QXJndW1lbnRDb3VudChjYWxsYmFjayk7CgogIHZhciByZWN1cnNlID0gZnVuY3Rpb24gcmVjdXJzZSh2YWx1ZSwgaW5kZXgpIHsKICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgewogICAgICBPYmplY3QodXRpbHNfYXJyYXlbImYiIC8qIGZvckVhY2ggKi9dKSh2YWx1ZSwgZnVuY3Rpb24gKGNoaWxkLCBpKSB7CiAgICAgICAgLy8gd2UgY3JlYXRlIGEgY29weSBvZiB0aGUgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCB0aGUgbmV3IGluZGV4IHZhbHVlCiAgICAgICAgcmVjdXJzZShjaGlsZCwgaW5kZXguY29uY2F0KGkpKTsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICAvLyBpbnZva2UgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHMKICAgICAgaWYgKGFyZ3MgPT09IDEpIHsKICAgICAgICBjYWxsYmFjayh2YWx1ZSk7CiAgICAgIH0gZWxzZSBpZiAoYXJncyA9PT0gMikgewogICAgICAgIGNhbGxiYWNrKHZhbHVlLCBpbmRleCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gMyBvciAtMQogICAgICAgIGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgYXJyYXkpOwogICAgICB9CiAgICB9CiAgfTsKCiAgcmVjdXJzZShhcnJheSwgW10pOwp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL21hdHJpeC9nZXRNYXRyaXhEYXRhVHlwZS5qcwoKCgp2YXIgZ2V0TWF0cml4RGF0YVR5cGVfbmFtZSA9ICdnZXRNYXRyaXhEYXRhVHlwZSc7CnZhciBnZXRNYXRyaXhEYXRhVHlwZV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107CnZhciBjcmVhdGVHZXRNYXRyaXhEYXRhVHlwZSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGdldE1hdHJpeERhdGFUeXBlX25hbWUsIGdldE1hdHJpeERhdGFUeXBlX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkOwoKICAvKioKICAgKiBGaW5kIHRoZSBkYXRhIHR5cGUgb2YgYWxsIGVsZW1lbnRzIGluIGEgbWF0cml4IG9yIGFycmF5LAogICAqIGZvciBleGFtcGxlICdudW1iZXInIGlmIGFsbCBpdGVtcyBhcmUgYSBudW1iZXIgYW5kICdDb21wbGV4JyBpZiBhbGwgdmFsdWVzCiAgICogYXJlIGNvbXBsZXggbnVtYmVycy4KICAgKiBJZiBhIG1hdHJpeCBjb250YWlucyBtb3JlIHRoYW4gb25lIGRhdGEgdHlwZSwgaXQgd2lsbCByZXR1cm4gJ21peGVkJy4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgY29uc3QgeCA9IFsgWzEsIDIsIDNdLCBbNCwgNSwgNl0gXQogICAqICAgIGNvbnN0IG1peGVkWCA9IFsgWzEsIHRydWVdLCBbMiwgM10gXQogICAqICAgIGNvbnN0IGZyYWN0aW9uWCA9IFsgW21hdGguZnJhY3Rpb24oMSwgMyldLCBbbWF0aC5mcmFjdGlvbigxLCAzXSBdCiAgICogICAgY29uc3QgdW5pdFggPSBbIFttYXRoLnVuaXQoJzVjbScpXSwgW21hdGgudW5pdCgnNWNtJyldIF0KICAgKiAgICBjb25zdCBiaWdOdW1iZXJYID0gWyBbbWF0aC5iaWdudW1iZXIoMSldLCBbbWF0aC5iaWdudW1iZXIoMCldIF0KICAgKiAgICBjb25zdCBzcGFyc2UgPSBtYXRoLnNwYXJzZSh4KQogICAqICAgIGNvbnN0IGRlbnNlID0gbWF0aC5tYXRyaXgoeCkKICAgKiAgICBtYXRoLmdldE1hdHJpeERhdGFUeXBlKHgpICAgLy8gcmV0dXJucyAnbnVtYmVyJwogICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUoc3BhcnNlKSAgIC8vIHJldHVybnMgJ251bWJlcicKICAgKiAgICBtYXRoLmdldE1hdHJpeERhdGFUeXBlKGRlbnNlKSAgIC8vIHJldHVybnMgJ251bWJlcicKICAgKiAgICBtYXRoLmdldE1hdHJpeERhdGFUeXBlKG1peGVkWCkgLy8gcmV0dXJucyAnbWl4ZWQnCiAgICogICAgbWF0aC5nZXRNYXRyaXhEYXRhVHlwZShmcmFjdGlvblgpIC8vIHJldHVybnMgJ0ZyYWN0aW9uJwogICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUodW5pdFgpIC8vIHJldHVybnMgJ1VuaXQnCiAgICogICAgbWF0aC5nZXRNYXRyaXhEYXRhVHlwZShiaWdOdW1iZXJYKSAvLyByZXR1cm4gJ0JpZ051bWJlcicKICAgKgogICAqIFNlZSBhbHNvOgogICAqICBTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4CiAgICoKICAgKiBAcGFyYW0gey4uLk1hdHJpeCB8IEFycmF5fSB4ICAgVGhlIE1hdHJpeCB3aXRoIHZhbHVlcy4KICAgKgogICAqIEByZXR1cm4ge3N0cmluZ30gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeCB0eXBlCiAgICovCiAgcmV0dXJuIHR5cGVkKGdldE1hdHJpeERhdGFUeXBlX25hbWUsIHsKICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7CiAgICAgIHJldHVybiBPYmplY3QodXRpbHNfYXJyYXlbImgiIC8qIGdldEFycmF5RGF0YVR5cGUgKi9dKSh4LCBpc1siTSIgLyogdHlwZU9mICovXSk7CiAgICB9LAogICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkgewogICAgICByZXR1cm4geC5nZXREYXRhVHlwZSgpOwogICAgfQogIH0pOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5LmpzCgoKCgp2YXIgaWRlbnRpdHlfbmFtZSA9ICdpZGVudGl0eSc7CnZhciBpZGVudGl0eV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnQmlnTnVtYmVyJywgJ0RlbnNlTWF0cml4JywgJ1NwYXJzZU1hdHJpeCddOwp2YXIgY3JlYXRlSWRlbnRpdHkgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShpZGVudGl0eV9uYW1lLCBpZGVudGl0eV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LAogICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlciwKICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4LAogICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDsKCiAgLyoqCiAgICogQ3JlYXRlIGEgMi1kaW1lbnNpb25hbCBpZGVudGl0eSBtYXRyaXggd2l0aCBzaXplIG0geCBuIG9yIG4geCBuLgogICAqIFRoZSBtYXRyaXggaGFzIG9uZXMgb24gdGhlIGRpYWdvbmFsIGFuZCB6ZXJvcyBlbHNld2hlcmUuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmlkZW50aXR5KG4pCiAgICogICAgbWF0aC5pZGVudGl0eShuLCBmb3JtYXQpCiAgICogICAgbWF0aC5pZGVudGl0eShtLCBuKQogICAqICAgIG1hdGguaWRlbnRpdHkobSwgbiwgZm9ybWF0KQogICAqICAgIG1hdGguaWRlbnRpdHkoW20sIG5dKQogICAqICAgIG1hdGguaWRlbnRpdHkoW20sIG5dLCBmb3JtYXQpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguaWRlbnRpdHkoMykgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCAwLCAwXSwgWzAsIDEsIDBdLCBbMCwgMCwgMV1dCiAgICogICAgbWF0aC5pZGVudGl0eSgzLCAyKSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbWzEsIDBdLCBbMCwgMV0sIFswLCAwXV0KICAgKgogICAqICAgIGNvbnN0IEEgPSBbWzEsIDIsIDNdLCBbNCwgNSwgNl1dCiAgICogICAgbWF0aC5pZGVudGl0eShtYXRoLnNpemUoQSkpICAgICAgICAgLy8gcmV0dXJucyBbWzEsIDAsIDBdLCBbMCwgMSwgMF1dCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGRpYWcsIG9uZXMsIHplcm9zLCBzaXplLCByYW5nZQogICAqCiAgICogQHBhcmFtIHsuLi5udW1iZXIgfCBNYXRyaXggfCBBcnJheX0gc2l6ZSAgIFRoZSBzaXplIGZvciB0aGUgbWF0cml4CiAgICogQHBhcmFtIHtzdHJpbmd9IFtmb3JtYXRdICAgICAgICAgICAgICAgICAgIFRoZSBNYXRyaXggc3RvcmFnZSBmb3JtYXQKICAgKgogICAqIEByZXR1cm4ge01hdHJpeCB8IEFycmF5IHwgbnVtYmVyfSBBIG1hdHJpeCB3aXRoIG9uZXMgb24gdGhlIGRpYWdvbmFsLgogICAqLwogIHJldHVybiB0eXBlZChpZGVudGl0eV9uYW1lLCB7CiAgICAnJzogZnVuY3Rpb24gXygpIHsKICAgICAgcmV0dXJuIGNvbmZpZy5tYXRyaXggPT09ICdNYXRyaXgnID8gbWF0cml4KFtdKSA6IFtdOwogICAgfSwKICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKGZvcm1hdCkgewogICAgICByZXR1cm4gbWF0cml4KGZvcm1hdCk7CiAgICB9LAogICAgJ251bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlcihyb3dzKSB7CiAgICAgIHJldHVybiBfaWRlbnRpdHkocm93cywgcm93cywgY29uZmlnLm1hdHJpeCA9PT0gJ01hdHJpeCcgPyAnZGVuc2UnIDogdW5kZWZpbmVkKTsKICAgIH0sCiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBzdHJpbmcnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJTdHJpbmcocm93cywgZm9ybWF0KSB7CiAgICAgIHJldHVybiBfaWRlbnRpdHkocm93cywgcm93cywgZm9ybWF0KTsKICAgIH0sCiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJOdW1iZXJCaWdOdW1iZXIocm93cywgY29scykgewogICAgICByZXR1cm4gX2lkZW50aXR5KHJvd3MsIGNvbHMsIGNvbmZpZy5tYXRyaXggPT09ICdNYXRyaXgnID8gJ2RlbnNlJyA6IHVuZGVmaW5lZCk7CiAgICB9LAogICAgJ251bWJlciB8IEJpZ051bWJlciwgbnVtYmVyIHwgQmlnTnVtYmVyLCBzdHJpbmcnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJOdW1iZXJCaWdOdW1iZXJTdHJpbmcocm93cywgY29scywgZm9ybWF0KSB7CiAgICAgIHJldHVybiBfaWRlbnRpdHkocm93cywgY29scywgZm9ybWF0KTsKICAgIH0sCiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoc2l6ZSkgewogICAgICByZXR1cm4gX2lkZW50aXR5VmVjdG9yKHNpemUpOwogICAgfSwKICAgICdBcnJheSwgc3RyaW5nJzogZnVuY3Rpb24gQXJyYXlTdHJpbmcoc2l6ZSwgZm9ybWF0KSB7CiAgICAgIHJldHVybiBfaWRlbnRpdHlWZWN0b3Ioc2l6ZSwgZm9ybWF0KTsKICAgIH0sCiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeChzaXplKSB7CiAgICAgIHJldHVybiBfaWRlbnRpdHlWZWN0b3Ioc2l6ZS52YWx1ZU9mKCksIHNpemUuc3RvcmFnZSgpKTsKICAgIH0sCiAgICAnTWF0cml4LCBzdHJpbmcnOiBmdW5jdGlvbiBNYXRyaXhTdHJpbmcoc2l6ZSwgZm9ybWF0KSB7CiAgICAgIHJldHVybiBfaWRlbnRpdHlWZWN0b3Ioc2l6ZS52YWx1ZU9mKCksIGZvcm1hdCk7CiAgICB9CiAgfSk7CgogIGZ1bmN0aW9uIF9pZGVudGl0eVZlY3RvcihzaXplLCBmb3JtYXQpIHsKICAgIHN3aXRjaCAoc2l6ZS5sZW5ndGgpIHsKICAgICAgY2FzZSAwOgogICAgICAgIHJldHVybiBmb3JtYXQgPyBtYXRyaXgoZm9ybWF0KSA6IFtdOwoKICAgICAgY2FzZSAxOgogICAgICAgIHJldHVybiBfaWRlbnRpdHkoc2l6ZVswXSwgc2l6ZVswXSwgZm9ybWF0KTsKCiAgICAgIGNhc2UgMjoKICAgICAgICByZXR1cm4gX2lkZW50aXR5KHNpemVbMF0sIHNpemVbMV0sIGZvcm1hdCk7CgogICAgICBkZWZhdWx0OgogICAgICAgIHRocm93IG5ldyBFcnJvcignVmVjdG9yIGNvbnRhaW5pbmcgdHdvIHZhbHVlcyBleHBlY3RlZCcpOwogICAgfQogIH0KICAvKioKICAgKiBDcmVhdGUgYW4gaWRlbnRpdHkgbWF0cml4CiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IHJvd3MKICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gY29scwogICAqIEBwYXJhbSB7c3RyaW5nfSBbZm9ybWF0XQogICAqIEByZXR1cm5zIHtNYXRyaXh9CiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIF9pZGVudGl0eShyb3dzLCBjb2xzLCBmb3JtYXQpIHsKICAgIC8vIEJpZ051bWJlciBjb25zdHJ1Y3RvciB3aXRoIHRoZSByaWdodCBwcmVjaXNpb24KICAgIHZhciBCaWcgPSBPYmplY3QoaXNbImUiIC8qIGlzQmlnTnVtYmVyICovXSkocm93cykgfHwgT2JqZWN0KGlzWyJlIiAvKiBpc0JpZ051bWJlciAqL10pKGNvbHMpID8gQmlnTnVtYmVyIDogbnVsbDsKICAgIGlmIChPYmplY3QoaXNbImUiIC8qIGlzQmlnTnVtYmVyICovXSkocm93cykpIHJvd3MgPSByb3dzLnRvTnVtYmVyKCk7CiAgICBpZiAoT2JqZWN0KGlzWyJlIiAvKiBpc0JpZ051bWJlciAqL10pKGNvbHMpKSBjb2xzID0gY29scy50b051bWJlcigpOwoKICAgIGlmICghT2JqZWN0KHV0aWxzX251bWJlclsiaSIgLyogaXNJbnRlZ2VyICovXSkocm93cykgfHwgcm93cyA8IDEpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIGlkZW50aXR5IG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTsKICAgIH0KCiAgICBpZiAoIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKGNvbHMpIHx8IGNvbHMgPCAxKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiBpZGVudGl0eSBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzJyk7CiAgICB9CgogICAgdmFyIG9uZSA9IEJpZyA/IG5ldyBCaWdOdW1iZXIoMSkgOiAxOwogICAgdmFyIGRlZmF1bHRWYWx1ZSA9IEJpZyA/IG5ldyBCaWcoMCkgOiAwOwogICAgdmFyIHNpemUgPSBbcm93cywgY29sc107IC8vIGNoZWNrIHdlIG5lZWQgdG8gcmV0dXJuIGEgbWF0cml4CgogICAgaWYgKGZvcm1hdCkgewogICAgICAvLyBjcmVhdGUgZGlhZ29uYWwgbWF0cml4ICh1c2Ugb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciBzdG9yYWdlIGZvcm1hdCkKICAgICAgaWYgKGZvcm1hdCA9PT0gJ3NwYXJzZScpIHsKICAgICAgICByZXR1cm4gU3BhcnNlTWF0cml4LmRpYWdvbmFsKHNpemUsIG9uZSwgMCwgZGVmYXVsdFZhbHVlKTsKICAgICAgfQoKICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RlbnNlJykgewogICAgICAgIHJldHVybiBEZW5zZU1hdHJpeC5kaWFnb25hbChzaXplLCBvbmUsIDAsIGRlZmF1bHRWYWx1ZSk7CiAgICAgIH0KCiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gbWF0cml4IHR5cGUgXCIiLmNvbmNhdChmb3JtYXQsICJcIiIpKTsKICAgIH0gLy8gY3JlYXRlIGFuZCByZXNpemUgYXJyYXkKCgogICAgdmFyIHJlcyA9IE9iamVjdCh1dGlsc19hcnJheVsibyIgLyogcmVzaXplICovXSkoW10sIHNpemUsIGRlZmF1bHRWYWx1ZSk7IC8vIGZpbGwgaW4gb25lcyBvbiB0aGUgZGlhZ29uYWwKCiAgICB2YXIgbWluaW11bSA9IHJvd3MgPCBjb2xzID8gcm93cyA6IGNvbHM7IC8vIGZpbGwgZGlhZ29uYWwKCiAgICBmb3IgKHZhciBkID0gMDsgZCA8IG1pbmltdW07IGQrKykgewogICAgICByZXNbZF1bZF0gPSBvbmU7CiAgICB9CgogICAgcmV0dXJuIHJlczsKICB9Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9tYXRyaXgva3Jvbi5qcwoKCnZhciBrcm9uX25hbWUgPSAna3Jvbic7CnZhciBrcm9uX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ211bHRpcGx5U2NhbGFyJ107CnZhciBjcmVhdGVLcm9uID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoa3Jvbl9uYW1lLCBrcm9uX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCwKICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyOwoKICAvKioKICAgICAqIENhbGN1bGF0ZXMgdGhlIGtyb25lY2tlciBwcm9kdWN0IG9mIDIgbWF0cmljZXMgb3IgdmVjdG9ycy4KICAgICAqCiAgICAgKiBOT1RFOiBJZiBhIG9uZSBkaW1lbnNpb25hbCB2ZWN0b3IgLyBtYXRyaXggaXMgZ2l2ZW4sIGl0IHdpbGwgYmUKICAgICAqIHdyYXBwZWQgc28gaXRzIHR3byBkaW1lbnNpb25zLgogICAgICogU2VlIHRoZSBleGFtcGxlcy4KICAgICAqCiAgICAgKiBTeW50YXg6CiAgICAgKgogICAgICogICAgbWF0aC5rcm9uKHgsIHkpCiAgICAgKgogICAgICogRXhhbXBsZXM6CiAgICAgKgogICAgICogICAgbWF0aC5rcm9uKFtbMSwgMF0sIFswLCAxXV0sIFtbMSwgMl0sIFszLCA0XV0pCiAgICAgKiAgICAvLyByZXR1cm5zIFsgWyAxLCAyLCAwLCAwIF0sIFsgMywgNCwgMCwgMCBdLCBbIDAsIDAsIDEsIDIgXSwgWyAwLCAwLCAzLCA0IF0gXQogICAgICoKICAgICAqICAgIG1hdGgua3JvbihbMSwxXSwgWzIsMyw0XSkKICAgICAqICAgIC8vIHJldHVybnMgWyBbIDIsIDMsIDQsIDIsIDMsIDQgXSBdCiAgICAgKgogICAgICogU2VlIGFsc286CiAgICAgKgogICAgICogICAgbXVsdGlwbHksIGRvdCwgY3Jvc3MKICAgICAqCiAgICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0geCAgICAgRmlyc3QgdmVjdG9yCiAgICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0geSAgICAgU2Vjb25kIHZlY3RvcgogICAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgICAgIFJldHVybnMgdGhlIGtyb25lY2tlciBwcm9kdWN0IG9mIGB4YCBhbmQgYHlgCiAgICAgKi8KICByZXR1cm4gdHlwZWQoa3Jvbl9uYW1lLCB7CiAgICAnTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gbWF0cml4KF9rcm9uKHgudG9BcnJheSgpLCB5LnRvQXJyYXkoKSkpOwogICAgfSwKICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkgewogICAgICByZXR1cm4gbWF0cml4KF9rcm9uKHgudG9BcnJheSgpLCB5KSk7CiAgICB9LAogICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBtYXRyaXgoX2tyb24oeCwgeS50b0FycmF5KCkpKTsKICAgIH0sCiAgICAnQXJyYXksIEFycmF5JzogX2tyb24KICB9KTsKICAvKioKICAgICAqIENhbGN1bGF0ZSB0aGUga3JvbmVja2VyIHByb2R1Y3Qgb2YgdHdvIG1hdHJpY2VzIC8gdmVjdG9ycwogICAgICogQHBhcmFtIHtBcnJheX0gYSAgRmlyc3QgdmVjdG9yCiAgICAgKiBAcGFyYW0ge0FycmF5fSBiICBTZWNvbmQgdmVjdG9yCiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtyb25lY2tlciBwcm9kdWN0IG9mIHggYW5kIHkKICAgICAqIEBwcml2YXRlCiAgICAgKi8KCiAgZnVuY3Rpb24gX2tyb24oYSwgYikgewogICAgLy8gRGVhbCB3aXRoIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBtYXRyaWNpZXMuCiAgICBpZiAoT2JqZWN0KHV0aWxzX2FycmF5WyJhIiAvKiBhcnJheVNpemUgKi9dKShhKS5sZW5ndGggPT09IDEpIHsKICAgICAgLy8gV3JhcCBpdCBpbiBhIDJEIE1hdHJpeAogICAgICBhID0gW2FdOwogICAgfQoKICAgIGlmIChPYmplY3QodXRpbHNfYXJyYXlbImEiIC8qIGFycmF5U2l6ZSAqL10pKGIpLmxlbmd0aCA9PT0gMSkgewogICAgICAvLyBXcmFwIGl0IGluIGEgMkQgTWF0cml4CiAgICAgIGIgPSBbYl07CiAgICB9CgogICAgaWYgKE9iamVjdCh1dGlsc19hcnJheVsiYSIgLyogYXJyYXlTaXplICovXSkoYSkubGVuZ3RoID4gMiB8fCBPYmplY3QodXRpbHNfYXJyYXlbImEiIC8qIGFycmF5U2l6ZSAqL10pKGIpLmxlbmd0aCA+IDIpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlY3RvcnMgd2l0aCBkaW1lbnNpb25zIGdyZWF0ZXIgdGhlbiAyIGFyZSBub3Qgc3VwcG9ydGVkIGV4cGVjdGVkICcgKyAnKFNpemUgeCA9ICcgKyBKU09OLnN0cmluZ2lmeShhLmxlbmd0aCkgKyAnLCB5ID0gJyArIEpTT04uc3RyaW5naWZ5KGIubGVuZ3RoKSArICcpJyk7CiAgICB9CgogICAgdmFyIHQgPSBbXTsKICAgIHZhciByID0gW107CiAgICByZXR1cm4gYS5tYXAoZnVuY3Rpb24gKGEpIHsKICAgICAgcmV0dXJuIGIubWFwKGZ1bmN0aW9uIChiKSB7CiAgICAgICAgciA9IFtdOwogICAgICAgIHQucHVzaChyKTsKICAgICAgICByZXR1cm4gYS5tYXAoZnVuY3Rpb24gKHkpIHsKICAgICAgICAgIHJldHVybiBiLm1hcChmdW5jdGlvbiAoeCkgewogICAgICAgICAgICByZXR1cm4gci5wdXNoKG11bHRpcGx5U2NhbGFyKHksIHgpKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0pICYmIHQ7CiAgfQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vbWF0cml4L21hcC5qcwoKCnZhciBtYXBfbmFtZSA9ICdtYXAnOwp2YXIgbWFwX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnXTsKdmFyIGNyZWF0ZU1hcCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKG1hcF9uYW1lLCBtYXBfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7CgogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBtYXRyaXggb3IgYXJyYXkgd2l0aCB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhlY3V0ZWQgb24KICAgKiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXgvYXJyYXkuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLm1hcCh4LCBjYWxsYmFjaykKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5tYXAoWzEsIDIsIDNdLCBmdW5jdGlvbih2YWx1ZSkgewogICAqICAgICAgcmV0dXJuIHZhbHVlICogdmFsdWUKICAgKiAgICB9KSAgLy8gcmV0dXJucyBbMSwgNCwgOV0KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgZmlsdGVyLCBmb3JFYWNoLCBzb3J0CiAgICoKICAgKiBAcGFyYW0ge01hdHJpeCB8IEFycmF5fSB4ICAgIFRoZSBtYXRyaXggdG8gaXRlcmF0ZSBvbi4KICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBtZXRob2QgaXMgaW52b2tlZCB3aXRoIHRocmVlCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGVsZW1lbnQsIGFuZCB0aGUgbWF0cml4IGJlaW5nIHRyYXZlcnNlZC4KICAgKiBAcmV0dXJuIHtNYXRyaXggfCBhcnJheX0gICAgIFRyYW5zZm9ybWVkIG1hcCBvZiB4CiAgICovCiAgcmV0dXJuIHR5cGVkKG1hcF9uYW1lLCB7CiAgICAnQXJyYXksIGZ1bmN0aW9uJzogbWFwX21hcCwKICAgICdNYXRyaXgsIGZ1bmN0aW9uJzogZnVuY3Rpb24gTWF0cml4RnVuY3Rpb24oeCwgY2FsbGJhY2spIHsKICAgICAgcmV0dXJuIHgubWFwKGNhbGxiYWNrKTsKICAgIH0KICB9KTsKfSk7Ci8qKgogKiBNYXAgZm9yIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXkKICogQHBhcmFtIHtBcnJheX0gYXJyYXkKICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sKICogQHJldHVybiB7QXJyYXl9CiAqIEBwcml2YXRlCiAqLwoKZnVuY3Rpb24gbWFwX21hcChhcnJheSwgY2FsbGJhY2spIHsKICAvLyBmaWd1cmUgb3V0IHdoYXQgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhwZWN0cwogIHZhciBhcmdzID0gbWF4QXJndW1lbnRDb3VudChjYWxsYmFjayk7CgogIHZhciByZWN1cnNlID0gZnVuY3Rpb24gcmVjdXJzZSh2YWx1ZSwgaW5kZXgpIHsKICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgewogICAgICByZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uIChjaGlsZCwgaSkgewogICAgICAgIC8vIHdlIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGluZGV4IGFycmF5IGFuZCBhcHBlbmQgdGhlIG5ldyBpbmRleCB2YWx1ZQogICAgICAgIHJldHVybiByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSkpOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIGludm9rZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3VtZW50cwogICAgICBpZiAoYXJncyA9PT0gMSkgewogICAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSk7CiAgICAgIH0gZWxzZSBpZiAoYXJncyA9PT0gMikgewogICAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSwgaW5kZXgpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIDMgb3IgLTEKICAgICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIGluZGV4LCBhcnJheSk7CiAgICAgIH0KICAgIH0KICB9OwoKICByZXR1cm4gcmVjdXJzZShhcnJheSwgW10pOwp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL21hdHJpeC9vbmVzLmpzCgoKCgp2YXIgb25lc19uYW1lID0gJ29uZXMnOwp2YXIgb25lc19kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnQmlnTnVtYmVyJ107CnZhciBjcmVhdGVPbmVzID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkob25lc19uYW1lLCBvbmVzX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBjb25maWcgPSBfcmVmLmNvbmZpZywKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyOwoKICAvKioKICAgKiBDcmVhdGUgYSBtYXRyaXggZmlsbGVkIHdpdGggb25lcy4gVGhlIGNyZWF0ZWQgbWF0cml4IGNhbiBoYXZlIG9uZSBvcgogICAqIG11bHRpcGxlIGRpbWVuc2lvbnMuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLm9uZXMobSkKICAgKiAgICBtYXRoLm9uZXMobSwgZm9ybWF0KQogICAqICAgIG1hdGgub25lcyhtLCBuKQogICAqICAgIG1hdGgub25lcyhtLCBuLCBmb3JtYXQpCiAgICogICAgbWF0aC5vbmVzKFttLCBuXSkKICAgKiAgICBtYXRoLm9uZXMoW20sIG5dLCBmb3JtYXQpCiAgICogICAgbWF0aC5vbmVzKFttLCBuLCBwLCAuLi5dKQogICAqICAgIG1hdGgub25lcyhbbSwgbiwgcCwgLi4uXSwgZm9ybWF0KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLm9uZXMoMykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMSwgMV0KICAgKiAgICBtYXRoLm9uZXMoMywgMikgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbWzEsIDFdLCBbMSwgMV0sIFsxLCAxXV0KICAgKiAgICBtYXRoLm9uZXMoMywgMiwgJ2RlbnNlJykgICAgICAgLy8gcmV0dXJucyBEZW5zZSBNYXRyaXggW1sxLCAxXSwgWzEsIDFdLCBbMSwgMV1dCiAgICoKICAgKiAgICBjb25zdCBBID0gW1sxLCAyLCAzXSwgWzQsIDUsIDZdXQogICAqICAgIG1hdGgub25lcyhtYXRoLnNpemUoQSkpICAgICAgIC8vIHJldHVybnMgW1sxLCAxLCAxXSwgWzEsIDEsIDFdXQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICB6ZXJvcywgaWRlbnRpdHksIHNpemUsIHJhbmdlCiAgICoKICAgKiBAcGFyYW0gey4uLm51bWJlciB8IEFycmF5fSBzaXplICAgIFRoZSBzaXplIG9mIGVhY2ggZGltZW5zaW9uIG9mIHRoZSBtYXRyaXgKICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF0gICAgICAgICAgIFRoZSBNYXRyaXggc3RvcmFnZSBmb3JtYXQKICAgKgogICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4IHwgbnVtYmVyfSAgQSBtYXRyaXggZmlsbGVkIHdpdGggb25lcwogICAqLwogIHJldHVybiB0eXBlZCgnb25lcycsIHsKICAgICcnOiBmdW5jdGlvbiBfKCkgewogICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IF9vbmVzKFtdKSA6IF9vbmVzKFtdLCAnZGVmYXVsdCcpOwogICAgfSwKICAgIC8vIG1hdGgub25lcyhtLCBuLCBwLCAuLi4sIGZvcm1hdCkKICAgIC8vIFRPRE86IG1vcmUgYWNjdXJhdGUgc2lnbmF0dXJlICcuLi5udW1iZXIgfCBCaWdOdW1iZXIsIHN0cmluZycgYXMgc29vbiBhcyB0eXBlZC1mdW5jdGlvbiBzdXBwb3J0cyB0aGlzCiAgICAnLi4ubnVtYmVyIHwgQmlnTnVtYmVyIHwgc3RyaW5nJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyU3RyaW5nKHNpemUpIHsKICAgICAgdmFyIGxhc3QgPSBzaXplW3NpemUubGVuZ3RoIC0gMV07CgogICAgICBpZiAodHlwZW9mIGxhc3QgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgdmFyIGZvcm1hdCA9IHNpemUucG9wKCk7CiAgICAgICAgcmV0dXJuIF9vbmVzKHNpemUsIGZvcm1hdCk7CiAgICAgIH0gZWxzZSBpZiAoY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JykgewogICAgICAgIHJldHVybiBfb25lcyhzaXplKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gX29uZXMoc2l6ZSwgJ2RlZmF1bHQnKTsKICAgICAgfQogICAgfSwKICAgIEFycmF5OiBfb25lcywKICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHNpemUpIHsKICAgICAgdmFyIGZvcm1hdCA9IHNpemUuc3RvcmFnZSgpOwogICAgICByZXR1cm4gX29uZXMoc2l6ZS52YWx1ZU9mKCksIGZvcm1hdCk7CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheU1hdHJpeFN0cmluZyhzaXplLCBmb3JtYXQpIHsKICAgICAgcmV0dXJuIF9vbmVzKHNpemUudmFsdWVPZigpLCBmb3JtYXQpOwogICAgfQogIH0pOwogIC8qKgogICAqIENyZWF0ZSBhbiBBcnJheSBvciBNYXRyaXggd2l0aCBvbmVzCiAgICogQHBhcmFtIHtBcnJheX0gc2l6ZQogICAqIEBwYXJhbSB7c3RyaW5nfSBbZm9ybWF0PSdkZWZhdWx0J10KICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0KICAgKiBAcHJpdmF0ZQogICAqLwoKICBmdW5jdGlvbiBfb25lcyhzaXplLCBmb3JtYXQpIHsKICAgIHZhciBoYXNCaWdOdW1iZXJzID0gX25vcm1hbGl6ZShzaXplKTsKCiAgICB2YXIgZGVmYXVsdFZhbHVlID0gaGFzQmlnTnVtYmVycyA/IG5ldyBCaWdOdW1iZXIoMSkgOiAxOwoKICAgIF92YWxpZGF0ZShzaXplKTsKCiAgICBpZiAoZm9ybWF0KSB7CiAgICAgIC8vIHJldHVybiBhIG1hdHJpeAogICAgICB2YXIgbSA9IG1hdHJpeChmb3JtYXQpOwoKICAgICAgaWYgKHNpemUubGVuZ3RoID4gMCkgewogICAgICAgIHJldHVybiBtLnJlc2l6ZShzaXplLCBkZWZhdWx0VmFsdWUpOwogICAgICB9CgogICAgICByZXR1cm4gbTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIHJldHVybiBhbiBBcnJheQogICAgICB2YXIgYXJyID0gW107CgogICAgICBpZiAoc2l6ZS5sZW5ndGggPiAwKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdCh1dGlsc19hcnJheVsibyIgLyogcmVzaXplICovXSkoYXJyLCBzaXplLCBkZWZhdWx0VmFsdWUpOwogICAgICB9CgogICAgICByZXR1cm4gYXJyOwogICAgfQogIH0gLy8gcmVwbGFjZSBCaWdOdW1iZXJzIHdpdGggbnVtYmVycywgcmV0dXJucyB0cnVlIGlmIHNpemUgY29udGFpbmVkIEJpZ051bWJlcnMKCgogIGZ1bmN0aW9uIF9ub3JtYWxpemUoc2l6ZSkgewogICAgdmFyIGhhc0JpZ051bWJlcnMgPSBmYWxzZTsKICAgIHNpemUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnIpIHsKICAgICAgaWYgKE9iamVjdChpc1siZSIgLyogaXNCaWdOdW1iZXIgKi9dKSh2YWx1ZSkpIHsKICAgICAgICBoYXNCaWdOdW1iZXJzID0gdHJ1ZTsKICAgICAgICBhcnJbaW5kZXhdID0gdmFsdWUudG9OdW1iZXIoKTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gaGFzQmlnTnVtYmVyczsKICB9IC8vIHZhbGlkYXRlIGFyZ3VtZW50cwoKCiAgZnVuY3Rpb24gX3ZhbGlkYXRlKHNpemUpIHsKICAgIHNpemUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgfHwgIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKHZhbHVlKSB8fCB2YWx1ZSA8IDApIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24gb25lcyBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzJyk7CiAgICAgIH0KICAgIH0pOwogIH0KfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3V0aWxzL25vb3AuanMKZnVuY3Rpb24gbm9CaWdudW1iZXIoKSB7CiAgdGhyb3cgbmV3IEVycm9yKCdObyAiYmlnbnVtYmVyIiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUnKTsKfQpmdW5jdGlvbiBub0ZyYWN0aW9uKCkgewogIHRocm93IG5ldyBFcnJvcignTm8gImZyYWN0aW9uIiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUnKTsKfQpmdW5jdGlvbiBub01hdHJpeCgpIHsKICB0aHJvdyBuZXcgRXJyb3IoJ05vICJtYXRyaXgiIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZScpOwp9CmZ1bmN0aW9uIG5vSW5kZXgoKSB7CiAgdGhyb3cgbmV3IEVycm9yKCdObyAiaW5kZXgiIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZScpOwp9CmZ1bmN0aW9uIG5vU3Vic2V0KCkgewogIHRocm93IG5ldyBFcnJvcignTm8gIm1hdHJpeCIgaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlJyk7Cn0KLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vbWF0cml4L3JhbmdlLmpzCgoKdmFyIHJhbmdlX25hbWUgPSAncmFuZ2UnOwp2YXIgcmFuZ2VfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnP21hdHJpeCcsICc/YmlnbnVtYmVyJywgJ3NtYWxsZXInLCAnc21hbGxlckVxJywgJ2xhcmdlcicsICdsYXJnZXJFcSddOwp2YXIgcmFuZ2VfY3JlYXRlUmFuZ2UgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShyYW5nZV9uYW1lLCByYW5nZV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LAogICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlciwKICAgICAgc21hbGxlciA9IF9yZWYuc21hbGxlciwKICAgICAgc21hbGxlckVxID0gX3JlZi5zbWFsbGVyRXEsCiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyLAogICAgICBsYXJnZXJFcSA9IF9yZWYubGFyZ2VyRXE7CgogIC8qKgogICAqIENyZWF0ZSBhbiBhcnJheSBmcm9tIGEgcmFuZ2UuCiAgICogQnkgZGVmYXVsdCwgdGhlIHJhbmdlIGVuZCBpcyBleGNsdWRlZC4gVGhpcyBjYW4gYmUgY3VzdG9taXplZCBieSBwcm92aWRpbmcKICAgKiBhbiBleHRyYSBwYXJhbWV0ZXIgYGluY2x1ZGVFbmRgLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIG1hdGgucmFuZ2Uoc3RyIFssIGluY2x1ZGVFbmRdKSAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIHJhbmdlIGZyb20gYSBzdHJpbmcsCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIHRoZSBzdHJpbmcgY29udGFpbnMgdGhlCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0LCBvcHRpb25hbCBzdGVwLCBhbmQgZW5kLAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXBhcmF0ZWQgYnkgYSBjb2xvbi4KICAgKiAgICAgbWF0aC5yYW5nZShzdGFydCwgZW5kIFssIGluY2x1ZGVFbmRdKSAgICAgICAgLy8gQ3JlYXRlIGEgcmFuZ2Ugd2l0aCBzdGFydCBhbmQKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5kIGFuZCBhIHN0ZXAgc2l6ZSBvZiAxLgogICAqICAgICBtYXRoLnJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXAgWywgaW5jbHVkZUVuZF0pICAvLyBDcmVhdGUgYSByYW5nZSB3aXRoIHN0YXJ0LCBzdGVwLAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgZW5kLgogICAqCiAgICogV2hlcmU6CiAgICoKICAgKiAtIGBzdHI6IHN0cmluZ2AKICAgKiAgIEEgc3RyaW5nICdzdGFydDplbmQnIG9yICdzdGFydDpzdGVwOmVuZCcKICAgKiAtIGBzdGFydDoge251bWJlciB8IEJpZ051bWJlcn1gCiAgICogICBTdGFydCBvZiB0aGUgcmFuZ2UKICAgKiAtIGBlbmQ6IG51bWJlciB8IEJpZ051bWJlcmAKICAgKiAgIEVuZCBvZiB0aGUgcmFuZ2UsIGV4Y2x1ZGVkIGJ5IGRlZmF1bHQsIGluY2x1ZGVkIHdoZW4gcGFyYW1ldGVyIGluY2x1ZGVFbmQ9dHJ1ZQogICAqIC0gYHN0ZXA6IG51bWJlciB8IEJpZ051bWJlcmAKICAgKiAgIFN0ZXAgc2l6ZS4gRGVmYXVsdCB2YWx1ZSBpcyAxLgogICAqIC0gYGluY2x1ZGVFbmQ6IGJvb2xlYW5gCiAgICogICBPcHRpb24gdG8gc3BlY2lmeSB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlIGVuZCBvciBub3QuIEZhbHNlIGJ5IGRlZmF1bHQuCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgICBtYXRoLnJhbmdlKDIsIDYpICAgICAgICAvLyBbMiwgMywgNCwgNV0KICAgKiAgICAgbWF0aC5yYW5nZSgyLCAtMywgLTEpICAgLy8gWzIsIDEsIDAsIC0xLCAtMl0KICAgKiAgICAgbWF0aC5yYW5nZSgnMjoxOjYnKSAgICAgLy8gWzIsIDMsIDQsIDVdCiAgICogICAgIG1hdGgucmFuZ2UoMiwgNiwgdHJ1ZSkgIC8vIFsyLCAzLCA0LCA1LCA2XQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICAgb25lcywgemVyb3MsIHNpemUsIHN1YnNldAogICAqCiAgICogQHBhcmFtIHsqfSBhcmdzICAgUGFyYW1ldGVycyBkZXNjcmliaW5nIHRoZSByYW5nZXMgYHN0YXJ0YCwgYGVuZGAsIGFuZCBvcHRpb25hbCBgc3RlcGAuCiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9IHJhbmdlCiAgICovCiAgcmV0dXJuIHR5cGVkKHJhbmdlX25hbWUsIHsKICAgIC8vIFRPRE86IHNpbXBsaWZ5IHNpZ25hdHVyZXMgd2hlbiB0eXBlZC1mdW5jdGlvbiBzdXBwb3J0cyBkZWZhdWx0IHZhbHVlcyBhbmQgb3B0aW9uYWwgYXJndW1lbnRzCiAgICAvLyBUT0RPOiBhIG51bWJlciBvciBib29sZWFuIHNob3VsZCBub3QgYmUgY29udmVydGVkIHRvIHN0cmluZyBoZXJlCiAgICBzdHJpbmc6IF9zdHJSYW5nZSwKICAgICdzdHJpbmcsIGJvb2xlYW4nOiBfc3RyUmFuZ2UsCiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoc3RhcnQsIGVuZCkgewogICAgICByZXR1cm4gX291dChfcmFuZ2VFeChzdGFydCwgZW5kLCAxKSk7CiAgICB9LAogICAgJ251bWJlciwgbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXJOdW1iZXIoc3RhcnQsIGVuZCwgc3RlcCkgewogICAgICByZXR1cm4gX291dChfcmFuZ2VFeChzdGFydCwgZW5kLCBzdGVwKSk7CiAgICB9LAogICAgJ251bWJlciwgbnVtYmVyLCBib29sZWFuJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyQm9vbGVhbihzdGFydCwgZW5kLCBpbmNsdWRlRW5kKSB7CiAgICAgIHJldHVybiBpbmNsdWRlRW5kID8gX291dChfcmFuZ2VJbmMoc3RhcnQsIGVuZCwgMSkpIDogX291dChfcmFuZ2VFeChzdGFydCwgZW5kLCAxKSk7CiAgICB9LAogICAgJ251bWJlciwgbnVtYmVyLCBudW1iZXIsIGJvb2xlYW4nOiBmdW5jdGlvbiBudW1iZXJOdW1iZXJOdW1iZXJCb29sZWFuKHN0YXJ0LCBlbmQsIHN0ZXAsIGluY2x1ZGVFbmQpIHsKICAgICAgcmV0dXJuIGluY2x1ZGVFbmQgPyBfb3V0KF9yYW5nZUluYyhzdGFydCwgZW5kLCBzdGVwKSkgOiBfb3V0KF9yYW5nZUV4KHN0YXJ0LCBlbmQsIHN0ZXApKTsKICAgIH0sCiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoc3RhcnQsIGVuZCkgewogICAgICB2YXIgQmlnTnVtYmVyID0gc3RhcnQuY29uc3RydWN0b3I7CiAgICAgIHJldHVybiBfb3V0KF9iaWdSYW5nZUV4KHN0YXJ0LCBlbmQsIG5ldyBCaWdOdW1iZXIoMSkpKTsKICAgIH0sCiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlckJpZ051bWJlcihzdGFydCwgZW5kLCBzdGVwKSB7CiAgICAgIHJldHVybiBfb3V0KF9iaWdSYW5nZUV4KHN0YXJ0LCBlbmQsIHN0ZXApKTsKICAgIH0sCiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXIsIGJvb2xlYW4nOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXJCb29sZWFuKHN0YXJ0LCBlbmQsIGluY2x1ZGVFbmQpIHsKICAgICAgdmFyIEJpZ051bWJlciA9IHN0YXJ0LmNvbnN0cnVjdG9yOwogICAgICByZXR1cm4gaW5jbHVkZUVuZCA/IF9vdXQoX2JpZ1JhbmdlSW5jKHN0YXJ0LCBlbmQsIG5ldyBCaWdOdW1iZXIoMSkpKSA6IF9vdXQoX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgbmV3IEJpZ051bWJlcigxKSkpOwogICAgfSwKICAgICdCaWdOdW1iZXIsIEJpZ051bWJlciwgQmlnTnVtYmVyLCBib29sZWFuJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyQmlnTnVtYmVyQm9vbGVhbihzdGFydCwgZW5kLCBzdGVwLCBpbmNsdWRlRW5kKSB7CiAgICAgIHJldHVybiBpbmNsdWRlRW5kID8gX291dChfYmlnUmFuZ2VJbmMoc3RhcnQsIGVuZCwgc3RlcCkpIDogX291dChfYmlnUmFuZ2VFeChzdGFydCwgZW5kLCBzdGVwKSk7CiAgICB9CiAgfSk7CgogIGZ1bmN0aW9uIF9vdXQoYXJyKSB7CiAgICBpZiAoY29uZmlnLm1hdHJpeCA9PT0gJ01hdHJpeCcpIHsKICAgICAgcmV0dXJuIG1hdHJpeCA/IG1hdHJpeChhcnIpIDogbm9NYXRyaXgoKTsKICAgIH0KCiAgICByZXR1cm4gYXJyOwogIH0KCiAgZnVuY3Rpb24gX3N0clJhbmdlKHN0ciwgaW5jbHVkZUVuZCkgewogICAgdmFyIHIgPSBfcGFyc2Uoc3RyKTsKCiAgICBpZiAoIXIpIHsKICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdTdHJpbmcgIicgKyBzdHIgKyAnIiBpcyBubyB2YWxpZCByYW5nZScpOwogICAgfQoKICAgIHZhciBmbjsKCiAgICBpZiAoY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicpIHsKICAgICAgaWYgKGJpZ251bWJlciA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgbm9CaWdudW1iZXIoKTsKICAgICAgfQoKICAgICAgZm4gPSBpbmNsdWRlRW5kID8gX2JpZ1JhbmdlSW5jIDogX2JpZ1JhbmdlRXg7CiAgICAgIHJldHVybiBfb3V0KGZuKGJpZ251bWJlcihyLnN0YXJ0KSwgYmlnbnVtYmVyKHIuZW5kKSwgYmlnbnVtYmVyKHIuc3RlcCkpKTsKICAgIH0gZWxzZSB7CiAgICAgIGZuID0gaW5jbHVkZUVuZCA/IF9yYW5nZUluYyA6IF9yYW5nZUV4OwogICAgICByZXR1cm4gX291dChmbihyLnN0YXJ0LCByLmVuZCwgci5zdGVwKSk7CiAgICB9CiAgfQogIC8qKgogICAqIENyZWF0ZSBhIHJhbmdlIHdpdGggbnVtYmVycy4gRW5kIGlzIGV4Y2x1ZGVkCiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0CiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZAogICAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwCiAgICogQHJldHVybnMge0FycmF5fSByYW5nZQogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBfcmFuZ2VFeChzdGFydCwgZW5kLCBzdGVwKSB7CiAgICB2YXIgYXJyYXkgPSBbXTsKICAgIHZhciB4ID0gc3RhcnQ7CgogICAgaWYgKHN0ZXAgPiAwKSB7CiAgICAgIHdoaWxlIChzbWFsbGVyKHgsIGVuZCkpIHsKICAgICAgICBhcnJheS5wdXNoKHgpOwogICAgICAgIHggKz0gc3RlcDsKICAgICAgfQogICAgfSBlbHNlIGlmIChzdGVwIDwgMCkgewogICAgICB3aGlsZSAobGFyZ2VyKHgsIGVuZCkpIHsKICAgICAgICBhcnJheS5wdXNoKHgpOwogICAgICAgIHggKz0gc3RlcDsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBhcnJheTsKICB9CiAgLyoqCiAgICogQ3JlYXRlIGEgcmFuZ2Ugd2l0aCBudW1iZXJzLiBFbmQgaXMgaW5jbHVkZWQKICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQKICAgKiBAcGFyYW0ge251bWJlcn0gZW5kCiAgICogQHBhcmFtIHtudW1iZXJ9IHN0ZXAKICAgKiBAcmV0dXJucyB7QXJyYXl9IHJhbmdlCiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIF9yYW5nZUluYyhzdGFydCwgZW5kLCBzdGVwKSB7CiAgICB2YXIgYXJyYXkgPSBbXTsKICAgIHZhciB4ID0gc3RhcnQ7CgogICAgaWYgKHN0ZXAgPiAwKSB7CiAgICAgIHdoaWxlIChzbWFsbGVyRXEoeCwgZW5kKSkgewogICAgICAgIGFycmF5LnB1c2goeCk7CiAgICAgICAgeCArPSBzdGVwOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHN0ZXAgPCAwKSB7CiAgICAgIHdoaWxlIChsYXJnZXJFcSh4LCBlbmQpKSB7CiAgICAgICAgYXJyYXkucHVzaCh4KTsKICAgICAgICB4ICs9IHN0ZXA7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gYXJyYXk7CiAgfQogIC8qKgogICAqIENyZWF0ZSBhIHJhbmdlIHdpdGggYmlnIG51bWJlcnMuIEVuZCBpcyBleGNsdWRlZAogICAqIEBwYXJhbSB7QmlnTnVtYmVyfSBzdGFydAogICAqIEBwYXJhbSB7QmlnTnVtYmVyfSBlbmQKICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gc3RlcAogICAqIEByZXR1cm5zIHtBcnJheX0gcmFuZ2UKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkgewogICAgdmFyIHplcm8gPSBiaWdudW1iZXIoMCk7CiAgICB2YXIgYXJyYXkgPSBbXTsKICAgIHZhciB4ID0gc3RhcnQ7CgogICAgaWYgKHN0ZXAuZ3QoemVybykpIHsKICAgICAgd2hpbGUgKHNtYWxsZXIoeCwgZW5kKSkgewogICAgICAgIGFycmF5LnB1c2goeCk7CiAgICAgICAgeCA9IHgucGx1cyhzdGVwKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChzdGVwLmx0KHplcm8pKSB7CiAgICAgIHdoaWxlIChsYXJnZXIoeCwgZW5kKSkgewogICAgICAgIGFycmF5LnB1c2goeCk7CiAgICAgICAgeCA9IHgucGx1cyhzdGVwKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBhcnJheTsKICB9CiAgLyoqCiAgICogQ3JlYXRlIGEgcmFuZ2Ugd2l0aCBiaWcgbnVtYmVycy4gRW5kIGlzIGluY2x1ZGVkCiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IHN0YXJ0CiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGVuZAogICAqIEBwYXJhbSB7QmlnTnVtYmVyfSBzdGVwCiAgICogQHJldHVybnMge0FycmF5fSByYW5nZQogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBfYmlnUmFuZ2VJbmMoc3RhcnQsIGVuZCwgc3RlcCkgewogICAgdmFyIHplcm8gPSBiaWdudW1iZXIoMCk7CiAgICB2YXIgYXJyYXkgPSBbXTsKICAgIHZhciB4ID0gc3RhcnQ7CgogICAgaWYgKHN0ZXAuZ3QoemVybykpIHsKICAgICAgd2hpbGUgKHNtYWxsZXJFcSh4LCBlbmQpKSB7CiAgICAgICAgYXJyYXkucHVzaCh4KTsKICAgICAgICB4ID0geC5wbHVzKHN0ZXApOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHN0ZXAubHQoemVybykpIHsKICAgICAgd2hpbGUgKGxhcmdlckVxKHgsIGVuZCkpIHsKICAgICAgICBhcnJheS5wdXNoKHgpOwogICAgICAgIHggPSB4LnBsdXMoc3RlcCk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gYXJyYXk7CiAgfQogIC8qKgogICAqIFBhcnNlIGEgc3RyaW5nIGludG8gYSByYW5nZSwKICAgKiBUaGUgc3RyaW5nIGNvbnRhaW5zIHRoZSBzdGFydCwgb3B0aW9uYWwgc3RlcCwgYW5kIGVuZCwgc2VwYXJhdGVkIGJ5IGEgY29sb24uCiAgICogSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgcmFuZ2UsIG51bGwgaXMgcmV0dXJuZWQuCiAgICogRm9yIGV4YW1wbGUgc3RyPScwOjI6MTEnLgogICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIKICAgKiBAcmV0dXJuIHt7c3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHN0ZXA6IG51bWJlcn0gfCBudWxsfSByYW5nZSBPYmplY3QgY29udGFpbmluZyBwcm9wZXJ0aWVzIHN0YXJ0LCBlbmQsIHN0ZXAKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gX3BhcnNlKHN0cikgewogICAgdmFyIGFyZ3MgPSBzdHIuc3BsaXQoJzonKTsgLy8gbnVtYmVyCgogICAgdmFyIG51bXMgPSBhcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7CiAgICAgIC8vIHVzZSBOdW1iZXIgYW5kIG5vdCBwYXJzZUZsb2F0IGFzIE51bWJlciByZXR1cm5zIE5hTiBvbiBpbnZhbGlkIGdhcmJhZ2UgaW4gdGhlIHN0cmluZwogICAgICByZXR1cm4gTnVtYmVyKGFyZyk7CiAgICB9KTsKICAgIHZhciBpbnZhbGlkID0gbnVtcy5zb21lKGZ1bmN0aW9uIChudW0pIHsKICAgICAgcmV0dXJuIGlzTmFOKG51bSk7CiAgICB9KTsKCiAgICBpZiAoaW52YWxpZCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBzd2l0Y2ggKG51bXMubGVuZ3RoKSB7CiAgICAgIGNhc2UgMjoKICAgICAgICByZXR1cm4gewogICAgICAgICAgc3RhcnQ6IG51bXNbMF0sCiAgICAgICAgICBlbmQ6IG51bXNbMV0sCiAgICAgICAgICBzdGVwOiAxCiAgICAgICAgfTsKCiAgICAgIGNhc2UgMzoKICAgICAgICByZXR1cm4gewogICAgICAgICAgc3RhcnQ6IG51bXNbMF0sCiAgICAgICAgICBlbmQ6IG51bXNbMl0sCiAgICAgICAgICBzdGVwOiBudW1zWzFdCiAgICAgICAgfTsKCiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vbWF0cml4L3Jlc2hhcGUuanMKCgp2YXIgcmVzaGFwZV9uYW1lID0gJ3Jlc2hhcGUnOwp2YXIgcmVzaGFwZV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2lzSW50ZWdlcicsICdtYXRyaXgnXTsKdmFyIGNyZWF0ZVJlc2hhcGUgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShyZXNoYXBlX25hbWUsIHJlc2hhcGVfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDsKCiAgLyoqCiAgICogUmVzaGFwZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5IHRvIGZpdCB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbnMKICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBtYXRoLnJlc2hhcGUoeCwgc2l6ZXMpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgICBtYXRoLnJlc2hhcGUoWzEsIDIsIDMsIDQsIDUsIDZdLCBbMiwgM10pCiAgICogICAgIC8vIHJldHVybnMgQXJyYXkgIFtbMSwgMiwgM10sIFs0LCA1LCA2XV0KICAgKgogICAqICAgICBtYXRoLnJlc2hhcGUoW1sxLCAyXSwgWzMsIDRdXSwgWzEsIDRdKQogICAqICAgICAvLyByZXR1cm5zIEFycmF5ICBbWzEsIDIsIDMsIDRdXQogICAqCiAgICogICAgIG1hdGgucmVzaGFwZShbWzEsIDJdLCBbMywgNF1dLCBbNF0pCiAgICogICAgIC8vIHJldHVybnMgQXJyYXkgWzEsIDIsIDMsIDRdCiAgICoKICAgKiAgICAgY29uc3QgeCA9IG1hdGgubWF0cml4KFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4XSkKICAgKiAgICAgbWF0aC5yZXNoYXBlKHgsIFsyLCAyLCAyXSkKICAgKiAgICAgLy8gcmV0dXJucyBNYXRyaXggW1tbMSwgMl0sIFszLCA0XV0sIFtbNSwgNl0sIFs3LCA4XV1dCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgICBzaXplLCBzcXVlZXplLCByZXNpemUKICAgKgogICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXggfCAqfSB4ICBNYXRyaXggdG8gYmUgcmVzaGFwZWQKICAgKiBAcGFyYW0ge251bWJlcltdfSBzaXplcyAgICAgICAgT25lIGRpbWVuc2lvbmFsIGFycmF5IHdpdGggaW50ZWdyYWwgc2l6ZXMgZm9yCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggZGltZW5zaW9uCiAgICoKICAgKiBAcmV0dXJuIHsqIHwgQXJyYXkgfCBNYXRyaXh9ICAgQSByZXNoYXBlZCBjbG9uZSBvZiBtYXRyaXggYHhgCiAgICoKICAgKiBAdGhyb3dzIHtUeXBlRXJyb3J9ICAgICAgICAgICAgSWYgYHNpemVzYCBkb2VzIG5vdCBjb250YWluIHNvbGVseSBpbnRlZ2VycwogICAqIEB0aHJvd3Mge0RpbWVuc2lvbkVycm9yfSAgICAgICBJZiB0aGUgcHJvZHVjdCBvZiB0aGUgbmV3IGRpbWVuc2lvbiBzaXplcyBkb2VzCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBlcXVhbCB0aGF0IG9mIHRoZSBvbGQgb25lcwogICAqLwogIHJldHVybiB0eXBlZChyZXNoYXBlX25hbWUsIHsKICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgc2l6ZXMpIHsKICAgICAgaWYgKHgucmVzaGFwZSkgewogICAgICAgIHJldHVybiB4LnJlc2hhcGUoc2l6ZXMpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBtYXRyaXgoT2JqZWN0KHV0aWxzX2FycmF5WyJuIiAvKiByZXNoYXBlICovXSkoeC52YWx1ZU9mKCksIHNpemVzKSk7CiAgICAgIH0KICAgIH0sCiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCBzaXplcykgewogICAgICBzaXplcy5mb3JFYWNoKGZ1bmN0aW9uIChzaXplKSB7CiAgICAgICAgaWYgKCFpc0ludGVnZXIoc2l6ZSkpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgc2l6ZSBmb3IgZGltZW5zaW9uOiAnICsgc2l6ZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuIE9iamVjdCh1dGlsc19hcnJheVsibiIgLyogcmVzaGFwZSAqL10pKHgsIHNpemVzKTsKICAgIH0KICB9KTsKfSk7Ci8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvZXJyb3IvQXJndW1lbnRzRXJyb3IuanMKdmFyIEFyZ3VtZW50c0Vycm9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7CgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9tYXRyaXgvcmVzaXplLmpzCgoKCgoKCgoKdmFyIHJlc2l6ZV9uYW1lID0gJ3Jlc2l6ZSc7CnZhciByZXNpemVfZGVwZW5kZW5jaWVzID0gWydjb25maWcnLCAnbWF0cml4J107CnZhciBjcmVhdGVSZXNpemUgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShyZXNpemVfbmFtZSwgcmVzaXplX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4OwoKICAvKioKICAgKiBSZXNpemUgYSBtYXRyaXgKICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBtYXRoLnJlc2l6ZSh4LCBzaXplKQogICAqICAgICBtYXRoLnJlc2l6ZSh4LCBzaXplLCBkZWZhdWx0VmFsdWUpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgICBtYXRoLnJlc2l6ZShbMSwgMiwgMywgNCwgNV0sIFszXSkgLy8gcmV0dXJucyBBcnJheSAgWzEsIDIsIDNdCiAgICogICAgIG1hdGgucmVzaXplKFsxLCAyLCAzXSwgWzVdLCAwKSAgICAvLyByZXR1cm5zIEFycmF5ICBbMSwgMiwgMywgMCwgMF0KICAgKiAgICAgbWF0aC5yZXNpemUoMiwgWzIsIDNdLCAwKSAgICAgICAgIC8vIHJldHVybnMgTWF0cml4IFtbMiwgMCwgMF0sIFswLCAwLCAwXV0KICAgKiAgICAgbWF0aC5yZXNpemUoImhlbGxvIiwgWzhdLCAiISIpICAgIC8vIHJldHVybnMgc3RyaW5nICdoZWxsbyEhIScKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgIHNpemUsIHNxdWVlemUsIHN1YnNldCwgcmVzaGFwZQogICAqCiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeCB8ICp9IHggICAgICAgICAgICAgTWF0cml4IHRvIGJlIHJlc2l6ZWQKICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBzaXplICAgICAgICAgICAgICBPbmUgZGltZW5zaW9uYWwgYXJyYXkgd2l0aCBudW1iZXJzCiAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IFtkZWZhdWx0VmFsdWU9MF0gWmVybyBieSBkZWZhdWx0LCBleGNlcHQgaW4KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIG9mIGEgc3RyaW5nLCBpbiB0aGF0IGNhc2UKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSAnICcKICAgKiBAcmV0dXJuIHsqIHwgQXJyYXkgfCBNYXRyaXh9IEEgcmVzaXplZCBjbG9uZSBvZiBtYXRyaXggYHhgCiAgICovCiAgLy8gVE9ETzogcmV3b3JrIHJlc2l6ZSB0byBhIHR5cGVkLWZ1bmN0aW9uCiAgcmV0dXJuIGZ1bmN0aW9uIHJlc2l6ZSh4LCBzaXplLCBkZWZhdWx0VmFsdWUpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9PSAyICYmIGFyZ3VtZW50cy5sZW5ndGggIT09IDMpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50c0Vycm9yWyJhIiAvKiBBcmd1bWVudHNFcnJvciAqL10oJ3Jlc2l6ZScsIGFyZ3VtZW50cy5sZW5ndGgsIDIsIDMpOwogICAgfQoKICAgIGlmIChPYmplY3QoaXNbInYiIC8qIGlzTWF0cml4ICovXSkoc2l6ZSkpIHsKICAgICAgc2l6ZSA9IHNpemUudmFsdWVPZigpOyAvLyBnZXQgQXJyYXkKICAgIH0KCiAgICBpZiAoT2JqZWN0KGlzWyJlIiAvKiBpc0JpZ051bWJlciAqL10pKHNpemVbMF0pKSB7CiAgICAgIC8vIGNvbnZlcnQgYmlnbnVtYmVycyB0byBudW1iZXJzCiAgICAgIHNpemUgPSBzaXplLm1hcChmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICByZXR1cm4gIU9iamVjdChpc1siZSIgLyogaXNCaWdOdW1iZXIgKi9dKSh2YWx1ZSkgPyB2YWx1ZSA6IHZhbHVlLnRvTnVtYmVyKCk7CiAgICAgIH0pOwogICAgfSAvLyBjaGVjayB4IGlzIGEgTWF0cml4CgoKICAgIGlmIChPYmplY3QoaXNbInYiIC8qIGlzTWF0cml4ICovXSkoeCkpIHsKICAgICAgLy8gdXNlIG9wdGltaXplZCBtYXRyaXggaW1wbGVtZW50YXRpb24sIHJldHVybiBjb3B5CiAgICAgIHJldHVybiB4LnJlc2l6ZShzaXplLCBkZWZhdWx0VmFsdWUsIHRydWUpOwogICAgfQoKICAgIGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHsKICAgICAgLy8gcmVzaXplIHN0cmluZwogICAgICByZXR1cm4gX3Jlc2l6ZVN0cmluZyh4LCBzaXplLCBkZWZhdWx0VmFsdWUpOwogICAgfSAvLyBjaGVjayByZXN1bHQgc2hvdWxkIGJlIGEgbWF0cml4CgoKICAgIHZhciBhc01hdHJpeCA9IEFycmF5LmlzQXJyYXkoeCkgPyBmYWxzZSA6IGNvbmZpZy5tYXRyaXggIT09ICdBcnJheSc7CgogICAgaWYgKHNpemUubGVuZ3RoID09PSAwKSB7CiAgICAgIC8vIG91dHB1dCBhIHNjYWxhcgogICAgICB3aGlsZSAoQXJyYXkuaXNBcnJheSh4KSkgewogICAgICAgIHggPSB4WzBdOwogICAgICB9CgogICAgICByZXR1cm4gT2JqZWN0KHV0aWxzX29iamVjdFsiYSIgLyogY2xvbmUgKi9dKSh4KTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIG91dHB1dCBhbiBhcnJheS9tYXRyaXgKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHgpKSB7CiAgICAgICAgeCA9IFt4XTsKICAgICAgfQoKICAgICAgeCA9IE9iamVjdCh1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSkoeCk7CiAgICAgIHZhciByZXMgPSBPYmplY3QodXRpbHNfYXJyYXlbIm8iIC8qIHJlc2l6ZSAqL10pKHgsIHNpemUsIGRlZmF1bHRWYWx1ZSk7CiAgICAgIHJldHVybiBhc01hdHJpeCA/IG1hdHJpeChyZXMpIDogcmVzOwogICAgfQogIH07CiAgLyoqCiAgICogUmVzaXplIGEgc3RyaW5nCiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cgogICAqIEBwYXJhbSB7bnVtYmVyW119IHNpemUKICAgKiBAcGFyYW0ge3N0cmluZ30gW2RlZmF1bHRDaGFyPScgJ10KICAgKiBAcHJpdmF0ZQogICAqLwoKICBmdW5jdGlvbiBfcmVzaXplU3RyaW5nKHN0ciwgc2l6ZSwgZGVmYXVsdENoYXIpIHsKICAgIGlmIChkZWZhdWx0Q2hhciAhPT0gdW5kZWZpbmVkKSB7CiAgICAgIGlmICh0eXBlb2YgZGVmYXVsdENoYXIgIT09ICdzdHJpbmcnIHx8IGRlZmF1bHRDaGFyLmxlbmd0aCAhPT0gMSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NpbmdsZSBjaGFyYWN0ZXIgZXhwZWN0ZWQgYXMgZGVmYXVsdFZhbHVlJyk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGRlZmF1bHRDaGFyID0gJyAnOwogICAgfQoKICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMSkgewogICAgICB0aHJvdyBuZXcgRGltZW5zaW9uRXJyb3JbImEiIC8qIERpbWVuc2lvbkVycm9yICovXShzaXplLmxlbmd0aCwgMSk7CiAgICB9CgogICAgdmFyIGxlbiA9IHNpemVbMF07CgogICAgaWYgKHR5cGVvZiBsZW4gIT09ICdudW1iZXInIHx8ICFPYmplY3QodXRpbHNfbnVtYmVyWyJpIiAvKiBpc0ludGVnZXIgKi9dKShsZW4pKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgc2l6ZSwgbXVzdCBjb250YWluIHBvc2l0aXZlIGludGVnZXJzICcgKyAnKHNpemU6ICcgKyBPYmplY3QodXRpbHNfc3RyaW5nWyJkIiAvKiBmb3JtYXQgKi9dKShzaXplKSArICcpJyk7CiAgICB9CgogICAgaWYgKHN0ci5sZW5ndGggPiBsZW4pIHsKICAgICAgcmV0dXJuIHN0ci5zdWJzdHJpbmcoMCwgbGVuKTsKICAgIH0gZWxzZSBpZiAoc3RyLmxlbmd0aCA8IGxlbikgewogICAgICB2YXIgcmVzID0gc3RyOwoKICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbGVuIC0gc3RyLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgICByZXMgKz0gZGVmYXVsdENoYXI7CiAgICAgIH0KCiAgICAgIHJldHVybiByZXM7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gc3RyOwogICAgfQogIH0KfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL21hdHJpeC9yb3cuanMKCgoKdmFyIHJvd19uYW1lID0gJ3Jvdyc7CnZhciByb3dfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdJbmRleCcsICdtYXRyaXgnLCAncmFuZ2UnXTsKdmFyIGNyZWF0ZVJvdyA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHJvd19uYW1lLCByb3dfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCwKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIHJhbmdlID0gX3JlZi5yYW5nZTsKCiAgLyoqCiAgICogUmV0dXJuIGEgcm93IGZyb20gYSBNYXRyaXguCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICAgbWF0aC5yb3codmFsdWUsIGluZGV4KQogICAqCiAgICogRXhhbXBsZToKICAgKgogICAqICAgICAvLyBnZXQgYSByb3cKICAgKiAgICAgY29uc3QgZCA9IFtbMSwgMl0sIFszLCA0XV0KICAgKiAgICAgbWF0aC5yb3coZCwgMSkgLy8gcmV0dXJucyBbWzMsIDRdXQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICAgY29sdW1uCiAgICoKICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IH0gdmFsdWUgICBBbiBhcnJheSBvciBtYXRyaXgKICAgKiBAcGFyYW0ge251bWJlcn0gcm93ICAgICAgICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHJvdwogICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICAgICAgIFRoZSByZXRyaWV2ZWQgcm93CiAgICovCiAgdmFyIHJvdyA9IHR5cGVkKHJvd19uYW1lLCB7CiAgICAnTWF0cml4LCBudW1iZXInOiBfcm93LAogICAgJ0FycmF5LCBudW1iZXInOiBmdW5jdGlvbiBBcnJheU51bWJlcih2YWx1ZSwgcm93KSB7CiAgICAgIHJldHVybiBfcm93KG1hdHJpeChPYmplY3QodXRpbHNfb2JqZWN0WyJhIiAvKiBjbG9uZSAqL10pKHZhbHVlKSksIHJvdykudmFsdWVPZigpOwogICAgfQogIH0pOwogIHJldHVybiByb3c7CiAgLyoqCiAgICogUmV0cmlldmUgYSByb3cgb2YgYSBtYXRyaXgKICAgKiBAcGFyYW0ge01hdHJpeCB9IHZhbHVlICBBIG1hdHJpeAogICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgICAgIFRoZSBpbmRleCBvZiB0aGUgcm93CiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgVGhlIHJldHJpZXZlZCByb3cKICAgKi8KCiAgZnVuY3Rpb24gX3Jvdyh2YWx1ZSwgcm93KSB7CiAgICAvLyBjaGVjayBkaW1lbnNpb25zCiAgICBpZiAodmFsdWUuc2l6ZSgpLmxlbmd0aCAhPT0gMikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgdHdvIGRpbWVuc2lvbmFsIG1hdHJpeCBpcyBzdXBwb3J0ZWQnKTsKICAgIH0KCiAgICBPYmplY3QodXRpbHNfYXJyYXlbInMiIC8qIHZhbGlkYXRlSW5kZXggKi9dKShyb3csIHZhbHVlLnNpemUoKVswXSk7CiAgICB2YXIgY29sdW1uUmFuZ2UgPSByYW5nZSgwLCB2YWx1ZS5zaXplKClbMV0pOwogICAgdmFyIGluZGV4ID0gbmV3IEluZGV4KHJvdywgY29sdW1uUmFuZ2UpOwogICAgcmV0dXJuIHZhbHVlLnN1YnNldChpbmRleCk7CiAgfQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vbWF0cml4L3NpemUuanMKCgoKdmFyIHNpemVfbmFtZSA9ICdzaXplJzsKdmFyIHNpemVfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnP21hdHJpeCddOwp2YXIgY3JlYXRlU2l6ZSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHNpemVfbmFtZSwgc2l6ZV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4OwoKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIHNpemUgb2YgYSBtYXRyaXggb3Igc2NhbGFyLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIG1hdGguc2l6ZSh4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICAgbWF0aC5zaXplKDIuMykgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtdCiAgICogICAgIG1hdGguc2l6ZSgnaGVsbG8gd29ybGQnKSAgICAgICAgLy8gcmV0dXJucyBbMTFdCiAgICoKICAgKiAgICAgY29uc3QgQSA9IFtbMSwgMiwgM10sIFs0LCA1LCA2XV0KICAgKiAgICAgbWF0aC5zaXplKEEpICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFsyLCAzXQogICAqICAgICBtYXRoLnNpemUobWF0aC5yYW5nZSgxLDYpKSAgICAgIC8vIHJldHVybnMgWzVdCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgICByZXNpemUsIHNxdWVlemUsIHN1YnNldAogICAqCiAgICogQHBhcmFtIHtib29sZWFuIHwgbnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geCAgQSBtYXRyaXgKICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gQSB2ZWN0b3Igd2l0aCBzaXplIG9mIGB4YC4KICAgKi8KICByZXR1cm4gdHlwZWQoc2l6ZV9uYW1lLCB7CiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeCh4KSB7CiAgICAgIHJldHVybiB4LmNyZWF0ZSh4LnNpemUoKSk7CiAgICB9LAogICAgQXJyYXk6IHV0aWxzX2FycmF5WyJhIiAvKiBhcnJheVNpemUgKi9dLAogICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoeCkgewogICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IFt4Lmxlbmd0aF0gOiBtYXRyaXgoW3gubGVuZ3RoXSk7CiAgICB9LAogICAgJ251bWJlciB8IENvbXBsZXggfCBCaWdOdW1iZXIgfCBVbml0IHwgYm9vbGVhbiB8IG51bGwnOiBmdW5jdGlvbiBudW1iZXJDb21wbGV4QmlnTnVtYmVyVW5pdEJvb2xlYW5OdWxsKHgpIHsKICAgICAgLy8gc2NhbGFyCiAgICAgIHJldHVybiBjb25maWcubWF0cml4ID09PSAnQXJyYXknID8gW10gOiBtYXRyaXggPyBtYXRyaXgoW10pIDogbm9NYXRyaXgoKTsKICAgIH0KICB9KTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL21hdHJpeC9zcXVlZXplLmpzCgoKCnZhciBzcXVlZXplX25hbWUgPSAnc3F1ZWV6ZSc7CnZhciBzcXVlZXplX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4J107CnZhciBjcmVhdGVTcXVlZXplID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoc3F1ZWV6ZV9uYW1lLCBzcXVlZXplX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDsKCiAgLyoqCiAgICogU3F1ZWV6ZSBhIG1hdHJpeCwgcmVtb3ZlIGlubmVyIGFuZCBvdXRlciBzaW5nbGV0b24gZGltZW5zaW9ucyBmcm9tIGEgbWF0cml4LgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIG1hdGguc3F1ZWV6ZSh4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICAgbWF0aC5zcXVlZXplKFszXSkgICAgICAgICAgIC8vIHJldHVybnMgMwogICAqICAgICBtYXRoLnNxdWVlemUoW1szXV0pICAgICAgICAgLy8gcmV0dXJucyAzCiAgICoKICAgKiAgICAgY29uc3QgQSA9IG1hdGguemVyb3MoMywgMSkgICAgLy8gcmV0dXJucyBbWzBdLCBbMF0sIFswXV0gKHNpemUgM3gxKQogICAqICAgICBtYXRoLnNxdWVlemUoQSkgICAgICAgICAgICAgLy8gcmV0dXJucyBbMCwgMCwgMF0gKHNpemUgMykKICAgKgogICAqICAgICBjb25zdCBCID0gbWF0aC56ZXJvcygxLCAzKSAgICAvLyByZXR1cm5zIFtbMCwgMCwgMF1dIChzaXplIDF4MykKICAgKiAgICAgbWF0aC5zcXVlZXplKEIpICAgICAgICAgICAgIC8vIHJldHVybnMgWzAsIDAsIDBdIChzaXplIDMpCiAgICoKICAgKiAgICAgLy8gb25seSBpbm5lciBhbmQgb3V0ZXIgZGltZW5zaW9ucyBhcmUgcmVtb3ZlZAogICAqICAgICBjb25zdCBDID0gbWF0aC56ZXJvcygyLCAxLCAzKSAvLyByZXR1cm5zIFtbWzAsIDAsIDBdXSwgW1swLCAwLCAwXV1dIChzaXplIDJ4MXgzKQogICAqICAgICBtYXRoLnNxdWVlemUoQykgICAgICAgICAgICAgLy8gcmV0dXJucyBbW1swLCAwLCAwXV0sIFtbMCwgMCwgMF1dXSAoc2l6ZSAyeDF4MykKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgIHN1YnNldAogICAqCiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICAgIE1hdHJpeCB0byBiZSBzcXVlZXplZAogICAqIEByZXR1cm4ge01hdHJpeCB8IEFycmF5fSBTcXVlZXplZCBtYXRyaXgKICAgKi8KICByZXR1cm4gdHlwZWQoc3F1ZWV6ZV9uYW1lLCB7CiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkgewogICAgICByZXR1cm4gT2JqZWN0KHV0aWxzX2FycmF5WyJwIiAvKiBzcXVlZXplICovXSkoT2JqZWN0KHV0aWxzX29iamVjdFsiYSIgLyogY2xvbmUgKi9dKSh4KSk7CiAgICB9LAogICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkgewogICAgICB2YXIgcmVzID0gT2JqZWN0KHV0aWxzX2FycmF5WyJwIiAvKiBzcXVlZXplICovXSkoeC50b0FycmF5KCkpOyAvLyBGSVhNRTogcmV0dXJuIHRoZSBzYW1lIHR5cGUgb2YgbWF0cml4IGFzIHRoZSBpbnB1dAoKICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmVzKSA/IG1hdHJpeChyZXMpIDogcmVzOwogICAgfSwKICAgIGFueTogZnVuY3Rpb24gYW55KHgpIHsKICAgICAgLy8gc2NhbGFyCiAgICAgIHJldHVybiBPYmplY3QodXRpbHNfb2JqZWN0WyJhIiAvKiBjbG9uZSAqL10pKHgpOwogICAgfQogIH0pOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdXRpbHMvY3VzdG9tcy5qcwpmdW5jdGlvbiBjdXN0b21zX3R5cGVvZihvYmopIHsgIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gInN5bWJvbCIpIHsgY3VzdG9tc190eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgY3VzdG9tc190eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gInN5bWJvbCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBjdXN0b21zX3R5cGVvZihvYmopOyB9CgoKLyoqCiAqIEdldCBhIHByb3BlcnR5IG9mIGEgcGxhaW4gb2JqZWN0CiAqIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIHRoZSBvYmplY3QgaXMgbm90IGEgcGxhaW4gb2JqZWN0IG9yIHRoZQogKiBwcm9wZXJ0eSBpcyBub3QgZGVmaW5lZCBvbiB0aGUgb2JqZWN0IGl0c2VsZgogKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wCiAqIEByZXR1cm4geyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlIHdoZW4gc2FmZQogKi8KCmZ1bmN0aW9uIGdldFNhZmVQcm9wZXJ0eShvYmplY3QsIHByb3ApIHsKICAvLyBvbmx5IGFsbG93IGdldHRpbmcgc2FmZSBwcm9wZXJ0aWVzIG9mIGEgcGxhaW4gb2JqZWN0CiAgaWYgKGlzUGxhaW5PYmplY3Qob2JqZWN0KSAmJiBpc1NhZmVQcm9wZXJ0eShvYmplY3QsIHByb3ApKSB7CiAgICByZXR1cm4gb2JqZWN0W3Byb3BdOwogIH0KCiAgaWYgKHR5cGVvZiBvYmplY3RbcHJvcF0gPT09ICdmdW5jdGlvbicgJiYgaXNTYWZlTWV0aG9kKG9iamVjdCwgcHJvcCkpIHsKICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFjY2VzcyBtZXRob2QgIicgKyBwcm9wICsgJyIgYXMgYSBwcm9wZXJ0eScpOwogIH0KCiAgdGhyb3cgbmV3IEVycm9yKCdObyBhY2Nlc3MgdG8gcHJvcGVydHkgIicgKyBwcm9wICsgJyInKTsKfQovKioKICogU2V0IGEgcHJvcGVydHkgb24gYSBwbGFpbiBvYmplY3QuCiAqIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIHRoZSBvYmplY3QgaXMgbm90IGEgcGxhaW4gb2JqZWN0IG9yIHRoZQogKiBwcm9wZXJ0eSB3b3VsZCBvdmVycmlkZSBhbiBpbmhlcml0ZWQgcHJvcGVydHkgbGlrZSAuY29uc3RydWN0b3Igb3IgLnRvU3RyaW5nCiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICogQHBhcmFtIHtzdHJpbmd9IHByb3AKICogQHBhcmFtIHsqfSB2YWx1ZQogKiBAcmV0dXJuIHsqfSBSZXR1cm5zIHRoZSB2YWx1ZQogKi8KLy8gVE9ETzogbWVyZ2UgdGhpcyBmdW5jdGlvbiBpbnRvIGFjY2Vzcy5qcz8KCgpmdW5jdGlvbiBzZXRTYWZlUHJvcGVydHkob2JqZWN0LCBwcm9wLCB2YWx1ZSkgewogIC8vIG9ubHkgYWxsb3cgc2V0dGluZyBzYWZlIHByb3BlcnRpZXMgb2YgYSBwbGFpbiBvYmplY3QKICBpZiAoaXNQbGFpbk9iamVjdChvYmplY3QpICYmIGlzU2FmZVByb3BlcnR5KG9iamVjdCwgcHJvcCkpIHsKICAgIG9iamVjdFtwcm9wXSA9IHZhbHVlOwogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgdGhyb3cgbmV3IEVycm9yKCdObyBhY2Nlc3MgdG8gcHJvcGVydHkgIicgKyBwcm9wICsgJyInKTsKfQovKioKICogVGVzdCB3aGV0aGVyIGEgcHJvcGVydHkgaXMgc2FmZSB0byB1c2UgZm9yIGFuIG9iamVjdC4KICogRm9yIGV4YW1wbGUgLnRvU3RyaW5nIGFuZCAuY29uc3RydWN0b3IgYXJlIG5vdCBzYWZlCiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wCiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHNhZmUKICovCgoKZnVuY3Rpb24gaXNTYWZlUHJvcGVydHkob2JqZWN0LCBwcm9wKSB7CiAgaWYgKCFvYmplY3QgfHwgY3VzdG9tc190eXBlb2Yob2JqZWN0KSAhPT0gJ29iamVjdCcpIHsKICAgIHJldHVybiBmYWxzZTsKICB9IC8vIFNBRkU6IHdoaXRlbGlzdGVkCiAgLy8gZS5nIGxlbmd0aAoKCiAgaWYgKE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkoc2FmZU5hdGl2ZVByb3BlcnRpZXMsIHByb3ApKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9IC8vIFVOU0FGRTogaW5oZXJpdGVkIGZyb20gT2JqZWN0IHByb3RvdHlwZQogIC8vIGUuZyBjb25zdHJ1Y3RvcgoKCiAgaWYgKHByb3AgaW4gT2JqZWN0LnByb3RvdHlwZSkgewogICAgLy8gJ2luJyBpcyB1c2VkIGluc3RlYWQgb2YgaGFzT3duUHJvcGVydHkgZm9yIG5vZGVqcyB2MC4xMAogICAgLy8gd2hpY2ggaXMgaW5jb25zaXN0ZW50IG9uIHJvb3QgcHJvdG90eXBlcy4gSXQgaXMgc2FmZQogICAgLy8gaGVyZSBiZWNhdXNlIE9iamVjdC5wcm90b3R5cGUgaXMgYSByb290IG9iamVjdAogICAgcmV0dXJuIGZhbHNlOwogIH0gLy8gVU5TQUZFOiBpbmhlcml0ZWQgZnJvbSBGdW5jdGlvbiBwcm90b3R5cGUKICAvLyBlLmcgY2FsbCwgYXBwbHkKCgogIGlmIChwcm9wIGluIEZ1bmN0aW9uLnByb3RvdHlwZSkgewogICAgLy8gJ2luJyBpcyB1c2VkIGluc3RlYWQgb2YgaGFzT3duUHJvcGVydHkgZm9yIG5vZGVqcyB2MC4xMAogICAgLy8gd2hpY2ggaXMgaW5jb25zaXN0ZW50IG9uIHJvb3QgcHJvdG90eXBlcy4gSXQgaXMgc2FmZQogICAgLy8gaGVyZSBiZWNhdXNlIEZ1bmN0aW9uLnByb3RvdHlwZSBpcyBhIHJvb3Qgb2JqZWN0CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICByZXR1cm4gdHJ1ZTsKfQovKioKICogVmFsaWRhdGUgd2hldGhlciBhIG1ldGhvZCBpcyBzYWZlLgogKiBUaHJvd3MgYW4gZXJyb3Igd2hlbiB0aGF0J3Mgbm90IHRoZSBjYXNlLgogKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QKICovCi8vIFRPRE86IG1lcmdlIHRoaXMgZnVuY3Rpb24gaW50byBhc3NpZ24uanM/CgoKZnVuY3Rpb24gdmFsaWRhdGVTYWZlTWV0aG9kKG9iamVjdCwgbWV0aG9kKSB7CiAgaWYgKCFpc1NhZmVNZXRob2Qob2JqZWN0LCBtZXRob2QpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0byBtZXRob2QgIicgKyBtZXRob2QgKyAnIicpOwogIH0KfQovKioKICogQ2hlY2sgd2hldGhlciBhIG1ldGhvZCBpcyBzYWZlLgogKiBUaHJvd3MgYW4gZXJyb3Igd2hlbiB0aGF0J3Mgbm90IHRoZSBjYXNlIChmb3IgZXhhbXBsZSBmb3IgYGNvbnN0cnVjdG9yYCkuCiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZAogKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBzYWZlLCBmYWxzZSBvdGhlcndpc2UKICovCgoKZnVuY3Rpb24gaXNTYWZlTWV0aG9kKG9iamVjdCwgbWV0aG9kKSB7CiAgaWYgKG9iamVjdCA9PT0gbnVsbCB8fCBvYmplY3QgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2Ygb2JqZWN0W21ldGhvZF0gIT09ICdmdW5jdGlvbicpIHsKICAgIHJldHVybiBmYWxzZTsKICB9IC8vIFVOU0FGRTogZ2hvc3RlZAogIC8vIGUuZyBvdmVycmlkZGVuIHRvU3RyaW5nCiAgLy8gTm90ZSB0aGF0IElFMTAgZG9lc24ndCBzdXBwb3J0IF9fcHJvdG9fXyBhbmQgd2UgY2FuJ3QgZG8gdGhpcyBjaGVjayB0aGVyZS4KCgogIGlmIChPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKG9iamVjdCwgbWV0aG9kKSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiYgbWV0aG9kIGluIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfSAvLyBTQUZFOiB3aGl0ZWxpc3RlZAogIC8vIGUuZyB0b1N0cmluZwoKCiAgaWYgKE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkoc2FmZU5hdGl2ZU1ldGhvZHMsIG1ldGhvZCkpIHsKICAgIHJldHVybiB0cnVlOwogIH0gLy8gVU5TQUZFOiBpbmhlcml0ZWQgZnJvbSBPYmplY3QgcHJvdG90eXBlCiAgLy8gZS5nIGNvbnN0cnVjdG9yCgoKICBpZiAobWV0aG9kIGluIE9iamVjdC5wcm90b3R5cGUpIHsKICAgIC8vICdpbicgaXMgdXNlZCBpbnN0ZWFkIG9mIGhhc093blByb3BlcnR5IGZvciBub2RlanMgdjAuMTAKICAgIC8vIHdoaWNoIGlzIGluY29uc2lzdGVudCBvbiByb290IHByb3RvdHlwZXMuIEl0IGlzIHNhZmUKICAgIC8vIGhlcmUgYmVjYXVzZSBPYmplY3QucHJvdG90eXBlIGlzIGEgcm9vdCBvYmplY3QKICAgIHJldHVybiBmYWxzZTsKICB9IC8vIFVOU0FGRTogaW5oZXJpdGVkIGZyb20gRnVuY3Rpb24gcHJvdG90eXBlCiAgLy8gZS5nIGNhbGwsIGFwcGx5CgoKICBpZiAobWV0aG9kIGluIEZ1bmN0aW9uLnByb3RvdHlwZSkgewogICAgLy8gJ2luJyBpcyB1c2VkIGluc3RlYWQgb2YgaGFzT3duUHJvcGVydHkgZm9yIG5vZGVqcyB2MC4xMAogICAgLy8gd2hpY2ggaXMgaW5jb25zaXN0ZW50IG9uIHJvb3QgcHJvdG90eXBlcy4gSXQgaXMgc2FmZQogICAgLy8gaGVyZSBiZWNhdXNlIEZ1bmN0aW9uLnByb3RvdHlwZSBpcyBhIHJvb3Qgb2JqZWN0CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICByZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmplY3QpIHsKICByZXR1cm4gY3VzdG9tc190eXBlb2Yob2JqZWN0KSA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICYmIG9iamVjdC5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0Owp9Cgp2YXIgc2FmZU5hdGl2ZVByb3BlcnRpZXMgPSB7CiAgbGVuZ3RoOiB0cnVlLAogIG5hbWU6IHRydWUKfTsKdmFyIHNhZmVOYXRpdmVNZXRob2RzID0gewogIHRvU3RyaW5nOiB0cnVlLAogIHZhbHVlT2Y6IHRydWUsCiAgdG9Mb2NhbGVTdHJpbmc6IHRydWUKfTsKCgoKCgoKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vbWF0cml4L3N1YnNldC5qcwoKCgoKCgp2YXIgc3Vic2V0X25hbWUgPSAnc3Vic2V0JzsKdmFyIHN1YnNldF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddOwp2YXIgY3JlYXRlU3Vic2V0ID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoc3Vic2V0X25hbWUsIHN1YnNldF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXg7CgogIC8qKgogICAqIEdldCBvciBzZXQgYSBzdWJzZXQgb2YgYSBtYXRyaXggb3Igc3RyaW5nLgogICAqCiAgICogU3ludGF4OgogICAqICAgICBtYXRoLnN1YnNldCh2YWx1ZSwgaW5kZXgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXRyaWV2ZSBhIHN1YnNldAogICAqICAgICBtYXRoLnN1YnNldCh2YWx1ZSwgaW5kZXgsIHJlcGxhY2VtZW50IFssIGRlZmF1bHRWYWx1ZV0pICAvLyByZXBsYWNlIGEgc3Vic2V0CiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgICAvLyBnZXQgYSBzdWJzZXQKICAgKiAgICAgY29uc3QgZCA9IFtbMSwgMl0sIFszLCA0XV0KICAgKiAgICAgbWF0aC5zdWJzZXQoZCwgbWF0aC5pbmRleCgxLCAwKSkgICAgICAgIC8vIHJldHVybnMgMwogICAqICAgICBtYXRoLnN1YnNldChkLCBtYXRoLmluZGV4KFswLCAxXSwgMSkpICAgLy8gcmV0dXJucyBbWzJdLCBbNF1dCiAgICoKICAgKiAgICAgLy8gcmVwbGFjZSBhIHN1YnNldAogICAqICAgICBjb25zdCBlID0gW10KICAgKiAgICAgY29uc3QgZiA9IG1hdGguc3Vic2V0KGUsIG1hdGguaW5kZXgoMCwgWzAsIDJdKSwgWzUsIDZdKSAgLy8gZiA9IFtbNSwgNl1dCiAgICogICAgIGNvbnN0IGcgPSBtYXRoLnN1YnNldChmLCBtYXRoLmluZGV4KDEsIDEpLCA3LCAwKSAgICAgICAgIC8vIGcgPSBbWzUsIDZdLCBbMCwgN11dCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgICBzaXplLCByZXNpemUsIHNxdWVlemUsIGluZGV4CiAgICoKICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgc3RyaW5nfSBtYXRyaXggIEFuIGFycmF5LCBtYXRyaXgsIG9yIHN0cmluZwogICAqIEBwYXJhbSB7SW5kZXh9IGluZGV4ICAgICAgICAgICAgICAgICAgICAgQW4gaW5kZXggY29udGFpbmluZyByYW5nZXMgZm9yIGVhY2gKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpbWVuc2lvbgogICAqIEBwYXJhbSB7Kn0gW3JlcGxhY2VtZW50XSAgICAgICAgICAgICAgICAgQW4gYXJyYXksIG1hdHJpeCwgb3Igc2NhbGFyLgogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgcHJvdmlkZWQsIHRoZSBzdWJzZXQgaXMgcmVwbGFjZWQgd2l0aCByZXBsYWNlbWVudC4KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBwcm92aWRlZCwgdGhlIHN1YnNldCBpcyByZXR1cm5lZAogICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT11bmRlZmluZWRdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW4KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXRyaXggaXMgcmVzaXplZC4gSWYgbm90IHByb3ZpZGVkLAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aC5tYXRyaXggZWxlbWVudHMgd2lsbCBiZSBsZWZ0IHVuZGVmaW5lZC4KICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeCB8IHN0cmluZ30gRWl0aGVyIHRoZSByZXRyaWV2ZWQgc3Vic2V0IG9yIHRoZSB1cGRhdGVkIG1hdHJpeC4KICAgKi8KICByZXR1cm4gdHlwZWQoc3Vic2V0X25hbWUsIHsKICAgIC8vIGdldCBzdWJzZXQKICAgICdBcnJheSwgSW5kZXgnOiBmdW5jdGlvbiBBcnJheUluZGV4KHZhbHVlLCBpbmRleCkgewogICAgICB2YXIgbSA9IG1hdHJpeCh2YWx1ZSk7CiAgICAgIHZhciBzdWJzZXQgPSBtLnN1YnNldChpbmRleCk7IC8vIHJldHVybnMgYSBNYXRyaXgKCiAgICAgIHJldHVybiBpbmRleC5pc1NjYWxhcigpID8gc3Vic2V0IDogc3Vic2V0LnZhbHVlT2YoKTsgLy8gcmV0dXJuIGFuIEFycmF5IChsaWtlIHRoZSBpbnB1dCkKICAgIH0sCiAgICAnTWF0cml4LCBJbmRleCc6IGZ1bmN0aW9uIE1hdHJpeEluZGV4KHZhbHVlLCBpbmRleCkgewogICAgICByZXR1cm4gdmFsdWUuc3Vic2V0KGluZGV4KTsKICAgIH0sCiAgICAnT2JqZWN0LCBJbmRleCc6IF9nZXRPYmplY3RQcm9wZXJ0eSwKICAgICdzdHJpbmcsIEluZGV4JzogX2dldFN1YnN0cmluZywKICAgIC8vIHNldCBzdWJzZXQKICAgICdBcnJheSwgSW5kZXgsIGFueSc6IGZ1bmN0aW9uIEFycmF5SW5kZXhBbnkodmFsdWUsIGluZGV4LCByZXBsYWNlbWVudCkgewogICAgICByZXR1cm4gbWF0cml4KE9iamVjdCh1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSkodmFsdWUpKS5zdWJzZXQoaW5kZXgsIHJlcGxhY2VtZW50LCB1bmRlZmluZWQpLnZhbHVlT2YoKTsKICAgIH0sCiAgICAnQXJyYXksIEluZGV4LCBhbnksIGFueSc6IGZ1bmN0aW9uIEFycmF5SW5kZXhBbnlBbnkodmFsdWUsIGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKSB7CiAgICAgIHJldHVybiBtYXRyaXgoT2JqZWN0KHV0aWxzX29iamVjdFsiYSIgLyogY2xvbmUgKi9dKSh2YWx1ZSkpLnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSkudmFsdWVPZigpOwogICAgfSwKICAgICdNYXRyaXgsIEluZGV4LCBhbnknOiBmdW5jdGlvbiBNYXRyaXhJbmRleEFueSh2YWx1ZSwgaW5kZXgsIHJlcGxhY2VtZW50KSB7CiAgICAgIHJldHVybiB2YWx1ZS5jbG9uZSgpLnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQpOwogICAgfSwKICAgICdNYXRyaXgsIEluZGV4LCBhbnksIGFueSc6IGZ1bmN0aW9uIE1hdHJpeEluZGV4QW55QW55KHZhbHVlLCBpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSkgewogICAgICByZXR1cm4gdmFsdWUuY2xvbmUoKS5zdWJzZXQoaW5kZXgsIHJlcGxhY2VtZW50LCBkZWZhdWx0VmFsdWUpOwogICAgfSwKICAgICdzdHJpbmcsIEluZGV4LCBzdHJpbmcnOiBfc2V0U3Vic3RyaW5nLAogICAgJ3N0cmluZywgSW5kZXgsIHN0cmluZywgc3RyaW5nJzogX3NldFN1YnN0cmluZywKICAgICdPYmplY3QsIEluZGV4LCBhbnknOiBfc2V0T2JqZWN0UHJvcGVydHkKICB9KTsKfSk7Ci8qKgogKiBSZXRyaWV2ZSBhIHN1YnNldCBvZiBhIHN0cmluZwogKiBAcGFyYW0ge3N0cmluZ30gc3RyICAgICAgICAgICAgc3RyaW5nIGZyb20gd2hpY2ggdG8gZ2V0IGEgc3Vic3RyaW5nCiAqIEBwYXJhbSB7SW5kZXh9IGluZGV4ICAgICAgICAgICBBbiBpbmRleCBjb250YWluaW5nIHJhbmdlcyBmb3IgZWFjaCBkaW1lbnNpb24KICogQHJldHVybnMge3N0cmluZ30gc3Vic3RyaW5nCiAqIEBwcml2YXRlCiAqLwoKZnVuY3Rpb24gX2dldFN1YnN0cmluZyhzdHIsIGluZGV4KSB7CiAgaWYgKCFPYmplY3QoaXNbInQiIC8qIGlzSW5kZXggKi9dKShpbmRleCkpIHsKICAgIC8vIFRPRE86IGJldHRlciBlcnJvciBtZXNzYWdlCiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmRleCBleHBlY3RlZCcpOwogIH0KCiAgaWYgKGluZGV4LnNpemUoKS5sZW5ndGggIT09IDEpIHsKICAgIHRocm93IG5ldyBEaW1lbnNpb25FcnJvclsiYSIgLyogRGltZW5zaW9uRXJyb3IgKi9dKGluZGV4LnNpemUoKS5sZW5ndGgsIDEpOwogIH0gLy8gdmFsaWRhdGUgd2hldGhlciB0aGUgcmFuZ2UgaXMgb3V0IG9mIHJhbmdlCgoKICB2YXIgc3RyTGVuID0gc3RyLmxlbmd0aDsKICBPYmplY3QodXRpbHNfYXJyYXlbInMiIC8qIHZhbGlkYXRlSW5kZXggKi9dKShpbmRleC5taW4oKVswXSwgc3RyTGVuKTsKICBPYmplY3QodXRpbHNfYXJyYXlbInMiIC8qIHZhbGlkYXRlSW5kZXggKi9dKShpbmRleC5tYXgoKVswXSwgc3RyTGVuKTsKICB2YXIgcmFuZ2UgPSBpbmRleC5kaW1lbnNpb24oMCk7CiAgdmFyIHN1YnN0ciA9ICcnOwogIHJhbmdlLmZvckVhY2goZnVuY3Rpb24gKHYpIHsKICAgIHN1YnN0ciArPSBzdHIuY2hhckF0KHYpOwogIH0pOwogIHJldHVybiBzdWJzdHI7Cn0KLyoqCiAqIFJlcGxhY2UgYSBzdWJzdHJpbmcgaW4gYSBzdHJpbmcKICogQHBhcmFtIHtzdHJpbmd9IHN0ciAgICAgICAgICAgIHN0cmluZyB0byBiZSByZXBsYWNlZAogKiBAcGFyYW0ge0luZGV4fSBpbmRleCAgICAgICAgICAgQW4gaW5kZXggY29udGFpbmluZyByYW5nZXMgZm9yIGVhY2ggZGltZW5zaW9uCiAqIEBwYXJhbSB7c3RyaW5nfSByZXBsYWNlbWVudCAgICBSZXBsYWNlbWVudCBzdHJpbmcKICogQHBhcmFtIHtzdHJpbmd9IFtkZWZhdWx0VmFsdWVdIERlZmF1bHQgdmFsdWUgdG8gYmUgdXNlcyB3aGVuIHJlc2l6aW5nCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3RyaW5nLiBpcyAnICcgYnkgZGVmYXVsdAogKiBAcmV0dXJucyB7c3RyaW5nfSByZXN1bHQKICogQHByaXZhdGUKICovCgoKZnVuY3Rpb24gX3NldFN1YnN0cmluZyhzdHIsIGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKSB7CiAgaWYgKCFpbmRleCB8fCBpbmRleC5pc0luZGV4ICE9PSB0cnVlKSB7CiAgICAvLyBUT0RPOiBiZXR0ZXIgZXJyb3IgbWVzc2FnZQogICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5kZXggZXhwZWN0ZWQnKTsKICB9CgogIGlmIChpbmRleC5zaXplKCkubGVuZ3RoICE9PSAxKSB7CiAgICB0aHJvdyBuZXcgRGltZW5zaW9uRXJyb3JbImEiIC8qIERpbWVuc2lvbkVycm9yICovXShpbmRleC5zaXplKCkubGVuZ3RoLCAxKTsKICB9CgogIGlmIChkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkgewogICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgIT09ICdzdHJpbmcnIHx8IGRlZmF1bHRWYWx1ZS5sZW5ndGggIT09IDEpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU2luZ2xlIGNoYXJhY3RlciBleHBlY3RlZCBhcyBkZWZhdWx0VmFsdWUnKTsKICAgIH0KICB9IGVsc2UgewogICAgZGVmYXVsdFZhbHVlID0gJyAnOwogIH0KCiAgdmFyIHJhbmdlID0gaW5kZXguZGltZW5zaW9uKDApOwogIHZhciBsZW4gPSByYW5nZS5zaXplKClbMF07CgogIGlmIChsZW4gIT09IHJlcGxhY2VtZW50Lmxlbmd0aCkgewogICAgdGhyb3cgbmV3IERpbWVuc2lvbkVycm9yWyJhIiAvKiBEaW1lbnNpb25FcnJvciAqL10ocmFuZ2Uuc2l6ZSgpWzBdLCByZXBsYWNlbWVudC5sZW5ndGgpOwogIH0gLy8gdmFsaWRhdGUgd2hldGhlciB0aGUgcmFuZ2UgaXMgb3V0IG9mIHJhbmdlCgoKICB2YXIgc3RyTGVuID0gc3RyLmxlbmd0aDsKICBPYmplY3QodXRpbHNfYXJyYXlbInMiIC8qIHZhbGlkYXRlSW5kZXggKi9dKShpbmRleC5taW4oKVswXSk7CiAgT2JqZWN0KHV0aWxzX2FycmF5WyJzIiAvKiB2YWxpZGF0ZUluZGV4ICovXSkoaW5kZXgubWF4KClbMF0pOyAvLyBjb3B5IHRoZSBzdHJpbmcgaW50byBhbiBhcnJheSB3aXRoIGNoYXJhY3RlcnMKCiAgdmFyIGNoYXJzID0gW107CgogIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyTGVuOyBpKyspIHsKICAgIGNoYXJzW2ldID0gc3RyLmNoYXJBdChpKTsKICB9CgogIHJhbmdlLmZvckVhY2goZnVuY3Rpb24gKHYsIGkpIHsKICAgIGNoYXJzW3ZdID0gcmVwbGFjZW1lbnQuY2hhckF0KGlbMF0pOwogIH0pOyAvLyBpbml0aWFsaXplIHVuZGVmaW5lZCBjaGFyYWN0ZXJzIHdpdGggYSBzcGFjZQoKICBpZiAoY2hhcnMubGVuZ3RoID4gc3RyTGVuKSB7CiAgICBmb3IgKHZhciBfaSA9IHN0ckxlbiAtIDEsIF9sZW4gPSBjaGFycy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgewogICAgICBpZiAoIWNoYXJzW19pXSkgewogICAgICAgIGNoYXJzW19pXSA9IGRlZmF1bHRWYWx1ZTsKICAgICAgfQogICAgfQogIH0KCiAgcmV0dXJuIGNoYXJzLmpvaW4oJycpOwp9Ci8qKgogKiBSZXRyaWV2ZSBhIHByb3BlcnR5IGZyb20gYW4gb2JqZWN0CiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICogQHBhcmFtIHtJbmRleH0gaW5kZXgKICogQHJldHVybiB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5CiAqIEBwcml2YXRlCiAqLwoKCmZ1bmN0aW9uIF9nZXRPYmplY3RQcm9wZXJ0eShvYmplY3QsIGluZGV4KSB7CiAgaWYgKGluZGV4LnNpemUoKS5sZW5ndGggIT09IDEpIHsKICAgIHRocm93IG5ldyBEaW1lbnNpb25FcnJvclsiYSIgLyogRGltZW5zaW9uRXJyb3IgKi9dKGluZGV4LnNpemUoKSwgMSk7CiAgfQoKICB2YXIga2V5ID0gaW5kZXguZGltZW5zaW9uKDApOwoKICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N0cmluZyBleHBlY3RlZCBhcyBpbmRleCB0byByZXRyaWV2ZSBhbiBvYmplY3QgcHJvcGVydHknKTsKICB9CgogIHJldHVybiBnZXRTYWZlUHJvcGVydHkob2JqZWN0LCBrZXkpOwp9Ci8qKgogKiBTZXQgYSBwcm9wZXJ0eSBvbiBhbiBvYmplY3QKICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogKiBAcGFyYW0ge0luZGV4fSBpbmRleAogKiBAcGFyYW0geyp9IHJlcGxhY2VtZW50CiAqIEByZXR1cm4geyp9IFJldHVybnMgdGhlIHVwZGF0ZWQgb2JqZWN0CiAqIEBwcml2YXRlCiAqLwoKCmZ1bmN0aW9uIF9zZXRPYmplY3RQcm9wZXJ0eShvYmplY3QsIGluZGV4LCByZXBsYWNlbWVudCkgewogIGlmIChpbmRleC5zaXplKCkubGVuZ3RoICE9PSAxKSB7CiAgICB0aHJvdyBuZXcgRGltZW5zaW9uRXJyb3JbImEiIC8qIERpbWVuc2lvbkVycm9yICovXShpbmRleC5zaXplKCksIDEpOwogIH0KCiAgdmFyIGtleSA9IGluZGV4LmRpbWVuc2lvbigwKTsKCiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdHJpbmcgZXhwZWN0ZWQgYXMgaW5kZXggdG8gcmV0cmlldmUgYW4gb2JqZWN0IHByb3BlcnR5Jyk7CiAgfSAvLyBjbG9uZSB0aGUgb2JqZWN0LCBhbmQgYXBwbHkgdGhlIHByb3BlcnR5IHRvIHRoZSBjbG9uZQoKCiAgdmFyIHVwZGF0ZWQgPSBPYmplY3QodXRpbHNfb2JqZWN0WyJhIiAvKiBjbG9uZSAqL10pKG9iamVjdCk7CiAgc2V0U2FmZVByb3BlcnR5KHVwZGF0ZWQsIGtleSwgcmVwbGFjZW1lbnQpOwogIHJldHVybiB1cGRhdGVkOwp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL21hdHJpeC90cmFuc3Bvc2UuanMKCgoKdmFyIHRyYW5zcG9zZV9uYW1lID0gJ3RyYW5zcG9zZSc7CnZhciB0cmFuc3Bvc2VfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnXTsKdmFyIGNyZWF0ZVRyYW5zcG9zZSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHRyYW5zcG9zZV9uYW1lLCB0cmFuc3Bvc2VfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4OwoKICAvKioKICAgKiBUcmFuc3Bvc2UgYSBtYXRyaXguIEFsbCB2YWx1ZXMgb2YgdGhlIG1hdHJpeCBhcmUgcmVmbGVjdGVkIG92ZXIgaXRzCiAgICogbWFpbiBkaWFnb25hbC4gT25seSBhcHBsaWNhYmxlIHRvIHR3byBkaW1lbnNpb25hbCBtYXRyaWNlcyBjb250YWluaW5nCiAgICogYSB2ZWN0b3IgKGkuZS4gaGF2aW5nIHNpemUgYFsxLG5dYCBvciBgW24sMV1gKS4gT25lIGRpbWVuc2lvbmFsCiAgICogdmVjdG9ycyBhbmQgc2NhbGFycyByZXR1cm4gdGhlIGlucHV0IHVuY2hhbmdlZC4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBtYXRoLnRyYW5zcG9zZSh4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICAgY29uc3QgQSA9IFtbMSwgMiwgM10sIFs0LCA1LCA2XV0KICAgKiAgICAgbWF0aC50cmFuc3Bvc2UoQSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtbMSwgNF0sIFsyLCA1XSwgWzMsIDZdXQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICAgZGlhZywgaW52LCBzdWJzZXQsIHNxdWVlemUKICAgKgogICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHggIE1hdHJpeCB0byBiZSB0cmFuc3Bvc2VkCiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgVGhlIHRyYW5zcG9zZWQgbWF0cml4CiAgICovCiAgdmFyIHRyYW5zcG9zZSA9IHR5cGVkKCd0cmFuc3Bvc2UnLCB7CiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkgewogICAgICAvLyB1c2UgZGVuc2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiB0cmFuc3Bvc2UobWF0cml4KHgpKS52YWx1ZU9mKCk7CiAgICB9LAogICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkgewogICAgICAvLyBtYXRyaXggc2l6ZQogICAgICB2YXIgc2l6ZSA9IHguc2l6ZSgpOyAvLyByZXN1bHQKCiAgICAgIHZhciBjOyAvLyBwcm9jZXNzIGRpbWVuc2lvbnMKCiAgICAgIHN3aXRjaCAoc2l6ZS5sZW5ndGgpIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICAvLyB2ZWN0b3IKICAgICAgICAgIGMgPSB4LmNsb25lKCk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAyOgogICAgICAgICAgewogICAgICAgICAgICAvLyByb3dzIGFuZCBjb2x1bW5zCiAgICAgICAgICAgIHZhciByb3dzID0gc2l6ZVswXTsKICAgICAgICAgICAgdmFyIGNvbHVtbnMgPSBzaXplWzFdOyAvLyBjaGVjayBjb2x1bW5zCgogICAgICAgICAgICBpZiAoY29sdW1ucyA9PT0gMCkgewogICAgICAgICAgICAgIC8vIHRocm93IGV4Y2VwdGlvbgogICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdDYW5ub3QgdHJhbnNwb3NlIGEgMkQgbWF0cml4IHdpdGggbm8gY29sdW1ucyAoc2l6ZTogJyArIE9iamVjdCh1dGlsc19zdHJpbmdbImQiIC8qIGZvcm1hdCAqL10pKHNpemUpICsgJyknKTsKICAgICAgICAgICAgfSAvLyBwcm9jZXNzIHN0b3JhZ2UgZm9ybWF0CgoKICAgICAgICAgICAgc3dpdGNoICh4LnN0b3JhZ2UoKSkgewogICAgICAgICAgICAgIGNhc2UgJ2RlbnNlJzoKICAgICAgICAgICAgICAgIGMgPSBfZGVuc2VUcmFuc3Bvc2UoeCwgcm93cywgY29sdW1ucyk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgY2FzZSAnc3BhcnNlJzoKICAgICAgICAgICAgICAgIGMgPSBfc3BhcnNlVHJhbnNwb3NlKHgsIHJvd3MsIGNvbHVtbnMpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgLy8gbXVsdGkgZGltZW5zaW9uYWwKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBhIHZlY3RvciBvciB0d28gZGltZW5zaW9uYWwgKHNpemU6ICcgKyBPYmplY3QodXRpbHNfc3RyaW5nWyJkIiAvKiBmb3JtYXQgKi9dKSh0aGlzLl9zaXplKSArICcpJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiBjOwogICAgfSwKICAgIC8vIHNjYWxhcnMKICAgIGFueTogZnVuY3Rpb24gYW55KHgpIHsKICAgICAgcmV0dXJuIE9iamVjdCh1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSkoeCk7CiAgICB9CiAgfSk7CgogIGZ1bmN0aW9uIF9kZW5zZVRyYW5zcG9zZShtLCByb3dzLCBjb2x1bW5zKSB7CiAgICAvLyBtYXRyaXggYXJyYXkKICAgIHZhciBkYXRhID0gbS5fZGF0YTsgLy8gdHJhbnNwb3NlZCBtYXRyaXggZGF0YQoKICAgIHZhciB0cmFuc3Bvc2VkID0gW107CiAgICB2YXIgdHJhbnNwb3NlZFJvdzsgLy8gbG9vcCBjb2x1bW5zCgogICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHsKICAgICAgLy8gaW5pdGlhbGl6ZSByb3cKICAgICAgdHJhbnNwb3NlZFJvdyA9IHRyYW5zcG9zZWRbal0gPSBbXTsgLy8gbG9vcCByb3dzCgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3M7IGkrKykgewogICAgICAgIC8vIHNldCBkYXRhCiAgICAgICAgdHJhbnNwb3NlZFJvd1tpXSA9IE9iamVjdCh1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSkoZGF0YVtpXVtqXSk7CiAgICAgIH0KICAgIH0gLy8gcmV0dXJuIG1hdHJpeAoKCiAgICByZXR1cm4gbS5jcmVhdGVEZW5zZU1hdHJpeCh7CiAgICAgIGRhdGE6IHRyYW5zcG9zZWQsCiAgICAgIHNpemU6IFtjb2x1bW5zLCByb3dzXSwKICAgICAgZGF0YXR5cGU6IG0uX2RhdGF0eXBlCiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIF9zcGFyc2VUcmFuc3Bvc2UobSwgcm93cywgY29sdW1ucykgewogICAgLy8gbWF0cml4IGFycmF5cwogICAgdmFyIHZhbHVlcyA9IG0uX3ZhbHVlczsKICAgIHZhciBpbmRleCA9IG0uX2luZGV4OwogICAgdmFyIHB0ciA9IG0uX3B0cjsgLy8gcmVzdWx0IG1hdHJpY2VzCgogICAgdmFyIGN2YWx1ZXMgPSB2YWx1ZXMgPyBbXSA6IHVuZGVmaW5lZDsKICAgIHZhciBjaW5kZXggPSBbXTsKICAgIHZhciBjcHRyID0gW107IC8vIHJvdyBjb3VudHMKCiAgICB2YXIgdyA9IFtdOwoKICAgIGZvciAodmFyIHggPSAwOyB4IDwgcm93czsgeCsrKSB7CiAgICAgIHdbeF0gPSAwOwogICAgfSAvLyB2YXJzCgoKICAgIHZhciBwLCBsLCBqOyAvLyBsb29wIHZhbHVlcyBpbiBtYXRyaXgKCiAgICBmb3IgKHAgPSAwLCBsID0gaW5kZXgubGVuZ3RoOyBwIDwgbDsgcCsrKSB7CiAgICAgIC8vIG51bWJlciBvZiB2YWx1ZXMgaW4gcm93CiAgICAgIHdbaW5kZXhbcF1dKys7CiAgICB9IC8vIGN1bXVsYXRpdmUgc3VtCgoKICAgIHZhciBzdW0gPSAwOyAvLyBpbml0aWFsaXplIGNwdHIgd2l0aCB0aGUgY3VtbXVsYXRpdmUgc3VtIG9mIHJvdyBjb3VudHMKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3M7IGkrKykgewogICAgICAvLyB1cGRhdGUgY3B0cgogICAgICBjcHRyLnB1c2goc3VtKTsgLy8gdXBkYXRlIHN1bQoKICAgICAgc3VtICs9IHdbaV07IC8vIHVwZGF0ZSB3CgogICAgICB3W2ldID0gY3B0cltpXTsKICAgIH0gLy8gdXBkYXRlIGNwdHIKCgogICAgY3B0ci5wdXNoKHN1bSk7IC8vIGxvb3AgY29sdW1ucwoKICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHsKICAgICAgLy8gdmFsdWVzICYgaW5kZXggaW4gY29sdW1uCiAgICAgIGZvciAodmFyIGswID0gcHRyW2pdLCBrMSA9IHB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHsKICAgICAgICAvLyBDIHZhbHVlcyAmIGluZGV4CiAgICAgICAgdmFyIHEgPSB3W2luZGV4W2tdXSsrOyAvLyBDW2osIGldID0gQVtpLCBqXQoKICAgICAgICBjaW5kZXhbcV0gPSBqOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzIChwYXR0ZXJuIG1hdHJpeCkKCiAgICAgICAgaWYgKHZhbHVlcykgewogICAgICAgICAgY3ZhbHVlc1txXSA9IE9iamVjdCh1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSkodmFsdWVzW2tdKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gLy8gcmV0dXJuIG1hdHJpeAoKCiAgICByZXR1cm4gbS5jcmVhdGVTcGFyc2VNYXRyaXgoewogICAgICB2YWx1ZXM6IGN2YWx1ZXMsCiAgICAgIGluZGV4OiBjaW5kZXgsCiAgICAgIHB0cjogY3B0ciwKICAgICAgc2l6ZTogW2NvbHVtbnMsIHJvd3NdLAogICAgICBkYXRhdHlwZTogbS5fZGF0YXR5cGUKICAgIH0pOwogIH0KCiAgcmV0dXJuIHRyYW5zcG9zZTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL21hdHJpeC9jdHJhbnNwb3NlLmpzCgp2YXIgY3RyYW5zcG9zZV9uYW1lID0gJ2N0cmFuc3Bvc2UnOwp2YXIgY3RyYW5zcG9zZV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3RyYW5zcG9zZScsICdjb25qJ107CnZhciBjcmVhdGVDdHJhbnNwb3NlID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoY3RyYW5zcG9zZV9uYW1lLCBjdHJhbnNwb3NlX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICB0cmFuc3Bvc2UgPSBfcmVmLnRyYW5zcG9zZSwKICAgICAgY29uaiA9IF9yZWYuY29uajsKCiAgLyoqCiAgICogVHJhbnNwb3NlIGFuZCBjb21wbGV4IGNvbmp1Z2F0ZSBhIG1hdHJpeC4gQWxsIHZhbHVlcyBvZiB0aGUgbWF0cml4IGFyZQogICAqIHJlZmxlY3RlZCBvdmVyIGl0cyBtYWluIGRpYWdvbmFsIGFuZCB0aGVuIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBpcwogICAqIHRha2VuLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gY29tcGxleCBjb25qdWdhdGlvbiBmb3Igc2NhbGFycyBhbmQKICAgKiB2ZWN0b3JzLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIG1hdGguY3RyYW5zcG9zZSh4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICAgY29uc3QgQSA9IFtbMSwgMiwgM10sIFs0LCA1LCBtYXRoLmNvbXBsZXgoNiw3KV1dCiAgICogICAgIG1hdGguY3RyYW5zcG9zZShBKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCA0XSwgWzIsIDVdLCBbMywge3JlOjYsaW06N31dXQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICAgdHJhbnNwb3NlLCBkaWFnLCBpbnYsIHN1YnNldCwgc3F1ZWV6ZQogICAqCiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0geCAgTWF0cml4IHRvIGJlIGN0cmFuc3Bvc2VkCiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgVGhlIGN0cmFuc3Bvc2VkIG1hdHJpeAogICAqLwogIHJldHVybiB0eXBlZChjdHJhbnNwb3NlX25hbWUsIHsKICAgIGFueTogZnVuY3Rpb24gYW55KHgpIHsKICAgICAgcmV0dXJuIGNvbmoodHJhbnNwb3NlKHgpKTsKICAgIH0KICB9KTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL21hdHJpeC96ZXJvcy5qcwoKCgoKdmFyIHplcm9zX25hbWUgPSAnemVyb3MnOwp2YXIgemVyb3NfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnbWF0cml4JywgJ0JpZ051bWJlciddOwp2YXIgY3JlYXRlWmVyb3MgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKSh6ZXJvc19uYW1lLCB6ZXJvc19kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LAogICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjsKCiAgLyoqCiAgICogQ3JlYXRlIGEgbWF0cml4IGZpbGxlZCB3aXRoIHplcm9zLiBUaGUgY3JlYXRlZCBtYXRyaXggY2FuIGhhdmUgb25lIG9yCiAgICogbXVsdGlwbGUgZGltZW5zaW9ucy4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguemVyb3MobSkKICAgKiAgICBtYXRoLnplcm9zKG0sIGZvcm1hdCkKICAgKiAgICBtYXRoLnplcm9zKG0sIG4pCiAgICogICAgbWF0aC56ZXJvcyhtLCBuLCBmb3JtYXQpCiAgICogICAgbWF0aC56ZXJvcyhbbSwgbl0pCiAgICogICAgbWF0aC56ZXJvcyhbbSwgbl0sIGZvcm1hdCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC56ZXJvcygzKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgWzAsIDAsIDBdCiAgICogICAgbWF0aC56ZXJvcygzLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1swLCAwXSwgWzAsIDBdLCBbMCwgMF1dCiAgICogICAgbWF0aC56ZXJvcygzLCAnZGVuc2UnKSAgICAgICAgIC8vIHJldHVybnMgWzAsIDAsIDBdCiAgICoKICAgKiAgICBjb25zdCBBID0gW1sxLCAyLCAzXSwgWzQsIDUsIDZdXQogICAqICAgIG1hdGguemVyb3MobWF0aC5zaXplKEEpKSAgICAgICAvLyByZXR1cm5zIFtbMCwgMCwgMF0sIFswLCAwLCAwXV0KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgb25lcywgaWRlbnRpdHksIHNpemUsIHJhbmdlCiAgICoKICAgKiBAcGFyYW0gey4uLm51bWJlciB8IEFycmF5fSBzaXplICAgIFRoZSBzaXplIG9mIGVhY2ggZGltZW5zaW9uIG9mIHRoZSBtYXRyaXgKICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF0gICAgICAgICAgIFRoZSBNYXRyaXggc3RvcmFnZSBmb3JtYXQKICAgKgogICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICAgICAgICAgQSBtYXRyaXggZmlsbGVkIHdpdGggemVyb3MKICAgKi8KICByZXR1cm4gdHlwZWQoemVyb3NfbmFtZSwgewogICAgJyc6IGZ1bmN0aW9uIF8oKSB7CiAgICAgIHJldHVybiBjb25maWcubWF0cml4ID09PSAnQXJyYXknID8gX3plcm9zKFtdKSA6IF96ZXJvcyhbXSwgJ2RlZmF1bHQnKTsKICAgIH0sCiAgICAvLyBtYXRoLnplcm9zKG0sIG4sIHAsIC4uLiwgZm9ybWF0KQogICAgLy8gVE9ETzogbW9yZSBhY2N1cmF0ZSBzaWduYXR1cmUgJy4uLm51bWJlciB8IEJpZ051bWJlciwgc3RyaW5nJyBhcyBzb29uIGFzIHR5cGVkLWZ1bmN0aW9uIHN1cHBvcnRzIHRoaXMKICAgICcuLi5udW1iZXIgfCBCaWdOdW1iZXIgfCBzdHJpbmcnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJTdHJpbmcoc2l6ZSkgewogICAgICB2YXIgbGFzdCA9IHNpemVbc2l6ZS5sZW5ndGggLSAxXTsKCiAgICAgIGlmICh0eXBlb2YgbGFzdCA9PT0gJ3N0cmluZycpIHsKICAgICAgICB2YXIgZm9ybWF0ID0gc2l6ZS5wb3AoKTsKICAgICAgICByZXR1cm4gX3plcm9zKHNpemUsIGZvcm1hdCk7CiAgICAgIH0gZWxzZSBpZiAoY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JykgewogICAgICAgIHJldHVybiBfemVyb3Moc2l6ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIF96ZXJvcyhzaXplLCAnZGVmYXVsdCcpOwogICAgICB9CiAgICB9LAogICAgQXJyYXk6IF96ZXJvcywKICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHNpemUpIHsKICAgICAgdmFyIGZvcm1hdCA9IHNpemUuc3RvcmFnZSgpOwogICAgICByZXR1cm4gX3plcm9zKHNpemUudmFsdWVPZigpLCBmb3JtYXQpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCwgc3RyaW5nJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhTdHJpbmcoc2l6ZSwgZm9ybWF0KSB7CiAgICAgIHJldHVybiBfemVyb3Moc2l6ZS52YWx1ZU9mKCksIGZvcm1hdCk7CiAgICB9CiAgfSk7CiAgLyoqCiAgICogQ3JlYXRlIGFuIEFycmF5IG9yIE1hdHJpeCB3aXRoIHplcm9zCiAgICogQHBhcmFtIHtBcnJheX0gc2l6ZQogICAqIEBwYXJhbSB7c3RyaW5nfSBbZm9ybWF0PSdkZWZhdWx0J10KICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0KICAgKiBAcHJpdmF0ZQogICAqLwoKICBmdW5jdGlvbiBfemVyb3Moc2l6ZSwgZm9ybWF0KSB7CiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IF9ub3JtYWxpemUoc2l6ZSk7CgogICAgdmFyIGRlZmF1bHRWYWx1ZSA9IGhhc0JpZ051bWJlcnMgPyBuZXcgQmlnTnVtYmVyKDApIDogMDsKCiAgICBfdmFsaWRhdGUoc2l6ZSk7CgogICAgaWYgKGZvcm1hdCkgewogICAgICAvLyByZXR1cm4gYSBtYXRyaXgKICAgICAgdmFyIG0gPSBtYXRyaXgoZm9ybWF0KTsKCiAgICAgIGlmIChzaXplLmxlbmd0aCA+IDApIHsKICAgICAgICByZXR1cm4gbS5yZXNpemUoc2l6ZSwgZGVmYXVsdFZhbHVlKTsKICAgICAgfQoKICAgICAgcmV0dXJuIG07CiAgICB9IGVsc2UgewogICAgICAvLyByZXR1cm4gYW4gQXJyYXkKICAgICAgdmFyIGFyciA9IFtdOwoKICAgICAgaWYgKHNpemUubGVuZ3RoID4gMCkgewogICAgICAgIHJldHVybiBPYmplY3QodXRpbHNfYXJyYXlbIm8iIC8qIHJlc2l6ZSAqL10pKGFyciwgc2l6ZSwgZGVmYXVsdFZhbHVlKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGFycjsKICAgIH0KICB9IC8vIHJlcGxhY2UgQmlnTnVtYmVycyB3aXRoIG51bWJlcnMsIHJldHVybnMgdHJ1ZSBpZiBzaXplIGNvbnRhaW5lZCBCaWdOdW1iZXJzCgoKICBmdW5jdGlvbiBfbm9ybWFsaXplKHNpemUpIHsKICAgIHZhciBoYXNCaWdOdW1iZXJzID0gZmFsc2U7CiAgICBzaXplLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyKSB7CiAgICAgIGlmIChPYmplY3QoaXNbImUiIC8qIGlzQmlnTnVtYmVyICovXSkodmFsdWUpKSB7CiAgICAgICAgaGFzQmlnTnVtYmVycyA9IHRydWU7CiAgICAgICAgYXJyW2luZGV4XSA9IHZhbHVlLnRvTnVtYmVyKCk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIGhhc0JpZ051bWJlcnM7CiAgfSAvLyB2YWxpZGF0ZSBhcmd1bWVudHMKCgogIGZ1bmN0aW9uIF92YWxpZGF0ZShzaXplKSB7CiAgICBzaXplLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8ICFPYmplY3QodXRpbHNfbnVtYmVyWyJpIiAvKiBpc0ludGVnZXIgKi9dKSh2YWx1ZSkgfHwgdmFsdWUgPCAwKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIHplcm9zIG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTsKICAgICAgfQogICAgfSk7CiAgfQp9KTsgLy8gVE9ETzogemVyb3MgY29udGFpbnMgYWxtb3N0IHRoZSBzYW1lIGNvZGUgYXMgb25lcy4gUmV1c2UgdGhpcz8KLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vc3BlY2lhbC9lcmYuanMKCgoKdmFyIGVyZl9uYW1lID0gJ2VyZic7CnZhciBlcmZfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddOwp2YXIgY3JlYXRlRXJmID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoZXJmX25hbWUsIGVyZl9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDsKCiAgLyoqCiAgICogQ29tcHV0ZSB0aGUgZXJmIGZ1bmN0aW9uIG9mIGEgdmFsdWUgdXNpbmcgYSByYXRpb25hbCBDaGVieXNoZXYKICAgKiBhcHByb3hpbWF0aW9ucyBmb3IgZGlmZmVyZW50IGludGVydmFscyBvZiB4LgogICAqCiAgICogVGhpcyBpcyBhIHRyYW5zbGF0aW9uIG9mIFcuIEouIENvZHkncyBGb3J0cmFuIGltcGxlbWVudGF0aW9uIGZyb20gMTk4NwogICAqICggaHR0cHM6Ly93d3cubmV0bGliLm9yZy9zcGVjZnVuL2VyZiApLiBTZWUgdGhlIEFNUyBwdWJsaWNhdGlvbgogICAqICJSYXRpb25hbCBDaGVieXNoZXYgQXBwcm94aW1hdGlvbnMgZm9yIHRoZSBFcnJvciBGdW5jdGlvbiIgYnkgVy4gSi4gQ29keQogICAqIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGlzIHByb2Nlc3MuCiAgICoKICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5lcmYoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5lcmYoMC4yKSAgICAvLyByZXR1cm5zIDAuMjIyNzAyNTg5MjEwNDc4NDcKICAgKiAgICBtYXRoLmVyZigtMC41KSAgIC8vIHJldHVybnMgLTAuNTIwNDk5ODc3ODEzMDQ2NQogICAqICAgIG1hdGguZXJmKDQpICAgICAgLy8gcmV0dXJucyAwLjk5OTk5OTk4NDU4Mjc0MjEKICAgKgogICAqIEBwYXJhbSB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHggICBBIHJlYWwgbnVtYmVyCiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9ICAgIFRoZSBlcmYgb2YgYHhgCiAgICovCiAgdmFyIGVyZiA9IHR5cGVkKCduYW1lJywgewogICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkgewogICAgICB2YXIgeSA9IE1hdGguYWJzKHgpOwoKICAgICAgaWYgKHkgPj0gTUFYX05VTSkgewogICAgICAgIHJldHVybiBPYmplY3QodXRpbHNfbnVtYmVyWyJuIiAvKiBzaWduICovXSkoeCk7CiAgICAgIH0KCiAgICAgIGlmICh5IDw9IFRIUkVTSCkgewogICAgICAgIHJldHVybiBPYmplY3QodXRpbHNfbnVtYmVyWyJuIiAvKiBzaWduICovXSkoeCkgKiBlcmYxKHkpOwogICAgICB9CgogICAgICBpZiAoeSA8PSA0LjApIHsKICAgICAgICByZXR1cm4gT2JqZWN0KHV0aWxzX251bWJlclsibiIgLyogc2lnbiAqL10pKHgpICogKDEgLSBlcmZjMih5KSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBPYmplY3QodXRpbHNfbnVtYmVyWyJuIiAvKiBzaWduICovXSkoeCkgKiAoMSAtIGVyZmMzKHkpKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChuKSB7CiAgICAgIHJldHVybiBkZWVwTWFwKG4sIGVyZik7CiAgICB9IC8vIFRPRE86IEZvciBjb21wbGV4IG51bWJlcnMsIHVzZSB0aGUgYXBwcm94aW1hdGlvbiBmb3IgdGhlIEZhZGRlZXZhIGZ1bmN0aW9uCiAgICAvLyAgZnJvbSAiTW9yZSBFZmZpY2llbnQgQ29tcHV0YXRpb24gb2YgdGhlIENvbXBsZXggRXJyb3IgRnVuY3Rpb24iIChBTVMpCgogIH0pOwogIC8qKgogICAqIEFwcHJveGltYXRlcyB0aGUgZXJyb3IgZnVuY3Rpb24gZXJmKCkgZm9yIHggPD0gMC40Njg3NSB1c2luZyB0aGlzIGZ1bmN0aW9uOgogICAqICAgICAgICAgICAgICAgbgogICAqIGVyZih4KSA9IHggKiBzdW0gKHBfaiAqIHheKDJqKSkgLyAocV9qICogeF4oMmopKQogICAqICAgICAgICAgICAgICBqPTAKICAgKi8KCiAgZnVuY3Rpb24gZXJmMSh5KSB7CiAgICB2YXIgeXNxID0geSAqIHk7CiAgICB2YXIgeG51bSA9IGVyZl9QWzBdWzRdICogeXNxOwogICAgdmFyIHhkZW4gPSB5c3E7CiAgICB2YXIgaTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7CiAgICAgIHhudW0gPSAoeG51bSArIGVyZl9QWzBdW2ldKSAqIHlzcTsKICAgICAgeGRlbiA9ICh4ZGVuICsgUVswXVtpXSkgKiB5c3E7CiAgICB9CgogICAgcmV0dXJuIHkgKiAoeG51bSArIGVyZl9QWzBdWzNdKSAvICh4ZGVuICsgUVswXVszXSk7CiAgfQogIC8qKgogICAqIEFwcHJveGltYXRlcyB0aGUgY29tcGxlbWVudCBvZiB0aGUgZXJyb3IgZnVuY3Rpb24gZXJmYygpIGZvcgogICAqIDAuNDY4NzUgPD0geCA8PSA0LjAgdXNpbmcgdGhpcyBmdW5jdGlvbjoKICAgKiAgICAgICAgICAgICAgICAgICAgICAgbgogICAqIGVyZmMoeCkgPSBlXigteF4yKSAqIHN1bSAocF9qICogeF5qKSAvIChxX2ogKiB4XmopCiAgICogICAgICAgICAgICAgICAgICAgICAgaj0wCiAgICovCgoKICBmdW5jdGlvbiBlcmZjMih5KSB7CiAgICB2YXIgeG51bSA9IGVyZl9QWzFdWzhdICogeTsKICAgIHZhciB4ZGVuID0geTsKICAgIHZhciBpOwoKICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpICs9IDEpIHsKICAgICAgeG51bSA9ICh4bnVtICsgZXJmX1BbMV1baV0pICogeTsKICAgICAgeGRlbiA9ICh4ZGVuICsgUVsxXVtpXSkgKiB5OwogICAgfQoKICAgIHZhciByZXN1bHQgPSAoeG51bSArIGVyZl9QWzFdWzddKSAvICh4ZGVuICsgUVsxXVs3XSk7CiAgICB2YXIgeXNxID0gcGFyc2VJbnQoeSAqIDE2KSAvIDE2OwogICAgdmFyIGRlbCA9ICh5IC0geXNxKSAqICh5ICsgeXNxKTsKICAgIHJldHVybiBNYXRoLmV4cCgteXNxICogeXNxKSAqIE1hdGguZXhwKC1kZWwpICogcmVzdWx0OwogIH0KICAvKioKICAgKiBBcHByb3hpbWF0ZXMgdGhlIGNvbXBsZW1lbnQgb2YgdGhlIGVycm9yIGZ1bmN0aW9uIGVyZmMoKSBmb3IgeCA+IDQuMCB1c2luZwogICAqIHRoaXMgZnVuY3Rpb246CiAgICoKICAgKiBlcmZjKHgpID0gKGVeKC14XjIpIC8geCkgKiBbIDEvc3FydChwaSkgKwogICAqICAgICAgICAgICAgICAgbgogICAqICAgIDEvKHheMikgKiBzdW0gKHBfaiAqIHheKC0yaikpIC8gKHFfaiAqIHheKC0yaikpIF0KICAgKiAgICAgICAgICAgICAgaj0wCiAgICovCgoKICBmdW5jdGlvbiBlcmZjMyh5KSB7CiAgICB2YXIgeXNxID0gMSAvICh5ICogeSk7CiAgICB2YXIgeG51bSA9IGVyZl9QWzJdWzVdICogeXNxOwogICAgdmFyIHhkZW4gPSB5c3E7CiAgICB2YXIgaTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSArPSAxKSB7CiAgICAgIHhudW0gPSAoeG51bSArIGVyZl9QWzJdW2ldKSAqIHlzcTsKICAgICAgeGRlbiA9ICh4ZGVuICsgUVsyXVtpXSkgKiB5c3E7CiAgICB9CgogICAgdmFyIHJlc3VsdCA9IHlzcSAqICh4bnVtICsgZXJmX1BbMl1bNF0pIC8gKHhkZW4gKyBRWzJdWzRdKTsKICAgIHJlc3VsdCA9IChTUVJQSSAtIHJlc3VsdCkgLyB5OwogICAgeXNxID0gcGFyc2VJbnQoeSAqIDE2KSAvIDE2OwogICAgdmFyIGRlbCA9ICh5IC0geXNxKSAqICh5ICsgeXNxKTsKICAgIHJldHVybiBNYXRoLmV4cCgteXNxICogeXNxKSAqIE1hdGguZXhwKC1kZWwpICogcmVzdWx0OwogIH0KCiAgcmV0dXJuIGVyZjsKfSk7Ci8qKgogKiBVcHBlciBib3VuZCBmb3IgdGhlIGZpcnN0IGFwcHJveGltYXRpb24gaW50ZXJ2YWwsIDAgPD0geCA8PSBUSFJFU0gKICogQGNvbnN0YW50CiAqLwoKdmFyIFRIUkVTSCA9IDAuNDY4NzU7Ci8qKgogKiBDb25zdGFudCB1c2VkIGJ5IFcuIEouIENvZHkncyBGb3J0cmFuNzcgaW1wbGVtZW50YXRpb24gdG8gZGVub3RlIHNxcnQocGkpCiAqIEBjb25zdGFudAogKi8KCnZhciBTUVJQSSA9IDUuNjQxODk1ODM1NDc3NTYyODY5NWUtMTsKLyoqCiAqIENvZWZmaWNpZW50cyBmb3IgZWFjaCB0ZXJtIG9mIHRoZSBudW1lcmF0b3Igc3VtIChwX2opIGZvciBlYWNoIGFwcHJveGltYXRpb24KICogaW50ZXJ2YWwgKHNlZSBXLiBKLiBDb2R5J3MgcGFwZXIgZm9yIG1vcmUgZGV0YWlscykKICogQGNvbnN0YW50CiAqLwoKdmFyIGVyZl9QID0gW1szLjE2MTEyMzc0Mzg3MDU2NTYwZTAwLCAxLjEzODY0MTU0MTUxMDUwMTU2ZTAyLCAzLjc3NDg1MjM3Njg1MzAyMDIxZTAyLCAzLjIwOTM3NzU4OTEzODQ2OTQ3ZTAzLCAxLjg1Nzc3NzA2MTg0NjAzMTUzZS0xXSwgWzUuNjQxODg0OTY5ODg2NzAwODllLTEsIDguODgzMTQ5Nzk0Mzg4Mzc1OTRlMDAsIDYuNjExOTE5MDYzNzE0MTYyOTVlMDEsIDIuOTg2MzUxMzgxOTc0MDAxMzFlMDIsIDguODE5NTIyMjEyNDE3NjkwOTBlMDIsIDEuNzEyMDQ3NjEyNjM0MDcwNThlMDMsIDIuMDUxMDc4Mzc3ODI2MDcxNDdlMDMsIDEuMjMwMzM5MzU0Nzk3OTk3MjVlMDMsIDIuMTUzMTE1MzU0NzQ0MDM4NDZlLThdLCBbMy4wNTMyNjYzNDk2MTIzMjM0NGUtMSwgMy42MDM0NDg5OTk0OTgwNDQzOWUtMSwgMS4yNTc4MTcyNjExMTIyOTI0NmUtMSwgMS42MDgzNzg1MTQ4NzQyMjc2NmUtMiwgNi41ODc0OTE2MTUyOTgzNzgwM2UtNCwgMS42MzE1Mzg3MTM3MzAyMDk3OGUtMl1dOwovKioKICogQ29lZmZpY2llbnRzIGZvciBlYWNoIHRlcm0gb2YgdGhlIGRlbm9taW5hdG9yIHN1bSAocV9qKSBmb3IgZWFjaCBhcHByb3hpbWF0aW9uCiAqIGludGVydmFsIChzZWUgVy4gSi4gQ29keSdzIHBhcGVyIGZvciBtb3JlIGRldGFpbHMpCiAqIEBjb25zdGFudAogKi8KCnZhciBRID0gW1syLjM2MDEyOTA5NTIzNDQxMjA5ZTAxLCAyLjQ0MDI0NjM3OTM0NDQ0MTczZTAyLCAxLjI4MjYxNjUyNjA3NzM3MjI4ZTAzLCAyLjg0NDIzNjgzMzQzOTE3MDYyZTAzXSwgWzEuNTc0NDkyNjExMDcwOTgzNDdlMDEsIDEuMTc2OTM5NTA4OTEzMTI0OTllMDIsIDUuMzcxODExMDE4NjIwMDk4NThlMDIsIDEuNjIxMzg5NTc0NTY2NjkwMTllMDMsIDMuMjkwNzk5MjM1NzMzNDU5NjNlMDMsIDQuMzYyNjE5MDkwMTQzMjQ3MTZlMDMsIDMuNDM5MzY3Njc0MTQzNzIxNjRlMDMsIDEuMjMwMzM5MzU0ODAzNzQ5NDJlMDNdLCBbMi41Njg1MjAxOTIyODk4MjI0MmUwMCwgMS44NzI5NTI4NDk5MjM0NjA0N2UwMCwgNS4yNzkwNTEwMjk1MTQyODQxMmUtMSwgNi4wNTE4MzQxMzEyNDQxMzE5MWUtMiwgMi4zMzUyMDQ5NzYyNjg2OTE4NWUtM11dOwovKioKICogTWF4aW11bS9taW5pbXVtIHNhZmUgbnVtYmVycyB0byBpbnB1dCB0byBlcmYoKSAoaW4gRVM2KywgdGhpcyBudW1iZXIgaXMKICogTnVtYmVyLltNQVh8TUlOXV9TQUZFX0lOVEVHRVIpLiBlcmYoKSBmb3IgYWxsIG51bWJlcnMgYmV5b25kIHRoaXMgbGltaXQgd2lsbAogKiByZXR1cm4gMQogKi8KCnZhciBNQVhfTlVNID0gTWF0aC5wb3coMiwgNTMpOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9zdGF0aXN0aWNzL21vZGUuanMKCgp2YXIgbW9kZV9uYW1lID0gJ21vZGUnOwp2YXIgbW9kZV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2lzTmFOJywgJ2lzTnVtZXJpYyddOwp2YXIgY3JlYXRlTW9kZSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKG1vZGVfbmFtZSwgbW9kZV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgaXNOYU4gPSBfcmVmLmlzTmFOLAogICAgICBpc051bWVyaWMgPSBfcmVmLmlzTnVtZXJpYzsKCiAgLyoqCiAgKiBDb21wdXRlcyB0aGUgbW9kZSBvZiBhIHNldCBvZiBudW1iZXJzIG9yIGEgbGlzdCB3aXRoIHZhbHVlcyhudW1iZXJzIG9yIGNoYXJhY3RlcnMpLgogICogSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgbW9kZXMsIGl0IHJldHVybnMgYSBsaXN0IG9mIHRob3NlIHZhbHVlcy4KICAqCiAgKiBTeW50YXg6CiAgKgogICogICAgIG1hdGgubW9kZShhLCBiLCBjLCAuLi4pCiAgKiAgICAgbWF0aC5tb2RlKEEpCiAgKgogICogRXhhbXBsZXM6CiAgKgogICogICAgIG1hdGgubW9kZSgyLCAxLCA0LCAzLCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFsxXQogICogICAgIG1hdGgubW9kZShbMSwgMi43LCAzLjIsIDQsIDIuN10pICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFsyLjddCiAgKiAgICAgbWF0aC5tb2RlKDEsIDQsIDYsIDEsIDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFsxLCA2XQogICogICAgIG1hdGgubW9kZSgnYScsJ2EnLCdiJywnYycpICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbImEiXQogICogICAgIG1hdGgubW9kZSgxLCAxLjUsICdhYmMnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMS41LCAiYWJjIl0KICAqCiAgKiBTZWUgYWxzbzoKICAqCiAgKiAgICAgbWVkaWFuLAogICogICAgIG1lYW4KICAqCiAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXgKICAqIEByZXR1cm4geyp9IFRoZSBtb2RlIG9mIGFsbCB2YWx1ZXMKICAqLwogIHJldHVybiB0eXBlZChtb2RlX25hbWUsIHsKICAgICdBcnJheSB8IE1hdHJpeCc6IF9tb2RlLAogICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykgewogICAgICByZXR1cm4gX21vZGUoYXJncyk7CiAgICB9CiAgfSk7CiAgLyoqCiAgICogQ2FsY3VsYXRlcyB0aGUgbW9kZSBpbiBhbiAxLWRpbWVuc2lvbmFsIGFycmF5CiAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzCiAgICogQHJldHVybiB7QXJyYXl9IG1vZGUKICAgKiBAcHJpdmF0ZQogICAqLwoKICBmdW5jdGlvbiBfbW9kZSh2YWx1ZXMpIHsKICAgIHZhbHVlcyA9IE9iamVjdCh1dGlsc19hcnJheVsiZSIgLyogZmxhdHRlbiAqL10pKHZhbHVlcy52YWx1ZU9mKCkpOwogICAgdmFyIG51bSA9IHZhbHVlcy5sZW5ndGg7CgogICAgaWYgKG51bSA9PT0gMCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgbW9kZSBvZiBhbiBlbXB0eSBhcnJheScpOwogICAgfQoKICAgIHZhciBjb3VudCA9IHt9OwogICAgdmFyIG1vZGUgPSBbXTsKICAgIHZhciBtYXggPSAwOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciB2YWx1ZSA9IHZhbHVlc1tpXTsKCiAgICAgIGlmIChpc051bWVyaWModmFsdWUpICYmIGlzTmFOKHZhbHVlKSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBtb2RlIG9mIGFuIGFycmF5IGNvbnRhaW5pbmcgTmFOIHZhbHVlcycpOwogICAgICB9CgogICAgICBpZiAoISh2YWx1ZSBpbiBjb3VudCkpIHsKICAgICAgICBjb3VudFt2YWx1ZV0gPSAwOwogICAgICB9CgogICAgICBjb3VudFt2YWx1ZV0rKzsKCiAgICAgIGlmIChjb3VudFt2YWx1ZV0gPT09IG1heCkgewogICAgICAgIG1vZGUucHVzaCh2YWx1ZSk7CiAgICAgIH0gZWxzZSBpZiAoY291bnRbdmFsdWVdID4gbWF4KSB7CiAgICAgICAgbWF4ID0gY291bnRbdmFsdWVdOwogICAgICAgIG1vZGUgPSBbdmFsdWVdOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG1vZGU7CiAgfQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vc3RhdGlzdGljcy91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlLmpzCgovKioKICogSW1wcm92ZSBlcnJvciBtZXNzYWdlcyBmb3Igc3RhdGlzdGljcyBmdW5jdGlvbnMuIEVycm9ycyBhcmUgdHlwaWNhbGx5CiAqIHRocm93biBpbiBhbiBpbnRlcm5hbGx5IHVzZWQgZnVuY3Rpb24gbGlrZSBsYXJnZXIsIGNhdXNpbmcgdGhlIGVycm9yCiAqIG5vdCB0byBtZW50aW9uIHRoZSBmdW5jdGlvbiAobGlrZSBtYXgpIHdoaWNoIGlzIGFjdHVhbGx5IHVzZWQgYnkgdGhlIHVzZXIuCiAqCiAqIEBwYXJhbSB7RXJyb3J9IGVycgogKiBAcGFyYW0ge1N0cmluZ30gZm5OYW1lCiAqIEBwYXJhbSB7Kn0gW3ZhbHVlXQogKiBAcmV0dXJuIHtFcnJvcn0KICovCgpmdW5jdGlvbiBpbXByb3ZlRXJyb3JNZXNzYWdlKGVyciwgZm5OYW1lLCB2YWx1ZSkgewogIC8vIFRPRE86IGFkZCBpbmZvcm1hdGlvbiB3aXRoIHRoZSBpbmRleCAoYWxzbyBuZWVkcyB0cmFuc2Zvcm0gaW4gZXhwcmVzc2lvbiBwYXJzZXIpCiAgdmFyIGRldGFpbHM7CgogIGlmIChTdHJpbmcoZXJyKS5pbmRleE9mKCdVbmV4cGVjdGVkIHR5cGUnKSAhPT0gLTEpIHsKICAgIGRldGFpbHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/ICcgKHR5cGU6ICcgKyBPYmplY3QoaXNbIk0iIC8qIHR5cGVPZiAqL10pKHZhbHVlKSArICcsIHZhbHVlOiAnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpICsgJyknIDogJyAodHlwZTogJyArIGVyci5kYXRhLmFjdHVhbCArICcpJzsKICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsY3VsYXRlICcgKyBmbk5hbWUgKyAnLCB1bmV4cGVjdGVkIHR5cGUgb2YgYXJndW1lbnQnICsgZGV0YWlscyk7CiAgfQoKICBpZiAoU3RyaW5nKGVycikuaW5kZXhPZignY29tcGxleCBudW1iZXJzJykgIT09IC0xKSB7CiAgICBkZXRhaWxzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyAnICh0eXBlOiAnICsgT2JqZWN0KGlzWyJNIiAvKiB0eXBlT2YgKi9dKSh2YWx1ZSkgKyAnLCB2YWx1ZTogJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSArICcpJyA6ICcnOwogICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgJyArIGZuTmFtZSArICcsIG5vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycycgKyBkZXRhaWxzKTsKICB9CgogIHJldHVybiBlcnI7Cn0KLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vc3RhdGlzdGljcy9wcm9kLmpzCgoKCnZhciBwcm9kX25hbWUgPSAncHJvZCc7CnZhciBwcm9kX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbXVsdGlwbHknXTsKdmFyIGNyZWF0ZVByb2QgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShwcm9kX25hbWUsIHByb2RfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseTsKCiAgLyoqCiAgICogQ29tcHV0ZSB0aGUgcHJvZHVjdCBvZiBhIG1hdHJpeCBvciBhIGxpc3Qgd2l0aCB2YWx1ZXMuCiAgICogSW4gY2FzZSBvZiBhIChtdWx0aSBkaW1lbnNpb25hbCkgYXJyYXkgb3IgbWF0cml4LCB0aGUgc3VtIG9mIGFsbAogICAqIGVsZW1lbnRzIHdpbGwgYmUgY2FsY3VsYXRlZC4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBtYXRoLnByb2QoYSwgYiwgYywgLi4uKQogICAqICAgICBtYXRoLnByb2QoQSkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgIG1hdGgubXVsdGlwbHkoMiwgMykgICAgICAgICAgIC8vIHJldHVybnMgNgogICAqICAgICBtYXRoLnByb2QoMiwgMykgICAgICAgICAgICAgICAvLyByZXR1cm5zIDYKICAgKiAgICAgbWF0aC5wcm9kKDIsIDMsIDQpICAgICAgICAgICAgLy8gcmV0dXJucyAyNAogICAqICAgICBtYXRoLnByb2QoWzIsIDMsIDRdKSAgICAgICAgICAvLyByZXR1cm5zIDI0CiAgICogICAgIG1hdGgucHJvZChbWzIsIDVdLCBbNCwgM11dKSAgIC8vIHJldHVybnMgMTIwCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIG1lYW4sIG1lZGlhbiwgbWluLCBtYXgsIHN1bSwgc3RkLCB2YXJpYW5jZQogICAqCiAgICogQHBhcmFtIHsuLi4gKn0gYXJncyAgQSBzaW5nbGUgbWF0cml4IG9yIG9yIG11bHRpcGxlIHNjYWxhciB2YWx1ZXMKICAgKiBAcmV0dXJuIHsqfSBUaGUgcHJvZHVjdCBvZiBhbGwgdmFsdWVzCiAgICovCiAgcmV0dXJuIHR5cGVkKHByb2RfbmFtZSwgewogICAgLy8gcHJvZChbYSwgYiwgYywgZCwgLi4uXSkKICAgICdBcnJheSB8IE1hdHJpeCc6IF9wcm9kLAogICAgLy8gcHJvZChbYSwgYiwgYywgZCwgLi4uXSwgZGltKQogICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlckJpZ051bWJlcihhcnJheSwgZGltKSB7CiAgICAgIC8vIFRPRE86IGltcGxlbWVudCBwcm9kKEEsIGRpbSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcm9kKEEsIGRpbSkgaXMgbm90IHlldCBzdXBwb3J0ZWQnKTsgLy8gcmV0dXJuIHJlZHVjZShhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSwgbWF0aC5wcm9kKQogICAgfSwKICAgIC8vIHByb2QoYSwgYiwgYywgZCwgLi4uKQogICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykgewogICAgICByZXR1cm4gX3Byb2QoYXJncyk7CiAgICB9CiAgfSk7CiAgLyoqCiAgICogUmVjdXJzaXZlbHkgY2FsY3VsYXRlIHRoZSBwcm9kdWN0IG9mIGFuIG4tZGltZW5zaW9uYWwgYXJyYXkKICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheQogICAqIEByZXR1cm4ge251bWJlcn0gcHJvZAogICAqIEBwcml2YXRlCiAgICovCgogIGZ1bmN0aW9uIF9wcm9kKGFycmF5KSB7CiAgICB2YXIgcHJvZDsKICAgIGRlZXBGb3JFYWNoKGFycmF5LCBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgdHJ5IHsKICAgICAgICBwcm9kID0gcHJvZCA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBtdWx0aXBseShwcm9kLCB2YWx1ZSk7CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIHRocm93IGltcHJvdmVFcnJvck1lc3NhZ2UoZXJyLCAncHJvZCcsIHZhbHVlKTsKICAgICAgfQogICAgfSk7CgogICAgaWYgKHByb2QgPT09IHVuZGVmaW5lZCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgcHJvZCBvZiBhbiBlbXB0eSBhcnJheScpOwogICAgfQoKICAgIHJldHVybiBwcm9kOwogIH0KfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3N0cmluZy9mb3JtYXQuanMKCgp2YXIgZm9ybWF0X25hbWUgPSAnZm9ybWF0JzsKdmFyIGZvcm1hdF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107CnZhciBjcmVhdGVGb3JtYXQgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShmb3JtYXRfbmFtZSwgZm9ybWF0X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkOwoKICAvKioKICAgKiBGb3JtYXQgYSB2YWx1ZSBvZiBhbnkgdHlwZSBpbnRvIGEgc3RyaW5nLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5mb3JtYXQodmFsdWUpCiAgICogICAgbWF0aC5mb3JtYXQodmFsdWUsIG9wdGlvbnMpCiAgICogICAgbWF0aC5mb3JtYXQodmFsdWUsIHByZWNpc2lvbikKICAgKiAgICBtYXRoLmZvcm1hdCh2YWx1ZSwgY2FsbGJhY2spCiAgICoKICAgKiBXaGVyZToKICAgKgogICAqICAtIGB2YWx1ZTogKmAKICAgKiAgICBUaGUgdmFsdWUgdG8gYmUgZm9ybWF0dGVkCiAgICogIC0gYG9wdGlvbnM6IE9iamVjdGAKICAgKiAgICBBbiBvYmplY3Qgd2l0aCBmb3JtYXR0aW5nIG9wdGlvbnMuIEF2YWlsYWJsZSBvcHRpb25zOgogICAqICAgIC0gYG5vdGF0aW9uOiBzdHJpbmdgCiAgICogICAgICBOdW1iZXIgbm90YXRpb24uIENob29zZSBmcm9tOgogICAqICAgICAgLSAnZml4ZWQnCiAgICogICAgICAgIEFsd2F5cyB1c2UgcmVndWxhciBudW1iZXIgbm90YXRpb24uCiAgICogICAgICAgIEZvciBleGFtcGxlICcxMjMuNDAnIGFuZCAnMTQwMDAwMDAnCiAgICogICAgICAtICdleHBvbmVudGlhbCcKICAgKiAgICAgICAgQWx3YXlzIHVzZSBleHBvbmVudGlhbCBub3RhdGlvbi4KICAgKiAgICAgICAgRm9yIGV4YW1wbGUgJzEuMjM0ZSsyJyBhbmQgJzEuNGUrNycKICAgKiAgICAgIC0gJ2VuZ2luZWVyaW5nJwogICAqICAgICAgICBBbHdheXMgdXNlIGVuZ2luZWVyaW5nIG5vdGF0aW9uLgogICAqICAgICAgICBGb3IgZXhhbXBsZSAnMTIzLjRlKzAnIGFuZCAnMTQuMGUrNicKICAgKiAgICAgIC0gJ2F1dG8nIChkZWZhdWx0KQogICAqICAgICAgICBSZWd1bGFyIG51bWJlciBub3RhdGlvbiBmb3IgbnVtYmVycyBoYXZpbmcgYW4gYWJzb2x1dGUgdmFsdWUgYmV0d2VlbgogICAqICAgICAgICBgbG93ZXJgIGFuZCBgdXBwZXJgIGJvdW5kcywgYW5kIHVzZXMgZXhwb25lbnRpYWwgbm90YXRpb24gZWxzZXdoZXJlLgogICAqICAgICAgICBMb3dlciBib3VuZCBpcyBpbmNsdWRlZCwgdXBwZXIgYm91bmQgaXMgZXhjbHVkZWQuCiAgICogICAgICAgIEZvciBleGFtcGxlICcxMjMuNCcgYW5kICcxLjRlNycuCiAgICogICAgLSBgcHJlY2lzaW9uOiBudW1iZXJgCiAgICogICAgICBBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDE2IHRvIHJvdW5kIHRoZSBkaWdpdHMgb2YgdGhlIG51bWJlci4gSW4gY2FzZQogICAqICAgICAgb2Ygbm90YXRpb25zICdleHBvbmVudGlhbCcsICdlbmdpbmVlcmluZycsIGFuZCAnYXV0bycsIGBwcmVjaXNpb25gCiAgICogICAgICBkZWZpbmVzIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIHJldHVybmVkLgogICAqICAgICAgSW4gY2FzZSBvZiBub3RhdGlvbiAnZml4ZWQnLCBgcHJlY2lzaW9uYCBkZWZpbmVzIHRoZSBudW1iZXIgb2YKICAgKiAgICAgIHNpZ25pZmljYW50IGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4KICAgKiAgICAgIGBwcmVjaXNpb25gIGlzIHVuZGVmaW5lZCBieSBkZWZhdWx0LgogICAqICAgIC0gYGxvd2VyRXhwOiBudW1iZXJgCiAgICogICAgICBFeHBvbmVudCBkZXRlcm1pbmluZyB0aGUgbG93ZXIgYm91bmRhcnkgZm9yIGZvcm1hdHRpbmcgYSB2YWx1ZSB3aXRoCiAgICogICAgICBhbiBleHBvbmVudCB3aGVuIGBub3RhdGlvbj0nYXV0b2AuIERlZmF1bHQgdmFsdWUgaXMgYC0zYC4KICAgKiAgICAtIGB1cHBlckV4cDogbnVtYmVyYAogICAqICAgICAgRXhwb25lbnQgZGV0ZXJtaW5pbmcgdGhlIHVwcGVyIGJvdW5kYXJ5IGZvciBmb3JtYXR0aW5nIGEgdmFsdWUgd2l0aAogICAqICAgICAgYW4gZXhwb25lbnQgd2hlbiBgbm90YXRpb249J2F1dG9gLiBEZWZhdWx0IHZhbHVlIGlzIGA1YC4KICAgKiAgICAtIGBmcmFjdGlvbjogc3RyaW5nYC4gQXZhaWxhYmxlIHZhbHVlczogJ3JhdGlvJyAoZGVmYXVsdCkgb3IgJ2RlY2ltYWwnLgogICAqICAgICAgRm9yIGV4YW1wbGUgYGZvcm1hdChmcmFjdGlvbigxLCAzKSlgIHdpbGwgb3V0cHV0ICcxLzMnIHdoZW4gJ3JhdGlvJyBpcwogICAqICAgICAgY29uZmlndXJlZCwgYW5kIHdpbGwgb3V0cHV0IGAwLigzKWAgd2hlbiAnZGVjaW1hbCcgaXMgY29uZmlndXJlZC4KICAgKiAtIGBjYWxsYmFjazogZnVuY3Rpb25gCiAgICogICBBIGN1c3RvbSBmb3JtYXR0aW5nIGZ1bmN0aW9uLCBpbnZva2VkIGZvciBhbGwgbnVtZXJpYyBlbGVtZW50cyBpbiBgdmFsdWVgLAogICAqICAgZm9yIGV4YW1wbGUgYWxsIGVsZW1lbnRzIG9mIGEgbWF0cml4LCBvciB0aGUgcmVhbCBhbmQgaW1hZ2luYXJ5CiAgICogICBwYXJ0cyBvZiBhIGNvbXBsZXggbnVtYmVyLiBUaGlzIGNhbGxiYWNrIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZQogICAqICAgYnVpbHQtaW4gbnVtZXJpYyBub3RhdGlvbiB3aXRoIGFueSB0eXBlIG9mIGZvcm1hdHRpbmcuIEZ1bmN0aW9uIGBjYWxsYmFja2AKICAgKiAgIGlzIGNhbGxlZCB3aXRoIGB2YWx1ZWAgYXMgcGFyYW1ldGVyIGFuZCBtdXN0IHJldHVybiBhIHN0cmluZy4KICAgKgogICAqIFdoZW4gYHZhbHVlYCBpcyBhbiBPYmplY3Q6CiAgICoKICAgKiAtIFdoZW4gdGhlIG9iamVjdCBjb250YWlucyBhIHByb3BlcnR5IGBmb3JtYXRgIGJlaW5nIGEgZnVuY3Rpb24sIHRoaXMgZnVuY3Rpb24KICAgKiAgIGlzIGludm9rZWQgYXMgYHZhbHVlLmZvcm1hdChvcHRpb25zKWAgYW5kIHRoZSByZXN1bHQgaXMgcmV0dXJuZWQuCiAgICogLSBXaGVuIHRoZSBvYmplY3QgaGFzIGl0cyBvd24gYHRvU3RyaW5nYCBtZXRob2QsIHRoaXMgbWV0aG9kIGlzIGludm9rZWQKICAgKiAgIGFuZCB0aGUgcmVzdWx0IGlzIHJldHVybmVkLgogICAqIC0gSW4gb3RoZXIgY2FzZXMgdGhlIGZ1bmN0aW9uIHdpbGwgbG9vcCBvdmVyIGFsbCBvYmplY3QgcHJvcGVydGllcyBhbmQKICAgKiAgIHJldHVybiBKU09OIG9iamVjdCBub3RhdGlvbiBsaWtlICd7ImEiOiAyLCAiYiI6IDN9Jy4KICAgKgogICAqIFdoZW4gdmFsdWUgaXMgYSBmdW5jdGlvbjoKICAgKgogICAqIC0gV2hlbiB0aGUgZnVuY3Rpb24gaGFzIGEgcHJvcGVydHkgYHN5bnRheGAsIGl0IHJldHVybnMgdGhpcwogICAqICAgc3ludGF4IGRlc2NyaXB0aW9uLgogICAqIC0gSW4gb3RoZXIgY2FzZXMsIGEgc3RyaW5nIGAnZnVuY3Rpb24nYCBpcyByZXR1cm5lZC4KICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5mb3JtYXQoNi40KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zICc2LjQnCiAgICogICAgbWF0aC5mb3JtYXQoMTI0MDAwMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zICcxLjI0ZTYnCiAgICogICAgbWF0aC5mb3JtYXQoMS8zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zICcwLjMzMzMzMzMzMzMzMzMzMzMnCiAgICogICAgbWF0aC5mb3JtYXQoMS8zLCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zICcwLjMzMycKICAgKiAgICBtYXRoLmZvcm1hdCgyMTM4NSwgMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgJzIxMDAwJwogICAqICAgIG1hdGguZm9ybWF0KDEyZTgsIHtub3RhdGlvbjogJ2ZpeGVkJ30pICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAnMTIwMDAwMDAwMCcKICAgKiAgICBtYXRoLmZvcm1hdCgyLjMsICB7bm90YXRpb246ICdmaXhlZCcsIHByZWNpc2lvbjogNH0pICAgIC8vIHJldHVybnMgJzIuMzAwMCcKICAgKiAgICBtYXRoLmZvcm1hdCg1Mi44LCB7bm90YXRpb246ICdleHBvbmVudGlhbCd9KSAgICAgICAgICAgIC8vIHJldHVybnMgJzUuMjhlKzEnCiAgICogICAgbWF0aC5mb3JtYXQoMTI0MDAse25vdGF0aW9uOiAnZW5naW5lZXJpbmcnfSkgICAgICAgICAgICAvLyByZXR1cm5zICcxMi40MDBlKzMnCiAgICogICAgbWF0aC5mb3JtYXQoMjAwMCwge2xvd2VyRXhwOiAtMiwgdXBwZXJFeHA6IDJ9KSAgICAgICAgICAvLyByZXR1cm5zICcyZSszJwogICAqCiAgICogICAgZnVuY3Rpb24gZm9ybWF0Q3VycmVuY3kodmFsdWUpIHsKICAgKiAgICAgIC8vIHJldHVybiBjdXJyZW5jeSBub3RhdGlvbiB3aXRoIHR3byBkaWdpdHM6CiAgICogICAgICByZXR1cm4gJyQnICsgdmFsdWUudG9GaXhlZCgyKQogICAqCiAgICogICAgICAvLyB5b3UgY291bGQgYWxzbyB1c2UgbWF0aC5mb3JtYXQgaW5zaWRlIHRoZSBjYWxsYmFjazoKICAgKiAgICAgIC8vIHJldHVybiAnJCcgKyBtYXRoLmZvcm1hdCh2YWx1ZSwge25vdGF0aW9uOiAnZml4ZWQnLCBwcmVjaXNpb246IDJ9KQogICAqICAgIH0KICAgKiAgICBtYXRoLmZvcm1hdChbMi4xLCAzLCAwLjAxNl0sIGZvcm1hdEN1cnJlbmN5fSAgICAgICAgICAgIC8vIHJldHVybnMgJ1skMi4xMCwgJDMuMDAsICQwLjAyXScKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgcHJpbnQKICAgKgogICAqIEBwYXJhbSB7Kn0gdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgdG8gYmUgc3RyaW5naWZpZWQKICAgKiBAcGFyYW0ge09iamVjdCB8IEZ1bmN0aW9uIHwgbnVtYmVyfSBbb3B0aW9uc10gIEZvcm1hdHRpbmcgb3B0aW9ucwogICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB2YWx1ZQogICAqLwogIHJldHVybiB0eXBlZChmb3JtYXRfbmFtZSwgewogICAgYW55OiB1dGlsc19zdHJpbmdbImQiIC8qIGZvcm1hdCAqL10sCiAgICAnYW55LCBPYmplY3QgfCBmdW5jdGlvbiB8IG51bWJlcic6IHV0aWxzX3N0cmluZ1siZCIgLyogZm9ybWF0ICovXQogIH0pOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vc3RyaW5nL3ByaW50LmpzCgoKCnZhciBwcmludF9uYW1lID0gJ3ByaW50JzsKdmFyIHByaW50X2RlcGVuZGVuY2llcyA9IFsndHlwZWQnXTsKdmFyIGNyZWF0ZVByaW50ID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkocHJpbnRfbmFtZSwgcHJpbnRfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7CgogIC8qKgogICAqIEludGVycG9sYXRlIHZhbHVlcyBpbnRvIGEgc3RyaW5nIHRlbXBsYXRlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIG1hdGgucHJpbnQodGVtcGxhdGUsIHZhbHVlcykKICAgKiAgICAgbWF0aC5wcmludCh0ZW1wbGF0ZSwgdmFsdWVzLCBwcmVjaXNpb24pCiAgICogICAgIG1hdGgucHJpbnQodGVtcGxhdGUsIHZhbHVlcywgb3B0aW9ucykKICAgKgogICAqIEV4YW1wbGUgdXNhZ2U6CiAgICoKICAgKiAgICAgLy8gdGhlIGZvbGxvd2luZyBvdXRwdXRzOiAnTHVjeSBpcyA1IHllYXJzIG9sZCcKICAgKiAgICAgbWF0aC5wcmludCgnTHVjeSBpcyAkYWdlIHllYXJzIG9sZCcsIHthZ2U6IDV9KQogICAqCiAgICogICAgIC8vIHRoZSBmb2xsb3dpbmcgb3V0cHV0czogJ1RoZSB2YWx1ZSBvZiBwaSBpcyAzLjE0MTU5MjY1NCcKICAgKiAgICAgbWF0aC5wcmludCgnVGhlIHZhbHVlIG9mIHBpIGlzICRwaScsIHtwaTogbWF0aC5waX0sIDEwKQogICAqCiAgICogICAgIC8vIHRoZSBmb2xsb3dpbmcgb3V0cHV0czogJ2hlbGxvIE1hcnkhIFRoZSBkYXRlIGlzIDIwMTMtMDMtMjMnCiAgICogICAgIG1hdGgucHJpbnQoJ0hlbGxvICR1c2VyLm5hbWUhIFRoZSBkYXRlIGlzICRkYXRlJywgewogICAqICAgICAgIHVzZXI6IHsKICAgKiAgICAgICAgIG5hbWU6ICdNYXJ5JywKICAgKiAgICAgICB9LAogICAqICAgICAgIGRhdGU6IG5ldyBEYXRlKDIwMTMsIDIsIDIzKS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLCAxMCkKICAgKiAgICAgfSkKICAgKgogICAqICAgICAvLyB0aGUgZm9sbG93aW5nIG91dHB1dHM6ICdNeSBmYXZvcml0ZSBmcnVpdHMgYXJlIGFwcGxlcyBhbmQgYmFuYW5hcyAhJwogICAqICAgICBtYXRoLnByaW50KCdNeSBmYXZvcml0ZSBmcnVpdHMgYXJlICQwIGFuZCAkMSAhJywgWwogICAqICAgICAgICdhcHBsZXMnLAogICAqICAgICAgICdiYW5hbmFzJwogICAqICAgICBdKQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICAgZm9ybWF0CiAgICoKICAgKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGUgICAgICAgICAgIEEgc3RyaW5nIGNvbnRhaW5pbmcgdmFyaWFibGUgcGxhY2Vob2xkZXJzLgogICAqIEBwYXJhbSB7T2JqZWN0IHwgQXJyYXkgfCBNYXRyaXh9ICAgdmFsdWVzIEFuIG9iamVjdCBvciBhcnJheSBjb250YWluaW5nIHZhcmlhYmxlcwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggd2lsbCBiZSBmaWxsZWQgaW4gaW4gdGhlIHRlbXBsYXRlLgogICAqIEBwYXJhbSB7bnVtYmVyIHwgT2JqZWN0fSBbb3B0aW9uc10gRm9ybWF0dGluZyBvcHRpb25zLAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8gZm9ybWF0IG51bWJlcnMuCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gbWF0aC5mb3JtYXQgZm9yIGEgZGVzY3JpcHRpb24KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGFsbCBvcHRpb25zLgogICAqIEByZXR1cm4ge3N0cmluZ30gSW50ZXJwb2xhdGVkIHN0cmluZwogICAqLwogIHJldHVybiB0eXBlZChwcmludF9uYW1lLCB7CiAgICAvLyBub3RlOiBNYXRyaXggd2lsbCBiZSBjb252ZXJ0ZWQgYXV0b21hdGljYWxseSB0byBhbiBBcnJheQogICAgJ3N0cmluZywgT2JqZWN0IHwgQXJyYXknOiBfcHJpbnQsCiAgICAnc3RyaW5nLCBPYmplY3QgfCBBcnJheSwgbnVtYmVyIHwgT2JqZWN0JzogX3ByaW50CiAgfSk7Cn0pOwovKioKICogSW50ZXJwb2xhdGUgdmFsdWVzIGludG8gYSBzdHJpbmcgdGVtcGxhdGUuCiAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZQogKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzCiAqIEBwYXJhbSB7bnVtYmVyIHwgT2JqZWN0fSBbb3B0aW9uc10KICogQHJldHVybnMge3N0cmluZ30gSW50ZXJwb2xhdGVkIHN0cmluZwogKiBAcHJpdmF0ZQogKi8KCmZ1bmN0aW9uIF9wcmludCh0ZW1wbGF0ZSwgdmFsdWVzLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL1wkKFtcdy5dKykvZywgZnVuY3Rpb24gKG9yaWdpbmFsLCBrZXkpIHsKICAgIHZhciBrZXlzID0ga2V5LnNwbGl0KCcuJyk7CiAgICB2YXIgdmFsdWUgPSB2YWx1ZXNba2V5cy5zaGlmdCgpXTsKCiAgICB3aGlsZSAoa2V5cy5sZW5ndGggJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkgewogICAgICB2YXIgayA9IGtleXMuc2hpZnQoKTsKICAgICAgdmFsdWUgPSBrID8gdmFsdWVba10gOiB2YWx1ZSArICcuJzsKICAgIH0KCiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgewogICAgICBpZiAoIU9iamVjdChpc1siSSIgLyogaXNTdHJpbmcgKi9dKSh2YWx1ZSkpIHsKICAgICAgICByZXR1cm4gT2JqZWN0KHV0aWxzX3N0cmluZ1siZCIgLyogZm9ybWF0ICovXSkodmFsdWUsIG9wdGlvbnMpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBvcmlnaW5hbDsKICB9KTsKfQovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi91bml0L3RvLmpzCgoKCnZhciB0b19uYW1lID0gJ3RvJzsKdmFyIHRvX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4J107CnZhciBjcmVhdGVUbyA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHRvX25hbWUsIHRvX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDsKICB2YXIgYWxnb3JpdGhtMTMgPSBjcmVhdGVBbGdvcml0aG0xMyh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICB2YXIgYWxnb3JpdGhtMTQgPSBjcmVhdGVBbGdvcml0aG0xNCh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICAvKioKICAgKiBDaGFuZ2UgdGhlIHVuaXQgb2YgYSB2YWx1ZS4KICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLnRvKHgsIHVuaXQpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGgudG8obWF0aC51bml0KCcyIGluY2gnKSwgJ2NtJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBVbml0IDUuMDggY20KICAgKiAgICBtYXRoLnRvKG1hdGgudW5pdCgnMiBpbmNoJyksIG1hdGgudW5pdChudWxsLCAnY20nKSkgIC8vIHJldHVybnMgVW5pdCA1LjA4IGNtCiAgICogICAgbWF0aC50byhtYXRoLnVuaXQoMTYsICdieXRlcycpLCAnYml0cycpICAgICAgICAgICAgICAvLyByZXR1cm5zIFVuaXQgMTI4IGJpdHMKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgdW5pdAogICAqCiAgICogQHBhcmFtIHtVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggICAgIFRoZSB1bml0IHRvIGJlIGNvbnZlcnRlZC4KICAgKiBAcGFyYW0ge1VuaXQgfCBBcnJheSB8IE1hdHJpeH0gdW5pdCAgTmV3IHVuaXQuIENhbiBiZSBhIHN0cmluZyBsaWtlICJjbSIKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSB1bml0IHdpdGhvdXQgdmFsdWUuCiAgICogQHJldHVybiB7VW5pdCB8IEFycmF5IHwgTWF0cml4fSB2YWx1ZSB3aXRoIGNoYW5nZWQsIGZpeGVkIHVuaXQuCiAgICovCgogIHZhciB0byA9IHR5cGVkKHRvX25hbWUsIHsKICAgICdVbml0LCBVbml0IHwgc3RyaW5nJzogZnVuY3Rpb24gVW5pdFVuaXRTdHJpbmcoeCwgdW5pdCkgewogICAgICByZXR1cm4geC50byh1bml0KTsKICAgIH0sCiAgICAnTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXgoeCwgeSkgewogICAgICAvLyBTcGFyc2VNYXRyaXggZG9lcyBub3Qgc3VwcG9ydCBVbml0cwogICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgdG8pOwogICAgfSwKICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gdG8obWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTsKICAgIH0sCiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gdG8obWF0cml4KHgpLCB5KTsKICAgIH0sCiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gdG8oeCwgbWF0cml4KHkpKTsKICAgIH0sCiAgICAnTWF0cml4LCBhbnknOiBmdW5jdGlvbiBNYXRyaXhBbnkoeCwgeSkgewogICAgICAvLyBTcGFyc2VNYXRyaXggZG9lcyBub3Qgc3VwcG9ydCBVbml0cwogICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgdG8sIGZhbHNlKTsKICAgIH0sCiAgICAnYW55LCBNYXRyaXgnOiBmdW5jdGlvbiBhbnlNYXRyaXgoeCwgeSkgewogICAgICAvLyBTcGFyc2VNYXRyaXggZG9lcyBub3Qgc3VwcG9ydCBVbml0cwogICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgdG8sIHRydWUpOwogICAgfSwKICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIHRvLCBmYWxzZSkudmFsdWVPZigpOwogICAgfSwKICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIHRvLCB0cnVlKS52YWx1ZU9mKCk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIHRvOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vdXRpbHMvaXNQcmltZS5qcwoKCnZhciBpc1ByaW1lX25hbWUgPSAnaXNQcmltZSc7CnZhciBpc1ByaW1lX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnXTsKdmFyIGNyZWF0ZUlzUHJpbWUgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShpc1ByaW1lX25hbWUsIGlzUHJpbWVfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7CgogIC8qKgogICAqIFRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIHByaW1lOiBoYXMgbm8gZGl2aXNvcnMgb3RoZXIgdGhhbiBpdHNlbGYgYW5kIG9uZS4KICAgKiBUaGUgZnVuY3Rpb24gc3VwcG9ydHMgdHlwZSBgbnVtYmVyYCwgYGJpZ251bWJlcmAuCiAgICoKICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBtYXRoLmlzUHJpbWUoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5pc1ByaW1lKDMpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlCiAgICogICAgbWF0aC5pc1ByaW1lKC0yKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZQogICAqICAgIG1hdGguaXNQcmltZSgwKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2UKICAgKiAgICBtYXRoLmlzUHJpbWUoLTApICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlCiAgICogICAgbWF0aC5pc1ByaW1lKDAuNSkgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZQogICAqICAgIG1hdGguaXNQcmltZSgnMicpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZQogICAqICAgIG1hdGguaXNQcmltZShbMiwgMTcsIDEwMF0pICAgICAgICAgICAvLyByZXR1cm5zIFt0cnVlLCB0cnVlLCBmYWxzZV0KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgaXNOdW1lcmljLCBpc1plcm8sIGlzTmVnYXRpdmUsIGlzSW50ZWdlcgogICAqCiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCAgVmFsdWUgdG8gYmUgdGVzdGVkCiAgICogQHJldHVybiB7Ym9vbGVhbn0gIFJldHVybnMgdHJ1ZSB3aGVuIGB4YCBpcyBsYXJnZXIgdGhhbiB6ZXJvLgogICAqICAgICAgICAgICAgICAgICAgICBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSBvZiBhbiB1bmtub3duIGRhdGEgdHlwZS4KICAgKi8KICB2YXIgaXNQcmltZSA9IHR5cGVkKGlzUHJpbWVfbmFtZSwgewogICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkgewogICAgICBpZiAoeCAqIDAgIT09IDApIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIGlmICh4IDw9IDMpIHsKICAgICAgICByZXR1cm4geCA+IDE7CiAgICAgIH0KCiAgICAgIGlmICh4ICUgMiA9PT0gMCB8fCB4ICUgMyA9PT0gMCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgZm9yICh2YXIgaSA9IDU7IGkgKiBpIDw9IHg7IGkgKz0gNikgewogICAgICAgIGlmICh4ICUgaSA9PT0gMCB8fCB4ICUgKGkgKyAyKSA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIHRydWU7CiAgICB9LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIobikgewogICAgICBpZiAobi50b051bWJlcigpICogMCAhPT0gMCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgaWYgKG4ubHRlKDMpKSByZXR1cm4gbi5ndCgxKTsKICAgICAgaWYgKG4ubW9kKDIpLmVxKDApIHx8IG4ubW9kKDMpLmVxKDApKSByZXR1cm4gZmFsc2U7CgogICAgICBmb3IgKHZhciBpID0gNTsgbi5ndGUoaSAqIGkpOyBpICs9IDYpIHsKICAgICAgICBpZiAobi5tb2QoaSkuZXEoMCkgfHwgbi5tb2QoaSArIDIpLmVxKDApKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIHJldHVybiBkZWVwTWFwKHgsIGlzUHJpbWUpOwogICAgfQogIH0pOwogIHJldHVybiBpc1ByaW1lOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vdXRpbHMvbnVtZXJpYy5qcwoKCgp2YXIgbnVtZXJpY19uYW1lID0gJ251bWVyaWMnOwp2YXIgbnVtZXJpY19kZXBlbmRlbmNpZXMgPSBbJ251bWJlcicsICc/YmlnbnVtYmVyJywgJz9mcmFjdGlvbiddOwp2YXIgY3JlYXRlTnVtZXJpYyA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKG51bWVyaWNfbmFtZSwgbnVtZXJpY19kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIF9udW1iZXIgPSBfcmVmLm51bWJlciwKICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsCiAgICAgIGZyYWN0aW9uID0gX3JlZi5mcmFjdGlvbjsKICB2YXIgdmFsaWRJbnB1dFR5cGVzID0gewogICAgc3RyaW5nOiB0cnVlLAogICAgbnVtYmVyOiB0cnVlLAogICAgQmlnTnVtYmVyOiB0cnVlLAogICAgRnJhY3Rpb246IHRydWUKICB9OyAvLyBMb2FkIHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBmb3IgZWFjaCBvdXRwdXQgdHlwZQoKICB2YXIgdmFsaWRPdXRwdXRUeXBlcyA9IHsKICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHsKICAgICAgcmV0dXJuIF9udW1iZXIoeCk7CiAgICB9LAogICAgQmlnTnVtYmVyOiBiaWdudW1iZXIgPyBmdW5jdGlvbiAoeCkgewogICAgICByZXR1cm4gYmlnbnVtYmVyKHgpOwogICAgfSA6IG5vQmlnbnVtYmVyLAogICAgRnJhY3Rpb246IGZyYWN0aW9uID8gZnVuY3Rpb24gKHgpIHsKICAgICAgcmV0dXJuIGZyYWN0aW9uKHgpOwogICAgfSA6IG5vRnJhY3Rpb24KICB9OwogIC8qKgogICAqIENvbnZlcnQgYSBudW1lcmljIGlucHV0IHRvIGEgc3BlY2lmaWMgbnVtZXJpYyB0eXBlOiBudW1iZXIsIEJpZ051bWJlciwgb3IgRnJhY3Rpb24uCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLm51bWVyaWMoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5udW1lcmljKCc0JykgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA0CiAgICogICAgbWF0aC5udW1lcmljKCc0JywgJ251bWJlcicpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA0CiAgICogICAgbWF0aC5udW1lcmljKCc0JywgJ0JpZ051bWJlcicpICAgICAgICAgICAgICAvLyByZXR1cm5zIEJpZ051bWJlciA0CiAgICogICAgbWF0aC5udW1lcmljKCc0JywgJ0ZyYWN0aW9uJykgICAgICAgICAgICAgICAvLyByZXR1cm5zIEZyYWN0aW9uIDQKICAgKiAgICBtYXRoLm51bWVyaWMoNCwgJ0ZyYWN0aW9uJykgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgRnJhY3Rpb24gNAogICAqICAgIG1hdGgubnVtZXJpYyhtYXRoLmZyYWN0aW9uKDIsIDUpLCAnbnVtYmVyJykgLy8gcmV0dXJucyBudW1iZXIgMC40CiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIG51bWJlciwgZnJhY3Rpb24sIGJpZ251bWJlciwgc3RyaW5nLCBmb3JtYXQKICAgKgogICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfSB2YWx1ZQogICAqICAgICAgICAgICAgICBBIG51bWVyaWMgdmFsdWUgb3IgYSBzdHJpbmcgY29udGFpbmluZyBhIG51bWVyaWMgdmFsdWUKICAgKiBAcGFyYW0ge3N0cmluZ30gb3V0cHV0VHlwZQogICAqICAgICAgICAgICAgICBEZXNpcmVkIG51bWVyaWMgb3V0cHV0IHR5cGUuCiAgICogICAgICAgICAgICAgIEF2YWlsYWJsZSB2YWx1ZXM6ICdudW1iZXInLCAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uJwogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9ufQogICAqICAgICAgICAgICAgICBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSBudW1lcmljIGluIHRoZSByZXF1ZXN0ZWQgdHlwZQogICAqLwoKICByZXR1cm4gZnVuY3Rpb24gbnVtZXJpYyh2YWx1ZSwgb3V0cHV0VHlwZSkgewogICAgdmFyIGlucHV0VHlwZSA9IE9iamVjdChpc1siTSIgLyogdHlwZU9mICovXSkodmFsdWUpOwoKICAgIGlmICghKGlucHV0VHlwZSBpbiB2YWxpZElucHV0VHlwZXMpKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0ICcgKyB2YWx1ZSArICcgb2YgdHlwZSAiJyArIGlucHV0VHlwZSArICciOyB2YWxpZCBpbnB1dCB0eXBlcyBhcmUgJyArIE9iamVjdC5rZXlzKHZhbGlkSW5wdXRUeXBlcykuam9pbignLCAnKSk7CiAgICB9CgogICAgaWYgKCEob3V0cHV0VHlwZSBpbiB2YWxpZE91dHB1dFR5cGVzKSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCAnICsgdmFsdWUgKyAnIHRvIHR5cGUgIicgKyBvdXRwdXRUeXBlICsgJyI7IHZhbGlkIG91dHB1dCB0eXBlcyBhcmUgJyArIE9iamVjdC5rZXlzKHZhbGlkT3V0cHV0VHlwZXMpLmpvaW4oJywgJykpOwogICAgfQoKICAgIGlmIChvdXRwdXRUeXBlID09PSBpbnB1dFR5cGUpIHsKICAgICAgcmV0dXJuIHZhbHVlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHZhbGlkT3V0cHV0VHlwZXNbb3V0cHV0VHlwZV0odmFsdWUpOwogICAgfQogIH07Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hcml0aG1ldGljL2RpdmlkZVNjYWxhci5qcwoKCnZhciBkaXZpZGVTY2FsYXJfbmFtZSA9ICdkaXZpZGVTY2FsYXInOwp2YXIgZGl2aWRlU2NhbGFyX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbnVtZXJpYyddOwp2YXIgY3JlYXRlRGl2aWRlU2NhbGFyID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoZGl2aWRlU2NhbGFyX25hbWUsIGRpdmlkZVNjYWxhcl9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgbnVtZXJpYyA9IF9yZWYubnVtZXJpYzsKCiAgLyoqCiAgICogRGl2aWRlIHR3byBzY2FsYXIgdmFsdWVzLCBgeCAvIHlgLgogICAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yIGludGVybmFsIHVzZTogaXQgaXMgdXNlZCBieSB0aGUgcHVibGljIGZ1bmN0aW9ucwogICAqIGBkaXZpZGVgIGFuZCBgaW52YC4KICAgKgogICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCBjb2xsZWN0aW9ucyAoQXJyYXkgb3IgTWF0cml4KS4KICAgKgogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXR9IHggICBOdW1lcmF0b3IKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXh9IHkgICAgICAgICAgRGVub21pbmF0b3IKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0fSAgICAgUXVvdGllbnQsIGB4IC8geWAKICAgKiBAcHJpdmF0ZQogICAqLwogIHZhciBkaXZpZGVTY2FsYXIgPSB0eXBlZChkaXZpZGVTY2FsYXJfbmFtZSwgewogICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHsKICAgICAgcmV0dXJuIHggLyB5OwogICAgfSwKICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoeCwgeSkgewogICAgICByZXR1cm4geC5kaXYoeSk7CiAgICB9LAogICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHsKICAgICAgcmV0dXJuIHguZGl2KHkpOwogICAgfSwKICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHsKICAgICAgcmV0dXJuIHguZGl2KHkpOwogICAgfSwKICAgICdVbml0LCBudW1iZXIgfCBGcmFjdGlvbiB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFVuaXROdW1iZXJGcmFjdGlvbkJpZ051bWJlcih4LCB5KSB7CiAgICAgIHZhciByZXMgPSB4LmNsb25lKCk7IC8vIFRPRE86IG1vdmUgdGhlIGRpdmlkZSBmdW5jdGlvbiB0byBVbml0LmpzLCBpdCB1c2VzIGludGVybmFscyBvZiBVbml0CgogICAgICB2YXIgb25lID0gbnVtZXJpYygxLCBPYmplY3QoaXNbIk0iIC8qIHR5cGVPZiAqL10pKHkpKTsKICAgICAgcmVzLnZhbHVlID0gZGl2aWRlU2NhbGFyKHJlcy52YWx1ZSA9PT0gbnVsbCA/IHJlcy5fbm9ybWFsaXplKG9uZSkgOiByZXMudmFsdWUsIHkpOwogICAgICByZXR1cm4gcmVzOwogICAgfSwKICAgICdudW1iZXIgfCBGcmFjdGlvbiB8IEJpZ051bWJlciwgVW5pdCc6IGZ1bmN0aW9uIG51bWJlckZyYWN0aW9uQmlnTnVtYmVyVW5pdCh4LCB5KSB7CiAgICAgIHZhciByZXMgPSB5LmNsb25lKCk7CiAgICAgIHJlcyA9IHJlcy5wb3coLTEpOyAvLyBUT0RPOiBtb3ZlIHRoZSBkaXZpZGUgZnVuY3Rpb24gdG8gVW5pdC5qcywgaXQgdXNlcyBpbnRlcm5hbHMgb2YgVW5pdAoKICAgICAgdmFyIG9uZSA9IG51bWVyaWMoMSwgT2JqZWN0KGlzWyJNIiAvKiB0eXBlT2YgKi9dKSh4KSk7CiAgICAgIHJlcy52YWx1ZSA9IGRpdmlkZVNjYWxhcih4LCB5LnZhbHVlID09PSBudWxsID8geS5fbm9ybWFsaXplKG9uZSkgOiB5LnZhbHVlKTsKICAgICAgcmV0dXJuIHJlczsKICAgIH0sCiAgICAnVW5pdCwgVW5pdCc6IGZ1bmN0aW9uIFVuaXRVbml0KHgsIHkpIHsKICAgICAgcmV0dXJuIHguZGl2aWRlKHkpOwogICAgfQogIH0pOwogIHJldHVybiBkaXZpZGVTY2FsYXI7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hcml0aG1ldGljL3Bvdy5qcwoKCgoKdmFyIHBvd19uYW1lID0gJ3Bvdyc7CnZhciBwb3dfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnaWRlbnRpdHknLCAnbXVsdGlwbHknLCAnbWF0cml4JywgJ2ZyYWN0aW9uJywgJ251bWJlcicsICdDb21wbGV4J107CnZhciBjcmVhdGVQb3cgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShwb3dfbmFtZSwgcG93X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBjb25maWcgPSBfcmVmLmNvbmZpZywKICAgICAgaWRlbnRpdHkgPSBfcmVmLmlkZW50aXR5LAogICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LAogICAgICBudW1iZXIgPSBfcmVmLm51bWJlciwKICAgICAgZnJhY3Rpb24gPSBfcmVmLmZyYWN0aW9uLAogICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4OwoKICAvKioKICAgKiBDYWxjdWxhdGVzIHRoZSBwb3dlciBvZiB4IHRvIHksIGB4IF4geWAuCiAgICogTWF0cml4IGV4cG9uZW50aWF0aW9uIGlzIHN1cHBvcnRlZCBmb3Igc3F1YXJlIG1hdHJpY2VzIGB4YCwgYW5kIHBvc2l0aXZlCiAgICogaW50ZWdlciBleHBvbmVudHMgYHlgLgogICAqCiAgICogRm9yIGN1YmljIHJvb3RzIG9mIG5lZ2F0aXZlIG51bWJlcnMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcmluY2lwYWwKICAgKiByb290IGJ5IGRlZmF1bHQuIEluIG9yZGVyIHRvIGxldCB0aGUgZnVuY3Rpb24gcmV0dXJuIHRoZSByZWFsIHJvb3QsCiAgICogbWF0aC5qcyBjYW4gYmUgY29uZmlndXJlZCB3aXRoIGBtYXRoLmNvbmZpZyh7cHJlZGljdGFibGU6IHRydWV9KWAuCiAgICogVG8gcmV0cmlldmUgYWxsIGN1YmljIHJvb3RzIG9mIGEgdmFsdWUsIHVzZSBgbWF0aC5jYnJ0KHgsIHRydWUpYC4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGgucG93KHgsIHkpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGgucG93KDIsIDMpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgOAogICAqCiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKQogICAqICAgIG1hdGgucG93KGEsIDIpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgQ29tcGxleCAtNSArIDEyaQogICAqCiAgICogICAgY29uc3QgYiA9IFtbMSwgMl0sIFs0LCAzXV0KICAgKiAgICBtYXRoLnBvdyhiLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgQXJyYXkgW1s5LCA4XSwgWzE2LCAxN11dCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIG11bHRpcGx5LCBzcXJ0LCBjYnJ0LCBudGhSb290CiAgICoKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBUaGUgYmFzZQogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXh9IHkgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBleHBvbmVudAogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gVGhlIHZhbHVlIG9mIGB4YCB0byB0aGUgcG93ZXIgYHlgCiAgICovCiAgcmV0dXJuIHR5cGVkKHBvd19uYW1lLCB7CiAgICAnbnVtYmVyLCBudW1iZXInOiBfcG93LAogICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7CiAgICAgIHJldHVybiB4LnBvdyh5KTsKICAgIH0sCiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkgewogICAgICBpZiAoeS5pc0ludGVnZXIoKSB8fCB4ID49IDAgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7CiAgICAgICAgcmV0dXJuIHgucG93KHkpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LnRvTnVtYmVyKCksIDApLnBvdyh5LnRvTnVtYmVyKCksIDApOwogICAgICB9CiAgICB9LAogICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkgewogICAgICBpZiAoeS5kICE9PSAxKSB7CiAgICAgICAgaWYgKGNvbmZpZy5wcmVkaWN0YWJsZSkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiBwb3cgZG9lcyBub3Qgc3VwcG9ydCBub24taW50ZWdlciBleHBvbmVudHMgZm9yIGZyYWN0aW9ucy4nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIF9wb3coeC52YWx1ZU9mKCksIHkudmFsdWVPZigpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHgucG93KHkpOwogICAgICB9CiAgICB9LAogICAgJ0FycmF5LCBudW1iZXInOiBfcG93QXJyYXksCiAgICAnQXJyYXksIEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5QmlnTnVtYmVyKHgsIHkpIHsKICAgICAgcmV0dXJuIF9wb3dBcnJheSh4LCB5LnRvTnVtYmVyKCkpOwogICAgfSwKICAgICdNYXRyaXgsIG51bWJlcic6IF9wb3dNYXRyaXgsCiAgICAnTWF0cml4LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBNYXRyaXhCaWdOdW1iZXIoeCwgeSkgewogICAgICByZXR1cm4gX3Bvd01hdHJpeCh4LCB5LnRvTnVtYmVyKCkpOwogICAgfSwKICAgICdVbml0LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBVbml0TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHsKICAgICAgcmV0dXJuIHgucG93KHkpOwogICAgfQogIH0pOwogIC8qKgogICAqIENhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSwgeF55LCBmb3IgdHdvIG51bWJlcnMuCiAgICogQHBhcmFtIHtudW1iZXJ9IHgKICAgKiBAcGFyYW0ge251bWJlcn0geQogICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXh9IHJlcwogICAqIEBwcml2YXRlCiAgICovCgogIGZ1bmN0aW9uIF9wb3coeCwgeSkgewogICAgLy8gQWx0ZXJuYXRpdmVseSBjb3VsZCBkZWZpbmUgYSAncmVhbG1vZGUnIGNvbmZpZyBvcHRpb24gb3Igc29tZXRoaW5nLCBidXQKICAgIC8vICdwcmVkaWN0YWJsZScgd2lsbCB3b3JrIGZvciBub3cKICAgIGlmIChjb25maWcucHJlZGljdGFibGUgJiYgIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKHkpICYmIHggPCAwKSB7CiAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB5IGNhbiBiZSByZXByZXNlbnRlZCBhcyBhIGZyYWN0aW9uCiAgICAgIHRyeSB7CiAgICAgICAgdmFyIHlGcmFjID0gZnJhY3Rpb24oeSk7CiAgICAgICAgdmFyIHlOdW0gPSBudW1iZXIoeUZyYWMpOwoKICAgICAgICBpZiAoeSA9PT0geU51bSB8fCBNYXRoLmFicygoeSAtIHlOdW0pIC8geSkgPCAxZS0xNCkgewogICAgICAgICAgaWYgKHlGcmFjLmQgJSAyID09PSAxKSB7CiAgICAgICAgICAgIHJldHVybiAoeUZyYWMubiAlIDIgPT09IDAgPyAxIDogLTEpICogTWF0aC5wb3coLXgsIHkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXgpIHt9IC8vIGZyYWN0aW9uKCkgdGhyb3dzIGFuIGVycm9yIGlmIHkgaXMgSW5maW5pdHksIGV0Yy4KICAgICAgLy8gVW5hYmxlIHRvIGV4cHJlc3MgeSBhcyBhIGZyYWN0aW9uLCBzbyBjb250aW51ZSBvbgoKICAgIH0gLy8gKipmb3IgcHJlZGljdGFibGUgbW9kZSoqIHheSW5maW5pdHkgPT09IE5hTiBpZiB4IDwgLTEKICAgIC8vIE4uQi4gdGhpcyBiZWhhdm91ciBpcyBkaWZmZXJlbnQgZnJvbSBgTWF0aC5wb3dgIHdoaWNoIGdpdmVzCiAgICAvLyAoLTIpXkluZmluaXR5ID09PSBJbmZpbml0eQoKCiAgICBpZiAoY29uZmlnLnByZWRpY3RhYmxlICYmICh4IDwgLTEgJiYgeSA9PT0gSW5maW5pdHkgfHwgeCA+IC0xICYmIHggPCAwICYmIHkgPT09IC1JbmZpbml0eSkpIHsKICAgICAgcmV0dXJuIE5hTjsKICAgIH0KCiAgICBpZiAoT2JqZWN0KHV0aWxzX251bWJlclsiaSIgLyogaXNJbnRlZ2VyICovXSkoeSkgfHwgeCA+PSAwIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkgewogICAgICByZXR1cm4gcG93TnVtYmVyKHgsIHkpOwogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETzogdGhlIGZvbGxvd2luZyBpbmZpbml0eSBjaGVja3MgYXJlIGR1cGxpY2F0ZWQgZnJvbSBwb3dOdW1iZXIuIERlZHVwbGljYXRlIHRoaXMgc29tZWhvdwogICAgICAvLyB4XkluZmluaXR5ID09PSAwIGlmIC0xIDwgeCA8IDEKICAgICAgLy8gQSByZWFsIG51bWJlciAwIGlzIHJldHVybmVkIGluc3RlYWQgb2YgY29tcGxleCgwKQogICAgICBpZiAoeCAqIHggPCAxICYmIHkgPT09IEluZmluaXR5IHx8IHggKiB4ID4gMSAmJiB5ID09PSAtSW5maW5pdHkpIHsKICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApLnBvdyh5LCAwKTsKICAgIH0KICB9CiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBwb3dlciBvZiBhIDJkIGFycmF5CiAgICogQHBhcmFtIHtBcnJheX0geCAgICAgbXVzdCBiZSBhIDIgZGltZW5zaW9uYWwsIHNxdWFyZSBtYXRyaXgKICAgKiBAcGFyYW0ge251bWJlcn0geSAgICBhIHBvc2l0aXZlLCBpbnRlZ2VyIHZhbHVlCiAgICogQHJldHVybnMge0FycmF5fQogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBfcG93QXJyYXkoeCwgeSkgewogICAgaWYgKCFPYmplY3QodXRpbHNfbnVtYmVyWyJpIiAvKiBpc0ludGVnZXIgKi9dKSh5KSB8fCB5IDwgMCkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGb3IgQV5iLCBiIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyICh2YWx1ZSBpcyAnICsgeSArICcpJyk7CiAgICB9IC8vIHZlcmlmeSB0aGF0IEEgaXMgYSAyIGRpbWVuc2lvbmFsIHNxdWFyZSBtYXRyaXgKCgogICAgdmFyIHMgPSBPYmplY3QodXRpbHNfYXJyYXlbImEiIC8qIGFycmF5U2l6ZSAqL10pKHgpOwoKICAgIGlmIChzLmxlbmd0aCAhPT0gMikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvciBBXmIsIEEgbXVzdCBiZSAyIGRpbWVuc2lvbmFsIChBIGhhcyAnICsgcy5sZW5ndGggKyAnIGRpbWVuc2lvbnMpJyk7CiAgICB9CgogICAgaWYgKHNbMF0gIT09IHNbMV0pIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3IgQV5iLCBBIG11c3QgYmUgc3F1YXJlIChzaXplIGlzICcgKyBzWzBdICsgJ3gnICsgc1sxXSArICcpJyk7CiAgICB9CgogICAgdmFyIHJlcyA9IGlkZW50aXR5KHNbMF0pLnZhbHVlT2YoKTsKICAgIHZhciBweCA9IHg7CgogICAgd2hpbGUgKHkgPj0gMSkgewogICAgICBpZiAoKHkgJiAxKSA9PT0gMSkgewogICAgICAgIHJlcyA9IG11bHRpcGx5KHB4LCByZXMpOwogICAgICB9CgogICAgICB5ID4+PSAxOwogICAgICBweCA9IG11bHRpcGx5KHB4LCBweCk7CiAgICB9CgogICAgcmV0dXJuIHJlczsKICB9CiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBwb3dlciBvZiBhIDJkIG1hdHJpeAogICAqIEBwYXJhbSB7TWF0cml4fSB4ICAgICBtdXN0IGJlIGEgMiBkaW1lbnNpb25hbCwgc3F1YXJlIG1hdHJpeAogICAqIEBwYXJhbSB7bnVtYmVyfSB5ICAgIGEgcG9zaXRpdmUsIGludGVnZXIgdmFsdWUKICAgKiBAcmV0dXJucyB7TWF0cml4fQogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBfcG93TWF0cml4KHgsIHkpIHsKICAgIHJldHVybiBtYXRyaXgoX3Bvd0FycmF5KHgudmFsdWVPZigpLCB5KSk7CiAgfQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYXJpdGhtZXRpYy9yb3VuZC5qcwpmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfQoKZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9CgpmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfQoKCgoKCgoKCnZhciBOT19JTlQgPSAnTnVtYmVyIG9mIGRlY2ltYWxzIGluIGZ1bmN0aW9uIHJvdW5kIG11c3QgYmUgYW4gaW50ZWdlcic7CnZhciByb3VuZF9uYW1lID0gJ3JvdW5kJzsKdmFyIHJvdW5kX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ0JpZ051bWJlcicsICdEZW5zZU1hdHJpeCddOwp2YXIgY3JlYXRlUm91bmQgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShyb3VuZF9uYW1lLCByb3VuZF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhciwKICAgICAgemVyb3MgPSBfcmVmLnplcm9zLAogICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlciwKICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4OwogIHZhciBhbGdvcml0aG0xMSA9IGNyZWF0ZUFsZ29yaXRobTExKHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcgogIH0pOwogIHZhciBhbGdvcml0aG0xMiA9IGNyZWF0ZUFsZ29yaXRobTEyKHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeAogIH0pOwogIHZhciBhbGdvcml0aG0xNCA9IGNyZWF0ZUFsZ29yaXRobTE0KHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIC8qKgogICAqIFJvdW5kIGEgdmFsdWUgdG93YXJkcyB0aGUgbmVhcmVzdCBpbnRlZ2VyLgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLnJvdW5kKHgpCiAgICogICAgbWF0aC5yb3VuZCh4LCBuKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLnJvdW5kKDMuMikgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDMKICAgKiAgICBtYXRoLnJvdW5kKDMuOCkgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDQKICAgKiAgICBtYXRoLnJvdW5kKC00LjIpICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC00CiAgICogICAgbWF0aC5yb3VuZCgtNC43KSAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAtNQogICAqICAgIG1hdGgucm91bmQobWF0aC5waSwgMykgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMy4xNDIKICAgKiAgICBtYXRoLnJvdW5kKDEyMy40NTY3OCwgMikgICAgIC8vIHJldHVybnMgbnVtYmVyIDEyMy40NgogICAqCiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgzLjIsIC0yLjcpCiAgICogICAgbWF0aC5yb3VuZChjKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMyAtIDNpCiAgICoKICAgKiAgICBtYXRoLnJvdW5kKFszLjIsIDMuOCwgLTQuN10pIC8vIHJldHVybnMgQXJyYXkgWzMsIDQsIC01XQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBjZWlsLCBmaXgsIGZsb29yCiAgICoKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgTnVtYmVyIHRvIGJlIHJvdW5kZWQKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheX0gW249MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGRlY2ltYWxzCiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFJvdW5kZWQgdmFsdWUKICAgKi8KCiAgdmFyIHJvdW5kID0gdHlwZWQocm91bmRfbmFtZSwgX29iamVjdFNwcmVhZCh7fSwgcm91bmROdW1iZXJTaWduYXR1cmVzLCB7CiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHsKICAgICAgcmV0dXJuIHgucm91bmQoKTsKICAgIH0sCiAgICAnQ29tcGxleCwgbnVtYmVyJzogZnVuY3Rpb24gQ29tcGxleE51bWJlcih4LCBuKSB7CiAgICAgIGlmIChuICUgMSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoTk9fSU5UKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHgucm91bmQobik7CiAgICB9LAogICAgJ0NvbXBsZXgsIEJpZ051bWJlcic6IGZ1bmN0aW9uIENvbXBsZXhCaWdOdW1iZXIoeCwgbikgewogICAgICBpZiAoIW4uaXNJbnRlZ2VyKCkpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7CiAgICAgIH0KCiAgICAgIHZhciBfbiA9IG4udG9OdW1iZXIoKTsKCiAgICAgIHJldHVybiB4LnJvdW5kKF9uKTsKICAgIH0sCiAgICAnbnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXIoeCwgbikgewogICAgICBpZiAoIW4uaXNJbnRlZ2VyKCkpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7CiAgICAgIH0KCiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHgpLnRvRGVjaW1hbFBsYWNlcyhuLnRvTnVtYmVyKCkpOwogICAgfSwKICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHsKICAgICAgcmV0dXJuIHgudG9EZWNpbWFsUGxhY2VzKDApOwogICAgfSwKICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCBuKSB7CiAgICAgIGlmICghbi5pc0ludGVnZXIoKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoTk9fSU5UKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHgudG9EZWNpbWFsUGxhY2VzKG4udG9OdW1iZXIoKSk7CiAgICB9LAogICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHsKICAgICAgcmV0dXJuIHgucm91bmQoKTsKICAgIH0sCiAgICAnRnJhY3Rpb24sIG51bWJlcic6IGZ1bmN0aW9uIEZyYWN0aW9uTnVtYmVyKHgsIG4pIHsKICAgICAgaWYgKG4gJSAxKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihOT19JTlQpOwogICAgICB9CgogICAgICByZXR1cm4geC5yb3VuZChuKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2Ugcm91bmQoMCkgPSAwCiAgICAgIHJldHVybiBkZWVwTWFwKHgsIHJvdW5kLCB0cnVlKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgcm91bmQsIGZhbHNlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIHJvdW5kLCBmYWxzZSk7CiAgICB9LAogICAgJ251bWJlciB8IENvbXBsZXggfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckNvbXBsZXhCaWdOdW1iZXJTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICAvLyBjaGVjayBzY2FsYXIgaXMgemVybwogICAgICBpZiAoZXF1YWxTY2FsYXIoeCwgMCkpIHsKICAgICAgICAvLyBkbyBub3QgZXhlY3V0ZSBhbGdvcml0aG0sIHJlc3VsdCB3aWxsIGJlIGEgemVybyBtYXRyaXgKICAgICAgICByZXR1cm4gemVyb3MoeS5zaXplKCksIHkuc3RvcmFnZSgpKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIHJvdW5kLCB0cnVlKTsKICAgIH0sCiAgICAnbnVtYmVyIHwgQ29tcGxleCB8IEJpZ051bWJlciwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJDb21wbGV4QmlnTnVtYmVyRGVuc2VNYXRyaXgoeCwgeSkgewogICAgICAvLyBjaGVjayBzY2FsYXIgaXMgemVybwogICAgICBpZiAoZXF1YWxTY2FsYXIoeCwgMCkpIHsKICAgICAgICAvLyBkbyBub3QgZXhlY3V0ZSBhbGdvcml0aG0sIHJlc3VsdCB3aWxsIGJlIGEgemVybyBtYXRyaXgKICAgICAgICByZXR1cm4gemVyb3MoeS5zaXplKCksIHkuc3RvcmFnZSgpKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIHJvdW5kLCB0cnVlKTsKICAgIH0sCiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCByb3VuZCwgZmFsc2UpLnZhbHVlT2YoKTsKICAgIH0sCiAgICAnbnVtYmVyIHwgQ29tcGxleCB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJDb21wbGV4QmlnTnVtYmVyQXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIHJvdW5kLCB0cnVlKS52YWx1ZU9mKCk7CiAgICB9CiAgfSkpOwogIHJldHVybiByb3VuZDsKfSk7CnZhciByb3VuZE51bWJlclNpZ25hdHVyZXMgPSB7CiAgbnVtYmVyOiByb3VuZE51bWJlciwKICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgbikgewogICAgaWYgKCFPYmplY3QodXRpbHNfbnVtYmVyWyJpIiAvKiBpc0ludGVnZXIgKi9dKShuKSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7CiAgICB9CgogICAgaWYgKG4gPCAwIHx8IG4gPiAxNSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ051bWJlciBvZiBkZWNpbWFscyBpbiBmdW5jdGlvbiByb3VuZCBtdXN0IGJlIGluIHRlIHJhbmdlIG9mIDAtMTUnKTsKICAgIH0KCiAgICByZXR1cm4gcm91bmROdW1iZXIoeCwgbik7CiAgfQp9Owp2YXIgY3JlYXRlUm91bmROdW1iZXIgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShyb3VuZF9uYW1lLCBbJ3R5cGVkJ10sIGZ1bmN0aW9uIChfcmVmMikgewogIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkOwogIHJldHVybiB0eXBlZChyb3VuZF9uYW1lLCByb3VuZE51bWJlclNpZ25hdHVyZXMpOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2cuanMKCgoKdmFyIGxvZ19uYW1lID0gJ2xvZyc7CnZhciBsb2dfZGVwZW5kZW5jaWVzID0gWydjb25maWcnLCAndHlwZWQnLCAnZGl2aWRlU2NhbGFyJywgJ0NvbXBsZXgnXTsKdmFyIGNyZWF0ZUxvZyA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGxvZ19uYW1lLCBsb2dfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLAogICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhciwKICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDsKCiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBsb2dhcml0aG0gb2YgYSB2YWx1ZS4KICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmxvZyh4KQogICAqICAgIG1hdGgubG9nKHgsIGJhc2UpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGgubG9nKDMuNSkgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEuMjUyNzYyOTY4NDk1MzY4CiAgICogICAgbWF0aC5leHAobWF0aC5sb2coMi40KSkgICAgICAgIC8vIHJldHVybnMgMi40CiAgICoKICAgKiAgICBtYXRoLnBvdygxMCwgNCkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxMDAwMAogICAqICAgIG1hdGgubG9nKDEwMDAwLCAxMCkgICAgICAgICAgICAvLyByZXR1cm5zIDQKICAgKiAgICBtYXRoLmxvZygxMDAwMCkgLyBtYXRoLmxvZygxMCkgLy8gcmV0dXJucyA0CiAgICoKICAgKiAgICBtYXRoLmxvZygxMDI0LCAyKSAgICAgICAgICAgICAgLy8gcmV0dXJucyAxMAogICAqICAgIG1hdGgucG93KDIsIDEwKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEwMjQKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgZXhwLCBsb2cyLCBsb2cxMCwgbG9nMXAKICAgKgogICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4CiAgICogICAgICAgICAgICBWYWx1ZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBsb2dhcml0aG0uCiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4fSBbYmFzZT1lXQogICAqICAgICAgICAgICAgT3B0aW9uYWwgYmFzZSBmb3IgdGhlIGxvZ2FyaXRobS4gSWYgbm90IHByb3ZpZGVkLCB0aGUgbmF0dXJhbAogICAqICAgICAgICAgICAgbG9nYXJpdGhtIG9mIGB4YCBpcyBjYWxjdWxhdGVkLgogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0KICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIGxvZ2FyaXRobSBvZiBgeGAKICAgKi8KICB2YXIgbG9nID0gdHlwZWQobG9nX25hbWUsIHsKICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHsKICAgICAgaWYgKHggPj0gMCB8fCBjb25maWcucHJlZGljdGFibGUpIHsKICAgICAgICByZXR1cm4gbG9nTnVtYmVyKHgpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIG5lZ2F0aXZlIHZhbHVlIC0+IGNvbXBsZXggdmFsdWUgY29tcHV0YXRpb24KICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCkubG9nKCk7CiAgICAgIH0KICAgIH0sCiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHsKICAgICAgcmV0dXJuIHgubG9nKCk7CiAgICB9LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkgewogICAgICBpZiAoIXguaXNOZWdhdGl2ZSgpIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkgewogICAgICAgIHJldHVybiB4LmxuKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gZG93bmdyYWRlIHRvIG51bWJlciwgcmV0dXJuIENvbXBsZXggdmFsdWVkIHJlc3VsdAogICAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LnRvTnVtYmVyKCksIDApLmxvZygpOwogICAgICB9CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkgewogICAgICByZXR1cm4gZGVlcE1hcCh4LCBsb2cpOwogICAgfSwKICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCBiYXNlKSB7CiAgICAgIC8vIGNhbGN1bGF0ZSBsb2dhcml0aG0gZm9yIGEgc3BlY2lmaWVkIGJhc2UsIGxvZyh4LCBiYXNlKQogICAgICByZXR1cm4gZGl2aWRlU2NhbGFyKGxvZyh4KSwgbG9nKGJhc2UpKTsKICAgIH0KICB9KTsKICByZXR1cm4gbG9nOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2cxcC5qcwoKCgp2YXIgbG9nMXBfbmFtZSA9ICdsb2cxcCc7CnZhciBsb2cxcF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdkaXZpZGVTY2FsYXInLCAnbG9nJywgJ0NvbXBsZXgnXTsKdmFyIGNyZWF0ZUxvZzFwID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkobG9nMXBfbmFtZSwgbG9nMXBfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLAogICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhciwKICAgICAgbG9nID0gX3JlZi5sb2csCiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7CgogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgbG9nYXJpdGhtIG9mIGEgYHZhbHVlKzFgLgogICAqCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGgubG9nMXAoeCkKICAgKiAgICBtYXRoLmxvZzFwKHgsIGJhc2UpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGgubG9nMXAoMi41KSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxLjI1Mjc2Mjk2ODQ5NTM2OAogICAqICAgIG1hdGguZXhwKG1hdGgubG9nMXAoMS40KSkgICAgICAgLy8gcmV0dXJucyAyLjQKICAgKgogICAqICAgIG1hdGgucG93KDEwLCA0KSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxMDAwMAogICAqICAgIG1hdGgubG9nMXAoOTk5OSwgMTApICAgICAgICAgICAgLy8gcmV0dXJucyA0CiAgICogICAgbWF0aC5sb2cxcCg5OTk5KSAvIG1hdGgubG9nKDEwKSAvLyByZXR1cm5zIDQKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgZXhwLCBsb2csIGxvZzIsIGxvZzEwCiAgICoKICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geAogICAqICAgICAgICAgICAgVmFsdWUgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgbG9nYXJpdGhtIG9mIGB4KzFgLgogICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleH0gW2Jhc2U9ZV0KICAgKiAgICAgICAgICAgIE9wdGlvbmFsIGJhc2UgZm9yIHRoZSBsb2dhcml0aG0uIElmIG5vdCBwcm92aWRlZCwgdGhlIG5hdHVyYWwKICAgKiAgICAgICAgICAgIGxvZ2FyaXRobSBvZiBgeCsxYCBpcyBjYWxjdWxhdGVkLgogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0KICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIGxvZ2FyaXRobSBvZiBgeCsxYAogICAqLwogIHZhciBsb2cxcCA9IHR5cGVkKGxvZzFwX25hbWUsIHsKICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHsKICAgICAgaWYgKHggPj0gLTEgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdCh1dGlsc19udW1iZXJbImsiIC8qIGxvZzFwICovXSkoeCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gbmVnYXRpdmUgdmFsdWUgLT4gY29tcGxleCB2YWx1ZSBjb21wdXRhdGlvbgogICAgICAgIHJldHVybiBfbG9nMXBDb21wbGV4KG5ldyBDb21wbGV4KHgsIDApKTsKICAgICAgfQogICAgfSwKICAgIENvbXBsZXg6IF9sb2cxcENvbXBsZXgsCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHZhciB5ID0geC5wbHVzKDEpOwoKICAgICAgaWYgKCF5LmlzTmVnYXRpdmUoKSB8fCBjb25maWcucHJlZGljdGFibGUpIHsKICAgICAgICByZXR1cm4geS5sbigpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIGRvd25ncmFkZSB0byBudW1iZXIsIHJldHVybiBDb21wbGV4IHZhbHVlZCByZXN1bHQKICAgICAgICByZXR1cm4gX2xvZzFwQ29tcGxleChuZXcgQ29tcGxleCh4LnRvTnVtYmVyKCksIDApKTsKICAgICAgfQogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgbG9nMXApOwogICAgfSwKICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCBiYXNlKSB7CiAgICAgIC8vIGNhbGN1bGF0ZSBsb2dhcml0aG0gZm9yIGEgc3BlY2lmaWVkIGJhc2UsIGxvZzFwKHgsIGJhc2UpCiAgICAgIHJldHVybiBkaXZpZGVTY2FsYXIobG9nMXAoeCksIGxvZyhiYXNlKSk7CiAgICB9CiAgfSk7CiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiBhIGNvbXBsZXggbnVtYmVyICsgMQogICAqIEBwYXJhbSB7Q29tcGxleH0geAogICAqIEByZXR1cm5zIHtDb21wbGV4fQogICAqIEBwcml2YXRlCiAgICovCgogIGZ1bmN0aW9uIF9sb2cxcENvbXBsZXgoeCkgewogICAgdmFyIHhSZTFwID0geC5yZSArIDE7CiAgICByZXR1cm4gbmV3IENvbXBsZXgoTWF0aC5sb2coTWF0aC5zcXJ0KHhSZTFwICogeFJlMXAgKyB4LmltICogeC5pbSkpLCBNYXRoLmF0YW4yKHguaW0sIHhSZTFwKSk7CiAgfQoKICByZXR1cm4gbG9nMXA7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RzLmpzCgp2YXIgbnRoUm9vdHNfbmFtZSA9ICdudGhSb290cyc7CnZhciBudGhSb290c19kZXBlbmRlbmNpZXMgPSBbJ2NvbmZpZycsICd0eXBlZCcsICdkaXZpZGVTY2FsYXInLCAnQ29tcGxleCddOwp2YXIgY3JlYXRlTnRoUm9vdHMgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShudGhSb290c19uYW1lLCBudGhSb290c19kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLAogICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4OwoKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIG50aCByb290cyBvZiBhIHZhbHVlLgogICAqIEFuIG50aCByb290IG9mIGEgcG9zaXRpdmUgcmVhbCBudW1iZXIgQSwKICAgKiBpcyBhIHBvc2l0aXZlIHJlYWwgc29sdXRpb24gb2YgdGhlIGVxdWF0aW9uICJ4XnJvb3QgPSBBIi4KICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgb2YgY29tcGxleCB2YWx1ZXMuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLm50aFJvb3RzKHgpCiAgICogICAgbWF0aC5udGhSb290cyh4LCByb290KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLm50aFJvb3RzKDEpCiAgICogICAgLy8gcmV0dXJucyBbCiAgICogICAgLy8gICB7cmU6IDEsIGltOiAwfSwKICAgKiAgICAvLyAgIHtyZTogLTEsIGltOiAwfQogICAqICAgIC8vIF0KICAgKiAgICBudGhSb290cygxLCAzKQogICAqICAgIC8vIHJldHVybnMgWwogICAqICAgIC8vICAgeyByZTogMSwgaW06IDAgfSwKICAgKiAgICAvLyAgIHsgcmU6IC0wLjQ5OTk5OTk5OTk5OTk5OTgsIGltOiAwLjg2NjAyNTQwMzc4NDQzODcgfSwKICAgKiAgICAvLyAgIHsgcmU6IC0wLjUwMDAwMDAwMDAwMDAwMDQsIGltOiAtMC44NjYwMjU0MDM3ODQ0Mzg1IH0KICAgKiAgICBdCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIG50aFJvb3QsIHBvdywgc3FydAogICAqCiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCBOdW1iZXIgdG8gYmUgcm91bmRlZAogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgIFJvdW5kZWQgdmFsdWUKICAgKi8KICB2YXIgbnRoUm9vdHMgPSB0eXBlZChudGhSb290c19uYW1lLCB7CiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHsKICAgICAgcmV0dXJuIF9udGhDb21wbGV4Um9vdHMoeCwgMik7CiAgICB9LAogICAgJ0NvbXBsZXgsIG51bWJlcic6IF9udGhDb21wbGV4Um9vdHMKICB9KTsKICAvKioKICAgKiBFYWNoIGZ1bmN0aW9uIGhlcmUgcmV0dXJucyBhIHJlYWwgbXVsdGlwbGUgb2YgaSBhcyBhIENvbXBsZXggdmFsdWUuCiAgICogQHBhcmFtICB7bnVtYmVyfSB2YWwKICAgKiBAcmV0dXJuIHtDb21wbGV4fSB2YWwsIGkqdmFsLCAtdmFsIG9yIC1pKnZhbCBmb3IgaW5kZXggMCwgMSwgMiwgMwogICAqLwogIC8vIFRoaXMgaXMgdXNlZCB0byBmaXggZmxvYXQgYXJ0aWZhY3RzIGZvciB6ZXJvLXZhbHVlZCBjb21wb25lbnRzLgoKICB2YXIgX2NhbGN1bGF0ZUV4YWN0UmVzdWx0ID0gW2Z1bmN0aW9uIHJlYWxQb3ModmFsKSB7CiAgICByZXR1cm4gbmV3IENvbXBsZXgodmFsLCAwKTsKICB9LCBmdW5jdGlvbiBpbWFnUG9zKHZhbCkgewogICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIHZhbCk7CiAgfSwgZnVuY3Rpb24gcmVhbE5lZyh2YWwpIHsKICAgIHJldHVybiBuZXcgQ29tcGxleCgtdmFsLCAwKTsKICB9LCBmdW5jdGlvbiBpbWFnTmVnKHZhbCkgewogICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIC12YWwpOwogIH1dOwogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgbnRoIHJvb3Qgb2YgYSBDb21wbGV4IE51bWJlciBhIHVzaW5nIERlIE1vdmlyZSdzIFRoZW9yZW0uCiAgICogQHBhcmFtICB7Q29tcGxleH0gYQogICAqIEBwYXJhbSAge251bWJlcn0gcm9vdAogICAqIEByZXR1cm4ge0FycmF5fSBhcnJheSBvZiBuIENvbXBsZXggUm9vdHMKICAgKi8KCiAgZnVuY3Rpb24gX250aENvbXBsZXhSb290cyhhLCByb290KSB7CiAgICBpZiAocm9vdCA8IDApIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvJyk7CiAgICBpZiAocm9vdCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgbm9uLXplcm8nKTsKICAgIGlmIChyb290ICUgMSAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgYW4gaW50ZWdlcicpOwogICAgaWYgKGEgPT09IDAgfHwgYS5hYnMoKSA9PT0gMCkgcmV0dXJuIFtuZXcgQ29tcGxleCgwLCAwKV07CiAgICB2YXIgYUlzTnVtZXJpYyA9IHR5cGVvZiBhID09PSAnbnVtYmVyJzsKICAgIHZhciBvZmZzZXQ7IC8vIGRldGVybWluZSB0aGUgb2Zmc2V0IChhcmd1bWVudCBvZiBhKS8ocGkvMikKCiAgICBpZiAoYUlzTnVtZXJpYyB8fCBhLnJlID09PSAwIHx8IGEuaW0gPT09IDApIHsKICAgICAgaWYgKGFJc051bWVyaWMpIHsKICAgICAgICBvZmZzZXQgPSAyICogKyhhIDwgMCk7IC8vIG51bWVyaWMgdmFsdWUgb24gdGhlIHJlYWwgYXhpcwogICAgICB9IGVsc2UgaWYgKGEuaW0gPT09IDApIHsKICAgICAgICBvZmZzZXQgPSAyICogKyhhLnJlIDwgMCk7IC8vIGNvbXBsZXggdmFsdWUgb24gdGhlIHJlYWwgYXhpcwogICAgICB9IGVsc2UgewogICAgICAgIG9mZnNldCA9IDIgKiArKGEuaW0gPCAwKSArIDE7IC8vIGNvbXBsZXggdmFsdWUgb24gdGhlIGltYWdpbmFyeSBheGlzCiAgICAgIH0KICAgIH0KCiAgICB2YXIgYXJnID0gYS5hcmcoKTsKICAgIHZhciBhYnMgPSBhLmFicygpOwogICAgdmFyIHJvb3RzID0gW107CiAgICB2YXIgciA9IE1hdGgucG93KGFicywgMSAvIHJvb3QpOwoKICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcm9vdDsgaysrKSB7CiAgICAgIHZhciBoYWxmUGlGYWN0b3IgPSAob2Zmc2V0ICsgNCAqIGspIC8gcm9vdDsKICAgICAgLyoqCiAgICAgICAqIElmIChvZmZzZXQgKyA0KmspL3Jvb3QgaXMgYW4gaW50ZWdyYWwgbXVsdGlwbGUgb2YgcGkvMgogICAgICAgKiB0aGVuIHdlIGNhbiBwcm9kdWNlIGEgbW9yZSBleGFjdCByZXN1bHQuCiAgICAgICAqLwoKICAgICAgaWYgKGhhbGZQaUZhY3RvciA9PT0gTWF0aC5yb3VuZChoYWxmUGlGYWN0b3IpKSB7CiAgICAgICAgcm9vdHMucHVzaChfY2FsY3VsYXRlRXhhY3RSZXN1bHRbaGFsZlBpRmFjdG9yICUgNF0ocikpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CgogICAgICByb290cy5wdXNoKG5ldyBDb21wbGV4KHsKICAgICAgICByOiByLAogICAgICAgIHBoaTogKGFyZyArIDIgKiBNYXRoLlBJICogaykgLyByb290CiAgICAgIH0pKTsKICAgIH0KCiAgICByZXR1cm4gcm9vdHM7CiAgfQoKICByZXR1cm4gbnRoUm9vdHM7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hcml0aG1ldGljL2RvdFBvdy5qcwoKCgoKCgoKdmFyIGRvdFBvd19uYW1lID0gJ2RvdFBvdyc7CnZhciBkb3RQb3dfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhcicsICdtYXRyaXgnLCAncG93JywgJ0RlbnNlTWF0cml4J107CnZhciBjcmVhdGVEb3RQb3cgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShkb3RQb3dfbmFtZSwgZG90UG93X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LAogICAgICBwb3cgPSBfcmVmLnBvdywKICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4OwogIHZhciBhbGdvcml0aG0wMyA9IGNyZWF0ZUFsZ29yaXRobTAzKHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIHZhciBhbGdvcml0aG0wNyA9IGNyZWF0ZUFsZ29yaXRobTA3KHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeAogIH0pOwogIHZhciBhbGdvcml0aG0xMSA9IGNyZWF0ZUFsZ29yaXRobTExKHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcgogIH0pOwogIHZhciBhbGdvcml0aG0xMiA9IGNyZWF0ZUFsZ29yaXRobTEyKHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeAogIH0pOwogIHZhciBhbGdvcml0aG0xMyA9IGNyZWF0ZUFsZ29yaXRobTEzKHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIHZhciBhbGdvcml0aG0xNCA9IGNyZWF0ZUFsZ29yaXRobTE0KHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIC8qKgogICAqIENhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmRvdFBvdyh4LCB5KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmRvdFBvdygyLCAzKSAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDgKICAgKgogICAqICAgIGNvbnN0IGEgPSBbWzEsIDJdLCBbNCwgM11dCiAgICogICAgbWF0aC5kb3RQb3coYSwgMikgICAgICAgICAgICAvLyByZXR1cm5zIEFycmF5IFtbMSwgNF0sIFsxNiwgOV1dCiAgICogICAgbWF0aC5wb3coYSwgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIEFycmF5IFtbOSwgOF0sIFsxNiwgMTddXQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBwb3csIHNxcnQsIG11bHRpcGx5CiAgICoKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBUaGUgYmFzZQogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgIFRoZSBleHBvbmVudAogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIG9mIGB4YCB0byB0aGUgcG93ZXIgYHlgCiAgICovCgogIHZhciBkb3RQb3cgPSB0eXBlZChkb3RQb3dfbmFtZSwgewogICAgJ2FueSwgYW55JzogcG93LAogICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIHBvdywgZmFsc2UpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgcG93LCB0cnVlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIHBvdywgZmFsc2UpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIHBvdyk7CiAgICB9LAogICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBkb3RQb3cobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTsKICAgIH0sCiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gZG90UG93KG1hdHJpeCh4KSwgeSk7CiAgICB9LAogICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGRvdFBvdyh4LCBtYXRyaXgoeSkpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBkb3RQb3csIGZhbHNlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGRvdFBvdywgZmFsc2UpOwogICAgfSwKICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBkb3RQb3csIHRydWUpOwogICAgfSwKICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgZG90UG93LCB0cnVlKTsKICAgIH0sCiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBkb3RQb3csIGZhbHNlKS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgZG90UG93LCB0cnVlKS52YWx1ZU9mKCk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGRvdFBvdzsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90RGl2aWRlLmpzCgoKCgoKCgoKdmFyIGRvdERpdmlkZV9uYW1lID0gJ2RvdERpdmlkZSc7CnZhciBkb3REaXZpZGVfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnZGl2aWRlU2NhbGFyJywgJ0RlbnNlTWF0cml4J107CnZhciBjcmVhdGVEb3REaXZpZGUgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShkb3REaXZpZGVfbmFtZSwgZG90RGl2aWRlX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCwKICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLAogICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhciwKICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4OwogIHZhciBhbGdvcml0aG0wMiA9IGNyZWF0ZUFsZ29yaXRobTAyKHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcgogIH0pOwogIHZhciBhbGdvcml0aG0wMyA9IGNyZWF0ZUFsZ29yaXRobTAzKHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIHZhciBhbGdvcml0aG0wNyA9IGNyZWF0ZUFsZ29yaXRobTA3KHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeAogIH0pOwogIHZhciBhbGdvcml0aG0xMSA9IGNyZWF0ZUFsZ29yaXRobTExKHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcgogIH0pOwogIHZhciBhbGdvcml0aG0xMiA9IGNyZWF0ZUFsZ29yaXRobTEyKHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeAogIH0pOwogIHZhciBhbGdvcml0aG0xMyA9IGNyZWF0ZUFsZ29yaXRobTEzKHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIHZhciBhbGdvcml0aG0xNCA9IGNyZWF0ZUFsZ29yaXRobTE0KHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIC8qKgogICAqIERpdmlkZSB0d28gbWF0cmljZXMgZWxlbWVudCB3aXNlLiBUaGUgZnVuY3Rpb24gYWNjZXB0cyBib3RoIG1hdHJpY2VzIGFuZAogICAqIHNjYWxhciB2YWx1ZXMuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmRvdERpdmlkZSh4LCB5KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmRvdERpdmlkZSgyLCA0KSAgIC8vIHJldHVybnMgMC41CiAgICoKICAgKiAgICBhID0gW1s5LCA1XSwgWzYsIDFdXQogICAqICAgIGIgPSBbWzMsIDJdLCBbNSwgMl1dCiAgICoKICAgKiAgICBtYXRoLmRvdERpdmlkZShhLCBiKSAgIC8vIHJldHVybnMgW1szLCAyLjVdLCBbMS4yLCAwLjVdXQogICAqICAgIG1hdGguZGl2aWRlKGEsIGIpICAgICAgLy8gcmV0dXJucyBbWzEuNzUsIDAuNzVdLCBbLTEuNzUsIDIuMjVdXQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBkaXZpZGUsIG11bHRpcGx5LCBkb3RNdWx0aXBseQogICAqCiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IE51bWVyYXRvcgogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBEZW5vbWluYXRvcgogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0gICAgICAgICAgICAgICAgICAgIFF1b3RpZW50LCBgeCAuLyB5YAogICAqLwoKICB2YXIgZG90RGl2aWRlID0gdHlwZWQoZG90RGl2aWRlX25hbWUsIHsKICAgICdhbnksIGFueSc6IGRpdmlkZVNjYWxhciwKICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGRpdmlkZVNjYWxhciwgdHJ1ZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBkaXZpZGVTY2FsYXIpOwogICAgfSwKICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gZG90RGl2aWRlKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGRvdERpdmlkZShtYXRyaXgoeCksIHkpOwogICAgfSwKICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBkb3REaXZpZGUoeCwgbWF0cml4KHkpKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgZGl2aWRlU2NhbGFyLCBmYWxzZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTsKICAgIH0sCiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgZGl2aWRlU2NhbGFyLCB0cnVlKTsKICAgIH0sCiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGRpdmlkZVNjYWxhciwgdHJ1ZSk7CiAgICB9LAogICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgZGl2aWRlU2NhbGFyLCBmYWxzZSkudmFsdWVPZigpOwogICAgfSwKICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIGRpdmlkZVNjYWxhciwgdHJ1ZSkudmFsdWVPZigpOwogICAgfQogIH0pOwogIHJldHVybiBkb3REaXZpZGU7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hbGdlYnJhL3NvbHZlci91dGlscy9zb2x2ZVZhbGlkYXRpb24uanMKCgoKZnVuY3Rpb24gY3JlYXRlU29sdmVWYWxpZGF0aW9uKF9yZWYpIHsKICB2YXIgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4OwoKICAvKioKICAgKiBWYWxpZGF0ZXMgbWF0cml4IGFuZCBjb2x1bW4gdmVjdG9yIGIgZm9yIGJhY2t3YXJkL2ZvcndhcmQgc3Vic3RpdHV0aW9uIGFsZ29yaXRobXMuCiAgICoKICAgKiBAcGFyYW0ge01hdHJpeH0gbSAgICAgICAgICAgIEFuIE4geCBOIG1hdHJpeAogICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IGIgICAgQSBjb2x1bW4gdmVjdG9yCiAgICogQHBhcmFtIHtCb29sZWFufSBjb3B5ICAgICAgICBSZXR1cm4gYSBjb3B5IG9mIHZlY3RvciBiCiAgICoKICAgKiBAcmV0dXJuIHtEZW5zZU1hdHJpeH0gICAgICAgIERlbnNlIGNvbHVtbiB2ZWN0b3IgYgogICAqLwogIHJldHVybiBmdW5jdGlvbiBzb2x2ZVZhbGlkYXRpb24obSwgYiwgY29weSkgewogICAgLy8gbWF0cml4IHNpemUKICAgIHZhciBzaXplID0gbS5zaXplKCk7IC8vIHZhbGlkYXRlIG1hdHJpeCBkaW1lbnNpb25zCgogICAgaWYgKHNpemUubGVuZ3RoICE9PSAyKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSB0d28gZGltZW5zaW9uYWwgKHNpemU6ICcgKyBPYmplY3QodXRpbHNfc3RyaW5nWyJkIiAvKiBmb3JtYXQgKi9dKShzaXplKSArICcpJyk7CiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zCgoKICAgIHZhciByb3dzID0gc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gc2l6ZVsxXTsgLy8gdmFsaWRhdGUgcm93cyAmIGNvbHVtbnMKCiAgICBpZiAocm93cyAhPT0gY29sdW1ucykgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlIChzaXplOiAnICsgT2JqZWN0KHV0aWxzX3N0cmluZ1siZCIgLyogZm9ybWF0ICovXSkoc2l6ZSkgKyAnKScpOwogICAgfSAvLyB2YXJzCgoKICAgIHZhciBkYXRhLCBpLCBiZGF0YTsgLy8gY2hlY2sgYiBpcyBtYXRyaXgKCiAgICBpZiAoT2JqZWN0KGlzWyJ2IiAvKiBpc01hdHJpeCAqL10pKGIpKSB7CiAgICAgIC8vIG1hdHJpeCBzaXplCiAgICAgIHZhciBtc2l6ZSA9IGIuc2l6ZSgpOyAvLyB2ZWN0b3IKCiAgICAgIGlmIChtc2l6ZS5sZW5ndGggPT09IDEpIHsKICAgICAgICAvLyBjaGVjayB2ZWN0b3IgbGVuZ3RoCiAgICAgICAgaWYgKG1zaXplWzBdICE9PSByb3dzKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggY29sdW1ucyBtdXN0IG1hdGNoIHZlY3RvciBsZW5ndGguJyk7CiAgICAgICAgfSAvLyBjcmVhdGUgZGF0YSBhcnJheQoKCiAgICAgICAgZGF0YSA9IFtdOyAvLyBtYXRyaXggZGF0YSAoRGVuc2VNYXRyaXgpCgogICAgICAgIGJkYXRhID0gYi5fZGF0YTsgLy8gbG9vcCBiIGRhdGEKCiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykgewogICAgICAgICAgLy8gcm93IGFycmF5CiAgICAgICAgICBkYXRhW2ldID0gW2JkYXRhW2ldXTsKICAgICAgICB9IC8vIHJldHVybiBEZW5zZSBNYXRyaXgKCgogICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoewogICAgICAgICAgZGF0YTogZGF0YSwKICAgICAgICAgIHNpemU6IFtyb3dzLCAxXSwKICAgICAgICAgIGRhdGF0eXBlOiBiLl9kYXRhdHlwZQogICAgICAgIH0pOwogICAgICB9IC8vIHR3byBkaW1lbnNpb25zCgoKICAgICAgaWYgKG1zaXplLmxlbmd0aCA9PT0gMikgewogICAgICAgIC8vIGFycmF5IG11c3QgYmUgYSBjb2x1bW4gdmVjdG9yCiAgICAgICAgaWYgKG1zaXplWzBdICE9PSByb3dzIHx8IG1zaXplWzFdICE9PSAxKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggY29sdW1ucyBtdXN0IG1hdGNoIHZlY3RvciBsZW5ndGguJyk7CiAgICAgICAgfSAvLyBjaGVjayBtYXRyaXggdHlwZQoKCiAgICAgICAgaWYgKE9iamVjdChpc1sibiIgLyogaXNEZW5zZU1hdHJpeCAqL10pKGIpKSB7CiAgICAgICAgICAvLyBjaGVjayBhIGNvcHkgaXMgbmVlZGVkCiAgICAgICAgICBpZiAoY29weSkgewogICAgICAgICAgICAvLyBjcmVhdGUgZGF0YSBhcnJheQogICAgICAgICAgICBkYXRhID0gW107IC8vIG1hdHJpeCBkYXRhIChEZW5zZU1hdHJpeCkKCiAgICAgICAgICAgIGJkYXRhID0gYi5fZGF0YTsgLy8gbG9vcCBiIGRhdGEKCiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHsKICAgICAgICAgICAgICAvLyByb3cgYXJyYXkKICAgICAgICAgICAgICBkYXRhW2ldID0gW2JkYXRhW2ldWzBdXTsKICAgICAgICAgICAgfSAvLyByZXR1cm4gRGVuc2UgTWF0cml4CgoKICAgICAgICAgICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7CiAgICAgICAgICAgICAgZGF0YTogZGF0YSwKICAgICAgICAgICAgICBzaXplOiBbcm93cywgMV0sCiAgICAgICAgICAgICAgZGF0YXR5cGU6IGIuX2RhdGF0eXBlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSAvLyBiIGlzIGFscmVhZHkgYSBjb2x1bW4gdmVjdG9yCgoKICAgICAgICAgIHJldHVybiBiOwogICAgICAgIH0gLy8gY3JlYXRlIGRhdGEgYXJyYXkKCgogICAgICAgIGRhdGEgPSBbXTsKCiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykgewogICAgICAgICAgZGF0YVtpXSA9IFswXTsKICAgICAgICB9IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzCgoKICAgICAgICB2YXIgdmFsdWVzID0gYi5fdmFsdWVzOwogICAgICAgIHZhciBpbmRleCA9IGIuX2luZGV4OwogICAgICAgIHZhciBwdHIgPSBiLl9wdHI7IC8vIGxvb3AgdmFsdWVzIGluIGNvbHVtbiAwCgogICAgICAgIGZvciAodmFyIGsxID0gcHRyWzFdLCBrID0gcHRyWzBdOyBrIDwgazE7IGsrKykgewogICAgICAgICAgLy8gcm93CiAgICAgICAgICBpID0gaW5kZXhba107IC8vIGFkZCB0byBkYXRhCgogICAgICAgICAgZGF0YVtpXVswXSA9IHZhbHVlc1trXTsKICAgICAgICB9IC8vIHJldHVybiBEZW5zZSBNYXRyaXgKCgogICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoewogICAgICAgICAgZGF0YTogZGF0YSwKICAgICAgICAgIHNpemU6IFtyb3dzLCAxXSwKICAgICAgICAgIGRhdGF0eXBlOiBiLl9kYXRhdHlwZQogICAgICAgIH0pOwogICAgICB9IC8vIHRocm93IGVycm9yCgoKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IGNvbHVtbnMgbXVzdCBtYXRjaCB2ZWN0b3IgbGVuZ3RoLicpOwogICAgfSAvLyBjaGVjayBiIGlzIGFycmF5CgoKICAgIGlmIChPYmplY3QoaXNbImIiIC8qIGlzQXJyYXkgKi9dKShiKSkgewogICAgICAvLyBzaXplCiAgICAgIHZhciBhc2l6ZSA9IE9iamVjdCh1dGlsc19hcnJheVsiYSIgLyogYXJyYXlTaXplICovXSkoYik7IC8vIGNoZWNrIG1hdHJpeCBkaW1lbnNpb25zLCB2ZWN0b3IKCiAgICAgIGlmIChhc2l6ZS5sZW5ndGggPT09IDEpIHsKICAgICAgICAvLyBjaGVjayB2ZWN0b3IgbGVuZ3RoCiAgICAgICAgaWYgKGFzaXplWzBdICE9PSByb3dzKSB7CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggY29sdW1ucyBtdXN0IG1hdGNoIHZlY3RvciBsZW5ndGguJyk7CiAgICAgICAgfSAvLyBjcmVhdGUgZGF0YSBhcnJheQoKCiAgICAgICAgZGF0YSA9IFtdOyAvLyBsb29wIGIKCiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykgewogICAgICAgICAgLy8gcm93IGFycmF5CiAgICAgICAgICBkYXRhW2ldID0gW2JbaV1dOwogICAgICAgIH0gLy8gcmV0dXJuIERlbnNlIE1hdHJpeAoKCiAgICAgICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7CiAgICAgICAgICBkYXRhOiBkYXRhLAogICAgICAgICAgc2l6ZTogW3Jvd3MsIDFdCiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIGlmIChhc2l6ZS5sZW5ndGggPT09IDIpIHsKICAgICAgICAvLyBhcnJheSBtdXN0IGJlIGEgY29sdW1uIHZlY3RvcgogICAgICAgIGlmIChhc2l6ZVswXSAhPT0gcm93cyB8fCBhc2l6ZVsxXSAhPT0gMSkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IGNvbHVtbnMgbXVzdCBtYXRjaCB2ZWN0b3IgbGVuZ3RoLicpOwogICAgICAgIH0gLy8gY3JlYXRlIGRhdGEgYXJyYXkKCgogICAgICAgIGRhdGEgPSBbXTsgLy8gbG9vcCBiIGRhdGEKCiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykgewogICAgICAgICAgLy8gcm93IGFycmF5CiAgICAgICAgICBkYXRhW2ldID0gW2JbaV1bMF1dOwogICAgICAgIH0gLy8gcmV0dXJuIERlbnNlIE1hdHJpeAoKCiAgICAgICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7CiAgICAgICAgICBkYXRhOiBkYXRhLAogICAgICAgICAgc2l6ZTogW3Jvd3MsIDFdCiAgICAgICAgfSk7CiAgICAgIH0gLy8gdGhyb3cgZXJyb3IKCgogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggY29sdW1ucyBtdXN0IG1hdGNoIHZlY3RvciBsZW5ndGguJyk7CiAgICB9CiAgfTsKfQovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hbGdlYnJhL3NvbHZlci9sc29sdmUuanMKCgp2YXIgbHNvbHZlX25hbWUgPSAnbHNvbHZlJzsKdmFyIGxzb2x2ZV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnc3VidHJhY3QnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTsKdmFyIGNyZWF0ZUxzb2x2ZSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGxzb2x2ZV9uYW1lLCBsc29sdmVfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LAogICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhciwKICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLAogICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsCiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhciwKICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4OwogIHZhciBzb2x2ZVZhbGlkYXRpb24gPSBjcmVhdGVTb2x2ZVZhbGlkYXRpb24oewogICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4CiAgfSk7CiAgLyoqCiAgICogU29sdmVzIHRoZSBsaW5lYXIgZXF1YXRpb24gc3lzdGVtIGJ5IGZvcndhcmRzIHN1YnN0aXR1dGlvbi4gTWF0cml4IG11c3QgYmUgYSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeC4KICAgKgogICAqIGBMICogeCA9IGJgCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmxzb2x2ZShMLCBiKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBjb25zdCBhID0gW1stMiwgM10sIFsyLCAxXV0KICAgKiAgICBjb25zdCBiID0gWzExLCA5XQogICAqICAgIGNvbnN0IHggPSBsc29sdmUoYSwgYikgIC8vIFtbLTUuNV0sIFsyMF1dCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGx1cCwgc2x1LCB1c29sdmUsIGx1c29sdmUKICAgKgogICAqIEBwYXJhbSB7TWF0cml4LCBBcnJheX0gTCAgICAgICBBIE4geCBOIG1hdHJpeCBvciBhcnJheSAoTCkKICAgKiBAcGFyYW0ge01hdHJpeCwgQXJyYXl9IGIgICAgICAgQSBjb2x1bW4gdmVjdG9yIHdpdGggdGhlIGIgdmFsdWVzCiAgICoKICAgKiBAcmV0dXJuIHtEZW5zZU1hdHJpeCB8IEFycmF5fSAgQSBjb2x1bW4gdmVjdG9yIHdpdGggdGhlIGxpbmVhciBzeXN0ZW0gc29sdXRpb24gKHgpCiAgICovCgogIHJldHVybiB0eXBlZChsc29sdmVfbmFtZSwgewogICAgJ1NwYXJzZU1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBcnJheU1hdHJpeChtLCBiKSB7CiAgICAgIC8vIHByb2Nlc3MgbWF0cml4CiAgICAgIHJldHVybiBfc3BhcnNlRm9yd2FyZFN1YnN0aXR1dGlvbihtLCBiKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBcnJheU1hdHJpeChtLCBiKSB7CiAgICAgIC8vIHByb2Nlc3MgbWF0cml4CiAgICAgIHJldHVybiBfZGVuc2VGb3J3YXJkU3Vic3RpdHV0aW9uKG0sIGIpOwogICAgfSwKICAgICdBcnJheSwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheUFycmF5TWF0cml4KGEsIGIpIHsKICAgICAgLy8gY3JlYXRlIGRlbnNlIG1hdHJpeCBmcm9tIGFycmF5CiAgICAgIHZhciBtID0gbWF0cml4KGEpOyAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCgogICAgICB2YXIgciA9IF9kZW5zZUZvcndhcmRTdWJzdGl0dXRpb24obSwgYik7IC8vIHJlc3VsdAoKCiAgICAgIHJldHVybiByLnZhbHVlT2YoKTsKICAgIH0KICB9KTsKCiAgZnVuY3Rpb24gX2RlbnNlRm9yd2FyZFN1YnN0aXR1dGlvbihtLCBiKSB7CiAgICAvLyB2YWxpZGF0ZSBtYXRyaXggYW5kIHZlY3RvciwgcmV0dXJuIGNvcHkgb2YgY29sdW1uIHZlY3RvciBiCiAgICBiID0gc29sdmVWYWxpZGF0aW9uKG0sIGIsIHRydWUpOyAvLyBjb2x1bW4gdmVjdG9yIGRhdGEKCiAgICB2YXIgYmRhdGEgPSBiLl9kYXRhOyAvLyByb3dzICYgY29sdW1ucwoKICAgIHZhciByb3dzID0gbS5fc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gbS5fc2l6ZVsxXTsgLy8gcmVzdWx0CgogICAgdmFyIHggPSBbXTsgLy8gZGF0YQoKICAgIHZhciBkYXRhID0gbS5fZGF0YTsgLy8gZm9yd2FyZCBzb2x2ZSBtICogeCA9IGIsIGxvb3AgY29sdW1ucwoKICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7CiAgICAgIC8vIGJbal0KICAgICAgdmFyIGJqID0gYmRhdGFbal1bMF0gfHwgMDsgLy8geFtqXQoKICAgICAgdmFyIHhqID0gdm9pZCAwOyAvLyBmb3J3YXJkIHN1YnN0aXR1dGlvbiAob3V0ZXIgcHJvZHVjdCkgYXZvaWRzIGlubmVyIGxvb3Bpbmcgd2hlbiBiaiA9PT0gMAoKICAgICAgaWYgKCFlcXVhbFNjYWxhcihiaiwgMCkpIHsKICAgICAgICAvLyB2YWx1ZSBAIFtqLCBqXQogICAgICAgIHZhciB2amogPSBkYXRhW2pdW2pdOyAvLyBjaGVjayB2amoKCiAgICAgICAgaWYgKGVxdWFsU2NhbGFyKHZqaiwgMCkpIHsKICAgICAgICAgIC8vIHN5c3RlbSBjYW5ub3QgYmUgc29sdmVkCiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xpbmVhciBzeXN0ZW0gY2Fubm90IGJlIHNvbHZlZCBzaW5jZSBtYXRyaXggaXMgc2luZ3VsYXInKTsKICAgICAgICB9IC8vIGNhbGN1bGF0ZSB4agoKCiAgICAgICAgeGogPSBkaXZpZGVTY2FsYXIoYmosIHZqaik7IC8vIGxvb3Agcm93cwoKICAgICAgICBmb3IgKHZhciBpID0gaiArIDE7IGkgPCByb3dzOyBpKyspIHsKICAgICAgICAgIC8vIHVwZGF0ZSBjb3B5IG9mIGIKICAgICAgICAgIGJkYXRhW2ldID0gW3N1YnRyYWN0KGJkYXRhW2ldWzBdIHx8IDAsIG11bHRpcGx5U2NhbGFyKHhqLCBkYXRhW2ldW2pdKSldOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyB6ZXJvIEAgagogICAgICAgIHhqID0gMDsKICAgICAgfSAvLyB1cGRhdGUgeAoKCiAgICAgIHhbal0gPSBbeGpdOwogICAgfSAvLyByZXR1cm4gdmVjdG9yCgoKICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoewogICAgICBkYXRhOiB4LAogICAgICBzaXplOiBbcm93cywgMV0KICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gX3NwYXJzZUZvcndhcmRTdWJzdGl0dXRpb24obSwgYikgewogICAgLy8gdmFsaWRhdGUgbWF0cml4IGFuZCB2ZWN0b3IsIHJldHVybiBjb3B5IG9mIGNvbHVtbiB2ZWN0b3IgYgogICAgYiA9IHNvbHZlVmFsaWRhdGlvbihtLCBiLCB0cnVlKTsgLy8gY29sdW1uIHZlY3RvciBkYXRhCgogICAgdmFyIGJkYXRhID0gYi5fZGF0YTsgLy8gcm93cyAmIGNvbHVtbnMKCiAgICB2YXIgcm93cyA9IG0uX3NpemVbMF07CiAgICB2YXIgY29sdW1ucyA9IG0uX3NpemVbMV07IC8vIG1hdHJpeCBhcnJheXMKCiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzOwogICAgdmFyIGluZGV4ID0gbS5faW5kZXg7CiAgICB2YXIgcHRyID0gbS5fcHRyOyAvLyB2YXJzCgogICAgdmFyIGksIGs7IC8vIHJlc3VsdAoKICAgIHZhciB4ID0gW107IC8vIGZvcndhcmQgc29sdmUgbSAqIHggPSBiLCBsb29wIGNvbHVtbnMKCiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykgewogICAgICAvLyBiW2pdCiAgICAgIHZhciBiaiA9IGJkYXRhW2pdWzBdIHx8IDA7IC8vIGZvcndhcmQgc3Vic3RpdHV0aW9uIChvdXRlciBwcm9kdWN0KSBhdm9pZHMgaW5uZXIgbG9vcGluZyB3aGVuIGJqID09PSAwCgogICAgICBpZiAoIWVxdWFsU2NhbGFyKGJqLCAwKSkgewogICAgICAgIC8vIHZhbHVlIEAgW2osIGpdCiAgICAgICAgdmFyIHZqaiA9IDA7IC8vIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4IHZhbHVlcyAmIGluZGV4IChjb2x1bW4gaikKCiAgICAgICAgdmFyIGp2YWx1ZXMgPSBbXTsKICAgICAgICB2YXIgamluZGV4ID0gW107IC8vIGxhc3QgaW5kZXggaW4gY29sdW1uCgogICAgICAgIHZhciBsID0gcHRyW2ogKyAxXTsgLy8gdmFsdWVzIGluIGNvbHVtbiwgZmluZCB2YWx1ZSBAIFtqLCBqXQoKICAgICAgICBmb3IgKGsgPSBwdHJbal07IGsgPCBsOyBrKyspIHsKICAgICAgICAgIC8vIHJvdwogICAgICAgICAgaSA9IGluZGV4W2tdOyAvLyBjaGVjayByb3cgKHJvd3MgYXJlIG5vdCBzb3J0ZWQhKQoKICAgICAgICAgIGlmIChpID09PSBqKSB7CiAgICAgICAgICAgIC8vIHVwZGF0ZSB2amoKICAgICAgICAgICAgdmpqID0gdmFsdWVzW2tdOwogICAgICAgICAgfSBlbHNlIGlmIChpID4gaikgewogICAgICAgICAgICAvLyBzdG9yZSBsb3dlciB0cmlhbmd1bGFyCiAgICAgICAgICAgIGp2YWx1ZXMucHVzaCh2YWx1ZXNba10pOwogICAgICAgICAgICBqaW5kZXgucHVzaChpKTsKICAgICAgICAgIH0KICAgICAgICB9IC8vIGF0IHRoaXMgcG9pbnQgd2UgbXVzdCBoYXZlIGEgdmFsdWUgQCBbaiwgal0KCgogICAgICAgIGlmIChlcXVhbFNjYWxhcih2amosIDApKSB7CiAgICAgICAgICAvLyBzeXN0ZW0gY2Fubm90IGJlIHNvbHZlZCwgdGhlcmUgaXMgbm8gdmFsdWUgQCBbaiwgal0KICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTGluZWFyIHN5c3RlbSBjYW5ub3QgYmUgc29sdmVkIHNpbmNlIG1hdHJpeCBpcyBzaW5ndWxhcicpOwogICAgICAgIH0gLy8gY2FsY3VsYXRlIHhqCgoKICAgICAgICB2YXIgeGogPSBkaXZpZGVTY2FsYXIoYmosIHZqaik7IC8vIGxvb3AgbG93ZXIgdHJpYW5ndWxhcgoKICAgICAgICBmb3IgKGsgPSAwLCBsID0gamluZGV4Lmxlbmd0aDsgayA8IGw7IGsrKykgewogICAgICAgICAgLy8gcm93CiAgICAgICAgICBpID0gamluZGV4W2tdOyAvLyB1cGRhdGUgY29weSBvZiBiCgogICAgICAgICAgYmRhdGFbaV0gPSBbc3VidHJhY3QoYmRhdGFbaV1bMF0gfHwgMCwgbXVsdGlwbHlTY2FsYXIoeGosIGp2YWx1ZXNba10pKV07CiAgICAgICAgfSAvLyB1cGRhdGUgeAoKCiAgICAgICAgeFtqXSA9IFt4al07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gdXBkYXRlIHgKICAgICAgICB4W2pdID0gWzBdOwogICAgICB9CiAgICB9IC8vIHJldHVybiB2ZWN0b3IKCgogICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7CiAgICAgIGRhdGE6IHgsCiAgICAgIHNpemU6IFtyb3dzLCAxXQogICAgfSk7CiAgfQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYWxnZWJyYS9zb2x2ZXIvdXNvbHZlLmpzCgoKdmFyIHVzb2x2ZV9uYW1lID0gJ3Vzb2x2ZSc7CnZhciB1c29sdmVfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJywgJ3N1YnRyYWN0JywgJ2VxdWFsU2NhbGFyJywgJ0RlbnNlTWF0cml4J107CnZhciBjcmVhdGVVc29sdmUgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKSh1c29sdmVfbmFtZSwgdXNvbHZlX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCwKICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsCiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhciwKICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LAogICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsCiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDsKICB2YXIgc29sdmVWYWxpZGF0aW9uID0gY3JlYXRlU29sdmVWYWxpZGF0aW9uKHsKICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeAogIH0pOwogIC8qKgogICAqIFNvbHZlcyB0aGUgbGluZWFyIGVxdWF0aW9uIHN5c3RlbSBieSBiYWNrd2FyZCBzdWJzdGl0dXRpb24uIE1hdHJpeCBtdXN0IGJlIGFuIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4LgogICAqCiAgICogYFUgKiB4ID0gYmAKICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGgudXNvbHZlKFUsIGIpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIGNvbnN0IGEgPSBbWy0yLCAzXSwgWzIsIDFdXQogICAqICAgIGNvbnN0IGIgPSBbMTEsIDldCiAgICogICAgY29uc3QgeCA9IHVzb2x2ZShhLCBiKSAgLy8gW1s4XSwgWzldXQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBsdXAsIHNsdSwgdXNvbHZlLCBsdXNvbHZlCiAgICoKICAgKiBAcGFyYW0ge01hdHJpeCwgQXJyYXl9IFUgICAgICAgQSBOIHggTiBtYXRyaXggb3IgYXJyYXkgKFUpCiAgICogQHBhcmFtIHtNYXRyaXgsIEFycmF5fSBiICAgICAgIEEgY29sdW1uIHZlY3RvciB3aXRoIHRoZSBiIHZhbHVlcwogICAqCiAgICogQHJldHVybiB7RGVuc2VNYXRyaXggfCBBcnJheX0gIEEgY29sdW1uIHZlY3RvciB3aXRoIHRoZSBsaW5lYXIgc3lzdGVtIHNvbHV0aW9uICh4KQogICAqLwoKICByZXR1cm4gdHlwZWQodXNvbHZlX25hbWUsIHsKICAgICdTcGFyc2VNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QXJyYXlNYXRyaXgobSwgYikgewogICAgICAvLyBwcm9jZXNzIG1hdHJpeAogICAgICByZXR1cm4gX3NwYXJzZUJhY2t3YXJkU3Vic3RpdHV0aW9uKG0sIGIpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFycmF5TWF0cml4KG0sIGIpIHsKICAgICAgLy8gcHJvY2VzcyBtYXRyaXgKICAgICAgcmV0dXJuIF9kZW5zZUJhY2t3YXJkU3Vic3RpdHV0aW9uKG0sIGIpOwogICAgfSwKICAgICdBcnJheSwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheUFycmF5TWF0cml4KGEsIGIpIHsKICAgICAgLy8gY3JlYXRlIGRlbnNlIG1hdHJpeCBmcm9tIGFycmF5CiAgICAgIHZhciBtID0gbWF0cml4KGEpOyAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCgogICAgICB2YXIgciA9IF9kZW5zZUJhY2t3YXJkU3Vic3RpdHV0aW9uKG0sIGIpOyAvLyByZXN1bHQKCgogICAgICByZXR1cm4gci52YWx1ZU9mKCk7CiAgICB9CiAgfSk7CgogIGZ1bmN0aW9uIF9kZW5zZUJhY2t3YXJkU3Vic3RpdHV0aW9uKG0sIGIpIHsKICAgIC8vIHZhbGlkYXRlIG1hdHJpeCBhbmQgdmVjdG9yLCByZXR1cm4gY29weSBvZiBjb2x1bW4gdmVjdG9yIGIKICAgIGIgPSBzb2x2ZVZhbGlkYXRpb24obSwgYiwgdHJ1ZSk7IC8vIGNvbHVtbiB2ZWN0b3IgZGF0YQoKICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7IC8vIHJvd3MgJiBjb2x1bW5zCgogICAgdmFyIHJvd3MgPSBtLl9zaXplWzBdOwogICAgdmFyIGNvbHVtbnMgPSBtLl9zaXplWzFdOyAvLyByZXN1bHQKCiAgICB2YXIgeCA9IFtdOyAvLyBhcnJheXMKCiAgICB2YXIgZGF0YSA9IG0uX2RhdGE7IC8vIGJhY2t3YXJkIHNvbHZlIG0gKiB4ID0gYiwgbG9vcCBjb2x1bW5zIChiYWNrd2FyZHMpCgogICAgZm9yICh2YXIgaiA9IGNvbHVtbnMgLSAxOyBqID49IDA7IGotLSkgewogICAgICAvLyBiW2pdCiAgICAgIHZhciBiaiA9IGJkYXRhW2pdWzBdIHx8IDA7IC8vIHhbal0KCiAgICAgIHZhciB4aiA9IHZvaWQgMDsgLy8gYmFja3dhcmQgc3Vic3RpdHV0aW9uIChvdXRlciBwcm9kdWN0KSBhdm9pZHMgaW5uZXIgbG9vcGluZyB3aGVuIGJqID09PSAwCgogICAgICBpZiAoIWVxdWFsU2NhbGFyKGJqLCAwKSkgewogICAgICAgIC8vIHZhbHVlIEAgW2osIGpdCiAgICAgICAgdmFyIHZqaiA9IGRhdGFbal1bal07IC8vIGNoZWNrIHZqagoKICAgICAgICBpZiAoZXF1YWxTY2FsYXIodmpqLCAwKSkgewogICAgICAgICAgLy8gc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQKICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTGluZWFyIHN5c3RlbSBjYW5ub3QgYmUgc29sdmVkIHNpbmNlIG1hdHJpeCBpcyBzaW5ndWxhcicpOwogICAgICAgIH0gLy8gY2FsY3VsYXRlIHhqCgoKICAgICAgICB4aiA9IGRpdmlkZVNjYWxhcihiaiwgdmpqKTsgLy8gbG9vcCByb3dzCgogICAgICAgIGZvciAodmFyIGkgPSBqIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgIC8vIHVwZGF0ZSBjb3B5IG9mIGIKICAgICAgICAgIGJkYXRhW2ldID0gW3N1YnRyYWN0KGJkYXRhW2ldWzBdIHx8IDAsIG11bHRpcGx5U2NhbGFyKHhqLCBkYXRhW2ldW2pdKSldOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyB6ZXJvIHZhbHVlIEAgagogICAgICAgIHhqID0gMDsKICAgICAgfSAvLyB1cGRhdGUgeAoKCiAgICAgIHhbal0gPSBbeGpdOwogICAgfSAvLyByZXR1cm4gY29sdW1uIHZlY3RvcgoKCiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHsKICAgICAgZGF0YTogeCwKICAgICAgc2l6ZTogW3Jvd3MsIDFdCiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIF9zcGFyc2VCYWNrd2FyZFN1YnN0aXR1dGlvbihtLCBiKSB7CiAgICAvLyB2YWxpZGF0ZSBtYXRyaXggYW5kIHZlY3RvciwgcmV0dXJuIGNvcHkgb2YgY29sdW1uIHZlY3RvciBiCiAgICBiID0gc29sdmVWYWxpZGF0aW9uKG0sIGIsIHRydWUpOyAvLyBjb2x1bW4gdmVjdG9yIGRhdGEKCiAgICB2YXIgYmRhdGEgPSBiLl9kYXRhOyAvLyByb3dzICYgY29sdW1ucwoKICAgIHZhciByb3dzID0gbS5fc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gbS5fc2l6ZVsxXTsgLy8gbWF0cml4IGFycmF5cwoKICAgIHZhciB2YWx1ZXMgPSBtLl92YWx1ZXM7CiAgICB2YXIgaW5kZXggPSBtLl9pbmRleDsKICAgIHZhciBwdHIgPSBtLl9wdHI7IC8vIHZhcnMKCiAgICB2YXIgaSwgazsgLy8gcmVzdWx0CgogICAgdmFyIHggPSBbXTsgLy8gYmFja3dhcmQgc29sdmUgbSAqIHggPSBiLCBsb29wIGNvbHVtbnMgKGJhY2t3YXJkcykKCiAgICBmb3IgKHZhciBqID0gY29sdW1ucyAtIDE7IGogPj0gMDsgai0tKSB7CiAgICAgIC8vIGJbal0KICAgICAgdmFyIGJqID0gYmRhdGFbal1bMF0gfHwgMDsgLy8gYmFja3dhcmQgc3Vic3RpdHV0aW9uIChvdXRlciBwcm9kdWN0KSBhdm9pZHMgaW5uZXIgbG9vcGluZyB3aGVuIGJqID09PSAwCgogICAgICBpZiAoIWVxdWFsU2NhbGFyKGJqLCAwKSkgewogICAgICAgIC8vIHZhbHVlIEAgW2osIGpdCiAgICAgICAgdmFyIHZqaiA9IDA7IC8vIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4IHZhbHVlcyAmIGluZGV4IChjb2x1bW4gaikKCiAgICAgICAgdmFyIGp2YWx1ZXMgPSBbXTsKICAgICAgICB2YXIgamluZGV4ID0gW107IC8vIGZpcnN0ICYgbGFzdCBpbmRlY2VzIGluIGNvbHVtbgoKICAgICAgICB2YXIgZiA9IHB0cltqXTsKICAgICAgICB2YXIgbCA9IHB0cltqICsgMV07IC8vIHZhbHVlcyBpbiBjb2x1bW4sIGZpbmQgdmFsdWUgQCBbaiwgal0sIGxvb3AgYmFja3dhcmRzCgogICAgICAgIGZvciAoayA9IGwgLSAxOyBrID49IGY7IGstLSkgewogICAgICAgICAgLy8gcm93CiAgICAgICAgICBpID0gaW5kZXhba107IC8vIGNoZWNrIHJvdwoKICAgICAgICAgIGlmIChpID09PSBqKSB7CiAgICAgICAgICAgIC8vIHVwZGF0ZSB2amoKICAgICAgICAgICAgdmpqID0gdmFsdWVzW2tdOwogICAgICAgICAgfSBlbHNlIGlmIChpIDwgaikgewogICAgICAgICAgICAvLyBzdG9yZSB1cHBlciB0cmlhbmd1bGFyCiAgICAgICAgICAgIGp2YWx1ZXMucHVzaCh2YWx1ZXNba10pOwogICAgICAgICAgICBqaW5kZXgucHVzaChpKTsKICAgICAgICAgIH0KICAgICAgICB9IC8vIGF0IHRoaXMgcG9pbnQgd2UgbXVzdCBoYXZlIGEgdmFsdWUgQCBbaiwgal0KCgogICAgICAgIGlmIChlcXVhbFNjYWxhcih2amosIDApKSB7CiAgICAgICAgICAvLyBzeXN0ZW0gY2Fubm90IGJlIHNvbHZlZCwgdGhlcmUgaXMgbm8gdmFsdWUgQCBbaiwgal0KICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTGluZWFyIHN5c3RlbSBjYW5ub3QgYmUgc29sdmVkIHNpbmNlIG1hdHJpeCBpcyBzaW5ndWxhcicpOwogICAgICAgIH0gLy8gY2FsY3VsYXRlIHhqCgoKICAgICAgICB2YXIgeGogPSBkaXZpZGVTY2FsYXIoYmosIHZqaik7IC8vIGxvb3AgdXBwZXIgdHJpYW5ndWxhcgoKICAgICAgICBmb3IgKGsgPSAwLCBsID0gamluZGV4Lmxlbmd0aDsgayA8IGw7IGsrKykgewogICAgICAgICAgLy8gcm93CiAgICAgICAgICBpID0gamluZGV4W2tdOyAvLyB1cGRhdGUgY29weSBvZiBiCgogICAgICAgICAgYmRhdGFbaV0gPSBbc3VidHJhY3QoYmRhdGFbaV1bMF0sIG11bHRpcGx5U2NhbGFyKHhqLCBqdmFsdWVzW2tdKSldOwogICAgICAgIH0gLy8gdXBkYXRlIHgKCgogICAgICAgIHhbal0gPSBbeGpdOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIHVwZGF0ZSB4CiAgICAgICAgeFtqXSA9IFswXTsKICAgICAgfQogICAgfSAvLyByZXR1cm4gdmVjdG9yCgoKICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoewogICAgICBkYXRhOiB4LAogICAgICBzaXplOiBbcm93cywgMV0KICAgIH0pOwogIH0KfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA4LmpzCgoKdmFyIGFsZ29yaXRobTA4X25hbWUgPSAnYWxnb3JpdGhtMDgnOwp2YXIgYWxnb3JpdGhtMDhfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhciddOwp2YXIgY3JlYXRlQWxnb3JpdGhtMDggPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShhbGdvcml0aG0wOF9uYW1lLCBhbGdvcml0aG0wOF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyOwoKICAvKioKICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBBIGFuZCBTcGFyc2VNYXRyaXggQiBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKEFpaiwgQmlqKS4KICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIE1BWChOTlpBLCBOTlpCKSB0aW1lcwogICAqCiAgICoKICAgKiAgICAgICAgICDilIwgIGYoQWlqLCBCaWopICA7IEEoaSxqKSAhPT0gMCAmJiBCKGksaikgIT09IDAKICAgKiBDKGksaikgPSDilKQgIEEoaSxqKSAgICAgICA7IEEoaSxqKSAhPT0gMAogICAqICAgICAgICAgIOKUlCAgMCAgICAgICAgICAgIDsgb3RoZXJ3aXNlCiAgICoKICAgKgogICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEEpCiAgICogQHBhcmFtIHtNYXRyaXh9ICAgYiAgICAgICAgICAgICAgICAgVGhlIFNwYXJzZU1hdHJpeCBpbnN0YW5jZSAoQikKICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosQmlqKSBvcGVyYXRpb24gdG8gaW52b2tlCiAgICoKICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBTcGFyc2VNYXRyaXggKEMpCiAgICoKICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjIwMjk0CiAgICovCiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTA4KGEsIGIsIGNhbGxiYWNrKSB7CiAgICAvLyBzcGFyc2UgbWF0cml4IGFycmF5cwogICAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7CiAgICB2YXIgYWluZGV4ID0gYS5faW5kZXg7CiAgICB2YXIgYXB0ciA9IGEuX3B0cjsKICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7CiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzCgogICAgdmFyIGJ2YWx1ZXMgPSBiLl92YWx1ZXM7CiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7CiAgICB2YXIgYnB0ciA9IGIuX3B0cjsKICAgIHZhciBic2l6ZSA9IGIuX3NpemU7CiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnMKCiAgICBpZiAoYXNpemUubGVuZ3RoICE9PSBic2l6ZS5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IERpbWVuc2lvbkVycm9yWyJhIiAvKiBEaW1lbnNpb25FcnJvciAqL10oYXNpemUubGVuZ3RoLCBic2l6ZS5sZW5ndGgpOwogICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1ucwoKCiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTsKICAgIH0gLy8gc3BhcnNlIG1hdHJpeCBjYW5ub3QgYmUgYSBQYXR0ZXJuIG1hdHJpeAoKCiAgICBpZiAoIWF2YWx1ZXMgfHwgIWJ2YWx1ZXMpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gUGF0dGVybiBTcGFyc2UgTWF0cmljZXMnKTsKICAgIH0gLy8gcm93cyAmIGNvbHVtbnMKCgogICAgdmFyIHJvd3MgPSBhc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlCgogICAgdmFyIGR0OyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlCgogICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWUKCiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2UKCiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzCgogICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7CiAgICAgIC8vIGRhdGF0eXBlCiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdCkKCiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGUKCiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2sKCiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pOwogICAgfSAvLyByZXN1bHQgYXJyYXlzCgoKICAgIHZhciBjdmFsdWVzID0gW107CiAgICB2YXIgY2luZGV4ID0gW107CiAgICB2YXIgY3B0ciA9IFtdOyAvLyB3b3Jrc3BhY2UKCiAgICB2YXIgeCA9IFtdOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtbgoKICAgIHZhciB3ID0gW107IC8vIHZhcnMKCiAgICB2YXIgaywgazAsIGsxLCBpOyAvLyBsb29wIGNvbHVtbnMKCiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykgewogICAgICAvLyB1cGRhdGUgY3B0cgogICAgICBjcHRyW2pdID0gY2luZGV4Lmxlbmd0aDsgLy8gY29sdW1ucyBtYXJrCgogICAgICB2YXIgbWFyayA9IGogKyAxOyAvLyBsb29wIHZhbHVlcyBpbiBhCgogICAgICBmb3IgKGswID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykgewogICAgICAgIC8vIHJvdwogICAgICAgIGkgPSBhaW5kZXhba107IC8vIG1hcmsgd29ya3NwYWNlCgogICAgICAgIHdbaV0gPSBtYXJrOyAvLyBzZXQgdmFsdWUKCiAgICAgICAgeFtpXSA9IGF2YWx1ZXNba107IC8vIGFkZCBpbmRleAoKICAgICAgICBjaW5kZXgucHVzaChpKTsKICAgICAgfSAvLyBsb29wIHZhbHVlcyBpbiBiCgoKICAgICAgZm9yIChrMCA9IGJwdHJbal0sIGsxID0gYnB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHsKICAgICAgICAvLyByb3cKICAgICAgICBpID0gYmluZGV4W2tdOyAvLyBjaGVjayB2YWx1ZSBleGlzdHMgaW4gd29ya3NwYWNlCgogICAgICAgIGlmICh3W2ldID09PSBtYXJrKSB7CiAgICAgICAgICAvLyBldmFsdWF0ZSBjYWxsYmFjawogICAgICAgICAgeFtpXSA9IGNmKHhbaV0sIGJ2YWx1ZXNba10pOwogICAgICAgIH0KICAgICAgfSAvLyBpbml0aWFsaXplIGZpcnN0IGluZGV4IGluIGoKCgogICAgICBrID0gY3B0cltqXTsgLy8gbG9vcCBpbmRleCBpbiBqCgogICAgICB3aGlsZSAoayA8IGNpbmRleC5sZW5ndGgpIHsKICAgICAgICAvLyByb3cKICAgICAgICBpID0gY2luZGV4W2tdOyAvLyB2YWx1ZSBAIGkKCiAgICAgICAgdmFyIHYgPSB4W2ldOyAvLyBjaGVjayBmb3IgemVybyB2YWx1ZQoKICAgICAgICBpZiAoIWVxKHYsIHplcm8pKSB7CiAgICAgICAgICAvLyBwdXNoIHZhbHVlCiAgICAgICAgICBjdmFsdWVzLnB1c2godik7IC8vIGluY3JlbWVudCBwb2ludGVyCgogICAgICAgICAgaysrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyByZW1vdmUgdmFsdWUgQCBpLCBkbyBub3QgaW5jcmVtZW50IHBvaW50ZXIKICAgICAgICAgIGNpbmRleC5zcGxpY2UoaywgMSk7CiAgICAgICAgfQogICAgICB9CiAgICB9IC8vIHVwZGF0ZSBjcHRyCgoKICAgIGNwdHJbY29sdW1uc10gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeAoKICAgIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7CiAgICAgIHZhbHVlczogY3ZhbHVlcywKICAgICAgaW5kZXg6IGNpbmRleCwKICAgICAgcHRyOiBjcHRyLAogICAgICBzaXplOiBbcm93cywgY29sdW1uc10sCiAgICAgIGRhdGF0eXBlOiBkdAogICAgfSk7CiAgfTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2JpdHdpc2UvbGVmdFNoaWZ0LmpzCgoKCgoKCgoKCgp2YXIgbGVmdFNoaWZ0X25hbWUgPSAnbGVmdFNoaWZ0JzsKdmFyIGxlZnRTaGlmdF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICd6ZXJvcycsICdEZW5zZU1hdHJpeCddOwp2YXIgY3JlYXRlTGVmdFNoaWZ0ID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkobGVmdFNoaWZ0X25hbWUsIGxlZnRTaGlmdF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhciwKICAgICAgemVyb3MgPSBfcmVmLnplcm9zLAogICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7CiAgdmFyIGFsZ29yaXRobTAxID0gY3JlYXRlQWxnb3JpdGhtMDEoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgdmFyIGFsZ29yaXRobTAyID0gY3JlYXRlQWxnb3JpdGhtMDIoewogICAgdHlwZWQ6IHR5cGVkLAogICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyCiAgfSk7CiAgdmFyIGFsZ29yaXRobTA4ID0gY3JlYXRlQWxnb3JpdGhtMDgoewogICAgdHlwZWQ6IHR5cGVkLAogICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyCiAgfSk7CiAgdmFyIGFsZ29yaXRobTEwID0gY3JlYXRlQWxnb3JpdGhtMTAoewogICAgdHlwZWQ6IHR5cGVkLAogICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4CiAgfSk7CiAgdmFyIGFsZ29yaXRobTExID0gY3JlYXRlQWxnb3JpdGhtMTEoewogICAgdHlwZWQ6IHR5cGVkLAogICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyCiAgfSk7CiAgdmFyIGFsZ29yaXRobTEzID0gY3JlYXRlQWxnb3JpdGhtMTMoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgdmFyIGFsZ29yaXRobTE0ID0gY3JlYXRlQWxnb3JpdGhtMTQoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgLyoqCiAgICogQml0d2lzZSBsZWZ0IGxvZ2ljYWwgc2hpZnQgb2YgYSB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMsIGB4IDw8IHlgLgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICogRm9yIHVuaXRzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIG9uIHRoZSBiZXN0IHByZWZpeCBiYXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5sZWZ0U2hpZnQoeCwgeSkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5sZWZ0U2hpZnQoMSwgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA0CiAgICoKICAgKiAgICBtYXRoLmxlZnRTaGlmdChbMSwgMiwgM10sIDQpICAgICAgIC8vIHJldHVybnMgQXJyYXkgWzE2LCAzMiwgNjRdCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGxlZnRTaGlmdCwgYml0Tm90LCBiaXRPciwgYml0WG9yLCByaWdodEFyaXRoU2hpZnQsIHJpZ2h0TG9nU2hpZnQKICAgKgogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IFZhbHVlIHRvIGJlIHNoaWZ0ZWQKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXJ9IHkgQW1vdW50IG9mIHNoaWZ0cwogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBgeGAgc2hpZnRlZCBsZWZ0IGB5YCB0aW1lcwogICAqLwoKICB2YXIgbGVmdFNoaWZ0ID0gdHlwZWQobGVmdFNoaWZ0X25hbWUsIHsKICAgICdudW1iZXIsIG51bWJlcic6IGxlZnRTaGlmdE51bWJlciwKICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGxlZnRTaGlmdEJpZ051bWJlciwKICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wOCh4LCB5LCBsZWZ0U2hpZnQsIGZhbHNlKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGxlZnRTaGlmdCwgdHJ1ZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCBsZWZ0U2hpZnQsIGZhbHNlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBsZWZ0U2hpZnQpOwogICAgfSwKICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gbGVmdFNoaWZ0KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGxlZnRTaGlmdChtYXRyaXgoeCksIHkpOwogICAgfSwKICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBsZWZ0U2hpZnQoeCwgbWF0cml4KHkpKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkgewogICAgICAvLyBjaGVjayBzY2FsYXIKICAgICAgaWYgKGVxdWFsU2NhbGFyKHksIDApKSB7CiAgICAgICAgcmV0dXJuIHguY2xvbmUoKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIGxlZnRTaGlmdCwgZmFsc2UpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gRGVuc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkgewogICAgICAvLyBjaGVjayBzY2FsYXIKICAgICAgaWYgKGVxdWFsU2NhbGFyKHksIDApKSB7CiAgICAgICAgcmV0dXJuIHguY2xvbmUoKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGxlZnRTaGlmdCwgZmFsc2UpOwogICAgfSwKICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIC8vIGNoZWNrIHNjYWxhcgogICAgICBpZiAoZXF1YWxTY2FsYXIoeCwgMCkpIHsKICAgICAgICByZXR1cm4gemVyb3MoeS5zaXplKCksIHkuc3RvcmFnZSgpKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHksIHgsIGxlZnRTaGlmdCwgdHJ1ZSk7CiAgICB9LAogICAgJ251bWJlciB8IEJpZ051bWJlciwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIC8vIGNoZWNrIHNjYWxhcgogICAgICBpZiAoZXF1YWxTY2FsYXIoeCwgMCkpIHsKICAgICAgICByZXR1cm4gemVyb3MoeS5zaXplKCksIHkuc3RvcmFnZSgpKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGxlZnRTaGlmdCwgdHJ1ZSk7CiAgICB9LAogICAgJ0FycmF5LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU51bWJlckJpZ051bWJlcih4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGxlZnRTaGlmdChtYXRyaXgoeCksIHkpLnZhbHVlT2YoKTsKICAgIH0sCiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBBcnJheSc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gbGVmdFNoaWZ0KHgsIG1hdHJpeCh5KSkudmFsdWVPZigpOwogICAgfQogIH0pOwogIHJldHVybiBsZWZ0U2hpZnQ7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9iaXR3aXNlL3JpZ2h0QXJpdGhTaGlmdC5qcwoKCgoKCgoKCgoKdmFyIHJpZ2h0QXJpdGhTaGlmdF9uYW1lID0gJ3JpZ2h0QXJpdGhTaGlmdCc7CnZhciByaWdodEFyaXRoU2hpZnRfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnemVyb3MnLCAnRGVuc2VNYXRyaXgnXTsKdmFyIGNyZWF0ZVJpZ2h0QXJpdGhTaGlmdCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHJpZ2h0QXJpdGhTaGlmdF9uYW1lLCByaWdodEFyaXRoU2hpZnRfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LAogICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsCiAgICAgIHplcm9zID0gX3JlZi56ZXJvcywKICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4OwogIHZhciBhbGdvcml0aG0wMSA9IGNyZWF0ZUFsZ29yaXRobTAxKHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIHZhciBhbGdvcml0aG0wMiA9IGNyZWF0ZUFsZ29yaXRobTAyKHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcgogIH0pOwogIHZhciBhbGdvcml0aG0wOCA9IGNyZWF0ZUFsZ29yaXRobTA4KHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcgogIH0pOwogIHZhciBhbGdvcml0aG0xMCA9IGNyZWF0ZUFsZ29yaXRobTEwKHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeAogIH0pOwogIHZhciBhbGdvcml0aG0xMSA9IGNyZWF0ZUFsZ29yaXRobTExKHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcgogIH0pOwogIHZhciBhbGdvcml0aG0xMyA9IGNyZWF0ZUFsZ29yaXRobTEzKHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIHZhciBhbGdvcml0aG0xNCA9IGNyZWF0ZUFsZ29yaXRobTE0KHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIC8qKgogICAqIEJpdHdpc2UgcmlnaHQgYXJpdGhtZXRpYyBzaGlmdCBvZiBhIHZhbHVlIHggYnkgeSBudW1iZXIgb2YgYml0cywgYHggPj4geWAuCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKiBGb3IgdW5pdHMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgb24gdGhlIGJlc3QgcHJlZml4IGJhc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLnJpZ2h0QXJpdGhTaGlmdCh4LCB5KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLnJpZ2h0QXJpdGhTaGlmdCg0LCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDEKICAgKgogICAqICAgIG1hdGgucmlnaHRBcml0aFNoaWZ0KFsxNiwgLTMyLCA2NF0sIDQpICAgLy8gcmV0dXJucyBBcnJheSBbMSwgLTIsIDNdCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGJpdEFuZCwgYml0Tm90LCBiaXRPciwgYml0WG9yLCByaWdodEFyaXRoU2hpZnQsIHJpZ2h0TG9nU2hpZnQKICAgKgogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IFZhbHVlIHRvIGJlIHNoaWZ0ZWQKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXJ9IHkgQW1vdW50IG9mIHNoaWZ0cwogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBgeGAgc2lnbi1maWxsZWQgc2hpZnRlZCByaWdodCBgeWAgdGltZXMKICAgKi8KCiAgdmFyIHJpZ2h0QXJpdGhTaGlmdCA9IHR5cGVkKHJpZ2h0QXJpdGhTaGlmdF9uYW1lLCB7CiAgICAnbnVtYmVyLCBudW1iZXInOiByaWdodEFyaXRoU2hpZnROdW1iZXIsCiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiByaWdodEFyaXRoU2hpZnRCaWdOdW1iZXIsCiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDgoeCwgeSwgcmlnaHRBcml0aFNoaWZ0LCBmYWxzZSk7CiAgICB9LAogICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCByaWdodEFyaXRoU2hpZnQsIHRydWUpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeCwgeSwgcmlnaHRBcml0aFNoaWZ0LCBmYWxzZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgcmlnaHRBcml0aFNoaWZ0KTsKICAgIH0sCiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIHJpZ2h0QXJpdGhTaGlmdChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpOwogICAgfSwKICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiByaWdodEFyaXRoU2hpZnQobWF0cml4KHgpLCB5KTsKICAgIH0sCiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gcmlnaHRBcml0aFNoaWZ0KHgsIG1hdHJpeCh5KSk7CiAgICB9LAogICAgJ1NwYXJzZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gU3BhcnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHsKICAgICAgLy8gY2hlY2sgc2NhbGFyCiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkgewogICAgICAgIHJldHVybiB4LmNsb25lKCk7CiAgICAgIH0KCiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCByaWdodEFyaXRoU2hpZnQsIGZhbHNlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHsKICAgICAgLy8gY2hlY2sgc2NhbGFyCiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkgewogICAgICAgIHJldHVybiB4LmNsb25lKCk7CiAgICAgIH0KCiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCByaWdodEFyaXRoU2hpZnQsIGZhbHNlKTsKICAgIH0sCiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICAvLyBjaGVjayBzY2FsYXIKICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7CiAgICAgICAgcmV0dXJuIHplcm9zKHkuc2l6ZSgpLCB5LnN0b3JhZ2UoKSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh5LCB4LCByaWdodEFyaXRoU2hpZnQsIHRydWUpOwogICAgfSwKICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyRGVuc2VNYXRyaXgoeCwgeSkgewogICAgICAvLyBjaGVjayBzY2FsYXIKICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7CiAgICAgICAgcmV0dXJuIHplcm9zKHkuc2l6ZSgpLCB5LnN0b3JhZ2UoKSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCByaWdodEFyaXRoU2hpZnQsIHRydWUpOwogICAgfSwKICAgICdBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlOdW1iZXJCaWdOdW1iZXIoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiByaWdodEFyaXRoU2hpZnQobWF0cml4KHgpLCB5KS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ251bWJlciB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIHJpZ2h0QXJpdGhTaGlmdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTsKICAgIH0KICB9KTsKICByZXR1cm4gcmlnaHRBcml0aFNoaWZ0Owp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYml0d2lzZS9yaWdodExvZ1NoaWZ0LmpzCgoKCgoKCgoKCnZhciByaWdodExvZ1NoaWZ0X25hbWUgPSAncmlnaHRMb2dTaGlmdCc7CnZhciByaWdodExvZ1NoaWZ0X2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ0RlbnNlTWF0cml4J107CnZhciBjcmVhdGVSaWdodExvZ1NoaWZ0ID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkocmlnaHRMb2dTaGlmdF9uYW1lLCByaWdodExvZ1NoaWZ0X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCwKICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLAogICAgICB6ZXJvcyA9IF9yZWYuemVyb3MsCiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDsKICB2YXIgYWxnb3JpdGhtMDEgPSBjcmVhdGVBbGdvcml0aG0wMSh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICB2YXIgYWxnb3JpdGhtMDIgPSBjcmVhdGVBbGdvcml0aG0wMih7CiAgICB0eXBlZDogdHlwZWQsCiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIKICB9KTsKICB2YXIgYWxnb3JpdGhtMDggPSBjcmVhdGVBbGdvcml0aG0wOCh7CiAgICB0eXBlZDogdHlwZWQsCiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIKICB9KTsKICB2YXIgYWxnb3JpdGhtMTAgPSBjcmVhdGVBbGdvcml0aG0xMCh7CiAgICB0eXBlZDogdHlwZWQsCiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgKICB9KTsKICB2YXIgYWxnb3JpdGhtMTEgPSBjcmVhdGVBbGdvcml0aG0xMSh7CiAgICB0eXBlZDogdHlwZWQsCiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIKICB9KTsKICB2YXIgYWxnb3JpdGhtMTMgPSBjcmVhdGVBbGdvcml0aG0xMyh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICB2YXIgYWxnb3JpdGhtMTQgPSBjcmVhdGVBbGdvcml0aG0xNCh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICAvKioKICAgKiBCaXR3aXNlIHJpZ2h0IGxvZ2ljYWwgc2hpZnQgb2YgdmFsdWUgeCBieSB5IG51bWJlciBvZiBiaXRzLCBgeCA+Pj4geWAuCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKiBGb3IgdW5pdHMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgb24gdGhlIGJlc3QgcHJlZml4IGJhc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLnJpZ2h0TG9nU2hpZnQoeCwgeSkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5yaWdodExvZ1NoaWZ0KDQsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMQogICAqCiAgICogICAgbWF0aC5yaWdodExvZ1NoaWZ0KFsxNiwgLTMyLCA2NF0sIDQpICAgLy8gcmV0dXJucyBBcnJheSBbMSwgMiwgM10KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgYml0QW5kLCBiaXROb3QsIGJpdE9yLCBiaXRYb3IsIGxlZnRTaGlmdCwgcmlnaHRMb2dTaGlmdAogICAqCiAgICogQHBhcmFtICB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHggVmFsdWUgdG8gYmUgc2hpZnRlZAogICAqIEBwYXJhbSAge251bWJlcn0geSBBbW91bnQgb2Ygc2hpZnRzCiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IGB4YCB6ZXJvLWZpbGxlZCBzaGlmdGVkIHJpZ2h0IGB5YCB0aW1lcwogICAqLwoKICB2YXIgcmlnaHRMb2dTaGlmdCA9IHR5cGVkKHJpZ2h0TG9nU2hpZnRfbmFtZSwgewogICAgJ251bWJlciwgbnVtYmVyJzogcmlnaHRMb2dTaGlmdE51bWJlciwKICAgIC8vICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IC4uLiwgLy8gVE9ETzogaW1wbGVtZW50IEJpZ051bWJlciBzdXBwb3J0IGZvciByaWdodExvZ1NoaWZ0CiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDgoeCwgeSwgcmlnaHRMb2dTaGlmdCwgZmFsc2UpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDIoeSwgeCwgcmlnaHRMb2dTaGlmdCwgdHJ1ZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCByaWdodExvZ1NoaWZ0LCBmYWxzZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgcmlnaHRMb2dTaGlmdCk7CiAgICB9LAogICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiByaWdodExvZ1NoaWZ0KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQobWF0cml4KHgpLCB5KTsKICAgIH0sCiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gcmlnaHRMb2dTaGlmdCh4LCBtYXRyaXgoeSkpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7CiAgICAgIC8vIGNoZWNrIHNjYWxhcgogICAgICBpZiAoZXF1YWxTY2FsYXIoeSwgMCkpIHsKICAgICAgICByZXR1cm4geC5jbG9uZSgpOwogICAgICB9CgogICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgcmlnaHRMb2dTaGlmdCwgZmFsc2UpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gRGVuc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkgewogICAgICAvLyBjaGVjayBzY2FsYXIKICAgICAgaWYgKGVxdWFsU2NhbGFyKHksIDApKSB7CiAgICAgICAgcmV0dXJuIHguY2xvbmUoKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIHJpZ2h0TG9nU2hpZnQsIGZhbHNlKTsKICAgIH0sCiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICAvLyBjaGVjayBzY2FsYXIKICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7CiAgICAgICAgcmV0dXJuIHplcm9zKHkuc2l6ZSgpLCB5LnN0b3JhZ2UoKSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh5LCB4LCByaWdodExvZ1NoaWZ0LCB0cnVlKTsKICAgIH0sCiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgLy8gY2hlY2sgc2NhbGFyCiAgICAgIGlmIChlcXVhbFNjYWxhcih4LCAwKSkgewogICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpOwogICAgICB9CgogICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgcmlnaHRMb2dTaGlmdCwgdHJ1ZSk7CiAgICB9LAogICAgJ0FycmF5LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU51bWJlckJpZ051bWJlcih4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQobWF0cml4KHgpLCB5KS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ251bWJlciB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQoeCwgbWF0cml4KHkpKS52YWx1ZU9mKCk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQ7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9sb2dpY2FsL2FuZC5qcwoKCgoKCgoKdmFyIGFuZF9uYW1lID0gJ2FuZCc7CnZhciBhbmRfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnemVyb3MnLCAnbm90J107CnZhciBjcmVhdGVBbmQgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShhbmRfbmFtZSwgYW5kX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCwKICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLAogICAgICB6ZXJvcyA9IF9yZWYuemVyb3MsCiAgICAgIG5vdCA9IF9yZWYubm90OwogIHZhciBhbGdvcml0aG0wMiA9IGNyZWF0ZUFsZ29yaXRobTAyKHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcgogIH0pOwogIHZhciBhbGdvcml0aG0wNiA9IGNyZWF0ZUFsZ29yaXRobTA2KHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcgogIH0pOwogIHZhciBhbGdvcml0aG0xMSA9IGNyZWF0ZUFsZ29yaXRobTExKHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcgogIH0pOwogIHZhciBhbGdvcml0aG0xMyA9IGNyZWF0ZUFsZ29yaXRobTEzKHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIHZhciBhbGdvcml0aG0xNCA9IGNyZWF0ZUFsZ29yaXRobTE0KHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIC8qKgogICAqIExvZ2ljYWwgYGFuZGAuIFRlc3Qgd2hldGhlciB0d28gdmFsdWVzIGFyZSBib3RoIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguYW5kKHgsIHkpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguYW5kKDIsIDQpICAgLy8gcmV0dXJucyB0cnVlCiAgICoKICAgKiAgICBhID0gWzIsIDAsIDBdCiAgICogICAgYiA9IFszLCA3LCAwXQogICAqICAgIGMgPSAwCiAgICoKICAgKiAgICBtYXRoLmFuZChhLCBiKSAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCBmYWxzZV0KICAgKiAgICBtYXRoLmFuZChhLCBjKSAgIC8vIHJldHVybnMgW2ZhbHNlLCBmYWxzZSwgZmFsc2VdCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIG5vdCwgb3IsIHhvcgogICAqCiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjaGVjawogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIHZhbHVlIHRvIGNoZWNrCiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fQogICAqICAgICAgICAgICAgUmV0dXJucyB0cnVlIHdoZW4gYm90aCBpbnB1dHMgYXJlIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuCiAgICovCgogIHZhciBhbmQgPSB0eXBlZChhbmRfbmFtZSwgewogICAgJ251bWJlciwgbnVtYmVyJzogYW5kTnVtYmVyLAogICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7CiAgICAgIHJldHVybiAoeC5yZSAhPT0gMCB8fCB4LmltICE9PSAwKSAmJiAoeS5yZSAhPT0gMCB8fCB5LmltICE9PSAwKTsKICAgIH0sCiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkgewogICAgICByZXR1cm4gIXguaXNaZXJvKCkgJiYgIXkuaXNaZXJvKCkgJiYgIXguaXNOYU4oKSAmJiAheS5pc05hTigpOwogICAgfSwKICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkgewogICAgICByZXR1cm4gYW5kKHgudmFsdWUgfHwgMCwgeS52YWx1ZSB8fCAwKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDYoeCwgeSwgYW5kLCBmYWxzZSk7CiAgICB9LAogICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCBhbmQsIHRydWUpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDIoeCwgeSwgYW5kLCBmYWxzZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgYW5kKTsKICAgIH0sCiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGFuZChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpOwogICAgfSwKICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBhbmQobWF0cml4KHgpLCB5KTsKICAgIH0sCiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYW5kKHgsIG1hdHJpeCh5KSk7CiAgICB9LAogICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHsKICAgICAgLy8gY2hlY2sgc2NhbGFyCiAgICAgIGlmIChub3QoeSkpIHsKICAgICAgICAvLyByZXR1cm4gemVybyBtYXRyaXgKICAgICAgICByZXR1cm4gemVyb3MoeC5zaXplKCksIHguc3RvcmFnZSgpKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIGFuZCwgZmFsc2UpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkgewogICAgICAvLyBjaGVjayBzY2FsYXIKICAgICAgaWYgKG5vdCh5KSkgewogICAgICAgIC8vIHJldHVybiB6ZXJvIG1hdHJpeAogICAgICAgIHJldHVybiB6ZXJvcyh4LnNpemUoKSwgeC5zdG9yYWdlKCkpOwogICAgICB9CgogICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgYW5kLCBmYWxzZSk7CiAgICB9LAogICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgLy8gY2hlY2sgc2NhbGFyCiAgICAgIGlmIChub3QoeCkpIHsKICAgICAgICAvLyByZXR1cm4gemVybyBtYXRyaXgKICAgICAgICByZXR1cm4gemVyb3MoeC5zaXplKCksIHguc3RvcmFnZSgpKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHksIHgsIGFuZCwgdHJ1ZSk7CiAgICB9LAogICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIC8vIGNoZWNrIHNjYWxhcgogICAgICBpZiAobm90KHgpKSB7CiAgICAgICAgLy8gcmV0dXJuIHplcm8gbWF0cml4CiAgICAgICAgcmV0dXJuIHplcm9zKHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBhbmQsIHRydWUpOwogICAgfSwKICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBhbmQobWF0cml4KHgpLCB5KS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGFuZCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTsKICAgIH0KICB9KTsKICByZXR1cm4gYW5kOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlLmpzCgoKCgoKCgoKdmFyIGNvbXBhcmVfbmFtZSA9ICdjb21wYXJlJzsKdmFyIGNvbXBhcmVfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ0JpZ051bWJlcicsICdGcmFjdGlvbicsICdEZW5zZU1hdHJpeCddOwp2YXIgY3JlYXRlQ29tcGFyZSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGNvbXBhcmVfbmFtZSwgY29tcGFyZV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhciwKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLAogICAgICBGcmFjdGlvbiA9IF9yZWYuRnJhY3Rpb24sCiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDsKICB2YXIgYWxnb3JpdGhtMDMgPSBjcmVhdGVBbGdvcml0aG0wMyh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICB2YXIgYWxnb3JpdGhtMDUgPSBjcmVhdGVBbGdvcml0aG0wNSh7CiAgICB0eXBlZDogdHlwZWQsCiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIKICB9KTsKICB2YXIgYWxnb3JpdGhtMTIgPSBjcmVhdGVBbGdvcml0aG0xMih7CiAgICB0eXBlZDogdHlwZWQsCiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgKICB9KTsKICB2YXIgYWxnb3JpdGhtMTMgPSBjcmVhdGVBbGdvcml0aG0xMyh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICB2YXIgYWxnb3JpdGhtMTQgPSBjcmVhdGVBbGdvcml0aG0xNCh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICAvKioKICAgKiBDb21wYXJlIHR3byB2YWx1ZXMuIFJldHVybnMgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS4KICAgKgogICAqIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgZXF1YWwgd2hlbiB0aGUgcmVsYXRpdmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHkKICAgKiBpcyBzbWFsbGVyIHRoYW4gdGhlIGNvbmZpZ3VyZWQgZXBzaWxvbi4gVGhlIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvCiAgICogY29tcGFyZSB2YWx1ZXMgc21hbGxlciB0aGFuIGFwcHJveGltYXRlbHkgMi4yMmUtMTYuCiAgICoKICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguY29tcGFyZSh4LCB5KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmNvbXBhcmUoNiwgMSkgICAgICAgICAgIC8vIHJldHVybnMgMQogICAqICAgIG1hdGguY29tcGFyZSgyLCAzKSAgICAgICAgICAgLy8gcmV0dXJucyAtMQogICAqICAgIG1hdGguY29tcGFyZSg3LCA3KSAgICAgICAgICAgLy8gcmV0dXJucyAwCiAgICogICAgbWF0aC5jb21wYXJlKCcxMCcsICcyJykgICAgICAvLyByZXR1cm5zIDEKICAgKiAgICBtYXRoLmNvbXBhcmUoJzEwMDAnLCAnMWUzJykgIC8vIHJldHVybnMgMAogICAqCiAgICogICAgY29uc3QgYSA9IG1hdGgudW5pdCgnNSBjbScpCiAgICogICAgY29uc3QgYiA9IG1hdGgudW5pdCgnNDAgbW0nKQogICAqICAgIG1hdGguY29tcGFyZShhLCBiKSAgICAgICAgICAgLy8gcmV0dXJucyAxCiAgICoKICAgKiAgICBtYXRoLmNvbXBhcmUoMiwgWzEsIDIsIDNdKSAgIC8vIHJldHVybnMgWzEsIDAsIC0xXQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBlcXVhbCwgdW5lcXVhbCwgc21hbGxlciwgc21hbGxlckVxLCBsYXJnZXIsIGxhcmdlckVxLCBjb21wYXJlTmF0dXJhbCwgY29tcGFyZVRleHQKICAgKgogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNvbXBhcmUKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gY29tcGFyZQogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQXJyYXkgfCBNYXRyaXh9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbjoKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIHdoZW4geCA+IHksIC0xIHdoZW4geCA8IHksIGFuZCAwIHdoZW4geCA9PSB5LgogICAqLwoKICB2YXIgY29tcGFyZSA9IHR5cGVkKGNvbXBhcmVfbmFtZSwgewogICAgJ2Jvb2xlYW4sIGJvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuQm9vbGVhbih4LCB5KSB7CiAgICAgIHJldHVybiB4ID09PSB5ID8gMCA6IHggPiB5ID8gMSA6IC0xOwogICAgfSwKICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7CiAgICAgIHJldHVybiBPYmplY3QodXRpbHNfbnVtYmVyWyJtIiAvKiBuZWFybHlFcXVhbCAqL10pKHgsIHksIGNvbmZpZy5lcHNpbG9uKSA/IDAgOiB4ID4geSA/IDEgOiAtMTsKICAgIH0sCiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkgewogICAgICByZXR1cm4gbmVhcmx5RXF1YWwoeCwgeSwgY29uZmlnLmVwc2lsb24pID8gbmV3IEJpZ051bWJlcigwKSA6IG5ldyBCaWdOdW1iZXIoeC5jbXAoeSkpOwogICAgfSwKICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHsKICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4LmNvbXBhcmUoeSkpOwogICAgfSwKICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycycpOwogICAgfSwKICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkgewogICAgICBpZiAoIXguZXF1YWxCYXNlKHkpKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29tcGFyZSB1bml0cyB3aXRoIGRpZmZlcmVudCBiYXNlJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiBjb21wYXJlKHgudmFsdWUsIHkudmFsdWUpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wNSh4LCB5LCBjb21wYXJlKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHksIHgsIGNvbXBhcmUsIHRydWUpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgY29tcGFyZSwgZmFsc2UpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGNvbXBhcmUpOwogICAgfSwKICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gY29tcGFyZShtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpOwogICAgfSwKICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBjb21wYXJlKG1hdHJpeCh4KSwgeSk7CiAgICB9LAogICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGNvbXBhcmUoeCwgbWF0cml4KHkpKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeCwgeSwgY29tcGFyZSwgZmFsc2UpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgY29tcGFyZSwgZmFsc2UpOwogICAgfSwKICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBjb21wYXJlLCB0cnVlKTsKICAgIH0sCiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGNvbXBhcmUsIHRydWUpOwogICAgfSwKICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGNvbXBhcmUsIGZhbHNlKS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgY29tcGFyZSwgdHJ1ZSkudmFsdWVPZigpOwogICAgfQogIH0pOwogIHJldHVybiBjb21wYXJlOwp9KTsKdmFyIGNyZWF0ZUNvbXBhcmVOdW1iZXIgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShjb21wYXJlX25hbWUsIFsndHlwZWQnLCAnY29uZmlnJ10sIGZ1bmN0aW9uIChfcmVmMikgewogIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLAogICAgICBjb25maWcgPSBfcmVmMi5jb25maWc7CiAgcmV0dXJuIHR5cGVkKGNvbXBhcmVfbmFtZSwgewogICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHsKICAgICAgcmV0dXJuIE9iamVjdCh1dGlsc19udW1iZXJbIm0iIC8qIG5lYXJseUVxdWFsICovXSkoeCwgeSwgY29uZmlnLmVwc2lsb24pID8gMCA6IHggPiB5ID8gMSA6IC0xOwogICAgfQogIH0pOwp9KTsKLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9qYXZhc2NyaXB0LW5hdHVyYWwtc29ydC9uYXR1cmFsU29ydC5qcwp2YXIgbmF0dXJhbFNvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTsKdmFyIG5hdHVyYWxTb3J0X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKG5hdHVyYWxTb3J0KTsKCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZU5hdHVyYWwuanMKCgoKdmFyIGNvbXBhcmVOYXR1cmFsX25hbWUgPSAnY29tcGFyZU5hdHVyYWwnOwp2YXIgY29tcGFyZU5hdHVyYWxfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb21wYXJlJ107CnZhciBjcmVhdGVDb21wYXJlTmF0dXJhbCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGNvbXBhcmVOYXR1cmFsX25hbWUsIGNvbXBhcmVOYXR1cmFsX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBjb21wYXJlID0gX3JlZi5jb21wYXJlOwogIHZhciBjb21wYXJlQm9vbGVhbnMgPSBjb21wYXJlLnNpZ25hdHVyZXNbJ2Jvb2xlYW4sYm9vbGVhbiddOwogIC8qKgogICAqIENvbXBhcmUgdHdvIHZhbHVlcyBvZiBhbnkgdHlwZSBpbiBhIGRldGVybWluaXN0aWMsIG5hdHVyYWwgd2F5LgogICAqCiAgICogRm9yIG51bWVyaWMgdmFsdWVzLCB0aGUgZnVuY3Rpb24gd29ya3MgdGhlIHNhbWUgYXMgYG1hdGguY29tcGFyZWAuCiAgICogRm9yIHR5cGVzIG9mIHZhbHVlcyB0aGF0IGNhbid0IGJlIGNvbXBhcmVkIG1hdGhlbWF0aWNhbGx5LAogICAqIHRoZSBmdW5jdGlvbiBjb21wYXJlcyBpbiBhIG5hdHVyYWwgd2F5LgogICAqCiAgICogRm9yIG51bWVyaWMgdmFsdWVzLCB4IGFuZCB5IGFyZSBjb25zaWRlcmVkIGVxdWFsIHdoZW4gdGhlIHJlbGF0aXZlCiAgICogZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHkgaXMgc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uCiAgICogVGhlIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvIGNvbXBhcmUgdmFsdWVzIHNtYWxsZXIgdGhhbgogICAqIGFwcHJveGltYXRlbHkgMi4yMmUtMTYuCiAgICoKICAgKiBGb3IgQ29tcGxleCBudW1iZXJzLCBmaXJzdCB0aGUgcmVhbCBwYXJ0cyBhcmUgY29tcGFyZWQuIElmIGVxdWFsLAogICAqIHRoZSBpbWFnaW5hcnkgcGFydHMgYXJlIGNvbXBhcmVkLgogICAqCiAgICogU3RyaW5ncyBhcmUgY29tcGFyZWQgd2l0aCBhIG5hdHVyYWwgc29ydGluZyBhbGdvcml0aG0sIHdoaWNoCiAgICogb3JkZXJzIHN0cmluZ3MgaW4gYSAibG9naWMiIHdheSBmb2xsb3dpbmcgc29tZSBoZXVyaXN0aWNzLgogICAqIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBmdW5jdGlvbiBgY29tcGFyZWAsIHdoaWNoIGNvbnZlcnRzIHRoZSBzdHJpbmcKICAgKiBpbnRvIGEgbnVtZXJpYyB2YWx1ZSBhbmQgY29tcGFyZXMgdGhhdC4gVGhlIGZ1bmN0aW9uIGBjb21wYXJlVGV4dGAKICAgKiBvbiB0aGUgb3RoZXIgaGFuZCBjb21wYXJlcyB0ZXh0IGxleGljYWxseS4KICAgKgogICAqIEFycmF5cyBhbmQgTWF0cmljZXMgYXJlIGNvbXBhcmVkIHZhbHVlIGJ5IHZhbHVlIHVudGlsIHRoZXJlIGlzIGFuCiAgICogdW5lcXVhbCBwYWlyIG9mIHZhbHVlcyBlbmNvdW50ZXJlZC4gT2JqZWN0cyBhcmUgY29tcGFyZWQgYnkgc29ydGVkCiAgICoga2V5cyB1bnRpbCB0aGUga2V5cyBvciB0aGVpciB2YWx1ZXMgYXJlIHVuZXF1YWwuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKHgsIHkpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoNiwgMSkgICAgICAgICAgICAgIC8vIHJldHVybnMgMQogICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoMiwgMykgICAgICAgICAgICAgIC8vIHJldHVybnMgLTEKICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKDcsIDcpICAgICAgICAgICAgICAvLyByZXR1cm5zIDAKICAgKgogICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoJzEwJywgJzInKSAgICAgICAgIC8vIHJldHVybnMgMQogICAqICAgIG1hdGguY29tcGFyZVRleHQoJzEwJywgJzInKSAgICAgICAgICAgIC8vIHJldHVybnMgLTEKICAgKiAgICBtYXRoLmNvbXBhcmUoJzEwJywgJzInKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEKICAgKgogICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoJ0Fuc3dlcjogMTAnLCAnQW5zd2VyOiAyJykgLy8gcmV0dXJucyAxCiAgICogICAgbWF0aC5jb21wYXJlVGV4dCgnQW5zd2VyOiAxMCcsICdBbnN3ZXI6IDInKSAgICAvLyByZXR1cm5zIC0xCiAgICogICAgbWF0aC5jb21wYXJlKCdBbnN3ZXI6IDEwJywgJ0Fuc3dlcjogMicpCiAgICogICAgICAgIC8vIEVycm9yOiBDYW5ub3QgY29udmVydCAiQW5zd2VyOiAxMCIgdG8gYSBudW1iZXIKICAgKgogICAqICAgIGNvbnN0IGEgPSBtYXRoLnVuaXQoJzUgY20nKQogICAqICAgIGNvbnN0IGIgPSBtYXRoLnVuaXQoJzQwIG1tJykKICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKGEsIGIpICAgICAgICAgICAgICAvLyByZXR1cm5zIDEKICAgKgogICAqICAgIGNvbnN0IGMgPSBtYXRoLmNvbXBsZXgoJzIgKyAzaScpCiAgICogICAgY29uc3QgZCA9IG1hdGguY29tcGxleCgnMiArIDRpJykKICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKGMsIGQpICAgICAgICAgICAgICAvLyByZXR1cm5zIC0xCiAgICoKICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKFsxLCAyLCA0XSwgWzEsIDIsIDNdKSAvLyByZXR1cm5zIDEKICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKFsxLCAyLCAzXSwgWzEsIDJdKSAgICAvLyByZXR1cm5zIDEKICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKFsxLCA1XSwgWzEsIDIsIDNdKSAgICAvLyByZXR1cm5zIDEKICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKFsxLCAyXSwgWzEsIDJdKSAgICAgICAvLyByZXR1cm5zIDAKICAgKgogICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoe2E6IDJ9LCB7YTogNH0pICAgICAgIC8vIHJldHVybnMgLTEKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgY29tcGFyZSwgY29tcGFyZVRleHQKICAgKgogICAqIEBwYXJhbSAgeyp9IHggRmlyc3QgdmFsdWUgdG8gY29tcGFyZQogICAqIEBwYXJhbSAgeyp9IHkgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmUKICAgKiBAcmV0dXJuIHtudW1iZXJ9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbjoKICAgKiAgICAgICAgICAgICAgICAgIDEgd2hlbiB4ID4geSwgLTEgd2hlbiB4IDwgeSwgYW5kIDAgd2hlbiB4ID09IHkuCiAgICovCgogIHZhciBjb21wYXJlTmF0dXJhbCA9IHR5cGVkKGNvbXBhcmVOYXR1cmFsX25hbWUsIHsKICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCB5KSB7CiAgICAgIHZhciB0eXBlWCA9IE9iamVjdChpc1siTSIgLyogdHlwZU9mICovXSkoeCk7CiAgICAgIHZhciB0eXBlWSA9IE9iamVjdChpc1siTSIgLyogdHlwZU9mICovXSkoeSk7CiAgICAgIHZhciBjOyAvLyBudW1lcmljIHR5cGVzCgogICAgICBpZiAoKHR5cGVYID09PSAnbnVtYmVyJyB8fCB0eXBlWCA9PT0gJ0JpZ051bWJlcicgfHwgdHlwZVggPT09ICdGcmFjdGlvbicpICYmICh0eXBlWSA9PT0gJ251bWJlcicgfHwgdHlwZVkgPT09ICdCaWdOdW1iZXInIHx8IHR5cGVZID09PSAnRnJhY3Rpb24nKSkgewogICAgICAgIGMgPSBjb21wYXJlKHgsIHkpOwoKICAgICAgICBpZiAoYy50b1N0cmluZygpICE9PSAnMCcpIHsKICAgICAgICAgIC8vIGMgY2FuIGJlIG51bWJlciwgQmlnTnVtYmVyLCBvciBGcmFjdGlvbgogICAgICAgICAgcmV0dXJuIGMgPiAwID8gMSA6IC0xOyAvLyByZXR1cm4gYSBudW1iZXIKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIG5hdHVyYWxTb3J0X2RlZmF1bHQoKSh0eXBlWCwgdHlwZVkpOwogICAgICAgIH0KICAgICAgfSAvLyBtYXRyaXggdHlwZXMKCgogICAgICBpZiAodHlwZVggPT09ICdBcnJheScgfHwgdHlwZVggPT09ICdNYXRyaXgnIHx8IHR5cGVZID09PSAnQXJyYXknIHx8IHR5cGVZID09PSAnTWF0cml4JykgewogICAgICAgIGMgPSBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeCwgeSk7CgogICAgICAgIGlmIChjICE9PSAwKSB7CiAgICAgICAgICByZXR1cm4gYzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIG5hdHVyYWxTb3J0X2RlZmF1bHQoKSh0eXBlWCwgdHlwZVkpOwogICAgICAgIH0KICAgICAgfSAvLyBpbiBjYXNlIG9mIGRpZmZlcmVudCB0eXBlcywgb3JkZXIgYnkgbmFtZSBvZiB0eXBlLCBpLmUuICdCaWdOdW1iZXInIDwgJ0NvbXBsZXgnCgoKICAgICAgaWYgKHR5cGVYICE9PSB0eXBlWSkgewogICAgICAgIHJldHVybiBuYXR1cmFsU29ydF9kZWZhdWx0KCkodHlwZVgsIHR5cGVZKTsKICAgICAgfQoKICAgICAgaWYgKHR5cGVYID09PSAnQ29tcGxleCcpIHsKICAgICAgICByZXR1cm4gY29tcGFyZUNvbXBsZXhOdW1iZXJzKHgsIHkpOwogICAgICB9CgogICAgICBpZiAodHlwZVggPT09ICdVbml0JykgewogICAgICAgIGlmICh4LmVxdWFsQmFzZSh5KSkgewogICAgICAgICAgcmV0dXJuIGNvbXBhcmVOYXR1cmFsKHgudmFsdWUsIHkudmFsdWUpOwogICAgICAgIH0gLy8gY29tcGFyZSBieSB1bml0cwoKCiAgICAgICAgcmV0dXJuIGNvbXBhcmVBcnJheXMoeC5mb3JtYXRVbml0cygpLCB5LmZvcm1hdFVuaXRzKCkpOwogICAgICB9CgogICAgICBpZiAodHlwZVggPT09ICdib29sZWFuJykgewogICAgICAgIHJldHVybiBjb21wYXJlQm9vbGVhbnMoeCwgeSk7CiAgICAgIH0KCiAgICAgIGlmICh0eXBlWCA9PT0gJ3N0cmluZycpIHsKICAgICAgICByZXR1cm4gbmF0dXJhbFNvcnRfZGVmYXVsdCgpKHgsIHkpOwogICAgICB9CgogICAgICBpZiAodHlwZVggPT09ICdPYmplY3QnKSB7CiAgICAgICAgcmV0dXJuIGNvbXBhcmVPYmplY3RzKHgsIHkpOwogICAgICB9CgogICAgICBpZiAodHlwZVggPT09ICdudWxsJykgewogICAgICAgIHJldHVybiAwOwogICAgICB9CgogICAgICBpZiAodHlwZVggPT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0gLy8gdGhpcyBzaG91bGQgbm90IG9jY3VyLi4uCgoKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5zdXBwb3J0ZWQgdHlwZSBvZiB2YWx1ZSAiJyArIHR5cGVYICsgJyInKTsKICAgIH0KICB9KTsKICAvKioKICAgKiBDb21wYXJlIG1peGVkIG1hdHJpeC9hcnJheSB0eXBlcywgYnkgY29udmVydGluZyB0byBzYW1lLXNoYXBlZCBhcnJheS4KICAgKiBUaGlzIGNvbXBhcmF0b3IgaXMgbm9uLWRldGVybWluaXN0aWMgcmVnYXJkaW5nIGlucHV0IHR5cGVzLgogICAqIEBwYXJhbSB7QXJyYXkgfCBTcGFyc2VNYXRyaXggfCBEZW5zZU1hdHJpeCB8ICp9IHgKICAgKiBAcGFyYW0ge0FycmF5IHwgU3BhcnNlTWF0cml4IHwgRGVuc2VNYXRyaXggfCAqfSB5CiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29tcGFyaXNvbiByZXN1bHQ6IC0xLCAwLCBvciAxCiAgICovCgogIGZ1bmN0aW9uIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCB5KSB7CiAgICBpZiAoT2JqZWN0KGlzWyJIIiAvKiBpc1NwYXJzZU1hdHJpeCAqL10pKHgpICYmIE9iamVjdChpc1siSCIgLyogaXNTcGFyc2VNYXRyaXggKi9dKSh5KSkgewogICAgICByZXR1cm4gY29tcGFyZUFycmF5cyh4LnRvSlNPTigpLnZhbHVlcywgeS50b0pTT04oKS52YWx1ZXMpOwogICAgfQoKICAgIGlmIChPYmplY3QoaXNbIkgiIC8qIGlzU3BhcnNlTWF0cml4ICovXSkoeCkpIHsKICAgICAgLy8gbm90ZTogY29udmVydCB0byBhcnJheSBpcyBleHBlbnNpdmUKICAgICAgcmV0dXJuIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LnRvQXJyYXkoKSwgeSk7CiAgICB9CgogICAgaWYgKE9iamVjdChpc1siSCIgLyogaXNTcGFyc2VNYXRyaXggKi9dKSh5KSkgewogICAgICAvLyBub3RlOiBjb252ZXJ0IHRvIGFycmF5IGlzIGV4cGVuc2l2ZQogICAgICByZXR1cm4gY29tcGFyZU1hdHJpY2VzQW5kQXJyYXlzKHgsIHkudG9BcnJheSgpKTsKICAgIH0gLy8gY29udmVydCBEZW5zZUFycmF5IGludG8gQXJyYXkKCgogICAgaWYgKE9iamVjdChpc1sibiIgLyogaXNEZW5zZU1hdHJpeCAqL10pKHgpKSB7CiAgICAgIHJldHVybiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeC50b0pTT04oKS5kYXRhLCB5KTsKICAgIH0KCiAgICBpZiAoT2JqZWN0KGlzWyJuIiAvKiBpc0RlbnNlTWF0cml4ICovXSkoeSkpIHsKICAgICAgcmV0dXJuIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCB5LnRvSlNPTigpLmRhdGEpOwogICAgfSAvLyBjb252ZXJ0IHNjYWxhcnMgdG8gYXJyYXkKCgogICAgaWYgKCFBcnJheS5pc0FycmF5KHgpKSB7CiAgICAgIHJldHVybiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoW3hdLCB5KTsKICAgIH0KCiAgICBpZiAoIUFycmF5LmlzQXJyYXkoeSkpIHsKICAgICAgcmV0dXJuIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCBbeV0pOwogICAgfQoKICAgIHJldHVybiBjb21wYXJlQXJyYXlzKHgsIHkpOwogIH0KICAvKioKICAgKiBDb21wYXJlIHR3byBBcnJheXMKICAgKgogICAqIC0gRmlyc3QsIGNvbXBhcmVzIHZhbHVlIGJ5IHZhbHVlCiAgICogLSBOZXh0LCBpZiBhbGwgY29ycmVzcG9uZGluZyB2YWx1ZXMgYXJlIGVxdWFsLAogICAqICAgbG9vayBhdCB0aGUgbGVuZ3RoOiBsb25nZXN0IGFycmF5IHdpbGwgYmUgY29uc2lkZXJlZCBsYXJnZXN0CiAgICoKICAgKiBAcGFyYW0ge0FycmF5fSB4CiAgICogQHBhcmFtIHtBcnJheX0geQogICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbXBhcmlzb24gcmVzdWx0OiAtMSwgMCwgb3IgMQogICAqLwoKCiAgZnVuY3Rpb24gY29tcGFyZUFycmF5cyh4LCB5KSB7CiAgICAvLyBjb21wYXJlIGVhY2ggdmFsdWUKICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IE1hdGgubWluKHgubGVuZ3RoLCB5Lmxlbmd0aCk7IGkgPCBpaTsgaSsrKSB7CiAgICAgIHZhciB2ID0gY29tcGFyZU5hdHVyYWwoeFtpXSwgeVtpXSk7CgogICAgICBpZiAodiAhPT0gMCkgewogICAgICAgIHJldHVybiB2OwogICAgICB9CiAgICB9IC8vIGNvbXBhcmUgdGhlIHNpemUgb2YgdGhlIGFycmF5cwoKCiAgICBpZiAoeC5sZW5ndGggPiB5Lmxlbmd0aCkgewogICAgICByZXR1cm4gMTsKICAgIH0KCiAgICBpZiAoeC5sZW5ndGggPCB5Lmxlbmd0aCkgewogICAgICByZXR1cm4gLTE7CiAgICB9IC8vIGJvdGggQXJyYXlzIGhhdmUgZXF1YWwgc2l6ZSBhbmQgY29udGVudAoKCiAgICByZXR1cm4gMDsKICB9CiAgLyoqCiAgICogQ29tcGFyZSB0d28gb2JqZWN0cwogICAqCiAgICogLSBGaXJzdCwgY29tcGFyZSBzb3J0ZWQgcHJvcGVydHkgbmFtZXMKICAgKiAtIE5leHQsIGNvbXBhcmUgdGhlIHByb3BlcnR5IHZhbHVlcwogICAqCiAgICogQHBhcmFtIHtPYmplY3R9IHgKICAgKiBAcGFyYW0ge09iamVjdH0geQogICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbXBhcmlzb24gcmVzdWx0OiAtMSwgMCwgb3IgMQogICAqLwoKCiAgZnVuY3Rpb24gY29tcGFyZU9iamVjdHMoeCwgeSkgewogICAgdmFyIGtleXNYID0gT2JqZWN0LmtleXMoeCk7CiAgICB2YXIga2V5c1kgPSBPYmplY3Qua2V5cyh5KTsgLy8gY29tcGFyZSBrZXlzCgogICAga2V5c1guc29ydChuYXR1cmFsU29ydF9kZWZhdWx0LmEpOwogICAga2V5c1kuc29ydChuYXR1cmFsU29ydF9kZWZhdWx0LmEpOwogICAgdmFyIGMgPSBjb21wYXJlQXJyYXlzKGtleXNYLCBrZXlzWSk7CgogICAgaWYgKGMgIT09IDApIHsKICAgICAgcmV0dXJuIGM7CiAgICB9IC8vIGNvbXBhcmUgdmFsdWVzCgoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c1gubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIHYgPSBjb21wYXJlTmF0dXJhbCh4W2tleXNYW2ldXSwgeVtrZXlzWVtpXV0pOwoKICAgICAgaWYgKHYgIT09IDApIHsKICAgICAgICByZXR1cm4gdjsKICAgICAgfQogICAgfQoKICAgIHJldHVybiAwOwogIH0KCiAgcmV0dXJuIGNvbXBhcmVOYXR1cmFsOwp9KTsKLyoqCiAqIENvbXBhcmUgdHdvIGNvbXBsZXggbnVtYmVycywgYHhgIGFuZCBgeWA6CiAqCiAqIC0gRmlyc3QsIGNvbXBhcmUgdGhlIHJlYWwgdmFsdWVzIG9mIGB4YCBhbmQgYHlgCiAqIC0gSWYgZXF1YWwsIGNvbXBhcmUgdGhlIGltYWdpbmFyeSB2YWx1ZXMgb2YgYHhgIGFuZCBgeWAKICoKICogQHBhcmFtcyB7Q29tcGxleH0geAogKiBAcGFyYW1zIHtDb21wbGV4fSB5CiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbXBhcmlzb24gcmVzdWx0OiAtMSwgMCwgb3IgMQogKi8KCmZ1bmN0aW9uIGNvbXBhcmVDb21wbGV4TnVtYmVycyh4LCB5KSB7CiAgaWYgKHgucmUgPiB5LnJlKSB7CiAgICByZXR1cm4gMTsKICB9CgogIGlmICh4LnJlIDwgeS5yZSkgewogICAgcmV0dXJuIC0xOwogIH0KCiAgaWYgKHguaW0gPiB5LmltKSB7CiAgICByZXR1cm4gMTsKICB9CgogIGlmICh4LmltIDwgeS5pbSkgewogICAgcmV0dXJuIC0xOwogIH0KCiAgcmV0dXJuIDA7Cn0KLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlVGV4dC5qcwoKCgoKdmFyIGNvbXBhcmVUZXh0X25hbWUgPSAnY29tcGFyZVRleHQnOwp2YXIgY29tcGFyZVRleHRfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnXTsKdmFyIGNyZWF0ZUNvbXBhcmVUZXh0ID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoY29tcGFyZVRleHRfbmFtZSwgY29tcGFyZVRleHRfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4OwogIHZhciBhbGdvcml0aG0xMyA9IGNyZWF0ZUFsZ29yaXRobTEzKHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIHZhciBhbGdvcml0aG0xNCA9IGNyZWF0ZUFsZ29yaXRobTE0KHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIC8qKgogICAqIENvbXBhcmUgdHdvIHN0cmluZ3MgbGV4aWNhbGx5LiBDb21wYXJpc29uIGlzIGNhc2Ugc2Vuc2l0aXZlLgogICAqIFJldHVybnMgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS4KICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmNvbXBhcmVUZXh0KHgsIHkpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguY29tcGFyZVRleHQoJ0InLCAnQScpICAgICAvLyByZXR1cm5zIDEKICAgKiAgICBtYXRoLmNvbXBhcmVUZXh0KCcyJywgJzEwJykgICAgLy8gcmV0dXJucyAxCiAgICogICAgbWF0aC5jb21wYXJlKCcyJywgJzEwJykgICAgICAgIC8vIHJldHVybnMgLTEKICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKCcyJywgJzEwJykgLy8gcmV0dXJucyAtMQogICAqCiAgICogICAgbWF0aC5jb21wYXJlVGV4dCgnQicsIFsnQScsICdCJywgJ0MnXSkgLy8gcmV0dXJucyBbMSwgMCwgLTFdCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGVxdWFsLCBlcXVhbFRleHQsIGNvbXBhcmUsIGNvbXBhcmVOYXR1cmFsCiAgICoKICAgKiBAcGFyYW0gIHtzdHJpbmcgfCBBcnJheSB8IERlbnNlTWF0cml4fSB4IEZpcnN0IHN0cmluZyB0byBjb21wYXJlCiAgICogQHBhcmFtICB7c3RyaW5nIHwgQXJyYXkgfCBEZW5zZU1hdHJpeH0geSBTZWNvbmQgc3RyaW5nIHRvIGNvbXBhcmUKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBBcnJheSB8IERlbnNlTWF0cml4fSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb246CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS4KICAgKi8KCiAgdmFyIGNvbXBhcmVUZXh0ID0gdHlwZWQoY29tcGFyZVRleHRfbmFtZSwgewogICAgJ2FueSwgYW55JzogdXRpbHNfc3RyaW5nWyJhIiAvKiBjb21wYXJlVGV4dCAqL10sCiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCB1dGlsc19zdHJpbmdbImEiIC8qIGNvbXBhcmVUZXh0ICovXSk7CiAgICB9LAogICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBjb21wYXJlVGV4dChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpOwogICAgfSwKICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBjb21wYXJlVGV4dChtYXRyaXgoeCksIHkpOwogICAgfSwKICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBjb21wYXJlVGV4dCh4LCBtYXRyaXgoeSkpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgdXRpbHNfc3RyaW5nWyJhIiAvKiBjb21wYXJlVGV4dCAqL10sIGZhbHNlKTsKICAgIH0sCiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIHV0aWxzX3N0cmluZ1siYSIgLyogY29tcGFyZVRleHQgKi9dLCB0cnVlKTsKICAgIH0sCiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCB1dGlsc19zdHJpbmdbImEiIC8qIGNvbXBhcmVUZXh0ICovXSwgZmFsc2UpLnZhbHVlT2YoKTsKICAgIH0sCiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCB1dGlsc19zdHJpbmdbImEiIC8qIGNvbXBhcmVUZXh0ICovXSwgdHJ1ZSkudmFsdWVPZigpOwogICAgfQogIH0pOwogIHJldHVybiBjb21wYXJlVGV4dDsKfSk7CnZhciBjcmVhdGVDb21wYXJlVGV4dE51bWJlciA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGNvbXBhcmVUZXh0X25hbWUsIFsndHlwZWQnXSwgZnVuY3Rpb24gKF9yZWYyKSB7CiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQ7CiAgcmV0dXJuIHR5cGVkKGNvbXBhcmVUZXh0X25hbWUsIHsKICAgICdhbnksIGFueSc6IHV0aWxzX3N0cmluZ1siYSIgLyogY29tcGFyZVRleHQgKi9dCiAgfSk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsLmpzCgoKCgoKCnZhciBlcXVhbF9uYW1lID0gJ2VxdWFsJzsKdmFyIGVxdWFsX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ0RlbnNlTWF0cml4J107CnZhciBjcmVhdGVFcXVhbCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGVxdWFsX25hbWUsIGVxdWFsX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCwKICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLAogICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7CiAgdmFyIGFsZ29yaXRobTAzID0gY3JlYXRlQWxnb3JpdGhtMDMoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgdmFyIGFsZ29yaXRobTA3ID0gY3JlYXRlQWxnb3JpdGhtMDcoewogICAgdHlwZWQ6IHR5cGVkLAogICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4CiAgfSk7CiAgdmFyIGFsZ29yaXRobTEyID0gY3JlYXRlQWxnb3JpdGhtMTIoewogICAgdHlwZWQ6IHR5cGVkLAogICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4CiAgfSk7CiAgdmFyIGFsZ29yaXRobTEzID0gY3JlYXRlQWxnb3JpdGhtMTMoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgdmFyIGFsZ29yaXRobTE0ID0gY3JlYXRlQWxnb3JpdGhtMTQoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgLyoqCiAgICogVGVzdCB3aGV0aGVyIHR3byB2YWx1ZXMgYXJlIGVxdWFsLgogICAqCiAgICogVGhlIGZ1bmN0aW9uIHRlc3RzIHdoZXRoZXIgdGhlIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5IGlzCiAgICogc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0bwogICAqIGNvbXBhcmUgdmFsdWVzIHNtYWxsZXIgdGhhbiBhcHByb3hpbWF0ZWx5IDIuMjJlLTE2LgogICAqCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKiBJbiBjYXNlIG9mIGNvbXBsZXggbnVtYmVycywgeC5yZSBtdXN0IGVxdWFsIHkucmUsIGFuZCB4LmltIG11c3QgZXF1YWwgeS5pbS4KICAgKgogICAqIFZhbHVlcyBgbnVsbGAgYW5kIGB1bmRlZmluZWRgIGFyZSBjb21wYXJlZCBzdHJpY3RseSwgdGh1cyBgbnVsbGAgaXMgb25seQogICAqIGVxdWFsIHRvIGBudWxsYCBhbmQgbm90aGluZyBlbHNlLCBhbmQgYHVuZGVmaW5lZGAgaXMgb25seSBlcXVhbCB0bwogICAqIGB1bmRlZmluZWRgIGFuZCBub3RoaW5nIGVsc2UuIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguZXF1YWwoeCwgeSkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5lcXVhbCgyICsgMiwgMykgICAgICAgICAvLyByZXR1cm5zIGZhbHNlCiAgICogICAgbWF0aC5lcXVhbCgyICsgMiwgNCkgICAgICAgICAvLyByZXR1cm5zIHRydWUKICAgKgogICAqICAgIGNvbnN0IGEgPSBtYXRoLnVuaXQoJzUwIGNtJykKICAgKiAgICBjb25zdCBiID0gbWF0aC51bml0KCc1IG0nKQogICAqICAgIG1hdGguZXF1YWwoYSwgYikgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlCiAgICoKICAgKiAgICBjb25zdCBjID0gWzIsIDUsIDFdCiAgICogICAgY29uc3QgZCA9IFsyLCA3LCAxXQogICAqCiAgICogICAgbWF0aC5lcXVhbChjLCBkKSAgICAgICAgICAgICAvLyByZXR1cm5zIFt0cnVlLCBmYWxzZSwgdHJ1ZV0KICAgKiAgICBtYXRoLmRlZXBFcXVhbChjLCBkKSAgICAgICAgIC8vIHJldHVybnMgZmFsc2UKICAgKgogICAqICAgIG1hdGguZXF1YWwoIjEwMDAiLCAiMWUzIikgICAgLy8gcmV0dXJucyB0cnVlCiAgICogICAgbWF0aC5lcXVhbCgwLCBudWxsKSAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIHVuZXF1YWwsIHNtYWxsZXIsIHNtYWxsZXJFcSwgbGFyZ2VyLCBsYXJnZXJFcSwgY29tcGFyZSwgZGVlcEVxdWFsLCBlcXVhbFRleHQKICAgKgogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IGJvb2xlYW4gfCBDb21wbGV4IHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNvbXBhcmUKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBib29sZWFuIHwgQ29tcGxleCB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gY29tcGFyZQogICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGNvbXBhcmVkIHZhbHVlcyBhcmUgZXF1YWwsIGVsc2UgcmV0dXJucyBmYWxzZQogICAqLwoKICB2YXIgZXF1YWwgPSB0eXBlZChlcXVhbF9uYW1lLCB7CiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkgewogICAgICAvLyBzdHJpY3QgZXF1YWxpdHkgZm9yIG51bGwgYW5kIHVuZGVmaW5lZD8KICAgICAgaWYgKHggPT09IG51bGwpIHsKICAgICAgICByZXR1cm4geSA9PT0gbnVsbDsKICAgICAgfQoKICAgICAgaWYgKHkgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4geCA9PT0gbnVsbDsKICAgICAgfQoKICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgewogICAgICAgIHJldHVybiB5ID09PSB1bmRlZmluZWQ7CiAgICAgIH0KCiAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsKICAgICAgICByZXR1cm4geCA9PT0gdW5kZWZpbmVkOwogICAgICB9CgogICAgICByZXR1cm4gZXF1YWxTY2FsYXIoeCwgeSk7CiAgICB9LAogICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIGVxdWFsU2NhbGFyKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHksIHgsIGVxdWFsU2NhbGFyLCB0cnVlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIGVxdWFsU2NhbGFyLCBmYWxzZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgZXF1YWxTY2FsYXIpOwogICAgfSwKICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gZXF1YWwobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTsKICAgIH0sCiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gZXF1YWwobWF0cml4KHgpLCB5KTsKICAgIH0sCiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gZXF1YWwoeCwgbWF0cml4KHkpKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeCwgeSwgZXF1YWxTY2FsYXIsIGZhbHNlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGVxdWFsU2NhbGFyLCBmYWxzZSk7CiAgICB9LAogICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIGVxdWFsU2NhbGFyLCB0cnVlKTsKICAgIH0sCiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGVxdWFsU2NhbGFyLCB0cnVlKTsKICAgIH0sCiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBlcXVhbFNjYWxhciwgZmFsc2UpLnZhbHVlT2YoKTsKICAgIH0sCiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSkudmFsdWVPZigpOwogICAgfQogIH0pOwogIHJldHVybiBlcXVhbDsKfSk7CnZhciBjcmVhdGVFcXVhbE51bWJlciA9IE9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoZXF1YWxfbmFtZSwgWyd0eXBlZCcsICdlcXVhbFNjYWxhciddLCBmdW5jdGlvbiAoX3JlZjIpIHsKICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCwKICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmMi5lcXVhbFNjYWxhcjsKICByZXR1cm4gdHlwZWQoZXF1YWxfbmFtZSwgewogICAgJ2FueSwgYW55JzogZnVuY3Rpb24gYW55QW55KHgsIHkpIHsKICAgICAgLy8gc3RyaWN0IGVxdWFsaXR5IGZvciBudWxsIGFuZCB1bmRlZmluZWQ/CiAgICAgIGlmICh4ID09PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHkgPT09IG51bGw7CiAgICAgIH0KCiAgICAgIGlmICh5ID09PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHggPT09IG51bGw7CiAgICAgIH0KCiAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHsKICAgICAgICByZXR1cm4geSA9PT0gdW5kZWZpbmVkOwogICAgICB9CgogICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgcmV0dXJuIHggPT09IHVuZGVmaW5lZDsKICAgICAgfQoKICAgICAgcmV0dXJuIGVxdWFsU2NhbGFyKHgsIHkpOwogICAgfQogIH0pOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbFRleHQuanMKCnZhciBlcXVhbFRleHRfbmFtZSA9ICdlcXVhbFRleHQnOwp2YXIgZXF1YWxUZXh0X2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29tcGFyZVRleHQnLCAnaXNaZXJvJ107CnZhciBjcmVhdGVFcXVhbFRleHQgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShlcXVhbFRleHRfbmFtZSwgZXF1YWxUZXh0X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBjb21wYXJlVGV4dCA9IF9yZWYuY29tcGFyZVRleHQsCiAgICAgIGlzWmVybyA9IF9yZWYuaXNaZXJvOwoKICAvKioKICAgKiBDaGVjayBlcXVhbGl0eSBvZiB0d28gc3RyaW5ncy4gQ29tcGFyaXNvbiBpcyBjYXNlIHNlbnNpdGl2ZS4KICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmVxdWFsVGV4dCh4LCB5KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmVxdWFsVGV4dCgnSGVsbG8nLCAnSGVsbG8nKSAgICAgLy8gcmV0dXJucyB0cnVlCiAgICogICAgbWF0aC5lcXVhbFRleHQoJ2EnLCAnQScpICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2UKICAgKiAgICBtYXRoLmVxdWFsKCcyZTMnLCAnMjAwMCcpICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlCiAgICogICAgbWF0aC5lcXVhbFRleHQoJzJlMycsICcyMDAwJykgICAgICAgIC8vIHJldHVybnMgZmFsc2UKICAgKgogICAqICAgIG1hdGguZXF1YWxUZXh0KCdCJywgWydBJywgJ0InLCAnQyddKSAvLyByZXR1cm5zIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGVxdWFsLCBjb21wYXJlVGV4dCwgY29tcGFyZSwgY29tcGFyZU5hdHVyYWwKICAgKgogICAqIEBwYXJhbSAge3N0cmluZyB8IEFycmF5IHwgRGVuc2VNYXRyaXh9IHggRmlyc3Qgc3RyaW5nIHRvIGNvbXBhcmUKICAgKiBAcGFyYW0gIHtzdHJpbmcgfCBBcnJheSB8IERlbnNlTWF0cml4fSB5IFNlY29uZCBzdHJpbmcgdG8gY29tcGFyZQogICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgRGVuc2VNYXRyaXh9IFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSBlcXVhbCwgYW5kIGZhbHNlIGlmIG5vdC4KICAgKi8KICByZXR1cm4gdHlwZWQoZXF1YWxUZXh0X25hbWUsIHsKICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCB5KSB7CiAgICAgIHJldHVybiBpc1plcm8oY29tcGFyZVRleHQoeCwgeSkpOwogICAgfQogIH0pOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vcmVsYXRpb25hbC9zbWFsbGVyLmpzCgoKCgoKCgoKdmFyIHNtYWxsZXJfbmFtZSA9ICdzbWFsbGVyJzsKdmFyIHNtYWxsZXJfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnbWF0cml4JywgJ0RlbnNlTWF0cml4J107CnZhciBjcmVhdGVTbWFsbGVyID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoc21hbGxlcl9uYW1lLCBzbWFsbGVyX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBjb25maWcgPSBfcmVmLmNvbmZpZywKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDsKICB2YXIgYWxnb3JpdGhtMDMgPSBjcmVhdGVBbGdvcml0aG0wMyh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICB2YXIgYWxnb3JpdGhtMDcgPSBjcmVhdGVBbGdvcml0aG0wNyh7CiAgICB0eXBlZDogdHlwZWQsCiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgKICB9KTsKICB2YXIgYWxnb3JpdGhtMTIgPSBjcmVhdGVBbGdvcml0aG0xMih7CiAgICB0eXBlZDogdHlwZWQsCiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgKICB9KTsKICB2YXIgYWxnb3JpdGhtMTMgPSBjcmVhdGVBbGdvcml0aG0xMyh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICB2YXIgYWxnb3JpdGhtMTQgPSBjcmVhdGVBbGdvcml0aG0xNCh7CiAgICB0eXBlZDogdHlwZWQKICB9KTsKICAvKioKICAgKiBUZXN0IHdoZXRoZXIgdmFsdWUgeCBpcyBzbWFsbGVyIHRoYW4geS4KICAgKgogICAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiB4IGlzIHNtYWxsZXIgdGhhbiB5IGFuZCB0aGUgcmVsYXRpdmUKICAgKiBkaWZmZXJlbmNlIGJldHdlZW4geCBhbmQgeSBpcyBzbWFsbGVyIHRoYW4gdGhlIGNvbmZpZ3VyZWQgZXBzaWxvbi4gVGhlCiAgICogZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMgc21hbGxlciB0aGFuIGFwcHJveGltYXRlbHkgMi4yMmUtMTYuCiAgICoKICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguc21hbGxlcih4LCB5KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLnNtYWxsZXIoMiwgMykgICAgICAgICAgICAvLyByZXR1cm5zIHRydWUKICAgKiAgICBtYXRoLnNtYWxsZXIoNSwgMiAqIDIpICAgICAgICAvLyByZXR1cm5zIGZhbHNlCiAgICoKICAgKiAgICBjb25zdCBhID0gbWF0aC51bml0KCc1IGNtJykKICAgKiAgICBjb25zdCBiID0gbWF0aC51bml0KCcyIGluY2gnKQogICAqICAgIG1hdGguc21hbGxlcihhLCBiKSAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBlcXVhbCwgdW5lcXVhbCwgc21hbGxlckVxLCBzbWFsbGVyLCBzbWFsbGVyRXEsIGNvbXBhcmUKICAgKgogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbiB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlCiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlCiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgeCBpcyBzbWFsbGVyIHRoYW4geSwgZWxzZSByZXR1cm5zIGZhbHNlCiAgICovCgogIHZhciBzbWFsbGVyID0gdHlwZWQoc21hbGxlcl9uYW1lLCB7CiAgICAnYm9vbGVhbiwgYm9vbGVhbic6IGZ1bmN0aW9uIGJvb2xlYW5Cb29sZWFuKHgsIHkpIHsKICAgICAgcmV0dXJuIHggPCB5OwogICAgfSwKICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7CiAgICAgIHJldHVybiB4IDwgeSAmJiAhT2JqZWN0KHV0aWxzX251bWJlclsibSIgLyogbmVhcmx5RXF1YWwgKi9dKSh4LCB5LCBjb25maWcuZXBzaWxvbik7CiAgICB9LAogICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHsKICAgICAgcmV0dXJuIHgubHQoeSkgJiYgIW5lYXJseUVxdWFsKHgsIHksIGNvbmZpZy5lcHNpbG9uKTsKICAgIH0sCiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7CiAgICAgIHJldHVybiB4LmNvbXBhcmUoeSkgPT09IC0xOwogICAgfSwKICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoeCwgeSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBvcmRlcmluZyByZWxhdGlvbiBpcyBkZWZpbmVkIGZvciBjb21wbGV4IG51bWJlcnMnKTsKICAgIH0sCiAgICAnVW5pdCwgVW5pdCc6IGZ1bmN0aW9uIFVuaXRVbml0KHgsIHkpIHsKICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBhcmUgdW5pdHMgd2l0aCBkaWZmZXJlbnQgYmFzZScpOwogICAgICB9CgogICAgICByZXR1cm4gc21hbGxlcih4LnZhbHVlLCB5LnZhbHVlKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgc21hbGxlcik7CiAgICB9LAogICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBzbWFsbGVyLCB0cnVlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIHNtYWxsZXIsIGZhbHNlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBzbWFsbGVyKTsKICAgIH0sCiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIHNtYWxsZXIobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTsKICAgIH0sCiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gc21hbGxlcihtYXRyaXgoeCksIHkpOwogICAgfSwKICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBzbWFsbGVyKHgsIG1hdHJpeCh5KSk7CiAgICB9LAogICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIHNtYWxsZXIsIGZhbHNlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIHNtYWxsZXIsIGZhbHNlKTsKICAgIH0sCiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgc21hbGxlciwgdHJ1ZSk7CiAgICB9LAogICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBzbWFsbGVyLCB0cnVlKTsKICAgIH0sCiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBzbWFsbGVyLCBmYWxzZSkudmFsdWVPZigpOwogICAgfSwKICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIHNtYWxsZXIsIHRydWUpLnZhbHVlT2YoKTsKICAgIH0KICB9KTsKICByZXR1cm4gc21hbGxlcjsKfSk7CnZhciBjcmVhdGVTbWFsbGVyTnVtYmVyID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoc21hbGxlcl9uYW1lLCBbJ3R5cGVkJywgJ2NvbmZpZyddLCBmdW5jdGlvbiAoX3JlZjIpIHsKICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCwKICAgICAgY29uZmlnID0gX3JlZjIuY29uZmlnOwogIHJldHVybiB0eXBlZChzbWFsbGVyX25hbWUsIHsKICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7CiAgICAgIHJldHVybiB4IDwgeSAmJiAhT2JqZWN0KHV0aWxzX251bWJlclsibSIgLyogbmVhcmx5RXF1YWwgKi9dKSh4LCB5LCBjb25maWcuZXBzaWxvbik7CiAgICB9CiAgfSk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9yZWxhdGlvbmFsL3NtYWxsZXJFcS5qcwoKCgoKCgoKCnZhciBzbWFsbGVyRXFfbmFtZSA9ICdzbWFsbGVyRXEnOwp2YXIgc21hbGxlckVxX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdHJpeCcsICdEZW5zZU1hdHJpeCddOwp2YXIgY3JlYXRlU21hbGxlckVxID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoc21hbGxlckVxX25hbWUsIHNtYWxsZXJFcV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LAogICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7CiAgdmFyIGFsZ29yaXRobTAzID0gY3JlYXRlQWxnb3JpdGhtMDMoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgdmFyIGFsZ29yaXRobTA3ID0gY3JlYXRlQWxnb3JpdGhtMDcoewogICAgdHlwZWQ6IHR5cGVkLAogICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4CiAgfSk7CiAgdmFyIGFsZ29yaXRobTEyID0gY3JlYXRlQWxnb3JpdGhtMTIoewogICAgdHlwZWQ6IHR5cGVkLAogICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4CiAgfSk7CiAgdmFyIGFsZ29yaXRobTEzID0gY3JlYXRlQWxnb3JpdGhtMTMoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgdmFyIGFsZ29yaXRobTE0ID0gY3JlYXRlQWxnb3JpdGhtMTQoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgLyoqCiAgICogVGVzdCB3aGV0aGVyIHZhbHVlIHggaXMgc21hbGxlciBvciBlcXVhbCB0byB5LgogICAqCiAgICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHggaXMgc21hbGxlciB0aGFuIHkgb3IgdGhlIHJlbGF0aXZlCiAgICogZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHkgaXMgc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZQogICAqIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvIGNvbXBhcmUgdmFsdWVzIHNtYWxsZXIgdGhhbiBhcHByb3hpbWF0ZWx5IDIuMjJlLTE2LgogICAqCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKiBTdHJpbmdzIGFyZSBjb21wYXJlZCBieSB0aGVpciBudW1lcmljYWwgdmFsdWUuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLnNtYWxsZXJFcSh4LCB5KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLnNtYWxsZXIoMSArIDIsIDMpICAgICAgICAvLyByZXR1cm5zIGZhbHNlCiAgICogICAgbWF0aC5zbWFsbGVyRXEoMSArIDIsIDMpICAgICAgLy8gcmV0dXJucyB0cnVlCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGVxdWFsLCB1bmVxdWFsLCBzbWFsbGVyLCBsYXJnZXIsIGxhcmdlckVxLCBjb21wYXJlCiAgICoKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gY29tcGFyZQogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbiB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gY29tcGFyZQogICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIHggaXMgc21hbGxlciB0aGFuIHksIGVsc2UgcmV0dXJucyBmYWxzZQogICAqLwoKICB2YXIgc21hbGxlckVxID0gdHlwZWQoc21hbGxlckVxX25hbWUsIHsKICAgICdib29sZWFuLCBib29sZWFuJzogZnVuY3Rpb24gYm9vbGVhbkJvb2xlYW4oeCwgeSkgewogICAgICByZXR1cm4geCA8PSB5OwogICAgfSwKICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7CiAgICAgIHJldHVybiB4IDw9IHkgfHwgT2JqZWN0KHV0aWxzX251bWJlclsibSIgLyogbmVhcmx5RXF1YWwgKi9dKSh4LCB5LCBjb25maWcuZXBzaWxvbik7CiAgICB9LAogICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHsKICAgICAgcmV0dXJuIHgubHRlKHkpIHx8IG5lYXJseUVxdWFsKHgsIHksIGNvbmZpZy5lcHNpbG9uKTsKICAgIH0sCiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7CiAgICAgIHJldHVybiB4LmNvbXBhcmUoeSkgIT09IDE7CiAgICB9LAogICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCgpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gb3JkZXJpbmcgcmVsYXRpb24gaXMgZGVmaW5lZCBmb3IgY29tcGxleCBudW1iZXJzJyk7CiAgICB9LAogICAgJ1VuaXQsIFVuaXQnOiBmdW5jdGlvbiBVbml0VW5pdCh4LCB5KSB7CiAgICAgIGlmICgheC5lcXVhbEJhc2UoeSkpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb21wYXJlIHVuaXRzIHdpdGggZGlmZmVyZW50IGJhc2UnKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHNtYWxsZXJFcSh4LnZhbHVlLCB5LnZhbHVlKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgc21hbGxlckVxKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHksIHgsIHNtYWxsZXJFcSwgdHJ1ZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBzbWFsbGVyRXEsIGZhbHNlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBzbWFsbGVyRXEpOwogICAgfSwKICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gc21hbGxlckVxKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIHNtYWxsZXJFcShtYXRyaXgoeCksIHkpOwogICAgfSwKICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBzbWFsbGVyRXEoeCwgbWF0cml4KHkpKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeCwgeSwgc21hbGxlckVxLCBmYWxzZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBzbWFsbGVyRXEsIGZhbHNlKTsKICAgIH0sCiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgc21hbGxlckVxLCB0cnVlKTsKICAgIH0sCiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIHNtYWxsZXJFcSwgdHJ1ZSk7CiAgICB9LAogICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgc21hbGxlckVxLCBmYWxzZSkudmFsdWVPZigpOwogICAgfSwKICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIHNtYWxsZXJFcSwgdHJ1ZSkudmFsdWVPZigpOwogICAgfQogIH0pOwogIHJldHVybiBzbWFsbGVyRXE7Cn0pOwp2YXIgY3JlYXRlU21hbGxlckVxTnVtYmVyID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoc21hbGxlckVxX25hbWUsIFsndHlwZWQnLCAnY29uZmlnJ10sIGZ1bmN0aW9uIChfcmVmMikgewogIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLAogICAgICBjb25maWcgPSBfcmVmMi5jb25maWc7CiAgcmV0dXJuIHR5cGVkKHNtYWxsZXJFcV9uYW1lLCB7CiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkgewogICAgICByZXR1cm4geCA8PSB5IHx8IE9iamVjdCh1dGlsc19udW1iZXJbIm0iIC8qIG5lYXJseUVxdWFsICovXSkoeCwgeSwgY29uZmlnLmVwc2lsb24pOwogICAgfQogIH0pOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vcmVsYXRpb25hbC9sYXJnZXIuanMKCgoKCgoKCgp2YXIgbGFyZ2VyX25hbWUgPSAnbGFyZ2VyJzsKdmFyIGxhcmdlcl9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTsKdmFyIGNyZWF0ZUxhcmdlciA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGxhcmdlcl9uYW1lLCBsYXJnZXJfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCwKICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4OwogIHZhciBhbGdvcml0aG0wMyA9IGNyZWF0ZUFsZ29yaXRobTAzKHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIHZhciBhbGdvcml0aG0wNyA9IGNyZWF0ZUFsZ29yaXRobTA3KHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeAogIH0pOwogIHZhciBhbGdvcml0aG0xMiA9IGNyZWF0ZUFsZ29yaXRobTEyKHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeAogIH0pOwogIHZhciBhbGdvcml0aG0xMyA9IGNyZWF0ZUFsZ29yaXRobTEzKHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIHZhciBhbGdvcml0aG0xNCA9IGNyZWF0ZUFsZ29yaXRobTE0KHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIC8qKgogICAqIFRlc3Qgd2hldGhlciB2YWx1ZSB4IGlzIGxhcmdlciB0aGFuIHkuCiAgICoKICAgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4geCBpcyBsYXJnZXIgdGhhbiB5IGFuZCB0aGUgcmVsYXRpdmUKICAgKiBkaWZmZXJlbmNlIGJldHdlZW4geCBhbmQgeSBpcyBsYXJnZXIgdGhhbiB0aGUgY29uZmlndXJlZCBlcHNpbG9uLiBUaGUKICAgKiBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0byBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW4gYXBwcm94aW1hdGVseSAyLjIyZS0xNi4KICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICogU3RyaW5ncyBhcmUgY29tcGFyZWQgYnkgdGhlaXIgbnVtZXJpY2FsIHZhbHVlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5sYXJnZXIoeCwgeSkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5sYXJnZXIoMiwgMykgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZQogICAqICAgIG1hdGgubGFyZ2VyKDUsIDIgKyAyKSAgICAgICAgIC8vIHJldHVybnMgdHJ1ZQogICAqCiAgICogICAgY29uc3QgYSA9IG1hdGgudW5pdCgnNSBjbScpCiAgICogICAgY29uc3QgYiA9IG1hdGgudW5pdCgnMiBpbmNoJykKICAgKiAgICBtYXRoLmxhcmdlcihhLCBiKSAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGVxdWFsLCB1bmVxdWFsLCBzbWFsbGVyLCBzbWFsbGVyRXEsIGxhcmdlckVxLCBjb21wYXJlCiAgICoKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gY29tcGFyZQogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbiB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gY29tcGFyZQogICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIHggaXMgbGFyZ2VyIHRoYW4geSwgZWxzZSByZXR1cm5zIGZhbHNlCiAgICovCgogIHZhciBsYXJnZXIgPSB0eXBlZChsYXJnZXJfbmFtZSwgewogICAgJ2Jvb2xlYW4sIGJvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuQm9vbGVhbih4LCB5KSB7CiAgICAgIHJldHVybiB4ID4geTsKICAgIH0sCiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkgewogICAgICByZXR1cm4geCA+IHkgJiYgIU9iamVjdCh1dGlsc19udW1iZXJbIm0iIC8qIG5lYXJseUVxdWFsICovXSkoeCwgeSwgY29uZmlnLmVwc2lsb24pOwogICAgfSwKICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7CiAgICAgIHJldHVybiB4Lmd0KHkpICYmICFuZWFybHlFcXVhbCh4LCB5LCBjb25maWcuZXBzaWxvbik7CiAgICB9LAogICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkgewogICAgICByZXR1cm4geC5jb21wYXJlKHkpID09PSAxOwogICAgfSwKICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycycpOwogICAgfSwKICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkgewogICAgICBpZiAoIXguZXF1YWxCYXNlKHkpKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29tcGFyZSB1bml0cyB3aXRoIGRpZmZlcmVudCBiYXNlJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiBsYXJnZXIoeC52YWx1ZSwgeS52YWx1ZSk7CiAgICB9LAogICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIGxhcmdlcik7CiAgICB9LAogICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBsYXJnZXIsIHRydWUpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgbGFyZ2VyLCBmYWxzZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgbGFyZ2VyKTsKICAgIH0sCiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGxhcmdlcihtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpOwogICAgfSwKICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBsYXJnZXIobWF0cml4KHgpLCB5KTsKICAgIH0sCiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gbGFyZ2VyKHgsIG1hdHJpeCh5KSk7CiAgICB9LAogICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIGxhcmdlciwgZmFsc2UpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgbGFyZ2VyLCBmYWxzZSk7CiAgICB9LAogICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIGxhcmdlciwgdHJ1ZSk7CiAgICB9LAogICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBsYXJnZXIsIHRydWUpOwogICAgfSwKICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGxhcmdlciwgZmFsc2UpLnZhbHVlT2YoKTsKICAgIH0sCiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBsYXJnZXIsIHRydWUpLnZhbHVlT2YoKTsKICAgIH0KICB9KTsKICByZXR1cm4gbGFyZ2VyOwp9KTsKdmFyIGNyZWF0ZUxhcmdlck51bWJlciA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGxhcmdlcl9uYW1lLCBbJ3R5cGVkJywgJ2NvbmZpZyddLCBmdW5jdGlvbiAoX3JlZjIpIHsKICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCwKICAgICAgY29uZmlnID0gX3JlZjIuY29uZmlnOwogIHJldHVybiB0eXBlZChsYXJnZXJfbmFtZSwgewogICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHsKICAgICAgcmV0dXJuIHggPiB5ICYmICFPYmplY3QodXRpbHNfbnVtYmVyWyJtIiAvKiBuZWFybHlFcXVhbCAqL10pKHgsIHksIGNvbmZpZy5lcHNpbG9uKTsKICAgIH0KICB9KTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyRXEuanMKCgoKCgoKCgp2YXIgbGFyZ2VyRXFfbmFtZSA9ICdsYXJnZXJFcSc7CnZhciBsYXJnZXJFcV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTsKdmFyIGNyZWF0ZUxhcmdlckVxID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkobGFyZ2VyRXFfbmFtZSwgbGFyZ2VyRXFfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCwKICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4OwogIHZhciBhbGdvcml0aG0wMyA9IGNyZWF0ZUFsZ29yaXRobTAzKHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIHZhciBhbGdvcml0aG0wNyA9IGNyZWF0ZUFsZ29yaXRobTA3KHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeAogIH0pOwogIHZhciBhbGdvcml0aG0xMiA9IGNyZWF0ZUFsZ29yaXRobTEyKHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeAogIH0pOwogIHZhciBhbGdvcml0aG0xMyA9IGNyZWF0ZUFsZ29yaXRobTEzKHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIHZhciBhbGdvcml0aG0xNCA9IGNyZWF0ZUFsZ29yaXRobTE0KHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIC8qKgogICAqIFRlc3Qgd2hldGhlciB2YWx1ZSB4IGlzIGxhcmdlciBvciBlcXVhbCB0byB5LgogICAqCiAgICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHggaXMgbGFyZ2VyIHRoYW4geSBvciB0aGUgcmVsYXRpdmUKICAgKiBkaWZmZXJlbmNlIGJldHdlZW4geCBhbmQgeSBpcyBzbWFsbGVyIHRoYW4gdGhlIGNvbmZpZ3VyZWQgZXBzaWxvbi4gVGhlCiAgICogZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMgc21hbGxlciB0aGFuIGFwcHJveGltYXRlbHkgMi4yMmUtMTYuCiAgICoKICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGgubGFyZ2VyRXEoeCwgeSkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5sYXJnZXIoMiwgMSArIDEpICAgICAgICAgLy8gcmV0dXJucyBmYWxzZQogICAqICAgIG1hdGgubGFyZ2VyRXEoMiwgMSArIDEpICAgICAgIC8vIHJldHVybnMgdHJ1ZQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBlcXVhbCwgdW5lcXVhbCwgc21hbGxlciwgc21hbGxlckVxLCBsYXJnZXIsIGNvbXBhcmUKICAgKgogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbiB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlCiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlCiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgeCBpcyBsYXJnZXIgb3IgZXF1YWwgdG8geSwgZWxzZSByZXR1cm5zIGZhbHNlCiAgICovCgogIHZhciBsYXJnZXJFcSA9IHR5cGVkKGxhcmdlckVxX25hbWUsIHsKICAgICdib29sZWFuLCBib29sZWFuJzogZnVuY3Rpb24gYm9vbGVhbkJvb2xlYW4oeCwgeSkgewogICAgICByZXR1cm4geCA+PSB5OwogICAgfSwKICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7CiAgICAgIHJldHVybiB4ID49IHkgfHwgT2JqZWN0KHV0aWxzX251bWJlclsibSIgLyogbmVhcmx5RXF1YWwgKi9dKSh4LCB5LCBjb25maWcuZXBzaWxvbik7CiAgICB9LAogICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHsKICAgICAgcmV0dXJuIHguZ3RlKHkpIHx8IG5lYXJseUVxdWFsKHgsIHksIGNvbmZpZy5lcHNpbG9uKTsKICAgIH0sCiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7CiAgICAgIHJldHVybiB4LmNvbXBhcmUoeSkgIT09IC0xOwogICAgfSwKICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycycpOwogICAgfSwKICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkgewogICAgICBpZiAoIXguZXF1YWxCYXNlKHkpKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29tcGFyZSB1bml0cyB3aXRoIGRpZmZlcmVudCBiYXNlJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiBsYXJnZXJFcSh4LnZhbHVlLCB5LnZhbHVlKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgbGFyZ2VyRXEpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgbGFyZ2VyRXEsIHRydWUpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgbGFyZ2VyRXEsIGZhbHNlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBsYXJnZXJFcSk7CiAgICB9LAogICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBsYXJnZXJFcShtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpOwogICAgfSwKICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBsYXJnZXJFcShtYXRyaXgoeCksIHkpOwogICAgfSwKICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBsYXJnZXJFcSh4LCBtYXRyaXgoeSkpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBsYXJnZXJFcSwgZmFsc2UpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgbGFyZ2VyRXEsIGZhbHNlKTsKICAgIH0sCiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgbGFyZ2VyRXEsIHRydWUpOwogICAgfSwKICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbGFyZ2VyRXEsIHRydWUpOwogICAgfSwKICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGxhcmdlckVxLCBmYWxzZSkudmFsdWVPZigpOwogICAgfSwKICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIGxhcmdlckVxLCB0cnVlKS52YWx1ZU9mKCk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGxhcmdlckVxOwp9KTsKdmFyIGNyZWF0ZUxhcmdlckVxTnVtYmVyID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkobGFyZ2VyRXFfbmFtZSwgWyd0eXBlZCcsICdjb25maWcnXSwgZnVuY3Rpb24gKF9yZWYyKSB7CiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQsCiAgICAgIGNvbmZpZyA9IF9yZWYyLmNvbmZpZzsKICByZXR1cm4gdHlwZWQobGFyZ2VyRXFfbmFtZSwgewogICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHsKICAgICAgcmV0dXJuIHggPj0geSB8fCBPYmplY3QodXRpbHNfbnVtYmVyWyJtIiAvKiBuZWFybHlFcXVhbCAqL10pKHgsIHksIGNvbmZpZy5lcHNpbG9uKTsKICAgIH0KICB9KTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZGVlcEVxdWFsLmpzCgp2YXIgZGVlcEVxdWFsX25hbWUgPSAnZGVlcEVxdWFsJzsKdmFyIGRlZXBFcXVhbF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsJ107CnZhciBjcmVhdGVEZWVwRXF1YWwgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShkZWVwRXF1YWxfbmFtZSwgZGVlcEVxdWFsX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBlcXVhbCA9IF9yZWYuZXF1YWw7CgogIC8qKgogICAqIFRlc3QgZWxlbWVudCB3aXNlIHdoZXRoZXIgdHdvIG1hdHJpY2VzIGFyZSBlcXVhbC4KICAgKiBUaGUgZnVuY3Rpb24gYWNjZXB0cyBib3RoIG1hdHJpY2VzIGFuZCBzY2FsYXIgdmFsdWVzLgogICAqCiAgICogU3RyaW5ncyBhcmUgY29tcGFyZWQgYnkgdGhlaXIgbnVtZXJpY2FsIHZhbHVlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5kZWVwRXF1YWwoeCwgeSkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5kZWVwRXF1YWwoMiwgNCkgICAvLyByZXR1cm5zIGZhbHNlCiAgICoKICAgKiAgICBhID0gWzIsIDUsIDFdCiAgICogICAgYiA9IFsyLCA3LCAxXQogICAqCiAgICogICAgbWF0aC5kZWVwRXF1YWwoYSwgYikgICAvLyByZXR1cm5zIGZhbHNlCiAgICogICAgbWF0aC5lcXVhbChhLCBiKSAgICAgICAvLyByZXR1cm5zIFt0cnVlLCBmYWxzZSwgdHJ1ZV0KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgZXF1YWwsIHVuZXF1YWwKICAgKgogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCBtYXRyaXggdG8gY29tcGFyZQogICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgbWF0cml4IHRvIGNvbXBhcmUKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9CiAgICogICAgICAgICAgICBSZXR1cm5zIHRydWUgd2hlbiB0aGUgaW5wdXQgbWF0cmljZXMgaGF2ZSB0aGUgc2FtZSBzaXplIGFuZCBlYWNoIG9mIHRoZWlyIGVsZW1lbnRzIGlzIGVxdWFsLgogICAqLwogIHJldHVybiB0eXBlZChkZWVwRXF1YWxfbmFtZSwgewogICAgJ2FueSwgYW55JzogZnVuY3Rpb24gYW55QW55KHgsIHkpIHsKICAgICAgcmV0dXJuIF9kZWVwRXF1YWwoeC52YWx1ZU9mKCksIHkudmFsdWVPZigpKTsKICAgIH0KICB9KTsKICAvKioKICAgKiBUZXN0IHdoZXRoZXIgdHdvIGFycmF5cyBoYXZlIHRoZSBzYW1lIHNpemUgYW5kIGFsbCBlbGVtZW50cyBhcmUgZXF1YWwKICAgKiBAcGFyYW0ge0FycmF5IHwgKn0geAogICAqIEBwYXJhbSB7QXJyYXkgfCAqfSB5CiAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGJvdGggYXJyYXlzIGFyZSBkZWVwIGVxdWFsCiAgICovCgogIGZ1bmN0aW9uIF9kZWVwRXF1YWwoeCwgeSkgewogICAgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkoeSkpIHsKICAgICAgICB2YXIgbGVuID0geC5sZW5ndGg7CgogICAgICAgIGlmIChsZW4gIT09IHkubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICBpZiAoIV9kZWVwRXF1YWwoeFtpXSwgeVtpXSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoQXJyYXkuaXNBcnJheSh5KSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZXF1YWwoeCwgeSk7CiAgICAgIH0KICAgIH0KICB9Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9yZWxhdGlvbmFsL3VuZXF1YWwuanMKCgoKCgoKdmFyIHVuZXF1YWxfbmFtZSA9ICd1bmVxdWFsJzsKdmFyIHVuZXF1YWxfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnZXF1YWxTY2FsYXInLCAnbWF0cml4JywgJ0RlbnNlTWF0cml4J107CnZhciBjcmVhdGVVbmVxdWFsID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkodW5lcXVhbF9uYW1lLCB1bmVxdWFsX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBjb25maWcgPSBfcmVmLmNvbmZpZywKICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCwKICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4OwogIHZhciBhbGdvcml0aG0wMyA9IGNyZWF0ZUFsZ29yaXRobTAzKHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIHZhciBhbGdvcml0aG0wNyA9IGNyZWF0ZUFsZ29yaXRobTA3KHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeAogIH0pOwogIHZhciBhbGdvcml0aG0xMiA9IGNyZWF0ZUFsZ29yaXRobTEyKHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeAogIH0pOwogIHZhciBhbGdvcml0aG0xMyA9IGNyZWF0ZUFsZ29yaXRobTEzKHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIHZhciBhbGdvcml0aG0xNCA9IGNyZWF0ZUFsZ29yaXRobTE0KHsKICAgIHR5cGVkOiB0eXBlZAogIH0pOwogIC8qKgogICAqIFRlc3Qgd2hldGhlciB0d28gdmFsdWVzIGFyZSB1bmVxdWFsLgogICAqCiAgICogVGhlIGZ1bmN0aW9uIHRlc3RzIHdoZXRoZXIgdGhlIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5IGlzCiAgICogbGFyZ2VyIHRoYW4gdGhlIGNvbmZpZ3VyZWQgZXBzaWxvbi4gVGhlIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvIGNvbXBhcmUKICAgKiB2YWx1ZXMgc21hbGxlciB0aGFuIGFwcHJveGltYXRlbHkgMi4yMmUtMTYuCiAgICoKICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqIEluIGNhc2Ugb2YgY29tcGxleCBudW1iZXJzLCB4LnJlIG11c3QgdW5lcXVhbCB5LnJlLCBvciB4LmltIG11c3QgdW5lcXVhbCB5LmltLgogICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS4KICAgKgogICAqIFZhbHVlcyBgbnVsbGAgYW5kIGB1bmRlZmluZWRgIGFyZSBjb21wYXJlZCBzdHJpY3RseSwgdGh1cyBgbnVsbGAgaXMgdW5lcXVhbAogICAqIHdpdGggZXZlcnl0aGluZyBleGNlcHQgYG51bGxgLCBhbmQgYHVuZGVmaW5lZGAgaXMgdW5lcXVhbCB3aXRoIGV2ZXJ5dGhpbmcKICAgKiBleGNlcHQgYHVuZGVmaW5lZGAuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLnVuZXF1YWwoeCwgeSkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC51bmVxdWFsKDIgKyAyLCAzKSAgICAgICAvLyByZXR1cm5zIHRydWUKICAgKiAgICBtYXRoLnVuZXF1YWwoMiArIDIsIDQpICAgICAgIC8vIHJldHVybnMgZmFsc2UKICAgKgogICAqICAgIGNvbnN0IGEgPSBtYXRoLnVuaXQoJzUwIGNtJykKICAgKiAgICBjb25zdCBiID0gbWF0aC51bml0KCc1IG0nKQogICAqICAgIG1hdGgudW5lcXVhbChhLCBiKSAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZQogICAqCiAgICogICAgY29uc3QgYyA9IFsyLCA1LCAxXQogICAqICAgIGNvbnN0IGQgPSBbMiwgNywgMV0KICAgKgogICAqICAgIG1hdGgudW5lcXVhbChjLCBkKSAgICAgICAgICAgLy8gcmV0dXJucyBbZmFsc2UsIHRydWUsIGZhbHNlXQogICAqICAgIG1hdGguZGVlcEVxdWFsKGMsIGQpICAgICAgICAgLy8gcmV0dXJucyBmYWxzZQogICAqCiAgICogICAgbWF0aC51bmVxdWFsKDAsIG51bGwpICAgICAgICAvLyByZXR1cm5zIHRydWUKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGVxdWFsLCBkZWVwRXF1YWwsIHNtYWxsZXIsIHNtYWxsZXJFcSwgbGFyZ2VyLCBsYXJnZXJFcSwgY29tcGFyZQogICAqCiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgQ29tcGxleCB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeCB8IHVuZGVmaW5lZH0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlCiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgQ29tcGxleCB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeCB8IHVuZGVmaW5lZH0geSBTZWNvbmQgdmFsdWUgdG8gY29tcGFyZQogICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGNvbXBhcmVkIHZhbHVlcyBhcmUgdW5lcXVhbCwgZWxzZSByZXR1cm5zIGZhbHNlCiAgICovCgogIHZhciB1bmVxdWFsID0gdHlwZWQoJ3VuZXF1YWwnLCB7CiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkgewogICAgICAvLyBzdHJpY3QgZXF1YWxpdHkgZm9yIG51bGwgYW5kIHVuZGVmaW5lZD8KICAgICAgaWYgKHggPT09IG51bGwpIHsKICAgICAgICByZXR1cm4geSAhPT0gbnVsbDsKICAgICAgfQoKICAgICAgaWYgKHkgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4geCAhPT0gbnVsbDsKICAgICAgfQoKICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkgewogICAgICAgIHJldHVybiB5ICE9PSB1bmRlZmluZWQ7CiAgICAgIH0KCiAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHsKICAgICAgICByZXR1cm4geCAhPT0gdW5kZWZpbmVkOwogICAgICB9CgogICAgICByZXR1cm4gX3VuZXF1YWwoeCwgeSk7CiAgICB9LAogICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIF91bmVxdWFsKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHksIHgsIF91bmVxdWFsLCB0cnVlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIF91bmVxdWFsLCBmYWxzZSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgX3VuZXF1YWwpOwogICAgfSwKICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gdW5lcXVhbChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpOwogICAgfSwKICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiB1bmVxdWFsKG1hdHJpeCh4KSwgeSk7CiAgICB9LAogICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIHVuZXF1YWwoeCwgbWF0cml4KHkpKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeCwgeSwgX3VuZXF1YWwsIGZhbHNlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIF91bmVxdWFsLCBmYWxzZSk7CiAgICB9LAogICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIF91bmVxdWFsLCB0cnVlKTsKICAgIH0sCiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIF91bmVxdWFsLCB0cnVlKTsKICAgIH0sCiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBfdW5lcXVhbCwgZmFsc2UpLnZhbHVlT2YoKTsKICAgIH0sCiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBfdW5lcXVhbCwgdHJ1ZSkudmFsdWVPZigpOwogICAgfQogIH0pOwoKICBmdW5jdGlvbiBfdW5lcXVhbCh4LCB5KSB7CiAgICByZXR1cm4gIWVxdWFsU2NhbGFyKHgsIHkpOwogIH0KCiAgcmV0dXJuIHVuZXF1YWw7Cn0pOwp2YXIgY3JlYXRlVW5lcXVhbE51bWJlciA9IE9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkodW5lcXVhbF9uYW1lLCBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJ10sIGZ1bmN0aW9uIChfcmVmMikgewogIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLAogICAgICBlcXVhbFNjYWxhciA9IF9yZWYyLmVxdWFsU2NhbGFyOwogIHJldHVybiB0eXBlZCh1bmVxdWFsX25hbWUsIHsKICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCB5KSB7CiAgICAgIC8vIHN0cmljdCBlcXVhbGl0eSBmb3IgbnVsbCBhbmQgdW5kZWZpbmVkPwogICAgICBpZiAoeCA9PT0gbnVsbCkgewogICAgICAgIHJldHVybiB5ICE9PSBudWxsOwogICAgICB9CgogICAgICBpZiAoeSA9PT0gbnVsbCkgewogICAgICAgIHJldHVybiB4ICE9PSBudWxsOwogICAgICB9CgogICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgcmV0dXJuIHkgIT09IHVuZGVmaW5lZDsKICAgICAgfQoKICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgewogICAgICAgIHJldHVybiB4ICE9PSB1bmRlZmluZWQ7CiAgICAgIH0KCiAgICAgIHJldHVybiAhZXF1YWxTY2FsYXIoeCwgeSk7CiAgICB9CiAgfSk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9tYXRyaXgvcGFydGl0aW9uU2VsZWN0LmpzCgoKCnZhciBwYXJ0aXRpb25TZWxlY3RfbmFtZSA9ICdwYXJ0aXRpb25TZWxlY3QnOwp2YXIgcGFydGl0aW9uU2VsZWN0X2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnaXNOdW1lcmljJywgJ2lzTmFOJywgJ2NvbXBhcmUnXTsKdmFyIGNyZWF0ZVBhcnRpdGlvblNlbGVjdCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHBhcnRpdGlvblNlbGVjdF9uYW1lLCBwYXJ0aXRpb25TZWxlY3RfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGlzTnVtZXJpYyA9IF9yZWYuaXNOdW1lcmljLAogICAgICBpc05hTiA9IF9yZWYuaXNOYU4sCiAgICAgIGNvbXBhcmUgPSBfcmVmLmNvbXBhcmU7CiAgdmFyIGFzYyA9IGNvbXBhcmU7CgogIHZhciBkZXNjID0gZnVuY3Rpb24gZGVzYyhhLCBiKSB7CiAgICByZXR1cm4gLWNvbXBhcmUoYSwgYik7CiAgfTsKICAvKioKICAgKiBQYXJ0aXRpb24tYmFzZWQgc2VsZWN0aW9uIG9mIGFuIGFycmF5IG9yIDFEIG1hdHJpeC4KICAgKiBXaWxsIGZpbmQgdGhlIGt0aCBzbWFsbGVzdCB2YWx1ZSwgYW5kIG11dGF0ZXMgdGhlIGlucHV0IGFycmF5LgogICAqIFVzZXMgUXVpY2tzZWxlY3QuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLnBhcnRpdGlvblNlbGVjdCh4LCBrKQogICAqICAgIG1hdGgucGFydGl0aW9uU2VsZWN0KHgsIGssIGNvbXBhcmUpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGgucGFydGl0aW9uU2VsZWN0KFs1LCAxMCwgMV0sIDIpICAgICAgICAgICAvLyByZXR1cm5zIDEwCiAgICogICAgbWF0aC5wYXJ0aXRpb25TZWxlY3QoWydDJywgJ0InLCAnQScsICdEJ10sIDEpIC8vIHJldHVybnMgJ0InCiAgICoKICAgKiAgICBmdW5jdGlvbiBzb3J0QnlMZW5ndGggKGEsIGIpIHsKICAgKiAgICAgIHJldHVybiBhLmxlbmd0aCAtIGIubGVuZ3RoCiAgICogICAgfQogICAqICAgIG1hdGgucGFydGl0aW9uU2VsZWN0KFsnTGFuZ2RvbicsICdUb20nLCAnU2FyYSddLCAyLCBzb3J0QnlMZW5ndGgpIC8vIHJldHVybnMgJ0xhbmdkb24nCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIHNvcnQKICAgKgogICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICAgQSBvbmUgZGltZW5zaW9uYWwgbWF0cml4IG9yIGFycmF5IHRvIHNvcnQKICAgKiBAcGFyYW0ge051bWJlcn0gayAgICAgICAgICAgIFRoZSBrdGggc21hbGxlc3QgdmFsdWUgdG8gYmUgcmV0cmlldmVkIHplcm8tYmFzZWQgaW5kZXgKICAgKiBAcGFyYW0ge0Z1bmN0aW9uIHwgJ2FzYycgfCAnZGVzYyd9IFtjb21wYXJlPSdhc2MnXQogICAqICAgICAgICBBbiBvcHRpb25hbCBjb21wYXJhdG9yIGZ1bmN0aW9uLiBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIGFzCiAgICogICAgICAgIGBjb21wYXJlKGEsIGIpYCwgYW5kIG11c3QgcmV0dXJuIDEgd2hlbiBhID4gYiwgLTEgd2hlbiBhIDwgYiwKICAgKiAgICAgICAgYW5kIDAgd2hlbiBhID09IGIuCiAgICogQHJldHVybiB7Kn0gUmV0dXJucyB0aGUga3RoIGxvd2VzdCB2YWx1ZS4KICAgKi8KCgogIHJldHVybiB0eXBlZChwYXJ0aXRpb25TZWxlY3RfbmFtZSwgewogICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlcih4LCBrKSB7CiAgICAgIHJldHVybiBfcGFydGl0aW9uU2VsZWN0KHgsIGssIGFzYyk7CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXIsIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyU3RyaW5nKHgsIGssIGNvbXBhcmUpIHsKICAgICAgaWYgKGNvbXBhcmUgPT09ICdhc2MnKSB7CiAgICAgICAgcmV0dXJuIF9wYXJ0aXRpb25TZWxlY3QoeCwgaywgYXNjKTsKICAgICAgfSBlbHNlIGlmIChjb21wYXJlID09PSAnZGVzYycpIHsKICAgICAgICByZXR1cm4gX3BhcnRpdGlvblNlbGVjdCh4LCBrLCBkZXNjKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBhcmUgc3RyaW5nIG11c3QgYmUgImFzYyIgb3IgImRlc2MiJyk7CiAgICAgIH0KICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciwgZnVuY3Rpb24nOiBfcGFydGl0aW9uU2VsZWN0CiAgfSk7CgogIGZ1bmN0aW9uIF9wYXJ0aXRpb25TZWxlY3QoeCwgaywgY29tcGFyZSkgewogICAgaWYgKCFPYmplY3QodXRpbHNfbnVtYmVyWyJpIiAvKiBpc0ludGVnZXIgKi9dKShrKSB8fCBrIDwgMCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ2sgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7CiAgICB9CgogICAgaWYgKE9iamVjdChpc1sidiIgLyogaXNNYXRyaXggKi9dKSh4KSkgewogICAgICB2YXIgc2l6ZSA9IHguc2l6ZSgpOwoKICAgICAgaWYgKHNpemUubGVuZ3RoID4gMSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgZGltZW5zaW9uYWwgbWF0cmljZXMgc3VwcG9ydGVkJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiBxdWlja1NlbGVjdCh4LnZhbHVlT2YoKSwgaywgY29tcGFyZSk7CiAgICB9CgogICAgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHsKICAgICAgcmV0dXJuIHF1aWNrU2VsZWN0KHgsIGssIGNvbXBhcmUpOwogICAgfQogIH0KICAvKioKICAgKiBRdWlja3NlbGVjdCBhbGdvcml0aG0uCiAgICogQ29kZSBhZGFwdGVkIGZyb206CiAgICogaHR0cHM6Ly9ibG9nLnRlYW1sZWFkbmV0LmNvbS8yMDEyLzA3L3F1aWNrLXNlbGVjdC1hbGdvcml0aG0tZmluZC1rdGgtZWxlbWVudC5odG1sCiAgICoKICAgKiBAcGFyYW0ge0FycmF5fSBhcnIKICAgKiBAcGFyYW0ge051bWJlcn0gawogICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmUKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gcXVpY2tTZWxlY3QoYXJyLCBrLCBjb21wYXJlKSB7CiAgICBpZiAoayA+PSBhcnIubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignayBvdXQgb2YgYm91bmRzJyk7CiAgICB9IC8vIGNoZWNrIGZvciBOYU4gdmFsdWVzIHNpbmNlIHRoZXNlIGNhbiBjYXVzZSBhbiBpbmZpbml0ZSB3aGlsZSBsb29wCgoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChpc051bWVyaWMoYXJyW2ldKSAmJiBpc05hTihhcnJbaV0pKSB7CiAgICAgICAgcmV0dXJuIGFycltpXTsgLy8gcmV0dXJuIE5hTgogICAgICB9CiAgICB9CgogICAgdmFyIGZyb20gPSAwOwogICAgdmFyIHRvID0gYXJyLmxlbmd0aCAtIDE7IC8vIGlmIGZyb20gPT0gdG8gd2UgcmVhY2hlZCB0aGUga3RoIGVsZW1lbnQKCiAgICB3aGlsZSAoZnJvbSA8IHRvKSB7CiAgICAgIHZhciByID0gZnJvbTsKICAgICAgdmFyIHcgPSB0bzsKICAgICAgdmFyIHBpdm90ID0gYXJyW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqICh0byAtIGZyb20gKyAxKSkgKyBmcm9tXTsgLy8gc3RvcCBpZiB0aGUgcmVhZGVyIGFuZCB3cml0ZXIgbWVldHMKCiAgICAgIHdoaWxlIChyIDwgdykgewogICAgICAgIC8vIGFycltyXSA+PSBwaXZvdAogICAgICAgIGlmIChjb21wYXJlKGFycltyXSwgcGl2b3QpID49IDApIHsKICAgICAgICAgIC8vIHB1dCB0aGUgbGFyZ2UgdmFsdWVzIGF0IHRoZSBlbmQKICAgICAgICAgIHZhciB0bXAgPSBhcnJbd107CiAgICAgICAgICBhcnJbd10gPSBhcnJbcl07CiAgICAgICAgICBhcnJbcl0gPSB0bXA7CiAgICAgICAgICAtLXc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIHRoZSB2YWx1ZSBpcyBzbWFsbGVyIHRoYW4gdGhlIHBpdm90LCBza2lwCiAgICAgICAgICArK3I7CiAgICAgICAgfQogICAgICB9IC8vIGlmIHdlIHN0ZXBwZWQgdXAgKHIrKykgd2UgbmVlZCB0byBzdGVwIG9uZSBkb3duIChhcnJbcl0gPiBwaXZvdCkKCgogICAgICBpZiAoY29tcGFyZShhcnJbcl0sIHBpdm90KSA+IDApIHsKICAgICAgICAtLXI7CiAgICAgIH0gLy8gdGhlIHIgcG9pbnRlciBpcyBvbiB0aGUgZW5kIG9mIHRoZSBmaXJzdCBrIGVsZW1lbnRzCgoKICAgICAgaWYgKGsgPD0gcikgewogICAgICAgIHRvID0gcjsKICAgICAgfSBlbHNlIHsKICAgICAgICBmcm9tID0gciArIDE7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gYXJyW2tdOwogIH0KfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL21hdHJpeC9zb3J0LmpzCgoKdmFyIHNvcnRfbmFtZSA9ICdzb3J0JzsKdmFyIHNvcnRfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnY29tcGFyZScsICdjb21wYXJlTmF0dXJhbCddOwp2YXIgY3JlYXRlU29ydCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHNvcnRfbmFtZSwgc29ydF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIGNvbXBhcmUgPSBfcmVmLmNvbXBhcmUsCiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbDsKICB2YXIgY29tcGFyZUFzYyA9IGNvbXBhcmU7CgogIHZhciBjb21wYXJlRGVzYyA9IGZ1bmN0aW9uIGNvbXBhcmVEZXNjKGEsIGIpIHsKICAgIHJldHVybiAtY29tcGFyZShhLCBiKTsKICB9OwogIC8qKgogICAqIFNvcnQgdGhlIGl0ZW1zIGluIGEgbWF0cml4LgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5zb3J0KHgpCiAgICogICAgbWF0aC5zb3J0KHgsIGNvbXBhcmUpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguc29ydChbNSwgMTAsIDFdKSAvLyByZXR1cm5zIFsxLCA1LCAxMF0KICAgKiAgICBtYXRoLnNvcnQoWydDJywgJ0InLCAnQScsICdEJ10sIG1hdGguY29tcGFyZU5hdHVyYWwpCiAgICogICAgLy8gcmV0dXJucyBbJ0EnLCAnQicsICdDJywgJ0QnXQogICAqCiAgICogICAgZnVuY3Rpb24gc29ydEJ5TGVuZ3RoIChhLCBiKSB7CiAgICogICAgICByZXR1cm4gYS5sZW5ndGggLSBiLmxlbmd0aAogICAqICAgIH0KICAgKiAgICBtYXRoLnNvcnQoWydMYW5nZG9uJywgJ1RvbScsICdTYXJhJ10sIHNvcnRCeUxlbmd0aCkKICAgKiAgICAvLyByZXR1cm5zIFsnVG9tJywgJ1NhcmEnLCAnTGFuZ2RvbiddCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGZpbHRlciwgZm9yRWFjaCwgbWFwLCBjb21wYXJlLCBjb21wYXJlTmF0dXJhbAogICAqCiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICBBIG9uZSBkaW1lbnNpb25hbCBtYXRyaXggb3IgYXJyYXkgdG8gc29ydAogICAqIEBwYXJhbSB7RnVuY3Rpb24gfCAnYXNjJyB8ICdkZXNjJyB8ICduYXR1cmFsJ30gW2NvbXBhcmU9J2FzYyddCiAgICogICAgICAgIEFuIG9wdGlvbmFsIF9jb21wYXJhdG9yIGZ1bmN0aW9uIG9yIG5hbWUuIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgYXMKICAgKiAgICAgICAgYGNvbXBhcmUoYSwgYilgLCBhbmQgbXVzdCByZXR1cm4gMSB3aGVuIGEgPiBiLCAtMSB3aGVuIGEgPCBiLAogICAqICAgICAgICBhbmQgMCB3aGVuIGEgPT0gYi4KICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheX0gUmV0dXJucyB0aGUgc29ydGVkIG1hdHJpeC4KICAgKi8KCgogIHJldHVybiB0eXBlZChzb3J0X25hbWUsIHsKICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7CiAgICAgIF9hcnJheUlzVmVjdG9yKHgpOwoKICAgICAgcmV0dXJuIHguc29ydChjb21wYXJlQXNjKTsKICAgIH0sCiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeCh4KSB7CiAgICAgIF9tYXRyaXhJc1ZlY3Rvcih4KTsKCiAgICAgIHJldHVybiBtYXRyaXgoeC50b0FycmF5KCkuc29ydChjb21wYXJlQXNjKSwgeC5zdG9yYWdlKCkpOwogICAgfSwKICAgICdBcnJheSwgZnVuY3Rpb24nOiBmdW5jdGlvbiBBcnJheUZ1bmN0aW9uKHgsIF9jb21wYXJhdG9yKSB7CiAgICAgIF9hcnJheUlzVmVjdG9yKHgpOwoKICAgICAgcmV0dXJuIHguc29ydChfY29tcGFyYXRvcik7CiAgICB9LAogICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBfY29tcGFyYXRvcikgewogICAgICBfbWF0cml4SXNWZWN0b3IoeCk7CgogICAgICByZXR1cm4gbWF0cml4KHgudG9BcnJheSgpLnNvcnQoX2NvbXBhcmF0b3IpLCB4LnN0b3JhZ2UoKSk7CiAgICB9LAogICAgJ0FycmF5LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheVN0cmluZyh4LCBvcmRlcikgewogICAgICBfYXJyYXlJc1ZlY3Rvcih4KTsKCiAgICAgIHJldHVybiB4LnNvcnQoX2NvbXBhcmF0b3Iob3JkZXIpKTsKICAgIH0sCiAgICAnTWF0cml4LCBzdHJpbmcnOiBmdW5jdGlvbiBNYXRyaXhTdHJpbmcoeCwgb3JkZXIpIHsKICAgICAgX21hdHJpeElzVmVjdG9yKHgpOwoKICAgICAgcmV0dXJuIG1hdHJpeCh4LnRvQXJyYXkoKS5zb3J0KF9jb21wYXJhdG9yKG9yZGVyKSksIHguc3RvcmFnZSgpKTsKICAgIH0KICB9KTsKICAvKioKICAgKiBHZXQgdGhlIGNvbXBhcmF0b3IgZm9yIGdpdmVuIG9yZGVyICgnYXNjJywgJ2Rlc2MnLCAnbmF0dXJhbCcpCiAgICogQHBhcmFtIHsnYXNjJyB8ICdkZXNjJyB8ICduYXR1cmFsJ30gb3JkZXIKICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0gUmV0dXJucyBhIF9jb21wYXJhdG9yIGZ1bmN0aW9uCiAgICovCgogIGZ1bmN0aW9uIF9jb21wYXJhdG9yKG9yZGVyKSB7CiAgICBpZiAob3JkZXIgPT09ICdhc2MnKSB7CiAgICAgIHJldHVybiBjb21wYXJlQXNjOwogICAgfSBlbHNlIGlmIChvcmRlciA9PT0gJ2Rlc2MnKSB7CiAgICAgIHJldHVybiBjb21wYXJlRGVzYzsKICAgIH0gZWxzZSBpZiAob3JkZXIgPT09ICduYXR1cmFsJykgewogICAgICByZXR1cm4gY29tcGFyZU5hdHVyYWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZyAiYXNjIiwgImRlc2MiLCBvciAibmF0dXJhbCIgZXhwZWN0ZWQnKTsKICAgIH0KICB9CiAgLyoqCiAgICogVmFsaWRhdGUgd2hldGhlciBhbiBhcnJheSBpcyBvbmUgZGltZW5zaW9uYWwKICAgKiBUaHJvd3MgYW4gZXJyb3Igd2hlbiB0aGlzIGlzIG5vdCB0aGUgY2FzZQogICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5CiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIF9hcnJheUlzVmVjdG9yKGFycmF5KSB7CiAgICBpZiAoT2JqZWN0KHV0aWxzX2FycmF5WyJhIiAvKiBhcnJheVNpemUgKi9dKShhcnJheSkubGVuZ3RoICE9PSAxKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignT25lIGRpbWVuc2lvbmFsIGFycmF5IGV4cGVjdGVkJyk7CiAgICB9CiAgfQogIC8qKgogICAqIFZhbGlkYXRlIHdoZXRoZXIgYSBtYXRyaXggaXMgb25lIGRpbWVuc2lvbmFsCiAgICogVGhyb3dzIGFuIGVycm9yIHdoZW4gdGhpcyBpcyBub3QgdGhlIGNhc2UKICAgKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4CiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIF9tYXRyaXhJc1ZlY3RvcihtYXRyaXgpIHsKICAgIGlmIChtYXRyaXguc2l6ZSgpLmxlbmd0aCAhPT0gMSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ09uZSBkaW1lbnNpb25hbCBtYXRyaXggZXhwZWN0ZWQnKTsKICAgIH0KICB9Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9zdGF0aXN0aWNzL21heC5qcwoKCgp2YXIgbWF4X25hbWUgPSAnbWF4JzsKdmFyIG1heF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2xhcmdlciddOwp2YXIgY3JlYXRlTWF4ID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkobWF4X25hbWUsIG1heF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXI7CgogIC8qKgogICAqIENvbXB1dGUgdGhlIG1heGltdW0gdmFsdWUgb2YgYSBtYXRyaXggb3IgYSAgbGlzdCB3aXRoIHZhbHVlcy4KICAgKiBJbiBjYXNlIG9mIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXksIHRoZSBtYXhpbXVtIG9mIHRoZSBmbGF0dGVuZWQgYXJyYXkKICAgKiB3aWxsIGJlIGNhbGN1bGF0ZWQuIFdoZW4gYGRpbWAgaXMgcHJvdmlkZWQsIHRoZSBtYXhpbXVtIG92ZXIgdGhlIHNlbGVjdGVkCiAgICogZGltZW5zaW9uIHdpbGwgYmUgY2FsY3VsYXRlZC4gUGFyYW1ldGVyIGBkaW1gIGlzIHplcm8tYmFzZWQuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICAgbWF0aC5tYXgoYSwgYiwgYywgLi4uKQogICAqICAgICBtYXRoLm1heChBKQogICAqICAgICBtYXRoLm1heChBLCBkaW0pCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgICBtYXRoLm1heCgyLCAxLCA0LCAzKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgNAogICAqICAgICBtYXRoLm1heChbMiwgMSwgNCwgM10pICAgICAgICAgICAgICAgIC8vIHJldHVybnMgNAogICAqCiAgICogICAgIC8vIG1heGltdW0gb3ZlciBhIHNwZWNpZmllZCBkaW1lbnNpb24gKHplcm8tYmFzZWQpCiAgICogICAgIG1hdGgubWF4KFtbMiwgNV0sIFs0LCAzXSwgWzEsIDddXSwgMCkgLy8gcmV0dXJucyBbNCwgN10KICAgKiAgICAgbWF0aC5tYXgoW1syLCA1XSwgWzQsIDNdXSwgWzEsIDddLCAxKSAvLyByZXR1cm5zIFs1LCA0LCA3XQogICAqCiAgICogICAgIG1hdGgubWF4KDIuNywgNy4xLCAtNC41LCAyLjAsIDQuMSkgICAgLy8gcmV0dXJucyA3LjEKICAgKiAgICAgbWF0aC5taW4oMi43LCA3LjEsIC00LjUsIDIuMCwgNC4xKSAgICAvLyByZXR1cm5zIC00LjUKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgbWVhbiwgbWVkaWFuLCBtaW4sIHByb2QsIHN0ZCwgc3VtLCB2YXJpYW5jZQogICAqCiAgICogQHBhcmFtIHsuLi4gKn0gYXJncyAgQSBzaW5nbGUgbWF0cml4IG9yIG9yIG11bHRpcGxlIHNjYWxhciB2YWx1ZXMKICAgKiBAcmV0dXJuIHsqfSBUaGUgbWF4aW11bSB2YWx1ZQogICAqLwogIHJldHVybiB0eXBlZChtYXhfbmFtZSwgewogICAgLy8gbWF4KFthLCBiLCBjLCBkLCAuLi5dKQogICAgJ0FycmF5IHwgTWF0cml4JzogX21heCwKICAgIC8vIG1heChbYSwgYiwgYywgZCwgLi4uXSwgZGltKQogICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlckJpZ051bWJlcihhcnJheSwgZGltKSB7CiAgICAgIHJldHVybiByZWR1Y2UoYXJyYXksIGRpbS52YWx1ZU9mKCksIF9sYXJnZXN0KTsKICAgIH0sCiAgICAvLyBtYXgoYSwgYiwgYywgZCwgLi4uKQogICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykgewogICAgICBpZiAoY29udGFpbnNDb2xsZWN0aW9ucyhhcmdzKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NjYWxhciB2YWx1ZXMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gbWF4Jyk7CiAgICAgIH0KCiAgICAgIHJldHVybiBfbWF4KGFyZ3MpOwogICAgfQogIH0pOwogIC8qKgogICAqIFJldHVybiB0aGUgbGFyZ2VzdCBvZiB0d28gdmFsdWVzCiAgICogQHBhcmFtIHsqfSB4CiAgICogQHBhcmFtIHsqfSB5CiAgICogQHJldHVybnMgeyp9IFJldHVybnMgeCB3aGVuIHggaXMgbGFyZ2VzdCwgb3IgeSB3aGVuIHkgaXMgbGFyZ2VzdAogICAqIEBwcml2YXRlCiAgICovCgogIGZ1bmN0aW9uIF9sYXJnZXN0KHgsIHkpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiBsYXJnZXIoeCwgeSkgPyB4IDogeTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICB0aHJvdyBpbXByb3ZlRXJyb3JNZXNzYWdlKGVyciwgJ21heCcsIHkpOwogICAgfQogIH0KICAvKioKICAgKiBSZWN1cnNpdmVseSBjYWxjdWxhdGUgdGhlIG1heGltdW0gdmFsdWUgaW4gYW4gbi1kaW1lbnNpb25hbCBhcnJheQogICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5CiAgICogQHJldHVybiB7bnVtYmVyfSBtYXgKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gX21heChhcnJheSkgewogICAgdmFyIHJlczsKICAgIGRlZXBGb3JFYWNoKGFycmF5LCBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgdHJ5IHsKICAgICAgICBpZiAoaXNOYU4odmFsdWUpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHsKICAgICAgICAgIHJlcyA9IE5hTjsKICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PT0gdW5kZWZpbmVkIHx8IGxhcmdlcih2YWx1ZSwgcmVzKSkgewogICAgICAgICAgcmVzID0gdmFsdWU7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICB0aHJvdyBpbXByb3ZlRXJyb3JNZXNzYWdlKGVyciwgJ21heCcsIHZhbHVlKTsKICAgICAgfQogICAgfSk7CgogICAgaWYgKHJlcyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBtYXggb2YgYW4gZW1wdHkgYXJyYXknKTsKICAgIH0KCiAgICByZXR1cm4gcmVzOwogIH0KfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWluLmpzCgoKCnZhciBtaW5fbmFtZSA9ICdtaW4nOwp2YXIgbWluX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc21hbGxlciddOwp2YXIgY3JlYXRlTWluID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkobWluX25hbWUsIG1pbl9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgc21hbGxlciA9IF9yZWYuc21hbGxlcjsKCiAgLyoqCiAgICogQ29tcHV0ZSB0aGUgbWluaW11bSB2YWx1ZSBvZiBhIG1hdHJpeCBvciBhICBsaXN0IG9mIHZhbHVlcy4KICAgKiBJbiBjYXNlIG9mIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXksIHRoZSBtaW5pbXVtIG9mIHRoZSBmbGF0dGVuZWQgYXJyYXkKICAgKiB3aWxsIGJlIGNhbGN1bGF0ZWQuIFdoZW4gYGRpbWAgaXMgcHJvdmlkZWQsIHRoZSBtaW5pbXVtIG92ZXIgdGhlIHNlbGVjdGVkCiAgICogZGltZW5zaW9uIHdpbGwgYmUgY2FsY3VsYXRlZC4gUGFyYW1ldGVyIGBkaW1gIGlzIHplcm8tYmFzZWQuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICAgbWF0aC5taW4oYSwgYiwgYywgLi4uKQogICAqICAgICBtYXRoLm1pbihBKQogICAqICAgICBtYXRoLm1pbihBLCBkaW0pCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgICBtYXRoLm1pbigyLCAxLCA0LCAzKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMQogICAqICAgICBtYXRoLm1pbihbMiwgMSwgNCwgM10pICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMQogICAqCiAgICogICAgIC8vIG1pbmltdW0gb3ZlciBhIHNwZWNpZmllZCBkaW1lbnNpb24gKHplcm8tYmFzZWQpCiAgICogICAgIG1hdGgubWluKFtbMiwgNV0sIFs0LCAzXSwgWzEsIDddXSwgMCkgLy8gcmV0dXJucyBbMSwgM10KICAgKiAgICAgbWF0aC5taW4oW1syLCA1XSwgWzQsIDNdLCBbMSwgN11dLCAxKSAvLyByZXR1cm5zIFsyLCAzLCAxXQogICAqCiAgICogICAgIG1hdGgubWF4KDIuNywgNy4xLCAtNC41LCAyLjAsIDQuMSkgICAgLy8gcmV0dXJucyA3LjEKICAgKiAgICAgbWF0aC5taW4oMi43LCA3LjEsIC00LjUsIDIuMCwgNC4xKSAgICAvLyByZXR1cm5zIC00LjUKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgbWVhbiwgbWVkaWFuLCBtYXgsIHByb2QsIHN0ZCwgc3VtLCB2YXJpYW5jZQogICAqCiAgICogQHBhcmFtIHsuLi4gKn0gYXJncyAgQSBzaW5nbGUgbWF0cml4IG9yIG9yIG11bHRpcGxlIHNjYWxhciB2YWx1ZXMKICAgKiBAcmV0dXJuIHsqfSBUaGUgbWluaW11bSB2YWx1ZQogICAqLwogIHJldHVybiB0eXBlZChtaW5fbmFtZSwgewogICAgLy8gbWluKFthLCBiLCBjLCBkLCAuLi5dKQogICAgJ0FycmF5IHwgTWF0cml4JzogX21pbiwKICAgIC8vIG1pbihbYSwgYiwgYywgZCwgLi4uXSwgZGltKQogICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlckJpZ051bWJlcihhcnJheSwgZGltKSB7CiAgICAgIHJldHVybiByZWR1Y2UoYXJyYXksIGRpbS52YWx1ZU9mKCksIF9zbWFsbGVzdCk7CiAgICB9LAogICAgLy8gbWluKGEsIGIsIGMsIGQsIC4uLikKICAgICcuLi4nOiBmdW5jdGlvbiBfKGFyZ3MpIHsKICAgICAgaWYgKGNvbnRhaW5zQ29sbGVjdGlvbnMoYXJncykpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTY2FsYXIgdmFsdWVzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIG1pbicpOwogICAgICB9CgogICAgICByZXR1cm4gX21pbihhcmdzKTsKICAgIH0KICB9KTsKICAvKioKICAgKiBSZXR1cm4gdGhlIHNtYWxsZXN0IG9mIHR3byB2YWx1ZXMKICAgKiBAcGFyYW0geyp9IHgKICAgKiBAcGFyYW0geyp9IHkKICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB4IHdoZW4geCBpcyBzbWFsbGVzdCwgb3IgeSB3aGVuIHkgaXMgc21hbGxlc3QKICAgKiBAcHJpdmF0ZQogICAqLwoKICBmdW5jdGlvbiBfc21hbGxlc3QoeCwgeSkgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIHNtYWxsZXIoeCwgeSkgPyB4IDogeTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICB0aHJvdyBpbXByb3ZlRXJyb3JNZXNzYWdlKGVyciwgJ21pbicsIHkpOwogICAgfQogIH0KICAvKioKICAgKiBSZWN1cnNpdmVseSBjYWxjdWxhdGUgdGhlIG1pbmltdW0gdmFsdWUgaW4gYW4gbi1kaW1lbnNpb25hbCBhcnJheQogICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5CiAgICogQHJldHVybiB7bnVtYmVyfSBtaW4KICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gX21pbihhcnJheSkgewogICAgdmFyIG1pbjsKICAgIGRlZXBGb3JFYWNoKGFycmF5LCBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgdHJ5IHsKICAgICAgICBpZiAoaXNOYU4odmFsdWUpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHsKICAgICAgICAgIG1pbiA9IE5hTjsKICAgICAgICB9IGVsc2UgaWYgKG1pbiA9PT0gdW5kZWZpbmVkIHx8IHNtYWxsZXIodmFsdWUsIG1pbikpIHsKICAgICAgICAgIG1pbiA9IHZhbHVlOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgdGhyb3cgaW1wcm92ZUVycm9yTWVzc2FnZShlcnIsICdtaW4nLCB2YWx1ZSk7CiAgICAgIH0KICAgIH0pOwoKICAgIGlmIChtaW4gPT09IHVuZGVmaW5lZCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgbWluIG9mIGFuIGVtcHR5IGFycmF5Jyk7CiAgICB9CgogICAgcmV0dXJuIG1pbjsKICB9Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy90eXBlL21hdHJpeC9JbW11dGFibGVEZW5zZU1hdHJpeC5qcwoKCgp2YXIgSW1tdXRhYmxlRGVuc2VNYXRyaXhfbmFtZSA9ICdJbW11dGFibGVEZW5zZU1hdHJpeCc7CnZhciBJbW11dGFibGVEZW5zZU1hdHJpeF9kZXBlbmRlbmNpZXMgPSBbJ3NtYWxsZXInLCAnRGVuc2VNYXRyaXgnXTsKdmFyIGNyZWF0ZUltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShJbW11dGFibGVEZW5zZU1hdHJpeF9uYW1lLCBJbW11dGFibGVEZW5zZU1hdHJpeF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHNtYWxsZXIgPSBfcmVmLnNtYWxsZXIsCiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDsKCiAgZnVuY3Rpb24gSW1tdXRhYmxlRGVuc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpIHsKICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJbW11dGFibGVEZW5zZU1hdHJpeCkpIHsKICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTsKICAgIH0KCiAgICBpZiAoZGF0YXR5cGUgJiYgIU9iamVjdChpc1siSSIgLyogaXNTdHJpbmcgKi9dKShkYXRhdHlwZSkpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGF0eXBlOiAnICsgZGF0YXR5cGUpOwogICAgfQoKICAgIGlmIChPYmplY3QoaXNbInYiIC8qIGlzTWF0cml4ICovXSkoZGF0YSkgfHwgT2JqZWN0KGlzWyJiIiAvKiBpc0FycmF5ICovXSkoZGF0YSkpIHsKICAgICAgLy8gdXNlIERlbnNlTWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHZhciBtYXRyaXggPSBuZXcgRGVuc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpOyAvLyBpbnRlcm5hbCBzdHJ1Y3R1cmVzCgogICAgICB0aGlzLl9kYXRhID0gbWF0cml4Ll9kYXRhOwogICAgICB0aGlzLl9zaXplID0gbWF0cml4Ll9zaXplOwogICAgICB0aGlzLl9kYXRhdHlwZSA9IG1hdHJpeC5fZGF0YXR5cGU7CiAgICAgIHRoaXMuX21pbiA9IG51bGw7CiAgICAgIHRoaXMuX21heCA9IG51bGw7CiAgICB9IGVsc2UgaWYgKGRhdGEgJiYgT2JqZWN0KGlzWyJiIiAvKiBpc0FycmF5ICovXSkoZGF0YS5kYXRhKSAmJiBPYmplY3QoaXNbImIiIC8qIGlzQXJyYXkgKi9dKShkYXRhLnNpemUpKSB7CiAgICAgIC8vIGluaXRpYWxpemUgZmllbGRzIGZyb20gSlNPTiByZXByZXNlbnRhdGlvbgogICAgICB0aGlzLl9kYXRhID0gZGF0YS5kYXRhOwogICAgICB0aGlzLl9zaXplID0gZGF0YS5zaXplOwogICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGEuZGF0YXR5cGU7CiAgICAgIHRoaXMuX21pbiA9IHR5cGVvZiBkYXRhLm1pbiAhPT0gJ3VuZGVmaW5lZCcgPyBkYXRhLm1pbiA6IG51bGw7CiAgICAgIHRoaXMuX21heCA9IHR5cGVvZiBkYXRhLm1heCAhPT0gJ3VuZGVmaW5lZCcgPyBkYXRhLm1heCA6IG51bGw7CiAgICB9IGVsc2UgaWYgKGRhdGEpIHsKICAgICAgLy8gdW5zdXBwb3J0ZWQgdHlwZQogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIGRhdGEgKCcgKyBPYmplY3QoaXNbIk0iIC8qIHR5cGVPZiAqL10pKGRhdGEpICsgJyknKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIG5vdGhpbmcgcHJvdmlkZWQKICAgICAgdGhpcy5fZGF0YSA9IFtdOwogICAgICB0aGlzLl9zaXplID0gWzBdOwogICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGF0eXBlOwogICAgICB0aGlzLl9taW4gPSBudWxsOwogICAgICB0aGlzLl9tYXggPSBudWxsOwogICAgfQogIH0KCiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlID0gbmV3IERlbnNlTWF0cml4KCk7CiAgLyoqCiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb24KICAgKi8KCiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLnR5cGUgPSAnSW1tdXRhYmxlRGVuc2VNYXRyaXgnOwogIEltbXV0YWJsZURlbnNlTWF0cml4LnByb3RvdHlwZS5pc0ltbXV0YWJsZURlbnNlTWF0cml4ID0gdHJ1ZTsKICAvKioKICAgKiBHZXQgYSBzdWJzZXQgb2YgdGhlIG1hdHJpeCwgb3IgcmVwbGFjZSBhIHN1YnNldCBvZiB0aGUgbWF0cml4LgogICAqCiAgICogVXNhZ2U6CiAgICogICAgIGNvbnN0IHN1YnNldCA9IG1hdHJpeC5zdWJzZXQoaW5kZXgpICAgICAgICAgICAgICAgLy8gcmV0cmlldmUgc3Vic2V0CiAgICogICAgIGNvbnN0IHZhbHVlID0gbWF0cml4LnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQpICAgLy8gcmVwbGFjZSBzdWJzZXQKICAgKgogICAqIEBwYXJhbSB7SW5kZXh9IGluZGV4CiAgICogQHBhcmFtIHtBcnJheSB8IEltbXV0YWJsZURlbnNlTWF0cml4IHwgKn0gW3JlcGxhY2VtZW50XQogICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT0wXSAgICAgIERlZmF1bHQgdmFsdWUsIGZpbGxlZCBpbiBvbiBuZXcgZW50cmllcyB3aGVuCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IG1hdHJpeCBlbGVtZW50cyB3aWxsIGJlIGZpbGxlZCB3aXRoIHplcm9zLgogICAqLwoKICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUuc3Vic2V0ID0gZnVuY3Rpb24gKGluZGV4KSB7CiAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgY2FzZSAxOgogICAgICAgIHsKICAgICAgICAgIC8vIHVzZSBiYXNlIGltcGxlbWVudGF0aW9uCiAgICAgICAgICB2YXIgbSA9IERlbnNlTWF0cml4LnByb3RvdHlwZS5zdWJzZXQuY2FsbCh0aGlzLCBpbmRleCk7IC8vIGNoZWNrIHJlc3VsdCBpcyBhIG1hdHJpeAoKICAgICAgICAgIGlmIChPYmplY3QoaXNbInYiIC8qIGlzTWF0cml4ICovXSkobSkpIHsKICAgICAgICAgICAgLy8gcmV0dXJuIGltbXV0YWJsZSBtYXRyaXgKICAgICAgICAgICAgcmV0dXJuIG5ldyBJbW11dGFibGVEZW5zZU1hdHJpeCh7CiAgICAgICAgICAgICAgZGF0YTogbS5fZGF0YSwKICAgICAgICAgICAgICBzaXplOiBtLl9zaXplLAogICAgICAgICAgICAgIGRhdGF0eXBlOiBtLl9kYXRhdHlwZQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gbTsKICAgICAgICB9CiAgICAgIC8vIGludGVudGlvbmFsIGZhbGwgdGhyb3VnaAoKICAgICAgY2FzZSAyOgogICAgICBjYXNlIDM6CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHNldCBzdWJzZXQgb24gYW4gSW1tdXRhYmxlIE1hdHJpeCBpbnN0YW5jZScpOwoKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1dyb25nIG51bWJlciBvZiBhcmd1bWVudHMnKTsKICAgIH0KICB9OwogIC8qKgogICAqIFJlcGxhY2UgYSBzaW5nbGUgZWxlbWVudCBpbiB0aGUgbWF0cml4LgogICAqIEBwYXJhbSB7TnVtYmVyW119IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleAogICAqIEBwYXJhbSB7Kn0gdmFsdWUKICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdICAgICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMgd2hlbgogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXRyaXggaXMgcmVzaXplZC4gSWYgbm90IHByb3ZpZGVkLAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBsZWZ0IHVuZGVmaW5lZC4KICAgKiBAcmV0dXJuIHtJbW11dGFibGVEZW5zZU1hdHJpeH0gc2VsZgogICAqLwoKCiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICgpIHsKICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBzZXQgb24gYW4gSW1tdXRhYmxlIE1hdHJpeCBpbnN0YW5jZScpOwogIH07CiAgLyoqCiAgICogUmVzaXplIHRoZSBtYXRyaXggdG8gdGhlIGdpdmVuIHNpemUuIFJldHVybnMgYSBjb3B5IG9mIHRoZSBtYXRyaXggd2hlbgogICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNpemUgaW4gcGxhY2UpLgogICAqCiAgICogQHBhcmFtIHtOdW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuCiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzLgogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBwcm92aWRlZCwgdGhlIG1hdHJpeCBlbGVtZW50cyB3aWxsCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgZmlsbGVkIHdpdGggemVyb3MuCiAgICogQHBhcmFtIHtib29sZWFufSBbY29weV0gICAgICAgICAgUmV0dXJuIGEgcmVzaXplZCBjb3B5IG9mIHRoZSBtYXRyaXgKICAgKgogICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgIFRoZSByZXNpemVkIG1hdHJpeAogICAqLwoKCiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICgpIHsKICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSByZXNpemUgb24gYW4gSW1tdXRhYmxlIE1hdHJpeCBpbnN0YW5jZScpOwogIH07CiAgLyoqCiAgICogRGlzYWxsb3dzIHJlc2hhcGluZyBpbiBmYXZvciBvZiBpbW11dGFiaWxpdHkuCiAgICoKICAgKiBAdGhyb3dzIHtFcnJvcn0gT3BlcmF0aW9uIG5vdCBhbGxvd2VkCiAgICovCgoKICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUucmVzaGFwZSA9IGZ1bmN0aW9uICgpIHsKICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSByZXNoYXBlIG9uIGFuIEltbXV0YWJsZSBNYXRyaXggaW5zdGFuY2UnKTsKICB9OwogIC8qKgogICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoZSBtYXRyaXgKICAgKiBAcmV0dXJuIHtJbW11dGFibGVEZW5zZU1hdHJpeH0gY2xvbmUKICAgKi8KCgogIEltbXV0YWJsZURlbnNlTWF0cml4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiBuZXcgSW1tdXRhYmxlRGVuc2VNYXRyaXgoewogICAgICBkYXRhOiBPYmplY3QodXRpbHNfb2JqZWN0WyJhIiAvKiBjbG9uZSAqL10pKHRoaXMuX2RhdGEpLAogICAgICBzaXplOiBPYmplY3QodXRpbHNfb2JqZWN0WyJhIiAvKiBjbG9uZSAqL10pKHRoaXMuX3NpemUpLAogICAgICBkYXRhdHlwZTogdGhpcy5fZGF0YXR5cGUKICAgIH0pOwogIH07CiAgLyoqCiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4CiAgICogQHJldHVybnMge09iamVjdH0KICAgKi8KCgogIEltbXV0YWJsZURlbnNlTWF0cml4LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gewogICAgICBtYXRoanM6ICdJbW11dGFibGVEZW5zZU1hdHJpeCcsCiAgICAgIGRhdGE6IHRoaXMuX2RhdGEsCiAgICAgIHNpemU6IHRoaXMuX3NpemUsCiAgICAgIGRhdGF0eXBlOiB0aGlzLl9kYXRhdHlwZQogICAgfTsKICB9OwogIC8qKgogICAqIEdlbmVyYXRlIGEgbWF0cml4IGZyb20gYSBKU09OIG9iamVjdAogICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlCiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7Im1hdGhqcyI6ICJJbW11dGFibGVEZW5zZU1hdHJpeCIsIGRhdGE6IFtdLCBzaXplOiBbXX1gLAogICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWwKICAgKiBAcmV0dXJucyB7SW1tdXRhYmxlRGVuc2VNYXRyaXh9CiAgICovCgoKICBJbW11dGFibGVEZW5zZU1hdHJpeC5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7CiAgICByZXR1cm4gbmV3IEltbXV0YWJsZURlbnNlTWF0cml4KGpzb24pOwogIH07CiAgLyoqCiAgICogU3dhcCByb3dzIGkgYW5kIGogaW4gTWF0cml4LgogICAqCiAgICogQHBhcmFtIHtOdW1iZXJ9IGkgICAgICAgTWF0cml4IHJvdyBpbmRleCAxCiAgICogQHBhcmFtIHtOdW1iZXJ9IGogICAgICAgTWF0cml4IHJvdyBpbmRleCAyCiAgICoKICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICBUaGUgbWF0cml4IHJlZmVyZW5jZQogICAqLwoKCiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLnN3YXBSb3dzID0gZnVuY3Rpb24gKCkgewogICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHN3YXBSb3dzIG9uIGFuIEltbXV0YWJsZSBNYXRyaXggaW5zdGFuY2UnKTsKICB9OwogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgc2V0CiAgICogQHJldHVybiB7TnVtYmVyIHwgdW5kZWZpbmVkfSBtaW4KICAgKi8KCgogIEltbXV0YWJsZURlbnNlTWF0cml4LnByb3RvdHlwZS5taW4gPSBmdW5jdGlvbiAoKSB7CiAgICAvLyBjaGVjayBtaW4gaGFzIGJlZW4gY2FsY3VsYXRlZCBiZWZvcmUKICAgIGlmICh0aGlzLl9taW4gPT09IG51bGwpIHsKICAgICAgLy8gbWluaW11bQogICAgICB2YXIgbSA9IG51bGw7IC8vIGNvbXB1dGUgbWluCgogICAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHYpIHsKICAgICAgICBpZiAobSA9PT0gbnVsbCB8fCBzbWFsbGVyKHYsIG0pKSB7CiAgICAgICAgICBtID0gdjsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLl9taW4gPSBtICE9PSBudWxsID8gbSA6IHVuZGVmaW5lZDsKICAgIH0KCiAgICByZXR1cm4gdGhpcy5fbWluOwogIH07CiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBtYXhpbXVtIHZhbHVlIGluIHRoZSBzZXQKICAgKiBAcmV0dXJuIHtOdW1iZXIgfCB1bmRlZmluZWR9IG1heAogICAqLwoKCiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLm1heCA9IGZ1bmN0aW9uICgpIHsKICAgIC8vIGNoZWNrIG1heCBoYXMgYmVlbiBjYWxjdWxhdGVkIGJlZm9yZQogICAgaWYgKHRoaXMuX21heCA9PT0gbnVsbCkgewogICAgICAvLyBtYXhpbXVtCiAgICAgIHZhciBtID0gbnVsbDsgLy8gY29tcHV0ZSBtYXgKCiAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAodikgewogICAgICAgIGlmIChtID09PSBudWxsIHx8IHNtYWxsZXIobSwgdikpIHsKICAgICAgICAgIG0gPSB2OwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMuX21heCA9IG0gIT09IG51bGwgPyBtIDogdW5kZWZpbmVkOwogICAgfQoKICAgIHJldHVybiB0aGlzLl9tYXg7CiAgfTsKCiAgcmV0dXJuIEltbXV0YWJsZURlbnNlTWF0cml4Owp9LCB7CiAgaXNDbGFzczogdHJ1ZQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdHlwZS9tYXRyaXgvTWF0cml4SW5kZXguanMKCgoKCnZhciBNYXRyaXhJbmRleF9uYW1lID0gJ0luZGV4JzsKdmFyIE1hdHJpeEluZGV4X2RlcGVuZGVuY2llcyA9IFsnSW1tdXRhYmxlRGVuc2VNYXRyaXgnXTsKdmFyIGNyZWF0ZUluZGV4Q2xhc3MgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShNYXRyaXhJbmRleF9uYW1lLCBNYXRyaXhJbmRleF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIEltbXV0YWJsZURlbnNlTWF0cml4ID0gX3JlZi5JbW11dGFibGVEZW5zZU1hdHJpeDsKCiAgLyoqCiAgICogQ3JlYXRlIGFuIGluZGV4LiBBbiBJbmRleCBjYW4gc3RvcmUgcmFuZ2VzIGFuZCBzZXRzIGZvciBtdWx0aXBsZSBkaW1lbnNpb25zLgogICAqIE1hdHJpeC5nZXQsIE1hdHJpeC5zZXQsIGFuZCBtYXRoLnN1YnNldCBhY2NlcHQgYW4gSW5kZXggYXMgaW5wdXQuCiAgICoKICAgKiBVc2FnZToKICAgKiAgICAgY29uc3QgaW5kZXggPSBuZXcgSW5kZXgocmFuZ2UxLCByYW5nZTIsIG1hdHJpeDEsIGFycmF5MSwgLi4uKQogICAqCiAgICogV2hlcmUgZWFjaCBwYXJhbWV0ZXIgY2FuIGJlIGFueSBvZjoKICAgKiAgICAgQSBudW1iZXIKICAgKiAgICAgQSBzdHJpbmcgKGNvbnRhaW5pbmcgYSBuYW1lIG9mIGFuIG9iamVjdCBwcm9wZXJ0eSkKICAgKiAgICAgQW4gaW5zdGFuY2Ugb2YgUmFuZ2UKICAgKiAgICAgQW4gQXJyYXkgd2l0aCB0aGUgU2V0IHZhbHVlcwogICAqICAgICBBIE1hdHJpeCB3aXRoIHRoZSBTZXQgdmFsdWVzCiAgICoKICAgKiBUaGUgcGFyYW1ldGVycyBzdGFydCwgZW5kLCBhbmQgc3RlcCBtdXN0IGJlIGludGVnZXIgbnVtYmVycy4KICAgKgogICAqIEBjbGFzcyBJbmRleAogICAqIEBDb25zdHJ1Y3RvciBJbmRleAogICAqIEBwYXJhbSB7Li4uKn0gcmFuZ2VzCiAgICovCiAgZnVuY3Rpb24gSW5kZXgocmFuZ2VzKSB7CiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW5kZXgpKSB7CiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7CiAgICB9CgogICAgdGhpcy5fZGltZW5zaW9ucyA9IFtdOwogICAgdGhpcy5faXNTY2FsYXIgPSB0cnVlOwoKICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbaV07CgogICAgICBpZiAoT2JqZWN0KGlzWyJEIiAvKiBpc1JhbmdlICovXSkoYXJnKSkgewogICAgICAgIHRoaXMuX2RpbWVuc2lvbnMucHVzaChhcmcpOwoKICAgICAgICB0aGlzLl9pc1NjYWxhciA9IGZhbHNlOwogICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSB8fCBPYmplY3QoaXNbInYiIC8qIGlzTWF0cml4ICovXSkoYXJnKSkgewogICAgICAgIC8vIGNyZWF0ZSBtYXRyaXgKICAgICAgICB2YXIgbSA9IF9jcmVhdGVJbW11dGFibGVNYXRyaXgoYXJnLnZhbHVlT2YoKSk7CgogICAgICAgIHRoaXMuX2RpbWVuc2lvbnMucHVzaChtKTsgLy8gc2l6ZQoKCiAgICAgICAgdmFyIHNpemUgPSBtLnNpemUoKTsgLy8gc2NhbGFyCgogICAgICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMSB8fCBzaXplWzBdICE9PSAxKSB7CiAgICAgICAgICB0aGlzLl9pc1NjYWxhciA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykgewogICAgICAgIHRoaXMuX2RpbWVuc2lvbnMucHVzaChfY3JlYXRlSW1tdXRhYmxlTWF0cml4KFthcmddKSk7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHsKICAgICAgICAvLyBvYmplY3QgcHJvcGVydHkgKGFyZ3VtZW50cy5jb3VudCBzaG91bGQgYmUgMSkKICAgICAgICB0aGlzLl9kaW1lbnNpb25zLnB1c2goYXJnKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdEaW1lbnNpb24gbXVzdCBiZSBhbiBBcnJheSwgTWF0cml4LCBudW1iZXIsIHN0cmluZywgb3IgUmFuZ2UnKTsKICAgICAgfSAvLyBUT0RPOiBpbXBsZW1lbnQgc3VwcG9ydCBmb3Igd2lsZGNhcmQgJyonCgogICAgfQogIH0KICAvKioKICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvbgogICAqLwoKCiAgSW5kZXgucHJvdG90eXBlLnR5cGUgPSAnSW5kZXgnOwogIEluZGV4LnByb3RvdHlwZS5pc0luZGV4ID0gdHJ1ZTsKCiAgZnVuY3Rpb24gX2NyZWF0ZUltbXV0YWJsZU1hdHJpeChhcmcpIHsKICAgIC8vIGxvb3AgYXJyYXkgZWxlbWVudHMKICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJnLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICBpZiAodHlwZW9mIGFyZ1tpXSAhPT0gJ251bWJlcicgfHwgIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKGFyZ1tpXSkpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmRleCBwYXJhbWV0ZXJzIG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlciBudW1iZXJzJyk7CiAgICAgIH0KICAgIH0gLy8gY3JlYXRlIG1hdHJpeAoKCiAgICByZXR1cm4gbmV3IEltbXV0YWJsZURlbnNlTWF0cml4KGFyZyk7CiAgfQogIC8qKgogICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoZSBpbmRleAogICAqIEBtZW1iZXJvZiBJbmRleAogICAqIEByZXR1cm4ge0luZGV4fSBjbG9uZQogICAqLwoKCiAgSW5kZXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgewogICAgdmFyIGluZGV4ID0gbmV3IEluZGV4KCk7CiAgICBpbmRleC5fZGltZW5zaW9ucyA9IE9iamVjdCh1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSkodGhpcy5fZGltZW5zaW9ucyk7CiAgICBpbmRleC5faXNTY2FsYXIgPSB0aGlzLl9pc1NjYWxhcjsKICAgIHJldHVybiBpbmRleDsKICB9OwogIC8qKgogICAqIENyZWF0ZSBhbiBpbmRleCBmcm9tIGFuIGFycmF5IHdpdGggcmFuZ2VzL251bWJlcnMKICAgKiBAbWVtYmVyb2YgSW5kZXgKICAgKiBAcGFyYW0ge0FycmF5LjxBcnJheSB8IG51bWJlcj59IHJhbmdlcwogICAqIEByZXR1cm4ge0luZGV4fSBpbmRleAogICAqIEBwcml2YXRlCiAgICovCgoKICBJbmRleC5jcmVhdGUgPSBmdW5jdGlvbiAocmFuZ2VzKSB7CiAgICB2YXIgaW5kZXggPSBuZXcgSW5kZXgoKTsKICAgIEluZGV4LmFwcGx5KGluZGV4LCByYW5nZXMpOwogICAgcmV0dXJuIGluZGV4OwogIH07CiAgLyoqCiAgICogUmV0cmlldmUgdGhlIHNpemUgb2YgdGhlIGluZGV4LCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGZvciBlYWNoIGRpbWVuc2lvbi4KICAgKiBAbWVtYmVyb2YgSW5kZXgKICAgKiBAcmV0dXJucyB7bnVtYmVyW119IHNpemUKICAgKi8KCgogIEluZGV4LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkgewogICAgdmFyIHNpemUgPSBbXTsKCiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB0aGlzLl9kaW1lbnNpb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgdmFyIGQgPSB0aGlzLl9kaW1lbnNpb25zW2ldOwogICAgICBzaXplW2ldID0gdHlwZW9mIGQgPT09ICdzdHJpbmcnID8gMSA6IGQuc2l6ZSgpWzBdOwogICAgfQoKICAgIHJldHVybiBzaXplOwogIH07CiAgLyoqCiAgICogR2V0IHRoZSBtYXhpbXVtIHZhbHVlIGZvciBlYWNoIG9mIHRoZSBpbmRleGVzIHJhbmdlcy4KICAgKiBAbWVtYmVyb2YgSW5kZXgKICAgKiBAcmV0dXJucyB7bnVtYmVyW119IG1heAogICAqLwoKCiAgSW5kZXgucHJvdG90eXBlLm1heCA9IGZ1bmN0aW9uICgpIHsKICAgIHZhciB2YWx1ZXMgPSBbXTsKCiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB0aGlzLl9kaW1lbnNpb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgdmFyIHJhbmdlID0gdGhpcy5fZGltZW5zaW9uc1tpXTsKICAgICAgdmFsdWVzW2ldID0gdHlwZW9mIHJhbmdlID09PSAnc3RyaW5nJyA/IHJhbmdlIDogcmFuZ2UubWF4KCk7CiAgICB9CgogICAgcmV0dXJuIHZhbHVlczsKICB9OwogIC8qKgogICAqIEdldCB0aGUgbWluaW11bSB2YWx1ZSBmb3IgZWFjaCBvZiB0aGUgaW5kZXhlcyByYW5nZXMuCiAgICogQG1lbWJlcm9mIEluZGV4CiAgICogQHJldHVybnMge251bWJlcltdfSBtaW4KICAgKi8KCgogIEluZGV4LnByb3RvdHlwZS5taW4gPSBmdW5jdGlvbiAoKSB7CiAgICB2YXIgdmFsdWVzID0gW107CgogICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICAgIHZhciByYW5nZSA9IHRoaXMuX2RpbWVuc2lvbnNbaV07CiAgICAgIHZhbHVlc1tpXSA9IHR5cGVvZiByYW5nZSA9PT0gJ3N0cmluZycgPyByYW5nZSA6IHJhbmdlLm1pbigpOwogICAgfQoKICAgIHJldHVybiB2YWx1ZXM7CiAgfTsKICAvKioKICAgKiBMb29wIG92ZXIgZWFjaCBvZiB0aGUgcmFuZ2VzIG9mIHRoZSBpbmRleAogICAqIEBtZW1iZXJvZiBJbmRleAogICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgQ2FsbGVkIGZvciBlYWNoIHJhbmdlIHdpdGggYSBSYW5nZSBhcyBmaXJzdAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQsIHRoZSBkaW1lbnNpb24gYXMgc2Vjb25kLCBhbmQgdGhlCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCBvYmplY3QgYXMgdGhpcmQuCiAgICovCgoKICBJbmRleC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgewogICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICAgIGNhbGxiYWNrKHRoaXMuX2RpbWVuc2lvbnNbaV0sIGksIHRoaXMpOwogICAgfQogIH07CiAgLyoqCiAgICogUmV0cmlldmUgdGhlIGRpbWVuc2lvbiBmb3IgdGhlIGdpdmVuIGluZGV4CiAgICogQG1lbWJlcm9mIEluZGV4CiAgICogQHBhcmFtIHtOdW1iZXJ9IGRpbSAgICAgICAgICAgICAgICAgIE51bWJlciBvZiB0aGUgZGltZW5zaW9uCiAgICogQHJldHVybnMge1JhbmdlIHwgbnVsbH0gcmFuZ2UKICAgKi8KCgogIEluZGV4LnByb3RvdHlwZS5kaW1lbnNpb24gPSBmdW5jdGlvbiAoZGltKSB7CiAgICByZXR1cm4gdGhpcy5fZGltZW5zaW9uc1tkaW1dIHx8IG51bGw7CiAgfTsKICAvKioKICAgKiBUZXN0IHdoZXRoZXIgdGhpcyBpbmRleCBjb250YWlucyBhbiBvYmplY3QgcHJvcGVydHkKICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBpbmRleCBpcyBhbiBvYmplY3QgcHJvcGVydHkKICAgKi8KCgogIEluZGV4LnByb3RvdHlwZS5pc09iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHRoaXMuX2RpbWVuc2lvbnMubGVuZ3RoID09PSAxICYmIHR5cGVvZiB0aGlzLl9kaW1lbnNpb25zWzBdID09PSAnc3RyaW5nJzsKICB9OwogIC8qKgogICAqIFJldHVybnMgdGhlIG9iamVjdCBwcm9wZXJ0eSBuYW1lIHdoZW4gdGhlIEluZGV4IGhvbGRzIGEgc2luZ2xlIG9iamVjdCBwcm9wZXJ0eSwKICAgKiBlbHNlIHJldHVybnMgbnVsbAogICAqIEByZXR1cm5zIHtzdHJpbmcgfCBudWxsfQogICAqLwoKCiAgSW5kZXgucHJvdG90eXBlLmdldE9iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHRoaXMuaXNPYmplY3RQcm9wZXJ0eSgpID8gdGhpcy5fZGltZW5zaW9uc1swXSA6IG51bGw7CiAgfTsKICAvKioKICAgKiBUZXN0IHdoZXRoZXIgdGhpcyBpbmRleCBjb250YWlucyBvbmx5IGEgc2luZ2xlIHZhbHVlLgogICAqCiAgICogVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHRoZSBpbmRleCBpcyBjcmVhdGVkIHdpdGggb25seSBzY2FsYXIgdmFsdWVzIGFzIHJhbmdlcywKICAgKiBub3QgZm9yIHJhbmdlcyByZXNvbHZpbmcgaW50byBhIHNpbmdsZSB2YWx1ZS4KICAgKiBAbWVtYmVyb2YgSW5kZXgKICAgKiBAcmV0dXJuIHtib29sZWFufSBpc1NjYWxhcgogICAqLwoKCiAgSW5kZXgucHJvdG90eXBlLmlzU2NhbGFyID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHRoaXMuX2lzU2NhbGFyOwogIH07CiAgLyoqCiAgICogRXhwYW5kIHRoZSBJbmRleCBpbnRvIGFuIGFycmF5LgogICAqIEZvciBleGFtcGxlIG5ldyBJbmRleChbMCwzXSwgWzIsN10pIHJldHVybnMgW1swLDEsMl0sIFsyLDMsNCw1LDZdXQogICAqIEBtZW1iZXJvZiBJbmRleAogICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXkKICAgKi8KCgogIEluZGV4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkgewogICAgdmFyIGFycmF5ID0gW107CgogICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICAgIHZhciBkaW1lbnNpb24gPSB0aGlzLl9kaW1lbnNpb25zW2ldOwogICAgICBhcnJheS5wdXNoKHR5cGVvZiBkaW1lbnNpb24gPT09ICdzdHJpbmcnID8gZGltZW5zaW9uIDogZGltZW5zaW9uLnRvQXJyYXkoKSk7CiAgICB9CgogICAgcmV0dXJuIGFycmF5OwogIH07CiAgLyoqCiAgICogR2V0IHRoZSBwcmltaXRpdmUgdmFsdWUgb2YgdGhlIEluZGV4LCBhIHR3byBkaW1lbnNpb25hbCBhcnJheS4KICAgKiBFcXVpdmFsZW50IHRvIEluZGV4LnRvQXJyYXkoKS4KICAgKiBAbWVtYmVyb2YgSW5kZXgKICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5CiAgICovCgoKICBJbmRleC5wcm90b3R5cGUudmFsdWVPZiA9IEluZGV4LnByb3RvdHlwZS50b0FycmF5OwogIC8qKgogICAqIEdldCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbmRleCwgZm9yIGV4YW1wbGUgJ1syOjZdJyBvciAnWzA6MjoxMCwgNDo3LCBbMSwyLDNdXScKICAgKiBAbWVtYmVyb2YgSW5kZXgKICAgKiBAcmV0dXJucyB7U3RyaW5nfSBzdHIKICAgKi8KCiAgSW5kZXgucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgewogICAgdmFyIHN0cmluZ3MgPSBbXTsKCiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB0aGlzLl9kaW1lbnNpb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgdmFyIGRpbWVuc2lvbiA9IHRoaXMuX2RpbWVuc2lvbnNbaV07CgogICAgICBpZiAodHlwZW9mIGRpbWVuc2lvbiA9PT0gJ3N0cmluZycpIHsKICAgICAgICBzdHJpbmdzLnB1c2goSlNPTi5zdHJpbmdpZnkoZGltZW5zaW9uKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RyaW5ncy5wdXNoKGRpbWVuc2lvbi50b1N0cmluZygpKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiAnWycgKyBzdHJpbmdzLmpvaW4oJywgJykgKyAnXSc7CiAgfTsKICAvKioKICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBJbmRleAogICAqIEBtZW1iZXJvZiBJbmRleAogICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOgogICAqICAgICAgICAgICAgICAgICAgIGB7Im1hdGhqcyI6ICJJbmRleCIsICJyYW5nZXMiOiBbeyJtYXRoanMiOiAiUmFuZ2UiLCBzdGFydDogMCwgZW5kOiAxMCwgc3RlcDoxfSwgLi4uXX1gCiAgICovCgoKICBJbmRleC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHsKICAgICAgbWF0aGpzOiAnSW5kZXgnLAogICAgICBkaW1lbnNpb25zOiB0aGlzLl9kaW1lbnNpb25zCiAgICB9OwogIH07CiAgLyoqCiAgICogSW5zdGFudGlhdGUgYW4gSW5kZXggZnJvbSBhIEpTT04gb2JqZWN0CiAgICogQG1lbWJlcm9mIEluZGV4CiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gQSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOgogICAqICAgICAgICAgICAgICAgICAgICAgYHsibWF0aGpzIjogIkluZGV4IiwgImRpbWVuc2lvbnMiOiBbeyJtYXRoanMiOiAiUmFuZ2UiLCBzdGFydDogMCwgZW5kOiAxMCwgc3RlcDoxfSwgLi4uXX1gCiAgICogQHJldHVybiB7SW5kZXh9CiAgICovCgoKICBJbmRleC5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7CiAgICByZXR1cm4gSW5kZXguY3JlYXRlKGpzb24uZGltZW5zaW9ucyk7CiAgfTsKCiAgcmV0dXJuIEluZGV4Owp9LCB7CiAgaXNDbGFzczogdHJ1ZQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdHlwZS9tYXRyaXgvRmlib25hY2NpSGVhcC5qcwoKdmFyIEZpYm9uYWNjaUhlYXBfbmFtZSA9ICdGaWJvbmFjY2lIZWFwJzsKdmFyIEZpYm9uYWNjaUhlYXBfZGVwZW5kZW5jaWVzID0gWydzbWFsbGVyJywgJ2xhcmdlciddOwp2YXIgY3JlYXRlRmlib25hY2NpSGVhcENsYXNzID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoRmlib25hY2NpSGVhcF9uYW1lLCBGaWJvbmFjY2lIZWFwX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgc21hbGxlciA9IF9yZWYuc21hbGxlciwKICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXI7CiAgdmFyIG9uZU92ZXJMb2dQaGkgPSAxLjAgLyBNYXRoLmxvZygoMS4wICsgTWF0aC5zcXJ0KDUuMCkpIC8gMi4wKTsKICAvKioKICAgKiBGaWJvbmFjY2kgSGVhcCBpbXBsZW1lbnRhdGlvbiwgdXNlZCBpbnRlcmFsbHkgZm9yIE1hdHJpeCBtYXRoLgogICAqIEBjbGFzcyBGaWJvbmFjY2lIZWFwCiAgICogQGNvbnN0cnVjdG9yIEZpYm9uYWNjaUhlYXAKICAgKi8KCiAgZnVuY3Rpb24gRmlib25hY2NpSGVhcCgpIHsKICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBGaWJvbmFjY2lIZWFwKSkgewogICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpOwogICAgfSAvLyBpbml0aWFsaXplIGZpZWxkcwoKCiAgICB0aGlzLl9taW5pbXVtID0gbnVsbDsKICAgIHRoaXMuX3NpemUgPSAwOwogIH0KICAvKioKICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvbgogICAqLwoKCiAgRmlib25hY2NpSGVhcC5wcm90b3R5cGUudHlwZSA9ICdGaWJvbmFjY2lIZWFwJzsKICBGaWJvbmFjY2lIZWFwLnByb3RvdHlwZS5pc0ZpYm9uYWNjaUhlYXAgPSB0cnVlOwogIC8qKgogICAqIEluc2VydHMgYSBuZXcgZGF0YSBlbGVtZW50IGludG8gdGhlIGhlYXAuIE5vIGhlYXAgY29uc29saWRhdGlvbiBpcwogICAqIHBlcmZvcm1lZCBhdCB0aGlzIHRpbWUsIHRoZSBuZXcgbm9kZSBpcyBzaW1wbHkgaW5zZXJ0ZWQgaW50byB0aGUgcm9vdAogICAqIGxpc3Qgb2YgdGhpcyBoZWFwLiBSdW5uaW5nIHRpbWU6IE8oMSkgYWN0dWFsLgogICAqIEBtZW1iZXJvZiBGaWJvbmFjY2lIZWFwCiAgICovCgogIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7CiAgICAvLyBjcmVhdGUgbm9kZQogICAgdmFyIG5vZGUgPSB7CiAgICAgIGtleToga2V5LAogICAgICB2YWx1ZTogdmFsdWUsCiAgICAgIGRlZ3JlZTogMAogICAgfTsgLy8gY2hlY2sgd2UgaGF2ZSBhIG5vZGUgaW4gdGhlIG1pbmltdW0KCiAgICBpZiAodGhpcy5fbWluaW11bSkgewogICAgICAvLyBtaW5pbXVtIG5vZGUKICAgICAgdmFyIG1pbmltdW0gPSB0aGlzLl9taW5pbXVtOyAvLyB1cGRhdGUgbGVmdCAmIHJpZ2h0IG9mIG5vZGUKCiAgICAgIG5vZGUubGVmdCA9IG1pbmltdW07CiAgICAgIG5vZGUucmlnaHQgPSBtaW5pbXVtLnJpZ2h0OwogICAgICBtaW5pbXVtLnJpZ2h0ID0gbm9kZTsKICAgICAgbm9kZS5yaWdodC5sZWZ0ID0gbm9kZTsgLy8gdXBkYXRlIG1pbmltdW0gbm9kZSBpbiBoZWFwIGlmIG5lZWRlZAoKICAgICAgaWYgKHNtYWxsZXIoa2V5LCBtaW5pbXVtLmtleSkpIHsKICAgICAgICAvLyBub2RlIGhhcyBhIHNtYWxsZXIga2V5LCB1c2UgaXQgYXMgbWluaW11bQogICAgICAgIHRoaXMuX21pbmltdW0gPSBub2RlOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBzZXQgbGVmdCAmIHJpZ2h0CiAgICAgIG5vZGUubGVmdCA9IG5vZGU7CiAgICAgIG5vZGUucmlnaHQgPSBub2RlOyAvLyB0aGlzIGlzIHRoZSBmaXJzdCBub2RlCgogICAgICB0aGlzLl9taW5pbXVtID0gbm9kZTsKICAgIH0gLy8gaW5jcmVtZW50IG51bWJlciBvZiBub2RlcyBpbiBoZWFwCgoKICAgIHRoaXMuX3NpemUrKzsgLy8gcmV0dXJuIG5vZGUKCiAgICByZXR1cm4gbm9kZTsKICB9OwogIC8qKgogICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBub2RlcyBpbiBoZWFwLiBSdW5uaW5nIHRpbWU6IE8oMSkgYWN0dWFsLgogICAqIEBtZW1iZXJvZiBGaWJvbmFjY2lIZWFwCiAgICovCgoKICBGaWJvbmFjY2lIZWFwLnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHRoaXMuX3NpemU7CiAgfTsKICAvKioKICAgKiBSZW1vdmVzIGFsbCBlbGVtZW50cyBmcm9tIHRoaXMgaGVhcC4KICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcAogICAqLwoKCiAgRmlib25hY2NpSGVhcC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7CiAgICB0aGlzLl9taW5pbXVtID0gbnVsbDsKICAgIHRoaXMuX3NpemUgPSAwOwogIH07CiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBoZWFwIGlzIGVtcHR5LCBvdGhlcndpc2UgZmFsc2UuCiAgICogQG1lbWJlcm9mIEZpYm9uYWNjaUhlYXAKICAgKi8KCgogIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gdGhpcy5fc2l6ZSA9PT0gMDsKICB9OwogIC8qKgogICAqIEV4dHJhY3RzIHRoZSBub2RlIHdpdGggbWluaW11bSBrZXkgZnJvbSBoZWFwLiBBbW9ydGl6ZWQgcnVubmluZwogICAqIHRpbWU6IE8obG9nIG4pLgogICAqIEBtZW1iZXJvZiBGaWJvbmFjY2lIZWFwCiAgICovCgoKICBGaWJvbmFjY2lIZWFwLnByb3RvdHlwZS5leHRyYWN0TWluaW11bSA9IGZ1bmN0aW9uICgpIHsKICAgIC8vIG5vZGUgdG8gcmVtb3ZlCiAgICB2YXIgbm9kZSA9IHRoaXMuX21pbmltdW07IC8vIGNoZWNrIHdlIGhhdmUgYSBtaW5pbXVtCgogICAgaWYgKG5vZGUgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9IC8vIGN1cnJlbnQgbWluaW11bQoKCiAgICB2YXIgbWluaW11bSA9IHRoaXMuX21pbmltdW07IC8vIGdldCBudW1iZXIgb2YgY2hpbGRyZW4KCiAgICB2YXIgbnVtYmVyT2ZDaGlsZHJlbiA9IG5vZGUuZGVncmVlOyAvLyBwb2ludGVyIHRvIHRoZSBmaXJzdCBjaGlsZAoKICAgIHZhciB4ID0gbm9kZS5jaGlsZDsgLy8gZm9yIGVhY2ggY2hpbGQgb2Ygbm9kZSBkby4uLgoKICAgIHdoaWxlIChudW1iZXJPZkNoaWxkcmVuID4gMCkgewogICAgICAvLyBzdG9yZSBub2RlIGluIHJpZ2h0IHNpZGUKICAgICAgdmFyIHRlbXBSaWdodCA9IHgucmlnaHQ7IC8vIHJlbW92ZSB4IGZyb20gY2hpbGQgbGlzdAoKICAgICAgeC5sZWZ0LnJpZ2h0ID0geC5yaWdodDsKICAgICAgeC5yaWdodC5sZWZ0ID0geC5sZWZ0OyAvLyBhZGQgeCB0byByb290IGxpc3Qgb2YgaGVhcAoKICAgICAgeC5sZWZ0ID0gbWluaW11bTsKICAgICAgeC5yaWdodCA9IG1pbmltdW0ucmlnaHQ7CiAgICAgIG1pbmltdW0ucmlnaHQgPSB4OwogICAgICB4LnJpZ2h0LmxlZnQgPSB4OyAvLyBzZXQgUGFyZW50W3hdIHRvIG51bGwKCiAgICAgIHgucGFyZW50ID0gbnVsbDsKICAgICAgeCA9IHRlbXBSaWdodDsKICAgICAgbnVtYmVyT2ZDaGlsZHJlbi0tOwogICAgfSAvLyByZW1vdmUgbm9kZSBmcm9tIHJvb3QgbGlzdCBvZiBoZWFwCgoKICAgIG5vZGUubGVmdC5yaWdodCA9IG5vZGUucmlnaHQ7CiAgICBub2RlLnJpZ2h0LmxlZnQgPSBub2RlLmxlZnQ7IC8vIHVwZGF0ZSBtaW5pbXVtCgogICAgaWYgKG5vZGUgPT09IG5vZGUucmlnaHQpIHsKICAgICAgLy8gZW1wdHkKICAgICAgbWluaW11bSA9IG51bGw7CiAgICB9IGVsc2UgewogICAgICAvLyB1cGRhdGUgbWluaW11bQogICAgICBtaW5pbXVtID0gbm9kZS5yaWdodDsgLy8gd2UgbmVlZCB0byB1cGRhdGUgdGhlIHBvaW50ZXIgdG8gdGhlIHJvb3Qgd2l0aCBtaW5pbXVtIGtleQoKICAgICAgbWluaW11bSA9IF9maW5kTWluaW11bU5vZGUobWluaW11bSwgdGhpcy5fc2l6ZSk7CiAgICB9IC8vIGRlY3JlbWVudCBzaXplIG9mIGhlYXAKCgogICAgdGhpcy5fc2l6ZS0tOyAvLyB1cGRhdGUgbWluaW11bQoKICAgIHRoaXMuX21pbmltdW0gPSBtaW5pbXVtOyAvLyByZXR1cm4gbm9kZQoKICAgIHJldHVybiBub2RlOwogIH07CiAgLyoqCiAgICogUmVtb3ZlcyBhIG5vZGUgZnJvbSB0aGUgaGVhcCBnaXZlbiB0aGUgcmVmZXJlbmNlIHRvIHRoZSBub2RlLiBUaGUgdHJlZXMKICAgKiBpbiB0aGUgaGVhcCB3aWxsIGJlIGNvbnNvbGlkYXRlZCwgaWYgbmVjZXNzYXJ5LiBUaGlzIG9wZXJhdGlvbiBtYXkgZmFpbAogICAqIHRvIHJlbW92ZSB0aGUgY29ycmVjdCBlbGVtZW50IGlmIHRoZXJlIGFyZSBub2RlcyB3aXRoIGtleSB2YWx1ZSAtSW5maW5pdHkuCiAgICogUnVubmluZyB0aW1lOiBPKGxvZyBuKSBhbW9ydGl6ZWQuCiAgICogQG1lbWJlcm9mIEZpYm9uYWNjaUhlYXAKICAgKi8KCgogIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChub2RlKSB7CiAgICAvLyBkZWNyZWFzZSBrZXkgdmFsdWUKICAgIHRoaXMuX21pbmltdW0gPSBfZGVjcmVhc2VLZXkodGhpcy5fbWluaW11bSwgbm9kZSwgLTEpOyAvLyByZW1vdmUgdGhlIHNtYWxsZXN0CgogICAgdGhpcy5leHRyYWN0TWluaW11bSgpOwogIH07CiAgLyoqCiAgICogRGVjcmVhc2VzIHRoZSBrZXkgdmFsdWUgZm9yIGEgaGVhcCBub2RlLCBnaXZlbiB0aGUgbmV3IHZhbHVlIHRvIHRha2Ugb24uCiAgICogVGhlIHN0cnVjdHVyZSBvZiB0aGUgaGVhcCBtYXkgYmUgY2hhbmdlZCBhbmQgd2lsbCBub3QgYmUgY29uc29saWRhdGVkLgogICAqIFJ1bm5pbmcgdGltZTogTygxKSBhbW9ydGl6ZWQuCiAgICogQG1lbWJlcm9mIEZpYm9uYWNjaUhlYXAKICAgKi8KCgogIGZ1bmN0aW9uIF9kZWNyZWFzZUtleShtaW5pbXVtLCBub2RlLCBrZXkpIHsKICAgIC8vIHNldCBub2RlIGtleQogICAgbm9kZS5rZXkgPSBrZXk7IC8vIGdldCBwYXJlbnQgbm9kZQoKICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudDsKCiAgICBpZiAocGFyZW50ICYmIHNtYWxsZXIobm9kZS5rZXksIHBhcmVudC5rZXkpKSB7CiAgICAgIC8vIHJlbW92ZSBub2RlIGZyb20gcGFyZW50CiAgICAgIF9jdXQobWluaW11bSwgbm9kZSwgcGFyZW50KTsgLy8gcmVtb3ZlIGFsbCBub2RlcyBmcm9tIHBhcmVudCB0byB0aGUgcm9vdCBwYXJlbnQKCgogICAgICBfY2FzY2FkaW5nQ3V0KG1pbmltdW0sIHBhcmVudCk7CiAgICB9IC8vIHVwZGF0ZSBtaW5pbXVtIG5vZGUgaWYgbmVlZGVkCgoKICAgIGlmIChzbWFsbGVyKG5vZGUua2V5LCBtaW5pbXVtLmtleSkpIHsKICAgICAgbWluaW11bSA9IG5vZGU7CiAgICB9IC8vIHJldHVybiBtaW5pbXVtCgoKICAgIHJldHVybiBtaW5pbXVtOwogIH0KICAvKioKICAgKiBUaGUgcmV2ZXJzZSBvZiB0aGUgbGluayBvcGVyYXRpb246IHJlbW92ZXMgbm9kZSBmcm9tIHRoZSBjaGlsZCBsaXN0IG9mIHBhcmVudC4KICAgKiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgbWluIGlzIG5vbi1udWxsLiBSdW5uaW5nIHRpbWU6IE8oMSkuCiAgICogQG1lbWJlcm9mIEZpYm9uYWNjaUhlYXAKICAgKi8KCgogIGZ1bmN0aW9uIF9jdXQobWluaW11bSwgbm9kZSwgcGFyZW50KSB7CiAgICAvLyByZW1vdmUgbm9kZSBmcm9tIHBhcmVudCBjaGlsZHJlbiBhbmQgZGVjcmVtZW50IERlZ3JlZVtwYXJlbnRdCiAgICBub2RlLmxlZnQucmlnaHQgPSBub2RlLnJpZ2h0OwogICAgbm9kZS5yaWdodC5sZWZ0ID0gbm9kZS5sZWZ0OwogICAgcGFyZW50LmRlZ3JlZS0tOyAvLyByZXNldCB5LmNoaWxkIGlmIG5lY2Vzc2FyeQoKICAgIGlmIChwYXJlbnQuY2hpbGQgPT09IG5vZGUpIHsKICAgICAgcGFyZW50LmNoaWxkID0gbm9kZS5yaWdodDsKICAgIH0gLy8gcmVtb3ZlIGNoaWxkIGlmIGRlZ3JlZSBpcyAwCgoKICAgIGlmIChwYXJlbnQuZGVncmVlID09PSAwKSB7CiAgICAgIHBhcmVudC5jaGlsZCA9IG51bGw7CiAgICB9IC8vIGFkZCBub2RlIHRvIHJvb3QgbGlzdCBvZiBoZWFwCgoKICAgIG5vZGUubGVmdCA9IG1pbmltdW07CiAgICBub2RlLnJpZ2h0ID0gbWluaW11bS5yaWdodDsKICAgIG1pbmltdW0ucmlnaHQgPSBub2RlOwogICAgbm9kZS5yaWdodC5sZWZ0ID0gbm9kZTsgLy8gc2V0IHBhcmVudFtub2RlXSB0byBudWxsCgogICAgbm9kZS5wYXJlbnQgPSBudWxsOyAvLyBzZXQgbWFya1tub2RlXSB0byBmYWxzZQoKICAgIG5vZGUubWFyayA9IGZhbHNlOwogIH0KICAvKioKICAgKiBQZXJmb3JtcyBhIGNhc2NhZGluZyBjdXQgb3BlcmF0aW9uLiBUaGlzIGN1dHMgbm9kZSBmcm9tIGl0cyBwYXJlbnQgYW5kIHRoZW4KICAgKiBkb2VzIHRoZSBzYW1lIGZvciBpdHMgcGFyZW50LCBhbmQgc28gb24gdXAgdGhlIHRyZWUuCiAgICogUnVubmluZyB0aW1lOiBPKGxvZyBuKTsgTygxKSBleGNsdWRpbmcgdGhlIHJlY3Vyc2lvbi4KICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcAogICAqLwoKCiAgZnVuY3Rpb24gX2Nhc2NhZGluZ0N1dChtaW5pbXVtLCBub2RlKSB7CiAgICAvLyBzdG9yZSBwYXJlbnQgbm9kZQogICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50OyAvLyBpZiB0aGVyZSdzIGEgcGFyZW50Li4uCgogICAgaWYgKCFwYXJlbnQpIHsKICAgICAgcmV0dXJuOwogICAgfSAvLyBpZiBub2RlIGlzIHVubWFya2VkLCBzZXQgaXQgbWFya2VkCgoKICAgIGlmICghbm9kZS5tYXJrKSB7CiAgICAgIG5vZGUubWFyayA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICAvLyBpdCdzIG1hcmtlZCwgY3V0IGl0IGZyb20gcGFyZW50CiAgICAgIF9jdXQobWluaW11bSwgbm9kZSwgcGFyZW50KTsgLy8gY3V0IGl0cyBwYXJlbnQgYXMgd2VsbAoKCiAgICAgIF9jYXNjYWRpbmdDdXQocGFyZW50KTsKICAgIH0KICB9CiAgLyoqCiAgICogTWFrZSB0aGUgZmlyc3Qgbm9kZSBhIGNoaWxkIG9mIHRoZSBzZWNvbmQgb25lLiBSdW5uaW5nIHRpbWU6IE8oMSkgYWN0dWFsLgogICAqIEBtZW1iZXJvZiBGaWJvbmFjY2lIZWFwCiAgICovCgoKICB2YXIgX2xpbmtOb2RlcyA9IGZ1bmN0aW9uIF9saW5rTm9kZXMobm9kZSwgcGFyZW50KSB7CiAgICAvLyByZW1vdmUgbm9kZSBmcm9tIHJvb3QgbGlzdCBvZiBoZWFwCiAgICBub2RlLmxlZnQucmlnaHQgPSBub2RlLnJpZ2h0OwogICAgbm9kZS5yaWdodC5sZWZ0ID0gbm9kZS5sZWZ0OyAvLyBtYWtlIG5vZGUgYSBDaGlsZCBvZiBwYXJlbnQKCiAgICBub2RlLnBhcmVudCA9IHBhcmVudDsKCiAgICBpZiAoIXBhcmVudC5jaGlsZCkgewogICAgICBwYXJlbnQuY2hpbGQgPSBub2RlOwogICAgICBub2RlLnJpZ2h0ID0gbm9kZTsKICAgICAgbm9kZS5sZWZ0ID0gbm9kZTsKICAgIH0gZWxzZSB7CiAgICAgIG5vZGUubGVmdCA9IHBhcmVudC5jaGlsZDsKICAgICAgbm9kZS5yaWdodCA9IHBhcmVudC5jaGlsZC5yaWdodDsKICAgICAgcGFyZW50LmNoaWxkLnJpZ2h0ID0gbm9kZTsKICAgICAgbm9kZS5yaWdodC5sZWZ0ID0gbm9kZTsKICAgIH0gLy8gaW5jcmVhc2UgZGVncmVlW3BhcmVudF0KCgogICAgcGFyZW50LmRlZ3JlZSsrOyAvLyBzZXQgbWFya1tub2RlXSBmYWxzZQoKICAgIG5vZGUubWFyayA9IGZhbHNlOwogIH07CgogIGZ1bmN0aW9uIF9maW5kTWluaW11bU5vZGUobWluaW11bSwgc2l6ZSkgewogICAgLy8gdG8gZmluZCB0cmVlcyBvZiB0aGUgc2FtZSBkZWdyZWUgZWZmaWNpZW50bHkgd2UgdXNlIGFuIGFycmF5IG9mIGxlbmd0aCBPKGxvZyBuKSBpbiB3aGljaCB3ZSBrZWVwIGEgcG9pbnRlciB0byBvbmUgcm9vdCBvZiBlYWNoIGRlZ3JlZQogICAgdmFyIGFycmF5U2l6ZSA9IE1hdGguZmxvb3IoTWF0aC5sb2coc2l6ZSkgKiBvbmVPdmVyTG9nUGhpKSArIDE7IC8vIGNyZWF0ZSBsaXN0IHdpdGggaW5pdGlhbCBjYXBhY2l0eQoKICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShhcnJheVNpemUpOyAvLyBmaW5kIHRoZSBudW1iZXIgb2Ygcm9vdCBub2Rlcy4KCiAgICB2YXIgbnVtUm9vdHMgPSAwOwogICAgdmFyIHggPSBtaW5pbXVtOwoKICAgIGlmICh4KSB7CiAgICAgIG51bVJvb3RzKys7CiAgICAgIHggPSB4LnJpZ2h0OwoKICAgICAgd2hpbGUgKHggIT09IG1pbmltdW0pIHsKICAgICAgICBudW1Sb290cysrOwogICAgICAgIHggPSB4LnJpZ2h0OwogICAgICB9CiAgICB9IC8vIHZhcnMKCgogICAgdmFyIHk7IC8vIEZvciBlYWNoIG5vZGUgaW4gcm9vdCBsaXN0IGRvLi4uCgogICAgd2hpbGUgKG51bVJvb3RzID4gMCkgewogICAgICAvLyBhY2Nlc3MgdGhpcyBub2RlJ3MgZGVncmVlLi4KICAgICAgdmFyIGQgPSB4LmRlZ3JlZTsgLy8gZ2V0IG5leHQgbm9kZQoKICAgICAgdmFyIG5leHQgPSB4LnJpZ2h0OyAvLyBjaGVjayBpZiB0aGVyZSBpcyBhIG5vZGUgYWxyZWFkeSBpbiBhcnJheSB3aXRoIHRoZSBzYW1lIGRlZ3JlZQoKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAvLyBnZXQgbm9kZSB3aXRoIHRoZSBzYW1lIGRlZ3JlZSBpcyBhbnkKICAgICAgICB5ID0gYXJyYXlbZF07CgogICAgICAgIGlmICgheSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSAvLyBtYWtlIG9uZSBub2RlIHdpdGggdGhlIHNhbWUgZGVncmVlIGEgY2hpbGQgb2YgdGhlIG90aGVyLCBkbyB0aGlzIGJhc2VkIG9uIHRoZSBrZXkgdmFsdWUuCgoKICAgICAgICBpZiAobGFyZ2VyKHgua2V5LCB5LmtleSkpIHsKICAgICAgICAgIHZhciB0ZW1wID0geTsKICAgICAgICAgIHkgPSB4OwogICAgICAgICAgeCA9IHRlbXA7CiAgICAgICAgfSAvLyBtYWtlIHkgYSBjaGlsZCBvZiB4CgoKICAgICAgICBfbGlua05vZGVzKHksIHgpOyAvLyB3ZSBoYXZlIGhhbmRsZWQgdGhpcyBkZWdyZWUsIGdvIHRvIG5leHQgb25lLgoKCiAgICAgICAgYXJyYXlbZF0gPSBudWxsOwogICAgICAgIGQrKzsKICAgICAgfSAvLyBzYXZlIHRoaXMgbm9kZSBmb3IgbGF0ZXIgd2hlbiB3ZSBtaWdodCBlbmNvdW50ZXIgYW5vdGhlciBvZiB0aGUgc2FtZSBkZWdyZWUuCgoKICAgICAgYXJyYXlbZF0gPSB4OyAvLyBtb3ZlIGZvcndhcmQgdGhyb3VnaCBsaXN0LgoKICAgICAgeCA9IG5leHQ7CiAgICAgIG51bVJvb3RzLS07CiAgICB9IC8vIFNldCBtaW4gdG8gbnVsbCAoZWZmZWN0aXZlbHkgbG9zaW5nIHRoZSByb290IGxpc3QpIGFuZCByZWNvbnN0cnVjdCB0aGUgcm9vdCBsaXN0IGZyb20gdGhlIGFycmF5IGVudHJpZXMgaW4gYXJyYXlbXS4KCgogICAgbWluaW11bSA9IG51bGw7IC8vIGxvb3Agbm9kZXMgaW4gYXJyYXkKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5U2l6ZTsgaSsrKSB7CiAgICAgIC8vIGdldCBjdXJyZW50IG5vZGUKICAgICAgeSA9IGFycmF5W2ldOwoKICAgICAgaWYgKCF5KSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0gLy8gY2hlY2sgaWYgd2UgaGF2ZSBhIGxpbmtlZCBsaXN0CgoKICAgICAgaWYgKG1pbmltdW0pIHsKICAgICAgICAvLyBGaXJzdCByZW1vdmUgbm9kZSBmcm9tIHJvb3QgbGlzdC4KICAgICAgICB5LmxlZnQucmlnaHQgPSB5LnJpZ2h0OwogICAgICAgIHkucmlnaHQubGVmdCA9IHkubGVmdDsgLy8gbm93IGFkZCB0byByb290IGxpc3QsIGFnYWluLgoKICAgICAgICB5LmxlZnQgPSBtaW5pbXVtOwogICAgICAgIHkucmlnaHQgPSBtaW5pbXVtLnJpZ2h0OwogICAgICAgIG1pbmltdW0ucmlnaHQgPSB5OwogICAgICAgIHkucmlnaHQubGVmdCA9IHk7IC8vIGNoZWNrIGlmIHRoaXMgaXMgYSBuZXcgbWluLgoKICAgICAgICBpZiAoc21hbGxlcih5LmtleSwgbWluaW11bS5rZXkpKSB7CiAgICAgICAgICBtaW5pbXVtID0geTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWluaW11bSA9IHk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbWluaW11bTsKICB9CgogIHJldHVybiBGaWJvbmFjY2lIZWFwOwp9LCB7CiAgaXNDbGFzczogdHJ1ZQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdHlwZS9tYXRyaXgvU3BhLmpzCgp2YXIgU3BhX25hbWUgPSAnU3BhJzsKdmFyIFNwYV9kZXBlbmRlbmNpZXMgPSBbJ2FkZFNjYWxhcicsICdlcXVhbFNjYWxhcicsICdGaWJvbmFjY2lIZWFwJ107CnZhciBjcmVhdGVTcGFDbGFzcyA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKFNwYV9uYW1lLCBTcGFfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhciwKICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLAogICAgICBGaWJvbmFjY2lIZWFwID0gX3JlZi5GaWJvbmFjY2lIZWFwOwoKICAvKioKICAgKiBBbiBvcmRlcmVkIFNwYXJzZSBBY2N1bXVsYXRvciBpcyBhIHJlcHJlc2VudGF0aW9uIGZvciBhIHNwYXJzZSB2ZWN0b3IgdGhhdCBpbmNsdWRlcyBhIGRlbnNlIGFycmF5CiAgICogb2YgdGhlIHZlY3RvciBlbGVtZW50cyBhbmQgYW4gb3JkZXJlZCBsaXN0IG9mIG5vbi16ZXJvIGVsZW1lbnRzLgogICAqLwogIGZ1bmN0aW9uIFNwYSgpIHsKICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTcGEpKSB7CiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7CiAgICB9IC8vIGFsbG9jYXRlIHZlY3RvciwgVE9ETyB1c2UgdHlwZWQgYXJyYXlzCgoKICAgIHRoaXMuX3ZhbHVlcyA9IFtdOwogICAgdGhpcy5faGVhcCA9IG5ldyBGaWJvbmFjY2lIZWFwKCk7CiAgfQogIC8qKgogICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uCiAgICovCgoKICBTcGEucHJvdG90eXBlLnR5cGUgPSAnU3BhJzsKICBTcGEucHJvdG90eXBlLmlzU3BhID0gdHJ1ZTsKICAvKioKICAgKiBTZXQgdGhlIHZhbHVlIGZvciBpbmRleCBpLgogICAqCiAgICogQHBhcmFtIHtudW1iZXJ9IGkgICAgICAgICAgICAgICAgICAgICAgIFRoZSBpbmRleAogICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleH0gICBUaGUgdmFsdWUgYXQgaW5kZXggaQogICAqLwoKICBTcGEucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChpLCB2KSB7CiAgICAvLyBjaGVjayB3ZSBoYXZlIGEgdmFsdWUgQCBpCiAgICBpZiAoIXRoaXMuX3ZhbHVlc1tpXSkgewogICAgICAvLyBpbnNlcnQgaW4gaGVhcAogICAgICB2YXIgbm9kZSA9IHRoaXMuX2hlYXAuaW5zZXJ0KGksIHYpOyAvLyBzZXQgdGhlIHZhbHVlIEAgaQoKCiAgICAgIHRoaXMuX3ZhbHVlc1tpXSA9IG5vZGU7CiAgICB9IGVsc2UgewogICAgICAvLyB1cGRhdGUgdGhlIHZhbHVlIEAgaQogICAgICB0aGlzLl92YWx1ZXNbaV0udmFsdWUgPSB2OwogICAgfQogIH07CgogIFNwYS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGkpIHsKICAgIHZhciBub2RlID0gdGhpcy5fdmFsdWVzW2ldOwoKICAgIGlmIChub2RlKSB7CiAgICAgIHJldHVybiBub2RlLnZhbHVlOwogICAgfQoKICAgIHJldHVybiAwOwogIH07CgogIFNwYS5wcm90b3R5cGUuYWNjdW11bGF0ZSA9IGZ1bmN0aW9uIChpLCB2KSB7CiAgICAvLyBub2RlIEAgaQogICAgdmFyIG5vZGUgPSB0aGlzLl92YWx1ZXNbaV07CgogICAgaWYgKCFub2RlKSB7CiAgICAgIC8vIGluc2VydCBpbiBoZWFwCiAgICAgIG5vZGUgPSB0aGlzLl9oZWFwLmluc2VydChpLCB2KTsgLy8gaW5pdGlhbGl6ZSB2YWx1ZQoKICAgICAgdGhpcy5fdmFsdWVzW2ldID0gbm9kZTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIGFjY3VtdWxhdGUgdmFsdWUKICAgICAgbm9kZS52YWx1ZSA9IGFkZFNjYWxhcihub2RlLnZhbHVlLCB2KTsKICAgIH0KICB9OwoKICBTcGEucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoZnJvbSwgdG8sIGNhbGxiYWNrKSB7CiAgICAvLyByZWZlcmVuY2VzCiAgICB2YXIgaGVhcCA9IHRoaXMuX2hlYXA7CiAgICB2YXIgdmFsdWVzID0gdGhpcy5fdmFsdWVzOyAvLyBub2RlcwoKICAgIHZhciBub2RlcyA9IFtdOyAvLyBub2RlIHdpdGggbWluaW11bSBrZXksIHNhdmUgaXQKCiAgICB2YXIgbm9kZSA9IGhlYXAuZXh0cmFjdE1pbmltdW0oKTsKCiAgICBpZiAobm9kZSkgewogICAgICBub2Rlcy5wdXNoKG5vZGUpOwogICAgfSAvLyBleHRyYWN0IG5vZGVzIGZyb20gaGVhcCAob3JkZXJlZCkKCgogICAgd2hpbGUgKG5vZGUgJiYgbm9kZS5rZXkgPD0gdG8pIHsKICAgICAgLy8gY2hlY2sgaXQgaXMgaW4gcmFuZ2UKICAgICAgaWYgKG5vZGUua2V5ID49IGZyb20pIHsKICAgICAgICAvLyBjaGVjayB2YWx1ZSBpcyBub3QgemVybwogICAgICAgIGlmICghZXF1YWxTY2FsYXIobm9kZS52YWx1ZSwgMCkpIHsKICAgICAgICAgIC8vIGludm9rZSBjYWxsYmFjawogICAgICAgICAgY2FsbGJhY2sobm9kZS5rZXksIG5vZGUudmFsdWUsIHRoaXMpOwogICAgICAgIH0KICAgICAgfSAvLyBleHRyYWN0IG5leHQgbm9kZSwgc2F2ZSBpdAoKCiAgICAgIG5vZGUgPSBoZWFwLmV4dHJhY3RNaW5pbXVtKCk7CgogICAgICBpZiAobm9kZSkgewogICAgICAgIG5vZGVzLnB1c2gobm9kZSk7CiAgICAgIH0KICAgIH0gLy8gcmVpbnNlcnQgYWxsIG5vZGVzIGluIGhlYXAKCgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewogICAgICAvLyBjdXJyZW50IG5vZGUKICAgICAgdmFyIG4gPSBub2Rlc1tpXTsgLy8gaW5zZXJ0IG5vZGUgaW4gaGVhcAoKICAgICAgbm9kZSA9IGhlYXAuaW5zZXJ0KG4ua2V5LCBuLnZhbHVlKTsgLy8gdXBkYXRlIHZhbHVlcwoKICAgICAgdmFsdWVzW25vZGUua2V5XSA9IG5vZGU7CiAgICB9CiAgfTsKCiAgU3BhLnByb3RvdHlwZS5zd2FwID0gZnVuY3Rpb24gKGksIGopIHsKICAgIC8vIG5vZGUgQCBpIGFuZCBqCiAgICB2YXIgbm9kZWkgPSB0aGlzLl92YWx1ZXNbaV07CiAgICB2YXIgbm9kZWogPSB0aGlzLl92YWx1ZXNbal07IC8vIGNoZWNrIHdlIG5lZWQgdG8gaW5zZXJ0IGluZGVjZXMKCiAgICBpZiAoIW5vZGVpICYmIG5vZGVqKSB7CiAgICAgIC8vIGluc2VydCBpbiBoZWFwCiAgICAgIG5vZGVpID0gdGhpcy5faGVhcC5pbnNlcnQoaSwgbm9kZWoudmFsdWUpOyAvLyByZW1vdmUgZnJvbSBoZWFwCgogICAgICB0aGlzLl9oZWFwLnJlbW92ZShub2Rlaik7IC8vIHNldCB2YWx1ZXMKCgogICAgICB0aGlzLl92YWx1ZXNbaV0gPSBub2RlaTsKICAgICAgdGhpcy5fdmFsdWVzW2pdID0gdW5kZWZpbmVkOwogICAgfSBlbHNlIGlmIChub2RlaSAmJiAhbm9kZWopIHsKICAgICAgLy8gaW5zZXJ0IGluIGhlYXAKICAgICAgbm9kZWogPSB0aGlzLl9oZWFwLmluc2VydChqLCBub2RlaS52YWx1ZSk7IC8vIHJlbW92ZSBmcm9tIGhlYXAKCiAgICAgIHRoaXMuX2hlYXAucmVtb3ZlKG5vZGVpKTsgLy8gc2V0IHZhbHVlcwoKCiAgICAgIHRoaXMuX3ZhbHVlc1tqXSA9IG5vZGVqOwogICAgICB0aGlzLl92YWx1ZXNbaV0gPSB1bmRlZmluZWQ7CiAgICB9IGVsc2UgaWYgKG5vZGVpICYmIG5vZGVqKSB7CiAgICAgIC8vIHN3YXAgdmFsdWVzCiAgICAgIHZhciB2ID0gbm9kZWkudmFsdWU7CiAgICAgIG5vZGVpLnZhbHVlID0gbm9kZWoudmFsdWU7CiAgICAgIG5vZGVqLnZhbHVlID0gdjsKICAgIH0KICB9OwoKICByZXR1cm4gU3BhOwp9LCB7CiAgaXNDbGFzczogdHJ1ZQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdXRpbHMvYmlnbnVtYmVyL2NvbnN0YW50cy5qcwoKLyoqCiAqIENhbGN1bGF0ZSBCaWdOdW1iZXIgZQogKiBAcGFyYW0ge2Z1bmN0aW9ufSBCaWdOdW1iZXIgICBCaWdOdW1iZXIgY29uc3RydWN0b3IKICogQHJldHVybnMge0JpZ051bWJlcn0gUmV0dXJucyBlCiAqLwoKdmFyIGNyZWF0ZUJpZ051bWJlckUgPSBtZW1vaXplKGZ1bmN0aW9uIChCaWdOdW1iZXIpIHsKICByZXR1cm4gbmV3IEJpZ051bWJlcigxKS5leHAoKTsKfSwgaGFzaGVyKTsKLyoqCiAqIENhbGN1bGF0ZSBCaWdOdW1iZXIgZ29sZGVuIHJhdGlvLCBwaGkgPSAoMStzcXJ0KDUpKS8yCiAqIEBwYXJhbSB7ZnVuY3Rpb259IEJpZ051bWJlciAgIEJpZ051bWJlciBjb25zdHJ1Y3RvcgogKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHBoaQogKi8KCnZhciBjcmVhdGVCaWdOdW1iZXJQaGkgPSBtZW1vaXplKGZ1bmN0aW9uIChCaWdOdW1iZXIpIHsKICByZXR1cm4gbmV3IEJpZ051bWJlcigxKS5wbHVzKG5ldyBCaWdOdW1iZXIoNSkuc3FydCgpKS5kaXYoMik7Cn0sIGhhc2hlcik7Ci8qKgogKiBDYWxjdWxhdGUgQmlnTnVtYmVyIHBpLgogKiBAcGFyYW0ge2Z1bmN0aW9ufSBCaWdOdW1iZXIgICBCaWdOdW1iZXIgY29uc3RydWN0b3IKICogQHJldHVybnMge0JpZ051bWJlcn0gUmV0dXJucyBwaQogKi8KCnZhciBjcmVhdGVCaWdOdW1iZXJQaSA9IG1lbW9pemUoZnVuY3Rpb24gKEJpZ051bWJlcikgewogIHJldHVybiBCaWdOdW1iZXIuYWNvcygtMSk7Cn0sIGhhc2hlcik7Ci8qKgogKiBDYWxjdWxhdGUgQmlnTnVtYmVyIHRhdSwgdGF1ID0gMiAqIHBpCiAqIEBwYXJhbSB7ZnVuY3Rpb259IEJpZ051bWJlciAgIEJpZ051bWJlciBjb25zdHJ1Y3RvcgogKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHRhdQogKi8KCnZhciBjcmVhdGVCaWdOdW1iZXJUYXUgPSBtZW1vaXplKGZ1bmN0aW9uIChCaWdOdW1iZXIpIHsKICByZXR1cm4gY3JlYXRlQmlnTnVtYmVyUGkoQmlnTnVtYmVyKS50aW1lcygyKTsKfSwgaGFzaGVyKTsKLyoqCiAqIENyZWF0ZSBhIGhhc2ggZm9yIGEgQmlnTnVtYmVyIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLiBUaGUgY3JlYXRlZCBoYXMgaXMKICogdGhlIGNvbmZpZ3VyZWQgcHJlY2lzaW9uCiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgICAgICAgICBTdXBwb3NlZCB0byBjb250YWluIGEgc2luZ2xlIGVudHJ5IHdpdGgKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgQmlnTnVtYmVyIGNvbnN0cnVjdG9yCiAqIEByZXR1cm4ge251bWJlcn0gcHJlY2lzaW9uCiAqIEBwcml2YXRlCiAqLwoKZnVuY3Rpb24gaGFzaGVyKGFyZ3MpIHsKICByZXR1cm4gYXJnc1swXS5wcmVjaXNpb247Cn0KLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdHlwZS91bml0L1VuaXQuanMKZnVuY3Rpb24gVW5pdF90eXBlb2Yob2JqKSB7ICJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7IGlmICh0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICJzeW1ib2wiKSB7IFVuaXRfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IFVuaXRfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/ICJzeW1ib2wiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gVW5pdF90eXBlb2Yob2JqKTsgfQoKZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0KCgoKCgoKdmFyIFVuaXRfbmFtZSA9ICdVbml0JzsKdmFyIFVuaXRfZGVwZW5kZW5jaWVzID0gWyc/b24nLCAnY29uZmlnJywgJ2FkZFNjYWxhcicsICdzdWJ0cmFjdCcsICdtdWx0aXBseVNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAncG93JywgJ2FicycsICdmaXgnLCAncm91bmQnLCAnZXF1YWwnLCAnaXNOdW1lcmljJywgJ2Zvcm1hdCcsICdudW1iZXInLCAnQ29tcGxleCcsICdCaWdOdW1iZXInLCAnRnJhY3Rpb24nXTsKdmFyIGNyZWF0ZVVuaXRDbGFzcyA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKFVuaXRfbmFtZSwgVW5pdF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIG9uID0gX3JlZi5vbiwKICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLAogICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsCiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhciwKICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsCiAgICAgIHBvdyA9IF9yZWYucG93LAogICAgICBhYnMgPSBfcmVmLmFicywKICAgICAgZml4ID0gX3JlZi5maXgsCiAgICAgIHJvdW5kID0gX3JlZi5yb3VuZCwKICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsLAogICAgICBpc051bWVyaWMgPSBfcmVmLmlzTnVtZXJpYywKICAgICAgZm9ybWF0ID0gX3JlZi5mb3JtYXQsCiAgICAgIG51bWJlciA9IF9yZWYubnVtYmVyLAogICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LAogICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXIsCiAgICAgIF9GcmFjdGlvbiA9IF9yZWYuRnJhY3Rpb247CiAgdmFyIHRvTnVtYmVyID0gbnVtYmVyOwogIC8qKgogICAqIEEgdW5pdCBjYW4gYmUgY29uc3RydWN0ZWQgaW4gdGhlIGZvbGxvd2luZyB3YXlzOgogICAqCiAgICogICAgIGNvbnN0IGEgPSBuZXcgVW5pdCh2YWx1ZSwgbmFtZSkKICAgKiAgICAgY29uc3QgYiA9IG5ldyBVbml0KG51bGwsIG5hbWUpCiAgICogICAgIGNvbnN0IGMgPSBVbml0LnBhcnNlKHN0cikKICAgKgogICAqIEV4YW1wbGUgdXNhZ2U6CiAgICoKICAgKiAgICAgY29uc3QgYSA9IG5ldyBVbml0KDUsICdjbScpICAgICAgICAgICAgICAgLy8gNTAgbW0KICAgKiAgICAgY29uc3QgYiA9IFVuaXQucGFyc2UoJzIzIGtnJykgICAgICAgICAgICAgLy8gMjMga2cKICAgKiAgICAgY29uc3QgYyA9IG1hdGguaW4oYSwgbmV3IFVuaXQobnVsbCwgJ20nKSAgLy8gMC4wNSBtCiAgICogICAgIGNvbnN0IGQgPSBuZXcgVW5pdCg5LjgxLCAibS9zXjIiKSAgICAgICAgIC8vIDkuODEgbS9zXjIKICAgKgogICAqIEBjbGFzcyBVbml0CiAgICogQGNvbnN0cnVjdG9yIFVuaXQKICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IGJvb2xlYW59IFt2YWx1ZV0gIEEgdmFsdWUgbGlrZSA1LjIKICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWVdICAgQSB1bml0IG5hbWUgbGlrZSAiY20iIG9yICJpbmNoIiwgb3IgYSBkZXJpdmVkIHVuaXQgb2YgdGhlIGZvcm06ICJ1MVteZXgxXSBbdTJbXmV4Ml0gLi4uXSBbLyB1M1teZXgzXSBbdTRbXmV4NF1dXSIsIHN1Y2ggYXMgImtnIG1eMi9zXjIiLCB3aGVyZSBlYWNoIHVuaXQgYXBwZWFyaW5nIGFmdGVyIHRoZSBmb3J3YXJkIHNsYXNoIGlzIHRha2VuIHRvIGJlIGluIHRoZSBkZW5vbWluYXRvci4gImtnIG1eMiBzXi0yIiBpcyBhIHN5bm9ueW0gYW5kIGlzIGFsc28gYWNjZXB0YWJsZS4gQW55IG9mIHRoZSB1bml0cyBjYW4gaW5jbHVkZSBhIHByZWZpeC4KICAgKi8KCiAgZnVuY3Rpb24gVW5pdCh2YWx1ZSwgbmFtZSkgewogICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFVuaXQpKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7CiAgICB9CgogICAgaWYgKCEodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCBpc051bWVyaWModmFsdWUpIHx8IE9iamVjdChpc1siaiIgLyogaXNDb21wbGV4ICovXSkodmFsdWUpKSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBwYXJhbWV0ZXIgaW4gVW5pdCBjb25zdHJ1Y3RvciBtdXN0IGJlIG51bWJlciwgQmlnTnVtYmVyLCBGcmFjdGlvbiwgQ29tcGxleCwgb3IgdW5kZWZpbmVkJyk7CiAgICB9CgogICAgaWYgKG5hbWUgIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IG5hbWUgPT09ICcnKSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTZWNvbmQgcGFyYW1ldGVyIGluIFVuaXQgY29uc3RydWN0b3IgbXVzdCBiZSBhIHN0cmluZycpOwogICAgfQoKICAgIGlmIChuYW1lICE9PSB1bmRlZmluZWQpIHsKICAgICAgdmFyIHUgPSBVbml0LnBhcnNlKG5hbWUpOwogICAgICB0aGlzLnVuaXRzID0gdS51bml0czsKICAgICAgdGhpcy5kaW1lbnNpb25zID0gdS5kaW1lbnNpb25zOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy51bml0cyA9IFt7CiAgICAgICAgdW5pdDogVU5JVF9OT05FLAogICAgICAgIHByZWZpeDogUFJFRklYRVMuTk9ORSwKICAgICAgICAvLyBsaW5rIHRvIGEgbGlzdCB3aXRoIHN1cHBvcnRlZCBwcmVmaXhlcwogICAgICAgIHBvd2VyOiAwCiAgICAgIH1dOwogICAgICB0aGlzLmRpbWVuc2lvbnMgPSBbXTsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQkFTRV9ESU1FTlNJT05TLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdGhpcy5kaW1lbnNpb25zW2ldID0gMDsKICAgICAgfQogICAgfQoKICAgIHRoaXMudmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsID8gdGhpcy5fbm9ybWFsaXplKHZhbHVlKSA6IG51bGw7CiAgICB0aGlzLmZpeFByZWZpeCA9IGZhbHNlOyAvLyBpZiB0cnVlLCBmdW5jdGlvbiBmb3JtYXQgd2lsbCBub3Qgc2VhcmNoIGZvciB0aGUKICAgIC8vIGJlc3QgcHJlZml4IGJ1dCBsZWF2ZSBpdCBhcyBpbml0aWFsbHkgcHJvdmlkZWQuCiAgICAvLyBmaXhQcmVmaXggaXMgc2V0IHRydWUgYnkgdGhlIG1ldGhvZCBVbml0LnRvCiAgICAvLyBUaGUganVzdGlmaWNhdGlvbiBiZWhpbmQgdGhpcyBpcyB0aGF0IGlmIHRoZSBjb25zdHJ1Y3RvciBpcyBleHBsaWNpdGx5IGNhbGxlZCwKICAgIC8vIHRoZSBjYWxsZXIgd2lzaGVzIHRoZSB1bml0cyB0byBiZSByZXR1cm5lZCBleGFjdGx5IGFzIGhlIHN1cHBsaWVkLgoKICAgIHRoaXMuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uID0gdHJ1ZTsKICB9CiAgLyoqCiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb24KICAgKi8KCgogIFVuaXQucHJvdG90eXBlLnR5cGUgPSAnVW5pdCc7CiAgVW5pdC5wcm90b3R5cGUuaXNVbml0ID0gdHJ1ZTsgLy8gcHJpdmF0ZSB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlIFVuaXQgcGFyc2VyCgogIHZhciB0ZXh0LCBpbmRleCwgYzsKCiAgZnVuY3Rpb24gc2tpcFdoaXRlc3BhY2UoKSB7CiAgICB3aGlsZSAoYyA9PT0gJyAnIHx8IGMgPT09ICdcdCcpIHsKICAgICAgbmV4dCgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaXNEaWdpdERvdChjKSB7CiAgICByZXR1cm4gYyA+PSAnMCcgJiYgYyA8PSAnOScgfHwgYyA9PT0gJy4nOwogIH0KCiAgZnVuY3Rpb24gaXNEaWdpdChjKSB7CiAgICByZXR1cm4gYyA+PSAnMCcgJiYgYyA8PSAnOSc7CiAgfQoKICBmdW5jdGlvbiBuZXh0KCkgewogICAgaW5kZXgrKzsKICAgIGMgPSB0ZXh0LmNoYXJBdChpbmRleCk7CiAgfQoKICBmdW5jdGlvbiByZXZlcnQob2xkSW5kZXgpIHsKICAgIGluZGV4ID0gb2xkSW5kZXg7CiAgICBjID0gdGV4dC5jaGFyQXQoaW5kZXgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VOdW1iZXIoKSB7CiAgICB2YXIgbnVtYmVyID0gJyc7CiAgICB2YXIgb2xkSW5kZXggPSBpbmRleDsKCiAgICBpZiAoYyA9PT0gJysnKSB7CiAgICAgIG5leHQoKTsKICAgIH0gZWxzZSBpZiAoYyA9PT0gJy0nKSB7CiAgICAgIG51bWJlciArPSBjOwogICAgICBuZXh0KCk7CiAgICB9CgogICAgaWYgKCFpc0RpZ2l0RG90KGMpKSB7CiAgICAgIC8vIGEgKyBvciAtIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBkaWdpdAogICAgICByZXZlcnQob2xkSW5kZXgpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0gLy8gZ2V0IG51bWJlciwgY2FuIGhhdmUgYSBzaW5nbGUgZG90CgoKICAgIGlmIChjID09PSAnLicpIHsKICAgICAgbnVtYmVyICs9IGM7CiAgICAgIG5leHQoKTsKCiAgICAgIGlmICghaXNEaWdpdChjKSkgewogICAgICAgIC8vIHRoaXMgaXMgbm8gbGVnYWwgbnVtYmVyLCBpdCBpcyBqdXN0IGEgZG90CiAgICAgICAgcmV2ZXJ0KG9sZEluZGV4KTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgd2hpbGUgKGlzRGlnaXQoYykpIHsKICAgICAgICBudW1iZXIgKz0gYzsKICAgICAgICBuZXh0KCk7CiAgICAgIH0KCiAgICAgIGlmIChjID09PSAnLicpIHsKICAgICAgICBudW1iZXIgKz0gYzsKICAgICAgICBuZXh0KCk7CiAgICAgIH0KICAgIH0KCiAgICB3aGlsZSAoaXNEaWdpdChjKSkgewogICAgICBudW1iZXIgKz0gYzsKICAgICAgbmV4dCgpOwogICAgfSAvLyBjaGVjayBmb3IgZXhwb25lbnRpYWwgbm90YXRpb24gbGlrZSAiMi4zZS00IiBvciAiMS4yM2U1MCIKCgogICAgaWYgKGMgPT09ICdFJyB8fCBjID09PSAnZScpIHsKICAgICAgLy8gVGhlIGdyYW1tYXIgYnJhbmNoZXMgaGVyZS4gVGhpcyBjb3VsZCBlaXRoZXIgYmUgcGFydCBvZiBhbiBleHBvbmVudCBvciB0aGUgc3RhcnQgb2YgYSB1bml0IHRoYXQgYmVnaW5zIHdpdGggdGhlIGxldHRlciBlLCBzdWNoIGFzICI0ZXhhYnl0ZXMiCiAgICAgIHZhciB0ZW50YXRpdmVOdW1iZXIgPSAnJzsKICAgICAgdmFyIHRlbnRhdGl2ZUluZGV4ID0gaW5kZXg7CiAgICAgIHRlbnRhdGl2ZU51bWJlciArPSBjOwogICAgICBuZXh0KCk7CgogICAgICBpZiAoYyA9PT0gJysnIHx8IGMgPT09ICctJykgewogICAgICAgIHRlbnRhdGl2ZU51bWJlciArPSBjOwogICAgICAgIG5leHQoKTsKICAgICAgfSAvLyBTY2llbnRpZmljIG5vdGF0aW9uIE1VU1QgYmUgZm9sbG93ZWQgYnkgYW4gZXhwb25lbnQgKG90aGVyd2lzZSB3ZSBhc3N1bWUgaXQgaXMgbm90IHNjaWVudGlmaWMgbm90YXRpb24pCgoKICAgICAgaWYgKCFpc0RpZ2l0KGMpKSB7CiAgICAgICAgLy8gVGhlIGUgb3IgRSBtdXN0IGJlbG9uZyB0byBzb21ldGhpbmcgZWxzZSwgc28gcmV0dXJuIHRoZSBudW1iZXIgd2l0aG91dCB0aGUgZSBvciBFLgogICAgICAgIHJldmVydCh0ZW50YXRpdmVJbmRleCk7CiAgICAgICAgcmV0dXJuIG51bWJlcjsKICAgICAgfSAvLyBXZSBjYW4gbm93IHNhZmVseSBzYXkgdGhhdCB0aGlzIGlzIHNjaWVudGlmaWMgbm90YXRpb24uCgoKICAgICAgbnVtYmVyID0gbnVtYmVyICsgdGVudGF0aXZlTnVtYmVyOwoKICAgICAgd2hpbGUgKGlzRGlnaXQoYykpIHsKICAgICAgICBudW1iZXIgKz0gYzsKICAgICAgICBuZXh0KCk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbnVtYmVyOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VVbml0KCkgewogICAgdmFyIHVuaXROYW1lID0gJyc7IC8vIEFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIG9ubHk7IG1hdGNoZXMgW2EtekEtWjAtOV0KCiAgICB2YXIgY29kZSA9IHRleHQuY2hhckNvZGVBdChpbmRleCk7CgogICAgd2hpbGUgKGNvZGUgPj0gNDggJiYgY29kZSA8PSA1NyB8fCBjb2RlID49IDY1ICYmIGNvZGUgPD0gOTAgfHwgY29kZSA+PSA5NyAmJiBjb2RlIDw9IDEyMikgewogICAgICB1bml0TmFtZSArPSBjOwogICAgICBuZXh0KCk7CiAgICAgIGNvZGUgPSB0ZXh0LmNoYXJDb2RlQXQoaW5kZXgpOwogICAgfSAvLyBNdXN0IGJlZ2luIHdpdGggW2EtekEtWl0KCgogICAgY29kZSA9IHVuaXROYW1lLmNoYXJDb2RlQXQoMCk7CgogICAgaWYgKGNvZGUgPj0gNjUgJiYgY29kZSA8PSA5MCB8fCBjb2RlID49IDk3ICYmIGNvZGUgPD0gMTIyKSB7CiAgICAgIHJldHVybiB1bml0TmFtZSB8fCBudWxsOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZUNoYXJhY3Rlcih0b0ZpbmQpIHsKICAgIGlmIChjID09PSB0b0ZpbmQpIHsKICAgICAgbmV4dCgpOwogICAgICByZXR1cm4gdG9GaW5kOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQogIC8qKgogICAqIFBhcnNlIGEgc3RyaW5nIGludG8gYSB1bml0LiBUaGUgdmFsdWUgb2YgdGhlIHVuaXQgaXMgcGFyc2VkIGFzIG51bWJlciwKICAgKiBCaWdOdW1iZXIsIG9yIEZyYWN0aW9uIGRlcGVuZGluZyBvbiB0aGUgbWF0aC5qcyBjb25maWcgc2V0dGluZyBgbnVtYmVyYC4KICAgKgogICAqIFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIHByb3ZpZGVkIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgdW5pdCBvcgogICAqIGNhbm5vdCBiZSBwYXJzZWQuCiAgICogQG1lbWJlcm9mIFVuaXQKICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyICAgICAgICBBIHN0cmluZyBsaWtlICI1LjIgaW5jaCIsICI0ZTIgY20vc14yIgogICAqIEByZXR1cm4ge1VuaXR9IHVuaXQKICAgKi8KCgogIFVuaXQucGFyc2UgPSBmdW5jdGlvbiAoc3RyLCBvcHRpb25zKSB7CiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgIHRleHQgPSBzdHI7CiAgICBpbmRleCA9IC0xOwogICAgYyA9ICcnOwoKICAgIGlmICh0eXBlb2YgdGV4dCAhPT0gJ3N0cmluZycpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhcmd1bWVudCBpbiBVbml0LnBhcnNlLCBzdHJpbmcgZXhwZWN0ZWQnKTsKICAgIH0KCiAgICB2YXIgdW5pdCA9IG5ldyBVbml0KCk7CiAgICB1bml0LnVuaXRzID0gW107CiAgICB2YXIgcG93ZXJNdWx0aXBsaWVyQ3VycmVudCA9IDE7CiAgICB2YXIgZXhwZWN0aW5nVW5pdCA9IGZhbHNlOyAvLyBBIHVuaXQgc2hvdWxkIGZvbGxvdyB0aGlzIHBhdHRlcm46CiAgICAvLyBbbnVtYmVyXSAuLi5bIFsqL10gdW5pdFtebnVtYmVyXSBdCiAgICAvLyB1bml0W15udW1iZXJdIC4uLiBbIFsqL10gdW5pdFtebnVtYmVyXSBdCiAgICAvLyBSdWxlczoKICAgIC8vIG51bWJlciBpcyBhbnkgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLgogICAgLy8gdW5pdCBpcyBhbnkgYWxwaGFudW1lcmljIHN0cmluZyBiZWdpbm5pbmcgd2l0aCBhbiBhbHBoYS4gVW5pdHMgd2l0aCBuYW1lcyBsaWtlIGUzIHNob3VsZCBiZSBhdm9pZGVkIGJlY2F1c2UgdGhleSBsb29rIGxpa2UgdGhlIGV4cG9uZW50IG9mIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIQogICAgLy8gVGhlIHN0cmluZyBtYXkgb3B0aW9uYWxseSBiZWdpbiB3aXRoIGEgbnVtYmVyLgogICAgLy8gRWFjaCB1bml0IG1heSBvcHRpb25hbGx5IGJlIGZvbGxvd2VkIGJ5IF5udW1iZXIuCiAgICAvLyBXaGl0ZXNwYWNlIG9yIGEgZm9yd2FyZCBzbGFzaCBpcyByZWNvbW1lbmRlZCBiZXR3ZWVuIGNvbnNlY3V0aXZlIHVuaXRzLCBhbHRob3VnaCB0aGUgZm9sbG93aW5nIHRlY2huaWNhbGx5IGlzIHBhcnNlYWJsZToKICAgIC8vICAgMm1eMmtnL3NeMgogICAgLy8gaXQgaXMgbm90IGdvb2QgZm9ybS4gSWYgYSB1bml0IHN0YXJ0cyB3aXRoIGUsIHRoZW4gaXQgY291bGQgYmUgY29uZnVzZWQgYXMgYSBmbG9hdGluZyBwb2ludCBudW1iZXI6CiAgICAvLyAgIDRlcmcKCiAgICBuZXh0KCk7CiAgICBza2lwV2hpdGVzcGFjZSgpOyAvLyBPcHRpb25hbCBudW1iZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcKCiAgICB2YXIgdmFsdWVTdHIgPSBwYXJzZU51bWJlcigpOwogICAgdmFyIHZhbHVlID0gbnVsbDsKCiAgICBpZiAodmFsdWVTdHIpIHsKICAgICAgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInKSB7CiAgICAgICAgdmFsdWUgPSBuZXcgX0JpZ051bWJlcih2YWx1ZVN0cik7CiAgICAgIH0gZWxzZSBpZiAoY29uZmlnLm51bWJlciA9PT0gJ0ZyYWN0aW9uJykgewogICAgICAgIHRyeSB7CiAgICAgICAgICAvLyBub3QgYWxsIG51bWJlcnMgY2FuIGJlIHR1cm5lZCBpbiBGcmFjdGlvbnMsIGZvciBleGFtcGxlIHZlcnkgc21hbGwgbnVtYmVycyBub3QKICAgICAgICAgIHZhbHVlID0gbmV3IF9GcmFjdGlvbih2YWx1ZVN0cik7CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWVTdHIpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBudW1iZXIKICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWVTdHIpOwogICAgICB9CgogICAgICBza2lwV2hpdGVzcGFjZSgpOyAvLyBXaGl0ZXNwYWNlIGlzIG5vdCByZXF1aXJlZCBoZXJlCiAgICAgIC8vIGhhbmRsZSBtdWx0aXBsaWNhdGlvbiBvciBkaXZpc2lvbiByaWdodCBhZnRlciB0aGUgdmFsdWUsIGxpa2UgJzEvcycKCiAgICAgIGlmIChwYXJzZUNoYXJhY3RlcignKicpKSB7CiAgICAgICAgcG93ZXJNdWx0aXBsaWVyQ3VycmVudCA9IDE7CiAgICAgICAgZXhwZWN0aW5nVW5pdCA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAocGFyc2VDaGFyYWN0ZXIoJy8nKSkgewogICAgICAgIHBvd2VyTXVsdGlwbGllckN1cnJlbnQgPSAtMTsKICAgICAgICBleHBlY3RpbmdVbml0ID0gdHJ1ZTsKICAgICAgfQogICAgfSAvLyBTdGFjayB0byBrZWVwIHRyYWNrIG9mIHBvd2VyTXVsdGlwbGllcnMgYXBwbGllZCB0byBlYWNoIHBhcmVudGhlc2VzIGdyb3VwCgoKICAgIHZhciBwb3dlck11bHRpcGxpZXJTdGFjayA9IFtdOyAvLyBSdW5uaW5nIHByb2R1Y3Qgb2YgYWxsIGVsZW1lbnRzIGluIHBvd2VyTXVsdGlwbGllclN0YWNrCgogICAgdmFyIHBvd2VyTXVsdGlwbGllclN0YWNrUHJvZHVjdCA9IDE7CgogICAgd2hpbGUgKHRydWUpIHsKICAgICAgc2tpcFdoaXRlc3BhY2UoKTsgLy8gQ2hlY2sgZm9yIGFuZCBjb25zdW1lIG9wZW5pbmcgcGFyZW50aGVzZXMsIHB1c2hpbmcgcG93ZXJNdWx0aXBsaWVyQ3VycmVudCB0byB0aGUgc3RhY2sKICAgICAgLy8gQSAnKCcgd2lsbCBhbHdheXMgYXBwZWFyIGRpcmVjdGx5IGJlZm9yZSBhIHVuaXQuCgogICAgICB3aGlsZSAoYyA9PT0gJygnKSB7CiAgICAgICAgcG93ZXJNdWx0aXBsaWVyU3RhY2sucHVzaChwb3dlck11bHRpcGxpZXJDdXJyZW50KTsKICAgICAgICBwb3dlck11bHRpcGxpZXJTdGFja1Byb2R1Y3QgKj0gcG93ZXJNdWx0aXBsaWVyQ3VycmVudDsKICAgICAgICBwb3dlck11bHRpcGxpZXJDdXJyZW50ID0gMTsKICAgICAgICBuZXh0KCk7CiAgICAgICAgc2tpcFdoaXRlc3BhY2UoKTsKICAgICAgfSAvLyBJcyB0aGVyZSBzb21ldGhpbmcgaGVyZT8KCgogICAgICB2YXIgdVN0ciA9IHZvaWQgMDsKCiAgICAgIGlmIChjKSB7CiAgICAgICAgdmFyIG9sZEMgPSBjOwogICAgICAgIHVTdHIgPSBwYXJzZVVuaXQoKTsKCiAgICAgICAgaWYgKHVTdHIgPT09IG51bGwpIHsKICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVW5leHBlY3RlZCAiJyArIG9sZEMgKyAnIiBpbiAiJyArIHRleHQgKyAnIiBhdCBpbmRleCAnICsgaW5kZXgudG9TdHJpbmcoKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8vIEVuZCBvZiBpbnB1dC4KICAgICAgICBicmVhazsKICAgICAgfSAvLyBWZXJpZnkgdGhlIHVuaXQgZXhpc3RzIGFuZCBnZXQgdGhlIHByZWZpeCAoaWYgYW55KQoKCiAgICAgIHZhciByZXMgPSBfZmluZFVuaXQodVN0cik7CgogICAgICBpZiAocmVzID09PSBudWxsKSB7CiAgICAgICAgLy8gVW5pdCBub3QgZm91bmQuCiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdVbml0ICInICsgdVN0ciArICciIG5vdCBmb3VuZC4nKTsKICAgICAgfQoKICAgICAgdmFyIHBvd2VyID0gcG93ZXJNdWx0aXBsaWVyQ3VycmVudCAqIHBvd2VyTXVsdGlwbGllclN0YWNrUHJvZHVjdDsgLy8gSXMgdGhlcmUgYSAiXiBudW1iZXIiPwoKICAgICAgc2tpcFdoaXRlc3BhY2UoKTsKCiAgICAgIGlmIChwYXJzZUNoYXJhY3RlcignXicpKSB7CiAgICAgICAgc2tpcFdoaXRlc3BhY2UoKTsKICAgICAgICB2YXIgcCA9IHBhcnNlTnVtYmVyKCk7CgogICAgICAgIGlmIChwID09PSBudWxsKSB7CiAgICAgICAgICAvLyBObyB2YWxpZCBudW1iZXIgZm91bmQgZm9yIHRoZSBwb3dlciEKICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignSW4gIicgKyBzdHIgKyAnIiwgIl4iIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBmbG9hdGluZy1wb2ludCBudW1iZXInKTsKICAgICAgICB9CgogICAgICAgIHBvd2VyICo9IHA7CiAgICAgIH0gLy8gQWRkIHRoZSB1bml0IHRvIHRoZSBsaXN0CgoKICAgICAgdW5pdC51bml0cy5wdXNoKHsKICAgICAgICB1bml0OiByZXMudW5pdCwKICAgICAgICBwcmVmaXg6IHJlcy5wcmVmaXgsCiAgICAgICAgcG93ZXI6IHBvd2VyCiAgICAgIH0pOwoKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBCQVNFX0RJTUVOU0lPTlMubGVuZ3RoOyBpKyspIHsKICAgICAgICB1bml0LmRpbWVuc2lvbnNbaV0gKz0gKHJlcy51bml0LmRpbWVuc2lvbnNbaV0gfHwgMCkgKiBwb3dlcjsKICAgICAgfSAvLyBDaGVjayBmb3IgYW5kIGNvbnN1bWUgY2xvc2luZyBwYXJlbnRoZXNlcywgcG9wcGluZyBmcm9tIHRoZSBzdGFjay4KICAgICAgLy8gQSAnKScgd2lsbCBhbHdheXMgZm9sbG93IGEgdW5pdC4KCgogICAgICBza2lwV2hpdGVzcGFjZSgpOwoKICAgICAgd2hpbGUgKGMgPT09ICcpJykgewogICAgICAgIGlmIChwb3dlck11bHRpcGxpZXJTdGFjay5sZW5ndGggPT09IDApIHsKICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVW5tYXRjaGVkICIpIiBpbiAiJyArIHRleHQgKyAnIiBhdCBpbmRleCAnICsgaW5kZXgudG9TdHJpbmcoKSk7CiAgICAgICAgfQoKICAgICAgICBwb3dlck11bHRpcGxpZXJTdGFja1Byb2R1Y3QgLz0gcG93ZXJNdWx0aXBsaWVyU3RhY2sucG9wKCk7CiAgICAgICAgbmV4dCgpOwogICAgICAgIHNraXBXaGl0ZXNwYWNlKCk7CiAgICAgIH0gLy8gIioiIGFuZCAiLyIgc2hvdWxkIG1lYW4gd2UgYXJlIGV4cGVjdGluZyBzb21ldGhpbmcgdG8gY29tZSBuZXh0LgogICAgICAvLyBJcyB0aGVyZSBhIGZvcndhcmQgc2xhc2g/IElmIHNvLCBuZWdhdGUgcG93ZXJNdWx0aXBsaWVyQ3VycmVudC4gVGhlIG5leHQgdW5pdCBvciBwYXJlbiBncm91cCBpcyBpbiB0aGUgZGVub21pbmF0b3IuCgoKICAgICAgZXhwZWN0aW5nVW5pdCA9IGZhbHNlOwoKICAgICAgaWYgKHBhcnNlQ2hhcmFjdGVyKCcqJykpIHsKICAgICAgICAvLyBleHBsaWNpdCBtdWx0aXBsaWNhdGlvbgogICAgICAgIHBvd2VyTXVsdGlwbGllckN1cnJlbnQgPSAxOwogICAgICAgIGV4cGVjdGluZ1VuaXQgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKHBhcnNlQ2hhcmFjdGVyKCcvJykpIHsKICAgICAgICAvLyBkaXZpc2lvbgogICAgICAgIHBvd2VyTXVsdGlwbGllckN1cnJlbnQgPSAtMTsKICAgICAgICBleHBlY3RpbmdVbml0ID0gdHJ1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvbgogICAgICAgIHBvd2VyTXVsdGlwbGllckN1cnJlbnQgPSAxOwogICAgICB9IC8vIFJlcGxhY2UgdGhlIHVuaXQgaW50byB0aGUgYXV0byB1bml0IHN5c3RlbQoKCiAgICAgIGlmIChyZXMudW5pdC5iYXNlKSB7CiAgICAgICAgdmFyIGJhc2VEaW0gPSByZXMudW5pdC5iYXNlLmtleTsKICAgICAgICBVTklUX1NZU1RFTVMuYXV0b1tiYXNlRGltXSA9IHsKICAgICAgICAgIHVuaXQ6IHJlcy51bml0LAogICAgICAgICAgcHJlZml4OiByZXMucHJlZml4CiAgICAgICAgfTsKICAgICAgfQogICAgfSAvLyBIYXMgdGhlIHN0cmluZyBiZWVuIGVudGlyZWx5IGNvbnN1bWVkPwoKCiAgICBza2lwV2hpdGVzcGFjZSgpOwoKICAgIGlmIChjKSB7CiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ291bGQgbm90IHBhcnNlOiAiJyArIHN0ciArICciJyk7CiAgICB9IC8vIElzIHRoZXJlIGEgdHJhaWxpbmcgc2xhc2g/CgoKICAgIGlmIChleHBlY3RpbmdVbml0KSB7CiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVHJhaWxpbmcgY2hhcmFjdGVyczogIicgKyBzdHIgKyAnIicpOwogICAgfSAvLyBJcyB0aGUgcGFyZW50aGVzZXMgc3RhY2sgZW1wdHk/CgoKICAgIGlmIChwb3dlck11bHRpcGxpZXJTdGFjay5sZW5ndGggIT09IDApIHsKICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdVbm1hdGNoZWQgIigiIGluICInICsgdGV4dCArICciJyk7CiAgICB9IC8vIEFyZSB0aGVyZSBhbnkgdW5pdHMgYXQgYWxsPwoKCiAgICBpZiAodW5pdC51bml0cy5sZW5ndGggPT09IDAgJiYgIW9wdGlvbnMuYWxsb3dOb1VuaXRzKSB7CiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignIicgKyBzdHIgKyAnIiBjb250YWlucyBubyB1bml0cycpOwogICAgfQoKICAgIHVuaXQudmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdW5pdC5fbm9ybWFsaXplKHZhbHVlKSA6IG51bGw7CiAgICByZXR1cm4gdW5pdDsKICB9OwogIC8qKgogICAqIGNyZWF0ZSBhIGNvcHkgb2YgdGhpcyB1bml0CiAgICogQG1lbWJlcm9mIFVuaXQKICAgKiBAcmV0dXJuIHtVbml0fSBSZXR1cm5zIGEgY2xvbmVkIHZlcnNpb24gb2YgdGhlIHVuaXQKICAgKi8KCgogIFVuaXQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgewogICAgdmFyIHVuaXQgPSBuZXcgVW5pdCgpOwogICAgdW5pdC5maXhQcmVmaXggPSB0aGlzLmZpeFByZWZpeDsKICAgIHVuaXQuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uID0gdGhpcy5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb247CiAgICB1bml0LnZhbHVlID0gT2JqZWN0KHV0aWxzX29iamVjdFsiYSIgLyogY2xvbmUgKi9dKSh0aGlzLnZhbHVlKTsKICAgIHVuaXQuZGltZW5zaW9ucyA9IHRoaXMuZGltZW5zaW9ucy5zbGljZSgwKTsKICAgIHVuaXQudW5pdHMgPSBbXTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudW5pdHMubGVuZ3RoOyBpKyspIHsKICAgICAgdW5pdC51bml0c1tpXSA9IHt9OwoKICAgICAgZm9yICh2YXIgcCBpbiB0aGlzLnVuaXRzW2ldKSB7CiAgICAgICAgaWYgKE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkodGhpcy51bml0c1tpXSwgcCkpIHsKICAgICAgICAgIHVuaXQudW5pdHNbaV1bcF0gPSB0aGlzLnVuaXRzW2ldW3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHJldHVybiB1bml0OwogIH07CiAgLyoqCiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIHVuaXQgaXMgZGVyaXZlZCAoc3VjaCBhcyBtL3MsIG9yIGNtXjIsIGJ1dCBub3QgTikKICAgKiBAbWVtYmVyb2YgVW5pdAogICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHVuaXQgaXMgZGVyaXZlZAogICAqLwoKCiAgVW5pdC5wcm90b3R5cGUuX2lzRGVyaXZlZCA9IGZ1bmN0aW9uICgpIHsKICAgIGlmICh0aGlzLnVuaXRzLmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcmV0dXJuIHRoaXMudW5pdHMubGVuZ3RoID4gMSB8fCBNYXRoLmFicyh0aGlzLnVuaXRzWzBdLnBvd2VyIC0gMS4wKSA+IDFlLTE1OwogIH07CiAgLyoqCiAgICogTm9ybWFsaXplIGEgdmFsdWUsIGJhc2VkIG9uIGl0cyBjdXJyZW50bHkgc2V0IHVuaXQocykKICAgKiBAbWVtYmVyb2YgVW5pdAogICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFufSB2YWx1ZQogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbn0gbm9ybWFsaXplZCB2YWx1ZQogICAqIEBwcml2YXRlCiAgICovCgoKICBVbml0LnByb3RvdHlwZS5fbm9ybWFsaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7CiAgICB2YXIgdW5pdFZhbHVlLCB1bml0T2Zmc2V0LCB1bml0UG93ZXIsIHVuaXRQcmVmaXhWYWx1ZTsKICAgIHZhciBjb252ZXJ0OwoKICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMudW5pdHMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0gZWxzZSBpZiAodGhpcy5faXNEZXJpdmVkKCkpIHsKICAgICAgLy8gVGhpcyBpcyBhIGRlcml2ZWQgdW5pdCwgc28gZG8gbm90IGFwcGx5IG9mZnNldHMuCiAgICAgIC8vIEZvciBleGFtcGxlLCB3aXRoIEoga2deLTEgZGVnQ14tMSB5b3Ugd291bGQgTk9UIHdhbnQgdG8gYXBwbHkgdGhlIG9mZnNldC4KICAgICAgdmFyIHJlcyA9IHZhbHVlOwogICAgICBjb252ZXJ0ID0gVW5pdC5fZ2V0TnVtYmVyQ29udmVydGVyKE9iamVjdChpc1siTSIgLyogdHlwZU9mICovXSkodmFsdWUpKTsgLy8gY29udmVydCB0byBGcmFjdGlvbiBvciBCaWdOdW1iZXIgaWYgbmVlZGVkCgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudW5pdHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB1bml0VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbaV0udW5pdC52YWx1ZSk7CiAgICAgICAgdW5pdFByZWZpeFZhbHVlID0gY29udmVydCh0aGlzLnVuaXRzW2ldLnByZWZpeC52YWx1ZSk7CiAgICAgICAgdW5pdFBvd2VyID0gY29udmVydCh0aGlzLnVuaXRzW2ldLnBvd2VyKTsKICAgICAgICByZXMgPSBtdWx0aXBseVNjYWxhcihyZXMsIHBvdyhtdWx0aXBseVNjYWxhcih1bml0VmFsdWUsIHVuaXRQcmVmaXhWYWx1ZSksIHVuaXRQb3dlcikpOwogICAgICB9CgogICAgICByZXR1cm4gcmVzOwogICAgfSBlbHNlIHsKICAgICAgLy8gVGhpcyBpcyBhIHNpbmdsZSB1bml0IG9mIHBvd2VyIDEsIGxpa2Uga2cgb3IgZGVnQwogICAgICBjb252ZXJ0ID0gVW5pdC5fZ2V0TnVtYmVyQ29udmVydGVyKE9iamVjdChpc1siTSIgLyogdHlwZU9mICovXSkodmFsdWUpKTsgLy8gY29udmVydCB0byBGcmFjdGlvbiBvciBCaWdOdW1iZXIgaWYgbmVlZGVkCgogICAgICB1bml0VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0udW5pdC52YWx1ZSk7CiAgICAgIHVuaXRPZmZzZXQgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0udW5pdC5vZmZzZXQpOwogICAgICB1bml0UHJlZml4VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0ucHJlZml4LnZhbHVlKTsKICAgICAgcmV0dXJuIG11bHRpcGx5U2NhbGFyKGFkZFNjYWxhcih2YWx1ZSwgdW5pdE9mZnNldCksIG11bHRpcGx5U2NhbGFyKHVuaXRWYWx1ZSwgdW5pdFByZWZpeFZhbHVlKSk7CiAgICB9CiAgfTsKICAvKioKICAgKiBEZW5vcm1hbGl6ZSBhIHZhbHVlLCBiYXNlZCBvbiBpdHMgY3VycmVudGx5IHNldCB1bml0KHMpCiAgICogQG1lbWJlcm9mIFVuaXQKICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUKICAgKiBAcGFyYW0ge251bWJlcn0gW3ByZWZpeFZhbHVlXSAgICBPcHRpb25hbCBwcmVmaXggdmFsdWUgdG8gYmUgdXNlZCAoaWdub3JlZCBpZiB0aGlzIGlzIGEgZGVyaXZlZCB1bml0KQogICAqIEByZXR1cm4ge251bWJlcn0gZGVub3JtYWxpemVkIHZhbHVlCiAgICogQHByaXZhdGUKICAgKi8KCgogIFVuaXQucHJvdG90eXBlLl9kZW5vcm1hbGl6ZSA9IGZ1bmN0aW9uICh2YWx1ZSwgcHJlZml4VmFsdWUpIHsKICAgIHZhciB1bml0VmFsdWUsIHVuaXRPZmZzZXQsIHVuaXRQb3dlciwgdW5pdFByZWZpeFZhbHVlOwogICAgdmFyIGNvbnZlcnQ7CgogICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdGhpcy51bml0cy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIHZhbHVlOwogICAgfSBlbHNlIGlmICh0aGlzLl9pc0Rlcml2ZWQoKSkgewogICAgICAvLyBUaGlzIGlzIGEgZGVyaXZlZCB1bml0LCBzbyBkbyBub3QgYXBwbHkgb2Zmc2V0cy4KICAgICAgLy8gRm9yIGV4YW1wbGUsIHdpdGggSiBrZ14tMSBkZWdDXi0xIHlvdSB3b3VsZCBOT1Qgd2FudCB0byBhcHBseSB0aGUgb2Zmc2V0LgogICAgICAvLyBBbHNvLCBwcmVmaXhWYWx1ZSBpcyBpZ25vcmVkLS1idXQgd2Ugd2lsbCBzdGlsbCB1c2UgdGhlIHByZWZpeCB2YWx1ZSBzdG9yZWQgaW4gZWFjaCB1bml0LCBzaW5jZSBrZyBpcyB1c3VhbGx5IHByZWZlcmFibGUgdG8gZyB1bmxlc3MgdGhlIHVzZXIgZGVjaWRlcyBvdGhlcndpc2UuCiAgICAgIHZhciByZXMgPSB2YWx1ZTsKICAgICAgY29udmVydCA9IFVuaXQuX2dldE51bWJlckNvbnZlcnRlcihPYmplY3QoaXNbIk0iIC8qIHR5cGVPZiAqL10pKHZhbHVlKSk7IC8vIGNvbnZlcnQgdG8gRnJhY3Rpb24gb3IgQmlnTnVtYmVyIGlmIG5lZWRlZAoKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnVuaXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdW5pdFZhbHVlID0gY29udmVydCh0aGlzLnVuaXRzW2ldLnVuaXQudmFsdWUpOwogICAgICAgIHVuaXRQcmVmaXhWYWx1ZSA9IGNvbnZlcnQodGhpcy51bml0c1tpXS5wcmVmaXgudmFsdWUpOwogICAgICAgIHVuaXRQb3dlciA9IGNvbnZlcnQodGhpcy51bml0c1tpXS5wb3dlcik7CiAgICAgICAgcmVzID0gZGl2aWRlU2NhbGFyKHJlcywgcG93KG11bHRpcGx5U2NhbGFyKHVuaXRWYWx1ZSwgdW5pdFByZWZpeFZhbHVlKSwgdW5pdFBvd2VyKSk7CiAgICAgIH0KCiAgICAgIHJldHVybiByZXM7CiAgICB9IGVsc2UgewogICAgICAvLyBUaGlzIGlzIGEgc2luZ2xlIHVuaXQgb2YgcG93ZXIgMSwgbGlrZSBrZyBvciBkZWdDCiAgICAgIGNvbnZlcnQgPSBVbml0Ll9nZXROdW1iZXJDb252ZXJ0ZXIoT2JqZWN0KGlzWyJNIiAvKiB0eXBlT2YgKi9dKSh2YWx1ZSkpOyAvLyBjb252ZXJ0IHRvIEZyYWN0aW9uIG9yIEJpZ051bWJlciBpZiBuZWVkZWQKCiAgICAgIHVuaXRWYWx1ZSA9IGNvbnZlcnQodGhpcy51bml0c1swXS51bml0LnZhbHVlKTsKICAgICAgdW5pdFByZWZpeFZhbHVlID0gY29udmVydCh0aGlzLnVuaXRzWzBdLnByZWZpeC52YWx1ZSk7CiAgICAgIHVuaXRPZmZzZXQgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0udW5pdC5vZmZzZXQpOwoKICAgICAgaWYgKHByZWZpeFZhbHVlID09PSB1bmRlZmluZWQgfHwgcHJlZml4VmFsdWUgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gc3VidHJhY3QoZGl2aWRlU2NhbGFyKGRpdmlkZVNjYWxhcih2YWx1ZSwgdW5pdFZhbHVlKSwgdW5pdFByZWZpeFZhbHVlKSwgdW5pdE9mZnNldCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHN1YnRyYWN0KGRpdmlkZVNjYWxhcihkaXZpZGVTY2FsYXIodmFsdWUsIHVuaXRWYWx1ZSksIHByZWZpeFZhbHVlKSwgdW5pdE9mZnNldCk7CiAgICAgIH0KICAgIH0KICB9OwogIC8qKgogICAqIEZpbmQgYSB1bml0IGZyb20gYSBzdHJpbmcKICAgKiBAbWVtYmVyb2YgVW5pdAogICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgICAgICAgICAgICAgIEEgc3RyaW5nIGxpa2UgJ2NtJyBvciAnaW5jaCcKICAgKiBAcmV0dXJucyB7T2JqZWN0IHwgbnVsbH0gcmVzdWx0ICBXaGVuIGZvdW5kLCBhbiBvYmplY3Qgd2l0aCBmaWVsZHMgdW5pdCBhbmQKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggaXMgcmV0dXJuZWQuIEVsc2UsIG51bGwgaXMgcmV0dXJuZWQuCiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIF9maW5kVW5pdChzdHIpIHsKICAgIC8vIEZpcnN0LCBtYXRjaCB1bml0cyBuYW1lcyBleGFjdGx5LiBGb3IgZXhhbXBsZSwgYSB1c2VyIGNvdWxkIGRlZmluZSAnbW0nIGFzIDEwXi00IG0sIHdoaWNoIGlzIHNpbGx5LCBidXQgdGhlbiB3ZSB3b3VsZCB3YW50ICdtbScgdG8gbWF0Y2ggdGhlIHVzZXItZGVmaW5lZCB1bml0LgogICAgaWYgKE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkoVU5JVFMsIHN0cikpIHsKICAgICAgdmFyIHVuaXQgPSBVTklUU1tzdHJdOwogICAgICB2YXIgcHJlZml4ID0gdW5pdC5wcmVmaXhlc1snJ107CiAgICAgIHJldHVybiB7CiAgICAgICAgdW5pdDogdW5pdCwKICAgICAgICBwcmVmaXg6IHByZWZpeAogICAgICB9OwogICAgfQoKICAgIGZvciAodmFyIF9uYW1lIGluIFVOSVRTKSB7CiAgICAgIGlmIChPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKFVOSVRTLCBfbmFtZSkpIHsKICAgICAgICBpZiAoT2JqZWN0KHV0aWxzX3N0cmluZ1siYiIgLyogZW5kc1dpdGggKi9dKShzdHIsIF9uYW1lKSkgewogICAgICAgICAgdmFyIF91bml0ID0gVU5JVFNbX25hbWVdOwogICAgICAgICAgdmFyIHByZWZpeExlbiA9IHN0ci5sZW5ndGggLSBfbmFtZS5sZW5ndGg7CiAgICAgICAgICB2YXIgcHJlZml4TmFtZSA9IHN0ci5zdWJzdHJpbmcoMCwgcHJlZml4TGVuKTsKCiAgICAgICAgICB2YXIgX3ByZWZpeCA9IE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkoX3VuaXQucHJlZml4ZXMsIHByZWZpeE5hbWUpID8gX3VuaXQucHJlZml4ZXNbcHJlZml4TmFtZV0gOiB1bmRlZmluZWQ7CgogICAgICAgICAgaWYgKF9wcmVmaXggIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAvLyBzdG9yZSB1bml0LCBwcmVmaXgsIGFuZCB2YWx1ZQogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHVuaXQ6IF91bml0LAogICAgICAgICAgICAgIHByZWZpeDogX3ByZWZpeAogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0KICAvKioKICAgKiBUZXN0IGlmIHRoZSBnaXZlbiBleHByZXNzaW9uIGlzIGEgdW5pdC4KICAgKiBUaGUgdW5pdCBjYW4gaGF2ZSBhIHByZWZpeCBidXQgY2Fubm90IGhhdmUgYSB2YWx1ZS4KICAgKiBAbWVtYmVyb2YgVW5pdAogICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgQSBzdHJpbmcgdG8gYmUgdGVzdGVkIHdoZXRoZXIgaXQgaXMgYSB2YWx1ZSBsZXNzIHVuaXQuCiAgICogICAgICAgICAgICAgICAgICAgICAgICBUaGUgdW5pdCBjYW4gaGF2ZSBwcmVmaXgsIGxpa2UgImNtIgogICAqIEByZXR1cm4ge2Jvb2xlYW59ICAgICAgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdW5pdAogICAqLwoKCiAgVW5pdC5pc1ZhbHVlbGVzc1VuaXQgPSBmdW5jdGlvbiAobmFtZSkgewogICAgcmV0dXJuIF9maW5kVW5pdChuYW1lKSAhPT0gbnVsbDsKICB9OwogIC8qKgogICAqIGNoZWNrIGlmIHRoaXMgdW5pdCBoYXMgZ2l2ZW4gYmFzZSB1bml0CiAgICogSWYgdGhpcyB1bml0IGlzIGEgZGVyaXZlZCB1bml0LCB0aGlzIHdpbGwgQUxXQVlTIHJldHVybiBmYWxzZSwgc2luY2UgYnkgZGVmaW5pdGlvbiBiYXNlIHVuaXRzIGFyZSBub3QgZGVyaXZlZC4KICAgKiBAbWVtYmVyb2YgVW5pdAogICAqIEBwYXJhbSB7QkFTRV9VTklUUyB8IHN0cmluZyB8IHVuZGVmaW5lZH0gYmFzZQogICAqLwoKCiAgVW5pdC5wcm90b3R5cGUuaGFzQmFzZSA9IGZ1bmN0aW9uIChiYXNlKSB7CiAgICBpZiAodHlwZW9mIGJhc2UgPT09ICdzdHJpbmcnKSB7CiAgICAgIGJhc2UgPSBCQVNFX1VOSVRTW2Jhc2VdOwogICAgfQoKICAgIGlmICghYmFzZSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IC8vIEFsbCBkaW1lbnNpb25zIG11c3QgYmUgdGhlIHNhbWUKCgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBCQVNFX0RJTUVOU0lPTlMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKE1hdGguYWJzKCh0aGlzLmRpbWVuc2lvbnNbaV0gfHwgMCkgLSAoYmFzZS5kaW1lbnNpb25zW2ldIHx8IDApKSA+IDFlLTEyKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHRydWU7CiAgfTsKICAvKioKICAgKiBDaGVjayBpZiB0aGlzIHVuaXQgaGFzIGEgYmFzZSBvciBiYXNlcyBlcXVhbCB0byBhbm90aGVyIGJhc2Ugb3IgYmFzZXMKICAgKiBGb3IgZGVyaXZlZCB1bml0cywgdGhlIGV4cG9uZW50IG9uIGVhY2ggYmFzZSBhbHNvIG11c3QgbWF0Y2gKICAgKiBAbWVtYmVyb2YgVW5pdAogICAqIEBwYXJhbSB7VW5pdH0gb3RoZXIKICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGVxdWFsIGJhc2UKICAgKi8KCgogIFVuaXQucHJvdG90eXBlLmVxdWFsQmFzZSA9IGZ1bmN0aW9uIChvdGhlcikgewogICAgLy8gQWxsIGRpbWVuc2lvbnMgbXVzdCBiZSB0aGUgc2FtZQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBCQVNFX0RJTUVOU0lPTlMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKE1hdGguYWJzKCh0aGlzLmRpbWVuc2lvbnNbaV0gfHwgMCkgLSAob3RoZXIuZGltZW5zaW9uc1tpXSB8fCAwKSkgPiAxZS0xMikgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiB0cnVlOwogIH07CiAgLyoqCiAgICogQ2hlY2sgaWYgdGhpcyB1bml0IGVxdWFscyBhbm90aGVyIHVuaXQKICAgKiBAbWVtYmVyb2YgVW5pdAogICAqIEBwYXJhbSB7VW5pdH0gb3RoZXIKICAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIGJvdGggdW5pdHMgYXJlIGVxdWFsCiAgICovCgoKICBVbml0LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAob3RoZXIpIHsKICAgIHJldHVybiB0aGlzLmVxdWFsQmFzZShvdGhlcikgJiYgZXF1YWwodGhpcy52YWx1ZSwgb3RoZXIudmFsdWUpOwogIH07CiAgLyoqCiAgICogTXVsdGlwbHkgdGhpcyB1bml0IHdpdGggYW5vdGhlciBvbmUKICAgKiBAbWVtYmVyb2YgVW5pdAogICAqIEBwYXJhbSB7VW5pdH0gb3RoZXIKICAgKiBAcmV0dXJuIHtVbml0fSBwcm9kdWN0IG9mIHRoaXMgdW5pdCBhbmQgdGhlIG90aGVyIHVuaXQKICAgKi8KCgogIFVuaXQucHJvdG90eXBlLm11bHRpcGx5ID0gZnVuY3Rpb24gKG90aGVyKSB7CiAgICB2YXIgcmVzID0gdGhpcy5jbG9uZSgpOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQkFTRV9ESU1FTlNJT05TLmxlbmd0aDsgaSsrKSB7CiAgICAgIC8vIERpbWVuc2lvbnMgYXJyYXlzIG1heSBiZSBvZiBkaWZmZXJlbnQgbGVuZ3Rocy4gRGVmYXVsdCB0byAwLgogICAgICByZXMuZGltZW5zaW9uc1tpXSA9ICh0aGlzLmRpbWVuc2lvbnNbaV0gfHwgMCkgKyAob3RoZXIuZGltZW5zaW9uc1tpXSB8fCAwKTsKICAgIH0gLy8gQXBwZW5kIG90aGVyJ3MgdW5pdHMgbGlzdCBvbnRvIHJlcwoKCiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgb3RoZXIudW5pdHMubGVuZ3RoOyBfaSsrKSB7CiAgICAgIC8vIE1ha2UgYSBkZWVwIGNvcHkKICAgICAgdmFyIGludmVydGVkID0ge307CgogICAgICBmb3IgKHZhciBrZXkgaW4gb3RoZXIudW5pdHNbX2ldKSB7CiAgICAgICAgaW52ZXJ0ZWRba2V5XSA9IG90aGVyLnVuaXRzW19pXVtrZXldOwogICAgICB9CgogICAgICByZXMudW5pdHMucHVzaChpbnZlcnRlZCk7CiAgICB9IC8vIElmIGF0IGxlYXN0IG9uZSBvcGVyYW5kIGhhcyBhIHZhbHVlLCB0aGVuIHRoZSByZXN1bHQgc2hvdWxkIGFsc28gaGF2ZSBhIHZhbHVlCgoKICAgIGlmICh0aGlzLnZhbHVlICE9PSBudWxsIHx8IG90aGVyLnZhbHVlICE9PSBudWxsKSB7CiAgICAgIHZhciB2YWxUaGlzID0gdGhpcy52YWx1ZSA9PT0gbnVsbCA/IHRoaXMuX25vcm1hbGl6ZSgxKSA6IHRoaXMudmFsdWU7CiAgICAgIHZhciB2YWxPdGhlciA9IG90aGVyLnZhbHVlID09PSBudWxsID8gb3RoZXIuX25vcm1hbGl6ZSgxKSA6IG90aGVyLnZhbHVlOwogICAgICByZXMudmFsdWUgPSBtdWx0aXBseVNjYWxhcih2YWxUaGlzLCB2YWxPdGhlcik7CiAgICB9IGVsc2UgewogICAgICByZXMudmFsdWUgPSBudWxsOwogICAgfQoKICAgIHJlcy5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb24gPSBmYWxzZTsKICAgIHJldHVybiBnZXROdW1lcmljSWZVbml0bGVzcyhyZXMpOwogIH07CiAgLyoqCiAgICogRGl2aWRlIHRoaXMgdW5pdCBieSBhbm90aGVyIG9uZQogICAqIEBtZW1iZXJvZiBVbml0CiAgICogQHBhcmFtIHtVbml0fSBvdGhlcgogICAqIEByZXR1cm4ge1VuaXR9IHJlc3VsdCBvZiBkaXZpZGluZyB0aGlzIHVuaXQgYnkgdGhlIG90aGVyIHVuaXQKICAgKi8KCgogIFVuaXQucHJvdG90eXBlLmRpdmlkZSA9IGZ1bmN0aW9uIChvdGhlcikgewogICAgdmFyIHJlcyA9IHRoaXMuY2xvbmUoKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykgewogICAgICAvLyBEaW1lbnNpb25zIGFycmF5cyBtYXkgYmUgb2YgZGlmZmVyZW50IGxlbmd0aHMuIERlZmF1bHQgdG8gMC4KICAgICAgcmVzLmRpbWVuc2lvbnNbaV0gPSAodGhpcy5kaW1lbnNpb25zW2ldIHx8IDApIC0gKG90aGVyLmRpbWVuc2lvbnNbaV0gfHwgMCk7CiAgICB9IC8vIEludmVydCBhbmQgYXBwZW5kIG90aGVyJ3MgdW5pdHMgbGlzdCBvbnRvIHJlcwoKCiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBvdGhlci51bml0cy5sZW5ndGg7IF9pMisrKSB7CiAgICAgIC8vIE1ha2UgYSBkZWVwIGNvcHkKICAgICAgdmFyIGludmVydGVkID0ge307CgogICAgICBmb3IgKHZhciBrZXkgaW4gb3RoZXIudW5pdHNbX2kyXSkgewogICAgICAgIGludmVydGVkW2tleV0gPSBvdGhlci51bml0c1tfaTJdW2tleV07CiAgICAgIH0KCiAgICAgIGludmVydGVkLnBvd2VyID0gLWludmVydGVkLnBvd2VyOwogICAgICByZXMudW5pdHMucHVzaChpbnZlcnRlZCk7CiAgICB9IC8vIElmIGF0IGxlYXN0IG9uZSBvcGVyYW5kIGhhcyBhIHZhbHVlLCB0aGUgcmVzdWx0IHNob3VsZCBoYXZlIGEgdmFsdWUKCgogICAgaWYgKHRoaXMudmFsdWUgIT09IG51bGwgfHwgb3RoZXIudmFsdWUgIT09IG51bGwpIHsKICAgICAgdmFyIHZhbFRoaXMgPSB0aGlzLnZhbHVlID09PSBudWxsID8gdGhpcy5fbm9ybWFsaXplKDEpIDogdGhpcy52YWx1ZTsKICAgICAgdmFyIHZhbE90aGVyID0gb3RoZXIudmFsdWUgPT09IG51bGwgPyBvdGhlci5fbm9ybWFsaXplKDEpIDogb3RoZXIudmFsdWU7CiAgICAgIHJlcy52YWx1ZSA9IGRpdmlkZVNjYWxhcih2YWxUaGlzLCB2YWxPdGhlcik7CiAgICB9IGVsc2UgewogICAgICByZXMudmFsdWUgPSBudWxsOwogICAgfQoKICAgIHJlcy5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb24gPSBmYWxzZTsKICAgIHJldHVybiBnZXROdW1lcmljSWZVbml0bGVzcyhyZXMpOwogIH07CiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBwb3dlciBvZiBhIHVuaXQKICAgKiBAbWVtYmVyb2YgVW5pdAogICAqIEBwYXJhbSB7bnVtYmVyIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXJ9IHAKICAgKiBAcmV0dXJucyB7VW5pdH0gICAgICBUaGUgcmVzdWx0OiB0aGlzXnAKICAgKi8KCgogIFVuaXQucHJvdG90eXBlLnBvdyA9IGZ1bmN0aW9uIChwKSB7CiAgICB2YXIgcmVzID0gdGhpcy5jbG9uZSgpOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQkFTRV9ESU1FTlNJT05TLmxlbmd0aDsgaSsrKSB7CiAgICAgIC8vIERpbWVuc2lvbnMgYXJyYXlzIG1heSBiZSBvZiBkaWZmZXJlbnQgbGVuZ3Rocy4gRGVmYXVsdCB0byAwLgogICAgICByZXMuZGltZW5zaW9uc1tpXSA9ICh0aGlzLmRpbWVuc2lvbnNbaV0gfHwgMCkgKiBwOwogICAgfSAvLyBBZGp1c3QgdGhlIHBvd2VyIG9mIGVhY2ggdW5pdCBpbiB0aGUgbGlzdAoKCiAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCByZXMudW5pdHMubGVuZ3RoOyBfaTMrKykgewogICAgICByZXMudW5pdHNbX2kzXS5wb3dlciAqPSBwOwogICAgfQoKICAgIGlmIChyZXMudmFsdWUgIT09IG51bGwpIHsKICAgICAgcmVzLnZhbHVlID0gcG93KHJlcy52YWx1ZSwgcCk7IC8vIG9ubHkgYWxsb3cgbnVtZXJpYyBvdXRwdXQsIHdlIGRvbid0IHdhbnQgdG8gcmV0dXJuIGEgQ29tcGxleCBudW1iZXIKICAgICAgLy8gaWYgKCFpc051bWVyaWMocmVzLnZhbHVlKSkgewogICAgICAvLyAgcmVzLnZhbHVlID0gTmFOCiAgICAgIC8vIH0KICAgICAgLy8gVXBkYXRlOiBDb21wbGV4IHN1cHBvcnRlZCBub3cKICAgIH0gZWxzZSB7CiAgICAgIHJlcy52YWx1ZSA9IG51bGw7CiAgICB9CgogICAgcmVzLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiA9IGZhbHNlOwogICAgcmV0dXJuIGdldE51bWVyaWNJZlVuaXRsZXNzKHJlcyk7CiAgfTsKICAvKioKICAgKiBSZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgb2YgdGhpcyB1bml0IGlmIGl0IGlzIGRpbWVuc2lvbmxlc3MsIGhhcyBhIHZhbHVlLCBhbmQgY29uZmlnLnByZWRpY3RhYmxlID09IGZhbHNlOyBvciB0aGUgb3JpZ2luYWwgdW5pdCBvdGhlcndpc2UKICAgKiBAcGFyYW0ge1VuaXR9IHVuaXQKICAgKiBAcmV0dXJucyB7bnVtYmVyIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIgfCBVbml0fSAgVGhlIG51bWVyaWMgdmFsdWUgb2YgdGhlIHVuaXQgaWYgY29uZGl0aW9ucyBhcmUgbWV0LCBvciB0aGUgb3JpZ2luYWwgdW5pdCBvdGhlcndpc2UKICAgKi8KCgogIGZ1bmN0aW9uIGdldE51bWVyaWNJZlVuaXRsZXNzKHVuaXQpIHsKICAgIGlmICh1bml0LmVxdWFsQmFzZShCQVNFX1VOSVRTLk5PTkUpICYmIHVuaXQudmFsdWUgIT09IG51bGwgJiYgIWNvbmZpZy5wcmVkaWN0YWJsZSkgewogICAgICByZXR1cm4gdW5pdC52YWx1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB1bml0OwogICAgfQogIH0KICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIGFic29sdXRlIHZhbHVlIG9mIGEgdW5pdAogICAqIEBtZW1iZXJvZiBVbml0CiAgICogQHBhcmFtIHtudW1iZXIgfCBGcmFjdGlvbiB8IEJpZ051bWJlcn0geAogICAqIEByZXR1cm5zIHtVbml0fSAgICAgIFRoZSByZXN1bHQ6IHx4fCwgYWJzb2x1dGUgdmFsdWUgb2YgeAogICAqLwoKCiAgVW5pdC5wcm90b3R5cGUuYWJzID0gZnVuY3Rpb24gKCkgewogICAgLy8gVGhpcyBnaXZlcyBjb3JyZWN0LCBidXQgdW5leHBlY3RlZCwgcmVzdWx0cyBmb3IgdW5pdHMgd2l0aCBhbiBvZmZzZXQuCiAgICAvLyBGb3IgZXhhbXBsZSwgYWJzKC0yODMuMTUgZGVnQykgPSAtMjYzLjE1IGRlZ0MgISEhCiAgICB2YXIgcmV0ID0gdGhpcy5jbG9uZSgpOwogICAgcmV0LnZhbHVlID0gcmV0LnZhbHVlICE9PSBudWxsID8gYWJzKHJldC52YWx1ZSkgOiBudWxsOwoKICAgIGZvciAodmFyIGkgaW4gcmV0LnVuaXRzKSB7CiAgICAgIGlmIChyZXQudW5pdHNbaV0udW5pdC5uYW1lID09PSAnVkEnIHx8IHJldC51bml0c1tpXS51bml0Lm5hbWUgPT09ICdWQVInKSB7CiAgICAgICAgcmV0LnVuaXRzW2ldLnVuaXQgPSBVTklUUy5XOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJldDsKICB9OwogIC8qKgogICAqIENvbnZlcnQgdGhlIHVuaXQgdG8gYSBzcGVjaWZpYyB1bml0IG5hbWUuCiAgICogQG1lbWJlcm9mIFVuaXQKICAgKiBAcGFyYW0ge3N0cmluZyB8IFVuaXR9IHZhbHVlbGVzc1VuaXQgICBBIHVuaXQgd2l0aG91dCB2YWx1ZS4gQ2FuIGhhdmUgcHJlZml4LCBsaWtlICJjbSIKICAgKiBAcmV0dXJucyB7VW5pdH0gUmV0dXJucyBhIGNsb25lIG9mIHRoZSB1bml0IHdpdGggYSBmaXhlZCBwcmVmaXggYW5kIHVuaXQuCiAgICovCgoKICBVbml0LnByb3RvdHlwZS50byA9IGZ1bmN0aW9uICh2YWx1ZWxlc3NVbml0KSB7CiAgICB2YXIgb3RoZXI7CiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlID09PSBudWxsID8gdGhpcy5fbm9ybWFsaXplKDEpIDogdGhpcy52YWx1ZTsKCiAgICBpZiAodHlwZW9mIHZhbHVlbGVzc1VuaXQgPT09ICdzdHJpbmcnKSB7CiAgICAgIC8vIG90aGVyID0gbmV3IFVuaXQobnVsbCwgdmFsdWVsZXNzVW5pdCkKICAgICAgb3RoZXIgPSBVbml0LnBhcnNlKHZhbHVlbGVzc1VuaXQpOwoKICAgICAgaWYgKCF0aGlzLmVxdWFsQmFzZShvdGhlcikpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuaXRzIGRvIG5vdCBtYXRjaCAoJyIuY29uY2F0KG90aGVyLnRvU3RyaW5nKCksICInICE9ICciKS5jb25jYXQodGhpcy50b1N0cmluZygpLCAiJykiKSk7CiAgICAgIH0KCiAgICAgIGlmIChvdGhlci52YWx1ZSAhPT0gbnVsbCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgdG8gYSB1bml0IHdpdGggYSB2YWx1ZScpOwogICAgICB9CgogICAgICBvdGhlci52YWx1ZSA9IE9iamVjdCh1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSkodmFsdWUpOwogICAgICBvdGhlci5maXhQcmVmaXggPSB0cnVlOwogICAgICBvdGhlci5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb24gPSB0cnVlOwogICAgICByZXR1cm4gb3RoZXI7CiAgICB9IGVsc2UgaWYgKE9iamVjdChpc1siTCIgLyogaXNVbml0ICovXSkodmFsdWVsZXNzVW5pdCkpIHsKICAgICAgaWYgKCF0aGlzLmVxdWFsQmFzZSh2YWx1ZWxlc3NVbml0KSkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5pdHMgZG8gbm90IG1hdGNoICgnIi5jb25jYXQodmFsdWVsZXNzVW5pdC50b1N0cmluZygpLCAiJyAhPSAnIikuY29uY2F0KHRoaXMudG9TdHJpbmcoKSwgIicpIikpOwogICAgICB9CgogICAgICBpZiAodmFsdWVsZXNzVW5pdC52YWx1ZSAhPT0gbnVsbCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgdG8gYSB1bml0IHdpdGggYSB2YWx1ZScpOwogICAgICB9CgogICAgICBvdGhlciA9IHZhbHVlbGVzc1VuaXQuY2xvbmUoKTsKICAgICAgb3RoZXIudmFsdWUgPSBPYmplY3QodXRpbHNfb2JqZWN0WyJhIiAvKiBjbG9uZSAqL10pKHZhbHVlKTsKICAgICAgb3RoZXIuZml4UHJlZml4ID0gdHJ1ZTsKICAgICAgb3RoZXIuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uID0gdHJ1ZTsKICAgICAgcmV0dXJuIG90aGVyOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdHJpbmcgb3IgVW5pdCBleHBlY3RlZCBhcyBwYXJhbWV0ZXInKTsKICAgIH0KICB9OwogIC8qKgogICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHVuaXQgd2hlbiByZXByZXNlbnRlZCB3aXRoIGdpdmVuIHZhbHVlbGVzcyB1bml0CiAgICogQG1lbWJlcm9mIFVuaXQKICAgKiBAcGFyYW0ge3N0cmluZyB8IFVuaXR9IHZhbHVlbGVzc1VuaXQgICAgRm9yIGV4YW1wbGUgJ2NtJyBvciAnaW5jaCcKICAgKiBAcmV0dXJuIHtudW1iZXJ9IFJldHVybnMgdGhlIHVuaXQgdmFsdWUgYXMgbnVtYmVyLgogICAqLwogIC8vIFRPRE86IGRlcHJlY2F0ZSBVbml0LnRvTnVtYmVyPyBJdCdzIGFsd2F5cyBiZXR0ZXIgdG8gdXNlIHRvTnVtZXJpYwoKCiAgVW5pdC5wcm90b3R5cGUudG9OdW1iZXIgPSBmdW5jdGlvbiAodmFsdWVsZXNzVW5pdCkgewogICAgcmV0dXJuIHRvTnVtYmVyKHRoaXMudG9OdW1lcmljKHZhbHVlbGVzc1VuaXQpKTsKICB9OwogIC8qKgogICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHVuaXQgaW4gdGhlIG9yaWdpbmFsIG51bWVyaWMgdHlwZQogICAqIEBtZW1iZXJvZiBVbml0CiAgICogQHBhcmFtIHtzdHJpbmcgfCBVbml0fSB2YWx1ZWxlc3NVbml0ICAgIEZvciBleGFtcGxlICdjbScgb3IgJ2luY2gnCiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb259IFJldHVybnMgdGhlIHVuaXQgdmFsdWUKICAgKi8KCgogIFVuaXQucHJvdG90eXBlLnRvTnVtZXJpYyA9IGZ1bmN0aW9uICh2YWx1ZWxlc3NVbml0KSB7CiAgICB2YXIgb3RoZXI7CgogICAgaWYgKHZhbHVlbGVzc1VuaXQpIHsKICAgICAgLy8gQWxsb3cgZ2V0dGluZyB0aGUgbnVtZXJpYyB2YWx1ZSB3aXRob3V0IGNvbnZlcnRpbmcgdG8gYSBkaWZmZXJlbnQgdW5pdAogICAgICBvdGhlciA9IHRoaXMudG8odmFsdWVsZXNzVW5pdCk7CiAgICB9IGVsc2UgewogICAgICBvdGhlciA9IHRoaXMuY2xvbmUoKTsKICAgIH0KCiAgICBpZiAob3RoZXIuX2lzRGVyaXZlZCgpKSB7CiAgICAgIHJldHVybiBvdGhlci5fZGVub3JtYWxpemUob3RoZXIudmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG90aGVyLl9kZW5vcm1hbGl6ZShvdGhlci52YWx1ZSwgb3RoZXIudW5pdHNbMF0ucHJlZml4LnZhbHVlKTsKICAgIH0KICB9OwogIC8qKgogICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdW5pdC4KICAgKiBAbWVtYmVyb2YgVW5pdAogICAqIEByZXR1cm4ge3N0cmluZ30KICAgKi8KCgogIFVuaXQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHRoaXMuZm9ybWF0KCk7CiAgfTsKICAvKioKICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1bml0CiAgICogQG1lbWJlcm9mIFVuaXQKICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczoKICAgKiAgICAgICAgICAgICAgICAgICBgeyJtYXRoanMiOiAiVW5pdCIsICJ2YWx1ZSI6IDIsICJ1bml0IjogImNtIiwgImZpeFByZWZpeCI6IGZhbHNlfWAKICAgKi8KCgogIFVuaXQucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB7CiAgICAgIG1hdGhqczogJ1VuaXQnLAogICAgICB2YWx1ZTogdGhpcy5fZGVub3JtYWxpemUodGhpcy52YWx1ZSksCiAgICAgIHVuaXQ6IHRoaXMuZm9ybWF0VW5pdHMoKSwKICAgICAgZml4UHJlZml4OiB0aGlzLmZpeFByZWZpeAogICAgfTsKICB9OwogIC8qKgogICAqIEluc3RhbnRpYXRlIGEgVW5pdCBmcm9tIGEgSlNPTiBvYmplY3QKICAgKiBAbWVtYmVyb2YgVW5pdAogICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6CiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7Im1hdGhqcyI6ICJVbml0IiwgInZhbHVlIjogMiwgInVuaXQiOiAiY20iLCAiZml4UHJlZml4IjogZmFsc2V9YAogICAqIEByZXR1cm4ge1VuaXR9CiAgICovCgoKICBVbml0LmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHsKICAgIHZhciB1bml0ID0gbmV3IFVuaXQoanNvbi52YWx1ZSwganNvbi51bml0KTsKICAgIHVuaXQuZml4UHJlZml4ID0ganNvbi5maXhQcmVmaXggfHwgZmFsc2U7CiAgICByZXR1cm4gdW5pdDsKICB9OwogIC8qKgogICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdW5pdC4KICAgKiBAbWVtYmVyb2YgVW5pdAogICAqIEByZXR1cm4ge3N0cmluZ30KICAgKi8KCgogIFVuaXQucHJvdG90eXBlLnZhbHVlT2YgPSBVbml0LnByb3RvdHlwZS50b1N0cmluZzsKICAvKioKICAgKiBTaW1wbGlmeSB0aGlzIFVuaXQncyB1bml0IGxpc3QgYW5kIHJldHVybiBhIG5ldyBVbml0IHdpdGggdGhlIHNpbXBsaWZpZWQgbGlzdC4KICAgKiBUaGUgcmV0dXJuZWQgVW5pdCB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIHRoZSAiYmVzdCIgdW5pdHMgZm9yIGZvcm1hdHRpbmcuCiAgICovCgogIFVuaXQucHJvdG90eXBlLnNpbXBsaWZ5ID0gZnVuY3Rpb24gKCkgewogICAgdmFyIHJldCA9IHRoaXMuY2xvbmUoKTsKICAgIHZhciBwcm9wb3NlZFVuaXRMaXN0ID0gW107IC8vIFNlYXJjaCBmb3IgYSBtYXRjaGluZyBiYXNlCgogICAgdmFyIG1hdGNoaW5nQmFzZTsKCiAgICBmb3IgKHZhciBrZXkgaW4gY3VycmVudFVuaXRTeXN0ZW0pIHsKICAgICAgaWYgKHJldC5oYXNCYXNlKEJBU0VfVU5JVFNba2V5XSkpIHsKICAgICAgICBtYXRjaGluZ0Jhc2UgPSBrZXk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICBpZiAobWF0Y2hpbmdCYXNlID09PSAnTk9ORScpIHsKICAgICAgcmV0LnVuaXRzID0gW107CiAgICB9IGVsc2UgewogICAgICB2YXIgbWF0Y2hpbmdVbml0OwoKICAgICAgaWYgKG1hdGNoaW5nQmFzZSkgewogICAgICAgIC8vIERvZXMgdGhlIHVuaXQgc3lzdGVtIGhhdmUgYSBtYXRjaGluZyB1bml0PwogICAgICAgIGlmIChPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKGN1cnJlbnRVbml0U3lzdGVtLCBtYXRjaGluZ0Jhc2UpKSB7CiAgICAgICAgICBtYXRjaGluZ1VuaXQgPSBjdXJyZW50VW5pdFN5c3RlbVttYXRjaGluZ0Jhc2VdOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKG1hdGNoaW5nVW5pdCkgewogICAgICAgIHJldC51bml0cyA9IFt7CiAgICAgICAgICB1bml0OiBtYXRjaGluZ1VuaXQudW5pdCwKICAgICAgICAgIHByZWZpeDogbWF0Y2hpbmdVbml0LnByZWZpeCwKICAgICAgICAgIHBvd2VyOiAxLjAKICAgICAgICB9XTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBNdWx0aXBsZSB1bml0cyBvciB1bml0cyB3aXRoIHBvd2VycyBhcmUgZm9ybWF0dGVkIGxpa2UgdGhpczoKICAgICAgICAvLyA1IChrZyBtXjIpIC8gKHNeMyBtb2wpCiAgICAgICAgLy8gQnVpbGQgYW4gcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgYmFzZSB1bml0cyBvZiB0aGUgY3VycmVudCB1bml0IHN5c3RlbQogICAgICAgIHZhciBtaXNzaW5nQmFzZURpbSA9IGZhbHNlOwoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIGJhc2VEaW0gPSBCQVNFX0RJTUVOU0lPTlNbaV07CgogICAgICAgICAgaWYgKE1hdGguYWJzKHJldC5kaW1lbnNpb25zW2ldIHx8IDApID4gMWUtMTIpIHsKICAgICAgICAgICAgaWYgKE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkoY3VycmVudFVuaXRTeXN0ZW0sIGJhc2VEaW0pKSB7CiAgICAgICAgICAgICAgcHJvcG9zZWRVbml0TGlzdC5wdXNoKHsKICAgICAgICAgICAgICAgIHVuaXQ6IGN1cnJlbnRVbml0U3lzdGVtW2Jhc2VEaW1dLnVuaXQsCiAgICAgICAgICAgICAgICBwcmVmaXg6IGN1cnJlbnRVbml0U3lzdGVtW2Jhc2VEaW1dLnByZWZpeCwKICAgICAgICAgICAgICAgIHBvd2VyOiByZXQuZGltZW5zaW9uc1tpXSB8fCAwCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgbWlzc2luZ0Jhc2VEaW0gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSAvLyBJcyB0aGUgcHJvcG9zZWQgdW5pdCBsaXN0ICJzaW1wbGVyIiB0aGFuIHRoZSBleGlzdGluZyBvbmU/CgoKICAgICAgICBpZiAocHJvcG9zZWRVbml0TGlzdC5sZW5ndGggPCByZXQudW5pdHMubGVuZ3RoICYmICFtaXNzaW5nQmFzZURpbSkgewogICAgICAgICAgLy8gUmVwbGFjZSB0aGlzIHVuaXQgbGlzdCB3aXRoIHRoZSBwcm9wb3NlZCBsaXN0CiAgICAgICAgICByZXQudW5pdHMgPSBwcm9wb3NlZFVuaXRMaXN0OwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHJldHVybiByZXQ7CiAgfTsKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IFVuaXQgaW4gdGhlIFNJIHN5c3RlbSB3aXRoIHRoZSBzYW1lIHZhbHVlIGFzIHRoaXMgb25lCiAgICovCgoKICBVbml0LnByb3RvdHlwZS50b1NJID0gZnVuY3Rpb24gKCkgewogICAgdmFyIHJldCA9IHRoaXMuY2xvbmUoKTsKICAgIHZhciBwcm9wb3NlZFVuaXRMaXN0ID0gW107IC8vIE11bHRpcGxlIHVuaXRzIG9yIHVuaXRzIHdpdGggcG93ZXJzIGFyZSBmb3JtYXR0ZWQgbGlrZSB0aGlzOgogICAgLy8gNSAoa2cgbV4yKSAvIChzXjMgbW9sKQogICAgLy8gQnVpbGQgYW4gcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgYmFzZSB1bml0cyBvZiB0aGUgU0kgdW5pdCBzeXN0ZW0KCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgYmFzZURpbSA9IEJBU0VfRElNRU5TSU9OU1tpXTsKCiAgICAgIGlmIChNYXRoLmFicyhyZXQuZGltZW5zaW9uc1tpXSB8fCAwKSA+IDFlLTEyKSB7CiAgICAgICAgaWYgKE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkoVU5JVF9TWVNURU1TLnNpLCBiYXNlRGltKSkgewogICAgICAgICAgcHJvcG9zZWRVbml0TGlzdC5wdXNoKHsKICAgICAgICAgICAgdW5pdDogVU5JVF9TWVNURU1TLnNpW2Jhc2VEaW1dLnVuaXQsCiAgICAgICAgICAgIHByZWZpeDogVU5JVF9TWVNURU1TLnNpW2Jhc2VEaW1dLnByZWZpeCwKICAgICAgICAgICAgcG93ZXI6IHJldC5kaW1lbnNpb25zW2ldIHx8IDAKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBleHByZXNzIGN1c3RvbSB1bml0ICcgKyBiYXNlRGltICsgJyBpbiBTSSB1bml0cycpOwogICAgICAgIH0KICAgICAgfQogICAgfSAvLyBSZXBsYWNlIHRoaXMgdW5pdCBsaXN0IHdpdGggdGhlIHByb3Bvc2VkIGxpc3QKCgogICAgcmV0LnVuaXRzID0gcHJvcG9zZWRVbml0TGlzdDsKICAgIHJldC5maXhQcmVmaXggPSB0cnVlOwogICAgcmV0LnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiA9IHRydWU7CiAgICByZXR1cm4gcmV0OwogIH07CiAgLyoqCiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1bml0cyBvZiB0aGlzIFVuaXQsIHdpdGhvdXQgdGhlIHZhbHVlLiBUaGUgdW5pdCBsaXN0IGlzIGZvcm1hdHRlZCBhcy1pcyB3aXRob3V0IGZpcnN0IGJlaW5nIHNpbXBsaWZpZWQuCiAgICogQG1lbWJlcm9mIFVuaXQKICAgKiBAcmV0dXJuIHtzdHJpbmd9CiAgICovCgoKICBVbml0LnByb3RvdHlwZS5mb3JtYXRVbml0cyA9IGZ1bmN0aW9uICgpIHsKICAgIHZhciBzdHJOdW0gPSAnJzsKICAgIHZhciBzdHJEZW4gPSAnJzsKICAgIHZhciBuTnVtID0gMDsKICAgIHZhciBuRGVuID0gMDsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudW5pdHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXMudW5pdHNbaV0ucG93ZXIgPiAwKSB7CiAgICAgICAgbk51bSsrOwogICAgICAgIHN0ck51bSArPSAnICcgKyB0aGlzLnVuaXRzW2ldLnByZWZpeC5uYW1lICsgdGhpcy51bml0c1tpXS51bml0Lm5hbWU7CgogICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnVuaXRzW2ldLnBvd2VyIC0gMS4wKSA+IDFlLTE1KSB7CiAgICAgICAgICBzdHJOdW0gKz0gJ14nICsgdGhpcy51bml0c1tpXS5wb3dlcjsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAodGhpcy51bml0c1tpXS5wb3dlciA8IDApIHsKICAgICAgICBuRGVuKys7CiAgICAgIH0KICAgIH0KCiAgICBpZiAobkRlbiA+IDApIHsKICAgICAgZm9yICh2YXIgX2k0ID0gMDsgX2k0IDwgdGhpcy51bml0cy5sZW5ndGg7IF9pNCsrKSB7CiAgICAgICAgaWYgKHRoaXMudW5pdHNbX2k0XS5wb3dlciA8IDApIHsKICAgICAgICAgIGlmIChuTnVtID4gMCkgewogICAgICAgICAgICBzdHJEZW4gKz0gJyAnICsgdGhpcy51bml0c1tfaTRdLnByZWZpeC5uYW1lICsgdGhpcy51bml0c1tfaTRdLnVuaXQubmFtZTsKCiAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnVuaXRzW19pNF0ucG93ZXIgKyAxLjApID4gMWUtMTUpIHsKICAgICAgICAgICAgICBzdHJEZW4gKz0gJ14nICsgLXRoaXMudW5pdHNbX2k0XS5wb3dlcjsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RyRGVuICs9ICcgJyArIHRoaXMudW5pdHNbX2k0XS5wcmVmaXgubmFtZSArIHRoaXMudW5pdHNbX2k0XS51bml0Lm5hbWU7CiAgICAgICAgICAgIHN0ckRlbiArPSAnXicgKyB0aGlzLnVuaXRzW19pNF0ucG93ZXI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9IC8vIFJlbW92ZSBsZWFkaW5nICIgIgoKCiAgICBzdHJOdW0gPSBzdHJOdW0uc3Vic3RyKDEpOwogICAgc3RyRGVuID0gc3RyRGVuLnN1YnN0cigxKTsgLy8gQWRkIHBhcmFucyBmb3IgYmV0dGVyIGNvcHkvcGFzdGUgYmFjayBpbnRvIGV2YWx1YXRlLCBmb3IgZXhhbXBsZSwgb3IgZm9yIGJldHRlciBwcmV0dHkgcHJpbnQgZm9ybWF0dGluZwoKICAgIGlmIChuTnVtID4gMSAmJiBuRGVuID4gMCkgewogICAgICBzdHJOdW0gPSAnKCcgKyBzdHJOdW0gKyAnKSc7CiAgICB9CgogICAgaWYgKG5EZW4gPiAxICYmIG5OdW0gPiAwKSB7CiAgICAgIHN0ckRlbiA9ICcoJyArIHN0ckRlbiArICcpJzsKICAgIH0KCiAgICB2YXIgc3RyID0gc3RyTnVtOwoKICAgIGlmIChuTnVtID4gMCAmJiBuRGVuID4gMCkgewogICAgICBzdHIgKz0gJyAvICc7CiAgICB9CgogICAgc3RyICs9IHN0ckRlbjsKICAgIHJldHVybiBzdHI7CiAgfTsKICAvKioKICAgKiBHZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIFVuaXQsIHdpdGggb3B0aW9uYWwgZm9ybWF0dGluZyBvcHRpb25zLgogICAqIEBtZW1iZXJvZiBVbml0CiAgICogQHBhcmFtIHtPYmplY3QgfCBudW1iZXIgfCBGdW5jdGlvbn0gW29wdGlvbnNdICBGb3JtYXR0aW5nIG9wdGlvbnMuIFNlZQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliL3V0aWxzL251bWJlcjpmb3JtYXQgZm9yIGEKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGUKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuCiAgICogQHJldHVybiB7c3RyaW5nfQogICAqLwoKCiAgVW5pdC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgIC8vIFNpbXBsZnkgdGhlIHVuaXQgbGlzdCwgdW5sZXNzIGl0IGlzIHZhbHVlbGVzcyBvciB3YXMgY3JlYXRlZCBkaXJlY3RseSBpbiB0aGUKICAgIC8vIGNvbnN0cnVjdG9yIG9yIGFzIHRoZSByZXN1bHQgb2YgdG8gb3IgdG9TSQogICAgdmFyIHNpbXAgPSB0aGlzLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiB8fCB0aGlzLnZhbHVlID09PSBudWxsID8gdGhpcy5jbG9uZSgpIDogdGhpcy5zaW1wbGlmeSgpOyAvLyBBcHBseSBzb21lIGN1c3RvbSBsb2dpYyBmb3IgaGFuZGxpbmcgVkEgYW5kIFZBUi4gVGhlIGdvYWwgaXMgdG8gZXhwcmVzcyB0aGUgdmFsdWUgb2YgdGhlIHVuaXQgYXMgYSByZWFsIHZhbHVlLCBpZiBwb3NzaWJsZS4gT3RoZXJ3aXNlLCB1c2UgYSByZWFsLXZhbHVlZCB1bml0IGluc3RlYWQgb2YgYSBjb21wbGV4LXZhbHVlZCBvbmUuCgogICAgdmFyIGlzSW1hZ2luYXJ5ID0gZmFsc2U7CgogICAgaWYgKHR5cGVvZiBzaW1wLnZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiBzaW1wLnZhbHVlICE9PSBudWxsICYmIE9iamVjdChpc1siaiIgLyogaXNDb21wbGV4ICovXSkoc2ltcC52YWx1ZSkpIHsKICAgICAgLy8gVE9ETzogTWFrZSB0aGlzIGJldHRlciwgZm9yIGV4YW1wbGUsIHVzZSByZWxhdGl2ZSBtYWduaXR1ZGUgb2YgcmUgYW5kIGltIHJhdGhlciB0aGFuIGFic29sdXRlCiAgICAgIGlzSW1hZ2luYXJ5ID0gTWF0aC5hYnMoc2ltcC52YWx1ZS5yZSkgPCAxZS0xNDsKICAgIH0KCiAgICBmb3IgKHZhciBpIGluIHNpbXAudW5pdHMpIHsKICAgICAgaWYgKHNpbXAudW5pdHNbaV0udW5pdCkgewogICAgICAgIGlmIChzaW1wLnVuaXRzW2ldLnVuaXQubmFtZSA9PT0gJ1ZBJyAmJiBpc0ltYWdpbmFyeSkgewogICAgICAgICAgc2ltcC51bml0c1tpXS51bml0ID0gVU5JVFMuVkFSOwogICAgICAgIH0gZWxzZSBpZiAoc2ltcC51bml0c1tpXS51bml0Lm5hbWUgPT09ICdWQVInICYmICFpc0ltYWdpbmFyeSkgewogICAgICAgICAgc2ltcC51bml0c1tpXS51bml0ID0gVU5JVFMuVkE7CiAgICAgICAgfQogICAgICB9CiAgICB9IC8vIE5vdyBhcHBseSB0aGUgYmVzdCBwcmVmaXgKICAgIC8vIFVuaXRzIG11c3QgaGF2ZSBvbmx5IG9uZSB1bml0IGFuZCBub3QgaGF2ZSB0aGUgZml4UHJlZml4IGZsYWcgc2V0CgoKICAgIGlmIChzaW1wLnVuaXRzLmxlbmd0aCA9PT0gMSAmJiAhc2ltcC5maXhQcmVmaXgpIHsKICAgICAgLy8gVW5pdHMgbXVzdCBoYXZlIGludGVnZXIgcG93ZXJzLCBvdGhlcndpc2UgdGhlIHByZWZpeCB3aWxsIGNoYW5nZSB0aGUKICAgICAgLy8gb3V0cHV0dGVkIHZhbHVlIGJ5IG5vdC1hbi1pbnRlZ2VyLXBvd2VyLW9mLXRlbgogICAgICBpZiAoTWF0aC5hYnMoc2ltcC51bml0c1swXS5wb3dlciAtIE1hdGgucm91bmQoc2ltcC51bml0c1swXS5wb3dlcikpIDwgMWUtMTQpIHsKICAgICAgICAvLyBBcHBseSB0aGUgYmVzdCBwcmVmaXgKICAgICAgICBzaW1wLnVuaXRzWzBdLnByZWZpeCA9IHNpbXAuX2Jlc3RQcmVmaXgoKTsKICAgICAgfQogICAgfQoKICAgIHZhciB2YWx1ZSA9IHNpbXAuX2Rlbm9ybWFsaXplKHNpbXAudmFsdWUpOwoKICAgIHZhciBzdHIgPSBzaW1wLnZhbHVlICE9PSBudWxsID8gZm9ybWF0KHZhbHVlLCBvcHRpb25zIHx8IHt9KSA6ICcnOwogICAgdmFyIHVuaXRTdHIgPSBzaW1wLmZvcm1hdFVuaXRzKCk7CgogICAgaWYgKHNpbXAudmFsdWUgJiYgT2JqZWN0KGlzWyJqIiAvKiBpc0NvbXBsZXggKi9dKShzaW1wLnZhbHVlKSkgewogICAgICBzdHIgPSAnKCcgKyBzdHIgKyAnKSc7IC8vIFN1cnJvdW5kIGNvbXBsZXggdmFsdWVzIHdpdGggKCApIHRvIGVuYWJsZSBiZXR0ZXIgcGFyc2luZwogICAgfQoKICAgIGlmICh1bml0U3RyLmxlbmd0aCA+IDAgJiYgc3RyLmxlbmd0aCA+IDApIHsKICAgICAgc3RyICs9ICcgJzsKICAgIH0KCiAgICBzdHIgKz0gdW5pdFN0cjsKICAgIHJldHVybiBzdHI7CiAgfTsKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIGJlc3QgcHJlZml4IHVzaW5nIGN1cnJlbnQgdmFsdWUuCiAgICogQG1lbWJlcm9mIFVuaXQKICAgKiBAcmV0dXJucyB7T2JqZWN0fSBwcmVmaXgKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgVW5pdC5wcm90b3R5cGUuX2Jlc3RQcmVmaXggPSBmdW5jdGlvbiAoKSB7CiAgICBpZiAodGhpcy51bml0cy5sZW5ndGggIT09IDEpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBjb21wdXRlIHRoZSBiZXN0IHByZWZpeCBmb3Igc2luZ2xlIHVuaXRzIHdpdGggaW50ZWdlciBwb3dlcnMsIGxpa2Uga2csIHNeMiwgTl4tMSwgYW5kIHNvIGZvcnRoIScpOwogICAgfQoKICAgIGlmIChNYXRoLmFicyh0aGlzLnVuaXRzWzBdLnBvd2VyIC0gTWF0aC5yb3VuZCh0aGlzLnVuaXRzWzBdLnBvd2VyKSkgPj0gMWUtMTQpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBjb21wdXRlIHRoZSBiZXN0IHByZWZpeCBmb3Igc2luZ2xlIHVuaXRzIHdpdGggaW50ZWdlciBwb3dlcnMsIGxpa2Uga2csIHNeMiwgTl4tMSwgYW5kIHNvIGZvcnRoIScpOwogICAgfSAvLyBmaW5kIHRoZSBiZXN0IHByZWZpeCB2YWx1ZSAocmVzdWx0aW5nIGluIHRoZSB2YWx1ZSBvZiB3aGljaAogICAgLy8gdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBsb2cxMCBpcyBjbG9zZXN0IHRvIHplcm8sCiAgICAvLyB0aG91Z2ggd2l0aCBhIGxpdHRsZSBvZmZzZXQgb2YgMS4yIGZvciBuaWNlciB2YWx1ZXM6IHlvdSBnZXQgYQogICAgLy8gc2VxdWVuY2UgMW1tIDEwMG1tIDUwMG1tIDAuNm0gMW0gMTBtIDEwMG0gNTAwbSAwLjZrbSAxa20gLi4uCiAgICAvLyBOb3RlOiB0aGUgdW5pdHMgdmFsdWUgY2FuIGJlIGFueSBudW1lcmljIHR5cGUsIGJ1dCB0byBmaW5kIHRoZSBiZXN0CiAgICAvLyBwcmVmaXggaXQncyBlbm91Z2ggdG8gd29yayB3aXRoIGxpbWl0ZWQgcHJlY2lzaW9uIG9mIGEgcmVndWxhciBudW1iZXIKICAgIC8vIFVwZGF0ZTogdXNpbmcgbWF0aGpzIGFicyBzaW5jZSB3ZSBhbHNvIGFsbG93IGNvbXBsZXggbnVtYmVycwoKCiAgICB2YXIgYWJzVmFsdWUgPSB0aGlzLnZhbHVlICE9PSBudWxsID8gYWJzKHRoaXMudmFsdWUpIDogMDsKICAgIHZhciBhYnNVbml0VmFsdWUgPSBhYnModGhpcy51bml0c1swXS51bml0LnZhbHVlKTsKICAgIHZhciBiZXN0UHJlZml4ID0gdGhpcy51bml0c1swXS5wcmVmaXg7CgogICAgaWYgKGFic1ZhbHVlID09PSAwKSB7CiAgICAgIHJldHVybiBiZXN0UHJlZml4OwogICAgfQoKICAgIHZhciBwb3dlciA9IHRoaXMudW5pdHNbMF0ucG93ZXI7CiAgICB2YXIgYmVzdERpZmYgPSBNYXRoLmxvZyhhYnNWYWx1ZSAvIE1hdGgucG93KGJlc3RQcmVmaXgudmFsdWUgKiBhYnNVbml0VmFsdWUsIHBvd2VyKSkgLyBNYXRoLkxOMTAgLSAxLjI7CiAgICBpZiAoYmVzdERpZmYgPiAtMi4yMDAwMDEgJiYgYmVzdERpZmYgPCAxLjgwMDAwMSkgcmV0dXJuIGJlc3RQcmVmaXg7IC8vIEFsbG93IHRoZSBvcmlnaW5hbCBwcmVmaXgKCiAgICBiZXN0RGlmZiA9IE1hdGguYWJzKGJlc3REaWZmKTsKICAgIHZhciBwcmVmaXhlcyA9IHRoaXMudW5pdHNbMF0udW5pdC5wcmVmaXhlczsKCiAgICBmb3IgKHZhciBwIGluIHByZWZpeGVzKSB7CiAgICAgIGlmIChPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKHByZWZpeGVzLCBwKSkgewogICAgICAgIHZhciBwcmVmaXggPSBwcmVmaXhlc1twXTsKCiAgICAgICAgaWYgKHByZWZpeC5zY2llbnRpZmljKSB7CiAgICAgICAgICB2YXIgZGlmZiA9IE1hdGguYWJzKE1hdGgubG9nKGFic1ZhbHVlIC8gTWF0aC5wb3cocHJlZml4LnZhbHVlICogYWJzVW5pdFZhbHVlLCBwb3dlcikpIC8gTWF0aC5MTjEwIC0gMS4yKTsKCiAgICAgICAgICBpZiAoZGlmZiA8IGJlc3REaWZmIHx8IGRpZmYgPT09IGJlc3REaWZmICYmIHByZWZpeC5uYW1lLmxlbmd0aCA8IGJlc3RQcmVmaXgubmFtZS5sZW5ndGgpIHsKICAgICAgICAgICAgLy8gY2hvb3NlIHRoZSBwcmVmaXggd2l0aCB0aGUgc21hbGxlc3QgZGlmZiwgb3IgaWYgZXF1YWwsIGNob29zZSB0aGUgb25lCiAgICAgICAgICAgIC8vIHdpdGggdGhlIHNob3J0ZXN0IG5hbWUgKGNhbiBoYXBwZW4gd2l0aCBTSE9SVExPTkcgZm9yIGV4YW1wbGUpCiAgICAgICAgICAgIGJlc3RQcmVmaXggPSBwcmVmaXg7CiAgICAgICAgICAgIGJlc3REaWZmID0gZGlmZjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gYmVzdFByZWZpeDsKICB9OwogIC8qKgogICAqIFJldHVybnMgYW4gYXJyYXkgb2YgdW5pdHMgd2hvc2Ugc3VtIGlzIGVxdWFsIHRvIHRoaXMgdW5pdAogICAqIEBtZW1iZXJvZiBVbml0CiAgICogQHBhcmFtIHtBcnJheX0gW3BhcnRzXSBBbiBhcnJheSBvZiBzdHJpbmdzIG9yIHZhbHVlbGVzcyB1bml0cy4KICAgKgogICAqICAgRXhhbXBsZToKICAgKgogICAqICAgY29uc3QgdSA9IG5ldyBVbml0KDEsICdtJykKICAgKiAgIHUuc3BsaXRVbml0KFsnZmVldCcsICdpbmNoJ10pCiAgICogICAgIFsgMyBmZWV0LCAzLjM3MDA3ODc0MDE1NzUgaW5jaCBdCiAgICoKICAgKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgdW5pdHMuCiAgICovCgoKICBVbml0LnByb3RvdHlwZS5zcGxpdFVuaXQgPSBmdW5jdGlvbiAocGFydHMpIHsKICAgIHZhciB4ID0gdGhpcy5jbG9uZSgpOwogICAgdmFyIHJldCA9IFtdOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHsKICAgICAgLy8gQ29udmVydCB4IHRvIHRoZSByZXF1ZXN0ZWQgdW5pdAogICAgICB4ID0geC50byhwYXJ0c1tpXSk7CiAgICAgIGlmIChpID09PSBwYXJ0cy5sZW5ndGggLSAxKSBicmVhazsgLy8gR2V0IHRoZSBudW1lcmljIHZhbHVlIG9mIHRoaXMgdW5pdAoKICAgICAgdmFyIHhOdW1lcmljID0geC50b051bWVyaWMoKTsgLy8gQ2hlY2sgdG8gc2VlIGlmIHhOdW1lcmljIGlzIG5lYXJseSBlcXVhbCB0byBhbiBpbnRlZ2VyLAogICAgICAvLyBzaW5jZSBmaXggY2FuIGluY29ycmVjdGx5IHJvdW5kIGRvd24gaWYgdGhlcmUgaXMgcm91bmQtb2ZmIGVycm9yCgogICAgICB2YXIgeFJvdW5kZWQgPSByb3VuZCh4TnVtZXJpYyk7CiAgICAgIHZhciB4Rml4ZWQgPSB2b2lkIDA7CiAgICAgIHZhciBpc05lYXJseUVxdWFsID0gZXF1YWwoeFJvdW5kZWQsIHhOdW1lcmljKTsKCiAgICAgIGlmIChpc05lYXJseUVxdWFsKSB7CiAgICAgICAgeEZpeGVkID0geFJvdW5kZWQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgeEZpeGVkID0gZml4KHgudG9OdW1lcmljKCkpOwogICAgICB9CgogICAgICB2YXIgeSA9IG5ldyBVbml0KHhGaXhlZCwgcGFydHNbaV0udG9TdHJpbmcoKSk7CiAgICAgIHJldC5wdXNoKHkpOwogICAgICB4ID0gc3VidHJhY3QoeCwgeSk7CiAgICB9IC8vIFRoaXMgbGl0dGxlIGJpdCBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgcmVtYWluZGVyIHNob3VsZCBiZSAwIGJ1dCBpcyBhIGxpdHRsZSBiaXQgb2ZmLgogICAgLy8gQnV0IGluc3RlYWQgb2YgY29tcGFyaW5nIHgsIHRoZSByZW1haW5kZXIsIHdpdGggemVyby0td2Ugd2lsbCBjb21wYXJlIHRoZSBzdW0gb2YKICAgIC8vIGFsbCB0aGUgcGFydHMgc28gZmFyIHdpdGggdGhlIG9yaWdpbmFsIHZhbHVlLiBJZiB0aGV5IGFyZSBuZWFybHkgZXF1YWwsCiAgICAvLyB3ZSBzZXQgdGhlIHJlbWFpbmRlciB0byAwLgoKCiAgICB2YXIgdGVzdFN1bSA9IDA7CgogICAgZm9yICh2YXIgX2k1ID0gMDsgX2k1IDwgcmV0Lmxlbmd0aDsgX2k1KyspIHsKICAgICAgdGVzdFN1bSA9IGFkZFNjYWxhcih0ZXN0U3VtLCByZXRbX2k1XS52YWx1ZSk7CiAgICB9CgogICAgaWYgKGVxdWFsKHRlc3RTdW0sIHRoaXMudmFsdWUpKSB7CiAgICAgIHgudmFsdWUgPSAwOwogICAgfQoKICAgIHJldC5wdXNoKHgpOwogICAgcmV0dXJuIHJldDsKICB9OwoKICB2YXIgUFJFRklYRVMgPSB7CiAgICBOT05FOiB7CiAgICAgICcnOiB7CiAgICAgICAgbmFtZTogJycsCiAgICAgICAgdmFsdWU6IDEsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9CiAgICB9LAogICAgU0hPUlQ6IHsKICAgICAgJyc6IHsKICAgICAgICBuYW1lOiAnJywKICAgICAgICB2YWx1ZTogMSwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIGRhOiB7CiAgICAgICAgbmFtZTogJ2RhJywKICAgICAgICB2YWx1ZTogMWUxLAogICAgICAgIHNjaWVudGlmaWM6IGZhbHNlCiAgICAgIH0sCiAgICAgIGg6IHsKICAgICAgICBuYW1lOiAnaCcsCiAgICAgICAgdmFsdWU6IDFlMiwKICAgICAgICBzY2llbnRpZmljOiBmYWxzZQogICAgICB9LAogICAgICBrOiB7CiAgICAgICAgbmFtZTogJ2snLAogICAgICAgIHZhbHVlOiAxZTMsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBNOiB7CiAgICAgICAgbmFtZTogJ00nLAogICAgICAgIHZhbHVlOiAxZTYsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBHOiB7CiAgICAgICAgbmFtZTogJ0cnLAogICAgICAgIHZhbHVlOiAxZTksCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBUOiB7CiAgICAgICAgbmFtZTogJ1QnLAogICAgICAgIHZhbHVlOiAxZTEyLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgUDogewogICAgICAgIG5hbWU6ICdQJywKICAgICAgICB2YWx1ZTogMWUxNSwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIEU6IHsKICAgICAgICBuYW1lOiAnRScsCiAgICAgICAgdmFsdWU6IDFlMTgsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBaOiB7CiAgICAgICAgbmFtZTogJ1onLAogICAgICAgIHZhbHVlOiAxZTIxLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgWTogewogICAgICAgIG5hbWU6ICdZJywKICAgICAgICB2YWx1ZTogMWUyNCwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIGQ6IHsKICAgICAgICBuYW1lOiAnZCcsCiAgICAgICAgdmFsdWU6IDFlLTEsCiAgICAgICAgc2NpZW50aWZpYzogZmFsc2UKICAgICAgfSwKICAgICAgYzogewogICAgICAgIG5hbWU6ICdjJywKICAgICAgICB2YWx1ZTogMWUtMiwKICAgICAgICBzY2llbnRpZmljOiBmYWxzZQogICAgICB9LAogICAgICBtOiB7CiAgICAgICAgbmFtZTogJ20nLAogICAgICAgIHZhbHVlOiAxZS0zLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgdTogewogICAgICAgIG5hbWU6ICd1JywKICAgICAgICB2YWx1ZTogMWUtNiwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIG46IHsKICAgICAgICBuYW1lOiAnbicsCiAgICAgICAgdmFsdWU6IDFlLTksCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBwOiB7CiAgICAgICAgbmFtZTogJ3AnLAogICAgICAgIHZhbHVlOiAxZS0xMiwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIGY6IHsKICAgICAgICBuYW1lOiAnZicsCiAgICAgICAgdmFsdWU6IDFlLTE1LAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgYTogewogICAgICAgIG5hbWU6ICdhJywKICAgICAgICB2YWx1ZTogMWUtMTgsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICB6OiB7CiAgICAgICAgbmFtZTogJ3onLAogICAgICAgIHZhbHVlOiAxZS0yMSwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIHk6IHsKICAgICAgICBuYW1lOiAneScsCiAgICAgICAgdmFsdWU6IDFlLTI0LAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfQogICAgfSwKICAgIExPTkc6IHsKICAgICAgJyc6IHsKICAgICAgICBuYW1lOiAnJywKICAgICAgICB2YWx1ZTogMSwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIGRlY2E6IHsKICAgICAgICBuYW1lOiAnZGVjYScsCiAgICAgICAgdmFsdWU6IDFlMSwKICAgICAgICBzY2llbnRpZmljOiBmYWxzZQogICAgICB9LAogICAgICBoZWN0bzogewogICAgICAgIG5hbWU6ICdoZWN0bycsCiAgICAgICAgdmFsdWU6IDFlMiwKICAgICAgICBzY2llbnRpZmljOiBmYWxzZQogICAgICB9LAogICAgICBraWxvOiB7CiAgICAgICAgbmFtZTogJ2tpbG8nLAogICAgICAgIHZhbHVlOiAxZTMsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBtZWdhOiB7CiAgICAgICAgbmFtZTogJ21lZ2EnLAogICAgICAgIHZhbHVlOiAxZTYsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBnaWdhOiB7CiAgICAgICAgbmFtZTogJ2dpZ2EnLAogICAgICAgIHZhbHVlOiAxZTksCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICB0ZXJhOiB7CiAgICAgICAgbmFtZTogJ3RlcmEnLAogICAgICAgIHZhbHVlOiAxZTEyLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgcGV0YTogewogICAgICAgIG5hbWU6ICdwZXRhJywKICAgICAgICB2YWx1ZTogMWUxNSwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIGV4YTogewogICAgICAgIG5hbWU6ICdleGEnLAogICAgICAgIHZhbHVlOiAxZTE4LAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgemV0dGE6IHsKICAgICAgICBuYW1lOiAnemV0dGEnLAogICAgICAgIHZhbHVlOiAxZTIxLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgeW90dGE6IHsKICAgICAgICBuYW1lOiAneW90dGEnLAogICAgICAgIHZhbHVlOiAxZTI0LAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgZGVjaTogewogICAgICAgIG5hbWU6ICdkZWNpJywKICAgICAgICB2YWx1ZTogMWUtMSwKICAgICAgICBzY2llbnRpZmljOiBmYWxzZQogICAgICB9LAogICAgICBjZW50aTogewogICAgICAgIG5hbWU6ICdjZW50aScsCiAgICAgICAgdmFsdWU6IDFlLTIsCiAgICAgICAgc2NpZW50aWZpYzogZmFsc2UKICAgICAgfSwKICAgICAgbWlsbGk6IHsKICAgICAgICBuYW1lOiAnbWlsbGknLAogICAgICAgIHZhbHVlOiAxZS0zLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgbWljcm86IHsKICAgICAgICBuYW1lOiAnbWljcm8nLAogICAgICAgIHZhbHVlOiAxZS02LAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgbmFubzogewogICAgICAgIG5hbWU6ICduYW5vJywKICAgICAgICB2YWx1ZTogMWUtOSwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIHBpY286IHsKICAgICAgICBuYW1lOiAncGljbycsCiAgICAgICAgdmFsdWU6IDFlLTEyLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgZmVtdG86IHsKICAgICAgICBuYW1lOiAnZmVtdG8nLAogICAgICAgIHZhbHVlOiAxZS0xNSwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIGF0dG86IHsKICAgICAgICBuYW1lOiAnYXR0bycsCiAgICAgICAgdmFsdWU6IDFlLTE4LAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgemVwdG86IHsKICAgICAgICBuYW1lOiAnemVwdG8nLAogICAgICAgIHZhbHVlOiAxZS0yMSwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIHlvY3RvOiB7CiAgICAgICAgbmFtZTogJ3lvY3RvJywKICAgICAgICB2YWx1ZTogMWUtMjQsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9CiAgICB9LAogICAgU1FVQVJFRDogewogICAgICAnJzogewogICAgICAgIG5hbWU6ICcnLAogICAgICAgIHZhbHVlOiAxLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgZGE6IHsKICAgICAgICBuYW1lOiAnZGEnLAogICAgICAgIHZhbHVlOiAxZTIsCiAgICAgICAgc2NpZW50aWZpYzogZmFsc2UKICAgICAgfSwKICAgICAgaDogewogICAgICAgIG5hbWU6ICdoJywKICAgICAgICB2YWx1ZTogMWU0LAogICAgICAgIHNjaWVudGlmaWM6IGZhbHNlCiAgICAgIH0sCiAgICAgIGs6IHsKICAgICAgICBuYW1lOiAnaycsCiAgICAgICAgdmFsdWU6IDFlNiwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIE06IHsKICAgICAgICBuYW1lOiAnTScsCiAgICAgICAgdmFsdWU6IDFlMTIsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBHOiB7CiAgICAgICAgbmFtZTogJ0cnLAogICAgICAgIHZhbHVlOiAxZTE4LAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgVDogewogICAgICAgIG5hbWU6ICdUJywKICAgICAgICB2YWx1ZTogMWUyNCwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIFA6IHsKICAgICAgICBuYW1lOiAnUCcsCiAgICAgICAgdmFsdWU6IDFlMzAsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBFOiB7CiAgICAgICAgbmFtZTogJ0UnLAogICAgICAgIHZhbHVlOiAxZTM2LAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgWjogewogICAgICAgIG5hbWU6ICdaJywKICAgICAgICB2YWx1ZTogMWU0MiwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIFk6IHsKICAgICAgICBuYW1lOiAnWScsCiAgICAgICAgdmFsdWU6IDFlNDgsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBkOiB7CiAgICAgICAgbmFtZTogJ2QnLAogICAgICAgIHZhbHVlOiAxZS0yLAogICAgICAgIHNjaWVudGlmaWM6IGZhbHNlCiAgICAgIH0sCiAgICAgIGM6IHsKICAgICAgICBuYW1lOiAnYycsCiAgICAgICAgdmFsdWU6IDFlLTQsCiAgICAgICAgc2NpZW50aWZpYzogZmFsc2UKICAgICAgfSwKICAgICAgbTogewogICAgICAgIG5hbWU6ICdtJywKICAgICAgICB2YWx1ZTogMWUtNiwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIHU6IHsKICAgICAgICBuYW1lOiAndScsCiAgICAgICAgdmFsdWU6IDFlLTEyLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgbjogewogICAgICAgIG5hbWU6ICduJywKICAgICAgICB2YWx1ZTogMWUtMTgsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBwOiB7CiAgICAgICAgbmFtZTogJ3AnLAogICAgICAgIHZhbHVlOiAxZS0yNCwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIGY6IHsKICAgICAgICBuYW1lOiAnZicsCiAgICAgICAgdmFsdWU6IDFlLTMwLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgYTogewogICAgICAgIG5hbWU6ICdhJywKICAgICAgICB2YWx1ZTogMWUtMzYsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICB6OiB7CiAgICAgICAgbmFtZTogJ3onLAogICAgICAgIHZhbHVlOiAxZS00MiwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIHk6IHsKICAgICAgICBuYW1lOiAneScsCiAgICAgICAgdmFsdWU6IDFlLTQ4LAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfQogICAgfSwKICAgIENVQklDOiB7CiAgICAgICcnOiB7CiAgICAgICAgbmFtZTogJycsCiAgICAgICAgdmFsdWU6IDEsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBkYTogewogICAgICAgIG5hbWU6ICdkYScsCiAgICAgICAgdmFsdWU6IDFlMywKICAgICAgICBzY2llbnRpZmljOiBmYWxzZQogICAgICB9LAogICAgICBoOiB7CiAgICAgICAgbmFtZTogJ2gnLAogICAgICAgIHZhbHVlOiAxZTYsCiAgICAgICAgc2NpZW50aWZpYzogZmFsc2UKICAgICAgfSwKICAgICAgazogewogICAgICAgIG5hbWU6ICdrJywKICAgICAgICB2YWx1ZTogMWU5LAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgTTogewogICAgICAgIG5hbWU6ICdNJywKICAgICAgICB2YWx1ZTogMWUxOCwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIEc6IHsKICAgICAgICBuYW1lOiAnRycsCiAgICAgICAgdmFsdWU6IDFlMjcsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBUOiB7CiAgICAgICAgbmFtZTogJ1QnLAogICAgICAgIHZhbHVlOiAxZTM2LAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgUDogewogICAgICAgIG5hbWU6ICdQJywKICAgICAgICB2YWx1ZTogMWU0NSwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIEU6IHsKICAgICAgICBuYW1lOiAnRScsCiAgICAgICAgdmFsdWU6IDFlNTQsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBaOiB7CiAgICAgICAgbmFtZTogJ1onLAogICAgICAgIHZhbHVlOiAxZTYzLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgWTogewogICAgICAgIG5hbWU6ICdZJywKICAgICAgICB2YWx1ZTogMWU3MiwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIGQ6IHsKICAgICAgICBuYW1lOiAnZCcsCiAgICAgICAgdmFsdWU6IDFlLTMsCiAgICAgICAgc2NpZW50aWZpYzogZmFsc2UKICAgICAgfSwKICAgICAgYzogewogICAgICAgIG5hbWU6ICdjJywKICAgICAgICB2YWx1ZTogMWUtNiwKICAgICAgICBzY2llbnRpZmljOiBmYWxzZQogICAgICB9LAogICAgICBtOiB7CiAgICAgICAgbmFtZTogJ20nLAogICAgICAgIHZhbHVlOiAxZS05LAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgdTogewogICAgICAgIG5hbWU6ICd1JywKICAgICAgICB2YWx1ZTogMWUtMTgsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBuOiB7CiAgICAgICAgbmFtZTogJ24nLAogICAgICAgIHZhbHVlOiAxZS0yNywKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIHA6IHsKICAgICAgICBuYW1lOiAncCcsCiAgICAgICAgdmFsdWU6IDFlLTM2LAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgZjogewogICAgICAgIG5hbWU6ICdmJywKICAgICAgICB2YWx1ZTogMWUtNDUsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBhOiB7CiAgICAgICAgbmFtZTogJ2EnLAogICAgICAgIHZhbHVlOiAxZS01NCwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIHo6IHsKICAgICAgICBuYW1lOiAneicsCiAgICAgICAgdmFsdWU6IDFlLTYzLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgeTogewogICAgICAgIG5hbWU6ICd5JywKICAgICAgICB2YWx1ZTogMWUtNzIsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9CiAgICB9LAogICAgQklOQVJZX1NIT1JUX1NJOiB7CiAgICAgICcnOiB7CiAgICAgICAgbmFtZTogJycsCiAgICAgICAgdmFsdWU6IDEsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBrOiB7CiAgICAgICAgbmFtZTogJ2snLAogICAgICAgIHZhbHVlOiAxZTMsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBNOiB7CiAgICAgICAgbmFtZTogJ00nLAogICAgICAgIHZhbHVlOiAxZTYsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBHOiB7CiAgICAgICAgbmFtZTogJ0cnLAogICAgICAgIHZhbHVlOiAxZTksCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBUOiB7CiAgICAgICAgbmFtZTogJ1QnLAogICAgICAgIHZhbHVlOiAxZTEyLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgUDogewogICAgICAgIG5hbWU6ICdQJywKICAgICAgICB2YWx1ZTogMWUxNSwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIEU6IHsKICAgICAgICBuYW1lOiAnRScsCiAgICAgICAgdmFsdWU6IDFlMTgsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBaOiB7CiAgICAgICAgbmFtZTogJ1onLAogICAgICAgIHZhbHVlOiAxZTIxLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgWTogewogICAgICAgIG5hbWU6ICdZJywKICAgICAgICB2YWx1ZTogMWUyNCwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0KICAgIH0sCiAgICBCSU5BUllfU0hPUlRfSUVDOiB7CiAgICAgICcnOiB7CiAgICAgICAgbmFtZTogJycsCiAgICAgICAgdmFsdWU6IDEsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBLaTogewogICAgICAgIG5hbWU6ICdLaScsCiAgICAgICAgdmFsdWU6IDEwMjQsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBNaTogewogICAgICAgIG5hbWU6ICdNaScsCiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDIpLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgR2k6IHsKICAgICAgICBuYW1lOiAnR2knLAogICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCAzKSwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIFRpOiB7CiAgICAgICAgbmFtZTogJ1RpJywKICAgICAgICB2YWx1ZTogTWF0aC5wb3coMTAyNCwgNCksCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBQaTogewogICAgICAgIG5hbWU6ICdQaScsCiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDUpLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgRWk6IHsKICAgICAgICBuYW1lOiAnRWknLAogICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCA2KSwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIFppOiB7CiAgICAgICAgbmFtZTogJ1ppJywKICAgICAgICB2YWx1ZTogTWF0aC5wb3coMTAyNCwgNyksCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBZaTogewogICAgICAgIG5hbWU6ICdZaScsCiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDgpLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfQogICAgfSwKICAgIEJJTkFSWV9MT05HX1NJOiB7CiAgICAgICcnOiB7CiAgICAgICAgbmFtZTogJycsCiAgICAgICAgdmFsdWU6IDEsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBraWxvOiB7CiAgICAgICAgbmFtZTogJ2tpbG8nLAogICAgICAgIHZhbHVlOiAxZTMsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBtZWdhOiB7CiAgICAgICAgbmFtZTogJ21lZ2EnLAogICAgICAgIHZhbHVlOiAxZTYsCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICBnaWdhOiB7CiAgICAgICAgbmFtZTogJ2dpZ2EnLAogICAgICAgIHZhbHVlOiAxZTksCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICB0ZXJhOiB7CiAgICAgICAgbmFtZTogJ3RlcmEnLAogICAgICAgIHZhbHVlOiAxZTEyLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgcGV0YTogewogICAgICAgIG5hbWU6ICdwZXRhJywKICAgICAgICB2YWx1ZTogMWUxNSwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIGV4YTogewogICAgICAgIG5hbWU6ICdleGEnLAogICAgICAgIHZhbHVlOiAxZTE4LAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgemV0dGE6IHsKICAgICAgICBuYW1lOiAnemV0dGEnLAogICAgICAgIHZhbHVlOiAxZTIxLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgeW90dGE6IHsKICAgICAgICBuYW1lOiAneW90dGEnLAogICAgICAgIHZhbHVlOiAxZTI0LAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfQogICAgfSwKICAgIEJJTkFSWV9MT05HX0lFQzogewogICAgICAnJzogewogICAgICAgIG5hbWU6ICcnLAogICAgICAgIHZhbHVlOiAxLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAga2liaTogewogICAgICAgIG5hbWU6ICdraWJpJywKICAgICAgICB2YWx1ZTogMTAyNCwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIG1lYmk6IHsKICAgICAgICBuYW1lOiAnbWViaScsCiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDIpLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgZ2liaTogewogICAgICAgIG5hbWU6ICdnaWJpJywKICAgICAgICB2YWx1ZTogTWF0aC5wb3coMTAyNCwgMyksCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICB0ZWJpOiB7CiAgICAgICAgbmFtZTogJ3RlYmknLAogICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCA0KSwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIHBlYmk6IHsKICAgICAgICBuYW1lOiAncGViaScsCiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDUpLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgZXhpOiB7CiAgICAgICAgbmFtZTogJ2V4aScsCiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDYpLAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfSwKICAgICAgemViaTogewogICAgICAgIG5hbWU6ICd6ZWJpJywKICAgICAgICB2YWx1ZTogTWF0aC5wb3coMTAyNCwgNyksCiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZQogICAgICB9LAogICAgICB5b2JpOiB7CiAgICAgICAgbmFtZTogJ3lvYmknLAogICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCA4KSwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0KICAgIH0sCiAgICBCVFU6IHsKICAgICAgJyc6IHsKICAgICAgICBuYW1lOiAnJywKICAgICAgICB2YWx1ZTogMSwKICAgICAgICBzY2llbnRpZmljOiB0cnVlCiAgICAgIH0sCiAgICAgIE1NOiB7CiAgICAgICAgbmFtZTogJ01NJywKICAgICAgICB2YWx1ZTogMWU2LAogICAgICAgIHNjaWVudGlmaWM6IHRydWUKICAgICAgfQogICAgfQogIH07CiAgUFJFRklYRVMuU0hPUlRMT05HID0gX2V4dGVuZHMoe30sIFBSRUZJWEVTLlNIT1JULCBQUkVGSVhFUy5MT05HKTsKICBQUkVGSVhFUy5CSU5BUllfU0hPUlQgPSBfZXh0ZW5kcyh7fSwgUFJFRklYRVMuQklOQVJZX1NIT1JUX1NJLCBQUkVGSVhFUy5CSU5BUllfU0hPUlRfSUVDKTsKICBQUkVGSVhFUy5CSU5BUllfTE9ORyA9IF9leHRlbmRzKHt9LCBQUkVGSVhFUy5CSU5BUllfTE9OR19TSSwgUFJFRklYRVMuQklOQVJZX0xPTkdfSUVDKTsKICAvKiBJbnRlcm5hbGx5LCBlYWNoIHVuaXQgaXMgcmVwcmVzZW50ZWQgYnkgYSB2YWx1ZSBhbmQgYSBkaW1lbnNpb24gYXJyYXkuIFRoZSBlbGVtZW50cyBvZiB0aGUgZGltZW5zaW9ucyBhcnJheSBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZzoKICAgKiBJbmRleCAgRGltZW5zaW9uCiAgICogLS0tLS0gIC0tLS0tLS0tLQogICAqICAgMCAgICBMZW5ndGgKICAgKiAgIDEgICAgTWFzcwogICAqICAgMiAgICBUaW1lCiAgICogICAzICAgIEN1cnJlbnQKICAgKiAgIDQgICAgVGVtcGVyYXR1cmUKICAgKiAgIDUgICAgTHVtaW5vdXMgaW50ZW5zaXR5CiAgICogICA2ICAgIEFtb3VudCBvZiBzdWJzdGFuY2UKICAgKiAgIDcgICAgQW5nbGUKICAgKiAgIDggICAgQml0IChkaWdpdGFsKQogICAqIEZvciBleGFtcGxlLCB0aGUgdW5pdCAiMjk4LjE1IEsiIGlzIGEgcHVyZSB0ZW1wZXJhdHVyZSBhbmQgd291bGQgaGF2ZSBhIHZhbHVlIG9mIDI5OC4xNSBhbmQgYSBkaW1lbnNpb24gYXJyYXkgb2YgWzAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDBdLiBUaGUgdW5pdCAiMSBjYWwgLyAoZ20gwrBDKSIgY2FuIGJlIHdyaXR0ZW4gaW4gdGVybXMgb2YgdGhlIDkgZnVuZGFtZW50YWwgZGltZW5zaW9ucyBhcyBbbGVuZ3RoXjJdIC8gKFt0aW1lXjJdICogW3RlbXBlcmF0dXJlXSksIGFuZCB3b3VsZCBhIHZhbHVlIG9mIChhZnRlciBjb252ZXJzaW9uIHRvIFNJKSA0MTg0LjAgYW5kIGEgZGltZW5zaW9ucyBhcnJheSBvZiBbMiwgMCwgLTIsIDAsIC0xLCAwLCAwLCAwLCAwXS4KICAgKgogICAqLwoKICB2YXIgQkFTRV9ESU1FTlNJT05TID0gWydNQVNTJywgJ0xFTkdUSCcsICdUSU1FJywgJ0NVUlJFTlQnLCAnVEVNUEVSQVRVUkUnLCAnTFVNSU5PVVNfSU5URU5TSVRZJywgJ0FNT1VOVF9PRl9TVUJTVEFOQ0UnLCAnQU5HTEUnLCAnQklUJ107CiAgdmFyIEJBU0VfVU5JVFMgPSB7CiAgICBOT05FOiB7CiAgICAgIGRpbWVuc2lvbnM6IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXQogICAgfSwKICAgIE1BU1M6IHsKICAgICAgZGltZW5zaW9uczogWzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdCiAgICB9LAogICAgTEVOR1RIOiB7CiAgICAgIGRpbWVuc2lvbnM6IFswLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwXQogICAgfSwKICAgIFRJTUU6IHsKICAgICAgZGltZW5zaW9uczogWzAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDBdCiAgICB9LAogICAgQ1VSUkVOVDogewogICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMF0KICAgIH0sCiAgICBURU1QRVJBVFVSRTogewogICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMF0KICAgIH0sCiAgICBMVU1JTk9VU19JTlRFTlNJVFk6IHsKICAgICAgZGltZW5zaW9uczogWzAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDBdCiAgICB9LAogICAgQU1PVU5UX09GX1NVQlNUQU5DRTogewogICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMF0KICAgIH0sCiAgICBGT1JDRTogewogICAgICBkaW1lbnNpb25zOiBbMSwgMSwgLTIsIDAsIDAsIDAsIDAsIDAsIDBdCiAgICB9LAogICAgU1VSRkFDRTogewogICAgICBkaW1lbnNpb25zOiBbMCwgMiwgMCwgMCwgMCwgMCwgMCwgMCwgMF0KICAgIH0sCiAgICBWT0xVTUU6IHsKICAgICAgZGltZW5zaW9uczogWzAsIDMsIDAsIDAsIDAsIDAsIDAsIDAsIDBdCiAgICB9LAogICAgRU5FUkdZOiB7CiAgICAgIGRpbWVuc2lvbnM6IFsxLCAyLCAtMiwgMCwgMCwgMCwgMCwgMCwgMF0KICAgIH0sCiAgICBQT1dFUjogewogICAgICBkaW1lbnNpb25zOiBbMSwgMiwgLTMsIDAsIDAsIDAsIDAsIDAsIDBdCiAgICB9LAogICAgUFJFU1NVUkU6IHsKICAgICAgZGltZW5zaW9uczogWzEsIC0xLCAtMiwgMCwgMCwgMCwgMCwgMCwgMF0KICAgIH0sCiAgICBFTEVDVFJJQ19DSEFSR0U6IHsKICAgICAgZGltZW5zaW9uczogWzAsIDAsIDEsIDEsIDAsIDAsIDAsIDAsIDBdCiAgICB9LAogICAgRUxFQ1RSSUNfQ0FQQUNJVEFOQ0U6IHsKICAgICAgZGltZW5zaW9uczogWy0xLCAtMiwgNCwgMiwgMCwgMCwgMCwgMCwgMF0KICAgIH0sCiAgICBFTEVDVFJJQ19QT1RFTlRJQUw6IHsKICAgICAgZGltZW5zaW9uczogWzEsIDIsIC0zLCAtMSwgMCwgMCwgMCwgMCwgMF0KICAgIH0sCiAgICBFTEVDVFJJQ19SRVNJU1RBTkNFOiB7CiAgICAgIGRpbWVuc2lvbnM6IFsxLCAyLCAtMywgLTIsIDAsIDAsIDAsIDAsIDBdCiAgICB9LAogICAgRUxFQ1RSSUNfSU5EVUNUQU5DRTogewogICAgICBkaW1lbnNpb25zOiBbMSwgMiwgLTIsIC0yLCAwLCAwLCAwLCAwLCAwXQogICAgfSwKICAgIEVMRUNUUklDX0NPTkRVQ1RBTkNFOiB7CiAgICAgIGRpbWVuc2lvbnM6IFstMSwgLTIsIDMsIDIsIDAsIDAsIDAsIDAsIDBdCiAgICB9LAogICAgTUFHTkVUSUNfRkxVWDogewogICAgICBkaW1lbnNpb25zOiBbMSwgMiwgLTIsIC0xLCAwLCAwLCAwLCAwLCAwXQogICAgfSwKICAgIE1BR05FVElDX0ZMVVhfREVOU0lUWTogewogICAgICBkaW1lbnNpb25zOiBbMSwgMCwgLTIsIC0xLCAwLCAwLCAwLCAwLCAwXQogICAgfSwKICAgIEZSRVFVRU5DWTogewogICAgICBkaW1lbnNpb25zOiBbMCwgMCwgLTEsIDAsIDAsIDAsIDAsIDAsIDBdCiAgICB9LAogICAgQU5HTEU6IHsKICAgICAgZGltZW5zaW9uczogWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDBdCiAgICB9LAogICAgQklUOiB7CiAgICAgIGRpbWVuc2lvbnM6IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxXQogICAgfQogIH07CgogIGZvciAodmFyIGtleSBpbiBCQVNFX1VOSVRTKSB7CiAgICBCQVNFX1VOSVRTW2tleV0ua2V5ID0ga2V5OwogIH0KCiAgdmFyIEJBU0VfVU5JVF9OT05FID0ge307CiAgdmFyIFVOSVRfTk9ORSA9IHsKICAgIG5hbWU6ICcnLAogICAgYmFzZTogQkFTRV9VTklUX05PTkUsCiAgICB2YWx1ZTogMSwKICAgIG9mZnNldDogMCwKICAgIGRpbWVuc2lvbnM6IEJBU0VfRElNRU5TSU9OUy5tYXAoZnVuY3Rpb24gKHgpIHsKICAgICAgcmV0dXJuIDA7CiAgICB9KQogIH07CiAgdmFyIFVOSVRTID0gewogICAgLy8gbGVuZ3RoCiAgICBtZXRlcjogewogICAgICBuYW1lOiAnbWV0ZXInLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsCiAgICAgIHZhbHVlOiAxLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBpbmNoOiB7CiAgICAgIG5hbWU6ICdpbmNoJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogMC4wMjU0LAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBmb290OiB7CiAgICAgIG5hbWU6ICdmb290JywKICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogMC4zMDQ4LAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICB5YXJkOiB7CiAgICAgIG5hbWU6ICd5YXJkJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogMC45MTQ0LAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBtaWxlOiB7CiAgICAgIG5hbWU6ICdtaWxlJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogMTYwOS4zNDQsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIGxpbms6IHsKICAgICAgbmFtZTogJ2xpbmsnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiAwLjIwMTE2OCwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgcm9kOiB7CiAgICAgIG5hbWU6ICdyb2QnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiA1LjAyOTIsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIGNoYWluOiB7CiAgICAgIG5hbWU6ICdjaGFpbicsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDIwLjExNjgsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIGFuZ3N0cm9tOiB7CiAgICAgIG5hbWU6ICdhbmdzdHJvbScsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDFlLTEwLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBtOiB7CiAgICAgIG5hbWU6ICdtJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCwKICAgICAgdmFsdWU6IDEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgICJpbiI6IHsKICAgICAgbmFtZTogJ2luJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogMC4wMjU0LAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBmdDogewogICAgICBuYW1lOiAnZnQnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiAwLjMwNDgsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIHlkOiB7CiAgICAgIG5hbWU6ICd5ZCcsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDAuOTE0NCwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgbWk6IHsKICAgICAgbmFtZTogJ21pJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogMTYwOS4zNDQsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIGxpOiB7CiAgICAgIG5hbWU6ICdsaScsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDAuMjAxMTY4LAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICByZDogewogICAgICBuYW1lOiAncmQnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiA1LjAyOTIxMCwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgY2g6IHsKICAgICAgbmFtZTogJ2NoJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogMjAuMTE2OCwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgbWlsOiB7CiAgICAgIG5hbWU6ICdtaWwnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiAwLjAwMDAyNTQsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIDEvMTAwMCBpbmNoCiAgICAvLyBTdXJmYWNlCiAgICBtMjogewogICAgICBuYW1lOiAnbTInLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLlNVUkZBQ0UsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TUVVBUkVELAogICAgICB2YWx1ZTogMSwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgc3FpbjogewogICAgICBuYW1lOiAnc3FpbicsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiAwLjAwMDY0NTE2LAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICAvLyA2NDUuMTYgbW0yCiAgICBzcWZ0OiB7CiAgICAgIG5hbWU6ICdzcWZ0JywKICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDAuMDkyOTAzMDQsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIDAuMDkyOTAzMDQgbTIKICAgIHNxeWQ6IHsKICAgICAgbmFtZTogJ3NxeWQnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLlNVUkZBQ0UsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogMC44MzYxMjczNiwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gMC44MzYxMjczNiBtMgogICAgc3FtaTogewogICAgICBuYW1lOiAnc3FtaScsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiAyNTg5OTg4LjExMDMzNiwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gMi41ODk5ODgxMTAzMzYga20yCiAgICBzcXJkOiB7CiAgICAgIG5hbWU6ICdzcXJkJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDI1LjI5Mjk1LAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICAvLyAyNS4yOTI5NSBtMgogICAgc3FjaDogewogICAgICBuYW1lOiAnc3FjaCcsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiA0MDQuNjg3MywKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gNDA0LjY4NzMgbTIKICAgIHNxbWlsOiB7CiAgICAgIG5hbWU6ICdzcW1pbCcsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiA2LjQ1MTZlLTEwLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICAvLyA2LjQ1MTYgKiAxMF4tMTAgbTIKICAgIGFjcmU6IHsKICAgICAgbmFtZTogJ2FjcmUnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLlNVUkZBQ0UsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogNDA0Ni44NiwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gNDA0Ni44NiBtMgogICAgaGVjdGFyZTogewogICAgICBuYW1lOiAnaGVjdGFyZScsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiAxMDAwMCwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gMTAwMDAgbTIKICAgIC8vIFZvbHVtZQogICAgbTM6IHsKICAgICAgbmFtZTogJ20zJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5DVUJJQywKICAgICAgdmFsdWU6IDEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIEw6IHsKICAgICAgbmFtZTogJ0wnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULAogICAgICB2YWx1ZTogMC4wMDEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIGxpdHJlCiAgICBsOiB7CiAgICAgIG5hbWU6ICdsJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCwKICAgICAgdmFsdWU6IDAuMDAxLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICAvLyBsaXRyZQogICAgbGl0cmU6IHsKICAgICAgbmFtZTogJ2xpdHJlJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLAogICAgICB2YWx1ZTogMC4wMDEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIGN1aW46IHsKICAgICAgbmFtZTogJ2N1aW4nLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiAxLjYzODcwNjRlLTUsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIDEuNjM4NzA2NGUtNSBtMwogICAgY3VmdDogewogICAgICBuYW1lOiAnY3VmdCcsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDAuMDI4MzE2ODQ2NTkyLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICAvLyAyOC4zMTYgODQ2IDU5MiBMCiAgICBjdXlkOiB7CiAgICAgIG5hbWU6ICdjdXlkJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogMC43NjQ1NTQ4NTc5ODQsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIDc2NC41NTQgODU3IDk4NCBMCiAgICB0ZWFzcG9vbjogewogICAgICBuYW1lOiAndGVhc3Bvb24nLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiAwLjAwMDAwNSwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gNSBtTAogICAgdGFibGVzcG9vbjogewogICAgICBuYW1lOiAndGFibGVzcG9vbicsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDAuMDAwMDE1LAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICAvLyAxNSBtTAogICAgLy8ge25hbWU6ICdjdXAnLCBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSwgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsIHZhbHVlOiAwLjAwMDI0MCwgb2Zmc2V0OiAwfSwgLy8gMjQwIG1MICAvLyBub3QgcG9zc2libGUsIHdlIGhhdmUgYWxyZWFkeSBhbm90aGVyIGN1cAogICAgZHJvcDogewogICAgICBuYW1lOiAnZHJvcCcsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDVlLTgsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIDAuMDUgbUwgPSA1ZS04IG0zCiAgICBndHQ6IHsKICAgICAgbmFtZTogJ2d0dCcsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDVlLTgsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIDAuMDUgbUwgPSA1ZS04IG0zCiAgICAvLyBMaXF1aWQgdm9sdW1lCiAgICBtaW5pbTogewogICAgICBuYW1lOiAnbWluaW0nLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiAwLjAwMDAwMDA2MTYxMTUyLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICAvLyAwLjA2MTYxMTUyIG1MCiAgICBmbHVpZGRyYW06IHsKICAgICAgbmFtZTogJ2ZsdWlkZHJhbScsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDAuMDAwMDAzNjk2NjkxMSwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gMy42OTY2OTEgbUwKICAgIGZsdWlkb3VuY2U6IHsKICAgICAgbmFtZTogJ2ZsdWlkb3VuY2UnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiAwLjAwMDAyOTU3MzUzLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICAvLyAyOS41NzM1MyBtTAogICAgZ2lsbDogewogICAgICBuYW1lOiAnZ2lsbCcsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDAuMDAwMTE4Mjk0MSwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gMTE4LjI5NDEgbUwKICAgIGNjOiB7CiAgICAgIG5hbWU6ICdjYycsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDFlLTYsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIDFlLTYgTAogICAgY3VwOiB7CiAgICAgIG5hbWU6ICdjdXAnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiAwLjAwMDIzNjU4ODIsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIDIzNi41ODgyIG1MCiAgICBwaW50OiB7CiAgICAgIG5hbWU6ICdwaW50JywKICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogMC4wMDA0NzMxNzY1LAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICAvLyA0NzMuMTc2NSBtTAogICAgcXVhcnQ6IHsKICAgICAgbmFtZTogJ3F1YXJ0JywKICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogMC4wMDA5NDYzNTI5LAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICAvLyA5NDYuMzUyOSBtTAogICAgZ2FsbG9uOiB7CiAgICAgIG5hbWU6ICdnYWxsb24nLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiAwLjAwMzc4NTQxMiwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gMy43ODU0MTIgTAogICAgYmVlcmJhcnJlbDogewogICAgICBuYW1lOiAnYmVlcmJhcnJlbCcsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDAuMTE3MzQ3OCwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gMTE3LjM0NzggTAogICAgb2lsYmFycmVsOiB7CiAgICAgIG5hbWU6ICdvaWxiYXJyZWwnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiAwLjE1ODk4NzMsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIDE1OC45ODczIEwKICAgIGhvZ3NoZWFkOiB7CiAgICAgIG5hbWU6ICdob2dzaGVhZCcsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDAuMjM4NDgxMCwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gMjM4LjQ4MTAgTAogICAgLy8ge25hbWU6ICdtaW4nLCBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSwgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsIHZhbHVlOiAwLjAwMDAwMDA2MTYxMTUyLCBvZmZzZXQ6IDB9LCAvLyAwLjA2MTYxMTUyIG1MIC8vIG1pbiBpcyBhbHJlYWR5IGluIHVzZSBhcyBtaW51dGUKICAgIGZsZHI6IHsKICAgICAgbmFtZTogJ2ZsZHInLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiAwLjAwMDAwMzY5NjY5MTEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIDMuNjk2NjkxIG1MCiAgICBmbG96OiB7CiAgICAgIG5hbWU6ICdmbG96JywKICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogMC4wMDAwMjk1NzM1MywKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gMjkuNTczNTMgbUwKICAgIGdpOiB7CiAgICAgIG5hbWU6ICdnaScsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDAuMDAwMTE4Mjk0MSwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gMTE4LjI5NDEgbUwKICAgIGNwOiB7CiAgICAgIG5hbWU6ICdjcCcsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDAuMDAwMjM2NTg4MiwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gMjM2LjU4ODIgbUwKICAgIHB0OiB7CiAgICAgIG5hbWU6ICdwdCcsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDAuMDAwNDczMTc2NSwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gNDczLjE3NjUgbUwKICAgIHF0OiB7CiAgICAgIG5hbWU6ICdxdCcsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDAuMDAwOTQ2MzUyOSwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gOTQ2LjM1MjkgbUwKICAgIGdhbDogewogICAgICBuYW1lOiAnZ2FsJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogMC4wMDM3ODU0MTIsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIDMuNzg1NDEyIEwKICAgIGJibDogewogICAgICBuYW1lOiAnYmJsJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogMC4xMTczNDc4LAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICAvLyAxMTcuMzQ3OCBMCiAgICBvYmw6IHsKICAgICAgbmFtZTogJ29ibCcsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDAuMTU4OTg3MywKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gMTU4Ljk4NzMgTAogICAgLy8ge25hbWU6ICdob2dzaGVhZCcsIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLCBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwgdmFsdWU6IDAuMjM4NDgxMCwgb2Zmc2V0OiAwfSwgLy8gMjM4LjQ4MTAgTCAvLyBUT0RPOiBoaD8KICAgIC8vIE1hc3MKICAgIGc6IHsKICAgICAgbmFtZTogJ2cnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCwKICAgICAgdmFsdWU6IDAuMDAxLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBncmFtOiB7CiAgICAgIG5hbWU6ICdncmFtJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORywKICAgICAgdmFsdWU6IDAuMDAxLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICB0b246IHsKICAgICAgbmFtZTogJ3RvbicsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUywKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULAogICAgICB2YWx1ZTogOTA3LjE4NDc0LAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICB0OiB7CiAgICAgIG5hbWU6ICd0JywKICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsCiAgICAgIHZhbHVlOiAxMDAwLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICB0b25uZTogewogICAgICBuYW1lOiAndG9ubmUnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLAogICAgICB2YWx1ZTogMTAwMCwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgZ3JhaW46IHsKICAgICAgbmFtZTogJ2dyYWluJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDY0Ljc5ODkxZS02LAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBkcmFtOiB7CiAgICAgIG5hbWU6ICdkcmFtJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDEuNzcxODQ1MTk1MzEyNWUtMywKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgb3VuY2U6IHsKICAgICAgbmFtZTogJ291bmNlJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDI4LjM0OTUyMzEyNWUtMywKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgcG91bmRtYXNzOiB7CiAgICAgIG5hbWU6ICdwb3VuZG1hc3MnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogNDUzLjU5MjM3ZS0zLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBodW5kcmVkd2VpZ2h0OiB7CiAgICAgIG5hbWU6ICdodW5kcmVkd2VpZ2h0JywKICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDQ1LjM1OTIzNywKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgc3RpY2s6IHsKICAgICAgbmFtZTogJ3N0aWNrJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDExNWUtMywKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgc3RvbmU6IHsKICAgICAgbmFtZTogJ3N0b25lJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDYuMzUwMjkzMTgsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIGdyOiB7CiAgICAgIG5hbWU6ICdncicsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUywKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiA2NC43OTg5MWUtNiwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgZHI6IHsKICAgICAgbmFtZTogJ2RyJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDEuNzcxODQ1MTk1MzEyNWUtMywKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgb3o6IHsKICAgICAgbmFtZTogJ296JywKICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDI4LjM0OTUyMzEyNWUtMywKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgbGJtOiB7CiAgICAgIG5hbWU6ICdsYm0nLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogNDUzLjU5MjM3ZS0zLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBjd3Q6IHsKICAgICAgbmFtZTogJ2N3dCcsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUywKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiA0NS4zNTkyMzcsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIFRpbWUKICAgIHM6IHsKICAgICAgbmFtZTogJ3MnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLlRJTUUsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCwKICAgICAgdmFsdWU6IDEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIG1pbjogewogICAgICBuYW1lOiAnbWluJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDYwLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBoOiB7CiAgICAgIG5hbWU6ICdoJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDM2MDAsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIHNlY29uZDogewogICAgICBuYW1lOiAnc2Vjb25kJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORywKICAgICAgdmFsdWU6IDEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIHNlYzogewogICAgICBuYW1lOiAnc2VjJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORywKICAgICAgdmFsdWU6IDEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIG1pbnV0ZTogewogICAgICBuYW1lOiAnbWludXRlJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDYwLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBob3VyOiB7CiAgICAgIG5hbWU6ICdob3VyJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDM2MDAsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIGRheTogewogICAgICBuYW1lOiAnZGF5JywKICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDg2NDAwLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICB3ZWVrOiB7CiAgICAgIG5hbWU6ICd3ZWVrJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDcgKiA4NjQwMCwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgbW9udGg6IHsKICAgICAgbmFtZTogJ21vbnRoJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDI2Mjk4MDAsCiAgICAgIC8vIDEvMTJ0aCBvZiBKdWxpYW4geWVhcgogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICB5ZWFyOiB7CiAgICAgIG5hbWU6ICd5ZWFyJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDMxNTU3NjAwLAogICAgICAvLyBKdWxpYW4geWVhcgogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBkZWNhZGU6IHsKICAgICAgbmFtZTogJ2RlY2FkZScsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiAzMTU1NzYwMDAsCiAgICAgIC8vIEp1bGlhbiBkZWNhZGUKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgY2VudHVyeTogewogICAgICBuYW1lOiAnY2VudHVyeScsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiAzMTU1NzYwMDAwLAogICAgICAvLyBKdWxpYW4gY2VudHVyeQogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBtaWxsZW5uaXVtOiB7CiAgICAgIG5hbWU6ICdtaWxsZW5uaXVtJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDMxNTU3NjAwMDAwLAogICAgICAvLyBKdWxpYW4gbWlsbGVubml1bQogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICAvLyBGcmVxdWVuY3kKICAgIGhlcnR6OiB7CiAgICAgIG5hbWU6ICdIZXJ0eicsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRlJFUVVFTkNZLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORywKICAgICAgdmFsdWU6IDEsCiAgICAgIG9mZnNldDogMCwKICAgICAgcmVjaXByb2NhbDogdHJ1ZQogICAgfSwKICAgIEh6OiB7CiAgICAgIG5hbWU6ICdIeicsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRlJFUVVFTkNZLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsCiAgICAgIHZhbHVlOiAxLAogICAgICBvZmZzZXQ6IDAsCiAgICAgIHJlY2lwcm9jYWw6IHRydWUKICAgIH0sCiAgICAvLyBBbmdsZQogICAgcmFkOiB7CiAgICAgIG5hbWU6ICdyYWQnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkFOR0xFLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsCiAgICAgIHZhbHVlOiAxLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICByYWRpYW46IHsKICAgICAgbmFtZTogJ3JhZGlhbicsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU5HTEUsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLAogICAgICB2YWx1ZTogMSwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gZGVnID0gcmFkIC8gKDIqcGkpICogMzYwID0gcmFkIC8gMC4wMTc0NTMyOTI1MTk5NDMyOTU3NjkyMzY5MDc2ODQ4ODgKICAgIGRlZzogewogICAgICBuYW1lOiAnZGVnJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5BTkdMRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULAogICAgICB2YWx1ZTogbnVsbCwKICAgICAgLy8gd2lsbCBiZSBmaWxsZWQgaW4gYnkgY2FsY3VsYXRlQW5nbGVWYWx1ZXMoKQogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBkZWdyZWU6IHsKICAgICAgbmFtZTogJ2RlZ3JlZScsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU5HTEUsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLAogICAgICB2YWx1ZTogbnVsbCwKICAgICAgLy8gd2lsbCBiZSBmaWxsZWQgaW4gYnkgY2FsY3VsYXRlQW5nbGVWYWx1ZXMoKQogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICAvLyBncmFkID0gcmFkIC8gKDIqcGkpICogNDAwICA9IHJhZCAvIDAuMDE1NzA3OTYzMjY3OTQ4OTY2MTkyMzEzMjE2OTE2Mzk5CiAgICBncmFkOiB7CiAgICAgIG5hbWU6ICdncmFkJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5BTkdMRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULAogICAgICB2YWx1ZTogbnVsbCwKICAgICAgLy8gd2lsbCBiZSBmaWxsZWQgaW4gYnkgY2FsY3VsYXRlQW5nbGVWYWx1ZXMoKQogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBncmFkaWFuOiB7CiAgICAgIG5hbWU6ICdncmFkaWFuJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5BTkdMRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsCiAgICAgIHZhbHVlOiBudWxsLAogICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIGN5Y2xlID0gcmFkIC8gKDIqcGkpID0gcmFkIC8gNi4yODMxODUzMDcxNzk1ODY0NzY5MjUyODY3NjY1NzkzCiAgICBjeWNsZTogewogICAgICBuYW1lOiAnY3ljbGUnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkFOR0xFLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IG51bGwsCiAgICAgIC8vIHdpbGwgYmUgZmlsbGVkIGluIGJ5IGNhbGN1bGF0ZUFuZ2xlVmFsdWVzKCkKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gYXJjc2VjID0gcmFkIC8gKDM2MDAgKiAoMzYwIC8gMiAqIHBpKSkgPSByYWQgLyAwLjAwMDAwNDg0ODEzNjgxMTA5NTM1OTkzNTg5OTE0MTAyMzU3OTUKICAgIGFyY3NlYzogewogICAgICBuYW1lOiAnYXJjc2VjJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5BTkdMRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiBudWxsLAogICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIGFyY21pbiA9IHJhZCAvICg2MCAqICgzNjAgLyAyICogcGkpKSA9IHJhZCAvIDAuMDAwMjkwODg4MjA4NjY1NzIxNTk2MTUzOTQ4NDYxNDE0NzcKICAgIGFyY21pbjogewogICAgICBuYW1lOiAnYXJjbWluJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5BTkdMRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiBudWxsLAogICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIEVsZWN0cmljIGN1cnJlbnQKICAgIEE6IHsKICAgICAgbmFtZTogJ0EnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkNVUlJFTlQsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCwKICAgICAgdmFsdWU6IDEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIGFtcGVyZTogewogICAgICBuYW1lOiAnYW1wZXJlJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5DVVJSRU5ULAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORywKICAgICAgdmFsdWU6IDEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIFRlbXBlcmF0dXJlCiAgICAvLyBLKEMpID0gwrBDICsgMjczLjE1CiAgICAvLyBLKEYpID0gKMKwRiArIDQ1OS42NykgLyAxLjgKICAgIC8vIEsoUikgPSDCsFIgLyAxLjgKICAgIEs6IHsKICAgICAgbmFtZTogJ0snLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLlRFTVBFUkFUVVJFLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIGRlZ0M6IHsKICAgICAgbmFtZTogJ2RlZ0MnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLlRFTVBFUkFUVVJFLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDEsCiAgICAgIG9mZnNldDogMjczLjE1CiAgICB9LAogICAgZGVnRjogewogICAgICBuYW1lOiAnZGVnRicsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVEVNUEVSQVRVUkUsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogMSAvIDEuOCwKICAgICAgb2Zmc2V0OiA0NTkuNjcKICAgIH0sCiAgICBkZWdSOiB7CiAgICAgIG5hbWU6ICdkZWdSJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiAxIC8gMS44LAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBrZWx2aW46IHsKICAgICAgbmFtZTogJ2tlbHZpbicsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVEVNUEVSQVRVUkUsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogMSwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgY2Vsc2l1czogewogICAgICBuYW1lOiAnY2Vsc2l1cycsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVEVNUEVSQVRVUkUsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogMSwKICAgICAgb2Zmc2V0OiAyNzMuMTUKICAgIH0sCiAgICBmYWhyZW5oZWl0OiB7CiAgICAgIG5hbWU6ICdmYWhyZW5oZWl0JywKICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiAxIC8gMS44LAogICAgICBvZmZzZXQ6IDQ1OS42NwogICAgfSwKICAgIHJhbmtpbmU6IHsKICAgICAgbmFtZTogJ3JhbmtpbmUnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLlRFTVBFUkFUVVJFLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDEgLyAxLjgsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIGFtb3VudCBvZiBzdWJzdGFuY2UKICAgIG1vbDogewogICAgICBuYW1lOiAnbW9sJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5BTU9VTlRfT0ZfU1VCU1RBTkNFLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsCiAgICAgIHZhbHVlOiAxLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBtb2xlOiB7CiAgICAgIG5hbWU6ICdtb2xlJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5BTU9VTlRfT0ZfU1VCU1RBTkNFLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORywKICAgICAgdmFsdWU6IDEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIGx1bWlub3VzIGludGVuc2l0eQogICAgY2Q6IHsKICAgICAgbmFtZTogJ2NkJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5MVU1JTk9VU19JTlRFTlNJVFksCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCwKICAgICAgdmFsdWU6IDEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIGNhbmRlbGE6IHsKICAgICAgbmFtZTogJ2NhbmRlbGEnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkxVTUlOT1VTX0lOVEVOU0lUWSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsCiAgICAgIHZhbHVlOiAxLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICAvLyBUT0RPOiB1bml0cyBTVEVSQURJQU4KICAgIC8vIHtuYW1lOiAnc3InLCBiYXNlOiBCQVNFX1VOSVRTLlNURVJBRElBTiwgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsIHZhbHVlOiAxLCBvZmZzZXQ6IDB9LAogICAgLy8ge25hbWU6ICdzdGVyYWRpYW4nLCBiYXNlOiBCQVNFX1VOSVRTLlNURVJBRElBTiwgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsIHZhbHVlOiAxLCBvZmZzZXQ6IDB9LAogICAgLy8gRm9yY2UKICAgIE46IHsKICAgICAgbmFtZTogJ04nLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkZPUkNFLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsCiAgICAgIHZhbHVlOiAxLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBuZXd0b246IHsKICAgICAgbmFtZTogJ25ld3RvbicsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRk9SQ0UsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLAogICAgICB2YWx1ZTogMSwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgZHluOiB7CiAgICAgIG5hbWU6ICdkeW4nLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkZPUkNFLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsCiAgICAgIHZhbHVlOiAwLjAwMDAxLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBkeW5lOiB7CiAgICAgIG5hbWU6ICdkeW5lJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5GT1JDRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsCiAgICAgIHZhbHVlOiAwLjAwMDAxLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBsYmY6IHsKICAgICAgbmFtZTogJ2xiZicsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRk9SQ0UsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogNC40NDgyMjE2MTUyNjA1LAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBwb3VuZGZvcmNlOiB7CiAgICAgIG5hbWU6ICdwb3VuZGZvcmNlJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5GT1JDRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiA0LjQ0ODIyMTYxNTI2MDUsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIGtpcDogewogICAgICBuYW1lOiAna2lwJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5GT1JDRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsCiAgICAgIHZhbHVlOiA0NDQ4LjIyMTYsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIEVuZXJneQogICAgSjogewogICAgICBuYW1lOiAnSicsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRU5FUkdZLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsCiAgICAgIHZhbHVlOiAxLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBqb3VsZTogewogICAgICBuYW1lOiAnam91bGUnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULAogICAgICB2YWx1ZTogMSwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgZXJnOiB7CiAgICAgIG5hbWU6ICdlcmcnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiAxZS03LAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBXaDogewogICAgICBuYW1lOiAnV2gnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULAogICAgICB2YWx1ZTogMzYwMCwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgQlRVOiB7CiAgICAgIG5hbWU6ICdCVFUnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkJUVSwKICAgICAgdmFsdWU6IDEwNTUuMDU1ODUyNjIsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIGVWOiB7CiAgICAgIG5hbWU6ICdlVicsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRU5FUkdZLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsCiAgICAgIHZhbHVlOiAxLjYwMjE3NjU2NWUtMTksCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIGVsZWN0cm9udm9sdDogewogICAgICBuYW1lOiAnZWxlY3Ryb252b2x0JywKICAgICAgYmFzZTogQkFTRV9VTklUUy5FTkVSR1ksCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLAogICAgICB2YWx1ZTogMS42MDIxNzY1NjVlLTE5LAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICAvLyBQb3dlcgogICAgVzogewogICAgICBuYW1lOiAnVycsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuUE9XRVIsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCwKICAgICAgdmFsdWU6IDEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIHdhdHQ6IHsKICAgICAgbmFtZTogJ3dhdHQnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLlBPV0VSLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORywKICAgICAgdmFsdWU6IDEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIGhwOiB7CiAgICAgIG5hbWU6ICdocCcsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuUE9XRVIsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogNzQ1LjY5OTg3MTUzODYsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIEVsZWN0cmljYWwgcG93ZXIgdW5pdHMKICAgIFZBUjogewogICAgICBuYW1lOiAnVkFSJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5QT1dFUiwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULAogICAgICB2YWx1ZTogQ29tcGxleC5JLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBWQTogewogICAgICBuYW1lOiAnVkEnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLlBPV0VSLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsCiAgICAgIHZhbHVlOiAxLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICAvLyBQcmVzc3VyZQogICAgUGE6IHsKICAgICAgbmFtZTogJ1BhJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5QUkVTU1VSRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULAogICAgICB2YWx1ZTogMSwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgcHNpOiB7CiAgICAgIG5hbWU6ICdwc2knLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDY4OTQuNzU3MjkyNzY0NTksCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIGF0bTogewogICAgICBuYW1lOiAnYXRtJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5QUkVTU1VSRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiAxMDEzMjUsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIGJhcjogewogICAgICBuYW1lOiAnYmFyJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5QUkVTU1VSRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JUTE9ORywKICAgICAgdmFsdWU6IDEwMDAwMCwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgdG9ycjogewogICAgICBuYW1lOiAndG9ycicsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuUFJFU1NVUkUsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogMTMzLjMyMiwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgbW1IZzogewogICAgICBuYW1lOiAnbW1IZycsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuUFJFU1NVUkUsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLAogICAgICB2YWx1ZTogMTMzLjMyMiwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgbW1IMk86IHsKICAgICAgbmFtZTogJ21tSDJPJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5QUkVTU1VSRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsCiAgICAgIHZhbHVlOiA5LjgwNjY1LAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBjbUgyTzogewogICAgICBuYW1lOiAnY21IMk8nLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwKICAgICAgdmFsdWU6IDk4LjA2NjUsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIEVsZWN0cmljIGNoYXJnZQogICAgY291bG9tYjogewogICAgICBuYW1lOiAnY291bG9tYicsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRUxFQ1RSSUNfQ0hBUkdFLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORywKICAgICAgdmFsdWU6IDEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIEM6IHsKICAgICAgbmFtZTogJ0MnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX0NIQVJHRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULAogICAgICB2YWx1ZTogMSwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gRWxlY3RyaWMgY2FwYWNpdGFuY2UKICAgIGZhcmFkOiB7CiAgICAgIG5hbWU6ICdmYXJhZCcsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRUxFQ1RSSUNfQ0FQQUNJVEFOQ0UsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLAogICAgICB2YWx1ZTogMSwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgRjogewogICAgICBuYW1lOiAnRicsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRUxFQ1RSSUNfQ0FQQUNJVEFOQ0UsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCwKICAgICAgdmFsdWU6IDEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIEVsZWN0cmljIHBvdGVudGlhbAogICAgdm9sdDogewogICAgICBuYW1lOiAndm9sdCcsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRUxFQ1RSSUNfUE9URU5USUFMLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORywKICAgICAgdmFsdWU6IDEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIFY6IHsKICAgICAgbmFtZTogJ1YnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX1BPVEVOVElBTCwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULAogICAgICB2YWx1ZTogMSwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgLy8gRWxlY3RyaWMgcmVzaXN0YW5jZQogICAgb2htOiB7CiAgICAgIG5hbWU6ICdvaG0nLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX1JFU0lTVEFOQ0UsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVExPTkcsCiAgICAgIC8vIEJvdGggTW9obSBhbmQgbWVnYW9obSBhcmUgYWNjZXB0YWJsZQogICAgICB2YWx1ZTogMSwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAoKICAgIC8qCiAgICAgKiBVbmljb2RlIGJyZWFrcyBpbiBicm93c2VycyBpZiBjaGFyc2V0IGlzIG5vdCBzcGVjaWZpZWQKICAgIM6pOiB7CiAgICAgIG5hbWU6ICfOqScsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRUxFQ1RSSUNfUkVTSVNUQU5DRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULAogICAgICB2YWx1ZTogMSwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgKi8KICAgIC8vIEVsZWN0cmljIGluZHVjdGFuY2UKICAgIGhlbnJ5OiB7CiAgICAgIG5hbWU6ICdoZW5yeScsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRUxFQ1RSSUNfSU5EVUNUQU5DRSwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsCiAgICAgIHZhbHVlOiAxLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBIOiB7CiAgICAgIG5hbWU6ICdIJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19JTkRVQ1RBTkNFLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsCiAgICAgIHZhbHVlOiAxLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICAvLyBFbGVjdHJpYyBjb25kdWN0YW5jZQogICAgc2llbWVuczogewogICAgICBuYW1lOiAnc2llbWVucycsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRUxFQ1RSSUNfQ09ORFVDVEFOQ0UsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLAogICAgICB2YWx1ZTogMSwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgUzogewogICAgICBuYW1lOiAnUycsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRUxFQ1RSSUNfQ09ORFVDVEFOQ0UsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCwKICAgICAgdmFsdWU6IDEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIE1hZ25ldGljIGZsdXgKICAgIHdlYmVyOiB7CiAgICAgIG5hbWU6ICd3ZWJlcicsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFHTkVUSUNfRkxVWCwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsCiAgICAgIHZhbHVlOiAxLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICBXYjogewogICAgICBuYW1lOiAnV2InLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BR05FVElDX0ZMVVgsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCwKICAgICAgdmFsdWU6IDEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIC8vIE1hZ25ldGljIGZsdXggZGVuc2l0eQogICAgdGVzbGE6IHsKICAgICAgbmFtZTogJ3Rlc2xhJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5NQUdORVRJQ19GTFVYX0RFTlNJVFksCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLAogICAgICB2YWx1ZTogMSwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgVDogewogICAgICBuYW1lOiAnVCcsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFHTkVUSUNfRkxVWF9ERU5TSVRZLAogICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsCiAgICAgIHZhbHVlOiAxLAogICAgICBvZmZzZXQ6IDAKICAgIH0sCiAgICAvLyBCaW5hcnkKICAgIGI6IHsKICAgICAgbmFtZTogJ2InLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkJJVCwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkJJTkFSWV9TSE9SVCwKICAgICAgdmFsdWU6IDEsCiAgICAgIG9mZnNldDogMAogICAgfSwKICAgIGJpdHM6IHsKICAgICAgbmFtZTogJ2JpdHMnLAogICAgICBiYXNlOiBCQVNFX1VOSVRTLkJJVCwKICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkJJTkFSWV9MT05HLAogICAgICB2YWx1ZTogMSwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgQjogewogICAgICBuYW1lOiAnQicsCiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQklULAogICAgICBwcmVmaXhlczogUFJFRklYRVMuQklOQVJZX1NIT1JULAogICAgICB2YWx1ZTogOCwKICAgICAgb2Zmc2V0OiAwCiAgICB9LAogICAgYnl0ZXM6IHsKICAgICAgbmFtZTogJ2J5dGVzJywKICAgICAgYmFzZTogQkFTRV9VTklUUy5CSVQsCiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5CSU5BUllfTE9ORywKICAgICAgdmFsdWU6IDgsCiAgICAgIG9mZnNldDogMAogICAgfQogIH07IC8vIGFsaWFzZXMgKGZvcm1lcmx5IHBsdXJhbHMpCgogIHZhciBBTElBU0VTID0gewogICAgbWV0ZXJzOiAnbWV0ZXInLAogICAgaW5jaGVzOiAnaW5jaCcsCiAgICBmZWV0OiAnZm9vdCcsCiAgICB5YXJkczogJ3lhcmQnLAogICAgbWlsZXM6ICdtaWxlJywKICAgIGxpbmtzOiAnbGluaycsCiAgICByb2RzOiAncm9kJywKICAgIGNoYWluczogJ2NoYWluJywKICAgIGFuZ3N0cm9tczogJ2FuZ3N0cm9tJywKICAgIGx0OiAnbCcsCiAgICBsaXRyZXM6ICdsaXRyZScsCiAgICBsaXRlcjogJ2xpdHJlJywKICAgIGxpdGVyczogJ2xpdHJlJywKICAgIHRlYXNwb29uczogJ3RlYXNwb29uJywKICAgIHRhYmxlc3Bvb25zOiAndGFibGVzcG9vbicsCiAgICBtaW5pbXM6ICdtaW5pbScsCiAgICBmbHVpZGRyYW1zOiAnZmx1aWRkcmFtJywKICAgIGZsdWlkb3VuY2VzOiAnZmx1aWRvdW5jZScsCiAgICBnaWxsczogJ2dpbGwnLAogICAgY3VwczogJ2N1cCcsCiAgICBwaW50czogJ3BpbnQnLAogICAgcXVhcnRzOiAncXVhcnQnLAogICAgZ2FsbG9uczogJ2dhbGxvbicsCiAgICBiZWVyYmFycmVsczogJ2JlZXJiYXJyZWwnLAogICAgb2lsYmFycmVsczogJ29pbGJhcnJlbCcsCiAgICBob2dzaGVhZHM6ICdob2dzaGVhZCcsCiAgICBndHRzOiAnZ3R0JywKICAgIGdyYW1zOiAnZ3JhbScsCiAgICB0b25zOiAndG9uJywKICAgIHRvbm5lczogJ3Rvbm5lJywKICAgIGdyYWluczogJ2dyYWluJywKICAgIGRyYW1zOiAnZHJhbScsCiAgICBvdW5jZXM6ICdvdW5jZScsCiAgICBwb3VuZG1hc3NlczogJ3BvdW5kbWFzcycsCiAgICBodW5kcmVkd2VpZ2h0czogJ2h1bmRyZWR3ZWlnaHQnLAogICAgc3RpY2tzOiAnc3RpY2snLAogICAgbGI6ICdsYm0nLAogICAgbGJzOiAnbGJtJywKICAgIGtpcHM6ICdraXAnLAogICAgYWNyZXM6ICdhY3JlJywKICAgIGhlY3RhcmVzOiAnaGVjdGFyZScsCiAgICBzcWZlZXQ6ICdzcWZ0JywKICAgIHNxeWFyZDogJ3NxeWQnLAogICAgc3FtaWxlOiAnc3FtaScsCiAgICBzcW1pbGVzOiAnc3FtaScsCiAgICBtbWhnOiAnbW1IZycsCiAgICBtbWgybzogJ21tSDJPJywKICAgIGNtaDJvOiAnY21IMk8nLAogICAgc2Vjb25kczogJ3NlY29uZCcsCiAgICBzZWNzOiAnc2Vjb25kJywKICAgIG1pbnV0ZXM6ICdtaW51dGUnLAogICAgbWluczogJ21pbnV0ZScsCiAgICBob3VyczogJ2hvdXInLAogICAgaHI6ICdob3VyJywKICAgIGhyczogJ2hvdXInLAogICAgZGF5czogJ2RheScsCiAgICB3ZWVrczogJ3dlZWsnLAogICAgbW9udGhzOiAnbW9udGgnLAogICAgeWVhcnM6ICd5ZWFyJywKICAgIGRlY2FkZXM6ICdkZWNhZGUnLAogICAgY2VudHVyaWVzOiAnY2VudHVyeScsCiAgICBtaWxsZW5uaWE6ICdtaWxsZW5uaXVtJywKICAgIGhlcnR6OiAnaGVydHonLAogICAgcmFkaWFuczogJ3JhZGlhbicsCiAgICBkZWdyZWVzOiAnZGVncmVlJywKICAgIGdyYWRpYW5zOiAnZ3JhZGlhbicsCiAgICBjeWNsZXM6ICdjeWNsZScsCiAgICBhcmNzZWNvbmQ6ICdhcmNzZWMnLAogICAgYXJjc2Vjb25kczogJ2FyY3NlYycsCiAgICBhcmNtaW51dGU6ICdhcmNtaW4nLAogICAgYXJjbWludXRlczogJ2FyY21pbicsCiAgICBCVFVzOiAnQlRVJywKICAgIHdhdHRzOiAnd2F0dCcsCiAgICBqb3VsZXM6ICdqb3VsZScsCiAgICBhbXBlcmVzOiAnYW1wZXJlJywKICAgIGNvdWxvbWJzOiAnY291bG9tYicsCiAgICB2b2x0czogJ3ZvbHQnLAogICAgb2htczogJ29obScsCiAgICBmYXJhZHM6ICdmYXJhZCcsCiAgICB3ZWJlcnM6ICd3ZWJlcicsCiAgICB0ZXNsYXM6ICd0ZXNsYScsCiAgICBlbGVjdHJvbnZvbHRzOiAnZWxlY3Ryb252b2x0JywKICAgIG1vbGVzOiAnbW9sZScsCiAgICBiaXQ6ICdiaXRzJywKICAgICJieXRlIjogJ2J5dGVzJwogIH07CiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSB2YWx1ZXMgZm9yIHRoZSBhbmdsZSB1bml0cy4KICAgKiBWYWx1ZSBpcyBjYWxjdWxhdGVkIGFzIG51bWJlciBvciBCaWdOdW1iZXIgZGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uCiAgICogQHBhcmFtIHt7bnVtYmVyOiAnbnVtYmVyJyB8ICdCaWdOdW1iZXInfX0gY29uZmlnCiAgICovCgogIGZ1bmN0aW9uIGNhbGN1bGF0ZUFuZ2xlVmFsdWVzKGNvbmZpZykgewogICAgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInKSB7CiAgICAgIHZhciBwaSA9IGNyZWF0ZUJpZ051bWJlclBpKF9CaWdOdW1iZXIpOwogICAgICBVTklUUy5yYWQudmFsdWUgPSBuZXcgX0JpZ051bWJlcigxKTsKICAgICAgVU5JVFMuZGVnLnZhbHVlID0gcGkuZGl2KDE4MCk7IC8vIDIgKiBwaSAvIDM2MAoKICAgICAgVU5JVFMuZ3JhZC52YWx1ZSA9IHBpLmRpdigyMDApOyAvLyAyICogcGkgLyA0MDAKCiAgICAgIFVOSVRTLmN5Y2xlLnZhbHVlID0gcGkudGltZXMoMik7IC8vIDIgKiBwaQoKICAgICAgVU5JVFMuYXJjc2VjLnZhbHVlID0gcGkuZGl2KDY0ODAwMCk7IC8vIDIgKiBwaSAvIDM2MCAvIDM2MDAKCiAgICAgIFVOSVRTLmFyY21pbi52YWx1ZSA9IHBpLmRpdigxMDgwMCk7IC8vIDIgKiBwaSAvIDM2MCAvIDYwCiAgICB9IGVsc2UgewogICAgICAvLyBudW1iZXIKICAgICAgVU5JVFMucmFkLnZhbHVlID0gMTsKICAgICAgVU5JVFMuZGVnLnZhbHVlID0gTWF0aC5QSSAvIDE4MDsgLy8gMiAqIHBpIC8gMzYwCgogICAgICBVTklUUy5ncmFkLnZhbHVlID0gTWF0aC5QSSAvIDIwMDsgLy8gMiAqIHBpIC8gNDAwCgogICAgICBVTklUUy5jeWNsZS52YWx1ZSA9IE1hdGguUEkgKiAyOyAvLyAyICogcGkKCiAgICAgIFVOSVRTLmFyY3NlYy52YWx1ZSA9IE1hdGguUEkgLyA2NDgwMDA7IC8vIDIgKiBwaSAvIDM2MCAvIDM2MDAKCiAgICAgIFVOSVRTLmFyY21pbi52YWx1ZSA9IE1hdGguUEkgLyAxMDgwMDsgLy8gMiAqIHBpIC8gMzYwIC8gNjAKICAgIH0gLy8gY29weSB0byB0aGUgZnVsbCBuYW1lcyBvZiB0aGUgYW5nbGVzCgoKICAgIFVOSVRTLnJhZGlhbi52YWx1ZSA9IFVOSVRTLnJhZC52YWx1ZTsKICAgIFVOSVRTLmRlZ3JlZS52YWx1ZSA9IFVOSVRTLmRlZy52YWx1ZTsKICAgIFVOSVRTLmdyYWRpYW4udmFsdWUgPSBVTklUUy5ncmFkLnZhbHVlOwogIH0gLy8gYXBwbHkgdGhlIGFuZ2xlIHZhbHVlcyBub3cKCgogIGNhbGN1bGF0ZUFuZ2xlVmFsdWVzKGNvbmZpZyk7CgogIGlmIChvbikgewogICAgLy8gcmVjYWxjdWxhdGUgdGhlIHZhbHVlcyBvbiBjaGFuZ2Ugb2YgY29uZmlndXJhdGlvbgogICAgb24oJ2NvbmZpZycsIGZ1bmN0aW9uIChjdXJyLCBwcmV2KSB7CiAgICAgIGlmIChjdXJyLm51bWJlciAhPT0gcHJldi5udW1iZXIpIHsKICAgICAgICBjYWxjdWxhdGVBbmdsZVZhbHVlcyhjdXJyKTsKICAgICAgfQogICAgfSk7CiAgfQogIC8qKgogICAqIEEgdW5pdCBzeXN0ZW0gaXMgYSBzZXQgb2YgZGltZW5zaW9uYWxseSBpbmRlcGVuZGVudCBiYXNlIHVuaXRzIHBsdXMgYSBzZXQgb2YgZGVyaXZlZCB1bml0cywgZm9ybWVkIGJ5IG11bHRpcGxpY2F0aW9uIGFuZCBkaXZpc2lvbiBvZiB0aGUgYmFzZSB1bml0cywgdGhhdCBhcmUgYnkgY29udmVudGlvbiB1c2VkIHdpdGggdGhlIHVuaXQgc3lzdGVtLgogICAqIEEgdXNlciBwZXJoYXBzIGNvdWxkIGlzc3VlIGEgY29tbWFuZCB0byBzZWxlY3QgYSBwcmVmZXJyZWQgdW5pdCBzeXN0ZW0sIG9yIHVzZSB0aGUgZGVmYXVsdCAoc2VlIGJlbG93KS4KICAgKiBBdXRvIHVuaXQgc3lzdGVtOiBUaGUgZGVmYXVsdCB1bml0IHN5c3RlbSBpcyB1cGRhdGVkIG9uIHRoZSBmbHkgYW55dGltZSBhIHVuaXQgaXMgcGFyc2VkLiBUaGUgY29ycmVzcG9uZGluZyB1bml0IGluIHRoZSBkZWZhdWx0IHVuaXQgc3lzdGVtIGlzIHVwZGF0ZWQsIHNvIHRoYXQgYW5zd2VycyBhcmUgZ2l2ZW4gaW4gdGhlIHNhbWUgdW5pdHMgdGhlIHVzZXIgc3VwcGxpZXMuCiAgICovCgoKICB2YXIgVU5JVF9TWVNURU1TID0gewogICAgc2k6IHsKICAgICAgLy8gQmFzZSB1bml0cwogICAgICBOT05FOiB7CiAgICAgICAgdW5pdDogVU5JVF9OT05FLAogICAgICAgIHByZWZpeDogUFJFRklYRVMuTk9ORVsnJ10KICAgICAgfSwKICAgICAgTEVOR1RIOiB7CiAgICAgICAgdW5pdDogVU5JVFMubSwKICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXQogICAgICB9LAogICAgICBNQVNTOiB7CiAgICAgICAgdW5pdDogVU5JVFMuZywKICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JULmsKICAgICAgfSwKICAgICAgVElNRTogewogICAgICAgIHVuaXQ6IFVOSVRTLnMsCiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ10KICAgICAgfSwKICAgICAgQ1VSUkVOVDogewogICAgICAgIHVuaXQ6IFVOSVRTLkEsCiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ10KICAgICAgfSwKICAgICAgVEVNUEVSQVRVUkU6IHsKICAgICAgICB1bml0OiBVTklUUy5LLAogICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddCiAgICAgIH0sCiAgICAgIExVTUlOT1VTX0lOVEVOU0lUWTogewogICAgICAgIHVuaXQ6IFVOSVRTLmNkLAogICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddCiAgICAgIH0sCiAgICAgIEFNT1VOVF9PRl9TVUJTVEFOQ0U6IHsKICAgICAgICB1bml0OiBVTklUUy5tb2wsCiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ10KICAgICAgfSwKICAgICAgQU5HTEU6IHsKICAgICAgICB1bml0OiBVTklUUy5yYWQsCiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ10KICAgICAgfSwKICAgICAgQklUOiB7CiAgICAgICAgdW5pdDogVU5JVFMuYml0cywKICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXQogICAgICB9LAogICAgICAvLyBEZXJpdmVkIHVuaXRzCiAgICAgIEZPUkNFOiB7CiAgICAgICAgdW5pdDogVU5JVFMuTiwKICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXQogICAgICB9LAogICAgICBFTkVSR1k6IHsKICAgICAgICB1bml0OiBVTklUUy5KLAogICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddCiAgICAgIH0sCiAgICAgIFBPV0VSOiB7CiAgICAgICAgdW5pdDogVU5JVFMuVywKICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXQogICAgICB9LAogICAgICBQUkVTU1VSRTogewogICAgICAgIHVuaXQ6IFVOSVRTLlBhLAogICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddCiAgICAgIH0sCiAgICAgIEVMRUNUUklDX0NIQVJHRTogewogICAgICAgIHVuaXQ6IFVOSVRTLkMsCiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ10KICAgICAgfSwKICAgICAgRUxFQ1RSSUNfQ0FQQUNJVEFOQ0U6IHsKICAgICAgICB1bml0OiBVTklUUy5GLAogICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddCiAgICAgIH0sCiAgICAgIEVMRUNUUklDX1BPVEVOVElBTDogewogICAgICAgIHVuaXQ6IFVOSVRTLlYsCiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ10KICAgICAgfSwKICAgICAgRUxFQ1RSSUNfUkVTSVNUQU5DRTogewogICAgICAgIHVuaXQ6IFVOSVRTLm9obSwKICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXQogICAgICB9LAogICAgICBFTEVDVFJJQ19JTkRVQ1RBTkNFOiB7CiAgICAgICAgdW5pdDogVU5JVFMuSCwKICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXQogICAgICB9LAogICAgICBFTEVDVFJJQ19DT05EVUNUQU5DRTogewogICAgICAgIHVuaXQ6IFVOSVRTLlMsCiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ10KICAgICAgfSwKICAgICAgTUFHTkVUSUNfRkxVWDogewogICAgICAgIHVuaXQ6IFVOSVRTLldiLAogICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddCiAgICAgIH0sCiAgICAgIE1BR05FVElDX0ZMVVhfREVOU0lUWTogewogICAgICAgIHVuaXQ6IFVOSVRTLlQsCiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ10KICAgICAgfSwKICAgICAgRlJFUVVFTkNZOiB7CiAgICAgICAgdW5pdDogVU5JVFMuSHosCiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ10KICAgICAgfQogICAgfQogIH07IC8vIENsb25lIHRvIGNyZWF0ZSB0aGUgb3RoZXIgdW5pdCBzeXN0ZW1zCgogIFVOSVRfU1lTVEVNUy5jZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFVOSVRfU1lTVEVNUy5zaSkpOwogIFVOSVRfU1lTVEVNUy5jZ3MuTEVOR1RIID0gewogICAgdW5pdDogVU5JVFMubSwKICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlQuYwogIH07CiAgVU5JVF9TWVNURU1TLmNncy5NQVNTID0gewogICAgdW5pdDogVU5JVFMuZywKICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddCiAgfTsKICBVTklUX1NZU1RFTVMuY2dzLkZPUkNFID0gewogICAgdW5pdDogVU5JVFMuZHluLAogICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ10KICB9OwogIFVOSVRfU1lTVEVNUy5jZ3MuRU5FUkdZID0gewogICAgdW5pdDogVU5JVFMuZXJnLAogICAgcHJlZml4OiBQUkVGSVhFUy5OT05FWycnXQogIH07IC8vIHRoZXJlIGFyZSB3aG9sbHkgNCB1bmlxdWUgY2dzIHN5c3RlbXMgZm9yIGVsZWN0cmljaXR5IGFuZCBtYWduZXRpc20sCiAgLy8gc28gbGV0J3Mgbm90IHdvcnJ5IGFib3V0IGl0IHVubGVzcyBzb21lYm9keSBjb21wbGFpbnMKCiAgVU5JVF9TWVNURU1TLnVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShVTklUX1NZU1RFTVMuc2kpKTsKICBVTklUX1NZU1RFTVMudXMuTEVOR1RIID0gewogICAgdW5pdDogVU5JVFMuZnQsCiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddCiAgfTsKICBVTklUX1NZU1RFTVMudXMuTUFTUyA9IHsKICAgIHVuaXQ6IFVOSVRTLmxibSwKICAgIHByZWZpeDogUFJFRklYRVMuTk9ORVsnJ10KICB9OwogIFVOSVRfU1lTVEVNUy51cy5URU1QRVJBVFVSRSA9IHsKICAgIHVuaXQ6IFVOSVRTLmRlZ0YsCiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddCiAgfTsKICBVTklUX1NZU1RFTVMudXMuRk9SQ0UgPSB7CiAgICB1bml0OiBVTklUUy5sYmYsCiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddCiAgfTsKICBVTklUX1NZU1RFTVMudXMuRU5FUkdZID0gewogICAgdW5pdDogVU5JVFMuQlRVLAogICAgcHJlZml4OiBQUkVGSVhFUy5CVFVbJyddCiAgfTsKICBVTklUX1NZU1RFTVMudXMuUE9XRVIgPSB7CiAgICB1bml0OiBVTklUUy5ocCwKICAgIHByZWZpeDogUFJFRklYRVMuTk9ORVsnJ10KICB9OwogIFVOSVRfU1lTVEVNUy51cy5QUkVTU1VSRSA9IHsKICAgIHVuaXQ6IFVOSVRTLnBzaSwKICAgIHByZWZpeDogUFJFRklYRVMuTk9ORVsnJ10KICB9OyAvLyBBZGQgYWRkaXRpb25hbCB1bml0IHN5c3RlbXMgaGVyZS4KICAvLyBDaG9vc2UgYSB1bml0IHN5c3RlbSB0byBzZWVkIHRoZSBhdXRvIHVuaXQgc3lzdGVtLgoKICBVTklUX1NZU1RFTVMuYXV0byA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoVU5JVF9TWVNURU1TLnNpKSk7IC8vIFNldCB0aGUgY3VycmVudCB1bml0IHN5c3RlbQoKICB2YXIgY3VycmVudFVuaXRTeXN0ZW0gPSBVTklUX1NZU1RFTVMuYXV0bzsKICAvKioKICAgKiBTZXQgYSB1bml0IHN5c3RlbSBmb3IgZm9ybWF0dGluZyBkZXJpdmVkIHVuaXRzLgogICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gVGhlIG5hbWUgb2YgdGhlIHVuaXQgc3lzdGVtLgogICAqLwoKICBVbml0LnNldFVuaXRTeXN0ZW0gPSBmdW5jdGlvbiAobmFtZSkgewogICAgaWYgKE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkoVU5JVF9TWVNURU1TLCBuYW1lKSkgewogICAgICBjdXJyZW50VW5pdFN5c3RlbSA9IFVOSVRfU1lTVEVNU1tuYW1lXTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignVW5pdCBzeXN0ZW0gJyArIG5hbWUgKyAnIGRvZXMgbm90IGV4aXN0LiBDaG9pY2VzIGFyZTogJyArIE9iamVjdC5rZXlzKFVOSVRfU1lTVEVNUykuam9pbignLCAnKSk7CiAgICB9CiAgfTsKICAvKioKICAgKiBSZXR1cm4gdGhlIGN1cnJlbnQgdW5pdCBzeXN0ZW0uCiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgY3VycmVudCB1bml0IHN5c3RlbS4KICAgKi8KCgogIFVuaXQuZ2V0VW5pdFN5c3RlbSA9IGZ1bmN0aW9uICgpIHsKICAgIGZvciAodmFyIF9rZXkgaW4gVU5JVF9TWVNURU1TKSB7CiAgICAgIGlmIChVTklUX1NZU1RFTVNbX2tleV0gPT09IGN1cnJlbnRVbml0U3lzdGVtKSB7CiAgICAgICAgcmV0dXJuIF9rZXk7CiAgICAgIH0KICAgIH0KICB9OwogIC8qKgogICAqIENvbnZlcnRlcnMgdG8gY29udmVydCBmcm9tIG51bWJlciB0byBhbiBvdGhlciBudW1lcmljIHR5cGUgbGlrZSBCaWdOdW1iZXIKICAgKiBvciBGcmFjdGlvbgogICAqLwoKCiAgVW5pdC50eXBlQ29udmVydGVycyA9IHsKICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHsKICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKHggKyAnJyk7IC8vIHN0cmluZ2lmeSB0byBwcmV2ZW50IGNvbnN0cnVjdG9yIGVycm9yCiAgICB9LAogICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHsKICAgICAgcmV0dXJuIG5ldyBfRnJhY3Rpb24oeCk7CiAgICB9LAogICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7CiAgICAgIHJldHVybiB4OwogICAgfSwKICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHsKICAgICAgcmV0dXJuIHg7CiAgICB9CiAgfTsKICAvKioKICAgKiBSZXRyaWV2ZSB0aGUgcmlnaHQgY29udmVydG9yIGZ1bmN0aW9uIGNvcnJlc3BvbmRpbmcgd2l0aCB0aGUgdHlwZQogICAqIG9mIHByb3ZpZGVkIGV4YW1wbGVWYWx1ZS4KICAgKgogICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlICAgQSBzdHJpbmcgJ251bWJlcicsICdCaWdOdW1iZXInLCBvciAnRnJhY3Rpb24nCiAgICogICAgICAgICAgICAgICAgICAgICAgICBJbiBjYXNlIG9mIGFuIHVua25vd24gdHlwZSwKICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0KICAgKi8KCiAgVW5pdC5fZ2V0TnVtYmVyQ29udmVydGVyID0gZnVuY3Rpb24gKHR5cGUpIHsKICAgIGlmICghVW5pdC50eXBlQ29udmVydGVyc1t0eXBlXSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlICInICsgdHlwZSArICciJyk7CiAgICB9CgogICAgcmV0dXJuIFVuaXQudHlwZUNvbnZlcnRlcnNbdHlwZV07CiAgfTsgLy8gQWRkIGRpbWVuc2lvbnMgdG8gZWFjaCBidWlsdC1pbiB1bml0CgoKICBmb3IgKHZhciBfa2V5MiBpbiBVTklUUykgewogICAgdmFyIHVuaXQgPSBVTklUU1tfa2V5Ml07CiAgICB1bml0LmRpbWVuc2lvbnMgPSB1bml0LmJhc2UuZGltZW5zaW9uczsKICB9IC8vIENyZWF0ZSBhbGlhc2VzCgoKICBmb3IgKHZhciBfbmFtZTIgaW4gQUxJQVNFUykgewogICAgaWYgKE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkoQUxJQVNFUywgX25hbWUyKSkgewogICAgICB2YXIgX3VuaXQyID0gVU5JVFNbQUxJQVNFU1tfbmFtZTJdXTsKICAgICAgdmFyIGFsaWFzID0ge307CgogICAgICBmb3IgKHZhciBfa2V5MyBpbiBfdW5pdDIpIHsKICAgICAgICBpZiAoT2JqZWN0KHV0aWxzX29iamVjdFsiZiIgLyogaGFzT3duUHJvcGVydHkgKi9dKShfdW5pdDIsIF9rZXkzKSkgewogICAgICAgICAgYWxpYXNbX2tleTNdID0gX3VuaXQyW19rZXkzXTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGFsaWFzLm5hbWUgPSBfbmFtZTI7CiAgICAgIFVOSVRTW19uYW1lMl0gPSBhbGlhczsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGFzc2VydFVuaXROYW1lSXNWYWxpZChuYW1lKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIF9jID0gbmFtZS5jaGFyQXQoaSk7CgogICAgICB2YXIgaXNWYWxpZEFscGhhID0gZnVuY3Rpb24gaXNWYWxpZEFscGhhKHApIHsKICAgICAgICByZXR1cm4gL15bYS16QS1aXSQvLnRlc3QocCk7CiAgICAgIH07CgogICAgICB2YXIgX2lzRGlnaXQgPSBmdW5jdGlvbiBfaXNEaWdpdChjKSB7CiAgICAgICAgcmV0dXJuIGMgPj0gJzAnICYmIGMgPD0gJzknOwogICAgICB9OwoKICAgICAgaWYgKGkgPT09IDAgJiYgIWlzVmFsaWRBbHBoYShfYykpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdW5pdCBuYW1lIChtdXN0IGJlZ2luIHdpdGggYWxwaGEgY2hhcmFjdGVyKTogIicgKyBuYW1lICsgJyInKTsKICAgICAgfQoKICAgICAgaWYgKGkgPiAwICYmICEoaXNWYWxpZEFscGhhKF9jKSB8fCBfaXNEaWdpdChfYykpKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVuaXQgbmFtZSAob25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhcmUgYWxsb3dlZCk6ICInICsgbmFtZSArICciJyk7CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogV3JhcHBlciBhcm91bmQgY3JlYXRlVW5pdFNpbmdsZS4KICAgKiBFeGFtcGxlOgogICAqICBjcmVhdGVVbml0KHsKICAgKiAgICBmb286IHsgfSwKICAgKiAgICBiYXI6IHsKICAgKiAgICAgIGRlZmluaXRpb246ICdrZy9mb28nLAogICAqICAgICAgYWxpYXNlczogWydiYScsICdiYXJyJywgJ2JhcnMnXSwKICAgKiAgICAgIG9mZnNldDogMjAwCiAgICogICAgfSwKICAgKiAgICBiYXo6ICc0IGJhcicKICAgKiAgfSwKICAgKiAgewogICAqICAgIG92ZXJyaWRlOiB0cnVlCiAgICogIH0pCiAgICogQHBhcmFtIHtvYmplY3R9IG9iaiAgICAgIE9iamVjdCBtYXAuIEVhY2gga2V5IGJlY29tZXMgYSB1bml0IHdoaWNoIGlzIGRlZmluZWQgYnkgaXRzIHZhbHVlLgogICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zCiAgICovCgoKICBVbml0LmNyZWF0ZVVuaXQgPSBmdW5jdGlvbiAob2JqLCBvcHRpb25zKSB7CiAgICBpZiAoVW5pdF90eXBlb2Yob2JqKSAhPT0gJ29iamVjdCcpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiY3JlYXRlVW5pdCBleHBlY3RzIGZpcnN0IHBhcmFtZXRlciB0byBiZSBvZiB0eXBlICdPYmplY3QnIik7CiAgICB9IC8vIFJlbW92ZSBhbGwgdW5pdHMgYW5kIGFsaWFzZXMgd2UgYXJlIG92ZXJyaWRpbmcKCgogICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5vdmVycmlkZSkgewogICAgICBmb3IgKHZhciBfa2V5NCBpbiBvYmopIHsKICAgICAgICBpZiAoT2JqZWN0KHV0aWxzX29iamVjdFsiZiIgLyogaGFzT3duUHJvcGVydHkgKi9dKShvYmosIF9rZXk0KSkgewogICAgICAgICAgVW5pdC5kZWxldGVVbml0KF9rZXk0KTsKICAgICAgICB9CgogICAgICAgIGlmIChvYmpbX2tleTRdLmFsaWFzZXMpIHsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqW19rZXk0XS5hbGlhc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIFVuaXQuZGVsZXRlVW5pdChvYmpbX2tleTRdLmFsaWFzZXNbaV0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSAvLyBUT0RPOiB0cmF2ZXJzZSBtdWx0aXBsZSB0aW1lcyB1bnRpbCBhbGwgdW5pdHMgaGF2ZSBiZWVuIGFkZGVkCgoKICAgIHZhciBsYXN0VW5pdDsKCiAgICBmb3IgKHZhciBfa2V5NSBpbiBvYmopIHsKICAgICAgaWYgKE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkob2JqLCBfa2V5NSkpIHsKICAgICAgICBsYXN0VW5pdCA9IFVuaXQuY3JlYXRlVW5pdFNpbmdsZShfa2V5NSwgb2JqW19rZXk1XSk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbGFzdFVuaXQ7CiAgfTsKICAvKioKICAgKiBDcmVhdGUgYSB1c2VyLWRlZmluZWQgdW5pdCBhbmQgcmVnaXN0ZXIgaXQgd2l0aCB0aGUgVW5pdCB0eXBlLgogICAqIEV4YW1wbGU6CiAgICogIGNyZWF0ZVVuaXRTaW5nbGUoJ2tub3QnLCAnMC41MTQ0NDQ0NDQgbS9zJykKICAgKiAgY3JlYXRlVW5pdFNpbmdsZSgnYWNyZScsIG5ldyBVbml0KDQzNTYwLCAnZnReMicpKQogICAqCiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgICAgICBUaGUgbmFtZSBvZiB0aGUgbmV3IHVuaXQuIE11c3QgYmUgdW5pcXVlLiBFeGFtcGxlOiAna25vdCcKICAgKiBAcGFyYW0ge3N0cmluZywgVW5pdCwgT2JqZWN0fSBkZWZpbml0aW9uICAgICAgRGVmaW5pdGlvbiBvZiB0aGUgdW5pdCBpbiB0ZXJtcwogICAqIG9mIGV4aXN0aW5nIHVuaXRzLiBGb3IgZXhhbXBsZSwgJzAuNTE0NDQ0NDQ0IG0gLyBzJy4gQ2FuIGJlIGEgVW5pdCwgYSBzdHJpbmcsCiAgICogb3IgYW4gT2JqZWN0LiBJZiBhbiBPYmplY3QsIG1heSBoYXZlIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKICAgKiAgIC0gZGVmaW5pdGlvbiB7c3RyaW5nfFVuaXR9IFRoZSBkZWZpbml0aW9uIG9mIHRoaXMgdW5pdC4KICAgKiAgIC0gcHJlZml4ZXMge3N0cmluZ30gIm5vbmUiLCAic2hvcnQiLCAibG9uZyIsICJiaW5hcnlfc2hvcnQiLCBvciAiYmluYXJ5X2xvbmciLgogICAqICAgICBUaGUgZGVmYXVsdCBpcyAibm9uZSIuCiAgICogICAtIGFsaWFzZXMge0FycmF5fSBBcnJheSBvZiBzdHJpbmdzLiBFeGFtcGxlOiBbJ2tub3RzJywgJ2t0JywgJ2t0cyddCiAgICogICAtIG9mZnNldCB7TnVtZXJpY30gQW4gb2Zmc2V0IHRvIGFwcGx5IHdoZW4gY29udmVydGluZyBmcm9tIHRoZSB1bml0LiBGb3IKICAgKiAgICAgZXhhbXBsZSwgdGhlIG9mZnNldCBmb3IgY2Vsc2l1cyBpcyAyNzMuMTUgYW5kIHRoZSBvZmZzZXQgZm9yIGZhcmhlbmhlaXQKICAgKiAgICAgaXMgNDU5LjY3LiBEZWZhdWx0IGlzIDAuCiAgICogICAtIGJhc2VOYW1lIHtzdHJpbmd9IElmIHRoZSB1bml0J3MgZGltZW5zaW9uIGRvZXMgbm90IG1hdGNoIHRoYXQgb2YgYW55IG90aGVyCiAgICogICAgIGJhc2UgdW5pdCwgdGhlIG5hbWUgb2YgdGhlIG5ld2x5IGNyZWF0ZSBiYXNlIHVuaXQuIE90aGVyd2lzZSwgdGhpcyBwcm9wZXJ0eQogICAqICAgICBoYXMgbm8gZWZmZWN0LgogICAqCiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgICAob3B0aW9uYWwpIEFuIG9iamVjdCBjb250YWluaW5nIGFueSBvZiB0aGUgZm9sbG93aW5nCiAgICogcHJvcGVydGllczoKICAgKiAgIC0gb3ZlcnJpZGUge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyB1bml0IHNob3VsZCBiZSBhbGxvd2VkIHRvIG92ZXJyaWRlIGV4aXN0aW5nCiAgICogICAgIHVuaXRzLgogICAqCiAgICogQHJldHVybiB7VW5pdH0KICAgKi8KCgogIFVuaXQuY3JlYXRlVW5pdFNpbmdsZSA9IGZ1bmN0aW9uIChuYW1lLCBvYmosIG9wdGlvbnMpIHsKICAgIGlmICh0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJyB8fCBvYmogPT09IG51bGwpIHsKICAgICAgb2JqID0ge307CiAgICB9CgogICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJjcmVhdGVVbml0U2luZ2xlIGV4cGVjdHMgZmlyc3QgcGFyYW1ldGVyIHRvIGJlIG9mIHR5cGUgJ3N0cmluZyciKTsKICAgIH0gLy8gQ2hlY2sgY29sbGlzaW9ucyB3aXRoIGV4aXN0aW5nIHVuaXRzCgoKICAgIGlmIChPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKFVOSVRTLCBuYW1lKSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjcmVhdGUgdW5pdCAiJyArIG5hbWUgKyAnIjogYSB1bml0IHdpdGggdGhhdCBuYW1lIGFscmVhZHkgZXhpc3RzJyk7CiAgICB9IC8vIFRPRE86IFZhbGlkYXRlIG5hbWUgZm9yIGNvbGxpc2lvbnMgd2l0aCBvdGhlciBidWlsdC1pbiBmdW5jdGlvbnMgKGxpa2UgYWJzIG9yIGNvcywgZm9yIGV4YW1wbGUpLCBhbmQgZm9yIGFjY2VwdGFibGUgdmFyaWFibGUgbmFtZXMuIEZvciBleGFtcGxlLCAnNDInIGlzIHByb2JhYmx5IG5vdCBhIHZhbGlkIHVuaXQuIE5vciBpcyAnJScsIHNpbmNlIGl0IGlzIGFsc28gYW4gb3BlcmF0b3IuCgoKICAgIGFzc2VydFVuaXROYW1lSXNWYWxpZChuYW1lKTsKICAgIHZhciBkZWZVbml0ID0gbnVsbDsgLy8gVGhlIFVuaXQgZnJvbSB3aGljaCB0aGUgbmV3IHVuaXQgd2lsbCBiZSBjcmVhdGVkLgoKICAgIHZhciBhbGlhc2VzID0gW107CiAgICB2YXIgb2Zmc2V0ID0gMDsKICAgIHZhciBkZWZpbml0aW9uOwogICAgdmFyIHByZWZpeGVzOwogICAgdmFyIGJhc2VOYW1lOwoKICAgIGlmIChvYmogJiYgb2JqLnR5cGUgPT09ICdVbml0JykgewogICAgICBkZWZVbml0ID0gb2JqLmNsb25lKCk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7CiAgICAgIGlmIChvYmogIT09ICcnKSB7CiAgICAgICAgZGVmaW5pdGlvbiA9IG9iajsKICAgICAgfQogICAgfSBlbHNlIGlmIChVbml0X3R5cGVvZihvYmopID09PSAnb2JqZWN0JykgewogICAgICBkZWZpbml0aW9uID0gb2JqLmRlZmluaXRpb247CiAgICAgIHByZWZpeGVzID0gb2JqLnByZWZpeGVzOwogICAgICBvZmZzZXQgPSBvYmoub2Zmc2V0OwogICAgICBiYXNlTmFtZSA9IG9iai5iYXNlTmFtZTsKCiAgICAgIGlmIChvYmouYWxpYXNlcykgewogICAgICAgIGFsaWFzZXMgPSBvYmouYWxpYXNlcy52YWx1ZU9mKCk7IC8vIGFsaWFzZXMgY291bGQgYmUgYSBNYXRyaXgsIHNvIGNvbnZlcnQgdG8gQXJyYXkKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNyZWF0ZSB1bml0ICInICsgbmFtZSArICciIGZyb20gIicgKyBvYmoudG9TdHJpbmcoKSArICciOiBleHBlY3RpbmcgInN0cmluZyIgb3IgIlVuaXQiIG9yICJPYmplY3QiJyk7CiAgICB9CgogICAgaWYgKGFsaWFzZXMpIHsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGlhc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkoVU5JVFMsIGFsaWFzZXNbaV0pKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjcmVhdGUgYWxpYXMgIicgKyBhbGlhc2VzW2ldICsgJyI6IGEgdW5pdCB3aXRoIHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cycpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGlmIChkZWZpbml0aW9uICYmIHR5cGVvZiBkZWZpbml0aW9uID09PSAnc3RyaW5nJyAmJiAhZGVmVW5pdCkgewogICAgICB0cnkgewogICAgICAgIGRlZlVuaXQgPSBVbml0LnBhcnNlKGRlZmluaXRpb24sIHsKICAgICAgICAgIGFsbG93Tm9Vbml0czogdHJ1ZQogICAgICAgIH0pOwogICAgICB9IGNhdGNoIChleCkgewogICAgICAgIGV4Lm1lc3NhZ2UgPSAnQ291bGQgbm90IGNyZWF0ZSB1bml0ICInICsgbmFtZSArICciIGZyb20gIicgKyBkZWZpbml0aW9uICsgJyI6ICcgKyBleC5tZXNzYWdlOwogICAgICAgIHRocm93IGV4OwogICAgICB9CiAgICB9IGVsc2UgaWYgKGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi50eXBlID09PSAnVW5pdCcpIHsKICAgICAgZGVmVW5pdCA9IGRlZmluaXRpb24uY2xvbmUoKTsKICAgIH0KCiAgICBhbGlhc2VzID0gYWxpYXNlcyB8fCBbXTsKICAgIG9mZnNldCA9IG9mZnNldCB8fCAwOwoKICAgIGlmIChwcmVmaXhlcyAmJiBwcmVmaXhlcy50b1VwcGVyQ2FzZSkgewogICAgICBwcmVmaXhlcyA9IFBSRUZJWEVTW3ByZWZpeGVzLnRvVXBwZXJDYXNlKCldIHx8IFBSRUZJWEVTLk5PTkU7CiAgICB9IGVsc2UgewogICAgICBwcmVmaXhlcyA9IFBSRUZJWEVTLk5PTkU7CiAgICB9IC8vIElmIGRlZlVuaXQgaXMgbnVsbCwgaXQgaXMgYmVjYXVzZSB0aGUgdXNlciBkaWQgbm90CiAgICAvLyBzcGVjaWZ5IGEgZGVmaW50aW9uLiBTbyBjcmVhdGUgYSBuZXcgYmFzZSBkaW1lbnNpb24uCgoKICAgIHZhciBuZXdVbml0ID0ge307CgogICAgaWYgKCFkZWZVbml0KSB7CiAgICAgIC8vIEFkZCBhIG5ldyBiYXNlIGRpbWVuc2lvbgogICAgICBiYXNlTmFtZSA9IGJhc2VOYW1lIHx8IG5hbWUgKyAnX1NUVUZGJzsgLy8gZm9vIC0tPiBmb29fU1RVRkYsIG9yIHRoZSBlc3NlbmNlIG9mIGZvbwoKICAgICAgaWYgKEJBU0VfRElNRU5TSU9OUy5pbmRleE9mKGJhc2VOYW1lKSA+PSAwKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIG5ldyBiYXNlIHVuaXQgIicgKyBuYW1lICsgJyI6IGEgYmFzZSB1bml0IHdpdGggdGhhdCBuYW1lIGFscmVhZHkgZXhpc3RzIChhbmQgY2Fubm90IGJlIG92ZXJyaWRkZW4pJyk7CiAgICAgIH0KCiAgICAgIEJBU0VfRElNRU5TSU9OUy5wdXNoKGJhc2VOYW1lKTsgLy8gUHVzaCAwIG9udG8gZXhpc3RpbmcgYmFzZSB1bml0cwoKICAgICAgZm9yICh2YXIgYiBpbiBCQVNFX1VOSVRTKSB7CiAgICAgICAgaWYgKE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkoQkFTRV9VTklUUywgYikpIHsKICAgICAgICAgIEJBU0VfVU5JVFNbYl0uZGltZW5zaW9uc1tCQVNFX0RJTUVOU0lPTlMubGVuZ3RoIC0gMV0gPSAwOwogICAgICAgIH0KICAgICAgfSAvLyBBZGQgdGhlIG5ldyBiYXNlIHVuaXQKCgogICAgICB2YXIgbmV3QmFzZVVuaXQgPSB7CiAgICAgICAgZGltZW5zaW9uczogW10KICAgICAgfTsKCiAgICAgIGZvciAodmFyIF9pNiA9IDA7IF9pNiA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IF9pNisrKSB7CiAgICAgICAgbmV3QmFzZVVuaXQuZGltZW5zaW9uc1tfaTZdID0gMDsKICAgICAgfQoKICAgICAgbmV3QmFzZVVuaXQuZGltZW5zaW9uc1tCQVNFX0RJTUVOU0lPTlMubGVuZ3RoIC0gMV0gPSAxOwogICAgICBuZXdCYXNlVW5pdC5rZXkgPSBiYXNlTmFtZTsKICAgICAgQkFTRV9VTklUU1tiYXNlTmFtZV0gPSBuZXdCYXNlVW5pdDsKICAgICAgbmV3VW5pdCA9IHsKICAgICAgICBuYW1lOiBuYW1lLAogICAgICAgIHZhbHVlOiAxLAogICAgICAgIGRpbWVuc2lvbnM6IEJBU0VfVU5JVFNbYmFzZU5hbWVdLmRpbWVuc2lvbnMuc2xpY2UoMCksCiAgICAgICAgcHJlZml4ZXM6IHByZWZpeGVzLAogICAgICAgIG9mZnNldDogb2Zmc2V0LAogICAgICAgIGJhc2U6IEJBU0VfVU5JVFNbYmFzZU5hbWVdCiAgICAgIH07CiAgICAgIGN1cnJlbnRVbml0U3lzdGVtW2Jhc2VOYW1lXSA9IHsKICAgICAgICB1bml0OiBuZXdVbml0LAogICAgICAgIHByZWZpeDogUFJFRklYRVMuTk9ORVsnJ10KICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgIG5ld1VuaXQgPSB7CiAgICAgICAgbmFtZTogbmFtZSwKICAgICAgICB2YWx1ZTogZGVmVW5pdC52YWx1ZSwKICAgICAgICBkaW1lbnNpb25zOiBkZWZVbml0LmRpbWVuc2lvbnMuc2xpY2UoMCksCiAgICAgICAgcHJlZml4ZXM6IHByZWZpeGVzLAogICAgICAgIG9mZnNldDogb2Zmc2V0CiAgICAgIH07IC8vIENyZWF0ZSBhIG5ldyBiYXNlIGlmIG5vIG1hdGNoaW5nIGJhc2UgZXhpc3RzCgogICAgICB2YXIgYW55TWF0Y2ggPSBmYWxzZTsKCiAgICAgIGZvciAodmFyIF9pNyBpbiBCQVNFX1VOSVRTKSB7CiAgICAgICAgaWYgKE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkoQkFTRV9VTklUUywgX2k3KSkgewogICAgICAgICAgdmFyIG1hdGNoID0gdHJ1ZTsKCiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGorKykgewogICAgICAgICAgICBpZiAoTWF0aC5hYnMoKG5ld1VuaXQuZGltZW5zaW9uc1tqXSB8fCAwKSAtIChCQVNFX1VOSVRTW19pN10uZGltZW5zaW9uc1tqXSB8fCAwKSkgPiAxZS0xMikgewogICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgYW55TWF0Y2ggPSB0cnVlOwogICAgICAgICAgICBuZXdVbml0LmJhc2UgPSBCQVNFX1VOSVRTW19pN107CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKCFhbnlNYXRjaCkgewogICAgICAgIGJhc2VOYW1lID0gYmFzZU5hbWUgfHwgbmFtZSArICdfU1RVRkYnOyAvLyBmb28gLS0+IGZvb19TVFVGRiwgb3IgdGhlIGVzc2VuY2Ugb2YgZm9vCiAgICAgICAgLy8gQWRkIHRoZSBuZXcgYmFzZSB1bml0CgogICAgICAgIHZhciBfbmV3QmFzZVVuaXQgPSB7CiAgICAgICAgICBkaW1lbnNpb25zOiBkZWZVbml0LmRpbWVuc2lvbnMuc2xpY2UoMCkKICAgICAgICB9OwogICAgICAgIF9uZXdCYXNlVW5pdC5rZXkgPSBiYXNlTmFtZTsKICAgICAgICBCQVNFX1VOSVRTW2Jhc2VOYW1lXSA9IF9uZXdCYXNlVW5pdDsKICAgICAgICBjdXJyZW50VW5pdFN5c3RlbVtiYXNlTmFtZV0gPSB7CiAgICAgICAgICB1bml0OiBuZXdVbml0LAogICAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5OT05FWycnXQogICAgICAgIH07CiAgICAgICAgbmV3VW5pdC5iYXNlID0gQkFTRV9VTklUU1tiYXNlTmFtZV07CiAgICAgIH0KICAgIH0KCiAgICBVbml0LlVOSVRTW25hbWVdID0gbmV3VW5pdDsKCiAgICBmb3IgKHZhciBfaTggPSAwOyBfaTggPCBhbGlhc2VzLmxlbmd0aDsgX2k4KyspIHsKICAgICAgdmFyIGFsaWFzTmFtZSA9IGFsaWFzZXNbX2k4XTsKICAgICAgdmFyIF9hbGlhcyA9IHt9OwoKICAgICAgZm9yICh2YXIgX2tleTYgaW4gbmV3VW5pdCkgewogICAgICAgIGlmIChPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKG5ld1VuaXQsIF9rZXk2KSkgewogICAgICAgICAgX2FsaWFzW19rZXk2XSA9IG5ld1VuaXRbX2tleTZdOwogICAgICAgIH0KICAgICAgfQoKICAgICAgX2FsaWFzLm5hbWUgPSBhbGlhc05hbWU7CiAgICAgIFVuaXQuVU5JVFNbYWxpYXNOYW1lXSA9IF9hbGlhczsKICAgIH0KCiAgICByZXR1cm4gbmV3IFVuaXQobnVsbCwgbmFtZSk7CiAgfTsKCiAgVW5pdC5kZWxldGVVbml0ID0gZnVuY3Rpb24gKG5hbWUpIHsKICAgIGRlbGV0ZSBVbml0LlVOSVRTW25hbWVdOwogIH07IC8vIGV4cG9zZSBhcnJheXMgd2l0aCBwcmVmaXhlcywgZGltZW5zaW9ucywgdW5pdHMsIHN5c3RlbXMKCgogIFVuaXQuUFJFRklYRVMgPSBQUkVGSVhFUzsKICBVbml0LkJBU0VfRElNRU5TSU9OUyA9IEJBU0VfRElNRU5TSU9OUzsKICBVbml0LkJBU0VfVU5JVFMgPSBCQVNFX1VOSVRTOwogIFVuaXQuVU5JVF9TWVNURU1TID0gVU5JVF9TWVNURU1TOwogIFVuaXQuVU5JVFMgPSBVTklUUzsKICByZXR1cm4gVW5pdDsKfSwgewogIGlzQ2xhc3M6IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3R5cGUvdW5pdC9mdW5jdGlvbi91bml0LmpzCgoKdmFyIHVuaXRfbmFtZSA9ICd1bml0JzsKdmFyIHVuaXRfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdVbml0J107IC8vIFRoaXMgZnVuY3Rpb24gaXMgbmFtZWQgY3JlYXRlVW5pdEZ1bmN0aW9uIHRvIHByZXZlbnQgYSBuYW1pbmcgY29uZmxpY3Qgd2l0aCBjcmVhdGVVbml0Cgp2YXIgY3JlYXRlVW5pdEZ1bmN0aW9uID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkodW5pdF9uYW1lLCB1bml0X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBVbml0ID0gX3JlZi5Vbml0OwoKICAvKioKICAgKiBDcmVhdGUgYSB1bml0LiBEZXBlbmRpbmcgb24gdGhlIHBhc3NlZCBhcmd1bWVudHMsIHRoZSBmdW5jdGlvbgogICAqIHdpbGwgY3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgbWF0aC5Vbml0IG9iamVjdC4KICAgKiBXaGVuIGEgbWF0cml4IGlzIHByb3ZpZGVkLCBhbGwgZWxlbWVudHMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdW5pdHMuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICAgbWF0aC51bml0KHVuaXQgOiBzdHJpbmcpCiAgICogICAgIG1hdGgudW5pdCh2YWx1ZSA6IG51bWJlciwgdW5pdCA6IHN0cmluZykKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgY29uc3QgYSA9IG1hdGgudW5pdCg1LCAnY20nKSAgICAvLyByZXR1cm5zIFVuaXQgNTAgbW0KICAgKiAgICBjb25zdCBiID0gbWF0aC51bml0KCcyMyBrZycpICAgIC8vIHJldHVybnMgVW5pdCAyMyBrZwogICAqICAgIGEudG8oJ20nKSAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBVbml0IDAuMDUgbQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBiaWdudW1iZXIsIGJvb2xlYW4sIGNvbXBsZXgsIGluZGV4LCBtYXRyaXgsIG51bWJlciwgc3RyaW5nLCBjcmVhdGVVbml0CiAgICoKICAgKiBAcGFyYW0geyogfCBBcnJheSB8IE1hdHJpeH0gYXJncyAgIEEgbnVtYmVyIGFuZCB1bml0LgogICAqIEByZXR1cm4ge1VuaXQgfCBBcnJheSB8IE1hdHJpeH0gICAgVGhlIGNyZWF0ZWQgdW5pdAogICAqLwogIHZhciB1bml0ID0gdHlwZWQodW5pdF9uYW1lLCB7CiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHsKICAgICAgcmV0dXJuIHguY2xvbmUoKTsKICAgIH0sCiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyh4KSB7CiAgICAgIGlmIChVbml0LmlzVmFsdWVsZXNzVW5pdCh4KSkgewogICAgICAgIHJldHVybiBuZXcgVW5pdChudWxsLCB4KTsgLy8gYSBwdXJlIHVuaXQKICAgICAgfQoKICAgICAgcmV0dXJuIFVuaXQucGFyc2UoeCwgewogICAgICAgIGFsbG93Tm9Vbml0czogdHJ1ZQogICAgICB9KTsgLy8gYSB1bml0IHdpdGggdmFsdWUsIGxpa2UgJzVjbScKICAgIH0sCiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4LCBzdHJpbmcnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJGcmFjdGlvbkNvbXBsZXhTdHJpbmcodmFsdWUsIHVuaXQpIHsKICAgICAgcmV0dXJuIG5ldyBVbml0KHZhbHVlLCB1bml0KTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIHJldHVybiBkZWVwTWFwKHgsIHVuaXQpOwogICAgfQogIH0pOwogIHJldHVybiB1bml0Owp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdHlwZS9tYXRyaXgvZnVuY3Rpb24vc3BhcnNlLmpzCgp2YXIgc3BhcnNlX25hbWUgPSAnc3BhcnNlJzsKdmFyIHNwYXJzZV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ1NwYXJzZU1hdHJpeCddOwp2YXIgY3JlYXRlU3BhcnNlID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoc3BhcnNlX25hbWUsIHNwYXJzZV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7CgogIC8qKgogICAqIENyZWF0ZSBhIFNwYXJzZSBNYXRyaXguIFRoZSBmdW5jdGlvbiBjcmVhdGVzIGEgbmV3IGBtYXRoLk1hdHJpeGAgb2JqZWN0IGZyb20KICAgKiBhbiBgQXJyYXlgLiBBIE1hdHJpeCBoYXMgdXRpbGl0eSBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSB0aGUgZGF0YSBpbiB0aGUKICAgKiBtYXRyaXgsIGxpa2UgZ2V0dGluZyB0aGUgc2l6ZSBhbmQgZ2V0dGluZyBvciBzZXR0aW5nIHZhbHVlcyBpbiB0aGUgbWF0cml4LgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5zcGFyc2UoKSAgICAgICAgICAgICAgIC8vIGNyZWF0ZXMgYW4gZW1wdHkgc3BhcnNlIG1hdHJpeC4KICAgKiAgICBtYXRoLnNwYXJzZShkYXRhKSAgICAgICAgICAgLy8gY3JlYXRlcyBhIHNwYXJzZSBtYXRyaXggd2l0aCBpbml0aWFsIGRhdGEuCiAgICogICAgbWF0aC5zcGFyc2UoZGF0YSwgJ251bWJlcicpIC8vIGNyZWF0ZXMgYSBzcGFyc2UgbWF0cml4IHdpdGggaW5pdGlhbCBkYXRhLCBudW1iZXIgZGF0YXR5cGUuCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIGxldCBtID0gbWF0aC5zcGFyc2UoW1sxLCAyXSwgWzMsIDRdXSkKICAgKiAgICBtLnNpemUoKSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFycmF5IFsyLCAyXQogICAqICAgIG0ucmVzaXplKFszLCAyXSwgNSkKICAgKiAgICBtLnZhbHVlT2YoKSAgICAgICAgICAgICAgICAgICAgIC8vIEFycmF5IFtbMSwgMl0sIFszLCA0XSwgWzUsIDVdXQogICAqICAgIG0uZ2V0KFsxLCAwXSkgICAgICAgICAgICAgICAgICAgIC8vIG51bWJlciAzCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGJpZ251bWJlciwgYm9vbGVhbiwgY29tcGxleCwgaW5kZXgsIG51bWJlciwgc3RyaW5nLCB1bml0LCBtYXRyaXgKICAgKgogICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtkYXRhXSAgICBBIHR3byBkaW1lbnNpb25hbCBhcnJheQogICAqCiAgICogQHJldHVybiB7TWF0cml4fSBUaGUgY3JlYXRlZCBtYXRyaXgKICAgKi8KICByZXR1cm4gdHlwZWQoc3BhcnNlX25hbWUsIHsKICAgICcnOiBmdW5jdGlvbiBfKCkgewogICAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChbXSk7CiAgICB9LAogICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoZGF0YXR5cGUpIHsKICAgICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgoW10sIGRhdGF0eXBlKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChkYXRhKSB7CiAgICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGRhdGEpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCwgc3RyaW5nJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhTdHJpbmcoZGF0YSwgZGF0YXR5cGUpIHsKICAgICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpOwogICAgfQogIH0pOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdHlwZS91bml0L2Z1bmN0aW9uL2NyZWF0ZVVuaXQuanMKCnZhciBjcmVhdGVVbml0X25hbWUgPSAnY3JlYXRlVW5pdCc7CnZhciBjcmVhdGVVbml0X2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnVW5pdCddOwp2YXIgY3JlYXRlQ3JlYXRlVW5pdCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGNyZWF0ZVVuaXRfbmFtZSwgY3JlYXRlVW5pdF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgVW5pdCA9IF9yZWYuVW5pdDsKCiAgLyoqCiAgICogQ3JlYXRlIGEgdXNlci1kZWZpbmVkIHVuaXQgYW5kIHJlZ2lzdGVyIGl0IHdpdGggdGhlIFVuaXQgdHlwZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBtYXRoLmNyZWF0ZVVuaXQoewogICAqICAgICAgIGJhc2VVbml0MTogewogICAqICAgICAgICAgYWxpYXNlczogW3N0cmluZywgLi4uXQogICAqICAgICAgICAgcHJlZml4ZXM6IG9iamVjdAogICAqICAgICAgIH0sCiAgICogICAgICAgdW5pdDI6IHsKICAgKiAgICAgICAgIGRlZmluaXRpb246IHN0cmluZywKICAgKiAgICAgICAgIGFsaWFzZXM6IFtzdHJpbmcsIC4uLl0KICAgKiAgICAgICAgIHByZWZpeGVzOiBvYmplY3QsCiAgICogICAgICAgICBvZmZzZXQ6IG51bWJlcgogICAqICAgICAgIH0sCiAgICogICAgICAgdW5pdDM6IHN0cmluZyAgICAvLyBTaG9ydGN1dAogICAqICAgICB9KQogICAqCiAgICogICAgIC8vIEFub3RoZXIgc2hvcnRjdXQ6CiAgICogICAgIG1hdGguY3JlYXRlVW5pdChzdHJpbmcsIHVuaXQgOiBzdHJpbmcsIFtvYmplY3RdKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICAgbWF0aC5jcmVhdGVVbml0KCdmb28nKQogICAqICAgICBtYXRoLmNyZWF0ZVVuaXQoJ2tub3QnLCB7ZGVmaW5pdGlvbjogJzAuNTE0NDQ0NDQ0IG0vcycsIGFsaWFzZXM6IFsna25vdHMnLCAna3QnLCAna3RzJ119KQogICAqICAgICBtYXRoLmNyZWF0ZVVuaXQoJ21waCcsICcxIG1pbGUvaG91cicpCiAgICoKICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgICAgIFRoZSBuYW1lIG9mIHRoZSBuZXcgdW5pdC4gTXVzdCBiZSB1bmlxdWUuIEV4YW1wbGU6ICdrbm90JwogICAqIEBwYXJhbSB7c3RyaW5nLCBVbml0fSBkZWZpbml0aW9uICAgICAgRGVmaW5pdGlvbiBvZiB0aGUgdW5pdCBpbiB0ZXJtcyBvZiBleGlzdGluZyB1bml0cy4gRm9yIGV4YW1wbGUsICcwLjUxNDQ0NDQ0NCBtIC8gcycuCiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgICAob3B0aW9uYWwpIEFuIG9iamVjdCBjb250YWluaW5nIGFueSBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CiAgICogICAgIC0gYHByZWZpeGVzIHtzdHJpbmd9YCAibm9uZSIsICJzaG9ydCIsICJsb25nIiwgImJpbmFyeV9zaG9ydCIsIG9yICJiaW5hcnlfbG9uZyIuIFRoZSBkZWZhdWx0IGlzICJub25lIi4KICAgKiAgICAgLSBgYWxpYXNlcyB7QXJyYXl9YCBBcnJheSBvZiBzdHJpbmdzLiBFeGFtcGxlOiBbJ2tub3RzJywgJ2t0JywgJ2t0cyddCiAgICogICAgIC0gYG9mZnNldCB7TnVtZXJpY31gIEFuIG9mZnNldCB0byBhcHBseSB3aGVuIGNvbnZlcnRpbmcgZnJvbSB0aGUgdW5pdC4gRm9yIGV4YW1wbGUsIHRoZSBvZmZzZXQgZm9yIGNlbHNpdXMgaXMgMjczLjE1LiBEZWZhdWx0IGlzIDAuCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgICB1bml0CiAgICoKICAgKiBAcmV0dXJuIHtVbml0fSBUaGUgbmV3IHVuaXQKICAgKi8KICByZXR1cm4gdHlwZWQoY3JlYXRlVW5pdF9uYW1lLCB7CiAgICAvLyBHZW5lcmFsIGZ1bmN0aW9uIHNpZ25hdHVyZS4gRmlyc3QgcGFyYW1ldGVyIGlzIGFuIG9iamVjdCB3aGVyZSBlYWNoIHByb3BlcnR5IGlzIHRoZSBkZWZpbml0aW9uIG9mIGEgbmV3IHVuaXQuIFRoZSBvYmplY3Qga2V5cyBhcmUgdGhlIHVuaXQgbmFtZXMgYW5kIHRoZSB2YWx1ZXMgYXJlIHRoZSBkZWZpbml0aW9ucy4gVGhlIHZhbHVlcyBjYW4gYmUgb2JqZWN0cywgc3RyaW5ncywgb3IgVW5pdHMuIElmIGEgcHJvcGVydHkgaXMgYW4gZW1wdHkgb2JqZWN0IG9yIGFuIGVtcHR5IHN0cmluZywgYSBuZXcgYmFzZSB1bml0IGlzIGNyZWF0ZWQuIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSBvcHRpb25zLgogICAgJ09iamVjdCwgT2JqZWN0JzogZnVuY3Rpb24gT2JqZWN0T2JqZWN0KG9iaiwgb3B0aW9ucykgewogICAgICByZXR1cm4gVW5pdC5jcmVhdGVVbml0KG9iaiwgb3B0aW9ucyk7CiAgICB9LAogICAgLy8gU2FtZSBhcyBhYm92ZSBidXQgd2l0aG91dCB0aGUgb3B0aW9ucy4KICAgIE9iamVjdDogZnVuY3Rpb24gT2JqZWN0KG9iaikgewogICAgICByZXR1cm4gVW5pdC5jcmVhdGVVbml0KG9iaiwge30pOwogICAgfSwKICAgIC8vIFNob3J0Y3V0IG1ldGhvZCBmb3IgY3JlYXRpbmcgb25lIHVuaXQuCiAgICAnc3RyaW5nLCBVbml0IHwgc3RyaW5nIHwgT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdVbml0U3RyaW5nT2JqZWN0T2JqZWN0KG5hbWUsIGRlZiwgb3B0aW9ucykgewogICAgICB2YXIgb2JqID0ge307CiAgICAgIG9ialtuYW1lXSA9IGRlZjsKICAgICAgcmV0dXJuIFVuaXQuY3JlYXRlVW5pdChvYmosIG9wdGlvbnMpOwogICAgfSwKICAgIC8vIFNhbWUgYXMgYWJvdmUgYnV0IHdpdGhvdXQgdGhlIG9wdGlvbnMuCiAgICAnc3RyaW5nLCBVbml0IHwgc3RyaW5nIHwgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nVW5pdFN0cmluZ09iamVjdChuYW1lLCBkZWYpIHsKICAgICAgdmFyIG9iaiA9IHt9OwogICAgICBvYmpbbmFtZV0gPSBkZWY7CiAgICAgIHJldHVybiBVbml0LmNyZWF0ZVVuaXQob2JqLCB7fSk7CiAgICB9LAogICAgLy8gV2l0aG91dCBhIGRlZmluaXRpb24sIGNyZWF0ZXMgYSBiYXNlIHVuaXQuCiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhuYW1lKSB7CiAgICAgIHZhciBvYmogPSB7fTsKICAgICAgb2JqW25hbWVdID0ge307CiAgICAgIHJldHVybiBVbml0LmNyZWF0ZVVuaXQob2JqLCB7fSk7CiAgICB9CiAgfSk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvcy5qcwoKCnZhciBhY29zX25hbWUgPSAnYWNvcyc7CnZhciBhY29zX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0NvbXBsZXgnXTsKdmFyIGNyZWF0ZUFjb3MgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShhY29zX25hbWUsIGFjb3NfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLAogICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4OwoKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIGludmVyc2UgY29zaW5lIG9mIGEgdmFsdWUuCiAgICoKICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5hY29zKHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguYWNvcygwLjUpICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAxLjA0NzE5NzU1MTE5NjU5NzkKICAgKiAgICBtYXRoLmFjb3MobWF0aC5jb3MoMS41KSkgLy8gcmV0dXJucyBudW1iZXIgMS41CiAgICoKICAgKiAgICBtYXRoLmFjb3MoMikgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDAgKyAxLjMxNjk1Nzg5NjkyNDgxNjYgaQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBjb3MsIGF0YW4sIGFzaW4KICAgKgogICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dAogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gVGhlIGFyYyBjb3NpbmUgb2YgeAogICAqLwogIHZhciBhY29zID0gdHlwZWQoYWNvc19uYW1lLCB7CiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7CiAgICAgIGlmICh4ID49IC0xICYmIHggPD0gMSB8fCBjb25maWcucHJlZGljdGFibGUpIHsKICAgICAgICByZXR1cm4gTWF0aC5hY29zKHgpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hY29zKCk7CiAgICAgIH0KICAgIH0sCiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHsKICAgICAgcmV0dXJuIHguYWNvcygpOwogICAgfSwKICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHsKICAgICAgcmV0dXJuIHguYWNvcygpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgYWNvcyk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGFjb3M7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9wbGFpbi9udW1iZXIvdHJpZ29ub21ldHJ5LmpzCgp2YXIgdHJpZ29ub21ldHJ5X24xID0gJ251bWJlcic7CnZhciB0cmlnb25vbWV0cnlfbjIgPSAnbnVtYmVyLCBudW1iZXInOwpmdW5jdGlvbiBhY29zTnVtYmVyKHgpIHsKICByZXR1cm4gTWF0aC5hY29zKHgpOwp9CmFjb3NOdW1iZXIuc2lnbmF0dXJlID0gdHJpZ29ub21ldHJ5X24xOwpmdW5jdGlvbiBhY29zaE51bWJlcih4KSB7CiAgcmV0dXJuIE9iamVjdCh1dGlsc19udW1iZXJbImEiIC8qIGFjb3NoICovXSkoeCk7Cn0KYWNvc2hOdW1iZXIuc2lnbmF0dXJlID0gdHJpZ29ub21ldHJ5X24xOwpmdW5jdGlvbiBhY290TnVtYmVyKHgpIHsKICByZXR1cm4gTWF0aC5hdGFuKDEgLyB4KTsKfQphY290TnVtYmVyLnNpZ25hdHVyZSA9IHRyaWdvbm9tZXRyeV9uMTsKZnVuY3Rpb24gYWNvdGhOdW1iZXIoeCkgewogIHJldHVybiBpc0Zpbml0ZSh4KSA/IChNYXRoLmxvZygoeCArIDEpIC8geCkgKyBNYXRoLmxvZyh4IC8gKHggLSAxKSkpIC8gMiA6IDA7Cn0KYWNvdGhOdW1iZXIuc2lnbmF0dXJlID0gdHJpZ29ub21ldHJ5X24xOwpmdW5jdGlvbiBhY3NjTnVtYmVyKHgpIHsKICByZXR1cm4gTWF0aC5hc2luKDEgLyB4KTsKfQphY3NjTnVtYmVyLnNpZ25hdHVyZSA9IHRyaWdvbm9tZXRyeV9uMTsKZnVuY3Rpb24gYWNzY2hOdW1iZXIoeCkgewogIHZhciB4SW52ID0gMSAvIHg7CiAgcmV0dXJuIE1hdGgubG9nKHhJbnYgKyBNYXRoLnNxcnQoeEludiAqIHhJbnYgKyAxKSk7Cn0KYWNzY2hOdW1iZXIuc2lnbmF0dXJlID0gdHJpZ29ub21ldHJ5X24xOwpmdW5jdGlvbiBhc2VjTnVtYmVyKHgpIHsKICByZXR1cm4gTWF0aC5hY29zKDEgLyB4KTsKfQphc2VjTnVtYmVyLnNpZ25hdHVyZSA9IHRyaWdvbm9tZXRyeV9uMTsKZnVuY3Rpb24gYXNlY2hOdW1iZXIoeCkgewogIHZhciB4SW52ID0gMSAvIHg7CiAgdmFyIHJldCA9IE1hdGguc3FydCh4SW52ICogeEludiAtIDEpOwogIHJldHVybiBNYXRoLmxvZyhyZXQgKyB4SW52KTsKfQphc2VjaE51bWJlci5zaWduYXR1cmUgPSB0cmlnb25vbWV0cnlfbjE7CmZ1bmN0aW9uIGFzaW5OdW1iZXIoeCkgewogIHJldHVybiBNYXRoLmFzaW4oeCk7Cn0KYXNpbk51bWJlci5zaWduYXR1cmUgPSB0cmlnb25vbWV0cnlfbjE7CmZ1bmN0aW9uIGFzaW5oTnVtYmVyKHgpIHsKICByZXR1cm4gT2JqZWN0KHV0aWxzX251bWJlclsiYiIgLyogYXNpbmggKi9dKSh4KTsKfQphc2luaE51bWJlci5zaWduYXR1cmUgPSB0cmlnb25vbWV0cnlfbjE7CmZ1bmN0aW9uIGF0YW5OdW1iZXIoeCkgewogIHJldHVybiBNYXRoLmF0YW4oeCk7Cn0KYXRhbk51bWJlci5zaWduYXR1cmUgPSB0cmlnb25vbWV0cnlfbjE7CmZ1bmN0aW9uIGF0YW4yTnVtYmVyKHksIHgpIHsKICByZXR1cm4gTWF0aC5hdGFuMih5LCB4KTsKfQphdGFuMk51bWJlci5zaWduYXR1cmUgPSB0cmlnb25vbWV0cnlfbjI7CmZ1bmN0aW9uIGF0YW5oTnVtYmVyKHgpIHsKICByZXR1cm4gT2JqZWN0KHV0aWxzX251bWJlclsiYyIgLyogYXRhbmggKi9dKSh4KTsKfQphdGFuaE51bWJlci5zaWduYXR1cmUgPSB0cmlnb25vbWV0cnlfbjE7CmZ1bmN0aW9uIGNvc051bWJlcih4KSB7CiAgcmV0dXJuIE1hdGguY29zKHgpOwp9CmNvc051bWJlci5zaWduYXR1cmUgPSB0cmlnb25vbWV0cnlfbjE7CmZ1bmN0aW9uIGNvc2hOdW1iZXIoeCkgewogIHJldHVybiBPYmplY3QodXRpbHNfbnVtYmVyWyJlIiAvKiBjb3NoICovXSkoeCk7Cn0KY29zaE51bWJlci5zaWduYXR1cmUgPSB0cmlnb25vbWV0cnlfbjE7CmZ1bmN0aW9uIGNvdE51bWJlcih4KSB7CiAgcmV0dXJuIDEgLyBNYXRoLnRhbih4KTsKfQpjb3ROdW1iZXIuc2lnbmF0dXJlID0gdHJpZ29ub21ldHJ5X24xOwpmdW5jdGlvbiBjb3RoTnVtYmVyKHgpIHsKICB2YXIgZSA9IE1hdGguZXhwKDIgKiB4KTsKICByZXR1cm4gKGUgKyAxKSAvIChlIC0gMSk7Cn0KY290aE51bWJlci5zaWduYXR1cmUgPSB0cmlnb25vbWV0cnlfbjE7CmZ1bmN0aW9uIGNzY051bWJlcih4KSB7CiAgcmV0dXJuIDEgLyBNYXRoLnNpbih4KTsKfQpjc2NOdW1iZXIuc2lnbmF0dXJlID0gdHJpZ29ub21ldHJ5X24xOwpmdW5jdGlvbiBjc2NoTnVtYmVyKHgpIHsKICAvLyBjb25zaWRlciB2YWx1ZXMgY2xvc2UgdG8gemVybyAoKy8tKQogIGlmICh4ID09PSAwKSB7CiAgICByZXR1cm4gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwogIH0gZWxzZSB7CiAgICByZXR1cm4gTWF0aC5hYnMoMiAvIChNYXRoLmV4cCh4KSAtIE1hdGguZXhwKC14KSkpICogT2JqZWN0KHV0aWxzX251bWJlclsibiIgLyogc2lnbiAqL10pKHgpOwogIH0KfQpjc2NoTnVtYmVyLnNpZ25hdHVyZSA9IHRyaWdvbm9tZXRyeV9uMTsKZnVuY3Rpb24gc2VjTnVtYmVyKHgpIHsKICByZXR1cm4gMSAvIE1hdGguY29zKHgpOwp9CnNlY051bWJlci5zaWduYXR1cmUgPSB0cmlnb25vbWV0cnlfbjE7CmZ1bmN0aW9uIHNlY2hOdW1iZXIoeCkgewogIHJldHVybiAyIC8gKE1hdGguZXhwKHgpICsgTWF0aC5leHAoLXgpKTsKfQpzZWNoTnVtYmVyLnNpZ25hdHVyZSA9IHRyaWdvbm9tZXRyeV9uMTsKZnVuY3Rpb24gc2luTnVtYmVyKHgpIHsKICByZXR1cm4gTWF0aC5zaW4oeCk7Cn0Kc2luTnVtYmVyLnNpZ25hdHVyZSA9IHRyaWdvbm9tZXRyeV9uMTsKZnVuY3Rpb24gc2luaE51bWJlcih4KSB7CiAgcmV0dXJuIE9iamVjdCh1dGlsc19udW1iZXJbIm8iIC8qIHNpbmggKi9dKSh4KTsKfQpzaW5oTnVtYmVyLnNpZ25hdHVyZSA9IHRyaWdvbm9tZXRyeV9uMTsKZnVuY3Rpb24gdGFuTnVtYmVyKHgpIHsKICByZXR1cm4gTWF0aC50YW4oeCk7Cn0KdGFuTnVtYmVyLnNpZ25hdHVyZSA9IHRyaWdvbm9tZXRyeV9uMTsKZnVuY3Rpb24gdGFuaE51bWJlcih4KSB7CiAgcmV0dXJuIE9iamVjdCh1dGlsc19udW1iZXJbInAiIC8qIHRhbmggKi9dKSh4KTsKfQp0YW5oTnVtYmVyLnNpZ25hdHVyZSA9IHRyaWdvbm9tZXRyeV9uMTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3NoLmpzCgoKCnZhciBhY29zaF9uYW1lID0gJ2Fjb3NoJzsKdmFyIGFjb3NoX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0NvbXBsZXgnXTsKdmFyIGNyZWF0ZUFjb3NoID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoYWNvc2hfbmFtZSwgYWNvc2hfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLAogICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4OwoKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY29zIG9mIGEgdmFsdWUsCiAgICogZGVmaW5lZCBhcyBgYWNvc2goeCkgPSBsbihzcXJ0KHheMiAtIDEpICsgeClgLgogICAqCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguYWNvc2goeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5hY29zaCgxLjUpICAgICAgIC8vIHJldHVybnMgMC45NjI0MjM2NTAxMTkyMDY5CiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGNvc2gsIGFzaW5oLCBhdGFuaAogICAqCiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dAogICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gSHlwZXJib2xpYyBhcmNjb3NpbmUgb2YgeAogICAqLwogIHZhciBhY29zaCA9IHR5cGVkKGFjb3NoX25hbWUsIHsKICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHsKICAgICAgaWYgKHggPj0gMSB8fCBjb25maWcucHJlZGljdGFibGUpIHsKICAgICAgICByZXR1cm4gYWNvc2hOdW1iZXIoeCk7CiAgICAgIH0KCiAgICAgIGlmICh4IDw9IC0xKSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KE1hdGgubG9nKE1hdGguc3FydCh4ICogeCAtIDEpIC0geCksIE1hdGguUEkpOwogICAgICB9CgogICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCkuYWNvc2goKTsKICAgIH0sCiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHsKICAgICAgcmV0dXJuIHguYWNvc2goKTsKICAgIH0sCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiB4LmFjb3NoKCk7CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkgewogICAgICByZXR1cm4gZGVlcE1hcCh4LCBhY29zaCk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGFjb3NoOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3QuanMKCgoKdmFyIGFjb3RfbmFtZSA9ICdhY290JzsKdmFyIGFjb3RfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTsKdmFyIGNyZWF0ZUFjb3QgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShhY290X25hbWUsIGFjb3RfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjsKCiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIGNvdGFuZ2VudCBvZiBhIHZhbHVlLCBkZWZpbmVkIGFzIGBhY290KHgpID0gYXRhbigxL3gpYC4KICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmFjb3QoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5hY290KDAuNSkgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuNDYzNjQ3NjA5MDAwODA2MQogICAqICAgIG1hdGguYWNvdChtYXRoLmNvdCgxLjUpKSAvLyByZXR1cm5zIG51bWJlciAxLjUKICAgKgogICAqICAgIG1hdGguYWNvdCgyKSAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMS41NzA3OTYzMjY3OTQ4OTY2IC0xLjMxNjk1Nzg5NjkyNDgxNjYgaQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBjb3QsIGF0YW4KICAgKgogICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICAgRnVuY3Rpb24gaW5wdXQKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBhcmMgY290YW5nZW50IG9mIHgKICAgKi8KICB2YXIgYWNvdCA9IHR5cGVkKGFjb3RfbmFtZSwgewogICAgbnVtYmVyOiBhY290TnVtYmVyLAogICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7CiAgICAgIHJldHVybiB4LmFjb3QoKTsKICAgIH0sCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeCkuYXRhbigpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgYWNvdCk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGFjb3Q7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvdGguanMKCgoKdmFyIGFjb3RoX25hbWUgPSAnYWNvdGgnOwp2YXIgYWNvdGhfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCcsICdCaWdOdW1iZXInXTsKdmFyIGNyZWF0ZUFjb3RoID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoYWNvdGhfbmFtZSwgYWNvdGhfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLAogICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LAogICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7CgogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBhcmNjb3RhbmdlbnQgb2YgYSB2YWx1ZSwKICAgKiBkZWZpbmVkIGFzIGBhY290aCh4KSA9IGF0YW5oKDEveCkgPSAobG4oKHgrMSkveCkgKyBsbih4Lyh4LTEpKSkgLyAyYC4KICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmFjb3RoKHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguYWNvdGgoMC41KSAgICAgICAvLyByZXR1cm5zIDAuODA0NzE4OTU2MjE3MDUwMwogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBhY3NjaCwgYXNlY2gKICAgKgogICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dAogICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gSHlwZXJib2xpYyBhcmNjb3RhbmdlbnQgb2YgeAogICAqLwogIHZhciBhY290aCA9IHR5cGVkKGFjb3RoX25hbWUsIHsKICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHsKICAgICAgaWYgKHggPj0gMSB8fCB4IDw9IC0xIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkgewogICAgICAgIHJldHVybiBhY290aE51bWJlcih4KTsKICAgICAgfQoKICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApLmFjb3RoKCk7CiAgICB9LAogICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7CiAgICAgIHJldHVybiB4LmFjb3RoKCk7CiAgICB9LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkgewogICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHgpLmF0YW5oKCk7CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkgewogICAgICByZXR1cm4gZGVlcE1hcCh4LCBhY290aCk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGFjb3RoOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjc2MuanMKCgoKdmFyIGFjc2NfbmFtZSA9ICdhY3NjJzsKdmFyIGFjc2NfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCcsICdCaWdOdW1iZXInXTsKdmFyIGNyZWF0ZUFjc2MgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShhY3NjX25hbWUsIGFjc2NfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLAogICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LAogICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7CgogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgaW52ZXJzZSBjb3NlY2FudCBvZiBhIHZhbHVlLCBkZWZpbmVkIGFzIGBhY3NjKHgpID0gYXNpbigxL3gpYC4KICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmFjc2MoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5hY3NjKDAuNSkgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuNTIzNTk4Nzc1NTk4Mjk4OQogICAqICAgIG1hdGguYWNzYyhtYXRoLmNzYygxLjUpKSAvLyByZXR1cm5zIG51bWJlciB+MS41CiAgICoKICAgKiAgICBtYXRoLmFjc2MoMikgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMS4zMTY5NTc4OTY5MjQ4MTY2IGkKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgY3NjLCBhc2luLCBhc2VjCiAgICoKICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgIEZ1bmN0aW9uIGlucHV0CiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBUaGUgYXJjIGNvc2VjYW50IG9mIHgKICAgKi8KICB2YXIgYWNzYyA9IHR5cGVkKGFjc2NfbmFtZSwgewogICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkgewogICAgICBpZiAoeCA8PSAtMSB8fCB4ID49IDEgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7CiAgICAgICAgcmV0dXJuIGFjc2NOdW1iZXIoeCk7CiAgICAgIH0KCiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hY3NjKCk7CiAgICB9LAogICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7CiAgICAgIHJldHVybiB4LmFjc2MoKTsKICAgIH0sCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeCkuYXNpbigpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgYWNzYyk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGFjc2M7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2guanMKCgoKdmFyIGFjc2NoX25hbWUgPSAnYWNzY2gnOwp2YXIgYWNzY2hfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTsKdmFyIGNyZWF0ZUFjc2NoID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoYWNzY2hfbmFtZSwgYWNzY2hfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjsKCiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2Nvc2VjYW50IG9mIGEgdmFsdWUsCiAgICogZGVmaW5lZCBhcyBgYWNzY2goeCkgPSBhc2luaCgxL3gpID0gbG4oMS94ICsgc3FydCgxL3heMiArIDEpKWAuCiAgICoKICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5hY3NjaCh4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmFjc2NoKDAuNSkgICAgICAgLy8gcmV0dXJucyAxLjQ0MzYzNTQ3NTE3ODgxMDMKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgYXNlY2gsIGFjb3RoCiAgICoKICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXQKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgYXJjY29zZWNhbnQgb2YgeAogICAqLwogIHZhciBhY3NjaCA9IHR5cGVkKGFjc2NoX25hbWUsIHsKICAgIG51bWJlcjogYWNzY2hOdW1iZXIsCiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHsKICAgICAgcmV0dXJuIHguYWNzY2goKTsKICAgIH0sCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeCkuYXNpbmgoKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIHJldHVybiBkZWVwTWFwKHgsIGFjc2NoKTsKICAgIH0KICB9KTsKICByZXR1cm4gYWNzY2g7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNlYy5qcwoKCgp2YXIgYXNlY19uYW1lID0gJ2FzZWMnOwp2YXIgYXNlY19kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdDb21wbGV4JywgJ0JpZ051bWJlciddOwp2YXIgY3JlYXRlQXNlYyA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGFzZWNfbmFtZSwgYXNlY19kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXgsCiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjsKCiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIHNlY2FudCBvZiBhIHZhbHVlLiBEZWZpbmVkIGFzIGBhc2VjKHgpID0gYWNvcygxL3gpYC4KICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmFzZWMoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5hc2VjKDAuNSkgICAgICAgICAgIC8vIHJldHVybnMgMS4wNDcxOTc1NTExOTY1OTc5CiAgICogICAgbWF0aC5hc2VjKG1hdGguc2VjKDEuNSkpIC8vIHJldHVybnMgMS41CiAgICoKICAgKiAgICBtYXRoLmFzZWMoMikgICAgICAgICAgICAgLy8gcmV0dXJucyAwICsgMS4zMTY5NTc4OTY5MjQ4MTY2IGkKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgYWNvcywgYWNvdCwgYWNzYwogICAqCiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0CiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBUaGUgYXJjIHNlY2FudCBvZiB4CiAgICovCiAgdmFyIGFzZWMgPSB0eXBlZChhc2VjX25hbWUsIHsKICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHsKICAgICAgaWYgKHggPD0gLTEgfHwgeCA+PSAxIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkgewogICAgICAgIHJldHVybiBhc2VjTnVtYmVyKHgpOwogICAgICB9CgogICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCkuYXNlYygpOwogICAgfSwKICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkgewogICAgICByZXR1cm4geC5hc2VjKCk7CiAgICB9LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkgewogICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHgpLmFjb3MoKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIHJldHVybiBkZWVwTWFwKHgsIGFzZWMpOwogICAgfQogIH0pOwogIHJldHVybiBhc2VjOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzZWNoLmpzCgoKCnZhciBhc2VjaF9uYW1lID0gJ2FzZWNoJzsKdmFyIGFzZWNoX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0NvbXBsZXgnLCAnQmlnTnVtYmVyJ107CnZhciBjcmVhdGVBc2VjaCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGFzZWNoX25hbWUsIGFzZWNoX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBjb25maWcgPSBfcmVmLmNvbmZpZywKICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleCwKICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyOwoKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjc2VjYW50IG9mIGEgdmFsdWUsCiAgICogZGVmaW5lZCBhcyBgYXNlY2goeCkgPSBhY29zaCgxL3gpID0gbG4oc3FydCgxL3heMiAtIDEpICsgMS94KWAuCiAgICoKICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5hc2VjaCh4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmFzZWNoKDAuNSkgICAgICAgLy8gcmV0dXJucyAxLjMxNjk1Nzg5NjkyNDgxNjYKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgYWNzY2gsIGFjb3RoCiAgICoKICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXQKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgYXJjc2VjYW50IG9mIHgKICAgKi8KICB2YXIgYXNlY2ggPSB0eXBlZChhc2VjaF9uYW1lLCB7CiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7CiAgICAgIGlmICh4IDw9IDEgJiYgeCA+PSAtMSB8fCBjb25maWcucHJlZGljdGFibGUpIHsKICAgICAgICB2YXIgeEludiA9IDEgLyB4OwoKICAgICAgICBpZiAoeEludiA+IDAgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7CiAgICAgICAgICByZXR1cm4gYXNlY2hOdW1iZXIoeCk7CiAgICAgICAgfQoKICAgICAgICB2YXIgcmV0ID0gTWF0aC5zcXJ0KHhJbnYgKiB4SW52IC0gMSk7CiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KE1hdGgubG9nKHJldCAtIHhJbnYpLCBNYXRoLlBJKTsKICAgICAgfQoKICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApLmFzZWNoKCk7CiAgICB9LAogICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7CiAgICAgIHJldHVybiB4LmFzZWNoKCk7CiAgICB9LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkgewogICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHgpLmFjb3NoKCk7CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkgewogICAgICByZXR1cm4gZGVlcE1hcCh4LCBhc2VjaCk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGFzZWNoOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW4uanMKCgp2YXIgYXNpbl9uYW1lID0gJ2FzaW4nOwp2YXIgYXNpbl9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdDb21wbGV4J107CnZhciBjcmVhdGVBc2luID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoYXNpbl9uYW1lLCBhc2luX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBjb25maWcgPSBfcmVmLmNvbmZpZywKICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDsKCiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIHNpbmUgb2YgYSB2YWx1ZS4KICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmFzaW4oeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5hc2luKDAuNSkgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuNTIzNTk4Nzc1NTk4Mjk4OQogICAqICAgIG1hdGguYXNpbihtYXRoLnNpbigxLjUpKSAvLyByZXR1cm5zIG51bWJlciB+MS41CiAgICoKICAgKiAgICBtYXRoLmFzaW4oMikgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMS4zMTY5NTc4OTY5MjQ4MTY2IGkKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgc2luLCBhdGFuLCBhY29zCiAgICoKICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgIEZ1bmN0aW9uIGlucHV0CiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBUaGUgYXJjIHNpbmUgb2YgeAogICAqLwogIHZhciBhc2luID0gdHlwZWQoYXNpbl9uYW1lLCB7CiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7CiAgICAgIGlmICh4ID49IC0xICYmIHggPD0gMSB8fCBjb25maWcucHJlZGljdGFibGUpIHsKICAgICAgICByZXR1cm4gTWF0aC5hc2luKHgpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hc2luKCk7CiAgICAgIH0KICAgIH0sCiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHsKICAgICAgcmV0dXJuIHguYXNpbigpOwogICAgfSwKICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHsKICAgICAgcmV0dXJuIHguYXNpbigpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBhc2luKDApID0gMAogICAgICByZXR1cm4gZGVlcE1hcCh4LCBhc2luLCB0cnVlKTsKICAgIH0KICB9KTsKICByZXR1cm4gYXNpbjsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2luaC5qcwoKCgp2YXIgYXNpbmhfbmFtZSA9ICdhc2luaCc7CnZhciBhc2luaF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107CnZhciBjcmVhdGVBc2luaCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGFzaW5oX25hbWUsIGFzaW5oX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkOwoKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjc2luZSBvZiBhIHZhbHVlLAogICAqIGRlZmluZWQgYXMgYGFzaW5oKHgpID0gbG4oeCArIHNxcnQoeF4yICsgMSkpYC4KICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmFzaW5oKHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguYXNpbmgoMC41KSAgICAgICAvLyByZXR1cm5zIDAuNDgxMjExODI1MDU5NjAzNDcKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgYWNvc2gsIGF0YW5oCiAgICoKICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXQKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgYXJjc2luZSBvZiB4CiAgICovCiAgdmFyIGFzaW5oID0gdHlwZWQoJ2FzaW5oJywgewogICAgbnVtYmVyOiBhc2luaE51bWJlciwKICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkgewogICAgICByZXR1cm4geC5hc2luaCgpOwogICAgfSwKICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHsKICAgICAgcmV0dXJuIHguYXNpbmgoKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgYXNpbmgoMCkgPSAwCiAgICAgIHJldHVybiBkZWVwTWFwKHgsIGFzaW5oLCB0cnVlKTsKICAgIH0KICB9KTsKICByZXR1cm4gYXNpbmg7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbi5qcwoKCnZhciBhdGFuX25hbWUgPSAnYXRhbic7CnZhciBhdGFuX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnXTsKdmFyIGNyZWF0ZUF0YW4gPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShhdGFuX25hbWUsIGF0YW5fZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7CgogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgaW52ZXJzZSB0YW5nZW50IG9mIGEgdmFsdWUuCiAgICoKICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5hdGFuKHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguYXRhbigwLjUpICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjQ2MzY0NzYwOTAwMDgwNjEKICAgKiAgICBtYXRoLmF0YW4obWF0aC50YW4oMS41KSkgLy8gcmV0dXJucyBudW1iZXIgMS41CiAgICoKICAgKiAgICBtYXRoLmF0YW4oMikgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMS4zMTY5NTc4OTY5MjQ4MTY2IGkKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgdGFuLCBhc2luLCBhY29zCiAgICoKICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgIEZ1bmN0aW9uIGlucHV0CiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBUaGUgYXJjIHRhbmdlbnQgb2YgeAogICAqLwogIHZhciBhdGFuID0gdHlwZWQoJ2F0YW4nLCB7CiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7CiAgICAgIHJldHVybiBNYXRoLmF0YW4oeCk7CiAgICB9LAogICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7CiAgICAgIHJldHVybiB4LmF0YW4oKTsKICAgIH0sCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiB4LmF0YW4oKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgYXRhbigwKSA9IDAKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgYXRhbiwgdHJ1ZSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGF0YW47Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbjIuanMKCgoKCgoKCgp2YXIgYXRhbjJfbmFtZSA9ICdhdGFuMic7CnZhciBhdGFuMl9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdCaWdOdW1iZXInLCAnRGVuc2VNYXRyaXgnXTsKdmFyIGNyZWF0ZUF0YW4yID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoYXRhbjJfbmFtZSwgYXRhbjJfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LAogICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsCiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLAogICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7CiAgdmFyIGFsZ29yaXRobTAyID0gY3JlYXRlQWxnb3JpdGhtMDIoewogICAgdHlwZWQ6IHR5cGVkLAogICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyCiAgfSk7CiAgdmFyIGFsZ29yaXRobTAzID0gY3JlYXRlQWxnb3JpdGhtMDMoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgdmFyIGFsZ29yaXRobTA5ID0gY3JlYXRlQWxnb3JpdGhtMDkoewogICAgdHlwZWQ6IHR5cGVkLAogICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyCiAgfSk7CiAgdmFyIGFsZ29yaXRobTExID0gY3JlYXRlQWxnb3JpdGhtMTEoewogICAgdHlwZWQ6IHR5cGVkLAogICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyCiAgfSk7CiAgdmFyIGFsZ29yaXRobTEyID0gY3JlYXRlQWxnb3JpdGhtMTIoewogICAgdHlwZWQ6IHR5cGVkLAogICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4CiAgfSk7CiAgdmFyIGFsZ29yaXRobTEzID0gY3JlYXRlQWxnb3JpdGhtMTMoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgdmFyIGFsZ29yaXRobTE0ID0gY3JlYXRlQWxnb3JpdGhtMTQoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIHRhbmdlbnQgZnVuY3Rpb24gd2l0aCB0d28gYXJndW1lbnRzLCB5L3guCiAgICogQnkgcHJvdmlkaW5nIHR3byBhcmd1bWVudHMsIHRoZSByaWdodCBxdWFkcmFudCBvZiB0aGUgY29tcHV0ZWQgYW5nbGUgY2FuIGJlCiAgICogZGV0ZXJtaW5lZC4KICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmF0YW4yKHksIHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguYXRhbjIoMiwgMikgLyBtYXRoLnBpICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuMjUKICAgKgogICAqICAgIGNvbnN0IGFuZ2xlID0gbWF0aC51bml0KDYwLCAnZGVnJykgLy8gcmV0dXJucyBVbml0IDYwIGRlZwogICAqICAgIGNvbnN0IHggPSBtYXRoLmNvcyhhbmdsZSkKICAgKiAgICBjb25zdCB5ID0gbWF0aC5zaW4oYW5nbGUpCiAgICoKICAgKiAgICBtYXRoLmF0YW4oMikgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMS4zMTY5NTc4OTY5MjQ4MTY2IGkKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgdGFuLCBhdGFuLCBzaW4sIGNvcwogICAqCiAgICogQHBhcmFtIHtudW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geSAgU2Vjb25kIGRpbWVuc2lvbgogICAqIEBwYXJhbSB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHggIEZpcnN0IGRpbWVuc2lvbgogICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSBGb3VyLXF1YWRyYW50IGludmVyc2UgdGFuZ2VudAogICAqLwoKICB2YXIgYXRhbjIgPSB0eXBlZChhdGFuMl9uYW1lLCB7CiAgICAnbnVtYmVyLCBudW1iZXInOiBNYXRoLmF0YW4yLAogICAgLy8gQ29tcGxleCBudW1iZXJzIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGEgcmVhc29uYWJsZSBpbXBsZW1lbnRhdGlvbiBvZgogICAgLy8gYXRhbjIoKS4gRXZlbiBNYXRsYWIgcmVtb3ZlZCB0aGUgc3VwcG9ydCwgYWZ0ZXIgdGhleSBvbmx5IGNhbGN1bGF0ZWQKICAgIC8vIHRoZSBhdGFuIG9ubHkgb24gYmFzZSBvZiB0aGUgcmVhbCBwYXJ0IG9mIHRoZSBudW1iZXJzIGFuZCBpZ25vcmVkIHRoZSBpbWFnaW5hcnkuCiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeSwgeCkgewogICAgICByZXR1cm4gQmlnTnVtYmVyLmF0YW4yKHksIHgpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0wOSh4LCB5LCBhdGFuMiwgZmFsc2UpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICAvLyBtaW5kIHRoZSBvcmRlciBvZiB5IGFuZCB4IQogICAgICByZXR1cm4gYWxnb3JpdGhtMDIoeSwgeCwgYXRhbjIsIHRydWUpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgYXRhbjIsIGZhbHNlKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBhdGFuMik7CiAgICB9LAogICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkgewogICAgICByZXR1cm4gYXRhbjIobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTsKICAgIH0sCiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGF0YW4yKG1hdHJpeCh4KSwgeSk7CiAgICB9LAogICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7CiAgICAgIHJldHVybiBhdGFuMih4LCBtYXRyaXgoeSkpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBhdGFuMiwgZmFsc2UpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gRGVuc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgYXRhbjIsIGZhbHNlKTsKICAgIH0sCiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICAvLyBtaW5kIHRoZSBvcmRlciBvZiB5IGFuZCB4CiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBhdGFuMiwgdHJ1ZSk7CiAgICB9LAogICAgJ251bWJlciB8IEJpZ051bWJlciwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIC8vIG1pbmQgdGhlIG9yZGVyIG9mIHkgYW5kIHgKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGF0YW4yLCB0cnVlKTsKICAgIH0sCiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgYXRhbjIsIGZhbHNlKS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ251bWJlciB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJBcnJheSh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIGF0YW4yLCB0cnVlKS52YWx1ZU9mKCk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGF0YW4yOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW5oLmpzCgoKCnZhciBhdGFuaF9uYW1lID0gJ2F0YW5oJzsKdmFyIGF0YW5oX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0NvbXBsZXgnXTsKdmFyIGNyZWF0ZUF0YW5oID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoYXRhbmhfbmFtZSwgYXRhbmhfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLAogICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4OwoKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjdGFuZ2VudCBvZiBhIHZhbHVlLAogICAqIGRlZmluZWQgYXMgYGF0YW5oKHgpID0gbG4oKDEgKyB4KS8oMSAtIHgpKSAvIDJgLgogICAqCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguYXRhbmgoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5hdGFuaCgwLjUpICAgICAgIC8vIHJldHVybnMgMC41NDkzMDYxNDQzMzQwNTQ5CiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGFjb3NoLCBhc2luaAogICAqCiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0CiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBIeXBlcmJvbGljIGFyY3RhbmdlbnQgb2YgeAogICAqLwogIHZhciBhdGFuaCA9IHR5cGVkKGF0YW5oX25hbWUsIHsKICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHsKICAgICAgaWYgKHggPD0gMSAmJiB4ID49IC0xIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkgewogICAgICAgIHJldHVybiBhdGFuaE51bWJlcih4KTsKICAgICAgfQoKICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApLmF0YW5oKCk7CiAgICB9LAogICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7CiAgICAgIHJldHVybiB4LmF0YW5oKCk7CiAgICB9LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkgewogICAgICByZXR1cm4geC5hdGFuaCgpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBhdGFuaCgwKSA9IDAKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgYXRhbmgsIHRydWUpOwogICAgfQogIH0pOwogIHJldHVybiBhdGFuaDsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3MuanMKCgp2YXIgY29zX25hbWUgPSAnY29zJzsKdmFyIGNvc19kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107CnZhciBjcmVhdGVDb3MgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShjb3NfbmFtZSwgY29zX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkOwoKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIGNvc2luZSBvZiBhIHZhbHVlLgogICAqCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguY29zKHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguY29zKDIpICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC0wLjQxNjE0NjgzNjU0NzE0MjIKICAgKiAgICBtYXRoLmNvcyhtYXRoLnBpIC8gNCkgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAgMC43MDcxMDY3ODExODY1NDc1CiAgICogICAgbWF0aC5jb3MobWF0aC51bml0KDE4MCwgJ2RlZycpKSAgLy8gcmV0dXJucyBudW1iZXIgLTEKICAgKiAgICBtYXRoLmNvcyhtYXRoLnVuaXQoNjAsICdkZWcnKSkgICAvLyByZXR1cm5zIG51bWJlciAgMC41CiAgICoKICAgKiAgICBjb25zdCBhbmdsZSA9IDAuMgogICAqICAgIG1hdGgucG93KG1hdGguc2luKGFuZ2xlKSwgMikgKyBtYXRoLnBvdyhtYXRoLmNvcyhhbmdsZSksIDIpIC8vIHJldHVybnMgbnVtYmVyIH4xCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGNvcywgdGFuCiAgICoKICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0CiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBDb3NpbmUgb2YgeAogICAqLwogIHZhciBjb3MgPSB0eXBlZChjb3NfbmFtZSwgewogICAgbnVtYmVyOiBNYXRoLmNvcywKICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkgewogICAgICByZXR1cm4geC5jb3MoKTsKICAgIH0sCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiB4LmNvcygpOwogICAgfSwKICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkgewogICAgICBpZiAoIXguaGFzQmFzZSh4LmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiBjb3MgaXMgbm8gYW5nbGUnKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGNvcyh4LnZhbHVlKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIHJldHVybiBkZWVwTWFwKHgsIGNvcyk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGNvczsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3NoLmpzCgoKCnZhciBjb3NoX25hbWUgPSAnY29zaCc7CnZhciBjb3NoX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnXTsKdmFyIGNyZWF0ZUNvc2ggPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShjb3NoX25hbWUsIGNvc2hfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7CgogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBjb3NpbmUgb2YgYSB2YWx1ZSwKICAgKiBkZWZpbmVkIGFzIGBjb3NoKHgpID0gMS8yICogKGV4cCh4KSArIGV4cCgteCkpYC4KICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmNvc2goeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5jb3NoKDAuNSkgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMS4xMjc2MjU5NjUyMDYzODA3CiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIHNpbmgsIHRhbmgKICAgKgogICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXQKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgY29zaW5lIG9mIHgKICAgKi8KICB2YXIgY29zaCA9IHR5cGVkKGNvc2hfbmFtZSwgewogICAgbnVtYmVyOiB1dGlsc19udW1iZXJbImUiIC8qIGNvc2ggKi9dLAogICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7CiAgICAgIHJldHVybiB4LmNvc2goKTsKICAgIH0sCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiB4LmNvc2goKTsKICAgIH0sCiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHsKICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuaXQgaW4gZnVuY3Rpb24gY29zaCBpcyBubyBhbmdsZScpOwogICAgICB9CgogICAgICByZXR1cm4gY29zaCh4LnZhbHVlKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIHJldHVybiBkZWVwTWFwKHgsIGNvc2gpOwogICAgfQogIH0pOwogIHJldHVybiBjb3NoOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdC5qcwoKCgp2YXIgY290X25hbWUgPSAnY290JzsKdmFyIGNvdF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0JpZ051bWJlciddOwp2YXIgY3JlYXRlQ290ID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoY290X25hbWUsIGNvdF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyOwoKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIGNvdGFuZ2VudCBvZiBhIHZhbHVlLiBEZWZpbmVkIGFzIGBjb3QoeCkgPSAxIC8gdGFuKHgpYC4KICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmNvdCh4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmNvdCgyKSAgICAgIC8vIHJldHVybnMgbnVtYmVyIC0wLjQ1NzY1NzU1NDM2MDI4NTc3CiAgICogICAgMSAvIG1hdGgudGFuKDIpICAvLyByZXR1cm5zIG51bWJlciAtMC40NTc2NTc1NTQzNjAyODU3NwogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICB0YW4sIHNlYywgY3NjCiAgICoKICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0CiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBDb3RhbmdlbnQgb2YgeAogICAqLwogIHZhciBjb3QgPSB0eXBlZChjb3RfbmFtZSwgewogICAgbnVtYmVyOiBjb3ROdW1iZXIsCiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHsKICAgICAgcmV0dXJuIHguY290KCk7CiAgICB9LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkgewogICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHgudGFuKCkpOwogICAgfSwKICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkgewogICAgICBpZiAoIXguaGFzQmFzZSh4LmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiBjb3QgaXMgbm8gYW5nbGUnKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGNvdCh4LnZhbHVlKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIHJldHVybiBkZWVwTWFwKHgsIGNvdCk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGNvdDsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3RoLmpzCgoKCnZhciBjb3RoX25hbWUgPSAnY290aCc7CnZhciBjb3RoX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107CnZhciBjcmVhdGVDb3RoID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoY290aF9uYW1lLCBjb3RoX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7CgogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBjb3RhbmdlbnQgb2YgYSB2YWx1ZSwKICAgKiBkZWZpbmVkIGFzIGBjb3RoKHgpID0gMSAvIHRhbmgoeClgLgogICAqCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguY290aCh4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICAvLyBjb3RoKHgpID0gMSAvIHRhbmgoeCkKICAgKiAgICBtYXRoLmNvdGgoMikgICAgICAgICAvLyByZXR1cm5zIDEuMDM3MzE0NzIwNzI3NTQ4MgogICAqICAgIDEgLyBtYXRoLnRhbmgoMikgICAgIC8vIHJldHVybnMgMS4wMzczMTQ3MjA3Mjc1NDgyCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIHNpbmgsIHRhbmgsIGNvc2gKICAgKgogICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXQKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgY290YW5nZW50IG9mIHgKICAgKi8KICB2YXIgY290aCA9IHR5cGVkKGNvdGhfbmFtZSwgewogICAgbnVtYmVyOiBjb3RoTnVtYmVyLAogICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7CiAgICAgIHJldHVybiB4LmNvdGgoKTsKICAgIH0sCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeC50YW5oKCkpOwogICAgfSwKICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkgewogICAgICBpZiAoIXguaGFzQmFzZSh4LmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiBjb3RoIGlzIG5vIGFuZ2xlJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiBjb3RoKHgudmFsdWUpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgY290aCk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGNvdGg7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY3NjLmpzCgoKCnZhciBjc2NfbmFtZSA9ICdjc2MnOwp2YXIgY3NjX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107CnZhciBjcmVhdGVDc2MgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShjc2NfbmFtZSwgY3NjX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7CgogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgY29zZWNhbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgY3NjKHgpID0gMS9zaW4oeClgLgogICAqCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguY3NjKHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguY3NjKDIpICAgICAgLy8gcmV0dXJucyBudW1iZXIgMS4wOTk3NTAxNzAyOTQ2MTcKICAgKiAgICAxIC8gbWF0aC5zaW4oMikgIC8vIHJldHVybnMgbnVtYmVyIDEuMDk5NzUwMTcwMjk0NjE3CiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIHNpbiwgc2VjLCBjb3QKICAgKgogICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXQKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IENvc2VjYW50IG9mIHgKICAgKi8KICB2YXIgY3NjID0gdHlwZWQoY3NjX25hbWUsIHsKICAgIG51bWJlcjogY3NjTnVtYmVyLAogICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7CiAgICAgIHJldHVybiB4LmNzYygpOwogICAgfSwKICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHsKICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4LnNpbigpKTsKICAgIH0sCiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHsKICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuaXQgaW4gZnVuY3Rpb24gY3NjIGlzIG5vIGFuZ2xlJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiBjc2MoeC52YWx1ZSk7CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkgewogICAgICByZXR1cm4gZGVlcE1hcCh4LCBjc2MpOwogICAgfQogIH0pOwogIHJldHVybiBjc2M7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY3NjaC5qcwoKCgp2YXIgY3NjaF9uYW1lID0gJ2NzY2gnOwp2YXIgY3NjaF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0JpZ051bWJlciddOwp2YXIgY3JlYXRlQ3NjaCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGNzY2hfbmFtZSwgY3NjaF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyOwoKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgY29zZWNhbnQgb2YgYSB2YWx1ZSwKICAgKiBkZWZpbmVkIGFzIGBjc2NoKHgpID0gMSAvIHNpbmgoeClgLgogICAqCiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguY3NjaCh4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICAvLyBjc2NoKHgpID0gMS8gc2luaCh4KQogICAqICAgIG1hdGguY3NjaCgwLjUpICAgICAgIC8vIHJldHVybnMgMS45MTkwMzQ3NTEzMzQ5NDM3CiAgICogICAgMSAvIG1hdGguc2luaCgwLjUpICAgLy8gcmV0dXJucyAxLjkxOTAzNDc1MTMzNDk0MzcKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgc2luaCwgc2VjaCwgY290aAogICAqCiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dAogICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gSHlwZXJib2xpYyBjb3NlY2FudCBvZiB4CiAgICovCiAgdmFyIGNzY2ggPSB0eXBlZChjc2NoX25hbWUsIHsKICAgIG51bWJlcjogY3NjaE51bWJlciwKICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkgewogICAgICByZXR1cm4geC5jc2NoKCk7CiAgICB9LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkgewogICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHguc2luaCgpKTsKICAgIH0sCiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHsKICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuaXQgaW4gZnVuY3Rpb24gY3NjaCBpcyBubyBhbmdsZScpOwogICAgICB9CgogICAgICByZXR1cm4gY3NjaCh4LnZhbHVlKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIHJldHVybiBkZWVwTWFwKHgsIGNzY2gpOwogICAgfQogIH0pOwogIHJldHVybiBjc2NoOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlYy5qcwoKCgp2YXIgc2VjX25hbWUgPSAnc2VjJzsKdmFyIHNlY19kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0JpZ051bWJlciddOwp2YXIgY3JlYXRlU2VjID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoc2VjX25hbWUsIHNlY19kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyOwoKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIHNlY2FudCBvZiBhIHZhbHVlLCBkZWZpbmVkIGFzIGBzZWMoeCkgPSAxL2Nvcyh4KWAuCiAgICoKICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5zZWMoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5zZWMoMikgICAgICAvLyByZXR1cm5zIG51bWJlciAtMi40MDI5OTc5NjE3MjIzODIyCiAgICogICAgMSAvIG1hdGguY29zKDIpICAvLyByZXR1cm5zIG51bWJlciAtMi40MDI5OTc5NjE3MjIzODIyCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGNvcywgY3NjLCBjb3QKICAgKgogICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXQKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFNlY2FudCBvZiB4CiAgICovCiAgdmFyIHNlYyA9IHR5cGVkKHNlY19uYW1lLCB7CiAgICBudW1iZXI6IHNlY051bWJlciwKICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkgewogICAgICByZXR1cm4geC5zZWMoKTsKICAgIH0sCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeC5jb3MoKSk7CiAgICB9LAogICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7CiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIHNlYyBpcyBubyBhbmdsZScpOwogICAgICB9CgogICAgICByZXR1cm4gc2VjKHgudmFsdWUpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgc2VjKTsKICAgIH0KICB9KTsKICByZXR1cm4gc2VjOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY2guanMKCgoKdmFyIHNlY2hfbmFtZSA9ICdzZWNoJzsKdmFyIHNlY2hfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTsKdmFyIGNyZWF0ZVNlY2ggPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShzZWNoX25hbWUsIHNlY2hfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjsKCiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIHNlY2FudCBvZiBhIHZhbHVlLAogICAqIGRlZmluZWQgYXMgYHNlY2goeCkgPSAxIC8gY29zaCh4KWAuCiAgICoKICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5zZWNoKHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIC8vIHNlY2goeCkgPSAxLyBjb3NoKHgpCiAgICogICAgbWF0aC5zZWNoKDAuNSkgICAgICAgLy8gcmV0dXJucyAwLjg4NjgxODg4Mzk3MDA3NAogICAqICAgIDEgLyBtYXRoLmNvc2goMC41KSAgIC8vIHJldHVybnMgMC44ODY4MTg4ODM5NzAwNzQKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgY29zaCwgY3NjaCwgY290aAogICAqCiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dAogICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gSHlwZXJib2xpYyBzZWNhbnQgb2YgeAogICAqLwogIHZhciBzZWNoID0gdHlwZWQoc2VjaF9uYW1lLCB7CiAgICBudW1iZXI6IHNlY2hOdW1iZXIsCiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHsKICAgICAgcmV0dXJuIHguc2VjaCgpOwogICAgfSwKICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHsKICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4LmNvc2goKSk7CiAgICB9LAogICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7CiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIHNlY2ggaXMgbm8gYW5nbGUnKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHNlY2goeC52YWx1ZSk7CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkgewogICAgICByZXR1cm4gZGVlcE1hcCh4LCBzZWNoKTsKICAgIH0KICB9KTsKICByZXR1cm4gc2VjaDsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9zaW4uanMKCgp2YXIgc2luX25hbWUgPSAnc2luJzsKdmFyIHNpbl9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107CnZhciBjcmVhdGVTaW4gPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShzaW5fbmFtZSwgc2luX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkOwoKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIHNpbmUgb2YgYSB2YWx1ZS4KICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLnNpbih4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLnNpbigyKSAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjkwOTI5NzQyNjgyNTY4MTMKICAgKiAgICBtYXRoLnNpbihtYXRoLnBpIC8gNCkgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjcwNzEwNjc4MTE4NjU0NzUKICAgKiAgICBtYXRoLnNpbihtYXRoLnVuaXQoOTAsICdkZWcnKSkgICAvLyByZXR1cm5zIG51bWJlciAxCiAgICogICAgbWF0aC5zaW4obWF0aC51bml0KDMwLCAnZGVnJykpICAgLy8gcmV0dXJucyBudW1iZXIgMC41CiAgICoKICAgKiAgICBjb25zdCBhbmdsZSA9IDAuMgogICAqICAgIG1hdGgucG93KG1hdGguc2luKGFuZ2xlKSwgMikgKyBtYXRoLnBvdyhtYXRoLmNvcyhhbmdsZSksIDIpIC8vIHJldHVybnMgbnVtYmVyIH4xCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGNvcywgdGFuCiAgICoKICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0CiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBTaW5lIG9mIHgKICAgKi8KICB2YXIgc2luID0gdHlwZWQoc2luX25hbWUsIHsKICAgIG51bWJlcjogTWF0aC5zaW4sCiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHsKICAgICAgcmV0dXJuIHguc2luKCk7CiAgICB9LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkgewogICAgICByZXR1cm4geC5zaW4oKTsKICAgIH0sCiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHsKICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuaXQgaW4gZnVuY3Rpb24gc2luIGlzIG5vIGFuZ2xlJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiBzaW4oeC52YWx1ZSk7CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkgewogICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIHNpbigwKSA9IDAKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgc2luLCB0cnVlKTsKICAgIH0KICB9KTsKICByZXR1cm4gc2luOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmguanMKCgoKdmFyIHNpbmhfbmFtZSA9ICdzaW5oJzsKdmFyIHNpbmhfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddOwp2YXIgY3JlYXRlU2luaCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHNpbmhfbmFtZSwgc2luaF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDsKCiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgYSB2YWx1ZSwKICAgKiBkZWZpbmVkIGFzIGBzaW5oKHgpID0gMS8yICogKGV4cCh4KSAtIGV4cCgteCkpYC4KICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLnNpbmgoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5zaW5oKDAuNSkgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC41MjEwOTUzMDU0OTM3NDc0CiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGNvc2gsIHRhbmgKICAgKgogICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXQKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgc2luZSBvZiB4CiAgICovCiAgdmFyIHNpbmggPSB0eXBlZChzaW5oX25hbWUsIHsKICAgIG51bWJlcjogc2luaE51bWJlciwKICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkgewogICAgICByZXR1cm4geC5zaW5oKCk7CiAgICB9LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkgewogICAgICByZXR1cm4geC5zaW5oKCk7CiAgICB9LAogICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7CiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIHNpbmggaXMgbm8gYW5nbGUnKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHNpbmgoeC52YWx1ZSk7CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkgewogICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIHNpbmgoMCkgPSAwCiAgICAgIHJldHVybiBkZWVwTWFwKHgsIHNpbmgsIHRydWUpOwogICAgfQogIH0pOwogIHJldHVybiBzaW5oOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3Rhbi5qcwoKCnZhciB0YW5fbmFtZSA9ICd0YW4nOwp2YXIgdGFuX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnXTsKdmFyIGNyZWF0ZVRhbiA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHRhbl9uYW1lLCB0YW5fZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7CgogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgdGFuZ2VudCBvZiBhIHZhbHVlLiBgdGFuKHgpYCBpcyBlcXVhbCB0byBgc2luKHgpIC8gY29zKHgpYC4KICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLnRhbih4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLnRhbigwLjUpICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjU0NjMwMjQ4OTg0Mzc5MDUKICAgKiAgICBtYXRoLnNpbigwLjUpIC8gbWF0aC5jb3MoMC41KSAgICAvLyByZXR1cm5zIG51bWJlciAwLjU0NjMwMjQ4OTg0Mzc5MDUKICAgKiAgICBtYXRoLnRhbihtYXRoLnBpIC8gNCkgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAxCiAgICogICAgbWF0aC50YW4obWF0aC51bml0KDQ1LCAnZGVnJykpICAgLy8gcmV0dXJucyBudW1iZXIgMQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBhdGFuLCBzaW4sIGNvcwogICAqCiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dAogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gVGFuZ2VudCBvZiB4CiAgICovCiAgdmFyIHRhbiA9IHR5cGVkKHRhbl9uYW1lLCB7CiAgICBudW1iZXI6IE1hdGgudGFuLAogICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7CiAgICAgIHJldHVybiB4LnRhbigpOwogICAgfSwKICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHsKICAgICAgcmV0dXJuIHgudGFuKCk7CiAgICB9LAogICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7CiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIHRhbiBpcyBubyBhbmdsZScpOwogICAgICB9CgogICAgICByZXR1cm4gdGFuKHgudmFsdWUpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSB0YW4oMCkgPSAwCiAgICAgIHJldHVybiBkZWVwTWFwKHgsIHRhbiwgdHJ1ZSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIHRhbjsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS90YW5oLmpzCgoKCnZhciB0YW5oX25hbWUgPSAndGFuaCc7CnZhciB0YW5oX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnXTsKdmFyIGNyZWF0ZVRhbmggPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKSh0YW5oX25hbWUsIHRhbmhfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7CgogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIGEgdmFsdWUsCiAgICogZGVmaW5lZCBhcyBgdGFuaCh4KSA9IChleHAoMiAqIHgpIC0gMSkgLyAoZXhwKDIgKiB4KSArIDEpYC4KICAgKgogICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLnRhbmgoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgLy8gdGFuaCh4KSA9IHNpbmgoeCkgLyBjb3NoKHgpID0gMSAvIGNvdGgoeCkKICAgKiAgICBtYXRoLnRhbmgoMC41KSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDAuNDYyMTE3MTU3MjYwMDA5NzQKICAgKiAgICBtYXRoLnNpbmgoMC41KSAvIG1hdGguY29zaCgwLjUpICAvLyByZXR1cm5zIDAuNDYyMTE3MTU3MjYwMDA5NzQKICAgKiAgICAxIC8gbWF0aC5jb3RoKDAuNSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIDAuNDYyMTE3MTU3MjYwMDA5NzQKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgc2luaCwgY29zaCwgY290aAogICAqCiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dAogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gSHlwZXJib2xpYyB0YW5nZW50IG9mIHgKICAgKi8KICB2YXIgdGFuaCA9IHR5cGVkKCd0YW5oJywgewogICAgbnVtYmVyOiB1dGlsc19udW1iZXJbInAiIC8qIHRhbmggKi9dLAogICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7CiAgICAgIHJldHVybiB4LnRhbmgoKTsKICAgIH0sCiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7CiAgICAgIHJldHVybiB4LnRhbmgoKTsKICAgIH0sCiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHsKICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuaXQgaW4gZnVuY3Rpb24gdGFuaCBpcyBubyBhbmdsZScpOwogICAgICB9CgogICAgICByZXR1cm4gdGFuaCh4LnZhbHVlKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7CiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgdGFuaCgwKSA9IDAKICAgICAgcmV0dXJuIGRlZXBNYXAoeCwgdGFuaCwgdHJ1ZSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIHRhbmg7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9zZXQvc2V0Q2FydGVzaWFuLmpzCgoKdmFyIHNldENhcnRlc2lhbl9uYW1lID0gJ3NldENhcnRlc2lhbic7CnZhciBzZXRDYXJ0ZXNpYW5fZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdzaXplJywgJ3N1YnNldCcsICdjb21wYXJlTmF0dXJhbCcsICdJbmRleCcsICdEZW5zZU1hdHJpeCddOwp2YXIgY3JlYXRlU2V0Q2FydGVzaWFuID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoc2V0Q2FydGVzaWFuX25hbWUsIHNldENhcnRlc2lhbl9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSwKICAgICAgc3Vic2V0ID0gX3JlZi5zdWJzZXQsCiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCwKICAgICAgSW5kZXggPSBfcmVmLkluZGV4LAogICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7CgogIC8qKgogICAqIENyZWF0ZSB0aGUgY2FydGVzaWFuIHByb2R1Y3Qgb2YgdHdvIChtdWx0aSlzZXRzLgogICAqIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLnNldENhcnRlc2lhbihzZXQxLCBzZXQyKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLnNldENhcnRlc2lhbihbMSwgMl0sIFszLCA0XSkgICAgICAgIC8vIHJldHVybnMgW1sxLCAzXSwgWzEsIDRdLCBbMiwgM10sIFsyLCA0XV0KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgc2V0VW5pb24sIHNldEludGVyc2VjdCwgc2V0RGlmZmVyZW5jZSwgc2V0UG93ZXJzZXQKICAgKgogICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGExICBBIChtdWx0aSlzZXQKICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMiAgQSAobXVsdGkpc2V0CiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgIFRoZSBjYXJ0ZXNpYW4gcHJvZHVjdCBvZiB0d28gKG11bHRpKXNldHMKICAgKi8KICByZXR1cm4gdHlwZWQoc2V0Q2FydGVzaWFuX25hbWUsIHsKICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeEFycmF5TWF0cml4KGExLCBhMikgewogICAgICB2YXIgcmVzdWx0ID0gW107CgogICAgICBpZiAoc3Vic2V0KHNpemUoYTEpLCBuZXcgSW5kZXgoMCkpICE9PSAwICYmIHN1YnNldChzaXplKGEyKSwgbmV3IEluZGV4KDApKSAhPT0gMCkgewogICAgICAgIC8vIGlmIGFueSBvZiB0aGVtIGlzIGVtcHR5LCByZXR1cm4gZW1wdHkKICAgICAgICB2YXIgYjEgPSBPYmplY3QodXRpbHNfYXJyYXlbImUiIC8qIGZsYXR0ZW4gKi9dKShBcnJheS5pc0FycmF5KGExKSA/IGExIDogYTEudG9BcnJheSgpKS5zb3J0KGNvbXBhcmVOYXR1cmFsKTsKICAgICAgICB2YXIgYjIgPSBPYmplY3QodXRpbHNfYXJyYXlbImUiIC8qIGZsYXR0ZW4gKi9dKShBcnJheS5pc0FycmF5KGEyKSA/IGEyIDogYTIudG9BcnJheSgpKS5zb3J0KGNvbXBhcmVOYXR1cmFsKTsKICAgICAgICByZXN1bHQgPSBbXTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiMS5sZW5ndGg7IGkrKykgewogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBiMi5sZW5ndGg7IGorKykgewogICAgICAgICAgICByZXN1bHQucHVzaChbYjFbaV0sIGIyW2pdXSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IC8vIHJldHVybiBhbiBhcnJheSwgaWYgYm90aCBpbnB1dHMgd2VyZSBhcnJheXMKCgogICAgICBpZiAoQXJyYXkuaXNBcnJheShhMSkgJiYgQXJyYXkuaXNBcnJheShhMikpIHsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9IC8vIHJldHVybiBhIG1hdHJpeCBvdGhlcndpc2UKCgogICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHJlc3VsdCk7CiAgICB9CiAgfSk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9zZXQvc2V0RGlmZmVyZW5jZS5qcwoKCnZhciBzZXREaWZmZXJlbmNlX25hbWUgPSAnc2V0RGlmZmVyZW5jZSc7CnZhciBzZXREaWZmZXJlbmNlX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdzdWJzZXQnLCAnY29tcGFyZU5hdHVyYWwnLCAnSW5kZXgnLCAnRGVuc2VNYXRyaXgnXTsKdmFyIGNyZWF0ZVNldERpZmZlcmVuY2UgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShzZXREaWZmZXJlbmNlX25hbWUsIHNldERpZmZlcmVuY2VfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIHNpemUgPSBfcmVmLnNpemUsCiAgICAgIHN1YnNldCA9IF9yZWYuc3Vic2V0LAogICAgICBjb21wYXJlTmF0dXJhbCA9IF9yZWYuY29tcGFyZU5hdHVyYWwsCiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCwKICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4OwoKICAvKioKICAgKiBDcmVhdGUgdGhlIGRpZmZlcmVuY2Ugb2YgdHdvIChtdWx0aSlzZXRzOiBldmVyeSBlbGVtZW50IG9mIHNldDEsIHRoYXQgaXMgbm90IHRoZSBlbGVtZW50IG9mIHNldDIuCiAgICogTXVsdGktZGltZW5zaW9uIGFycmF5cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBzaW5nbGUtZGltZW5zaW9uIGFycmF5cyBiZWZvcmUgdGhlIG9wZXJhdGlvbi4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguc2V0RGlmZmVyZW5jZShzZXQxLCBzZXQyKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLnNldERpZmZlcmVuY2UoWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMl0KICAgKiAgICBtYXRoLnNldERpZmZlcmVuY2UoW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSkgICAgLy8gcmV0dXJucyBbMSwgMl0KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgc2V0VW5pb24sIHNldEludGVyc2VjdCwgc2V0U3ltRGlmZmVyZW5jZQogICAqCiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTEgIEEgKG11bHRpKXNldAogICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEyICBBIChtdWx0aSlzZXQKICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgVGhlIGRpZmZlcmVuY2Ugb2YgdHdvIChtdWx0aSlzZXRzCiAgICovCiAgcmV0dXJuIHR5cGVkKHNldERpZmZlcmVuY2VfbmFtZSwgewogICAgJ0FycmF5IHwgTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4QXJyYXlNYXRyaXgoYTEsIGEyKSB7CiAgICAgIHZhciByZXN1bHQ7CgogICAgICBpZiAoc3Vic2V0KHNpemUoYTEpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7CiAgICAgICAgLy8gZW1wdHktYW55dGhpbmc9ZW1wdHkKICAgICAgICByZXN1bHQgPSBbXTsKICAgICAgfSBlbHNlIGlmIChzdWJzZXQoc2l6ZShhMiksIG5ldyBJbmRleCgwKSkgPT09IDApIHsKICAgICAgICAvLyBhbnl0aGluZy1lbXB0eT1hbnl0aGluZwogICAgICAgIHJldHVybiBPYmplY3QodXRpbHNfYXJyYXlbImUiIC8qIGZsYXR0ZW4gKi9dKShhMS50b0FycmF5KCkpOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBiMSA9IE9iamVjdCh1dGlsc19hcnJheVsiaSIgLyogaWRlbnRpZnkgKi9dKShPYmplY3QodXRpbHNfYXJyYXlbImUiIC8qIGZsYXR0ZW4gKi9dKShBcnJheS5pc0FycmF5KGExKSA/IGExIDogYTEudG9BcnJheSgpKS5zb3J0KGNvbXBhcmVOYXR1cmFsKSk7CiAgICAgICAgdmFyIGIyID0gT2JqZWN0KHV0aWxzX2FycmF5WyJpIiAvKiBpZGVudGlmeSAqL10pKE9iamVjdCh1dGlsc19hcnJheVsiZSIgLyogZmxhdHRlbiAqL10pKEFycmF5LmlzQXJyYXkoYTIpID8gYTIgOiBhMi50b0FycmF5KCkpLnNvcnQoY29tcGFyZU5hdHVyYWwpKTsKICAgICAgICByZXN1bHQgPSBbXTsKICAgICAgICB2YXIgaW5iMjsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiMS5sZW5ndGg7IGkrKykgewogICAgICAgICAgaW5iMiA9IGZhbHNlOwoKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYjIubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgaWYgKGNvbXBhcmVOYXR1cmFsKGIxW2ldLnZhbHVlLCBiMltqXS52YWx1ZSkgPT09IDAgJiYgYjFbaV0uaWRlbnRpZmllciA9PT0gYjJbal0uaWRlbnRpZmllcikgewogICAgICAgICAgICAgIC8vIHRoZSBpZGVudGlmaWVyIGlzIGFsd2F5cyBhIGRlY2ltYWwgaW50CiAgICAgICAgICAgICAgaW5iMiA9IHRydWU7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoIWluYjIpIHsKICAgICAgICAgICAgcmVzdWx0LnB1c2goYjFbaV0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSAvLyByZXR1cm4gYW4gYXJyYXksIGlmIGJvdGggaW5wdXRzIHdlcmUgYXJyYXlzCgoKICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYTEpICYmIEFycmF5LmlzQXJyYXkoYTIpKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdCh1dGlsc19hcnJheVsiZyIgLyogZ2VuZXJhbGl6ZSAqL10pKHJlc3VsdCk7CiAgICAgIH0gLy8gcmV0dXJuIGEgbWF0cml4IG90aGVyd2lzZQoKCiAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoT2JqZWN0KHV0aWxzX2FycmF5WyJnIiAvKiBnZW5lcmFsaXplICovXSkocmVzdWx0KSk7CiAgICB9CiAgfSk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9zZXQvc2V0RGlzdGluY3QuanMKCgp2YXIgc2V0RGlzdGluY3RfbmFtZSA9ICdzZXREaXN0aW5jdCc7CnZhciBzZXREaXN0aW5jdF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NpemUnLCAnc3Vic2V0JywgJ2NvbXBhcmVOYXR1cmFsJywgJ0luZGV4JywgJ0RlbnNlTWF0cml4J107CnZhciBjcmVhdGVTZXREaXN0aW5jdCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHNldERpc3RpbmN0X25hbWUsIHNldERpc3RpbmN0X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBzaXplID0gX3JlZi5zaXplLAogICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCwKICAgICAgY29tcGFyZU5hdHVyYWwgPSBfcmVmLmNvbXBhcmVOYXR1cmFsLAogICAgICBJbmRleCA9IF9yZWYuSW5kZXgsCiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDsKCiAgLyoqCiAgICogQ29sbGVjdCB0aGUgZGlzdGluY3QgZWxlbWVudHMgb2YgYSBtdWx0aXNldC4KICAgKiBBIG11bHRpLWRpbWVuc2lvbiBhcnJheSB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHNpbmdsZS1kaW1lbnNpb24gYXJyYXkgYmVmb3JlIHRoZSBvcGVyYXRpb24uCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLnNldERpc3RpbmN0KHNldCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5zZXREaXN0aW5jdChbMSwgMSwgMSwgMiwgMiwgM10pICAgICAgICAvLyByZXR1cm5zIFsxLCAyLCAzXQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBzZXRNdWx0aXBsaWNpdHkKICAgKgogICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEgIEEgbXVsdGlzZXQKICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgQSBzZXQgY29udGFpbmluZyB0aGUgZGlzdGluYyBlbGVtZW50cyBvZiB0aGUgbXVsdGlzZXQKICAgKi8KICByZXR1cm4gdHlwZWQoc2V0RGlzdGluY3RfbmFtZSwgewogICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoYSkgewogICAgICB2YXIgcmVzdWx0OwoKICAgICAgaWYgKHN1YnNldChzaXplKGEpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7CiAgICAgICAgLy8gaWYgZW1wdHksIHJldHVybiBlbXB0eQogICAgICAgIHJlc3VsdCA9IFtdOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBiID0gT2JqZWN0KHV0aWxzX2FycmF5WyJlIiAvKiBmbGF0dGVuICovXSkoQXJyYXkuaXNBcnJheShhKSA/IGEgOiBhLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCk7CiAgICAgICAgcmVzdWx0ID0gW107CiAgICAgICAgcmVzdWx0LnB1c2goYlswXSk7CgogICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYi5sZW5ndGg7IGkrKykgewogICAgICAgICAgaWYgKGNvbXBhcmVOYXR1cmFsKGJbaV0sIGJbaSAtIDFdKSAhPT0gMCkgewogICAgICAgICAgICByZXN1bHQucHVzaChiW2ldKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gLy8gcmV0dXJuIGFuIGFycmF5LCBpZiB0aGUgaW5wdXQgd2FzIGFuIGFycmF5CgoKICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9IC8vIHJldHVybiBhIG1hdHJpeCBvdGhlcndpc2UKCgogICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHJlc3VsdCk7CiAgICB9CiAgfSk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9zZXQvc2V0SW50ZXJzZWN0LmpzCgoKdmFyIHNldEludGVyc2VjdF9uYW1lID0gJ3NldEludGVyc2VjdCc7CnZhciBzZXRJbnRlcnNlY3RfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdzaXplJywgJ3N1YnNldCcsICdjb21wYXJlTmF0dXJhbCcsICdJbmRleCcsICdEZW5zZU1hdHJpeCddOwp2YXIgY3JlYXRlU2V0SW50ZXJzZWN0ID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoc2V0SW50ZXJzZWN0X25hbWUsIHNldEludGVyc2VjdF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSwKICAgICAgc3Vic2V0ID0gX3JlZi5zdWJzZXQsCiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCwKICAgICAgSW5kZXggPSBfcmVmLkluZGV4LAogICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7CgogIC8qKgogICAqIENyZWF0ZSB0aGUgaW50ZXJzZWN0aW9uIG9mIHR3byAobXVsdGkpc2V0cy4KICAgKiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5zZXRJbnRlcnNlY3Qoc2V0MSwgc2V0MikKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5zZXRJbnRlcnNlY3QoWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pICAgICAgICAgICAgLy8gcmV0dXJucyBbMywgNF0KICAgKiAgICBtYXRoLnNldEludGVyc2VjdChbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSAgICAvLyByZXR1cm5zIFszLCA0XQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBzZXRVbmlvbiwgc2V0RGlmZmVyZW5jZQogICAqCiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTEgIEEgKG11bHRpKXNldAogICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEyICBBIChtdWx0aSlzZXQKICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgVGhlIGludGVyc2VjdGlvbiBvZiB0d28gKG11bHRpKXNldHMKICAgKi8KICByZXR1cm4gdHlwZWQoc2V0SW50ZXJzZWN0X25hbWUsIHsKICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeEFycmF5TWF0cml4KGExLCBhMikgewogICAgICB2YXIgcmVzdWx0OwoKICAgICAgaWYgKHN1YnNldChzaXplKGExKSwgbmV3IEluZGV4KDApKSA9PT0gMCB8fCBzdWJzZXQoc2l6ZShhMiksIG5ldyBJbmRleCgwKSkgPT09IDApIHsKICAgICAgICAvLyBvZiBhbnkgb2YgdGhlbSBpcyBlbXB0eSwgcmV0dXJuIGVtcHR5CiAgICAgICAgcmVzdWx0ID0gW107CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIGIxID0gT2JqZWN0KHV0aWxzX2FycmF5WyJpIiAvKiBpZGVudGlmeSAqL10pKE9iamVjdCh1dGlsc19hcnJheVsiZSIgLyogZmxhdHRlbiAqL10pKEFycmF5LmlzQXJyYXkoYTEpID8gYTEgOiBhMS50b0FycmF5KCkpLnNvcnQoY29tcGFyZU5hdHVyYWwpKTsKICAgICAgICB2YXIgYjIgPSBPYmplY3QodXRpbHNfYXJyYXlbImkiIC8qIGlkZW50aWZ5ICovXSkoT2JqZWN0KHV0aWxzX2FycmF5WyJlIiAvKiBmbGF0dGVuICovXSkoQXJyYXkuaXNBcnJheShhMikgPyBhMiA6IGEyLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCkpOwogICAgICAgIHJlc3VsdCA9IFtdOwoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIxLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGIyLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgIGlmIChjb21wYXJlTmF0dXJhbChiMVtpXS52YWx1ZSwgYjJbal0udmFsdWUpID09PSAwICYmIGIxW2ldLmlkZW50aWZpZXIgPT09IGIyW2pdLmlkZW50aWZpZXIpIHsKICAgICAgICAgICAgICAvLyB0aGUgaWRlbnRpZmllciBpcyBhbHdheXMgYSBkZWNpbWFsIGludAogICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGIxW2ldKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSAvLyByZXR1cm4gYW4gYXJyYXksIGlmIGJvdGggaW5wdXRzIHdlcmUgYXJyYXlzCgoKICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYTEpICYmIEFycmF5LmlzQXJyYXkoYTIpKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdCh1dGlsc19hcnJheVsiZyIgLyogZ2VuZXJhbGl6ZSAqL10pKHJlc3VsdCk7CiAgICAgIH0gLy8gcmV0dXJuIGEgbWF0cml4IG90aGVyd2lzZQoKCiAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoT2JqZWN0KHV0aWxzX2FycmF5WyJnIiAvKiBnZW5lcmFsaXplICovXSkocmVzdWx0KSk7CiAgICB9CiAgfSk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9zZXQvc2V0SXNTdWJzZXQuanMKCgp2YXIgc2V0SXNTdWJzZXRfbmFtZSA9ICdzZXRJc1N1YnNldCc7CnZhciBzZXRJc1N1YnNldF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NpemUnLCAnc3Vic2V0JywgJ2NvbXBhcmVOYXR1cmFsJywgJ0luZGV4J107CnZhciBjcmVhdGVTZXRJc1N1YnNldCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHNldElzU3Vic2V0X25hbWUsIHNldElzU3Vic2V0X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBzaXplID0gX3JlZi5zaXplLAogICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCwKICAgICAgY29tcGFyZU5hdHVyYWwgPSBfcmVmLmNvbXBhcmVOYXR1cmFsLAogICAgICBJbmRleCA9IF9yZWYuSW5kZXg7CgogIC8qKgogICAqIENoZWNrIHdoZXRoZXIgYSAobXVsdGkpc2V0IGlzIGEgc3Vic2V0IG9mIGFub3RoZXIgKG11bHRpKXNldC4gKEV2ZXJ5IGVsZW1lbnQgb2Ygc2V0MSBpcyB0aGUgZWxlbWVudCBvZiBzZXQyLikKICAgKiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5zZXRJc1N1YnNldChzZXQxLCBzZXQyKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLnNldElzU3Vic2V0KFsxLCAyXSwgWzMsIDQsIDUsIDZdKSAgICAgICAgLy8gcmV0dXJucyBmYWxzZQogICAqICAgIG1hdGguc2V0SXNTdWJzZXQoWzMsIDRdLCBbMywgNCwgNSwgNl0pICAgICAgICAvLyByZXR1cm5zIHRydWUKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgc2V0VW5pb24sIHNldEludGVyc2VjdCwgc2V0RGlmZmVyZW5jZQogICAqCiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTEgIEEgKG11bHRpKXNldAogICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEyICBBIChtdWx0aSlzZXQKICAgKiBAcmV0dXJuIHtib29sZWFufSAgICAgICAgICAgIHRydWUgfCBmYWxzZQogICAqLwogIHJldHVybiB0eXBlZChzZXRJc1N1YnNldF9uYW1lLCB7CiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhBcnJheU1hdHJpeChhMSwgYTIpIHsKICAgICAgaWYgKHN1YnNldChzaXplKGExKSwgbmV3IEluZGV4KDApKSA9PT0gMCkgewogICAgICAgIC8vIGVtcHR5IGlzIGEgc3Vic2V0IG9mIGFueXRoaW5nCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0gZWxzZSBpZiAoc3Vic2V0KHNpemUoYTIpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7CiAgICAgICAgLy8gYW55dGhpbmcgaXMgbm90IGEgc3Vic2V0IG9mIGVtcHR5CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICB2YXIgYjEgPSBPYmplY3QodXRpbHNfYXJyYXlbImkiIC8qIGlkZW50aWZ5ICovXSkoT2JqZWN0KHV0aWxzX2FycmF5WyJlIiAvKiBmbGF0dGVuICovXSkoQXJyYXkuaXNBcnJheShhMSkgPyBhMSA6IGExLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCkpOwogICAgICB2YXIgYjIgPSBPYmplY3QodXRpbHNfYXJyYXlbImkiIC8qIGlkZW50aWZ5ICovXSkoT2JqZWN0KHV0aWxzX2FycmF5WyJlIiAvKiBmbGF0dGVuICovXSkoQXJyYXkuaXNBcnJheShhMikgPyBhMiA6IGEyLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCkpOwogICAgICB2YXIgaW5iMjsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYjEubGVuZ3RoOyBpKyspIHsKICAgICAgICBpbmIyID0gZmFsc2U7CgogICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYjIubGVuZ3RoOyBqKyspIHsKICAgICAgICAgIGlmIChjb21wYXJlTmF0dXJhbChiMVtpXS52YWx1ZSwgYjJbal0udmFsdWUpID09PSAwICYmIGIxW2ldLmlkZW50aWZpZXIgPT09IGIyW2pdLmlkZW50aWZpZXIpIHsKICAgICAgICAgICAgLy8gdGhlIGlkZW50aWZpZXIgaXMgYWx3YXlzIGEgZGVjaW1hbCBpbnQKICAgICAgICAgICAgaW5iMiA9IHRydWU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGluYjIgPT09IGZhbHNlKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9KTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3NldC9zZXRNdWx0aXBsaWNpdHkuanMKCgp2YXIgc2V0TXVsdGlwbGljaXR5X25hbWUgPSAnc2V0TXVsdGlwbGljaXR5JzsKdmFyIHNldE11bHRpcGxpY2l0eV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NpemUnLCAnc3Vic2V0JywgJ2NvbXBhcmVOYXR1cmFsJywgJ0luZGV4J107CnZhciBjcmVhdGVTZXRNdWx0aXBsaWNpdHkgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShzZXRNdWx0aXBsaWNpdHlfbmFtZSwgc2V0TXVsdGlwbGljaXR5X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBzaXplID0gX3JlZi5zaXplLAogICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCwKICAgICAgY29tcGFyZU5hdHVyYWwgPSBfcmVmLmNvbXBhcmVOYXR1cmFsLAogICAgICBJbmRleCA9IF9yZWYuSW5kZXg7CgogIC8qKgogICAqIENvdW50IHRoZSBtdWx0aXBsaWNpdHkgb2YgYW4gZWxlbWVudCBpbiBhIG11bHRpc2V0LgogICAqIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguc2V0TXVsdGlwbGljaXR5KGVsZW1lbnQsIHNldCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5zZXRNdWx0aXBsaWNpdHkoMSwgWzEsIDIsIDIsIDRdKSAgICAvLyByZXR1cm5zIDEKICAgKiAgICBtYXRoLnNldE11bHRpcGxpY2l0eSgyLCBbMSwgMiwgMiwgNF0pICAgIC8vIHJldHVybnMgMgogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBzZXREaXN0aW5jdCwgc2V0U2l6ZQogICAqCiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXh9IGUgIEFuIGVsZW1lbnQgaW4gdGhlIG11bHRpc2V0CiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgIGEgIEEgbXVsdGlzZXQKICAgKiBAcmV0dXJuIHtudW1iZXJ9ICAgICAgICAgICAgVGhlIG51bWJlciBvZiBob3cgbWFueSB0aW1lcyB0aGUgbXVsdGlzZXQgY29udGFpbnMgdGhlIGVsZW1lbnQKICAgKi8KICByZXR1cm4gdHlwZWQoc2V0TXVsdGlwbGljaXR5X25hbWUsIHsKICAgICdudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyRnJhY3Rpb25Db21wbGV4QXJyYXlNYXRyaXgoZSwgYSkgewogICAgICBpZiAoc3Vic2V0KHNpemUoYSksIG5ldyBJbmRleCgwKSkgPT09IDApIHsKICAgICAgICAvLyBpZiBlbXB0eSwgcmV0dXJuIDAKICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICAgICAgdmFyIGIgPSBPYmplY3QodXRpbHNfYXJyYXlbImUiIC8qIGZsYXR0ZW4gKi9dKShBcnJheS5pc0FycmF5KGEpID8gYSA6IGEudG9BcnJheSgpKTsKICAgICAgdmFyIGNvdW50ID0gMDsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYi5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChjb21wYXJlTmF0dXJhbChiW2ldLCBlKSA9PT0gMCkgewogICAgICAgICAgY291bnQrKzsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiBjb3VudDsKICAgIH0KICB9KTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3NldC9zZXRQb3dlcnNldC5qcwoKCnZhciBzZXRQb3dlcnNldF9uYW1lID0gJ3NldFBvd2Vyc2V0JzsKdmFyIHNldFBvd2Vyc2V0X2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdzdWJzZXQnLCAnY29tcGFyZU5hdHVyYWwnLCAnSW5kZXgnXTsKdmFyIGNyZWF0ZVNldFBvd2Vyc2V0ID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoc2V0UG93ZXJzZXRfbmFtZSwgc2V0UG93ZXJzZXRfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIHNpemUgPSBfcmVmLnNpemUsCiAgICAgIHN1YnNldCA9IF9yZWYuc3Vic2V0LAogICAgICBjb21wYXJlTmF0dXJhbCA9IF9yZWYuY29tcGFyZU5hdHVyYWwsCiAgICAgIEluZGV4ID0gX3JlZi5JbmRleDsKCiAgLyoqCiAgICogQ3JlYXRlIHRoZSBwb3dlcnNldCBvZiBhIChtdWx0aSlzZXQuIChUaGUgcG93ZXJzZXQgY29udGFpbnMgdmVyeSBwb3NzaWJsZSBzdWJzZXRzIG9mIGEgKG11bHRpKXNldC4pCiAgICogQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5zZXRQb3dlcnNldChzZXQpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguc2V0UG93ZXJzZXQoWzEsIDIsIDNdKSAgICAgICAgLy8gcmV0dXJucyBbW10sIFsxXSwgWzJdLCBbM10sIFsxLCAyXSwgWzEsIDNdLCBbMiwgM10sIFsxLCAyLCAzXV0KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgc2V0Q2FydGVzaWFuCiAgICoKICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhICBBIChtdWx0aSlzZXQKICAgKiBAcmV0dXJuIHtBcnJheX0gICAgVGhlIHBvd2Vyc2V0IG9mIHRoZSAobXVsdGkpc2V0CiAgICovCiAgcmV0dXJuIHR5cGVkKHNldFBvd2Vyc2V0X25hbWUsIHsKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KGEpIHsKICAgICAgaWYgKHN1YnNldChzaXplKGEpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7CiAgICAgICAgLy8gaWYgZW1wdHksIHJldHVybiBlbXB0eQogICAgICAgIHJldHVybiBbXTsKICAgICAgfQoKICAgICAgdmFyIGIgPSBPYmplY3QodXRpbHNfYXJyYXlbImUiIC8qIGZsYXR0ZW4gKi9dKShBcnJheS5pc0FycmF5KGEpID8gYSA6IGEudG9BcnJheSgpKS5zb3J0KGNvbXBhcmVOYXR1cmFsKTsKICAgICAgdmFyIHJlc3VsdCA9IFtdOwogICAgICB2YXIgbnVtYmVyID0gMDsKCiAgICAgIHdoaWxlIChudW1iZXIudG9TdHJpbmcoMikubGVuZ3RoIDw9IGIubGVuZ3RoKSB7CiAgICAgICAgcmVzdWx0LnB1c2goX3N1YnNldChiLCBudW1iZXIudG9TdHJpbmcoMikuc3BsaXQoJycpLnJldmVyc2UoKSkpOwogICAgICAgIG51bWJlcisrOwogICAgICB9IC8vIGNhbiBub3QgcmV0dXJuIGEgbWF0cml4LCBiZWNhdXNlIG9mIHRoZSBkaWZmZXJlbnQgc2l6ZSBvZiB0aGUgc3ViYXJyYXlzCgoKICAgICAgcmV0dXJuIF9zb3J0KHJlc3VsdCk7CiAgICB9CiAgfSk7IC8vIGNyZWF0ZSBzdWJzZXQKCiAgZnVuY3Rpb24gX3N1YnNldChhcnJheSwgYml0YXJyYXkpIHsKICAgIHZhciByZXN1bHQgPSBbXTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJpdGFycmF5Lmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChiaXRhcnJheVtpXSA9PT0gJzEnKSB7CiAgICAgICAgcmVzdWx0LnB1c2goYXJyYXlbaV0pOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9IC8vIHNvcnQgc3Vic2VzdHMgYnkgbGVuZ3RoCgoKICBmdW5jdGlvbiBfc29ydChhcnJheSkgewogICAgdmFyIHRlbXAgPSBbXTsKCiAgICBmb3IgKHZhciBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkgewogICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGk7IGorKykgewogICAgICAgIGlmIChhcnJheVtqXS5sZW5ndGggPiBhcnJheVtqICsgMV0ubGVuZ3RoKSB7CiAgICAgICAgICB0ZW1wID0gYXJyYXlbal07CiAgICAgICAgICBhcnJheVtqXSA9IGFycmF5W2ogKyAxXTsKICAgICAgICAgIGFycmF5W2ogKyAxXSA9IHRlbXA7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGFycmF5OwogIH0KfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3NldC9zZXRTaXplLmpzCgoKdmFyIHNldFNpemVfbmFtZSA9ICdzZXRTaXplJzsKdmFyIHNldFNpemVfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb21wYXJlTmF0dXJhbCddOwp2YXIgY3JlYXRlU2V0U2l6ZSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHNldFNpemVfbmFtZSwgc2V0U2l6ZV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgY29tcGFyZU5hdHVyYWwgPSBfcmVmLmNvbXBhcmVOYXR1cmFsOwoKICAvKioKICAgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIGEgKG11bHRpKXNldC4gV2hlbiBhIHNlY29uZCBwYXJhbWV0ZXIgaXMgJ3RydWUnLCBjb3VudCBvbmx5IHRoZSB1bmlxdWUgdmFsdWVzLgogICAqIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguc2V0U2l6ZShzZXQpCiAgICogICAgbWF0aC5zZXRTaXplKHNldCwgdW5pcXVlKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLnNldFNpemUoWzEsIDIsIDIsIDRdKSAgICAgICAgICAvLyByZXR1cm5zIDQKICAgKiAgICBtYXRoLnNldFNpemUoWzEsIDIsIDIsIDRdLCB0cnVlKSAgICAvLyByZXR1cm5zIDMKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgc2V0VW5pb24sIHNldEludGVyc2VjdCwgc2V0RGlmZmVyZW5jZQogICAqCiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYSAgQSBtdWx0aXNldAogICAqIEByZXR1cm4ge251bWJlcn0gICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIHRoZSAobXVsdGkpc2V0CiAgICovCiAgcmV0dXJuIHR5cGVkKHNldFNpemVfbmFtZSwgewogICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoYSkgewogICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhKSA/IE9iamVjdCh1dGlsc19hcnJheVsiZSIgLyogZmxhdHRlbiAqL10pKGEpLmxlbmd0aCA6IE9iamVjdCh1dGlsc19hcnJheVsiZSIgLyogZmxhdHRlbiAqL10pKGEudG9BcnJheSgpKS5sZW5ndGg7CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4LCBib29sZWFuJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhCb29sZWFuKGEsIHVuaXF1ZSkgewogICAgICBpZiAodW5pcXVlID09PSBmYWxzZSB8fCBhLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGEpID8gT2JqZWN0KHV0aWxzX2FycmF5WyJlIiAvKiBmbGF0dGVuICovXSkoYSkubGVuZ3RoIDogT2JqZWN0KHV0aWxzX2FycmF5WyJlIiAvKiBmbGF0dGVuICovXSkoYS50b0FycmF5KCkpLmxlbmd0aDsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgYiA9IE9iamVjdCh1dGlsc19hcnJheVsiZSIgLyogZmxhdHRlbiAqL10pKEFycmF5LmlzQXJyYXkoYSkgPyBhIDogYS50b0FycmF5KCkpLnNvcnQoY29tcGFyZU5hdHVyYWwpOwogICAgICAgIHZhciBjb3VudCA9IDE7CgogICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYi5sZW5ndGg7IGkrKykgewogICAgICAgICAgaWYgKGNvbXBhcmVOYXR1cmFsKGJbaV0sIGJbaSAtIDFdKSAhPT0gMCkgewogICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGNvdW50OwogICAgICB9CiAgICB9CiAgfSk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9zZXQvc2V0U3ltRGlmZmVyZW5jZS5qcwoKCnZhciBzZXRTeW1EaWZmZXJlbmNlX25hbWUgPSAnc2V0U3ltRGlmZmVyZW5jZSc7CnZhciBzZXRTeW1EaWZmZXJlbmNlX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdjb25jYXQnLCAnc3Vic2V0JywgJ3NldERpZmZlcmVuY2UnLCAnSW5kZXgnXTsKdmFyIGNyZWF0ZVNldFN5bURpZmZlcmVuY2UgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShzZXRTeW1EaWZmZXJlbmNlX25hbWUsIHNldFN5bURpZmZlcmVuY2VfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIHNpemUgPSBfcmVmLnNpemUsCiAgICAgIGNvbmNhdCA9IF9yZWYuY29uY2F0LAogICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCwKICAgICAgc2V0RGlmZmVyZW5jZSA9IF9yZWYuc2V0RGlmZmVyZW5jZSwKICAgICAgSW5kZXggPSBfcmVmLkluZGV4OwoKICAvKioKICAgKiBDcmVhdGUgdGhlIHN5bW1ldHJpYyBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0cy4KICAgKiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5zZXRTeW1EaWZmZXJlbmNlKHNldDEsIHNldDIpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguc2V0U3ltRGlmZmVyZW5jZShbMSwgMiwgMywgNF0sIFszLCA0LCA1LCA2XSkgICAgICAgICAgICAvLyByZXR1cm5zIFsxLCAyLCA1LCA2XQogICAqICAgIG1hdGguc2V0U3ltRGlmZmVyZW5jZShbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSAgICAvLyByZXR1cm5zIFsxLCAyLCA1LCA2XQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBzZXRVbmlvbiwgc2V0SW50ZXJzZWN0LCBzZXREaWZmZXJlbmNlCiAgICoKICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMSAgQSAobXVsdGkpc2V0CiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTIgIEEgKG11bHRpKXNldAogICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICBUaGUgc3ltbWV0cmljIGRpZmZlcmVuY2Ugb2YgdHdvIChtdWx0aSlzZXRzCiAgICovCiAgcmV0dXJuIHR5cGVkKHNldFN5bURpZmZlcmVuY2VfbmFtZSwgewogICAgJ0FycmF5IHwgTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4QXJyYXlNYXRyaXgoYTEsIGEyKSB7CiAgICAgIGlmIChzdWJzZXQoc2l6ZShhMSksIG5ldyBJbmRleCgwKSkgPT09IDApIHsKICAgICAgICAvLyBpZiBhbnkgb2YgdGhlbSBpcyBlbXB0eSwgcmV0dXJuIHRoZSBvdGhlciBvbmUKICAgICAgICByZXR1cm4gT2JqZWN0KHV0aWxzX2FycmF5WyJlIiAvKiBmbGF0dGVuICovXSkoYTIpOwogICAgICB9IGVsc2UgaWYgKHN1YnNldChzaXplKGEyKSwgbmV3IEluZGV4KDApKSA9PT0gMCkgewogICAgICAgIHJldHVybiBPYmplY3QodXRpbHNfYXJyYXlbImUiIC8qIGZsYXR0ZW4gKi9dKShhMSk7CiAgICAgIH0KCiAgICAgIHZhciBiMSA9IE9iamVjdCh1dGlsc19hcnJheVsiZSIgLyogZmxhdHRlbiAqL10pKGExKTsKICAgICAgdmFyIGIyID0gT2JqZWN0KHV0aWxzX2FycmF5WyJlIiAvKiBmbGF0dGVuICovXSkoYTIpOwogICAgICByZXR1cm4gY29uY2F0KHNldERpZmZlcmVuY2UoYjEsIGIyKSwgc2V0RGlmZmVyZW5jZShiMiwgYjEpKTsKICAgIH0KICB9KTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3NldC9zZXRVbmlvbi5qcwoKCnZhciBzZXRVbmlvbl9uYW1lID0gJ3NldFVuaW9uJzsKdmFyIHNldFVuaW9uX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdjb25jYXQnLCAnc3Vic2V0JywgJ3NldEludGVyc2VjdCcsICdzZXRTeW1EaWZmZXJlbmNlJywgJ0luZGV4J107CnZhciBjcmVhdGVTZXRVbmlvbiA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHNldFVuaW9uX25hbWUsIHNldFVuaW9uX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBzaXplID0gX3JlZi5zaXplLAogICAgICBjb25jYXQgPSBfcmVmLmNvbmNhdCwKICAgICAgc3Vic2V0ID0gX3JlZi5zdWJzZXQsCiAgICAgIHNldEludGVyc2VjdCA9IF9yZWYuc2V0SW50ZXJzZWN0LAogICAgICBzZXRTeW1EaWZmZXJlbmNlID0gX3JlZi5zZXRTeW1EaWZmZXJlbmNlLAogICAgICBJbmRleCA9IF9yZWYuSW5kZXg7CgogIC8qKgogICAqIENyZWF0ZSB0aGUgdW5pb24gb2YgdHdvIChtdWx0aSlzZXRzLgogICAqIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLnNldFVuaW9uKHNldDEsIHNldDIpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguc2V0VW5pb24oWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMiwgMywgNCwgNSwgNl0KICAgKiAgICBtYXRoLnNldFVuaW9uKFtbMSwgMl0sIFszLCA0XV0sIFtbMywgNF0sIFs1LCA2XV0pICAgIC8vIHJldHVybnMgWzEsIDIsIDMsIDQsIDUsIDZdCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIHNldEludGVyc2VjdCwgc2V0RGlmZmVyZW5jZQogICAqCiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTEgIEEgKG11bHRpKXNldAogICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEyICBBIChtdWx0aSlzZXQKICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgVGhlIHVuaW9uIG9mIHR3byAobXVsdGkpc2V0cwogICAqLwogIHJldHVybiB0eXBlZChzZXRVbmlvbl9uYW1lLCB7CiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhBcnJheU1hdHJpeChhMSwgYTIpIHsKICAgICAgaWYgKHN1YnNldChzaXplKGExKSwgbmV3IEluZGV4KDApKSA9PT0gMCkgewogICAgICAgIC8vIGlmIGFueSBvZiB0aGVtIGlzIGVtcHR5LCByZXR1cm4gdGhlIG90aGVyIG9uZQogICAgICAgIHJldHVybiBPYmplY3QodXRpbHNfYXJyYXlbImUiIC8qIGZsYXR0ZW4gKi9dKShhMik7CiAgICAgIH0gZWxzZSBpZiAoc3Vic2V0KHNpemUoYTIpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdCh1dGlsc19hcnJheVsiZSIgLyogZmxhdHRlbiAqL10pKGExKTsKICAgICAgfQoKICAgICAgdmFyIGIxID0gT2JqZWN0KHV0aWxzX2FycmF5WyJlIiAvKiBmbGF0dGVuICovXSkoYTEpOwogICAgICB2YXIgYjIgPSBPYmplY3QodXRpbHNfYXJyYXlbImUiIC8qIGZsYXR0ZW4gKi9dKShhMik7CiAgICAgIHJldHVybiBjb25jYXQoc2V0U3ltRGlmZmVyZW5jZShiMSwgYjIpLCBzZXRJbnRlcnNlY3QoYjEsIGIyKSk7CiAgICB9CiAgfSk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hcml0aG1ldGljL2FkZC5qcwoKCgoKCgoKdmFyIGFkZF9uYW1lID0gJ2FkZCc7CnZhciBhZGRfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnYWRkU2NhbGFyJywgJ2VxdWFsU2NhbGFyJywgJ0RlbnNlTWF0cml4JywgJ1NwYXJzZU1hdHJpeCddOwp2YXIgY3JlYXRlQWRkID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoYWRkX25hbWUsIGFkZF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLAogICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsCiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeCwKICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7CiAgdmFyIGFsZ29yaXRobTAxID0gY3JlYXRlQWxnb3JpdGhtMDEoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgdmFyIGFsZ29yaXRobTA0ID0gY3JlYXRlQWxnb3JpdGhtMDQoewogICAgdHlwZWQ6IHR5cGVkLAogICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyCiAgfSk7CiAgdmFyIGFsZ29yaXRobTEwID0gY3JlYXRlQWxnb3JpdGhtMTAoewogICAgdHlwZWQ6IHR5cGVkLAogICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4CiAgfSk7CiAgdmFyIGFsZ29yaXRobTEzID0gY3JlYXRlQWxnb3JpdGhtMTMoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgdmFyIGFsZ29yaXRobTE0ID0gY3JlYXRlQWxnb3JpdGhtMTQoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgLyoqCiAgICogQWRkIHR3byBvciBtb3JlIHZhbHVlcywgYHggKyB5YC4KICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5hZGQoeCwgeSkKICAgKiAgICBtYXRoLmFkZCh4LCB5LCB6LCAuLi4pCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguYWRkKDIsIDMpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNQogICAqICAgIG1hdGguYWRkKDIsIDMsIDQpICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgOQogICAqCiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKQogICAqICAgIGNvbnN0IGIgPSBtYXRoLmNvbXBsZXgoLTQsIDEpCiAgICogICAgbWF0aC5hZGQoYSwgYikgICAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggLTIgKyA0aQogICAqCiAgICogICAgbWF0aC5hZGQoWzEsIDIsIDNdLCA0KSAgICAgICAvLyByZXR1cm5zIEFycmF5IFs1LCA2LCA3XQogICAqCiAgICogICAgY29uc3QgYyA9IG1hdGgudW5pdCgnNSBjbScpCiAgICogICAgY29uc3QgZCA9IG1hdGgudW5pdCgnMi4xIG1tJykKICAgKiAgICBtYXRoLmFkZChjLCBkKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgVW5pdCA1Mi4xIG1tCiAgICoKICAgKiAgICBtYXRoLmFkZCgiMi4zIiwgIjQiKSAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDYuMwogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBzdWJ0cmFjdCwgc3VtCiAgICoKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gYWRkCiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBhZGQKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IFN1bSBvZiBgeGAgYW5kIGB5YAogICAqLwoKICB2YXIgYWRkID0gdHlwZWQoYWRkX25hbWUsIE9iamVjdCh1dGlsc19vYmplY3RbImUiIC8qIGV4dGVuZCAqL10pKHsKICAgIC8vIHdlIGV4dGVuZCB0aGUgc2lnbmF0dXJlcyBvZiBhZGRTY2FsYXIgd2l0aCBzaWduYXR1cmVzIGRlYWxpbmcgd2l0aCBtYXRyaWNlcwogICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgYWRkU2NhbGFyKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTAxKHgsIHksIGFkZFNjYWxhciwgZmFsc2UpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeSwgeCwgYWRkU2NhbGFyLCB0cnVlKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMDQoeCwgeSwgYWRkU2NhbGFyKTsKICAgIH0sCiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7CiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KICAgICAgcmV0dXJuIGFkZChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpOwogICAgfSwKICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBhZGQobWF0cml4KHgpLCB5KTsKICAgIH0sCiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYWRkKHgsIG1hdHJpeCh5KSk7CiAgICB9LAogICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBhZGRTY2FsYXIsIGZhbHNlKTsKICAgIH0sCiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkgewogICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeCwgeSwgYWRkU2NhbGFyLCBmYWxzZSk7CiAgICB9LAogICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBhZGRTY2FsYXIsIHRydWUpOwogICAgfSwKICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh5LCB4LCBhZGRTY2FsYXIsIHRydWUpOwogICAgfSwKICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkgewogICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uCiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGFkZFNjYWxhciwgZmFsc2UpLnZhbHVlT2YoKTsKICAgIH0sCiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBhZGRTY2FsYXIsIHRydWUpLnZhbHVlT2YoKTsKICAgIH0sCiAgICAnYW55LCBhbnknOiBhZGRTY2FsYXIsCiAgICAnYW55LCBhbnksIC4uLmFueSc6IGZ1bmN0aW9uIGFueUFueUFueSh4LCB5LCByZXN0KSB7CiAgICAgIHZhciByZXN1bHQgPSBhZGQoeCwgeSk7CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICByZXN1bHQgPSBhZGQocmVzdWx0LCByZXN0W2ldKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICB9LCBhZGRTY2FsYXIuc2lnbmF0dXJlcykpOwogIHJldHVybiBhZGQ7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hcml0aG1ldGljL2h5cG90LmpzCgoKdmFyIGh5cG90X25hbWUgPSAnaHlwb3QnOwp2YXIgaHlwb3RfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhYnMnLCAnYWRkU2NhbGFyJywgJ2RpdmlkZVNjYWxhcicsICdtdWx0aXBseVNjYWxhcicsICdzcXJ0JywgJ3NtYWxsZXInLCAnaXNQb3NpdGl2ZSddOwp2YXIgY3JlYXRlSHlwb3QgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShoeXBvdF9uYW1lLCBoeXBvdF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgYWJzID0gX3JlZi5hYnMsCiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLAogICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhciwKICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLAogICAgICBzcXJ0ID0gX3JlZi5zcXJ0LAogICAgICBzbWFsbGVyID0gX3JlZi5zbWFsbGVyLAogICAgICBpc1Bvc2l0aXZlID0gX3JlZi5pc1Bvc2l0aXZlOwoKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIGh5cG90ZW51c2Egb2YgYSBsaXN0IHdpdGggdmFsdWVzLiBUaGUgaHlwb3RlbnVzYSBpcyBkZWZpbmVkIGFzOgogICAqCiAgICogICAgIGh5cG90KGEsIGIsIGMsIC4uLikgPSBzcXJ0KGFeMiArIGJeMiArIGNeMiArIC4uLikKICAgKgogICAqIEZvciBtYXRyaXggaW5wdXQsIHRoZSBoeXBvdGVudXNhIGlzIGNhbGN1bGF0ZWQgZm9yIGFsbCB2YWx1ZXMgaW4gdGhlIG1hdHJpeC4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBtYXRoLmh5cG90KGEsIGIsIC4uLikKICAgKiAgICAgbWF0aC5oeXBvdChbYSwgYiwgYywgLi4uXSkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgIG1hdGguaHlwb3QoMywgNCkgICAgICAvLyA1CiAgICogICAgIG1hdGguaHlwb3QoMywgNCwgNSkgICAvLyA3LjA3MTA2NzgxMTg2NTQ3NTUKICAgKiAgICAgbWF0aC5oeXBvdChbMywgNCwgNV0pIC8vIDcuMDcxMDY3ODExODY1NDc1NQogICAqICAgICBtYXRoLmh5cG90KC0yKSAgICAgICAgLy8gMgogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICAgYWJzLCBub3JtCiAgICoKICAgKiBAcGFyYW0gey4uLiBudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gYXJncyAgICBBIGxpc3Qgd2l0aCBudW1lcmljIHZhbHVlcyBvciBhbiBBcnJheSBvciBNYXRyaXguCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0cml4IGFuZCBBcnJheSBpbnB1dCBpcyBmbGF0dGVuZWQgYW5kIHJldHVybnMgYQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZSBudW1iZXIgZm9yIHRoZSB3aG9sZSBtYXRyaXguCiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyfSBSZXR1cm5zIHRoZSBoeXBvdGhlbnVzYSBvZiB0aGUgaW5wdXQgdmFsdWVzLgogICAqLwogIHZhciBoeXBvdCA9IHR5cGVkKGh5cG90X25hbWUsIHsKICAgICcuLi4gbnVtYmVyIHwgQmlnTnVtYmVyJzogX2h5cG90LAogICAgQXJyYXk6IGZ1bmN0aW9uIEFycmF5KHgpIHsKICAgICAgcmV0dXJuIGh5cG90LmFwcGx5KGh5cG90LCBPYmplY3QodXRpbHNfYXJyYXlbImUiIC8qIGZsYXR0ZW4gKi9dKSh4KSk7CiAgICB9LAogICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkgewogICAgICByZXR1cm4gaHlwb3QuYXBwbHkoaHlwb3QsIE9iamVjdCh1dGlsc19hcnJheVsiZSIgLyogZmxhdHRlbiAqL10pKHgudG9BcnJheSgpKSk7CiAgICB9CiAgfSk7CiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBoeXBvdGVudXNhIGZvciBhbiBBcnJheSB3aXRoIHZhbHVlcwogICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlciB8IEJpZ051bWJlcj59IGFyZ3MKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFJldHVybnMgdGhlIHJlc3VsdAogICAqIEBwcml2YXRlCiAgICovCgogIGZ1bmN0aW9uIF9oeXBvdChhcmdzKSB7CiAgICAvLyBjb2RlIGJhc2VkIG9uIGBoeXBvdGAgZnJvbSBlczYtc2hpbToKICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXVsbWlsbHIvZXM2LXNoaW0vYmxvYi9tYXN0ZXIvZXM2LXNoaW0uanMjTDE2MTktTDE2MzMKICAgIHZhciByZXN1bHQgPSAwOwogICAgdmFyIGxhcmdlc3QgPSAwOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgdmFsdWUgPSBhYnMoYXJnc1tpXSk7CgogICAgICBpZiAoc21hbGxlcihsYXJnZXN0LCB2YWx1ZSkpIHsKICAgICAgICByZXN1bHQgPSBtdWx0aXBseVNjYWxhcihyZXN1bHQsIG11bHRpcGx5U2NhbGFyKGRpdmlkZVNjYWxhcihsYXJnZXN0LCB2YWx1ZSksIGRpdmlkZVNjYWxhcihsYXJnZXN0LCB2YWx1ZSkpKTsKICAgICAgICByZXN1bHQgPSBhZGRTY2FsYXIocmVzdWx0LCAxKTsKICAgICAgICBsYXJnZXN0ID0gdmFsdWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0ID0gYWRkU2NhbGFyKHJlc3VsdCwgaXNQb3NpdGl2ZSh2YWx1ZSkgPyBtdWx0aXBseVNjYWxhcihkaXZpZGVTY2FsYXIodmFsdWUsIGxhcmdlc3QpLCBkaXZpZGVTY2FsYXIodmFsdWUsIGxhcmdlc3QpKSA6IHZhbHVlKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBtdWx0aXBseVNjYWxhcihsYXJnZXN0LCBzcXJ0KHJlc3VsdCkpOwogIH0KCiAgcmV0dXJuIGh5cG90Owp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYXJpdGhtZXRpYy9ub3JtLmpzCgp2YXIgbm9ybV9uYW1lID0gJ25vcm0nOwp2YXIgbm9ybV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FicycsICdhZGQnLCAncG93JywgJ2NvbmonLCAnc3FydCcsICdtdWx0aXBseScsICdlcXVhbFNjYWxhcicsICdsYXJnZXInLCAnc21hbGxlcicsICdtYXRyaXgnXTsKdmFyIGNyZWF0ZU5vcm0gPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShub3JtX25hbWUsIG5vcm1fZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGFicyA9IF9yZWYuYWJzLAogICAgICBhZGQgPSBfcmVmLmFkZCwKICAgICAgcG93ID0gX3JlZi5wb3csCiAgICAgIGNvbmogPSBfcmVmLmNvbmosCiAgICAgIHNxcnQgPSBfcmVmLnNxcnQsCiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSwKICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLAogICAgICBsYXJnZXIgPSBfcmVmLmxhcmdlciwKICAgICAgc21hbGxlciA9IF9yZWYuc21hbGxlciwKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXg7CgogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgbm9ybSBvZiBhIG51bWJlciwgdmVjdG9yIG9yIG1hdHJpeC4KICAgKgogICAqIFRoZSBzZWNvbmQgcGFyYW1ldGVyIHAgaXMgb3B0aW9uYWwuIElmIG5vdCBwcm92aWRlZCwgaXQgZGVmYXVsdHMgdG8gMi4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGgubm9ybSh4KQogICAqICAgIG1hdGgubm9ybSh4LCBwKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmFicygtMy41KSAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDMuNQogICAqICAgIG1hdGgubm9ybSgtMy41KSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMy41CiAgICoKICAgKiAgICBtYXRoLm5vcm0obWF0aC5jb21wbGV4KDMsIC00KSkgICAgICAgICAvLyByZXR1cm5zIDUKICAgKgogICAqICAgIG1hdGgubm9ybShbMSwgMiwgLTNdLCBJbmZpbml0eSkgICAgICAgIC8vIHJldHVybnMgMwogICAqICAgIG1hdGgubm9ybShbMSwgMiwgLTNdLCAtSW5maW5pdHkpICAgICAgIC8vIHJldHVybnMgMQogICAqCiAgICogICAgbWF0aC5ub3JtKFszLCA0XSwgMikgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA1CiAgICoKICAgKiAgICBtYXRoLm5vcm0oW1sxLCAyXSwgWzMsIDRdXSwgMSkgICAgICAgICAgLy8gcmV0dXJucyA2CiAgICogICAgbWF0aC5ub3JtKFtbMSwgMl0sIFszLCA0XV0sICdpbmYnKSAgICAgLy8gcmV0dXJucyA3CiAgICogICAgbWF0aC5ub3JtKFtbMSwgMl0sIFszLCA0XV0sICdmcm8nKSAgICAgLy8gcmV0dXJucyA1LjQ3NzIyNTU3NTA1MTY2MQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBhYnMsIGh5cG90CiAgICoKICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHgKICAgKiAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIG5vcm0KICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBzdHJpbmd9IFtwPTJdCiAgICogICAgICAgICAgICBWZWN0b3Igc3BhY2UuCiAgICogICAgICAgICAgICBTdXBwb3J0ZWQgbnVtYmVycyBpbmNsdWRlIEluZmluaXR5IGFuZCAtSW5maW5pdHkuCiAgICogICAgICAgICAgICBTdXBwb3J0ZWQgc3RyaW5ncyBhcmU6ICdpbmYnLCAnLWluZicsIGFuZCAnZnJvJyAoVGhlIEZyb2Jlbml1cyBub3JtKQogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gdGhlIHAtbm9ybQogICAqLwogIHZhciBub3JtID0gdHlwZWQobm9ybV9uYW1lLCB7CiAgICBudW1iZXI6IE1hdGguYWJzLAogICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7CiAgICAgIHJldHVybiB4LmFicygpOwogICAgfSwKICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHsKICAgICAgLy8gbm9ybSh4KSA9IGFicyh4KQogICAgICByZXR1cm4geC5hYnMoKTsKICAgIH0sCiAgICAiYm9vbGVhbiI6IGZ1bmN0aW9uIGJvb2xlYW4oeCkgewogICAgICAvLyBub3JtKHgpID0gYWJzKHgpCiAgICAgIHJldHVybiBNYXRoLmFicyh4KTsKICAgIH0sCiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkgewogICAgICByZXR1cm4gX25vcm0obWF0cml4KHgpLCAyKTsKICAgIH0sCiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeCh4KSB7CiAgICAgIHJldHVybiBfbm9ybSh4LCAyKTsKICAgIH0sCiAgICAnbnVtYmVyIHwgQ29tcGxleCB8IEJpZ051bWJlciB8IGJvb2xlYW4sIG51bWJlciB8IEJpZ051bWJlciB8IHN0cmluZyc6IGZ1bmN0aW9uIG51bWJlckNvbXBsZXhCaWdOdW1iZXJCb29sZWFuTnVtYmVyQmlnTnVtYmVyU3RyaW5nKHgpIHsKICAgICAgLy8gaWdub3JlIHNlY29uZCBwYXJhbWV0ZXIsIFRPRE86IHJlbW92ZSB0aGUgb3B0aW9uIG9mIHNlY29uZCBwYXJhbWV0ZXIgZm9yIHRoZXNlIHR5cGVzCiAgICAgIHJldHVybiBub3JtKHgpOwogICAgfSwKICAgICdBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyIHwgc3RyaW5nJzogZnVuY3Rpb24gQXJyYXlOdW1iZXJCaWdOdW1iZXJTdHJpbmcoeCwgcCkgewogICAgICByZXR1cm4gX25vcm0obWF0cml4KHgpLCBwKTsKICAgIH0sCiAgICAnTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXIgfCBzdHJpbmcnOiBmdW5jdGlvbiBNYXRyaXhOdW1iZXJCaWdOdW1iZXJTdHJpbmcoeCwgcCkgewogICAgICByZXR1cm4gX25vcm0oeCwgcCk7CiAgICB9CiAgfSk7CiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBub3JtIGZvciBhbiBhcnJheQogICAqIEBwYXJhbSB7TWF0cml4fSB4CiAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IHAKICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBub3JtCiAgICogQHByaXZhdGUKICAgKi8KCiAgZnVuY3Rpb24gX25vcm0oeCwgcCkgewogICAgLy8gc2l6ZQogICAgdmFyIHNpemVYID0geC5zaXplKCk7IC8vIGNoZWNrIGlmIGl0IGlzIGEgdmVjdG9yCgogICAgaWYgKHNpemVYLmxlbmd0aCA9PT0gMSkgewogICAgICAvLyBjaGVjayBwCiAgICAgIGlmIChwID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHwgcCA9PT0gJ2luZicpIHsKICAgICAgICAvLyBub3JtKHgsIEluZmluaXR5KSA9IG1heChhYnMoeCkpCiAgICAgICAgdmFyIHBpbmYgPSAwOyAvLyBza2lwIHplcm9zIHNpbmNlIGFicygwKSA9PT0gMAoKICAgICAgICB4LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICB2YXIgdiA9IGFicyh2YWx1ZSk7CgogICAgICAgICAgaWYgKGxhcmdlcih2LCBwaW5mKSkgewogICAgICAgICAgICBwaW5mID0gdjsKICAgICAgICAgIH0KICAgICAgICB9LCB0cnVlKTsKICAgICAgICByZXR1cm4gcGluZjsKICAgICAgfQoKICAgICAgaWYgKHAgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSB8fCBwID09PSAnLWluZicpIHsKICAgICAgICAvLyBub3JtKHgsIC1JbmZpbml0eSkgPSBtaW4oYWJzKHgpKQogICAgICAgIHZhciBuaW5mOyAvLyBza2lwIHplcm9zIHNpbmNlIGFicygwKSA9PT0gMAoKICAgICAgICB4LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICB2YXIgdiA9IGFicyh2YWx1ZSk7CgogICAgICAgICAgaWYgKCFuaW5mIHx8IHNtYWxsZXIodiwgbmluZikpIHsKICAgICAgICAgICAgbmluZiA9IHY7CiAgICAgICAgICB9CiAgICAgICAgfSwgdHJ1ZSk7CiAgICAgICAgcmV0dXJuIG5pbmYgfHwgMDsKICAgICAgfQoKICAgICAgaWYgKHAgPT09ICdmcm8nKSB7CiAgICAgICAgcmV0dXJuIF9ub3JtKHgsIDIpOwogICAgICB9CgogICAgICBpZiAodHlwZW9mIHAgPT09ICdudW1iZXInICYmICFpc05hTihwKSkgewogICAgICAgIC8vIGNoZWNrIHAgIT0gMAogICAgICAgIGlmICghZXF1YWxTY2FsYXIocCwgMCkpIHsKICAgICAgICAgIC8vIG5vcm0oeCwgcCkgPSBzdW0oYWJzKHhpKSBeIHApIF4gMS9wCiAgICAgICAgICB2YXIgbiA9IDA7IC8vIHNraXAgemVyb3Mgc2luY2UgYWJzKDApID09PSAwCgogICAgICAgICAgeC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICBuID0gYWRkKHBvdyhhYnModmFsdWUpLCBwKSwgbik7CiAgICAgICAgICB9LCB0cnVlKTsKICAgICAgICAgIHJldHVybiBwb3cobiwgMSAvIHApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKICAgICAgfSAvLyBpbnZhbGlkIHBhcmFtZXRlciB2YWx1ZQoKCiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgcGFyYW1ldGVyIHZhbHVlJyk7CiAgICB9IC8vIE14TiBtYXRyaXgKCgogICAgaWYgKHNpemVYLmxlbmd0aCA9PT0gMikgewogICAgICAvLyBjaGVjayBwCiAgICAgIGlmIChwID09PSAxKSB7CiAgICAgICAgLy8gbm9ybSh4KSA9IHRoZSBsYXJnZXN0IGNvbHVtbiBzdW0KICAgICAgICB2YXIgYyA9IFtdOyAvLyByZXN1bHQKCiAgICAgICAgdmFyIG1heGMgPSAwOyAvLyBza2lwIHplcm9zIHNpbmNlIGFicygwKSA9PSAwCgogICAgICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7CiAgICAgICAgICB2YXIgaiA9IGluZGV4WzFdOwogICAgICAgICAgdmFyIGNqID0gYWRkKGNbal0gfHwgMCwgYWJzKHZhbHVlKSk7CgogICAgICAgICAgaWYgKGxhcmdlcihjaiwgbWF4YykpIHsKICAgICAgICAgICAgbWF4YyA9IGNqOwogICAgICAgICAgfQoKICAgICAgICAgIGNbal0gPSBjajsKICAgICAgICB9LCB0cnVlKTsKICAgICAgICByZXR1cm4gbWF4YzsKICAgICAgfQoKICAgICAgaWYgKHAgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fCBwID09PSAnaW5mJykgewogICAgICAgIC8vIG5vcm0oeCkgPSB0aGUgbGFyZ2VzdCByb3cgc3VtCiAgICAgICAgdmFyIHIgPSBbXTsgLy8gcmVzdWx0CgogICAgICAgIHZhciBtYXhyID0gMDsgLy8gc2tpcCB6ZXJvcyBzaW5jZSBhYnMoMCkgPT0gMAoKICAgICAgICB4LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkgewogICAgICAgICAgdmFyIGkgPSBpbmRleFswXTsKICAgICAgICAgIHZhciByaSA9IGFkZChyW2ldIHx8IDAsIGFicyh2YWx1ZSkpOwoKICAgICAgICAgIGlmIChsYXJnZXIocmksIG1heHIpKSB7CiAgICAgICAgICAgIG1heHIgPSByaTsKICAgICAgICAgIH0KCiAgICAgICAgICByW2ldID0gcmk7CiAgICAgICAgfSwgdHJ1ZSk7CiAgICAgICAgcmV0dXJuIG1heHI7CiAgICAgIH0KCiAgICAgIGlmIChwID09PSAnZnJvJykgewogICAgICAgIC8vIG5vcm0oeCkgPSBzcXJ0KHN1bShkaWFnKHgneCkpKQogICAgICAgIHZhciBmcm8gPSAwOwogICAgICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7CiAgICAgICAgICBmcm8gPSBhZGQoZnJvLCBtdWx0aXBseSh2YWx1ZSwgY29uaih2YWx1ZSkpKTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gYWJzKHNxcnQoZnJvKSk7CiAgICAgIH0KCiAgICAgIGlmIChwID09PSAyKSB7CiAgICAgICAgLy8gbm90IGltcGxlbWVudGVkCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBwYXJhbWV0ZXIgdmFsdWUsIG1pc3NpbmcgaW1wbGVtZW50YXRpb24gb2YgbWF0cml4IHNpbmd1bGFyIHZhbHVlIGRlY29tcG9zaXRpb24nKTsKICAgICAgfSAvLyBpbnZhbGlkIHBhcmFtZXRlciB2YWx1ZQoKCiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgcGFyYW1ldGVyIHZhbHVlJyk7CiAgICB9CiAgfQoKICByZXR1cm4gbm9ybTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL21hdHJpeC9kb3QuanMKCgp2YXIgZG90X25hbWUgPSAnZG90JzsKdmFyIGRvdF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdtdWx0aXBseSddOwp2YXIgY3JlYXRlRG90ID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoZG90X25hbWUsIGRvdF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgYWRkID0gX3JlZi5hZGQsCiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseTsKCiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjdG9ycy4gVGhlIGRvdCBwcm9kdWN0IG9mCiAgICogYEEgPSBbYTEsIGEyLCBhMywgLi4uLCBhbl1gIGFuZCBgQiA9IFtiMSwgYjIsIGIzLCAuLi4sIGJuXWAgaXMgZGVmaW5lZCBhczoKICAgKgogICAqICAgIGRvdChBLCBCKSA9IGExICogYjEgKyBhMiAqIGIyICsgYTMgKiBiMyArIC4uLiArIGFuICogYm4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguZG90KHgsIHkpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguZG90KFsyLCA0LCAxXSwgWzIsIDIsIDNdKSAgICAgICAvLyByZXR1cm5zIG51bWJlciAxNQogICAqICAgIG1hdGgubXVsdGlwbHkoWzIsIDQsIDFdLCBbMiwgMiwgM10pICAvLyByZXR1cm5zIG51bWJlciAxNQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBtdWx0aXBseSwgY3Jvc3MKICAgKgogICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB4ICAgICBGaXJzdCB2ZWN0b3IKICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0geSAgICAgU2Vjb25kIHZlY3RvcgogICAqIEByZXR1cm4ge251bWJlcn0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBkb3QgcHJvZHVjdCBvZiBgeGAgYW5kIGB5YAogICAqLwogIHJldHVybiB0eXBlZChkb3RfbmFtZSwgewogICAgJ01hdHJpeCwgTWF0cml4JzogZnVuY3Rpb24gTWF0cml4TWF0cml4KHgsIHkpIHsKICAgICAgcmV0dXJuIF9kb3QoeC50b0FycmF5KCksIHkudG9BcnJheSgpKTsKICAgIH0sCiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHsKICAgICAgcmV0dXJuIF9kb3QoeC50b0FycmF5KCksIHkpOwogICAgfSwKICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkgewogICAgICByZXR1cm4gX2RvdCh4LCB5LnRvQXJyYXkoKSk7CiAgICB9LAogICAgJ0FycmF5LCBBcnJheSc6IF9kb3QKICB9KTsKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIGRvdCBwcm9kdWN0IGZvciB0d28gYXJyYXlzCiAgICogQHBhcmFtIHtBcnJheX0geCAgRmlyc3QgdmVjdG9yCiAgICogQHBhcmFtIHtBcnJheX0geSAgU2Vjb25kIHZlY3RvcgogICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGRvdCBwcm9kdWN0IG9mIHggYW5kIHkKICAgKiBAcHJpdmF0ZQogICAqLwogIC8vIFRPRE86IGRvdWJsZSBjb2RlIHdpdGggbWF0aC5tdWx0aXBseQoKICBmdW5jdGlvbiBfZG90KHgsIHkpIHsKICAgIHZhciB4U2l6ZSA9IE9iamVjdCh1dGlsc19hcnJheVsiYSIgLyogYXJyYXlTaXplICovXSkoeCk7CiAgICB2YXIgeVNpemUgPSBPYmplY3QodXRpbHNfYXJyYXlbImEiIC8qIGFycmF5U2l6ZSAqL10pKHkpOwogICAgdmFyIGxlbiA9IHhTaXplWzBdOwogICAgaWYgKHhTaXplLmxlbmd0aCAhPT0gMSB8fCB5U2l6ZS5sZW5ndGggIT09IDEpIHRocm93IG5ldyBSYW5nZUVycm9yKCdWZWN0b3IgZXhwZWN0ZWQnKTsgLy8gVE9ETzogYmV0dGVyIGVycm9yIG1lc3NhZ2UKCiAgICBpZiAoeFNpemVbMF0gIT09IHlTaXplWzBdKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVmVjdG9ycyBtdXN0IGhhdmUgZXF1YWwgbGVuZ3RoICgnICsgeFNpemVbMF0gKyAnICE9ICcgKyB5U2l6ZVswXSArICcpJyk7CiAgICBpZiAobGVuID09PSAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSB0aGUgZG90IHByb2R1Y3Qgb2YgZW1wdHkgdmVjdG9ycycpOwogICAgdmFyIHByb2QgPSAwOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgcHJvZCA9IGFkZChwcm9kLCBtdWx0aXBseSh4W2ldLCB5W2ldKSk7CiAgICB9CgogICAgcmV0dXJuIHByb2Q7CiAgfQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vbWF0cml4L3RyYWNlLmpzCgoKCnZhciB0cmFjZV9uYW1lID0gJ3RyYWNlJzsKdmFyIHRyYWNlX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2FkZCddOwp2YXIgY3JlYXRlVHJhY2UgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKSh0cmFjZV9uYW1lLCB0cmFjZV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIGFkZCA9IF9yZWYuYWRkOwoKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIHRyYWNlIG9mIGEgbWF0cml4OiB0aGUgc3VtIG9mIHRoZSBlbGVtZW50cyBvbiB0aGUgbWFpbgogICAqIGRpYWdvbmFsIG9mIGEgc3F1YXJlIG1hdHJpeC4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGgudHJhY2UoeCkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC50cmFjZShbWzEsIDJdLCBbMywgNF1dKSAvLyByZXR1cm5zIDUKICAgKgogICAqICAgIGNvbnN0IEEgPSBbCiAgICogICAgICBbMSwgMiwgM10sCiAgICogICAgICBbLTEsIDIsIDNdLAogICAqICAgICAgWzIsIDAsIDNdCiAgICogICAgXQogICAqICAgIG1hdGgudHJhY2UoQSkgLy8gcmV0dXJucyA2CiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGRpYWcKICAgKgogICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHggIEEgbWF0cml4CiAgICoKICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB0cmFjZSBvZiBgeGAKICAgKi8KICByZXR1cm4gdHlwZWQoJ3RyYWNlJywgewogICAgQXJyYXk6IGZ1bmN0aW9uIF9hcnJheVRyYWNlKHgpIHsKICAgICAgLy8gdXNlIGRlbnNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gX2RlbnNlVHJhY2UobWF0cml4KHgpKTsKICAgIH0sCiAgICBTcGFyc2VNYXRyaXg6IF9zcGFyc2VUcmFjZSwKICAgIERlbnNlTWF0cml4OiBfZGVuc2VUcmFjZSwKICAgIGFueTogdXRpbHNfb2JqZWN0WyJhIiAvKiBjbG9uZSAqL10KICB9KTsKCiAgZnVuY3Rpb24gX2RlbnNlVHJhY2UobSkgewogICAgLy8gbWF0cml4IHNpemUgJiBkYXRhCiAgICB2YXIgc2l6ZSA9IG0uX3NpemU7CiAgICB2YXIgZGF0YSA9IG0uX2RhdGE7IC8vIHByb2Nlc3MgZGltZW5zaW9ucwoKICAgIHN3aXRjaCAoc2l6ZS5sZW5ndGgpIHsKICAgICAgY2FzZSAxOgogICAgICAgIC8vIHZlY3RvcgogICAgICAgIGlmIChzaXplWzBdID09PSAxKSB7CiAgICAgICAgICAvLyByZXR1cm4gZGF0YVswXQogICAgICAgICAgcmV0dXJuIE9iamVjdCh1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSkoZGF0YVswXSk7CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlIChzaXplOiAnICsgT2JqZWN0KHV0aWxzX3N0cmluZ1siZCIgLyogZm9ybWF0ICovXSkoc2l6ZSkgKyAnKScpOwoKICAgICAgY2FzZSAyOgogICAgICAgIHsKICAgICAgICAgIC8vIHR3byBkaW1lbnNpb25hbAogICAgICAgICAgdmFyIHJvd3MgPSBzaXplWzBdOwogICAgICAgICAgdmFyIGNvbHMgPSBzaXplWzFdOwoKICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7CiAgICAgICAgICAgIC8vIGNhbHVsYXRlIHN1bQogICAgICAgICAgICB2YXIgc3VtID0gMDsgLy8gbG9vcCBkaWFnb25hbAoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspIHsKICAgICAgICAgICAgICBzdW0gPSBhZGQoc3VtLCBkYXRhW2ldW2ldKTsKICAgICAgICAgICAgfSAvLyByZXR1cm4gdHJhY2UKCgogICAgICAgICAgICByZXR1cm4gc3VtOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAoc2l6ZTogJyArIE9iamVjdCh1dGlsc19zdHJpbmdbImQiIC8qIGZvcm1hdCAqL10pKHNpemUpICsgJyknKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICBkZWZhdWx0OgogICAgICAgIC8vIG11bHRpIGRpbWVuc2lvbmFsCiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHR3byBkaW1lbnNpb25hbCAoc2l6ZTogJyArIE9iamVjdCh1dGlsc19zdHJpbmdbImQiIC8qIGZvcm1hdCAqL10pKHNpemUpICsgJyknKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIF9zcGFyc2VUcmFjZShtKSB7CiAgICAvLyBtYXRyaXggYXJyYXlzCiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzOwogICAgdmFyIGluZGV4ID0gbS5faW5kZXg7CiAgICB2YXIgcHRyID0gbS5fcHRyOwogICAgdmFyIHNpemUgPSBtLl9zaXplOyAvLyBjaGVjayBkaW1lbnNpb25zCgogICAgdmFyIHJvd3MgPSBzaXplWzBdOwogICAgdmFyIGNvbHVtbnMgPSBzaXplWzFdOyAvLyBtYXRyaXggbXVzdCBiZSBzcXVhcmUKCiAgICBpZiAocm93cyA9PT0gY29sdW1ucykgewogICAgICAvLyBjYWx1bGF0ZSBzdW0KICAgICAgdmFyIHN1bSA9IDA7IC8vIGNoZWNrIHdlIGhhdmUgZGF0YSAoYXZvaWQgbG9vcGluZyBjb2x1bW5zKQoKICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgLy8gbG9vcCBjb2x1bW5zCiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHsKICAgICAgICAgIC8vIGswIDw9IGsgPCBrMSB3aGVyZSBrMCA9IF9wdHJbal0gJiYgazEgPSBfcHRyW2orMV0KICAgICAgICAgIHZhciBrMCA9IHB0cltqXTsKICAgICAgICAgIHZhciBrMSA9IHB0cltqICsgMV07IC8vIGxvb3AgayB3aXRoaW4gW2swLCBrMVsKCiAgICAgICAgICBmb3IgKHZhciBrID0gazA7IGsgPCBrMTsgaysrKSB7CiAgICAgICAgICAgIC8vIHJvdyBpbmRleAogICAgICAgICAgICB2YXIgaSA9IGluZGV4W2tdOyAvLyBjaGVjayByb3cKCiAgICAgICAgICAgIGlmIChpID09PSBqKSB7CiAgICAgICAgICAgICAgLy8gYWNjdW11bGF0ZSB2YWx1ZQogICAgICAgICAgICAgIHN1bSA9IGFkZChzdW0sIHZhbHVlc1trXSk7IC8vIGV4aXQgbG9vcAoKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGkgPiBqKSB7CiAgICAgICAgICAgICAgLy8gZXhpdCBsb29wLCBubyB2YWx1ZSBvbiB0aGUgZGlhZ29uYWwgZm9yIGNvbHVtbiBqCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gLy8gcmV0dXJuIHRyYWNlCgoKICAgICAgcmV0dXJuIHN1bTsKICAgIH0KCiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlIChzaXplOiAnICsgT2JqZWN0KHV0aWxzX3N0cmluZ1siZCIgLyogZm9ybWF0ICovXSkoc2l6ZSkgKyAnKScpOwogIH0KfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3R5cGUvbWF0cml4L2Z1bmN0aW9uL2luZGV4LmpzCgoKdmFyIGZ1bmN0aW9uX25hbWUgPSAnaW5kZXgnOwp2YXIgZnVuY3Rpb25fZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdJbmRleCddOwp2YXIgY3JlYXRlSW5kZXggPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShmdW5jdGlvbl9uYW1lLCBmdW5jdGlvbl9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgSW5kZXggPSBfcmVmLkluZGV4OwoKICAvKioKICAgKiBDcmVhdGUgYW4gaW5kZXguIEFuIEluZGV4IGNhbiBzdG9yZSByYW5nZXMgaGF2aW5nIHN0YXJ0LCBzdGVwLCBhbmQgZW5kCiAgICogZm9yIG11bHRpcGxlIGRpbWVuc2lvbnMuCiAgICogTWF0cml4LmdldCwgTWF0cml4LnNldCwgYW5kIG1hdGguc3Vic2V0IGFjY2VwdCBhbiBJbmRleCBhcyBpbnB1dC4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBtYXRoLmluZGV4KHJhbmdlMSwgcmFuZ2UyLCAuLi4pCiAgICoKICAgKiBXaGVyZSBlYWNoIHJhbmdlIGNhbiBiZSBhbnkgb2Y6CiAgICoKICAgKiAtIEEgbnVtYmVyCiAgICogLSBBIHN0cmluZyBmb3IgZ2V0dGluZy9zZXR0aW5nIGFuIG9iamVjdCBwcm9wZXJ0eQogICAqIC0gQW4gaW5zdGFuY2Ugb2YgYFJhbmdlYAogICAqIC0gQSBvbmUtZGltZW5zaW9uYWwgQXJyYXkgb3IgYSBNYXRyaXggd2l0aCBudW1iZXJzCiAgICoKICAgKiBJbmRleGVzIG11c3QgYmUgemVyby1iYXNlZCwgaW50ZWdlciBudW1iZXJzLgogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBjb25zdCBiID0gWzEsIDIsIDMsIDQsIDVdCiAgICogICAgbWF0aC5zdWJzZXQoYiwgbWF0aC5pbmRleChbMSwgMiwgM10pKSAgICAgLy8gcmV0dXJucyBbMiwgMywgNF0KICAgKgogICAqICAgIGNvbnN0IGEgPSBtYXRoLm1hdHJpeChbWzEsIDJdLCBbMywgNF1dKQogICAqICAgIGEuc3Vic2V0KG1hdGguaW5kZXgoMCwgMSkpICAgICAgICAgICAgIC8vIHJldHVybnMgMgogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBiaWdudW1iZXIsIGJvb2xlYW4sIGNvbXBsZXgsIG1hdHJpeCwgbnVtYmVyLCBzdHJpbmcsIHVuaXQKICAgKgogICAqIEBwYXJhbSB7Li4uKn0gcmFuZ2VzICAgWmVybyBvciBtb3JlIHJhbmdlcyBvciBudW1iZXJzLgogICAqIEByZXR1cm4ge0luZGV4fSAgICAgICAgUmV0dXJucyB0aGUgY3JlYXRlZCBpbmRleAogICAqLwogIHJldHVybiB0eXBlZChmdW5jdGlvbl9uYW1lLCB7CiAgICAnLi4ubnVtYmVyIHwgc3RyaW5nIHwgQmlnTnVtYmVyIHwgUmFuZ2UgfCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlclN0cmluZ0JpZ051bWJlclJhbmdlQXJyYXlNYXRyaXgoYXJncykgewogICAgICB2YXIgcmFuZ2VzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZykgewogICAgICAgIGlmIChPYmplY3QoaXNbImUiIC8qIGlzQmlnTnVtYmVyICovXSkoYXJnKSkgewogICAgICAgICAgcmV0dXJuIGFyZy50b051bWJlcigpOyAvLyBjb252ZXJ0IEJpZ051bWJlciB0byBOdW1iZXIKICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSB8fCBPYmplY3QoaXNbInYiIC8qIGlzTWF0cml4ICovXSkoYXJnKSkgewogICAgICAgICAgcmV0dXJuIGFyZy5tYXAoZnVuY3Rpb24gKGVsZW0pIHsKICAgICAgICAgICAgLy8gY29udmVydCBCaWdOdW1iZXIgdG8gTnVtYmVyCiAgICAgICAgICAgIHJldHVybiBPYmplY3QoaXNbImUiIC8qIGlzQmlnTnVtYmVyICovXSkoZWxlbSkgPyBlbGVtLnRvTnVtYmVyKCkgOiBlbGVtOwogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBhcmc7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdmFyIHJlcyA9IG5ldyBJbmRleCgpOwogICAgICBJbmRleC5hcHBseShyZXMsIHJhbmdlcyk7CiAgICAgIHJldHVybiByZXM7CiAgICB9CiAgfSk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2tleXdvcmRzLmpzCi8vIFJlc2VydmVkIGtleXdvcmRzIG5vdCBhbGxvd2VkIHRvIHVzZSBpbiB0aGUgcGFyc2VyCnZhciBrZXl3b3JkcyA9IHsKICBlbmQ6IHRydWUKfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9ub2RlL05vZGUuanMKZnVuY3Rpb24gTm9kZV90eXBlb2Yob2JqKSB7ICJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7IGlmICh0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICJzeW1ib2wiKSB7IE5vZGVfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IE5vZGVfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/ICJzeW1ib2wiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gTm9kZV90eXBlb2Yob2JqKTsgfQoKCgoKCgp2YXIgTm9kZV9uYW1lID0gJ05vZGUnOwp2YXIgTm9kZV9kZXBlbmRlbmNpZXMgPSBbJ21hdGhXaXRoVHJhbnNmb3JtJ107CnZhciBjcmVhdGVOb2RlID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoTm9kZV9uYW1lLCBOb2RlX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgbWF0aFdpdGhUcmFuc2Zvcm0gPSBfcmVmLm1hdGhXaXRoVHJhbnNmb3JtOwoKICAvKioKICAgKiBOb2RlCiAgICovCiAgZnVuY3Rpb24gTm9kZSgpIHsKICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBOb2RlKSkgewogICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpOwogICAgfQogIH0KICAvKioKICAgKiBFdmFsdWF0ZSB0aGUgbm9kZQogICAqIEBwYXJhbSB7T2JqZWN0fSBbc2NvcGVdICBTY29wZSB0byByZWFkL3dyaXRlIHZhcmlhYmxlcwogICAqIEByZXR1cm4geyp9ICAgICAgICAgICAgICBSZXR1cm5zIHRoZSByZXN1bHQKICAgKi8KCgogIE5vZGUucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gKHNjb3BlKSB7CiAgICByZXR1cm4gdGhpcy5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpOwogIH07CiAgLyoqCiAgICogRXZhbHVhdGUgdGhlIG5vZGUKICAgKiBAcGFyYW0ge09iamVjdH0gW3Njb3BlXSAgU2NvcGUgdG8gcmVhZC93cml0ZSB2YXJpYWJsZXMKICAgKiBAcmV0dXJuIHsqfSAgICAgICAgICAgICAgUmV0dXJucyB0aGUgcmVzdWx0CiAgICovCiAgLy8gVE9ETzogRGVwcmVjYXRlZCBzaW5jZSB2Ni4wLjAuIENsZWFuIHVwIHNvbWUgZGF5CgoKICBOb2RlLnByb3RvdHlwZS5ldmFsID0gZnVuY3Rpb24gKHNjb3BlKSB7CiAgICBPYmplY3QodXRpbHNfbG9nWyJhIiAvKiB3YXJuT25jZSAqL10pKCdNZXRob2QgTm9kZS5ldmFsIGlzIHJlbmFtZWQgdG8gTm9kZS5ldmFsdWF0ZS4gUGxlYXNlIHVzZSB0aGUgbmV3IG1ldGhvZCBuYW1lLicpOwogICAgcmV0dXJuIHRoaXMuZXZhbHVhdGUoc2NvcGUpOwogIH07CgogIE5vZGUucHJvdG90eXBlLnR5cGUgPSAnTm9kZSc7CiAgTm9kZS5wcm90b3R5cGUuaXNOb2RlID0gdHJ1ZTsKICBOb2RlLnByb3RvdHlwZS5jb21tZW50ID0gJyc7CiAgLyoqCiAgICogQ29tcGlsZSB0aGUgbm9kZSBpbnRvIGFuIG9wdGltaXplZCwgZXZhdWF0YWJsZSBKYXZhU2NyaXB0IGZ1bmN0aW9uCiAgICogQHJldHVybiB7e2V2YWx1YXRlOiBmdW5jdGlvbihbT2JqZWN0XSl9fSBvYmplY3QKICAgKiAgICAgICAgICAgICAgICBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGEgZnVuY3Rpb24gJ2V2YWx1YXRlJywKICAgKiAgICAgICAgICAgICAgICB3aGljaCBjYW4gYmUgaW52b2tlZCBhcyBleHByLmV2YWx1YXRlKFtzY29wZTogT2JqZWN0XSksCiAgICogICAgICAgICAgICAgICAgd2hlcmUgc2NvcGUgaXMgYW4gb3B0aW9uYWwgb2JqZWN0IHdpdGgKICAgKiAgICAgICAgICAgICAgICB2YXJpYWJsZXMuCiAgICovCgogIE5vZGUucHJvdG90eXBlLmNvbXBpbGUgPSBmdW5jdGlvbiAoKSB7CiAgICB2YXIgZXhwciA9IHRoaXMuX2NvbXBpbGUobWF0aFdpdGhUcmFuc2Zvcm0sIHt9KTsKCiAgICB2YXIgYXJncyA9IHt9OwogICAgdmFyIGNvbnRleHQgPSBudWxsOwoKICAgIGZ1bmN0aW9uIGV2YWx1YXRlKHNjb3BlKSB7CiAgICAgIHZhciBzID0gc2NvcGUgfHwge307CgogICAgICBfdmFsaWRhdGVTY29wZShzKTsKCiAgICAgIHJldHVybiBleHByKHMsIGFyZ3MsIGNvbnRleHQpOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgIGV2YWx1YXRlOiBldmFsdWF0ZSwKICAgICAgLy8gVE9ETzogRGVwcmVjYXRlZCBzaW5jZSB2Ni4wLjAuIENsZWFuIHVwIHNvbWUgZGF5CiAgICAgIGV2YWw6IGZ1bmN0aW9uIGRlcHJlY2F0ZWRFdmFsKHNjb3BlKSB7CiAgICAgICAgT2JqZWN0KHV0aWxzX2xvZ1siYSIgLyogd2Fybk9uY2UgKi9dKSgnTWV0aG9kIGV2YWwgaXMgcmVuYW1lZCB0byBldmFsdWF0ZS4gUGxlYXNlIHVzZSB0aGUgbmV3IG1ldGhvZC4nKTsKICAgICAgICByZXR1cm4gZXZhbHVhdGUoc2NvcGUpOwogICAgICB9CiAgICB9OwogIH07CiAgLyoqCiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uCiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlbgogICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLgogICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLgogICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHMKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuCiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6CiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopCiAgICovCgoKICBOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykgewogICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2QgX2NvbXBpbGUgc2hvdWxkIGJlIGltcGxlbWVudGVkIGJ5IHR5cGUgJyArIHRoaXMudHlwZSk7CiAgfTsKICAvKioKICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZQogICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2sKICAgKi8KCgogIE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTm9kZSBpbXBsZW1lbnRhdGlvbnMKICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJ1biBmb3JFYWNoIG9uIGEgTm9kZSBpbnRlcmZhY2UnKTsKICB9OwogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBOb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nCiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuCiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFjawogICAqIEByZXR1cm5zIHtPcGVyYXRvck5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlCiAgICovCgoKICBOb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTm9kZSBpbXBsZW1lbnRhdGlvbnMKICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJ1biBtYXAgb24gYSBOb2RlIGludGVyZmFjZScpOwogIH07CiAgLyoqCiAgICogVmFsaWRhdGUgd2hldGhlciBhbiBvYmplY3QgaXMgYSBOb2RlLCBmb3IgdXNlIHdpdGggbWFwCiAgICogQHBhcmFtIHtOb2RlfSBub2RlCiAgICogQHJldHVybnMge05vZGV9IFJldHVybnMgdGhlIGlucHV0IGlmIGl0J3MgYSBub2RlLCBlbHNlIHRocm93cyBhbiBFcnJvcgogICAqIEBwcm90ZWN0ZWQKICAgKi8KCgogIE5vZGUucHJvdG90eXBlLl9pZk5vZGUgPSBmdW5jdGlvbiAobm9kZSkgewogICAgaWYgKCFPYmplY3QoaXNbInciIC8qIGlzTm9kZSAqL10pKG5vZGUpKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NhbGxiYWNrIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgTm9kZScpOwogICAgfQoKICAgIHJldHVybiBub2RlOwogIH07CiAgLyoqCiAgICogUmVjdXJzaXZlbHkgdHJhdmVyc2UgYWxsIG5vZGVzIGluIGEgbm9kZSB0cmVlLiBFeGVjdXRlcyBnaXZlbiBjYWxsYmFjayBmb3IKICAgKiB0aGlzIG5vZGUgYW5kIGVhY2ggb2YgaXRzIGNoaWxkIG5vZGVzLgogICAqIEBwYXJhbSB7ZnVuY3Rpb24obm9kZTogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFjawogICAqICAgICAgICAgIEEgY2FsbGJhY2sgY2FsbGVkIGZvciBldmVyeSBub2RlIGluIHRoZSBub2RlIHRyZWUuCiAgICovCgoKICBOb2RlLnByb3RvdHlwZS50cmF2ZXJzZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykgewogICAgLy8gZXhlY3V0ZSBjYWxsYmFjayBmb3IgaXRzZWxmCiAgICBjYWxsYmFjayh0aGlzLCBudWxsLCBudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzdGFuZGFyZC9uby1jYWxsYmFjay1saXRlcmFsCiAgICAvLyByZWN1cnNpdmVseSB0cmF2ZXJzZSBvdmVyIGFsbCBjaGlsZHMgb2YgYSBub2RlCgogICAgZnVuY3Rpb24gX3RyYXZlcnNlKG5vZGUsIGNhbGxiYWNrKSB7CiAgICAgIG5vZGUuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQsIHBhdGgsIHBhcmVudCkgewogICAgICAgIGNhbGxiYWNrKGNoaWxkLCBwYXRoLCBwYXJlbnQpOwoKICAgICAgICBfdHJhdmVyc2UoY2hpbGQsIGNhbGxiYWNrKTsKICAgICAgfSk7CiAgICB9CgogICAgX3RyYXZlcnNlKHRoaXMsIGNhbGxiYWNrKTsKICB9OwogIC8qKgogICAqIFJlY3Vyc2l2ZWx5IHRyYW5zZm9ybSBhIG5vZGUgdHJlZSB2aWEgYSB0cmFuc2Zvcm0gZnVuY3Rpb24uCiAgICoKICAgKiBGb3IgZXhhbXBsZSwgdG8gcmVwbGFjZSBhbGwgbm9kZXMgb2YgdHlwZSBTeW1ib2xOb2RlIGhhdmluZyBuYW1lICd4JyB3aXRoIGEKICAgKiBDb25zdGFudE5vZGUgd2l0aCB2YWx1ZSAyOgogICAqCiAgICogICAgIGNvbnN0IHJlcyA9IE5vZGUudHJhbnNmb3JtKGZ1bmN0aW9uIChub2RlLCBwYXRoLCBwYXJlbnQpIHsKICAgKiAgICAgICBpZiAobm9kZSAmJiBub2RlLmlzU3ltYm9sTm9kZSkgJiYgKG5vZGUubmFtZSA9PT0gJ3gnKSkgewogICAqICAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudE5vZGUoMikKICAgKiAgICAgICB9CiAgICogICAgICAgZWxzZSB7CiAgICogICAgICAgICByZXR1cm4gbm9kZQogICAqICAgICAgIH0KICAgKiAgICAgfSkKICAgKgogICAqIEBwYXJhbSB7ZnVuY3Rpb24obm9kZTogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpIDogTm9kZX0gY2FsbGJhY2sKICAgKiAgICAgICAgICBBIG1hcHBpbmcgZnVuY3Rpb24gYWNjZXB0aW5nIGEgbm9kZSwgYW5kIHJldHVybmluZwogICAqICAgICAgICAgIGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBub2RlIG9yIHRoZSBvcmlnaW5hbCBub2RlLgogICAqICAgICAgICAgIFNpZ25hdHVyZTogY2FsbGJhY2sobm9kZTogTm9kZSwgaW5kZXg6IHN0cmluZywgcGFyZW50OiBOb2RlKSA6IE5vZGUKICAgKiBAcmV0dXJuIHtOb2RlfSBSZXR1cm5zIHRoZSBvcmlnaW5hbCBub2RlIG9yIGl0cyByZXBsYWNlbWVudAogICAqLwoKCiAgTm9kZS5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICBmdW5jdGlvbiBfdHJhbnNmb3JtKGNoaWxkLCBwYXRoLCBwYXJlbnQpIHsKICAgICAgdmFyIHJlcGxhY2VtZW50ID0gY2FsbGJhY2soY2hpbGQsIHBhdGgsIHBhcmVudCk7CgogICAgICBpZiAocmVwbGFjZW1lbnQgIT09IGNoaWxkKSB7CiAgICAgICAgLy8gc3RvcCBpdGVyYXRpbmcgd2hlbiB0aGUgbm9kZSBpcyByZXBsYWNlZAogICAgICAgIHJldHVybiByZXBsYWNlbWVudDsKICAgICAgfQoKICAgICAgcmV0dXJuIGNoaWxkLm1hcChfdHJhbnNmb3JtKTsKICAgIH0KCiAgICByZXR1cm4gX3RyYW5zZm9ybSh0aGlzLCBudWxsLCBudWxsKTsKICB9OwogIC8qKgogICAqIEZpbmQgYW55IG5vZGUgaW4gdGhlIG5vZGUgdHJlZSBtYXRjaGluZyBnaXZlbiBmaWx0ZXIgZnVuY3Rpb24uIEZvciBleGFtcGxlLCB0bwogICAqIGZpbmQgYWxsIG5vZGVzIG9mIHR5cGUgU3ltYm9sTm9kZSBoYXZpbmcgbmFtZSAneCc6CiAgICoKICAgKiAgICAgY29uc3QgcmVzdWx0cyA9IE5vZGUuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7CiAgICogICAgICAgcmV0dXJuIChub2RlICYmIG5vZGUuaXNTeW1ib2xOb2RlKSAmJiAobm9kZS5uYW1lID09PSAneCcpCiAgICogICAgIH0pCiAgICoKICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG5vZGU6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKSA6IE5vZGV9IGNhbGxiYWNrCiAgICogICAgICAgICAgICBBIHRlc3QgZnVuY3Rpb24gcmV0dXJuaW5nIHRydWUgd2hlbiBhIG5vZGUgbWF0Y2hlcywgYW5kIGZhbHNlCiAgICogICAgICAgICAgICBvdGhlcndpc2UuIEZ1bmN0aW9uIHNpZ25hdHVyZToKICAgKiAgICAgICAgICAgIGNhbGxiYWNrKG5vZGU6IE5vZGUsIGluZGV4OiBzdHJpbmcsIHBhcmVudDogTm9kZSkgOiBib29sZWFuCiAgICogQHJldHVybiB7Tm9kZVtdfSBub2RlcyAgICAgICBBbiBhcnJheSB3aXRoIG5vZGVzIG1hdGNoaW5nIGdpdmVuIGZpbHRlciBjcml0ZXJpYQogICAqLwoKCiAgTm9kZS5wcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICB2YXIgbm9kZXMgPSBbXTsKICAgIHRoaXMudHJhdmVyc2UoZnVuY3Rpb24gKG5vZGUsIHBhdGgsIHBhcmVudCkgewogICAgICBpZiAoY2FsbGJhY2sobm9kZSwgcGF0aCwgcGFyZW50KSkgewogICAgICAgIG5vZGVzLnB1c2gobm9kZSk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIG5vZGVzOwogIH07IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAxLjEuMCwgcmVtb3ZlIHRoaXMgc29tZSBkYXkKCgogIE5vZGUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbiAoKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uIE5vZGUuZmluZCBpcyBkZXByZWNhdGVkLiBVc2UgTm9kZS5maWx0ZXIgaW5zdGVhZC4nKTsKICB9OyAvLyBUT0RPOiBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMS4xLjAsIHJlbW92ZSB0aGlzIHNvbWUgZGF5CgoKICBOb2RlLnByb3RvdHlwZS5tYXRjaCA9IGZ1bmN0aW9uICgpIHsKICAgIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gTm9kZS5tYXRjaCBpcyBkZXByZWNhdGVkLiBTZWUgZnVuY3Rpb25zIE5vZGUuZmlsdGVyLCBOb2RlLnRyYW5zZm9ybSwgTm9kZS50cmF2ZXJzZS4nKTsKICB9OwogIC8qKgogICAqIENyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhpcyBub2RlCiAgICogQHJldHVybiB7Tm9kZX0KICAgKi8KCgogIE5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgewogICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBOb2RlIGltcGxlbWVudGF0aW9ucwogICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2xvbmUgYSBOb2RlIGludGVyZmFjZScpOwogIH07CiAgLyoqCiAgICogQ3JlYXRlIGEgZGVlcCBjbG9uZSBvZiB0aGlzIG5vZGUKICAgKiBAcmV0dXJuIHtOb2RlfQogICAqLwoKCiAgTm9kZS5wcm90b3R5cGUuY2xvbmVEZWVwID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChub2RlKSB7CiAgICAgIHJldHVybiBub2RlLmNsb25lRGVlcCgpOwogICAgfSk7CiAgfTsKICAvKioKICAgKiBEZWVwIGNvbXBhcmUgdGhpcyBub2RlIHdpdGggYW5vdGhlciBub2RlLgogICAqIEBwYXJhbSB7Tm9kZX0gb3RoZXIKICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBib3RoIG5vZGVzIGFyZSBvZiB0aGUgc2FtZSB0eXBlIGFuZAogICAqICAgICAgICAgICAgICAgICAgIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWVzIChhcyBkbyB0aGVpciBjaGlsZHMpCiAgICovCgoKICBOb2RlLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAob3RoZXIpIHsKICAgIHJldHVybiBvdGhlciA/IE9iamVjdCh1dGlsc19vYmplY3RbImQiIC8qIGRlZXBTdHJpY3RFcXVhbCAqL10pKHRoaXMsIG90aGVyKSA6IGZhbHNlOwogIH07CiAgLyoqCiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbi4gKHdyYXBwZXIgZnVuY3Rpb24pCiAgICoKICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBnZXQgYW4gb2JqZWN0IG9mIHRoZSBmb2xsb3dpbmcgZm9ybToKICAgKiB7CiAgICogICAgaGFuZGxlcjogLy9UaGlzIGNhbiBiZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIHRoZSBmb3JtCiAgICogICAgICAgICAgICAgLy8gImZ1bmN0aW9uIGNhbGxiYWNrKG5vZGUsIG9wdGlvbnMpIm9yCiAgICogICAgICAgICAgICAgLy8gYSBtYXAgdGhhdCBtYXBzIGZ1bmN0aW9uIG5hbWVzICh1c2VkIGluIEZ1bmN0aW9uTm9kZXMpCiAgICogICAgICAgICAgICAgLy8gdG8gY2FsbGJhY2tzCiAgICogICAgcGFyZW50aGVzaXM6ICJrZWVwIiAvL3RoZSBwYXJlbnRoZXNpcyBvcHRpb24gKFRoaXMgaXMgb3B0aW9uYWwpCiAgICogfQogICAqCiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXQogICAqIEByZXR1cm4ge3N0cmluZ30KICAgKi8KCgogIE5vZGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgIHZhciBjdXN0b21TdHJpbmc7CgogICAgaWYgKG9wdGlvbnMgJiYgTm9kZV90eXBlb2Yob3B0aW9ucykgPT09ICdvYmplY3QnKSB7CiAgICAgIHN3aXRjaCAoTm9kZV90eXBlb2Yob3B0aW9ucy5oYW5kbGVyKSkgewogICAgICAgIGNhc2UgJ29iamVjdCc6CiAgICAgICAgY2FzZSAndW5kZWZpbmVkJzoKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdmdW5jdGlvbic6CiAgICAgICAgICBjdXN0b21TdHJpbmcgPSBvcHRpb25zLmhhbmRsZXIodGhpcywgb3B0aW9ucyk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCBvciBmdW5jdGlvbiBleHBlY3RlZCBhcyBjYWxsYmFjaycpOwogICAgICB9CiAgICB9CgogICAgaWYgKHR5cGVvZiBjdXN0b21TdHJpbmcgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgIHJldHVybiBjdXN0b21TdHJpbmc7CiAgICB9CgogICAgcmV0dXJuIHRoaXMuX3RvU3RyaW5nKG9wdGlvbnMpOwogIH07CiAgLyoqCiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZQogICAqIEJvdGggLnRvSlNPTigpIGFuZCB0aGUgc3RhdGljIC5mcm9tSlNPTihqc29uKSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgYWxsCiAgICogaW1wbGVtZW50YXRpb25zIG9mIE5vZGUKICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAqLwoKCiAgTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkgewogICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc2VyaWFsaXplIG9iamVjdDogdG9KU09OIG5vdCBpbXBsZW1lbnRlZCBieSAnICsgdGhpcy50eXBlKTsKICB9OwogIC8qKgogICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uLiAod3JhcHBlciBmdW5jdGlvbikKICAgKgogICAqIFRoaXMgZnVuY3Rpb24gY2FuIGdldCBhbiBvYmplY3Qgb2YgdGhlIGZvbGxvd2luZyBmb3JtOgogICAqIHsKICAgKiAgICBoYW5kbGVyOiAvL1RoaXMgY2FuIGJlIGEgY2FsbGJhY2sgZnVuY3Rpb24gb2YgdGhlIGZvcm0KICAgKiAgICAgICAgICAgICAvLyAiZnVuY3Rpb24gY2FsbGJhY2sobm9kZSwgb3B0aW9ucykiIG9yCiAgICogICAgICAgICAgICAgLy8gYSBtYXAgdGhhdCBtYXBzIGZ1bmN0aW9uIG5hbWVzICh1c2VkIGluIEZ1bmN0aW9uTm9kZXMpCiAgICogICAgICAgICAgICAgLy8gdG8gY2FsbGJhY2tzCiAgICogICAgcGFyZW50aGVzaXM6ICJrZWVwIiAvL3RoZSBwYXJlbnRoZXNpcyBvcHRpb24gKFRoaXMgaXMgb3B0aW9uYWwpCiAgICogfQogICAqCiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXQogICAqIEByZXR1cm4ge3N0cmluZ30KICAgKi8KCgogIE5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICB2YXIgY3VzdG9tU3RyaW5nOwoKICAgIGlmIChvcHRpb25zICYmIE5vZGVfdHlwZW9mKG9wdGlvbnMpID09PSAnb2JqZWN0JykgewogICAgICBzd2l0Y2ggKE5vZGVfdHlwZW9mKG9wdGlvbnMuaGFuZGxlcikpIHsKICAgICAgICBjYXNlICdvYmplY3QnOgogICAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOgogICAgICAgICAgY3VzdG9tU3RyaW5nID0gb3B0aW9ucy5oYW5kbGVyKHRoaXMsIG9wdGlvbnMpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qgb3IgZnVuY3Rpb24gZXhwZWN0ZWQgYXMgY2FsbGJhY2snKTsKICAgICAgfQogICAgfQoKICAgIGlmICh0eXBlb2YgY3VzdG9tU3RyaW5nICE9PSAndW5kZWZpbmVkJykgewogICAgICByZXR1cm4gY3VzdG9tU3RyaW5nOwogICAgfQoKICAgIHJldHVybiB0aGlzLnRvSFRNTChvcHRpb25zKTsKICB9OwogIC8qKgogICAqIEludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBzdHJpbmcgb3V0cHV0LgogICAqIFRoaXMgaGFzIHRvIGJlIGltcGxlbWVudGVkIGJ5IGV2ZXJ5IE5vZGUKICAgKgogICAqIEB0aHJvd3Mge0Vycm9yfQogICAqLwoKCiAgTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKCkgewogICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBOb2RlIGltcGxlbWVudGF0aW9ucwogICAgdGhyb3cgbmV3IEVycm9yKCdfdG9TdHJpbmcgbm90IGltcGxlbWVudGVkIGZvciAnICsgdGhpcy50eXBlKTsKICB9OwogIC8qKgogICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvbi4gKHdyYXBwZXIgZnVuY3Rpb24pCiAgICoKICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBnZXQgYW4gb2JqZWN0IG9mIHRoZSBmb2xsb3dpbmcgZm9ybToKICAgKiB7CiAgICogICAgaGFuZGxlcjogLy9UaGlzIGNhbiBiZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIHRoZSBmb3JtCiAgICogICAgICAgICAgICAgLy8gImZ1bmN0aW9uIGNhbGxiYWNrKG5vZGUsIG9wdGlvbnMpIm9yCiAgICogICAgICAgICAgICAgLy8gYSBtYXAgdGhhdCBtYXBzIGZ1bmN0aW9uIG5hbWVzICh1c2VkIGluIEZ1bmN0aW9uTm9kZXMpCiAgICogICAgICAgICAgICAgLy8gdG8gY2FsbGJhY2tzCiAgICogICAgcGFyZW50aGVzaXM6ICJrZWVwIiAvL3RoZSBwYXJlbnRoZXNpcyBvcHRpb24gKFRoaXMgaXMgb3B0aW9uYWwpCiAgICogfQogICAqCiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXQogICAqIEByZXR1cm4ge3N0cmluZ30KICAgKi8KCgogIE5vZGUucHJvdG90eXBlLnRvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgIHZhciBjdXN0b21UZXg7CgogICAgaWYgKG9wdGlvbnMgJiYgTm9kZV90eXBlb2Yob3B0aW9ucykgPT09ICdvYmplY3QnKSB7CiAgICAgIHN3aXRjaCAoTm9kZV90eXBlb2Yob3B0aW9ucy5oYW5kbGVyKSkgewogICAgICAgIGNhc2UgJ29iamVjdCc6CiAgICAgICAgY2FzZSAndW5kZWZpbmVkJzoKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdmdW5jdGlvbic6CiAgICAgICAgICBjdXN0b21UZXggPSBvcHRpb25zLmhhbmRsZXIodGhpcywgb3B0aW9ucyk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCBvciBmdW5jdGlvbiBleHBlY3RlZCBhcyBjYWxsYmFjaycpOwogICAgICB9CiAgICB9CgogICAgaWYgKHR5cGVvZiBjdXN0b21UZXggIT09ICd1bmRlZmluZWQnKSB7CiAgICAgIHJldHVybiBjdXN0b21UZXg7CiAgICB9CgogICAgcmV0dXJuIHRoaXMuX3RvVGV4KG9wdGlvbnMpOwogIH07CiAgLyoqCiAgICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIExhVGVYIG91dHB1dC4KICAgKiBUaGlzIGhhcyB0byBiZSBpbXBsZW1lbnRlZCBieSBldmVyeSBOb2RlCiAgICoKICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdCiAgICogQHRocm93cyB7RXJyb3J9CiAgICovCgoKICBOb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBOb2RlIGltcGxlbWVudGF0aW9ucwogICAgdGhyb3cgbmV3IEVycm9yKCdfdG9UZXggbm90IGltcGxlbWVudGVkIGZvciAnICsgdGhpcy50eXBlKTsKICB9OwogIC8qKgogICAqIEdldCBpZGVudGlmaWVyLgogICAqIEByZXR1cm4ge3N0cmluZ30KICAgKi8KCgogIE5vZGUucHJvdG90eXBlLmdldElkZW50aWZpZXIgPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gdGhpcy50eXBlOwogIH07CiAgLyoqCiAgICogR2V0IHRoZSBjb250ZW50IG9mIHRoZSBjdXJyZW50IE5vZGUuCiAgICogQHJldHVybiB7Tm9kZX0gbm9kZQogICAqKi8KCgogIE5vZGUucHJvdG90eXBlLmdldENvbnRlbnQgPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gdGhpczsKICB9OwogIC8qKgogICAqIFZhbGlkYXRlIHRoZSBzeW1ib2wgbmFtZXMgb2YgYSBzY29wZS4KICAgKiBUaHJvd3MgYW4gZXJyb3Igd2hlbiB0aGUgc2NvcGUgY29udGFpbnMgYW4gaWxsZWdhbCBzeW1ib2wuCiAgICogQHBhcmFtIHtPYmplY3R9IHNjb3BlCiAgICovCgoKICBmdW5jdGlvbiBfdmFsaWRhdGVTY29wZShzY29wZSkgewogICAgZm9yICh2YXIgc3ltYm9sIGluIHNjb3BlKSB7CiAgICAgIGlmIChPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKHNjb3BlLCBzeW1ib2wpKSB7CiAgICAgICAgaWYgKHN5bWJvbCBpbiBrZXl3b3JkcykgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTY29wZSBjb250YWlucyBhbiBpbGxlZ2FsIHN5bWJvbCwgIicgKyBzeW1ib2wgKyAnIiBpcyBhIHJlc2VydmVkIGtleXdvcmQnKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIHJldHVybiBOb2RlOwp9LCB7CiAgaXNDbGFzczogdHJ1ZSwKICBpc05vZGU6IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vdHJhbnNmb3JtL3V0aWxzL2Vycm9yVHJhbnNmb3JtLmpzCgovKioKICogVHJhbnNmb3JtIHplcm8tYmFzZWQgaW5kaWNlcyB0byBvbmUtYmFzZWQgaW5kaWNlcyBpbiBlcnJvcnMKICogQHBhcmFtIHtFcnJvcn0gZXJyCiAqIEByZXR1cm5zIHtFcnJvciB8IEluZGV4RXJyb3J9IFJldHVybnMgdGhlIHRyYW5zZm9ybWVkIGVycm9yCiAqLwoKZnVuY3Rpb24gZXJyb3JUcmFuc2Zvcm0oZXJyKSB7CiAgaWYgKGVyciAmJiBlcnIuaXNJbmRleEVycm9yKSB7CiAgICByZXR1cm4gbmV3IEluZGV4RXJyb3JbImEiIC8qIEluZGV4RXJyb3IgKi9dKGVyci5pbmRleCArIDEsIGVyci5taW4gKyAxLCBlcnIubWF4ICE9PSB1bmRlZmluZWQgPyBlcnIubWF4ICsgMSA6IHVuZGVmaW5lZCk7CiAgfQoKICByZXR1cm4gZXJyOwp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vbm9kZS91dGlscy9hY2Nlc3MuanMKZnVuY3Rpb24gYWNjZXNzX3R5cGVvZihvYmopIHsgIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gInN5bWJvbCIpIHsgYWNjZXNzX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBhY2Nlc3NfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/ICJzeW1ib2wiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gYWNjZXNzX3R5cGVvZihvYmopOyB9CgoKCmZ1bmN0aW9uIGFjY2Vzc0ZhY3RvcnkoX3JlZikgewogIHZhciBzdWJzZXQgPSBfcmVmLnN1YnNldDsKCiAgLyoqCiAgICogUmV0cmlldmUgcGFydCBvZiBhbiBvYmplY3Q6CiAgICoKICAgKiAtIFJldHJpZXZlIGEgcHJvcGVydHkgZnJvbSBhbiBvYmplY3QKICAgKiAtIFJldHJpZXZlIGEgcGFydCBvZiBhIHN0cmluZwogICAqIC0gUmV0cmlldmUgYSBtYXRyaXggc3Vic2V0CiAgICoKICAgKiBAcGFyYW0ge09iamVjdCB8IEFycmF5IHwgTWF0cml4IHwgc3RyaW5nfSBvYmplY3QKICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleAogICAqIEByZXR1cm4ge09iamVjdCB8IEFycmF5IHwgTWF0cml4IHwgc3RyaW5nfSBSZXR1cm5zIHRoZSBzdWJzZXQKICAgKi8KICByZXR1cm4gZnVuY3Rpb24gYWNjZXNzKG9iamVjdCwgaW5kZXgpIHsKICAgIHRyeSB7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHsKICAgICAgICByZXR1cm4gc3Vic2V0KG9iamVjdCwgaW5kZXgpOwogICAgICB9IGVsc2UgaWYgKG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0LnN1YnNldCA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgIC8vIE1hdHJpeAogICAgICAgIHJldHVybiBvYmplY3Quc3Vic2V0KGluZGV4KTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJykgewogICAgICAgIC8vIFRPRE86IG1vdmUgZ2V0U3RyaW5nU3Vic2V0IGludG8gYSBzZXBhcmF0ZSB1dGlsIGZpbGUsIHVzZSB0aGF0CiAgICAgICAgcmV0dXJuIHN1YnNldChvYmplY3QsIGluZGV4KTsKICAgICAgfSBlbHNlIGlmIChhY2Nlc3NfdHlwZW9mKG9iamVjdCkgPT09ICdvYmplY3QnKSB7CiAgICAgICAgaWYgKCFpbmRleC5pc09iamVjdFByb3BlcnR5KCkpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBhcHBseSBhIG51bWVyaWMgaW5kZXggYXMgb2JqZWN0IHByb3BlcnR5Jyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZ2V0U2FmZVByb3BlcnR5KG9iamVjdCwgaW5kZXguZ2V0T2JqZWN0UHJvcGVydHkoKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGFwcGx5IGluZGV4OiB1bnN1cHBvcnRlZCB0eXBlIG9mIG9iamVjdCcpOwogICAgICB9CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgdGhyb3cgZXJyb3JUcmFuc2Zvcm0oZXJyKTsKICAgIH0KICB9Owp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vbm9kZS9BY2Nlc3Nvck5vZGUuanMKCgoKCnZhciBBY2Nlc3Nvck5vZGVfbmFtZSA9ICdBY2Nlc3Nvck5vZGUnOwp2YXIgQWNjZXNzb3JOb2RlX2RlcGVuZGVuY2llcyA9IFsnc3Vic2V0JywgJ05vZGUnXTsKdmFyIGNyZWF0ZUFjY2Vzc29yTm9kZSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKEFjY2Vzc29yTm9kZV9uYW1lLCBBY2Nlc3Nvck5vZGVfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciBzdWJzZXQgPSBfcmVmLnN1YnNldCwKICAgICAgTm9kZSA9IF9yZWYuTm9kZTsKICB2YXIgYWNjZXNzID0gYWNjZXNzRmFjdG9yeSh7CiAgICBzdWJzZXQ6IHN1YnNldAogIH0pOwogIC8qKgogICAqIEBjb25zdHJ1Y3RvciBBY2Nlc3Nvck5vZGUKICAgKiBAZXh0ZW5kcyB7Tm9kZX0KICAgKiBBY2Nlc3MgYW4gb2JqZWN0IHByb3BlcnR5IG9yIGdldCBhIG1hdHJpeCBzdWJzZXQKICAgKgogICAqIEBwYXJhbSB7Tm9kZX0gb2JqZWN0ICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IGZyb20gd2hpY2ggdG8gcmV0cmlldmUKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBwcm9wZXJ0eSBvciBzdWJzZXQuCiAgICogQHBhcmFtIHtJbmRleE5vZGV9IGluZGV4ICAgICAgICAgICAgIEluZGV4Tm9kZSBjb250YWluaW5nIHJhbmdlcwogICAqLwoKICBmdW5jdGlvbiBBY2Nlc3Nvck5vZGUob2JqZWN0LCBpbmRleCkgewogICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEFjY2Vzc29yTm9kZSkpIHsKICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTsKICAgIH0KCiAgICBpZiAoIU9iamVjdChpc1sidyIgLyogaXNOb2RlICovXSkob2JqZWN0KSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgIm9iamVjdCInKTsKICAgIH0KCiAgICBpZiAoIU9iamVjdChpc1sidSIgLyogaXNJbmRleE5vZGUgKi9dKShpbmRleCkpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5kZXhOb2RlIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgImluZGV4IicpOwogICAgfQoKICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0IHx8IG51bGw7CiAgICB0aGlzLmluZGV4ID0gaW5kZXg7IC8vIHJlYWRvbmx5IHByb3BlcnR5IG5hbWUKCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ25hbWUnLCB7CiAgICAgIGdldDogZnVuY3Rpb24gKCkgewogICAgICAgIGlmICh0aGlzLmluZGV4KSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleC5pc09iamVjdFByb3BlcnR5KCkgPyB0aGlzLmluZGV4LmdldE9iamVjdFByb3BlcnR5KCkgOiAnJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0Lm5hbWUgfHwgJyc7CiAgICAgICAgfQogICAgICB9LmJpbmQodGhpcyksCiAgICAgIHNldDogZnVuY3Rpb24gc2V0KCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFzc2lnbiBhIG5ldyBuYW1lLCBuYW1lIGlzIHJlYWQtb25seScpOwogICAgICB9CiAgICB9KTsKICB9CgogIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpOwogIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUudHlwZSA9ICdBY2Nlc3Nvck5vZGUnOwogIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUuaXNBY2Nlc3Nvck5vZGUgPSB0cnVlOwogIC8qKgogICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLgogICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW4KICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy4KICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy4KICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWAKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemUKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLgogICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOgogICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKQogICAqLwoKICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7CiAgICB2YXIgZXZhbE9iamVjdCA9IHRoaXMub2JqZWN0Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTsKCiAgICB2YXIgZXZhbEluZGV4ID0gdGhpcy5pbmRleC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7CgogICAgaWYgKHRoaXMuaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpKSB7CiAgICAgIHZhciBwcm9wID0gdGhpcy5pbmRleC5nZXRPYmplY3RQcm9wZXJ0eSgpOwogICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEFjY2Vzc29yTm9kZShzY29wZSwgYXJncywgY29udGV4dCkgewogICAgICAgIHJldHVybiBnZXRTYWZlUHJvcGVydHkoZXZhbE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCksIHByb3ApOwogICAgICB9OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBY2Nlc3Nvck5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHsKICAgICAgICB2YXIgb2JqZWN0ID0gZXZhbE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCk7CiAgICAgICAgdmFyIGluZGV4ID0gZXZhbEluZGV4KHNjb3BlLCBhcmdzLCBvYmplY3QpOyAvLyB3ZSBwYXNzIG9iamVjdCBoZXJlIGluc3RlYWQgb2YgY29udGV4dAoKICAgICAgICByZXR1cm4gYWNjZXNzKG9iamVjdCwgaW5kZXgpOwogICAgICB9OwogICAgfQogIH07CiAgLyoqCiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGUKICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrCiAgICovCgoKICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgIGNhbGxiYWNrKHRoaXMub2JqZWN0LCAnb2JqZWN0JywgdGhpcyk7CiAgICBjYWxsYmFjayh0aGlzLmluZGV4LCAnaW5kZXgnLCB0aGlzKTsKICB9OwogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBBY2Nlc3Nvck5vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmcKICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS4KICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrCiAgICogQHJldHVybnMge0FjY2Vzc29yTm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGUKICAgKi8KCgogIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICByZXR1cm4gbmV3IEFjY2Vzc29yTm9kZSh0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5vYmplY3QsICdvYmplY3QnLCB0aGlzKSksIHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLmluZGV4LCAnaW5kZXgnLCB0aGlzKSkpOwogIH07CiAgLyoqCiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weQogICAqIEByZXR1cm4ge0FjY2Vzc29yTm9kZX0KICAgKi8KCgogIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gbmV3IEFjY2Vzc29yTm9kZSh0aGlzLm9iamVjdCwgdGhpcy5pbmRleCk7CiAgfTsKICAvKioKICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKICAgKiBAcmV0dXJuIHtzdHJpbmd9CiAgICovCgoKICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLl90b1N0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICB2YXIgb2JqZWN0ID0gdGhpcy5vYmplY3QudG9TdHJpbmcob3B0aW9ucyk7CgogICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLm9iamVjdCkpIHsKICAgICAgb2JqZWN0ID0gJygnICsgb2JqZWN0ICsgJyknOwogICAgfQoKICAgIHJldHVybiBvYmplY3QgKyB0aGlzLmluZGV4LnRvU3RyaW5nKG9wdGlvbnMpOwogIH07CiAgLyoqCiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb24KICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwogICAqIEByZXR1cm4ge3N0cmluZ30KICAgKi8KCgogIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgIHZhciBvYmplY3QgPSB0aGlzLm9iamVjdC50b0hUTUwob3B0aW9ucyk7CgogICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLm9iamVjdCkpIHsKICAgICAgb2JqZWN0ID0gJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPig8L3NwYW4+JyArIG9iamVjdCArICc8c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzIj4pPC9zcGFuPic7CiAgICB9CgogICAgcmV0dXJuIG9iamVjdCArIHRoaXMuaW5kZXgudG9IVE1MKG9wdGlvbnMpOwogIH07CiAgLyoqCiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKICAgKiBAcmV0dXJuIHtzdHJpbmd9CiAgICovCgoKICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICB2YXIgb2JqZWN0ID0gdGhpcy5vYmplY3QudG9UZXgob3B0aW9ucyk7CgogICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLm9iamVjdCkpIHsKICAgICAgb2JqZWN0ID0gJ1xcbGVmdChcJyArIG9iamVjdCArIFwnXFxyaWdodCknOwogICAgfQoKICAgIHJldHVybiBvYmplY3QgKyB0aGlzLmluZGV4LnRvVGV4KG9wdGlvbnMpOwogIH07CiAgLyoqCiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZQogICAqIEByZXR1cm5zIHtPYmplY3R9CiAgICovCgoKICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB7CiAgICAgIG1hdGhqczogJ0FjY2Vzc29yTm9kZScsCiAgICAgIG9iamVjdDogdGhpcy5vYmplY3QsCiAgICAgIGluZGV4OiB0aGlzLmluZGV4CiAgICB9OwogIH07CiAgLyoqCiAgICogSW5zdGFudGlhdGUgYW4gQWNjZXNzb3JOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb24KICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZQogICAqICAgICAgICAgICAgICAgICAgICAgICBgeyJtYXRoanMiOiAiQWNjZXNzb3JOb2RlIiwgb2JqZWN0OiAuLi4sIGluZGV4OiAuLi59YCwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsCiAgICogQHJldHVybnMge0FjY2Vzc29yTm9kZX0KICAgKi8KCgogIEFjY2Vzc29yTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7CiAgICByZXR1cm4gbmV3IEFjY2Vzc29yTm9kZShqc29uLm9iamVjdCwganNvbi5pbmRleCk7CiAgfTsKICAvKioKICAgKiBBcmUgcGFyZW50aGVzaXMgbmVlZGVkPwogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBuZWVkUGFyZW50aGVzaXMobm9kZSkgewogICAgLy8gVE9ETzogbWF5YmUgbWFrZSBhIG1ldGhvZCBvbiB0aGUgbm9kZXMgd2hpY2ggdGVsbHMgd2hldGhlciB0aGV5IG5lZWQgcGFyZW50aGVzaXM/CiAgICByZXR1cm4gIShPYmplY3QoaXNbImEiIC8qIGlzQWNjZXNzb3JOb2RlICovXSkobm9kZSkgfHwgT2JqZWN0KGlzWyJjIiAvKiBpc0FycmF5Tm9kZSAqL10pKG5vZGUpIHx8IE9iamVjdChpc1sibCIgLyogaXNDb25zdGFudE5vZGUgKi9dKShub2RlKSB8fCBPYmplY3QoaXNbInIiIC8qIGlzRnVuY3Rpb25Ob2RlICovXSkobm9kZSkgfHwgT2JqZWN0KGlzWyJBIiAvKiBpc09iamVjdE5vZGUgKi9dKShub2RlKSB8fCBPYmplY3QoaXNbIkMiIC8qIGlzUGFyZW50aGVzaXNOb2RlICovXSkobm9kZSkgfHwgT2JqZWN0KGlzWyJKIiAvKiBpc1N5bWJvbE5vZGUgKi9dKShub2RlKSk7CiAgfQoKICByZXR1cm4gQWNjZXNzb3JOb2RlOwp9LCB7CiAgaXNDbGFzczogdHJ1ZSwKICBpc05vZGU6IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vbm9kZS9BcnJheU5vZGUuanMKCgoKdmFyIEFycmF5Tm9kZV9uYW1lID0gJ0FycmF5Tm9kZSc7CnZhciBBcnJheU5vZGVfZGVwZW5kZW5jaWVzID0gWydOb2RlJ107CnZhciBjcmVhdGVBcnJheU5vZGUgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShBcnJheU5vZGVfbmFtZSwgQXJyYXlOb2RlX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgTm9kZSA9IF9yZWYuTm9kZTsKCiAgLyoqCiAgICogQGNvbnN0cnVjdG9yIEFycmF5Tm9kZQogICAqIEBleHRlbmRzIHtOb2RlfQogICAqIEhvbGRzIGFuIDEtZGltZW5zaW9uYWwgYXJyYXkgd2l0aCBpdGVtcwogICAqIEBwYXJhbSB7Tm9kZVtdfSBbaXRlbXNdICAgMSBkaW1lbnNpb25hbCBhcnJheSB3aXRoIGl0ZW1zCiAgICovCiAgZnVuY3Rpb24gQXJyYXlOb2RlKGl0ZW1zKSB7CiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQXJyYXlOb2RlKSkgewogICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpOwogICAgfQoKICAgIHRoaXMuaXRlbXMgPSBpdGVtcyB8fCBbXTsgLy8gdmFsaWRhdGUgaW5wdXQKCiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5pdGVtcykgfHwgIXRoaXMuaXRlbXMuZXZlcnkoaXNbInciIC8qIGlzTm9kZSAqL10pKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGNvbnRhaW5pbmcgTm9kZXMgZXhwZWN0ZWQnKTsKICAgIH0gLy8gVE9ETzogZGVwcmVjYXRlZCBzaW5jZSB2MywgcmVtb3ZlIHNvbWUgZGF5CgoKICAgIHZhciBkZXByZWNhdGVkID0gZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0eSBgQXJyYXlOb2RlLm5vZGVzYCBpcyBkZXByZWNhdGVkLCB1c2UgYEFycmF5Tm9kZS5pdGVtc2AgaW5zdGVhZCcpOwogICAgfTsKCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ25vZGVzJywgewogICAgICBnZXQ6IGRlcHJlY2F0ZWQsCiAgICAgIHNldDogZGVwcmVjYXRlZAogICAgfSk7CiAgfQoKICBBcnJheU5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTsKICBBcnJheU5vZGUucHJvdG90eXBlLnR5cGUgPSAnQXJyYXlOb2RlJzsKICBBcnJheU5vZGUucHJvdG90eXBlLmlzQXJyYXlOb2RlID0gdHJ1ZTsKICAvKioKICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi4KICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuCiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuCiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuCiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9ucwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9scwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS4KICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZToKICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKikKICAgKi8KCiAgQXJyYXlOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykgewogICAgdmFyIGV2YWxJdGVtcyA9IE9iamVjdCh1dGlsc19hcnJheVsibSIgLyogbWFwICovXSkodGhpcy5pdGVtcywgZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgcmV0dXJuIGl0ZW0uX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpOwogICAgfSk7CiAgICB2YXIgYXNNYXRyaXggPSBtYXRoLmNvbmZpZy5tYXRyaXggIT09ICdBcnJheSc7CgogICAgaWYgKGFzTWF0cml4KSB7CiAgICAgIHZhciBtYXRyaXggPSBtYXRoLm1hdHJpeDsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBcnJheU5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHsKICAgICAgICByZXR1cm4gbWF0cml4KE9iamVjdCh1dGlsc19hcnJheVsibSIgLyogbWFwICovXSkoZXZhbEl0ZW1zLCBmdW5jdGlvbiAoZXZhbEl0ZW0pIHsKICAgICAgICAgIHJldHVybiBldmFsSXRlbShzY29wZSwgYXJncywgY29udGV4dCk7CiAgICAgICAgfSkpOwogICAgICB9OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBcnJheU5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHsKICAgICAgICByZXR1cm4gT2JqZWN0KHV0aWxzX2FycmF5WyJtIiAvKiBtYXAgKi9dKShldmFsSXRlbXMsIGZ1bmN0aW9uIChldmFsSXRlbSkgewogICAgICAgICAgcmV0dXJuIGV2YWxJdGVtKHNjb3BlLCBhcmdzLCBjb250ZXh0KTsKICAgICAgICB9KTsKICAgICAgfTsKICAgIH0KICB9OwogIC8qKgogICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlCiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFjawogICAqLwoKCiAgQXJyYXlOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIG5vZGUgPSB0aGlzLml0ZW1zW2ldOwogICAgICBjYWxsYmFjayhub2RlLCAnaXRlbXNbJyArIGkgKyAnXScsIHRoaXMpOwogICAgfQogIH07CiAgLyoqCiAgICogQ3JlYXRlIGEgbmV3IEFycmF5Tm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZwogICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLgogICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2sKICAgKiBAcmV0dXJucyB7QXJyYXlOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZQogICAqLwoKCiAgQXJyYXlOb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgIHZhciBpdGVtcyA9IFtdOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykgewogICAgICBpdGVtc1tpXSA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLml0ZW1zW2ldLCAnaXRlbXNbJyArIGkgKyAnXScsIHRoaXMpKTsKICAgIH0KCiAgICByZXR1cm4gbmV3IEFycmF5Tm9kZShpdGVtcyk7CiAgfTsKICAvKioKICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5CiAgICogQHJldHVybiB7QXJyYXlOb2RlfQogICAqLwoKCiAgQXJyYXlOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiBuZXcgQXJyYXlOb2RlKHRoaXMuaXRlbXMuc2xpY2UoMCkpOwogIH07CiAgLyoqCiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbgogICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICogQHJldHVybiB7c3RyaW5nfSBzdHIKICAgKiBAb3ZlcnJpZGUKICAgKi8KCgogIEFycmF5Tm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXMubWFwKGZ1bmN0aW9uIChub2RlKSB7CiAgICAgIHJldHVybiBub2RlLnRvU3RyaW5nKG9wdGlvbnMpOwogICAgfSk7CiAgICByZXR1cm4gJ1snICsgaXRlbXMuam9pbignLCAnKSArICddJzsKICB9OwogIC8qKgogICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUKICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAqLwoKCiAgQXJyYXlOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gewogICAgICBtYXRoanM6ICdBcnJheU5vZGUnLAogICAgICBpdGVtczogdGhpcy5pdGVtcwogICAgfTsKICB9OwogIC8qKgogICAqIEluc3RhbnRpYXRlIGFuIEFycmF5Tm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2UKICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHsibWF0aGpzIjogIkFycmF5Tm9kZSIsIGl0ZW1zOiBbLi4uXX1gLAogICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWwKICAgKiBAcmV0dXJucyB7QXJyYXlOb2RlfQogICAqLwoKCiAgQXJyYXlOb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHsKICAgIHJldHVybiBuZXcgQXJyYXlOb2RlKGpzb24uaXRlbXMpOwogIH07CiAgLyoqCiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb24KICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwogICAqIEByZXR1cm4ge3N0cmluZ30gc3RyCiAgICogQG92ZXJyaWRlCiAgICovCgoKICBBcnJheU5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zLm1hcChmdW5jdGlvbiAobm9kZSkgewogICAgICByZXR1cm4gbm9kZS50b0hUTUwob3B0aW9ucyk7CiAgICB9KTsKICAgIHJldHVybiAnPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1zcXVhcmUtcGFyZW50aGVzaXMiPls8L3NwYW4+JyArIGl0ZW1zLmpvaW4oJzxzcGFuIGNsYXNzPSJtYXRoLXNlcGFyYXRvciI+LDwvc3Bhbj4nKSArICc8c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXNxdWFyZS1wYXJlbnRoZXNpcyI+XTwvc3Bhbj4nOwogIH07CiAgLyoqCiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0cgogICAqLwoKCiAgQXJyYXlOb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgdmFyIHMgPSAnXFxiZWdpbntibWF0cml4fSc7CiAgICB0aGlzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHsKICAgICAgaWYgKG5vZGUuaXRlbXMpIHsKICAgICAgICBzICs9IG5vZGUuaXRlbXMubWFwKGZ1bmN0aW9uIChjaGlsZE5vZGUpIHsKICAgICAgICAgIHJldHVybiBjaGlsZE5vZGUudG9UZXgob3B0aW9ucyk7CiAgICAgICAgfSkuam9pbignJicpOwogICAgICB9IGVsc2UgewogICAgICAgIHMgKz0gbm9kZS50b1RleChvcHRpb25zKTsKICAgICAgfSAvLyBuZXcgbGluZQoKCiAgICAgIHMgKz0gJ1xcXFwnOwogICAgfSk7CiAgICBzICs9ICdcXGVuZHtibWF0cml4fSc7CiAgICByZXR1cm4gczsKICB9OwoKICByZXR1cm4gQXJyYXlOb2RlOwp9LCB7CiAgaXNDbGFzczogdHJ1ZSwKICBpc05vZGU6IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vbm9kZS91dGlscy9hc3NpZ24uanMKZnVuY3Rpb24gYXNzaWduX3R5cGVvZihvYmopIHsgIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gInN5bWJvbCIpIHsgYXNzaWduX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBhc3NpZ25fdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/ICJzeW1ib2wiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gYXNzaWduX3R5cGVvZihvYmopOyB9CgoKCmZ1bmN0aW9uIGFzc2lnbkZhY3RvcnkoX3JlZikgewogIHZhciBzdWJzZXQgPSBfcmVmLnN1YnNldCwKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXg7CgogIC8qKgogICAqIFJlcGxhY2UgcGFydCBvZiBhbiBvYmplY3Q6CiAgICoKICAgKiAtIEFzc2lnbiBhIHByb3BlcnR5IHRvIGFuIG9iamVjdAogICAqIC0gUmVwbGFjZSBhIHBhcnQgb2YgYSBzdHJpbmcKICAgKiAtIFJlcGxhY2UgYSBtYXRyaXggc3Vic2V0CiAgICoKICAgKiBAcGFyYW0ge09iamVjdCB8IEFycmF5IHwgTWF0cml4IHwgc3RyaW5nfSBvYmplY3QKICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleAogICAqIEBwYXJhbSB7Kn0gdmFsdWUKICAgKiBAcmV0dXJuIHtPYmplY3QgfCBBcnJheSB8IE1hdHJpeCB8IHN0cmluZ30gUmV0dXJucyB0aGUgb3JpZ2luYWwgb2JqZWN0CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBpbiBjYXNlIG9mIGEgc3RyaW5nCiAgICovCiAgLy8gVE9ETzogY2hhbmdlIGFzc2lnbiB0byByZXR1cm4gdGhlIHZhbHVlIGluc3RlYWQgb2YgdGhlIG9iamVjdAogIHJldHVybiBmdW5jdGlvbiBhc3NpZ24ob2JqZWN0LCBpbmRleCwgdmFsdWUpIHsKICAgIHRyeSB7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHsKICAgICAgICAvLyB3ZSB1c2UgbWF0cml4LnN1YnNldCBoZXJlIGluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIHN1YnNldCBiZWNhdXNlIHdlIG11c3Qgbm90IGNsb25lIHRoZSBjb250ZW50cwogICAgICAgIHJldHVybiBtYXRyaXgob2JqZWN0KS5zdWJzZXQoaW5kZXgsIHZhbHVlKS52YWx1ZU9mKCk7CiAgICAgIH0gZWxzZSBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3Quc3Vic2V0ID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgLy8gTWF0cml4CiAgICAgICAgcmV0dXJuIG9iamVjdC5zdWJzZXQoaW5kZXgsIHZhbHVlKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJykgewogICAgICAgIC8vIFRPRE86IG1vdmUgc2V0U3RyaW5nU3Vic2V0IGludG8gYSBzZXBhcmF0ZSB1dGlsIGZpbGUsIHVzZSB0aGF0CiAgICAgICAgcmV0dXJuIHN1YnNldChvYmplY3QsIGluZGV4LCB2YWx1ZSk7CiAgICAgIH0gZWxzZSBpZiAoYXNzaWduX3R5cGVvZihvYmplY3QpID09PSAnb2JqZWN0JykgewogICAgICAgIGlmICghaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpKSB7CiAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ0Nhbm5vdCBhcHBseSBhIG51bWVyaWMgaW5kZXggYXMgb2JqZWN0IHByb3BlcnR5Jyk7CiAgICAgICAgfQoKICAgICAgICBzZXRTYWZlUHJvcGVydHkob2JqZWN0LCBpbmRleC5nZXRPYmplY3RQcm9wZXJ0eSgpLCB2YWx1ZSk7CiAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgYXBwbHkgaW5kZXg6IHVuc3VwcG9ydGVkIHR5cGUgb2Ygb2JqZWN0Jyk7CiAgICAgIH0KICAgIH0gY2F0Y2ggKGVycikgewogICAgICB0aHJvdyBlcnJvclRyYW5zZm9ybShlcnIpOwogICAgfQogIH07Cn0KLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9vcGVyYXRvcnMuanMKLy8gbGlzdCBvZiBpZGVudGlmaWVycyBvZiBub2RlcyBpbiBvcmRlciBvZiB0aGVpciBwcmVjZWRlbmNlCi8vIGFsc28gY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgbGVmdC9yaWdodCBhc3NvY2lhdGl2aXR5Ci8vIGFuZCB3aGljaCBvdGhlciBvcGVyYXRvciB0aGUgb3BlcmF0b3IgaXMgYXNzb2NpYXRpdmUgd2l0aAovLyBFeGFtcGxlOgovLyBhZGRpdGlvbiBpcyBhc3NvY2lhdGl2ZSB3aXRoIGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiwgYmVjYXVzZToKLy8gKGErYikrYz1hKyhiK2MpCi8vIChhK2IpLWM9YSsoYi1jKQovLwovLyBwb3N0Zml4IG9wZXJhdG9ycyBhcmUgbGVmdCBhc3NvY2lhdGl2ZSwgcHJlZml4IG9wZXJhdG9ycwovLyBhcmUgcmlnaHQgYXNzb2NpYXRpdmUKLy8KLy8gSXQncyBhbHNvIHBvc3NpYmxlIHRvIHNldCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6Ci8vIGxhdGV4UGFyZW5zOiBpZiBzZXQgdG8gZmFsc2UsIHRoaXMgbm9kZSBkb2Vzbid0IG5lZWQgdG8gYmUgZW5jbG9zZWQKLy8gICAgICAgICAgICAgIGluIHBhcmVudGhlc2VzIHdoZW4gdXNpbmcgTGFUZVgKLy8gbGF0ZXhMZWZ0UGFyZW5zOiBpZiBzZXQgdG8gZmFsc2UsIHRoaXMgIU9wZXJhdG9yTm9kZSdzIQovLyAgICAgICAgICAgICAgICAgIGxlZnQgYXJndW1lbnQgZG9lc24ndCBuZWVkIHRvIGJlIGVuY2xvc2VkCi8vICAgICAgICAgICAgICAgICAgaW4gcGFyZW50aGVzZXMKLy8gbGF0ZXhSaWdodFBhcmVuczogdGhlIHNhbWUgZm9yIHRoZSByaWdodCBhcmd1bWVudAoKdmFyIG9wZXJhdG9yc19wcm9wZXJ0aWVzID0gW3sKICAvLyBhc3NpZ25tZW50CiAgQXNzaWdubWVudE5vZGU6IHt9LAogIEZ1bmN0aW9uQXNzaWdubWVudE5vZGU6IHt9Cn0sIHsKICAvLyBjb25kaXRpb25hbCBleHByZXNzaW9uCiAgQ29uZGl0aW9uYWxOb2RlOiB7CiAgICBsYXRleExlZnRQYXJlbnM6IGZhbHNlLAogICAgbGF0ZXhSaWdodFBhcmVuczogZmFsc2UsCiAgICBsYXRleFBhcmVuczogZmFsc2UgLy8gY29uZGl0aW9uYWxzIGRvbid0IG5lZWQgcGFyZW50aGVzZXMgaW4gTGFUZVggYmVjYXVzZQogICAgLy8gdGhleSBhcmUgMiBkaW1lbnNpb25hbAoKICB9Cn0sIHsKICAvLyBsb2dpY2FsIG9yCiAgJ09wZXJhdG9yTm9kZTpvcic6IHsKICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JywKICAgIGFzc29jaWF0aXZlV2l0aDogW10KICB9Cn0sIHsKICAvLyBsb2dpY2FsIHhvcgogICdPcGVyYXRvck5vZGU6eG9yJzogewogICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLAogICAgYXNzb2NpYXRpdmVXaXRoOiBbXQogIH0KfSwgewogIC8vIGxvZ2ljYWwgYW5kCiAgJ09wZXJhdG9yTm9kZTphbmQnOiB7CiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsCiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdCiAgfQp9LCB7CiAgLy8gYml0d2lzZSBvcgogICdPcGVyYXRvck5vZGU6Yml0T3InOiB7CiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsCiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdCiAgfQp9LCB7CiAgLy8gYml0d2lzZSB4b3IKICAnT3BlcmF0b3JOb2RlOmJpdFhvcic6IHsKICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JywKICAgIGFzc29jaWF0aXZlV2l0aDogW10KICB9Cn0sIHsKICAvLyBiaXR3aXNlIGFuZAogICdPcGVyYXRvck5vZGU6Yml0QW5kJzogewogICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLAogICAgYXNzb2NpYXRpdmVXaXRoOiBbXQogIH0KfSwgewogIC8vIHJlbGF0aW9uYWwgb3BlcmF0b3JzCiAgJ09wZXJhdG9yTm9kZTplcXVhbCc6IHsKICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JywKICAgIGFzc29jaWF0aXZlV2l0aDogW10KICB9LAogICdPcGVyYXRvck5vZGU6dW5lcXVhbCc6IHsKICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JywKICAgIGFzc29jaWF0aXZlV2l0aDogW10KICB9LAogICdPcGVyYXRvck5vZGU6c21hbGxlcic6IHsKICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JywKICAgIGFzc29jaWF0aXZlV2l0aDogW10KICB9LAogICdPcGVyYXRvck5vZGU6bGFyZ2VyJzogewogICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLAogICAgYXNzb2NpYXRpdmVXaXRoOiBbXQogIH0sCiAgJ09wZXJhdG9yTm9kZTpzbWFsbGVyRXEnOiB7CiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsCiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdCiAgfSwKICAnT3BlcmF0b3JOb2RlOmxhcmdlckVxJzogewogICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLAogICAgYXNzb2NpYXRpdmVXaXRoOiBbXQogIH0sCiAgUmVsYXRpb25hbE5vZGU6IHsKICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JywKICAgIGFzc29jaWF0aXZlV2l0aDogW10KICB9Cn0sIHsKICAvLyBiaXRzaGlmdCBvcGVyYXRvcnMKICAnT3BlcmF0b3JOb2RlOmxlZnRTaGlmdCc6IHsKICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JywKICAgIGFzc29jaWF0aXZlV2l0aDogW10KICB9LAogICdPcGVyYXRvck5vZGU6cmlnaHRBcml0aFNoaWZ0JzogewogICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLAogICAgYXNzb2NpYXRpdmVXaXRoOiBbXQogIH0sCiAgJ09wZXJhdG9yTm9kZTpyaWdodExvZ1NoaWZ0JzogewogICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLAogICAgYXNzb2NpYXRpdmVXaXRoOiBbXQogIH0KfSwgewogIC8vIHVuaXQgY29udmVyc2lvbgogICdPcGVyYXRvck5vZGU6dG8nOiB7CiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsCiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdCiAgfQp9LCB7CiAgLy8gcmFuZ2UKICBSYW5nZU5vZGU6IHt9Cn0sIHsKICAvLyBhZGRpdGlvbiwgc3VidHJhY3Rpb24KICAnT3BlcmF0b3JOb2RlOmFkZCc6IHsKICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JywKICAgIGFzc29jaWF0aXZlV2l0aDogWydPcGVyYXRvck5vZGU6YWRkJywgJ09wZXJhdG9yTm9kZTpzdWJ0cmFjdCddCiAgfSwKICAnT3BlcmF0b3JOb2RlOnN1YnRyYWN0JzogewogICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLAogICAgYXNzb2NpYXRpdmVXaXRoOiBbXQogIH0KfSwgewogIC8vIG11bHRpcGx5LCBkaXZpZGUsIG1vZHVsdXMKICAnT3BlcmF0b3JOb2RlOm11bHRpcGx5JzogewogICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLAogICAgYXNzb2NpYXRpdmVXaXRoOiBbJ09wZXJhdG9yTm9kZTptdWx0aXBseScsICdPcGVyYXRvck5vZGU6ZGl2aWRlJywgJ09wZXJhdG9yOmRvdE11bHRpcGx5JywgJ09wZXJhdG9yOmRvdERpdmlkZSddCiAgfSwKICAnT3BlcmF0b3JOb2RlOmRpdmlkZSc6IHsKICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JywKICAgIGFzc29jaWF0aXZlV2l0aDogW10sCiAgICBsYXRleExlZnRQYXJlbnM6IGZhbHNlLAogICAgbGF0ZXhSaWdodFBhcmVuczogZmFsc2UsCiAgICBsYXRleFBhcmVuczogZmFsc2UgLy8gZnJhY3Rpb25zIGRvbid0IHJlcXVpcmUgcGFyZW50aGVzZXMgYmVjYXVzZQogICAgLy8gdGhleSdyZSAyIGRpbWVuc2lvbmFsLCBzbyBwYXJlbnMgYXJlbid0IG5lZWRlZAogICAgLy8gaW4gTGFUZVgKCiAgfSwKICAnT3BlcmF0b3JOb2RlOmRvdE11bHRpcGx5JzogewogICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLAogICAgYXNzb2NpYXRpdmVXaXRoOiBbJ09wZXJhdG9yTm9kZTptdWx0aXBseScsICdPcGVyYXRvck5vZGU6ZGl2aWRlJywgJ09wZXJhdG9yTm9kZTpkb3RNdWx0aXBseScsICdPcGVyYXRvck5vZGU6ZG9EaXZpZGUnXQogIH0sCiAgJ09wZXJhdG9yTm9kZTpkb3REaXZpZGUnOiB7CiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsCiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdCiAgfSwKICAnT3BlcmF0b3JOb2RlOm1vZCc6IHsKICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JywKICAgIGFzc29jaWF0aXZlV2l0aDogW10KICB9Cn0sIHsKICAvLyB1bmFyeSBwcmVmaXggb3BlcmF0b3JzCiAgJ09wZXJhdG9yTm9kZTp1bmFyeVBsdXMnOiB7CiAgICBhc3NvY2lhdGl2aXR5OiAncmlnaHQnCiAgfSwKICAnT3BlcmF0b3JOb2RlOnVuYXJ5TWludXMnOiB7CiAgICBhc3NvY2lhdGl2aXR5OiAncmlnaHQnCiAgfSwKICAnT3BlcmF0b3JOb2RlOmJpdE5vdCc6IHsKICAgIGFzc29jaWF0aXZpdHk6ICdyaWdodCcKICB9LAogICdPcGVyYXRvck5vZGU6bm90JzogewogICAgYXNzb2NpYXRpdml0eTogJ3JpZ2h0JwogIH0KfSwgewogIC8vIGV4cG9uZW50aWF0aW9uCiAgJ09wZXJhdG9yTm9kZTpwb3cnOiB7CiAgICBhc3NvY2lhdGl2aXR5OiAncmlnaHQnLAogICAgYXNzb2NpYXRpdmVXaXRoOiBbXSwKICAgIGxhdGV4UmlnaHRQYXJlbnM6IGZhbHNlIC8vIHRoZSBleHBvbmVudCBkb2Vzbid0IG5lZWQgcGFyZW50aGVzZXMgaW4KICAgIC8vIExhVGVYIGJlY2F1c2UgaXQncyAyIGRpbWVuc2lvbmFsCiAgICAvLyAoaXQncyBvbiB0b3ApCgogIH0sCiAgJ09wZXJhdG9yTm9kZTpkb3RQb3cnOiB7CiAgICBhc3NvY2lhdGl2aXR5OiAncmlnaHQnLAogICAgYXNzb2NpYXRpdmVXaXRoOiBbXQogIH0KfSwgewogIC8vIGZhY3RvcmlhbAogICdPcGVyYXRvck5vZGU6ZmFjdG9yaWFsJzogewogICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnCiAgfQp9LCB7CiAgLy8gbWF0cml4IHRyYW5zcG9zZQogICdPcGVyYXRvck5vZGU6dHJhbnNwb3NlJzogewogICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnCiAgfQp9XTsKLyoqCiAqIEdldCB0aGUgcHJlY2VkZW5jZSBvZiBhIE5vZGUuCiAqIEhpZ2hlciBudW1iZXIgZm9yIGhpZ2hlciBwcmVjZWRlbmNlLCBzdGFydGluZyB3aXRoIDAuCiAqIFJldHVybnMgbnVsbCBpZiB0aGUgcHJlY2VkZW5jZSBpcyB1bmRlZmluZWQuCiAqCiAqIEBwYXJhbSB7Tm9kZX0gX25vZGUKICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudGhlc2lzCiAqIEByZXR1cm4ge251bWJlciB8IG51bGx9CiAqLwoKZnVuY3Rpb24gZ2V0UHJlY2VkZW5jZShfbm9kZSwgcGFyZW50aGVzaXMpIHsKICB2YXIgbm9kZSA9IF9ub2RlOwoKICBpZiAocGFyZW50aGVzaXMgIT09ICdrZWVwJykgewogICAgLy8gUGFyZW50aGVzaXNOb2RlcyBhcmUgb25seSBpZ25vcmVkIHdoZW4gbm90IGluICdrZWVwJyBtb2RlCiAgICBub2RlID0gX25vZGUuZ2V0Q29udGVudCgpOwogIH0KCiAgdmFyIGlkZW50aWZpZXIgPSBub2RlLmdldElkZW50aWZpZXIoKTsKCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcGVyYXRvcnNfcHJvcGVydGllcy5sZW5ndGg7IGkrKykgewogICAgaWYgKGlkZW50aWZpZXIgaW4gb3BlcmF0b3JzX3Byb3BlcnRpZXNbaV0pIHsKICAgICAgcmV0dXJuIGk7CiAgICB9CiAgfQoKICByZXR1cm4gbnVsbDsKfQovKioKICogR2V0IHRoZSBhc3NvY2lhdGl2aXR5IG9mIGFuIG9wZXJhdG9yIChsZWZ0IG9yIHJpZ2h0KS4KICogUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nICdsZWZ0JyBvciAncmlnaHQnIG9yIG51bGwgaWYKICogdGhlIGFzc29jaWF0aXZpdHkgaXMgbm90IGRlZmluZWQuCiAqCiAqIEBwYXJhbSB7Tm9kZX0KICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudGhlc2lzCiAqIEByZXR1cm4ge3N0cmluZ3xudWxsfQogKiBAdGhyb3dzIHtFcnJvcn0KICovCgpmdW5jdGlvbiBnZXRBc3NvY2lhdGl2aXR5KF9ub2RlLCBwYXJlbnRoZXNpcykgewogIHZhciBub2RlID0gX25vZGU7CgogIGlmIChwYXJlbnRoZXNpcyAhPT0gJ2tlZXAnKSB7CiAgICAvLyBQYXJlbnRoZXNpc05vZGVzIGFyZSBvbmx5IGlnbm9yZWQgd2hlbiBub3QgaW4gJ2tlZXAnIG1vZGUKICAgIG5vZGUgPSBfbm9kZS5nZXRDb250ZW50KCk7CiAgfQoKICB2YXIgaWRlbnRpZmllciA9IG5vZGUuZ2V0SWRlbnRpZmllcigpOwogIHZhciBpbmRleCA9IGdldFByZWNlZGVuY2Uobm9kZSwgcGFyZW50aGVzaXMpOwoKICBpZiAoaW5kZXggPT09IG51bGwpIHsKICAgIC8vIG5vZGUgaXNuJ3QgaW4gdGhlIGxpc3QKICAgIHJldHVybiBudWxsOwogIH0KCiAgdmFyIHByb3BlcnR5ID0gb3BlcmF0b3JzX3Byb3BlcnRpZXNbaW5kZXhdW2lkZW50aWZpZXJdOwoKICBpZiAoT2JqZWN0KHV0aWxzX29iamVjdFsiZiIgLyogaGFzT3duUHJvcGVydHkgKi9dKShwcm9wZXJ0eSwgJ2Fzc29jaWF0aXZpdHknKSkgewogICAgaWYgKHByb3BlcnR5LmFzc29jaWF0aXZpdHkgPT09ICdsZWZ0JykgewogICAgICByZXR1cm4gJ2xlZnQnOwogICAgfQoKICAgIGlmIChwcm9wZXJ0eS5hc3NvY2lhdGl2aXR5ID09PSAncmlnaHQnKSB7CiAgICAgIHJldHVybiAncmlnaHQnOwogICAgfSAvLyBhc3NvY2lhdGl2aXR5IGlzIGludmFsaWQKCgogICAgdGhyb3cgRXJyb3IoJ1wnJyArIGlkZW50aWZpZXIgKyAnXCcgaGFzIHRoZSBpbnZhbGlkIGFzc29jaWF0aXZpdHkgXCcnICsgcHJvcGVydHkuYXNzb2NpYXRpdml0eSArICdcJy4nKTsKICB9IC8vIGFzc29jaWF0aXZpdHkgaXMgdW5kZWZpbmVkCgoKICByZXR1cm4gbnVsbDsKfQovKioKICogQ2hlY2sgaWYgYW4gb3BlcmF0b3IgaXMgYXNzb2NpYXRpdmUgd2l0aCBhbm90aGVyIG9wZXJhdG9yLgogKiBSZXR1cm5zIGVpdGhlciB0cnVlIG9yIGZhbHNlIG9yIG51bGwgaWYgbm90IGRlZmluZWQuCiAqCiAqIEBwYXJhbSB7Tm9kZX0gbm9kZUEKICogQHBhcmFtIHtOb2RlfSBub2RlQgogKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50aGVzaXMKICogQHJldHVybiB7Ym9vbGVhbiB8IG51bGx9CiAqLwoKZnVuY3Rpb24gaXNBc3NvY2lhdGl2ZVdpdGgobm9kZUEsIG5vZGVCLCBwYXJlbnRoZXNpcykgewogIC8vIFBhcmVudGhlc2lzTm9kZXMgYXJlIG9ubHkgaWdub3JlZCB3aGVuIG5vdCBpbiAna2VlcCcgbW9kZQogIHZhciBhID0gcGFyZW50aGVzaXMgIT09ICdrZWVwJyA/IG5vZGVBLmdldENvbnRlbnQoKSA6IG5vZGVBOwogIHZhciBiID0gcGFyZW50aGVzaXMgIT09ICdrZWVwJyA/IG5vZGVBLmdldENvbnRlbnQoKSA6IG5vZGVCOwogIHZhciBpZGVudGlmaWVyQSA9IGEuZ2V0SWRlbnRpZmllcigpOwogIHZhciBpZGVudGlmaWVyQiA9IGIuZ2V0SWRlbnRpZmllcigpOwogIHZhciBpbmRleCA9IGdldFByZWNlZGVuY2UoYSwgcGFyZW50aGVzaXMpOwoKICBpZiAoaW5kZXggPT09IG51bGwpIHsKICAgIC8vIG5vZGUgaXNuJ3QgaW4gdGhlIGxpc3QKICAgIHJldHVybiBudWxsOwogIH0KCiAgdmFyIHByb3BlcnR5ID0gb3BlcmF0b3JzX3Byb3BlcnRpZXNbaW5kZXhdW2lkZW50aWZpZXJBXTsKCiAgaWYgKE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkocHJvcGVydHksICdhc3NvY2lhdGl2ZVdpdGgnKSAmJiBwcm9wZXJ0eS5hc3NvY2lhdGl2ZVdpdGggaW5zdGFuY2VvZiBBcnJheSkgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0eS5hc3NvY2lhdGl2ZVdpdGgubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHByb3BlcnR5LmFzc29jaWF0aXZlV2l0aFtpXSA9PT0gaWRlbnRpZmllckIpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBmYWxzZTsKICB9IC8vIGFzc29jaWF0aXZlV2l0aCBpcyBub3QgZGVmaW5lZAoKCiAgcmV0dXJuIG51bGw7Cn0KLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9ub2RlL0Fzc2lnbm1lbnROb2RlLmpzCgoKCgoKCnZhciBBc3NpZ25tZW50Tm9kZV9uYW1lID0gJ0Fzc2lnbm1lbnROb2RlJzsKdmFyIEFzc2lnbm1lbnROb2RlX2RlcGVuZGVuY2llcyA9IFsnc3Vic2V0JywgJz9tYXRyaXgnLCAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSBuZWVkZWQgYXQgYWxsLCBzaG91bGQgYmUgaGFuZGxlZCBieSBzdWJzZXQKJ05vZGUnXTsKdmFyIGNyZWF0ZUFzc2lnbm1lbnROb2RlID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoQXNzaWdubWVudE5vZGVfbmFtZSwgQXNzaWdubWVudE5vZGVfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciBzdWJzZXQgPSBfcmVmLnN1YnNldCwKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIE5vZGUgPSBfcmVmLk5vZGU7CiAgdmFyIGFjY2VzcyA9IGFjY2Vzc0ZhY3RvcnkoewogICAgc3Vic2V0OiBzdWJzZXQKICB9KTsKICB2YXIgYXNzaWduID0gYXNzaWduRmFjdG9yeSh7CiAgICBzdWJzZXQ6IHN1YnNldCwKICAgIG1hdHJpeDogbWF0cml4CiAgfSk7CiAgLyoqCiAgICogQGNvbnN0cnVjdG9yIEFzc2lnbm1lbnROb2RlCiAgICogQGV4dGVuZHMge05vZGV9CiAgICoKICAgKiBEZWZpbmUgYSBzeW1ib2wsIGxpa2UgYGE9My4yYCwgdXBkYXRlIGEgcHJvcGVydHkgbGlrZSBgYS5iPTMuMmAsIG9yCiAgICogcmVwbGFjZSBhIHN1YnNldCBvZiBhIG1hdHJpeCBsaWtlIGBBWzIsMl09NDJgLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIG5ldyBBc3NpZ25tZW50Tm9kZShzeW1ib2wsIHZhbHVlKQogICAqICAgICBuZXcgQXNzaWdubWVudE5vZGUob2JqZWN0LCBpbmRleCwgdmFsdWUpCiAgICoKICAgKiBVc2FnZToKICAgKgogICAqICAgIG5ldyBBc3NpZ25tZW50Tm9kZShuZXcgU3ltYm9sTm9kZSgnYScpLCBuZXcgQ29uc3RhbnROb2RlKDIpKSAgICAgICAgICAgICAgICAgICAgICAgLy8gYT0yCiAgICogICAgbmV3IEFzc2lnbm1lbnROb2RlKG5ldyBTeW1ib2xOb2RlKCdhJyksIG5ldyBJbmRleE5vZGUoJ2InKSwgbmV3IENvbnN0YW50Tm9kZSgyKSkgICAvLyBhLmI9MgogICAqICAgIG5ldyBBc3NpZ25tZW50Tm9kZShuZXcgU3ltYm9sTm9kZSgnYScpLCBuZXcgSW5kZXhOb2RlKDEsIDIpLCBuZXcgQ29uc3RhbnROb2RlKDMpKSAgLy8gYVsxLDJdPTMKICAgKgogICAqIEBwYXJhbSB7U3ltYm9sTm9kZSB8IEFjY2Vzc29yTm9kZX0gb2JqZWN0ICBPYmplY3Qgb24gd2hpY2ggdG8gYXNzaWduIGEgdmFsdWUKICAgKiBAcGFyYW0ge0luZGV4Tm9kZX0gW2luZGV4PW51bGxdICAgICAgICAgICAgSW5kZXgsIHByb3BlcnR5IG5hbWUgb3IgbWF0cml4CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LiBPcHRpb25hbC4gSWYgbm90IHByb3ZpZGVkCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBgb2JqZWN0YCBpcyBhIFN5bWJvbE5vZGUsCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm9wZXJ0eSBpcyBhc3NpZ25lZCB0byB0aGUKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsIHNjb3BlLgogICAqIEBwYXJhbSB7Tm9kZX0gdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgdG8gYmUgYXNzaWduZWQKICAgKi8KCiAgZnVuY3Rpb24gQXNzaWdubWVudE5vZGUob2JqZWN0LCBpbmRleCwgdmFsdWUpIHsKICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBBc3NpZ25tZW50Tm9kZSkpIHsKICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTsKICAgIH0KCiAgICB0aGlzLm9iamVjdCA9IG9iamVjdDsKICAgIHRoaXMuaW5kZXggPSB2YWx1ZSA/IGluZGV4IDogbnVsbDsKICAgIHRoaXMudmFsdWUgPSB2YWx1ZSB8fCBpbmRleDsgLy8gdmFsaWRhdGUgaW5wdXQKCiAgICBpZiAoIU9iamVjdChpc1siSiIgLyogaXNTeW1ib2xOb2RlICovXSkob2JqZWN0KSAmJiAhT2JqZWN0KGlzWyJhIiAvKiBpc0FjY2Vzc29yTm9kZSAqL10pKG9iamVjdCkpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sTm9kZSBvciBBY2Nlc3Nvck5vZGUgZXhwZWN0ZWQgYXMgIm9iamVjdCInKTsKICAgIH0KCiAgICBpZiAoT2JqZWN0KGlzWyJKIiAvKiBpc1N5bWJvbE5vZGUgKi9dKShvYmplY3QpICYmIG9iamVjdC5uYW1lID09PSAnZW5kJykgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhc3NpZ24gdG8gc3ltYm9sICJlbmQiJyk7CiAgICB9CgogICAgaWYgKHRoaXMuaW5kZXggJiYgIU9iamVjdChpc1sidSIgLyogaXNJbmRleE5vZGUgKi9dKSh0aGlzLmluZGV4KSkgewogICAgICAvLyBpbmRleCBpcyBvcHRpb25hbAogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmRleE5vZGUgZXhwZWN0ZWQgYXMgImluZGV4IicpOwogICAgfQoKICAgIGlmICghT2JqZWN0KGlzWyJ3IiAvKiBpc05vZGUgKi9dKSh0aGlzLnZhbHVlKSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkIGFzICJ2YWx1ZSInKTsKICAgIH0gLy8gcmVhZG9ubHkgcHJvcGVydHkgbmFtZQoKCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ25hbWUnLCB7CiAgICAgIGdldDogZnVuY3Rpb24gKCkgewogICAgICAgIGlmICh0aGlzLmluZGV4KSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleC5pc09iamVjdFByb3BlcnR5KCkgPyB0aGlzLmluZGV4LmdldE9iamVjdFByb3BlcnR5KCkgOiAnJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0Lm5hbWUgfHwgJyc7CiAgICAgICAgfQogICAgICB9LmJpbmQodGhpcyksCiAgICAgIHNldDogZnVuY3Rpb24gc2V0KCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFzc2lnbiBhIG5ldyBuYW1lLCBuYW1lIGlzIHJlYWQtb25seScpOwogICAgICB9CiAgICB9KTsKICB9CgogIEFzc2lnbm1lbnROb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7CiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnR5cGUgPSAnQXNzaWdubWVudE5vZGUnOwogIEFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS5pc0Fzc2lnbm1lbnROb2RlID0gdHJ1ZTsKICAvKioKICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi4KICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuCiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuCiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuCiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9ucwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9scwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS4KICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZToKICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKikKICAgKi8KCiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7CiAgICB2YXIgZXZhbE9iamVjdCA9IHRoaXMub2JqZWN0Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTsKCiAgICB2YXIgZXZhbEluZGV4ID0gdGhpcy5pbmRleCA/IHRoaXMuaW5kZXguX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpIDogbnVsbDsKCiAgICB2YXIgZXZhbFZhbHVlID0gdGhpcy52YWx1ZS5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7CgogICAgdmFyIG5hbWUgPSB0aGlzLm9iamVjdC5uYW1lOwoKICAgIGlmICghdGhpcy5pbmRleCkgewogICAgICAvLyBhcHBseSBhIHZhcmlhYmxlIHRvIHRoZSBzY29wZSwgZm9yIGV4YW1wbGUgYGE9MmAKICAgICAgaWYgKCFPYmplY3QoaXNbIkoiIC8qIGlzU3ltYm9sTm9kZSAqL10pKHRoaXMub2JqZWN0KSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N5bWJvbE5vZGUgZXhwZWN0ZWQgYXMgb2JqZWN0Jyk7CiAgICAgIH0KCiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsQXNzaWdubWVudE5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHsKICAgICAgICByZXR1cm4gc2V0U2FmZVByb3BlcnR5KHNjb3BlLCBuYW1lLCBldmFsVmFsdWUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTsKICAgICAgfTsKICAgIH0gZWxzZSBpZiAodGhpcy5pbmRleC5pc09iamVjdFByb3BlcnR5KCkpIHsKICAgICAgLy8gYXBwbHkgYW4gb2JqZWN0IHByb3BlcnR5IGZvciBleGFtcGxlIGBhLmI9MmAKICAgICAgdmFyIHByb3AgPSB0aGlzLmluZGV4LmdldE9iamVjdFByb3BlcnR5KCk7CiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsQXNzaWdubWVudE5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHsKICAgICAgICB2YXIgb2JqZWN0ID0gZXZhbE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCk7CiAgICAgICAgdmFyIHZhbHVlID0gZXZhbFZhbHVlKHNjb3BlLCBhcmdzLCBjb250ZXh0KTsKICAgICAgICByZXR1cm4gc2V0U2FmZVByb3BlcnR5KG9iamVjdCwgcHJvcCwgdmFsdWUpOwogICAgICB9OwogICAgfSBlbHNlIGlmIChPYmplY3QoaXNbIkoiIC8qIGlzU3ltYm9sTm9kZSAqL10pKHRoaXMub2JqZWN0KSkgewogICAgICAvLyB1cGRhdGUgYSBtYXRyaXggc3Vic2V0LCBmb3IgZXhhbXBsZSBgYVsyXT0zYAogICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEFzc2lnbm1lbnROb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7CiAgICAgICAgdmFyIGNoaWxkT2JqZWN0ID0gZXZhbE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCk7CiAgICAgICAgdmFyIHZhbHVlID0gZXZhbFZhbHVlKHNjb3BlLCBhcmdzLCBjb250ZXh0KTsKICAgICAgICB2YXIgaW5kZXggPSBldmFsSW5kZXgoc2NvcGUsIGFyZ3MsIGNoaWxkT2JqZWN0KTsgLy8gSW1wb3J0YW50OiAgd2UgcGFzcyBjaGlsZE9iamVjdCBpbnN0ZWFkIG9mIGNvbnRleHQKCiAgICAgICAgc2V0U2FmZVByb3BlcnR5KHNjb3BlLCBuYW1lLCBhc3NpZ24oY2hpbGRPYmplY3QsIGluZGV4LCB2YWx1ZSkpOwogICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIGlzQWNjZXNzb3JOb2RlKG5vZGUub2JqZWN0KSA9PT0gdHJ1ZQogICAgICAvLyB1cGRhdGUgYSBtYXRyaXggc3Vic2V0LCBmb3IgZXhhbXBsZSBgYS5iWzJdPTNgCiAgICAgIC8vIHdlIHdpbGwgbm90IHVzZSB0aGUgY29tcGlsZSBmdW5jdGlvbiBvZiB0aGUgQWNjZXNzb3JOb2RlLCBidXQgY29tcGlsZSBpdAogICAgICAvLyBvdXJzZWx2ZXMgaGVyZSBhcyB3ZSBuZWVkIHRoZSBwYXJlbnQgb2JqZWN0IG9mIHRoZSBBY2Nlc3Nvck5vZGU6CiAgICAgIC8vIHdlZSBuZWVkIHRvIGFwcGx5IHRoZSB1cGRhdGVkIG9iamVjdCB0byBwYXJlbnQgb2JqZWN0CiAgICAgIHZhciBldmFsUGFyZW50T2JqZWN0ID0gdGhpcy5vYmplY3Qub2JqZWN0Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTsKCiAgICAgIGlmICh0aGlzLm9iamVjdC5pbmRleC5pc09iamVjdFByb3BlcnR5KCkpIHsKICAgICAgICB2YXIgcGFyZW50UHJvcCA9IHRoaXMub2JqZWN0LmluZGV4LmdldE9iamVjdFByb3BlcnR5KCk7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkgewogICAgICAgICAgdmFyIHBhcmVudCA9IGV2YWxQYXJlbnRPYmplY3Qoc2NvcGUsIGFyZ3MsIGNvbnRleHQpOwogICAgICAgICAgdmFyIGNoaWxkT2JqZWN0ID0gZ2V0U2FmZVByb3BlcnR5KHBhcmVudCwgcGFyZW50UHJvcCk7CiAgICAgICAgICB2YXIgaW5kZXggPSBldmFsSW5kZXgoc2NvcGUsIGFyZ3MsIGNoaWxkT2JqZWN0KTsgLy8gSW1wb3J0YW50OiB3ZSBwYXNzIGNoaWxkT2JqZWN0IGluc3RlYWQgb2YgY29udGV4dAoKICAgICAgICAgIHZhciB2YWx1ZSA9IGV2YWxWYWx1ZShzY29wZSwgYXJncywgY29udGV4dCk7CiAgICAgICAgICBzZXRTYWZlUHJvcGVydHkocGFyZW50LCBwYXJlbnRQcm9wLCBhc3NpZ24oY2hpbGRPYmplY3QsIGluZGV4LCB2YWx1ZSkpOwogICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gaWYgc29tZSBwYXJhbWV0ZXJzIHVzZSB0aGUgJ2VuZCcgcGFyYW1ldGVyLCB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgc2l6ZQogICAgICAgIHZhciBldmFsUGFyZW50SW5kZXggPSB0aGlzLm9iamVjdC5pbmRleC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7CgogICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsQXNzaWdubWVudE5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHsKICAgICAgICAgIHZhciBwYXJlbnQgPSBldmFsUGFyZW50T2JqZWN0KHNjb3BlLCBhcmdzLCBjb250ZXh0KTsKICAgICAgICAgIHZhciBwYXJlbnRJbmRleCA9IGV2YWxQYXJlbnRJbmRleChzY29wZSwgYXJncywgcGFyZW50KTsgLy8gSW1wb3J0YW50OiB3ZSBwYXNzIHBhcmVudCBpbnN0ZWFkIG9mIGNvbnRleHQKCiAgICAgICAgICB2YXIgY2hpbGRPYmplY3QgPSBhY2Nlc3MocGFyZW50LCBwYXJlbnRJbmRleCk7CiAgICAgICAgICB2YXIgaW5kZXggPSBldmFsSW5kZXgoc2NvcGUsIGFyZ3MsIGNoaWxkT2JqZWN0KTsgLy8gSW1wb3J0YW50OiAgd2UgcGFzcyBjaGlsZE9iamVjdCBpbnN0ZWFkIG9mIGNvbnRleHQKCiAgICAgICAgICB2YXIgdmFsdWUgPSBldmFsVmFsdWUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpOwogICAgICAgICAgYXNzaWduKHBhcmVudCwgcGFyZW50SW5kZXgsIGFzc2lnbihjaGlsZE9iamVjdCwgaW5kZXgsIHZhbHVlKSk7CiAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfTsKICAgICAgfQogICAgfQogIH07CiAgLyoqCiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGUKICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrCiAgICovCgoKICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgewogICAgY2FsbGJhY2sodGhpcy5vYmplY3QsICdvYmplY3QnLCB0aGlzKTsKCiAgICBpZiAodGhpcy5pbmRleCkgewogICAgICBjYWxsYmFjayh0aGlzLmluZGV4LCAnaW5kZXgnLCB0aGlzKTsKICAgIH0KCiAgICBjYWxsYmFjayh0aGlzLnZhbHVlLCAndmFsdWUnLCB0aGlzKTsKICB9OwogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBBc3NpZ25tZW50Tm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZwogICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLgogICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2sKICAgKiBAcmV0dXJucyB7QXNzaWdubWVudE5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlCiAgICovCgoKICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICB2YXIgb2JqZWN0ID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMub2JqZWN0LCAnb2JqZWN0JywgdGhpcykpOwoKICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXggPyB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5pbmRleCwgJ2luZGV4JywgdGhpcykpIDogbnVsbDsKCiAgICB2YXIgdmFsdWUgPSB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy52YWx1ZSwgJ3ZhbHVlJywgdGhpcykpOwoKICAgIHJldHVybiBuZXcgQXNzaWdubWVudE5vZGUob2JqZWN0LCBpbmRleCwgdmFsdWUpOwogIH07CiAgLyoqCiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weQogICAqIEByZXR1cm4ge0Fzc2lnbm1lbnROb2RlfQogICAqLwoKCiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIG5ldyBBc3NpZ25tZW50Tm9kZSh0aGlzLm9iamVjdCwgdGhpcy5pbmRleCwgdGhpcy52YWx1ZSk7CiAgfTsKICAvKgogICAqIElzIHBhcmVudGhlc2lzIG5lZWRlZD8KICAgKiBAcGFyYW0ge25vZGV9IG5vZGUKICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmVudGhlc2lzPSdrZWVwJ10KICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gbmVlZFBhcmVudGhlc2lzKG5vZGUsIHBhcmVudGhlc2lzKSB7CiAgICBpZiAoIXBhcmVudGhlc2lzKSB7CiAgICAgIHBhcmVudGhlc2lzID0gJ2tlZXAnOwogICAgfQoKICAgIHZhciBwcmVjZWRlbmNlID0gZ2V0UHJlY2VkZW5jZShub2RlLCBwYXJlbnRoZXNpcyk7CiAgICB2YXIgZXhwclByZWNlZGVuY2UgPSBnZXRQcmVjZWRlbmNlKG5vZGUudmFsdWUsIHBhcmVudGhlc2lzKTsKICAgIHJldHVybiBwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgZXhwclByZWNlZGVuY2UgIT09IG51bGwgJiYgZXhwclByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZTsKICB9CiAgLyoqCiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbgogICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICogQHJldHVybiB7c3RyaW5nfQogICAqLwoKCiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLl90b1N0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICB2YXIgb2JqZWN0ID0gdGhpcy5vYmplY3QudG9TdHJpbmcob3B0aW9ucyk7CiAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4ID8gdGhpcy5pbmRleC50b1N0cmluZyhvcHRpb25zKSA6ICcnOwogICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZS50b1N0cmluZyhvcHRpb25zKTsKCiAgICBpZiAobmVlZFBhcmVudGhlc2lzKHRoaXMsIG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcykpIHsKICAgICAgdmFsdWUgPSAnKCcgKyB2YWx1ZSArICcpJzsKICAgIH0KCiAgICByZXR1cm4gb2JqZWN0ICsgaW5kZXggKyAnID0gJyArIHZhbHVlOwogIH07CiAgLyoqCiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZQogICAqIEByZXR1cm5zIHtPYmplY3R9CiAgICovCgoKICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHsKICAgICAgbWF0aGpzOiAnQXNzaWdubWVudE5vZGUnLAogICAgICBvYmplY3Q6IHRoaXMub2JqZWN0LAogICAgICBpbmRleDogdGhpcy5pbmRleCwKICAgICAgdmFsdWU6IHRoaXMudmFsdWUKICAgIH07CiAgfTsKICAvKioKICAgKiBJbnN0YW50aWF0ZSBhbiBBc3NpZ25tZW50Tm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2UKICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHsibWF0aGpzIjogIkFzc2lnbm1lbnROb2RlIiwgb2JqZWN0OiAuLi4sIGluZGV4OiAuLi4sIHZhbHVlOiAuLi59YCwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsCiAgICogQHJldHVybnMge0Fzc2lnbm1lbnROb2RlfQogICAqLwoKCiAgQXNzaWdubWVudE5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikgewogICAgcmV0dXJuIG5ldyBBc3NpZ25tZW50Tm9kZShqc29uLm9iamVjdCwganNvbi5pbmRleCwganNvbi52YWx1ZSk7CiAgfTsKICAvKioKICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvbgogICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICogQHJldHVybiB7c3RyaW5nfQogICAqLwoKCiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICB2YXIgb2JqZWN0ID0gdGhpcy5vYmplY3QudG9IVE1MKG9wdGlvbnMpOwogICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleCA/IHRoaXMuaW5kZXgudG9IVE1MKG9wdGlvbnMpIDogJyc7CiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnRvSFRNTChvcHRpb25zKTsKCiAgICBpZiAobmVlZFBhcmVudGhlc2lzKHRoaXMsIG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcykpIHsKICAgICAgdmFsdWUgPSAnPHNwYW4gY2xhc3M9Im1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KDwvc3Bhbj4nICsgdmFsdWUgKyAnPHNwYW4gY2xhc3M9Im1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KTwvc3Bhbj4nOwogICAgfQoKICAgIHJldHVybiBvYmplY3QgKyBpbmRleCArICc8c3BhbiBjbGFzcz0ibWF0aC1vcGVyYXRvciBtYXRoLWFzc2lnbm1lbnQtb3BlcmF0b3IgbWF0aC12YXJpYWJsZS1hc3NpZ25tZW50LW9wZXJhdG9yIG1hdGgtYmluYXJ5LW9wZXJhdG9yIj49PC9zcGFuPicgKyB2YWx1ZTsKICB9OwogIC8qKgogICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvbgogICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICogQHJldHVybiB7c3RyaW5nfQogICAqLwoKCiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICB2YXIgb2JqZWN0ID0gdGhpcy5vYmplY3QudG9UZXgob3B0aW9ucyk7CiAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4ID8gdGhpcy5pbmRleC50b1RleChvcHRpb25zKSA6ICcnOwogICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZS50b1RleChvcHRpb25zKTsKCiAgICBpZiAobmVlZFBhcmVudGhlc2lzKHRoaXMsIG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcykpIHsKICAgICAgdmFsdWUgPSAiXFxsZWZ0KCIuY29uY2F0KHZhbHVlLCAiXFxyaWdodCkiKTsKICAgIH0KCiAgICByZXR1cm4gb2JqZWN0ICsgaW5kZXggKyAnOj0nICsgdmFsdWU7CiAgfTsKCiAgcmV0dXJuIEFzc2lnbm1lbnROb2RlOwp9LCB7CiAgaXNDbGFzczogdHJ1ZSwKICBpc05vZGU6IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vbm9kZS9CbG9ja05vZGUuanMKCgoKdmFyIEJsb2NrTm9kZV9uYW1lID0gJ0Jsb2NrTm9kZSc7CnZhciBCbG9ja05vZGVfZGVwZW5kZW5jaWVzID0gWydSZXN1bHRTZXQnLCAnTm9kZSddOwp2YXIgY3JlYXRlQmxvY2tOb2RlID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoQmxvY2tOb2RlX25hbWUsIEJsb2NrTm9kZV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIFJlc3VsdFNldCA9IF9yZWYuUmVzdWx0U2V0LAogICAgICBOb2RlID0gX3JlZi5Ob2RlOwoKICAvKioKICAgKiBAY29uc3RydWN0b3IgQmxvY2tOb2RlCiAgICogQGV4dGVuZHMge05vZGV9CiAgICogSG9sZHMgYSBzZXQgd2l0aCBibG9ja3MKICAgKiBAcGFyYW0ge0FycmF5Ljx7bm9kZTogTm9kZX0gfCB7bm9kZTogTm9kZSwgdmlzaWJsZTogYm9vbGVhbn0+fSBibG9ja3MKICAgKiAgICAgICAgICAgIEFuIGFycmF5IHdpdGggYmxvY2tzLCB3aGVyZSBhIGJsb2NrIGlzIGNvbnN0cnVjdGVkIGFzIGFuIE9iamVjdAogICAqICAgICAgICAgICAgd2l0aCBwcm9wZXJ0aWVzIGJsb2NrLCB3aGljaCBpcyBhIE5vZGUsIGFuZCB2aXNpYmxlLCB3aGljaCBpcwogICAqICAgICAgICAgICAgYSBib29sZWFuLiBUaGUgcHJvcGVydHkgdmlzaWJsZSBpcyBvcHRpb25hbCBhbmQgaXMgdHJ1ZSBieSBkZWZhdWx0CiAgICovCiAgZnVuY3Rpb24gQmxvY2tOb2RlKGJsb2NrcykgewogICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEJsb2NrTm9kZSkpIHsKICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTsKICAgIH0gLy8gdmFsaWRhdGUgaW5wdXQsIGNvcHkgYmxvY2tzCgoKICAgIGlmICghQXJyYXkuaXNBcnJheShibG9ja3MpKSB0aHJvdyBuZXcgRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7CiAgICB0aGlzLmJsb2NrcyA9IGJsb2Nrcy5tYXAoZnVuY3Rpb24gKGJsb2NrKSB7CiAgICAgIHZhciBub2RlID0gYmxvY2sgJiYgYmxvY2subm9kZTsKICAgICAgdmFyIHZpc2libGUgPSBibG9jayAmJiBibG9jay52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBibG9jay52aXNpYmxlIDogdHJ1ZTsKICAgICAgaWYgKCFPYmplY3QoaXNbInciIC8qIGlzTm9kZSAqL10pKG5vZGUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9wZXJ0eSAibm9kZSIgbXVzdCBiZSBhIE5vZGUnKTsKICAgICAgaWYgKHR5cGVvZiB2aXNpYmxlICE9PSAnYm9vbGVhbicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3BlcnR5ICJ2aXNpYmxlIiBtdXN0IGJlIGEgYm9vbGVhbicpOwogICAgICByZXR1cm4gewogICAgICAgIG5vZGU6IG5vZGUsCiAgICAgICAgdmlzaWJsZTogdmlzaWJsZQogICAgICB9OwogICAgfSk7CiAgfQoKICBCbG9ja05vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTsKICBCbG9ja05vZGUucHJvdG90eXBlLnR5cGUgPSAnQmxvY2tOb2RlJzsKICBCbG9ja05vZGUucHJvdG90eXBlLmlzQmxvY2tOb2RlID0gdHJ1ZTsKICAvKioKICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi4KICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuCiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuCiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuCiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9ucwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9scwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS4KICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZToKICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKikKICAgKi8KCiAgQmxvY2tOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykgewogICAgdmFyIGV2YWxCbG9ja3MgPSBPYmplY3QodXRpbHNfYXJyYXlbIm0iIC8qIG1hcCAqL10pKHRoaXMuYmxvY2tzLCBmdW5jdGlvbiAoYmxvY2spIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBldmFsdWF0ZTogYmxvY2subm9kZS5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyksCiAgICAgICAgdmlzaWJsZTogYmxvY2sudmlzaWJsZQogICAgICB9OwogICAgfSk7CiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEJsb2NrTm9kZXMoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHsKICAgICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgICAgT2JqZWN0KHV0aWxzX2FycmF5WyJmIiAvKiBmb3JFYWNoICovXSkoZXZhbEJsb2NrcywgZnVuY3Rpb24gZXZhbEJsb2NrTm9kZShibG9jaykgewogICAgICAgIHZhciByZXN1bHQgPSBibG9jay5ldmFsdWF0ZShzY29wZSwgYXJncywgY29udGV4dCk7CgogICAgICAgIGlmIChibG9jay52aXNpYmxlKSB7CiAgICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3IFJlc3VsdFNldChyZXN1bHRzKTsKICAgIH07CiAgfTsKICAvKioKICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIGJsb2NrcyBvZiB0aGlzIG5vZGUKICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrCiAgICovCgoKICBCbG9ja05vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ibG9ja3MubGVuZ3RoOyBpKyspIHsKICAgICAgY2FsbGJhY2sodGhpcy5ibG9ja3NbaV0ubm9kZSwgJ2Jsb2Nrc1snICsgaSArICddLm5vZGUnLCB0aGlzKTsKICAgIH0KICB9OwogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBCbG9ja05vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmcKICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS4KICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrCiAgICogQHJldHVybnMge0Jsb2NrTm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGUKICAgKi8KCgogIEJsb2NrTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICB2YXIgYmxvY2tzID0gW107CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJsb2Nrcy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgYmxvY2sgPSB0aGlzLmJsb2Nrc1tpXTsKCiAgICAgIHZhciBub2RlID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKGJsb2NrLm5vZGUsICdibG9ja3NbJyArIGkgKyAnXS5ub2RlJywgdGhpcykpOwoKICAgICAgYmxvY2tzW2ldID0gewogICAgICAgIG5vZGU6IG5vZGUsCiAgICAgICAgdmlzaWJsZTogYmxvY2sudmlzaWJsZQogICAgICB9OwogICAgfQoKICAgIHJldHVybiBuZXcgQmxvY2tOb2RlKGJsb2Nrcyk7CiAgfTsKICAvKioKICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5CiAgICogQHJldHVybiB7QmxvY2tOb2RlfQogICAqLwoKCiAgQmxvY2tOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKICAgIHZhciBibG9ja3MgPSB0aGlzLmJsb2Nrcy5tYXAoZnVuY3Rpb24gKGJsb2NrKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgbm9kZTogYmxvY2subm9kZSwKICAgICAgICB2aXNpYmxlOiBibG9jay52aXNpYmxlCiAgICAgIH07CiAgICB9KTsKICAgIHJldHVybiBuZXcgQmxvY2tOb2RlKGJsb2Nrcyk7CiAgfTsKICAvKioKICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0cgogICAqIEBvdmVycmlkZQogICAqLwoKCiAgQmxvY2tOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgcmV0dXJuIHRoaXMuYmxvY2tzLm1hcChmdW5jdGlvbiAocGFyYW0pIHsKICAgICAgcmV0dXJuIHBhcmFtLm5vZGUudG9TdHJpbmcob3B0aW9ucykgKyAocGFyYW0udmlzaWJsZSA/ICcnIDogJzsnKTsKICAgIH0pLmpvaW4oJ1xuJyk7CiAgfTsKICAvKioKICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlCiAgICogQHJldHVybnMge09iamVjdH0KICAgKi8KCgogIEJsb2NrTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHsKICAgICAgbWF0aGpzOiAnQmxvY2tOb2RlJywKICAgICAgYmxvY2tzOiB0aGlzLmJsb2NrcwogICAgfTsKICB9OwogIC8qKgogICAqIEluc3RhbnRpYXRlIGFuIEJsb2NrTm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2UKICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHsibWF0aGpzIjogIkJsb2NrTm9kZSIsIGJsb2NrczogW3tub2RlOiAuLi4sIHZpc2libGU6IGZhbHNlfSwgLi4uXX1gLAogICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWwKICAgKiBAcmV0dXJucyB7QmxvY2tOb2RlfQogICAqLwoKCiAgQmxvY2tOb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHsKICAgIHJldHVybiBuZXcgQmxvY2tOb2RlKGpzb24uYmxvY2tzKTsKICB9OwogIC8qKgogICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0cgogICAqIEBvdmVycmlkZQogICAqLwoKCiAgQmxvY2tOb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgcmV0dXJuIHRoaXMuYmxvY2tzLm1hcChmdW5jdGlvbiAocGFyYW0pIHsKICAgICAgcmV0dXJuIHBhcmFtLm5vZGUudG9IVE1MKG9wdGlvbnMpICsgKHBhcmFtLnZpc2libGUgPyAnJyA6ICc8c3BhbiBjbGFzcz0ibWF0aC1zZXBhcmF0b3IiPjs8L3NwYW4+Jyk7CiAgICB9KS5qb2luKCc8c3BhbiBjbGFzcz0ibWF0aC1zZXBhcmF0b3IiPjxiciAvPjwvc3Bhbj4nKTsKICB9OwogIC8qKgogICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvbgogICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICogQHJldHVybiB7c3RyaW5nfSBzdHIKICAgKi8KCgogIEJsb2NrTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgIHJldHVybiB0aGlzLmJsb2Nrcy5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7CiAgICAgIHJldHVybiBwYXJhbS5ub2RlLnRvVGV4KG9wdGlvbnMpICsgKHBhcmFtLnZpc2libGUgPyAnJyA6ICc7Jyk7CiAgICB9KS5qb2luKCdcXDtcXDtcbicpOwogIH07CgogIHJldHVybiBCbG9ja05vZGU7Cn0sIHsKICBpc0NsYXNzOiB0cnVlLAogIGlzTm9kZTogdHJ1ZQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9ub2RlL0NvbmRpdGlvbmFsTm9kZS5qcwoKCgp2YXIgQ29uZGl0aW9uYWxOb2RlX25hbWUgPSAnQ29uZGl0aW9uYWxOb2RlJzsKdmFyIENvbmRpdGlvbmFsTm9kZV9kZXBlbmRlbmNpZXMgPSBbJ05vZGUnXTsKdmFyIGNyZWF0ZUNvbmRpdGlvbmFsTm9kZSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKENvbmRpdGlvbmFsTm9kZV9uYW1lLCBDb25kaXRpb25hbE5vZGVfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciBOb2RlID0gX3JlZi5Ob2RlOwoKICAvKioKICAgKiBBIGxhenkgZXZhbHVhdGluZyBjb25kaXRpb25hbCBvcGVyYXRvcjogJ2NvbmRpdGlvbiA/IHRydWVFeHByIDogZmFsc2VFeHByJwogICAqCiAgICogQHBhcmFtIHtOb2RlfSBjb25kaXRpb24gICBDb25kaXRpb24sIG11c3QgcmVzdWx0IGluIGEgYm9vbGVhbgogICAqIEBwYXJhbSB7Tm9kZX0gdHJ1ZUV4cHIgICAgRXhwcmVzc2lvbiBldmFsdWF0ZWQgd2hlbiBjb25kaXRpb24gaXMgdHJ1ZQogICAqIEBwYXJhbSB7Tm9kZX0gZmFsc2VFeHByICAgRXhwcmVzc2lvbiBldmFsdWF0ZWQgd2hlbiBjb25kaXRpb24gaXMgdHJ1ZQogICAqCiAgICogQGNvbnN0cnVjdG9yIENvbmRpdGlvbmFsTm9kZQogICAqIEBleHRlbmRzIHtOb2RlfQogICAqLwogIGZ1bmN0aW9uIENvbmRpdGlvbmFsTm9kZShjb25kaXRpb24sIHRydWVFeHByLCBmYWxzZUV4cHIpIHsKICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDb25kaXRpb25hbE5vZGUpKSB7CiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7CiAgICB9CgogICAgaWYgKCFPYmplY3QoaXNbInciIC8qIGlzTm9kZSAqL10pKGNvbmRpdGlvbikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BhcmFtZXRlciBjb25kaXRpb24gbXVzdCBiZSBhIE5vZGUnKTsKICAgIGlmICghT2JqZWN0KGlzWyJ3IiAvKiBpc05vZGUgKi9dKSh0cnVlRXhwcikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BhcmFtZXRlciB0cnVlRXhwciBtdXN0IGJlIGEgTm9kZScpOwogICAgaWYgKCFPYmplY3QoaXNbInciIC8qIGlzTm9kZSAqL10pKGZhbHNlRXhwcikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BhcmFtZXRlciBmYWxzZUV4cHIgbXVzdCBiZSBhIE5vZGUnKTsKICAgIHRoaXMuY29uZGl0aW9uID0gY29uZGl0aW9uOwogICAgdGhpcy50cnVlRXhwciA9IHRydWVFeHByOwogICAgdGhpcy5mYWxzZUV4cHIgPSBmYWxzZUV4cHI7CiAgfQoKICBDb25kaXRpb25hbE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTsKICBDb25kaXRpb25hbE5vZGUucHJvdG90eXBlLnR5cGUgPSAnQ29uZGl0aW9uYWxOb2RlJzsKICBDb25kaXRpb25hbE5vZGUucHJvdG90eXBlLmlzQ29uZGl0aW9uYWxOb2RlID0gdHJ1ZTsKICAvKioKICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi4KICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuCiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuCiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuCiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9ucwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9scwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS4KICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZToKICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKikKICAgKi8KCiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykgewogICAgdmFyIGV2YWxDb25kaXRpb24gPSB0aGlzLmNvbmRpdGlvbi5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7CgogICAgdmFyIGV2YWxUcnVlRXhwciA9IHRoaXMudHJ1ZUV4cHIuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpOwoKICAgIHZhciBldmFsRmFsc2VFeHByID0gdGhpcy5mYWxzZUV4cHIuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpOwoKICAgIHJldHVybiBmdW5jdGlvbiBldmFsQ29uZGl0aW9uYWxOb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7CiAgICAgIHJldHVybiB0ZXN0Q29uZGl0aW9uKGV2YWxDb25kaXRpb24oc2NvcGUsIGFyZ3MsIGNvbnRleHQpKSA/IGV2YWxUcnVlRXhwcihzY29wZSwgYXJncywgY29udGV4dCkgOiBldmFsRmFsc2VFeHByKHNjb3BlLCBhcmdzLCBjb250ZXh0KTsKICAgIH07CiAgfTsKICAvKioKICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZQogICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2sKICAgKi8KCgogIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgewogICAgY2FsbGJhY2sodGhpcy5jb25kaXRpb24sICdjb25kaXRpb24nLCB0aGlzKTsKICAgIGNhbGxiYWNrKHRoaXMudHJ1ZUV4cHIsICd0cnVlRXhwcicsIHRoaXMpOwogICAgY2FsbGJhY2sodGhpcy5mYWxzZUV4cHIsICdmYWxzZUV4cHInLCB0aGlzKTsKICB9OwogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBDb25kaXRpb25hbE5vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmcKICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS4KICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrCiAgICogQHJldHVybnMge0NvbmRpdGlvbmFsTm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGUKICAgKi8KCgogIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICByZXR1cm4gbmV3IENvbmRpdGlvbmFsTm9kZSh0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5jb25kaXRpb24sICdjb25kaXRpb24nLCB0aGlzKSksIHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLnRydWVFeHByLCAndHJ1ZUV4cHInLCB0aGlzKSksIHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLmZhbHNlRXhwciwgJ2ZhbHNlRXhwcicsIHRoaXMpKSk7CiAgfTsKICAvKioKICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5CiAgICogQHJldHVybiB7Q29uZGl0aW9uYWxOb2RlfQogICAqLwoKCiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWxOb2RlKHRoaXMuY29uZGl0aW9uLCB0aGlzLnRydWVFeHByLCB0aGlzLmZhbHNlRXhwcik7CiAgfTsKICAvKioKICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0cgogICAqLwoKCiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJzsKICAgIHZhciBwcmVjZWRlbmNlID0gZ2V0UHJlY2VkZW5jZSh0aGlzLCBwYXJlbnRoZXNpcyk7IC8vIEVuY2xvc2UgQXJndW1lbnRzIGluIHBhcmVudGhlc2VzIGlmIHRoZXkgYXJlIGFuIE9wZXJhdG9yTm9kZQogICAgLy8gb3IgaGF2ZSBsb3dlciBvciBlcXVhbCBwcmVjZWRlbmNlCiAgICAvLyBOT1RFOiBlbmNsb3NpbmcgYWxsIE9wZXJhdG9yTm9kZXMgaW4gcGFyZW50aGVzZXMgaXMgYSBkZWNpc2lvbgogICAgLy8gcHVyZWx5IGJhc2VkIG9uIGFlc3RoZXRpY3MgYW5kIHJlYWRhYmlsaXR5CgogICAgdmFyIGNvbmRpdGlvbiA9IHRoaXMuY29uZGl0aW9uLnRvU3RyaW5nKG9wdGlvbnMpOwogICAgdmFyIGNvbmRpdGlvblByZWNlZGVuY2UgPSBnZXRQcmVjZWRlbmNlKHRoaXMuY29uZGl0aW9uLCBwYXJlbnRoZXNpcyk7CgogICAgaWYgKHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCB0aGlzLmNvbmRpdGlvbi50eXBlID09PSAnT3BlcmF0b3JOb2RlJyB8fCBjb25kaXRpb25QcmVjZWRlbmNlICE9PSBudWxsICYmIGNvbmRpdGlvblByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZSkgewogICAgICBjb25kaXRpb24gPSAnKCcgKyBjb25kaXRpb24gKyAnKSc7CiAgICB9CgogICAgdmFyIHRydWVFeHByID0gdGhpcy50cnVlRXhwci50b1N0cmluZyhvcHRpb25zKTsKICAgIHZhciB0cnVlUHJlY2VkZW5jZSA9IGdldFByZWNlZGVuY2UodGhpcy50cnVlRXhwciwgcGFyZW50aGVzaXMpOwoKICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy50cnVlRXhwci50eXBlID09PSAnT3BlcmF0b3JOb2RlJyB8fCB0cnVlUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiB0cnVlUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7CiAgICAgIHRydWVFeHByID0gJygnICsgdHJ1ZUV4cHIgKyAnKSc7CiAgICB9CgogICAgdmFyIGZhbHNlRXhwciA9IHRoaXMuZmFsc2VFeHByLnRvU3RyaW5nKG9wdGlvbnMpOwogICAgdmFyIGZhbHNlUHJlY2VkZW5jZSA9IGdldFByZWNlZGVuY2UodGhpcy5mYWxzZUV4cHIsIHBhcmVudGhlc2lzKTsKCiAgICBpZiAocGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IHRoaXMuZmFsc2VFeHByLnR5cGUgPT09ICdPcGVyYXRvck5vZGUnIHx8IGZhbHNlUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBmYWxzZVByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZSkgewogICAgICBmYWxzZUV4cHIgPSAnKCcgKyBmYWxzZUV4cHIgKyAnKSc7CiAgICB9CgogICAgcmV0dXJuIGNvbmRpdGlvbiArICcgPyAnICsgdHJ1ZUV4cHIgKyAnIDogJyArIGZhbHNlRXhwcjsKICB9OwogIC8qKgogICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUKICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAqLwoKCiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gewogICAgICBtYXRoanM6ICdDb25kaXRpb25hbE5vZGUnLAogICAgICBjb25kaXRpb246IHRoaXMuY29uZGl0aW9uLAogICAgICB0cnVlRXhwcjogdGhpcy50cnVlRXhwciwKICAgICAgZmFsc2VFeHByOiB0aGlzLmZhbHNlRXhwcgogICAgfTsKICB9OwogIC8qKgogICAqIEluc3RhbnRpYXRlIGFuIENvbmRpdGlvbmFsTm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2UKICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHsibWF0aGpzIjogIkNvbmRpdGlvbmFsTm9kZSIsICJjb25kaXRpb24iOiAuLi4sICJ0cnVlRXhwciI6IC4uLiwgImZhbHNlRXhwciI6IC4uLn1gLAogICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWwKICAgKiBAcmV0dXJucyB7Q29uZGl0aW9uYWxOb2RlfQogICAqLwoKCiAgQ29uZGl0aW9uYWxOb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHsKICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWxOb2RlKGpzb24uY29uZGl0aW9uLCBqc29uLnRydWVFeHByLCBqc29uLmZhbHNlRXhwcik7CiAgfTsKICAvKioKICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvbgogICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICogQHJldHVybiB7c3RyaW5nfSBzdHIKICAgKi8KCgogIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7CiAgICB2YXIgcHJlY2VkZW5jZSA9IGdldFByZWNlZGVuY2UodGhpcywgcGFyZW50aGVzaXMpOyAvLyBFbmNsb3NlIEFyZ3VtZW50cyBpbiBwYXJlbnRoZXNlcyBpZiB0aGV5IGFyZSBhbiBPcGVyYXRvck5vZGUKICAgIC8vIG9yIGhhdmUgbG93ZXIgb3IgZXF1YWwgcHJlY2VkZW5jZQogICAgLy8gTk9URTogZW5jbG9zaW5nIGFsbCBPcGVyYXRvck5vZGVzIGluIHBhcmVudGhlc2VzIGlzIGEgZGVjaXNpb24KICAgIC8vIHB1cmVseSBiYXNlZCBvbiBhZXN0aGV0aWNzIGFuZCByZWFkYWJpbGl0eQoKICAgIHZhciBjb25kaXRpb24gPSB0aGlzLmNvbmRpdGlvbi50b0hUTUwob3B0aW9ucyk7CiAgICB2YXIgY29uZGl0aW9uUHJlY2VkZW5jZSA9IGdldFByZWNlZGVuY2UodGhpcy5jb25kaXRpb24sIHBhcmVudGhlc2lzKTsKCiAgICBpZiAocGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IHRoaXMuY29uZGl0aW9uLnR5cGUgPT09ICdPcGVyYXRvck5vZGUnIHx8IGNvbmRpdGlvblByZWNlZGVuY2UgIT09IG51bGwgJiYgY29uZGl0aW9uUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7CiAgICAgIGNvbmRpdGlvbiA9ICc8c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzIj4oPC9zcGFuPicgKyBjb25kaXRpb24gKyAnPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KTwvc3Bhbj4nOwogICAgfQoKICAgIHZhciB0cnVlRXhwciA9IHRoaXMudHJ1ZUV4cHIudG9IVE1MKG9wdGlvbnMpOwogICAgdmFyIHRydWVQcmVjZWRlbmNlID0gZ2V0UHJlY2VkZW5jZSh0aGlzLnRydWVFeHByLCBwYXJlbnRoZXNpcyk7CgogICAgaWYgKHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCB0aGlzLnRydWVFeHByLnR5cGUgPT09ICdPcGVyYXRvck5vZGUnIHx8IHRydWVQcmVjZWRlbmNlICE9PSBudWxsICYmIHRydWVQcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UpIHsKICAgICAgdHJ1ZUV4cHIgPSAnPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KDwvc3Bhbj4nICsgdHJ1ZUV4cHIgKyAnPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KTwvc3Bhbj4nOwogICAgfQoKICAgIHZhciBmYWxzZUV4cHIgPSB0aGlzLmZhbHNlRXhwci50b0hUTUwob3B0aW9ucyk7CiAgICB2YXIgZmFsc2VQcmVjZWRlbmNlID0gZ2V0UHJlY2VkZW5jZSh0aGlzLmZhbHNlRXhwciwgcGFyZW50aGVzaXMpOwoKICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy5mYWxzZUV4cHIudHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgfHwgZmFsc2VQcmVjZWRlbmNlICE9PSBudWxsICYmIGZhbHNlUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7CiAgICAgIGZhbHNlRXhwciA9ICc8c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzIj4oPC9zcGFuPicgKyBmYWxzZUV4cHIgKyAnPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KTwvc3Bhbj4nOwogICAgfQoKICAgIHJldHVybiBjb25kaXRpb24gKyAnPHNwYW4gY2xhc3M9Im1hdGgtb3BlcmF0b3IgbWF0aC1jb25kaXRpb25hbC1vcGVyYXRvciI+Pzwvc3Bhbj4nICsgdHJ1ZUV4cHIgKyAnPHNwYW4gY2xhc3M9Im1hdGgtb3BlcmF0b3IgbWF0aC1jb25kaXRpb25hbC1vcGVyYXRvciI+Ojwvc3Bhbj4nICsgZmFsc2VFeHByOwogIH07CiAgLyoqCiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0cgogICAqLwoKCiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgcmV0dXJuICdcXGJlZ2lue2Nhc2VzfSB7JyArIHRoaXMudHJ1ZUV4cHIudG9UZXgob3B0aW9ucykgKyAnfSwgJlxccXVhZHtcXHRleHR7aWYgfVxcOycgKyB0aGlzLmNvbmRpdGlvbi50b1RleChvcHRpb25zKSArICd9XFxcXHsnICsgdGhpcy5mYWxzZUV4cHIudG9UZXgob3B0aW9ucykgKyAnfSwgJlxccXVhZHtcXHRleHR7b3RoZXJ3aXNlfX1cXGVuZHtjYXNlc30nOwogIH07CiAgLyoqCiAgICogVGVzdCB3aGV0aGVyIGEgY29uZGl0aW9uIGlzIG1ldAogICAqIEBwYXJhbSB7Kn0gY29uZGl0aW9uCiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgY29uZGl0aW9uIGlzIHRydWUgb3Igbm9uLXplcm8sIGVsc2UgZmFsc2UKICAgKi8KCgogIGZ1bmN0aW9uIHRlc3RDb25kaXRpb24oY29uZGl0aW9uKSB7CiAgICBpZiAodHlwZW9mIGNvbmRpdGlvbiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGNvbmRpdGlvbiA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiBjb25kaXRpb24gPT09ICdzdHJpbmcnKSB7CiAgICAgIHJldHVybiAhIWNvbmRpdGlvbjsKICAgIH0KCiAgICBpZiAoY29uZGl0aW9uKSB7CiAgICAgIGlmIChPYmplY3QoaXNbImUiIC8qIGlzQmlnTnVtYmVyICovXSkoY29uZGl0aW9uKSkgewogICAgICAgIHJldHVybiAhY29uZGl0aW9uLmlzWmVybygpOwogICAgICB9CgogICAgICBpZiAoT2JqZWN0KGlzWyJqIiAvKiBpc0NvbXBsZXggKi9dKShjb25kaXRpb24pKSB7CiAgICAgICAgcmV0dXJuICEhKGNvbmRpdGlvbi5yZSB8fCBjb25kaXRpb24uaW0pOwogICAgICB9CgogICAgICBpZiAoT2JqZWN0KGlzWyJMIiAvKiBpc1VuaXQgKi9dKShjb25kaXRpb24pKSB7CiAgICAgICAgcmV0dXJuICEhY29uZGl0aW9uLnZhbHVlOwogICAgICB9CiAgICB9CgogICAgaWYgKGNvbmRpdGlvbiA9PT0gbnVsbCB8fCBjb25kaXRpb24gPT09IHVuZGVmaW5lZCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5zdXBwb3J0ZWQgdHlwZSBvZiBjb25kaXRpb24gIicgKyBPYmplY3QoaXNbIk0iIC8qIHR5cGVPZiAqL10pKGNvbmRpdGlvbikgKyAnIicpOwogIH0KCiAgcmV0dXJuIENvbmRpdGlvbmFsTm9kZTsKfSwgewogIGlzQ2xhc3M6IHRydWUsCiAgaXNOb2RlOiB0cnVlCn0pOwovLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2VzY2FwZS1sYXRleC9kaXN0L2luZGV4LmpzCnZhciBkaXN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7CnZhciBkaXN0X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGRpc3QpOwoKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdXRpbHMvbGF0ZXguanMKLyogZXNsaW50IG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZzogIm9mZiIgKi8KCgp2YXIgbGF0ZXhTeW1ib2xzID0gewogIC8vIEdSRUVLIExFVFRFUlMKICBBbHBoYTogJ0EnLAogIGFscGhhOiAnXFxhbHBoYScsCiAgQmV0YTogJ0InLAogIGJldGE6ICdcXGJldGEnLAogIEdhbW1hOiAnXFxHYW1tYScsCiAgZ2FtbWE6ICdcXGdhbW1hJywKICBEZWx0YTogJ1xcRGVsdGEnLAogIGRlbHRhOiAnXFxkZWx0YScsCiAgRXBzaWxvbjogJ0UnLAogIGVwc2lsb246ICdcXGVwc2lsb24nLAogIHZhcmVwc2lsb246ICdcXHZhcmVwc2lsb24nLAogIFpldGE6ICdaJywKICB6ZXRhOiAnXFx6ZXRhJywKICBFdGE6ICdIJywKICBldGE6ICdcXGV0YScsCiAgVGhldGE6ICdcXFRoZXRhJywKICB0aGV0YTogJ1xcdGhldGEnLAogIHZhcnRoZXRhOiAnXFx2YXJ0aGV0YScsCiAgSW90YTogJ0knLAogIGlvdGE6ICdcXGlvdGEnLAogIEthcHBhOiAnSycsCiAga2FwcGE6ICdcXGthcHBhJywKICB2YXJrYXBwYTogJ1xcdmFya2FwcGEnLAogIExhbWJkYTogJ1xcTGFtYmRhJywKICBsYW1iZGE6ICdcXGxhbWJkYScsCiAgTXU6ICdNJywKICBtdTogJ1xcbXUnLAogIE51OiAnTicsCiAgbnU6ICdcXG51JywKICBYaTogJ1xcWGknLAogIHhpOiAnXFx4aScsCiAgT21pY3JvbjogJ08nLAogIG9taWNyb246ICdvJywKICBQaTogJ1xcUGknLAogIHBpOiAnXFxwaScsCiAgdmFycGk6ICdcXHZhcnBpJywKICBSaG86ICdQJywKICByaG86ICdcXHJobycsCiAgdmFycmhvOiAnXFx2YXJyaG8nLAogIFNpZ21hOiAnXFxTaWdtYScsCiAgc2lnbWE6ICdcXHNpZ21hJywKICB2YXJzaWdtYTogJ1xcdmFyc2lnbWEnLAogIFRhdTogJ1QnLAogIHRhdTogJ1xcdGF1JywKICBVcHNpbG9uOiAiXFxVcHNpbG9uIiwKICB1cHNpbG9uOiAiXFx1cHNpbG9uIiwKICBQaGk6ICdcXFBoaScsCiAgcGhpOiAnXFxwaGknLAogIHZhcnBoaTogJ1xcdmFycGhpJywKICBDaGk6ICdYJywKICBjaGk6ICdcXGNoaScsCiAgUHNpOiAnXFxQc2knLAogIHBzaTogJ1xccHNpJywKICBPbWVnYTogJ1xcT21lZ2EnLAogIG9tZWdhOiAnXFxvbWVnYScsCiAgLy8gbG9naWMKICAidHJ1ZSI6ICdcXG1hdGhybXtUcnVlfScsCiAgImZhbHNlIjogJ1xcbWF0aHJte0ZhbHNlfScsCiAgLy8gb3RoZXIKICBpOiAnaScsCiAgLy8gVE9ETyB1c2UgXGkgPz8KICBpbmY6ICdcXGluZnR5JywKICBJbmY6ICdcXGluZnR5JywKICBpbmZpbml0eTogJ1xcaW5mdHknLAogIEluZmluaXR5OiAnXFxpbmZ0eScsCiAgb286ICdcXGluZnR5JywKICBsaW06ICdcXGxpbScsCiAgdW5kZWZpbmVkOiAnXFxtYXRoYmZ7P30nCn07CnZhciBsYXRleE9wZXJhdG9ycyA9IHsKICB0cmFuc3Bvc2U6ICdeXFx0b3AnLAogIGN0cmFuc3Bvc2U6ICdeSCcsCiAgZmFjdG9yaWFsOiAnIScsCiAgcG93OiAnXicsCiAgZG90UG93OiAnLl5cXHdlZGdlJywKICAvLyBUT0RPIGZpbmQgaWRlYWwgc29sdXRpb24KICB1bmFyeVBsdXM6ICcrJywKICB1bmFyeU1pbnVzOiAnLScsCiAgYml0Tm90OiAnXFx+JywKICAvLyBUT0RPIGZpbmQgaWRlYWwgc29sdXRpb24KICBub3Q6ICdcXG5lZycsCiAgbXVsdGlwbHk6ICdcXGNkb3QnLAogIGRpdmlkZTogJ1xcZnJhYycsCiAgLy8gVE9ETyBob3cgdG8gaGFuZGxlIHRoYXQgcHJvcGVybHk/CiAgZG90TXVsdGlwbHk6ICcuXFxjZG90JywKICAvLyBUT0RPIGZpbmQgaWRlYWwgc29sdXRpb24KICBkb3REaXZpZGU6ICcuOicsCiAgLy8gVE9ETyBmaW5kIGlkZWFsIHNvbHV0aW9uCiAgbW9kOiAnXFxtb2QnLAogIGFkZDogJysnLAogIHN1YnRyYWN0OiAnLScsCiAgdG86ICdcXHJpZ2h0YXJyb3cnLAogIGxlZnRTaGlmdDogJzw8JywKICByaWdodEFyaXRoU2hpZnQ6ICc+PicsCiAgcmlnaHRMb2dTaGlmdDogJz4+PicsCiAgZXF1YWw6ICc9JywKICB1bmVxdWFsOiAnXFxuZXEnLAogIHNtYWxsZXI6ICc8JywKICBsYXJnZXI6ICc+JywKICBzbWFsbGVyRXE6ICdcXGxlcScsCiAgbGFyZ2VyRXE6ICdcXGdlcScsCiAgYml0QW5kOiAnXFwmJywKICBiaXRYb3I6ICJcXHVuZGVybGluZXt8fSIsCiAgYml0T3I6ICd8JywKICBhbmQ6ICdcXHdlZGdlJywKICB4b3I6ICdcXHZlZWJhcicsCiAgb3I6ICdcXHZlZScKfTsKdmFyIGxhdGV4RnVuY3Rpb25zID0gewogIC8vIGFyaXRobWV0aWMKICBhYnM6IHsKICAgIDE6ICdcXGxlZnR8JHthcmdzWzBdfVxccmlnaHR8JwogIH0sCiAgYWRkOiB7CiAgICAyOiAiXFxsZWZ0KCR7YXJnc1swXX0iLmNvbmNhdChsYXRleE9wZXJhdG9ycy5hZGQsICIke2FyZ3NbMV19XFxyaWdodCkiKQogIH0sCiAgY2JydDogewogICAgMTogJ1xcc3FydFszXXske2FyZ3NbMF19fScKICB9LAogIGNlaWw6IHsKICAgIDE6ICdcXGxlZnRcXGxjZWlsJHthcmdzWzBdfVxccmlnaHRcXHJjZWlsJwogIH0sCiAgY3ViZTogewogICAgMTogJ1xcbGVmdCgke2FyZ3NbMF19XFxyaWdodCleMycKICB9LAogIGRpdmlkZTogewogICAgMjogJ1xcZnJhY3ske2FyZ3NbMF19fXske2FyZ3NbMV19fScKICB9LAogIGRvdERpdmlkZTogewogICAgMjogIlxcbGVmdCgke2FyZ3NbMF19Ii5jb25jYXQobGF0ZXhPcGVyYXRvcnMuZG90RGl2aWRlLCAiJHthcmdzWzFdfVxccmlnaHQpIikKICB9LAogIGRvdE11bHRpcGx5OiB7CiAgICAyOiAiXFxsZWZ0KCR7YXJnc1swXX0iLmNvbmNhdChsYXRleE9wZXJhdG9ycy5kb3RNdWx0aXBseSwgIiR7YXJnc1sxXX1cXHJpZ2h0KSIpCiAgfSwKICBkb3RQb3c6IHsKICAgIDI6ICJcXGxlZnQoJHthcmdzWzBdfSIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmRvdFBvdywgIiR7YXJnc1sxXX1cXHJpZ2h0KSIpCiAgfSwKICBleHA6IHsKICAgIDE6ICdcXGV4cFxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCknCiAgfSwKICBleHBtMTogIlxcbGVmdChlIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMucG93LCAieyR7YXJnc1swXX19LTFcXHJpZ2h0KSIpLAogIGZpeDogewogICAgMTogJ1xcbWF0aHJteyR7bmFtZX19XFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KScKICB9LAogIGZsb29yOiB7CiAgICAxOiAnXFxsZWZ0XFxsZmxvb3Ike2FyZ3NbMF19XFxyaWdodFxccmZsb29yJwogIH0sCiAgZ2NkOiAnXFxnY2RcXGxlZnQoJHthcmdzfVxccmlnaHQpJywKICBoeXBvdDogJ1xcaHlwb3RcXGxlZnQoJHthcmdzfVxccmlnaHQpJywKICBsb2c6IHsKICAgIDE6ICdcXGxuXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KScsCiAgICAyOiAnXFxsb2dfeyR7YXJnc1sxXX19XFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KScKICB9LAogIGxvZzEwOiB7CiAgICAxOiAnXFxsb2dfezEwfVxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCknCiAgfSwKICBsb2cxcDogewogICAgMTogJ1xcbG5cXGxlZnQoJHthcmdzWzBdfSsxXFxyaWdodCknLAogICAgMjogJ1xcbG9nX3ske2FyZ3NbMV19fVxcbGVmdCgke2FyZ3NbMF19KzFcXHJpZ2h0KScKICB9LAogIGxvZzI6ICdcXGxvZ197Mn1cXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpJywKICBtb2Q6IHsKICAgIDI6ICJcXGxlZnQoJHthcmdzWzBdfSIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLm1vZCwgIiR7YXJnc1sxXX1cXHJpZ2h0KSIpCiAgfSwKICBtdWx0aXBseTogewogICAgMjogIlxcbGVmdCgke2FyZ3NbMF19Ii5jb25jYXQobGF0ZXhPcGVyYXRvcnMubXVsdGlwbHksICIke2FyZ3NbMV19XFxyaWdodCkiKQogIH0sCiAgbm9ybTogewogICAgMTogJ1xcbGVmdFxcfCR7YXJnc1swXX1cXHJpZ2h0XFx8JywKICAgIDI6IHVuZGVmaW5lZCAvLyB1c2UgZGVmYXVsdCB0ZW1wbGF0ZQoKICB9LAogIG50aFJvb3Q6IHsKICAgIDI6ICdcXHNxcnRbJHthcmdzWzFdfV17JHthcmdzWzBdfX0nCiAgfSwKICBudGhSb290czogewogICAgMjogJ1xce3kgOiAkeV57YXJnc1sxXX0gPSB7JHthcmdzWzBdfX1cXH0nCiAgfSwKICBwb3c6IHsKICAgIDI6ICJcXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMucG93LCAieyR7YXJnc1sxXX19IikKICB9LAogIHJvdW5kOiB7CiAgICAxOiAnXFxsZWZ0XFxsZmxvb3Ike2FyZ3NbMF19XFxyaWdodFxccmNlaWwnLAogICAgMjogdW5kZWZpbmVkIC8vIHVzZSBkZWZhdWx0IHRlbXBsYXRlCgogIH0sCiAgc2lnbjogewogICAgMTogJ1xcbWF0aHJteyR7bmFtZX19XFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KScKICB9LAogIHNxcnQ6IHsKICAgIDE6ICdcXHNxcnR7JHthcmdzWzBdfX0nCiAgfSwKICBzcXVhcmU6IHsKICAgIDE6ICdcXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpXjInCiAgfSwKICBzdWJ0cmFjdDogewogICAgMjogIlxcbGVmdCgke2FyZ3NbMF19Ii5jb25jYXQobGF0ZXhPcGVyYXRvcnMuc3VidHJhY3QsICIke2FyZ3NbMV19XFxyaWdodCkiKQogIH0sCiAgdW5hcnlNaW51czogewogICAgMTogIiIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLnVuYXJ5TWludXMsICJcXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpIikKICB9LAogIHVuYXJ5UGx1czogewogICAgMTogIiIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLnVuYXJ5UGx1cywgIlxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkiKQogIH0sCiAgLy8gYml0d2lzZQogIGJpdEFuZDogewogICAgMjogIlxcbGVmdCgke2FyZ3NbMF19Ii5jb25jYXQobGF0ZXhPcGVyYXRvcnMuYml0QW5kLCAiJHthcmdzWzFdfVxccmlnaHQpIikKICB9LAogIGJpdE5vdDogewogICAgMTogbGF0ZXhPcGVyYXRvcnMuYml0Tm90ICsgJ1xcbGVmdCgke2FyZ3NbMF19XFxyaWdodCknCiAgfSwKICBiaXRPcjogewogICAgMjogIlxcbGVmdCgke2FyZ3NbMF19Ii5jb25jYXQobGF0ZXhPcGVyYXRvcnMuYml0T3IsICIke2FyZ3NbMV19XFxyaWdodCkiKQogIH0sCiAgYml0WG9yOiB7CiAgICAyOiAiXFxsZWZ0KCR7YXJnc1swXX0iLmNvbmNhdChsYXRleE9wZXJhdG9ycy5iaXRYb3IsICIke2FyZ3NbMV19XFxyaWdodCkiKQogIH0sCiAgbGVmdFNoaWZ0OiB7CiAgICAyOiAiXFxsZWZ0KCR7YXJnc1swXX0iLmNvbmNhdChsYXRleE9wZXJhdG9ycy5sZWZ0U2hpZnQsICIke2FyZ3NbMV19XFxyaWdodCkiKQogIH0sCiAgcmlnaHRBcml0aFNoaWZ0OiB7CiAgICAyOiAiXFxsZWZ0KCR7YXJnc1swXX0iLmNvbmNhdChsYXRleE9wZXJhdG9ycy5yaWdodEFyaXRoU2hpZnQsICIke2FyZ3NbMV19XFxyaWdodCkiKQogIH0sCiAgcmlnaHRMb2dTaGlmdDogewogICAgMjogIlxcbGVmdCgke2FyZ3NbMF19Ii5jb25jYXQobGF0ZXhPcGVyYXRvcnMucmlnaHRMb2dTaGlmdCwgIiR7YXJnc1sxXX1cXHJpZ2h0KSIpCiAgfSwKICAvLyBjb21iaW5hdG9yaWNzCiAgYmVsbE51bWJlcnM6IHsKICAgIDE6ICdcXG1hdGhybXtCfV97JHthcmdzWzBdfX0nCiAgfSwKICBjYXRhbGFuOiB7CiAgICAxOiAnXFxtYXRocm17Q31feyR7YXJnc1swXX19JwogIH0sCiAgc3RpcmxpbmdTMjogewogICAgMjogJ1xcbWF0aHJte1N9XFxsZWZ0KCR7YXJnc31cXHJpZ2h0KScKICB9LAogIC8vIGNvbXBsZXgKICBhcmc6IHsKICAgIDE6ICdcXGFyZ1xcbGVmdCgke2FyZ3NbMF19XFxyaWdodCknCiAgfSwKICBjb25qOiB7CiAgICAxOiAnXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KV4qJwogIH0sCiAgaW06IHsKICAgIDE6ICdcXEltXFxsZWZ0XFxsYnJhY2Uke2FyZ3NbMF19XFxyaWdodFxccmJyYWNlJwogIH0sCiAgcmU6IHsKICAgIDE6ICdcXFJlXFxsZWZ0XFxsYnJhY2Uke2FyZ3NbMF19XFxyaWdodFxccmJyYWNlJwogIH0sCiAgLy8gbG9naWNhbAogIGFuZDogewogICAgMjogIlxcbGVmdCgke2FyZ3NbMF19Ii5jb25jYXQobGF0ZXhPcGVyYXRvcnMuYW5kLCAiJHthcmdzWzFdfVxccmlnaHQpIikKICB9LAogIG5vdDogewogICAgMTogbGF0ZXhPcGVyYXRvcnMubm90ICsgJ1xcbGVmdCgke2FyZ3NbMF19XFxyaWdodCknCiAgfSwKICBvcjogewogICAgMjogIlxcbGVmdCgke2FyZ3NbMF19Ii5jb25jYXQobGF0ZXhPcGVyYXRvcnMub3IsICIke2FyZ3NbMV19XFxyaWdodCkiKQogIH0sCiAgeG9yOiB7CiAgICAyOiAiXFxsZWZ0KCR7YXJnc1swXX0iLmNvbmNhdChsYXRleE9wZXJhdG9ycy54b3IsICIke2FyZ3NbMV19XFxyaWdodCkiKQogIH0sCiAgLy8gbWF0cml4CiAgY3Jvc3M6IHsKICAgIDI6ICdcXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpXFx0aW1lc1xcbGVmdCgke2FyZ3NbMV19XFxyaWdodCknCiAgfSwKICBjdHJhbnNwb3NlOiB7CiAgICAxOiAiXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KSIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmN0cmFuc3Bvc2UpCiAgfSwKICBkZXQ6IHsKICAgIDE6ICdcXGRldFxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCknCiAgfSwKICBkb3Q6IHsKICAgIDI6ICdcXGxlZnQoJHthcmdzWzBdfVxcY2RvdCR7YXJnc1sxXX1cXHJpZ2h0KScKICB9LAogIGV4cG06IHsKICAgIDE6ICdcXGV4cFxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCknCiAgfSwKICBpbnY6IHsKICAgIDE6ICdcXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpXnstMX0nCiAgfSwKICBzcXJ0bTogewogICAgMTogInske2FyZ3NbMF19fSIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLnBvdywgIntcXGZyYWN7MX17Mn19IikKICB9LAogIHRyYWNlOiB7CiAgICAxOiAnXFxtYXRocm17dHJ9XFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KScKICB9LAogIHRyYW5zcG9zZTogewogICAgMTogIlxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkiLmNvbmNhdChsYXRleE9wZXJhdG9ycy50cmFuc3Bvc2UpCiAgfSwKICAvLyBwcm9iYWJpbGl0eQogIGNvbWJpbmF0aW9uczogewogICAgMjogJ1xcYmlub217JHthcmdzWzBdfX17JHthcmdzWzFdfX0nCiAgfSwKICBjb21iaW5hdGlvbnNXaXRoUmVwOiB7CiAgICAyOiAnXFxsZWZ0KFxcIVxcIXtcXGJpbm9teyR7YXJnc1swXX19eyR7YXJnc1sxXX19fVxcIVxcIVxccmlnaHQpJwogIH0sCiAgZmFjdG9yaWFsOiB7CiAgICAxOiAiXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KSIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmZhY3RvcmlhbCkKICB9LAogIGdhbW1hOiB7CiAgICAxOiAnXFxHYW1tYVxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCknCiAgfSwKICAvLyByZWxhdGlvbmFsCiAgZXF1YWw6IHsKICAgIDI6ICJcXGxlZnQoJHthcmdzWzBdfSIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmVxdWFsLCAiJHthcmdzWzFdfVxccmlnaHQpIikKICB9LAogIGxhcmdlcjogewogICAgMjogIlxcbGVmdCgke2FyZ3NbMF19Ii5jb25jYXQobGF0ZXhPcGVyYXRvcnMubGFyZ2VyLCAiJHthcmdzWzFdfVxccmlnaHQpIikKICB9LAogIGxhcmdlckVxOiB7CiAgICAyOiAiXFxsZWZ0KCR7YXJnc1swXX0iLmNvbmNhdChsYXRleE9wZXJhdG9ycy5sYXJnZXJFcSwgIiR7YXJnc1sxXX1cXHJpZ2h0KSIpCiAgfSwKICBzbWFsbGVyOiB7CiAgICAyOiAiXFxsZWZ0KCR7YXJnc1swXX0iLmNvbmNhdChsYXRleE9wZXJhdG9ycy5zbWFsbGVyLCAiJHthcmdzWzFdfVxccmlnaHQpIikKICB9LAogIHNtYWxsZXJFcTogewogICAgMjogIlxcbGVmdCgke2FyZ3NbMF19Ii5jb25jYXQobGF0ZXhPcGVyYXRvcnMuc21hbGxlckVxLCAiJHthcmdzWzFdfVxccmlnaHQpIikKICB9LAogIHVuZXF1YWw6IHsKICAgIDI6ICJcXGxlZnQoJHthcmdzWzBdfSIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLnVuZXF1YWwsICIke2FyZ3NbMV19XFxyaWdodCkiKQogIH0sCiAgLy8gc3BlY2lhbAogIGVyZjogewogICAgMTogJ2VyZlxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCknCiAgfSwKICAvLyBzdGF0aXN0aWNzCiAgbWF4OiAnXFxtYXhcXGxlZnQoJHthcmdzfVxccmlnaHQpJywKICBtaW46ICdcXG1pblxcbGVmdCgke2FyZ3N9XFxyaWdodCknLAogIHZhcmlhbmNlOiAnXFxtYXRocm17VmFyfVxcbGVmdCgke2FyZ3N9XFxyaWdodCknLAogIC8vIHRyaWdvbm9tZXRyeQogIGFjb3M6IHsKICAgIDE6ICdcXGNvc157LTF9XFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KScKICB9LAogIGFjb3NoOiB7CiAgICAxOiAnXFxjb3NoXnstMX1cXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpJwogIH0sCiAgYWNvdDogewogICAgMTogJ1xcY290XnstMX1cXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpJwogIH0sCiAgYWNvdGg6IHsKICAgIDE6ICdcXGNvdGheey0xfVxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCknCiAgfSwKICBhY3NjOiB7CiAgICAxOiAnXFxjc2Neey0xfVxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCknCiAgfSwKICBhY3NjaDogewogICAgMTogJ1xcbWF0aHJte2NzY2h9XnstMX1cXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpJwogIH0sCiAgYXNlYzogewogICAgMTogJ1xcc2VjXnstMX1cXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpJwogIH0sCiAgYXNlY2g6IHsKICAgIDE6ICdcXG1hdGhybXtzZWNofV57LTF9XFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KScKICB9LAogIGFzaW46IHsKICAgIDE6ICdcXHNpbl57LTF9XFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KScKICB9LAogIGFzaW5oOiB7CiAgICAxOiAnXFxzaW5oXnstMX1cXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpJwogIH0sCiAgYXRhbjogewogICAgMTogJ1xcdGFuXnstMX1cXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpJwogIH0sCiAgYXRhbjI6IHsKICAgIDI6ICdcXG1hdGhybXthdGFuMn1cXGxlZnQoJHthcmdzfVxccmlnaHQpJwogIH0sCiAgYXRhbmg6IHsKICAgIDE6ICdcXHRhbmheey0xfVxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCknCiAgfSwKICBjb3M6IHsKICAgIDE6ICdcXGNvc1xcbGVmdCgke2FyZ3NbMF19XFxyaWdodCknCiAgfSwKICBjb3NoOiB7CiAgICAxOiAnXFxjb3NoXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KScKICB9LAogIGNvdDogewogICAgMTogJ1xcY290XFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KScKICB9LAogIGNvdGg6IHsKICAgIDE6ICdcXGNvdGhcXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpJwogIH0sCiAgY3NjOiB7CiAgICAxOiAnXFxjc2NcXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpJwogIH0sCiAgY3NjaDogewogICAgMTogJ1xcbWF0aHJte2NzY2h9XFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KScKICB9LAogIHNlYzogewogICAgMTogJ1xcc2VjXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KScKICB9LAogIHNlY2g6IHsKICAgIDE6ICdcXG1hdGhybXtzZWNofVxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCknCiAgfSwKICBzaW46IHsKICAgIDE6ICdcXHNpblxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCknCiAgfSwKICBzaW5oOiB7CiAgICAxOiAnXFxzaW5oXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KScKICB9LAogIHRhbjogewogICAgMTogJ1xcdGFuXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KScKICB9LAogIHRhbmg6IHsKICAgIDE6ICdcXHRhbmhcXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpJwogIH0sCiAgLy8gdW5pdAogIHRvOiB7CiAgICAyOiAiXFxsZWZ0KCR7YXJnc1swXX0iLmNvbmNhdChsYXRleE9wZXJhdG9ycy50bywgIiR7YXJnc1sxXX1cXHJpZ2h0KSIpCiAgfSwKICAvLyB1dGlscwogIG51bWVyaWM6IGZ1bmN0aW9uIG51bWVyaWMobm9kZSwgb3B0aW9ucykgewogICAgLy8gTm90IHN1cmUgaWYgdGhpcyBpcyBzdHJpY3RseSByaWdodCBidXQgc2hvdWxkIHdvcmsgY29ycmVjdGx5IGZvciB0aGUgdmFzdCBtYWpvcml0eSBvZiB1c2UgY2FzZXMuCiAgICByZXR1cm4gbm9kZS5hcmdzWzBdLnRvVGV4KCk7CiAgfSwKICAvLyB0eXBlCiAgbnVtYmVyOiB7CiAgICAwOiAnMCcsCiAgICAxOiAnXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KScsCiAgICAyOiAnXFxsZWZ0KFxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkke2FyZ3NbMV19XFxyaWdodCknCiAgfSwKICBzdHJpbmc6IHsKICAgIDA6ICdcXG1hdGh0dHsiIn0nLAogICAgMTogJ1xcbWF0aHJte3N0cmluZ31cXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpJwogIH0sCiAgYmlnbnVtYmVyOiB7CiAgICAwOiAnMCcsCiAgICAxOiAnXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KScKICB9LAogIGNvbXBsZXg6IHsKICAgIDA6ICcwJywKICAgIDE6ICdcXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpJywKICAgIDI6ICJcXGxlZnQoXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KSsiLmNvbmNhdChsYXRleFN5bWJvbHMuaSwgIlxcY2RvdFxcbGVmdCgke2FyZ3NbMV19XFxyaWdodClcXHJpZ2h0KSIpCiAgfSwKICBtYXRyaXg6IHsKICAgIDA6ICdcXGJlZ2lue2JtYXRyaXh9XFxlbmR7Ym1hdHJpeH0nLAogICAgMTogJ1xcbGVmdCgke2FyZ3NbMF19XFxyaWdodCknLAogICAgMjogJ1xcbGVmdCgke2FyZ3NbMF19XFxyaWdodCknCiAgfSwKICBzcGFyc2U6IHsKICAgIDA6ICdcXGJlZ2lue2JzcGFyc2V9XFxlbmR7YnNwYXJzZX0nLAogICAgMTogJ1xcbGVmdCgke2FyZ3NbMF19XFxyaWdodCknCiAgfSwKICB1bml0OiB7CiAgICAxOiAnXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KScsCiAgICAyOiAnXFxsZWZ0KFxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkke2FyZ3NbMV19XFxyaWdodCknCiAgfQp9Owp2YXIgZGVmYXVsdFRlbXBsYXRlID0gJ1xcbWF0aHJteyR7bmFtZX19XFxsZWZ0KCR7YXJnc31cXHJpZ2h0KSc7CnZhciBsYXRleFVuaXRzID0gewogIGRlZzogJ15cXGNpcmMnCn07CmZ1bmN0aW9uIGVzY2FwZUxhdGV4KHN0cmluZykgewogIHJldHVybiBkaXN0X2RlZmF1bHQoKShzdHJpbmcsIHsKICAgIHByZXNlcnZlRm9ybWF0dGluZzogdHJ1ZQogIH0pOwp9IC8vIEBwYXJhbSB7c3RyaW5nfSBuYW1lCi8vIEBwYXJhbSB7Ym9vbGVhbn0gaXNVbml0CgpmdW5jdGlvbiB0b1N5bWJvbChuYW1lLCBpc1VuaXQpIHsKICBpc1VuaXQgPSB0eXBlb2YgaXNVbml0ID09PSAndW5kZWZpbmVkJyA/IGZhbHNlIDogaXNVbml0OwoKICBpZiAoaXNVbml0KSB7CiAgICBpZiAoT2JqZWN0KHV0aWxzX29iamVjdFsiZiIgLyogaGFzT3duUHJvcGVydHkgKi9dKShsYXRleFVuaXRzLCBuYW1lKSkgewogICAgICByZXR1cm4gbGF0ZXhVbml0c1tuYW1lXTsKICAgIH0KCiAgICByZXR1cm4gJ1xcbWF0aHJteycgKyBlc2NhcGVMYXRleChuYW1lKSArICd9JzsKICB9CgogIGlmIChPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKGxhdGV4U3ltYm9scywgbmFtZSkpIHsKICAgIHJldHVybiBsYXRleFN5bWJvbHNbbmFtZV07CiAgfQoKICByZXR1cm4gZXNjYXBlTGF0ZXgobmFtZSk7Cn0KLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9ub2RlL0NvbnN0YW50Tm9kZS5qcwoKCgoKdmFyIENvbnN0YW50Tm9kZV9uYW1lID0gJ0NvbnN0YW50Tm9kZSc7CnZhciBDb25zdGFudE5vZGVfZGVwZW5kZW5jaWVzID0gWydOb2RlJ107CnZhciBDb25zdGFudE5vZGVfY3JlYXRlQ29uc3RhbnROb2RlID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoQ29uc3RhbnROb2RlX25hbWUsIENvbnN0YW50Tm9kZV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIE5vZGUgPSBfcmVmLk5vZGU7CgogIC8qKgogICAqIEEgQ29uc3RhbnROb2RlIGhvbGRzIGEgY29uc3RhbnQgdmFsdWUgbGlrZSBhIG51bWJlciBvciBzdHJpbmcuCiAgICoKICAgKiBVc2FnZToKICAgKgogICAqICAgICBuZXcgQ29uc3RhbnROb2RlKDIuMykKICAgKiAgICAgbmV3IENvbnN0YW50Tm9kZSgnaGVsbG8nKQogICAqCiAgICogQHBhcmFtIHsqfSB2YWx1ZSAgICBWYWx1ZSBjYW4gYmUgYW55IHR5cGUgKG51bWJlciwgQmlnTnVtYmVyLCBzdHJpbmcsIC4uLikKICAgKiBAY29uc3RydWN0b3IgQ29uc3RhbnROb2RlCiAgICogQGV4dGVuZHMge05vZGV9CiAgICovCiAgZnVuY3Rpb24gQ29uc3RhbnROb2RlKHZhbHVlKSB7CiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ29uc3RhbnROb2RlKSkgewogICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpOwogICAgfQoKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7CiAgICAgIC8vIFRPRE86IHJlbW92ZSBkZXByZWNhdGlvbiBlcnJvciBzb21lIGRheSAoY3JlYXRlZCAyMDE4LTAxLTIzKQogICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ25ldyBDb25zdGFudE5vZGUodmFsdWVTdHIsIHZhbHVlVHlwZSkgaXMgbm90IHN1cHBvcnRlZCBhbnltb3JlIHNpbmNlIG1hdGggdjQuMC4wLiBVc2UgbmV3IENvbnN0YW50Tm9kZSh2YWx1ZSkgaW5zdGVhZCwgd2hlcmUgdmFsdWUgaXMgYSBub24tc3RyaW5naWZpZWQgdmFsdWUuJyk7CiAgICB9CgogICAgdGhpcy52YWx1ZSA9IHZhbHVlOwogIH0KCiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7CiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS50eXBlID0gJ0NvbnN0YW50Tm9kZSc7CiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS5pc0NvbnN0YW50Tm9kZSA9IHRydWU7CiAgLyoqCiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uCiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlbgogICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLgogICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLgogICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHMKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuCiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6CiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopCiAgICovCgogIENvbnN0YW50Tm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHsKICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWU7CiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbENvbnN0YW50Tm9kZSgpIHsKICAgICAgcmV0dXJuIHZhbHVlOwogICAgfTsKICB9OwogIC8qKgogICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlCiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFjawogICAqLwoKCiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7fSAvLyBub3RoaW5nIHRvIGRvLCB3ZSBkb24ndCBoYXZlIGNoaWxkcwoKICAvKioKICAgKiBDcmVhdGUgYSBuZXcgQ29uc3RhbnROb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nCiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuCiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpIDogTm9kZX0gY2FsbGJhY2sKICAgKiBAcmV0dXJucyB7Q29uc3RhbnROb2RlfSBSZXR1cm5zIGEgY2xvbmUgb2YgdGhlIG5vZGUKICAgKi8KICA7CgogIENvbnN0YW50Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICByZXR1cm4gdGhpcy5jbG9uZSgpOwogIH07CiAgLyoqCiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weQogICAqIEByZXR1cm4ge0NvbnN0YW50Tm9kZX0KICAgKi8KCgogIENvbnN0YW50Tm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZSh0aGlzLnZhbHVlKTsKICB9OwogIC8qKgogICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24KICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwogICAqIEByZXR1cm4ge3N0cmluZ30gc3RyCiAgICovCgoKICBDb25zdGFudE5vZGUucHJvdG90eXBlLl90b1N0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICByZXR1cm4gT2JqZWN0KHV0aWxzX3N0cmluZ1siZCIgLyogZm9ybWF0ICovXSkodGhpcy52YWx1ZSwgb3B0aW9ucyk7CiAgfTsKICAvKioKICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvbgogICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICogQHJldHVybiB7c3RyaW5nfSBzdHIKICAgKi8KCgogIENvbnN0YW50Tm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgIHZhciB2YWx1ZSA9IHRoaXMuX3RvU3RyaW5nKG9wdGlvbnMpOwoKICAgIHN3aXRjaCAoT2JqZWN0KGlzWyJNIiAvKiB0eXBlT2YgKi9dKSh0aGlzLnZhbHVlKSkgewogICAgICBjYXNlICdudW1iZXInOgogICAgICBjYXNlICdCaWdOdW1iZXInOgogICAgICBjYXNlICdGcmFjdGlvbic6CiAgICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz0ibWF0aC1udW1iZXIiPicgKyB2YWx1ZSArICc8L3NwYW4+JzsKCiAgICAgIGNhc2UgJ3N0cmluZyc6CiAgICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz0ibWF0aC1zdHJpbmciPicgKyB2YWx1ZSArICc8L3NwYW4+JzsKCiAgICAgIGNhc2UgJ2Jvb2xlYW4nOgogICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9Im1hdGgtYm9vbGVhbiI+JyArIHZhbHVlICsgJzwvc3Bhbj4nOwoKICAgICAgY2FzZSAnbnVsbCc6CiAgICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz0ibWF0aC1udWxsLXN5bWJvbCI+JyArIHZhbHVlICsgJzwvc3Bhbj4nOwoKICAgICAgY2FzZSAndW5kZWZpbmVkJzoKICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPSJtYXRoLXVuZGVmaW5lZCI+JyArIHZhbHVlICsgJzwvc3Bhbj4nOwoKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPSJtYXRoLXN5bWJvbCI+JyArIHZhbHVlICsgJzwvc3Bhbj4nOwogICAgfQogIH07CiAgLyoqCiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZQogICAqIEByZXR1cm5zIHtPYmplY3R9CiAgICovCgoKICBDb25zdGFudE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB7CiAgICAgIG1hdGhqczogJ0NvbnN0YW50Tm9kZScsCiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlCiAgICB9OwogIH07CiAgLyoqCiAgICogSW5zdGFudGlhdGUgYSBDb25zdGFudE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvbgogICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlCiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7Im1hdGhqcyI6ICJTeW1ib2xOb2RlIiwgdmFsdWU6IDIuM31gLAogICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWwKICAgKiBAcmV0dXJucyB7Q29uc3RhbnROb2RlfQogICAqLwoKCiAgQ29uc3RhbnROb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHsKICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKGpzb24udmFsdWUpOwogIH07CiAgLyoqCiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0cgogICAqLwoKCiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgdmFyIHZhbHVlID0gdGhpcy5fdG9TdHJpbmcob3B0aW9ucyk7CgogICAgc3dpdGNoIChPYmplY3QoaXNbIk0iIC8qIHR5cGVPZiAqL10pKHRoaXMudmFsdWUpKSB7CiAgICAgIGNhc2UgJ3N0cmluZyc6CiAgICAgICAgcmV0dXJuICdcXG1hdGh0dHsnICsgZXNjYXBlTGF0ZXgodmFsdWUpICsgJ30nOwoKICAgICAgY2FzZSAnbnVtYmVyJzoKICAgICAgY2FzZSAnQmlnTnVtYmVyJzoKICAgICAgICB7CiAgICAgICAgICB2YXIgaW5kZXggPSB2YWx1ZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2UnKTsKCiAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMCwgaW5kZXgpICsgJ1xcY2RvdDEwXnsnICsgdmFsdWUuc3Vic3RyaW5nKGluZGV4ICsgMSkgKyAnfSc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZTsKCiAgICAgIGNhc2UgJ0ZyYWN0aW9uJzoKICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS50b0xhdGV4KCk7CgogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KICB9OwoKICByZXR1cm4gQ29uc3RhbnROb2RlOwp9LCB7CiAgaXNDbGFzczogdHJ1ZSwKICBpc05vZGU6IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vbm9kZS9GdW5jdGlvbkFzc2lnbm1lbnROb2RlLmpzCgoKCgoKCgoKdmFyIEZ1bmN0aW9uQXNzaWdubWVudE5vZGVfbmFtZSA9ICdGdW5jdGlvbkFzc2lnbm1lbnROb2RlJzsKdmFyIEZ1bmN0aW9uQXNzaWdubWVudE5vZGVfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdOb2RlJ107CnZhciBjcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZV9uYW1lLCBGdW5jdGlvbkFzc2lnbm1lbnROb2RlX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBOb2RlID0gX3JlZi5Ob2RlOwoKICAvKioKICAgKiBAY29uc3RydWN0b3IgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZQogICAqIEBleHRlbmRzIHtOb2RlfQogICAqIEZ1bmN0aW9uIGFzc2lnbm1lbnQKICAgKgogICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgICAgICAgICBGdW5jdGlvbiBuYW1lCiAgICogQHBhcmFtIHtzdHJpbmdbXSB8IEFycmF5Ljx7bmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmd9Pn0gcGFyYW1zCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5IHdpdGggZnVuY3Rpb24gcGFyYW1ldGVyIG5hbWVzLCBvciBhbgogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSB3aXRoIG9iamVjdHMgY29udGFpbmluZyB0aGUgbmFtZQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdHlwZSBvZiB0aGUgcGFyYW1ldGVyCiAgICogQHBhcmFtIHtOb2RlfSBleHByICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiBleHByZXNzaW9uCiAgICovCiAgZnVuY3Rpb24gRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZShuYW1lLCBwYXJhbXMsIGV4cHIpIHsKICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSkgewogICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpOwogICAgfSAvLyB2YWxpZGF0ZSBpbnB1dAoKCiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdHJpbmcgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciAibmFtZSInKTsKICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJhbXMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBjb250YWluaW5nIHN0cmluZ3Mgb3Igb2JqZWN0cyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyICJwYXJhbXMiJyk7CiAgICBpZiAoIU9iamVjdChpc1sidyIgLyogaXNOb2RlICovXSkoZXhwcikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciAiZXhwciInKTsKICAgIGlmIChuYW1lIGluIGtleXdvcmRzKSB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgZnVuY3Rpb24gbmFtZSwgIicgKyBuYW1lICsgJyIgaXMgYSByZXNlcnZlZCBrZXl3b3JkJyk7CiAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgdGhpcy5wYXJhbXMgPSBwYXJhbXMubWFwKGZ1bmN0aW9uIChwYXJhbSkgewogICAgICByZXR1cm4gcGFyYW0gJiYgcGFyYW0ubmFtZSB8fCBwYXJhbTsKICAgIH0pOwogICAgdGhpcy50eXBlcyA9IHBhcmFtcy5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7CiAgICAgIHJldHVybiBwYXJhbSAmJiBwYXJhbS50eXBlIHx8ICdhbnknOwogICAgfSk7CiAgICB0aGlzLmV4cHIgPSBleHByOwogIH0KCiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpOwogIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnR5cGUgPSAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSc7CiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlID0gdHJ1ZTsKICAvKioKICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi4KICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuCiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuCiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuCiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9ucwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9scwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS4KICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZToKICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKikKICAgKi8KCiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHsKICAgIHZhciBjaGlsZEFyZ05hbWVzID0gT2JqZWN0LmNyZWF0ZShhcmdOYW1lcyk7CiAgICBPYmplY3QodXRpbHNfYXJyYXlbImYiIC8qIGZvckVhY2ggKi9dKSh0aGlzLnBhcmFtcywgZnVuY3Rpb24gKHBhcmFtKSB7CiAgICAgIGNoaWxkQXJnTmFtZXNbcGFyYW1dID0gdHJ1ZTsKICAgIH0pOyAvLyBjb21waWxlIHRoZSBmdW5jdGlvbiBleHByZXNzaW9uIHdpdGggdGhlIGNoaWxkIGFyZ3MKCiAgICB2YXIgZXZhbEV4cHIgPSB0aGlzLmV4cHIuX2NvbXBpbGUobWF0aCwgY2hpbGRBcmdOYW1lcyk7CgogICAgdmFyIG5hbWUgPSB0aGlzLm5hbWU7CiAgICB2YXIgcGFyYW1zID0gdGhpcy5wYXJhbXM7CiAgICB2YXIgc2lnbmF0dXJlID0gT2JqZWN0KHV0aWxzX2FycmF5WyJrIiAvKiBqb2luICovXSkodGhpcy50eXBlcywgJywnKTsKICAgIHZhciBzeW50YXggPSBuYW1lICsgJygnICsgT2JqZWN0KHV0aWxzX2FycmF5WyJrIiAvKiBqb2luICovXSkodGhpcy5wYXJhbXMsICcsICcpICsgJyknOwogICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxGdW5jdGlvbkFzc2lnbm1lbnROb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7CiAgICAgIHZhciBzaWduYXR1cmVzID0ge307CgogICAgICBzaWduYXR1cmVzW3NpZ25hdHVyZV0gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGNoaWxkQXJncyA9IE9iamVjdC5jcmVhdGUoYXJncyk7CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBjaGlsZEFyZ3NbcGFyYW1zW2ldXSA9IGFyZ3VtZW50c1tpXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBldmFsRXhwcihzY29wZSwgY2hpbGRBcmdzLCBjb250ZXh0KTsKICAgICAgfTsKCiAgICAgIHZhciBmbiA9IHR5cGVkKG5hbWUsIHNpZ25hdHVyZXMpOwogICAgICBmbi5zeW50YXggPSBzeW50YXg7CiAgICAgIHNldFNhZmVQcm9wZXJ0eShzY29wZSwgbmFtZSwgZm4pOwogICAgICByZXR1cm4gZm47CiAgICB9OwogIH07CiAgLyoqCiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGUKICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrCiAgICovCgoKICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICBjYWxsYmFjayh0aGlzLmV4cHIsICdleHByJywgdGhpcyk7CiAgfTsKICAvKioKICAgKiBDcmVhdGUgYSBuZXcgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZwogICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLgogICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2sKICAgKiBAcmV0dXJucyB7RnVuY3Rpb25Bc3NpZ25tZW50Tm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGUKICAgKi8KCgogIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgewogICAgdmFyIGV4cHIgPSB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5leHByLCAnZXhwcicsIHRoaXMpKTsKCiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQXNzaWdubWVudE5vZGUodGhpcy5uYW1lLCB0aGlzLnBhcmFtcy5zbGljZSgwKSwgZXhwcik7CiAgfTsKICAvKioKICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5CiAgICogQHJldHVybiB7RnVuY3Rpb25Bc3NpZ25tZW50Tm9kZX0KICAgKi8KCgogIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIG5ldyBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKHRoaXMubmFtZSwgdGhpcy5wYXJhbXMuc2xpY2UoMCksIHRoaXMuZXhwcik7CiAgfTsKICAvKioKICAgKiBJcyBwYXJlbnRoZXNpcyBuZWVkZWQ/CiAgICogQHBhcmFtIHtOb2RlfSBub2RlCiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmVudGhlc2lzCiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIG5lZWRQYXJlbnRoZXNpcyhub2RlLCBwYXJlbnRoZXNpcykgewogICAgdmFyIHByZWNlZGVuY2UgPSBnZXRQcmVjZWRlbmNlKG5vZGUsIHBhcmVudGhlc2lzKTsKICAgIHZhciBleHByUHJlY2VkZW5jZSA9IGdldFByZWNlZGVuY2Uobm9kZS5leHByLCBwYXJlbnRoZXNpcyk7CiAgICByZXR1cm4gcGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IGV4cHJQcmVjZWRlbmNlICE9PSBudWxsICYmIGV4cHJQcmVjZWRlbmNlIDw9IHByZWNlZGVuY2U7CiAgfQogIC8qKgogICAqIGdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24KICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwogICAqIEByZXR1cm4ge3N0cmluZ30gc3RyCiAgICovCgoKICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJzsKICAgIHZhciBleHByID0gdGhpcy5leHByLnRvU3RyaW5nKG9wdGlvbnMpOwoKICAgIGlmIChuZWVkUGFyZW50aGVzaXModGhpcywgcGFyZW50aGVzaXMpKSB7CiAgICAgIGV4cHIgPSAnKCcgKyBleHByICsgJyknOwogICAgfQoKICAgIHJldHVybiB0aGlzLm5hbWUgKyAnKCcgKyB0aGlzLnBhcmFtcy5qb2luKCcsICcpICsgJykgPSAnICsgZXhwcjsKICB9OwogIC8qKgogICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUKICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAqLwoKCiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkgewogICAgdmFyIHR5cGVzID0gdGhpcy50eXBlczsKICAgIHJldHVybiB7CiAgICAgIG1hdGhqczogJ0Z1bmN0aW9uQXNzaWdubWVudE5vZGUnLAogICAgICBuYW1lOiB0aGlzLm5hbWUsCiAgICAgIHBhcmFtczogdGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uIChwYXJhbSwgaW5kZXgpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgbmFtZTogcGFyYW0sCiAgICAgICAgICB0eXBlOiB0eXBlc1tpbmRleF0KICAgICAgICB9OwogICAgICB9KSwKICAgICAgZXhwcjogdGhpcy5leHByCiAgICB9OwogIH07CiAgLyoqCiAgICogSW5zdGFudGlhdGUgYW4gRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2UKICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHsibWF0aGpzIjogIkZ1bmN0aW9uQXNzaWdubWVudE5vZGUiLCBuYW1lOiAuLi4sIHBhcmFtczogLi4uLCBleHByOiAuLi59YCwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsCiAgICogQHJldHVybnMge0Z1bmN0aW9uQXNzaWdubWVudE5vZGV9CiAgICovCgoKICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHsKICAgIHJldHVybiBuZXcgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZShqc29uLm5hbWUsIGpzb24ucGFyYW1zLCBqc29uLmV4cHIpOwogIH07CiAgLyoqCiAgICogZ2V0IEhUTUwgcmVwcmVzZW50YXRpb24KICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwogICAqIEByZXR1cm4ge3N0cmluZ30gc3RyCiAgICovCgoKICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJzsKICAgIHZhciBwYXJhbXMgPSBbXTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFyYW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgIHBhcmFtcy5wdXNoKCc8c3BhbiBjbGFzcz0ibWF0aC1zeW1ib2wgbWF0aC1wYXJhbWV0ZXIiPicgKyBPYmplY3QodXRpbHNfc3RyaW5nWyJjIiAvKiBlc2NhcGUgKi9dKSh0aGlzLnBhcmFtc1tpXSkgKyAnPC9zcGFuPicpOwogICAgfQoKICAgIHZhciBleHByID0gdGhpcy5leHByLnRvSFRNTChvcHRpb25zKTsKCiAgICBpZiAobmVlZFBhcmVudGhlc2lzKHRoaXMsIHBhcmVudGhlc2lzKSkgewogICAgICBleHByID0gJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPig8L3NwYW4+JyArIGV4cHIgKyAnPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KTwvc3Bhbj4nOwogICAgfQoKICAgIHJldHVybiAnPHNwYW4gY2xhc3M9Im1hdGgtZnVuY3Rpb24iPicgKyBPYmplY3QodXRpbHNfc3RyaW5nWyJjIiAvKiBlc2NhcGUgKi9dKSh0aGlzLm5hbWUpICsgJzwvc3Bhbj4nICsgJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPig8L3NwYW4+JyArIHBhcmFtcy5qb2luKCc8c3BhbiBjbGFzcz0ibWF0aC1zZXBhcmF0b3IiPiw8L3NwYW4+JykgKyAnPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KTwvc3Bhbj48c3BhbiBjbGFzcz0ibWF0aC1vcGVyYXRvciBtYXRoLWFzc2lnbm1lbnQtb3BlcmF0b3IgbWF0aC12YXJpYWJsZS1hc3NpZ25tZW50LW9wZXJhdG9yIG1hdGgtYmluYXJ5LW9wZXJhdG9yIj49PC9zcGFuPicgKyBleHByOwogIH07CiAgLyoqCiAgICogZ2V0IExhVGVYIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0cgogICAqLwoKCiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7CiAgICB2YXIgZXhwciA9IHRoaXMuZXhwci50b1RleChvcHRpb25zKTsKCiAgICBpZiAobmVlZFBhcmVudGhlc2lzKHRoaXMsIHBhcmVudGhlc2lzKSkgewogICAgICBleHByID0gIlxcbGVmdCgiLmNvbmNhdChleHByLCAiXFxyaWdodCkiKTsKICAgIH0KCiAgICByZXR1cm4gJ1xcbWF0aHJteycgKyB0aGlzLm5hbWUgKyAnfVxcbGVmdCgnICsgdGhpcy5wYXJhbXMubWFwKHRvU3ltYm9sKS5qb2luKCcsJykgKyAnXFxyaWdodCk6PScgKyBleHByOwogIH07CgogIHJldHVybiBGdW5jdGlvbkFzc2lnbm1lbnROb2RlOwp9LCB7CiAgaXNDbGFzczogdHJ1ZSwKICBpc05vZGU6IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vbm9kZS9JbmRleE5vZGUuanMKZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9CgpmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIik7IH0KCmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlcikgPT09ICJbb2JqZWN0IEFyZ3VtZW50c10iKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfQoKZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gfQoKCgoKCgp2YXIgSW5kZXhOb2RlX25hbWUgPSAnSW5kZXhOb2RlJzsKdmFyIEluZGV4Tm9kZV9kZXBlbmRlbmNpZXMgPSBbJ1JhbmdlJywgJ05vZGUnLCAnc2l6ZSddOwp2YXIgY3JlYXRlSW5kZXhOb2RlID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoSW5kZXhOb2RlX25hbWUsIEluZGV4Tm9kZV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIFJhbmdlID0gX3JlZi5SYW5nZSwKICAgICAgTm9kZSA9IF9yZWYuTm9kZSwKICAgICAgc2l6ZSA9IF9yZWYuc2l6ZTsKCiAgLyoqCiAgICogQGNvbnN0cnVjdG9yIEluZGV4Tm9kZQogICAqIEBleHRlbmRzIE5vZGUKICAgKgogICAqIERlc2NyaWJlcyBhIHN1YnNldCBvZiBhIG1hdHJpeCBvciBhbiBvYmplY3QgcHJvcGVydHkuCiAgICogQ2Fubm90IGJlIHVzZWQgb24gaXRzIG93biwgbmVlZHMgdG8gYmUgdXNlZCB3aXRoaW4gYW4gQWNjZXNzb3JOb2RlIG9yCiAgICogQXNzaWdubWVudE5vZGUuCiAgICoKICAgKiBAcGFyYW0ge05vZGVbXX0gZGltZW5zaW9ucwogICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvdE5vdGF0aW9uPWZhbHNlXSAgT3B0aW9uYWwgcHJvcGVydHkgZGVzY3JpYmluZyB3aGV0aGVyCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGluZGV4IHdhcyB3cml0dGVuIHVzaW5nIGRvdAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90YXRpb24gbGlrZSBgYS5iYCwgb3IgdXNpbmcgYnJhY2tldAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90YXRpb24gbGlrZSBgYVsiYiJdYCAoZGVmYXVsdCkuCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VkIHRvIHN0cmluZ2lmeSBhbiBJbmRleE5vZGUuCiAgICovCiAgZnVuY3Rpb24gSW5kZXhOb2RlKGRpbWVuc2lvbnMsIGRvdE5vdGF0aW9uKSB7CiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW5kZXhOb2RlKSkgewogICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpOwogICAgfQoKICAgIHRoaXMuZGltZW5zaW9ucyA9IGRpbWVuc2lvbnM7CiAgICB0aGlzLmRvdE5vdGF0aW9uID0gZG90Tm90YXRpb24gfHwgZmFsc2U7IC8vIHZhbGlkYXRlIGlucHV0CgogICAgaWYgKCFBcnJheS5pc0FycmF5KGRpbWVuc2lvbnMpIHx8ICFkaW1lbnNpb25zLmV2ZXJ5KGlzWyJ3IiAvKiBpc05vZGUgKi9dKSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgImRpbWVuc2lvbnMiJyk7CiAgICB9CgogICAgaWYgKHRoaXMuZG90Tm90YXRpb24gJiYgIXRoaXMuaXNPYmplY3RQcm9wZXJ0eSgpKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignZG90Tm90YXRpb24gb25seSBhcHBsaWNhYmxlIGZvciBvYmplY3QgcHJvcGVydGllcycpOwogICAgfSAvLyBUT0RPOiBkZXByZWNhdGVkIHNpbmNlIHYzLCByZW1vdmUgc29tZSBkYXkKCgogICAgdmFyIGRlcHJlY2F0ZWQgPSBmdW5jdGlvbiBkZXByZWNhdGVkKCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3BlcnR5IGBJbmRleE5vZGUub2JqZWN0YCBpcyBkZXByZWNhdGVkLCB1c2UgYEluZGV4Tm9kZS5mbmAgaW5zdGVhZCcpOwogICAgfTsKCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ29iamVjdCcsIHsKICAgICAgZ2V0OiBkZXByZWNhdGVkLAogICAgICBzZXQ6IGRlcHJlY2F0ZWQKICAgIH0pOwogIH0KCiAgSW5kZXhOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7CiAgSW5kZXhOb2RlLnByb3RvdHlwZS50eXBlID0gJ0luZGV4Tm9kZSc7CiAgSW5kZXhOb2RlLnByb3RvdHlwZS5pc0luZGV4Tm9kZSA9IHRydWU7CiAgLyoqCiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uCiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlbgogICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLgogICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLgogICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHMKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuCiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6CiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopCiAgICovCgogIEluZGV4Tm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHsKICAgIC8vIFRPRE86IGltcGxlbWVudCBzdXBwb3J0IGZvciBiaWdudW1iZXIgKGN1cnJlbnRseSBiaWdudW1iZXJzIGFyZSBzaWxlbnRseQogICAgLy8gICAgICAgcmVkdWNlZCB0byBudW1iZXJzIHdoZW4gY2hhbmdpbmcgdGhlIHZhbHVlIHRvIHplcm8tYmFzZWQpCiAgICAvLyBUT0RPOiBPcHRpbWl6YXRpb246IHdoZW4gdGhlIHJhbmdlIHZhbHVlcyBhcmUgQ29uc3RhbnROb2RlcywKICAgIC8vICAgICAgIHdlIGNhbiBiZWZvcmVoYW5kIHJlc29sdmUgdGhlIHplcm8tYmFzZWQgdmFsdWUKICAgIC8vIG9wdGltaXphdGlvbiBmb3IgYSBzaW1wbGUgb2JqZWN0IHByb3BlcnR5CiAgICB2YXIgZXZhbERpbWVuc2lvbnMgPSBPYmplY3QodXRpbHNfYXJyYXlbIm0iIC8qIG1hcCAqL10pKHRoaXMuZGltZW5zaW9ucywgZnVuY3Rpb24gKHJhbmdlLCBpKSB7CiAgICAgIGlmIChPYmplY3QoaXNbIkUiIC8qIGlzUmFuZ2VOb2RlICovXSkocmFuZ2UpKSB7CiAgICAgICAgaWYgKHJhbmdlLm5lZWRzRW5kKCkpIHsKICAgICAgICAgIC8vIGNyZWF0ZSBhIHJhbmdlIGNvbnRhaW5pbmcgZW5kIChsaWtlICc0OmVuZCcpCiAgICAgICAgICB2YXIgY2hpbGRBcmdOYW1lcyA9IE9iamVjdC5jcmVhdGUoYXJnTmFtZXMpOwogICAgICAgICAgY2hpbGRBcmdOYW1lcy5lbmQgPSB0cnVlOwoKICAgICAgICAgIHZhciBldmFsU3RhcnQgPSByYW5nZS5zdGFydC5fY29tcGlsZShtYXRoLCBjaGlsZEFyZ05hbWVzKTsKCiAgICAgICAgICB2YXIgZXZhbEVuZCA9IHJhbmdlLmVuZC5fY29tcGlsZShtYXRoLCBjaGlsZEFyZ05hbWVzKTsKCiAgICAgICAgICB2YXIgZXZhbFN0ZXAgPSByYW5nZS5zdGVwID8gcmFuZ2Uuc3RlcC5fY29tcGlsZShtYXRoLCBjaGlsZEFyZ05hbWVzKSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxEaW1lbnNpb24oc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHsKICAgICAgICAgICAgdmFyIHMgPSBzaXplKGNvbnRleHQpLnZhbHVlT2YoKTsKICAgICAgICAgICAgdmFyIGNoaWxkQXJncyA9IE9iamVjdC5jcmVhdGUoYXJncyk7CiAgICAgICAgICAgIGNoaWxkQXJncy5lbmQgPSBzW2ldOwogICAgICAgICAgICByZXR1cm4gY3JlYXRlUmFuZ2UoZXZhbFN0YXJ0KHNjb3BlLCBjaGlsZEFyZ3MsIGNvbnRleHQpLCBldmFsRW5kKHNjb3BlLCBjaGlsZEFyZ3MsIGNvbnRleHQpLCBldmFsU3RlcChzY29wZSwgY2hpbGRBcmdzLCBjb250ZXh0KSk7CiAgICAgICAgICB9OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBjcmVhdGUgcmFuZ2UKICAgICAgICAgIHZhciBfZXZhbFN0YXJ0ID0gcmFuZ2Uuc3RhcnQuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpOwoKICAgICAgICAgIHZhciBfZXZhbEVuZCA9IHJhbmdlLmVuZC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7CgogICAgICAgICAgdmFyIF9ldmFsU3RlcCA9IHJhbmdlLnN0ZXAgPyByYW5nZS5zdGVwLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICB9OwoKICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRGltZW5zaW9uKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7CiAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZShfZXZhbFN0YXJ0KHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgX2V2YWxFbmQoc2NvcGUsIGFyZ3MsIGNvbnRleHQpLCBfZXZhbFN0ZXAoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTsKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKE9iamVjdChpc1siSiIgLyogaXNTeW1ib2xOb2RlICovXSkocmFuZ2UpICYmIHJhbmdlLm5hbWUgPT09ICdlbmQnKSB7CiAgICAgICAgLy8gU3ltYm9sTm9kZSAnZW5kJwogICAgICAgIHZhciBfY2hpbGRBcmdOYW1lcyA9IE9iamVjdC5jcmVhdGUoYXJnTmFtZXMpOwoKICAgICAgICBfY2hpbGRBcmdOYW1lcy5lbmQgPSB0cnVlOwoKICAgICAgICB2YXIgZXZhbFJhbmdlID0gcmFuZ2UuX2NvbXBpbGUobWF0aCwgX2NoaWxkQXJnTmFtZXMpOwoKICAgICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbERpbWVuc2lvbihzY29wZSwgYXJncywgY29udGV4dCkgewogICAgICAgICAgdmFyIHMgPSBzaXplKGNvbnRleHQpLnZhbHVlT2YoKTsKICAgICAgICAgIHZhciBjaGlsZEFyZ3MgPSBPYmplY3QuY3JlYXRlKGFyZ3MpOwogICAgICAgICAgY2hpbGRBcmdzLmVuZCA9IHNbaV07CiAgICAgICAgICByZXR1cm4gZXZhbFJhbmdlKHNjb3BlLCBjaGlsZEFyZ3MsIGNvbnRleHQpOwogICAgICAgIH07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQ29uc3RhbnROb2RlCiAgICAgICAgdmFyIF9ldmFsUmFuZ2UgPSByYW5nZS5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7CgogICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRGltZW5zaW9uKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7CiAgICAgICAgICByZXR1cm4gX2V2YWxSYW5nZShzY29wZSwgYXJncywgY29udGV4dCk7CiAgICAgICAgfTsKICAgICAgfQogICAgfSk7CiAgICB2YXIgaW5kZXggPSBnZXRTYWZlUHJvcGVydHkobWF0aCwgJ2luZGV4Jyk7CiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEluZGV4Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkgewogICAgICB2YXIgZGltZW5zaW9ucyA9IE9iamVjdCh1dGlsc19hcnJheVsibSIgLyogbWFwICovXSkoZXZhbERpbWVuc2lvbnMsIGZ1bmN0aW9uIChldmFsRGltZW5zaW9uKSB7CiAgICAgICAgcmV0dXJuIGV2YWxEaW1lbnNpb24oc2NvcGUsIGFyZ3MsIGNvbnRleHQpOwogICAgICB9KTsKICAgICAgcmV0dXJuIGluZGV4LmFwcGx5KHZvaWQgMCwgX3RvQ29uc3VtYWJsZUFycmF5KGRpbWVuc2lvbnMpKTsKICAgIH07CiAgfTsKICAvKioKICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZQogICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2sKICAgKi8KCgogIEluZGV4Tm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpbWVuc2lvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgY2FsbGJhY2sodGhpcy5kaW1lbnNpb25zW2ldLCAnZGltZW5zaW9uc1snICsgaSArICddJywgdGhpcyk7CiAgICB9CiAgfTsKICAvKioKICAgKiBDcmVhdGUgYSBuZXcgSW5kZXhOb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nCiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuCiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFjawogICAqIEByZXR1cm5zIHtJbmRleE5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlCiAgICovCgoKICBJbmRleE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykgewogICAgdmFyIGRpbWVuc2lvbnMgPSBbXTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltZW5zaW9ucy5sZW5ndGg7IGkrKykgewogICAgICBkaW1lbnNpb25zW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuZGltZW5zaW9uc1tpXSwgJ2RpbWVuc2lvbnNbJyArIGkgKyAnXScsIHRoaXMpKTsKICAgIH0KCiAgICByZXR1cm4gbmV3IEluZGV4Tm9kZShkaW1lbnNpb25zLCB0aGlzLmRvdE5vdGF0aW9uKTsKICB9OwogIC8qKgogICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHkKICAgKiBAcmV0dXJuIHtJbmRleE5vZGV9CiAgICovCgoKICBJbmRleE5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIG5ldyBJbmRleE5vZGUodGhpcy5kaW1lbnNpb25zLnNsaWNlKDApLCB0aGlzLmRvdE5vdGF0aW9uKTsKICB9OwogIC8qKgogICAqIFRlc3Qgd2hldGhlciB0aGlzIEluZGV4Tm9kZSBjb250YWlucyBhIHNpbmdsZSBwcm9wZXJ0eSBuYW1lCiAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgKi8KCgogIEluZGV4Tm9kZS5wcm90b3R5cGUuaXNPYmplY3RQcm9wZXJ0eSA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB0aGlzLmRpbWVuc2lvbnMubGVuZ3RoID09PSAxICYmIE9iamVjdChpc1sibCIgLyogaXNDb25zdGFudE5vZGUgKi9dKSh0aGlzLmRpbWVuc2lvbnNbMF0pICYmIHR5cGVvZiB0aGlzLmRpbWVuc2lvbnNbMF0udmFsdWUgPT09ICdzdHJpbmcnOwogIH07CiAgLyoqCiAgICogUmV0dXJucyB0aGUgcHJvcGVydHkgbmFtZSBpZiBJbmRleE5vZGUgY29udGFpbnMgYSBwcm9wZXJ0eS4KICAgKiBJZiBub3QsIHJldHVybnMgbnVsbC4KICAgKiBAcmV0dXJuIHtzdHJpbmcgfCBudWxsfQogICAqLwoKCiAgSW5kZXhOb2RlLnByb3RvdHlwZS5nZXRPYmplY3RQcm9wZXJ0eSA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB0aGlzLmlzT2JqZWN0UHJvcGVydHkoKSA/IHRoaXMuZGltZW5zaW9uc1swXS52YWx1ZSA6IG51bGw7CiAgfTsKICAvKioKICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0cgogICAqLwoKCiAgSW5kZXhOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgLy8gZm9ybWF0IHRoZSBwYXJhbWV0ZXJzIGxpa2UgIlsxLCAwOjVdIgogICAgcmV0dXJuIHRoaXMuZG90Tm90YXRpb24gPyAnLicgKyB0aGlzLmdldE9iamVjdFByb3BlcnR5KCkgOiAnWycgKyB0aGlzLmRpbWVuc2lvbnMuam9pbignLCAnKSArICddJzsKICB9OwogIC8qKgogICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUKICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAqLwoKCiAgSW5kZXhOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gewogICAgICBtYXRoanM6ICdJbmRleE5vZGUnLAogICAgICBkaW1lbnNpb25zOiB0aGlzLmRpbWVuc2lvbnMsCiAgICAgIGRvdE5vdGF0aW9uOiB0aGlzLmRvdE5vdGF0aW9uCiAgICB9OwogIH07CiAgLyoqCiAgICogSW5zdGFudGlhdGUgYW4gSW5kZXhOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb24KICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZQogICAqICAgICAgICAgICAgICAgICAgICAgICBgeyJtYXRoanMiOiAiSW5kZXhOb2RlIiwgZGltZW5zaW9uczogWy4uLl0sIGRvdE5vdGF0aW9uOiBmYWxzZX1gLAogICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWwKICAgKiBAcmV0dXJucyB7SW5kZXhOb2RlfQogICAqLwoKCiAgSW5kZXhOb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHsKICAgIHJldHVybiBuZXcgSW5kZXhOb2RlKGpzb24uZGltZW5zaW9ucywganNvbi5kb3ROb3RhdGlvbik7CiAgfTsKICAvKioKICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvbgogICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICogQHJldHVybiB7c3RyaW5nfSBzdHIKICAgKi8KCgogIEluZGV4Tm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgIC8vIGZvcm1hdCB0aGUgcGFyYW1ldGVycyBsaWtlICJbMSwgMDo1XSIKICAgIHZhciBkaW1lbnNpb25zID0gW107CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpbWVuc2lvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgZGltZW5zaW9uc1tpXSA9IHRoaXMuZGltZW5zaW9uc1tpXS50b0hUTUwoKTsKICAgIH0KCiAgICBpZiAodGhpcy5kb3ROb3RhdGlvbikgewogICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPSJtYXRoLW9wZXJhdG9yIG1hdGgtYWNjZXNzb3Itb3BlcmF0b3IiPi48L3NwYW4+JyArICc8c3BhbiBjbGFzcz0ibWF0aC1zeW1ib2wgbWF0aC1wcm9wZXJ0eSI+JyArIE9iamVjdCh1dGlsc19zdHJpbmdbImMiIC8qIGVzY2FwZSAqL10pKHRoaXMuZ2V0T2JqZWN0UHJvcGVydHkoKSkgKyAnPC9zcGFuPic7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtc3F1YXJlLXBhcmVudGhlc2lzIj5bPC9zcGFuPicgKyBkaW1lbnNpb25zLmpvaW4oJzxzcGFuIGNsYXNzPSJtYXRoLXNlcGFyYXRvciI+LDwvc3Bhbj4nKSArICc8c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXNxdWFyZS1wYXJlbnRoZXNpcyI+XTwvc3Bhbj4nOwogICAgfQogIH07CiAgLyoqCiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0cgogICAqLwoKCiAgSW5kZXhOb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgdmFyIGRpbWVuc2lvbnMgPSB0aGlzLmRpbWVuc2lvbnMubWFwKGZ1bmN0aW9uIChyYW5nZSkgewogICAgICByZXR1cm4gcmFuZ2UudG9UZXgob3B0aW9ucyk7CiAgICB9KTsKICAgIHJldHVybiB0aGlzLmRvdE5vdGF0aW9uID8gJy4nICsgdGhpcy5nZXRPYmplY3RQcm9wZXJ0eSgpICsgJycgOiAnX3snICsgZGltZW5zaW9ucy5qb2luKCcsJykgKyAnfSc7CiAgfTsgLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIFJhbmdlIGZyb20gc3RhcnQsIHN0ZXAgYW5kIGVuZAoKCiAgZnVuY3Rpb24gY3JlYXRlUmFuZ2Uoc3RhcnQsIGVuZCwgc3RlcCkgewogICAgcmV0dXJuIG5ldyBSYW5nZShPYmplY3QoaXNbImUiIC8qIGlzQmlnTnVtYmVyICovXSkoc3RhcnQpID8gc3RhcnQudG9OdW1iZXIoKSA6IHN0YXJ0LCBPYmplY3QoaXNbImUiIC8qIGlzQmlnTnVtYmVyICovXSkoZW5kKSA/IGVuZC50b051bWJlcigpIDogZW5kLCBPYmplY3QoaXNbImUiIC8qIGlzQmlnTnVtYmVyICovXSkoc3RlcCkgPyBzdGVwLnRvTnVtYmVyKCkgOiBzdGVwKTsKICB9CgogIHJldHVybiBJbmRleE5vZGU7Cn0sIHsKICBpc0NsYXNzOiB0cnVlLAogIGlzTm9kZTogdHJ1ZQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9ub2RlL09iamVjdE5vZGUuanMKZnVuY3Rpb24gT2JqZWN0Tm9kZV90eXBlb2Yob2JqKSB7ICJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7IGlmICh0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICJzeW1ib2wiKSB7IE9iamVjdE5vZGVfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IE9iamVjdE5vZGVfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/ICJzeW1ib2wiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gT2JqZWN0Tm9kZV90eXBlb2Yob2JqKTsgfQoKCgoKCgp2YXIgT2JqZWN0Tm9kZV9uYW1lID0gJ09iamVjdE5vZGUnOwp2YXIgT2JqZWN0Tm9kZV9kZXBlbmRlbmNpZXMgPSBbJ05vZGUnXTsKdmFyIGNyZWF0ZU9iamVjdE5vZGUgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShPYmplY3ROb2RlX25hbWUsIE9iamVjdE5vZGVfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciBOb2RlID0gX3JlZi5Ob2RlOwoKICAvKioKICAgKiBAY29uc3RydWN0b3IgT2JqZWN0Tm9kZQogICAqIEBleHRlbmRzIHtOb2RlfQogICAqIEhvbGRzIGFuIG9iamVjdCB3aXRoIGtleXMvdmFsdWVzCiAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywgTm9kZT59IFtwcm9wZXJ0aWVzXSAgIG9iamVjdCB3aXRoIGtleS92YWx1ZSBwYWlycwogICAqLwogIGZ1bmN0aW9uIE9iamVjdE5vZGUocHJvcGVydGllcykgewogICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE9iamVjdE5vZGUpKSB7CiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7CiAgICB9CgogICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCB7fTsgLy8gdmFsaWRhdGUgaW5wdXQKCiAgICBpZiAocHJvcGVydGllcykgewogICAgICBpZiAoIShPYmplY3ROb2RlX3R5cGVvZihwcm9wZXJ0aWVzKSA9PT0gJ29iamVjdCcpIHx8ICFPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgcmV0dXJuIE9iamVjdChpc1sidyIgLyogaXNOb2RlICovXSkocHJvcGVydGllc1trZXldKTsKICAgICAgfSkpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QgY29udGFpbmluZyBOb2RlcyBleHBlY3RlZCcpOwogICAgICB9CiAgICB9CiAgfQoKICBPYmplY3ROb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7CiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUudHlwZSA9ICdPYmplY3ROb2RlJzsKICBPYmplY3ROb2RlLnByb3RvdHlwZS5pc09iamVjdE5vZGUgPSB0cnVlOwogIC8qKgogICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLgogICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW4KICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy4KICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy4KICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWAKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemUKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLgogICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOgogICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKQogICAqLwoKICBPYmplY3ROb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykgewogICAgdmFyIGV2YWxFbnRyaWVzID0ge307CgogICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydGllcykgewogICAgICBpZiAoT2JqZWN0KHV0aWxzX29iamVjdFsiZiIgLyogaGFzT3duUHJvcGVydHkgKi9dKSh0aGlzLnByb3BlcnRpZXMsIGtleSkpIHsKICAgICAgICAvLyB3ZSBzdHJpbmdpZnkvcGFyc2UgdGhlIGtleSBoZXJlIHRvIHJlc29sdmUgdW5pY29kZSBjaGFyYWN0ZXJzLAogICAgICAgIC8vIHNvIHlvdSBjYW5ub3QgY3JlYXRlIGEga2V5IGxpa2UgeyJjb1xcdTAwNkVzdHJ1Y3RvciI6IG51bGx9CiAgICAgICAgdmFyIHN0cmluZ2lmaWVkS2V5ID0gT2JqZWN0KHV0aWxzX3N0cmluZ1siZSIgLyogc3RyaW5naWZ5ICovXSkoa2V5KTsKICAgICAgICB2YXIgcGFyc2VkS2V5ID0gSlNPTi5wYXJzZShzdHJpbmdpZmllZEtleSk7CgogICAgICAgIGlmICghaXNTYWZlUHJvcGVydHkodGhpcy5wcm9wZXJ0aWVzLCBwYXJzZWRLZXkpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0byBwcm9wZXJ0eSAiJyArIHBhcnNlZEtleSArICciJyk7CiAgICAgICAgfQoKICAgICAgICBldmFsRW50cmllc1twYXJzZWRLZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0uX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxPYmplY3ROb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7CiAgICAgIHZhciBvYmogPSB7fTsKCiAgICAgIGZvciAodmFyIF9rZXkgaW4gZXZhbEVudHJpZXMpIHsKICAgICAgICBpZiAoT2JqZWN0KHV0aWxzX29iamVjdFsiZiIgLyogaGFzT3duUHJvcGVydHkgKi9dKShldmFsRW50cmllcywgX2tleSkpIHsKICAgICAgICAgIG9ialtfa2V5XSA9IGV2YWxFbnRyaWVzW19rZXldKHNjb3BlLCBhcmdzLCBjb250ZXh0KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiBvYmo7CiAgICB9OwogIH07CiAgLyoqCiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGUKICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrCiAgICovCgoKICBPYmplY3ROb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7CiAgICAgIGlmIChPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKHRoaXMucHJvcGVydGllcywga2V5KSkgewogICAgICAgIGNhbGxiYWNrKHRoaXMucHJvcGVydGllc1trZXldLCAncHJvcGVydGllc1snICsgT2JqZWN0KHV0aWxzX3N0cmluZ1siZSIgLyogc3RyaW5naWZ5ICovXSkoa2V5KSArICddJywgdGhpcyk7CiAgICAgIH0KICAgIH0KICB9OwogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBPYmplY3ROb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nCiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuCiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFjawogICAqIEByZXR1cm5zIHtPYmplY3ROb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZQogICAqLwoKCiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICB2YXIgcHJvcGVydGllcyA9IHt9OwoKICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHsKICAgICAgaWYgKE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkodGhpcy5wcm9wZXJ0aWVzLCBrZXkpKSB7CiAgICAgICAgcHJvcGVydGllc1trZXldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMucHJvcGVydGllc1trZXldLCAncHJvcGVydGllc1snICsgT2JqZWN0KHV0aWxzX3N0cmluZ1siZSIgLyogc3RyaW5naWZ5ICovXSkoa2V5KSArICddJywgdGhpcykpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG5ldyBPYmplY3ROb2RlKHByb3BlcnRpZXMpOwogIH07CiAgLyoqCiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weQogICAqIEByZXR1cm4ge09iamVjdE5vZGV9CiAgICovCgoKICBPYmplY3ROb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKICAgIHZhciBwcm9wZXJ0aWVzID0ge307CgogICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydGllcykgewogICAgICBpZiAoT2JqZWN0KHV0aWxzX29iamVjdFsiZiIgLyogaGFzT3duUHJvcGVydHkgKi9dKSh0aGlzLnByb3BlcnRpZXMsIGtleSkpIHsKICAgICAgICBwcm9wZXJ0aWVzW2tleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBuZXcgT2JqZWN0Tm9kZShwcm9wZXJ0aWVzKTsKICB9OwogIC8qKgogICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24KICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwogICAqIEByZXR1cm4ge3N0cmluZ30gc3RyCiAgICogQG92ZXJyaWRlCiAgICovCgoKICBPYmplY3ROb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgdmFyIGVudHJpZXMgPSBbXTsKCiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7CiAgICAgIGlmIChPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKHRoaXMucHJvcGVydGllcywga2V5KSkgewogICAgICAgIGVudHJpZXMucHVzaChPYmplY3QodXRpbHNfc3RyaW5nWyJlIiAvKiBzdHJpbmdpZnkgKi9dKShrZXkpICsgJzogJyArIHRoaXMucHJvcGVydGllc1trZXldLnRvU3RyaW5nKG9wdGlvbnMpKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiAneycgKyBlbnRyaWVzLmpvaW4oJywgJykgKyAnfSc7CiAgfTsKICAvKioKICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlCiAgICogQHJldHVybnMge09iamVjdH0KICAgKi8KCgogIE9iamVjdE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB7CiAgICAgIG1hdGhqczogJ09iamVjdE5vZGUnLAogICAgICBwcm9wZXJ0aWVzOiB0aGlzLnByb3BlcnRpZXMKICAgIH07CiAgfTsKICAvKioKICAgKiBJbnN0YW50aWF0ZSBhbiBPcGVyYXRvck5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvbgogICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlCiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7Im1hdGhqcyI6ICJPYmplY3ROb2RlIiwgInByb3BlcnRpZXMiOiB7Li4ufX1gLAogICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWwKICAgKiBAcmV0dXJucyB7T2JqZWN0Tm9kZX0KICAgKi8KCgogIE9iamVjdE5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikgewogICAgcmV0dXJuIG5ldyBPYmplY3ROb2RlKGpzb24ucHJvcGVydGllcyk7CiAgfTsKICAvKioKICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvbgogICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICogQHJldHVybiB7c3RyaW5nfSBzdHIKICAgKiBAb3ZlcnJpZGUKICAgKi8KCgogIE9iamVjdE5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICB2YXIgZW50cmllcyA9IFtdOwoKICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHsKICAgICAgaWYgKE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkodGhpcy5wcm9wZXJ0aWVzLCBrZXkpKSB7CiAgICAgICAgZW50cmllcy5wdXNoKCc8c3BhbiBjbGFzcz0ibWF0aC1zeW1ib2wgbWF0aC1wcm9wZXJ0eSI+JyArIE9iamVjdCh1dGlsc19zdHJpbmdbImMiIC8qIGVzY2FwZSAqL10pKGtleSkgKyAnPC9zcGFuPicgKyAnPHNwYW4gY2xhc3M9Im1hdGgtb3BlcmF0b3IgbWF0aC1hc3NpZ25tZW50LW9wZXJhdG9yIG1hdGgtcHJvcGVydHktYXNzaWdubWVudC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciI+Ojwvc3Bhbj4nICsgdGhpcy5wcm9wZXJ0aWVzW2tleV0udG9IVE1MKG9wdGlvbnMpKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiAnPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1jdXJseS1wYXJlbnRoZXNpcyI+ezwvc3Bhbj4nICsgZW50cmllcy5qb2luKCc8c3BhbiBjbGFzcz0ibWF0aC1zZXBhcmF0b3IiPiw8L3NwYW4+JykgKyAnPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1jdXJseS1wYXJlbnRoZXNpcyI+fTwvc3Bhbj4nOwogIH07CiAgLyoqCiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0cgogICAqLwoKCiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgIHZhciBlbnRyaWVzID0gW107CgogICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydGllcykgewogICAgICBpZiAoT2JqZWN0KHV0aWxzX29iamVjdFsiZiIgLyogaGFzT3duUHJvcGVydHkgKi9dKSh0aGlzLnByb3BlcnRpZXMsIGtleSkpIHsKICAgICAgICBlbnRyaWVzLnB1c2goJ1xcbWF0aGJmeycgKyBrZXkgKyAnOn0gJiAnICsgdGhpcy5wcm9wZXJ0aWVzW2tleV0udG9UZXgob3B0aW9ucykgKyAnXFxcXCcpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuICJcXGxlZnRcXHtcXGJlZ2lue2FycmF5fXtsbH0iLmNvbmNhdChlbnRyaWVzLmpvaW4oJ1xuJyksICJcXGVuZHthcnJheX1cXHJpZ2h0XFx9Iik7CiAgfTsKCiAgcmV0dXJuIE9iamVjdE5vZGU7Cn0sIHsKICBpc0NsYXNzOiB0cnVlLAogIGlzTm9kZTogdHJ1ZQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9ub2RlL09wZXJhdG9yTm9kZS5qcwoKCgoKCgoKdmFyIE9wZXJhdG9yTm9kZV9uYW1lID0gJ09wZXJhdG9yTm9kZSc7CnZhciBPcGVyYXRvck5vZGVfZGVwZW5kZW5jaWVzID0gWydOb2RlJ107CnZhciBjcmVhdGVPcGVyYXRvck5vZGUgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShPcGVyYXRvck5vZGVfbmFtZSwgT3BlcmF0b3JOb2RlX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgTm9kZSA9IF9yZWYuTm9kZTsKCiAgLyoqCiAgICogQGNvbnN0cnVjdG9yIE9wZXJhdG9yTm9kZQogICAqIEBleHRlbmRzIHtOb2RlfQogICAqIEFuIG9wZXJhdG9yIHdpdGggdHdvIGFyZ3VtZW50cywgbGlrZSAyKzMKICAgKgogICAqIEBwYXJhbSB7c3RyaW5nfSBvcCAgICAgICAgICAgT3BlcmF0b3IgbmFtZSwgZm9yIGV4YW1wbGUgJysnCiAgICogQHBhcmFtIHtzdHJpbmd9IGZuICAgICAgICAgICBGdW5jdGlvbiBuYW1lLCBmb3IgZXhhbXBsZSAnYWRkJwogICAqIEBwYXJhbSB7Tm9kZVtdfSBhcmdzICAgICAgICAgT3BlcmF0b3IgYXJndW1lbnRzCiAgICogQHBhcmFtIHtib29sZWFufSBbaW1wbGljaXRdICBJcyB0aGlzIGFuIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uPwogICAqLwogIGZ1bmN0aW9uIE9wZXJhdG9yTm9kZShvcCwgZm4sIGFyZ3MsIGltcGxpY2l0KSB7CiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgT3BlcmF0b3JOb2RlKSkgewogICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpOwogICAgfSAvLyB2YWxpZGF0ZSBpbnB1dAoKCiAgICBpZiAodHlwZW9mIG9wICE9PSAnc3RyaW5nJykgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciAib3AiJyk7CiAgICB9CgogICAgaWYgKHR5cGVvZiBmbiAhPT0gJ3N0cmluZycpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgImZuIicpOwogICAgfQoKICAgIGlmICghQXJyYXkuaXNBcnJheShhcmdzKSB8fCAhYXJncy5ldmVyeShpc1sidyIgLyogaXNOb2RlICovXSkpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgY29udGFpbmluZyBOb2RlcyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyICJhcmdzIicpOwogICAgfQoKICAgIHRoaXMuaW1wbGljaXQgPSBpbXBsaWNpdCA9PT0gdHJ1ZTsKICAgIHRoaXMub3AgPSBvcDsKICAgIHRoaXMuZm4gPSBmbjsKICAgIHRoaXMuYXJncyA9IGFyZ3MgfHwgW107CiAgfQoKICBPcGVyYXRvck5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTsKICBPcGVyYXRvck5vZGUucHJvdG90eXBlLnR5cGUgPSAnT3BlcmF0b3JOb2RlJzsKICBPcGVyYXRvck5vZGUucHJvdG90eXBlLmlzT3BlcmF0b3JOb2RlID0gdHJ1ZTsKICAvKioKICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi4KICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuCiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuCiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuCiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9ucwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9scwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS4KICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZToKICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKikKICAgKi8KCiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykgewogICAgLy8gdmFsaWRhdGUgZm4KICAgIGlmICh0eXBlb2YgdGhpcy5mbiAhPT0gJ3N0cmluZycgfHwgIWlzU2FmZU1ldGhvZChtYXRoLCB0aGlzLmZuKSkgewogICAgICBpZiAoIW1hdGhbdGhpcy5mbl0pIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uICcgKyB0aGlzLmZuICsgJyBtaXNzaW5nIGluIHByb3ZpZGVkIG5hbWVzcGFjZSAibWF0aCInKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0byBmdW5jdGlvbiAiJyArIHRoaXMuZm4gKyAnIicpOwogICAgICB9CiAgICB9CgogICAgdmFyIGZuID0gZ2V0U2FmZVByb3BlcnR5KG1hdGgsIHRoaXMuZm4pOwogICAgdmFyIGV2YWxBcmdzID0gT2JqZWN0KHV0aWxzX2FycmF5WyJtIiAvKiBtYXAgKi9dKSh0aGlzLmFyZ3MsIGZ1bmN0aW9uIChhcmcpIHsKICAgICAgcmV0dXJuIGFyZy5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7CiAgICB9KTsKCiAgICBpZiAoZXZhbEFyZ3MubGVuZ3RoID09PSAxKSB7CiAgICAgIHZhciBldmFsQXJnMCA9IGV2YWxBcmdzWzBdOwogICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbE9wZXJhdG9yTm9kZShzY29wZSwgYXJncywgY29udGV4dCkgewogICAgICAgIHJldHVybiBmbihldmFsQXJnMChzY29wZSwgYXJncywgY29udGV4dCkpOwogICAgICB9OwogICAgfSBlbHNlIGlmIChldmFsQXJncy5sZW5ndGggPT09IDIpIHsKICAgICAgdmFyIF9ldmFsQXJnID0gZXZhbEFyZ3NbMF07CiAgICAgIHZhciBldmFsQXJnMSA9IGV2YWxBcmdzWzFdOwogICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbE9wZXJhdG9yTm9kZShzY29wZSwgYXJncywgY29udGV4dCkgewogICAgICAgIHJldHVybiBmbihfZXZhbEFyZyhzY29wZSwgYXJncywgY29udGV4dCksIGV2YWxBcmcxKHNjb3BlLCBhcmdzLCBjb250ZXh0KSk7CiAgICAgIH07CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbE9wZXJhdG9yTm9kZShzY29wZSwgYXJncywgY29udGV4dCkgewogICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBPYmplY3QodXRpbHNfYXJyYXlbIm0iIC8qIG1hcCAqL10pKGV2YWxBcmdzLCBmdW5jdGlvbiAoZXZhbEFyZykgewogICAgICAgICAgcmV0dXJuIGV2YWxBcmcoc2NvcGUsIGFyZ3MsIGNvbnRleHQpOwogICAgICAgIH0pKTsKICAgICAgfTsKICAgIH0KICB9OwogIC8qKgogICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlCiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFjawogICAqLwoKCiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJncy5sZW5ndGg7IGkrKykgewogICAgICBjYWxsYmFjayh0aGlzLmFyZ3NbaV0sICdhcmdzWycgKyBpICsgJ10nLCB0aGlzKTsKICAgIH0KICB9OwogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBPcGVyYXRvck5vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmcKICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS4KICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrCiAgICogQHJldHVybnMge09wZXJhdG9yTm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGUKICAgKi8KCgogIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICB2YXIgYXJncyA9IFtdOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGFyZ3NbaV0gPSB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5hcmdzW2ldLCAnYXJnc1snICsgaSArICddJywgdGhpcykpOwogICAgfQoKICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKHRoaXMub3AsIHRoaXMuZm4sIGFyZ3MsIHRoaXMuaW1wbGljaXQpOwogIH07CiAgLyoqCiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weQogICAqIEByZXR1cm4ge09wZXJhdG9yTm9kZX0KICAgKi8KCgogIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSh0aGlzLm9wLCB0aGlzLmZuLCB0aGlzLmFyZ3Muc2xpY2UoMCksIHRoaXMuaW1wbGljaXQpOwogIH07CiAgLyoqCiAgICogQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIHVuYXJ5IE9wZXJhdG9yTm9kZToKICAgKiBoYXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIGxpa2UgYC1hYC4KICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhbiB1bmFyeSBvcGVyYXRvciBub2RlLCBmYWxzZSBvdGhlcndpc2UuCiAgICovCgoKICBPcGVyYXRvck5vZGUucHJvdG90eXBlLmlzVW5hcnkgPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gdGhpcy5hcmdzLmxlbmd0aCA9PT0gMTsKICB9OwogIC8qKgogICAqIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhIGJpbmFyeSBPcGVyYXRvck5vZGU6CiAgICogaGFzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cywgbGlrZSBgYSArIGJgLgogICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIGEgYmluYXJ5IG9wZXJhdG9yIG5vZGUsIGZhbHNlIG90aGVyd2lzZS4KICAgKi8KCgogIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUuaXNCaW5hcnkgPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gdGhpcy5hcmdzLmxlbmd0aCA9PT0gMjsKICB9OwogIC8qKgogICAqIENhbGN1bGF0ZSB3aGljaCBwYXJlbnRoZXNlcyBhcmUgbmVjZXNzYXJ5LiBHZXRzIGFuIE9wZXJhdG9yTm9kZQogICAqICh3aGljaCBpcyB0aGUgcm9vdCBvZiB0aGUgdHJlZSkgYW5kIGFuIEFycmF5IG9mIE5vZGVzCiAgICogKHRoaXMuYXJncykgYW5kIHJldHVybnMgYW4gYXJyYXkgd2hlcmUgJ3RydWUnIG1lYW5zIHRoYXQgYW4gYXJndW1lbnQKICAgKiBoYXMgdG8gYmUgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMgd2hlcmVhcyAnZmFsc2UnIG1lYW5zIHRoZSBvcHBvc2l0ZS4KICAgKgogICAqIEBwYXJhbSB7T3BlcmF0b3JOb2RlfSByb290CiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudGhlc2lzCiAgICogQHBhcmFtIHtOb2RlW119IGFyZ3MKICAgKiBAcGFyYW0ge2Jvb2xlYW59IGxhdGV4CiAgICogQHJldHVybiB7Ym9vbGVhbltdfQogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyhyb290LCBwYXJlbnRoZXNpcywgaW1wbGljaXQsIGFyZ3MsIGxhdGV4KSB7CiAgICAvLyBwcmVjZWRlbmNlIG9mIHRoZSByb290IE9wZXJhdG9yTm9kZQogICAgdmFyIHByZWNlZGVuY2UgPSBnZXRQcmVjZWRlbmNlKHJvb3QsIHBhcmVudGhlc2lzKTsKICAgIHZhciBhc3NvY2lhdGl2aXR5ID0gZ2V0QXNzb2NpYXRpdml0eShyb290LCBwYXJlbnRoZXNpcyk7CgogICAgaWYgKHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBhcmdzLmxlbmd0aCA+IDIgJiYgcm9vdC5nZXRJZGVudGlmaWVyKCkgIT09ICdPcGVyYXRvck5vZGU6YWRkJyAmJiByb290LmdldElkZW50aWZpZXIoKSAhPT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScpIHsKICAgICAgcmV0dXJuIGFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHsKICAgICAgICBzd2l0Y2ggKGFyZy5nZXRDb250ZW50KCkudHlwZSkgewogICAgICAgICAgLy8gTm9kZXMgdGhhdCBkb24ndCBuZWVkIGV4dHJhIHBhcmVudGhlc2VzCiAgICAgICAgICBjYXNlICdBcnJheU5vZGUnOgogICAgICAgICAgY2FzZSAnQ29uc3RhbnROb2RlJzoKICAgICAgICAgIGNhc2UgJ1N5bWJvbE5vZGUnOgogICAgICAgICAgY2FzZSAnUGFyZW50aGVzaXNOb2RlJzoKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CgogICAgdmFyIHJlc3VsdDsKCiAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7CiAgICAgIGNhc2UgMDoKICAgICAgICByZXN1bHQgPSBbXTsKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgMToKICAgICAgICAvLyB1bmFyeSBvcGVyYXRvcnMKICAgICAgICB7CiAgICAgICAgICAvLyBwcmVjZWRlbmNlIG9mIHRoZSBvcGVyYW5kCiAgICAgICAgICB2YXIgb3BlcmFuZFByZWNlZGVuY2UgPSBnZXRQcmVjZWRlbmNlKGFyZ3NbMF0sIHBhcmVudGhlc2lzKTsgLy8gaGFuZGxlIHNwZWNpYWwgY2FzZXMgZm9yIExhVGVYLCB3aGVyZSBzb21lIG9mIHRoZSBwYXJlbnRoZXNlcyBhcmVuJ3QgbmVlZGVkCgogICAgICAgICAgaWYgKGxhdGV4ICYmIG9wZXJhbmRQcmVjZWRlbmNlICE9PSBudWxsKSB7CiAgICAgICAgICAgIHZhciBvcGVyYW5kSWRlbnRpZmllcjsKICAgICAgICAgICAgdmFyIHJvb3RJZGVudGlmaWVyOwoKICAgICAgICAgICAgaWYgKHBhcmVudGhlc2lzID09PSAna2VlcCcpIHsKICAgICAgICAgICAgICBvcGVyYW5kSWRlbnRpZmllciA9IGFyZ3NbMF0uZ2V0SWRlbnRpZmllcigpOwogICAgICAgICAgICAgIHJvb3RJZGVudGlmaWVyID0gcm9vdC5nZXRJZGVudGlmaWVyKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy8gSWdub3JlIFBhcmVudGhlc2lzIE5vZGVzIHdoZW4gbm90IGluICdrZWVwJyBtb2RlCiAgICAgICAgICAgICAgb3BlcmFuZElkZW50aWZpZXIgPSBhcmdzWzBdLmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCk7CiAgICAgICAgICAgICAgcm9vdElkZW50aWZpZXIgPSByb290LmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChvcGVyYXRvcnNfcHJvcGVydGllc1twcmVjZWRlbmNlXVtyb290SWRlbnRpZmllcl0ubGF0ZXhMZWZ0UGFyZW5zID09PSBmYWxzZSkgewogICAgICAgICAgICAgIHJlc3VsdCA9IFtmYWxzZV07CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChvcGVyYXRvcnNfcHJvcGVydGllc1tvcGVyYW5kUHJlY2VkZW5jZV1bb3BlcmFuZElkZW50aWZpZXJdLmxhdGV4UGFyZW5zID09PSBmYWxzZSkgewogICAgICAgICAgICAgIHJlc3VsdCA9IFtmYWxzZV07CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAob3BlcmFuZFByZWNlZGVuY2UgPT09IG51bGwpIHsKICAgICAgICAgICAgLy8gaWYgdGhlIG9wZXJhbmQgaGFzIG5vIGRlZmluZWQgcHJlY2VkZW5jZSwgbm8gcGFyZW5zIGFyZSBuZWVkZWQKICAgICAgICAgICAgcmVzdWx0ID0gW2ZhbHNlXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKG9wZXJhbmRQcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UpIHsKICAgICAgICAgICAgLy8gaWYgdGhlIG9wZXJhbmRzIHByZWNlZGVuY2UgaXMgbG93ZXIsIHBhcmVucyBhcmUgbmVlZGVkCiAgICAgICAgICAgIHJlc3VsdCA9IFt0cnVlXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9IC8vIG90aGVyd2lzZSwgbm8gcGFyZW5zIG5lZWRlZAoKCiAgICAgICAgICByZXN1bHQgPSBbZmFsc2VdOwogICAgICAgIH0KICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgMjoKICAgICAgICAvLyBiaW5hcnkgb3BlcmF0b3JzCiAgICAgICAgewogICAgICAgICAgdmFyIGxoc1BhcmVuczsgLy8gbGVmdCBoYW5kIHNpZGUgbmVlZHMgcGFyZW50aGVzaXM/CiAgICAgICAgICAvLyBwcmVjZWRlbmNlIG9mIHRoZSBsZWZ0IGhhbmQgc2lkZQoKICAgICAgICAgIHZhciBsaHNQcmVjZWRlbmNlID0gZ2V0UHJlY2VkZW5jZShhcmdzWzBdLCBwYXJlbnRoZXNpcyk7IC8vIGlzIHRoZSByb290IG5vZGUgYXNzb2NpYXRpdmUgd2l0aCB0aGUgbGVmdCBoYW5kIHNpZGUKCiAgICAgICAgICB2YXIgYXNzb2NXaXRoTGhzID0gaXNBc3NvY2lhdGl2ZVdpdGgocm9vdCwgYXJnc1swXSwgcGFyZW50aGVzaXMpOwoKICAgICAgICAgIGlmIChsaHNQcmVjZWRlbmNlID09PSBudWxsKSB7CiAgICAgICAgICAgIC8vIGlmIHRoZSBsZWZ0IGhhbmQgc2lkZSBoYXMgbm8gZGVmaW5lZCBwcmVjZWRlbmNlLCBubyBwYXJlbnMgYXJlIG5lZWRlZAogICAgICAgICAgICAvLyBGdW5jdGlvbk5vZGUgZm9yIGV4YW1wbGUKICAgICAgICAgICAgbGhzUGFyZW5zID0gZmFsc2U7CiAgICAgICAgICB9IGVsc2UgaWYgKGxoc1ByZWNlZGVuY2UgPT09IHByZWNlZGVuY2UgJiYgYXNzb2NpYXRpdml0eSA9PT0gJ3JpZ2h0JyAmJiAhYXNzb2NXaXRoTGhzKSB7CiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgZXF1YWwgcHJlY2VkZW5jZSwgaWYgdGhlIHJvb3Qgbm9kZSBpcyBsZWZ0IGFzc29jaWF0aXZlCiAgICAgICAgICAgIC8vIHBhcmVucyBhcmUgKipuZXZlcioqIG5lY2Vzc2FyeSBmb3IgdGhlIGxlZnQgaGFuZCBzaWRlLgogICAgICAgICAgICAvLyBJZiBpdCBpcyByaWdodCBhc3NvY2lhdGl2ZSBob3dldmVyLCBwYXJlbnMgYXJlIG5lY2Vzc2FyeQogICAgICAgICAgICAvLyBpZiB0aGUgcm9vdCBub2RlIGlzbid0IGFzc29jaWF0aXZlIHdpdGggdGhlIGxlZnQgaGFuZCBzaWRlCiAgICAgICAgICAgIGxoc1BhcmVucyA9IHRydWU7CiAgICAgICAgICB9IGVsc2UgaWYgKGxoc1ByZWNlZGVuY2UgPCBwcmVjZWRlbmNlKSB7CiAgICAgICAgICAgIGxoc1BhcmVucyA9IHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsaHNQYXJlbnMgPSBmYWxzZTsKICAgICAgICAgIH0KCiAgICAgICAgICB2YXIgcmhzUGFyZW5zOyAvLyByaWdodCBoYW5kIHNpZGUgbmVlZHMgcGFyZW50aGVzaXM/CiAgICAgICAgICAvLyBwcmVjZWRlbmNlIG9mIHRoZSByaWdodCBoYW5kIHNpZGUKCiAgICAgICAgICB2YXIgcmhzUHJlY2VkZW5jZSA9IGdldFByZWNlZGVuY2UoYXJnc1sxXSwgcGFyZW50aGVzaXMpOyAvLyBpcyB0aGUgcm9vdCBub2RlIGFzc29jaWF0aXZlIHdpdGggdGhlIHJpZ2h0IGhhbmQgc2lkZT8KCiAgICAgICAgICB2YXIgYXNzb2NXaXRoUmhzID0gaXNBc3NvY2lhdGl2ZVdpdGgocm9vdCwgYXJnc1sxXSwgcGFyZW50aGVzaXMpOwoKICAgICAgICAgIGlmIChyaHNQcmVjZWRlbmNlID09PSBudWxsKSB7CiAgICAgICAgICAgIC8vIGlmIHRoZSByaWdodCBoYW5kIHNpZGUgaGFzIG5vIGRlZmluZWQgcHJlY2VkZW5jZSwgbm8gcGFyZW5zIGFyZSBuZWVkZWQKICAgICAgICAgICAgLy8gRnVuY3Rpb25Ob2RlIGZvciBleGFtcGxlCiAgICAgICAgICAgIHJoc1BhcmVucyA9IGZhbHNlOwogICAgICAgICAgfSBlbHNlIGlmIChyaHNQcmVjZWRlbmNlID09PSBwcmVjZWRlbmNlICYmIGFzc29jaWF0aXZpdHkgPT09ICdsZWZ0JyAmJiAhYXNzb2NXaXRoUmhzKSB7CiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgZXF1YWwgcHJlY2VkZW5jZSwgaWYgdGhlIHJvb3Qgbm9kZSBpcyByaWdodCBhc3NvY2lhdGl2ZQogICAgICAgICAgICAvLyBwYXJlbnMgYXJlICoqbmV2ZXIqKiBuZWNlc3NhcnkgZm9yIHRoZSByaWdodCBoYW5kIHNpZGUuCiAgICAgICAgICAgIC8vIElmIGl0IGlzIGxlZnQgYXNzb2NpYXRpdmUgaG93ZXZlciwgcGFyZW5zIGFyZSBuZWNlc3NhcnkKICAgICAgICAgICAgLy8gaWYgdGhlIHJvb3Qgbm9kZSBpc24ndCBhc3NvY2lhdGl2ZSB3aXRoIHRoZSByaWdodCBoYW5kIHNpZGUKICAgICAgICAgICAgcmhzUGFyZW5zID0gdHJ1ZTsKICAgICAgICAgIH0gZWxzZSBpZiAocmhzUHJlY2VkZW5jZSA8IHByZWNlZGVuY2UpIHsKICAgICAgICAgICAgcmhzUGFyZW5zID0gdHJ1ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJoc1BhcmVucyA9IGZhbHNlOwogICAgICAgICAgfSAvLyBoYW5kbGUgc3BlY2lhbCBjYXNlcyBmb3IgTGFUZVgsIHdoZXJlIHNvbWUgb2YgdGhlIHBhcmVudGhlc2VzIGFyZW4ndCBuZWVkZWQKCgogICAgICAgICAgaWYgKGxhdGV4KSB7CiAgICAgICAgICAgIHZhciBfcm9vdElkZW50aWZpZXI7CgogICAgICAgICAgICB2YXIgbGhzSWRlbnRpZmllcjsKICAgICAgICAgICAgdmFyIHJoc0lkZW50aWZpZXI7CgogICAgICAgICAgICBpZiAocGFyZW50aGVzaXMgPT09ICdrZWVwJykgewogICAgICAgICAgICAgIF9yb290SWRlbnRpZmllciA9IHJvb3QuZ2V0SWRlbnRpZmllcigpOwogICAgICAgICAgICAgIGxoc0lkZW50aWZpZXIgPSByb290LmFyZ3NbMF0uZ2V0SWRlbnRpZmllcigpOwogICAgICAgICAgICAgIHJoc0lkZW50aWZpZXIgPSByb290LmFyZ3NbMV0uZ2V0SWRlbnRpZmllcigpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIC8vIElnbm9yZSBQYXJlbnRoZXNpc05vZGVzIHdoZW4gbm90IGluICdrZWVwJyBtb2RlCiAgICAgICAgICAgICAgX3Jvb3RJZGVudGlmaWVyID0gcm9vdC5nZXRDb250ZW50KCkuZ2V0SWRlbnRpZmllcigpOwogICAgICAgICAgICAgIGxoc0lkZW50aWZpZXIgPSByb290LmFyZ3NbMF0uZ2V0Q29udGVudCgpLmdldElkZW50aWZpZXIoKTsKICAgICAgICAgICAgICByaHNJZGVudGlmaWVyID0gcm9vdC5hcmdzWzFdLmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChsaHNQcmVjZWRlbmNlICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yc19wcm9wZXJ0aWVzW3ByZWNlZGVuY2VdW19yb290SWRlbnRpZmllcl0ubGF0ZXhMZWZ0UGFyZW5zID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgbGhzUGFyZW5zID0gZmFsc2U7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBpZiAob3BlcmF0b3JzX3Byb3BlcnRpZXNbbGhzUHJlY2VkZW5jZV1bbGhzSWRlbnRpZmllcl0ubGF0ZXhQYXJlbnMgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICBsaHNQYXJlbnMgPSBmYWxzZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChyaHNQcmVjZWRlbmNlICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yc19wcm9wZXJ0aWVzW3ByZWNlZGVuY2VdW19yb290SWRlbnRpZmllcl0ubGF0ZXhSaWdodFBhcmVucyA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIHJoc1BhcmVucyA9IGZhbHNlOwogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yc19wcm9wZXJ0aWVzW3Joc1ByZWNlZGVuY2VdW3Joc0lkZW50aWZpZXJdLmxhdGV4UGFyZW5zID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgcmhzUGFyZW5zID0gZmFsc2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgcmVzdWx0ID0gW2xoc1BhcmVucywgcmhzUGFyZW5zXTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CgogICAgICBkZWZhdWx0OgogICAgICAgIGlmIChyb290LmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTphZGQnIHx8IHJvb3QuZ2V0SWRlbnRpZmllcigpID09PSAnT3BlcmF0b3JOb2RlOm11bHRpcGx5JykgewogICAgICAgICAgcmVzdWx0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZykgewogICAgICAgICAgICB2YXIgYXJnUHJlY2VkZW5jZSA9IGdldFByZWNlZGVuY2UoYXJnLCBwYXJlbnRoZXNpcyk7CiAgICAgICAgICAgIHZhciBhc3NvY1dpdGhBcmcgPSBpc0Fzc29jaWF0aXZlV2l0aChyb290LCBhcmcsIHBhcmVudGhlc2lzKTsKICAgICAgICAgICAgdmFyIGFyZ0Fzc29jaWF0aXZpdHkgPSBnZXRBc3NvY2lhdGl2aXR5KGFyZywgcGFyZW50aGVzaXMpOwoKICAgICAgICAgICAgaWYgKGFyZ1ByZWNlZGVuY2UgPT09IG51bGwpIHsKICAgICAgICAgICAgICAvLyBpZiB0aGUgYXJndW1lbnQgaGFzIG5vIGRlZmluZWQgcHJlY2VkZW5jZSwgbm8gcGFyZW5zIGFyZSBuZWVkZWQKICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJlY2VkZW5jZSA9PT0gYXJnUHJlY2VkZW5jZSAmJiBhc3NvY2lhdGl2aXR5ID09PSBhcmdBc3NvY2lhdGl2aXR5ICYmICFhc3NvY1dpdGhBcmcpIHsKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIGlmIChhcmdQcmVjZWRlbmNlIDwgcHJlY2VkZW5jZSkgewogICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIGJyZWFrOwogICAgfSAvLyBoYW5kbGVzIGFuIGVkZ2UgY2FzZSBvZiAnYXV0bycgcGFyZW50aGVzZXMgd2l0aCBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvbiBvZiBDb25zdGFudE5vZGUKICAgIC8vIEluIHRoYXQgY2FzZSBwcmludCBwYXJlbnRoZXNlcyBmb3IgUGFyZW50aGVzaXNOb2RlcyBldmVuIHRob3VnaCB0aGV5IG5vcm1hbGx5IHdvdWxkbid0IGJlCiAgICAvLyBwcmludGVkLgoKCiAgICBpZiAoYXJncy5sZW5ndGggPj0gMiAmJiByb290LmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgcm9vdC5pbXBsaWNpdCAmJiBwYXJlbnRoZXNpcyA9PT0gJ2F1dG8nICYmIGltcGxpY2l0ID09PSAnaGlkZScpIHsKICAgICAgcmVzdWx0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZywgaW5kZXgpIHsKICAgICAgICB2YXIgaXNQYXJlbnRoZXNpc05vZGUgPSBhcmcuZ2V0SWRlbnRpZmllcigpID09PSAnUGFyZW50aGVzaXNOb2RlJzsKCiAgICAgICAgaWYgKHJlc3VsdFtpbmRleF0gfHwgaXNQYXJlbnRoZXNpc05vZGUpIHsKICAgICAgICAgIC8vIHB1dCBpbiBwYXJlbnRoZXNpcz8KICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9KTsKICAgIH0KCiAgICByZXR1cm4gcmVzdWx0OwogIH0KICAvKioKICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgogICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICogQHJldHVybiB7c3RyaW5nfSBzdHIKICAgKi8KCgogIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7CiAgICB2YXIgaW1wbGljaXQgPSBvcHRpb25zICYmIG9wdGlvbnMuaW1wbGljaXQgPyBvcHRpb25zLmltcGxpY2l0IDogJ2hpZGUnOwogICAgdmFyIGFyZ3MgPSB0aGlzLmFyZ3M7CiAgICB2YXIgcGFyZW5zID0gY2FsY3VsYXRlTmVjZXNzYXJ5UGFyZW50aGVzZXModGhpcywgcGFyZW50aGVzaXMsIGltcGxpY2l0LCBhcmdzLCBmYWxzZSk7CgogICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7CiAgICAgIC8vIHVuYXJ5IG9wZXJhdG9ycwogICAgICB2YXIgYXNzb2MgPSBnZXRBc3NvY2lhdGl2aXR5KHRoaXMsIHBhcmVudGhlc2lzKTsKICAgICAgdmFyIG9wZXJhbmQgPSBhcmdzWzBdLnRvU3RyaW5nKG9wdGlvbnMpOwoKICAgICAgaWYgKHBhcmVuc1swXSkgewogICAgICAgIG9wZXJhbmQgPSAnKCcgKyBvcGVyYW5kICsgJyknOwogICAgICB9IC8vIGZvciBleGFtcGxlIGZvciAibm90Iiwgd2Ugd2FudCBhIHNwYWNlIGJldHdlZW4gb3BlcmFuZCBhbmQgYXJndW1lbnQKCgogICAgICB2YXIgb3BJc05hbWVkID0gL1thLXpBLVpdKy8udGVzdCh0aGlzLm9wKTsKCiAgICAgIGlmIChhc3NvYyA9PT0gJ3JpZ2h0JykgewogICAgICAgIC8vIHByZWZpeCBvcGVyYXRvcgogICAgICAgIHJldHVybiB0aGlzLm9wICsgKG9wSXNOYW1lZCA/ICcgJyA6ICcnKSArIG9wZXJhbmQ7CiAgICAgIH0gZWxzZSBpZiAoYXNzb2MgPT09ICdsZWZ0JykgewogICAgICAgIC8vIHBvc3RmaXgKICAgICAgICByZXR1cm4gb3BlcmFuZCArIChvcElzTmFtZWQgPyAnICcgOiAnJykgKyB0aGlzLm9wOwogICAgICB9IC8vIGZhbGwgYmFjayB0byBwb3N0Zml4CgoKICAgICAgcmV0dXJuIG9wZXJhbmQgKyB0aGlzLm9wOwogICAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMikgewogICAgICB2YXIgbGhzID0gYXJnc1swXS50b1N0cmluZyhvcHRpb25zKTsgLy8gbGVmdCBoYW5kIHNpZGUKCiAgICAgIHZhciByaHMgPSBhcmdzWzFdLnRvU3RyaW5nKG9wdGlvbnMpOyAvLyByaWdodCBoYW5kIHNpZGUKCiAgICAgIGlmIChwYXJlbnNbMF0pIHsKICAgICAgICAvLyBsZWZ0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz8KICAgICAgICBsaHMgPSAnKCcgKyBsaHMgKyAnKSc7CiAgICAgIH0KCiAgICAgIGlmIChwYXJlbnNbMV0pIHsKICAgICAgICAvLyByaWdodCBoYW5kIHNpZGUgaW4gcGFyZW50aGVzaXM/CiAgICAgICAgcmhzID0gJygnICsgcmhzICsgJyknOwogICAgICB9CgogICAgICBpZiAodGhpcy5pbXBsaWNpdCAmJiB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgaW1wbGljaXQgPT09ICdoaWRlJykgewogICAgICAgIHJldHVybiBsaHMgKyAnICcgKyByaHM7CiAgICAgIH0KCiAgICAgIHJldHVybiBsaHMgKyAnICcgKyB0aGlzLm9wICsgJyAnICsgcmhzOwogICAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA+IDIgJiYgKHRoaXMuZ2V0SWRlbnRpZmllcigpID09PSAnT3BlcmF0b3JOb2RlOmFkZCcgfHwgdGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknKSkgewogICAgICB2YXIgc3RyaW5naWZpZWRBcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZywgaW5kZXgpIHsKICAgICAgICBhcmcgPSBhcmcudG9TdHJpbmcob3B0aW9ucyk7CgogICAgICAgIGlmIChwYXJlbnNbaW5kZXhdKSB7CiAgICAgICAgICAvLyBwdXQgaW4gcGFyZW50aGVzaXM/CiAgICAgICAgICBhcmcgPSAnKCcgKyBhcmcgKyAnKSc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYXJnOwogICAgICB9KTsKCiAgICAgIGlmICh0aGlzLmltcGxpY2l0ICYmIHRoaXMuZ2V0SWRlbnRpZmllcigpID09PSAnT3BlcmF0b3JOb2RlOm11bHRpcGx5JyAmJiBpbXBsaWNpdCA9PT0gJ2hpZGUnKSB7CiAgICAgICAgcmV0dXJuIHN0cmluZ2lmaWVkQXJncy5qb2luKCcgJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiBzdHJpbmdpZmllZEFyZ3Muam9pbignICcgKyB0aGlzLm9wICsgJyAnKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIGZhbGxiYWNrIHRvIGZvcm1hdHRpbmcgYXMgYSBmdW5jdGlvbiBjYWxsCiAgICAgIHJldHVybiB0aGlzLmZuICsgJygnICsgdGhpcy5hcmdzLmpvaW4oJywgJykgKyAnKSc7CiAgICB9CiAgfTsKICAvKioKICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlCiAgICogQHJldHVybnMge09iamVjdH0KICAgKi8KCgogIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHsKICAgICAgbWF0aGpzOiAnT3BlcmF0b3JOb2RlJywKICAgICAgb3A6IHRoaXMub3AsCiAgICAgIGZuOiB0aGlzLmZuLAogICAgICBhcmdzOiB0aGlzLmFyZ3MsCiAgICAgIGltcGxpY2l0OiB0aGlzLmltcGxpY2l0CiAgICB9OwogIH07CiAgLyoqCiAgICogSW5zdGFudGlhdGUgYW4gT3BlcmF0b3JOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb24KICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZQogICAqICAgICAgICAgICAgICAgICAgICAgICBgeyJtYXRoanMiOiAiT3BlcmF0b3JOb2RlIiwgIm9wIjogIisiLCAiZm4iOiAiYWRkIiwgImFyZ3MiOiBbLi4uXSwgImltcGxpY2l0IjogZmFsc2V9YCwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsCiAgICogQHJldHVybnMge09wZXJhdG9yTm9kZX0KICAgKi8KCgogIE9wZXJhdG9yTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7CiAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShqc29uLm9wLCBqc29uLmZuLCBqc29uLmFyZ3MsIGpzb24uaW1wbGljaXQpOwogIH07CiAgLyoqCiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb24uCiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0cgogICAqLwoKCiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJzsKICAgIHZhciBpbXBsaWNpdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5pbXBsaWNpdCA/IG9wdGlvbnMuaW1wbGljaXQgOiAnaGlkZSc7CiAgICB2YXIgYXJncyA9IHRoaXMuYXJnczsKICAgIHZhciBwYXJlbnMgPSBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyh0aGlzLCBwYXJlbnRoZXNpcywgaW1wbGljaXQsIGFyZ3MsIGZhbHNlKTsKCiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHsKICAgICAgLy8gdW5hcnkgb3BlcmF0b3JzCiAgICAgIHZhciBhc3NvYyA9IGdldEFzc29jaWF0aXZpdHkodGhpcywgcGFyZW50aGVzaXMpOwogICAgICB2YXIgb3BlcmFuZCA9IGFyZ3NbMF0udG9IVE1MKG9wdGlvbnMpOwoKICAgICAgaWYgKHBhcmVuc1swXSkgewogICAgICAgIG9wZXJhbmQgPSAnPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KDwvc3Bhbj4nICsgb3BlcmFuZCArICc8c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzIj4pPC9zcGFuPic7CiAgICAgIH0KCiAgICAgIGlmIChhc3NvYyA9PT0gJ3JpZ2h0JykgewogICAgICAgIC8vIHByZWZpeCBvcGVyYXRvcgogICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9Im1hdGgtb3BlcmF0b3IgbWF0aC11bmFyeS1vcGVyYXRvciBtYXRoLWxlZnRoYW5kLXVuYXJ5LW9wZXJhdG9yIj4nICsgT2JqZWN0KHV0aWxzX3N0cmluZ1siYyIgLyogZXNjYXBlICovXSkodGhpcy5vcCkgKyAnPC9zcGFuPicgKyBvcGVyYW5kOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIHBvc3RmaXggd2hlbiBhc3NvYyA9PT0gJ2xlZnQnIG9yIHVuZGVmaW5lZAogICAgICAgIHJldHVybiBvcGVyYW5kICsgJzxzcGFuIGNsYXNzPSJtYXRoLW9wZXJhdG9yIG1hdGgtdW5hcnktb3BlcmF0b3IgbWF0aC1yaWdodGhhbmQtdW5hcnktb3BlcmF0b3IiPicgKyBPYmplY3QodXRpbHNfc3RyaW5nWyJjIiAvKiBlc2NhcGUgKi9dKSh0aGlzLm9wKSArICc8L3NwYW4+JzsKICAgICAgfQogICAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMikgewogICAgICAvLyBiaW5hcnkgb3BlcmF0b2VzCiAgICAgIHZhciBsaHMgPSBhcmdzWzBdLnRvSFRNTChvcHRpb25zKTsgLy8gbGVmdCBoYW5kIHNpZGUKCiAgICAgIHZhciByaHMgPSBhcmdzWzFdLnRvSFRNTChvcHRpb25zKTsgLy8gcmlnaHQgaGFuZCBzaWRlCgogICAgICBpZiAocGFyZW5zWzBdKSB7CiAgICAgICAgLy8gbGVmdCBoYW5kIHNpZGUgaW4gcGFyZW50aGVzaXM/CiAgICAgICAgbGhzID0gJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPig8L3NwYW4+JyArIGxocyArICc8c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzIj4pPC9zcGFuPic7CiAgICAgIH0KCiAgICAgIGlmIChwYXJlbnNbMV0pIHsKICAgICAgICAvLyByaWdodCBoYW5kIHNpZGUgaW4gcGFyZW50aGVzaXM/CiAgICAgICAgcmhzID0gJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPig8L3NwYW4+JyArIHJocyArICc8c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzIj4pPC9zcGFuPic7CiAgICAgIH0KCiAgICAgIGlmICh0aGlzLmltcGxpY2l0ICYmIHRoaXMuZ2V0SWRlbnRpZmllcigpID09PSAnT3BlcmF0b3JOb2RlOm11bHRpcGx5JyAmJiBpbXBsaWNpdCA9PT0gJ2hpZGUnKSB7CiAgICAgICAgcmV0dXJuIGxocyArICc8c3BhbiBjbGFzcz0ibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWltcGxpY2l0LWJpbmFyeS1vcGVyYXRvciI+PC9zcGFuPicgKyByaHM7CiAgICAgIH0KCiAgICAgIHJldHVybiBsaHMgKyAnPHNwYW4gY2xhc3M9Im1hdGgtb3BlcmF0b3IgbWF0aC1iaW5hcnktb3BlcmF0b3IgbWF0aC1leHBsaWNpdC1iaW5hcnktb3BlcmF0b3IiPicgKyBPYmplY3QodXRpbHNfc3RyaW5nWyJjIiAvKiBlc2NhcGUgKi9dKSh0aGlzLm9wKSArICc8L3NwYW4+JyArIHJoczsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBzdHJpbmdpZmllZEFyZ3MgPSBhcmdzLm1hcChmdW5jdGlvbiAoYXJnLCBpbmRleCkgewogICAgICAgIGFyZyA9IGFyZy50b0hUTUwob3B0aW9ucyk7CgogICAgICAgIGlmIChwYXJlbnNbaW5kZXhdKSB7CiAgICAgICAgICAvLyBwdXQgaW4gcGFyZW50aGVzaXM/CiAgICAgICAgICBhcmcgPSAnPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KDwvc3Bhbj4nICsgYXJnICsgJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPik8L3NwYW4+JzsKICAgICAgICB9CgogICAgICAgIHJldHVybiBhcmc7CiAgICAgIH0pOwoKICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMiAmJiAodGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6YWRkJyB8fCB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScpKSB7CiAgICAgICAgaWYgKHRoaXMuaW1wbGljaXQgJiYgdGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknICYmIGltcGxpY2l0ID09PSAnaGlkZScpIHsKICAgICAgICAgIHJldHVybiBzdHJpbmdpZmllZEFyZ3Muam9pbignPHNwYW4gY2xhc3M9Im1hdGgtb3BlcmF0b3IgbWF0aC1iaW5hcnktb3BlcmF0b3IgbWF0aC1pbXBsaWNpdC1iaW5hcnktb3BlcmF0b3IiPjwvc3Bhbj4nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzdHJpbmdpZmllZEFyZ3Muam9pbignPHNwYW4gY2xhc3M9Im1hdGgtb3BlcmF0b3IgbWF0aC1iaW5hcnktb3BlcmF0b3IgbWF0aC1leHBsaWNpdC1iaW5hcnktb3BlcmF0b3IiPicgKyBPYmplY3QodXRpbHNfc3RyaW5nWyJjIiAvKiBlc2NhcGUgKi9dKSh0aGlzLm9wKSArICc8L3NwYW4+Jyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gZmFsbGJhY2sgdG8gZm9ybWF0dGluZyBhcyBhIGZ1bmN0aW9uIGNhbGwKICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPSJtYXRoLWZ1bmN0aW9uIj4nICsgT2JqZWN0KHV0aWxzX3N0cmluZ1siYyIgLyogZXNjYXBlICovXSkodGhpcy5mbikgKyAnPC9zcGFuPjxzcGFuIGNsYXNzPSJtYXRoLXBhcmFudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPig8L3NwYW4+JyArIHN0cmluZ2lmaWVkQXJncy5qb2luKCc8c3BhbiBjbGFzcz0ibWF0aC1zZXBhcmF0b3IiPiw8L3NwYW4+JykgKyAnPHNwYW4gY2xhc3M9Im1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KTwvc3Bhbj4nOwogICAgICB9CiAgICB9CiAgfTsKICAvKioKICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb24KICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwogICAqIEByZXR1cm4ge3N0cmluZ30gc3RyCiAgICovCgoKICBPcGVyYXRvck5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnOwogICAgdmFyIGltcGxpY2l0ID0gb3B0aW9ucyAmJiBvcHRpb25zLmltcGxpY2l0ID8gb3B0aW9ucy5pbXBsaWNpdCA6ICdoaWRlJzsKICAgIHZhciBhcmdzID0gdGhpcy5hcmdzOwogICAgdmFyIHBhcmVucyA9IGNhbGN1bGF0ZU5lY2Vzc2FyeVBhcmVudGhlc2VzKHRoaXMsIHBhcmVudGhlc2lzLCBpbXBsaWNpdCwgYXJncywgdHJ1ZSk7CiAgICB2YXIgb3AgPSBsYXRleE9wZXJhdG9yc1t0aGlzLmZuXTsKICAgIG9wID0gdHlwZW9mIG9wID09PSAndW5kZWZpbmVkJyA/IHRoaXMub3AgOiBvcDsgLy8gZmFsbCBiYWNrIHRvIHVzaW5nIHRoaXMub3AKCiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHsKICAgICAgLy8gdW5hcnkgb3BlcmF0b3JzCiAgICAgIHZhciBhc3NvYyA9IGdldEFzc29jaWF0aXZpdHkodGhpcywgcGFyZW50aGVzaXMpOwogICAgICB2YXIgb3BlcmFuZCA9IGFyZ3NbMF0udG9UZXgob3B0aW9ucyk7CgogICAgICBpZiAocGFyZW5zWzBdKSB7CiAgICAgICAgb3BlcmFuZCA9ICJcXGxlZnQoIi5jb25jYXQob3BlcmFuZCwgIlxccmlnaHQpIik7CiAgICAgIH0KCiAgICAgIGlmIChhc3NvYyA9PT0gJ3JpZ2h0JykgewogICAgICAgIC8vIHByZWZpeCBvcGVyYXRvcgogICAgICAgIHJldHVybiBvcCArIG9wZXJhbmQ7CiAgICAgIH0gZWxzZSBpZiAoYXNzb2MgPT09ICdsZWZ0JykgewogICAgICAgIC8vIHBvc3RmaXggb3BlcmF0b3IKICAgICAgICByZXR1cm4gb3BlcmFuZCArIG9wOwogICAgICB9IC8vIGZhbGwgYmFjayB0byBwb3N0Zml4CgoKICAgICAgcmV0dXJuIG9wZXJhbmQgKyBvcDsKICAgIH0gZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDIpIHsKICAgICAgLy8gYmluYXJ5IG9wZXJhdG9ycwogICAgICB2YXIgbGhzID0gYXJnc1swXTsgLy8gbGVmdCBoYW5kIHNpZGUKCiAgICAgIHZhciBsaHNUZXggPSBsaHMudG9UZXgob3B0aW9ucyk7CgogICAgICBpZiAocGFyZW5zWzBdKSB7CiAgICAgICAgbGhzVGV4ID0gIlxcbGVmdCgiLmNvbmNhdChsaHNUZXgsICJcXHJpZ2h0KSIpOwogICAgICB9CgogICAgICB2YXIgcmhzID0gYXJnc1sxXTsgLy8gcmlnaHQgaGFuZCBzaWRlCgogICAgICB2YXIgcmhzVGV4ID0gcmhzLnRvVGV4KG9wdGlvbnMpOwoKICAgICAgaWYgKHBhcmVuc1sxXSkgewogICAgICAgIHJoc1RleCA9ICJcXGxlZnQoIi5jb25jYXQocmhzVGV4LCAiXFxyaWdodCkiKTsKICAgICAgfSAvLyBoYW5kbGUgc29tZSBleGNlcHRpb25zIChkdWUgdG8gdGhlIHdheSBMYVRlWCB3b3JrcykKCgogICAgICB2YXIgbGhzSWRlbnRpZmllcjsKCiAgICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2tlZXAnKSB7CiAgICAgICAgbGhzSWRlbnRpZmllciA9IGxocy5nZXRJZGVudGlmaWVyKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gSWdub3JlIFBhcmVudGhlc2lzTm9kZXMgaWYgaW4gJ2tlZXAnIG1vZGUKICAgICAgICBsaHNJZGVudGlmaWVyID0gbGhzLmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCk7CiAgICAgIH0KCiAgICAgIHN3aXRjaCAodGhpcy5nZXRJZGVudGlmaWVyKCkpIHsKICAgICAgICBjYXNlICdPcGVyYXRvck5vZGU6ZGl2aWRlJzoKICAgICAgICAgIC8vIG9wIGNvbnRhaW5zICdcXGZyYWMnIGF0IHRoaXMgcG9pbnQKICAgICAgICAgIHJldHVybiBvcCArICd7JyArIGxoc1RleCArICd9JyArICd7JyArIHJoc1RleCArICd9JzsKCiAgICAgICAgY2FzZSAnT3BlcmF0b3JOb2RlOnBvdyc6CiAgICAgICAgICBsaHNUZXggPSAneycgKyBsaHNUZXggKyAnfSc7CiAgICAgICAgICByaHNUZXggPSAneycgKyByaHNUZXggKyAnfSc7CgogICAgICAgICAgc3dpdGNoIChsaHNJZGVudGlmaWVyKSB7CiAgICAgICAgICAgIGNhc2UgJ0NvbmRpdGlvbmFsTm9kZSc6IC8vCgogICAgICAgICAgICBjYXNlICdPcGVyYXRvck5vZGU6ZGl2aWRlJzoKICAgICAgICAgICAgICBsaHNUZXggPSAiXFxsZWZ0KCIuY29uY2F0KGxoc1RleCwgIlxccmlnaHQpIik7CiAgICAgICAgICB9CgogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ09wZXJhdG9yTm9kZTptdWx0aXBseSc6CiAgICAgICAgICBpZiAodGhpcy5pbXBsaWNpdCAmJiBpbXBsaWNpdCA9PT0gJ2hpZGUnKSB7CiAgICAgICAgICAgIHJldHVybiBsaHNUZXggKyAnficgKyByaHNUZXg7CiAgICAgICAgICB9CgogICAgICB9CgogICAgICByZXR1cm4gbGhzVGV4ICsgb3AgKyByaHNUZXg7CiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID4gMiAmJiAodGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6YWRkJyB8fCB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScpKSB7CiAgICAgIHZhciB0ZXhpZmllZEFyZ3MgPSBhcmdzLm1hcChmdW5jdGlvbiAoYXJnLCBpbmRleCkgewogICAgICAgIGFyZyA9IGFyZy50b1RleChvcHRpb25zKTsKCiAgICAgICAgaWYgKHBhcmVuc1tpbmRleF0pIHsKICAgICAgICAgIGFyZyA9ICJcXGxlZnQoIi5jb25jYXQoYXJnLCAiXFxyaWdodCkiKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBhcmc7CiAgICAgIH0pOwoKICAgICAgaWYgKHRoaXMuZ2V0SWRlbnRpZmllcigpID09PSAnT3BlcmF0b3JOb2RlOm11bHRpcGx5JyAmJiB0aGlzLmltcGxpY2l0KSB7CiAgICAgICAgcmV0dXJuIHRleGlmaWVkQXJncy5qb2luKCd+Jyk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0ZXhpZmllZEFyZ3Muam9pbihvcCk7CiAgICB9IGVsc2UgewogICAgICAvLyBmYWxsIGJhY2sgdG8gZm9ybWF0dGluZyBhcyBhIGZ1bmN0aW9uIGNhbGwKICAgICAgLy8gYXMgdGhpcyBpcyBhIGZhbGxiYWNrLCBpdCBkb2Vzbid0IHVzZQogICAgICAvLyBmYW5jeSBmdW5jdGlvbiBuYW1lcwogICAgICByZXR1cm4gJ1xcbWF0aHJteycgKyB0aGlzLmZuICsgJ31cXGxlZnQoJyArIGFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHsKICAgICAgICByZXR1cm4gYXJnLnRvVGV4KG9wdGlvbnMpOwogICAgICB9KS5qb2luKCcsJykgKyAnXFxyaWdodCknOwogICAgfQogIH07CiAgLyoqCiAgICogR2V0IGlkZW50aWZpZXIuCiAgICogQHJldHVybiB7c3RyaW5nfQogICAqLwoKCiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5nZXRJZGVudGlmaWVyID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHRoaXMudHlwZSArICc6JyArIHRoaXMuZm47CiAgfTsKCiAgcmV0dXJuIE9wZXJhdG9yTm9kZTsKfSwgewogIGlzQ2xhc3M6IHRydWUsCiAgaXNOb2RlOiB0cnVlCn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL25vZGUvUGFyZW50aGVzaXNOb2RlLmpzCgoKdmFyIFBhcmVudGhlc2lzTm9kZV9uYW1lID0gJ1BhcmVudGhlc2lzTm9kZSc7CnZhciBQYXJlbnRoZXNpc05vZGVfZGVwZW5kZW5jaWVzID0gWydOb2RlJ107CnZhciBjcmVhdGVQYXJlbnRoZXNpc05vZGUgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShQYXJlbnRoZXNpc05vZGVfbmFtZSwgUGFyZW50aGVzaXNOb2RlX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgTm9kZSA9IF9yZWYuTm9kZTsKCiAgLyoqCiAgICogQGNvbnN0cnVjdG9yIFBhcmVudGhlc2lzTm9kZQogICAqIEBleHRlbmRzIHtOb2RlfQogICAqIEEgcGFyZW50aGVzaXMgbm9kZSBkZXNjcmliZXMgbWFudWFsIHBhcmVudGhlc2lzIGZyb20gdGhlIHVzZXIgaW5wdXQKICAgKiBAcGFyYW0ge05vZGV9IGNvbnRlbnQKICAgKiBAZXh0ZW5kcyB7Tm9kZX0KICAgKi8KICBmdW5jdGlvbiBQYXJlbnRoZXNpc05vZGUoY29udGVudCkgewogICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFBhcmVudGhlc2lzTm9kZSkpIHsKICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTsKICAgIH0gLy8gdmFsaWRhdGUgaW5wdXQKCgogICAgaWYgKCFPYmplY3QoaXNbInciIC8qIGlzTm9kZSAqL10pKGNvbnRlbnQpKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciAiY29udGVudCInKTsKICAgIH0KCiAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50OwogIH0KCiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7CiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS50eXBlID0gJ1BhcmVudGhlc2lzTm9kZSc7CiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS5pc1BhcmVudGhlc2lzTm9kZSA9IHRydWU7CiAgLyoqCiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uCiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlbgogICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLgogICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLgogICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnMKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHMKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuCiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6CiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopCiAgICovCgogIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHsKICAgIHJldHVybiB0aGlzLmNvbnRlbnQuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpOwogIH07CiAgLyoqCiAgICogR2V0IHRoZSBjb250ZW50IG9mIHRoZSBjdXJyZW50IE5vZGUuCiAgICogQHJldHVybiB7Tm9kZX0gY29udGVudAogICAqIEBvdmVycmlkZQogICAqKi8KCgogIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUuZ2V0Q29udGVudCA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB0aGlzLmNvbnRlbnQuZ2V0Q29udGVudCgpOwogIH07CiAgLyoqCiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGUKICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrCiAgICovCgoKICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgIGNhbGxiYWNrKHRoaXMuY29udGVudCwgJ2NvbnRlbnQnLCB0aGlzKTsKICB9OwogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBQYXJlbnRoZXNpc05vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmcKICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS4KICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSkgOiBOb2RlfSBjYWxsYmFjawogICAqIEByZXR1cm5zIHtQYXJlbnRoZXNpc05vZGV9IFJldHVybnMgYSBjbG9uZSBvZiB0aGUgbm9kZQogICAqLwoKCiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgIHZhciBjb250ZW50ID0gY2FsbGJhY2sodGhpcy5jb250ZW50LCAnY29udGVudCcsIHRoaXMpOwogICAgcmV0dXJuIG5ldyBQYXJlbnRoZXNpc05vZGUoY29udGVudCk7CiAgfTsKICAvKioKICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5CiAgICogQHJldHVybiB7UGFyZW50aGVzaXNOb2RlfQogICAqLwoKCiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiBuZXcgUGFyZW50aGVzaXNOb2RlKHRoaXMuY29udGVudCk7CiAgfTsKICAvKioKICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0cgogICAqIEBvdmVycmlkZQogICAqLwoKCiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMgJiYgIW9wdGlvbnMucGFyZW50aGVzaXMgfHwgb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID09PSAna2VlcCcpIHsKICAgICAgcmV0dXJuICcoJyArIHRoaXMuY29udGVudC50b1N0cmluZyhvcHRpb25zKSArICcpJzsKICAgIH0KCiAgICByZXR1cm4gdGhpcy5jb250ZW50LnRvU3RyaW5nKG9wdGlvbnMpOwogIH07CiAgLyoqCiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZQogICAqIEByZXR1cm5zIHtPYmplY3R9CiAgICovCgoKICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB7CiAgICAgIG1hdGhqczogJ1BhcmVudGhlc2lzTm9kZScsCiAgICAgIGNvbnRlbnQ6IHRoaXMuY29udGVudAogICAgfTsKICB9OwogIC8qKgogICAqIEluc3RhbnRpYXRlIGFuIFBhcmVudGhlc2lzTm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2UKICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHsibWF0aGpzIjogIlBhcmVudGhlc2lzTm9kZSIsICJjb250ZW50IjogLi4ufWAsCiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbAogICAqIEByZXR1cm5zIHtQYXJlbnRoZXNpc05vZGV9CiAgICovCgoKICBQYXJlbnRoZXNpc05vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikgewogICAgcmV0dXJuIG5ldyBQYXJlbnRoZXNpc05vZGUoanNvbi5jb250ZW50KTsKICB9OwogIC8qKgogICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0cgogICAqIEBvdmVycmlkZQogICAqLwoKCiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMgJiYgIW9wdGlvbnMucGFyZW50aGVzaXMgfHwgb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID09PSAna2VlcCcpIHsKICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzIj4oPC9zcGFuPicgKyB0aGlzLmNvbnRlbnQudG9IVE1MKG9wdGlvbnMpICsgJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPik8L3NwYW4+JzsKICAgIH0KCiAgICByZXR1cm4gdGhpcy5jb250ZW50LnRvSFRNTChvcHRpb25zKTsKICB9OwogIC8qKgogICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvbgogICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICogQHJldHVybiB7c3RyaW5nfSBzdHIKICAgKiBAb3ZlcnJpZGUKICAgKi8KCgogIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zICYmICFvcHRpb25zLnBhcmVudGhlc2lzIHx8IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA9PT0gJ2tlZXAnKSB7CiAgICAgIHJldHVybiAiXFxsZWZ0KCIuY29uY2F0KHRoaXMuY29udGVudC50b1RleChvcHRpb25zKSwgIlxccmlnaHQpIik7CiAgICB9CgogICAgcmV0dXJuIHRoaXMuY29udGVudC50b1RleChvcHRpb25zKTsKICB9OwoKICByZXR1cm4gUGFyZW50aGVzaXNOb2RlOwp9LCB7CiAgaXNDbGFzczogdHJ1ZSwKICBpc05vZGU6IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vbm9kZS9SYW5nZU5vZGUuanMKCgoKdmFyIFJhbmdlTm9kZV9uYW1lID0gJ1JhbmdlTm9kZSc7CnZhciBSYW5nZU5vZGVfZGVwZW5kZW5jaWVzID0gWydOb2RlJ107CnZhciBjcmVhdGVSYW5nZU5vZGUgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShSYW5nZU5vZGVfbmFtZSwgUmFuZ2VOb2RlX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgTm9kZSA9IF9yZWYuTm9kZTsKCiAgLyoqCiAgICogQGNvbnN0cnVjdG9yIFJhbmdlTm9kZQogICAqIEBleHRlbmRzIHtOb2RlfQogICAqIGNyZWF0ZSBhIHJhbmdlCiAgICogQHBhcmFtIHtOb2RlfSBzdGFydCAgaW5jbHVkZWQgbG93ZXItYm91bmQKICAgKiBAcGFyYW0ge05vZGV9IGVuZCAgICBpbmNsdWRlZCB1cHBlci1ib3VuZAogICAqIEBwYXJhbSB7Tm9kZX0gW3N0ZXBdIG9wdGlvbmFsIHN0ZXAKICAgKi8KICBmdW5jdGlvbiBSYW5nZU5vZGUoc3RhcnQsIGVuZCwgc3RlcCkgewogICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJhbmdlTm9kZSkpIHsKICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTsKICAgIH0gLy8gdmFsaWRhdGUgaW5wdXRzCgoKICAgIGlmICghT2JqZWN0KGlzWyJ3IiAvKiBpc05vZGUgKi9dKShzdGFydCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQnKTsKICAgIGlmICghT2JqZWN0KGlzWyJ3IiAvKiBpc05vZGUgKi9dKShlbmQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkJyk7CiAgICBpZiAoc3RlcCAmJiAhT2JqZWN0KGlzWyJ3IiAvKiBpc05vZGUgKi9dKShzdGVwKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignTm9kZSBleHBlY3RlZCcpOwogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAzKSB0aHJvdyBuZXcgRXJyb3IoJ1RvbyBtYW55IGFyZ3VtZW50cycpOwogICAgdGhpcy5zdGFydCA9IHN0YXJ0OyAvLyBpbmNsdWRlZCBsb3dlci1ib3VuZAoKICAgIHRoaXMuZW5kID0gZW5kOyAvLyBpbmNsdWRlZCB1cHBlci1ib3VuZAoKICAgIHRoaXMuc3RlcCA9IHN0ZXAgfHwgbnVsbDsgLy8gb3B0aW9uYWwgc3RlcAogIH0KCiAgUmFuZ2VOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7CiAgUmFuZ2VOb2RlLnByb3RvdHlwZS50eXBlID0gJ1JhbmdlTm9kZSc7CiAgUmFuZ2VOb2RlLnByb3RvdHlwZS5pc1JhbmdlTm9kZSA9IHRydWU7CiAgLyoqCiAgICogQ2hlY2sgd2hldGhlciB0aGUgUmFuZ2VOb2RlIG5lZWRzIHRoZSBgZW5kYCBzeW1ib2wgdG8gYmUgZGVmaW5lZC4KICAgKiBUaGlzIGVuZCBpcyB0aGUgc2l6ZSBvZiB0aGUgTWF0cml4IGluIGN1cnJlbnQgZGltZW5zaW9uLgogICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICovCgogIFJhbmdlTm9kZS5wcm90b3R5cGUubmVlZHNFbmQgPSBmdW5jdGlvbiAoKSB7CiAgICAvLyBmaW5kIGFsbCBgZW5kYCBzeW1ib2xzIGluIHRoaXMgUmFuZ2VOb2RlCiAgICB2YXIgZW5kU3ltYm9scyA9IHRoaXMuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7CiAgICAgIHJldHVybiBPYmplY3QoaXNbIkoiIC8qIGlzU3ltYm9sTm9kZSAqL10pKG5vZGUpICYmIG5vZGUubmFtZSA9PT0gJ2VuZCc7CiAgICB9KTsKICAgIHJldHVybiBlbmRTeW1ib2xzLmxlbmd0aCA+IDA7CiAgfTsKICAvKioKICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi4KICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuCiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuCiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuCiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9ucwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9scwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS4KICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZToKICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKikKICAgKi8KCgogIFJhbmdlTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHsKICAgIHZhciByYW5nZSA9IG1hdGgucmFuZ2U7CgogICAgdmFyIGV2YWxTdGFydCA9IHRoaXMuc3RhcnQuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpOwoKICAgIHZhciBldmFsRW5kID0gdGhpcy5lbmQuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpOwoKICAgIGlmICh0aGlzLnN0ZXApIHsKICAgICAgdmFyIGV2YWxTdGVwID0gdGhpcy5zdGVwLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTsKCiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsUmFuZ2VOb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7CiAgICAgICAgcmV0dXJuIHJhbmdlKGV2YWxTdGFydChzY29wZSwgYXJncywgY29udGV4dCksIGV2YWxFbmQoc2NvcGUsIGFyZ3MsIGNvbnRleHQpLCBldmFsU3RlcChzY29wZSwgYXJncywgY29udGV4dCkpOwogICAgICB9OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxSYW5nZU5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHsKICAgICAgICByZXR1cm4gcmFuZ2UoZXZhbFN0YXJ0KHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEVuZChzY29wZSwgYXJncywgY29udGV4dCkpOwogICAgICB9OwogICAgfQogIH07CiAgLyoqCiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGUKICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrCiAgICovCgoKICBSYW5nZU5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgIGNhbGxiYWNrKHRoaXMuc3RhcnQsICdzdGFydCcsIHRoaXMpOwogICAgY2FsbGJhY2sodGhpcy5lbmQsICdlbmQnLCB0aGlzKTsKCiAgICBpZiAodGhpcy5zdGVwKSB7CiAgICAgIGNhbGxiYWNrKHRoaXMuc3RlcCwgJ3N0ZXAnLCB0aGlzKTsKICAgIH0KICB9OwogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBSYW5nZU5vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmcKICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS4KICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrCiAgICogQHJldHVybnMge1JhbmdlTm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGUKICAgKi8KCgogIFJhbmdlTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICByZXR1cm4gbmV3IFJhbmdlTm9kZSh0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5zdGFydCwgJ3N0YXJ0JywgdGhpcykpLCB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5lbmQsICdlbmQnLCB0aGlzKSksIHRoaXMuc3RlcCAmJiB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5zdGVwLCAnc3RlcCcsIHRoaXMpKSk7CiAgfTsKICAvKioKICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5CiAgICogQHJldHVybiB7UmFuZ2VOb2RlfQogICAqLwoKCiAgUmFuZ2VOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiBuZXcgUmFuZ2VOb2RlKHRoaXMuc3RhcnQsIHRoaXMuZW5kLCB0aGlzLnN0ZXAgJiYgdGhpcy5zdGVwKTsKICB9OwogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgbmVjZXNzYXJ5IHBhcmVudGhlc2VzCiAgICogQHBhcmFtIHtOb2RlfSBub2RlCiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudGhlc2lzCiAgICogQHJldHVybiB7T2JqZWN0fSBwYXJlbnRoZXNlcwogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyhub2RlLCBwYXJlbnRoZXNpcykgewogICAgdmFyIHByZWNlZGVuY2UgPSBnZXRQcmVjZWRlbmNlKG5vZGUsIHBhcmVudGhlc2lzKTsKICAgIHZhciBwYXJlbnMgPSB7fTsKICAgIHZhciBzdGFydFByZWNlZGVuY2UgPSBnZXRQcmVjZWRlbmNlKG5vZGUuc3RhcnQsIHBhcmVudGhlc2lzKTsKICAgIHBhcmVucy5zdGFydCA9IHN0YXJ0UHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBzdGFydFByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZSB8fCBwYXJlbnRoZXNpcyA9PT0gJ2FsbCc7CgogICAgaWYgKG5vZGUuc3RlcCkgewogICAgICB2YXIgc3RlcFByZWNlZGVuY2UgPSBnZXRQcmVjZWRlbmNlKG5vZGUuc3RlcCwgcGFyZW50aGVzaXMpOwogICAgICBwYXJlbnMuc3RlcCA9IHN0ZXBQcmVjZWRlbmNlICE9PSBudWxsICYmIHN0ZXBQcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UgfHwgcGFyZW50aGVzaXMgPT09ICdhbGwnOwogICAgfQoKICAgIHZhciBlbmRQcmVjZWRlbmNlID0gZ2V0UHJlY2VkZW5jZShub2RlLmVuZCwgcGFyZW50aGVzaXMpOwogICAgcGFyZW5zLmVuZCA9IGVuZFByZWNlZGVuY2UgIT09IG51bGwgJiYgZW5kUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlIHx8IHBhcmVudGhlc2lzID09PSAnYWxsJzsKICAgIHJldHVybiBwYXJlbnM7CiAgfQogIC8qKgogICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24KICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwogICAqIEByZXR1cm4ge3N0cmluZ30gc3RyCiAgICovCgoKICBSYW5nZU5vZGUucHJvdG90eXBlLl90b1N0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnOwogICAgdmFyIHBhcmVucyA9IGNhbGN1bGF0ZU5lY2Vzc2FyeVBhcmVudGhlc2VzKHRoaXMsIHBhcmVudGhlc2lzKTsgLy8gZm9ybWF0IHN0cmluZyBhcyBzdGFydDpzdGVwOnN0b3AKCiAgICB2YXIgc3RyOwogICAgdmFyIHN0YXJ0ID0gdGhpcy5zdGFydC50b1N0cmluZyhvcHRpb25zKTsKCiAgICBpZiAocGFyZW5zLnN0YXJ0KSB7CiAgICAgIHN0YXJ0ID0gJygnICsgc3RhcnQgKyAnKSc7CiAgICB9CgogICAgc3RyID0gc3RhcnQ7CgogICAgaWYgKHRoaXMuc3RlcCkgewogICAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcC50b1N0cmluZyhvcHRpb25zKTsKCiAgICAgIGlmIChwYXJlbnMuc3RlcCkgewogICAgICAgIHN0ZXAgPSAnKCcgKyBzdGVwICsgJyknOwogICAgICB9CgogICAgICBzdHIgKz0gJzonICsgc3RlcDsKICAgIH0KCiAgICB2YXIgZW5kID0gdGhpcy5lbmQudG9TdHJpbmcob3B0aW9ucyk7CgogICAgaWYgKHBhcmVucy5lbmQpIHsKICAgICAgZW5kID0gJygnICsgZW5kICsgJyknOwogICAgfQoKICAgIHN0ciArPSAnOicgKyBlbmQ7CiAgICByZXR1cm4gc3RyOwogIH07CiAgLyoqCiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZQogICAqIEByZXR1cm5zIHtPYmplY3R9CiAgICovCgoKICBSYW5nZU5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB7CiAgICAgIG1hdGhqczogJ1JhbmdlTm9kZScsCiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LAogICAgICBlbmQ6IHRoaXMuZW5kLAogICAgICBzdGVwOiB0aGlzLnN0ZXAKICAgIH07CiAgfTsKICAvKioKICAgKiBJbnN0YW50aWF0ZSBhbiBSYW5nZU5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvbgogICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlCiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7Im1hdGhqcyI6ICJSYW5nZU5vZGUiLCAic3RhcnQiOiAuLi4sICJlbmQiOiAuLi4sICJzdGVwIjogLi4ufWAsCiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbAogICAqIEByZXR1cm5zIHtSYW5nZU5vZGV9CiAgICovCgoKICBSYW5nZU5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikgewogICAgcmV0dXJuIG5ldyBSYW5nZU5vZGUoanNvbi5zdGFydCwganNvbi5lbmQsIGpzb24uc3RlcCk7CiAgfTsKICAvKioKICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvbgogICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICogQHJldHVybiB7c3RyaW5nfSBzdHIKICAgKi8KCgogIFJhbmdlTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7CiAgICB2YXIgcGFyZW5zID0gY2FsY3VsYXRlTmVjZXNzYXJ5UGFyZW50aGVzZXModGhpcywgcGFyZW50aGVzaXMpOyAvLyBmb3JtYXQgc3RyaW5nIGFzIHN0YXJ0OnN0ZXA6c3RvcAoKICAgIHZhciBzdHI7CiAgICB2YXIgc3RhcnQgPSB0aGlzLnN0YXJ0LnRvSFRNTChvcHRpb25zKTsKCiAgICBpZiAocGFyZW5zLnN0YXJ0KSB7CiAgICAgIHN0YXJ0ID0gJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPig8L3NwYW4+JyArIHN0YXJ0ICsgJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPik8L3NwYW4+JzsKICAgIH0KCiAgICBzdHIgPSBzdGFydDsKCiAgICBpZiAodGhpcy5zdGVwKSB7CiAgICAgIHZhciBzdGVwID0gdGhpcy5zdGVwLnRvSFRNTChvcHRpb25zKTsKCiAgICAgIGlmIChwYXJlbnMuc3RlcCkgewogICAgICAgIHN0ZXAgPSAnPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KDwvc3Bhbj4nICsgc3RlcCArICc8c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzIj4pPC9zcGFuPic7CiAgICAgIH0KCiAgICAgIHN0ciArPSAnPHNwYW4gY2xhc3M9Im1hdGgtb3BlcmF0b3IgbWF0aC1yYW5nZS1vcGVyYXRvciI+Ojwvc3Bhbj4nICsgc3RlcDsKICAgIH0KCiAgICB2YXIgZW5kID0gdGhpcy5lbmQudG9IVE1MKG9wdGlvbnMpOwoKICAgIGlmIChwYXJlbnMuZW5kKSB7CiAgICAgIGVuZCA9ICc8c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzIj4oPC9zcGFuPicgKyBlbmQgKyAnPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KTwvc3Bhbj4nOwogICAgfQoKICAgIHN0ciArPSAnPHNwYW4gY2xhc3M9Im1hdGgtb3BlcmF0b3IgbWF0aC1yYW5nZS1vcGVyYXRvciI+Ojwvc3Bhbj4nICsgZW5kOwogICAgcmV0dXJuIHN0cjsKICB9OwogIC8qKgogICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvbgogICAqIEBwYXJhbXMge09iamVjdH0gb3B0aW9ucwogICAqIEByZXR1cm4ge3N0cmluZ30gc3RyCiAgICovCgoKICBSYW5nZU5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnOwogICAgdmFyIHBhcmVucyA9IGNhbGN1bGF0ZU5lY2Vzc2FyeVBhcmVudGhlc2VzKHRoaXMsIHBhcmVudGhlc2lzKTsKICAgIHZhciBzdHIgPSB0aGlzLnN0YXJ0LnRvVGV4KG9wdGlvbnMpOwoKICAgIGlmIChwYXJlbnMuc3RhcnQpIHsKICAgICAgc3RyID0gIlxcbGVmdCgiLmNvbmNhdChzdHIsICJcXHJpZ2h0KSIpOwogICAgfQoKICAgIGlmICh0aGlzLnN0ZXApIHsKICAgICAgdmFyIHN0ZXAgPSB0aGlzLnN0ZXAudG9UZXgob3B0aW9ucyk7CgogICAgICBpZiAocGFyZW5zLnN0ZXApIHsKICAgICAgICBzdGVwID0gIlxcbGVmdCgiLmNvbmNhdChzdGVwLCAiXFxyaWdodCkiKTsKICAgICAgfQoKICAgICAgc3RyICs9ICc6JyArIHN0ZXA7CiAgICB9CgogICAgdmFyIGVuZCA9IHRoaXMuZW5kLnRvVGV4KG9wdGlvbnMpOwoKICAgIGlmIChwYXJlbnMuZW5kKSB7CiAgICAgIGVuZCA9ICJcXGxlZnQoIi5jb25jYXQoZW5kLCAiXFxyaWdodCkiKTsKICAgIH0KCiAgICBzdHIgKz0gJzonICsgZW5kOwogICAgcmV0dXJuIHN0cjsKICB9OwoKICByZXR1cm4gUmFuZ2VOb2RlOwp9LCB7CiAgaXNDbGFzczogdHJ1ZSwKICBpc05vZGU6IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vbm9kZS9SZWxhdGlvbmFsTm9kZS5qcwoKCgoKCnZhciBSZWxhdGlvbmFsTm9kZV9uYW1lID0gJ1JlbGF0aW9uYWxOb2RlJzsKdmFyIFJlbGF0aW9uYWxOb2RlX2RlcGVuZGVuY2llcyA9IFsnTm9kZSddOwp2YXIgY3JlYXRlUmVsYXRpb25hbE5vZGUgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShSZWxhdGlvbmFsTm9kZV9uYW1lLCBSZWxhdGlvbmFsTm9kZV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIE5vZGUgPSBfcmVmLk5vZGU7CgogIC8qKgogICAqIEEgbm9kZSByZXByZXNlbnRpbmcgYSBjaGFpbmVkIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24sIHN1Y2ggYXMgJ3ggPiB5ID4geicKICAgKgogICAqIEBwYXJhbSB7U3RyaW5nW119IGNvbmRpdGlvbmFscyAgIEFuIGFycmF5IG9mIGNvbmRpdGlvbmFsIG9wZXJhdG9ycyB1c2VkIHRvIGNvbXBhcmUgdGhlIHBhcmFtZXRlcnMKICAgKiBAcGFyYW0ge05vZGVbXX0gcGFyYW1zICAgVGhlIHBhcmFtZXRlcnMgdGhhdCB3aWxsIGJlIGNvbXBhcmVkCiAgICoKICAgKiBAY29uc3RydWN0b3IgUmVsYXRpb25hbE5vZGUKICAgKiBAZXh0ZW5kcyB7Tm9kZX0KICAgKi8KICBmdW5jdGlvbiBSZWxhdGlvbmFsTm9kZShjb25kaXRpb25hbHMsIHBhcmFtcykgewogICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlbGF0aW9uYWxOb2RlKSkgewogICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpOwogICAgfQoKICAgIGlmICghQXJyYXkuaXNBcnJheShjb25kaXRpb25hbHMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgY29uZGl0aW9uYWxzIG11c3QgYmUgYW4gYXJyYXknKTsKICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJhbXMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgcGFyYW1zIG11c3QgYmUgYW4gYXJyYXknKTsKICAgIGlmIChjb25kaXRpb25hbHMubGVuZ3RoICE9PSBwYXJhbXMubGVuZ3RoIC0gMSkgdGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIHBhcmFtcyBtdXN0IGNvbnRhaW4gZXhhY3RseSBvbmUgbW9yZSBlbGVtZW50IHRoYW4gcGFyYW1ldGVyIGNvbmRpdGlvbmFscycpOwogICAgdGhpcy5jb25kaXRpb25hbHMgPSBjb25kaXRpb25hbHM7CiAgICB0aGlzLnBhcmFtcyA9IHBhcmFtczsKICB9CgogIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7CiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlLnR5cGUgPSAnUmVsYXRpb25hbE5vZGUnOwogIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5pc1JlbGF0aW9uYWxOb2RlID0gdHJ1ZTsKICAvKioKICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi4KICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuCiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuCiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuCiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9ucwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9scwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS4KICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZToKICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKikKICAgKi8KCiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7CiAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICB2YXIgY29tcGlsZWQgPSB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKHApIHsKICAgICAgcmV0dXJuIHAuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpOwogICAgfSk7CiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbFJlbGF0aW9uYWxOb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7CiAgICAgIHZhciBldmFsTGhzOwogICAgICB2YXIgZXZhbFJocyA9IGNvbXBpbGVkWzBdKHNjb3BlLCBhcmdzLCBjb250ZXh0KTsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5jb25kaXRpb25hbHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBldmFsTGhzID0gZXZhbFJoczsKICAgICAgICBldmFsUmhzID0gY29tcGlsZWRbaSArIDFdKHNjb3BlLCBhcmdzLCBjb250ZXh0KTsKICAgICAgICB2YXIgY29uZEZuID0gZ2V0U2FmZVByb3BlcnR5KG1hdGgsIHNlbGYuY29uZGl0aW9uYWxzW2ldKTsKCiAgICAgICAgaWYgKCFjb25kRm4oZXZhbExocywgZXZhbFJocykpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiB0cnVlOwogICAgfTsKICB9OwogIC8qKgogICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlCiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFjawogICAqLwoKCiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgIHZhciBfdGhpcyA9IHRoaXM7CgogICAgdGhpcy5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbiAobiwgaSkgewogICAgICByZXR1cm4gY2FsbGJhY2sobiwgJ3BhcmFtc1snICsgaSArICddJywgX3RoaXMpOwogICAgfSwgdGhpcyk7CiAgfTsKICAvKioKICAgKiBDcmVhdGUgYSBuZXcgUmVsYXRpb25hbE5vZGUgaGF2aW5nIGl0cyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZwogICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLgogICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2sKICAgKiBAcmV0dXJucyB7UmVsYXRpb25hbE5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlCiAgICovCgoKICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICB2YXIgX3RoaXMyID0gdGhpczsKCiAgICByZXR1cm4gbmV3IFJlbGF0aW9uYWxOb2RlKHRoaXMuY29uZGl0aW9uYWxzLnNsaWNlKCksIHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbiAobiwgaSkgewogICAgICByZXR1cm4gX3RoaXMyLl9pZk5vZGUoY2FsbGJhY2sobiwgJ3BhcmFtc1snICsgaSArICddJywgX3RoaXMyKSk7CiAgICB9LCB0aGlzKSk7CiAgfTsKICAvKioKICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5CiAgICogQHJldHVybiB7UmVsYXRpb25hbE5vZGV9CiAgICovCgoKICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gbmV3IFJlbGF0aW9uYWxOb2RlKHRoaXMuY29uZGl0aW9uYWxzLCB0aGlzLnBhcmFtcyk7CiAgfTsKICAvKioKICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgogICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICogQHJldHVybiB7c3RyaW5nfSBzdHIKICAgKi8KCgogIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJzsKICAgIHZhciBwcmVjZWRlbmNlID0gZ2V0UHJlY2VkZW5jZSh0aGlzLCBwYXJlbnRoZXNpcyk7CiAgICB2YXIgcGFyYW1TdHJpbmdzID0gdGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uIChwLCBpbmRleCkgewogICAgICB2YXIgcGFyYW1QcmVjZWRlbmNlID0gZ2V0UHJlY2VkZW5jZShwLCBwYXJlbnRoZXNpcyk7CiAgICAgIHJldHVybiBwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgcGFyYW1QcmVjZWRlbmNlICE9PSBudWxsICYmIHBhcmFtUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlID8gJygnICsgcC50b1N0cmluZyhvcHRpb25zKSArICcpJyA6IHAudG9TdHJpbmcob3B0aW9ucyk7CiAgICB9KTsKICAgIHZhciBvcGVyYXRvck1hcCA9IHsKICAgICAgZXF1YWw6ICc9PScsCiAgICAgIHVuZXF1YWw6ICchPScsCiAgICAgIHNtYWxsZXI6ICc8JywKICAgICAgbGFyZ2VyOiAnPicsCiAgICAgIHNtYWxsZXJFcTogJzw9JywKICAgICAgbGFyZ2VyRXE6ICc+PScKICAgIH07CiAgICB2YXIgcmV0ID0gcGFyYW1TdHJpbmdzWzBdOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb25kaXRpb25hbHMubGVuZ3RoOyBpKyspIHsKICAgICAgcmV0ICs9ICcgJyArIG9wZXJhdG9yTWFwW3RoaXMuY29uZGl0aW9uYWxzW2ldXSArICcgJyArIHBhcmFtU3RyaW5nc1tpICsgMV07CiAgICB9CgogICAgcmV0dXJuIHJldDsKICB9OwogIC8qKgogICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUKICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAqLwoKCiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB7CiAgICAgIG1hdGhqczogJ1JlbGF0aW9uYWxOb2RlJywKICAgICAgY29uZGl0aW9uYWxzOiB0aGlzLmNvbmRpdGlvbmFscywKICAgICAgcGFyYW1zOiB0aGlzLnBhcmFtcwogICAgfTsKICB9OwogIC8qKgogICAqIEluc3RhbnRpYXRlIGEgUmVsYXRpb25hbE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvbgogICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlCiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7Im1hdGhqcyI6ICJSZWxhdGlvbmFsTm9kZSIsICJjb25kaXRpb24iOiAuLi4sICJ0cnVlRXhwciI6IC4uLiwgImZhbHNlRXhwciI6IC4uLn1gLAogICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWwKICAgKiBAcmV0dXJucyB7UmVsYXRpb25hbE5vZGV9CiAgICovCgoKICBSZWxhdGlvbmFsTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7CiAgICByZXR1cm4gbmV3IFJlbGF0aW9uYWxOb2RlKGpzb24uY29uZGl0aW9uYWxzLCBqc29uLnBhcmFtcyk7CiAgfTsKICAvKioKICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvbgogICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICogQHJldHVybiB7c3RyaW5nfSBzdHIKICAgKi8KCgogIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJzsKICAgIHZhciBwcmVjZWRlbmNlID0gZ2V0UHJlY2VkZW5jZSh0aGlzLCBwYXJlbnRoZXNpcyk7CiAgICB2YXIgcGFyYW1TdHJpbmdzID0gdGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uIChwLCBpbmRleCkgewogICAgICB2YXIgcGFyYW1QcmVjZWRlbmNlID0gZ2V0UHJlY2VkZW5jZShwLCBwYXJlbnRoZXNpcyk7CiAgICAgIHJldHVybiBwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgcGFyYW1QcmVjZWRlbmNlICE9PSBudWxsICYmIHBhcmFtUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlID8gJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPig8L3NwYW4+JyArIHAudG9IVE1MKG9wdGlvbnMpICsgJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPik8L3NwYW4+JyA6IHAudG9IVE1MKG9wdGlvbnMpOwogICAgfSk7CiAgICB2YXIgb3BlcmF0b3JNYXAgPSB7CiAgICAgIGVxdWFsOiAnPT0nLAogICAgICB1bmVxdWFsOiAnIT0nLAogICAgICBzbWFsbGVyOiAnPCcsCiAgICAgIGxhcmdlcjogJz4nLAogICAgICBzbWFsbGVyRXE6ICc8PScsCiAgICAgIGxhcmdlckVxOiAnPj0nCiAgICB9OwogICAgdmFyIHJldCA9IHBhcmFtU3RyaW5nc1swXTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZGl0aW9uYWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHJldCArPSAnPHNwYW4gY2xhc3M9Im1hdGgtb3BlcmF0b3IgbWF0aC1iaW5hcnktb3BlcmF0b3IgbWF0aC1leHBsaWNpdC1iaW5hcnktb3BlcmF0b3IiPicgKyBPYmplY3QodXRpbHNfc3RyaW5nWyJjIiAvKiBlc2NhcGUgKi9dKShvcGVyYXRvck1hcFt0aGlzLmNvbmRpdGlvbmFsc1tpXV0pICsgJzwvc3Bhbj4nICsgcGFyYW1TdHJpbmdzW2kgKyAxXTsKICAgIH0KCiAgICByZXR1cm4gcmV0OwogIH07CiAgLyoqCiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0cgogICAqLwoKCiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnOwogICAgdmFyIHByZWNlZGVuY2UgPSBnZXRQcmVjZWRlbmNlKHRoaXMsIHBhcmVudGhlc2lzKTsKICAgIHZhciBwYXJhbVN0cmluZ3MgPSB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKHAsIGluZGV4KSB7CiAgICAgIHZhciBwYXJhbVByZWNlZGVuY2UgPSBnZXRQcmVjZWRlbmNlKHAsIHBhcmVudGhlc2lzKTsKICAgICAgcmV0dXJuIHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBwYXJhbVByZWNlZGVuY2UgIT09IG51bGwgJiYgcGFyYW1QcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UgPyAnXFxsZWZ0KCcgKyBwLnRvVGV4KG9wdGlvbnMpICsgJ1xyaWdodCknIDogcC50b1RleChvcHRpb25zKTsKICAgIH0pOwogICAgdmFyIHJldCA9IHBhcmFtU3RyaW5nc1swXTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZGl0aW9uYWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHJldCArPSBsYXRleE9wZXJhdG9yc1t0aGlzLmNvbmRpdGlvbmFsc1tpXV0gKyBwYXJhbVN0cmluZ3NbaSArIDFdOwogICAgfQoKICAgIHJldHVybiByZXQ7CiAgfTsKCiAgcmV0dXJuIFJlbGF0aW9uYWxOb2RlOwp9LCB7CiAgaXNDbGFzczogdHJ1ZSwKICBpc05vZGU6IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vbm9kZS9TeW1ib2xOb2RlLmpzCgoKCgp2YXIgU3ltYm9sTm9kZV9uYW1lID0gJ1N5bWJvbE5vZGUnOwp2YXIgU3ltYm9sTm9kZV9kZXBlbmRlbmNpZXMgPSBbJ21hdGgnLCAnP1VuaXQnLCAnTm9kZSddOwp2YXIgY3JlYXRlU3ltYm9sTm9kZSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKFN5bWJvbE5vZGVfbmFtZSwgU3ltYm9sTm9kZV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIG1hdGggPSBfcmVmLm1hdGgsCiAgICAgIFVuaXQgPSBfcmVmLlVuaXQsCiAgICAgIE5vZGUgPSBfcmVmLk5vZGU7CgogIC8qKgogICAqIENoZWNrIHdoZXRoZXIgc29tZSBuYW1lIGlzIGEgdmFsdWVsZXNzIHVuaXQgbGlrZSAiaW5jaCIuCiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKICAgKiBAcmV0dXJuIHtib29sZWFufQogICAqLwogIGZ1bmN0aW9uIGlzVmFsdWVsZXNzVW5pdChuYW1lKSB7CiAgICByZXR1cm4gVW5pdCA/IFVuaXQuaXNWYWx1ZWxlc3NVbml0KG5hbWUpIDogZmFsc2U7CiAgfQogIC8qKgogICAqIEBjb25zdHJ1Y3RvciBTeW1ib2xOb2RlCiAgICogQGV4dGVuZHMge05vZGV9CiAgICogQSBzeW1ib2wgbm9kZSBjYW4gaG9sZCBhbmQgcmVzb2x2ZSBhIHN5bWJvbAogICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCiAgICogQGV4dGVuZHMge05vZGV9CiAgICovCgoKICBmdW5jdGlvbiBTeW1ib2xOb2RlKG5hbWUpIHsKICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTeW1ib2xOb2RlKSkgewogICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpOwogICAgfSAvLyB2YWxpZGF0ZSBpbnB1dAoKCiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdHJpbmcgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciAibmFtZSInKTsKICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgfQoKICBTeW1ib2xOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7CiAgU3ltYm9sTm9kZS5wcm90b3R5cGUudHlwZSA9ICdTeW1ib2xOb2RlJzsKICBTeW1ib2xOb2RlLnByb3RvdHlwZS5pc1N5bWJvbE5vZGUgPSB0cnVlOwogIC8qKgogICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLgogICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW4KICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy4KICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy4KICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWAKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemUKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLgogICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOgogICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKQogICAqLwoKICBTeW1ib2xOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykgewogICAgdmFyIG5hbWUgPSB0aGlzLm5hbWU7CgogICAgaWYgKGFyZ05hbWVzW25hbWVdID09PSB0cnVlKSB7CiAgICAgIC8vIHRoaXMgaXMgYSBGdW5jdGlvbkFzc2lnbm1lbnQgYXJndW1lbnQKICAgICAgLy8gKGxpa2UgYW4geCB3aGVuIGluc2lkZSB0aGUgZXhwcmVzc2lvbiBvZiBhIGZ1bmN0aW9uIGFzc2lnbm1lbnQgYGYoeCkgPSAuLi5gKQogICAgICByZXR1cm4gZnVuY3Rpb24gKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7CiAgICAgICAgcmV0dXJuIGFyZ3NbbmFtZV07CiAgICAgIH07CiAgICB9IGVsc2UgaWYgKG5hbWUgaW4gbWF0aCkgewogICAgICByZXR1cm4gZnVuY3Rpb24gKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7CiAgICAgICAgcmV0dXJuIG5hbWUgaW4gc2NvcGUgPyBnZXRTYWZlUHJvcGVydHkoc2NvcGUsIG5hbWUpIDogZ2V0U2FmZVByb3BlcnR5KG1hdGgsIG5hbWUpOwogICAgICB9OwogICAgfSBlbHNlIHsKICAgICAgdmFyIGlzVW5pdCA9IGlzVmFsdWVsZXNzVW5pdChuYW1lKTsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzY29wZSwgYXJncywgY29udGV4dCkgewogICAgICAgIHJldHVybiBuYW1lIGluIHNjb3BlID8gZ2V0U2FmZVByb3BlcnR5KHNjb3BlLCBuYW1lKSA6IGlzVW5pdCA/IG5ldyBVbml0KG51bGwsIG5hbWUpIDogdW5kZWYobmFtZSk7CiAgICAgIH07CiAgICB9CiAgfTsKICAvKioKICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZQogICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2sKICAgKi8KCgogIFN5bWJvbE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHt9IC8vIG5vdGhpbmcgdG8gZG8sIHdlIGRvbid0IGhhdmUgY2hpbGRzCgogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBTeW1ib2xOb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nCiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuCiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpIDogTm9kZX0gY2FsbGJhY2sKICAgKiBAcmV0dXJucyB7U3ltYm9sTm9kZX0gUmV0dXJucyBhIGNsb25lIG9mIHRoZSBub2RlCiAgICovCiAgOwoKICBTeW1ib2xOb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgIHJldHVybiB0aGlzLmNsb25lKCk7CiAgfTsKICAvKioKICAgKiBUaHJvd3MgYW4gZXJyb3IgJ1VuZGVmaW5lZCBzeW1ib2wge25hbWV9JwogICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCiAgICovCgoKICBmdW5jdGlvbiB1bmRlZihuYW1lKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZGVmaW5lZCBzeW1ib2wgJyArIG5hbWUpOwogIH0KICAvKioKICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5CiAgICogQHJldHVybiB7U3ltYm9sTm9kZX0KICAgKi8KCgogIFN5bWJvbE5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIG5ldyBTeW1ib2xOb2RlKHRoaXMubmFtZSk7CiAgfTsKICAvKioKICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0cgogICAqIEBvdmVycmlkZQogICAqLwoKCiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgIHJldHVybiB0aGlzLm5hbWU7CiAgfTsKICAvKioKICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvbgogICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICogQHJldHVybiB7c3RyaW5nfSBzdHIKICAgKiBAb3ZlcnJpZGUKICAgKi8KCgogIFN5bWJvbE5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICB2YXIgbmFtZSA9IE9iamVjdCh1dGlsc19zdHJpbmdbImMiIC8qIGVzY2FwZSAqL10pKHRoaXMubmFtZSk7CgogICAgaWYgKG5hbWUgPT09ICd0cnVlJyB8fCBuYW1lID09PSAnZmFsc2UnKSB7CiAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9Im1hdGgtc3ltYm9sIG1hdGgtYm9vbGVhbiI+JyArIG5hbWUgKyAnPC9zcGFuPic7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdpJykgewogICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPSJtYXRoLXN5bWJvbCBtYXRoLWltYWdpbmFyeS1zeW1ib2wiPicgKyBuYW1lICsgJzwvc3Bhbj4nOwogICAgfSBlbHNlIGlmIChuYW1lID09PSAnSW5maW5pdHknKSB7CiAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9Im1hdGgtc3ltYm9sIG1hdGgtaW5maW5pdHktc3ltYm9sIj4nICsgbmFtZSArICc8L3NwYW4+JzsKICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ05hTicpIHsKICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz0ibWF0aC1zeW1ib2wgbWF0aC1uYW4tc3ltYm9sIj4nICsgbmFtZSArICc8L3NwYW4+JzsKICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ251bGwnKSB7CiAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9Im1hdGgtc3ltYm9sIG1hdGgtbnVsbC1zeW1ib2wiPicgKyBuYW1lICsgJzwvc3Bhbj4nOwogICAgfSBlbHNlIGlmIChuYW1lID09PSAndW5kZWZpbmVkJykgewogICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPSJtYXRoLXN5bWJvbCBtYXRoLXVuZGVmaW5lZC1zeW1ib2wiPicgKyBuYW1lICsgJzwvc3Bhbj4nOwogICAgfQoKICAgIHJldHVybiAnPHNwYW4gY2xhc3M9Im1hdGgtc3ltYm9sIj4nICsgbmFtZSArICc8L3NwYW4+JzsKICB9OwogIC8qKgogICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUKICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAqLwoKCiAgU3ltYm9sTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHsKICAgICAgbWF0aGpzOiAnU3ltYm9sTm9kZScsCiAgICAgIG5hbWU6IHRoaXMubmFtZQogICAgfTsKICB9OwogIC8qKgogICAqIEluc3RhbnRpYXRlIGEgU3ltYm9sTm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2UKICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHsibWF0aGpzIjogIlN5bWJvbE5vZGUiLCBuYW1lOiAieCJ9YCwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsCiAgICogQHJldHVybnMge1N5bWJvbE5vZGV9CiAgICovCgoKICBTeW1ib2xOb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHsKICAgIHJldHVybiBuZXcgU3ltYm9sTm9kZShqc29uLm5hbWUpOwogIH07CiAgLyoqCiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0cgogICAqIEBvdmVycmlkZQogICAqLwoKCiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgIHZhciBpc1VuaXQgPSBmYWxzZTsKCiAgICBpZiAodHlwZW9mIG1hdGhbdGhpcy5uYW1lXSA9PT0gJ3VuZGVmaW5lZCcgJiYgaXNWYWx1ZWxlc3NVbml0KHRoaXMubmFtZSkpIHsKICAgICAgaXNVbml0ID0gdHJ1ZTsKICAgIH0KCiAgICB2YXIgc3ltYm9sID0gdG9TeW1ib2wodGhpcy5uYW1lLCBpc1VuaXQpOwoKICAgIGlmIChzeW1ib2xbMF0gPT09ICdcXCcpIHsKICAgICAgLy8gbm8gc3BhY2UgbmVlZGVkIGlmIHRoZSBzeW1ib2wgc3RhcnRzIHdpdGggJ1wnCiAgICAgIHJldHVybiBzeW1ib2w7CiAgICB9IC8vIHRoZSBzcGFjZSBwcmV2ZW50cyBzeW1ib2xzIGZyb20gYnJlYWtpbmcgc3R1ZmYgbGlrZSAnXGNkb3QnIGlmIGl0J3Mgd3JpdHRlbiByaWdodCBiZWZvcmUgdGhlIHN5bWJvbAoKCiAgICByZXR1cm4gJyAnICsgc3ltYm9sOwogIH07CgogIHJldHVybiBTeW1ib2xOb2RlOwp9LCB7CiAgaXNDbGFzczogdHJ1ZSwKICBpc05vZGU6IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vbm9kZS9GdW5jdGlvbk5vZGUuanMKZnVuY3Rpb24gRnVuY3Rpb25Ob2RlX3R5cGVvZihvYmopIHsgIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gInN5bWJvbCIpIHsgRnVuY3Rpb25Ob2RlX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBGdW5jdGlvbk5vZGVfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/ICJzeW1ib2wiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gRnVuY3Rpb25Ob2RlX3R5cGVvZihvYmopOyB9CgpmdW5jdGlvbiBGdW5jdGlvbk5vZGVfZXh0ZW5kcygpIHsgRnVuY3Rpb25Ob2RlX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gRnVuY3Rpb25Ob2RlX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfQoKCgoKCgoKCnZhciBGdW5jdGlvbk5vZGVfbmFtZSA9ICdGdW5jdGlvbk5vZGUnOwp2YXIgRnVuY3Rpb25Ob2RlX2RlcGVuZGVuY2llcyA9IFsnbWF0aCcsICdOb2RlJywgJ1N5bWJvbE5vZGUnXTsKdmFyIGNyZWF0ZUZ1bmN0aW9uTm9kZSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKEZ1bmN0aW9uTm9kZV9uYW1lLCBGdW5jdGlvbk5vZGVfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciBtYXRoID0gX3JlZi5tYXRoLAogICAgICBOb2RlID0gX3JlZi5Ob2RlLAogICAgICBTeW1ib2xOb2RlID0gX3JlZi5TeW1ib2xOb2RlOwoKICAvKioKICAgKiBAY29uc3RydWN0b3IgRnVuY3Rpb25Ob2RlCiAgICogQGV4dGVuZHMgey4vTm9kZX0KICAgKiBpbnZva2UgYSBsaXN0IHdpdGggYXJndW1lbnRzIG9uIGEgbm9kZQogICAqIEBwYXJhbSB7Li9Ob2RlIHwgc3RyaW5nfSBmbiBOb2RlIHJlc29sdmluZyB3aXRoIGEgZnVuY3Rpb24gb24gd2hpY2ggdG8gaW52b2tlCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhcmd1bWVudHMsIHR5cGljYWxseSBhIFN5bWJvTm9kZSBvciBBY2Nlc3Nvck5vZGUKICAgKiBAcGFyYW0gey4vTm9kZVtdfSBhcmdzCiAgICovCiAgZnVuY3Rpb24gRnVuY3Rpb25Ob2RlKGZuLCBhcmdzKSB7CiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSkgewogICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpOwogICAgfQoKICAgIGlmICh0eXBlb2YgZm4gPT09ICdzdHJpbmcnKSB7CiAgICAgIGZuID0gbmV3IFN5bWJvbE5vZGUoZm4pOwogICAgfSAvLyB2YWxpZGF0ZSBpbnB1dAoKCiAgICBpZiAoIU9iamVjdChpc1sidyIgLyogaXNOb2RlICovXSkoZm4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkIGFzIHBhcmFtZXRlciAiZm4iJyk7CgogICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZ3MpIHx8ICFhcmdzLmV2ZXJ5KGlzWyJ3IiAvKiBpc05vZGUgKi9dKSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgImFyZ3MiJyk7CiAgICB9CgogICAgdGhpcy5mbiA9IGZuOwogICAgdGhpcy5hcmdzID0gYXJncyB8fCBbXTsgLy8gcmVhZG9ubHkgcHJvcGVydHkgbmFtZQoKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbmFtZScsIHsKICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZm4ubmFtZSB8fCAnJzsKICAgICAgfS5iaW5kKHRoaXMpLAogICAgICBzZXQ6IGZ1bmN0aW9uIHNldCgpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhc3NpZ24gYSBuZXcgbmFtZSwgbmFtZSBpcyByZWFkLW9ubHknKTsKICAgICAgfQogICAgfSk7IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdjMsIHJlbW92ZSBzb21lIGRheQoKICAgIHZhciBkZXByZWNhdGVkID0gZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0eSBgRnVuY3Rpb25Ob2RlLm9iamVjdGAgaXMgZGVwcmVjYXRlZCwgdXNlIGBGdW5jdGlvbk5vZGUuZm5gIGluc3RlYWQnKTsKICAgIH07CgogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdvYmplY3QnLCB7CiAgICAgIGdldDogZGVwcmVjYXRlZCwKICAgICAgc2V0OiBkZXByZWNhdGVkCiAgICB9KTsKICB9CgogIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpOwogIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUudHlwZSA9ICdGdW5jdGlvbk5vZGUnOwogIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUuaXNGdW5jdGlvbk5vZGUgPSB0cnVlOwogIC8qKgogICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLgogICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW4KICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy4KICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy4KICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWAKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemUKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLgogICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOgogICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKQogICAqLwoKICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7CiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB2YWxpZCBGdW5jdGlvbk5vZGUnKTsKICAgIH0gLy8gY29tcGlsZSBhcmd1bWVudHMKCgogICAgdmFyIGV2YWxBcmdzID0gT2JqZWN0KHV0aWxzX2FycmF5WyJtIiAvKiBtYXAgKi9dKSh0aGlzLmFyZ3MsIGZ1bmN0aW9uIChhcmcpIHsKICAgICAgcmV0dXJuIGFyZy5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7CiAgICB9KTsKCiAgICBpZiAoT2JqZWN0KGlzWyJKIiAvKiBpc1N5bWJvbE5vZGUgKi9dKSh0aGlzLmZuKSkgewogICAgICAvLyB3ZSBjYW4gc3RhdGljYWxseSBkZXRlcm1pbmUgd2hldGhlciB0aGUgZnVuY3Rpb24gaGFzIGFuIHJhd0FyZ3MgcHJvcGVydHkKICAgICAgdmFyIF9uYW1lID0gdGhpcy5mbi5uYW1lOwogICAgICB2YXIgZm4gPSBfbmFtZSBpbiBtYXRoID8gZ2V0U2FmZVByb3BlcnR5KG1hdGgsIF9uYW1lKSA6IHVuZGVmaW5lZDsKICAgICAgdmFyIGlzUmF3ID0gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nICYmIGZuLnJhd0FyZ3MgPT09IHRydWU7CgogICAgICBpZiAoaXNSYXcpIHsKICAgICAgICAvLyBwYXNzIHVuZXZhbHVhdGVkIHBhcmFtZXRlcnMgKG5vZGVzKSB0byB0aGUgZnVuY3Rpb24KICAgICAgICAvLyAicmF3IiBldmFsdWF0aW9uCiAgICAgICAgdmFyIHJhd0FyZ3MgPSB0aGlzLmFyZ3M7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxGdW5jdGlvbk5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHsKICAgICAgICAgIHJldHVybiAoX25hbWUgaW4gc2NvcGUgPyBnZXRTYWZlUHJvcGVydHkoc2NvcGUsIF9uYW1lKSA6IGZuKShyYXdBcmdzLCBtYXRoLCBGdW5jdGlvbk5vZGVfZXh0ZW5kcyh7fSwgc2NvcGUsIGFyZ3MpKTsKICAgICAgICB9OwogICAgICB9IGVsc2UgewogICAgICAgIC8vICJyZWd1bGFyIiBldmFsdWF0aW9uCiAgICAgICAgaWYgKGV2YWxBcmdzLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgdmFyIGV2YWxBcmcwID0gZXZhbEFyZ3NbMF07CiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEZ1bmN0aW9uTm9kZShzY29wZSwgYXJncywgY29udGV4dCkgewogICAgICAgICAgICByZXR1cm4gKF9uYW1lIGluIHNjb3BlID8gZ2V0U2FmZVByb3BlcnR5KHNjb3BlLCBfbmFtZSkgOiBmbikoZXZhbEFyZzAoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTsKICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIGlmIChldmFsQXJncy5sZW5ndGggPT09IDIpIHsKICAgICAgICAgIHZhciBfZXZhbEFyZyA9IGV2YWxBcmdzWzBdOwogICAgICAgICAgdmFyIGV2YWxBcmcxID0gZXZhbEFyZ3NbMV07CiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEZ1bmN0aW9uTm9kZShzY29wZSwgYXJncywgY29udGV4dCkgewogICAgICAgICAgICByZXR1cm4gKF9uYW1lIGluIHNjb3BlID8gZ2V0U2FmZVByb3BlcnR5KHNjb3BlLCBfbmFtZSkgOiBmbikoX2V2YWxBcmcoc2NvcGUsIGFyZ3MsIGNvbnRleHQpLCBldmFsQXJnMShzY29wZSwgYXJncywgY29udGV4dCkpOwogICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxGdW5jdGlvbk5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHsKICAgICAgICAgICAgcmV0dXJuIChfbmFtZSBpbiBzY29wZSA/IGdldFNhZmVQcm9wZXJ0eShzY29wZSwgX25hbWUpIDogZm4pLmFwcGx5KG51bGwsIE9iamVjdCh1dGlsc19hcnJheVsibSIgLyogbWFwICovXSkoZXZhbEFyZ3MsIGZ1bmN0aW9uIChldmFsQXJnKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGV2YWxBcmcoc2NvcGUsIGFyZ3MsIGNvbnRleHQpOwogICAgICAgICAgICB9KSk7CiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmIChPYmplY3QoaXNbImEiIC8qIGlzQWNjZXNzb3JOb2RlICovXSkodGhpcy5mbikgJiYgT2JqZWN0KGlzWyJ1IiAvKiBpc0luZGV4Tm9kZSAqL10pKHRoaXMuZm4uaW5kZXgpICYmIHRoaXMuZm4uaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpKSB7CiAgICAgIC8vIGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIHJpZ2h0IGNvbnRleHQ6IHRoZSBvYmplY3Qgb2YgdGhlIEFjY2Vzc29yTm9kZQogICAgICB2YXIgZXZhbE9iamVjdCA9IHRoaXMuZm4ub2JqZWN0Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTsKCiAgICAgIHZhciBwcm9wID0gdGhpcy5mbi5pbmRleC5nZXRPYmplY3RQcm9wZXJ0eSgpOwogICAgICB2YXIgX3Jhd0FyZ3MgPSB0aGlzLmFyZ3M7CiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Ob2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7CiAgICAgICAgdmFyIG9iamVjdCA9IGV2YWxPYmplY3Qoc2NvcGUsIGFyZ3MsIGNvbnRleHQpOwogICAgICAgIHZhbGlkYXRlU2FmZU1ldGhvZChvYmplY3QsIHByb3ApOwogICAgICAgIHZhciBpc1JhdyA9IG9iamVjdFtwcm9wXSAmJiBvYmplY3RbcHJvcF0ucmF3QXJnczsKICAgICAgICByZXR1cm4gaXNSYXcgPyBvYmplY3RbcHJvcF0oX3Jhd0FyZ3MsIG1hdGgsIEZ1bmN0aW9uTm9kZV9leHRlbmRzKHt9LCBzY29wZSwgYXJncykpIC8vICJyYXciIGV2YWx1YXRpb24KICAgICAgICA6IG9iamVjdFtwcm9wXS5hcHBseShvYmplY3QsIE9iamVjdCh1dGlsc19hcnJheVsibSIgLyogbWFwICovXSkoZXZhbEFyZ3MsIGZ1bmN0aW9uIChldmFsQXJnKSB7CiAgICAgICAgICAvLyAicmVndWxhciIgZXZhbHVhdGlvbgogICAgICAgICAgcmV0dXJuIGV2YWxBcmcoc2NvcGUsIGFyZ3MsIGNvbnRleHQpOwogICAgICAgIH0pKTsKICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIG5vZGUuZm4uaXNBY2Nlc3Nvck5vZGUgJiYgIW5vZGUuZm4uaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpCiAgICAgIC8vIHdlIGhhdmUgdG8gZHluYW1pY2FsbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGhhcyBhIHJhd0FyZ3MgcHJvcGVydHkKICAgICAgdmFyIGV2YWxGbiA9IHRoaXMuZm4uX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpOwoKICAgICAgdmFyIF9yYXdBcmdzMiA9IHRoaXMuYXJnczsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxGdW5jdGlvbk5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHsKICAgICAgICB2YXIgZm4gPSBldmFsRm4oc2NvcGUsIGFyZ3MsIGNvbnRleHQpOwogICAgICAgIHZhciBpc1JhdyA9IGZuICYmIGZuLnJhd0FyZ3M7CiAgICAgICAgcmV0dXJuIGlzUmF3ID8gZm4oX3Jhd0FyZ3MyLCBtYXRoLCBGdW5jdGlvbk5vZGVfZXh0ZW5kcyh7fSwgc2NvcGUsIGFyZ3MpKSAvLyAicmF3IiBldmFsdWF0aW9uCiAgICAgICAgOiBmbi5hcHBseShmbiwgT2JqZWN0KHV0aWxzX2FycmF5WyJtIiAvKiBtYXAgKi9dKShldmFsQXJncywgZnVuY3Rpb24gKGV2YWxBcmcpIHsKICAgICAgICAgIC8vICJyZWd1bGFyIiBldmFsdWF0aW9uCiAgICAgICAgICByZXR1cm4gZXZhbEFyZyhzY29wZSwgYXJncywgY29udGV4dCk7CiAgICAgICAgfSkpOwogICAgICB9OwogICAgfQogIH07CiAgLyoqCiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGUKICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrCiAgICovCgoKICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgIGNhbGxiYWNrKHRoaXMuZm4sICdmbicsIHRoaXMpOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGNhbGxiYWNrKHRoaXMuYXJnc1tpXSwgJ2FyZ3NbJyArIGkgKyAnXScsIHRoaXMpOwogICAgfQogIH07CiAgLyoqCiAgICogQ3JlYXRlIGEgbmV3IEZ1bmN0aW9uTm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZwogICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLgogICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2sKICAgKiBAcmV0dXJucyB7RnVuY3Rpb25Ob2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZQogICAqLwoKCiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgIHZhciBmbiA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLmZuLCAnZm4nLCB0aGlzKSk7CgogICAgdmFyIGFyZ3MgPSBbXTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJncy5sZW5ndGg7IGkrKykgewogICAgICBhcmdzW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuYXJnc1tpXSwgJ2FyZ3NbJyArIGkgKyAnXScsIHRoaXMpKTsKICAgIH0KCiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShmbiwgYXJncyk7CiAgfTsKICAvKioKICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5CiAgICogQHJldHVybiB7RnVuY3Rpb25Ob2RlfQogICAqLwoKCiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiBuZXcgRnVuY3Rpb25Ob2RlKHRoaXMuZm4sIHRoaXMuYXJncy5zbGljZSgwKSk7CiAgfTsgLy8gYmFja3VwIE5vZGUncyB0b1N0cmluZyBmdW5jdGlvbgogIC8vIEBwcml2YXRlCgoKICB2YXIgbm9kZVRvU3RyaW5nID0gRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS50b1N0cmluZzsKICAvKioKICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiAod3JhcHBlciBmdW5jdGlvbikKICAgKiBUaGlzIG92ZXJyaWRlcyBwYXJ0cyBvZiBOb2RlJ3MgdG9TdHJpbmcgZnVuY3Rpb24uCiAgICogSWYgY2FsbGJhY2sgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgY2FsbGJhY2tzLCBpdAogICAqIGNhbGxzIHRoZSBjb3JyZWN0IGNhbGxiYWNrIGZvciB0aGUgY3VycmVudCBub2RlLAogICAqIG90aGVyd2lzZSBpdCBmYWxscyBiYWNrIHRvIGNhbGxpbmcgTm9kZSdzIHRvU3RyaW5nCiAgICogZnVuY3Rpb24uCiAgICoKICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwogICAqIEByZXR1cm4ge3N0cmluZ30gc3RyCiAgICogQG92ZXJyaWRlCiAgICovCgogIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgdmFyIGN1c3RvbVN0cmluZzsKICAgIHZhciBuYW1lID0gdGhpcy5mbi50b1N0cmluZyhvcHRpb25zKTsKCiAgICBpZiAob3B0aW9ucyAmJiBGdW5jdGlvbk5vZGVfdHlwZW9mKG9wdGlvbnMuaGFuZGxlcikgPT09ICdvYmplY3QnICYmIE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkob3B0aW9ucy5oYW5kbGVyLCBuYW1lKSkgewogICAgICAvLyBjYWxsYmFjayBpcyBhIG1hcCBvZiBjYWxsYmFjayBmdW5jdGlvbnMKICAgICAgY3VzdG9tU3RyaW5nID0gb3B0aW9ucy5oYW5kbGVyW25hbWVdKHRoaXMsIG9wdGlvbnMpOwogICAgfQoKICAgIGlmICh0eXBlb2YgY3VzdG9tU3RyaW5nICE9PSAndW5kZWZpbmVkJykgewogICAgICByZXR1cm4gY3VzdG9tU3RyaW5nOwogICAgfSAvLyBmYWxsIGJhY2sgdG8gTm9kZSdzIHRvU3RyaW5nCgoKICAgIHJldHVybiBub2RlVG9TdHJpbmcuY2FsbCh0aGlzLCBvcHRpb25zKTsKICB9OwogIC8qKgogICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24KICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwogICAqIEByZXR1cm4ge3N0cmluZ30gc3RyCiAgICovCgoKICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLl90b1N0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICB2YXIgYXJncyA9IHRoaXMuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykgewogICAgICByZXR1cm4gYXJnLnRvU3RyaW5nKG9wdGlvbnMpOwogICAgfSk7CiAgICB2YXIgZm4gPSBPYmplY3QoaXNbInEiIC8qIGlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSAqL10pKHRoaXMuZm4pID8gJygnICsgdGhpcy5mbi50b1N0cmluZyhvcHRpb25zKSArICcpJyA6IHRoaXMuZm4udG9TdHJpbmcob3B0aW9ucyk7IC8vIGZvcm1hdCB0aGUgYXJndW1lbnRzIGxpa2UgImFkZCgyLCA0LjIpIgoKICAgIHJldHVybiBmbiArICcoJyArIGFyZ3Muam9pbignLCAnKSArICcpJzsKICB9OwogIC8qKgogICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGUKICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAqLwoKCiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gewogICAgICBtYXRoanM6ICdGdW5jdGlvbk5vZGUnLAogICAgICBmbjogdGhpcy5mbiwKICAgICAgYXJnczogdGhpcy5hcmdzCiAgICB9OwogIH07CiAgLyoqCiAgICogSW5zdGFudGlhdGUgYW4gQXNzaWdubWVudE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvbgogICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlCiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7Im1hdGhqcyI6ICJGdW5jdGlvbk5vZGUiLCBmbjogLi4uLCBhcmdzOiAuLi59YCwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsCiAgICogQHJldHVybnMge0Z1bmN0aW9uTm9kZX0KICAgKi8KCgogIEZ1bmN0aW9uTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShqc29uLmZuLCBqc29uLmFyZ3MpOwogIH07CiAgLyoqCiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb24KICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwogICAqIEByZXR1cm4ge3N0cmluZ30gc3RyCiAgICovCgoKICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICB2YXIgYXJncyA9IHRoaXMuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykgewogICAgICByZXR1cm4gYXJnLnRvSFRNTChvcHRpb25zKTsKICAgIH0pOyAvLyBmb3JtYXQgdGhlIGFyZ3VtZW50cyBsaWtlICJhZGQoMiwgNC4yKSIKCiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPSJtYXRoLWZ1bmN0aW9uIj4nICsgT2JqZWN0KHV0aWxzX3N0cmluZ1siYyIgLyogZXNjYXBlICovXSkodGhpcy5mbikgKyAnPC9zcGFuPjxzcGFuIGNsYXNzPSJtYXRoLXBhcmFudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPig8L3NwYW4+JyArIGFyZ3Muam9pbignPHNwYW4gY2xhc3M9Im1hdGgtc2VwYXJhdG9yIj4sPC9zcGFuPicpICsgJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmFudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPik8L3NwYW4+JzsKICB9OwogIC8qCiAgICogRXhwYW5kIGEgTGFUZVggdGVtcGxhdGUKICAgKgogICAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZQogICAqIEBwYXJhbSB7Tm9kZX0gbm9kZQogICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICogQHByaXZhdGUKICAgKiovCgoKICBmdW5jdGlvbiBleHBhbmRUZW1wbGF0ZSh0ZW1wbGF0ZSwgbm9kZSwgb3B0aW9ucykgewogICAgdmFyIGxhdGV4ID0gJyc7IC8vIE1hdGNoIGV2ZXJ5dGhpbmcgb2YgdGhlIGZvcm0gJHtpZGVudGlmaWVyfSBvciAke2lkZW50aWZpZXJbMl19IG9yICQkCiAgICAvLyB3aGlsZSBzdWJtYXRjaGluZyBpZGVudGlmaWVyIGFuZCAyIChpbiB0aGUgc2Vjb25kIGNhc2UpCgogICAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXFwkKD86XFx7KFthLXpfXVthLXpfMC05XSopKD86XFxbKFswLTldKylcXF0pP1xcfXxcXCQpJywgJ2lnJyk7CiAgICB2YXIgaW5wdXRQb3MgPSAwOyAvLyBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgc3RyaW5nCgogICAgdmFyIG1hdGNoOwoKICAgIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHRlbXBsYXRlKSkgIT09IG51bGwpIHsKICAgICAgLy8gZ28gdGhyb3VnaCBhbGwgbWF0Y2hlcwogICAgICAvLyBhZGQgZXZlcnl0aGluZyBpbiBmcm9udCBvZiB0aGUgbWF0Y2ggdG8gdGhlIExhVGVYIHN0cmluZwogICAgICBsYXRleCArPSB0ZW1wbGF0ZS5zdWJzdHJpbmcoaW5wdXRQb3MsIG1hdGNoLmluZGV4KTsKICAgICAgaW5wdXRQb3MgPSBtYXRjaC5pbmRleDsKCiAgICAgIGlmIChtYXRjaFswXSA9PT0gJyQkJykgewogICAgICAgIC8vIGVzY2FwZWQgZG9sbGFyIHNpZ24KICAgICAgICBsYXRleCArPSAnJCc7CiAgICAgICAgaW5wdXRQb3MrKzsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyB0ZW1wbGF0ZSBwYXJhbWV0ZXIKICAgICAgICBpbnB1dFBvcyArPSBtYXRjaFswXS5sZW5ndGg7CiAgICAgICAgdmFyIHByb3BlcnR5ID0gbm9kZVttYXRjaFsxXV07CgogICAgICAgIGlmICghcHJvcGVydHkpIHsKICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignVGVtcGxhdGU6IFByb3BlcnR5ICcgKyBtYXRjaFsxXSArICcgZG9lcyBub3QgZXhpc3QuJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAobWF0Y2hbMl0gPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgLy8gbm8gc3F1YXJlIGJyYWNrZXRzCiAgICAgICAgICBzd2l0Y2ggKEZ1bmN0aW9uTm9kZV90eXBlb2YocHJvcGVydHkpKSB7CiAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6CiAgICAgICAgICAgICAgbGF0ZXggKz0gcHJvcGVydHk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlICdvYmplY3QnOgogICAgICAgICAgICAgIGlmIChPYmplY3QoaXNbInciIC8qIGlzTm9kZSAqL10pKHByb3BlcnR5KSkgewogICAgICAgICAgICAgICAgbGF0ZXggKz0gcHJvcGVydHkudG9UZXgob3B0aW9ucyk7CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnR5KSkgewogICAgICAgICAgICAgICAgLy8gbWFrZSBhcnJheSBvZiBOb2RlcyBpbnRvIGNvbW1hIHNlcGFyYXRlZCBsaXN0CiAgICAgICAgICAgICAgICBsYXRleCArPSBwcm9wZXJ0eS5tYXAoZnVuY3Rpb24gKGFyZywgaW5kZXgpIHsKICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdChpc1sidyIgLyogaXNOb2RlICovXSkoYXJnKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmcudG9UZXgob3B0aW9ucyk7CiAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RlbXBsYXRlOiAnICsgbWF0Y2hbMV0gKyAnWycgKyBpbmRleCArICddIGlzIG5vdCBhIE5vZGUuJyk7CiAgICAgICAgICAgICAgICB9KS5qb2luKCcsJyk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RlbXBsYXRlOiAnICsgbWF0Y2hbMV0gKyAnIGhhcyB0byBiZSBhIE5vZGUsIFN0cmluZyBvciBhcnJheSBvZiBOb2RlcycpOwogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RlbXBsYXRlOiAnICsgbWF0Y2hbMV0gKyAnIGhhcyB0byBiZSBhIE5vZGUsIFN0cmluZyBvciBhcnJheSBvZiBOb2RlcycpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyB3aXRoIHNxdWFyZSBicmFja2V0cwogICAgICAgICAgaWYgKE9iamVjdChpc1sidyIgLyogaXNOb2RlICovXSkocHJvcGVydHlbbWF0Y2hbMl1dICYmIHByb3BlcnR5W21hdGNoWzJdXSkpIHsKICAgICAgICAgICAgbGF0ZXggKz0gcHJvcGVydHlbbWF0Y2hbMl1dLnRvVGV4KG9wdGlvbnMpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGVtcGxhdGU6ICcgKyBtYXRjaFsxXSArICdbJyArIG1hdGNoWzJdICsgJ10gaXMgbm90IGEgTm9kZS4nKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBsYXRleCArPSB0ZW1wbGF0ZS5zbGljZShpbnB1dFBvcyk7IC8vIGFwcGVuZCByZXN0IG9mIHRoZSB0ZW1wbGF0ZQoKICAgIHJldHVybiBsYXRleDsKICB9IC8vIGJhY2t1cCBOb2RlJ3MgdG9UZXggZnVuY3Rpb24KICAvLyBAcHJpdmF0ZQoKCiAgdmFyIG5vZGVUb1RleCA9IEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUudG9UZXg7CiAgLyoqCiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uLiAod3JhcHBlciBmdW5jdGlvbikKICAgKiBUaGlzIG92ZXJyaWRlcyBwYXJ0cyBvZiBOb2RlJ3MgdG9UZXggZnVuY3Rpb24uCiAgICogSWYgY2FsbGJhY2sgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgY2FsbGJhY2tzLCBpdAogICAqIGNhbGxzIHRoZSBjb3JyZWN0IGNhbGxiYWNrIGZvciB0aGUgY3VycmVudCBub2RlLAogICAqIG90aGVyd2lzZSBpdCBmYWxscyBiYWNrIHRvIGNhbGxpbmcgTm9kZSdzIHRvVGV4CiAgICogZnVuY3Rpb24uCiAgICoKICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwogICAqIEByZXR1cm4ge3N0cmluZ30KICAgKi8KCiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS50b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICB2YXIgY3VzdG9tVGV4OwoKICAgIGlmIChvcHRpb25zICYmIEZ1bmN0aW9uTm9kZV90eXBlb2Yob3B0aW9ucy5oYW5kbGVyKSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0KHV0aWxzX29iamVjdFsiZiIgLyogaGFzT3duUHJvcGVydHkgKi9dKShvcHRpb25zLmhhbmRsZXIsIHRoaXMubmFtZSkpIHsKICAgICAgLy8gY2FsbGJhY2sgaXMgYSBtYXAgb2YgY2FsbGJhY2sgZnVuY3Rpb25zCiAgICAgIGN1c3RvbVRleCA9IG9wdGlvbnMuaGFuZGxlclt0aGlzLm5hbWVdKHRoaXMsIG9wdGlvbnMpOwogICAgfQoKICAgIGlmICh0eXBlb2YgY3VzdG9tVGV4ICE9PSAndW5kZWZpbmVkJykgewogICAgICByZXR1cm4gY3VzdG9tVGV4OwogICAgfSAvLyBmYWxsIGJhY2sgdG8gTm9kZSdzIHRvVGV4CgoKICAgIHJldHVybiBub2RlVG9UZXguY2FsbCh0aGlzLCBvcHRpb25zKTsKICB9OwogIC8qKgogICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvbgogICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICogQHJldHVybiB7c3RyaW5nfSBzdHIKICAgKi8KCgogIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgIHZhciBhcmdzID0gdGhpcy5hcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7CiAgICAgIC8vIGdldCBMYVRlWCBvZiB0aGUgYXJndW1lbnRzCiAgICAgIHJldHVybiBhcmcudG9UZXgob3B0aW9ucyk7CiAgICB9KTsKICAgIHZhciBsYXRleENvbnZlcnRlcjsKCiAgICBpZiAobGF0ZXhGdW5jdGlvbnNbdGhpcy5uYW1lXSkgewogICAgICBsYXRleENvbnZlcnRlciA9IGxhdGV4RnVuY3Rpb25zW3RoaXMubmFtZV07CiAgICB9IC8vIHRvVGV4IHByb3BlcnR5IG9uIHRoZSBmdW5jdGlvbiBpdHNlbGYKCgogICAgaWYgKG1hdGhbdGhpcy5uYW1lXSAmJiAodHlwZW9mIG1hdGhbdGhpcy5uYW1lXS50b1RleCA9PT0gJ2Z1bmN0aW9uJyB8fCBGdW5jdGlvbk5vZGVfdHlwZW9mKG1hdGhbdGhpcy5uYW1lXS50b1RleCkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBtYXRoW3RoaXMubmFtZV0udG9UZXggPT09ICdzdHJpbmcnKSkgewogICAgICAvLyAudG9UZXggaXMgYSBjYWxsYmFjayBmdW5jdGlvbgogICAgICBsYXRleENvbnZlcnRlciA9IG1hdGhbdGhpcy5uYW1lXS50b1RleDsKICAgIH0KCiAgICB2YXIgY3VzdG9tVG9UZXg7CgogICAgc3dpdGNoIChGdW5jdGlvbk5vZGVfdHlwZW9mKGxhdGV4Q29udmVydGVyKSkgewogICAgICBjYXNlICdmdW5jdGlvbic6CiAgICAgICAgLy8gYSBjYWxsYmFjayBmdW5jdGlvbgogICAgICAgIGN1c3RvbVRvVGV4ID0gbGF0ZXhDb252ZXJ0ZXIodGhpcywgb3B0aW9ucyk7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlICdzdHJpbmcnOgogICAgICAgIC8vIGEgdGVtcGxhdGUgc3RyaW5nCiAgICAgICAgY3VzdG9tVG9UZXggPSBleHBhbmRUZW1wbGF0ZShsYXRleENvbnZlcnRlciwgdGhpcywgb3B0aW9ucyk7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlICdvYmplY3QnOgogICAgICAgIC8vIGFuIG9iamVjdCB3aXRoIGRpZmZlcmVudCAiY29udmVydGVycyIgZm9yIGRpZmZlcmVudCBudW1iZXJzIG9mIGFyZ3VtZW50cwogICAgICAgIHN3aXRjaCAoRnVuY3Rpb25Ob2RlX3R5cGVvZihsYXRleENvbnZlcnRlclthcmdzLmxlbmd0aF0pKSB7CiAgICAgICAgICBjYXNlICdmdW5jdGlvbic6CiAgICAgICAgICAgIGN1c3RvbVRvVGV4ID0gbGF0ZXhDb252ZXJ0ZXJbYXJncy5sZW5ndGhdKHRoaXMsIG9wdGlvbnMpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgICBjYXNlICdzdHJpbmcnOgogICAgICAgICAgICBjdXN0b21Ub1RleCA9IGV4cGFuZFRlbXBsYXRlKGxhdGV4Q29udmVydGVyW2FyZ3MubGVuZ3RoXSwgdGhpcywgb3B0aW9ucyk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICB9CgogICAgaWYgKHR5cGVvZiBjdXN0b21Ub1RleCAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgcmV0dXJuIGN1c3RvbVRvVGV4OwogICAgfQoKICAgIHJldHVybiBleHBhbmRUZW1wbGF0ZShkZWZhdWx0VGVtcGxhdGUsIHRoaXMsIG9wdGlvbnMpOwogIH07CiAgLyoqCiAgICogR2V0IGlkZW50aWZpZXIuCiAgICogQHJldHVybiB7c3RyaW5nfQogICAqLwoKCiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS5nZXRJZGVudGlmaWVyID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIHRoaXMudHlwZSArICc6JyArIHRoaXMubmFtZTsKICB9OwoKICByZXR1cm4gRnVuY3Rpb25Ob2RlOwp9LCB7CiAgaXNDbGFzczogdHJ1ZSwKICBpc05vZGU6IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vcGFyc2UuanMKZnVuY3Rpb24gcGFyc2VfZXh0ZW5kcygpIHsgcGFyc2VfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBwYXJzZV9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0KCgoKCgp2YXIgcGFyc2VfbmFtZSA9ICdwYXJzZSc7CnZhciBwYXJzZV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ251bWVyaWMnLCAnY29uZmlnJywgJ0FjY2Vzc29yTm9kZScsICdBcnJheU5vZGUnLCAnQXNzaWdubWVudE5vZGUnLCAnQmxvY2tOb2RlJywgJ0NvbmRpdGlvbmFsTm9kZScsICdDb25zdGFudE5vZGUnLCAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZScsICdGdW5jdGlvbk5vZGUnLCAnSW5kZXhOb2RlJywgJ09iamVjdE5vZGUnLCAnT3BlcmF0b3JOb2RlJywgJ1BhcmVudGhlc2lzTm9kZScsICdSYW5nZU5vZGUnLCAnUmVsYXRpb25hbE5vZGUnLCAnU3ltYm9sTm9kZSddOwp2YXIgY3JlYXRlUGFyc2UgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShwYXJzZV9uYW1lLCBwYXJzZV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgbnVtZXJpYyA9IF9yZWYubnVtZXJpYywKICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIEFjY2Vzc29yTm9kZSA9IF9yZWYuQWNjZXNzb3JOb2RlLAogICAgICBBcnJheU5vZGUgPSBfcmVmLkFycmF5Tm9kZSwKICAgICAgQXNzaWdubWVudE5vZGUgPSBfcmVmLkFzc2lnbm1lbnROb2RlLAogICAgICBCbG9ja05vZGUgPSBfcmVmLkJsb2NrTm9kZSwKICAgICAgQ29uZGl0aW9uYWxOb2RlID0gX3JlZi5Db25kaXRpb25hbE5vZGUsCiAgICAgIENvbnN0YW50Tm9kZSA9IF9yZWYuQ29uc3RhbnROb2RlLAogICAgICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlID0gX3JlZi5GdW5jdGlvbkFzc2lnbm1lbnROb2RlLAogICAgICBGdW5jdGlvbk5vZGUgPSBfcmVmLkZ1bmN0aW9uTm9kZSwKICAgICAgSW5kZXhOb2RlID0gX3JlZi5JbmRleE5vZGUsCiAgICAgIE9iamVjdE5vZGUgPSBfcmVmLk9iamVjdE5vZGUsCiAgICAgIE9wZXJhdG9yTm9kZSA9IF9yZWYuT3BlcmF0b3JOb2RlLAogICAgICBQYXJlbnRoZXNpc05vZGUgPSBfcmVmLlBhcmVudGhlc2lzTm9kZSwKICAgICAgUmFuZ2VOb2RlID0gX3JlZi5SYW5nZU5vZGUsCiAgICAgIFJlbGF0aW9uYWxOb2RlID0gX3JlZi5SZWxhdGlvbmFsTm9kZSwKICAgICAgU3ltYm9sTm9kZSA9IF9yZWYuU3ltYm9sTm9kZTsKCiAgLyoqCiAgICogUGFyc2UgYW4gZXhwcmVzc2lvbi4gUmV0dXJucyBhIG5vZGUgdHJlZSwgd2hpY2ggY2FuIGJlIGV2YWx1YXRlZCBieQogICAqIGludm9raW5nIG5vZGUuZXZhbHVhdGUoKS4KICAgKgogICAqIE5vdGUgdGhlIGV2YWx1YXRpbmcgYXJiaXRyYXJ5IGV4cHJlc3Npb25zIG1heSBpbnZvbHZlIHNlY3VyaXR5IHJpc2tzLAogICAqIHNlZSBbaHR0cHM6Ly9tYXRoanMub3JnL2RvY3MvZXhwcmVzc2lvbnMvc2VjdXJpdHkuaHRtbF0oaHR0cHM6Ly9tYXRoanMub3JnL2RvY3MvZXhwcmVzc2lvbnMvc2VjdXJpdHkuaHRtbCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICAgbWF0aC5wYXJzZShleHByKQogICAqICAgICBtYXRoLnBhcnNlKGV4cHIsIG9wdGlvbnMpCiAgICogICAgIG1hdGgucGFyc2UoW2V4cHIxLCBleHByMiwgZXhwcjMsIC4uLl0pCiAgICogICAgIG1hdGgucGFyc2UoW2V4cHIxLCBleHByMiwgZXhwcjMsIC4uLl0sIG9wdGlvbnMpCiAgICoKICAgKiBFeGFtcGxlOgogICAqCiAgICogICAgIGNvbnN0IG5vZGUxID0gbWF0aC5wYXJzZSgnc3FydCgzXjIgKyA0XjIpJykKICAgKiAgICAgbm9kZTEuY29tcGlsZSgpLmV2YWx1YXRlKCkgLy8gNQogICAqCiAgICogICAgIGxldCBzY29wZSA9IHthOjMsIGI6NH0KICAgKiAgICAgY29uc3Qgbm9kZTIgPSBtYXRoLnBhcnNlKCdhICogYicpIC8vIDEyCiAgICogICAgIGNvbnN0IGNvZGUyID0gbm9kZTIuY29tcGlsZSgpCiAgICogICAgIGNvZGUyLmV2YWx1YXRlKHNjb3BlKSAvLyAxMgogICAqICAgICBzY29wZS5hID0gNQogICAqICAgICBjb2RlMi5ldmFsdWF0ZShzY29wZSkgLy8gMjAKICAgKgogICAqICAgICBjb25zdCBub2RlcyA9IG1hdGgucGFyc2UoWydhID0gMycsICdiID0gNCcsICdhICogYiddKQogICAqICAgICBub2Rlc1syXS5jb21waWxlKCkuZXZhbHVhdGUoKSAvLyAxMgogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICAgZXZhbHVhdGUsIGNvbXBpbGUKICAgKgogICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW10gfCBNYXRyaXh9IGV4cHIgICAgICAgICAgRXhwcmVzc2lvbiB0byBiZSBwYXJzZWQKICAgKiBAcGFyYW0ge3tub2RlczogT2JqZWN0PHN0cmluZywgTm9kZT59fSBbb3B0aW9uc10gIEF2YWlsYWJsZSBvcHRpb25zOgogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBgbm9kZXNgIGEgc2V0IG9mIGN1c3RvbSBub2RlcwogICAqIEByZXR1cm4ge05vZGUgfCBOb2RlW119IG5vZGUKICAgKiBAdGhyb3dzIHtFcnJvcn0KICAgKi8KICB2YXIgcGFyc2UgPSB0eXBlZChwYXJzZV9uYW1lLCB7CiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhleHByZXNzaW9uKSB7CiAgICAgIHJldHVybiBwYXJzZVN0YXJ0KGV4cHJlc3Npb24sIHt9KTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChleHByZXNzaW9ucykgewogICAgICByZXR1cm4gcGFyc2VNdWx0aXBsZShleHByZXNzaW9ucywge30pOwogICAgfSwKICAgICdzdHJpbmcsIE9iamVjdCc6IGZ1bmN0aW9uIHN0cmluZ09iamVjdChleHByZXNzaW9uLCBvcHRpb25zKSB7CiAgICAgIHZhciBleHRyYU5vZGVzID0gb3B0aW9ucy5ub2RlcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5ub2RlcyA6IHt9OwogICAgICByZXR1cm4gcGFyc2VTdGFydChleHByZXNzaW9uLCBleHRyYU5vZGVzKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgsIE9iamVjdCc6IHBhcnNlTXVsdGlwbGUKICB9KTsKCiAgZnVuY3Rpb24gcGFyc2VNdWx0aXBsZShleHByZXNzaW9ucykgewogICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9OwogICAgdmFyIGV4dHJhTm9kZXMgPSBvcHRpb25zLm5vZGVzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5vZGVzIDoge307IC8vIHBhcnNlIGFuIGFycmF5IG9yIG1hdHJpeCB3aXRoIGV4cHJlc3Npb25zCgogICAgcmV0dXJuIGRlZXBNYXAoZXhwcmVzc2lvbnMsIGZ1bmN0aW9uIChlbGVtKSB7CiAgICAgIGlmICh0eXBlb2YgZWxlbSAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N0cmluZyBleHBlY3RlZCcpOwogICAgICByZXR1cm4gcGFyc2VTdGFydChlbGVtLCBleHRyYU5vZGVzKTsKICAgIH0pOwogIH0gLy8gdG9rZW4gdHlwZXMgZW51bWVyYXRpb24KCgogIHZhciBUT0tFTlRZUEUgPSB7CiAgICBOVUxMOiAwLAogICAgREVMSU1JVEVSOiAxLAogICAgTlVNQkVSOiAyLAogICAgU1lNQk9MOiAzLAogICAgVU5LTk9XTjogNAogIH07IC8vIG1hcCB3aXRoIGFsbCBkZWxpbWl0ZXJzCgogIHZhciBERUxJTUlURVJTID0gewogICAgJywnOiB0cnVlLAogICAgJygnOiB0cnVlLAogICAgJyknOiB0cnVlLAogICAgJ1snOiB0cnVlLAogICAgJ10nOiB0cnVlLAogICAgJ3snOiB0cnVlLAogICAgJ30nOiB0cnVlLAogICAgJyInOiB0cnVlLAogICAgJ1wnJzogdHJ1ZSwKICAgICc7JzogdHJ1ZSwKICAgICcrJzogdHJ1ZSwKICAgICctJzogdHJ1ZSwKICAgICcqJzogdHJ1ZSwKICAgICcuKic6IHRydWUsCiAgICAnLyc6IHRydWUsCiAgICAnLi8nOiB0cnVlLAogICAgJyUnOiB0cnVlLAogICAgJ14nOiB0cnVlLAogICAgJy5eJzogdHJ1ZSwKICAgICd+JzogdHJ1ZSwKICAgICchJzogdHJ1ZSwKICAgICcmJzogdHJ1ZSwKICAgICd8JzogdHJ1ZSwKICAgICdefCc6IHRydWUsCiAgICAnPSc6IHRydWUsCiAgICAnOic6IHRydWUsCiAgICAnPyc6IHRydWUsCiAgICAnPT0nOiB0cnVlLAogICAgJyE9JzogdHJ1ZSwKICAgICc8JzogdHJ1ZSwKICAgICc+JzogdHJ1ZSwKICAgICc8PSc6IHRydWUsCiAgICAnPj0nOiB0cnVlLAogICAgJzw8JzogdHJ1ZSwKICAgICc+Pic6IHRydWUsCiAgICAnPj4+JzogdHJ1ZQogIH07IC8vIG1hcCB3aXRoIGFsbCBuYW1lZCBkZWxpbWl0ZXJzCgogIHZhciBOQU1FRF9ERUxJTUlURVJTID0gewogICAgbW9kOiB0cnVlLAogICAgdG86IHRydWUsCiAgICAiaW4iOiB0cnVlLAogICAgYW5kOiB0cnVlLAogICAgeG9yOiB0cnVlLAogICAgb3I6IHRydWUsCiAgICBub3Q6IHRydWUKICB9OwogIHZhciBDT05TVEFOVFMgPSB7CiAgICAidHJ1ZSI6IHRydWUsCiAgICAiZmFsc2UiOiBmYWxzZSwKICAgICJudWxsIjogbnVsbCwKICAgIHVuZGVmaW5lZDogdW5kZWZpbmVkCiAgfTsKICB2YXIgTlVNRVJJQ19DT05TVEFOVFMgPSBbJ05hTicsICdJbmZpbml0eSddOwoKICBmdW5jdGlvbiBpbml0aWFsU3RhdGUoKSB7CiAgICByZXR1cm4gewogICAgICBleHRyYU5vZGVzOiB7fSwKICAgICAgLy8gY3VycmVudCBleHRyYSBub2RlcywgbXVzdCBiZSBjYXJlZnVsIG5vdCB0byBtdXRhdGUKICAgICAgZXhwcmVzc2lvbjogJycsCiAgICAgIC8vIGN1cnJlbnQgZXhwcmVzc2lvbgogICAgICBjb21tZW50OiAnJywKICAgICAgLy8gbGFzdCBwYXJzZWQgY29tbWVudAogICAgICBpbmRleDogMCwKICAgICAgLy8gY3VycmVudCBpbmRleCBpbiBleHByCiAgICAgIHRva2VuOiAnJywKICAgICAgLy8gY3VycmVudCB0b2tlbgogICAgICB0b2tlblR5cGU6IFRPS0VOVFlQRS5OVUxMLAogICAgICAvLyB0eXBlIG9mIHRoZSB0b2tlbgogICAgICBuZXN0aW5nTGV2ZWw6IDAsCiAgICAgIC8vIGxldmVsIG9mIG5lc3RpbmcgaW5zaWRlIHBhcmFtZXRlcnMsIHVzZWQgdG8gaWdub3JlIG5ld2xpbmUgY2hhcmFjdGVycwogICAgICBjb25kaXRpb25hbExldmVsOiBudWxsIC8vIHdoZW4gYSBjb25kaXRpb25hbCBpcyBiZWluZyBwYXJzZWQsIHRoZSBsZXZlbCBvZiB0aGUgY29uZGl0aW9uYWwgaXMgc3RvcmVkIGhlcmUKCiAgICB9OwogIH0KICAvKioKICAgKiBWaWV3IHVwdG8gYGxlbmd0aGAgY2hhcmFjdGVycyBvZiB0aGUgZXhwcmVzc2lvbiBzdGFydGluZyBhdCB0aGUgY3VycmVudCBjaGFyYWN0ZXIuCiAgICoKICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGUKICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD0xXSBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byB2aWV3CiAgICogQHJldHVybnMge3N0cmluZ30KICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gY3VycmVudFN0cmluZyhzdGF0ZSwgbGVuZ3RoKSB7CiAgICByZXR1cm4gc3RhdGUuZXhwcmVzc2lvbi5zdWJzdHIoc3RhdGUuaW5kZXgsIGxlbmd0aCk7CiAgfQogIC8qKgogICAqIFZpZXcgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLiBSZXR1cm5zICcnIGlmIGVuZCBvZiBleHByZXNzaW9uIGlzIHJlYWNoZWQuCiAgICoKICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGUKICAgKiBAcmV0dXJucyB7c3RyaW5nfQogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSB7CiAgICByZXR1cm4gY3VycmVudFN0cmluZyhzdGF0ZSwgMSk7CiAgfQogIC8qKgogICAqIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIgZnJvbSB0aGUgZXhwcmVzc2lvbi4KICAgKiBUaGUgY2hhcmFjdGVyIGlzIHN0b3JlZCBpbnRvIHRoZSBjaGFyIGMuIElmIHRoZSBlbmQgb2YgdGhlIGV4cHJlc3Npb24gaXMKICAgKiByZWFjaGVkLCB0aGUgZnVuY3Rpb24gcHV0cyBhbiBlbXB0eSBzdHJpbmcgaW4gYy4KICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gbmV4dChzdGF0ZSkgewogICAgc3RhdGUuaW5kZXgrKzsKICB9CiAgLyoqCiAgICogUHJldmlldyB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIGZyb20gdGhlIGV4cHJlc3Npb24uCiAgICogQHJldHVybiB7c3RyaW5nfSBjTmV4dAogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBwcmV2Q2hhcmFjdGVyKHN0YXRlKSB7CiAgICByZXR1cm4gc3RhdGUuZXhwcmVzc2lvbi5jaGFyQXQoc3RhdGUuaW5kZXggLSAxKTsKICB9CiAgLyoqCiAgICogUHJldmlldyB0aGUgbmV4dCBjaGFyYWN0ZXIgZnJvbSB0aGUgZXhwcmVzc2lvbi4KICAgKiBAcmV0dXJuIHtzdHJpbmd9IGNOZXh0CiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIG5leHRDaGFyYWN0ZXIoc3RhdGUpIHsKICAgIHJldHVybiBzdGF0ZS5leHByZXNzaW9uLmNoYXJBdChzdGF0ZS5pbmRleCArIDEpOwogIH0KICAvKioKICAgKiBHZXQgbmV4dCB0b2tlbiBpbiB0aGUgY3VycmVudCBzdHJpbmcgZXhwci4KICAgKiBUaGUgdG9rZW4gYW5kIHRva2VuIHR5cGUgYXJlIGF2YWlsYWJsZSBhcyB0b2tlbiBhbmQgdG9rZW5UeXBlCiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIGdldFRva2VuKHN0YXRlKSB7CiAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuTlVMTDsKICAgIHN0YXRlLnRva2VuID0gJyc7CiAgICBzdGF0ZS5jb21tZW50ID0gJyc7IC8vIHNraXAgb3ZlciB3aGl0ZXNwYWNlcwogICAgLy8gc3BhY2UsIHRhYiwgYW5kIG5ld2xpbmUgd2hlbiBpbnNpZGUgcGFyYW1ldGVycwoKICAgIHdoaWxlIChwYXJzZS5pc1doaXRlc3BhY2UoY3VycmVudENoYXJhY3RlcihzdGF0ZSksIHN0YXRlLm5lc3RpbmdMZXZlbCkpIHsKICAgICAgbmV4dChzdGF0ZSk7CiAgICB9IC8vIHNraXAgY29tbWVudAoKCiAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICcjJykgewogICAgICB3aGlsZSAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgIT09ICdcbicgJiYgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgIT09ICcnKSB7CiAgICAgICAgc3RhdGUuY29tbWVudCArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTsKICAgICAgICBuZXh0KHN0YXRlKTsKICAgICAgfQogICAgfSAvLyBjaGVjayBmb3IgZW5kIG9mIGV4cHJlc3Npb24KCgogICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnJykgewogICAgICAvLyB0b2tlbiBpcyBzdGlsbCBlbXB0eQogICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuREVMSU1JVEVSOwogICAgICByZXR1cm47CiAgICB9IC8vIGNoZWNrIGZvciBuZXcgbGluZSBjaGFyYWN0ZXIKCgogICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnXG4nICYmICFzdGF0ZS5uZXN0aW5nTGV2ZWwpIHsKICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjsKICAgICAgc3RhdGUudG9rZW4gPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTsKICAgICAgbmV4dChzdGF0ZSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB2YXIgYzEgPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTsKICAgIHZhciBjMiA9IGN1cnJlbnRTdHJpbmcoc3RhdGUsIDIpOwogICAgdmFyIGMzID0gY3VycmVudFN0cmluZyhzdGF0ZSwgMyk7CgogICAgaWYgKGMzLmxlbmd0aCA9PT0gMyAmJiBERUxJTUlURVJTW2MzXSkgewogICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuREVMSU1JVEVSOwogICAgICBzdGF0ZS50b2tlbiA9IGMzOwogICAgICBuZXh0KHN0YXRlKTsKICAgICAgbmV4dChzdGF0ZSk7CiAgICAgIG5leHQoc3RhdGUpOwogICAgICByZXR1cm47CiAgICB9IC8vIGNoZWNrIGZvciBkZWxpbWl0ZXJzIGNvbnNpc3Rpbmcgb2YgMiBjaGFyYWN0ZXJzCgoKICAgIGlmIChjMi5sZW5ndGggPT09IDIgJiYgREVMSU1JVEVSU1tjMl0pIHsKICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjsKICAgICAgc3RhdGUudG9rZW4gPSBjMjsKICAgICAgbmV4dChzdGF0ZSk7CiAgICAgIG5leHQoc3RhdGUpOwogICAgICByZXR1cm47CiAgICB9IC8vIGNoZWNrIGZvciBkZWxpbWl0ZXJzIGNvbnNpc3Rpbmcgb2YgMSBjaGFyYWN0ZXIKCgogICAgaWYgKERFTElNSVRFUlNbYzFdKSB7CiAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7CiAgICAgIHN0YXRlLnRva2VuID0gYzE7CiAgICAgIG5leHQoc3RhdGUpOwogICAgICByZXR1cm47CiAgICB9IC8vIGNoZWNrIGZvciBhIG51bWJlcgoKCiAgICBpZiAocGFyc2UuaXNEaWdpdERvdChjMSkpIHsKICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLk5VTUJFUjsgLy8gZ2V0IG51bWJlciwgY2FuIGhhdmUgYSBzaW5nbGUgZG90CgogICAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICcuJykgewogICAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpOwogICAgICAgIG5leHQoc3RhdGUpOwoKICAgICAgICBpZiAoIXBhcnNlLmlzRGlnaXQoY3VycmVudENoYXJhY3RlcihzdGF0ZSkpKSB7CiAgICAgICAgICAvLyB0aGlzIGlzIG5vIG51bWJlciwgaXQgaXMganVzdCBhIGRvdCAoY2FuIGJlIGRvdCBub3RhdGlvbikKICAgICAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHdoaWxlIChwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkgewogICAgICAgICAgc3RhdGUudG9rZW4gKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7CiAgICAgICAgICBuZXh0KHN0YXRlKTsKICAgICAgICB9CgogICAgICAgIGlmIChwYXJzZS5pc0RlY2ltYWxNYXJrKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpLCBuZXh0Q2hhcmFjdGVyKHN0YXRlKSkpIHsKICAgICAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpOwogICAgICAgICAgbmV4dChzdGF0ZSk7CiAgICAgICAgfQogICAgICB9CgogICAgICB3aGlsZSAocGFyc2UuaXNEaWdpdChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSkpIHsKICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTsKICAgICAgICBuZXh0KHN0YXRlKTsKICAgICAgfSAvLyBjaGVjayBmb3IgZXhwb25lbnRpYWwgbm90YXRpb24gbGlrZSAiMi4zZS00IiwgIjEuMjNlNTAiIG9yICIyZSs0IgoKCiAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJ0UnIHx8IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnZScpIHsKICAgICAgICBpZiAocGFyc2UuaXNEaWdpdChuZXh0Q2hhcmFjdGVyKHN0YXRlKSkgfHwgbmV4dENoYXJhY3RlcihzdGF0ZSkgPT09ICctJyB8fCBuZXh0Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJysnKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTsKICAgICAgICAgIG5leHQoc3RhdGUpOwoKICAgICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJysnIHx8IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnLScpIHsKICAgICAgICAgICAgc3RhdGUudG9rZW4gKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7CiAgICAgICAgICAgIG5leHQoc3RhdGUpOwogICAgICAgICAgfSAvLyBTY2llbnRpZmljIG5vdGF0aW9uIE1VU1QgYmUgZm9sbG93ZWQgYnkgYW4gZXhwb25lbnQKCgogICAgICAgICAgaWYgKCFwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkgewogICAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ0RpZ2l0IGV4cGVjdGVkLCBnb3QgIicgKyBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSArICciJyk7CiAgICAgICAgICB9CgogICAgICAgICAgd2hpbGUgKHBhcnNlLmlzRGlnaXQoY3VycmVudENoYXJhY3RlcihzdGF0ZSkpKSB7CiAgICAgICAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpOwogICAgICAgICAgICBuZXh0KHN0YXRlKTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAocGFyc2UuaXNEZWNpbWFsTWFyayhjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSwgbmV4dENoYXJhY3RlcihzdGF0ZSkpKSB7CiAgICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRGlnaXQgZXhwZWN0ZWQsIGdvdCAiJyArIGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpICsgJyInKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKG5leHRDaGFyYWN0ZXIoc3RhdGUpID09PSAnLicpIHsKICAgICAgICAgIG5leHQoc3RhdGUpOwogICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdEaWdpdCBleHBlY3RlZCwgZ290ICInICsgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgKyAnIicpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuOwogICAgfSAvLyBjaGVjayBmb3IgdmFyaWFibGVzLCBmdW5jdGlvbnMsIG5hbWVkIG9wZXJhdG9ycwoKCiAgICBpZiAocGFyc2UuaXNBbHBoYShjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSwgcHJldkNoYXJhY3RlcihzdGF0ZSksIG5leHRDaGFyYWN0ZXIoc3RhdGUpKSkgewogICAgICB3aGlsZSAocGFyc2UuaXNBbHBoYShjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSwgcHJldkNoYXJhY3RlcihzdGF0ZSksIG5leHRDaGFyYWN0ZXIoc3RhdGUpKSB8fCBwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkgewogICAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpOwogICAgICAgIG5leHQoc3RhdGUpOwogICAgICB9CgogICAgICBpZiAoT2JqZWN0KHV0aWxzX29iamVjdFsiZiIgLyogaGFzT3duUHJvcGVydHkgKi9dKShOQU1FRF9ERUxJTUlURVJTLCBzdGF0ZS50b2tlbikpIHsKICAgICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuREVMSU1JVEVSOwogICAgICB9IGVsc2UgewogICAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5TWU1CT0w7CiAgICAgIH0KCiAgICAgIHJldHVybjsKICAgIH0gLy8gc29tZXRoaW5nIHVua25vd24gaXMgZm91bmQsIHdyb25nIGNoYXJhY3RlcnMgLT4gYSBzeW50YXggZXJyb3IKCgogICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLlVOS05PV047CgogICAgd2hpbGUgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpICE9PSAnJykgewogICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTsKICAgICAgbmV4dChzdGF0ZSk7CiAgICB9CgogICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdTeW50YXggZXJyb3IgaW4gcGFydCAiJyArIHN0YXRlLnRva2VuICsgJyInKTsKICB9CiAgLyoqCiAgICogR2V0IG5leHQgdG9rZW4gYW5kIHNraXAgbmV3bGluZSB0b2tlbnMKICAgKi8KCgogIGZ1bmN0aW9uIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpIHsKICAgIGRvIHsKICAgICAgZ2V0VG9rZW4oc3RhdGUpOwogICAgfSB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICdcbicpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb24KCiAgfQogIC8qKgogICAqIE9wZW4gcGFyYW1ldGVycy4KICAgKiBOZXcgbGluZSBjaGFyYWN0ZXJzIHdpbGwgYmUgaWdub3JlZCB1bnRpbCBjbG9zZVBhcmFtcyhzdGF0ZSkgaXMgY2FsbGVkCiAgICovCgoKICBmdW5jdGlvbiBvcGVuUGFyYW1zKHN0YXRlKSB7CiAgICBzdGF0ZS5uZXN0aW5nTGV2ZWwrKzsKICB9CiAgLyoqCiAgICogQ2xvc2UgcGFyYW1ldGVycy4KICAgKiBOZXcgbGluZSBjaGFyYWN0ZXJzIHdpbGwgbm8gbG9uZ2VyIGJlIGlnbm9yZWQKICAgKi8KCgogIGZ1bmN0aW9uIGNsb3NlUGFyYW1zKHN0YXRlKSB7CiAgICBzdGF0ZS5uZXN0aW5nTGV2ZWwtLTsKICB9CiAgLyoqCiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGBjYCBpcyBhIHZhbGlkIGFscGhhIGNoYXJhY3RlcjoKICAgKgogICAqIC0gQSBsYXRpbiBsZXR0ZXIgKHVwcGVyIG9yIGxvd2VyIGNhc2UpIEFzY2lpOiBhLXosIEEtWgogICAqIC0gQW4gdW5kZXJzY29yZSAgICAgICAgICAgICAgICAgICAgICAgIEFzY2lpOiBfCiAgICogLSBBIGRvbGxhciBzaWduICAgICAgICAgICAgICAgICAgICAgICAgQXNjaWk6ICQKICAgKiAtIEEgbGF0aW4gbGV0dGVyIHdpdGggYWNjZW50cyAgICAgICAgICBVbmljb2RlOiBcdTAwQzAgLSBcdTAyQUYKICAgKiAtIEEgZ3JlZWsgbGV0dGVyICAgICAgICAgICAgICAgICAgICAgICBVbmljb2RlOiBcdTAzNzAgLSBcdTAzRkYKICAgKiAtIEEgbWF0aGVtYXRpY2FsIGFscGhhbnVtZXJpYyBzeW1ib2wgICBVbmljb2RlOiBcdXsxRDQwMH0gLSBcdXsxRDdGRn0gZXhjbHVkaW5nIGludmFsaWQgY29kZSBwb2ludHMKICAgKgogICAqIFRoZSBwcmV2aW91cyBhbmQgbmV4dCBjaGFyYWN0ZXJzIGFyZSBuZWVkZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIKICAgKiB0aGlzIGNoYXJhY3RlciBpcyBwYXJ0IG9mIGEgdW5pY29kZSBzdXJyb2dhdGUgcGFpci4KICAgKgogICAqIEBwYXJhbSB7c3RyaW5nfSBjICAgICAgQ3VycmVudCBjaGFyYWN0ZXIgaW4gdGhlIGV4cHJlc3Npb24KICAgKiBAcGFyYW0ge3N0cmluZ30gY1ByZXYgIFByZXZpb3VzIGNoYXJhY3RlcgogICAqIEBwYXJhbSB7c3RyaW5nfSBjTmV4dCAgTmV4dCBjaGFyYWN0ZXIKICAgKiBAcmV0dXJuIHtib29sZWFufQogICAqLwoKCiAgcGFyc2UuaXNBbHBoYSA9IGZ1bmN0aW9uIGlzQWxwaGEoYywgY1ByZXYsIGNOZXh0KSB7CiAgICByZXR1cm4gcGFyc2UuaXNWYWxpZExhdGluT3JHcmVlayhjKSB8fCBwYXJzZS5pc1ZhbGlkTWF0aFN5bWJvbChjLCBjTmV4dCkgfHwgcGFyc2UuaXNWYWxpZE1hdGhTeW1ib2woY1ByZXYsIGMpOwogIH07CiAgLyoqCiAgICogVGVzdCB3aGV0aGVyIGEgY2hhcmFjdGVyIGlzIGEgdmFsaWQgbGF0aW4sIGdyZWVrLCBvciBsZXR0ZXItbGlrZSBjaGFyYWN0ZXIKICAgKiBAcGFyYW0ge3N0cmluZ30gYwogICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICovCgoKICBwYXJzZS5pc1ZhbGlkTGF0aW5PckdyZWVrID0gZnVuY3Rpb24gaXNWYWxpZExhdGluT3JHcmVlayhjKSB7CiAgICByZXR1cm4gL15bYS16QS1aXyRcdTAwQzAtXHUwMkFGXHUwMzcwLVx1MDNGRlx1MjEwMC1cdTIxNEZdJC8udGVzdChjKTsKICB9OwogIC8qKgogICAqIFRlc3Qgd2hldGhlciB0d28gZ2l2ZW4gMTYgYml0IGNoYXJhY3RlcnMgZm9ybSBhIHN1cnJvZ2F0ZSBwYWlyIG9mIGEKICAgKiB1bmljb2RlIG1hdGggc3ltYm9sLgogICAqCiAgICogaHR0cHM6Ly91bmljb2RlLXRhYmxlLmNvbS9lbi8KICAgKiBodHRwczovL3d3dy53aWtpd2FuZC5jb20vZW4vTWF0aGVtYXRpY2FsX29wZXJhdG9yc19hbmRfc3ltYm9sc19pbl9Vbmljb2RlCiAgICoKICAgKiBOb3RlOiBJbiBFUzYgd2lsbCBiZSB1bmljb2RlIGF3YXJlOgogICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI4MDcxMi9qYXZhc2NyaXB0LXVuaWNvZGUtcmVnZXhlcwogICAqIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9lczYtdW5pY29kZS1yZWdleAogICAqCiAgICogQHBhcmFtIHtzdHJpbmd9IGhpZ2gKICAgKiBAcGFyYW0ge3N0cmluZ30gbG93CiAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgKi8KCgogIHBhcnNlLmlzVmFsaWRNYXRoU3ltYm9sID0gZnVuY3Rpb24gaXNWYWxpZE1hdGhTeW1ib2woaGlnaCwgbG93KSB7CiAgICByZXR1cm4gL15bXHVEODM1XSQvLnRlc3QoaGlnaCkgJiYgL15bXHVEQzAwLVx1REZGRl0kLy50ZXN0KGxvdykgJiYgL15bXlx1REM1NVx1REM5RFx1RENBMFx1RENBMVx1RENBM1x1RENBNFx1RENBN1x1RENBOFx1RENBRFx1RENCQVx1RENCQ1x1RENDNFx1REQwNlx1REQwQlx1REQwQ1x1REQxNVx1REQxRFx1REQzQVx1REQzRlx1REQ0NVx1REQ0Ny1cdURENDlcdURENTFcdURFQTZcdURFQTdcdURGQ0NcdURGQ0RdJC8udGVzdChsb3cpOwogIH07CiAgLyoqCiAgICogQ2hlY2sgd2hldGhlciBnaXZlbiBjaGFyYWN0ZXIgYyBpcyBhIHdoaXRlIHNwYWNlIGNoYXJhY3Rlcjogc3BhY2UsIHRhYiwgb3IgZW50ZXIKICAgKiBAcGFyYW0ge3N0cmluZ30gYwogICAqIEBwYXJhbSB7bnVtYmVyfSBuZXN0aW5nTGV2ZWwKICAgKiBAcmV0dXJuIHtib29sZWFufQogICAqLwoKCiAgcGFyc2UuaXNXaGl0ZXNwYWNlID0gZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGMsIG5lc3RpbmdMZXZlbCkgewogICAgLy8gVE9ETzogYWxzbyB0YWtlICdccicgY2FycmlhZ2UgcmV0dXJuIGFzIG5ld2xpbmU/IE9yIGRvZXMgdGhhdCBnaXZlIHByb2JsZW1zIG9uIG1hYz8KICAgIHJldHVybiBjID09PSAnICcgfHwgYyA9PT0gJ1x0JyB8fCBjID09PSAnXG4nICYmIG5lc3RpbmdMZXZlbCA+IDA7CiAgfTsKICAvKioKICAgKiBUZXN0IHdoZXRoZXIgdGhlIGNoYXJhY3RlciBjIGlzIGEgZGVjaW1hbCBtYXJrIChkb3QpLgogICAqIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBpdCdzIG5vdCB0aGUgc3RhcnQgb2YgYSBkZWxpbWl0ZXIgJy4qJywgJy4vJywgb3IgJy5eJwogICAqIEBwYXJhbSB7c3RyaW5nfSBjCiAgICogQHBhcmFtIHtzdHJpbmd9IGNOZXh0CiAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgKi8KCgogIHBhcnNlLmlzRGVjaW1hbE1hcmsgPSBmdW5jdGlvbiBpc0RlY2ltYWxNYXJrKGMsIGNOZXh0KSB7CiAgICByZXR1cm4gYyA9PT0gJy4nICYmIGNOZXh0ICE9PSAnLycgJiYgY05leHQgIT09ICcqJyAmJiBjTmV4dCAhPT0gJ14nOwogIH07CiAgLyoqCiAgICogY2hlY2tzIGlmIHRoZSBnaXZlbiBjaGFyIGMgaXMgYSBkaWdpdCBvciBkb3QKICAgKiBAcGFyYW0ge3N0cmluZ30gYyAgIGEgc3RyaW5nIHdpdGggb25lIGNoYXJhY3RlcgogICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICovCgoKICBwYXJzZS5pc0RpZ2l0RG90ID0gZnVuY3Rpb24gaXNEaWdpdERvdChjKSB7CiAgICByZXR1cm4gYyA+PSAnMCcgJiYgYyA8PSAnOScgfHwgYyA9PT0gJy4nOwogIH07CiAgLyoqCiAgICogY2hlY2tzIGlmIHRoZSBnaXZlbiBjaGFyIGMgaXMgYSBkaWdpdAogICAqIEBwYXJhbSB7c3RyaW5nfSBjICAgYSBzdHJpbmcgd2l0aCBvbmUgY2hhcmFjdGVyCiAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgKi8KCgogIHBhcnNlLmlzRGlnaXQgPSBmdW5jdGlvbiBpc0RpZ2l0KGMpIHsKICAgIHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JzsKICB9OwogIC8qKgogICAqIFN0YXJ0IG9mIHRoZSBwYXJzZSBsZXZlbHMgYmVsb3csIGluIG9yZGVyIG9mIHByZWNlZGVuY2UKICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlCiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIHBhcnNlU3RhcnQoZXhwcmVzc2lvbiwgZXh0cmFOb2RlcykgewogICAgdmFyIHN0YXRlID0gaW5pdGlhbFN0YXRlKCk7CgogICAgcGFyc2VfZXh0ZW5kcyhzdGF0ZSwgewogICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uLAogICAgICBleHRyYU5vZGVzOiBleHRyYU5vZGVzCiAgICB9KTsKCiAgICBnZXRUb2tlbihzdGF0ZSk7CiAgICB2YXIgbm9kZSA9IHBhcnNlQmxvY2soc3RhdGUpOyAvLyBjaGVjayBmb3IgZ2FyYmFnZSBhdCB0aGUgZW5kIG9mIHRoZSBleHByZXNzaW9uCiAgICAvLyBhbiBleHByZXNzaW9uIGVuZHMgd2l0aCBhIGVtcHR5IGNoYXJhY3RlciAnJyBhbmQgdG9rZW5UeXBlIERFTElNSVRFUgoKICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJycpIHsKICAgICAgaWYgKHN0YXRlLnRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLkRFTElNSVRFUikgewogICAgICAgIC8vIHVzZXIgZW50ZXJlZCBhIG5vdCBleGlzdGluZyBvcGVyYXRvciBsaWtlICIvLyIKICAgICAgICAvLyBUT0RPOiBnaXZlIGhpbnRzIGZvciBhbGlhc2VzLCBmb3IgZXhhbXBsZSB3aXRoICI8PiIgZ2l2ZSBhcyBoaW50ICIgZGlkIHlvdSBtZWFuICE9PSA/IgogICAgICAgIHRocm93IGNyZWF0ZUVycm9yKHN0YXRlLCAnVW5leHBlY3RlZCBvcGVyYXRvciAnICsgc3RhdGUudG9rZW4pOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnVW5leHBlY3RlZCBwYXJ0ICInICsgc3RhdGUudG9rZW4gKyAnIicpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfQogIC8qKgogICAqIFBhcnNlIGEgYmxvY2sgd2l0aCBleHByZXNzaW9ucy4gRXhwcmVzc2lvbnMgY2FuIGJlIHNlcGFyYXRlZCBieSBhIG5ld2xpbmUKICAgKiBjaGFyYWN0ZXIgJ1xuJywgb3IgYnkgYSBzZW1pY29sb24gJzsnLiBJbiBjYXNlIG9mIGEgc2VtaWNvbG9uLCBubyBvdXRwdXQKICAgKiBvZiB0aGUgcHJlY2VkaW5nIGxpbmUgaXMgcmV0dXJuZWQuCiAgICogQHJldHVybiB7Tm9kZX0gbm9kZQogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBwYXJzZUJsb2NrKHN0YXRlKSB7CiAgICB2YXIgbm9kZTsKICAgIHZhciBibG9ja3MgPSBbXTsKICAgIHZhciB2aXNpYmxlOwoKICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJycgJiYgc3RhdGUudG9rZW4gIT09ICdcbicgJiYgc3RhdGUudG9rZW4gIT09ICc7JykgewogICAgICBub2RlID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTsKICAgICAgbm9kZS5jb21tZW50ID0gc3RhdGUuY29tbWVudDsKICAgIH0gLy8gVE9ETzogc2ltcGxpZnkgdGhpcyBsb29wCgoKICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJ1xuJyB8fCBzdGF0ZS50b2tlbiA9PT0gJzsnKSB7CiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvbgogICAgICBpZiAoYmxvY2tzLmxlbmd0aCA9PT0gMCAmJiBub2RlKSB7CiAgICAgICAgdmlzaWJsZSA9IHN0YXRlLnRva2VuICE9PSAnOyc7CiAgICAgICAgYmxvY2tzLnB1c2goewogICAgICAgICAgbm9kZTogbm9kZSwKICAgICAgICAgIHZpc2libGU6IHZpc2libGUKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgZ2V0VG9rZW4oc3RhdGUpOwoKICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnXG4nICYmIHN0YXRlLnRva2VuICE9PSAnOycgJiYgc3RhdGUudG9rZW4gIT09ICcnKSB7CiAgICAgICAgbm9kZSA9IHBhcnNlQXNzaWdubWVudChzdGF0ZSk7CiAgICAgICAgbm9kZS5jb21tZW50ID0gc3RhdGUuY29tbWVudDsKICAgICAgICB2aXNpYmxlID0gc3RhdGUudG9rZW4gIT09ICc7JzsKICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICBub2RlOiBub2RlLAogICAgICAgICAgdmlzaWJsZTogdmlzaWJsZQogICAgICAgIH0pOwogICAgICB9CiAgICB9CgogICAgaWYgKGJsb2Nrcy5sZW5ndGggPiAwKSB7CiAgICAgIHJldHVybiBuZXcgQmxvY2tOb2RlKGJsb2Nrcyk7CiAgICB9IGVsc2UgewogICAgICBpZiAoIW5vZGUpIHsKICAgICAgICBub2RlID0gbmV3IENvbnN0YW50Tm9kZSh1bmRlZmluZWQpOwogICAgICAgIG5vZGUuY29tbWVudCA9IHN0YXRlLmNvbW1lbnQ7CiAgICAgIH0KCiAgICAgIHJldHVybiBub2RlOwogICAgfQogIH0KICAvKioKICAgKiBBc3NpZ25tZW50IG9mIGEgZnVuY3Rpb24gb3IgdmFyaWFibGUsCiAgICogLSBjYW4gYmUgYSB2YXJpYWJsZSBsaWtlICdhPTIuMycKICAgKiAtIG9yIGEgdXBkYXRpbmcgYW4gZXhpc3RpbmcgdmFyaWFibGUgbGlrZSAnbWF0cml4KDIsMzo1KT1bNiw3LDhdJwogICAqIC0gZGVmaW5pbmcgYSBmdW5jdGlvbiBsaWtlICdmKHgpID0geF4yJwogICAqIEByZXR1cm4ge05vZGV9IG5vZGUKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gcGFyc2VBc3NpZ25tZW50KHN0YXRlKSB7CiAgICB2YXIgbmFtZSwgYXJncywgdmFsdWUsIHZhbGlkOwogICAgdmFyIG5vZGUgPSBwYXJzZUNvbmRpdGlvbmFsKHN0YXRlKTsKCiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICc9JykgewogICAgICBpZiAoT2JqZWN0KGlzWyJKIiAvKiBpc1N5bWJvbE5vZGUgKi9dKShub2RlKSkgewogICAgICAgIC8vIHBhcnNlIGEgdmFyaWFibGUgYXNzaWdubWVudCBsaWtlICdhID0gMi8zJwogICAgICAgIG5hbWUgPSBub2RlLm5hbWU7CiAgICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7CiAgICAgICAgdmFsdWUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpOwogICAgICAgIHJldHVybiBuZXcgQXNzaWdubWVudE5vZGUobmV3IFN5bWJvbE5vZGUobmFtZSksIHZhbHVlKTsKICAgICAgfSBlbHNlIGlmIChPYmplY3QoaXNbImEiIC8qIGlzQWNjZXNzb3JOb2RlICovXSkobm9kZSkpIHsKICAgICAgICAvLyBwYXJzZSBhIG1hdHJpeCBzdWJzZXQgYXNzaWdubWVudCBsaWtlICdBWzEsMl0gPSA0JwogICAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpOwogICAgICAgIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTsKICAgICAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnROb2RlKG5vZGUub2JqZWN0LCBub2RlLmluZGV4LCB2YWx1ZSk7CiAgICAgIH0gZWxzZSBpZiAoT2JqZWN0KGlzWyJyIiAvKiBpc0Z1bmN0aW9uTm9kZSAqL10pKG5vZGUpICYmIE9iamVjdChpc1siSiIgLyogaXNTeW1ib2xOb2RlICovXSkobm9kZS5mbikpIHsKICAgICAgICAvLyBwYXJzZSBmdW5jdGlvbiBhc3NpZ25tZW50IGxpa2UgJ2YoeCkgPSB4XjInCiAgICAgICAgdmFsaWQgPSB0cnVlOwogICAgICAgIGFyZ3MgPSBbXTsKICAgICAgICBuYW1lID0gbm9kZS5uYW1lOwogICAgICAgIG5vZGUuYXJncy5mb3JFYWNoKGZ1bmN0aW9uIChhcmcsIGluZGV4KSB7CiAgICAgICAgICBpZiAoT2JqZWN0KGlzWyJKIiAvKiBpc1N5bWJvbE5vZGUgKi9dKShhcmcpKSB7CiAgICAgICAgICAgIGFyZ3NbaW5kZXhdID0gYXJnLm5hbWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBpZiAodmFsaWQpIHsKICAgICAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpOwogICAgICAgICAgdmFsdWUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpOwogICAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKG5hbWUsIGFyZ3MsIHZhbHVlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnSW52YWxpZCBsZWZ0IGhhbmQgc2lkZSBvZiBhc3NpZ25tZW50IG9wZXJhdG9yID0nKTsKICAgIH0KCiAgICByZXR1cm4gbm9kZTsKICB9CiAgLyoqCiAgICogY29uZGl0aW9uYWwgb3BlcmF0aW9uCiAgICoKICAgKiAgICAgY29uZGl0aW9uID8gdHJ1ZVBhcnQgOiBmYWxzZVBhcnQKICAgKgogICAqIE5vdGU6IGNvbmRpdGlvbmFsIG9wZXJhdG9yIGlzIHJpZ2h0LWFzc29jaWF0aXZlCiAgICoKICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlCiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIHBhcnNlQ29uZGl0aW9uYWwoc3RhdGUpIHsKICAgIHZhciBub2RlID0gcGFyc2VMb2dpY2FsT3Ioc3RhdGUpOwoKICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJz8nKSB7CiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvbgogICAgICAvLyBzZXQgYSBjb25kaXRpb25hbCBsZXZlbCwgdGhlIHJhbmdlIG9wZXJhdG9yIHdpbGwgYmUgaWdub3JlZCBhcyBsb25nCiAgICAgIC8vIGFzIGNvbmRpdGlvbmFsTGV2ZWwgPT09IHN0YXRlLm5lc3RpbmdMZXZlbC4KICAgICAgdmFyIHByZXYgPSBzdGF0ZS5jb25kaXRpb25hbExldmVsOwogICAgICBzdGF0ZS5jb25kaXRpb25hbExldmVsID0gc3RhdGUubmVzdGluZ0xldmVsOwogICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTsKICAgICAgdmFyIGNvbmRpdGlvbiA9IG5vZGU7CiAgICAgIHZhciB0cnVlRXhwciA9IHBhcnNlQXNzaWdubWVudChzdGF0ZSk7CiAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJzonKSB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ0ZhbHNlIHBhcnQgb2YgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBleHBlY3RlZCcpOwogICAgICBzdGF0ZS5jb25kaXRpb25hbExldmVsID0gbnVsbDsKICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7CiAgICAgIHZhciBmYWxzZUV4cHIgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpOyAvLyBOb3RlOiBjaGVjayBmb3IgY29uZGl0aW9uYWwgb3BlcmF0b3IgYWdhaW4sIHJpZ2h0IGFzc29jaWF0aXZpdHkKCiAgICAgIG5vZGUgPSBuZXcgQ29uZGl0aW9uYWxOb2RlKGNvbmRpdGlvbiwgdHJ1ZUV4cHIsIGZhbHNlRXhwcik7IC8vIHJlc3RvcmUgdGhlIHByZXZpb3VzIGNvbmRpdGlvbmFsIGxldmVsCgogICAgICBzdGF0ZS5jb25kaXRpb25hbExldmVsID0gcHJldjsKICAgIH0KCiAgICByZXR1cm4gbm9kZTsKICB9CiAgLyoqCiAgICogbG9naWNhbCBvciwgJ3ggb3IgeScKICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlCiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIHBhcnNlTG9naWNhbE9yKHN0YXRlKSB7CiAgICB2YXIgbm9kZSA9IHBhcnNlTG9naWNhbFhvcihzdGF0ZSk7CgogICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnb3InKSB7CiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvbgogICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTsKICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJ29yJywgJ29yJywgW25vZGUsIHBhcnNlTG9naWNhbFhvcihzdGF0ZSldKTsKICAgIH0KCiAgICByZXR1cm4gbm9kZTsKICB9CiAgLyoqCiAgICogbG9naWNhbCBleGNsdXNpdmUgb3IsICd4IHhvciB5JwogICAqIEByZXR1cm4ge05vZGV9IG5vZGUKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gcGFyc2VMb2dpY2FsWG9yKHN0YXRlKSB7CiAgICB2YXIgbm9kZSA9IHBhcnNlTG9naWNhbEFuZChzdGF0ZSk7CgogICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAneG9yJykgewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb24KICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7CiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCd4b3InLCAneG9yJywgW25vZGUsIHBhcnNlTG9naWNhbEFuZChzdGF0ZSldKTsKICAgIH0KCiAgICByZXR1cm4gbm9kZTsKICB9CiAgLyoqCiAgICogbG9naWNhbCBhbmQsICd4IGFuZCB5JwogICAqIEByZXR1cm4ge05vZGV9IG5vZGUKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gcGFyc2VMb2dpY2FsQW5kKHN0YXRlKSB7CiAgICB2YXIgbm9kZSA9IHBhcnNlQml0d2lzZU9yKHN0YXRlKTsKCiAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICdhbmQnKSB7CiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvbgogICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTsKICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJ2FuZCcsICdhbmQnLCBbbm9kZSwgcGFyc2VCaXR3aXNlT3Ioc3RhdGUpXSk7CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfQogIC8qKgogICAqIGJpdHdpc2Ugb3IsICd4IHwgeScKICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlCiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIHBhcnNlQml0d2lzZU9yKHN0YXRlKSB7CiAgICB2YXIgbm9kZSA9IHBhcnNlQml0d2lzZVhvcihzdGF0ZSk7CgogICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnfCcpIHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uCiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpOwogICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZSgnfCcsICdiaXRPcicsIFtub2RlLCBwYXJzZUJpdHdpc2VYb3Ioc3RhdGUpXSk7CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfQogIC8qKgogICAqIGJpdHdpc2UgZXhjbHVzaXZlIG9yICh4b3IpLCAneCBefCB5JwogICAqIEByZXR1cm4ge05vZGV9IG5vZGUKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gcGFyc2VCaXR3aXNlWG9yKHN0YXRlKSB7CiAgICB2YXIgbm9kZSA9IHBhcnNlQml0d2lzZUFuZChzdGF0ZSk7CgogICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnXnwnKSB7CiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvbgogICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTsKICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJ158JywgJ2JpdFhvcicsIFtub2RlLCBwYXJzZUJpdHdpc2VBbmQoc3RhdGUpXSk7CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfQogIC8qKgogICAqIGJpdHdpc2UgYW5kLCAneCAmIHknCiAgICogQHJldHVybiB7Tm9kZX0gbm9kZQogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBwYXJzZUJpdHdpc2VBbmQoc3RhdGUpIHsKICAgIHZhciBub2RlID0gcGFyc2VSZWxhdGlvbmFsKHN0YXRlKTsKCiAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICcmJykgewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb24KICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7CiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCcmJywgJ2JpdEFuZCcsIFtub2RlLCBwYXJzZVJlbGF0aW9uYWwoc3RhdGUpXSk7CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfQogIC8qKgogICAqIFBhcnNlIGEgY2hhaW5lZCBjb25kaXRpb25hbCwgbGlrZSAnYSA+IGIgPj0gYycKICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlCiAgICovCgoKICBmdW5jdGlvbiBwYXJzZVJlbGF0aW9uYWwoc3RhdGUpIHsKICAgIHZhciBwYXJhbXMgPSBbcGFyc2VTaGlmdChzdGF0ZSldOwogICAgdmFyIGNvbmRpdGlvbmFscyA9IFtdOwogICAgdmFyIG9wZXJhdG9ycyA9IHsKICAgICAgJz09JzogJ2VxdWFsJywKICAgICAgJyE9JzogJ3VuZXF1YWwnLAogICAgICAnPCc6ICdzbWFsbGVyJywKICAgICAgJz4nOiAnbGFyZ2VyJywKICAgICAgJzw9JzogJ3NtYWxsZXJFcScsCiAgICAgICc+PSc6ICdsYXJnZXJFcScKICAgIH07CgogICAgd2hpbGUgKE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkob3BlcmF0b3JzLCBzdGF0ZS50b2tlbikpIHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uCiAgICAgIHZhciBjb25kID0gewogICAgICAgIG5hbWU6IHN0YXRlLnRva2VuLAogICAgICAgIGZuOiBvcGVyYXRvcnNbc3RhdGUudG9rZW5dCiAgICAgIH07CiAgICAgIGNvbmRpdGlvbmFscy5wdXNoKGNvbmQpOwogICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTsKICAgICAgcGFyYW1zLnB1c2gocGFyc2VTaGlmdChzdGF0ZSkpOwogICAgfQoKICAgIGlmIChwYXJhbXMubGVuZ3RoID09PSAxKSB7CiAgICAgIHJldHVybiBwYXJhbXNbMF07CiAgICB9IGVsc2UgaWYgKHBhcmFtcy5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoY29uZGl0aW9uYWxzWzBdLm5hbWUsIGNvbmRpdGlvbmFsc1swXS5mbiwgcGFyYW1zKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgUmVsYXRpb25hbE5vZGUoY29uZGl0aW9uYWxzLm1hcChmdW5jdGlvbiAoYykgewogICAgICAgIHJldHVybiBjLmZuOwogICAgICB9KSwgcGFyYW1zKTsKICAgIH0KICB9CiAgLyoqCiAgICogQml0d2lzZSBsZWZ0IHNoaWZ0LCBiaXR3aXNlIHJpZ2h0IGFyaXRobWV0aWMgc2hpZnQsIGJpdHdpc2UgcmlnaHQgbG9naWNhbCBzaGlmdAogICAqIEByZXR1cm4ge05vZGV9IG5vZGUKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gcGFyc2VTaGlmdChzdGF0ZSkgewogICAgdmFyIG5vZGUsIG5hbWUsIGZuLCBwYXJhbXM7CiAgICBub2RlID0gcGFyc2VDb252ZXJzaW9uKHN0YXRlKTsKICAgIHZhciBvcGVyYXRvcnMgPSB7CiAgICAgICc8PCc6ICdsZWZ0U2hpZnQnLAogICAgICAnPj4nOiAncmlnaHRBcml0aFNoaWZ0JywKICAgICAgJz4+Pic6ICdyaWdodExvZ1NoaWZ0JwogICAgfTsKCiAgICB3aGlsZSAoT2JqZWN0KHV0aWxzX29iamVjdFsiZiIgLyogaGFzT3duUHJvcGVydHkgKi9dKShvcGVyYXRvcnMsIHN0YXRlLnRva2VuKSkgewogICAgICBuYW1lID0gc3RhdGUudG9rZW47CiAgICAgIGZuID0gb3BlcmF0b3JzW25hbWVdOwogICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTsKICAgICAgcGFyYW1zID0gW25vZGUsIHBhcnNlQ29udmVyc2lvbihzdGF0ZSldOwogICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZShuYW1lLCBmbiwgcGFyYW1zKTsKICAgIH0KCiAgICByZXR1cm4gbm9kZTsKICB9CiAgLyoqCiAgICogY29udmVyc2lvbiBvcGVyYXRvcnMgJ3RvJyBhbmQgJ2luJwogICAqIEByZXR1cm4ge05vZGV9IG5vZGUKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gcGFyc2VDb252ZXJzaW9uKHN0YXRlKSB7CiAgICB2YXIgbm9kZSwgbmFtZSwgZm4sIHBhcmFtczsKICAgIG5vZGUgPSBwYXJzZVJhbmdlKHN0YXRlKTsKICAgIHZhciBvcGVyYXRvcnMgPSB7CiAgICAgIHRvOiAndG8nLAogICAgICAiaW4iOiAndG8nIC8vIGFsaWFzIG9mICd0bycKCiAgICB9OwoKICAgIHdoaWxlIChPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKG9wZXJhdG9ycywgc3RhdGUudG9rZW4pKSB7CiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjsKICAgICAgZm4gPSBvcGVyYXRvcnNbbmFtZV07CiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpOwoKICAgICAgaWYgKG5hbWUgPT09ICdpbicgJiYgc3RhdGUudG9rZW4gPT09ICcnKSB7CiAgICAgICAgLy8gZW5kIG9mIGV4cHJlc3Npb24gLT4gdGhpcyBpcyB0aGUgdW5pdCAnaW4nICgnaW5jaCcpCiAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZSwgbmV3IFN5bWJvbE5vZGUoJ2luJyldLCB0cnVlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBvcGVyYXRvciAnYSB0byBiJyBvciAnYSBpbiBiJwogICAgICAgIHBhcmFtcyA9IFtub2RlLCBwYXJzZVJhbmdlKHN0YXRlKV07CiAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUobmFtZSwgZm4sIHBhcmFtcyk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbm9kZTsKICB9CiAgLyoqCiAgICogcGFyc2UgcmFuZ2UsICJzdGFydDplbmQiLCAic3RhcnQ6c3RlcDplbmQiLCAiOiIsICJzdGFydDoiLCAiOmVuZCIsIGV0YwogICAqIEByZXR1cm4ge05vZGV9IG5vZGUKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gcGFyc2VSYW5nZShzdGF0ZSkgewogICAgdmFyIG5vZGU7CiAgICB2YXIgcGFyYW1zID0gW107CgogICAgaWYgKHN0YXRlLnRva2VuID09PSAnOicpIHsKICAgICAgLy8gaW1wbGljaXQgc3RhcnQ9MSAob25lLWJhc2VkKQogICAgICBub2RlID0gbmV3IENvbnN0YW50Tm9kZSgxKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIGV4cGxpY2l0IHN0YXJ0CiAgICAgIG5vZGUgPSBwYXJzZUFkZFN1YnRyYWN0KHN0YXRlKTsKICAgIH0KCiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICc6JyAmJiBzdGF0ZS5jb25kaXRpb25hbExldmVsICE9PSBzdGF0ZS5uZXN0aW5nTGV2ZWwpIHsKICAgICAgLy8gd2UgaWdub3JlIHRoZSByYW5nZSBvcGVyYXRvciB3aGVuIGEgY29uZGl0aW9uYWwgb3BlcmF0b3IgaXMgYmVpbmcgcHJvY2Vzc2VkIG9uIHRoZSBzYW1lIGxldmVsCiAgICAgIHBhcmFtcy5wdXNoKG5vZGUpOyAvLyBwYXJzZSBzdGVwIGFuZCBlbmQKCiAgICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJzonICYmIHBhcmFtcy5sZW5ndGggPCAzKSB7CiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uCiAgICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7CgogICAgICAgIGlmIChzdGF0ZS50b2tlbiA9PT0gJyknIHx8IHN0YXRlLnRva2VuID09PSAnXScgfHwgc3RhdGUudG9rZW4gPT09ICcsJyB8fCBzdGF0ZS50b2tlbiA9PT0gJycpIHsKICAgICAgICAgIC8vIGltcGxpY2l0IGVuZAogICAgICAgICAgcGFyYW1zLnB1c2gobmV3IFN5bWJvbE5vZGUoJ2VuZCcpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gZXhwbGljaXQgZW5kCiAgICAgICAgICBwYXJhbXMucHVzaChwYXJzZUFkZFN1YnRyYWN0KHN0YXRlKSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMykgewogICAgICAgIC8vIHBhcmFtcyA9IFtzdGFydCwgc3RlcCwgZW5kXQogICAgICAgIG5vZGUgPSBuZXcgUmFuZ2VOb2RlKHBhcmFtc1swXSwgcGFyYW1zWzJdLCBwYXJhbXNbMV0pOyAvLyBzdGFydCwgZW5kLCBzdGVwCiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gbGVuZ3RoID09PSAyCiAgICAgICAgLy8gcGFyYW1zID0gW3N0YXJ0LCBlbmRdCiAgICAgICAgbm9kZSA9IG5ldyBSYW5nZU5vZGUocGFyYW1zWzBdLCBwYXJhbXNbMV0pOyAvLyBzdGFydCwgZW5kCiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbm9kZTsKICB9CiAgLyoqCiAgICogYWRkIG9yIHN1YnRyYWN0CiAgICogQHJldHVybiB7Tm9kZX0gbm9kZQogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBwYXJzZUFkZFN1YnRyYWN0KHN0YXRlKSB7CiAgICB2YXIgbm9kZSwgbmFtZSwgZm4sIHBhcmFtczsKICAgIG5vZGUgPSBwYXJzZU11bHRpcGx5RGl2aWRlKHN0YXRlKTsKICAgIHZhciBvcGVyYXRvcnMgPSB7CiAgICAgICcrJzogJ2FkZCcsCiAgICAgICctJzogJ3N1YnRyYWN0JwogICAgfTsKCiAgICB3aGlsZSAoT2JqZWN0KHV0aWxzX29iamVjdFsiZiIgLyogaGFzT3duUHJvcGVydHkgKi9dKShvcGVyYXRvcnMsIHN0YXRlLnRva2VuKSkgewogICAgICBuYW1lID0gc3RhdGUudG9rZW47CiAgICAgIGZuID0gb3BlcmF0b3JzW25hbWVdOwogICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTsKICAgICAgcGFyYW1zID0gW25vZGUsIHBhcnNlTXVsdGlwbHlEaXZpZGUoc3RhdGUpXTsKICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUobmFtZSwgZm4sIHBhcmFtcyk7CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfQogIC8qKgogICAqIG11bHRpcGx5LCBkaXZpZGUsIG1vZHVsdXMKICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlCiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIHBhcnNlTXVsdGlwbHlEaXZpZGUoc3RhdGUpIHsKICAgIHZhciBub2RlLCBsYXN0LCBuYW1lLCBmbjsKICAgIG5vZGUgPSBwYXJzZUltcGxpY2l0TXVsdGlwbGljYXRpb24oc3RhdGUpOwogICAgbGFzdCA9IG5vZGU7CiAgICB2YXIgb3BlcmF0b3JzID0gewogICAgICAnKic6ICdtdWx0aXBseScsCiAgICAgICcuKic6ICdkb3RNdWx0aXBseScsCiAgICAgICcvJzogJ2RpdmlkZScsCiAgICAgICcuLyc6ICdkb3REaXZpZGUnLAogICAgICAnJSc6ICdtb2QnLAogICAgICBtb2Q6ICdtb2QnCiAgICB9OwoKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGlmIChPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKG9wZXJhdG9ycywgc3RhdGUudG9rZW4pKSB7CiAgICAgICAgLy8gZXhwbGljaXQgb3BlcmF0b3JzCiAgICAgICAgbmFtZSA9IHN0YXRlLnRva2VuOwogICAgICAgIGZuID0gb3BlcmF0b3JzW25hbWVdOwogICAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpOwogICAgICAgIGxhc3QgPSBwYXJzZUltcGxpY2l0TXVsdGlwbGljYXRpb24oc3RhdGUpOwogICAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKG5hbWUsIGZuLCBbbm9kZSwgbGFzdF0pOwogICAgICB9IGVsc2UgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfQogIC8qKgogICAqIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uCiAgICogQHJldHVybiB7Tm9kZX0gbm9kZQogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBwYXJzZUltcGxpY2l0TXVsdGlwbGljYXRpb24oc3RhdGUpIHsKICAgIHZhciBub2RlLCBsYXN0OwogICAgbm9kZSA9IHBhcnNlUnVsZTIoc3RhdGUpOwogICAgbGFzdCA9IG5vZGU7CgogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKHN0YXRlLnRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLlNZTUJPTCB8fCBzdGF0ZS50b2tlbiA9PT0gJ2luJyAmJiBPYmplY3QoaXNbImwiIC8qIGlzQ29uc3RhbnROb2RlICovXSkobm9kZSkgfHwgc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuTlVNQkVSICYmICFPYmplY3QoaXNbImwiIC8qIGlzQ29uc3RhbnROb2RlICovXSkobGFzdCkgJiYgKCFPYmplY3QoaXNbIkIiIC8qIGlzT3BlcmF0b3JOb2RlICovXSkobGFzdCkgfHwgbGFzdC5vcCA9PT0gJyEnKSB8fCBzdGF0ZS50b2tlbiA9PT0gJygnKSB7CiAgICAgICAgLy8gcGFyc2UgaW1wbGljaXQgbXVsdGlwbGljYXRpb24KICAgICAgICAvLwogICAgICAgIC8vIHN5bWJvbDogICAgICBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvbiBsaWtlICcyYScsICcoMiszKWEnLCAnYSBiJwogICAgICAgIC8vIG51bWJlcjogICAgICBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvbiBsaWtlICcoMiszKTInCiAgICAgICAgLy8gcGFyZW50aGVzaXM6IGltcGxpY2l0IG11bHRpcGxpY2F0aW9uIGxpa2UgJzIoMys0KScsICcoMys0KSgxKzIpJwogICAgICAgIGxhc3QgPSBwYXJzZVJ1bGUyKHN0YXRlKTsKICAgICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLCBsYXN0XSwgdHJ1ZQogICAgICAgIC8qIGltcGxpY2l0ICovCiAgICAgICAgKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBub2RlOwogIH0KICAvKioKICAgKiBJbmZhbW91cyAicnVsZSAyIiBhcyBkZXNjcmliZWQgaW4gaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvaXNzdWVzLzc5MiNpc3N1ZWNvbW1lbnQtMzYxMDY1MzcwCiAgICogRXhwbGljaXQgZGl2aXNpb24gZ2V0cyBoaWdoZXIgcHJlY2VkZW5jZSB0aGFuIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uCiAgICogd2hlbiB0aGUgZGl2aXNpb24gbWF0Y2hlcyB0aGlzIHBhdHRlcm46IFtudW1iZXJdIC8gW251bWJlcl0gW3N5bWJvbF0KICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlCiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIHBhcnNlUnVsZTIoc3RhdGUpIHsKICAgIHZhciBub2RlID0gcGFyc2VVbmFyeShzdGF0ZSk7CiAgICB2YXIgbGFzdCA9IG5vZGU7CiAgICB2YXIgdG9rZW5TdGF0ZXMgPSBbXTsKCiAgICB3aGlsZSAodHJ1ZSkgewogICAgICAvLyBNYXRjaCB0aGUgIm51bWJlciAvIiBwYXJ0IG9mIHRoZSBwYXR0ZXJuICJudW1iZXIgLyBudW1iZXIgc3ltYm9sIgogICAgICBpZiAoc3RhdGUudG9rZW4gPT09ICcvJyAmJiBPYmplY3QoaXNbImwiIC8qIGlzQ29uc3RhbnROb2RlICovXSkobGFzdCkpIHsKICAgICAgICAvLyBMb29rIGFoZWFkIHRvIHNlZSBpZiB0aGUgbmV4dCB0b2tlbiBpcyBhIG51bWJlcgogICAgICAgIHRva2VuU3RhdGVzLnB1c2gocGFyc2VfZXh0ZW5kcyh7fSwgc3RhdGUpKTsKICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTsgLy8gTWF0Y2ggdGhlICJudW1iZXIgLyBudW1iZXIiIHBhcnQgb2YgdGhlIHBhdHRlcm4KCiAgICAgICAgaWYgKHN0YXRlLnRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLk5VTUJFUikgewogICAgICAgICAgLy8gTG9vayBhaGVhZCBhZ2FpbgogICAgICAgICAgdG9rZW5TdGF0ZXMucHVzaChwYXJzZV9leHRlbmRzKHt9LCBzdGF0ZSkpOwogICAgICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7IC8vIE1hdGNoIHRoZSAic3ltYm9sIiBwYXJ0IG9mIHRoZSBwYXR0ZXJuLCBvciBhIGxlZnQgcGFyZW50aGVzaXMKCiAgICAgICAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuU1lNQk9MIHx8IHN0YXRlLnRva2VuID09PSAnKCcpIHsKICAgICAgICAgICAgLy8gV2UndmUgbWF0Y2hlZCB0aGUgcGF0dGVybiAibnVtYmVyIC8gbnVtYmVyIHN5bWJvbCIuCiAgICAgICAgICAgIC8vIFJld2luZCBvbmNlIGFuZCBidWlsZCB0aGUgIm51bWJlciAvIG51bWJlciIgbm9kZTsgdGhlIHN5bWJvbCB3aWxsIGJlIGNvbnN1bWVkIGxhdGVyCiAgICAgICAgICAgIHBhcnNlX2V4dGVuZHMoc3RhdGUsIHRva2VuU3RhdGVzLnBvcCgpKTsKCiAgICAgICAgICAgIHRva2VuU3RhdGVzLnBvcCgpOwogICAgICAgICAgICBsYXN0ID0gcGFyc2VVbmFyeShzdGF0ZSk7CiAgICAgICAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtub2RlLCBsYXN0XSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBOb3QgYSBtYXRjaCwgc28gcmV3aW5kCiAgICAgICAgICAgIHRva2VuU3RhdGVzLnBvcCgpOwoKICAgICAgICAgICAgcGFyc2VfZXh0ZW5kcyhzdGF0ZSwgdG9rZW5TdGF0ZXMucG9wKCkpOwoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIE5vdCBhIG1hdGNoLCBzbyByZXdpbmQKICAgICAgICAgIHBhcnNlX2V4dGVuZHMoc3RhdGUsIHRva2VuU3RhdGVzLnBvcCgpKTsKCiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbm9kZTsKICB9CiAgLyoqCiAgICogVW5hcnkgcGx1cyBhbmQgbWludXMsIGFuZCBsb2dpY2FsIGFuZCBiaXR3aXNlIG5vdAogICAqIEByZXR1cm4ge05vZGV9IG5vZGUKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gcGFyc2VVbmFyeShzdGF0ZSkgewogICAgdmFyIG5hbWUsIHBhcmFtcywgZm47CiAgICB2YXIgb3BlcmF0b3JzID0gewogICAgICAnLSc6ICd1bmFyeU1pbnVzJywKICAgICAgJysnOiAndW5hcnlQbHVzJywKICAgICAgJ34nOiAnYml0Tm90JywKICAgICAgbm90OiAnbm90JwogICAgfTsKCiAgICBpZiAoT2JqZWN0KHV0aWxzX29iamVjdFsiZiIgLyogaGFzT3duUHJvcGVydHkgKi9dKShvcGVyYXRvcnMsIHN0YXRlLnRva2VuKSkgewogICAgICBmbiA9IG9wZXJhdG9yc1tzdGF0ZS50b2tlbl07CiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjsKICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7CiAgICAgIHBhcmFtcyA9IFtwYXJzZVVuYXJ5KHN0YXRlKV07CiAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5hbWUsIGZuLCBwYXJhbXMpOwogICAgfQoKICAgIHJldHVybiBwYXJzZVBvdyhzdGF0ZSk7CiAgfQogIC8qKgogICAqIHBvd2VyCiAgICogTm90ZTogcG93ZXIgb3BlcmF0b3IgaXMgcmlnaHQgYXNzb2NpYXRpdmUKICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlCiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIHBhcnNlUG93KHN0YXRlKSB7CiAgICB2YXIgbm9kZSwgbmFtZSwgZm4sIHBhcmFtczsKICAgIG5vZGUgPSBwYXJzZUxlZnRIYW5kT3BlcmF0b3JzKHN0YXRlKTsKCiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICdeJyB8fCBzdGF0ZS50b2tlbiA9PT0gJy5eJykgewogICAgICBuYW1lID0gc3RhdGUudG9rZW47CiAgICAgIGZuID0gbmFtZSA9PT0gJ14nID8gJ3BvdycgOiAnZG90UG93JzsKICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7CiAgICAgIHBhcmFtcyA9IFtub2RlLCBwYXJzZVVuYXJ5KHN0YXRlKV07IC8vIEdvIGJhY2sgdG8gdW5hcnksIHdlIGNhbiBoYXZlICcyXi0zJwoKICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUobmFtZSwgZm4sIHBhcmFtcyk7CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfQogIC8qKgogICAqIExlZnQgaGFuZCBvcGVyYXRvcnM6IGZhY3RvcmlhbCB4ISwgY3RyYW5zcG9zZSB4JwogICAqIEByZXR1cm4ge05vZGV9IG5vZGUKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gcGFyc2VMZWZ0SGFuZE9wZXJhdG9ycyhzdGF0ZSkgewogICAgdmFyIG5vZGUsIG5hbWUsIGZuLCBwYXJhbXM7CiAgICBub2RlID0gcGFyc2VDdXN0b21Ob2RlcyhzdGF0ZSk7CiAgICB2YXIgb3BlcmF0b3JzID0gewogICAgICAnISc6ICdmYWN0b3JpYWwnLAogICAgICAnXCcnOiAnY3RyYW5zcG9zZScKICAgIH07CgogICAgd2hpbGUgKE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkob3BlcmF0b3JzLCBzdGF0ZS50b2tlbikpIHsKICAgICAgbmFtZSA9IHN0YXRlLnRva2VuOwogICAgICBmbiA9IG9wZXJhdG9yc1tuYW1lXTsKICAgICAgZ2V0VG9rZW4oc3RhdGUpOwogICAgICBwYXJhbXMgPSBbbm9kZV07CiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKG5hbWUsIGZuLCBwYXJhbXMpOwogICAgICBub2RlID0gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIG5vZGUpOwogICAgfQoKICAgIHJldHVybiBub2RlOwogIH0KICAvKioKICAgKiBQYXJzZSBhIGN1c3RvbSBub2RlIGhhbmRsZXIuIEEgbm9kZSBoYW5kbGVyIGNhbiBiZSB1c2VkIHRvIHByb2Nlc3MKICAgKiBub2RlcyBpbiBhIGN1c3RvbSB3YXksIGZvciBleGFtcGxlIGZvciBoYW5kbGluZyBhIHBsb3QuCiAgICoKICAgKiBBIGhhbmRsZXIgbXVzdCBiZSBwYXNzZWQgYXMgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBwYXJzZSBmdW5jdGlvbi4KICAgKiAtIG11c3QgZXh0ZW5kIG1hdGguZXhwcmVzc2lvbi5ub2RlLk5vZGUKICAgKiAtIG11c3QgY29udGFpbiBhIGZ1bmN0aW9uIF9jb21waWxlKGRlZnM6IE9iamVjdCkgOiBzdHJpbmcKICAgKiAtIG11c3QgY29udGFpbiBhIGZ1bmN0aW9uIGZpbmQoZmlsdGVyOiBPYmplY3QpIDogTm9kZVtdCiAgICogLSBtdXN0IGNvbnRhaW4gYSBmdW5jdGlvbiB0b1N0cmluZygpIDogc3RyaW5nCiAgICogLSB0aGUgY29uc3RydWN0b3IgaXMgY2FsbGVkIHdpdGggYSBzaW5nbGUgYXJndW1lbnQgY29udGFpbmluZyBhbGwgcGFyYW1ldGVycwogICAqCiAgICogRm9yIGV4YW1wbGU6CiAgICoKICAgKiAgICAgbm9kZXMgPSB7CiAgICogICAgICAgJ3Bsb3QnOiBQbG90SGFuZGxlcgogICAqICAgICB9CiAgICoKICAgKiBUaGUgY29uc3RydWN0b3Igb2YgdGhlIGhhbmRsZXIgaXMgY2FsbGVkIGFzOgogICAqCiAgICogICAgIG5vZGUgPSBuZXcgUGxvdEhhbmRsZXIocGFyYW1zKQogICAqCiAgICogVGhlIGhhbmRsZXIgd2lsbCBiZSBpbnZva2VkIHdoZW4gZXZhbHVhdGluZyBhbiBleHByZXNzaW9uIGxpa2U6CiAgICoKICAgKiAgICAgbm9kZSA9IG1hdGgucGFyc2UoJ3Bsb3Qoc2luKHgpLCB4KScsIG5vZGVzKQogICAqCiAgICogQHJldHVybiB7Tm9kZX0gbm9kZQogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBwYXJzZUN1c3RvbU5vZGVzKHN0YXRlKSB7CiAgICB2YXIgcGFyYW1zID0gW107CgogICAgaWYgKHN0YXRlLnRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLlNZTUJPTCAmJiBPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKHN0YXRlLmV4dHJhTm9kZXMsIHN0YXRlLnRva2VuKSkgewogICAgICB2YXIgQ3VzdG9tTm9kZSA9IHN0YXRlLmV4dHJhTm9kZXNbc3RhdGUudG9rZW5dOwogICAgICBnZXRUb2tlbihzdGF0ZSk7IC8vIHBhcnNlIHBhcmFtZXRlcnMKCiAgICAgIGlmIChzdGF0ZS50b2tlbiA9PT0gJygnKSB7CiAgICAgICAgcGFyYW1zID0gW107CiAgICAgICAgb3BlblBhcmFtcyhzdGF0ZSk7CiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpOwoKICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICcpJykgewogICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBc3NpZ25tZW50KHN0YXRlKSk7IC8vIHBhcnNlIGEgbGlzdCB3aXRoIHBhcmFtZXRlcnMKCiAgICAgICAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICcsJykgewogICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb24KICAgICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpOwogICAgICAgICAgICBwYXJhbXMucHVzaChwYXJzZUFzc2lnbm1lbnQoc3RhdGUpKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJyknKSB7CiAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1BhcmVudGhlc2lzICkgZXhwZWN0ZWQnKTsKICAgICAgICB9CgogICAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTsKICAgICAgICBnZXRUb2tlbihzdGF0ZSk7CiAgICAgIH0gLy8gY3JlYXRlIGEgbmV3IGN1c3RvbSBub2RlCiAgICAgIC8vIG5vaW5zcGVjdGlvbiBKU1ZhbGlkYXRlVHlwZXMKCgogICAgICByZXR1cm4gbmV3IEN1c3RvbU5vZGUocGFyYW1zKTsKICAgIH0KCiAgICByZXR1cm4gcGFyc2VTeW1ib2woc3RhdGUpOwogIH0KICAvKioKICAgKiBwYXJzZSBzeW1ib2xzOiBmdW5jdGlvbnMsIHZhcmlhYmxlcywgY29uc3RhbnRzLCB1bml0cwogICAqIEByZXR1cm4ge05vZGV9IG5vZGUKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gcGFyc2VTeW1ib2woc3RhdGUpIHsKICAgIHZhciBub2RlLCBuYW1lOwoKICAgIGlmIChzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5TWU1CT0wgfHwgc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuREVMSU1JVEVSICYmIHN0YXRlLnRva2VuIGluIE5BTUVEX0RFTElNSVRFUlMpIHsKICAgICAgbmFtZSA9IHN0YXRlLnRva2VuOwogICAgICBnZXRUb2tlbihzdGF0ZSk7CgogICAgICBpZiAoT2JqZWN0KHV0aWxzX29iamVjdFsiZiIgLyogaGFzT3duUHJvcGVydHkgKi9dKShDT05TVEFOVFMsIG5hbWUpKSB7CiAgICAgICAgLy8gdHJ1ZSwgZmFsc2UsIG51bGwsIC4uLgogICAgICAgIG5vZGUgPSBuZXcgQ29uc3RhbnROb2RlKENPTlNUQU5UU1tuYW1lXSk7CiAgICAgIH0gZWxzZSBpZiAoTlVNRVJJQ19DT05TVEFOVFMuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHsKICAgICAgICAvLyBOYU4sIEluZmluaXR5CiAgICAgICAgbm9kZSA9IG5ldyBDb25zdGFudE5vZGUobnVtZXJpYyhuYW1lLCAnbnVtYmVyJykpOwogICAgICB9IGVsc2UgewogICAgICAgIG5vZGUgPSBuZXcgU3ltYm9sTm9kZShuYW1lKTsKICAgICAgfSAvLyBwYXJzZSBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFuZCBtYXRyaXggaW5kZXgKCgogICAgICBub2RlID0gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIG5vZGUpOwogICAgICByZXR1cm4gbm9kZTsKICAgIH0KCiAgICByZXR1cm4gcGFyc2VEb3VibGVRdW90ZXNTdHJpbmcoc3RhdGUpOwogIH0KICAvKioKICAgKiBwYXJzZSBhY2Nlc3NvcnM6CiAgICogLSBmdW5jdGlvbiBpbnZvY2F0aW9uIGluIHJvdW5kIGJyYWNrZXRzICguLi4pLCBmb3IgZXhhbXBsZSBzcXJ0KDIpCiAgICogLSBpbmRleCBlbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHMgWy4uLl0sIGZvciBleGFtcGxlIEFbMiwzXQogICAqIC0gZG90IG5vdGF0aW9uIGZvciBwcm9wZXJ0aWVzLCBsaWtlIGZvby5iYXIKICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGUKICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgICAgTm9kZSBvbiB3aGljaCB0byBhcHBseSB0aGUgcGFyYW1ldGVycy4gSWYgdGhlcmUKICAgKiAgICAgICAgICAgICAgICAgICAgICAgYXJlIG5vIHBhcmFtZXRlcnMgaW4gdGhlIGV4cHJlc3Npb24sIHRoZSBub2RlCiAgICogICAgICAgICAgICAgICAgICAgICAgIGl0c2VsZiBpcyByZXR1cm5lZAogICAqIEBwYXJhbSB7c3RyaW5nW119IFt0eXBlc10gIEZpbHRlciB0aGUgdHlwZXMgb2Ygbm90YXRpb25zCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIFsnKCcsICdbJywgJy4nXQogICAqIEByZXR1cm4ge05vZGV9IG5vZGUKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIG5vZGUsIHR5cGVzKSB7CiAgICB2YXIgcGFyYW1zOwoKICAgIHdoaWxlICgoc3RhdGUudG9rZW4gPT09ICcoJyB8fCBzdGF0ZS50b2tlbiA9PT0gJ1snIHx8IHN0YXRlLnRva2VuID09PSAnLicpICYmICghdHlwZXMgfHwgdHlwZXMuaW5kZXhPZihzdGF0ZS50b2tlbikgIT09IC0xKSkgewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb24KICAgICAgcGFyYW1zID0gW107CgogICAgICBpZiAoc3RhdGUudG9rZW4gPT09ICcoJykgewogICAgICAgIGlmIChPYmplY3QoaXNbIkoiIC8qIGlzU3ltYm9sTm9kZSAqL10pKG5vZGUpIHx8IE9iamVjdChpc1siYSIgLyogaXNBY2Nlc3Nvck5vZGUgKi9dKShub2RlKSkgewogICAgICAgICAgLy8gZnVuY3Rpb24gaW52b2NhdGlvbiBsaWtlIGZuKDIsIDMpIG9yIG9iai5mbigyLCAzKQogICAgICAgICAgb3BlblBhcmFtcyhzdGF0ZSk7CiAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7CgogICAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnKScpIHsKICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBc3NpZ25tZW50KHN0YXRlKSk7IC8vIHBhcnNlIGEgbGlzdCB3aXRoIHBhcmFtZXRlcnMKCiAgICAgICAgICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJywnKSB7CiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uCiAgICAgICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpOwogICAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcnNlQXNzaWdubWVudChzdGF0ZSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnKScpIHsKICAgICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdQYXJlbnRoZXNpcyApIGV4cGVjdGVkJyk7CiAgICAgICAgICB9CgogICAgICAgICAgY2xvc2VQYXJhbXMoc3RhdGUpOwogICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpOwogICAgICAgICAgbm9kZSA9IG5ldyBGdW5jdGlvbk5vZGUobm9kZSwgcGFyYW1zKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gaW1wbGljaXQgbXVsdGlwbGljYXRpb24gbGlrZSAoMiszKSg0KzUpIG9yIHNxcnQoMikoMSsyKQogICAgICAgICAgLy8gZG9uJ3QgcGFyc2UgaXQgaGVyZSBidXQgbGV0IGl0IGJlIGhhbmRsZWQgYnkgcGFyc2VJbXBsaWNpdE11bHRpcGxpY2F0aW9uCiAgICAgICAgICAvLyB3aXRoIGNvcnJlY3QgcHJlY2VkZW5jZQogICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHN0YXRlLnRva2VuID09PSAnWycpIHsKICAgICAgICAvLyBpbmRleCBub3RhdGlvbiBsaWtlIHZhcmlhYmxlWzIsIDNdCiAgICAgICAgb3BlblBhcmFtcyhzdGF0ZSk7CiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpOwoKICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICddJykgewogICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBc3NpZ25tZW50KHN0YXRlKSk7IC8vIHBhcnNlIGEgbGlzdCB3aXRoIHBhcmFtZXRlcnMKCiAgICAgICAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICcsJykgewogICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb24KICAgICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpOwogICAgICAgICAgICBwYXJhbXMucHVzaChwYXJzZUFzc2lnbm1lbnQoc3RhdGUpKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ10nKSB7CiAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1BhcmVudGhlc2lzIF0gZXhwZWN0ZWQnKTsKICAgICAgICB9CgogICAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTsKICAgICAgICBnZXRUb2tlbihzdGF0ZSk7CiAgICAgICAgbm9kZSA9IG5ldyBBY2Nlc3Nvck5vZGUobm9kZSwgbmV3IEluZGV4Tm9kZShwYXJhbXMpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBkb3Qgbm90YXRpb24gbGlrZSB2YXJpYWJsZS5wcm9wCiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpOwoKICAgICAgICBpZiAoc3RhdGUudG9rZW5UeXBlICE9PSBUT0tFTlRZUEUuU1lNQk9MKSB7CiAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1Byb3BlcnR5IG5hbWUgZXhwZWN0ZWQgYWZ0ZXIgZG90Jyk7CiAgICAgICAgfQoKICAgICAgICBwYXJhbXMucHVzaChuZXcgQ29uc3RhbnROb2RlKHN0YXRlLnRva2VuKSk7CiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpOwogICAgICAgIHZhciBkb3ROb3RhdGlvbiA9IHRydWU7CiAgICAgICAgbm9kZSA9IG5ldyBBY2Nlc3Nvck5vZGUobm9kZSwgbmV3IEluZGV4Tm9kZShwYXJhbXMsIGRvdE5vdGF0aW9uKSk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbm9kZTsKICB9CiAgLyoqCiAgICogUGFyc2UgYSBkb3VibGUgcXVvdGVzIHN0cmluZy4KICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlCiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIHBhcnNlRG91YmxlUXVvdGVzU3RyaW5nKHN0YXRlKSB7CiAgICB2YXIgbm9kZSwgc3RyOwoKICAgIGlmIChzdGF0ZS50b2tlbiA9PT0gJyInKSB7CiAgICAgIHN0ciA9IHBhcnNlRG91YmxlUXVvdGVzU3RyaW5nVG9rZW4oc3RhdGUpOyAvLyBjcmVhdGUgY29uc3RhbnQKCiAgICAgIG5vZGUgPSBuZXcgQ29uc3RhbnROb2RlKHN0cik7IC8vIHBhcnNlIGluZGV4IHBhcmFtZXRlcnMKCiAgICAgIG5vZGUgPSBwYXJzZUFjY2Vzc29ycyhzdGF0ZSwgbm9kZSk7CiAgICAgIHJldHVybiBub2RlOwogICAgfQoKICAgIHJldHVybiBwYXJzZVNpbmdsZVF1b3Rlc1N0cmluZyhzdGF0ZSk7CiAgfQogIC8qKgogICAqIFBhcnNlIGEgc3RyaW5nIHN1cnJvdW5kZWQgYnkgZG91YmxlIHF1b3RlcyAiLi4uIgogICAqIEByZXR1cm4ge3N0cmluZ30KICAgKi8KCgogIGZ1bmN0aW9uIHBhcnNlRG91YmxlUXVvdGVzU3RyaW5nVG9rZW4oc3RhdGUpIHsKICAgIHZhciBzdHIgPSAnJzsKCiAgICB3aGlsZSAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgIT09ICcnICYmIGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpICE9PSAnIicpIHsKICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnXFwnKSB7CiAgICAgICAgLy8gZXNjYXBlIGNoYXJhY3RlciwgaW1tZWRpYXRlbHkgcHJvY2VzcyB0aGUgbmV4dAogICAgICAgIC8vIGNoYXJhY3RlciB0byBwcmV2ZW50IHN0b3BwaW5nIGF0IGEgbmV4dCAnXCInCiAgICAgICAgc3RyICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpOwogICAgICAgIG5leHQoc3RhdGUpOwogICAgICB9CgogICAgICBzdHIgKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7CiAgICAgIG5leHQoc3RhdGUpOwogICAgfQoKICAgIGdldFRva2VuKHN0YXRlKTsKCiAgICBpZiAoc3RhdGUudG9rZW4gIT09ICciJykgewogICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ0VuZCBvZiBzdHJpbmcgIiBleHBlY3RlZCcpOwogICAgfQoKICAgIGdldFRva2VuKHN0YXRlKTsKICAgIHJldHVybiBKU09OLnBhcnNlKCciJyArIHN0ciArICciJyk7IC8vIHVuZXNjYXBlIGVzY2FwZWQgY2hhcmFjdGVycwogIH0KICAvKioKICAgKiBQYXJzZSBhIHNpbmdsZSBxdW90ZXMgc3RyaW5nLgogICAqIEByZXR1cm4ge05vZGV9IG5vZGUKICAgKiBAcHJpdmF0ZQogICAqLwoKCiAgZnVuY3Rpb24gcGFyc2VTaW5nbGVRdW90ZXNTdHJpbmcoc3RhdGUpIHsKICAgIHZhciBub2RlLCBzdHI7CgogICAgaWYgKHN0YXRlLnRva2VuID09PSAnXCcnKSB7CiAgICAgIHN0ciA9IHBhcnNlU2luZ2xlUXVvdGVzU3RyaW5nVG9rZW4oc3RhdGUpOyAvLyBjcmVhdGUgY29uc3RhbnQKCiAgICAgIG5vZGUgPSBuZXcgQ29uc3RhbnROb2RlKHN0cik7IC8vIHBhcnNlIGluZGV4IHBhcmFtZXRlcnMKCiAgICAgIG5vZGUgPSBwYXJzZUFjY2Vzc29ycyhzdGF0ZSwgbm9kZSk7CiAgICAgIHJldHVybiBub2RlOwogICAgfQoKICAgIHJldHVybiBwYXJzZU1hdHJpeChzdGF0ZSk7CiAgfQogIC8qKgogICAqIFBhcnNlIGEgc3RyaW5nIHN1cnJvdW5kZWQgYnkgc2luZ2xlIHF1b3RlcyAnLi4uJwogICAqIEByZXR1cm4ge3N0cmluZ30KICAgKi8KCgogIGZ1bmN0aW9uIHBhcnNlU2luZ2xlUXVvdGVzU3RyaW5nVG9rZW4oc3RhdGUpIHsKICAgIHZhciBzdHIgPSAnJzsKCiAgICB3aGlsZSAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgIT09ICcnICYmIGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpICE9PSAnXCcnKSB7CiAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJ1xcJykgewogICAgICAgIC8vIGVzY2FwZSBjaGFyYWN0ZXIsIGltbWVkaWF0ZWx5IHByb2Nlc3MgdGhlIG5leHQKICAgICAgICAvLyBjaGFyYWN0ZXIgdG8gcHJldmVudCBzdG9wcGluZyBhdCBhIG5leHQgJ1wnJwogICAgICAgIHN0ciArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTsKICAgICAgICBuZXh0KHN0YXRlKTsKICAgICAgfQoKICAgICAgc3RyICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpOwogICAgICBuZXh0KHN0YXRlKTsKICAgIH0KCiAgICBnZXRUb2tlbihzdGF0ZSk7CgogICAgaWYgKHN0YXRlLnRva2VuICE9PSAnXCcnKSB7CiAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRW5kIG9mIHN0cmluZyBcJyBleHBlY3RlZCcpOwogICAgfQoKICAgIGdldFRva2VuKHN0YXRlKTsKICAgIHJldHVybiBKU09OLnBhcnNlKCciJyArIHN0ciArICciJyk7IC8vIHVuZXNjYXBlIGVzY2FwZWQgY2hhcmFjdGVycwogIH0KICAvKioKICAgKiBwYXJzZSB0aGUgbWF0cml4CiAgICogQHJldHVybiB7Tm9kZX0gbm9kZQogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBwYXJzZU1hdHJpeChzdGF0ZSkgewogICAgdmFyIGFycmF5LCBwYXJhbXMsIHJvd3MsIGNvbHM7CgogICAgaWYgKHN0YXRlLnRva2VuID09PSAnWycpIHsKICAgICAgLy8gbWF0cml4IFsuLi5dCiAgICAgIG9wZW5QYXJhbXMoc3RhdGUpOwogICAgICBnZXRUb2tlbihzdGF0ZSk7CgogICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICddJykgewogICAgICAgIC8vIHRoaXMgaXMgYSBub24tZW1wdHkgbWF0cml4CiAgICAgICAgdmFyIHJvdyA9IHBhcnNlUm93KHN0YXRlKTsKCiAgICAgICAgaWYgKHN0YXRlLnRva2VuID09PSAnOycpIHsKICAgICAgICAgIC8vIDIgZGltZW5zaW9uYWwgYXJyYXkKICAgICAgICAgIHJvd3MgPSAxOwogICAgICAgICAgcGFyYW1zID0gW3Jvd107IC8vIHRoZSByb3dzIG9mIHRoZSBtYXRyaXggYXJlIHNlcGFyYXRlZCBieSBkb3QtY29tbWEncwoKICAgICAgICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJzsnKSB7CiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvbgogICAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7CiAgICAgICAgICAgIHBhcmFtc1tyb3dzXSA9IHBhcnNlUm93KHN0YXRlKTsKICAgICAgICAgICAgcm93cysrOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ10nKSB7CiAgICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRW5kIG9mIG1hdHJpeCBdIGV4cGVjdGVkJyk7CiAgICAgICAgICB9CgogICAgICAgICAgY2xvc2VQYXJhbXMoc3RhdGUpOwogICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpOyAvLyBjaGVjayBpZiB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgbWF0Y2hlcyBpbiBhbGwgcm93cwoKICAgICAgICAgIGNvbHMgPSBwYXJhbXNbMF0uaXRlbXMubGVuZ3RoOwoKICAgICAgICAgIGZvciAodmFyIHIgPSAxOyByIDwgcm93czsgcisrKSB7CiAgICAgICAgICAgIGlmIChwYXJhbXNbcl0uaXRlbXMubGVuZ3RoICE9PSBjb2xzKSB7CiAgICAgICAgICAgICAgdGhyb3cgY3JlYXRlRXJyb3Ioc3RhdGUsICdDb2x1bW4gZGltZW5zaW9ucyBtaXNtYXRjaCAnICsgJygnICsgcGFyYW1zW3JdLml0ZW1zLmxlbmd0aCArICcgIT09ICcgKyBjb2xzICsgJyknKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIGFycmF5ID0gbmV3IEFycmF5Tm9kZShwYXJhbXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyAxIGRpbWVuc2lvbmFsIHZlY3RvcgogICAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnXScpIHsKICAgICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdFbmQgb2YgbWF0cml4IF0gZXhwZWN0ZWQnKTsKICAgICAgICAgIH0KCiAgICAgICAgICBjbG9zZVBhcmFtcyhzdGF0ZSk7CiAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7CiAgICAgICAgICBhcnJheSA9IHJvdzsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gdGhpcyBpcyBhbiBlbXB0eSBtYXRyaXggIlsgXSIKICAgICAgICBjbG9zZVBhcmFtcyhzdGF0ZSk7CiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpOwogICAgICAgIGFycmF5ID0gbmV3IEFycmF5Tm9kZShbXSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBwYXJzZUFjY2Vzc29ycyhzdGF0ZSwgYXJyYXkpOwogICAgfQoKICAgIHJldHVybiBwYXJzZU9iamVjdChzdGF0ZSk7CiAgfQogIC8qKgogICAqIFBhcnNlIGEgc2luZ2xlIGNvbW1hLXNlcGFyYXRlZCByb3cgZnJvbSBhIG1hdHJpeCwgbGlrZSAnYSwgYiwgYycKICAgKiBAcmV0dXJuIHtBcnJheU5vZGV9IG5vZGUKICAgKi8KCgogIGZ1bmN0aW9uIHBhcnNlUm93KHN0YXRlKSB7CiAgICB2YXIgcGFyYW1zID0gW3BhcnNlQXNzaWdubWVudChzdGF0ZSldOwogICAgdmFyIGxlbiA9IDE7CgogICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnLCcpIHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uCiAgICAgIGdldFRva2VuKHN0YXRlKTsgLy8gcGFyc2UgZXhwcmVzc2lvbgoKICAgICAgcGFyYW1zW2xlbl0gPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpOwogICAgICBsZW4rKzsKICAgIH0KCiAgICByZXR1cm4gbmV3IEFycmF5Tm9kZShwYXJhbXMpOwogIH0KICAvKioKICAgKiBwYXJzZSBhbiBvYmplY3QsIGVuY2xvc2VkIGluIGFuZ2xlIGJyYWNrZXRzey4uLn0sIGZvciBleGFtcGxlIHt2YWx1ZTogMn0KICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlCiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIHBhcnNlT2JqZWN0KHN0YXRlKSB7CiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICd7JykgewogICAgICBvcGVuUGFyYW1zKHN0YXRlKTsKICAgICAgdmFyIGtleTsKICAgICAgdmFyIHByb3BlcnRpZXMgPSB7fTsKCiAgICAgIGRvIHsKICAgICAgICBnZXRUb2tlbihzdGF0ZSk7CgogICAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ30nKSB7CiAgICAgICAgICAvLyBwYXJzZSBrZXkKICAgICAgICAgIGlmIChzdGF0ZS50b2tlbiA9PT0gJyInKSB7CiAgICAgICAgICAgIGtleSA9IHBhcnNlRG91YmxlUXVvdGVzU3RyaW5nVG9rZW4oc3RhdGUpOwogICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS50b2tlbiA9PT0gJ1wnJykgewogICAgICAgICAgICBrZXkgPSBwYXJzZVNpbmdsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKTsKICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuU1lNQk9MKSB7CiAgICAgICAgICAgIGtleSA9IHN0YXRlLnRva2VuOwogICAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1N5bWJvbCBvciBzdHJpbmcgZXhwZWN0ZWQgYXMgb2JqZWN0IGtleScpOwogICAgICAgICAgfSAvLyBwYXJzZSBrZXkvdmFsdWUgc2VwYXJhdG9yCgoKICAgICAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJzonKSB7CiAgICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnQ29sb24gOiBleHBlY3RlZCBhZnRlciBvYmplY3Qga2V5Jyk7CiAgICAgICAgICB9CgogICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpOyAvLyBwYXJzZSBrZXkKCiAgICAgICAgICBwcm9wZXJ0aWVzW2tleV0gPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpOwogICAgICAgIH0KICAgICAgfSB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICcsJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvbgoKCiAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ30nKSB7CiAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdDb21tYSAsIG9yIGJyYWNrZXQgfSBleHBlY3RlZCBhZnRlciBvYmplY3QgdmFsdWUnKTsKICAgICAgfQoKICAgICAgY2xvc2VQYXJhbXMoc3RhdGUpOwogICAgICBnZXRUb2tlbihzdGF0ZSk7CiAgICAgIHZhciBub2RlID0gbmV3IE9iamVjdE5vZGUocHJvcGVydGllcyk7IC8vIHBhcnNlIGluZGV4IHBhcmFtZXRlcnMKCiAgICAgIG5vZGUgPSBwYXJzZUFjY2Vzc29ycyhzdGF0ZSwgbm9kZSk7CiAgICAgIHJldHVybiBub2RlOwogICAgfQoKICAgIHJldHVybiBwYXJzZU51bWJlcihzdGF0ZSk7CiAgfQogIC8qKgogICAqIHBhcnNlIGEgbnVtYmVyCiAgICogQHJldHVybiB7Tm9kZX0gbm9kZQogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBwYXJzZU51bWJlcihzdGF0ZSkgewogICAgdmFyIG51bWJlclN0cjsKCiAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuTlVNQkVSKSB7CiAgICAgIC8vIHRoaXMgaXMgYSBudW1iZXIKICAgICAgbnVtYmVyU3RyID0gc3RhdGUudG9rZW47CiAgICAgIGdldFRva2VuKHN0YXRlKTsKICAgICAgcmV0dXJuIG5ldyBDb25zdGFudE5vZGUobnVtZXJpYyhudW1iZXJTdHIsIGNvbmZpZy5udW1iZXIpKTsKICAgIH0KCiAgICByZXR1cm4gcGFyc2VQYXJlbnRoZXNlcyhzdGF0ZSk7CiAgfQogIC8qKgogICAqIHBhcmVudGhlc2VzCiAgICogQHJldHVybiB7Tm9kZX0gbm9kZQogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBwYXJzZVBhcmVudGhlc2VzKHN0YXRlKSB7CiAgICB2YXIgbm9kZTsgLy8gY2hlY2sgaWYgaXQgaXMgYSBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb24KCiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICcoJykgewogICAgICAvLyBwYXJlbnRoZXNlcyAoLi4uKQogICAgICBvcGVuUGFyYW1zKHN0YXRlKTsKICAgICAgZ2V0VG9rZW4oc3RhdGUpOwogICAgICBub2RlID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTsgLy8gc3RhcnQgYWdhaW4KCiAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJyknKSB7CiAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdQYXJlbnRoZXNpcyApIGV4cGVjdGVkJyk7CiAgICAgIH0KCiAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTsKICAgICAgZ2V0VG9rZW4oc3RhdGUpOwogICAgICBub2RlID0gbmV3IFBhcmVudGhlc2lzTm9kZShub2RlKTsKICAgICAgbm9kZSA9IHBhcnNlQWNjZXNzb3JzKHN0YXRlLCBub2RlKTsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CgogICAgcmV0dXJuIHBhcnNlRW5kKHN0YXRlKTsKICB9CiAgLyoqCiAgICogRXZhbHVhdGVkIHdoZW4gdGhlIGV4cHJlc3Npb24gaXMgbm90IHlldCBlbmRlZCBidXQgZXhwZWN0ZWQgdG8gZW5kCiAgICogQHJldHVybiB7Tm9kZX0gcmVzCiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIHBhcnNlRW5kKHN0YXRlKSB7CiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICcnKSB7CiAgICAgIC8vIHN5bnRheCBlcnJvciBvciB1bmV4cGVjdGVkIGVuZCBvZiBleHByZXNzaW9uCiAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnVW5leHBlY3RlZCBlbmQgb2YgZXhwcmVzc2lvbicpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdWYWx1ZSBleHBlY3RlZCcpOwogICAgfQogIH0KICAvKioKICAgKiBTaG9ydGN1dCBmb3IgZ2V0dGluZyB0aGUgY3VycmVudCByb3cgdmFsdWUgKG9uZSBiYXNlZCkKICAgKiBSZXR1cm5zIHRoZSBsaW5lIG9mIHRoZSBjdXJyZW50bHkgaGFuZGxlZCBleHByZXNzaW9uCiAgICogQHByaXZhdGUKICAgKi8KCiAgLyogVE9ETzogaW1wbGVtZW50IGtlZXBpbmcgdHJhY2sgb24gdGhlIHJvdyBudW1iZXIKICBmdW5jdGlvbiByb3cgKCkgewogICAgcmV0dXJuIG51bGwKICB9CiAgKi8KCiAgLyoqCiAgICogU2hvcnRjdXQgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgY29sIHZhbHVlIChvbmUgYmFzZWQpCiAgICogUmV0dXJucyB0aGUgY29sdW1uIChwb3NpdGlvbikgd2hlcmUgdGhlIGxhc3Qgc3RhdGUudG9rZW4gc3RhcnRzCiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIGNvbChzdGF0ZSkgewogICAgcmV0dXJuIHN0YXRlLmluZGV4IC0gc3RhdGUudG9rZW4ubGVuZ3RoICsgMTsKICB9CiAgLyoqCiAgICogQ3JlYXRlIGFuIGVycm9yCiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlCiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UKICAgKiBAcmV0dXJuIHtTeW50YXhFcnJvcn0gaW5zdGFudGlhdGVkIGVycm9yCiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCBtZXNzYWdlKSB7CiAgICB2YXIgYyA9IGNvbChzdGF0ZSk7CiAgICB2YXIgZXJyb3IgPSBuZXcgU3ludGF4RXJyb3IobWVzc2FnZSArICcgKGNoYXIgJyArIGMgKyAnKScpOwogICAgZXJyb3JbImNoYXIiXSA9IGM7CiAgICByZXR1cm4gZXJyb3I7CiAgfQogIC8qKgogICAqIENyZWF0ZSBhbiBlcnJvcgogICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZQogICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlCiAgICogQHJldHVybiB7RXJyb3J9IGluc3RhbnRpYXRlZCBlcnJvcgogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBjcmVhdGVFcnJvcihzdGF0ZSwgbWVzc2FnZSkgewogICAgdmFyIGMgPSBjb2woc3RhdGUpOwogICAgdmFyIGVycm9yID0gbmV3IFN5bnRheEVycm9yKG1lc3NhZ2UgKyAnIChjaGFyICcgKyBjICsgJyknKTsKICAgIGVycm9yWyJjaGFyIl0gPSBjOwogICAgcmV0dXJuIGVycm9yOwogIH0KCiAgcmV0dXJuIHBhcnNlOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9mdW5jdGlvbi9jb21waWxlLmpzCgoKdmFyIGNvbXBpbGVfbmFtZSA9ICdjb21waWxlJzsKdmFyIGNvbXBpbGVfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdwYXJzZSddOwp2YXIgY3JlYXRlQ29tcGlsZSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGNvbXBpbGVfbmFtZSwgY29tcGlsZV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlOwoKICAvKioKICAgKiBQYXJzZSBhbmQgY29tcGlsZSBhbiBleHByZXNzaW9uLgogICAqIFJldHVybnMgYSBhbiBvYmplY3Qgd2l0aCBhIGZ1bmN0aW9uIGBldmFsdWF0ZShbc2NvcGVdKWAgdG8gZXZhbHVhdGUgdGhlCiAgICogY29tcGlsZWQgZXhwcmVzc2lvbi4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBtYXRoLmNvbXBpbGUoZXhwcikgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgb25lIG5vZGUKICAgKiAgICAgbWF0aC5jb21waWxlKFtleHByMSwgZXhwcjIsIGV4cHIzLCAuLi5dKSAvLyByZXR1cm5zIGFuIGFycmF5IHdpdGggbm9kZXMKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgIGNvbnN0IGNvZGUxID0gbWF0aC5jb21waWxlKCdzcXJ0KDNeMiArIDReMiknKQogICAqICAgICBjb2RlMS5ldmFsdWF0ZSgpIC8vIDUKICAgKgogICAqICAgICBsZXQgc2NvcGUgPSB7YTogMywgYjogNH0KICAgKiAgICAgY29uc3QgY29kZTIgPSBtYXRoLmNvbXBpbGUoJ2EgKiBiJykgLy8gMTIKICAgKiAgICAgY29kZTIuZXZhbHVhdGUoc2NvcGUpIC8vIDEyCiAgICogICAgIHNjb3BlLmEgPSA1CiAgICogICAgIGNvZGUyLmV2YWx1YXRlKHNjb3BlKSAvLyAyMAogICAqCiAgICogICAgIGNvbnN0IG5vZGVzID0gbWF0aC5jb21waWxlKFsnYSA9IDMnLCAnYiA9IDQnLCAnYSAqIGInXSkKICAgKiAgICAgbm9kZXNbMl0uZXZhbHVhdGUoKSAvLyAxMgogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBwYXJzZSwgZXZhbHVhdGUKICAgKgogICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW10gfCBBcnJheSB8IE1hdHJpeH0gZXhwcgogICAqICAgICAgICAgICAgVGhlIGV4cHJlc3Npb24gdG8gYmUgY29tcGlsZWQKICAgKiBAcmV0dXJuIHt7ZXZhbHVhdGU6IEZ1bmN0aW9ufSB8IEFycmF5Ljx7ZXZhbHVhdGU6IEZ1bmN0aW9ufT59IGNvZGUKICAgKiAgICAgICAgICAgIEFuIG9iamVjdCB3aXRoIHRoZSBjb21waWxlZCBleHByZXNzaW9uCiAgICogQHRocm93cyB7RXJyb3J9CiAgICovCiAgcmV0dXJuIHR5cGVkKGNvbXBpbGVfbmFtZSwgewogICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoZXhwcikgewogICAgICByZXR1cm4gcGFyc2UoZXhwcikuY29tcGlsZSgpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KGV4cHIpIHsKICAgICAgcmV0dXJuIGRlZXBNYXAoZXhwciwgZnVuY3Rpb24gKGVudHJ5KSB7CiAgICAgICAgcmV0dXJuIHBhcnNlKGVudHJ5KS5jb21waWxlKCk7CiAgICAgIH0pOwogICAgfQogIH0pOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsdWF0ZS5qcwoKCnZhciBldmFsdWF0ZV9uYW1lID0gJ2V2YWx1YXRlJzsKdmFyIGV2YWx1YXRlX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAncGFyc2UnXTsKdmFyIGNyZWF0ZUV2YWx1YXRlID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoZXZhbHVhdGVfbmFtZSwgZXZhbHVhdGVfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIHBhcnNlID0gX3JlZi5wYXJzZTsKCiAgLyoqCiAgICogRXZhbHVhdGUgYW4gZXhwcmVzc2lvbi4KICAgKgogICAqIE5vdGUgdGhlIGV2YWx1YXRpbmcgYXJiaXRyYXJ5IGV4cHJlc3Npb25zIG1heSBpbnZvbHZlIHNlY3VyaXR5IHJpc2tzLAogICAqIHNlZSBbaHR0cHM6Ly9tYXRoanMub3JnL2RvY3MvZXhwcmVzc2lvbnMvc2VjdXJpdHkuaHRtbF0oaHR0cHM6Ly9tYXRoanMub3JnL2RvY3MvZXhwcmVzc2lvbnMvc2VjdXJpdHkuaHRtbCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICAgbWF0aC5ldmFsdWF0ZShleHByKQogICAqICAgICBtYXRoLmV2YWx1YXRlKGV4cHIsIHNjb3BlKQogICAqICAgICBtYXRoLmV2YWx1YXRlKFtleHByMSwgZXhwcjIsIGV4cHIzLCAuLi5dKQogICAqICAgICBtYXRoLmV2YWx1YXRlKFtleHByMSwgZXhwcjIsIGV4cHIzLCAuLi5dLCBzY29wZSkKICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiAgICAgbWF0aC5ldmFsdWF0ZSgnKDIrMykvNCcpICAgICAgICAgICAgICAgIC8vIDEuMjUKICAgKiAgICAgbWF0aC5ldmFsdWF0ZSgnc3FydCgzXjIgKyA0XjIpJykgICAgICAgIC8vIDUKICAgKiAgICAgbWF0aC5ldmFsdWF0ZSgnc3FydCgtNCknKSAgICAgICAgICAgICAgIC8vIDJpCiAgICogICAgIG1hdGguZXZhbHVhdGUoWydhPTMnLCAnYj00JywgJ2EqYiddKSAgICAvLyBbMywgNCwgMTJdCiAgICoKICAgKiAgICAgbGV0IHNjb3BlID0ge2E6MywgYjo0fQogICAqICAgICBtYXRoLmV2YWx1YXRlKCdhICogYicsIHNjb3BlKSAgICAgICAgICAgLy8gMTIKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgcGFyc2UsIGNvbXBpbGUKICAgKgogICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW10gfCBNYXRyaXh9IGV4cHIgICBUaGUgZXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWQKICAgKiBAcGFyYW0ge09iamVjdH0gW3Njb3BlXSAgICAgICAgICAgICAgICAgICAgU2NvcGUgdG8gcmVhZC93cml0ZSB2YXJpYWJsZXMKICAgKiBAcmV0dXJuIHsqfSBUaGUgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9uCiAgICogQHRocm93cyB7RXJyb3J9CiAgICovCiAgcmV0dXJuIHR5cGVkKGV2YWx1YXRlX25hbWUsIHsKICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKGV4cHIpIHsKICAgICAgdmFyIHNjb3BlID0ge307CiAgICAgIHJldHVybiBwYXJzZShleHByKS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpOwogICAgfSwKICAgICdzdHJpbmcsIE9iamVjdCc6IGZ1bmN0aW9uIHN0cmluZ09iamVjdChleHByLCBzY29wZSkgewogICAgICByZXR1cm4gcGFyc2UoZXhwcikuY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChleHByKSB7CiAgICAgIHZhciBzY29wZSA9IHt9OwogICAgICByZXR1cm4gZGVlcE1hcChleHByLCBmdW5jdGlvbiAoZW50cnkpIHsKICAgICAgICByZXR1cm4gcGFyc2UoZW50cnkpLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7CiAgICAgIH0pOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCwgT2JqZWN0JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhPYmplY3QoZXhwciwgc2NvcGUpIHsKICAgICAgcmV0dXJuIGRlZXBNYXAoZXhwciwgZnVuY3Rpb24gKGVudHJ5KSB7CiAgICAgICAgcmV0dXJuIHBhcnNlKGVudHJ5KS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpOwogICAgICB9KTsKICAgIH0KICB9KTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZnVuY3Rpb24vZXZhbC5qcwovLyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDYuMC4wLiBEYXRlOiAyMDE4LTEyLTA1CgoKdmFyIGNyZWF0ZURlcHJlY2F0ZWRFdmFsID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoJ2V2YWwnLCBbJ2V2YWx1YXRlJ10sIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIGV2YWx1YXRlID0gX3JlZi5ldmFsdWF0ZTsKICByZXR1cm4gZnVuY3Rpb24gKCkgewogICAgT2JqZWN0KHV0aWxzX2xvZ1siYSIgLyogd2Fybk9uY2UgKi9dKSgnRnVuY3Rpb24gImV2YWwiIGhhcyBiZWVuIHJlbmFtZWQgdG8gImV2YWx1YXRlIiBpbiB2Ni4wLjAsIHBsZWFzZSB1c2UgdGhlIG5ldyBmdW5jdGlvbiBpbnN0ZWFkLicpOwoKICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykgewogICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldOwogICAgfQoKICAgIHJldHVybiBldmFsdWF0ZS5hcHBseShldmFsdWF0ZSwgYXJncyk7CiAgfTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vUGFyc2VyLmpzCgoKCgp2YXIgUGFyc2VyX25hbWUgPSAnUGFyc2VyJzsKdmFyIFBhcnNlcl9kZXBlbmRlbmNpZXMgPSBbJ3BhcnNlJ107CnZhciBjcmVhdGVQYXJzZXJDbGFzcyA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKFBhcnNlcl9uYW1lLCBQYXJzZXJfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciBwYXJzZSA9IF9yZWYucGFyc2U7CgogIC8qKgogICAqIEBjb25zdHJ1Y3RvciBQYXJzZXIKICAgKiBQYXJzZXIgY29udGFpbnMgbWV0aG9kcyB0byBldmFsdWF0ZSBvciBwYXJzZSBleHByZXNzaW9ucywgYW5kIGhhcyBhIG51bWJlcgogICAqIG9mIGNvbnZlbmllbmNlIG1ldGhvZHMgdG8gZ2V0LCBzZXQsIGFuZCByZW1vdmUgdmFyaWFibGVzIGZyb20gbWVtb3J5LiBQYXJzZXIKICAgKiBrZWVwcyBhIHNjb3BlIGNvbnRhaW5pbmcgdmFyaWFibGVzIGluIG1lbW9yeSwgd2hpY2ggaXMgdXNlZCBmb3IgYWxsCiAgICogZXZhbHVhdGlvbnMuCiAgICoKICAgKiBNZXRob2RzOgogICAqICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlci5ldmFsdWF0ZShleHByKSAgLy8gZXZhbHVhdGUgYW4gZXhwcmVzc2lvbgogICAqICAgIGNvbnN0IHZhbHVlID0gcGFyc2VyLmdldChuYW1lKSAgICAgICAgLy8gcmV0cmlldmUgYSB2YXJpYWJsZSBmcm9tIHRoZSBwYXJzZXIKICAgKiAgICBjb25zdCB2YWx1ZXMgPSBwYXJzZXIuZ2V0QWxsKCkgICAgICAgIC8vIHJldHJpZXZlIGFsbCBkZWZpbmVkIHZhcmlhYmxlcwogICAqICAgIHBhcnNlci5zZXQobmFtZSwgdmFsdWUpICAgICAgICAgICAgICAgLy8gc2V0IGEgdmFyaWFibGUgaW4gdGhlIHBhcnNlcgogICAqICAgIHBhcnNlci5yZW1vdmUobmFtZSkgICAgICAgICAgICAgICAgICAgLy8gY2xlYXIgYSB2YXJpYWJsZSBmcm9tIHRoZQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VycyBzY29wZQogICAqICAgIHBhcnNlci5jbGVhcigpICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xlYXIgdGhlIHBhcnNlcnMgc2NvcGUKICAgKgogICAqIEV4YW1wbGUgdXNhZ2U6CiAgICogICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcigpCiAgICogICAgLy8gTm90ZTogdGhlcmUgaXMgYSBjb252ZW5pZW5jZSBtZXRob2Qgd2hpY2ggY2FuIGJlIHVzZWQgaW5zdGVhZDoKICAgKiAgICAvLyBjb25zdCBwYXJzZXIgPSBuZXcgbWF0aC5wYXJzZXIoKQogICAqCiAgICogICAgLy8gZXZhbHVhdGUgZXhwcmVzc2lvbnMKICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ3NxcnQoM14yICsgNF4yKScpICAgICAgICAvLyA1CiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCdzcXJ0KC00KScpICAgICAgICAgICAgICAgLy8gMmkKICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJzIgaW5jaCBpbiBjbScpICAgICAgICAgICAvLyA1LjA4IGNtCiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCdjb3MoNDUgZGVnKScpICAgICAgICAgICAgLy8gMC43MDcxMDY3ODExODY1NDc2CiAgICoKICAgKiAgICAvLyBkZWZpbmUgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMKICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ3ggPSA3IC8gMicpICAgICAgICAgICAgICAvLyAzLjUKICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ3ggKyAzJykgICAgICAgICAgICAgICAgICAvLyA2LjUKICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ2Z1bmN0aW9uIGYoeCwgeSkgPSB4XnknKSAvLyBmKHgsIHkpCiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCdmKDIsIDMpJykgICAgICAgICAgICAgICAgLy8gOAogICAqCiAgICogICAgLy8gZ2V0IGFuZCBzZXQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMKICAgKiAgICBjb25zdCB4ID0gcGFyc2VyLmdldCgneCcpICAgICAgICAgICAgICAgICAvLyA3CiAgICogICAgY29uc3QgZiA9IHBhcnNlci5nZXQoJ2YnKSAgICAgICAgICAgICAgICAgLy8gZnVuY3Rpb24KICAgKiAgICBjb25zdCBnID0gZigzLCAyKSAgICAgICAgICAgICAgICAgICAgICAgICAvLyA5CiAgICogICAgcGFyc2VyLnNldCgnaCcsIDUwMCkKICAgKiAgICBjb25zdCBpID0gcGFyc2VyLmV2YWx1YXRlKCdoIC8gMicpICAgICAgICAvLyAyNTAKICAgKiAgICBwYXJzZXIuc2V0KCdoZWxsbycsIGZ1bmN0aW9uIChuYW1lKSB7CiAgICogICAgICAgIHJldHVybiAnaGVsbG8sICcgKyBuYW1lICsgJyEnCiAgICogICAgfSkKICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ2hlbGxvKCJ1c2VyIiknKSAgICAgICAgICAvLyAiaGVsbG8sIHVzZXIhIgogICAqCiAgICogICAgLy8gY2xlYXIgZGVmaW5lZCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcwogICAqICAgIHBhcnNlci5jbGVhcigpCiAgICoKICAgKi8KICBmdW5jdGlvbiBQYXJzZXIoKSB7CiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFyc2VyKSkgewogICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpOwogICAgfQoKICAgIHRoaXMuc2NvcGUgPSB7fTsKICB9CiAgLyoqCiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb24KICAgKi8KCgogIFBhcnNlci5wcm90b3R5cGUudHlwZSA9ICdQYXJzZXInOwogIFBhcnNlci5wcm90b3R5cGUuaXNQYXJzZXIgPSB0cnVlOwogIC8qKgogICAqIFBhcnNlIGFuIGV4cHJlc3Npb24gYW5kIHJldHVybiB0aGUgcGFyc2VkIGZ1bmN0aW9uIG5vZGUuCiAgICogVGhlIG5vZGUgdHJlZSBjYW4gYmUgY29tcGlsZWQgdmlhIGBjb2RlID0gbm9kZS5jb21waWxlKG1hdGgpYCwKICAgKiBhbmQgdGhlIGNvbXBpbGVkIGNvZGUgY2FuIGJlIGV4ZWN1dGVkIGFzIGBjb2RlLmV2YWx1YXRlKFtzY29wZV0pYAogICAqIEBwYXJhbSB7c3RyaW5nfSBleHByCiAgICogQHJldHVybiB7Tm9kZX0gbm9kZQogICAqIEB0aHJvd3Mge0Vycm9yfQogICAqLwoKICBQYXJzZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKGV4cHIpIHsKICAgIHRocm93IG5ldyBFcnJvcignUGFyc2VyLnBhcnNlIGlzIGRlcHJlY2F0ZWQuIFVzZSBtYXRoLnBhcnNlIGluc3RlYWQuJyk7CiAgfTsKICAvKioKICAgKiBQYXJzZSBhbmQgY29tcGlsZSBhbiBleHByZXNzaW9uLCByZXR1cm4gdGhlIGNvbXBpbGVkIGphdmFzY3JpcHQgY29kZS4KICAgKiBUaGUgbm9kZSBjYW4gYmUgZXZhbHVhdGVkIHZpYSBjb2RlLmV2YWx1YXRlKFtzY29wZV0pCiAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHIKICAgKiBAcmV0dXJuIHt7ZXZhbHVhdGU6IGZ1bmN0aW9ufX0gY29kZQogICAqIEB0aHJvd3Mge0Vycm9yfQogICAqLwoKCiAgUGFyc2VyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKGV4cHIpIHsKICAgIHRocm93IG5ldyBFcnJvcignUGFyc2VyLmNvbXBpbGUgaXMgZGVwcmVjYXRlZC4gVXNlIG1hdGguY29tcGlsZSBpbnN0ZWFkLicpOwogIH07CiAgLyoqCiAgICogUGFyc2UgYW5kIGV2YWx1YXRlIHRoZSBnaXZlbiBleHByZXNzaW9uCiAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHIgICBBIHN0cmluZyBjb250YWluaW5nIGFuIGV4cHJlc3Npb24sIGZvciBleGFtcGxlICIyKzMiCiAgICogQHJldHVybiB7Kn0gcmVzdWx0ICAgICBUaGUgcmVzdWx0LCBvciB1bmRlZmluZWQgd2hlbiB0aGUgZXhwcmVzc2lvbiB3YXMgZW1wdHkKICAgKiBAdGhyb3dzIHtFcnJvcn0KICAgKi8KCgogIFBhcnNlci5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiAoZXhwcikgewogICAgLy8gVE9ETzogdmFsaWRhdGUgYXJndW1lbnRzCiAgICByZXR1cm4gcGFyc2UoZXhwcikuY29tcGlsZSgpLmV2YWx1YXRlKHRoaXMuc2NvcGUpOwogIH07CiAgLyoqCiAgICogUGFyc2UgYW5kIGV2YWx1YXRlIHRoZSBnaXZlbiBleHByZXNzaW9uCiAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHIgICBBIHN0cmluZyBjb250YWluaW5nIGFuIGV4cHJlc3Npb24sIGZvciBleGFtcGxlICIyKzMiCiAgICogQHJldHVybiB7Kn0gcmVzdWx0ICAgICBUaGUgcmVzdWx0LCBvciB1bmRlZmluZWQgd2hlbiB0aGUgZXhwcmVzc2lvbiB3YXMgZW1wdHkKICAgKiBAdGhyb3dzIHtFcnJvcn0KICAgKi8KICAvLyBUT0RPOiBEZXByZWNhdGVkIHNpbmNlIHY2LjAuMC4gQ2xlYW4gdXAgc29tZSBkYXkKCgogIFBhcnNlci5wcm90b3R5cGUuZXZhbCA9IGZ1bmN0aW9uIChleHByKSB7CiAgICBPYmplY3QodXRpbHNfbG9nWyJhIiAvKiB3YXJuT25jZSAqL10pKCdNZXRob2QgUGFyc2VyLmV2YWwgaXMgcmVuYW1lZCB0byBQYXJzZXIuZXZhbHVhdGUuIFBsZWFzZSB1c2UgdGhlIG5ldyBtZXRob2QgbmFtZS4nKTsKICAgIHJldHVybiB0aGlzLmV2YWx1YXRlKGV4cHIpOwogIH07CiAgLyoqCiAgICogR2V0IGEgdmFyaWFibGUgKGEgZnVuY3Rpb24gb3IgdmFyaWFibGUpIGJ5IG5hbWUgZnJvbSB0aGUgcGFyc2VycyBzY29wZS4KICAgKiBSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIG5vdCBmb3VuZAogICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCiAgICogQHJldHVybiB7KiB8IHVuZGVmaW5lZH0gdmFsdWUKICAgKi8KCgogIFBhcnNlci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG5hbWUpIHsKICAgIC8vIFRPRE86IHZhbGlkYXRlIGFyZ3VtZW50cwogICAgcmV0dXJuIG5hbWUgaW4gdGhpcy5zY29wZSA/IGdldFNhZmVQcm9wZXJ0eSh0aGlzLnNjb3BlLCBuYW1lKSA6IHVuZGVmaW5lZDsKICB9OwogIC8qKgogICAqIEdldCBhIG1hcCB3aXRoIGFsbCBkZWZpbmVkIHZhcmlhYmxlcwogICAqIEByZXR1cm4ge09iamVjdH0gdmFsdWVzCiAgICovCgoKICBQYXJzZXIucHJvdG90eXBlLmdldEFsbCA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiBPYmplY3QodXRpbHNfb2JqZWN0WyJlIiAvKiBleHRlbmQgKi9dKSh7fSwgdGhpcy5zY29wZSk7CiAgfTsKICAvKioKICAgKiBTZXQgYSBzeW1ib2wgKGEgZnVuY3Rpb24gb3IgdmFyaWFibGUpIGJ5IG5hbWUgZnJvbSB0aGUgcGFyc2VycyBzY29wZS4KICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQogICAqIEBwYXJhbSB7KiB8IHVuZGVmaW5lZH0gdmFsdWUKICAgKi8KCgogIFBhcnNlci5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CiAgICAvLyBUT0RPOiB2YWxpZGF0ZSBhcmd1bWVudHMKICAgIHJldHVybiBzZXRTYWZlUHJvcGVydHkodGhpcy5zY29wZSwgbmFtZSwgdmFsdWUpOwogIH07CiAgLyoqCiAgICogUmVtb3ZlIGEgdmFyaWFibGUgZnJvbSB0aGUgcGFyc2VycyBzY29wZQogICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCiAgICovCgoKICBQYXJzZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChuYW1lKSB7CiAgICAvLyBUT0RPOiB2YWxpZGF0ZSBhcmd1bWVudHMKICAgIGRlbGV0ZSB0aGlzLnNjb3BlW25hbWVdOwogIH07CiAgLyoqCiAgICogQ2xlYXIgdGhlIHNjb3BlIHdpdGggdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMKICAgKi8KCgogIFBhcnNlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7CiAgICBmb3IgKHZhciBfbmFtZSBpbiB0aGlzLnNjb3BlKSB7CiAgICAgIGlmIChPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKHRoaXMuc2NvcGUsIF9uYW1lKSkgewogICAgICAgIGRlbGV0ZSB0aGlzLnNjb3BlW19uYW1lXTsKICAgICAgfQogICAgfQogIH07CgogIHJldHVybiBQYXJzZXI7Cn0sIHsKICBpc0NsYXNzOiB0cnVlCn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2Z1bmN0aW9uL3BhcnNlci5qcwoKdmFyIHBhcnNlcl9uYW1lID0gJ3BhcnNlcic7CnZhciBwYXJzZXJfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdQYXJzZXInXTsKdmFyIGNyZWF0ZVBhcnNlciA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHBhcnNlcl9uYW1lLCBwYXJzZXJfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIFBhcnNlciA9IF9yZWYuUGFyc2VyOwoKICAvKioKICAgKiBDcmVhdGUgYSBwYXJzZXIuIFRoZSBmdW5jdGlvbiBjcmVhdGVzIGEgbmV3IGBtYXRoLlBhcnNlcmAgb2JqZWN0LgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5wYXJzZXIoKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICAgY29uc3QgcGFyc2VyID0gbmV3IG1hdGgucGFyc2VyKCkKICAgKgogICAqICAgICAvLyBldmFsdWF0ZSBleHByZXNzaW9ucwogICAqICAgICBjb25zdCBhID0gcGFyc2VyLmV2YWx1YXRlKCdzcXJ0KDNeMiArIDReMiknKSAvLyA1CiAgICogICAgIGNvbnN0IGIgPSBwYXJzZXIuZXZhbHVhdGUoJ3NxcnQoLTQpJykgICAgICAgIC8vIDJpCiAgICogICAgIGNvbnN0IGMgPSBwYXJzZXIuZXZhbHVhdGUoJzIgaW5jaCBpbiBjbScpICAgIC8vIDUuMDggY20KICAgKiAgICAgY29uc3QgZCA9IHBhcnNlci5ldmFsdWF0ZSgnY29zKDQ1IGRlZyknKSAgICAgLy8gMC43MDcxMDY3ODExODY1NDc2CiAgICoKICAgKiAgICAgLy8gZGVmaW5lIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zCiAgICogICAgIHBhcnNlci5ldmFsdWF0ZSgneCA9IDcgLyAyJykgICAgICAgICAgICAgICAgIC8vIDMuNQogICAqICAgICBwYXJzZXIuZXZhbHVhdGUoJ3ggKyAzJykgICAgICAgICAgICAgICAgICAgICAvLyA2LjUKICAgKiAgICAgcGFyc2VyLmV2YWx1YXRlKCdmdW5jdGlvbiBmKHgsIHkpID0geF55JykgICAgLy8gZih4LCB5KQogICAqICAgICBwYXJzZXIuZXZhbHVhdGUoJ2YoMiwgMyknKSAgICAgICAgICAgICAgICAgICAvLyA4CiAgICoKICAgKiAgICAgLy8gZ2V0IGFuZCBzZXQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMKICAgKiAgICAgY29uc3QgeCA9IHBhcnNlci5nZXQoJ3gnKSAgICAgICAgICAgICAgICAvLyA3CiAgICogICAgIGNvbnN0IGYgPSBwYXJzZXIuZ2V0KCdmJykgICAgICAgICAgICAgICAgLy8gZnVuY3Rpb24KICAgKiAgICAgY29uc3QgZyA9IGYoMywgMikgICAgICAgICAgICAgICAgICAgICAgICAvLyA5CiAgICogICAgIHBhcnNlci5zZXQoJ2gnLCA1MDApCiAgICogICAgIGNvbnN0IGkgPSBwYXJzZXIuZXZhbHVhdGUoJ2ggLyAyJykgICAgICAgLy8gMjUwCiAgICogICAgIHBhcnNlci5zZXQoJ2hlbGxvJywgZnVuY3Rpb24gKG5hbWUpIHsKICAgKiAgICAgICByZXR1cm4gJ2hlbGxvLCAnICsgbmFtZSArICchJwogICAqICAgICB9KQogICAqICAgICBwYXJzZXIuZXZhbHVhdGUoJ2hlbGxvKCJ1c2VyIiknKSAgICAgICAgIC8vICJoZWxsbywgdXNlciEiCiAgICoKICAgKiAgICAgLy8gY2xlYXIgZGVmaW5lZCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcwogICAqICAgICBwYXJzZXIuY2xlYXIoKQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBldmFsdWF0ZSwgY29tcGlsZSwgcGFyc2UKICAgKgogICAqIEByZXR1cm4ge1BhcnNlcn0gUGFyc2VyCiAgICovCiAgcmV0dXJuIHR5cGVkKHBhcnNlcl9uYW1lLCB7CiAgICAnJzogZnVuY3Rpb24gXygpIHsKICAgICAgcmV0dXJuIG5ldyBQYXJzZXIoKTsKICAgIH0KICB9KTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2FsZ2VicmEvZGVjb21wb3NpdGlvbi9sdXAuanMKCgp2YXIgbHVwX25hbWUgPSAnbHVwJzsKdmFyIGx1cF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdhYnMnLCAnYWRkU2NhbGFyJywgJ2RpdmlkZVNjYWxhcicsICdtdWx0aXBseVNjYWxhcicsICdzdWJ0cmFjdCcsICdsYXJnZXInLCAnZXF1YWxTY2FsYXInLCAndW5hcnlNaW51cycsICdEZW5zZU1hdHJpeCcsICdTcGFyc2VNYXRyaXgnLCAnU3BhJ107CnZhciBjcmVhdGVMdXAgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShsdXBfbmFtZSwgbHVwX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCwKICAgICAgYWJzID0gX3JlZi5hYnMsCiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLAogICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhciwKICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLAogICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsCiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyLAogICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsCiAgICAgIHVuYXJ5TWludXMgPSBfcmVmLnVuYXJ5TWludXMsCiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeCwKICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXgsCiAgICAgIFNwYSA9IF9yZWYuU3BhOwoKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIE1hdHJpeCBMVSBkZWNvbXBvc2l0aW9uIHdpdGggcGFydGlhbCBwaXZvdGluZy4gTWF0cml4IGBBYCBpcyBkZWNvbXBvc2VkIGluIHR3byBtYXRyaWNlcyAoYExgLCBgVWApIGFuZCBhCiAgICogcm93IHBlcm11dGF0aW9uIHZlY3RvciBgcGAgd2hlcmUgYEFbcCw6XSA9IEwgKiBVYAogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5sdXAoQSkKICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiAgICBjb25zdCBtID0gW1syLCAxXSwgWzEsIDRdXQogICAqICAgIGNvbnN0IHIgPSBtYXRoLmx1cChtKQogICAqICAgIC8vIHIgPSB7CiAgICogICAgLy8gICBMOiBbWzEsIDBdLCBbMC41LCAxXV0sCiAgICogICAgLy8gICBVOiBbWzIsIDFdLCBbMCwgMy41XV0sCiAgICogICAgLy8gICBQOiBbMCwgMV0KICAgKiAgICAvLyB9CiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIHNsdSwgbHNvbHZlLCBsdXNvbHZlLCB1c29sdmUKICAgKgogICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IEEgICAgQSB0d28gZGltZW5zaW9uYWwgbWF0cml4IG9yIGFycmF5IGZvciB3aGljaCB0byBnZXQgdGhlIExVUCBkZWNvbXBvc2l0aW9uLgogICAqCiAgICogQHJldHVybiB7e0w6IEFycmF5IHwgTWF0cml4LCBVOiBBcnJheSB8IE1hdHJpeCwgUDogQXJyYXkuPG51bWJlcj59fSBUaGUgbG93ZXIgdHJpYW5ndWxhciBtYXRyaXgsIHRoZSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeCBhbmQgdGhlIHBlcm11dGF0aW9uIG1hdHJpeC4KICAgKi8KICByZXR1cm4gdHlwZWQobHVwX25hbWUsIHsKICAgIERlbnNlTWF0cml4OiBmdW5jdGlvbiBEZW5zZU1hdHJpeChtKSB7CiAgICAgIHJldHVybiBfZGVuc2VMVVAobSk7CiAgICB9LAogICAgU3BhcnNlTWF0cml4OiBmdW5jdGlvbiBTcGFyc2VNYXRyaXgobSkgewogICAgICByZXR1cm4gX3NwYXJzZUxVUChtKTsKICAgIH0sCiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoYSkgewogICAgICAvLyBjcmVhdGUgZGVuc2UgbWF0cml4IGZyb20gYXJyYXkKICAgICAgdmFyIG0gPSBtYXRyaXgoYSk7IC8vIGx1cCwgdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgoKICAgICAgdmFyIHIgPSBfZGVuc2VMVVAobSk7IC8vIHJlc3VsdAoKCiAgICAgIHJldHVybiB7CiAgICAgICAgTDogci5MLnZhbHVlT2YoKSwKICAgICAgICBVOiByLlUudmFsdWVPZigpLAogICAgICAgIHA6IHIucAogICAgICB9OwogICAgfQogIH0pOwoKICBmdW5jdGlvbiBfZGVuc2VMVVAobSkgewogICAgLy8gcm93cyAmIGNvbHVtbnMKICAgIHZhciByb3dzID0gbS5fc2l6ZVswXTsKICAgIHZhciBjb2x1bW5zID0gbS5fc2l6ZVsxXTsgLy8gbWluaW11bSByb3dzIGFuZCBjb2x1bW5zCgogICAgdmFyIG4gPSBNYXRoLm1pbihyb3dzLCBjb2x1bW5zKTsgLy8gbWF0cml4IGFycmF5LCBjbG9uZSBvcmlnaW5hbCBkYXRhCgogICAgdmFyIGRhdGEgPSBPYmplY3QodXRpbHNfb2JqZWN0WyJhIiAvKiBjbG9uZSAqL10pKG0uX2RhdGEpOyAvLyBsIG1hdHJpeCBhcnJheXMKCiAgICB2YXIgbGRhdGEgPSBbXTsKICAgIHZhciBsc2l6ZSA9IFtyb3dzLCBuXTsgLy8gdSBtYXRyaXggYXJyYXlzCgogICAgdmFyIHVkYXRhID0gW107CiAgICB2YXIgdXNpemUgPSBbbiwgY29sdW1uc107IC8vIHZhcnMKCiAgICB2YXIgaSwgaiwgazsgLy8gcGVybXV0YXRpb24gdmVjdG9yCgogICAgdmFyIHAgPSBbXTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7CiAgICAgIHBbaV0gPSBpOwogICAgfSAvLyBsb29wIGNvbHVtbnMKCgogICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykgewogICAgICAvLyBza2lwIGZpcnN0IGNvbHVtbiBpbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeAogICAgICBpZiAoaiA+IDApIHsKICAgICAgICAvLyBsb29wIHJvd3MKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7CiAgICAgICAgICAvLyBtaW4gaSxqCiAgICAgICAgICB2YXIgbWluID0gTWF0aC5taW4oaSwgaik7IC8vIHZbaSwgal0KCiAgICAgICAgICB2YXIgcyA9IDA7IC8vIGxvb3AgdXAgdG8gbWluCgogICAgICAgICAgZm9yIChrID0gMDsgayA8IG1pbjsgaysrKSB7CiAgICAgICAgICAgIC8vIHMgPSBsW2ksIGtdIC0gZGF0YVtrLCBqXQogICAgICAgICAgICBzID0gYWRkU2NhbGFyKHMsIG11bHRpcGx5U2NhbGFyKGRhdGFbaV1ba10sIGRhdGFba11bal0pKTsKICAgICAgICAgIH0KCiAgICAgICAgICBkYXRhW2ldW2pdID0gc3VidHJhY3QoZGF0YVtpXVtqXSwgcyk7CiAgICAgICAgfQogICAgICB9IC8vIHJvdyB3aXRoIGxhcmdlciB2YWx1ZSBpbiBjdmVjdG9yLCByb3cgPj0gagoKCiAgICAgIHZhciBwaSA9IGo7CiAgICAgIHZhciBwYWJzdiA9IDA7CiAgICAgIHZhciB2amogPSAwOyAvLyBsb29wIHJvd3MKCiAgICAgIGZvciAoaSA9IGo7IGkgPCByb3dzOyBpKyspIHsKICAgICAgICAvLyBkYXRhIEAgaSwgagogICAgICAgIHZhciB2ID0gZGF0YVtpXVtqXTsgLy8gYWJzb2x1dGUgdmFsdWUKCiAgICAgICAgdmFyIGFic3YgPSBhYnModik7IC8vIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBwaXZvdGUgdmFsdWUKCiAgICAgICAgaWYgKGxhcmdlcihhYnN2LCBwYWJzdikpIHsKICAgICAgICAgIC8vIHN0b3JlIHJvdwogICAgICAgICAgcGkgPSBpOyAvLyB1cGRhdGUgbWF4IHZhbHVlCgogICAgICAgICAgcGFic3YgPSBhYnN2OyAvLyB2YWx1ZSBAIFtqLCBqXQoKICAgICAgICAgIHZqaiA9IHY7CiAgICAgICAgfQogICAgICB9IC8vIHN3YXAgcm93cyAoaiA8LT4gcGkpCgoKICAgICAgaWYgKGogIT09IHBpKSB7CiAgICAgICAgLy8gc3dhcCB2YWx1ZXMgaiA8LT4gcGkgaW4gcAogICAgICAgIHBbal0gPSBbcFtwaV0sIHBbcGldID0gcFtqXV1bMF07IC8vIHN3YXAgaiA8LT4gcGkgaW4gZGF0YQoKICAgICAgICBEZW5zZU1hdHJpeC5fc3dhcFJvd3MoaiwgcGksIGRhdGEpOwogICAgICB9IC8vIGNoZWNrIGNvbHVtbiBpcyBpbiBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeAoKCiAgICAgIGlmIChqIDwgcm93cykgewogICAgICAgIC8vIGxvb3Agcm93cyAobG93ZXIgdHJpYW5ndWxhciBtYXRyaXgpCiAgICAgICAgZm9yIChpID0gaiArIDE7IGkgPCByb3dzOyBpKyspIHsKICAgICAgICAgIC8vIHZhbHVlIEAgaSwgagogICAgICAgICAgdmFyIHZpaiA9IGRhdGFbaV1bal07CgogICAgICAgICAgaWYgKCFlcXVhbFNjYWxhcih2aWosIDApKSB7CiAgICAgICAgICAgIC8vIHVwZGF0ZSBkYXRhCiAgICAgICAgICAgIGRhdGFbaV1bal0gPSBkaXZpZGVTY2FsYXIoZGF0YVtpXVtqXSwgdmpqKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gLy8gbG9vcCBjb2x1bW5zCgoKICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHsKICAgICAgLy8gbG9vcCByb3dzCiAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHsKICAgICAgICAvLyBpbml0aWFsaXplIHJvdyBpbiBhcnJheXMKICAgICAgICBpZiAoaiA9PT0gMCkgewogICAgICAgICAgLy8gY2hlY2sgcm93IGV4aXN0cyBpbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeAogICAgICAgICAgaWYgKGkgPCBjb2x1bW5zKSB7CiAgICAgICAgICAgIC8vIFUKICAgICAgICAgICAgdWRhdGFbaV0gPSBbXTsKICAgICAgICAgIH0gLy8gTAoKCiAgICAgICAgICBsZGF0YVtpXSA9IFtdOwogICAgICAgIH0gLy8gY2hlY2sgd2UgYXJlIGluIHRoZSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeAoKCiAgICAgICAgaWYgKGkgPCBqKSB7CiAgICAgICAgICAvLyBjaGVjayByb3cgZXhpc3RzIGluIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4CiAgICAgICAgICBpZiAoaSA8IGNvbHVtbnMpIHsKICAgICAgICAgICAgLy8gVQogICAgICAgICAgICB1ZGF0YVtpXVtqXSA9IGRhdGFbaV1bal07CiAgICAgICAgICB9IC8vIGNoZWNrIGNvbHVtbiBleGlzdHMgaW4gbG93ZXIgdHJpYW5ndWxhciBtYXRyaXgKCgogICAgICAgICAgaWYgKGogPCByb3dzKSB7CiAgICAgICAgICAgIC8vIEwKICAgICAgICAgICAgbGRhdGFbaV1bal0gPSAwOwogICAgICAgICAgfQoKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0gLy8gZGlhZ29uYWwgdmFsdWUKCgogICAgICAgIGlmIChpID09PSBqKSB7CiAgICAgICAgICAvLyBjaGVjayByb3cgZXhpc3RzIGluIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4CiAgICAgICAgICBpZiAoaSA8IGNvbHVtbnMpIHsKICAgICAgICAgICAgLy8gVQogICAgICAgICAgICB1ZGF0YVtpXVtqXSA9IGRhdGFbaV1bal07CiAgICAgICAgICB9IC8vIGNoZWNrIGNvbHVtbiBleGlzdHMgaW4gbG93ZXIgdHJpYW5ndWxhciBtYXRyaXgKCgogICAgICAgICAgaWYgKGogPCByb3dzKSB7CiAgICAgICAgICAgIC8vIEwKICAgICAgICAgICAgbGRhdGFbaV1bal0gPSAxOwogICAgICAgICAgfQoKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0gLy8gY2hlY2sgcm93IGV4aXN0cyBpbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeAoKCiAgICAgICAgaWYgKGkgPCBjb2x1bW5zKSB7CiAgICAgICAgICAvLyBVCiAgICAgICAgICB1ZGF0YVtpXVtqXSA9IDA7CiAgICAgICAgfSAvLyBjaGVjayBjb2x1bW4gZXhpc3RzIGluIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4CgoKICAgICAgICBpZiAoaiA8IHJvd3MpIHsKICAgICAgICAgIC8vIEwKICAgICAgICAgIGxkYXRhW2ldW2pdID0gZGF0YVtpXVtqXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gLy8gbCBtYXRyaXgKCgogICAgdmFyIGwgPSBuZXcgRGVuc2VNYXRyaXgoewogICAgICBkYXRhOiBsZGF0YSwKICAgICAgc2l6ZTogbHNpemUKICAgIH0pOyAvLyB1IG1hdHJpeAoKICAgIHZhciB1ID0gbmV3IERlbnNlTWF0cml4KHsKICAgICAgZGF0YTogdWRhdGEsCiAgICAgIHNpemU6IHVzaXplCiAgICB9KTsgLy8gcCB2ZWN0b3IKCiAgICB2YXIgcHYgPSBbXTsKCiAgICBmb3IgKGkgPSAwLCBuID0gcC5sZW5ndGg7IGkgPCBuOyBpKyspIHsKICAgICAgcHZbcFtpXV0gPSBpOwogICAgfSAvLyByZXR1cm4gbWF0cmljZXMKCgogICAgcmV0dXJuIHsKICAgICAgTDogbCwKICAgICAgVTogdSwKICAgICAgcDogcHYsCiAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiB0b1N0cmluZygpIHsKICAgICAgICByZXR1cm4gJ0w6ICcgKyB0aGlzLkwudG9TdHJpbmcoKSArICdcblU6ICcgKyB0aGlzLlUudG9TdHJpbmcoKSArICdcblA6ICcgKyB0aGlzLnA7CiAgICAgIH0KICAgIH07CiAgfQoKICBmdW5jdGlvbiBfc3BhcnNlTFVQKG0pIHsKICAgIC8vIHJvd3MgJiBjb2x1bW5zCiAgICB2YXIgcm93cyA9IG0uX3NpemVbMF07CiAgICB2YXIgY29sdW1ucyA9IG0uX3NpemVbMV07IC8vIG1pbmltdW0gcm93cyBhbmQgY29sdW1ucwoKICAgIHZhciBuID0gTWF0aC5taW4ocm93cywgY29sdW1ucyk7IC8vIG1hdHJpeCBhcnJheXMgKHdpbGwgbm90IGJlIG1vZGlmaWVkLCB0aGFua3MgdG8gcGVybXV0YXRpb24gdmVjdG9yKQoKICAgIHZhciB2YWx1ZXMgPSBtLl92YWx1ZXM7CiAgICB2YXIgaW5kZXggPSBtLl9pbmRleDsKICAgIHZhciBwdHIgPSBtLl9wdHI7IC8vIGwgbWF0cml4IGFycmF5cwoKICAgIHZhciBsdmFsdWVzID0gW107CiAgICB2YXIgbGluZGV4ID0gW107CiAgICB2YXIgbHB0ciA9IFtdOwogICAgdmFyIGxzaXplID0gW3Jvd3MsIG5dOyAvLyB1IG1hdHJpeCBhcnJheXMKCiAgICB2YXIgdXZhbHVlcyA9IFtdOwogICAgdmFyIHVpbmRleCA9IFtdOwogICAgdmFyIHVwdHIgPSBbXTsKICAgIHZhciB1c2l6ZSA9IFtuLCBjb2x1bW5zXTsgLy8gdmFycwoKICAgIHZhciBpLCBqLCBrOyAvLyBwZXJtdXRhdGlvbiB2ZWN0b3JzLCAoY3VycmVudCBpbmRleCAtPiBvcmlnaW5hbCBpbmRleCkgYW5kIChvcmlnaW5hbCBpbmRleCAtPiBjdXJyZW50IGluZGV4KQoKICAgIHZhciBwdkNvID0gW107CiAgICB2YXIgcHZPYyA9IFtdOwoKICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHsKICAgICAgcHZDb1tpXSA9IGk7CiAgICAgIHB2T2NbaV0gPSBpOwogICAgfSAvLyBzd2FwIGluZGljZXMgaW4gcGVybXV0YXRpb24gdmVjdG9ycyAoY29uZGl0aW9uIHggPCB5KSEKCgogICAgdmFyIHN3YXBJbmRlY2VzID0gZnVuY3Rpb24gc3dhcEluZGVjZXMoeCwgeSkgewogICAgICAvLyBmaW5kIHB2IGluZGVjZXMgZ2V0dGluZyBkYXRhIGZyb20geCBhbmQgeQogICAgICB2YXIga3ggPSBwdk9jW3hdOwogICAgICB2YXIga3kgPSBwdk9jW3ldOyAvLyB1cGRhdGUgcGVybXV0YXRpb24gdmVjdG9yIGN1cnJlbnQgLT4gb3JpZ2luYWwKCiAgICAgIHB2Q29ba3hdID0geTsKICAgICAgcHZDb1treV0gPSB4OyAvLyB1cGRhdGUgcGVybXV0YXRpb24gdmVjdG9yIG9yaWdpbmFsIC0+IGN1cnJlbnQKCiAgICAgIHB2T2NbeF0gPSBreTsKICAgICAgcHZPY1t5XSA9IGt4OwogICAgfTsgLy8gbG9vcCBjb2x1bW5zCgoKICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkgewogICAgICAvLyBzcGFyc2UgYWNjdW11bGF0b3IKICAgICAgdmFyIHNwYSA9IG5ldyBTcGEoKTsgLy8gY2hlY2sgbG93ZXIgdHJpYW5ndWxhciBtYXRyaXggaGFzIGEgdmFsdWUgQCBjb2x1bW4gagoKICAgICAgaWYgKGogPCByb3dzKSB7CiAgICAgICAgLy8gdXBkYXRlIHB0cgogICAgICAgIGxwdHIucHVzaChsdmFsdWVzLmxlbmd0aCk7IC8vIGZpcnN0IHZhbHVlIGluIGogY29sdW1uIGZvciBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeAoKICAgICAgICBsdmFsdWVzLnB1c2goMSk7CiAgICAgICAgbGluZGV4LnB1c2goaik7CiAgICAgIH0gLy8gdXBkYXRlIHB0cgoKCiAgICAgIHVwdHIucHVzaCh1dmFsdWVzLmxlbmd0aCk7IC8vIGswIDw9IGsgPCBrMSB3aGVyZSBrMCA9IF9wdHJbal0gJiYgazEgPSBfcHRyW2orMV0KCiAgICAgIHZhciBrMCA9IHB0cltqXTsKICAgICAgdmFyIGsxID0gcHRyW2ogKyAxXTsgLy8gY29weSBjb2x1bW4gaiBpbnRvIHNwYXJzZSBhY2N1bXVsYXRvcgoKICAgICAgZm9yIChrID0gazA7IGsgPCBrMTsgaysrKSB7CiAgICAgICAgLy8gcm93CiAgICAgICAgaSA9IGluZGV4W2tdOyAvLyBjb3B5IGNvbHVtbiB2YWx1ZXMgaW50byBzcGFyc2UgYWNjdW11bGF0b3IgKHVzZSBwZXJtdXRhdGlvbiB2ZWN0b3IpCgogICAgICAgIHNwYS5zZXQocHZDb1tpXSwgdmFsdWVzW2tdKTsKICAgICAgfSAvLyBza2lwIGZpcnN0IGNvbHVtbiBpbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeAoKCiAgICAgIGlmIChqID4gMCkgewogICAgICAgIC8vIGxvb3Agcm93cyBpbiBjb2x1bW4gaiAoYWJvdmUgZGlhZ29uYWwpCiAgICAgICAgc3BhLmZvckVhY2goMCwgaiAtIDEsIGZ1bmN0aW9uIChrLCB2a2opIHsKICAgICAgICAgIC8vIGxvb3Agcm93cyBpbiBjb2x1bW4gayAoTCkKICAgICAgICAgIFNwYXJzZU1hdHJpeC5fZm9yRWFjaFJvdyhrLCBsdmFsdWVzLCBsaW5kZXgsIGxwdHIsIGZ1bmN0aW9uIChpLCB2aWspIHsKICAgICAgICAgICAgLy8gY2hlY2sgcm93IGlzIGJlbG93IGsKICAgICAgICAgICAgaWYgKGkgPiBrKSB7CiAgICAgICAgICAgICAgLy8gdXBkYXRlIHNwYSB2YWx1ZQogICAgICAgICAgICAgIHNwYS5hY2N1bXVsYXRlKGksIHVuYXJ5TWludXMobXVsdGlwbHlTY2FsYXIodmlrLCB2a2opKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9IC8vIHJvdyB3aXRoIGxhcmdlciB2YWx1ZSBpbiBzcGEsIHJvdyA+PSBqCgoKICAgICAgdmFyIHBpID0gajsKICAgICAgdmFyIHZqaiA9IHNwYS5nZXQoaik7CiAgICAgIHZhciBwYWJzdiA9IGFicyh2amopOyAvLyBsb29wIHZhbHVlcyBpbiBzcGEgKG9yZGVyIGJ5IHJvdywgYmVsb3cgZGlhZ29uYWwpCgogICAgICBzcGEuZm9yRWFjaChqICsgMSwgcm93cyAtIDEsIGZ1bmN0aW9uICh4LCB2KSB7CiAgICAgICAgLy8gYWJzb2x1dGUgdmFsdWUKICAgICAgICB2YXIgYWJzdiA9IGFicyh2KTsgLy8gdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHBpdm90ZSB2YWx1ZQoKICAgICAgICBpZiAobGFyZ2VyKGFic3YsIHBhYnN2KSkgewogICAgICAgICAgLy8gc3RvcmUgcm93CiAgICAgICAgICBwaSA9IHg7IC8vIHVwZGF0ZSBtYXggdmFsdWUKCiAgICAgICAgICBwYWJzdiA9IGFic3Y7IC8vIHZhbHVlIEAgW2osIGpdCgogICAgICAgICAgdmpqID0gdjsKICAgICAgICB9CiAgICAgIH0pOyAvLyBzd2FwIHJvd3MgKGogPC0+IHBpKQoKICAgICAgaWYgKGogIT09IHBpKSB7CiAgICAgICAgLy8gc3dhcCB2YWx1ZXMgaiA8LT4gcGkgaW4gTAogICAgICAgIFNwYXJzZU1hdHJpeC5fc3dhcFJvd3MoaiwgcGksIGxzaXplWzFdLCBsdmFsdWVzLCBsaW5kZXgsIGxwdHIpOyAvLyBzd2FwIHZhbHVlcyBqIDwtPiBwaSBpbiBVCgoKICAgICAgICBTcGFyc2VNYXRyaXguX3N3YXBSb3dzKGosIHBpLCB1c2l6ZVsxXSwgdXZhbHVlcywgdWluZGV4LCB1cHRyKTsgLy8gc3dhcCB2YWx1ZXMgaW4gc3BhCgoKICAgICAgICBzcGEuc3dhcChqLCBwaSk7IC8vIHVwZGF0ZSBwZXJtdXRhdGlvbiB2ZWN0b3IgKHN3YXAgdmFsdWVzIEAgaiwgcGkpCgogICAgICAgIHN3YXBJbmRlY2VzKGosIHBpKTsKICAgICAgfSAvLyBsb29wIHZhbHVlcyBpbiBzcGEgKG9yZGVyIGJ5IHJvdykKCgogICAgICBzcGEuZm9yRWFjaCgwLCByb3dzIC0gMSwgZnVuY3Rpb24gKHgsIHYpIHsKICAgICAgICAvLyBjaGVjayB3ZSBhcmUgYWJvdmUgZGlhZ29uYWwKICAgICAgICBpZiAoeCA8PSBqKSB7CiAgICAgICAgICAvLyB1cGRhdGUgdXBwZXIgdHJpYW5ndWxhciBtYXRyaXgKICAgICAgICAgIHV2YWx1ZXMucHVzaCh2KTsKICAgICAgICAgIHVpbmRleC5wdXNoKHgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyB1cGRhdGUgdmFsdWUKICAgICAgICAgIHYgPSBkaXZpZGVTY2FsYXIodiwgdmpqKTsgLy8gY2hlY2sgdmFsdWUgaXMgbm9uIHplcm8KCiAgICAgICAgICBpZiAoIWVxdWFsU2NhbGFyKHYsIDApKSB7CiAgICAgICAgICAgIC8vIHVwZGF0ZSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeAogICAgICAgICAgICBsdmFsdWVzLnB1c2godik7CiAgICAgICAgICAgIGxpbmRleC5wdXNoKHgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9OwoKICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHsKICAgICAgX2xvb3AoKTsKICAgIH0gLy8gdXBkYXRlIHB0cnMKCgogICAgdXB0ci5wdXNoKHV2YWx1ZXMubGVuZ3RoKTsKICAgIGxwdHIucHVzaChsdmFsdWVzLmxlbmd0aCk7IC8vIHJldHVybiBtYXRyaWNlcwoKICAgIHJldHVybiB7CiAgICAgIEw6IG5ldyBTcGFyc2VNYXRyaXgoewogICAgICAgIHZhbHVlczogbHZhbHVlcywKICAgICAgICBpbmRleDogbGluZGV4LAogICAgICAgIHB0cjogbHB0ciwKICAgICAgICBzaXplOiBsc2l6ZQogICAgICB9KSwKICAgICAgVTogbmV3IFNwYXJzZU1hdHJpeCh7CiAgICAgICAgdmFsdWVzOiB1dmFsdWVzLAogICAgICAgIGluZGV4OiB1aW5kZXgsCiAgICAgICAgcHRyOiB1cHRyLAogICAgICAgIHNpemU6IHVzaXplCiAgICAgIH0pLAogICAgICBwOiBwdkNvLAogICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7CiAgICAgICAgcmV0dXJuICdMOiAnICsgdGhpcy5MLnRvU3RyaW5nKCkgKyAnXG5VOiAnICsgdGhpcy5VLnRvU3RyaW5nKCkgKyAnXG5QOiAnICsgdGhpcy5wOwogICAgICB9CiAgICB9OwogIH0KfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2FsZ2VicmEvZGVjb21wb3NpdGlvbi9xci5qcwpmdW5jdGlvbiBxcl9leHRlbmRzKCkgeyBxcl9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIHFyX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfQoKCnZhciBxcl9uYW1lID0gJ3FyJzsKdmFyIHFyX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ3plcm9zJywgJ2lkZW50aXR5JywgJ2lzWmVybycsICdlcXVhbCcsICdzaWduJywgJ3NxcnQnLCAnY29uaicsICd1bmFyeU1pbnVzJywgJ2FkZFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnc3VidHJhY3QnLCAnY29tcGxleCddOwp2YXIgY3JlYXRlUXIgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShxcl9uYW1lLCBxcl9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIHplcm9zID0gX3JlZi56ZXJvcywKICAgICAgaWRlbnRpdHkgPSBfcmVmLmlkZW50aXR5LAogICAgICBpc1plcm8gPSBfcmVmLmlzWmVybywKICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsLAogICAgICBzaWduID0gX3JlZi5zaWduLAogICAgICBzcXJ0ID0gX3JlZi5zcXJ0LAogICAgICBjb25qID0gX3JlZi5jb25qLAogICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLAogICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhciwKICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsCiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhciwKICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LAogICAgICBjb21wbGV4ID0gX3JlZi5jb21wbGV4OwoKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIE1hdHJpeCBRUiBkZWNvbXBvc2l0aW9uLiBNYXRyaXggYEFgIGlzIGRlY29tcG9zZWQgaW4KICAgKiB0d28gbWF0cmljZXMgKGBRYCwgYFJgKSB3aGVyZSBgUWAgaXMgYW4KICAgKiBvcnRob2dvbmFsIG1hdHJpeCBhbmQgYFJgIGlzIGFuIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4LgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5xcihBKQogICAqCiAgICogRXhhbXBsZToKICAgKgogICAqICAgIGNvbnN0IG0gPSBbCiAgICogICAgICBbMSwgLTEsICA0XSwKICAgKiAgICAgIFsxLCAgNCwgLTJdLAogICAqICAgICAgWzEsICA0LCAgMl0sCiAgICogICAgICBbMSwgIC0xLCAwXQogICAqICAgIF0KICAgKiAgICBjb25zdCByZXN1bHQgPSBtYXRoLnFyKG0pCiAgICogICAgLy8gciA9IHsKICAgKiAgICAvLyAgIFE6IFsKICAgKiAgICAvLyAgICAgWzAuNSwgLTAuNSwgICAwLjVdLAogICAqICAgIC8vICAgICBbMC41LCAgMC41LCAgLTAuNV0sCiAgICogICAgLy8gICAgIFswLjUsICAwLjUsICAgMC41XSwKICAgKiAgICAvLyAgICAgWzAuNSwgLTAuNSwgIC0wLjVdLAogICAqICAgIC8vICAgXSwKICAgKiAgICAvLyAgIFI6IFsKICAgKiAgICAvLyAgICAgWzIsIDMsICAyXSwKICAgKiAgICAvLyAgICAgWzAsIDUsIC0yXSwKICAgKiAgICAvLyAgICAgWzAsIDAsICA0XSwKICAgKiAgICAvLyAgICAgWzAsIDAsICAwXQogICAqICAgIC8vICAgXQogICAqICAgIC8vIH0KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgbHVwLCBsdXNvbHZlCiAgICoKICAgKiBAcGFyYW0ge01hdHJpeCB8IEFycmF5fSBBICAgIEEgdHdvIGRpbWVuc2lvbmFsIG1hdHJpeCBvciBhcnJheQogICAqIGZvciB3aGljaCB0byBnZXQgdGhlIFFSIGRlY29tcG9zaXRpb24uCiAgICoKICAgKiBAcmV0dXJuIHt7UTogQXJyYXkgfCBNYXRyaXgsIFI6IEFycmF5IHwgTWF0cml4fX0gUTogdGhlIG9ydGhvZ29uYWwKICAgKiBtYXRyaXggYW5kIFI6IHRoZSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeAogICAqLwogIHJldHVybiBxcl9leHRlbmRzKHR5cGVkKHFyX25hbWUsIHsKICAgIERlbnNlTWF0cml4OiBmdW5jdGlvbiBEZW5zZU1hdHJpeChtKSB7CiAgICAgIHJldHVybiBfZGVuc2VRUihtKTsKICAgIH0sCiAgICBTcGFyc2VNYXRyaXg6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeChtKSB7CiAgICAgIHJldHVybiBfc3BhcnNlUVIobSk7CiAgICB9LAogICAgQXJyYXk6IGZ1bmN0aW9uIEFycmF5KGEpIHsKICAgICAgLy8gY3JlYXRlIGRlbnNlIG1hdHJpeCBmcm9tIGFycmF5CiAgICAgIHZhciBtID0gbWF0cml4KGEpOyAvLyBsdXAsIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb24KCiAgICAgIHZhciByID0gX2RlbnNlUVIobSk7IC8vIHJlc3VsdAoKCiAgICAgIHJldHVybiB7CiAgICAgICAgUTogci5RLnZhbHVlT2YoKSwKICAgICAgICBSOiByLlIudmFsdWVPZigpCiAgICAgIH07CiAgICB9CiAgfSksIHsKICAgIF9kZW5zZVFSaW1wbDogX2RlbnNlUVJpbXBsCiAgfSk7CgogIGZ1bmN0aW9uIF9kZW5zZVFSaW1wbChtKSB7CiAgICAvLyByb3dzICYgY29sdW1ucyAobSB4IG4pCiAgICB2YXIgcm93cyA9IG0uX3NpemVbMF07IC8vIG0KCiAgICB2YXIgY29scyA9IG0uX3NpemVbMV07IC8vIG4KCiAgICB2YXIgUSA9IGlkZW50aXR5KFtyb3dzXSwgJ2RlbnNlJyk7CiAgICB2YXIgUWRhdGEgPSBRLl9kYXRhOwogICAgdmFyIFIgPSBtLmNsb25lKCk7CiAgICB2YXIgUmRhdGEgPSBSLl9kYXRhOyAvLyB2YXJzCgogICAgdmFyIGksIGosIGs7CiAgICB2YXIgdyA9IHplcm9zKFtyb3dzXSwgJycpOwoKICAgIGZvciAoayA9IDA7IGsgPCBNYXRoLm1pbihjb2xzLCByb3dzKTsgKytrKSB7CiAgICAgIC8qCiAgICAgICAqICoqay10aCBIb3VzZWhvbGQgbWF0cml4KioKICAgICAgICoKICAgICAgICogVGhlIG1hdHJpeCBJIC0gMip2KnRyYW5zcG9zZSh2KQogICAgICAgKiB4ICAgICA9IGZpcnN0IGNvbHVtbiBvZiBBCiAgICAgICAqIHgxICAgID0gZmlyc3QgZWxlbWVudCBvZiB4CiAgICAgICAqIGFscGhhID0geDEgLyB8eDF8ICogfHh8CiAgICAgICAqIGUxICAgID0gdHJhbnBvc2UoWzEsIDAsIDAsIC4uLl0pCiAgICAgICAqIHUgICAgID0geCAtIGFscGhhICogZTEKICAgICAgICogdiAgICAgPSB1IC8gfHV8CiAgICAgICAqCiAgICAgICAqIEhvdXNlaG9sZCBtYXRyaXggPSBJIC0gMiAqIHYgKiB0cmFucG9zZSh2KQogICAgICAgKgogICAgICAgKiAgKiBJbml0aWFsbHkgUSA9IEkgYW5kIFIgPSBBLgogICAgICAgKiAgKiBIb3VzZWhvbGQgbWF0cml4IGlzIGEgcmVmbGVjdGlvbiBpbiBhIHBsYW5lIG5vcm1hbCB0byB2IHdoaWNoCiAgICAgICAqICAgIHdpbGwgemVybyBvdXQgYWxsIGJ1dCB0aGUgdG9wIHJpZ2h0IGVsZW1lbnQgaW4gUi4KICAgICAgICogICogQXBwcGx5aW5nIHJlZmxlY3Rpb24gdG8gYm90aCBRIGFuZCBSIHdpbGwgbm90IGNoYW5nZSBwcm9kdWN0LgogICAgICAgKiAgKiBSZXBlYXQgdGhpcyBwcm9jZXNzIG9uIHRoZSAoMSwxKSBtaW5vciB0byBnZXQgUiBhcyBhbiB1cHBlcgogICAgICAgKiAgICB0cmlhbmd1bGFyIG1hdHJpeC4KICAgICAgICogICogUmVmbGVjdGlvbnMgbGVhdmUgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29sdW1ucyBvZiBRIHVuY2hhbmdlZAogICAgICAgKiAgICBzbyBRIHJlbWFpbnMgb3Rob2dhbmFsLgogICAgICAgKgogICAgICAgKi8KICAgICAgdmFyIHBpdm90ID0gUmRhdGFba11ba107CiAgICAgIHZhciBzZ24gPSB1bmFyeU1pbnVzKGVxdWFsKHBpdm90LCAwKSA/IDEgOiBzaWduKHBpdm90KSk7CiAgICAgIHZhciBjb25qU2duID0gY29uaihzZ24pOwogICAgICB2YXIgYWxwaGFTcXVhcmVkID0gMDsKCiAgICAgIGZvciAoaSA9IGs7IGkgPCByb3dzOyBpKyspIHsKICAgICAgICBhbHBoYVNxdWFyZWQgPSBhZGRTY2FsYXIoYWxwaGFTcXVhcmVkLCBtdWx0aXBseVNjYWxhcihSZGF0YVtpXVtrXSwgY29uaihSZGF0YVtpXVtrXSkpKTsKICAgICAgfQoKICAgICAgdmFyIGFscGhhID0gbXVsdGlwbHlTY2FsYXIoc2duLCBzcXJ0KGFscGhhU3F1YXJlZCkpOwoKICAgICAgaWYgKCFpc1plcm8oYWxwaGEpKSB7CiAgICAgICAgLy8gZmlyc3QgZWxlbWVudCBpbiB2ZWN0b3IgdQogICAgICAgIHZhciB1MSA9IHN1YnRyYWN0KHBpdm90LCBhbHBoYSk7IC8vIHcgPSB2ICogdTEgLyB8dXwgICAgKG9ubHkgZWxlbWVudHMgayB0byAocm93cy0xKSBhcmUgdXNlZCkKCiAgICAgICAgd1trXSA9IDE7CgogICAgICAgIGZvciAoaSA9IGsgKyAxOyBpIDwgcm93czsgaSsrKSB7CiAgICAgICAgICB3W2ldID0gZGl2aWRlU2NhbGFyKFJkYXRhW2ldW2tdLCB1MSk7CiAgICAgICAgfSAvLyB0YXUgPSAtIGNvbmoodTEgLyBhbHBoYSkKCgogICAgICAgIHZhciB0YXUgPSB1bmFyeU1pbnVzKGNvbmooZGl2aWRlU2NhbGFyKHUxLCBhbHBoYSkpKTsKICAgICAgICB2YXIgcyA9IHZvaWQgMDsKICAgICAgICAvKgogICAgICAgICAqIHRhdSBhbmQgdyBoYXZlIGJlZW4gY2hvb3NlbiBzbyB0aGF0CiAgICAgICAgICoKICAgICAgICAgKiAyICogdiAqIHRyYW5wb3NlKHYpID0gdGF1ICogdyAqIHRyYW5wb3NlKHcpCiAgICAgICAgICovCgogICAgICAgIC8qCiAgICAgICAgICogLS0gY2FsY3VsYXRlIFIgPSBSIC0gdGF1ICogdyAqIHRyYW5wb3NlKHcpICogUiAtLQogICAgICAgICAqIE9ubHkgZG8gY2FsY3VsYXRpb24gd2l0aCByb3dzIGsgdG8gKHJvd3MtMSkKICAgICAgICAgKiBBZGRpdGlvbmFsbHkgY29sdW1ucyAwIHRvIChrLTEpIHdpbGwgbm90IGJlIGNoYW5nZWQgYnkgdGhpcwogICAgICAgICAqICAgbXVsdGlwbGljYXRpb24gc28gZG8gbm90IGJvdGhlciByZWNhbGN1bGF0aW5nIHRoZW0KICAgICAgICAgKi8KCiAgICAgICAgZm9yIChqID0gazsgaiA8IGNvbHM7IGorKykgewogICAgICAgICAgcyA9IDAuMDsgLy8gY2FsY3VsYXRlIGp0aCBlbGVtZW50IG9mIFt0cmFucG9zZSh3KSAqIFJdCgogICAgICAgICAgZm9yIChpID0gazsgaSA8IHJvd3M7IGkrKykgewogICAgICAgICAgICBzID0gYWRkU2NhbGFyKHMsIG11bHRpcGx5U2NhbGFyKGNvbmood1tpXSksIFJkYXRhW2ldW2pdKSk7CiAgICAgICAgICB9IC8vIGNhbGN1bGF0ZSB0aGUganRoIGVsZW1lbnQgb2YgW3RhdSAqIHRyYW5zcG9zZSh3KSAqIFJdCgoKICAgICAgICAgIHMgPSBtdWx0aXBseVNjYWxhcihzLCB0YXUpOwoKICAgICAgICAgIGZvciAoaSA9IGs7IGkgPCByb3dzOyBpKyspIHsKICAgICAgICAgICAgUmRhdGFbaV1bal0gPSBtdWx0aXBseVNjYWxhcihzdWJ0cmFjdChSZGF0YVtpXVtqXSwgbXVsdGlwbHlTY2FsYXIod1tpXSwgcykpLCBjb25qU2duKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoKICAgICAgICAgKiAtLSBjYWxjdWxhdGUgUSA9IFEgLSB0YXUgKiBRICogdyAqIHRyYW5zcG9zZSh3KSAtLQogICAgICAgICAqIFEgaXMgYSBzcXVhcmUgbWF0cml4IChyb3dzIHggcm93cykKICAgICAgICAgKiBPbmx5IGRvIGNhbGN1bGF0aW9uIHdpdGggY29sdW1ucyBrIHRvIChyb3dzLTEpCiAgICAgICAgICogQWRkaXRpb25hbGx5IHJvd3MgMCB0byAoay0xKSB3aWxsIG5vdCBiZSBjaGFuZ2VkIGJ5IHRoaXMKICAgICAgICAgKiAgIG11bHRpcGxpY2F0aW9uIHNvIGRvIG5vdCBib3RoZXIgcmVjYWxjdWxhdGluZyB0aGVtCiAgICAgICAgICovCgoKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7CiAgICAgICAgICBzID0gMC4wOyAvLyBjYWxjdWxhdGUgaXRoIGVsZW1lbnQgb2YgW1EgKiB3XQoKICAgICAgICAgIGZvciAoaiA9IGs7IGogPCByb3dzOyBqKyspIHsKICAgICAgICAgICAgcyA9IGFkZFNjYWxhcihzLCBtdWx0aXBseVNjYWxhcihRZGF0YVtpXVtqXSwgd1tqXSkpOwogICAgICAgICAgfSAvLyBjYWxjdWxhdGUgdGhlIGl0aCBlbGVtZW50IG9mIFt0YXUgKiBRICogd10KCgogICAgICAgICAgcyA9IG11bHRpcGx5U2NhbGFyKHMsIHRhdSk7CgogICAgICAgICAgZm9yIChqID0gazsgaiA8IHJvd3M7ICsraikgewogICAgICAgICAgICBRZGF0YVtpXVtqXSA9IGRpdmlkZVNjYWxhcihzdWJ0cmFjdChRZGF0YVtpXVtqXSwgbXVsdGlwbHlTY2FsYXIocywgY29uaih3W2pdKSkpLCBjb25qU2duKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gLy8gcmV0dXJuIG1hdHJpY2VzCgoKICAgIHJldHVybiB7CiAgICAgIFE6IFEsCiAgICAgIFI6IFIsCiAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiB0b1N0cmluZygpIHsKICAgICAgICByZXR1cm4gJ1E6ICcgKyB0aGlzLlEudG9TdHJpbmcoKSArICdcblI6ICcgKyB0aGlzLlIudG9TdHJpbmcoKTsKICAgICAgfQogICAgfTsKICB9CgogIGZ1bmN0aW9uIF9kZW5zZVFSKG0pIHsKICAgIHZhciByZXQgPSBfZGVuc2VRUmltcGwobSk7CgogICAgdmFyIFJkYXRhID0gcmV0LlIuX2RhdGE7CgogICAgaWYgKG0uX2RhdGEubGVuZ3RoID4gMCkgewogICAgICB2YXIgemVybyA9IFJkYXRhWzBdWzBdLnR5cGUgPT09ICdDb21wbGV4JyA/IGNvbXBsZXgoMCkgOiAwOwoKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBSZGF0YS5sZW5ndGg7ICsraSkgewogICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaSAmJiBqIDwgKFJkYXRhWzBdIHx8IFtdKS5sZW5ndGg7ICsraikgewogICAgICAgICAgUmRhdGFbaV1bal0gPSB6ZXJvOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHJldHVybiByZXQ7CiAgfQoKICBmdW5jdGlvbiBfc3BhcnNlUVIobSkgewogICAgdGhyb3cgbmV3IEVycm9yKCdxciBub3QgaW1wbGVtZW50ZWQgZm9yIHNwYXJzZSBtYXRyaWNlcyB5ZXQnKTsKICB9Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc1Blcm11dGUuanMKLyoqCiAqIFBlcm11dGVzIGEgc3BhcnNlIG1hdHJpeCBDID0gUCAqIEEgKiBRCiAqCiAqIEBwYXJhbSB7U3BhcnNlTWF0cml4fSAgYSAgICAgICAgIFRoZSBNYXRyaXggQQogKiBAcGFyYW0ge0FycmF5fSAgIHBpbnYgICAgICAgICAgICBUaGUgcm93IHBlcm11dGF0aW9uIHZlY3RvcgogKiBAcGFyYW0ge0FycmF5fSAgIHEgICAgICAgICAgICAgICBUaGUgY29sdW1uIHBlcm11dGF0aW9uIHZlY3RvcgogKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlcyAgICAgICAgICBDcmVhdGUgYSBwYXR0ZXJuIG1hdHJpeCAoZmFsc2UpLCB2YWx1ZXMgYW5kIHBhdHRlcm4gb3RoZXJ3aXNlCiAqCiAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgIEMgPSBQICogQSAqIFEsIG51bGwgb24gZXJyb3IKICoKICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWwKICovCmZ1bmN0aW9uIGNzUGVybXV0ZShhLCBwaW52LCBxLCB2YWx1ZXMpIHsKICAvLyBhIGFycmF5cwogIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzOwogIHZhciBhaW5kZXggPSBhLl9pbmRleDsKICB2YXIgYXB0ciA9IGEuX3B0cjsKICB2YXIgYXNpemUgPSBhLl9zaXplOwogIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gcm93cyAmIGNvbHVtbnMKCiAgdmFyIG0gPSBhc2l6ZVswXTsKICB2YXIgbiA9IGFzaXplWzFdOyAvLyBjIGFycmF5cwoKICB2YXIgY3ZhbHVlcyA9IHZhbHVlcyAmJiBhLl92YWx1ZXMgPyBbXSA6IG51bGw7CiAgdmFyIGNpbmRleCA9IFtdOyAvLyAoYXB0cltuXSkKCiAgdmFyIGNwdHIgPSBbXTsgLy8gKG4gKyAxKQogIC8vIGluaXRpYWxpemUgdmFycwoKICB2YXIgbnogPSAwOyAvLyBsb29wIGNvbHVtbnMKCiAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyBrKyspIHsKICAgIC8vIGNvbHVtbiBrIG9mIEMgaXMgY29sdW1uIHFba10gb2YgQQogICAgY3B0cltrXSA9IG56OyAvLyBhcHBseSBjb2x1bW4gcGVybXV0YXRpb24KCiAgICB2YXIgaiA9IHEgPyBxW2tdIDogazsgLy8gbG9vcCB2YWx1ZXMgaW4gY29sdW1uIGogb2YgQQoKICAgIGZvciAodmFyIHQwID0gYXB0cltqXSwgdDEgPSBhcHRyW2ogKyAxXSwgdCA9IHQwOyB0IDwgdDE7IHQrKykgewogICAgICAvLyByb3cgaSBvZiBBIGlzIHJvdyBwaW52W2ldIG9mIEMKICAgICAgdmFyIHIgPSBwaW52ID8gcGludlthaW5kZXhbdF1dIDogYWluZGV4W3RdOyAvLyBpbmRleAoKICAgICAgY2luZGV4W256XSA9IHI7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcG9wdWxhdGUgdmFsdWVzCgogICAgICBpZiAoY3ZhbHVlcykgewogICAgICAgIGN2YWx1ZXNbbnpdID0gYXZhbHVlc1t0XTsKICAgICAgfSAvLyBpbmNyZW1lbnQgbnVtYmVyIG9mIG5vbnplcm8gZWxlbWVudHMKCgogICAgICBueisrOwogICAgfQogIH0gLy8gZmluYWxpemUgdGhlIGxhc3QgY29sdW1uIG9mIEMKCgogIGNwdHJbbl0gPSBuejsgLy8gcmV0dXJuIEMgbWF0cml4CgogIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7CiAgICB2YWx1ZXM6IGN2YWx1ZXMsCiAgICBpbmRleDogY2luZGV4LAogICAgcHRyOiBjcHRyLAogICAgc2l6ZTogW20sIG5dLAogICAgZGF0YXR5cGU6IGFkdAogIH0pOwp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzVGRmcy5qcwovKioKICogRGVwdGgtZmlyc3Qgc2VhcmNoIGFuZCBwb3N0b3JkZXIgb2YgYSB0cmVlIHJvb3RlZCBhdCBub2RlIGoKICoKICogQHBhcmFtIHtOdW1iZXJ9ICBqICAgICAgICAgICAgICAgVGhlIHRyZWUgbm9kZQogKiBAcGFyYW0ge051bWJlcn0gIGsKICogQHBhcmFtIHtBcnJheX0gICB3ICAgICAgICAgICAgICAgVGhlIHdvcmtzcGFjZSBhcnJheQogKiBAcGFyYW0ge051bWJlcn0gIGhlYWQgICAgICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgaGVhZCBhcnJheQogKiBAcGFyYW0ge051bWJlcn0gIG5leHQgICAgICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgbmV4dCBhcnJheQogKiBAcGFyYW0ge0FycmF5fSAgIHBvc3QgICAgICAgICAgICBUaGUgcG9zdCBvcmRlcmluZyBhcnJheQogKiBAcGFyYW0ge051bWJlcn0gIHN0YWNrICAgICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgc3RhY2sgYXJyYXkKICoKICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWwKICovCmZ1bmN0aW9uIGNzVGRmcyhqLCBrLCB3LCBoZWFkLCBuZXh0LCBwb3N0LCBzdGFjaykgewogIC8vIHZhcmlhYmxlcwogIHZhciB0b3AgPSAwOyAvLyBwbGFjZSBqIG9uIHRoZSBzdGFjawoKICB3W3N0YWNrXSA9IGo7IC8vIHdoaWxlIChzdGFjayBpcyBub3QgZW1wdHkpCgogIHdoaWxlICh0b3AgPj0gMCkgewogICAgLy8gcCA9IHRvcCBvZiBzdGFjawogICAgdmFyIHAgPSB3W3N0YWNrICsgdG9wXTsgLy8gaSA9IHlvdW5nZXN0IGNoaWxkIG9mIHAKCiAgICB2YXIgaSA9IHdbaGVhZCArIHBdOwoKICAgIGlmIChpID09PSAtMSkgewogICAgICAvLyBwIGhhcyBubyB1bm9yZGVyZWQgY2hpbGRyZW4gbGVmdAogICAgICB0b3AtLTsgLy8gbm9kZSBwIGlzIHRoZSBrdGggcG9zdG9yZGVyZWQgbm9kZQoKICAgICAgcG9zdFtrKytdID0gcDsKICAgIH0gZWxzZSB7CiAgICAgIC8vIHJlbW92ZSBpIGZyb20gY2hpbGRyZW4gb2YgcAogICAgICB3W2hlYWQgKyBwXSA9IHdbbmV4dCArIGldOyAvLyBpbmNyZW1lbnQgdG9wCgogICAgICArK3RvcDsgLy8gc3RhcnQgZGZzIG9uIGNoaWxkIG5vZGUgaQoKICAgICAgd1tzdGFjayArIHRvcF0gPSBpOwogICAgfQogIH0KCiAgcmV0dXJuIGs7Cn0KLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NQb3N0LmpzCgovKioKICogUG9zdCBvcmRlciBhIHRyZWUgb2YgZm9yZXN0CiAqCiAqIEBwYXJhbSB7QXJyYXl9ICAgcGFyZW50ICAgICAgICAgIFRoZSB0cmVlIG9yIGZvcmVzdAogKiBAcGFyYW0ge051bWJlcn0gIG4gICAgICAgICAgICAgICBOdW1iZXIgb2YgY29sdW1ucwogKgogKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbAogKi8KCmZ1bmN0aW9uIGNzUG9zdChwYXJlbnQsIG4pIHsKICAvLyBjaGVjayBpbnB1dHMKICBpZiAoIXBhcmVudCkgewogICAgcmV0dXJuIG51bGw7CiAgfSAvLyB2YXJzCgoKICB2YXIgayA9IDA7CiAgdmFyIGo7IC8vIGFsbG9jYXRlIHJlc3VsdAoKICB2YXIgcG9zdCA9IFtdOyAvLyAobikKICAvLyB3b3Jrc3BhY2UsIGhlYWQ6IGZpcnN0IG4gZW50cmllcywgbmV4dDogbmV4dCBuIGVudHJpZXMsIHN0YWNrOiBsYXN0IG4gZW50cmllcwoKICB2YXIgdyA9IFtdOyAvLyAoMyAqIG4pCgogIHZhciBoZWFkID0gMDsKICB2YXIgbmV4dCA9IG47CiAgdmFyIHN0YWNrID0gMiAqIG47IC8vIGluaXRpYWxpemUgd29ya3NwYWNlCgogIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHsKICAgIC8vIGVtcHR5IGxpbmtlZCBsaXN0cwogICAgd1toZWFkICsgal0gPSAtMTsKICB9IC8vIHRyYXZlcnNlIG5vZGVzIGluIHJldmVyc2Ugb3JkZXIKCgogIGZvciAoaiA9IG4gLSAxOyBqID49IDA7IGotLSkgewogICAgLy8gY2hlY2sgaiBpcyBhIHJvb3QKICAgIGlmIChwYXJlbnRbal0gPT09IC0xKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfSAvLyBhZGQgaiB0byBsaXN0IG9mIGl0cyBwYXJlbnQKCgogICAgd1tuZXh0ICsgal0gPSB3W2hlYWQgKyBwYXJlbnRbal1dOwogICAgd1toZWFkICsgcGFyZW50W2pdXSA9IGo7CiAgfSAvLyBsb29wIG5vZGVzCgoKICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7CiAgICAvLyBza2lwIGogaWYgaXQgaXMgbm90IGEgcm9vdAogICAgaWYgKHBhcmVudFtqXSAhPT0gLTEpIHsKICAgICAgY29udGludWU7CiAgICB9IC8vIGRlcHRoLWZpcnN0IHNlYXJjaAoKCiAgICBrID0gY3NUZGZzKGosIGssIHcsIGhlYWQsIG5leHQsIHBvc3QsIHN0YWNrKTsKICB9CgogIHJldHVybiBwb3N0Owp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzRXRyZWUuanMKLyoqCiAqIENvbXB1dGVzIHRoZSBlbGltaW5hdGlvbiB0cmVlIG9mIE1hdHJpeCBBICh1c2luZyB0cml1KEEpKSBvciB0aGUKICogZWxpbWluYXRpb24gdHJlZSBvZiBBJ0Egd2l0aG91dCBmb3JtaW5nIEEnQS4KICoKICogQHBhcmFtIHtNYXRyaXh9ICBhICAgICAgICAgICAgICAgVGhlIEEgTWF0cml4CiAqIEBwYXJhbSB7Ym9vbGVhbn0gYXRhICAgICAgICAgICAgIEEgdmFsdWUgb2YgdHJ1ZSB0aGUgZnVuY3Rpb24gY29tcHV0ZXMgdGhlIGV0cmVlIG9mIEEnQQogKgogKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbAogKi8KZnVuY3Rpb24gY3NFdHJlZShhLCBhdGEpIHsKICAvLyBjaGVjayBpbnB1dHMKICBpZiAoIWEpIHsKICAgIHJldHVybiBudWxsOwogIH0gLy8gYSBhcnJheXMKCgogIHZhciBhaW5kZXggPSBhLl9pbmRleDsKICB2YXIgYXB0ciA9IGEuX3B0cjsKICB2YXIgYXNpemUgPSBhLl9zaXplOyAvLyByb3dzICYgY29sdW1ucwoKICB2YXIgbSA9IGFzaXplWzBdOwogIHZhciBuID0gYXNpemVbMV07IC8vIGFsbG9jYXRlIHJlc3VsdAoKICB2YXIgcGFyZW50ID0gW107IC8vIChuKQogIC8vIGFsbG9jYXRlIHdvcmtzcGFjZQoKICB2YXIgdyA9IFtdOyAvLyAobiArIChhdGEgPyBtIDogMCkpCgogIHZhciBhbmNlc3RvciA9IDA7IC8vIGZpcnN0IG4gZW50cmllcyBpbiB3CgogIHZhciBwcmV2ID0gbjsgLy8gbGFzdCBtIGVudHJpZXMgKGF0YSA9IHRydWUpCgogIHZhciBpLCBpbmV4dDsgLy8gY2hlY2sgd2UgYXJlIGNhbGN1bGF0aW5nIEEnQQoKICBpZiAoYXRhKSB7CiAgICAvLyBpbml0aWFsaXplIHdvcmtzcGFjZQogICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykgewogICAgICB3W3ByZXYgKyBpXSA9IC0xOwogICAgfQogIH0gLy8gbG9vcCBjb2x1bW5zCgoKICBmb3IgKHZhciBrID0gMDsgayA8IG47IGsrKykgewogICAgLy8gbm9kZSBrIGhhcyBubyBwYXJlbnQgeWV0CiAgICBwYXJlbnRba10gPSAtMTsgLy8gbm9yIGRvZXMgayBoYXZlIGFuIGFuY2VzdG9yCgogICAgd1thbmNlc3RvciArIGtdID0gLTE7IC8vIHZhbHVlcyBpbiBjb2x1bW4gawoKICAgIGZvciAodmFyIHAwID0gYXB0cltrXSwgcDEgPSBhcHRyW2sgKyAxXSwgcCA9IHAwOyBwIDwgcDE7IHArKykgewogICAgICAvLyByb3cKICAgICAgdmFyIHIgPSBhaW5kZXhbcF07IC8vIG5vZGUKCiAgICAgIGkgPSBhdGEgPyB3W3ByZXYgKyByXSA6IHI7IC8vIHRyYXZlcnNlIGZyb20gaSB0byBrCgogICAgICBmb3IgKDsgaSAhPT0gLTEgJiYgaSA8IGs7IGkgPSBpbmV4dCkgewogICAgICAgIC8vIGluZXh0ID0gYW5jZXN0b3Igb2YgaQogICAgICAgIGluZXh0ID0gd1thbmNlc3RvciArIGldOyAvLyBwYXRoIGNvbXByZXNzaW9uCgogICAgICAgIHdbYW5jZXN0b3IgKyBpXSA9IGs7IC8vIGNoZWNrIG5vIGFuYy4sIHBhcmVudCBpcyBrCgogICAgICAgIGlmIChpbmV4dCA9PT0gLTEpIHsKICAgICAgICAgIHBhcmVudFtpXSA9IGs7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoYXRhKSB7CiAgICAgICAgd1twcmV2ICsgcl0gPSBrOwogICAgICB9CiAgICB9CiAgfQoKICByZXR1cm4gcGFyZW50Owp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzRmtlZXAuanMKLyoqCiAqIEtlZXBzIGVudHJpZXMgaW4gdGhlIG1hdHJpeCB3aGVuIHRoZSBjYWxsYmFjayBmdW5jdGlvbiByZXR1cm5zIHRydWUsIHJlbW92ZXMgdGhlIGVudHJ5IG90aGVyd2lzZQogKgogKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICBUaGUgc3BhcnNlIG1hdHJpeAogKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24sIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCB3aXRoIHRoZSBmb2xsb3dpbmcgYXJnczoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBlbnRyeSByb3cKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBlbnRyeSBjb2x1bW4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBlbnRyeSB2YWx1ZQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhlIHN0YXRlIHBhcmFtZXRlcgogKiBAcGFyYW0ge2FueX0gICAgICBvdGhlciAgICAgICAgICBUaGUgc3RhdGUKICoKICogQHJldHVybiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG51bWJlciBvZiBub256ZXJvIGVsZW1lbnRzIGluIHRoZSBtYXRyaXgKICoKICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWwKICovCmZ1bmN0aW9uIGNzRmtlZXAoYSwgY2FsbGJhY2ssIG90aGVyKSB7CiAgLy8gYSBhcnJheXMKICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlczsKICB2YXIgYWluZGV4ID0gYS5faW5kZXg7CiAgdmFyIGFwdHIgPSBhLl9wdHI7CiAgdmFyIGFzaXplID0gYS5fc2l6ZTsgLy8gY29sdW1ucwoKICB2YXIgbiA9IGFzaXplWzFdOyAvLyBub256ZXJvIGl0ZW1zCgogIHZhciBueiA9IDA7IC8vIGxvb3AgY29sdW1ucwoKICBmb3IgKHZhciBqID0gMDsgaiA8IG47IGorKykgewogICAgLy8gZ2V0IGN1cnJlbnQgbG9jYXRpb24gb2YgY29sIGoKICAgIHZhciBwID0gYXB0cltqXTsgLy8gcmVjb3JkIG5ldyBsb2NhdGlvbiBvZiBjb2wgagoKICAgIGFwdHJbal0gPSBuejsKCiAgICBmb3IgKDsgcCA8IGFwdHJbaiArIDFdOyBwKyspIHsKICAgICAgLy8gY2hlY2sgd2UgbmVlZCB0byBrZWVwIHRoaXMgaXRlbQogICAgICBpZiAoY2FsbGJhY2soYWluZGV4W3BdLCBqLCBhdmFsdWVzID8gYXZhbHVlc1twXSA6IDEsIG90aGVyKSkgewogICAgICAgIC8vIGtlZXAgQShpLGopCiAgICAgICAgYWluZGV4W256XSA9IGFpbmRleFtwXTsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAocGF0dGVybiBvbmx5KQoKICAgICAgICBpZiAoYXZhbHVlcykgewogICAgICAgICAgYXZhbHVlc1tuel0gPSBhdmFsdWVzW3BdOwogICAgICAgIH0gLy8gaW5jcmVtZW50IG5vbnplcm8gaXRlbXMKCgogICAgICAgIG56Kys7CiAgICAgIH0KICAgIH0KICB9IC8vIGZpbmFsaXplIEEKCgogIGFwdHJbbl0gPSBuejsgLy8gdHJpbSBhcnJheXMKCiAgYWluZGV4LnNwbGljZShueiwgYWluZGV4Lmxlbmd0aCAtIG56KTsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAocGF0dGVybiBvbmx5KQoKICBpZiAoYXZhbHVlcykgewogICAgYXZhbHVlcy5zcGxpY2UobnosIGF2YWx1ZXMubGVuZ3RoIC0gbnopOwogIH0gLy8gcmV0dXJuIG51bWJlciBvZiBub256ZXJvIGl0ZW1zCgoKICByZXR1cm4gbno7Cn0KLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NGbGlwLmpzCi8qKgogKiBUaGlzIGZ1bmN0aW9uICJmbGlwcyIgaXRzIGlucHV0IGFib3V0IHRoZSBpbnRlZ2VyIC0xLgogKgogKiBAcGFyYW0ge051bWJlcn0gIGkgICAgICAgICAgICAgICBUaGUgdmFsdWUgdG8gZmxpcAogKgogKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbAogKi8KZnVuY3Rpb24gY3NGbGlwKGkpIHsKICAvLyBmbGlwIHRoZSB2YWx1ZQogIHJldHVybiAtaSAtIDI7Cn0KLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NBbWQuanMKCgoKCnZhciBjc0FtZF9uYW1lID0gJ2NzQW1kJzsKdmFyIGNzQW1kX2RlcGVuZGVuY2llcyA9IFsnYWRkJywgJ211bHRpcGx5JywgJ3RyYW5zcG9zZSddOwp2YXIgY3JlYXRlQ3NBbWQgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShjc0FtZF9uYW1lLCBjc0FtZF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIGFkZCA9IF9yZWYuYWRkLAogICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksCiAgICAgIHRyYW5zcG9zZSA9IF9yZWYudHJhbnNwb3NlOwoKICAvKioKICAgKiBBcHByb3hpbWF0ZSBtaW5pbXVtIGRlZ3JlZSBvcmRlcmluZy4gVGhlIG1pbmltdW0gZGVncmVlIGFsZ29yaXRobSBpcyBhIHdpZGVseSB1c2VkCiAgICogaGV1cmlzdGljIGZvciBmaW5kaW5nIGEgcGVybXV0YXRpb24gUCBzbyB0aGF0IFAqQSpQJyBoYXMgZmV3ZXIgbm9uemVyb3MgaW4gaXRzIGZhY3Rvcml6YXRpb24KICAgKiB0aGFuIEEuIEl0IGlzIGEgZ3JlYWR5IG1ldGhvZCB0aGF0IHNlbGVjdHMgdGhlIHNwYXJzZXN0IHBpdm90IHJvdyBhbmQgY29sdW1uIGR1cmluZyB0aGUgY291cnNlCiAgICogb2YgYSByaWdodCBsb29raW5nIHNwYXJzZSBDaG9sZXNreSBmYWN0b3JpemF0aW9uLgogICAqCiAgICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWwKICAgKgogICAqIEBwYXJhbSB7TnVtYmVyfSBvcmRlciAgICAwOiBOYXR1cmFsLCAxOiBDaG9sZXNreSwgMjogTFUsIDM6IFFSCiAgICogQHBhcmFtIHtNYXRyaXh9IG0gICAgICAgIFNwYXJzZSBNYXRyaXgKICAgKi8KICByZXR1cm4gZnVuY3Rpb24gY3NBbWQob3JkZXIsIGEpIHsKICAgIC8vIGNoZWNrIGlucHV0IHBhcmFtZXRlcnMKICAgIGlmICghYSB8fCBvcmRlciA8PSAwIHx8IG9yZGVyID4gMykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gLy8gYSBtYXRyaXggYXJyYXlzCgoKICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7IC8vIHJvd3MgYW5kIGNvbHVtbnMKCiAgICB2YXIgbSA9IGFzaXplWzBdOwogICAgdmFyIG4gPSBhc2l6ZVsxXTsgLy8gaW5pdGlhbGl6ZSB2YXJzCgogICAgdmFyIGxlbWF4ID0gMDsgLy8gZGVuc2UgdGhyZXNob2xkCgogICAgdmFyIGRlbnNlID0gTWF0aC5tYXgoMTYsIDEwICogTWF0aC5zcXJ0KG4pKTsKICAgIGRlbnNlID0gTWF0aC5taW4obiAtIDIsIGRlbnNlKTsgLy8gY3JlYXRlIHRhcmdldCBtYXRyaXggQwoKICAgIHZhciBjbSA9IF9jcmVhdGVUYXJnZXRNYXRyaXgob3JkZXIsIGEsIG0sIG4sIGRlbnNlKTsgLy8gZHJvcCBkaWFnb25hbCBlbnRyaWVzCgoKICAgIGNzRmtlZXAoY20sIF9kaWFnLCBudWxsKTsgLy8gQyBtYXRyaXggYXJyYXlzCgogICAgdmFyIGNpbmRleCA9IGNtLl9pbmRleDsKICAgIHZhciBjcHRyID0gY20uX3B0cjsgLy8gbnVtYmVyIG9mIG5vbnplcm8gZWxlbWVudHMgaW4gQwoKICAgIHZhciBjbnogPSBjcHRyW25dOyAvLyBhbGxvY2F0ZSByZXN1bHQgKG4rMSkKCiAgICB2YXIgUCA9IFtdOyAvLyBjcmVhdGUgd29ya3NwYWNlICg4ICogKG4gKyAxKSkKCiAgICB2YXIgVyA9IFtdOwogICAgdmFyIGxlbiA9IDA7IC8vIGZpcnN0IG4gKyAxIGVudHJpZXMKCiAgICB2YXIgbnYgPSBuICsgMTsgLy8gbmV4dCBuICsgMSBlbnRyaWVzCgogICAgdmFyIG5leHQgPSAyICogKG4gKyAxKTsgLy8gbmV4dCBuICsgMSBlbnRyaWVzCgogICAgdmFyIGhlYWQgPSAzICogKG4gKyAxKTsgLy8gbmV4dCBuICsgMSBlbnRyaWVzCgogICAgdmFyIGVsZW4gPSA0ICogKG4gKyAxKTsgLy8gbmV4dCBuICsgMSBlbnRyaWVzCgogICAgdmFyIGRlZ3JlZSA9IDUgKiAobiArIDEpOyAvLyBuZXh0IG4gKyAxIGVudHJpZXMKCiAgICB2YXIgdyA9IDYgKiAobiArIDEpOyAvLyBuZXh0IG4gKyAxIGVudHJpZXMKCiAgICB2YXIgaGhlYWQgPSA3ICogKG4gKyAxKTsgLy8gbGFzdCBuICsgMSBlbnRyaWVzCiAgICAvLyB1c2UgUCBhcyB3b3Jrc3BhY2UgZm9yIGxhc3QKCiAgICB2YXIgbGFzdCA9IFA7IC8vIGluaXRpYWxpemUgcXVvdGllbnQgZ3JhcGgKCiAgICB2YXIgbWFyayA9IF9pbml0aWFsaXplUXVvdGllbnRHcmFwaChuLCBjcHRyLCBXLCBsZW4sIGhlYWQsIGxhc3QsIG5leHQsIGhoZWFkLCBudiwgdywgZWxlbiwgZGVncmVlKTsgLy8gaW5pdGlhbGl6ZSBkZWdyZWUgbGlzdHMKCgogICAgdmFyIG5lbCA9IF9pbml0aWFsaXplRGVncmVlTGlzdHMobiwgY3B0ciwgVywgZGVncmVlLCBlbGVuLCB3LCBkZW5zZSwgbnYsIGhlYWQsIGxhc3QsIG5leHQpOyAvLyBtaW5pbXVtIGRlZ3JlZSBub2RlCgoKICAgIHZhciBtaW5kZWcgPSAwOyAvLyB2YXJzCgogICAgdmFyIGksIGosIGssIGsxLCBrMiwgZSwgcGosIGxuLCBudmksIHBrLCBlbG4sIHAxLCBwMiwgcG4sIGgsIGQ7IC8vIHdoaWxlIChzZWxlY3RpbmcgcGl2b3RzKSBkbwoKICAgIHdoaWxlIChuZWwgPCBuKSB7CiAgICAgIC8vIHNlbGVjdCBub2RlIG9mIG1pbmltdW0gYXBwcm94aW1hdGUgZGVncmVlLiBhbWQoKSBpcyBub3cgcmVhZHkgdG8gc3RhcnQgZWxpbWluYXRpbmcgdGhlIGdyYXBoLiBJdCBmaXJzdAogICAgICAvLyBmaW5kcyBhIG5vZGUgayBvZiBtaW5pbXVtIGRlZ3JlZSBhbmQgcmVtb3ZlcyBpdCBmcm9tIGl0cyBkZWdyZWUgbGlzdC4gVGhlIHZhcmlhYmxlIG5lbCBrZWVwcyB0cmFjayBvZiB0aG93CiAgICAgIC8vIG1hbnkgbm9kZXMgaGF2ZSBiZWVuIGVsaW1pbmF0ZWQuCiAgICAgIGZvciAoayA9IC0xOyBtaW5kZWcgPCBuICYmIChrID0gV1toZWFkICsgbWluZGVnXSkgPT09IC0xOyBtaW5kZWcrKykgewogICAgICAgIDsKICAgICAgfQoKICAgICAgaWYgKFdbbmV4dCArIGtdICE9PSAtMSkgewogICAgICAgIGxhc3RbV1tuZXh0ICsga11dID0gLTE7CiAgICAgIH0gLy8gcmVtb3ZlIGsgZnJvbSBkZWdyZWUgbGlzdAoKCiAgICAgIFdbaGVhZCArIG1pbmRlZ10gPSBXW25leHQgKyBrXTsgLy8gZWxlbmsgPSB8RWt8CgogICAgICB2YXIgZWxlbmsgPSBXW2VsZW4gKyBrXTsgLy8gIyBvZiBub2RlcyBrIHJlcHJlc2VudHMKCiAgICAgIHZhciBudmsgPSBXW252ICsga107IC8vIFdbbnYgKyBrXSBub2RlcyBvZiBBIGVsaW1pbmF0ZWQKCiAgICAgIG5lbCArPSBudms7IC8vIENvbnN0cnVjdCBhIG5ldyBlbGVtZW50LiBUaGUgbmV3IGVsZW1lbnQgTGsgaXMgY29uc3RydWN0ZWQgaW4gcGxhY2UgaWYgfEVrfCA9IDAuIG52W2ldIGlzCiAgICAgIC8vIG5lZ2F0ZWQgZm9yIGFsbCBub2RlcyBpIGluIExrIHRvIGZsYWcgdGhlbSBhcyBtZW1iZXJzIG9mIHRoaXMgc2V0LiBFYWNoIG5vZGUgaSBpcyByZW1vdmVkIGZyb20gdGhlCiAgICAgIC8vIGRlZ3JlZSBsaXN0cy4gQWxsIGVsZW1lbnRzIGUgaW4gRWsgYXJlIGFic29ydmVkIGludG8gZWxlbWVudCBrLgoKICAgICAgdmFyIGRrID0gMDsgLy8gZmxhZyBrIGFzIGluIExrCgogICAgICBXW252ICsga10gPSAtbnZrOwogICAgICB2YXIgcCA9IGNwdHJba107IC8vIGRvIGluIHBsYWNlIGlmIFdbZWxlbiArIGtdID09PSAwCgogICAgICB2YXIgcGsxID0gZWxlbmsgPT09IDAgPyBwIDogY256OwogICAgICB2YXIgcGsyID0gcGsxOwoKICAgICAgZm9yIChrMSA9IDE7IGsxIDw9IGVsZW5rICsgMTsgazErKykgewogICAgICAgIGlmIChrMSA+IGVsZW5rKSB7CiAgICAgICAgICAvLyBzZWFyY2ggdGhlIG5vZGVzIGluIGsKICAgICAgICAgIGUgPSBrOyAvLyBsaXN0IG9mIG5vZGVzIHN0YXJ0cyBhdCBjaW5kZXhbcGpdCgogICAgICAgICAgcGogPSBwOyAvLyBsZW5ndGggb2YgbGlzdCBvZiBub2RlcyBpbiBrCgogICAgICAgICAgbG4gPSBXW2xlbiArIGtdIC0gZWxlbms7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIHNlYXJjaCB0aGUgbm9kZXMgaW4gZQogICAgICAgICAgZSA9IGNpbmRleFtwKytdOwogICAgICAgICAgcGogPSBjcHRyW2VdOyAvLyBsZW5ndGggb2YgbGlzdCBvZiBub2RlcyBpbiBlCgogICAgICAgICAgbG4gPSBXW2xlbiArIGVdOwogICAgICAgIH0KCiAgICAgICAgZm9yIChrMiA9IDE7IGsyIDw9IGxuOyBrMisrKSB7CiAgICAgICAgICBpID0gY2luZGV4W3BqKytdOyAvLyBjaGVjayAgbm9kZSBpIGRlYWQsIG9yIHNlZW4KCiAgICAgICAgICBpZiAoKG52aSA9IFdbbnYgKyBpXSkgPD0gMCkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0gLy8gV1tkZWdyZWUgKyBMa10gKz0gc2l6ZSBvZiBub2RlIGkKCgogICAgICAgICAgZGsgKz0gbnZpOyAvLyBuZWdhdGUgV1tudiArIGldIHRvIGRlbm90ZSBpIGluIExrCgogICAgICAgICAgV1tudiArIGldID0gLW52aTsgLy8gcGxhY2UgaSBpbiBMawoKICAgICAgICAgIGNpbmRleFtwazIrK10gPSBpOwoKICAgICAgICAgIGlmIChXW25leHQgKyBpXSAhPT0gLTEpIHsKICAgICAgICAgICAgbGFzdFtXW25leHQgKyBpXV0gPSBsYXN0W2ldOwogICAgICAgICAgfSAvLyBjaGVjayB3ZSBuZWVkIHRvIHJlbW92ZSBpIGZyb20gZGVncmVlIGxpc3QKCgogICAgICAgICAgaWYgKGxhc3RbaV0gIT09IC0xKSB7CiAgICAgICAgICAgIFdbbmV4dCArIGxhc3RbaV1dID0gV1tuZXh0ICsgaV07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBXW2hlYWQgKyBXW2RlZ3JlZSArIGldXSA9IFdbbmV4dCArIGldOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGUgIT09IGspIHsKICAgICAgICAgIC8vIGFic29yYiBlIGludG8gawogICAgICAgICAgY3B0cltlXSA9IGNzRmxpcChrKTsgLy8gZSBpcyBub3cgYSBkZWFkIGVsZW1lbnQKCiAgICAgICAgICBXW3cgKyBlXSA9IDA7CiAgICAgICAgfQogICAgICB9IC8vIGNpbmRleFtjbnouLi5uem1heF0gaXMgZnJlZQoKCiAgICAgIGlmIChlbGVuayAhPT0gMCkgewogICAgICAgIGNueiA9IHBrMjsKICAgICAgfSAvLyBleHRlcm5hbCBkZWdyZWUgb2YgayAtIHxMa1xpfAoKCiAgICAgIFdbZGVncmVlICsga10gPSBkazsgLy8gZWxlbWVudCBrIGlzIGluIGNpbmRleFtwazEuLnBrMi0xXQoKICAgICAgY3B0cltrXSA9IHBrMTsKICAgICAgV1tsZW4gKyBrXSA9IHBrMiAtIHBrMTsgLy8gayBpcyBub3cgYW4gZWxlbWVudAoKICAgICAgV1tlbGVuICsga10gPSAtMjsgLy8gRmluZCBzZXQgZGlmZmVyZW5jZXMuIFRoZSBzY2FuMSBmdW5jdGlvbiBub3cgY29tcHV0ZXMgdGhlIHNldCBkaWZmZXJlbmNlcyB8TGUgXCBMa3wgZm9yIGFsbCBlbGVtZW50cyBlLiBBdCB0aGUgc3RhcnQgb2YgdGhlCiAgICAgIC8vIHNjYW4sIG5vIGVudHJ5IGluIHRoZSB3IGFycmF5IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtYXJrLgogICAgICAvLyBjbGVhciB3IGlmIG5lY2Vzc2FyeQoKICAgICAgbWFyayA9IF93Y2xlYXIobWFyaywgbGVtYXgsIFcsIHcsIG4pOyAvLyBzY2FuIDE6IGZpbmQgfExlXExrfAoKICAgICAgZm9yIChwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHsKICAgICAgICBpID0gY2luZGV4W3BrXTsgLy8gY2hlY2sgaWYgV1tlbGVuICsgaV0gZW1wdHksIHNraXAgaXQKCiAgICAgICAgaWYgKChlbG4gPSBXW2VsZW4gKyBpXSkgPD0gMCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfSAvLyBXW252ICsgaV0gd2FzIG5lZ2F0ZWQKCgogICAgICAgIG52aSA9IC1XW252ICsgaV07CiAgICAgICAgdmFyIHdudmkgPSBtYXJrIC0gbnZpOyAvLyBzY2FuIEVpCgogICAgICAgIGZvciAocCA9IGNwdHJbaV0sIHAxID0gY3B0cltpXSArIGVsbiAtIDE7IHAgPD0gcDE7IHArKykgewogICAgICAgICAgZSA9IGNpbmRleFtwXTsKCiAgICAgICAgICBpZiAoV1t3ICsgZV0gPj0gbWFyaykgewogICAgICAgICAgICAvLyBkZWNyZW1lbnQgfExlXExrfAogICAgICAgICAgICBXW3cgKyBlXSAtPSBudmk7CiAgICAgICAgICB9IGVsc2UgaWYgKFdbdyArIGVdICE9PSAwKSB7CiAgICAgICAgICAgIC8vIGVuc3VyZSBlIGlzIGEgbGl2ZSBlbGVtZW50LCAxc3QgdGltZSBlIHNlZW4gaW4gc2NhbiAxCiAgICAgICAgICAgIFdbdyArIGVdID0gV1tkZWdyZWUgKyBlXSArIHdudmk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IC8vIGRlZ3JlZSB1cGRhdGUKICAgICAgLy8gVGhlIHNlY29uZCBwYXNzIGNvbXB1dGVzIHRoZSBhcHByb3hpbWF0ZSBkZWdyZWUgZGksIHBydW5lcyB0aGUgc2V0cyBFaSBhbmQgQWksIGFuZCBjb21wdXRlcyBhIGhhc2gKICAgICAgLy8gZnVuY3Rpb24gaChpKSBmb3IgYWxsIG5vZGVzIGluIExrLgogICAgICAvLyBzY2FuMjogZGVncmVlIHVwZGF0ZQoKCiAgICAgIGZvciAocGsgPSBwazE7IHBrIDwgcGsyOyBwaysrKSB7CiAgICAgICAgLy8gY29uc2lkZXIgbm9kZSBpIGluIExrCiAgICAgICAgaSA9IGNpbmRleFtwa107CiAgICAgICAgcDEgPSBjcHRyW2ldOwogICAgICAgIHAyID0gcDEgKyBXW2VsZW4gKyBpXSAtIDE7CiAgICAgICAgcG4gPSBwMTsgLy8gc2NhbiBFaQoKICAgICAgICBmb3IgKGggPSAwLCBkID0gMCwgcCA9IHAxOyBwIDw9IHAyOyBwKyspIHsKICAgICAgICAgIGUgPSBjaW5kZXhbcF07IC8vIGNoZWNrIGUgaXMgYW4gdW5hYnNvcmJlZCBlbGVtZW50CgogICAgICAgICAgaWYgKFdbdyArIGVdICE9PSAwKSB7CiAgICAgICAgICAgIC8vIGRleHQgPSB8TGVcTGt8CiAgICAgICAgICAgIHZhciBkZXh0ID0gV1t3ICsgZV0gLSBtYXJrOwoKICAgICAgICAgICAgaWYgKGRleHQgPiAwKSB7CiAgICAgICAgICAgICAgLy8gc3VtIHVwIHRoZSBzZXQgZGlmZmVyZW5jZXMKICAgICAgICAgICAgICBkICs9IGRleHQ7IC8vIGtlZXAgZSBpbiBFaQoKICAgICAgICAgICAgICBjaW5kZXhbcG4rK10gPSBlOyAvLyBjb21wdXRlIHRoZSBoYXNoIG9mIG5vZGUgaQoKICAgICAgICAgICAgICBoICs9IGU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy8gYWdncmVzc2l2ZSBhYnNvcmIuIGUtPmsKICAgICAgICAgICAgICBjcHRyW2VdID0gY3NGbGlwKGspOyAvLyBlIGlzIGEgZGVhZCBlbGVtZW50CgogICAgICAgICAgICAgIFdbdyArIGVdID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gLy8gV1tlbGVuICsgaV0gPSB8RWl8CgoKICAgICAgICBXW2VsZW4gKyBpXSA9IHBuIC0gcDEgKyAxOwogICAgICAgIHZhciBwMyA9IHBuOwogICAgICAgIHZhciBwNCA9IHAxICsgV1tsZW4gKyBpXTsgLy8gcHJ1bmUgZWRnZXMgaW4gQWkKCiAgICAgICAgZm9yIChwID0gcDIgKyAxOyBwIDwgcDQ7IHArKykgewogICAgICAgICAgaiA9IGNpbmRleFtwXTsgLy8gY2hlY2sgbm9kZSBqIGRlYWQgb3IgaW4gTGsKCiAgICAgICAgICB2YXIgbnZqID0gV1tudiArIGpdOwoKICAgICAgICAgIGlmIChudmogPD0gMCkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0gLy8gZGVncmVlKGkpICs9IHxqfAoKCiAgICAgICAgICBkICs9IG52ajsgLy8gcGxhY2UgaiBpbiBub2RlIGxpc3Qgb2YgaQoKICAgICAgICAgIGNpbmRleFtwbisrXSA9IGo7IC8vIGNvbXB1dGUgaGFzaCBmb3Igbm9kZSBpCgogICAgICAgICAgaCArPSBqOwogICAgICAgIH0gLy8gY2hlY2sgZm9yIG1hc3MgZWxpbWluYXRpb24KCgogICAgICAgIGlmIChkID09PSAwKSB7CiAgICAgICAgICAvLyBhYnNvcmIgaSBpbnRvIGsKICAgICAgICAgIGNwdHJbaV0gPSBjc0ZsaXAoayk7CiAgICAgICAgICBudmkgPSAtV1tudiArIGldOyAvLyB8TGt8IC09IHxpfAoKICAgICAgICAgIGRrIC09IG52aTsgLy8gfGt8ICs9IFdbbnYgKyBpXQoKICAgICAgICAgIG52ayArPSBudmk7CiAgICAgICAgICBuZWwgKz0gbnZpOwogICAgICAgICAgV1tudiArIGldID0gMDsgLy8gbm9kZSBpIGlzIGRlYWQKCiAgICAgICAgICBXW2VsZW4gKyBpXSA9IC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyB1cGRhdGUgZGVncmVlKGkpCiAgICAgICAgICBXW2RlZ3JlZSArIGldID0gTWF0aC5taW4oV1tkZWdyZWUgKyBpXSwgZCk7IC8vIG1vdmUgZmlyc3Qgbm9kZSB0byBlbmQKCiAgICAgICAgICBjaW5kZXhbcG5dID0gY2luZGV4W3AzXTsgLy8gbW92ZSAxc3QgZWwuIHRvIGVuZCBvZiBFaQoKICAgICAgICAgIGNpbmRleFtwM10gPSBjaW5kZXhbcDFdOyAvLyBhZGQgayBhcyAxc3QgZWxlbWVudCBpbiBvZiBFaQoKICAgICAgICAgIGNpbmRleFtwMV0gPSBrOyAvLyBuZXcgbGVuIG9mIGFkai4gbGlzdCBvZiBub2RlIGkKCiAgICAgICAgICBXW2xlbiArIGldID0gcG4gLSBwMSArIDE7IC8vIGZpbmFsaXplIGhhc2ggb2YgaQoKICAgICAgICAgIGggPSAoaCA8IDAgPyAtaCA6IGgpICUgbjsgLy8gcGxhY2UgaSBpbiBoYXNoIGJ1Y2tldAoKICAgICAgICAgIFdbbmV4dCArIGldID0gV1toaGVhZCArIGhdOwogICAgICAgICAgV1toaGVhZCArIGhdID0gaTsgLy8gc2F2ZSBoYXNoIG9mIGkgaW4gbGFzdFtpXQoKICAgICAgICAgIGxhc3RbaV0gPSBoOwogICAgICAgIH0KICAgICAgfSAvLyBmaW5hbGl6ZSB8TGt8CgoKICAgICAgV1tkZWdyZWUgKyBrXSA9IGRrOwogICAgICBsZW1heCA9IE1hdGgubWF4KGxlbWF4LCBkayk7IC8vIGNsZWFyIHcKCiAgICAgIG1hcmsgPSBfd2NsZWFyKG1hcmsgKyBsZW1heCwgbGVtYXgsIFcsIHcsIG4pOyAvLyBTdXBlcm5vZGUgZGV0ZWN0aW9uLiBTdXBlcm5vZGUgZGV0ZWN0aW9uIHJlbGllcyBvbiB0aGUgaGFzaCBmdW5jdGlvbiBoKGkpIGNvbXB1dGVkIGZvciBlYWNoIG5vZGUgaS4KICAgICAgLy8gSWYgdHdvIG5vZGVzIGhhdmUgaWRlbnRpY2FsIGFkamFjZW5jeSBsaXN0cywgdGhlaXIgaGFzaCBmdW5jdGlvbnMgd2lsIGJlIGlkZW50aWNhbC4KCiAgICAgIGZvciAocGsgPSBwazE7IHBrIDwgcGsyOyBwaysrKSB7CiAgICAgICAgaSA9IGNpbmRleFtwa107IC8vIGNoZWNrIGkgaXMgZGVhZCwgc2tpcCBpdAoKICAgICAgICBpZiAoV1tudiArIGldID49IDApIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0gLy8gc2NhbiBoYXNoIGJ1Y2tldCBvZiBub2RlIGkKCgogICAgICAgIGggPSBsYXN0W2ldOwogICAgICAgIGkgPSBXW2hoZWFkICsgaF07IC8vIGhhc2ggYnVja2V0IHdpbGwgYmUgZW1wdHkKCiAgICAgICAgV1toaGVhZCArIGhdID0gLTE7CgogICAgICAgIGZvciAoOyBpICE9PSAtMSAmJiBXW25leHQgKyBpXSAhPT0gLTE7IGkgPSBXW25leHQgKyBpXSwgbWFyaysrKSB7CiAgICAgICAgICBsbiA9IFdbbGVuICsgaV07CiAgICAgICAgICBlbG4gPSBXW2VsZW4gKyBpXTsKCiAgICAgICAgICBmb3IgKHAgPSBjcHRyW2ldICsgMTsgcCA8PSBjcHRyW2ldICsgbG4gLSAxOyBwKyspIHsKICAgICAgICAgICAgV1t3ICsgY2luZGV4W3BdXSA9IG1hcms7CiAgICAgICAgICB9CgogICAgICAgICAgdmFyIGpsYXN0ID0gaTsgLy8gY29tcGFyZSBpIHdpdGggYWxsIGoKCiAgICAgICAgICBmb3IgKGogPSBXW25leHQgKyBpXTsgaiAhPT0gLTE7KSB7CiAgICAgICAgICAgIHZhciBvayA9IFdbbGVuICsgal0gPT09IGxuICYmIFdbZWxlbiArIGpdID09PSBlbG47CgogICAgICAgICAgICBmb3IgKHAgPSBjcHRyW2pdICsgMTsgb2sgJiYgcCA8PSBjcHRyW2pdICsgbG4gLSAxOyBwKyspIHsKICAgICAgICAgICAgICAvLyBjb21wYXJlIGkgYW5kIGoKICAgICAgICAgICAgICBpZiAoV1t3ICsgY2luZGV4W3BdXSAhPT0gbWFyaykgewogICAgICAgICAgICAgICAgb2sgPSAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSAvLyBjaGVjayBpIGFuZCBqIGFyZSBpZGVudGljYWwKCgogICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAvLyBhYnNvcmIgaiBpbnRvIGkKICAgICAgICAgICAgICBjcHRyW2pdID0gY3NGbGlwKGkpOwogICAgICAgICAgICAgIFdbbnYgKyBpXSArPSBXW252ICsgal07CiAgICAgICAgICAgICAgV1tudiArIGpdID0gMDsgLy8gbm9kZSBqIGlzIGRlYWQKCiAgICAgICAgICAgICAgV1tlbGVuICsgal0gPSAtMTsgLy8gZGVsZXRlIGogZnJvbSBoYXNoIGJ1Y2tldAoKICAgICAgICAgICAgICBqID0gV1tuZXh0ICsgal07CiAgICAgICAgICAgICAgV1tuZXh0ICsgamxhc3RdID0gajsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAvLyBqIGFuZCBpIGFyZSBkaWZmZXJlbnQKICAgICAgICAgICAgICBqbGFzdCA9IGo7CiAgICAgICAgICAgICAgaiA9IFdbbmV4dCArIGpdOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IC8vIEZpbmFsaXplIG5ldyBlbGVtZW50LiBUaGUgZWxpbWluYXRpb24gb2Ygbm9kZSBrIGlzIG5lYXJseSBjb21wbGV0ZS4gQWxsIG5vZGVzIGkgaW4gTGsgYXJlIHNjYW5uZWQgb25lIGxhc3QgdGltZS4KICAgICAgLy8gTm9kZSBpIGlzIHJlbW92ZWQgZnJvbSBMayBpZiBpdCBpcyBkZWFkLiBUaGUgZmxhZ2dlZCBzdGF0dXMgb2YgbnZbaV0gaXMgY2xlYXJlZC4KCgogICAgICBmb3IgKHAgPSBwazEsIHBrID0gcGsxOyBwayA8IHBrMjsgcGsrKykgewogICAgICAgIGkgPSBjaW5kZXhbcGtdOyAvLyBjaGVjayAgaSBpcyBkZWFkLCBza2lwIGl0CgogICAgICAgIGlmICgobnZpID0gLVdbbnYgKyBpXSkgPD0gMCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfSAvLyByZXN0b3JlIFdbbnYgKyBpXQoKCiAgICAgICAgV1tudiArIGldID0gbnZpOyAvLyBjb21wdXRlIGV4dGVybmFsIGRlZ3JlZShpKQoKICAgICAgICBkID0gV1tkZWdyZWUgKyBpXSArIGRrIC0gbnZpOwogICAgICAgIGQgPSBNYXRoLm1pbihkLCBuIC0gbmVsIC0gbnZpKTsKCiAgICAgICAgaWYgKFdbaGVhZCArIGRdICE9PSAtMSkgewogICAgICAgICAgbGFzdFtXW2hlYWQgKyBkXV0gPSBpOwogICAgICAgIH0gLy8gcHV0IGkgYmFjayBpbiBkZWdyZWUgbGlzdAoKCiAgICAgICAgV1tuZXh0ICsgaV0gPSBXW2hlYWQgKyBkXTsKICAgICAgICBsYXN0W2ldID0gLTE7CiAgICAgICAgV1toZWFkICsgZF0gPSBpOyAvLyBmaW5kIG5ldyBtaW5pbXVtIGRlZ3JlZQoKICAgICAgICBtaW5kZWcgPSBNYXRoLm1pbihtaW5kZWcsIGQpOwogICAgICAgIFdbZGVncmVlICsgaV0gPSBkOyAvLyBwbGFjZSBpIGluIExrCgogICAgICAgIGNpbmRleFtwKytdID0gaTsKICAgICAgfSAvLyAjIG5vZGVzIGFic29yYmVkIGludG8gawoKCiAgICAgIFdbbnYgKyBrXSA9IG52azsgLy8gbGVuZ3RoIG9mIGFkaiBsaXN0IG9mIGVsZW1lbnQgawoKICAgICAgaWYgKChXW2xlbiArIGtdID0gcCAtIHBrMSkgPT09IDApIHsKICAgICAgICAvLyBrIGlzIGEgcm9vdCBvZiB0aGUgdHJlZQogICAgICAgIGNwdHJba10gPSAtMTsgLy8gayBpcyBub3cgYSBkZWFkIGVsZW1lbnQKCiAgICAgICAgV1t3ICsga10gPSAwOwogICAgICB9CgogICAgICBpZiAoZWxlbmsgIT09IDApIHsKICAgICAgICAvLyBmcmVlIHVudXNlZCBzcGFjZSBpbiBMawogICAgICAgIGNueiA9IHA7CiAgICAgIH0KICAgIH0gLy8gUG9zdG9yZGVyaW5nLiBUaGUgZWxpbWluYXRpb24gaXMgY29tcGxldGUsIGJ1dCBubyBwZXJtdXRhdGlvbiBoYXMgYmVlbiBjb21wdXRlZC4gQWxsIHRoYXQgaXMgbGVmdAogICAgLy8gb2YgdGhlIGdyYXBoIGlzIHRoZSBhc3NlbWJseSB0cmVlIChwdHIpIGFuZCBhIHNldCBvZiBkZWFkIG5vZGVzIGFuZCBlbGVtZW50cyAoaSBpcyBhIGRlYWQgbm9kZSBpZgogICAgLy8gbnZbaV0gaXMgemVybyBhbmQgYSBkZWFkIGVsZW1lbnQgaWYgbnZbaV0gPiAwKS4gSXQgaXMgZnJvbSB0aGlzIGluZm9ybWF0aW9uIG9ubHkgdGhhdCB0aGUgZmluYWwgcGVybXV0YXRpb24KICAgIC8vIGlzIGNvbXB1dGVkLiBUaGUgdHJlZSBpcyByZXN0b3JlZCBieSB1bmZsaXBwaW5nIGFsbCBvZiBwdHIuCiAgICAvLyBmaXggYXNzZW1ibHkgdHJlZQoKCiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgIGNwdHJbaV0gPSBjc0ZsaXAoY3B0cltpXSk7CiAgICB9CgogICAgZm9yIChqID0gMDsgaiA8PSBuOyBqKyspIHsKICAgICAgV1toZWFkICsgal0gPSAtMTsKICAgIH0gLy8gcGxhY2UgdW5vcmRlcmVkIG5vZGVzIGluIGxpc3RzCgoKICAgIGZvciAoaiA9IG47IGogPj0gMDsgai0tKSB7CiAgICAgIC8vIHNraXAgaWYgaiBpcyBhbiBlbGVtZW50CiAgICAgIGlmIChXW252ICsgal0gPiAwKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0gLy8gcGxhY2UgaiBpbiBsaXN0IG9mIGl0cyBwYXJlbnQKCgogICAgICBXW25leHQgKyBqXSA9IFdbaGVhZCArIGNwdHJbal1dOwogICAgICBXW2hlYWQgKyBjcHRyW2pdXSA9IGo7CiAgICB9IC8vIHBsYWNlIGVsZW1lbnRzIGluIGxpc3RzCgoKICAgIGZvciAoZSA9IG47IGUgPj0gMDsgZS0tKSB7CiAgICAgIC8vIHNraXAgdW5sZXNzIGUgaXMgYW4gZWxlbWVudAogICAgICBpZiAoV1tudiArIGVdIDw9IDApIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQoKICAgICAgaWYgKGNwdHJbZV0gIT09IC0xKSB7CiAgICAgICAgLy8gcGxhY2UgZSBpbiBsaXN0IG9mIGl0cyBwYXJlbnQKICAgICAgICBXW25leHQgKyBlXSA9IFdbaGVhZCArIGNwdHJbZV1dOwogICAgICAgIFdbaGVhZCArIGNwdHJbZV1dID0gZTsKICAgICAgfQogICAgfSAvLyBwb3N0b3JkZXIgdGhlIGFzc2VtYmx5IHRyZWUKCgogICAgZm9yIChrID0gMCwgaSA9IDA7IGkgPD0gbjsgaSsrKSB7CiAgICAgIGlmIChjcHRyW2ldID09PSAtMSkgewogICAgICAgIGsgPSBjc1RkZnMoaSwgaywgVywgaGVhZCwgbmV4dCwgUCwgdyk7CiAgICAgIH0KICAgIH0gLy8gcmVtb3ZlIGxhc3QgaXRlbSBpbiBhcnJheQoKCiAgICBQLnNwbGljZShQLmxlbmd0aCAtIDEsIDEpOyAvLyByZXR1cm4gUAoKICAgIHJldHVybiBQOwogIH07CiAgLyoqCiAgICogQ3JlYXRlcyB0aGUgbWF0cml4IHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBhcHByb3hpbWF0ZSBtaW5pbXVtIGRlZ3JlZSBvcmRlcmluZyBhbGdvcml0aG0uIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHRoZSBtYXRyaXggTSBhcyBpbnB1dCBhbmQgcmV0dXJucyBhIHBlcm11dGF0aW9uCiAgICogdmVjdG9yIFAuIFRoZSBhbWQgYWxnb3JpdGhtIG9wZXJhdGVzIG9uIGEgc3ltbWV0cml4IG1hdHJpeCwgc28gb25lIG9mIHRocmVlIHN5bW1ldHJpYyBtYXRyaWNlcyBpcyBmb3JtZWQuCiAgICoKICAgKiBPcmRlcjogMAogICAqICAgQSBuYXR1cmFsIG9yZGVyaW5nIFA9bnVsbCBtYXRyaXggaXMgcmV0dXJuZWQuCiAgICoKICAgKiBPcmRlcjogMQogICAqICAgTWF0cml4IG11c3QgYmUgc3F1YXJlLiBUaGlzIGlzIGFwcHJvcHJpYXRlIGZvciBhIENob2xlc2t5IG9yIExVIGZhY3Rvcml6YXRpb24uCiAgICogICBQID0gTSArIE0nCiAgICoKICAgKiBPcmRlcjogMgogICAqICAgRGVuc2UgY29sdW1ucyBmcm9tIE0nIGFyZSBkcm9wcGVkLCBNIHJlY3JlYXRlZCBmcm9tIE0nLiBUaGlzIGlzIGFwcHJvcHJpYXRlZm9yIExVIGZhY3Rvcml6YXRpb24gb2YgdW5zeW1tZXRyaWMgbWF0cmljZXMuCiAgICogICBQID0gTScgKiBNCiAgICoKICAgKiBPcmRlcjogMwogICAqICAgVGhpcyBpcyBiZXN0IHVzZWQgZm9yIFFSIGZhY3Rvcml6YXRpb24gb3IgTFUgZmFjdG9yaXphdGlvbiBpcyBtYXRyaXggTSBoYXMgbm8gZGVuc2Ugcm93cy4gQSBkZW5zZSByb3cgaXMgYSByb3cgd2l0aCBtb3JlIHRoYW4gMTAqc3FyKGNvbHVtbnMpIGVudHJpZXMuCiAgICogICBQID0gTScgKiBNCiAgICovCgogIGZ1bmN0aW9uIF9jcmVhdGVUYXJnZXRNYXRyaXgob3JkZXIsIGEsIG0sIG4sIGRlbnNlKSB7CiAgICAvLyBjb21wdXRlIEEnCiAgICB2YXIgYXQgPSB0cmFuc3Bvc2UoYSk7IC8vIGNoZWNrIG9yZGVyID0gMSwgbWF0cml4IG11c3QgYmUgc3F1YXJlCgogICAgaWYgKG9yZGVyID09PSAxICYmIG4gPT09IG0pIHsKICAgICAgLy8gQyA9IEEgKyBBJwogICAgICByZXR1cm4gYWRkKGEsIGF0KTsKICAgIH0gLy8gY2hlY2sgb3JkZXIgPSAyLCBkcm9wIGRlbnNlIGNvbHVtbnMgZnJvbSBNJwoKCiAgICBpZiAob3JkZXIgPT09IDIpIHsKICAgICAgLy8gdHJhbnNwb3NlIGFycmF5cwogICAgICB2YXIgdGluZGV4ID0gYXQuX2luZGV4OwogICAgICB2YXIgdHB0ciA9IGF0Ll9wdHI7IC8vIG5ldyBjb2x1bW4gaW5kZXgKCiAgICAgIHZhciBwMiA9IDA7IC8vIGxvb3AgQScgY29sdW1ucyAocm93cykKCiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbTsgaisrKSB7CiAgICAgICAgLy8gY29sdW1uIGogb2YgQVQgc3RhcnRzIGhlcmUKICAgICAgICB2YXIgcCA9IHRwdHJbal07IC8vIG5ldyBjb2x1bW4gaiBzdGFydHMgaGVyZQoKICAgICAgICB0cHRyW2pdID0gcDI7IC8vIHNraXAgZGVuc2UgY29sIGoKCiAgICAgICAgaWYgKHRwdHJbaiArIDFdIC0gcCA+IGRlbnNlKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9IC8vIG1hcCByb3dzIGluIGNvbHVtbiBqIG9mIEEKCgogICAgICAgIGZvciAodmFyIHAxID0gdHB0cltqICsgMV07IHAgPCBwMTsgcCsrKSB7CiAgICAgICAgICB0aW5kZXhbcDIrK10gPSB0aW5kZXhbcF07CiAgICAgICAgfQogICAgICB9IC8vIGZpbmFsaXplIEFUCgoKICAgICAgdHB0clttXSA9IHAyOyAvLyByZWNyZWF0ZSBBIGZyb20gbmV3IHRyYW5zcG9zZSBtYXRyaXgKCiAgICAgIGEgPSB0cmFuc3Bvc2UoYXQpOyAvLyB1c2UgQScgKiBBCgogICAgICByZXR1cm4gbXVsdGlwbHkoYXQsIGEpOwogICAgfSAvLyB1c2UgQScgKiBBLCBzcXVhcmUgb3IgcmVjdGFuZ3VsYXIgbWF0cml4CgoKICAgIHJldHVybiBtdWx0aXBseShhdCwgYSk7CiAgfQogIC8qKgogICAqIEluaXRpYWxpemUgcXVvdGllbnQgZ3JhcGguIFRoZXJlIGFyZSBmb3VyIGtpbmQgb2Ygbm9kZXMgYW5kIGVsZW1lbnRzIHRoYXQgbXVzdCBiZSByZXByZXNlbnRlZDoKICAgKgogICAqICAtIEEgbGl2ZSBub2RlIGlzIGEgbm9kZSBpIChvciBhIHN1cGVybm9kZSkgdGhhdCBoYXMgbm90IGJlZW4gc2VsZWN0ZWQgYXMgYSBwaXZvdCBuYWQgaGFzIG5vdCBiZWVuIG1lcmdlZCBpbnRvIGFub3RoZXIgc3VwZXJub2RlLgogICAqICAtIEEgZGVhZCBub2RlIGkgaXMgb25lIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBncmFwaCwgaGF2aW5nIGJlZW4gYWJzb3J2ZWQgaW50byByID0gZmxpcChwdHJbaV0pLgogICAqICAtIEEgbGl2ZSBlbGVtZW50IGUgaXMgb25lIHRoYXQgaXMgaW4gdGhlIGdyYXBoLCBoYXZpbmcgYmVlbiBmb3JtZWQgd2hlbiBub2RlIGUgd2FzIHNlbGVjdGVkIGFzIHRoZSBwaXZvdC4KICAgKiAgLSBBIGRlYWQgZWxlbWVudCBlIGlzIG9uZSB0aGF0IGhhcyBiZW5uIGFic29ydmVkIGludG8gYSBzdWJzZXF1ZW50IGVsZW1lbnQgcyA9IGZsaXAocHRyW2VdKS4KICAgKi8KCgogIGZ1bmN0aW9uIF9pbml0aWFsaXplUXVvdGllbnRHcmFwaChuLCBjcHRyLCBXLCBsZW4sIGhlYWQsIGxhc3QsIG5leHQsIGhoZWFkLCBudiwgdywgZWxlbiwgZGVncmVlKSB7CiAgICAvLyBJbml0aWFsaXplIHF1b3RpZW50IGdyYXBoCiAgICBmb3IgKHZhciBrID0gMDsgayA8IG47IGsrKykgewogICAgICBXW2xlbiArIGtdID0gY3B0cltrICsgMV0gLSBjcHRyW2tdOwogICAgfQoKICAgIFdbbGVuICsgbl0gPSAwOyAvLyBpbml0aWFsaXplIHdvcmtzcGFjZQoKICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKykgewogICAgICAvLyBkZWdyZWUgbGlzdCBpIGlzIGVtcHR5CiAgICAgIFdbaGVhZCArIGldID0gLTE7CiAgICAgIGxhc3RbaV0gPSAtMTsKICAgICAgV1tuZXh0ICsgaV0gPSAtMTsgLy8gaGFzaCBsaXN0IGkgaXMgZW1wdHkKCiAgICAgIFdbaGhlYWQgKyBpXSA9IC0xOyAvLyBub2RlIGkgaXMganVzdCBvbmUgbm9kZQoKICAgICAgV1tudiArIGldID0gMTsgLy8gbm9kZSBpIGlzIGFsaXZlCgogICAgICBXW3cgKyBpXSA9IDE7IC8vIEVrIG9mIG5vZGUgaSBpcyBlbXB0eQoKICAgICAgV1tlbGVuICsgaV0gPSAwOyAvLyBkZWdyZWUgb2Ygbm9kZSBpCgogICAgICBXW2RlZ3JlZSArIGldID0gV1tsZW4gKyBpXTsKICAgIH0gLy8gY2xlYXIgdwoKCiAgICB2YXIgbWFyayA9IF93Y2xlYXIoMCwgMCwgVywgdywgbik7IC8vIG4gaXMgYSBkZWFkIGVsZW1lbnQKCgogICAgV1tlbGVuICsgbl0gPSAtMjsgLy8gbiBpcyBhIHJvb3Qgb2YgYXNzZW1ibHkgdHJlZQoKICAgIGNwdHJbbl0gPSAtMTsgLy8gbiBpcyBhIGRlYWQgZWxlbWVudAoKICAgIFdbdyArIG5dID0gMDsgLy8gcmV0dXJuIG1hcmsKCiAgICByZXR1cm4gbWFyazsKICB9CiAgLyoqCiAgICogSW5pdGlhbGl6ZSBkZWdyZWUgbGlzdHMuIEVhY2ggbm9kZSBpcyBwbGFjZWQgaW4gaXRzIGRlZ3JlZSBsaXN0cy4gTm9kZXMgb2YgemVybyBkZWdyZWUgYXJlIGVsaW1pbmF0ZWQgaW1tZWRpYXRlbHkuIE5vZGVzIHdpdGgKICAgKiBkZWdyZWUgPj0gZGVuc2UgYXJlIGFsc29sIGVsaW1pbmF0ZWQgYW5kIG1lcmdlZCBpbnRvIGEgcGxhY2Vob2xkZXIgbm9kZSBuLCBhIGRlYWQgZWxlbWVudC4gVGhlcyBub2RlcyB3aWxsIGFwcGVyYSBsYXN0IGluIHRoZQogICAqIG91dHB1dCBwZXJtdXRhdGlvbiBwLgogICAqLwoKCiAgZnVuY3Rpb24gX2luaXRpYWxpemVEZWdyZWVMaXN0cyhuLCBjcHRyLCBXLCBkZWdyZWUsIGVsZW4sIHcsIGRlbnNlLCBudiwgaGVhZCwgbGFzdCwgbmV4dCkgewogICAgLy8gcmVzdWx0CiAgICB2YXIgbmVsID0gMDsgLy8gbG9vcCBjb2x1bW5zCgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgLy8gZGVncmVlIEAgaQogICAgICB2YXIgZCA9IFdbZGVncmVlICsgaV07IC8vIGNoZWNrIG5vZGUgaSBpcyBlbXB0eQoKICAgICAgaWYgKGQgPT09IDApIHsKICAgICAgICAvLyBlbGVtZW50IGkgaXMgZGVhZAogICAgICAgIFdbZWxlbiArIGldID0gLTI7CiAgICAgICAgbmVsKys7IC8vIGkgaXMgYSByb290IG9mIGFzc2VtYmx5IHRyZWUKCiAgICAgICAgY3B0cltpXSA9IC0xOwogICAgICAgIFdbdyArIGldID0gMDsKICAgICAgfSBlbHNlIGlmIChkID4gZGVuc2UpIHsKICAgICAgICAvLyBhYnNvcmIgaSBpbnRvIGVsZW1lbnQgbgogICAgICAgIFdbbnYgKyBpXSA9IDA7IC8vIG5vZGUgaSBpcyBkZWFkCgogICAgICAgIFdbZWxlbiArIGldID0gLTE7CiAgICAgICAgbmVsKys7CiAgICAgICAgY3B0cltpXSA9IGNzRmxpcChuKTsKICAgICAgICBXW252ICsgbl0rKzsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgaCA9IFdbaGVhZCArIGRdOwoKICAgICAgICBpZiAoaCAhPT0gLTEpIHsKICAgICAgICAgIGxhc3RbaF0gPSBpOwogICAgICAgIH0gLy8gcHV0IG5vZGUgaSBpbiBkZWdyZWUgbGlzdCBkCgoKICAgICAgICBXW25leHQgKyBpXSA9IFdbaGVhZCArIGRdOwogICAgICAgIFdbaGVhZCArIGRdID0gaTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBuZWw7CiAgfQoKICBmdW5jdGlvbiBfd2NsZWFyKG1hcmssIGxlbWF4LCBXLCB3LCBuKSB7CiAgICBpZiAobWFyayA8IDIgfHwgbWFyayArIGxlbWF4IDwgMCkgewogICAgICBmb3IgKHZhciBrID0gMDsgayA8IG47IGsrKykgewogICAgICAgIGlmIChXW3cgKyBrXSAhPT0gMCkgewogICAgICAgICAgV1t3ICsga10gPSAxOwogICAgICAgIH0KICAgICAgfQoKICAgICAgbWFyayA9IDI7CiAgICB9IC8vIGF0IHRoaXMgcG9pbnQsIFcgWzAuLm4tMV0gPCBtYXJrIGhvbGRzCgoKICAgIHJldHVybiBtYXJrOwogIH0KCiAgZnVuY3Rpb24gX2RpYWcoaSwgaikgewogICAgcmV0dXJuIGkgIT09IGo7CiAgfQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NMZWFmLmpzCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaWYgaiBpcyBhIGxlYWYgb2YgdGhlIGl0aCByb3cgc3VidHJlZS4KICogQ29uc2lkZXIgQShpLGopLCBub2RlIGogaW4gaXRoIHJvdyBzdWJ0cmVlIGFuZCByZXR1cm4gbGNhKGpwcmV2LGopCiAqCiAqIEBwYXJhbSB7TnVtYmVyfSAgaSAgICAgICAgICAgICAgIFRoZSBpdGggcm93IHN1YnRyZWUKICogQHBhcmFtIHtOdW1iZXJ9ICBqICAgICAgICAgICAgICAgVGhlIG5vZGUgdG8gdGVzdAogKiBAcGFyYW0ge0FycmF5fSAgIHcgICAgICAgICAgICAgICBUaGUgd29ya3NwYWNlIGFycmF5CiAqIEBwYXJhbSB7TnVtYmVyfSAgZmlyc3QgICAgICAgICAgIFRoZSBpbmRleCBvZmZzZXQgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZm9yIHRoZSBmaXJzdCBhcnJheQogKiBAcGFyYW0ge051bWJlcn0gIG1heGZpcnN0ICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgbWF4Zmlyc3QgYXJyYXkKICogQHBhcmFtIHtOdW1iZXJ9ICBwcmV2bGVhZiAgICAgICAgVGhlIGluZGV4IG9mZnNldCB3aXRoaW4gdGhlIHdvcmtzcGFjZSBmb3IgdGhlIHByZXZsZWFmIGFycmF5CiAqIEBwYXJhbSB7TnVtYmVyfSAgYW5jZXN0b3IgICAgICAgIFRoZSBpbmRleCBvZmZzZXQgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZm9yIHRoZSBhbmNlc3RvciBhcnJheQogKgogKiBAcmV0dXJuIHtPYmplY3R9CiAqCiAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sCiAqLwpmdW5jdGlvbiBjc0xlYWYoaSwgaiwgdywgZmlyc3QsIG1heGZpcnN0LCBwcmV2bGVhZiwgYW5jZXN0b3IpIHsKICB2YXIgcywgc3BhcmVudDsgLy8gb3VyIHJlc3VsdAoKICB2YXIgamxlYWYgPSAwOwogIHZhciBxOyAvLyBjaGVjayBqIGlzIGEgbGVhZgoKICBpZiAoaSA8PSBqIHx8IHdbZmlyc3QgKyBqXSA8PSB3W21heGZpcnN0ICsgaV0pIHsKICAgIHJldHVybiAtMTsKICB9IC8vIHVwZGF0ZSBtYXggZmlyc3Rbal0gc2VlbiBzbyBmYXIKCgogIHdbbWF4Zmlyc3QgKyBpXSA9IHdbZmlyc3QgKyBqXTsgLy8ganByZXYgPSBwcmV2aW91cyBsZWFmIG9mIGl0aCBzdWJ0cmVlCgogIHZhciBqcHJldiA9IHdbcHJldmxlYWYgKyBpXTsKICB3W3ByZXZsZWFmICsgaV0gPSBqOyAvLyBjaGVjayBqIGlzIGZpcnN0IG9yIHN1YnNlcXVlbnQgbGVhZgoKICBpZiAoanByZXYgPT09IC0xKSB7CiAgICAvLyAxc3QgbGVhZiwgcSA9IHJvb3Qgb2YgaXRoIHN1YnRyZWUKICAgIGpsZWFmID0gMTsKICAgIHEgPSBpOwogIH0gZWxzZSB7CiAgICAvLyB1cGRhdGUgamxlYWYKICAgIGpsZWFmID0gMjsgLy8gcSA9IGxlYXN0IGNvbW1vbiBhbmNlc3RlciAoanByZXYsaikKCiAgICBmb3IgKHEgPSBqcHJldjsgcSAhPT0gd1thbmNlc3RvciArIHFdOyBxID0gd1thbmNlc3RvciArIHFdKSB7CiAgICAgIDsKICAgIH0KCiAgICBmb3IgKHMgPSBqcHJldjsgcyAhPT0gcTsgcyA9IHNwYXJlbnQpIHsKICAgICAgLy8gcGF0aCBjb21wcmVzc2lvbgogICAgICBzcGFyZW50ID0gd1thbmNlc3RvciArIHNdOwogICAgICB3W2FuY2VzdG9yICsgc10gPSBxOwogICAgfQogIH0KCiAgcmV0dXJuIHsKICAgIGpsZWFmOiBqbGVhZiwKICAgIHE6IHEKICB9Owp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzQ291bnRzLmpzCgoKdmFyIGNzQ291bnRzX25hbWUgPSAnY3NDb3VudHMnOwp2YXIgY3NDb3VudHNfZGVwZW5kZW5jaWVzID0gWyd0cmFuc3Bvc2UnXTsKdmFyIGNyZWF0ZUNzQ291bnRzID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoY3NDb3VudHNfbmFtZSwgY3NDb3VudHNfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0cmFuc3Bvc2UgPSBfcmVmLnRyYW5zcG9zZTsKCiAgLyoqCiAgICogQ29tcHV0ZXMgdGhlIGNvbHVtbiBjb3VudHMgdXNpbmcgdGhlIHVwcGVyIHRyaWFuZ3VsYXIgcGFydCBvZiBBLgogICAqIEl0IHRyYW5zcG9zZXMgQSBpbnRlcm5hbGx5LCBub25lIG9mIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBtb2RpZmllZC4KICAgKgogICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICBUaGUgc3BhcnNlIG1hdHJpeCBBCiAgICoKICAgKiBAcGFyYW0ge01hdHJpeH0gYXRhICAgICAgICAgQ291bnQgdGhlIGNvbHVtbnMgb2YgQSdBIGluc3RlYWQKICAgKgogICAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgICBBbiBhcnJheSBvZiBzaXplIG4gb2YgdGhlIGNvbHVtbiBjb3VudHMgb3IgbnVsbCBvbiBlcnJvcgogICAqCiAgICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWwKICAgKi8KICByZXR1cm4gZnVuY3Rpb24gKGEsIHBhcmVudCwgcG9zdCwgYXRhKSB7CiAgICAvLyBjaGVjayBpbnB1dHMKICAgIGlmICghYSB8fCAhcGFyZW50IHx8ICFwb3N0KSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfSAvLyBhIG1hdHJpeCBhcnJheXMKCgogICAgdmFyIGFzaXplID0gYS5fc2l6ZTsgLy8gcm93cyBhbmQgY29sdW1ucwoKICAgIHZhciBtID0gYXNpemVbMF07CiAgICB2YXIgbiA9IGFzaXplWzFdOyAvLyB2YXJpYWJsZXMKCiAgICB2YXIgaSwgaiwgaywgSiwgcCwgcDAsIHAxOyAvLyB3b3Jrc3BhY2Ugc2l6ZQoKICAgIHZhciBzID0gNCAqIG4gKyAoYXRhID8gbiArIG0gKyAxIDogMCk7IC8vIGFsbG9jYXRlIHdvcmtzcGFjZQoKICAgIHZhciB3ID0gW107IC8vIChzKQoKICAgIHZhciBhbmNlc3RvciA9IDA7IC8vIGZpcnN0IG4gZW50cmllcwoKICAgIHZhciBtYXhmaXJzdCA9IG47IC8vIG5leHQgbiBlbnRyaWVzCgogICAgdmFyIHByZXZsZWFmID0gMiAqIG47IC8vIG5leHQgbiBlbnRyaWVzCgogICAgdmFyIGZpcnN0ID0gMyAqIG47IC8vIG5leHQgbiBlbnRyaWVzCgogICAgdmFyIGhlYWQgPSA0ICogbjsgLy8gbmV4dCBuICsgMSBlbnRyaWVzICh1c2VkIHdoZW4gYXRhIGlzIHRydWUpCgogICAgdmFyIG5leHQgPSA1ICogbiArIDE7IC8vIGxhc3QgZW50cmllcyBpbiB3b3Jrc3BhY2UKICAgIC8vIGNsZWFyIHdvcmtzcGFjZSB3WzAuLnMtMV0KCiAgICBmb3IgKGsgPSAwOyBrIDwgczsgaysrKSB7CiAgICAgIHdba10gPSAtMTsKICAgIH0gLy8gYWxsb2NhdGUgcmVzdWx0CgoKICAgIHZhciBjb2xjb3VudCA9IFtdOyAvLyAobikKICAgIC8vIEFUID0gQScKCiAgICB2YXIgYXQgPSB0cmFuc3Bvc2UoYSk7IC8vIGF0IGFycmF5cwoKICAgIHZhciB0aW5kZXggPSBhdC5faW5kZXg7CiAgICB2YXIgdHB0ciA9IGF0Ll9wdHI7IC8vIGZpbmQgd1tmaXJzdCArIGpdCgogICAgZm9yIChrID0gMDsgayA8IG47IGsrKykgewogICAgICBqID0gcG9zdFtrXTsgLy8gY29sY291bnRbal09MSBpZiBqIGlzIGEgbGVhZgoKICAgICAgY29sY291bnRbal0gPSB3W2ZpcnN0ICsgal0gPT09IC0xID8gMSA6IDA7CgogICAgICBmb3IgKDsgaiAhPT0gLTEgJiYgd1tmaXJzdCArIGpdID09PSAtMTsgaiA9IHBhcmVudFtqXSkgewogICAgICAgIHdbZmlyc3QgKyBqXSA9IGs7CiAgICAgIH0KICAgIH0gLy8gaW5pdGlhbGl6ZSBhdGEgaWYgbmVlZGVkCgoKICAgIGlmIChhdGEpIHsKICAgICAgLy8gaW52ZXJ0IHBvc3QKICAgICAgZm9yIChrID0gMDsgayA8IG47IGsrKykgewogICAgICAgIHdbcG9zdFtrXV0gPSBrOwogICAgICB9IC8vIGxvb3Agcm93cyAoY29sdW1ucyBpbiBBVCkKCgogICAgICBmb3IgKGkgPSAwOyBpIDwgbTsgaSsrKSB7CiAgICAgICAgLy8gdmFsdWVzIGluIGNvbHVtbiBpIG9mIEFUCiAgICAgICAgZm9yIChrID0gbiwgcDAgPSB0cHRyW2ldLCBwMSA9IHRwdHJbaSArIDFdLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7CiAgICAgICAgICBrID0gTWF0aC5taW4oaywgd1t0aW5kZXhbcF1dKTsKICAgICAgICB9IC8vIHBsYWNlIHJvdyBpIGluIGxpbmtlZCBsaXN0IGsKCgogICAgICAgIHdbbmV4dCArIGldID0gd1toZWFkICsga107CiAgICAgICAgd1toZWFkICsga10gPSBpOwogICAgICB9CiAgICB9IC8vIGVhY2ggbm9kZSBpbiBpdHMgb3duIHNldAoKCiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgIHdbYW5jZXN0b3IgKyBpXSA9IGk7CiAgICB9CgogICAgZm9yIChrID0gMDsgayA8IG47IGsrKykgewogICAgICAvLyBqIGlzIHRoZSBrdGggbm9kZSBpbiBwb3N0b3JkZXJlZCBldHJlZQogICAgICBqID0gcG9zdFtrXTsgLy8gY2hlY2sgaiBpcyBub3QgYSByb290CgogICAgICBpZiAocGFyZW50W2pdICE9PSAtMSkgewogICAgICAgIGNvbGNvdW50W3BhcmVudFtqXV0tLTsKICAgICAgfSAvLyBKPWogZm9yIExMJz1BIGNhc2UKCgogICAgICBmb3IgKEogPSBhdGEgPyB3W2hlYWQgKyBrXSA6IGo7IEogIT09IC0xOyBKID0gYXRhID8gd1tuZXh0ICsgSl0gOiAtMSkgewogICAgICAgIGZvciAocCA9IHRwdHJbSl07IHAgPCB0cHRyW0ogKyAxXTsgcCsrKSB7CiAgICAgICAgICBpID0gdGluZGV4W3BdOwogICAgICAgICAgdmFyIHIgPSBjc0xlYWYoaSwgaiwgdywgZmlyc3QsIG1heGZpcnN0LCBwcmV2bGVhZiwgYW5jZXN0b3IpOyAvLyBjaGVjayBBKGksaikgaXMgaW4gc2tlbGV0b24KCiAgICAgICAgICBpZiAoci5qbGVhZiA+PSAxKSB7CiAgICAgICAgICAgIGNvbGNvdW50W2pdKys7CiAgICAgICAgICB9IC8vIGNoZWNrIGFjY291bnQgZm9yIG92ZXJsYXAgaW4gcQoKCiAgICAgICAgICBpZiAoci5qbGVhZiA9PT0gMikgewogICAgICAgICAgICBjb2xjb3VudFtyLnFdLS07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAocGFyZW50W2pdICE9PSAtMSkgewogICAgICAgIHdbYW5jZXN0b3IgKyBqXSA9IHBhcmVudFtqXTsKICAgICAgfQogICAgfSAvLyBzdW0gdXAgY29sY291bnQncyBvZiBlYWNoIGNoaWxkCgoKICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHsKICAgICAgaWYgKHBhcmVudFtqXSAhPT0gLTEpIHsKICAgICAgICBjb2xjb3VudFtwYXJlbnRbal1dICs9IGNvbGNvdW50W2pdOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGNvbGNvdW50OwogIH07Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc1Nxci5qcwoKCgoKCgp2YXIgY3NTcXJfbmFtZSA9ICdjc1Nxcic7CnZhciBjc1Nxcl9kZXBlbmRlbmNpZXMgPSBbJ2FkZCcsICdtdWx0aXBseScsICd0cmFuc3Bvc2UnXTsKdmFyIGNyZWF0ZUNzU3FyID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoY3NTcXJfbmFtZSwgY3NTcXJfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciBhZGQgPSBfcmVmLmFkZCwKICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LAogICAgICB0cmFuc3Bvc2UgPSBfcmVmLnRyYW5zcG9zZTsKICB2YXIgY3NBbWQgPSBjcmVhdGVDc0FtZCh7CiAgICBhZGQ6IGFkZCwKICAgIG11bHRpcGx5OiBtdWx0aXBseSwKICAgIHRyYW5zcG9zZTogdHJhbnNwb3NlCiAgfSk7CiAgdmFyIGNzQ291bnRzID0gY3JlYXRlQ3NDb3VudHMoewogICAgdHJhbnNwb3NlOiB0cmFuc3Bvc2UKICB9KTsKICAvKioKICAgKiBTeW1ib2xpYyBvcmRlcmluZyBhbmQgYW5hbHlzaXMgZm9yIFFSIGFuZCBMVSBkZWNvbXBvc2l0aW9ucy4KICAgKgogICAqIEBwYXJhbSB7TnVtYmVyfSAgb3JkZXIgICAgICAgICAgIFRoZSBvcmRlcmluZyBzdHJhdGVneSAoc2VlIGNzQW1kIGZvciBtb3JlIGRldGFpbHMpCiAgICogQHBhcmFtIHtNYXRyaXh9ICBhICAgICAgICAgICAgICAgVGhlIEEgbWF0cml4CiAgICogQHBhcmFtIHtib29sZWFufSBxciAgICAgICAgICAgICAgU3ltYm9saWMgb3JkZXJpbmcgYW5kIGFuYWx5c2lzIGZvciBRUiBkZWNvbXBvc2l0aW9uICh0cnVlKSBvcgogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbGljIG9yZGVyaW5nIGFuZCBhbmFseXNpcyBmb3IgTFUgZGVjb21wb3NpdGlvbiAoZmFsc2UpCiAgICoKICAgKiBAcmV0dXJuIHtPYmplY3R9ICAgICAgICAgICAgICAgICBUaGUgU3ltYm9saWMgb3JkZXJpbmcgYW5kIGFuYWx5c2lzIGZvciBtYXRyaXggQQogICAqCiAgICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWwKICAgKi8KCiAgcmV0dXJuIGZ1bmN0aW9uIGNzU3FyKG9yZGVyLCBhLCBxcikgewogICAgLy8gYSBhcnJheXMKICAgIHZhciBhcHRyID0gYS5fcHRyOwogICAgdmFyIGFzaXplID0gYS5fc2l6ZTsgLy8gY29sdW1ucwoKICAgIHZhciBuID0gYXNpemVbMV07IC8vIHZhcnMKCiAgICB2YXIgazsgLy8gc3ltYm9saWMgYW5hbHlzaXMgcmVzdWx0CgogICAgdmFyIHMgPSB7fTsgLy8gZmlsbC1yZWR1Y2luZyBvcmRlcmluZwoKICAgIHMucSA9IGNzQW1kKG9yZGVyLCBhKTsgLy8gdmFsaWRhdGUgcmVzdWx0cwoKICAgIGlmIChvcmRlciAmJiAhcy5xKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfSAvLyBRUiBzeW1ib2xpYyBhbmFseXNpcwoKCiAgICBpZiAocXIpIHsKICAgICAgLy8gYXBwbHkgcGVybXV0YXRpb25zIGlmIG5lZWRlZAogICAgICB2YXIgYyA9IG9yZGVyID8gY3NQZXJtdXRlKGEsIG51bGwsIHMucSwgMCkgOiBhOyAvLyBldHJlZSBvZiBDJypDLCB3aGVyZSBDPUEoOixxKQoKICAgICAgcy5wYXJlbnQgPSBjc0V0cmVlKGMsIDEpOyAvLyBwb3N0IG9yZGVyIGVsaW1pbmF0aW9uIHRyZWUKCiAgICAgIHZhciBwb3N0ID0gY3NQb3N0KHMucGFyZW50LCBuKTsgLy8gY29sIGNvdW50cyBjaG9sKEMnKkMpCgogICAgICBzLmNwID0gY3NDb3VudHMoYywgcy5wYXJlbnQsIHBvc3QsIDEpOyAvLyBjaGVjayB3ZSBoYXZlIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIGNhbGN1bGF0ZSBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50cwoKICAgICAgaWYgKGMgJiYgcy5wYXJlbnQgJiYgcy5jcCAmJiBfdmNvdW50KGMsIHMpKSB7CiAgICAgICAgLy8gY2FsY3VsYXRlIG51bWJlciBvZiBub256ZXJvIGVsZW1lbnRzCiAgICAgICAgZm9yIChzLnVueiA9IDAsIGsgPSAwOyBrIDwgbjsgaysrKSB7CiAgICAgICAgICBzLnVueiArPSBzLmNwW2tdOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gZm9yIExVIGZhY3Rvcml6YXRpb24gb25seSwgZ3Vlc3Mgbm56KEwpIGFuZCBubnooVSkKICAgICAgcy51bnogPSA0ICogYXB0cltuXSArIG47CiAgICAgIHMubG56ID0gcy51bno7CiAgICB9IC8vIHJldHVybiByZXN1bHQgUwoKCiAgICByZXR1cm4gczsKICB9OwogIC8qKgogICAqIENvbXB1dGUgbm56KFYpID0gcy5sbnosIHMucGludiwgcy5sZWZ0bW9zdCwgcy5tMiBmcm9tIEEgYW5kIHMucGFyZW50CiAgICovCgogIGZ1bmN0aW9uIF92Y291bnQoYSwgcykgewogICAgLy8gYSBhcnJheXMKICAgIHZhciBhcHRyID0gYS5fcHRyOwogICAgdmFyIGFpbmRleCA9IGEuX2luZGV4OwogICAgdmFyIGFzaXplID0gYS5fc2l6ZTsgLy8gcm93cyAmIGNvbHVtbnMKCiAgICB2YXIgbSA9IGFzaXplWzBdOwogICAgdmFyIG4gPSBhc2l6ZVsxXTsgLy8gaW5pdGlhbGl6ZSBzIGFycmF5cwoKICAgIHMucGludiA9IFtdOyAvLyAobSArIG4pCgogICAgcy5sZWZ0bW9zdCA9IFtdOyAvLyAobSkKICAgIC8vIHZhcnMKCiAgICB2YXIgcGFyZW50ID0gcy5wYXJlbnQ7CiAgICB2YXIgcGludiA9IHMucGludjsKICAgIHZhciBsZWZ0bW9zdCA9IHMubGVmdG1vc3Q7IC8vIHdvcmtzcGFjZSwgbmV4dDogZmlyc3QgbSBlbnRyaWVzLCBoZWFkOiBuZXh0IG4gZW50cmllcywgdGFpbDogbmV4dCBuIGVudHJpZXMsIG5xdWU6IG5leHQgbiBlbnRyaWVzCgogICAgdmFyIHcgPSBbXTsgLy8gKG0gKyAzICogbikKCiAgICB2YXIgbmV4dCA9IDA7CiAgICB2YXIgaGVhZCA9IG07CiAgICB2YXIgdGFpbCA9IG0gKyBuOwogICAgdmFyIG5xdWUgPSBtICsgMiAqIG47IC8vIHZhcnMKCiAgICB2YXIgaSwgaywgcCwgcDAsIHAxOyAvLyBpbml0aWFsaXplIHcKCiAgICBmb3IgKGsgPSAwOyBrIDwgbjsgaysrKSB7CiAgICAgIC8vIHF1ZXVlIGsgaXMgZW1wdHkKICAgICAgd1toZWFkICsga10gPSAtMTsKICAgICAgd1t0YWlsICsga10gPSAtMTsKICAgICAgd1tucXVlICsga10gPSAwOwogICAgfSAvLyBpbml0aWFsaXplIHJvdyBhcnJheXMKCgogICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykgewogICAgICBsZWZ0bW9zdFtpXSA9IC0xOwogICAgfSAvLyBsb29wIGNvbHVtbnMgYmFja3dhcmRzCgoKICAgIGZvciAoayA9IG4gLSAxOyBrID49IDA7IGstLSkgewogICAgICAvLyB2YWx1ZXMgJiBpbmRleCBmb3IgY29sdW1uIGsKICAgICAgZm9yIChwMCA9IGFwdHJba10sIHAxID0gYXB0cltrICsgMV0sIHAgPSBwMDsgcCA8IHAxOyBwKyspIHsKICAgICAgICAvLyBsZWZ0bW9zdFtpXSA9IG1pbihmaW5kKEEoaSw6KSkpCiAgICAgICAgbGVmdG1vc3RbYWluZGV4W3BdXSA9IGs7CiAgICAgIH0KICAgIH0gLy8gc2NhbiByb3dzIGluIHJldmVyc2Ugb3JkZXIKCgogICAgZm9yIChpID0gbSAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIC8vIHJvdyBpIGlzIG5vdCB5ZXQgb3JkZXJlZAogICAgICBwaW52W2ldID0gLTE7CiAgICAgIGsgPSBsZWZ0bW9zdFtpXTsgLy8gY2hlY2sgcm93IGkgaXMgZW1wdHkKCiAgICAgIGlmIChrID09PSAtMSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9IC8vIGZpcnN0IHJvdyBpbiBxdWV1ZSBrCgoKICAgICAgaWYgKHdbbnF1ZSArIGtdKysgPT09IDApIHsKICAgICAgICB3W3RhaWwgKyBrXSA9IGk7CiAgICAgIH0gLy8gcHV0IGkgYXQgaGVhZCBvZiBxdWV1ZSBrCgoKICAgICAgd1tuZXh0ICsgaV0gPSB3W2hlYWQgKyBrXTsKICAgICAgd1toZWFkICsga10gPSBpOwogICAgfQoKICAgIHMubG56ID0gMDsKICAgIHMubTIgPSBtOyAvLyBmaW5kIHJvdyBwZXJtdXRhdGlvbiBhbmQgbm56KFYpCgogICAgZm9yIChrID0gMDsgayA8IG47IGsrKykgewogICAgICAvLyByZW1vdmUgcm93IGkgZnJvbSBxdWV1ZSBrCiAgICAgIGkgPSB3W2hlYWQgKyBrXTsgLy8gY291bnQgVihrLGspIGFzIG5vbnplcm8KCiAgICAgIHMubG56Kys7IC8vIGFkZCBhIGZpY3RpdGlvdXMgcm93CgogICAgICBpZiAoaSA8IDApIHsKICAgICAgICBpID0gcy5tMisrOwogICAgICB9IC8vIGFzc29jaWF0ZSByb3cgaSB3aXRoIFYoOixrKQoKCiAgICAgIHBpbnZbaV0gPSBrOyAvLyBza2lwIGlmIFYoaysxOm0saykgaXMgZW1wdHkKCiAgICAgIGlmICgtLW5xdWVba10gPD0gMCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9IC8vIG5xdWVba10gaXMgbm56IChWKGsrMTptLGspKQoKCiAgICAgIHMubG56ICs9IHdbbnF1ZSArIGtdOyAvLyBtb3ZlIGFsbCByb3dzIHRvIHBhcmVudCBvZiBrCgogICAgICB2YXIgcGEgPSBwYXJlbnRba107CgogICAgICBpZiAocGEgIT09IC0xKSB7CiAgICAgICAgaWYgKHdbbnF1ZSArIHBhXSA9PT0gMCkgewogICAgICAgICAgd1t0YWlsICsgcGFdID0gd1t0YWlsICsga107CiAgICAgICAgfQoKICAgICAgICB3W25leHQgKyB3W3RhaWwgKyBrXV0gPSB3W2hlYWQgKyBwYV07CiAgICAgICAgd1toZWFkICsgcGFdID0gd1tuZXh0ICsgaV07CiAgICAgICAgd1tucXVlICsgcGFdICs9IHdbbnF1ZSArIGtdOwogICAgICB9CiAgICB9CgogICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykgewogICAgICBpZiAocGludltpXSA8IDApIHsKICAgICAgICBwaW52W2ldID0gaysrOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHRydWU7CiAgfQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NNYXJrZWQuanMKLyoqCiAqIENoZWNrcyBpZiB0aGUgbm9kZSBhdCB3W2pdIGlzIG1hcmtlZAogKgogKiBAcGFyYW0ge0FycmF5fSAgIHcgICAgICAgICAgICAgICBUaGUgYXJyYXkKICogQHBhcmFtIHtOdW1iZXJ9ICBqICAgICAgICAgICAgICAgVGhlIGFycmF5IGluZGV4CiAqCiAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sCiAqLwpmdW5jdGlvbiBjc01hcmtlZCh3LCBqKSB7CiAgLy8gY2hlY2sgbm9kZSBpcyBtYXJrZWQKICByZXR1cm4gd1tqXSA8IDA7Cn0KLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NNYXJrLmpzCgovKioKICogTWFya3MgdGhlIG5vZGUgYXQgd1tqXQogKgogKiBAcGFyYW0ge0FycmF5fSAgIHcgICAgICAgICAgICAgICBUaGUgYXJyYXkKICogQHBhcmFtIHtOdW1iZXJ9ICBqICAgICAgICAgICAgICAgVGhlIGFycmF5IGluZGV4CiAqCiAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sCiAqLwoKZnVuY3Rpb24gY3NNYXJrKHcsIGopIHsKICAvLyBtYXJrIHdbal0KICB3W2pdID0gY3NGbGlwKHdbal0pOwp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzVW5mbGlwLmpzCgovKioKICogRmxpcHMgdGhlIHZhbHVlIGlmIGl0IGlzIG5lZ2F0aXZlIG9mIHJldHVybnMgdGhlIHNhbWUgdmFsdWUgb3RoZXJ3aXNlLgogKgogKiBAcGFyYW0ge051bWJlcn0gIGkgICAgICAgICAgICAgICBUaGUgdmFsdWUgdG8gZmxpcAogKgogKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbAogKi8KCmZ1bmN0aW9uIGNzVW5mbGlwKGkpIHsKICAvLyBmbGlwIHRoZSB2YWx1ZSBpZiBpdCBpcyBuZWdhdGl2ZQogIHJldHVybiBpIDwgMCA/IGNzRmxpcChpKSA6IGk7Cn0KLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NEZnMuanMKCgoKLyoqCiAqIERlcHRoLWZpcnN0IHNlYXJjaCBjb21wdXRlcyB0aGUgbm9uemVybyBwYXR0ZXJuIHhpIG9mIHRoZSBkaXJlY3RlZCBncmFwaCBHIChNYXRyaXgpIHN0YXJ0aW5nCiAqIGF0IG5vZGVzIGluIEIgKHNlZSBjc1JlYWNoKCkpLgogKgogKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgc3RhcnRpbmcgbm9kZSBmb3IgdGhlIERGUyBhbGdvcml0aG0KICogQHBhcmFtIHtNYXRyaXh9ICBnICAgICAgICAgICAgICAgVGhlIEcgbWF0cml4IHRvIHNlYXJjaCwgcHRyIGFycmF5IG1vZGlmaWVkLCB0aGVuIHJlc3RvcmVkCiAqIEBwYXJhbSB7TnVtYmVyfSAgdG9wICAgICAgICAgICAgIFN0YXJ0IGluZGV4IGluIHN0YWNrIHhpW3RvcC4ubi0xXQogKiBAcGFyYW0ge051bWJlcn0gIGsgICAgICAgICAgICAgICBUaGUga3RoIGNvbHVtbiBpbiBCCiAqIEBwYXJhbSB7QXJyYXl9ICAgeGkgICAgICAgICAgICAgIFRoZSBub256ZXJvIHBhdHRlcm4geGlbdG9wXSAuLiB4aVtuIC0gMV0sIGFuIGFycmF5IG9mIHNpemUgPSAyICogbgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgbiBlbnRyaWVzIGlzIHRoZSBub256ZXJvIHBhdHRlcm4sIHRoZSBsYXN0IG4gZW50cmllcyBpcyB0aGUgc3RhY2sKICogQHBhcmFtIHtBcnJheX0gICBwaW52ICAgICAgICAgICAgVGhlIGludmVyc2Ugcm93IHBlcm11dGF0aW9uIHZlY3RvciwgbXVzdCBiZSBudWxsIGZvciBMICogeCA9IGIKICoKICogQHJldHVybiB7TnVtYmVyfSAgICAgICAgICAgICAgICAgTmV3IHZhbHVlIG9mIHRvcAogKgogKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbAogKi8KCmZ1bmN0aW9uIGNzRGZzKGosIGcsIHRvcCwgeGksIHBpbnYpIHsKICAvLyBnIGFycmF5cwogIHZhciBpbmRleCA9IGcuX2luZGV4OwogIHZhciBwdHIgPSBnLl9wdHI7CiAgdmFyIHNpemUgPSBnLl9zaXplOyAvLyBjb2x1bW5zCgogIHZhciBuID0gc2l6ZVsxXTsgLy8gdmFycwoKICB2YXIgaSwgcCwgcDI7IC8vIGluaXRpYWxpemUgaGVhZAoKICB2YXIgaGVhZCA9IDA7IC8vIGluaXRpYWxpemUgdGhlIHJlY3Vyc2lvbiBzdGFjawoKICB4aVswXSA9IGo7IC8vIGxvb3AKCiAgd2hpbGUgKGhlYWQgPj0gMCkgewogICAgLy8gZ2V0IGogZnJvbSB0aGUgdG9wIG9mIHRoZSByZWN1cnNpb24gc3RhY2sKICAgIGogPSB4aVtoZWFkXTsgLy8gYXBwbHkgcGVybXV0YXRpb24gdmVjdG9yCgogICAgdmFyIGpuZXcgPSBwaW52ID8gcGludltqXSA6IGo7IC8vIGNoZWNrIG5vZGUgaiBpcyBtYXJrZWQKCiAgICBpZiAoIWNzTWFya2VkKHB0ciwgaikpIHsKICAgICAgLy8gbWFyayBub2RlIGogYXMgdmlzaXRlZAogICAgICBjc01hcmsocHRyLCBqKTsgLy8gdXBkYXRlIHN0YWNrIChsYXN0IG4gZW50cmllcyBpbiB4aSkKCiAgICAgIHhpW24gKyBoZWFkXSA9IGpuZXcgPCAwID8gMCA6IGNzVW5mbGlwKHB0cltqbmV3XSk7CiAgICB9IC8vIG5vZGUgaiBkb25lIGlmIG5vIHVudmlzaXRlZCBuZWlnaGJvcnMKCgogICAgdmFyIGRvbmUgPSAxOyAvLyBleGFtaW5lIGFsbCBuZWlnaGJvcnMgb2Ygaiwgc3RhY2sgKGxhc3QgbiBlbnRyaWVzIGluIHhpKQoKICAgIGZvciAocCA9IHhpW24gKyBoZWFkXSwgcDIgPSBqbmV3IDwgMCA/IDAgOiBjc1VuZmxpcChwdHJbam5ldyArIDFdKTsgcCA8IHAyOyBwKyspIHsKICAgICAgLy8gY29uc2lkZXIgbmVpZ2hib3Igbm9kZSBpCiAgICAgIGkgPSBpbmRleFtwXTsgLy8gY2hlY2sgd2UgaGF2ZSB2aXNpdGVkIG5vZGUgaSwgc2tpcCBpdAoKICAgICAgaWYgKGNzTWFya2VkKHB0ciwgaSkpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfSAvLyBwYXVzZSBkZXB0aC1maXJzdCBzZWFyY2ggb2Ygbm9kZSBqLCB1cGRhdGUgc3RhY2sgKGxhc3QgbiBlbnRyaWVzIGluIHhpKQoKCiAgICAgIHhpW24gKyBoZWFkXSA9IHA7IC8vIHN0YXJ0IGRmcyBhdCBub2RlIGkKCiAgICAgIHhpWysraGVhZF0gPSBpOyAvLyBub2RlIGogaXMgbm90IGRvbmUKCiAgICAgIGRvbmUgPSAwOyAvLyBicmVhaywgdG8gc3RhcnQgZGZzKGkpCgogICAgICBicmVhazsKICAgIH0gLy8gY2hlY2sgZGVwdGgtZmlyc3Qgc2VhcmNoIGF0IG5vZGUgaiBpcyBkb25lCgoKICAgIGlmIChkb25lKSB7CiAgICAgIC8vIHJlbW92ZSBqIGZyb20gdGhlIHJlY3Vyc2lvbiBzdGFjawogICAgICBoZWFkLS07IC8vIGFuZCBwbGFjZSBpbiB0aGUgb3V0cHV0IHN0YWNrCgogICAgICB4aVstLXRvcF0gPSBqOwogICAgfQogIH0KCiAgcmV0dXJuIHRvcDsKfQovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc1JlYWNoLmpzCgoKCi8qKgogKiBUaGUgY3NSZWFjaCBmdW5jdGlvbiBjb21wdXRlcyBYID0gUmVhY2goQiksIHdoZXJlIEIgaXMgdGhlIG5vbnplcm8gcGF0dGVybiBvZiB0aGUgbi1ieS0xCiAqIHNwYXJzZSBjb2x1bW4gb2YgdmVjdG9yIGIuIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzZXQgb2Ygbm9kZXMgcmVhY2hhYmxlIGZyb20gYW55IG5vZGUgaW4gQi4gVGhlCiAqIG5vbnplcm8gcGF0dGVybiB4aSBvZiB0aGUgc29sdXRpb24geCB0byB0aGUgc3BhcnNlIGxpbmVhciBzeXN0ZW0gTHg9YiBpcyBnaXZlbiBieSBYPVJlYWNoKEIpLgogKgogKiBAcGFyYW0ge01hdHJpeH0gIGcgICAgICAgICAgICAgICBUaGUgRyBtYXRyaXgKICogQHBhcmFtIHtNYXRyaXh9ICBiICAgICAgICAgICAgICAgVGhlIEIgbWF0cml4CiAqIEBwYXJhbSB7TnVtYmVyfSAgayAgICAgICAgICAgICAgIFRoZSBrdGggY29sdW1uIGluIEIKICogQHBhcmFtIHtBcnJheX0gICB4aSAgICAgICAgICAgICAgVGhlIG5vbnplcm8gcGF0dGVybiB4aVt0b3BdIC4uIHhpW24gLSAxXSwgYW4gYXJyYXkgb2Ygc2l6ZSA9IDIgKiBuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBuIGVudHJpZXMgaXMgdGhlIG5vbnplcm8gcGF0dGVybiwgdGhlIGxhc3QgbiBlbnRyaWVzIGlzIHRoZSBzdGFjawogKiBAcGFyYW0ge0FycmF5fSAgIHBpbnYgICAgICAgICAgICBUaGUgaW52ZXJzZSByb3cgcGVybXV0YXRpb24gdmVjdG9yCiAqCiAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgICAgICAgIFRoZSBpbmRleCBmb3IgdGhlIG5vbnplcm8gcGF0dGVybgogKgogKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbAogKi8KCmZ1bmN0aW9uIGNzUmVhY2goZywgYiwgaywgeGksIHBpbnYpIHsKICAvLyBnIGFycmF5cwogIHZhciBncHRyID0gZy5fcHRyOwogIHZhciBnc2l6ZSA9IGcuX3NpemU7IC8vIGIgYXJyYXlzCgogIHZhciBiaW5kZXggPSBiLl9pbmRleDsKICB2YXIgYnB0ciA9IGIuX3B0cjsgLy8gY29sdW1ucwoKICB2YXIgbiA9IGdzaXplWzFdOyAvLyB2YXJzCgogIHZhciBwLCBwMCwgcDE7IC8vIGluaXRpYWxpemUgdG9wCgogIHZhciB0b3AgPSBuOyAvLyBsb29wIGNvbHVtbiBpbmRlY2VzIGluIEIKCiAgZm9yIChwMCA9IGJwdHJba10sIHAxID0gYnB0cltrICsgMV0sIHAgPSBwMDsgcCA8IHAxOyBwKyspIHsKICAgIC8vIG5vZGUgaQogICAgdmFyIGkgPSBiaW5kZXhbcF07IC8vIGNoZWNrIG5vZGUgaSBpcyBtYXJrZWQKCiAgICBpZiAoIWNzTWFya2VkKGdwdHIsIGkpKSB7CiAgICAgIC8vIHN0YXJ0IGEgZGZzIGF0IHVubWFya2VkIG5vZGUgaQogICAgICB0b3AgPSBjc0RmcyhpLCBnLCB0b3AsIHhpLCBwaW52KTsKICAgIH0KICB9IC8vIGxvb3AgY29sdW1ucyBmcm9tIHRvcCAtPiBuIC0gMQoKCiAgZm9yIChwID0gdG9wOyBwIDwgbjsgcCsrKSB7CiAgICAvLyByZXN0b3JlIEcKICAgIGNzTWFyayhncHRyLCB4aVtwXSk7CiAgfQoKICByZXR1cm4gdG9wOwp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzU3Bzb2x2ZS5qcwoKCnZhciBjc1Nwc29sdmVfbmFtZSA9ICdjc1Nwc29sdmUnOwp2YXIgY3NTcHNvbHZlX2RlcGVuZGVuY2llcyA9IFsnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5JywgJ3N1YnRyYWN0J107CnZhciBjcmVhdGVDc1Nwc29sdmUgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShjc1Nwc29sdmVfbmFtZSwgY3NTcHNvbHZlX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsCiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSwKICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0OwoKICAvKioKICAgKiBUaGUgZnVuY3Rpb24gY3NTcHNvbHZlKCkgY29tcHV0ZXMgdGhlIHNvbHV0aW9uIHRvIEcgKiB4ID0gYmssIHdoZXJlIGJrIGlzIHRoZQogICAqIGt0aCBjb2x1bW4gb2YgQi4gV2hlbiBsbyBpcyB0cnVlLCB0aGUgZnVuY3Rpb24gYXNzdW1lcyBHID0gTCBpcyBsb3dlciB0cmlhbmd1bGFyIHdpdGggdGhlCiAgICogZGlhZ29uYWwgZW50cnkgYXMgdGhlIGZpcnN0IGVudHJ5IGluIGVhY2ggY29sdW1uLiBXaGVuIGxvIGlzIHRydWUsIHRoZSBmdW5jdGlvbiBhc3N1bWVzIEcgPSBVCiAgICogaXMgdXBwZXIgdHJpYW5ndWxhciB3aXRoIHRoZSBkaWFnb25hbCBlbnRyeSBhcyB0aGUgbGFzdCBlbnRyeSBpbiBlYWNoIGNvbHVtbi4KICAgKgogICAqIEBwYXJhbSB7TWF0cml4fSAgZyAgICAgICAgICAgICAgIFRoZSBHIG1hdHJpeAogICAqIEBwYXJhbSB7TWF0cml4fSAgYiAgICAgICAgICAgICAgIFRoZSBCIG1hdHJpeAogICAqIEBwYXJhbSB7TnVtYmVyfSAgayAgICAgICAgICAgICAgIFRoZSBrdGggY29sdW1uIGluIEIKICAgKiBAcGFyYW0ge0FycmF5fSAgIHhpICAgICAgICAgICAgICBUaGUgbm9uemVybyBwYXR0ZXJuIHhpW3RvcF0gLi4geGlbbiAtIDFdLCBhbiBhcnJheSBvZiBzaXplID0gMiAqIG4KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgbiBlbnRyaWVzIGlzIHRoZSBub256ZXJvIHBhdHRlcm4sIHRoZSBsYXN0IG4gZW50cmllcyBpcyB0aGUgc3RhY2sKICAgKiBAcGFyYW0ge0FycmF5fSAgIHggICAgICAgICAgICAgICBUaGUgc29sdXRvbiB0byB0aGUgbGluZWFyIHN5c3RlbSBHICogeCA9IGIKICAgKiBAcGFyYW0ge0FycmF5fSAgIHBpbnYgICAgICAgICAgICBUaGUgaW52ZXJzZSByb3cgcGVybXV0YXRpb24gdmVjdG9yLCBtdXN0IGJlIG51bGwgZm9yIEwgKiB4ID0gYgogICAqIEBwYXJhbSB7Ym9vbGVhbn0gbG8gICAgICAgICAgICAgIFRoZSBsb3dlciAodHJ1ZSkgdXBwZXIgdHJpYW5ndWxhciAoZmFsc2UpIGZsYWcKICAgKgogICAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgICAgICAgIFRoZSBpbmRleCBmb3IgdGhlIG5vbnplcm8gcGF0dGVybgogICAqCiAgICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWwKICAgKi8KICByZXR1cm4gZnVuY3Rpb24gY3NTcHNvbHZlKGcsIGIsIGssIHhpLCB4LCBwaW52LCBsbykgewogICAgLy8gZyBhcnJheXMKICAgIHZhciBndmFsdWVzID0gZy5fdmFsdWVzOwogICAgdmFyIGdpbmRleCA9IGcuX2luZGV4OwogICAgdmFyIGdwdHIgPSBnLl9wdHI7CiAgICB2YXIgZ3NpemUgPSBnLl9zaXplOyAvLyBjb2x1bW5zCgogICAgdmFyIG4gPSBnc2l6ZVsxXTsgLy8gYiBhcnJheXMKCiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlczsKICAgIHZhciBiaW5kZXggPSBiLl9pbmRleDsKICAgIHZhciBicHRyID0gYi5fcHRyOyAvLyB2YXJzCgogICAgdmFyIHAsIHAwLCBwMSwgcTsgLy8geGlbdG9wLi5uLTFdID0gY3NSZWFjaChCKDosaykpCgogICAgdmFyIHRvcCA9IGNzUmVhY2goZywgYiwgaywgeGksIHBpbnYpOyAvLyBjbGVhciB4CgogICAgZm9yIChwID0gdG9wOyBwIDwgbjsgcCsrKSB7CiAgICAgIHhbeGlbcF1dID0gMDsKICAgIH0gLy8gc2NhdHRlciBiCgoKICAgIGZvciAocDAgPSBicHRyW2tdLCBwMSA9IGJwdHJbayArIDFdLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7CiAgICAgIHhbYmluZGV4W3BdXSA9IGJ2YWx1ZXNbcF07CiAgICB9IC8vIGxvb3AgY29sdW1ucwoKCiAgICBmb3IgKHZhciBweCA9IHRvcDsgcHggPCBuOyBweCsrKSB7CiAgICAgIC8vIHggYXJyYXkgaW5kZXggZm9yIHB4CiAgICAgIHZhciBqID0geGlbcHhdOyAvLyBhcHBseSBwZXJtdXRhdGlvbiB2ZWN0b3IgKFUgeCA9IGIpLCBqIG1hcHMgdG8gY29sdW1uIEogb2YgRwoKICAgICAgdmFyIEogPSBwaW52ID8gcGludltqXSA6IGo7IC8vIGNoZWNrIGNvbHVtbiBKIGlzIGVtcHR5CgogICAgICBpZiAoSiA8IDApIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfSAvLyBjb2x1bW4gdmFsdWUgaW5kZWNlcyBpbiBHLCBwMCA8PSBwIDwgcDEKCgogICAgICBwMCA9IGdwdHJbSl07CiAgICAgIHAxID0gZ3B0cltKICsgMV07IC8vIHgoaikgLz0gRyhqLGopCgogICAgICB4W2pdID0gZGl2aWRlU2NhbGFyKHhbal0sIGd2YWx1ZXNbbG8gPyBwMCA6IHAxIC0gMV0pOyAvLyBmaXJzdCBlbnRyeSBMKGosaikKCiAgICAgIHAgPSBsbyA/IHAwICsgMSA6IHAwOwogICAgICBxID0gbG8gPyBwMSA6IHAxIC0gMTsgLy8gbG9vcAoKICAgICAgZm9yICg7IHAgPCBxOyBwKyspIHsKICAgICAgICAvLyByb3cKICAgICAgICB2YXIgaSA9IGdpbmRleFtwXTsgLy8geChpKSAtPSBHKGksaikgKiB4KGopCgogICAgICAgIHhbaV0gPSBzdWJ0cmFjdCh4W2ldLCBtdWx0aXBseShndmFsdWVzW3BdLCB4W2pdKSk7CiAgICAgIH0KICAgIH0gLy8gcmV0dXJuIHRvcCBvZiBzdGFjawoKCiAgICByZXR1cm4gdG9wOwogIH07Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc0x1LmpzCgoKdmFyIGNzTHVfbmFtZSA9ICdjc0x1JzsKdmFyIGNzTHVfZGVwZW5kZW5jaWVzID0gWydhYnMnLCAnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5JywgJ3N1YnRyYWN0JywgJ2xhcmdlcicsICdsYXJnZXJFcScsICdTcGFyc2VNYXRyaXgnXTsKdmFyIGNyZWF0ZUNzTHUgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShjc0x1X25hbWUsIGNzTHVfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciBhYnMgPSBfcmVmLmFicywKICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsCiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSwKICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LAogICAgICBsYXJnZXIgPSBfcmVmLmxhcmdlciwKICAgICAgbGFyZ2VyRXEgPSBfcmVmLmxhcmdlckVxLAogICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDsKICB2YXIgY3NTcHNvbHZlID0gY3JlYXRlQ3NTcHNvbHZlKHsKICAgIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLAogICAgbXVsdGlwbHk6IG11bHRpcGx5LAogICAgc3VidHJhY3Q6IHN1YnRyYWN0CiAgfSk7CiAgLyoqCiAgICogQ29tcHV0ZXMgdGhlIG51bWVyaWMgTFUgZmFjdG9yaXphdGlvbiBvZiB0aGUgc3BhcnNlIG1hdHJpeCBBLiBJbXBsZW1lbnRzIGEgTGVmdC1sb29raW5nIExVIGZhY3Rvcml6YXRpb24KICAgKiBhbGdvcml0aG0gdGhhdCBjb21wdXRlcyBMIGFuZCBVIG9uZSBjb2x1bW4gYXQgYSB0dW1lLiBBdCB0aGUga3RoIHN0ZXAsIGl0IGFjY2VzcyBjb2x1bW5zIDEgdG8gay0xIG9mIEwKICAgKiBhbmQgY29sdW1uIGsgb2YgQS4gR2l2ZW4gdGhlIGZpbGwtcmVkdWNpbmcgY29sdW1uIG9yZGVyaW5nIHEgKHNlZSBwYXJhbWV0ZXIgcykgY29tcHV0ZXMgTCwgVSBhbmQgcGludiBzbwogICAqIEwgKiBVID0gQShwLCBxKSwgd2hlcmUgcCBpcyB0aGUgaW52ZXJzZSBvZiBwaW52LgogICAqCiAgICogQHBhcmFtIHtNYXRyaXh9ICBtICAgICAgICAgICAgICAgVGhlIEEgTWF0cml4IHRvIGZhY3Rvcml6ZQogICAqIEBwYXJhbSB7T2JqZWN0fSAgcyAgICAgICAgICAgICAgIFRoZSBzeW1ib2xpYyBhbmFseXNpcyBmcm9tIGNzU3FyKCkuIFByb3ZpZGVzIHRoZSBmaWxsLXJlZHVjaW5nCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uIG9yZGVyaW5nIHEKICAgKiBAcGFyYW0ge051bWJlcn0gIHRvbCAgICAgICAgICAgICBQYXJ0aWFsIHBpdm90aW5nIHRocmVzaG9sZCAoMSBmb3IgcGFydGlhbCBwaXZvdGluZykKICAgKgogICAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgICAgICAgIFRoZSBudW1lcmljIExVIGZhY3Rvcml6YXRpb24gb2YgQSBvciBudWxsCiAgICoKICAgKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbAogICAqLwoKICByZXR1cm4gZnVuY3Rpb24gY3NMdShtLCBzLCB0b2wpIHsKICAgIC8vIHZhbGlkYXRlIGlucHV0CiAgICBpZiAoIW0pIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IC8vIG0gYXJyYXlzCgoKICAgIHZhciBzaXplID0gbS5fc2l6ZTsgLy8gY29sdW1ucwoKICAgIHZhciBuID0gc2l6ZVsxXTsgLy8gc3ltYm9saWMgYW5hbHlzaXMgcmVzdWx0CgogICAgdmFyIHE7CiAgICB2YXIgbG56ID0gMTAwOwogICAgdmFyIHVueiA9IDEwMDsgLy8gdXBkYXRlIHN5bWJvbGljIGFuYWx5c2lzIHBhcmFtZXRlcnMKCiAgICBpZiAocykgewogICAgICBxID0gcy5xOwogICAgICBsbnogPSBzLmxueiB8fCBsbno7CiAgICAgIHVueiA9IHMudW56IHx8IHVuejsKICAgIH0gLy8gTCBhcnJheXMKCgogICAgdmFyIGx2YWx1ZXMgPSBbXTsgLy8gKGxueikKCiAgICB2YXIgbGluZGV4ID0gW107IC8vIChsbnopCgogICAgdmFyIGxwdHIgPSBbXTsgLy8gKG4gKyAxKQogICAgLy8gTAoKICAgIHZhciBMID0gbmV3IFNwYXJzZU1hdHJpeCh7CiAgICAgIHZhbHVlczogbHZhbHVlcywKICAgICAgaW5kZXg6IGxpbmRleCwKICAgICAgcHRyOiBscHRyLAogICAgICBzaXplOiBbbiwgbl0KICAgIH0pOyAvLyBVIGFycmF5cwoKICAgIHZhciB1dmFsdWVzID0gW107IC8vICh1bnopCgogICAgdmFyIHVpbmRleCA9IFtdOyAvLyAodW56KQoKICAgIHZhciB1cHRyID0gW107IC8vIChuICsgMSkKICAgIC8vIFUKCiAgICB2YXIgVSA9IG5ldyBTcGFyc2VNYXRyaXgoewogICAgICB2YWx1ZXM6IHV2YWx1ZXMsCiAgICAgIGluZGV4OiB1aW5kZXgsCiAgICAgIHB0cjogdXB0ciwKICAgICAgc2l6ZTogW24sIG5dCiAgICB9KTsgLy8gaW52ZXJzZSBvZiBwZXJtdXRhdGlvbiB2ZWN0b3IKCiAgICB2YXIgcGludiA9IFtdOyAvLyAobikKICAgIC8vIHZhcnMKCiAgICB2YXIgaSwgcDsgLy8gYWxsb2NhdGUgYXJyYXlzCgogICAgdmFyIHggPSBbXTsgLy8gKG4pCgogICAgdmFyIHhpID0gW107IC8vICgyICogbikKICAgIC8vIGluaXRpYWxpemUgdmFyaWFibGVzCgogICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAvLyBjbGVhciB3b3Jrc3BhY2UKICAgICAgeFtpXSA9IDA7IC8vIG5vIHJvd3MgcGl2b3RhbCB5ZXQKCiAgICAgIHBpbnZbaV0gPSAtMTsgLy8gbm8gY29scyBvZiBMIHlldAoKICAgICAgbHB0cltpICsgMV0gPSAwOwogICAgfSAvLyByZXNldCBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50cyBpbiBMIGFuZCBVCgoKICAgIGxueiA9IDA7CiAgICB1bnogPSAwOyAvLyBjb21wdXRlIEwoOixrKSBhbmQgVSg6LGspCgogICAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyBrKyspIHsKICAgICAgLy8gdXBkYXRlIHB0cgogICAgICBscHRyW2tdID0gbG56OwogICAgICB1cHRyW2tdID0gdW56OyAvLyBhcHBseSBjb2x1bW4gcGVybXV0YXRpb25zIGlmIG5lZWRlZAoKICAgICAgdmFyIGNvbCA9IHEgPyBxW2tdIDogazsgLy8gc29sdmUgdHJpYW5ndWxhciBzeXN0ZW0sIHggPSBMXEEoOixjb2wpCgogICAgICB2YXIgdG9wID0gY3NTcHNvbHZlKEwsIG0sIGNvbCwgeGksIHgsIHBpbnYsIDEpOyAvLyBmaW5kIHBpdm90CgogICAgICB2YXIgaXBpdiA9IC0xOwogICAgICB2YXIgYSA9IC0xOyAvLyBsb29wIHhpW10gZnJvbSB0b3AgLT4gbgoKICAgICAgZm9yIChwID0gdG9wOyBwIDwgbjsgcCsrKSB7CiAgICAgICAgLy8geFtpXSBpcyBub256ZXJvCiAgICAgICAgaSA9IHhpW3BdOyAvLyBjaGVjayByb3cgaSBpcyBub3QgeWV0IHBpdm90YWwKCiAgICAgICAgaWYgKHBpbnZbaV0gPCAwKSB7CiAgICAgICAgICAvLyBhYnNvbHV0ZSB2YWx1ZSBvZiB4W2ldCiAgICAgICAgICB2YXIgeGFicyA9IGFicyh4W2ldKTsgLy8gY2hlY2sgYWJzb3VsdGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHBpdm90IHZhbHVlCgogICAgICAgICAgaWYgKGxhcmdlcih4YWJzLCBhKSkgewogICAgICAgICAgICAvLyBsYXJnZXN0IHBpdm90IGNhbmRpZGF0ZSBzbyBmYXIKICAgICAgICAgICAgYSA9IHhhYnM7CiAgICAgICAgICAgIGlwaXYgPSBpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyB4KGkpIGlzIHRoZSBlbnRyeSBVKHBpbnZbaV0saykKICAgICAgICAgIHVpbmRleFt1bnpdID0gcGludltpXTsKICAgICAgICAgIHV2YWx1ZXNbdW56KytdID0geFtpXTsKICAgICAgICB9CiAgICAgIH0gLy8gdmFsaWRhdGUgd2UgZm91bmQgYSB2YWxpZCBwaXZvdAoKCiAgICAgIGlmIChpcGl2ID09PSAtMSB8fCBhIDw9IDApIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfSAvLyB1cGRhdGUgYWN0dWFsIHBpdm90IGNvbHVtbiwgZ2l2ZSBwcmVmZXJlbmNlIHRvIGRpYWdvbmFsIHZhbHVlCgoKICAgICAgaWYgKHBpbnZbY29sXSA8IDAgJiYgbGFyZ2VyRXEoYWJzKHhbY29sXSksIG11bHRpcGx5KGEsIHRvbCkpKSB7CiAgICAgICAgaXBpdiA9IGNvbDsKICAgICAgfSAvLyB0aGUgY2hvc2VuIHBpdm90CgoKICAgICAgdmFyIHBpdm90ID0geFtpcGl2XTsgLy8gbGFzdCBlbnRyeSBpbiBVKDosaykgaXMgVShrLGspCgogICAgICB1aW5kZXhbdW56XSA9IGs7CiAgICAgIHV2YWx1ZXNbdW56KytdID0gcGl2b3Q7IC8vIGlwaXYgaXMgdGhlIGt0aCBwaXZvdCByb3cKCiAgICAgIHBpbnZbaXBpdl0gPSBrOyAvLyBmaXJzdCBlbnRyeSBpbiBMKDosaykgaXMgTChrLGspID0gMQoKICAgICAgbGluZGV4W2xuel0gPSBpcGl2OwogICAgICBsdmFsdWVzW2xueisrXSA9IDE7IC8vIEwoaysxOm4saykgPSB4IC8gcGl2b3QKCiAgICAgIGZvciAocCA9IHRvcDsgcCA8IG47IHArKykgewogICAgICAgIC8vIHJvdwogICAgICAgIGkgPSB4aVtwXTsgLy8gY2hlY2sgeChpKSBpcyBhbiBlbnRyeSBpbiBMKDosaykKCiAgICAgICAgaWYgKHBpbnZbaV0gPCAwKSB7CiAgICAgICAgICAvLyBzYXZlIHVucGVybXV0ZWQgcm93IGluIEwKICAgICAgICAgIGxpbmRleFtsbnpdID0gaTsgLy8gc2NhbGUgcGl2b3QgY29sdW1uCgogICAgICAgICAgbHZhbHVlc1tsbnorK10gPSBkaXZpZGVTY2FsYXIoeFtpXSwgcGl2b3QpOwogICAgICAgIH0gLy8geFswLi5uLTFdID0gMCBmb3IgbmV4dCBrCgoKICAgICAgICB4W2ldID0gMDsKICAgICAgfQogICAgfSAvLyB1cGRhdGUgcHRyCgoKICAgIGxwdHJbbl0gPSBsbno7CiAgICB1cHRyW25dID0gdW56OyAvLyBmaXggcm93IGluZGljZXMgb2YgTCBmb3IgZmluYWwgcGludgoKICAgIGZvciAocCA9IDA7IHAgPCBsbno7IHArKykgewogICAgICBsaW5kZXhbcF0gPSBwaW52W2xpbmRleFtwXV07CiAgICB9IC8vIHRyaW0gYXJyYXlzCgoKICAgIGx2YWx1ZXMuc3BsaWNlKGxueiwgbHZhbHVlcy5sZW5ndGggLSBsbnopOwogICAgbGluZGV4LnNwbGljZShsbnosIGxpbmRleC5sZW5ndGggLSBsbnopOwogICAgdXZhbHVlcy5zcGxpY2UodW56LCB1dmFsdWVzLmxlbmd0aCAtIHVueik7CiAgICB1aW5kZXguc3BsaWNlKHVueiwgdWluZGV4Lmxlbmd0aCAtIHVueik7IC8vIHJldHVybiBMVSBmYWN0b3IKCiAgICByZXR1cm4gewogICAgICBMOiBMLAogICAgICBVOiBVLAogICAgICBwaW52OiBwaW52CiAgICB9OwogIH07Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hbGdlYnJhL2RlY29tcG9zaXRpb24vc2x1LmpzCgoKCgp2YXIgc2x1X25hbWUgPSAnc2x1JzsKdmFyIHNsdV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FicycsICdhZGQnLCAnbXVsdGlwbHknLCAndHJhbnNwb3NlJywgJ2RpdmlkZVNjYWxhcicsICdzdWJ0cmFjdCcsICdsYXJnZXInLCAnbGFyZ2VyRXEnLCAnU3BhcnNlTWF0cml4J107CnZhciBjcmVhdGVTbHUgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShzbHVfbmFtZSwgc2x1X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBhYnMgPSBfcmVmLmFicywKICAgICAgYWRkID0gX3JlZi5hZGQsCiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSwKICAgICAgdHJhbnNwb3NlID0gX3JlZi50cmFuc3Bvc2UsCiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLAogICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsCiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyLAogICAgICBsYXJnZXJFcSA9IF9yZWYubGFyZ2VyRXEsCiAgICAgIFNwYXJzZU1hdHJpeCA9IF9yZWYuU3BhcnNlTWF0cml4OwogIHZhciBjc1NxciA9IGNyZWF0ZUNzU3FyKHsKICAgIGFkZDogYWRkLAogICAgbXVsdGlwbHk6IG11bHRpcGx5LAogICAgdHJhbnNwb3NlOiB0cmFuc3Bvc2UKICB9KTsKICB2YXIgY3NMdSA9IGNyZWF0ZUNzTHUoewogICAgYWJzOiBhYnMsCiAgICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhciwKICAgIG11bHRpcGx5OiBtdWx0aXBseSwKICAgIHN1YnRyYWN0OiBzdWJ0cmFjdCwKICAgIGxhcmdlcjogbGFyZ2VyLAogICAgbGFyZ2VyRXE6IGxhcmdlckVxLAogICAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgKICB9KTsKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIFNwYXJzZSBNYXRyaXggTFUgZGVjb21wb3NpdGlvbiB3aXRoIGZ1bGwgcGl2b3RpbmcuIFNwYXJzZSBNYXRyaXggYEFgIGlzIGRlY29tcG9zZWQgaW4gdHdvIG1hdHJpY2VzIChgTGAsIGBVYCkgYW5kIHR3byBwZXJtdXRhdGlvbiB2ZWN0b3JzIChgcGludmAsIGBxYCkgd2hlcmUKICAgKgogICAqIGBQICogQSAqIFEgPSBMICogVWAKICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgIG1hdGguc2x1KEEsIG9yZGVyLCB0aHJlc2hvbGQpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIGNvbnN0IEEgPSBtYXRoLnNwYXJzZShbWzQsM10sIFs2LCAzXV0pCiAgICogICAgbWF0aC5zbHUoQSwgMSwgMC4wMDEpCiAgICogICAgLy8gcmV0dXJuczoKICAgKiAgICAvLyB7CiAgICogICAgLy8gICBMOiBbWzEsIDBdLCBbMS41LCAxXV0KICAgKiAgICAvLyAgIFU6IFtbNCwgM10sIFswLCAtMS41XV0KICAgKiAgICAvLyAgIHA6IFswLCAxXQogICAqICAgIC8vICAgcTogWzAsIDFdCiAgICogICAgLy8gfQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBsdXAsIGxzb2x2ZSwgdXNvbHZlLCBsdXNvbHZlCiAgICoKICAgKiBAcGFyYW0ge1NwYXJzZU1hdHJpeH0gQSAgICAgICAgICAgICAgQSB0d28gZGltZW5zaW9uYWwgc3BhcnNlIG1hdHJpeCBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBMVSBkZWNvbXBvc2l0aW9uLgogICAqIEBwYXJhbSB7TnVtYmVyfSAgICAgICBvcmRlciAgICAgICAgICBUaGUgU3ltYm9saWMgT3JkZXJpbmcgYW5kIEFuYWx5c2lzIG9yZGVyOgogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAtIE5hdHVyYWwgb3JkZXJpbmcsIG5vIHBlcm11dGF0aW9uIHZlY3RvciBxIGlzIHJldHVybmVkCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gTWF0cml4IG11c3QgYmUgc3F1YXJlLCBzeW1ib2xpYyBvcmRlcmluZyBhbmQgYW5hbGlzaXMgaXMgcGVyZm9ybWVkIG9uIE0gPSBBICsgQScKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgLSBTeW1ib2xpYyBvcmRlcmluZyBhbmQgYW5hbGlzaXMgaXMgcGVyZm9ybWVkIG9uIE0gPSBBJyAqIEEuIERlbnNlIGNvbHVtbnMgZnJvbSBBJyBhcmUgZHJvcHBlZCwgQSByZWNyZWF0ZWQgZnJvbSBBJy4KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGFwcHJvcHJpYXRlZm9yIExVIGZhY3Rvcml6YXRpb24gb2YgdW5zeW1tZXRyaWMgbWF0cmljZXMuCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIC0gU3ltYm9saWMgb3JkZXJpbmcgYW5kIGFuYWxpc2lzIGlzIHBlcmZvcm1lZCBvbiBNID0gQScgKiBBLiBUaGlzIGlzIGJlc3QgdXNlZCBmb3IgTFUgZmFjdG9yaXphdGlvbiBpcyBtYXRyaXggTSBoYXMgbm8gZGVuc2Ugcm93cy4KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIGRlbnNlIHJvdyBpcyBhIHJvdyB3aXRoIG1vcmUgdGhhbiAxMCpzcXIoY29sdW1ucykgZW50cmllcy4KICAgKiBAcGFyYW0ge051bWJlcn0gICAgICAgdGhyZXNob2xkICAgICAgIFBhcnRpYWwgcGl2b3RpbmcgdGhyZXNob2xkICgxIGZvciBwYXJ0aWFsIHBpdm90aW5nKQogICAqCiAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgbG93ZXIgdHJpYW5ndWxhciBtYXRyaXgsIHRoZSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeCBhbmQgdGhlIHBlcm11dGF0aW9uIHZlY3RvcnMuCiAgICovCgogIHJldHVybiB0eXBlZChzbHVfbmFtZSwgewogICAgJ1NwYXJzZU1hdHJpeCwgbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJOdW1iZXIoYSwgb3JkZXIsIHRocmVzaG9sZCkgewogICAgICAvLyB2ZXJpZnkgb3JkZXIKICAgICAgaWYgKCFPYmplY3QodXRpbHNfbnVtYmVyWyJpIiAvKiBpc0ludGVnZXIgKi9dKShvcmRlcikgfHwgb3JkZXIgPCAwIHx8IG9yZGVyID4gMykgewogICAgICAgIHRocm93IG5ldyBFcnJvcignU3ltYm9saWMgT3JkZXJpbmcgYW5kIEFuYWx5c2lzIG9yZGVyIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXIgaW4gdGhlIGludGVydmFsIFswLCAzXScpOwogICAgICB9IC8vIHZlcmlmeSB0aHJlc2hvbGQKCgogICAgICBpZiAodGhyZXNob2xkIDwgMCB8fCB0aHJlc2hvbGQgPiAxKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJ0aWFsIHBpdm90aW5nIHRocmVzaG9sZCBtdXN0IGJlIGEgbnVtYmVyIGZyb20gMCB0byAxJyk7CiAgICAgIH0gLy8gcGVyZm9ybSBzeW1ib2xpYyBvcmRlcmluZyBhbmQgYW5hbHlzaXMKCgogICAgICB2YXIgcyA9IGNzU3FyKG9yZGVyLCBhLCBmYWxzZSk7IC8vIHBlcmZvcm0gbHUgZGVjb21wb3NpdGlvbgoKICAgICAgdmFyIGYgPSBjc0x1KGEsIHMsIHRocmVzaG9sZCk7IC8vIHJldHVybiBkZWNvbXBvc2l0aW9uCgogICAgICByZXR1cm4gewogICAgICAgIEw6IGYuTCwKICAgICAgICBVOiBmLlUsCiAgICAgICAgcDogZi5waW52LAogICAgICAgIHE6IHMucSwKICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7CiAgICAgICAgICByZXR1cm4gJ0w6ICcgKyB0aGlzLkwudG9TdHJpbmcoKSArICdcblU6ICcgKyB0aGlzLlUudG9TdHJpbmcoKSArICdcbnA6ICcgKyB0aGlzLnAudG9TdHJpbmcoKSArICh0aGlzLnEgPyAnXG5xOiAnICsgdGhpcy5xLnRvU3RyaW5nKCkgOiAnJykgKyAnXG4nOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9KTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzSXB2ZWMuanMKLyoqCiAqIFBlcm11dGVzIGEgdmVjdG9yOyB4ID0gUCdiLiBJbiBNQVRMQUIgbm90YXRpb24sIHgocCk9Yi4KICoKICogQHBhcmFtIHtBcnJheX0gcCAgICAgICAgICAgVGhlIHBlcm11dGF0aW9uIHZlY3RvciBvZiBsZW5ndGggbi4gbnVsbCB2YWx1ZSBkZW5vdGVzIGlkZW50aXR5CiAqIEBwYXJhbSB7QXJyYXl9IGIgICAgICAgICAgIFRoZSBpbnB1dCB2ZWN0b3IKICoKICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgICAgVGhlIG91dHB1dCB2ZWN0b3IgeCA9IFAnYgogKi8KZnVuY3Rpb24gY3NJcHZlYyhwLCBiKSB7CiAgLy8gdmFycwogIHZhciBrOwogIHZhciBuID0gYi5sZW5ndGg7CiAgdmFyIHggPSBbXTsgLy8gY2hlY2sgcGVybXV0YXRpb24gdmVjdG9yIHdhcyBwcm92aWRlZCwgcCA9IG51bGwgZGVub3RlcyBpZGVudGl0eQoKICBpZiAocCkgewogICAgLy8gbG9vcCB2ZWN0b3IKICAgIGZvciAoayA9IDA7IGsgPCBuOyBrKyspIHsKICAgICAgLy8gYXBwbHkgcGVybXV0YXRpb24KICAgICAgeFtwW2tdXSA9IGJba107CiAgICB9CiAgfSBlbHNlIHsKICAgIC8vIGxvb3AgdmVjdG9yCiAgICBmb3IgKGsgPSAwOyBrIDwgbjsgaysrKSB7CiAgICAgIC8vIHhbaV0gPSBiW2ldCiAgICAgIHhba10gPSBiW2tdOwogICAgfQogIH0KCiAgcmV0dXJuIHg7Cn0KLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYWxnZWJyYS9zb2x2ZXIvbHVzb2x2ZS5qcwoKCgoKdmFyIGx1c29sdmVfbmFtZSA9ICdsdXNvbHZlJzsKdmFyIGx1c29sdmVfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnbHVwJywgJ3NsdScsICd1c29sdmUnLCAnbHNvbHZlJywgJ0RlbnNlTWF0cml4J107CnZhciBjcmVhdGVMdXNvbHZlID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkobHVzb2x2ZV9uYW1lLCBsdXNvbHZlX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCwKICAgICAgbHVwID0gX3JlZi5sdXAsCiAgICAgIHNsdSA9IF9yZWYuc2x1LAogICAgICB1c29sdmUgPSBfcmVmLnVzb2x2ZSwKICAgICAgbHNvbHZlID0gX3JlZi5sc29sdmUsCiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDsKICB2YXIgc29sdmVWYWxpZGF0aW9uID0gY3JlYXRlU29sdmVWYWxpZGF0aW9uKHsKICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeAogIH0pOwogIC8qKgogICAqIFNvbHZlcyB0aGUgbGluZWFyIHN5c3RlbSBgQSAqIHggPSBiYCB3aGVyZSBgQWAgaXMgYW4gW24geCBuXSBtYXRyaXggYW5kIGBiYCBpcyBhIFtuXSBjb2x1bW4gdmVjdG9yLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5sdXNvbHZlKEEsIGIpICAgICAvLyByZXR1cm5zIGNvbHVtbiB2ZWN0b3Igd2l0aCB0aGUgc29sdXRpb24gdG8gdGhlIGxpbmVhciBzeXN0ZW0gQSAqIHggPSBiCiAgICogICAgbWF0aC5sdXNvbHZlKGx1cCwgYikgICAvLyByZXR1cm5zIGNvbHVtbiB2ZWN0b3Igd2l0aCB0aGUgc29sdXRpb24gdG8gdGhlIGxpbmVhciBzeXN0ZW0gQSAqIHggPSBiLCBsdXAgPSBtYXRoLmx1cChBKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBjb25zdCBtID0gW1sxLCAwLCAwLCAwXSwgWzAsIDIsIDAsIDBdLCBbMCwgMCwgMywgMF0sIFswLCAwLCAwLCA0XV0KICAgKgogICAqICAgIGNvbnN0IHggPSBtYXRoLmx1c29sdmUobSwgWy0xLCAtMSwgLTEsIC0xXSkgICAgICAgIC8vIHggPSBbWy0xXSwgWy0wLjVdLCBbLTEvM10sIFstMC4yNV1dCiAgICoKICAgKiAgICBjb25zdCBmID0gbWF0aC5sdXAobSkKICAgKiAgICBjb25zdCB4MSA9IG1hdGgubHVzb2x2ZShmLCBbLTEsIC0xLCAtMSwgLTFdKSAgICAgICAvLyB4MSA9IFtbLTFdLCBbLTAuNV0sIFstMS8zXSwgWy0wLjI1XV0KICAgKiAgICBjb25zdCB4MiA9IG1hdGgubHVzb2x2ZShmLCBbMSwgMiwgMSwgLTFdKSAgICAgICAgICAvLyB4MiA9IFtbMV0sIFsxXSwgWzEvM10sIFstMC4yNV1dCiAgICoKICAgKiAgICBjb25zdCBhID0gW1stMiwgM10sIFsyLCAxXV0KICAgKiAgICBjb25zdCBiID0gWzExLCA5XQogICAqICAgIGNvbnN0IHggPSBtYXRoLmx1c29sdmUoYSwgYikgIC8vIFtbMl0sIFs1XV0KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgbHVwLCBzbHUsIGxzb2x2ZSwgdXNvbHZlCiAgICoKICAgKiBAcGFyYW0ge01hdHJpeCB8IEFycmF5IHwgT2JqZWN0fSBBICAgICAgSW52ZXJ0aWJsZSBNYXRyaXggb3IgdGhlIE1hdHJpeCBMVSBkZWNvbXBvc2l0aW9uCiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0gYiAgICAgICAgICAgICAgIENvbHVtbiBWZWN0b3IKICAgKiBAcGFyYW0ge251bWJlcn0gW29yZGVyXSAgICAgICAgICAgICAgICAgVGhlIFN5bWJvbGljIE9yZGVyaW5nIGFuZCBBbmFseXNpcyBvcmRlciwgc2VlIHNsdSBmb3IgZGV0YWlscy4gTWF0cml4IG11c3QgYmUgYSBTcGFyc2VNYXRyaXgKICAgKiBAcGFyYW0ge051bWJlcn0gW3RocmVzaG9sZF0gICAgICAgICAgICAgUGFydGlhbCBwaXZvdGluZyB0aHJlc2hvbGQgKDEgZm9yIHBhcnRpYWwgcGl2b3RpbmcpLCBzZWUgc2x1IGZvciBkZXRhaWxzLiBNYXRyaXggbXVzdCBiZSBhIFNwYXJzZU1hdHJpeC4KICAgKgogICAqIEByZXR1cm4ge0RlbnNlTWF0cml4IHwgQXJyYXl9ICAgICAgICAgICBDb2x1bW4gdmVjdG9yIHdpdGggdGhlIHNvbHV0aW9uIHRvIHRoZSBsaW5lYXIgc3lzdGVtIEEgKiB4ID0gYgogICAqLwoKICByZXR1cm4gdHlwZWQobHVzb2x2ZV9uYW1lLCB7CiAgICAnQXJyYXksIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlBcnJheU1hdHJpeChhLCBiKSB7CiAgICAgIC8vIGNvbnZlcnQgYSB0byBtYXRyaXgKICAgICAgYSA9IG1hdHJpeChhKTsgLy8gbWF0cml4IGx1cCBkZWNvbXBvc2l0aW9uCgogICAgICB2YXIgZCA9IGx1cChhKTsgLy8gc29sdmUKCiAgICAgIHZhciB4ID0gX2x1c29sdmUoZC5MLCBkLlUsIGQucCwgbnVsbCwgYik7IC8vIGNvbnZlcnQgcmVzdWx0IHRvIGFycmF5CgoKICAgICAgcmV0dXJuIHgudmFsdWVPZigpOwogICAgfSwKICAgICdEZW5zZU1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFycmF5TWF0cml4KGEsIGIpIHsKICAgICAgLy8gbWF0cml4IGx1cCBkZWNvbXBvc2l0aW9uCiAgICAgIHZhciBkID0gbHVwKGEpOyAvLyBzb2x2ZQoKICAgICAgcmV0dXJuIF9sdXNvbHZlKGQuTCwgZC5VLCBkLnAsIG51bGwsIGIpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QXJyYXlNYXRyaXgoYSwgYikgewogICAgICAvLyBtYXRyaXggbHVwIGRlY29tcG9zaXRpb24KICAgICAgdmFyIGQgPSBsdXAoYSk7IC8vIHNvbHZlCgogICAgICByZXR1cm4gX2x1c29sdmUoZC5MLCBkLlUsIGQucCwgbnVsbCwgYik7CiAgICB9LAogICAgJ1NwYXJzZU1hdHJpeCwgQXJyYXkgfCBNYXRyaXgsIG51bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QXJyYXlNYXRyaXhOdW1iZXJOdW1iZXIoYSwgYiwgb3JkZXIsIHRocmVzaG9sZCkgewogICAgICAvLyBtYXRyaXggbHUgZGVjb21wb3NpdGlvbgogICAgICB2YXIgZCA9IHNsdShhLCBvcmRlciwgdGhyZXNob2xkKTsgLy8gc29sdmUKCiAgICAgIHJldHVybiBfbHVzb2x2ZShkLkwsIGQuVSwgZC5wLCBkLnEsIGIpOwogICAgfSwKICAgICdPYmplY3QsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gT2JqZWN0QXJyYXlNYXRyaXgoZCwgYikgewogICAgICAvLyBzb2x2ZQogICAgICByZXR1cm4gX2x1c29sdmUoZC5MLCBkLlUsIGQucCwgZC5xLCBiKTsKICAgIH0KICB9KTsKCiAgZnVuY3Rpb24gX3RvTWF0cml4KGEpIHsKICAgIC8vIGNoZWNrIGl0IGlzIGEgbWF0cml4CiAgICBpZiAoT2JqZWN0KGlzWyJ2IiAvKiBpc01hdHJpeCAqL10pKGEpKSB7CiAgICAgIHJldHVybiBhOwogICAgfSAvLyBjaGVjayBhcnJheQoKCiAgICBpZiAoT2JqZWN0KGlzWyJiIiAvKiBpc0FycmF5ICovXSkoYSkpIHsKICAgICAgcmV0dXJuIG1hdHJpeChhKTsKICAgIH0gLy8gdGhyb3cKCgogICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBNYXRyaXggTFUgZGVjb21wb3NpdGlvbicpOwogIH0KCiAgZnVuY3Rpb24gX2x1c29sdmUobCwgdSwgcCwgcSwgYikgewogICAgLy8gdmVyaWZ5IEwsIFUsIFAKICAgIGwgPSBfdG9NYXRyaXgobCk7CiAgICB1ID0gX3RvTWF0cml4KHUpOyAvLyB2YWxpZGF0ZSBtYXRyaXggYW5kIHZlY3RvcgoKICAgIGIgPSBzb2x2ZVZhbGlkYXRpb24obCwgYiwgZmFsc2UpOyAvLyBhcHBseSByb3cgcGVybXV0YXRpb25zIGlmIG5lZWRlZCAoYiBpcyBhIERlbnNlTWF0cml4KQoKICAgIGlmIChwKSB7CiAgICAgIGIuX2RhdGEgPSBjc0lwdmVjKHAsIGIuX2RhdGEpOwogICAgfSAvLyB1c2UgZm9yd2FyZCBzdWJzdGl0dXRpb24gdG8gcmVzb2x2ZSBMICogeSA9IGIKCgogICAgdmFyIHkgPSBsc29sdmUobCwgYik7IC8vIHVzZSBiYWNrd2FyZCBzdWJzdGl0dXRpb24gdG8gcmVzb2x2ZSBVICogeCA9IHkKCiAgICB2YXIgeCA9IHVzb2x2ZSh1LCB5KTsgLy8gYXBwbHkgY29sdW1uIHBlcm11dGF0aW9ucyBpZiBuZWVkZWQgKHggaXMgYSBEZW5zZU1hdHJpeCkKCiAgICBpZiAocSkgewogICAgICB4Ll9kYXRhID0gY3NJcHZlYyhxLCB4Ll9kYXRhKTsKICAgIH0gLy8gcmV0dXJuIHNvbHV0aW9uCgoKICAgIHJldHVybiB4OwogIH0KfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vSGVscC5qcwoKCgoKdmFyIEhlbHBfbmFtZSA9ICdIZWxwJzsKdmFyIEhlbHBfZGVwZW5kZW5jaWVzID0gWydwYXJzZSddOwp2YXIgY3JlYXRlSGVscENsYXNzID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoSGVscF9uYW1lLCBIZWxwX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgcGFyc2UgPSBfcmVmLnBhcnNlOwoKICAvKioKICAgKiBEb2N1bWVudGF0aW9uIG9iamVjdAogICAqIEBwYXJhbSB7T2JqZWN0fSBkb2MgIE9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXM6CiAgICogICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbmFtZQogICAqICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmd9IGNhdGVnb3J5CiAgICogICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gZGVzY3JpcHRpb24KICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nW119IHN5bnRheAogICAqICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmdbXX0gZXhhbXBsZXMKICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nW119IHNlZWFsc28KICAgKiBAY29uc3RydWN0b3IKICAgKi8KICBmdW5jdGlvbiBIZWxwKGRvYykgewogICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEhlbHApKSB7CiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7CiAgICB9CgogICAgaWYgKCFkb2MpIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgImRvYyIgbWlzc2luZycpOwogICAgdGhpcy5kb2MgPSBkb2M7CiAgfQogIC8qKgogICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uCiAgICovCgoKICBIZWxwLnByb3RvdHlwZS50eXBlID0gJ0hlbHAnOwogIEhlbHAucHJvdG90eXBlLmlzSGVscCA9IHRydWU7CiAgLyoqCiAgICogR2VuZXJhdGUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEhlbHAgb2JqZWN0CiAgICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIGEgc3RyaW5nCiAgICogQHByaXZhdGUKICAgKi8KCiAgSGVscC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CiAgICB2YXIgZG9jID0gdGhpcy5kb2MgfHwge307CiAgICB2YXIgZGVzYyA9ICdcbic7CgogICAgaWYgKGRvYy5uYW1lKSB7CiAgICAgIGRlc2MgKz0gJ05hbWU6ICcgKyBkb2MubmFtZSArICdcblxuJzsKICAgIH0KCiAgICBpZiAoZG9jLmNhdGVnb3J5KSB7CiAgICAgIGRlc2MgKz0gJ0NhdGVnb3J5OiAnICsgZG9jLmNhdGVnb3J5ICsgJ1xuXG4nOwogICAgfQoKICAgIGlmIChkb2MuZGVzY3JpcHRpb24pIHsKICAgICAgZGVzYyArPSAnRGVzY3JpcHRpb246XG4gICAgJyArIGRvYy5kZXNjcmlwdGlvbiArICdcblxuJzsKICAgIH0KCiAgICBpZiAoZG9jLnN5bnRheCkgewogICAgICBkZXNjICs9ICdTeW50YXg6XG4gICAgJyArIGRvYy5zeW50YXguam9pbignXG4gICAgJykgKyAnXG5cbic7CiAgICB9CgogICAgaWYgKGRvYy5leGFtcGxlcykgewogICAgICBkZXNjICs9ICdFeGFtcGxlczpcbic7CiAgICAgIHZhciBzY29wZSA9IHt9OwoKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2MuZXhhbXBsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgZXhwciA9IGRvYy5leGFtcGxlc1tpXTsKICAgICAgICBkZXNjICs9ICcgICAgJyArIGV4cHIgKyAnXG4nOwogICAgICAgIHZhciByZXMgPSB2b2lkIDA7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAvLyBub3RlOiByZXMgY2FuIGJlIHVuZGVmaW5lZCB3aGVuIGBleHByYCBpcyBhbiBlbXB0eSBzdHJpbmcKICAgICAgICAgIHJlcyA9IHBhcnNlKGV4cHIpLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgcmVzID0gZTsKICAgICAgICB9CgogICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCAmJiAhT2JqZWN0KGlzWyJzIiAvKiBpc0hlbHAgKi9dKShyZXMpKSB7CiAgICAgICAgICBkZXNjICs9ICcgICAgICAgICcgKyBPYmplY3QodXRpbHNfc3RyaW5nWyJkIiAvKiBmb3JtYXQgKi9dKShyZXMsIHsKICAgICAgICAgICAgcHJlY2lzaW9uOiAxNAogICAgICAgICAgfSkgKyAnXG4nOwogICAgICAgIH0KICAgICAgfQoKICAgICAgZGVzYyArPSAnXG4nOwogICAgfQoKICAgIGlmIChkb2Muc2VlYWxzbyAmJiBkb2Muc2VlYWxzby5sZW5ndGgpIHsKICAgICAgZGVzYyArPSAnU2VlIGFsc286ICcgKyBkb2Muc2VlYWxzby5qb2luKCcsICcpICsgJ1xuJzsKICAgIH0KCiAgICByZXR1cm4gZGVzYzsKICB9OwogIC8qKgogICAqIEV4cG9ydCB0aGUgaGVscCBvYmplY3QgdG8gSlNPTgogICAqLwoKCiAgSGVscC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkgewogICAgdmFyIG9iaiA9IE9iamVjdCh1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSkodGhpcy5kb2MpOwogICAgb2JqLm1hdGhqcyA9ICdIZWxwJzsKICAgIHJldHVybiBvYmo7CiAgfTsKICAvKioKICAgKiBJbnN0YW50aWF0ZSBhIEhlbHAgb2JqZWN0IGZyb20gYSBKU09OIG9iamVjdAogICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uCiAgICogQHJldHVybnMge0hlbHB9IFJldHVybnMgYSBuZXcgSGVscCBvYmplY3QKICAgKi8KCgogIEhlbHAuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikgewogICAgdmFyIGRvYyA9IHt9OwoKICAgIGZvciAodmFyIHByb3AgaW4ganNvbikgewogICAgICBpZiAocHJvcCAhPT0gJ21hdGhqcycpIHsKICAgICAgICAvLyBpZ25vcmUgbWF0aGpzIGZpZWxkCiAgICAgICAgZG9jW3Byb3BdID0ganNvbltwcm9wXTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBuZXcgSGVscChkb2MpOwogIH07CiAgLyoqCiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgSGVscCBvYmplY3QKICAgKi8KCgogIEhlbHAucHJvdG90eXBlLnZhbHVlT2YgPSBIZWxwLnByb3RvdHlwZS50b1N0cmluZzsKICByZXR1cm4gSGVscDsKfSwgewogIGlzQ2xhc3M6IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3R5cGUvY2hhaW4vQ2hhaW4uanMKCgoKCnZhciBDaGFpbl9uYW1lID0gJ0NoYWluJzsKdmFyIENoYWluX2RlcGVuZGVuY2llcyA9IFsnP29uJywgJ21hdGgnXTsKdmFyIGNyZWF0ZUNoYWluQ2xhc3MgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShDaGFpbl9uYW1lLCBDaGFpbl9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIG9uID0gX3JlZi5vbiwKICAgICAgbWF0aCA9IF9yZWYubWF0aDsKCiAgLyoqCiAgICogQGNvbnN0cnVjdG9yIENoYWluCiAgICogV3JhcCBhbnkgdmFsdWUgaW4gYSBjaGFpbiwgYWxsb3dpbmcgdG8gcGVyZm9ybSBjaGFpbmVkIG9wZXJhdGlvbnMgb24KICAgKiB0aGUgdmFsdWUuCiAgICoKICAgKiBBbGwgbWV0aG9kcyBhdmFpbGFibGUgaW4gdGhlIG1hdGguanMgbGlicmFyeSBjYW4gYmUgY2FsbGVkIHVwb24gdGhlIGNoYWluLAogICAqIGFuZCB0aGVuIHdpbGwgYmUgZXZhbHVhdGVkIHdpdGggdGhlIHZhbHVlIGl0c2VsZiBhcyBmaXJzdCBhcmd1bWVudC4KICAgKiBUaGUgY2hhaW4gY2FuIGJlIGNsb3NlZCBieSBleGVjdXRpbmcgY2hhaW4uZG9uZSgpLCB3aGljaCB3aWxsIHJldHVybgogICAqIHRoZSBmaW5hbCB2YWx1ZS4KICAgKgogICAqIFRoZSBDaGFpbiBoYXMgYSBudW1iZXIgb2Ygc3BlY2lhbCBmdW5jdGlvbnM6CiAgICogLSBkb25lKCkgICAgICAgICAgICAgRmluYWxpemUgdGhlIGNoYWluZWQgb3BlcmF0aW9uIGFuZCByZXR1cm4gdGhlCiAgICogICAgICAgICAgICAgICAgICAgICAgY2hhaW4ncyB2YWx1ZS4KICAgKiAtIHZhbHVlT2YoKSAgICAgICAgICBUaGUgc2FtZSBhcyBkb25lKCkKICAgKiAtIHRvU3RyaW5nKCkgICAgICAgICBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjaGFpbidzIHZhbHVlLgogICAqCiAgICogQHBhcmFtIHsqfSBbdmFsdWVdCiAgICovCiAgZnVuY3Rpb24gQ2hhaW4odmFsdWUpIHsKICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDaGFpbikpIHsKICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTsKICAgIH0KCiAgICBpZiAoT2JqZWN0KGlzWyJoIiAvKiBpc0NoYWluICovXSkodmFsdWUpKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZS52YWx1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKICAgIH0KICB9CiAgLyoqCiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb24KICAgKi8KCgogIENoYWluLnByb3RvdHlwZS50eXBlID0gJ0NoYWluJzsKICBDaGFpbi5wcm90b3R5cGUuaXNDaGFpbiA9IHRydWU7CiAgLyoqCiAgICogQ2xvc2UgdGhlIGNoYWluLiBSZXR1cm5zIHRoZSBmaW5hbCB2YWx1ZS4KICAgKiBEb2VzIHRoZSBzYW1lIGFzIG1ldGhvZCB2YWx1ZU9mKCkKICAgKiBAcmV0dXJucyB7Kn0gdmFsdWUKICAgKi8KCiAgQ2hhaW4ucHJvdG90eXBlLmRvbmUgPSBmdW5jdGlvbiAoKSB7CiAgICByZXR1cm4gdGhpcy52YWx1ZTsKICB9OwogIC8qKgogICAqIENsb3NlIHRoZSBjaGFpbi4gUmV0dXJucyB0aGUgZmluYWwgdmFsdWUuCiAgICogRG9lcyB0aGUgc2FtZSBhcyBtZXRob2QgZG9uZSgpCiAgICogQHJldHVybnMgeyp9IHZhbHVlCiAgICovCgoKICBDaGFpbi5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB0aGlzLnZhbHVlOwogIH07CiAgLyoqCiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBpbiB0aGUgY2hhaW4KICAgKiBAcmV0dXJucyB7c3RyaW5nfQogICAqLwoKCiAgQ2hhaW4ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgewogICAgcmV0dXJuIE9iamVjdCh1dGlsc19zdHJpbmdbImQiIC8qIGZvcm1hdCAqL10pKHRoaXMudmFsdWUpOwogIH07CiAgLyoqCiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgY2hhaW4KICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAqLwoKCiAgQ2hhaW4ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB7CiAgICAgIG1hdGhqczogJ0NoYWluJywKICAgICAgdmFsdWU6IHRoaXMudmFsdWUKICAgIH07CiAgfTsKICAvKioKICAgKiBJbnN0YW50aWF0ZSBhIENoYWluIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb24KICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZQogICAqICAgICAgICAgICAgICAgICAgICAgICBgeyJtYXRoanMiOiAiQ2hhaW4iLCB2YWx1ZTogLi4ufWAsCiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbAogICAqIEByZXR1cm5zIHtDaGFpbn0KICAgKi8KCgogIENoYWluLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHsKICAgIHJldHVybiBuZXcgQ2hhaW4oanNvbi52YWx1ZSk7CiAgfTsKICAvKioKICAgKiBDcmVhdGUgYSBwcm94eSBtZXRob2QgZm9yIHRoZSBjaGFpbgogICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICAgICBUaGUgZnVuY3Rpb24gdG8gYmUgcHJveGllZAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgZm4gaXMgbm8gZnVuY3Rpb24sIGl0IGlzIHNpbGVudGx5IGlnbm9yZWQuCiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIGNyZWF0ZVByb3h5KG5hbWUsIGZuKSB7CiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7CiAgICAgIENoYWluLnByb3RvdHlwZVtuYW1lXSA9IGNoYWluaWZ5KGZuKTsKICAgIH0KICB9CiAgLyoqCiAgICogQ3JlYXRlIGEgcHJveHkgbWV0aG9kIGZvciB0aGUgY2hhaW4KICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQogICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVyICAgVGhlIGZ1bmN0aW9uIHJlc29sdmluZyB3aXRoIHRoZQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gdG8gYmUgcHJveGllZAogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBjcmVhdGVMYXp5UHJveHkobmFtZSwgcmVzb2x2ZXIpIHsKICAgIE9iamVjdCh1dGlsc19vYmplY3RbImgiIC8qIGxhenkgKi9dKShDaGFpbi5wcm90b3R5cGUsIG5hbWUsIGZ1bmN0aW9uIG91dGVyUmVzb2x2ZXIoKSB7CiAgICAgIHZhciBmbiA9IHJlc29sdmVyKCk7CgogICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgcmV0dXJuIGNoYWluaWZ5KGZuKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gaWYgbm90IGEgZnVuY3Rpb24sIGlnbm9yZQogICAgfSk7CiAgfQogIC8qKgogICAqIE1ha2UgYSBmdW5jdGlvbiBjaGFpbmFibGUKICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbgogICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBjaGFpbiBmdW5jdGlvbgogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBjaGFpbmlmeShmbikgewogICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIGFyZ3MgPSBbdGhpcy52YWx1ZV07IC8vIGB0aGlzYCB3aWxsIGJlIHRoZSBjb250ZXh0IG9mIGEgQ2hhaW4gaW5zdGFuY2UKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgYXJnc1tpICsgMV0gPSBhcmd1bWVudHNbaV07CiAgICAgIH0KCiAgICAgIHJldHVybiBuZXcgQ2hhaW4oZm4uYXBwbHkoZm4sIGFyZ3MpKTsKICAgIH07CiAgfQogIC8qKgogICAqIENyZWF0ZSBhIHByb3h5IGZvciBhIHNpbmdsZSBtZXRob2QsIG9yIGFuIG9iamVjdCB3aXRoIG11bHRpcGxlIG1ldGhvZHMuCiAgICogRXhhbXBsZSB1c2FnZToKICAgKgogICAqICAgQ2hhaW4uY3JlYXRlUHJveHkoJ2FkZCcsIGZ1bmN0aW9uIGFkZCAoeCwgeSkgey4uLn0pCiAgICogICBDaGFpbi5jcmVhdGVQcm94eSh7CiAgICogICAgIGFkZDogICAgICBmdW5jdGlvbiBhZGQgKHgsIHkpIHsuLi59LAogICAqICAgICBzdWJ0cmFjdDogZnVuY3Rpb24gc3VidHJhY3QgKHgsIHkpIHsuLi59CiAgICogICB9CiAgICoKICAgKiBAcGFyYW0ge3N0cmluZyB8IE9iamVjdH0gYXJnMCAgIEEgbmFtZSAoc3RyaW5nKSwgb3IgYW4gb2JqZWN0IHdpdGgKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9ucwogICAqIEBwYXJhbSB7Kn0gW2FyZzFdICAgICAgICAgICAgICAgQSBmdW5jdGlvbiwgd2hlbiBhcmcwIGlzIGEgbmFtZQogICAqLwoKCiAgQ2hhaW4uY3JlYXRlUHJveHkgPSBmdW5jdGlvbiAoYXJnMCwgYXJnMSkgewogICAgaWYgKHR5cGVvZiBhcmcwID09PSAnc3RyaW5nJykgewogICAgICAvLyBjcmVhdGVQcm94eShuYW1lLCB2YWx1ZSkKICAgICAgY3JlYXRlUHJveHkoYXJnMCwgYXJnMSk7CiAgICB9IGVsc2UgewogICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChfbmFtZSkgewogICAgICAgIGlmIChPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKGFyZzAsIF9uYW1lKSAmJiBleGNsdWRlZE5hbWVzW19uYW1lXSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICBjcmVhdGVMYXp5UHJveHkoX25hbWUsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIGFyZzBbX25hbWVdOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9OwoKICAgICAgLy8gY3JlYXRlUHJveHkodmFsdWVzKQogICAgICBmb3IgKHZhciBfbmFtZSBpbiBhcmcwKSB7CiAgICAgICAgX2xvb3AoX25hbWUpOwogICAgICB9CiAgICB9CiAgfTsKCiAgdmFyIGV4Y2x1ZGVkTmFtZXMgPSB7CiAgICBleHByZXNzaW9uOiB0cnVlLAogICAgZG9jczogdHJ1ZSwKICAgIHR5cGU6IHRydWUsCiAgICBjbGFzc2VzOiB0cnVlLAogICAganNvbjogdHJ1ZSwKICAgIGVycm9yOiB0cnVlLAogICAgaXNDaGFpbjogdHJ1ZSAvLyBjb25mbGljdHMgd2l0aCB0aGUgcHJvcGVydHkgaXNDaGFpbiBvZiBhIENoYWluIGluc3RhbmNlCgogIH07IC8vIGNyZWF0ZSBwcm94eSBmb3IgZXZlcnl0aGluZyB0aGF0IGlzIGluIG1hdGguanMKCiAgQ2hhaW4uY3JlYXRlUHJveHkobWF0aCk7IC8vIHJlZ2lzdGVyIG9uIHRoZSBpbXBvcnQgZXZlbnQsIGF1dG9tYXRpY2FsbHkgYWRkIGEgcHJveHkgZm9yIGV2ZXJ5IGltcG9ydGVkIGZ1bmN0aW9uLgoKICBpZiAob24pIHsKICAgIG9uKCdpbXBvcnQnLCBmdW5jdGlvbiAobmFtZSwgcmVzb2x2ZXIsIHBhdGgpIHsKICAgICAgaWYgKCFwYXRoKSB7CiAgICAgICAgLy8gYW4gaW1wb3J0ZWQgZnVuY3Rpb24gKG5vdCBhIGRhdGEgdHlwZSBvciBzb21ldGhpbmcgc3BlY2lhbCkKICAgICAgICBjcmVhdGVMYXp5UHJveHkobmFtZSwgcmVzb2x2ZXIpOwogICAgICB9CiAgICB9KTsKICB9CgogIHJldHVybiBDaGFpbjsKfSwgewogIGlzQ2xhc3M6IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9iaWdudW1iZXIuanMKdmFyIGJpZ251bWJlckRvY3MgPSB7CiAgbmFtZTogJ2JpZ251bWJlcicsCiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLAogIHN5bnRheDogWydiaWdudW1iZXIoeCknXSwKICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIGJpZyBudW1iZXIgZnJvbSBhIG51bWJlciBvciBzdHJpbmcuJywKICBleGFtcGxlczogWycwLjEgKyAwLjInLCAnYmlnbnVtYmVyKDAuMSkgKyBiaWdudW1iZXIoMC4yKScsICdiaWdudW1iZXIoIjcuMiIpJywgJ2JpZ251bWJlcigiNy4yZTUwMCIpJywgJ2JpZ251bWJlcihbMC4xLCAwLjIsIDAuM10pJ10sCiAgc2VlYWxzbzogWydib29sZWFuJywgJ2NvbXBsZXgnLCAnZnJhY3Rpb24nLCAnaW5kZXgnLCAnbWF0cml4JywgJ3N0cmluZycsICd1bml0J10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvdHlwZU9mLmpzCnZhciB0eXBlT2ZEb2NzID0gewogIG5hbWU6ICd0eXBlT2YnLAogIGNhdGVnb3J5OiAnVXRpbHMnLAogIHN5bnRheDogWyd0eXBlT2YoeCknXSwKICBkZXNjcmlwdGlvbjogJ0dldCB0aGUgdHlwZSBvZiBhIHZhcmlhYmxlLicsCiAgZXhhbXBsZXM6IFsndHlwZU9mKDMuNSknLCAndHlwZU9mKDIgLSA0aSknLCAndHlwZU9mKDQ1IGRlZyknLCAndHlwZU9mKCJoZWxsbyB3b3JsZCIpJ10sCiAgc2VlYWxzbzogWydnZXRNYXRyaXhEYXRhVHlwZSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3V0aWxzL2lzWmVyby5qcwp2YXIgaXNaZXJvRG9jcyA9IHsKICBuYW1lOiAnaXNaZXJvJywKICBjYXRlZ29yeTogJ1V0aWxzJywKICBzeW50YXg6IFsnaXNaZXJvKHgpJ10sCiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyB6ZXJvLicsCiAgZXhhbXBsZXM6IFsnaXNaZXJvKDIpJywgJ2lzWmVybygwKScsICdpc1plcm8oLTQpJywgJ2lzWmVybyhbMywgMCwgLTIsIDBdKSddLAogIHNlZWFsc286IFsnaXNJbnRlZ2VyJywgJ2lzTnVtZXJpYycsICdpc05lZ2F0aXZlJywgJ2lzUG9zaXRpdmUnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9pc1ByaW1lLmpzCnZhciBpc1ByaW1lRG9jcyA9IHsKICBuYW1lOiAnaXNQcmltZScsCiAgY2F0ZWdvcnk6ICdVdGlscycsCiAgc3ludGF4OiBbJ2lzUHJpbWUoeCknXSwKICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIHByaW1lOiBoYXMgbm8gZGl2aXNvcnMgb3RoZXIgdGhhbiBpdHNlbGYgYW5kIG9uZS4nLAogIGV4YW1wbGVzOiBbJ2lzUHJpbWUoMyknLCAnaXNQcmltZSgtMiknLCAnaXNQcmltZShbMiwgMTcsIDEwMF0pJ10sCiAgc2VlYWxzbzogWydpc0ludGVnZXInLCAnaXNOdW1lcmljJywgJ2lzTmVnYXRpdmUnLCAnaXNaZXJvJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNQb3NpdGl2ZS5qcwp2YXIgaXNQb3NpdGl2ZURvY3MgPSB7CiAgbmFtZTogJ2lzUG9zaXRpdmUnLAogIGNhdGVnb3J5OiAnVXRpbHMnLAogIHN5bnRheDogWydpc1Bvc2l0aXZlKHgpJ10sCiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBwb3NpdGl2ZTogbGFyZ2VyIHRoYW4gemVyby4nLAogIGV4YW1wbGVzOiBbJ2lzUG9zaXRpdmUoMiknLCAnaXNQb3NpdGl2ZSgwKScsICdpc1Bvc2l0aXZlKC00KScsICdpc1Bvc2l0aXZlKFszLCAwLjUsIC0yXSknXSwKICBzZWVhbHNvOiBbJ2lzSW50ZWdlcicsICdpc051bWVyaWMnLCAnaXNOZWdhdGl2ZScsICdpc1plcm8nXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9pc051bWVyaWMuanMKdmFyIGlzTnVtZXJpY0RvY3MgPSB7CiAgbmFtZTogJ2lzTnVtZXJpYycsCiAgY2F0ZWdvcnk6ICdVdGlscycsCiAgc3ludGF4OiBbJ2lzTnVtZXJpYyh4KSddLAogIGRlc2NyaXB0aW9uOiAnVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYSBudW1lcmljIHZhbHVlLiAnICsgJ1JldHVybnMgdHJ1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhIG51bWJlciwgQmlnTnVtYmVyLCBGcmFjdGlvbiwgb3IgYm9vbGVhbi4nLAogIGV4YW1wbGVzOiBbJ2lzTnVtZXJpYygyKScsICdpc051bWVyaWMoIjIiKScsICdoYXNOdW1lcmljVmFsdWUoIjIiKScsICdpc051bWVyaWMoMCknLCAnaXNOdW1lcmljKGJpZ251bWJlcig1MDApKScsICdpc051bWVyaWMoZnJhY3Rpb24oMC4xMjUpKScsICdpc051bWVyaWMoMiArIDNpKScsICdpc051bWVyaWMoWzIuMywgImZvbyIsIGZhbHNlXSknXSwKICBzZWVhbHNvOiBbJ2lzSW50ZWdlcicsICdpc1plcm8nLCAnaXNOZWdhdGl2ZScsICdpc1Bvc2l0aXZlJywgJ2lzTmFOJywgJ2hhc051bWVyaWNWYWx1ZSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3V0aWxzL2hhc051bWVyaWNWYWx1ZS5qcwp2YXIgaGFzTnVtZXJpY1ZhbHVlRG9jcyA9IHsKICBuYW1lOiAnaGFzTnVtZXJpY1ZhbHVlJywKICBjYXRlZ29yeTogJ1V0aWxzJywKICBzeW50YXg6IFsnaGFzTnVtZXJpY1ZhbHVlKHgpJ10sCiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBhbiBudW1lcmljIHZhbHVlLiAnICsgJ0luIGNhc2Ugb2YgYSBzdHJpbmcsIHRydWUgaXMgcmV0dXJuZWQgaWYgdGhlIHN0cmluZyBjb250YWlucyBhIG51bWVyaWMgdmFsdWUuJywKICBleGFtcGxlczogWydoYXNOdW1lcmljVmFsdWUoMiknLCAnaGFzTnVtZXJpY1ZhbHVlKCIyIiknLCAnaXNOdW1lcmljKCIyIiknLCAnaGFzTnVtZXJpY1ZhbHVlKDApJywgJ2hhc051bWVyaWNWYWx1ZShiaWdudW1iZXIoNTAwKSknLCAnaGFzTnVtZXJpY1ZhbHVlKGZyYWN0aW9uKDAuMTI1KSknLCAnaGFzTnVtZXJpY1ZhbHVlKDIgKyAzaSknLCAnaGFzTnVtZXJpY1ZhbHVlKFsyLjMsICJmb28iLCBmYWxzZV0pJ10sCiAgc2VlYWxzbzogWydpc0ludGVnZXInLCAnaXNaZXJvJywgJ2lzTmVnYXRpdmUnLCAnaXNQb3NpdGl2ZScsICdpc05hTicsICdpc051bWVyaWMnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9pc05lZ2F0aXZlLmpzCnZhciBpc05lZ2F0aXZlRG9jcyA9IHsKICBuYW1lOiAnaXNOZWdhdGl2ZScsCiAgY2F0ZWdvcnk6ICdVdGlscycsCiAgc3ludGF4OiBbJ2lzTmVnYXRpdmUoeCknXSwKICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIG5lZ2F0aXZlOiBzbWFsbGVyIHRoYW4gemVyby4nLAogIGV4YW1wbGVzOiBbJ2lzTmVnYXRpdmUoMiknLCAnaXNOZWdhdGl2ZSgwKScsICdpc05lZ2F0aXZlKC00KScsICdpc05lZ2F0aXZlKFszLCAwLjUsIC0yXSknXSwKICBzZWVhbHNvOiBbJ2lzSW50ZWdlcicsICdpc051bWVyaWMnLCAnaXNQb3NpdGl2ZScsICdpc1plcm8nXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9pc0ludGVnZXIuanMKdmFyIGlzSW50ZWdlckRvY3MgPSB7CiAgbmFtZTogJ2lzSW50ZWdlcicsCiAgY2F0ZWdvcnk6ICdVdGlscycsCiAgc3ludGF4OiBbJ2lzSW50ZWdlcih4KSddLAogIGRlc2NyaXB0aW9uOiAnVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYW4gaW50ZWdlciBudW1iZXIuJywKICBleGFtcGxlczogWydpc0ludGVnZXIoMiknLCAnaXNJbnRlZ2VyKDMuNSknLCAnaXNJbnRlZ2VyKFszLCAwLjUsIC0yXSknXSwKICBzZWVhbHNvOiBbJ2lzTmVnYXRpdmUnLCAnaXNOdW1lcmljJywgJ2lzUG9zaXRpdmUnLCAnaXNaZXJvJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNOYU4uanMKdmFyIGlzTmFORG9jcyA9IHsKICBuYW1lOiAnaXNOYU4nLAogIGNhdGVnb3J5OiAnVXRpbHMnLAogIHN5bnRheDogWydpc05hTih4KSddLAogIGRlc2NyaXB0aW9uOiAnVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgTmFOIChub3QgYSBudW1iZXIpJywKICBleGFtcGxlczogWydpc05hTigyKScsICdpc05hTigwIC8gMCknLCAnaXNOYU4oTmFOKScsICdpc05hTihJbmZpbml0eSknXSwKICBzZWVhbHNvOiBbJ2lzTmVnYXRpdmUnLCAnaXNOdW1lcmljJywgJ2lzUG9zaXRpdmUnLCAnaXNaZXJvJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvZm9ybWF0LmpzCnZhciBmb3JtYXREb2NzID0gewogIG5hbWU6ICdmb3JtYXQnLAogIGNhdGVnb3J5OiAnVXRpbHMnLAogIHN5bnRheDogWydmb3JtYXQodmFsdWUpJywgJ2Zvcm1hdCh2YWx1ZSwgcHJlY2lzaW9uKSddLAogIGRlc2NyaXB0aW9uOiAnRm9ybWF0IGEgdmFsdWUgb2YgYW55IHR5cGUgYXMgc3RyaW5nLicsCiAgZXhhbXBsZXM6IFsnZm9ybWF0KDIuMyknLCAnZm9ybWF0KDMgLSA0aSknLCAnZm9ybWF0KFtdKScsICdmb3JtYXQocGksIDMpJ10sCiAgc2VlYWxzbzogWydwcmludCddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3V0aWxzL2Nsb25lLmpzCnZhciBjbG9uZURvY3MgPSB7CiAgbmFtZTogJ2Nsb25lJywKICBjYXRlZ29yeTogJ1V0aWxzJywKICBzeW50YXg6IFsnY2xvbmUoeCknXSwKICBkZXNjcmlwdGlvbjogJ0Nsb25lIGEgdmFyaWFibGUuIENyZWF0ZXMgYSBjb3B5IG9mIHByaW1pdGl2ZSB2YXJpYWJsZXMsYW5kIGEgZGVlcCBjb3B5IG9mIG1hdHJpY2VzJywKICBleGFtcGxlczogWydjbG9uZSgzLjUpJywgJ2Nsb25lKDIgLSA0aSknLCAnY2xvbmUoNDUgZGVnKScsICdjbG9uZShbMSwgMjsgMywgNF0pJywgJ2Nsb25lKCJoZWxsbyB3b3JsZCIpJ10sCiAgc2VlYWxzbzogW10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdW5pdHMvdG8uanMKdmFyIHRvRG9jcyA9IHsKICBuYW1lOiAndG8nLAogIGNhdGVnb3J5OiAnVW5pdHMnLAogIHN5bnRheDogWyd4IHRvIHVuaXQnLCAndG8oeCwgdW5pdCknXSwKICBkZXNjcmlwdGlvbjogJ0NoYW5nZSB0aGUgdW5pdCBvZiBhIHZhbHVlLicsCiAgZXhhbXBsZXM6IFsnNSBpbmNoIHRvIGNtJywgJzMuMmtnIHRvIGcnLCAnMTYgYnl0ZXMgaW4gYml0cyddLAogIHNlZWFsc286IFtdCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS90YW5oLmpzCnZhciB0YW5oRG9jcyA9IHsKICBuYW1lOiAndGFuaCcsCiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLAogIHN5bnRheDogWyd0YW5oKHgpJ10sCiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgeCBpbiByYWRpYW5zLicsCiAgZXhhbXBsZXM6IFsndGFuaCgwLjUpJywgJ3NpbmgoMC41KSAvIGNvc2goMC41KSddLAogIHNlZWFsc286IFsnc2luaCcsICdjb3NoJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3Rhbi5qcwp2YXIgdGFuRG9jcyA9IHsKICBuYW1lOiAndGFuJywKICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsCiAgc3ludGF4OiBbJ3Rhbih4KSddLAogIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgdGFuZ2VudCBvZiB4IGluIHJhZGlhbnMuJywKICBleGFtcGxlczogWyd0YW4oMC41KScsICdzaW4oMC41KSAvIGNvcygwLjUpJywgJ3RhbihwaSAvIDQpJywgJ3Rhbig0NSBkZWcpJ10sCiAgc2VlYWxzbzogWydhdGFuJywgJ3NpbicsICdjb3MnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2luaC5qcwp2YXIgc2luaERvY3MgPSB7CiAgbmFtZTogJ3NpbmgnLAogIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JywKICBzeW50YXg6IFsnc2luaCh4KSddLAogIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgaHlwZXJib2xpYyBzaW5lIG9mIHggaW4gcmFkaWFucy4nLAogIGV4YW1wbGVzOiBbJ3NpbmgoMC41KSddLAogIHNlZWFsc286IFsnY29zaCcsICd0YW5oJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY2guanMKdmFyIHNlY2hEb2NzID0gewogIG5hbWU6ICdzZWNoJywKICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsCiAgc3ludGF4OiBbJ3NlY2goeCknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgc2VjYW50IG9mIHggaW4gcmFkaWFucy4gRGVmaW5lZCBhcyAxL2Nvc2goeCknLAogIGV4YW1wbGVzOiBbJ3NlY2goMiknLCAnMSAvIGNvc2goMiknXSwKICBzZWVhbHNvOiBbJ2NvdGgnLCAnY3NjaCcsICdjb3NoJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlYy5qcwp2YXIgc2VjRG9jcyA9IHsKICBuYW1lOiAnc2VjJywKICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsCiAgc3ludGF4OiBbJ3NlYyh4KSddLAogIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgc2VjYW50IG9mIHggaW4gcmFkaWFucy4gRGVmaW5lZCBhcyAxL2Nvcyh4KScsCiAgZXhhbXBsZXM6IFsnc2VjKDIpJywgJzEgLyBjb3MoMiknXSwKICBzZWVhbHNvOiBbJ2NvdCcsICdjc2MnLCAnY29zJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY2guanMKdmFyIGNzY2hEb2NzID0gewogIG5hbWU6ICdjc2NoJywKICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsCiAgc3ludGF4OiBbJ2NzY2goeCknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgY29zZWNhbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvc2luaCh4KScsCiAgZXhhbXBsZXM6IFsnY3NjaCgyKScsICcxIC8gc2luaCgyKSddLAogIHNlZWFsc286IFsnc2VjaCcsICdjb3RoJywgJ3NpbmgnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY3NjLmpzCnZhciBjc2NEb2NzID0gewogIG5hbWU6ICdjc2MnLAogIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JywKICBzeW50YXg6IFsnY3NjKHgpJ10sCiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBjb3NlY2FudCBvZiB4IGluIHJhZGlhbnMuIERlZmluZWQgYXMgMS9zaW4oeCknLAogIGV4YW1wbGVzOiBbJ2NzYygyKScsICcxIC8gc2luKDIpJ10sCiAgc2VlYWxzbzogWydzZWMnLCAnY290JywgJ3NpbiddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3RoLmpzCnZhciBjb3RoRG9jcyA9IHsKICBuYW1lOiAnY290aCcsCiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLAogIHN5bnRheDogWydjb3RoKHgpJ10sCiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBoeXBlcmJvbGljIGNvdGFuZ2VudCBvZiB4IGluIHJhZGlhbnMuJywKICBleGFtcGxlczogWydjb3RoKDIpJywgJzEgLyB0YW5oKDIpJ10sCiAgc2VlYWxzbzogWydzZWNoJywgJ2NzY2gnLCAndGFuaCddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3QuanMKdmFyIGNvdERvY3MgPSB7CiAgbmFtZTogJ2NvdCcsCiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLAogIHN5bnRheDogWydjb3QoeCknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGNvdGFuZ2VudCBvZiB4IGluIHJhZGlhbnMuIERlZmluZWQgYXMgMS90YW4oeCknLAogIGV4YW1wbGVzOiBbJ2NvdCgyKScsICcxIC8gdGFuKDIpJ10sCiAgc2VlYWxzbzogWydzZWMnLCAnY3NjJywgJ3RhbiddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3NoLmpzCnZhciBjb3NoRG9jcyA9IHsKICBuYW1lOiAnY29zaCcsCiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLAogIHN5bnRheDogWydjb3NoKHgpJ10sCiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiB4IGluIHJhZGlhbnMuJywKICBleGFtcGxlczogWydjb3NoKDAuNSknXSwKICBzZWVhbHNvOiBbJ3NpbmgnLCAndGFuaCcsICdjb3RoJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvcy5qcwp2YXIgY29zRG9jcyA9IHsKICBuYW1lOiAnY29zJywKICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsCiAgc3ludGF4OiBbJ2Nvcyh4KSddLAogIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY29zaW5lIG9mIHggaW4gcmFkaWFucy4nLAogIGV4YW1wbGVzOiBbJ2NvcygyKScsICdjb3MocGkgLyA0KSBeIDInLCAnY29zKDE4MCBkZWcpJywgJ2Nvcyg2MCBkZWcpJywgJ3NpbigwLjIpXjIgKyBjb3MoMC4yKV4yJ10sCiAgc2VlYWxzbzogWydhY29zJywgJ3NpbicsICd0YW4nXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbjIuanMKdmFyIGF0YW4yRG9jcyA9IHsKICBuYW1lOiAnYXRhbjInLAogIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JywKICBzeW50YXg6IFsnYXRhbjIoeSwgeCknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXB1dGVzIHRoZSBwcmluY2lwYWwgdmFsdWUgb2YgdGhlIGFyYyB0YW5nZW50IG9mIHkveCBpbiByYWRpYW5zLicsCiAgZXhhbXBsZXM6IFsnYXRhbjIoMiwgMikgLyBwaScsICdhbmdsZSA9IDYwIGRlZyBpbiByYWQnLCAneCA9IGNvcyhhbmdsZSknLCAneSA9IHNpbihhbmdsZSknLCAnYXRhbjIoeSwgeCknXSwKICBzZWVhbHNvOiBbJ3NpbicsICdjb3MnLCAndGFuJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW5oLmpzCnZhciBhdGFuaERvY3MgPSB7CiAgbmFtZTogJ2F0YW5oJywKICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsCiAgc3ludGF4OiBbJ2F0YW5oKHgpJ10sCiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjdGFuZ2VudCBvZiBhIHZhbHVlLCBkZWZpbmVkIGFzIGBhdGFuaCh4KSA9IGxuKCgxICsgeCkvKDEgLSB4KSkgLyAyYC4nLAogIGV4YW1wbGVzOiBbJ2F0YW5oKDAuNSknXSwKICBzZWVhbHNvOiBbJ2Fjb3NoJywgJ2FzaW5oJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW4uanMKdmFyIGF0YW5Eb2NzID0gewogIG5hbWU6ICdhdGFuJywKICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsCiAgc3ludGF4OiBbJ2F0YW4oeCknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGludmVyc2UgdGFuZ2VudCBvZiBhIHZhbHVlIGluIHJhZGlhbnMuJywKICBleGFtcGxlczogWydhdGFuKDAuNSknLCAnYXRhbih0YW4oMC41KSknXSwKICBzZWVhbHNvOiBbJ3RhbicsICdhY29zJywgJ2FzaW4nXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNpbmguanMKdmFyIGFzaW5oRG9jcyA9IHsKICBuYW1lOiAnYXNpbmgnLAogIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JywKICBzeW50YXg6IFsnYXNpbmgoeCknXSwKICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBhcmNzaW5lIG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGFzaW5oKHgpID0gbG4oeCArIHNxcnQoeF4yICsgMSkpYC4nLAogIGV4YW1wbGVzOiBbJ2FzaW5oKDAuNSknXSwKICBzZWVhbHNvOiBbJ2Fjb3NoJywgJ2F0YW5oJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW4uanMKdmFyIGFzaW5Eb2NzID0gewogIG5hbWU6ICdhc2luJywKICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsCiAgc3ludGF4OiBbJ2FzaW4oeCknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGludmVyc2Ugc2luZSBvZiBhIHZhbHVlIGluIHJhZGlhbnMuJywKICBleGFtcGxlczogWydhc2luKDAuNSknLCAnYXNpbihzaW4oMC41KSknXSwKICBzZWVhbHNvOiBbJ3NpbicsICdhY29zJywgJ2F0YW4nXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNlY2guanMKdmFyIGFzZWNoRG9jcyA9IHsKICBuYW1lOiAnYXNlY2gnLAogIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JywKICBzeW50YXg6IFsnYXNlY2goeCknXSwKICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgaW52ZXJzZSBzZWNhbnQgb2YgYSB2YWx1ZS4nLAogIGV4YW1wbGVzOiBbJ2FzZWNoKDAuNSknXSwKICBzZWVhbHNvOiBbJ2Fjc2NoJywgJ2Fjb3RoJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzZWMuanMKdmFyIGFzZWNEb2NzID0gewogIG5hbWU6ICdhc2VjJywKICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsCiAgc3ludGF4OiBbJ2FzZWMoeCknXSwKICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgaW52ZXJzZSBzZWNhbnQgb2YgYSB2YWx1ZS4nLAogIGV4YW1wbGVzOiBbJ2FzZWMoMC41KScsICdhc2VjKHNlYygwLjUpKScsICdhc2VjKDIpJ10sCiAgc2VlYWxzbzogWydhY29zJywgJ2Fjb3QnLCAnYWNzYyddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY3NjaC5qcwp2YXIgYWNzY2hEb2NzID0gewogIG5hbWU6ICdhY3NjaCcsCiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLAogIHN5bnRheDogWydhY3NjaCh4KSddLAogIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2Nvc2VjYW50IG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGFjc2NoKHgpID0gbG4oMS94ICsgc3FydCgxL3heMiArIDEpKWAuJywKICBleGFtcGxlczogWydhY3NjaCgwLjUpJ10sCiAgc2VlYWxzbzogWydhc2VjaCcsICdhY290aCddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY3NjLmpzCnZhciBhY3NjRG9jcyA9IHsKICBuYW1lOiAnYWNzYycsCiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLAogIHN5bnRheDogWydhY3NjKHgpJ10sCiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGludmVyc2UgY290YW5nZW50IG9mIGEgdmFsdWUuJywKICBleGFtcGxlczogWydhY3NjKDIpJywgJ2Fjc2MoY3NjKDAuNSkpJywgJ2Fjc2MoMC41KSddLAogIHNlZWFsc286IFsnY3NjJywgJ2FzaW4nLCAnYXNlYyddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY290aC5qcwp2YXIgYWNvdGhEb2NzID0gewogIG5hbWU6ICdhY290aCcsCiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLAogIHN5bnRheDogWydhY290aCh4KSddLAogIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2NvdGFuZ2VudCBvZiBhIHZhbHVlLCBkZWZpbmVkIGFzIGBhY290aCh4KSA9IChsbigoeCsxKS94KSArIGxuKHgvKHgtMSkpKSAvIDJgLicsCiAgZXhhbXBsZXM6IFsnYWNvdGgoMiknLCAnYWNvdGgoMC41KSddLAogIHNlZWFsc286IFsnYWNzY2gnLCAnYXNlY2gnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvdC5qcwp2YXIgYWNvdERvY3MgPSB7CiAgbmFtZTogJ2Fjb3QnLAogIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JywKICBzeW50YXg6IFsnYWNvdCh4KSddLAogIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIGNvdGFuZ2VudCBvZiBhIHZhbHVlLicsCiAgZXhhbXBsZXM6IFsnYWNvdCgwLjUpJywgJ2Fjb3QoY290KDAuNSkpJywgJ2Fjb3QoMiknXSwKICBzZWVhbHNvOiBbJ2NvdCcsICdhdGFuJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3NoLmpzCnZhciBhY29zaERvY3MgPSB7CiAgbmFtZTogJ2Fjb3NoJywKICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsCiAgc3ludGF4OiBbJ2Fjb3NoKHgpJ10sCiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY29zIG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGFjb3NoKHgpID0gbG4oc3FydCh4XjIgLSAxKSArIHgpYC4nLAogIGV4YW1wbGVzOiBbJ2Fjb3NoKDEuNSknXSwKICBzZWVhbHNvOiBbJ2Nvc2gnLCAnYXNpbmgnLCAnYXRhbmgnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvcy5qcwp2YXIgYWNvc0RvY3MgPSB7CiAgbmFtZTogJ2Fjb3MnLAogIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JywKICBzeW50YXg6IFsnYWNvcyh4KSddLAogIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgaW52ZXJzZSBjb3NpbmUgb2YgYSB2YWx1ZSBpbiByYWRpYW5zLicsCiAgZXhhbXBsZXM6IFsnYWNvcygwLjUpJywgJ2Fjb3MoY29zKDIuMykpJ10sCiAgc2VlYWxzbzogWydjb3MnLCAnYXRhbicsICdhc2luJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc3RhdGlzdGljcy9zdW0uanMKdmFyIHN1bURvY3MgPSB7CiAgbmFtZTogJ3N1bScsCiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJywKICBzeW50YXg6IFsnc3VtKGEsIGIsIGMsIC4uLiknLCAnc3VtKEEpJ10sCiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBzdW0gb2YgYWxsIHZhbHVlcy4nLAogIGV4YW1wbGVzOiBbJ3N1bSgyLCAzLCA0LCAxKScsICdzdW0oWzIsIDMsIDQsIDFdKScsICdzdW0oWzIsIDU7IDQsIDNdKSddLAogIHNlZWFsc286IFsnbWF4JywgJ21lYW4nLCAnbWVkaWFuJywgJ21pbicsICdwcm9kJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3N0ZC5qcwp2YXIgc3RkRG9jcyA9IHsKICBuYW1lOiAnc3RkJywKICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLAogIHN5bnRheDogWydzdGQoYSwgYiwgYywgLi4uKScsICdzdGQoQSknLCAnc3RkKEEsIG5vcm1hbGl6YXRpb24pJ10sCiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgYWxsIHZhbHVlcywgZGVmaW5lZCBhcyBzdGQoQSkgPSBzcXJ0KHZhcmlhbmNlKEEpKS4gT3B0aW9uYWwgcGFyYW1ldGVyIG5vcm1hbGl6YXRpb24gY2FuIGJlICJ1bmJpYXNlZCIgKGRlZmF1bHQpLCAidW5jb3JyZWN0ZWQiLCBvciAiYmlhc2VkIi4nLAogIGV4YW1wbGVzOiBbJ3N0ZCgyLCA0LCA2KScsICdzdGQoWzIsIDQsIDYsIDhdKScsICdzdGQoWzIsIDQsIDYsIDhdLCAidW5jb3JyZWN0ZWQiKScsICdzdGQoWzIsIDQsIDYsIDhdLCAiYmlhc2VkIiknLCAnc3RkKFsxLCAyLCAzOyA0LCA1LCA2XSknXSwKICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21pbicsICdtZWRpYW4nLCAncHJvZCcsICdzdW0nLCAndmFyaWFuY2UnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3F1YW50aWxlU2VxLmpzCnZhciBxdWFudGlsZVNlcURvY3MgPSB7CiAgbmFtZTogJ3F1YW50aWxlU2VxJywKICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLAogIHN5bnRheDogWydxdWFudGlsZVNlcShBLCBwcm9iWywgc29ydGVkXSknLCAncXVhbnRpbGVTZXEoQSwgW3Byb2IxLCBwcm9iMiwgLi4uXVssIHNvcnRlZF0pJywgJ3F1YW50aWxlU2VxKEEsIE5bLCBzb3J0ZWRdKSddLAogIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgcHJvYiBvcmRlciBxdWFudGlsZSBvZiBhIG1hdHJpeCBvciBhIGxpc3Qgd2l0aCB2YWx1ZXMuIFRoZSBzZXF1ZW5jZSBpcyBzb3J0ZWQgYW5kIHRoZSBtaWRkbGUgdmFsdWUgaXMgcmV0dXJuZWQuIFN1cHBvcnRlZCB0eXBlcyBvZiBzZXF1ZW5jZSB2YWx1ZXMgYXJlOiBOdW1iZXIsIEJpZ051bWJlciwgVW5pdCBTdXBwb3J0ZWQgdHlwZXMgb2YgcHJvYmFibGl0eSBhcmU6IE51bWJlciwgQmlnTnVtYmVyLiBcblxuSW4gY2FzZSBvZiBhIChtdWx0aSBkaW1lbnNpb25hbCkgYXJyYXkgb3IgbWF0cml4LCB0aGUgcHJvYiBvcmRlciBxdWFudGlsZSBvZiBhbGwgZWxlbWVudHMgd2lsbCBiZSBjYWxjdWxhdGVkLicsCiAgZXhhbXBsZXM6IFsncXVhbnRpbGVTZXEoWzMsIC0xLCA1LCA3XSwgMC41KScsICdxdWFudGlsZVNlcShbMywgLTEsIDUsIDddLCBbMS8zLCAyLzNdKScsICdxdWFudGlsZVNlcShbMywgLTEsIDUsIDddLCAyKScsICdxdWFudGlsZVNlcShbLTEsIDMsIDUsIDddLCAwLjUsIHRydWUpJ10sCiAgc2VlYWxzbzogWydtZWFuJywgJ21lZGlhbicsICdtaW4nLCAnbWF4JywgJ3Byb2QnLCAnc3RkJywgJ3N1bScsICd2YXJpYW5jZSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvcHJvZC5qcwp2YXIgcHJvZERvY3MgPSB7CiAgbmFtZTogJ3Byb2QnLAogIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsCiAgc3ludGF4OiBbJ3Byb2QoYSwgYiwgYywgLi4uKScsICdwcm9kKEEpJ10sCiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBwcm9kdWN0IG9mIGFsbCB2YWx1ZXMuJywKICBleGFtcGxlczogWydwcm9kKDIsIDMsIDQpJywgJ3Byb2QoWzIsIDMsIDRdKScsICdwcm9kKFsyLCA1OyA0LCAzXSknXSwKICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21pbicsICdtZWRpYW4nLCAnbWluJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL21vZGUuanMKdmFyIG1vZGVEb2NzID0gewogIG5hbWU6ICdtb2RlJywKICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLAogIHN5bnRheDogWydtb2RlKGEsIGIsIGMsIC4uLiknLCAnbW9kZShBKScsICdtb2RlKEEsIGEsIGIsIEIsIGMsIC4uLiknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXB1dGVzIHRoZSBtb2RlIG9mIGFsbCB2YWx1ZXMgYXMgYW4gYXJyYXkuIEluIGNhc2UgbW9kZSBiZWluZyBtb3JlIHRoYW4gb25lLCBtdWx0aXBsZSB2YWx1ZXMgYXJlIHJldHVybmVkIGluIGFuIGFycmF5LicsCiAgZXhhbXBsZXM6IFsnbW9kZSgyLCAxLCA0LCAzLCAxKScsICdtb2RlKFsxLCAyLjcsIDMuMiwgNCwgMi43XSknLCAnbW9kZSgxLCA0LCA2LCAxLCA2KSddLAogIHNlZWFsc286IFsnbWF4JywgJ21lYW4nLCAnbWluJywgJ21lZGlhbicsICdwcm9kJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL21pbi5qcwp2YXIgbWluRG9jcyA9IHsKICBuYW1lOiAnbWluJywKICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLAogIHN5bnRheDogWydtaW4oYSwgYiwgYywgLi4uKScsICdtaW4oQSknLCAnbWluKEEsIGRpbSknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIG1pbmltdW0gdmFsdWUgb2YgYSBsaXN0IG9mIHZhbHVlcy4nLAogIGV4YW1wbGVzOiBbJ21pbigyLCAzLCA0LCAxKScsICdtaW4oWzIsIDMsIDQsIDFdKScsICdtaW4oWzIsIDU7IDQsIDNdKScsICdtaW4oWzIsIDU7IDQsIDNdLCAxKScsICdtaW4oWzIsIDU7IDQsIDNdLCAyKScsICdtaW4oMi43LCA3LjEsIC00LjUsIDIuMCwgNC4xKScsICdtYXgoMi43LCA3LjEsIC00LjUsIDIuMCwgNC4xKSddLAogIHNlZWFsc286IFsnbWF4JywgJ21lYW4nLCAnbWVkaWFuJywgJ3Byb2QnLCAnc3RkJywgJ3N1bScsICd2YXJpYW5jZSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWVkaWFuLmpzCnZhciBtZWRpYW5Eb2NzID0gewogIG5hbWU6ICdtZWRpYW4nLAogIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsCiAgc3ludGF4OiBbJ21lZGlhbihhLCBiLCBjLCAuLi4pJywgJ21lZGlhbihBKSddLAogIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgbWVkaWFuIG9mIGFsbCB2YWx1ZXMuIFRoZSB2YWx1ZXMgYXJlIHNvcnRlZCBhbmQgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC4gSW4gY2FzZSBvZiBhbiBldmVuIG51bWJlciBvZiB2YWx1ZXMsIHRoZSBhdmVyYWdlIG9mIHRoZSB0d28gbWlkZGxlIHZhbHVlcyBpcyByZXR1cm5lZC4nLAogIGV4YW1wbGVzOiBbJ21lZGlhbig1LCAyLCA3KScsICdtZWRpYW4oWzMsIC0xLCA1LCA3XSknXSwKICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21pbicsICdwcm9kJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnLCAncXVhbnRpbGVTZXEnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL21lYW4uanMKdmFyIG1lYW5Eb2NzID0gewogIG5hbWU6ICdtZWFuJywKICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLAogIHN5bnRheDogWydtZWFuKGEsIGIsIGMsIC4uLiknLCAnbWVhbihBKScsICdtZWFuKEEsIGRpbSknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGFyaXRobWV0aWMgbWVhbiBvZiBhIGxpc3Qgb2YgdmFsdWVzLicsCiAgZXhhbXBsZXM6IFsnbWVhbigyLCAzLCA0LCAxKScsICdtZWFuKFsyLCAzLCA0LCAxXSknLCAnbWVhbihbMiwgNTsgNCwgM10pJywgJ21lYW4oWzIsIDU7IDQsIDNdLCAxKScsICdtZWFuKFsyLCA1OyA0LCAzXSwgMiknLCAnbWVhbihbMS4wLCAyLjcsIDMuMiwgNC4wXSknXSwKICBzZWVhbHNvOiBbJ21heCcsICdtZWRpYW4nLCAnbWluJywgJ3Byb2QnLCAnc3RkJywgJ3N1bScsICd2YXJpYW5jZSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWF4LmpzCnZhciBtYXhEb2NzID0gewogIG5hbWU6ICdtYXgnLAogIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsCiAgc3ludGF4OiBbJ21heChhLCBiLCBjLCAuLi4pJywgJ21heChBKScsICdtYXgoQSwgZGltKSddLAogIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgbWF4aW11bSB2YWx1ZSBvZiBhIGxpc3Qgb2YgdmFsdWVzLicsCiAgZXhhbXBsZXM6IFsnbWF4KDIsIDMsIDQsIDEpJywgJ21heChbMiwgMywgNCwgMV0pJywgJ21heChbMiwgNTsgNCwgM10pJywgJ21heChbMiwgNTsgNCwgM10sIDEpJywgJ21heChbMiwgNTsgNCwgM10sIDIpJywgJ21heCgyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpJywgJ21pbigyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpJ10sCiAgc2VlYWxzbzogWydtZWFuJywgJ21lZGlhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJywgJ3ZhcmlhbmNlJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc3RhdGlzdGljcy9tYWQuanMKdmFyIG1hZERvY3MgPSB7CiAgbmFtZTogJ21hZCcsCiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJywKICBzeW50YXg6IFsnbWFkKGEsIGIsIGMsIC4uLiknLCAnbWFkKEEpJ10sCiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBtZWRpYW4gYWJzb2x1dGUgZGV2aWF0aW9uIG9mIGEgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy4gVGhlIG1lZGlhbiBhYnNvbHV0ZSBkZXZpYXRpb24gaXMgZGVmaW5lZCBhcyB0aGUgbWVkaWFuIG9mIHRoZSBhYnNvbHV0ZSBkZXZpYXRpb25zIGZyb20gdGhlIG1lZGlhbi4nLAogIGV4YW1wbGVzOiBbJ21hZCgxMCwgMjAsIDMwKScsICdtYWQoWzEsIDIsIDNdKSddLAogIHNlZWFsc286IFsnbWVhbicsICdtZWRpYW4nLCAnc3RkJywgJ2FicyddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NwZWNpYWwvZXJmLmpzCnZhciBlcmZEb2NzID0gewogIG5hbWU6ICdlcmYnLAogIGNhdGVnb3J5OiAnU3BlY2lhbCcsCiAgc3ludGF4OiBbJ2VyZih4KSddLAogIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgZXJmIGZ1bmN0aW9uIG9mIGEgdmFsdWUgdXNpbmcgYSByYXRpb25hbCBDaGVieXNoZXYgYXBwcm94aW1hdGlvbnMgZm9yIGRpZmZlcmVudCBpbnRlcnZhbHMgb2YgeCcsCiAgZXhhbXBsZXM6IFsnZXJmKDAuMiknLCAnZXJmKC0wLjUpJywgJ2VyZig0KSddLAogIHNlZWFsc286IFtdCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRVbmlvbi5qcwp2YXIgc2V0VW5pb25Eb2NzID0gewogIG5hbWU6ICdzZXRVbmlvbicsCiAgY2F0ZWdvcnk6ICdTZXQnLAogIHN5bnRheDogWydzZXRVbmlvbihzZXQxLCBzZXQyKSddLAogIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIHRoZSB1bmlvbiBvZiB0d28gKG11bHRpKXNldHMuIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uJywKICBleGFtcGxlczogWydzZXRVbmlvbihbMSwgMiwgMywgNF0sIFszLCA0LCA1LCA2XSknLCAnc2V0VW5pb24oW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSknXSwKICBzZWVhbHNvOiBbJ3NldEludGVyc2VjdCcsICdzZXREaWZmZXJlbmNlJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc2V0L3NldFN5bURpZmZlcmVuY2UuanMKdmFyIHNldFN5bURpZmZlcmVuY2VEb2NzID0gewogIG5hbWU6ICdzZXRTeW1EaWZmZXJlbmNlJywKICBjYXRlZ29yeTogJ1NldCcsCiAgc3ludGF4OiBbJ3NldFN5bURpZmZlcmVuY2Uoc2V0MSwgc2V0MiknXSwKICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSB0aGUgc3ltbWV0cmljIGRpZmZlcmVuY2Ugb2YgdHdvIChtdWx0aSlzZXRzLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsCiAgZXhhbXBsZXM6IFsnc2V0U3ltRGlmZmVyZW5jZShbMSwgMiwgMywgNF0sIFszLCA0LCA1LCA2XSknLCAnc2V0U3ltRGlmZmVyZW5jZShbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSddLAogIHNlZWFsc286IFsnc2V0VW5pb24nLCAnc2V0SW50ZXJzZWN0JywgJ3NldERpZmZlcmVuY2UnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0U2l6ZS5qcwp2YXIgc2V0U2l6ZURvY3MgPSB7CiAgbmFtZTogJ3NldFNpemUnLAogIGNhdGVnb3J5OiAnU2V0JywKICBzeW50YXg6IFsnc2V0U2l6ZShzZXQpJywgJ3NldFNpemUoc2V0LCB1bmlxdWUpJ10sCiAgZGVzY3JpcHRpb246ICdDb3VudCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIGEgKG11bHRpKXNldC4gV2hlbiB0aGUgc2Vjb25kIHBhcmFtZXRlciAidW5pcXVlIiBpcyB0cnVlLCBjb3VudCBvbmx5IHRoZSB1bmlxdWUgdmFsdWVzLiBBIG11bHRpLWRpbWVuc2lvbiBhcnJheSB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHNpbmdsZS1kaW1lbnNpb24gYXJyYXkgYmVmb3JlIHRoZSBvcGVyYXRpb24uJywKICBleGFtcGxlczogWydzZXRTaXplKFsxLCAyLCAyLCA0XSknLCAnc2V0U2l6ZShbMSwgMiwgMiwgNF0sIHRydWUpJ10sCiAgc2VlYWxzbzogWydzZXRVbmlvbicsICdzZXRJbnRlcnNlY3QnLCAnc2V0RGlmZmVyZW5jZSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRQb3dlcnNldC5qcwp2YXIgc2V0UG93ZXJzZXREb2NzID0gewogIG5hbWU6ICdzZXRQb3dlcnNldCcsCiAgY2F0ZWdvcnk6ICdTZXQnLAogIHN5bnRheDogWydzZXRQb3dlcnNldChzZXQpJ10sCiAgZGVzY3JpcHRpb246ICdDcmVhdGUgdGhlIHBvd2Vyc2V0IG9mIGEgKG11bHRpKXNldDogdGhlIHBvd2Vyc2V0IGNvbnRhaW5zIHZlcnkgcG9zc2libGUgc3Vic2V0cyBvZiBhIChtdWx0aSlzZXQuIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi4nLAogIGV4YW1wbGVzOiBbJ3NldFBvd2Vyc2V0KFsxLCAyLCAzXSknXSwKICBzZWVhbHNvOiBbJ3NldENhcnRlc2lhbiddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRNdWx0aXBsaWNpdHkuanMKdmFyIHNldE11bHRpcGxpY2l0eURvY3MgPSB7CiAgbmFtZTogJ3NldE11bHRpcGxpY2l0eScsCiAgY2F0ZWdvcnk6ICdTZXQnLAogIHN5bnRheDogWydzZXRNdWx0aXBsaWNpdHkoZWxlbWVudCwgc2V0KSddLAogIGRlc2NyaXB0aW9uOiAnQ291bnQgdGhlIG11bHRpcGxpY2l0eSBvZiBhbiBlbGVtZW50IGluIGEgbXVsdGlzZXQuIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi4nLAogIGV4YW1wbGVzOiBbJ3NldE11bHRpcGxpY2l0eSgxLCBbMSwgMiwgMiwgNF0pJywgJ3NldE11bHRpcGxpY2l0eSgyLCBbMSwgMiwgMiwgNF0pJ10sCiAgc2VlYWxzbzogWydzZXREaXN0aW5jdCcsICdzZXRTaXplJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc2V0L3NldElzU3Vic2V0LmpzCnZhciBzZXRJc1N1YnNldERvY3MgPSB7CiAgbmFtZTogJ3NldElzU3Vic2V0JywKICBjYXRlZ29yeTogJ1NldCcsCiAgc3ludGF4OiBbJ3NldElzU3Vic2V0KHNldDEsIHNldDIpJ10sCiAgZGVzY3JpcHRpb246ICdDaGVjayB3aGV0aGVyIGEgKG11bHRpKXNldCBpcyBhIHN1YnNldCBvZiBhbm90aGVyIChtdWx0aSlzZXQ6IGV2ZXJ5IGVsZW1lbnQgb2Ygc2V0MSBpcyB0aGUgZWxlbWVudCBvZiBzZXQyLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsCiAgZXhhbXBsZXM6IFsnc2V0SXNTdWJzZXQoWzEsIDJdLCBbMywgNCwgNSwgNl0pJywgJ3NldElzU3Vic2V0KFszLCA0XSwgWzMsIDQsIDUsIDZdKSddLAogIHNlZWFsc286IFsnc2V0VW5pb24nLCAnc2V0SW50ZXJzZWN0JywgJ3NldERpZmZlcmVuY2UnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0SW50ZXJzZWN0LmpzCnZhciBzZXRJbnRlcnNlY3REb2NzID0gewogIG5hbWU6ICdzZXRJbnRlcnNlY3QnLAogIGNhdGVnb3J5OiAnU2V0JywKICBzeW50YXg6IFsnc2V0SW50ZXJzZWN0KHNldDEsIHNldDIpJ10sCiAgZGVzY3JpcHRpb246ICdDcmVhdGUgdGhlIGludGVyc2VjdGlvbiBvZiB0d28gKG11bHRpKXNldHMuIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uJywKICBleGFtcGxlczogWydzZXRJbnRlcnNlY3QoWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pJywgJ3NldEludGVyc2VjdChbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSddLAogIHNlZWFsc286IFsnc2V0VW5pb24nLCAnc2V0RGlmZmVyZW5jZSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXREaXN0aW5jdC5qcwp2YXIgc2V0RGlzdGluY3REb2NzID0gewogIG5hbWU6ICdzZXREaXN0aW5jdCcsCiAgY2F0ZWdvcnk6ICdTZXQnLAogIHN5bnRheDogWydzZXREaXN0aW5jdChzZXQpJ10sCiAgZGVzY3JpcHRpb246ICdDb2xsZWN0IHRoZSBkaXN0aW5jdCBlbGVtZW50cyBvZiBhIG11bHRpc2V0LiBBIG11bHRpLWRpbWVuc2lvbiBhcnJheSB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHNpbmdsZS1kaW1lbnNpb24gYXJyYXkgYmVmb3JlIHRoZSBvcGVyYXRpb24uJywKICBleGFtcGxlczogWydzZXREaXN0aW5jdChbMSwgMSwgMSwgMiwgMiwgM10pJ10sCiAgc2VlYWxzbzogWydzZXRNdWx0aXBsaWNpdHknXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0RGlmZmVyZW5jZS5qcwp2YXIgc2V0RGlmZmVyZW5jZURvY3MgPSB7CiAgbmFtZTogJ3NldERpZmZlcmVuY2UnLAogIGNhdGVnb3J5OiAnU2V0JywKICBzeW50YXg6IFsnc2V0RGlmZmVyZW5jZShzZXQxLCBzZXQyKSddLAogIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIHRoZSBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0czogZXZlcnkgZWxlbWVudCBvZiBzZXQxLCB0aGF0IGlzIG5vdCB0aGUgZWxlbWVudCBvZiBzZXQyLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsCiAgZXhhbXBsZXM6IFsnc2V0RGlmZmVyZW5jZShbMSwgMiwgMywgNF0sIFszLCA0LCA1LCA2XSknLCAnc2V0RGlmZmVyZW5jZShbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSddLAogIHNlZWFsc286IFsnc2V0VW5pb24nLCAnc2V0SW50ZXJzZWN0JywgJ3NldFN5bURpZmZlcmVuY2UnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0Q2FydGVzaWFuLmpzCnZhciBzZXRDYXJ0ZXNpYW5Eb2NzID0gewogIG5hbWU6ICdzZXRDYXJ0ZXNpYW4nLAogIGNhdGVnb3J5OiAnU2V0JywKICBzeW50YXg6IFsnc2V0Q2FydGVzaWFuKHNldDEsIHNldDIpJ10sCiAgZGVzY3JpcHRpb246ICdDcmVhdGUgdGhlIGNhcnRlc2lhbiBwcm9kdWN0IG9mIHR3byAobXVsdGkpc2V0cy4gTXVsdGktZGltZW5zaW9uIGFycmF5cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBzaW5nbGUtZGltZW5zaW9uIGFycmF5cyBiZWZvcmUgdGhlIG9wZXJhdGlvbi4nLAogIGV4YW1wbGVzOiBbJ3NldENhcnRlc2lhbihbMSwgMl0sIFszLCA0XSknXSwKICBzZWVhbHNvOiBbJ3NldFVuaW9uJywgJ3NldEludGVyc2VjdCcsICdzZXREaWZmZXJlbmNlJywgJ3NldFBvd2Vyc2V0J10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcmVsYXRpb25hbC91bmVxdWFsLmpzCnZhciB1bmVxdWFsRG9jcyA9IHsKICBuYW1lOiAndW5lcXVhbCcsCiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJywKICBzeW50YXg6IFsneCAhPSB5JywgJ3VuZXF1YWwoeCwgeSknXSwKICBkZXNjcmlwdGlvbjogJ0NoZWNrIHVuZXF1YWxpdHkgb2YgdHdvIHZhbHVlcy4gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIHVuZXF1YWwsIGFuZCBmYWxzZSBpZiB0aGV5IGFyZSBlcXVhbC4nLAogIGV4YW1wbGVzOiBbJzIrMiAhPSAzJywgJzIrMiAhPSA0JywgJ2EgPSAzLjInLCAnYiA9IDYtMi44JywgJ2EgIT0gYicsICc1MGNtICE9IDAuNW0nLCAnNSBjbSAhPSAyIGluY2gnXSwKICBzZWVhbHNvOiBbJ2VxdWFsJywgJ3NtYWxsZXInLCAnbGFyZ2VyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlJywgJ2RlZXBFcXVhbCddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlckVxLmpzCnZhciBzbWFsbGVyRXFEb2NzID0gewogIG5hbWU6ICdzbWFsbGVyRXEnLAogIGNhdGVnb3J5OiAnUmVsYXRpb25hbCcsCiAgc3ludGF4OiBbJ3ggPD0geScsICdzbWFsbGVyRXEoeCwgeSknXSwKICBkZXNjcmlwdGlvbjogJ0NoZWNrIGlmIHZhbHVlIHggaXMgc21hbGxlciBvciBlcXVhbCB0byB2YWx1ZSB5LiBSZXR1cm5zIHRydWUgaWYgeCBpcyBzbWFsbGVyIHRoYW4geSwgYW5kIGZhbHNlIGlmIG5vdC4nLAogIGV4YW1wbGVzOiBbJzIgPD0gMSsxJywgJzIgPCAxKzEnLCAnYSA9IDMuMicsICdiID0gNi0yLjgnLCAnKGEgPD0gYiknXSwKICBzZWVhbHNvOiBbJ2VxdWFsJywgJ3VuZXF1YWwnLCAnbGFyZ2VyJywgJ3NtYWxsZXInLCAnbGFyZ2VyRXEnLCAnY29tcGFyZSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlci5qcwp2YXIgc21hbGxlckRvY3MgPSB7CiAgbmFtZTogJ3NtYWxsZXInLAogIGNhdGVnb3J5OiAnUmVsYXRpb25hbCcsCiAgc3ludGF4OiBbJ3ggPCB5JywgJ3NtYWxsZXIoeCwgeSknXSwKICBkZXNjcmlwdGlvbjogJ0NoZWNrIGlmIHZhbHVlIHggaXMgc21hbGxlciB0aGFuIHZhbHVlIHkuIFJldHVybnMgdHJ1ZSBpZiB4IGlzIHNtYWxsZXIgdGhhbiB5LCBhbmQgZmFsc2UgaWYgbm90LicsCiAgZXhhbXBsZXM6IFsnMiA8IDMnLCAnNSA8IDIqMicsICdhID0gMy4zJywgJ2IgPSA2LTIuOCcsICcoYSA8IGIpJywgJzUgY20gPCAyIGluY2gnXSwKICBzZWVhbHNvOiBbJ2VxdWFsJywgJ3VuZXF1YWwnLCAnbGFyZ2VyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcmVsYXRpb25hbC9sYXJnZXJFcS5qcwp2YXIgbGFyZ2VyRXFEb2NzID0gewogIG5hbWU6ICdsYXJnZXJFcScsCiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJywKICBzeW50YXg6IFsneCA+PSB5JywgJ2xhcmdlckVxKHgsIHkpJ10sCiAgZGVzY3JpcHRpb246ICdDaGVjayBpZiB2YWx1ZSB4IGlzIGxhcmdlciBvciBlcXVhbCB0byB5LiBSZXR1cm5zIHRydWUgaWYgeCBpcyBsYXJnZXIgb3IgZXF1YWwgdG8geSwgYW5kIGZhbHNlIGlmIG5vdC4nLAogIGV4YW1wbGVzOiBbJzIgPj0gMSsxJywgJzIgPiAxKzEnLCAnYSA9IDMuMicsICdiID0gNi0yLjgnLCAnKGEgPj0gYiknXSwKICBzZWVhbHNvOiBbJ2VxdWFsJywgJ3VuZXF1YWwnLCAnc21hbGxlckVxJywgJ3NtYWxsZXInLCAnY29tcGFyZSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyLmpzCnZhciBsYXJnZXJEb2NzID0gewogIG5hbWU6ICdsYXJnZXInLAogIGNhdGVnb3J5OiAnUmVsYXRpb25hbCcsCiAgc3ludGF4OiBbJ3ggPiB5JywgJ2xhcmdlcih4LCB5KSddLAogIGRlc2NyaXB0aW9uOiAnQ2hlY2sgaWYgdmFsdWUgeCBpcyBsYXJnZXIgdGhhbiB5LiBSZXR1cm5zIHRydWUgaWYgeCBpcyBsYXJnZXIgdGhhbiB5LCBhbmQgZmFsc2UgaWYgbm90LicsCiAgZXhhbXBsZXM6IFsnMiA+IDMnLCAnNSA+IDIqMicsICdhID0gMy4zJywgJ2IgPSA2LTIuOCcsICcoYSA+IGIpJywgJyhiIDwgYSknLCAnNSBjbSA+IDIgaW5jaCddLAogIHNlZWFsc286IFsnZXF1YWwnLCAndW5lcXVhbCcsICdzbWFsbGVyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbFRleHQuanMKdmFyIGVxdWFsVGV4dERvY3MgPSB7CiAgbmFtZTogJ2VxdWFsVGV4dCcsCiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJywKICBzeW50YXg6IFsnZXF1YWxUZXh0KHgsIHkpJ10sCiAgZGVzY3JpcHRpb246ICdDaGVjayBlcXVhbGl0eSBvZiB0d28gc3RyaW5ncy4gQ29tcGFyaXNvbiBpcyBjYXNlIHNlbnNpdGl2ZS4gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsLCBhbmQgZmFsc2UgaWYgbm90LicsCiAgZXhhbXBsZXM6IFsnZXF1YWxUZXh0KCJIZWxsbyIsICJIZWxsbyIpJywgJ2VxdWFsVGV4dCgiYSIsICJBIiknLCAnZXF1YWwoIjJlMyIsICIyMDAwIiknLCAnZXF1YWxUZXh0KCIyZTMiLCAiMjAwMCIpJywgJ2VxdWFsVGV4dCgiQiIsIFsiQSIsICJCIiwgIkMiXSknXSwKICBzZWVhbHNvOiBbJ2NvbXBhcmUnLCAnY29tcGFyZU5hdHVyYWwnLCAnY29tcGFyZVRleHQnLCAnZXF1YWwnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsLmpzCnZhciBlcXVhbERvY3MgPSB7CiAgbmFtZTogJ2VxdWFsJywKICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLAogIHN5bnRheDogWyd4ID09IHknLCAnZXF1YWwoeCwgeSknXSwKICBkZXNjcmlwdGlvbjogJ0NoZWNrIGVxdWFsaXR5IG9mIHR3byB2YWx1ZXMuIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSBlcXVhbCwgYW5kIGZhbHNlIGlmIG5vdC4nLAogIGV4YW1wbGVzOiBbJzIrMiA9PSAzJywgJzIrMiA9PSA0JywgJ2EgPSAzLjInLCAnYiA9IDYtMi44JywgJ2EgPT0gYicsICc1MGNtID09IDAuNW0nXSwKICBzZWVhbHNvOiBbJ3VuZXF1YWwnLCAnc21hbGxlcicsICdsYXJnZXInLCAnc21hbGxlckVxJywgJ2xhcmdlckVxJywgJ2NvbXBhcmUnLCAnZGVlcEVxdWFsJywgJ2VxdWFsVGV4dCddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZGVlcEVxdWFsLmpzCnZhciBkZWVwRXF1YWxEb2NzID0gewogIG5hbWU6ICdkZWVwRXF1YWwnLAogIGNhdGVnb3J5OiAnUmVsYXRpb25hbCcsCiAgc3ludGF4OiBbJ2RlZXBFcXVhbCh4LCB5KSddLAogIGRlc2NyaXB0aW9uOiAnQ2hlY2sgZXF1YWxpdHkgb2YgdHdvIG1hdHJpY2VzIGVsZW1lbnQgd2lzZS4gUmV0dXJucyB0cnVlIGlmIHRoZSBzaXplIG9mIGJvdGggbWF0cmljZXMgaXMgZXF1YWwgYW5kIHdoZW4gYW5kIGVhY2ggb2YgdGhlIGVsZW1lbnRzIGFyZSBlcXVhbC4nLAogIGV4YW1wbGVzOiBbJ2RlZXBFcXVhbChbMSwzLDRdLCBbMSwzLDRdKScsICdkZWVwRXF1YWwoWzEsMyw0XSwgWzEsM10pJ10sCiAgc2VlYWxzbzogWydlcXVhbCcsICd1bmVxdWFsJywgJ3NtYWxsZXInLCAnbGFyZ2VyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlVGV4dC5qcwp2YXIgY29tcGFyZVRleHREb2NzID0gewogIG5hbWU6ICdjb21wYXJlVGV4dCcsCiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJywKICBzeW50YXg6IFsnY29tcGFyZVRleHQoeCwgeSknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXBhcmUgdHdvIHN0cmluZ3MgbGV4aWNhbGx5LiBDb21wYXJpc29uIGlzIGNhc2Ugc2Vuc2l0aXZlLiAnICsgJ1JldHVybnMgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS4nLAogIGV4YW1wbGVzOiBbJ2NvbXBhcmVUZXh0KCJCIiwgIkEiKScsICdjb21wYXJlVGV4dCgiQSIsICJCIiknLCAnY29tcGFyZVRleHQoIkEiLCAiQSIpJywgJ2NvbXBhcmVUZXh0KCIyIiwgIjEwIiknLCAnY29tcGFyZSgiMiIsICIxMCIpJywgJ2NvbXBhcmUoMiwgMTApJywgJ2NvbXBhcmVOYXR1cmFsKCIyIiwgIjEwIiknLCAnY29tcGFyZVRleHQoIkIiLCBbIkEiLCAiQiIsICJDIl0pJ10sCiAgc2VlYWxzbzogWydjb21wYXJlJywgJ2NvbXBhcmVOYXR1cmFsJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlTmF0dXJhbC5qcwp2YXIgY29tcGFyZU5hdHVyYWxEb2NzID0gewogIG5hbWU6ICdjb21wYXJlTmF0dXJhbCcsCiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJywKICBzeW50YXg6IFsnY29tcGFyZU5hdHVyYWwoeCwgeSknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXBhcmUgdHdvIHZhbHVlcyBvZiBhbnkgdHlwZSBpbiBhIGRldGVybWluaXN0aWMsIG5hdHVyYWwgd2F5LiAnICsgJ1JldHVybnMgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS4nLAogIGV4YW1wbGVzOiBbJ2NvbXBhcmVOYXR1cmFsKDIsIDMpJywgJ2NvbXBhcmVOYXR1cmFsKDMsIDIpJywgJ2NvbXBhcmVOYXR1cmFsKDIsIDIpJywgJ2NvbXBhcmVOYXR1cmFsKDVjbSwgNDBtbSknLCAnY29tcGFyZU5hdHVyYWwoIjIiLCAiMTAiKScsICdjb21wYXJlTmF0dXJhbCgyICsgM2ksIDIgKyA0aSknLCAnY29tcGFyZU5hdHVyYWwoWzEsIDIsIDRdLCBbMSwgMiwgM10pJywgJ2NvbXBhcmVOYXR1cmFsKFsxLCA1XSwgWzEsIDIsIDNdKScsICdjb21wYXJlTmF0dXJhbChbMSwgMl0sIFsxLCAyXSknLCAnY29tcGFyZU5hdHVyYWwoe2E6IDJ9LCB7YTogNH0pJ10sCiAgc2VlYWxzbzogWydlcXVhbCcsICd1bmVxdWFsJywgJ3NtYWxsZXInLCAnc21hbGxlckVxJywgJ2xhcmdlckVxJywgJ2NvbXBhcmUnLCAnY29tcGFyZVRleHQnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmUuanMKdmFyIGNvbXBhcmVEb2NzID0gewogIG5hbWU6ICdjb21wYXJlJywKICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLAogIHN5bnRheDogWydjb21wYXJlKHgsIHkpJ10sCiAgZGVzY3JpcHRpb246ICdDb21wYXJlIHR3byB2YWx1ZXMuICcgKyAnUmV0dXJucyAxIHdoZW4geCA+IHksIC0xIHdoZW4geCA8IHksIGFuZCAwIHdoZW4geCA9PSB5LicsCiAgZXhhbXBsZXM6IFsnY29tcGFyZSgyLCAzKScsICdjb21wYXJlKDMsIDIpJywgJ2NvbXBhcmUoMiwgMiknLCAnY29tcGFyZSg1Y20sIDQwbW0pJywgJ2NvbXBhcmUoMiwgWzEsIDIsIDNdKSddLAogIHNlZWFsc286IFsnZXF1YWwnLCAndW5lcXVhbCcsICdzbWFsbGVyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlTmF0dXJhbCcsICdjb21wYXJlVGV4dCddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbUludC5qcwp2YXIgcmFuZG9tSW50RG9jcyA9IHsKICBuYW1lOiAncmFuZG9tSW50JywKICBjYXRlZ29yeTogJ1Byb2JhYmlsaXR5JywKICBzeW50YXg6IFsncmFuZG9tSW50KG1heCknLCAncmFuZG9tSW50KG1pbiwgbWF4KScsICdyYW5kb21JbnQoc2l6ZSknLCAncmFuZG9tSW50KHNpemUsIG1heCknLCAncmFuZG9tSW50KHNpemUsIG1pbiwgbWF4KSddLAogIGRlc2NyaXB0aW9uOiAnUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgbnVtYmVyJywKICBleGFtcGxlczogWydyYW5kb21JbnQoMTAsIDIwKScsICdyYW5kb21JbnQoWzIsIDNdLCAxMCknXSwKICBzZWVhbHNvOiBbJ3BpY2tSYW5kb20nLCAncmFuZG9tJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcmFuZG9tLmpzCnZhciByYW5kb21Eb2NzID0gewogIG5hbWU6ICdyYW5kb20nLAogIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLAogIHN5bnRheDogWydyYW5kb20oKScsICdyYW5kb20obWF4KScsICdyYW5kb20obWluLCBtYXgpJywgJ3JhbmRvbShzaXplKScsICdyYW5kb20oc2l6ZSwgbWF4KScsICdyYW5kb20oc2l6ZSwgbWluLCBtYXgpJ10sCiAgZGVzY3JpcHRpb246ICdSZXR1cm4gYSByYW5kb20gbnVtYmVyLicsCiAgZXhhbXBsZXM6IFsncmFuZG9tKCknLCAncmFuZG9tKDEwLCAyMCknLCAncmFuZG9tKFsyLCAzXSknXSwKICBzZWVhbHNvOiBbJ3BpY2tSYW5kb20nLCAncmFuZG9tSW50J10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGlja1JhbmRvbS5qcwp2YXIgcGlja1JhbmRvbURvY3MgPSB7CiAgbmFtZTogJ3BpY2tSYW5kb20nLAogIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLAogIHN5bnRheDogWydwaWNrUmFuZG9tKGFycmF5KScsICdwaWNrUmFuZG9tKGFycmF5LCBudW1iZXIpJywgJ3BpY2tSYW5kb20oYXJyYXksIHdlaWdodHMpJywgJ3BpY2tSYW5kb20oYXJyYXksIG51bWJlciwgd2VpZ2h0cyknLCAncGlja1JhbmRvbShhcnJheSwgd2VpZ2h0cywgbnVtYmVyKSddLAogIGRlc2NyaXB0aW9uOiAnUGljayBhIHJhbmRvbSBlbnRyeSBmcm9tIGEgZ2l2ZW4gYXJyYXkuJywKICBleGFtcGxlczogWydwaWNrUmFuZG9tKDA6MTApJywgJ3BpY2tSYW5kb20oWzEsIDMsIDEsIDZdKScsICdwaWNrUmFuZG9tKFsxLCAzLCAxLCA2XSwgMiknLCAncGlja1JhbmRvbShbMSwgMywgMSwgNl0sIFsyLCAzLCAyLCAxXSknLCAncGlja1JhbmRvbShbMSwgMywgMSwgNl0sIDIsIFsyLCAzLCAyLCAxXSknLCAncGlja1JhbmRvbShbMSwgMywgMSwgNl0sIFsyLCAzLCAyLCAxXSwgMiknXSwKICBzZWVhbHNvOiBbJ3JhbmRvbScsICdyYW5kb21JbnQnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9wcm9iYWJpbGl0eS9wZXJtdXRhdGlvbnMuanMKdmFyIHBlcm11dGF0aW9uc0RvY3MgPSB7CiAgbmFtZTogJ3Blcm11dGF0aW9ucycsCiAgY2F0ZWdvcnk6ICdQcm9iYWJpbGl0eScsCiAgc3ludGF4OiBbJ3Blcm11dGF0aW9ucyhuKScsICdwZXJtdXRhdGlvbnMobiwgayknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIG51bWJlciBvZiBwZXJtdXRhdGlvbnMgb2YgbiBpdGVtcyB0YWtlbiBrIGF0IGEgdGltZScsCiAgZXhhbXBsZXM6IFsncGVybXV0YXRpb25zKDUpJywgJ3Blcm11dGF0aW9ucyg1LCAzKSddLAogIHNlZWFsc286IFsnY29tYmluYXRpb25zJywgJ2NvbWJpbmF0aW9uc1dpdGhSZXAnLCAnZmFjdG9yaWFsJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcHJvYmFiaWxpdHkvbXVsdGlub21pYWwuanMKdmFyIG11bHRpbm9taWFsRG9jcyA9IHsKICBuYW1lOiAnbXVsdGlub21pYWwnLAogIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLAogIHN5bnRheDogWydtdWx0aW5vbWlhbChBKSddLAogIGRlc2NyaXB0aW9uOiAnTXVsdGlub21pYWwgQ29lZmZpY2llbnRzIGNvbXB1dGUgdGhlIG51bWJlciBvZiB3YXlzIG9mIHBpY2tpbmcgYTEsIGEyLCAuLi4sIGFpIHVub3JkZXJlZCBvdXRjb21lcyBmcm9tIGBuYCBwb3NzaWJpbGl0aWVzLiBtdWx0aW5vbWlhbCB0YWtlcyBvbmUgYXJyYXkgb2YgaW50ZWdlcnMgYXMgYW4gYXJndW1lbnQuIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGV2ZXJ5IGFpID4gMC4nLAogIGV4YW1wbGVzOiBbJ211bHRpbm9taWFsKFsxLCAyLCAxXSknXSwKICBzZWVhbHNvOiBbJ2NvbWJpbmF0aW9ucycsICdmYWN0b3JpYWwnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9wcm9iYWJpbGl0eS9rbGRpdmVyZ2VuY2UuanMKdmFyIGtsZGl2ZXJnZW5jZURvY3MgPSB7CiAgbmFtZTogJ2tsZGl2ZXJnZW5jZScsCiAgY2F0ZWdvcnk6ICdQcm9iYWJpbGl0eScsCiAgc3ludGF4OiBbJ2tsZGl2ZXJnZW5jZSh4LCB5KSddLAogIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBLdWxsYmFjay1MZWlibGVyIChLTCkgZGl2ZXJnZW5jZSAgYmV0d2VlbiB0d28gZGlzdHJpYnV0aW9ucy4nLAogIGV4YW1wbGVzOiBbJ2tsZGl2ZXJnZW5jZShbMC43LDAuNSwwLjRdLCBbMC4yLDAuOSwwLjVdKSddLAogIHNlZWFsc286IFtdCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2dhbW1hLmpzCnZhciBnYW1tYURvY3MgPSB7CiAgbmFtZTogJ2dhbW1hJywKICBjYXRlZ29yeTogJ1Byb2JhYmlsaXR5JywKICBzeW50YXg6IFsnZ2FtbWEobiknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGdhbW1hIGZ1bmN0aW9uLiBGb3Igc21hbGwgdmFsdWVzLCB0aGUgTGFuY3pvcyBhcHByb3hpbWF0aW9uIGlzIHVzZWQsIGFuZCBmb3IgbGFyZ2UgdmFsdWVzIHRoZSBleHRlbmRlZCBTdGlybGluZyBhcHByb3hpbWF0aW9uLicsCiAgZXhhbXBsZXM6IFsnZ2FtbWEoNCknLCAnMyEnLCAnZ2FtbWEoMS8yKScsICdzcXJ0KHBpKSddLAogIHNlZWFsc286IFsnZmFjdG9yaWFsJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcHJvYmFiaWxpdHkvZmFjdG9yaWFsLmpzCnZhciBmYWN0b3JpYWxEb2NzID0gewogIG5hbWU6ICdmYWN0b3JpYWwnLAogIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLAogIHN5bnRheDogWyduIScsICdmYWN0b3JpYWwobiknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGZhY3RvcmlhbCBvZiBhIHZhbHVlJywKICBleGFtcGxlczogWyc1IScsICc1ICogNCAqIDMgKiAyICogMScsICczISddLAogIHNlZWFsc286IFsnY29tYmluYXRpb25zJywgJ2NvbWJpbmF0aW9uc1dpdGhSZXAnLCAncGVybXV0YXRpb25zJywgJ2dhbW1hJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcHJvYmFiaWxpdHkvY29tYmluYXRpb25zLmpzCnZhciBjb21iaW5hdGlvbnNEb2NzID0gewogIG5hbWU6ICdjb21iaW5hdGlvbnMnLAogIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLAogIHN5bnRheDogWydjb21iaW5hdGlvbnMobiwgayknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIG51bWJlciBvZiBjb21iaW5hdGlvbnMgb2YgbiBpdGVtcyB0YWtlbiBrIGF0IGEgdGltZScsCiAgZXhhbXBsZXM6IFsnY29tYmluYXRpb25zKDcsIDUpJ10sCiAgc2VlYWxzbzogWydjb21iaW5hdGlvbnNXaXRoUmVwJywgJ3Blcm11dGF0aW9ucycsICdmYWN0b3JpYWwnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9wcm9iYWJpbGl0eS9jb21iaW5hdGlvbnNXaXRoUmVwLmpzCnZhciBjb21iaW5hdGlvbnNXaXRoUmVwRG9jcyA9IHsKICBuYW1lOiAnY29tYmluYXRpb25zV2l0aFJlcCcsCiAgY2F0ZWdvcnk6ICdQcm9iYWJpbGl0eScsCiAgc3ludGF4OiBbJ2NvbWJpbmF0aW9uc1dpdGhSZXAobiwgayknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIG51bWJlciBvZiBjb21iaW5hdGlvbnMgb2YgbiBpdGVtcyB0YWtlbiBrIGF0IGEgdGltZSB3aXRoIHJlcGxhY2VtZW50cy4nLAogIGV4YW1wbGVzOiBbJ2NvbWJpbmF0aW9uc1dpdGhSZXAoNywgNSknXSwKICBzZWVhbHNvOiBbJ2NvbWJpbmF0aW9ucycsICdwZXJtdXRhdGlvbnMnLCAnZmFjdG9yaWFsJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3plcm9zLmpzCnZhciB6ZXJvc0RvY3MgPSB7CiAgbmFtZTogJ3plcm9zJywKICBjYXRlZ29yeTogJ01hdHJpeCcsCiAgc3ludGF4OiBbJ3plcm9zKG0pJywgJ3plcm9zKG0sIG4pJywgJ3plcm9zKG0sIG4sIHAsIC4uLiknLCAnemVyb3MoW21dKScsICd6ZXJvcyhbbSwgbl0pJywgJ3plcm9zKFttLCBuLCBwLCAuLi5dKSddLAogIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgbWF0cml4IGNvbnRhaW5pbmcgemVyb3MuJywKICBleGFtcGxlczogWyd6ZXJvcygzKScsICd6ZXJvcygzLCA1KScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ3plcm9zKHNpemUoYSkpJ10sCiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzcXVlZXplJywgJ3N1YnNldCcsICd0cmFjZScsICd0cmFuc3Bvc2UnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvdHJhbnNwb3NlLmpzCnZhciB0cmFuc3Bvc2VEb2NzID0gewogIG5hbWU6ICd0cmFuc3Bvc2UnLAogIGNhdGVnb3J5OiAnTWF0cml4JywKICBzeW50YXg6IFsneFwnJywgJ3RyYW5zcG9zZSh4KSddLAogIGRlc2NyaXB0aW9uOiAnVHJhbnNwb3NlIGEgbWF0cml4JywKICBleGFtcGxlczogWydhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ2FcJycsICd0cmFuc3Bvc2UoYSknXSwKICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3plcm9zJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3RyYWNlLmpzCnZhciB0cmFjZURvY3MgPSB7CiAgbmFtZTogJ3RyYWNlJywKICBjYXRlZ29yeTogJ01hdHJpeCcsCiAgc3ludGF4OiBbJ3RyYWNlKEEpJ10sCiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIHRyYWNlIG9mIGEgbWF0cml4OiB0aGUgc3VtIG9mIHRoZSBlbGVtZW50cyBvbiB0aGUgbWFpbiBkaWFnb25hbCBvZiBhIHNxdWFyZSBtYXRyaXguJywKICBleGFtcGxlczogWydBID0gWzEsIDIsIDM7IC0xLCAyLCAzOyAyLCAwLCAzXScsICd0cmFjZShBKSddLAogIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhbnNwb3NlJywgJ3plcm9zJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3N1YnNldC5qcwp2YXIgc3Vic2V0RG9jcyA9IHsKICBuYW1lOiAnc3Vic2V0JywKICBjYXRlZ29yeTogJ01hdHJpeCcsCiAgc3ludGF4OiBbJ3ZhbHVlKGluZGV4KScsICd2YWx1ZShpbmRleCkgPSByZXBsYWNlbWVudCcsICdzdWJzZXQodmFsdWUsIFtpbmRleF0pJywgJ3N1YnNldCh2YWx1ZSwgW2luZGV4XSwgcmVwbGFjZW1lbnQpJ10sCiAgZGVzY3JpcHRpb246ICdHZXQgb3Igc2V0IGEgc3Vic2V0IG9mIGEgbWF0cml4IG9yIHN0cmluZy4gJyArICdJbmRleGVzIGFyZSBvbmUtYmFzZWQuICcgKyAnQm90aCB0aGUgcmFuZ2VzIGxvd2VyLWJvdW5kIGFuZCB1cHBlci1ib3VuZCBhcmUgaW5jbHVkZWQuJywKICBleGFtcGxlczogWydkID0gWzEsIDI7IDMsIDRdJywgJ2UgPSBbXScsICdlWzEsIDE6Ml0gPSBbNSwgNl0nLCAnZVsyLCA6XSA9IFs3LCA4XScsICdmID0gZCAqIGUnLCAnZlsyLCAxXScsICdmWzosIDFdJ10sCiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzcXVlZXplJywgJ3RyYWNlJywgJ3RyYW5zcG9zZScsICd6ZXJvcyddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9zcXVlZXplLmpzCnZhciBzcXVlZXplRG9jcyA9IHsKICBuYW1lOiAnc3F1ZWV6ZScsCiAgY2F0ZWdvcnk6ICdNYXRyaXgnLAogIHN5bnRheDogWydzcXVlZXplKHgpJ10sCiAgZGVzY3JpcHRpb246ICdSZW1vdmUgaW5uZXIgYW5kIG91dGVyIHNpbmdsZXRvbiBkaW1lbnNpb25zIGZyb20gYSBtYXRyaXguJywKICBleGFtcGxlczogWydhID0gemVyb3MoMywyLDEpJywgJ3NpemUoc3F1ZWV6ZShhKSknLCAnYiA9IHplcm9zKDEsMSwzKScsICdzaXplKHNxdWVlemUoYikpJ10sCiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3NvcnQuanMKdmFyIHNvcnREb2NzID0gewogIG5hbWU6ICdzb3J0JywKICBjYXRlZ29yeTogJ01hdHJpeCcsCiAgc3ludGF4OiBbJ3NvcnQoeCknLCAnc29ydCh4LCBjb21wYXJlKSddLAogIGRlc2NyaXB0aW9uOiAnU29ydCB0aGUgaXRlbXMgaW4gYSBtYXRyaXguIENvbXBhcmUgY2FuIGJlIGEgc3RyaW5nICJhc2MiLCAiZGVzYyIsICJuYXR1cmFsIiwgb3IgYSBjdXN0b20gc29ydCBmdW5jdGlvbi4nLAogIGV4YW1wbGVzOiBbJ3NvcnQoWzUsIDEwLCAxXSknLCAnc29ydChbIkMiLCAiQiIsICJBIiwgIkQiXSknLCAnc29ydEJ5TGVuZ3RoKGEsIGIpID0gc2l6ZShhKVsxXSAtIHNpemUoYilbMV0nLCAnc29ydChbIkxhbmdkb24iLCAiVG9tIiwgIlNhcmEiXSwgc29ydEJ5TGVuZ3RoKScsICdzb3J0KFsiMTAiLCAiMSIsICIyIl0sICJuYXR1cmFsIiknXSwKICBzZWVhbHNvOiBbJ21hcCcsICdmaWx0ZXInLCAnZm9yRWFjaCddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9zaXplLmpzCnZhciBzaXplRG9jcyA9IHsKICBuYW1lOiAnc2l6ZScsCiAgY2F0ZWdvcnk6ICdNYXRyaXgnLAogIHN5bnRheDogWydzaXplKHgpJ10sCiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIHNpemUgb2YgYSBtYXRyaXguJywKICBleGFtcGxlczogWydzaXplKDIuMyknLCAnc2l6ZSgiaGVsbG8gd29ybGQiKScsICdhID0gWzEsIDI7IDMsIDQ7IDUsIDZdJywgJ3NpemUoYSknLCAnc2l6ZSgxOjYpJ10sCiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ29uZXMnLCAncmFuZ2UnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3Jlc2hhcGUuanMKdmFyIHJlc2hhcGVEb2NzID0gewogIG5hbWU6ICdyZXNoYXBlJywKICBjYXRlZ29yeTogJ01hdHJpeCcsCiAgc3ludGF4OiBbJ3Jlc2hhcGUoeCwgc2l6ZXMpJ10sCiAgZGVzY3JpcHRpb246ICdSZXNoYXBlIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXkgdG8gZml0IHRoZSBzcGVjaWZpZWQgZGltZW5zaW9ucy4nLAogIGV4YW1wbGVzOiBbJ3Jlc2hhcGUoWzEsIDIsIDMsIDQsIDUsIDZdLCBbMiwgM10pJywgJ3Jlc2hhcGUoW1sxLCAyXSwgWzMsIDRdXSwgWzEsIDRdKScsICdyZXNoYXBlKFtbMSwgMl0sIFszLCA0XV0sIFs0XSknXSwKICBzZWVhbHNvOiBbJ3NpemUnLCAnc3F1ZWV6ZScsICdyZXNpemUnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvcmVzaXplLmpzCnZhciByZXNpemVEb2NzID0gewogIG5hbWU6ICdyZXNpemUnLAogIGNhdGVnb3J5OiAnTWF0cml4JywKICBzeW50YXg6IFsncmVzaXplKHgsIHNpemUpJywgJ3Jlc2l6ZSh4LCBzaXplLCBkZWZhdWx0VmFsdWUpJ10sCiAgZGVzY3JpcHRpb246ICdSZXNpemUgYSBtYXRyaXguJywKICBleGFtcGxlczogWydyZXNpemUoWzEsMiwzLDQsNV0sIFszXSknLCAncmVzaXplKFsxLDIsM10sIFs1XSknLCAncmVzaXplKFsxLDIsM10sIFs1XSwgLTEpJywgJ3Jlc2l6ZSgyLCBbMiwgM10pJywgJ3Jlc2l6ZSgiaGVsbG8iLCBbOF0sICIhIiknXSwKICBzZWVhbHNvOiBbJ3NpemUnLCAnc3Vic2V0JywgJ3NxdWVlemUnLCAncmVzaGFwZSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9yYW5nZS5qcwp2YXIgcmFuZ2VEb2NzID0gewogIG5hbWU6ICdyYW5nZScsCiAgY2F0ZWdvcnk6ICdUeXBlJywKICBzeW50YXg6IFsnc3RhcnQ6ZW5kJywgJ3N0YXJ0OnN0ZXA6ZW5kJywgJ3JhbmdlKHN0YXJ0LCBlbmQpJywgJ3JhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApJywgJ3JhbmdlKHN0cmluZyknXSwKICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIHJhbmdlLiBMb3dlciBib3VuZCBvZiB0aGUgcmFuZ2UgaXMgaW5jbHVkZWQsIHVwcGVyIGJvdW5kIGlzIGV4Y2x1ZGVkLicsCiAgZXhhbXBsZXM6IFsnMTo1JywgJzM6LTE6LTMnLCAncmFuZ2UoMywgNyknLCAncmFuZ2UoMCwgMTIsIDIpJywgJ3JhbmdlKCI0OjEwIiknLCAnYSA9IFsxLCAyLCAzLCA0OyA1LCA2LCA3LCA4XScsICdhWzE6MiwgMToyXSddLAogIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3BhcnRpdGlvblNlbGVjdC5qcwp2YXIgcGFydGl0aW9uU2VsZWN0RG9jcyA9IHsKICBuYW1lOiAncGFydGl0aW9uU2VsZWN0JywKICBjYXRlZ29yeTogJ01hdHJpeCcsCiAgc3ludGF4OiBbJ3BhcnRpdGlvblNlbGVjdCh4LCBrKScsICdwYXJ0aXRpb25TZWxlY3QoeCwgaywgY29tcGFyZSknXSwKICBkZXNjcmlwdGlvbjogJ1BhcnRpdGlvbi1iYXNlZCBzZWxlY3Rpb24gb2YgYW4gYXJyYXkgb3IgMUQgbWF0cml4LiBXaWxsIGZpbmQgdGhlIGt0aCBzbWFsbGVzdCB2YWx1ZSwgYW5kIG11dGF0ZXMgdGhlIGlucHV0IGFycmF5LiBVc2VzIFF1aWNrc2VsZWN0LicsCiAgZXhhbXBsZXM6IFsncGFydGl0aW9uU2VsZWN0KFs1LCAxMCwgMV0sIDIpJywgJ3BhcnRpdGlvblNlbGVjdChbIkMiLCAiQiIsICJBIiwgIkQiXSwgMSknXSwKICBzZWVhbHNvOiBbJ3NvcnQnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvb25lcy5qcwp2YXIgb25lc0RvY3MgPSB7CiAgbmFtZTogJ29uZXMnLAogIGNhdGVnb3J5OiAnTWF0cml4JywKICBzeW50YXg6IFsnb25lcyhtKScsICdvbmVzKG0sIG4pJywgJ29uZXMobSwgbiwgcCwgLi4uKScsICdvbmVzKFttXSknLCAnb25lcyhbbSwgbl0pJywgJ29uZXMoW20sIG4sIHAsIC4uLl0pJ10sCiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBtYXRyaXggY29udGFpbmluZyBvbmVzLicsCiAgZXhhbXBsZXM6IFsnb25lcygzKScsICdvbmVzKDMsIDUpJywgJ29uZXMoWzIsM10pICogNC41JywgJ2EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnb25lcyhzaXplKGEpKSddLAogIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3RyYW5zcG9zZScsICd6ZXJvcyddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9tYXAuanMKdmFyIG1hcERvY3MgPSB7CiAgbmFtZTogJ21hcCcsCiAgY2F0ZWdvcnk6ICdNYXRyaXgnLAogIHN5bnRheDogWydtYXAoeCwgY2FsbGJhY2spJ10sCiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBuZXcgbWF0cml4IG9yIGFycmF5IHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGV4ZWN1dGVkIG9uIGVhY2ggZW50cnkgb2YgdGhlIG1hdHJpeC9hcnJheS4nLAogIGV4YW1wbGVzOiBbJ21hcChbMSwgMiwgM10sIHNxdWFyZSknXSwKICBzZWVhbHNvOiBbJ2ZpbHRlcicsICdmb3JFYWNoJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2tyb24uanMKdmFyIGtyb25Eb2NzID0gewogIG5hbWU6ICdrcm9uJywKICBjYXRlZ29yeTogJ01hdHJpeCcsCiAgc3ludGF4OiBbJ2tyb24oeCwgeSknXSwKICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZXMgdGhlIGtyb25lY2tlciBwcm9kdWN0IG9mIDIgbWF0cmljZXMgb3IgdmVjdG9ycy4nLAogIGV4YW1wbGVzOiBbJ2tyb24oW1sxLCAwXSwgWzAsIDFdXSwgW1sxLCAyXSwgWzMsIDRdXSknLCAna3JvbihbMSwxXSwgWzIsMyw0XSknXSwKICBzZWVhbHNvOiBbJ211bHRpcGx5JywgJ2RvdCcsICdjcm9zcyddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9pbnYuanMKdmFyIGludkRvY3MgPSB7CiAgbmFtZTogJ2ludicsCiAgY2F0ZWdvcnk6ICdNYXRyaXgnLAogIHN5bnRheDogWydpbnYoeCknXSwKICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgaW52ZXJzZSBvZiBhIG1hdHJpeCcsCiAgZXhhbXBsZXM6IFsnaW52KFsxLCAyOyAzLCA0XSknLCAnaW52KDQpJywgJzEgLyA0J10sCiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3RyYW5zcG9zZScsICd6ZXJvcyddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoLmpzCnZhciBmb3JFYWNoRG9jcyA9IHsKICBuYW1lOiAnZm9yRWFjaCcsCiAgY2F0ZWdvcnk6ICdNYXRyaXgnLAogIHN5bnRheDogWydmb3JFYWNoKHgsIGNhbGxiYWNrKSddLAogIGRlc2NyaXB0aW9uOiAnSXRlcmF0ZXMgb3ZlciBhbGwgZWxlbWVudHMgb2YgYSBtYXRyaXgvYXJyYXksIGFuZCBleGVjdXRlcyB0aGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24uJywKICBleGFtcGxlczogWydmb3JFYWNoKFsxLCAyLCAzXSwgZnVuY3Rpb24odmFsKSB7IGNvbnNvbGUubG9nKHZhbCkgfSknXSwKICBzZWVhbHNvOiBbJ21hcCcsICdzb3J0JywgJ2ZpbHRlciddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9mbGF0dGVuLmpzCnZhciBmbGF0dGVuRG9jcyA9IHsKICBuYW1lOiAnZmxhdHRlbicsCiAgY2F0ZWdvcnk6ICdNYXRyaXgnLAogIHN5bnRheDogWydmbGF0dGVuKHgpJ10sCiAgZGVzY3JpcHRpb246ICdGbGF0dGVuIGEgbXVsdGkgZGltZW5zaW9uYWwgbWF0cml4IGludG8gYSBzaW5nbGUgZGltZW5zaW9uYWwgbWF0cml4LicsCiAgZXhhbXBsZXM6IFsnYSA9IFsxLCAyLCAzOyA0LCA1LCA2XScsICdzaXplKGEpJywgJ2IgPSBmbGF0dGVuKGEpJywgJ3NpemUoYiknXSwKICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdyZXNpemUnLCAnc2l6ZScsICdzcXVlZXplJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2ZpbHRlci5qcwp2YXIgZmlsdGVyRG9jcyA9IHsKICBuYW1lOiAnZmlsdGVyJywKICBjYXRlZ29yeTogJ01hdHJpeCcsCiAgc3ludGF4OiBbJ2ZpbHRlcih4LCB0ZXN0KSddLAogIGRlc2NyaXB0aW9uOiAnRmlsdGVyIGl0ZW1zIGluIGEgbWF0cml4LicsCiAgZXhhbXBsZXM6IFsnaXNQb3NpdGl2ZSh4KSA9IHggPiAwJywgJ2ZpbHRlcihbNiwgLTIsIC0xLCA0LCAzXSwgaXNQb3NpdGl2ZSknLCAnZmlsdGVyKFs2LCAtMiwgMCwgMSwgMF0sIHggIT0gMCknXSwKICBzZWVhbHNvOiBbJ3NvcnQnLCAnbWFwJywgJ2ZvckVhY2gnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvaWRlbnRpdHkuanMKdmFyIGlkZW50aXR5RG9jcyA9IHsKICBuYW1lOiAnaWRlbnRpdHknLAogIGNhdGVnb3J5OiAnTWF0cml4JywKICBzeW50YXg6IFsnaWRlbnRpdHkobiknLCAnaWRlbnRpdHkobSwgbiknLCAnaWRlbnRpdHkoW20sIG5dKSddLAogIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgaWRlbnRpdHkgbWF0cml4IHdpdGggc2l6ZSBtLWJ5LW4uIFRoZSBtYXRyaXggaGFzIG9uZXMgb24gdGhlIGRpYWdvbmFsIGFuZCB6ZXJvcyBlbHNld2hlcmUuJywKICBleGFtcGxlczogWydpZGVudGl0eSgzKScsICdpZGVudGl0eSgzLCA1KScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ2lkZW50aXR5KHNpemUoYSkpJ10sCiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2RpYWcnLCAnaW52JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzcXVlZXplJywgJ3N1YnNldCcsICd0cmFjZScsICd0cmFuc3Bvc2UnLCAnemVyb3MnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvZ2V0TWF0cml4RGF0YVR5cGUuanMKdmFyIGdldE1hdHJpeERhdGFUeXBlRG9jcyA9IHsKICBuYW1lOiAnZ2V0TWF0cml4RGF0YVR5cGUnLAogIGNhdGVnb3J5OiAnTWF0cml4JywKICBzeW50YXg6IFsnZ2V0TWF0cml4RGF0YVR5cGUoeCknXSwKICBkZXNjcmlwdGlvbjogJ0ZpbmQgdGhlIGRhdGEgdHlwZSBvZiBhbGwgZWxlbWVudHMgaW4gYSBtYXRyaXggb3IgYXJyYXksICcgKyAnZm9yIGV4YW1wbGUgIm51bWJlciIgaWYgYWxsIGl0ZW1zIGFyZSBhIG51bWJlciAnICsgJ2FuZCAiQ29tcGxleCIgaWYgYWxsIHZhbHVlcyBhcmUgY29tcGxleCBudW1iZXJzLiAnICsgJ0lmIGEgbWF0cml4IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgZGF0YSB0eXBlLCBpdCB3aWxsIHJldHVybiAibWl4ZWQiLicsCiAgZXhhbXBsZXM6IFsnZ2V0TWF0cml4RGF0YVR5cGUoWzEsIDIsIDNdKScsICdnZXRNYXRyaXhEYXRhVHlwZShbWzUgY21dLCBbMiBpbmNoXV0pJywgJ2dldE1hdHJpeERhdGFUeXBlKFsxLCAidGV4dCJdKScsICdnZXRNYXRyaXhEYXRhVHlwZShbMSwgYmlnbnVtYmVyKDQpXSknXSwKICBzZWVhbHNvOiBbJ21hdHJpeCcsICdzcGFyc2UnLCAndHlwZU9mJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2RvdC5qcwp2YXIgZG90RG9jcyA9IHsKICBuYW1lOiAnZG90JywKICBjYXRlZ29yeTogJ01hdHJpeCcsCiAgc3ludGF4OiBbJ2RvdChBLCBCKScsICdBICogQiddLAogIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjdG9ycy4gJyArICdUaGUgZG90IHByb2R1Y3Qgb2YgQSA9IFthMSwgYTIsIGEzLCAuLi4sIGFuXSBhbmQgQiA9IFtiMSwgYjIsIGIzLCAuLi4sIGJuXSAnICsgJ2lzIGRlZmluZWQgYXMgZG90KEEsIEIpID0gYTEgKiBiMSArIGEyICogYjIgKyBhMyAqIGIzICsgLi4uICsgYW4gKiBibicsCiAgZXhhbXBsZXM6IFsnZG90KFsyLCA0LCAxXSwgWzIsIDIsIDNdKScsICdbMiwgNCwgMV0gKiBbMiwgMiwgM10nXSwKICBzZWVhbHNvOiBbJ211bHRpcGx5JywgJ2Nyb3NzJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2RpYWcuanMKdmFyIGRpYWdEb2NzID0gewogIG5hbWU6ICdkaWFnJywKICBjYXRlZ29yeTogJ01hdHJpeCcsCiAgc3ludGF4OiBbJ2RpYWcoeCknLCAnZGlhZyh4LCBrKSddLAogIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgZGlhZ29uYWwgbWF0cml4IG9yIHJldHJpZXZlIHRoZSBkaWFnb25hbCBvZiBhIG1hdHJpeC4gV2hlbiB4IGlzIGEgdmVjdG9yLCBhIG1hdHJpeCB3aXRoIHRoZSB2ZWN0b3IgdmFsdWVzIG9uIHRoZSBkaWFnb25hbCB3aWxsIGJlIHJldHVybmVkLiBXaGVuIHggaXMgYSBtYXRyaXgsIGEgdmVjdG9yIHdpdGggdGhlIGRpYWdvbmFsIHZhbHVlcyBvZiB0aGUgbWF0cml4IGlzIHJldHVybmVkLiBXaGVuIGsgaXMgcHJvdmlkZWQsIHRoZSBrLXRoIGRpYWdvbmFsIHdpbGwgYmUgZmlsbGVkIGluIG9yIHJldHJpZXZlZCwgaWYgayBpcyBwb3NpdGl2ZSwgdGhlIHZhbHVlcyBhcmUgcGxhY2VkIG9uIHRoZSBzdXBlciBkaWFnb25hbC4gV2hlbiBrIGlzIG5lZ2F0aXZlLCB0aGUgdmFsdWVzIGFyZSBwbGFjZWQgb24gdGhlIHN1YiBkaWFnb25hbC4nLAogIGV4YW1wbGVzOiBbJ2RpYWcoMTozKScsICdkaWFnKDE6MywgMSknLCAnYSA9IFsxLCAyLCAzOyA0LCA1LCA2OyA3LCA4LCA5XScsICdkaWFnKGEpJ10sCiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2RldC5qcwp2YXIgZGV0RG9jcyA9IHsKICBuYW1lOiAnZGV0JywKICBjYXRlZ29yeTogJ01hdHJpeCcsCiAgc3ludGF4OiBbJ2RldCh4KSddLAogIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdHJpeCcsCiAgZXhhbXBsZXM6IFsnZGV0KFsxLCAyOyAzLCA0XSknLCAnZGV0KFstMiwgMiwgMzsgLTEsIDEsIDM7IDIsIDAsIC0xXSknXSwKICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2N0cmFuc3Bvc2UuanMKdmFyIGN0cmFuc3Bvc2VEb2NzID0gewogIG5hbWU6ICdjdHJhbnNwb3NlJywKICBjYXRlZ29yeTogJ01hdHJpeCcsCiAgc3ludGF4OiBbJ3hcJycsICdjdHJhbnNwb3NlKHgpJ10sCiAgZGVzY3JpcHRpb246ICdDb21wbGV4IENvbmp1Z2F0ZSBhbmQgVHJhbnNwb3NlIGEgbWF0cml4JywKICBleGFtcGxlczogWydhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ2FcJycsICdjdHJhbnNwb3NlKGEpJ10sCiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzcXVlZXplJywgJ3N1YnNldCcsICd0cmFjZScsICd6ZXJvcyddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9jcm9zcy5qcwp2YXIgY3Jvc3NEb2NzID0gewogIG5hbWU6ICdjcm9zcycsCiAgY2F0ZWdvcnk6ICdNYXRyaXgnLAogIHN5bnRheDogWydjcm9zcyhBLCBCKSddLAogIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBjcm9zcyBwcm9kdWN0IGZvciB0d28gdmVjdG9ycyBpbiB0aHJlZSBkaW1lbnNpb25hbCBzcGFjZS4nLAogIGV4YW1wbGVzOiBbJ2Nyb3NzKFsxLCAxLCAwXSwgIFswLCAxLCAxXSknLCAnY3Jvc3MoWzMsIC0zLCAxXSwgWzQsIDksIDJdKScsICdjcm9zcyhbMiwgMywgNF0sICBbNSwgNiwgN10pJ10sCiAgc2VlYWxzbzogWydtdWx0aXBseScsICdkb3QnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvY29uY2F0LmpzCnZhciBjb25jYXREb2NzID0gewogIG5hbWU6ICdjb25jYXQnLAogIGNhdGVnb3J5OiAnTWF0cml4JywKICBzeW50YXg6IFsnY29uY2F0KEEsIEIsIEMsIC4uLiknLCAnY29uY2F0KEEsIEIsIEMsIC4uLiwgZGltKSddLAogIGRlc2NyaXB0aW9uOiAnQ29uY2F0ZW5hdGUgbWF0cmljZXMuIEJ5IGRlZmF1bHQsIHRoZSBtYXRyaWNlcyBhcmUgY29uY2F0ZW5hdGVkIGJ5IHRoZSBsYXN0IGRpbWVuc2lvbi4gVGhlIGRpbWVuc2lvbiBvbiB3aGljaCB0byBjb25jYXRlbmF0ZSBjYW4gYmUgcHJvdmlkZWQgYXMgbGFzdCBhcmd1bWVudC4nLAogIGV4YW1wbGVzOiBbJ0EgPSBbMSwgMjsgNSwgNl0nLCAnQiA9IFszLCA0OyA3LCA4XScsICdjb25jYXQoQSwgQiknLCAnY29uY2F0KEEsIEIsIDEpJywgJ2NvbmNhdChBLCBCLCAyKSddLAogIHNlZWFsc286IFsnZGV0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzcXVlZXplJywgJ3N1YnNldCcsICd0cmFjZScsICd0cmFuc3Bvc2UnLCAnemVyb3MnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9sb2dpY2FsL3hvci5qcwp2YXIgeG9yRG9jcyA9IHsKICBuYW1lOiAneG9yJywKICBjYXRlZ29yeTogJ0xvZ2ljYWwnLAogIHN5bnRheDogWyd4IHhvciB5JywgJ3hvcih4LCB5KSddLAogIGRlc2NyaXB0aW9uOiAnTG9naWNhbCBleGNsdXNpdmUgb3IsIHhvci4gVGVzdCB3aGV0aGVyIG9uZSBhbmQgb25seSBvbmUgdmFsdWUgaXMgZGVmaW5lZCB3aXRoIGEgbm9uemVyby9ub25lbXB0eSB2YWx1ZS4nLAogIGV4YW1wbGVzOiBbJ3RydWUgeG9yIGZhbHNlJywgJ2ZhbHNlIHhvciBmYWxzZScsICd0cnVlIHhvciB0cnVlJywgJzAgeG9yIDQnXSwKICBzZWVhbHNvOiBbJ25vdCcsICdhbmQnLCAnb3InXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9sb2dpY2FsL29yLmpzCnZhciBvckRvY3MgPSB7CiAgbmFtZTogJ29yJywKICBjYXRlZ29yeTogJ0xvZ2ljYWwnLAogIHN5bnRheDogWyd4IG9yIHknLCAnb3IoeCwgeSknXSwKICBkZXNjcmlwdGlvbjogJ0xvZ2ljYWwgb3IuIFRlc3QgaWYgYXQgbGVhc3Qgb25lIHZhbHVlIGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuJywKICBleGFtcGxlczogWyd0cnVlIG9yIGZhbHNlJywgJ2ZhbHNlIG9yIGZhbHNlJywgJzAgb3IgNCddLAogIHNlZWFsc286IFsnbm90JywgJ2FuZCcsICd4b3InXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9sb2dpY2FsL25vdC5qcwp2YXIgbm90RG9jcyA9IHsKICBuYW1lOiAnbm90JywKICBjYXRlZ29yeTogJ0xvZ2ljYWwnLAogIHN5bnRheDogWydub3QgeCcsICdub3QoeCknXSwKICBkZXNjcmlwdGlvbjogJ0xvZ2ljYWwgbm90LiBGbGlwcyB0aGUgYm9vbGVhbiB2YWx1ZSBvZiBnaXZlbiBhcmd1bWVudC4nLAogIGV4YW1wbGVzOiBbJ25vdCB0cnVlJywgJ25vdCBmYWxzZScsICdub3QgMicsICdub3QgMCddLAogIHNlZWFsc286IFsnYW5kJywgJ29yJywgJ3hvciddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2xvZ2ljYWwvYW5kLmpzCnZhciBhbmREb2NzID0gewogIG5hbWU6ICdhbmQnLAogIGNhdGVnb3J5OiAnTG9naWNhbCcsCiAgc3ludGF4OiBbJ3ggYW5kIHknLCAnYW5kKHgsIHkpJ10sCiAgZGVzY3JpcHRpb246ICdMb2dpY2FsIGFuZC4gVGVzdCB3aGV0aGVyIHR3byB2YWx1ZXMgYXJlIGJvdGggZGVmaW5lZCB3aXRoIGEgbm9uemVyby9ub25lbXB0eSB2YWx1ZS4nLAogIGV4YW1wbGVzOiBbJ3RydWUgYW5kIGZhbHNlJywgJ3RydWUgYW5kIHRydWUnLCAnMiBhbmQgNCddLAogIHNlZWFsc286IFsnbm90JywgJ29yJywgJ3hvciddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2dlb21ldHJ5L2ludGVyc2VjdC5qcwp2YXIgaW50ZXJzZWN0RG9jcyA9IHsKICBuYW1lOiAnaW50ZXJzZWN0JywKICBjYXRlZ29yeTogJ0dlb21ldHJ5JywKICBzeW50YXg6IFsnaW50ZXJzZWN0KGV4cHIxLCBleHByMiwgZXhwcjMsIGV4cHI0KScsICdpbnRlcnNlY3QoZXhwcjEsIGV4cHIyLCBleHByMyknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXB1dGVzIHRoZSBpbnRlcnNlY3Rpb24gcG9pbnQgb2YgbGluZXMgYW5kL29yIHBsYW5lcy4nLAogIGV4YW1wbGVzOiBbJ2ludGVyc2VjdChbMCwgMF0sIFsxMCwgMTBdLCBbMTAsIDBdLCBbMCwgMTBdKScsICdpbnRlcnNlY3QoWzEsIDAsIDFdLCAgWzQsIC0yLCAyXSwgWzEsIDEsIDEsIDZdKSddLAogIHNlZWFsc286IFtdCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2dlb21ldHJ5L2Rpc3RhbmNlLmpzCnZhciBkaXN0YW5jZURvY3MgPSB7CiAgbmFtZTogJ2Rpc3RhbmNlJywKICBjYXRlZ29yeTogJ0dlb21ldHJ5JywKICBzeW50YXg6IFsnZGlzdGFuY2UoW3gxLCB5MV0sIFt4MiwgeTJdKScsICdkaXN0YW5jZShbW3gxLCB5MV0sIFt4MiwgeTJdXSknXSwKICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZXMgdGhlIEV1Y2xpZGVhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHMuJywKICBleGFtcGxlczogWydkaXN0YW5jZShbMCwwXSwgWzQsNF0pJywgJ2Rpc3RhbmNlKFtbMCwwXSwgWzQsNF1dKSddLAogIHNlZWFsc286IFtdCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2V4cHJlc3Npb24vaGVscC5qcwp2YXIgaGVscERvY3MgPSB7CiAgbmFtZTogJ2hlbHAnLAogIGNhdGVnb3J5OiAnRXhwcmVzc2lvbicsCiAgc3ludGF4OiBbJ2hlbHAob2JqZWN0KScsICdoZWxwKHN0cmluZyknXSwKICBkZXNjcmlwdGlvbjogJ0Rpc3BsYXkgZG9jdW1lbnRhdGlvbiBvbiBhIGZ1bmN0aW9uIG9yIGRhdGEgdHlwZS4nLAogIGV4YW1wbGVzOiBbJ2hlbHAoc3FydCknLCAnaGVscCgiY29tcGxleCIpJ10sCiAgc2VlYWxzbzogW10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vZXhwcmVzc2lvbi9ldmFsdWF0ZS5qcwp2YXIgZXZhbHVhdGVEb2NzID0gewogIG5hbWU6ICdldmFsdWF0ZScsCiAgY2F0ZWdvcnk6ICdFeHByZXNzaW9uJywKICBzeW50YXg6IFsnZXZhbHVhdGUoZXhwcmVzc2lvbiknLCAnZXZhbHVhdGUoW2V4cHIxLCBleHByMiwgZXhwcjMsIC4uLl0pJ10sCiAgZGVzY3JpcHRpb246ICdFdmFsdWF0ZSBhbiBleHByZXNzaW9uIG9yIGFuIGFycmF5IHdpdGggZXhwcmVzc2lvbnMuJywKICBleGFtcGxlczogWydldmFsdWF0ZSgiMiArIDMiKScsICdldmFsdWF0ZSgic3FydCgiICsgNCArICIpIiknXSwKICBzZWVhbHNvOiBbXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9jb21wbGV4L2ltLmpzCnZhciBpbURvY3MgPSB7CiAgbmFtZTogJ2ltJywKICBjYXRlZ29yeTogJ0NvbXBsZXgnLAogIHN5bnRheDogWydpbSh4KSddLAogIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSBpbWFnaW5hcnkgcGFydCBvZiBhIGNvbXBsZXggbnVtYmVyLicsCiAgZXhhbXBsZXM6IFsnaW0oMiArIDNpKScsICdyZSgyICsgM2kpJywgJ2ltKC01LjJpKScsICdpbSgyLjQpJ10sCiAgc2VlYWxzbzogWydyZScsICdjb25qJywgJ2FicycsICdhcmcnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9jb21wbGV4L3JlLmpzCnZhciByZURvY3MgPSB7CiAgbmFtZTogJ3JlJywKICBjYXRlZ29yeTogJ0NvbXBsZXgnLAogIHN5bnRheDogWydyZSh4KSddLAogIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSByZWFsIHBhcnQgb2YgYSBjb21wbGV4IG51bWJlci4nLAogIGV4YW1wbGVzOiBbJ3JlKDIgKyAzaSknLCAnaW0oMiArIDNpKScsICdyZSgtNS4yaSknLCAncmUoMi40KSddLAogIHNlZWFsc286IFsnaW0nLCAnY29uaicsICdhYnMnLCAnYXJnJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tcGxleC9jb25qLmpzCnZhciBjb25qRG9jcyA9IHsKICBuYW1lOiAnY29uaicsCiAgY2F0ZWdvcnk6ICdDb21wbGV4JywKICBzeW50YXg6IFsnY29uaih4KSddLAogIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY29tcGxleCBjb25qdWdhdGUgb2YgYSBjb21wbGV4IHZhbHVlLiBJZiB4ID0gYStiaSwgdGhlIGNvbXBsZXggY29uanVnYXRlIGlzIGEtYmkuJywKICBleGFtcGxlczogWydjb25qKDIgKyAzaSknLCAnY29uaigyIC0gM2kpJywgJ2NvbmooLTUuMmkpJ10sCiAgc2VlYWxzbzogWydyZScsICdpbScsICdhYnMnLCAnYXJnJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tcGxleC9hcmcuanMKdmFyIGFyZ0RvY3MgPSB7CiAgbmFtZTogJ2FyZycsCiAgY2F0ZWdvcnk6ICdDb21wbGV4JywKICBzeW50YXg6IFsnYXJnKHgpJ10sCiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBhcmd1bWVudCBvZiBhIGNvbXBsZXggdmFsdWUuIElmIHggPSBhK2JpLCB0aGUgYXJndW1lbnQgaXMgY29tcHV0ZWQgYXMgYXRhbjIoYiwgYSkuJywKICBleGFtcGxlczogWydhcmcoMiArIDJpKScsICdhdGFuMigzLCAyKScsICdhcmcoMiArIDNpKSddLAogIHNlZWFsc286IFsncmUnLCAnaW0nLCAnY29uaicsICdhYnMnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb3JlL3R5cGVkLmpzCnZhciB0eXBlZERvY3MgPSB7CiAgbmFtZTogJ3R5cGVkJywKICBjYXRlZ29yeTogJ0NvcmUnLAogIHN5bnRheDogWyd0eXBlZChzaWduYXR1cmVzKScsICd0eXBlZChuYW1lLCBzaWduYXR1cmVzKSddLAogIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgdHlwZWQgZnVuY3Rpb24uJywKICBleGFtcGxlczogWydkb3VibGUgPSB0eXBlZCh7ICJudW1iZXIsIG51bWJlciI6IGYoeCk9eCt4IH0pJywgJ2RvdWJsZSgyKScsICdkb3VibGUoImhlbGxvIiknXSwKICBzZWVhbHNvOiBbXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb3JlL2ltcG9ydC5qcwp2YXIgaW1wb3J0RG9jcyA9IHsKICBuYW1lOiAnaW1wb3J0JywKICBjYXRlZ29yeTogJ0NvcmUnLAogIHN5bnRheDogWydpbXBvcnQoZnVuY3Rpb25zKScsICdpbXBvcnQoZnVuY3Rpb25zLCBvcHRpb25zKSddLAogIGRlc2NyaXB0aW9uOiAnSW1wb3J0IGZ1bmN0aW9ucyBvciBjb25zdGFudHMgZnJvbSBhbiBvYmplY3QuJywKICBleGFtcGxlczogWydpbXBvcnQoe215Rm46IGYoeCk9eF4yLCBteUNvbnN0YW50OiAzMiB9KScsICdteUZuKDIpJywgJ215Q29uc3RhbnQnXSwKICBzZWVhbHNvOiBbXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb3JlL2NvbmZpZy5qcwp2YXIgY29uZmlnRG9jcyA9IHsKICBuYW1lOiAnY29uZmlnJywKICBjYXRlZ29yeTogJ0NvcmUnLAogIHN5bnRheDogWydjb25maWcoKScsICdjb25maWcob3B0aW9ucyknXSwKICBkZXNjcmlwdGlvbjogJ0dldCBjb25maWd1cmF0aW9uIG9yIGNoYW5nZSBjb25maWd1cmF0aW9uLicsCiAgZXhhbXBsZXM6IFsnY29uZmlnKCknLCAnMS8zICsgMS80JywgJ2NvbmZpZyh7bnVtYmVyOiAiRnJhY3Rpb24ifSknLCAnMS8zICsgMS80J10sCiAgc2VlYWxzbzogW10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tYmluYXRvcmljcy9zdGlybGluZ1MyLmpzCnZhciBzdGlybGluZ1MyRG9jcyA9IHsKICBuYW1lOiAnc3RpcmxpbmdTMicsCiAgY2F0ZWdvcnk6ICdDb21iaW5hdG9yaWNzJywKICBzeW50YXg6IFsnc3RpcmxpbmdTMihuLCBrKSddLAogIGRlc2NyaXB0aW9uOiAnaGUgU3RpcmxpbmcgbnVtYmVycyBvZiB0aGUgc2Vjb25kIGtpbmQsIGNvdW50cyB0aGUgbnVtYmVyIG9mIHdheXMgdG8gcGFydGl0aW9uIGEgc2V0IG9mIG4gbGFiZWxsZWQgb2JqZWN0cyBpbnRvIGsgbm9uZW1wdHkgdW5sYWJlbGxlZCBzdWJzZXRzLiBgc3RpcmxpbmdTMmAgb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy4gVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogayA8PSBuLiBJZiBuID0gayBvciBrID0gMSwgdGhlbiBzKG4saykgPSAxLicsCiAgZXhhbXBsZXM6IFsnc3RpcmxpbmdTMig1LCAzKSddLAogIHNlZWFsc286IFsnYmVsbE51bWJlcnMnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2NvbXBvc2l0aW9uLmpzCnZhciBjb21wb3NpdGlvbkRvY3MgPSB7CiAgbmFtZTogJ2NvbXBvc2l0aW9uJywKICBjYXRlZ29yeTogJ0NvbWJpbmF0b3JpY3MnLAogIHN5bnRheDogWydjb21wb3NpdGlvbihuLCBrKSddLAogIGRlc2NyaXB0aW9uOiAnVGhlIGNvbXBvc2l0aW9uIGNvdW50cyBvZiBuIGludG8gayBwYXJ0cy4gY29tcG9zaXRpb24gb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy4gVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogayA8PSBuLicsCiAgZXhhbXBsZXM6IFsnY29tcG9zaXRpb24oNSwgMyknXSwKICBzZWVhbHNvOiBbJ2NvbWJpbmF0aW9ucyddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3MvY2F0YWxhbi5qcwp2YXIgY2F0YWxhbkRvY3MgPSB7CiAgbmFtZTogJ2NhdGFsYW4nLAogIGNhdGVnb3J5OiAnQ29tYmluYXRvcmljcycsCiAgc3ludGF4OiBbJ2NhdGFsYW4obiknXSwKICBkZXNjcmlwdGlvbjogJ1RoZSBDYXRhbGFuIE51bWJlcnMgZW51bWVyYXRlIGNvbWJpbmF0b3JpYWwgc3RydWN0dXJlcyBvZiBtYW55IGRpZmZlcmVudCB0eXBlcy4gY2F0YWxhbiBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBuID49IDAuJywKICBleGFtcGxlczogWydjYXRhbGFuKDMpJywgJ2NhdGFsYW4oOCknXSwKICBzZWVhbHNvOiBbJ2JlbGxOdW1iZXJzJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tYmluYXRvcmljcy9iZWxsTnVtYmVycy5qcwp2YXIgYmVsbE51bWJlcnNEb2NzID0gewogIG5hbWU6ICdiZWxsTnVtYmVycycsCiAgY2F0ZWdvcnk6ICdDb21iaW5hdG9yaWNzJywKICBzeW50YXg6IFsnYmVsbE51bWJlcnMobiknXSwKICBkZXNjcmlwdGlvbjogJ1RoZSBCZWxsIE51bWJlcnMgY291bnQgdGhlIG51bWJlciBvZiBwYXJ0aXRpb25zIG9mIGEgc2V0LiBBIHBhcnRpdGlvbiBpcyBhIHBhaXJ3aXNlIGRpc2pvaW50IHN1YnNldCBvZiBTIHdob3NlIHVuaW9uIGlzIFMuIGBiZWxsTnVtYmVyc2Agb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy4gVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogbiA+PSAwLicsCiAgZXhhbXBsZXM6IFsnYmVsbE51bWJlcnMoMyknLCAnYmVsbE51bWJlcnMoOCknXSwKICBzZWVhbHNvOiBbJ3N0aXJsaW5nUzInXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9iaXR3aXNlL3JpZ2h0TG9nU2hpZnQuanMKdmFyIHJpZ2h0TG9nU2hpZnREb2NzID0gewogIG5hbWU6ICdyaWdodExvZ1NoaWZ0JywKICBjYXRlZ29yeTogJ0JpdHdpc2UnLAogIHN5bnRheDogWyd4ID4+PiB5JywgJ3JpZ2h0TG9nU2hpZnQoeCwgeSknXSwKICBkZXNjcmlwdGlvbjogJ0JpdHdpc2UgcmlnaHQgbG9naWNhbCBzaGlmdCBvZiBhIHZhbHVlIHggYnkgeSBudW1iZXIgb2YgYml0cy4nLAogIGV4YW1wbGVzOiBbJzggPj4+IDEnLCAnNCA8PCAxJywgJy0xMiA+Pj4gMiddLAogIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE5vdCcsICdiaXRPcicsICdiaXRYb3InLCAnbGVmdFNoaWZ0JywgJ3JpZ2h0QXJpdGhTaGlmdCddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2JpdHdpc2UvcmlnaHRBcml0aFNoaWZ0LmpzCnZhciByaWdodEFyaXRoU2hpZnREb2NzID0gewogIG5hbWU6ICdyaWdodEFyaXRoU2hpZnQnLAogIGNhdGVnb3J5OiAnQml0d2lzZScsCiAgc3ludGF4OiBbJ3ggPj4geScsICdyaWdodEFyaXRoU2hpZnQoeCwgeSknXSwKICBkZXNjcmlwdGlvbjogJ0JpdHdpc2UgcmlnaHQgYXJpdGhtZXRpYyBzaGlmdCBvZiBhIHZhbHVlIHggYnkgeSBudW1iZXIgb2YgYml0cy4nLAogIGV4YW1wbGVzOiBbJzggPj4gMScsICc0IDw8IDEnLCAnLTEyID4+IDInXSwKICBzZWVhbHNvOiBbJ2JpdEFuZCcsICdiaXROb3QnLCAnYml0T3InLCAnYml0WG9yJywgJ2xlZnRTaGlmdCcsICdyaWdodExvZ1NoaWZ0J10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYml0d2lzZS9sZWZ0U2hpZnQuanMKdmFyIGxlZnRTaGlmdERvY3MgPSB7CiAgbmFtZTogJ2xlZnRTaGlmdCcsCiAgY2F0ZWdvcnk6ICdCaXR3aXNlJywKICBzeW50YXg6IFsneCA8PCB5JywgJ2xlZnRTaGlmdCh4LCB5KSddLAogIGRlc2NyaXB0aW9uOiAnQml0d2lzZSBsZWZ0IGxvZ2ljYWwgc2hpZnQgb2YgYSB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMuJywKICBleGFtcGxlczogWyc0IDw8IDEnLCAnOCA+PiAxJ10sCiAgc2VlYWxzbzogWydiaXRBbmQnLCAnYml0Tm90JywgJ2JpdE9yJywgJ2JpdFhvcicsICdyaWdodEFyaXRoU2hpZnQnLCAncmlnaHRMb2dTaGlmdCddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2JpdHdpc2UvYml0WG9yLmpzCnZhciBiaXRYb3JEb2NzID0gewogIG5hbWU6ICdiaXRYb3InLAogIGNhdGVnb3J5OiAnQml0d2lzZScsCiAgc3ludGF4OiBbJ2JpdFhvcih4LCB5KSddLAogIGRlc2NyaXB0aW9uOiAnQml0d2lzZSBYT1Igb3BlcmF0aW9uLCBleGNsdXNpdmUgT1IuIFBlcmZvcm1zIHRoZSBsb2dpY2FsIGV4Y2x1c2l2ZSBPUiBvcGVyYXRpb24gb24gZWFjaCBwYWlyIG9mIGNvcnJlc3BvbmRpbmcgYml0cyBvZiB0aGUgdHdvIGdpdmVuIHZhbHVlcy4gVGhlIHJlc3VsdCBpbiBlYWNoIHBvc2l0aW9uIGlzIDEgaWYgb25seSB0aGUgZmlyc3QgYml0IGlzIDEgb3Igb25seSB0aGUgc2Vjb25kIGJpdCBpcyAxLCBidXQgd2lsbCBiZSAwIGlmIGJvdGggYXJlIDAgb3IgYm90aCBhcmUgMS4nLAogIGV4YW1wbGVzOiBbJ2JpdE9yKDEsIDIpJywgJ2JpdFhvcihbMiwgMywgNF0sIDQpJ10sCiAgc2VlYWxzbzogWydiaXRBbmQnLCAnYml0Tm90JywgJ2JpdE9yJywgJ2xlZnRTaGlmdCcsICdyaWdodEFyaXRoU2hpZnQnLCAncmlnaHRMb2dTaGlmdCddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2JpdHdpc2UvYml0T3IuanMKdmFyIGJpdE9yRG9jcyA9IHsKICBuYW1lOiAnYml0T3InLAogIGNhdGVnb3J5OiAnQml0d2lzZScsCiAgc3ludGF4OiBbJ3ggfCB5JywgJ2JpdE9yKHgsIHkpJ10sCiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIE9SIG9wZXJhdGlvbi4gUGVyZm9ybXMgdGhlIGxvZ2ljYWwgaW5jbHVzaXZlIE9SIG9wZXJhdGlvbiBvbiBlYWNoIHBhaXIgb2YgY29ycmVzcG9uZGluZyBiaXRzIG9mIHRoZSB0d28gZ2l2ZW4gdmFsdWVzLiBUaGUgcmVzdWx0IGluIGVhY2ggcG9zaXRpb24gaXMgMSBpZiB0aGUgZmlyc3QgYml0IGlzIDEgb3IgdGhlIHNlY29uZCBiaXQgaXMgMSBvciBib3RoIGJpdHMgYXJlIDEsIG90aGVyd2lzZSwgdGhlIHJlc3VsdCBpcyAwLicsCiAgZXhhbXBsZXM6IFsnNSB8IDMnLCAnYml0T3IoWzEsIDIsIDNdLCA0KSddLAogIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE5vdCcsICdiaXRYb3InLCAnbGVmdFNoaWZ0JywgJ3JpZ2h0QXJpdGhTaGlmdCcsICdyaWdodExvZ1NoaWZ0J10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYml0d2lzZS9iaXROb3QuanMKdmFyIGJpdE5vdERvY3MgPSB7CiAgbmFtZTogJ2JpdE5vdCcsCiAgY2F0ZWdvcnk6ICdCaXR3aXNlJywKICBzeW50YXg6IFsnfngnLCAnYml0Tm90KHgpJ10sCiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIE5PVCBvcGVyYXRpb24uIFBlcmZvcm1zIGEgbG9naWNhbCBuZWdhdGlvbiBvbiBlYWNoIGJpdCBvZiB0aGUgZ2l2ZW4gdmFsdWUuIEJpdHMgdGhhdCBhcmUgMCBiZWNvbWUgMSwgYW5kIHRob3NlIHRoYXQgYXJlIDEgYmVjb21lIDAuJywKICBleGFtcGxlczogWyd+MScsICd+MicsICdiaXROb3QoWzIsIC0zLCA0XSknXSwKICBzZWVhbHNvOiBbJ2JpdEFuZCcsICdiaXRPcicsICdiaXRYb3InLCAnbGVmdFNoaWZ0JywgJ3JpZ2h0QXJpdGhTaGlmdCcsICdyaWdodExvZ1NoaWZ0J10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYml0d2lzZS9iaXRBbmQuanMKdmFyIGJpdEFuZERvY3MgPSB7CiAgbmFtZTogJ2JpdEFuZCcsCiAgY2F0ZWdvcnk6ICdCaXR3aXNlJywKICBzeW50YXg6IFsneCAmIHknLCAnYml0QW5kKHgsIHkpJ10sCiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIEFORCBvcGVyYXRpb24uIFBlcmZvcm1zIHRoZSBsb2dpY2FsIEFORCBvcGVyYXRpb24gb24gZWFjaCBwYWlyIG9mIHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgb2YgdGhlIHR3byBnaXZlbiB2YWx1ZXMgYnkgbXVsdGlwbHlpbmcgdGhlbS4gSWYgYm90aCBiaXRzIGluIHRoZSBjb21wYXJlZCBwb3NpdGlvbiBhcmUgMSwgdGhlIGJpdCBpbiB0aGUgcmVzdWx0aW5nIGJpbmFyeSByZXByZXNlbnRhdGlvbiBpcyAxLCBvdGhlcndpc2UsIHRoZSByZXN1bHQgaXMgMCcsCiAgZXhhbXBsZXM6IFsnNSAmIDMnLCAnYml0QW5kKDUzLCAxMzEpJywgJ1sxLCAxMiwgMzFdICYgNDInXSwKICBzZWVhbHNvOiBbJ2JpdE5vdCcsICdiaXRPcicsICdiaXRYb3InLCAnbGVmdFNoaWZ0JywgJ3JpZ2h0QXJpdGhTaGlmdCcsICdyaWdodExvZ1NoaWZ0J10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy94Z2NkLmpzCnZhciB4Z2NkRG9jcyA9IHsKICBuYW1lOiAneGdjZCcsCiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJywKICBzeW50YXg6IFsneGdjZChhLCBiKSddLAogIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBleHRlbmRlZCBncmVhdGVzdCBjb21tb24gZGl2aXNvciBmb3IgdHdvIHZhbHVlcy4gVGhlIHJlc3VsdCBpcyBhbiBhcnJheSBbZCwgeCwgeV0gd2l0aCAzIGVudHJpZXMsIHdoZXJlIGQgaXMgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yLCBhbmQgZCA9IHggKiBhICsgeSAqIGIuJywKICBleGFtcGxlczogWyd4Z2NkKDgsIDEyKScsICdnY2QoOCwgMTIpJywgJ3hnY2QoMzYxNjMsIDIxMTk5KSddLAogIHNlZWFsc286IFsnZ2NkJywgJ2xjbSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvdW5hcnlQbHVzLmpzCnZhciB1bmFyeVBsdXNEb2NzID0gewogIG5hbWU6ICd1bmFyeVBsdXMnLAogIGNhdGVnb3J5OiAnT3BlcmF0b3JzJywKICBzeW50YXg6IFsnK3gnLCAndW5hcnlQbHVzKHgpJ10sCiAgZGVzY3JpcHRpb246ICdDb252ZXJ0cyBib29sZWFucyBhbmQgc3RyaW5ncyB0byBudW1iZXJzLicsCiAgZXhhbXBsZXM6IFsnK3RydWUnLCAnKyIyIiddLAogIHNlZWFsc286IFsnYWRkJywgJ3N1YnRyYWN0JywgJ3VuYXJ5TWludXMnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5TWludXMuanMKdmFyIHVuYXJ5TWludXNEb2NzID0gewogIG5hbWU6ICd1bmFyeU1pbnVzJywKICBjYXRlZ29yeTogJ09wZXJhdG9ycycsCiAgc3ludGF4OiBbJy14JywgJ3VuYXJ5TWludXMoeCknXSwKICBkZXNjcmlwdGlvbjogJ0ludmVyc2UgdGhlIHNpZ24gb2YgYSB2YWx1ZS4gQ29udmVydHMgYm9vbGVhbnMgYW5kIHN0cmluZ3MgdG8gbnVtYmVycy4nLAogIGV4YW1wbGVzOiBbJy00LjUnLCAnLSgtNS42KScsICctIjIyIiddLAogIHNlZWFsc286IFsnYWRkJywgJ3N1YnRyYWN0JywgJ3VuYXJ5UGx1cyddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3F1YXJlLmpzCnZhciBzcXVhcmVEb2NzID0gewogIG5hbWU6ICdzcXVhcmUnLAogIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsCiAgc3ludGF4OiBbJ3NxdWFyZSh4KSddLAogIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgc3F1YXJlIG9mIGEgdmFsdWUuIFRoZSBzcXVhcmUgb2YgeCBpcyB4ICogeC4nLAogIGV4YW1wbGVzOiBbJ3NxdWFyZSgzKScsICdzcXJ0KDkpJywgJzNeMicsICczICogMyddLAogIHNlZWFsc286IFsnbXVsdGlwbHknLCAncG93JywgJ3NxcnQnLCAnY3ViZSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3FydG0uanMKdmFyIHNxcnRtRG9jcyA9IHsKICBuYW1lOiAnc3FydG0nLAogIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsCiAgc3ludGF4OiBbJ3NxcnRtKHgpJ10sCiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIHByaW5jaXBhbCBzcXVhcmUgcm9vdCBvZiBhIHNxdWFyZSBtYXRyaXguIFRoZSBwcmluY2lwYWwgc3F1YXJlIHJvb3QgbWF0cml4IGBYYCBvZiBhbm90aGVyIG1hdHJpeCBgQWAgaXMgc3VjaCB0aGF0IGBYICogWCA9IEFgLicsCiAgZXhhbXBsZXM6IFsnc3FydG0oW1sxLCAyXSwgWzMsIDRdXSknXSwKICBzZWVhbHNvOiBbJ3NxcnQnLCAnYWJzJywgJ3NxdWFyZScsICdtdWx0aXBseSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3FydC5qcwp2YXIgc3FydERvY3MgPSB7CiAgbmFtZTogJ3NxcnQnLAogIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsCiAgc3ludGF4OiBbJ3NxcnQoeCknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHNxdWFyZSByb290IHZhbHVlLiBJZiB4ID0geSAqIHksIHRoZW4geSBpcyB0aGUgc3F1YXJlIHJvb3Qgb2YgeC4nLAogIGV4YW1wbGVzOiBbJ3NxcnQoMjUpJywgJzUgKiA1JywgJ3NxcnQoLTEpJ10sCiAgc2VlYWxzbzogWydzcXVhcmUnLCAnc3FydG0nLCAnbXVsdGlwbHknLCAnbnRoUm9vdCcsICdudGhSb290cycsICdwb3cnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL3NpZ24uanMKdmFyIHNpZ25Eb2NzID0gewogIG5hbWU6ICdzaWduJywKICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLAogIHN5bnRheDogWydzaWduKHgpJ10sCiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBzaWduIG9mIGEgdmFsdWUuIFRoZSBzaWduIG9mIGEgdmFsdWUgeCBpcyAxIHdoZW4geD4xLCAtMSB3aGVuIHg8MCwgYW5kIDAgd2hlbiB4PTAuJywKICBleGFtcGxlczogWydzaWduKDMuNSknLCAnc2lnbigtNC4yKScsICdzaWduKDApJ10sCiAgc2VlYWxzbzogWydhYnMnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL3JvdW5kLmpzCnZhciByb3VuZERvY3MgPSB7CiAgbmFtZTogJ3JvdW5kJywKICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLAogIHN5bnRheDogWydyb3VuZCh4KScsICdyb3VuZCh4LCBuKSddLAogIGRlc2NyaXB0aW9uOiAncm91bmQgYSB2YWx1ZSB0b3dhcmRzIHRoZSBuZWFyZXN0IGludGVnZXIuSWYgeCBpcyBjb21wbGV4LCBib3RoIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0IGFyZSByb3VuZGVkIHRvd2FyZHMgdGhlIG5lYXJlc3QgaW50ZWdlci4gV2hlbiBuIGlzIHNwZWNpZmllZCwgdGhlIHZhbHVlIGlzIHJvdW5kZWQgdG8gbiBkZWNpbWFscy4nLAogIGV4YW1wbGVzOiBbJ3JvdW5kKDMuMiknLCAncm91bmQoMy44KScsICdyb3VuZCgtNC4yKScsICdyb3VuZCgtNC44KScsICdyb3VuZChwaSwgMyknLCAncm91bmQoMTIzLjQ1Njc4LCAyKSddLAogIHNlZWFsc286IFsnY2VpbCcsICdmbG9vcicsICdmaXgnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL3Bvdy5qcwp2YXIgcG93RG9jcyA9IHsKICBuYW1lOiAncG93JywKICBjYXRlZ29yeTogJ09wZXJhdG9ycycsCiAgc3ludGF4OiBbJ3ggXiB5JywgJ3Bvdyh4LCB5KSddLAogIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlcyB0aGUgcG93ZXIgb2YgeCB0byB5LCB4XnkuJywKICBleGFtcGxlczogWycyXjMnLCAnMioyKjInLCAnMSArIGUgXiAocGkgKiBpKSddLAogIHNlZWFsc286IFsnbXVsdGlwbHknLCAnbnRoUm9vdCcsICdudGhSb290cycsICdzcXJ0J10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9udGhSb290cy5qcwp2YXIgbnRoUm9vdHNEb2NzID0gewogIG5hbWU6ICdudGhSb290cycsCiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJywKICBzeW50YXg6IFsnbnRoUm9vdHMoQSknLCAnbnRoUm9vdHMoQSwgcm9vdCknXSwKICBkZXNjcmlwdGlvbjogJycgKyAnQ2FsY3VsYXRlIHRoZSBudGggcm9vdHMgb2YgYSB2YWx1ZS4gJyArICdBbiBudGggcm9vdCBvZiBhIHBvc2l0aXZlIHJlYWwgbnVtYmVyIEEsICcgKyAnaXMgYSBwb3NpdGl2ZSByZWFsIHNvbHV0aW9uIG9mIHRoZSBlcXVhdGlvbiAieF5yb290ID0gQSIuICcgKyAnVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGFycmF5IG9mIGNvbXBsZXggdmFsdWVzLicsCiAgZXhhbXBsZXM6IFsnbnRoUm9vdHMoMSknLCAnbnRoUm9vdHMoMSwgMyknXSwKICBzZWVhbHNvOiBbJ3NxcnQnLCAncG93JywgJ250aFJvb3QnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3QuanMKdmFyIG50aFJvb3REb2NzID0gewogIG5hbWU6ICdudGhSb290JywKICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLAogIHN5bnRheDogWydudGhSb290KGEpJywgJ250aFJvb3QoYSwgcm9vdCknXSwKICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgbnRoIHJvb3Qgb2YgYSB2YWx1ZS4gJyArICdUaGUgcHJpbmNpcGFsIG50aCByb290IG9mIGEgcG9zaXRpdmUgcmVhbCBudW1iZXIgQSwgJyArICdpcyB0aGUgcG9zaXRpdmUgcmVhbCBzb2x1dGlvbiBvZiB0aGUgZXF1YXRpb24gInhecm9vdCA9IEEiLicsCiAgZXhhbXBsZXM6IFsnNCBeIDMnLCAnbnRoUm9vdCg2NCwgMyknLCAnbnRoUm9vdCg5LCAyKScsICdzcXJ0KDkpJ10sCiAgc2VlYWxzbzogWydudGhSb290cycsICdwb3cnLCAnc3FydCddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbm9ybS5qcwp2YXIgbm9ybURvY3MgPSB7CiAgbmFtZTogJ25vcm0nLAogIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsCiAgc3ludGF4OiBbJ25vcm0oeCknLCAnbm9ybSh4LCBwKSddLAogIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBub3JtIG9mIGEgbnVtYmVyLCB2ZWN0b3Igb3IgbWF0cml4LicsCiAgZXhhbXBsZXM6IFsnYWJzKC0zLjUpJywgJ25vcm0oLTMuNSknLCAnbm9ybSgzIC0gNGkpJywgJ25vcm0oWzEsIDIsIC0zXSwgSW5maW5pdHkpJywgJ25vcm0oWzEsIDIsIC0zXSwgLUluZmluaXR5KScsICdub3JtKFszLCA0XSwgMiknLCAnbm9ybShbWzEsIDJdLCBbMywgNF1dLCAxKScsICdub3JtKFtbMSwgMl0sIFszLCA0XV0sICJpbmYiKScsICdub3JtKFtbMSwgMl0sIFszLCA0XV0sICJmcm8iKSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbXVsdGlwbHkuanMKdmFyIG11bHRpcGx5RG9jcyA9IHsKICBuYW1lOiAnbXVsdGlwbHknLAogIGNhdGVnb3J5OiAnT3BlcmF0b3JzJywKICBzeW50YXg6IFsneCAqIHknLCAnbXVsdGlwbHkoeCwgeSknXSwKICBkZXNjcmlwdGlvbjogJ211bHRpcGx5IHR3byB2YWx1ZXMuJywKICBleGFtcGxlczogWydhID0gMi4xICogMy40JywgJ2EgLyAzLjQnLCAnMiAqIDMgKyA0JywgJzIgKiAoMyArIDQpJywgJzMgKiAyLjEga20nXSwKICBzZWVhbHNvOiBbJ2RpdmlkZSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbW9kLmpzCnZhciBtb2REb2NzID0gewogIG5hbWU6ICdtb2QnLAogIGNhdGVnb3J5OiAnT3BlcmF0b3JzJywKICBzeW50YXg6IFsneCAlIHknLCAneCBtb2QgeScsICdtb2QoeCwgeSknXSwKICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZXMgdGhlIG1vZHVsdXMsIHRoZSByZW1haW5kZXIgb2YgYW4gaW50ZWdlciBkaXZpc2lvbi4nLAogIGV4YW1wbGVzOiBbJzcgJSAzJywgJzExICUgMicsICcxMCBtb2QgNCcsICdpc09kZCh4KSA9IHggJSAyJywgJ2lzT2RkKDIpJywgJ2lzT2RkKDMpJ10sCiAgc2VlYWxzbzogWydkaXZpZGUnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2xvZzEwLmpzCnZhciBsb2cxMERvY3MgPSB7CiAgbmFtZTogJ2xvZzEwJywKICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLAogIHN5bnRheDogWydsb2cxMCh4KSddLAogIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgMTAtYmFzZSBsb2dhcml0aG0gb2YgYSB2YWx1ZS4nLAogIGV4YW1wbGVzOiBbJ2xvZzEwKDAuMDAwMDEpJywgJ2xvZzEwKDEwMDAwKScsICcxMCBeIDQnLCAnbG9nKDEwMDAwKSAvIGxvZygxMCknLCAnbG9nKDEwMDAwLCAxMCknXSwKICBzZWVhbHNvOiBbJ2V4cCcsICdsb2cnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2xvZzFwLmpzCnZhciBsb2cxcERvY3MgPSB7CiAgbmFtZTogJ2xvZzFwJywKICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLAogIHN5bnRheDogWydsb2cxcCh4KScsICdsb2cxcCh4LCBiYXNlKSddLAogIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBsb2dhcml0aG0gb2YgYSBgdmFsdWUrMWAnLAogIGV4YW1wbGVzOiBbJ2xvZzFwKDIuNSknLCAnZXhwKGxvZzFwKDEuNCkpJywgJ3BvdygxMCwgNCknLCAnbG9nMXAoOTk5OSwgMTApJywgJ2xvZzFwKDk5OTkpIC8gbG9nKDEwKSddLAogIHNlZWFsc286IFsnZXhwJywgJ2xvZycsICdsb2cyJywgJ2xvZzEwJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2cyLmpzCnZhciBsb2cyRG9jcyA9IHsKICBuYW1lOiAnbG9nMicsCiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJywKICBzeW50YXg6IFsnbG9nMih4KSddLAogIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSAyLWJhc2Ugb2YgYSB2YWx1ZS4gVGhpcyBpcyB0aGUgc2FtZSBhcyBjYWxjdWxhdGluZyBgbG9nKHgsIDIpYC4nLAogIGV4YW1wbGVzOiBbJ2xvZzIoMC4wMzEyNSknLCAnbG9nMigxNiknLCAnbG9nMigxNikgLyBsb2cyKDIpJywgJ3BvdygyLCA0KSddLAogIHNlZWFsc286IFsnZXhwJywgJ2xvZzFwJywgJ2xvZycsICdsb2cxMCddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nLmpzCnZhciBsb2dEb2NzID0gewogIG5hbWU6ICdsb2cnLAogIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsCiAgc3ludGF4OiBbJ2xvZyh4KScsICdsb2coeCwgYmFzZSknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGxvZ2FyaXRobSBvZiBhIHZhbHVlLiBJZiBubyBiYXNlIGlzIHByb3ZpZGVkLCB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgeCBpcyBjYWxjdWxhdGVkLiBJZiBiYXNlIGlmIHByb3ZpZGVkLCB0aGUgbG9nYXJpdGhtIGlzIGNhbGN1bGF0ZWQgZm9yIHRoZSBzcGVjaWZpZWQgYmFzZS4gbG9nKHgsIGJhc2UpIGlzIGRlZmluZWQgYXMgbG9nKHgpIC8gbG9nKGJhc2UpLicsCiAgZXhhbXBsZXM6IFsnbG9nKDMuNSknLCAnYSA9IGxvZygyLjQpJywgJ2V4cChhKScsICcxMCBeIDQnLCAnbG9nKDEwMDAwLCAxMCknLCAnbG9nKDEwMDAwKSAvIGxvZygxMCknLCAnYiA9IGxvZygxMDI0LCAyKScsICcyIF4gYiddLAogIHNlZWFsc286IFsnZXhwJywgJ2xvZzFwJywgJ2xvZzInLCAnbG9nMTAnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2xjbS5qcwp2YXIgbGNtRG9jcyA9IHsKICBuYW1lOiAnbGNtJywKICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLAogIHN5bnRheDogWydsY20oeCwgeSknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGxlYXN0IGNvbW1vbiBtdWx0aXBsZS4nLAogIGV4YW1wbGVzOiBbJ2xjbSg0LCA2KScsICdsY20oNiwgMjEpJywgJ2xjbSg2LCAyMSwgNSknXSwKICBzZWVhbHNvOiBbJ2djZCddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvaHlwb3QuanMKdmFyIGh5cG90RG9jcyA9IHsKICBuYW1lOiAnaHlwb3QnLAogIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsCiAgc3ludGF4OiBbJ2h5cG90KGEsIGIsIGMsIC4uLiknLCAnaHlwb3QoW2EsIGIsIGMsIC4uLl0pJ10sCiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGh5cG90ZW51c2Egb2YgYSBsaXN0IHdpdGggdmFsdWVzLiAnLAogIGV4YW1wbGVzOiBbJ2h5cG90KDMsIDQpJywgJ3NxcnQoM14yICsgNF4yKScsICdoeXBvdCgtMiknLCAnaHlwb3QoWzMsIDQsIDVdKSddLAogIHNlZWFsc286IFsnYWJzJywgJ25vcm0nXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2djZC5qcwp2YXIgZ2NkRG9jcyA9IHsKICBuYW1lOiAnZ2NkJywKICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLAogIHN5bnRheDogWydnY2QoYSwgYiknLCAnZ2NkKGEsIGIsIGMsIC4uLiknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yLicsCiAgZXhhbXBsZXM6IFsnZ2NkKDgsIDEyKScsICdnY2QoLTQsIDYpJywgJ2djZCgyNSwgMTUsIC0xMCknXSwKICBzZWVhbHNvOiBbJ2xjbScsICd4Z2NkJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9mbG9vci5qcwp2YXIgZmxvb3JEb2NzID0gewogIG5hbWU6ICdmbG9vcicsCiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJywKICBzeW50YXg6IFsnZmxvb3IoeCknXSwKICBkZXNjcmlwdGlvbjogJ1JvdW5kIGEgdmFsdWUgdG93YXJkcyBtaW51cyBpbmZpbml0eS5JZiB4IGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyBtaW51cyBpbmZpbml0eS4nLAogIGV4YW1wbGVzOiBbJ2Zsb29yKDMuMiknLCAnZmxvb3IoMy44KScsICdmbG9vcigtNC4yKSddLAogIHNlZWFsc286IFsnY2VpbCcsICdmaXgnLCAncm91bmQnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2ZpeC5qcwp2YXIgZml4RG9jcyA9IHsKICBuYW1lOiAnZml4JywKICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLAogIHN5bnRheDogWydmaXgoeCknXSwKICBkZXNjcmlwdGlvbjogJ1JvdW5kIGEgdmFsdWUgdG93YXJkcyB6ZXJvLiBJZiB4IGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyB6ZXJvLicsCiAgZXhhbXBsZXM6IFsnZml4KDMuMiknLCAnZml4KDMuOCknLCAnZml4KC00LjIpJywgJ2ZpeCgtNC44KSddLAogIHNlZWFsc286IFsnY2VpbCcsICdmbG9vcicsICdyb3VuZCddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbTEuanMKdmFyIGV4cG0xRG9jcyA9IHsKICBuYW1lOiAnZXhwbTEnLAogIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsCiAgc3ludGF4OiBbJ2V4cG0xKHgpJ10sCiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIHZhbHVlIG9mIHN1YnRyYWN0aW5nIDEgZnJvbSB0aGUgZXhwb25lbnRpYWwgdmFsdWUuJywKICBleGFtcGxlczogWydleHBtMSgyKScsICdwb3coZSwgMikgLSAxJywgJ2xvZyhleHBtMSgyKSArIDEpJ10sCiAgc2VlYWxzbzogWydleHAnLCAncG93JywgJ2xvZyddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbS5qcwp2YXIgZXhwbURvY3MgPSB7CiAgbmFtZTogJ2V4cG0nLAogIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsCiAgc3ludGF4OiBbJ2V4cCh4KSddLAogIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgbWF0cml4IGV4cG9uZW50aWFsLCBleHBtKEEpID0gZV5BLiAnICsgJ1RoZSBtYXRyaXggbXVzdCBiZSBzcXVhcmUuICcgKyAnTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggZXhwKGEpLCB3aGljaCBwZXJmb3JtcyBlbGVtZW50LXdpc2UgZXhwb25lbnRpYXRpb24uJywKICBleGFtcGxlczogWydleHBtKFtbMCwyXSxbMCwwXV0pJ10sCiAgc2VlYWxzbzogWydleHAnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvZWlncy5qcwp2YXIgZWlnc0RvY3MgPSB7CiAgbmFtZTogJ2VpZ3MnLAogIGNhdGVnb3J5OiAnTWF0cml4JywKICBzeW50YXg6IFsnZWlncyh4KSddLAogIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBlaWdlbnZhbHVlcyBhbmQgZWlnZW52ZWN0b3JzIG9mIGEgcmVhbCBzeW1tZXRyaWMgbWF0cml4JywKICBleGFtcGxlczogWydlaWdzKFtbNSwgMi4zXSwgWzIuMywgMV1dKSddLAogIHNlZWFsc286IFsnaW52J10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9leHAuanMKdmFyIGV4cERvY3MgPSB7CiAgbmFtZTogJ2V4cCcsCiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJywKICBzeW50YXg6IFsnZXhwKHgpJ10sCiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGV4cG9uZW50IG9mIGEgdmFsdWUuJywKICBleGFtcGxlczogWydleHAoMS4zKScsICdlIF4gMS4zJywgJ2xvZyhleHAoMS4zKSknLCAneCA9IDIuNCcsICcoZXhwKGkqeCkgPT0gY29zKHgpICsgaSpzaW4oeCkpICAgIyBFdWxlclwncyBmb3JtdWxhJ10sCiAgc2VlYWxzbzogWydleHBtJywgJ2V4cG0xJywgJ3BvdycsICdsb2cnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2RvdE11bHRpcGx5LmpzCnZhciBkb3RNdWx0aXBseURvY3MgPSB7CiAgbmFtZTogJ2RvdE11bHRpcGx5JywKICBjYXRlZ29yeTogJ09wZXJhdG9ycycsCiAgc3ludGF4OiBbJ3ggLiogeScsICdkb3RNdWx0aXBseSh4LCB5KSddLAogIGRlc2NyaXB0aW9uOiAnTXVsdGlwbHkgdHdvIHZhbHVlcyBlbGVtZW50IHdpc2UuJywKICBleGFtcGxlczogWydhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ2IgPSBbMiwgMSwgMTsgMywgMiwgNV0nLCAnYSAuKiBiJ10sCiAgc2VlYWxzbzogWydtdWx0aXBseScsICdkaXZpZGUnLCAnZG90RGl2aWRlJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3REaXZpZGUuanMKdmFyIGRvdERpdmlkZURvY3MgPSB7CiAgbmFtZTogJ2RvdERpdmlkZScsCiAgY2F0ZWdvcnk6ICdPcGVyYXRvcnMnLAogIHN5bnRheDogWyd4IC4vIHknLCAnZG90RGl2aWRlKHgsIHkpJ10sCiAgZGVzY3JpcHRpb246ICdEaXZpZGUgdHdvIHZhbHVlcyBlbGVtZW50IHdpc2UuJywKICBleGFtcGxlczogWydhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ2IgPSBbMiwgMSwgMTsgMywgMiwgNV0nLCAnYSAuLyBiJ10sCiAgc2VlYWxzbzogWydtdWx0aXBseScsICdkb3RNdWx0aXBseScsICdkaXZpZGUnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2RpdmlkZS5qcwp2YXIgZGl2aWRlRG9jcyA9IHsKICBuYW1lOiAnZGl2aWRlJywKICBjYXRlZ29yeTogJ09wZXJhdG9ycycsCiAgc3ludGF4OiBbJ3ggLyB5JywgJ2RpdmlkZSh4LCB5KSddLAogIGRlc2NyaXB0aW9uOiAnRGl2aWRlIHR3byB2YWx1ZXMuJywKICBleGFtcGxlczogWydhID0gMiAvIDMnLCAnYSAqIDMnLCAnNC41IC8gMicsICczICsgNCAvIDInLCAnKDMgKyA0KSAvIDInLCAnMTgga20gLyA0LjUnXSwKICBzZWVhbHNvOiBbJ211bHRpcGx5J10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9jdWJlLmpzCnZhciBjdWJlRG9jcyA9IHsKICBuYW1lOiAnY3ViZScsCiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJywKICBzeW50YXg6IFsnY3ViZSh4KSddLAogIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY3ViZSBvZiBhIHZhbHVlLiBUaGUgY3ViZSBvZiB4IGlzIHggKiB4ICogeC4nLAogIGV4YW1wbGVzOiBbJ2N1YmUoMiknLCAnMl4zJywgJzIgKiAyICogMiddLAogIHNlZWFsc286IFsnbXVsdGlwbHknLCAnc3F1YXJlJywgJ3BvdyddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2VpbC5qcwp2YXIgY2VpbERvY3MgPSB7CiAgbmFtZTogJ2NlaWwnLAogIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsCiAgc3ludGF4OiBbJ2NlaWwoeCknXSwKICBkZXNjcmlwdGlvbjogJ1JvdW5kIGEgdmFsdWUgdG93YXJkcyBwbHVzIGluZmluaXR5LiBJZiB4IGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyBwbHVzIGluZmluaXR5LicsCiAgZXhhbXBsZXM6IFsnY2VpbCgzLjIpJywgJ2NlaWwoMy44KScsICdjZWlsKC00LjIpJ10sCiAgc2VlYWxzbzogWydmbG9vcicsICdmaXgnLCAncm91bmQnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2NicnQuanMKdmFyIGNicnREb2NzID0gewogIG5hbWU6ICdjYnJ0JywKICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLAogIHN5bnRheDogWydjYnJ0KHgpJywgJ2NicnQoeCwgYWxsUm9vdHMpJ10sCiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBjdWJpYyByb290IHZhbHVlLiBJZiB4ID0geSAqIHkgKiB5LCB0aGVuIHkgaXMgdGhlIGN1YmljIHJvb3Qgb2YgeC4gV2hlbiBgeGAgaXMgYSBudW1iZXIgb3IgY29tcGxleCBudW1iZXIsIGFuIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBgYWxsUm9vdHNgIGNhbiBiZSBwcm92aWRlZCB0byByZXR1cm4gYWxsIHRocmVlIGN1YmljIHJvb3RzLiBJZiBub3QgcHJvdmlkZWQsIHRoZSBwcmluY2lwYWwgcm9vdCBpcyByZXR1cm5lZCcsCiAgZXhhbXBsZXM6IFsnY2JydCg2NCknLCAnY3ViZSg0KScsICdjYnJ0KC04KScsICdjYnJ0KDIgKyAzaSknLCAnY2JydCg4aSknLCAnY2JydCg4aSwgdHJ1ZSknLCAnY2JydCgyNyBtXjMpJ10sCiAgc2VlYWxzbzogWydzcXVhcmUnLCAnc3FydCcsICdjdWJlJywgJ211bHRpcGx5J10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9hZGQuanMKdmFyIGFkZERvY3MgPSB7CiAgbmFtZTogJ2FkZCcsCiAgY2F0ZWdvcnk6ICdPcGVyYXRvcnMnLAogIHN5bnRheDogWyd4ICsgeScsICdhZGQoeCwgeSknXSwKICBkZXNjcmlwdGlvbjogJ0FkZCB0d28gdmFsdWVzLicsCiAgZXhhbXBsZXM6IFsnYSA9IDIuMSArIDMuNicsICdhIC0gMy42JywgJzMgKyAyaScsICczIGNtICsgMiBpbmNoJywgJyIyLjMiICsgIjQiJ10sCiAgc2VlYWxzbzogWydzdWJ0cmFjdCddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWJzLmpzCnZhciBhYnNEb2NzID0gewogIG5hbWU6ICdhYnMnLAogIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsCiAgc3ludGF4OiBbJ2Ficyh4KSddLAogIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgYWJzb2x1dGUgdmFsdWUuJywKICBleGFtcGxlczogWydhYnMoMy41KScsICdhYnMoLTQuMiknXSwKICBzZWVhbHNvOiBbJ3NpZ24nXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hbGdlYnJhL3FyLmpzCnZhciBxckRvY3MgPSB7CiAgbmFtZTogJ3FyJywKICBjYXRlZ29yeTogJ0FsZ2VicmEnLAogIHN5bnRheDogWydxcihBKSddLAogIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlcyB0aGUgTWF0cml4IFFSIGRlY29tcG9zaXRpb24uIE1hdHJpeCBgQWAgaXMgZGVjb21wb3NlZCBpbiB0d28gbWF0cmljZXMgKGBRYCwgYFJgKSB3aGVyZSBgUWAgaXMgYW4gb3J0aG9nb25hbCBtYXRyaXggYW5kIGBSYCBpcyBhbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeC4nLAogIGV4YW1wbGVzOiBbJ3FyKFtbMSwgLTEsICA0XSwgWzEsICA0LCAtMl0sIFsxLCAgNCwgIDJdLCBbMSwgIC0xLCAwXV0pJ10sCiAgc2VlYWxzbzogWydsdXAnLCAnc2x1JywgJ21hdHJpeCddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvdXNvbHZlLmpzCnZhciB1c29sdmVEb2NzID0gewogIG5hbWU6ICd1c29sdmUnLAogIGNhdGVnb3J5OiAnQWxnZWJyYScsCiAgc3ludGF4OiBbJ3g9dXNvbHZlKFUsIGIpJ10sCiAgZGVzY3JpcHRpb246ICdTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gVSAqIHggPSBiIHdoZXJlIFUgaXMgYW4gW24geCBuXSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeCBhbmQgYiBpcyBhIFtuXSBjb2x1bW4gdmVjdG9yLicsCiAgZXhhbXBsZXM6IFsneD11c29sdmUoc3BhcnNlKFsxLCAxLCAxLCAxOyAwLCAxLCAxLCAxOyAwLCAwLCAxLCAxOyAwLCAwLCAwLCAxXSksIFsxOyAyOyAzOyA0XSknXSwKICBzZWVhbHNvOiBbJ2x1cCcsICdsdXNvbHZlJywgJ2xzb2x2ZScsICdtYXRyaXgnLCAnc3BhcnNlJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYWxnZWJyYS9zbHUuanMKdmFyIHNsdURvY3MgPSB7CiAgbmFtZTogJ3NsdScsCiAgY2F0ZWdvcnk6ICdBbGdlYnJhJywKICBzeW50YXg6IFsnc2x1KEEsIG9yZGVyLCB0aHJlc2hvbGQpJ10sCiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIE1hdHJpeCBMVSBkZWNvbXBvc2l0aW9uIHdpdGggZnVsbCBwaXZvdGluZy4gTWF0cml4IEEgaXMgZGVjb21wb3NlZCBpbiB0d28gbWF0cmljZXMgKEwsIFUpIGFuZCB0d28gcGVybXV0YXRpb24gdmVjdG9ycyAocGludiwgcSkgd2hlcmUgUCAqIEEgKiBRID0gTCAqIFUnLAogIGV4YW1wbGVzOiBbJ3NsdShzcGFyc2UoWzQuNSwgMCwgMy4yLCAwOyAzLjEsIDIuOSwgMCwgMC45OyAwLCAxLjcsIDMsIDA7IDMuNSwgMC40LCAwLCAxXSksIDEsIDAuMDAxKSddLAogIHNlZWFsc286IFsnbHVzb2x2ZScsICdsc29sdmUnLCAndXNvbHZlJywgJ21hdHJpeCcsICdzcGFyc2UnLCAnbHVwJywgJ3FyJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYWxnZWJyYS9yYXRpb25hbGl6ZS5qcwp2YXIgcmF0aW9uYWxpemVEb2NzID0gewogIG5hbWU6ICdyYXRpb25hbGl6ZScsCiAgY2F0ZWdvcnk6ICdBbGdlYnJhJywKICBzeW50YXg6IFsncmF0aW9uYWxpemUoZXhwciknLCAncmF0aW9uYWxpemUoZXhwciwgc2NvcGUpJywgJ3JhdGlvbmFsaXplKGV4cHIsIHNjb3BlLCBkZXRhaWxlZCknXSwKICBkZXNjcmlwdGlvbjogJ1RyYW5zZm9ybSBhIHJhdGlvbmFsaXphYmxlIGV4cHJlc3Npb24gaW4gYSByYXRpb25hbCBmcmFjdGlvbi4gSWYgcmF0aW9uYWwgZnJhY3Rpb24gaXMgb25lIHZhcmlhYmxlIHBvbHlub21pYWwgdGhlbiBjb252ZXJ0cyB0aGUgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciBpbiBjYW5vbmljYWwgZm9ybSwgd2l0aCBkZWNyZWFzaW5nIGV4cG9uZW50cywgcmV0dXJuaW5nIHRoZSBjb2VmZmljaWVudHMgb2YgbnVtZXJhdG9yLicsCiAgZXhhbXBsZXM6IFsncmF0aW9uYWxpemUoIjJ4L3kgLSB5Lyh4KzEpIiknLCAncmF0aW9uYWxpemUoIjJ4L3kgLSB5Lyh4KzEpIiwgdHJ1ZSknXSwKICBzZWVhbHNvOiBbJ3NpbXBsaWZ5J10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYWxnZWJyYS9zaW1wbGlmeS5qcwp2YXIgc2ltcGxpZnlEb2NzID0gewogIG5hbWU6ICdzaW1wbGlmeScsCiAgY2F0ZWdvcnk6ICdBbGdlYnJhJywKICBzeW50YXg6IFsnc2ltcGxpZnkoZXhwciknLCAnc2ltcGxpZnkoZXhwciwgcnVsZXMpJ10sCiAgZGVzY3JpcHRpb246ICdTaW1wbGlmeSBhbiBleHByZXNzaW9uIHRyZWUuJywKICBleGFtcGxlczogWydzaW1wbGlmeSgiMyArIDIgLyA0IiknLCAnc2ltcGxpZnkoIjJ4ICsgeCIpJywgJ2YgPSBwYXJzZSgieCAqICh4ICsgMiArIHgpIiknLCAnc2ltcGxpZmllZCA9IHNpbXBsaWZ5KGYpJywgJ3NpbXBsaWZpZWQuZXZhbHVhdGUoe3g6IDJ9KSddLAogIHNlZWFsc286IFsnZGVyaXZhdGl2ZScsICdwYXJzZScsICdldmFsdWF0ZSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvbHVwLmpzCnZhciBsdXBEb2NzID0gewogIG5hbWU6ICdsdXAnLAogIGNhdGVnb3J5OiAnQWxnZWJyYScsCiAgc3ludGF4OiBbJ2x1cChtKSddLAogIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBNYXRyaXggTFUgZGVjb21wb3NpdGlvbiB3aXRoIHBhcnRpYWwgcGl2b3RpbmcuIE1hdHJpeCBBIGlzIGRlY29tcG9zZWQgaW4gdGhyZWUgbWF0cmljZXMgKEwsIFUsIFApIHdoZXJlIFAgKiBBID0gTCAqIFUnLAogIGV4YW1wbGVzOiBbJ2x1cChbWzIsIDFdLCBbMSwgNF1dKScsICdsdXAobWF0cml4KFtbMiwgMV0sIFsxLCA0XV0pKScsICdsdXAoc3BhcnNlKFtbMiwgMV0sIFsxLCA0XV0pKSddLAogIHNlZWFsc286IFsnbHVzb2x2ZScsICdsc29sdmUnLCAndXNvbHZlJywgJ21hdHJpeCcsICdzcGFyc2UnLCAnc2x1JywgJ3FyJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYWxnZWJyYS9sc29sdmUuanMKdmFyIGxzb2x2ZURvY3MgPSB7CiAgbmFtZTogJ2xzb2x2ZScsCiAgY2F0ZWdvcnk6ICdBbGdlYnJhJywKICBzeW50YXg6IFsneD1sc29sdmUoTCwgYiknXSwKICBkZXNjcmlwdGlvbjogJ1NvbHZlcyB0aGUgbGluZWFyIHN5c3RlbSBMICogeCA9IGIgd2hlcmUgTCBpcyBhbiBbbiB4IG5dIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4IGFuZCBiIGlzIGEgW25dIGNvbHVtbiB2ZWN0b3IuJywKICBleGFtcGxlczogWydhID0gWy0yLCAzOyAyLCAxXScsICdiID0gWzExLCA5XScsICd4ID0gbHNvbHZlKGEsIGIpJ10sCiAgc2VlYWxzbzogWydsdXAnLCAnbHVzb2x2ZScsICd1c29sdmUnLCAnbWF0cml4JywgJ3NwYXJzZSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvZGVyaXZhdGl2ZS5qcwp2YXIgZGVyaXZhdGl2ZURvY3MgPSB7CiAgbmFtZTogJ2Rlcml2YXRpdmUnLAogIGNhdGVnb3J5OiAnQWxnZWJyYScsCiAgc3ludGF4OiBbJ2Rlcml2YXRpdmUoZXhwciwgdmFyaWFibGUpJywgJ2Rlcml2YXRpdmUoZXhwciwgdmFyaWFibGUsIHtzaW1wbGlmeTogYm9vbGVhbn0pJ10sCiAgZGVzY3JpcHRpb246ICdUYWtlcyB0aGUgZGVyaXZhdGl2ZSBvZiBhbiBleHByZXNzaW9uIGV4cHJlc3NlZCBpbiBwYXJzZXIgTm9kZXMuIFRoZSBkZXJpdmF0aXZlIHdpbGwgYmUgdGFrZW4gb3ZlciB0aGUgc3VwcGxpZWQgdmFyaWFibGUgaW4gdGhlIHNlY29uZCBwYXJhbWV0ZXIuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB2YXJpYWJsZXMgaW4gdGhlIGV4cHJlc3Npb24sIGl0IHdpbGwgcmV0dXJuIGEgcGFydGlhbCBkZXJpdmF0aXZlLicsCiAgZXhhbXBsZXM6IFsnZGVyaXZhdGl2ZSgiMnheMyIsICJ4IiknLCAnZGVyaXZhdGl2ZSgiMnheMyIsICJ4Iiwge3NpbXBsaWZ5OiBmYWxzZX0pJywgJ2Rlcml2YXRpdmUoIjJ4XjIgKyAzeCArIDQiLCAieCIpJywgJ2Rlcml2YXRpdmUoInNpbigyeCkiLCAieCIpJywgJ2YgPSBwYXJzZSgieF4yICsgeCIpJywgJ3ggPSBwYXJzZSgieCIpJywgJ2RmID0gZGVyaXZhdGl2ZShmLCB4KScsICdkZi5ldmFsdWF0ZSh7eDogM30pJ10sCiAgc2VlYWxzbzogWydzaW1wbGlmeScsICdwYXJzZScsICdldmFsdWF0ZSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy92ZXJzaW9uLmpzCnZhciB2ZXJzaW9uRG9jcyA9IHsKICBuYW1lOiAndmVyc2lvbicsCiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLAogIHN5bnRheDogWyd2ZXJzaW9uJ10sCiAgZGVzY3JpcHRpb246ICdBIHN0cmluZyB3aXRoIHRoZSB2ZXJzaW9uIG51bWJlciBvZiBtYXRoLmpzJywKICBleGFtcGxlczogWyd2ZXJzaW9uJ10sCiAgc2VlYWxzbzogW10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL3RydWUuanMKdmFyIHRydWVEb2NzID0gewogIG5hbWU6ICd0cnVlJywKICBjYXRlZ29yeTogJ0NvbnN0YW50cycsCiAgc3ludGF4OiBbJ3RydWUnXSwKICBkZXNjcmlwdGlvbjogJ0Jvb2xlYW4gdmFsdWUgdHJ1ZScsCiAgZXhhbXBsZXM6IFsndHJ1ZSddLAogIHNlZWFsc286IFsnZmFsc2UnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvdGF1LmpzCnZhciB0YXVEb2NzID0gewogIG5hbWU6ICd0YXUnLAogIGNhdGVnb3J5OiAnQ29uc3RhbnRzJywKICBzeW50YXg6IFsndGF1J10sCiAgZGVzY3JpcHRpb246ICdUYXUgaXMgdGhlIHJhdGlvIGNvbnN0YW50IG9mIGEgY2lyY2xlXCdzIGNpcmN1bWZlcmVuY2UgdG8gcmFkaXVzLCBlcXVhbCB0byAyICogcGksIGFwcHJveGltYXRlbHkgNi4yODMyLicsCiAgZXhhbXBsZXM6IFsndGF1JywgJzIgKiBwaSddLAogIHNlZWFsc286IFsncGknXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvU1FSVDIuanMKdmFyIFNRUlQyRG9jcyA9IHsKICBuYW1lOiAnU1FSVDInLAogIGNhdGVnb3J5OiAnQ29uc3RhbnRzJywKICBzeW50YXg6IFsnU1FSVDInXSwKICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIHNxdWFyZSByb290IG9mIDIsIGFwcHJveGltYXRlbHkgZXF1YWwgdG8gMS40MTQnLAogIGV4YW1wbGVzOiBbJ1NRUlQyJywgJ3NxcnQoMiknXSwKICBzZWVhbHNvOiBbXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvU1FSVDFfMi5qcwp2YXIgU1FSVDEyRG9jcyA9IHsKICBuYW1lOiAnU1FSVDFfMicsCiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLAogIHN5bnRheDogWydTUVJUMV8yJ10sCiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBzcXVhcmUgcm9vdCBvZiAxLzIsIGFwcHJveGltYXRlbHkgZXF1YWwgdG8gMC43MDcnLAogIGV4YW1wbGVzOiBbJ1NRUlQxXzInLCAnc3FydCgxLzIpJ10sCiAgc2VlYWxzbzogW10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL3BoaS5qcwp2YXIgcGhpRG9jcyA9IHsKICBuYW1lOiAncGhpJywKICBjYXRlZ29yeTogJ0NvbnN0YW50cycsCiAgc3ludGF4OiBbJ3BoaSddLAogIGRlc2NyaXB0aW9uOiAnUGhpIGlzIHRoZSBnb2xkZW4gcmF0aW8uIFR3byBxdWFudGl0aWVzIGFyZSBpbiB0aGUgZ29sZGVuIHJhdGlvIGlmIHRoZWlyIHJhdGlvIGlzIHRoZSBzYW1lIGFzIHRoZSByYXRpbyBvZiB0aGVpciBzdW0gdG8gdGhlIGxhcmdlciBvZiB0aGUgdHdvIHF1YW50aXRpZXMuIFBoaSBpcyBkZWZpbmVkIGFzIGAoMSArIHNxcnQoNSkpIC8gMmAgYW5kIGlzIGFwcHJveGltYXRlbHkgMS42MTgwMzQuLi4nLAogIGV4YW1wbGVzOiBbJ3BoaSddLAogIHNlZWFsc286IFtdCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9waS5qcwp2YXIgcGlEb2NzID0gewogIG5hbWU6ICdwaScsCiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLAogIHN5bnRheDogWydwaSddLAogIGRlc2NyaXB0aW9uOiAnVGhlIG51bWJlciBwaSBpcyBhIG1hdGhlbWF0aWNhbCBjb25zdGFudCB0aGF0IGlzIHRoZSByYXRpbyBvZiBhIGNpcmNsZVwncyBjaXJjdW1mZXJlbmNlIHRvIGl0cyBkaWFtZXRlciwgYW5kIGlzIGFwcHJveGltYXRlbHkgZXF1YWwgdG8gMy4xNDE1OScsCiAgZXhhbXBsZXM6IFsncGknLCAnc2luKHBpLzIpJ10sCiAgc2VlYWxzbzogWyd0YXUnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvbnVsbC5qcwp2YXIgbnVsbERvY3MgPSB7CiAgbmFtZTogJ251bGwnLAogIGNhdGVnb3J5OiAnQ29uc3RhbnRzJywKICBzeW50YXg6IFsnbnVsbCddLAogIGRlc2NyaXB0aW9uOiAnVmFsdWUgbnVsbCcsCiAgZXhhbXBsZXM6IFsnbnVsbCddLAogIHNlZWFsc286IFsndHJ1ZScsICdmYWxzZSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9OYU4uanMKdmFyIE5hTkRvY3MgPSB7CiAgbmFtZTogJ05hTicsCiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLAogIHN5bnRheDogWydOYU4nXSwKICBkZXNjcmlwdGlvbjogJ05vdCBhIG51bWJlcicsCiAgZXhhbXBsZXM6IFsnTmFOJywgJzAgLyAwJ10sCiAgc2VlYWxzbzogW10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL0xPRzEwRS5qcwp2YXIgTE9HMTBFRG9jcyA9IHsKICBuYW1lOiAnTE9HMTBFJywKICBjYXRlZ29yeTogJ0NvbnN0YW50cycsCiAgc3ludGF4OiBbJ0xPRzEwRSddLAogIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgYmFzZS0xMCBsb2dhcml0aG0gb2YgRSwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAwLjQzNCcsCiAgZXhhbXBsZXM6IFsnTE9HMTBFJywgJ2xvZyhlLCAxMCknXSwKICBzZWVhbHNvOiBbXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvTE9HMkUuanMKdmFyIExPRzJFRG9jcyA9IHsKICBuYW1lOiAnTE9HMkUnLAogIGNhdGVnb3J5OiAnQ29uc3RhbnRzJywKICBzeW50YXg6IFsnTE9HMkUnXSwKICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGJhc2UtMiBsb2dhcml0aG0gb2YgRSwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAxLjQ0MicsCiAgZXhhbXBsZXM6IFsnTE9HMkUnLCAnbG9nKGUsIDIpJ10sCiAgc2VlYWxzbzogW10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL0xOMTAuanMKdmFyIExOMTBEb2NzID0gewogIG5hbWU6ICdMTjEwJywKICBjYXRlZ29yeTogJ0NvbnN0YW50cycsCiAgc3ludGF4OiBbJ0xOMTAnXSwKICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIDEwLCBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDIuMzAyJywKICBleGFtcGxlczogWydMTjEwJywgJ2xvZygxMCknXSwKICBzZWVhbHNvOiBbXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvTE4yLmpzCnZhciBMTjJEb2NzID0gewogIG5hbWU6ICdMTjInLAogIGNhdGVnb3J5OiAnQ29uc3RhbnRzJywKICBzeW50YXg6IFsnTE4yJ10sCiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiAyLCBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDAuNjkzJywKICBleGFtcGxlczogWydMTjInLCAnbG9nKDIpJ10sCiAgc2VlYWxzbzogW10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL0luZmluaXR5LmpzCnZhciBJbmZpbml0eURvY3MgPSB7CiAgbmFtZTogJ0luZmluaXR5JywKICBjYXRlZ29yeTogJ0NvbnN0YW50cycsCiAgc3ludGF4OiBbJ0luZmluaXR5J10sCiAgZGVzY3JpcHRpb246ICdJbmZpbml0eSwgYSBudW1iZXIgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gbnVtYmVyIHRoYXQgY2FuIGJlIGhhbmRsZWQgYnkgYSBmbG9hdGluZyBwb2ludCBudW1iZXIuJywKICBleGFtcGxlczogWydJbmZpbml0eScsICcxIC8gMCddLAogIHNlZWFsc286IFtdCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9pLmpzCnZhciBpRG9jcyA9IHsKICBuYW1lOiAnaScsCiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLAogIHN5bnRheDogWydpJ10sCiAgZGVzY3JpcHRpb246ICdJbWFnaW5hcnkgdW5pdCwgZGVmaW5lZCBhcyBpKmk9LTEuIEEgY29tcGxleCBudW1iZXIgaXMgZGVzY3JpYmVkIGFzIGEgKyBiKmksIHdoZXJlIGEgaXMgdGhlIHJlYWwgcGFydCwgYW5kIGIgaXMgdGhlIGltYWdpbmFyeSBwYXJ0LicsCiAgZXhhbXBsZXM6IFsnaScsICdpICogaScsICdzcXJ0KC0xKSddLAogIHNlZWFsc286IFtdCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9mYWxzZS5qcwp2YXIgZmFsc2VEb2NzID0gewogIG5hbWU6ICdmYWxzZScsCiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLAogIHN5bnRheDogWydmYWxzZSddLAogIGRlc2NyaXB0aW9uOiAnQm9vbGVhbiB2YWx1ZSBmYWxzZScsCiAgZXhhbXBsZXM6IFsnZmFsc2UnXSwKICBzZWVhbHNvOiBbJ3RydWUnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvZS5qcwp2YXIgZURvY3MgPSB7CiAgbmFtZTogJ2UnLAogIGNhdGVnb3J5OiAnQ29uc3RhbnRzJywKICBzeW50YXg6IFsnZSddLAogIGRlc2NyaXB0aW9uOiAnRXVsZXJcJ3MgbnVtYmVyLCB0aGUgYmFzZSBvZiB0aGUgbmF0dXJhbCBsb2dhcml0aG0uIEFwcHJveGltYXRlbHkgZXF1YWwgdG8gMi43MTgyOCcsCiAgZXhhbXBsZXM6IFsnZScsICdlIF4gMicsICdleHAoMiknLCAnbG9nKGUpJ10sCiAgc2VlYWxzbzogWydleHAnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vdW5pdC5qcwp2YXIgdW5pdERvY3MgPSB7CiAgbmFtZTogJ3VuaXQnLAogIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJywKICBzeW50YXg6IFsndmFsdWUgdW5pdCcsICd1bml0KHZhbHVlLCB1bml0KScsICd1bml0KHN0cmluZyknXSwKICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIHVuaXQuJywKICBleGFtcGxlczogWyc1LjUgbW0nLCAnMyBpbmNoJywgJ3VuaXQoNy4xLCAia2lsb2dyYW0iKScsICd1bml0KCIyMyBkZWciKSddLAogIHNlZWFsc286IFsnYmlnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnY29tcGxleCcsICdpbmRleCcsICdtYXRyaXgnLCAnbnVtYmVyJywgJ3N0cmluZyddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9zdHJpbmcuanMKdmFyIHN0cmluZ0RvY3MgPSB7CiAgbmFtZTogJ3N0cmluZycsCiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLAogIHN5bnRheDogWycidGV4dCInLCAnc3RyaW5nKHgpJ10sCiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBzdHJpbmcgb3IgY29udmVydCBhIHZhbHVlIHRvIGEgc3RyaW5nJywKICBleGFtcGxlczogWyciSGVsbG8gV29ybGQhIicsICdzdHJpbmcoNC4yKScsICdzdHJpbmcoMyArIDJpKSddLAogIHNlZWFsc286IFsnYmlnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnY29tcGxleCcsICdpbmRleCcsICdtYXRyaXgnLCAnbnVtYmVyJywgJ3VuaXQnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vc3BsaXRVbml0LmpzCnZhciBzcGxpdFVuaXREb2NzID0gewogIG5hbWU6ICdzcGxpdFVuaXQnLAogIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJywKICBzeW50YXg6IFsnc3BsaXRVbml0KHVuaXQ6IFVuaXQsIHBhcnRzOiBVbml0W10pJ10sCiAgZGVzY3JpcHRpb246ICdTcGxpdCBhIHVuaXQgaW4gYW4gYXJyYXkgb2YgdW5pdHMgd2hvc2Ugc3VtIGlzIGVxdWFsIHRvIHRoZSBvcmlnaW5hbCB1bml0LicsCiAgZXhhbXBsZXM6IFsnc3BsaXRVbml0KDEgbSwgWyJmZWV0IiwgImluY2giXSknXSwKICBzZWVhbHNvOiBbJ3VuaXQnLCAnY3JlYXRlVW5pdCddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9zcGFyc2UuanMKdmFyIHNwYXJzZURvY3MgPSB7CiAgbmFtZTogJ3NwYXJzZScsCiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLAogIHN5bnRheDogWydzcGFyc2UoKScsICdzcGFyc2UoW2ExLCBiMSwgLi4uOyBhMSwgYjIsIC4uLl0pJywgJ3NwYXJzZShbYTEsIGIxLCAuLi47IGExLCBiMiwgLi4uXSwgIm51bWJlciIpJ10sCiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBzcGFyc2UgbWF0cml4LicsCiAgZXhhbXBsZXM6IFsnc3BhcnNlKCknLCAnc3BhcnNlKFszLCA0OyA1LCA2XSknLCAnc3BhcnNlKFszLCAwOyA1LCAwXSwgIm51bWJlciIpJ10sCiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnYm9vbGVhbicsICdjb21wbGV4JywgJ2luZGV4JywgJ251bWJlcicsICdzdHJpbmcnLCAndW5pdCcsICdtYXRyaXgnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vbnVtYmVyLmpzCnZhciBudW1iZXJEb2NzID0gewogIG5hbWU6ICdudW1iZXInLAogIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJywKICBzeW50YXg6IFsneCcsICdudW1iZXIoeCknLCAnbnVtYmVyKHVuaXQsIHZhbHVlbGVzc1VuaXQpJ10sCiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBudW1iZXIgb3IgY29udmVydCBhIHN0cmluZyBvciBib29sZWFuIGludG8gYSBudW1iZXIuJywKICBleGFtcGxlczogWycyJywgJzJlMycsICc0LjA1JywgJ251bWJlcigyKScsICdudW1iZXIoIjcuMiIpJywgJ251bWJlcih0cnVlKScsICdudW1iZXIoW3RydWUsIGZhbHNlLCB0cnVlLCB0cnVlXSknLCAnbnVtYmVyKHVuaXQoIjUyY20iKSwgIm0iKSddLAogIHNlZWFsc286IFsnYmlnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnY29tcGxleCcsICdmcmFjdGlvbicsICdpbmRleCcsICdtYXRyaXgnLCAnc3RyaW5nJywgJ3VuaXQnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vbWF0cml4LmpzCnZhciBtYXRyaXhEb2NzID0gewogIG5hbWU6ICdtYXRyaXgnLAogIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJywKICBzeW50YXg6IFsnW10nLCAnW2ExLCBiMSwgLi4uOyBhMiwgYjIsIC4uLl0nLCAnbWF0cml4KCknLCAnbWF0cml4KCJkZW5zZSIpJywgJ21hdHJpeChbLi4uXSknXSwKICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIG1hdHJpeC4nLAogIGV4YW1wbGVzOiBbJ1tdJywgJ1sxLCAyLCAzXScsICdbMSwgMiwgMzsgNCwgNSwgNl0nLCAnbWF0cml4KCknLCAnbWF0cml4KFszLCA0XSknLCAnbWF0cml4KFszLCA0OyA1LCA2XSwgInNwYXJzZSIpJywgJ21hdHJpeChbMywgNDsgNSwgNl0sICJzcGFyc2UiLCAibnVtYmVyIiknXSwKICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdib29sZWFuJywgJ2NvbXBsZXgnLCAnaW5kZXgnLCAnbnVtYmVyJywgJ3N0cmluZycsICd1bml0JywgJ3NwYXJzZSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9pbmRleC5qcwp2YXIgaW5kZXhEb2NzID0gewogIG5hbWU6ICdpbmRleCcsCiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLAogIHN5bnRheDogWydbc3RhcnRdJywgJ1tzdGFydDplbmRdJywgJ1tzdGFydDpzdGVwOmVuZF0nLCAnW3N0YXJ0MSwgc3RhcnQgMiwgLi4uXScsICdbc3RhcnQxOmVuZDEsIHN0YXJ0MjplbmQyLCAuLi5dJywgJ1tzdGFydDE6c3RlcDE6ZW5kMSwgc3RhcnQyOnN0ZXAyOmVuZDIsIC4uLl0nXSwKICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhbiBpbmRleCB0byBnZXQgb3IgcmVwbGFjZSBhIHN1YnNldCBvZiBhIG1hdHJpeCcsCiAgZXhhbXBsZXM6IFsnW10nLCAnWzEsIDIsIDNdJywgJ0EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnQVsxLCA6XScsICdBWzEsIDJdID0gNTAnLCAnQVswOjIsIDA6Ml0gPSBvbmVzKDIsIDIpJ10sCiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnYm9vbGVhbicsICdjb21wbGV4JywgJ21hdHJpeCwnLCAnbnVtYmVyJywgJ3JhbmdlJywgJ3N0cmluZycsICd1bml0J10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL2ZyYWN0aW9uLmpzCnZhciBmcmFjdGlvbkRvY3MgPSB7CiAgbmFtZTogJ2ZyYWN0aW9uJywKICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsCiAgc3ludGF4OiBbJ2ZyYWN0aW9uKG51bSknLCAnZnJhY3Rpb24obnVtLGRlbiknXSwKICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIGZyYWN0aW9uIGZyb20gYSBudW1iZXIgb3IgZnJvbSBhIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IuJywKICBleGFtcGxlczogWydmcmFjdGlvbigwLjEyNSknLCAnZnJhY3Rpb24oMSwgMykgKyBmcmFjdGlvbigyLCA1KSddLAogIHNlZWFsc286IFsnYmlnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnY29tcGxleCcsICdpbmRleCcsICdtYXRyaXgnLCAnc3RyaW5nJywgJ3VuaXQnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vY3JlYXRlVW5pdC5qcwp2YXIgY3JlYXRlVW5pdERvY3MgPSB7CiAgbmFtZTogJ2NyZWF0ZVVuaXQnLAogIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJywKICBzeW50YXg6IFsnY3JlYXRlVW5pdChkZWZpbml0aW9ucyknLCAnY3JlYXRlVW5pdChuYW1lLCBkZWZpbml0aW9uKSddLAogIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgdXNlci1kZWZpbmVkIHVuaXQgYW5kIHJlZ2lzdGVyIGl0IHdpdGggdGhlIFVuaXQgdHlwZS4nLAogIGV4YW1wbGVzOiBbJ2NyZWF0ZVVuaXQoImZvbyIpJywgJ2NyZWF0ZVVuaXQoImtub3QiLCB7ZGVmaW5pdGlvbjogIjAuNTE0NDQ0NDQ0IG0vcyIsIGFsaWFzZXM6IFsia25vdHMiLCAia3QiLCAia3RzIl19KScsICdjcmVhdGVVbml0KCJtcGgiLCAiMSBtaWxlL2hvdXIiKSddLAogIHNlZWFsc286IFsndW5pdCcsICdzcGxpdFVuaXQnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vY29tcGxleC5qcwp2YXIgY29tcGxleERvY3MgPSB7CiAgbmFtZTogJ2NvbXBsZXgnLAogIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJywKICBzeW50YXg6IFsnY29tcGxleCgpJywgJ2NvbXBsZXgocmUsIGltKScsICdjb21wbGV4KHN0cmluZyknXSwKICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIGNvbXBsZXggbnVtYmVyLicsCiAgZXhhbXBsZXM6IFsnY29tcGxleCgpJywgJ2NvbXBsZXgoMiwgMyknLCAnY29tcGxleCgiNyAtIDJpIiknXSwKICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdib29sZWFuJywgJ2luZGV4JywgJ21hdHJpeCcsICdudW1iZXInLCAnc3RyaW5nJywgJ3VuaXQnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vYm9vbGVhbi5qcwp2YXIgYm9vbGVhbkRvY3MgPSB7CiAgbmFtZTogJ2Jvb2xlYW4nLAogIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJywKICBzeW50YXg6IFsneCcsICdib29sZWFuKHgpJ10sCiAgZGVzY3JpcHRpb246ICdDb252ZXJ0IGEgc3RyaW5nIG9yIG51bWJlciBpbnRvIGEgYm9vbGVhbi4nLAogIGV4YW1wbGVzOiBbJ2Jvb2xlYW4oMCknLCAnYm9vbGVhbigxKScsICdib29sZWFuKDMpJywgJ2Jvb2xlYW4oInRydWUiKScsICdib29sZWFuKCJmYWxzZSIpJywgJ2Jvb2xlYW4oWzEsIDAsIDEsIDFdKSddLAogIHNlZWFsc286IFsnYmlnbnVtYmVyJywgJ2NvbXBsZXgnLCAnaW5kZXgnLCAnbWF0cml4JywgJ251bWJlcicsICdzdHJpbmcnLCAndW5pdCddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90UG93LmpzCnZhciBkb3RQb3dEb2NzID0gewogIG5hbWU6ICdkb3RQb3cnLAogIGNhdGVnb3J5OiAnT3BlcmF0b3JzJywKICBzeW50YXg6IFsneCAuXiB5JywgJ2RvdFBvdyh4LCB5KSddLAogIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlcyB0aGUgcG93ZXIgb2YgeCB0byB5IGVsZW1lbnQgd2lzZS4nLAogIGV4YW1wbGVzOiBbJ2EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnYSAuXiAyJ10sCiAgc2VlYWxzbzogWydwb3cnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hbGdlYnJhL2x1c29sdmUuanMKdmFyIGx1c29sdmVEb2NzID0gewogIG5hbWU6ICdsdXNvbHZlJywKICBjYXRlZ29yeTogJ0FsZ2VicmEnLAogIHN5bnRheDogWyd4PWx1c29sdmUoQSwgYiknLCAneD1sdXNvbHZlKGx1LCBiKSddLAogIGRlc2NyaXB0aW9uOiAnU29sdmVzIHRoZSBsaW5lYXIgc3lzdGVtIEEgKiB4ID0gYiB3aGVyZSBBIGlzIGFuIFtuIHggbl0gbWF0cml4IGFuZCBiIGlzIGEgW25dIGNvbHVtbiB2ZWN0b3IuJywKICBleGFtcGxlczogWydhID0gWy0yLCAzOyAyLCAxXScsICdiID0gWzExLCA5XScsICd4ID0gbHVzb2x2ZShhLCBiKSddLAogIHNlZWFsc286IFsnbHVwJywgJ3NsdScsICdsc29sdmUnLCAndXNvbHZlJywgJ21hdHJpeCcsICdzcGFyc2UnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL3N1YnRyYWN0LmpzCnZhciBzdWJ0cmFjdERvY3MgPSB7CiAgbmFtZTogJ3N1YnRyYWN0JywKICBjYXRlZ29yeTogJ09wZXJhdG9ycycsCiAgc3ludGF4OiBbJ3ggLSB5JywgJ3N1YnRyYWN0KHgsIHkpJ10sCiAgZGVzY3JpcHRpb246ICdzdWJ0cmFjdCB0d28gdmFsdWVzLicsCiAgZXhhbXBsZXM6IFsnYSA9IDUuMyAtIDInLCAnYSArIDInLCAnMi8zIC0gMS82JywgJzIgKiAzIC0gMycsICcyLjEga20gLSA1MDBtJ10sCiAgc2VlYWxzbzogWydhZGQnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3ZhcmlhbmNlLmpzCnZhciB2YXJpYW5jZURvY3MgPSB7CiAgbmFtZTogJ3ZhcmlhbmNlJywKICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLAogIHN5bnRheDogWyd2YXJpYW5jZShhLCBiLCBjLCAuLi4pJywgJ3ZhcmlhbmNlKEEpJywgJ3ZhcmlhbmNlKEEsIG5vcm1hbGl6YXRpb24pJ10sCiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSB2YXJpYW5jZSBvZiBhbGwgdmFsdWVzLiBPcHRpb25hbCBwYXJhbWV0ZXIgbm9ybWFsaXphdGlvbiBjYW4gYmUgInVuYmlhc2VkIiAoZGVmYXVsdCksICJ1bmNvcnJlY3RlZCIsIG9yICJiaWFzZWQiLicsCiAgZXhhbXBsZXM6IFsndmFyaWFuY2UoMiwgNCwgNiknLCAndmFyaWFuY2UoWzIsIDQsIDYsIDhdKScsICd2YXJpYW5jZShbMiwgNCwgNiwgOF0sICJ1bmNvcnJlY3RlZCIpJywgJ3ZhcmlhbmNlKFsyLCA0LCA2LCA4XSwgImJpYXNlZCIpJywgJ3ZhcmlhbmNlKFsxLCAyLCAzOyA0LCA1LCA2XSknXSwKICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21pbicsICdtZWRpYW4nLCAnbWluJywgJ3Byb2QnLCAnc3RkJywgJ3N1bSddCn07Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9zaW4uanMKdmFyIHNpbkRvY3MgPSB7CiAgbmFtZTogJ3NpbicsCiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLAogIHN5bnRheDogWydzaW4oeCknXSwKICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHNpbmUgb2YgeCBpbiByYWRpYW5zLicsCiAgZXhhbXBsZXM6IFsnc2luKDIpJywgJ3NpbihwaSAvIDQpIF4gMicsICdzaW4oOTAgZGVnKScsICdzaW4oMzAgZGVnKScsICdzaW4oMC4yKV4yICsgY29zKDAuMileMiddLAogIHNlZWFsc286IFsnYXNpbicsICdjb3MnLCAndGFuJ10KfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvbnVtZXJpYy5qcwp2YXIgbnVtZXJpY0RvY3MgPSB7CiAgbmFtZTogJ251bWVyaWMnLAogIGNhdGVnb3J5OiAnVXRpbHMnLAogIHN5bnRheDogWydudW1lcmljKHgpJ10sCiAgZGVzY3JpcHRpb246ICdDb252ZXJ0IGEgbnVtZXJpYyBpbnB1dCB0byBhIHNwZWNpZmljIG51bWVyaWMgdHlwZTogbnVtYmVyLCBCaWdOdW1iZXIsIG9yIEZyYWN0aW9uLicsCiAgZXhhbXBsZXM6IFsnbnVtZXJpYygiNCIpJywgJ251bWVyaWMoIjQiLCAibnVtYmVyIiknLCAnbnVtZXJpYygiNCIsICJCaWdOdW1iZXIiKScsICdudW1lcmljKCI0IiwgIkZyYWN0aW9uKScsICdudW1lcmljKDQsICJGcmFjdGlvbiIpJywgJ251bWVyaWMoZnJhY3Rpb24oMiwgNSksICJudW1iZXIpJ10sCiAgc2VlYWxzbzogWydudW1iZXInLCAnZnJhY3Rpb24nLCAnYmlnbnVtYmVyJywgJ3N0cmluZycsICdmb3JtYXQnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvY29sdW1uLmpzCnZhciBjb2x1bW5Eb2NzID0gewogIG5hbWU6ICdjb2x1bW4nLAogIGNhdGVnb3J5OiAnTWF0cml4JywKICBzeW50YXg6IFsnY29sdW1uKHgsIGluZGV4KSddLAogIGRlc2NyaXB0aW9uOiAnUmV0dXJuIGEgY29sdW1uIGZyb20gYSBtYXRyaXggb3IgYXJyYXkuJywKICBleGFtcGxlczogWydBID0gW1sxLCAyXSwgWzMsIDRdXScsICdjb2x1bW4oQSwgMSknLCAnY29sdW1uKEEsIDIpJ10sCiAgc2VlYWxzbzogWydyb3cnXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvcm93LmpzCnZhciByb3dEb2NzID0gewogIG5hbWU6ICdyb3cnLAogIGNhdGVnb3J5OiAnTWF0cml4JywKICBzeW50YXg6IFsncm93KHgsIGluZGV4KSddLAogIGRlc2NyaXB0aW9uOiAnUmV0dXJuIGEgcm93IGZyb20gYSBtYXRyaXggb3IgYXJyYXkuJywKICBleGFtcGxlczogWydBID0gW1sxLCAyXSwgWzMsIDRdXScsICdyb3coQSwgMSknLCAncm93KEEsIDIpJ10sCiAgc2VlYWxzbzogWydjb2x1bW4nXQp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9lbWJlZGRlZERvY3MuanMKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdmFyIGVtYmVkZGVkRG9jcyA9IHsKICAvLyBjb25zdHJ1Y3Rpb24gZnVuY3Rpb25zCiAgYmlnbnVtYmVyOiBiaWdudW1iZXJEb2NzLAogICJib29sZWFuIjogYm9vbGVhbkRvY3MsCiAgY29tcGxleDogY29tcGxleERvY3MsCiAgY3JlYXRlVW5pdDogY3JlYXRlVW5pdERvY3MsCiAgZnJhY3Rpb246IGZyYWN0aW9uRG9jcywKICBpbmRleDogaW5kZXhEb2NzLAogIG1hdHJpeDogbWF0cml4RG9jcywKICBudW1iZXI6IG51bWJlckRvY3MsCiAgc3BhcnNlOiBzcGFyc2VEb2NzLAogIHNwbGl0VW5pdDogc3BsaXRVbml0RG9jcywKICBzdHJpbmc6IHN0cmluZ0RvY3MsCiAgdW5pdDogdW5pdERvY3MsCiAgLy8gY29uc3RhbnRzCiAgZTogZURvY3MsCiAgRTogZURvY3MsCiAgImZhbHNlIjogZmFsc2VEb2NzLAogIGk6IGlEb2NzLAogIEluZmluaXR5OiBJbmZpbml0eURvY3MsCiAgTE4yOiBMTjJEb2NzLAogIExOMTA6IExOMTBEb2NzLAogIExPRzJFOiBMT0cyRURvY3MsCiAgTE9HMTBFOiBMT0cxMEVEb2NzLAogIE5hTjogTmFORG9jcywKICAibnVsbCI6IG51bGxEb2NzLAogIHBpOiBwaURvY3MsCiAgUEk6IHBpRG9jcywKICBwaGk6IHBoaURvY3MsCiAgU1FSVDFfMjogU1FSVDEyRG9jcywKICBTUVJUMjogU1FSVDJEb2NzLAogIHRhdTogdGF1RG9jcywKICAidHJ1ZSI6IHRydWVEb2NzLAogIHZlcnNpb246IHZlcnNpb25Eb2NzLAogIC8vIHBoeXNpY2FsIGNvbnN0YW50cwogIC8vIFRPRE86IG1vcmUgZGV0YWlsZWQgZG9jcyBmb3IgcGh5c2ljYWwgY29uc3RhbnRzCiAgc3BlZWRPZkxpZ2h0OiB7CiAgICBkZXNjcmlwdGlvbjogJ1NwZWVkIG9mIGxpZ2h0IGluIHZhY3V1bScsCiAgICBleGFtcGxlczogWydzcGVlZE9mTGlnaHQnXQogIH0sCiAgZ3Jhdml0YXRpb25Db25zdGFudDogewogICAgZGVzY3JpcHRpb246ICdOZXd0b25pYW4gY29uc3RhbnQgb2YgZ3Jhdml0YXRpb24nLAogICAgZXhhbXBsZXM6IFsnZ3Jhdml0YXRpb25Db25zdGFudCddCiAgfSwKICBwbGFuY2tDb25zdGFudDogewogICAgZGVzY3JpcHRpb246ICdQbGFuY2sgY29uc3RhbnQnLAogICAgZXhhbXBsZXM6IFsncGxhbmNrQ29uc3RhbnQnXQogIH0sCiAgcmVkdWNlZFBsYW5ja0NvbnN0YW50OiB7CiAgICBkZXNjcmlwdGlvbjogJ1JlZHVjZWQgUGxhbmNrIGNvbnN0YW50JywKICAgIGV4YW1wbGVzOiBbJ3JlZHVjZWRQbGFuY2tDb25zdGFudCddCiAgfSwKICBtYWduZXRpY0NvbnN0YW50OiB7CiAgICBkZXNjcmlwdGlvbjogJ01hZ25ldGljIGNvbnN0YW50ICh2YWN1dW0gcGVybWVhYmlsaXR5KScsCiAgICBleGFtcGxlczogWydtYWduZXRpY0NvbnN0YW50J10KICB9LAogIGVsZWN0cmljQ29uc3RhbnQ6IHsKICAgIGRlc2NyaXB0aW9uOiAnRWxlY3RyaWMgY29uc3RhbnQgKHZhY3V1bSBwZXJtZWFiaWxpdHkpJywKICAgIGV4YW1wbGVzOiBbJ2VsZWN0cmljQ29uc3RhbnQnXQogIH0sCiAgdmFjdXVtSW1wZWRhbmNlOiB7CiAgICBkZXNjcmlwdGlvbjogJ0NoYXJhY3RlcmlzdGljIGltcGVkYW5jZSBvZiB2YWN1dW0nLAogICAgZXhhbXBsZXM6IFsndmFjdXVtSW1wZWRhbmNlJ10KICB9LAogIGNvdWxvbWI6IHsKICAgIGRlc2NyaXB0aW9uOiAnQ291bG9tYlwncyBjb25zdGFudCcsCiAgICBleGFtcGxlczogWydjb3Vsb21iJ10KICB9LAogIGVsZW1lbnRhcnlDaGFyZ2U6IHsKICAgIGRlc2NyaXB0aW9uOiAnRWxlbWVudGFyeSBjaGFyZ2UnLAogICAgZXhhbXBsZXM6IFsnZWxlbWVudGFyeUNoYXJnZSddCiAgfSwKICBib2hyTWFnbmV0b246IHsKICAgIGRlc2NyaXB0aW9uOiAnQm9yaCBtYWduZXRvbicsCiAgICBleGFtcGxlczogWydib2hyTWFnbmV0b24nXQogIH0sCiAgY29uZHVjdGFuY2VRdWFudHVtOiB7CiAgICBkZXNjcmlwdGlvbjogJ0NvbmR1Y3RhbmNlIHF1YW50dW0nLAogICAgZXhhbXBsZXM6IFsnY29uZHVjdGFuY2VRdWFudHVtJ10KICB9LAogIGludmVyc2VDb25kdWN0YW5jZVF1YW50dW06IHsKICAgIGRlc2NyaXB0aW9uOiAnSW52ZXJzZSBjb25kdWN0YW5jZSBxdWFudHVtJywKICAgIGV4YW1wbGVzOiBbJ2ludmVyc2VDb25kdWN0YW5jZVF1YW50dW0nXQogIH0sCiAgLy8gam9zZXBoc29uOiB7ZGVzY3JpcHRpb246ICdKb3NlcGhzb24gY29uc3RhbnQnLCBleGFtcGxlczogWydqb3NlcGhzb24nXX0sCiAgbWFnbmV0aWNGbHV4UXVhbnR1bTogewogICAgZGVzY3JpcHRpb246ICdNYWduZXRpYyBmbHV4IHF1YW50dW0nLAogICAgZXhhbXBsZXM6IFsnbWFnbmV0aWNGbHV4UXVhbnR1bSddCiAgfSwKICBudWNsZWFyTWFnbmV0b246IHsKICAgIGRlc2NyaXB0aW9uOiAnTnVjbGVhciBtYWduZXRvbicsCiAgICBleGFtcGxlczogWydudWNsZWFyTWFnbmV0b24nXQogIH0sCiAga2xpdHppbmc6IHsKICAgIGRlc2NyaXB0aW9uOiAnVm9uIEtsaXR6aW5nIGNvbnN0YW50JywKICAgIGV4YW1wbGVzOiBbJ2tsaXR6aW5nJ10KICB9LAogIGJvaHJSYWRpdXM6IHsKICAgIGRlc2NyaXB0aW9uOiAnQm9yaCByYWRpdXMnLAogICAgZXhhbXBsZXM6IFsnYm9oclJhZGl1cyddCiAgfSwKICBjbGFzc2ljYWxFbGVjdHJvblJhZGl1czogewogICAgZGVzY3JpcHRpb246ICdDbGFzc2ljYWwgZWxlY3Ryb24gcmFkaXVzJywKICAgIGV4YW1wbGVzOiBbJ2NsYXNzaWNhbEVsZWN0cm9uUmFkaXVzJ10KICB9LAogIGVsZWN0cm9uTWFzczogewogICAgZGVzY3JpcHRpb246ICdFbGVjdHJvbiBtYXNzJywKICAgIGV4YW1wbGVzOiBbJ2VsZWN0cm9uTWFzcyddCiAgfSwKICBmZXJtaUNvdXBsaW5nOiB7CiAgICBkZXNjcmlwdGlvbjogJ0Zlcm1pIGNvdXBsaW5nIGNvbnN0YW50JywKICAgIGV4YW1wbGVzOiBbJ2Zlcm1pQ291cGxpbmcnXQogIH0sCiAgZmluZVN0cnVjdHVyZTogewogICAgZGVzY3JpcHRpb246ICdGaW5lLXN0cnVjdHVyZSBjb25zdGFudCcsCiAgICBleGFtcGxlczogWydmaW5lU3RydWN0dXJlJ10KICB9LAogIGhhcnRyZWVFbmVyZ3k6IHsKICAgIGRlc2NyaXB0aW9uOiAnSGFydHJlZSBlbmVyZ3knLAogICAgZXhhbXBsZXM6IFsnaGFydHJlZUVuZXJneSddCiAgfSwKICBwcm90b25NYXNzOiB7CiAgICBkZXNjcmlwdGlvbjogJ1Byb3RvbiBtYXNzJywKICAgIGV4YW1wbGVzOiBbJ3Byb3Rvbk1hc3MnXQogIH0sCiAgZGV1dGVyb25NYXNzOiB7CiAgICBkZXNjcmlwdGlvbjogJ0RldXRlcm9uIE1hc3MnLAogICAgZXhhbXBsZXM6IFsnZGV1dGVyb25NYXNzJ10KICB9LAogIG5ldXRyb25NYXNzOiB7CiAgICBkZXNjcmlwdGlvbjogJ05ldXRyb24gbWFzcycsCiAgICBleGFtcGxlczogWyduZXV0cm9uTWFzcyddCiAgfSwKICBxdWFudHVtT2ZDaXJjdWxhdGlvbjogewogICAgZGVzY3JpcHRpb246ICdRdWFudHVtIG9mIGNpcmN1bGF0aW9uJywKICAgIGV4YW1wbGVzOiBbJ3F1YW50dW1PZkNpcmN1bGF0aW9uJ10KICB9LAogIHJ5ZGJlcmc6IHsKICAgIGRlc2NyaXB0aW9uOiAnUnlkYmVyZyBjb25zdGFudCcsCiAgICBleGFtcGxlczogWydyeWRiZXJnJ10KICB9LAogIHRob21zb25Dcm9zc1NlY3Rpb246IHsKICAgIGRlc2NyaXB0aW9uOiAnVGhvbXNvbiBjcm9zcyBzZWN0aW9uJywKICAgIGV4YW1wbGVzOiBbJ3Rob21zb25Dcm9zc1NlY3Rpb24nXQogIH0sCiAgd2Vha01peGluZ0FuZ2xlOiB7CiAgICBkZXNjcmlwdGlvbjogJ1dlYWsgbWl4aW5nIGFuZ2xlJywKICAgIGV4YW1wbGVzOiBbJ3dlYWtNaXhpbmdBbmdsZSddCiAgfSwKICBlZmltb3ZGYWN0b3I6IHsKICAgIGRlc2NyaXB0aW9uOiAnRWZpbW92IGZhY3RvcicsCiAgICBleGFtcGxlczogWydlZmltb3ZGYWN0b3InXQogIH0sCiAgYXRvbWljTWFzczogewogICAgZGVzY3JpcHRpb246ICdBdG9taWMgbWFzcyBjb25zdGFudCcsCiAgICBleGFtcGxlczogWydhdG9taWNNYXNzJ10KICB9LAogIGF2b2dhZHJvOiB7CiAgICBkZXNjcmlwdGlvbjogJ0F2b2dhZHJvXCdzIG51bWJlcicsCiAgICBleGFtcGxlczogWydhdm9nYWRybyddCiAgfSwKICBib2x0em1hbm46IHsKICAgIGRlc2NyaXB0aW9uOiAnQm9sdHptYW5uIGNvbnN0YW50JywKICAgIGV4YW1wbGVzOiBbJ2JvbHR6bWFubiddCiAgfSwKICBmYXJhZGF5OiB7CiAgICBkZXNjcmlwdGlvbjogJ0ZhcmFkYXkgY29uc3RhbnQnLAogICAgZXhhbXBsZXM6IFsnZmFyYWRheSddCiAgfSwKICBmaXJzdFJhZGlhdGlvbjogewogICAgZGVzY3JpcHRpb246ICdGaXJzdCByYWRpYXRpb24gY29uc3RhbnQnLAogICAgZXhhbXBsZXM6IFsnZmlyc3RSYWRpYXRpb24nXQogIH0sCiAgbG9zY2htaWR0OiB7CiAgICBkZXNjcmlwdGlvbjogJ0xvc2NobWlkdCBjb25zdGFudCBhdCBUPTI3My4xNSBLIGFuZCBwPTEwMS4zMjUga1BhJywKICAgIGV4YW1wbGVzOiBbJ2xvc2NobWlkdCddCiAgfSwKICBnYXNDb25zdGFudDogewogICAgZGVzY3JpcHRpb246ICdHYXMgY29uc3RhbnQnLAogICAgZXhhbXBsZXM6IFsnZ2FzQ29uc3RhbnQnXQogIH0sCiAgbW9sYXJQbGFuY2tDb25zdGFudDogewogICAgZGVzY3JpcHRpb246ICdNb2xhciBQbGFuY2sgY29uc3RhbnQnLAogICAgZXhhbXBsZXM6IFsnbW9sYXJQbGFuY2tDb25zdGFudCddCiAgfSwKICBtb2xhclZvbHVtZTogewogICAgZGVzY3JpcHRpb246ICdNb2xhciB2b2x1bWUgb2YgYW4gaWRlYWwgZ2FzIGF0IFQ9MjczLjE1IEsgYW5kIHA9MTAxLjMyNSBrUGEnLAogICAgZXhhbXBsZXM6IFsnbW9sYXJWb2x1bWUnXQogIH0sCiAgc2Fja3VyVGV0cm9kZTogewogICAgZGVzY3JpcHRpb246ICdTYWNrdXItVGV0cm9kZSBjb25zdGFudCBhdCBUPTEgSyBhbmQgcD0xMDEuMzI1IGtQYScsCiAgICBleGFtcGxlczogWydzYWNrdXJUZXRyb2RlJ10KICB9LAogIHNlY29uZFJhZGlhdGlvbjogewogICAgZGVzY3JpcHRpb246ICdTZWNvbmQgcmFkaWF0aW9uIGNvbnN0YW50JywKICAgIGV4YW1wbGVzOiBbJ3NlY29uZFJhZGlhdGlvbiddCiAgfSwKICBzdGVmYW5Cb2x0em1hbm46IHsKICAgIGRlc2NyaXB0aW9uOiAnU3RlZmFuLUJvbHR6bWFubiBjb25zdGFudCcsCiAgICBleGFtcGxlczogWydzdGVmYW5Cb2x0em1hbm4nXQogIH0sCiAgd2llbkRpc3BsYWNlbWVudDogewogICAgZGVzY3JpcHRpb246ICdXaWVuIGRpc3BsYWNlbWVudCBsYXcgY29uc3RhbnQnLAogICAgZXhhbXBsZXM6IFsnd2llbkRpc3BsYWNlbWVudCddCiAgfSwKICAvLyBzcGVjdHJhbFJhZGlhbmNlOiB7ZGVzY3JpcHRpb246ICdGaXJzdCByYWRpYXRpb24gY29uc3RhbnQgZm9yIHNwZWN0cmFsIHJhZGlhbmNlJywgZXhhbXBsZXM6IFsnc3BlY3RyYWxSYWRpYW5jZSddfSwKICBtb2xhck1hc3M6IHsKICAgIGRlc2NyaXB0aW9uOiAnTW9sYXIgbWFzcyBjb25zdGFudCcsCiAgICBleGFtcGxlczogWydtb2xhck1hc3MnXQogIH0sCiAgbW9sYXJNYXNzQzEyOiB7CiAgICBkZXNjcmlwdGlvbjogJ01vbGFyIG1hc3MgY29uc3RhbnQgb2YgY2FyYm9uLTEyJywKICAgIGV4YW1wbGVzOiBbJ21vbGFyTWFzc0MxMiddCiAgfSwKICBncmF2aXR5OiB7CiAgICBkZXNjcmlwdGlvbjogJ1N0YW5kYXJkIGFjY2VsZXJhdGlvbiBvZiBncmF2aXR5IChzdGFuZGFyZCBhY2NlbGVyYXRpb24gb2YgZnJlZS1mYWxsIG9uIEVhcnRoKScsCiAgICBleGFtcGxlczogWydncmF2aXR5J10KICB9LAogIHBsYW5ja0xlbmd0aDogewogICAgZGVzY3JpcHRpb246ICdQbGFuY2sgbGVuZ3RoJywKICAgIGV4YW1wbGVzOiBbJ3BsYW5ja0xlbmd0aCddCiAgfSwKICBwbGFuY2tNYXNzOiB7CiAgICBkZXNjcmlwdGlvbjogJ1BsYW5jayBtYXNzJywKICAgIGV4YW1wbGVzOiBbJ3BsYW5ja01hc3MnXQogIH0sCiAgcGxhbmNrVGltZTogewogICAgZGVzY3JpcHRpb246ICdQbGFuY2sgdGltZScsCiAgICBleGFtcGxlczogWydwbGFuY2tUaW1lJ10KICB9LAogIHBsYW5ja0NoYXJnZTogewogICAgZGVzY3JpcHRpb246ICdQbGFuY2sgY2hhcmdlJywKICAgIGV4YW1wbGVzOiBbJ3BsYW5ja0NoYXJnZSddCiAgfSwKICBwbGFuY2tUZW1wZXJhdHVyZTogewogICAgZGVzY3JpcHRpb246ICdQbGFuY2sgdGVtcGVyYXR1cmUnLAogICAgZXhhbXBsZXM6IFsncGxhbmNrVGVtcGVyYXR1cmUnXQogIH0sCiAgLy8gZnVuY3Rpb25zIC0gYWxnZWJyYQogIGRlcml2YXRpdmU6IGRlcml2YXRpdmVEb2NzLAogIGxzb2x2ZTogbHNvbHZlRG9jcywKICBsdXA6IGx1cERvY3MsCiAgbHVzb2x2ZTogbHVzb2x2ZURvY3MsCiAgc2ltcGxpZnk6IHNpbXBsaWZ5RG9jcywKICByYXRpb25hbGl6ZTogcmF0aW9uYWxpemVEb2NzLAogIHNsdTogc2x1RG9jcywKICB1c29sdmU6IHVzb2x2ZURvY3MsCiAgcXI6IHFyRG9jcywKICAvLyBmdW5jdGlvbnMgLSBhcml0aG1ldGljCiAgYWJzOiBhYnNEb2NzLAogIGFkZDogYWRkRG9jcywKICBjYnJ0OiBjYnJ0RG9jcywKICBjZWlsOiBjZWlsRG9jcywKICBjdWJlOiBjdWJlRG9jcywKICBkaXZpZGU6IGRpdmlkZURvY3MsCiAgZG90RGl2aWRlOiBkb3REaXZpZGVEb2NzLAogIGRvdE11bHRpcGx5OiBkb3RNdWx0aXBseURvY3MsCiAgZG90UG93OiBkb3RQb3dEb2NzLAogIGV4cDogZXhwRG9jcywKICBleHBtOiBleHBtRG9jcywKICBleHBtMTogZXhwbTFEb2NzLAogIGZpeDogZml4RG9jcywKICBmbG9vcjogZmxvb3JEb2NzLAogIGdjZDogZ2NkRG9jcywKICBoeXBvdDogaHlwb3REb2NzLAogIGxjbTogbGNtRG9jcywKICBsb2c6IGxvZ0RvY3MsCiAgbG9nMjogbG9nMkRvY3MsCiAgbG9nMXA6IGxvZzFwRG9jcywKICBsb2cxMDogbG9nMTBEb2NzLAogIG1vZDogbW9kRG9jcywKICBtdWx0aXBseTogbXVsdGlwbHlEb2NzLAogIG5vcm06IG5vcm1Eb2NzLAogIG50aFJvb3Q6IG50aFJvb3REb2NzLAogIG50aFJvb3RzOiBudGhSb290c0RvY3MsCiAgcG93OiBwb3dEb2NzLAogIHJvdW5kOiByb3VuZERvY3MsCiAgc2lnbjogc2lnbkRvY3MsCiAgc3FydDogc3FydERvY3MsCiAgc3FydG06IHNxcnRtRG9jcywKICBzcXVhcmU6IHNxdWFyZURvY3MsCiAgc3VidHJhY3Q6IHN1YnRyYWN0RG9jcywKICB1bmFyeU1pbnVzOiB1bmFyeU1pbnVzRG9jcywKICB1bmFyeVBsdXM6IHVuYXJ5UGx1c0RvY3MsCiAgeGdjZDogeGdjZERvY3MsCiAgLy8gZnVuY3Rpb25zIC0gYml0d2lzZQogIGJpdEFuZDogYml0QW5kRG9jcywKICBiaXROb3Q6IGJpdE5vdERvY3MsCiAgYml0T3I6IGJpdE9yRG9jcywKICBiaXRYb3I6IGJpdFhvckRvY3MsCiAgbGVmdFNoaWZ0OiBsZWZ0U2hpZnREb2NzLAogIHJpZ2h0QXJpdGhTaGlmdDogcmlnaHRBcml0aFNoaWZ0RG9jcywKICByaWdodExvZ1NoaWZ0OiByaWdodExvZ1NoaWZ0RG9jcywKICAvLyBmdW5jdGlvbnMgLSBjb21iaW5hdG9yaWNzCiAgYmVsbE51bWJlcnM6IGJlbGxOdW1iZXJzRG9jcywKICBjYXRhbGFuOiBjYXRhbGFuRG9jcywKICBjb21wb3NpdGlvbjogY29tcG9zaXRpb25Eb2NzLAogIHN0aXJsaW5nUzI6IHN0aXJsaW5nUzJEb2NzLAogIC8vIGZ1bmN0aW9ucyAtIGNvcmUKICBjb25maWc6IGNvbmZpZ0RvY3MsCiAgImltcG9ydCI6IGltcG9ydERvY3MsCiAgdHlwZWQ6IHR5cGVkRG9jcywKICAvLyBmdW5jdGlvbnMgLSBjb21wbGV4CiAgYXJnOiBhcmdEb2NzLAogIGNvbmo6IGNvbmpEb2NzLAogIHJlOiByZURvY3MsCiAgaW06IGltRG9jcywKICAvLyBmdW5jdGlvbnMgLSBleHByZXNzaW9uCiAgZXZhbHVhdGU6IGV2YWx1YXRlRG9jcywKICBldmFsOiBldmFsdWF0ZURvY3MsCiAgLy8gVE9ETzogZGVwcmVjYXRlZCwgY2xlYW51cCBpbiB2NwogIGhlbHA6IGhlbHBEb2NzLAogIC8vIGZ1bmN0aW9ucyAtIGdlb21ldHJ5CiAgZGlzdGFuY2U6IGRpc3RhbmNlRG9jcywKICBpbnRlcnNlY3Q6IGludGVyc2VjdERvY3MsCiAgLy8gZnVuY3Rpb25zIC0gbG9naWNhbAogIGFuZDogYW5kRG9jcywKICBub3Q6IG5vdERvY3MsCiAgb3I6IG9yRG9jcywKICB4b3I6IHhvckRvY3MsCiAgLy8gZnVuY3Rpb25zIC0gbWF0cml4CiAgY29uY2F0OiBjb25jYXREb2NzLAogIGNyb3NzOiBjcm9zc0RvY3MsCiAgY29sdW1uOiBjb2x1bW5Eb2NzLAogIGN0cmFuc3Bvc2U6IGN0cmFuc3Bvc2VEb2NzLAogIGRldDogZGV0RG9jcywKICBkaWFnOiBkaWFnRG9jcywKICBkb3Q6IGRvdERvY3MsCiAgZ2V0TWF0cml4RGF0YVR5cGU6IGdldE1hdHJpeERhdGFUeXBlRG9jcywKICBpZGVudGl0eTogaWRlbnRpdHlEb2NzLAogIGZpbHRlcjogZmlsdGVyRG9jcywKICBmbGF0dGVuOiBmbGF0dGVuRG9jcywKICBmb3JFYWNoOiBmb3JFYWNoRG9jcywKICBpbnY6IGludkRvY3MsCiAgZWlnczogZWlnc0RvY3MsCiAga3Jvbjoga3JvbkRvY3MsCiAgbWFwOiBtYXBEb2NzLAogIG9uZXM6IG9uZXNEb2NzLAogIHBhcnRpdGlvblNlbGVjdDogcGFydGl0aW9uU2VsZWN0RG9jcywKICByYW5nZTogcmFuZ2VEb2NzLAogIHJlc2l6ZTogcmVzaXplRG9jcywKICByZXNoYXBlOiByZXNoYXBlRG9jcywKICByb3c6IHJvd0RvY3MsCiAgc2l6ZTogc2l6ZURvY3MsCiAgc29ydDogc29ydERvY3MsCiAgc3F1ZWV6ZTogc3F1ZWV6ZURvY3MsCiAgc3Vic2V0OiBzdWJzZXREb2NzLAogIHRyYWNlOiB0cmFjZURvY3MsCiAgdHJhbnNwb3NlOiB0cmFuc3Bvc2VEb2NzLAogIHplcm9zOiB6ZXJvc0RvY3MsCiAgLy8gZnVuY3Rpb25zIC0gcHJvYmFiaWxpdHkKICBjb21iaW5hdGlvbnM6IGNvbWJpbmF0aW9uc0RvY3MsCiAgY29tYmluYXRpb25zV2l0aFJlcDogY29tYmluYXRpb25zV2l0aFJlcERvY3MsCiAgLy8gZGlzdHJpYnV0aW9uOiBkaXN0cmlidXRpb25Eb2NzLAogIGZhY3RvcmlhbDogZmFjdG9yaWFsRG9jcywKICBnYW1tYTogZ2FtbWFEb2NzLAogIGtsZGl2ZXJnZW5jZToga2xkaXZlcmdlbmNlRG9jcywKICBtdWx0aW5vbWlhbDogbXVsdGlub21pYWxEb2NzLAogIHBlcm11dGF0aW9uczogcGVybXV0YXRpb25zRG9jcywKICBwaWNrUmFuZG9tOiBwaWNrUmFuZG9tRG9jcywKICByYW5kb206IHJhbmRvbURvY3MsCiAgcmFuZG9tSW50OiByYW5kb21JbnREb2NzLAogIC8vIGZ1bmN0aW9ucyAtIHJlbGF0aW9uYWwKICBjb21wYXJlOiBjb21wYXJlRG9jcywKICBjb21wYXJlTmF0dXJhbDogY29tcGFyZU5hdHVyYWxEb2NzLAogIGNvbXBhcmVUZXh0OiBjb21wYXJlVGV4dERvY3MsCiAgZGVlcEVxdWFsOiBkZWVwRXF1YWxEb2NzLAogIGVxdWFsOiBlcXVhbERvY3MsCiAgZXF1YWxUZXh0OiBlcXVhbFRleHREb2NzLAogIGxhcmdlcjogbGFyZ2VyRG9jcywKICBsYXJnZXJFcTogbGFyZ2VyRXFEb2NzLAogIHNtYWxsZXI6IHNtYWxsZXJEb2NzLAogIHNtYWxsZXJFcTogc21hbGxlckVxRG9jcywKICB1bmVxdWFsOiB1bmVxdWFsRG9jcywKICAvLyBmdW5jdGlvbnMgLSBzZXQKICBzZXRDYXJ0ZXNpYW46IHNldENhcnRlc2lhbkRvY3MsCiAgc2V0RGlmZmVyZW5jZTogc2V0RGlmZmVyZW5jZURvY3MsCiAgc2V0RGlzdGluY3Q6IHNldERpc3RpbmN0RG9jcywKICBzZXRJbnRlcnNlY3Q6IHNldEludGVyc2VjdERvY3MsCiAgc2V0SXNTdWJzZXQ6IHNldElzU3Vic2V0RG9jcywKICBzZXRNdWx0aXBsaWNpdHk6IHNldE11bHRpcGxpY2l0eURvY3MsCiAgc2V0UG93ZXJzZXQ6IHNldFBvd2Vyc2V0RG9jcywKICBzZXRTaXplOiBzZXRTaXplRG9jcywKICBzZXRTeW1EaWZmZXJlbmNlOiBzZXRTeW1EaWZmZXJlbmNlRG9jcywKICBzZXRVbmlvbjogc2V0VW5pb25Eb2NzLAogIC8vIGZ1bmN0aW9ucyAtIHNwZWNpYWwKICBlcmY6IGVyZkRvY3MsCiAgLy8gZnVuY3Rpb25zIC0gc3RhdGlzdGljcwogIG1hZDogbWFkRG9jcywKICBtYXg6IG1heERvY3MsCiAgbWVhbjogbWVhbkRvY3MsCiAgbWVkaWFuOiBtZWRpYW5Eb2NzLAogIG1pbjogbWluRG9jcywKICBtb2RlOiBtb2RlRG9jcywKICBwcm9kOiBwcm9kRG9jcywKICBxdWFudGlsZVNlcTogcXVhbnRpbGVTZXFEb2NzLAogIHN0ZDogc3RkRG9jcywKICBzdW06IHN1bURvY3MsCiAgdmFyaWFuY2U6IHZhcmlhbmNlRG9jcywKICAidmFyIjogdmFyaWFuY2VEb2NzLAogIC8vIFRPRE86IGRlcHJlY2F0ZWQsIGNsZWFudXAgaW4gdjcKICAvLyBmdW5jdGlvbnMgLSB0cmlnb25vbWV0cnkKICBhY29zOiBhY29zRG9jcywKICBhY29zaDogYWNvc2hEb2NzLAogIGFjb3Q6IGFjb3REb2NzLAogIGFjb3RoOiBhY290aERvY3MsCiAgYWNzYzogYWNzY0RvY3MsCiAgYWNzY2g6IGFjc2NoRG9jcywKICBhc2VjOiBhc2VjRG9jcywKICBhc2VjaDogYXNlY2hEb2NzLAogIGFzaW46IGFzaW5Eb2NzLAogIGFzaW5oOiBhc2luaERvY3MsCiAgYXRhbjogYXRhbkRvY3MsCiAgYXRhbmg6IGF0YW5oRG9jcywKICBhdGFuMjogYXRhbjJEb2NzLAogIGNvczogY29zRG9jcywKICBjb3NoOiBjb3NoRG9jcywKICBjb3Q6IGNvdERvY3MsCiAgY290aDogY290aERvY3MsCiAgY3NjOiBjc2NEb2NzLAogIGNzY2g6IGNzY2hEb2NzLAogIHNlYzogc2VjRG9jcywKICBzZWNoOiBzZWNoRG9jcywKICBzaW46IHNpbkRvY3MsCiAgc2luaDogc2luaERvY3MsCiAgdGFuOiB0YW5Eb2NzLAogIHRhbmg6IHRhbmhEb2NzLAogIC8vIGZ1bmN0aW9ucyAtIHVuaXRzCiAgdG86IHRvRG9jcywKICAvLyBmdW5jdGlvbnMgLSB1dGlscwogIGNsb25lOiBjbG9uZURvY3MsCiAgZm9ybWF0OiBmb3JtYXREb2NzLAogIGlzTmFOOiBpc05hTkRvY3MsCiAgaXNJbnRlZ2VyOiBpc0ludGVnZXJEb2NzLAogIGlzTmVnYXRpdmU6IGlzTmVnYXRpdmVEb2NzLAogIGlzTnVtZXJpYzogaXNOdW1lcmljRG9jcywKICBoYXNOdW1lcmljVmFsdWU6IGhhc051bWVyaWNWYWx1ZURvY3MsCiAgaXNQb3NpdGl2ZTogaXNQb3NpdGl2ZURvY3MsCiAgaXNQcmltZTogaXNQcmltZURvY3MsCiAgaXNaZXJvOiBpc1plcm9Eb2NzLAogIC8vIHByaW50OiBwcmludERvY3MgLy8gVE9ETzogYWRkIGRvY3VtZW50YXRpb24gZm9yIHByaW50IGFzIHNvb24gYXMgdGhlIHBhcnNlciBzdXBwb3J0cyBvYmplY3RzLgogIHR5cGVPZjogdHlwZU9mRG9jcywKICAidHlwZW9mIjogdHlwZU9mRG9jcywKICAvLyBUT0RPOiBkZXByZWNhdGVkLCBjbGVhbnVwIGluIHY3CiAgbnVtZXJpYzogbnVtZXJpY0RvY3MKfTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi9mdW5jdGlvbi9oZWxwLmpzCgoKCgp2YXIgaGVscF9uYW1lID0gJ2hlbHAnOwp2YXIgaGVscF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdGhXaXRoVHJhbnNmb3JtJywgJ0hlbHAnXTsKdmFyIGNyZWF0ZUhlbHAgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShoZWxwX25hbWUsIGhlbHBfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIG1hdGhXaXRoVHJhbnNmb3JtID0gX3JlZi5tYXRoV2l0aFRyYW5zZm9ybSwKICAgICAgSGVscCA9IF9yZWYuSGVscDsKCiAgLyoqCiAgICogUmV0cmlldmUgaGVscCBvbiBhIGZ1bmN0aW9uIG9yIGRhdGEgdHlwZS4KICAgKiBIZWxwIGZpbGVzIGFyZSByZXRyaWV2ZWQgZnJvbSB0aGUgZW1iZWRkZWQgZG9jdW1lbnRhdGlvbiBpbiBtYXRoLmRvY3MuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmhlbHAoc2VhcmNoKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBjb25zb2xlLmxvZyhtYXRoLmhlbHAoJ3NpbicpLnRvU3RyaW5nKCkpCiAgICogICAgY29uc29sZS5sb2cobWF0aC5oZWxwKG1hdGguYWRkKS50b1N0cmluZygpKQogICAqICAgIGNvbnNvbGUubG9nKG1hdGguaGVscChtYXRoLmFkZCkudG9KU09OKCkpCiAgICoKICAgKiBAcGFyYW0ge0Z1bmN0aW9uIHwgc3RyaW5nIHwgT2JqZWN0fSBzZWFyY2ggICBBIGZ1bmN0aW9uIG9yIGZ1bmN0aW9uIG5hbWUKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igd2hpY2ggdG8gZ2V0IGhlbHAKICAgKiBAcmV0dXJuIHtIZWxwfSBBIGhlbHAgb2JqZWN0CiAgICovCiAgcmV0dXJuIHR5cGVkKGhlbHBfbmFtZSwgewogICAgYW55OiBmdW5jdGlvbiBhbnkoc2VhcmNoKSB7CiAgICAgIHZhciBwcm9wOwogICAgICB2YXIgc2VhcmNoTmFtZSA9IHNlYXJjaDsKCiAgICAgIGlmICh0eXBlb2Ygc2VhcmNoICE9PSAnc3RyaW5nJykgewogICAgICAgIGZvciAocHJvcCBpbiBtYXRoV2l0aFRyYW5zZm9ybSkgewogICAgICAgICAgLy8gc2VhcmNoIGluIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzCiAgICAgICAgICBpZiAoT2JqZWN0KHV0aWxzX29iamVjdFsiZiIgLyogaGFzT3duUHJvcGVydHkgKi9dKShtYXRoV2l0aFRyYW5zZm9ybSwgcHJvcCkgJiYgc2VhcmNoID09PSBtYXRoV2l0aFRyYW5zZm9ybVtwcm9wXSkgewogICAgICAgICAgICBzZWFyY2hOYW1lID0gcHJvcDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8qIFRPRE86IGltcGxlbWVudCBoZWxwIGZvciBkYXRhIHR5cGVzCiAgICAgICAgIGlmICghdGV4dCkgewogICAgICAgICAvLyBzZWFyY2ggZGF0YSB0eXBlCiAgICAgICAgIGZvciAocHJvcCBpbiBtYXRoLnR5cGUpIHsKICAgICAgICAgaWYgKGhhc093blByb3BlcnR5KG1hdGgsIHByb3ApKSB7CiAgICAgICAgIGlmIChzZWFyY2ggPT09IG1hdGgudHlwZVtwcm9wXSkgewogICAgICAgICB0ZXh0ID0gcHJvcAogICAgICAgICBicmVhawogICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgICovCgogICAgICB9CgogICAgICB2YXIgZG9jID0gZ2V0U2FmZVByb3BlcnR5KGVtYmVkZGVkRG9jcywgc2VhcmNoTmFtZSk7CgogICAgICBpZiAoIWRvYykgewogICAgICAgIHZhciBzZWFyY2hUZXh0ID0gdHlwZW9mIHNlYXJjaE5hbWUgPT09ICdmdW5jdGlvbicgPyBzZWFyY2hOYW1lLm5hbWUgOiBzZWFyY2hOYW1lOwogICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gZG9jdW1lbnRhdGlvbiBmb3VuZCBvbiAiJyArIHNlYXJjaFRleHQgKyAnIicpOwogICAgICB9CgogICAgICByZXR1cm4gbmV3IEhlbHAoZG9jKTsKICAgIH0KICB9KTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3R5cGUvY2hhaW4vZnVuY3Rpb24vY2hhaW4uanMKCnZhciBjaGFpbl9uYW1lID0gJ2NoYWluJzsKdmFyIGNoYWluX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQ2hhaW4nXTsKdmFyIGNyZWF0ZUNoYWluID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoY2hhaW5fbmFtZSwgY2hhaW5fZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIENoYWluID0gX3JlZi5DaGFpbjsKCiAgLyoqCiAgICogV3JhcCBhbnkgdmFsdWUgaW4gYSBjaGFpbiwgYWxsb3dpbmcgdG8gcGVyZm9ybSBjaGFpbmVkIG9wZXJhdGlvbnMgb24KICAgKiB0aGUgdmFsdWUuCiAgICoKICAgKiBBbGwgbWV0aG9kcyBhdmFpbGFibGUgaW4gdGhlIG1hdGguanMgbGlicmFyeSBjYW4gYmUgY2FsbGVkIHVwb24gdGhlIGNoYWluLAogICAqIGFuZCB0aGVuIHdpbGwgYmUgZXZhbHVhdGVkIHdpdGggdGhlIHZhbHVlIGl0c2VsZiBhcyBmaXJzdCBhcmd1bWVudC4KICAgKiBUaGUgY2hhaW4gY2FuIGJlIGNsb3NlZCBieSBleGVjdXRpbmcgYGNoYWluLmRvbmUoKWAsIHdoaWNoIHJldHVybnMKICAgKiB0aGUgZmluYWwgdmFsdWUuCiAgICoKICAgKiBUaGUgY2hhaW4gaGFzIGEgbnVtYmVyIG9mIHNwZWNpYWwgZnVuY3Rpb25zOgogICAqCiAgICogLSBgZG9uZSgpYCAgICAgRmluYWxpemUgdGhlIGNoYWluIGFuZCByZXR1cm4gdGhlIGNoYWluJ3MgdmFsdWUuCiAgICogLSBgdmFsdWVPZigpYCAgVGhlIHNhbWUgYXMgYGRvbmUoKWAKICAgKiAtIGB0b1N0cmluZygpYCBFeGVjdXRlcyBgbWF0aC5mb3JtYXQoKWAgb250byB0aGUgY2hhaW4ncyB2YWx1ZSwgcmV0dXJuaW5nCiAgICogICAgICAgICAgICAgICAgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5jaGFpbih2YWx1ZSkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgIG1hdGguY2hhaW4oMykKICAgKiAgICAgICAgIC5hZGQoNCkKICAgKiAgICAgICAgIC5zdWJ0cmFjdCgyKQogICAqICAgICAgICAgLmRvbmUoKSAgICAgLy8gNQogICAqCiAgICogICAgIG1hdGguY2hhaW4oIFtbMSwgMl0sIFszLCA0XV0gKQogICAqICAgICAgICAgLnN1YnNldChtYXRoLmluZGV4KDAsIDApLCA4KQogICAqICAgICAgICAgLm11bHRpcGx5KDMpCiAgICogICAgICAgICAuZG9uZSgpICAgICAvLyBbWzI0LCA2XSwgWzksIDEyXV0KICAgKgogICAqIEBwYXJhbSB7Kn0gW3ZhbHVlXSAgIEEgdmFsdWUgb2YgYW55IHR5cGUgb24gd2hpY2ggdG8gc3RhcnQgYSBjaGFpbmVkIG9wZXJhdGlvbi4KICAgKiBAcmV0dXJuIHttYXRoLkNoYWlufSBUaGUgY3JlYXRlZCBjaGFpbgogICAqLwogIHJldHVybiB0eXBlZChjaGFpbl9uYW1lLCB7CiAgICAnJzogZnVuY3Rpb24gXygpIHsKICAgICAgcmV0dXJuIG5ldyBDaGFpbigpOwogICAgfSwKICAgIGFueTogZnVuY3Rpb24gYW55KHZhbHVlKSB7CiAgICAgIHJldHVybiBuZXcgQ2hhaW4odmFsdWUpOwogICAgfQogIH0pOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vbWF0cml4L2RldC5qcwoKCgoKdmFyIGRldF9uYW1lID0gJ2RldCc7CnZhciBkZXRfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknLCAndW5hcnlNaW51cycsICdsdXAnXTsKdmFyIGNyZWF0ZURldCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGRldF9uYW1lLCBkZXRfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LAogICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsCiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSwKICAgICAgdW5hcnlNaW51cyA9IF9yZWYudW5hcnlNaW51cywKICAgICAgbHVwID0gX3JlZi5sdXA7CgogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXRyaXguCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICBtYXRoLmRldCh4KQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmRldChbWzEsIDJdLCBbMywgNF1dKSAvLyByZXR1cm5zIC0yCiAgICoKICAgKiAgICBjb25zdCBBID0gWwogICAqICAgICAgWy0yLCAyLCAzXSwKICAgKiAgICAgIFstMSwgMSwgM10sCiAgICogICAgICBbMiwgMCwgLTFdCiAgICogICAgXQogICAqICAgIG1hdGguZGV0KEEpIC8vIHJldHVybnMgNgogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBpbnYKICAgKgogICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHggIEEgbWF0cml4CiAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgZGV0ZXJtaW5hbnQgb2YgYHhgCiAgICovCiAgcmV0dXJuIHR5cGVkKGRldF9uYW1lLCB7CiAgICBhbnk6IGZ1bmN0aW9uIGFueSh4KSB7CiAgICAgIHJldHVybiBPYmplY3QodXRpbHNfb2JqZWN0WyJhIiAvKiBjbG9uZSAqL10pKHgpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIGRldCh4KSB7CiAgICAgIHZhciBzaXplOwoKICAgICAgaWYgKE9iamVjdChpc1sidiIgLyogaXNNYXRyaXggKi9dKSh4KSkgewogICAgICAgIHNpemUgPSB4LnNpemUoKTsKICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHgpKSB7CiAgICAgICAgeCA9IG1hdHJpeCh4KTsKICAgICAgICBzaXplID0geC5zaXplKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gYSBzY2FsYXIKICAgICAgICBzaXplID0gW107CiAgICAgIH0KCiAgICAgIHN3aXRjaCAoc2l6ZS5sZW5ndGgpIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICAvLyBzY2FsYXIKICAgICAgICAgIHJldHVybiBPYmplY3QodXRpbHNfb2JqZWN0WyJhIiAvKiBjbG9uZSAqL10pKHgpOwoKICAgICAgICBjYXNlIDE6CiAgICAgICAgICAvLyB2ZWN0b3IKICAgICAgICAgIGlmIChzaXplWzBdID09PSAxKSB7CiAgICAgICAgICAgIHJldHVybiBPYmplY3QodXRpbHNfb2JqZWN0WyJhIiAvKiBjbG9uZSAqL10pKHgudmFsdWVPZigpWzBdKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArIE9iamVjdCh1dGlsc19zdHJpbmdbImQiIC8qIGZvcm1hdCAqL10pKHNpemUpICsgJyknKTsKICAgICAgICAgIH0KCiAgICAgICAgY2FzZSAyOgogICAgICAgICAgewogICAgICAgICAgICAvLyB0d28gZGltZW5zaW9uYWwgYXJyYXkKICAgICAgICAgICAgdmFyIHJvd3MgPSBzaXplWzBdOwogICAgICAgICAgICB2YXIgY29scyA9IHNpemVbMV07CgogICAgICAgICAgICBpZiAocm93cyA9PT0gY29scykgewogICAgICAgICAgICAgIHJldHVybiBfZGV0KHguY2xvbmUoKS52YWx1ZU9mKCksIHJvd3MsIGNvbHMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArIE9iamVjdCh1dGlsc19zdHJpbmdbImQiIC8qIGZvcm1hdCAqL10pKHNpemUpICsgJyknKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgLy8gbXVsdGkgZGltZW5zaW9uYWwgYXJyYXkKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSB0d28gZGltZW5zaW9uYWwgJyArICcoc2l6ZTogJyArIE9iamVjdCh1dGlsc19zdHJpbmdbImQiIC8qIGZvcm1hdCAqL10pKHNpemUpICsgJyknKTsKICAgICAgfQogICAgfQogIH0pOwogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXRyaXgKICAgKiBAcGFyYW0ge0FycmF5W119IG1hdHJpeCAgQSBzcXVhcmUsIHR3byBkaW1lbnNpb25hbCBtYXRyaXgKICAgKiBAcGFyYW0ge251bWJlcn0gcm93cyAgICAgTnVtYmVyIG9mIHJvd3Mgb2YgdGhlIG1hdHJpeCAoemVyby1iYXNlZCkKICAgKiBAcGFyYW0ge251bWJlcn0gY29scyAgICAgTnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIG1hdHJpeCAoemVyby1iYXNlZCkKICAgKiBAcmV0dXJucyB7bnVtYmVyfSBkZXQKICAgKiBAcHJpdmF0ZQogICAqLwoKICBmdW5jdGlvbiBfZGV0KG1hdHJpeCwgcm93cywgY29scykgewogICAgaWYgKHJvd3MgPT09IDEpIHsKICAgICAgLy8gdGhpcyBpcyBhIDEgeCAxIG1hdHJpeAogICAgICByZXR1cm4gT2JqZWN0KHV0aWxzX29iamVjdFsiYSIgLyogY2xvbmUgKi9dKShtYXRyaXhbMF1bMF0pOwogICAgfSBlbHNlIGlmIChyb3dzID09PSAyKSB7CiAgICAgIC8vIHRoaXMgaXMgYSAyIHggMiBtYXRyaXgKICAgICAgLy8gdGhlIGRldGVybWluYW50IG9mIFthMTEsYTEyO2EyMSxhMjJdIGlzIGRldCA9IGExMSphMjItYTIxKmExMgogICAgICByZXR1cm4gc3VidHJhY3QobXVsdGlwbHkobWF0cml4WzBdWzBdLCBtYXRyaXhbMV1bMV0pLCBtdWx0aXBseShtYXRyaXhbMV1bMF0sIG1hdHJpeFswXVsxXSkpOwogICAgfSBlbHNlIHsKICAgICAgLy8gQ29tcHV0ZSB0aGUgTFUgZGVjb21wb3NpdGlvbgogICAgICB2YXIgZGVjb21wID0gbHVwKG1hdHJpeCk7IC8vIFRoZSBkZXRlcm1pbmFudCBpcyB0aGUgcHJvZHVjdCBvZiB0aGUgZGlhZ29uYWwgZW50cmllcyBvZiBVIChhbmQgdGhvc2Ugb2YgTCwgYnV0IHRoZXkgYXJlIGFsbCAxKQoKICAgICAgdmFyIGRldCA9IGRlY29tcC5VWzBdWzBdOwoKICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IHJvd3M7IF9pKyspIHsKICAgICAgICBkZXQgPSBtdWx0aXBseShkZXQsIGRlY29tcC5VW19pXVtfaV0pOwogICAgICB9IC8vIFRoZSBkZXRlcm1pbmFudCB3aWxsIGJlIG11bHRpcGxpZWQgYnkgMSBvciAtMSBkZXBlbmRpbmcgb24gdGhlIHBhcml0eSBvZiB0aGUgcGVybXV0YXRpb24gbWF0cml4LgogICAgICAvLyBUaGlzIGNhbiBiZSBkZXRlcm1pbmVkIGJ5IGNvdW50aW5nIHRoZSBjeWNsZXMuIFRoaXMgaXMgcm91Z2hseSBhIGxpbmVhciB0aW1lIGFsZ29yaXRobS4KCgogICAgICB2YXIgZXZlbkN5Y2xlcyA9IDA7CiAgICAgIHZhciBpID0gMDsKICAgICAgdmFyIHZpc2l0ZWQgPSBbXTsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUgKHZpc2l0ZWRbaV0pIHsKICAgICAgICAgIGkrKzsKICAgICAgICB9CgogICAgICAgIGlmIChpID49IHJvd3MpIGJyZWFrOwogICAgICAgIHZhciBqID0gaTsKICAgICAgICB2YXIgY3ljbGVMZW4gPSAwOwoKICAgICAgICB3aGlsZSAoIXZpc2l0ZWRbZGVjb21wLnBbal1dKSB7CiAgICAgICAgICB2aXNpdGVkW2RlY29tcC5wW2pdXSA9IHRydWU7CiAgICAgICAgICBqID0gZGVjb21wLnBbal07CiAgICAgICAgICBjeWNsZUxlbisrOwogICAgICAgIH0KCiAgICAgICAgaWYgKGN5Y2xlTGVuICUgMiA9PT0gMCkgewogICAgICAgICAgZXZlbkN5Y2xlcysrOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIGV2ZW5DeWNsZXMgJSAyID09PSAwID8gZGV0IDogdW5hcnlNaW51cyhkZXQpOwogICAgfQogIH0KfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL21hdHJpeC9pbnYuanMKCgoKCnZhciBpbnZfbmFtZSA9ICdpbnYnOwp2YXIgaW52X2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2RpdmlkZVNjYWxhcicsICdhZGRTY2FsYXInLCAnbXVsdGlwbHknLCAndW5hcnlNaW51cycsICdkZXQnLCAnaWRlbnRpdHknLCAnYWJzJ107CnZhciBjcmVhdGVJbnYgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShpbnZfbmFtZSwgaW52X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCwKICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsCiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLAogICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksCiAgICAgIHVuYXJ5TWludXMgPSBfcmVmLnVuYXJ5TWludXMsCiAgICAgIGRldCA9IF9yZWYuZGV0LAogICAgICBpZGVudGl0eSA9IF9yZWYuaWRlbnRpdHksCiAgICAgIGFicyA9IF9yZWYuYWJzOwoKICAvKioKICAgKiBDYWxjdWxhdGUgdGhlIGludmVyc2Ugb2YgYSBzcXVhcmUgbWF0cml4LgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIG1hdGguaW52KHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgICBtYXRoLmludihbWzEsIDJdLCBbMywgNF1dKSAgLy8gcmV0dXJucyBbWy0yLCAxXSwgWzEuNSwgLTAuNV1dCiAgICogICAgIG1hdGguaW52KDQpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDAuMjUKICAgKiAgICAgMSAvIDQgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMC4yNQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICAgZGV0LCB0cmFuc3Bvc2UKICAgKgogICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICAgICBNYXRyaXggdG8gYmUgaW52ZXJzZWQKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBpbnZlcnNlIG9mIGB4YC4KICAgKi8KICByZXR1cm4gdHlwZWQoaW52X25hbWUsIHsKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHsKICAgICAgdmFyIHNpemUgPSBPYmplY3QoaXNbInYiIC8qIGlzTWF0cml4ICovXSkoeCkgPyB4LnNpemUoKSA6IE9iamVjdCh1dGlsc19hcnJheVsiYSIgLyogYXJyYXlTaXplICovXSkoeCk7CgogICAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgLy8gdmVjdG9yCiAgICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkgewogICAgICAgICAgICBpZiAoT2JqZWN0KGlzWyJ2IiAvKiBpc01hdHJpeCAqL10pKHgpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIG1hdHJpeChbZGl2aWRlU2NhbGFyKDEsIHgudmFsdWVPZigpWzBdKV0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJldHVybiBbZGl2aWRlU2NhbGFyKDEsIHhbMF0pXTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAnICsgJyhzaXplOiAnICsgT2JqZWN0KHV0aWxzX3N0cmluZ1siZCIgLyogZm9ybWF0ICovXSkoc2l6ZSkgKyAnKScpOwogICAgICAgICAgfQoKICAgICAgICBjYXNlIDI6CiAgICAgICAgICAvLyB0d28gZGltZW5zaW9uYWwgYXJyYXkKICAgICAgICAgIHsKICAgICAgICAgICAgdmFyIHJvd3MgPSBzaXplWzBdOwogICAgICAgICAgICB2YXIgY29scyA9IHNpemVbMV07CgogICAgICAgICAgICBpZiAocm93cyA9PT0gY29scykgewogICAgICAgICAgICAgIGlmIChPYmplY3QoaXNbInYiIC8qIGlzTWF0cml4ICovXSkoeCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBtYXRyaXgoX2ludih4LnZhbHVlT2YoKSwgcm93cywgY29scyksIHguc3RvcmFnZSgpKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gcmV0dXJuIGFuIEFycmF5CiAgICAgICAgICAgICAgICByZXR1cm4gX2ludih4LCByb3dzLCBjb2xzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAnICsgJyhzaXplOiAnICsgT2JqZWN0KHV0aWxzX3N0cmluZ1siZCIgLyogZm9ybWF0ICovXSkoc2l6ZSkgKyAnKScpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAvLyBtdWx0aSBkaW1lbnNpb25hbCBhcnJheQogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHR3byBkaW1lbnNpb25hbCAnICsgJyhzaXplOiAnICsgT2JqZWN0KHV0aWxzX3N0cmluZ1siZCIgLyogZm9ybWF0ICovXSkoc2l6ZSkgKyAnKScpOwogICAgICB9CiAgICB9LAogICAgYW55OiBmdW5jdGlvbiBhbnkoeCkgewogICAgICAvLyBzY2FsYXIKICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcigxLCB4KTsgLy8gRklYTUU6IGNyZWF0ZSBhIEJpZ051bWJlciBvbmUgd2hlbiBjb25maWd1cmVkIGZvciBiaWdudW1iZXJzCiAgICB9CiAgfSk7CiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIG9mIGEgc3F1YXJlIG1hdHJpeAogICAqIEBwYXJhbSB7QXJyYXlbXX0gbWF0ICAgICBBIHNxdWFyZSBtYXRyaXgKICAgKiBAcGFyYW0ge251bWJlcn0gcm93cyAgICAgTnVtYmVyIG9mIHJvd3MKICAgKiBAcGFyYW0ge251bWJlcn0gY29scyAgICAgTnVtYmVyIG9mIGNvbHVtbnMsIG11c3QgZXF1YWwgcm93cwogICAqIEByZXR1cm4ge0FycmF5W119IGludiAgICBJbnZlcnNlIG1hdHJpeAogICAqIEBwcml2YXRlCiAgICovCgogIGZ1bmN0aW9uIF9pbnYobWF0LCByb3dzLCBjb2xzKSB7CiAgICB2YXIgciwgcywgZiwgdmFsdWUsIHRlbXA7CgogICAgaWYgKHJvd3MgPT09IDEpIHsKICAgICAgLy8gdGhpcyBpcyBhIDEgeCAxIG1hdHJpeAogICAgICB2YWx1ZSA9IG1hdFswXVswXTsKCiAgICAgIGlmICh2YWx1ZSA9PT0gMCkgewogICAgICAgIHRocm93IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIGludmVyc2UsIGRldGVybWluYW50IGlzIHplcm8nKTsKICAgICAgfQoKICAgICAgcmV0dXJuIFtbZGl2aWRlU2NhbGFyKDEsIHZhbHVlKV1dOwogICAgfSBlbHNlIGlmIChyb3dzID09PSAyKSB7CiAgICAgIC8vIHRoaXMgaXMgYSAyIHggMiBtYXRyaXgKICAgICAgdmFyIGQgPSBkZXQobWF0KTsKCiAgICAgIGlmIChkID09PSAwKSB7CiAgICAgICAgdGhyb3cgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgaW52ZXJzZSwgZGV0ZXJtaW5hbnQgaXMgemVybycpOwogICAgICB9CgogICAgICByZXR1cm4gW1tkaXZpZGVTY2FsYXIobWF0WzFdWzFdLCBkKSwgZGl2aWRlU2NhbGFyKHVuYXJ5TWludXMobWF0WzBdWzFdKSwgZCldLCBbZGl2aWRlU2NhbGFyKHVuYXJ5TWludXMobWF0WzFdWzBdKSwgZCksIGRpdmlkZVNjYWxhcihtYXRbMF1bMF0sIGQpXV07CiAgICB9IGVsc2UgewogICAgICAvLyB0aGlzIGlzIGEgbWF0cml4IG9mIDMgeCAzIG9yIGxhcmdlcgogICAgICAvLyBjYWxjdWxhdGUgaW52ZXJzZSB1c2luZyBnYXVzcy1qb3JkYW4gZWxpbWluYXRpb24KICAgICAgLy8gICAgICBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HYXVzc2lhbl9lbGltaW5hdGlvbgogICAgICAvLyAgICAgIGh0dHA6Ly9tYXRod29ybGQud29sZnJhbS5jb20vTWF0cml4SW52ZXJzZS5odG1sCiAgICAgIC8vICAgICAgaHR0cDovL21hdGgudXd3LmVkdS9+bWNmYXJsYXQvaW52ZXJzZS5odG0KICAgICAgLy8gbWFrZSBhIGNvcHkgb2YgdGhlIG1hdHJpeCAob25seSB0aGUgYXJyYXlzLCBub3Qgb2YgdGhlIGVsZW1lbnRzKQogICAgICB2YXIgQSA9IG1hdC5jb25jYXQoKTsKCiAgICAgIGZvciAociA9IDA7IHIgPCByb3dzOyByKyspIHsKICAgICAgICBBW3JdID0gQVtyXS5jb25jYXQoKTsKICAgICAgfSAvLyBjcmVhdGUgYW4gaWRlbnRpdHkgbWF0cml4IHdoaWNoIGluIHRoZSBlbmQgd2lsbCBjb250YWluIHRoZQogICAgICAvLyBtYXRyaXggaW52ZXJzZQoKCiAgICAgIHZhciBCID0gaWRlbnRpdHkocm93cykudmFsdWVPZigpOyAvLyBsb29wIG92ZXIgYWxsIGNvbHVtbnMsIGFuZCBwZXJmb3JtIHJvdyByZWR1Y3Rpb25zCgogICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNvbHM7IGMrKykgewogICAgICAgIC8vIFBpdm90aW5nOiBTd2FwIHJvdyBjIHdpdGggcm93IHIsIHdoZXJlIHJvdyByIGNvbnRhaW5zIHRoZSBsYXJnZXN0IGVsZW1lbnQgQVtyXVtjXQogICAgICAgIHZhciBBQmlnID0gYWJzKEFbY11bY10pOwogICAgICAgIHZhciByQmlnID0gYzsKICAgICAgICByID0gYyArIDE7CgogICAgICAgIHdoaWxlIChyIDwgcm93cykgewogICAgICAgICAgaWYgKGFicyhBW3JdW2NdKSA+IEFCaWcpIHsKICAgICAgICAgICAgQUJpZyA9IGFicyhBW3JdW2NdKTsKICAgICAgICAgICAgckJpZyA9IHI7CiAgICAgICAgICB9CgogICAgICAgICAgcisrOwogICAgICAgIH0KCiAgICAgICAgaWYgKEFCaWcgPT09IDApIHsKICAgICAgICAgIHRocm93IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIGludmVyc2UsIGRldGVybWluYW50IGlzIHplcm8nKTsKICAgICAgICB9CgogICAgICAgIHIgPSByQmlnOwoKICAgICAgICBpZiAociAhPT0gYykgewogICAgICAgICAgdGVtcCA9IEFbY107CiAgICAgICAgICBBW2NdID0gQVtyXTsKICAgICAgICAgIEFbcl0gPSB0ZW1wOwogICAgICAgICAgdGVtcCA9IEJbY107CiAgICAgICAgICBCW2NdID0gQltyXTsKICAgICAgICAgIEJbcl0gPSB0ZW1wOwogICAgICAgIH0gLy8gZWxpbWluYXRlIG5vbi16ZXJvIHZhbHVlcyBvbiB0aGUgb3RoZXIgcm93cyBhdCBjb2x1bW4gYwoKCiAgICAgICAgdmFyIEFjID0gQVtjXTsKICAgICAgICB2YXIgQmMgPSBCW2NdOwoKICAgICAgICBmb3IgKHIgPSAwOyByIDwgcm93czsgcisrKSB7CiAgICAgICAgICB2YXIgQXIgPSBBW3JdOwogICAgICAgICAgdmFyIEJyID0gQltyXTsKCiAgICAgICAgICBpZiAociAhPT0gYykgewogICAgICAgICAgICAvLyBlbGltaW5hdGUgdmFsdWUgYXQgY29sdW1uIGMgYW5kIHJvdyByCiAgICAgICAgICAgIGlmIChBcltjXSAhPT0gMCkgewogICAgICAgICAgICAgIGYgPSBkaXZpZGVTY2FsYXIodW5hcnlNaW51cyhBcltjXSksIEFjW2NdKTsgLy8gYWRkIChmICogcm93IGMpIHRvIHJvdyByIHRvIGVsaW1pbmF0ZSB0aGUgdmFsdWUKICAgICAgICAgICAgICAvLyBhdCBjb2x1bW4gYwoKICAgICAgICAgICAgICBmb3IgKHMgPSBjOyBzIDwgY29sczsgcysrKSB7CiAgICAgICAgICAgICAgICBBcltzXSA9IGFkZFNjYWxhcihBcltzXSwgbXVsdGlwbHkoZiwgQWNbc10pKTsKICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIGZvciAocyA9IDA7IHMgPCBjb2xzOyBzKyspIHsKICAgICAgICAgICAgICAgIEJyW3NdID0gYWRkU2NhbGFyKEJyW3NdLCBtdWx0aXBseShmLCBCY1tzXSkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gbm9ybWFsaXplIHZhbHVlIGF0IEFjYyB0byAxLAogICAgICAgICAgICAvLyBkaXZpZGUgZWFjaCB2YWx1ZSBvbiByb3cgciB3aXRoIHRoZSB2YWx1ZSBhdCBBY2MKICAgICAgICAgICAgZiA9IEFjW2NdOwoKICAgICAgICAgICAgZm9yIChzID0gYzsgcyA8IGNvbHM7IHMrKykgewogICAgICAgICAgICAgIEFyW3NdID0gZGl2aWRlU2NhbGFyKEFyW3NdLCBmKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIChzID0gMDsgcyA8IGNvbHM7IHMrKykgewogICAgICAgICAgICAgIEJyW3NdID0gZGl2aWRlU2NhbGFyKEJyW3NdLCBmKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIEI7CiAgICB9CiAgfQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vbWF0cml4L2VpZ3MuanMKCgoKdmFyIGVpZ3NfbmFtZSA9ICdlaWdzJzsKdmFyIGVpZ3NfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnYWRkU2NhbGFyJywgJ2VxdWFsJywgJ3N1YnRyYWN0JywgJ2FicycsICdhdGFuJywgJ2NvcycsICdzaW4nLCAnbXVsdGlwbHlTY2FsYXInLCAnaW52JywgJ2JpZ251bWJlcicsICdtdWx0aXBseScsICdhZGQnXTsKdmFyIGNyZWF0ZUVpZ3MgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShlaWdzX25hbWUsIGVpZ3NfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LAogICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhciwKICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LAogICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsCiAgICAgIGFicyA9IF9yZWYuYWJzLAogICAgICBhdGFuID0gX3JlZi5hdGFuLAogICAgICBjb3MgPSBfcmVmLmNvcywKICAgICAgc2luID0gX3JlZi5zaW4sCiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhciwKICAgICAgaW52ID0gX3JlZi5pbnYsCiAgICAgIGJpZ251bWJlciA9IF9yZWYuYmlnbnVtYmVyLAogICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksCiAgICAgIGFkZCA9IF9yZWYuYWRkOwoKICAvKioKICAgKiBDb21wdXRlIGVpZ2VudmFsdWUgYW5kIGVpZ2VudmVjdG9yIG9mIGEgcmVhbCBzeW1tZXRyaWMgbWF0cml4LgogICAqIE9ubHkgYXBwbGljYWJsZSB0byB0d28gZGltZW5zaW9uYWwgc3ltbWV0cmljIG1hdHJpY2VzLiBVc2VzIEphY29iaQogICAqIEFsZ29yaXRobS4gTWF0cml4IGNvbnRhaW5pbmcgbWl4ZWQgdHlwZSAoJ251bWJlcicsICdiaWdudW1iZXInLCAnZnJhY3Rpb24nKQogICAqIG9mIGVsZW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLiBJbnB1dCBtYXRyaXggb3IgMkQgYXJyYXkgc2hvdWxkIGNvbnRhaW4gYWxsIGVsZW1lbnRzCiAgICogb2YgZWl0aGVyICdudW1iZXInLCAnYmlnbnVtYmVyJyBvciAnZnJhY3Rpb24nIHR5cGUuIEZvciAnbnVtYmVyJyBhbmQgJ2ZyYWN0aW9uJywgdGhlCiAgICogZWlnZW52YWx1ZXMgYXJlIG9mICdudW1iZXInIHR5cGUuIEZvciAnYmlnbnVtYmVyJyB0aGUgZWlnZW52YWx1ZXMgYXJlIG9mICcnYmlnbnVtYmVyJyB0eXBlLgogICAqIEVpZ2VudmVjdG9ycyBhcmUgYWx3YXlzIG9mICdudW1iZXInIHR5cGUuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICAgbWF0aC5laWdzKHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgICBjb25zdCBIID0gW1s1LCAyLjNdLCBbMi4zLCAxXV0KICAgKiAgICAgY29uc3QgYW5zID0gbWF0aC5laWdzKEgpIC8vIHJldHVybnMge3ZhbHVlczogW0UxLEUyLi4uc29ydGVkXSwgdmVjdG9yczogW3YxLHYyLi4uLiBjb3JyZXNwb25kaW5nIHZlY3RvcnNdfQogICAqICAgICBjb25zdCBFID0gYW5zLnZhbHVlcwogICAqICAgICBjb25zdCBVID0gYW5zLnZlY3RvcnMKICAgKiAgICAgY29uc3QgVVR4SHhVID0gbWF0aC5tdWx0aXBseShtYXRoLnRyYW5zcG9zZShVKSwgSCwgVSkgLy8gcm90YXRlcyBIIHRvIHRoZSBlaWdlbi1yZXByZXNlbnRhdGlvbgogICAqICAgICBFWzBdID09IFVUeEh4VVswXVswXSAgLy8gcmV0dXJucyB0cnVlCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICAgaW52CiAgICoKICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSB4ICBNYXRyaXggdG8gYmUgZGlhZ29uYWxpemVkCiAgICogQHJldHVybiB7e3ZhbHVlczogQXJyYXksIHZlY3RvcnM6IEFycmF5fSB8IHt2YWx1ZXM6IE1hdHJpeCwgdmVjdG9yczogTWF0cml4fX0gT2JqZWN0IGNvbnRhaW5pbmcgZWlnZW52YWx1ZXMgKEFycmF5IG9yIE1hdHJpeCkgYW5kIGVpZ2VudmVjdG9ycyAoMkQgQXJyYXkvTWF0cml4KS4KICAgKi8KICB2YXIgZWlncyA9IHR5cGVkKCdlaWdzJywgewogICAgQXJyYXk6IGZ1bmN0aW9uIEFycmF5KHgpIHsKICAgICAgLy8gY2hlY2sgYXJyYXkgc2l6ZQogICAgICB2YXIgbWF0ID0gbWF0cml4KHgpOwogICAgICB2YXIgc2l6ZSA9IG1hdC5zaXplKCk7CgogICAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIgfHwgc2l6ZVswXSAhPT0gc2l6ZVsxXSkgewogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArIE9iamVjdCh1dGlsc19zdHJpbmdbImQiIC8qIGZvcm1hdCAqL10pKHNpemUpICsgJyknKTsKICAgICAgfSAvLyB1c2UgZGVuc2UgMkQgbWF0cml4IGltcGxlbWVudGF0aW9uCgoKICAgICAgdmFyIGFucyA9IGNoZWNrQW5kU3VibWl0KG1hdCwgc2l6ZVswXSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgdmFsdWVzOiBhbnNbMF0sCiAgICAgICAgdmVjdG9yczogYW5zWzFdCiAgICAgIH07CiAgICB9LAogICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkgewogICAgICAvLyB1c2UgZGVuc2UgMkQgYXJyYXkgaW1wbGVtZW50YXRpb24KICAgICAgLy8gZGVuc2UgbWF0cml4CiAgICAgIHZhciBzaXplID0geC5zaXplKCk7CgogICAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIgfHwgc2l6ZVswXSAhPT0gc2l6ZVsxXSkgewogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArIE9iamVjdCh1dGlsc19zdHJpbmdbImQiIC8qIGZvcm1hdCAqL10pKHNpemUpICsgJyknKTsKICAgICAgfQoKICAgICAgdmFyIGFucyA9IGNoZWNrQW5kU3VibWl0KHgsIHNpemVbMF0pOwogICAgICByZXR1cm4gewogICAgICAgIHZhbHVlczogbWF0cml4KGFuc1swXSksCiAgICAgICAgdmVjdG9yczogbWF0cml4KGFuc1sxXSkKICAgICAgfTsKICAgIH0KICB9KTsgLy8gSXMgdGhlIG1hdHJpeAogIC8vIHN5bW1ldHJpYyA/CgogIGZ1bmN0aW9uIGlzU3ltbWV0cmljKHgsIG4pIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgIGZvciAodmFyIGogPSBpOyBqIDwgbjsgaisrKSB7CiAgICAgICAgLy8gbm90IHN5bW10cmljCiAgICAgICAgaWYgKCFlcXVhbCh4W2ldW2pdLCB4W2pdW2ldKSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5wdXQgbWF0cml4IGlzIG5vdCBzeW1tZXRyaWMnKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9IC8vIGNoZWNrIGlucHV0IGZvciBwb3NzaWJsZSBwcm9ibGVtcwogIC8vIGFuZCBwZXJmb3JtIGRpYWdvbmFsaXphdGlvbiBlZmZpY2llbnRseSBmb3IKICAvLyBzcGVjaWZpYyB0eXBlIG9mIG51bWJlcgoKCiAgZnVuY3Rpb24gY2hlY2tBbmRTdWJtaXQoeCwgbikgewogICAgdmFyIHR5cGUgPSB4LmRhdGF0eXBlKCk7IC8vIHR5cGUgY2hlY2sKCiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIHR5cGUgPSB4LmdldERhdGFUeXBlKCk7CiAgICB9CgogICAgaWYgKHR5cGUgIT09ICdudW1iZXInICYmIHR5cGUgIT09ICdCaWdOdW1iZXInICYmIHR5cGUgIT09ICdGcmFjdGlvbicpIHsKICAgICAgaWYgKHR5cGUgPT09ICdtaXhlZCcpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNaXhlZCBtYXRyaXggZWxlbWVudCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQnKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNYXRyaXggZWxlbWVudCB0eXBlIG5vdCBzdXBwb3J0ZWQgKCcgKyB0eXBlICsgJyknKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaXNTeW1tZXRyaWMoeC50b0FycmF5KCksIG4pOwogICAgfSAvLyBwZXJmb3JtIGVmZmljaWVudCBjYWxjdWxhdGlvbiBmb3IgJ251bWJlcnMnCgoKICAgIGlmICh0eXBlID09PSAnbnVtYmVyJykgewogICAgICByZXR1cm4gZGlhZyh4LnRvQXJyYXkoKSk7CiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdGcmFjdGlvbicpIHsKICAgICAgdmFyIHhBcnIgPSB4LnRvQXJyYXkoKTsgLy8gY29udmVydCBmcmFjdGlvbiB0byBudW1iZXJzCgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGZvciAodmFyIGogPSBpOyBqIDwgbjsgaisrKSB7CiAgICAgICAgICB4QXJyW2ldW2pdID0geEFycltpXVtqXS52YWx1ZU9mKCk7CiAgICAgICAgICB4QXJyW2pdW2ldID0geEFycltpXVtqXTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiBkaWFnKHgudG9BcnJheSgpKTsKICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0JpZ051bWJlcicpIHsKICAgICAgcmV0dXJuIGRpYWdCaWcoeC50b0FycmF5KCkpOwogICAgfQogIH0gLy8gZGlhZ29uYWxpemF0aW9uIGltcGxlbWVudGF0aW9uIGZvciBudW1iZXIgKGVmZmljaWVudCkKCgogIGZ1bmN0aW9uIGRpYWcoeCkgewogICAgdmFyIHByZWNpc2lvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMUUtMTI7CiAgICB2YXIgTiA9IHgubGVuZ3RoOwogICAgdmFyIGUwID0gTWF0aC5hYnMocHJlY2lzaW9uIC8gTik7CiAgICB2YXIgcHNpOwogICAgdmFyIFNpaiA9IG5ldyBBcnJheShOKTsgLy8gU2lqIGlzIElkZW50aXR5IE1hdHJpeAoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgIFNpaltpXSA9IGNyZWF0ZUFycmF5KE4sIDApOwogICAgICBTaWpbaV1baV0gPSAxLjA7CiAgICB9IC8vIGluaXRpYWwgZXJyb3IKCgogICAgdmFyIFZhYiA9IGdldEFpaih4KTsKCiAgICB3aGlsZSAoTWF0aC5hYnMoVmFiWzFdKSA+PSBNYXRoLmFicyhlMCkpIHsKICAgICAgdmFyIF9pID0gVmFiWzBdWzBdOwogICAgICB2YXIgaiA9IFZhYlswXVsxXTsKICAgICAgcHNpID0gZ2V0VGhldGEoeFtfaV1bX2ldLCB4W2pdW2pdLCB4W19pXVtqXSk7CiAgICAgIHggPSB4MSh4LCBwc2ksIF9pLCBqKTsKICAgICAgU2lqID0gU2lqMShTaWosIHBzaSwgX2ksIGopOwogICAgICBWYWIgPSBnZXRBaWooeCk7CiAgICB9CgogICAgdmFyIEVpID0gY3JlYXRlQXJyYXkoTiwgMCk7IC8vIGVpZ2VudmFsdWVzCgogICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgTjsgX2kyKyspIHsKICAgICAgRWlbX2kyXSA9IHhbX2kyXVtfaTJdOwogICAgfQoKICAgIHJldHVybiBzb3J0aW5nKE9iamVjdCh1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSkoRWkpLCBPYmplY3QodXRpbHNfb2JqZWN0WyJhIiAvKiBjbG9uZSAqL10pKFNpaikpOwogIH0gLy8gZGlhZ29uYWxpemF0aW9uIGltcGxlbWVudGF0aW9uIGZvciBiaWdOdW1iZXIKCgogIGZ1bmN0aW9uIGRpYWdCaWcoeCkgewogICAgdmFyIHByZWNpc2lvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMUUtMTI7CiAgICB2YXIgTiA9IHgubGVuZ3RoOwogICAgdmFyIGUwID0gYWJzKHByZWNpc2lvbiAvIE4pOwogICAgdmFyIHBzaTsKICAgIHZhciBTaWogPSBuZXcgQXJyYXkoTik7IC8vIFNpaiBpcyBJZGVudGl0eSBNYXRyaXgKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykgewogICAgICBTaWpbaV0gPSBjcmVhdGVBcnJheShOLCAwKTsKICAgICAgU2lqW2ldW2ldID0gMS4wOwogICAgfSAvLyBpbml0aWFsIGVycm9yCgoKICAgIHZhciBWYWIgPSBnZXRBaWpCaWcoeCk7CgogICAgd2hpbGUgKGFicyhWYWJbMV0pID49IGFicyhlMCkpIHsKICAgICAgdmFyIF9pMyA9IFZhYlswXVswXTsKICAgICAgdmFyIGogPSBWYWJbMF1bMV07CiAgICAgIHBzaSA9IGdldFRoZXRhQmlnKHhbX2kzXVtfaTNdLCB4W2pdW2pdLCB4W19pM11bal0pOwogICAgICB4ID0geDFCaWcoeCwgcHNpLCBfaTMsIGopOwogICAgICBTaWogPSBTaWoxQmlnKFNpaiwgcHNpLCBfaTMsIGopOwogICAgICBWYWIgPSBnZXRBaWpCaWcoeCk7CiAgICB9CgogICAgdmFyIEVpID0gY3JlYXRlQXJyYXkoTiwgMCk7IC8vIGVpZ2VudmFsdWVzCgogICAgZm9yICh2YXIgX2k0ID0gMDsgX2k0IDwgTjsgX2k0KyspIHsKICAgICAgRWlbX2k0XSA9IHhbX2k0XVtfaTRdOwogICAgfSAvLyByZXR1cm4gW2Nsb25lKEVpKSwgY2xvbmUoU2lqKV0KCgogICAgcmV0dXJuIHNvcnRpbmcoT2JqZWN0KHV0aWxzX29iamVjdFsiYSIgLyogY2xvbmUgKi9dKShFaSksIE9iamVjdCh1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSkoU2lqKSk7CiAgfSAvLyBnZXQgYW5nbGUKCgogIGZ1bmN0aW9uIGdldFRoZXRhKGFpaSwgYWpqLCBhaWopIHsKICAgIHZhciB0aCA9IDA7CiAgICB2YXIgZGVub20gPSBhamogLSBhaWk7CgogICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8PSAxRS0xNCkgewogICAgICB0aCA9IE1hdGguUEkgLyA0LjA7CiAgICB9IGVsc2UgewogICAgICB0aCA9IDAuNSAqIE1hdGguYXRhbigyLjAgKiBhaWogLyAoYWpqIC0gYWlpKSk7CiAgICB9CgogICAgcmV0dXJuIHRoOwogIH0gLy8gZ2V0IGFuZ2xlCgoKICBmdW5jdGlvbiBnZXRUaGV0YUJpZyhhaWksIGFqaiwgYWlqKSB7CiAgICB2YXIgdGggPSAwOwogICAgdmFyIGRlbm9tID0gc3VidHJhY3QoYWpqLCBhaWkpOwoKICAgIGlmIChhYnMoZGVub20pIDw9IDFFLTE0KSB7CiAgICAgIHRoID0gTWF0aC5QSSAvIDQuMDsKICAgIH0gZWxzZSB7CiAgICAgIHRoID0gbXVsdGlwbHlTY2FsYXIoMC41LCBhdGFuKG11bHRpcGx5KDIuMCwgYWlqLCBpbnYoZGVub20pKSkpOwogICAgfQoKICAgIHJldHVybiB0aDsKICB9IC8vIHVwZGF0ZSBlaWd2ZWMKCgogIGZ1bmN0aW9uIFNpajEoU2lqLCB0aGV0YSwgaSwgaikgewogICAgdmFyIE4gPSBTaWoubGVuZ3RoOwogICAgdmFyIGMgPSBNYXRoLmNvcyh0aGV0YSk7CiAgICB2YXIgcyA9IE1hdGguc2luKHRoZXRhKTsKICAgIHZhciBTa2kgPSBjcmVhdGVBcnJheShOLCAwKTsKICAgIHZhciBTa2ogPSBjcmVhdGVBcnJheShOLCAwKTsKCiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykgewogICAgICBTa2lba10gPSBjICogU2lqW2tdW2ldIC0gcyAqIFNpaltrXVtqXTsKICAgICAgU2tqW2tdID0gcyAqIFNpaltrXVtpXSArIGMgKiBTaWpba11bal07CiAgICB9CgogICAgZm9yICh2YXIgX2sgPSAwOyBfayA8IE47IF9rKyspIHsKICAgICAgU2lqW19rXVtpXSA9IFNraVtfa107CiAgICAgIFNpaltfa11bal0gPSBTa2pbX2tdOwogICAgfQoKICAgIHJldHVybiBTaWo7CiAgfSAvLyB1cGRhdGUgZWlndmVjIGZvciBvdmVybGFwCgoKICBmdW5jdGlvbiBTaWoxQmlnKFNpaiwgdGhldGEsIGksIGopIHsKICAgIHZhciBOID0gU2lqLmxlbmd0aDsKICAgIHZhciBjID0gY29zKHRoZXRhKTsKICAgIHZhciBzID0gc2luKHRoZXRhKTsKICAgIHZhciBTa2kgPSBjcmVhdGVBcnJheShOLCAwKTsKICAgIHZhciBTa2ogPSBjcmVhdGVBcnJheShOLCAwKTsKCiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykgewogICAgICBTa2lba10gPSBzdWJ0cmFjdChtdWx0aXBseVNjYWxhcihjLCBTaWpba11baV0pLCBtdWx0aXBseVNjYWxhcihzLCBTaWpba11bal0pKTsKICAgICAgU2tqW2tdID0gYWRkU2NhbGFyKG11bHRpcGx5U2NhbGFyKHMsIFNpaltrXVtpXSksIG11bHRpcGx5U2NhbGFyKGMsIFNpaltrXVtqXSkpOwogICAgfQoKICAgIGZvciAodmFyIF9rMiA9IDA7IF9rMiA8IE47IF9rMisrKSB7CiAgICAgIFNpaltfazJdW2ldID0gU2tpW19rMl07CiAgICAgIFNpaltfazJdW2pdID0gU2tqW19rMl07CiAgICB9CgogICAgcmV0dXJuIFNpajsKICB9IC8vIHVwZGF0ZSBtYXRyaXgKCgogIGZ1bmN0aW9uIHgxQmlnKEhpaiwgdGhldGEsIGksIGopIHsKICAgIHZhciBOID0gSGlqLmxlbmd0aDsKICAgIHZhciBjID0gYmlnbnVtYmVyKGNvcyh0aGV0YSkpOwogICAgdmFyIHMgPSBiaWdudW1iZXIoc2luKHRoZXRhKSk7CiAgICB2YXIgYzIgPSBtdWx0aXBseVNjYWxhcihjLCBjKTsKICAgIHZhciBzMiA9IG11bHRpcGx5U2NhbGFyKHMsIHMpOwogICAgdmFyIEFraSA9IGNyZWF0ZUFycmF5KE4sIDApOwogICAgdmFyIEFraiA9IGNyZWF0ZUFycmF5KE4sIDApOyAvLyAyY3MgSGlqCgogICAgdmFyIGNzSGlqID0gbXVsdGlwbHkoMiwgYywgcywgSGlqW2ldW2pdKTsgLy8gIEFpaQoKICAgIHZhciBBaWkgPSBhZGRTY2FsYXIoc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoYzIsIEhpaltpXVtpXSksIGNzSGlqKSwgbXVsdGlwbHlTY2FsYXIoczIsIEhpaltqXVtqXSkpOwogICAgdmFyIEFqaiA9IGFkZChtdWx0aXBseVNjYWxhcihzMiwgSGlqW2ldW2ldKSwgY3NIaWosIG11bHRpcGx5U2NhbGFyKGMyLCBIaWpbal1bal0pKTsgLy8gMCAgdG8gaQoKICAgIGZvciAodmFyIGsgPSAwOyBrIDwgTjsgaysrKSB7CiAgICAgIEFraVtrXSA9IHN1YnRyYWN0KG11bHRpcGx5U2NhbGFyKGMsIEhpaltpXVtrXSksIG11bHRpcGx5U2NhbGFyKHMsIEhpaltqXVtrXSkpOwogICAgICBBa2pba10gPSBhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIocywgSGlqW2ldW2tdKSwgbXVsdGlwbHlTY2FsYXIoYywgSGlqW2pdW2tdKSk7CiAgICB9IC8vIE1vZGlmeSBIaWoKCgogICAgSGlqW2ldW2ldID0gQWlpOwogICAgSGlqW2pdW2pdID0gQWpqOwogICAgSGlqW2ldW2pdID0gMDsKICAgIEhpaltqXVtpXSA9IDA7IC8vIDAgIHRvIGkKCiAgICBmb3IgKHZhciBfazMgPSAwOyBfazMgPCBOOyBfazMrKykgewogICAgICBpZiAoX2szICE9PSBpICYmIF9rMyAhPT0gaikgewogICAgICAgIEhpaltpXVtfazNdID0gQWtpW19rM107CiAgICAgICAgSGlqW19rM11baV0gPSBBa2lbX2szXTsKICAgICAgICBIaWpbal1bX2szXSA9IEFraltfazNdOwogICAgICAgIEhpaltfazNdW2pdID0gQWtqW19rM107CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gSGlqOwogIH0gLy8gdXBkYXRlIG1hdHJpeAoKCiAgZnVuY3Rpb24geDEoSGlqLCB0aGV0YSwgaSwgaikgewogICAgdmFyIE4gPSBIaWoubGVuZ3RoOwogICAgdmFyIGMgPSBNYXRoLmNvcyh0aGV0YSk7CiAgICB2YXIgcyA9IE1hdGguc2luKHRoZXRhKTsKICAgIHZhciBjMiA9IGMgKiBjOwogICAgdmFyIHMyID0gcyAqIHM7CiAgICB2YXIgQWtpID0gY3JlYXRlQXJyYXkoTiwgMCk7CiAgICB2YXIgQWtqID0gY3JlYXRlQXJyYXkoTiwgMCk7IC8vICBBaWkKCiAgICB2YXIgQWlpID0gYzIgKiBIaWpbaV1baV0gLSAyICogYyAqIHMgKiBIaWpbaV1bal0gKyBzMiAqIEhpaltqXVtqXTsKICAgIHZhciBBamogPSBzMiAqIEhpaltpXVtpXSArIDIgKiBjICogcyAqIEhpaltpXVtqXSArIGMyICogSGlqW2pdW2pdOyAvLyAwICB0byBpCgogICAgZm9yICh2YXIgayA9IDA7IGsgPCBOOyBrKyspIHsKICAgICAgQWtpW2tdID0gYyAqIEhpaltpXVtrXSAtIHMgKiBIaWpbal1ba107CiAgICAgIEFraltrXSA9IHMgKiBIaWpbaV1ba10gKyBjICogSGlqW2pdW2tdOwogICAgfSAvLyBNb2RpZnkgSGlqCgoKICAgIEhpaltpXVtpXSA9IEFpaTsKICAgIEhpaltqXVtqXSA9IEFqajsKICAgIEhpaltpXVtqXSA9IDA7CiAgICBIaWpbal1baV0gPSAwOyAvLyAwICB0byBpCgogICAgZm9yICh2YXIgX2s0ID0gMDsgX2s0IDwgTjsgX2s0KyspIHsKICAgICAgaWYgKF9rNCAhPT0gaSAmJiBfazQgIT09IGopIHsKICAgICAgICBIaWpbaV1bX2s0XSA9IEFraVtfazRdOwogICAgICAgIEhpaltfazRdW2ldID0gQWtpW19rNF07CiAgICAgICAgSGlqW2pdW19rNF0gPSBBa2pbX2s0XTsKICAgICAgICBIaWpbX2s0XVtqXSA9IEFraltfazRdOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIEhpajsKICB9IC8vIGdldCBtYXggb2ZmLWRpYWdvbmFsIHZhbHVlIGZyb20gVXBwZXIgRGlhZ29uYWwKCgogIGZ1bmN0aW9uIGdldEFpaihNaWopIHsKICAgIHZhciBOID0gTWlqLmxlbmd0aDsKICAgIHZhciBtYXhNaWogPSAwOwogICAgdmFyIG1heElKID0gWzAsIDFdOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgIGZvciAodmFyIGogPSBpICsgMTsgaiA8IE47IGorKykgewogICAgICAgIGlmIChNYXRoLmFicyhtYXhNaWopIDwgTWF0aC5hYnMoTWlqW2ldW2pdKSkgewogICAgICAgICAgbWF4TWlqID0gTWF0aC5hYnMoTWlqW2ldW2pdKTsKICAgICAgICAgIG1heElKID0gW2ksIGpdOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHJldHVybiBbbWF4SUosIG1heE1pal07CiAgfSAvLyBnZXQgbWF4IG9mZi1kaWFnb25hbCB2YWx1ZSBmcm9tIFVwcGVyIERpYWdvbmFsCgoKICBmdW5jdGlvbiBnZXRBaWpCaWcoTWlqKSB7CiAgICB2YXIgTiA9IE1pai5sZW5ndGg7CiAgICB2YXIgbWF4TWlqID0gMDsKICAgIHZhciBtYXhJSiA9IFswLCAxXTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykgewogICAgICBmb3IgKHZhciBqID0gaSArIDE7IGogPCBOOyBqKyspIHsKICAgICAgICBpZiAoYWJzKG1heE1paikgPCBhYnMoTWlqW2ldW2pdKSkgewogICAgICAgICAgbWF4TWlqID0gYWJzKE1paltpXVtqXSk7CiAgICAgICAgICBtYXhJSiA9IFtpLCBqXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gW21heElKLCBtYXhNaWpdOwogIH0gLy8gc29ydCByZXN1bHRzCgoKICBmdW5jdGlvbiBzb3J0aW5nKEUsIFMpIHsKICAgIHZhciBOID0gRS5sZW5ndGg7CiAgICB2YXIgRWYgPSBBcnJheShOKTsKICAgIHZhciBTZiA9IEFycmF5KE4pOwoKICAgIGZvciAodmFyIGsgPSAwOyBrIDwgTjsgaysrKSB7CiAgICAgIFNmW2tdID0gQXJyYXkoTik7CiAgICB9CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgdmFyIG1pbklEID0gMDsKICAgICAgdmFyIG1pbkUgPSBFWzBdOwoKICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBFLmxlbmd0aDsgaisrKSB7CiAgICAgICAgaWYgKEVbal0gPCBtaW5FKSB7CiAgICAgICAgICBtaW5JRCA9IGo7CiAgICAgICAgICBtaW5FID0gRVttaW5JRF07CiAgICAgICAgfQogICAgICB9CgogICAgICBFZltpXSA9IEUuc3BsaWNlKG1pbklELCAxKVswXTsKCiAgICAgIGZvciAodmFyIF9rNSA9IDA7IF9rNSA8IE47IF9rNSsrKSB7CiAgICAgICAgU2ZbX2s1XVtpXSA9IFNbX2s1XVttaW5JRF07CgogICAgICAgIFNbX2s1XS5zcGxpY2UobWluSUQsIDEpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIFtPYmplY3QodXRpbHNfb2JqZWN0WyJhIiAvKiBjbG9uZSAqL10pKEVmKSwgT2JqZWN0KHV0aWxzX29iamVjdFsiYSIgLyogY2xvbmUgKi9dKShTZildOwogIH0KICAvKioKICAgKiBDcmVhdGUgYW4gYXJyYXkgb2YgYSBjZXJ0YWluIHNpemUgYW5kIGZpbGwgYWxsIGl0ZW1zIHdpdGggYW4gaW5pdGlhbCB2YWx1ZQogICAqIEBwYXJhbSB7bnVtYmVyfSBzaXplCiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlCiAgICogQHJldHVybiB7bnVtYmVyW119CiAgICovCgoKICBmdW5jdGlvbiBjcmVhdGVBcnJheShzaXplLCB2YWx1ZSkgewogICAgLy8gVE9ETzogYXMgc29vbiBhcyBhbGwgYnJvd3NlcnMgc3VwcG9ydCBBcnJheS5maWxsLCB1c2UgdGhhdCBpbnN0ZWFkIChJRSBkb2Vzbid0IHN1cHBvcnQgaXQpCiAgICB2YXIgYXJyYXkgPSBuZXcgQXJyYXkoc2l6ZSk7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgYXJyYXlbaV0gPSB2YWx1ZTsKICAgIH0KCiAgICByZXR1cm4gYXJyYXk7CiAgfQoKICByZXR1cm4gZWlnczsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL21hdHJpeC9leHBtLmpzCgoKCnZhciBleHBtX25hbWUgPSAnZXhwbSc7CnZhciBleHBtX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWJzJywgJ2FkZCcsICdpZGVudGl0eScsICdpbnYnLCAnbXVsdGlwbHknXTsKdmFyIGNyZWF0ZUV4cG0gPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShleHBtX25hbWUsIGV4cG1fZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGFicyA9IF9yZWYuYWJzLAogICAgICBhZGQgPSBfcmVmLmFkZCwKICAgICAgaWRlbnRpdHkgPSBfcmVmLmlkZW50aXR5LAogICAgICBpbnYgPSBfcmVmLmludiwKICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5OwoKICAvKioKICAgKiBDb21wdXRlIHRoZSBtYXRyaXggZXhwb25lbnRpYWwsIGV4cG0oQSkgPSBlXkEuIFRoZSBtYXRyaXggbXVzdCBiZSBzcXVhcmUuCiAgICogTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggZXhwKGEpLCB3aGljaCBwZXJmb3JtcyBlbGVtZW50LXdpc2UKICAgKiBleHBvbmVudGlhdGlvbi4KICAgKgogICAqIFRoZSBleHBvbmVudGlhbCBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBQYWTDqSBhcHByb3hpbWFudCB3aXRoIHNjYWxpbmcgYW5kCiAgICogc3F1YXJpbmc7IHNlZSAiTmluZXRlZW4gRHViaW91cyBXYXlzIHRvIENvbXB1dGUgdGhlIEV4cG9uZW50aWFsIG9mIGEKICAgKiBNYXRyaXgsIiBieSBNb2xlciBhbmQgVmFuIExvYW4uCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICAgbWF0aC5leHBtKHgpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgICBjb25zdCBBID0gW1swLDJdLFswLDBdXQogICAqICAgICBtYXRoLmV4cG0oQSkgICAgICAgIC8vIHJldHVybnMgW1sxLDJdLFswLDFdXQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICAgZXhwCiAgICoKICAgKiBAcGFyYW0ge01hdHJpeH0geCAgQSBzcXVhcmUgTWF0cml4CiAgICogQHJldHVybiB7TWF0cml4fSAgIFRoZSBleHBvbmVudGlhbCBvZiB4CiAgICovCiAgcmV0dXJuIHR5cGVkKGV4cG1fbmFtZSwgewogICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoQSkgewogICAgICAvLyBDaGVjayBtYXRyaXggc2l6ZQogICAgICB2YXIgc2l6ZSA9IEEuc2l6ZSgpOwoKICAgICAgaWYgKHNpemUubGVuZ3RoICE9PSAyIHx8IHNpemVbMF0gIT09IHNpemVbMV0pIHsKICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlICcgKyAnKHNpemU6ICcgKyBPYmplY3QodXRpbHNfc3RyaW5nWyJkIiAvKiBmb3JtYXQgKi9dKShzaXplKSArICcpJyk7CiAgICAgIH0KCiAgICAgIHZhciBuID0gc2l6ZVswXTsgLy8gRGVzaXJlZCBhY2N1cmFjeSBvZiB0aGUgYXBwcm94aW1hbnQgKFRoZSBhY3R1YWwgYWNjdXJhY3kKICAgICAgLy8gd2lsbCBiZSBhZmZlY3RlZCBieSByb3VuZC1vZmYgZXJyb3IpCgogICAgICB2YXIgZXBzID0gMWUtMTU7IC8vIFRoZSBQYWTDqSBhcHByb3hpbWFudCBpcyBub3Qgc28gYWNjdXJhdGUgd2hlbiB0aGUgdmFsdWVzIG9mIEEKICAgICAgLy8gYXJlICJsYXJnZSIsIHNvIHNjYWxlIEEgYnkgcG93ZXJzIG9mIHR3by4gVGhlbiBjb21wdXRlIHRoZQogICAgICAvLyBleHBvbmVudGlhbCwgYW5kIHNxdWFyZSB0aGUgcmVzdWx0IHJlcGVhdGVkbHkgYWNjb3JkaW5nIHRvCiAgICAgIC8vIHRoZSBpZGVudGl0eSBlXkEgPSAoZV4oQS9tKSlebQogICAgICAvLyBDb21wdXRlIGluZmluaXR5LW5vcm0gb2YgQSwgfHxBfHwsIHRvIHNlZSBob3cgImJpZyIgaXQgaXMKCiAgICAgIHZhciBpbmZOb3JtID0gaW5maW5pdHlOb3JtKEEpOyAvLyBGaW5kIHRoZSBvcHRpbWFsIHNjYWxpbmcgZmFjdG9yIGFuZCBudW1iZXIgb2YgdGVybXMgaW4gdGhlCiAgICAgIC8vIFBhZMOpIGFwcHJveGltYW50IHRvIHJlYWNoIHRoZSBkZXNpcmVkIGFjY3VyYWN5CgogICAgICB2YXIgcGFyYW1zID0gZmluZFBhcmFtcyhpbmZOb3JtLCBlcHMpOwogICAgICB2YXIgcSA9IHBhcmFtcy5xOwogICAgICB2YXIgaiA9IHBhcmFtcy5qOyAvLyBUaGUgUGFkZSBhcHByb3hpbWF0aW9uIHRvIGVeQSBpczoKICAgICAgLy8gUnFxKEEpID0gRHFxKEEpIF4gLTEgKiBOcXEoQSkKICAgICAgLy8gd2hlcmUKICAgICAgLy8gTnFxKEEpID0gc3VtKGk9MCwgcSwgKDJxLWkpIXAhIC8gWyAoMnEpIWkhKHEtaSkhIF0gQV5pCiAgICAgIC8vIERxcShBKSA9IHN1bShpPTAsIHEsICgycS1pKSFxISAvIFsgKDJxKSFpIShxLWkpISBdICgtQSleaQogICAgICAvLyBTY2FsZSBBIGJ5IDEgLyAyXmoKCiAgICAgIHZhciBBcG9zID0gbXVsdGlwbHkoQSwgTWF0aC5wb3coMiwgLWopKTsgLy8gVGhlIGk9MCB0ZXJtIGlzIGp1c3QgdGhlIGlkZW50aXR5IG1hdHJpeAoKICAgICAgdmFyIE4gPSBpZGVudGl0eShuKTsKICAgICAgdmFyIEQgPSBpZGVudGl0eShuKTsgLy8gSW5pdGlhbGl6YXRpb24gKGk9MCkKCiAgICAgIHZhciBmYWN0b3IgPSAxOyAvLyBJbml0aWFsaXphdGlvbiAoaT0xKQoKICAgICAgdmFyIEFwb3NUb0kgPSBBcG9zOyAvLyBDbG9uaW5nIG5vdCBuZWNlc3NhcnkKCiAgICAgIHZhciBhbHRlcm5hdGUgPSAtMTsKCiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHE7IGkrKykgewogICAgICAgIGlmIChpID4gMSkgewogICAgICAgICAgQXBvc1RvSSA9IG11bHRpcGx5KEFwb3NUb0ksIEFwb3MpOwogICAgICAgICAgYWx0ZXJuYXRlID0gLWFsdGVybmF0ZTsKICAgICAgICB9CgogICAgICAgIGZhY3RvciA9IGZhY3RvciAqIChxIC0gaSArIDEpIC8gKCgyICogcSAtIGkgKyAxKSAqIGkpOwogICAgICAgIE4gPSBhZGQoTiwgbXVsdGlwbHkoZmFjdG9yLCBBcG9zVG9JKSk7CiAgICAgICAgRCA9IGFkZChELCBtdWx0aXBseShmYWN0b3IgKiBhbHRlcm5hdGUsIEFwb3NUb0kpKTsKICAgICAgfQoKICAgICAgdmFyIFIgPSBtdWx0aXBseShpbnYoRCksIE4pOyAvLyBTcXVhcmUgaiB0aW1lcwoKICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGo7IF9pKyspIHsKICAgICAgICBSID0gbXVsdGlwbHkoUiwgUik7CiAgICAgIH0KCiAgICAgIHJldHVybiBPYmplY3QoaXNbIkgiIC8qIGlzU3BhcnNlTWF0cml4ICovXSkoQSkgPyBBLmNyZWF0ZVNwYXJzZU1hdHJpeChSKSA6IFI7CiAgICB9CiAgfSk7CgogIGZ1bmN0aW9uIGluZmluaXR5Tm9ybShBKSB7CiAgICB2YXIgbiA9IEEuc2l6ZSgpWzBdOwogICAgdmFyIGluZk5vcm0gPSAwOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgIHZhciByb3dTdW0gPSAwOwoKICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuOyBqKyspIHsKICAgICAgICByb3dTdW0gKz0gYWJzKEEuZ2V0KFtpLCBqXSkpOwogICAgICB9CgogICAgICBpbmZOb3JtID0gTWF0aC5tYXgocm93U3VtLCBpbmZOb3JtKTsKICAgIH0KCiAgICByZXR1cm4gaW5mTm9ybTsKICB9CiAgLyoqCiAgICogRmluZCB0aGUgYmVzdCBwYXJhbWV0ZXJzIGZvciB0aGUgUGFkZSBhcHByb3hpbWFudCBnaXZlbgogICAqIHRoZSBtYXRyaXggbm9ybSBhbmQgZGVzaXJlZCBhY2N1cmFjeS4gUmV0dXJucyB0aGUgZmlyc3QgYWNjZXB0YWJsZQogICAqIGNvbWJpbmF0aW9uIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgY29tcHV0YXRpb25hbCBsb2FkLgogICAqLwoKCiAgZnVuY3Rpb24gZmluZFBhcmFtcyhpbmZOb3JtLCBlcHMpIHsKICAgIHZhciBtYXhTZWFyY2hTaXplID0gMzA7CgogICAgZm9yICh2YXIgayA9IDA7IGsgPCBtYXhTZWFyY2hTaXplOyBrKyspIHsKICAgICAgZm9yICh2YXIgcSA9IDA7IHEgPD0gazsgcSsrKSB7CiAgICAgICAgdmFyIGogPSBrIC0gcTsKCiAgICAgICAgaWYgKGVycm9yRXN0aW1hdGUoaW5mTm9ybSwgcSwgaikgPCBlcHMpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHE6IHEsCiAgICAgICAgICAgIGo6IGoKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBhY2NlcHRhYmxlIHBhcmFtZXRlcnMgdG8gY29tcHV0ZSB0aGUgbWF0cml4IGV4cG9uZW50aWFsICh0cnkgaW5jcmVhc2luZyBtYXhTZWFyY2hTaXplIGluIGV4cG0uanMpJyk7CiAgfQogIC8qKgogICAqIFJldHVybnMgdGhlIGVzdGltYXRlZCBlcnJvciBvZiB0aGUgUGFkZSBhcHByb3hpbWFudCBmb3IgdGhlIGdpdmVuCiAgICogcGFyYW1ldGVycy4KICAgKi8KCgogIGZ1bmN0aW9uIGVycm9yRXN0aW1hdGUoaW5mTm9ybSwgcSwgaikgewogICAgdmFyIHFmYWMgPSAxOwoKICAgIGZvciAodmFyIGkgPSAyOyBpIDw9IHE7IGkrKykgewogICAgICBxZmFjICo9IGk7CiAgICB9CgogICAgdmFyIHR3b3FmYWMgPSBxZmFjOwoKICAgIGZvciAodmFyIF9pMiA9IHEgKyAxOyBfaTIgPD0gMiAqIHE7IF9pMisrKSB7CiAgICAgIHR3b3FmYWMgKj0gX2kyOwogICAgfQoKICAgIHZhciB0d29xcDFmYWMgPSB0d29xZmFjICogKDIgKiBxICsgMSk7CiAgICByZXR1cm4gOC4wICogTWF0aC5wb3coaW5mTm9ybSAvIE1hdGgucG93KDIsIGopLCAyICogcSkgKiBxZmFjICogcWZhYyAvICh0d29xZmFjICogdHdvcXAxZmFjKTsKICB9Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9tYXRyaXgvc3FydG0uanMKCgoKCnZhciBzcXJ0bV9uYW1lID0gJ3NxcnRtJzsKdmFyIHNxcnRtX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWJzJywgJ2FkZCcsICdtdWx0aXBseScsICdzcXJ0JywgJ3N1YnRyYWN0JywgJ2ludicsICdzaXplJywgJ21heCcsICdpZGVudGl0eSddOwp2YXIgY3JlYXRlU3FydG0gPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShzcXJ0bV9uYW1lLCBzcXJ0bV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgYWJzID0gX3JlZi5hYnMsCiAgICAgIGFkZCA9IF9yZWYuYWRkLAogICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksCiAgICAgIHNxcnQgPSBfcmVmLnNxcnQsCiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCwKICAgICAgaW52ID0gX3JlZi5pbnYsCiAgICAgIHNpemUgPSBfcmVmLnNpemUsCiAgICAgIG1heCA9IF9yZWYubWF4LAogICAgICBpZGVudGl0eSA9IF9yZWYuaWRlbnRpdHk7CgogIC8qKgogICAqIENhbGN1bGF0ZSB0aGUgcHJpbmNpcGFsIHNxdWFyZSByb290IG9mIGEgc3F1YXJlIG1hdHJpeC4KICAgKiBUaGUgcHJpbmNpcGFsIHNxdWFyZSByb290IG1hdHJpeCBgWGAgb2YgYW5vdGhlciBtYXRyaXggYEFgIGlzIHN1Y2ggdGhhdCBgWCAqIFggPSBBYC4KICAgKgogICAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NxdWFyZV9yb290X29mX2FfbWF0cml4CiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICAgWCA9IG1hdGguc3FydG0oQSkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgIG1hdGguc3FydG0oW1sxLCAyXSwgWzMsIDRdXSkgLy8gcmV0dXJucyBbWy0yLCAxXSwgWzEuNSwgLTAuNV1dCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgICBzcXJ0LCBwb3cKICAgKgogICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSBBICAgVGhlIHNxdWFyZSBtYXRyaXggYEFgCiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgICBUaGUgcHJpbmNpcGFsIHNxdWFyZSByb290IG9mIG1hdHJpeCBgQWAKICAgKi8KICB2YXIgc3FydG0gPSB0eXBlZChzcXJ0bV9uYW1lLCB7CiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChBKSB7CiAgICAgIHZhciBzaXplID0gT2JqZWN0KGlzWyJ2IiAvKiBpc01hdHJpeCAqL10pKEEpID8gQS5zaXplKCkgOiBPYmplY3QodXRpbHNfYXJyYXlbImEiIC8qIGFycmF5U2l6ZSAqL10pKEEpOwoKICAgICAgc3dpdGNoIChzaXplLmxlbmd0aCkgewogICAgICAgIGNhc2UgMToKICAgICAgICAgIC8vIFNpbmdsZSBlbGVtZW50IEFycmF5IHwgTWF0cml4CiAgICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkgewogICAgICAgICAgICByZXR1cm4gc3FydChBKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArIE9iamVjdCh1dGlsc19zdHJpbmdbImQiIC8qIGZvcm1hdCAqL10pKHNpemUpICsgJyknKTsKICAgICAgICAgIH0KCiAgICAgICAgY2FzZSAyOgogICAgICAgICAgewogICAgICAgICAgICAvLyBUd28tZGltZW5zaW9uYWwgQXJyYXkgfCBNYXRyaXgKICAgICAgICAgICAgdmFyIHJvd3MgPSBzaXplWzBdOwogICAgICAgICAgICB2YXIgY29scyA9IHNpemVbMV07CgogICAgICAgICAgICBpZiAocm93cyA9PT0gY29scykgewogICAgICAgICAgICAgIHJldHVybiBfZGVubWFuQmVhdmVycyhBKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlICcgKyAnKHNpemU6ICcgKyBPYmplY3QodXRpbHNfc3RyaW5nWyJkIiAvKiBmb3JtYXQgKi9dKShzaXplKSArICcpJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgfQogICAgfQogIH0pOwogIHZhciBfbWF4SXRlcmF0aW9ucyA9IDFlMzsKICB2YXIgX3RvbGVyYW5jZSA9IDFlLTY7CiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBwcmluY2lwYWwgc3F1YXJlIHJvb3QgbWF0cml4IHVzaW5nIHRoZSBEZW5tYW7igJNCZWF2ZXJzIGl0ZXJhdGl2ZSBtZXRob2QKICAgKgogICAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NxdWFyZV9yb290X29mX2FfbWF0cml4I0J5X0Rlbm1hbuKAk0JlYXZlcnNfaXRlcmF0aW9uCiAgICoKICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0gQSAgIFRoZSBzcXVhcmUgbWF0cml4IGBBYAogICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICAgVGhlIHByaW5jaXBhbCBzcXVhcmUgcm9vdCBvZiBtYXRyaXggYEFgCiAgICogQHByaXZhdGUKICAgKi8KCiAgZnVuY3Rpb24gX2Rlbm1hbkJlYXZlcnMoQSkgewogICAgdmFyIGVycm9yOwogICAgdmFyIGl0ZXJhdGlvbnMgPSAwOwogICAgdmFyIFkgPSBBOwogICAgdmFyIFogPSBpZGVudGl0eShzaXplKEEpKTsKCiAgICBkbyB7CiAgICAgIHZhciBZayA9IFk7CiAgICAgIFkgPSBtdWx0aXBseSgwLjUsIGFkZChZaywgaW52KFopKSk7CiAgICAgIFogPSBtdWx0aXBseSgwLjUsIGFkZChaLCBpbnYoWWspKSk7CiAgICAgIGVycm9yID0gbWF4KGFicyhzdWJ0cmFjdChZLCBZaykpKTsKCiAgICAgIGlmIChlcnJvciA+IF90b2xlcmFuY2UgJiYgKytpdGVyYXRpb25zID4gX21heEl0ZXJhdGlvbnMpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbXB1dGluZyBzcXVhcmUgcm9vdCBvZiBtYXRyaXg6IGl0ZXJhdGl2ZSBtZXRob2QgY291bGQgbm90IGNvbnZlcmdlJyk7CiAgICAgIH0KICAgIH0gd2hpbGUgKGVycm9yID4gX3RvbGVyYW5jZSk7CgogICAgcmV0dXJuIFk7CiAgfQoKICByZXR1cm4gc3FydG07Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hcml0aG1ldGljL2RpdmlkZS5qcwoKCgoKdmFyIGRpdmlkZV9uYW1lID0gJ2RpdmlkZSc7CnZhciBkaXZpZGVfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnbXVsdGlwbHknLCAnZXF1YWxTY2FsYXInLCAnZGl2aWRlU2NhbGFyJywgJ2ludiddOwp2YXIgY3JlYXRlRGl2aWRlID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoZGl2aWRlX25hbWUsIGRpdmlkZV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSwKICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLAogICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhciwKICAgICAgaW52ID0gX3JlZi5pbnY7CiAgdmFyIGFsZ29yaXRobTExID0gY3JlYXRlQWxnb3JpdGhtMTEoewogICAgdHlwZWQ6IHR5cGVkLAogICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyCiAgfSk7CiAgdmFyIGFsZ29yaXRobTE0ID0gY3JlYXRlQWxnb3JpdGhtMTQoewogICAgdHlwZWQ6IHR5cGVkCiAgfSk7CiAgLyoqCiAgICogRGl2aWRlIHR3byB2YWx1ZXMsIGB4IC8geWAuCiAgICogVG8gZGl2aWRlIG1hdHJpY2VzLCBgeGAgaXMgbXVsdGlwbGllZCB3aXRoIHRoZSBpbnZlcnNlIG9mIGB5YDogYHggKiBpbnYoeSlgLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5kaXZpZGUoeCwgeSkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5kaXZpZGUoMiwgMykgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjY2NjY2NjY2NjY2NjY2NjYKICAgKgogICAqICAgIGNvbnN0IGEgPSBtYXRoLmNvbXBsZXgoNSwgMTQpCiAgICogICAgY29uc3QgYiA9IG1hdGguY29tcGxleCg0LCAxKQogICAqICAgIG1hdGguZGl2aWRlKGEsIGIpICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDIgKyAzaQogICAqCiAgICogICAgY29uc3QgYyA9IFtbNywgLTZdLCBbMTMsIC00XV0KICAgKiAgICBjb25zdCBkID0gW1sxLCAyXSwgWzQsIDNdXQogICAqICAgIG1hdGguZGl2aWRlKGMsIGQpICAgICAgICAgICAgLy8gcmV0dXJucyBBcnJheSBbWy05LCA0XSwgWy0xMSwgNl1dCiAgICoKICAgKiAgICBjb25zdCBlID0gbWF0aC51bml0KCcxOCBrbScpCiAgICogICAgbWF0aC5kaXZpZGUoZSwgNC41KSAgICAgICAgICAvLyByZXR1cm5zIFVuaXQgNCBrbQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBtdWx0aXBseQogICAqCiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICAgTnVtZXJhdG9yCiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHkgICAgICAgICAgRGVub21pbmF0b3IKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgICAgICAgICAgIFF1b3RpZW50LCBgeCAvIHlgCiAgICovCgogIHJldHVybiB0eXBlZCgnZGl2aWRlJywgT2JqZWN0KHV0aWxzX29iamVjdFsiZSIgLyogZXh0ZW5kICovXSkoewogICAgLy8gd2UgZXh0ZW5kIHRoZSBzaWduYXR1cmVzIG9mIGRpdmlkZVNjYWxhciB3aXRoIHNpZ25hdHVyZXMgZGVhbGluZyB3aXRoIG1hdHJpY2VzCiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhBcnJheU1hdHJpeCh4LCB5KSB7CiAgICAgIC8vIFRPRE86IGltcGxlbWVudCBtYXRyaXggcmlnaHQgZGl2aXNpb24gdXNpbmcgcHNldWRvIGludmVyc2UKICAgICAgLy8gaHR0cHM6Ly93d3cubWF0aHdvcmtzLm5sL2hlbHAvbWF0bGFiL3JlZi9tcmRpdmlkZS5odG1sCiAgICAgIC8vIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvb2N0YXZlL2RvYy9pbnRlcnByZXRlci9Bcml0aG1ldGljLU9wcy5odG1sCiAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEyMjYzOTMyL2hvdy1kb2VzLWdudS1vY3RhdmUtbWF0cml4LWRpdmlzaW9uLXdvcmstZ2V0dGluZy11bmV4cGVjdGVkLWJlaGF2aW91cgogICAgICByZXR1cm4gbXVsdGlwbHkoeCwgaW52KHkpKTsKICAgIH0sCiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHsKICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGRpdmlkZVNjYWxhciwgZmFsc2UpOwogICAgfSwKICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7CiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTsKICAgIH0sCiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHsKICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvbgogICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKS52YWx1ZU9mKCk7CiAgICB9LAogICAgJ2FueSwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBhbnlBcnJheU1hdHJpeCh4LCB5KSB7CiAgICAgIHJldHVybiBtdWx0aXBseSh4LCBpbnYoeSkpOwogICAgfQogIH0sIGRpdmlkZVNjYWxhci5zaWduYXR1cmVzKSk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9nZW9tZXRyeS9kaXN0YW5jZS5qcwoKCnZhciBkaXN0YW5jZV9uYW1lID0gJ2Rpc3RhbmNlJzsKdmFyIGRpc3RhbmNlX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWRkU2NhbGFyJywgJ3N1YnRyYWN0JywgJ2RpdmlkZVNjYWxhcicsICdtdWx0aXBseVNjYWxhcicsICd1bmFyeU1pbnVzJywgJ3NxcnQnLCAnYWJzJ107CnZhciBjcmVhdGVEaXN0YW5jZSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGRpc3RhbmNlX25hbWUsIGRpc3RhbmNlX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhciwKICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LAogICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsCiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLAogICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLAogICAgICBzcXJ0ID0gX3JlZi5zcXJ0LAogICAgICBhYnMgPSBfcmVmLmFiczsKCiAgLyoqCiAgICAqIENhbGN1bGF0ZXM6CiAgICAqICAgIFRoZSBldWNsZWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzIGluIE4tZGltZW5zaW9uYWwgc3BhY2VzLgogICAgKiAgICBEaXN0YW5jZSBiZXR3ZWVuIHBvaW50IGFuZCBhIGxpbmUgaW4gMiBhbmQgMyBkaW1lbnNpb25hbCBzcGFjZXMuCiAgICAqICAgIFBhaXJ3aXNlIGRpc3RhbmNlIGJldHdlZW4gYSBzZXQgb2YgMkQgb3IgM0QgcG9pbnRzCiAgICAqIE5PVEU6CiAgICAqICAgIFdoZW4gc3Vic3RpdHV0aW5nIGNvZWZmaWNpZW50cyBvZiBhIGxpbmUoYSwgYiBhbmQgYyksIHVzZSBheCArIGJ5ICsgYyA9IDAgaW5zdGVhZCBvZiBheCArIGJ5ID0gYwogICAgKiAgICBGb3IgcGFyYW1ldHJpYyBlcXVhdGlvbiBvZiBhIDNEIGxpbmUsIHgwLCB5MCwgejAsIGEsIGIsIGMgYXJlIGZyb206ICh44oiSeDAsIHniiJJ5MCwgeuKIknowKSA9IHQoYSwgYiwgYykKICAgICoKICAgICogU3ludGF4OgogICAgKiAgICBtYXRoLmRpc3RhbmNlKFt4MSwgeTFdLCBbeDIsIHkyXSkKICAgICotICAgbWF0aC5kaXN0YW5jZSh7cG9pbnRPbmVYOiA0LCBwb2ludE9uZVk6IDV9LCB7cG9pbnRUd29YOiAyLCBwb2ludFR3b1k6IDd9KQogICAgKiAgICBtYXRoLmRpc3RhbmNlKFt4MSwgeTEsIHoxXSwgW3gyLCB5MiwgejJdKQogICAgKiAgICBtYXRoLmRpc3RhbmNlKHtwb2ludE9uZVg6IDQsIHBvaW50T25lWTogNSwgcG9pbnRPbmVaOiA4fSwge3BvaW50VHdvWDogMiwgcG9pbnRUd29ZOiA3LCBwb2ludFR3b1o6IDl9KQogICAgKiAgICBtYXRoLmRpc3RhbmNlKFt4MSwgeTEsIC4uLiAsIE4xXSwgW3gyLCB5MiwgLi4uICwgTjJdKQogICAgKiAgICBtYXRoLmRpc3RhbmNlKFtbQV0sIFtCXSwgW0NdLi4uXSkKICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxXSwgW0xpbmVQdFgxLCBMaW5lUHRZMV0sIFtMaW5lUHRYMiwgTGluZVB0WTJdKQogICAgKiAgICBtYXRoLmRpc3RhbmNlKHtwb2ludFg6IDEsIHBvaW50WTogNH0sIHtsaW5lT25lUHRYOiA2LCBsaW5lT25lUHRZOiAzfSwge2xpbmVUd29QdFg6IDIsIGxpbmVUd29QdFk6IDh9KQogICAgKiAgICBtYXRoLmRpc3RhbmNlKFt4MSwgeTEsIHoxXSwgW0xpbmVQdFgxLCBMaW5lUHRZMSwgTGluZVB0WjFdLCBbTGluZVB0WDIsIExpbmVQdFkyLCBMaW5lUHRaMl0pCiAgICAqICAgIG1hdGguZGlzdGFuY2Uoe3BvaW50WDogMSwgcG9pbnRZOiA0LCBwb2ludFo6IDd9LCB7bGluZU9uZVB0WDogNiwgbGluZU9uZVB0WTogMywgbGluZU9uZVB0WjogNH0sIHtsaW5lVHdvUHRYOiAyLCBsaW5lVHdvUHRZOiA4LCBsaW5lVHdvUHRaOiA1fSkKICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxXSwgW3hDb2VmZkxpbmUsIHlDb2VmZkxpbmUsIGNvbnN0YW50XSkKICAgICogICAgbWF0aC5kaXN0YW5jZSh7cG9pbnRYOiAxMCwgcG9pbnRZOiAxMH0sIHt4Q29lZmZMaW5lOiA4LCB5Q29lZmZMaW5lOiAxLCBjb25zdGFudDogM30pCiAgICAqICAgIG1hdGguZGlzdGFuY2UoW3gxLCB5MSwgejFdLCBbeDAsIHkwLCB6MCwgYS10Q29lZmYsIGItdENvZWZmLCBjLXRDb2VmZl0pIHBvaW50IGFuZCBwYXJhbWV0cmljIGVxdWF0aW9uIG9mIDNEIGxpbmUKICAgICogICAgbWF0aC5kaXN0YW5jZShbeCwgeSwgel0sIFt4MCwgeTAsIHowLCBhLCBiLCBjXSkKICAgICogICAgbWF0aC5kaXN0YW5jZSh7cG9pbnRYOiAyLCBwb2ludFk6IDUsIHBvaW50WjogOX0sIHt4MDogNCwgeTA6IDYsIHowOiAzLCBhOiA0LCBiOiAyLCBjOiAwfSkKICAgICoKICAgICogRXhhbXBsZXM6CiAgICAqICAgIG1hdGguZGlzdGFuY2UoWzAsMF0sIFs0LDRdKSAgICAgICAgICAgICAgICAgICAgIC8vIFJldHVybnMgNS42NTY5CiAgICAqICAgIG1hdGguZGlzdGFuY2UoCiAgICAqICAgICB7cG9pbnRPbmVYOiAwLCBwb2ludE9uZVk6IDB9LAogICAgKiAgICAge3BvaW50VHdvWDogMTAsIHBvaW50VHdvWTogMTB9KSAgICAgICAgICAgICAgICAvLyBSZXR1cm5zIDE0LjE0MjEzNTYyMzczMDk1MQogICAgKiAgICBtYXRoLmRpc3RhbmNlKFsxLCAwLCAxXSwgWzQsIC0yLCAyXSkgICAgICAgICAgICAvLyBSZXR1cm5zIDMuNzQxNjYKICAgICogICAgbWF0aC5kaXN0YW5jZSgKICAgICogICAgIHtwb2ludE9uZVg6IDQsIHBvaW50T25lWTogNSwgcG9pbnRPbmVaOiA4fSwKICAgICogICAgIHtwb2ludFR3b1g6IDIsIHBvaW50VHdvWTogNywgcG9pbnRUd29aOiA5fSkgICAgLy8gUmV0dXJucyAzCiAgICAqICAgIG1hdGguZGlzdGFuY2UoWzEsIDAsIDEsIDBdLCBbMCwgLTEsIDAsIC0xXSkgICAgIC8vIFJldHVybnMgMgogICAgKiAgICBtYXRoLmRpc3RhbmNlKFtbMSwgMl0sIFsxLCAyXSwgWzEsIDNdXSkgICAgICAgICAvLyBSZXR1cm5zIFswLCAxLCAxXQogICAgKiAgICBtYXRoLmRpc3RhbmNlKFtbMSwyLDRdLCBbMSwyLDZdLCBbOCwxLDNdXSkgICAgICAvLyBSZXR1cm5zIFsyLCA3LjE0MTQyODQyODU0Mjg1LCA3LjY4MTE0NTc0Nzg2ODYwOF0KICAgICogICAgbWF0aC5kaXN0YW5jZShbMTAsIDEwXSwgWzgsIDEsIDNdKSAgICAgICAgICAgICAgLy8gUmV0dXJucyAxMS41MzUyMzAzMTY3OTYzODcKICAgICogICAgbWF0aC5kaXN0YW5jZShbMTAsIDEwXSwgWzIsIDNdLCBbLTgsIDBdKSAgICAgICAgLy8gUmV0dXJucyA4Ljc1OTk1MzEzMDM2Mjg0NwogICAgKiAgICBtYXRoLmRpc3RhbmNlKAogICAgKiAgICAge3BvaW50WDogMSwgcG9pbnRZOiA0fSwKICAgICogICAgIHtsaW5lT25lUHRYOiA2LCBsaW5lT25lUHRZOiAzfSwKICAgICogICAgIHtsaW5lVHdvUHRYOiAyLCBsaW5lVHdvUHRZOiA4fSkgICAgICAgICAgICAgICAgLy8gUmV0dXJucyAyLjcyMDU0OTM3MjYyNDc0NAogICAgKiAgICBtYXRoLmRpc3RhbmNlKFsyLCAzLCAxXSwgWzEsIDEsIDIsIDUsIDAsIDFdKSAgICAvLyBSZXR1cm5zIDIuMzIwNDc3NDA0NDYxMjg1NwogICAgKiAgICBtYXRoLmRpc3RhbmNlKAogICAgKiAgICAge3BvaW50WDogMiwgcG9pbnRZOiAzLCBwb2ludFo6IDF9LAogICAgKiAgICAge3gwOiAxLCB5MDogMSwgejA6IDIsIGE6IDUsIGI6IDAsIGM6IDF9ICAgICAgICAvLyBSZXR1cm5zIDIuMzIwNDc3NDA0NDYxMjg1NwogICAgKgogICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgT2JqZWN0fSB4ICAgIENvLW9yZGluYXRlcyBvZiBmaXJzdCBwb2ludAogICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgT2JqZWN0fSB5ICAgIENvLW9yZGluYXRlcyBvZiBzZWNvbmQgcG9pbnQKICAgICogQHJldHVybiB7TnVtYmVyIHwgQmlnTnVtYmVyfSBSZXR1cm5zIHRoZSBkaXN0YW5jZSBmcm9tIHR3by90aHJlZSBwb2ludHMKICAqLwogIHJldHVybiB0eXBlZChkaXN0YW5jZV9uYW1lLCB7CiAgICAnQXJyYXksIEFycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXlBcnJheSh4LCB5LCB6KSB7CiAgICAgIC8vIFBvaW50IHRvIExpbmUgMkQgKHg9UG9pbnQsIHk9TGluZVBvaW50MSwgej1MaW5lUG9pbnQyKQogICAgICBpZiAoeC5sZW5ndGggPT09IDIgJiYgeS5sZW5ndGggPT09IDIgJiYgei5sZW5ndGggPT09IDIpIHsKICAgICAgICBpZiAoIV8yZCh4KSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAyIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgZmlyc3QgYXJndW1lbnQnKTsKICAgICAgICB9CgogICAgICAgIGlmICghXzJkKHkpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBzZWNvbmQgYXJndW1lbnQnKTsKICAgICAgICB9CgogICAgICAgIGlmICghXzJkKHopKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciB0aGlyZCBhcmd1bWVudCcpOwogICAgICAgIH0KCiAgICAgICAgdmFyIG0gPSBkaXZpZGVTY2FsYXIoc3VidHJhY3QoelsxXSwgelswXSksIHN1YnRyYWN0KHlbMV0sIHlbMF0pKTsKICAgICAgICB2YXIgeENvZWZmID0gbXVsdGlwbHlTY2FsYXIobXVsdGlwbHlTY2FsYXIobSwgbSksIHlbMF0pOwogICAgICAgIHZhciB5Q29lZmYgPSB1bmFyeU1pbnVzKG11bHRpcGx5U2NhbGFyKG0sIHlbMF0pKTsKICAgICAgICB2YXIgY29uc3RhbnQgPSB4WzFdOwogICAgICAgIHJldHVybiBfZGlzdGFuY2VQb2ludExpbmUyRCh4WzBdLCB4WzFdLCB4Q29lZmYsIHlDb2VmZiwgY29uc3RhbnQpOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgQXJndW1lbnRzOiBUcnkgYWdhaW4nKTsKICAgICAgfQogICAgfSwKICAgICdPYmplY3QsIE9iamVjdCwgT2JqZWN0JzogZnVuY3Rpb24gT2JqZWN0T2JqZWN0T2JqZWN0KHgsIHksIHopIHsKICAgICAgaWYgKE9iamVjdC5rZXlzKHgpLmxlbmd0aCA9PT0gMiAmJiBPYmplY3Qua2V5cyh5KS5sZW5ndGggPT09IDIgJiYgT2JqZWN0LmtleXMoeikubGVuZ3RoID09PSAyKSB7CiAgICAgICAgaWYgKCFfMmQoeCkpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludFggYW5kIHBvaW50WSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIV8yZCh5KSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWVzIG9mIGxpbmVPbmVQdFggYW5kIGxpbmVPbmVQdFkgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFfMmQoeikpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBsaW5lVHdvUHRYIGFuZCBsaW5lVHdvUHRZIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTsKICAgICAgICB9CgogICAgICAgIGlmICgncG9pbnRYJyBpbiB4ICYmICdwb2ludFknIGluIHggJiYgJ2xpbmVPbmVQdFgnIGluIHkgJiYgJ2xpbmVPbmVQdFknIGluIHkgJiYgJ2xpbmVUd29QdFgnIGluIHogJiYgJ2xpbmVUd29QdFknIGluIHopIHsKICAgICAgICAgIHZhciBtID0gZGl2aWRlU2NhbGFyKHN1YnRyYWN0KHoubGluZVR3b1B0WSwgei5saW5lVHdvUHRYKSwgc3VidHJhY3QoeS5saW5lT25lUHRZLCB5LmxpbmVPbmVQdFgpKTsKICAgICAgICAgIHZhciB4Q29lZmYgPSBtdWx0aXBseVNjYWxhcihtdWx0aXBseVNjYWxhcihtLCBtKSwgeS5saW5lT25lUHRYKTsKICAgICAgICAgIHZhciB5Q29lZmYgPSB1bmFyeU1pbnVzKG11bHRpcGx5U2NhbGFyKG0sIHkubGluZU9uZVB0WCkpOwogICAgICAgICAgdmFyIGNvbnN0YW50ID0geC5wb2ludFg7CiAgICAgICAgICByZXR1cm4gX2Rpc3RhbmNlUG9pbnRMaW5lMkQoeC5wb2ludFgsIHgucG9pbnRZLCB4Q29lZmYsIHlDb2VmZiwgY29uc3RhbnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdLZXkgbmFtZXMgZG8gbm90IG1hdGNoJyk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgQXJndW1lbnRzOiBUcnkgYWdhaW4nKTsKICAgICAgfQogICAgfSwKICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHsKICAgICAgLy8gUG9pbnQgdG8gTGluZSAyRCAoeD1bcG9pbnRYLCBwb2ludFldLCB5PVt4LWNvZWZmLCB5LWNvZWZmLCBjb25zdF0pCiAgICAgIGlmICh4Lmxlbmd0aCA9PT0gMiAmJiB5Lmxlbmd0aCA9PT0gMykgewogICAgICAgIGlmICghXzJkKHgpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmaXJzdCBhcmd1bWVudCcpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFfM2QoeSkpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHNlY29uZCBhcmd1bWVudCcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIF9kaXN0YW5jZVBvaW50TGluZTJEKHhbMF0sIHhbMV0sIHlbMF0sIHlbMV0sIHlbMl0pOwogICAgICB9IGVsc2UgaWYgKHgubGVuZ3RoID09PSAzICYmIHkubGVuZ3RoID09PSA2KSB7CiAgICAgICAgLy8gUG9pbnQgdG8gTGluZSAzRAogICAgICAgIGlmICghXzNkKHgpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDMgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmaXJzdCBhcmd1bWVudCcpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFfcGFyYW1ldHJpY0xpbmUoeSkpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggNiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHNlY29uZCBhcmd1bWVudCcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIF9kaXN0YW5jZVBvaW50TGluZTNEKHhbMF0sIHhbMV0sIHhbMl0sIHlbMF0sIHlbMV0sIHlbMl0sIHlbM10sIHlbNF0sIHlbNV0pOwogICAgICB9IGVsc2UgaWYgKHgubGVuZ3RoID09PSB5Lmxlbmd0aCAmJiB4Lmxlbmd0aCA+IDApIHsKICAgICAgICAvLyBQb2ludCB0byBQb2ludCBOLWRpbWVuc2lvbnMKICAgICAgICBpZiAoIV9jb250YWluc09ubHlOdW1iZXJzKHgpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbGwgdmFsdWVzIG9mIGFuIGFycmF5IHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTsKICAgICAgICB9CgogICAgICAgIGlmICghX2NvbnRhaW5zT25seU51bWJlcnMoeSkpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FsbCB2YWx1ZXMgb2YgYW4gYXJyYXkgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIF9ldWNsaWRlYW5EaXN0YW5jZSh4LCB5KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7CiAgICAgIH0KICAgIH0sCiAgICAnT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBPYmplY3RPYmplY3QoeCwgeSkgewogICAgICBpZiAoT2JqZWN0LmtleXMoeCkubGVuZ3RoID09PSAyICYmIE9iamVjdC5rZXlzKHkpLmxlbmd0aCA9PT0gMykgewogICAgICAgIGlmICghXzJkKHgpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgcG9pbnRYIGFuZCBwb2ludFkgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFfM2QoeSkpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiB4Q29lZmZMaW5lLCB5Q29lZmZMaW5lIGFuZCBjb25zdGFudCBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJ3BvaW50WCcgaW4geCAmJiAncG9pbnRZJyBpbiB4ICYmICd4Q29lZmZMaW5lJyBpbiB5ICYmICd5Q29lZmZMaW5lJyBpbiB5ICYmICdjb25zdGFudCcgaW4geSkgewogICAgICAgICAgcmV0dXJuIF9kaXN0YW5jZVBvaW50TGluZTJEKHgucG9pbnRYLCB4LnBvaW50WSwgeS54Q29lZmZMaW5lLCB5LnlDb2VmZkxpbmUsIHkuY29uc3RhbnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdLZXkgbmFtZXMgZG8gbm90IG1hdGNoJyk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKE9iamVjdC5rZXlzKHgpLmxlbmd0aCA9PT0gMyAmJiBPYmplY3Qua2V5cyh5KS5sZW5ndGggPT09IDYpIHsKICAgICAgICAvLyBQb2ludCB0byBMaW5lIDNECiAgICAgICAgaWYgKCFfM2QoeCkpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludFgsIHBvaW50WSBhbmQgcG9pbnRaIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTsKICAgICAgICB9CgogICAgICAgIGlmICghX3BhcmFtZXRyaWNMaW5lKHkpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgeDAsIHkwLCB6MCwgYSwgYiBhbmQgYyBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJ3BvaW50WCcgaW4geCAmJiAncG9pbnRZJyBpbiB4ICYmICd4MCcgaW4geSAmJiAneTAnIGluIHkgJiYgJ3owJyBpbiB5ICYmICdhJyBpbiB5ICYmICdiJyBpbiB5ICYmICdjJyBpbiB5KSB7CiAgICAgICAgICByZXR1cm4gX2Rpc3RhbmNlUG9pbnRMaW5lM0QoeC5wb2ludFgsIHgucG9pbnRZLCB4LnBvaW50WiwgeS54MCwgeS55MCwgeS56MCwgeS5hLCB5LmIsIHkuYyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0tleSBuYW1lcyBkbyBub3QgbWF0Y2gnKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXMoeCkubGVuZ3RoID09PSAyICYmIE9iamVjdC5rZXlzKHkpLmxlbmd0aCA9PT0gMikgewogICAgICAgIC8vIFBvaW50IHRvIFBvaW50IDJECiAgICAgICAgaWYgKCFfMmQoeCkpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludE9uZVggYW5kIHBvaW50T25lWSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIV8yZCh5KSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWVzIG9mIHBvaW50VHdvWCBhbmQgcG9pbnRUd29ZIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTsKICAgICAgICB9CgogICAgICAgIGlmICgncG9pbnRPbmVYJyBpbiB4ICYmICdwb2ludE9uZVknIGluIHggJiYgJ3BvaW50VHdvWCcgaW4geSAmJiAncG9pbnRUd29ZJyBpbiB5KSB7CiAgICAgICAgICByZXR1cm4gX2V1Y2xpZGVhbkRpc3RhbmNlKFt4LnBvaW50T25lWCwgeC5wb2ludE9uZVldLCBbeS5wb2ludFR3b1gsIHkucG9pbnRUd29ZXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0tleSBuYW1lcyBkbyBub3QgbWF0Y2gnKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXMoeCkubGVuZ3RoID09PSAzICYmIE9iamVjdC5rZXlzKHkpLmxlbmd0aCA9PT0gMykgewogICAgICAgIC8vIFBvaW50IHRvIFBvaW50IDNECiAgICAgICAgaWYgKCFfM2QoeCkpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludE9uZVgsIHBvaW50T25lWSBhbmQgcG9pbnRPbmVaIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTsKICAgICAgICB9CgogICAgICAgIGlmICghXzNkKHkpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgcG9pbnRUd29YLCBwb2ludFR3b1kgYW5kIHBvaW50VHdvWiBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJ3BvaW50T25lWCcgaW4geCAmJiAncG9pbnRPbmVZJyBpbiB4ICYmICdwb2ludE9uZVonIGluIHggJiYgJ3BvaW50VHdvWCcgaW4geSAmJiAncG9pbnRUd29ZJyBpbiB5ICYmICdwb2ludFR3b1onIGluIHkpIHsKICAgICAgICAgIHJldHVybiBfZXVjbGlkZWFuRGlzdGFuY2UoW3gucG9pbnRPbmVYLCB4LnBvaW50T25lWSwgeC5wb2ludE9uZVpdLCBbeS5wb2ludFR3b1gsIHkucG9pbnRUd29ZLCB5LnBvaW50VHdvWl0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdLZXkgbmFtZXMgZG8gbm90IG1hdGNoJyk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgQXJndW1lbnRzOiBUcnkgYWdhaW4nKTsKICAgICAgfQogICAgfSwKICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheShhcnIpIHsKICAgICAgaWYgKCFfcGFpcndpc2UoYXJyKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29ycmVjdCBhcnJheSBmb3JtYXQgZW50ZXJlZCBmb3IgcGFpcndpc2UgZGlzdGFuY2UgY2FsY3VsYXRpb24nKTsKICAgICAgfQoKICAgICAgcmV0dXJuIF9kaXN0YW5jZVBhaXJ3aXNlKGFycik7CiAgICB9CiAgfSk7CgogIGZ1bmN0aW9uIF9pc051bWJlcihhKSB7CiAgICAvLyBkaXN0YW5jZSBzdXBwb3J0cyBudW1iZXJzIGFuZCBiaWdudW1iZXJzCiAgICByZXR1cm4gdHlwZW9mIGEgPT09ICdudW1iZXInIHx8IE9iamVjdChpc1siZSIgLyogaXNCaWdOdW1iZXIgKi9dKShhKTsKICB9CgogIGZ1bmN0aW9uIF8yZChhKSB7CiAgICAvLyBjaGVja3MgaWYgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgYXJlIGNvcnJlY3QgaW4gY291bnQgYW5kIGFyZSB2YWxpZCAoc2hvdWxkIGJlIG51bWJlcnMpCiAgICBpZiAoYS5jb25zdHJ1Y3RvciAhPT0gQXJyYXkpIHsKICAgICAgYSA9IF9vYmplY3RUb0FycmF5KGEpOwogICAgfQoKICAgIHJldHVybiBfaXNOdW1iZXIoYVswXSkgJiYgX2lzTnVtYmVyKGFbMV0pOwogIH0KCiAgZnVuY3Rpb24gXzNkKGEpIHsKICAgIC8vIGNoZWNrcyBpZiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBhcmUgY29ycmVjdCBpbiBjb3VudCBhbmQgYXJlIHZhbGlkIChzaG91bGQgYmUgbnVtYmVycykKICAgIGlmIChhLmNvbnN0cnVjdG9yICE9PSBBcnJheSkgewogICAgICBhID0gX29iamVjdFRvQXJyYXkoYSk7CiAgICB9CgogICAgcmV0dXJuIF9pc051bWJlcihhWzBdKSAmJiBfaXNOdW1iZXIoYVsxXSkgJiYgX2lzTnVtYmVyKGFbMl0pOwogIH0KCiAgZnVuY3Rpb24gX2NvbnRhaW5zT25seU51bWJlcnMoYSkgewogICAgLy8gY2hlY2tzIGlmIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGFyZSBjb3JyZWN0IGluIGNvdW50IGFuZCBhcmUgdmFsaWQgKHNob3VsZCBiZSBudW1iZXJzKQogICAgaWYgKCFBcnJheS5pc0FycmF5KGEpKSB7CiAgICAgIGEgPSBfb2JqZWN0VG9BcnJheShhKTsKICAgIH0KCiAgICByZXR1cm4gYS5ldmVyeShfaXNOdW1iZXIpOwogIH0KCiAgZnVuY3Rpb24gX3BhcmFtZXRyaWNMaW5lKGEpIHsKICAgIGlmIChhLmNvbnN0cnVjdG9yICE9PSBBcnJheSkgewogICAgICBhID0gX29iamVjdFRvQXJyYXkoYSk7CiAgICB9CgogICAgcmV0dXJuIF9pc051bWJlcihhWzBdKSAmJiBfaXNOdW1iZXIoYVsxXSkgJiYgX2lzTnVtYmVyKGFbMl0pICYmIF9pc051bWJlcihhWzNdKSAmJiBfaXNOdW1iZXIoYVs0XSkgJiYgX2lzTnVtYmVyKGFbNV0pOwogIH0KCiAgZnVuY3Rpb24gX29iamVjdFRvQXJyYXkobykgewogICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvKTsKICAgIHZhciBhID0gW107CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGEucHVzaChvW2tleXNbaV1dKTsKICAgIH0KCiAgICByZXR1cm4gYTsKICB9CgogIGZ1bmN0aW9uIF9wYWlyd2lzZShhKSB7CiAgICAvLyBjaGVja3MgZm9yIHZhbGlkIGFyZ3VtZW50cyBwYXNzZWQgdG8gX2Rpc3RhbmNlUGFpcndpc2UoQXJyYXkpCiAgICBpZiAoYVswXS5sZW5ndGggPT09IDIgJiYgX2lzTnVtYmVyKGFbMF1bMF0pICYmIF9pc051bWJlcihhWzBdWzFdKSkgewogICAgICBpZiAoYS5zb21lKGZ1bmN0aW9uIChhSSkgewogICAgICAgIHJldHVybiBhSS5sZW5ndGggIT09IDIgfHwgIV9pc051bWJlcihhSVswXSkgfHwgIV9pc051bWJlcihhSVsxXSk7CiAgICAgIH0pKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGFbMF0ubGVuZ3RoID09PSAzICYmIF9pc051bWJlcihhWzBdWzBdKSAmJiBfaXNOdW1iZXIoYVswXVsxXSkgJiYgX2lzTnVtYmVyKGFbMF1bMl0pKSB7CiAgICAgIGlmIChhLnNvbWUoZnVuY3Rpb24gKGFJKSB7CiAgICAgICAgcmV0dXJuIGFJLmxlbmd0aCAhPT0gMyB8fCAhX2lzTnVtYmVyKGFJWzBdKSB8fCAhX2lzTnVtYmVyKGFJWzFdKSB8fCAhX2lzTnVtYmVyKGFJWzJdKTsKICAgICAgfSkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGZ1bmN0aW9uIF9kaXN0YW5jZVBvaW50TGluZTJEKHgsIHksIGEsIGIsIGMpIHsKICAgIHZhciBudW0gPSBhYnMoYWRkU2NhbGFyKGFkZFNjYWxhcihtdWx0aXBseVNjYWxhcihhLCB4KSwgbXVsdGlwbHlTY2FsYXIoYiwgeSkpLCBjKSk7CiAgICB2YXIgZGVuID0gc3FydChhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIoYSwgYSksIG11bHRpcGx5U2NhbGFyKGIsIGIpKSk7CiAgICByZXR1cm4gZGl2aWRlU2NhbGFyKG51bSwgZGVuKTsKICB9CgogIGZ1bmN0aW9uIF9kaXN0YW5jZVBvaW50TGluZTNEKHgsIHksIHosIHgwLCB5MCwgejAsIGEsIGIsIGMpIHsKICAgIHZhciBudW0gPSBbc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoeTAsIHkpLCBjKSwgbXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoejAsIHopLCBiKSksIHN1YnRyYWN0KG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KHowLCB6KSwgYSksIG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KHgwLCB4KSwgYykpLCBzdWJ0cmFjdChtdWx0aXBseVNjYWxhcihzdWJ0cmFjdCh4MCwgeCksIGIpLCBtdWx0aXBseVNjYWxhcihzdWJ0cmFjdCh5MCwgeSksIGEpKV07CiAgICBudW0gPSBzcXJ0KGFkZFNjYWxhcihhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIobnVtWzBdLCBudW1bMF0pLCBtdWx0aXBseVNjYWxhcihudW1bMV0sIG51bVsxXSkpLCBtdWx0aXBseVNjYWxhcihudW1bMl0sIG51bVsyXSkpKTsKICAgIHZhciBkZW4gPSBzcXJ0KGFkZFNjYWxhcihhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIoYSwgYSksIG11bHRpcGx5U2NhbGFyKGIsIGIpKSwgbXVsdGlwbHlTY2FsYXIoYywgYykpKTsKICAgIHJldHVybiBkaXZpZGVTY2FsYXIobnVtLCBkZW4pOwogIH0KCiAgZnVuY3Rpb24gX2V1Y2xpZGVhbkRpc3RhbmNlKHgsIHkpIHsKICAgIHZhciB2ZWN0b3JTaXplID0geC5sZW5ndGg7CiAgICB2YXIgcmVzdWx0ID0gMDsKICAgIHZhciBkaWZmID0gMDsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlY3RvclNpemU7IGkrKykgewogICAgICBkaWZmID0gc3VidHJhY3QoeFtpXSwgeVtpXSk7CiAgICAgIHJlc3VsdCA9IGFkZFNjYWxhcihtdWx0aXBseVNjYWxhcihkaWZmLCBkaWZmKSwgcmVzdWx0KTsKICAgIH0KCiAgICByZXR1cm4gc3FydChyZXN1bHQpOwogIH0KCiAgZnVuY3Rpb24gX2Rpc3RhbmNlUGFpcndpc2UoYSkgewogICAgdmFyIHJlc3VsdCA9IFtdOwogICAgdmFyIHBvaW50QSA9IFtdOwogICAgdmFyIHBvaW50QiA9IFtdOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGggLSAxOyBpKyspIHsKICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyBqIDwgYS5sZW5ndGg7IGorKykgewogICAgICAgIGlmIChhWzBdLmxlbmd0aCA9PT0gMikgewogICAgICAgICAgcG9pbnRBID0gW2FbaV1bMF0sIGFbaV1bMV1dOwogICAgICAgICAgcG9pbnRCID0gW2Fbal1bMF0sIGFbal1bMV1dOwogICAgICAgIH0gZWxzZSBpZiAoYVswXS5sZW5ndGggPT09IDMpIHsKICAgICAgICAgIHBvaW50QSA9IFthW2ldWzBdLCBhW2ldWzFdLCBhW2ldWzJdXTsKICAgICAgICAgIHBvaW50QiA9IFthW2pdWzBdLCBhW2pdWzFdLCBhW2pdWzJdXTsKICAgICAgICB9CgogICAgICAgIHJlc3VsdC5wdXNoKF9ldWNsaWRlYW5EaXN0YW5jZShwb2ludEEsIHBvaW50QikpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9nZW9tZXRyeS9pbnRlcnNlY3QuanMKCgp2YXIgaW50ZXJzZWN0X25hbWUgPSAnaW50ZXJzZWN0JzsKdmFyIGludGVyc2VjdF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdhYnMnLCAnYWRkJywgJ2FkZFNjYWxhcicsICdtYXRyaXgnLCAnbXVsdGlwbHknLCAnbXVsdGlwbHlTY2FsYXInLCAnZGl2aWRlU2NhbGFyJywgJ3N1YnRyYWN0JywgJ3NtYWxsZXInLCAnZXF1YWxTY2FsYXInXTsKdmFyIGNyZWF0ZUludGVyc2VjdCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGludGVyc2VjdF9uYW1lLCBpbnRlcnNlY3RfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLAogICAgICBhYnMgPSBfcmVmLmFicywKICAgICAgYWRkID0gX3JlZi5hZGQsCiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCwKICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LAogICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsCiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLAogICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsCiAgICAgIHNtYWxsZXIgPSBfcmVmLnNtYWxsZXIsCiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcjsKCiAgLyoqCiAgICogQ2FsY3VsYXRlcyB0aGUgcG9pbnQgb2YgaW50ZXJzZWN0aW9uIG9mIHR3byBsaW5lcyBpbiB0d28gb3IgdGhyZWUgZGltZW5zaW9ucwogICAqIGFuZCBvZiBhIGxpbmUgYW5kIGEgcGxhbmUgaW4gdGhyZWUgZGltZW5zaW9ucy4gVGhlIGlucHV0cyBhcmUgaW4gdGhlIGZvcm0gb2YKICAgKiBhcnJheXMgb3IgMSBkaW1lbnNpb25hbCBtYXRyaWNlcy4gVGhlIGxpbmUgaW50ZXJzZWN0aW9uIGZ1bmN0aW9ucyByZXR1cm4gbnVsbAogICAqIGlmIHRoZSBsaW5lcyBkbyBub3QgbWVldC4KICAgKgogICAqIE5vdGU6IEZpbGwgdGhlIHBsYW5lIGNvZWZmaWNpZW50cyBhcyBgeCArIHkgKyB6ID0gY2AgYW5kIG5vdCBhcyBgeCArIHkgKyB6ICsgYyA9IDBgLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5pbnRlcnNlY3QoZW5kUG9pbnQxTGluZTEsIGVuZFBvaW50MkxpbmUxLCBlbmRQb2ludDFMaW5lMiwgZW5kUG9pbnQyTGluZTIpCiAgICogICAgbWF0aC5pbnRlcnNlY3QoZW5kUG9pbnQxLCBlbmRQb2ludDIsIHBsYW5lQ29lZmZpY2llbnRzKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmludGVyc2VjdChbMCwgMF0sIFsxMCwgMTBdLCBbMTAsIDBdLCBbMCwgMTBdKSAgICAgICAgICAgICAgLy8gUmV0dXJucyBbNSwgNV0KICAgKiAgICBtYXRoLmludGVyc2VjdChbMCwgMCwgMF0sIFsxMCwgMTAsIDBdLCBbMTAsIDAsIDBdLCBbMCwgMTAsIDBdKSAgLy8gUmV0dXJucyBbNSwgNSwgMF0KICAgKiAgICBtYXRoLmludGVyc2VjdChbMSwgMCwgMV0sICBbNCwgLTIsIDJdLCBbMSwgMSwgMSwgNl0pICAgICAgICAgICAgLy8gUmV0dXJucyBbNywgLTQsIDNdCiAgICoKICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0gdyAgIENvLW9yZGluYXRlcyBvZiBmaXJzdCBlbmQtcG9pbnQgb2YgZmlyc3QgbGluZQogICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB4ICAgQ28tb3JkaW5hdGVzIG9mIHNlY29uZCBlbmQtcG9pbnQgb2YgZmlyc3QgbGluZQogICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB5ICAgQ28tb3JkaW5hdGVzIG9mIGZpcnN0IGVuZC1wb2ludCBvZiBzZWNvbmQgbGluZQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1IgQ28tZWZmaWNpZW50cyBvZiB0aGUgcGxhbmUncyBlcXVhdGlvbgogICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB6ICAgQ28tb3JkaW5hdGVzIG9mIHNlY29uZCBlbmQtcG9pbnQgb2Ygc2Vjb25kIGxpbmUKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SIG51bGwgaWYgdGhlIGNhbGN1bGF0aW9uIGlzIGZvciBsaW5lIGFuZCBwbGFuZQogICAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgICAgICAgUmV0dXJucyB0aGUgcG9pbnQgb2YgaW50ZXJzZWN0aW9uIG9mIGxpbmVzL2xpbmVzLXBsYW5lcwogICAqLwogIHZhciBpbnRlcnNlY3QgPSB0eXBlZCgnaW50ZXJzZWN0JywgewogICAgJ0FycmF5LCBBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5QXJyYXkoeCwgeSwgcGxhbmUpIHsKICAgICAgaWYgKCFfM2QoeCkpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDMgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmaXJzdCBhcmd1bWVudCcpOwogICAgICB9CgogICAgICBpZiAoIV8zZCh5KSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHNlY29uZCBhcmd1bWVudCcpOwogICAgICB9CgogICAgICBpZiAoIV80ZChwbGFuZSkpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDQgbnVtYmVycyBleHBlY3RlZCBhcyB0aGlyZCBhcmd1bWVudCcpOwogICAgICB9CgogICAgICByZXR1cm4gX2ludGVyc2VjdExpbmVQbGFuZSh4WzBdLCB4WzFdLCB4WzJdLCB5WzBdLCB5WzFdLCB5WzJdLCBwbGFuZVswXSwgcGxhbmVbMV0sIHBsYW5lWzJdLCBwbGFuZVszXSk7CiAgICB9LAogICAgJ0FycmF5LCBBcnJheSwgQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheUFycmF5QXJyYXkodywgeCwgeSwgeikgewogICAgICBpZiAody5sZW5ndGggPT09IDIpIHsKICAgICAgICBpZiAoIV8yZCh3KSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAyIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgZmlyc3QgYXJndW1lbnQnKTsKICAgICAgICB9CgogICAgICAgIGlmICghXzJkKHgpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBzZWNvbmQgYXJndW1lbnQnKTsKICAgICAgICB9CgogICAgICAgIGlmICghXzJkKHkpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciB0aGlyZCBhcmd1bWVudCcpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFfMmQoeikpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZvdXJ0aCBhcmd1bWVudCcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIF9pbnRlcnNlY3QyZCh3LCB4LCB5LCB6KTsKICAgICAgfSBlbHNlIGlmICh3Lmxlbmd0aCA9PT0gMykgewogICAgICAgIGlmICghXzNkKHcpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDMgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmaXJzdCBhcmd1bWVudCcpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFfM2QoeCkpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHNlY29uZCBhcmd1bWVudCcpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFfM2QoeSkpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHRoaXJkIGFyZ3VtZW50Jyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIV8zZCh6KSkgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgZm91cnRoIGFyZ3VtZW50Jyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gX2ludGVyc2VjdDNkKHdbMF0sIHdbMV0sIHdbMl0sIHhbMF0sIHhbMV0sIHhbMl0sIHlbMF0sIHlbMV0sIHlbMl0sIHpbMF0sIHpbMV0sIHpbMl0pOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5cyB3aXRoIHR3byBvciB0aGVlIGRpbWVuc2lvbmFsIHBvaW50cyBleHBlY3RlZCcpOwogICAgICB9CiAgICB9LAogICAgJ01hdHJpeCwgTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXhNYXRyaXgoeCwgeSwgcGxhbmUpIHsKICAgICAgcmV0dXJuIG1hdHJpeChpbnRlcnNlY3QoeC52YWx1ZU9mKCksIHkudmFsdWVPZigpLCBwbGFuZS52YWx1ZU9mKCkpKTsKICAgIH0sCiAgICAnTWF0cml4LCBNYXRyaXgsIE1hdHJpeCwgTWF0cml4JzogZnVuY3Rpb24gTWF0cml4TWF0cml4TWF0cml4TWF0cml4KHcsIHgsIHksIHopIHsKICAgICAgLy8gVE9ETzogb3V0cHV0IG1hdHJpeCB0eXBlIHNob3VsZCBtYXRjaCBpbnB1dCBtYXRyaXggdHlwZQogICAgICByZXR1cm4gbWF0cml4KGludGVyc2VjdCh3LnZhbHVlT2YoKSwgeC52YWx1ZU9mKCksIHkudmFsdWVPZigpLCB6LnZhbHVlT2YoKSkpOwogICAgfQogIH0pOwoKICBmdW5jdGlvbiBfaXNOdW1lcmljKGEpIHsKICAgIC8vIGludGVyc2VjdCBzdXBwb3J0cyBudW1iZXJzIGFuZCBiaWdudW1iZXJzCiAgICByZXR1cm4gdHlwZW9mIGEgPT09ICdudW1iZXInIHx8IE9iamVjdChpc1siZSIgLyogaXNCaWdOdW1iZXIgKi9dKShhKTsKICB9CgogIGZ1bmN0aW9uIF8yZCh4KSB7CiAgICByZXR1cm4geC5sZW5ndGggPT09IDIgJiYgX2lzTnVtZXJpYyh4WzBdKSAmJiBfaXNOdW1lcmljKHhbMV0pOwogIH0KCiAgZnVuY3Rpb24gXzNkKHgpIHsKICAgIHJldHVybiB4Lmxlbmd0aCA9PT0gMyAmJiBfaXNOdW1lcmljKHhbMF0pICYmIF9pc051bWVyaWMoeFsxXSkgJiYgX2lzTnVtZXJpYyh4WzJdKTsKICB9CgogIGZ1bmN0aW9uIF80ZCh4KSB7CiAgICByZXR1cm4geC5sZW5ndGggPT09IDQgJiYgX2lzTnVtZXJpYyh4WzBdKSAmJiBfaXNOdW1lcmljKHhbMV0pICYmIF9pc051bWVyaWMoeFsyXSkgJiYgX2lzTnVtZXJpYyh4WzNdKTsKICB9CgogIGZ1bmN0aW9uIF9pbnRlcnNlY3QyZChwMWEsIHAxYiwgcDJhLCBwMmIpIHsKICAgIHZhciBvMSA9IHAxYTsKICAgIHZhciBvMiA9IHAyYTsKICAgIHZhciBkMSA9IHN1YnRyYWN0KG8xLCBwMWIpOwogICAgdmFyIGQyID0gc3VidHJhY3QobzIsIHAyYik7CiAgICB2YXIgZGV0ID0gc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoZDFbMF0sIGQyWzFdKSwgbXVsdGlwbHlTY2FsYXIoZDJbMF0sIGQxWzFdKSk7CgogICAgaWYgKHNtYWxsZXIoYWJzKGRldCksIGNvbmZpZy5lcHNpbG9uKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICB2YXIgZDIwbzExID0gbXVsdGlwbHlTY2FsYXIoZDJbMF0sIG8xWzFdKTsKICAgIHZhciBkMjFvMTAgPSBtdWx0aXBseVNjYWxhcihkMlsxXSwgbzFbMF0pOwogICAgdmFyIGQyMG8yMSA9IG11bHRpcGx5U2NhbGFyKGQyWzBdLCBvMlsxXSk7CiAgICB2YXIgZDIxbzIwID0gbXVsdGlwbHlTY2FsYXIoZDJbMV0sIG8yWzBdKTsKICAgIHZhciB0ID0gZGl2aWRlU2NhbGFyKGFkZFNjYWxhcihzdWJ0cmFjdChzdWJ0cmFjdChkMjBvMTEsIGQyMW8xMCksIGQyMG8yMSksIGQyMW8yMCksIGRldCk7CiAgICByZXR1cm4gYWRkKG11bHRpcGx5KGQxLCB0KSwgbzEpOwogIH0KCiAgZnVuY3Rpb24gX2ludGVyc2VjdDNkSGVscGVyKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGksIGosIGssIGwpIHsKICAgIC8vIChhIC0gYikqKGMgLSBkKSArIChlIC0gZikqKGcgLSBoKSArIChpIC0gaikqKGsgLSBsKQogICAgdmFyIGFkZDEgPSBtdWx0aXBseVNjYWxhcihzdWJ0cmFjdChhLCBiKSwgc3VidHJhY3QoYywgZCkpOwogICAgdmFyIGFkZDIgPSBtdWx0aXBseVNjYWxhcihzdWJ0cmFjdChlLCBmKSwgc3VidHJhY3QoZywgaCkpOwogICAgdmFyIGFkZDMgPSBtdWx0aXBseVNjYWxhcihzdWJ0cmFjdChpLCBqKSwgc3VidHJhY3QoaywgbCkpOwogICAgcmV0dXJuIGFkZFNjYWxhcihhZGRTY2FsYXIoYWRkMSwgYWRkMiksIGFkZDMpOwogIH0KCiAgZnVuY3Rpb24gX2ludGVyc2VjdDNkKHgxLCB5MSwgejEsIHgyLCB5MiwgejIsIHgzLCB5MywgejMsIHg0LCB5NCwgejQpIHsKICAgIHZhciBkMTM0MyA9IF9pbnRlcnNlY3QzZEhlbHBlcih4MSwgeDMsIHg0LCB4MywgeTEsIHkzLCB5NCwgeTMsIHoxLCB6MywgejQsIHozKTsKCiAgICB2YXIgZDQzMjEgPSBfaW50ZXJzZWN0M2RIZWxwZXIoeDQsIHgzLCB4MiwgeDEsIHk0LCB5MywgeTIsIHkxLCB6NCwgejMsIHoyLCB6MSk7CgogICAgdmFyIGQxMzIxID0gX2ludGVyc2VjdDNkSGVscGVyKHgxLCB4MywgeDIsIHgxLCB5MSwgeTMsIHkyLCB5MSwgejEsIHozLCB6MiwgejEpOwoKICAgIHZhciBkNDM0MyA9IF9pbnRlcnNlY3QzZEhlbHBlcih4NCwgeDMsIHg0LCB4MywgeTQsIHkzLCB5NCwgeTMsIHo0LCB6MywgejQsIHozKTsKCiAgICB2YXIgZDIxMjEgPSBfaW50ZXJzZWN0M2RIZWxwZXIoeDIsIHgxLCB4MiwgeDEsIHkyLCB5MSwgeTIsIHkxLCB6MiwgejEsIHoyLCB6MSk7CgogICAgdmFyIHRhID0gZGl2aWRlU2NhbGFyKHN1YnRyYWN0KG11bHRpcGx5U2NhbGFyKGQxMzQzLCBkNDMyMSksIG11bHRpcGx5U2NhbGFyKGQxMzIxLCBkNDM0MykpLCBzdWJ0cmFjdChtdWx0aXBseVNjYWxhcihkMjEyMSwgZDQzNDMpLCBtdWx0aXBseVNjYWxhcihkNDMyMSwgZDQzMjEpKSk7CiAgICB2YXIgdGIgPSBkaXZpZGVTY2FsYXIoYWRkU2NhbGFyKGQxMzQzLCBtdWx0aXBseVNjYWxhcih0YSwgZDQzMjEpKSwgZDQzNDMpOwogICAgdmFyIHBheCA9IGFkZFNjYWxhcih4MSwgbXVsdGlwbHlTY2FsYXIodGEsIHN1YnRyYWN0KHgyLCB4MSkpKTsKICAgIHZhciBwYXkgPSBhZGRTY2FsYXIoeTEsIG11bHRpcGx5U2NhbGFyKHRhLCBzdWJ0cmFjdCh5MiwgeTEpKSk7CiAgICB2YXIgcGF6ID0gYWRkU2NhbGFyKHoxLCBtdWx0aXBseVNjYWxhcih0YSwgc3VidHJhY3QoejIsIHoxKSkpOwogICAgdmFyIHBieCA9IGFkZFNjYWxhcih4MywgbXVsdGlwbHlTY2FsYXIodGIsIHN1YnRyYWN0KHg0LCB4MykpKTsKICAgIHZhciBwYnkgPSBhZGRTY2FsYXIoeTMsIG11bHRpcGx5U2NhbGFyKHRiLCBzdWJ0cmFjdCh5NCwgeTMpKSk7CiAgICB2YXIgcGJ6ID0gYWRkU2NhbGFyKHozLCBtdWx0aXBseVNjYWxhcih0Yiwgc3VidHJhY3QoejQsIHozKSkpOwoKICAgIGlmIChlcXVhbFNjYWxhcihwYXgsIHBieCkgJiYgZXF1YWxTY2FsYXIocGF5LCBwYnkpICYmIGVxdWFsU2NhbGFyKHBheiwgcGJ6KSkgewogICAgICByZXR1cm4gW3BheCwgcGF5LCBwYXpdOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBfaW50ZXJzZWN0TGluZVBsYW5lKHgxLCB5MSwgejEsIHgyLCB5MiwgejIsIHgsIHksIHosIGMpIHsKICAgIHZhciB4MXggPSBtdWx0aXBseVNjYWxhcih4MSwgeCk7CiAgICB2YXIgeDJ4ID0gbXVsdGlwbHlTY2FsYXIoeDIsIHgpOwogICAgdmFyIHkxeSA9IG11bHRpcGx5U2NhbGFyKHkxLCB5KTsKICAgIHZhciB5MnkgPSBtdWx0aXBseVNjYWxhcih5MiwgeSk7CiAgICB2YXIgejF6ID0gbXVsdGlwbHlTY2FsYXIoejEsIHopOwogICAgdmFyIHoyeiA9IG11bHRpcGx5U2NhbGFyKHoyLCB6KTsKICAgIHZhciB0ID0gZGl2aWRlU2NhbGFyKHN1YnRyYWN0KHN1YnRyYWN0KHN1YnRyYWN0KGMsIHgxeCksIHkxeSksIHoxeiksIHN1YnRyYWN0KHN1YnRyYWN0KHN1YnRyYWN0KGFkZFNjYWxhcihhZGRTY2FsYXIoeDJ4LCB5MnkpLCB6MnopLCB4MXgpLCB5MXkpLCB6MXopKTsKICAgIHZhciBweCA9IGFkZFNjYWxhcih4MSwgbXVsdGlwbHlTY2FsYXIodCwgc3VidHJhY3QoeDIsIHgxKSkpOwogICAgdmFyIHB5ID0gYWRkU2NhbGFyKHkxLCBtdWx0aXBseVNjYWxhcih0LCBzdWJ0cmFjdCh5MiwgeTEpKSk7CiAgICB2YXIgcHogPSBhZGRTY2FsYXIoejEsIG11bHRpcGx5U2NhbGFyKHQsIHN1YnRyYWN0KHoyLCB6MSkpKTsKICAgIHJldHVybiBbcHgsIHB5LCBwel07IC8vIFRPRE86IEFkZCBjYXNlcyB3aGVuIGxpbmUgaXMgcGFyYWxsZWwgdG8gdGhlIHBsYW5lOgogICAgLy8gICAgICAgKGEpIG5vIGludGVyc2VjdGlvbiwKICAgIC8vICAgICAgIChiKSBsaW5lIGNvbnRhaW5lZCBpbiBwbGFuZQogIH0KCiAgcmV0dXJuIGludGVyc2VjdDsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3VtLmpzCgoKCgp2YXIgc3VtX25hbWUgPSAnc3VtJzsKdmFyIHN1bV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdhZGQnLCAnP2JpZ251bWJlcicsICc/ZnJhY3Rpb24nXTsKdmFyIGNyZWF0ZVN1bSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHN1bV9uYW1lLCBzdW1fZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLAogICAgICBhZGQgPSBfcmVmLmFkZCwKICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsCiAgICAgIGZyYWN0aW9uID0gX3JlZi5mcmFjdGlvbjsKCiAgLyoqCiAgICogQ29tcHV0ZSB0aGUgc3VtIG9mIGEgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy4KICAgKiBJbiBjYXNlIG9mIGEgKG11bHRpIGRpbWVuc2lvbmFsKSBhcnJheSBvciBtYXRyaXgsIHRoZSBzdW0gb2YgYWxsCiAgICogZWxlbWVudHMgd2lsbCBiZSBjYWxjdWxhdGVkLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIG1hdGguc3VtKGEsIGIsIGMsIC4uLikKICAgKiAgICAgbWF0aC5zdW0oQSkKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgIG1hdGguc3VtKDIsIDEsIDQsIDMpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxMAogICAqICAgICBtYXRoLnN1bShbMiwgMSwgNCwgM10pICAgICAgICAgICAgIC8vIHJldHVybnMgMTAKICAgKiAgICAgbWF0aC5zdW0oW1syLCA1XSwgWzQsIDNdLCBbMSwgN11dKSAvLyByZXR1cm5zIDIyCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIG1lYW4sIG1lZGlhbiwgbWluLCBtYXgsIHByb2QsIHN0ZCwgdmFyaWFuY2UKICAgKgogICAqIEBwYXJhbSB7Li4uICp9IGFyZ3MgIEEgc2luZ2xlIG1hdHJpeCBvciBvciBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzCiAgICogQHJldHVybiB7Kn0gVGhlIHN1bSBvZiBhbGwgdmFsdWVzCiAgICovCiAgcmV0dXJuIHR5cGVkKHN1bV9uYW1lLCB7CiAgICAvLyBzdW0oW2EsIGIsIGMsIGQsIC4uLl0pCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBfc3VtLAogICAgLy8gc3VtKFthLCBiLCBjLCBkLCAuLi5dLCBkaW0pCiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IF9uc3VtRGltLAogICAgLy8gc3VtKGEsIGIsIGMsIGQsIC4uLikKICAgICcuLi4nOiBmdW5jdGlvbiBfKGFyZ3MpIHsKICAgICAgaWYgKGNvbnRhaW5zQ29sbGVjdGlvbnMoYXJncykpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTY2FsYXIgdmFsdWVzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHN1bScpOwogICAgICB9CgogICAgICByZXR1cm4gX3N1bShhcmdzKTsKICAgIH0KICB9KTsKICAvKioKICAgKiBSZWN1cnNpdmVseSBjYWxjdWxhdGUgdGhlIHN1bSBvZiBhbiBuLWRpbWVuc2lvbmFsIGFycmF5CiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkKICAgKiBAcmV0dXJuIHtudW1iZXJ9IHN1bQogICAqIEBwcml2YXRlCiAgICovCgogIGZ1bmN0aW9uIF9zdW0oYXJyYXkpIHsKICAgIHZhciBzdW07CiAgICBkZWVwRm9yRWFjaChhcnJheSwgZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgIHRyeSB7CiAgICAgICAgc3VtID0gc3VtID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGFkZChzdW0sIHZhbHVlKTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgdGhyb3cgaW1wcm92ZUVycm9yTWVzc2FnZShlcnIsICdzdW0nLCB2YWx1ZSk7CiAgICAgIH0KICAgIH0pOwoKICAgIGlmIChzdW0gPT09IHVuZGVmaW5lZCkgewogICAgICBzd2l0Y2ggKGNvbmZpZy5udW1iZXIpIHsKICAgICAgICBjYXNlICdudW1iZXInOgogICAgICAgICAgcmV0dXJuIDA7CgogICAgICAgIGNhc2UgJ0JpZ051bWJlcic6CiAgICAgICAgICByZXR1cm4gYmlnbnVtYmVyID8gYmlnbnVtYmVyKDApIDogbm9CaWdudW1iZXIoKTsKCiAgICAgICAgY2FzZSAnRnJhY3Rpb24nOgogICAgICAgICAgcmV0dXJuIGZyYWN0aW9uID8gZnJhY3Rpb24oMCkgOiBub0ZyYWN0aW9uKCk7CgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBzdW07CiAgfQoKICBmdW5jdGlvbiBfbnN1bURpbShhcnJheSwgZGltKSB7CiAgICB0cnkgewogICAgICB2YXIgc3VtID0gcmVkdWNlKGFycmF5LCBkaW0sIGFkZCk7CiAgICAgIHJldHVybiBzdW07CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgdGhyb3cgaW1wcm92ZUVycm9yTWVzc2FnZShlcnIsICdzdW0nKTsKICAgIH0KICB9Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9zdGF0aXN0aWNzL21lYW4uanMKCgoKCnZhciBtZWFuX25hbWUgPSAnbWVhbic7CnZhciBtZWFuX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWRkJywgJ2RpdmlkZSddOwp2YXIgY3JlYXRlTWVhbiA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKG1lYW5fbmFtZSwgbWVhbl9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgYWRkID0gX3JlZi5hZGQsCiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlOwoKICAvKioKICAgKiBDb21wdXRlIHRoZSBtZWFuIHZhbHVlIG9mIG1hdHJpeCBvciBhIGxpc3Qgd2l0aCB2YWx1ZXMuCiAgICogSW4gY2FzZSBvZiBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5LCB0aGUgbWVhbiBvZiB0aGUgZmxhdHRlbmVkIGFycmF5CiAgICogd2lsbCBiZSBjYWxjdWxhdGVkLiBXaGVuIGBkaW1gIGlzIHByb3ZpZGVkLCB0aGUgbWF4aW11bSBvdmVyIHRoZSBzZWxlY3RlZAogICAqIGRpbWVuc2lvbiB3aWxsIGJlIGNhbGN1bGF0ZWQuIFBhcmFtZXRlciBgZGltYCBpcyB6ZXJvLWJhc2VkLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIG1hdGgubWVhbihhLCBiLCBjLCAuLi4pCiAgICogICAgIG1hdGgubWVhbihBKQogICAqICAgICBtYXRoLm1lYW4oQSwgZGltKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICAgbWF0aC5tZWFuKDIsIDEsIDQsIDMpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAyLjUKICAgKiAgICAgbWF0aC5tZWFuKFsxLCAyLjcsIDMuMiwgNF0pICAgICAgICAgICAgICAgLy8gcmV0dXJucyAyLjcyNQogICAqCiAgICogICAgIG1hdGgubWVhbihbWzIsIDVdLCBbNiwgM10sIFsxLCA3XV0sIDApICAgIC8vIHJldHVybnMgWzMsIDVdCiAgICogICAgIG1hdGgubWVhbihbWzIsIDVdLCBbNiwgM10sIFsxLCA3XV0sIDEpICAgIC8vIHJldHVybnMgWzMuNSwgNC41LCA0XQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICAgbWVkaWFuLCBtaW4sIG1heCwgc3VtLCBwcm9kLCBzdGQsIHZhcmlhbmNlCiAgICoKICAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlcwogICAqIEByZXR1cm4geyp9IFRoZSBtZWFuIG9mIGFsbCB2YWx1ZXMKICAgKi8KICByZXR1cm4gdHlwZWQobWVhbl9uYW1lLCB7CiAgICAvLyBtZWFuKFthLCBiLCBjLCBkLCAuLi5dKQogICAgJ0FycmF5IHwgTWF0cml4JzogX21lYW4sCiAgICAvLyBtZWFuKFthLCBiLCBjLCBkLCAuLi5dLCBkaW0pCiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IF9ubWVhbkRpbSwKICAgIC8vIG1lYW4oYSwgYiwgYywgZCwgLi4uKQogICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykgewogICAgICBpZiAoY29udGFpbnNDb2xsZWN0aW9ucyhhcmdzKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NjYWxhciB2YWx1ZXMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gbWVhbicpOwogICAgICB9CgogICAgICByZXR1cm4gX21lYW4oYXJncyk7CiAgICB9CiAgfSk7CiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBtZWFuIHZhbHVlIGluIGFuIG4tZGltZW5zaW9uYWwgYXJyYXksIHJldHVybmluZyBhCiAgICogbi0xIGRpbWVuc2lvbmFsIGFycmF5CiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkKICAgKiBAcGFyYW0ge251bWJlcn0gZGltCiAgICogQHJldHVybiB7bnVtYmVyfSBtZWFuCiAgICogQHByaXZhdGUKICAgKi8KCiAgZnVuY3Rpb24gX25tZWFuRGltKGFycmF5LCBkaW0pIHsKICAgIHRyeSB7CiAgICAgIHZhciBzdW0gPSByZWR1Y2UoYXJyYXksIGRpbSwgYWRkKTsKICAgICAgdmFyIHMgPSBBcnJheS5pc0FycmF5KGFycmF5KSA/IE9iamVjdCh1dGlsc19hcnJheVsiYSIgLyogYXJyYXlTaXplICovXSkoYXJyYXkpIDogYXJyYXkuc2l6ZSgpOwogICAgICByZXR1cm4gZGl2aWRlKHN1bSwgc1tkaW1dKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICB0aHJvdyBpbXByb3ZlRXJyb3JNZXNzYWdlKGVyciwgJ21lYW4nKTsKICAgIH0KICB9CiAgLyoqCiAgICogUmVjdXJzaXZlbHkgY2FsY3VsYXRlIHRoZSBtZWFuIHZhbHVlIGluIGFuIG4tZGltZW5zaW9uYWwgYXJyYXkKICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheQogICAqIEByZXR1cm4ge251bWJlcn0gbWVhbgogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBfbWVhbihhcnJheSkgewogICAgdmFyIHN1bTsKICAgIHZhciBudW0gPSAwOwogICAgZGVlcEZvckVhY2goYXJyYXksIGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICB0cnkgewogICAgICAgIHN1bSA9IHN1bSA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBhZGQoc3VtLCB2YWx1ZSk7CiAgICAgICAgbnVtKys7CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIHRocm93IGltcHJvdmVFcnJvck1lc3NhZ2UoZXJyLCAnbWVhbicsIHZhbHVlKTsKICAgICAgfQogICAgfSk7CgogICAgaWYgKG51bSA9PT0gMCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgdGhlIG1lYW4gb2YgYW4gZW1wdHkgYXJyYXknKTsKICAgIH0KCiAgICByZXR1cm4gZGl2aWRlKHN1bSwgbnVtKTsKICB9Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9zdGF0aXN0aWNzL21lZGlhbi5qcwoKCgoKdmFyIG1lZGlhbl9uYW1lID0gJ21lZGlhbic7CnZhciBtZWRpYW5fZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGQnLCAnZGl2aWRlJywgJ2NvbXBhcmUnLCAncGFydGl0aW9uU2VsZWN0J107CnZhciBjcmVhdGVNZWRpYW4gPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShtZWRpYW5fbmFtZSwgbWVkaWFuX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBhZGQgPSBfcmVmLmFkZCwKICAgICAgZGl2aWRlID0gX3JlZi5kaXZpZGUsCiAgICAgIGNvbXBhcmUgPSBfcmVmLmNvbXBhcmUsCiAgICAgIHBhcnRpdGlvblNlbGVjdCA9IF9yZWYucGFydGl0aW9uU2VsZWN0OwoKICAvKioKICAgKiBDb21wdXRlIHRoZSBtZWRpYW4gb2YgYSBtYXRyaXggb3IgYSBsaXN0IHdpdGggdmFsdWVzLiBUaGUgdmFsdWVzIGFyZQogICAqIHNvcnRlZCBhbmQgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC4gSW4gY2FzZSBvZiBhbiBldmVuIG51bWJlciBvZgogICAqIHZhbHVlcywgdGhlIGF2ZXJhZ2Ugb2YgdGhlIHR3byBtaWRkbGUgdmFsdWVzIGlzIHJldHVybmVkLgogICAqIFN1cHBvcnRlZCB0eXBlcyBvZiB2YWx1ZXMgYXJlOiBOdW1iZXIsIEJpZ051bWJlciwgVW5pdAogICAqCiAgICogSW4gY2FzZSBvZiBhIChtdWx0aSBkaW1lbnNpb25hbCkgYXJyYXkgb3IgbWF0cml4LCB0aGUgbWVkaWFuIG9mIGFsbAogICAqIGVsZW1lbnRzIHdpbGwgYmUgY2FsY3VsYXRlZC4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBtYXRoLm1lZGlhbihhLCBiLCBjLCAuLi4pCiAgICogICAgIG1hdGgubWVkaWFuKEEpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgICBtYXRoLm1lZGlhbig1LCAyLCA3KSAgICAgICAgLy8gcmV0dXJucyA1CiAgICogICAgIG1hdGgubWVkaWFuKFszLCAtMSwgNSwgN10pICAvLyByZXR1cm5zIDQKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgIG1lYW4sIG1pbiwgbWF4LCBzdW0sIHByb2QsIHN0ZCwgdmFyaWFuY2UsIHF1YW50aWxlU2VxCiAgICoKICAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlcwogICAqIEByZXR1cm4geyp9IFRoZSBtZWRpYW4KICAgKi8KICB2YXIgbWVkaWFuID0gdHlwZWQobWVkaWFuX25hbWUsIHsKICAgIC8vIG1lZGlhbihbYSwgYiwgYywgZCwgLi4uXSkKICAgICdBcnJheSB8IE1hdHJpeCc6IF9tZWRpYW4sCiAgICAvLyBtZWRpYW4oW2EsIGIsIGMsIGQsIC4uLl0sIGRpbSkKICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYXJyYXksIGRpbSkgewogICAgICAvLyBUT0RPOiBpbXBsZW1lbnQgbWVkaWFuKEEsIGRpbSkKICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZWRpYW4oQSwgZGltKSBpcyBub3QgeWV0IHN1cHBvcnRlZCcpOyAvLyByZXR1cm4gcmVkdWNlKGFyZ3VtZW50c1swXSwgYXJndW1lbnRzWzFdLCAuLi4pCiAgICB9LAogICAgLy8gbWVkaWFuKGEsIGIsIGMsIGQsIC4uLikKICAgICcuLi4nOiBmdW5jdGlvbiBfKGFyZ3MpIHsKICAgICAgaWYgKGNvbnRhaW5zQ29sbGVjdGlvbnMoYXJncykpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTY2FsYXIgdmFsdWVzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIG1lZGlhbicpOwogICAgICB9CgogICAgICByZXR1cm4gX21lZGlhbihhcmdzKTsKICAgIH0KICB9KTsKICAvKioKICAgKiBSZWN1cnNpdmVseSBjYWxjdWxhdGUgdGhlIG1lZGlhbiBvZiBhbiBuLWRpbWVuc2lvbmFsIGFycmF5CiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkKICAgKiBAcmV0dXJuIHtOdW1iZXJ9IG1lZGlhbgogICAqIEBwcml2YXRlCiAgICovCgogIGZ1bmN0aW9uIF9tZWRpYW4oYXJyYXkpIHsKICAgIHRyeSB7CiAgICAgIGFycmF5ID0gT2JqZWN0KHV0aWxzX2FycmF5WyJlIiAvKiBmbGF0dGVuICovXSkoYXJyYXkudmFsdWVPZigpKTsKICAgICAgdmFyIG51bSA9IGFycmF5Lmxlbmd0aDsKCiAgICAgIGlmIChudW0gPT09IDApIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgbWVkaWFuIG9mIGFuIGVtcHR5IGFycmF5Jyk7CiAgICAgIH0KCiAgICAgIGlmIChudW0gJSAyID09PSAwKSB7CiAgICAgICAgLy8gZXZlbjogcmV0dXJuIHRoZSBhdmVyYWdlIG9mIHRoZSB0d28gbWlkZGxlIHZhbHVlcwogICAgICAgIHZhciBtaWQgPSBudW0gLyAyIC0gMTsKICAgICAgICB2YXIgcmlnaHQgPSBwYXJ0aXRpb25TZWxlY3QoYXJyYXksIG1pZCArIDEpOyAvLyBhcnJheSBub3cgcGFydGl0aW9uZWQgYXQgbWlkICsgMSwgdGFrZSBtYXggb2YgbGVmdCBwYXJ0CgogICAgICAgIHZhciBsZWZ0ID0gYXJyYXlbbWlkXTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaWQ7ICsraSkgewogICAgICAgICAgaWYgKGNvbXBhcmUoYXJyYXlbaV0sIGxlZnQpID4gMCkgewogICAgICAgICAgICBsZWZ0ID0gYXJyYXlbaV07CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbWlkZGxlMihsZWZ0LCByaWdodCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gb2RkOiByZXR1cm4gdGhlIG1pZGRsZSB2YWx1ZQogICAgICAgIHZhciBtID0gcGFydGl0aW9uU2VsZWN0KGFycmF5LCAobnVtIC0gMSkgLyAyKTsKICAgICAgICByZXR1cm4gbWlkZGxlKG0pOwogICAgICB9CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgdGhyb3cgaW1wcm92ZUVycm9yTWVzc2FnZShlcnIsICdtZWRpYW4nKTsKICAgIH0KICB9IC8vIGhlbHBlciBmdW5jdGlvbiB0byB0eXBlIGNoZWNrIHRoZSBtaWRkbGUgdmFsdWUgb2YgdGhlIGFycmF5CgoKICB2YXIgbWlkZGxlID0gdHlwZWQoewogICAgJ251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQ29tcGxleFVuaXQodmFsdWUpIHsKICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQogIH0pOyAvLyBoZWxwZXIgZnVuY3Rpb24gdG8gdHlwZSBjaGVjayB0aGUgdHdvIG1pZGRsZSB2YWx1ZSBvZiB0aGUgYXJyYXkKCiAgdmFyIG1pZGRsZTIgPSB0eXBlZCh7CiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQsIG51bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQ29tcGxleFVuaXROdW1iZXJCaWdOdW1iZXJDb21wbGV4VW5pdChsZWZ0LCByaWdodCkgewogICAgICByZXR1cm4gZGl2aWRlKGFkZChsZWZ0LCByaWdodCksIDIpOwogICAgfQogIH0pOwogIHJldHVybiBtZWRpYW47Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9zdGF0aXN0aWNzL21hZC5qcwoKCgp2YXIgbWFkX25hbWUgPSAnbWFkJzsKdmFyIG1hZF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FicycsICdtYXAnLCAnbWVkaWFuJywgJ3N1YnRyYWN0J107CnZhciBjcmVhdGVNYWQgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShtYWRfbmFtZSwgbWFkX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBhYnMgPSBfcmVmLmFicywKICAgICAgbWFwID0gX3JlZi5tYXAsCiAgICAgIG1lZGlhbiA9IF9yZWYubWVkaWFuLAogICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3Q7CgogIC8qKgogICAqIENvbXB1dGUgdGhlIG1lZGlhbiBhYnNvbHV0ZSBkZXZpYXRpb24gb2YgYSBtYXRyaXggb3IgYSBsaXN0IHdpdGggdmFsdWVzLgogICAqIFRoZSBtZWRpYW4gYWJzb2x1dGUgZGV2aWF0aW9uIGlzIGRlZmluZWQgYXMgdGhlIG1lZGlhbiBvZiB0aGUgYWJzb2x1dGUKICAgKiBkZXZpYXRpb25zIGZyb20gdGhlIG1lZGlhbi4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBtYXRoLm1hZChhLCBiLCBjLCAuLi4pCiAgICogICAgIG1hdGgubWFkKEEpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgICBtYXRoLm1hZCgxMCwgMjAsIDMwKSAgICAgICAgICAgICAvLyByZXR1cm5zIDEwCiAgICogICAgIG1hdGgubWFkKFsxLCAyLCAzXSkgICAgICAgICAgICAgIC8vIHJldHVybnMgMQogICAqICAgICBtYXRoLm1hZChbWzEsIDIsIDNdLCBbNCwgNSwgNl1dKSAvLyByZXR1cm5zIDEuNQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICAgbWVkaWFuLCBtZWFuLCBzdGQsIGFicwogICAqCiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gYXJyYXkKICAgKiAgICAgICAgICAgICAgICAgICAgICAgIEEgc2luZ2xlIG1hdHJpeCBvciBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzLgogICAqIEByZXR1cm4geyp9IFRoZSBtZWRpYW4gYWJzb2x1dGUgZGV2aWF0aW9uLgogICAqLwogIHJldHVybiB0eXBlZChtYWRfbmFtZSwgewogICAgLy8gbWFkKFthLCBiLCBjLCBkLCAuLi5dKQogICAgJ0FycmF5IHwgTWF0cml4JzogX21hZCwKICAgIC8vIG1hZChhLCBiLCBjLCBkLCAuLi4pCiAgICAnLi4uJzogZnVuY3Rpb24gXyhhcmdzKSB7CiAgICAgIHJldHVybiBfbWFkKGFyZ3MpOwogICAgfQogIH0pOwoKICBmdW5jdGlvbiBfbWFkKGFycmF5KSB7CiAgICBhcnJheSA9IE9iamVjdCh1dGlsc19hcnJheVsiZSIgLyogZmxhdHRlbiAqL10pKGFycmF5LnZhbHVlT2YoKSk7CgogICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgbWVkaWFuIGFic29sdXRlIGRldmlhdGlvbiAobWFkKSBvZiBhbiBlbXB0eSBhcnJheScpOwogICAgfQoKICAgIHRyeSB7CiAgICAgIHZhciBtZWQgPSBtZWRpYW4oYXJyYXkpOwogICAgICByZXR1cm4gbWVkaWFuKG1hcChhcnJheSwgZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIGFicyhzdWJ0cmFjdCh2YWx1ZSwgbWVkKSk7CiAgICAgIH0pKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVHlwZUVycm9yICYmIGVyci5tZXNzYWdlLmluZGV4T2YoJ21lZGlhbicpICE9PSAtMSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZXJyLm1lc3NhZ2UucmVwbGFjZSgnbWVkaWFuJywgJ21hZCcpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBpbXByb3ZlRXJyb3JNZXNzYWdlKGVyciwgJ21hZCcpOwogICAgICB9CiAgICB9CiAgfQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vc3RhdGlzdGljcy92YXJpYW5jZS5qcwoKCgoKCnZhciBERUZBVUxUX05PUk1BTElaQVRJT04gPSAndW5iaWFzZWQnOwp2YXIgdmFyaWFuY2VfbmFtZSA9ICd2YXJpYW5jZSc7CnZhciB2YXJpYW5jZV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseScsICdkaXZpZGUnLCAnYXBwbHknLCAnaXNOYU4nXTsKdmFyIGNyZWF0ZVZhcmlhbmNlID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkodmFyaWFuY2VfbmFtZSwgdmFyaWFuY2VfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGFkZCA9IF9yZWYuYWRkLAogICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsCiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSwKICAgICAgZGl2aWRlID0gX3JlZi5kaXZpZGUsCiAgICAgIGFwcGx5ID0gX3JlZi5hcHBseSwKICAgICAgaXNOYU4gPSBfcmVmLmlzTmFOOwoKICAvKioKICAgKiBDb21wdXRlIHRoZSB2YXJpYW5jZSBvZiBhIG1hdHJpeCBvciBhICBsaXN0IHdpdGggdmFsdWVzLgogICAqIEluIGNhc2Ugb2YgYSAobXVsdGkgZGltZW5zaW9uYWwpIGFycmF5IG9yIG1hdHJpeCwgdGhlIHZhcmlhbmNlIG92ZXIgYWxsCiAgICogZWxlbWVudHMgd2lsbCBiZSBjYWxjdWxhdGVkLgogICAqCiAgICogQWRkaXRpb25hbGx5LCBpdCBpcyBwb3NzaWJsZSB0byBjb21wdXRlIHRoZSB2YXJpYW5jZSBhbG9uZyB0aGUgcm93cwogICAqIG9yIGNvbHVtbnMgb2YgYSBtYXRyaXggYnkgc3BlY2lmeWluZyB0aGUgZGltZW5zaW9uIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQuCiAgICoKICAgKiBPcHRpb25hbGx5LCB0aGUgdHlwZSBvZiBub3JtYWxpemF0aW9uIGNhbiBiZSBzcGVjaWZpZWQgYXMgdGhlIGZpbmFsCiAgICogcGFyYW1ldGVyLiBUaGUgcGFyYW1ldGVyIGBub3JtYWxpemF0aW9uYCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqCiAgICogLSAndW5iaWFzZWQnIChkZWZhdWx0KSBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgKG4gLSAxKQogICAqIC0gJ3VuY29ycmVjdGVkJyAgICAgICAgVGhlIHN1bSBvZiBzcXVhcmVkIGVycm9ycyBpcyBkaXZpZGVkIGJ5IG4KICAgKiAtICdiaWFzZWQnICAgICAgICAgICAgIFRoZSBzdW0gb2Ygc3F1YXJlZCBlcnJvcnMgaXMgZGl2aWRlZCBieSAobiArIDEpCiAgICoKICAgKgogICAqIE5vdGUgdGhhdCBvbGRlciBicm93c2VyIG1heSBub3QgbGlrZSB0aGUgdmFyaWFibGUgbmFtZSBgdmFyYC4gSW4gdGhhdAogICAqIGNhc2UsIHRoZSBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGFzIGBtYXRoWyd2YXInXSguLi4pYCBpbnN0ZWFkIG9mCiAgICogYG1hdGgudmFyKC4uLilgLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIG1hdGgudmFyaWFuY2UoYSwgYiwgYywgLi4uKQogICAqICAgICBtYXRoLnZhcmlhbmNlKEEpCiAgICogICAgIG1hdGgudmFyaWFuY2UoQSwgbm9ybWFsaXphdGlvbikKICAgKiAgICAgbWF0aC52YXJpYW5jZShBLCBkaW1lbnNpb24pCiAgICogICAgIG1hdGgudmFyaWFuY2UoQSwgZGltZW5zaW9uLCBub3JtYWxpemF0aW9uKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICAgbWF0aC52YXJpYW5jZSgyLCA0LCA2KSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgNAogICAqICAgICBtYXRoLnZhcmlhbmNlKFsyLCA0LCA2LCA4XSkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA2LjY2NjY2NjY2NjY2NjY2NwogICAqICAgICBtYXRoLnZhcmlhbmNlKFsyLCA0LCA2LCA4XSwgJ3VuY29ycmVjdGVkJykgLy8gcmV0dXJucyA1CiAgICogICAgIG1hdGgudmFyaWFuY2UoWzIsIDQsIDYsIDhdLCAnYmlhc2VkJykgICAgICAvLyByZXR1cm5zIDQKICAgKgogICAqICAgICBtYXRoLnZhcmlhbmNlKFtbMSwgMiwgM10sIFs0LCA1LCA2XV0pICAgICAgLy8gcmV0dXJucyAzLjUKICAgKiAgICAgbWF0aC52YXJpYW5jZShbWzEsIDIsIDNdLCBbNCwgNiwgOF1dLCAwKSAgIC8vIHJldHVybnMgWzQuNSwgOCwgMTIuNV0KICAgKiAgICAgbWF0aC52YXJpYW5jZShbWzEsIDIsIDNdLCBbNCwgNiwgOF1dLCAxKSAgIC8vIHJldHVybnMgWzEsIDRdCiAgICogICAgIG1hdGgudmFyaWFuY2UoW1sxLCAyLCAzXSwgWzQsIDYsIDhdXSwgMSwgJ2JpYXNlZCcpIC8vIHJldHVybnMgWzAuNSwgMl0KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgbWVhbiwgbWVkaWFuLCBtYXgsIG1pbiwgcHJvZCwgc3RkLCBzdW0KICAgKgogICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IGFycmF5CiAgICogICAgICAgICAgICAgICAgICAgICAgICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlcwogICAqIEBwYXJhbSB7c3RyaW5nfSBbbm9ybWFsaXphdGlvbj0ndW5iaWFzZWQnXQogICAqICAgICAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyBob3cgdG8gbm9ybWFsaXplIHRoZSB2YXJpYW5jZS4KICAgKiAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSAndW5iaWFzZWQnIChkZWZhdWx0KSwgJ3VuY29ycmVjdGVkJywgb3IgJ2JpYXNlZCcuCiAgICogQHBhcmFtIGRpbWVuc2lvbiB7bnVtYmVyIHwgQmlnTnVtYmVyfQogICAqICAgICAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgYXhpcyB0byBjb21wdXRlIHRoZSB2YXJpYW5jZSBmb3IgYSBtYXRyaXgKICAgKiBAcmV0dXJuIHsqfSBUaGUgdmFyaWFuY2UKICAgKi8KICByZXR1cm4gdHlwZWQodmFyaWFuY2VfbmFtZSwgewogICAgLy8gdmFyaWFuY2UoW2EsIGIsIGMsIGQsIC4uLl0pCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChhcnJheSkgewogICAgICByZXR1cm4gX3ZhcihhcnJheSwgREVGQVVMVF9OT1JNQUxJWkFUSU9OKTsKICAgIH0sCiAgICAvLyB2YXJpYW5jZShbYSwgYiwgYywgZCwgLi4uXSwgbm9ybWFsaXphdGlvbikKICAgICdBcnJheSB8IE1hdHJpeCwgc3RyaW5nJzogX3ZhciwKICAgIC8vIHZhcmlhbmNlKFthLCBiLCBjLCBjLCAuLi5dLCBkaW0pCiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyKGFycmF5LCBkaW0pIHsKICAgICAgcmV0dXJuIF92YXJEaW0oYXJyYXksIGRpbSwgREVGQVVMVF9OT1JNQUxJWkFUSU9OKTsKICAgIH0sCiAgICAvLyB2YXJpYW5jZShbYSwgYiwgYywgYywgLi4uXSwgZGltLCBub3JtYWxpemF0aW9uKQogICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXIsIHN0cmluZyc6IF92YXJEaW0sCiAgICAvLyB2YXJpYW5jZShhLCBiLCBjLCBkLCAuLi4pCiAgICAnLi4uJzogZnVuY3Rpb24gXyhhcmdzKSB7CiAgICAgIHJldHVybiBfdmFyKGFyZ3MsIERFRkFVTFRfTk9STUFMSVpBVElPTik7CiAgICB9CiAgfSk7CiAgLyoqCiAgICogUmVjdXJzaXZlbHkgY2FsY3VsYXRlIHRoZSB2YXJpYW5jZSBvZiBhbiBuLWRpbWVuc2lvbmFsIGFycmF5CiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkKICAgKiBAcGFyYW0ge3N0cmluZ30gbm9ybWFsaXphdGlvbgogICAqICAgICAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyBob3cgdG8gbm9ybWFsaXplIHRoZSB2YXJpYW5jZToKICAgKiAgICAgICAgICAgICAgICAgICAgICAgIC0gJ3VuYmlhc2VkJyAgICBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgKG4gLSAxKQogICAqICAgICAgICAgICAgICAgICAgICAgICAgLSAndW5jb3JyZWN0ZWQnIFRoZSBzdW0gb2Ygc3F1YXJlZCBlcnJvcnMgaXMgZGl2aWRlZCBieSBuCiAgICogICAgICAgICAgICAgICAgICAgICAgICAtICdiaWFzZWQnICAgICAgVGhlIHN1bSBvZiBzcXVhcmVkIGVycm9ycyBpcyBkaXZpZGVkIGJ5IChuICsgMSkKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXJ9IHZhcmlhbmNlCiAgICogQHByaXZhdGUKICAgKi8KCiAgZnVuY3Rpb24gX3ZhcihhcnJheSwgbm9ybWFsaXphdGlvbikgewogICAgdmFyIHN1bSA9IDA7CiAgICB2YXIgbnVtID0gMDsKCiAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSB7CiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignRnVuY3Rpb24gdmFyaWFuY2UgcmVxdWlyZXMgb25lIG9yIG1vcmUgcGFyYW1ldGVycyAoMCBwcm92aWRlZCknKTsKICAgIH0gLy8gY2FsY3VsYXRlIHRoZSBtZWFuIGFuZCBudW1iZXIgb2YgZWxlbWVudHMKCgogICAgZGVlcEZvckVhY2goYXJyYXksIGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICB0cnkgewogICAgICAgIHN1bSA9IGFkZChzdW0sIHZhbHVlKTsKICAgICAgICBudW0rKzsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgdGhyb3cgaW1wcm92ZUVycm9yTWVzc2FnZShlcnIsICd2YXJpYW5jZScsIHZhbHVlKTsKICAgICAgfQogICAgfSk7CiAgICBpZiAobnVtID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgdmFyaWFuY2Ugb2YgYW4gZW1wdHkgYXJyYXknKTsKICAgIHZhciBtZWFuID0gZGl2aWRlKHN1bSwgbnVtKTsgLy8gY2FsY3VsYXRlIHRoZSB2YXJpYW5jZQoKICAgIHN1bSA9IDA7CiAgICBkZWVwRm9yRWFjaChhcnJheSwgZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgIHZhciBkaWZmID0gc3VidHJhY3QodmFsdWUsIG1lYW4pOwogICAgICBzdW0gPSBhZGQoc3VtLCBtdWx0aXBseShkaWZmLCBkaWZmKSk7CiAgICB9KTsKCiAgICBpZiAoaXNOYU4oc3VtKSkgewogICAgICByZXR1cm4gc3VtOwogICAgfQoKICAgIHN3aXRjaCAobm9ybWFsaXphdGlvbikgewogICAgICBjYXNlICd1bmNvcnJlY3RlZCc6CiAgICAgICAgcmV0dXJuIGRpdmlkZShzdW0sIG51bSk7CgogICAgICBjYXNlICdiaWFzZWQnOgogICAgICAgIHJldHVybiBkaXZpZGUoc3VtLCBudW0gKyAxKTsKCiAgICAgIGNhc2UgJ3VuYmlhc2VkJzoKICAgICAgICB7CiAgICAgICAgICB2YXIgemVybyA9IE9iamVjdChpc1siZSIgLyogaXNCaWdOdW1iZXIgKi9dKShzdW0pID8gc3VtLm11bCgwKSA6IDA7CiAgICAgICAgICByZXR1cm4gbnVtID09PSAxID8gemVybyA6IGRpdmlkZShzdW0sIG51bSAtIDEpOwogICAgICAgIH0KCiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIG5vcm1hbGl6YXRpb24gIicgKyBub3JtYWxpemF0aW9uICsgJyIuICcgKyAnQ2hvb3NlICJ1bmJpYXNlZCIgKGRlZmF1bHQpLCAidW5jb3JyZWN0ZWQiLCBvciAiYmlhc2VkIi4nKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIF92YXJEaW0oYXJyYXksIGRpbSwgbm9ybWFsaXphdGlvbikgewogICAgdHJ5IHsKICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignRnVuY3Rpb24gdmFyaWFuY2UgcmVxdWlyZXMgb25lIG9yIG1vcmUgcGFyYW1ldGVycyAoMCBwcm92aWRlZCknKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGFwcGx5KGFycmF5LCBkaW0sIGZ1bmN0aW9uICh4KSB7CiAgICAgICAgcmV0dXJuIF92YXIoeCwgbm9ybWFsaXphdGlvbik7CiAgICAgIH0pOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIHRocm93IGltcHJvdmVFcnJvck1lc3NhZ2UoZXJyLCAndmFyaWFuY2UnKTsKICAgIH0KICB9Cn0pOyAvLyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDYuMC4wLiBEYXRlOiAyMDE4LTExLTA5Cgp2YXIgY3JlYXRlRGVwcmVjYXRlZFZhciA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKCd2YXInLCBbJ3ZhcmlhbmNlJ10sIGZ1bmN0aW9uIChfcmVmMikgewogIHZhciB2YXJpYW5jZSA9IF9yZWYyLnZhcmlhbmNlOwogIHJldHVybiBmdW5jdGlvbiAoKSB7CiAgICBPYmplY3QodXRpbHNfbG9nWyJhIiAvKiB3YXJuT25jZSAqL10pKCdGdW5jdGlvbiAidmFyIiBoYXMgYmVlbiByZW5hbWVkIHRvICJ2YXJpYW5jZSIgaW4gdjYuMC4wLCBwbGVhc2UgdXNlIHRoZSBuZXcgZnVuY3Rpb24gaW5zdGVhZC4nKTsKCiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTsKICAgIH0KCiAgICByZXR1cm4gdmFyaWFuY2UuYXBwbHkodmFyaWFuY2UsIGFyZ3MpOwogIH07Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9zdGF0aXN0aWNzL3F1YW50aWxlU2VxLmpzCgoKCgp2YXIgcXVhbnRpbGVTZXFfbmFtZSA9ICdxdWFudGlsZVNlcSc7CnZhciBxdWFudGlsZVNlcV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdtdWx0aXBseScsICdwYXJ0aXRpb25TZWxlY3QnLCAnY29tcGFyZSddOwp2YXIgY3JlYXRlUXVhbnRpbGVTZXEgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShxdWFudGlsZVNlcV9uYW1lLCBxdWFudGlsZVNlcV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgYWRkID0gX3JlZi5hZGQsCiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSwKICAgICAgcGFydGl0aW9uU2VsZWN0ID0gX3JlZi5wYXJ0aXRpb25TZWxlY3QsCiAgICAgIGNvbXBhcmUgPSBfcmVmLmNvbXBhcmU7CgogIC8qKgogICAqIENvbXB1dGUgdGhlIHByb2Igb3JkZXIgcXVhbnRpbGUgb2YgYSBtYXRyaXggb3IgYSBsaXN0IHdpdGggdmFsdWVzLgogICAqIFRoZSBzZXF1ZW5jZSBpcyBzb3J0ZWQgYW5kIHRoZSBtaWRkbGUgdmFsdWUgaXMgcmV0dXJuZWQuCiAgICogU3VwcG9ydGVkIHR5cGVzIG9mIHNlcXVlbmNlIHZhbHVlcyBhcmU6IE51bWJlciwgQmlnTnVtYmVyLCBVbml0CiAgICogU3VwcG9ydGVkIHR5cGVzIG9mIHByb2JhYmlsaXR5IGFyZTogTnVtYmVyLCBCaWdOdW1iZXIKICAgKgogICAqIEluIGNhc2Ugb2YgYSAobXVsdGkgZGltZW5zaW9uYWwpIGFycmF5IG9yIG1hdHJpeCwgdGhlIHByb2Igb3JkZXIgcXVhbnRpbGUKICAgKiBvZiBhbGwgZWxlbWVudHMgd2lsbCBiZSBjYWxjdWxhdGVkLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIG1hdGgucXVhbnRpbGVTZXEoQSwgcHJvYlssIHNvcnRlZF0pCiAgICogICAgIG1hdGgucXVhbnRpbGVTZXEoQSwgW3Byb2IxLCBwcm9iMiwgLi4uXVssIHNvcnRlZF0pCiAgICogICAgIG1hdGgucXVhbnRpbGVTZXEoQSwgTlssIHNvcnRlZF0pCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgICBtYXRoLnF1YW50aWxlU2VxKFszLCAtMSwgNSwgN10sIDAuNSkgICAgICAgICAvLyByZXR1cm5zIDQKICAgKiAgICAgbWF0aC5xdWFudGlsZVNlcShbMywgLTEsIDUsIDddLCBbMS8zLCAyLzNdKSAgLy8gcmV0dXJucyBbMywgNV0KICAgKiAgICAgbWF0aC5xdWFudGlsZVNlcShbMywgLTEsIDUsIDddLCAyKSAgICAgICAgICAgLy8gcmV0dXJucyBbMywgNV0KICAgKiAgICAgbWF0aC5xdWFudGlsZVNlcShbLTEsIDMsIDUsIDddLCAwLjUsIHRydWUpICAgLy8gcmV0dXJucyA0CiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgICBtZWRpYW4sIG1lYW4sIG1pbiwgbWF4LCBzdW0sIHByb2QsIHN0ZCwgdmFyaWFuY2UKICAgKgogICAqIEBwYXJhbSB7QXJyYXksIE1hdHJpeH0gZGF0YSAgICAgICAgICAgICAgICBBIHNpbmdsZSBtYXRyaXggb3IgQXJyYXkKICAgKiBAcGFyYW0ge051bWJlciwgQmlnTnVtYmVyLCBBcnJheX0gcHJvYk9yTiAgcHJvYiBpcyB0aGUgb3JkZXIgb2YgdGhlIHF1YW50aWxlLCB3aGlsZSBOIGlzCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhbW91bnQgb2YgZXZlbmx5IGRpc3RyaWJ1dGVkIHN0ZXBzIG9mCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2JhYmlsaXRpZXM7IG9ubHkgb25lIG9mIHRoZXNlIG9wdGlvbnMgY2FuCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHByb3ZpZGVkCiAgICogQHBhcmFtIHtCb29sZWFufSBzb3J0ZWQ9ZmFsc2UgICAgICAgICAgICAgIGlzIGRhdGEgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlcgogICAqIEByZXR1cm4ge051bWJlciwgQmlnTnVtYmVyLCBVbml0LCBBcnJheX0gICBRdWFudGlsZShzKQogICAqLwogIGZ1bmN0aW9uIHF1YW50aWxlU2VxKGRhdGEsIHByb2JPck4sIHNvcnRlZCkgewogICAgdmFyIHByb2JBcnIsIGRhdGFBcnIsIG9uZTsKCiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIgfHwgYXJndW1lbnRzLmxlbmd0aCA+IDMpIHsKICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdGdW5jdGlvbiBxdWFudGlsZVNlcSByZXF1aXJlcyB0d28gb3IgdGhyZWUgcGFyYW1ldGVycycpOwogICAgfQoKICAgIGlmIChPYmplY3QoaXNbImkiIC8qIGlzQ29sbGVjdGlvbiAqL10pKGRhdGEpKSB7CiAgICAgIHNvcnRlZCA9IHNvcnRlZCB8fCBmYWxzZTsKCiAgICAgIGlmICh0eXBlb2Ygc29ydGVkID09PSAnYm9vbGVhbicpIHsKICAgICAgICBkYXRhQXJyID0gZGF0YS52YWx1ZU9mKCk7CgogICAgICAgIGlmIChPYmplY3QoaXNbInkiIC8qIGlzTnVtYmVyICovXSkocHJvYk9yTikpIHsKICAgICAgICAgIGlmIChwcm9iT3JOIDwgMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ04vcHJvYiBtdXN0IGJlIG5vbi1uZWdhdGl2ZScpOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChwcm9iT3JOIDw9IDEpIHsKICAgICAgICAgICAgLy8gcXVhbnRpbGVTZXEoW2EsIGIsIGMsIGQsIC4uLl0sIHByb2JbLHNvcnRlZF0pCiAgICAgICAgICAgIHJldHVybiBfcXVhbnRpbGVTZXEoZGF0YUFyciwgcHJvYk9yTiwgc29ydGVkKTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAocHJvYk9yTiA+IDEpIHsKICAgICAgICAgICAgLy8gcXVhbnRpbGVTZXEoW2EsIGIsIGMsIGQsIC4uLl0sIE5bLHNvcnRlZF0pCiAgICAgICAgICAgIGlmICghT2JqZWN0KHV0aWxzX251bWJlclsiaSIgLyogaXNJbnRlZ2VyICovXSkocHJvYk9yTikpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ04gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIG5QbHVzT25lID0gcHJvYk9yTiArIDE7CiAgICAgICAgICAgIHByb2JBcnIgPSBuZXcgQXJyYXkocHJvYk9yTik7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb2JPck47KSB7CiAgICAgICAgICAgICAgcHJvYkFycltpXSA9IF9xdWFudGlsZVNlcShkYXRhQXJyLCArK2kgLyBuUGx1c09uZSwgc29ydGVkKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHByb2JBcnI7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoT2JqZWN0KGlzWyJlIiAvKiBpc0JpZ051bWJlciAqL10pKHByb2JPck4pKSB7CiAgICAgICAgICB2YXIgQmlnTnVtYmVyID0gcHJvYk9yTi5jb25zdHJ1Y3RvcjsKCiAgICAgICAgICBpZiAocHJvYk9yTi5pc05lZ2F0aXZlKCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOL3Byb2IgbXVzdCBiZSBub24tbmVnYXRpdmUnKTsKICAgICAgICAgIH0KCiAgICAgICAgICBvbmUgPSBuZXcgQmlnTnVtYmVyKDEpOwoKICAgICAgICAgIGlmIChwcm9iT3JOLmx0ZShvbmUpKSB7CiAgICAgICAgICAgIC8vIHF1YW50aWxlU2VxKFthLCBiLCBjLCBkLCAuLi5dLCBwcm9iWyxzb3J0ZWRdKQogICAgICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihfcXVhbnRpbGVTZXEoZGF0YUFyciwgcHJvYk9yTiwgc29ydGVkKSk7CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKHByb2JPck4uZ3Qob25lKSkgewogICAgICAgICAgICAvLyBxdWFudGlsZVNlcShbYSwgYiwgYywgZCwgLi4uXSwgTlssc29ydGVkXSkKICAgICAgICAgICAgaWYgKCFwcm9iT3JOLmlzSW50ZWdlcigpKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7CiAgICAgICAgICAgIH0gLy8gbGFyZ2VzdCBwb3NzaWJsZSBBcnJheSBsZW5ndGggaXMgMl4zMi0xCiAgICAgICAgICAgIC8vIDJeMzIgPCAxMF4xNSwgdGh1cyBzYWZlIGNvbnZlcnNpb24gZ3VhcmFudGVlZAoKCiAgICAgICAgICAgIHZhciBpbnROID0gcHJvYk9yTi50b051bWJlcigpOwoKICAgICAgICAgICAgaWYgKGludE4gPiA0Mjk0OTY3Mjk1KSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDJeMzItMSwgYXMgdGhhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYW4gQXJyYXknKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIF9uUGx1c09uZSA9IG5ldyBCaWdOdW1iZXIoaW50TiArIDEpOwoKICAgICAgICAgICAgcHJvYkFyciA9IG5ldyBBcnJheShpbnROKTsKCiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBpbnROOykgewogICAgICAgICAgICAgIHByb2JBcnJbX2ldID0gbmV3IEJpZ051bWJlcihfcXVhbnRpbGVTZXEoZGF0YUFyciwgbmV3IEJpZ051bWJlcigrK19pKS5kaXYoX25QbHVzT25lKSwgc29ydGVkKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBwcm9iQXJyOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvYk9yTikpIHsKICAgICAgICAgIC8vIHF1YW50aWxlU2VxKFthLCBiLCBjLCBkLCAuLi5dLCBbcHJvYjEsIHByb2IyLCAuLi5dWyxzb3J0ZWRdKQogICAgICAgICAgcHJvYkFyciA9IG5ldyBBcnJheShwcm9iT3JOLmxlbmd0aCk7CgogICAgICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgcHJvYkFyci5sZW5ndGg7ICsrX2kyKSB7CiAgICAgICAgICAgIHZhciBjdXJyUHJvYiA9IHByb2JPck5bX2kyXTsKCiAgICAgICAgICAgIGlmIChPYmplY3QoaXNbInkiIC8qIGlzTnVtYmVyICovXSkoY3VyclByb2IpKSB7CiAgICAgICAgICAgICAgaWYgKGN1cnJQcm9iIDwgMCB8fCBjdXJyUHJvYiA+IDEpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvYmFiaWxpdHkgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEsIGluY2x1c2l2ZScpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChPYmplY3QoaXNbImUiIC8qIGlzQmlnTnVtYmVyICovXSkoY3VyclByb2IpKSB7CiAgICAgICAgICAgICAgb25lID0gbmV3IGN1cnJQcm9iLmNvbnN0cnVjdG9yKDEpOwoKICAgICAgICAgICAgICBpZiAoY3VyclByb2IuaXNOZWdhdGl2ZSgpIHx8IGN1cnJQcm9iLmd0KG9uZSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvYmFiaWxpdHkgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEsIGluY2x1c2l2ZScpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIHR5cGUgb2YgYXJndW1lbnQgaW4gZnVuY3Rpb24gcXVhbnRpbGVTZXEnKTsgLy8gRklYTUU6IGJlY29tZXMgcmVkdW5kYW50IHdoZW4gY29udmVydGVkIHRvIHR5cGVkLWZ1bmN0aW9uCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByb2JBcnJbX2kyXSA9IF9xdWFudGlsZVNlcShkYXRhQXJyLCBjdXJyUHJvYiwgc29ydGVkKTsKICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gcHJvYkFycjsKICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiBxdWFudGlsZVNlcScpOyAvLyBGSVhNRTogYmVjb21lcyByZWR1bmRhbnQgd2hlbiBjb252ZXJ0ZWQgdG8gdHlwZWQtZnVuY3Rpb24KICAgICAgfQoKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5leHBlY3RlZCB0eXBlIG9mIGFyZ3VtZW50IGluIGZ1bmN0aW9uIHF1YW50aWxlU2VxJyk7IC8vIEZJWE1FOiBiZWNvbWVzIHJlZHVuZGFudCB3aGVuIGNvbnZlcnRlZCB0byB0eXBlZC1mdW5jdGlvbgogICAgfQoKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiBxdWFudGlsZVNlcScpOyAvLyBGSVhNRTogYmVjb21lcyByZWR1bmRhbnQgd2hlbiBjb252ZXJ0ZWQgdG8gdHlwZWQtZnVuY3Rpb24KICB9CiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBwcm9iIG9yZGVyIHF1YW50aWxlIG9mIGFuIG4tZGltZW5zaW9uYWwgYXJyYXkuCiAgICoKICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheQogICAqIEBwYXJhbSB7TnVtYmVyLCBCaWdOdW1iZXJ9IHByb2IKICAgKiBAcGFyYW0ge0Jvb2xlYW59IHNvcnRlZAogICAqIEByZXR1cm4ge051bWJlciwgQmlnTnVtYmVyLCBVbml0fSBwcm9iIG9yZGVyIHF1YW50aWxlCiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIF9xdWFudGlsZVNlcShhcnJheSwgcHJvYiwgc29ydGVkKSB7CiAgICB2YXIgZmxhdCA9IE9iamVjdCh1dGlsc19hcnJheVsiZSIgLyogZmxhdHRlbiAqL10pKGFycmF5KTsKICAgIHZhciBsZW4gPSBmbGF0Lmxlbmd0aDsKCiAgICBpZiAobGVuID09PSAwKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBxdWFudGlsZSBvZiBhbiBlbXB0eSBzZXF1ZW5jZScpOwogICAgfQoKICAgIGlmIChPYmplY3QoaXNbInkiIC8qIGlzTnVtYmVyICovXSkocHJvYikpIHsKICAgICAgdmFyIF9pbmRleCA9IHByb2IgKiAobGVuIC0gMSk7CgogICAgICB2YXIgX2ZyYWNQYXJ0ID0gX2luZGV4ICUgMTsKCiAgICAgIGlmIChfZnJhY1BhcnQgPT09IDApIHsKICAgICAgICB2YXIgdmFsdWUgPSBzb3J0ZWQgPyBmbGF0W19pbmRleF0gOiBwYXJ0aXRpb25TZWxlY3QoZmxhdCwgX2luZGV4KTsKICAgICAgICB2YWxpZGF0ZSh2YWx1ZSk7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICB9CgogICAgICB2YXIgX2ludGVnZXJQYXJ0ID0gTWF0aC5mbG9vcihfaW5kZXgpOwoKICAgICAgdmFyIF9sZWZ0OwoKICAgICAgdmFyIF9yaWdodDsKCiAgICAgIGlmIChzb3J0ZWQpIHsKICAgICAgICBfbGVmdCA9IGZsYXRbX2ludGVnZXJQYXJ0XTsKICAgICAgICBfcmlnaHQgPSBmbGF0W19pbnRlZ2VyUGFydCArIDFdOwogICAgICB9IGVsc2UgewogICAgICAgIF9yaWdodCA9IHBhcnRpdGlvblNlbGVjdChmbGF0LCBfaW50ZWdlclBhcnQgKyAxKTsgLy8gbWF4IG9mIHBhcnRpdGlvbiBpcyBrdGggbGFyZ2VzdAoKICAgICAgICBfbGVmdCA9IGZsYXRbX2ludGVnZXJQYXJ0XTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfaW50ZWdlclBhcnQ7ICsraSkgewogICAgICAgICAgaWYgKGNvbXBhcmUoZmxhdFtpXSwgX2xlZnQpID4gMCkgewogICAgICAgICAgICBfbGVmdCA9IGZsYXRbaV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICB2YWxpZGF0ZShfbGVmdCk7CiAgICAgIHZhbGlkYXRlKF9yaWdodCk7IC8vIFEocHJvYikgPSAoMS1mKSpBW2Zsb29yKGluZGV4KV0gKyBmKkFbZmxvb3IoaW5kZXgpKzFdCgogICAgICByZXR1cm4gYWRkKG11bHRpcGx5KF9sZWZ0LCAxIC0gX2ZyYWNQYXJ0KSwgbXVsdGlwbHkoX3JpZ2h0LCBfZnJhY1BhcnQpKTsKICAgIH0gLy8gSWYgcHJvYiBpcyBhIEJpZ051bWJlcgoKCiAgICB2YXIgaW5kZXggPSBwcm9iLnRpbWVzKGxlbiAtIDEpOwoKICAgIGlmIChpbmRleC5pc0ludGVnZXIoKSkgewogICAgICBpbmRleCA9IGluZGV4LnRvTnVtYmVyKCk7CgogICAgICB2YXIgX3ZhbHVlID0gc29ydGVkID8gZmxhdFtpbmRleF0gOiBwYXJ0aXRpb25TZWxlY3QoZmxhdCwgaW5kZXgpOwoKICAgICAgdmFsaWRhdGUoX3ZhbHVlKTsKICAgICAgcmV0dXJuIF92YWx1ZTsKICAgIH0KCiAgICB2YXIgaW50ZWdlclBhcnQgPSBpbmRleC5mbG9vcigpOwogICAgdmFyIGZyYWNQYXJ0ID0gaW5kZXgubWludXMoaW50ZWdlclBhcnQpOwogICAgdmFyIGludGVnZXJQYXJ0TnVtYmVyID0gaW50ZWdlclBhcnQudG9OdW1iZXIoKTsKICAgIHZhciBsZWZ0OwogICAgdmFyIHJpZ2h0OwoKICAgIGlmIChzb3J0ZWQpIHsKICAgICAgbGVmdCA9IGZsYXRbaW50ZWdlclBhcnROdW1iZXJdOwogICAgICByaWdodCA9IGZsYXRbaW50ZWdlclBhcnROdW1iZXIgKyAxXTsKICAgIH0gZWxzZSB7CiAgICAgIHJpZ2h0ID0gcGFydGl0aW9uU2VsZWN0KGZsYXQsIGludGVnZXJQYXJ0TnVtYmVyICsgMSk7IC8vIG1heCBvZiBwYXJ0aXRpb24gaXMga3RoIGxhcmdlc3QKCiAgICAgIGxlZnQgPSBmbGF0W2ludGVnZXJQYXJ0TnVtYmVyXTsKCiAgICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IGludGVnZXJQYXJ0TnVtYmVyOyArK19pMykgewogICAgICAgIGlmIChjb21wYXJlKGZsYXRbX2kzXSwgbGVmdCkgPiAwKSB7CiAgICAgICAgICBsZWZ0ID0gZmxhdFtfaTNdOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHZhbGlkYXRlKGxlZnQpOwogICAgdmFsaWRhdGUocmlnaHQpOyAvLyBRKHByb2IpID0gKDEtZikqQVtmbG9vcihpbmRleCldICsgZipBW2Zsb29yKGluZGV4KSsxXQoKICAgIHZhciBvbmUgPSBuZXcgZnJhY1BhcnQuY29uc3RydWN0b3IoMSk7CiAgICByZXR1cm4gYWRkKG11bHRpcGx5KGxlZnQsIG9uZS5taW51cyhmcmFjUGFydCkpLCBtdWx0aXBseShyaWdodCwgZnJhY1BhcnQpKTsKICB9CiAgLyoqCiAgICogQ2hlY2sgaWYgYXJyYXkgdmFsdWUgdHlwZXMgYXJlIHZhbGlkLCB0aHJvdyBlcnJvciBvdGhlcndpc2UuCiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBVbml0fSB4CiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBVbml0fSB4CiAgICogQHByaXZhdGUKICAgKi8KCgogIHZhciB2YWxpZGF0ZSA9IHR5cGVkKHsKICAgICdudW1iZXIgfCBCaWdOdW1iZXIgfCBVbml0JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyVW5pdCh4KSB7CiAgICAgIHJldHVybiB4OwogICAgfQogIH0pOwogIHJldHVybiBxdWFudGlsZVNlcTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3RkLmpzCgp2YXIgc3RkX25hbWUgPSAnc3RkJzsKdmFyIHN0ZF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NxcnQnLCAndmFyaWFuY2UnXTsKdmFyIGNyZWF0ZVN0ZCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHN0ZF9uYW1lLCBzdGRfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIHNxcnQgPSBfcmVmLnNxcnQsCiAgICAgIHZhcmlhbmNlID0gX3JlZi52YXJpYW5jZTsKCiAgLyoqCiAgICogQ29tcHV0ZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGEgbWF0cml4IG9yIGEgIGxpc3Qgd2l0aCB2YWx1ZXMuCiAgICogVGhlIHN0YW5kYXJkIGRldmlhdGlvbnMgaXMgZGVmaW5lZCBhcyB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIHZhcmlhbmNlOgogICAqIGBzdGQoQSkgPSBzcXJ0KHZhcmlhbmNlKEEpKWAuCiAgICogSW4gY2FzZSBvZiBhIChtdWx0aSBkaW1lbnNpb25hbCkgYXJyYXkgb3IgbWF0cml4LCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uCiAgICogb3ZlciBhbGwgZWxlbWVudHMgd2lsbCBiZSBjYWxjdWxhdGVkIGJ5IGRlZmF1bHQsIHVubGVzcyBhbiBheGlzIGlzIHNwZWNpZmllZAogICAqIGluIHdoaWNoIGNhc2UgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiB3aWxsIGJlIGNvbXB1dGVkIGFsb25nIHRoYXQgYXhpcy4KICAgKgogICAqIEFkZGl0aW9uYWxseSwgaXQgaXMgcG9zc2libGUgdG8gY29tcHV0ZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIGFsb25nIHRoZSByb3dzCiAgICogb3IgY29sdW1ucyBvZiBhIG1hdHJpeCBieSBzcGVjaWZ5aW5nIHRoZSBkaW1lbnNpb24gYXMgdGhlIHNlY29uZCBhcmd1bWVudC4KICAgKgogICAqIE9wdGlvbmFsbHksIHRoZSB0eXBlIG9mIG5vcm1hbGl6YXRpb24gY2FuIGJlIHNwZWNpZmllZCBhcyB0aGUgZmluYWwKICAgKiBwYXJhbWV0ZXIuIFRoZSBwYXJhbWV0ZXIgYG5vcm1hbGl6YXRpb25gIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICoKICAgKiAtICd1bmJpYXNlZCcgKGRlZmF1bHQpIFRoZSBzdW0gb2Ygc3F1YXJlZCBlcnJvcnMgaXMgZGl2aWRlZCBieSAobiAtIDEpCiAgICogLSAndW5jb3JyZWN0ZWQnICAgICAgICBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgbgogICAqIC0gJ2JpYXNlZCcgICAgICAgICAgICAgVGhlIHN1bSBvZiBzcXVhcmVkIGVycm9ycyBpcyBkaXZpZGVkIGJ5IChuICsgMSkKICAgKgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIG1hdGguc3RkKGEsIGIsIGMsIC4uLikKICAgKiAgICAgbWF0aC5zdGQoQSkKICAgKiAgICAgbWF0aC5zdGQoQSwgbm9ybWFsaXphdGlvbikKICAgKiAgICAgbWF0aC5zdGQoQSwgZGltZW5zaW9uKQogICAqICAgICBtYXRoLnN0ZChBLCBkaW1lbnNpb24sIG5vcm1hbGl6YXRpb24pCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgICBtYXRoLnN0ZCgyLCA0LCA2KSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMgogICAqICAgICBtYXRoLnN0ZChbMiwgNCwgNiwgOF0pICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMi41ODE5ODg4OTc0NzE2MTEKICAgKiAgICAgbWF0aC5zdGQoWzIsIDQsIDYsIDhdLCAndW5jb3JyZWN0ZWQnKSAvLyByZXR1cm5zIDIuMjM2MDY3OTc3NDk5NzkKICAgKiAgICAgbWF0aC5zdGQoWzIsIDQsIDYsIDhdLCAnYmlhc2VkJykgICAgICAvLyByZXR1cm5zIDIKICAgKgogICAqICAgICBtYXRoLnN0ZChbWzEsIDIsIDNdLCBbNCwgNSwgNl1dKSAgICAgIC8vIHJldHVybnMgMS44NzA4Mjg2OTMzODY5NzA3CiAgICogICAgIG1hdGguc3RkKFtbMSwgMiwgM10sIFs0LCA2LCA4XV0sIDApICAgIC8vIHJldHVybnMgWzIuMTIxMzIwMzQzNTU5NjQyNCwgMi44Mjg0MjcxMjQ3NDYxOTAzLCAzLjUzNTUzMzkwNTkzMjczNzhdCiAgICogICAgIG1hdGguc3RkKFtbMSwgMiwgM10sIFs0LCA2LCA4XV0sIDEpICAgIC8vIHJldHVybnMgWzEsIDJdCiAgICogICAgIG1hdGguc3RkKFtbMSwgMiwgM10sIFs0LCA2LCA4XV0sIDEsICdiaWFzZWQnKSAvLyByZXR1cm5zIFswLjcwNzEwNjc4MTE4NjU0NzYsIDEuNDE0MjEzNTYyMzczMDk1MV0KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgbWVhbiwgbWVkaWFuLCBtYXgsIG1pbiwgcHJvZCwgc3VtLCB2YXJpYW5jZQogICAqCiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gYXJyYXkKICAgKiAgICAgICAgICAgICAgICAgICAgICAgIEEgc2luZ2xlIG1hdHJpeCBvciBvciBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzCiAgICogQHBhcmFtIHtzdHJpbmd9IFtub3JtYWxpemF0aW9uPSd1bmJpYXNlZCddCiAgICogICAgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIGhvdyB0byBub3JtYWxpemUgdGhlIHZhcmlhbmNlLgogICAqICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlICd1bmJpYXNlZCcgKGRlZmF1bHQpLCAndW5jb3JyZWN0ZWQnLCBvciAnYmlhc2VkJy4KICAgKiBAcGFyYW0gZGltZW5zaW9uIHtudW1iZXIgfCBCaWdOdW1iZXJ9CiAgICogICAgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIHRoZSBheGlzIHRvIGNvbXB1dGUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBmb3IgYSBtYXRyaXgKICAgKiBAcmV0dXJuIHsqfSBUaGUgc3RhbmRhcmQgZGV2aWF0aW9uCiAgICovCiAgcmV0dXJuIHR5cGVkKHN0ZF9uYW1lLCB7CiAgICAvLyBzdGQoW2EsIGIsIGMsIGQsIC4uLl0pCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBfc3RkLAogICAgLy8gc3RkKFthLCBiLCBjLCBkLCAuLi5dLCBub3JtYWxpemF0aW9uKQogICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcnOiBfc3RkLAogICAgLy8gc3RkKFthLCBiLCBjLCBjLCAuLi5dLCBkaW0pCiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IF9zdGQsCiAgICAvLyBzdGQoW2EsIGIsIGMsIGMsIC4uLl0sIGRpbSwgbm9ybWFsaXphdGlvbikKICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyLCBzdHJpbmcnOiBfc3RkLAogICAgLy8gc3RkKGEsIGIsIGMsIGQsIC4uLikKICAgICcuLi4nOiBmdW5jdGlvbiBfKGFyZ3MpIHsKICAgICAgcmV0dXJuIF9zdGQoYXJncyk7CiAgICB9CiAgfSk7CgogIGZ1bmN0aW9uIF9zdGQoYXJyYXksIG5vcm1hbGl6YXRpb24pIHsKICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHsKICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdGdW5jdGlvbiBzdGQgcmVxdWlyZXMgb25lIG9yIG1vcmUgcGFyYW1ldGVycyAoMCBwcm92aWRlZCknKTsKICAgIH0KCiAgICB0cnkgewogICAgICByZXR1cm4gc3FydCh2YXJpYW5jZS5hcHBseShudWxsLCBhcmd1bWVudHMpKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVHlwZUVycm9yICYmIGVyci5tZXNzYWdlLmluZGV4T2YoJyB2YXJpYW5jZScpICE9PSAtMSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZXJyLm1lc3NhZ2UucmVwbGFjZSgnIHZhcmlhbmNlJywgJyBzdGQnKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgZXJyOwogICAgICB9CiAgICB9CiAgfQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdXRpbHMvcHJvZHVjdC5qcwovKiogQHBhcmFtIHtudW1iZXJ9IGkKICogIEBwYXJhbSB7bnVtYmVyfSBuCiAqICBAcmV0dXJucyB7bnVtYmVyfSBwcm9kdWN0IG9mIGkgdG8gbgogKi8KZnVuY3Rpb24gcHJvZHVjdF9wcm9kdWN0KGksIG4pIHsKICBpZiAobiA8IGkpIHsKICAgIHJldHVybiAxOwogIH0KCiAgaWYgKG4gPT09IGkpIHsKICAgIHJldHVybiBuOwogIH0KCiAgdmFyIGhhbGYgPSBuICsgaSA+PiAxOyAvLyBkaXZpZGUgKG4gKyBpKSBieSAyIGFuZCB0cnVuY2F0ZSB0byBpbnRlZ2VyCgogIHJldHVybiBwcm9kdWN0X3Byb2R1Y3QoaSwgaGFsZikgKiBwcm9kdWN0X3Byb2R1Y3QoaGFsZiArIDEsIG4pOwp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3BsYWluL251bWJlci9jb21iaW5hdGlvbnMuanMKCgpmdW5jdGlvbiBjb21iaW5hdGlvbnNOdW1iZXIobiwgaykgewogIGlmICghT2JqZWN0KHV0aWxzX251bWJlclsiaSIgLyogaXNJbnRlZ2VyICovXSkobikgfHwgbiA8IDApIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Bvc2l0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gY29tYmluYXRpb25zJyk7CiAgfQoKICBpZiAoIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKGspIHx8IGsgPCAwKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGNvbWJpbmF0aW9ucycpOwogIH0KCiAgaWYgKGsgPiBuKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG4nKTsKICB9CgogIHZhciBuTWludXNrID0gbiAtIGs7CiAgdmFyIHByb2RyYW5nZTsKCiAgaWYgKGsgPCBuTWludXNrKSB7CiAgICBwcm9kcmFuZ2UgPSBwcm9kdWN0X3Byb2R1Y3Qobk1pbnVzayArIDEsIG4pOwogICAgcmV0dXJuIHByb2RyYW5nZSAvIHByb2R1Y3RfcHJvZHVjdCgxLCBrKTsKICB9CgogIHByb2RyYW5nZSA9IHByb2R1Y3RfcHJvZHVjdChrICsgMSwgbik7CiAgcmV0dXJuIHByb2RyYW5nZSAvIHByb2R1Y3RfcHJvZHVjdCgxLCBuTWludXNrKTsKfQpjb21iaW5hdGlvbnNOdW1iZXIuc2lnbmF0dXJlID0gJ251bWJlciwgbnVtYmVyJzsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vcHJvYmFiaWxpdHkvY29tYmluYXRpb25zLmpzCgoKdmFyIGNvbWJpbmF0aW9uc19uYW1lID0gJ2NvbWJpbmF0aW9ucyc7CnZhciBjb21iaW5hdGlvbnNfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddOwp2YXIgY3JlYXRlQ29tYmluYXRpb25zID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoY29tYmluYXRpb25zX25hbWUsIGNvbWJpbmF0aW9uc19kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDsKCiAgLyoqCiAgICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIHdheXMgb2YgcGlja2luZyBga2AgdW5vcmRlcmVkIG91dGNvbWVzIGZyb20gYG5gCiAgICogcG9zc2liaWxpdGllcy4KICAgKgogICAqIENvbWJpbmF0aW9ucyBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLgogICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbi4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBtYXRoLmNvbWJpbmF0aW9ucyhuLCBrKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmNvbWJpbmF0aW9ucyg3LCA1KSAvLyByZXR1cm5zIDIxCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGNvbWJpbmF0aW9uc1dpdGhSZXAsIHBlcm11dGF0aW9ucywgZmFjdG9yaWFsCiAgICoKICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gbiAgICBUb3RhbCBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc2V0CiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IGsgICAgTnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHN1YnNldAogICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gICAgIE51bWJlciBvZiBwb3NzaWJsZSBjb21iaW5hdGlvbnMuCiAgICovCiAgcmV0dXJuIHR5cGVkKGNvbWJpbmF0aW9uc19uYW1lLCB7CiAgICAnbnVtYmVyLCBudW1iZXInOiBjb21iaW5hdGlvbnNOdW1iZXIsCiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIobiwgaykgewogICAgICB2YXIgQmlnTnVtYmVyID0gbi5jb25zdHJ1Y3RvcjsKICAgICAgdmFyIHJlc3VsdCwgaTsKICAgICAgdmFyIG5NaW51c2sgPSBuLm1pbnVzKGspOwogICAgICB2YXIgb25lID0gbmV3IEJpZ051bWJlcigxKTsKCiAgICAgIGlmICghaXNQb3NpdGl2ZUludGVnZXIobikgfHwgIWlzUG9zaXRpdmVJbnRlZ2VyKGspKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnMnKTsKICAgICAgfQoKICAgICAgaWYgKGsuZ3QobikpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrIG11c3QgYmUgbGVzcyB0aGFuIG4gaW4gZnVuY3Rpb24gY29tYmluYXRpb25zJyk7CiAgICAgIH0KCiAgICAgIHJlc3VsdCA9IG9uZTsKCiAgICAgIGlmIChrLmx0KG5NaW51c2spKSB7CiAgICAgICAgZm9yIChpID0gb25lOyBpLmx0ZShuTWludXNrKTsgaSA9IGkucGx1cyhvbmUpKSB7CiAgICAgICAgICByZXN1bHQgPSByZXN1bHQudGltZXMoay5wbHVzKGkpKS5kaXZpZGVkQnkoaSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGZvciAoaSA9IG9uZTsgaS5sdGUoayk7IGkgPSBpLnBsdXMob25lKSkgewogICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRpbWVzKG5NaW51c2sucGx1cyhpKSkuZGl2aWRlZEJ5KGkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0gLy8gVE9ETzogaW1wbGVtZW50IHN1cHBvcnQgZm9yIGNvbGxlY3Rpb24gaW4gY29tYmluYXRpb25zCgogIH0pOwp9KTsKLyoqCiAqIFRlc3Qgd2hldGhlciBCaWdOdW1iZXIgbiBpcyBhIHBvc2l0aXZlIGludGVnZXIKICogQHBhcmFtIHtCaWdOdW1iZXJ9IG4KICogQHJldHVybnMge2Jvb2xlYW59IGlzUG9zaXRpdmVJbnRlZ2VyCiAqLwoKZnVuY3Rpb24gaXNQb3NpdGl2ZUludGVnZXIobikgewogIHJldHVybiBuLmlzSW50ZWdlcigpICYmIG4uZ3RlKDApOwp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1dpdGhSZXAuanMKCgoKdmFyIGNvbWJpbmF0aW9uc1dpdGhSZXBfbmFtZSA9ICdjb21iaW5hdGlvbnNXaXRoUmVwJzsKdmFyIGNvbWJpbmF0aW9uc1dpdGhSZXBfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddOwp2YXIgY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGNvbWJpbmF0aW9uc1dpdGhSZXBfbmFtZSwgY29tYmluYXRpb25zV2l0aFJlcF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDsKCiAgLyoqCiAgICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIHdheXMgb2YgcGlja2luZyBga2AgdW5vcmRlcmVkIG91dGNvbWVzIGZyb20gYG5gCiAgICogcG9zc2liaWxpdGllcywgYWxsb3dpbmcgaW5kaXZpZHVhbCBvdXRjb21lcyB0byBiZSByZXBlYXRlZCBtb3JlIHRoYW4gb25jZS4KICAgKgogICAqIENvbWJpbmF0aW9uc1dpdGhSZXAgb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy4KICAgKiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBrIDw9IG4gKyBrIC0xLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIG1hdGguY29tYmluYXRpb25zV2l0aFJlcChuLCBrKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmNvbWJpbmF0aW9uc1dpdGhSZXAoNywgNSkgLy8gcmV0dXJucyA0NjIKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgY29tYmluYXRpb25zLCBwZXJtdXRhdGlvbnMsIGZhY3RvcmlhbAogICAqCiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IG4gICAgVG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNldAogICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBrICAgIE51bWJlciBvZiBvYmplY3RzIGluIHRoZSBzdWJzZXQKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXJ9ICAgICBOdW1iZXIgb2YgcG9zc2libGUgY29tYmluYXRpb25zIHdpdGggcmVwbGFjZW1lbnQuCiAgICovCiAgcmV0dXJuIHR5cGVkKGNvbWJpbmF0aW9uc1dpdGhSZXBfbmFtZSwgewogICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKG4sIGspIHsKICAgICAgaWYgKCFPYmplY3QodXRpbHNfbnVtYmVyWyJpIiAvKiBpc0ludGVnZXIgKi9dKShuKSB8fCBuIDwgMCkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Bvc2l0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gY29tYmluYXRpb25zV2l0aFJlcCcpOwogICAgICB9CgogICAgICBpZiAoIU9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKGspIHx8IGsgPCAwKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnNXaXRoUmVwJyk7CiAgICAgIH0KCiAgICAgIGlmIChuIDwgMSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2sgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbiArIGsgLSAxJyk7CiAgICAgIH0KCiAgICAgIGlmIChrIDwgbiAtIDEpIHsKICAgICAgICB2YXIgX3Byb2RyYW5nZSA9IHByb2R1Y3RfcHJvZHVjdChuLCBuICsgayAtIDEpOwoKICAgICAgICByZXR1cm4gX3Byb2RyYW5nZSAvIHByb2R1Y3RfcHJvZHVjdCgxLCBrKTsKICAgICAgfQoKICAgICAgdmFyIHByb2RyYW5nZSA9IHByb2R1Y3RfcHJvZHVjdChrICsgMSwgbiArIGsgLSAxKTsKICAgICAgcmV0dXJuIHByb2RyYW5nZSAvIHByb2R1Y3RfcHJvZHVjdCgxLCBuIC0gMSk7CiAgICB9LAogICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKG4sIGspIHsKICAgICAgdmFyIEJpZ051bWJlciA9IG4uY29uc3RydWN0b3I7CiAgICAgIHZhciByZXN1bHQsIGk7CiAgICAgIHZhciBvbmUgPSBuZXcgQmlnTnVtYmVyKDEpOwogICAgICB2YXIgbk1pbnVzT25lID0gbi5taW51cyhvbmUpOwoKICAgICAgaWYgKCFjb21iaW5hdGlvbnNXaXRoUmVwX2lzUG9zaXRpdmVJbnRlZ2VyKG4pIHx8ICFjb21iaW5hdGlvbnNXaXRoUmVwX2lzUG9zaXRpdmVJbnRlZ2VyKGspKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnNXaXRoUmVwJyk7CiAgICAgIH0KCiAgICAgIGlmIChuLmx0KG9uZSkpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG4gKyBrIC0gMSBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnNXaXRoUmVwJyk7CiAgICAgIH0KCiAgICAgIHJlc3VsdCA9IG9uZTsKCiAgICAgIGlmIChrLmx0KG5NaW51c09uZSkpIHsKICAgICAgICBmb3IgKGkgPSBvbmU7IGkubHRlKG5NaW51c09uZSk7IGkgPSBpLnBsdXMob25lKSkgewogICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRpbWVzKGsucGx1cyhpKSkuZGl2aWRlZEJ5KGkpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBmb3IgKGkgPSBvbmU7IGkubHRlKGspOyBpID0gaS5wbHVzKG9uZSkpIHsKICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC50aW1lcyhuTWludXNPbmUucGx1cyhpKSkuZGl2aWRlZEJ5KGkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICB9KTsKfSk7Ci8qKgogKiBUZXN0IHdoZXRoZXIgQmlnTnVtYmVyIG4gaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyCiAqIEBwYXJhbSB7QmlnTnVtYmVyfSBuCiAqIEByZXR1cm5zIHtib29sZWFufSBpc1Bvc2l0aXZlSW50ZWdlcgogKi8KCmZ1bmN0aW9uIGNvbWJpbmF0aW9uc1dpdGhSZXBfaXNQb3NpdGl2ZUludGVnZXIobikgewogIHJldHVybiBuLmlzSW50ZWdlcigpICYmIG4uZ3RlKDApOwp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3BsYWluL251bWJlci9wcm9iYWJpbGl0eS5qcwoKCmZ1bmN0aW9uIGdhbW1hTnVtYmVyKG4pIHsKICB2YXIgeDsKCiAgaWYgKE9iamVjdCh1dGlsc19udW1iZXJbImkiIC8qIGlzSW50ZWdlciAqL10pKG4pKSB7CiAgICBpZiAobiA8PSAwKSB7CiAgICAgIHJldHVybiBpc0Zpbml0ZShuKSA/IEluZmluaXR5IDogTmFOOwogICAgfQoKICAgIGlmIChuID4gMTcxKSB7CiAgICAgIHJldHVybiBJbmZpbml0eTsgLy8gV2lsbCBvdmVyZmxvdwogICAgfQoKICAgIHJldHVybiBwcm9kdWN0X3Byb2R1Y3QoMSwgbiAtIDEpOwogIH0KCiAgaWYgKG4gPCAwLjUpIHsKICAgIHJldHVybiBNYXRoLlBJIC8gKE1hdGguc2luKE1hdGguUEkgKiBuKSAqIGdhbW1hTnVtYmVyKDEgLSBuKSk7CiAgfQoKICBpZiAobiA+PSAxNzEuMzUpIHsKICAgIHJldHVybiBJbmZpbml0eTsgLy8gd2lsbCBvdmVyZmxvdwogIH0KCiAgaWYgKG4gPiA4NS4wKSB7CiAgICAvLyBFeHRlbmRlZCBTdGlybGluZyBBcHByb3gKICAgIHZhciB0d29OID0gbiAqIG47CiAgICB2YXIgdGhyZWVOID0gdHdvTiAqIG47CiAgICB2YXIgZm91ck4gPSB0aHJlZU4gKiBuOwogICAgdmFyIGZpdmVOID0gZm91ck4gKiBuOwogICAgcmV0dXJuIE1hdGguc3FydCgyICogTWF0aC5QSSAvIG4pICogTWF0aC5wb3cobiAvIE1hdGguRSwgbikgKiAoMSArIDEgLyAoMTIgKiBuKSArIDEgLyAoMjg4ICogdHdvTikgLSAxMzkgLyAoNTE4NDAgKiB0aHJlZU4pIC0gNTcxIC8gKDI0ODgzMjAgKiBmb3VyTikgKyAxNjM4NzkgLyAoMjA5MDE4ODgwICogZml2ZU4pICsgNTI0NjgxOSAvICg3NTI0Njc5NjgwMCAqIGZpdmVOICogbikpOwogIH0KCiAgLS1uOwogIHggPSBnYW1tYVBbMF07CgogIGZvciAodmFyIGkgPSAxOyBpIDwgZ2FtbWFQLmxlbmd0aDsgKytpKSB7CiAgICB4ICs9IGdhbW1hUFtpXSAvIChuICsgaSk7CiAgfQoKICB2YXIgdCA9IG4gKyBnYW1tYUcgKyAwLjU7CiAgcmV0dXJuIE1hdGguc3FydCgyICogTWF0aC5QSSkgKiBNYXRoLnBvdyh0LCBuICsgMC41KSAqIE1hdGguZXhwKC10KSAqIHg7Cn0KZ2FtbWFOdW1iZXIuc2lnbmF0dXJlID0gJ251bWJlcic7IC8vIFRPRE86IGNvbW1lbnQgb24gdGhlIHZhcmlhYmxlcyBnIGFuZCBwCgp2YXIgZ2FtbWFHID0gNC43NDIxODc1Owp2YXIgZ2FtbWFQID0gWzAuOTk5OTk5OTk5OTk5OTk3MDkxODIsIDU3LjE1NjIzNTY2NTg2MjkyMzUxNywgLTU5LjU5Nzk2MDM1NTQ3NTQ5MTI0OCwgMTQuMTM2MDk3OTc0NzQxNzQ3MTc0LCAtMC40OTE5MTM4MTYwOTc2MjAxOTk3OCwgMC4zMzk5NDY0OTk4NDgxMTg4ODY5OWUtNCwgMC40NjUyMzYyODkyNzA0ODU3NTY2NWUtNCwgLTAuOTgzNzQ0NzUzMDQ4Nzk1NjQ2NzdlLTQsIDAuMTU4MDg4NzAzMjI0OTEyNDg4ODRlLTMsIC0wLjIxMDI2NDQ0MTcyNDEwNDg4MzE5ZS0zLCAwLjIxNzQzOTYxODExNTIxMjY0MzIwZS0zLCAtMC4xNjQzMTgxMDY1MzY3NjM4OTAyMmUtMywgMC44NDQxODIyMzk4Mzg1Mjc0MzI5M2UtNCwgLTAuMjYxOTA4Mzg0MDE1ODE0MDg2NzBlLTQsIDAuMzY4OTkxODI2NTk1MzE2MjI3MDRlLTVdOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9wcm9iYWJpbGl0eS9nYW1tYS5qcwoKCgp2YXIgZ2FtbWFfbmFtZSA9ICdnYW1tYSc7CnZhciBnYW1tYV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtdWx0aXBseVNjYWxhcicsICdwb3cnLCAnQmlnTnVtYmVyJywgJ0NvbXBsZXgnXTsKdmFyIGNyZWF0ZUdhbW1hID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoZ2FtbWFfbmFtZSwgZ2FtbWFfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLAogICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsCiAgICAgIHBvdyA9IF9yZWYucG93LAogICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXIsCiAgICAgIF9Db21wbGV4ID0gX3JlZi5Db21wbGV4OwoKICAvKioKICAgKiBDb21wdXRlIHRoZSBnYW1tYSBmdW5jdGlvbiBvZiBhIHZhbHVlIHVzaW5nIExhbmN6b3MgYXBwcm94aW1hdGlvbiBmb3IKICAgKiBzbWFsbCB2YWx1ZXMsIGFuZCBhbiBleHRlbmRlZCBTdGlybGluZyBhcHByb3hpbWF0aW9uIGZvciBsYXJnZSB2YWx1ZXMuCiAgICoKICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5nYW1tYShuKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmdhbW1hKDUpICAgICAgIC8vIHJldHVybnMgMjQKICAgKiAgICBtYXRoLmdhbW1hKC0wLjUpICAgIC8vIHJldHVybnMgLTMuNTQ0OTA3NzAxODExMDMzNQogICAqICAgIG1hdGguZ2FtbWEobWF0aC5pKSAgLy8gcmV0dXJucyAtMC4xNTQ5NDk4MjgzMDE4MDk3MyAtIDAuNDk4MDE1NjY4MTE4MzU1OTZpCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGNvbWJpbmF0aW9ucywgZmFjdG9yaWFsLCBwZXJtdXRhdGlvbnMKICAgKgogICAqIEBwYXJhbSB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IG4gICBBIHJlYWwgb3IgY29tcGxleCBudW1iZXIKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gICAgVGhlIGdhbW1hIG9mIGBuYAogICAqLwogIHZhciBnYW1tYSA9IHR5cGVkKGdhbW1hX25hbWUsIHsKICAgIG51bWJlcjogZ2FtbWFOdW1iZXIsCiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KG4pIHsKICAgICAgaWYgKG4uaW0gPT09IDApIHsKICAgICAgICByZXR1cm4gZ2FtbWEobi5yZSk7CiAgICAgIH0KCiAgICAgIG4gPSBuZXcgX0NvbXBsZXgobi5yZSAtIDEsIG4uaW0pOwogICAgICB2YXIgeCA9IG5ldyBfQ29tcGxleChnYW1tYVBbMF0sIDApOwoKICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBnYW1tYVAubGVuZ3RoOyArK2kpIHsKICAgICAgICB2YXIgcmVhbCA9IG4ucmUgKyBpOyAvLyB4ICs9IHBbaV0vKG4raSkKCiAgICAgICAgdmFyIGRlbiA9IHJlYWwgKiByZWFsICsgbi5pbSAqIG4uaW07CgogICAgICAgIGlmIChkZW4gIT09IDApIHsKICAgICAgICAgIHgucmUgKz0gZ2FtbWFQW2ldICogcmVhbCAvIGRlbjsKICAgICAgICAgIHguaW0gKz0gLShnYW1tYVBbaV0gKiBuLmltKSAvIGRlbjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgeC5yZSA9IGdhbW1hUFtpXSA8IDAgPyAtSW5maW5pdHkgOiBJbmZpbml0eTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZhciB0ID0gbmV3IF9Db21wbGV4KG4ucmUgKyBnYW1tYUcgKyAwLjUsIG4uaW0pOwogICAgICB2YXIgdHdvUGlTcXJ0ID0gTWF0aC5zcXJ0KDIgKiBNYXRoLlBJKTsKICAgICAgbi5yZSArPSAwLjU7CiAgICAgIHZhciByZXN1bHQgPSBwb3codCwgbik7CgogICAgICBpZiAocmVzdWx0LmltID09PSAwKSB7CiAgICAgICAgLy8gc3FydCgyKlBJKSpyZXN1bHQKICAgICAgICByZXN1bHQucmUgKj0gdHdvUGlTcXJ0OwogICAgICB9IGVsc2UgaWYgKHJlc3VsdC5yZSA9PT0gMCkgewogICAgICAgIHJlc3VsdC5pbSAqPSB0d29QaVNxcnQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0LnJlICo9IHR3b1BpU3FydDsKICAgICAgICByZXN1bHQuaW0gKj0gdHdvUGlTcXJ0OwogICAgICB9CgogICAgICB2YXIgciA9IE1hdGguZXhwKC10LnJlKTsgLy8gZXhwKC10KQoKICAgICAgdC5yZSA9IHIgKiBNYXRoLmNvcygtdC5pbSk7CiAgICAgIHQuaW0gPSByICogTWF0aC5zaW4oLXQuaW0pOwogICAgICByZXR1cm4gbXVsdGlwbHlTY2FsYXIobXVsdGlwbHlTY2FsYXIocmVzdWx0LCB0KSwgeCk7CiAgICB9LAogICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIobikgewogICAgICBpZiAobi5pc0ludGVnZXIoKSkgewogICAgICAgIHJldHVybiBuLmlzTmVnYXRpdmUoKSB8fCBuLmlzWmVybygpID8gbmV3IF9CaWdOdW1iZXIoSW5maW5pdHkpIDogYmlnRmFjdG9yaWFsKG4ubWludXMoMSkpOwogICAgICB9CgogICAgICBpZiAoIW4uaXNGaW5pdGUoKSkgewogICAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcihuLmlzTmVnYXRpdmUoKSA/IE5hTiA6IEluZmluaXR5KTsKICAgICAgfQoKICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VyIEJpZ051bWJlciBleHBlY3RlZCcpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KG4pIHsKICAgICAgcmV0dXJuIGRlZXBNYXAobiwgZ2FtbWEpOwogICAgfQogIH0pOwogIC8qKgogICAqIENhbGN1bGF0ZSBmYWN0b3JpYWwgZm9yIGEgQmlnTnVtYmVyCiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IG4KICAgKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHRoZSBmYWN0b3JpYWwgb2YgbgogICAqLwoKICBmdW5jdGlvbiBiaWdGYWN0b3JpYWwobikgewogICAgaWYgKG4gPCA4KSB7CiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcihbMSwgMSwgMiwgNiwgMjQsIDEyMCwgNzIwLCA1MDQwXVtuXSk7CiAgICB9CgogICAgdmFyIHByZWNpc2lvbiA9IGNvbmZpZy5wcmVjaXNpb24gKyAoTWF0aC5sb2cobi50b051bWJlcigpKSB8IDApOwoKICAgIHZhciBCaWcgPSBfQmlnTnVtYmVyLmNsb25lKHsKICAgICAgcHJlY2lzaW9uOiBwcmVjaXNpb24KICAgIH0pOwoKICAgIGlmIChuICUgMiA9PT0gMSkgewogICAgICByZXR1cm4gbi50aW1lcyhiaWdGYWN0b3JpYWwobmV3IF9CaWdOdW1iZXIobiAtIDEpKSk7CiAgICB9CgogICAgdmFyIHAgPSBuOwogICAgdmFyIHByb2QgPSBuZXcgQmlnKG4pOwogICAgdmFyIHN1bSA9IG4udG9OdW1iZXIoKTsKCiAgICB3aGlsZSAocCA+IDIpIHsKICAgICAgcCAtPSAyOwogICAgICBzdW0gKz0gcDsKICAgICAgcHJvZCA9IHByb2QudGltZXMoc3VtKTsKICAgIH0KCiAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIocHJvZC50b1ByZWNpc2lvbihfQmlnTnVtYmVyLnByZWNpc2lvbikpOwogIH0KCiAgcmV0dXJuIGdhbW1hOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vcHJvYmFiaWxpdHkvZmFjdG9yaWFsLmpzCgoKdmFyIGZhY3RvcmlhbF9uYW1lID0gJ2ZhY3RvcmlhbCc7CnZhciBmYWN0b3JpYWxfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdnYW1tYSddOwp2YXIgY3JlYXRlRmFjdG9yaWFsID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoZmFjdG9yaWFsX25hbWUsIGZhY3RvcmlhbF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgZ2FtbWEgPSBfcmVmLmdhbW1hOwoKICAvKioKICAgKiBDb21wdXRlIHRoZSBmYWN0b3JpYWwgb2YgYSB2YWx1ZQogICAqCiAgICogRmFjdG9yaWFsIG9ubHkgc3VwcG9ydHMgYW4gaW50ZWdlciB2YWx1ZSBhcyBhcmd1bWVudC4KICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5mYWN0b3JpYWwobikKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgbWF0aC5mYWN0b3JpYWwoNSkgICAgLy8gcmV0dXJucyAxMjAKICAgKiAgICBtYXRoLmZhY3RvcmlhbCgzKSAgICAvLyByZXR1cm5zIDYKICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgY29tYmluYXRpb25zLCBjb21iaW5hdGlvbnNXaXRoUmVwLCBnYW1tYSwgcGVybXV0YXRpb25zCiAgICoKICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBuICAgQW4gaW50ZWdlciBudW1iZXIKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gICAgVGhlIGZhY3RvcmlhbCBvZiBgbmAKICAgKi8KICB2YXIgZmFjdG9yaWFsID0gdHlwZWQoZmFjdG9yaWFsX25hbWUsIHsKICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKG4pIHsKICAgICAgaWYgKG4gPCAwKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZScpOwogICAgICB9CgogICAgICByZXR1cm4gZ2FtbWEobiArIDEpOwogICAgfSwKICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKG4pIHsKICAgICAgaWYgKG4uaXNOZWdhdGl2ZSgpKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZScpOwogICAgICB9CgogICAgICByZXR1cm4gZ2FtbWEobi5wbHVzKDEpKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChuKSB7CiAgICAgIHJldHVybiBkZWVwTWFwKG4sIGZhY3RvcmlhbCk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGZhY3RvcmlhbDsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2tsZGl2ZXJnZW5jZS5qcwoKdmFyIGtsZGl2ZXJnZW5jZV9uYW1lID0gJ2tsZGl2ZXJnZW5jZSc7CnZhciBrbGRpdmVyZ2VuY2VfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZGl2aWRlJywgJ3N1bScsICdtdWx0aXBseScsICdkb3REaXZpZGUnLCAnbG9nJywgJ2lzTnVtZXJpYyddOwp2YXIgY3JlYXRlS2xkaXZlcmdlbmNlID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoa2xkaXZlcmdlbmNlX25hbWUsIGtsZGl2ZXJnZW5jZV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLAogICAgICBzdW0gPSBfcmVmLnN1bSwKICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LAogICAgICBkb3REaXZpZGUgPSBfcmVmLmRvdERpdmlkZSwKICAgICAgbG9nID0gX3JlZi5sb2csCiAgICAgIGlzTnVtZXJpYyA9IF9yZWYuaXNOdW1lcmljOwoKICAvKioKICAgICAqIENhbGN1bGF0ZSB0aGUgS3VsbGJhY2stTGVpYmxlciAoS0wpIGRpdmVyZ2VuY2UgIGJldHdlZW4gdHdvIGRpc3RyaWJ1dGlvbnMKICAgICAqCiAgICAgKiBTeW50YXg6CiAgICAgKgogICAgICogICAgIG1hdGgua2xkaXZlcmdlbmNlKHgsIHkpCiAgICAgKgogICAgICogRXhhbXBsZXM6CiAgICAgKgogICAgICogICAgIG1hdGgua2xkaXZlcmdlbmNlKFswLjcsMC41LDAuNF0sIFswLjIsMC45LDAuNV0pICAgLy9yZXR1cm5zIDAuMjQzNzY2OTg3NzMxMjExNTMKICAgICAqCiAgICAgKgogICAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHEgICAgRmlyc3QgdmVjdG9yCiAgICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0gcCAgICBTZWNvbmQgdmVjdG9yCiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9ICAgICAgICAgICAgICBSZXR1cm5zIGRpc3RhbmNlIGJldHdlZW4gcSBhbmQgcAogICAgICovCiAgcmV0dXJuIHR5cGVkKGtsZGl2ZXJnZW5jZV9uYW1lLCB7CiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheShxLCBwKSB7CiAgICAgIHJldHVybiBfa2xkaXYobWF0cml4KHEpLCBtYXRyaXgocCkpOwogICAgfSwKICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkocSwgcCkgewogICAgICByZXR1cm4gX2tsZGl2KHEsIG1hdHJpeChwKSk7CiAgICB9LAogICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChxLCBwKSB7CiAgICAgIHJldHVybiBfa2xkaXYobWF0cml4KHEpLCBwKTsKICAgIH0sCiAgICAnTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXgocSwgcCkgewogICAgICByZXR1cm4gX2tsZGl2KHEsIHApOwogICAgfQogIH0pOwoKICBmdW5jdGlvbiBfa2xkaXYocSwgcCkgewogICAgdmFyIHBsZW5ndGggPSBwLnNpemUoKS5sZW5ndGg7CiAgICB2YXIgcWxlbmd0aCA9IHEuc2l6ZSgpLmxlbmd0aDsKCiAgICBpZiAocGxlbmd0aCA+IDEpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaXJzdCBvYmplY3QgbXVzdCBiZSBvbmUgZGltZW5zaW9uYWwnKTsKICAgIH0KCiAgICBpZiAocWxlbmd0aCA+IDEpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZWNvbmQgb2JqZWN0IG11c3QgYmUgb25lIGRpbWVuc2lvbmFsJyk7CiAgICB9CgogICAgaWYgKHBsZW5ndGggIT09IHFsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdMZW5ndGggb2YgdHdvIHZlY3RvcnMgbXVzdCBiZSBlcXVhbCcpOwogICAgfSAvLyBCZWZvcmUgY2FsY3VsYXRpb24sIGFwcGx5IG5vcm1hbGl6YXRpb24KCgogICAgdmFyIHN1bXEgPSBzdW0ocSk7CgogICAgaWYgKHN1bXEgPT09IDApIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdW0gb2YgZWxlbWVudHMgaW4gZmlyc3Qgb2JqZWN0IG11c3QgYmUgbm9uIHplcm8nKTsKICAgIH0KCiAgICB2YXIgc3VtcCA9IHN1bShwKTsKCiAgICBpZiAoc3VtcCA9PT0gMCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1bSBvZiBlbGVtZW50cyBpbiBzZWNvbmQgb2JqZWN0IG11c3QgYmUgbm9uIHplcm8nKTsKICAgIH0KCiAgICB2YXIgcW5vcm0gPSBkaXZpZGUocSwgc3VtKHEpKTsKICAgIHZhciBwbm9ybSA9IGRpdmlkZShwLCBzdW0ocCkpOwogICAgdmFyIHJlc3VsdCA9IHN1bShtdWx0aXBseShxbm9ybSwgbG9nKGRvdERpdmlkZShxbm9ybSwgcG5vcm0pKSkpOwoKICAgIGlmIChpc051bWVyaWMocmVzdWx0KSkgewogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIE51bWJlci5OYU47CiAgICB9CiAgfQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vcHJvYmFiaWxpdHkvbXVsdGlub21pYWwuanMKCgp2YXIgbXVsdGlub21pYWxfbmFtZSA9ICdtdWx0aW5vbWlhbCc7CnZhciBtdWx0aW5vbWlhbF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdkaXZpZGUnLCAnbXVsdGlwbHknLCAnZmFjdG9yaWFsJywgJ2lzSW50ZWdlcicsICdpc1Bvc2l0aXZlJ107CnZhciBjcmVhdGVNdWx0aW5vbWlhbCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKG11bHRpbm9taWFsX25hbWUsIG11bHRpbm9taWFsX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBhZGQgPSBfcmVmLmFkZCwKICAgICAgZGl2aWRlID0gX3JlZi5kaXZpZGUsCiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSwKICAgICAgZmFjdG9yaWFsID0gX3JlZi5mYWN0b3JpYWwsCiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyLAogICAgICBpc1Bvc2l0aXZlID0gX3JlZi5pc1Bvc2l0aXZlOwoKICAvKioKICAgKiBNdWx0aW5vbWlhbCBDb2VmZmljaWVudHMgY29tcHV0ZSB0aGUgbnVtYmVyIG9mIHdheXMgb2YgcGlja2luZyBhMSwgYTIsIC4uLiwgYWkgdW5vcmRlcmVkIG91dGNvbWVzIGZyb20gYG5gIHBvc3NpYmlsaXRpZXMuCiAgICoKICAgKiBtdWx0aW5vbWlhbCB0YWtlcyBvbmUgYXJyYXkgb2YgaW50ZWdlcnMgYXMgYW4gYXJndW1lbnQuCiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogZXZlcnkgYWkgPD0gMAogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIG1hdGgubXVsdGlub21pYWwoYSkgLy8gYSBpcyBhbiBhcnJheSB0eXBlCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGgubXVsdGlub21pYWwoWzEsMiwxXSkgLy8gcmV0dXJucyAxMgogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBjb21iaW5hdGlvbnMsIGZhY3RvcmlhbAogICAqCiAgICogQHBhcmFtIHtudW1iZXJbXSB8IEJpZ051bWJlcltdfSBhICAgIEludGVnZXIgbnVtYmVycyBvZiBvYmplY3RzIGluIHRoZSBzdWJzZXQKICAgKiBAcmV0dXJuIHtOdW1iZXIgfCBCaWdOdW1iZXJ9ICAgICAgICAgTXVsdGlub21pYWwgY29lZmZpY2llbnQuCiAgICovCiAgcmV0dXJuIHR5cGVkKG11bHRpbm9taWFsX25hbWUsIHsKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KGEpIHsKICAgICAgdmFyIHN1bSA9IDA7CiAgICAgIHZhciBkZW5vbSA9IDE7CiAgICAgIGRlZXBGb3JFYWNoKGEsIGZ1bmN0aW9uIChhaSkgewogICAgICAgIGlmICghaXNJbnRlZ2VyKGFpKSB8fCAhaXNQb3NpdGl2ZShhaSkpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Bvc2l0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gbXVsdGlub21pYWwnKTsKICAgICAgICB9CgogICAgICAgIHN1bSA9IGFkZChzdW0sIGFpKTsKICAgICAgICBkZW5vbSA9IG11bHRpcGx5KGRlbm9tLCBmYWN0b3JpYWwoYWkpKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBkaXZpZGUoZmFjdG9yaWFsKHN1bSksIGRlbm9tKTsKICAgIH0KICB9KTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3Blcm11dGF0aW9ucy5qcwoKCgp2YXIgcGVybXV0YXRpb25zX25hbWUgPSAncGVybXV0YXRpb25zJzsKdmFyIHBlcm11dGF0aW9uc19kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2ZhY3RvcmlhbCddOwp2YXIgY3JlYXRlUGVybXV0YXRpb25zID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkocGVybXV0YXRpb25zX25hbWUsIHBlcm11dGF0aW9uc19kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgZmFjdG9yaWFsID0gX3JlZi5mYWN0b3JpYWw7CgogIC8qKgogICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiB3YXlzIG9mIG9idGFpbmluZyBhbiBvcmRlcmVkIHN1YnNldCBvZiBga2AgZWxlbWVudHMKICAgKiBmcm9tIGEgc2V0IG9mIGBuYCBlbGVtZW50cy4KICAgKgogICAqIFBlcm11dGF0aW9ucyBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLgogICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbi4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBtYXRoLnBlcm11dGF0aW9ucyhuKQogICAqICAgICBtYXRoLnBlcm11dGF0aW9ucyhuLCBrKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLnBlcm11dGF0aW9ucyg1KSAgICAgLy8gMTIwCiAgICogICAgbWF0aC5wZXJtdXRhdGlvbnMoNSwgMykgIC8vIDYwCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGNvbWJpbmF0aW9ucywgY29tYmluYXRpb25zV2l0aFJlcCwgZmFjdG9yaWFsCiAgICoKICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gbiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0b3RhbAogICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBba10gVGhlIG51bWJlciBvZiBvYmplY3RzIGluIHRoZSBzdWJzZXQKICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXJ9ICAgIFRoZSBudW1iZXIgb2YgcGVybXV0YXRpb25zCiAgICovCiAgcmV0dXJuIHR5cGVkKHBlcm11dGF0aW9uc19uYW1lLCB7CiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyJzogZmFjdG9yaWFsLAogICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKG4sIGspIHsKICAgICAgaWYgKCFPYmplY3QodXRpbHNfbnVtYmVyWyJpIiAvKiBpc0ludGVnZXIgKi9dKShuKSB8fCBuIDwgMCkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Bvc2l0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gcGVybXV0YXRpb25zJyk7CiAgICAgIH0KCiAgICAgIGlmICghT2JqZWN0KHV0aWxzX251bWJlclsiaSIgLyogaXNJbnRlZ2VyICovXSkoaykgfHwgayA8IDApIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHBlcm11dGF0aW9ucycpOwogICAgICB9CgogICAgICBpZiAoayA+IG4pIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzZWNvbmQgYXJndW1lbnQgayBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBmaXJzdCBhcmd1bWVudCBuJyk7CiAgICAgIH0gLy8gUGVybXV0ZSBuIG9iamVjdHMsIGsgYXQgYSB0aW1lCgoKICAgICAgcmV0dXJuIHByb2R1Y3RfcHJvZHVjdChuIC0gayArIDEsIG4pOwogICAgfSwKICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcihuLCBrKSB7CiAgICAgIHZhciByZXN1bHQsIGk7CgogICAgICBpZiAoIXBlcm11dGF0aW9uc19pc1Bvc2l0aXZlSW50ZWdlcihuKSB8fCAhcGVybXV0YXRpb25zX2lzUG9zaXRpdmVJbnRlZ2VyKGspKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBwZXJtdXRhdGlvbnMnKTsKICAgICAgfQoKICAgICAgaWYgKGsuZ3QobikpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzZWNvbmQgYXJndW1lbnQgayBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBmaXJzdCBhcmd1bWVudCBuJyk7CiAgICAgIH0KCiAgICAgIHZhciBvbmUgPSBuLm11bCgwKS5hZGQoMSk7CiAgICAgIHJlc3VsdCA9IG9uZTsKCiAgICAgIGZvciAoaSA9IG4ubWludXMoaykucGx1cygxKTsgaS5sdGUobik7IGkgPSBpLnBsdXMoMSkpIHsKICAgICAgICByZXN1bHQgPSByZXN1bHQudGltZXMoaSk7CiAgICAgIH0KCiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9IC8vIFRPRE86IGltcGxlbWVudCBzdXBwb3J0IGZvciBjb2xsZWN0aW9uIGluIHBlcm11dGF0aW9ucwoKICB9KTsKfSk7Ci8qKgogKiBUZXN0IHdoZXRoZXIgQmlnTnVtYmVyIG4gaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyCiAqIEBwYXJhbSB7QmlnTnVtYmVyfSBuCiAqIEByZXR1cm5zIHtib29sZWFufSBpc1Bvc2l0aXZlSW50ZWdlcgogKi8KCmZ1bmN0aW9uIHBlcm11dGF0aW9uc19pc1Bvc2l0aXZlSW50ZWdlcihuKSB7CiAgcmV0dXJuIG4uaXNJbnRlZ2VyKCkgJiYgbi5ndGUoMCk7Cn0KLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9zZWVkLXJhbmRvbS9pbmRleC5qcwp2YXIgc2VlZF9yYW5kb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTsKdmFyIHNlZWRfcmFuZG9tX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHNlZWRfcmFuZG9tKTsKCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3V0aWwvc2VlZGVkUk5HLmpzCi8vIGNyZWF0ZSBhIHJhbmRvbSBzZWVkIGhlcmUgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIGZyb20gc2VlZC1yYW5kb20KLy8gaW5zaWRlIHRoZSBmYWN0b3J5LiBSZWFzb24gaXMgdGhhdCBtYXRoLnJhbmRvbSBpcyBkZWZpbmVkIGFzIGEgZ2V0dGVyL3NldHRlcgovLyBhbmQgc2VlZC1yYW5kb20gZ2VuZXJhdGVzIGEgc2VlZCBmcm9tIHRoZSBsb2NhbCBlbnRyb3B5IGJ5IHJlYWRpbmcgZXZlcnkKLy8gZGVmaW5lZCBvYmplY3QgaW5jbHVkaW5nIGBtYXRoYCBpdHNlbGYuIFRoYXQgbWVhbnMgdGhhdCB3aGlsc3QgZ2V0dGluZwovLyBtYXRoLnJhbmRvbSwgaXQgdHJpZXMgdG8gZ2V0IG1hdGgucmFuZG9tLCBldGMuLi4gYW4gaW5maW5pdGUgbG9vcC4KLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9Gb3JiZXNMaW5kZXNheS9zZWVkLXJhbmRvbS9pc3N1ZXMvNgoKdmFyIHNpbmdsZXRvblJhbmRvbSA9Ci8qICNfX1BVUkVfXyAqLwpzZWVkX3JhbmRvbV9kZWZhdWx0KCkoKTsKZnVuY3Rpb24gY3JlYXRlUm5nKHJhbmRvbVNlZWQpIHsKICB2YXIgcmFuZG9tOyAvLyBjcmVhdGUgYSBuZXcgcmFuZG9tIGdlbmVyYXRvciB3aXRoIGdpdmVuIHNlZWQKCiAgZnVuY3Rpb24gc2V0U2VlZChzZWVkKSB7CiAgICByYW5kb20gPSBzZWVkID09PSBudWxsID8gc2luZ2xldG9uUmFuZG9tIDogc2VlZF9yYW5kb21fZGVmYXVsdCgpKFN0cmluZyhzZWVkKSk7CiAgfSAvLyBpbml0aWFsaXplIGEgc2VlZGVkIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB3aXRoIGNvbmZpZydzIHJhbmRvbSBzZWVkCgoKICBzZXRTZWVkKHJhbmRvbVNlZWQpOyAvLyB3cmFwcGVyIGZ1bmN0aW9uIHNvIHRoZSBybmcgY2FuIGJlIHVwZGF0ZWQgdmlhIGdlbmVyYXRvcgoKICBmdW5jdGlvbiBybmcoKSB7CiAgICByZXR1cm4gcmFuZG9tKCk7CiAgfQoKICByZXR1cm4gcm5nOwp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3BpY2tSYW5kb20uanMKCgoKCnZhciBwaWNrUmFuZG9tX25hbWUgPSAncGlja1JhbmRvbSc7CnZhciBwaWNrUmFuZG9tX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJz9vbiddOwp2YXIgY3JlYXRlUGlja1JhbmRvbSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHBpY2tSYW5kb21fbmFtZSwgcGlja1JhbmRvbV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIG9uID0gX3JlZi5vbjsKICAvLyBzZWVkZWQgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCiAgdmFyIHJuZyA9IGNyZWF0ZVJuZyhjb25maWcucmFuZG9tU2VlZCk7CgogIGlmIChvbikgewogICAgb24oJ2NvbmZpZycsIGZ1bmN0aW9uIChjdXJyLCBwcmV2KSB7CiAgICAgIGlmIChjdXJyLnJhbmRvbVNlZWQgIT09IHByZXYucmFuZG9tU2VlZCkgewogICAgICAgIHJuZyA9IGNyZWF0ZVJuZyhjdXJyLnJhbmRvbVNlZWQpOwogICAgICB9CiAgICB9KTsKICB9CiAgLyoqCiAgICogUmFuZG9tIHBpY2sgb25lIG9yIG1vcmUgdmFsdWVzIGZyb20gYSBvbmUgZGltZW5zaW9uYWwgYXJyYXkuCiAgICogQXJyYXkgZWxlbWVudHMgYXJlIHBpY2tlZCB1c2luZyBhIHJhbmRvbSBmdW5jdGlvbiB3aXRoIHVuaWZvcm0gb3Igd2VpZ2h0ZWQgZGlzdHJpYnV0aW9uLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIG1hdGgucGlja1JhbmRvbShhcnJheSkKICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKGFycmF5LCBudW1iZXIpCiAgICogICAgIG1hdGgucGlja1JhbmRvbShhcnJheSwgd2VpZ2h0cykKICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKGFycmF5LCBudW1iZXIsIHdlaWdodHMpCiAgICogICAgIG1hdGgucGlja1JhbmRvbShhcnJheSwgd2VpZ2h0cywgbnVtYmVyKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKFszLCA2LCAxMiwgMl0pICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBvbmUgb2YgdGhlIHZhbHVlcyBpbiB0aGUgYXJyYXkKICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKFszLCA2LCAxMiwgMl0sIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBhbiBhcnJheSBvZiB0d28gb2YgdGhlIHZhbHVlcyBpbiB0aGUgYXJyYXkKICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKFszLCA2LCAxMiwgMl0sIFsxLCAzLCAyLCAxXSkgICAgLy8gcmV0dXJucyBvbmUgb2YgdGhlIHZhbHVlcyBpbiB0aGUgYXJyYXkgd2l0aCB3ZWlnaHRlZCBkaXN0cmlidXRpb24KICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKFszLCA2LCAxMiwgMl0sIDIsIFsxLCAzLCAyLCAxXSkgLy8gcmV0dXJucyBhbiBhcnJheSBvZiB0d28gb2YgdGhlIHZhbHVlcyBpbiB0aGUgYXJyYXkgd2l0aCB3ZWlnaHRlZCBkaXN0cmlidXRpb24KICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKFszLCA2LCAxMiwgMl0sIFsxLCAzLCAyLCAxXSwgMikgLy8gcmV0dXJucyBhbiBhcnJheSBvZiB0d28gb2YgdGhlIHZhbHVlcyBpbiB0aGUgYXJyYXkgd2l0aCB3ZWlnaHRlZCBkaXN0cmlidXRpb24KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgIHJhbmRvbSwgcmFuZG9tSW50CiAgICoKICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBhcnJheSAgICAgQSBvbmUgZGltZW5zaW9uYWwgYXJyYXkKICAgKiBAcGFyYW0ge0ludH0gbnVtYmVyICAgICAgICAgICAgICAgQW4gaW50IG9yIGZsb2F0CiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gd2VpZ2h0cyAgIEFuIGFycmF5IG9mIGludHMgb3IgZmxvYXRzCiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXl9ICAgICAgICAgIFJldHVybnMgYSBzaW5nbGUgcmFuZG9tIHZhbHVlIGZyb20gYXJyYXkgd2hlbiBudW1iZXIgaXMgMSBvciB1bmRlZmluZWQuCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgY29uZmlndXJlZCBudW1iZXIgb2YgZWxlbWVudHMgd2hlbiBudW1iZXIgaXMgPiAxLgogICAqLwoKCiAgcmV0dXJuIHR5cGVkKHsKICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHBvc3NpYmxlcykgewogICAgICByZXR1cm4gX3BpY2tSYW5kb20ocG9zc2libGVzKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyKHBvc3NpYmxlcywgbnVtYmVyKSB7CiAgICAgIHJldHVybiBfcGlja1JhbmRvbShwb3NzaWJsZXMsIG51bWJlciwgdW5kZWZpbmVkKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhBcnJheShwb3NzaWJsZXMsIHdlaWdodHMpIHsKICAgICAgcmV0dXJuIF9waWNrUmFuZG9tKHBvc3NpYmxlcywgdW5kZWZpbmVkLCB3ZWlnaHRzKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4LCBudW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeEFycmF5TWF0cml4TnVtYmVyKHBvc3NpYmxlcywgd2VpZ2h0cywgbnVtYmVyKSB7CiAgICAgIHJldHVybiBfcGlja1JhbmRvbShwb3NzaWJsZXMsIG51bWJlciwgd2VpZ2h0cyk7CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXIsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJBcnJheU1hdHJpeChwb3NzaWJsZXMsIG51bWJlciwgd2VpZ2h0cykgewogICAgICByZXR1cm4gX3BpY2tSYW5kb20ocG9zc2libGVzLCBudW1iZXIsIHdlaWdodHMpOwogICAgfQogIH0pOwoKICBmdW5jdGlvbiBfcGlja1JhbmRvbShwb3NzaWJsZXMsIG51bWJlciwgd2VpZ2h0cykgewogICAgdmFyIHNpbmdsZSA9IHR5cGVvZiBudW1iZXIgPT09ICd1bmRlZmluZWQnOwoKICAgIGlmIChzaW5nbGUpIHsKICAgICAgbnVtYmVyID0gMTsKICAgIH0KCiAgICBwb3NzaWJsZXMgPSBwb3NzaWJsZXMudmFsdWVPZigpOyAvLyBnZXQgQXJyYXkKCiAgICBpZiAod2VpZ2h0cykgewogICAgICB3ZWlnaHRzID0gd2VpZ2h0cy52YWx1ZU9mKCk7IC8vIGdldCBBcnJheQogICAgfQoKICAgIGlmIChPYmplY3QodXRpbHNfYXJyYXlbImEiIC8qIGFycmF5U2l6ZSAqL10pKHBvc3NpYmxlcykubGVuZ3RoID4gMSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgb25lIGRpbWVuc2lvbmFsIHZlY3RvcnMgc3VwcG9ydGVkJyk7CiAgICB9CgogICAgdmFyIHRvdGFsV2VpZ2h0cyA9IDA7CgogICAgaWYgKHR5cGVvZiB3ZWlnaHRzICE9PSAndW5kZWZpbmVkJykgewogICAgICBpZiAod2VpZ2h0cy5sZW5ndGggIT09IHBvc3NpYmxlcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlaWdodHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyBwb3NzaWJsZXMnKTsKICAgICAgfQoKICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHdlaWdodHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICBpZiAoIU9iamVjdChpc1sieSIgLyogaXNOdW1iZXIgKi9dKSh3ZWlnaHRzW2ldKSB8fCB3ZWlnaHRzW2ldIDwgMCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZWlnaHRzIG11c3QgYmUgYW4gYXJyYXkgb2YgcG9zaXRpdmUgbnVtYmVycycpOwogICAgICAgIH0KCiAgICAgICAgdG90YWxXZWlnaHRzICs9IHdlaWdodHNbaV07CiAgICAgIH0KICAgIH0KCiAgICB2YXIgbGVuZ3RoID0gcG9zc2libGVzLmxlbmd0aDsKCiAgICBpZiAobGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBbXTsKICAgIH0gZWxzZSBpZiAobnVtYmVyID49IGxlbmd0aCkgewogICAgICByZXR1cm4gbnVtYmVyID4gMSA/IHBvc3NpYmxlcyA6IHBvc3NpYmxlc1swXTsKICAgIH0KCiAgICB2YXIgcmVzdWx0ID0gW107CiAgICB2YXIgcGljazsKCiAgICB3aGlsZSAocmVzdWx0Lmxlbmd0aCA8IG51bWJlcikgewogICAgICBpZiAodHlwZW9mIHdlaWdodHMgPT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgcGljayA9IHBvc3NpYmxlc1tNYXRoLmZsb29yKHJuZygpICogbGVuZ3RoKV07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHJhbmRLZXkgPSBybmcoKSAqIHRvdGFsV2VpZ2h0czsKCiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfbGVuID0gcG9zc2libGVzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CiAgICAgICAgICByYW5kS2V5IC09IHdlaWdodHNbX2ldOwoKICAgICAgICAgIGlmIChyYW5kS2V5IDwgMCkgewogICAgICAgICAgICBwaWNrID0gcG9zc2libGVzW19pXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAocmVzdWx0LmluZGV4T2YocGljaykgPT09IC0xKSB7CiAgICAgICAgcmVzdWx0LnB1c2gocGljayk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gc2luZ2xlID8gcmVzdWx0WzBdIDogcmVzdWx0OyAvLyBUT0RPOiByZXR1cm4gbWF0cml4IHdoZW4gaW5wdXQgd2FzIGEgbWF0cml4CiAgICAvLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgbXVsdGkgZGltZW5zaW9uYWwgbWF0cmljZXMKICB9Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9wcm9iYWJpbGl0eS91dGlsL3JhbmRvbU1hdHJpeC5qcwovKioKICogVGhpcyBpcyBhIHV0aWwgZnVuY3Rpb24gZm9yIGdlbmVyYXRpbmcgYSByYW5kb20gbWF0cml4IHJlY3Vyc2l2ZWx5LgogKiBAcGFyYW0ge251bWJlcltdfSBzaXplCiAqIEBwYXJhbSB7ZnVuY3Rpb259IHJhbmRvbQogKiBAcmV0dXJucyB7QXJyYXl9CiAqLwpmdW5jdGlvbiByYW5kb21NYXRyaXgoc2l6ZSwgcmFuZG9tKSB7CiAgdmFyIGRhdGEgPSBbXTsKICBzaXplID0gc2l6ZS5zbGljZSgwKTsKCiAgaWYgKHNpemUubGVuZ3RoID4gMSkgewogICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHNpemUuc2hpZnQoKTsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGRhdGEucHVzaChyYW5kb21NYXRyaXgoc2l6ZSwgcmFuZG9tKSk7CiAgICB9CiAgfSBlbHNlIHsKICAgIGZvciAodmFyIF9pID0gMCwgX2xlbmd0aCA9IHNpemUuc2hpZnQoKTsgX2kgPCBfbGVuZ3RoOyBfaSsrKSB7CiAgICAgIGRhdGEucHVzaChyYW5kb20oKSk7CiAgICB9CiAgfQoKICByZXR1cm4gZGF0YTsKfQovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9wcm9iYWJpbGl0eS9yYW5kb20uanMKCgoKCnZhciByYW5kb21fbmFtZSA9ICdyYW5kb20nOwp2YXIgcmFuZG9tX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJz9vbiddOwp2YXIgY3JlYXRlUmFuZG9tID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkocmFuZG9tX25hbWUsIHJhbmRvbV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIG9uID0gX3JlZi5vbjsKICAvLyBzZWVkZWQgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCiAgdmFyIHJuZyA9IGNyZWF0ZVJuZyhjb25maWcucmFuZG9tU2VlZCk7CgogIGlmIChvbikgewogICAgb24oJ2NvbmZpZycsIGZ1bmN0aW9uIChjdXJyLCBwcmV2KSB7CiAgICAgIGlmIChjdXJyLnJhbmRvbVNlZWQgIT09IHByZXYucmFuZG9tU2VlZCkgewogICAgICAgIHJuZyA9IGNyZWF0ZVJuZyhjdXJyLnJhbmRvbVNlZWQpOwogICAgICB9CiAgICB9KTsKICB9CiAgLyoqCiAgICogUmV0dXJuIGEgcmFuZG9tIG51bWJlciBsYXJnZXIgb3IgZXF1YWwgdG8gYG1pbmAgYW5kIHNtYWxsZXIgdGhhbiBgbWF4YAogICAqIHVzaW5nIGEgdW5pZm9ybSBkaXN0cmlidXRpb24uCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICAgbWF0aC5yYW5kb20oKSAgICAgICAgICAgICAgICAvLyBnZW5lcmF0ZSBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxCiAgICogICAgIG1hdGgucmFuZG9tKG1heCkgICAgICAgICAgICAgLy8gZ2VuZXJhdGUgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gMCBhbmQgbWF4CiAgICogICAgIG1hdGgucmFuZG9tKG1pbiwgbWF4KSAgICAgICAgLy8gZ2VuZXJhdGUgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gbWluIGFuZCBtYXgKICAgKiAgICAgbWF0aC5yYW5kb20oc2l6ZSkgICAgICAgICAgICAvLyBnZW5lcmF0ZSBhIG1hdHJpeCB3aXRoIHJhbmRvbSBudW1iZXJzIGJldHdlZW4gMCBhbmQgMQogICAqICAgICBtYXRoLnJhbmRvbShzaXplLCBtYXgpICAgICAgIC8vIGdlbmVyYXRlIGEgbWF0cml4IHdpdGggcmFuZG9tIG51bWJlcnMgYmV0d2VlbiAwIGFuZCBtYXgKICAgKiAgICAgbWF0aC5yYW5kb20oc2l6ZSwgbWluLCBtYXgpICAvLyBnZW5lcmF0ZSBhIG1hdHJpeCB3aXRoIHJhbmRvbSBudW1iZXJzIGJldHdlZW4gbWluIGFuZCBtYXgKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgIG1hdGgucmFuZG9tKCkgICAgICAgLy8gcmV0dXJucyBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxCiAgICogICAgIG1hdGgucmFuZG9tKDEwMCkgICAgLy8gcmV0dXJucyBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxMDAKICAgKiAgICAgbWF0aC5yYW5kb20oMzAsIDQwKSAvLyByZXR1cm5zIGEgcmFuZG9tIG51bWJlciBiZXR3ZWVuIDMwIGFuZCA0MAogICAqICAgICBtYXRoLnJhbmRvbShbMiwgM10pIC8vIHJldHVybnMgYSAyeDMgbWF0cml4IHdpdGggcmFuZG9tIG51bWJlcnMgYmV0d2VlbiAwIGFuZCAxCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgICByYW5kb21JbnQsIHBpY2tSYW5kb20KICAgKgogICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtzaXplXSBJZiBwcm92aWRlZCwgYW4gYXJyYXkgb3IgbWF0cml4IHdpdGggZ2l2ZW4KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSBhbmQgZmlsbGVkIHdpdGggcmFuZG9tIHZhbHVlcyBpcyByZXR1cm5lZAogICAqIEBwYXJhbSB7bnVtYmVyfSBbbWluXSAgTWluaW11bSBib3VuZGFyeSBmb3IgdGhlIHJhbmRvbSB2YWx1ZSwgaW5jbHVkZWQKICAgKiBAcGFyYW0ge251bWJlcn0gW21heF0gIE1heGltdW0gYm91bmRhcnkgZm9yIHRoZSByYW5kb20gdmFsdWUsIGV4Y2x1ZGVkCiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IEEgcmFuZG9tIG51bWJlcgogICAqLwoKCiAgcmV0dXJuIHR5cGVkKHJhbmRvbV9uYW1lLCB7CiAgICAnJzogZnVuY3Rpb24gXygpIHsKICAgICAgcmV0dXJuIF9yYW5kb20oMCwgMSk7CiAgICB9LAogICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIobWF4KSB7CiAgICAgIHJldHVybiBfcmFuZG9tKDAsIG1heCk7CiAgICB9LAogICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKG1pbiwgbWF4KSB7CiAgICAgIHJldHVybiBfcmFuZG9tKG1pbiwgbWF4KTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChzaXplKSB7CiAgICAgIHJldHVybiBfcmFuZG9tTWF0cml4KHNpemUsIDAsIDEpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXIoc2l6ZSwgbWF4KSB7CiAgICAgIHJldHVybiBfcmFuZG9tTWF0cml4KHNpemUsIDAsIG1heCk7CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyTnVtYmVyKHNpemUsIG1pbiwgbWF4KSB7CiAgICAgIHJldHVybiBfcmFuZG9tTWF0cml4KHNpemUsIG1pbiwgbWF4KTsKICAgIH0KICB9KTsKCiAgZnVuY3Rpb24gX3JhbmRvbU1hdHJpeChzaXplLCBtaW4sIG1heCkgewogICAgdmFyIHJlcyA9IHJhbmRvbU1hdHJpeChzaXplLnZhbHVlT2YoKSwgZnVuY3Rpb24gKCkgewogICAgICByZXR1cm4gX3JhbmRvbShtaW4sIG1heCk7CiAgICB9KTsKICAgIHJldHVybiBPYmplY3QoaXNbInYiIC8qIGlzTWF0cml4ICovXSkoc2l6ZSkgPyBzaXplLmNyZWF0ZShyZXMpIDogcmVzOwogIH0KCiAgZnVuY3Rpb24gX3JhbmRvbShtaW4sIG1heCkgewogICAgcmV0dXJuIG1pbiArIHJuZygpICogKG1heCAtIG1pbik7CiAgfQp9KTsgLy8gbnVtYmVyIG9ubHkgaW1wbGVtZW50YXRpb24gb2YgcmFuZG9tLCBubyBtYXRyaXggc3VwcG9ydAovLyBUT0RPOiB0aGVyZSBpcyBxdWl0ZSBzb21lIGR1cGxpY2F0ZSBjb2RlIGluIGJvdGggY3JlYXRlUmFuZG9tIGFuZCBjcmVhdGVSYW5kb21OdW1iZXIsIGNhbiB3ZSBpbXByb3ZlIHRoYXQ/Cgp2YXIgY3JlYXRlUmFuZG9tTnVtYmVyID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkocmFuZG9tX25hbWUsIFsndHlwZWQnLCAnY29uZmlnJywgJz9vbiddLCBmdW5jdGlvbiAoX3JlZjIpIHsKICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCwKICAgICAgY29uZmlnID0gX3JlZjIuY29uZmlnLAogICAgICBvbiA9IF9yZWYyLm9uLAogICAgICBtYXRyaXggPSBfcmVmMi5tYXRyaXg7CiAgLy8gc2VlZGVkIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvcjEKICB2YXIgcm5nID0gY3JlYXRlUm5nKGNvbmZpZy5yYW5kb21TZWVkKTsKCiAgaWYgKG9uKSB7CiAgICBvbignY29uZmlnJywgZnVuY3Rpb24gKGN1cnIsIHByZXYpIHsKICAgICAgaWYgKGN1cnIucmFuZG9tU2VlZCAhPT0gcHJldi5yYW5kb21TZWVkKSB7CiAgICAgICAgcm5nID0gY3JlYXRlUm5nKGN1cnIucmFuZG9tU2VlZCk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgcmV0dXJuIHR5cGVkKHJhbmRvbV9uYW1lLCB7CiAgICAnJzogZnVuY3Rpb24gXygpIHsKICAgICAgcmV0dXJuIF9yYW5kb20oMCwgMSk7CiAgICB9LAogICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIobWF4KSB7CiAgICAgIHJldHVybiBfcmFuZG9tKDAsIG1heCk7CiAgICB9LAogICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKG1pbiwgbWF4KSB7CiAgICAgIHJldHVybiBfcmFuZG9tKG1pbiwgbWF4KTsKICAgIH0KICB9KTsKCiAgZnVuY3Rpb24gX3JhbmRvbShtaW4sIG1heCkgewogICAgcmV0dXJuIG1pbiArIHJuZygpICogKG1heCAtIG1pbik7CiAgfQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcmFuZG9tSW50LmpzCgoKCgp2YXIgcmFuZG9tSW50X25hbWUgPSAncmFuZG9tSW50JzsKdmFyIHJhbmRvbUludF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICc/b24nXTsKdmFyIGNyZWF0ZVJhbmRvbUludCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHJhbmRvbUludF9uYW1lLCByYW5kb21JbnRfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLAogICAgICBvbiA9IF9yZWYub247CiAgLy8gc2VlZGVkIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgogIHZhciBybmcgPSBjcmVhdGVSbmcoY29uZmlnLnJhbmRvbVNlZWQpOwoKICBpZiAob24pIHsKICAgIG9uKCdjb25maWcnLCBmdW5jdGlvbiAoY3VyciwgcHJldikgewogICAgICBpZiAoY3Vyci5yYW5kb21TZWVkICE9PSBwcmV2LnJhbmRvbVNlZWQpIHsKICAgICAgICBybmcgPSBjcmVhdGVSbmcoY3Vyci5yYW5kb21TZWVkKTsKICAgICAgfQogICAgfSk7CiAgfQogIC8qKgogICAqIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIG51bWJlciBsYXJnZXIgb3IgZXF1YWwgdG8gYG1pbmAgYW5kIHNtYWxsZXIgdGhhbiBgbWF4YAogICAqIHVzaW5nIGEgdW5pZm9ybSBkaXN0cmlidXRpb24uCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICAgbWF0aC5yYW5kb21JbnQoKSAgICAgICAgICAgICAgICAvLyBnZW5lcmF0ZSBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMQogICAqICAgICBtYXRoLnJhbmRvbUludChtYXgpICAgICAgICAgICAgIC8vIGdlbmVyYXRlIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiAwIGFuZCBtYXgKICAgKiAgICAgbWF0aC5yYW5kb21JbnQobWluLCBtYXgpICAgICAgICAvLyBnZW5lcmF0ZSBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXgKICAgKiAgICAgbWF0aC5yYW5kb21JbnQoc2l6ZSkgICAgICAgICAgICAvLyBnZW5lcmF0ZSBhIG1hdHJpeCB3aXRoIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMQogICAqICAgICBtYXRoLnJhbmRvbUludChzaXplLCBtYXgpICAgICAgIC8vIGdlbmVyYXRlIGEgbWF0cml4IHdpdGggcmFuZG9tIGludGVnZXIgYmV0d2VlbiAwIGFuZCBtYXgKICAgKiAgICAgbWF0aC5yYW5kb21JbnQoc2l6ZSwgbWluLCBtYXgpICAvLyBnZW5lcmF0ZSBhIG1hdHJpeCB3aXRoIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXgKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgIG1hdGgucmFuZG9tSW50KDEwMCkgICAgLy8gcmV0dXJucyBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMTAwCiAgICogICAgIG1hdGgucmFuZG9tSW50KDMwLCA0MCkgLy8gcmV0dXJucyBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gMzAgYW5kIDQwCiAgICogICAgIG1hdGgucmFuZG9tSW50KFsyLCAzXSkgLy8gcmV0dXJucyBhIDJ4MyBtYXRyaXggd2l0aCByYW5kb20gaW50ZWdlcnMgYmV0d2VlbiAwIGFuZCAxCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgICByYW5kb20sIHBpY2tSYW5kb20KICAgKgogICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtzaXplXSBJZiBwcm92aWRlZCwgYW4gYXJyYXkgb3IgbWF0cml4IHdpdGggZ2l2ZW4KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSBhbmQgZmlsbGVkIHdpdGggcmFuZG9tIHZhbHVlcyBpcyByZXR1cm5lZAogICAqIEBwYXJhbSB7bnVtYmVyfSBbbWluXSAgTWluaW11bSBib3VuZGFyeSBmb3IgdGhlIHJhbmRvbSB2YWx1ZSwgaW5jbHVkZWQKICAgKiBAcGFyYW0ge251bWJlcn0gW21heF0gIE1heGltdW0gYm91bmRhcnkgZm9yIHRoZSByYW5kb20gdmFsdWUsIGV4Y2x1ZGVkCiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IEEgcmFuZG9tIGludGVnZXIgdmFsdWUKICAgKi8KCgogIHJldHVybiB0eXBlZChyYW5kb21JbnRfbmFtZSwgewogICAgJyc6IGZ1bmN0aW9uIF8oKSB7CiAgICAgIHJldHVybiBfcmFuZG9tSW50KDAsIDEpOwogICAgfSwKICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKG1heCkgewogICAgICByZXR1cm4gX3JhbmRvbUludCgwLCBtYXgpOwogICAgfSwKICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcihtaW4sIG1heCkgewogICAgICByZXR1cm4gX3JhbmRvbUludChtaW4sIG1heCk7CiAgICB9LAogICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoc2l6ZSkgewogICAgICByZXR1cm4gX3JhbmRvbUludE1hdHJpeChzaXplLCAwLCAxKTsKICAgIH0sCiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyKHNpemUsIG1heCkgewogICAgICByZXR1cm4gX3JhbmRvbUludE1hdHJpeChzaXplLCAwLCBtYXgpOwogICAgfSwKICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlck51bWJlcihzaXplLCBtaW4sIG1heCkgewogICAgICByZXR1cm4gX3JhbmRvbUludE1hdHJpeChzaXplLCBtaW4sIG1heCk7CiAgICB9CiAgfSk7CgogIGZ1bmN0aW9uIF9yYW5kb21JbnRNYXRyaXgoc2l6ZSwgbWluLCBtYXgpIHsKICAgIHZhciByZXMgPSByYW5kb21NYXRyaXgoc2l6ZS52YWx1ZU9mKCksIGZ1bmN0aW9uICgpIHsKICAgICAgcmV0dXJuIF9yYW5kb21JbnQobWluLCBtYXgpOwogICAgfSk7CiAgICByZXR1cm4gT2JqZWN0KGlzWyJ2IiAvKiBpc01hdHJpeCAqL10pKHNpemUpID8gc2l6ZS5jcmVhdGUocmVzKSA6IHJlczsKICB9CgogIGZ1bmN0aW9uIF9yYW5kb21JbnQobWluLCBtYXgpIHsKICAgIHJldHVybiBNYXRoLmZsb29yKG1pbiArIHJuZygpICogKG1heCAtIG1pbikpOwogIH0KfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3Mvc3RpcmxpbmdTMi5qcwoKdmFyIHN0aXJsaW5nUzJfbmFtZSA9ICdzdGlybGluZ1MyJzsKdmFyIHN0aXJsaW5nUzJfZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGRTY2FsYXInLCAnc3VidHJhY3QnLCAnbXVsdGlwbHlTY2FsYXInLCAnZGl2aWRlU2NhbGFyJywgJ3BvdycsICdmYWN0b3JpYWwnLCAnY29tYmluYXRpb25zJywgJ2lzTmVnYXRpdmUnLCAnaXNJbnRlZ2VyJywgJ2xhcmdlciddOwp2YXIgY3JlYXRlU3RpcmxpbmdTMiA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHN0aXJsaW5nUzJfbmFtZSwgc3RpcmxpbmdTMl9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsCiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCwKICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLAogICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhciwKICAgICAgcG93ID0gX3JlZi5wb3csCiAgICAgIGZhY3RvcmlhbCA9IF9yZWYuZmFjdG9yaWFsLAogICAgICBjb21iaW5hdGlvbnMgPSBfcmVmLmNvbWJpbmF0aW9ucywKICAgICAgaXNOZWdhdGl2ZSA9IF9yZWYuaXNOZWdhdGl2ZSwKICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXIsCiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyOwoKICAvKioKICAgKiBUaGUgU3RpcmxpbmcgbnVtYmVycyBvZiB0aGUgc2Vjb25kIGtpbmQsIGNvdW50cyB0aGUgbnVtYmVyIG9mIHdheXMgdG8gcGFydGl0aW9uCiAgICogYSBzZXQgb2YgbiBsYWJlbGxlZCBvYmplY3RzIGludG8gayBub25lbXB0eSB1bmxhYmVsbGVkIHN1YnNldHMuCiAgICogc3RpcmxpbmdTMiBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLgogICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbi4KICAgKgogICAqICBJZiBuID0gayBvciBrID0gMSwgdGhlbiBzKG4saykgPSAxCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgIG1hdGguc3RpcmxpbmdTMihuLCBrKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLnN0aXJsaW5nUzIoNSwgMykgLy9yZXR1cm5zIDI1CiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGJlbGxOdW1iZXJzCiAgICoKICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gbiAgICBUb3RhbCBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc2V0CiAgICogQHBhcmFtIHtOdW1iZXIgfCBCaWdOdW1iZXJ9IGsgICAgTnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHN1YnNldAogICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gICAgIFMobixrKQogICAqLwogIHJldHVybiB0eXBlZChzdGlybGluZ1MyX25hbWUsIHsKICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlck51bWJlckJpZ051bWJlcihuLCBrKSB7CiAgICAgIGlmICghaXNJbnRlZ2VyKG4pIHx8IGlzTmVnYXRpdmUobikgfHwgIWlzSW50ZWdlcihrKSB8fCBpc05lZ2F0aXZlKGspKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gc3RpcmxpbmdTMicpOwogICAgICB9IGVsc2UgaWYgKGxhcmdlcihrLCBuKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2sgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbiBpbiBmdW5jdGlvbiBzdGlybGluZ1MyJyk7CiAgICAgIH0gLy8gMS9rISBTdW0oaT0wIC0+IGspIFsoLTEpXihrLWkpKkMoayxqKSogaV5uXQoKCiAgICAgIHZhciBrRmFjdG9yaWFsID0gZmFjdG9yaWFsKGspOwogICAgICB2YXIgcmVzdWx0ID0gMDsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGs7IGkrKykgewogICAgICAgIHZhciBuZWdhdGl2ZU9uZSA9IHBvdygtMSwgc3VidHJhY3QoaywgaSkpOwogICAgICAgIHZhciBrQ2hvb3NlSSA9IGNvbWJpbmF0aW9ucyhrLCBpKTsKICAgICAgICB2YXIgaVBvd2VyID0gcG93KGksIG4pOwogICAgICAgIHJlc3VsdCA9IGFkZFNjYWxhcihyZXN1bHQsIG11bHRpcGx5U2NhbGFyKG11bHRpcGx5U2NhbGFyKGtDaG9vc2VJLCBpUG93ZXIpLCBuZWdhdGl2ZU9uZSkpOwogICAgICB9CgogICAgICByZXR1cm4gZGl2aWRlU2NhbGFyKHJlc3VsdCwga0ZhY3RvcmlhbCk7CiAgICB9CiAgfSk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2JlbGxOdW1iZXJzLmpzCgp2YXIgYmVsbE51bWJlcnNfbmFtZSA9ICdiZWxsTnVtYmVycyc7CnZhciBiZWxsTnVtYmVyc19kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZFNjYWxhcicsICdpc05lZ2F0aXZlJywgJ2lzSW50ZWdlcicsICdzdGlybGluZ1MyJ107CnZhciBjcmVhdGVCZWxsTnVtYmVycyA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGJlbGxOdW1iZXJzX25hbWUsIGJlbGxOdW1iZXJzX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhciwKICAgICAgaXNOZWdhdGl2ZSA9IF9yZWYuaXNOZWdhdGl2ZSwKICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXIsCiAgICAgIHN0aXJsaW5nUzIgPSBfcmVmLnN0aXJsaW5nUzI7CgogIC8qKgogICAqIFRoZSBCZWxsIE51bWJlcnMgY291bnQgdGhlIG51bWJlciBvZiBwYXJ0aXRpb25zIG9mIGEgc2V0LiBBIHBhcnRpdGlvbiBpcyBhIHBhaXJ3aXNlIGRpc2pvaW50IHN1YnNldCBvZiBTIHdob3NlIHVuaW9uIGlzIFMuCiAgICogYmVsbE51bWJlcnMgb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy4KICAgKiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBuID49IDAKICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgbWF0aC5iZWxsTnVtYmVycyhuKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmJlbGxOdW1iZXJzKDMpIC8vIHJldHVybnMgNQogICAqICAgIG1hdGguYmVsbE51bWJlcnMoOCkgLy8gcmV0dXJucyA0MTQwCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIHN0aXJsaW5nUzIKICAgKgogICAqIEBwYXJhbSB7TnVtYmVyIHwgQmlnTnVtYmVyfSBuICAgIFRvdGFsIG51bWJlciBvZiBvYmplY3RzIGluIHRoZSBzZXQKICAgKiBAcmV0dXJuIHtOdW1iZXIgfCBCaWdOdW1iZXJ9ICAgICBCKG4pCiAgICovCiAgcmV0dXJuIHR5cGVkKGJlbGxOdW1iZXJzX25hbWUsIHsKICAgICdudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXIobikgewogICAgICBpZiAoIWlzSW50ZWdlcihuKSB8fCBpc05lZ2F0aXZlKG4pKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gYmVsbE51bWJlcnMnKTsKICAgICAgfSAvLyBTdW0gKGs9MCwgbikgUyhuLGspLgoKCiAgICAgIHZhciByZXN1bHQgPSAwOwoKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgcmVzdWx0ID0gYWRkU2NhbGFyKHJlc3VsdCwgc3RpcmxpbmdTMihuLCBpKSk7CiAgICAgIH0KCiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgfSk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2NhdGFsYW4uanMKCnZhciBjYXRhbGFuX25hbWUgPSAnY2F0YWxhbic7CnZhciBjYXRhbGFuX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWRkU2NhbGFyJywgJ2RpdmlkZVNjYWxhcicsICdtdWx0aXBseVNjYWxhcicsICdjb21iaW5hdGlvbnMnLCAnaXNOZWdhdGl2ZScsICdpc0ludGVnZXInXTsKdmFyIGNyZWF0ZUNhdGFsYW4gPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShjYXRhbGFuX25hbWUsIGNhdGFsYW5fZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLAogICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhciwKICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLAogICAgICBjb21iaW5hdGlvbnMgPSBfcmVmLmNvbWJpbmF0aW9ucywKICAgICAgaXNOZWdhdGl2ZSA9IF9yZWYuaXNOZWdhdGl2ZSwKICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXI7CgogIC8qKgogICAqIFRoZSBDYXRhbGFuIE51bWJlcnMgZW51bWVyYXRlIGNvbWJpbmF0b3JpYWwgc3RydWN0dXJlcyBvZiBtYW55IGRpZmZlcmVudCB0eXBlcy4KICAgKiBjYXRhbGFuIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuCiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogbiA+PSAwCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgIG1hdGguY2F0YWxhbihuKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICBtYXRoLmNhdGFsYW4oMykgLy8gcmV0dXJucyA1CiAgICogICAgbWF0aC5jYXRhbGFuKDgpIC8vIHJldHVybnMgMTQzMAogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICBiZWxsTnVtYmVycwogICAqCiAgICogQHBhcmFtIHtOdW1iZXIgfCBCaWdOdW1iZXJ9IG4gICAgbnRoIENhdGFsYW4gbnVtYmVyCiAgICogQHJldHVybiB7TnVtYmVyIHwgQmlnTnVtYmVyfSAgICAgQ24obikKICAgKi8KICByZXR1cm4gdHlwZWQoY2F0YWxhbl9uYW1lLCB7CiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyKG4pIHsKICAgICAgaWYgKCFpc0ludGVnZXIobikgfHwgaXNOZWdhdGl2ZShuKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGNhdGFsYW4nKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcihjb21iaW5hdGlvbnMobXVsdGlwbHlTY2FsYXIobiwgMiksIG4pLCBhZGRTY2FsYXIobiwgMSkpOwogICAgfQogIH0pOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vY29tYmluYXRvcmljcy9jb21wb3NpdGlvbi5qcwoKdmFyIGNvbXBvc2l0aW9uX25hbWUgPSAnY29tcG9zaXRpb24nOwp2YXIgY29tcG9zaXRpb25fZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGRTY2FsYXInLCAnY29tYmluYXRpb25zJywgJ2lzTmVnYXRpdmUnLCAnaXNQb3NpdGl2ZScsICdpc0ludGVnZXInLCAnbGFyZ2VyJ107CnZhciBjcmVhdGVDb21wb3NpdGlvbiA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGNvbXBvc2l0aW9uX25hbWUsIGNvbXBvc2l0aW9uX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhciwKICAgICAgY29tYmluYXRpb25zID0gX3JlZi5jb21iaW5hdGlvbnMsCiAgICAgIGlzUG9zaXRpdmUgPSBfcmVmLmlzUG9zaXRpdmUsCiAgICAgIGlzTmVnYXRpdmUgPSBfcmVmLmlzTmVnYXRpdmUsCiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyLAogICAgICBsYXJnZXIgPSBfcmVmLmxhcmdlcjsKCiAgLyoqCiAgICogVGhlIGNvbXBvc2l0aW9uIGNvdW50cyBvZiBuIGludG8gayBwYXJ0cy4KICAgKgogICAqIGNvbXBvc2l0aW9uIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuCiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogayA8PSBuLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICBtYXRoLmNvbXBvc2l0aW9uKG4sIGspCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgIG1hdGguY29tcG9zaXRpb24oNSwgMykgLy8gcmV0dXJucyA2CiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgIGNvbWJpbmF0aW9ucwogICAqCiAgICogQHBhcmFtIHtOdW1iZXIgfCBCaWdOdW1iZXJ9IG4gICAgVG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNldAogICAqIEBwYXJhbSB7TnVtYmVyIHwgQmlnTnVtYmVyfSBrICAgIE51bWJlciBvZiBvYmplY3RzIGluIHRoZSBzdWJzZXQKICAgKiBAcmV0dXJuIHtOdW1iZXIgfCBCaWdOdW1iZXJ9ICAgICBSZXR1cm5zIHRoZSBjb21wb3NpdGlvbiBjb3VudHMgb2YgbiBpbnRvIGsgcGFydHMuCiAgICovCiAgcmV0dXJuIHR5cGVkKGNvbXBvc2l0aW9uX25hbWUsIHsKICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlck51bWJlckJpZ051bWJlcihuLCBrKSB7CiAgICAgIGlmICghaXNJbnRlZ2VyKG4pIHx8ICFpc1Bvc2l0aXZlKG4pIHx8ICFpc0ludGVnZXIoaykgfHwgIWlzUG9zaXRpdmUoaykpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGNvbXBvc2l0aW9uJyk7CiAgICAgIH0gZWxzZSBpZiAobGFyZ2VyKGssIG4pKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBuIGluIGZ1bmN0aW9uIGNvbXBvc2l0aW9uJyk7CiAgICAgIH0KCiAgICAgIHJldHVybiBjb21iaW5hdGlvbnMoYWRkU2NhbGFyKG4sIC0xKSwgYWRkU2NhbGFyKGssIC0xKSk7CiAgICB9CiAgfSk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hbGdlYnJhL3NpbXBsaWZ5L3V0aWwuanMKCgoKdmFyIHV0aWxfbmFtZSA9ICdzaW1wbGlmeVV0aWwnOwp2YXIgdXRpbF9kZXBlbmRlbmNpZXMgPSBbJ0Z1bmN0aW9uTm9kZScsICdPcGVyYXRvck5vZGUnLCAnU3ltYm9sTm9kZSddOwp2YXIgY3JlYXRlVXRpbCA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHV0aWxfbmFtZSwgdXRpbF9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIEZ1bmN0aW9uTm9kZSA9IF9yZWYuRnVuY3Rpb25Ob2RlLAogICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSwKICAgICAgU3ltYm9sTm9kZSA9IF9yZWYuU3ltYm9sTm9kZTsKICAvLyBUT0RPIGNvbW11dGF0aXZlL2Fzc29jaWF0aXZlIHByb3BlcnRpZXMgcmVseSBvbiB0aGUgYXJndW1lbnRzCiAgLy8gZS5nLiBtdWx0aXBseSBpcyBub3QgY29tbXV0YXRpdmUgZm9yIG1hdHJpY2VzCiAgLy8gVGhlIHByb3BlcnRpZXMgc2hvdWxkIGJlIGNhbGN1bGF0ZWQgZnJvbSBhbiBhcmd1bWVudCB0byBzaW1wbGlmeSwgb3IgcG9zc2libHkgc29tZXRoaW5nIGluIG1hdGguY29uZmlnCiAgLy8gdGhlIG90aGVyIG9wdGlvbiBpcyBmb3IgdHlwZWQoKSB0byBzcGVjaWZ5IGEgcmV0dXJuIHR5cGUgc28gdGhhdCB3ZSBjYW4gZXZhbHVhdGUgdGhlIHR5cGUgb2YgYXJndW1lbnRzCiAgdmFyIGNvbW11dGF0aXZlID0gewogICAgYWRkOiB0cnVlLAogICAgbXVsdGlwbHk6IHRydWUKICB9OwogIHZhciBhc3NvY2lhdGl2ZSA9IHsKICAgIGFkZDogdHJ1ZSwKICAgIG11bHRpcGx5OiB0cnVlCiAgfTsKCiAgZnVuY3Rpb24gaXNDb21tdXRhdGl2ZShub2RlLCBjb250ZXh0KSB7CiAgICBpZiAoIU9iamVjdChpc1siQiIgLyogaXNPcGVyYXRvck5vZGUgKi9dKShub2RlKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICB2YXIgbmFtZSA9IG5vZGUuZm4udG9TdHJpbmcoKTsKCiAgICBpZiAoY29udGV4dCAmJiBPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKGNvbnRleHQsIG5hbWUpICYmIE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkoY29udGV4dFtuYW1lXSwgJ2NvbW11dGF0aXZlJykpIHsKICAgICAgcmV0dXJuIGNvbnRleHRbbmFtZV0uY29tbXV0YXRpdmU7CiAgICB9CgogICAgcmV0dXJuIGNvbW11dGF0aXZlW25hbWVdIHx8IGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gaXNBc3NvY2lhdGl2ZShub2RlLCBjb250ZXh0KSB7CiAgICBpZiAoIU9iamVjdChpc1siQiIgLyogaXNPcGVyYXRvck5vZGUgKi9dKShub2RlKSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgdmFyIG5hbWUgPSBub2RlLmZuLnRvU3RyaW5nKCk7CgogICAgaWYgKGNvbnRleHQgJiYgT2JqZWN0KHV0aWxzX29iamVjdFsiZiIgLyogaGFzT3duUHJvcGVydHkgKi9dKShjb250ZXh0LCBuYW1lKSAmJiBPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKGNvbnRleHRbbmFtZV0sICdhc3NvY2lhdGl2ZScpKSB7CiAgICAgIHJldHVybiBjb250ZXh0W25hbWVdLmFzc29jaWF0aXZlOwogICAgfQoKICAgIHJldHVybiBhc3NvY2lhdGl2ZVtuYW1lXSB8fCBmYWxzZTsKICB9CiAgLyoqCiAgICogRmxhdHRlbiBhbGwgYXNzb2NpYXRpdmUgb3BlcmF0b3JzIGluIGFuIGV4cHJlc3Npb24gdHJlZS4KICAgKiBBc3N1bWVzIHBhcmVudGhlc2VzIGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQuCiAgICovCgoKICBmdW5jdGlvbiBmbGF0dGVuKG5vZGUpIHsKICAgIGlmICghbm9kZS5hcmdzIHx8IG5vZGUuYXJncy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CgogICAgbm9kZS5hcmdzID0gYWxsQ2hpbGRyZW4obm9kZSk7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmFyZ3MubGVuZ3RoOyBpKyspIHsKICAgICAgZmxhdHRlbihub2RlLmFyZ3NbaV0pOwogICAgfQogIH0KICAvKioKICAgKiBHZXQgdGhlIGNoaWxkcmVuIG9mIGEgbm9kZSBhcyBpZiBpdCBoYXMgYmVlbiBmbGF0dGVuZWQuCiAgICogVE9ETyBpbXBsZW1lbnQgZm9yIEZ1bmN0aW9uTm9kZXMKICAgKi8KCgogIGZ1bmN0aW9uIGFsbENoaWxkcmVuKG5vZGUpIHsKICAgIHZhciBvcDsKICAgIHZhciBjaGlsZHJlbiA9IFtdOwoKICAgIHZhciBmaW5kQ2hpbGRyZW4gPSBmdW5jdGlvbiBmaW5kQ2hpbGRyZW4obm9kZSkgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuYXJncy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBjaGlsZCA9IG5vZGUuYXJnc1tpXTsKCiAgICAgICAgaWYgKE9iamVjdChpc1siQiIgLyogaXNPcGVyYXRvck5vZGUgKi9dKShjaGlsZCkgJiYgb3AgPT09IGNoaWxkLm9wKSB7CiAgICAgICAgICBmaW5kQ2hpbGRyZW4oY2hpbGQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CgogICAgaWYgKGlzQXNzb2NpYXRpdmUobm9kZSkpIHsKICAgICAgb3AgPSBub2RlLm9wOwogICAgICBmaW5kQ2hpbGRyZW4obm9kZSk7CiAgICAgIHJldHVybiBjaGlsZHJlbjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBub2RlLmFyZ3M7CiAgICB9CiAgfQogIC8qKgogICAqICBVbmZsYXR0ZW4gYWxsIGZsYXR0ZW5lZCBvcGVyYXRvcnMgdG8gYSByaWdodC1oZWF2eSBiaW5hcnkgdHJlZS4KICAgKi8KCgogIGZ1bmN0aW9uIHVuZmxhdHRlbnIobm9kZSkgewogICAgaWYgKCFub2RlLmFyZ3MgfHwgbm9kZS5hcmdzLmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm47CiAgICB9CgogICAgdmFyIG1ha2VOb2RlID0gY3JlYXRlTWFrZU5vZGVGdW5jdGlvbihub2RlKTsKICAgIHZhciBsID0gbm9kZS5hcmdzLmxlbmd0aDsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykgewogICAgICB1bmZsYXR0ZW5yKG5vZGUuYXJnc1tpXSk7CiAgICB9CgogICAgaWYgKGwgPiAyICYmIGlzQXNzb2NpYXRpdmUobm9kZSkpIHsKICAgICAgdmFyIGN1cm5vZGUgPSBub2RlLmFyZ3MucG9wKCk7CgogICAgICB3aGlsZSAobm9kZS5hcmdzLmxlbmd0aCA+IDApIHsKICAgICAgICBjdXJub2RlID0gbWFrZU5vZGUoW25vZGUuYXJncy5wb3AoKSwgY3Vybm9kZV0pOwogICAgICB9CgogICAgICBub2RlLmFyZ3MgPSBjdXJub2RlLmFyZ3M7CiAgICB9CiAgfQogIC8qKgogICAqICBVbmZsYXR0ZW4gYWxsIGZsYXR0ZW5lZCBvcGVyYXRvcnMgdG8gYSBsZWZ0LWhlYXZ5IGJpbmFyeSB0cmVlLgogICAqLwoKCiAgZnVuY3Rpb24gdW5mbGF0dGVubChub2RlKSB7CiAgICBpZiAoIW5vZGUuYXJncyB8fCBub2RlLmFyZ3MubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB2YXIgbWFrZU5vZGUgPSBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uKG5vZGUpOwogICAgdmFyIGwgPSBub2RlLmFyZ3MubGVuZ3RoOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7CiAgICAgIHVuZmxhdHRlbmwobm9kZS5hcmdzW2ldKTsKICAgIH0KCiAgICBpZiAobCA+IDIgJiYgaXNBc3NvY2lhdGl2ZShub2RlKSkgewogICAgICB2YXIgY3Vybm9kZSA9IG5vZGUuYXJncy5zaGlmdCgpOwoKICAgICAgd2hpbGUgKG5vZGUuYXJncy5sZW5ndGggPiAwKSB7CiAgICAgICAgY3Vybm9kZSA9IG1ha2VOb2RlKFtjdXJub2RlLCBub2RlLmFyZ3Muc2hpZnQoKV0pOwogICAgICB9CgogICAgICBub2RlLmFyZ3MgPSBjdXJub2RlLmFyZ3M7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uKG5vZGUpIHsKICAgIGlmIChPYmplY3QoaXNbIkIiIC8qIGlzT3BlcmF0b3JOb2RlICovXSkobm9kZSkpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhcmdzKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIGFyZ3MsIG5vZGUuaW1wbGljaXQpOwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpOwogICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJncykgewogICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25Ob2RlKG5ldyBTeW1ib2xOb2RlKG5vZGUubmFtZSksIGFyZ3MpOwogICAgICB9OwogICAgfQogIH0KCiAgcmV0dXJuIHsKICAgIGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb246IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24sCiAgICBpc0NvbW11dGF0aXZlOiBpc0NvbW11dGF0aXZlLAogICAgaXNBc3NvY2lhdGl2ZTogaXNBc3NvY2lhdGl2ZSwKICAgIGZsYXR0ZW46IGZsYXR0ZW4sCiAgICBhbGxDaGlsZHJlbjogYWxsQ2hpbGRyZW4sCiAgICB1bmZsYXR0ZW5yOiB1bmZsYXR0ZW5yLAogICAgdW5mbGF0dGVubDogdW5mbGF0dGVubAogIH07Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hbGdlYnJhL3NpbXBsaWZ5L3NpbXBsaWZ5Q29yZS5qcwoKCnZhciBzaW1wbGlmeUNvcmVfbmFtZSA9ICdzaW1wbGlmeUNvcmUnOwp2YXIgc2ltcGxpZnlDb3JlX2RlcGVuZGVuY2llcyA9IFsnZXF1YWwnLCAnaXNaZXJvJywgJ2FkZCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseScsICdkaXZpZGUnLCAncG93JywgJ0NvbnN0YW50Tm9kZScsICdPcGVyYXRvck5vZGUnLCAnRnVuY3Rpb25Ob2RlJywgJ1BhcmVudGhlc2lzTm9kZSddOwp2YXIgY3JlYXRlU2ltcGxpZnlDb3JlID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoc2ltcGxpZnlDb3JlX25hbWUsIHNpbXBsaWZ5Q29yZV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIGVxdWFsID0gX3JlZi5lcXVhbCwKICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sCiAgICAgIGFkZCA9IF9yZWYuYWRkLAogICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsCiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSwKICAgICAgZGl2aWRlID0gX3JlZi5kaXZpZGUsCiAgICAgIHBvdyA9IF9yZWYucG93LAogICAgICBDb25zdGFudE5vZGUgPSBfcmVmLkNvbnN0YW50Tm9kZSwKICAgICAgT3BlcmF0b3JOb2RlID0gX3JlZi5PcGVyYXRvck5vZGUsCiAgICAgIEZ1bmN0aW9uTm9kZSA9IF9yZWYuRnVuY3Rpb25Ob2RlLAogICAgICBQYXJlbnRoZXNpc05vZGUgPSBfcmVmLlBhcmVudGhlc2lzTm9kZTsKICB2YXIgbm9kZTAgPSBuZXcgQ29uc3RhbnROb2RlKDApOwogIHZhciBub2RlMSA9IG5ldyBDb25zdGFudE5vZGUoMSk7CiAgLyoqCiAgICogc2ltcGxpZnlDb3JlKCkgcGVyZm9ybXMgc2luZ2xlIHBhc3Mgc2ltcGxpZmljYXRpb24gc3VpdGFibGUgZm9yCiAgICogYXBwbGljYXRpb25zIHJlcXVpcmluZyB1bHRpbWF0ZSBwZXJmb3JtYW5jZS4gSW4gY29udHJhc3QsIHNpbXBsaWZ5KCkKICAgKiBleHRlbmRzIHNpbXBsaWZ5Q29yZSgpIHdpdGggYWRkaXRpb25hbCBwYXNzZXMgdG8gcHJvdmlkZSBkZWVwZXIKICAgKiBzaW1wbGlmaWNhdGlvbi4KICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBzaW1wbGlmeS5zaW1wbGlmeUNvcmUoZXhwcikKICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgIGNvbnN0IGYgPSBtYXRoLnBhcnNlKCcyICogMSAqIHggXiAoMiAtIDEpJykKICAgKiAgICAgbWF0aC5zaW1wbGlmeS5zaW1waWZ5Q29yZShmKSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9kZSB7MiAqIHh9CiAgICogICAgIG1hdGguc2ltcGxpZnkoJzIgKiAxICogeCBeICgyIC0gMSknLCBbbWF0aC5zaW1wbGlmeS5zaW1waWZ5Q29yZV0pIC8vIE5vZGUgezIgKiB4fQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICAgZGVyaXZhdGl2ZQogICAqCiAgICogQHBhcmFtIHtOb2RlfSBub2RlCiAgICogICAgIFRoZSBleHByZXNzaW9uIHRvIGJlIHNpbXBsaWZpZWQKICAgKi8KCiAgZnVuY3Rpb24gc2ltcGxpZnlDb3JlKG5vZGUpIHsKICAgIGlmIChPYmplY3QoaXNbIkIiIC8qIGlzT3BlcmF0b3JOb2RlICovXSkobm9kZSkgJiYgbm9kZS5pc1VuYXJ5KCkpIHsKICAgICAgdmFyIGEwID0gc2ltcGxpZnlDb3JlKG5vZGUuYXJnc1swXSk7CgogICAgICBpZiAobm9kZS5vcCA9PT0gJysnKSB7CiAgICAgICAgLy8gdW5hcnkgcGx1cwogICAgICAgIHJldHVybiBhMDsKICAgICAgfQoKICAgICAgaWYgKG5vZGUub3AgPT09ICctJykgewogICAgICAgIC8vIHVuYXJ5IG1pbnVzCiAgICAgICAgaWYgKE9iamVjdChpc1siQiIgLyogaXNPcGVyYXRvck5vZGUgKi9dKShhMCkpIHsKICAgICAgICAgIGlmIChhMC5pc1VuYXJ5KCkgJiYgYTAub3AgPT09ICctJykgewogICAgICAgICAgICByZXR1cm4gYTAuYXJnc1swXTsKICAgICAgICAgIH0gZWxzZSBpZiAoYTAuaXNCaW5hcnkoKSAmJiBhMC5mbiA9PT0gJ3N1YnRyYWN0JykgewogICAgICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFthMC5hcmdzWzFdLCBhMC5hcmdzWzBdXSk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShub2RlLm9wLCBub2RlLmZuLCBbYTBdKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChPYmplY3QoaXNbIkIiIC8qIGlzT3BlcmF0b3JOb2RlICovXSkobm9kZSkgJiYgbm9kZS5pc0JpbmFyeSgpKSB7CiAgICAgIHZhciBfYSA9IHNpbXBsaWZ5Q29yZShub2RlLmFyZ3NbMF0pOwoKICAgICAgdmFyIGExID0gc2ltcGxpZnlDb3JlKG5vZGUuYXJnc1sxXSk7CgogICAgICBpZiAobm9kZS5vcCA9PT0gJysnKSB7CiAgICAgICAgaWYgKE9iamVjdChpc1sibCIgLyogaXNDb25zdGFudE5vZGUgKi9dKShfYSkpIHsKICAgICAgICAgIGlmIChpc1plcm8oX2EudmFsdWUpKSB7CiAgICAgICAgICAgIHJldHVybiBhMTsKICAgICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0KGlzWyJsIiAvKiBpc0NvbnN0YW50Tm9kZSAqL10pKGExKSkgewogICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShhZGQoX2EudmFsdWUsIGExLnZhbHVlKSk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoT2JqZWN0KGlzWyJsIiAvKiBpc0NvbnN0YW50Tm9kZSAqL10pKGExKSAmJiBpc1plcm8oYTEudmFsdWUpKSB7CiAgICAgICAgICByZXR1cm4gX2E7CiAgICAgICAgfQoKICAgICAgICBpZiAoT2JqZWN0KGlzWyJCIiAvKiBpc09wZXJhdG9yTm9kZSAqL10pKGExKSAmJiBhMS5pc1VuYXJ5KCkgJiYgYTEub3AgPT09ICctJykgewogICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbX2EsIGExLmFyZ3NbMF1dKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIGExID8gW19hLCBhMV0gOiBbX2FdKTsKICAgICAgfSBlbHNlIGlmIChub2RlLm9wID09PSAnLScpIHsKICAgICAgICBpZiAoT2JqZWN0KGlzWyJsIiAvKiBpc0NvbnN0YW50Tm9kZSAqL10pKF9hKSAmJiBhMSkgewogICAgICAgICAgaWYgKE9iamVjdChpc1sibCIgLyogaXNDb25zdGFudE5vZGUgKi9dKShhMSkpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudE5vZGUoc3VidHJhY3QoX2EudmFsdWUsIGExLnZhbHVlKSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGlzWmVybyhfYS52YWx1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJy0nLCAndW5hcnlNaW51cycsIFthMV0pOwogICAgICAgICAgfQogICAgICAgIH0gLy8gaWYgKG5vZGUuZm4gPT09ICJzdWJ0cmFjdCIgJiYgbm9kZS5hcmdzLmxlbmd0aCA9PT0gMikgewoKCiAgICAgICAgaWYgKG5vZGUuZm4gPT09ICdzdWJ0cmFjdCcpIHsKICAgICAgICAgIGlmIChPYmplY3QoaXNbImwiIC8qIGlzQ29uc3RhbnROb2RlICovXSkoYTEpICYmIGlzWmVybyhhMS52YWx1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuIF9hOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChPYmplY3QoaXNbIkIiIC8qIGlzT3BlcmF0b3JOb2RlICovXSkoYTEpICYmIGExLmlzVW5hcnkoKSAmJiBhMS5vcCA9PT0gJy0nKSB7CiAgICAgICAgICAgIHJldHVybiBzaW1wbGlmeUNvcmUobmV3IE9wZXJhdG9yTm9kZSgnKycsICdhZGQnLCBbX2EsIGExLmFyZ3NbMF1dKSk7CiAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW19hLCBhMV0pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChub2RlLm9wID09PSAnKicpIHsKICAgICAgICBpZiAoT2JqZWN0KGlzWyJsIiAvKiBpc0NvbnN0YW50Tm9kZSAqL10pKF9hKSkgewogICAgICAgICAgaWYgKGlzWmVybyhfYS52YWx1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuIG5vZGUwOwogICAgICAgICAgfSBlbHNlIGlmIChlcXVhbChfYS52YWx1ZSwgMSkpIHsKICAgICAgICAgICAgcmV0dXJuIGExOwogICAgICAgICAgfSBlbHNlIGlmIChPYmplY3QoaXNbImwiIC8qIGlzQ29uc3RhbnROb2RlICovXSkoYTEpKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKG11bHRpcGx5KF9hLnZhbHVlLCBhMS52YWx1ZSkpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKE9iamVjdChpc1sibCIgLyogaXNDb25zdGFudE5vZGUgKi9dKShhMSkpIHsKICAgICAgICAgIGlmIChpc1plcm8oYTEudmFsdWUpKSB7CiAgICAgICAgICAgIHJldHVybiBub2RlMDsKICAgICAgICAgIH0gZWxzZSBpZiAoZXF1YWwoYTEudmFsdWUsIDEpKSB7CiAgICAgICAgICAgIHJldHVybiBfYTsKICAgICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0KGlzWyJCIiAvKiBpc09wZXJhdG9yTm9kZSAqL10pKF9hKSAmJiBfYS5pc0JpbmFyeSgpICYmIF9hLm9wID09PSBub2RlLm9wKSB7CiAgICAgICAgICAgIHZhciBhMDAgPSBfYS5hcmdzWzBdOwoKICAgICAgICAgICAgaWYgKE9iamVjdChpc1sibCIgLyogaXNDb25zdGFudE5vZGUgKi9dKShhMDApKSB7CiAgICAgICAgICAgICAgdmFyIGEwMGExID0gbmV3IENvbnN0YW50Tm9kZShtdWx0aXBseShhMDAudmFsdWUsIGExLnZhbHVlKSk7CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW2EwMGExLCBfYS5hcmdzWzFdXSwgbm9kZS5pbXBsaWNpdCk7IC8vIGNvbnN0YW50cyBvbiBsZWZ0CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShub2RlLm9wLCBub2RlLmZuLCBbYTEsIF9hXSwgbm9kZS5pbXBsaWNpdCk7IC8vIGNvbnN0YW50cyBvbiBsZWZ0CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShub2RlLm9wLCBub2RlLmZuLCBbX2EsIGExXSwgbm9kZS5pbXBsaWNpdCk7CiAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PT0gJy8nKSB7CiAgICAgICAgaWYgKE9iamVjdChpc1sibCIgLyogaXNDb25zdGFudE5vZGUgKi9dKShfYSkpIHsKICAgICAgICAgIGlmIChpc1plcm8oX2EudmFsdWUpKSB7CiAgICAgICAgICAgIHJldHVybiBub2RlMDsKICAgICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0KGlzWyJsIiAvKiBpc0NvbnN0YW50Tm9kZSAqL10pKGExKSAmJiAoZXF1YWwoYTEudmFsdWUsIDEpIHx8IGVxdWFsKGExLnZhbHVlLCAyKSB8fCBlcXVhbChhMS52YWx1ZSwgNCkpKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKGRpdmlkZShfYS52YWx1ZSwgYTEudmFsdWUpKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfYSwgYTFdKTsKICAgICAgfSBlbHNlIGlmIChub2RlLm9wID09PSAnXicpIHsKICAgICAgICBpZiAoT2JqZWN0KGlzWyJsIiAvKiBpc0NvbnN0YW50Tm9kZSAqL10pKGExKSkgewogICAgICAgICAgaWYgKGlzWmVybyhhMS52YWx1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuIG5vZGUxOwogICAgICAgICAgfSBlbHNlIGlmIChlcXVhbChhMS52YWx1ZSwgMSkpIHsKICAgICAgICAgICAgcmV0dXJuIF9hOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKE9iamVjdChpc1sibCIgLyogaXNDb25zdGFudE5vZGUgKi9dKShfYSkpIHsKICAgICAgICAgICAgICAvLyBmb2xkIGNvbnN0YW50CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudE5vZGUocG93KF9hLnZhbHVlLCBhMS52YWx1ZSkpOwogICAgICAgICAgICB9IGVsc2UgaWYgKE9iamVjdChpc1siQiIgLyogaXNPcGVyYXRvck5vZGUgKi9dKShfYSkgJiYgX2EuaXNCaW5hcnkoKSAmJiBfYS5vcCA9PT0gJ14nKSB7CiAgICAgICAgICAgICAgdmFyIGEwMSA9IF9hLmFyZ3NbMV07CgogICAgICAgICAgICAgIGlmIChPYmplY3QoaXNbImwiIC8qIGlzQ29uc3RhbnROb2RlICovXSkoYTAxKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW19hLmFyZ3NbMF0sIG5ldyBDb25zdGFudE5vZGUobXVsdGlwbHkoYTAxLnZhbHVlLCBhMS52YWx1ZSkpXSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShub2RlLm9wLCBub2RlLmZuLCBbX2EsIGExXSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoT2JqZWN0KGlzWyJDIiAvKiBpc1BhcmVudGhlc2lzTm9kZSAqL10pKG5vZGUpKSB7CiAgICAgIHZhciBjID0gc2ltcGxpZnlDb3JlKG5vZGUuY29udGVudCk7CgogICAgICBpZiAoT2JqZWN0KGlzWyJDIiAvKiBpc1BhcmVudGhlc2lzTm9kZSAqL10pKGMpIHx8IE9iamVjdChpc1siSiIgLyogaXNTeW1ib2xOb2RlICovXSkoYykgfHwgT2JqZWN0KGlzWyJsIiAvKiBpc0NvbnN0YW50Tm9kZSAqL10pKGMpKSB7CiAgICAgICAgcmV0dXJuIGM7CiAgICAgIH0KCiAgICAgIHJldHVybiBuZXcgUGFyZW50aGVzaXNOb2RlKGMpOwogICAgfSBlbHNlIGlmIChPYmplY3QoaXNbInIiIC8qIGlzRnVuY3Rpb25Ob2RlICovXSkobm9kZSkpIHsKICAgICAgdmFyIGFyZ3MgPSBub2RlLmFyZ3MubWFwKHNpbXBsaWZ5Q29yZSkubWFwKGZ1bmN0aW9uIChhcmcpIHsKICAgICAgICByZXR1cm4gT2JqZWN0KGlzWyJDIiAvKiBpc1BhcmVudGhlc2lzTm9kZSAqL10pKGFyZykgPyBhcmcuY29udGVudCA6IGFyZzsKICAgICAgfSk7CiAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25Ob2RlKHNpbXBsaWZ5Q29yZShub2RlLmZuKSwgYXJncyk7CiAgICB9IGVsc2Ugey8vIGNhbm5vdCBzaW1wbGlmeQogICAgfQoKICAgIHJldHVybiBub2RlOwogIH0KCiAgcmV0dXJuIHNpbXBsaWZ5Q29yZTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkvc2ltcGxpZnlDb25zdGFudC5qcwovLyBUT0RPIHRoaXMgY291bGQgYmUgaW1wcm92ZWQgYnkgc2ltcGxpZnlpbmcgc2VwZXJhdGVkIGNvbnN0YW50cyB1bmRlciBhc3NvY2lhdGl2ZSBhbmQgY29tbXV0YXRpdmUgb3BlcmF0b3JzCgoKCgp2YXIgc2ltcGxpZnlDb25zdGFudF9uYW1lID0gJ3NpbXBsaWZ5Q29uc3RhbnQnOwp2YXIgc2ltcGxpZnlDb25zdGFudF9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRoV2l0aFRyYW5zZm9ybScsICc/ZnJhY3Rpb24nLCAnP2JpZ251bWJlcicsICdDb25zdGFudE5vZGUnLCAnT3BlcmF0b3JOb2RlJywgJ0Z1bmN0aW9uTm9kZScsICdTeW1ib2xOb2RlJ107CnZhciBjcmVhdGVTaW1wbGlmeUNvbnN0YW50ID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoc2ltcGxpZnlDb25zdGFudF9uYW1lLCBzaW1wbGlmeUNvbnN0YW50X2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBjb25maWcgPSBfcmVmLmNvbmZpZywKICAgICAgbWF0aFdpdGhUcmFuc2Zvcm0gPSBfcmVmLm1hdGhXaXRoVHJhbnNmb3JtLAogICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb24sCiAgICAgIGJpZ251bWJlciA9IF9yZWYuYmlnbnVtYmVyLAogICAgICBDb25zdGFudE5vZGUgPSBfcmVmLkNvbnN0YW50Tm9kZSwKICAgICAgT3BlcmF0b3JOb2RlID0gX3JlZi5PcGVyYXRvck5vZGUsCiAgICAgIEZ1bmN0aW9uTm9kZSA9IF9yZWYuRnVuY3Rpb25Ob2RlLAogICAgICBTeW1ib2xOb2RlID0gX3JlZi5TeW1ib2xOb2RlOwoKICB2YXIgX2NyZWF0ZVV0aWwgPSBjcmVhdGVVdGlsKHsKICAgIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLAogICAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsCiAgICBTeW1ib2xOb2RlOiBTeW1ib2xOb2RlCiAgfSksCiAgICAgIGlzQ29tbXV0YXRpdmUgPSBfY3JlYXRlVXRpbC5pc0NvbW11dGF0aXZlLAogICAgICBpc0Fzc29jaWF0aXZlID0gX2NyZWF0ZVV0aWwuaXNBc3NvY2lhdGl2ZSwKICAgICAgYWxsQ2hpbGRyZW4gPSBfY3JlYXRlVXRpbC5hbGxDaGlsZHJlbiwKICAgICAgY3JlYXRlTWFrZU5vZGVGdW5jdGlvbiA9IF9jcmVhdGVVdGlsLmNyZWF0ZU1ha2VOb2RlRnVuY3Rpb247CgogIGZ1bmN0aW9uIHNpbXBsaWZ5Q29uc3RhbnQoZXhwciwgb3B0aW9ucykgewogICAgdmFyIHJlcyA9IGZvbGRGcmFjdGlvbihleHByLCBvcHRpb25zKTsKICAgIHJldHVybiBPYmplY3QoaXNbInciIC8qIGlzTm9kZSAqL10pKHJlcykgPyByZXMgOiBfdG9Ob2RlKHJlcyk7CiAgfQoKICBmdW5jdGlvbiBfZXZhbChmbm5hbWUsIGFyZ3MsIG9wdGlvbnMpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiBfdG9OdW1iZXIobWF0aFdpdGhUcmFuc2Zvcm1bZm5uYW1lXS5hcHBseShudWxsLCBhcmdzKSwgb3B0aW9ucyk7CiAgICB9IGNhdGNoIChpZ25vcmUpIHsKICAgICAgLy8gc29tZXRpbWVzIHRoZSBpbXBsaWNpdCB0eXBlIGNvbnZlcnNpb24gY2F1c2VzIHRoZSBldmFsdWF0aW9uIHRvIGZhaWwsIHNvIHdlJ2xsIHRyeSBhZ2FpbiBhZnRlciByZW1vdmluZyBGcmFjdGlvbnMKICAgICAgYXJncyA9IGFyZ3MubWFwKGZ1bmN0aW9uICh4KSB7CiAgICAgICAgaWYgKE9iamVjdChpc1sibyIgLyogaXNGcmFjdGlvbiAqL10pKHgpKSB7CiAgICAgICAgICByZXR1cm4geC52YWx1ZU9mKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4geDsKICAgICAgfSk7CiAgICAgIHJldHVybiBfdG9OdW1iZXIobWF0aFdpdGhUcmFuc2Zvcm1bZm5uYW1lXS5hcHBseShudWxsLCBhcmdzKSwgb3B0aW9ucyk7CiAgICB9CiAgfQoKICB2YXIgX3RvTm9kZSA9IHR5cGVkKHsKICAgIEZyYWN0aW9uOiBfZnJhY3Rpb25Ub05vZGUsCiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcihuKSB7CiAgICAgIGlmIChuIDwgMCkgewogICAgICAgIHJldHVybiB1bmFyeU1pbnVzTm9kZShuZXcgQ29uc3RhbnROb2RlKC1uKSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKG4pOwogICAgfSwKICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKG4pIHsKICAgICAgaWYgKG4gPCAwKSB7CiAgICAgICAgcmV0dXJuIHVuYXJ5TWludXNOb2RlKG5ldyBDb25zdGFudE5vZGUoLW4pKTsKICAgICAgfQoKICAgICAgcmV0dXJuIG5ldyBDb25zdGFudE5vZGUobik7IC8vIG9sZCBwYXJhbWV0ZXJzOiAobi50b1N0cmluZygpLCAnbnVtYmVyJykKICAgIH0sCiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHMpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCBDb21wbGV4IG51bWJlciB0byBOb2RlJyk7CiAgICB9CiAgfSk7IC8vIGNvbnZlcnQgYSBudW1iZXIgdG8gYSBmcmFjdGlvbiBvbmx5IGlmIGl0IGNhbiBiZSBleHByZXNzZWQgZXhhY3RseQoKCiAgZnVuY3Rpb24gX2V4YWN0RnJhY3Rpb24obiwgb3B0aW9ucykgewogICAgdmFyIGV4YWN0RnJhY3Rpb25zID0gb3B0aW9ucyAmJiBvcHRpb25zLmV4YWN0RnJhY3Rpb25zICE9PSBmYWxzZTsKCiAgICBpZiAoZXhhY3RGcmFjdGlvbnMgJiYgaXNGaW5pdGUobikgJiYgZnJhY3Rpb24pIHsKICAgICAgdmFyIGYgPSBmcmFjdGlvbihuKTsKCiAgICAgIGlmIChmLnZhbHVlT2YoKSA9PT0gbikgewogICAgICAgIHJldHVybiBmOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG47CiAgfSAvLyBDb252ZXJ0IG51bWJlcnMgdG8gYSBwcmVmZXJyZWQgbnVtYmVyIHR5cGUgaW4gcHJlZmVyZW5jZSBvcmRlcjogRnJhY3Rpb24sIG51bWJlciwgQ29tcGxleAogIC8vIEJpZ051bWJlcnMgYXJlIGxlZnQgYWxvbmUKCgogIHZhciBfdG9OdW1iZXIgPSB0eXBlZCh7CiAgICAnc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdPYmplY3Qocywgb3B0aW9ucykgewogICAgICBpZiAoY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicpIHsKICAgICAgICBpZiAoYmlnbnVtYmVyID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgIG5vQmlnbnVtYmVyKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYmlnbnVtYmVyKHMpOwogICAgICB9IGVsc2UgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdGcmFjdGlvbicpIHsKICAgICAgICBpZiAoZnJhY3Rpb24gPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgbm9GcmFjdGlvbigpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZyYWN0aW9uKHMpOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBuID0gcGFyc2VGbG9hdChzKTsKICAgICAgICByZXR1cm4gX2V4YWN0RnJhY3Rpb24obiwgb3B0aW9ucyk7CiAgICAgIH0KICAgIH0sCiAgICAnRnJhY3Rpb24sIE9iamVjdCc6IGZ1bmN0aW9uIEZyYWN0aW9uT2JqZWN0KHMsIG9wdGlvbnMpIHsKICAgICAgcmV0dXJuIHM7CiAgICB9LAogICAgLy8gd2UgZG9uJ3QgbmVlZCBvcHRpb25zIGhlcmUKICAgICdCaWdOdW1iZXIsIE9iamVjdCc6IGZ1bmN0aW9uIEJpZ051bWJlck9iamVjdChzLCBvcHRpb25zKSB7CiAgICAgIHJldHVybiBzOwogICAgfSwKICAgIC8vIHdlIGRvbid0IG5lZWQgb3B0aW9ucyBoZXJlCiAgICAnbnVtYmVyLCBPYmplY3QnOiBmdW5jdGlvbiBudW1iZXJPYmplY3Qocywgb3B0aW9ucykgewogICAgICByZXR1cm4gX2V4YWN0RnJhY3Rpb24ocywgb3B0aW9ucyk7CiAgICB9LAogICAgJ0NvbXBsZXgsIE9iamVjdCc6IGZ1bmN0aW9uIENvbXBsZXhPYmplY3Qocywgb3B0aW9ucykgewogICAgICBpZiAocy5pbSAhPT0gMCkgewogICAgICAgIHJldHVybiBzOwogICAgICB9CgogICAgICByZXR1cm4gX2V4YWN0RnJhY3Rpb24ocy5yZSwgb3B0aW9ucyk7CiAgICB9CiAgfSk7CgogIGZ1bmN0aW9uIHVuYXJ5TWludXNOb2RlKG4pIHsKICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3VuYXJ5TWludXMnLCBbbl0pOwogIH0KCiAgZnVuY3Rpb24gX2ZyYWN0aW9uVG9Ob2RlKGYpIHsKICAgIHZhciBuOwogICAgdmFyIHZuID0gZi5zICogZi5uOwoKICAgIGlmICh2biA8IDApIHsKICAgICAgbiA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAndW5hcnlNaW51cycsIFtuZXcgQ29uc3RhbnROb2RlKC12bildKTsKICAgIH0gZWxzZSB7CiAgICAgIG4gPSBuZXcgQ29uc3RhbnROb2RlKHZuKTsKICAgIH0KCiAgICBpZiAoZi5kID09PSAxKSB7CiAgICAgIHJldHVybiBuOwogICAgfQoKICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtuLCBuZXcgQ29uc3RhbnROb2RlKGYuZCldKTsKICB9CiAgLyoKICAgKiBDcmVhdGUgYSBiaW5hcnkgdHJlZSBmcm9tIGEgbGlzdCBvZiBGcmFjdGlvbnMgYW5kIE5vZGVzLgogICAqIFRyaWVzIHRvIGZvbGQgRnJhY3Rpb25zIGJ5IGV2YWx1YXRpbmcgdGhlbSB1bnRpbCB0aGUgZmlyc3QgTm9kZSBpbiB0aGUgbGlzdCBpcyBoaXQsIHNvCiAgICogYGFyZ3NgIHNob3VsZCBiZSBzb3J0ZWQgdG8gaGF2ZSB0aGUgRnJhY3Rpb25zIGF0IHRoZSBzdGFydCAoaWYgdGhlIG9wZXJhdG9yIGlzIGNvbW11dGF0aXZlKS4KICAgKiBAcGFyYW0gYXJncyAtIGxpc3Qgb2YgRnJhY3Rpb25zIGFuZCBOb2RlcwogICAqIEBwYXJhbSBmbiAtIGV2YWx1YXRvciBmb3IgdGhlIGJpbmFyeSBvcGVyYXRpb24gZXZhbHVhdG9yIHRoYXQgYWNjZXB0cyB0d28gRnJhY3Rpb25zCiAgICogQHBhcmFtIG1ha2VOb2RlIC0gY3JlYXRlcyBhIGJpbmFyeSBPcGVyYXRvck5vZGUvRnVuY3Rpb25Ob2RlIGZyb20gYSBsaXN0IG9mIGNoaWxkIE5vZGVzCiAgICogaWYgYXJncy5sZW5ndGggaXMgMSwgcmV0dXJucyBhcmdzWzBdCiAgICogQHJldHVybiAtIEVpdGhlciBhIE5vZGUgcmVwcmVzZW50aW5nIGEgYmluYXJ5IGV4cHJlc3Npb24gb3IgRnJhY3Rpb24KICAgKi8KCgogIGZ1bmN0aW9uIGZvbGRPcChmbiwgYXJncywgbWFrZU5vZGUsIG9wdGlvbnMpIHsKICAgIHJldHVybiBhcmdzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikgewogICAgICBpZiAoIU9iamVjdChpc1sidyIgLyogaXNOb2RlICovXSkoYSkgJiYgIU9iamVjdChpc1sidyIgLyogaXNOb2RlICovXSkoYikpIHsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIF9ldmFsKGZuLCBbYSwgYl0sIG9wdGlvbnMpOwogICAgICAgIH0gY2F0Y2ggKGlnbm9yZWFuZGNvbnRpbnVlKSB7fQoKICAgICAgICBhID0gX3RvTm9kZShhKTsKICAgICAgICBiID0gX3RvTm9kZShiKTsKICAgICAgfSBlbHNlIGlmICghT2JqZWN0KGlzWyJ3IiAvKiBpc05vZGUgKi9dKShhKSkgewogICAgICAgIGEgPSBfdG9Ob2RlKGEpOwogICAgICB9IGVsc2UgaWYgKCFPYmplY3QoaXNbInciIC8qIGlzTm9kZSAqL10pKGIpKSB7CiAgICAgICAgYiA9IF90b05vZGUoYik7CiAgICAgIH0KCiAgICAgIHJldHVybiBtYWtlTm9kZShbYSwgYl0pOwogICAgfSk7CiAgfSAvLyBkZXN0cm95cyB0aGUgb3JpZ2luYWwgbm9kZSBhbmQgcmV0dXJucyBhIGZvbGRlZCBvbmUKCgogIGZ1bmN0aW9uIGZvbGRGcmFjdGlvbihub2RlLCBvcHRpb25zKSB7CiAgICBzd2l0Y2ggKG5vZGUudHlwZSkgewogICAgICBjYXNlICdTeW1ib2xOb2RlJzoKICAgICAgICByZXR1cm4gbm9kZTsKCiAgICAgIGNhc2UgJ0NvbnN0YW50Tm9kZSc6CiAgICAgICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlID09PSAnbnVtYmVyJyB8fCAhaXNOYU4obm9kZS52YWx1ZSkpIHsKICAgICAgICAgIHJldHVybiBfdG9OdW1iZXIobm9kZS52YWx1ZSwgb3B0aW9ucyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbm9kZTsKCiAgICAgIGNhc2UgJ0Z1bmN0aW9uTm9kZSc6CiAgICAgICAgaWYgKG1hdGhXaXRoVHJhbnNmb3JtW25vZGUubmFtZV0gJiYgbWF0aFdpdGhUcmFuc2Zvcm1bbm9kZS5uYW1lXS5yYXdBcmdzKSB7CiAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICB9CgogICAgICAgIHsKICAgICAgICAgIC8vIFByb2Nlc3Mgb3BlcmF0b3JzIGFzIE9wZXJhdG9yTm9kZQogICAgICAgICAgdmFyIG9wZXJhdG9yRnVuY3Rpb25zID0gWydhZGQnLCAnbXVsdGlwbHknXTsKCiAgICAgICAgICBpZiAob3BlcmF0b3JGdW5jdGlvbnMuaW5kZXhPZihub2RlLm5hbWUpID09PSAtMSkgewogICAgICAgICAgICB2YXIgYXJncyA9IG5vZGUuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykgewogICAgICAgICAgICAgIHJldHVybiBmb2xkRnJhY3Rpb24oYXJnLCBvcHRpb25zKTsKICAgICAgICAgICAgfSk7IC8vIElmIGFsbCBhcmdzIGFyZSBudW1iZXJzCgogICAgICAgICAgICBpZiAoIWFyZ3Muc29tZShpc1sidyIgLyogaXNOb2RlICovXSkpIHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgcmV0dXJuIF9ldmFsKG5vZGUubmFtZSwgYXJncywgb3B0aW9ucyk7CiAgICAgICAgICAgICAgfSBjYXRjaCAoaWdub3JlYW5kY29udGluZSkge30KICAgICAgICAgICAgfSAvLyBDb252ZXJ0IGFsbCBhcmdzIHRvIG5vZGVzIGFuZCBjb25zdHJ1Y3QgYSBzeW1ib2xpYyBmdW5jdGlvbiBjYWxsCgoKICAgICAgICAgICAgYXJncyA9IGFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHsKICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0KGlzWyJ3IiAvKiBpc05vZGUgKi9dKShhcmcpID8gYXJnIDogX3RvTm9kZShhcmcpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbk5vZGUobm9kZS5uYW1lLCBhcmdzKTsKICAgICAgICAgIH0gZWxzZSB7Ly8gdHJlYXQgYXMgb3BlcmF0b3IKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAvKiBmYWxscyB0aHJvdWdoICovCgogICAgICBjYXNlICdPcGVyYXRvck5vZGUnOgogICAgICAgIHsKICAgICAgICAgIHZhciBmbiA9IG5vZGUuZm4udG9TdHJpbmcoKTsKCiAgICAgICAgICB2YXIgX2FyZ3M7CgogICAgICAgICAgdmFyIHJlczsKICAgICAgICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSk7CgogICAgICAgICAgaWYgKE9iamVjdChpc1siQiIgLyogaXNPcGVyYXRvck5vZGUgKi9dKShub2RlKSAmJiBub2RlLmlzVW5hcnkoKSkgewogICAgICAgICAgICBfYXJncyA9IFtmb2xkRnJhY3Rpb24obm9kZS5hcmdzWzBdLCBvcHRpb25zKV07CgogICAgICAgICAgICBpZiAoIU9iamVjdChpc1sidyIgLyogaXNOb2RlICovXSkoX2FyZ3NbMF0pKSB7CiAgICAgICAgICAgICAgcmVzID0gX2V2YWwoZm4sIF9hcmdzLCBvcHRpb25zKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICByZXMgPSBtYWtlTm9kZShfYXJncyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoaXNBc3NvY2lhdGl2ZShub2RlKSkgewogICAgICAgICAgICBfYXJncyA9IGFsbENoaWxkcmVuKG5vZGUpOwogICAgICAgICAgICBfYXJncyA9IF9hcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGZvbGRGcmFjdGlvbihhcmcsIG9wdGlvbnMpOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIGlmIChpc0NvbW11dGF0aXZlKGZuKSkgewogICAgICAgICAgICAgIC8vIGNvbW11dGF0aXZlIGJpbmFyeSBvcGVyYXRvcgogICAgICAgICAgICAgIHZhciBjb25zdHMgPSBbXTsKICAgICAgICAgICAgICB2YXIgdmFycyA9IFtdOwoKICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9hcmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAoIU9iamVjdChpc1sidyIgLyogaXNOb2RlICovXSkoX2FyZ3NbaV0pKSB7CiAgICAgICAgICAgICAgICAgIGNvbnN0cy5wdXNoKF9hcmdzW2ldKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHZhcnMucHVzaChfYXJnc1tpXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBpZiAoY29uc3RzLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgICAgIHJlcyA9IGZvbGRPcChmbiwgY29uc3RzLCBtYWtlTm9kZSwgb3B0aW9ucyk7CiAgICAgICAgICAgICAgICB2YXJzLnVuc2hpZnQocmVzKTsKICAgICAgICAgICAgICAgIHJlcyA9IGZvbGRPcChmbiwgdmFycywgbWFrZU5vZGUsIG9wdGlvbnMpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyB3ZSB3b24ndCBjaGFuZ2UgdGhlIGNoaWxkcmVuIG9yZGVyIHNpbmNlIGl0J3Mgbm90IG5lY2Nlc3NhcnkKICAgICAgICAgICAgICAgIHJlcyA9IGZvbGRPcChmbiwgX2FyZ3MsIG1ha2VOb2RlLCBvcHRpb25zKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy8gbm9uLWNvbW11dGF0aXZlIGJpbmFyeSBvcGVyYXRvcgogICAgICAgICAgICAgIHJlcyA9IGZvbGRPcChmbiwgX2FyZ3MsIG1ha2VOb2RlLCBvcHRpb25zKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gbm9uLWFzc29jaWF0aXZlIGJpbmFyeSBvcGVyYXRvcgogICAgICAgICAgICBfYXJncyA9IG5vZGUuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykgewogICAgICAgICAgICAgIHJldHVybiBmb2xkRnJhY3Rpb24oYXJnLCBvcHRpb25zKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJlcyA9IGZvbGRPcChmbiwgX2FyZ3MsIG1ha2VOb2RlLCBvcHRpb25zKTsKICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gcmVzOwogICAgICAgIH0KCiAgICAgIGNhc2UgJ1BhcmVudGhlc2lzTm9kZSc6CiAgICAgICAgLy8gcmVtb3ZlIHRoZSB1bmVjY2Vzc2FyeSBwYXJlbnRoZXNpcwogICAgICAgIHJldHVybiBmb2xkRnJhY3Rpb24obm9kZS5jb250ZW50LCBvcHRpb25zKTsKCiAgICAgIGNhc2UgJ0FjY2Vzc29yTm9kZSc6CiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KCiAgICAgIGNhc2UgJ0FycmF5Tm9kZSc6CiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KCiAgICAgIGNhc2UgJ0Fzc2lnbm1lbnROb2RlJzoKICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwoKICAgICAgY2FzZSAnQmxvY2tOb2RlJzoKICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLwoKICAgICAgY2FzZSAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSc6CiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KCiAgICAgIGNhc2UgJ0luZGV4Tm9kZSc6CiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KCiAgICAgIGNhc2UgJ09iamVjdE5vZGUnOgogICAgICAvKiBmYWxscyB0aHJvdWdoICovCgogICAgICBjYXNlICdSYW5nZU5vZGUnOgogICAgICAvKiBmYWxscyB0aHJvdWdoICovCgogICAgICBjYXNlICdDb25kaXRpb25hbE5vZGUnOgogICAgICAvKiBmYWxscyB0aHJvdWdoICovCgogICAgICBkZWZhdWx0OgogICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5pbXBsZW1lbnRlZCBub2RlIHR5cGUgaW4gc2ltcGxpZnlDb25zdGFudDogIi5jb25jYXQobm9kZS50eXBlKSk7CiAgICB9CiAgfQoKICByZXR1cm4gc2ltcGxpZnlDb25zdGFudDsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkvcmVzb2x2ZS5qcwoKCnZhciByZXNvbHZlX25hbWUgPSAncmVzb2x2ZSc7CnZhciByZXNvbHZlX2RlcGVuZGVuY2llcyA9IFsncGFyc2UnLCAnRnVuY3Rpb25Ob2RlJywgJ09wZXJhdG9yTm9kZScsICdQYXJlbnRoZXNpc05vZGUnXTsKdmFyIGNyZWF0ZVJlc29sdmUgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShyZXNvbHZlX25hbWUsIHJlc29sdmVfZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciBwYXJzZSA9IF9yZWYucGFyc2UsCiAgICAgIEZ1bmN0aW9uTm9kZSA9IF9yZWYuRnVuY3Rpb25Ob2RlLAogICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSwKICAgICAgUGFyZW50aGVzaXNOb2RlID0gX3JlZi5QYXJlbnRoZXNpc05vZGU7CgogIC8qKgogICAqIHJlc29sdmUoZXhwciwgc2NvcGUpIHJlcGxhY2VzIHZhcmlhYmxlIG5vZGVzIHdpdGggdGhlaXIgc2NvcGVkIHZhbHVlcwogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIHNpbXBsaWZ5LnJlc29sdmUoZXhwciwgc2NvcGUpCiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqICAgICBtYXRoLnNpbXBsaWZ5LnJlc29sdmUoJ3ggKyB5Jywge3g6MSwgeToyfSkgICAgICAgICAgIC8vIE5vZGUgezEgKyAyfQogICAqICAgICBtYXRoLnNpbXBsaWZ5LnJlc29sdmUobWF0aC5wYXJzZSgneCt5JyksIHt4OjEsIHk6Mn0pIC8vIE5vZGUgezEgKyAyfQogICAqICAgICBtYXRoLnNpbXBsaWZ5KCd4K3knLCB7eDoyLCB5Oid4K3gnfSkudG9TdHJpbmcoKSAgICAgIC8vICI2IgogICAqCiAgICogQHBhcmFtIHtOb2RlfSBub2RlCiAgICogICAgIFRoZSBleHByZXNzaW9uIHRyZWUgdG8gYmUgc2ltcGxpZmllZAogICAqIEBwYXJhbSB7T2JqZWN0fSBzY29wZSB3aXRoIHZhcmlhYmxlcyB0byBiZSByZXNvbHZlZAogICAqLwogIGZ1bmN0aW9uIHJlc29sdmUobm9kZSwgc2NvcGUpIHsKICAgIGlmICghc2NvcGUpIHsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CgogICAgaWYgKE9iamVjdChpc1siSiIgLyogaXNTeW1ib2xOb2RlICovXSkobm9kZSkpIHsKICAgICAgdmFyIHZhbHVlID0gc2NvcGVbbm9kZS5uYW1lXTsKCiAgICAgIGlmIChPYmplY3QoaXNbInciIC8qIGlzTm9kZSAqL10pKHZhbHVlKSkgewogICAgICAgIHJldHVybiByZXNvbHZlKHZhbHVlLCBzY29wZSk7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgewogICAgICAgIHJldHVybiBwYXJzZShTdHJpbmcodmFsdWUpKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChPYmplY3QoaXNbIkIiIC8qIGlzT3BlcmF0b3JOb2RlICovXSkobm9kZSkpIHsKICAgICAgdmFyIGFyZ3MgPSBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHsKICAgICAgICByZXR1cm4gcmVzb2x2ZShhcmcsIHNjb3BlKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIGFyZ3MsIG5vZGUuaW1wbGljaXQpOwogICAgfSBlbHNlIGlmIChPYmplY3QoaXNbIkMiIC8qIGlzUGFyZW50aGVzaXNOb2RlICovXSkobm9kZSkpIHsKICAgICAgcmV0dXJuIG5ldyBQYXJlbnRoZXNpc05vZGUocmVzb2x2ZShub2RlLmNvbnRlbnQsIHNjb3BlKSk7CiAgICB9IGVsc2UgaWYgKE9iamVjdChpc1siciIgLyogaXNGdW5jdGlvbk5vZGUgKi9dKShub2RlKSkgewogICAgICB2YXIgX2FyZ3MgPSBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHsKICAgICAgICByZXR1cm4gcmVzb2x2ZShhcmcsIHNjb3BlKTsKICAgICAgfSk7CgogICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShub2RlLm5hbWUsIF9hcmdzKTsKICAgIH0KCiAgICByZXR1cm4gbm9kZTsKICB9CgogIHJldHVybiByZXNvbHZlOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYWxnZWJyYS9zaW1wbGlmeS5qcwpmdW5jdGlvbiBzaW1wbGlmeV90eXBlb2Yob2JqKSB7ICJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7IGlmICh0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICJzeW1ib2wiKSB7IHNpbXBsaWZ5X3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBzaW1wbGlmeV90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gInN5bWJvbCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBzaW1wbGlmeV90eXBlb2Yob2JqKTsgfQoKCgoKCgoKCnZhciBzaW1wbGlmeV9uYW1lID0gJ3NpbXBsaWZ5JzsKdmFyIHNpbXBsaWZ5X2RlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ3BhcnNlJywgJ2FkZCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseScsICdkaXZpZGUnLCAncG93JywgJ2lzWmVybycsICdlcXVhbCcsICc/ZnJhY3Rpb24nLCAnP2JpZ251bWJlcicsICdtYXRoV2l0aFRyYW5zZm9ybScsICdDb25zdGFudE5vZGUnLCAnRnVuY3Rpb25Ob2RlJywgJ09wZXJhdG9yTm9kZScsICdQYXJlbnRoZXNpc05vZGUnLCAnU3ltYm9sTm9kZSddOwp2YXIgY3JlYXRlU2ltcGxpZnkgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShzaW1wbGlmeV9uYW1lLCBzaW1wbGlmeV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLAogICAgICB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIHBhcnNlID0gX3JlZi5wYXJzZSwKICAgICAgYWRkID0gX3JlZi5hZGQsCiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCwKICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LAogICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSwKICAgICAgcG93ID0gX3JlZi5wb3csCiAgICAgIGlzWmVybyA9IF9yZWYuaXNaZXJvLAogICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsCiAgICAgIGZyYWN0aW9uID0gX3JlZi5mcmFjdGlvbiwKICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsCiAgICAgIG1hdGhXaXRoVHJhbnNmb3JtID0gX3JlZi5tYXRoV2l0aFRyYW5zZm9ybSwKICAgICAgQ29uc3RhbnROb2RlID0gX3JlZi5Db25zdGFudE5vZGUsCiAgICAgIEZ1bmN0aW9uTm9kZSA9IF9yZWYuRnVuY3Rpb25Ob2RlLAogICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSwKICAgICAgUGFyZW50aGVzaXNOb2RlID0gX3JlZi5QYXJlbnRoZXNpc05vZGUsCiAgICAgIFN5bWJvbE5vZGUgPSBfcmVmLlN5bWJvbE5vZGU7CiAgdmFyIHNpbXBsaWZ5Q29uc3RhbnQgPSBjcmVhdGVTaW1wbGlmeUNvbnN0YW50KHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIGNvbmZpZzogY29uZmlnLAogICAgbWF0aFdpdGhUcmFuc2Zvcm06IG1hdGhXaXRoVHJhbnNmb3JtLAogICAgZnJhY3Rpb246IGZyYWN0aW9uLAogICAgYmlnbnVtYmVyOiBiaWdudW1iZXIsCiAgICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSwKICAgIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLAogICAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsCiAgICBTeW1ib2xOb2RlOiBTeW1ib2xOb2RlCiAgfSk7CiAgdmFyIHNpbXBsaWZ5Q29yZSA9IGNyZWF0ZVNpbXBsaWZ5Q29yZSh7CiAgICBlcXVhbDogZXF1YWwsCiAgICBpc1plcm86IGlzWmVybywKICAgIGFkZDogYWRkLAogICAgc3VidHJhY3Q6IHN1YnRyYWN0LAogICAgbXVsdGlwbHk6IG11bHRpcGx5LAogICAgZGl2aWRlOiBkaXZpZGUsCiAgICBwb3c6IHBvdywKICAgIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLAogICAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsCiAgICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSwKICAgIFBhcmVudGhlc2lzTm9kZTogUGFyZW50aGVzaXNOb2RlCiAgfSk7CiAgdmFyIHJlc29sdmUgPSBjcmVhdGVSZXNvbHZlKHsKICAgIHBhcnNlOiBwYXJzZSwKICAgIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLAogICAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsCiAgICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZQogIH0pOwoKICB2YXIgX2NyZWF0ZVV0aWwgPSBjcmVhdGVVdGlsKHsKICAgIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLAogICAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsCiAgICBTeW1ib2xOb2RlOiBTeW1ib2xOb2RlCiAgfSksCiAgICAgIGlzQ29tbXV0YXRpdmUgPSBfY3JlYXRlVXRpbC5pc0NvbW11dGF0aXZlLAogICAgICBpc0Fzc29jaWF0aXZlID0gX2NyZWF0ZVV0aWwuaXNBc3NvY2lhdGl2ZSwKICAgICAgZmxhdHRlbiA9IF9jcmVhdGVVdGlsLmZsYXR0ZW4sCiAgICAgIHVuZmxhdHRlbnIgPSBfY3JlYXRlVXRpbC51bmZsYXR0ZW5yLAogICAgICB1bmZsYXR0ZW5sID0gX2NyZWF0ZVV0aWwudW5mbGF0dGVubCwKICAgICAgY3JlYXRlTWFrZU5vZGVGdW5jdGlvbiA9IF9jcmVhdGVVdGlsLmNyZWF0ZU1ha2VOb2RlRnVuY3Rpb247CiAgLyoqCiAgICogU2ltcGxpZnkgYW4gZXhwcmVzc2lvbiB0cmVlLgogICAqCiAgICogQSBsaXN0IG9mIHJ1bGVzIGFyZSBhcHBsaWVkIHRvIGFuIGV4cHJlc3Npb24sIHJlcGVhdGluZyBvdmVyIHRoZSBsaXN0IHVudGlsCiAgICogbm8gZnVydGhlciBjaGFuZ2VzIGFyZSBtYWRlLgogICAqIEl0J3MgcG9zc2libGUgdG8gcGFzcyBhIGN1c3RvbSBzZXQgb2YgcnVsZXMgdG8gdGhlIGZ1bmN0aW9uIGFzIHNlY29uZAogICAqIGFyZ3VtZW50LiBBIHJ1bGUgY2FuIGJlIHNwZWNpZmllZCBhcyBhbiBvYmplY3QsIHN0cmluZywgb3IgZnVuY3Rpb246CiAgICoKICAgKiAgICAgY29uc3QgcnVsZXMgPSBbCiAgICogICAgICAgeyBsOiAnbjEqbjMgKyBuMipuMycsIHI6ICcobjErbjIpKm4zJyB9LAogICAqICAgICAgICduMSpuMyArIG4yKm4zIC0+IChuMStuMikqbjMnLAogICAqICAgICAgIGZ1bmN0aW9uIChub2RlKSB7CiAgICogICAgICAgICAvLyAuLi4gcmV0dXJuIGEgbmV3IG5vZGUgb3IgcmV0dXJuIHRoZSBub2RlIHVuY2hhbmdlZAogICAqICAgICAgICAgcmV0dXJuIG5vZGUKICAgKiAgICAgICB9CiAgICogICAgIF0KICAgKgogICAqIFN0cmluZyBhbmQgb2JqZWN0IHJ1bGVzIGNvbnNpc3Qgb2YgYSBsZWZ0IGFuZCByaWdodCBwYXR0ZXJuLiBUaGUgbGVmdCBpcwogICAqIHVzZWQgdG8gbWF0Y2ggYWdhaW5zdCB0aGUgZXhwcmVzc2lvbiBhbmQgdGhlIHJpZ2h0IGRldGVybWluZXMgd2hhdCBtYXRjaGVzCiAgICogYXJlIHJlcGxhY2VkIHdpdGguIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBhIHBhdHRlcm4gYW5kIGEgbm9ybWFsCiAgICogZXhwcmVzc2lvbiBpcyB0aGF0IHZhcmlhYmxlcyBzdGFydGluZyB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyBhcmUKICAgKiBpbnRlcnByZXRlZCBhcyB3aWxkY2FyZHM6CiAgICoKICAgKiAtICduJyAtIG1hdGNoZXMgYW55IE5vZGUKICAgKiAtICdjJyAtIG1hdGNoZXMgYW55IENvbnN0YW50Tm9kZQogICAqIC0gJ3YnIC0gbWF0Y2hlcyBhbnkgTm9kZSB0aGF0IGlzIG5vdCBhIENvbnN0YW50Tm9kZQogICAqCiAgICogVGhlIGRlZmF1bHQgbGlzdCBvZiBydWxlcyBpcyBleHBvc2VkIG9uIHRoZSBmdW5jdGlvbiBhcyBgc2ltcGxpZnkucnVsZXNgCiAgICogYW5kIGNhbiBiZSB1c2VkIGFzIGEgYmFzaXMgdG8gYnVpbHQgYSBzZXQgb2YgY3VzdG9tIHJ1bGVzLgogICAqCiAgICogRm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgdGhlb3J5LCBzZWU6CiAgICoKICAgKiAtIFtTdHJhdGVnaWVzIGZvciBzaW1wbGlmeWluZyBtYXRoIGV4cHJlc3Npb25zIChTdGFja292ZXJmbG93KV0oaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzU0MDIyNy9zdHJhdGVnaWVzLWZvci1zaW1wbGlmeWluZy1tYXRoLWV4cHJlc3Npb25zKQogICAqIC0gW1N5bWJvbGljIGNvbXB1dGF0aW9uIC0gU2ltcGxpZmljYXRpb24gKFdpa2lwZWRpYSldKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N5bWJvbGljX2NvbXB1dGF0aW9uI1NpbXBsaWZpY2F0aW9uKQogICAqCiAgICogIEFuIG9wdGlvbmFsIGBvcHRpb25zYCBhcmd1bWVudCBjYW4gYmUgcGFzc2VkIGFzIGxhc3QgYXJndW1lbnQgb2YgYHNpbXBsaWZ5YC4KICAgKiAgVGhlcmUgaXMgY3VycmVudGx5IG9uZSBvcHRpb24gYXZhaWxhYmxlOiBgZXhhY3RGcmFjdGlvbnNgLCBhIGJvb2xlYW4gd2hpY2gKICAgKiAgaXMgYHRydWVgIGJ5IGRlZmF1bHQuCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICAgc2ltcGxpZnkoZXhwcikKICAgKiAgICAgc2ltcGxpZnkoZXhwciwgcnVsZXMpCiAgICogICAgIHNpbXBsaWZ5KGV4cHIsIHJ1bGVzKQogICAqICAgICBzaW1wbGlmeShleHByLCBydWxlcywgc2NvcGUpCiAgICogICAgIHNpbXBsaWZ5KGV4cHIsIHJ1bGVzLCBzY29wZSwgb3B0aW9ucykKICAgKiAgICAgc2ltcGxpZnkoZXhwciwgc2NvcGUpCiAgICogICAgIHNpbXBsaWZ5KGV4cHIsIHNjb3BlLCBvcHRpb25zKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICAgbWF0aC5zaW1wbGlmeSgnMiAqIDEgKiB4IF4gKDIgLSAxKScpICAgICAgLy8gTm9kZSAiMiAqIHgiCiAgICogICAgIG1hdGguc2ltcGxpZnkoJzIgKiAzICogeCcsIHt4OiA0fSkgICAgICAgIC8vIE5vZGUgIjI0IgogICAqICAgICBjb25zdCBmID0gbWF0aC5wYXJzZSgnMiAqIDEgKiB4IF4gKDIgLSAxKScpCiAgICogICAgIG1hdGguc2ltcGxpZnkoZikgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vZGUgIjIgKiB4IgogICAqICAgICBtYXRoLnNpbXBsaWZ5KCcwLjQgKiB4Jywge30sIHtleGFjdEZyYWN0aW9uczogdHJ1ZX0pICAvLyBOb2RlICJ4ICogMiAvIDUiCiAgICogICAgIG1hdGguc2ltcGxpZnkoJzAuNCAqIHgnLCB7fSwge2V4YWN0RnJhY3Rpb25zOiBmYWxzZX0pIC8vIE5vZGUgIjAuNCAqIHgiCiAgICoKICAgKiBTZWUgYWxzbzoKICAgKgogICAqICAgICBkZXJpdmF0aXZlLCBwYXJzZSwgZXZhbHVhdGUsIHJhdGlvbmFsaXplCiAgICoKICAgKiBAcGFyYW0ge05vZGUgfCBzdHJpbmd9IGV4cHIKICAgKiAgICAgICAgICAgIFRoZSBleHByZXNzaW9uIHRvIGJlIHNpbXBsaWZpZWQKICAgKiBAcGFyYW0ge0FycmF5PHtsOnN0cmluZywgcjogc3RyaW5nfSB8IHN0cmluZyB8IGZ1bmN0aW9uPn0gW3J1bGVzXQogICAqICAgICAgICAgICAgT3B0aW9uYWwgbGlzdCB3aXRoIGN1c3RvbSBydWxlcwogICAqIEByZXR1cm4ge05vZGV9IFJldHVybnMgdGhlIHNpbXBsaWZpZWQgZm9ybSBvZiBgZXhwcmAKICAgKi8KCgogIHZhciBzaW1wbGlmeSA9IHR5cGVkKCdzaW1wbGlmeScsIHsKICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKGV4cHIpIHsKICAgICAgcmV0dXJuIHNpbXBsaWZ5KHBhcnNlKGV4cHIpLCBzaW1wbGlmeS5ydWxlcywge30sIHt9KTsKICAgIH0sCiAgICAnc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdPYmplY3QoZXhwciwgc2NvcGUpIHsKICAgICAgcmV0dXJuIHNpbXBsaWZ5KHBhcnNlKGV4cHIpLCBzaW1wbGlmeS5ydWxlcywgc2NvcGUsIHt9KTsKICAgIH0sCiAgICAnc3RyaW5nLCBPYmplY3QsIE9iamVjdCc6IGZ1bmN0aW9uIHN0cmluZ09iamVjdE9iamVjdChleHByLCBzY29wZSwgb3B0aW9ucykgewogICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHNpbXBsaWZ5LnJ1bGVzLCBzY29wZSwgb3B0aW9ucyk7CiAgICB9LAogICAgJ3N0cmluZywgQXJyYXknOiBmdW5jdGlvbiBzdHJpbmdBcnJheShleHByLCBydWxlcykgewogICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHJ1bGVzLCB7fSwge30pOwogICAgfSwKICAgICdzdHJpbmcsIEFycmF5LCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdBcnJheU9iamVjdChleHByLCBydWxlcywgc2NvcGUpIHsKICAgICAgcmV0dXJuIHNpbXBsaWZ5KHBhcnNlKGV4cHIpLCBydWxlcywgc2NvcGUsIHt9KTsKICAgIH0sCiAgICAnc3RyaW5nLCBBcnJheSwgT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdBcnJheU9iamVjdE9iamVjdChleHByLCBydWxlcywgc2NvcGUsIG9wdGlvbnMpIHsKICAgICAgcmV0dXJuIHNpbXBsaWZ5KHBhcnNlKGV4cHIpLCBydWxlcywgc2NvcGUsIG9wdGlvbnMpOwogICAgfSwKICAgICdOb2RlLCBPYmplY3QnOiBmdW5jdGlvbiBOb2RlT2JqZWN0KGV4cHIsIHNjb3BlKSB7CiAgICAgIHJldHVybiBzaW1wbGlmeShleHByLCBzaW1wbGlmeS5ydWxlcywgc2NvcGUsIHt9KTsKICAgIH0sCiAgICAnTm9kZSwgT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBOb2RlT2JqZWN0T2JqZWN0KGV4cHIsIHNjb3BlLCBvcHRpb25zKSB7CiAgICAgIHJldHVybiBzaW1wbGlmeShleHByLCBzaW1wbGlmeS5ydWxlcywgc2NvcGUsIG9wdGlvbnMpOwogICAgfSwKICAgIE5vZGU6IGZ1bmN0aW9uIE5vZGUoZXhwcikgewogICAgICByZXR1cm4gc2ltcGxpZnkoZXhwciwgc2ltcGxpZnkucnVsZXMsIHt9LCB7fSk7CiAgICB9LAogICAgJ05vZGUsIEFycmF5JzogZnVuY3Rpb24gTm9kZUFycmF5KGV4cHIsIHJ1bGVzKSB7CiAgICAgIHJldHVybiBzaW1wbGlmeShleHByLCBydWxlcywge30sIHt9KTsKICAgIH0sCiAgICAnTm9kZSwgQXJyYXksIE9iamVjdCc6IGZ1bmN0aW9uIE5vZGVBcnJheU9iamVjdChleHByLCBydWxlcywgc2NvcGUpIHsKICAgICAgcmV0dXJuIHNpbXBsaWZ5KGV4cHIsIHJ1bGVzLCBzY29wZSwge30pOwogICAgfSwKICAgICdOb2RlLCBBcnJheSwgT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBOb2RlQXJyYXlPYmplY3RPYmplY3QoZXhwciwgcnVsZXMsIHNjb3BlLCBvcHRpb25zKSB7CiAgICAgIHJ1bGVzID0gX2J1aWxkUnVsZXMocnVsZXMpOwogICAgICB2YXIgcmVzID0gcmVzb2x2ZShleHByLCBzY29wZSk7CiAgICAgIHJlcyA9IHJlbW92ZVBhcmVucyhyZXMpOwogICAgICB2YXIgdmlzaXRlZCA9IHt9OwogICAgICB2YXIgc3RyID0gcmVzLnRvU3RyaW5nKHsKICAgICAgICBwYXJlbnRoZXNpczogJ2FsbCcKICAgICAgfSk7CgogICAgICB3aGlsZSAoIXZpc2l0ZWRbc3RyXSkgewogICAgICAgIHZpc2l0ZWRbc3RyXSA9IHRydWU7CiAgICAgICAgX2xhc3RzeW0gPSAwOyAvLyBjb3VudGVyIGZvciBwbGFjZWhvbGRlciBzeW1ib2xzCgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGlmICh0eXBlb2YgcnVsZXNbaV0gPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgcmVzID0gcnVsZXNbaV0ocmVzLCBvcHRpb25zKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZsYXR0ZW4ocmVzKTsKICAgICAgICAgICAgcmVzID0gYXBwbHlSdWxlKHJlcywgcnVsZXNbaV0pOwogICAgICAgICAgfQoKICAgICAgICAgIHVuZmxhdHRlbmwocmVzKTsgLy8gdXNpbmcgbGVmdC1oZWF2eSBiaW5hcnkgdHJlZSBoZXJlIHNpbmNlIGN1c3RvbSBydWxlIGZ1bmN0aW9ucyBtYXkgZXhwZWN0IGl0CiAgICAgICAgfQoKICAgICAgICBzdHIgPSByZXMudG9TdHJpbmcoewogICAgICAgICAgcGFyZW50aGVzaXM6ICdhbGwnCiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIHJldHVybiByZXM7CiAgICB9CiAgfSk7CiAgc2ltcGxpZnkuc2ltcGxpZnlDb3JlID0gc2ltcGxpZnlDb3JlOwogIHNpbXBsaWZ5LnJlc29sdmUgPSByZXNvbHZlOwoKICBmdW5jdGlvbiByZW1vdmVQYXJlbnMobm9kZSkgewogICAgcmV0dXJuIG5vZGUudHJhbnNmb3JtKGZ1bmN0aW9uIChub2RlLCBwYXRoLCBwYXJlbnQpIHsKICAgICAgcmV0dXJuIE9iamVjdChpc1siQyIgLyogaXNQYXJlbnRoZXNpc05vZGUgKi9dKShub2RlKSA/IHJlbW92ZVBhcmVucyhub2RlLmNvbnRlbnQpIDogbm9kZTsKICAgIH0pOwogIH0gLy8gQWxsIGNvbnN0YW50cyB0aGF0IGFyZSBhbGxvd2VkIGluIHJ1bGVzCgoKICB2YXIgU1VQUE9SVEVEX0NPTlNUQU5UUyA9IHsKICAgICJ0cnVlIjogdHJ1ZSwKICAgICJmYWxzZSI6IHRydWUsCiAgICBlOiB0cnVlLAogICAgaTogdHJ1ZSwKICAgIEluZmluaXR5OiB0cnVlLAogICAgTE4yOiB0cnVlLAogICAgTE4xMDogdHJ1ZSwKICAgIExPRzJFOiB0cnVlLAogICAgTE9HMTBFOiB0cnVlLAogICAgTmFOOiB0cnVlLAogICAgcGhpOiB0cnVlLAogICAgcGk6IHRydWUsCiAgICBTUVJUMV8yOiB0cnVlLAogICAgU1FSVDI6IHRydWUsCiAgICB0YXU6IHRydWUgLy8gbnVsbDogZmFsc2UsCiAgICAvLyB1bmRlZmluZWQ6IGZhbHNlLAogICAgLy8gdmVyc2lvbjogZmFsc2UsCgogIH07IC8vIEFycmF5IG9mIHN0cmluZ3MsIHVzZWQgdG8gYnVpbGQgdGhlIHJ1bGVTZXQuCiAgLy8gRWFjaCBsIChsZWZ0IHNpZGUpIGFuZCByIChyaWdodCBzaWRlKSBhcmUgcGFyc2VkIGJ5CiAgLy8gdGhlIGV4cHJlc3Npb24gcGFyc2VyIGludG8gYSBub2RlIHRyZWUuCiAgLy8gTGVmdCBoYW5kIHNpZGVzIGFyZSBtYXRjaGVkIHRvIHN1YnRyZWVzIHdpdGhpbiB0aGUKICAvLyBleHByZXNzaW9uIHRvIGJlIHBhcnNlZCBhbmQgcmVwbGFjZWQgd2l0aCB0aGUgcmlnaHQKICAvLyBoYW5kIHNpZGUuCiAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIGNvbnN0cmFpbnRzIG9uIGNvbnN0YW50cyAoZWl0aGVyIGluIHRoZSBmb3JtIG9mIGEgJz0nIGV4cHJlc3Npb24gb3IgYSBjYWxsYmFjayBbY2FsbGJhY2sgYWxsb3dzIHRoaW5ncyBsaWtlIGNvbXBhcmluZyBzeW1ib2xzIGFscGhhYmV0aWNhbGx5XSkKICAvLyBUbyBldmFsdWF0ZSBsaHMgY29uc3RhbnRzIGZvciByaHMgY29uc3RhbnRzLCB1c2U6IHsgbDogJ2MxK2MyJywgcjogJ2MzJywgZXZhbHVhdGU6ICdjMyA9IGMxICsgYzInIH0uIE11bHRpcGxlIGFzc2lnbm1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgJzsnIGluIGJsb2NrIGZvcm1hdC4KICAvLyBJdCBpcyBwb3NzaWJsZSB0byBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wIHdpdGggY29uZmxpY3RpbmcgcnVsZXMKCiAgc2ltcGxpZnkucnVsZXMgPSBbc2ltcGxpZnlDb3JlLCAvLyB7IGw6ICduKzAnLCByOiAnbicgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZQogIC8vIHsgbDogJ25eMCcsIHI6ICcxJyB9LCAgICAgLy8gc2ltcGxpZnlDb3JlCiAgLy8geyBsOiAnMCpuJywgcjogJzAnIH0sICAgICAvLyBzaW1wbGlmeUNvcmUKICAvLyB7IGw6ICduL24nLCByOiAnMSd9LCAgICAgIC8vIHNpbXBsaWZ5Q29yZQogIC8vIHsgbDogJ25eMScsIHI6ICduJyB9LCAgICAgLy8gc2ltcGxpZnlDb3JlCiAgLy8geyBsOiAnK24xJywgcjonbjEnIH0sICAgICAvLyBzaW1wbGlmeUNvcmUKICAvLyB7IGw6ICduLS1uMScsIHI6J24rbjEnIH0sIC8vIHNpbXBsaWZ5Q29yZQogIHsKICAgIGw6ICdsb2coZSknLAogICAgcjogJzEnCiAgfSwgLy8gdGVtcG9yYXJ5IHJ1bGVzCiAgewogICAgbDogJ24tbjEnLAogICAgcjogJ24rLW4xJwogIH0sIC8vIHRlbXBvcmFyaWx5IHJlcGxhY2UgJ3N1YnRyYWN0JyBzbyB3ZSBjYW4gZnVydGhlciBmbGF0dGVuIHRoZSAnYWRkJyBvcGVyYXRvcgogIHsKICAgIGw6ICctKGMqdiknLAogICAgcjogJygtYykgKiB2JwogIH0sIC8vIG1ha2Ugbm9uLWNvbnN0YW50IHRlcm1zIHBvc2l0aXZlCiAgewogICAgbDogJy12JywKICAgIHI6ICcoLTEpICogdicKICB9LCB7CiAgICBsOiAnbi9uMV5uMicsCiAgICByOiAnbipuMV4tbjInCiAgfSwgLy8gdGVtcG9yYXJpbHkgcmVwbGFjZSAnZGl2aWRlJyBzbyB3ZSBjYW4gZnVydGhlciBmbGF0dGVuIHRoZSAnbXVsdGlwbHknIG9wZXJhdG9yCiAgewogICAgbDogJ24vbjEnLAogICAgcjogJ24qbjFeLTEnCiAgfSwgLy8gZXhwYW5kIG5lc3RlZCBleHBvbmVudGlhdGlvbgogIHsKICAgIGw6ICcobiBeIG4xKSBeIG4yJywKICAgIHI6ICduIF4gKG4xICogbjIpJwogIH0sIC8vIGNvbGxlY3QgbGlrZSBmYWN0b3JzCiAgewogICAgbDogJ24qbicsCiAgICByOiAnbl4yJwogIH0sIHsKICAgIGw6ICduICogbl5uMScsCiAgICByOiAnbl4objErMSknCiAgfSwgewogICAgbDogJ25ebjEgKiBuXm4yJywKICAgIHI6ICduXihuMStuMiknCiAgfSwgLy8gY29sbGVjdCBsaWtlIHRlcm1zCiAgewogICAgbDogJ24rbicsCiAgICByOiAnMipuJwogIH0sIHsKICAgIGw6ICduKy1uJywKICAgIHI6ICcwJwogIH0sIHsKICAgIGw6ICduMSpuMiArIG4yJywKICAgIHI6ICcobjErMSkqbjInCiAgfSwgewogICAgbDogJ24xKm4zICsgbjIqbjMnLAogICAgcjogJyhuMStuMikqbjMnCiAgfSwgLy8gcmVtb3ZlIHBhcmVudGhlc2lzIGluIHRoZSBjYXNlIG9mIG5lZ2F0aW5nIGEgcXVhbnRpdGl5CiAgewogICAgbDogJ24xICsgLTEgKiAobjIgKyBuMyknLAogICAgcjogJ24xICsgLTEgKiBuMiArIC0xICogbjMnCiAgfSwgc2ltcGxpZnlDb25zdGFudCwgewogICAgbDogJygtbikqbjEnLAogICAgcjogJy0obipuMSknCiAgfSwgLy8gbWFrZSBmYWN0b3JzIHBvc2l0aXZlIChhbmQgdW5kbyAnbWFrZSBub24tY29uc3RhbnQgdGVybXMgcG9zaXRpdmUnKQogIC8vIG9yZGVyaW5nIG9mIGNvbnN0YW50cwogIHsKICAgIGw6ICdjK3YnLAogICAgcjogJ3YrYycsCiAgICBjb250ZXh0OiB7CiAgICAgIGFkZDogewogICAgICAgIGNvbW11dGF0aXZlOiBmYWxzZQogICAgICB9CiAgICB9CiAgfSwgewogICAgbDogJ3YqYycsCiAgICByOiAnYyp2JywKICAgIGNvbnRleHQ6IHsKICAgICAgbXVsdGlwbHk6IHsKICAgICAgICBjb21tdXRhdGl2ZTogZmFsc2UKICAgICAgfQogICAgfQogIH0sIC8vIHVuZG8gdGVtcG9yYXJ5IHJ1bGVzCiAgLy8geyBsOiAnKC0xKSAqIG4nLCByOiAnLW4nIH0sIC8vICM4MTEgYWRkZWQgdGVzdCB3aGljaCBwcm92ZWQgdGhpcyBpcyByZWR1bmRhbnQKICB7CiAgICBsOiAnbistbjEnLAogICAgcjogJ24tbjEnCiAgfSwgLy8gdW5kbyByZXBsYWNlICdzdWJ0cmFjdCcKICB7CiAgICBsOiAnbioobjFeLTEpJywKICAgIHI6ICduL24xJwogIH0sIC8vIHVuZG8gcmVwbGFjZSAnZGl2aWRlJwogIHsKICAgIGw6ICduKm4xXi1uMicsCiAgICByOiAnbi9uMV5uMicKICB9LCB7CiAgICBsOiAnbjFeLTEnLAogICAgcjogJzEvbjEnCiAgfSwgewogICAgbDogJ24qKG4xL24yKScsCiAgICByOiAnKG4qbjEpL24yJwogIH0sIC8vICcqJyBiZWZvcmUgJy8nCiAgewogICAgbDogJ24tKG4xK24yKScsCiAgICByOiAnbi1uMS1uMicKICB9LCAvLyAnLScgYmVmb3JlICcrJwogIC8vIHsgbDogJyhuMS9uMikvbjMnLCByOiAnbjEvKG4yKm4zKScgfSwKICAvLyB7IGw6ICcobipuMSkvKG4qbjIpJywgcjogJ24xL24yJyB9LAogIHsKICAgIGw6ICcxKm4nLAogICAgcjogJ24nCiAgfSwgLy8gdGhpcyBwYXR0ZXJuIGNhbiBiZSBwcm9kdWNlZCBieSBzaW1wbGlmeUNvbnN0YW50CiAgewogICAgbDogJ24xLyhuMi9uMyknLAogICAgcjogJyhuMSpuMykvbjInCiAgfV07CiAgLyoqCiAgICogUGFyc2UgdGhlIHN0cmluZyBhcnJheSBvZiBydWxlcyBpbnRvIG5vZGVzCiAgICoKICAgKiBFeGFtcGxlIHN5bnRheCBmb3IgcnVsZXM6CiAgICoKICAgKiBQb3NpdGlvbiBjb25zdGFudHMgdG8gdGhlIGxlZnQgaW4gYSBwcm9kdWN0OgogICAqIHsgbDogJ24xICogYzEnLCByOiAnYzEgKiBuMScgfQogICAqIG4xIGlzIGFueSBOb2RlLCBhbmQgYzEgaXMgYSBDb25zdGFudE5vZGUuCiAgICoKICAgKiBBcHBseSBkaWZmZXJlbmNlIG9mIHNxdWFyZXMgZm9ybXVsYToKICAgKiB7IGw6ICcobjEgLSBuMikgKiAobjEgKyBuMiknLCByOiAnbjFeMiAtIG4yXjInIH0KICAgKiBuMSwgbjIgbWVhbiBhbnkgTm9kZS4KICAgKgogICAqIFNob3J0IGhhbmQgbm90YXRpb246CiAgICogJ24xICogYzEgLT4gYzEgKiBuMScKICAgKi8KCiAgZnVuY3Rpb24gX2J1aWxkUnVsZXMocnVsZXMpIHsKICAgIC8vIEFycmF5IG9mIHJ1bGVzIHRvIGJlIHVzZWQgdG8gc2ltcGxpZnkgZXhwcmVzc2lvbnMKICAgIHZhciBydWxlU2V0ID0gW107CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgcnVsZSA9IHJ1bGVzW2ldOwogICAgICB2YXIgbmV3UnVsZSA9IHZvaWQgMDsKCiAgICAgIHZhciBydWxlVHlwZSA9IHNpbXBsaWZ5X3R5cGVvZihydWxlKTsKCiAgICAgIHN3aXRjaCAocnVsZVR5cGUpIHsKICAgICAgICBjYXNlICdzdHJpbmcnOgogICAgICAgICAgewogICAgICAgICAgICB2YXIgbHIgPSBydWxlLnNwbGl0KCctPicpOwoKICAgICAgICAgICAgaWYgKGxyLmxlbmd0aCA9PT0gMikgewogICAgICAgICAgICAgIHJ1bGUgPSB7CiAgICAgICAgICAgICAgICBsOiBsclswXSwKICAgICAgICAgICAgICAgIHI6IGxyWzFdCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aHJvdyBTeW50YXhFcnJvcignQ291bGQgbm90IHBhcnNlIHJ1bGU6ICcgKyBydWxlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovCgogICAgICAgIGNhc2UgJ29iamVjdCc6CiAgICAgICAgICBuZXdSdWxlID0gewogICAgICAgICAgICBsOiByZW1vdmVQYXJlbnMocGFyc2UocnVsZS5sKSksCiAgICAgICAgICAgIHI6IHJlbW92ZVBhcmVucyhwYXJzZShydWxlLnIpKQogICAgICAgICAgfTsKCiAgICAgICAgICBpZiAocnVsZS5jb250ZXh0KSB7CiAgICAgICAgICAgIG5ld1J1bGUuZXZhbHVhdGUgPSBydWxlLmNvbnRleHQ7CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKHJ1bGUuZXZhbHVhdGUpIHsKICAgICAgICAgICAgbmV3UnVsZS5ldmFsdWF0ZSA9IHBhcnNlKHJ1bGUuZXZhbHVhdGUpOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChpc0Fzc29jaWF0aXZlKG5ld1J1bGUubCkpIHsKICAgICAgICAgICAgdmFyIG1ha2VOb2RlID0gY3JlYXRlTWFrZU5vZGVGdW5jdGlvbihuZXdSdWxlLmwpOwoKICAgICAgICAgICAgdmFyIGV4cGFuZHN5bSA9IF9nZXRFeHBhbmRQbGFjZWhvbGRlclN5bWJvbCgpOwoKICAgICAgICAgICAgbmV3UnVsZS5leHBhbmRlZCA9IHt9OwogICAgICAgICAgICBuZXdSdWxlLmV4cGFuZGVkLmwgPSBtYWtlTm9kZShbbmV3UnVsZS5sLmNsb25lKCksIGV4cGFuZHN5bV0pOyAvLyBQdXNoIHRoZSBleHBhbmRzeW0gaW50byB0aGUgZGVlcGVzdCBwb3NzaWJsZSBicmFuY2guCiAgICAgICAgICAgIC8vIFRoaXMgaGVscHMgdG8gbWF0Y2ggdGhlIG5ld1J1bGUgYWdhaW5zdCBub2RlcyByZXR1cm5lZCBmcm9tIGdldFNwbGl0cygpIGxhdGVyIG9uLgoKICAgICAgICAgICAgZmxhdHRlbihuZXdSdWxlLmV4cGFuZGVkLmwpOwogICAgICAgICAgICB1bmZsYXR0ZW5yKG5ld1J1bGUuZXhwYW5kZWQubCk7CiAgICAgICAgICAgIG5ld1J1bGUuZXhwYW5kZWQuciA9IG1ha2VOb2RlKFtuZXdSdWxlLnIsIGV4cGFuZHN5bV0pOwogICAgICAgICAgfQoKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdmdW5jdGlvbic6CiAgICAgICAgICBuZXdSdWxlID0gcnVsZTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIHJ1bGU6ICcgKyBydWxlVHlwZSk7CiAgICAgIH0gLy8gY29uc29sZS5sb2coJ0FkZGluZyBydWxlOiAnICsgcnVsZXNbaV0pCiAgICAgIC8vIGNvbnNvbGUubG9nKG5ld1J1bGUpCgoKICAgICAgcnVsZVNldC5wdXNoKG5ld1J1bGUpOwogICAgfQoKICAgIHJldHVybiBydWxlU2V0OwogIH0KCiAgdmFyIF9sYXN0c3ltID0gMDsKCiAgZnVuY3Rpb24gX2dldEV4cGFuZFBsYWNlaG9sZGVyU3ltYm9sKCkgewogICAgcmV0dXJuIG5ldyBTeW1ib2xOb2RlKCdfcCcgKyBfbGFzdHN5bSsrKTsKICB9CiAgLyoqCiAgICogUmV0dXJucyBhIHNpbXBsZmllZCBmb3JtIG9mIG5vZGUsIG9yIHRoZSBvcmlnaW5hbCBub2RlIGlmIG5vIHNpbXBsaWZpY2F0aW9uIHdhcyBwb3NzaWJsZS4KICAgKgogICAqIEBwYXJhbSAge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IG5vZGUKICAgKiBAcmV0dXJuIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSBUaGUgc2ltcGxpZmllZCBmb3JtIG9mIGBleHByYCwgb3IgdGhlIG9yaWdpbmFsIG5vZGUgaWYgbm8gc2ltcGxpZmljYXRpb24gd2FzIHBvc3NpYmxlLgogICAqLwoKCiAgdmFyIGFwcGx5UnVsZSA9IHR5cGVkKCdhcHBseVJ1bGUnLCB7CiAgICAnTm9kZSwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZU9iamVjdChub2RlLCBydWxlKSB7CiAgICAgIC8vIGNvbnNvbGUubG9nKCdFbnRlcmluZyBhcHBseVJ1bGUoJyArIG5vZGUudG9TdHJpbmcoKSArICcpJykKICAgICAgLy8gRG8gbm90IGNsb25lIG5vZGUgdW5sZXNzIHdlIGZpbmQgYSBtYXRjaAogICAgICB2YXIgcmVzID0gbm9kZTsgLy8gRmlyc3QgcmVwbGFjZSBvdXIgY2hpbGQgbm9kZXMgd2l0aCB0aGVpciBzaW1wbGlmaWVkIHZlcnNpb25zCiAgICAgIC8vIElmIGEgY2hpbGQgY291bGQgbm90IGJlIHNpbXBsaWZpZWQsIHRoZSBhc3NpZ25tZW50cyB3aWxsIGhhdmUKICAgICAgLy8gbm8gZWZmZWN0IHNpbmNlIHRoZSBub2RlIGlzIHJldHVybmVkIHVuY2hhbmdlZAoKICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSB8fCByZXMgaW5zdGFuY2VvZiBGdW5jdGlvbk5vZGUpIHsKICAgICAgICBpZiAocmVzLmFyZ3MpIHsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzLmFyZ3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgcmVzLmFyZ3NbaV0gPSBhcHBseVJ1bGUocmVzLmFyZ3NbaV0sIHJ1bGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChyZXMgaW5zdGFuY2VvZiBQYXJlbnRoZXNpc05vZGUpIHsKICAgICAgICBpZiAocmVzLmNvbnRlbnQpIHsKICAgICAgICAgIHJlcy5jb250ZW50ID0gYXBwbHlSdWxlKHJlcy5jb250ZW50LCBydWxlKTsKICAgICAgICB9CiAgICAgIH0gLy8gVHJ5IHRvIG1hdGNoIGEgcnVsZSBhZ2FpbnN0IHRoaXMgbm9kZQoKCiAgICAgIHZhciByZXBsID0gcnVsZS5yOwoKICAgICAgdmFyIG1hdGNoZXMgPSBfcnVsZU1hdGNoKHJ1bGUubCwgcmVzKVswXTsgLy8gSWYgdGhlIHJ1bGUgaXMgYXNzb2NpYXRpdmUgb3BlcmF0b3IsIHdlIGNhbiB0cnkgbWF0Y2hpbmcgaXQgd2hpbGUgYWxsb3dpbmcgYWRkaXRpb25hbCB0ZXJtcy4KICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gbWF0Y2ggcnVsZXMgbGlrZSAnbituJyB0byB0aGUgZXhwcmVzc2lvbiAnKDEreCkreCcgb3IgZXZlbiAneCsxK3gnIGlmIHRoZSBvcGVyYXRvciBpcyBjb21tdXRhdGl2ZS4KCgogICAgICBpZiAoIW1hdGNoZXMgJiYgcnVsZS5leHBhbmRlZCkgewogICAgICAgIHJlcGwgPSBydWxlLmV4cGFuZGVkLnI7CiAgICAgICAgbWF0Y2hlcyA9IF9ydWxlTWF0Y2gocnVsZS5leHBhbmRlZC5sLCByZXMpWzBdOwogICAgICB9CgogICAgICBpZiAobWF0Y2hlcykgewogICAgICAgIC8vIGNvbnN0IGJlZm9yZSA9IHJlcy50b1N0cmluZyh7cGFyZW50aGVzaXM6ICdhbGwnfSkKICAgICAgICAvLyBDcmVhdGUgYSBuZXcgbm9kZSBieSBjbG9uaW5nIHRoZSByaHMgb2YgdGhlIG1hdGNoZWQgcnVsZQogICAgICAgIC8vIHdlIGtlZXAgYW55IGltcGxpY2l0IG11bHRpcGxpY2F0aW9uIHN0YXRlIGlmIHJlbGV2YW50CiAgICAgICAgdmFyIGltcGxpY2l0ID0gcmVzLmltcGxpY2l0OwogICAgICAgIHJlcyA9IHJlcGwuY2xvbmUoKTsKCiAgICAgICAgaWYgKGltcGxpY2l0ICYmICdpbXBsaWNpdCcgaW4gcmVwbCkgewogICAgICAgICAgcmVzLmltcGxpY2l0ID0gdHJ1ZTsKICAgICAgICB9IC8vIFJlcGxhY2UgcGxhY2Vob2xkZXJzIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSBub2RlcyB3aXRob3V0IHRyYXZlcnNpbmcgZGVlcGVyIGludG8gdGhlIHJlcGxhY2VkIG5vZGVzCgoKICAgICAgICByZXMgPSByZXMudHJhbnNmb3JtKGZ1bmN0aW9uIChub2RlKSB7CiAgICAgICAgICBpZiAobm9kZS5pc1N5bWJvbE5vZGUgJiYgT2JqZWN0KHV0aWxzX29iamVjdFsiZiIgLyogaGFzT3duUHJvcGVydHkgKi9dKShtYXRjaGVzLnBsYWNlaG9sZGVycywgbm9kZS5uYW1lKSkgewogICAgICAgICAgICByZXR1cm4gbWF0Y2hlcy5wbGFjZWhvbGRlcnNbbm9kZS5uYW1lXS5jbG9uZSgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICB9CiAgICAgICAgfSk7IC8vIGNvbnN0IGFmdGVyID0gcmVzLnRvU3RyaW5nKHtwYXJlbnRoZXNpczogJ2FsbCd9KQogICAgICAgIC8vIGNvbnNvbGUubG9nKCdTaW1wbGlmaWVkICcgKyBiZWZvcmUgKyAnIHRvICcgKyBhZnRlcikKICAgICAgfQoKICAgICAgcmV0dXJuIHJlczsKICAgIH0KICB9KTsKICAvKioKICAgKiBHZXQgKGJpbmFyeSkgY29tYmluYXRpb25zIG9mIGEgZmxhdHRlbmVkIGJpbmFyeSBub2RlCiAgICogZS5nLiArKG5vZGUxLCBub2RlMiwgbm9kZTMpIC0+IFsKICAgKiAgICAgICAgKyhub2RlMSwgICsobm9kZTIsIG5vZGUzKSksCiAgICogICAgICAgICsobm9kZTIsICArKG5vZGUxLCBub2RlMykpLAogICAqICAgICAgICArKG5vZGUzLCAgKyhub2RlMSwgbm9kZTIpKV0KICAgKgogICAqLwoKICBmdW5jdGlvbiBnZXRTcGxpdHMobm9kZSwgY29udGV4dCkgewogICAgdmFyIHJlcyA9IFtdOwogICAgdmFyIHJpZ2h0LCByaWdodEFyZ3M7CiAgICB2YXIgbWFrZU5vZGUgPSBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uKG5vZGUpOwoKICAgIGlmIChpc0NvbW11dGF0aXZlKG5vZGUsIGNvbnRleHQpKSB7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgcmlnaHRBcmdzID0gbm9kZS5hcmdzLnNsaWNlKDApOwogICAgICAgIHJpZ2h0QXJncy5zcGxpY2UoaSwgMSk7CiAgICAgICAgcmlnaHQgPSByaWdodEFyZ3MubGVuZ3RoID09PSAxID8gcmlnaHRBcmdzWzBdIDogbWFrZU5vZGUocmlnaHRBcmdzKTsKICAgICAgICByZXMucHVzaChtYWtlTm9kZShbbm9kZS5hcmdzW2ldLCByaWdodF0pKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmlnaHRBcmdzID0gbm9kZS5hcmdzLnNsaWNlKDEpOwogICAgICByaWdodCA9IHJpZ2h0QXJncy5sZW5ndGggPT09IDEgPyByaWdodEFyZ3NbMF0gOiBtYWtlTm9kZShyaWdodEFyZ3MpOwogICAgICByZXMucHVzaChtYWtlTm9kZShbbm9kZS5hcmdzWzBdLCByaWdodF0pKTsKICAgIH0KCiAgICByZXR1cm4gcmVzOwogIH0KICAvKioKICAgKiBSZXR1cm5zIHRoZSBzZXQgdW5pb24gb2YgdHdvIG1hdGNoLXBsYWNlaG9sZGVycyBvciBudWxsIGlmIHRoZXJlIGlzIGEgY29uZmxpY3QuCiAgICovCgoKICBmdW5jdGlvbiBtZXJnZU1hdGNoKG1hdGNoMSwgbWF0Y2gyKSB7CiAgICB2YXIgcmVzID0gewogICAgICBwbGFjZWhvbGRlcnM6IHt9CiAgICB9OyAvLyBTb21lIG1hdGNoZXMgbWF5IG5vdCBoYXZlIHBsYWNlaG9sZGVyczsgdGhpcyBpcyBPSwoKICAgIGlmICghbWF0Y2gxLnBsYWNlaG9sZGVycyAmJiAhbWF0Y2gyLnBsYWNlaG9sZGVycykgewogICAgICByZXR1cm4gcmVzOwogICAgfSBlbHNlIGlmICghbWF0Y2gxLnBsYWNlaG9sZGVycykgewogICAgICByZXR1cm4gbWF0Y2gyOwogICAgfSBlbHNlIGlmICghbWF0Y2gyLnBsYWNlaG9sZGVycykgewogICAgICByZXR1cm4gbWF0Y2gxOwogICAgfSAvLyBQbGFjZWhvbGRlcnMgd2l0aCB0aGUgc2FtZSBrZXkgbXVzdCBtYXRjaCBleGFjdGx5CgoKICAgIGZvciAodmFyIGtleSBpbiBtYXRjaDEucGxhY2Vob2xkZXJzKSB7CiAgICAgIHJlcy5wbGFjZWhvbGRlcnNba2V5XSA9IG1hdGNoMS5wbGFjZWhvbGRlcnNba2V5XTsKCiAgICAgIGlmIChPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKG1hdGNoMi5wbGFjZWhvbGRlcnMsIGtleSkpIHsKICAgICAgICBpZiAoIV9leGFjdE1hdGNoKG1hdGNoMS5wbGFjZWhvbGRlcnNba2V5XSwgbWF0Y2gyLnBsYWNlaG9sZGVyc1trZXldKSkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgZm9yICh2YXIgX2tleSBpbiBtYXRjaDIucGxhY2Vob2xkZXJzKSB7CiAgICAgIHJlcy5wbGFjZWhvbGRlcnNbX2tleV0gPSBtYXRjaDIucGxhY2Vob2xkZXJzW19rZXldOwogICAgfQoKICAgIHJldHVybiByZXM7CiAgfQogIC8qKgogICAqIENvbWJpbmUgdHdvIGxpc3RzIG9mIG1hdGNoZXMgYnkgYXBwbHlpbmcgbWVyZ2VNYXRjaCB0byB0aGUgY2FydGVzaWFuIHByb2R1Y3Qgb2YgdHdvIGxpc3RzIG9mIG1hdGNoZXMuCiAgICogRWFjaCBsaXN0IHJlcHJlc2VudHMgbWF0Y2hlcyBmb3VuZCBpbiBvbmUgY2hpbGQgb2YgYSBub2RlLgogICAqLwoKCiAgZnVuY3Rpb24gY29tYmluZUNoaWxkTWF0Y2hlcyhsaXN0MSwgbGlzdDIpIHsKICAgIHZhciByZXMgPSBbXTsKCiAgICBpZiAobGlzdDEubGVuZ3RoID09PSAwIHx8IGxpc3QyLmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gcmVzOwogICAgfQoKICAgIHZhciBtZXJnZWQ7CgogICAgZm9yICh2YXIgaTEgPSAwOyBpMSA8IGxpc3QxLmxlbmd0aDsgaTErKykgewogICAgICBmb3IgKHZhciBpMiA9IDA7IGkyIDwgbGlzdDIubGVuZ3RoOyBpMisrKSB7CiAgICAgICAgbWVyZ2VkID0gbWVyZ2VNYXRjaChsaXN0MVtpMV0sIGxpc3QyW2kyXSk7CgogICAgICAgIGlmIChtZXJnZWQpIHsKICAgICAgICAgIHJlcy5wdXNoKG1lcmdlZCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlczsKICB9CiAgLyoqCiAgICogQ29tYmluZSBtdWx0aXBsZSBsaXN0cyBvZiBtYXRjaGVzIGJ5IGFwcGx5aW5nIG1lcmdlTWF0Y2ggdG8gdGhlIGNhcnRlc2lhbiBwcm9kdWN0IG9mIHR3byBsaXN0cyBvZiBtYXRjaGVzLgogICAqIEVhY2ggbGlzdCByZXByZXNlbnRzIG1hdGNoZXMgZm91bmQgaW4gb25lIGNoaWxkIG9mIGEgbm9kZS4KICAgKiBSZXR1cm5zIGEgbGlzdCBvZiB1bmlxdWUgbWF0Y2hlcy4KICAgKi8KCgogIGZ1bmN0aW9uIG1lcmdlQ2hpbGRNYXRjaGVzKGNoaWxkTWF0Y2hlcykgewogICAgaWYgKGNoaWxkTWF0Y2hlcy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIGNoaWxkTWF0Y2hlczsKICAgIH0KCiAgICB2YXIgc2V0cyA9IGNoaWxkTWF0Y2hlcy5yZWR1Y2UoY29tYmluZUNoaWxkTWF0Y2hlcyk7CiAgICB2YXIgdW5pcXVlU2V0cyA9IFtdOwogICAgdmFyIHVuaXF1ZSA9IHt9OwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2V0cy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgcyA9IEpTT04uc3RyaW5naWZ5KHNldHNbaV0pOwoKICAgICAgaWYgKCF1bmlxdWVbc10pIHsKICAgICAgICB1bmlxdWVbc10gPSB0cnVlOwogICAgICAgIHVuaXF1ZVNldHMucHVzaChzZXRzW2ldKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiB1bmlxdWVTZXRzOwogIH0KICAvKioKICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgbm9kZSBtYXRjaGVzIHJ1bGUuCiAgICoKICAgKiBAcGFyYW0ge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IHJ1bGUKICAgKiBAcGFyYW0ge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IG5vZGUKICAgKiBAcmV0dXJuIHtPYmplY3R9IEluZm9ybWF0aW9uIGFib3V0IHRoZSBtYXRjaCwgaWYgaXQgZXhpc3RzLgogICAqLwoKCiAgZnVuY3Rpb24gX3J1bGVNYXRjaChydWxlLCBub2RlLCBpc1NwbGl0KSB7CiAgICAvLyAgICBjb25zb2xlLmxvZygnRW50ZXJpbmcgX3J1bGVNYXRjaCgnICsgSlNPTi5zdHJpbmdpZnkocnVsZSkgKyAnLCAnICsgSlNPTi5zdHJpbmdpZnkobm9kZSkgKyAnKScpCiAgICAvLyAgICBjb25zb2xlLmxvZygncnVsZSA9ICcgKyBydWxlKQogICAgLy8gICAgY29uc29sZS5sb2coJ25vZGUgPSAnICsgbm9kZSkKICAgIC8vICAgIGNvbnNvbGUubG9nKCdFbnRlcmluZyBfcnVsZU1hdGNoKCcgKyBydWxlLnRvU3RyaW5nKCkgKyAnLCAnICsgbm9kZS50b1N0cmluZygpICsgJyknKQogICAgdmFyIHJlcyA9IFt7CiAgICAgIHBsYWNlaG9sZGVyczoge30KICAgIH1dOwoKICAgIGlmIChydWxlIGluc3RhbmNlb2YgT3BlcmF0b3JOb2RlICYmIG5vZGUgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUgfHwgcnVsZSBpbnN0YW5jZW9mIEZ1bmN0aW9uTm9kZSAmJiBub2RlIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSB7CiAgICAgIC8vIElmIHRoZSBydWxlIGlzIGFuIE9wZXJhdG9yTm9kZSBvciBhIEZ1bmN0aW9uTm9kZSwgdGhlbiBub2RlIG11c3QgbWF0Y2ggZXhhY3RseQogICAgICBpZiAocnVsZSBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSkgewogICAgICAgIGlmIChydWxlLm9wICE9PSBub2RlLm9wIHx8IHJ1bGUuZm4gIT09IG5vZGUuZm4pIHsKICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAocnVsZSBpbnN0YW5jZW9mIEZ1bmN0aW9uTm9kZSkgewogICAgICAgIGlmIChydWxlLm5hbWUgIT09IG5vZGUubmFtZSkgewogICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KICAgICAgfSAvLyBydWxlIGFuZCBub2RlIG1hdGNoLiBTZWFyY2ggdGhlIGNoaWxkcmVuIG9mIHJ1bGUgYW5kIG5vZGUuCgoKICAgICAgaWYgKG5vZGUuYXJncy5sZW5ndGggPT09IDEgJiYgcnVsZS5hcmdzLmxlbmd0aCA9PT0gMSB8fCAhaXNBc3NvY2lhdGl2ZShub2RlKSB8fCBpc1NwbGl0KSB7CiAgICAgICAgLy8gRXhwZWN0IG5vbi1hc3NvY2lhdGl2ZSBvcGVyYXRvcnMgdG8gbWF0Y2ggZXhhY3RseQogICAgICAgIHZhciBjaGlsZE1hdGNoZXMgPSBbXTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlLmFyZ3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhciBjaGlsZE1hdGNoID0gX3J1bGVNYXRjaChydWxlLmFyZ3NbaV0sIG5vZGUuYXJnc1tpXSk7CgogICAgICAgICAgaWYgKGNoaWxkTWF0Y2gubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIC8vIENoaWxkIGRpZCBub3QgbWF0Y2gsIHNvIHN0b3Agc2VhcmNoaW5nIGltbWVkaWF0ZWx5CiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICAgIH0gLy8gVGhlIGNoaWxkIG1hdGNoZWQsIHNvIGFkZCB0aGUgaW5mb3JtYXRpb24gcmV0dXJuZWQgZnJvbSB0aGUgY2hpbGQgdG8gb3VyIHJlc3VsdAoKCiAgICAgICAgICBjaGlsZE1hdGNoZXMucHVzaChjaGlsZE1hdGNoKTsKICAgICAgICB9CgogICAgICAgIHJlcyA9IG1lcmdlQ2hpbGRNYXRjaGVzKGNoaWxkTWF0Y2hlcyk7CiAgICAgIH0gZWxzZSBpZiAobm9kZS5hcmdzLmxlbmd0aCA+PSAyICYmIHJ1bGUuYXJncy5sZW5ndGggPT09IDIpIHsKICAgICAgICAvLyBub2RlIGlzIGZsYXR0ZW5lZCwgcnVsZSBpcyBub3QKICAgICAgICAvLyBBc3NvY2lhdGl2ZSBvcGVyYXRvcnMvZnVuY3Rpb25zIGNhbiBiZSBzcGxpdCBpbiBkaWZmZXJlbnQgd2F5cyBzbyB3ZSBjaGVjayBpZiB0aGUgcnVsZSBtYXRjaGVzIGVhY2gKICAgICAgICAvLyB0aGVtIGFuZCByZXR1cm4gdGhlaXIgdW5pb24uCiAgICAgICAgdmFyIHNwbGl0cyA9IGdldFNwbGl0cyhub2RlLCBydWxlLmNvbnRleHQpOwogICAgICAgIHZhciBzcGxpdE1hdGNoZXMgPSBbXTsKCiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHNwbGl0cy5sZW5ndGg7IF9pKyspIHsKICAgICAgICAgIHZhciBtYXRjaFNldCA9IF9ydWxlTWF0Y2gocnVsZSwgc3BsaXRzW19pXSwgdHJ1ZSk7IC8vIHJlY3Vyc2luZyBhdCB0aGUgc2FtZSB0cmVlIGRlcHRoIGhlcmUKCgogICAgICAgICAgc3BsaXRNYXRjaGVzID0gc3BsaXRNYXRjaGVzLmNvbmNhdChtYXRjaFNldCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3BsaXRNYXRjaGVzOwogICAgICB9IGVsc2UgaWYgKHJ1bGUuYXJncy5sZW5ndGggPiAyKSB7CiAgICAgICAgdGhyb3cgRXJyb3IoJ1VuZXhwZWN0ZWQgbm9uLWJpbmFyeSBhc3NvY2lhdGl2ZSBmdW5jdGlvbjogJyArIHJ1bGUudG9TdHJpbmcoKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gSW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMgaW4gcnVsZSBhbmQgbm9kZSwgc28gbm8gbWF0Y2gKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocnVsZSBpbnN0YW5jZW9mIFN5bWJvbE5vZGUpIHsKICAgICAgLy8gSWYgdGhlIHJ1bGUgaXMgYSBTeW1ib2xOb2RlLCB0aGVuIGl0IGNhcnJpZXMgYSBzcGVjaWFsIG1lYW5pbmcKICAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHN5bWJvbCBub2RlIG5hbWUuCiAgICAgIC8vIGMuKiBtYXRjaGVzIGEgQ29uc3RhbnROb2RlCiAgICAgIC8vIG4uKiBtYXRjaGVzIGFueSBub2RlCiAgICAgIGlmIChydWxlLm5hbWUubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTeW1ib2wgaW4gcnVsZSBoYXMgMCBsZW5ndGguLi4hPycpOwogICAgICB9CgogICAgICBpZiAoU1VQUE9SVEVEX0NPTlNUQU5UU1tydWxlLm5hbWVdKSB7CiAgICAgICAgLy8gYnVpbHQtaW4gY29uc3RhbnQgbXVzdCBtYXRjaCBleGFjdGx5CiAgICAgICAgaWYgKHJ1bGUubmFtZSAhPT0gbm9kZS5uYW1lKSB7CiAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHJ1bGUubmFtZVswXSA9PT0gJ24nIHx8IHJ1bGUubmFtZS5zdWJzdHJpbmcoMCwgMikgPT09ICdfcCcpIHsKICAgICAgICAvLyBydWxlIG1hdGNoZXMgX2FueXRoaW5nXywgc28gYXNzaWduIHRoaXMgbm9kZSB0byB0aGUgcnVsZS5uYW1lIHBsYWNlaG9sZGVyCiAgICAgICAgLy8gQXNzaWduIG5vZGUgdG8gdGhlIHJ1bGUubmFtZSBwbGFjZWhvbGRlci4KICAgICAgICAvLyBPdXIgcGFyZW50IHdpbGwgY2hlY2sgZm9yIG1hdGNoZXMgYW1vbmcgcGxhY2Vob2xkZXJzLgogICAgICAgIHJlc1swXS5wbGFjZWhvbGRlcnNbcnVsZS5uYW1lXSA9IG5vZGU7CiAgICAgIH0gZWxzZSBpZiAocnVsZS5uYW1lWzBdID09PSAndicpIHsKICAgICAgICAvLyBydWxlIG1hdGNoZXMgYW55IHZhcmlhYmxlIHRoaW5nIChub3QgYSBDb25zdGFudE5vZGUpCiAgICAgICAgaWYgKCFPYmplY3QoaXNbImwiIC8qIGlzQ29uc3RhbnROb2RlICovXSkobm9kZSkpIHsKICAgICAgICAgIHJlc1swXS5wbGFjZWhvbGRlcnNbcnVsZS5uYW1lXSA9IG5vZGU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIE1pcy1tYXRjaDogcnVsZSB3YXMgZXhwZWN0aW5nIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgQ29uc3RhbnROb2RlCiAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHJ1bGUubmFtZVswXSA9PT0gJ2MnKSB7CiAgICAgICAgLy8gcnVsZSBtYXRjaGVzIGFueSBDb25zdGFudE5vZGUKICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSkgewogICAgICAgICAgcmVzWzBdLnBsYWNlaG9sZGVyc1tydWxlLm5hbWVdID0gbm9kZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gTWlzLW1hdGNoOiBydWxlIHdhcyBleHBlY3RpbmcgYSBDb25zdGFudE5vZGUKICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN5bWJvbCBpbiBydWxlOiAnICsgcnVsZS5uYW1lKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChydWxlIGluc3RhbmNlb2YgQ29uc3RhbnROb2RlKSB7CiAgICAgIC8vIExpdGVyYWwgY29uc3RhbnQgbXVzdCBtYXRjaCBleGFjdGx5CiAgICAgIGlmICghZXF1YWwocnVsZS52YWx1ZSwgbm9kZS52YWx1ZSkpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIFNvbWUgb3RoZXIgbm9kZSB3YXMgZW5jb3VudGVyZWQgd2hpY2ggd2UgYXJlbid0IHByZXBhcmVkIGZvciwgc28gbm8gbWF0Y2gKICAgICAgcmV0dXJuIFtdOwogICAgfSAvLyBJdCdzIGEgbWF0Y2ghCiAgICAvLyBjb25zb2xlLmxvZygnX3J1bGVNYXRjaCgnICsgcnVsZS50b1N0cmluZygpICsgJywgJyArIG5vZGUudG9TdHJpbmcoKSArICcpIGZvdW5kIGEgbWF0Y2gnKQoKCiAgICByZXR1cm4gcmVzOwogIH0KICAvKioKICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgcCBhbmQgcSAoYW5kIGFsbCB0aGVpciBjaGlsZHJlbiBub2RlcykgYXJlIGlkZW50aWNhbC4KICAgKgogICAqIEBwYXJhbSB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gcAogICAqIEBwYXJhbSB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gcQogICAqIEByZXR1cm4ge09iamVjdH0gSW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hdGNoLCBpZiBpdCBleGlzdHMuCiAgICovCgoKICBmdW5jdGlvbiBfZXhhY3RNYXRjaChwLCBxKSB7CiAgICBpZiAocCBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSAmJiBxIGluc3RhbmNlb2YgQ29uc3RhbnROb2RlKSB7CiAgICAgIGlmICghZXF1YWwocC52YWx1ZSwgcS52YWx1ZSkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocCBpbnN0YW5jZW9mIFN5bWJvbE5vZGUgJiYgcSBpbnN0YW5jZW9mIFN5bWJvbE5vZGUpIHsKICAgICAgaWYgKHAubmFtZSAhPT0gcS5uYW1lKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUgJiYgcSBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSB8fCBwIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlICYmIHEgaW5zdGFuY2VvZiBGdW5jdGlvbk5vZGUpIHsKICAgICAgaWYgKHAgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUpIHsKICAgICAgICBpZiAocC5vcCAhPT0gcS5vcCB8fCBwLmZuICE9PSBxLmZuKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBGdW5jdGlvbk5vZGUpIHsKICAgICAgICBpZiAocC5uYW1lICE9PSBxLm5hbWUpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmIChwLmFyZ3MubGVuZ3RoICE9PSBxLmFyZ3MubGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHAuYXJncy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICghX2V4YWN0TWF0Y2gocC5hcmdzW2ldLCBxLmFyZ3NbaV0pKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcmV0dXJuIHRydWU7CiAgfQoKICByZXR1cm4gc2ltcGxpZnk7Cn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mdW5jdGlvbi9hbGdlYnJhL2Rlcml2YXRpdmUuanMKCgp2YXIgZGVyaXZhdGl2ZV9uYW1lID0gJ2Rlcml2YXRpdmUnOwp2YXIgZGVyaXZhdGl2ZV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdwYXJzZScsICdzaW1wbGlmeScsICdlcXVhbCcsICdpc1plcm8nLCAnbnVtZXJpYycsICdDb25zdGFudE5vZGUnLCAnRnVuY3Rpb25Ob2RlJywgJ09wZXJhdG9yTm9kZScsICdQYXJlbnRoZXNpc05vZGUnLCAnU3ltYm9sTm9kZSddOwp2YXIgY3JlYXRlRGVyaXZhdGl2ZSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGRlcml2YXRpdmVfbmFtZSwgZGVyaXZhdGl2ZV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIHBhcnNlID0gX3JlZi5wYXJzZSwKICAgICAgc2ltcGxpZnkgPSBfcmVmLnNpbXBsaWZ5LAogICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsCiAgICAgIGlzWmVybyA9IF9yZWYuaXNaZXJvLAogICAgICBudW1lcmljID0gX3JlZi5udW1lcmljLAogICAgICBDb25zdGFudE5vZGUgPSBfcmVmLkNvbnN0YW50Tm9kZSwKICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsCiAgICAgIE9wZXJhdG9yTm9kZSA9IF9yZWYuT3BlcmF0b3JOb2RlLAogICAgICBQYXJlbnRoZXNpc05vZGUgPSBfcmVmLlBhcmVudGhlc2lzTm9kZSwKICAgICAgU3ltYm9sTm9kZSA9IF9yZWYuU3ltYm9sTm9kZTsKCiAgLyoqCiAgICogVGFrZXMgdGhlIGRlcml2YXRpdmUgb2YgYW4gZXhwcmVzc2lvbiBleHByZXNzZWQgaW4gcGFyc2VyIE5vZGVzLgogICAqIFRoZSBkZXJpdmF0aXZlIHdpbGwgYmUgdGFrZW4gb3ZlciB0aGUgc3VwcGxpZWQgdmFyaWFibGUgaW4gdGhlCiAgICogc2Vjb25kIHBhcmFtZXRlci4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIHZhcmlhYmxlcyBpbiB0aGUgZXhwcmVzc2lvbiwKICAgKiBpdCB3aWxsIHJldHVybiBhIHBhcnRpYWwgZGVyaXZhdGl2ZS4KICAgKgogICAqIFRoaXMgdXNlcyBydWxlcyBvZiBkaWZmZXJlbnRpYXRpb24gd2hpY2ggY2FuIGJlIGZvdW5kIGhlcmU6CiAgICoKICAgKiAtIFtEaWZmZXJlbnRpYXRpb24gcnVsZXMgKFdpa2lwZWRpYSldKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RpZmZlcmVudGlhdGlvbl9ydWxlcykKICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBkZXJpdmF0aXZlKGV4cHIsIHZhcmlhYmxlKQogICAqICAgICBkZXJpdmF0aXZlKGV4cHIsIHZhcmlhYmxlLCBvcHRpb25zKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICAgbWF0aC5kZXJpdmF0aXZlKCd4XjInLCAneCcpICAgICAgICAgICAgICAgICAgICAgLy8gTm9kZSB7MiAqIHh9CiAgICogICAgIG1hdGguZGVyaXZhdGl2ZSgneF4yJywgJ3gnLCB7c2ltcGxpZnk6IGZhbHNlfSkgIC8vIE5vZGUgezIgKiAxICogeCBeICgyIC0gMSkKICAgKiAgICAgbWF0aC5kZXJpdmF0aXZlKCdzaW4oMngpJywgJ3gnKSkgICAgICAgICAgICAgICAgLy8gTm9kZSB7MiAqIGNvcygyICogeCl9CiAgICogICAgIG1hdGguZGVyaXZhdGl2ZSgnMip4JywgJ3gnKS5ldmFsdWF0ZSgpICAgICAgICAgIC8vIG51bWJlciAyCiAgICogICAgIG1hdGguZGVyaXZhdGl2ZSgneF4yJywgJ3gnKS5ldmFsdWF0ZSh7eDogNH0pICAgIC8vIG51bWJlciA4CiAgICogICAgIGNvbnN0IGYgPSBtYXRoLnBhcnNlKCd4XjInKQogICAqICAgICBjb25zdCB4ID0gbWF0aC5wYXJzZSgneCcpCiAgICogICAgIG1hdGguZGVyaXZhdGl2ZShmLCB4KSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vZGUgezIgKiB4fQogICAqCiAgICogU2VlIGFsc286CiAgICoKICAgKiAgICAgc2ltcGxpZnksIHBhcnNlLCBldmFsdWF0ZQogICAqCiAgICogQHBhcmFtICB7Tm9kZSB8IHN0cmluZ30gZXhwciAgICAgICAgICAgVGhlIGV4cHJlc3Npb24gdG8gZGlmZmVyZW50aWF0ZQogICAqIEBwYXJhbSAge1N5bWJvbE5vZGUgfCBzdHJpbmd9IHZhcmlhYmxlIFRoZSB2YXJpYWJsZSBvdmVyIHdoaWNoIHRvIGRpZmZlcmVudGlhdGUKICAgKiBAcGFyYW0gIHt7c2ltcGxpZnk6IGJvb2xlYW59fSBbb3B0aW9uc10KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGVyZSBpcyBvbmUgb3B0aW9uIGF2YWlsYWJsZSwgYHNpbXBsaWZ5YCwgd2hpY2gKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0cnVlIGJ5IGRlZmF1bHQuIFdoZW4gZmFsc2UsIG91dHB1dCB3aWxsIG5vdAogICAqICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHNpbXBsaWZpZWQuCiAgICogQHJldHVybiB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gICAgVGhlIGRlcml2YXRpdmUgb2YgYGV4cHJgCiAgICovCiAgdmFyIGRlcml2YXRpdmUgPSB0eXBlZCgnZGVyaXZhdGl2ZScsIHsKICAgICdOb2RlLCBTeW1ib2xOb2RlLCBPYmplY3QnOiBmdW5jdGlvbiBOb2RlU3ltYm9sTm9kZU9iamVjdChleHByLCB2YXJpYWJsZSwgb3B0aW9ucykgewogICAgICB2YXIgY29uc3ROb2RlcyA9IHt9OwogICAgICBjb25zdFRhZyhjb25zdE5vZGVzLCBleHByLCB2YXJpYWJsZS5uYW1lKTsKCiAgICAgIHZhciByZXMgPSBfZGVyaXZhdGl2ZShleHByLCBjb25zdE5vZGVzKTsKCiAgICAgIHJldHVybiBvcHRpb25zLnNpbXBsaWZ5ID8gc2ltcGxpZnkocmVzKSA6IHJlczsKICAgIH0sCiAgICAnTm9kZSwgU3ltYm9sTm9kZSc6IGZ1bmN0aW9uIE5vZGVTeW1ib2xOb2RlKGV4cHIsIHZhcmlhYmxlKSB7CiAgICAgIHJldHVybiBkZXJpdmF0aXZlKGV4cHIsIHZhcmlhYmxlLCB7CiAgICAgICAgc2ltcGxpZnk6IHRydWUKICAgICAgfSk7CiAgICB9LAogICAgJ3N0cmluZywgU3ltYm9sTm9kZSc6IGZ1bmN0aW9uIHN0cmluZ1N5bWJvbE5vZGUoZXhwciwgdmFyaWFibGUpIHsKICAgICAgcmV0dXJuIGRlcml2YXRpdmUocGFyc2UoZXhwciksIHZhcmlhYmxlKTsKICAgIH0sCiAgICAnc3RyaW5nLCBTeW1ib2xOb2RlLCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdTeW1ib2xOb2RlT2JqZWN0KGV4cHIsIHZhcmlhYmxlLCBvcHRpb25zKSB7CiAgICAgIHJldHVybiBkZXJpdmF0aXZlKHBhcnNlKGV4cHIpLCB2YXJpYWJsZSwgb3B0aW9ucyk7CiAgICB9LAogICAgJ3N0cmluZywgc3RyaW5nJzogZnVuY3Rpb24gc3RyaW5nU3RyaW5nKGV4cHIsIHZhcmlhYmxlKSB7CiAgICAgIHJldHVybiBkZXJpdmF0aXZlKHBhcnNlKGV4cHIpLCBwYXJzZSh2YXJpYWJsZSkpOwogICAgfSwKICAgICdzdHJpbmcsIHN0cmluZywgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nU3RyaW5nT2JqZWN0KGV4cHIsIHZhcmlhYmxlLCBvcHRpb25zKSB7CiAgICAgIHJldHVybiBkZXJpdmF0aXZlKHBhcnNlKGV4cHIpLCBwYXJzZSh2YXJpYWJsZSksIG9wdGlvbnMpOwogICAgfSwKICAgICdOb2RlLCBzdHJpbmcnOiBmdW5jdGlvbiBOb2RlU3RyaW5nKGV4cHIsIHZhcmlhYmxlKSB7CiAgICAgIHJldHVybiBkZXJpdmF0aXZlKGV4cHIsIHBhcnNlKHZhcmlhYmxlKSk7CiAgICB9LAogICAgJ05vZGUsIHN0cmluZywgT2JqZWN0JzogZnVuY3Rpb24gTm9kZVN0cmluZ09iamVjdChleHByLCB2YXJpYWJsZSwgb3B0aW9ucykgewogICAgICByZXR1cm4gZGVyaXZhdGl2ZShleHByLCBwYXJzZSh2YXJpYWJsZSksIG9wdGlvbnMpOwogICAgfSAvLyBUT0RPOiByZXBsYWNlIHRoZSA4IHNpZ25hdHVyZXMgYWJvdmUgd2l0aCA0IGFzIHNvb24gYXMgdHlwZWQtZnVuY3Rpb24gc3VwcG9ydHMgb3B0aW9uYWwgYXJndW1lbnRzCgogICAgLyogVE9ETzogaW1wbGVtZW50IGFuZCB0ZXN0IHN5bnRheCB3aXRoIG9yZGVyIG9mIGRlcml2YXRpdmVzIC0+IGltcGxlbWVudCBhcyBhbiBvcHRpb24ge29yZGVyOiBudW1iZXJ9CiAgICAnTm9kZSwgU3ltYm9sTm9kZSwgQ29uc3RhbnROb2RlJzogZnVuY3Rpb24gKGV4cHIsIHZhcmlhYmxlLCB7b3JkZXJ9KSB7CiAgICAgIGxldCByZXMgPSBleHByCiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXI7IGkrKykgewogICAgICAgIGxldCBjb25zdE5vZGVzID0ge30KICAgICAgICBjb25zdFRhZyhjb25zdE5vZGVzLCBleHByLCB2YXJpYWJsZS5uYW1lKQogICAgICAgIHJlcyA9IF9kZXJpdmF0aXZlKHJlcywgY29uc3ROb2RlcykKICAgICAgfQogICAgICByZXR1cm4gcmVzCiAgICB9CiAgICAqLwoKICB9KTsKICBkZXJpdmF0aXZlLl9zaW1wbGlmeSA9IHRydWU7CgogIGRlcml2YXRpdmUudG9UZXggPSBmdW5jdGlvbiAoZGVyaXYpIHsKICAgIHJldHVybiBfZGVyaXZUZXguYXBwbHkobnVsbCwgZGVyaXYuYXJncyk7CiAgfTsgLy8gRklYTUU6IG1vdmUgdGhlIHRvVGV4IG1ldGhvZCBvZiBkZXJpdmF0aXZlIHRvIGxhdGV4LmpzLiBEaWZmaWN1bHR5IGlzIHRoYXQgaXQgcmVsaWVzIG9uIHBhcnNlLgogIC8vIE5PVEU6IHRoZSBvcHRpb25hbCAib3JkZXIiIHBhcmFtZXRlciBoZXJlIGlzIGN1cnJlbnRseSB1bnVzZWQKCgogIHZhciBfZGVyaXZUZXggPSB0eXBlZCgnX2Rlcml2VGV4JywgewogICAgJ05vZGUsIFN5bWJvbE5vZGUnOiBmdW5jdGlvbiBOb2RlU3ltYm9sTm9kZShleHByLCB4KSB7CiAgICAgIGlmIChPYmplY3QoaXNbImwiIC8qIGlzQ29uc3RhbnROb2RlICovXSkoZXhwcikgJiYgT2JqZWN0KGlzWyJNIiAvKiB0eXBlT2YgKi9dKShleHByLnZhbHVlKSA9PT0gJ3N0cmluZycpIHsKICAgICAgICByZXR1cm4gX2Rlcml2VGV4KHBhcnNlKGV4cHIudmFsdWUpLnRvU3RyaW5nKCksIHgudG9TdHJpbmcoKSwgMSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIF9kZXJpdlRleChleHByLnRvU3RyaW5nKCksIHgudG9TdHJpbmcoKSwgMSk7CiAgICAgIH0KICAgIH0sCiAgICAnTm9kZSwgQ29uc3RhbnROb2RlJzogZnVuY3Rpb24gTm9kZUNvbnN0YW50Tm9kZShleHByLCB4KSB7CiAgICAgIGlmIChPYmplY3QoaXNbIk0iIC8qIHR5cGVPZiAqL10pKHgudmFsdWUpID09PSAnc3RyaW5nJykgewogICAgICAgIHJldHVybiBfZGVyaXZUZXgoZXhwciwgcGFyc2UoeC52YWx1ZSkpOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiVGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8gJ2Rlcml2YXRpdmUnIGlzIGEgbm9uLXN0cmluZyBjb25zdGFudCIpOwogICAgICB9CiAgICB9LAogICAgJ05vZGUsIFN5bWJvbE5vZGUsIENvbnN0YW50Tm9kZSc6IGZ1bmN0aW9uIE5vZGVTeW1ib2xOb2RlQ29uc3RhbnROb2RlKGV4cHIsIHgsIG9yZGVyKSB7CiAgICAgIHJldHVybiBfZGVyaXZUZXgoZXhwci50b1N0cmluZygpLCB4Lm5hbWUsIG9yZGVyLnZhbHVlKTsKICAgIH0sCiAgICAnc3RyaW5nLCBzdHJpbmcsIG51bWJlcic6IGZ1bmN0aW9uIHN0cmluZ1N0cmluZ051bWJlcihleHByLCB4LCBvcmRlcikgewogICAgICB2YXIgZDsKCiAgICAgIGlmIChvcmRlciA9PT0gMSkgewogICAgICAgIGQgPSAne2RcXG92ZXIgZCcgKyB4ICsgJ30nOwogICAgICB9IGVsc2UgewogICAgICAgIGQgPSAne2ReeycgKyBvcmRlciArICd9XFxvdmVyIGQnICsgeCArICdeeycgKyBvcmRlciArICd9fSc7CiAgICAgIH0KCiAgICAgIHJldHVybiBkICsgIlxcbGVmdFsiLmNvbmNhdChleHByLCAiXFxyaWdodF0iKTsKICAgIH0KICB9KTsKICAvKioKICAgKiBEb2VzIGEgZGVwdGgtZmlyc3Qgc2VhcmNoIG9uIHRoZSBleHByZXNzaW9uIHRyZWUgdG8gaWRlbnRpZnkgd2hhdCBOb2RlcwogICAqIGFyZSBjb25zdGFudHMgKGUuZy4gMiArIDIpLCBhbmQgc3RvcmVzIHRoZSBvbmVzIHRoYXQgYXJlIGNvbnN0YW50cyBpbgogICAqIGNvbnN0Tm9kZXMuIENsYXNzaWZpY2F0aW9uIGlzIGRvbmUgYXMgZm9sbG93czoKICAgKgogICAqICAgMS4gQ29uc3RhbnROb2RlcyBhcmUgY29uc3RhbnRzLgogICAqICAgMi4gSWYgdGhlcmUgZXhpc3RzIGEgU3ltYm9sTm9kZSwgb2Ygd2hpY2ggd2UgYXJlIGRpZmZlcmVudGlhdGluZyBvdmVyLAogICAqICAgICAgaW4gdGhlIHN1YnRyZWUgaXQgaXMgbm90IGNvbnN0YW50LgogICAqCiAgICogQHBhcmFtICB7T2JqZWN0fSBjb25zdE5vZGVzICBIb2xkcyB0aGUgbm9kZXMgdGhhdCBhcmUgY29uc3RhbnQKICAgKiBAcGFyYW0gIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSBub2RlCiAgICogQHBhcmFtICB7c3RyaW5nfSB2YXJOYW1lICAgICBWYXJpYWJsZSB0aGF0IHdlIGFyZSBkaWZmZXJlbnRpYXRpbmcKICAgKiBAcmV0dXJuIHtib29sZWFufSAgaWYgbm9kZSBpcyBjb25zdGFudAogICAqLwogIC8vIFRPRE86IGNhbiB3ZSByZXdyaXRlIGNvbnN0VGFnIGludG8gYSBwdXJlIGZ1bmN0aW9uPwoKCiAgdmFyIGNvbnN0VGFnID0gdHlwZWQoJ2NvbnN0VGFnJywgewogICAgJ09iamVjdCwgQ29uc3RhbnROb2RlLCBzdHJpbmcnOiBmdW5jdGlvbiBPYmplY3RDb25zdGFudE5vZGVTdHJpbmcoY29uc3ROb2Rlcywgbm9kZSkgewogICAgICBjb25zdE5vZGVzW25vZGVdID0gdHJ1ZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9LAogICAgJ09iamVjdCwgU3ltYm9sTm9kZSwgc3RyaW5nJzogZnVuY3Rpb24gT2JqZWN0U3ltYm9sTm9kZVN0cmluZyhjb25zdE5vZGVzLCBub2RlLCB2YXJOYW1lKSB7CiAgICAgIC8vIFRyZWF0IG90aGVyIHZhcmlhYmxlcyBsaWtlIGNvbnN0YW50cy4gRm9yIHJlYXNvbmluZywgc2VlOgogICAgICAvLyAgIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BhcnRpYWxfZGVyaXZhdGl2ZQogICAgICBpZiAobm9kZS5uYW1lICE9PSB2YXJOYW1lKSB7CiAgICAgICAgY29uc3ROb2Rlc1tub2RlXSA9IHRydWU7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0sCiAgICAnT2JqZWN0LCBQYXJlbnRoZXNpc05vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE9iamVjdFBhcmVudGhlc2lzTm9kZVN0cmluZyhjb25zdE5vZGVzLCBub2RlLCB2YXJOYW1lKSB7CiAgICAgIHJldHVybiBjb25zdFRhZyhjb25zdE5vZGVzLCBub2RlLmNvbnRlbnQsIHZhck5hbWUpOwogICAgfSwKICAgICdPYmplY3QsIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE9iamVjdEZ1bmN0aW9uQXNzaWdubWVudE5vZGVTdHJpbmcoY29uc3ROb2Rlcywgbm9kZSwgdmFyTmFtZSkgewogICAgICBpZiAobm9kZS5wYXJhbXMuaW5kZXhPZih2YXJOYW1lKSA9PT0gLTEpIHsKICAgICAgICBjb25zdE5vZGVzW25vZGVdID0gdHJ1ZTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQoKICAgICAgcmV0dXJuIGNvbnN0VGFnKGNvbnN0Tm9kZXMsIG5vZGUuZXhwciwgdmFyTmFtZSk7CiAgICB9LAogICAgJ09iamVjdCwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlLCBzdHJpbmcnOiBmdW5jdGlvbiBPYmplY3RGdW5jdGlvbk5vZGVPcGVyYXRvck5vZGVTdHJpbmcoY29uc3ROb2Rlcywgbm9kZSwgdmFyTmFtZSkgewogICAgICBpZiAobm9kZS5hcmdzLmxlbmd0aCA+IDApIHsKICAgICAgICB2YXIgaXNDb25zdCA9IGNvbnN0VGFnKGNvbnN0Tm9kZXMsIG5vZGUuYXJnc1swXSwgdmFyTmFtZSk7CgogICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICBpc0NvbnN0ID0gY29uc3RUYWcoY29uc3ROb2Rlcywgbm9kZS5hcmdzW2ldLCB2YXJOYW1lKSAmJiBpc0NvbnN0OwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzQ29uc3QpIHsKICAgICAgICAgIGNvbnN0Tm9kZXNbbm9kZV0gPSB0cnVlOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfSk7CiAgLyoqCiAgICogQXBwbGllcyBkaWZmZXJlbnRpYXRpb24gcnVsZXMuCiAgICoKICAgKiBAcGFyYW0gIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSBub2RlCiAgICogQHBhcmFtICB7T2JqZWN0fSBjb25zdE5vZGVzICBIb2xkcyB0aGUgbm9kZXMgdGhhdCBhcmUgY29uc3RhbnQKICAgKiBAcmV0dXJuIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSAgICBUaGUgZGVyaXZhdGl2ZSBvZiBgZXhwcmAKICAgKi8KCiAgdmFyIF9kZXJpdmF0aXZlID0gdHlwZWQoJ19kZXJpdmF0aXZlJywgewogICAgJ0NvbnN0YW50Tm9kZSwgT2JqZWN0JzogZnVuY3Rpb24gQ29uc3RhbnROb2RlT2JqZWN0KG5vZGUpIHsKICAgICAgcmV0dXJuIGNyZWF0ZUNvbnN0YW50Tm9kZSgwKTsKICAgIH0sCiAgICAnU3ltYm9sTm9kZSwgT2JqZWN0JzogZnVuY3Rpb24gU3ltYm9sTm9kZU9iamVjdChub2RlLCBjb25zdE5vZGVzKSB7CiAgICAgIGlmIChjb25zdE5vZGVzW25vZGVdICE9PSB1bmRlZmluZWQpIHsKICAgICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApOwogICAgICB9CgogICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDEpOwogICAgfSwKICAgICdQYXJlbnRoZXNpc05vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIFBhcmVudGhlc2lzTm9kZU9iamVjdChub2RlLCBjb25zdE5vZGVzKSB7CiAgICAgIHJldHVybiBuZXcgUGFyZW50aGVzaXNOb2RlKF9kZXJpdmF0aXZlKG5vZGUuY29udGVudCwgY29uc3ROb2RlcykpOwogICAgfSwKICAgICdGdW5jdGlvbkFzc2lnbm1lbnROb2RlLCBPYmplY3QnOiBmdW5jdGlvbiBGdW5jdGlvbkFzc2lnbm1lbnROb2RlT2JqZWN0KG5vZGUsIGNvbnN0Tm9kZXMpIHsKICAgICAgaWYgKGNvbnN0Tm9kZXNbbm9kZV0gIT09IHVuZGVmaW5lZCkgewogICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7CiAgICAgIH0KCiAgICAgIHJldHVybiBfZGVyaXZhdGl2ZShub2RlLmV4cHIsIGNvbnN0Tm9kZXMpOwogICAgfSwKICAgICdGdW5jdGlvbk5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIEZ1bmN0aW9uTm9kZU9iamVjdChub2RlLCBjb25zdE5vZGVzKSB7CiAgICAgIGlmIChub2RlLmFyZ3MubGVuZ3RoICE9PSAxKSB7CiAgICAgICAgZnVuY0FyZ3NDaGVjayhub2RlKTsKICAgICAgfQoKICAgICAgaWYgKGNvbnN0Tm9kZXNbbm9kZV0gIT09IHVuZGVmaW5lZCkgewogICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7CiAgICAgIH0KCiAgICAgIHZhciBhcmcwID0gbm9kZS5hcmdzWzBdOwogICAgICB2YXIgYXJnMTsKICAgICAgdmFyIGRpdiA9IGZhbHNlOyAvLyBpcyBvdXRwdXQgYSBmcmFjdGlvbj8KCiAgICAgIHZhciBuZWdhdGl2ZSA9IGZhbHNlOyAvLyBpcyBvdXRwdXQgbmVnYXRpdmU/CgogICAgICB2YXIgZnVuY0Rlcml2YXRpdmU7CgogICAgICBzd2l0Y2ggKG5vZGUubmFtZSkgewogICAgICAgIGNhc2UgJ2NicnQnOgogICAgICAgICAgLy8gZC9keChjYnJ0KHgpKSA9IDEgLyAoM3heKDIvMykpCiAgICAgICAgICBkaXYgPSB0cnVlOwogICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW2NyZWF0ZUNvbnN0YW50Tm9kZSgzKSwgbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbYXJnMCwgbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDIpLCBjcmVhdGVDb25zdGFudE5vZGUoMyldKV0pXSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnc3FydCc6CiAgICAgICAgY2FzZSAnbnRoUm9vdCc6CiAgICAgICAgICAvLyBkL2R4KHNxcnQoeCkpID0gMSAvICgyKnNxcnQoeCkpCiAgICAgICAgICBpZiAobm9kZS5hcmdzLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgICBkaXYgPSB0cnVlOwogICAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbY3JlYXRlQ29uc3RhbnROb2RlKDIpLCBuZXcgRnVuY3Rpb25Ob2RlKCdzcXJ0JywgW2FyZzBdKV0pOwogICAgICAgICAgfSBlbHNlIGlmIChub2RlLmFyZ3MubGVuZ3RoID09PSAyKSB7CiAgICAgICAgICAgIC8vIFJlYXJyYW5nZSBmcm9tIG50aFJvb3QoeCwgYSkgLT4geF4oMS9hKQogICAgICAgICAgICBhcmcxID0gbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDEpLCBub2RlLmFyZ3NbMV1dKTsgLy8gSXMgYSB2YXJpYWJsZT8KCiAgICAgICAgICAgIGNvbnN0Tm9kZXNbYXJnMV0gPSBjb25zdE5vZGVzW25vZGUuYXJnc1sxXV07CiAgICAgICAgICAgIHJldHVybiBfZGVyaXZhdGl2ZShuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLCBhcmcxXSksIGNvbnN0Tm9kZXMpOwogICAgICAgICAgfQoKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdsb2cxMCc6CiAgICAgICAgICBhcmcxID0gY3JlYXRlQ29uc3RhbnROb2RlKDEwKTsKCiAgICAgICAgLyogZmFsbCB0aHJvdWdoISAqLwoKICAgICAgICBjYXNlICdsb2cnOgogICAgICAgICAgaWYgKCFhcmcxICYmIG5vZGUuYXJncy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgLy8gZC9keChsb2coeCkpID0gMSAvIHgKICAgICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBhcmcwLmNsb25lKCk7CiAgICAgICAgICAgIGRpdiA9IHRydWU7CiAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUuYXJncy5sZW5ndGggPT09IDEgJiYgYXJnMSB8fCBub2RlLmFyZ3MubGVuZ3RoID09PSAyICYmIGNvbnN0Tm9kZXNbbm9kZS5hcmdzWzFdXSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIC8vIGQvZHgobG9nKHgsIGMpKSA9IDEgLyAoeCpsbihjKSkKICAgICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW2FyZzAuY2xvbmUoKSwgbmV3IEZ1bmN0aW9uTm9kZSgnbG9nJywgW2FyZzEgfHwgbm9kZS5hcmdzWzFdXSldKTsKICAgICAgICAgICAgZGl2ID0gdHJ1ZTsKICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5hcmdzLmxlbmd0aCA9PT0gMikgewogICAgICAgICAgICAvLyBkL2R4KGxvZyhmKHgpLCBnKHgpKSkgPSBkL2R4KGxvZyhmKHgpKSAvIGxvZyhnKHgpKSkKICAgICAgICAgICAgcmV0dXJuIF9kZXJpdmF0aXZlKG5ldyBPcGVyYXRvck5vZGUoJy8nLCAnZGl2aWRlJywgW25ldyBGdW5jdGlvbk5vZGUoJ2xvZycsIFthcmcwXSksIG5ldyBGdW5jdGlvbk5vZGUoJ2xvZycsIFtub2RlLmFyZ3NbMV1dKV0pLCBjb25zdE5vZGVzKTsKICAgICAgICAgIH0KCiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAncG93JzoKICAgICAgICAgIGNvbnN0Tm9kZXNbYXJnMV0gPSBjb25zdE5vZGVzW25vZGUuYXJnc1sxXV07IC8vIFBhc3MgdG8gcG93IG9wZXJhdG9yIG5vZGUgcGFyc2VyCgogICAgICAgICAgcmV0dXJuIF9kZXJpdmF0aXZlKG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAsIG5vZGUuYXJnc1sxXV0pLCBjb25zdE5vZGVzKTsKCiAgICAgICAgY2FzZSAnZXhwJzoKICAgICAgICAgIC8vIGQvZHgoZV54KSA9IGVeeAogICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdleHAnLCBbYXJnMC5jbG9uZSgpXSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnc2luJzoKICAgICAgICAgIC8vIGQvZHgoc2luKHgpKSA9IGNvcyh4KQogICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdjb3MnLCBbYXJnMC5jbG9uZSgpXSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnY29zJzoKICAgICAgICAgIC8vIGQvZHgoY29zKHgpKSA9IC1zaW4oeCkKICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW25ldyBGdW5jdGlvbk5vZGUoJ3NpbicsIFthcmcwLmNsb25lKCldKV0pOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ3Rhbic6CiAgICAgICAgICAvLyBkL2R4KHRhbih4KSkgPSBzZWMoeCleMgogICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFtuZXcgRnVuY3Rpb25Ob2RlKCdzZWMnLCBbYXJnMC5jbG9uZSgpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ3NlYyc6CiAgICAgICAgICAvLyBkL2R4KHNlYyh4KSkgPSBzZWMoeCl0YW4oeCkKICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLCBuZXcgRnVuY3Rpb25Ob2RlKCd0YW4nLCBbYXJnMC5jbG9uZSgpXSldKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdjc2MnOgogICAgICAgICAgLy8gZC9keChjc2MoeCkpID0gLWNzYyh4KWNvdCh4KQogICAgICAgICAgbmVnYXRpdmUgPSB0cnVlOwogICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25vZGUsIG5ldyBGdW5jdGlvbk5vZGUoJ2NvdCcsIFthcmcwLmNsb25lKCldKV0pOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2NvdCc6CiAgICAgICAgICAvLyBkL2R4KGNvdCh4KSkgPSAtY3NjKHgpXjIKICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTsKICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbbmV3IEZ1bmN0aW9uTm9kZSgnY3NjJywgW2FyZzAuY2xvbmUoKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMildKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdhc2luJzoKICAgICAgICAgIC8vIGQvZHgoYXNpbih4KSkgPSAxIC8gc3FydCgxIC0geF4yKQogICAgICAgICAgZGl2ID0gdHJ1ZTsKICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IEZ1bmN0aW9uTm9kZSgnc3FydCcsIFtuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW2NyZWF0ZUNvbnN0YW50Tm9kZSgxKSwgbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbYXJnMC5jbG9uZSgpLCBjcmVhdGVDb25zdGFudE5vZGUoMildKV0pXSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnYWNvcyc6CiAgICAgICAgICAvLyBkL2R4KGFjb3MoeCkpID0gLTEgLyBzcXJ0KDEgLSB4XjIpCiAgICAgICAgICBkaXYgPSB0cnVlOwogICAgICAgICAgbmVnYXRpdmUgPSB0cnVlOwogICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdzcXJ0JywgW25ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDEpLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSldKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdhdGFuJzoKICAgICAgICAgIC8vIGQvZHgoYXRhbih4KSkgPSAxIC8gKHheMiArIDEpCiAgICAgICAgICBkaXYgPSB0cnVlOwogICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcrJywgJ2FkZCcsIFtuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMSldKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdhc2VjJzoKICAgICAgICAgIC8vIGQvZHgoYXNlYyh4KSkgPSAxIC8gKHx4fCpzcXJ0KHheMiAtIDEpKQogICAgICAgICAgZGl2ID0gdHJ1ZTsKICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtuZXcgRnVuY3Rpb25Ob2RlKCdhYnMnLCBbYXJnMC5jbG9uZSgpXSksIG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMSldKV0pXSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnYWNzYyc6CiAgICAgICAgICAvLyBkL2R4KGFjc2MoeCkpID0gLTEgLyAofHh8KnNxcnQoeF4yIC0gMSkpCiAgICAgICAgICBkaXYgPSB0cnVlOwogICAgICAgICAgbmVnYXRpdmUgPSB0cnVlOwogICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25ldyBGdW5jdGlvbk5vZGUoJ2FicycsIFthcmcwLmNsb25lKCldKSwgbmV3IEZ1bmN0aW9uTm9kZSgnc3FydCcsIFtuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pXSldKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdhY290JzoKICAgICAgICAgIC8vIGQvZHgoYWNvdCh4KSkgPSAtMSAvICh4XjIgKyAxKQogICAgICAgICAgZGl2ID0gdHJ1ZTsKICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTsKICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKycsICdhZGQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbYXJnMC5jbG9uZSgpLCBjcmVhdGVDb25zdGFudE5vZGUoMildKSwgY3JlYXRlQ29uc3RhbnROb2RlKDEpXSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnc2luaCc6CiAgICAgICAgICAvLyBkL2R4KHNpbmgoeCkpID0gY29zaCh4KQogICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdjb3NoJywgW2FyZzAuY2xvbmUoKV0pOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2Nvc2gnOgogICAgICAgICAgLy8gZC9keChjb3NoKHgpKSA9IHNpbmgoeCkKICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IEZ1bmN0aW9uTm9kZSgnc2luaCcsIFthcmcwLmNsb25lKCldKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICd0YW5oJzoKICAgICAgICAgIC8vIGQvZHgodGFuaCh4KSkgPSBzZWNoKHgpXjIKICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbbmV3IEZ1bmN0aW9uTm9kZSgnc2VjaCcsIFthcmcwLmNsb25lKCldKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnc2VjaCc6CiAgICAgICAgICAvLyBkL2R4KHNlY2goeCkpID0gLXNlY2goeCl0YW5oKHgpCiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7CiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZSwgbmV3IEZ1bmN0aW9uTm9kZSgndGFuaCcsIFthcmcwLmNsb25lKCldKV0pOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2NzY2gnOgogICAgICAgICAgLy8gZC9keChjc2NoKHgpKSA9IC1jc2NoKHgpY290aCh4KQogICAgICAgICAgbmVnYXRpdmUgPSB0cnVlOwogICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25vZGUsIG5ldyBGdW5jdGlvbk5vZGUoJ2NvdGgnLCBbYXJnMC5jbG9uZSgpXSldKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdjb3RoJzoKICAgICAgICAgIC8vIGQvZHgoY290aCh4KSkgPSAtY3NjaCh4KV4yCiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7CiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW25ldyBGdW5jdGlvbk5vZGUoJ2NzY2gnLCBbYXJnMC5jbG9uZSgpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2FzaW5oJzoKICAgICAgICAgIC8vIGQvZHgoYXNpbmgoeCkpID0gMSAvIHNxcnQoeF4yICsgMSkKICAgICAgICAgIGRpdiA9IHRydWU7CiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnKycsICdhZGQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbYXJnMC5jbG9uZSgpLCBjcmVhdGVDb25zdGFudE5vZGUoMildKSwgY3JlYXRlQ29uc3RhbnROb2RlKDEpXSldKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdhY29zaCc6CiAgICAgICAgICAvLyBkL2R4KGFjb3NoKHgpKSA9IDEgLyBzcXJ0KHheMiAtIDEpOyBYWFggcG90ZW50aWFsbHkgb25seSBmb3IgeCA+PSAxICh0aGUgcmVhbCBzcGVjdHJ1bSkKICAgICAgICAgIGRpdiA9IHRydWU7CiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMSldKV0pOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2F0YW5oJzoKICAgICAgICAgIC8vIGQvZHgoYXRhbmgoeCkpID0gMSAvICgxIC0geF4yKQogICAgICAgICAgZGl2ID0gdHJ1ZTsKICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdhc2VjaCc6CiAgICAgICAgICAvLyBkL2R4KGFzZWNoKHgpKSA9IC0xIC8gKHgqc3FydCgxIC0geF4yKSkKICAgICAgICAgIGRpdiA9IHRydWU7CiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7CiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbYXJnMC5jbG9uZSgpLCBuZXcgRnVuY3Rpb25Ob2RlKCdzcXJ0JywgW25ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDEpLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSldKV0pOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2Fjc2NoJzoKICAgICAgICAgIC8vIGQvZHgoYWNzY2goeCkpID0gLTEgLyAofHh8KnNxcnQoeF4yICsgMSkpCiAgICAgICAgICBkaXYgPSB0cnVlOwogICAgICAgICAgbmVnYXRpdmUgPSB0cnVlOwogICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25ldyBGdW5jdGlvbk5vZGUoJ2FicycsIFthcmcwLmNsb25lKCldKSwgbmV3IEZ1bmN0aW9uTm9kZSgnc3FydCcsIFtuZXcgT3BlcmF0b3JOb2RlKCcrJywgJ2FkZCcsIFtuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMSldKV0pXSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnYWNvdGgnOgogICAgICAgICAgLy8gZC9keChhY290aCh4KSkgPSAtMSAvICgxIC0geF4yKQogICAgICAgICAgZGl2ID0gdHJ1ZTsKICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTsKICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdhYnMnOgogICAgICAgICAgLy8gZC9keChhYnMoeCkpID0gYWJzKHgpL3gKICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbbmV3IEZ1bmN0aW9uTm9kZShuZXcgU3ltYm9sTm9kZSgnYWJzJyksIFthcmcwLmNsb25lKCldKSwgYXJnMC5jbG9uZSgpXSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZ2FtbWEnOiAvLyBOZWVkcyBkaWdhbW1hIGZ1bmN0aW9uLCBkL2R4KGdhbW1hKHgpKSA9IGdhbW1hKHgpZGlnYW1tYSh4KQoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiAiJyArIG5vZGUubmFtZSArICciIGlzIG5vdCBzdXBwb3J0ZWQgYnkgZGVyaXZhdGl2ZSwgb3IgYSB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGlzIHBhc3NlZCcpOwogICAgICB9CgogICAgICB2YXIgb3AsIGZ1bmM7CgogICAgICBpZiAoZGl2KSB7CiAgICAgICAgb3AgPSAnLyc7CiAgICAgICAgZnVuYyA9ICdkaXZpZGUnOwogICAgICB9IGVsc2UgewogICAgICAgIG9wID0gJyonOwogICAgICAgIGZ1bmMgPSAnbXVsdGlwbHknOwogICAgICB9CiAgICAgIC8qIEFwcGx5IGNoYWluIHJ1bGUgdG8gYWxsIGZ1bmN0aW9uczoKICAgICAgICAgRih4KSAgPSBmKGcoeCkpCiAgICAgICAgIEYnKHgpID0gZycoeCkqZicoZyh4KSkgKi8KCgogICAgICB2YXIgY2hhaW5EZXJpdmF0aXZlID0gX2Rlcml2YXRpdmUoYXJnMCwgY29uc3ROb2Rlcyk7CgogICAgICBpZiAobmVnYXRpdmUpIHsKICAgICAgICBjaGFpbkRlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3VuYXJ5TWludXMnLCBbY2hhaW5EZXJpdmF0aXZlXSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG9wLCBmdW5jLCBbY2hhaW5EZXJpdmF0aXZlLCBmdW5jRGVyaXZhdGl2ZV0pOwogICAgfSwKICAgICdPcGVyYXRvck5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIE9wZXJhdG9yTm9kZU9iamVjdChub2RlLCBjb25zdE5vZGVzKSB7CiAgICAgIGlmIChjb25zdE5vZGVzW25vZGVdICE9PSB1bmRlZmluZWQpIHsKICAgICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApOwogICAgICB9CgogICAgICBpZiAobm9kZS5vcCA9PT0gJysnKSB7CiAgICAgICAgLy8gZC9keChzdW0oZih4KSkgPSBzdW0oZicoeCkpCiAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgbm9kZS5hcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7CiAgICAgICAgICByZXR1cm4gX2Rlcml2YXRpdmUoYXJnLCBjb25zdE5vZGVzKTsKICAgICAgICB9KSk7CiAgICAgIH0KCiAgICAgIGlmIChub2RlLm9wID09PSAnLScpIHsKICAgICAgICAvLyBkL2R4KCsvLWYoeCkpID0gKy8tZicoeCkKICAgICAgICBpZiAobm9kZS5pc1VuYXJ5KCkpIHsKICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfZGVyaXZhdGl2ZShub2RlLmFyZ3NbMF0sIGNvbnN0Tm9kZXMpXSk7CiAgICAgICAgfSAvLyBMaW5lYXJpdHkgb2YgZGlmZmVyZW50aWF0aW9uLCBkL2R4KGYoeCkgKy8tIGcoeCkpID0gZicoeCkgKy8tIGcnKHgpCgoKICAgICAgICBpZiAobm9kZS5pc0JpbmFyeSgpKSB7CiAgICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShub2RlLm9wLCBub2RlLmZuLCBbX2Rlcml2YXRpdmUobm9kZS5hcmdzWzBdLCBjb25zdE5vZGVzKSwgX2Rlcml2YXRpdmUobm9kZS5hcmdzWzFdLCBjb25zdE5vZGVzKV0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKG5vZGUub3AgPT09ICcqJykgewogICAgICAgIC8vIGQvZHgoYypmKHgpKSA9IGMqZicoeCkKICAgICAgICB2YXIgY29uc3RhbnRUZXJtcyA9IG5vZGUuYXJncy5maWx0ZXIoZnVuY3Rpb24gKGFyZykgewogICAgICAgICAgcmV0dXJuIGNvbnN0Tm9kZXNbYXJnXSAhPT0gdW5kZWZpbmVkOwogICAgICAgIH0pOwoKICAgICAgICBpZiAoY29uc3RhbnRUZXJtcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICB2YXIgbm9uQ29uc3RhbnRUZXJtcyA9IG5vZGUuYXJncy5maWx0ZXIoZnVuY3Rpb24gKGFyZykgewogICAgICAgICAgICByZXR1cm4gY29uc3ROb2Rlc1thcmddID09PSB1bmRlZmluZWQ7CiAgICAgICAgICB9KTsKICAgICAgICAgIHZhciBub25Db25zdGFudE5vZGUgPSBub25Db25zdGFudFRlcm1zLmxlbmd0aCA9PT0gMSA/IG5vbkNvbnN0YW50VGVybXNbMF0gOiBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5Jywgbm9uQ29uc3RhbnRUZXJtcyk7CiAgICAgICAgICB2YXIgbmV3QXJncyA9IGNvbnN0YW50VGVybXMuY29uY2F0KF9kZXJpdmF0aXZlKG5vbkNvbnN0YW50Tm9kZSwgY29uc3ROb2RlcykpOwogICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBuZXdBcmdzKTsKICAgICAgICB9IC8vIFByb2R1Y3QgUnVsZSwgZC9keChmKHgpKmcoeCkpID0gZicoeCkqZyh4KSArIGYoeCkqZycoeCkKCgogICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcrJywgJ2FkZCcsIG5vZGUuYXJncy5tYXAoZnVuY3Rpb24gKGFyZ091dGVyKSB7CiAgICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIG5vZGUuYXJncy5tYXAoZnVuY3Rpb24gKGFyZ0lubmVyKSB7CiAgICAgICAgICAgIHJldHVybiBhcmdJbm5lciA9PT0gYXJnT3V0ZXIgPyBfZGVyaXZhdGl2ZShhcmdJbm5lciwgY29uc3ROb2RlcykgOiBhcmdJbm5lci5jbG9uZSgpOwogICAgICAgICAgfSkpOwogICAgICAgIH0pKTsKICAgICAgfQoKICAgICAgaWYgKG5vZGUub3AgPT09ICcvJyAmJiBub2RlLmlzQmluYXJ5KCkpIHsKICAgICAgICB2YXIgYXJnMCA9IG5vZGUuYXJnc1swXTsKICAgICAgICB2YXIgYXJnMSA9IG5vZGUuYXJnc1sxXTsgLy8gZC9keChmKHgpIC8gYykgPSBmJyh4KSAvIGMKCiAgICAgICAgaWYgKGNvbnN0Tm9kZXNbYXJnMV0gIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJy8nLCAnZGl2aWRlJywgW19kZXJpdmF0aXZlKGFyZzAsIGNvbnN0Tm9kZXMpLCBhcmcxXSk7CiAgICAgICAgfSAvLyBSZWNpcHJvY2FsIFJ1bGUsIGQvZHgoYyAvIGYoeCkpID0gLWMoZicoeCkvZih4KV4yKQoKCiAgICAgICAgaWYgKGNvbnN0Tm9kZXNbYXJnMF0gIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW2FyZzBdKSwgbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbX2Rlcml2YXRpdmUoYXJnMSwgY29uc3ROb2RlcyksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzEuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pOwogICAgICAgIH0gLy8gUXVvdGllbnQgcnVsZSwgZC9keChmKHgpIC8gZyh4KSkgPSAoZicoeClnKHgpIC0gZih4KWcnKHgpKSAvIGcoeCleMgoKCiAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJy8nLCAnZGl2aWRlJywgW25ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtfZGVyaXZhdGl2ZShhcmcwLCBjb25zdE5vZGVzKSwgYXJnMS5jbG9uZSgpXSksIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbYXJnMC5jbG9uZSgpLCBfZGVyaXZhdGl2ZShhcmcxLCBjb25zdE5vZGVzKV0pXSksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzEuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKTsKICAgICAgfQoKICAgICAgaWYgKG5vZGUub3AgPT09ICdeJyAmJiBub2RlLmlzQmluYXJ5KCkpIHsKICAgICAgICB2YXIgX2FyZyA9IG5vZGUuYXJnc1swXTsKICAgICAgICB2YXIgX2FyZzIgPSBub2RlLmFyZ3NbMV07CgogICAgICAgIGlmIChjb25zdE5vZGVzW19hcmddICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgIC8vIElmIGlzIHNlY3JldGx5IGNvbnN0YW50OyAwXmYoeCkgPSAxIChpbiBKUyksIDFeZih4KSA9IDEKICAgICAgICAgIGlmIChPYmplY3QoaXNbImwiIC8qIGlzQ29uc3RhbnROb2RlICovXSkoX2FyZykgJiYgKGlzWmVybyhfYXJnLnZhbHVlKSB8fCBlcXVhbChfYXJnLnZhbHVlLCAxKSkpIHsKICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbnN0YW50Tm9kZSgwKTsKICAgICAgICAgIH0gLy8gZC9keChjXmYoeCkpID0gY15mKHgpKmxuKGMpKmYnKHgpCgoKICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25vZGUsIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbmV3IEZ1bmN0aW9uTm9kZSgnbG9nJywgW19hcmcuY2xvbmUoKV0pLCBfZGVyaXZhdGl2ZShfYXJnMi5jbG9uZSgpLCBjb25zdE5vZGVzKV0pXSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoY29uc3ROb2Rlc1tfYXJnMl0gIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgaWYgKE9iamVjdChpc1sibCIgLyogaXNDb25zdGFudE5vZGUgKi9dKShfYXJnMikpIHsKICAgICAgICAgICAgLy8gSWYgaXMgc2VjcmV0bHkgY29uc3RhbnQ7IGYoeCleMCA9IDEgLT4gZC9keCgxKSA9IDAKICAgICAgICAgICAgaWYgKGlzWmVybyhfYXJnMi52YWx1ZSkpIHsKICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApOwogICAgICAgICAgICB9IC8vIElnbm9yZSBleHBvbmVudDsgZih4KV4xID0gZih4KQoKCiAgICAgICAgICAgIGlmIChlcXVhbChfYXJnMi52YWx1ZSwgMSkpIHsKICAgICAgICAgICAgICByZXR1cm4gX2Rlcml2YXRpdmUoX2FyZywgY29uc3ROb2Rlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gLy8gRWxlbWVudGFyeSBQb3dlciBSdWxlLCBkL2R4KGYoeCleYykgPSBjKmYnKHgpKmYoeCleKGMtMSkKCgogICAgICAgICAgdmFyIHBvd01pbnVzT25lID0gbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbX2FyZy5jbG9uZSgpLCBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW19hcmcyLCBjcmVhdGVDb25zdGFudE5vZGUoMSldKV0pOwogICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2FyZzIuY2xvbmUoKSwgbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtfZGVyaXZhdGl2ZShfYXJnLCBjb25zdE5vZGVzKSwgcG93TWludXNPbmVdKV0pOwogICAgICAgIH0gLy8gRnVuY3Rpb25hbCBQb3dlciBSdWxlLCBkL2R4KGZeZykgPSBmXmcqW2YnKihnL2YpICsgZydsbihmKV0KCgogICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW19hcmcuY2xvbmUoKSwgX2FyZzIuY2xvbmUoKV0pLCBuZXcgT3BlcmF0b3JOb2RlKCcrJywgJ2FkZCcsIFtuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW19kZXJpdmF0aXZlKF9hcmcsIGNvbnN0Tm9kZXMpLCBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtfYXJnMi5jbG9uZSgpLCBfYXJnLmNsb25lKCldKV0pLCBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW19kZXJpdmF0aXZlKF9hcmcyLCBjb25zdE5vZGVzKSwgbmV3IEZ1bmN0aW9uTm9kZSgnbG9nJywgW19hcmcuY2xvbmUoKV0pXSldKV0pOwogICAgICB9CgogICAgICB0aHJvdyBuZXcgRXJyb3IoJ09wZXJhdG9yICInICsgbm9kZS5vcCArICciIGlzIG5vdCBzdXBwb3J0ZWQgYnkgZGVyaXZhdGl2ZSwgb3IgYSB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGlzIHBhc3NlZCcpOwogICAgfQogIH0pOwogIC8qKgogICAqIEVuc3VyZXMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGEgZnVuY3Rpb24gYXJlIGNvcnJlY3QsCiAgICogYW5kIHdpbGwgdGhyb3cgYW4gZXJyb3Igb3RoZXJ3aXNlLgogICAqCiAgICogQHBhcmFtIHtGdW5jdGlvbk5vZGV9IG5vZGUKICAgKi8KCgogIGZ1bmN0aW9uIGZ1bmNBcmdzQ2hlY2sobm9kZSkgewogICAgLy8gVE9ETyBhZGQgbWluLCBtYXggZXRjCiAgICBpZiAoKG5vZGUubmFtZSA9PT0gJ2xvZycgfHwgbm9kZS5uYW1lID09PSAnbnRoUm9vdCcgfHwgbm9kZS5uYW1lID09PSAncG93JykgJiYgbm9kZS5hcmdzLmxlbmd0aCA9PT0gMikgewogICAgICByZXR1cm47CiAgICB9IC8vIFRoZXJlIHNob3VsZCBiZSBhbiBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyBpZiB3ZSByZWFjaCBoZXJlCiAgICAvLyBDaGFuZ2UgYWxsIGFyZ3MgdG8gY29uc3RhbnRzIHRvIGF2b2lkIHVuaWRlbnRpZmllZAogICAgLy8gc3ltYm9sIGVycm9yIHdoZW4gY29tcGlsaW5nIGZ1bmN0aW9uCgoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgKytpKSB7CiAgICAgIG5vZGUuYXJnc1tpXSA9IGNyZWF0ZUNvbnN0YW50Tm9kZSgwKTsKICAgIH0KCiAgICBub2RlLmNvbXBpbGUoKS5ldmFsdWF0ZSgpOwogICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBUeXBlRXJyb3IsIGJ1dCBub25lIGZvdW5kJyk7CiAgfQogIC8qKgogICAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBjb25zdGFudCBub2RlIHdpdGggYSBzcGVjaWZpYyB0eXBlCiAgICogKG51bWJlciwgQmlnTnVtYmVyLCBGcmFjdGlvbikKICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUKICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlVHlwZV0KICAgKiBAcmV0dXJuIHtDb25zdGFudE5vZGV9CiAgICovCgoKICBmdW5jdGlvbiBjcmVhdGVDb25zdGFudE5vZGUodmFsdWUsIHZhbHVlVHlwZSkgewogICAgcmV0dXJuIG5ldyBDb25zdGFudE5vZGUobnVtZXJpYyh2YWx1ZSwgdmFsdWVUeXBlIHx8IGNvbmZpZy5udW1iZXIpKTsKICB9CgogIHJldHVybiBkZXJpdmF0aXZlOwp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZnVuY3Rpb24vYWxnZWJyYS9yYXRpb25hbGl6ZS5qcwoKCgoKdmFyIHJhdGlvbmFsaXplX25hbWUgPSAncmF0aW9uYWxpemUnOwp2YXIgcmF0aW9uYWxpemVfZGVwZW5kZW5jaWVzID0gWydjb25maWcnLCAndHlwZWQnLCAnZXF1YWwnLCAnaXNaZXJvJywgJ2FkZCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseScsICdkaXZpZGUnLCAncG93JywgJ3BhcnNlJywgJ3NpbXBsaWZ5JywgJz9iaWdudW1iZXInLCAnP2ZyYWN0aW9uJywgJ21hdGhXaXRoVHJhbnNmb3JtJywgJ0NvbnN0YW50Tm9kZScsICdPcGVyYXRvck5vZGUnLCAnRnVuY3Rpb25Ob2RlJywgJ1N5bWJvbE5vZGUnLCAnUGFyZW50aGVzaXNOb2RlJ107CnZhciBjcmVhdGVSYXRpb25hbGl6ZSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHJhdGlvbmFsaXplX25hbWUsIHJhdGlvbmFsaXplX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsLAogICAgICBpc1plcm8gPSBfcmVmLmlzWmVybywKICAgICAgYWRkID0gX3JlZi5hZGQsCiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCwKICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LAogICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSwKICAgICAgcG93ID0gX3JlZi5wb3csCiAgICAgIHBhcnNlID0gX3JlZi5wYXJzZSwKICAgICAgc2ltcGxpZnkgPSBfcmVmLnNpbXBsaWZ5LAogICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb24sCiAgICAgIGJpZ251bWJlciA9IF9yZWYuYmlnbnVtYmVyLAogICAgICBtYXRoV2l0aFRyYW5zZm9ybSA9IF9yZWYubWF0aFdpdGhUcmFuc2Zvcm0sCiAgICAgIENvbnN0YW50Tm9kZSA9IF9yZWYuQ29uc3RhbnROb2RlLAogICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSwKICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsCiAgICAgIFN5bWJvbE5vZGUgPSBfcmVmLlN5bWJvbE5vZGUsCiAgICAgIFBhcmVudGhlc2lzTm9kZSA9IF9yZWYuUGFyZW50aGVzaXNOb2RlOwogIHZhciBzaW1wbGlmeUNvbnN0YW50ID0gY3JlYXRlU2ltcGxpZnlDb25zdGFudCh7CiAgICB0eXBlZDogdHlwZWQsCiAgICBjb25maWc6IGNvbmZpZywKICAgIG1hdGhXaXRoVHJhbnNmb3JtOiBtYXRoV2l0aFRyYW5zZm9ybSwKICAgIGZyYWN0aW9uOiBmcmFjdGlvbiwKICAgIGJpZ251bWJlcjogYmlnbnVtYmVyLAogICAgQ29uc3RhbnROb2RlOiBDb25zdGFudE5vZGUsCiAgICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSwKICAgIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLAogICAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZQogIH0pOwogIHZhciBzaW1wbGlmeUNvcmUgPSBjcmVhdGVTaW1wbGlmeUNvcmUoewogICAgZXF1YWw6IGVxdWFsLAogICAgaXNaZXJvOiBpc1plcm8sCiAgICBhZGQ6IGFkZCwKICAgIHN1YnRyYWN0OiBzdWJ0cmFjdCwKICAgIG11bHRpcGx5OiBtdWx0aXBseSwKICAgIGRpdmlkZTogZGl2aWRlLAogICAgcG93OiBwb3csCiAgICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSwKICAgIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLAogICAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsCiAgICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZQogIH0pOwogIC8qKgogICAqIFRyYW5zZm9ybSBhIHJhdGlvbmFsaXphYmxlIGV4cHJlc3Npb24gaW4gYSByYXRpb25hbCBmcmFjdGlvbi4KICAgKiBJZiByYXRpb25hbCBmcmFjdGlvbiBpcyBvbmUgdmFyaWFibGUgcG9seW5vbWlhbCB0aGVuIGNvbnZlcnRzCiAgICogdGhlIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IgaW4gY2Fub25pY2FsIGZvcm0sIHdpdGggZGVjcmVhc2luZwogICAqIGV4cG9uZW50cywgcmV0dXJuaW5nIHRoZSBjb2VmZmljaWVudHMgb2YgbnVtZXJhdG9yLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIHJhdGlvbmFsaXplKGV4cHIpCiAgICogICAgIHJhdGlvbmFsaXplKGV4cHIsIGRldGFpbGVkKQogICAqICAgICByYXRpb25hbGl6ZShleHByLCBzY29wZSkKICAgKiAgICAgcmF0aW9uYWxpemUoZXhwciwgc2NvcGUsIGRldGFpbGVkKQogICAqCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgnc2luKHgpK3knKQogICAqICAgICAgICAgICAgICAgICAgIC8vICBFcnJvcjogVGhlcmUgaXMgYW4gdW5zb2x2ZWQgZnVuY3Rpb24gY2FsbAogICAqICAgICBtYXRoLnJhdGlvbmFsaXplKCcyeC95IC0geS8oeCsxKScpCiAgICogICAgICAgICAgICAgICAgICAgLy8gKDIqeF4yLXleMisyKngpLyh4KnkreSkKICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgnKDJ4KzEpXjYnKQogICAqICAgICAgICAgICAgICAgICAgIC8vIDY0KnheNisxOTIqeF41KzI0MCp4XjQrMTYwKnheMys2MCp4XjIrMTIqeCsxCiAgICogICAgIG1hdGgucmF0aW9uYWxpemUoJzJ4LyggKDJ4LTEpIC8gKDN4KzIpICkgLSA1eC8gKCAoM3grNCkgLyAoMnheMi01KSApICsgMycpCiAgICogICAgICAgICAgICAgICAgICAgLy8gLTIwKnheNCsyOCp4XjMrMTA0KnheMis2KngtMTIpLyg2KnheMis1KngtNCkKICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgneC8oMS14KS8oeC0yKS8oeC0zKS8oeC00KSArIDJ4LyAoICgxLTJ4KS8oMi0zeCkgKS8gKCgzLTR4KS8oNC01eCkgKScpID0KICAgKiAgICAgICAgICAgICAgICAgICAvLyAoLTMwKnheNyszNDQqeF42LTE1MDYqeF41KzMyMDAqeF40LTM0NzIqeF4zKzE4NDYqeF4yLTM4MSp4KS8KICAgKiAgICAgICAgICAgICAgICAgICAvLyAgICAgKC04KnheNis5MCp4XjUtMzgzKnheNCs3ODAqeF4zLTc5Nyp4XjIrMzkwKngtNzIpCiAgICoKICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgneCt4K3greScse3k6MX0pIC8vIDMqeCsxCiAgICogICAgIG1hdGgucmF0aW9uYWxpemUoJ3greCt4K3knLHt9KSAgICAvLyAzKngreQogICAqCiAgICogICAgIGNvbnN0IHJldCA9IG1hdGgucmF0aW9uYWxpemUoJ3greCt4K3knLHt9LHRydWUpCiAgICogICAgICAgICAgICAgICAgICAgLy8gcmV0LmV4cHJlc3Npb249Myp4K3ksIHJldC52YXJpYWJsZXMgPSBbIngiLCJ5Il0KICAgKiAgICAgY29uc3QgcmV0ID0gbWF0aC5yYXRpb25hbGl6ZSgnLTIrNXheMicse30sdHJ1ZSkKICAgKiAgICAgICAgICAgICAgICAgICAvLyByZXQuZXhwcmVzc2lvbj01KnheMi0yLCByZXQudmFyaWFibGVzID0gWyJ4Il0sIHJldC5jb2VmZmljaWVudHM9Wy0yLDAsNV0KICAgKgogICAqIFNlZSBhbHNvOgogICAqCiAgICogICAgIHNpbXBsaWZ5CiAgICoKICAgKiBAcGFyYW0gIHtOb2RlfHN0cmluZ30gZXhwciAgICBUaGUgZXhwcmVzc2lvbiB0byBjaGVjayBpZiBpcyBhIHBvbHlub21pYWwgZXhwcmVzc2lvbgogICAqIEBwYXJhbSAge09iamVjdHxib29sZWFufSAgICAgIG9wdGlvbmFsIHNjb3BlIG9mIGV4cHJlc3Npb24gb3IgdHJ1ZSBmb3IgYWxyZWFkeSBldmFsdWF0ZWQgcmF0aW9uYWwgZXhwcmVzc2lvbiBhdCBpbnB1dAogICAqIEBwYXJhbSAge0Jvb2xlYW59ICBkZXRhaWxlZCAgIG9wdGlvbmFsIFRydWUgaWYgcmV0dXJuIGFuIG9iamVjdCwgZmFsc2UgaWYgcmV0dXJuIGV4cHJlc3Npb24gbm9kZSAoZGVmYXVsdCkKICAgKgogICAqIEByZXR1cm4ge09iamVjdCB8IE5vZGV9ICAgIFRoZSByYXRpb25hbCBwb2x5bm9taWFsIG9mIGBleHByYCBvciBuYSBvYmplY3QKICAgKiAgICAgICAgICAgIHtPYmplY3R9CiAgICogICAgICAgICAgICAgIHtFeHByZXNzaW9uIE5vZGV9IGV4cHJlc3Npb246IG5vZGUgc2ltcGxpZmllZCBleHByZXNzaW9uCiAgICogICAgICAgICAgICAgIHtFeHByZXNzaW9uIE5vZGV9IG51bWVyYXRvcjogc2ltcGxpZmllZCBudW1lcmF0b3Igb2YgZXhwcmVzc2lvbgogICAqICAgICAgICAgICAgICB7RXhwcmVzc2lvbiBOb2RlIHwgYm9vbGVhbn0gZGVub21pbmF0b3I6IHNpbXBsaWZpZWQgZGVub21pbmF0b3Igb3IgZmFsc2UgKGlmIHRoZXJlIGlzIG5vIGRlbm9taW5hdG9yKQogICAqICAgICAgICAgICAgICB7QXJyYXl9ICAgICAgICAgICB2YXJpYWJsZXM6ICB2YXJpYWJsZSBuYW1lcwogICAqICAgICAgICAgICAgICB7QXJyYXl9ICAgICAgICAgICBjb2VmZmljaWVudHM6IGNvZWZmaWNpZW50cyBvZiBudW1lcmF0b3Igc29ydGVkIGJ5IGluY3JlYXNlZCBleHBvbmVudAogICAqICAgICAgICAgICB7RXhwcmVzc2lvbiBOb2RlfSAgbm9kZSBzaW1wbGlmaWVkIGV4cHJlc3Npb24KICAgKgogICAqLwoKICB2YXIgcmF0aW9uYWxpemUgPSB0eXBlZChyYXRpb25hbGl6ZV9uYW1lLCB7CiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhleHByKSB7CiAgICAgIHJldHVybiByYXRpb25hbGl6ZShwYXJzZShleHByKSwge30sIGZhbHNlKTsKICAgIH0sCiAgICAnc3RyaW5nLCBib29sZWFuJzogZnVuY3Rpb24gc3RyaW5nQm9vbGVhbihleHByLCBkZXRhaWxlZCkgewogICAgICByZXR1cm4gcmF0aW9uYWxpemUocGFyc2UoZXhwciksIHt9LCBkZXRhaWxlZCk7CiAgICB9LAogICAgJ3N0cmluZywgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nT2JqZWN0KGV4cHIsIHNjb3BlKSB7CiAgICAgIHJldHVybiByYXRpb25hbGl6ZShwYXJzZShleHByKSwgc2NvcGUsIGZhbHNlKTsKICAgIH0sCiAgICAnc3RyaW5nLCBPYmplY3QsIGJvb2xlYW4nOiBmdW5jdGlvbiBzdHJpbmdPYmplY3RCb29sZWFuKGV4cHIsIHNjb3BlLCBkZXRhaWxlZCkgewogICAgICByZXR1cm4gcmF0aW9uYWxpemUocGFyc2UoZXhwciksIHNjb3BlLCBkZXRhaWxlZCk7CiAgICB9LAogICAgTm9kZTogZnVuY3Rpb24gTm9kZShleHByKSB7CiAgICAgIHJldHVybiByYXRpb25hbGl6ZShleHByLCB7fSwgZmFsc2UpOwogICAgfSwKICAgICdOb2RlLCBib29sZWFuJzogZnVuY3Rpb24gTm9kZUJvb2xlYW4oZXhwciwgZGV0YWlsZWQpIHsKICAgICAgcmV0dXJuIHJhdGlvbmFsaXplKGV4cHIsIHt9LCBkZXRhaWxlZCk7CiAgICB9LAogICAgJ05vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIE5vZGVPYmplY3QoZXhwciwgc2NvcGUpIHsKICAgICAgcmV0dXJuIHJhdGlvbmFsaXplKGV4cHIsIHNjb3BlLCBmYWxzZSk7CiAgICB9LAogICAgJ05vZGUsIE9iamVjdCwgYm9vbGVhbic6IGZ1bmN0aW9uIE5vZGVPYmplY3RCb29sZWFuKGV4cHIsIHNjb3BlLCBkZXRhaWxlZCkgewogICAgICB2YXIgc2V0UnVsZXMgPSBydWxlc1JhdGlvbmFsaXplKCk7IC8vIFJ1bGVzIGZvciBjaGFuZ2UgcG9seW5vbWlhbCBpbiBuZWFyIGNhbm9uaWNhbCBmb3JtCgogICAgICB2YXIgcG9seVJldCA9IHBvbHlub21pYWwoZXhwciwgc2NvcGUsIHRydWUsIHNldFJ1bGVzLmZpcnN0UnVsZXMpOyAvLyBDaGVjayBpZiBleHByZXNzaW9uIGlzIGEgcmF0aW9uYWxpemFibGUgcG9seW5vbWlhbAoKICAgICAgdmFyIG5WYXJzID0gcG9seVJldC52YXJpYWJsZXMubGVuZ3RoOwogICAgICBleHByID0gcG9seVJldC5leHByZXNzaW9uOwoKICAgICAgaWYgKG5WYXJzID49IDEpIHsKICAgICAgICAvLyBJZiBleHByZXNzaW9uIGluIG5vdCBhIGNvbnN0YW50CiAgICAgICAgZXhwciA9IGV4cGFuZFBvd2VyKGV4cHIpOyAvLyBGaXJzdCBleHBhbmQgcG93ZXIgb2YgcG9seW5vbWlhbHMgKGNhbm5vdCBiZSBtYWRlIGZyb20gcnVsZXMhKQoKICAgICAgICB2YXIgc0JlZm9yZTsgLy8gUHJldmlvdXMgZXhwcmVzc2lvbgoKICAgICAgICB2YXIgcnVsZXM7CiAgICAgICAgdmFyIGVEaXN0ckRpdiA9IHRydWU7CiAgICAgICAgdmFyIHJlZG9JbmljID0gZmFsc2U7CiAgICAgICAgZXhwciA9IHNpbXBsaWZ5KGV4cHIsIHNldFJ1bGVzLmZpcnN0UnVsZXMsIHt9LCB7CiAgICAgICAgICBleGFjdEZyYWN0aW9uczogZmFsc2UKICAgICAgICB9KTsgLy8gQXBwbHkgdGhlIGluaXRpYWwgcnVsZXMsIGluY2x1ZGluZyBzdWNjIGRpdiBydWxlcwoKICAgICAgICB2YXIgczsKCiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgIC8vIEFwcGx5IGFsdGVybmF0ZWx5ICBzdWNjZXNzaXZlIGRpdmlzaW9uIHJ1bGVzIGFuZCBkaXN0ci5kaXYucnVsZXMKICAgICAgICAgIHJ1bGVzID0gZURpc3RyRGl2ID8gc2V0UnVsZXMuZGlzdHJEaXZSdWxlcyA6IHNldFJ1bGVzLnN1Y0RpdlJ1bGVzOwogICAgICAgICAgZXhwciA9IHNpbXBsaWZ5KGV4cHIsIHJ1bGVzKTsgLy8gdW50aWwgbm8gbW9yZSBjaGFuZ2VzCgogICAgICAgICAgZURpc3RyRGl2ID0gIWVEaXN0ckRpdjsgLy8gU3dhcCBiZXR3ZWVuIERpc3RyLkRpdiBhbmQgU3VjYy4gRGl2LiBSdWxlcwoKICAgICAgICAgIHMgPSBleHByLnRvU3RyaW5nKCk7CgogICAgICAgICAgaWYgKHMgPT09IHNCZWZvcmUpIHsKICAgICAgICAgICAgYnJlYWs7IC8vIE5vIGNoYW5nZXMgOiBlbmQgb2YgdGhlIGxvb3AKICAgICAgICAgIH0KCiAgICAgICAgICByZWRvSW5pYyA9IHRydWU7CiAgICAgICAgICBzQmVmb3JlID0gczsKICAgICAgICB9CgogICAgICAgIGlmIChyZWRvSW5pYykgewogICAgICAgICAgLy8gQXBwbHkgZmlyc3QgcnVsZXMgYWdhaW4gd2l0aG91dCBzdWNjIGRpdiBydWxlcyAoaWYgdGhlcmUgYXJlIGNoYW5nZXMpCiAgICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgc2V0UnVsZXMuZmlyc3RSdWxlc0FnYWluLCB7fSwgewogICAgICAgICAgICBleGFjdEZyYWN0aW9uczogZmFsc2UKICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgZXhwciA9IHNpbXBsaWZ5KGV4cHIsIHNldFJ1bGVzLmZpbmFsUnVsZXMsIHt9LCB7CiAgICAgICAgICBleGFjdEZyYWN0aW9uczogZmFsc2UKICAgICAgICB9KTsgLy8gQXBwbHkgZmluYWwgcnVsZXMKICAgICAgfSAvLyBOVmFycyA+PSAxCgoKICAgICAgdmFyIGNvZWZmaWNpZW50cyA9IFtdOwogICAgICB2YXIgcmV0UmF0aW9uYWxpemUgPSB7fTsKCiAgICAgIGlmIChleHByLnR5cGUgPT09ICdPcGVyYXRvck5vZGUnICYmIGV4cHIuaXNCaW5hcnkoKSAmJiBleHByLm9wID09PSAnLycpIHsKICAgICAgICAvLyBTZXBhcmF0ZSBudW1lcmF0b3IgZnJvbSBkZW5vbWluYXRvcgogICAgICAgIGlmIChuVmFycyA9PT0gMSkgewogICAgICAgICAgZXhwci5hcmdzWzBdID0gcG9seVRvQ2Fub25pY2FsKGV4cHIuYXJnc1swXSwgY29lZmZpY2llbnRzKTsKICAgICAgICAgIGV4cHIuYXJnc1sxXSA9IHBvbHlUb0Nhbm9uaWNhbChleHByLmFyZ3NbMV0pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGRldGFpbGVkKSB7CiAgICAgICAgICByZXRSYXRpb25hbGl6ZS5udW1lcmF0b3IgPSBleHByLmFyZ3NbMF07CiAgICAgICAgICByZXRSYXRpb25hbGl6ZS5kZW5vbWluYXRvciA9IGV4cHIuYXJnc1sxXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKG5WYXJzID09PSAxKSB7CiAgICAgICAgICBleHByID0gcG9seVRvQ2Fub25pY2FsKGV4cHIsIGNvZWZmaWNpZW50cyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZGV0YWlsZWQpIHsKICAgICAgICAgIHJldFJhdGlvbmFsaXplLm51bWVyYXRvciA9IGV4cHI7CiAgICAgICAgICByZXRSYXRpb25hbGl6ZS5kZW5vbWluYXRvciA9IG51bGw7CiAgICAgICAgfQogICAgICB9IC8vIG5WYXJzCgoKICAgICAgaWYgKCFkZXRhaWxlZCkgcmV0dXJuIGV4cHI7CiAgICAgIHJldFJhdGlvbmFsaXplLmNvZWZmaWNpZW50cyA9IGNvZWZmaWNpZW50czsKICAgICAgcmV0UmF0aW9uYWxpemUudmFyaWFibGVzID0gcG9seVJldC52YXJpYWJsZXM7CiAgICAgIHJldFJhdGlvbmFsaXplLmV4cHJlc3Npb24gPSBleHByOwogICAgICByZXR1cm4gcmV0UmF0aW9uYWxpemU7CiAgICB9IC8vIF5eXl5eXl4gZW5kIG9mIHJhdGlvbmFsaXplIF5eXl5eXl5eCgogIH0pOyAvLyBlbmQgb2YgdHlwZWQgcmF0aW9uYWxpemUKCiAgLyoqCiAgICogIEZ1bmN0aW9uIHRvIHNpbXBsaWZ5IGFuIGV4cHJlc3Npb24gdXNpbmcgYW4gb3B0aW9uYWwgc2NvcGUgYW5kCiAgICogIHJldHVybiBpdCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIHBvbHlub21pYWwgZXhwcmVzc2lvbiwgaS5lLgogICAqICBhbiBleHByZXNzaW9uIHdpdGggb25lIG9yIG1vcmUgdmFyaWFibGVzIGFuZCB0aGUgb3BlcmF0b3JzCiAgICogICssIC0sICosIGFuZCBeLCB3aGVyZSB0aGUgZXhwb25lbnQgY2FuIG9ubHkgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIHBvbHlub21pYWwoZXhwcixzY29wZSxleHRlbmRlZCwgcnVsZXMpCiAgICoKICAgKiBAcGFyYW0gIHtOb2RlIHwgc3RyaW5nfSBleHByICAgICBUaGUgZXhwcmVzc2lvbiB0byBzaW1wbGlmeSBhbmQgY2hlY2sgaWYgaXMgcG9seW5vbWlhbCBleHByZXNzaW9uCiAgICogQHBhcmFtICB7b2JqZWN0fSBzY29wZSAgICAgICAgICAgT3B0aW9uYWwgc2NvcGUgZm9yIGV4cHJlc3Npb24gc2ltcGxpZmljYXRpb24KICAgKiBAcGFyYW0gIHtib29sZWFufSBleHRlbmRlZCAgICAgICBPcHRpb25hbC4gRGVmYXVsdCBpcyBmYWxzZS4gV2hlbiB0cnVlIGFsbG93cyBkaXZpZGUgb3BlcmF0b3IuCiAgICogQHBhcmFtICB7YXJyYXl9ICBydWxlcyAgICAgICAgICAgT3B0aW9uYWwuIERlZmF1bHQgaXMgbm8gcnVsZS4KICAgKgogICAqCiAgICogQHJldHVybiB7T2JqZWN0fQogICAqICAgICAgICAgICAge09iamVjdH0gbm9kZTogICBub2RlIHNpbXBsaWZpZWQgZXhwcmVzc2lvbgogICAqICAgICAgICAgICAge0FycmF5fSAgdmFyaWFibGVzOiAgdmFyaWFibGUgbmFtZXMKICAgKi8KCiAgZnVuY3Rpb24gcG9seW5vbWlhbChleHByLCBzY29wZSwgZXh0ZW5kZWQsIHJ1bGVzKSB7CiAgICB2YXIgdmFyaWFibGVzID0gW107CiAgICB2YXIgbm9kZSA9IHNpbXBsaWZ5KGV4cHIsIHJ1bGVzLCBzY29wZSwgewogICAgICBleGFjdEZyYWN0aW9uczogZmFsc2UKICAgIH0pOyAvLyBSZXNvbHZlcyBhbnkgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgd2l0aCBhbGwgZGVmaW5lZCBwYXJhbWV0ZXJzCgogICAgZXh0ZW5kZWQgPSAhIWV4dGVuZGVkOwogICAgdmFyIG9wZXIgPSAnKy0qJyArIChleHRlbmRlZCA/ICcvJyA6ICcnKTsKICAgIHJlY1BvbHkobm9kZSk7CiAgICB2YXIgcmV0RnVuYyA9IHt9OwogICAgcmV0RnVuYy5leHByZXNzaW9uID0gbm9kZTsKICAgIHJldEZ1bmMudmFyaWFibGVzID0gdmFyaWFibGVzOwogICAgcmV0dXJuIHJldEZ1bmM7IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAvKioKICAgICAqICBGdW5jdGlvbiB0byBzaW1wbGlmeSBhbiBleHByZXNzaW9uIHVzaW5nIGFuIG9wdGlvbmFsIHNjb3BlIGFuZAogICAgICogIHJldHVybiBpdCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIHBvbHlub21pYWwgZXhwcmVzc2lvbiwgaS5lLgogICAgICogIGFuIGV4cHJlc3Npb24gd2l0aCBvbmUgb3IgbW9yZSB2YXJpYWJsZXMgYW5kIHRoZSBvcGVyYXRvcnMKICAgICAqICArLCAtLCAqLCBhbmQgXiwgd2hlcmUgdGhlIGV4cG9uZW50IGNhbiBvbmx5IGJlIGEgcG9zaXRpdmUgaW50ZWdlci4KICAgICAqCiAgICAgKiBTeW50YXg6CiAgICAgKgogICAgICogICAgIHJlY1BvbHkobm9kZSkKICAgICAqCiAgICAgKgogICAgICogQHBhcmFtICB7Tm9kZX0gbm9kZSAgICAgICAgICAgICAgIFRoZSBjdXJyZW50IHN1YiB0cmVlIGV4cHJlc3Npb24gaW4gcmVjdXJzaW9uCiAgICAgKgogICAgICogQHJldHVybiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGhpbmcsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBlcnJvcgogICAgICovCgogICAgZnVuY3Rpb24gcmVjUG9seShub2RlKSB7CiAgICAgIHZhciB0cCA9IG5vZGUudHlwZTsgLy8gbm9kZSB0eXBlCgogICAgICBpZiAodHAgPT09ICdGdW5jdGlvbk5vZGUnKSB7CiAgICAgICAgLy8gTm8gZnVuY3Rpb24gY2FsbCBpbiBwb2x5bm9taWFsIGV4cHJlc3Npb24KICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFuIHVuc29sdmVkIGZ1bmN0aW9uIGNhbGwnKTsKICAgICAgfSBlbHNlIGlmICh0cCA9PT0gJ09wZXJhdG9yTm9kZScpIHsKICAgICAgICBpZiAobm9kZS5vcCA9PT0gJ14nKSB7CiAgICAgICAgICAvLyBUT0RPOiBoYW5kbGUgbmVnYXRpdmUgZXhwb25lbnRzIGxpa2UgaW4gJzEveF4oLTIpJwogICAgICAgICAgaWYgKG5vZGUuYXJnc1sxXS50eXBlICE9PSAnQ29uc3RhbnROb2RlJyB8fCAhT2JqZWN0KHV0aWxzX251bWJlclsiaSIgLyogaXNJbnRlZ2VyICovXSkocGFyc2VGbG9hdChub2RlLmFyZ3NbMV0udmFsdWUpKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGEgbm9uLWludGVnZXIgZXhwb25lbnQnKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlY1BvbHkobm9kZS5hcmdzWzBdKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKG9wZXIuaW5kZXhPZihub2RlLm9wKSA9PT0gLTEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPcGVyYXRvciAnICsgbm9kZS5vcCArICcgaW52YWxpZCBpbiBwb2x5bm9taWFsIGV4cHJlc3Npb24nKTsKICAgICAgICAgIH0KCiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuYXJncy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICByZWNQb2x5KG5vZGUuYXJnc1tpXSk7CiAgICAgICAgICB9CiAgICAgICAgfSAvLyB0eXBlIG9mIG9wZXJhdG9yCgogICAgICB9IGVsc2UgaWYgKHRwID09PSAnU3ltYm9sTm9kZScpIHsKICAgICAgICB2YXIgX25hbWUgPSBub2RlLm5hbWU7IC8vIHZhcmlhYmxlIG5hbWUKCiAgICAgICAgdmFyIHBvcyA9IHZhcmlhYmxlcy5pbmRleE9mKF9uYW1lKTsKCiAgICAgICAgaWYgKHBvcyA9PT0gLTEpIHsKICAgICAgICAgIC8vIG5ldyB2YXJpYWJsZSBpbiBleHByZXNzaW9uCiAgICAgICAgICB2YXJpYWJsZXMucHVzaChfbmFtZSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHRwID09PSAnUGFyZW50aGVzaXNOb2RlJykgewogICAgICAgIHJlY1BvbHkobm9kZS5jb250ZW50KTsKICAgICAgfSBlbHNlIGlmICh0cCAhPT0gJ0NvbnN0YW50Tm9kZScpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R5cGUgJyArIHRwICsgJyBpcyBub3QgYWxsb3dlZCBpbiBwb2x5bm9taWFsIGV4cHJlc3Npb24nKTsKICAgICAgfQogICAgfSAvLyBlbmQgb2YgcmVjUG9seQoKICB9IC8vIGVuZCBvZiBwb2x5bm9taWFsCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogIC8qKgogICAqIFJldHVybiBhIHJ1bGUgc2V0IHRvIHJhdGlvbmFsaXplIGFuIHBvbHlub21pYWwgZXhwcmVzc2lvbiBpbiByYXRpb25hbGl6ZQogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIHJ1bGVzUmF0aW9uYWxpemUoKQogICAqCiAgICogQHJldHVybiB7YXJyYXl9ICAgICAgICBydWxlIHNldCB0byByYXRpb25hbGl6ZSBhbiBwb2x5bm9taWFsIGV4cHJlc3Npb24KICAgKi8KCgogIGZ1bmN0aW9uIHJ1bGVzUmF0aW9uYWxpemUoKSB7CiAgICB2YXIgb2xkUnVsZXMgPSBbc2ltcGxpZnlDb3JlLCAvLyBzQ29yZQogICAgewogICAgICBsOiAnbituJywKICAgICAgcjogJzIqbicKICAgIH0sIHsKICAgICAgbDogJ24rLW4nLAogICAgICByOiAnMCcKICAgIH0sIHNpbXBsaWZ5Q29uc3RhbnQsIC8vIHNDb25zdGFudAogICAgewogICAgICBsOiAnbioobjFeLTEpJywKICAgICAgcjogJ24vbjEnCiAgICB9LCB7CiAgICAgIGw6ICduKm4xXi1uMicsCiAgICAgIHI6ICduL24xXm4yJwogICAgfSwgewogICAgICBsOiAnbjFeLTEnLAogICAgICByOiAnMS9uMScKICAgIH0sIHsKICAgICAgbDogJ24qKG4xL24yKScsCiAgICAgIHI6ICcobipuMSkvbjInCiAgICB9LCB7CiAgICAgIGw6ICcxKm4nLAogICAgICByOiAnbicKICAgIH1dOwogICAgdmFyIHJ1bGVzRmlyc3QgPSBbewogICAgICBsOiAnKC1uMSkvKC1uMiknLAogICAgICByOiAnbjEvbjInCiAgICB9LCAvLyBVbmFyeSBkaXZpc2lvbgogICAgewogICAgICBsOiAnKC1uMSkqKC1uMiknLAogICAgICByOiAnbjEqbjInCiAgICB9LCAvLyBVbmFyeSBtdWx0aXBsaWNhdGlvbgogICAgewogICAgICBsOiAnbjEtLW4yJywKICAgICAgcjogJ24xK24yJwogICAgfSwgLy8gJy0tJyBlbGltaW5hdGlvbgogICAgewogICAgICBsOiAnbjEtbjInLAogICAgICByOiAnbjErKC1uMiknCiAgICB9LCAvLyBTdWJ0cmFjdGlvbiB0dXJuIGludG8gYWRkIHdpdGggdW7vv71yeSBtaW51cwogICAgewogICAgICBsOiAnKG4xK24yKSpuMycsCiAgICAgIHI6ICcobjEqbjMgKyBuMipuMyknCiAgICB9LCAvLyBEaXN0cmlidXRpdmUgMQogICAgewogICAgICBsOiAnbjEqKG4yK24zKScsCiAgICAgIHI6ICcobjEqbjIrbjEqbjMpJwogICAgfSwgLy8gRGlzdHJpYnV0aXZlIDIKICAgIHsKICAgICAgbDogJ2MxKm4gKyBjMipuJywKICAgICAgcjogJyhjMStjMikqbicKICAgIH0sIC8vIEpvaW5pbmcgY29uc3RhbnRzCiAgICB7CiAgICAgIGw6ICdjMSpuICsgbicsCiAgICAgIHI6ICcoYzErMSkqbicKICAgIH0sIC8vIEpvaW5pbmcgY29uc3RhbnRzCiAgICB7CiAgICAgIGw6ICdjMSpuIC0gYzIqbicsCiAgICAgIHI6ICcoYzEtYzIpKm4nCiAgICB9LCAvLyBKb2luaW5nIGNvbnN0YW50cwogICAgewogICAgICBsOiAnYzEqbiAtIG4nLAogICAgICByOiAnKGMxLTEpKm4nCiAgICB9LCAvLyBKb2luaW5nIGNvbnN0YW50cwogICAgewogICAgICBsOiAndi9jJywKICAgICAgcjogJygxL2MpKnYnCiAgICB9LCAvLyB2YXJpYWJsZS9jb25zdGFudCAobmV3ISkKICAgIHsKICAgICAgbDogJ3YvLWMnLAogICAgICByOiAnLSgxL2MpKnYnCiAgICB9LCAvLyB2YXJpYWJsZS9jb25zdGFudCAobmV3ISkKICAgIHsKICAgICAgbDogJy12Ki1jJywKICAgICAgcjogJ2MqdicKICAgIH0sIC8vIEludmVyc2lvbiBjb25zdGFudCBhbmQgdmFyaWFibGUgMQogICAgewogICAgICBsOiAnLXYqYycsCiAgICAgIHI6ICctYyp2JwogICAgfSwgLy8gSW52ZXJzaW9uIGNvbnN0YW50IGFuZCB2YXJpYWJsZSAyCiAgICB7CiAgICAgIGw6ICd2Ki1jJywKICAgICAgcjogJy1jKnYnCiAgICB9LCAvLyBJbnZlcnNpb24gY29uc3RhbnQgYW5kIHZhcmlhYmxlIDMKICAgIHsKICAgICAgbDogJ3YqYycsCiAgICAgIHI6ICdjKnYnCiAgICB9LCAvLyBJbnZlcnNpb24gY29uc3RhbnQgYW5kIHZhcmlhYmxlIDQKICAgIHsKICAgICAgbDogJy0oLW4xKm4yKScsCiAgICAgIHI6ICcobjEqbjIpJwogICAgfSwgLy8gVW5hcnkgcHJvcGFnYXRpb24KICAgIHsKICAgICAgbDogJy0objEqbjIpJywKICAgICAgcjogJygtbjEqbjIpJwogICAgfSwgLy8gVW5hcnkgcHJvcGFnYXRpb24KICAgIHsKICAgICAgbDogJy0oLW4xK24yKScsCiAgICAgIHI6ICcobjEtbjIpJwogICAgfSwgLy8gVW5hcnkgcHJvcGFnYXRpb24KICAgIHsKICAgICAgbDogJy0objErbjIpJywKICAgICAgcjogJygtbjEtbjIpJwogICAgfSwgLy8gVW5hcnkgcHJvcGFnYXRpb24KICAgIHsKICAgICAgbDogJyhuMV5uMilebjMnLAogICAgICByOiAnKG4xXihuMipuMykpJwogICAgfSwgLy8gUG93ZXIgdG8gUG93ZXIKICAgIHsKICAgICAgbDogJy0oLW4xL24yKScsCiAgICAgIHI6ICcobjEvbjIpJwogICAgfSwgLy8gRGl2aXNpb24gYW5kIFVuYXJ5CiAgICB7CiAgICAgIGw6ICctKG4xL24yKScsCiAgICAgIHI6ICcoLW4xL24yKScKICAgIH1dOyAvLyBEaXZpc2FvIGFuZCBVbmFyeQoKICAgIHZhciBydWxlc0Rpc3RyRGl2ID0gW3sKICAgICAgbDogJyhuMS9uMiArIG4zL240KScsCiAgICAgIHI6ICcoKG4xKm40ICsgbjMqbjIpLyhuMipuNCkpJwogICAgfSwgLy8gU3VtIG9mIGZyYWN0aW9ucwogICAgewogICAgICBsOiAnKG4xL24yICsgbjMpJywKICAgICAgcjogJygobjEgKyBuMypuMikvbjIpJwogICAgfSwgLy8gU3VtIGZyYWN0aW9uIHdpdGggbnVtYmVyIDEKICAgIHsKICAgICAgbDogJyhuMSArIG4yL24zKScsCiAgICAgIHI6ICcoKG4xKm4zICsgbjIpL24zKScKICAgIH1dOyAvLyBTdW0gZnJhY3Rpb24gd2l0aCBudW1iZXIgMQoKICAgIHZhciBydWxlc1N1Y0RpdiA9IFt7CiAgICAgIGw6ICcobjEvKG4yL24zKSknLAogICAgICByOiAnKChuMSpuMykvbjIpJwogICAgfSwgLy8gRGl2aXNpb24gc2ltcGxpZmljYXRpb24KICAgIHsKICAgICAgbDogJyhuMS9uMi9uMyknLAogICAgICByOiAnKG4xLyhuMipuMykpJwogICAgfV07CiAgICB2YXIgc2V0UnVsZXMgPSB7fTsgLy8gcnVsZXMgc2V0IGluIDQgc3RlcHMuCiAgICAvLyBBbGwgcnVsZXMgPT4gaW5maW5pdGUgbG9vcAogICAgLy8gc2V0UnVsZXMuYWxsUnVsZXMgPW9sZFJ1bGVzLmNvbmNhdChydWxlc0ZpcnN0LHJ1bGVzRGlzdHJEaXYscnVsZXNTdWNEaXYpCgogICAgc2V0UnVsZXMuZmlyc3RSdWxlcyA9IG9sZFJ1bGVzLmNvbmNhdChydWxlc0ZpcnN0LCBydWxlc1N1Y0Rpdik7IC8vIEZpcnN0IHJ1bGUgc2V0CgogICAgc2V0UnVsZXMuZGlzdHJEaXZSdWxlcyA9IHJ1bGVzRGlzdHJEaXY7IC8vIEp1c3QgZGlzdHIuIGRpdi4gcnVsZXMKCiAgICBzZXRSdWxlcy5zdWNEaXZSdWxlcyA9IHJ1bGVzU3VjRGl2OyAvLyBKdXMgc3VjYy4gZGl2LiBydWxlcwoKICAgIHNldFJ1bGVzLmZpcnN0UnVsZXNBZ2FpbiA9IG9sZFJ1bGVzLmNvbmNhdChydWxlc0ZpcnN0KTsgLy8gTGFzdCBydWxlcyBzZXQgd2l0aG91dCBzdWNjLiBkaXYuCiAgICAvLyBEaXZpc2lvbiBzaW1wbGlmaWNhdGlvbgogICAgLy8gU2Vjb25kIHJ1bGUgc2V0LgogICAgLy8gVGhlcmUgaXMgbm8gYWdncmVnYXRlIGV4cHJlc3Npb24gd2l0aCBwYXJlbnRlc2lzLCBidXQgdGhlIG9ubHkgdmFyaWFibGUgY2FuIGJlIHNjYXR0ZXJlZC4KCiAgICBzZXRSdWxlcy5maW5hbFJ1bGVzID0gW3NpbXBsaWZ5Q29yZSwgLy8gc2ltcGxpZnkucnVsZXNbMF0KICAgIHsKICAgICAgbDogJ24qLW4nLAogICAgICByOiAnLW5eMicKICAgIH0sIC8vIEpvaW5pbmcgbXVsdGlwbHkgd2l0aCBwb3dlciAxCiAgICB7CiAgICAgIGw6ICduKm4nLAogICAgICByOiAnbl4yJwogICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDIKICAgIHNpbXBsaWZ5Q29uc3RhbnQsIC8vIHNpbXBsaWZ5LnJ1bGVzWzE0XSBvbGQgM3JkIGluZGV4IGluIG9sZFJ1bGVzCiAgICB7CiAgICAgIGw6ICduKi1uXm4xJywKICAgICAgcjogJy1uXihuMSsxKScKICAgIH0sIC8vIEpvaW5pbmcgbXVsdGlwbHkgd2l0aCBwb3dlciAzCiAgICB7CiAgICAgIGw6ICduKm5ebjEnLAogICAgICByOiAnbl4objErMSknCiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgNAogICAgewogICAgICBsOiAnbl5uMSotbl5uMicsCiAgICAgIHI6ICctbl4objErbjIpJwogICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDUKICAgIHsKICAgICAgbDogJ25ebjEqbl5uMicsCiAgICAgIHI6ICduXihuMStuMiknCiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgNgogICAgewogICAgICBsOiAnbl5uMSotbicsCiAgICAgIHI6ICctbl4objErMSknCiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgNwogICAgewogICAgICBsOiAnbl5uMSpuJywKICAgICAgcjogJ25eKG4xKzEpJwogICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDgKICAgIHsKICAgICAgbDogJ25ebjEvLW4nLAogICAgICByOiAnLW5eKG4xLTEpJwogICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDgKICAgIHsKICAgICAgbDogJ25ebjEvbicsCiAgICAgIHI6ICduXihuMS0xKScKICAgIH0sIC8vIEpvaW5pbmcgZGl2aXNpb24gd2l0aCBwb3dlciAxCiAgICB7CiAgICAgIGw6ICduLy1uXm4xJywKICAgICAgcjogJy1uXigxLW4xKScKICAgIH0sIC8vIEpvaW5pbmcgZGl2aXNpb24gd2l0aCBwb3dlciAyCiAgICB7CiAgICAgIGw6ICduL25ebjEnLAogICAgICByOiAnbl4oMS1uMSknCiAgICB9LCAvLyBKb2luaW5nIGRpdmlzaW9uIHdpdGggcG93ZXIgMwogICAgewogICAgICBsOiAnbl5uMS8tbl5uMicsCiAgICAgIHI6ICduXihuMS1uMiknCiAgICB9LCAvLyBKb2luaW5nIGRpdmlzaW9uIHdpdGggcG93ZXIgNAogICAgewogICAgICBsOiAnbl5uMS9uXm4yJywKICAgICAgcjogJ25eKG4xLW4yKScKICAgIH0sIC8vIEpvaW5pbmcgZGl2aXNpb24gd2l0aCBwb3dlciA1CiAgICB7CiAgICAgIGw6ICduMSsoLW4yKm4zKScsCiAgICAgIHI6ICduMS1uMipuMycKICAgIH0sIC8vIFNvbHZpbmcgdXNlbGVzcyBwYXJlbnRoZXNpcyAxCiAgICB7CiAgICAgIGw6ICd2KigtYyknLAogICAgICByOiAnLWMqdicKICAgIH0sIC8vIFNvbHZpbmcgdXNlbGVzcyB1bmFyeSAyCiAgICB7CiAgICAgIGw6ICduMSstbjInLAogICAgICByOiAnbjEtbjInCiAgICB9LCAvLyBTb2x2aW5nICstIHRvZ2V0aGVyIChuZXchKQogICAgewogICAgICBsOiAndipjJywKICAgICAgcjogJ2MqdicKICAgIH0sIC8vIGludmVyc2lvbiBjb25zdGFudCB3aXRoIHZhcmlhYmxlCiAgICB7CiAgICAgIGw6ICcobjFebjIpXm4zJywKICAgICAgcjogJyhuMV4objIqbjMpKScKICAgIH0gLy8gUG93ZXIgdG8gUG93ZXIKICAgIF07CiAgICByZXR1cm4gc2V0UnVsZXM7CiAgfSAvLyBFbmQgcnVsZXNSYXRpb25hbGl6ZQogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAvKioKICAgKiAgRXhwYW5kIHJlY3Vyc2l2ZWx5IGEgdHJlZSBub2RlIGZvciBoYW5kbGluZyB3aXRoIGV4cHJlc3Npb25zIHdpdGggZXhwb25lbnRzCiAgICogIChpdCdzIG5vdCBmb3IgY29uc3RhbnRzLCBzeW1ib2xzIG9yIGZ1bmN0aW9ucyB3aXRoIGV4cG9uZW50cykKICAgKiAgUFM6IFRoZSBvdGhlciBwYXJhbWV0ZXJzIGFyZSBpbnRlcm5hbCBmb3IgcmVjdXJzaW9uCiAgICoKICAgKiBTeW50YXg6CiAgICoKICAgKiAgICAgZXhwYW5kUG93ZXIobm9kZSkKICAgKgogICAqIEBwYXJhbSAge05vZGV9IG5vZGUgICAgICAgICBDdXJyZW50IGV4cHJlc3Npb24gbm9kZQogICAqIEBwYXJhbSAge25vZGV9IHBhcmVudCAgICAgICBQYXJlbnQgY3VycmVudCBub2RlIGluc2lkZSB0aGUgcmVjdXJzaW9uCiAgICogQHBhcmFtICAoaW50fSAgICAgICAgICAgICAgIFBhcmVudCBudW1iZXIgb2YgY2hpZCBpbnNpZGUgdGhlIHJlcmN1cnNpb24KICAgKgogICAqIEByZXR1cm4ge25vZGV9ICAgICAgICBub2RlIGV4cHJlc3Npb24gd2l0aCBhbGwgcG93ZXJzIGV4cGFuZGVkLgogICAqLwoKCiAgZnVuY3Rpb24gZXhwYW5kUG93ZXIobm9kZSwgcGFyZW50LCBpbmRQYXJlbnQpIHsKICAgIHZhciB0cCA9IG5vZGUudHlwZTsKICAgIHZhciBpbnRlcm5hbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxOyAvLyBUUlVFIGluIGludGVybmFsIGNhbGxzCgogICAgaWYgKHRwID09PSAnT3BlcmF0b3JOb2RlJyAmJiBub2RlLmlzQmluYXJ5KCkpIHsKICAgICAgdmFyIGRvZXMgPSBmYWxzZTsKICAgICAgdmFyIHZhbDsKCiAgICAgIGlmIChub2RlLm9wID09PSAnXicpIHsKICAgICAgICAvLyBGaXJzdCBvcGVyYXRvcjogUGFyZW50aGVzaXMgb3IgVW5hcnlNaW51cwogICAgICAgIGlmICgobm9kZS5hcmdzWzBdLnR5cGUgPT09ICdQYXJlbnRoZXNpc05vZGUnIHx8IG5vZGUuYXJnc1swXS50eXBlID09PSAnT3BlcmF0b3JOb2RlJykgJiYgbm9kZS5hcmdzWzFdLnR5cGUgPT09ICdDb25zdGFudE5vZGUnKSB7CiAgICAgICAgICAvLyBTZWNvbmQgb3BlcmF0b3I6IENvbnN0YW50CiAgICAgICAgICB2YWwgPSBwYXJzZUZsb2F0KG5vZGUuYXJnc1sxXS52YWx1ZSk7CiAgICAgICAgICBkb2VzID0gdmFsID49IDIgJiYgT2JqZWN0KHV0aWxzX251bWJlclsiaSIgLyogaXNJbnRlZ2VyICovXSkodmFsKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmIChkb2VzKSB7CiAgICAgICAgLy8gRXhwb25lbnQgPj0gMgogICAgICAgIC8vIEJlZm9yZToKICAgICAgICAvLyAgICAgICAgICAgIG9wZXJhdG9yIEEgLS0+IFN1YnRyZWUKICAgICAgICAvLyBwYXJlbnQgcG93CiAgICAgICAgLy8gICAgICAgICAgICBjb25zdGFudAogICAgICAgIC8vCiAgICAgICAgaWYgKHZhbCA+IDIpIHsKICAgICAgICAgIC8vIEV4cG9uZW50ID4gMiwKICAgICAgICAgIC8vIEFGVEVSOiAgKGV4cG9uZW50ID4gMikKICAgICAgICAgIC8vICAgICAgICAgICAgIG9wZXJhdG9yIEEgLS0+IFN1YnRyZWUKICAgICAgICAgIC8vIHBhcmVudCAgKgogICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGRlZXAgY2xvbmUgKG9wZXJhdG9yIEEgLS0+IFN1YnRyZWUKICAgICAgICAgIC8vICAgICAgICAgICAgIHBvdwogICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0YW50IC0gMQogICAgICAgICAgLy8KICAgICAgICAgIHZhciBuRXNxVG9wbyA9IG5vZGUuYXJnc1swXTsKICAgICAgICAgIHZhciBuRGlyVG9wbyA9IG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW25vZGUuYXJnc1swXS5jbG9uZURlZXAoKSwgbmV3IENvbnN0YW50Tm9kZSh2YWwgLSAxKV0pOwogICAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbkVzcVRvcG8sIG5EaXJUb3BvXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIEV4cG8gPSAyIC0gbm8gcG93ZXIKICAgICAgICAgIC8vIEFGVEVSOiAgKGV4cG9uZW50ID0gIDIpCiAgICAgICAgICAvLyAgICAgICAgICAgICBvcGVyYXRvciBBIC0tPiBTdWJ0cmVlCiAgICAgICAgICAvLyBwYXJlbnQgICBvcGVyCiAgICAgICAgICAvLyAgICAgICAgICAgIGRlZXAgY2xvbmUgKG9wZXJhdG9yIEEgLS0+IFN1YnRyZWUpCiAgICAgICAgICAvLwogICAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZS5hcmdzWzBdLCBub2RlLmFyZ3NbMF0uY2xvbmVEZWVwKCldKTsKICAgICAgICB9CgogICAgICAgIGlmIChpbnRlcm5hbCkgewogICAgICAgICAgLy8gQ2hhbmdlIHBhcmVudCByZWZlcmVuY2VzIGluIGludGVybmFsIHJlY3Vyc2l2ZSBjYWxscwogICAgICAgICAgaWYgKGluZFBhcmVudCA9PT0gJ2NvbnRlbnQnKSB7CiAgICAgICAgICAgIHBhcmVudC5jb250ZW50ID0gbm9kZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBhcmVudC5hcmdzW2luZFBhcmVudF0gPSBub2RlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSAvLyBkb2VzCgogICAgfSAvLyBiaW5hcnkgT3BlcmF0b3JOb2RlCgoKICAgIGlmICh0cCA9PT0gJ1BhcmVudGhlc2lzTm9kZScpIHsKICAgICAgLy8gUmVjdXJzaW9uCiAgICAgIGV4cGFuZFBvd2VyKG5vZGUuY29udGVudCwgbm9kZSwgJ2NvbnRlbnQnKTsKICAgIH0gZWxzZSBpZiAodHAgIT09ICdDb25zdGFudE5vZGUnICYmIHRwICE9PSAnU3ltYm9sTm9kZScpIHsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmFyZ3MubGVuZ3RoOyBpKyspIHsKICAgICAgICBleHBhbmRQb3dlcihub2RlLmFyZ3NbaV0sIG5vZGUsIGkpOwogICAgICB9CiAgICB9CgogICAgaWYgKCFpbnRlcm5hbCkgewogICAgICAvLyByZXR1cm4gdGhlIHJvb3Qgbm9kZQogICAgICByZXR1cm4gbm9kZTsKICAgIH0KICB9IC8vIEVuZCBleHBhbmRQb3dlcgogIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAvKioKICAgKiBBdXhpbGFyeSBmdW5jdGlvbiBmb3IgcmF0aW9uYWxpemUKICAgKiBDb252ZXJ0IG5lYXIgY2Fub25pY2FsIHBvbHlub21pYWwgaW4gb25lIHZhcmlhYmxlIGluIGEgY2Fub25pY2FsIHBvbHlub21pYWwKICAgKiB3aXRoIG9uZSB0ZXJtIGZvciBlYWNoIGV4cG9uZW50IGluIGRlY3JlYXNpbmcgb3JkZXIKICAgKgogICAqIFN5bnRheDoKICAgKgogICAqICAgICBwb2x5VG9DYW5vbmljYWwobm9kZSBbLCBjb2VmZmljaWVudHNdKQogICAqCiAgICogQHBhcmFtICB7Tm9kZSB8IHN0cmluZ30gZXhwciAgICAgICBUaGUgbmVhciBjYW5vbmljYWwgcG9seW5vbWlhbCBleHByZXNzaW9uIHRvIGNvbnZlcnQgaW4gYSBhIGNhbm9uaWNhbCBwb2x5bm9taWFsIGV4cHJlc3Npb24KICAgKgogICAqICAgICAgICBUaGUgc3RyaW5nIG9yIHRyZWUgZXhwcmVzc2lvbiBuZWVkcyB0byBiZSBhdCBiZWxvdyBzeW50YXgsIHdpdGggZnJlZSBzcGFjZXM6CiAgICogICAgICAgICAoICAoXigtKT8gfCBbKy1dPyApY3RlICgqKT8gdmFyICheZXhwbyk/ICB8IGN0ZSApKwogICAqICAgICAgIFdoZXJlICd2YXInIGlzIG9uZSB2YXJpYWJsZSB3aXRoIGFueSB2YWxpZCBuYW1lCiAgICogICAgICAgICAgICAgJ2N0ZScgYXJlIHJlYWwgbnVtZXJpYyBjb25zdGFudHMgd2l0aCBhbnkgdmFsdWUuIEl0IGNhbiBiZSBvbWl0dGVkIGlmIGVxdWFsIHRoYW4gMQogICAqICAgICAgICAgICAgICdleHBvJyBhcmUgaW50ZWdlcnMgZ3JlYXRlciB0aGFuIDAuIEl0IGNhbiBiZSBvbWl0dGVkIGlmIGVxdWFsIHRoYW4gMS4KICAgKgogICAqIEBwYXJhbSAge2FycmF5fSAgIGNvZWZmaWNpZW50cyAgICAgICAgICAgICBPcHRpb25hbCByZXR1cm5zIGNvZWZmaWNpZW50cyBzb3J0ZWQgYnkgaW5jcmVhc2VkIGV4cG9uZW50CiAgICoKICAgKgogICAqIEByZXR1cm4ge25vZGV9ICAgICAgICBuZXcgbm9kZSB0cmVlIHdpdGggb25lIHZhcmlhYmxlIHBvbHlub21pYWwgb3Igc3RyaW5nIGVycm9yLgogICAqLwoKCiAgZnVuY3Rpb24gcG9seVRvQ2Fub25pY2FsKG5vZGUsIGNvZWZmaWNpZW50cykgewogICAgaWYgKGNvZWZmaWNpZW50cyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIGNvZWZmaWNpZW50cyA9IFtdOwogICAgfSAvLyBjb2VmZmljaWVudHMuCgoKICAgIGNvZWZmaWNpZW50c1swXSA9IDA7IC8vIGluZGV4IGlzIHRoZSBleHBvbmVudAoKICAgIHZhciBvID0ge307CiAgICBvLmN0ZSA9IDE7CiAgICBvLm9wZXIgPSAnKyc7IC8vIGZpcmU6IG1hcmsgd2l0aCAqIG9yIF4gd2hlbiBmaW5kcyAqIG9yIF4gZG93biB0cmVlLCByZXNldCB0byAiIiB3aXRoICsgYW5kIC0uCiAgICAvLyAgICAgICBJdCBpcyB1c2VkIHRvIGRlZHVjZSB0aGUgZXhwb25lbnQ6IDEgZm9yICosIDAgZm9yICIiLgoKICAgIG8uZmlyZSA9ICcnOwogICAgdmFyIG1heEV4cG8gPSAwOyAvLyBtYXhpbXVtIGV4cG9uZW50CgogICAgdmFyIHZhcm5hbWUgPSAnJzsgLy8gdmFyaWFibGUgbmFtZQoKICAgIHJlY3VyUG9sKG5vZGUsIG51bGwsIG8pOwogICAgbWF4RXhwbyA9IGNvZWZmaWNpZW50cy5sZW5ndGggLSAxOwogICAgdmFyIGZpcnN0ID0gdHJ1ZTsKICAgIHZhciBubzsKCiAgICBmb3IgKHZhciBpID0gbWF4RXhwbzsgaSA+PSAwOyBpLS0pIHsKICAgICAgaWYgKGNvZWZmaWNpZW50c1tpXSA9PT0gMCkgY29udGludWU7CiAgICAgIHZhciBuMSA9IG5ldyBDb25zdGFudE5vZGUoZmlyc3QgPyBjb2VmZmljaWVudHNbaV0gOiBNYXRoLmFicyhjb2VmZmljaWVudHNbaV0pKTsKICAgICAgdmFyIG9wID0gY29lZmZpY2llbnRzW2ldIDwgMCA/ICctJyA6ICcrJzsKCiAgICAgIGlmIChpID4gMCkgewogICAgICAgIC8vIElzIG5vdCBhIGNvbnN0YW50IHdpdGhvdXQgdmFyaWFibGUKICAgICAgICB2YXIgbjIgPSBuZXcgU3ltYm9sTm9kZSh2YXJuYW1lKTsKCiAgICAgICAgaWYgKGkgPiAxKSB7CiAgICAgICAgICB2YXIgbjMgPSBuZXcgQ29uc3RhbnROb2RlKGkpOwogICAgICAgICAgbjIgPSBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFtuMiwgbjNdKTsKICAgICAgICB9CgogICAgICAgIGlmIChjb2VmZmljaWVudHNbaV0gPT09IC0xICYmIGZpcnN0KSB7CiAgICAgICAgICBuMSA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAndW5hcnlNaW51cycsIFtuMl0pOwogICAgICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoY29lZmZpY2llbnRzW2ldKSA9PT0gMSkgewogICAgICAgICAgbjEgPSBuMjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbjEgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW24xLCBuMl0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKGZpcnN0KSB7CiAgICAgICAgbm8gPSBuMTsKICAgICAgfSBlbHNlIGlmIChvcCA9PT0gJysnKSB7CiAgICAgICAgbm8gPSBuZXcgT3BlcmF0b3JOb2RlKCcrJywgJ2FkZCcsIFtubywgbjFdKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBubyA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbbm8sIG4xXSk7CiAgICAgIH0KCiAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICB9IC8vIGZvcgoKCiAgICBpZiAoZmlyc3QpIHsKICAgICAgcmV0dXJuIG5ldyBDb25zdGFudE5vZGUoMCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbm87CiAgICB9CiAgICAvKioKICAgICAqIFJlY3Vyc2l2ZSBhdXhpbGFyeSBmdW5jdGlvbiBpbnNpZGUgcG9seVRvQ2Fub25pY2FsIGZvcgogICAgICogY29udmVydGluZyBleHByZXNzaW9uIGluIGNhbm9uaWNhbCBmb3JtCiAgICAgKgogICAgICogU3ludGF4OgogICAgICoKICAgICAqICAgICByZWN1clBvbChub2RlLCBub1BhaSwgb2JqKQogICAgICoKICAgICAqIEBwYXJhbSAge05vZGV9IG5vZGUgICAgICAgIFRoZSBjdXJyZW50IHN1YnBvbHlub21pYWwgZXhwcmVzc2lvbgogICAgICogQHBhcmFtICB7Tm9kZSB8IE51bGx9ICBub1BhaSAgIFRoZSBjdXJyZW50IHBhcmVudCBub2RlCiAgICAgKiBAcGFyYW0gIHtvYmplY3R9ICAgIG9iaiAgICAgICAgT2JqZWN0IHdpdGggbWFueSBpbnRlcm5hbCBmbGFncwogICAgICoKICAgICAqIEByZXR1cm4ge30gICAgICAgICAgICAgICAgICAgIE5vIHJldHVybi4gSWYgZXJyb3IsIHRocm93cyBhbiBleGNlcHRpb24KICAgICAqLwoKCiAgICBmdW5jdGlvbiByZWN1clBvbChub2RlLCBub1BhaSwgbykgewogICAgICB2YXIgdHAgPSBub2RlLnR5cGU7CgogICAgICBpZiAodHAgPT09ICdGdW5jdGlvbk5vZGUnKSB7CiAgICAgICAgLy8gKioqKiogRnVuY3Rpb25OYW1lICoqKioqCiAgICAgICAgLy8gTm8gZnVuY3Rpb24gY2FsbCBpbiBwb2x5bm9taWFsIGV4cHJlc3Npb24KICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFuIHVuc29sdmVkIGZ1bmN0aW9uIGNhbGwnKTsKICAgICAgfSBlbHNlIGlmICh0cCA9PT0gJ09wZXJhdG9yTm9kZScpIHsKICAgICAgICAvLyAqKioqKiBPcGVyYXRvck5hbWUgKioqKioKICAgICAgICBpZiAoJystKl4nLmluZGV4T2Yobm9kZS5vcCkgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ09wZXJhdG9yICcgKyBub2RlLm9wICsgJyBpbnZhbGlkJyk7CgogICAgICAgIGlmIChub1BhaSAhPT0gbnVsbCkgewogICAgICAgICAgLy8gLSh1bmFyeSksXiAgOiBjaGlsZHJlbiBvZiAqLCssLQogICAgICAgICAgaWYgKChub2RlLmZuID09PSAndW5hcnlNaW51cycgfHwgbm9kZS5mbiA9PT0gJ3BvdycpICYmIG5vUGFpLmZuICE9PSAnYWRkJyAmJiBub1BhaS5mbiAhPT0gJ3N1YnRyYWN0JyAmJiBub1BhaS5mbiAhPT0gJ211bHRpcGx5JykgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgJyArIG5vZGUub3AgKyAnIHBsYWNpbmcnKTsKICAgICAgICAgIH0gLy8gLSwrLCogOiBjaGlsZHJlbiBvZiArLC0KCgogICAgICAgICAgaWYgKChub2RlLmZuID09PSAnc3VidHJhY3QnIHx8IG5vZGUuZm4gPT09ICdhZGQnIHx8IG5vZGUuZm4gPT09ICdtdWx0aXBseScpICYmIG5vUGFpLmZuICE9PSAnYWRkJyAmJiBub1BhaS5mbiAhPT0gJ3N1YnRyYWN0JykgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgJyArIG5vZGUub3AgKyAnIHBsYWNpbmcnKTsKICAgICAgICAgIH0gLy8gLSwrIDogZmlyc3QgY2hpbGQKCgogICAgICAgICAgaWYgKChub2RlLmZuID09PSAnc3VidHJhY3QnIHx8IG5vZGUuZm4gPT09ICdhZGQnIHx8IG5vZGUuZm4gPT09ICd1bmFyeU1pbnVzJykgJiYgby5ub0ZpbCAhPT0gMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgJyArIG5vZGUub3AgKyAnIHBsYWNpbmcnKTsKICAgICAgICAgIH0KICAgICAgICB9IC8vIEhhcyBwYXJlbnQKICAgICAgICAvLyBGaXJlcnM6IF4sKiAgICAgICBPbGQ6ICAgXiwmLC0odW5hcnkpOiBmaXJlcnMKCgogICAgICAgIGlmIChub2RlLm9wID09PSAnXicgfHwgbm9kZS5vcCA9PT0gJyonKSB7CiAgICAgICAgICBvLmZpcmUgPSBub2RlLm9wOwogICAgICAgIH0KCiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG5vZGUuYXJncy5sZW5ndGg7IF9pKyspIHsKICAgICAgICAgIC8vICssLTogcmVzZXQgZmlyZQogICAgICAgICAgaWYgKG5vZGUuZm4gPT09ICd1bmFyeU1pbnVzJykgby5vcGVyID0gJy0nOwoKICAgICAgICAgIGlmIChub2RlLm9wID09PSAnKycgfHwgbm9kZS5mbiA9PT0gJ3N1YnRyYWN0JykgewogICAgICAgICAgICBvLmZpcmUgPSAnJzsKICAgICAgICAgICAgby5jdGUgPSAxOyAvLyBkZWZhdWx0IGlmIHRoZXJlIGlzIG5vIGNvbnN0YW50CgogICAgICAgICAgICBvLm9wZXIgPSBfaSA9PT0gMCA/ICcrJyA6IG5vZGUub3A7CiAgICAgICAgICB9CgogICAgICAgICAgby5ub0ZpbCA9IF9pOyAvLyBudW1iZXIgb2Ygc29uCgogICAgICAgICAgcmVjdXJQb2wobm9kZS5hcmdzW19pXSwgbm9kZSwgbyk7CiAgICAgICAgfSAvLyBmb3IgaW4gY2hpbGRyZW4KCiAgICAgIH0gZWxzZSBpZiAodHAgPT09ICdTeW1ib2xOb2RlJykgewogICAgICAgIC8vICoqKioqIFN5bWJvbE5hbWUgKioqKioKICAgICAgICBpZiAobm9kZS5uYW1lICE9PSB2YXJuYW1lICYmIHZhcm5hbWUgIT09ICcnKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIG1vcmUgdGhhbiBvbmUgdmFyaWFibGUnKTsKICAgICAgICB9CgogICAgICAgIHZhcm5hbWUgPSBub2RlLm5hbWU7CgogICAgICAgIGlmIChub1BhaSA9PT0gbnVsbCkgewogICAgICAgICAgY29lZmZpY2llbnRzWzFdID0gMTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9IC8vIF46IFN5bWJvbCBpcyBGaXJzdCBjaGlsZAoKCiAgICAgICAgaWYgKG5vUGFpLm9wID09PSAnXicgJiYgby5ub0ZpbCAhPT0gMCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbiBwb3dlciB0aGUgdmFyaWFibGUgc2hvdWxkIGJlIHRoZSBmaXJzdCBwYXJhbWV0ZXInKTsKICAgICAgICB9IC8vICo6IFN5bWJvbCBpcyBTZWNvbmQgY2hpbGQKCgogICAgICAgIGlmIChub1BhaS5vcCA9PT0gJyonICYmIG8ubm9GaWwgIT09IDEpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW4gbXVsdGlwbHkgdGhlIHZhcmlhYmxlIHNob3VsZCBiZSB0aGUgc2Vjb25kIHBhcmFtZXRlcicpOwogICAgICAgIH0gLy8gU3ltYm9sOiBmaXJlcnMgJycsKiA9PiBpdCBtZWFucyB0aGVyZSBpcyBubyBleHBvbmVudCBhYm92ZSwgc28gaXQncyAxIChjdGUgKiB2YXIpCgoKICAgICAgICBpZiAoby5maXJlID09PSAnJyB8fCBvLmZpcmUgPT09ICcqJykgewogICAgICAgICAgaWYgKG1heEV4cG8gPCAxKSBjb2VmZmljaWVudHNbMV0gPSAwOwogICAgICAgICAgY29lZmZpY2llbnRzWzFdICs9IG8uY3RlICogKG8ub3BlciA9PT0gJysnID8gMSA6IC0xKTsKICAgICAgICAgIG1heEV4cG8gPSBNYXRoLm1heCgxLCBtYXhFeHBvKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAodHAgPT09ICdDb25zdGFudE5vZGUnKSB7CiAgICAgICAgdmFyIHZhbG9yID0gcGFyc2VGbG9hdChub2RlLnZhbHVlKTsKCiAgICAgICAgaWYgKG5vUGFpID09PSBudWxsKSB7CiAgICAgICAgICBjb2VmZmljaWVudHNbMF0gPSB2YWxvcjsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChub1BhaS5vcCA9PT0gJ14nKSB7CiAgICAgICAgICAvLyBjdGU6IHNlY29uZCAgY2hpbGQgb2YgcG93ZXIKICAgICAgICAgIGlmIChvLm5vRmlsICE9PSAxKSB0aHJvdyBuZXcgRXJyb3IoJ0NvbnN0YW50IGNhbm5vdCBiZSBwb3dlcmVkJyk7CgogICAgICAgICAgaWYgKCFPYmplY3QodXRpbHNfbnVtYmVyWyJpIiAvKiBpc0ludGVnZXIgKi9dKSh2YWxvcikgfHwgdmFsb3IgPD0gMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vbi1pbnRlZ2VyIGV4cG9uZW50IGlzIG5vdCBhbGxvd2VkJyk7CiAgICAgICAgICB9CgogICAgICAgICAgZm9yICh2YXIgX2kyID0gbWF4RXhwbyArIDE7IF9pMiA8IHZhbG9yOyBfaTIrKykgewogICAgICAgICAgICBjb2VmZmljaWVudHNbX2kyXSA9IDA7CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKHZhbG9yID4gbWF4RXhwbykgY29lZmZpY2llbnRzW3ZhbG9yXSA9IDA7CiAgICAgICAgICBjb2VmZmljaWVudHNbdmFsb3JdICs9IG8uY3RlICogKG8ub3BlciA9PT0gJysnID8gMSA6IC0xKTsKICAgICAgICAgIG1heEV4cG8gPSBNYXRoLm1heCh2YWxvciwgbWF4RXhwbyk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBvLmN0ZSA9IHZhbG9yOyAvLyBDdGU6IGZpcmVyICcnID0+IFRoZXJlIGlzIG5vIGV4cG9uZW50IGFuZCBubyBtdWx0aXBsaWNhdGlvbiwgc28gdGhlIGV4cG9uZW50IGlzIDAuCgogICAgICAgIGlmIChvLmZpcmUgPT09ICcnKSB7CiAgICAgICAgICBjb2VmZmljaWVudHNbMF0gKz0gby5jdGUgKiAoby5vcGVyID09PSAnKycgPyAxIDogLTEpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R5cGUgJyArIHRwICsgJyBpcyBub3QgYWxsb3dlZCcpOwogICAgICB9CiAgICB9IC8vIEVuZCBvZiByZWN1clBvbAoKICB9IC8vIEVuZCBvZiBwb2x5VG9DYW5vbmljYWwKCgogIHJldHVybiByYXRpb25hbGl6ZTsKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2pzb24vcmV2aXZlci5qcwoKdmFyIHJldml2ZXJfbmFtZSA9ICdyZXZpdmVyJzsKdmFyIHJldml2ZXJfZGVwZW5kZW5jaWVzID0gWydjbGFzc2VzJ107CnZhciBjcmVhdGVSZXZpdmVyID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkocmV2aXZlcl9uYW1lLCByZXZpdmVyX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgY2xhc3NlcyA9IF9yZWYuY2xhc3NlczsKCiAgLyoqCiAgICogSW5zdGFudGlhdGUgbWF0aGpzIGRhdGEgdHlwZXMgZnJvbSB0aGVpciBKU09OIHJlcHJlc2VudGF0aW9uCiAgICogQHBhcmFtIHtzdHJpbmd9IGtleQogICAqIEBwYXJhbSB7Kn0gdmFsdWUKICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmV2aXZlZCBvYmplY3QKICAgKi8KICByZXR1cm4gZnVuY3Rpb24gcmV2aXZlcihrZXksIHZhbHVlKSB7CiAgICB2YXIgY29uc3RydWN0b3IgPSBjbGFzc2VzW3ZhbHVlICYmIHZhbHVlLm1hdGhqc107CgogICAgaWYgKGNvbnN0cnVjdG9yICYmIHR5cGVvZiBjb25zdHJ1Y3Rvci5mcm9tSlNPTiA9PT0gJ2Z1bmN0aW9uJykgewogICAgICByZXR1cm4gY29uc3RydWN0b3IuZnJvbUpTT04odmFsdWUpOwogICAgfQoKICAgIHJldHVybiB2YWx1ZTsKICB9Owp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdmVyc2lvbi5qcwp2YXIgdmVyc2lvbiA9ICc2LjYuMSc7IC8vIE5vdGU6IFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3aGVuIGJ1aWxkaW5nIG1hdGguanMuCi8vIENoYW5nZXMgbWFkZSBpbiB0aGlzIGZpbGUgd2lsbCBiZSBvdmVyd3JpdHRlbi4KLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvcGxhaW4vbnVtYmVyL2NvbnN0YW50cy5qcwp2YXIgY29uc3RhbnRzX3BpID0gTWF0aC5QSTsKdmFyIHRhdSA9IDIgKiBNYXRoLlBJOwp2YXIgY29uc3RhbnRzX2UgPSBNYXRoLkU7CnZhciBjb25zdGFudHNfcGhpID0gMS42MTgwMzM5ODg3NDk4OTQ4NDgyMDQ1ODY4MzQzNjU2MzgxMTc3MjAzMDkxNzk4MDU3NjI4NjIxMzU0NTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29uc3RhbnRzLmpzCgoKCgp2YXIgY3JlYXRlVHJ1ZSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKCd0cnVlJywgW10sIGZ1bmN0aW9uICgpIHsKICByZXR1cm4gdHJ1ZTsKfSk7CnZhciBjcmVhdGVGYWxzZSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKCdmYWxzZScsIFtdLCBmdW5jdGlvbiAoKSB7CiAgcmV0dXJuIGZhbHNlOwp9KTsKdmFyIGNyZWF0ZU51bGwgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKSgnbnVsbCcsIFtdLCBmdW5jdGlvbiAoKSB7CiAgcmV0dXJuIG51bGw7Cn0pOwp2YXIgY3JlYXRlSW5maW5pdHkgPQovKiAjX19QVVJFX18gKi8KcmVjcmVhdGVGYWN0b3J5KCdJbmZpbml0eScsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgY29uZmlnID0gX3JlZi5jb25maWcsCiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyOwogIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoSW5maW5pdHkpIDogSW5maW5pdHk7Cn0pOwp2YXIgY3JlYXRlTmFOID0KLyogI19fUFVSRV9fICovCnJlY3JlYXRlRmFjdG9yeSgnTmFOJywgWydjb25maWcnLCAnP0JpZ051bWJlciddLCBmdW5jdGlvbiAoX3JlZjIpIHsKICB2YXIgY29uZmlnID0gX3JlZjIuY29uZmlnLAogICAgICBCaWdOdW1iZXIgPSBfcmVmMi5CaWdOdW1iZXI7CiAgcmV0dXJuIGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInID8gbmV3IEJpZ051bWJlcihOYU4pIDogTmFOOwp9KTsKdmFyIGNyZWF0ZVBpID0KLyogI19fUFVSRV9fICovCnJlY3JlYXRlRmFjdG9yeSgncGknLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmMykgewogIHZhciBjb25maWcgPSBfcmVmMy5jb25maWcsCiAgICAgIEJpZ051bWJlciA9IF9yZWYzLkJpZ051bWJlcjsKICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBjcmVhdGVCaWdOdW1iZXJQaShCaWdOdW1iZXIpIDogY29uc3RhbnRzX3BpOwp9KTsKdmFyIGNyZWF0ZVRhdSA9Ci8qICNfX1BVUkVfXyAqLwpyZWNyZWF0ZUZhY3RvcnkoJ3RhdScsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWY0KSB7CiAgdmFyIGNvbmZpZyA9IF9yZWY0LmNvbmZpZywKICAgICAgQmlnTnVtYmVyID0gX3JlZjQuQmlnTnVtYmVyOwogIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IGNyZWF0ZUJpZ051bWJlclRhdShCaWdOdW1iZXIpIDogdGF1Owp9KTsKdmFyIGNyZWF0ZUUgPQovKiAjX19QVVJFX18gKi8KcmVjcmVhdGVGYWN0b3J5KCdlJywgWydjb25maWcnLCAnP0JpZ051bWJlciddLCBmdW5jdGlvbiAoX3JlZjUpIHsKICB2YXIgY29uZmlnID0gX3JlZjUuY29uZmlnLAogICAgICBCaWdOdW1iZXIgPSBfcmVmNS5CaWdOdW1iZXI7CiAgcmV0dXJuIGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInID8gY3JlYXRlQmlnTnVtYmVyRShCaWdOdW1iZXIpIDogY29uc3RhbnRzX2U7Cn0pOyAvLyBnb2xkZW4gcmF0aW8sICgxK3NxcnQoNSkpLzIKCnZhciBjcmVhdGVQaGkgPQovKiAjX19QVVJFX18gKi8KcmVjcmVhdGVGYWN0b3J5KCdwaGknLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmNikgewogIHZhciBjb25maWcgPSBfcmVmNi5jb25maWcsCiAgICAgIEJpZ051bWJlciA9IF9yZWY2LkJpZ051bWJlcjsKICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBjcmVhdGVCaWdOdW1iZXJQaGkoQmlnTnVtYmVyKSA6IGNvbnN0YW50c19waGk7Cn0pOwp2YXIgY3JlYXRlTE4yID0KLyogI19fUFVSRV9fICovCnJlY3JlYXRlRmFjdG9yeSgnTE4yJywgWydjb25maWcnLCAnP0JpZ051bWJlciddLCBmdW5jdGlvbiAoX3JlZjcpIHsKICB2YXIgY29uZmlnID0gX3JlZjcuY29uZmlnLAogICAgICBCaWdOdW1iZXIgPSBfcmVmNy5CaWdOdW1iZXI7CiAgcmV0dXJuIGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInID8gbmV3IEJpZ051bWJlcigyKS5sbigpIDogTWF0aC5MTjI7Cn0pOwp2YXIgY3JlYXRlTE4xMCA9Ci8qICNfX1BVUkVfXyAqLwpyZWNyZWF0ZUZhY3RvcnkoJ0xOMTAnLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmOCkgewogIHZhciBjb25maWcgPSBfcmVmOC5jb25maWcsCiAgICAgIEJpZ051bWJlciA9IF9yZWY4LkJpZ051bWJlcjsKICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKDEwKS5sbigpIDogTWF0aC5MTjEwOwp9KTsKdmFyIGNyZWF0ZUxPRzJFID0KLyogI19fUFVSRV9fICovCnJlY3JlYXRlRmFjdG9yeSgnTE9HMkUnLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmOSkgewogIHZhciBjb25maWcgPSBfcmVmOS5jb25maWcsCiAgICAgIEJpZ051bWJlciA9IF9yZWY5LkJpZ051bWJlcjsKICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKDEpLmRpdihuZXcgQmlnTnVtYmVyKDIpLmxuKCkpIDogTWF0aC5MT0cyRTsKfSk7CnZhciBjcmVhdGVMT0cxMEUgPQovKiAjX19QVVJFX18gKi8KcmVjcmVhdGVGYWN0b3J5KCdMT0cxMEUnLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmMTApIHsKICB2YXIgY29uZmlnID0gX3JlZjEwLmNvbmZpZywKICAgICAgQmlnTnVtYmVyID0gX3JlZjEwLkJpZ051bWJlcjsKICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKDEpLmRpdihuZXcgQmlnTnVtYmVyKDEwKS5sbigpKSA6IE1hdGguTE9HMTBFOwp9KTsKdmFyIGNyZWF0ZVNRUlQxXzIgPQovKiAjX19QVVJFX18gKi8KcmVjcmVhdGVGYWN0b3J5KCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZQonU1FSVDFfMicsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYxMSkgewogIHZhciBjb25maWcgPSBfcmVmMTEuY29uZmlnLAogICAgICBCaWdOdW1iZXIgPSBfcmVmMTEuQmlnTnVtYmVyOwogIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoJzAuNScpLnNxcnQoKSA6IE1hdGguU1FSVDFfMjsKfSk7CnZhciBjcmVhdGVTUVJUMiA9Ci8qICNfX1BVUkVfXyAqLwpyZWNyZWF0ZUZhY3RvcnkoJ1NRUlQyJywgWydjb25maWcnLCAnP0JpZ051bWJlciddLCBmdW5jdGlvbiAoX3JlZjEyKSB7CiAgdmFyIGNvbmZpZyA9IF9yZWYxMi5jb25maWcsCiAgICAgIEJpZ051bWJlciA9IF9yZWYxMi5CaWdOdW1iZXI7CiAgcmV0dXJuIGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInID8gbmV3IEJpZ051bWJlcigyKS5zcXJ0KCkgOiBNYXRoLlNRUlQyOwp9KTsKdmFyIGNyZWF0ZUkgPQovKiAjX19QVVJFX18gKi8KcmVjcmVhdGVGYWN0b3J5KCdpJywgWydDb21wbGV4J10sIGZ1bmN0aW9uIChfcmVmMTMpIHsKICB2YXIgQ29tcGxleCA9IF9yZWYxMy5Db21wbGV4OwogIHJldHVybiBDb21wbGV4Lkk7Cn0pOyAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHY1Cgp2YXIgY3JlYXRlVXBwZXJjYXNlUGkgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKSgnUEknLCBbJ3BpJ10sIGZ1bmN0aW9uIChfcmVmMTQpIHsKICB2YXIgcGkgPSBfcmVmMTQucGk7CiAgcmV0dXJuIHBpOwp9KTsKdmFyIGNyZWF0ZVVwcGVyY2FzZUUgPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKSgnRScsIFsnZSddLCBmdW5jdGlvbiAoX3JlZjE1KSB7CiAgdmFyIGUgPSBfcmVmMTUuZTsKICByZXR1cm4gZTsKfSk7CnZhciBjcmVhdGVWZXJzaW9uID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoJ3ZlcnNpb24nLCBbXSwgZnVuY3Rpb24gKCkgewogIHJldHVybiB2ZXJzaW9uOwp9KTsgLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGZhY3Rvcnkgd2l0aCBhIGZsYWcgcmVjcmVhdGVPbkNvbmZpZ0NoYW5nZQovLyBpZGVhOiBhbGxvdyBwYXNzaW5nIG9wdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIGZhY3RvcnkgZnVuY3Rpb24gYXMgNHRoIGFyZ3VtZW50PwoKZnVuY3Rpb24gcmVjcmVhdGVGYWN0b3J5KG5hbWUsIGRlcGVuZGVuY2llcywgY3JlYXRlKSB7CiAgcmV0dXJuIE9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkobmFtZSwgZGVwZW5kZW5jaWVzLCBjcmVhdGUsIHsKICAgIHJlY3JlYXRlT25Db25maWdDaGFuZ2U6IHRydWUKICB9KTsKfQovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy90eXBlL3VuaXQvcGh5c2ljYWxDb25zdGFudHMuanMKIC8vIFNvdXJjZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUGh5c2ljYWxfY29uc3RhbnQKLy8gVW5pdmVyc2FsIGNvbnN0YW50cwoKdmFyIGNyZWF0ZVNwZWVkT2ZMaWdodCA9Ci8qICNfX1BVUkVfXyAqLwp1bml0RmFjdG9yeSgnc3BlZWRPZkxpZ2h0JywgJzI5OTc5MjQ1OCcsICdtIHNeLTEnKTsKdmFyIGNyZWF0ZUdyYXZpdGF0aW9uQ29uc3RhbnQgPQovKiAjX19QVVJFX18gKi8KdW5pdEZhY3RvcnkoJ2dyYXZpdGF0aW9uQ29uc3RhbnQnLCAnNi42NzQzMGUtMTEnLCAnbV4zIGtnXi0xIHNeLTInKTsKdmFyIGNyZWF0ZVBsYW5ja0NvbnN0YW50ID0KLyogI19fUFVSRV9fICovCnVuaXRGYWN0b3J5KCdwbGFuY2tDb25zdGFudCcsICc2LjYyNjA3MDE1ZS0zNCcsICdKIHMnKTsKdmFyIGNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudCA9Ci8qICNfX1BVUkVfXyAqLwp1bml0RmFjdG9yeSgncmVkdWNlZFBsYW5ja0NvbnN0YW50JywgJzEuMDU0NTcxODE3NjQ2MTU2NWUtMzQnLCAnSiBzJyk7IC8vIEVsZWN0cm9tYWduZXRpYyBjb25zdGFudHMKCnZhciBjcmVhdGVNYWduZXRpY0NvbnN0YW50ID0KLyogI19fUFVSRV9fICovCnVuaXRGYWN0b3J5KCdtYWduZXRpY0NvbnN0YW50JywgJzEuMjU2NjM3MDYyMTJlLTYnLCAnTiBBXi0yJyk7CnZhciBjcmVhdGVFbGVjdHJpY0NvbnN0YW50ID0KLyogI19fUFVSRV9fICovCnVuaXRGYWN0b3J5KCdlbGVjdHJpY0NvbnN0YW50JywgJzguODU0MTg3ODEyOGUtMTInLCAnRiBtXi0xJyk7CnZhciBjcmVhdGVWYWN1dW1JbXBlZGFuY2UgPQovKiAjX19QVVJFX18gKi8KdW5pdEZhY3RvcnkoJ3ZhY3V1bUltcGVkYW5jZScsICczNzYuNzMwMzEzNjY3JywgJ29obScpOwp2YXIgY3JlYXRlQ291bG9tYiA9Ci8qICNfX1BVUkVfXyAqLwp1bml0RmFjdG9yeSgnY291bG9tYicsICc4Ljk4NzU1MTc5MjI2MTE3MWU5JywgJ04gbV4yIENeLTInKTsKdmFyIGNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2UgPQovKiAjX19QVVJFX18gKi8KdW5pdEZhY3RvcnkoJ2VsZW1lbnRhcnlDaGFyZ2UnLCAnMS42MDIxNzY2MzRlLTE5JywgJ0MnKTsKdmFyIGNyZWF0ZUJvaHJNYWduZXRvbiA9Ci8qICNfX1BVUkVfXyAqLwp1bml0RmFjdG9yeSgnYm9ock1hZ25ldG9uJywgJzkuMjc0MDEwMDc4M2UtMjQnLCAnSiBUXi0xJyk7CnZhciBjcmVhdGVDb25kdWN0YW5jZVF1YW50dW0gPQovKiAjX19QVVJFX18gKi8KdW5pdEZhY3RvcnkoJ2NvbmR1Y3RhbmNlUXVhbnR1bScsICc3Ljc0ODA5MTcyOTg2MzY0OWUtNScsICdTJyk7CnZhciBjcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtID0KLyogI19fUFVSRV9fICovCnVuaXRGYWN0b3J5KCdpbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtJywgJzEyOTA2LjQwMzcyOTY1MjI1NycsICdvaG0nKTsKdmFyIGNyZWF0ZU1hZ25ldGljRmx1eFF1YW50dW0gPQovKiAjX19QVVJFX18gKi8KdW5pdEZhY3RvcnkoJ21hZ25ldGljRmx1eFF1YW50dW0nLCAnMi4wNjc4MzM4NDg0NjE5Mjk1ZS0xNScsICdXYicpOwp2YXIgY3JlYXRlTnVjbGVhck1hZ25ldG9uID0KLyogI19fUFVSRV9fICovCnVuaXRGYWN0b3J5KCdudWNsZWFyTWFnbmV0b24nLCAnNS4wNTA3ODM3NDYxZS0yNycsICdKIFReLTEnKTsKdmFyIGNyZWF0ZUtsaXR6aW5nID0KLyogI19fUFVSRV9fICovCnVuaXRGYWN0b3J5KCdrbGl0emluZycsICcyNTgxMi44MDc0NTkzMDQ1MTMnLCAnb2htJyk7CnZhciBjcmVhdGVKb3NlcGhzb24gPQovKiAjX19QVVJFX18gKi8KdW5pdEZhY3RvcnkoJ2pvc2VwaHNvbicsICc0LjgzNTk3ODQ4NDE2OTgzNmUxNCBIeiBWJywgJ0h6IFZeLTEnKTsgLy8gVE9ETzogc3VwcG9ydCBmb3IgSHogbmVlZGVkCi8vIEF0b21pYyBhbmQgbnVjbGVhciBjb25zdGFudHMKCnZhciBjcmVhdGVCb2hyUmFkaXVzID0KLyogI19fUFVSRV9fICovCnVuaXRGYWN0b3J5KCdib2hyUmFkaXVzJywgJzUuMjkxNzcyMTA5MDNlLTExJywgJ20nKTsKdmFyIGNyZWF0ZUNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzID0KLyogI19fUFVSRV9fICovCnVuaXRGYWN0b3J5KCdjbGFzc2ljYWxFbGVjdHJvblJhZGl1cycsICcyLjgxNzk0MDMyNjJlLTE1JywgJ20nKTsKdmFyIGNyZWF0ZUVsZWN0cm9uTWFzcyA9Ci8qICNfX1BVUkVfXyAqLwp1bml0RmFjdG9yeSgnZWxlY3Ryb25NYXNzJywgJzkuMTA5MzgzNzAxNWUtMzEnLCAna2cnKTsKdmFyIGNyZWF0ZUZlcm1pQ291cGxpbmcgPQovKiAjX19QVVJFX18gKi8KdW5pdEZhY3RvcnkoJ2Zlcm1pQ291cGxpbmcnLCAnMS4xNjYzNzg3ZS01JywgJ0dlVl4tMicpOwp2YXIgY3JlYXRlRmluZVN0cnVjdHVyZSA9IG51bWJlckZhY3RvcnkoJ2ZpbmVTdHJ1Y3R1cmUnLCA3LjI5NzM1MjU2OTNlLTMpOwp2YXIgY3JlYXRlSGFydHJlZUVuZXJneSA9Ci8qICNfX1BVUkVfXyAqLwp1bml0RmFjdG9yeSgnaGFydHJlZUVuZXJneScsICc0LjM1OTc0NDcyMjIwNzFlLTE4JywgJ0onKTsKdmFyIGNyZWF0ZVByb3Rvbk1hc3MgPQovKiAjX19QVVJFX18gKi8KdW5pdEZhY3RvcnkoJ3Byb3Rvbk1hc3MnLCAnMS42NzI2MjE5MjM2OWUtMjcnLCAna2cnKTsKdmFyIGNyZWF0ZURldXRlcm9uTWFzcyA9Ci8qICNfX1BVUkVfXyAqLwp1bml0RmFjdG9yeSgnZGV1dGVyb25NYXNzJywgJzMuMzQzNTgzMDkyNmUtMjcnLCAna2cnKTsKdmFyIGNyZWF0ZU5ldXRyb25NYXNzID0KLyogI19fUFVSRV9fICovCnVuaXRGYWN0b3J5KCduZXV0cm9uTWFzcycsICcxLjY3NDkyNzE2MTNlLTI3JywgJ2tnJyk7CnZhciBjcmVhdGVRdWFudHVtT2ZDaXJjdWxhdGlvbiA9Ci8qICNfX1BVUkVfXyAqLwp1bml0RmFjdG9yeSgncXVhbnR1bU9mQ2lyY3VsYXRpb24nLCAnMy42MzY5NDc1NTE2ZS00JywgJ21eMiBzXi0xJyk7CnZhciBjcmVhdGVSeWRiZXJnID0KLyogI19fUFVSRV9fICovCnVuaXRGYWN0b3J5KCdyeWRiZXJnJywgJzEwOTczNzMxLjU2ODE2MCcsICdtXi0xJyk7CnZhciBjcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uID0KLyogI19fUFVSRV9fICovCnVuaXRGYWN0b3J5KCd0aG9tc29uQ3Jvc3NTZWN0aW9uJywgJzYuNjUyNDU4NzMyMWUtMjknLCAnbV4yJyk7CnZhciBjcmVhdGVXZWFrTWl4aW5nQW5nbGUgPSBudW1iZXJGYWN0b3J5KCd3ZWFrTWl4aW5nQW5nbGUnLCAwLjIyMjkwKTsKdmFyIGNyZWF0ZUVmaW1vdkZhY3RvciA9IG51bWJlckZhY3RvcnkoJ2VmaW1vdkZhY3RvcicsIDIyLjcpOyAvLyBQaHlzaWNvLWNoZW1pY2FsIGNvbnN0YW50cwoKdmFyIGNyZWF0ZUF0b21pY01hc3MgPQovKiAjX19QVVJFX18gKi8KdW5pdEZhY3RvcnkoJ2F0b21pY01hc3MnLCAnMS42NjA1MzkwNjY2MGUtMjcnLCAna2cnKTsKdmFyIGNyZWF0ZUF2b2dhZHJvID0KLyogI19fUFVSRV9fICovCnVuaXRGYWN0b3J5KCdhdm9nYWRybycsICc2LjAyMjE0MDc2ZTIzJywgJ21vbF4tMScpOwp2YXIgY3JlYXRlQm9sdHptYW5uID0KLyogI19fUFVSRV9fICovCnVuaXRGYWN0b3J5KCdib2x0em1hbm4nLCAnMS4zODA2NDllLTIzJywgJ0ogS14tMScpOwp2YXIgY3JlYXRlRmFyYWRheSA9Ci8qICNfX1BVUkVfXyAqLwp1bml0RmFjdG9yeSgnZmFyYWRheScsICc5NjQ4NS4zMzIxMjMzMTAwMScsICdDIG1vbF4tMScpOwp2YXIgY3JlYXRlRmlyc3RSYWRpYXRpb24gPQovKiAjX19QVVJFX18gKi8KdW5pdEZhY3RvcnkoJ2ZpcnN0UmFkaWF0aW9uJywgJzMuNzQxNzcxODUyMTkyNzU3M2UtMTYnLCAnVyBtXjInKTsgLy8gZXhwb3J0IGNvbnN0IGNyZWF0ZVNwZWN0cmFsUmFkaWFuY2UgPSAvKiAjX19QVVJFX18gKi8gdW5pdEZhY3RvcnkoJ3NwZWN0cmFsUmFkaWFuY2UnLCAnMS4xOTEwNDI5NzIzOTcxODgxZS0xNicsICdXIG1eMiBzcl4tMScpIC8vIFRPRE8gc3BlY3RyYWxSYWRpYW5jZQoKdmFyIGNyZWF0ZUxvc2NobWlkdCA9Ci8qICNfX1BVUkVfXyAqLwp1bml0RmFjdG9yeSgnbG9zY2htaWR0JywgJzIuNjg2NzgwMTExNzk4NDQ0ZTI1JywgJ21eLTMnKTsKdmFyIGNyZWF0ZUdhc0NvbnN0YW50ID0KLyogI19fUFVSRV9fICovCnVuaXRGYWN0b3J5KCdnYXNDb25zdGFudCcsICc4LjMxNDQ2MjYxODE1MzI0JywgJ0ogS14tMSBtb2xeLTEnKTsKdmFyIGNyZWF0ZU1vbGFyUGxhbmNrQ29uc3RhbnQgPQovKiAjX19QVVJFX18gKi8KdW5pdEZhY3RvcnkoJ21vbGFyUGxhbmNrQ29uc3RhbnQnLCAnMy45OTAzMTI3MTI4OTM0MzFlLTEwJywgJ0ogcyBtb2xeLTEnKTsKdmFyIGNyZWF0ZU1vbGFyVm9sdW1lID0KLyogI19fUFVSRV9fICovCnVuaXRGYWN0b3J5KCdtb2xhclZvbHVtZScsICcwLjAyMjQxMzk2OTU0NTAxNDEzNycsICdtXjMgbW9sXi0xJyk7CnZhciBjcmVhdGVTYWNrdXJUZXRyb2RlID0gbnVtYmVyRmFjdG9yeSgnc2Fja3VyVGV0cm9kZScsIC0xLjE2NDg3MDUyMzU4KTsKdmFyIGNyZWF0ZVNlY29uZFJhZGlhdGlvbiA9Ci8qICNfX1BVUkVfXyAqLwp1bml0RmFjdG9yeSgnc2Vjb25kUmFkaWF0aW9uJywgJzAuMDE0Mzg3NzY4Nzc1MDM5MzM3JywgJ20gSycpOwp2YXIgY3JlYXRlU3RlZmFuQm9sdHptYW5uID0KLyogI19fUFVSRV9fICovCnVuaXRGYWN0b3J5KCdzdGVmYW5Cb2x0em1hbm4nLCAnNS42NzAzNzQ0MTkxODQ0M2UtOCcsICdXIG1eLTIgS14tNCcpOwp2YXIgY3JlYXRlV2llbkRpc3BsYWNlbWVudCA9Ci8qICNfX1BVUkVfXyAqLwp1bml0RmFjdG9yeSgnd2llbkRpc3BsYWNlbWVudCcsICcyLjg5Nzc3MTk1NWUtMycsICdtIEsnKTsgLy8gQWRvcHRlZCB2YWx1ZXMKCnZhciBjcmVhdGVNb2xhck1hc3MgPQovKiAjX19QVVJFX18gKi8KdW5pdEZhY3RvcnkoJ21vbGFyTWFzcycsICcwLjk5OTk5OTk5OTY1ZS0zJywgJ2tnIG1vbF4tMScpOwp2YXIgY3JlYXRlTW9sYXJNYXNzQzEyID0KLyogI19fUFVSRV9fICovCnVuaXRGYWN0b3J5KCdtb2xhck1hc3NDMTInLCAnMTEuOTk5OTk5OTk1OGUtMycsICdrZyBtb2xeLTEnKTsKdmFyIGNyZWF0ZUdyYXZpdHkgPQovKiAjX19QVVJFX18gKi8KdW5pdEZhY3RvcnkoJ2dyYXZpdHknLCAnOS44MDY2NScsICdtIHNeLTInKTsgLy8gYXRtIGlzIGRlZmluZWQgaW4gVW5pdC5qcwovLyBOYXR1cmFsIHVuaXRzCgp2YXIgY3JlYXRlUGxhbmNrTGVuZ3RoID0KLyogI19fUFVSRV9fICovCnVuaXRGYWN0b3J5KCdwbGFuY2tMZW5ndGgnLCAnMS42MTYyNTVlLTM1JywgJ20nKTsKdmFyIGNyZWF0ZVBsYW5ja01hc3MgPQovKiAjX19QVVJFX18gKi8KdW5pdEZhY3RvcnkoJ3BsYW5ja01hc3MnLCAnMi4xNzY0MzVlLTgnLCAna2cnKTsKdmFyIGNyZWF0ZVBsYW5ja1RpbWUgPQovKiAjX19QVVJFX18gKi8KdW5pdEZhY3RvcnkoJ3BsYW5ja1RpbWUnLCAnNS4zOTEyNDVlLTQ0JywgJ3MnKTsKdmFyIGNyZWF0ZVBsYW5ja0NoYXJnZSA9Ci8qICNfX1BVUkVfXyAqLwp1bml0RmFjdG9yeSgncGxhbmNrQ2hhcmdlJywgJzEuODc1NTQ2MDM3NzhlLTE4JywgJ0MnKTsKdmFyIGNyZWF0ZVBsYW5ja1RlbXBlcmF0dXJlID0KLyogI19fUFVSRV9fICovCnVuaXRGYWN0b3J5KCdwbGFuY2tUZW1wZXJhdHVyZScsICcxLjQxNjc4NWUrMzInLCAnSycpOyAvLyBoZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgZmFjdG9yeSBmdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgcGh5c2ljYWwgY29uc3RhbnQsCi8vIGEgVW5pdCB3aXRoIGVpdGhlciBhIG51bWJlciB2YWx1ZSBvciBhIEJpZ051bWJlciB2YWx1ZSBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24KCmZ1bmN0aW9uIHVuaXRGYWN0b3J5KG5hbWUsIHZhbHVlU3RyLCB1bml0U3RyKSB7CiAgdmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ1VuaXQnLCAnQmlnTnVtYmVyJ107CiAgcmV0dXJuIE9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogICAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLAogICAgICAgIFVuaXQgPSBfcmVmLlVuaXQsCiAgICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7CiAgICAvLyBOb3RlIHRoYXQgd2UgY2FuIHBhcnNlIGludG8gbnVtYmVyIG9yIEJpZ051bWJlci4KICAgIC8vIFdlIGRvIG5vdCBwYXJzZSBpbnRvIEZyYWN0aW9ucyBhcyB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZTogd2Ugd291bGQgbG9zZSBwcmVjaXNpb24gb2YgdGhlIHZhbHVlcwogICAgLy8gVGhlcmVmb3JlIHdlIGRvbnQgdXNlIFVuaXQucGFyc2UoKQogICAgdmFyIHZhbHVlID0gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKHZhbHVlU3RyKSA6IHBhcnNlRmxvYXQodmFsdWVTdHIpOwogICAgdmFyIHVuaXQgPSBuZXcgVW5pdCh2YWx1ZSwgdW5pdFN0cik7CiAgICB1bml0LmZpeFByZWZpeCA9IHRydWU7CiAgICByZXR1cm4gdW5pdDsKICB9KTsKfSAvLyBoZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgZmFjdG9yeSBmdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbnVtZXJpYyBjb25zdGFudCwKLy8gZWl0aGVyIGEgbnVtYmVyIG9yIEJpZ051bWJlciBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24KCgpmdW5jdGlvbiBudW1iZXJGYWN0b3J5KG5hbWUsIHZhbHVlKSB7CiAgdmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ0JpZ051bWJlciddOwogIHJldHVybiBPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYyKSB7CiAgICB2YXIgY29uZmlnID0gX3JlZjIuY29uZmlnLAogICAgICAgIEJpZ051bWJlciA9IF9yZWYyLkJpZ051bWJlcjsKICAgIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIodmFsdWUpIDogdmFsdWU7CiAgfSk7Cn0KLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi90cmFuc2Zvcm0vYXBwbHkudHJhbnNmb3JtLmpzCgoKCgp2YXIgYXBwbHlfdHJhbnNmb3JtX25hbWUgPSAnYXBwbHknOwp2YXIgYXBwbHlfdHJhbnNmb3JtX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnaXNJbnRlZ2VyJ107Ci8qKgogKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5hcHBseQogKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi4KICoKICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgbGFzdCBgZGltYCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gYXBwbHkKICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZAogKi8KCnZhciBjcmVhdGVBcHBseVRyYW5zZm9ybSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGFwcGx5X3RyYW5zZm9ybV9uYW1lLCBhcHBseV90cmFuc2Zvcm1fZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyOwogIHZhciBhcHBseSA9IGNyZWF0ZUFwcGx5KHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIGlzSW50ZWdlcjogaXNJbnRlZ2VyCiAgfSk7IC8vIEBzZWU6IGNvbW1lbnQgb2YgY29uY2F0IGl0c2VsZgoKICByZXR1cm4gdHlwZWQoJ2FwcGx5JywgewogICAgJy4uLmFueSc6IGZ1bmN0aW9uIGFueShhcmdzKSB7CiAgICAgIC8vIGNoYW5nZSBkaW0gZnJvbSBvbmUtYmFzZWQgdG8gemVyby1iYXNlZAogICAgICB2YXIgZGltID0gYXJnc1sxXTsKCiAgICAgIGlmIChPYmplY3QoaXNbInkiIC8qIGlzTnVtYmVyICovXSkoZGltKSkgewogICAgICAgIGFyZ3NbMV0gPSBkaW0gLSAxOwogICAgICB9IGVsc2UgaWYgKE9iamVjdChpc1siZSIgLyogaXNCaWdOdW1iZXIgKi9dKShkaW0pKSB7CiAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTsKICAgICAgfQoKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gYXBwbHkuYXBwbHkobnVsbCwgYXJncyk7CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIHRocm93IGVycm9yVHJhbnNmb3JtKGVycik7CiAgICAgIH0KICAgIH0KICB9KTsKfSwgewogIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vdHJhbnNmb3JtL2NvbHVtbi50cmFuc2Zvcm0uanMKCgoKCnZhciBjb2x1bW5fdHJhbnNmb3JtX25hbWUgPSAnY29sdW1uJzsKdmFyIGNvbHVtbl90cmFuc2Zvcm1fZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdJbmRleCcsICdtYXRyaXgnLCAncmFuZ2UnXTsKLyoqCiAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRyaXguY29sdW1uCiAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLgogKgogKiBUaGlzIHRyYW5zZm9ybSBjaGFuZ2VkIHRoZSBsYXN0IGBpbmRleGAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIGNvbHVtbgogKiBmcm9tIHplcm8tYmFzZWQgdG8gb25lLWJhc2VkCiAqLwoKdmFyIGNyZWF0ZUNvbHVtblRyYW5zZm9ybSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKGNvbHVtbl90cmFuc2Zvcm1fbmFtZSwgY29sdW1uX3RyYW5zZm9ybV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgSW5kZXggPSBfcmVmLkluZGV4LAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCwKICAgICAgcmFuZ2UgPSBfcmVmLnJhbmdlOwogIHZhciBjb2x1bW4gPSBjcmVhdGVDb2x1bW4oewogICAgdHlwZWQ6IHR5cGVkLAogICAgSW5kZXg6IEluZGV4LAogICAgbWF0cml4OiBtYXRyaXgsCiAgICByYW5nZTogcmFuZ2UKICB9KTsgLy8gQHNlZTogY29tbWVudCBvZiBjb2x1bW4gaXRzZWxmCgogIHJldHVybiB0eXBlZCgnY29sdW1uJywgewogICAgJy4uLmFueSc6IGZ1bmN0aW9uIGFueShhcmdzKSB7CiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGZyb20gemVyby1iYXNlZCB0byBvbmUtYmFzZWQKICAgICAgdmFyIGxhc3RJbmRleCA9IGFyZ3MubGVuZ3RoIC0gMTsKICAgICAgdmFyIGxhc3QgPSBhcmdzW2xhc3RJbmRleF07CgogICAgICBpZiAoT2JqZWN0KGlzWyJ5IiAvKiBpc051bWJlciAqL10pKGxhc3QpKSB7CiAgICAgICAgYXJnc1tsYXN0SW5kZXhdID0gbGFzdCAtIDE7CiAgICAgIH0KCiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIGNvbHVtbi5hcHBseShudWxsLCBhcmdzKTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgdGhyb3cgZXJyb3JUcmFuc2Zvcm0oZXJyKTsKICAgICAgfQogICAgfQogIH0pOwp9LCB7CiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi90cmFuc2Zvcm0vdXRpbHMvY29tcGlsZUlubGluZUV4cHJlc3Npb24uanMKCi8qKgogKiBDb21waWxlIGFuIGlubGluZSBleHByZXNzaW9uIGxpa2UgInggPiAwIgogKiBAcGFyYW0ge05vZGV9IGV4cHJlc3Npb24KICogQHBhcmFtIHtPYmplY3R9IG1hdGgKICogQHBhcmFtIHtPYmplY3R9IHNjb3BlCiAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2l0aCBvbmUgYXJndW1lbnQgd2hpY2ggZmlsbHMgaW4gdGhlCiAqICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgdmFyaWFibGUgKGxpa2UgIngiKSBhbmQgZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uCiAqLwoKZnVuY3Rpb24gY29tcGlsZUlubGluZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgbWF0aCwgc2NvcGUpIHsKICAvLyBmaW5kIGFuIHVuZGVmaW5lZCBzeW1ib2wKICB2YXIgc3ltYm9sID0gZXhwcmVzc2lvbi5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHsKICAgIHJldHVybiBPYmplY3QoaXNbIkoiIC8qIGlzU3ltYm9sTm9kZSAqL10pKG5vZGUpICYmICEobm9kZS5uYW1lIGluIG1hdGgpICYmICEobm9kZS5uYW1lIGluIHNjb3BlKTsKICB9KVswXTsKCiAgaWYgKCFzeW1ib2wpIHsKICAgIHRocm93IG5ldyBFcnJvcignTm8gdW5kZWZpbmVkIHZhcmlhYmxlIGZvdW5kIGluIGlubGluZSBleHByZXNzaW9uICInICsgZXhwcmVzc2lvbiArICciJyk7CiAgfSAvLyBjcmVhdGUgYSB0ZXN0IGZ1bmN0aW9uIGZvciB0aGlzIGVxdWF0aW9uCgoKICB2YXIgbmFtZSA9IHN5bWJvbC5uYW1lOyAvLyB2YXJpYWJsZSBuYW1lCgogIHZhciBzdWJTY29wZSA9IE9iamVjdC5jcmVhdGUoc2NvcGUpOwogIHZhciBlcSA9IGV4cHJlc3Npb24uY29tcGlsZSgpOwogIHJldHVybiBmdW5jdGlvbiBpbmxpbmVFeHByZXNzaW9uKHgpIHsKICAgIHN1YlNjb3BlW25hbWVdID0geDsKICAgIHJldHVybiBlcS5ldmFsdWF0ZShzdWJTY29wZSk7CiAgfTsKfQovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL3RyYW5zZm9ybS9maWx0ZXIudHJhbnNmb3JtLmpzCgoKCgoKdmFyIGZpbHRlcl90cmFuc2Zvcm1fbmFtZSA9ICdmaWx0ZXInOwp2YXIgZmlsdGVyX3RyYW5zZm9ybV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107CnZhciBjcmVhdGVGaWx0ZXJUcmFuc2Zvcm0gPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShmaWx0ZXJfdHJhbnNmb3JtX25hbWUsIGZpbHRlcl90cmFuc2Zvcm1fZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7CgogIC8qKgogICAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLmZpbHRlcgogICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLgogICAqCiAgICogVGhpcyB0cmFuc2Zvcm0gYWRkcyBzdXBwb3J0IGZvciBlcXVhdGlvbnMgYXMgdGVzdCBmdW5jdGlvbiBmb3IgbWF0aC5maWx0ZXIsCiAgICogc28geW91IGNhbiBkbyBzb21ldGhpbmcgbGlrZSAnZmlsdGVyKFszLCAtMiwgNV0sIHggPiAwKScuCiAgICovCiAgZnVuY3Rpb24gZmlsdGVyVHJhbnNmb3JtKGFyZ3MsIG1hdGgsIHNjb3BlKSB7CiAgICB2YXIgeCwgY2FsbGJhY2s7CgogICAgaWYgKGFyZ3NbMF0pIHsKICAgICAgeCA9IGFyZ3NbMF0uY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTsKICAgIH0KCiAgICBpZiAoYXJnc1sxXSkgewogICAgICBpZiAoT2JqZWN0KGlzWyJKIiAvKiBpc1N5bWJvbE5vZGUgKi9dKShhcmdzWzFdKSB8fCBPYmplY3QoaXNbInEiIC8qIGlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSAqL10pKGFyZ3NbMV0pKSB7CiAgICAgICAgLy8gYSBmdW5jdGlvbiBwb2ludGVyLCBsaWtlIGZpbHRlcihbMywgLTIsIDVdLCBteVRlc3RGdW5jdGlvbikKICAgICAgICBjYWxsYmFjayA9IGFyZ3NbMV0uY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBhbiBleHByZXNzaW9uIGxpa2UgZmlsdGVyKFszLCAtMiwgNV0sIHggPiAwKQogICAgICAgIGNhbGxiYWNrID0gY29tcGlsZUlubGluZUV4cHJlc3Npb24oYXJnc1sxXSwgbWF0aCwgc2NvcGUpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGZpbHRlcih4LCBjYWxsYmFjayk7CiAgfQoKICBmaWx0ZXJUcmFuc2Zvcm0ucmF3QXJncyA9IHRydWU7IC8vIG9uZSBiYXNlZCB2ZXJzaW9uIG9mIGZ1bmN0aW9uIGZpbHRlcgoKICB2YXIgZmlsdGVyID0gdHlwZWQoJ2ZpbHRlcicsIHsKICAgICdBcnJheSwgZnVuY3Rpb24nOiBfZmlsdGVyLAogICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCB0ZXN0KSB7CiAgICAgIHJldHVybiB4LmNyZWF0ZShfZmlsdGVyKHgudG9BcnJheSgpLCB0ZXN0KSk7CiAgICB9LAogICAgJ0FycmF5LCBSZWdFeHAnOiB1dGlsc19hcnJheVsiZCIgLyogZmlsdGVyUmVnRXhwICovXSwKICAgICdNYXRyaXgsIFJlZ0V4cCc6IGZ1bmN0aW9uIE1hdHJpeFJlZ0V4cCh4LCB0ZXN0KSB7CiAgICAgIHJldHVybiB4LmNyZWF0ZShPYmplY3QodXRpbHNfYXJyYXlbImQiIC8qIGZpbHRlclJlZ0V4cCAqL10pKHgudG9BcnJheSgpLCB0ZXN0KSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGZpbHRlclRyYW5zZm9ybTsKfSwgewogIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWUKfSk7Ci8qKgogKiBGaWx0ZXIgdmFsdWVzIGluIGEgY2FsbGJhY2sgZ2l2ZW4gYSBjYWxsYmFjayBmdW5jdGlvbgogKgogKiAhISEgUGFzc2VzIGEgb25lLWJhc2VkIGluZGV4ICEhIQogKgogKiBAcGFyYW0ge0FycmF5fSB4CiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCiAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIHRoZSBmaWx0ZXJlZCBhcnJheQogKiBAcHJpdmF0ZQogKi8KCmZ1bmN0aW9uIF9maWx0ZXIoeCwgY2FsbGJhY2spIHsKICAvLyBmaWd1cmUgb3V0IHdoYXQgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhwZWN0cwogIHZhciBhcmdzID0gbWF4QXJndW1lbnRDb3VudChjYWxsYmFjayk7CiAgcmV0dXJuIE9iamVjdCh1dGlsc19hcnJheVsiYyIgLyogZmlsdGVyICovXSkoeCwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHsKICAgIC8vIGludm9rZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3VtZW50cwogICAgaWYgKGFyZ3MgPT09IDEpIHsKICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlKTsKICAgIH0gZWxzZSBpZiAoYXJncyA9PT0gMikgewogICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIFtpbmRleCArIDFdKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIDMgb3IgLTEKICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlLCBbaW5kZXggKyAxXSwgYXJyYXkpOwogICAgfQogIH0pOwp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vdHJhbnNmb3JtL2ZvckVhY2gudHJhbnNmb3JtLmpzCgoKCgoKdmFyIGZvckVhY2hfdHJhbnNmb3JtX25hbWUgPSAnZm9yRWFjaCc7CnZhciBmb3JFYWNoX3RyYW5zZm9ybV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107CnZhciBjcmVhdGVGb3JFYWNoVHJhbnNmb3JtID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoZm9yRWFjaF90cmFuc2Zvcm1fbmFtZSwgZm9yRWFjaF90cmFuc2Zvcm1fZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7CgogIC8qKgogICAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLmZvckVhY2gKICAgKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi4KICAgKgogICAqIFRoaXMgdHJhbnNmb3JtIGNyZWF0ZXMgYSBvbmUtYmFzZWQgaW5kZXggaW5zdGVhZCBvZiBhIHplcm8tYmFzZWQgaW5kZXgKICAgKi8KICBmdW5jdGlvbiBmb3JFYWNoVHJhbnNmb3JtKGFyZ3MsIG1hdGgsIHNjb3BlKSB7CiAgICB2YXIgeCwgY2FsbGJhY2s7CgogICAgaWYgKGFyZ3NbMF0pIHsKICAgICAgeCA9IGFyZ3NbMF0uY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTsKICAgIH0KCiAgICBpZiAoYXJnc1sxXSkgewogICAgICBpZiAoT2JqZWN0KGlzWyJKIiAvKiBpc1N5bWJvbE5vZGUgKi9dKShhcmdzWzFdKSB8fCBPYmplY3QoaXNbInEiIC8qIGlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSAqL10pKGFyZ3NbMV0pKSB7CiAgICAgICAgLy8gYSBmdW5jdGlvbiBwb2ludGVyLCBsaWtlIGZvckVhY2goWzMsIC0yLCA1XSwgbXlUZXN0RnVuY3Rpb24pCiAgICAgICAgY2FsbGJhY2sgPSBhcmdzWzFdLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gYW4gZXhwcmVzc2lvbiBsaWtlIGZvckVhY2goWzMsIC0yLCA1XSwgeCA+IDAgPyBjYWxsYmFjazEoeCkgOiBjYWxsYmFjazIoeCkgKQogICAgICAgIGNhbGxiYWNrID0gY29tcGlsZUlubGluZUV4cHJlc3Npb24oYXJnc1sxXSwgbWF0aCwgc2NvcGUpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIF9mb3JFYWNoKHgsIGNhbGxiYWNrKTsKICB9CgogIGZvckVhY2hUcmFuc2Zvcm0ucmF3QXJncyA9IHRydWU7IC8vIG9uZS1iYXNlZCB2ZXJzaW9uIG9mIGZvckVhY2gKCiAgdmFyIF9mb3JFYWNoID0gdHlwZWQoJ2ZvckVhY2gnLCB7CiAgICAnQXJyYXkgfCBNYXRyaXgsIGZ1bmN0aW9uJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhGdW5jdGlvbihhcnJheSwgY2FsbGJhY2spIHsKICAgICAgLy8gZmlndXJlIG91dCB3aGF0IG51bWJlciBvZiBhcmd1bWVudHMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGV4cGVjdHMKICAgICAgdmFyIGFyZ3MgPSBtYXhBcmd1bWVudENvdW50KGNhbGxiYWNrKTsKCiAgICAgIHZhciByZWN1cnNlID0gZnVuY3Rpb24gcmVjdXJzZSh2YWx1ZSwgaW5kZXgpIHsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgICAgIE9iamVjdCh1dGlsc19hcnJheVsiZiIgLyogZm9yRWFjaCAqL10pKHZhbHVlLCBmdW5jdGlvbiAoY2hpbGQsIGkpIHsKICAgICAgICAgICAgLy8gd2UgY3JlYXRlIGEgY29weSBvZiB0aGUgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCB0aGUgbmV3IGluZGV4IHZhbHVlCiAgICAgICAgICAgIHJlY3Vyc2UoY2hpbGQsIGluZGV4LmNvbmNhdChpICsgMSkpOyAvLyBvbmUgYmFzZWQgaW5kZXgsIGhlbmNlIGkrMQogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIGludm9rZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3VtZW50cwogICAgICAgICAgaWYgKGFyZ3MgPT09IDEpIHsKICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUpOwogICAgICAgICAgfSBlbHNlIGlmIChhcmdzID09PSAyKSB7CiAgICAgICAgICAgIGNhbGxiYWNrKHZhbHVlLCBpbmRleCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyAzIG9yIC0xCiAgICAgICAgICAgIGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgYXJyYXkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKCiAgICAgIHJlY3Vyc2UoYXJyYXkudmFsdWVPZigpLCBbXSk7IC8vIHBhc3MgQXJyYXkKICAgIH0KICB9KTsKCiAgcmV0dXJuIGZvckVhY2hUcmFuc2Zvcm07Cn0sIHsKICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlCn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL3RyYW5zZm9ybS9pbmRleC50cmFuc2Zvcm0uanMKCgp2YXIgaW5kZXhfdHJhbnNmb3JtX25hbWUgPSAnaW5kZXgnOwp2YXIgaW5kZXhfdHJhbnNmb3JtX2RlcGVuZGVuY2llcyA9IFsnSW5kZXgnXTsKdmFyIGNyZWF0ZUluZGV4VHJhbnNmb3JtID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoaW5kZXhfdHJhbnNmb3JtX25hbWUsIGluZGV4X3RyYW5zZm9ybV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIEluZGV4ID0gX3JlZi5JbmRleDsKCiAgLyoqCiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguaW5kZXgKICAgKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi4KICAgKgogICAqIFRoaXMgdHJhbnNmb3JtIGNyZWF0ZXMgYSBvbmUtYmFzZWQgaW5kZXggaW5zdGVhZCBvZiBhIHplcm8tYmFzZWQgaW5kZXgKICAgKi8KICByZXR1cm4gZnVuY3Rpb24gaW5kZXhUcmFuc2Zvcm0oKSB7CiAgICB2YXIgYXJncyA9IFtdOwoKICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbaV07IC8vIGNoYW5nZSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkLCBhbmQgY29udmVydCBCaWdOdW1iZXIgdG8gbnVtYmVyCgogICAgICBpZiAoT2JqZWN0KGlzWyJEIiAvKiBpc1JhbmdlICovXSkoYXJnKSkgewogICAgICAgIGFyZy5zdGFydC0tOwogICAgICAgIGFyZy5lbmQgLT0gYXJnLnN0ZXAgPiAwID8gMCA6IDI7CiAgICAgIH0gZWxzZSBpZiAoYXJnICYmIGFyZy5pc1NldCA9PT0gdHJ1ZSkgewogICAgICAgIGFyZyA9IGFyZy5tYXAoZnVuY3Rpb24gKHYpIHsKICAgICAgICAgIHJldHVybiB2IC0gMTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmIChPYmplY3QoaXNbImIiIC8qIGlzQXJyYXkgKi9dKShhcmcpIHx8IE9iamVjdChpc1sidiIgLyogaXNNYXRyaXggKi9dKShhcmcpKSB7CiAgICAgICAgYXJnID0gYXJnLm1hcChmdW5jdGlvbiAodikgewogICAgICAgICAgcmV0dXJuIHYgLSAxOwogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKE9iamVjdChpc1sieSIgLyogaXNOdW1iZXIgKi9dKShhcmcpKSB7CiAgICAgICAgYXJnLS07CiAgICAgIH0gZWxzZSBpZiAoT2JqZWN0KGlzWyJlIiAvKiBpc0JpZ051bWJlciAqL10pKGFyZykpIHsKICAgICAgICBhcmcgPSBhcmcudG9OdW1iZXIoKSAtIDE7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHsvLyBsZWF2ZSBhcyBpcwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0RpbWVuc2lvbiBtdXN0IGJlIGFuIEFycmF5LCBNYXRyaXgsIG51bWJlciwgc3RyaW5nLCBvciBSYW5nZScpOwogICAgICB9CgogICAgICBhcmdzW2ldID0gYXJnOwogICAgfQoKICAgIHZhciByZXMgPSBuZXcgSW5kZXgoKTsKICAgIEluZGV4LmFwcGx5KHJlcywgYXJncyk7CiAgICByZXR1cm4gcmVzOwogIH07Cn0sIHsKICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlCn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL3RyYW5zZm9ybS9tYXAudHJhbnNmb3JtLmpzCgoKCgoKdmFyIG1hcF90cmFuc2Zvcm1fbmFtZSA9ICdtYXAnOwp2YXIgbWFwX3RyYW5zZm9ybV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107CnZhciBjcmVhdGVNYXBUcmFuc2Zvcm0gPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShtYXBfdHJhbnNmb3JtX25hbWUsIG1hcF90cmFuc2Zvcm1fZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7CgogIC8qKgogICAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLm1hcAogICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLgogICAqCiAgICogVGhpcyB0cmFuc2Zvcm0gY3JlYXRlcyBhIG9uZS1iYXNlZCBpbmRleCBpbnN0ZWFkIG9mIGEgemVyby1iYXNlZCBpbmRleAogICAqLwogIGZ1bmN0aW9uIG1hcFRyYW5zZm9ybShhcmdzLCBtYXRoLCBzY29wZSkgewogICAgdmFyIHgsIGNhbGxiYWNrOwoKICAgIGlmIChhcmdzWzBdKSB7CiAgICAgIHggPSBhcmdzWzBdLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7CiAgICB9CgogICAgaWYgKGFyZ3NbMV0pIHsKICAgICAgaWYgKE9iamVjdChpc1siSiIgLyogaXNTeW1ib2xOb2RlICovXSkoYXJnc1sxXSkgfHwgT2JqZWN0KGlzWyJxIiAvKiBpc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUgKi9dKShhcmdzWzFdKSkgewogICAgICAgIC8vIGEgZnVuY3Rpb24gcG9pbnRlciwgbGlrZSBmaWx0ZXIoWzMsIC0yLCA1XSwgbXlUZXN0RnVuY3Rpb24pCiAgICAgICAgY2FsbGJhY2sgPSBhcmdzWzFdLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gYW4gZXhwcmVzc2lvbiBsaWtlIGZpbHRlcihbMywgLTIsIDVdLCB4ID4gMCkKICAgICAgICBjYWxsYmFjayA9IGNvbXBpbGVJbmxpbmVFeHByZXNzaW9uKGFyZ3NbMV0sIG1hdGgsIHNjb3BlKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBtYXAoeCwgY2FsbGJhY2spOwogIH0KCiAgbWFwVHJhbnNmb3JtLnJhd0FyZ3MgPSB0cnVlOyAvLyBvbmUtYmFzZWQgdmVyc2lvbiBvZiBtYXAgZnVuY3Rpb24KCiAgdmFyIG1hcCA9IHR5cGVkKCdtYXAnLCB7CiAgICAnQXJyYXksIGZ1bmN0aW9uJzogZnVuY3Rpb24gQXJyYXlGdW5jdGlvbih4LCBjYWxsYmFjaykgewogICAgICByZXR1cm4gbWFwX3RyYW5zZm9ybV9tYXAoeCwgY2FsbGJhY2ssIHgpOwogICAgfSwKICAgICdNYXRyaXgsIGZ1bmN0aW9uJzogZnVuY3Rpb24gTWF0cml4RnVuY3Rpb24oeCwgY2FsbGJhY2spIHsKICAgICAgcmV0dXJuIHguY3JlYXRlKG1hcF90cmFuc2Zvcm1fbWFwKHgudmFsdWVPZigpLCBjYWxsYmFjaywgeCkpOwogICAgfQogIH0pOwogIHJldHVybiBtYXBUcmFuc2Zvcm07Cn0sIHsKICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlCn0pOwovKioKICogTWFwIGZvciBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5LiBPbmUtYmFzZWQgaW5kZXhlcwogKiBAcGFyYW0ge0FycmF5fSBhcnJheQogKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjawogKiBAcGFyYW0ge0FycmF5fSBvcmlnCiAqIEByZXR1cm4ge0FycmF5fQogKiBAcHJpdmF0ZQogKi8KCmZ1bmN0aW9uIG1hcF90cmFuc2Zvcm1fbWFwKGFycmF5LCBjYWxsYmFjaywgb3JpZykgewogIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzCiAgdmFyIGFyZ3NDb3VudCA9IG1heEFyZ3VtZW50Q291bnQoY2FsbGJhY2spOwoKICBmdW5jdGlvbiByZWN1cnNlKHZhbHVlLCBpbmRleCkgewogICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7CiAgICAgIHJldHVybiBPYmplY3QodXRpbHNfYXJyYXlbIm0iIC8qIG1hcCAqL10pKHZhbHVlLCBmdW5jdGlvbiAoY2hpbGQsIGkpIHsKICAgICAgICAvLyB3ZSBjcmVhdGUgYSBjb3B5IG9mIHRoZSBpbmRleCBhcnJheSBhbmQgYXBwZW5kIHRoZSBuZXcgaW5kZXggdmFsdWUKICAgICAgICByZXR1cm4gcmVjdXJzZShjaGlsZCwgaW5kZXguY29uY2F0KGkgKyAxKSk7IC8vIG9uZSBiYXNlZCBpbmRleCwgaGVuY2UgaSArIDEKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICAvLyBpbnZva2UgdGhlICh0eXBlZCkgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3VtZW50cwogICAgICBpZiAoYXJnc0NvdW50ID09PSAxKSB7CiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlKTsKICAgICAgfSBlbHNlIGlmIChhcmdzQ291bnQgPT09IDIpIHsKICAgICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIGluZGV4KTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyAzIG9yIC0xCiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgb3JpZyk7CiAgICAgIH0KICAgIH0KICB9CgogIHJldHVybiByZWN1cnNlKGFycmF5LCBbXSk7Cn0KLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi90cmFuc2Zvcm0vbWF4LnRyYW5zZm9ybS5qcwoKCgoKdmFyIG1heF90cmFuc2Zvcm1fbmFtZSA9ICdtYXgnOwp2YXIgbWF4X3RyYW5zZm9ybV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2xhcmdlciddOwp2YXIgY3JlYXRlTWF4VHJhbnNmb3JtID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkobWF4X3RyYW5zZm9ybV9uYW1lLCBtYXhfdHJhbnNmb3JtX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBsYXJnZXIgPSBfcmVmLmxhcmdlcjsKICB2YXIgbWF4ID0gY3JlYXRlTWF4KHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIGxhcmdlcjogbGFyZ2VyCiAgfSk7CiAgLyoqCiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGgubWF4CiAgICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uCiAgICoKICAgKiBUaGlzIHRyYW5zZm9ybSBjaGFuZ2VkIHRoZSBsYXN0IGBkaW1gIHBhcmFtZXRlciBvZiBmdW5jdGlvbiBtYXgKICAgKiBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkCiAgICovCgogIHJldHVybiB0eXBlZCgnbWF4JywgewogICAgJy4uLmFueSc6IGZ1bmN0aW9uIGFueShhcmdzKSB7CiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkCiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMiAmJiBPYmplY3QoaXNbImkiIC8qIGlzQ29sbGVjdGlvbiAqL10pKGFyZ3NbMF0pKSB7CiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07CgogICAgICAgIGlmIChPYmplY3QoaXNbInkiIC8qIGlzTnVtYmVyICovXSkoZGltKSkgewogICAgICAgICAgYXJnc1sxXSA9IGRpbSAtIDE7CiAgICAgICAgfSBlbHNlIGlmIChPYmplY3QoaXNbImUiIC8qIGlzQmlnTnVtYmVyICovXSkoZGltKSkgewogICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIG1heC5hcHBseShudWxsLCBhcmdzKTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgdGhyb3cgZXJyb3JUcmFuc2Zvcm0oZXJyKTsKICAgICAgfQogICAgfQogIH0pOwp9LCB7CiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi90cmFuc2Zvcm0vbWVhbi50cmFuc2Zvcm0uanMKCgoKCnZhciBtZWFuX3RyYW5zZm9ybV9uYW1lID0gJ21lYW4nOwp2YXIgbWVhbl90cmFuc2Zvcm1fZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGQnLCAnZGl2aWRlJ107CnZhciBjcmVhdGVNZWFuVHJhbnNmb3JtID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkobWVhbl90cmFuc2Zvcm1fbmFtZSwgbWVhbl90cmFuc2Zvcm1fZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGFkZCA9IF9yZWYuYWRkLAogICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZTsKICB2YXIgbWVhbiA9IGNyZWF0ZU1lYW4oewogICAgdHlwZWQ6IHR5cGVkLAogICAgYWRkOiBhZGQsCiAgICBkaXZpZGU6IGRpdmlkZQogIH0pOwogIC8qKgogICAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLm1lYW4KICAgKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi4KICAgKgogICAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIG1lYW4KICAgKiBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkCiAgICovCgogIHJldHVybiB0eXBlZCgnbWVhbicsIHsKICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykgewogICAgICAvLyBjaGFuZ2UgbGFzdCBhcmd1bWVudCBkaW0gZnJvbSBvbmUtYmFzZWQgdG8gemVyby1iYXNlZAogICAgICBpZiAoYXJncy5sZW5ndGggPT09IDIgJiYgT2JqZWN0KGlzWyJpIiAvKiBpc0NvbGxlY3Rpb24gKi9dKShhcmdzWzBdKSkgewogICAgICAgIHZhciBkaW0gPSBhcmdzWzFdOwoKICAgICAgICBpZiAoT2JqZWN0KGlzWyJ5IiAvKiBpc051bWJlciAqL10pKGRpbSkpIHsKICAgICAgICAgIGFyZ3NbMV0gPSBkaW0gLSAxOwogICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0KGlzWyJlIiAvKiBpc0JpZ051bWJlciAqL10pKGRpbSkpIHsKICAgICAgICAgIGFyZ3NbMV0gPSBkaW0ubWludXMoMSk7CiAgICAgICAgfQogICAgICB9CgogICAgICB0cnkgewogICAgICAgIHJldHVybiBtZWFuLmFwcGx5KG51bGwsIGFyZ3MpOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICB0aHJvdyBlcnJvclRyYW5zZm9ybShlcnIpOwogICAgICB9CiAgICB9CiAgfSk7Cn0sIHsKICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlCn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL3RyYW5zZm9ybS9taW4udHJhbnNmb3JtLmpzCgoKCgp2YXIgbWluX3RyYW5zZm9ybV9uYW1lID0gJ21pbic7CnZhciBtaW5fdHJhbnNmb3JtX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc21hbGxlciddOwp2YXIgY3JlYXRlTWluVHJhbnNmb3JtID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkobWluX3RyYW5zZm9ybV9uYW1lLCBtaW5fdHJhbnNmb3JtX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBzbWFsbGVyID0gX3JlZi5zbWFsbGVyOwogIHZhciBtaW4gPSBjcmVhdGVNaW4oewogICAgdHlwZWQ6IHR5cGVkLAogICAgc21hbGxlcjogc21hbGxlcgogIH0pOwogIC8qKgogICAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLm1pbgogICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLgogICAqCiAgICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgbGFzdCBgZGltYCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gbWluCiAgICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZAogICAqLwoKICByZXR1cm4gdHlwZWQoJ21pbicsIHsKICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykgewogICAgICAvLyBjaGFuZ2UgbGFzdCBhcmd1bWVudCBkaW0gZnJvbSBvbmUtYmFzZWQgdG8gemVyby1iYXNlZAogICAgICBpZiAoYXJncy5sZW5ndGggPT09IDIgJiYgT2JqZWN0KGlzWyJpIiAvKiBpc0NvbGxlY3Rpb24gKi9dKShhcmdzWzBdKSkgewogICAgICAgIHZhciBkaW0gPSBhcmdzWzFdOwoKICAgICAgICBpZiAoT2JqZWN0KGlzWyJ5IiAvKiBpc051bWJlciAqL10pKGRpbSkpIHsKICAgICAgICAgIGFyZ3NbMV0gPSBkaW0gLSAxOwogICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0KGlzWyJlIiAvKiBpc0JpZ051bWJlciAqL10pKGRpbSkpIHsKICAgICAgICAgIGFyZ3NbMV0gPSBkaW0ubWludXMoMSk7CiAgICAgICAgfQogICAgICB9CgogICAgICB0cnkgewogICAgICAgIHJldHVybiBtaW4uYXBwbHkobnVsbCwgYXJncyk7CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIHRocm93IGVycm9yVHJhbnNmb3JtKGVycik7CiAgICAgIH0KICAgIH0KICB9KTsKfSwgewogIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vdHJhbnNmb3JtL3JhbmdlLnRyYW5zZm9ybS5qcwoKCnZhciByYW5nZV90cmFuc2Zvcm1fbmFtZSA9ICdyYW5nZSc7CnZhciByYW5nZV90cmFuc2Zvcm1fZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnP21hdHJpeCcsICc/YmlnbnVtYmVyJywgJ3NtYWxsZXInLCAnc21hbGxlckVxJywgJ2xhcmdlcicsICdsYXJnZXJFcSddOwp2YXIgY3JlYXRlUmFuZ2VUcmFuc2Zvcm0gPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShyYW5nZV90cmFuc2Zvcm1fbmFtZSwgcmFuZ2VfdHJhbnNmb3JtX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBjb25maWcgPSBfcmVmLmNvbmZpZywKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIGJpZ251bWJlciA9IF9yZWYuYmlnbnVtYmVyLAogICAgICBzbWFsbGVyID0gX3JlZi5zbWFsbGVyLAogICAgICBzbWFsbGVyRXEgPSBfcmVmLnNtYWxsZXJFcSwKICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXIsCiAgICAgIGxhcmdlckVxID0gX3JlZi5sYXJnZXJFcTsKICB2YXIgcmFuZ2UgPSByYW5nZV9jcmVhdGVSYW5nZSh7CiAgICB0eXBlZDogdHlwZWQsCiAgICBjb25maWc6IGNvbmZpZywKICAgIG1hdHJpeDogbWF0cml4LAogICAgYmlnbnVtYmVyOiBiaWdudW1iZXIsCiAgICBzbWFsbGVyOiBzbWFsbGVyLAogICAgc21hbGxlckVxOiBzbWFsbGVyRXEsCiAgICBsYXJnZXI6IGxhcmdlciwKICAgIGxhcmdlckVxOiBsYXJnZXJFcQogIH0pOwogIC8qKgogICAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLnJhbmdlCiAgICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uCiAgICoKICAgKiBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgcmFuZ2Ugd2hpY2ggaW5jbHVkZXMgdGhlIGVuZCB2YWx1ZQogICAqLwoKICByZXR1cm4gdHlwZWQoJ3JhbmdlJywgewogICAgJy4uLmFueSc6IGZ1bmN0aW9uIGFueShhcmdzKSB7CiAgICAgIHZhciBsYXN0SW5kZXggPSBhcmdzLmxlbmd0aCAtIDE7CiAgICAgIHZhciBsYXN0ID0gYXJnc1tsYXN0SW5kZXhdOwoKICAgICAgaWYgKHR5cGVvZiBsYXN0ICE9PSAnYm9vbGVhbicpIHsKICAgICAgICAvLyBhcHBlbmQgYSBwYXJhbWV0ZXIgaW5jbHVkZUVuZD10cnVlCiAgICAgICAgYXJncy5wdXNoKHRydWUpOwogICAgICB9CgogICAgICByZXR1cm4gcmFuZ2UuYXBwbHkobnVsbCwgYXJncyk7CiAgICB9CiAgfSk7Cn0sIHsKICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlCn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL3RyYW5zZm9ybS9yb3cudHJhbnNmb3JtLmpzCgoKCgp2YXIgcm93X3RyYW5zZm9ybV9uYW1lID0gJ3Jvdyc7CnZhciByb3dfdHJhbnNmb3JtX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnSW5kZXgnLCAnbWF0cml4JywgJ3JhbmdlJ107Ci8qKgogKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0cml4LmNvbHVtbgogKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi4KICoKICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgbGFzdCBgaW5kZXhgIHBhcmFtZXRlciBvZiBmdW5jdGlvbiBjb2x1bW4KICogZnJvbSB6ZXJvLWJhc2VkIHRvIG9uZS1iYXNlZAogKi8KCnZhciBjcmVhdGVSb3dUcmFuc2Zvcm0gPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShyb3dfdHJhbnNmb3JtX25hbWUsIHJvd190cmFuc2Zvcm1fZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCwKICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsCiAgICAgIHJhbmdlID0gX3JlZi5yYW5nZTsKICB2YXIgcm93ID0gY3JlYXRlUm93KHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIEluZGV4OiBJbmRleCwKICAgIG1hdHJpeDogbWF0cml4LAogICAgcmFuZ2U6IHJhbmdlCiAgfSk7IC8vIEBzZWU6IGNvbW1lbnQgb2Ygcm93IGl0c2VsZgoKICByZXR1cm4gdHlwZWQoJ3JvdycsIHsKICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykgewogICAgICAvLyBjaGFuZ2UgbGFzdCBhcmd1bWVudCBmcm9tIHplcm8tYmFzZWQgdG8gb25lLWJhc2VkCiAgICAgIHZhciBsYXN0SW5kZXggPSBhcmdzLmxlbmd0aCAtIDE7CiAgICAgIHZhciBsYXN0ID0gYXJnc1tsYXN0SW5kZXhdOwoKICAgICAgaWYgKE9iamVjdChpc1sieSIgLyogaXNOdW1iZXIgKi9dKShsYXN0KSkgewogICAgICAgIGFyZ3NbbGFzdEluZGV4XSA9IGxhc3QgLSAxOwogICAgICB9CgogICAgICB0cnkgewogICAgICAgIHJldHVybiByb3cuYXBwbHkobnVsbCwgYXJncyk7CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIHRocm93IGVycm9yVHJhbnNmb3JtKGVycik7CiAgICAgIH0KICAgIH0KICB9KTsKfSwgewogIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N1YnNldC50cmFuc2Zvcm0uanMKCgoKdmFyIHN1YnNldF90cmFuc2Zvcm1fbmFtZSA9ICdzdWJzZXQnOwp2YXIgc3Vic2V0X3RyYW5zZm9ybV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddOwp2YXIgY3JlYXRlU3Vic2V0VHJhbnNmb3JtID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoc3Vic2V0X3RyYW5zZm9ybV9uYW1lLCBzdWJzZXRfdHJhbnNmb3JtX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDsKICB2YXIgc3Vic2V0ID0gY3JlYXRlU3Vic2V0KHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIG1hdHJpeDogbWF0cml4CiAgfSk7CiAgLyoqCiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguc3Vic2V0CiAgICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uCiAgICoKICAgKiBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgcmFuZ2Ugd2hpY2ggaW5jbHVkZXMgdGhlIGVuZCB2YWx1ZQogICAqLwoKICByZXR1cm4gdHlwZWQoJ3N1YnNldCcsIHsKICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykgewogICAgICB0cnkgewogICAgICAgIHJldHVybiBzdWJzZXQuYXBwbHkobnVsbCwgYXJncyk7CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIHRocm93IGVycm9yVHJhbnNmb3JtKGVycik7CiAgICAgIH0KICAgIH0KICB9KTsKfSwgewogIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWUKfSk7Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2V4cHJlc3Npb24vdHJhbnNmb3JtL2NvbmNhdC50cmFuc2Zvcm0uanMKCgoKCnZhciBjb25jYXRfdHJhbnNmb3JtX25hbWUgPSAnY29uY2F0JzsKdmFyIGNvbmNhdF90cmFuc2Zvcm1fZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnaXNJbnRlZ2VyJ107CnZhciBjcmVhdGVDb25jYXRUcmFuc2Zvcm0gPQovKiAjX19QVVJFX18gKi8KT2JqZWN0KGZhY3RvcnlbImEiIC8qIGZhY3RvcnkgKi9dKShjb25jYXRfdHJhbnNmb3JtX25hbWUsIGNvbmNhdF90cmFuc2Zvcm1fZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LAogICAgICBpc0ludGVnZXIgPSBfcmVmLmlzSW50ZWdlcjsKICB2YXIgY29uY2F0ID0gY3JlYXRlQ29uY2F0KHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIG1hdHJpeDogbWF0cml4LAogICAgaXNJbnRlZ2VyOiBpc0ludGVnZXIKICB9KTsKICAvKioKICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5yYW5nZQogICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLgogICAqCiAgICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgbGFzdCBgZGltYCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gY29uY2F0CiAgICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZAogICAqLwoKICByZXR1cm4gdHlwZWQoJ2NvbmNhdCcsIHsKICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykgewogICAgICAvLyBjaGFuZ2UgbGFzdCBhcmd1bWVudCBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkCiAgICAgIHZhciBsYXN0SW5kZXggPSBhcmdzLmxlbmd0aCAtIDE7CiAgICAgIHZhciBsYXN0ID0gYXJnc1tsYXN0SW5kZXhdOwoKICAgICAgaWYgKE9iamVjdChpc1sieSIgLyogaXNOdW1iZXIgKi9dKShsYXN0KSkgewogICAgICAgIGFyZ3NbbGFzdEluZGV4XSA9IGxhc3QgLSAxOwogICAgICB9IGVsc2UgaWYgKE9iamVjdChpc1siZSIgLyogaXNCaWdOdW1iZXIgKi9dKShsYXN0KSkgewogICAgICAgIGFyZ3NbbGFzdEluZGV4XSA9IGxhc3QubWludXMoMSk7CiAgICAgIH0KCiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIGNvbmNhdC5hcHBseShudWxsLCBhcmdzKTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgdGhyb3cgZXJyb3JUcmFuc2Zvcm0oZXJyKTsKICAgICAgfQogICAgfQogIH0pOwp9LCB7CiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZQp9KTsKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZXhwcmVzc2lvbi90cmFuc2Zvcm0vc3RkLnRyYW5zZm9ybS5qcwoKCgoKdmFyIHN0ZF90cmFuc2Zvcm1fbmFtZSA9ICdzdGQnOwp2YXIgc3RkX3RyYW5zZm9ybV9kZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NxcnQnLCAndmFyaWFuY2UnXTsKLyoqCiAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLnN0ZAogKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi4KICoKICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIHN0ZAogKiBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkCiAqLwoKdmFyIGNyZWF0ZVN0ZFRyYW5zZm9ybSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHN0ZF90cmFuc2Zvcm1fbmFtZSwgc3RkX3RyYW5zZm9ybV9kZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7CiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCwKICAgICAgc3FydCA9IF9yZWYuc3FydCwKICAgICAgdmFyaWFuY2UgPSBfcmVmLnZhcmlhbmNlOwogIHZhciBzdGQgPSBjcmVhdGVTdGQoewogICAgdHlwZWQ6IHR5cGVkLAogICAgc3FydDogc3FydCwKICAgIHZhcmlhbmNlOiB2YXJpYW5jZQogIH0pOwogIHJldHVybiB0eXBlZCgnc3RkJywgewogICAgJy4uLmFueSc6IGZ1bmN0aW9uIGFueShhcmdzKSB7CiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkCiAgICAgIGlmIChhcmdzLmxlbmd0aCA+PSAyICYmIE9iamVjdChpc1siaSIgLyogaXNDb2xsZWN0aW9uICovXSkoYXJnc1swXSkpIHsKICAgICAgICB2YXIgZGltID0gYXJnc1sxXTsKCiAgICAgICAgaWYgKE9iamVjdChpc1sieSIgLyogaXNOdW1iZXIgKi9dKShkaW0pKSB7CiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTsKICAgICAgICB9IGVsc2UgaWYgKE9iamVjdChpc1siZSIgLyogaXNCaWdOdW1iZXIgKi9dKShkaW0pKSB7CiAgICAgICAgICBhcmdzWzFdID0gZGltLm1pbnVzKDEpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gc3RkLmFwcGx5KG51bGwsIGFyZ3MpOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICB0aHJvdyBlcnJvclRyYW5zZm9ybShlcnIpOwogICAgICB9CiAgICB9CiAgfSk7Cn0sIHsKICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlCn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL3RyYW5zZm9ybS9zdW0udHJhbnNmb3JtLmpzCgoKCgovKioKICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguc3VtCiAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLgogKgogKiBUaGlzIHRyYW5zZm9ybSBjaGFuZ2VkIHRoZSBsYXN0IGBkaW1gIHBhcmFtZXRlciBvZiBmdW5jdGlvbiBtZWFuCiAqIGZyb20gb25lLWJhc2VkIHRvIHplcm8gYmFzZWQKICovCgp2YXIgc3VtX3RyYW5zZm9ybV9uYW1lID0gJ3N1bSc7CnZhciBzdW1fdHJhbnNmb3JtX2RlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ2FkZCcsICc/YmlnbnVtYmVyJywgJz9mcmFjdGlvbiddOwp2YXIgY3JlYXRlU3VtVHJhbnNmb3JtID0KLyogI19fUFVSRV9fICovCk9iamVjdChmYWN0b3J5WyJhIiAvKiBmYWN0b3J5ICovXSkoc3VtX3RyYW5zZm9ybV9uYW1lLCBzdW1fdHJhbnNmb3JtX2RlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHsKICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLAogICAgICBjb25maWcgPSBfcmVmLmNvbmZpZywKICAgICAgYWRkID0gX3JlZi5hZGQsCiAgICAgIGJpZ251bWJlciA9IF9yZWYuYmlnbnVtYmVyLAogICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb247CiAgdmFyIHN1bSA9IGNyZWF0ZVN1bSh7CiAgICB0eXBlZDogdHlwZWQsCiAgICBjb25maWc6IGNvbmZpZywKICAgIGFkZDogYWRkLAogICAgYmlnbnVtYmVyOiBiaWdudW1iZXIsCiAgICBmcmFjdGlvbjogZnJhY3Rpb24KICB9KTsKICByZXR1cm4gdHlwZWQoc3VtX3RyYW5zZm9ybV9uYW1lLCB7CiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHsKICAgICAgLy8gY2hhbmdlIGxhc3QgYXJndW1lbnQgZGltIGZyb20gb25lLWJhc2VkIHRvIHplcm8tYmFzZWQKICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAyICYmIE9iamVjdChpc1siaSIgLyogaXNDb2xsZWN0aW9uICovXSkoYXJnc1swXSkpIHsKICAgICAgICB2YXIgZGltID0gYXJnc1sxXTsKCiAgICAgICAgaWYgKE9iamVjdChpc1sieSIgLyogaXNOdW1iZXIgKi9dKShkaW0pKSB7CiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTsKICAgICAgICB9IGVsc2UgaWYgKE9iamVjdChpc1siZSIgLyogaXNCaWdOdW1iZXIgKi9dKShkaW0pKSB7CiAgICAgICAgICBhcmdzWzFdID0gZGltLm1pbnVzKDEpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gc3VtLmFwcGx5KG51bGwsIGFyZ3MpOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICB0aHJvdyBlcnJvclRyYW5zZm9ybShlcnIpOwogICAgICB9CiAgICB9CiAgfSk7Cn0sIHsKICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlCn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9leHByZXNzaW9uL3RyYW5zZm9ybS92YXJpYW5jZS50cmFuc2Zvcm0uanMKCgoKCnZhciB2YXJpYW5jZV90cmFuc2Zvcm1fbmFtZSA9ICd2YXJpYW5jZSc7CnZhciB2YXJpYW5jZV90cmFuc2Zvcm1fZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGQnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknLCAnZGl2aWRlJywgJ2FwcGx5JywgJ2lzTmFOJ107Ci8qKgogKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC52YXIKICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uCiAqCiAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGBkaW1gIHBhcmFtZXRlciBvZiBmdW5jdGlvbiB2YXIKICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZAogKi8KCnZhciBjcmVhdGVWYXJpYW5jZVRyYW5zZm9ybSA9Ci8qICNfX1BVUkVfXyAqLwpPYmplY3QoZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL10pKHZhcmlhbmNlX3RyYW5zZm9ybV9uYW1lLCB2YXJpYW5jZV90cmFuc2Zvcm1fZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikgewogIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsCiAgICAgIGFkZCA9IF9yZWYuYWRkLAogICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsCiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSwKICAgICAgZGl2aWRlID0gX3JlZi5kaXZpZGUsCiAgICAgIGFwcGx5ID0gX3JlZi5hcHBseSwKICAgICAgaXNOYU4gPSBfcmVmLmlzTmFOOwogIHZhciB2YXJpYW5jZSA9IGNyZWF0ZVZhcmlhbmNlKHsKICAgIHR5cGVkOiB0eXBlZCwKICAgIGFkZDogYWRkLAogICAgc3VidHJhY3Q6IHN1YnRyYWN0LAogICAgbXVsdGlwbHk6IG11bHRpcGx5LAogICAgZGl2aWRlOiBkaXZpZGUsCiAgICBhcHBseTogYXBwbHksCiAgICBpc05hTjogaXNOYU4KICB9KTsKICByZXR1cm4gdHlwZWQodmFyaWFuY2VfdHJhbnNmb3JtX25hbWUsIHsKICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykgewogICAgICAvLyBjaGFuZ2UgbGFzdCBhcmd1bWVudCBkaW0gZnJvbSBvbmUtYmFzZWQgdG8gemVyby1iYXNlZAogICAgICBpZiAoYXJncy5sZW5ndGggPj0gMiAmJiBPYmplY3QoaXNbImkiIC8qIGlzQ29sbGVjdGlvbiAqL10pKGFyZ3NbMF0pKSB7CiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07CgogICAgICAgIGlmIChPYmplY3QoaXNbInkiIC8qIGlzTnVtYmVyICovXSkoZGltKSkgewogICAgICAgICAgYXJnc1sxXSA9IGRpbSAtIDE7CiAgICAgICAgfSBlbHNlIGlmIChPYmplY3QoaXNbImUiIC8qIGlzQmlnTnVtYmVyICovXSkoZGltKSkgewogICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIHZhcmlhbmNlLmFwcGx5KG51bGwsIGFyZ3MpOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICB0aHJvdyBlcnJvclRyYW5zZm9ybShlcnIpOwogICAgICB9CiAgICB9CiAgfSk7Cn0sIHsKICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlCn0pOwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9mYWN0b3JpZXNBbnkuanMKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVUeXBlZCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlVHlwZWQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHR5cGVkX2NyZWF0ZVR5cGVkOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVSZXN1bHRTZXQgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVJlc3VsdFNldCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlUmVzdWx0U2V0OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVCaWdOdW1iZXJDbGFzcyAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQmlnTnVtYmVyQ2xhc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUJpZ051bWJlckNsYXNzOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDb21wbGV4Q2xhc3MgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUNvbXBsZXhDbGFzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQ29tcGxleENsYXNzOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVGcmFjdGlvbkNsYXNzICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVGcmFjdGlvbkNsYXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVGcmFjdGlvbkNsYXNzOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVSYW5nZUNsYXNzICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVSYW5nZUNsYXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVSYW5nZUNsYXNzOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVNYXRyaXhDbGFzcyAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlTWF0cml4Q2xhc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZU1hdHJpeENsYXNzOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVEZW5zZU1hdHJpeENsYXNzICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVEZW5zZU1hdHJpeENsYXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVEZW5zZU1hdHJpeENsYXNzOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDbG9uZSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQ2xvbmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUNsb25lOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVJc0ludGVnZXIgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUlzSW50ZWdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlSXNJbnRlZ2VyOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVJc05lZ2F0aXZlICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVJc05lZ2F0aXZlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVJc05lZ2F0aXZlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVJc051bWVyaWMgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUlzTnVtZXJpYyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlSXNOdW1lcmljOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVIYXNOdW1lcmljVmFsdWUgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUhhc051bWVyaWNWYWx1ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlSGFzTnVtZXJpY1ZhbHVlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVJc1Bvc2l0aXZlICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVJc1Bvc2l0aXZlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVJc1Bvc2l0aXZlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVJc1plcm8gKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUlzWmVybyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlSXNaZXJvOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVJc05hTiAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlSXNOYU4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUlzTmFOOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVUeXBlT2YgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVR5cGVPZiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlVHlwZU9mOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVEZXByZWNhdGVkVHlwZW9mICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVEZXByZWNhdGVkVHlwZW9mIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVEZXByZWNhdGVkVHlwZW9mOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVFcXVhbFNjYWxhciAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlRXF1YWxTY2FsYXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUVxdWFsU2NhbGFyOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTcGFyc2VNYXRyaXhDbGFzcyAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVNwYXJzZU1hdHJpeENsYXNzOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVOdW1iZXIgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZU51bWJlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlTnVtYmVyOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTdHJpbmcgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVN0cmluZyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlU3RyaW5nOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVCb29sZWFuICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVCb29sZWFuIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVCb29sZWFuOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVCaWdudW1iZXIgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUJpZ251bWJlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQmlnbnVtYmVyOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDb21wbGV4ICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVDb21wbGV4IiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVDb21wbGV4OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVGcmFjdGlvbiAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlRnJhY3Rpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUZyYWN0aW9uOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVNYXRyaXggKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZU1hdHJpeCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlTWF0cml4OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTcGxpdFVuaXQgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVNwbGl0VW5pdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlU3BsaXRVbml0OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVVbmFyeU1pbnVzICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVVbmFyeU1pbnVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVVbmFyeU1pbnVzOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVVbmFyeVBsdXMgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVVuYXJ5UGx1cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlVW5hcnlQbHVzOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBYnMgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUFicyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQWJzOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBcHBseSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQXBwbHkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUFwcGx5OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBZGRTY2FsYXIgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUFkZFNjYWxhciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQWRkU2NhbGFyOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDYnJ0ICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVDYnJ0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVDYnJ0OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDZWlsICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVDZWlsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVDZWlsOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDdWJlICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVDdWJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVDdWJlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVFeHAgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUV4cCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRXhwOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVFeHBtMSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlRXhwbTEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUV4cG0xOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVGaXggKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUZpeCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRml4OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVGbG9vciAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlRmxvb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUZsb29yOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVHY2QgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUdjZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlR2NkOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVMY20gKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUxjbSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlTGNtOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVMb2cxMCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlTG9nMTAiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUxvZzEwOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVMb2cyICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVMb2cyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVMb2cyOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVNb2QgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZU1vZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlTW9kOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVNdWx0aXBseVNjYWxhciAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlTXVsdGlwbHlTY2FsYXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZU11bHRpcGx5U2NhbGFyOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVNdWx0aXBseSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlTXVsdGlwbHkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZU11bHRpcGx5OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVOdGhSb290ICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVOdGhSb290IiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVOdGhSb290OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTaWduICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVTaWduIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVTaWduOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTcXJ0ICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVTcXJ0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVTcXJ0OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTcXVhcmUgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVNxdWFyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlU3F1YXJlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTdWJ0cmFjdCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlU3VidHJhY3QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVN1YnRyYWN0OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVYZ2NkICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVYZ2NkIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVYZ2NkOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVEb3RNdWx0aXBseSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlRG90TXVsdGlwbHkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZURvdE11bHRpcGx5OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVCaXRBbmQgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUJpdEFuZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQml0QW5kOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVCaXROb3QgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUJpdE5vdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQml0Tm90OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVCaXRPciAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQml0T3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUJpdE9yOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVCaXRYb3IgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUJpdFhvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQml0WG9yOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBcmcgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUFyZyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQXJnOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDb25qICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVDb25qIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVDb25qOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVJbSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlSW0iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUltOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVSZSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlUmUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVJlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVOb3QgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZU5vdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlTm90OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVPciAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlT3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZU9yOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVYb3IgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVhvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlWG9yOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDb25jYXQgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUNvbmNhdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQ29uY2F0OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDb2x1bW4gKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUNvbHVtbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQ29sdW1uOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDcm9zcyAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQ3Jvc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUNyb3NzOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVEaWFnICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVEaWFnIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVEaWFnOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVFeWUgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUV5ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRXllOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVGaWx0ZXIgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUZpbHRlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRmlsdGVyOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVGbGF0dGVuICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVGbGF0dGVuIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVGbGF0dGVuOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVGb3JFYWNoICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVGb3JFYWNoIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVGb3JFYWNoOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVHZXRNYXRyaXhEYXRhVHlwZSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlR2V0TWF0cml4RGF0YVR5cGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUdldE1hdHJpeERhdGFUeXBlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVJZGVudGl0eSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlSWRlbnRpdHkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUlkZW50aXR5OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVLcm9uICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVLcm9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVLcm9uOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVNYXAgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZU1hcCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlTWFwOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVPbmVzICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVPbmVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVPbmVzOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVSYW5nZSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlUmFuZ2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJhbmdlX2NyZWF0ZVJhbmdlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVSZXNoYXBlICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVSZXNoYXBlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVSZXNoYXBlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVSZXNpemUgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVJlc2l6ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlUmVzaXplOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVSb3cgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVJvdyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlUm93OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTaXplICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVTaXplIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVTaXplOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTcXVlZXplICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVTcXVlZXplIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVTcXVlZXplOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTdWJzZXQgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVN1YnNldCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlU3Vic2V0OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVUcmFuc3Bvc2UgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVRyYW5zcG9zZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlVHJhbnNwb3NlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDdHJhbnNwb3NlICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVDdHJhbnNwb3NlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVDdHJhbnNwb3NlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVaZXJvcyAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlWmVyb3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVplcm9zOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVFcmYgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUVyZiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRXJmOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVNb2RlICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVNb2RlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVNb2RlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVQcm9kICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVQcm9kIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVQcm9kOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVGb3JtYXQgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUZvcm1hdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRm9ybWF0OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVQcmludCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlUHJpbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVByaW50OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVUbyAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlVG8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVRvOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVJc1ByaW1lICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVJc1ByaW1lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVJc1ByaW1lOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVOdW1lcmljICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVOdW1lcmljIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVOdW1lcmljOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVEaXZpZGVTY2FsYXIgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZURpdmlkZVNjYWxhciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRGl2aWRlU2NhbGFyOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVQb3cgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVBvdyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlUG93OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVSb3VuZCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlUm91bmQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVJvdW5kOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVMb2cgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUxvZyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlTG9nOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVMb2cxcCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlTG9nMXAiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUxvZzFwOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVOdGhSb290cyAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlTnRoUm9vdHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZU50aFJvb3RzOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVEb3RQb3cgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZURvdFBvdyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRG90UG93OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVEb3REaXZpZGUgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZURvdERpdmlkZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRG90RGl2aWRlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVMc29sdmUgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUxzb2x2ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlTHNvbHZlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVVc29sdmUgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVVzb2x2ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlVXNvbHZlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVMZWZ0U2hpZnQgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUxlZnRTaGlmdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlTGVmdFNoaWZ0OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVSaWdodEFyaXRoU2hpZnQgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVJpZ2h0QXJpdGhTaGlmdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlUmlnaHRBcml0aFNoaWZ0OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVSaWdodExvZ1NoaWZ0ICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVSaWdodExvZ1NoaWZ0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVSaWdodExvZ1NoaWZ0OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBbmQgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUFuZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQW5kOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDb21wYXJlICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVDb21wYXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVDb21wYXJlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDb21wYXJlTmF0dXJhbCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQ29tcGFyZU5hdHVyYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUNvbXBhcmVOYXR1cmFsOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDb21wYXJlVGV4dCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQ29tcGFyZVRleHQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUNvbXBhcmVUZXh0OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVFcXVhbCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlRXF1YWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUVxdWFsOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVFcXVhbFRleHQgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUVxdWFsVGV4dCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRXF1YWxUZXh0OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTbWFsbGVyICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVTbWFsbGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVTbWFsbGVyOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTbWFsbGVyRXEgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVNtYWxsZXJFcSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlU21hbGxlckVxOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVMYXJnZXIgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUxhcmdlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlTGFyZ2VyOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVMYXJnZXJFcSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlTGFyZ2VyRXEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUxhcmdlckVxOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVEZWVwRXF1YWwgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZURlZXBFcXVhbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRGVlcEVxdWFsOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVVbmVxdWFsICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVVbmVxdWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVVbmVxdWFsOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVQYXJ0aXRpb25TZWxlY3QgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVBhcnRpdGlvblNlbGVjdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlUGFydGl0aW9uU2VsZWN0OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTb3J0ICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVTb3J0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVTb3J0OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVNYXggKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZU1heCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlTWF4OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVNaW4gKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZU1pbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlTWluOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVJbmRleENsYXNzICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVJbmRleENsYXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVJbmRleENsYXNzOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVGaWJvbmFjY2lIZWFwQ2xhc3MgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRmlib25hY2NpSGVhcENsYXNzOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTcGFDbGFzcyAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlU3BhQ2xhc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVNwYUNsYXNzOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVVbml0Q2xhc3MgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVVuaXRDbGFzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlVW5pdENsYXNzOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVVbml0RnVuY3Rpb24gKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVVuaXRGdW5jdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlVW5pdEZ1bmN0aW9uOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTcGFyc2UgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVNwYXJzZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlU3BhcnNlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDcmVhdGVVbml0ICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVDcmVhdGVVbml0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVDcmVhdGVVbml0OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBY29zICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVBY29zIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVBY29zOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBY29zaCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQWNvc2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUFjb3NoOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBY290ICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVBY290IiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVBY290OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBY290aCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQWNvdGgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUFjb3RoOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBY3NjICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVBY3NjIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVBY3NjOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBY3NjaCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQWNzY2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUFjc2NoOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBc2VjICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVBc2VjIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVBc2VjOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBc2VjaCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQXNlY2giLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUFzZWNoOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBc2luICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVBc2luIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVBc2luOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBc2luaCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQXNpbmgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUFzaW5oOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBdGFuICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVBdGFuIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVBdGFuOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBdGFuMiAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQXRhbjIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUF0YW4yOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBdGFuaCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQXRhbmgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUF0YW5oOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDb3MgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUNvcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQ29zOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDb3NoICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVDb3NoIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVDb3NoOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDb3QgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUNvdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQ290OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDb3RoICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVDb3RoIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVDb3RoOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDc2MgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUNzYyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQ3NjOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDc2NoICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVDc2NoIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVDc2NoOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTZWMgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVNlYyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlU2VjOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTZWNoICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVTZWNoIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVTZWNoOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTaW4gKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVNpbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlU2luOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTaW5oICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVTaW5oIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVTaW5oOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVUYW4gKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVRhbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlVGFuOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVUYW5oICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVUYW5oIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVUYW5oOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTZXRDYXJ0ZXNpYW4gKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVNldENhcnRlc2lhbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlU2V0Q2FydGVzaWFuOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTZXREaWZmZXJlbmNlICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVTZXREaWZmZXJlbmNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVTZXREaWZmZXJlbmNlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTZXREaXN0aW5jdCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlU2V0RGlzdGluY3QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVNldERpc3RpbmN0OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTZXRJbnRlcnNlY3QgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVNldEludGVyc2VjdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlU2V0SW50ZXJzZWN0OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTZXRJc1N1YnNldCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlU2V0SXNTdWJzZXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVNldElzU3Vic2V0OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTZXRNdWx0aXBsaWNpdHkgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVNldE11bHRpcGxpY2l0eSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlU2V0TXVsdGlwbGljaXR5OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTZXRQb3dlcnNldCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlU2V0UG93ZXJzZXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVNldFBvd2Vyc2V0OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTZXRTaXplICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVTZXRTaXplIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVTZXRTaXplOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTZXRTeW1EaWZmZXJlbmNlICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVTZXRTeW1EaWZmZXJlbmNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVTZXRTeW1EaWZmZXJlbmNlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVTZXRVbmlvbiAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlU2V0VW5pb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVNldFVuaW9uOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBZGQgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUFkZCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQWRkOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVIeXBvdCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlSHlwb3QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUh5cG90OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVOb3JtICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVOb3JtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVOb3JtOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVEb3QgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZURvdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRG90OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVUcmFjZSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlVHJhY2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVRyYWNlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVJbmRleCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlSW5kZXgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUluZGV4OyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVOb2RlICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVOb2RlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVOb2RlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBY2Nlc3Nvck5vZGUgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUFjY2Vzc29yTm9kZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQWNjZXNzb3JOb2RlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBcnJheU5vZGUgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUFycmF5Tm9kZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQXJyYXlOb2RlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVBc3NpZ25tZW50Tm9kZSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQXNzaWdubWVudE5vZGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUFzc2lnbm1lbnROb2RlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVCbG9ja05vZGUgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUJsb2NrTm9kZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQmxvY2tOb2RlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDb25kaXRpb25hbE5vZGUgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUNvbmRpdGlvbmFsTm9kZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQ29uZGl0aW9uYWxOb2RlOyB9KTsKLyogY29uY2F0ZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVDb25zdGFudE5vZGUgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUNvbnN0YW50Tm9kZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ29uc3RhbnROb2RlX2NyZWF0ZUNvbnN0YW50Tm9kZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlSW5kZXhOb2RlICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVJbmRleE5vZGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUluZGV4Tm9kZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlT2JqZWN0Tm9kZSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlT2JqZWN0Tm9kZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlT2JqZWN0Tm9kZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlT3BlcmF0b3JOb2RlICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVPcGVyYXRvck5vZGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZU9wZXJhdG9yTm9kZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUGFyZW50aGVzaXNOb2RlICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVQYXJlbnRoZXNpc05vZGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVBhcmVudGhlc2lzTm9kZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUmFuZ2VOb2RlICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVSYW5nZU5vZGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVJhbmdlTm9kZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUmVsYXRpb25hbE5vZGUgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVJlbGF0aW9uYWxOb2RlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVSZWxhdGlvbmFsTm9kZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU3ltYm9sTm9kZSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlU3ltYm9sTm9kZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlU3ltYm9sTm9kZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRnVuY3Rpb25Ob2RlICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVGdW5jdGlvbk5vZGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUZ1bmN0aW9uTm9kZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUGFyc2UgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVBhcnNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVQYXJzZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlQ29tcGlsZSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQ29tcGlsZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQ29tcGlsZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRXZhbHVhdGUgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUV2YWx1YXRlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVFdmFsdWF0ZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRGVwcmVjYXRlZEV2YWwgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZURlcHJlY2F0ZWRFdmFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVEZXByZWNhdGVkRXZhbDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUGFyc2VyQ2xhc3MgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVBhcnNlckNsYXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVQYXJzZXJDbGFzczsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUGFyc2VyICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVQYXJzZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVBhcnNlcjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTHVwICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVMdXAiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUx1cDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUXIgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVFyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVRcjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU2x1ICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVTbHUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVNsdTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTHVzb2x2ZSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlTHVzb2x2ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlTHVzb2x2ZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlSGVscENsYXNzICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVIZWxwQ2xhc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUhlbHBDbGFzczsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlQ2hhaW5DbGFzcyAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQ2hhaW5DbGFzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQ2hhaW5DbGFzczsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlSGVscCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlSGVscCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlSGVscDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlQ2hhaW4gKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUNoYWluIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVDaGFpbjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRGV0ICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVEZXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZURldDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlSW52ICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVJbnYiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUludjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRWlncyAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlRWlncyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRWlnczsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRXhwbSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlRXhwbSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRXhwbTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU3FydG0gKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVNxcnRtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVTcXJ0bTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRGl2aWRlICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVEaXZpZGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZURpdmlkZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRGlzdGFuY2UgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZURpc3RhbmNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVEaXN0YW5jZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlSW50ZXJzZWN0ICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVJbnRlcnNlY3QiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUludGVyc2VjdDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU3VtICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVTdW0iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVN1bTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTWVhbiAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlTWVhbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlTWVhbjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTWVkaWFuICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVNZWRpYW4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZU1lZGlhbjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTWFkICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVNYWQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZU1hZDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlVmFyaWFuY2UgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVZhcmlhbmNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVWYXJpYW5jZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRGVwcmVjYXRlZFZhciAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlRGVwcmVjYXRlZFZhciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRGVwcmVjYXRlZFZhcjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUXVhbnRpbGVTZXEgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVF1YW50aWxlU2VxIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVRdWFudGlsZVNlcTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU3RkICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVTdGQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVN0ZDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlQ29tYmluYXRpb25zICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVDb21iaW5hdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUNvbWJpbmF0aW9uczsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlR2FtbWEgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUdhbW1hIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVHYW1tYTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRmFjdG9yaWFsICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVGYWN0b3JpYWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUZhY3RvcmlhbDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlS2xkaXZlcmdlbmNlICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVLbGRpdmVyZ2VuY2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUtsZGl2ZXJnZW5jZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTXVsdGlub21pYWwgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZU11bHRpbm9taWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVNdWx0aW5vbWlhbDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUGVybXV0YXRpb25zICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVQZXJtdXRhdGlvbnMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVBlcm11dGF0aW9uczsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUGlja1JhbmRvbSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlUGlja1JhbmRvbSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlUGlja1JhbmRvbTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUmFuZG9tICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVSYW5kb20iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVJhbmRvbTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUmFuZG9tSW50ICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVSYW5kb21JbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVJhbmRvbUludDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU3RpcmxpbmdTMiAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlU3RpcmxpbmdTMiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlU3RpcmxpbmdTMjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlQmVsbE51bWJlcnMgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUJlbGxOdW1iZXJzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVCZWxsTnVtYmVyczsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlQ2F0YWxhbiAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQ2F0YWxhbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQ2F0YWxhbjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlQ29tcG9zaXRpb24gKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUNvbXBvc2l0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVDb21wb3NpdGlvbjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU2ltcGxpZnkgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVNpbXBsaWZ5IiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVTaW1wbGlmeTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRGVyaXZhdGl2ZSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlRGVyaXZhdGl2ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRGVyaXZhdGl2ZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUmF0aW9uYWxpemUgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVJhdGlvbmFsaXplIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVSYXRpb25hbGl6ZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUmV2aXZlciAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlUmV2aXZlciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlUmV2aXZlcjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlRSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlVXBwZXJjYXNlRSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlVXBwZXJjYXNlRSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlVXBwZXJjYXNlRTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRmFsc2UgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUZhbHNlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVGYWxzZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlSSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlSSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlSTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlSW5maW5pdHkgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUluZmluaXR5IiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVJbmZpbml0eTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTE4xMCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlTE4xMCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlTE4xMDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTE4yICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVMTjIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUxOMjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTE9HMTBFICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVMT0cxMEUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUxPRzEwRTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTE9HMkUgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUxPRzJFIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVMT0cyRTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTmFOICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVOYU4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZU5hTjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTnVsbCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlTnVsbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlTnVsbDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUGhpICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVQaGkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVBoaTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUGkgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVBpIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVQaTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlVXBwZXJjYXNlUGkgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVVwcGVyY2FzZVBpIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVVcHBlcmNhc2VQaTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU1FSVDFfMiAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlU1FSVDFfMiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlU1FSVDFfMjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU1FSVDIgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVNRUlQyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVTUVJUMjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlVGF1ICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVUYXUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVRhdTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlVHJ1ZSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlVHJ1ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlVHJ1ZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlVmVyc2lvbiAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlVmVyc2lvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlVmVyc2lvbjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlQXRvbWljTWFzcyAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQXRvbWljTWFzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQXRvbWljTWFzczsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlQXZvZ2Fkcm8gKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUF2b2dhZHJvIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVBdm9nYWRybzsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlQm9ock1hZ25ldG9uICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVCb2hyTWFnbmV0b24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUJvaHJNYWduZXRvbjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlQm9oclJhZGl1cyAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQm9oclJhZGl1cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQm9oclJhZGl1czsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlQm9sdHptYW5uICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVCb2x0em1hbm4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUJvbHR6bWFubjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1czsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlQ29uZHVjdGFuY2VRdWFudHVtICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVDb25kdWN0YW5jZVF1YW50dW0iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUNvbmR1Y3RhbmNlUXVhbnR1bTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlQ291bG9tYiAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlQ291bG9tYiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlQ291bG9tYjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRGV1dGVyb25NYXNzICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVEZXV0ZXJvbk1hc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZURldXRlcm9uTWFzczsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRWZpbW92RmFjdG9yICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVFZmltb3ZGYWN0b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUVmaW1vdkZhY3RvcjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRWxlY3RyaWNDb25zdGFudCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlRWxlY3RyaWNDb25zdGFudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRWxlY3RyaWNDb25zdGFudDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRWxlY3Ryb25NYXNzICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVFbGVjdHJvbk1hc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUVsZWN0cm9uTWFzczsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRWxlbWVudGFyeUNoYXJnZSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlRWxlbWVudGFyeUNoYXJnZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudGFyeUNoYXJnZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRmFyYWRheSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlRmFyYWRheSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRmFyYWRheTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRmVybWlDb3VwbGluZyAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlRmVybWlDb3VwbGluZyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRmVybWlDb3VwbGluZzsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRmluZVN0cnVjdHVyZSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlRmluZVN0cnVjdHVyZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRmluZVN0cnVjdHVyZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRmlyc3RSYWRpYXRpb24gKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUZpcnN0UmFkaWF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVGaXJzdFJhZGlhdGlvbjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlR2FzQ29uc3RhbnQgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUdhc0NvbnN0YW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVHYXNDb25zdGFudDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlR3Jhdml0eSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlR3Jhdml0eSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlR3Jhdml0eTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlSGFydHJlZUVuZXJneSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlSGFydHJlZUVuZXJneSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlSGFydHJlZUVuZXJneTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlS2xpdHppbmcgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUtsaXR6aW5nIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVLbGl0emluZzsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTG9zY2htaWR0ICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVMb3NjaG1pZHQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUxvc2NobWlkdDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTWFnbmV0aWNDb25zdGFudCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlTWFnbmV0aWNDb25zdGFudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlTWFnbmV0aWNDb25zdGFudDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTW9sYXJNYXNzICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVNb2xhck1hc3MiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZU1vbGFyTWFzczsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTW9sYXJNYXNzQzEyICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVNb2xhck1hc3NDMTIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZU1vbGFyTWFzc0MxMjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTW9sYXJWb2x1bWUgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZU1vbGFyVm9sdW1lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVNb2xhclZvbHVtZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTmV1dHJvbk1hc3MgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZU5ldXRyb25NYXNzIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVOZXV0cm9uTWFzczsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTnVjbGVhck1hZ25ldG9uICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVOdWNsZWFyTWFnbmV0b24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZU51Y2xlYXJNYWduZXRvbjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUGxhbmNrQ2hhcmdlICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVQbGFuY2tDaGFyZ2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVBsYW5ja0NoYXJnZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUGxhbmNrQ29uc3RhbnQgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVBsYW5ja0NvbnN0YW50IiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVQbGFuY2tDb25zdGFudDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUGxhbmNrTGVuZ3RoICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVQbGFuY2tMZW5ndGgiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVBsYW5ja0xlbmd0aDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUGxhbmNrTWFzcyAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlUGxhbmNrTWFzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlUGxhbmNrTWFzczsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmUgKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVBsYW5ja1RlbXBlcmF0dXJlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVQbGFuY2tUZW1wZXJhdHVyZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUGxhbmNrVGltZSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlUGxhbmNrVGltZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlUGxhbmNrVGltZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUHJvdG9uTWFzcyAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlUHJvdG9uTWFzcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlUHJvdG9uTWFzczsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUXVhbnR1bU9mQ2lyY3VsYXRpb24gKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVF1YW50dW1PZkNpcmN1bGF0aW9uIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVRdWFudHVtT2ZDaXJjdWxhdGlvbjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50ICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVSZWR1Y2VkUGxhbmNrQ29uc3RhbnQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUnlkYmVyZyAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlUnlkYmVyZyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlUnlkYmVyZzsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU2Fja3VyVGV0cm9kZSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlU2Fja3VyVGV0cm9kZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlU2Fja3VyVGV0cm9kZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU2Vjb25kUmFkaWF0aW9uICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVTZWNvbmRSYWRpYXRpb24iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVNlY29uZFJhZGlhdGlvbjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU3BlZWRPZkxpZ2h0ICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVTcGVlZE9mTGlnaHQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVNwZWVkT2ZMaWdodDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU3RlZmFuQm9sdHptYW5uICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVTdGVmYW5Cb2x0em1hbm4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVN0ZWZhbkJvbHR6bWFubjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvbiAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvbiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvbjsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlVmFjdXVtSW1wZWRhbmNlICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVWYWN1dW1JbXBlZGFuY2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVZhY3V1bUltcGVkYW5jZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlV2Vha01peGluZ0FuZ2xlICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVXZWFrTWl4aW5nQW5nbGUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVdlYWtNaXhpbmdBbmdsZTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlV2llbkRpc3BsYWNlbWVudCAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlV2llbkRpc3BsYWNlbWVudCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlV2llbkRpc3BsYWNlbWVudDsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlQXBwbHlUcmFuc2Zvcm0gKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUFwcGx5VHJhbnNmb3JtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVBcHBseVRyYW5zZm9ybTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlQ29sdW1uVHJhbnNmb3JtICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVDb2x1bW5UcmFuc2Zvcm0iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUNvbHVtblRyYW5zZm9ybTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRmlsdGVyVHJhbnNmb3JtICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVGaWx0ZXJUcmFuc2Zvcm0iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUZpbHRlclRyYW5zZm9ybTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlRm9yRWFjaFRyYW5zZm9ybSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlRm9yRWFjaFRyYW5zZm9ybSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlRm9yRWFjaFRyYW5zZm9ybTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlSW5kZXhUcmFuc2Zvcm0gKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZUluZGV4VHJhbnNmb3JtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVJbmRleFRyYW5zZm9ybTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTWFwVHJhbnNmb3JtICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVNYXBUcmFuc2Zvcm0iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZU1hcFRyYW5zZm9ybTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTWF4VHJhbnNmb3JtICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVNYXhUcmFuc2Zvcm0iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZU1heFRyYW5zZm9ybTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTWVhblRyYW5zZm9ybSAqL19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiY3JlYXRlTWVhblRyYW5zZm9ybSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlTWVhblRyYW5zZm9ybTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlTWluVHJhbnNmb3JtICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVNaW5UcmFuc2Zvcm0iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZU1pblRyYW5zZm9ybTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUmFuZ2VUcmFuc2Zvcm0gKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVJhbmdlVHJhbnNmb3JtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVSYW5nZVRyYW5zZm9ybTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlUm93VHJhbnNmb3JtICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVSb3dUcmFuc2Zvcm0iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVJvd1RyYW5zZm9ybTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU3Vic2V0VHJhbnNmb3JtICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVTdWJzZXRUcmFuc2Zvcm0iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVN1YnNldFRyYW5zZm9ybTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlQ29uY2F0VHJhbnNmb3JtICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVDb25jYXRUcmFuc2Zvcm0iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZUNvbmNhdFRyYW5zZm9ybTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU3RkVHJhbnNmb3JtICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVTdGRUcmFuc2Zvcm0iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVN0ZFRyYW5zZm9ybTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU3VtVHJhbnNmb3JtICovX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJjcmVhdGVTdW1UcmFuc2Zvcm0iLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNyZWF0ZVN1bVRyYW5zZm9ybTsgfSk7Ci8qIGNvbmNhdGVkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlVmFyaWFuY2VUcmFuc2Zvcm0gKi9fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZVZhcmlhbmNlVHJhbnNmb3JtIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjcmVhdGVWYXJpYW5jZVRyYW5zZm9ybTsgfSk7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCi8qKiovIH0pLAovKiAyMiAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoidXNlIHN0cmljdCI7Cl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKCi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvdXRpbHMvb2JqZWN0LmpzCnZhciB1dGlsc19vYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpOwoKLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy90aW55LWVtaXR0ZXIvaW5kZXguanMKdmFyIHRpbnlfZW1pdHRlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpOwp2YXIgdGlueV9lbWl0dGVyX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHRpbnlfZW1pdHRlcik7CgovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy91dGlscy9lbWl0dGVyLmpzCgovKioKICogRXh0ZW5kIGdpdmVuIG9iamVjdCB3aXRoIGVtaXR0ZXIgZnVuY3Rpb25zIGBvbmAsIGBvZmZgLCBgb25jZWAsIGBlbWl0YAogKiBAcGFyYW0ge09iamVjdH0gb2JqCiAqIEByZXR1cm4ge09iamVjdH0gb2JqCiAqLwoKZnVuY3Rpb24gbWl4aW4ob2JqKSB7CiAgLy8gY3JlYXRlIGV2ZW50IGVtaXR0ZXIKICB2YXIgZW1pdHRlciA9IG5ldyB0aW55X2VtaXR0ZXJfZGVmYXVsdC5hKCk7IC8vIGJpbmQgbWV0aG9kcyB0byBvYmogKHdlIGRvbid0IHdhbnQgdG8gZXhwb3NlIHRoZSBlbWl0dGVyLmUgQXJyYXkuLi4pCgogIG9iai5vbiA9IGVtaXR0ZXIub24uYmluZChlbWl0dGVyKTsKICBvYmoub2ZmID0gZW1pdHRlci5vZmYuYmluZChlbWl0dGVyKTsKICBvYmoub25jZSA9IGVtaXR0ZXIub25jZS5iaW5kKGVtaXR0ZXIpOwogIG9iai5lbWl0ID0gZW1pdHRlci5lbWl0LmJpbmQoZW1pdHRlcik7CiAgcmV0dXJuIG9iajsKfQovLyBFWFRFUk5BTCBNT0RVTEU6IC4vc3JjL3V0aWxzL2lzLmpzCnZhciBpcyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7CgovLyBFWFRFUk5BTCBNT0RVTEU6IC4vc3JjL3V0aWxzL2ZhY3RvcnkuanMKdmFyIHV0aWxzX2ZhY3RvcnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApOwoKLy8gRVhURVJOQUwgTU9EVUxFOiAuL3NyYy91dGlscy9hcnJheS5qcwp2YXIgYXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpOwoKLy8gRVhURVJOQUwgTU9EVUxFOiAuL3NyYy9lcnJvci9Bcmd1bWVudHNFcnJvci5qcwp2YXIgQXJndW1lbnRzRXJyb3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTsKCi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvdXRpbHMvbG9nLmpzCnZhciBsb2cgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpOwoKLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29yZS9mdW5jdGlvbi9pbXBvcnQuanMKZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH0KCmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7ICJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7IGlmICh0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICJzeW1ib2wiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyAic3ltYm9sIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfQoKCgoKCgoKZnVuY3Rpb24gaW1wb3J0RmFjdG9yeSh0eXBlZCwgbG9hZCwgbWF0aCwgaW1wb3J0ZWRGYWN0b3JpZXMpIHsKICAvKioKICAgKiBJbXBvcnQgZnVuY3Rpb25zIGZyb20gYW4gb2JqZWN0IG9yIGEgbW9kdWxlLgogICAqCiAgICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBvbiBhIG1hdGhqcyBpbnN0YW5jZSBjcmVhdGVkIHVzaW5nIGBjcmVhdGVgLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgbWF0aC5pbXBvcnQoZnVuY3Rpb25zKQogICAqICAgIG1hdGguaW1wb3J0KGZ1bmN0aW9ucywgb3B0aW9ucykKICAgKgogICAqIFdoZXJlOgogICAqCiAgICogLSBgZnVuY3Rpb25zOiBPYmplY3RgCiAgICogICBBbiBvYmplY3Qgd2l0aCBmdW5jdGlvbnMgb3IgZmFjdG9yaWVzIHRvIGJlIGltcG9ydGVkLgogICAqIC0gYG9wdGlvbnM6IE9iamVjdGAgQW4gb2JqZWN0IHdpdGggaW1wb3J0IG9wdGlvbnMuIEF2YWlsYWJsZSBvcHRpb25zOgogICAqICAgLSBgb3ZlcnJpZGU6IGJvb2xlYW5gCiAgICogICAgIElmIHRydWUsIGV4aXN0aW5nIGZ1bmN0aW9ucyB3aWxsIGJlIG92ZXJ3cml0dGVuLiBGYWxzZSBieSBkZWZhdWx0LgogICAqICAgLSBgc2lsZW50OiBib29sZWFuYAogICAqICAgICBJZiB0cnVlLCB0aGUgZnVuY3Rpb24gd2lsbCBub3QgdGhyb3cgZXJyb3JzIG9uIGR1cGxpY2F0ZXMgb3IgaW52YWxpZAogICAqICAgICB0eXBlcy4gRmFsc2UgYnkgZGVmYXVsdC4KICAgKiAgIC0gYHdyYXA6IGJvb2xlYW5gCiAgICogICAgIElmIHRydWUsIHRoZSBmdW5jdGlvbnMgd2lsbCBiZSB3cmFwcGVkIGluIGEgd3JhcHBlciBmdW5jdGlvbgogICAqICAgICB3aGljaCBjb252ZXJ0cyBkYXRhIHR5cGVzIGxpa2UgTWF0cml4IHRvIHByaW1pdGl2ZSBkYXRhIHR5cGVzIGxpa2UgQXJyYXkuCiAgICogICAgIFRoZSB3cmFwcGVyIGlzIG5lZWRlZCB3aGVuIGV4dGVuZGluZyBtYXRoLmpzIHdpdGggbGlicmFyaWVzIHdoaWNoIGRvIG5vdAogICAqICAgICBzdXBwb3J0IHRoZXNlIGRhdGEgdHlwZS4gRmFsc2UgYnkgZGVmYXVsdC4KICAgKgogICAqIEV4YW1wbGVzOgogICAqCiAgICogICAgaW1wb3J0IHsgY3JlYXRlLCBhbGwgfSBmcm9tICdtYXRoanMnCiAgICogICAgaW1wb3J0ICogYXMgbnVtYmVycyBmcm9tICdudW1iZXJzJwogICAqCiAgICogICAgLy8gY3JlYXRlIGEgbWF0aGpzIGluc3RhbmNlCiAgICogICAgY29uc3QgbWF0aCA9IGNyZWF0ZShhbGwpCiAgICoKICAgKiAgICAvLyBkZWZpbmUgbmV3IGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzCiAgICogICAgbWF0aC5pbXBvcnQoewogICAqICAgICAgbXl2YWx1ZTogNDIsCiAgICogICAgICBoZWxsbzogZnVuY3Rpb24gKG5hbWUpIHsKICAgKiAgICAgICAgcmV0dXJuICdoZWxsbywgJyArIG5hbWUgKyAnIScKICAgKiAgICAgIH0KICAgKiAgICB9KQogICAqCiAgICogICAgLy8gdXNlIHRoZSBpbXBvcnRlZCBmdW5jdGlvbiBhbmQgdmFyaWFibGUKICAgKiAgICBtYXRoLm15dmFsdWUgKiAyICAgICAgICAgICAgICAgLy8gODQKICAgKiAgICBtYXRoLmhlbGxvKCd1c2VyJykgICAgICAgICAgICAgLy8gJ2hlbGxvLCB1c2VyIScKICAgKgogICAqICAgIC8vIGltcG9ydCB0aGUgbnBtIG1vZHVsZSAnbnVtYmVycycKICAgKiAgICAvLyAobXVzdCBiZSBpbnN0YWxsZWQgZmlyc3Qgd2l0aCBgbnBtIGluc3RhbGwgbnVtYmVyc2ApCiAgICogICAgbWF0aC5pbXBvcnQobnVtYmVycywge3dyYXA6IHRydWV9KQogICAqCiAgICogICAgbWF0aC5maWJvbmFjY2koNykgLy8gcmV0dXJucyAxMwogICAqCiAgICogQHBhcmFtIHtPYmplY3QgfCBBcnJheX0gZnVuY3Rpb25zICBPYmplY3Qgd2l0aCBmdW5jdGlvbnMgdG8gYmUgaW1wb3J0ZWQuCiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAgICAgICAgICBJbXBvcnQgb3B0aW9ucy4KICAgKi8KICBmdW5jdGlvbiBtYXRoSW1wb3J0KGZ1bmN0aW9ucywgb3B0aW9ucykgewogICAgdmFyIG51bSA9IGFyZ3VtZW50cy5sZW5ndGg7CgogICAgaWYgKG51bSAhPT0gMSAmJiBudW0gIT09IDIpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50c0Vycm9yWyJhIiAvKiBBcmd1bWVudHNFcnJvciAqL10oJ2ltcG9ydCcsIG51bSwgMSwgMik7CiAgICB9CgogICAgaWYgKCFvcHRpb25zKSB7CiAgICAgIG9wdGlvbnMgPSB7fTsKICAgIH0KCiAgICBmdW5jdGlvbiBmbGF0dGVuSW1wb3J0cyhmbGF0VmFsdWVzLCB2YWx1ZSwgbmFtZSkgewogICAgICBpZiAoT2JqZWN0KHV0aWxzX29iamVjdFsiZyIgLyogaXNMZWdhY3lGYWN0b3J5ICovXSkodmFsdWUpKSB7CiAgICAgICAgLy8gbGVnYWN5IGZhY3RvcmllcyBkb24ndCBhbHdheXMgaGF2ZSBhIG5hbWUsCiAgICAgICAgLy8gbGV0J3Mgbm90IGhhbmRsZSB0aGVtIHZpYSB0aGUgbmV3IGZsYXRWYWx1ZXMKICAgICAgICBfaW1wb3J0TGVnYWN5RmFjdG9yeSh2YWx1ZSwgb3B0aW9ucyk7CiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICByZXR1cm4gZmxhdHRlbkltcG9ydHMoZmxhdFZhbHVlcywgaXRlbSk7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAoX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnKSB7CiAgICAgICAgZm9yICh2YXIgX25hbWUgaW4gdmFsdWUpIHsKICAgICAgICAgIGlmIChPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKHZhbHVlLCBfbmFtZSkpIHsKICAgICAgICAgICAgZmxhdHRlbkltcG9ydHMoZmxhdFZhbHVlcywgdmFsdWVbX25hbWVdLCBfbmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKE9iamVjdCh1dGlsc19mYWN0b3J5WyJiIiAvKiBpc0ZhY3RvcnkgKi9dKSh2YWx1ZSkgfHwgbmFtZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgdmFyIGZsYXROYW1lID0gT2JqZWN0KHV0aWxzX2ZhY3RvcnlbImIiIC8qIGlzRmFjdG9yeSAqL10pKHZhbHVlKSA/IGlzVHJhbnNmb3JtRnVuY3Rpb25GYWN0b3J5KHZhbHVlKSA/IHZhbHVlLmZuICsgJy50cmFuc2Zvcm0nIDogLy8gVE9ETzogdGhpcyBpcyB1Z2x5CiAgICAgICAgdmFsdWUuZm4gOiBuYW1lOyAvLyB3ZSBhbGxvdyBpbXBvcnRpbmcgdGhlIHNhbWUgZnVuY3Rpb24gdHdpY2UgaWYgaXQgcG9pbnRzIHRvIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uCgogICAgICAgIGlmIChPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKGZsYXRWYWx1ZXMsIGZsYXROYW1lKSAmJiBmbGF0VmFsdWVzW2ZsYXROYW1lXSAhPT0gdmFsdWUgJiYgIW9wdGlvbnMuc2lsZW50KSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbXBvcnQgIicgKyBmbGF0TmFtZSArICciIHR3aWNlJyk7CiAgICAgICAgfQoKICAgICAgICBmbGF0VmFsdWVzW2ZsYXROYW1lXSA9IHZhbHVlOwogICAgICB9IGVsc2UgewogICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZhY3RvcnksIE9iamVjdCwgb3IgQXJyYXkgZXhwZWN0ZWQnKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICB2YXIgZmxhdFZhbHVlcyA9IHt9OwogICAgZmxhdHRlbkltcG9ydHMoZmxhdFZhbHVlcywgZnVuY3Rpb25zKTsKCiAgICBmb3IgKHZhciBuYW1lIGluIGZsYXRWYWx1ZXMpIHsKICAgICAgaWYgKE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkoZmxhdFZhbHVlcywgbmFtZSkpIHsKICAgICAgICAvLyBjb25zb2xlLmxvZygnaW1wb3J0JywgbmFtZSkKICAgICAgICB2YXIgdmFsdWUgPSBmbGF0VmFsdWVzW25hbWVdOwoKICAgICAgICBpZiAoT2JqZWN0KHV0aWxzX2ZhY3RvcnlbImIiIC8qIGlzRmFjdG9yeSAqL10pKHZhbHVlKSkgewogICAgICAgICAgLy8gd2UgaWdub3JlIG5hbWUgaGVyZSBhbmQgZW5mb3JjZSB0aGUgbmFtZSBvZiB0aGUgZmFjdG9yeQogICAgICAgICAgLy8gbWF5YmUgYXQgc29tZSBwb2ludCB3ZSBkbyB3YW50IHRvIGFsbG93IG92ZXJyaWRpbmcgaXQKICAgICAgICAgIC8vIGluIHRoYXQgY2FzZSB3ZSBjYW4gaW1wbGVtZW50IGFuIG9wdGlvbiBvdmVycmlkZUZhY3RvcnlOYW1lczogdHJ1ZQogICAgICAgICAgX2ltcG9ydEZhY3RvcnkodmFsdWUsIG9wdGlvbnMpOwogICAgICAgIH0gZWxzZSBpZiAoaXNTdXBwb3J0ZWRUeXBlKHZhbHVlKSkgewogICAgICAgICAgX2ltcG9ydChuYW1lLCB2YWx1ZSwgb3B0aW9ucyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmFjdG9yeSwgT2JqZWN0LCBvciBBcnJheSBleHBlY3RlZCcpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICAvKioKICAgKiBBZGQgYSBwcm9wZXJ0eSB0byB0aGUgbWF0aCBuYW1lc3BhY2UKICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZQogICAqIEBwYXJhbSB7Kn0gdmFsdWUKICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAgU2VlIGltcG9ydCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgb3B0aW9ucwogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBfaW1wb3J0KG5hbWUsIHZhbHVlLCBvcHRpb25zKSB7CiAgICAvLyBUT0RPOiByZWZhY3RvciB0aGlzIGZ1bmN0aW9uLCBpdCdzIHRvIGNvbXBsaWNhdGVkIGFuZCBjb250YWlucyBkdXBsaWNhdGUgY29kZQogICAgaWYgKG9wdGlvbnMud3JhcCAmJiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHsKICAgICAgLy8gY3JlYXRlIGEgd3JhcHBlciBhcm91bmQgdGhlIGZ1bmN0aW9uCiAgICAgIHZhbHVlID0gX3dyYXAodmFsdWUpOwogICAgfSAvLyB0dXJuIGEgcGxhaW4gZnVuY3Rpb24gd2l0aCBhIHR5cGVkLWZ1bmN0aW9uIHNpZ25hdHVyZSBpbnRvIGEgdHlwZWQtZnVuY3Rpb24KCgogICAgaWYgKGhhc1R5cGVkRnVuY3Rpb25TaWduYXR1cmUodmFsdWUpKSB7CiAgICAgIHZhbHVlID0gdHlwZWQobmFtZSwgX2RlZmluZVByb3BlcnR5KHt9LCB2YWx1ZS5zaWduYXR1cmUsIHZhbHVlKSk7CiAgICB9CgogICAgaWYgKGlzVHlwZWRGdW5jdGlvbihtYXRoW25hbWVdKSAmJiBpc1R5cGVkRnVuY3Rpb24odmFsdWUpKSB7CiAgICAgIGlmIChvcHRpb25zLm92ZXJyaWRlKSB7CiAgICAgICAgLy8gZ2l2ZSB0aGUgdHlwZWQgZnVuY3Rpb24gdGhlIHJpZ2h0IG5hbWUKICAgICAgICB2YWx1ZSA9IHR5cGVkKG5hbWUsIHZhbHVlLnNpZ25hdHVyZXMpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIG1lcmdlIHRoZSBleGlzdGluZyBhbmQgdHlwZWQgZnVuY3Rpb24KICAgICAgICB2YWx1ZSA9IHR5cGVkKG1hdGhbbmFtZV0sIHZhbHVlKTsKICAgICAgfQoKICAgICAgbWF0aFtuYW1lXSA9IHZhbHVlOwogICAgICBkZWxldGUgaW1wb3J0ZWRGYWN0b3JpZXNbbmFtZV07CgogICAgICBfaW1wb3J0VHJhbnNmb3JtKG5hbWUsIHZhbHVlKTsKCiAgICAgIG1hdGguZW1pdCgnaW1wb3J0JywgbmFtZSwgZnVuY3Rpb24gcmVzb2x2ZXIoKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICB9KTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChtYXRoW25hbWVdID09PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5vdmVycmlkZSkgewogICAgICBtYXRoW25hbWVdID0gdmFsdWU7CiAgICAgIGRlbGV0ZSBpbXBvcnRlZEZhY3Rvcmllc1tuYW1lXTsKCiAgICAgIF9pbXBvcnRUcmFuc2Zvcm0obmFtZSwgdmFsdWUpOwoKICAgICAgbWF0aC5lbWl0KCdpbXBvcnQnLCBuYW1lLCBmdW5jdGlvbiByZXNvbHZlcigpIHsKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgIH0pOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFvcHRpb25zLnNpbGVudCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbXBvcnQgIicgKyBuYW1lICsgJyI6IGFscmVhZHkgZXhpc3RzJyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBfaW1wb3J0VHJhbnNmb3JtKG5hbWUsIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykgewogICAgICBtYXRoLmV4cHJlc3Npb24udHJhbnNmb3JtW25hbWVdID0gdmFsdWUudHJhbnNmb3JtOwoKICAgICAgaWYgKGFsbG93ZWRJbkV4cHJlc3Npb25zKG5hbWUpKSB7CiAgICAgICAgbWF0aC5leHByZXNzaW9uLm1hdGhXaXRoVHJhbnNmb3JtW25hbWVdID0gdmFsdWUudHJhbnNmb3JtOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyByZW1vdmUgZXhpc3RpbmcgdHJhbnNmb3JtCiAgICAgIGRlbGV0ZSBtYXRoLmV4cHJlc3Npb24udHJhbnNmb3JtW25hbWVdOwoKICAgICAgaWYgKGFsbG93ZWRJbkV4cHJlc3Npb25zKG5hbWUpKSB7CiAgICAgICAgbWF0aC5leHByZXNzaW9uLm1hdGhXaXRoVHJhbnNmb3JtW25hbWVdID0gdmFsdWU7CiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIF9kZWxldGVUcmFuc2Zvcm0obmFtZSkgewogICAgZGVsZXRlIG1hdGguZXhwcmVzc2lvbi50cmFuc2Zvcm1bbmFtZV07CgogICAgaWYgKGFsbG93ZWRJbkV4cHJlc3Npb25zKG5hbWUpKSB7CiAgICAgIG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybVtuYW1lXSA9IG1hdGhbbmFtZV07CiAgICB9IGVsc2UgewogICAgICBkZWxldGUgbWF0aC5leHByZXNzaW9uLm1hdGhXaXRoVHJhbnNmb3JtW25hbWVdOwogICAgfQogIH0KICAvKioKICAgKiBDcmVhdGUgYSB3cmFwcGVyIGEgcm91bmQgYW4gZnVuY3Rpb24gd2hpY2ggY29udmVydHMgdGhlIGFyZ3VtZW50cwogICAqIHRvIHRoZWlyIHByaW1pdGl2ZSB2YWx1ZXMgKGxpa2UgY29udmVydCBhIE1hdHJpeCB0byBBcnJheSkKICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbgogICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSB3cmFwcGVkIGZ1bmN0aW9uCiAgICogQHByaXZhdGUKICAgKi8KCgogIGZ1bmN0aW9uIF93cmFwKGZuKSB7CiAgICB2YXIgd3JhcHBlciA9IGZ1bmN0aW9uIHdyYXBwZXIoKSB7CiAgICAgIHZhciBhcmdzID0gW107CgogICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTsKICAgICAgICBhcmdzW2ldID0gYXJnICYmIGFyZy52YWx1ZU9mKCk7CiAgICAgIH0KCiAgICAgIHJldHVybiBmbi5hcHBseShtYXRoLCBhcmdzKTsKICAgIH07CgogICAgaWYgKGZuLnRyYW5zZm9ybSkgewogICAgICB3cmFwcGVyLnRyYW5zZm9ybSA9IGZuLnRyYW5zZm9ybTsKICAgIH0KCiAgICByZXR1cm4gd3JhcHBlcjsKICB9CiAgLyoqCiAgICogSW1wb3J0IGFuIGluc3RhbmNlIG9mIGEgZmFjdG9yeSBpbnRvIG1hdGguanMKICAgKiBAcGFyYW0ge3tmYWN0b3J5OiBGdW5jdGlvbiwgbmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIG1hdGg6IGJvb2xlYW59fSBmYWN0b3J5CiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgIFNlZSBpbXBvcnQgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIG9wdGlvbnMKICAgKiBAcHJpdmF0ZQogICAqLwogIC8vIFRPRE86IF9pbXBvcnRMZWdhY3lGYWN0b3J5IGlzIGRlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLCBjbGVhbiB1cCBzb21lIGRheQoKCiAgZnVuY3Rpb24gX2ltcG9ydExlZ2FjeUZhY3RvcnkoZmFjdG9yeSwgb3B0aW9ucykgewogICAgT2JqZWN0KGxvZ1siYSIgLyogd2Fybk9uY2UgKi9dKSgnRmFjdG9yaWVzIG9mIHR5cGUgeyBuYW1lLCBmYWN0b3J5IH0gYXJlIGRlcHJlY2F0ZWQgc2luY2UgdjYuICcgKyAnUGxlYXNlIGNyZWF0ZSB5b3VyIGZhY3RvcnkgZnVuY3Rpb25zIHVzaW5nIHRoZSBtYXRoLmZhY3RvcnkgZnVuY3Rpb24uJyk7CgogICAgaWYgKHR5cGVvZiBmYWN0b3J5Lm5hbWUgPT09ICdzdHJpbmcnKSB7CiAgICAgIHZhciBuYW1lID0gZmFjdG9yeS5uYW1lOwogICAgICB2YXIgZXhpc3RpbmdUcmFuc2Zvcm0gPSBuYW1lIGluIG1hdGguZXhwcmVzc2lvbi50cmFuc2Zvcm07CiAgICAgIHZhciBuYW1lc3BhY2UgPSBmYWN0b3J5LnBhdGggPyBPYmplY3QodXRpbHNfb2JqZWN0WyJrIiAvKiB0cmF2ZXJzZSAqL10pKG1hdGgsIGZhY3RvcnkucGF0aCkgOiBtYXRoOwogICAgICB2YXIgZXhpc3RpbmcgPSBPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKG5hbWVzcGFjZSwgbmFtZSkgPyBuYW1lc3BhY2VbbmFtZV0gOiB1bmRlZmluZWQ7CgogICAgICB2YXIgcmVzb2x2ZXIgPSBmdW5jdGlvbiByZXNvbHZlcigpIHsKICAgICAgICB2YXIgaW5zdGFuY2UgPSBsb2FkKGZhY3RvcnkpOwoKICAgICAgICBpZiAoaW5zdGFuY2UgJiYgdHlwZW9mIGluc3RhbmNlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcmFuc2Zvcm1zIGNhbm5vdCBiZSBhdHRhY2hlZCB0byBmYWN0b3J5IGZ1bmN0aW9ucy4gJyArICdQbGVhc2UgY3JlYXRlIGEgc2VwYXJhdGUgZnVuY3Rpb24gZm9yIGl0IHdpdGggZXhwb3J0cy5wYXRoPSJleHByZXNzaW9uLnRyYW5zZm9ybSInKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc1R5cGVkRnVuY3Rpb24oZXhpc3RpbmcpICYmIGlzVHlwZWRGdW5jdGlvbihpbnN0YW5jZSkpIHsKICAgICAgICAgIGlmIChvcHRpb25zLm92ZXJyaWRlKSB7Ly8gcmVwbGFjZSB0aGUgZXhpc3RpbmcgdHlwZWQgZnVuY3Rpb24gKG5vdGhpbmcgdG8gZG8pCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBtZXJnZSB0aGUgZXhpc3RpbmcgYW5kIG5ldyB0eXBlZCBmdW5jdGlvbgogICAgICAgICAgICBpbnN0YW5jZSA9IHR5cGVkKGV4aXN0aW5nLCBpbnN0YW5jZSk7CiAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5vdmVycmlkZSkgewogICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKG9wdGlvbnMuc2lsZW50KSB7CiAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGltcG9ydCAiJyArIG5hbWUgKyAnIjogYWxyZWFkeSBleGlzdHMnKTsKICAgICAgICB9CiAgICAgIH07CgogICAgICBpZiAoZmFjdG9yeS5sYXp5ICE9PSBmYWxzZSkgewogICAgICAgIE9iamVjdCh1dGlsc19vYmplY3RbImgiIC8qIGxhenkgKi9dKShuYW1lc3BhY2UsIG5hbWUsIHJlc29sdmVyKTsKCiAgICAgICAgaWYgKGV4aXN0aW5nVHJhbnNmb3JtKSB7CiAgICAgICAgICBfZGVsZXRlVHJhbnNmb3JtKG5hbWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoZmFjdG9yeS5wYXRoID09PSAnZXhwcmVzc2lvbi50cmFuc2Zvcm0nIHx8IGxlZ2FjeUZhY3RvcnlBbGxvd2VkSW5FeHByZXNzaW9ucyhmYWN0b3J5KSkgewogICAgICAgICAgICBPYmplY3QodXRpbHNfb2JqZWN0WyJoIiAvKiBsYXp5ICovXSkobWF0aC5leHByZXNzaW9uLm1hdGhXaXRoVHJhbnNmb3JtLCBuYW1lLCByZXNvbHZlcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIG5hbWVzcGFjZVtuYW1lXSA9IHJlc29sdmVyKCk7CgogICAgICAgIGlmIChleGlzdGluZ1RyYW5zZm9ybSkgewogICAgICAgICAgX2RlbGV0ZVRyYW5zZm9ybShuYW1lKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGZhY3RvcnkucGF0aCA9PT0gJ2V4cHJlc3Npb24udHJhbnNmb3JtJyB8fCBsZWdhY3lGYWN0b3J5QWxsb3dlZEluRXhwcmVzc2lvbnMoZmFjdG9yeSkpIHsKICAgICAgICAgICAgbWF0aC5leHByZXNzaW9uLm1hdGhXaXRoVHJhbnNmb3JtW25hbWVdID0gcmVzb2x2ZXIoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZhciBrZXkgPSBmYWN0b3J5LnBhdGggPyBmYWN0b3J5LnBhdGggKyAnLicgKyBmYWN0b3J5Lm5hbWUgOiBmYWN0b3J5Lm5hbWU7CiAgICAgIGltcG9ydGVkRmFjdG9yaWVzW2tleV0gPSBmYWN0b3J5OwogICAgICBtYXRoLmVtaXQoJ2ltcG9ydCcsIG5hbWUsIHJlc29sdmVyLCBmYWN0b3J5LnBhdGgpOwogICAgfSBlbHNlIHsKICAgICAgLy8gdW5uYW1lZCBmYWN0b3J5LgogICAgICAvLyBubyBsYXp5IGxvYWRpbmcKICAgICAgbG9hZChmYWN0b3J5KTsKICAgIH0KICB9CiAgLyoqCiAgICogSW1wb3J0IGFuIGluc3RhbmNlIG9mIGEgZmFjdG9yeSBpbnRvIG1hdGguanMKICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHNjb3BlOiBvYmplY3QpfSBmYWN0b3J5CiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgIFNlZSBpbXBvcnQgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIG9wdGlvbnMKICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9ZmFjdG9yeS5uYW1lXSBPcHRpb25hbCBjdXN0b20gbmFtZQogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBfaW1wb3J0RmFjdG9yeShmYWN0b3J5LCBvcHRpb25zKSB7CiAgICB2YXIgbmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFjdG9yeS5mbjsKCiAgICBpZiAoT2JqZWN0KGFycmF5WyJiIiAvKiBjb250YWlucyAqL10pKG5hbWUsICcuJykpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWN0b3J5IG5hbWUgc2hvdWxkIG5vdCBjb250YWluIGEgbmVzdGVkIHBhdGguICcgKyAnTmFtZTogJyArIEpTT04uc3RyaW5naWZ5KG5hbWUpKTsKICAgIH0KCiAgICB2YXIgbmFtZXNwYWNlID0gaXNUcmFuc2Zvcm1GdW5jdGlvbkZhY3RvcnkoZmFjdG9yeSkgPyBtYXRoLmV4cHJlc3Npb24udHJhbnNmb3JtIDogbWF0aDsKICAgIHZhciBleGlzdGluZ1RyYW5zZm9ybSA9IG5hbWUgaW4gbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybTsKICAgIHZhciBleGlzdGluZyA9IE9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkobmFtZXNwYWNlLCBuYW1lKSA/IG5hbWVzcGFjZVtuYW1lXSA6IHVuZGVmaW5lZDsKCiAgICB2YXIgcmVzb2x2ZXIgPSBmdW5jdGlvbiByZXNvbHZlcigpIHsKICAgICAgLy8gY29sbGVjdCBhbGwgZGVwZW5kZW5jaWVzLCBoYW5kbGUgZmluZGluZyBib3RoIGZ1bmN0aW9ucyBhbmQgY2xhc3NlcyBhbmQgb3RoZXIgc3BlY2lhbCBjYXNlcwogICAgICB2YXIgZGVwZW5kZW5jaWVzID0ge307CiAgICAgIGZhY3RvcnkuZGVwZW5kZW5jaWVzLm1hcCh1dGlsc19mYWN0b3J5WyJjIiAvKiBzdHJpcE9wdGlvbmFsTm90YXRpb24gKi9dKS5mb3JFYWNoKGZ1bmN0aW9uIChkZXBlbmRlbmN5KSB7CiAgICAgICAgaWYgKE9iamVjdChhcnJheVsiYiIgLyogY29udGFpbnMgKi9dKShkZXBlbmRlbmN5LCAnLicpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhY3RvcnkgZGVwZW5kZW5jeSBzaG91bGQgbm90IGNvbnRhaW4gYSBuZXN0ZWQgcGF0aC4gJyArICdOYW1lOiAnICsgSlNPTi5zdHJpbmdpZnkoZGVwZW5kZW5jeSkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGRlcGVuZGVuY3kgPT09ICdtYXRoJykgewogICAgICAgICAgZGVwZW5kZW5jaWVzLm1hdGggPSBtYXRoOwogICAgICAgIH0gZWxzZSBpZiAoZGVwZW5kZW5jeSA9PT0gJ21hdGhXaXRoVHJhbnNmb3JtJykgewogICAgICAgICAgZGVwZW5kZW5jaWVzLm1hdGhXaXRoVHJhbnNmb3JtID0gbWF0aC5leHByZXNzaW9uLm1hdGhXaXRoVHJhbnNmb3JtOwogICAgICAgIH0gZWxzZSBpZiAoZGVwZW5kZW5jeSA9PT0gJ2NsYXNzZXMnKSB7CiAgICAgICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIGpzb24gcmV2aXZlcgogICAgICAgICAgZGVwZW5kZW5jaWVzLmNsYXNzZXMgPSBtYXRoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkZXBlbmRlbmNpZXNbZGVwZW5kZW5jeV0gPSBtYXRoW2RlcGVuZGVuY3ldOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHZhciBpbnN0YW5jZSA9CiAgICAgIC8qICNfX1BVUkVfXyAqLwogICAgICBmYWN0b3J5KGRlcGVuZGVuY2llcyk7CgogICAgICBpZiAoaW5zdGFuY2UgJiYgdHlwZW9mIGluc3RhbmNlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNmb3JtcyBjYW5ub3QgYmUgYXR0YWNoZWQgdG8gZmFjdG9yeSBmdW5jdGlvbnMuICcgKyAnUGxlYXNlIGNyZWF0ZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIGZvciBpdCB3aXRoIGV4cG9ydHMucGF0aD0iZXhwcmVzc2lvbi50cmFuc2Zvcm0iJyk7CiAgICAgIH0KCiAgICAgIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMub3ZlcnJpZGUpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgIH0KCiAgICAgIGlmIChpc1R5cGVkRnVuY3Rpb24oZXhpc3RpbmcpICYmIGlzVHlwZWRGdW5jdGlvbihpbnN0YW5jZSkpIHsKICAgICAgICAvLyBtZXJnZSB0aGUgZXhpc3RpbmcgYW5kIG5ldyB0eXBlZCBmdW5jdGlvbgogICAgICAgIHJldHVybiB0eXBlZChleGlzdGluZywgaW5zdGFuY2UpOwogICAgICB9CgogICAgICBpZiAob3B0aW9ucy5zaWxlbnQpIHsKICAgICAgICAvLyBrZWVwIGV4aXN0aW5nLCBpZ25vcmUgaW1wb3J0ZWQgZnVuY3Rpb24KICAgICAgICByZXR1cm4gZXhpc3Rpbmc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW1wb3J0ICInICsgbmFtZSArICciOiBhbHJlYWR5IGV4aXN0cycpOwogICAgICB9CiAgICB9OyAvLyBUT0RPOiBhZGQgdW5pdCB0ZXN0IHdpdGggbm9uLWxhenkgZmFjdG9yeQoKCiAgICBpZiAoIWZhY3RvcnkubWV0YSB8fCBmYWN0b3J5Lm1ldGEubGF6eSAhPT0gZmFsc2UpIHsKICAgICAgT2JqZWN0KHV0aWxzX29iamVjdFsiaCIgLyogbGF6eSAqL10pKG5hbWVzcGFjZSwgbmFtZSwgcmVzb2x2ZXIpOyAvLyBGSVhNRTogcmVtb3ZlIHRoZSBgaWYgKGV4aXN0aW5nICYmYCBjb25kaXRpb24gYWdhaW4uIENhbiB3ZSBtYWtlIHN1cmUgc3Vic2V0IGlzIGxvYWRlZCBiZWZvcmUgc3Vic2V0LnRyYW5zZm9ybT8gKE5hbWUgY29sbGlzaW9uLCBhbmQgbm8gZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlIHR3bykKCiAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZ1RyYW5zZm9ybSkgewogICAgICAgIF9kZWxldGVUcmFuc2Zvcm0obmFtZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGlzVHJhbnNmb3JtRnVuY3Rpb25GYWN0b3J5KGZhY3RvcnkpIHx8IGZhY3RvcnlBbGxvd2VkSW5FeHByZXNzaW9ucyhmYWN0b3J5KSkgewogICAgICAgICAgT2JqZWN0KHV0aWxzX29iamVjdFsiaCIgLyogbGF6eSAqL10pKG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybSwgbmFtZSwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gbmFtZXNwYWNlW25hbWVdOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBuYW1lc3BhY2VbbmFtZV0gPSByZXNvbHZlcigpOyAvLyBGSVhNRTogcmVtb3ZlIHRoZSBgaWYgKGV4aXN0aW5nICYmYCBjb25kaXRpb24gYWdhaW4uIENhbiB3ZSBtYWtlIHN1cmUgc3Vic2V0IGlzIGxvYWRlZCBiZWZvcmUgc3Vic2V0LnRyYW5zZm9ybT8gKE5hbWUgY29sbGlzaW9uLCBhbmQgbm8gZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlIHR3bykKCiAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZ1RyYW5zZm9ybSkgewogICAgICAgIF9kZWxldGVUcmFuc2Zvcm0obmFtZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGlzVHJhbnNmb3JtRnVuY3Rpb25GYWN0b3J5KGZhY3RvcnkpIHx8IGZhY3RvcnlBbGxvd2VkSW5FeHByZXNzaW9ucyhmYWN0b3J5KSkgewogICAgICAgICAgT2JqZWN0KHV0aWxzX29iamVjdFsiaCIgLyogbGF6eSAqL10pKG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybSwgbmFtZSwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gbmFtZXNwYWNlW25hbWVdOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9IC8vIFRPRE86IGltcHJvdmUgZmFjdG9yaWVzLCBzdG9yZSBhIGxpc3Qgd2l0aCBpbXBvcnRzIGluc3RlYWQgd2hpY2ggY2FuIGJlIHJlLXBsYXllZAoKCiAgICBpbXBvcnRlZEZhY3Rvcmllc1tuYW1lXSA9IGZhY3Rvcnk7CiAgICBtYXRoLmVtaXQoJ2ltcG9ydCcsIG5hbWUsIHJlc29sdmVyKTsKICB9CiAgLyoqCiAgICogQ2hlY2sgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSB0eXBlIHdoaWNoIGNhbiBiZSBpbXBvcnRlZAogICAqIEBwYXJhbSB7RnVuY3Rpb24gfCBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuIHwgbnVsbCB8IFVuaXQgfCBDb21wbGV4fSBvYmplY3QKICAgKiBAcmV0dXJuIHtib29sZWFufQogICAqIEBwcml2YXRlCiAgICovCgoKICBmdW5jdGlvbiBpc1N1cHBvcnRlZFR5cGUob2JqZWN0KSB7CiAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqZWN0ID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygb2JqZWN0ID09PSAnYm9vbGVhbicgfHwgb2JqZWN0ID09PSBudWxsIHx8IE9iamVjdChpc1siTCIgLyogaXNVbml0ICovXSkob2JqZWN0KSB8fCBPYmplY3QoaXNbImoiIC8qIGlzQ29tcGxleCAqL10pKG9iamVjdCkgfHwgT2JqZWN0KGlzWyJlIiAvKiBpc0JpZ051bWJlciAqL10pKG9iamVjdCkgfHwgT2JqZWN0KGlzWyJvIiAvKiBpc0ZyYWN0aW9uICovXSkob2JqZWN0KSB8fCBPYmplY3QoaXNbInYiIC8qIGlzTWF0cml4ICovXSkob2JqZWN0KSB8fCBBcnJheS5pc0FycmF5KG9iamVjdCk7CiAgfQogIC8qKgogICAqIFRlc3Qgd2hldGhlciBhIGdpdmVuIHRoaW5nIGlzIGEgdHlwZWQtZnVuY3Rpb24KICAgKiBAcGFyYW0geyp9IGZuCiAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gYGZuYCBpcyBhIHR5cGVkLWZ1bmN0aW9uCiAgICovCgoKICBmdW5jdGlvbiBpc1R5cGVkRnVuY3Rpb24oZm4pIHsKICAgIHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgX3R5cGVvZihmbi5zaWduYXR1cmVzKSA9PT0gJ29iamVjdCc7CiAgfQoKICBmdW5jdGlvbiBoYXNUeXBlZEZ1bmN0aW9uU2lnbmF0dXJlKGZuKSB7CiAgICByZXR1cm4gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBmbi5zaWduYXR1cmUgPT09ICdzdHJpbmcnOwogIH0KCiAgZnVuY3Rpb24gYWxsb3dlZEluRXhwcmVzc2lvbnMobmFtZSkgewogICAgcmV0dXJuICFPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKHVuc2FmZSwgbmFtZSk7CiAgfQoKICBmdW5jdGlvbiBsZWdhY3lGYWN0b3J5QWxsb3dlZEluRXhwcmVzc2lvbnMoZmFjdG9yeSkgewogICAgcmV0dXJuIGZhY3RvcnkucGF0aCA9PT0gdW5kZWZpbmVkICYmICFPYmplY3QodXRpbHNfb2JqZWN0WyJmIiAvKiBoYXNPd25Qcm9wZXJ0eSAqL10pKHVuc2FmZSwgZmFjdG9yeS5uYW1lKTsKICB9CgogIGZ1bmN0aW9uIGZhY3RvcnlBbGxvd2VkSW5FeHByZXNzaW9ucyhmYWN0b3J5KSB7CiAgICByZXR1cm4gZmFjdG9yeS5mbi5pbmRleE9mKCcuJykgPT09IC0xICYmIC8vIEZJWE1FOiBtYWtlIGNoZWNraW5nIG9uIHBhdGggcmVkdW5kYW50LCBjaGVjayBvbiBtZXRhIGRhdGEgaW5zdGVhZAogICAgIU9iamVjdCh1dGlsc19vYmplY3RbImYiIC8qIGhhc093blByb3BlcnR5ICovXSkodW5zYWZlLCBmYWN0b3J5LmZuKSAmJiAoIWZhY3RvcnkubWV0YSB8fCAhZmFjdG9yeS5tZXRhLmlzQ2xhc3MpOwogIH0KCiAgZnVuY3Rpb24gaXNUcmFuc2Zvcm1GdW5jdGlvbkZhY3RvcnkoZmFjdG9yeSkgewogICAgcmV0dXJuIGZhY3RvcnkgIT09IHVuZGVmaW5lZCAmJiBmYWN0b3J5Lm1ldGEgIT09IHVuZGVmaW5lZCAmJiBmYWN0b3J5Lm1ldGEuaXNUcmFuc2Zvcm1GdW5jdGlvbiA9PT0gdHJ1ZSB8fCBmYWxzZTsKICB9IC8vIG5hbWVzcGFjZXMgYW5kIGZ1bmN0aW9ucyBub3QgYXZhaWxhYmxlIGluIHRoZSBwYXJzZXIgZm9yIHNhZmV0eSByZWFzb25zCgoKICB2YXIgdW5zYWZlID0gewogICAgZXhwcmVzc2lvbjogdHJ1ZSwKICAgIHR5cGU6IHRydWUsCiAgICBkb2NzOiB0cnVlLAogICAgZXJyb3I6IHRydWUsCiAgICBqc29uOiB0cnVlLAogICAgY2hhaW46IHRydWUgLy8gY2hhaW4gbWV0aG9kIG5vdCBzdXBwb3J0ZWQuIE5vdGUgdGhhdCB0aGVyZSBpcyBhIHVuaXQgY2hhaW4gdG9vLgoKICB9OwogIHJldHVybiBtYXRoSW1wb3J0Owp9Ci8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2NvcmUvY29uZmlnLmpzCnZhciBERUZBVUxUX0NPTkZJRyA9IHsKICAvLyBtaW5pbXVtIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gY29tcGFyZWQgdmFsdWVzLAogIC8vIHVzZWQgYnkgYWxsIGNvbXBhcmlzb24gZnVuY3Rpb25zCiAgZXBzaWxvbjogMWUtMTIsCiAgLy8gdHlwZSBvZiBkZWZhdWx0IG1hdHJpeCBvdXRwdXQuIENob29zZSAnbWF0cml4JyAoZGVmYXVsdCkgb3IgJ2FycmF5JwogIG1hdHJpeDogJ01hdHJpeCcsCiAgLy8gdHlwZSBvZiBkZWZhdWx0IG51bWJlciBvdXRwdXQuIENob29zZSAnbnVtYmVyJyAoZGVmYXVsdCkgJ0JpZ051bWJlcicsIG9yICdGcmFjdGlvbgogIG51bWJlcjogJ251bWJlcicsCiAgLy8gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBpbiBCaWdOdW1iZXJzCiAgcHJlY2lzaW9uOiA2NCwKICAvLyBwcmVkaWN0YWJsZSBvdXRwdXQgdHlwZSBvZiBmdW5jdGlvbnMuIFdoZW4gdHJ1ZSwgb3V0cHV0IHR5cGUgZGVwZW5kcyBvbmx5CiAgLy8gb24gdGhlIGlucHV0IHR5cGVzLiBXaGVuIGZhbHNlIChkZWZhdWx0KSwgb3V0cHV0IHR5cGUgY2FuIHZhcnkgZGVwZW5kaW5nCiAgLy8gb24gaW5wdXQgdmFsdWVzLiBGb3IgZXhhbXBsZSBgbWF0aC5zcXJ0KC00KWAgcmV0dXJucyBgY29tcGxleCgnMmknKWAgd2hlbgogIC8vIHByZWRpY3RhYmxlIGlzIGZhbHNlLCBhbmQgcmV0dXJucyBgTmFOYCB3aGVuIHRydWUuCiAgcHJlZGljdGFibGU6IGZhbHNlLAogIC8vIHJhbmRvbSBzZWVkIGZvciBzZWVkZWQgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbgogIC8vIG51bGwgPSByYW5kb21seSBzZWVkCiAgcmFuZG9tU2VlZDogbnVsbAp9OwovLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9jb3JlL2Z1bmN0aW9uL2NvbmZpZy5qcwoKCnZhciBNQVRSSVhfT1BUSU9OUyA9IFsnTWF0cml4JywgJ0FycmF5J107IC8vIHZhbGlkIHZhbHVlcyBmb3Igb3B0aW9uIG1hdHJpeAoKdmFyIE5VTUJFUl9PUFRJT05TID0gWydudW1iZXInLCAnQmlnTnVtYmVyJywgJ0ZyYWN0aW9uJ107IC8vIHZhbGlkIHZhbHVlcyBmb3Igb3B0aW9uIG51bWJlcgoKZnVuY3Rpb24gY29uZmlnRmFjdG9yeShjb25maWcsIGVtaXQpIHsKICAvKioKICAgKiBTZXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBtYXRoLmpzLCBhbmQgZ2V0IGN1cnJlbnQgb3B0aW9ucy4KICAgKiBXaWxsIGVtaXQgYSAnY29uZmlnJyBldmVudCwgd2l0aCBhcmd1bWVudHMgKGN1cnIsIHByZXYsIGNoYW5nZXMpLgogICAqCiAgICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBvbiBhIG1hdGhqcyBpbnN0YW5jZSBjcmVhdGVkIHVzaW5nIGBjcmVhdGVgLgogICAqCiAgICogU3ludGF4OgogICAqCiAgICogICAgIG1hdGguY29uZmlnKGNvbmZpZzogT2JqZWN0KTogT2JqZWN0CiAgICoKICAgKiBFeGFtcGxlczoKICAgKgogICAqCiAgICogICAgIGltcG9ydCB7IGNyZWF0ZSwgYWxsIH0gZnJvbSAnbWF0aGpzJwogICAqCiAgICogICAgIC8vIGNyZWF0ZSBhIG1hdGhqcyBpbnN0YW5jZQogICAqICAgICBjb25zdCBtYXRoID0gY3JlYXRlKGFsbCkKICAgKgogICAqICAgICBtYXRoLmNvbmZpZygpLm51bWJlciAgICAgICAgICAgICAgICAvLyBvdXRwdXRzICdudW1iZXInCiAgICogICAgIG1hdGguZXZhbHVhdGUoJzAuNCcpICAgICAgICAgICAgICAgIC8vIG91dHB1dHMgbnVtYmVyIDAuNAogICAqICAgICBtYXRoLmNvbmZpZyh7bnVtYmVyOiAnRnJhY3Rpb24nfSkKICAgKiAgICAgbWF0aC5ldmFsdWF0ZSgnMC40JykgICAgICAgICAgICAgICAgLy8gb3V0cHV0cyBGcmFjdGlvbiAyLzUKICAgKgogICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gQXZhaWxhYmxlIG9wdGlvbnM6CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAge251bWJlcn0gZXBzaWxvbgogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluaW11bSByZWxhdGl2ZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZCB2YWx1ZXMsIHVzZWQgYnkgYWxsIGNvbXBhcmlzb24gZnVuY3Rpb25zLgogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmd9IG1hdHJpeAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgJ01hdHJpeCcgKGRlZmF1bHQpIG9yICdBcnJheScuCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbnVtYmVyCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHN0cmluZyAnbnVtYmVyJyAoZGVmYXVsdCksICdCaWdOdW1iZXInLCBvciAnRnJhY3Rpb24nCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAge251bWJlcn0gcHJlY2lzaW9uCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBmb3IgQmlnTnVtYmVycy4KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdCBhcHBsaWNhYmxlIGZvciBOdW1iZXJzLgogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmd9IHBhcmVudGhlc2lzCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3cgdG8gZGlzcGxheSBwYXJlbnRoZXNlcyBpbiBMYVRlWCBhbmQgc3RyaW5nCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gcmFuZG9tU2VlZAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmFuZG9tIHNlZWQgZm9yIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdG8gbnVsbCB0byByYW5kb21seSBzZWVkLgogICAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uCiAgICovCiAgZnVuY3Rpb24gX2NvbmZpZyhvcHRpb25zKSB7CiAgICBpZiAob3B0aW9ucykgewogICAgICB2YXIgcHJldiA9IE9iamVjdCh1dGlsc19vYmplY3RbImkiIC8qIG1hcE9iamVjdCAqL10pKGNvbmZpZywgdXRpbHNfb2JqZWN0WyJhIiAvKiBjbG9uZSAqL10pOyAvLyB2YWxpZGF0ZSBzb21lIG9mIHRoZSBvcHRpb25zCgogICAgICB2YWxpZGF0ZU9wdGlvbihvcHRpb25zLCAnbWF0cml4JywgTUFUUklYX09QVElPTlMpOwogICAgICB2YWxpZGF0ZU9wdGlvbihvcHRpb25zLCAnbnVtYmVyJywgTlVNQkVSX09QVElPTlMpOyAvLyBtZXJnZSBvcHRpb25zCgogICAgICBPYmplY3QodXRpbHNfb2JqZWN0WyJiIiAvKiBkZWVwRXh0ZW5kICovXSkoY29uZmlnLCBvcHRpb25zKTsKICAgICAgdmFyIGN1cnIgPSBPYmplY3QodXRpbHNfb2JqZWN0WyJpIiAvKiBtYXBPYmplY3QgKi9dKShjb25maWcsIHV0aWxzX29iamVjdFsiYSIgLyogY2xvbmUgKi9dKTsKICAgICAgdmFyIGNoYW5nZXMgPSBPYmplY3QodXRpbHNfb2JqZWN0WyJpIiAvKiBtYXBPYmplY3QgKi9dKShvcHRpb25zLCB1dGlsc19vYmplY3RbImEiIC8qIGNsb25lICovXSk7IC8vIGVtaXQgJ2NvbmZpZycgZXZlbnQKCiAgICAgIGVtaXQoJ2NvbmZpZycsIGN1cnIsIHByZXYsIGNoYW5nZXMpOwogICAgICByZXR1cm4gY3VycjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBPYmplY3QodXRpbHNfb2JqZWN0WyJpIiAvKiBtYXBPYmplY3QgKi9dKShjb25maWcsIHV0aWxzX29iamVjdFsiYSIgLyogY2xvbmUgKi9dKTsKICAgIH0KICB9IC8vIGF0dGFjaCB0aGUgdmFsaWQgb3B0aW9ucyB0byB0aGUgZnVuY3Rpb24gc28gdGhleSBjYW4gYmUgZXh0ZW5kZWQKCgogIF9jb25maWcuTUFUUklYX09QVElPTlMgPSBNQVRSSVhfT1BUSU9OUzsKICBfY29uZmlnLk5VTUJFUl9PUFRJT05TID0gTlVNQkVSX09QVElPTlM7IC8vIGF0dGFjaCB0aGUgY29uZmlnIHByb3BlcnRpZXMgYXMgcmVhZG9ubHkgcHJvcGVydGllcyB0byB0aGUgY29uZmlnIGZ1bmN0aW9uCgogIE9iamVjdC5rZXlzKERFRkFVTFRfQ09ORklHKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY29uZmlnLCBrZXksIHsKICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgcmV0dXJuIGNvbmZpZ1trZXldOwogICAgICB9LAogICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICBjb25maWd1cmFibGU6IHRydWUKICAgIH0pOwogIH0pOwogIHJldHVybiBfY29uZmlnOwp9Ci8qKgogKiBUZXN0IHdoZXRoZXIgYW4gQXJyYXkgY29udGFpbnMgYSBzcGVjaWZpYyBpdGVtLgogKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBhcnJheQogKiBAcGFyYW0ge3N0cmluZ30gaXRlbQogKiBAcmV0dXJuIHtib29sZWFufQogKi8KCmZ1bmN0aW9uIGNvbnRhaW5zKGFycmF5LCBpdGVtKSB7CiAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSkgIT09IC0xOwp9Ci8qKgogKiBGaW5kIGEgc3RyaW5nIGluIGFuIGFycmF5LiBDYXNlIGluc2Vuc2l0aXZlIHNlYXJjaAogKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBhcnJheQogKiBAcGFyYW0ge3N0cmluZ30gaXRlbQogKiBAcmV0dXJuIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IHdoZW4gZm91bmQuIFJldHVybnMgLTEgd2hlbiBub3QgZm91bmQKICovCgoKZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBpdGVtKSB7CiAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbiAoaSkgewogICAgcmV0dXJuIGkudG9Mb3dlckNhc2UoKTsKICB9KS5pbmRleE9mKGl0ZW0udG9Mb3dlckNhc2UoKSk7Cn0KLyoqCiAqIFZhbGlkYXRlIGFuIG9wdGlvbgogKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAgICAgICAgIE9iamVjdCB3aXRoIG9wdGlvbnMKICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgICAgICAgICAgICBOYW1lIG9mIHRoZSBvcHRpb24gdG8gdmFsaWRhdGUKICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gdmFsdWVzICBBcnJheSB3aXRoIHZhbGlkIHZhbHVlcyBmb3IgdGhpcyBvcHRpb24KICovCgoKZnVuY3Rpb24gdmFsaWRhdGVPcHRpb24ob3B0aW9ucywgbmFtZSwgdmFsdWVzKSB7CiAgaWYgKG9wdGlvbnNbbmFtZV0gIT09IHVuZGVmaW5lZCAmJiAhY29udGFpbnModmFsdWVzLCBvcHRpb25zW25hbWVdKSkgewogICAgdmFyIGluZGV4ID0gZmluZEluZGV4KHZhbHVlcywgb3B0aW9uc1tuYW1lXSk7CgogICAgaWYgKGluZGV4ICE9PSAtMSkgewogICAgICAvLyByaWdodCB2YWx1ZSwgd3JvbmcgY2FzaW5nCiAgICAgIC8vIFRPRE86IGxvd2VyIGNhc2UgdmFsdWVzIGFyZSBkZXByZWNhdGVkIHNpbmNlIHYzLCByZW1vdmUgdGhpcyB3YXJuaW5nIHNvbWUgZGF5LgogICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6IFdyb25nIGNhc2luZyBmb3IgY29uZmlndXJhdGlvbiBvcHRpb24gIicgKyBuYW1lICsgJyIsIHNob3VsZCBiZSAiJyArIHZhbHVlc1tpbmRleF0gKyAnIiBpbnN0ZWFkIG9mICInICsgb3B0aW9uc1tuYW1lXSArICciLicpOwogICAgICBvcHRpb25zW25hbWVdID0gdmFsdWVzW2luZGV4XTsgLy8gY2hhbmdlIHRoZSBvcHRpb24gdG8gdGhlIHJpZ2h0IGNhc2luZwogICAgfSBlbHNlIHsKICAgICAgLy8gdW5rbm93biB2YWx1ZQogICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6IFVua25vd24gdmFsdWUgIicgKyBvcHRpb25zW25hbWVdICsgJyIgZm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uICInICsgbmFtZSArICciLiBBdmFpbGFibGUgb3B0aW9uczogJyArIHZhbHVlcy5tYXAoSlNPTi5zdHJpbmdpZnkpLmpvaW4oJywgJykgKyAnLicpOwogICAgfQogIH0KfQovLyBFWFRFUk5BTCBNT0RVTEU6IC4vc3JjL2Vycm9yL0RpbWVuc2lvbkVycm9yLmpzCnZhciBEaW1lbnNpb25FcnJvciA9IF9fd2VicGFja19yZXF1aXJlX18oNik7CgovLyBFWFRFUk5BTCBNT0RVTEU6IC4vc3JjL2Vycm9yL0luZGV4RXJyb3IuanMKdmFyIEluZGV4RXJyb3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTsKCi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2NvcmUvY3JlYXRlLmpzCi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImNyZWF0ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY3JlYXRlOyB9KTsKZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0KCgoKCgoKCgoKCgoKCgovKioKICogQ3JlYXRlIGEgbWF0aGpzIGluc3RhbmNlIGZyb20gZ2l2ZW4gZmFjdG9yeSBmdW5jdGlvbnMgYW5kIG9wdGlvbmFsbHkgY29uZmlnCiAqCiAqIFVzYWdlOgogKgogKiAgICAgY29uc3QgbWF0aGpzMSA9IGNyZWF0ZSh7IGNyZWF0ZUFkZCwgY3JlYXRlTXVsdGlwbHksIC4uLn0pCiAqICAgICBjb25zdCBjb25maWcgPSB7IG51bWJlcjogJ0JpZ051bWJlcicgfQogKiAgICAgY29uc3QgbWF0aGpzMiA9IGNyZWF0ZShhbGwsIGNvbmZpZykKICoKICogQHBhcmFtIHtPYmplY3R9IFtmYWN0b3JpZXNdIEFuIG9iamVjdCB3aXRoIGZhY3RvcnkgZnVuY3Rpb25zCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IGNhbiBjb250YWluIG5lc3RlZCBvYmplY3RzLAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsIG5lc3RlZCBvYmplY3RzIHdpbGwgYmUgZmxhdHRlbmVkLgogKiBAcGFyYW0ge09iamVjdH0gW2NvbmZpZ10gICAgQXZhaWxhYmxlIG9wdGlvbnM6CiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGVwc2lsb24KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZCB2YWx1ZXMsIHVzZWQgYnkgYWxsIGNvbXBhcmlzb24gZnVuY3Rpb25zLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBtYXRyaXgKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHN0cmluZyAnTWF0cml4JyAoZGVmYXVsdCkgb3IgJ0FycmF5Jy4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbnVtYmVyCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgJ251bWJlcicgKGRlZmF1bHQpLCAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uJwogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSBwcmVjaXNpb24KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBmb3IgQmlnTnVtYmVycy4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3QgYXBwbGljYWJsZSBmb3IgTnVtYmVycy4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAge2Jvb2xlYW59IHByZWRpY3RhYmxlCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlZGljdGFibGUgb3V0cHV0IHR5cGUgb2YgZnVuY3Rpb25zLiBXaGVuIHRydWUsCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHR5cGUgZGVwZW5kcyBvbmx5IG9uIHRoZSBpbnB1dCB0eXBlcy4gV2hlbgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIChkZWZhdWx0KSwgb3V0cHV0IHR5cGUgY2FuIHZhcnkgZGVwZW5kaW5nCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gaW5wdXQgdmFsdWVzLiBGb3IgZXhhbXBsZSBgbWF0aC5zcXJ0KC00KWAKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5zIGBjb21wbGV4KCcyaScpYCB3aGVuIHByZWRpY3RhYmxlIGlzIGZhbHNlLCBhbmQKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5zIGBOYU5gIHdoZW4gdHJ1ZS4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gcmFuZG9tU2VlZAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhbmRvbSBzZWVkIGZvciBzZWVkZWQgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCB0byBudWxsIHRvIHJhbmRvbWx5IHNlZWQuCiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYSBiYXJlLWJvbmUgbWF0aC5qcyBpbnN0YW5jZSBjb250YWluaW5nCiAqICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uczoKICogICAgICAgICAgICAgICAgICAgLSBgaW1wb3J0YCB0byBhZGQgbmV3IGZ1bmN0aW9ucwogKiAgICAgICAgICAgICAgICAgICAtIGBjb25maWdgIHRvIGNoYW5nZSBjb25maWd1cmF0aW9uCiAqICAgICAgICAgICAgICAgICAgIC0gYG9uYCwgYG9mZmAsIGBvbmNlYCwgYGVtaXRgIGZvciBldmVudHMKICovCgpmdW5jdGlvbiBjcmVhdGUoZmFjdG9yaWVzLCBjb25maWcpIHsKICB2YXIgY29uZmlnSW50ZXJuYWwgPSBfZXh0ZW5kcyh7fSwgREVGQVVMVF9DT05GSUcsIGNvbmZpZyk7IC8vIHNpbXBsZSB0ZXN0IGZvciBFUzUgc3VwcG9ydAoKCiAgaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VTNSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgSmF2YVNjcmlwdCBlbmdpbmUuICcgKyAnUGxlYXNlIGxvYWQgdGhlIGVzNS1zaGltIGFuZCBlczUtc2hhbSBsaWJyYXJ5IGZvciBjb21wYXRpYmlsaXR5LicpOwogIH0gLy8gY3JlYXRlIHRoZSBtYXRoanMgaW5zdGFuY2UKCgogIHZhciBtYXRoID0gbWl4aW4oewogICAgLy8gb25seSBoZXJlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBsZWdhY3kgZmFjdG9yeSBmdW5jdGlvbnMKICAgIGlzTnVtYmVyOiBpc1sieSIgLyogaXNOdW1iZXIgKi9dLAogICAgaXNDb21wbGV4OiBpc1siaiIgLyogaXNDb21wbGV4ICovXSwKICAgIGlzQmlnTnVtYmVyOiBpc1siZSIgLyogaXNCaWdOdW1iZXIgKi9dLAogICAgaXNGcmFjdGlvbjogaXNbIm8iIC8qIGlzRnJhY3Rpb24gKi9dLAogICAgaXNVbml0OiBpc1siTCIgLyogaXNVbml0ICovXSwKICAgIGlzU3RyaW5nOiBpc1siSSIgLyogaXNTdHJpbmcgKi9dLAogICAgaXNBcnJheTogaXNbImIiIC8qIGlzQXJyYXkgKi9dLAogICAgaXNNYXRyaXg6IGlzWyJ2IiAvKiBpc01hdHJpeCAqL10sCiAgICBpc0NvbGxlY3Rpb246IGlzWyJpIiAvKiBpc0NvbGxlY3Rpb24gKi9dLAogICAgaXNEZW5zZU1hdHJpeDogaXNbIm4iIC8qIGlzRGVuc2VNYXRyaXggKi9dLAogICAgaXNTcGFyc2VNYXRyaXg6IGlzWyJIIiAvKiBpc1NwYXJzZU1hdHJpeCAqL10sCiAgICBpc1JhbmdlOiBpc1siRCIgLyogaXNSYW5nZSAqL10sCiAgICBpc0luZGV4OiBpc1sidCIgLyogaXNJbmRleCAqL10sCiAgICBpc0Jvb2xlYW46IGlzWyJnIiAvKiBpc0Jvb2xlYW4gKi9dLAogICAgaXNSZXN1bHRTZXQ6IGlzWyJHIiAvKiBpc1Jlc3VsdFNldCAqL10sCiAgICBpc0hlbHA6IGlzWyJzIiAvKiBpc0hlbHAgKi9dLAogICAgaXNGdW5jdGlvbjogaXNbInAiIC8qIGlzRnVuY3Rpb24gKi9dLAogICAgaXNEYXRlOiBpc1sibSIgLyogaXNEYXRlICovXSwKICAgIGlzUmVnRXhwOiBpc1siRiIgLyogaXNSZWdFeHAgKi9dLAogICAgaXNPYmplY3Q6IGlzWyJ6IiAvKiBpc09iamVjdCAqL10sCiAgICBpc051bGw6IGlzWyJ4IiAvKiBpc051bGwgKi9dLAogICAgaXNVbmRlZmluZWQ6IGlzWyJLIiAvKiBpc1VuZGVmaW5lZCAqL10sCiAgICBpc0FjY2Vzc29yTm9kZTogaXNbImEiIC8qIGlzQWNjZXNzb3JOb2RlICovXSwKICAgIGlzQXJyYXlOb2RlOiBpc1siYyIgLyogaXNBcnJheU5vZGUgKi9dLAogICAgaXNBc3NpZ25tZW50Tm9kZTogaXNbImQiIC8qIGlzQXNzaWdubWVudE5vZGUgKi9dLAogICAgaXNCbG9ja05vZGU6IGlzWyJmIiAvKiBpc0Jsb2NrTm9kZSAqL10sCiAgICBpc0NvbmRpdGlvbmFsTm9kZTogaXNbImsiIC8qIGlzQ29uZGl0aW9uYWxOb2RlICovXSwKICAgIGlzQ29uc3RhbnROb2RlOiBpc1sibCIgLyogaXNDb25zdGFudE5vZGUgKi9dLAogICAgaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlOiBpc1sicSIgLyogaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlICovXSwKICAgIGlzRnVuY3Rpb25Ob2RlOiBpc1siciIgLyogaXNGdW5jdGlvbk5vZGUgKi9dLAogICAgaXNJbmRleE5vZGU6IGlzWyJ1IiAvKiBpc0luZGV4Tm9kZSAqL10sCiAgICBpc05vZGU6IGlzWyJ3IiAvKiBpc05vZGUgKi9dLAogICAgaXNPYmplY3ROb2RlOiBpc1siQSIgLyogaXNPYmplY3ROb2RlICovXSwKICAgIGlzT3BlcmF0b3JOb2RlOiBpc1siQiIgLyogaXNPcGVyYXRvck5vZGUgKi9dLAogICAgaXNQYXJlbnRoZXNpc05vZGU6IGlzWyJDIiAvKiBpc1BhcmVudGhlc2lzTm9kZSAqL10sCiAgICBpc1JhbmdlTm9kZTogaXNbIkUiIC8qIGlzUmFuZ2VOb2RlICovXSwKICAgIGlzU3ltYm9sTm9kZTogaXNbIkoiIC8qIGlzU3ltYm9sTm9kZSAqL10sCiAgICBpc0NoYWluOiBpc1siaCIgLyogaXNDaGFpbiAqL10KICB9KTsgLy8gbG9hZCBjb25maWcgZnVuY3Rpb24gYW5kIGFwcGx5IHByb3ZpZGVkIGNvbmZpZwoKICBtYXRoLmNvbmZpZyA9IGNvbmZpZ0ZhY3RvcnkoY29uZmlnSW50ZXJuYWwsIG1hdGguZW1pdCk7CiAgbWF0aC5leHByZXNzaW9uID0gewogICAgdHJhbnNmb3JtOiB7fSwKICAgIG1hdGhXaXRoVHJhbnNmb3JtOiB7CiAgICAgIGNvbmZpZzogbWF0aC5jb25maWcKICAgIH0KICB9OyAvLyBjYWNoZWQgZmFjdG9yaWVzIGFuZCBpbnN0YW5jZXMgdXNlZCBieSBmdW5jdGlvbiBsb2FkCgogIHZhciBsZWdhY3lGYWN0b3JpZXMgPSBbXTsKICB2YXIgbGVnYWN5SW5zdGFuY2VzID0gW107CiAgLyoqCiAgICogTG9hZCBhIGZ1bmN0aW9uIG9yIGRhdGEgdHlwZSBmcm9tIGEgZmFjdG9yeS4KICAgKiBJZiB0aGUgZnVuY3Rpb24gb3IgZGF0YSB0eXBlIGFscmVhZHkgZXhpc3RzLCB0aGUgZXhpc3RpbmcgaW5zdGFuY2UgaXMKICAgKiByZXR1cm5lZC4KICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmYWN0b3J5CiAgICogQHJldHVybnMgeyp9CiAgICovCgogIGZ1bmN0aW9uIGxvYWQoZmFjdG9yeSkgewogICAgaWYgKE9iamVjdCh1dGlsc19mYWN0b3J5WyJiIiAvKiBpc0ZhY3RvcnkgKi9dKShmYWN0b3J5KSkgewogICAgICByZXR1cm4gZmFjdG9yeShtYXRoKTsKICAgIH0KCiAgICB2YXIgZmlyc3RQcm9wZXJ0eSA9IGZhY3RvcnlbT2JqZWN0LmtleXMoZmFjdG9yeSlbMF1dOwoKICAgIGlmIChPYmplY3QodXRpbHNfZmFjdG9yeVsiYiIgLyogaXNGYWN0b3J5ICovXSkoZmlyc3RQcm9wZXJ0eSkpIHsKICAgICAgcmV0dXJuIGZpcnN0UHJvcGVydHkobWF0aCk7CiAgICB9CgogICAgaWYgKCFPYmplY3QodXRpbHNfb2JqZWN0WyJnIiAvKiBpc0xlZ2FjeUZhY3RvcnkgKi9dKShmYWN0b3J5KSkgewogICAgICBjb25zb2xlLndhcm4oJ0ZhY3Rvcnkgb2JqZWN0IHdpdGggcHJvcGVydGllcyBgdHlwZWAsIGBuYW1lYCwgYW5kIGBmYWN0b3J5YCBleHBlY3RlZCcsIGZhY3RvcnkpOwogICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhY3Rvcnkgb2JqZWN0IHdpdGggcHJvcGVydGllcyBgdHlwZWAsIGBuYW1lYCwgYW5kIGBmYWN0b3J5YCBleHBlY3RlZCcpOwogICAgfQoKICAgIHZhciBpbmRleCA9IGxlZ2FjeUZhY3Rvcmllcy5pbmRleE9mKGZhY3RvcnkpOwogICAgdmFyIGluc3RhbmNlOwoKICAgIGlmIChpbmRleCA9PT0gLTEpIHsKICAgICAgLy8gZG9lc24ndCB5ZXQgZXhpc3QKICAgICAgaWYgKGZhY3RvcnkubWF0aCA9PT0gdHJ1ZSkgewogICAgICAgIC8vIHBhc3Mgd2l0aCBtYXRoIG5hbWVzcGFjZQogICAgICAgIGluc3RhbmNlID0gZmFjdG9yeS5mYWN0b3J5KG1hdGgudHlwZSwgY29uZmlnSW50ZXJuYWwsIGxvYWQsIG1hdGgudHlwZWQsIG1hdGgpOwogICAgICB9IGVsc2UgewogICAgICAgIGluc3RhbmNlID0gZmFjdG9yeS5mYWN0b3J5KG1hdGgudHlwZSwgY29uZmlnSW50ZXJuYWwsIGxvYWQsIG1hdGgudHlwZWQpOwogICAgICB9IC8vIGFwcGVuZCB0byB0aGUgY2FjaGUKCgogICAgICBsZWdhY3lGYWN0b3JpZXMucHVzaChmYWN0b3J5KTsKICAgICAgbGVnYWN5SW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpOwogICAgfSBlbHNlIHsKICAgICAgLy8gYWxyZWFkeSBleGlzdGluZyBmdW5jdGlvbiwgcmV0dXJuIHRoZSBjYWNoZWQgaW5zdGFuY2UKICAgICAgaW5zdGFuY2UgPSBsZWdhY3lJbnN0YW5jZXNbaW5kZXhdOwogICAgfQoKICAgIHJldHVybiBpbnN0YW5jZTsKICB9CgogIHZhciBpbXBvcnRlZEZhY3RvcmllcyA9IHt9OyAvLyBsb2FkIHRoZSBpbXBvcnQgZnVuY3Rpb24KCiAgZnVuY3Rpb24gbGF6eVR5cGVkKCkgewogICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07CiAgICB9CgogICAgcmV0dXJuIG1hdGgudHlwZWQuYXBwbHkobWF0aC50eXBlZCwgYXJncyk7CiAgfQoKICB2YXIgaW50ZXJuYWxJbXBvcnQgPSBpbXBvcnRGYWN0b3J5KGxhenlUeXBlZCwgbG9hZCwgbWF0aCwgaW1wb3J0ZWRGYWN0b3JpZXMpOwogIG1hdGhbImltcG9ydCJdID0gaW50ZXJuYWxJbXBvcnQ7IC8vIGxpc3RlbiBmb3IgY2hhbmdlcyBpbiBjb25maWcsIGltcG9ydCBhbGwgZnVuY3Rpb25zIGFnYWluIHdoZW4gY2hhbmdlZAogIC8vIFRPRE86IG1vdmUgdGhpcyBsaXN0ZW5lciBpbnRvIHRoZSBpbXBvcnQgZnVuY3Rpb24/CgogIG1hdGgub24oJ2NvbmZpZycsIGZ1bmN0aW9uICgpIHsKICAgIE9iamVjdCh1dGlsc19vYmplY3RbImwiIC8qIHZhbHVlcyAqL10pKGltcG9ydGVkRmFjdG9yaWVzKS5mb3JFYWNoKGZ1bmN0aW9uIChmYWN0b3J5KSB7CiAgICAgIGlmIChmYWN0b3J5ICYmIGZhY3RvcnkubWV0YSAmJiBmYWN0b3J5Lm1ldGEucmVjcmVhdGVPbkNvbmZpZ0NoYW5nZSkgewogICAgICAgIC8vIEZJWE1FOiBvbmx5IHJlLWNyZWF0ZSB3aGVuIHRoZSBjdXJyZW50IGluc3RhbmNlIGlzIHRoZSBzYW1lIGFzIHdhcyBpbml0aWFsbHkgY3JlYXRlZAogICAgICAgIC8vIEZJWE1FOiBkZWxldGUgdGhlIGZ1bmN0aW9ucy9jb25zdGFudHMgYmVmb3JlIGltcG9ydGluZyB0aGVtIGFnYWluPwogICAgICAgIGludGVybmFsSW1wb3J0KGZhY3RvcnksIHsKICAgICAgICAgIG92ZXJyaWRlOiB0cnVlCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0pOwogIH0pOyAvLyB0aGUgY3JlYXRlIGZ1bmN0aW9uIGV4cG9zZWQgb24gdGhlIG1hdGhqcyBpbnN0YW5jZSBpcyBib3VuZCB0bwogIC8vIHRoZSBmYWN0b3J5IGZ1bmN0aW9ucyBwYXNzZWQgYmVmb3JlCgogIG1hdGguY3JlYXRlID0gY3JlYXRlLmJpbmQobnVsbCwgZmFjdG9yaWVzKTsgLy8gZXhwb3J0IGZhY3RvcnkgZnVuY3Rpb24KCiAgbWF0aC5mYWN0b3J5ID0gdXRpbHNfZmFjdG9yeVsiYSIgLyogZmFjdG9yeSAqL107IC8vIGltcG9ydCB0aGUgZmFjdG9yeSBmdW5jdGlvbnMgbGlrZSBjcmVhdGVBZGQgYXMgYW4gYXJyYXkgaW5zdGVhZCBvZiBvYmplY3QsCiAgLy8gZWxzZSB0aGV5IHdpbGwgZ2V0IGEgZGlmZmVyZW50IG5hbWluZyAoYGNyZWF0ZUFkZGAgaW5zdGVhZCBvZiBgYWRkYCkuCgogIG1hdGhbImltcG9ydCJdKE9iamVjdCh1dGlsc19vYmplY3RbImwiIC8qIHZhbHVlcyAqL10pKE9iamVjdCh1dGlsc19vYmplY3RbImMiIC8qIGRlZXBGbGF0dGVuICovXSkoZmFjdG9yaWVzKSkpOyAvLyBUT0RPOiBkZXByZWNhdGVkIHNpbmNlIHY2LjAuMC4gQ2xlYW4gdXAgc29tZSBkYXkKCiAgdmFyIG1vdmVkTmFtZXMgPSBbJ3R5cGUuaXNOdW1iZXInLCAndHlwZS5pc0NvbXBsZXgnLCAndHlwZS5pc0JpZ051bWJlcicsICd0eXBlLmlzRnJhY3Rpb24nLCAndHlwZS5pc1VuaXQnLCAndHlwZS5pc1N0cmluZycsICd0eXBlLmlzQXJyYXknLCAndHlwZS5pc01hdHJpeCcsICd0eXBlLmlzRGVuc2VNYXRyaXgnLCAndHlwZS5pc1NwYXJzZU1hdHJpeCcsICd0eXBlLmlzQ29sbGVjdGlvbicsICd0eXBlLmlzUmFuZ2UnLCAndHlwZS5pc0luZGV4JywgJ3R5cGUuaXNCb29sZWFuJywgJ3R5cGUuaXNSZXN1bHRTZXQnLCAndHlwZS5pc0hlbHAnLCAndHlwZS5pc0Z1bmN0aW9uJywgJ3R5cGUuaXNEYXRlJywgJ3R5cGUuaXNSZWdFeHAnLCAndHlwZS5pc09iamVjdCcsICd0eXBlLmlzTnVsbCcsICd0eXBlLmlzVW5kZWZpbmVkJywgJ3R5cGUuaXNBY2Nlc3Nvck5vZGUnLCAndHlwZS5pc0FycmF5Tm9kZScsICd0eXBlLmlzQXNzaWdubWVudE5vZGUnLCAndHlwZS5pc0Jsb2NrTm9kZScsICd0eXBlLmlzQ29uZGl0aW9uYWxOb2RlJywgJ3R5cGUuaXNDb25zdGFudE5vZGUnLCAndHlwZS5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUnLCAndHlwZS5pc0Z1bmN0aW9uTm9kZScsICd0eXBlLmlzSW5kZXhOb2RlJywgJ3R5cGUuaXNOb2RlJywgJ3R5cGUuaXNPYmplY3ROb2RlJywgJ3R5cGUuaXNPcGVyYXRvck5vZGUnLCAndHlwZS5pc1BhcmVudGhlc2lzTm9kZScsICd0eXBlLmlzUmFuZ2VOb2RlJywgJ3R5cGUuaXNTeW1ib2xOb2RlJywgJ3R5cGUuaXNDaGFpbicsICd0eXBlLkJpZ051bWJlcicsICd0eXBlLkNoYWluJywgJ3R5cGUuQ29tcGxleCcsICd0eXBlLkZyYWN0aW9uJywgJ3R5cGUuTWF0cml4JywgJ3R5cGUuRGVuc2VNYXRyaXgnLCAndHlwZS5TcGFyc2VNYXRyaXgnLCAndHlwZS5TcGEnLCAndHlwZS5GaWJvbmFjY2lIZWFwJywgJ3R5cGUuSW1tdXRhYmxlRGVuc2VNYXRyaXgnLCAndHlwZS5JbmRleCcsICd0eXBlLlJhbmdlJywgJ3R5cGUuUmVzdWx0U2V0JywgJ3R5cGUuVW5pdCcsICd0eXBlLkhlbHAnLCAndHlwZS5QYXJzZXInLCAnZXhwcmVzc2lvbi5wYXJzZScsICdleHByZXNzaW9uLlBhcnNlcicsICdleHByZXNzaW9uLm5vZGUuQWNjZXNzb3JOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5BcnJheU5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLkFzc2lnbm1lbnROb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5CbG9ja05vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLkNvbmRpdGlvbmFsTm9kZScsICdleHByZXNzaW9uLm5vZGUuQ29uc3RhbnROb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5JbmRleE5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLkZ1bmN0aW9uQXNzaWdubWVudE5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLkZ1bmN0aW9uTm9kZScsICdleHByZXNzaW9uLm5vZGUuTm9kZScsICdleHByZXNzaW9uLm5vZGUuT2JqZWN0Tm9kZScsICdleHByZXNzaW9uLm5vZGUuT3BlcmF0b3JOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5QYXJlbnRoZXNpc05vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLlJhbmdlTm9kZScsICdleHByZXNzaW9uLm5vZGUuUmVsYXRpb25hbE5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLlN5bWJvbE5vZGUnLCAnanNvbi5yZXZpdmVyJywgJ2Vycm9yLkFyZ3VtZW50c0Vycm9yJywgJ2Vycm9yLkRpbWVuc2lvbkVycm9yJywgJ2Vycm9yLkluZGV4RXJyb3InXTsKICBtb3ZlZE5hbWVzLmZvckVhY2goZnVuY3Rpb24gKGZ1bGxOYW1lKSB7CiAgICB2YXIgcGFydHMgPSBmdWxsTmFtZS5zcGxpdCgnLicpOwogICAgdmFyIHBhdGggPSBPYmplY3QoYXJyYXlbImoiIC8qIGluaXRpYWwgKi9dKShwYXJ0cyk7CiAgICB2YXIgbmFtZSA9IE9iamVjdChhcnJheVsibCIgLyogbGFzdCAqL10pKHBhcnRzKTsKICAgIHZhciBvYmogPSBPYmplY3QodXRpbHNfb2JqZWN0WyJrIiAvKiB0cmF2ZXJzZSAqL10pKG1hdGgsIHBhdGgpOwogICAgT2JqZWN0KHV0aWxzX29iamVjdFsiaCIgLyogbGF6eSAqL10pKG9iaiwgbmFtZSwgZnVuY3Rpb24gKCkgewogICAgICBPYmplY3QobG9nWyJhIiAvKiB3YXJuT25jZSAqL10pKCJtYXRoLiIuY29uY2F0KGZ1bGxOYW1lLCAiIGlzIG1vdmVkIHRvIG1hdGguIikuY29uY2F0KG5hbWUsICIgaW4gdjYuMC4wLiAiKSArICdQbGVhc2UgdXNlIHRoZSBuZXcgbG9jYXRpb24gaW5zdGVhZC4nKTsKICAgICAgcmV0dXJuIG1hdGhbbmFtZV07CiAgICB9KTsKICB9KTsKICBPYmplY3QodXRpbHNfb2JqZWN0WyJoIiAvKiBsYXp5ICovXSkobWF0aC5leHByZXNzaW9uLCAnZG9jcycsIGZ1bmN0aW9uICgpIHsKICAgIHRocm93IG5ldyBFcnJvcignbWF0aC5leHByZXNzaW9uLmRvY3MgaGFzIGJlZW4gbW92ZWQuICcgKyAnUGxlYXNlIGltcG9ydCB2aWEgImltcG9ydCB7IGRvY3MgfSBmcm9tIFwnbWF0aGpzXCciJyk7CiAgfSk7CiAgbWF0aC5Bcmd1bWVudHNFcnJvciA9IEFyZ3VtZW50c0Vycm9yWyJhIiAvKiBBcmd1bWVudHNFcnJvciAqL107CiAgbWF0aC5EaW1lbnNpb25FcnJvciA9IERpbWVuc2lvbkVycm9yWyJhIiAvKiBEaW1lbnNpb25FcnJvciAqL107CiAgbWF0aC5JbmRleEVycm9yID0gSW5kZXhFcnJvclsiYSIgLyogSW5kZXhFcnJvciAqL107CiAgcmV0dXJuIG1hdGg7Cn0KCi8qKiovIH0pCi8qKioqKiovIF0pOwp9KTs=]]></data>
	</file>
	<file>
	  <filename>/js/dev/smart.core.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKIGpTbWFydCBKYXZhc2NyaXB0IHRlbXBsYXRlIGVuZ2luZSwgYSBwb3J0IG9mIFNtYXJ0eSBQSFAgdG8gSmF2YXNjcmlwdAoKIGh0dHBzOi8vZ2l0aHViLmNvbS9taXJvc2huaWtvdi9qc21hcnQKCiBDb3B5cmlnaHQgMjAxNiwgTWF4IE1pcm9zaG5pa292IDxtaXJvc2huaWtvdiBhdCBnbWFpbCBkb3QgY29tPiAKCiBqU21hcnQgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiovCihmdW5jdGlvbigpe2Z1bmN0aW9uIEIoYSxjKXtmb3IodmFyIGI9MTtiPGFyZ3VtZW50cy5sZW5ndGg7KytiKWZvcih2YXIgZCBpbiBhcmd1bWVudHNbYl0pYVtkXT1hcmd1bWVudHNbYl1bZF07cmV0dXJuIGF9ZnVuY3Rpb24gRShhKXt2YXIgYz0wLGI7Zm9yKGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiZjKys7cmV0dXJuIGN9ZnVuY3Rpb24gQyhhLGMpe2lmKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKXJldHVybiBhLmluZGV4T2YoYyk7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDsrK2IpaWYoYVtiXT09PWMpcmV0dXJuIGI7cmV0dXJuLTF9ZnVuY3Rpb24gSihhKXtyZXR1cm4gYS5yZXBsYWNlKC9cXHQvLCJcdCIpLnJlcGxhY2UoL1xcbi8sIlxuIikucmVwbGFjZSgvXFwoWyciXFxdKS9nLCIkMSIpfWZ1bmN0aW9uIHkoYSl7cmV0dXJuIEooYS5yZXBsYWNlKC9eWyciXSguKilbJyJdJC8sIiQxIikpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX1mdW5jdGlvbiB1KGEsYyl7Zm9yKHZhciBiPQowLGQ9MCxlPWYucHJvdG90eXBlLmxlZnRfZGVsaW1pdGVyLGc9Zi5wcm90b3R5cGUucmlnaHRfZGVsaW1pdGVyLGg9Zi5wcm90b3R5cGUuYXV0b19saXRlcmFsLEs9L15ccyooLispXHMqJC9pLEs9YT9SZWdFeHAoIl5cXHMqKCIrYSsiKVxccyokIiwiaSIpOkssbD0wO2w8Yy5sZW5ndGg7KytsKWlmKGMuc3Vic3RyKGwsZS5sZW5ndGgpPT1lKWgmJmwrMTxjLmxlbmd0aCYmYy5zdWJzdHIobCsxLDEpLm1hdGNoKC9ccy8pfHwoYnx8KGM9Yy5zbGljZShsKSxkKz1wYXJzZUludChsKSxsPTApLCsrYik7ZWxzZSBpZihjLnN1YnN0cihsLGcubGVuZ3RoKT09ZyYmIShoJiYwPD1sLTEmJmMuc3Vic3RyKGwtMSwxKS5tYXRjaCgvXHMvKSkpe2lmKCEtLWIpe3ZhciBtPWMuc2xpY2UoZS5sZW5ndGgsbCkucmVwbGFjZSgvW1xyXG5dL2csIiAiKS5tYXRjaChLKTtpZihtKXJldHVybiBtLmluZGV4PWQsbVswXT1jLnNsaWNlKDAsbCtnLmxlbmd0aCksbX0wPmImJihiPTApfXJldHVybiBudWxsfWZ1bmN0aW9uIEwoYSwKYyxiKXt2YXIgZD0iIixlPW51bGwsZz1udWxsLGg9MDtkb3tlJiYoaCs9ZVswXS5sZW5ndGgpO2U9dShhLGIpO2lmKCFlKXRocm93IEVycm9yKCJVbmNsb3NlZCB7IitjKyJ9Iik7ZCs9Yi5zbGljZSgwLGUuaW5kZXgpO2grPWUuaW5kZXg7Yj1iLnNsaWNlKGUuaW5kZXgrZVswXS5sZW5ndGgpOyhnPXUoYyxkKSkmJihkPWQuc2xpY2UoZy5pbmRleCtnWzBdLmxlbmd0aCkpfXdoaWxlKGcpO2UuaW5kZXg9aDtyZXR1cm4gZX1mdW5jdGlvbiBGKGEsYyxiLGQpe2Zvcih2YXIgZT0wLGc9dShiLGQpO2c7Zz11KGIsZCkpe3ZhciBoPXUoYSxkKTtpZighaHx8aC5pbmRleD5nLmluZGV4KXJldHVybiBnLmluZGV4Kz1lLGc7ZD1kLnNsaWNlKGguaW5kZXgraFswXS5sZW5ndGgpO2UrPWguaW5kZXgraFswXS5sZW5ndGg7Zz1MKGMsYSxkKTtkPWQuc2xpY2UoZy5pbmRleCtnWzBdLmxlbmd0aCk7ZSs9Zy5pbmRleCtnWzBdLmxlbmd0aH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBSKGEsYyl7aWYoInN0cmluZyI9PQp0eXBlb2YgYSl3aXRoKHtfX2NvZGU6YX0pd2l0aChNKXdpdGgoYyl0cnl7cmV0dXJuIGV2YWwoX19jb2RlKX1jYXRjaChiKXt0aHJvdyBFcnJvcihiLm1lc3NhZ2UrIiBpbiBcbiIrYSk7fXJldHVybiBhfWZ1bmN0aW9uIHooYSxjLGIpe2EubWF0Y2goL1xbXF0kLyk/YlthLnJlcGxhY2UoL1xbXF0kLywiIildLnB1c2goYyk6YlthXT1jfWZ1bmN0aW9uIGsoYSxjKXtmb3IodmFyIGI9dSgiIixhKTtiO2I9dSgiIixhKSl7Yi5pbmRleCYmcShhLnNsaWNlKDAsYi5pbmRleCksYyk7YT1hLnNsaWNlKGIuaW5kZXgrYlswXS5sZW5ndGgpO3ZhciBkPWJbMV0ubWF0Y2goL15ccyooXHcrKSguKikkLyk7aWYoZCl7dmFyIGU9ZFsxXSxkPTI8ZC5sZW5ndGg/ZFsyXS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik6IiI7aWYoZSBpbiBBKXt2YXIgZz1BW2VdLGQ9KCJwYXJzZVBhcmFtcyJpbiBnP2cucGFyc2VQYXJhbXM6dCkoZCk7ImJsb2NrIj09Zy50eXBlPyhhPWEucmVwbGFjZSgvXlxuLywiIiksCmI9TCgiLyIrZSxlKyIgK1tefV0qIixhKSxnLnBhcnNlKGQsYyxhLnNsaWNlKDAsYi5pbmRleCkpLGE9YS5zbGljZShiLmluZGV4K2JbMF0ubGVuZ3RoKSk6KGcucGFyc2UoZCxjKSwiZXh0ZW5kcyI9PWUmJihjPVtdKSk7YT1hLnJlcGxhY2UoL15cbi8sIiIpfWVsc2UgaWYoZSBpbiB2KXtpZihiPXZbZV0sImJsb2NrIj09Yi50eXBlPyhiPUwoIi8iK2UsZSsiICtbXn1dKiIsYSksZD10KGQpLGc9YS5zbGljZSgwLGIuaW5kZXgpLGMucHVzaCh7dHlwZToicGx1Z2luIixuYW1lOmUscGFyYW1zOmQsc3ViVHJlZTprKGcsW10pfSksYT1hLnNsaWNlKGIuaW5kZXgrYlswXS5sZW5ndGgpKToiZnVuY3Rpb24iPT1iLnR5cGUmJihiPXQoZCksYy5wdXNoKHt0eXBlOiJwbHVnaW4iLG5hbWU6ZSxwYXJhbXM6Yn0pKSwiYXBwZW5kIj09ZXx8ImFzc2lnbiI9PWV8fCJjYXB0dXJlIj09ZXx8ImV2YWwiPT1lfHwiaW5jbHVkZSI9PWUpYT1hLnJlcGxhY2UoL15cbi8sIiIpfWVsc2UgQS5leHByZXNzaW9uLnBhcnNlKGJbMV0sCmMpfWVsc2UgZT1BLmV4cHJlc3Npb24ucGFyc2UoYlsxXSxjKSwiYnVpbGQtaW4iPT1lLnR5cGUmJiJvcGVyYXRvciI9PWUubmFtZSYmIj0iPT1lLm9wJiYoYT1hLnJlcGxhY2UoL15cbi8sIiIpKX1hJiZxKGEsYyk7cmV0dXJuIGN9ZnVuY3Rpb24gcShhLGMpe2lmKHEucGFyc2VFbWJlZGRlZFZhcnMpZm9yKHZhciBiPS8oWyRdW1x3QF0rKXxgKFteYF0qKWAvLGQ9YS5tYXRjaChiKTtkO2Q9YS5tYXRjaChiKSljLnB1c2goe3R5cGU6InRleHQiLGRhdGE6YS5zbGljZSgwLGQuaW5kZXgpfSksYy5wdXNoKEQoZFsxXT9kWzFdOmRbMl0pLnRyZWUpLGE9YS5zbGljZShkLmluZGV4K2RbMF0ubGVuZ3RoKTtjLnB1c2goe3R5cGU6InRleHQiLGRhdGE6YX0pO3JldHVybiBjfWZ1bmN0aW9uIFMoYSxjLGIpe2MuX19wYXJzZWQubmFtZT1xKGEsW10pWzBdO2IucHVzaCh7dHlwZToicGx1Z2luIixuYW1lOiJfX2Z1bmMiLHBhcmFtczpjfSk7cmV0dXJuIGJ9ZnVuY3Rpb24gbihhLGMsYixkKXtkLnB1c2goe3R5cGU6ImJ1aWxkLWluIiwKbmFtZToib3BlcmF0b3IiLG9wOmEsb3B0eXBlOmMscHJlY2VkZW5jZTpiLHBhcmFtczp7fX0pfWZ1bmN0aW9uIE4oYSxjLGIpe3ZhciBkPWMudG9rZW47Yj1be3R5cGU6InRleHQiLGRhdGE6Yi5yZXBsYWNlKC9eKFx3KylAKGtleXxpbmRleHxpdGVyYXRpb258Zmlyc3R8bGFzdHxzaG93fHRvdGFsKS9naSwiJDFfXyQyIil9XTtmb3IodmFyIGU9L14oPzpcLnxccyotPlxzKnxcW1xzKikvLGc9YS5tYXRjaChlKTtnO2c9YS5tYXRjaChlKSl7Yy50b2tlbis9Z1swXTthPWEuc2xpY2UoZ1swXS5sZW5ndGgpO3ZhciBoPXt2YWx1ZToiIix0cmVlOltdfTtpZihnWzBdLm1hdGNoKC9cWy8pKXtpZihoPUQoYSkpYy50b2tlbis9aC52YWx1ZSxiLnB1c2goaC50cmVlKSxhPWEuc2xpY2UoaC52YWx1ZS5sZW5ndGgpO2lmKGc9YS5tYXRjaCgvXHMqXF0vKSljLnRva2VuKz1nWzBdLGE9YS5zbGljZShnWzBdLmxlbmd0aCl9ZWxzZXtnPXAuc3RvcDtwLnN0b3A9ITA7aWYoTyhhLGgpKXtjLnRva2VuKz0KaC52YWx1ZTt2YXIgZj1oLnRyZWVbMF07InBsdWdpbiI9PWYudHlwZSYmIl9fZnVuYyI9PWYubmFtZSYmKGYuaGFzT3duZXI9ITApO2IucHVzaChmKTthPWEuc2xpY2UoaC52YWx1ZS5sZW5ndGgpfWVsc2UgaD0hMTtwLnN0b3A9Z31ofHxiLnB1c2goe3R5cGU6InRleHQiLGRhdGE6IiJ9KX1jLnRyZWUucHVzaCh7dHlwZToidmFyIixwYXJ0czpifSk7Yy52YWx1ZSs9Yy50b2tlbi5zdWJzdHIoZC5sZW5ndGgpO1AoYy50b2tlbik7cmV0dXJuIGF9ZnVuY3Rpb24gUChhKXt9ZnVuY3Rpb24gcChhLGMpe2lmKCFwLnN0b3Ape3ZhciBiPWEubWF0Y2goL15cfChcdyspLyk7aWYoYil7Yy52YWx1ZSs9YlswXTt2YXIgZD0iZGVmYXVsdCI9PWJbMV0/Il9fZGVmYXVsdFZhbHVlIjoiX18iK2JbMV07YT1hLnNsaWNlKGJbMF0ubGVuZ3RoKS5yZXBsYWNlKC9eXHMrLywiIik7cC5zdG9wPSEwO2Zvcih2YXIgYj1bXSxlPWEubWF0Y2goL15ccyo6XHMqLyk7ZTtlPWEubWF0Y2goL15ccyo6XHMqLykpYy52YWx1ZSs9CmEuc2xpY2UoMCxlWzBdLmxlbmd0aCksYT1hLnNsaWNlKGVbMF0ubGVuZ3RoKSxlPXt2YWx1ZToiIix0cmVlOltdfSxPKGEsZSk/KGMudmFsdWUrPWUudmFsdWUsYi5wdXNoKGUudHJlZVswXSksYT1hLnNsaWNlKGUudmFsdWUubGVuZ3RoKSk6cSgiIixiKTtwLnN0b3A9ITE7Yi51bnNoaWZ0KGMudHJlZS5wb3AoKSk7Yy50cmVlLnB1c2goUyhkLHtfX3BhcnNlZDpifSxbXSlbMF0pO3AoYSxjKX19fWZ1bmN0aW9uIE8oYSxjKXtpZighYSlyZXR1cm4hMTtpZihhLnN1YnN0cigwLGYucHJvdG90eXBlLmxlZnRfZGVsaW1pdGVyLmxlbmd0aCk9PWYucHJvdG90eXBlLmxlZnRfZGVsaW1pdGVyKXt2YXIgYj11KCIiLGEpO2lmKGIpcmV0dXJuIGMudG9rZW49YlswXSxjLnZhbHVlKz1iWzBdLGsoYlswXSxjLnRyZWUpLHAoYS5zbGljZShjLnZhbHVlLmxlbmd0aCksYyksITB9Zm9yKGI9MDtiPEcubGVuZ3RoOysrYilpZihhLm1hdGNoKEdbYl0ucmUpKXJldHVybiBjLnRva2VuPVJlZ0V4cC5sYXN0TWF0Y2gsCmMudmFsdWUrPVJlZ0V4cC5sYXN0TWF0Y2gsR1tiXS5wYXJzZShjLGEuc2xpY2UoYy50b2tlbi5sZW5ndGgpKSwhMDtyZXR1cm4hMX1mdW5jdGlvbiBUKGEsYyxiKXt2YXIgZD1jW2FdO2lmKCJvcGVyYXRvciI9PWQubmFtZSYmZC5wcmVjZWRlbmNlPT1iJiYhZC5wYXJhbXMuX19wYXJzZWQpe2lmKCJiaW5hcnkiPT1kLm9wdHlwZSlyZXR1cm4gZC5wYXJhbXMuX19wYXJzZWQ9W2NbYS0xXSxjW2ErMV1dLGMuc3BsaWNlKGEtMSwzLGQpLCEwO2lmKCJwb3N0LXVuYXJ5Ij09ZC5vcHR5cGUpcmV0dXJuIGQucGFyYW1zLl9fcGFyc2VkPVtjW2EtMV1dLGMuc3BsaWNlKGEtMSwyLGQpLCEwO2QucGFyYW1zLl9fcGFyc2VkPVtjW2ErMV1dO2Muc3BsaWNlKGEsMixkKX1yZXR1cm4hMX1mdW5jdGlvbiBVKGEpe2Zvcih2YXIgYz0wLGM9MDtjPGEubGVuZ3RoOysrYylhW2NdaW5zdGFuY2VvZiBBcnJheSYmKGFbY109VShhW2NdKSk7Zm9yKHZhciBiPTE7MTQ+YjsrK2IpaWYoMj09Ynx8MTA9PWIpZm9yKGM9CmEubGVuZ3RoOzA8YzstLWMpYy09VChjLTEsYSxiKTtlbHNlIGZvcihjPTA7YzxhLmxlbmd0aDsrK2MpYy09VChjLGEsYik7cmV0dXJuIGFbMF19ZnVuY3Rpb24gRChhKXtmb3IodmFyIGM9e3ZhbHVlOiIiLHRyZWU6W119O08oYS5zbGljZShjLnZhbHVlLmxlbmd0aCksYyk7KTtpZighYy50cmVlLmxlbmd0aClyZXR1cm4hMTtjLnRyZWU9VShjLnRyZWUpO3JldHVybiBjfWZ1bmN0aW9uIHQoYSxjLGIpe3ZhciBkPWEucmVwbGFjZSgvXG4vZywiICIpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKSxlPVtdO2UuX19wYXJzZWQ9W107YT0iIjtpZighZClyZXR1cm4gZTtjfHwoYz0vXlxzKy8sYj0vXihcdyspXHMqPVxzKi8pO2Zvcig7ZDspe3ZhciBnPW51bGw7aWYoYil7dmFyIGg9ZC5tYXRjaChiKTtoJiYoZz15KGhbMV0pLGErPWQuc2xpY2UoMCxoWzBdLmxlbmd0aCksZD1kLnNsaWNlKGhbMF0ubGVuZ3RoKSl9aD1EKGQpO2lmKCFoKWJyZWFrO2c/KGVbZ109aC52YWx1ZSxlLl9fcGFyc2VkW2ddPQpoLnRyZWUpOihlLnB1c2goaC52YWx1ZSksZS5fX3BhcnNlZC5wdXNoKGgudHJlZSkpO2ErPWQuc2xpY2UoMCxoLnZhbHVlLmxlbmd0aCk7ZD1kLnNsaWNlKGgudmFsdWUubGVuZ3RoKTtpZihnPWQubWF0Y2goYykpYSs9ZC5zbGljZSgwLGdbMF0ubGVuZ3RoKSxkPWQuc2xpY2UoZ1swXS5sZW5ndGgpO2Vsc2UgYnJlYWt9ZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBhfTtyZXR1cm4gZX1mdW5jdGlvbiBzKGEsYyl7dmFyIGI9W10sZDtmb3IoZCBpbiBhLl9fcGFyc2VkKWlmKGEuX19wYXJzZWQuaGFzT3duUHJvcGVydHkoZCkpe3ZhciBlPW0oW2EuX19wYXJzZWRbZF1dLGMpOyJzdHJpbmciPT10eXBlb2YgZSYmZS5tYXRjaCgvXlsxLTldXGR7MCwxNH0kLykmJiFpc05hTihlKSYmKGU9cGFyc2VJbnQoZSwxMCkpO2JbZF09ZX1iLl9fZ2V0PWZ1bmN0aW9uKGEsYyxkKXtpZihhIGluIGImJiJ1bmRlZmluZWQiIT10eXBlb2YgYlthXSYmImZ1bmN0aW9uIiE9dHlwZW9mIGJbYV0pcmV0dXJuIGJbYV07CmlmKCJ1bmRlZmluZWQiIT10eXBlb2YgZCYmInVuZGVmaW5lZCIhPXR5cGVvZiBiW2RdKXJldHVybiBiW2RdO2lmKG51bGw9PT1jKXRocm93IEVycm9yKCJUaGUgcmVxdWlyZWQgYXR0cmlidXRlICciK2ErIicgaXMgbWlzc2luZyIpO3JldHVybiBjfTtyZXR1cm4gYn1mdW5jdGlvbiB3KGEsYyxiKXtmb3IodmFyIGQ9YyxlPSIiLGc9MDtnPGEucGFydHMubGVuZ3RoOysrZyl7dmFyIGg9YS5wYXJ0c1tnXTtpZigicGx1Z2luIj09aC50eXBlJiYiX19mdW5jIj09aC5uYW1lJiZoLmhhc093bmVyKWMuX19vd25lcj1kLGQ9bShbYS5wYXJ0c1tnXV0sYyksZGVsZXRlIGMuX19vd25lcjtlbHNle2U9bShbaF0sYyk7ZSBpbiBjLnNtYXJ0eS5zZWN0aW9uJiYidGV4dCI9PWgudHlwZSYmInNtYXJ0eSIhPW0oW2EucGFydHNbMF1dLGMpJiYoZT1jLnNtYXJ0eS5zZWN0aW9uW2VdLmluZGV4KTshZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBiJiZkIGluc3RhbmNlb2YgQXJyYXkmJihlPWQubGVuZ3RoKTsKInVuZGVmaW5lZCIhPXR5cGVvZiBiJiZnPT1hLnBhcnRzLmxlbmd0aC0xJiYoZFtlXT1iKTtpZighKCJvYmplY3QiPT10eXBlb2YgZCYmbnVsbCE9PWQmJmUgaW4gZCkpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgYilyZXR1cm4gYjtkW2VdPXt9fWQ9ZFtlXX19cmV0dXJuIGR9ZnVuY3Rpb24gbShhLGMpe2Zvcih2YXIgYj0iIixkPTA7ZDxhLmxlbmd0aDsrK2Qpe3ZhciBlPSIiLGc9YVtkXTtpZigidGV4dCI9PWcudHlwZSllPWcuZGF0YTtlbHNlIGlmKCJ2YXIiPT1nLnR5cGUpZT13KGcsYyk7ZWxzZSBpZigiYnVpbGQtaW4iPT1nLnR5cGUpZT1BW2cubmFtZV0ucHJvY2VzcyhnLGMpO2Vsc2UgaWYoInBsdWdpbiI9PWcudHlwZSl7dmFyIGg9dltnLm5hbWVdO2lmKCJibG9jayI9PWgudHlwZSl7dmFyIGY9e3ZhbHVlOiEwfTtmb3IoaC5wcm9jZXNzKHMoZy5wYXJhbXMsYyksIiIsYyxmKTtmLnZhbHVlOylmLnZhbHVlPSExLGUrPWgucHJvY2VzcyhzKGcucGFyYW1zLGMpLG0oZy5zdWJUcmVlLApjKSxjLGYpfWVsc2UiZnVuY3Rpb24iPT1oLnR5cGUmJihlPWgucHJvY2VzcyhzKGcucGFyYW1zLGMpLGMpKX0iYm9vbGVhbiI9PXR5cGVvZiBlJiYoZT1lPyIxIjoiIik7aWYoMT09YS5sZW5ndGgpcmV0dXJuIGU7Yis9bnVsbCE9PWU/ZToiIjtpZihjLnNtYXJ0eVsiY29udGludWUiXXx8Yy5zbWFydHlbImJyZWFrIl0pYnJlYWt9cmV0dXJuIGJ9ZnVuY3Rpb24gVihhLGMsYil7aWYoIWImJmEgaW4gUSljLmxlbmd0aD0wLEIoYyxRW2FdKTtlbHNle3ZhciBkPWYucHJvdG90eXBlLmdldFRlbXBsYXRlKGEpO2lmKCJzdHJpbmciIT10eXBlb2YgZCl0aHJvdyBFcnJvcigiTm8gdGVtcGxhdGUgZm9yICIrYSk7ayhIKGYucHJvdG90eXBlLmZpbHRlcnNfZ2xvYmFsLnByZSxXKGQucmVwbGFjZSgvXHJcbi9nLCJcbiIpKSksYyk7Ynx8KFFbYV09Yyl9cmV0dXJuIGN9ZnVuY3Rpb24gVyhhKXtmb3IodmFyIGM9IiIsYj1SZWdFeHAoZi5wcm90b3R5cGUubGVmdF9kZWxpbWl0ZXIrIlxcKiIpLGQ9ClJlZ0V4cCgiXFwqIitmLnByb3RvdHlwZS5yaWdodF9kZWxpbWl0ZXIpLGU9YS5tYXRjaChiKTtlO2U9YS5tYXRjaChiKSl7Yys9YS5zbGljZSgwLGUuaW5kZXgpO2E9YS5zbGljZShlLmluZGV4K2VbMF0ubGVuZ3RoKTtlPWEubWF0Y2goZCk7aWYoIWUpdGhyb3cgRXJyb3IoIlVuY2xvc2VkICIrZi5sZWZ0X2RlbGltaXRlcisiKiIpO2E9YS5zbGljZShlLmluZGV4K2VbMF0ubGVuZ3RoKX1yZXR1cm4gYythfWZ1bmN0aW9uIEgoYSxjKXtmb3IodmFyIGI9MDtiPGEubGVuZ3RoOysrYiljPWFbYl0oYyk7cmV0dXJuIGN9dmFyIEE9e2V4cHJlc3Npb246e3BhcnNlOmZ1bmN0aW9uKGEsYyl7dmFyIGI9RChhKTtjLnB1c2goe3R5cGU6ImJ1aWxkLWluIixuYW1lOiJleHByZXNzaW9uIixleHByZXNzaW9uOmIudHJlZSxwYXJhbXM6dChhLnNsaWNlKGIudmFsdWUubGVuZ3RoKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIikpfSk7cmV0dXJuIGIudHJlZX0scHJvY2VzczpmdW5jdGlvbihhLGMpe3ZhciBiPQpzKGEucGFyYW1zLGMpLGQ9bShbYS5leHByZXNzaW9uXSxjKTtpZigwPkMoYiwibm9maWx0ZXIiKSl7Zm9yKGI9MDtiPGRlZmF1bHRfbW9kaWZpZXJzLmxlbmd0aDsrK2Ipe3ZhciBlPWRlZmF1bHRfbW9kaWZpZXJzW2JdO2UucGFyYW1zLl9fcGFyc2VkWzBdPXt0eXBlOiJ0ZXh0IixkYXRhOmR9O2Q9bShbZV0sYyl9ZXNjYXBlX2h0bWwmJihkPU0uX19lc2NhcGUoZCkpO2Q9SCh2YXJGaWx0ZXJzLGQpO0kubGVuZ3RoJiYoX190PWZ1bmN0aW9uKCl7cmV0dXJuIGR9LGQ9bShJLGMpKX1yZXR1cm4gZH19LG9wZXJhdG9yOntwcm9jZXNzOmZ1bmN0aW9uKGEsYyl7dmFyIGI9cyhhLnBhcmFtcyxjKSxkPWJbMF07aWYoImJpbmFyeSI9PWEub3B0eXBlKXtiPWJbMV07aWYoIj0iPT1hLm9wKXJldHVybiB3KGEucGFyYW1zLl9fcGFyc2VkWzBdLGMsYiksIiI7aWYoYS5vcC5tYXRjaCgvKFwrPXwtPXxcKj18XC89fCU9KS8pKXtkPXcoYS5wYXJhbXMuX19wYXJzZWRbMF0sYyk7c3dpdGNoKGEub3Ape2Nhc2UgIis9IjpkKz0KYjticmVhaztjYXNlICItPSI6ZC09YjticmVhaztjYXNlICIqPSI6ZCo9YjticmVhaztjYXNlICIvPSI6ZC89YjticmVhaztjYXNlICIlPSI6ZCU9Yn1yZXR1cm4gdyhhLnBhcmFtcy5fX3BhcnNlZFswXSxjLGQpfWlmKGEub3AubWF0Y2goL2Rpdi8pKXJldHVybiJkaXYiIT1hLm9wXjA9PWQlYjtpZihhLm9wLm1hdGNoKC9ldmVuLykpcmV0dXJuImV2ZW4iIT1hLm9wXjA9PWQvYiUyO2lmKGEub3AubWF0Y2goL3hvci8pKXJldHVybihkfHxiKSYmIShkJiZiKTtzd2l0Y2goYS5vcCl7Y2FzZSAiPT0iOnJldHVybiBkPT1iO2Nhc2UgIiE9IjpyZXR1cm4gZCE9YjtjYXNlICIrIjpyZXR1cm4gZCtiO2Nhc2UgIi0iOnJldHVybiBkLWI7Y2FzZSAiKiI6cmV0dXJuIGQqYjtjYXNlICIvIjpyZXR1cm4gZC9iO2Nhc2UgIiUiOnJldHVybiBkJWI7Y2FzZSAiJiYiOnJldHVybiBkJiZiO2Nhc2UgInx8IjpyZXR1cm4gZHx8YjtjYXNlICI8IjpyZXR1cm4gZDxiO2Nhc2UgIjw9IjpyZXR1cm4gZDw9CmI7Y2FzZSAiPiI6cmV0dXJuIGQ+YjtjYXNlICI+PSI6cmV0dXJuIGQ+PWI7Y2FzZSAiPT09IjpyZXR1cm4gZD09PWI7Y2FzZSAiIT09IjpyZXR1cm4gZCE9PWJ9fWVsc2V7aWYoIiEiPT1hLm9wKXJldHVybiBkIGluc3RhbmNlb2YgQXJyYXk/IWQubGVuZ3RoOiJvYmplY3QiPT10eXBlb2YgZD8hRShkKToiMCI9PT1kPyEwOiFkOyhiPSJ2YXIiPT1hLnBhcmFtcy5fX3BhcnNlZFswXS50eXBlKSYmKGQ9dyhhLnBhcmFtcy5fX3BhcnNlZFswXSxjKSk7dmFyIGU9ZDtpZigicHJlLXVuYXJ5Ij09YS5vcHR5cGUpe3N3aXRjaChhLm9wKXtjYXNlICItIjplPS1kO2JyZWFrO2Nhc2UgIisrIjplPSsrZDticmVhaztjYXNlICItLSI6ZT0tLWR9YiYmdyhhLnBhcmFtcy5fX3BhcnNlZFswXSxjLGQpfWVsc2V7c3dpdGNoKGEub3Ape2Nhc2UgIisrIjpkKys7YnJlYWs7Y2FzZSAiLS0iOmQtLX13KGEucGFyYW1zLl9fcGFyc2VkWzBdLGMsZCl9cmV0dXJuIGV9fX0sc2VjdGlvbjp7dHlwZToiYmxvY2siLApwYXJzZTpmdW5jdGlvbihhLGMsYil7dmFyIGQ9W10sZT1bXTtjLnB1c2goe3R5cGU6ImJ1aWxkLWluIixuYW1lOiJzZWN0aW9uIixwYXJhbXM6YSxzdWJUcmVlOmQsc3ViVHJlZUVsc2U6ZX0pOyhhPUYoInNlY3Rpb24gW159XSsiLCIvc2VjdGlvbiIsInNlY3Rpb25lbHNlIixiKSk/KGsoYi5zbGljZSgwLGEuaW5kZXgpLGQpLGsoYi5zbGljZShhLmluZGV4K2FbMF0ubGVuZ3RoKS5yZXBsYWNlKC9eW1xyXG5dLywiIiksZSkpOmsoYixkKX0scHJvY2VzczpmdW5jdGlvbihhLGMpe3ZhciBiPXMoYS5wYXJhbXMsYyksZD17fTtjLnNtYXJ0eS5zZWN0aW9uW2IuX19nZXQoIm5hbWUiLG51bGwsMCldPWQ7dmFyIGU9Yi5fX2dldCgic2hvdyIsITApO2Quc2hvdz1lO2lmKCFlKXJldHVybiBtKGEuc3ViVHJlZUVsc2UsYyk7dmFyIGU9cGFyc2VJbnQoYi5fX2dldCgic3RhcnQiLDApKSxnPWIubG9vcCBpbnN0YW5jZW9mIE9iamVjdD9FKGIubG9vcCk6aXNOYU4oYi5sb29wKT8wOnBhcnNlSW50KGIubG9vcCksCmg9cGFyc2VJbnQoYi5fX2dldCgic3RlcCIsMSkpLGI9cGFyc2VJbnQoYi5fX2dldCgibWF4IikpO2lzTmFOKGIpJiYoYj1OdW1iZXIuTUFYX1ZBTFVFKTswPmU/KGUrPWcsMD5lJiYoZT0wKSk6ZT49ZyYmKGU9Zz9nLTE6MCk7Zm9yKHZhciBmPTAsbD1lOzA8PWwmJmw8ZyYmZjxiO2wrPWgsKytmKTtkLnRvdGFsPWY7ZC5sb29wPWY7Zm9yKHZhciBmPTAsaz0iIixsPWU7MDw9bCYmbDxnJiZmPGImJiFjLnNtYXJ0eVsiYnJlYWsiXTtsKz1oLCsrZilkLmZpcnN0PWw9PWUsZC5sYXN0PTA+bCtofHxsK2g+PWcsZC5pbmRleD1sLGQuaW5kZXhfcHJldj1sLWgsZC5pbmRleF9uZXh0PWwraCxkLml0ZXJhdGlvbj1kLnJvd251bT1mKzEsays9bShhLnN1YlRyZWUsYyksYy5zbWFydHlbImNvbnRpbnVlIl09ITE7Yy5zbWFydHlbImJyZWFrIl09ITE7cmV0dXJuIGY/azptKGEuc3ViVHJlZUVsc2UsYyl9fSxzZXRmaWx0ZXI6e3R5cGU6ImJsb2NrIixwYXJzZVBhcmFtczpmdW5jdGlvbihhKXtyZXR1cm5bRCgiX190KCl8IisKYSkudHJlZV19LHBhcnNlOmZ1bmN0aW9uKGEsYyxiKXtjLnB1c2goe3R5cGU6ImJ1aWxkLWluIixuYW1lOiJzZXRmaWx0ZXIiLHBhcmFtczphLHN1YlRyZWU6ayhiLFtdKX0pfSxwcm9jZXNzOmZ1bmN0aW9uKGEsYyl7ST1hLnBhcmFtczt2YXIgYj1tKGEuc3ViVHJlZSxjKTtJPVtdO3JldHVybiBifX0sImZvciI6e3R5cGU6ImJsb2NrIixwYXJzZVBhcmFtczpmdW5jdGlvbihhKXt2YXIgYz1hLm1hdGNoKC9eXHMqXCQoXHcrKVxzKj1ccyooW15cc10rKVxzKnRvXHMqKFteXHNdKylccyooPzpzdGVwXHMqKFteXHNdKykpP1xzKiguKikkLyk7aWYoIWMpdGhyb3cgRXJyb3IoIkludmFsaWQge2Zvcn0gcGFyYW1ldGVyczogIithKTtyZXR1cm4gdCgidmFyTmFtZT0nIitjWzFdKyInIGZyb209IitjWzJdKyIgdG89IitjWzNdKyIgc3RlcD0iKyhjWzRdP2NbNF06IjEiKSsiICIrY1s1XSl9LHBhcnNlOmZ1bmN0aW9uKGEsYyxiKXt2YXIgZD1bXSxlPVtdO2MucHVzaCh7dHlwZToiYnVpbGQtaW4iLApuYW1lOiJmb3IiLHBhcmFtczphLHN1YlRyZWU6ZCxzdWJUcmVlRWxzZTplfSk7KGE9RigiZm9yXFxzW159XSsiLCIvZm9yIiwiZm9yZWxzZSIsYikpPyhrKGIuc2xpY2UoMCxhLmluZGV4KSxkKSxrKGIuc2xpY2UoYS5pbmRleCthWzBdLmxlbmd0aCksZSkpOmsoYixkKX0scHJvY2VzczpmdW5jdGlvbihhLGMpe3ZhciBiPXMoYS5wYXJhbXMsYyksZD1wYXJzZUludChiLl9fZ2V0KCJmcm9tIikpLGU9cGFyc2VJbnQoYi5fX2dldCgidG8iKSksZz1wYXJzZUludChiLl9fZ2V0KCJzdGVwIikpO2lzTmFOKGcpJiYoZz0xKTt2YXIgaD1wYXJzZUludChiLl9fZ2V0KCJtYXgiKSk7aXNOYU4oaCkmJihoPU51bWJlci5NQVhfVkFMVUUpO2Zvcih2YXIgZj0wLGw9IiIsZD1NYXRoLm1pbihNYXRoLmNlaWwoKCgwPGc/ZS1kOmQtZSkrMSkvTWF0aC5hYnMoZykpLGgpLGU9cGFyc2VJbnQoYi5mcm9tKTtmPGQmJiFjLnNtYXJ0eVsiYnJlYWsiXTtlKz1nLCsrZiljW2IudmFyTmFtZV09ZSxsKz1tKGEuc3ViVHJlZSwKYyksYy5zbWFydHlbImNvbnRpbnVlIl09ITE7Yy5zbWFydHlbImJyZWFrIl09ITE7Znx8KGw9bShhLnN1YlRyZWVFbHNlLGMpKTtyZXR1cm4gbH19LCJpZiI6e3R5cGU6ImJsb2NrIixwYXJzZTpmdW5jdGlvbihhLGMsYil7dmFyIGQ9W10sZT1bXTtjLnB1c2goe3R5cGU6ImJ1aWxkLWluIixuYW1lOiJpZiIscGFyYW1zOmEsc3ViVHJlZUlmOmQsc3ViVHJlZUVsc2U6ZX0pOyhhPUYoImlmXFxzK1tefV0rIiwiL2lmIiwiZWxzZVtefV0qIixiKSk/KGsoYi5zbGljZSgwLGEuaW5kZXgpLGQpLGI9Yi5zbGljZShhLmluZGV4K2FbMF0ubGVuZ3RoKSwoZD1hWzFdLm1hdGNoKC9eZWxzZVxzKmlmKC4qKS8pKT9BWyJpZiJdLnBhcnNlKHQoZFsxXSksZSxiLnJlcGxhY2UoL15cbi8sIiIpKTprKGIucmVwbGFjZSgvXlxuLywiIiksZSkpOmsoYixkKX0scHJvY2VzczpmdW5jdGlvbihhLGMpe3ZhciBiPXMoYS5wYXJhbXMsYylbMF07cmV0dXJuIWJ8fGIgaW5zdGFuY2VvZiBBcnJheSYmIWIubGVuZ3RofHwKYiBpbnN0YW5jZW9mIE9iamVjdCYmIUUoYik/bShhLnN1YlRyZWVFbHNlLGMpOm0oYS5zdWJUcmVlSWYsYyl9fSxmb3JlYWNoOnt0eXBlOiJibG9jayIscGFyc2VQYXJhbXM6ZnVuY3Rpb24oYSl7dmFyIGM9YS5tYXRjaCgvXlxzKihbJF0uKylccyphc1xzKlskXShcdyspXHMqKD0+XHMqWyRdKFx3KykpP1xzKiQvaSk7YyYmKGE9ImZyb209IitjWzFdKyIgaXRlbT0iKyhjWzRdfHxjWzJdKSxjWzRdJiYoYSs9IiBrZXk9IitjWzJdKSk7cmV0dXJuIHQoYSl9LHBhcnNlOmZ1bmN0aW9uKGEsYyxiKXt2YXIgZD1bXSxlPVtdO2MucHVzaCh7dHlwZToiYnVpbGQtaW4iLG5hbWU6ImZvcmVhY2giLHBhcmFtczphLHN1YlRyZWU6ZCxzdWJUcmVlRWxzZTplfSk7KGE9RigiZm9yZWFjaFxcc1tefV0rIiwiL2ZvcmVhY2giLCJmb3JlYWNoZWxzZSIsYikpPyhrKGIuc2xpY2UoMCxhLmluZGV4KSxkKSxrKGIuc2xpY2UoYS5pbmRleCthWzBdLmxlbmd0aCkucmVwbGFjZSgvXltcclxuXS8sIiIpLGUpKToKayhiLGQpfSxwcm9jZXNzOmZ1bmN0aW9uKGEsYyl7dmFyIGI9cyhhLnBhcmFtcyxjKSxkPWIuZnJvbTsidW5kZWZpbmVkIj09dHlwZW9mIGQmJihkPVtdKTsib2JqZWN0IiE9dHlwZW9mIGQmJihkPVtkXSk7dmFyIGU9RShkKTtjW2IuaXRlbSsiX190b3RhbCJdPWU7Im5hbWUiaW4gYiYmKGMuc21hcnR5LmZvcmVhY2hbYi5uYW1lXT17fSxjLnNtYXJ0eS5mb3JlYWNoW2IubmFtZV0udG90YWw9ZSk7dmFyIGc9IiIsZj0wLGs7Zm9yKGsgaW4gZClpZihkLmhhc093blByb3BlcnR5KGspKXtpZihjLnNtYXJ0eVsiYnJlYWsiXSlicmVhaztjW2IuaXRlbSsiX19rZXkiXT1pc05hTihrKT9rOnBhcnNlSW50KGspOyJrZXkiaW4gYiYmKGNbYi5rZXldPWNbYi5pdGVtKyJfX2tleSJdKTtjW2IuaXRlbV09ZFtrXTtjW2IuaXRlbSsiX19pbmRleCJdPXBhcnNlSW50KGYpO2NbYi5pdGVtKyJfX2l0ZXJhdGlvbiJdPXBhcnNlSW50KGYrMSk7Y1tiLml0ZW0rIl9fZmlyc3QiXT0wPT09ZjtjW2IuaXRlbSsKIl9fbGFzdCJdPWY9PWUtMTsibmFtZSJpbiBiJiYoYy5zbWFydHkuZm9yZWFjaFtiLm5hbWVdLmluZGV4PXBhcnNlSW50KGYpLGMuc21hcnR5LmZvcmVhY2hbYi5uYW1lXS5pdGVyYXRpb249cGFyc2VJbnQoZisxKSxjLnNtYXJ0eS5mb3JlYWNoW2IubmFtZV0uZmlyc3Q9MD09PWY/MToiIixjLnNtYXJ0eS5mb3JlYWNoW2IubmFtZV0ubGFzdD1mPT1lLTE/MToiIik7KytmO2crPW0oYS5zdWJUcmVlLGMpO2Muc21hcnR5WyJjb250aW51ZSJdPSExfWMuc21hcnR5WyJicmVhayJdPSExO2NbYi5pdGVtKyJfX3Nob3ciXT0wPGY7Yi5uYW1lJiYoYy5zbWFydHkuZm9yZWFjaFtiLm5hbWVdLnNob3c9MDxmPzE6IiIpO3JldHVybiAwPGY/ZzptKGEuc3ViVHJlZUVsc2UsYyl9fSwiZnVuY3Rpb24iOnt0eXBlOiJibG9jayIscGFyc2U6ZnVuY3Rpb24oYSxjLGIpe2M9W107dlt5KGEubmFtZT9hLm5hbWU6YVswXSldPXt0eXBlOiJmdW5jdGlvbiIsc3ViVHJlZTpjLGRlZmF1dFBhcmFtczphLHByb2Nlc3M6ZnVuY3Rpb24oYSwKYil7dmFyIGM9cyh0aGlzLmRlZmF1dFBhcmFtcyxiKTtkZWxldGUgYy5uYW1lO3JldHVybiBtKHRoaXMuc3ViVHJlZSxCKHt9LGIsYyxhKSl9fTtrKGIsYyl9fSxwaHA6e3R5cGU6ImJsb2NrIixwYXJzZTpmdW5jdGlvbihhLGMsYil7fX0sImV4dGVuZHMiOnt0eXBlOiJmdW5jdGlvbiIscGFyc2U6ZnVuY3Rpb24oYSxjKXtjLnNwbGljZSgwLGMubGVuZ3RoKTtWKHkoYS5maWxlP2EuZmlsZTphWzBdKSxjKX19LGJsb2NrOnt0eXBlOiJibG9jayIscGFyc2U6ZnVuY3Rpb24oYSxjLGIpe2MucHVzaCh7dHlwZToiYnVpbGQtaW4iLG5hbWU6ImJsb2NrIixwYXJhbXM6YX0pO2EuYXBwZW5kPTA8PUMoYSwiYXBwZW5kIik7YS5wcmVwZW5kPTA8PUMoYSwicHJlcGVuZCIpO2EuaGlkZT0wPD1DKGEsImhpZGUiKTthLmhhc0NoaWxkPWEuaGFzUGFyZW50PSExO1A9ZnVuY3Rpb24oYil7Yi5tYXRjaCgvXlxzKlskXXNtYXJ0eS5ibG9jay5jaGlsZFxzKiQvKSYmKGEuaGFzQ2hpbGQ9ITApO2IubWF0Y2goL15ccypbJF1zbWFydHkuYmxvY2sucGFyZW50XHMqJC8pJiYKKGEuaGFzUGFyZW50PSEwKX07Yz1rKGIsW10pO1A9ZnVuY3Rpb24oYSl7fTtiPXkoYS5uYW1lP2EubmFtZTphWzBdKTtiIGluIHh8fCh4W2JdPVtdKTt4W2JdLnB1c2goe3RyZWU6YyxwYXJhbXM6YX0pfSxwcm9jZXNzOmZ1bmN0aW9uKGEsYyl7Yy5zbWFydHkuYmxvY2sucGFyZW50PWMuc21hcnR5LmJsb2NrLmNoaWxkPSIiO3ZhciBiPXkoYS5wYXJhbXMubmFtZT9hLnBhcmFtcy5uYW1lOmEucGFyYW1zWzBdKTt0aGlzLnByb2Nlc3NCbG9ja3MoeFtiXSx4W2JdLmxlbmd0aC0xLGMpO3JldHVybiBjLnNtYXJ0eS5ibG9jay5jaGlsZH0scHJvY2Vzc0Jsb2NrczpmdW5jdGlvbihhLGMsYil7aWYoIWMmJmFbY10ucGFyYW1zLmhpZGUpYi5zbWFydHkuYmxvY2suY2hpbGQ9IiI7ZWxzZSBmb3IodmFyIGQ9ITAsZT0hMTswPD1jOy0tYyl7aWYoYVtjXS5wYXJhbXMuaGFzUGFyZW50KXt2YXIgZz1iLnNtYXJ0eS5ibG9jay5jaGlsZDtiLnNtYXJ0eS5ibG9jay5jaGlsZD0iIjt0aGlzLnByb2Nlc3NCbG9ja3MoYSwKYy0xLGIpO2Iuc21hcnR5LmJsb2NrLnBhcmVudD1iLnNtYXJ0eS5ibG9jay5jaGlsZDtiLnNtYXJ0eS5ibG9jay5jaGlsZD1nfXZhciBnPWIuc21hcnR5LmJsb2NrLmNoaWxkLGY9bShhW2NdLnRyZWUsYik7Yi5zbWFydHkuYmxvY2suY2hpbGQ9ZzthW2NdLnBhcmFtcy5oYXNDaGlsZD9iLnNtYXJ0eS5ibG9jay5jaGlsZD1mOmQ/Yi5zbWFydHkuYmxvY2suY2hpbGQ9ZitiLnNtYXJ0eS5ibG9jay5jaGlsZDplJiYoYi5zbWFydHkuYmxvY2suY2hpbGQrPWYpO2Q9YVtjXS5wYXJhbXMuYXBwZW5kO2U9YVtjXS5wYXJhbXMucHJlcGVuZH19fSxzdHJpcDp7dHlwZToiYmxvY2siLHBhcnNlOmZ1bmN0aW9uKGEsYyxiKXtrKGIucmVwbGFjZSgvWyBcdF0qW1xyXG5dK1sgXHRdKi9nLCIiKSxjKX19LGxpdGVyYWw6e3R5cGU6ImJsb2NrIixwYXJzZTpmdW5jdGlvbihhLGMsYil7cShiLGMpfX0sbGRlbGltOnt0eXBlOiJmdW5jdGlvbiIscGFyc2U6ZnVuY3Rpb24oYSxjKXtxKGYucHJvdG90eXBlLmxlZnRfZGVsaW1pdGVyLApjKX19LHJkZWxpbTp7dHlwZToiZnVuY3Rpb24iLHBhcnNlOmZ1bmN0aW9uKGEsYyl7cShmLnByb3RvdHlwZS5yaWdodF9kZWxpbWl0ZXIsYyl9fSwid2hpbGUiOnt0eXBlOiJibG9jayIscGFyc2U6ZnVuY3Rpb24oYSxjLGIpe2MucHVzaCh7dHlwZToiYnVpbGQtaW4iLG5hbWU6IndoaWxlIixwYXJhbXM6YSxzdWJUcmVlOmsoYixbXSl9KX0scHJvY2VzczpmdW5jdGlvbihhLGMpe2Zvcih2YXIgYj0iIjtzKGEucGFyYW1zLGMpWzBdJiYhYy5zbWFydHlbImJyZWFrIl07KWIrPW0oYS5zdWJUcmVlLGMpLGMuc21hcnR5WyJjb250aW51ZSJdPSExO2Muc21hcnR5WyJicmVhayJdPSExO3JldHVybiBifX19LHY9e30sTT17fSxRPXt9LHg9bnVsbCxJPVtdLEc9W3tyZTovXlwkKFtcd0BdKykvLHBhcnNlOmZ1bmN0aW9uKGEsYyl7cChOKGMsYSxSZWdFeHAuJDEpLGEpfX0se3JlOi9eKHRydWV8ZmFsc2UpL2kscGFyc2U6ZnVuY3Rpb24oYSxjKXtxKGEudG9rZW4ubWF0Y2goL3RydWUvaSk/IjEiOgoiIixhLnRyZWUpfX0se3JlOi9eJyhbXidcXF0qKD86XFwuW14nXFxdKikqKScvLHBhcnNlOmZ1bmN0aW9uKGEsYyl7cShKKFJlZ0V4cC4kMSksYS50cmVlKTtwKGMsYSl9fSx7cmU6L14iKFteIlxcXSooPzpcXC5bXiJcXF0qKSopIi8scGFyc2U6ZnVuY3Rpb24oYSxjKXt2YXIgYj1KKFJlZ0V4cC4kMSksZD1iLm1hdGNoKEdbMF0ucmUpO2lmKGQpe3ZhciBlPXt0b2tlbjpkWzBdLHRyZWU6W119O04oYixlLGRbMV0pO2lmKGUudG9rZW4ubGVuZ3RoPT1iLmxlbmd0aCl7YS50cmVlLnB1c2goZS50cmVlWzBdKTtyZXR1cm59fXEucGFyc2VFbWJlZGRlZFZhcnM9ITA7YS50cmVlLnB1c2goe3R5cGU6InBsdWdpbiIsbmFtZToiX19xdW90ZWQiLHBhcmFtczp7X19wYXJzZWQ6ayhiLFtdKX19KTtxLnBhcnNlRW1iZWRkZWRWYXJzPSExO3AoYyxhKX19LHtyZTovXihcdyspXHMqWyhdKFspXT8pLyxwYXJzZTpmdW5jdGlvbihhLGMpe3ZhciBiPVJlZ0V4cC4kMSxkPXQoUmVnRXhwLiQyPyIiOmMsCi9eXHMqLFxzKi8pO1MoYixkLGEudHJlZSk7YS52YWx1ZSs9ZC50b1N0cmluZygpO3AoYy5zbGljZShkLnRvU3RyaW5nKCkubGVuZ3RoKSxhKX19LHtyZTovXlxzKlwoXHMqLyxwYXJzZTpmdW5jdGlvbihhLGMpe3ZhciBiPVtdO2EudHJlZS5wdXNoKGIpO2IucGFyZW50PWEudHJlZTthLnRyZWU9Yn19LHtyZTovXlxzKlwpXHMqLyxwYXJzZTpmdW5jdGlvbihhLGMpe2EudHJlZS5wYXJlbnQmJihhLnRyZWU9YS50cmVlLnBhcmVudCl9fSx7cmU6L15ccyooXCtcK3wtLSlccyovLHBhcnNlOmZ1bmN0aW9uKGEsYyl7YS50cmVlLmxlbmd0aCYmInZhciI9PWEudHJlZVthLnRyZWUubGVuZ3RoLTFdLnR5cGU/bihSZWdFeHAuJDEsInBvc3QtdW5hcnkiLDEsYS50cmVlKTpuKFJlZ0V4cC4kMSwicHJlLXVuYXJ5IiwxLGEudHJlZSl9fSx7cmU6L15ccyooPT09fCE9PXw9PXwhPSlccyovLHBhcnNlOmZ1bmN0aW9uKGEsYyl7bihSZWdFeHAuJDEsImJpbmFyeSIsNixhLnRyZWUpfX0se3JlOi9eXHMrKGVxfG5lfG5lcSlccysvaSwKcGFyc2U6ZnVuY3Rpb24oYSxjKXt2YXIgYj1SZWdFeHAuJDEucmVwbGFjZSgvbmUocSk/LywiIT0iKS5yZXBsYWNlKC9lcS8sIj09Iik7bihiLCJiaW5hcnkiLDYsYS50cmVlKX19LHtyZTovXlxzKiFccyovLHBhcnNlOmZ1bmN0aW9uKGEsYyl7bigiISIsInByZS11bmFyeSIsMixhLnRyZWUpfX0se3JlOi9eXHMrbm90XHMrL2kscGFyc2U6ZnVuY3Rpb24oYSxjKXtuKCIhIiwicHJlLXVuYXJ5IiwyLGEudHJlZSl9fSx7cmU6L15ccyooPXxcKz18LT18XCo9fFwvPXwlPSlccyovLHBhcnNlOmZ1bmN0aW9uKGEsYyl7bihSZWdFeHAuJDEsImJpbmFyeSIsMTAsYS50cmVlKX19LHtyZTovXlxzKihcKnxcL3wlKVxzKi8scGFyc2U6ZnVuY3Rpb24oYSxjKXtuKFJlZ0V4cC4kMSwiYmluYXJ5IiwzLGEudHJlZSl9fSx7cmU6L15ccyttb2RccysvaSxwYXJzZTpmdW5jdGlvbihhLGMpe24oIiUiLCJiaW5hcnkiLDMsYS50cmVlKX19LHtyZTovXlxzKihcK3wtKVxzKi8scGFyc2U6ZnVuY3Rpb24oYSwKYyl7YS50cmVlLmxlbmd0aCYmIm9wZXJhdG9yIiE9YS50cmVlW2EudHJlZS5sZW5ndGgtMV0ubmFtZT9uKFJlZ0V4cC4kMSwiYmluYXJ5Iiw0LGEudHJlZSk6bihSZWdFeHAuJDEsInByZS11bmFyeSIsNCxhLnRyZWUpfX0se3JlOi9eXHMqKDw9fD49fDw+fDx8PilccyovLHBhcnNlOmZ1bmN0aW9uKGEsYyl7bihSZWdFeHAuJDEucmVwbGFjZSgvPD4vLCIhPSIpLCJiaW5hcnkiLDUsYS50cmVlKX19LHtyZTovXlxzKyhsdHxsdGV8bGV8Z3R8Z3RlfGdlKVxzKy9pLHBhcnNlOmZ1bmN0aW9uKGEsYyl7dmFyIGI9UmVnRXhwLiQxLnJlcGxhY2UoL2x0LywiPCIpLnJlcGxhY2UoL2wodCk/ZS8sIjw9IikucmVwbGFjZSgvZ3QvLCI+IikucmVwbGFjZSgvZyh0KT9lLywiPj0iKTtuKGIsImJpbmFyeSIsNSxhLnRyZWUpfX0se3JlOi9eXHMrKGlzXHMrKG5vdFxzKyk/ZGl2XHMrYnkpXHMrL2kscGFyc2U6ZnVuY3Rpb24oYSxjKXtuKFJlZ0V4cC4kMj8iZGl2X25vdCI6ImRpdiIsImJpbmFyeSIsCjcsYS50cmVlKX19LHtyZTovXlxzK2lzXHMrKG5vdFxzKyk/KGV2ZW58b2RkKShccytieVxzKyk/XHMqL2kscGFyc2U6ZnVuY3Rpb24oYSxjKXtuKFJlZ0V4cC4kMT8ib2RkIj09UmVnRXhwLiQyPyJldmVuIjoiZXZlbl9ub3QiOiJvZGQiPT1SZWdFeHAuJDI/ImV2ZW5fbm90IjoiZXZlbiIsImJpbmFyeSIsNyxhLnRyZWUpO1JlZ0V4cC4kM3x8cSgiMSIsYS50cmVlKX19LHtyZTovXlxzKigmJilccyovLHBhcnNlOmZ1bmN0aW9uKGEsYyl7bihSZWdFeHAuJDEsImJpbmFyeSIsOCxhLnRyZWUpfX0se3JlOi9eXHMqKFx8XHwpXHMqLyxwYXJzZTpmdW5jdGlvbihhLGMpe24oUmVnRXhwLiQxLCJiaW5hcnkiLDksYS50cmVlKX19LHtyZTovXlxzK2FuZFxzKy9pLHBhcnNlOmZ1bmN0aW9uKGEsYyl7bigiJiYiLCJiaW5hcnkiLDExLGEudHJlZSl9fSx7cmU6L15ccyt4b3JccysvaSxwYXJzZTpmdW5jdGlvbihhLGMpe24oInhvciIsImJpbmFyeSIsMTIsYS50cmVlKX19LHtyZTovXlxzK29yXHMrL2ksCnBhcnNlOmZ1bmN0aW9uKGEsYyl7bigifHwiLCJiaW5hcnkiLDEzLGEudHJlZSl9fSx7cmU6L14jKFx3KykjLyxwYXJzZTpmdW5jdGlvbihhLGMpe3ZhciBiPXt0b2tlbjoiJHNtYXJ0eSIsdHJlZTpbXX07TigiLmNvbmZpZy4iK1JlZ0V4cC4kMSxiLCJzbWFydHkiKTthLnRyZWUucHVzaChiLnRyZWVbMF0pO3AoYyxhKX19LHtyZTovXlxzKlxbXHMqLyxwYXJzZTpmdW5jdGlvbihhLGMpe3ZhciBiPXQoYywvXlxzKixccyovLC9eKCdbXidcXF0qKD86XFwuW14nXFxdKikqJ3wiW14iXFxdKig/OlxcLlteIlxcXSopKiJ8XHcrKVxzKj0+XHMqLyk7YS50cmVlLnB1c2goe3R5cGU6InBsdWdpbiIsbmFtZToiX19hcnJheSIscGFyYW1zOmJ9KTthLnZhbHVlKz1iLnRvU3RyaW5nKCk7aWYoYj1jLnNsaWNlKGIudG9TdHJpbmcoKS5sZW5ndGgpLm1hdGNoKC9ccypcXS8pKWEudmFsdWUrPWJbMF19fSx7cmU6L15bXGQuXSsvLHBhcnNlOmZ1bmN0aW9uKGEsYyl7cShhLnRva2VuLGEudHJlZSk7cChjLAphKX19LHtyZTovXlx3Ky8scGFyc2U6ZnVuY3Rpb24oYSxjKXtxKGEudG9rZW4sYS50cmVlKTtwKGMsYSl9fV0sZj1mdW5jdGlvbihhKXt0aGlzLnRyZWU9W107dGhpcy50cmVlLmJsb2Nrcz17fTt0aGlzLnNjcmlwdHM9e307dGhpcy5kZWZhdWx0X21vZGlmaWVycz1bXTt0aGlzLmZpbHRlcnM9e3ZhcmlhYmxlOltdLHBvc3Q6W119O3RoaXMuc21hcnR5PXtzbWFydHk6e2Jsb2NrOnt9LCJicmVhayI6ITEsY2FwdHVyZTp7fSwiY29udGludWUiOiExLGNvdW50ZXI6e30sY3ljbGU6e30sZm9yZWFjaDp7fSxzZWN0aW9uOnt9LG5vdzpNYXRoLmZsb29yKChuZXcgRGF0ZSkuZ2V0VGltZSgpLzFFMyksImNvbnN0Ijp7fSxjb25maWc6e30sY3VycmVudF9kaXI6Ii8iLHRlbXBsYXRlOiIiLGxkZWxpbTpmLnByb3RvdHlwZS5sZWZ0X2RlbGltaXRlcixyZGVsaW06Zi5wcm90b3R5cGUucmlnaHRfZGVsaW1pdGVyLHZlcnNpb246IjMuMiJ9fTt4PXRoaXMudHJlZS5ibG9ja3M7ayhIKGYucHJvdG90eXBlLmZpbHRlcnNfZ2xvYmFsLnByZSwKVygobmV3IFN0cmluZyhhP2E6IiIpKS5yZXBsYWNlKC9cclxuL2csIlxuIikpKSx0aGlzLnRyZWUpfTtmLnByb3RvdHlwZS5mZXRjaD1mdW5jdGlvbihhKXt4PXRoaXMudHJlZS5ibG9ja3M7ZXNjYXBlX2h0bWw9dGhpcy5lc2NhcGVfaHRtbDtkZWZhdWx0X21vZGlmaWVycz1mLnByb3RvdHlwZS5kZWZhdWx0X21vZGlmaWVyc19nbG9iYWwuY29uY2F0KHRoaXMuZGVmYXVsdF9tb2RpZmllcnMpO3RoaXMuZGF0YT1CKCJvYmplY3QiPT10eXBlb2YgYT9hOnt9LHRoaXMuc21hcnR5KTt2YXJGaWx0ZXJzPWYucHJvdG90eXBlLmZpbHRlcnNfZ2xvYmFsLnZhcmlhYmxlLmNvbmNhdCh0aGlzLmZpbHRlcnMudmFyaWFibGUpO2E9bSh0aGlzLnRyZWUsdGhpcy5kYXRhKTtmLnByb3RvdHlwZS5kZWJ1Z2dpbmcmJnYuZGVidWcucHJvY2VzcyhbXSx0aGlzLmRhdGEpO3JldHVybiBIKGYucHJvdG90eXBlLmZpbHRlcnNfZ2xvYmFsLnBvc3QuY29uY2F0KHRoaXMuZmlsdGVycy5wb3N0KSxhKX07Zi5wcm90b3R5cGUuZXNjYXBlX2h0bWw9CiExO2YucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luPWZ1bmN0aW9uKGEsYyxiKXsibW9kaWZpZXIiPT1hP01bIl9fIitjXT1iOnZbY109e3R5cGU6YSxwcm9jZXNzOmJ9fTtmLnByb3RvdHlwZS5yZWdpc3RlckZpbHRlcj1mdW5jdGlvbihhLGMpeyh0aGlzLnRyZWU/dGhpcy5maWx0ZXJzOmYucHJvdG90eXBlLmZpbHRlcnNfZ2xvYmFsKVsib3V0cHV0Ij09YT8icG9zdCI6YV0ucHVzaChjKX07Zi5wcm90b3R5cGUuZmlsdGVyc19nbG9iYWw9e3ByZTpbXSx2YXJpYWJsZTpbXSxwb3N0OltdfTtmLnByb3RvdHlwZS5jb25maWdMb2FkPWZ1bmN0aW9uKGEsYyxiKXtiPWI/Yjp0aGlzLmRhdGE7YT1hLnJlcGxhY2UoL1xyXG4vZywiXG4iKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik7Zm9yKHZhciBkPS9eXHMqKD86XFsoW15cXV0rKVxdfCg/OihcdyspWyBcdF0qPVsgXHRdKigiIiJ8J1teJ1xcXG5dKig/OlxcLlteJ1xcXG5dKikqJ3wiW14iXFxcbl0qKD86XFwuW14iXFxcbl0qKSoifFteXG5dKikpKS9tLAplPSIiLGc9YS5tYXRjaChkKTtnO2c9YS5tYXRjaChkKSl7YT1hLnNsaWNlKGcuaW5kZXgrZ1swXS5sZW5ndGgpO2lmKGdbMV0pZT1nWzFdO2Vsc2UgaWYoKCFlfHxlPT1jKSYmIi4iIT1lLnN1YnN0cigwLDEpKWlmKCciIiInPT1nWzNdKXt2YXIgZj1hLm1hdGNoKC8iIiIvKTtmJiYoYi5zbWFydHkuY29uZmlnW2dbMl1dPWEuc2xpY2UoMCxmLmluZGV4KSxhPWEuc2xpY2UoZi5pbmRleCtmWzBdLmxlbmd0aCkpfWVsc2UgYi5zbWFydHkuY29uZmlnW2dbMl1dPXkoZ1szXSk7aWYoZz1hLm1hdGNoKC9cbisvKSlhPWEuc2xpY2UoZy5pbmRleCtnWzBdLmxlbmd0aCk7ZWxzZSBicmVha319O2YucHJvdG90eXBlLmNsZWFyQ29uZmlnPWZ1bmN0aW9uKGEpe2E/ZGVsZXRlIHRoaXMuZGF0YS5zbWFydHkuY29uZmlnW2FdOnRoaXMuZGF0YS5zbWFydHkuY29uZmlnPXt9fTtmLnByb3RvdHlwZS5hZGREZWZhdWx0TW9kaWZpZXI9ZnVuY3Rpb24oYSl7YSBpbnN0YW5jZW9mIEFycmF5fHwoYT1bYV0pOwpmb3IodmFyIGM9MDtjPGEubGVuZ3RoOysrYyl7dmFyIGI9e3ZhbHVlOiIiLHRyZWU6WzBdfTtwKCJ8IithW2NdLGIpOyh0aGlzLnRyZWU/dGhpcy5kZWZhdWx0X21vZGlmaWVyczp0aGlzLmRlZmF1bHRfbW9kaWZpZXJzX2dsb2JhbCkucHVzaChiLnRyZWVbMF0pfX07Zi5wcm90b3R5cGUuZGVmYXVsdF9tb2RpZmllcnNfZ2xvYmFsPVtdO2YucHJvdG90eXBlLmdldFRlbXBsYXRlPWZ1bmN0aW9uKGEpe3Rocm93IEVycm9yKCJObyB0ZW1wbGF0ZSBmb3IgIithKTt9O2YucHJvdG90eXBlLmdldEZpbGU9ZnVuY3Rpb24oYSl7dGhyb3cgRXJyb3IoIk5vIGZpbGUgZm9yICIrYSk7fTtmLnByb3RvdHlwZS5nZXRKYXZhc2NyaXB0PWZ1bmN0aW9uKGEpe3Rocm93IEVycm9yKCJObyBKYXZhc2NyaXB0IGZvciAiK2EpO307Zi5wcm90b3R5cGUuZ2V0Q29uZmlnPWZ1bmN0aW9uKGEpe3Rocm93IEVycm9yKCJObyBjb25maWcgZm9yICIrYSk7fTtmLnByb3RvdHlwZS5hdXRvX2xpdGVyYWw9ITA7Zi5wcm90b3R5cGUubGVmdF9kZWxpbWl0ZXI9CiJ7IjtmLnByb3RvdHlwZS5yaWdodF9kZWxpbWl0ZXI9In0iO2YucHJvdG90eXBlLmRlYnVnZ2luZz0hMTtmLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJfX2FycmF5IixmdW5jdGlvbihhLGMpe3ZhciBiPVtdLGQ7Zm9yKGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiZhW2RdJiYiZnVuY3Rpb24iIT10eXBlb2YgYVtkXSYmKGJbZF09YVtkXSk7cmV0dXJuIGJ9KTtmLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJfX2Z1bmMiLGZ1bmN0aW9uKGEsYyl7Zm9yKHZhciBiPVtdLGQ9e30sZT0wO2U8YS5sZW5ndGg7KytlKWIucHVzaChhLm5hbWUrIl9fcCIrZSksZFthLm5hbWUrIl9fcCIrZV09YVtlXTtyZXR1cm4gUigoIl9fb3duZXIiaW4gYyYmYS5uYW1lIGluIGMuX19vd25lcj8iX19vd25lci4iK2EubmFtZTphLm5hbWUpKyIoIitiLmpvaW4oIiwiKSsiKSIsQih7fSxjLGQpKX0pO2YucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsCiJfX3F1b3RlZCIsZnVuY3Rpb24oYSxjKXtyZXR1cm4gYS5qb2luKCIiKX0pO2YucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsImJyZWFrIixmdW5jdGlvbihhLGMpe2Muc21hcnR5WyJicmVhayJdPSEwO3JldHVybiIifSk7Zi5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImZ1bmN0aW9uIiwiY29udGludWUiLGZ1bmN0aW9uKGEsYyl7Yy5zbWFydHlbImNvbnRpbnVlIl09ITA7cmV0dXJuIiJ9KTtmLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJjYWxsIixmdW5jdGlvbihhLGMpe3ZhciBiPWEuX19nZXQoIm5hbWUiLG51bGwsMCk7ZGVsZXRlIGEubmFtZTt2YXIgZD1hLl9fZ2V0KCJhc3NpZ24iLCExKTtkZWxldGUgYS5hc3NpZ247Yj12W2JdLnByb2Nlc3MoYSxjKTtyZXR1cm4gZD8oeihkLGIsYyksIiIpOmJ9KTtmLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJhcHBlbmQiLGZ1bmN0aW9uKGEsYyl7dmFyIGI9YS5fX2dldCgidmFyIiwKbnVsbCwwKTtiIGluIGMmJmNbYl1pbnN0YW5jZW9mIEFycmF5fHwoY1tiXT1bXSk7dmFyIGQ9YS5fX2dldCgiaW5kZXgiLCExKSxlPWEuX19nZXQoInZhbHVlIixudWxsLDEpOyExPT09ZD9jW2JdLnB1c2goZSk6Y1tiXVtkXT1lO3JldHVybiIifSk7Zi5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImZ1bmN0aW9uIiwiYXNzaWduIixmdW5jdGlvbihhLGMpe3ooYS5fX2dldCgidmFyIixudWxsLDApLGEuX19nZXQoInZhbHVlIixudWxsLDEpLGMpO3JldHVybiIifSk7Zi5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImJsb2NrIiwiY2FwdHVyZSIsZnVuY3Rpb24oYSxjLGIsZCl7YyYmKGM9Yy5yZXBsYWNlKC9eXG4vLCIiKSxiLnNtYXJ0eS5jYXB0dXJlW2EuX19nZXQoIm5hbWUiLCJkZWZhdWx0IiwwKV09YywiYXNzaWduImluIGEmJnooYS5hc3NpZ24sYyxiKSwoYT1hLl9fZ2V0KCJhcHBlbmQiLCExKSkmJihhIGluIGI/YlthXWluc3RhbmNlb2YgQXJyYXkmJmJbYV0ucHVzaChjKTpiW2FdPQpbY10pKTtyZXR1cm4iIn0pO2YucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsImV2YWwiLGZ1bmN0aW9uKGEsYyl7dmFyIGI9W107ayhhLl9fZ2V0KCJ2YXIiLCIiLDApLGIpO2I9bShiLGMpO3JldHVybiJhc3NpZ24iaW4gYT8oeihhLmFzc2lnbixiLGMpLCIiKTpifSk7Zi5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImZ1bmN0aW9uIiwiaW5jbHVkZSIsZnVuY3Rpb24oYSxjKXt2YXIgYj1hLl9fZ2V0KCJmaWxlIixudWxsLDApLGQ9Qih7fSxjLGEpO2Quc21hcnR5LnRlbXBsYXRlPWI7Yj1tKFYoYixbXSwwPD1DKGEsIm5vY2FjaGUiKSksZCk7cmV0dXJuImFzc2lnbiJpbiBhPyh6KGEuYXNzaWduLGIsYyksIiIpOmJ9KTtmLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiYmxvY2siLCJub2NhY2hlIixmdW5jdGlvbihhLGMsYixkKXtyZXR1cm4gY30pO2YucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJibG9jayIsImphdmFzY3JpcHQiLGZ1bmN0aW9uKGEsYyxiLGQpe2IuJHRoaXM9CmI7UihjLGIpO2RlbGV0ZSBiLiR0aGlzO3JldHVybiIifSk7Zi5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImZ1bmN0aW9uIiwiY29uZmlnX2xvYWQiLGZ1bmN0aW9uKGEsYyl7Zi5wcm90b3R5cGUuY29uZmlnTG9hZChmLnByb3RvdHlwZS5nZXRDb25maWcoYS5fX2dldCgiZmlsZSIsbnVsbCwwKSksYS5fX2dldCgic2VjdGlvbiIsIiIsMSksYyk7cmV0dXJuIiJ9KTtmLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLCJkZWZhdWx0VmFsdWUiLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGEmJiJudWxsIiE9YSYmInVuZGVmaW5lZCIhPWE/YTpjP2M6IiJ9KTt2YXIgcj17d2luZG93OiJvYmplY3QiPT10eXBlb2Ygd2luZG93P3dpbmRvdzp7ZG9jdW1lbnQ6e319fTsoZnVuY3Rpb24oYSxjKXsiZnVuY3Rpb24iPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sYyk6Im9iamVjdCI9PT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz0KYygpOmEualNtYXJ0PWMoKX0pKHRoaXMsZnVuY3Rpb24oKXtyZXR1cm4gZn0pO2YucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsImNvdW50ZXIiLGZ1bmN0aW9uKGEsYyl7dmFyIGI9YS5fX2dldCgibmFtZSIsImRlZmF1bHQiKTtpZihiIGluIGMuc21hcnR5LmNvdW50ZXIpe3ZhciBkPWMuc21hcnR5LmNvdW50ZXJbYl07InN0YXJ0ImluIGE/ZC52YWx1ZT1wYXJzZUludChhLnN0YXJ0KTooZC52YWx1ZT1wYXJzZUludChkLnZhbHVlKSxkLnNraXA9cGFyc2VJbnQoZC5za2lwKSxkLnZhbHVlPSJkb3duIj09ZC5kaXJlY3Rpb24/ZC52YWx1ZS1kLnNraXA6ZC52YWx1ZStkLnNraXApO2Quc2tpcD1hLl9fZ2V0KCJza2lwIixkLnNraXApO2QuZGlyZWN0aW9uPWEuX19nZXQoImRpcmVjdGlvbiIsZC5kaXJlY3Rpb24pO2QuYXNzaWduPWEuX19nZXQoImFzc2lnbiIsZC5hc3NpZ24pfWVsc2UgYy5zbWFydHkuY291bnRlcltiXT17dmFsdWU6cGFyc2VJbnQoYS5fX2dldCgic3RhcnQiLAoxKSksc2tpcDpwYXJzZUludChhLl9fZ2V0KCJza2lwIiwxKSksZGlyZWN0aW9uOmEuX19nZXQoImRpcmVjdGlvbiIsInVwIiksYXNzaWduOmEuX19nZXQoImFzc2lnbiIsITEpfTtyZXR1cm4gYy5zbWFydHkuY291bnRlcltiXS5hc3NpZ24/KGNbYy5zbWFydHkuY291bnRlcltiXS5hc3NpZ25dPWMuc21hcnR5LmNvdW50ZXJbYl0udmFsdWUsIiIpOmEuX19nZXQoInByaW50IiwhMCk/Yy5zbWFydHkuY291bnRlcltiXS52YWx1ZToiIn0pO2YucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsImN5Y2xlIixmdW5jdGlvbihhLGMpe3ZhciBiPWEuX19nZXQoIm5hbWUiLCJkZWZhdWx0IiksZD1hLl9fZ2V0KCJyZXNldCIsITEpO2IgaW4gYy5zbWFydHkuY3ljbGV8fChjLnNtYXJ0eS5jeWNsZVtiXT17YXJyOlsiIl0sZGVsaW1pdGVyOmEuX19nZXQoImRlbGltaXRlciIsIiwiKSxpbmRleDowfSxkPSEwKTthLl9fZ2V0KCJkZWxpbWl0ZXIiLCExKSYmKGMuc21hcnR5LmN5Y2xlW2JdLmRlbGltaXRlcj0KYS5kZWxpbWl0ZXIpO3ZhciBlPWEuX19nZXQoInZhbHVlcyIsITEpO2lmKGUpe3ZhciBnPVtdO2lmKGUgaW5zdGFuY2VvZiBPYmplY3QpZm9yKG5tIGluIGUpZy5wdXNoKGVbbm1dKTtlbHNlIGc9ZS5zcGxpdChjLnNtYXJ0eS5jeWNsZVtiXS5kZWxpbWl0ZXIpO2lmKGcubGVuZ3RoIT1jLnNtYXJ0eS5jeWNsZVtiXS5hcnIubGVuZ3RofHxnWzBdIT1jLnNtYXJ0eS5jeWNsZVtiXS5hcnJbMF0pYy5zbWFydHkuY3ljbGVbYl0uYXJyPWcsYy5zbWFydHkuY3ljbGVbYl0uaW5kZXg9MCxkPSEwfWEuX19nZXQoImFkdmFuY2UiLCJ0cnVlIikmJihjLnNtYXJ0eS5jeWNsZVtiXS5pbmRleCs9MSk7aWYoYy5zbWFydHkuY3ljbGVbYl0uaW5kZXg+PWMuc21hcnR5LmN5Y2xlW2JdLmFyci5sZW5ndGh8fGQpYy5zbWFydHkuY3ljbGVbYl0uaW5kZXg9MDtyZXR1cm4gYS5fX2dldCgiYXNzaWduIiwhMSk/KHooYS5hc3NpZ24sYy5zbWFydHkuY3ljbGVbYl0uYXJyW2Muc21hcnR5LmN5Y2xlW2JdLmluZGV4XSwKYyksIiIpOmEuX19nZXQoInByaW50IiwhMCk/Yy5zbWFydHkuY3ljbGVbYl0uYXJyW2Muc21hcnR5LmN5Y2xlW2JdLmluZGV4XToiIn0pO3IuZ2V0X2h0bWxfdHJhbnNsYXRpb25fdGFibGU9ZnVuY3Rpb24oYSxjKXt2YXIgYj17fSxkPXt9LGUsZz17fSxmPXt9LGs9e30sbD17fTtnWzBdPSJIVE1MX1NQRUNJQUxDSEFSUyI7Z1sxXT0iSFRNTF9FTlRJVElFUyI7ZlswXT0iRU5UX05PUVVPVEVTIjtmWzJdPSJFTlRfQ09NUEFUIjtmWzNdPSJFTlRfUVVPVEVTIjtrPWlzTmFOKGEpP2E/YS50b1VwcGVyQ2FzZSgpOiJIVE1MX1NQRUNJQUxDSEFSUyI6Z1thXTtsPWlzTmFOKGMpP2M/Yy50b1VwcGVyQ2FzZSgpOiJFTlRfQ09NUEFUIjpmW2NdO2lmKCJIVE1MX1NQRUNJQUxDSEFSUyIhPT1rJiYiSFRNTF9FTlRJVElFUyIhPT1rKXRocm93IEVycm9yKCJUYWJsZTogIitrKyIgbm90IHN1cHBvcnRlZCIpO2JbIjM4Il09IiZhbXA7IjsiSFRNTF9FTlRJVElFUyI9PT1rJiYoYlsiMTYwIl09IiZuYnNwOyIsCmJbIjE2MSJdPSImaWV4Y2w7IixiWyIxNjIiXT0iJmNlbnQ7IixiWyIxNjMiXT0iJnBvdW5kOyIsYlsiMTY0Il09IiZjdXJyZW47IixiWyIxNjUiXT0iJnllbjsiLGJbIjE2NiJdPSImYnJ2YmFyOyIsYlsiMTY3Il09IiZzZWN0OyIsYlsiMTY4Il09IiZ1bWw7IixiWyIxNjkiXT0iJmNvcHk7IixiWyIxNzAiXT0iJm9yZGY7IixiWyIxNzEiXT0iJmxhcXVvOyIsYlsiMTcyIl09IiZub3Q7IixiWyIxNzMiXT0iJnNoeTsiLGJbIjE3NCJdPSImcmVnOyIsYlsiMTc1Il09IiZtYWNyOyIsYlsiMTc2Il09IiZkZWc7IixiWyIxNzciXT0iJnBsdXNtbjsiLGJbIjE3OCJdPSImc3VwMjsiLGJbIjE3OSJdPSImc3VwMzsiLGJbIjE4MCJdPSImYWN1dGU7IixiWyIxODEiXT0iJm1pY3JvOyIsYlsiMTgyIl09IiZwYXJhOyIsYlsiMTgzIl09IiZtaWRkb3Q7IixiWyIxODQiXT0iJmNlZGlsOyIsYlsiMTg1Il09IiZzdXAxOyIsYlsiMTg2Il09IiZvcmRtOyIsYlsiMTg3Il09IiZyYXF1bzsiLGJbIjE4OCJdPQoiJmZyYWMxNDsiLGJbIjE4OSJdPSImZnJhYzEyOyIsYlsiMTkwIl09IiZmcmFjMzQ7IixiWyIxOTEiXT0iJmlxdWVzdDsiLGJbIjE5MiJdPSImQWdyYXZlOyIsYlsiMTkzIl09IiZBYWN1dGU7IixiWyIxOTQiXT0iJkFjaXJjOyIsYlsiMTk1Il09IiZBdGlsZGU7IixiWyIxOTYiXT0iJkF1bWw7IixiWyIxOTciXT0iJkFyaW5nOyIsYlsiMTk4Il09IiZBRWxpZzsiLGJbIjE5OSJdPSImQ2NlZGlsOyIsYlsiMjAwIl09IiZFZ3JhdmU7IixiWyIyMDEiXT0iJkVhY3V0ZTsiLGJbIjIwMiJdPSImRWNpcmM7IixiWyIyMDMiXT0iJkV1bWw7IixiWyIyMDQiXT0iJklncmF2ZTsiLGJbIjIwNSJdPSImSWFjdXRlOyIsYlsiMjA2Il09IiZJY2lyYzsiLGJbIjIwNyJdPSImSXVtbDsiLGJbIjIwOCJdPSImRVRIOyIsYlsiMjA5Il09IiZOdGlsZGU7IixiWyIyMTAiXT0iJk9ncmF2ZTsiLGJbIjIxMSJdPSImT2FjdXRlOyIsYlsiMjEyIl09IiZPY2lyYzsiLGJbIjIxMyJdPSImT3RpbGRlOyIsYlsiMjE0Il09CiImT3VtbDsiLGJbIjIxNSJdPSImdGltZXM7IixiWyIyMTYiXT0iJk9zbGFzaDsiLGJbIjIxNyJdPSImVWdyYXZlOyIsYlsiMjE4Il09IiZVYWN1dGU7IixiWyIyMTkiXT0iJlVjaXJjOyIsYlsiMjIwIl09IiZVdW1sOyIsYlsiMjIxIl09IiZZYWN1dGU7IixiWyIyMjIiXT0iJlRIT1JOOyIsYlsiMjIzIl09IiZzemxpZzsiLGJbIjIyNCJdPSImYWdyYXZlOyIsYlsiMjI1Il09IiZhYWN1dGU7IixiWyIyMjYiXT0iJmFjaXJjOyIsYlsiMjI3Il09IiZhdGlsZGU7IixiWyIyMjgiXT0iJmF1bWw7IixiWyIyMjkiXT0iJmFyaW5nOyIsYlsiMjMwIl09IiZhZWxpZzsiLGJbIjIzMSJdPSImY2NlZGlsOyIsYlsiMjMyIl09IiZlZ3JhdmU7IixiWyIyMzMiXT0iJmVhY3V0ZTsiLGJbIjIzNCJdPSImZWNpcmM7IixiWyIyMzUiXT0iJmV1bWw7IixiWyIyMzYiXT0iJmlncmF2ZTsiLGJbIjIzNyJdPSImaWFjdXRlOyIsYlsiMjM4Il09IiZpY2lyYzsiLGJbIjIzOSJdPSImaXVtbDsiLGJbIjI0MCJdPQoiJmV0aDsiLGJbIjI0MSJdPSImbnRpbGRlOyIsYlsiMjQyIl09IiZvZ3JhdmU7IixiWyIyNDMiXT0iJm9hY3V0ZTsiLGJbIjI0NCJdPSImb2NpcmM7IixiWyIyNDUiXT0iJm90aWxkZTsiLGJbIjI0NiJdPSImb3VtbDsiLGJbIjI0NyJdPSImZGl2aWRlOyIsYlsiMjQ4Il09IiZvc2xhc2g7IixiWyIyNDkiXT0iJnVncmF2ZTsiLGJbIjI1MCJdPSImdWFjdXRlOyIsYlsiMjUxIl09IiZ1Y2lyYzsiLGJbIjI1MiJdPSImdXVtbDsiLGJbIjI1MyJdPSImeWFjdXRlOyIsYlsiMjU0Il09IiZ0aG9ybjsiLGJbIjI1NSJdPSImeXVtbDsiKTsiRU5UX05PUVVPVEVTIiE9PWwmJihiWyIzNCJdPSImcXVvdDsiKTsiRU5UX1FVT1RFUyI9PT1sJiYoYlsiMzkiXT0iJiMzOTsiKTtiWyI2MCJdPSImbHQ7IjtiWyI2MiJdPSImZ3Q7Ijtmb3IoZSBpbiBiKWIuaGFzT3duUHJvcGVydHkoZSkmJihkW1N0cmluZy5mcm9tQ2hhckNvZGUoZSldPWJbZV0pO3JldHVybiBkfTtyLmh0bWxlbnRpdGllcz1mdW5jdGlvbihhLApjLGIsZCl7dmFyIGU9dGhpcy5nZXRfaHRtbF90cmFuc2xhdGlvbl90YWJsZSgiSFRNTF9FTlRJVElFUyIsYyk7YT1udWxsPT1hPyIiOmErIiI7aWYoIWUpcmV0dXJuITE7YyYmIkVOVF9RVU9URVMiPT09YyYmKGVbIiciXT0iJiMwMzk7Iik7ZD1udWxsPT1kfHwhIWQ7Yz1SZWdFeHAoIiYoPzojXFxkK3wjeFtcXGRhLWZdK3xbYS16QS1aXVtcXGRhLXpdKik7fFsiK09iamVjdC5rZXlzKGUpLmpvaW4oIiIpLnJlcGxhY2UoLyhbKClbXF17fVwtLiorP14kfFwvXFxdKS9nLCJcXCQxIikrIl0iLCJnIik7cmV0dXJuIGEucmVwbGFjZShjLGZ1bmN0aW9uKGEpe3JldHVybiAxPGEubGVuZ3RoP2Q/ZVsiJiJdK2Euc3Vic3RyKDEpOmE6ZVthXX0pfTtyLnJhd3VybGVuY29kZT1mdW5jdGlvbihhKXthPShhKyIiKS50b1N0cmluZygpO3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoYSkucmVwbGFjZSgvIS9nLCIlMjEiKS5yZXBsYWNlKC8nL2csIiUyNyIpLnJlcGxhY2UoL1woL2csIiUyOCIpLnJlcGxhY2UoL1wpL2csCiIlMjkiKS5yZXBsYWNlKC9cKi9nLCIlMkEiKX07ci5iaW4yaGV4PWZ1bmN0aW9uKGEpe3ZhciBjLGIsZD0iIixlO2ErPSIiO2M9MDtmb3IoYj1hLmxlbmd0aDtjPGI7YysrKWU9YS5jaGFyQ29kZUF0KGMpLnRvU3RyaW5nKDE2KSxkKz0yPmUubGVuZ3RoPyIwIitlOmU7cmV0dXJuIGR9O3Iub3JkPWZ1bmN0aW9uKGEpe3ZhciBjPWErIiI7YT1jLmNoYXJDb2RlQXQoMCk7aWYoNTUyOTY8PWEmJjU2MzE5Pj1hKXtpZigxPT09Yy5sZW5ndGgpcmV0dXJuIGE7Yz1jLmNoYXJDb2RlQXQoMSk7cmV0dXJuIDEwMjQqKGEtNTUyOTYpKyhjLTU2MzIwKSs2NTUzNn1yZXR1cm4gYX07Zi5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oIm1vZGlmaWVyIiwiZXNjYXBlIixmdW5jdGlvbihhLGMsYixkKXthPW5ldyBTdHJpbmcoYSk7Yj1ifHwiVVRGLTgiO2Q9InVuZGVmaW5lZCIhPXR5cGVvZiBkP0Jvb2xlYW4oZCk6ITA7c3dpdGNoKGN8fCJodG1sIil7Y2FzZSAiaHRtbCI6cmV0dXJuIGQmJihhPWEucmVwbGFjZSgvJi9nLAoiJmFtcDsiKSksYS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8nL2csIiYjMDM5OyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7Iik7Y2FzZSAiaHRtbGFsbCI6cmV0dXJuIHIuaHRtbGVudGl0aWVzKGEsMyxiKTtjYXNlICJ1cmwiOnJldHVybiByLnJhd3VybGVuY29kZShhKTtjYXNlICJ1cmxwYXRoaW5mbyI6cmV0dXJuIHIucmF3dXJsZW5jb2RlKGEpLnJlcGxhY2UoLyUyRi9nLCIvIik7Y2FzZSAicXVvdGVzIjpyZXR1cm4gYS5yZXBsYWNlKC8oXnxbXlxcXSknL2csIiQxXFwnIik7Y2FzZSAiaGV4IjpjPSIiO2ZvcihiPTA7YjxhLmxlbmd0aDsrK2IpYys9IiUiK3IuYmluMmhleChhLnN1YnN0cihiLDEpKTtyZXR1cm4gYztjYXNlICJoZXhlbnRpdHkiOmM9IiI7Zm9yKGI9MDtiPGEubGVuZ3RoOysrYiljKz0iJiN4IityLmJpbjJoZXgoYS5zdWJzdHIoYiwxKSkudG9VcHBlckNhc2UoKSsiOyI7cmV0dXJuIGM7Y2FzZSAiZGVjZW50aXR5IjpjPQoiIjtmb3IoYj0wO2I8YS5sZW5ndGg7KytiKWMrPSImIyIrci5vcmQoYS5zdWJzdHIoYiwxKSkrIjsiO3JldHVybiBjO2Nhc2UgIm1haWwiOnJldHVybiBhLnJlcGxhY2UoL0AvZywiIFtBVF0gIikucmVwbGFjZSgvWy5dL2csIiBbRE9UXSAiKTtjYXNlICJub25zdGQiOmM9IiI7Zm9yKGI9MDtiPGEubGVuZ3RoOysrYilkPXIub3JkKGEuc3Vic3RyKGIsMSkpLGM9MTI2PD1kP2MrKCImIyIrZCsiOyIpOmMrYS5zdWJzdHIoYiwxKTtyZXR1cm4gYztjYXNlICJqYXZhc2NyaXB0IjpyZXR1cm4gYS5yZXBsYWNlKC9cXC9nLCJcXFxcIikucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC8iL2csJ1xcIicpLnJlcGxhY2UoL1xyL2csIlxcciIpLnJlcGxhY2UoL1xuL2csIlxcbiIpLnJlcGxhY2UoLzxcLy9nLCI8LyIpfXJldHVybiBhfSk7Zi5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oIm1vZGlmaWVyIiwibG93ZXIiLGZ1bmN0aW9uKGEpe3JldHVybihuZXcgU3RyaW5nKGEpKS50b0xvd2VyQ2FzZSgpfSk7CmYucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJtb2RpZmllciIsIm5sMmJyIixmdW5jdGlvbihhKXtyZXR1cm4obmV3IFN0cmluZyhhKSkucmVwbGFjZSgvXG4vZywiPGJyIC8+XG4iKX0pO2YucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJtb2RpZmllciIsInJlZ2V4X3JlcGxhY2UiLGZ1bmN0aW9uKGEsYyxiKXtjPWMubWF0Y2goL14gKlwvKC4qKVwvKC4qKSAqJC8pO3JldHVybihuZXcgU3RyaW5nKGEpKS5yZXBsYWNlKFJlZ0V4cChjWzFdLCJnIisoMTxjLmxlbmd0aD9jWzJdOiIiKSksYil9KTtmLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLCJyZXBsYWNlIixmdW5jdGlvbihhLGMsYil7aWYoIWMpcmV0dXJuIGE7YT1uZXcgU3RyaW5nKGEpO2M9bmV3IFN0cmluZyhjKTtiPW5ldyBTdHJpbmcoYik7Zm9yKHZhciBkPSIiLGU9LTEsZT1hLmluZGV4T2YoYyk7MDw9ZTtlPWEuaW5kZXhPZihjKSlkKz1hLnNsaWNlKDAsZSkrYixlKz1jLmxlbmd0aCxhPWEuc2xpY2UoZSk7CnJldHVybiBkK2F9KTtmLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLCJzdHJpcCIsZnVuY3Rpb24oYSxjKXtjPWM/YzoiICI7cmV0dXJuKG5ldyBTdHJpbmcoYSkpLnJlcGxhY2UoL1tcc10rL2csYyl9KTtmLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLCJzdHJpcF90YWdzIixmdW5jdGlvbihhLGMpe2M9bnVsbD09Yz8hMDpjO3JldHVybihuZXcgU3RyaW5nKGEpKS5yZXBsYWNlKC88W14+XSo/Pi9nLGM/IiAiOiIiKX0pO2YucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJtb2RpZmllciIsInVwcGVyIixmdW5jdGlvbihhKXtyZXR1cm4obmV3IFN0cmluZyhhKSkudG9VcHBlckNhc2UoKX0pfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/js/dev/smart.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKIGpTbWFydCBKYXZhc2NyaXB0IHRlbXBsYXRlIGVuZ2luZSwgYSBwb3J0IG9mIFNtYXJ0eSBQSFAgdG8gSmF2YXNjcmlwdAoKIGh0dHBzOi8vZ2l0aHViLmNvbS9taXJvc2huaWtvdi9qc21hcnQKCiBDb3B5cmlnaHQgMjAxNiwgTWF4IE1pcm9zaG5pa292IDxtaXJvc2huaWtvdiBhdCBnbWFpbCBkb3QgY29tPiAKCiBqU21hcnQgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiovCihmdW5jdGlvbigpe2Z1bmN0aW9uIEgoYSxjKXtmb3IodmFyIGI9MTtiPGFyZ3VtZW50cy5sZW5ndGg7KytiKWZvcih2YXIgZCBpbiBhcmd1bWVudHNbYl0pYVtkXT1hcmd1bWVudHNbYl1bZF07cmV0dXJuIGF9ZnVuY3Rpb24gTChhKXt2YXIgYz0wLGI7Zm9yKGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiZjKys7cmV0dXJuIGN9ZnVuY3Rpb24gSShhLGMpe2lmKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKXJldHVybiBhLmluZGV4T2YoYyk7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDsrK2IpaWYoYVtiXT09PWMpcmV0dXJuIGI7cmV0dXJuLTF9ZnVuY3Rpb24gUShhKXtyZXR1cm4gYS5yZXBsYWNlKC9cXHQvLCJcdCIpLnJlcGxhY2UoL1xcbi8sIlxuIikucmVwbGFjZSgvXFwoWyciXFxdKS9nLCIkMSIpfWZ1bmN0aW9uIEYoYSl7cmV0dXJuIFEoYS5yZXBsYWNlKC9eWyciXSguKilbJyJdJC8sIiQxIikpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX1mdW5jdGlvbiBDKGEsYyl7Zm9yKHZhciBiPQowLGQ9MCxlPWgucHJvdG90eXBlLmxlZnRfZGVsaW1pdGVyLGY9aC5wcm90b3R5cGUucmlnaHRfZGVsaW1pdGVyLGc9aC5wcm90b3R5cGUuYXV0b19saXRlcmFsLG09L15ccyooLispXHMqJC9pLG09YT9SZWdFeHAoIl5cXHMqKCIrYSsiKVxccyokIiwiaSIpOm0sbD0wO2w8Yy5sZW5ndGg7KytsKWlmKGMuc3Vic3RyKGwsZS5sZW5ndGgpPT1lKWcmJmwrMTxjLmxlbmd0aCYmYy5zdWJzdHIobCsxLDEpLm1hdGNoKC9ccy8pfHwoYnx8KGM9Yy5zbGljZShsKSxkKz1wYXJzZUludChsKSxsPTApLCsrYik7ZWxzZSBpZihjLnN1YnN0cihsLGYubGVuZ3RoKT09ZiYmIShnJiYwPD1sLTEmJmMuc3Vic3RyKGwtMSwxKS5tYXRjaCgvXHMvKSkpe2lmKCEtLWIpe3ZhciBrPWMuc2xpY2UoZS5sZW5ndGgsbCkucmVwbGFjZSgvW1xyXG5dL2csIiAiKS5tYXRjaChtKTtpZihrKXJldHVybiBrLmluZGV4PWQsa1swXT1jLnNsaWNlKDAsbCtmLmxlbmd0aCksa30wPmImJihiPTApfXJldHVybiBudWxsfWZ1bmN0aW9uIFIoYSwKYyxiKXt2YXIgZD0iIixlPW51bGwsZj1udWxsLGc9MDtkb3tlJiYoZys9ZVswXS5sZW5ndGgpO2U9QyhhLGIpO2lmKCFlKXRocm93IEVycm9yKCJVbmNsb3NlZCB7IitjKyJ9Iik7ZCs9Yi5zbGljZSgwLGUuaW5kZXgpO2crPWUuaW5kZXg7Yj1iLnNsaWNlKGUuaW5kZXgrZVswXS5sZW5ndGgpOyhmPUMoYyxkKSkmJihkPWQuc2xpY2UoZi5pbmRleCtmWzBdLmxlbmd0aCkpfXdoaWxlKGYpO2UuaW5kZXg9ZztyZXR1cm4gZX1mdW5jdGlvbiBNKGEsYyxiLGQpe2Zvcih2YXIgZT0wLGY9QyhiLGQpO2Y7Zj1DKGIsZCkpe3ZhciBnPUMoYSxkKTtpZighZ3x8Zy5pbmRleD5mLmluZGV4KXJldHVybiBmLmluZGV4Kz1lLGY7ZD1kLnNsaWNlKGcuaW5kZXgrZ1swXS5sZW5ndGgpO2UrPWcuaW5kZXgrZ1swXS5sZW5ndGg7Zj1SKGMsYSxkKTtkPWQuc2xpY2UoZi5pbmRleCtmWzBdLmxlbmd0aCk7ZSs9Zi5pbmRleCtmWzBdLmxlbmd0aH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBTKGEsYyl7aWYoInN0cmluZyI9PQp0eXBlb2YgYSl3aXRoKHtfX2NvZGU6YX0pd2l0aChKKXdpdGgoYyl0cnl7cmV0dXJuIGV2YWwoX19jb2RlKX1jYXRjaChiKXt0aHJvdyBFcnJvcihiLm1lc3NhZ2UrIiBpbiBcbiIrYSk7fXJldHVybiBhfWZ1bmN0aW9uIHkoYSxjLGIpe2EubWF0Y2goL1xbXF0kLyk/YlthLnJlcGxhY2UoL1xbXF0kLywiIildLnB1c2goYyk6YlthXT1jfWZ1bmN0aW9uIHIoYSxjKXtmb3IodmFyIGI9QygiIixhKTtiO2I9QygiIixhKSl7Yi5pbmRleCYmeChhLnNsaWNlKDAsYi5pbmRleCksYyk7YT1hLnNsaWNlKGIuaW5kZXgrYlswXS5sZW5ndGgpO3ZhciBkPWJbMV0ubWF0Y2goL15ccyooXHcrKSguKikkLyk7aWYoZCl7dmFyIGU9ZFsxXSxkPTI8ZC5sZW5ndGg/ZFsyXS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik6IiI7aWYoZSBpbiBHKXt2YXIgZj1HW2VdLGQ9KCJwYXJzZVBhcmFtcyJpbiBmP2YucGFyc2VQYXJhbXM6QSkoZCk7ImJsb2NrIj09Zi50eXBlPyhhPWEucmVwbGFjZSgvXlxuLywiIiksCmI9UigiLyIrZSxlKyIgK1tefV0qIixhKSxmLnBhcnNlKGQsYyxhLnNsaWNlKDAsYi5pbmRleCkpLGE9YS5zbGljZShiLmluZGV4K2JbMF0ubGVuZ3RoKSk6KGYucGFyc2UoZCxjKSwiZXh0ZW5kcyI9PWUmJihjPVtdKSk7YT1hLnJlcGxhY2UoL15cbi8sIiIpfWVsc2UgaWYoZSBpbiBCKXtpZihiPUJbZV0sImJsb2NrIj09Yi50eXBlPyhiPVIoIi8iK2UsZSsiICtbXn1dKiIsYSksZD1BKGQpLGY9YS5zbGljZSgwLGIuaW5kZXgpLGMucHVzaCh7dHlwZToicGx1Z2luIixuYW1lOmUscGFyYW1zOmQsc3ViVHJlZTpyKGYsW10pfSksYT1hLnNsaWNlKGIuaW5kZXgrYlswXS5sZW5ndGgpKToiZnVuY3Rpb24iPT1iLnR5cGUmJihiPUEoZCksYy5wdXNoKHt0eXBlOiJwbHVnaW4iLG5hbWU6ZSxwYXJhbXM6Yn0pKSwiYXBwZW5kIj09ZXx8ImFzc2lnbiI9PWV8fCJjYXB0dXJlIj09ZXx8ImV2YWwiPT1lfHwiaW5jbHVkZSI9PWUpYT1hLnJlcGxhY2UoL15cbi8sIiIpfWVsc2UgRy5leHByZXNzaW9uLnBhcnNlKGJbMV0sCmMpfWVsc2UgZT1HLmV4cHJlc3Npb24ucGFyc2UoYlsxXSxjKSwiYnVpbGQtaW4iPT1lLnR5cGUmJiJvcGVyYXRvciI9PWUubmFtZSYmIj0iPT1lLm9wJiYoYT1hLnJlcGxhY2UoL15cbi8sIiIpKX1hJiZ4KGEsYyk7cmV0dXJuIGN9ZnVuY3Rpb24geChhLGMpe2lmKHgucGFyc2VFbWJlZGRlZFZhcnMpZm9yKHZhciBiPS8oWyRdW1x3QF0rKXxgKFteYF0qKWAvLGQ9YS5tYXRjaChiKTtkO2Q9YS5tYXRjaChiKSljLnB1c2goe3R5cGU6InRleHQiLGRhdGE6YS5zbGljZSgwLGQuaW5kZXgpfSksYy5wdXNoKEsoZFsxXT9kWzFdOmRbMl0pLnRyZWUpLGE9YS5zbGljZShkLmluZGV4K2RbMF0ubGVuZ3RoKTtjLnB1c2goe3R5cGU6InRleHQiLGRhdGE6YX0pO3JldHVybiBjfWZ1bmN0aW9uIFooYSxjLGIpe2MuX19wYXJzZWQubmFtZT14KGEsW10pWzBdO2IucHVzaCh7dHlwZToicGx1Z2luIixuYW1lOiJfX2Z1bmMiLHBhcmFtczpjfSk7cmV0dXJuIGJ9ZnVuY3Rpb24gdChhLGMsYixkKXtkLnB1c2goe3R5cGU6ImJ1aWxkLWluIiwKbmFtZToib3BlcmF0b3IiLG9wOmEsb3B0eXBlOmMscHJlY2VkZW5jZTpiLHBhcmFtczp7fX0pfWZ1bmN0aW9uIFQoYSxjLGIpe3ZhciBkPWMudG9rZW47Yj1be3R5cGU6InRleHQiLGRhdGE6Yi5yZXBsYWNlKC9eKFx3KylAKGtleXxpbmRleHxpdGVyYXRpb258Zmlyc3R8bGFzdHxzaG93fHRvdGFsKS9naSwiJDFfXyQyIil9XTtmb3IodmFyIGU9L14oPzpcLnxccyotPlxzKnxcW1xzKikvLGY9YS5tYXRjaChlKTtmO2Y9YS5tYXRjaChlKSl7Yy50b2tlbis9ZlswXTthPWEuc2xpY2UoZlswXS5sZW5ndGgpO3ZhciBnPXt2YWx1ZToiIix0cmVlOltdfTtpZihmWzBdLm1hdGNoKC9cWy8pKXtpZihnPUsoYSkpYy50b2tlbis9Zy52YWx1ZSxiLnB1c2goZy50cmVlKSxhPWEuc2xpY2UoZy52YWx1ZS5sZW5ndGgpO2lmKGY9YS5tYXRjaCgvXHMqXF0vKSljLnRva2VuKz1mWzBdLGE9YS5zbGljZShmWzBdLmxlbmd0aCl9ZWxzZXtmPXYuc3RvcDt2LnN0b3A9ITA7aWYoVShhLGcpKXtjLnRva2VuKz0KZy52YWx1ZTt2YXIgbT1nLnRyZWVbMF07InBsdWdpbiI9PW0udHlwZSYmIl9fZnVuYyI9PW0ubmFtZSYmKG0uaGFzT3duZXI9ITApO2IucHVzaChtKTthPWEuc2xpY2UoZy52YWx1ZS5sZW5ndGgpfWVsc2UgZz0hMTt2LnN0b3A9Zn1nfHxiLnB1c2goe3R5cGU6InRleHQiLGRhdGE6IiJ9KX1jLnRyZWUucHVzaCh7dHlwZToidmFyIixwYXJ0czpifSk7Yy52YWx1ZSs9Yy50b2tlbi5zdWJzdHIoZC5sZW5ndGgpO1YoYy50b2tlbik7cmV0dXJuIGF9ZnVuY3Rpb24gVihhKXt9ZnVuY3Rpb24gdihhLGMpe2lmKCF2LnN0b3Ape3ZhciBiPWEubWF0Y2goL15cfChcdyspLyk7aWYoYil7Yy52YWx1ZSs9YlswXTt2YXIgZD0iZGVmYXVsdCI9PWJbMV0/Il9fZGVmYXVsdFZhbHVlIjoiX18iK2JbMV07YT1hLnNsaWNlKGJbMF0ubGVuZ3RoKS5yZXBsYWNlKC9eXHMrLywiIik7di5zdG9wPSEwO2Zvcih2YXIgYj1bXSxlPWEubWF0Y2goL15ccyo6XHMqLyk7ZTtlPWEubWF0Y2goL15ccyo6XHMqLykpYy52YWx1ZSs9CmEuc2xpY2UoMCxlWzBdLmxlbmd0aCksYT1hLnNsaWNlKGVbMF0ubGVuZ3RoKSxlPXt2YWx1ZToiIix0cmVlOltdfSxVKGEsZSk/KGMudmFsdWUrPWUudmFsdWUsYi5wdXNoKGUudHJlZVswXSksYT1hLnNsaWNlKGUudmFsdWUubGVuZ3RoKSk6eCgiIixiKTt2LnN0b3A9ITE7Yi51bnNoaWZ0KGMudHJlZS5wb3AoKSk7Yy50cmVlLnB1c2goWihkLHtfX3BhcnNlZDpifSxbXSlbMF0pO3YoYSxjKX19fWZ1bmN0aW9uIFUoYSxjKXtpZighYSlyZXR1cm4hMTtpZihhLnN1YnN0cigwLGgucHJvdG90eXBlLmxlZnRfZGVsaW1pdGVyLmxlbmd0aCk9PWgucHJvdG90eXBlLmxlZnRfZGVsaW1pdGVyKXt2YXIgYj1DKCIiLGEpO2lmKGIpcmV0dXJuIGMudG9rZW49YlswXSxjLnZhbHVlKz1iWzBdLHIoYlswXSxjLnRyZWUpLHYoYS5zbGljZShjLnZhbHVlLmxlbmd0aCksYyksITB9Zm9yKGI9MDtiPE4ubGVuZ3RoOysrYilpZihhLm1hdGNoKE5bYl0ucmUpKXJldHVybiBjLnRva2VuPVJlZ0V4cC5sYXN0TWF0Y2gsCmMudmFsdWUrPVJlZ0V4cC5sYXN0TWF0Y2gsTltiXS5wYXJzZShjLGEuc2xpY2UoYy50b2tlbi5sZW5ndGgpKSwhMDtyZXR1cm4hMX1mdW5jdGlvbiAkKGEsYyxiKXt2YXIgZD1jW2FdO2lmKCJvcGVyYXRvciI9PWQubmFtZSYmZC5wcmVjZWRlbmNlPT1iJiYhZC5wYXJhbXMuX19wYXJzZWQpe2lmKCJiaW5hcnkiPT1kLm9wdHlwZSlyZXR1cm4gZC5wYXJhbXMuX19wYXJzZWQ9W2NbYS0xXSxjW2ErMV1dLGMuc3BsaWNlKGEtMSwzLGQpLCEwO2lmKCJwb3N0LXVuYXJ5Ij09ZC5vcHR5cGUpcmV0dXJuIGQucGFyYW1zLl9fcGFyc2VkPVtjW2EtMV1dLGMuc3BsaWNlKGEtMSwyLGQpLCEwO2QucGFyYW1zLl9fcGFyc2VkPVtjW2ErMV1dO2Muc3BsaWNlKGEsMixkKX1yZXR1cm4hMX1mdW5jdGlvbiBhYShhKXtmb3IodmFyIGM9MCxjPTA7YzxhLmxlbmd0aDsrK2MpYVtjXWluc3RhbmNlb2YgQXJyYXkmJihhW2NdPWFhKGFbY10pKTtmb3IodmFyIGI9MTsxND5iOysrYilpZigyPT1ifHwxMD09Yilmb3IoYz0KYS5sZW5ndGg7MDxjOy0tYyljLT0kKGMtMSxhLGIpO2Vsc2UgZm9yKGM9MDtjPGEubGVuZ3RoOysrYyljLT0kKGMsYSxiKTtyZXR1cm4gYVswXX1mdW5jdGlvbiBLKGEpe2Zvcih2YXIgYz17dmFsdWU6IiIsdHJlZTpbXX07VShhLnNsaWNlKGMudmFsdWUubGVuZ3RoKSxjKTspO2lmKCFjLnRyZWUubGVuZ3RoKXJldHVybiExO2MudHJlZT1hYShjLnRyZWUpO3JldHVybiBjfWZ1bmN0aW9uIEEoYSxjLGIpe3ZhciBkPWEucmVwbGFjZSgvXG4vZywiICIpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKSxlPVtdO2UuX19wYXJzZWQ9W107YT0iIjtpZighZClyZXR1cm4gZTtjfHwoYz0vXlxzKy8sYj0vXihcdyspXHMqPVxzKi8pO2Zvcig7ZDspe3ZhciBmPW51bGw7aWYoYil7dmFyIGc9ZC5tYXRjaChiKTtnJiYoZj1GKGdbMV0pLGErPWQuc2xpY2UoMCxnWzBdLmxlbmd0aCksZD1kLnNsaWNlKGdbMF0ubGVuZ3RoKSl9Zz1LKGQpO2lmKCFnKWJyZWFrO2Y/KGVbZl09Zy52YWx1ZSxlLl9fcGFyc2VkW2ZdPQpnLnRyZWUpOihlLnB1c2goZy52YWx1ZSksZS5fX3BhcnNlZC5wdXNoKGcudHJlZSkpO2ErPWQuc2xpY2UoMCxnLnZhbHVlLmxlbmd0aCk7ZD1kLnNsaWNlKGcudmFsdWUubGVuZ3RoKTtpZihmPWQubWF0Y2goYykpYSs9ZC5zbGljZSgwLGZbMF0ubGVuZ3RoKSxkPWQuc2xpY2UoZlswXS5sZW5ndGgpO2Vsc2UgYnJlYWt9ZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBhfTtyZXR1cm4gZX1mdW5jdGlvbiB6KGEsYyl7dmFyIGI9W10sZDtmb3IoZCBpbiBhLl9fcGFyc2VkKWlmKGEuX19wYXJzZWQuaGFzT3duUHJvcGVydHkoZCkpe3ZhciBlPXEoW2EuX19wYXJzZWRbZF1dLGMpOyJzdHJpbmciPT10eXBlb2YgZSYmZS5tYXRjaCgvXlsxLTldXGR7MCwxNH0kLykmJiFpc05hTihlKSYmKGU9cGFyc2VJbnQoZSwxMCkpO2JbZF09ZX1iLl9fZ2V0PWZ1bmN0aW9uKGEsYyxkKXtpZihhIGluIGImJiJ1bmRlZmluZWQiIT10eXBlb2YgYlthXSYmImZ1bmN0aW9uIiE9dHlwZW9mIGJbYV0pcmV0dXJuIGJbYV07CmlmKCJ1bmRlZmluZWQiIT10eXBlb2YgZCYmInVuZGVmaW5lZCIhPXR5cGVvZiBiW2RdKXJldHVybiBiW2RdO2lmKG51bGw9PT1jKXRocm93IEVycm9yKCJUaGUgcmVxdWlyZWQgYXR0cmlidXRlICciK2ErIicgaXMgbWlzc2luZyIpO3JldHVybiBjfTtyZXR1cm4gYn1mdW5jdGlvbiBEKGEsYyxiKXtmb3IodmFyIGQ9YyxlPSIiLGY9MDtmPGEucGFydHMubGVuZ3RoOysrZil7dmFyIGc9YS5wYXJ0c1tmXTtpZigicGx1Z2luIj09Zy50eXBlJiYiX19mdW5jIj09Zy5uYW1lJiZnLmhhc093bmVyKWMuX19vd25lcj1kLGQ9cShbYS5wYXJ0c1tmXV0sYyksZGVsZXRlIGMuX19vd25lcjtlbHNle2U9cShbZ10sYyk7ZSBpbiBjLnNtYXJ0eS5zZWN0aW9uJiYidGV4dCI9PWcudHlwZSYmInNtYXJ0eSIhPXEoW2EucGFydHNbMF1dLGMpJiYoZT1jLnNtYXJ0eS5zZWN0aW9uW2VdLmluZGV4KTshZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBiJiZkIGluc3RhbmNlb2YgQXJyYXkmJihlPWQubGVuZ3RoKTsKInVuZGVmaW5lZCIhPXR5cGVvZiBiJiZmPT1hLnBhcnRzLmxlbmd0aC0xJiYoZFtlXT1iKTtpZighKCJvYmplY3QiPT10eXBlb2YgZCYmbnVsbCE9PWQmJmUgaW4gZCkpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgYilyZXR1cm4gYjtkW2VdPXt9fWQ9ZFtlXX19cmV0dXJuIGR9ZnVuY3Rpb24gcShhLGMpe2Zvcih2YXIgYj0iIixkPTA7ZDxhLmxlbmd0aDsrK2Qpe3ZhciBlPSIiLGY9YVtkXTtpZigidGV4dCI9PWYudHlwZSllPWYuZGF0YTtlbHNlIGlmKCJ2YXIiPT1mLnR5cGUpZT1EKGYsYyk7ZWxzZSBpZigiYnVpbGQtaW4iPT1mLnR5cGUpZT1HW2YubmFtZV0ucHJvY2VzcyhmLGMpO2Vsc2UgaWYoInBsdWdpbiI9PWYudHlwZSl7dmFyIGc9QltmLm5hbWVdO2lmKCJibG9jayI9PWcudHlwZSl7dmFyIG09e3ZhbHVlOiEwfTtmb3IoZy5wcm9jZXNzKHooZi5wYXJhbXMsYyksIiIsYyxtKTttLnZhbHVlOyltLnZhbHVlPSExLGUrPWcucHJvY2Vzcyh6KGYucGFyYW1zLGMpLHEoZi5zdWJUcmVlLApjKSxjLG0pfWVsc2UiZnVuY3Rpb24iPT1nLnR5cGUmJihlPWcucHJvY2Vzcyh6KGYucGFyYW1zLGMpLGMpKX0iYm9vbGVhbiI9PXR5cGVvZiBlJiYoZT1lPyIxIjoiIik7aWYoMT09YS5sZW5ndGgpcmV0dXJuIGU7Yis9bnVsbCE9PWU/ZToiIjtpZihjLnNtYXJ0eVsiY29udGludWUiXXx8Yy5zbWFydHlbImJyZWFrIl0pYnJlYWt9cmV0dXJuIGJ9ZnVuY3Rpb24gYmEoYSxjLGIpe2lmKCFiJiZhIGluIFcpYy5sZW5ndGg9MCxIKGMsV1thXSk7ZWxzZXt2YXIgZD1oLnByb3RvdHlwZS5nZXRUZW1wbGF0ZShhKTtpZigic3RyaW5nIiE9dHlwZW9mIGQpdGhyb3cgRXJyb3IoIk5vIHRlbXBsYXRlIGZvciAiK2EpO3IoTyhoLnByb3RvdHlwZS5maWx0ZXJzX2dsb2JhbC5wcmUsY2EoZC5yZXBsYWNlKC9cclxuL2csIlxuIikpKSxjKTtifHwoV1thXT1jKX1yZXR1cm4gY31mdW5jdGlvbiBjYShhKXtmb3IodmFyIGM9IiIsYj1SZWdFeHAoaC5wcm90b3R5cGUubGVmdF9kZWxpbWl0ZXIrIlxcKiIpLApkPVJlZ0V4cCgiXFwqIitoLnByb3RvdHlwZS5yaWdodF9kZWxpbWl0ZXIpLGU9YS5tYXRjaChiKTtlO2U9YS5tYXRjaChiKSl7Yys9YS5zbGljZSgwLGUuaW5kZXgpO2E9YS5zbGljZShlLmluZGV4K2VbMF0ubGVuZ3RoKTtlPWEubWF0Y2goZCk7aWYoIWUpdGhyb3cgRXJyb3IoIlVuY2xvc2VkICIraC5sZWZ0X2RlbGltaXRlcisiKiIpO2E9YS5zbGljZShlLmluZGV4K2VbMF0ubGVuZ3RoKX1yZXR1cm4gYythfWZ1bmN0aW9uIE8oYSxjKXtmb3IodmFyIGI9MDtiPGEubGVuZ3RoOysrYiljPWFbYl0oYyk7cmV0dXJuIGN9dmFyIEc9e2V4cHJlc3Npb246e3BhcnNlOmZ1bmN0aW9uKGEsYyl7dmFyIGI9SyhhKTtjLnB1c2goe3R5cGU6ImJ1aWxkLWluIixuYW1lOiJleHByZXNzaW9uIixleHByZXNzaW9uOmIudHJlZSxwYXJhbXM6QShhLnNsaWNlKGIudmFsdWUubGVuZ3RoKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIikpfSk7cmV0dXJuIGIudHJlZX0scHJvY2VzczpmdW5jdGlvbihhLGMpe3ZhciBiPQp6KGEucGFyYW1zLGMpLGQ9cShbYS5leHByZXNzaW9uXSxjKTtpZigwPkkoYiwibm9maWx0ZXIiKSl7Zm9yKGI9MDtiPGRlZmF1bHRfbW9kaWZpZXJzLmxlbmd0aDsrK2Ipe3ZhciBlPWRlZmF1bHRfbW9kaWZpZXJzW2JdO2UucGFyYW1zLl9fcGFyc2VkWzBdPXt0eXBlOiJ0ZXh0IixkYXRhOmR9O2Q9cShbZV0sYyl9ZXNjYXBlX2h0bWwmJihkPUouX19lc2NhcGUoZCkpO2Q9Tyh2YXJGaWx0ZXJzLGQpO1AubGVuZ3RoJiYoX190PWZ1bmN0aW9uKCl7cmV0dXJuIGR9LGQ9cShQLGMpKX1yZXR1cm4gZH19LG9wZXJhdG9yOntwcm9jZXNzOmZ1bmN0aW9uKGEsYyl7dmFyIGI9eihhLnBhcmFtcyxjKSxkPWJbMF07aWYoImJpbmFyeSI9PWEub3B0eXBlKXtiPWJbMV07aWYoIj0iPT1hLm9wKXJldHVybiBEKGEucGFyYW1zLl9fcGFyc2VkWzBdLGMsYiksIiI7aWYoYS5vcC5tYXRjaCgvKFwrPXwtPXxcKj18XC89fCU9KS8pKXtkPUQoYS5wYXJhbXMuX19wYXJzZWRbMF0sYyk7c3dpdGNoKGEub3Ape2Nhc2UgIis9IjpkKz0KYjticmVhaztjYXNlICItPSI6ZC09YjticmVhaztjYXNlICIqPSI6ZCo9YjticmVhaztjYXNlICIvPSI6ZC89YjticmVhaztjYXNlICIlPSI6ZCU9Yn1yZXR1cm4gRChhLnBhcmFtcy5fX3BhcnNlZFswXSxjLGQpfWlmKGEub3AubWF0Y2goL2Rpdi8pKXJldHVybiJkaXYiIT1hLm9wXjA9PWQlYjtpZihhLm9wLm1hdGNoKC9ldmVuLykpcmV0dXJuImV2ZW4iIT1hLm9wXjA9PWQvYiUyO2lmKGEub3AubWF0Y2goL3hvci8pKXJldHVybihkfHxiKSYmIShkJiZiKTtzd2l0Y2goYS5vcCl7Y2FzZSAiPT0iOnJldHVybiBkPT1iO2Nhc2UgIiE9IjpyZXR1cm4gZCE9YjtjYXNlICIrIjpyZXR1cm4gZCtiO2Nhc2UgIi0iOnJldHVybiBkLWI7Y2FzZSAiKiI6cmV0dXJuIGQqYjtjYXNlICIvIjpyZXR1cm4gZC9iO2Nhc2UgIiUiOnJldHVybiBkJWI7Y2FzZSAiJiYiOnJldHVybiBkJiZiO2Nhc2UgInx8IjpyZXR1cm4gZHx8YjtjYXNlICI8IjpyZXR1cm4gZDxiO2Nhc2UgIjw9IjpyZXR1cm4gZDw9CmI7Y2FzZSAiPiI6cmV0dXJuIGQ+YjtjYXNlICI+PSI6cmV0dXJuIGQ+PWI7Y2FzZSAiPT09IjpyZXR1cm4gZD09PWI7Y2FzZSAiIT09IjpyZXR1cm4gZCE9PWJ9fWVsc2V7aWYoIiEiPT1hLm9wKXJldHVybiBkIGluc3RhbmNlb2YgQXJyYXk/IWQubGVuZ3RoOiJvYmplY3QiPT10eXBlb2YgZD8hTChkKToiMCI9PT1kPyEwOiFkOyhiPSJ2YXIiPT1hLnBhcmFtcy5fX3BhcnNlZFswXS50eXBlKSYmKGQ9RChhLnBhcmFtcy5fX3BhcnNlZFswXSxjKSk7dmFyIGU9ZDtpZigicHJlLXVuYXJ5Ij09YS5vcHR5cGUpe3N3aXRjaChhLm9wKXtjYXNlICItIjplPS1kO2JyZWFrO2Nhc2UgIisrIjplPSsrZDticmVhaztjYXNlICItLSI6ZT0tLWR9YiYmRChhLnBhcmFtcy5fX3BhcnNlZFswXSxjLGQpfWVsc2V7c3dpdGNoKGEub3Ape2Nhc2UgIisrIjpkKys7YnJlYWs7Y2FzZSAiLS0iOmQtLX1EKGEucGFyYW1zLl9fcGFyc2VkWzBdLGMsZCl9cmV0dXJuIGV9fX0sc2VjdGlvbjp7dHlwZToiYmxvY2siLApwYXJzZTpmdW5jdGlvbihhLGMsYil7dmFyIGQ9W10sZT1bXTtjLnB1c2goe3R5cGU6ImJ1aWxkLWluIixuYW1lOiJzZWN0aW9uIixwYXJhbXM6YSxzdWJUcmVlOmQsc3ViVHJlZUVsc2U6ZX0pOyhhPU0oInNlY3Rpb24gW159XSsiLCIvc2VjdGlvbiIsInNlY3Rpb25lbHNlIixiKSk/KHIoYi5zbGljZSgwLGEuaW5kZXgpLGQpLHIoYi5zbGljZShhLmluZGV4K2FbMF0ubGVuZ3RoKS5yZXBsYWNlKC9eW1xyXG5dLywiIiksZSkpOnIoYixkKX0scHJvY2VzczpmdW5jdGlvbihhLGMpe3ZhciBiPXooYS5wYXJhbXMsYyksZD17fTtjLnNtYXJ0eS5zZWN0aW9uW2IuX19nZXQoIm5hbWUiLG51bGwsMCldPWQ7dmFyIGU9Yi5fX2dldCgic2hvdyIsITApO2Quc2hvdz1lO2lmKCFlKXJldHVybiBxKGEuc3ViVHJlZUVsc2UsYyk7dmFyIGU9cGFyc2VJbnQoYi5fX2dldCgic3RhcnQiLDApKSxmPWIubG9vcCBpbnN0YW5jZW9mIE9iamVjdD9MKGIubG9vcCk6aXNOYU4oYi5sb29wKT8wOnBhcnNlSW50KGIubG9vcCksCmc9cGFyc2VJbnQoYi5fX2dldCgic3RlcCIsMSkpLGI9cGFyc2VJbnQoYi5fX2dldCgibWF4IikpO2lzTmFOKGIpJiYoYj1OdW1iZXIuTUFYX1ZBTFVFKTswPmU/KGUrPWYsMD5lJiYoZT0wKSk6ZT49ZiYmKGU9Zj9mLTE6MCk7Zm9yKHZhciBtPTAsbD1lOzA8PWwmJmw8ZiYmbTxiO2wrPWcsKyttKTtkLnRvdGFsPW07ZC5sb29wPW07Zm9yKHZhciBtPTAsaz0iIixsPWU7MDw9bCYmbDxmJiZtPGImJiFjLnNtYXJ0eVsiYnJlYWsiXTtsKz1nLCsrbSlkLmZpcnN0PWw9PWUsZC5sYXN0PTA+bCtnfHxsK2c+PWYsZC5pbmRleD1sLGQuaW5kZXhfcHJldj1sLWcsZC5pbmRleF9uZXh0PWwrZyxkLml0ZXJhdGlvbj1kLnJvd251bT1tKzEsays9cShhLnN1YlRyZWUsYyksYy5zbWFydHlbImNvbnRpbnVlIl09ITE7Yy5zbWFydHlbImJyZWFrIl09ITE7cmV0dXJuIG0/azpxKGEuc3ViVHJlZUVsc2UsYyl9fSxzZXRmaWx0ZXI6e3R5cGU6ImJsb2NrIixwYXJzZVBhcmFtczpmdW5jdGlvbihhKXtyZXR1cm5bSygiX190KCl8IisKYSkudHJlZV19LHBhcnNlOmZ1bmN0aW9uKGEsYyxiKXtjLnB1c2goe3R5cGU6ImJ1aWxkLWluIixuYW1lOiJzZXRmaWx0ZXIiLHBhcmFtczphLHN1YlRyZWU6cihiLFtdKX0pfSxwcm9jZXNzOmZ1bmN0aW9uKGEsYyl7UD1hLnBhcmFtczt2YXIgYj1xKGEuc3ViVHJlZSxjKTtQPVtdO3JldHVybiBifX0sImZvciI6e3R5cGU6ImJsb2NrIixwYXJzZVBhcmFtczpmdW5jdGlvbihhKXt2YXIgYz1hLm1hdGNoKC9eXHMqXCQoXHcrKVxzKj1ccyooW15cc10rKVxzKnRvXHMqKFteXHNdKylccyooPzpzdGVwXHMqKFteXHNdKykpP1xzKiguKikkLyk7aWYoIWMpdGhyb3cgRXJyb3IoIkludmFsaWQge2Zvcn0gcGFyYW1ldGVyczogIithKTtyZXR1cm4gQSgidmFyTmFtZT0nIitjWzFdKyInIGZyb209IitjWzJdKyIgdG89IitjWzNdKyIgc3RlcD0iKyhjWzRdP2NbNF06IjEiKSsiICIrY1s1XSl9LHBhcnNlOmZ1bmN0aW9uKGEsYyxiKXt2YXIgZD1bXSxlPVtdO2MucHVzaCh7dHlwZToiYnVpbGQtaW4iLApuYW1lOiJmb3IiLHBhcmFtczphLHN1YlRyZWU6ZCxzdWJUcmVlRWxzZTplfSk7KGE9TSgiZm9yXFxzW159XSsiLCIvZm9yIiwiZm9yZWxzZSIsYikpPyhyKGIuc2xpY2UoMCxhLmluZGV4KSxkKSxyKGIuc2xpY2UoYS5pbmRleCthWzBdLmxlbmd0aCksZSkpOnIoYixkKX0scHJvY2VzczpmdW5jdGlvbihhLGMpe3ZhciBiPXooYS5wYXJhbXMsYyksZD1wYXJzZUludChiLl9fZ2V0KCJmcm9tIikpLGU9cGFyc2VJbnQoYi5fX2dldCgidG8iKSksZj1wYXJzZUludChiLl9fZ2V0KCJzdGVwIikpO2lzTmFOKGYpJiYoZj0xKTt2YXIgZz1wYXJzZUludChiLl9fZ2V0KCJtYXgiKSk7aXNOYU4oZykmJihnPU51bWJlci5NQVhfVkFMVUUpO2Zvcih2YXIgbT0wLGw9IiIsZD1NYXRoLm1pbihNYXRoLmNlaWwoKCgwPGY/ZS1kOmQtZSkrMSkvTWF0aC5hYnMoZikpLGcpLGU9cGFyc2VJbnQoYi5mcm9tKTttPGQmJiFjLnNtYXJ0eVsiYnJlYWsiXTtlKz1mLCsrbSljW2IudmFyTmFtZV09ZSxsKz1xKGEuc3ViVHJlZSwKYyksYy5zbWFydHlbImNvbnRpbnVlIl09ITE7Yy5zbWFydHlbImJyZWFrIl09ITE7bXx8KGw9cShhLnN1YlRyZWVFbHNlLGMpKTtyZXR1cm4gbH19LCJpZiI6e3R5cGU6ImJsb2NrIixwYXJzZTpmdW5jdGlvbihhLGMsYil7dmFyIGQ9W10sZT1bXTtjLnB1c2goe3R5cGU6ImJ1aWxkLWluIixuYW1lOiJpZiIscGFyYW1zOmEsc3ViVHJlZUlmOmQsc3ViVHJlZUVsc2U6ZX0pOyhhPU0oImlmXFxzK1tefV0rIiwiL2lmIiwiZWxzZVtefV0qIixiKSk/KHIoYi5zbGljZSgwLGEuaW5kZXgpLGQpLGI9Yi5zbGljZShhLmluZGV4K2FbMF0ubGVuZ3RoKSwoZD1hWzFdLm1hdGNoKC9eZWxzZVxzKmlmKC4qKS8pKT9HWyJpZiJdLnBhcnNlKEEoZFsxXSksZSxiLnJlcGxhY2UoL15cbi8sIiIpKTpyKGIucmVwbGFjZSgvXlxuLywiIiksZSkpOnIoYixkKX0scHJvY2VzczpmdW5jdGlvbihhLGMpe3ZhciBiPXooYS5wYXJhbXMsYylbMF07cmV0dXJuIWJ8fGIgaW5zdGFuY2VvZiBBcnJheSYmIWIubGVuZ3RofHwKYiBpbnN0YW5jZW9mIE9iamVjdCYmIUwoYik/cShhLnN1YlRyZWVFbHNlLGMpOnEoYS5zdWJUcmVlSWYsYyl9fSxmb3JlYWNoOnt0eXBlOiJibG9jayIscGFyc2VQYXJhbXM6ZnVuY3Rpb24oYSl7dmFyIGM9YS5tYXRjaCgvXlxzKihbJF0uKylccyphc1xzKlskXShcdyspXHMqKD0+XHMqWyRdKFx3KykpP1xzKiQvaSk7YyYmKGE9ImZyb209IitjWzFdKyIgaXRlbT0iKyhjWzRdfHxjWzJdKSxjWzRdJiYoYSs9IiBrZXk9IitjWzJdKSk7cmV0dXJuIEEoYSl9LHBhcnNlOmZ1bmN0aW9uKGEsYyxiKXt2YXIgZD1bXSxlPVtdO2MucHVzaCh7dHlwZToiYnVpbGQtaW4iLG5hbWU6ImZvcmVhY2giLHBhcmFtczphLHN1YlRyZWU6ZCxzdWJUcmVlRWxzZTplfSk7KGE9TSgiZm9yZWFjaFxcc1tefV0rIiwiL2ZvcmVhY2giLCJmb3JlYWNoZWxzZSIsYikpPyhyKGIuc2xpY2UoMCxhLmluZGV4KSxkKSxyKGIuc2xpY2UoYS5pbmRleCthWzBdLmxlbmd0aCkucmVwbGFjZSgvXltcclxuXS8sIiIpLGUpKToKcihiLGQpfSxwcm9jZXNzOmZ1bmN0aW9uKGEsYyl7dmFyIGI9eihhLnBhcmFtcyxjKSxkPWIuZnJvbTsidW5kZWZpbmVkIj09dHlwZW9mIGQmJihkPVtdKTsib2JqZWN0IiE9dHlwZW9mIGQmJihkPVtkXSk7dmFyIGU9TChkKTtjW2IuaXRlbSsiX190b3RhbCJdPWU7Im5hbWUiaW4gYiYmKGMuc21hcnR5LmZvcmVhY2hbYi5uYW1lXT17fSxjLnNtYXJ0eS5mb3JlYWNoW2IubmFtZV0udG90YWw9ZSk7dmFyIGY9IiIsZz0wLG07Zm9yKG0gaW4gZClpZihkLmhhc093blByb3BlcnR5KG0pKXtpZihjLnNtYXJ0eVsiYnJlYWsiXSlicmVhaztjW2IuaXRlbSsiX19rZXkiXT1pc05hTihtKT9tOnBhcnNlSW50KG0pOyJrZXkiaW4gYiYmKGNbYi5rZXldPWNbYi5pdGVtKyJfX2tleSJdKTtjW2IuaXRlbV09ZFttXTtjW2IuaXRlbSsiX19pbmRleCJdPXBhcnNlSW50KGcpO2NbYi5pdGVtKyJfX2l0ZXJhdGlvbiJdPXBhcnNlSW50KGcrMSk7Y1tiLml0ZW0rIl9fZmlyc3QiXT0wPT09ZztjW2IuaXRlbSsKIl9fbGFzdCJdPWc9PWUtMTsibmFtZSJpbiBiJiYoYy5zbWFydHkuZm9yZWFjaFtiLm5hbWVdLmluZGV4PXBhcnNlSW50KGcpLGMuc21hcnR5LmZvcmVhY2hbYi5uYW1lXS5pdGVyYXRpb249cGFyc2VJbnQoZysxKSxjLnNtYXJ0eS5mb3JlYWNoW2IubmFtZV0uZmlyc3Q9MD09PWc/MToiIixjLnNtYXJ0eS5mb3JlYWNoW2IubmFtZV0ubGFzdD1nPT1lLTE/MToiIik7KytnO2YrPXEoYS5zdWJUcmVlLGMpO2Muc21hcnR5WyJjb250aW51ZSJdPSExfWMuc21hcnR5WyJicmVhayJdPSExO2NbYi5pdGVtKyJfX3Nob3ciXT0wPGc7Yi5uYW1lJiYoYy5zbWFydHkuZm9yZWFjaFtiLm5hbWVdLnNob3c9MDxnPzE6IiIpO3JldHVybiAwPGc/ZjpxKGEuc3ViVHJlZUVsc2UsYyl9fSwiZnVuY3Rpb24iOnt0eXBlOiJibG9jayIscGFyc2U6ZnVuY3Rpb24oYSxjLGIpe2M9W107QltGKGEubmFtZT9hLm5hbWU6YVswXSldPXt0eXBlOiJmdW5jdGlvbiIsc3ViVHJlZTpjLGRlZmF1dFBhcmFtczphLHByb2Nlc3M6ZnVuY3Rpb24oYSwKYil7dmFyIGM9eih0aGlzLmRlZmF1dFBhcmFtcyxiKTtkZWxldGUgYy5uYW1lO3JldHVybiBxKHRoaXMuc3ViVHJlZSxIKHt9LGIsYyxhKSl9fTtyKGIsYyl9fSxwaHA6e3R5cGU6ImJsb2NrIixwYXJzZTpmdW5jdGlvbihhLGMsYil7fX0sImV4dGVuZHMiOnt0eXBlOiJmdW5jdGlvbiIscGFyc2U6ZnVuY3Rpb24oYSxjKXtjLnNwbGljZSgwLGMubGVuZ3RoKTtiYShGKGEuZmlsZT9hLmZpbGU6YVswXSksYyl9fSxibG9jazp7dHlwZToiYmxvY2siLHBhcnNlOmZ1bmN0aW9uKGEsYyxiKXtjLnB1c2goe3R5cGU6ImJ1aWxkLWluIixuYW1lOiJibG9jayIscGFyYW1zOmF9KTthLmFwcGVuZD0wPD1JKGEsImFwcGVuZCIpO2EucHJlcGVuZD0wPD1JKGEsInByZXBlbmQiKTthLmhpZGU9MDw9SShhLCJoaWRlIik7YS5oYXNDaGlsZD1hLmhhc1BhcmVudD0hMTtWPWZ1bmN0aW9uKGIpe2IubWF0Y2goL15ccypbJF1zbWFydHkuYmxvY2suY2hpbGRccyokLykmJihhLmhhc0NoaWxkPSEwKTtiLm1hdGNoKC9eXHMqWyRdc21hcnR5LmJsb2NrLnBhcmVudFxzKiQvKSYmCihhLmhhc1BhcmVudD0hMCl9O2M9cihiLFtdKTtWPWZ1bmN0aW9uKGEpe307Yj1GKGEubmFtZT9hLm5hbWU6YVswXSk7YiBpbiBFfHwoRVtiXT1bXSk7RVtiXS5wdXNoKHt0cmVlOmMscGFyYW1zOmF9KX0scHJvY2VzczpmdW5jdGlvbihhLGMpe2Muc21hcnR5LmJsb2NrLnBhcmVudD1jLnNtYXJ0eS5ibG9jay5jaGlsZD0iIjt2YXIgYj1GKGEucGFyYW1zLm5hbWU/YS5wYXJhbXMubmFtZTphLnBhcmFtc1swXSk7dGhpcy5wcm9jZXNzQmxvY2tzKEVbYl0sRVtiXS5sZW5ndGgtMSxjKTtyZXR1cm4gYy5zbWFydHkuYmxvY2suY2hpbGR9LHByb2Nlc3NCbG9ja3M6ZnVuY3Rpb24oYSxjLGIpe2lmKCFjJiZhW2NdLnBhcmFtcy5oaWRlKWIuc21hcnR5LmJsb2NrLmNoaWxkPSIiO2Vsc2UgZm9yKHZhciBkPSEwLGU9ITE7MDw9YzstLWMpe2lmKGFbY10ucGFyYW1zLmhhc1BhcmVudCl7dmFyIGY9Yi5zbWFydHkuYmxvY2suY2hpbGQ7Yi5zbWFydHkuYmxvY2suY2hpbGQ9IiI7dGhpcy5wcm9jZXNzQmxvY2tzKGEsCmMtMSxiKTtiLnNtYXJ0eS5ibG9jay5wYXJlbnQ9Yi5zbWFydHkuYmxvY2suY2hpbGQ7Yi5zbWFydHkuYmxvY2suY2hpbGQ9Zn12YXIgZj1iLnNtYXJ0eS5ibG9jay5jaGlsZCxnPXEoYVtjXS50cmVlLGIpO2Iuc21hcnR5LmJsb2NrLmNoaWxkPWY7YVtjXS5wYXJhbXMuaGFzQ2hpbGQ/Yi5zbWFydHkuYmxvY2suY2hpbGQ9ZzpkP2Iuc21hcnR5LmJsb2NrLmNoaWxkPWcrYi5zbWFydHkuYmxvY2suY2hpbGQ6ZSYmKGIuc21hcnR5LmJsb2NrLmNoaWxkKz1nKTtkPWFbY10ucGFyYW1zLmFwcGVuZDtlPWFbY10ucGFyYW1zLnByZXBlbmR9fX0sc3RyaXA6e3R5cGU6ImJsb2NrIixwYXJzZTpmdW5jdGlvbihhLGMsYil7cihiLnJlcGxhY2UoL1sgXHRdKltcclxuXStbIFx0XSovZywiIiksYyl9fSxsaXRlcmFsOnt0eXBlOiJibG9jayIscGFyc2U6ZnVuY3Rpb24oYSxjLGIpe3goYixjKX19LGxkZWxpbTp7dHlwZToiZnVuY3Rpb24iLHBhcnNlOmZ1bmN0aW9uKGEsYyl7eChoLnByb3RvdHlwZS5sZWZ0X2RlbGltaXRlciwKYyl9fSxyZGVsaW06e3R5cGU6ImZ1bmN0aW9uIixwYXJzZTpmdW5jdGlvbihhLGMpe3goaC5wcm90b3R5cGUucmlnaHRfZGVsaW1pdGVyLGMpfX0sIndoaWxlIjp7dHlwZToiYmxvY2siLHBhcnNlOmZ1bmN0aW9uKGEsYyxiKXtjLnB1c2goe3R5cGU6ImJ1aWxkLWluIixuYW1lOiJ3aGlsZSIscGFyYW1zOmEsc3ViVHJlZTpyKGIsW10pfSl9LHByb2Nlc3M6ZnVuY3Rpb24oYSxjKXtmb3IodmFyIGI9IiI7eihhLnBhcmFtcyxjKVswXSYmIWMuc21hcnR5WyJicmVhayJdOyliKz1xKGEuc3ViVHJlZSxjKSxjLnNtYXJ0eVsiY29udGludWUiXT0hMTtjLnNtYXJ0eVsiYnJlYWsiXT0hMTtyZXR1cm4gYn19fSxCPXt9LEo9e30sVz17fSxFPW51bGwsWD1udWxsLFA9W10sTj1be3JlOi9eXCQoW1x3QF0rKS8scGFyc2U6ZnVuY3Rpb24oYSxjKXt2KFQoYyxhLFJlZ0V4cC4kMSksYSl9fSx7cmU6L14odHJ1ZXxmYWxzZSkvaSxwYXJzZTpmdW5jdGlvbihhLGMpe3goYS50b2tlbi5tYXRjaCgvdHJ1ZS9pKT8KIjEiOiIiLGEudHJlZSl9fSx7cmU6L14nKFteJ1xcXSooPzpcXC5bXidcXF0qKSopJy8scGFyc2U6ZnVuY3Rpb24oYSxjKXt4KFEoUmVnRXhwLiQxKSxhLnRyZWUpO3YoYyxhKX19LHtyZTovXiIoW14iXFxdKig/OlxcLlteIlxcXSopKikiLyxwYXJzZTpmdW5jdGlvbihhLGMpe3ZhciBiPVEoUmVnRXhwLiQxKSxkPWIubWF0Y2goTlswXS5yZSk7aWYoZCl7dmFyIGU9e3Rva2VuOmRbMF0sdHJlZTpbXX07VChiLGUsZFsxXSk7aWYoZS50b2tlbi5sZW5ndGg9PWIubGVuZ3RoKXthLnRyZWUucHVzaChlLnRyZWVbMF0pO3JldHVybn19eC5wYXJzZUVtYmVkZGVkVmFycz0hMDthLnRyZWUucHVzaCh7dHlwZToicGx1Z2luIixuYW1lOiJfX3F1b3RlZCIscGFyYW1zOntfX3BhcnNlZDpyKGIsW10pfX0pO3gucGFyc2VFbWJlZGRlZFZhcnM9ITE7dihjLGEpfX0se3JlOi9eKFx3KylccypbKF0oWyldPykvLHBhcnNlOmZ1bmN0aW9uKGEsYyl7dmFyIGI9UmVnRXhwLiQxLGQ9QShSZWdFeHAuJDI/CiIiOmMsL15ccyosXHMqLyk7WihiLGQsYS50cmVlKTthLnZhbHVlKz1kLnRvU3RyaW5nKCk7dihjLnNsaWNlKGQudG9TdHJpbmcoKS5sZW5ndGgpLGEpfX0se3JlOi9eXHMqXChccyovLHBhcnNlOmZ1bmN0aW9uKGEsYyl7dmFyIGI9W107YS50cmVlLnB1c2goYik7Yi5wYXJlbnQ9YS50cmVlO2EudHJlZT1ifX0se3JlOi9eXHMqXClccyovLHBhcnNlOmZ1bmN0aW9uKGEsYyl7YS50cmVlLnBhcmVudCYmKGEudHJlZT1hLnRyZWUucGFyZW50KX19LHtyZTovXlxzKihcK1wrfC0tKVxzKi8scGFyc2U6ZnVuY3Rpb24oYSxjKXthLnRyZWUubGVuZ3RoJiYidmFyIj09YS50cmVlW2EudHJlZS5sZW5ndGgtMV0udHlwZT90KFJlZ0V4cC4kMSwicG9zdC11bmFyeSIsMSxhLnRyZWUpOnQoUmVnRXhwLiQxLCJwcmUtdW5hcnkiLDEsYS50cmVlKX19LHtyZTovXlxzKig9PT18IT09fD09fCE9KVxzKi8scGFyc2U6ZnVuY3Rpb24oYSxjKXt0KFJlZ0V4cC4kMSwiYmluYXJ5Iiw2LGEudHJlZSl9fSx7cmU6L15ccysoZXF8bmV8bmVxKVxzKy9pLApwYXJzZTpmdW5jdGlvbihhLGMpe3ZhciBiPVJlZ0V4cC4kMS5yZXBsYWNlKC9uZShxKT8vLCIhPSIpLnJlcGxhY2UoL2VxLywiPT0iKTt0KGIsImJpbmFyeSIsNixhLnRyZWUpfX0se3JlOi9eXHMqIVxzKi8scGFyc2U6ZnVuY3Rpb24oYSxjKXt0KCIhIiwicHJlLXVuYXJ5IiwyLGEudHJlZSl9fSx7cmU6L15ccytub3RccysvaSxwYXJzZTpmdW5jdGlvbihhLGMpe3QoIiEiLCJwcmUtdW5hcnkiLDIsYS50cmVlKX19LHtyZTovXlxzKig9fFwrPXwtPXxcKj18XC89fCU9KVxzKi8scGFyc2U6ZnVuY3Rpb24oYSxjKXt0KFJlZ0V4cC4kMSwiYmluYXJ5IiwxMCxhLnRyZWUpfX0se3JlOi9eXHMqKFwqfFwvfCUpXHMqLyxwYXJzZTpmdW5jdGlvbihhLGMpe3QoUmVnRXhwLiQxLCJiaW5hcnkiLDMsYS50cmVlKX19LHtyZTovXlxzK21vZFxzKy9pLHBhcnNlOmZ1bmN0aW9uKGEsYyl7dCgiJSIsImJpbmFyeSIsMyxhLnRyZWUpfX0se3JlOi9eXHMqKFwrfC0pXHMqLyxwYXJzZTpmdW5jdGlvbihhLApjKXthLnRyZWUubGVuZ3RoJiYib3BlcmF0b3IiIT1hLnRyZWVbYS50cmVlLmxlbmd0aC0xXS5uYW1lP3QoUmVnRXhwLiQxLCJiaW5hcnkiLDQsYS50cmVlKTp0KFJlZ0V4cC4kMSwicHJlLXVuYXJ5Iiw0LGEudHJlZSl9fSx7cmU6L15ccyooPD18Pj18PD58PHw+KVxzKi8scGFyc2U6ZnVuY3Rpb24oYSxjKXt0KFJlZ0V4cC4kMS5yZXBsYWNlKC88Pi8sIiE9IiksImJpbmFyeSIsNSxhLnRyZWUpfX0se3JlOi9eXHMrKGx0fGx0ZXxsZXxndHxndGV8Z2UpXHMrL2kscGFyc2U6ZnVuY3Rpb24oYSxjKXt2YXIgYj1SZWdFeHAuJDEucmVwbGFjZSgvbHQvLCI8IikucmVwbGFjZSgvbCh0KT9lLywiPD0iKS5yZXBsYWNlKC9ndC8sIj4iKS5yZXBsYWNlKC9nKHQpP2UvLCI+PSIpO3QoYiwiYmluYXJ5Iiw1LGEudHJlZSl9fSx7cmU6L15ccysoaXNccysobm90XHMrKT9kaXZccytieSlccysvaSxwYXJzZTpmdW5jdGlvbihhLGMpe3QoUmVnRXhwLiQyPyJkaXZfbm90IjoiZGl2IiwiYmluYXJ5IiwKNyxhLnRyZWUpfX0se3JlOi9eXHMraXNccysobm90XHMrKT8oZXZlbnxvZGQpKFxzK2J5XHMrKT9ccyovaSxwYXJzZTpmdW5jdGlvbihhLGMpe3QoUmVnRXhwLiQxPyJvZGQiPT1SZWdFeHAuJDI/ImV2ZW4iOiJldmVuX25vdCI6Im9kZCI9PVJlZ0V4cC4kMj8iZXZlbl9ub3QiOiJldmVuIiwiYmluYXJ5Iiw3LGEudHJlZSk7UmVnRXhwLiQzfHx4KCIxIixhLnRyZWUpfX0se3JlOi9eXHMqKCYmKVxzKi8scGFyc2U6ZnVuY3Rpb24oYSxjKXt0KFJlZ0V4cC4kMSwiYmluYXJ5Iiw4LGEudHJlZSl9fSx7cmU6L15ccyooXHxcfClccyovLHBhcnNlOmZ1bmN0aW9uKGEsYyl7dChSZWdFeHAuJDEsImJpbmFyeSIsOSxhLnRyZWUpfX0se3JlOi9eXHMrYW5kXHMrL2kscGFyc2U6ZnVuY3Rpb24oYSxjKXt0KCImJiIsImJpbmFyeSIsMTEsYS50cmVlKX19LHtyZTovXlxzK3hvclxzKy9pLHBhcnNlOmZ1bmN0aW9uKGEsYyl7dCgieG9yIiwiYmluYXJ5IiwxMixhLnRyZWUpfX0se3JlOi9eXHMrb3JccysvaSwKcGFyc2U6ZnVuY3Rpb24oYSxjKXt0KCJ8fCIsImJpbmFyeSIsMTMsYS50cmVlKX19LHtyZTovXiMoXHcrKSMvLHBhcnNlOmZ1bmN0aW9uKGEsYyl7dmFyIGI9e3Rva2VuOiIkc21hcnR5Iix0cmVlOltdfTtUKCIuY29uZmlnLiIrUmVnRXhwLiQxLGIsInNtYXJ0eSIpO2EudHJlZS5wdXNoKGIudHJlZVswXSk7dihjLGEpfX0se3JlOi9eXHMqXFtccyovLHBhcnNlOmZ1bmN0aW9uKGEsYyl7dmFyIGI9QShjLC9eXHMqLFxzKi8sL14oJ1teJ1xcXSooPzpcXC5bXidcXF0qKSonfCJbXiJcXF0qKD86XFwuW14iXFxdKikqInxcdyspXHMqPT5ccyovKTthLnRyZWUucHVzaCh7dHlwZToicGx1Z2luIixuYW1lOiJfX2FycmF5IixwYXJhbXM6Yn0pO2EudmFsdWUrPWIudG9TdHJpbmcoKTtpZihiPWMuc2xpY2UoYi50b1N0cmluZygpLmxlbmd0aCkubWF0Y2goL1xzKlxdLykpYS52YWx1ZSs9YlswXX19LHtyZTovXltcZC5dKy8scGFyc2U6ZnVuY3Rpb24oYSxjKXt4KGEudG9rZW4sYS50cmVlKTt2KGMsCmEpfX0se3JlOi9eXHcrLyxwYXJzZTpmdW5jdGlvbihhLGMpe3goYS50b2tlbixhLnRyZWUpO3YoYyxhKX19XSxoPWZ1bmN0aW9uKGEpe3RoaXMudHJlZT1bXTt0aGlzLnRyZWUuYmxvY2tzPXt9O3RoaXMuc2NyaXB0cz17fTt0aGlzLmRlZmF1bHRfbW9kaWZpZXJzPVtdO3RoaXMuZmlsdGVycz17dmFyaWFibGU6W10scG9zdDpbXX07dGhpcy5zbWFydHk9e3NtYXJ0eTp7YmxvY2s6e30sImJyZWFrIjohMSxjYXB0dXJlOnt9LCJjb250aW51ZSI6ITEsY291bnRlcjp7fSxjeWNsZTp7fSxmb3JlYWNoOnt9LHNlY3Rpb246e30sbm93Ok1hdGguZmxvb3IoKG5ldyBEYXRlKS5nZXRUaW1lKCkvMUUzKSwiY29uc3QiOnt9LGNvbmZpZzp7fSxjdXJyZW50X2RpcjoiLyIsdGVtcGxhdGU6IiIsbGRlbGltOmgucHJvdG90eXBlLmxlZnRfZGVsaW1pdGVyLHJkZWxpbTpoLnByb3RvdHlwZS5yaWdodF9kZWxpbWl0ZXIsdmVyc2lvbjoiMy4yIn19O0U9dGhpcy50cmVlLmJsb2NrcztyKE8oaC5wcm90b3R5cGUuZmlsdGVyc19nbG9iYWwucHJlLApjYSgobmV3IFN0cmluZyhhP2E6IiIpKS5yZXBsYWNlKC9cclxuL2csIlxuIikpKSx0aGlzLnRyZWUpfTtoLnByb3RvdHlwZS5mZXRjaD1mdW5jdGlvbihhKXtFPXRoaXMudHJlZS5ibG9ja3M7WD10aGlzLnNjcmlwdHM7ZXNjYXBlX2h0bWw9dGhpcy5lc2NhcGVfaHRtbDtkZWZhdWx0X21vZGlmaWVycz1oLnByb3RvdHlwZS5kZWZhdWx0X21vZGlmaWVyc19nbG9iYWwuY29uY2F0KHRoaXMuZGVmYXVsdF9tb2RpZmllcnMpO3RoaXMuZGF0YT1IKCJvYmplY3QiPT10eXBlb2YgYT9hOnt9LHRoaXMuc21hcnR5KTt2YXJGaWx0ZXJzPWgucHJvdG90eXBlLmZpbHRlcnNfZ2xvYmFsLnZhcmlhYmxlLmNvbmNhdCh0aGlzLmZpbHRlcnMudmFyaWFibGUpO2E9cSh0aGlzLnRyZWUsdGhpcy5kYXRhKTtoLnByb3RvdHlwZS5kZWJ1Z2dpbmcmJkIuZGVidWcucHJvY2VzcyhbXSx0aGlzLmRhdGEpO3JldHVybiBPKGgucHJvdG90eXBlLmZpbHRlcnNfZ2xvYmFsLnBvc3QuY29uY2F0KHRoaXMuZmlsdGVycy5wb3N0KSwKYSl9O2gucHJvdG90eXBlLmVzY2FwZV9odG1sPSExO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luPWZ1bmN0aW9uKGEsYyxiKXsibW9kaWZpZXIiPT1hP0pbIl9fIitjXT1iOkJbY109e3R5cGU6YSxwcm9jZXNzOmJ9fTtoLnByb3RvdHlwZS5yZWdpc3RlckZpbHRlcj1mdW5jdGlvbihhLGMpeyh0aGlzLnRyZWU/dGhpcy5maWx0ZXJzOmgucHJvdG90eXBlLmZpbHRlcnNfZ2xvYmFsKVsib3V0cHV0Ij09YT8icG9zdCI6YV0ucHVzaChjKX07aC5wcm90b3R5cGUuZmlsdGVyc19nbG9iYWw9e3ByZTpbXSx2YXJpYWJsZTpbXSxwb3N0OltdfTtoLnByb3RvdHlwZS5jb25maWdMb2FkPWZ1bmN0aW9uKGEsYyxiKXtiPWI/Yjp0aGlzLmRhdGE7YT1hLnJlcGxhY2UoL1xyXG4vZywiXG4iKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik7Zm9yKHZhciBkPS9eXHMqKD86XFsoW15cXV0rKVxdfCg/OihcdyspWyBcdF0qPVsgXHRdKigiIiJ8J1teJ1xcXG5dKig/OlxcLlteJ1xcXG5dKikqJ3wiW14iXFxcbl0qKD86XFwuW14iXFxcbl0qKSoifFteXG5dKikpKS9tLAplPSIiLGY9YS5tYXRjaChkKTtmO2Y9YS5tYXRjaChkKSl7YT1hLnNsaWNlKGYuaW5kZXgrZlswXS5sZW5ndGgpO2lmKGZbMV0pZT1mWzFdO2Vsc2UgaWYoKCFlfHxlPT1jKSYmIi4iIT1lLnN1YnN0cigwLDEpKWlmKCciIiInPT1mWzNdKXt2YXIgZz1hLm1hdGNoKC8iIiIvKTtnJiYoYi5zbWFydHkuY29uZmlnW2ZbMl1dPWEuc2xpY2UoMCxnLmluZGV4KSxhPWEuc2xpY2UoZy5pbmRleCtnWzBdLmxlbmd0aCkpfWVsc2UgYi5zbWFydHkuY29uZmlnW2ZbMl1dPUYoZlszXSk7aWYoZj1hLm1hdGNoKC9cbisvKSlhPWEuc2xpY2UoZi5pbmRleCtmWzBdLmxlbmd0aCk7ZWxzZSBicmVha319O2gucHJvdG90eXBlLmNsZWFyQ29uZmlnPWZ1bmN0aW9uKGEpe2E/ZGVsZXRlIHRoaXMuZGF0YS5zbWFydHkuY29uZmlnW2FdOnRoaXMuZGF0YS5zbWFydHkuY29uZmlnPXt9fTtoLnByb3RvdHlwZS5hZGREZWZhdWx0TW9kaWZpZXI9ZnVuY3Rpb24oYSl7YSBpbnN0YW5jZW9mIEFycmF5fHwoYT1bYV0pOwpmb3IodmFyIGM9MDtjPGEubGVuZ3RoOysrYyl7dmFyIGI9e3ZhbHVlOiIiLHRyZWU6WzBdfTt2KCJ8IithW2NdLGIpOyh0aGlzLnRyZWU/dGhpcy5kZWZhdWx0X21vZGlmaWVyczp0aGlzLmRlZmF1bHRfbW9kaWZpZXJzX2dsb2JhbCkucHVzaChiLnRyZWVbMF0pfX07aC5wcm90b3R5cGUuZGVmYXVsdF9tb2RpZmllcnNfZ2xvYmFsPVtdO2gucHJvdG90eXBlLmdldFRlbXBsYXRlPWZ1bmN0aW9uKGEpe3Rocm93IEVycm9yKCJObyB0ZW1wbGF0ZSBmb3IgIithKTt9O2gucHJvdG90eXBlLmdldEZpbGU9ZnVuY3Rpb24oYSl7dGhyb3cgRXJyb3IoIk5vIGZpbGUgZm9yICIrYSk7fTtoLnByb3RvdHlwZS5nZXRKYXZhc2NyaXB0PWZ1bmN0aW9uKGEpe3Rocm93IEVycm9yKCJObyBKYXZhc2NyaXB0IGZvciAiK2EpO307aC5wcm90b3R5cGUuZ2V0Q29uZmlnPWZ1bmN0aW9uKGEpe3Rocm93IEVycm9yKCJObyBjb25maWcgZm9yICIrYSk7fTtoLnByb3RvdHlwZS5hdXRvX2xpdGVyYWw9ITA7aC5wcm90b3R5cGUubGVmdF9kZWxpbWl0ZXI9CiJ7IjtoLnByb3RvdHlwZS5yaWdodF9kZWxpbWl0ZXI9In0iO2gucHJvdG90eXBlLmRlYnVnZ2luZz0hMTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJfX2FycmF5IixmdW5jdGlvbihhLGMpe3ZhciBiPVtdLGQ7Zm9yKGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiZhW2RdJiYiZnVuY3Rpb24iIT10eXBlb2YgYVtkXSYmKGJbZF09YVtkXSk7cmV0dXJuIGJ9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJfX2Z1bmMiLGZ1bmN0aW9uKGEsYyl7Zm9yKHZhciBiPVtdLGQ9e30sZT0wO2U8YS5sZW5ndGg7KytlKWIucHVzaChhLm5hbWUrIl9fcCIrZSksZFthLm5hbWUrIl9fcCIrZV09YVtlXTtyZXR1cm4gUygoIl9fb3duZXIiaW4gYyYmYS5uYW1lIGluIGMuX19vd25lcj8iX19vd25lci4iK2EubmFtZTphLm5hbWUpKyIoIitiLmpvaW4oIiwiKSsiKSIsSCh7fSxjLGQpKX0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsCiJfX3F1b3RlZCIsZnVuY3Rpb24oYSxjKXtyZXR1cm4gYS5qb2luKCIiKX0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsImJyZWFrIixmdW5jdGlvbihhLGMpe2Muc21hcnR5WyJicmVhayJdPSEwO3JldHVybiIifSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImZ1bmN0aW9uIiwiY29udGludWUiLGZ1bmN0aW9uKGEsYyl7Yy5zbWFydHlbImNvbnRpbnVlIl09ITA7cmV0dXJuIiJ9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJjYWxsIixmdW5jdGlvbihhLGMpe3ZhciBiPWEuX19nZXQoIm5hbWUiLG51bGwsMCk7ZGVsZXRlIGEubmFtZTt2YXIgZD1hLl9fZ2V0KCJhc3NpZ24iLCExKTtkZWxldGUgYS5hc3NpZ247Yj1CW2JdLnByb2Nlc3MoYSxjKTtyZXR1cm4gZD8oeShkLGIsYyksIiIpOmJ9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJhcHBlbmQiLGZ1bmN0aW9uKGEsYyl7dmFyIGI9YS5fX2dldCgidmFyIiwKbnVsbCwwKTtiIGluIGMmJmNbYl1pbnN0YW5jZW9mIEFycmF5fHwoY1tiXT1bXSk7dmFyIGQ9YS5fX2dldCgiaW5kZXgiLCExKSxlPWEuX19nZXQoInZhbHVlIixudWxsLDEpOyExPT09ZD9jW2JdLnB1c2goZSk6Y1tiXVtkXT1lO3JldHVybiIifSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImZ1bmN0aW9uIiwiYXNzaWduIixmdW5jdGlvbihhLGMpe3koYS5fX2dldCgidmFyIixudWxsLDApLGEuX19nZXQoInZhbHVlIixudWxsLDEpLGMpO3JldHVybiIifSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImJsb2NrIiwiY2FwdHVyZSIsZnVuY3Rpb24oYSxjLGIsZCl7YyYmKGM9Yy5yZXBsYWNlKC9eXG4vLCIiKSxiLnNtYXJ0eS5jYXB0dXJlW2EuX19nZXQoIm5hbWUiLCJkZWZhdWx0IiwwKV09YywiYXNzaWduImluIGEmJnkoYS5hc3NpZ24sYyxiKSwoYT1hLl9fZ2V0KCJhcHBlbmQiLCExKSkmJihhIGluIGI/YlthXWluc3RhbmNlb2YgQXJyYXkmJmJbYV0ucHVzaChjKTpiW2FdPQpbY10pKTtyZXR1cm4iIn0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsImV2YWwiLGZ1bmN0aW9uKGEsYyl7dmFyIGI9W107cihhLl9fZ2V0KCJ2YXIiLCIiLDApLGIpO2I9cShiLGMpO3JldHVybiJhc3NpZ24iaW4gYT8oeShhLmFzc2lnbixiLGMpLCIiKTpifSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImZ1bmN0aW9uIiwiaW5jbHVkZSIsZnVuY3Rpb24oYSxjKXt2YXIgYj1hLl9fZ2V0KCJmaWxlIixudWxsLDApLGQ9SCh7fSxjLGEpO2Quc21hcnR5LnRlbXBsYXRlPWI7Yj1xKGJhKGIsW10sMDw9SShhLCJub2NhY2hlIikpLGQpO3JldHVybiJhc3NpZ24iaW4gYT8oeShhLmFzc2lnbixiLGMpLCIiKTpifSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImJsb2NrIiwibm9jYWNoZSIsZnVuY3Rpb24oYSxjLGIsZCl7cmV0dXJuIGN9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiYmxvY2siLCJqYXZhc2NyaXB0IixmdW5jdGlvbihhLGMsYiwKZCl7Yi4kdGhpcz1iO1MoYyxiKTtkZWxldGUgYi4kdGhpcztyZXR1cm4iIn0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsImNvbmZpZ19sb2FkIixmdW5jdGlvbihhLGMpe2gucHJvdG90eXBlLmNvbmZpZ0xvYWQoaC5wcm90b3R5cGUuZ2V0Q29uZmlnKGEuX19nZXQoImZpbGUiLG51bGwsMCkpLGEuX19nZXQoInNlY3Rpb24iLCIiLDEpLGMpO3JldHVybiIifSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oIm1vZGlmaWVyIiwiZGVmYXVsdFZhbHVlIixmdW5jdGlvbihhLGMpe3JldHVybiBhJiYibnVsbCIhPWEmJiJ1bmRlZmluZWQiIT1hP2E6Yz9jOiIifSk7dmFyIG49e3dpbmRvdzoib2JqZWN0Ij09dHlwZW9mIHdpbmRvdz93aW5kb3c6e2RvY3VtZW50Ont9fX07KGZ1bmN0aW9uKGEsYyl7ImZ1bmN0aW9uIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGMpOiJvYmplY3QiPT09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHM/Cm1vZHVsZS5leHBvcnRzPWMoKTphLmpTbWFydD1jKCl9KSh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJjb3VudGVyIixmdW5jdGlvbihhLGMpe3ZhciBiPWEuX19nZXQoIm5hbWUiLCJkZWZhdWx0Iik7aWYoYiBpbiBjLnNtYXJ0eS5jb3VudGVyKXt2YXIgZD1jLnNtYXJ0eS5jb3VudGVyW2JdOyJzdGFydCJpbiBhP2QudmFsdWU9cGFyc2VJbnQoYS5zdGFydCk6KGQudmFsdWU9cGFyc2VJbnQoZC52YWx1ZSksZC5za2lwPXBhcnNlSW50KGQuc2tpcCksZC52YWx1ZT0iZG93biI9PWQuZGlyZWN0aW9uP2QudmFsdWUtZC5za2lwOmQudmFsdWUrZC5za2lwKTtkLnNraXA9YS5fX2dldCgic2tpcCIsZC5za2lwKTtkLmRpcmVjdGlvbj1hLl9fZ2V0KCJkaXJlY3Rpb24iLGQuZGlyZWN0aW9uKTtkLmFzc2lnbj1hLl9fZ2V0KCJhc3NpZ24iLGQuYXNzaWduKX1lbHNlIGMuc21hcnR5LmNvdW50ZXJbYl09e3ZhbHVlOnBhcnNlSW50KGEuX19nZXQoInN0YXJ0IiwKMSkpLHNraXA6cGFyc2VJbnQoYS5fX2dldCgic2tpcCIsMSkpLGRpcmVjdGlvbjphLl9fZ2V0KCJkaXJlY3Rpb24iLCJ1cCIpLGFzc2lnbjphLl9fZ2V0KCJhc3NpZ24iLCExKX07cmV0dXJuIGMuc21hcnR5LmNvdW50ZXJbYl0uYXNzaWduPyhjW2Muc21hcnR5LmNvdW50ZXJbYl0uYXNzaWduXT1jLnNtYXJ0eS5jb3VudGVyW2JdLnZhbHVlLCIiKTphLl9fZ2V0KCJwcmludCIsITApP2Muc21hcnR5LmNvdW50ZXJbYl0udmFsdWU6IiJ9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJjeWNsZSIsZnVuY3Rpb24oYSxjKXt2YXIgYj1hLl9fZ2V0KCJuYW1lIiwiZGVmYXVsdCIpLGQ9YS5fX2dldCgicmVzZXQiLCExKTtiIGluIGMuc21hcnR5LmN5Y2xlfHwoYy5zbWFydHkuY3ljbGVbYl09e2FycjpbIiJdLGRlbGltaXRlcjphLl9fZ2V0KCJkZWxpbWl0ZXIiLCIsIiksaW5kZXg6MH0sZD0hMCk7YS5fX2dldCgiZGVsaW1pdGVyIiwhMSkmJihjLnNtYXJ0eS5jeWNsZVtiXS5kZWxpbWl0ZXI9CmEuZGVsaW1pdGVyKTt2YXIgZT1hLl9fZ2V0KCJ2YWx1ZXMiLCExKTtpZihlKXt2YXIgZj1bXTtpZihlIGluc3RhbmNlb2YgT2JqZWN0KWZvcihubSBpbiBlKWYucHVzaChlW25tXSk7ZWxzZSBmPWUuc3BsaXQoYy5zbWFydHkuY3ljbGVbYl0uZGVsaW1pdGVyKTtpZihmLmxlbmd0aCE9Yy5zbWFydHkuY3ljbGVbYl0uYXJyLmxlbmd0aHx8ZlswXSE9Yy5zbWFydHkuY3ljbGVbYl0uYXJyWzBdKWMuc21hcnR5LmN5Y2xlW2JdLmFycj1mLGMuc21hcnR5LmN5Y2xlW2JdLmluZGV4PTAsZD0hMH1hLl9fZ2V0KCJhZHZhbmNlIiwidHJ1ZSIpJiYoYy5zbWFydHkuY3ljbGVbYl0uaW5kZXgrPTEpO2lmKGMuc21hcnR5LmN5Y2xlW2JdLmluZGV4Pj1jLnNtYXJ0eS5jeWNsZVtiXS5hcnIubGVuZ3RofHxkKWMuc21hcnR5LmN5Y2xlW2JdLmluZGV4PTA7cmV0dXJuIGEuX19nZXQoImFzc2lnbiIsITEpPyh5KGEuYXNzaWduLGMuc21hcnR5LmN5Y2xlW2JdLmFycltjLnNtYXJ0eS5jeWNsZVtiXS5pbmRleF0sCmMpLCIiKTphLl9fZ2V0KCJwcmludCIsITApP2Muc21hcnR5LmN5Y2xlW2JdLmFycltjLnNtYXJ0eS5jeWNsZVtiXS5pbmRleF06IiJ9KTtoLnByb3RvdHlwZS5wcmludF9yPWZ1bmN0aW9uKGEsYyl7aWYoYSBpbnN0YW5jZW9mIE9iamVjdCl7dmFyIGI9KGEgaW5zdGFuY2VvZiBBcnJheT8iQXJyYXlbIithLmxlbmd0aCsiXSI6Ik9iamVjdCIpKyI8YnI+IixkO2ZvcihkIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShkKSYmKGIrPWMrIiZuYnNwOyZuYnNwOzxzdHJvbmc+IitkKyI8L3N0cm9uZz4gOiAiK2gucHJvdG90eXBlLnByaW50X3IoYVtkXSxjKyImbmJzcDsmbmJzcDsmbmJzcDsiKSsiPGJyPiIpO3JldHVybiBifXJldHVybiBhfTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJkZWJ1ZyIsZnVuY3Rpb24oYSxjKXsidW5kZWZpbmVkIiE9dHlwZW9mIGRiZ1duZCYmZGJnV25kLmNsb3NlKCk7ZGJnV25kPXdpbmRvdy5vcGVuKCIiLCIiLCJ3aWR0aD02ODAsaGVpZ2h0PTYwMCxyZXNpemFibGUsc2Nyb2xsYmFycz15ZXMiKTsKdmFyIGI9IiIsZD0wLGU7Zm9yKGUgaW4gYyliKz0iPHRyIGNsYXNzPSIrKCsrZCUyPyJvZGQiOiJldmVuIikrIj48dGQ+PHN0cm9uZz4iK2UrIjwvc3Ryb25nPjwvdGQ+PHRkPiIraC5wcm90b3R5cGUucHJpbnRfcihjW2VdLCIiKSsiPC90ZD48L3RyPiI7ZGJnV25kLmRvY3VtZW50LndyaXRlKCIgICAgICAgICAgICA8aHRtbCB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcgeG1sOmxhbmc9J2VuJz4gICAgICAgICAgICA8aGVhZD4gXHQgICAgICAgICAgICA8dGl0bGU+alNtYXJ0IERlYnVnIENvbnNvbGU8L3RpdGxlPiAgICAgICAgICAgICAgIDxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+ICAgICAgICAgICAgICAgICAgdGFibGUge3dpZHRoOiAxMDAlO30gICAgICAgICAgICAgICAgICB0ZCB7dmVydGljYWwtYWxpZ246dG9wO3dpZHRoOiA1MCU7fSAgICAgICAgICAgICAgICAgIC5ldmVuIHRkIHtiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO30gICAgICAgICAgICAgICA8L3N0eWxlPiAgICAgICAgICAgIDwvaGVhZD4gICAgICAgICAgICA8Ym9keT4gICAgICAgICAgICAgICA8aDE+alNtYXJ0IERlYnVnIENvbnNvbGU8L2gxPiAgICAgICAgICAgICAgIDxoMj5hc3NpZ25lZCB0ZW1wbGF0ZSB2YXJpYWJsZXM8L2gyPiAgICAgICAgICAgICAgIDx0YWJsZT4iKwpiKyI8L3RhYmxlPiAgICAgICAgICAgIDwvYm9keT4gICAgICAgICAgICA8L2h0bWw+ICAgICAgICAgIik7cmV0dXJuIiJ9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJmZXRjaCIsZnVuY3Rpb24oYSxjKXt2YXIgYj1oLnByb3RvdHlwZS5nZXRGaWxlKGEuX19nZXQoImZpbGUiLG51bGwsMCkpO3JldHVybiJhc3NpZ24iaW4gYT8oeShhLmFzc2lnbixiLGMpLCIiKTpifSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImZ1bmN0aW9uIiwiaW5zZXJ0IixmdW5jdGlvbihhLGMpe3ZhciBiPXt9LGQ7Zm9yKGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiZpc05hTihkKSYmYVtkXSYmInN0cmluZyI9PXR5cGVvZiBhW2RdJiYibmFtZSIhPWQmJiJhc3NpZ24iIT1kJiYic2NyaXB0IiE9ZCYmKGJbZF09YVtkXSk7ZD0iaW5zZXJ0XyI7InNjcmlwdCJpbiBhJiYoZXZhbChoLnByb3RvdHlwZS5nZXRKYXZhc2NyaXB0KGEuc2NyaXB0KSksZD0ic21hcnR5X2luc2VydF8iKTsKYj1ldmFsKGQrYS5fX2dldCgibmFtZSIsbnVsbCwwKSkoYixjKTtyZXR1cm4iYXNzaWduImluIGE/KHkoYS5hc3NpZ24sYixjKSwiIik6Yn0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsImh0bWxfY2hlY2tib3hlcyIsZnVuY3Rpb24oYSxjKXt2YXIgYj1hLl9fZ2V0KCJ0eXBlIiwiY2hlY2tib3giKSxkPWEuX19nZXQoIm5hbWUiLGIpOyJjaGVja2JveCI9PWImJihkKz0iW10iKTt2YXIgZT1hLl9fZ2V0KCJ2YWx1ZXMiLGEub3B0aW9ucyksZj1hLl9fZ2V0KCJvcHRpb25zIixbXSksZz0ib3B0aW9ucyJpbiBhLG07aWYoIWcpZm9yKG0gaW4gYS5vdXRwdXQpZi5wdXNoKGEub3V0cHV0W21dKTt2YXIgbD1hLl9fZ2V0KCJzZWxlY3RlZCIsITEpLGs9YS5fX2dldCgic2VwYXJhdG9yIiwiIiksaD1Cb29sZWFuKGEuX19nZXQoImxhYmVscyIsITApKSxwPVtdLFk9MCx3PSIiO2ZvcihtIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShtKSYmKHc9aD8iPGxhYmVsPiI6IiIsCncrPSc8aW5wdXQgdHlwZT0iJytiKyciIG5hbWU9IicrZCsnIiB2YWx1ZT0iJysoZz9tOmVbbV0pKyciICcsbD09KGc/bTplW21dKSYmKHcrPSdjaGVja2VkPSJjaGVja2VkIiAnKSx3Kz0iLz4iK2ZbZz9tOlkrK10sdys9aD8iPC9sYWJlbD4iOiIiLHcrPWsscC5wdXNoKHcpKTtyZXR1cm4iYXNzaWduImluIGE/KHkoYS5hc3NpZ24scCxjKSwiIik6cC5qb2luKCJcbiIpfSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImZ1bmN0aW9uIiwiaHRtbF9pbWFnZSIsZnVuY3Rpb24oYSxjKXt2YXIgYj1hLl9fZ2V0KCJmaWxlIixudWxsKSxkPWEuX19nZXQoIndpZHRoIiwhMSksZT1hLl9fZ2V0KCJoZWlnaHQiLCExKSxmPWEuX19nZXQoImFsdCIsIiIpLGc9YS5fX2dldCgiaHJlZiIsITEpLG09e2ZpbGU6MSx3aWR0aDoxLGhlaWdodDoxLGFsdDoxLGhyZWY6MSxiYXNlZGlyOjEscGF0aF9wcmVmaXg6MX0sYj0nPGltZyBzcmM9IicrYS5fX2dldCgicGF0aF9wcmVmaXgiLCIiKStiKyciIGFsdD0iJysKZisnIicrKGQ/JyB3aWR0aD0iJytkKyciJzoiIikrKGU/JyBoZWlnaHQ9IicrZSsnIic6IiIpLGw7Zm9yKGwgaW4gYSlhLmhhc093blByb3BlcnR5KGwpJiYic3RyaW5nIj09dHlwZW9mIGFbbF0mJihsIGluIG18fChiKz0iICIrbCsnPSInK2FbbF0rJyInKSk7Yis9IiAvPiI7cmV0dXJuIGc/JzxhIGhyZWY9IicrZysnIj4nK2IrIjwvYT4iOmJ9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJodG1sX29wdGlvbnMiLGZ1bmN0aW9uKGEsYyl7dmFyIGI9YS5fX2dldCgidmFsdWVzIixhLm9wdGlvbnMpLGQ9YS5fX2dldCgib3B0aW9ucyIsW10pLGU9Im9wdGlvbnMiaW4gYSxmO2lmKCFlKWZvcihmIGluIGEub3V0cHV0KWQucHVzaChhLm91dHB1dFtmXSk7dmFyIGc9YS5fX2dldCgic2VsZWN0ZWQiLCExKTshZ3x8ZyBpbnN0YW5jZW9mIEFycmF5fHwoZz1bZ10pO3ZhciBtPVtdLGw9IiIsaz0wO2ZvcihmIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShmKSl7bD0nPG9wdGlvbiB2YWx1ZT0iJysKKGU/ZjpiW2ZdKSsnIic7aWYoZylmb3Ioaz0wO2s8Zy5sZW5ndGg7KytrKWlmKGdba109PShlP2Y6YltmXSkpe2wrPScgc2VsZWN0ZWQ9InNlbGVjdGVkIic7YnJlYWt9bCs9Ij4iK2RbZT9mOmsrK10rIjwvb3B0aW9uPiI7bS5wdXNoKGwpfWI9YS5fX2dldCgibmFtZSIsITEpO3JldHVybihiPyc8c2VsZWN0IG5hbWU9IicrYisnIj5cbicrbS5qb2luKCJcbiIpKyJcbjwvc2VsZWN0PiI6bS5qb2luKCJcbiIpKSsiXG4ifSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImZ1bmN0aW9uIiwiaHRtbF9yYWRpb3MiLGZ1bmN0aW9uKGEsYyl7YS50eXBlPSJyYWRpbyI7cmV0dXJuIEIuaHRtbF9jaGVja2JveGVzLnByb2Nlc3MoYSxjKX0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsImh0bWxfc2VsZWN0X2RhdGUiLGZ1bmN0aW9uKGEsYyl7dmFyIGI9YS5fX2dldCgicHJlZml4IiwiRGF0ZV8iKSxkPSJKYW51YXJ5IEZlYnJ1YXJ5IE1hcmNoIEFwcmlsIE1heSBKdW5lIEp1bHkgQXVndXN0IFNlcHRlbWJlciBPY3RvYmVyIE5vdmVtYmVyIERlY2VtYmVyIi5zcGxpdCgiICIpLAplO2U9IiIrKCc8c2VsZWN0IG5hbWU9IicrYisnTW9udGgiPlxuJyk7Zm9yKHZhciBmPTAsZj0wO2Y8ZC5sZW5ndGg7KytmKWUrPSc8b3B0aW9uIHZhbHVlPSInK2YrJyI+JytkW2ZdKyI8L29wdGlvbj5cbiI7ZT1lKyI8L3NlbGVjdD5cbiIrKCc8c2VsZWN0IG5hbWU9IicrYisnRGF5Ij5cbicpO2ZvcihmPTA7MzE+ZjsrK2YpZSs9JzxvcHRpb24gdmFsdWU9IicrZisnIj4nK2YrIjwvb3B0aW9uPlxuIjtyZXR1cm4gZSs9Ijwvc2VsZWN0PlxuIn0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsImh0bWxfdGFibGUiLGZ1bmN0aW9uKGEsYyl7dmFyIGI9W10sZDtpZihhLmxvb3AgaW5zdGFuY2VvZiBBcnJheSliPWEubG9vcDtlbHNlIGZvcihkIGluIGEubG9vcClhLmxvb3AuaGFzT3duUHJvcGVydHkoZCkmJmIucHVzaChhLmxvb3BbZF0pO3ZhciBlPWEuX19nZXQoInJvd3MiLCExKSxmPWEuX19nZXQoImNvbHMiLCExKTtmfHwoZj1lP01hdGguY2VpbChiLmxlbmd0aC8KZSk6Myk7dmFyIGc9W107aWYoaXNOYU4oZikpe2lmKCJvYmplY3QiPT10eXBlb2YgZilmb3IoZCBpbiBmKWYuaGFzT3duUHJvcGVydHkoZCkmJmcucHVzaChmW2RdKTtlbHNlIGc9Zi5zcGxpdCgvXHMqLFxzKi8pO2Y9Zy5sZW5ndGh9dmFyIGU9ZT9lOk1hdGguY2VpbChiLmxlbmd0aC9mKSxtPWEuX19nZXQoImlubmVyIiwiY29scyIpO2Q9YS5fX2dldCgiY2FwdGlvbiIsIiIpO3ZhciBsPWEuX19nZXQoInRhYmxlX2F0dHIiLCdib3JkZXI9IjEiJyksaz1hLl9fZ2V0KCJ0aF9hdHRyIiwhMSk7ayYmIm9iamVjdCIhPXR5cGVvZiBrJiYoaz1ba10pO3ZhciBoPWEuX19nZXQoInRyX2F0dHIiLCExKTtoJiYib2JqZWN0IiE9dHlwZW9mIGgmJihoPVtoXSk7dmFyIHA9YS5fX2dldCgidGRfYXR0ciIsITEpO3AmJiJvYmplY3QiIT10eXBlb2YgcCYmKHA9W3BdKTtmb3IodmFyIFk9YS5fX2dldCgidHJhaWxwYWQiLCImbmJzcDsiKSx3PWEuX19nZXQoImhkaXIiLCJyaWdodCIpLG49YS5fX2dldCgidmRpciIsCiJkb3duIikscT0iIixyPTA7cjxlOysrcil7Zm9yKHZhciBxPXErKCI8dHIiKyhoPyIgIitoW3IlaC5sZW5ndGhdOiIiKSsiPlxuIiksdD0wO3Q8ZjsrK3QpdmFyIHY9ImNvbHMiPT1tPygiZG93biI9PW4/cjplLTEtcikqZisoInJpZ2h0Ij09dz90OmYtMS10KTooInJpZ2h0Ij09dz90OmYtMS10KSplKygiZG93biI9PW4/cjplLTEtcikscT1xKygiPHRkIisocD8iICIrcFt0JXAubGVuZ3RoXToiIikrIj4iKyh2PGIubGVuZ3RoP2Jbdl06WSkrIjwvdGQ+XG4iKTtxKz0iPC90cj5cbiJ9Yj0iIjtpZihnLmxlbmd0aCl7Yj0iXG48dGhlYWQ+PHRyPiI7Zm9yKGU9MDtlPGcubGVuZ3RoOysrZSliKz0iXG48dGgiKyhrPyIgIitrW2Ulay5sZW5ndGhdOiIiKSsiPiIrZ1sicmlnaHQiPT13P2U6Zy5sZW5ndGgtMS1lXSsiPC90aD4iO2IrPSJcbjwvdHI+PC90aGVhZD4ifXJldHVybiI8dGFibGUgIitsKyI+IisoZD8iXG48Y2FwdGlvbj4iK2QrIjwvY2FwdGlvbj4iOiIiKStiKyJcbjx0Ym9keT5cbiIrCnErIjwvdGJvZHk+XG48L3RhYmxlPlxuIn0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsImluY2x1ZGVfamF2YXNjcmlwdCIsZnVuY3Rpb24oYSxjKXt2YXIgYj1hLl9fZ2V0KCJmaWxlIixudWxsLDApO2lmKGEuX19nZXQoIm9uY2UiLCEwKSYmYiBpbiBYKXJldHVybiIiO1hbYl09ITA7Yj1TKGgucHJvdG90eXBlLmdldEphdmFzY3JpcHQoYikseyR0aGlzOmN9KTtyZXR1cm4iYXNzaWduImluIGE/KHkoYS5hc3NpZ24sYixjKSwiIik6Yn0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsImluY2x1ZGVfcGhwIixmdW5jdGlvbihhLGMpe3JldHVybiBCLmluY2x1ZGVfamF2YXNjcmlwdC5wcm9jZXNzKGEsYyl9KTtuLnJhd3VybGVuY29kZT1mdW5jdGlvbihhKXthPShhKyIiKS50b1N0cmluZygpO3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoYSkucmVwbGFjZSgvIS9nLCIlMjEiKS5yZXBsYWNlKC8nL2csIiUyNyIpLnJlcGxhY2UoL1woL2csCiIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKS5yZXBsYWNlKC9cKi9nLCIlMkEiKX07bi5iaW4yaGV4PWZ1bmN0aW9uKGEpe3ZhciBjLGIsZD0iIixlO2ErPSIiO2M9MDtmb3IoYj1hLmxlbmd0aDtjPGI7YysrKWU9YS5jaGFyQ29kZUF0KGMpLnRvU3RyaW5nKDE2KSxkKz0yPmUubGVuZ3RoPyIwIitlOmU7cmV0dXJuIGR9O24ub3JkPWZ1bmN0aW9uKGEpe3ZhciBjPWErIiI7YT1jLmNoYXJDb2RlQXQoMCk7aWYoNTUyOTY8PWEmJjU2MzE5Pj1hKXtpZigxPT09Yy5sZW5ndGgpcmV0dXJuIGE7Yz1jLmNoYXJDb2RlQXQoMSk7cmV0dXJuIDEwMjQqKGEtNTUyOTYpKyhjLTU2MzIwKSs2NTUzNn1yZXR1cm4gYX07aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImZ1bmN0aW9uIiwibWFpbHRvIixmdW5jdGlvbihhLGMpe3ZhciBiPWEuX19nZXQoImFkZHJlc3MiLG51bGwpLGQ9YS5fX2dldCgiZW5jb2RlIiwibm9uZSIpLGU9YS5fX2dldCgidGV4dCIsYiksZj1uLnJhd3VybGVuY29kZShhLl9fZ2V0KCJjYyIsCiIiKSkucmVwbGFjZSgiJTQwIiwiQCIpLGc9bi5yYXd1cmxlbmNvZGUoYS5fX2dldCgiYmNjIiwiIikpLnJlcGxhY2UoIiU0MCIsIkAiKSxoPW4ucmF3dXJsZW5jb2RlKGEuX19nZXQoImZvbGxvd3VwdG8iLCIiKSkucmVwbGFjZSgiJTQwIiwiQCIpLGw9bi5yYXd1cmxlbmNvZGUoYS5fX2dldCgic3ViamVjdCIsIiIpKSxrPW4ucmF3dXJsZW5jb2RlKGEuX19nZXQoIm5ld3Nncm91cHMiLCIiKSksdT1hLl9fZ2V0KCJleHRyYSIsIiIpLGI9YisoZj8iP2NjPSIrZjoiIikrKGc/KGY/IiYiOiI/IikrImJjYz0iK2c6IiIpLGI9YisobD8oZnx8Zz8iJiI6Ij8iKSsic3ViamVjdD0iK2w6IiIpLGI9Yisoaz8oZnx8Z3x8bD8iJiI6Ij8iKSsibmV3c2dyb3Vwcz0iK2s6IiIpLGI9YisoaD8oZnx8Z3x8bHx8az8iJiI6Ij8iKSsiZm9sbG93dXB0bz0iK2g6IiIpO3M9JzxhIGhyZWY9Im1haWx0bzonK2IrJyIgJyt1KyI+IitlKyI8L2E+IjtpZigiamF2YXNjcmlwdCI9PWQpe3M9ImRvY3VtZW50LndyaXRlKCciKwpzKyInKTsiO2U9IiI7Zm9yKGQ9MDtkPHMubGVuZ3RoOysrZCllKz0iJSIrbi5iaW4yaGV4KHMuc3Vic3RyKGQsMSkpO3JldHVybic8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ZXZhbCh1bmVzY2FwZShcJycrZSsiJykpXHgzYy9zY3JpcHQ+In1pZigiamF2YXNjcmlwdF9jaGFyY29kZSI9PWQpe2U9W107Zm9yKGQ9MDtkPHMubGVuZ3RoOysrZCllLnB1c2gobi5vcmQocy5zdWJzdHIoZCwxKSkpO3JldHVybic8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPlxuXHgzYyEtLVxue2RvY3VtZW50LndyaXRlKFN0cmluZy5mcm9tQ2hhckNvZGUoJytlLmpvaW4oIiwiKSsiKSl9XG4vLy0tXHgzZVxuXHgzYy9zY3JpcHQ+XG4ifWlmKCJoZXgiPT1kKXtpZihiLm1hdGNoKC9eLitcPy4rJC8pKXRocm93IEVycm9yKCJtYWlsdG86IGhleCBlbmNvZGluZyBkb2VzIG5vdCB3b3JrIHdpdGggZXh0cmEgYXR0cmlidXRlcy4gVHJ5IGphdmFzY3JpcHQuIik7CmY9IiI7Zm9yKGQ9MDtkPGIubGVuZ3RoOysrZClmPWIuc3Vic3RyKGQsMSkubWF0Y2goL1x3Lyk/ZisoIiUiK24uYmluMmhleChiLnN1YnN0cihkLDEpKSk6ZitiLnN1YnN0cihkLDEpO2I9IiI7Zm9yKGQ9MDtkPGUubGVuZ3RoOysrZCliKz0iJiN4IituLmJpbjJoZXgoZS5zdWJzdHIoZCwxKSkrIjsiO3JldHVybic8YSBocmVmPSImIzEwOTsmIzk3OyYjMTA1OyYjMTA4OyYjMTE2OyYjMTExOyYjNTg7JytmKyciICcrdSsiPiIrYisiPC9hPiJ9cmV0dXJuIHN9KTtuLnNwcmludGY9ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHMsYz0wLGI9ZnVuY3Rpb24oYSxiLGMsZCl7Y3x8KGM9IiAiKTtiPWEubGVuZ3RoPj1iPyIiOkFycmF5KDErYi1hLmxlbmd0aD4+PjApLmpvaW4oYyk7cmV0dXJuIGQ/YStiOmIrYX0sZD1mdW5jdGlvbihhLGMsZCxlLGssaCl7dmFyIHA9ZS1hLmxlbmd0aDswPHAmJihhPWR8fCFrP2IoYSxlLGgsZCk6YS5zbGljZSgwLGMubGVuZ3RoKStiKCIiLHAsIjAiLCEwKSsKYS5zbGljZShjLmxlbmd0aCkpO3JldHVybiBhfSxlPWZ1bmN0aW9uKGEsYyxlLGwsayxoLHApe2E+Pj49MDtlPWUmJmEmJnsyOiIwYiIsODoiMCIsMTY6IjB4In1bY118fCIiO2E9ZStiKGEudG9TdHJpbmcoYyksaHx8MCwiMCIsITEpO3JldHVybiBkKGEsZSxsLGsscCl9O3JldHVybiBhW2MrK10ucmVwbGFjZSgvJSV8JShcZCtcJCk/KFstK1wnIzAgXSopKFwqXGQrXCR8XCp8XGQrKT8oXC4oXCpcZCtcJHxcKnxcZCspKT8oW3NjYm94WHVpZGVFZkZnR10pL2csZnVuY3Rpb24oZixnLGgsbCxrLHUscCl7dmFyIG4sdztpZigiJSUiPT09ZilyZXR1cm4iJSI7dmFyIHE9ITE7dz0iIjt2YXIgcj1rPSExO249IiAiO2Zvcih2YXIgdD1oLmxlbmd0aCx2PTA7aCYmdjx0O3YrKylzd2l0Y2goaC5jaGFyQXQodikpe2Nhc2UgIiAiOnc9IiAiO2JyZWFrO2Nhc2UgIisiOnc9IisiO2JyZWFrO2Nhc2UgIi0iOnE9ITA7YnJlYWs7Y2FzZSAiJyI6bj1oLmNoYXJBdCh2KzEpO2JyZWFrO2Nhc2UgIjAiOms9CiEwO249IjAiO2JyZWFrO2Nhc2UgIiMiOnI9ITB9bD1sPyIqIj09PWw/K2FbYysrXToiKiI9PWwuY2hhckF0KDApPythW2wuc2xpY2UoMSwtMSldOitsOjA7MD5sJiYobD0tbCxxPSEwKTtpZighaXNGaW5pdGUobCkpdGhyb3cgRXJyb3IoInNwcmludGY6IChtaW5pbXVtLSl3aWR0aCBtdXN0IGJlIGZpbml0ZSIpO3U9dT8iKiI9PT11PythW2MrK106IioiPT11LmNoYXJBdCgwKT8rYVt1LnNsaWNlKDEsLTEpXTordTotMTwiZkZlRSIuaW5kZXhPZihwKT82OiJkIj09PXA/MDp2b2lkIDA7Zz1nP2FbZy5zbGljZSgwLC0xKV06YVtjKytdO3N3aXRjaChwKXtjYXNlICJzIjpyZXR1cm4gcD1TdHJpbmcoZyksbnVsbCE9dSYmKHA9cC5zbGljZSgwLHUpKSxkKHAsIiIscSxsLGssbik7Y2FzZSAiYyI6cmV0dXJuIHA9U3RyaW5nLmZyb21DaGFyQ29kZSgrZyksbnVsbCE9dSYmKHA9cC5zbGljZSgwLHUpKSxkKHAsIiIscSxsLGssdm9pZCAwKTtjYXNlICJiIjpyZXR1cm4gZShnLDIscixxLGwsdSwKayk7Y2FzZSAibyI6cmV0dXJuIGUoZyw4LHIscSxsLHUsayk7Y2FzZSAieCI6cmV0dXJuIGUoZywxNixyLHEsbCx1LGspO2Nhc2UgIlgiOnJldHVybiBlKGcsMTYscixxLGwsdSxrKS50b1VwcGVyQ2FzZSgpO2Nhc2UgInUiOnJldHVybiBlKGcsMTAscixxLGwsdSxrKTtjYXNlICJpIjpjYXNlICJkIjpyZXR1cm4gbj0rZ3x8MCxuPU1hdGgucm91bmQobi1uJTEpLGY9MD5uPyItIjp3LGc9ZitiKFN0cmluZyhNYXRoLmFicyhuKSksdSwiMCIsITEpLGQoZyxmLHEsbCxrKTtjYXNlICJlIjpjYXNlICJFIjpjYXNlICJmIjpjYXNlICJGIjpjYXNlICJnIjpjYXNlICJHIjpyZXR1cm4gbj0rZyxmPTA+bj8iLSI6dyx3PVsidG9FeHBvbmVudGlhbCIsInRvRml4ZWQiLCJ0b1ByZWNpc2lvbiJdWyJlZmciLmluZGV4T2YocC50b0xvd2VyQ2FzZSgpKV0scD1bInRvU3RyaW5nIiwidG9VcHBlckNhc2UiXVsiZUVmRmdHIi5pbmRleE9mKHApJTJdLGc9ZitNYXRoLmFicyhuKVt3XSh1KSxkKGcsZixxLApsLGspW3BdKCk7ZGVmYXVsdDpyZXR1cm4gZn19KX07aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImZ1bmN0aW9uIiwibWF0aCIsZnVuY3Rpb24oYSxjKXt3aXRoKE1hdGgpd2l0aChhKXZhciBiPWV2YWwoYS5fX2dldCgiZXF1YXRpb24iLG51bGwpLnJlcGxhY2UoL3BpXChccypcKS9nLCJQSSIpKTsiZm9ybWF0ImluIGEmJihiPW4uc3ByaW50ZihhLmZvcm1hdCxiKSk7cmV0dXJuImFzc2lnbiJpbiBhPyh5KGEuYXNzaWduLGIsYyksIiIpOmJ9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLCJ3b3Jkd3JhcCIsZnVuY3Rpb24oYSxjLGIsZCl7Yz1jfHw4MDtiPWJ8fCJcbiI7YT0obmV3IFN0cmluZyhhKSkuc3BsaXQoIlxuIik7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDsrK2Upe2Zvcih2YXIgZj1hW2VdLGc9IiI7Zi5sZW5ndGg+Yzspe2Zvcih2YXIgaD0wLGw9Zi5zbGljZShoKS5tYXRjaCgvXHMrLyk7bCYmaCtsLmluZGV4PD1jO2w9Zi5zbGljZShoKS5tYXRjaCgvXHMrLykpaCs9CmwuaW5kZXgrbFswXS5sZW5ndGg7aD1ofHwoZD9jOmw/bC5pbmRleCtsWzBdLmxlbmd0aDpmLmxlbmd0aCk7Zys9Zi5zbGljZSgwLGgpLnJlcGxhY2UoL1xzKyQvLCIiKTtoPGYubGVuZ3RoJiYoZys9Yik7Zj1mLnNsaWNlKGgpfWFbZV09ZytmfXJldHVybiBhLmpvaW4oIlxuIil9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiYmxvY2siLCJ0ZXh0Zm9ybWF0IixmdW5jdGlvbihhLGMsYixkKXtpZighYylyZXR1cm4iIjtjPW5ldyBTdHJpbmcoYyk7ZD1hLl9fZ2V0KCJ3cmFwIiw4MCk7dmFyIGU9YS5fX2dldCgid3JhcF9jaGFyIiwiXG4iKSxmPWEuX19nZXQoIndyYXBfY3V0IiwhMSksZz1hLl9fZ2V0KCJpbmRlbnRfY2hhciIsIiAiKSxoPWEuX19nZXQoImluZGVudCIsMCksbD1BcnJheShoKzEpLmpvaW4oZyksaz1hLl9fZ2V0KCJpbmRlbnRfZmlyc3QiLDApLGc9QXJyYXkoaysxKS5qb2luKGcpOyJlbWFpbCI9PWEuX19nZXQoInN0eWxlIiwiIikmJihkPTcyKTtjPWMuc3BsaXQoIlxuIik7CmZvcih2YXIgdT0wO3U8Yy5sZW5ndGg7Kyt1KXt2YXIgcD1jW3VdO3AmJihwPXAucmVwbGFjZSgvXlxzK3xccyskLywiIikucmVwbGFjZSgvXHMrL2csIiAiKSxrJiYocD1nK3ApLHA9Si5fX3dvcmR3cmFwKHAsZC1oLGUsZiksaCYmKHA9cC5yZXBsYWNlKC9eL21nLGwpKSxjW3VdPXApfWQ9Yy5qb2luKGUrZSk7cmV0dXJuImFzc2lnbiJpbiBhPyh5KGEuYXNzaWduLGQsYiksIiIpOmR9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLCJjYXBpdGFsaXplIixmdW5jdGlvbihhLGMpe2lmKCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gYTtmb3IodmFyIGI9UmVnRXhwKGM/IltcXFdcXGRdKyI6IlxcVysiKSxkPW51bGwsZT0iIixkPWEubWF0Y2goYik7ZDtkPWEubWF0Y2goYikpe3ZhciBmPWEuc2xpY2UoMCxkLmluZGV4KSxlPWYubWF0Y2goL1xkLyk/ZStmOmUrKGYuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZi5zbGljZSgxKSksZT1lK2Euc2xpY2UoZC5pbmRleCwKZC5pbmRleCtkWzBdLmxlbmd0aCk7YT1hLnNsaWNlKGQuaW5kZXgrZFswXS5sZW5ndGgpfXJldHVybiBhLm1hdGNoKC9cZC8pP2UrYTplK2EuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYS5zbGljZSgxKX0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJtb2RpZmllciIsImNhdCIsZnVuY3Rpb24oYSxjKXtjPWM/YzoiIjtyZXR1cm4gbmV3IFN0cmluZyhhKStjfSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oIm1vZGlmaWVyIiwiY291bnQiLGZ1bmN0aW9uKGEsYyl7aWYobnVsbD09PWF8fCJ1bmRlZmluZWQiPT09dHlwZW9mIGEpcmV0dXJuIDA7aWYoYS5jb25zdHJ1Y3RvciE9PUFycmF5JiZhLmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiAxO2M9Qm9vbGVhbihjKTt2YXIgYixkPTA7Zm9yKGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoZCsrLGMmJmFbYl0mJihhW2JdLmNvbnN0cnVjdG9yPT09QXJyYXl8fGFbYl0uY29uc3RydWN0b3I9PT1PYmplY3QpJiYoZCs9CkouX19jb3VudChhW2JdLCEwKSkpO3JldHVybiBkfSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oIm1vZGlmaWVyIiwiY291bnRfY2hhcmFjdGVycyIsZnVuY3Rpb24oYSxjKXthPW5ldyBTdHJpbmcoYSk7cmV0dXJuIGM/YS5sZW5ndGg6YS5yZXBsYWNlKC9ccy9nLCIiKS5sZW5ndGh9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLCJjb3VudF9wYXJhZ3JhcGhzIixmdW5jdGlvbihhKXtyZXR1cm4oYT0obmV3IFN0cmluZyhhKSkubWF0Y2goL1xuKy9nKSk/YS5sZW5ndGgrMToxfSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oIm1vZGlmaWVyIiwiY291bnRfc2VudGVuY2VzIixmdW5jdGlvbihhKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGEmJihhPWEubWF0Y2goL1teXHNdXC4oPyFcdykvZykpP2EubGVuZ3RoOjB9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLCJjb3VudF93b3JkcyIsZnVuY3Rpb24oYSl7cmV0dXJuInN0cmluZyI9PQp0eXBlb2YgYSYmKGE9YS5tYXRjaCgvXHcrL2cpKT9hLmxlbmd0aDowfSk7bi5nZXRlbnY9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucGhwX2pzJiZ0aGlzLnBocF9qcy5FTlYmJnRoaXMucGhwX2pzLkVOVlthXT90aGlzLnBocF9qcy5FTlZbYV06ITF9O24uc2V0bG9jYWxlPWZ1bmN0aW9uKGEsYyl7dmFyIGI9IiIsZD1bXSxlPTAsZT10aGlzLndpbmRvdy5kb2N1bWVudCxmPWZ1bmN0aW9uIHAoYSl7aWYoYSBpbnN0YW5jZW9mIFJlZ0V4cClyZXR1cm4gUmVnRXhwKGEpO2lmKGEgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShhKTt2YXIgYj17fSxjO2ZvcihjIGluIGEpYltjXT0ib2JqZWN0Ij09PXR5cGVvZiBhW2NdP3AoYVtjXSk6YVtjXTtyZXR1cm4gYn0sZz1mdW5jdGlvbihhKXtyZXR1cm4gMSE9PWE/MTowfSxoPWZ1bmN0aW9uKGEpe3JldHVybiAxPGE/MTowfTt0cnl7dGhpcy5waHBfanM9dGhpcy5waHBfanN8fHt9fWNhdGNoKGwpe3RoaXMucGhwX2pzPXt9fXZhciBrPQp0aGlzLnBocF9qcztrLmxvY2FsZXN8fChrLmxvY2FsZXM9e30say5sb2NhbGVzLmVuPXtMQ19DT0xMQVRFOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9PWI/MDphPmI/MTotMX0sTENfQ1RZUEU6e2FuOi9eW0EtWmEtelxkXSskL2csYWw6L15bQS1aYS16XSskL2csY3Q6L15bXHUwMDAwLVx1MDAxRlx1MDA3Rl0rJC9nLGRnOi9eW1xkXSskL2csZ3I6L15bXHUwMDIxLVx1MDA3RV0rJC9nLGx3Oi9eW2Etel0rJC9nLHByOi9eW1x1MDAyMC1cdTAwN0VdKyQvZyxwdTovXltcdTAwMjEtXHUwMDJGXHUwMDNBLVx1MDA0MFx1MDA1Qi1cdTAwNjBcdTAwN0ItXHUwMDdFXSskL2csc3A6L15bXGZcblxyXHRcdiBdKyQvZyx1cDovXltBLVpdKyQvZyx4ZDovXltBLUZhLWZcZF0rJC9nLENPREVTRVQ6IlVURi04Iixsb3dlcjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLHVwcGVyOiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiJ9LExDX1RJTUU6e2E6IlN1biBNb24gVHVlIFdlZCBUaHUgRnJpIFNhdCIuc3BsaXQoIiAiKSwKQToiU3VuZGF5IE1vbmRheSBUdWVzZGF5IFdlZG5lc2RheSBUaHVyc2RheSBGcmlkYXkgU2F0dXJkYXkiLnNwbGl0KCIgIiksYjoiSmFuIEZlYiBNYXIgQXByIE1heSBKdW4gSnVsIEF1ZyBTZXAgT2N0IE5vdiBEZWMiLnNwbGl0KCIgIiksQjoiSmFudWFyeSBGZWJydWFyeSBNYXJjaCBBcHJpbCBNYXkgSnVuZSBKdWx5IEF1Z3VzdCBTZXB0ZW1iZXIgT2N0b2JlciBOb3ZlbWJlciBEZWNlbWJlciIuc3BsaXQoIiAiKSxjOiIlYSAlZCAlYiAlWSAlciAlWiIscDpbIkFNIiwiUE0iXSxQOlsiYW0iLCJwbSJdLHI6IiVJOiVNOiVTICVwIix4OiIlbS8lZC8lWSIsWDoiJXIiLGFsdF9kaWdpdHM6IiIsRVJBOiIiLEVSQV9ZRUFSOiIiLEVSQV9EX1RfRk1UOiIiLEVSQV9EX0ZNVDoiIixFUkFfVF9GTVQ6IiJ9LExDX01PTkVUQVJZOntpbnRfY3Vycl9zeW1ib2w6IlVTRCIsY3VycmVuY3lfc3ltYm9sOiIkIixtb25fZGVjaW1hbF9wb2ludDoiLiIsbW9uX3Rob3VzYW5kc19zZXA6IiwiLG1vbl9ncm91cGluZzpbM10sCnBvc2l0aXZlX3NpZ246IiIsbmVnYXRpdmVfc2lnbjoiLSIsaW50X2ZyYWNfZGlnaXRzOjIsZnJhY19kaWdpdHM6MixwX2NzX3ByZWNlZGVzOjEscF9zZXBfYnlfc3BhY2U6MCxuX2NzX3ByZWNlZGVzOjEsbl9zZXBfYnlfc3BhY2U6MCxwX3NpZ25fcG9zbjozLG5fc2lnbl9wb3NuOjB9LExDX05VTUVSSUM6e2RlY2ltYWxfcG9pbnQ6Ii4iLHRob3VzYW5kc19zZXA6IiwiLGdyb3VwaW5nOlszXX0sTENfTUVTU0FHRVM6e1lFU0VYUFI6Il5beVldLioiLE5PRVhQUjoiXltuTl0uKiIsWUVTU1RSOiIiLE5PU1RSOiIifSxucGx1cmFsczpnfSxrLmxvY2FsZXMuZW5fVVM9ZihrLmxvY2FsZXMuZW4pLGsubG9jYWxlcy5lbl9VUy5MQ19USU1FLmM9IiVhICVkICViICVZICVyICVaIixrLmxvY2FsZXMuZW5fVVMuTENfVElNRS54PSIlRCIsay5sb2NhbGVzLmVuX1VTLkxDX1RJTUUuWD0iJXIiLGsubG9jYWxlcy5lbl9VUy5MQ19NT05FVEFSWS5pbnRfY3Vycl9zeW1ib2w9IlVTRCAiLGsubG9jYWxlcy5lbl9VUy5MQ19NT05FVEFSWS5wX3NpZ25fcG9zbj0KMSxrLmxvY2FsZXMuZW5fVVMuTENfTU9ORVRBUlkubl9zaWduX3Bvc249MSxrLmxvY2FsZXMuZW5fVVMuTENfTU9ORVRBUlkubW9uX2dyb3VwaW5nPVszLDNdLGsubG9jYWxlcy5lbl9VUy5MQ19OVU1FUklDLnRob3VzYW5kc19zZXA9IiIsay5sb2NhbGVzLmVuX1VTLkxDX05VTUVSSUMuZ3JvdXBpbmc9W10say5sb2NhbGVzLmVuX0dCPWYoay5sb2NhbGVzLmVuKSxrLmxvY2FsZXMuZW5fR0IuTENfVElNRS5yPSIlbDolTTolUyAlUCAlWiIsay5sb2NhbGVzLmVuX0FVPWYoay5sb2NhbGVzLmVuX0dCKSxrLmxvY2FsZXMuQz1mKGsubG9jYWxlcy5lbiksay5sb2NhbGVzLkMuTENfQ1RZUEUuQ09ERVNFVD0iQU5TSV9YMy40LTE5NjgiLGsubG9jYWxlcy5DLkxDX01PTkVUQVJZPXtpbnRfY3Vycl9zeW1ib2w6IiIsY3VycmVuY3lfc3ltYm9sOiIiLG1vbl9kZWNpbWFsX3BvaW50OiIiLG1vbl90aG91c2FuZHNfc2VwOiIiLG1vbl9ncm91cGluZzpbXSxwX2NzX3ByZWNlZGVzOjEyNyxwX3NlcF9ieV9zcGFjZToxMjcsCm5fY3NfcHJlY2VkZXM6MTI3LG5fc2VwX2J5X3NwYWNlOjEyNyxwX3NpZ25fcG9zbjoxMjcsbl9zaWduX3Bvc246MTI3LHBvc2l0aXZlX3NpZ246IiIsbmVnYXRpdmVfc2lnbjoiIixpbnRfZnJhY19kaWdpdHM6MTI3LGZyYWNfZGlnaXRzOjEyN30say5sb2NhbGVzLkMuTENfTlVNRVJJQz17ZGVjaW1hbF9wb2ludDoiLiIsdGhvdXNhbmRzX3NlcDoiIixncm91cGluZzpbXX0say5sb2NhbGVzLkMuTENfVElNRS5jPSIlYSAlYiAlZSAlSDolTTolUyAlWSIsay5sb2NhbGVzLkMuTENfVElNRS54PSIlbS8lZC8leSIsay5sb2NhbGVzLkMuTENfVElNRS5YPSIlSDolTTolUyIsay5sb2NhbGVzLkMuTENfTUVTU0FHRVMuWUVTRVhQUj0iXlt5WV0iLGsubG9jYWxlcy5DLkxDX01FU1NBR0VTLk5PRVhQUj0iXltuTl0iLGsubG9jYWxlcy5mcj1mKGsubG9jYWxlcy5lbiksay5sb2NhbGVzLmZyLm5wbHVyYWxzPWgsay5sb2NhbGVzLmZyLkxDX1RJTUUuYT0iZGltIGx1biBtYXIgbWVyIGpldSB2ZW4gc2FtIi5zcGxpdCgiICIpLAprLmxvY2FsZXMuZnIuTENfVElNRS5BPSJkaW1hbmNoZSBsdW5kaSBtYXJkaSBtZXJjcmVkaSBqZXVkaSB2ZW5kcmVkaSBzYW1lZGkiLnNwbGl0KCIgIiksay5sb2NhbGVzLmZyLkxDX1RJTUUuYj0iamFuIGZcdTAwZTl2IG1hciBhdnIgbWFpIGp1biBqdWkgYW9cdTAwZmIgc2VwIG9jdCBub3YgZFx1MDBlOWMiLnNwbGl0KCIgIiksay5sb2NhbGVzLmZyLkxDX1RJTUUuQj0iamFudmllciBmXHUwMGU5dnJpZXIgbWFycyBhdnJpbCBtYWkganVpbiBqdWlsbGV0IGFvXHUwMGZidCBzZXB0ZW1icmUgb2N0b2JyZSBub3ZlbWJyZSBkXHUwMGU5Y2VtYnJlIi5zcGxpdCgiICIpLGsubG9jYWxlcy5mci5MQ19USU1FLmM9IiVhICVkICViICVZICVUICVaIixrLmxvY2FsZXMuZnIuTENfVElNRS5wPVsiIiwiIl0say5sb2NhbGVzLmZyLkxDX1RJTUUuUD1bIiIsIiJdLGsubG9jYWxlcy5mci5MQ19USU1FLng9IiVkLiVtLiVZIixrLmxvY2FsZXMuZnIuTENfVElNRS5YPSIlVCIsay5sb2NhbGVzLmZyX0NBPQpmKGsubG9jYWxlcy5mciksay5sb2NhbGVzLmZyX0NBLkxDX1RJTUUueD0iJVktJW0tJWQiKTtrLmxvY2FsZXx8KGsubG9jYWxlPSJlbl9VUyIsZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TJiZlLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJodG1sIilbMF0/ZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiaHRtbCIpWzBdLmdldEF0dHJpYnV0ZU5TJiZlLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJodG1sIilbMF0uZ2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsImxhbmciKT9rLmxvY2FsZT1lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiaHRtbCIpWzBdLmdldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLAoibGFuZyIpOmUuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImh0bWwiKVswXS5sYW5nJiYoay5sb2NhbGU9ZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiaHRtbCIpWzBdLmxhbmcpOmUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImh0bWwiKVswXSYmZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaHRtbCIpWzBdLmxhbmcmJihrLmxvY2FsZT1lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIilbMF0ubGFuZykpO2subG9jYWxlPWsubG9jYWxlLnJlcGxhY2UoIi0iLCJfIik7IShrLmxvY2FsZSBpbiBrLmxvY2FsZXMpJiZrLmxvY2FsZS5yZXBsYWNlKC9fW2EtekEtWl0rJC8sIiIpaW4gay5sb2NhbGVzJiYoay5sb2NhbGU9ay5sb2NhbGUucmVwbGFjZSgvX1thLXpBLVpdKyQvLCIiKSk7ay5sb2NhbGVDYXRlZ29yaWVzfHwoay5sb2NhbGVDYXRlZ29yaWVzPXtMQ19DT0xMQVRFOmsubG9jYWxlLApMQ19DVFlQRTprLmxvY2FsZSxMQ19NT05FVEFSWTprLmxvY2FsZSxMQ19OVU1FUklDOmsubG9jYWxlLExDX1RJTUU6ay5sb2NhbGUsTENfTUVTU0FHRVM6ay5sb2NhbGV9KTtpZihudWxsPT09Y3x8IiI9PT1jKWM9dGhpcy5nZXRlbnYoYSl8fHRoaXMuZ2V0ZW52KCJMQU5HIik7ZWxzZSBpZigiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpKWZvcihlPTA7ZTxjLmxlbmd0aDtlKyspaWYoY1tlXWluIHRoaXMucGhwX2pzLmxvY2FsZXMpe2M9Y1tlXTticmVha31lbHNlIGlmKGU9PT1jLmxlbmd0aC0xKXJldHVybiExO2lmKCIwIj09PWN8fDA9PT1jKXtpZigiTENfQUxMIj09PWEpe2ZvcihiIGluIHRoaXMucGhwX2pzLmxvY2FsZUNhdGVnb3JpZXMpZC5wdXNoKGIrIj0iK3RoaXMucGhwX2pzLmxvY2FsZUNhdGVnb3JpZXNbYl0pO3JldHVybiBkLmpvaW4oIjsiKX1yZXR1cm4gdGhpcy5waHBfanMubG9jYWxlQ2F0ZWdvcmllc1thXX1pZighKGMgaW4KdGhpcy5waHBfanMubG9jYWxlcykpcmV0dXJuITE7aWYoIkxDX0FMTCI9PT1hKWZvcihiIGluIHRoaXMucGhwX2pzLmxvY2FsZUNhdGVnb3JpZXMpdGhpcy5waHBfanMubG9jYWxlQ2F0ZWdvcmllc1tiXT1jO2Vsc2UgdGhpcy5waHBfanMubG9jYWxlQ2F0ZWdvcmllc1thXT1jO3JldHVybiBjfTtuLnN0cmZ0aW1lPWZ1bmN0aW9uKGEsYyl7dGhpcy5waHBfanM9dGhpcy5waHBfanN8fHt9O3RoaXMuc2V0bG9jYWxlKCJMQ19BTEwiLDApO2Zvcih2YXIgYj10aGlzLnBocF9qcyxkPWZ1bmN0aW9uKGEsYixjKXtmb3IoInVuZGVmaW5lZCI9PT10eXBlb2YgYyYmKGM9MTApO3BhcnNlSW50KGEsMTApPGMmJjE8YztjLz0xMClhPWIudG9TdHJpbmcoKSthO3JldHVybiBhLnRvU3RyaW5nKCl9LGU9Yi5sb2NhbGVzW2IubG9jYWxlQ2F0ZWdvcmllcy5MQ19USU1FXS5MQ19USU1FLGY9e2E6ZnVuY3Rpb24oYSl7cmV0dXJuIGUuYVthLmdldERheSgpXX0sQTpmdW5jdGlvbihhKXtyZXR1cm4gZS5BW2EuZ2V0RGF5KCldfSwKYjpmdW5jdGlvbihhKXtyZXR1cm4gZS5iW2EuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24oYSl7cmV0dXJuIGUuQlthLmdldE1vbnRoKCldfSxDOmZ1bmN0aW9uKGEpe3JldHVybiBkKHBhcnNlSW50KGEuZ2V0RnVsbFllYXIoKS8xMDAsMTApLDApfSxkOlsiZ2V0RGF0ZSIsIjAiXSxlOlsiZ2V0RGF0ZSIsIiAiXSxnOmZ1bmN0aW9uKGEpe3JldHVybiBkKHBhcnNlSW50KHRoaXMuRyhhKS8xMDAsMTApLDApfSxHOmZ1bmN0aW9uKGEpe3ZhciBiPWEuZ2V0RnVsbFllYXIoKSxjPXBhcnNlSW50KGYuVihhKSwxMCk7YT1wYXJzZUludChmLlcoYSksMTApO2E+Yz9iKys6MD09PWEmJjUyPD1jJiZiLS07cmV0dXJuIGJ9LEg6WyJnZXRIb3VycyIsIjAiXSxJOmZ1bmN0aW9uKGEpe2E9YS5nZXRIb3VycygpJTEyO3JldHVybiBkKDA9PT1hPzEyOmEsMCl9LGo6ZnVuY3Rpb24oYSl7dmFyIGI9YS1uZXcgRGF0ZSgiIithLmdldEZ1bGxZZWFyKCkrIi8xLzEgR01UIiksYj1iKzZFNCphLmdldFRpbWV6b25lT2Zmc2V0KCk7CmE9cGFyc2VJbnQoYi82RTQvNjAvMjQsMTApKzE7cmV0dXJuIGQoYSwwLDEwMCl9LGs6WyJnZXRIb3VycyIsIjAiXSxsOmZ1bmN0aW9uKGEpe2E9YS5nZXRIb3VycygpJTEyO3JldHVybiBkKDA9PT1hPzEyOmEsIiAiKX0sbTpmdW5jdGlvbihhKXtyZXR1cm4gZChhLmdldE1vbnRoKCkrMSwwKX0sTTpbImdldE1pbnV0ZXMiLCIwIl0scDpmdW5jdGlvbihhKXtyZXR1cm4gZS5wWzEyPD1hLmdldEhvdXJzKCk/MTowXX0sUDpmdW5jdGlvbihhKXtyZXR1cm4gZS5QWzEyPD1hLmdldEhvdXJzKCk/MTowXX0sczpmdW5jdGlvbihhKXtyZXR1cm4gRGF0ZS5wYXJzZShhKS8xRTN9LFM6WyJnZXRTZWNvbmRzIiwiMCJdLHU6ZnVuY3Rpb24oYSl7YT1hLmdldERheSgpO3JldHVybiAwPT09YT83OmF9LFU6ZnVuY3Rpb24oYSl7dmFyIGI9cGFyc2VJbnQoZi5qKGEpLDEwKTthPTYtYS5nZXREYXkoKTtiPXBhcnNlSW50KChiK2EpLzcsMTApO3JldHVybiBkKGIsMCl9LFY6ZnVuY3Rpb24oYSl7dmFyIGI9CnBhcnNlSW50KGYuVyhhKSwxMCksYz0obmV3IERhdGUoIiIrYS5nZXRGdWxsWWVhcigpKyIvMS8xIikpLmdldERheSgpLGI9YisoNDxjfHwxPj1jPzA6MSk7NTM9PT1iJiY0PihuZXcgRGF0ZSgiIithLmdldEZ1bGxZZWFyKCkrIi8xMi8zMSIpKS5nZXREYXkoKT9iPTE6MD09PWImJihiPWYuVihuZXcgRGF0ZSgiIisoYS5nZXRGdWxsWWVhcigpLTEpKyIvMTIvMzEiKSkpO3JldHVybiBkKGIsMCl9LHc6ImdldERheSIsVzpmdW5jdGlvbihhKXt2YXIgYj1wYXJzZUludChmLmooYSksMTApO2E9Ny1mLnUoYSk7Yj1wYXJzZUludCgoYithKS83LDEwKTtyZXR1cm4gZChiLDAsMTApfSx5OmZ1bmN0aW9uKGEpe3JldHVybiBkKGEuZ2V0RnVsbFllYXIoKSUxMDAsMCl9LFk6ImdldEZ1bGxZZWFyIix6OmZ1bmN0aW9uKGEpe2E9YS5nZXRUaW1lem9uZU9mZnNldCgpO3ZhciBiPWQocGFyc2VJbnQoTWF0aC5hYnMoYS82MCksMTApLDApLGM9ZChhJTYwLDApO3JldHVybigwPGE/Ii0iOiIrIikrYisKY30sWjpmdW5jdGlvbihhKXtyZXR1cm4gYS50b1N0cmluZygpLnJlcGxhY2UoL14uKlwoKFteKV0rKVwpJC8sIiQxIil9LCIlIjpmdW5jdGlvbihhKXtyZXR1cm4iJSJ9fSxnPSJ1bmRlZmluZWQiPT09dHlwZW9mIGM/bmV3IERhdGU6Im9iamVjdCI9PT10eXBlb2YgYz9uZXcgRGF0ZShjKTpuZXcgRGF0ZSgxRTMqYyksaD17YzoibG9jYWxlIixEOiIlbS8lZC8leSIsRjoiJXktJW0tJWQiLGg6IiViIixuOiJcbiIscjoibG9jYWxlIixSOiIlSDolTSIsdDoiXHQiLFQ6IiVIOiVNOiVTIix4OiJsb2NhbGUiLFg6ImxvY2FsZSJ9O2EubWF0Y2goLyVbY0RGaG5yUnRUeFhdLyk7KWE9YS5yZXBsYWNlKC8lKFtjREZobnJSdFR4WF0pL2csZnVuY3Rpb24oYSxiKXt2YXIgYz1oW2JdO3JldHVybiJsb2NhbGUiPT09Yz9lW2JdOmN9KTtyZXR1cm4gYS5yZXBsYWNlKC8lKFthQWJCQ2RlZ0dISWprbG1NcFBzU3VVVndXeVl6WiVdKS9nLGZ1bmN0aW9uKGEsYil7dmFyIGM9ZltiXTtyZXR1cm4ic3RyaW5nIj09PQp0eXBlb2YgYz9nW2NdKCk6ImZ1bmN0aW9uIj09PXR5cGVvZiBjP2MoZyk6Im9iamVjdCI9PT10eXBlb2YgYyYmInN0cmluZyI9PT10eXBlb2YgY1swXT9kKGdbY1swXV0oKSxjWzFdKTpifSl9O24uc3RydG90aW1lPWZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gYihhKXt2YXIgYj1hLnNwbGl0KCIgIik7YT1iWzBdO3ZhciBjPWJbMV0uc3Vic3RyaW5nKDAsMyksZD0vXGQrLy50ZXN0KGEpLGU9KCJsYXN0Ij09PWE/LTE6MSkqKCJhZ28iPT09YlsyXT8tMToxKTtkJiYoZSo9cGFyc2VJbnQoYSwxMCkpO2lmKGguaGFzT3duUHJvcGVydHkoYykmJiFiWzFdLm1hdGNoKC9ebW9uKGRheXxcLik/JC9pKSlyZXR1cm4gZlsic2V0IitoW2NdXShmWyJnZXQiK2hbY11dKCkrZSk7aWYoIndlZSI9PT1jKXJldHVybiBmLnNldERhdGUoZi5nZXREYXRlKCkrNyplKTtpZigibmV4dCI9PT1hfHwibGFzdCI9PT1hKWI9ZSxjPWdbY10sInVuZGVmaW5lZCIhPT10eXBlb2YgYyYmKGMtPWYuZ2V0RGF5KCksMD09PQpjP2M9NypiOjA8YyYmImxhc3QiPT09YT9jLT03OjA+YyYmIm5leHQiPT09YSYmKGMrPTcpLGYuc2V0RGF0ZShmLmdldERhdGUoKStjKSk7ZWxzZSBpZighZClyZXR1cm4hMTtyZXR1cm4hMH12YXIgZCxlLGYsZyxoLGw7aWYoIWEpcmV0dXJuITE7YT1hLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKS5yZXBsYWNlKC9cc3syLH0vZywiICIpLnJlcGxhY2UoL1tcdFxyXG5dL2csIiIpLnRvTG93ZXJDYXNlKCk7aWYoKGQ9YS5tYXRjaCgvXihcZHsxLDR9KShbXC1cLlwvXDpdKShcZHsxLDJ9KShbXC1cLlwvXDpdKShcZHsxLDR9KSg/OlxzKFxkezEsMn0pOihcZHsyfSk/Oj8oXGR7Mn0pPyk/KD86XHMoW0EtWl0rKT8pPyQvKSkmJmRbMl09PT1kWzRdKWlmKDE5MDE8ZFsxXSlzd2l0Y2goZFsyXSl7Y2FzZSAiLSI6cmV0dXJuIDEyPGRbM118fDMxPGRbNV0/ITE6bmV3IERhdGUoZFsxXSxwYXJzZUludChkWzNdLDEwKS0xLGRbNV0sZFs2XXx8MCxkWzddfHwwLGRbOF18fDAsZFs5XXx8MCkvMUUzOwpjYXNlICIuIjpyZXR1cm4hMTtjYXNlICIvIjpyZXR1cm4gMTI8ZFszXXx8MzE8ZFs1XT8hMTpuZXcgRGF0ZShkWzFdLHBhcnNlSW50KGRbM10sMTApLTEsZFs1XSxkWzZdfHwwLGRbN118fDAsZFs4XXx8MCxkWzldfHwwKS8xRTN9ZWxzZSBpZigxOTAxPGRbNV0pc3dpdGNoKGRbMl0pe2Nhc2UgIi0iOnJldHVybiAxMjxkWzNdfHwzMTxkWzFdPyExOm5ldyBEYXRlKGRbNV0scGFyc2VJbnQoZFszXSwxMCktMSxkWzFdLGRbNl18fDAsZFs3XXx8MCxkWzhdfHwwLGRbOV18fDApLzFFMztjYXNlICIuIjpyZXR1cm4gMTI8ZFszXXx8MzE8ZFsxXT8hMTpuZXcgRGF0ZShkWzVdLHBhcnNlSW50KGRbM10sMTApLTEsZFsxXSxkWzZdfHwwLGRbN118fDAsZFs4XXx8MCxkWzldfHwwKS8xRTM7Y2FzZSAiLyI6cmV0dXJuIDEyPGRbMV18fDMxPGRbM10/ITE6bmV3IERhdGUoZFs1XSxwYXJzZUludChkWzFdLDEwKS0xLGRbM10sZFs2XXx8MCxkWzddfHwwLGRbOF18fDAsZFs5XXx8MCkvMUUzfWVsc2Ugc3dpdGNoKGRbMl0pe2Nhc2UgIi0iOmlmKDEyPApkWzNdfHwzMTxkWzVdfHw3MD5kWzFdJiYzODxkWzFdKXJldHVybiExO2U9MDw9ZFsxXSYmMzg+PWRbMV0/K2RbMV0rMkUzOmRbMV07cmV0dXJuIG5ldyBEYXRlKGUscGFyc2VJbnQoZFszXSwxMCktMSxkWzVdLGRbNl18fDAsZFs3XXx8MCxkWzhdfHwwLGRbOV18fDApLzFFMztjYXNlICIuIjppZig3MDw9ZFs1XSlyZXR1cm4gMTI8ZFszXXx8MzE8ZFsxXT8hMTpuZXcgRGF0ZShkWzVdLHBhcnNlSW50KGRbM10sMTApLTEsZFsxXSxkWzZdfHwwLGRbN118fDAsZFs4XXx8MCxkWzldfHwwKS8xRTM7aWYoNjA+ZFs1XSYmIWRbNl0pe2lmKDIzPGRbMV18fDU5PGRbM10pcmV0dXJuITE7ZT1uZXcgRGF0ZTtyZXR1cm4gbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSxlLmdldERhdGUoKSxkWzFdfHwwLGRbM118fDAsZFs1XXx8MCxkWzldfHwwKS8xRTN9cmV0dXJuITE7Y2FzZSAiLyI6aWYoMTI8ZFsxXXx8MzE8ZFszXXx8NzA+ZFs1XSYmMzg8ZFs1XSlyZXR1cm4hMTtlPTA8PQpkWzVdJiYzOD49ZFs1XT8rZFs1XSsyRTM6ZFs1XTtyZXR1cm4gbmV3IERhdGUoZSxwYXJzZUludChkWzFdLDEwKS0xLGRbM10sZFs2XXx8MCxkWzddfHwwLGRbOF18fDAsZFs5XXx8MCkvMUUzO2Nhc2UgIjoiOmlmKDIzPGRbMV18fDU5PGRbM118fDU5PGRbNV0pcmV0dXJuITE7ZT1uZXcgRGF0ZTtyZXR1cm4gbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSxlLmdldERhdGUoKSxkWzFdfHwwLGRbM118fDAsZFs1XXx8MCkvMUUzfWlmKCJub3ciPT09YSlyZXR1cm4gbnVsbD09PWN8fGlzTmFOKGMpPyhuZXcgRGF0ZSkuZ2V0VGltZSgpLzFFM3wwOmN8MDtpZighaXNOYU4oZD1EYXRlLnBhcnNlKGEpKSlyZXR1cm4gZC8xRTN8MDtmPWM/bmV3IERhdGUoMUUzKmMpOm5ldyBEYXRlO2c9e3N1bjowLG1vbjoxLHR1ZToyLHdlZDozLHRodTo0LGZyaTo1LHNhdDo2fTtoPXt5ZWE6IkZ1bGxZZWFyIixtb246Ik1vbnRoIixkYXk6IkRhdGUiLGhvdToiSG91cnMiLG1pbjoiTWludXRlcyIsCnNlYzoiU2Vjb25kcyJ9O2Q9YS5tYXRjaChSZWdFeHAoIihbKy1dP1xcZCtcXHMoeWVhcnM/fG1vbnRocz98d2Vla3M/fGRheXM/fGhvdXJzP3xtaW51dGVzP3xtaW58c2Vjb25kcz98c2VjfHN1bmRheXxzdW5cXC4/fG1vbmRheXxtb25cXC4/fHR1ZXNkYXl8dHVlXFwuP3x3ZWRuZXNkYXl8d2VkXFwuP3x0aHVyc2RheXx0aHVcXC4/fGZyaWRheXxmcmlcXC4/fHNhdHVyZGF5fHNhdFxcLj8pfChsYXN0fG5leHQpXFxzKHllYXJzP3xtb250aHM/fHdlZWtzP3xkYXlzP3xob3Vycz98bWludXRlcz98bWlufHNlY29uZHM/fHNlY3xzdW5kYXl8c3VuXFwuP3xtb25kYXl8bW9uXFwuP3x0dWVzZGF5fHR1ZVxcLj98d2VkbmVzZGF5fHdlZFxcLj98dGh1cnNkYXl8dGh1XFwuP3xmcmlkYXl8ZnJpXFwuP3xzYXR1cmRheXxzYXRcXC4/KSkoXFxzYWdvKT8iLCJnaSIpKTtpZighZClyZXR1cm4hMTtsPTA7Zm9yKGU9ZC5sZW5ndGg7bDxlO2wrKylpZighYihkW2xdKSlyZXR1cm4hMTtyZXR1cm4gZi5nZXRUaW1lKCkvCjFFM307bWFrZVRpbWVTdGFtcD1mdW5jdGlvbihhKXtpZighYSlyZXR1cm4gTWF0aC5mbG9vcigobmV3IERhdGUpLmdldFRpbWUoKS8xRTMpO2lmKGlzTmFOKGEpKXJldHVybiBhPW4uc3RydG90aW1lKGEpLC0xPT1hfHwhMT09PWE/TWF0aC5mbG9vcigobmV3IERhdGUpLmdldFRpbWUoKS8xRTMpOmE7YT1uZXcgU3RyaW5nKGEpO3JldHVybiAxND09YS5sZW5ndGg/TWF0aC5mbG9vcigobmV3IERhdGUoYS5zdWJzdHIoMCw0KSxhLnN1YnN0cig0LDIpLTEsYS5zdWJzdHIoNiwyKSxhLnN1YnN0cig4LDIpLGEuc3Vic3RyKDEwLDIpKSkuZ2V0VGltZSgpLzFFMyk6cGFyc2VJbnQoYSl9O2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJtb2RpZmllciIsImRhdGVfZm9ybWF0IixmdW5jdGlvbihhLGMsYil7cmV0dXJuIGE/bi5zdHJmdGltZShjP2M6IiViICVlLCAlWSIsbWFrZVRpbWVTdGFtcChhP2E6YikpOiIifSk7bi5nZXRfaHRtbF90cmFuc2xhdGlvbl90YWJsZT1mdW5jdGlvbihhLApjKXt2YXIgYj17fSxkPXt9LGUsZj17fSxnPXt9LGg9e30sbD17fTtmWzBdPSJIVE1MX1NQRUNJQUxDSEFSUyI7ZlsxXT0iSFRNTF9FTlRJVElFUyI7Z1swXT0iRU5UX05PUVVPVEVTIjtnWzJdPSJFTlRfQ09NUEFUIjtnWzNdPSJFTlRfUVVPVEVTIjtoPWlzTmFOKGEpP2E/YS50b1VwcGVyQ2FzZSgpOiJIVE1MX1NQRUNJQUxDSEFSUyI6ZlthXTtsPWlzTmFOKGMpP2M/Yy50b1VwcGVyQ2FzZSgpOiJFTlRfQ09NUEFUIjpnW2NdO2lmKCJIVE1MX1NQRUNJQUxDSEFSUyIhPT1oJiYiSFRNTF9FTlRJVElFUyIhPT1oKXRocm93IEVycm9yKCJUYWJsZTogIitoKyIgbm90IHN1cHBvcnRlZCIpO2JbIjM4Il09IiZhbXA7IjsiSFRNTF9FTlRJVElFUyI9PT1oJiYoYlsiMTYwIl09IiZuYnNwOyIsYlsiMTYxIl09IiZpZXhjbDsiLGJbIjE2MiJdPSImY2VudDsiLGJbIjE2MyJdPSImcG91bmQ7IixiWyIxNjQiXT0iJmN1cnJlbjsiLGJbIjE2NSJdPSImeWVuOyIsYlsiMTY2Il09IiZicnZiYXI7IiwKYlsiMTY3Il09IiZzZWN0OyIsYlsiMTY4Il09IiZ1bWw7IixiWyIxNjkiXT0iJmNvcHk7IixiWyIxNzAiXT0iJm9yZGY7IixiWyIxNzEiXT0iJmxhcXVvOyIsYlsiMTcyIl09IiZub3Q7IixiWyIxNzMiXT0iJnNoeTsiLGJbIjE3NCJdPSImcmVnOyIsYlsiMTc1Il09IiZtYWNyOyIsYlsiMTc2Il09IiZkZWc7IixiWyIxNzciXT0iJnBsdXNtbjsiLGJbIjE3OCJdPSImc3VwMjsiLGJbIjE3OSJdPSImc3VwMzsiLGJbIjE4MCJdPSImYWN1dGU7IixiWyIxODEiXT0iJm1pY3JvOyIsYlsiMTgyIl09IiZwYXJhOyIsYlsiMTgzIl09IiZtaWRkb3Q7IixiWyIxODQiXT0iJmNlZGlsOyIsYlsiMTg1Il09IiZzdXAxOyIsYlsiMTg2Il09IiZvcmRtOyIsYlsiMTg3Il09IiZyYXF1bzsiLGJbIjE4OCJdPSImZnJhYzE0OyIsYlsiMTg5Il09IiZmcmFjMTI7IixiWyIxOTAiXT0iJmZyYWMzNDsiLGJbIjE5MSJdPSImaXF1ZXN0OyIsYlsiMTkyIl09IiZBZ3JhdmU7IixiWyIxOTMiXT0iJkFhY3V0ZTsiLApiWyIxOTQiXT0iJkFjaXJjOyIsYlsiMTk1Il09IiZBdGlsZGU7IixiWyIxOTYiXT0iJkF1bWw7IixiWyIxOTciXT0iJkFyaW5nOyIsYlsiMTk4Il09IiZBRWxpZzsiLGJbIjE5OSJdPSImQ2NlZGlsOyIsYlsiMjAwIl09IiZFZ3JhdmU7IixiWyIyMDEiXT0iJkVhY3V0ZTsiLGJbIjIwMiJdPSImRWNpcmM7IixiWyIyMDMiXT0iJkV1bWw7IixiWyIyMDQiXT0iJklncmF2ZTsiLGJbIjIwNSJdPSImSWFjdXRlOyIsYlsiMjA2Il09IiZJY2lyYzsiLGJbIjIwNyJdPSImSXVtbDsiLGJbIjIwOCJdPSImRVRIOyIsYlsiMjA5Il09IiZOdGlsZGU7IixiWyIyMTAiXT0iJk9ncmF2ZTsiLGJbIjIxMSJdPSImT2FjdXRlOyIsYlsiMjEyIl09IiZPY2lyYzsiLGJbIjIxMyJdPSImT3RpbGRlOyIsYlsiMjE0Il09IiZPdW1sOyIsYlsiMjE1Il09IiZ0aW1lczsiLGJbIjIxNiJdPSImT3NsYXNoOyIsYlsiMjE3Il09IiZVZ3JhdmU7IixiWyIyMTgiXT0iJlVhY3V0ZTsiLGJbIjIxOSJdPSImVWNpcmM7IiwKYlsiMjIwIl09IiZVdW1sOyIsYlsiMjIxIl09IiZZYWN1dGU7IixiWyIyMjIiXT0iJlRIT1JOOyIsYlsiMjIzIl09IiZzemxpZzsiLGJbIjIyNCJdPSImYWdyYXZlOyIsYlsiMjI1Il09IiZhYWN1dGU7IixiWyIyMjYiXT0iJmFjaXJjOyIsYlsiMjI3Il09IiZhdGlsZGU7IixiWyIyMjgiXT0iJmF1bWw7IixiWyIyMjkiXT0iJmFyaW5nOyIsYlsiMjMwIl09IiZhZWxpZzsiLGJbIjIzMSJdPSImY2NlZGlsOyIsYlsiMjMyIl09IiZlZ3JhdmU7IixiWyIyMzMiXT0iJmVhY3V0ZTsiLGJbIjIzNCJdPSImZWNpcmM7IixiWyIyMzUiXT0iJmV1bWw7IixiWyIyMzYiXT0iJmlncmF2ZTsiLGJbIjIzNyJdPSImaWFjdXRlOyIsYlsiMjM4Il09IiZpY2lyYzsiLGJbIjIzOSJdPSImaXVtbDsiLGJbIjI0MCJdPSImZXRoOyIsYlsiMjQxIl09IiZudGlsZGU7IixiWyIyNDIiXT0iJm9ncmF2ZTsiLGJbIjI0MyJdPSImb2FjdXRlOyIsYlsiMjQ0Il09IiZvY2lyYzsiLGJbIjI0NSJdPSImb3RpbGRlOyIsCmJbIjI0NiJdPSImb3VtbDsiLGJbIjI0NyJdPSImZGl2aWRlOyIsYlsiMjQ4Il09IiZvc2xhc2g7IixiWyIyNDkiXT0iJnVncmF2ZTsiLGJbIjI1MCJdPSImdWFjdXRlOyIsYlsiMjUxIl09IiZ1Y2lyYzsiLGJbIjI1MiJdPSImdXVtbDsiLGJbIjI1MyJdPSImeWFjdXRlOyIsYlsiMjU0Il09IiZ0aG9ybjsiLGJbIjI1NSJdPSImeXVtbDsiKTsiRU5UX05PUVVPVEVTIiE9PWwmJihiWyIzNCJdPSImcXVvdDsiKTsiRU5UX1FVT1RFUyI9PT1sJiYoYlsiMzkiXT0iJiMzOTsiKTtiWyI2MCJdPSImbHQ7IjtiWyI2MiJdPSImZ3Q7Ijtmb3IoZSBpbiBiKWIuaGFzT3duUHJvcGVydHkoZSkmJihkW1N0cmluZy5mcm9tQ2hhckNvZGUoZSldPWJbZV0pO3JldHVybiBkfTtuLmh0bWxlbnRpdGllcz1mdW5jdGlvbihhLGMsYixkKXt2YXIgZT10aGlzLmdldF9odG1sX3RyYW5zbGF0aW9uX3RhYmxlKCJIVE1MX0VOVElUSUVTIixjKTthPW51bGw9PWE/IiI6YSsiIjtpZighZSlyZXR1cm4hMTtjJiYiRU5UX1FVT1RFUyI9PT0KYyYmKGVbIiciXT0iJiMwMzk7Iik7ZD1udWxsPT1kfHwhIWQ7Yz1SZWdFeHAoIiYoPzojXFxkK3wjeFtcXGRhLWZdK3xbYS16QS1aXVtcXGRhLXpdKik7fFsiK09iamVjdC5rZXlzKGUpLmpvaW4oIiIpLnJlcGxhY2UoLyhbKClbXF17fVwtLiorP14kfFwvXFxdKS9nLCJcXCQxIikrIl0iLCJnIik7cmV0dXJuIGEucmVwbGFjZShjLGZ1bmN0aW9uKGEpe3JldHVybiAxPGEubGVuZ3RoP2Q/ZVsiJiJdK2Euc3Vic3RyKDEpOmE6ZVthXX0pfTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLCJlc2NhcGUiLGZ1bmN0aW9uKGEsYyxiLGQpe2E9bmV3IFN0cmluZyhhKTtiPWJ8fCJVVEYtOCI7ZD0idW5kZWZpbmVkIiE9dHlwZW9mIGQ/Qm9vbGVhbihkKTohMDtzd2l0Y2goY3x8Imh0bWwiKXtjYXNlICJodG1sIjpyZXR1cm4gZCYmKGE9YS5yZXBsYWNlKC8mL2csIiZhbXA7IikpLGEucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvJy9nLAoiJiMwMzk7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKTtjYXNlICJodG1sYWxsIjpyZXR1cm4gbi5odG1sZW50aXRpZXMoYSwzLGIpO2Nhc2UgInVybCI6cmV0dXJuIG4ucmF3dXJsZW5jb2RlKGEpO2Nhc2UgInVybHBhdGhpbmZvIjpyZXR1cm4gbi5yYXd1cmxlbmNvZGUoYSkucmVwbGFjZSgvJTJGL2csIi8iKTtjYXNlICJxdW90ZXMiOnJldHVybiBhLnJlcGxhY2UoLyhefFteXFxdKScvZywiJDFcXCciKTtjYXNlICJoZXgiOmM9IiI7Zm9yKGI9MDtiPGEubGVuZ3RoOysrYiljKz0iJSIrbi5iaW4yaGV4KGEuc3Vic3RyKGIsMSkpO3JldHVybiBjO2Nhc2UgImhleGVudGl0eSI6Yz0iIjtmb3IoYj0wO2I8YS5sZW5ndGg7KytiKWMrPSImI3giK24uYmluMmhleChhLnN1YnN0cihiLDEpKS50b1VwcGVyQ2FzZSgpKyI7IjtyZXR1cm4gYztjYXNlICJkZWNlbnRpdHkiOmM9IiI7Zm9yKGI9MDtiPGEubGVuZ3RoOysrYiljKz0iJiMiK24ub3JkKGEuc3Vic3RyKGIsMSkpKyI7IjtyZXR1cm4gYzsKY2FzZSAibWFpbCI6cmV0dXJuIGEucmVwbGFjZSgvQC9nLCIgW0FUXSAiKS5yZXBsYWNlKC9bLl0vZywiIFtET1RdICIpO2Nhc2UgIm5vbnN0ZCI6Yz0iIjtmb3IoYj0wO2I8YS5sZW5ndGg7KytiKWQ9bi5vcmQoYS5zdWJzdHIoYiwxKSksYz0xMjY8PWQ/YysoIiYjIitkKyI7Iik6YythLnN1YnN0cihiLDEpO3JldHVybiBjO2Nhc2UgImphdmFzY3JpcHQiOnJldHVybiBhLnJlcGxhY2UoL1xcL2csIlxcXFwiKS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoLyIvZywnXFwiJykucmVwbGFjZSgvXHIvZywiXFxyIikucmVwbGFjZSgvXG4vZywiXFxuIikucmVwbGFjZSgvPFwvL2csIjwvIil9cmV0dXJuIGF9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLCJpbmRlbnQiLGZ1bmN0aW9uKGEsYyxiKXthPW5ldyBTdHJpbmcoYSk7Yz1jP2M6NDtiPWI/YjoiICI7Zm9yKHZhciBkPSIiO2MtLTspZCs9YjtjPWEubWF0Y2goL1xuKyQvKTtyZXR1cm4gZCthLnJlcGxhY2UoL1xuKyQvLAoiIikucmVwbGFjZSgvXG4vZywiXG4iK2QpKyhjP2NbMF06IiIpfSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oIm1vZGlmaWVyIiwibG93ZXIiLGZ1bmN0aW9uKGEpe3JldHVybihuZXcgU3RyaW5nKGEpKS50b0xvd2VyQ2FzZSgpfSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oIm1vZGlmaWVyIiwibmwyYnIiLGZ1bmN0aW9uKGEpe3JldHVybihuZXcgU3RyaW5nKGEpKS5yZXBsYWNlKC9cbi9nLCI8YnIgLz5cbiIpfSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oIm1vZGlmaWVyIiwicmVnZXhfcmVwbGFjZSIsZnVuY3Rpb24oYSxjLGIpe2M9Yy5tYXRjaCgvXiAqXC8oLiopXC8oLiopICokLyk7cmV0dXJuKG5ldyBTdHJpbmcoYSkpLnJlcGxhY2UoUmVnRXhwKGNbMV0sImciKygxPGMubGVuZ3RoP2NbMl06IiIpKSxiKX0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJtb2RpZmllciIsInJlcGxhY2UiLGZ1bmN0aW9uKGEsYyxiKXtpZighYylyZXR1cm4gYTthPW5ldyBTdHJpbmcoYSk7CmM9bmV3IFN0cmluZyhjKTtiPW5ldyBTdHJpbmcoYik7Zm9yKHZhciBkPSIiLGU9LTEsZT1hLmluZGV4T2YoYyk7MDw9ZTtlPWEuaW5kZXhPZihjKSlkKz1hLnNsaWNlKDAsZSkrYixlKz1jLmxlbmd0aCxhPWEuc2xpY2UoZSk7cmV0dXJuIGQrYX0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJtb2RpZmllciIsInNwYWNpZnkiLGZ1bmN0aW9uKGEsYyl7Y3x8KGM9IiAiKTtyZXR1cm4obmV3IFN0cmluZyhhKSkucmVwbGFjZSgvKFxufC4pKD8hJCkvZywiJDEiK2MpfSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oIm1vZGlmaWVyIiwic3RyaW5nX2Zvcm1hdCIsZnVuY3Rpb24oYSxjKXtyZXR1cm4gbi5zcHJpbnRmKGMsYSl9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLCJzdHJpcCIsZnVuY3Rpb24oYSxjKXtjPWM/YzoiICI7cmV0dXJuKG5ldyBTdHJpbmcoYSkpLnJlcGxhY2UoL1tcc10rL2csYyl9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLAoic3RyaXBfdGFncyIsZnVuY3Rpb24oYSxjKXtjPW51bGw9PWM/ITA6YztyZXR1cm4obmV3IFN0cmluZyhhKSkucmVwbGFjZSgvPFtePl0qPz4vZyxjPyIgIjoiIil9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLCJ0cnVuY2F0ZSIsZnVuY3Rpb24oYSxjLGIsZCxlKXthPW5ldyBTdHJpbmcoYSk7Yz1jP2M6ODA7Yj1udWxsIT1iP2I6Ii4uLiI7aWYoYS5sZW5ndGg8PWMpcmV0dXJuIGE7Yy09TWF0aC5taW4oYyxiLmxlbmd0aCk7aWYoZSlyZXR1cm4gYS5zbGljZSgwLE1hdGguZmxvb3IoYy8yKSkrYithLnNsaWNlKGEubGVuZ3RoLU1hdGguZmxvb3IoYy8yKSk7ZHx8KGE9YS5zbGljZSgwLGMrMSkucmVwbGFjZSgvXHMrPyhcUyspPyQvLCIiKSk7cmV0dXJuIGEuc2xpY2UoMCxjKStifSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oIm1vZGlmaWVyIiwidXBwZXIiLGZ1bmN0aW9uKGEpe3JldHVybihuZXcgU3RyaW5nKGEpKS50b1VwcGVyQ2FzZSgpfSl9KSgpOwo=]]></data>
	</file>
	<file>
	  <filename>/js/dev/underscore-esm.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gICAgIFVuZGVyc2NvcmUuanMgMS4xMy42Ci8vICAgICBodHRwczovL3VuZGVyc2NvcmVqcy5vcmcKLy8gICAgIChjKSAyMDA5LTIwMjIgSmVyZW15IEFzaGtlbmFzLCBKdWxpYW4gR29uZ2dyaWpwLCBhbmQgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzCi8vICAgICBVbmRlcnNjb3JlIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgoKLy8gQ3VycmVudCB2ZXJzaW9uLgp2YXIgVkVSU0lPTiA9ICcxLjEzLjYnOwoKLy8gRXN0YWJsaXNoIHRoZSByb290IG9iamVjdCwgYHdpbmRvd2AgKGBzZWxmYCkgaW4gdGhlIGJyb3dzZXIsIGBnbG9iYWxgCi8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmAKLy8gaW5zdGVhZCBvZiBgd2luZG93YCBmb3IgYFdlYldvcmtlcmAgc3VwcG9ydC4KdmFyIHJvb3QgPSAodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZi5zZWxmID09PSBzZWxmICYmIHNlbGYpIHx8CiAgICAgICAgICAodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsKSB8fAogICAgICAgICAgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKSB8fAogICAgICAgICAge307CgovLyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmllZCAoYnV0IG5vdCBnemlwcGVkKSB2ZXJzaW9uOgp2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSwgT2JqUHJvdG8gPSBPYmplY3QucHJvdG90eXBlOwp2YXIgU3ltYm9sUHJvdG8gPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyA/IFN5bWJvbC5wcm90b3R5cGUgOiBudWxsOwoKLy8gQ3JlYXRlIHF1aWNrIHJlZmVyZW5jZSB2YXJpYWJsZXMgZm9yIHNwZWVkIGFjY2VzcyB0byBjb3JlIHByb3RvdHlwZXMuCnZhciBwdXNoID0gQXJyYXlQcm90by5wdXNoLAogICAgc2xpY2UgPSBBcnJheVByb3RvLnNsaWNlLAogICAgdG9TdHJpbmcgPSBPYmpQcm90by50b1N0cmluZywKICAgIGhhc093blByb3BlcnR5ID0gT2JqUHJvdG8uaGFzT3duUHJvcGVydHk7CgovLyBNb2Rlcm4gZmVhdHVyZSBkZXRlY3Rpb24uCnZhciBzdXBwb3J0c0FycmF5QnVmZmVyID0gdHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJywKICAgIHN1cHBvcnRzRGF0YVZpZXcgPSB0eXBlb2YgRGF0YVZpZXcgIT09ICd1bmRlZmluZWQnOwoKLy8gQWxsICoqRUNNQVNjcmlwdCA1KyoqIG5hdGl2ZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB3ZSBob3BlIHRvIHVzZQovLyBhcmUgZGVjbGFyZWQgaGVyZS4KdmFyIG5hdGl2ZUlzQXJyYXkgPSBBcnJheS5pc0FycmF5LAogICAgbmF0aXZlS2V5cyA9IE9iamVjdC5rZXlzLAogICAgbmF0aXZlQ3JlYXRlID0gT2JqZWN0LmNyZWF0ZSwKICAgIG5hdGl2ZUlzVmlldyA9IHN1cHBvcnRzQXJyYXlCdWZmZXIgJiYgQXJyYXlCdWZmZXIuaXNWaWV3OwoKLy8gQ3JlYXRlIHJlZmVyZW5jZXMgdG8gdGhlc2UgYnVpbHRpbiBmdW5jdGlvbnMgYmVjYXVzZSB3ZSBvdmVycmlkZSB0aGVtLgp2YXIgX2lzTmFOID0gaXNOYU4sCiAgICBfaXNGaW5pdGUgPSBpc0Zpbml0ZTsKCi8vIEtleXMgaW4gSUUgPCA5IHRoYXQgd29uJ3QgYmUgaXRlcmF0ZWQgYnkgYGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNzZWQuCnZhciBoYXNFbnVtQnVnID0gIXt0b1N0cmluZzogbnVsbH0ucHJvcGVydHlJc0VudW1lcmFibGUoJ3RvU3RyaW5nJyk7CnZhciBub25FbnVtZXJhYmxlUHJvcHMgPSBbJ3ZhbHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICd0b1N0cmluZycsCiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ2hhc093blByb3BlcnR5JywgJ3RvTG9jYWxlU3RyaW5nJ107CgovLyBUaGUgbGFyZ2VzdCBpbnRlZ2VyIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGV4YWN0bHkuCnZhciBNQVhfQVJSQVlfSU5ERVggPSBNYXRoLnBvdygyLCA1MykgLSAxOwoKLy8gU29tZSBmdW5jdGlvbnMgdGFrZSBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMsIG9yIGEgZmV3IGV4cGVjdGVkCi8vIGFyZ3VtZW50cyBhdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGVuIGEgdmFyaWFibGUgbnVtYmVyIG9mIHZhbHVlcyB0byBvcGVyYXRlCi8vIG9uLiBUaGlzIGhlbHBlciBhY2N1bXVsYXRlcyBhbGwgcmVtYWluaW5nIGFyZ3VtZW50cyBwYXN0IHRoZSBmdW5jdGlvbuKAmXMKLy8gYXJndW1lbnQgbGVuZ3RoIChvciBhbiBleHBsaWNpdCBgc3RhcnRJbmRleGApLCBpbnRvIGFuIGFycmF5IHRoYXQgYmVjb21lcwovLyB0aGUgbGFzdCBhcmd1bWVudC4gU2ltaWxhciB0byBFUzbigJlzICJyZXN0IHBhcmFtZXRlciIuCmZ1bmN0aW9uIHJlc3RBcmd1bWVudHMoZnVuYywgc3RhcnRJbmRleCkgewogIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4ID09IG51bGwgPyBmdW5jLmxlbmd0aCAtIDEgOiArc3RhcnRJbmRleDsKICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICB2YXIgbGVuZ3RoID0gTWF0aC5tYXgoYXJndW1lbnRzLmxlbmd0aCAtIHN0YXJ0SW5kZXgsIDApLAogICAgICAgIHJlc3QgPSBBcnJheShsZW5ndGgpLAogICAgICAgIGluZGV4ID0gMDsKICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgewogICAgICByZXN0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCArIHN0YXJ0SW5kZXhdOwogICAgfQogICAgc3dpdGNoIChzdGFydEluZGV4KSB7CiAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCByZXN0KTsKICAgICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3VtZW50c1swXSwgcmVzdCk7CiAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSwgcmVzdCk7CiAgICB9CiAgICB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTsKICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7IGluZGV4KyspIHsKICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdOwogICAgfQogICAgYXJnc1tzdGFydEluZGV4XSA9IHJlc3Q7CiAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTsKICB9Owp9CgovLyBJcyBhIGdpdmVuIHZhcmlhYmxlIGFuIG9iamVjdD8KZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7CiAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqOwogIHJldHVybiB0eXBlID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iaik7Cn0KCi8vIElzIGEgZ2l2ZW4gdmFsdWUgZXF1YWwgdG8gbnVsbD8KZnVuY3Rpb24gaXNOdWxsKG9iaikgewogIHJldHVybiBvYmogPT09IG51bGw7Cn0KCi8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkPwpmdW5jdGlvbiBpc1VuZGVmaW5lZChvYmopIHsKICByZXR1cm4gb2JqID09PSB2b2lkIDA7Cn0KCi8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFuPwpmdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7CiAgcmV0dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nOwp9CgovLyBJcyBhIGdpdmVuIHZhbHVlIGEgRE9NIGVsZW1lbnQ/CmZ1bmN0aW9uIGlzRWxlbWVudChvYmopIHsKICByZXR1cm4gISEob2JqICYmIG9iai5ub2RlVHlwZSA9PT0gMSk7Cn0KCi8vIEludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIGB0b1N0cmluZ2AtYmFzZWQgdHlwZSB0ZXN0ZXIuCmZ1bmN0aW9uIHRhZ1Rlc3RlcihuYW1lKSB7CiAgdmFyIHRhZyA9ICdbb2JqZWN0ICcgKyBuYW1lICsgJ10nOwogIHJldHVybiBmdW5jdGlvbihvYmopIHsKICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09IHRhZzsKICB9Owp9Cgp2YXIgaXNTdHJpbmcgPSB0YWdUZXN0ZXIoJ1N0cmluZycpOwoKdmFyIGlzTnVtYmVyID0gdGFnVGVzdGVyKCdOdW1iZXInKTsKCnZhciBpc0RhdGUgPSB0YWdUZXN0ZXIoJ0RhdGUnKTsKCnZhciBpc1JlZ0V4cCA9IHRhZ1Rlc3RlcignUmVnRXhwJyk7Cgp2YXIgaXNFcnJvciA9IHRhZ1Rlc3RlcignRXJyb3InKTsKCnZhciBpc1N5bWJvbCA9IHRhZ1Rlc3RlcignU3ltYm9sJyk7Cgp2YXIgaXNBcnJheUJ1ZmZlciA9IHRhZ1Rlc3RlcignQXJyYXlCdWZmZXInKTsKCnZhciBpc0Z1bmN0aW9uID0gdGFnVGVzdGVyKCdGdW5jdGlvbicpOwoKLy8gT3B0aW1pemUgYGlzRnVuY3Rpb25gIGlmIGFwcHJvcHJpYXRlLiBXb3JrIGFyb3VuZCBzb21lIGB0eXBlb2ZgIGJ1Z3MgaW4gb2xkCi8vIHY4LCBJRSAxMSAoIzE2MjEpLCBTYWZhcmkgOCAoIzE5MjkpLCBhbmQgUGhhbnRvbUpTICgjMjIzNikuCnZhciBub2RlbGlzdCA9IHJvb3QuZG9jdW1lbnQgJiYgcm9vdC5kb2N1bWVudC5jaGlsZE5vZGVzOwppZiAodHlwZW9mIC8uLyAhPSAnZnVuY3Rpb24nICYmIHR5cGVvZiBJbnQ4QXJyYXkgIT0gJ29iamVjdCcgJiYgdHlwZW9mIG5vZGVsaXN0ICE9ICdmdW5jdGlvbicpIHsKICBpc0Z1bmN0aW9uID0gZnVuY3Rpb24ob2JqKSB7CiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PSAnZnVuY3Rpb24nIHx8IGZhbHNlOwogIH07Cn0KCnZhciBpc0Z1bmN0aW9uJDEgPSBpc0Z1bmN0aW9uOwoKdmFyIGhhc09iamVjdFRhZyA9IHRhZ1Rlc3RlcignT2JqZWN0Jyk7CgovLyBJbiBJRSAxMCAtIEVkZ2UgMTMsIGBEYXRhVmlld2AgaGFzIHN0cmluZyB0YWcgYCdbb2JqZWN0IE9iamVjdF0nYC4KLy8gSW4gSUUgMTEsIHRoZSBtb3N0IGNvbW1vbiBhbW9uZyB0aGVtLCB0aGlzIHByb2JsZW0gYWxzbyBhcHBsaWVzIHRvCi8vIGBNYXBgLCBgV2Vha01hcGAgYW5kIGBTZXRgLgp2YXIgaGFzU3RyaW5nVGFnQnVnID0gKAogICAgICBzdXBwb3J0c0RhdGFWaWV3ICYmIGhhc09iamVjdFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDgpKSkKICAgICksCiAgICBpc0lFMTEgPSAodHlwZW9mIE1hcCAhPT0gJ3VuZGVmaW5lZCcgJiYgaGFzT2JqZWN0VGFnKG5ldyBNYXApKTsKCnZhciBpc0RhdGFWaWV3ID0gdGFnVGVzdGVyKCdEYXRhVmlldycpOwoKLy8gSW4gSUUgMTAgLSBFZGdlIDEzLCB3ZSBuZWVkIGEgZGlmZmVyZW50IGhldXJpc3RpYwovLyB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBvYmplY3QgaXMgYSBgRGF0YVZpZXdgLgpmdW5jdGlvbiBpZTEwSXNEYXRhVmlldyhvYmopIHsKICByZXR1cm4gb2JqICE9IG51bGwgJiYgaXNGdW5jdGlvbiQxKG9iai5nZXRJbnQ4KSAmJiBpc0FycmF5QnVmZmVyKG9iai5idWZmZXIpOwp9Cgp2YXIgaXNEYXRhVmlldyQxID0gKGhhc1N0cmluZ1RhZ0J1ZyA/IGllMTBJc0RhdGFWaWV3IDogaXNEYXRhVmlldyk7CgovLyBJcyBhIGdpdmVuIHZhbHVlIGFuIGFycmF5PwovLyBEZWxlZ2F0ZXMgdG8gRUNNQTUncyBuYXRpdmUgYEFycmF5LmlzQXJyYXlgLgp2YXIgaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkgfHwgdGFnVGVzdGVyKCdBcnJheScpOwoKLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciBga2V5YCBpcyBhbiBvd24gcHJvcGVydHkgbmFtZSBvZiBgb2JqYC4KZnVuY3Rpb24gaGFzJDEob2JqLCBrZXkpIHsKICByZXR1cm4gb2JqICE9IG51bGwgJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7Cn0KCnZhciBpc0FyZ3VtZW50cyA9IHRhZ1Rlc3RlcignQXJndW1lbnRzJyk7CgovLyBEZWZpbmUgYSBmYWxsYmFjayB2ZXJzaW9uIG9mIHRoZSBtZXRob2QgaW4gYnJvd3NlcnMgKGFoZW0sIElFIDwgOSksIHdoZXJlCi8vIHRoZXJlIGlzbid0IGFueSBpbnNwZWN0YWJsZSAiQXJndW1lbnRzIiB0eXBlLgooZnVuY3Rpb24oKSB7CiAgaWYgKCFpc0FyZ3VtZW50cyhhcmd1bWVudHMpKSB7CiAgICBpc0FyZ3VtZW50cyA9IGZ1bmN0aW9uKG9iaikgewogICAgICByZXR1cm4gaGFzJDEob2JqLCAnY2FsbGVlJyk7CiAgICB9OwogIH0KfSgpKTsKCnZhciBpc0FyZ3VtZW50cyQxID0gaXNBcmd1bWVudHM7CgovLyBJcyBhIGdpdmVuIG9iamVjdCBhIGZpbml0ZSBudW1iZXI/CmZ1bmN0aW9uIGlzRmluaXRlJDEob2JqKSB7CiAgcmV0dXJuICFpc1N5bWJvbChvYmopICYmIF9pc0Zpbml0ZShvYmopICYmICFpc05hTihwYXJzZUZsb2F0KG9iaikpOwp9CgovLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/CmZ1bmN0aW9uIGlzTmFOJDEob2JqKSB7CiAgcmV0dXJuIGlzTnVtYmVyKG9iaikgJiYgX2lzTmFOKG9iaik7Cn0KCi8vIFByZWRpY2F0ZS1nZW5lcmF0aW5nIGZ1bmN0aW9uLiBPZnRlbiB1c2VmdWwgb3V0c2lkZSBvZiBVbmRlcnNjb3JlLgpmdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkgewogIHJldHVybiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB2YWx1ZTsKICB9Owp9CgovLyBDb21tb24gaW50ZXJuYWwgbG9naWMgZm9yIGBpc0FycmF5TGlrZWAgYW5kIGBpc0J1ZmZlckxpa2VgLgpmdW5jdGlvbiBjcmVhdGVTaXplUHJvcGVydHlDaGVjayhnZXRTaXplUHJvcGVydHkpIHsKICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbikgewogICAgdmFyIHNpemVQcm9wZXJ0eSA9IGdldFNpemVQcm9wZXJ0eShjb2xsZWN0aW9uKTsKICAgIHJldHVybiB0eXBlb2Ygc2l6ZVByb3BlcnR5ID09ICdudW1iZXInICYmIHNpemVQcm9wZXJ0eSA+PSAwICYmIHNpemVQcm9wZXJ0eSA8PSBNQVhfQVJSQVlfSU5ERVg7CiAgfQp9CgovLyBJbnRlcm5hbCBoZWxwZXIgdG8gZ2VuZXJhdGUgYSBmdW5jdGlvbiB0byBvYnRhaW4gcHJvcGVydHkgYGtleWAgZnJvbSBgb2JqYC4KZnVuY3Rpb24gc2hhbGxvd1Byb3BlcnR5KGtleSkgewogIHJldHVybiBmdW5jdGlvbihvYmopIHsKICAgIHJldHVybiBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtrZXldOwogIH07Cn0KCi8vIEludGVybmFsIGhlbHBlciB0byBvYnRhaW4gdGhlIGBieXRlTGVuZ3RoYCBwcm9wZXJ0eSBvZiBhbiBvYmplY3QuCnZhciBnZXRCeXRlTGVuZ3RoID0gc2hhbGxvd1Byb3BlcnR5KCdieXRlTGVuZ3RoJyk7CgovLyBJbnRlcm5hbCBoZWxwZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgd2Ugc2hvdWxkIHNwZW5kIGV4dGVuc2l2ZSBjaGVja3MgYWdhaW5zdAovLyBgQXJyYXlCdWZmZXJgIGV0IGFsLgp2YXIgaXNCdWZmZXJMaWtlID0gY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0Qnl0ZUxlbmd0aCk7CgovLyBJcyBhIGdpdmVuIHZhbHVlIGEgdHlwZWQgYXJyYXk/CnZhciB0eXBlZEFycmF5UGF0dGVybiA9IC9cW29iamVjdCAoKEl8VWkpbnQoOHwxNnwzMil8RmxvYXQoMzJ8NjQpfFVpbnQ4Q2xhbXBlZHxCaWcoSXxVaSludDY0KUFycmF5XF0vOwpmdW5jdGlvbiBpc1R5cGVkQXJyYXkob2JqKSB7CiAgLy8gYEFycmF5QnVmZmVyLmlzVmlld2AgaXMgdGhlIG1vc3QgZnV0dXJlLXByb29mLCBzbyB1c2UgaXQgd2hlbiBhdmFpbGFibGUuCiAgLy8gT3RoZXJ3aXNlLCBmYWxsIGJhY2sgb24gdGhlIGFib3ZlIHJlZ3VsYXIgZXhwcmVzc2lvbi4KICByZXR1cm4gbmF0aXZlSXNWaWV3ID8gKG5hdGl2ZUlzVmlldyhvYmopICYmICFpc0RhdGFWaWV3JDEob2JqKSkgOgogICAgICAgICAgICAgICAgaXNCdWZmZXJMaWtlKG9iaikgJiYgdHlwZWRBcnJheVBhdHRlcm4udGVzdCh0b1N0cmluZy5jYWxsKG9iaikpOwp9Cgp2YXIgaXNUeXBlZEFycmF5JDEgPSBzdXBwb3J0c0FycmF5QnVmZmVyID8gaXNUeXBlZEFycmF5IDogY29uc3RhbnQoZmFsc2UpOwoKLy8gSW50ZXJuYWwgaGVscGVyIHRvIG9idGFpbiB0aGUgYGxlbmd0aGAgcHJvcGVydHkgb2YgYW4gb2JqZWN0Lgp2YXIgZ2V0TGVuZ3RoID0gc2hhbGxvd1Byb3BlcnR5KCdsZW5ndGgnKTsKCi8vIEludGVybmFsIGhlbHBlciB0byBjcmVhdGUgYSBzaW1wbGUgbG9va3VwIHN0cnVjdHVyZS4KLy8gYGNvbGxlY3ROb25FbnVtUHJvcHNgIHVzZWQgdG8gZGVwZW5kIG9uIGBfLmNvbnRhaW5zYCwgYnV0IHRoaXMgbGVkIHRvCi8vIGNpcmN1bGFyIGltcG9ydHMuIGBlbXVsYXRlZFNldGAgaXMgYSBvbmUtb2ZmIHNvbHV0aW9uIHRoYXQgb25seSB3b3JrcyBmb3IKLy8gYXJyYXlzIG9mIHN0cmluZ3MuCmZ1bmN0aW9uIGVtdWxhdGVkU2V0KGtleXMpIHsKICB2YXIgaGFzaCA9IHt9OwogIGZvciAodmFyIGwgPSBrZXlzLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyArK2kpIGhhc2hba2V5c1tpXV0gPSB0cnVlOwogIHJldHVybiB7CiAgICBjb250YWluczogZnVuY3Rpb24oa2V5KSB7IHJldHVybiBoYXNoW2tleV0gPT09IHRydWU7IH0sCiAgICBwdXNoOiBmdW5jdGlvbihrZXkpIHsKICAgICAgaGFzaFtrZXldID0gdHJ1ZTsKICAgICAgcmV0dXJuIGtleXMucHVzaChrZXkpOwogICAgfQogIH07Cn0KCi8vIEludGVybmFsIGhlbHBlci4gQ2hlY2tzIGBrZXlzYCBmb3IgdGhlIHByZXNlbmNlIG9mIGtleXMgaW4gSUUgPCA5IHRoYXQgd29uJ3QKLy8gYmUgaXRlcmF0ZWQgYnkgYGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNzZWQuIEV4dGVuZHMgYGtleXNgIGluIHBsYWNlIGlmCi8vIG5lZWRlZC4KZnVuY3Rpb24gY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpIHsKICBrZXlzID0gZW11bGF0ZWRTZXQoa2V5cyk7CiAgdmFyIG5vbkVudW1JZHggPSBub25FbnVtZXJhYmxlUHJvcHMubGVuZ3RoOwogIHZhciBjb25zdHJ1Y3RvciA9IG9iai5jb25zdHJ1Y3RvcjsKICB2YXIgcHJvdG8gPSAoaXNGdW5jdGlvbiQxKGNvbnN0cnVjdG9yKSAmJiBjb25zdHJ1Y3Rvci5wcm90b3R5cGUpIHx8IE9ialByb3RvOwoKICAvLyBDb25zdHJ1Y3RvciBpcyBhIHNwZWNpYWwgY2FzZS4KICB2YXIgcHJvcCA9ICdjb25zdHJ1Y3Rvcic7CiAgaWYgKGhhcyQxKG9iaiwgcHJvcCkgJiYgIWtleXMuY29udGFpbnMocHJvcCkpIGtleXMucHVzaChwcm9wKTsKCiAgd2hpbGUgKG5vbkVudW1JZHgtLSkgewogICAgcHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tub25FbnVtSWR4XTsKICAgIGlmIChwcm9wIGluIG9iaiAmJiBvYmpbcHJvcF0gIT09IHByb3RvW3Byb3BdICYmICFrZXlzLmNvbnRhaW5zKHByb3ApKSB7CiAgICAgIGtleXMucHVzaChwcm9wKTsKICAgIH0KICB9Cn0KCi8vIFJldHJpZXZlIHRoZSBuYW1lcyBvZiBhbiBvYmplY3QncyBvd24gcHJvcGVydGllcy4KLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlzYC4KZnVuY3Rpb24ga2V5cyhvYmopIHsKICBpZiAoIWlzT2JqZWN0KG9iaikpIHJldHVybiBbXTsKICBpZiAobmF0aXZlS2V5cykgcmV0dXJuIG5hdGl2ZUtleXMob2JqKTsKICB2YXIga2V5cyA9IFtdOwogIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChoYXMkMShvYmosIGtleSkpIGtleXMucHVzaChrZXkpOwogIC8vIEFoZW0sIElFIDwgOS4KICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpOwogIHJldHVybiBrZXlzOwp9CgovLyBJcyBhIGdpdmVuIGFycmF5LCBzdHJpbmcsIG9yIG9iamVjdCBlbXB0eT8KLy8gQW4gImVtcHR5IiBvYmplY3QgaGFzIG5vIGVudW1lcmFibGUgb3duLXByb3BlcnRpZXMuCmZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7CiAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAvLyBTa2lwIHRoZSBtb3JlIGV4cGVuc2l2ZSBgdG9TdHJpbmdgLWJhc2VkIHR5cGUgY2hlY2tzIGlmIGBvYmpgIGhhcyBubwogIC8vIGAubGVuZ3RoYC4KICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKG9iaik7CiAgaWYgKHR5cGVvZiBsZW5ndGggPT0gJ251bWJlcicgJiYgKAogICAgaXNBcnJheShvYmopIHx8IGlzU3RyaW5nKG9iaikgfHwgaXNBcmd1bWVudHMkMShvYmopCiAgKSkgcmV0dXJuIGxlbmd0aCA9PT0gMDsKICByZXR1cm4gZ2V0TGVuZ3RoKGtleXMob2JqKSkgPT09IDA7Cn0KCi8vIFJldHVybnMgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mIGBrZXk6dmFsdWVgIHBhaXJzLgpmdW5jdGlvbiBpc01hdGNoKG9iamVjdCwgYXR0cnMpIHsKICB2YXIgX2tleXMgPSBrZXlzKGF0dHJzKSwgbGVuZ3RoID0gX2tleXMubGVuZ3RoOwogIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICFsZW5ndGg7CiAgdmFyIG9iaiA9IE9iamVjdChvYmplY3QpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgIHZhciBrZXkgPSBfa2V5c1tpXTsKICAgIGlmIChhdHRyc1trZXldICE9PSBvYmpba2V5XSB8fCAhKGtleSBpbiBvYmopKSByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiB0cnVlOwp9CgovLyBJZiBVbmRlcnNjb3JlIGlzIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBpdCByZXR1cm5zIGEgd3JhcHBlZCBvYmplY3QgdGhhdCBjYW4KLy8gYmUgdXNlZCBPTy1zdHlsZS4gVGhpcyB3cmFwcGVyIGhvbGRzIGFsdGVyZWQgdmVyc2lvbnMgb2YgYWxsIGZ1bmN0aW9ucyBhZGRlZAovLyB0aHJvdWdoIGBfLm1peGluYC4gV3JhcHBlZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLgpmdW5jdGlvbiBfJDEob2JqKSB7CiAgaWYgKG9iaiBpbnN0YW5jZW9mIF8kMSkgcmV0dXJuIG9iajsKICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXyQxKSkgcmV0dXJuIG5ldyBfJDEob2JqKTsKICB0aGlzLl93cmFwcGVkID0gb2JqOwp9CgpfJDEuVkVSU0lPTiA9IFZFUlNJT047CgovLyBFeHRyYWN0cyB0aGUgcmVzdWx0IGZyb20gYSB3cmFwcGVkIGFuZCBjaGFpbmVkIG9iamVjdC4KXyQxLnByb3RvdHlwZS52YWx1ZSA9IGZ1bmN0aW9uKCkgewogIHJldHVybiB0aGlzLl93cmFwcGVkOwp9OwoKLy8gUHJvdmlkZSB1bndyYXBwaW5nIHByb3hpZXMgZm9yIHNvbWUgbWV0aG9kcyB1c2VkIGluIGVuZ2luZSBvcGVyYXRpb25zCi8vIHN1Y2ggYXMgYXJpdGhtZXRpYyBhbmQgSlNPTiBzdHJpbmdpZmljYXRpb24uCl8kMS5wcm90b3R5cGUudmFsdWVPZiA9IF8kMS5wcm90b3R5cGUudG9KU09OID0gXyQxLnByb3RvdHlwZS52YWx1ZTsKCl8kMS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKICByZXR1cm4gU3RyaW5nKHRoaXMuX3dyYXBwZWQpOwp9OwoKLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gd3JhcCBvciBzaGFsbG93LWNvcHkgYW4gQXJyYXlCdWZmZXIsCi8vIHR5cGVkIGFycmF5IG9yIERhdGFWaWV3IHRvIGEgbmV3IHZpZXcsIHJldXNpbmcgdGhlIGJ1ZmZlci4KZnVuY3Rpb24gdG9CdWZmZXJWaWV3KGJ1ZmZlclNvdXJjZSkgewogIHJldHVybiBuZXcgVWludDhBcnJheSgKICAgIGJ1ZmZlclNvdXJjZS5idWZmZXIgfHwgYnVmZmVyU291cmNlLAogICAgYnVmZmVyU291cmNlLmJ5dGVPZmZzZXQgfHwgMCwKICAgIGdldEJ5dGVMZW5ndGgoYnVmZmVyU291cmNlKQogICk7Cn0KCi8vIFdlIHVzZSB0aGlzIHN0cmluZyB0d2ljZSwgc28gZ2l2ZSBpdCBhIG5hbWUgZm9yIG1pbmlmaWNhdGlvbi4KdmFyIHRhZ0RhdGFWaWV3ID0gJ1tvYmplY3QgRGF0YVZpZXddJzsKCi8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgXy5pc0VxdWFsYC4KZnVuY3Rpb24gZXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spIHsKICAvLyBJZGVudGljYWwgb2JqZWN0cyBhcmUgZXF1YWwuIGAwID09PSAtMGAsIGJ1dCB0aGV5IGFyZW4ndCBpZGVudGljYWwuCiAgLy8gU2VlIHRoZSBbSGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHBzOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmVnYWwpLgogIGlmIChhID09PSBiKSByZXR1cm4gYSAhPT0gMCB8fCAxIC8gYSA9PT0gMSAvIGI7CiAgLy8gYG51bGxgIG9yIGB1bmRlZmluZWRgIG9ubHkgZXF1YWwgdG8gaXRzZWxmIChzdHJpY3QgY29tcGFyaXNvbikuCiAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVybiBmYWxzZTsKICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLgogIGlmIChhICE9PSBhKSByZXR1cm4gYiAhPT0gYjsKICAvLyBFeGhhdXN0IHByaW1pdGl2ZSBjaGVja3MKICB2YXIgdHlwZSA9IHR5cGVvZiBhOwogIGlmICh0eXBlICE9PSAnZnVuY3Rpb24nICYmIHR5cGUgIT09ICdvYmplY3QnICYmIHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIGRlZXBFcShhLCBiLCBhU3RhY2ssIGJTdGFjayk7Cn0KCi8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgXy5pc0VxdWFsYC4KZnVuY3Rpb24gZGVlcEVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7CiAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuCiAgaWYgKGEgaW5zdGFuY2VvZiBfJDEpIGEgPSBhLl93cmFwcGVkOwogIGlmIChiIGluc3RhbmNlb2YgXyQxKSBiID0gYi5fd3JhcHBlZDsKICAvLyBDb21wYXJlIGBbW0NsYXNzXV1gIG5hbWVzLgogIHZhciBjbGFzc05hbWUgPSB0b1N0cmluZy5jYWxsKGEpOwogIGlmIChjbGFzc05hbWUgIT09IHRvU3RyaW5nLmNhbGwoYikpIHJldHVybiBmYWxzZTsKICAvLyBXb3JrIGFyb3VuZCBhIGJ1ZyBpbiBJRSAxMCAtIEVkZ2UgMTMuCiAgaWYgKGhhc1N0cmluZ1RhZ0J1ZyAmJiBjbGFzc05hbWUgPT0gJ1tvYmplY3QgT2JqZWN0XScgJiYgaXNEYXRhVmlldyQxKGEpKSB7CiAgICBpZiAoIWlzRGF0YVZpZXckMShiKSkgcmV0dXJuIGZhbHNlOwogICAgY2xhc3NOYW1lID0gdGFnRGF0YVZpZXc7CiAgfQogIHN3aXRjaCAoY2xhc3NOYW1lKSB7CiAgICAvLyBUaGVzZSB0eXBlcyBhcmUgY29tcGFyZWQgYnkgdmFsdWUuCiAgICBjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOgogICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKQogICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzoKICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGAiNSJgIGlzCiAgICAgIC8vIGVxdWl2YWxlbnQgdG8gYG5ldyBTdHJpbmcoIjUiKWAuCiAgICAgIHJldHVybiAnJyArIGEgPT09ICcnICsgYjsKICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6CiAgICAgIC8vIGBOYU5gcyBhcmUgZXF1aXZhbGVudCwgYnV0IG5vbi1yZWZsZXhpdmUuCiAgICAgIC8vIE9iamVjdChOYU4pIGlzIGVxdWl2YWxlbnQgdG8gTmFOLgogICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4gK2IgIT09ICtiOwogICAgICAvLyBBbiBgZWdhbGAgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQgZm9yIG90aGVyIG51bWVyaWMgdmFsdWVzLgogICAgICByZXR1cm4gK2EgPT09IDAgPyAxIC8gK2EgPT09IDEgLyBiIDogK2EgPT09ICtiOwogICAgY2FzZSAnW29iamVjdCBEYXRlXSc6CiAgICBjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzoKICAgICAgLy8gQ29lcmNlIGRhdGVzIGFuZCBib29sZWFucyB0byBudW1lcmljIHByaW1pdGl2ZSB2YWx1ZXMuIERhdGVzIGFyZSBjb21wYXJlZCBieSB0aGVpcgogICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zCiAgICAgIC8vIG9mIGBOYU5gIGFyZSBub3QgZXF1aXZhbGVudC4KICAgICAgcmV0dXJuICthID09PSArYjsKICAgIGNhc2UgJ1tvYmplY3QgU3ltYm9sXSc6CiAgICAgIHJldHVybiBTeW1ib2xQcm90by52YWx1ZU9mLmNhbGwoYSkgPT09IFN5bWJvbFByb3RvLnZhbHVlT2YuY2FsbChiKTsKICAgIGNhc2UgJ1tvYmplY3QgQXJyYXlCdWZmZXJdJzoKICAgIGNhc2UgdGFnRGF0YVZpZXc6CiAgICAgIC8vIENvZXJjZSB0byB0eXBlZCBhcnJheSBzbyB3ZSBjYW4gZmFsbCB0aHJvdWdoLgogICAgICByZXR1cm4gZGVlcEVxKHRvQnVmZmVyVmlldyhhKSwgdG9CdWZmZXJWaWV3KGIpLCBhU3RhY2ssIGJTdGFjayk7CiAgfQoKICB2YXIgYXJlQXJyYXlzID0gY2xhc3NOYW1lID09PSAnW29iamVjdCBBcnJheV0nOwogIGlmICghYXJlQXJyYXlzICYmIGlzVHlwZWRBcnJheSQxKGEpKSB7CiAgICAgIHZhciBieXRlTGVuZ3RoID0gZ2V0Qnl0ZUxlbmd0aChhKTsKICAgICAgaWYgKGJ5dGVMZW5ndGggIT09IGdldEJ5dGVMZW5ndGgoYikpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKGEuYnVmZmVyID09PSBiLmJ1ZmZlciAmJiBhLmJ5dGVPZmZzZXQgPT09IGIuYnl0ZU9mZnNldCkgcmV0dXJuIHRydWU7CiAgICAgIGFyZUFycmF5cyA9IHRydWU7CiAgfQogIGlmICghYXJlQXJyYXlzKSB7CiAgICBpZiAodHlwZW9mIGEgIT0gJ29iamVjdCcgfHwgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTsKCiAgICAvLyBPYmplY3RzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWl2YWxlbnQsIGJ1dCBgT2JqZWN0YHMgb3IgYEFycmF5YHMKICAgIC8vIGZyb20gZGlmZmVyZW50IGZyYW1lcyBhcmUuCiAgICB2YXIgYUN0b3IgPSBhLmNvbnN0cnVjdG9yLCBiQ3RvciA9IGIuY29uc3RydWN0b3I7CiAgICBpZiAoYUN0b3IgIT09IGJDdG9yICYmICEoaXNGdW5jdGlvbiQxKGFDdG9yKSAmJiBhQ3RvciBpbnN0YW5jZW9mIGFDdG9yICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGdW5jdGlvbiQxKGJDdG9yKSAmJiBiQ3RvciBpbnN0YW5jZW9mIGJDdG9yKQogICAgICAgICAgICAgICAgICAgICAgICAmJiAoJ2NvbnN0cnVjdG9yJyBpbiBhICYmICdjb25zdHJ1Y3RvcicgaW4gYikpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICAvLyBBc3N1bWUgZXF1YWxpdHkgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGUgYWxnb3JpdGhtIGZvciBkZXRlY3RpbmcgY3ljbGljCiAgLy8gc3RydWN0dXJlcyBpcyBhZGFwdGVkIGZyb20gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMywgYWJzdHJhY3Qgb3BlcmF0aW9uIGBKT2AuCgogIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy4KICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uCiAgYVN0YWNrID0gYVN0YWNrIHx8IFtdOwogIGJTdGFjayA9IGJTdGFjayB8fCBbXTsKICB2YXIgbGVuZ3RoID0gYVN0YWNrLmxlbmd0aDsKICB3aGlsZSAobGVuZ3RoLS0pIHsKICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZgogICAgLy8gdW5pcXVlIG5lc3RlZCBzdHJ1Y3R1cmVzLgogICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKSByZXR1cm4gYlN0YWNrW2xlbmd0aF0gPT09IGI7CiAgfQoKICAvLyBBZGQgdGhlIGZpcnN0IG9iamVjdCB0byB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuCiAgYVN0YWNrLnB1c2goYSk7CiAgYlN0YWNrLnB1c2goYik7CgogIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyBhbmQgYXJyYXlzLgogIGlmIChhcmVBcnJheXMpIHsKICAgIC8vIENvbXBhcmUgYXJyYXkgbGVuZ3RocyB0byBkZXRlcm1pbmUgaWYgYSBkZWVwIGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5LgogICAgbGVuZ3RoID0gYS5sZW5ndGg7CiAgICBpZiAobGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgLy8gRGVlcCBjb21wYXJlIHRoZSBjb250ZW50cywgaWdub3Jpbmcgbm9uLW51bWVyaWMgcHJvcGVydGllcy4KICAgIHdoaWxlIChsZW5ndGgtLSkgewogICAgICBpZiAoIWVxKGFbbGVuZ3RoXSwgYltsZW5ndGhdLCBhU3RhY2ssIGJTdGFjaykpIHJldHVybiBmYWxzZTsKICAgIH0KICB9IGVsc2UgewogICAgLy8gRGVlcCBjb21wYXJlIG9iamVjdHMuCiAgICB2YXIgX2tleXMgPSBrZXlzKGEpLCBrZXk7CiAgICBsZW5ndGggPSBfa2V5cy5sZW5ndGg7CiAgICAvLyBFbnN1cmUgdGhhdCBib3RoIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgcHJvcGVydGllcyBiZWZvcmUgY29tcGFyaW5nIGRlZXAgZXF1YWxpdHkuCiAgICBpZiAoa2V5cyhiKS5sZW5ndGggIT09IGxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgd2hpbGUgKGxlbmd0aC0tKSB7CiAgICAgIC8vIERlZXAgY29tcGFyZSBlYWNoIG1lbWJlcgogICAgICBrZXkgPSBfa2V5c1tsZW5ndGhdOwogICAgICBpZiAoIShoYXMkMShiLCBrZXkpICYmIGVxKGFba2V5XSwgYltrZXldLCBhU3RhY2ssIGJTdGFjaykpKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIC8vIFJlbW92ZSB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLgogIGFTdGFjay5wb3AoKTsKICBiU3RhY2sucG9wKCk7CiAgcmV0dXJuIHRydWU7Cn0KCi8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJlIGVxdWFsLgpmdW5jdGlvbiBpc0VxdWFsKGEsIGIpIHsKICByZXR1cm4gZXEoYSwgYik7Cn0KCi8vIFJldHJpZXZlIGFsbCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QuCmZ1bmN0aW9uIGFsbEtleXMob2JqKSB7CiAgaWYgKCFpc09iamVjdChvYmopKSByZXR1cm4gW107CiAgdmFyIGtleXMgPSBbXTsKICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTsKICAvLyBBaGVtLCBJRSA8IDkuCiAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTsKICByZXR1cm4ga2V5czsKfQoKLy8gU2luY2UgdGhlIHJlZ3VsYXIgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIHR5cGUgdGVzdHMgZG9uJ3Qgd29yayBmb3IKLy8gc29tZSB0eXBlcyBpbiBJRSAxMSwgd2UgdXNlIGEgZmluZ2VycHJpbnRpbmcgaGV1cmlzdGljIGluc3RlYWQsIGJhc2VkCi8vIG9uIHRoZSBtZXRob2RzLiBJdCdzIG5vdCBncmVhdCwgYnV0IGl0J3MgdGhlIGJlc3Qgd2UgZ290LgovLyBUaGUgZmluZ2VycHJpbnQgbWV0aG9kIGxpc3RzIGFyZSBkZWZpbmVkIGJlbG93LgpmdW5jdGlvbiBpZTExZmluZ2VycHJpbnQobWV0aG9kcykgewogIHZhciBsZW5ndGggPSBnZXRMZW5ndGgobWV0aG9kcyk7CiAgcmV0dXJuIGZ1bmN0aW9uKG9iaikgewogICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAvLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YCBoYXZlIG5vIGVudW1lcmFibGUga2V5cy4KICAgIHZhciBrZXlzID0gYWxsS2V5cyhvYmopOwogICAgaWYgKGdldExlbmd0aChrZXlzKSkgcmV0dXJuIGZhbHNlOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBpZiAoIWlzRnVuY3Rpb24kMShvYmpbbWV0aG9kc1tpXV0pKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAvLyBJZiB3ZSBhcmUgdGVzdGluZyBhZ2FpbnN0IGBXZWFrTWFwYCwgd2UgbmVlZCB0byBlbnN1cmUgdGhhdAogICAgLy8gYG9iamAgZG9lc24ndCBoYXZlIGEgYGZvckVhY2hgIG1ldGhvZCBpbiBvcmRlciB0byBkaXN0aW5ndWlzaAogICAgLy8gaXQgZnJvbSBhIHJlZ3VsYXIgYE1hcGAuCiAgICByZXR1cm4gbWV0aG9kcyAhPT0gd2Vha01hcE1ldGhvZHMgfHwgIWlzRnVuY3Rpb24kMShvYmpbZm9yRWFjaE5hbWVdKTsKICB9Owp9CgovLyBJbiB0aGUgaW50ZXJlc3Qgb2YgY29tcGFjdCBtaW5pZmljYXRpb24sIHdlIHdyaXRlCi8vIGVhY2ggc3RyaW5nIGluIHRoZSBmaW5nZXJwcmludHMgb25seSBvbmNlLgp2YXIgZm9yRWFjaE5hbWUgPSAnZm9yRWFjaCcsCiAgICBoYXNOYW1lID0gJ2hhcycsCiAgICBjb21tb25Jbml0ID0gWydjbGVhcicsICdkZWxldGUnXSwKICAgIG1hcFRhaWwgPSBbJ2dldCcsIGhhc05hbWUsICdzZXQnXTsKCi8vIGBNYXBgLCBgV2Vha01hcGAgYW5kIGBTZXRgIGVhY2ggaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQKLy8gY29tYmluYXRpb25zIG9mIHRoZSBhYm92ZSBzdWJsaXN0cy4KdmFyIG1hcE1ldGhvZHMgPSBjb21tb25Jbml0LmNvbmNhdChmb3JFYWNoTmFtZSwgbWFwVGFpbCksCiAgICB3ZWFrTWFwTWV0aG9kcyA9IGNvbW1vbkluaXQuY29uY2F0KG1hcFRhaWwpLAogICAgc2V0TWV0aG9kcyA9IFsnYWRkJ10uY29uY2F0KGNvbW1vbkluaXQsIGZvckVhY2hOYW1lLCBoYXNOYW1lKTsKCnZhciBpc01hcCA9IGlzSUUxMSA/IGllMTFmaW5nZXJwcmludChtYXBNZXRob2RzKSA6IHRhZ1Rlc3RlcignTWFwJyk7Cgp2YXIgaXNXZWFrTWFwID0gaXNJRTExID8gaWUxMWZpbmdlcnByaW50KHdlYWtNYXBNZXRob2RzKSA6IHRhZ1Rlc3RlcignV2Vha01hcCcpOwoKdmFyIGlzU2V0ID0gaXNJRTExID8gaWUxMWZpbmdlcnByaW50KHNldE1ldGhvZHMpIDogdGFnVGVzdGVyKCdTZXQnKTsKCnZhciBpc1dlYWtTZXQgPSB0YWdUZXN0ZXIoJ1dlYWtTZXQnKTsKCi8vIFJldHJpZXZlIHRoZSB2YWx1ZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy4KZnVuY3Rpb24gdmFsdWVzKG9iaikgewogIHZhciBfa2V5cyA9IGtleXMob2JqKTsKICB2YXIgbGVuZ3RoID0gX2tleXMubGVuZ3RoOwogIHZhciB2YWx1ZXMgPSBBcnJheShsZW5ndGgpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgIHZhbHVlc1tpXSA9IG9ialtfa2V5c1tpXV07CiAgfQogIHJldHVybiB2YWx1ZXM7Cn0KCi8vIENvbnZlcnQgYW4gb2JqZWN0IGludG8gYSBsaXN0IG9mIGBba2V5LCB2YWx1ZV1gIHBhaXJzLgovLyBUaGUgb3Bwb3NpdGUgb2YgYF8ub2JqZWN0YCB3aXRoIG9uZSBhcmd1bWVudC4KZnVuY3Rpb24gcGFpcnMob2JqKSB7CiAgdmFyIF9rZXlzID0ga2V5cyhvYmopOwogIHZhciBsZW5ndGggPSBfa2V5cy5sZW5ndGg7CiAgdmFyIHBhaXJzID0gQXJyYXkobGVuZ3RoKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICBwYWlyc1tpXSA9IFtfa2V5c1tpXSwgb2JqW19rZXlzW2ldXV07CiAgfQogIHJldHVybiBwYWlyczsKfQoKLy8gSW52ZXJ0IHRoZSBrZXlzIGFuZCB2YWx1ZXMgb2YgYW4gb2JqZWN0LiBUaGUgdmFsdWVzIG11c3QgYmUgc2VyaWFsaXphYmxlLgpmdW5jdGlvbiBpbnZlcnQob2JqKSB7CiAgdmFyIHJlc3VsdCA9IHt9OwogIHZhciBfa2V5cyA9IGtleXMob2JqKTsKICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gX2tleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgIHJlc3VsdFtvYmpbX2tleXNbaV1dXSA9IF9rZXlzW2ldOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CgovLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiB0aGUgZnVuY3Rpb24gbmFtZXMgYXZhaWxhYmxlIG9uIHRoZSBvYmplY3QuCmZ1bmN0aW9uIGZ1bmN0aW9ucyhvYmopIHsKICB2YXIgbmFtZXMgPSBbXTsKICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICBpZiAoaXNGdW5jdGlvbiQxKG9ialtrZXldKSkgbmFtZXMucHVzaChrZXkpOwogIH0KICByZXR1cm4gbmFtZXMuc29ydCgpOwp9CgovLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYXNzaWduZXIgZnVuY3Rpb25zLgpmdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihrZXlzRnVuYywgZGVmYXVsdHMpIHsKICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7CiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsKICAgIGlmIChkZWZhdWx0cykgb2JqID0gT2JqZWN0KG9iaik7CiAgICBpZiAobGVuZ3RoIDwgMiB8fCBvYmogPT0gbnVsbCkgcmV0dXJuIG9iajsKICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF0sCiAgICAgICAgICBrZXlzID0ga2V5c0Z1bmMoc291cmNlKSwKICAgICAgICAgIGwgPSBrZXlzLmxlbmd0aDsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHsKICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTsKICAgICAgICBpZiAoIWRlZmF1bHRzIHx8IG9ialtrZXldID09PSB2b2lkIDApIG9ialtrZXldID0gc291cmNlW2tleV07CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBvYmo7CiAgfTsKfQoKLy8gRXh0ZW5kIGEgZ2l2ZW4gb2JqZWN0IHdpdGggYWxsIHRoZSBwcm9wZXJ0aWVzIGluIHBhc3NlZC1pbiBvYmplY3QocykuCnZhciBleHRlbmQgPSBjcmVhdGVBc3NpZ25lcihhbGxLZXlzKTsKCi8vIEFzc2lnbnMgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgdGhlIG93biBwcm9wZXJ0aWVzIGluIHRoZSBwYXNzZWQtaW4KLy8gb2JqZWN0KHMpLgovLyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnbikKdmFyIGV4dGVuZE93biA9IGNyZWF0ZUFzc2lnbmVyKGtleXMpOwoKLy8gRmlsbCBpbiBhIGdpdmVuIG9iamVjdCB3aXRoIGRlZmF1bHQgcHJvcGVydGllcy4KdmFyIGRlZmF1bHRzID0gY3JlYXRlQXNzaWduZXIoYWxsS2V5cywgdHJ1ZSk7CgovLyBDcmVhdGUgYSBuYWtlZCBmdW5jdGlvbiByZWZlcmVuY2UgZm9yIHN1cnJvZ2F0ZS1wcm90b3R5cGUtc3dhcHBpbmcuCmZ1bmN0aW9uIGN0b3IoKSB7CiAgcmV0dXJuIGZ1bmN0aW9uKCl7fTsKfQoKLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gYW5vdGhlci4KZnVuY3Rpb24gYmFzZUNyZWF0ZShwcm90b3R5cGUpIHsKICBpZiAoIWlzT2JqZWN0KHByb3RvdHlwZSkpIHJldHVybiB7fTsKICBpZiAobmF0aXZlQ3JlYXRlKSByZXR1cm4gbmF0aXZlQ3JlYXRlKHByb3RvdHlwZSk7CiAgdmFyIEN0b3IgPSBjdG9yKCk7CiAgQ3Rvci5wcm90b3R5cGUgPSBwcm90b3R5cGU7CiAgdmFyIHJlc3VsdCA9IG5ldyBDdG9yOwogIEN0b3IucHJvdG90eXBlID0gbnVsbDsKICByZXR1cm4gcmVzdWx0Owp9CgovLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuCi8vIElmIGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlCi8vIGNyZWF0ZWQgb2JqZWN0LgpmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCBwcm9wcykgewogIHZhciByZXN1bHQgPSBiYXNlQ3JlYXRlKHByb3RvdHlwZSk7CiAgaWYgKHByb3BzKSBleHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8gQ3JlYXRlIGEgKHNoYWxsb3ctY2xvbmVkKSBkdXBsaWNhdGUgb2YgYW4gb2JqZWN0LgpmdW5jdGlvbiBjbG9uZShvYmopIHsKICBpZiAoIWlzT2JqZWN0KG9iaikpIHJldHVybiBvYmo7CiAgcmV0dXJuIGlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogZXh0ZW5kKHt9LCBvYmopOwp9CgovLyBJbnZva2VzIGBpbnRlcmNlcHRvcmAgd2l0aCB0aGUgYG9iamAgYW5kIHRoZW4gcmV0dXJucyBgb2JqYC4KLy8gVGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byAidGFwIGludG8iIGEgbWV0aG9kIGNoYWluLCBpbgovLyBvcmRlciB0byBwZXJmb3JtIG9wZXJhdGlvbnMgb24gaW50ZXJtZWRpYXRlIHJlc3VsdHMgd2l0aGluIHRoZSBjaGFpbi4KZnVuY3Rpb24gdGFwKG9iaiwgaW50ZXJjZXB0b3IpIHsKICBpbnRlcmNlcHRvcihvYmopOwogIHJldHVybiBvYmo7Cn0KCi8vIE5vcm1hbGl6ZSBhIChkZWVwKSBwcm9wZXJ0eSBgcGF0aGAgdG8gYXJyYXkuCi8vIExpa2UgYF8uaXRlcmF0ZWVgLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjdXN0b21pemVkLgpmdW5jdGlvbiB0b1BhdGgkMShwYXRoKSB7CiAgcmV0dXJuIGlzQXJyYXkocGF0aCkgPyBwYXRoIDogW3BhdGhdOwp9Cl8kMS50b1BhdGggPSB0b1BhdGgkMTsKCi8vIEludGVybmFsIHdyYXBwZXIgZm9yIGBfLnRvUGF0aGAgdG8gZW5hYmxlIG1pbmlmaWNhdGlvbi4KLy8gU2ltaWxhciB0byBgY2JgIGZvciBgXy5pdGVyYXRlZWAuCmZ1bmN0aW9uIHRvUGF0aChwYXRoKSB7CiAgcmV0dXJuIF8kMS50b1BhdGgocGF0aCk7Cn0KCi8vIEludGVybmFsIGZ1bmN0aW9uIHRvIG9idGFpbiBhIG5lc3RlZCBwcm9wZXJ0eSBpbiBgb2JqYCBhbG9uZyBgcGF0aGAuCmZ1bmN0aW9uIGRlZXBHZXQob2JqLCBwYXRoKSB7CiAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoOwogIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDsKICAgIG9iaiA9IG9ialtwYXRoW2ldXTsKICB9CiAgcmV0dXJuIGxlbmd0aCA/IG9iaiA6IHZvaWQgMDsKfQoKLy8gR2V0IHRoZSB2YWx1ZSBvZiB0aGUgKGRlZXApIHByb3BlcnR5IG9uIGBwYXRoYCBmcm9tIGBvYmplY3RgLgovLyBJZiBhbnkgcHJvcGVydHkgaW4gYHBhdGhgIGRvZXMgbm90IGV4aXN0IG9yIGlmIHRoZSB2YWx1ZSBpcwovLyBgdW5kZWZpbmVkYCwgcmV0dXJuIGBkZWZhdWx0VmFsdWVgIGluc3RlYWQuCi8vIFRoZSBgcGF0aGAgaXMgbm9ybWFsaXplZCB0aHJvdWdoIGBfLnRvUGF0aGAuCmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkgewogIHZhciB2YWx1ZSA9IGRlZXBHZXQob2JqZWN0LCB0b1BhdGgocGF0aCkpOwogIHJldHVybiBpc1VuZGVmaW5lZCh2YWx1ZSkgPyBkZWZhdWx0VmFsdWUgOiB2YWx1ZTsKfQoKLy8gU2hvcnRjdXQgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBwcm9wZXJ0eSBkaXJlY3RseSBvbgovLyBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCBub3Qgb24gYSBwcm90b3R5cGUpLiBVbmxpa2UgdGhlIGludGVybmFsIGBoYXNgCi8vIGZ1bmN0aW9uLCB0aGlzIHB1YmxpYyB2ZXJzaW9uIGNhbiBhbHNvIHRyYXZlcnNlIG5lc3RlZCBwcm9wZXJ0aWVzLgpmdW5jdGlvbiBoYXMob2JqLCBwYXRoKSB7CiAgcGF0aCA9IHRvUGF0aChwYXRoKTsKICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgdmFyIGtleSA9IHBhdGhbaV07CiAgICBpZiAoIWhhcyQxKG9iaiwga2V5KSkgcmV0dXJuIGZhbHNlOwogICAgb2JqID0gb2JqW2tleV07CiAgfQogIHJldHVybiAhIWxlbmd0aDsKfQoKLy8gS2VlcCB0aGUgaWRlbnRpdHkgZnVuY3Rpb24gYXJvdW5kIGZvciBkZWZhdWx0IGl0ZXJhdGVlcy4KZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHsKICByZXR1cm4gdmFsdWU7Cn0KCi8vIFJldHVybnMgYSBwcmVkaWNhdGUgZm9yIGNoZWNraW5nIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZgovLyBga2V5OnZhbHVlYCBwYWlycy4KZnVuY3Rpb24gbWF0Y2hlcihhdHRycykgewogIGF0dHJzID0gZXh0ZW5kT3duKHt9LCBhdHRycyk7CiAgcmV0dXJuIGZ1bmN0aW9uKG9iaikgewogICAgcmV0dXJuIGlzTWF0Y2gob2JqLCBhdHRycyk7CiAgfTsKfQoKLy8gQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gcGFzc2VkIGFuIG9iamVjdCwgd2lsbCB0cmF2ZXJzZSB0aGF0IG9iamVjdOKAmXMKLy8gcHJvcGVydGllcyBkb3duIHRoZSBnaXZlbiBgcGF0aGAsIHNwZWNpZmllZCBhcyBhbiBhcnJheSBvZiBrZXlzIG9yIGluZGljZXMuCmZ1bmN0aW9uIHByb3BlcnR5KHBhdGgpIHsKICBwYXRoID0gdG9QYXRoKHBhdGgpOwogIHJldHVybiBmdW5jdGlvbihvYmopIHsKICAgIHJldHVybiBkZWVwR2V0KG9iaiwgcGF0aCk7CiAgfTsKfQoKLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvbgovLyBvZiB0aGUgcGFzc2VkLWluIGNhbGxiYWNrLCB0byBiZSByZXBlYXRlZGx5IGFwcGxpZWQgaW4gb3RoZXIgVW5kZXJzY29yZQovLyBmdW5jdGlvbnMuCmZ1bmN0aW9uIG9wdGltaXplQ2IoZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHsKICBpZiAoY29udGV4dCA9PT0gdm9pZCAwKSByZXR1cm4gZnVuYzsKICBzd2l0Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDogYXJnQ291bnQpIHsKICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUpOwogICAgfTsKICAgIC8vIFRoZSAyLWFyZ3VtZW50IGNhc2UgaXMgb21pdHRlZCBiZWNhdXNlIHdl4oCZcmUgbm90IHVzaW5nIGl0LgogICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7CiAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTsKICAgIH07CiAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7CiAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7CiAgICB9OwogIH0KICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpOwogIH07Cn0KCi8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGNhbGxiYWNrcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGVhY2gKLy8gZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24sIHJldHVybmluZyB0aGUgZGVzaXJlZCByZXN1bHQg4oCUIGVpdGhlciBgXy5pZGVudGl0eWAsCi8vIGFuIGFyYml0cmFyeSBjYWxsYmFjaywgYSBwcm9wZXJ0eSBtYXRjaGVyLCBvciBhIHByb3BlcnR5IGFjY2Vzc29yLgpmdW5jdGlvbiBiYXNlSXRlcmF0ZWUodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KSB7CiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBpZGVudGl0eTsKICBpZiAoaXNGdW5jdGlvbiQxKHZhbHVlKSkgcmV0dXJuIG9wdGltaXplQ2IodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KTsKICBpZiAoaXNPYmplY3QodmFsdWUpICYmICFpc0FycmF5KHZhbHVlKSkgcmV0dXJuIG1hdGNoZXIodmFsdWUpOwogIHJldHVybiBwcm9wZXJ0eSh2YWx1ZSk7Cn0KCi8vIEV4dGVybmFsIHdyYXBwZXIgZm9yIG91ciBjYWxsYmFjayBnZW5lcmF0b3IuIFVzZXJzIG1heSBjdXN0b21pemUKLy8gYF8uaXRlcmF0ZWVgIGlmIHRoZXkgd2FudCBhZGRpdGlvbmFsIHByZWRpY2F0ZS9pdGVyYXRlZSBzaG9ydGhhbmQgc3R5bGVzLgovLyBUaGlzIGFic3RyYWN0aW9uIGhpZGVzIHRoZSBpbnRlcm5hbC1vbmx5IGBhcmdDb3VudGAgYXJndW1lbnQuCmZ1bmN0aW9uIGl0ZXJhdGVlKHZhbHVlLCBjb250ZXh0KSB7CiAgcmV0dXJuIGJhc2VJdGVyYXRlZSh2YWx1ZSwgY29udGV4dCwgSW5maW5pdHkpOwp9Cl8kMS5pdGVyYXRlZSA9IGl0ZXJhdGVlOwoKLy8gVGhlIGZ1bmN0aW9uIHdlIGNhbGwgaW50ZXJuYWxseSB0byBnZW5lcmF0ZSBhIGNhbGxiYWNrLiBJdCBpbnZva2VzCi8vIGBfLml0ZXJhdGVlYCBpZiBvdmVycmlkZGVuLCBvdGhlcndpc2UgYGJhc2VJdGVyYXRlZWAuCmZ1bmN0aW9uIGNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkgewogIGlmIChfJDEuaXRlcmF0ZWUgIT09IGl0ZXJhdGVlKSByZXR1cm4gXyQxLml0ZXJhdGVlKHZhbHVlLCBjb250ZXh0KTsKICByZXR1cm4gYmFzZUl0ZXJhdGVlKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7Cn0KCi8vIFJldHVybnMgdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGBpdGVyYXRlZWAgdG8gZWFjaCBlbGVtZW50IG9mIGBvYmpgLgovLyBJbiBjb250cmFzdCB0byBgXy5tYXBgIGl0IHJldHVybnMgYW4gb2JqZWN0LgpmdW5jdGlvbiBtYXBPYmplY3Qob2JqLCBpdGVyYXRlZSwgY29udGV4dCkgewogIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpOwogIHZhciBfa2V5cyA9IGtleXMob2JqKSwKICAgICAgbGVuZ3RoID0gX2tleXMubGVuZ3RoLAogICAgICByZXN1bHRzID0ge307CiAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgewogICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5c1tpbmRleF07CiAgICByZXN1bHRzW2N1cnJlbnRLZXldID0gaXRlcmF0ZWUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopOwogIH0KICByZXR1cm4gcmVzdWx0czsKfQoKLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb24uIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuCmZ1bmN0aW9uIG5vb3AoKXt9CgovLyBHZW5lcmF0ZXMgYSBmdW5jdGlvbiBmb3IgYSBnaXZlbiBvYmplY3QgdGhhdCByZXR1cm5zIGEgZ2l2ZW4gcHJvcGVydHkuCmZ1bmN0aW9uIHByb3BlcnR5T2Yob2JqKSB7CiAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbm9vcDsKICByZXR1cm4gZnVuY3Rpb24ocGF0aCkgewogICAgcmV0dXJuIGdldChvYmosIHBhdGgpOwogIH07Cn0KCi8vIFJ1biBhIGZ1bmN0aW9uICoqbioqIHRpbWVzLgpmdW5jdGlvbiB0aW1lcyhuLCBpdGVyYXRlZSwgY29udGV4dCkgewogIHZhciBhY2N1bSA9IEFycmF5KE1hdGgubWF4KDAsIG4pKTsKICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBhY2N1bVtpXSA9IGl0ZXJhdGVlKGkpOwogIHJldHVybiBhY2N1bTsKfQoKLy8gUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiBgbWluYCBhbmQgYG1heGAgKGluY2x1c2l2ZSkuCmZ1bmN0aW9uIHJhbmRvbShtaW4sIG1heCkgewogIGlmIChtYXggPT0gbnVsbCkgewogICAgbWF4ID0gbWluOwogICAgbWluID0gMDsKICB9CiAgcmV0dXJuIG1pbiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7Cn0KCi8vIEEgKHBvc3NpYmx5IGZhc3Rlcikgd2F5IHRvIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgYXMgYW4gaW50ZWdlci4KdmFyIG5vdyA9IERhdGUubm93IHx8IGZ1bmN0aW9uKCkgewogIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKfTsKCi8vIEludGVybmFsIGhlbHBlciB0byBnZW5lcmF0ZSBmdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MKLy8gdG8vZnJvbSBIVE1MIGludGVycG9sYXRpb24uCmZ1bmN0aW9uIGNyZWF0ZUVzY2FwZXIobWFwKSB7CiAgdmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRjaCkgewogICAgcmV0dXJuIG1hcFttYXRjaF07CiAgfTsKICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRzIHRvIGJlIGVzY2FwZWQuCiAgdmFyIHNvdXJjZSA9ICcoPzonICsga2V5cyhtYXApLmpvaW4oJ3wnKSArICcpJzsKICB2YXIgdGVzdFJlZ2V4cCA9IFJlZ0V4cChzb3VyY2UpOwogIHZhciByZXBsYWNlUmVnZXhwID0gUmVnRXhwKHNvdXJjZSwgJ2cnKTsKICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7CiAgICBzdHJpbmcgPSBzdHJpbmcgPT0gbnVsbCA/ICcnIDogJycgKyBzdHJpbmc7CiAgICByZXR1cm4gdGVzdFJlZ2V4cC50ZXN0KHN0cmluZykgPyBzdHJpbmcucmVwbGFjZShyZXBsYWNlUmVnZXhwLCBlc2NhcGVyKSA6IHN0cmluZzsKICB9Owp9CgovLyBJbnRlcm5hbCBsaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5nLgp2YXIgZXNjYXBlTWFwID0gewogICcmJzogJyZhbXA7JywKICAnPCc6ICcmbHQ7JywKICAnPic6ICcmZ3Q7JywKICAnIic6ICcmcXVvdDsnLAogICInIjogJyYjeDI3OycsCiAgJ2AnOiAnJiN4NjA7Jwp9OwoKLy8gRnVuY3Rpb24gZm9yIGVzY2FwaW5nIHN0cmluZ3MgdG8gSFRNTCBpbnRlcnBvbGF0aW9uLgp2YXIgX2VzY2FwZSA9IGNyZWF0ZUVzY2FwZXIoZXNjYXBlTWFwKTsKCi8vIEludGVybmFsIGxpc3Qgb2YgSFRNTCBlbnRpdGllcyBmb3IgdW5lc2NhcGluZy4KdmFyIHVuZXNjYXBlTWFwID0gaW52ZXJ0KGVzY2FwZU1hcCk7CgovLyBGdW5jdGlvbiBmb3IgdW5lc2NhcGluZyBzdHJpbmdzIGZyb20gSFRNTCBpbnRlcnBvbGF0aW9uLgp2YXIgX3VuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVzY2FwZU1hcCk7CgovLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMuIENoYW5nZSB0aGUKLy8gZm9sbG93aW5nIHRlbXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLgp2YXIgdGVtcGxhdGVTZXR0aW5ncyA9IF8kMS50ZW1wbGF0ZVNldHRpbmdzID0gewogIGV2YWx1YXRlOiAvPCUoW1xzXFNdKz8pJT4vZywKICBpbnRlcnBvbGF0ZTogLzwlPShbXHNcU10rPyklPi9nLAogIGVzY2FwZTogLzwlLShbXHNcU10rPyklPi9nCn07CgovLyBXaGVuIGN1c3RvbWl6aW5nIGBfLnRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW4KLy8gaW50ZXJwb2xhdGlvbiwgZXZhbHVhdGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpcwovLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC4KdmFyIG5vTWF0Y2ggPSAvKC4pXi87CgovLyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0IGludG8gYQovLyBzdHJpbmcgbGl0ZXJhbC4KdmFyIGVzY2FwZXMgPSB7CiAgIiciOiAiJyIsCiAgJ1xcJzogJ1xcJywKICAnXHInOiAncicsCiAgJ1xuJzogJ24nLAogICdcdTIwMjgnOiAndTIwMjgnLAogICdcdTIwMjknOiAndTIwMjknCn07Cgp2YXIgZXNjYXBlUmVnRXhwID0gL1xcfCd8XHJ8XG58XHUyMDI4fFx1MjAyOS9nOwoKZnVuY3Rpb24gZXNjYXBlQ2hhcihtYXRjaCkgewogIHJldHVybiAnXFwnICsgZXNjYXBlc1ttYXRjaF07Cn0KCi8vIEluIG9yZGVyIHRvIHByZXZlbnQgdGhpcmQtcGFydHkgY29kZSBpbmplY3Rpb24gdGhyb3VnaAovLyBgXy50ZW1wbGF0ZVNldHRpbmdzLnZhcmlhYmxlYCwgd2UgdGVzdCBpdCBhZ2FpbnN0IHRoZSBmb2xsb3dpbmcgcmVndWxhcgovLyBleHByZXNzaW9uLiBJdCBpcyBpbnRlbnRpb25hbGx5IGEgYml0IG1vcmUgbGliZXJhbCB0aGFuIGp1c3QgbWF0Y2hpbmcgdmFsaWQKLy8gaWRlbnRpZmllcnMsIGJ1dCBzdGlsbCBwcmV2ZW50cyBwb3NzaWJsZSBsb29waG9sZXMgdGhyb3VnaCBkZWZhdWx0cyBvcgovLyBkZXN0cnVjdHVyaW5nIGFzc2lnbm1lbnQuCnZhciBiYXJlSWRlbnRpZmllciA9IC9eXHMqKFx3fFwkKStccyokLzsKCi8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2ltaWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uCi8vIFVuZGVyc2NvcmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSwKLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuCi8vIE5COiBgb2xkU2V0dGluZ3NgIG9ubHkgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KZnVuY3Rpb24gdGVtcGxhdGUodGV4dCwgc2V0dGluZ3MsIG9sZFNldHRpbmdzKSB7CiAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRTZXR0aW5nczsKICBzZXR0aW5ncyA9IGRlZmF1bHRzKHt9LCBzZXR0aW5ncywgXyQxLnRlbXBsYXRlU2V0dGluZ3MpOwoKICAvLyBDb21iaW5lIGRlbGltaXRlcnMgaW50byBvbmUgcmVndWxhciBleHByZXNzaW9uIHZpYSBhbHRlcm5hdGlvbi4KICB2YXIgbWF0Y2hlciA9IFJlZ0V4cChbCiAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJjZSwKICAgIChzZXR0aW5ncy5pbnRlcnBvbGF0ZSB8fCBub01hdGNoKS5zb3VyY2UsCiAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlCiAgXS5qb2luKCd8JykgKyAnfCQnLCAnZycpOwoKICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LgogIHZhciBpbmRleCA9IDA7CiAgdmFyIHNvdXJjZSA9ICJfX3ArPSciOwogIHRleHQucmVwbGFjZShtYXRjaGVyLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlLCBpbnRlcnBvbGF0ZSwgZXZhbHVhdGUsIG9mZnNldCkgewogICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShlc2NhcGVSZWdFeHAsIGVzY2FwZUNoYXIpOwogICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7CgogICAgaWYgKGVzY2FwZSkgewogICAgICBzb3VyY2UgKz0gIicrXG4oKF9fdD0oIiArIGVzY2FwZSArICIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcbiciOwogICAgfSBlbHNlIGlmIChpbnRlcnBvbGF0ZSkgewogICAgICBzb3VyY2UgKz0gIicrXG4oKF9fdD0oIiArIGludGVycG9sYXRlICsgIikpPT1udWxsPycnOl9fdCkrXG4nIjsKICAgIH0gZWxzZSBpZiAoZXZhbHVhdGUpIHsKICAgICAgc291cmNlICs9ICInO1xuIiArIGV2YWx1YXRlICsgIlxuX19wKz0nIjsKICAgIH0KCiAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZzZXQuCiAgICByZXR1cm4gbWF0Y2g7CiAgfSk7CiAgc291cmNlICs9ICInO1xuIjsKCiAgdmFyIGFyZ3VtZW50ID0gc2V0dGluZ3MudmFyaWFibGU7CiAgaWYgKGFyZ3VtZW50KSB7CiAgICAvLyBJbnN1cmUgYWdhaW5zdCB0aGlyZC1wYXJ0eSBjb2RlIGluamVjdGlvbi4gKENWRS0yMDIxLTIzMzU4KQogICAgaWYgKCFiYXJlSWRlbnRpZmllci50ZXN0KGFyZ3VtZW50KSkgdGhyb3cgbmV3IEVycm9yKAogICAgICAndmFyaWFibGUgaXMgbm90IGEgYmFyZSBpZGVudGlmaWVyOiAnICsgYXJndW1lbnQKICAgICk7CiAgfSBlbHNlIHsKICAgIC8vIElmIGEgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCwgcGxhY2UgZGF0YSB2YWx1ZXMgaW4gbG9jYWwgc2NvcGUuCiAgICBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcbicgKyBzb3VyY2UgKyAnfVxuJzsKICAgIGFyZ3VtZW50ID0gJ29iaic7CiAgfQoKICBzb3VyY2UgPSAidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLCIgKwogICAgInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XG4iICsKICAgIHNvdXJjZSArICdyZXR1cm4gX19wO1xuJzsKCiAgdmFyIHJlbmRlcjsKICB0cnkgewogICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKGFyZ3VtZW50LCAnXycsIHNvdXJjZSk7CiAgfSBjYXRjaCAoZSkgewogICAgZS5zb3VyY2UgPSBzb3VyY2U7CiAgICB0aHJvdyBlOwogIH0KCiAgdmFyIHRlbXBsYXRlID0gZnVuY3Rpb24oZGF0YSkgewogICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8kMSk7CiAgfTsKCiAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQgc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLgogIHRlbXBsYXRlLnNvdXJjZSA9ICdmdW5jdGlvbignICsgYXJndW1lbnQgKyAnKXtcbicgKyBzb3VyY2UgKyAnfSc7CgogIHJldHVybiB0ZW1wbGF0ZTsKfQoKLy8gVHJhdmVyc2VzIHRoZSBjaGlsZHJlbiBvZiBgb2JqYCBhbG9uZyBgcGF0aGAuIElmIGEgY2hpbGQgaXMgYSBmdW5jdGlvbiwgaXQKLy8gaXMgaW52b2tlZCB3aXRoIGl0cyBwYXJlbnQgYXMgY29udGV4dC4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpbmFsCi8vIGNoaWxkLCBvciBgZmFsbGJhY2tgIGlmIGFueSBjaGlsZCBpcyB1bmRlZmluZWQuCmZ1bmN0aW9uIHJlc3VsdChvYmosIHBhdGgsIGZhbGxiYWNrKSB7CiAgcGF0aCA9IHRvUGF0aChwYXRoKTsKICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7CiAgaWYgKCFsZW5ndGgpIHsKICAgIHJldHVybiBpc0Z1bmN0aW9uJDEoZmFsbGJhY2spID8gZmFsbGJhY2suY2FsbChvYmopIDogZmFsbGJhY2s7CiAgfQogIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgIHZhciBwcm9wID0gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpbcGF0aFtpXV07CiAgICBpZiAocHJvcCA9PT0gdm9pZCAwKSB7CiAgICAgIHByb3AgPSBmYWxsYmFjazsKICAgICAgaSA9IGxlbmd0aDsgLy8gRW5zdXJlIHdlIGRvbid0IGNvbnRpbnVlIGl0ZXJhdGluZy4KICAgIH0KICAgIG9iaiA9IGlzRnVuY3Rpb24kMShwcm9wKSA/IHByb3AuY2FsbChvYmopIDogcHJvcDsKICB9CiAgcmV0dXJuIG9iajsKfQoKLy8gR2VuZXJhdGUgYSB1bmlxdWUgaW50ZWdlciBpZCAodW5pcXVlIHdpdGhpbiB0aGUgZW50aXJlIGNsaWVudCBzZXNzaW9uKS4KLy8gVXNlZnVsIGZvciB0ZW1wb3JhcnkgRE9NIGlkcy4KdmFyIGlkQ291bnRlciA9IDA7CmZ1bmN0aW9uIHVuaXF1ZUlkKHByZWZpeCkgewogIHZhciBpZCA9ICsraWRDb3VudGVyICsgJyc7CiAgcmV0dXJuIHByZWZpeCA/IHByZWZpeCArIGlkIDogaWQ7Cn0KCi8vIFN0YXJ0IGNoYWluaW5nIGEgd3JhcHBlZCBVbmRlcnNjb3JlIG9iamVjdC4KZnVuY3Rpb24gY2hhaW4ob2JqKSB7CiAgdmFyIGluc3RhbmNlID0gXyQxKG9iaik7CiAgaW5zdGFuY2UuX2NoYWluID0gdHJ1ZTsKICByZXR1cm4gaW5zdGFuY2U7Cn0KCi8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYHNvdXJjZUZ1bmNgIGJvdW5kIHRvIGBjb250ZXh0YCB3aXRoIG9wdGlvbmFsCi8vIGBhcmdzYC4gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbiBhcyBhIGNvbnN0cnVjdG9yIG9yIGFzIGEKLy8gbm9ybWFsIGZ1bmN0aW9uLgpmdW5jdGlvbiBleGVjdXRlQm91bmQoc291cmNlRnVuYywgYm91bmRGdW5jLCBjb250ZXh0LCBjYWxsaW5nQ29udGV4dCwgYXJncykgewogIGlmICghKGNhbGxpbmdDb250ZXh0IGluc3RhbmNlb2YgYm91bmRGdW5jKSkgcmV0dXJuIHNvdXJjZUZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7CiAgdmFyIHNlbGYgPSBiYXNlQ3JlYXRlKHNvdXJjZUZ1bmMucHJvdG90eXBlKTsKICB2YXIgcmVzdWx0ID0gc291cmNlRnVuYy5hcHBseShzZWxmLCBhcmdzKTsKICBpZiAoaXNPYmplY3QocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDsKICByZXR1cm4gc2VsZjsKfQoKLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0cwovLyBhcmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gYF9gIGFjdHMKLy8gYXMgYSBwbGFjZWhvbGRlciBieSBkZWZhdWx0LCBhbGxvd2luZyBhbnkgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIHRvIGJlCi8vIHByZS1maWxsZWQuIFNldCBgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyYCBmb3IgYSBjdXN0b20gcGxhY2Vob2xkZXIgYXJndW1lbnQuCnZhciBwYXJ0aWFsID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCBib3VuZEFyZ3MpIHsKICB2YXIgcGxhY2Vob2xkZXIgPSBwYXJ0aWFsLnBsYWNlaG9sZGVyOwogIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkgewogICAgdmFyIHBvc2l0aW9uID0gMCwgbGVuZ3RoID0gYm91bmRBcmdzLmxlbmd0aDsKICAgIHZhciBhcmdzID0gQXJyYXkobGVuZ3RoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgYXJnc1tpXSA9IGJvdW5kQXJnc1tpXSA9PT0gcGxhY2Vob2xkZXIgPyBhcmd1bWVudHNbcG9zaXRpb24rK10gOiBib3VuZEFyZ3NbaV07CiAgICB9CiAgICB3aGlsZSAocG9zaXRpb24gPCBhcmd1bWVudHMubGVuZ3RoKSBhcmdzLnB1c2goYXJndW1lbnRzW3Bvc2l0aW9uKytdKTsKICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIHRoaXMsIHRoaXMsIGFyZ3MpOwogIH07CiAgcmV0dXJuIGJvdW5kOwp9KTsKCnBhcnRpYWwucGxhY2Vob2xkZXIgPSBfJDE7CgovLyBDcmVhdGUgYSBmdW5jdGlvbiBib3VuZCB0byBhIGdpdmVuIG9iamVjdCAoYXNzaWduaW5nIGB0aGlzYCwgYW5kIGFyZ3VtZW50cywKLy8gb3B0aW9uYWxseSkuCnZhciBiaW5kID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCBjb250ZXh0LCBhcmdzKSB7CiAgaWYgKCFpc0Z1bmN0aW9uJDEoZnVuYykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JpbmQgbXVzdCBiZSBjYWxsZWQgb24gYSBmdW5jdGlvbicpOwogIHZhciBib3VuZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oY2FsbEFyZ3MpIHsKICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIGNvbnRleHQsIHRoaXMsIGFyZ3MuY29uY2F0KGNhbGxBcmdzKSk7CiAgfSk7CiAgcmV0dXJuIGJvdW5kOwp9KTsKCi8vIEludGVybmFsIGhlbHBlciBmb3IgY29sbGVjdGlvbiBtZXRob2RzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgY29sbGVjdGlvbgovLyBzaG91bGQgYmUgaXRlcmF0ZWQgYXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0LgovLyBSZWxhdGVkOiBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtdG9sZW5ndGgKLy8gQXZvaWRzIGEgdmVyeSBuYXN0eSBpT1MgOCBKSVQgYnVnIG9uIEFSTS02NC4gIzIwOTQKdmFyIGlzQXJyYXlMaWtlID0gY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0TGVuZ3RoKTsKCi8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGEgcmVjdXJzaXZlIGBmbGF0dGVuYCBmdW5jdGlvbi4KZnVuY3Rpb24gZmxhdHRlbiQxKGlucHV0LCBkZXB0aCwgc3RyaWN0LCBvdXRwdXQpIHsKICBvdXRwdXQgPSBvdXRwdXQgfHwgW107CiAgaWYgKCFkZXB0aCAmJiBkZXB0aCAhPT0gMCkgewogICAgZGVwdGggPSBJbmZpbml0eTsKICB9IGVsc2UgaWYgKGRlcHRoIDw9IDApIHsKICAgIHJldHVybiBvdXRwdXQuY29uY2F0KGlucHV0KTsKICB9CiAgdmFyIGlkeCA9IG91dHB1dC5sZW5ndGg7CiAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChpbnB1dCk7IGkgPCBsZW5ndGg7IGkrKykgewogICAgdmFyIHZhbHVlID0gaW5wdXRbaV07CiAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmIChpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyQxKHZhbHVlKSkpIHsKICAgICAgLy8gRmxhdHRlbiBjdXJyZW50IGxldmVsIG9mIGFycmF5IG9yIGFyZ3VtZW50cyBvYmplY3QuCiAgICAgIGlmIChkZXB0aCA+IDEpIHsKICAgICAgICBmbGF0dGVuJDEodmFsdWUsIGRlcHRoIC0gMSwgc3RyaWN0LCBvdXRwdXQpOwogICAgICAgIGlkeCA9IG91dHB1dC5sZW5ndGg7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIGogPSAwLCBsZW4gPSB2YWx1ZS5sZW5ndGg7CiAgICAgICAgd2hpbGUgKGogPCBsZW4pIG91dHB1dFtpZHgrK10gPSB2YWx1ZVtqKytdOwogICAgICB9CiAgICB9IGVsc2UgaWYgKCFzdHJpY3QpIHsKICAgICAgb3V0cHV0W2lkeCsrXSA9IHZhbHVlOwogICAgfQogIH0KICByZXR1cm4gb3V0cHV0Owp9CgovLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmplY3QuIFJlbWFpbmluZyBhcmd1bWVudHMKLy8gYXJlIHRoZSBtZXRob2QgbmFtZXMgdG8gYmUgYm91bmQuIFVzZWZ1bCBmb3IgZW5zdXJpbmcgdGhhdCBhbGwgY2FsbGJhY2tzCi8vIGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC4KdmFyIGJpbmRBbGwgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykgewogIGtleXMgPSBmbGF0dGVuJDEoa2V5cywgZmFsc2UsIGZhbHNlKTsKICB2YXIgaW5kZXggPSBrZXlzLmxlbmd0aDsKICBpZiAoaW5kZXggPCAxKSB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBbGwgbXVzdCBiZSBwYXNzZWQgZnVuY3Rpb24gbmFtZXMnKTsKICB3aGlsZSAoaW5kZXgtLSkgewogICAgdmFyIGtleSA9IGtleXNbaW5kZXhdOwogICAgb2JqW2tleV0gPSBiaW5kKG9ialtrZXldLCBvYmopOwogIH0KICByZXR1cm4gb2JqOwp9KTsKCi8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3VsdHMuCmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgaGFzaGVyKSB7CiAgdmFyIG1lbW9pemUgPSBmdW5jdGlvbihrZXkpIHsKICAgIHZhciBjYWNoZSA9IG1lbW9pemUuY2FjaGU7CiAgICB2YXIgYWRkcmVzcyA9ICcnICsgKGhhc2hlciA/IGhhc2hlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDoga2V5KTsKICAgIGlmICghaGFzJDEoY2FjaGUsIGFkZHJlc3MpKSBjYWNoZVthZGRyZXNzXSA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgIHJldHVybiBjYWNoZVthZGRyZXNzXTsKICB9OwogIG1lbW9pemUuY2FjaGUgPSB7fTsKICByZXR1cm4gbWVtb2l6ZTsKfQoKLy8gRGVsYXlzIGEgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCBhbmQgdGhlbiBjYWxscwovLyBpdCB3aXRoIHRoZSBhcmd1bWVudHMgc3VwcGxpZWQuCnZhciBkZWxheSA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oZnVuYywgd2FpdCwgYXJncykgewogIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGZ1bmMuYXBwbHkobnVsbCwgYXJncyk7CiAgfSwgd2FpdCk7Cn0pOwoKLy8gRGVmZXJzIGEgZnVuY3Rpb24sIHNjaGVkdWxpbmcgaXQgdG8gcnVuIGFmdGVyIHRoZSBjdXJyZW50IGNhbGwgc3RhY2sgaGFzCi8vIGNsZWFyZWQuCnZhciBkZWZlciA9IHBhcnRpYWwoZGVsYXksIF8kMSwgMSk7CgovLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBhdCBtb3N0IG9uY2UKLy8gZHVyaW5nIGEgZ2l2ZW4gd2luZG93IG9mIHRpbWUuIE5vcm1hbGx5LCB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uIHdpbGwgcnVuCi8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3aXRob3V0IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBkdXJhdGlvbjsKLy8gYnV0IGlmIHlvdSdkIGxpa2UgdG8gZGlzYWJsZSB0aGUgZXhlY3V0aW9uIG9uIHRoZSBsZWFkaW5nIGVkZ2UsIHBhc3MKLy8gYHtsZWFkaW5nOiBmYWxzZX1gLiBUbyBkaXNhYmxlIGV4ZWN1dGlvbiBvbiB0aGUgdHJhaWxpbmcgZWRnZSwgZGl0dG8uCmZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHsKICB2YXIgdGltZW91dCwgY29udGV4dCwgYXJncywgcmVzdWx0OwogIHZhciBwcmV2aW91cyA9IDA7CiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307CgogIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkgewogICAgcHJldmlvdXMgPSBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlID8gMCA6IG5vdygpOwogICAgdGltZW91dCA9IG51bGw7CiAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpOwogICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7CiAgfTsKCiAgdmFyIHRocm90dGxlZCA9IGZ1bmN0aW9uKCkgewogICAgdmFyIF9ub3cgPSBub3coKTsKICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkgcHJldmlvdXMgPSBfbm93OwogICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAoX25vdyAtIHByZXZpb3VzKTsKICAgIGNvbnRleHQgPSB0aGlzOwogICAgYXJncyA9IGFyZ3VtZW50czsKICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiB3YWl0KSB7CiAgICAgIGlmICh0aW1lb3V0KSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpOwogICAgICAgIHRpbWVvdXQgPSBudWxsOwogICAgICB9CiAgICAgIHByZXZpb3VzID0gX25vdzsKICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKICAgICAgaWYgKCF0aW1lb3V0KSBjb250ZXh0ID0gYXJncyA9IG51bGw7CiAgICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJhaWxpbmcgIT09IGZhbHNlKSB7CiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9OwoKICB0aHJvdHRsZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7CiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7CiAgICBwcmV2aW91cyA9IDA7CiAgICB0aW1lb3V0ID0gY29udGV4dCA9IGFyZ3MgPSBudWxsOwogIH07CgogIHJldHVybiB0aHJvdHRsZWQ7Cn0KCi8vIFdoZW4gYSBzZXF1ZW5jZSBvZiBjYWxscyBvZiB0aGUgcmV0dXJuZWQgZnVuY3Rpb24gZW5kcywgdGhlIGFyZ3VtZW50Ci8vIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZC4gVGhlIGVuZCBvZiBhIHNlcXVlbmNlIGlzIGRlZmluZWQgYnkgdGhlIGB3YWl0YAovLyBwYXJhbWV0ZXIuIElmIGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdGhlIGFyZ3VtZW50IGZ1bmN0aW9uIHdpbGwgYmUKLy8gdHJpZ2dlcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlcXVlbmNlIGluc3RlYWQgb2YgYXQgdGhlIGVuZC4KZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7CiAgdmFyIHRpbWVvdXQsIHByZXZpb3VzLCBhcmdzLCByZXN1bHQsIGNvbnRleHQ7CgogIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkgewogICAgdmFyIHBhc3NlZCA9IG5vdygpIC0gcHJldmlvdXM7CiAgICBpZiAod2FpdCA+IHBhc3NlZCkgewogICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCAtIHBhc3NlZCk7CiAgICB9IGVsc2UgewogICAgICB0aW1lb3V0ID0gbnVsbDsKICAgICAgaWYgKCFpbW1lZGlhdGUpIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7CiAgICAgIC8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIGJlY2F1c2UgYGZ1bmNgIGNhbiByZWN1cnNpdmVseSBpbnZva2UgYGRlYm91bmNlZGAuCiAgICAgIGlmICghdGltZW91dCkgYXJncyA9IGNvbnRleHQgPSBudWxsOwogICAgfQogIH07CgogIHZhciBkZWJvdW5jZWQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKF9hcmdzKSB7CiAgICBjb250ZXh0ID0gdGhpczsKICAgIGFyZ3MgPSBfYXJnczsKICAgIHByZXZpb3VzID0gbm93KCk7CiAgICBpZiAoIXRpbWVvdXQpIHsKICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpOwogICAgICBpZiAoaW1tZWRpYXRlKSByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9KTsKCiAgZGVib3VuY2VkLmNhbmNlbCA9IGZ1bmN0aW9uKCkgewogICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpOwogICAgdGltZW91dCA9IGFyZ3MgPSBjb250ZXh0ID0gbnVsbDsKICB9OwoKICByZXR1cm4gZGVib3VuY2VkOwp9CgovLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNlY29uZCwKLy8gYWxsb3dpbmcgeW91IHRvIGFkanVzdCBhcmd1bWVudHMsIHJ1biBjb2RlIGJlZm9yZSBhbmQgYWZ0ZXIsIGFuZAovLyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLgpmdW5jdGlvbiB3cmFwKGZ1bmMsIHdyYXBwZXIpIHsKICByZXR1cm4gcGFydGlhbCh3cmFwcGVyLCBmdW5jKTsKfQoKLy8gUmV0dXJucyBhIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUgcGFzc2VkLWluIHByZWRpY2F0ZS4KZnVuY3Rpb24gbmVnYXRlKHByZWRpY2F0ZSkgewogIHJldHVybiBmdW5jdGlvbigpIHsKICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgfTsKfQoKLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIGEgbGlzdCBvZiBmdW5jdGlvbnMsIGVhY2gKLy8gY29uc3VtaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgZm9sbG93cy4KZnVuY3Rpb24gY29tcG9zZSgpIHsKICB2YXIgYXJncyA9IGFyZ3VtZW50czsKICB2YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7CiAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgdmFyIGkgPSBzdGFydDsKICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgd2hpbGUgKGktLSkgcmVzdWx0ID0gYXJnc1tpXS5jYWxsKHRoaXMsIHJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH07Cn0KCi8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCBvbiBhbmQgYWZ0ZXIgdGhlIE50aCBjYWxsLgpmdW5jdGlvbiBhZnRlcih0aW1lcywgZnVuYykgewogIHJldHVybiBmdW5jdGlvbigpIHsKICAgIGlmICgtLXRpbWVzIDwgMSkgewogICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgfQogIH07Cn0KCi8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCB1cCB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZQovLyBOdGggY2FsbC4KZnVuY3Rpb24gYmVmb3JlKHRpbWVzLCBmdW5jKSB7CiAgdmFyIG1lbW87CiAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgaWYgKC0tdGltZXMgPiAwKSB7CiAgICAgIG1lbW8gPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICB9CiAgICBpZiAodGltZXMgPD0gMSkgZnVuYyA9IG51bGw7CiAgICByZXR1cm4gbWVtbzsKICB9Owp9CgovLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGF0IG1vc3Qgb25lIHRpbWUsIG5vIG1hdHRlciBob3cKLy8gb2Z0ZW4geW91IGNhbGwgaXQuIFVzZWZ1bCBmb3IgbGF6eSBpbml0aWFsaXphdGlvbi4KdmFyIG9uY2UgPSBwYXJ0aWFsKGJlZm9yZSwgMik7CgovLyBSZXR1cm5zIHRoZSBmaXJzdCBrZXkgb24gYW4gb2JqZWN0IHRoYXQgcGFzc2VzIGEgdHJ1dGggdGVzdC4KZnVuY3Rpb24gZmluZEtleShvYmosIHByZWRpY2F0ZSwgY29udGV4dCkgewogIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7CiAgdmFyIF9rZXlzID0ga2V5cyhvYmopLCBrZXk7CiAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICBrZXkgPSBfa2V5c1tpXTsKICAgIGlmIChwcmVkaWNhdGUob2JqW2tleV0sIGtleSwgb2JqKSkgcmV0dXJuIGtleTsKICB9Cn0KCi8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgLgpmdW5jdGlvbiBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcihkaXIpIHsKICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwgY29udGV4dCkgewogICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTsKICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOwogICAgdmFyIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxOwogICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikgewogICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4OwogICAgfQogICAgcmV0dXJuIC0xOwogIH07Cn0KCi8vIFJldHVybnMgdGhlIGZpcnN0IGluZGV4IG9uIGFuIGFycmF5LWxpa2UgdGhhdCBwYXNzZXMgYSB0cnV0aCB0ZXN0Lgp2YXIgZmluZEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoMSk7CgovLyBSZXR1cm5zIHRoZSBsYXN0IGluZGV4IG9uIGFuIGFycmF5LWxpa2UgdGhhdCBwYXNzZXMgYSB0cnV0aCB0ZXN0Lgp2YXIgZmluZExhc3RJbmRleCA9IGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKC0xKTsKCi8vIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0aGUgc21hbGxlc3QgaW5kZXggYXQgd2hpY2gKLy8gYW4gb2JqZWN0IHNob3VsZCBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLgpmdW5jdGlvbiBzb3J0ZWRJbmRleChhcnJheSwgb2JqLCBpdGVyYXRlZSwgY29udGV4dCkgewogIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpOwogIHZhciB2YWx1ZSA9IGl0ZXJhdGVlKG9iaik7CiAgdmFyIGxvdyA9IDAsIGhpZ2ggPSBnZXRMZW5ndGgoYXJyYXkpOwogIHdoaWxlIChsb3cgPCBoaWdoKSB7CiAgICB2YXIgbWlkID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKTsKICAgIGlmIChpdGVyYXRlZShhcnJheVttaWRdKSA8IHZhbHVlKSBsb3cgPSBtaWQgKyAxOyBlbHNlIGhpZ2ggPSBtaWQ7CiAgfQogIHJldHVybiBsb3c7Cn0KCi8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBgXy5pbmRleE9mYCBhbmQgYF8ubGFzdEluZGV4T2ZgIGZ1bmN0aW9ucy4KZnVuY3Rpb24gY3JlYXRlSW5kZXhGaW5kZXIoZGlyLCBwcmVkaWNhdGVGaW5kLCBzb3J0ZWRJbmRleCkgewogIHJldHVybiBmdW5jdGlvbihhcnJheSwgaXRlbSwgaWR4KSB7CiAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7CiAgICBpZiAodHlwZW9mIGlkeCA9PSAnbnVtYmVyJykgewogICAgICBpZiAoZGlyID4gMCkgewogICAgICAgIGkgPSBpZHggPj0gMCA/IGlkeCA6IE1hdGgubWF4KGlkeCArIGxlbmd0aCwgaSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGVuZ3RoID0gaWR4ID49IDAgPyBNYXRoLm1pbihpZHggKyAxLCBsZW5ndGgpIDogaWR4ICsgbGVuZ3RoICsgMTsKICAgICAgfQogICAgfSBlbHNlIGlmIChzb3J0ZWRJbmRleCAmJiBpZHggJiYgbGVuZ3RoKSB7CiAgICAgIGlkeCA9IHNvcnRlZEluZGV4KGFycmF5LCBpdGVtKTsKICAgICAgcmV0dXJuIGFycmF5W2lkeF0gPT09IGl0ZW0gPyBpZHggOiAtMTsKICAgIH0KICAgIGlmIChpdGVtICE9PSBpdGVtKSB7CiAgICAgIGlkeCA9IHByZWRpY2F0ZUZpbmQoc2xpY2UuY2FsbChhcnJheSwgaSwgbGVuZ3RoKSwgaXNOYU4kMSk7CiAgICAgIHJldHVybiBpZHggPj0gMCA/IGlkeCArIGkgOiAtMTsKICAgIH0KICAgIGZvciAoaWR4ID0gZGlyID4gMCA/IGkgOiBsZW5ndGggLSAxOyBpZHggPj0gMCAmJiBpZHggPCBsZW5ndGg7IGlkeCArPSBkaXIpIHsKICAgICAgaWYgKGFycmF5W2lkeF0gPT09IGl0ZW0pIHJldHVybiBpZHg7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfTsKfQoKLy8gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LAovLyBvciAtMSBpZiB0aGUgaXRlbSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5LgovLyBJZiB0aGUgYXJyYXkgaXMgbGFyZ2UgYW5kIGFscmVhZHkgaW4gc29ydCBvcmRlciwgcGFzcyBgdHJ1ZWAKLy8gZm9yICoqaXNTb3J0ZWQqKiB0byB1c2UgYmluYXJ5IHNlYXJjaC4KdmFyIGluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigxLCBmaW5kSW5kZXgsIHNvcnRlZEluZGV4KTsKCi8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LAovLyBvciAtMSBpZiB0aGUgaXRlbSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5Lgp2YXIgbGFzdEluZGV4T2YgPSBjcmVhdGVJbmRleEZpbmRlcigtMSwgZmluZExhc3RJbmRleCk7CgovLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuCmZ1bmN0aW9uIGZpbmQob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHsKICB2YXIga2V5RmluZGVyID0gaXNBcnJheUxpa2Uob2JqKSA/IGZpbmRJbmRleCA6IGZpbmRLZXk7CiAgdmFyIGtleSA9IGtleUZpbmRlcihvYmosIHByZWRpY2F0ZSwgY29udGV4dCk7CiAgaWYgKGtleSAhPT0gdm9pZCAwICYmIGtleSAhPT0gLTEpIHJldHVybiBvYmpba2V5XTsKfQoKLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgXy5maW5kYDogZ2V0dGluZyB0aGUgZmlyc3QKLy8gb2JqZWN0IGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuCmZ1bmN0aW9uIGZpbmRXaGVyZShvYmosIGF0dHJzKSB7CiAgcmV0dXJuIGZpbmQob2JqLCBtYXRjaGVyKGF0dHJzKSk7Cn0KCi8vIFRoZSBjb3JuZXJzdG9uZSBmb3IgY29sbGVjdGlvbiBmdW5jdGlvbnMsIGFuIGBlYWNoYAovLyBpbXBsZW1lbnRhdGlvbiwgYWthIGBmb3JFYWNoYC4KLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbAovLyBzcGFyc2UgYXJyYXktbGlrZXMgYXMgaWYgdGhleSB3ZXJlIGRlbnNlLgpmdW5jdGlvbiBlYWNoKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHsKICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQpOwogIHZhciBpLCBsZW5ndGg7CiAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHsKICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBpdGVyYXRlZShvYmpbaV0sIGksIG9iaik7CiAgICB9CiAgfSBlbHNlIHsKICAgIHZhciBfa2V5cyA9IGtleXMob2JqKTsKICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGl0ZXJhdGVlKG9ialtfa2V5c1tpXV0sIF9rZXlzW2ldLCBvYmopOwogICAgfQogIH0KICByZXR1cm4gb2JqOwp9CgovLyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudC4KZnVuY3Rpb24gbWFwKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHsKICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTsKICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksCiAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aCwKICAgICAgcmVzdWx0cyA9IEFycmF5KGxlbmd0aCk7CiAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgewogICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5cyA/IF9rZXlzW2luZGV4XSA6IGluZGV4OwogICAgcmVzdWx0c1tpbmRleF0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7CiAgfQogIHJldHVybiByZXN1bHRzOwp9CgovLyBJbnRlcm5hbCBoZWxwZXIgdG8gY3JlYXRlIGEgcmVkdWNpbmcgZnVuY3Rpb24sIGl0ZXJhdGluZyBsZWZ0IG9yIHJpZ2h0LgpmdW5jdGlvbiBjcmVhdGVSZWR1Y2UoZGlyKSB7CiAgLy8gV3JhcCBjb2RlIHRoYXQgcmVhc3NpZ25zIGFyZ3VtZW50IHZhcmlhYmxlcyBpbiBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRoYW4KICAvLyB0aGUgb25lIHRoYXQgYWNjZXNzZXMgYGFyZ3VtZW50cy5sZW5ndGhgIHRvIGF2b2lkIGEgcGVyZiBoaXQuICgjMTk5MSkKICB2YXIgcmVkdWNlciA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGluaXRpYWwpIHsKICAgIHZhciBfa2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIGtleXMob2JqKSwKICAgICAgICBsZW5ndGggPSAoX2tleXMgfHwgb2JqKS5sZW5ndGgsCiAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7CiAgICBpZiAoIWluaXRpYWwpIHsKICAgICAgbWVtbyA9IG9ialtfa2V5cyA/IF9rZXlzW2luZGV4XSA6IGluZGV4XTsKICAgICAgaW5kZXggKz0gZGlyOwogICAgfQogICAgZm9yICg7IGluZGV4ID49IDAgJiYgaW5kZXggPCBsZW5ndGg7IGluZGV4ICs9IGRpcikgewogICAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7CiAgICAgIG1lbW8gPSBpdGVyYXRlZShtZW1vLCBvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7CiAgICB9CiAgICByZXR1cm4gbWVtbzsKICB9OwoKICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgbWVtbywgY29udGV4dCkgewogICAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoID49IDM7CiAgICByZXR1cm4gcmVkdWNlcihvYmosIG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQsIDQpLCBtZW1vLCBpbml0aWFsKTsKICB9Owp9CgovLyAqKlJlZHVjZSoqIGJ1aWxkcyB1cCBhIHNpbmdsZSByZXN1bHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBha2EgYGluamVjdGAsCi8vIG9yIGBmb2xkbGAuCnZhciByZWR1Y2UgPSBjcmVhdGVSZWR1Y2UoMSk7CgovLyBUaGUgcmlnaHQtYXNzb2NpYXRpdmUgdmVyc2lvbiBvZiByZWR1Y2UsIGFsc28ga25vd24gYXMgYGZvbGRyYC4KdmFyIHJlZHVjZVJpZ2h0ID0gY3JlYXRlUmVkdWNlKC0xKTsKCi8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuCmZ1bmN0aW9uIGZpbHRlcihvYmosIHByZWRpY2F0ZSwgY29udGV4dCkgewogIHZhciByZXN1bHRzID0gW107CiAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTsKICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBsaXN0KSB7CiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgbGlzdCkpIHJlc3VsdHMucHVzaCh2YWx1ZSk7CiAgfSk7CiAgcmV0dXJuIHJlc3VsdHM7Cn0KCi8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuCmZ1bmN0aW9uIHJlamVjdChvYmosIHByZWRpY2F0ZSwgY29udGV4dCkgewogIHJldHVybiBmaWx0ZXIob2JqLCBuZWdhdGUoY2IocHJlZGljYXRlKSksIGNvbnRleHQpOwp9CgovLyBEZXRlcm1pbmUgd2hldGhlciBhbGwgb2YgdGhlIGVsZW1lbnRzIHBhc3MgYSB0cnV0aCB0ZXN0LgpmdW5jdGlvbiBldmVyeShvYmosIHByZWRpY2F0ZSwgY29udGV4dCkgewogIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7CiAgdmFyIF9rZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYga2V5cyhvYmopLAogICAgICBsZW5ndGggPSAoX2tleXMgfHwgb2JqKS5sZW5ndGg7CiAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgewogICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5cyA/IF9rZXlzW2luZGV4XSA6IGluZGV4OwogICAgaWYgKCFwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiB0cnVlOwp9CgovLyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVjdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LgpmdW5jdGlvbiBzb21lKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7CiAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTsKICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksCiAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aDsKICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7CiAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7CiAgICBpZiAocHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIHRydWU7CiAgfQogIHJldHVybiBmYWxzZTsKfQoKLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmplY3QgY29udGFpbnMgYSBnaXZlbiBpdGVtICh1c2luZyBgPT09YCkuCmZ1bmN0aW9uIGNvbnRhaW5zKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkgewogIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gdmFsdWVzKG9iaik7CiAgaWYgKHR5cGVvZiBmcm9tSW5kZXggIT0gJ251bWJlcicgfHwgZ3VhcmQpIGZyb21JbmRleCA9IDA7CiAgcmV0dXJuIGluZGV4T2Yob2JqLCBpdGVtLCBmcm9tSW5kZXgpID49IDA7Cn0KCi8vIEludm9rZSBhIG1ldGhvZCAod2l0aCBhcmd1bWVudHMpIG9uIGV2ZXJ5IGl0ZW0gaW4gYSBjb2xsZWN0aW9uLgp2YXIgaW52b2tlID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIHBhdGgsIGFyZ3MpIHsKICB2YXIgY29udGV4dFBhdGgsIGZ1bmM7CiAgaWYgKGlzRnVuY3Rpb24kMShwYXRoKSkgewogICAgZnVuYyA9IHBhdGg7CiAgfSBlbHNlIHsKICAgIHBhdGggPSB0b1BhdGgocGF0aCk7CiAgICBjb250ZXh0UGF0aCA9IHBhdGguc2xpY2UoMCwgLTEpOwogICAgcGF0aCA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTsKICB9CiAgcmV0dXJuIG1hcChvYmosIGZ1bmN0aW9uKGNvbnRleHQpIHsKICAgIHZhciBtZXRob2QgPSBmdW5jOwogICAgaWYgKCFtZXRob2QpIHsKICAgICAgaWYgKGNvbnRleHRQYXRoICYmIGNvbnRleHRQYXRoLmxlbmd0aCkgewogICAgICAgIGNvbnRleHQgPSBkZWVwR2V0KGNvbnRleHQsIGNvbnRleHRQYXRoKTsKICAgICAgfQogICAgICBpZiAoY29udGV4dCA9PSBudWxsKSByZXR1cm4gdm9pZCAwOwogICAgICBtZXRob2QgPSBjb250ZXh0W3BhdGhdOwogICAgfQogICAgcmV0dXJuIG1ldGhvZCA9PSBudWxsID8gbWV0aG9kIDogbWV0aG9kLmFwcGx5KGNvbnRleHQsIGFyZ3MpOwogIH0pOwp9KTsKCi8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYF8ubWFwYDogZmV0Y2hpbmcgYSBwcm9wZXJ0eS4KZnVuY3Rpb24gcGx1Y2sob2JqLCBrZXkpIHsKICByZXR1cm4gbWFwKG9iaiwgcHJvcGVydHkoa2V5KSk7Cn0KCi8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYF8uZmlsdGVyYDogc2VsZWN0aW5nIG9ubHkKLy8gb2JqZWN0cyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLgpmdW5jdGlvbiB3aGVyZShvYmosIGF0dHJzKSB7CiAgcmV0dXJuIGZpbHRlcihvYmosIG1hdGNoZXIoYXR0cnMpKTsKfQoKLy8gUmV0dXJuIHRoZSBtYXhpbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLgpmdW5jdGlvbiBtYXgob2JqLCBpdGVyYXRlZSwgY29udGV4dCkgewogIHZhciByZXN1bHQgPSAtSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IC1JbmZpbml0eSwKICAgICAgdmFsdWUsIGNvbXB1dGVkOwogIGlmIChpdGVyYXRlZSA9PSBudWxsIHx8ICh0eXBlb2YgaXRlcmF0ZWUgPT0gJ251bWJlcicgJiYgdHlwZW9mIG9ialswXSAhPSAnb2JqZWN0JyAmJiBvYmogIT0gbnVsbCkpIHsKICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiB2YWx1ZXMob2JqKTsKICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgdmFsdWUgPSBvYmpbaV07CiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlID4gcmVzdWx0KSB7CiAgICAgICAgcmVzdWx0ID0gdmFsdWU7CiAgICAgIH0KICAgIH0KICB9IGVsc2UgewogICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7CiAgICBlYWNoKG9iaiwgZnVuY3Rpb24odiwgaW5kZXgsIGxpc3QpIHsKICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2LCBpbmRleCwgbGlzdCk7CiAgICAgIGlmIChjb21wdXRlZCA+IGxhc3RDb21wdXRlZCB8fCAoY29tcHV0ZWQgPT09IC1JbmZpbml0eSAmJiByZXN1bHQgPT09IC1JbmZpbml0eSkpIHsKICAgICAgICByZXN1bHQgPSB2OwogICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkOwogICAgICB9CiAgICB9KTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8gUmV0dXJuIHRoZSBtaW5pbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLgpmdW5jdGlvbiBtaW4ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkgewogIHZhciByZXN1bHQgPSBJbmZpbml0eSwgbGFzdENvbXB1dGVkID0gSW5maW5pdHksCiAgICAgIHZhbHVlLCBjb21wdXRlZDsKICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCB8fCAodHlwZW9mIGl0ZXJhdGVlID09ICdudW1iZXInICYmIHR5cGVvZiBvYmpbMF0gIT0gJ29iamVjdCcgJiYgb2JqICE9IG51bGwpKSB7CiAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogdmFsdWVzKG9iaik7CiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhbHVlID0gb2JqW2ldOwogICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSA8IHJlc3VsdCkgewogICAgICAgIHJlc3VsdCA9IHZhbHVlOwogICAgICB9CiAgICB9CiAgfSBlbHNlIHsKICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpOwogICAgZWFjaChvYmosIGZ1bmN0aW9uKHYsIGluZGV4LCBsaXN0KSB7CiAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodiwgaW5kZXgsIGxpc3QpOwogICAgICBpZiAoY29tcHV0ZWQgPCBsYXN0Q29tcHV0ZWQgfHwgKGNvbXB1dGVkID09PSBJbmZpbml0eSAmJiByZXN1bHQgPT09IEluZmluaXR5KSkgewogICAgICAgIHJlc3VsdCA9IHY7CiAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7CiAgICAgIH0KICAgIH0pOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CgovLyBTYWZlbHkgY3JlYXRlIGEgcmVhbCwgbGl2ZSBhcnJheSBmcm9tIGFueXRoaW5nIGl0ZXJhYmxlLgp2YXIgcmVTdHJTeW1ib2wgPSAvW15cdWQ4MDAtXHVkZmZmXXxbXHVkODAwLVx1ZGJmZl1bXHVkYzAwLVx1ZGZmZl18W1x1ZDgwMC1cdWRmZmZdL2c7CmZ1bmN0aW9uIHRvQXJyYXkob2JqKSB7CiAgaWYgKCFvYmopIHJldHVybiBbXTsKICBpZiAoaXNBcnJheShvYmopKSByZXR1cm4gc2xpY2UuY2FsbChvYmopOwogIGlmIChpc1N0cmluZyhvYmopKSB7CiAgICAvLyBLZWVwIHN1cnJvZ2F0ZSBwYWlyIGNoYXJhY3RlcnMgdG9nZXRoZXIuCiAgICByZXR1cm4gb2JqLm1hdGNoKHJlU3RyU3ltYm9sKTsKICB9CiAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBtYXAob2JqLCBpZGVudGl0eSk7CiAgcmV0dXJuIHZhbHVlcyhvYmopOwp9CgovLyBTYW1wbGUgKipuKiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbiB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlCi8vIFtGaXNoZXItWWF0ZXMgc2h1ZmZsZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlzaGVy4oCTWWF0ZXNfc2h1ZmZsZSkuCi8vIElmICoqbioqIGlzIG5vdCBzcGVjaWZpZWQsIHJldHVybnMgYSBzaW5nbGUgcmFuZG9tIGVsZW1lbnQuCi8vIFRoZSBpbnRlcm5hbCBgZ3VhcmRgIGFyZ3VtZW50IGFsbG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC4KZnVuY3Rpb24gc2FtcGxlKG9iaiwgbiwgZ3VhcmQpIHsKICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSB7CiAgICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IHZhbHVlcyhvYmopOwogICAgcmV0dXJuIG9ialtyYW5kb20ob2JqLmxlbmd0aCAtIDEpXTsKICB9CiAgdmFyIHNhbXBsZSA9IHRvQXJyYXkob2JqKTsKICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKHNhbXBsZSk7CiAgbiA9IE1hdGgubWF4KE1hdGgubWluKG4sIGxlbmd0aCksIDApOwogIHZhciBsYXN0ID0gbGVuZ3RoIC0gMTsKICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbjsgaW5kZXgrKykgewogICAgdmFyIHJhbmQgPSByYW5kb20oaW5kZXgsIGxhc3QpOwogICAgdmFyIHRlbXAgPSBzYW1wbGVbaW5kZXhdOwogICAgc2FtcGxlW2luZGV4XSA9IHNhbXBsZVtyYW5kXTsKICAgIHNhbXBsZVtyYW5kXSA9IHRlbXA7CiAgfQogIHJldHVybiBzYW1wbGUuc2xpY2UoMCwgbik7Cn0KCi8vIFNodWZmbGUgYSBjb2xsZWN0aW9uLgpmdW5jdGlvbiBzaHVmZmxlKG9iaikgewogIHJldHVybiBzYW1wbGUob2JqLCBJbmZpbml0eSk7Cn0KCi8vIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRlZS4KZnVuY3Rpb24gc29ydEJ5KG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHsKICB2YXIgaW5kZXggPSAwOwogIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpOwogIHJldHVybiBwbHVjayhtYXAob2JqLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBsaXN0KSB7CiAgICByZXR1cm4gewogICAgICB2YWx1ZTogdmFsdWUsCiAgICAgIGluZGV4OiBpbmRleCsrLAogICAgICBjcml0ZXJpYTogaXRlcmF0ZWUodmFsdWUsIGtleSwgbGlzdCkKICAgIH07CiAgfSkuc29ydChmdW5jdGlvbihsZWZ0LCByaWdodCkgewogICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhOwogICAgdmFyIGIgPSByaWdodC5jcml0ZXJpYTsKICAgIGlmIChhICE9PSBiKSB7CiAgICAgIGlmIChhID4gYiB8fCBhID09PSB2b2lkIDApIHJldHVybiAxOwogICAgICBpZiAoYSA8IGIgfHwgYiA9PT0gdm9pZCAwKSByZXR1cm4gLTE7CiAgICB9CiAgICByZXR1cm4gbGVmdC5pbmRleCAtIHJpZ2h0LmluZGV4OwogIH0pLCAndmFsdWUnKTsKfQoKLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlICJncm91cCBieSIgb3BlcmF0aW9ucy4KZnVuY3Rpb24gZ3JvdXAoYmVoYXZpb3IsIHBhcnRpdGlvbikgewogIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7CiAgICB2YXIgcmVzdWx0ID0gcGFydGl0aW9uID8gW1tdLCBbXV0gOiB7fTsKICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpOwogICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewogICAgICB2YXIga2V5ID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBvYmopOwogICAgICBiZWhhdmlvcihyZXN1bHQsIHZhbHVlLCBrZXkpOwogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH07Cn0KCi8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUKLy8gdG8gZ3JvdXAgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjcml0ZXJpb24uCnZhciBncm91cEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7CiAgaWYgKGhhcyQxKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0ucHVzaCh2YWx1ZSk7IGVsc2UgcmVzdWx0W2tleV0gPSBbdmFsdWVdOwp9KTsKCi8vIEluZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgXy5ncm91cEJ5YCwgYnV0IGZvcgovLyB3aGVuIHlvdSBrbm93IHRoYXQgeW91ciBpbmRleCB2YWx1ZXMgd2lsbCBiZSB1bmlxdWUuCnZhciBpbmRleEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7CiAgcmVzdWx0W2tleV0gPSB2YWx1ZTsKfSk7CgovLyBDb3VudHMgaW5zdGFuY2VzIG9mIGFuIG9iamVjdCB0aGF0IGdyb3VwIGJ5IGEgY2VydGFpbiBjcml0ZXJpb24uIFBhc3MKLy8gZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBjb3VudCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlCi8vIGNyaXRlcmlvbi4KdmFyIGNvdW50QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHsKICBpZiAoaGFzJDEocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XSsrOyBlbHNlIHJlc3VsdFtrZXldID0gMTsKfSk7CgovLyBTcGxpdCBhIGNvbGxlY3Rpb24gaW50byB0d28gYXJyYXlzOiBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIHBhc3MgdGhlIGdpdmVuCi8vIHRydXRoIHRlc3QsIGFuZCBvbmUgd2hvc2UgZWxlbWVudHMgYWxsIGRvIG5vdCBwYXNzIHRoZSB0cnV0aCB0ZXN0Lgp2YXIgcGFydGl0aW9uID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwgcGFzcykgewogIHJlc3VsdFtwYXNzID8gMCA6IDFdLnB1c2godmFsdWUpOwp9LCB0cnVlKTsKCi8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgY29sbGVjdGlvbi4KZnVuY3Rpb24gc2l6ZShvYmopIHsKICBpZiAob2JqID09IG51bGwpIHJldHVybiAwOwogIHJldHVybiBpc0FycmF5TGlrZShvYmopID8gb2JqLmxlbmd0aCA6IGtleXMob2JqKS5sZW5ndGg7Cn0KCi8vIEludGVybmFsIGBfLnBpY2tgIGhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBga2V5YCBpcyBhbiBlbnVtZXJhYmxlCi8vIHByb3BlcnR5IG5hbWUgb2YgYG9iamAuCmZ1bmN0aW9uIGtleUluT2JqKHZhbHVlLCBrZXksIG9iaikgewogIHJldHVybiBrZXkgaW4gb2JqOwp9CgovLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3Qgb25seSBjb250YWluaW5nIHRoZSBhbGxvd2VkIHByb3BlcnRpZXMuCnZhciBwaWNrID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIGtleXMpIHsKICB2YXIgcmVzdWx0ID0ge30sIGl0ZXJhdGVlID0ga2V5c1swXTsKICBpZiAob2JqID09IG51bGwpIHJldHVybiByZXN1bHQ7CiAgaWYgKGlzRnVuY3Rpb24kMShpdGVyYXRlZSkpIHsKICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwga2V5c1sxXSk7CiAgICBrZXlzID0gYWxsS2V5cyhvYmopOwogIH0gZWxzZSB7CiAgICBpdGVyYXRlZSA9IGtleUluT2JqOwogICAga2V5cyA9IGZsYXR0ZW4kMShrZXlzLCBmYWxzZSwgZmFsc2UpOwogICAgb2JqID0gT2JqZWN0KG9iaik7CiAgfQogIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBrZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICB2YXIga2V5ID0ga2V5c1tpXTsKICAgIHZhciB2YWx1ZSA9IG9ialtrZXldOwogICAgaWYgKGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iaikpIHJlc3VsdFtrZXldID0gdmFsdWU7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0pOwoKLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IHdpdGhvdXQgdGhlIGRpc2FsbG93ZWQgcHJvcGVydGllcy4KdmFyIG9taXQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykgewogIHZhciBpdGVyYXRlZSA9IGtleXNbMF0sIGNvbnRleHQ7CiAgaWYgKGlzRnVuY3Rpb24kMShpdGVyYXRlZSkpIHsKICAgIGl0ZXJhdGVlID0gbmVnYXRlKGl0ZXJhdGVlKTsKICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIGNvbnRleHQgPSBrZXlzWzFdOwogIH0gZWxzZSB7CiAgICBrZXlzID0gbWFwKGZsYXR0ZW4kMShrZXlzLCBmYWxzZSwgZmFsc2UpLCBTdHJpbmcpOwogICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5KSB7CiAgICAgIHJldHVybiAhY29udGFpbnMoa2V5cywga2V5KTsKICAgIH07CiAgfQogIHJldHVybiBwaWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpOwp9KTsKCi8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGxhc3QgZW50cnkgb2YgdGhlIGFycmF5LiBFc3BlY2lhbGx5IHVzZWZ1bCBvbgovLyB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiBhbGwgdGhlIHZhbHVlcyBpbgovLyB0aGUgYXJyYXksIGV4Y2x1ZGluZyB0aGUgbGFzdCBOLgpmdW5jdGlvbiBpbml0aWFsKGFycmF5LCBuLCBndWFyZCkgewogIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCAwLCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSAobiA9PSBudWxsIHx8IGd1YXJkID8gMSA6IG4pKSk7Cn0KCi8vIEdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgZmlyc3QgTgovLyB2YWx1ZXMgaW4gdGhlIGFycmF5LiBUaGUgKipndWFyZCoqIGNoZWNrIGFsbG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC4KZnVuY3Rpb24gZmlyc3QoYXJyYXksIG4sIGd1YXJkKSB7CiAgaWYgKGFycmF5ID09IG51bGwgfHwgYXJyYXkubGVuZ3RoIDwgMSkgcmV0dXJuIG4gPT0gbnVsbCB8fCBndWFyZCA/IHZvaWQgMCA6IFtdOwogIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVswXTsKICByZXR1cm4gaW5pdGlhbChhcnJheSwgYXJyYXkubGVuZ3RoIC0gbik7Cn0KCi8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBgYXJyYXlgLiBFc3BlY2lhbGx5IHVzZWZ1bCBvbgovLyB0aGUgYGFyZ3VtZW50c2Agb2JqZWN0LiBQYXNzaW5nIGFuICoqbioqIHdpbGwgcmV0dXJuIHRoZSByZXN0IE4gdmFsdWVzIGluIHRoZQovLyBgYXJyYXlgLgpmdW5jdGlvbiByZXN0KGFycmF5LCBuLCBndWFyZCkgewogIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCBuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbik7Cn0KCi8vIEdldCB0aGUgbGFzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBsYXN0IE4KLy8gdmFsdWVzIGluIHRoZSBhcnJheS4KZnVuY3Rpb24gbGFzdChhcnJheSwgbiwgZ3VhcmQpIHsKICBpZiAoYXJyYXkgPT0gbnVsbCB8fCBhcnJheS5sZW5ndGggPCAxKSByZXR1cm4gbiA9PSBudWxsIHx8IGd1YXJkID8gdm9pZCAwIDogW107CiAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdOwogIHJldHVybiByZXN0KGFycmF5LCBNYXRoLm1heCgwLCBhcnJheS5sZW5ndGggLSBuKSk7Cn0KCi8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS4KZnVuY3Rpb24gY29tcGFjdChhcnJheSkgewogIHJldHVybiBmaWx0ZXIoYXJyYXksIEJvb2xlYW4pOwp9CgovLyBGbGF0dGVuIG91dCBhbiBhcnJheSwgZWl0aGVyIHJlY3Vyc2l2ZWx5IChieSBkZWZhdWx0KSwgb3IgdXAgdG8gYGRlcHRoYC4KLy8gUGFzc2luZyBgdHJ1ZWAgb3IgYGZhbHNlYCBhcyBgZGVwdGhgIG1lYW5zIGAxYCBvciBgSW5maW5pdHlgLCByZXNwZWN0aXZlbHkuCmZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXksIGRlcHRoKSB7CiAgcmV0dXJuIGZsYXR0ZW4kMShhcnJheSwgZGVwdGgsIGZhbHNlKTsKfQoKLy8gVGFrZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9uZSBhcnJheSBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgYXJyYXlzLgovLyBPbmx5IHRoZSBlbGVtZW50cyBwcmVzZW50IGluIGp1c3QgdGhlIGZpcnN0IGFycmF5IHdpbGwgcmVtYWluLgp2YXIgZGlmZmVyZW5jZSA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXksIHJlc3QpIHsKICByZXN0ID0gZmxhdHRlbiQxKHJlc3QsIHRydWUsIHRydWUpOwogIHJldHVybiBmaWx0ZXIoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKXsKICAgIHJldHVybiAhY29udGFpbnMocmVzdCwgdmFsdWUpOwogIH0pOwp9KTsKCi8vIFJldHVybiBhIHZlcnNpb24gb2YgdGhlIGFycmF5IHRoYXQgZG9lcyBub3QgY29udGFpbiB0aGUgc3BlY2lmaWVkIHZhbHVlKHMpLgp2YXIgd2l0aG91dCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXksIG90aGVyQXJyYXlzKSB7CiAgcmV0dXJuIGRpZmZlcmVuY2UoYXJyYXksIG90aGVyQXJyYXlzKTsKfSk7CgovLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeQovLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uCi8vIFRoZSBmYXN0ZXIgYWxnb3JpdGhtIHdpbGwgbm90IHdvcmsgd2l0aCBhbiBpdGVyYXRlZSBpZiB0aGUgaXRlcmF0ZWUKLy8gaXMgbm90IGEgb25lLXRvLW9uZSBmdW5jdGlvbiwgc28gcHJvdmlkaW5nIGFuIGl0ZXJhdGVlIHdpbGwgZGlzYWJsZQovLyB0aGUgZmFzdGVyIGFsZ29yaXRobS4KZnVuY3Rpb24gdW5pcShhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7CiAgaWYgKCFpc0Jvb2xlYW4oaXNTb3J0ZWQpKSB7CiAgICBjb250ZXh0ID0gaXRlcmF0ZWU7CiAgICBpdGVyYXRlZSA9IGlzU29ydGVkOwogICAgaXNTb3J0ZWQgPSBmYWxzZTsKICB9CiAgaWYgKGl0ZXJhdGVlICE9IG51bGwpIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpOwogIHZhciByZXN1bHQgPSBbXTsKICB2YXIgc2VlbiA9IFtdOwogIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldLAogICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSwgaSwgYXJyYXkpIDogdmFsdWU7CiAgICBpZiAoaXNTb3J0ZWQgJiYgIWl0ZXJhdGVlKSB7CiAgICAgIGlmICghaSB8fCBzZWVuICE9PSBjb21wdXRlZCkgcmVzdWx0LnB1c2godmFsdWUpOwogICAgICBzZWVuID0gY29tcHV0ZWQ7CiAgICB9IGVsc2UgaWYgKGl0ZXJhdGVlKSB7CiAgICAgIGlmICghY29udGFpbnMoc2VlbiwgY29tcHV0ZWQpKSB7CiAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTsKICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoIWNvbnRhaW5zKHJlc3VsdCwgdmFsdWUpKSB7CiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTsKICAgIH0KICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8gUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSB1bmlvbjogZWFjaCBkaXN0aW5jdCBlbGVtZW50IGZyb20gYWxsIG9mCi8vIHRoZSBwYXNzZWQtaW4gYXJyYXlzLgp2YXIgdW5pb24gPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5cykgewogIHJldHVybiB1bmlxKGZsYXR0ZW4kMShhcnJheXMsIHRydWUsIHRydWUpKTsKfSk7CgovLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgZXZlcnkgaXRlbSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlCi8vIHBhc3NlZC1pbiBhcnJheXMuCmZ1bmN0aW9uIGludGVyc2VjdGlvbihhcnJheSkgewogIHZhciByZXN1bHQgPSBbXTsKICB2YXIgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7CiAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7IGkgPCBsZW5ndGg7IGkrKykgewogICAgdmFyIGl0ZW0gPSBhcnJheVtpXTsKICAgIGlmIChjb250YWlucyhyZXN1bHQsIGl0ZW0pKSBjb250aW51ZTsKICAgIHZhciBqOwogICAgZm9yIChqID0gMTsgaiA8IGFyZ3NMZW5ndGg7IGorKykgewogICAgICBpZiAoIWNvbnRhaW5zKGFyZ3VtZW50c1tqXSwgaXRlbSkpIGJyZWFrOwogICAgfQogICAgaWYgKGogPT09IGFyZ3NMZW5ndGgpIHJlc3VsdC5wdXNoKGl0ZW0pOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CgovLyBDb21wbGVtZW50IG9mIHppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgYW5kIGdyb3VwcwovLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hhcmVkIGluZGljZXMuCmZ1bmN0aW9uIHVuemlwKGFycmF5KSB7CiAgdmFyIGxlbmd0aCA9IChhcnJheSAmJiBtYXgoYXJyYXksIGdldExlbmd0aCkubGVuZ3RoKSB8fCAwOwogIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpOwoKICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7CiAgICByZXN1bHRbaW5kZXhdID0gcGx1Y2soYXJyYXksIGluZGV4KTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8gWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZQovLyBhbiBpbmRleCBnbyB0b2dldGhlci4KdmFyIHppcCA9IHJlc3RBcmd1bWVudHModW56aXApOwoKLy8gQ29udmVydHMgbGlzdHMgaW50byBvYmplY3RzLiBQYXNzIGVpdGhlciBhIHNpbmdsZSBhcnJheSBvZiBgW2tleSwgdmFsdWVdYAovLyBwYWlycywgb3IgdHdvIHBhcmFsbGVsIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGggLS0gb25lIG9mIGtleXMsIGFuZCBvbmUgb2YKLy8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLiBQYXNzaW5nIGJ5IHBhaXJzIGlzIHRoZSByZXZlcnNlIG9mIGBfLnBhaXJzYC4KZnVuY3Rpb24gb2JqZWN0KGxpc3QsIHZhbHVlcykgewogIHZhciByZXN1bHQgPSB7fTsKICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGxpc3QpOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgIGlmICh2YWx1ZXMpIHsKICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldOwogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0W2xpc3RbaV1bMF1dID0gbGlzdFtpXVsxXTsKICAgIH0KICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8gR2VuZXJhdGUgYW4gaW50ZWdlciBBcnJheSBjb250YWluaW5nIGFuIGFyaXRobWV0aWMgcHJvZ3Jlc3Npb24uIEEgcG9ydCBvZgovLyB0aGUgbmF0aXZlIFB5dGhvbiBgcmFuZ2UoKWAgZnVuY3Rpb24uIFNlZQovLyBbdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uXShodHRwczovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS4KZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsIHN0b3AsIHN0ZXApIHsKICBpZiAoc3RvcCA9PSBudWxsKSB7CiAgICBzdG9wID0gc3RhcnQgfHwgMDsKICAgIHN0YXJ0ID0gMDsKICB9CiAgaWYgKCFzdGVwKSB7CiAgICBzdGVwID0gc3RvcCA8IHN0YXJ0ID8gLTEgOiAxOwogIH0KCiAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApLCAwKTsKICB2YXIgcmFuZ2UgPSBBcnJheShsZW5ndGgpOwoKICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW5ndGg7IGlkeCsrLCBzdGFydCArPSBzdGVwKSB7CiAgICByYW5nZVtpZHhdID0gc3RhcnQ7CiAgfQoKICByZXR1cm4gcmFuZ2U7Cn0KCi8vIENodW5rIGEgc2luZ2xlIGFycmF5IGludG8gbXVsdGlwbGUgYXJyYXlzLCBlYWNoIGNvbnRhaW5pbmcgYGNvdW50YCBvciBmZXdlcgovLyBpdGVtcy4KZnVuY3Rpb24gY2h1bmsoYXJyYXksIGNvdW50KSB7CiAgaWYgKGNvdW50ID09IG51bGwgfHwgY291bnQgPCAxKSByZXR1cm4gW107CiAgdmFyIHJlc3VsdCA9IFtdOwogIHZhciBpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOwogIHdoaWxlIChpIDwgbGVuZ3RoKSB7CiAgICByZXN1bHQucHVzaChzbGljZS5jYWxsKGFycmF5LCBpLCBpICs9IGNvdW50KSk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KCi8vIEhlbHBlciBmdW5jdGlvbiB0byBjb250aW51ZSBjaGFpbmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy4KZnVuY3Rpb24gY2hhaW5SZXN1bHQoaW5zdGFuY2UsIG9iaikgewogIHJldHVybiBpbnN0YW5jZS5fY2hhaW4gPyBfJDEob2JqKS5jaGFpbigpIDogb2JqOwp9CgovLyBBZGQgeW91ciBvd24gY3VzdG9tIGZ1bmN0aW9ucyB0byB0aGUgVW5kZXJzY29yZSBvYmplY3QuCmZ1bmN0aW9uIG1peGluKG9iaikgewogIGVhY2goZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHsKICAgIHZhciBmdW5jID0gXyQxW25hbWVdID0gb2JqW25hbWVdOwogICAgXyQxLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgYXJncyA9IFt0aGlzLl93cmFwcGVkXTsKICAgICAgcHVzaC5hcHBseShhcmdzLCBhcmd1bWVudHMpOwogICAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgZnVuYy5hcHBseShfJDEsIGFyZ3MpKTsKICAgIH07CiAgfSk7CiAgcmV0dXJuIF8kMTsKfQoKLy8gQWRkIGFsbCBtdXRhdG9yIGBBcnJheWAgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLgplYWNoKFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0J10sIGZ1bmN0aW9uKG5hbWUpIHsKICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTsKICBfJDEucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDsKICAgIGlmIChvYmogIT0gbnVsbCkgewogICAgICBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpOwogICAgICBpZiAoKG5hbWUgPT09ICdzaGlmdCcgfHwgbmFtZSA9PT0gJ3NwbGljZScpICYmIG9iai5sZW5ndGggPT09IDApIHsKICAgICAgICBkZWxldGUgb2JqWzBdOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgb2JqKTsKICB9Owp9KTsKCi8vIEFkZCBhbGwgYWNjZXNzb3IgYEFycmF5YCBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuCmVhY2goWydjb25jYXQnLCAnam9pbicsICdzbGljZSddLCBmdW5jdGlvbihuYW1lKSB7CiAgdmFyIG1ldGhvZCA9IEFycmF5UHJvdG9bbmFtZV07CiAgXyQxLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgdmFyIG9iaiA9IHRoaXMuX3dyYXBwZWQ7CiAgICBpZiAob2JqICE9IG51bGwpIG9iaiA9IG1ldGhvZC5hcHBseShvYmosIGFyZ3VtZW50cyk7CiAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgb2JqKTsKICB9Owp9KTsKCi8vIE5hbWVkIEV4cG9ydHMKCnZhciBhbGxFeHBvcnRzID0gewogIF9fcHJvdG9fXzogbnVsbCwKICBWRVJTSU9OOiBWRVJTSU9OLAogIHJlc3RBcmd1bWVudHM6IHJlc3RBcmd1bWVudHMsCiAgaXNPYmplY3Q6IGlzT2JqZWN0LAogIGlzTnVsbDogaXNOdWxsLAogIGlzVW5kZWZpbmVkOiBpc1VuZGVmaW5lZCwKICBpc0Jvb2xlYW46IGlzQm9vbGVhbiwKICBpc0VsZW1lbnQ6IGlzRWxlbWVudCwKICBpc1N0cmluZzogaXNTdHJpbmcsCiAgaXNOdW1iZXI6IGlzTnVtYmVyLAogIGlzRGF0ZTogaXNEYXRlLAogIGlzUmVnRXhwOiBpc1JlZ0V4cCwKICBpc0Vycm9yOiBpc0Vycm9yLAogIGlzU3ltYm9sOiBpc1N5bWJvbCwKICBpc0FycmF5QnVmZmVyOiBpc0FycmF5QnVmZmVyLAogIGlzRGF0YVZpZXc6IGlzRGF0YVZpZXckMSwKICBpc0FycmF5OiBpc0FycmF5LAogIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24kMSwKICBpc0FyZ3VtZW50czogaXNBcmd1bWVudHMkMSwKICBpc0Zpbml0ZTogaXNGaW5pdGUkMSwKICBpc05hTjogaXNOYU4kMSwKICBpc1R5cGVkQXJyYXk6IGlzVHlwZWRBcnJheSQxLAogIGlzRW1wdHk6IGlzRW1wdHksCiAgaXNNYXRjaDogaXNNYXRjaCwKICBpc0VxdWFsOiBpc0VxdWFsLAogIGlzTWFwOiBpc01hcCwKICBpc1dlYWtNYXA6IGlzV2Vha01hcCwKICBpc1NldDogaXNTZXQsCiAgaXNXZWFrU2V0OiBpc1dlYWtTZXQsCiAga2V5czoga2V5cywKICBhbGxLZXlzOiBhbGxLZXlzLAogIHZhbHVlczogdmFsdWVzLAogIHBhaXJzOiBwYWlycywKICBpbnZlcnQ6IGludmVydCwKICBmdW5jdGlvbnM6IGZ1bmN0aW9ucywKICBtZXRob2RzOiBmdW5jdGlvbnMsCiAgZXh0ZW5kOiBleHRlbmQsCiAgZXh0ZW5kT3duOiBleHRlbmRPd24sCiAgYXNzaWduOiBleHRlbmRPd24sCiAgZGVmYXVsdHM6IGRlZmF1bHRzLAogIGNyZWF0ZTogY3JlYXRlLAogIGNsb25lOiBjbG9uZSwKICB0YXA6IHRhcCwKICBnZXQ6IGdldCwKICBoYXM6IGhhcywKICBtYXBPYmplY3Q6IG1hcE9iamVjdCwKICBpZGVudGl0eTogaWRlbnRpdHksCiAgY29uc3RhbnQ6IGNvbnN0YW50LAogIG5vb3A6IG5vb3AsCiAgdG9QYXRoOiB0b1BhdGgkMSwKICBwcm9wZXJ0eTogcHJvcGVydHksCiAgcHJvcGVydHlPZjogcHJvcGVydHlPZiwKICBtYXRjaGVyOiBtYXRjaGVyLAogIG1hdGNoZXM6IG1hdGNoZXIsCiAgdGltZXM6IHRpbWVzLAogIHJhbmRvbTogcmFuZG9tLAogIG5vdzogbm93LAogIGVzY2FwZTogX2VzY2FwZSwKICB1bmVzY2FwZTogX3VuZXNjYXBlLAogIHRlbXBsYXRlU2V0dGluZ3M6IHRlbXBsYXRlU2V0dGluZ3MsCiAgdGVtcGxhdGU6IHRlbXBsYXRlLAogIHJlc3VsdDogcmVzdWx0LAogIHVuaXF1ZUlkOiB1bmlxdWVJZCwKICBjaGFpbjogY2hhaW4sCiAgaXRlcmF0ZWU6IGl0ZXJhdGVlLAogIHBhcnRpYWw6IHBhcnRpYWwsCiAgYmluZDogYmluZCwKICBiaW5kQWxsOiBiaW5kQWxsLAogIG1lbW9pemU6IG1lbW9pemUsCiAgZGVsYXk6IGRlbGF5LAogIGRlZmVyOiBkZWZlciwKICB0aHJvdHRsZTogdGhyb3R0bGUsCiAgZGVib3VuY2U6IGRlYm91bmNlLAogIHdyYXA6IHdyYXAsCiAgbmVnYXRlOiBuZWdhdGUsCiAgY29tcG9zZTogY29tcG9zZSwKICBhZnRlcjogYWZ0ZXIsCiAgYmVmb3JlOiBiZWZvcmUsCiAgb25jZTogb25jZSwKICBmaW5kS2V5OiBmaW5kS2V5LAogIGZpbmRJbmRleDogZmluZEluZGV4LAogIGZpbmRMYXN0SW5kZXg6IGZpbmRMYXN0SW5kZXgsCiAgc29ydGVkSW5kZXg6IHNvcnRlZEluZGV4LAogIGluZGV4T2Y6IGluZGV4T2YsCiAgbGFzdEluZGV4T2Y6IGxhc3RJbmRleE9mLAogIGZpbmQ6IGZpbmQsCiAgZGV0ZWN0OiBmaW5kLAogIGZpbmRXaGVyZTogZmluZFdoZXJlLAogIGVhY2g6IGVhY2gsCiAgZm9yRWFjaDogZWFjaCwKICBtYXA6IG1hcCwKICBjb2xsZWN0OiBtYXAsCiAgcmVkdWNlOiByZWR1Y2UsCiAgZm9sZGw6IHJlZHVjZSwKICBpbmplY3Q6IHJlZHVjZSwKICByZWR1Y2VSaWdodDogcmVkdWNlUmlnaHQsCiAgZm9sZHI6IHJlZHVjZVJpZ2h0LAogIGZpbHRlcjogZmlsdGVyLAogIHNlbGVjdDogZmlsdGVyLAogIHJlamVjdDogcmVqZWN0LAogIGV2ZXJ5OiBldmVyeSwKICBhbGw6IGV2ZXJ5LAogIHNvbWU6IHNvbWUsCiAgYW55OiBzb21lLAogIGNvbnRhaW5zOiBjb250YWlucywKICBpbmNsdWRlczogY29udGFpbnMsCiAgaW5jbHVkZTogY29udGFpbnMsCiAgaW52b2tlOiBpbnZva2UsCiAgcGx1Y2s6IHBsdWNrLAogIHdoZXJlOiB3aGVyZSwKICBtYXg6IG1heCwKICBtaW46IG1pbiwKICBzaHVmZmxlOiBzaHVmZmxlLAogIHNhbXBsZTogc2FtcGxlLAogIHNvcnRCeTogc29ydEJ5LAogIGdyb3VwQnk6IGdyb3VwQnksCiAgaW5kZXhCeTogaW5kZXhCeSwKICBjb3VudEJ5OiBjb3VudEJ5LAogIHBhcnRpdGlvbjogcGFydGl0aW9uLAogIHRvQXJyYXk6IHRvQXJyYXksCiAgc2l6ZTogc2l6ZSwKICBwaWNrOiBwaWNrLAogIG9taXQ6IG9taXQsCiAgZmlyc3Q6IGZpcnN0LAogIGhlYWQ6IGZpcnN0LAogIHRha2U6IGZpcnN0LAogIGluaXRpYWw6IGluaXRpYWwsCiAgbGFzdDogbGFzdCwKICByZXN0OiByZXN0LAogIHRhaWw6IHJlc3QsCiAgZHJvcDogcmVzdCwKICBjb21wYWN0OiBjb21wYWN0LAogIGZsYXR0ZW46IGZsYXR0ZW4sCiAgd2l0aG91dDogd2l0aG91dCwKICB1bmlxOiB1bmlxLAogIHVuaXF1ZTogdW5pcSwKICB1bmlvbjogdW5pb24sCiAgaW50ZXJzZWN0aW9uOiBpbnRlcnNlY3Rpb24sCiAgZGlmZmVyZW5jZTogZGlmZmVyZW5jZSwKICB1bnppcDogdW56aXAsCiAgdHJhbnNwb3NlOiB1bnppcCwKICB6aXA6IHppcCwKICBvYmplY3Q6IG9iamVjdCwKICByYW5nZTogcmFuZ2UsCiAgY2h1bms6IGNodW5rLAogIG1peGluOiBtaXhpbiwKICAnZGVmYXVsdCc6IF8kMQp9OwoKLy8gRGVmYXVsdCBFeHBvcnQKCi8vIEFkZCBhbGwgb2YgdGhlIFVuZGVyc2NvcmUgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyIG9iamVjdC4KdmFyIF8gPSBtaXhpbihhbGxFeHBvcnRzKTsKLy8gTGVnYWN5IE5vZGUuanMgQVBJLgpfLl8gPSBfOwoKLy8gRVNNIEV4cG9ydHMKCmV4cG9ydCBkZWZhdWx0IF87CmV4cG9ydCB7IFZFUlNJT04sIGFmdGVyLCBldmVyeSBhcyBhbGwsIGFsbEtleXMsIHNvbWUgYXMgYW55LCBleHRlbmRPd24gYXMgYXNzaWduLCBiZWZvcmUsIGJpbmQsIGJpbmRBbGwsIGNoYWluLCBjaHVuaywgY2xvbmUsIG1hcCBhcyBjb2xsZWN0LCBjb21wYWN0LCBjb21wb3NlLCBjb25zdGFudCwgY29udGFpbnMsIGNvdW50QnksIGNyZWF0ZSwgZGVib3VuY2UsIGRlZmF1bHRzLCBkZWZlciwgZGVsYXksIGZpbmQgYXMgZGV0ZWN0LCBkaWZmZXJlbmNlLCByZXN0IGFzIGRyb3AsIGVhY2gsIF9lc2NhcGUgYXMgZXNjYXBlLCBldmVyeSwgZXh0ZW5kLCBleHRlbmRPd24sIGZpbHRlciwgZmluZCwgZmluZEluZGV4LCBmaW5kS2V5LCBmaW5kTGFzdEluZGV4LCBmaW5kV2hlcmUsIGZpcnN0LCBmbGF0dGVuLCByZWR1Y2UgYXMgZm9sZGwsIHJlZHVjZVJpZ2h0IGFzIGZvbGRyLCBlYWNoIGFzIGZvckVhY2gsIGZ1bmN0aW9ucywgZ2V0LCBncm91cEJ5LCBoYXMsIGZpcnN0IGFzIGhlYWQsIGlkZW50aXR5LCBjb250YWlucyBhcyBpbmNsdWRlLCBjb250YWlucyBhcyBpbmNsdWRlcywgaW5kZXhCeSwgaW5kZXhPZiwgaW5pdGlhbCwgcmVkdWNlIGFzIGluamVjdCwgaW50ZXJzZWN0aW9uLCBpbnZlcnQsIGludm9rZSwgaXNBcmd1bWVudHMkMSBhcyBpc0FyZ3VtZW50cywgaXNBcnJheSwgaXNBcnJheUJ1ZmZlciwgaXNCb29sZWFuLCBpc0RhdGFWaWV3JDEgYXMgaXNEYXRhVmlldywgaXNEYXRlLCBpc0VsZW1lbnQsIGlzRW1wdHksIGlzRXF1YWwsIGlzRXJyb3IsIGlzRmluaXRlJDEgYXMgaXNGaW5pdGUsIGlzRnVuY3Rpb24kMSBhcyBpc0Z1bmN0aW9uLCBpc01hcCwgaXNNYXRjaCwgaXNOYU4kMSBhcyBpc05hTiwgaXNOdWxsLCBpc051bWJlciwgaXNPYmplY3QsIGlzUmVnRXhwLCBpc1NldCwgaXNTdHJpbmcsIGlzU3ltYm9sLCBpc1R5cGVkQXJyYXkkMSBhcyBpc1R5cGVkQXJyYXksIGlzVW5kZWZpbmVkLCBpc1dlYWtNYXAsIGlzV2Vha1NldCwgaXRlcmF0ZWUsIGtleXMsIGxhc3QsIGxhc3RJbmRleE9mLCBtYXAsIG1hcE9iamVjdCwgbWF0Y2hlciwgbWF0Y2hlciBhcyBtYXRjaGVzLCBtYXgsIG1lbW9pemUsIGZ1bmN0aW9ucyBhcyBtZXRob2RzLCBtaW4sIG1peGluLCBuZWdhdGUsIG5vb3AsIG5vdywgb2JqZWN0LCBvbWl0LCBvbmNlLCBwYWlycywgcGFydGlhbCwgcGFydGl0aW9uLCBwaWNrLCBwbHVjaywgcHJvcGVydHksIHByb3BlcnR5T2YsIHJhbmRvbSwgcmFuZ2UsIHJlZHVjZSwgcmVkdWNlUmlnaHQsIHJlamVjdCwgcmVzdCwgcmVzdEFyZ3VtZW50cywgcmVzdWx0LCBzYW1wbGUsIGZpbHRlciBhcyBzZWxlY3QsIHNodWZmbGUsIHNpemUsIHNvbWUsIHNvcnRCeSwgc29ydGVkSW5kZXgsIHJlc3QgYXMgdGFpbCwgZmlyc3QgYXMgdGFrZSwgdGFwLCB0ZW1wbGF0ZSwgdGVtcGxhdGVTZXR0aW5ncywgdGhyb3R0bGUsIHRpbWVzLCB0b0FycmF5LCB0b1BhdGgkMSBhcyB0b1BhdGgsIHVuemlwIGFzIHRyYW5zcG9zZSwgX3VuZXNjYXBlIGFzIHVuZXNjYXBlLCB1bmlvbiwgdW5pcSwgdW5pcSBhcyB1bmlxdWUsIHVuaXF1ZUlkLCB1bnppcCwgdmFsdWVzLCB3aGVyZSwgd2l0aG91dCwgd3JhcCwgemlwIH07Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPXVuZGVyc2NvcmUtZXNtLmpzLm1hcAo=]]></data>
	</file>
	<file>
	  <filename>/js/dev/underscore-esm.js.map</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5kZXJzY29yZS1lc20uanMiLCJzb3VyY2VzIjpbIm1vZHVsZXMvX3NldHVwLmpzIiwibW9kdWxlcy9yZXN0QXJndW1lbnRzLmpzIiwibW9kdWxlcy9pc09iamVjdC5qcyIsIm1vZHVsZXMvaXNOdWxsLmpzIiwibW9kdWxlcy9pc1VuZGVmaW5lZC5qcyIsIm1vZHVsZXMvaXNCb29sZWFuLmpzIiwibW9kdWxlcy9pc0VsZW1lbnQuanMiLCJtb2R1bGVzL190YWdUZXN0ZXIuanMiLCJtb2R1bGVzL2lzU3RyaW5nLmpzIiwibW9kdWxlcy9pc051bWJlci5qcyIsIm1vZHVsZXMvaXNEYXRlLmpzIiwibW9kdWxlcy9pc1JlZ0V4cC5qcyIsIm1vZHVsZXMvaXNFcnJvci5qcyIsIm1vZHVsZXMvaXNTeW1ib2wuanMiLCJtb2R1bGVzL2lzQXJyYXlCdWZmZXIuanMiLCJtb2R1bGVzL2lzRnVuY3Rpb24uanMiLCJtb2R1bGVzL19oYXNPYmplY3RUYWcuanMiLCJtb2R1bGVzL19zdHJpbmdUYWdCdWcuanMiLCJtb2R1bGVzL2lzRGF0YVZpZXcuanMiLCJtb2R1bGVzL2lzQXJyYXkuanMiLCJtb2R1bGVzL19oYXMuanMiLCJtb2R1bGVzL2lzQXJndW1lbnRzLmpzIiwibW9kdWxlcy9pc0Zpbml0ZS5qcyIsIm1vZHVsZXMvaXNOYU4uanMiLCJtb2R1bGVzL2NvbnN0YW50LmpzIiwibW9kdWxlcy9fY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2suanMiLCJtb2R1bGVzL19zaGFsbG93UHJvcGVydHkuanMiLCJtb2R1bGVzL19nZXRCeXRlTGVuZ3RoLmpzIiwibW9kdWxlcy9faXNCdWZmZXJMaWtlLmpzIiwibW9kdWxlcy9pc1R5cGVkQXJyYXkuanMiLCJtb2R1bGVzL19nZXRMZW5ndGguanMiLCJtb2R1bGVzL19jb2xsZWN0Tm9uRW51bVByb3BzLmpzIiwibW9kdWxlcy9rZXlzLmpzIiwibW9kdWxlcy9pc0VtcHR5LmpzIiwibW9kdWxlcy9pc01hdGNoLmpzIiwibW9kdWxlcy91bmRlcnNjb3JlLmpzIiwibW9kdWxlcy9fdG9CdWZmZXJWaWV3LmpzIiwibW9kdWxlcy9pc0VxdWFsLmpzIiwibW9kdWxlcy9hbGxLZXlzLmpzIiwibW9kdWxlcy9fbWV0aG9kRmluZ2VycHJpbnQuanMiLCJtb2R1bGVzL2lzTWFwLmpzIiwibW9kdWxlcy9pc1dlYWtNYXAuanMiLCJtb2R1bGVzL2lzU2V0LmpzIiwibW9kdWxlcy9pc1dlYWtTZXQuanMiLCJtb2R1bGVzL3ZhbHVlcy5qcyIsIm1vZHVsZXMvcGFpcnMuanMiLCJtb2R1bGVzL2ludmVydC5qcyIsIm1vZHVsZXMvZnVuY3Rpb25zLmpzIiwibW9kdWxlcy9fY3JlYXRlQXNzaWduZXIuanMiLCJtb2R1bGVzL2V4dGVuZC5qcyIsIm1vZHVsZXMvZXh0ZW5kT3duLmpzIiwibW9kdWxlcy9kZWZhdWx0cy5qcyIsIm1vZHVsZXMvX2Jhc2VDcmVhdGUuanMiLCJtb2R1bGVzL2NyZWF0ZS5qcyIsIm1vZHVsZXMvY2xvbmUuanMiLCJtb2R1bGVzL3RhcC5qcyIsIm1vZHVsZXMvdG9QYXRoLmpzIiwibW9kdWxlcy9fdG9QYXRoLmpzIiwibW9kdWxlcy9fZGVlcEdldC5qcyIsIm1vZHVsZXMvZ2V0LmpzIiwibW9kdWxlcy9oYXMuanMiLCJtb2R1bGVzL2lkZW50aXR5LmpzIiwibW9kdWxlcy9tYXRjaGVyLmpzIiwibW9kdWxlcy9wcm9wZXJ0eS5qcyIsIm1vZHVsZXMvX29wdGltaXplQ2IuanMiLCJtb2R1bGVzL19iYXNlSXRlcmF0ZWUuanMiLCJtb2R1bGVzL2l0ZXJhdGVlLmpzIiwibW9kdWxlcy9fY2IuanMiLCJtb2R1bGVzL21hcE9iamVjdC5qcyIsIm1vZHVsZXMvbm9vcC5qcyIsIm1vZHVsZXMvcHJvcGVydHlPZi5qcyIsIm1vZHVsZXMvdGltZXMuanMiLCJtb2R1bGVzL3JhbmRvbS5qcyIsIm1vZHVsZXMvbm93LmpzIiwibW9kdWxlcy9fY3JlYXRlRXNjYXBlci5qcyIsIm1vZHVsZXMvX2VzY2FwZU1hcC5qcyIsIm1vZHVsZXMvZXNjYXBlLmpzIiwibW9kdWxlcy9fdW5lc2NhcGVNYXAuanMiLCJtb2R1bGVzL3VuZXNjYXBlLmpzIiwibW9kdWxlcy90ZW1wbGF0ZVNldHRpbmdzLmpzIiwibW9kdWxlcy90ZW1wbGF0ZS5qcyIsIm1vZHVsZXMvcmVzdWx0LmpzIiwibW9kdWxlcy91bmlxdWVJZC5qcyIsIm1vZHVsZXMvY2hhaW4uanMiLCJtb2R1bGVzL19leGVjdXRlQm91bmQuanMiLCJtb2R1bGVzL3BhcnRpYWwuanMiLCJtb2R1bGVzL2JpbmQuanMiLCJtb2R1bGVzL19pc0FycmF5TGlrZS5qcyIsIm1vZHVsZXMvX2ZsYXR0ZW4uanMiLCJtb2R1bGVzL2JpbmRBbGwuanMiLCJtb2R1bGVzL21lbW9pemUuanMiLCJtb2R1bGVzL2RlbGF5LmpzIiwibW9kdWxlcy9kZWZlci5qcyIsIm1vZHVsZXMvdGhyb3R0bGUuanMiLCJtb2R1bGVzL2RlYm91bmNlLmpzIiwibW9kdWxlcy93cmFwLmpzIiwibW9kdWxlcy9uZWdhdGUuanMiLCJtb2R1bGVzL2NvbXBvc2UuanMiLCJtb2R1bGVzL2FmdGVyLmpzIiwibW9kdWxlcy9iZWZvcmUuanMiLCJtb2R1bGVzL29uY2UuanMiLCJtb2R1bGVzL2ZpbmRLZXkuanMiLCJtb2R1bGVzL19jcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlci5qcyIsIm1vZHVsZXMvZmluZEluZGV4LmpzIiwibW9kdWxlcy9maW5kTGFzdEluZGV4LmpzIiwibW9kdWxlcy9zb3J0ZWRJbmRleC5qcyIsIm1vZHVsZXMvX2NyZWF0ZUluZGV4RmluZGVyLmpzIiwibW9kdWxlcy9pbmRleE9mLmpzIiwibW9kdWxlcy9sYXN0SW5kZXhPZi5qcyIsIm1vZHVsZXMvZmluZC5qcyIsIm1vZHVsZXMvZmluZFdoZXJlLmpzIiwibW9kdWxlcy9lYWNoLmpzIiwibW9kdWxlcy9tYXAuanMiLCJtb2R1bGVzL19jcmVhdGVSZWR1Y2UuanMiLCJtb2R1bGVzL3JlZHVjZS5qcyIsIm1vZHVsZXMvcmVkdWNlUmlnaHQuanMiLCJtb2R1bGVzL2ZpbHRlci5qcyIsIm1vZHVsZXMvcmVqZWN0LmpzIiwibW9kdWxlcy9ldmVyeS5qcyIsIm1vZHVsZXMvc29tZS5qcyIsIm1vZHVsZXMvY29udGFpbnMuanMiLCJtb2R1bGVzL2ludm9rZS5qcyIsIm1vZHVsZXMvcGx1Y2suanMiLCJtb2R1bGVzL3doZXJlLmpzIiwibW9kdWxlcy9tYXguanMiLCJtb2R1bGVzL21pbi5qcyIsIm1vZHVsZXMvdG9BcnJheS5qcyIsIm1vZHVsZXMvc2FtcGxlLmpzIiwibW9kdWxlcy9zaHVmZmxlLmpzIiwibW9kdWxlcy9zb3J0QnkuanMiLCJtb2R1bGVzL19ncm91cC5qcyIsIm1vZHVsZXMvZ3JvdXBCeS5qcyIsIm1vZHVsZXMvaW5kZXhCeS5qcyIsIm1vZHVsZXMvY291bnRCeS5qcyIsIm1vZHVsZXMvcGFydGl0aW9uLmpzIiwibW9kdWxlcy9zaXplLmpzIiwibW9kdWxlcy9fa2V5SW5PYmouanMiLCJtb2R1bGVzL3BpY2suanMiLCJtb2R1bGVzL29taXQuanMiLCJtb2R1bGVzL2luaXRpYWwuanMiLCJtb2R1bGVzL2ZpcnN0LmpzIiwibW9kdWxlcy9yZXN0LmpzIiwibW9kdWxlcy9sYXN0LmpzIiwibW9kdWxlcy9jb21wYWN0LmpzIiwibW9kdWxlcy9mbGF0dGVuLmpzIiwibW9kdWxlcy9kaWZmZXJlbmNlLmpzIiwibW9kdWxlcy93aXRob3V0LmpzIiwibW9kdWxlcy91bmlxLmpzIiwibW9kdWxlcy91bmlvbi5qcyIsIm1vZHVsZXMvaW50ZXJzZWN0aW9uLmpzIiwibW9kdWxlcy91bnppcC5qcyIsIm1vZHVsZXMvemlwLmpzIiwibW9kdWxlcy9vYmplY3QuanMiLCJtb2R1bGVzL3JhbmdlLmpzIiwibW9kdWxlcy9jaHVuay5qcyIsIm1vZHVsZXMvX2NoYWluUmVzdWx0LmpzIiwibW9kdWxlcy9taXhpbi5qcyIsIm1vZHVsZXMvdW5kZXJzY29yZS1hcnJheS1tZXRob2RzLmpzIiwibW9kdWxlcy9pbmRleC5qcyIsIm1vZHVsZXMvaW5kZXgtZGVmYXVsdC5qcyIsIm1vZHVsZXMvaW5kZXgtYWxsLmpzIl0sInNvdXJjZXNDb250ZW50IjpudWxsLCJuYW1lcyI6WyJpc0Z1bmN0aW9uIiwiaGFzIiwiaXNGaW5pdGUiLCJpc05hTiIsImlzRGF0YVZpZXciLCJpc0FyZ3VtZW50cyIsIl8iLCJpc1R5cGVkQXJyYXkiLCJ0b1BhdGgiLCJfaGFzIiwiZmxhdHRlbiIsIl9mbGF0dGVuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ1UsSUFBQyxPQUFPLEdBQUcsU0FBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUk7QUFDeEUsV0FBVyxPQUFPLE1BQU0sSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLElBQUksTUFBTSxDQUFDO0FBQzNFLFVBQVUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFO0FBQ25DLFVBQVUsRUFBRSxDQUFDO0FBQ2I7QUFDQTtBQUNPLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7QUFDOUQsSUFBSSxXQUFXLEdBQUcsT0FBTyxNQUFNLEtBQUssV0FBVyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ2pGO0FBQ0E7QUFDTyxJQUFJLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSTtBQUNqQyxJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSztBQUM1QixJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUTtBQUNoQyxJQUFJLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO0FBQzdDO0FBQ0E7QUFDTyxJQUFJLG1CQUFtQixHQUFHLE9BQU8sV0FBVyxLQUFLLFdBQVc7QUFDbkUsSUFBSSxnQkFBZ0IsR0FBRyxPQUFPLFFBQVEsS0FBSyxXQUFXLENBQUM7QUFDdkQ7QUFDQTtBQUNBO0FBQ08sSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU87QUFDeEMsSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUk7QUFDNUIsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU07QUFDaEMsSUFBSSxZQUFZLEdBQUcsbUJBQW1CLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQztBQUM3RDtBQUNBO0FBQ08sSUFBSSxNQUFNLEdBQUcsS0FBSztBQUN6QixJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUM7QUFDekI7QUFDQTtBQUNPLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDcEUsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsVUFBVTtBQUN2RSxFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDOUQ7QUFDQTtBQUNPLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUM7O0FDMUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2UsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUN4RCxFQUFFLFVBQVUsR0FBRyxVQUFVLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO0FBQ2xFLEVBQUUsT0FBTyxXQUFXO0FBQ3BCLElBQUksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDM0QsUUFBUSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUM1QixRQUFRLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDbEIsSUFBSSxPQUFPLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDcEMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsQ0FBQztBQUNsRCxLQUFLO0FBQ0wsSUFBSSxRQUFRLFVBQVU7QUFDdEIsTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNDLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekQsTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdkUsS0FBSztBQUNMLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyQyxJQUFJLEtBQUssS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQ2pELE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyQyxLQUFLO0FBQ0wsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVCLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsQyxHQUFHLENBQUM7QUFDSjs7QUMxQkE7QUFDZSxTQUFTLFFBQVEsQ0FBQyxHQUFHLEVBQUU7QUFDdEMsRUFBRSxJQUFJLElBQUksR0FBRyxPQUFPLEdBQUcsQ0FBQztBQUN4QixFQUFFLE9BQU8sSUFBSSxLQUFLLFVBQVUsS0FBSyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3RDs7QUNKQTtBQUNlLFNBQVMsTUFBTSxDQUFDLEdBQUcsRUFBRTtBQUNwQyxFQUFFLE9BQU8sR0FBRyxLQUFLLElBQUksQ0FBQztBQUN0Qjs7QUNIQTtBQUNlLFNBQVMsV0FBVyxDQUFDLEdBQUcsRUFBRTtBQUN6QyxFQUFFLE9BQU8sR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3hCOztBQ0RBO0FBQ2UsU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFO0FBQ3ZDLEVBQUUsT0FBTyxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxLQUFLLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxrQkFBa0IsQ0FBQztBQUNwRjs7QUNMQTtBQUNlLFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRTtBQUN2QyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDOztBQ0RBO0FBQ2UsU0FBUyxTQUFTLENBQUMsSUFBSSxFQUFFO0FBQ3hDLEVBQUUsSUFBSSxHQUFHLEdBQUcsVUFBVSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7QUFDcEMsRUFBRSxPQUFPLFNBQVMsR0FBRyxFQUFFO0FBQ3ZCLElBQUksT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQztBQUN0QyxHQUFHLENBQUM7QUFDSjs7QUNOQSxlQUFlLFNBQVMsQ0FBQyxRQUFRLENBQUM7O0FDQWxDLGVBQWUsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7QUNBbEMsYUFBZSxTQUFTLENBQUMsTUFBTSxDQUFDOztBQ0FoQyxlQUFlLFNBQVMsQ0FBQyxRQUFRLENBQUM7O0FDQWxDLGNBQWUsU0FBUyxDQUFDLE9BQU8sQ0FBQzs7QUNBakMsZUFBZSxTQUFTLENBQUMsUUFBUSxDQUFDOztBQ0FsQyxvQkFBZSxTQUFTLENBQUMsYUFBYSxDQUFDOztBQ0N2QyxJQUFJLFVBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztBQUN6RCxJQUFJLE9BQU8sR0FBRyxJQUFJLFVBQVUsSUFBSSxPQUFPLFNBQVMsSUFBSSxRQUFRLElBQUksT0FBTyxRQUFRLElBQUksVUFBVSxFQUFFO0FBQy9GLEVBQUUsVUFBVSxHQUFHLFNBQVMsR0FBRyxFQUFFO0FBQzdCLElBQUksT0FBTyxPQUFPLEdBQUcsSUFBSSxVQUFVLElBQUksS0FBSyxDQUFDO0FBQzdDLEdBQUcsQ0FBQztBQUNKLENBQUM7QUFDRDtBQUNBLG1CQUFlLFVBQVU7O0FDWnpCLG1CQUFlLFNBQVMsQ0FBQyxRQUFRLENBQUM7O0FDQ2xDO0FBQ0E7QUFDQTtBQUNPLElBQUksZUFBZTtBQUMxQixNQUFNLGdCQUFnQixJQUFJLFlBQVksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLEtBQUs7QUFDTCxJQUFJLE1BQU0sSUFBSSxPQUFPLEdBQUcsS0FBSyxXQUFXLElBQUksWUFBWSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7O0FDSmxFLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN2QztBQUNBO0FBQ0E7QUFDQSxTQUFTLGNBQWMsQ0FBQyxHQUFHLEVBQUU7QUFDN0IsRUFBRSxPQUFPLEdBQUcsSUFBSSxJQUFJLElBQUlBLFlBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3RSxDQUFDO0FBQ0Q7QUFDQSxtQkFBZSxDQUFDLGVBQWUsR0FBRyxjQUFjLEdBQUcsVUFBVTs7QUNWN0Q7QUFDQTtBQUNBLGNBQWUsYUFBYSxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUM7O0FDSGxEO0FBQ2UsU0FBU0MsS0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDdEMsRUFBRSxPQUFPLEdBQUcsSUFBSSxJQUFJLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEQ7O0FDRkEsSUFBSSxXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLENBQUMsV0FBVztBQUNaLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUMvQixJQUFJLFdBQVcsR0FBRyxTQUFTLEdBQUcsRUFBRTtBQUNoQyxNQUFNLE9BQU9BLEtBQUcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDaEMsS0FBSyxDQUFDO0FBQ04sR0FBRztBQUNILENBQUMsRUFBRSxFQUFFO0FBQ0w7QUFDQSxvQkFBZSxXQUFXOztBQ1oxQjtBQUNlLFNBQVNDLFVBQVEsQ0FBQyxHQUFHLEVBQUU7QUFDdEMsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRTs7QUNIQTtBQUNlLFNBQVNDLE9BQUssQ0FBQyxHQUFHLEVBQUU7QUFDbkMsRUFBRSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEM7O0FDTkE7QUFDZSxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUU7QUFDeEMsRUFBRSxPQUFPLFdBQVc7QUFDcEIsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHLENBQUM7QUFDSjs7QUNIQTtBQUNlLFNBQVMsdUJBQXVCLENBQUMsZUFBZSxFQUFFO0FBQ2pFLEVBQUUsT0FBTyxTQUFTLFVBQVUsRUFBRTtBQUM5QixJQUFJLElBQUksWUFBWSxHQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuRCxJQUFJLE9BQU8sT0FBTyxZQUFZLElBQUksUUFBUSxJQUFJLFlBQVksSUFBSSxDQUFDLElBQUksWUFBWSxJQUFJLGVBQWUsQ0FBQztBQUNuRyxHQUFHO0FBQ0g7O0FDUkE7QUFDZSxTQUFTLGVBQWUsQ0FBQyxHQUFHLEVBQUU7QUFDN0MsRUFBRSxPQUFPLFNBQVMsR0FBRyxFQUFFO0FBQ3ZCLElBQUksT0FBTyxHQUFHLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQyxHQUFHLENBQUM7QUFDSjs7QUNIQTtBQUNBLG9CQUFlLGVBQWUsQ0FBQyxZQUFZLENBQUM7O0FDQTVDO0FBQ0E7QUFDQSxtQkFBZSx1QkFBdUIsQ0FBQyxhQUFhLENBQUM7O0FDQXJEO0FBQ0EsSUFBSSxpQkFBaUIsR0FBRyw2RUFBNkUsQ0FBQztBQUN0RyxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUU7QUFDM0I7QUFDQTtBQUNBLEVBQUUsT0FBTyxZQUFZLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUNDLFlBQVUsQ0FBQyxHQUFHLENBQUM7QUFDOUQsZ0JBQWdCLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hGLENBQUM7QUFDRDtBQUNBLHFCQUFlLG1CQUFtQixHQUFHLFlBQVksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDOztBQ1puRTtBQUNBLGdCQUFlLGVBQWUsQ0FBQyxRQUFRLENBQUM7O0FDQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxXQUFXLENBQUMsSUFBSSxFQUFFO0FBQzNCLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BFLEVBQUUsT0FBTztBQUNULElBQUksUUFBUSxFQUFFLFNBQVMsR0FBRyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUU7QUFDMUQsSUFBSSxJQUFJLEVBQUUsU0FBUyxHQUFHLEVBQUU7QUFDeEIsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLE1BQU0sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLEtBQUs7QUFDTCxHQUFHLENBQUM7QUFDSixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDZSxTQUFTLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFDdkQsRUFBRSxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNCLEVBQUUsSUFBSSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDO0FBQzdDLEVBQUUsSUFBSSxXQUFXLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQztBQUNwQyxFQUFFLElBQUksS0FBSyxHQUFHLENBQUNKLFlBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxXQUFXLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQztBQUM3RTtBQUNBO0FBQ0EsRUFBRSxJQUFJLElBQUksR0FBRyxhQUFhLENBQUM7QUFDM0IsRUFBRSxJQUFJQyxLQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsRUFBRSxPQUFPLFVBQVUsRUFBRSxFQUFFO0FBQ3ZCLElBQUksSUFBSSxHQUFHLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzFDLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzFFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0wsR0FBRztBQUNIOztBQ2xDQTtBQUNBO0FBQ2UsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ2xDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUNoQyxFQUFFLElBQUksVUFBVSxFQUFFLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLEVBQUUsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsSUFBSUEsS0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsRUFBRSxJQUFJLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDakQsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkOztBQ1RBO0FBQ0E7QUFDZSxTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDckMsRUFBRSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDL0I7QUFDQTtBQUNBLEVBQUUsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLEVBQUUsSUFBSSxPQUFPLE1BQU0sSUFBSSxRQUFRO0FBQy9CLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSUksYUFBVyxDQUFDLEdBQUcsQ0FBQztBQUNyRCxHQUFHLEVBQUUsT0FBTyxNQUFNLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLEVBQUUsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDOztBQ2ZBO0FBQ2UsU0FBUyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUMvQyxFQUFFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNqRCxFQUFFLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3JDLEVBQUUsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNCLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuQyxJQUFJLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUMvRCxHQUFHO0FBQ0gsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkOztBQ1ZBO0FBQ0E7QUFDQTtBQUNlLFNBQVNDLEdBQUMsQ0FBQyxHQUFHLEVBQUU7QUFDL0IsRUFBRSxJQUFJLEdBQUcsWUFBWUEsR0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ25DLEVBQUUsSUFBSSxFQUFFLElBQUksWUFBWUEsR0FBQyxDQUFDLEVBQUUsT0FBTyxJQUFJQSxHQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUMsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUN0QixDQUFDO0FBQ0Q7QUFDQUEsR0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDcEI7QUFDQTtBQUNBQSxHQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxXQUFXO0FBQy9CLEVBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQztBQUNGO0FBQ0E7QUFDQTtBQUNBQSxHQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBR0EsR0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUdBLEdBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBQzdEO0FBQ0FBLEdBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFdBQVc7QUFDbEMsRUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0IsQ0FBQzs7QUN0QkQ7QUFDQTtBQUNlLFNBQVMsWUFBWSxDQUFDLFlBQVksRUFBRTtBQUNuRCxFQUFFLE9BQU8sSUFBSSxVQUFVO0FBQ3ZCLElBQUksWUFBWSxDQUFDLE1BQU0sSUFBSSxZQUFZO0FBQ3ZDLElBQUksWUFBWSxDQUFDLFVBQVUsSUFBSSxDQUFDO0FBQ2hDLElBQUksYUFBYSxDQUFDLFlBQVksQ0FBQztBQUMvQixHQUFHLENBQUM7QUFDSjs7QUNDQTtBQUNBLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDO0FBQ3RDO0FBQ0E7QUFDQSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7QUFDbEM7QUFDQTtBQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQ7QUFDQSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzNDO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsRUFBRSxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQztBQUN0QixFQUFFLElBQUksSUFBSSxLQUFLLFVBQVUsSUFBSSxJQUFJLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJLFFBQVEsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNyRixFQUFFLE9BQU8sTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFDRDtBQUNBO0FBQ0EsU0FBUyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQ3RDO0FBQ0EsRUFBRSxJQUFJLENBQUMsWUFBWUEsR0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ3JDLEVBQUUsSUFBSSxDQUFDLFlBQVlBLEdBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUNyQztBQUNBLEVBQUUsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxFQUFFLElBQUksU0FBUyxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDbkQ7QUFDQSxFQUFFLElBQUksZUFBZSxJQUFJLFNBQVMsSUFBSSxpQkFBaUIsSUFBSUYsWUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzFFLElBQUksSUFBSSxDQUFDQSxZQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDckMsSUFBSSxTQUFTLEdBQUcsV0FBVyxDQUFDO0FBQzVCLEdBQUc7QUFDSCxFQUFFLFFBQVEsU0FBUztBQUNuQjtBQUNBLElBQUksS0FBSyxpQkFBaUIsQ0FBQztBQUMzQjtBQUNBLElBQUksS0FBSyxpQkFBaUI7QUFDMUI7QUFDQTtBQUNBLE1BQU0sT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0IsSUFBSSxLQUFLLGlCQUFpQjtBQUMxQjtBQUNBO0FBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdEM7QUFDQSxNQUFNLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3JELElBQUksS0FBSyxlQUFlLENBQUM7QUFDekIsSUFBSSxLQUFLLGtCQUFrQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxNQUFNLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdkIsSUFBSSxLQUFLLGlCQUFpQjtBQUMxQixNQUFNLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekUsSUFBSSxLQUFLLHNCQUFzQixDQUFDO0FBQ2hDLElBQUksS0FBSyxXQUFXO0FBQ3BCO0FBQ0EsTUFBTSxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0RSxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksU0FBUyxHQUFHLFNBQVMsS0FBSyxnQkFBZ0IsQ0FBQztBQUNqRCxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUlHLGNBQVksQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNyQyxNQUFNLElBQUksVUFBVSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QyxNQUFNLElBQUksVUFBVSxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUN4RCxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLElBQUksQ0FBQztBQUM5RSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDdkIsR0FBRztBQUNILEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNsQixJQUFJLElBQUksT0FBTyxDQUFDLElBQUksUUFBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJLFFBQVEsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNuRTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUM7QUFDckQsSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLElBQUksRUFBRVAsWUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWSxLQUFLO0FBQ3hFLDZCQUE2QkEsWUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWSxLQUFLLENBQUM7QUFDekUsNEJBQTRCLGFBQWEsSUFBSSxDQUFDLElBQUksYUFBYSxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQ3ZFLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDbkIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUN4QixFQUFFLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0FBQ3hCLEVBQUUsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM3QixFQUFFLE9BQU8sTUFBTSxFQUFFLEVBQUU7QUFDbkI7QUFDQTtBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxRCxHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakI7QUFDQTtBQUNBLEVBQUUsSUFBSSxTQUFTLEVBQUU7QUFDakI7QUFDQSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3RCLElBQUksSUFBSSxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEtBQUssQ0FBQztBQUMxQztBQUNBLElBQUksT0FBTyxNQUFNLEVBQUUsRUFBRTtBQUNyQixNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDbEUsS0FBSztBQUNMLEdBQUcsTUFBTTtBQUNUO0FBQ0EsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQzdCLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUI7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDaEQsSUFBSSxPQUFPLE1BQU0sRUFBRSxFQUFFO0FBQ3JCO0FBQ0EsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFCLE1BQU0sSUFBSSxFQUFFQyxLQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzdFLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNmLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFDRDtBQUNBO0FBQ2UsU0FBUyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0QyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsQjs7QUNySUE7QUFDZSxTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDckMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQ2hDLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLEVBQUUsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QztBQUNBLEVBQUUsSUFBSSxVQUFVLEVBQUUsbUJBQW1CLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pELEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsZUFBZSxDQUFDLE9BQU8sRUFBRTtBQUN6QyxFQUFFLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsQyxFQUFFLE9BQU8sU0FBUyxHQUFHLEVBQUU7QUFDdkIsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDbEM7QUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QixJQUFJLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ3RDLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNyQyxNQUFNLElBQUksQ0FBQ0QsWUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ3JELEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sT0FBTyxLQUFLLGNBQWMsSUFBSSxDQUFDQSxZQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDdkUsR0FBRyxDQUFDO0FBQ0osQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLElBQUksV0FBVyxHQUFHLFNBQVM7QUFDM0IsSUFBSSxPQUFPLEdBQUcsS0FBSztBQUNuQixJQUFJLFVBQVUsR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7QUFDcEMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNPLElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQztBQUMvRCxJQUFJLGNBQWMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUMvQyxJQUFJLFVBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQzs7QUNoQ2pFLFlBQWUsTUFBTSxHQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDOztBQ0F0RSxnQkFBZSxNQUFNLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7O0FDQTlFLFlBQWUsTUFBTSxHQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDOztBQ0Z0RSxnQkFBZSxTQUFTLENBQUMsU0FBUyxDQUFDOztBQ0FuQztBQUNlLFNBQVMsTUFBTSxDQUFDLEdBQUcsRUFBRTtBQUNwQyxFQUFFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixFQUFFLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDNUIsRUFBRSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0IsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25DLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixHQUFHO0FBQ0gsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUNoQjs7QUNUQTtBQUNBO0FBQ2UsU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFO0FBQ25DLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLEVBQUUsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUM1QixFQUFFLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1QixFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekMsR0FBRztBQUNILEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZjs7QUNWQTtBQUNlLFNBQVMsTUFBTSxDQUFDLEdBQUcsRUFBRTtBQUNwQyxFQUFFLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUQsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLEdBQUc7QUFDSCxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQ2hCOztBQ1JBO0FBQ2UsU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFO0FBQ3ZDLEVBQUUsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLEVBQUUsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUU7QUFDdkIsSUFBSSxJQUFJQSxZQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QyxHQUFHO0FBQ0gsRUFBRSxPQUFPLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0Qjs7QUNUQTtBQUNlLFNBQVMsY0FBYyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDM0QsRUFBRSxPQUFPLFNBQVMsR0FBRyxFQUFFO0FBQ3ZCLElBQUksSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUNsQyxJQUFJLElBQUksUUFBUSxFQUFFLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEMsSUFBSSxJQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUM5QyxJQUFJLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDakQsTUFBTSxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBQ25DLFVBQVUsSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDakMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMxQixNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBUSxJQUFJLENBQUMsUUFBUSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLE9BQU87QUFDUCxLQUFLO0FBQ0wsSUFBSSxPQUFPLEdBQUcsQ0FBQztBQUNmLEdBQUcsQ0FBQztBQUNKOztBQ2RBO0FBQ0EsYUFBZSxjQUFjLENBQUMsT0FBTyxDQUFDOztBQ0R0QztBQUNBO0FBQ0E7QUFDQSxnQkFBZSxjQUFjLENBQUMsSUFBSSxDQUFDOztBQ0huQztBQUNBLGVBQWUsY0FBYyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7O0FDRDVDO0FBQ0EsU0FBUyxJQUFJLEdBQUc7QUFDaEIsRUFBRSxPQUFPLFVBQVUsRUFBRSxDQUFDO0FBQ3RCLENBQUM7QUFDRDtBQUNBO0FBQ2UsU0FBUyxVQUFVLENBQUMsU0FBUyxFQUFFO0FBQzlDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUN0QyxFQUFFLElBQUksWUFBWSxFQUFFLE9BQU8sWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ25ELEVBQUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFDcEIsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUM3QixFQUFFLElBQUksTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDO0FBQ3hCLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDeEIsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUNoQjs7QUNkQTtBQUNBO0FBQ0E7QUFDZSxTQUFTLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFO0FBQ2pELEVBQUUsSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3JDLEVBQUUsSUFBSSxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN0QyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQ2hCOztBQ05BO0FBQ2UsU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFO0FBQ25DLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNqQyxFQUFFLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3REOztBQ1JBO0FBQ0E7QUFDQTtBQUNlLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUU7QUFDOUMsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiOztBQ0hBO0FBQ0E7QUFDZSxTQUFTUSxRQUFNLENBQUMsSUFBSSxFQUFFO0FBQ3JDLEVBQUUsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUNERixHQUFDLENBQUMsTUFBTSxHQUFHRSxRQUFNOztBQ0xqQjtBQUNBO0FBQ2UsU0FBUyxNQUFNLENBQUMsSUFBSSxFQUFFO0FBQ3JDLEVBQUUsT0FBT0YsR0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4Qjs7QUNQQTtBQUNlLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFDM0MsRUFBRSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzNCLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuQyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDO0FBQ25DLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixHQUFHO0FBQ0gsRUFBRSxPQUFPLE1BQU0sR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDL0I7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDZSxTQUFTLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRTtBQUN4RCxFQUFFLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDNUMsRUFBRSxPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQ25EOztBQ1JBO0FBQ0E7QUFDQTtBQUNlLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFDdkMsRUFBRSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMzQixFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkMsSUFBSSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsSUFBSSxJQUFJLENBQUNHLEtBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDdEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLEdBQUc7QUFDSCxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNsQjs7QUNmQTtBQUNlLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRTtBQUN4QyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2Y7O0FDQUE7QUFDQTtBQUNlLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRTtBQUN2QyxFQUFFLEtBQUssR0FBRyxTQUFTLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9CLEVBQUUsT0FBTyxTQUFTLEdBQUcsRUFBRTtBQUN2QixJQUFJLE9BQU8sT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQixHQUFHLENBQUM7QUFDSjs7QUNQQTtBQUNBO0FBQ2UsU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLEVBQUUsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QixFQUFFLE9BQU8sU0FBUyxHQUFHLEVBQUU7QUFDdkIsSUFBSSxPQUFPLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUIsR0FBRyxDQUFDO0FBQ0o7O0FDVkE7QUFDQTtBQUNBO0FBQ2UsU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7QUFDNUQsRUFBRSxJQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQztBQUN0QyxFQUFFLFFBQVEsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsUUFBUTtBQUN6QyxJQUFJLEtBQUssQ0FBQyxFQUFFLE9BQU8sU0FBUyxLQUFLLEVBQUU7QUFDbkMsTUFBTSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLEtBQUssQ0FBQztBQUNOO0FBQ0EsSUFBSSxLQUFLLENBQUMsRUFBRSxPQUFPLFNBQVMsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7QUFDdEQsTUFBTSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDMUQsS0FBSyxDQUFDO0FBQ04sSUFBSSxLQUFLLENBQUMsRUFBRSxPQUFPLFNBQVMsV0FBVyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO0FBQ25FLE1BQU0sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN2RSxLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0gsRUFBRSxPQUFPLFdBQVc7QUFDcEIsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzFDLEdBQUcsQ0FBQztBQUNKOztBQ1pBO0FBQ0E7QUFDQTtBQUNlLFNBQVMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFO0FBQy9ELEVBQUUsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLE9BQU8sUUFBUSxDQUFDO0FBQ3JDLEVBQUUsSUFBSVQsWUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDckUsRUFBRSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoRSxFQUFFLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pCOztBQ2JBO0FBQ0E7QUFDQTtBQUNlLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUU7QUFDakQsRUFBRSxPQUFPLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFDRE0sR0FBQyxDQUFDLFFBQVEsR0FBRyxRQUFROztBQ0xyQjtBQUNBO0FBQ2UsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUU7QUFDckQsRUFBRSxJQUFJQSxHQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxPQUFPQSxHQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNqRSxFQUFFLE9BQU8sWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDaEQ7O0FDTkE7QUFDQTtBQUNlLFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0FBQzFELEVBQUUsUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3ZCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNO0FBQzNCLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNuQixFQUFFLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDL0MsSUFBSSxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDckUsR0FBRztBQUNILEVBQUUsT0FBTyxPQUFPLENBQUM7QUFDakI7O0FDZkE7QUFDZSxTQUFTLElBQUksRUFBRTs7QUNFOUI7QUFDZSxTQUFTLFVBQVUsQ0FBQyxHQUFHLEVBQUU7QUFDeEMsRUFBRSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDL0IsRUFBRSxPQUFPLFNBQVMsSUFBSSxFQUFFO0FBQ3hCLElBQUksT0FBTyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFCLEdBQUcsQ0FBQztBQUNKOztBQ1BBO0FBQ2UsU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7QUFDcEQsRUFBRSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxFQUFFLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QyxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRCxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2Y7O0FDUkE7QUFDZSxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ3pDLEVBQUUsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO0FBQ25CLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNaLEdBQUc7QUFDSCxFQUFFLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRDs7QUNQQTtBQUNBLFVBQWUsSUFBSSxDQUFDLEdBQUcsSUFBSSxXQUFXO0FBQ3RDLEVBQUUsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzlCLENBQUM7O0FDREQ7QUFDQTtBQUNlLFNBQVMsYUFBYSxDQUFDLEdBQUcsRUFBRTtBQUMzQyxFQUFFLElBQUksT0FBTyxHQUFHLFNBQVMsS0FBSyxFQUFFO0FBQ2hDLElBQUksT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEIsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLElBQUksTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCxFQUFFLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsQyxFQUFFLElBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUMsRUFBRSxPQUFPLFNBQVMsTUFBTSxFQUFFO0FBQzFCLElBQUksTUFBTSxHQUFHLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFDL0MsSUFBSSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JGLEdBQUcsQ0FBQztBQUNKOztBQ2hCQTtBQUNBLGdCQUFlO0FBQ2YsRUFBRSxHQUFHLEVBQUUsT0FBTztBQUNkLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRSxHQUFHLEVBQUUsUUFBUTtBQUNmLEVBQUUsR0FBRyxFQUFFLFFBQVE7QUFDZixFQUFFLEdBQUcsRUFBRSxRQUFRO0FBQ2YsQ0FBQzs7QUNMRDtBQUNBLGNBQWUsYUFBYSxDQUFDLFNBQVMsQ0FBQzs7QUNEdkM7QUFDQSxrQkFBZSxNQUFNLENBQUMsU0FBUyxDQUFDOztBQ0RoQztBQUNBLGdCQUFlLGFBQWEsQ0FBQyxXQUFXLENBQUM7O0FDRnpDO0FBQ0E7QUFDQSx1QkFBZUEsR0FBQyxDQUFDLGdCQUFnQixHQUFHO0FBQ3BDLEVBQUUsUUFBUSxFQUFFLGlCQUFpQjtBQUM3QixFQUFFLFdBQVcsRUFBRSxrQkFBa0I7QUFDakMsRUFBRSxNQUFNLEVBQUUsa0JBQWtCO0FBQzVCLENBQUM7O0FDSkQ7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxHQUFHO0FBQ2QsRUFBRSxHQUFHLEVBQUUsR0FBRztBQUNWLEVBQUUsSUFBSSxFQUFFLElBQUk7QUFDWixFQUFFLElBQUksRUFBRSxHQUFHO0FBQ1gsRUFBRSxJQUFJLEVBQUUsR0FBRztBQUNYLEVBQUUsUUFBUSxFQUFFLE9BQU87QUFDbkIsRUFBRSxRQUFRLEVBQUUsT0FBTztBQUNuQixDQUFDLENBQUM7QUFDRjtBQUNBLElBQUksWUFBWSxHQUFHLDJCQUEyQixDQUFDO0FBQy9DO0FBQ0EsU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFO0FBQzNCLEVBQUUsT0FBTyxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2UsU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUU7QUFDOUQsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLFdBQVcsRUFBRSxRQUFRLEdBQUcsV0FBVyxDQUFDO0FBQ3ZELEVBQUUsUUFBUSxHQUFHLFFBQVEsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFQSxHQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUN4RDtBQUNBO0FBQ0EsRUFBRSxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksT0FBTyxFQUFFLE1BQU07QUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksT0FBTyxFQUFFLE1BQU07QUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksT0FBTyxFQUFFLE1BQU07QUFDekMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0I7QUFDQTtBQUNBLEVBQUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsU0FBUyxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO0FBQy9FLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDMUUsSUFBSSxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDbEM7QUFDQSxJQUFJLElBQUksTUFBTSxFQUFFO0FBQ2hCLE1BQU0sTUFBTSxJQUFJLGFBQWEsR0FBRyxNQUFNLEdBQUcsZ0NBQWdDLENBQUM7QUFDMUUsS0FBSyxNQUFNLElBQUksV0FBVyxFQUFFO0FBQzVCLE1BQU0sTUFBTSxJQUFJLGFBQWEsR0FBRyxXQUFXLEdBQUcsc0JBQXNCLENBQUM7QUFDckUsS0FBSyxNQUFNLElBQUksUUFBUSxFQUFFO0FBQ3pCLE1BQU0sTUFBTSxJQUFJLE1BQU0sR0FBRyxRQUFRLEdBQUcsVUFBVSxDQUFDO0FBQy9DLEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsTUFBTSxJQUFJLE1BQU0sQ0FBQztBQUNuQjtBQUNBLEVBQUUsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztBQUNuQyxFQUFFLElBQUksUUFBUSxFQUFFO0FBQ2hCO0FBQ0EsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLElBQUksS0FBSztBQUN2RCxNQUFNLHFDQUFxQyxHQUFHLFFBQVE7QUFDdEQsS0FBSyxDQUFDO0FBQ04sR0FBRyxNQUFNO0FBQ1Q7QUFDQSxJQUFJLE1BQU0sR0FBRyxrQkFBa0IsR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ2pELElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNyQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sR0FBRywwQ0FBMEM7QUFDckQsSUFBSSxtREFBbUQ7QUFDdkQsSUFBSSxNQUFNLEdBQUcsZUFBZSxDQUFDO0FBQzdCO0FBQ0EsRUFBRSxJQUFJLE1BQU0sQ0FBQztBQUNiLEVBQUUsSUFBSTtBQUNOLElBQUksTUFBTSxHQUFHLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2QsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN0QixJQUFJLE1BQU0sQ0FBQyxDQUFDO0FBQ1osR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLFFBQVEsR0FBRyxTQUFTLElBQUksRUFBRTtBQUNoQyxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFQSxHQUFDLENBQUMsQ0FBQztBQUN0QyxHQUFHLENBQUM7QUFDSjtBQUNBO0FBQ0EsRUFBRSxRQUFRLENBQUMsTUFBTSxHQUFHLFdBQVcsR0FBRyxRQUFRLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkU7QUFDQSxFQUFFLE9BQU8sUUFBUSxDQUFDO0FBQ2xCOztBQ2pHQTtBQUNBO0FBQ0E7QUFDZSxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtBQUNwRCxFQUFFLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEIsRUFBRSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzNCLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNmLElBQUksT0FBT04sWUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ2hFLEdBQUc7QUFDSCxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbkMsSUFBSSxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRCxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQztBQUN0QixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakIsS0FBSztBQUNMLElBQUksR0FBRyxHQUFHQSxZQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkQsR0FBRztBQUNILEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYjs7QUNyQkE7QUFDQTtBQUNBLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNILFNBQVMsUUFBUSxDQUFDLE1BQU0sRUFBRTtBQUN6QyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUM1QixFQUFFLE9BQU8sTUFBTSxHQUFHLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ25DOztBQ0pBO0FBQ2UsU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFO0FBQ25DLEVBQUUsSUFBSSxRQUFRLEdBQUdNLEdBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLEVBQUUsT0FBTyxRQUFRLENBQUM7QUFDbEI7O0FDSkE7QUFDQTtBQUNBO0FBQ2UsU0FBUyxZQUFZLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRTtBQUMzRixFQUFFLElBQUksRUFBRSxjQUFjLFlBQVksU0FBUyxDQUFDLEVBQUUsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNyRixFQUFFLElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUMsRUFBRSxJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1QyxFQUFFLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQ3RDLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZDs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNHLElBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQyxTQUFTLElBQUksRUFBRSxTQUFTLEVBQUU7QUFDdEQsRUFBRSxJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ3hDLEVBQUUsSUFBSSxLQUFLLEdBQUcsV0FBVztBQUN6QixJQUFJLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUNoRCxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3QixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDckMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFdBQVcsR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEYsS0FBSztBQUNMLElBQUksT0FBTyxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekUsSUFBSSxPQUFPLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdkQsR0FBRyxDQUFDO0FBQ0osRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNIO0FBQ0EsT0FBTyxDQUFDLFdBQVcsR0FBR0EsR0FBQzs7QUNsQnZCO0FBQ0E7QUFDQSxXQUFlLGFBQWEsQ0FBQyxTQUFTLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFO0FBQzNELEVBQUUsSUFBSSxDQUFDTixZQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0FBQ2xGLEVBQUUsSUFBSSxLQUFLLEdBQUcsYUFBYSxDQUFDLFNBQVMsUUFBUSxFQUFFO0FBQy9DLElBQUksT0FBTyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUMzRSxHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7O0FDVEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBZSx1QkFBdUIsQ0FBQyxTQUFTLENBQUM7O0FDRmpEO0FBQ2UsU0FBU1UsU0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTtBQUM5RCxFQUFFLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO0FBQ3hCLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzdCLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQztBQUNyQixHQUFHLE1BQU0sSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO0FBQ3pCLElBQUksT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLEdBQUc7QUFDSCxFQUFFLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDMUIsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDOUQsSUFBSSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsSUFBSSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUlMLGFBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ3RFO0FBQ0EsTUFBTSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDckIsUUFBUUssU0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsRCxRQUFRLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzVCLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3RDLFFBQVEsT0FBTyxDQUFDLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELE9BQU87QUFDUCxLQUFLLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUN4QixNQUFNLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUM1QixLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDaEI7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBLGNBQWUsYUFBYSxDQUFDLFNBQVMsR0FBRyxFQUFFLElBQUksRUFBRTtBQUNqRCxFQUFFLElBQUksR0FBR0EsU0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDckMsRUFBRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzFCLEVBQUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztBQUMxRSxFQUFFLE9BQU8sS0FBSyxFQUFFLEVBQUU7QUFDbEIsSUFBSSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUIsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuQyxHQUFHO0FBQ0gsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQzs7QUNkRjtBQUNlLFNBQVMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDOUMsRUFBRSxJQUFJLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRTtBQUM5QixJQUFJLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDOUIsSUFBSSxJQUFJLE9BQU8sR0FBRyxFQUFFLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3RFLElBQUksSUFBSSxDQUFDVCxLQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMzRSxJQUFJLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzFCLEdBQUcsQ0FBQztBQUNKLEVBQUUsT0FBTyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDckIsRUFBRSxPQUFPLE9BQU8sQ0FBQztBQUNqQjs7QUNWQTtBQUNBO0FBQ0EsWUFBZSxhQUFhLENBQUMsU0FBUyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtBQUN4RCxFQUFFLE9BQU8sVUFBVSxDQUFDLFdBQVc7QUFDL0IsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNYLENBQUMsQ0FBQzs7QUNKRjtBQUNBO0FBQ0EsWUFBZSxPQUFPLENBQUMsS0FBSyxFQUFFSyxHQUFDLEVBQUUsQ0FBQyxDQUFDOztBQ0puQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2UsU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdEQsRUFBRSxJQUFJLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQztBQUNyQyxFQUFFLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNuQixFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUM3QjtBQUNBLEVBQUUsSUFBSSxLQUFLLEdBQUcsV0FBVztBQUN6QixJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsT0FBTyxLQUFLLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDckQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ25CLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN4QyxHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUsSUFBSSxTQUFTLEdBQUcsV0FBVztBQUM3QixJQUFJLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLEtBQUssRUFBRSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ2hFLElBQUksSUFBSSxTQUFTLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQztBQUM3QyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDbkIsSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDO0FBQ3JCLElBQUksSUFBSSxTQUFTLElBQUksQ0FBQyxJQUFJLFNBQVMsR0FBRyxJQUFJLEVBQUU7QUFDNUMsTUFBTSxJQUFJLE9BQU8sRUFBRTtBQUNuQixRQUFRLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5QixRQUFRLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDdkIsT0FBTztBQUNQLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQztBQUN0QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6QyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUMsS0FBSyxNQUFNLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7QUFDdkQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM3QyxLQUFLO0FBQ0wsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUsU0FBUyxDQUFDLE1BQU0sR0FBRyxXQUFXO0FBQ2hDLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzFCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNqQixJQUFJLE9BQU8sR0FBRyxPQUFPLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNwQyxHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUsT0FBTyxTQUFTLENBQUM7QUFDbkI7O0FDM0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ2UsU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7QUFDeEQsRUFBRSxJQUFJLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUM7QUFDL0M7QUFDQSxFQUFFLElBQUksS0FBSyxHQUFHLFdBQVc7QUFDekIsSUFBSSxJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUM7QUFDbEMsSUFBSSxJQUFJLElBQUksR0FBRyxNQUFNLEVBQUU7QUFDdkIsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDakQsS0FBSyxNQUFNO0FBQ1gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekQ7QUFDQSxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDMUMsS0FBSztBQUNMLEdBQUcsQ0FBQztBQUNKO0FBQ0EsRUFBRSxJQUFJLFNBQVMsR0FBRyxhQUFhLENBQUMsU0FBUyxLQUFLLEVBQUU7QUFDaEQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ25CLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFJLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDbEIsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QyxNQUFNLElBQUksU0FBUyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4RCxLQUFLO0FBQ0wsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHLENBQUMsQ0FBQztBQUNMO0FBQ0EsRUFBRSxTQUFTLENBQUMsTUFBTSxHQUFHLFdBQVc7QUFDaEMsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUIsSUFBSSxPQUFPLEdBQUcsSUFBSSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDcEMsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLE9BQU8sU0FBUyxDQUFDO0FBQ25COztBQ3JDQTtBQUNBO0FBQ0E7QUFDZSxTQUFTLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQzVDLEVBQUUsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hDOztBQ1BBO0FBQ2UsU0FBUyxNQUFNLENBQUMsU0FBUyxFQUFFO0FBQzFDLEVBQUUsT0FBTyxXQUFXO0FBQ3BCLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzdDLEdBQUcsQ0FBQztBQUNKOztBQ0xBO0FBQ0E7QUFDZSxTQUFTLE9BQU8sR0FBRztBQUNsQyxFQUFFLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQztBQUN2QixFQUFFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLEVBQUUsT0FBTyxXQUFXO0FBQ3BCLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLElBQUksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDcEQsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNwRCxJQUFJLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLEdBQUcsQ0FBQztBQUNKOztBQ1hBO0FBQ2UsU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRTtBQUMzQyxFQUFFLE9BQU8sV0FBVztBQUNwQixJQUFJLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ3JCLE1BQU0sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN6QyxLQUFLO0FBQ0wsR0FBRyxDQUFDO0FBQ0o7O0FDUEE7QUFDQTtBQUNlLFNBQVMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUU7QUFDNUMsRUFBRSxJQUFJLElBQUksQ0FBQztBQUNYLEVBQUUsT0FBTyxXQUFXO0FBQ3BCLElBQUksSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDckIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDekMsS0FBSztBQUNMLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUM7QUFDaEMsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHLENBQUM7QUFDSjs7QUNSQTtBQUNBO0FBQ0EsV0FBZSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQzs7QUNGakM7QUFDZSxTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxFQUFFLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3JDLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQztBQUM3QixFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUQsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25CLElBQUksSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNsRCxHQUFHO0FBQ0g7O0FDUkE7QUFDZSxTQUFTLDBCQUEwQixDQUFDLEdBQUcsRUFBRTtBQUN4RCxFQUFFLE9BQU8sU0FBUyxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRTtBQUM3QyxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZDLElBQUksSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xDLElBQUksSUFBSSxLQUFLLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN6QyxJQUFJLE9BQU8sS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLEdBQUcsTUFBTSxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUU7QUFDdkQsTUFBTSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQzlELEtBQUs7QUFDTCxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDZCxHQUFHLENBQUM7QUFDSjs7QUNaQTtBQUNBLGdCQUFlLDBCQUEwQixDQUFDLENBQUMsQ0FBQzs7QUNENUM7QUFDQSxvQkFBZSwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUNBN0M7QUFDQTtBQUNlLFNBQVMsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtBQUNuRSxFQUFFLFFBQVEsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0QyxFQUFFLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLEVBQUUsT0FBTyxHQUFHLEdBQUcsSUFBSSxFQUFFO0FBQ3JCLElBQUksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0MsSUFBSSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ3JFLEdBQUc7QUFDSCxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2I7O0FDVkE7QUFDZSxTQUFTLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFO0FBQzNFLEVBQUUsT0FBTyxTQUFTLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0FBQ3BDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekMsSUFBSSxJQUFJLE9BQU8sR0FBRyxJQUFJLFFBQVEsRUFBRTtBQUNoQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtBQUNuQixRQUFRLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkQsT0FBTyxNQUFNO0FBQ2IsUUFBUSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDekUsT0FBTztBQUNQLEtBQUssTUFBTSxJQUFJLFdBQVcsSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFO0FBQzdDLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDckMsTUFBTSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVDLEtBQUs7QUFDTCxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtBQUN2QixNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFSCxPQUFLLENBQUMsQ0FBQztBQUMvRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLEtBQUs7QUFDTCxJQUFJLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUU7QUFDL0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDMUMsS0FBSztBQUNMLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNkLEdBQUcsQ0FBQztBQUNKOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWUsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUM7O0FDTDNEO0FBQ0E7QUFDQSxrQkFBZSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUM7O0FDRG5EO0FBQ2UsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUU7QUFDdEQsRUFBRSxJQUFJLFNBQVMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxHQUFHLE9BQU8sQ0FBQztBQUN6RCxFQUFFLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9DLEVBQUUsSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BEOztBQ05BO0FBQ0E7QUFDZSxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQzlDLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ25DOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ2UsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7QUFDckQsRUFBRSxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMzQyxFQUFFLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQztBQUNoQixFQUFFLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3hCLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdEQsTUFBTSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQixLQUFLO0FBQ0wsR0FBRyxNQUFNO0FBQ1QsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUIsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN4RCxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiOztBQ2xCQTtBQUNlLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0FBQ3BELEVBQUUsUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzVDLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsRUFBRSxNQUFNO0FBQ3BDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QixFQUFFLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDL0MsSUFBSSxJQUFJLFVBQVUsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoRSxHQUFHO0FBQ0gsRUFBRSxPQUFPLE9BQU8sQ0FBQztBQUNqQjs7QUNYQTtBQUNlLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRTtBQUMxQztBQUNBO0FBQ0EsRUFBRSxJQUFJLE9BQU8sR0FBRyxTQUFTLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUN2RCxJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDOUMsUUFBUSxNQUFNLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU07QUFDdEMsUUFBUSxLQUFLLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN6QyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDbEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDL0MsTUFBTSxLQUFLLElBQUksR0FBRyxDQUFDO0FBQ25CLEtBQUs7QUFDTCxJQUFJLE9BQU8sS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLEdBQUcsTUFBTSxFQUFFLEtBQUssSUFBSSxHQUFHLEVBQUU7QUFDdkQsTUFBTSxJQUFJLFVBQVUsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNwRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUQsS0FBSztBQUNMLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLE9BQU8sU0FBUyxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDaEQsSUFBSSxJQUFJLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUN4QyxJQUFJLE9BQU8sT0FBTyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekUsR0FBRyxDQUFDO0FBQ0o7O0FDekJBO0FBQ0E7QUFDQSxhQUFlLFlBQVksQ0FBQyxDQUFDLENBQUM7O0FDRjlCO0FBQ0Esa0JBQWUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQ0EvQjtBQUNlLFNBQVMsTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQ3hELEVBQUUsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ25CLEVBQUUsU0FBUyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7QUFDekMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0QsR0FBRyxDQUFDLENBQUM7QUFDTCxFQUFFLE9BQU8sT0FBTyxDQUFDO0FBQ2pCOztBQ1BBO0FBQ2UsU0FBUyxNQUFNLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUU7QUFDeEQsRUFBRSxPQUFPLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3JEOztBQ0hBO0FBQ2UsU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUU7QUFDdkQsRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNyQyxFQUFFLElBQUksS0FBSyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDNUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sQ0FBQztBQUNyQyxFQUFFLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDL0MsSUFBSSxJQUFJLFVBQVUsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNuRSxHQUFHO0FBQ0gsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkOztBQ1ZBO0FBQ2UsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUU7QUFDdEQsRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNyQyxFQUFFLElBQUksS0FBSyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDNUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sQ0FBQztBQUNyQyxFQUFFLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7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LEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFO0FBQ3JHLElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxRCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsTUFBTSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxHQUFHLE1BQU0sRUFBRTtBQUMzQyxRQUFRLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDdkIsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHLE1BQU07QUFDVCxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3JDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3ZDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFDLE1BQU0sSUFBSSxRQUFRLEdBQUcsWUFBWSxLQUFLLFFBQVEsS0FBSyxDQUFDLFFBQVEsSUFBSSxNQUFNLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUN2RixRQUFRLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDbkIsUUFBUSxZQUFZLEdBQUcsUUFBUSxDQUFDO0FBQ2hDLE9BQU87QUFDUCxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSCxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQ2hCOztBQ3ZCQTtBQUNlLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0FBQ3BELEVBQUUsSUFB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RUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDMUMsS0FBSyxDQUFDO0FBQ04sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUNoQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDMUIsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2pCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMxQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUMzQyxLQUFLO0FBQ0wsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUNwQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNmOztBQ3BCQTtBQUNlLFNBQVMsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUU7QUFDbkQsRUFBRSxPQUFPLFNBQVMsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7QUFDMUMsSUFBSSxJQUFJLE1BQU0sR0FBRyxTQUFTLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzNDLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckMsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsS0FBSyxFQUFFLEtBQUssRUFBRTtBQUNyQyxNQUFNLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLE1BQU0sUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFL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QUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hGOztBQ0xBO0FBQ0E7QUFDZSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUMvQyxFQUFFLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqRixFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsRUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxQzs7QUNOQTtBQUNBO0FBQ0E7QUFDZSxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUM5QyxFQUFFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZEOztBQ0xBO0FBQ0E7QUFDZSxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUM5QyxFQUFFLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqRixFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUUs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]]></data>
	</file>
	<file>
	  <filename>/js/dev/underscore-umd-min.js.map</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vZHVsZXMvX3NldHVwLmpzIiwibW9kdWxlcy9yZXN0QXJndW1lbnRzLmpzIiwibW9kdWxlcy9pc09iamVjdC5qcyIsIm1vZHVsZXMvaXNVbmRlZmluZWQuanMiLCJtb2R1bGVzL2lzQm9vbGVhbi5qcyIsIm1vZHVsZXMvX3RhZ1Rlc3Rlci5qcyIsIm1vZHVsZXMvaXNTdHJpbmcuanMiLCJtb2R1bGVzL2lzTnVtYmVyLmpzIiwibW9kdWxlcy9pc0RhdGUuanMiLCJtb2R1bGVzL2lzUmVnRXhwLmpzIiwibW9kdWxlcy9pc0Vycm9yLmpzIiwibW9kdWxlcy9pc1N5bWJvbC5qcyIsIm1vZHVsZXMvaXNBcnJheUJ1ZmZlci5qcyIsIm1vZHVsZXMvaXNGdW5jdGlvbi5qcyIsIm1vZHVsZXMvX2hhc09iamVjdFRhZy5qcyIsIm1vZHVsZXMvX3N0cmluZ1RhZ0J1Zy5qcyIsIm1vZHVsZXMvaXNEYXRhVmlldy5qcyIsIm1vZHVsZXMvaXNBcnJheS5qcyIsIm1vZHVsZXMvX2hhcy5qcyIsIm1vZHVsZXMvaXNBcmd1bWVudHMuanMiLCJtb2R1bGVzL2lzTmFOLmpzIiwibW9kdWxlcy9jb25zdGFudC5qcyIsIm1vZHVsZXMvX2NyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrLmpzIiwibW9kdWxlcy9fc2hhbGxvd1Byb3BlcnR5LmpzIiwibW9kdWxlcy9fZ2V0Qnl0ZUxlbmd0aC5qcyIsIm1vZHVsZXMvX2lzQnVmZmVyTGlrZS5qcyIsIm1vZHVsZXMvaXNUeXBlZEFycmF5LmpzIiwibW9kdWxlcy9fZ2V0TGVuZ3RoLmpzIiwibW9kdWxlcy9fY29sbGVjdE5vbkVudW1Qcm9wcy5qcyIsIm1vZHVsZXMva2V5cy5qcyIsIm1vZHVsZXMvaXNNYXRjaC5qcyIsIm1vZHVsZXMvdW5kZXJzY29yZS5qcyIsIm1vZHVsZXMvX3RvQnVmZmVyVmlldy5qcyIsIm1vZHVsZXMvaXNFcXVhbC5qcyIsIm1vZHVsZXMvYWxsS2V5cy5qcyIsIm1vZHVsZXMvX21ldGhvZEZpbmdlcnByaW50LmpzIiwibW9kdWxlcy9pc01hcC5qcyIsIm1vZHVsZXMvaXNXZWFrTWFwLmpzIiwibW9kdWxlcy9pc1NldC5qcyIsIm1vZHVsZXMvaXNXZWFrU2V0LmpzIiwibW9kdWxlcy92YWx1ZXMuanMiLCJtb2R1bGVzL2ludmVydC5qcyIsIm1vZHVsZXMvZnVuY3Rpb25zLmpzIiwibW9kdWxlcy9fY3JlYXRlQXNzaWduZXIuanMiLCJtb2R1bGVzL2V4dGVuZC5qcyIsIm1vZHVsZXMvZXh0ZW5kT3duLmpzIiwibW9kdWxlcy9kZWZhdWx0cy5qcyIsIm1vZHVsZXMvX2Jhc2VDcmVhdGUuanMiLCJtb2R1bGVzL3RvUGF0aC5qcyIsIm1vZHVsZXMvX3RvUGF0aC5qcyIsIm1vZHVsZXMvX2RlZXBHZXQuanMiLCJtb2R1bGVzL2dldC5qcyIsIm1vZHVsZXMvaWRlbnRpdHkuanMiLCJtb2R1bGVzL21hdGNoZXIuanMiLCJtb2R1bGVzL3Byb3BlcnR5LmpzIiwibW9kdWxlcy9fb3B0aW1pemVDYi5qcyIsIm1vZHVsZXMvX2Jhc2VJdGVyYXRlZS5qcyIsIm1vZHVsZXMvaXRlcmF0ZWUuanMiLCJtb2R1bGVzL19jYi5qcyIsIm1vZHVsZXMvbm9vcC5qcyIsIm1vZHVsZXMvcmFuZG9tLmpzIiwibW9kdWxlcy9ub3cuanMiLCJtb2R1bGVzL19jcmVhdGVFc2NhcGVyLmpzIiwibW9kdWxlcy9fZXNjYXBlTWFwLmpzIiwibW9kdWxlcy9lc2NhcGUuanMiLCJtb2R1bGVzL3VuZXNjYXBlLmpzIiwibW9kdWxlcy9fdW5lc2NhcGVNYXAuanMiLCJtb2R1bGVzL3RlbXBsYXRlU2V0dGluZ3MuanMiLCJtb2R1bGVzL3RlbXBsYXRlLmpzIiwibW9kdWxlcy91bmlxdWVJZC5qcyIsIm1vZHVsZXMvX2V4ZWN1dGVCb3VuZC5qcyIsIm1vZHVsZXMvcGFydGlhbC5qcyIsIm1vZHVsZXMvYmluZC5qcyIsIm1vZHVsZXMvX2lzQXJyYXlMaWtlLmpzIiwibW9kdWxlcy9fZmxhdHRlbi5qcyIsIm1vZHVsZXMvYmluZEFsbC5qcyIsIm1vZHVsZXMvZGVsYXkuanMiLCJtb2R1bGVzL2RlZmVyLmpzIiwibW9kdWxlcy9uZWdhdGUuanMiLCJtb2R1bGVzL2JlZm9yZS5qcyIsIm1vZHVsZXMvb25jZS5qcyIsIm1vZHVsZXMvZmluZEtleS5qcyIsIm1vZHVsZXMvX2NyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyLmpzIiwibW9kdWxlcy9maW5kSW5kZXguanMiLCJtb2R1bGVzL2ZpbmRMYXN0SW5kZXguanMiLCJtb2R1bGVzL3NvcnRlZEluZGV4LmpzIiwibW9kdWxlcy9fY3JlYXRlSW5kZXhGaW5kZXIuanMiLCJtb2R1bGVzL2luZGV4T2YuanMiLCJtb2R1bGVzL2xhc3RJbmRleE9mLmpzIiwibW9kdWxlcy9maW5kLmpzIiwibW9kdWxlcy9lYWNoLmpzIiwibW9kdWxlcy9tYXAuanMiLCJtb2R1bGVzL19jcmVhdGVSZWR1Y2UuanMiLCJtb2R1bGVzL3JlZHVjZS5qcyIsIm1vZHVsZXMvcmVkdWNlUmlnaHQuanMiLCJtb2R1bGVzL2ZpbHRlci5qcyIsIm1vZHVsZXMvZXZlcnkuanMiLCJtb2R1bGVzL3NvbWUuanMiLCJtb2R1bGVzL2NvbnRhaW5zLmpzIiwibW9kdWxlcy9pbnZva2UuanMiLCJtb2R1bGVzL3BsdWNrLmpzIiwibW9kdWxlcy9tYXguanMiLCJtb2R1bGVzL3RvQXJyYXkuanMiLCJtb2R1bGVzL3NhbXBsZS5qcyIsIm1vZHVsZXMvX2dyb3VwLmpzIiwibW9kdWxlcy9ncm91cEJ5LmpzIiwibW9kdWxlcy9pbmRleEJ5LmpzIiwibW9kdWxlcy9jb3VudEJ5LmpzIiwibW9kdWxlcy9wYXJ0aXRpb24uanMiLCJtb2R1bGVzL19rZXlJbk9iai5qcyIsIm1vZHVsZXMvcGljay5qcyIsIm1vZHVsZXMvb21pdC5qcyIsIm1vZHVsZXMvaW5pdGlhbC5qcyIsIm1vZHVsZXMvZmlyc3QuanMiLCJtb2R1bGVzL3Jlc3QuanMiLCJtb2R1bGVzL2RpZmZlcmVuY2UuanMiLCJtb2R1bGVzL3dpdGhvdXQuanMiLCJtb2R1bGVzL3VuaXEuanMiLCJtb2R1bGVzL3VuaW9uLmpzIiwibW9kdWxlcy91bnppcC5qcyIsIm1vZHVsZXMvemlwLmpzIiwibW9kdWxlcy9fY2hhaW5SZXN1bHQuanMiLCJtb2R1bGVzL21peGluLmpzIiwibW9kdWxlcy91bmRlcnNjb3JlLWFycmF5LW1ldGhvZHMuanMiLCJtb2R1bGVzL2luZGV4LWRlZmF1bHQuanMiLCJtb2R1bGVzL2lzTnVsbC5qcyIsIm1vZHVsZXMvaXNFbGVtZW50LmpzIiwibW9kdWxlcy9pc0Zpbml0ZS5qcyIsIm1vZHVsZXMvaXNFbXB0eS5qcyIsIm1vZHVsZXMvcGFpcnMuanMiLCJtb2R1bGVzL2NyZWF0ZS5qcyIsIm1vZHVsZXMvY2xvbmUuanMiLCJtb2R1bGVzL3RhcC5qcyIsIm1vZHVsZXMvaGFzLmpzIiwibW9kdWxlcy9tYXBPYmplY3QuanMiLCJtb2R1bGVzL3Byb3BlcnR5T2YuanMiLCJtb2R1bGVzL3RpbWVzLmpzIiwibW9kdWxlcy9yZXN1bHQuanMiLCJtb2R1bGVzL2NoYWluLmpzIiwibW9kdWxlcy9tZW1vaXplLmpzIiwibW9kdWxlcy90aHJvdHRsZS5qcyIsIm1vZHVsZXMvZGVib3VuY2UuanMiLCJtb2R1bGVzL3dyYXAuanMiLCJtb2R1bGVzL2NvbXBvc2UuanMiLCJtb2R1bGVzL2FmdGVyLmpzIiwibW9kdWxlcy9maW5kV2hlcmUuanMiLCJtb2R1bGVzL3JlamVjdC5qcyIsIm1vZHVsZXMvd2hlcmUuanMiLCJtb2R1bGVzL21pbi5qcyIsIm1vZHVsZXMvc2h1ZmZsZS5qcyIsIm1vZHVsZXMvc29ydEJ5LmpzIiwibW9kdWxlcy9zaXplLmpzIiwibW9kdWxlcy9sYXN0LmpzIiwibW9kdWxlcy9jb21wYWN0LmpzIiwibW9kdWxlcy9mbGF0dGVuLmpzIiwibW9kdWxlcy9pbnRlcnNlY3Rpb24uanMiLCJtb2R1bGVzL29iamVjdC5qcyIsIm1vZHVsZXMvcmFuZ2UuanMiLCJtb2R1bGVzL2NodW5rLmpzIl0sIm5hbWVzIjpbIlZFUlNJT04iLCJyb290Iiwic2VsZiIsImdsb2JhbCIsIkZ1bmN0aW9uIiwiQXJyYXlQcm90byIsIkFycmF5IiwicHJvdG90eXBlIiwiT2JqUHJvdG8iLCJPYmplY3QiLCJTeW1ib2xQcm90byIsIlN5bWJvbCIsInB1c2giLCJzbGljZSIsInRvU3RyaW5nIiwiaGFzT3duUHJvcGVydHkiLCJzdXBwb3J0c0FycmF5QnVmZmVyIiwiQXJyYXlCdWZmZXIiLCJzdXBwb3J0c0RhdGFWaWV3IiwiRGF0YVZpZXciLCJuYXRpdmVJc0FycmF5IiwiaXNBcnJheSIsIm5hdGl2ZUtleXMiLCJrZXlzIiwibmF0aXZlQ3JlYXRlIiwiY3JlYXRlIiwibmF0aXZlSXNWaWV3IiwiaXNWaWV3IiwiX2lzTmFOIiwiaXNOYU4iLCJfaXNGaW5pdGUiLCJpc0Zpbml0ZSIsImhhc0VudW1CdWciLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIm5vbkVudW1lcmFibGVQcm9wcyIsIk1BWF9BUlJBWV9JTkRFWCIsIk1hdGgiLCJwb3ciLCJyZXN0QXJndW1lbnRzIiwiZnVuYyIsInN0YXJ0SW5kZXgiLCJsZW5ndGgiLCJtYXgiLCJhcmd1bWVudHMiLCJyZXN0IiwiaW5kZXgiLCJjYWxsIiwidGhpcyIsImFyZ3MiLCJhcHBseSIsImlzT2JqZWN0Iiwib2JqIiwidHlwZSIsImlzVW5kZWZpbmVkIiwiaXNCb29sZWFuIiwidGFnVGVzdGVyIiwibmFtZSIsInRhZyIsImlzU3RyaW5nIiwiaXNOdW1iZXIiLCJpc0RhdGUiLCJpc1JlZ0V4cCIsImlzRXJyb3IiLCJpc1N5bWJvbCIsImlzQXJyYXlCdWZmZXIiLCJpc0Z1bmN0aW9uIiwibm9kZWxpc3QiLCJkb2N1bWVudCIsImNoaWxkTm9kZXMiLCJJbnQ4QXJyYXkiLCJpc0Z1bmN0aW9uJDEiLCJoYXNPYmplY3RUYWciLCJoYXNTdHJpbmdUYWdCdWciLCJpc0lFMTEiLCJNYXAiLCJpc0RhdGFWaWV3IiwiaXNEYXRhVmlldyQxIiwiZ2V0SW50OCIsImJ1ZmZlciIsImhhcyIsImtleSIsImlzQXJndW1lbnRzIiwiaXNBcmd1bWVudHMkMSIsImNvbnN0YW50IiwidmFsdWUiLCJjcmVhdGVTaXplUHJvcGVydHlDaGVjayIsImdldFNpemVQcm9wZXJ0eSIsImNvbGxlY3Rpb24iLCJzaXplUHJvcGVydHkiLCJzaGFsbG93UHJvcGVydHkiLCJnZXRCeXRlTGVuZ3RoIiwiaXNCdWZmZXJMaWtlIiwidHlwZWRBcnJheVBhdHRlcm4iLCJpc1R5cGVkQXJyYXkkMSIsInRlc3QiLCJnZXRMZW5ndGgiLCJjb2xsZWN0Tm9uRW51bVByb3BzIiwiaGFzaCIsImwiLCJpIiwiY29udGFpbnMiLCJlbXVsYXRlZFNldCIsIm5vbkVudW1JZHgiLCJjb25zdHJ1Y3RvciIsInByb3RvIiwicHJvcCIsImlzTWF0Y2giLCJvYmplY3QiLCJhdHRycyIsIl9rZXlzIiwiXyIsIl93cmFwcGVkIiwidG9CdWZmZXJWaWV3IiwiYnVmZmVyU291cmNlIiwiVWludDhBcnJheSIsImJ5dGVPZmZzZXQiLCJ2YWx1ZU9mIiwidG9KU09OIiwiU3RyaW5nIiwidGFnRGF0YVZpZXciLCJlcSIsImEiLCJiIiwiYVN0YWNrIiwiYlN0YWNrIiwiZGVlcEVxIiwiY2xhc3NOYW1lIiwiYXJlQXJyYXlzIiwiaXNUeXBlZEFycmF5IiwiYUN0b3IiLCJiQ3RvciIsInBvcCIsImFsbEtleXMiLCJpZTExZmluZ2VycHJpbnQiLCJtZXRob2RzIiwid2Vha01hcE1ldGhvZHMiLCJmb3JFYWNoTmFtZSIsImhhc05hbWUiLCJjb21tb25Jbml0IiwibWFwVGFpbCIsIm1hcE1ldGhvZHMiLCJjb25jYXQiLCJzZXRNZXRob2RzIiwiaXNNYXAiLCJpc1dlYWtNYXAiLCJpc1NldCIsImlzV2Vha1NldCIsInZhbHVlcyIsImludmVydCIsInJlc3VsdCIsImZ1bmN0aW9ucyIsIm5hbWVzIiwic29ydCIsImNyZWF0ZUFzc2lnbmVyIiwia2V5c0Z1bmMiLCJkZWZhdWx0cyIsInNvdXJjZSIsImV4dGVuZCIsImV4dGVuZE93biIsImJhc2VDcmVhdGUiLCJDdG9yIiwidG9QYXRoIiwicGF0aCIsImRlZXBHZXQiLCJnZXQiLCJkZWZhdWx0VmFsdWUiLCJpZGVudGl0eSIsIm1hdGNoZXIiLCJwcm9wZXJ0eSIsIm9wdGltaXplQ2IiLCJjb250ZXh0IiwiYXJnQ291bnQiLCJhY2N1bXVsYXRvciIsImJhc2VJdGVyYXRlZSIsIml0ZXJhdGVlIiwiSW5maW5pdHkiLCJjYiIsIm5vb3AiLCJyYW5kb20iLCJtaW4iLCJmbG9vciIsIm5vdyIsIkRhdGUiLCJnZXRUaW1lIiwiY3JlYXRlRXNjYXBlciIsIm1hcCIsImVzY2FwZXIiLCJtYXRjaCIsImpvaW4iLCJ0ZXN0UmVnZXhwIiwiUmVnRXhwIiwicmVwbGFjZVJlZ2V4cCIsInN0cmluZyIsInJlcGxhY2UiLCJlc2NhcGVNYXAiLCImIiwiPCIsIj4iLCJcIiIsIiciLCJgIiwiX2VzY2FwZSIsIl91bmVzY2FwZSIsInRlbXBsYXRlU2V0dGluZ3MiLCJldmFsdWF0ZSIsImludGVycG9sYXRlIiwiZXNjYXBlIiwibm9NYXRjaCIsImVzY2FwZXMiLCJcXCIsIlxyIiwiXG4iLCLigKgiLCLigKkiLCJlc2NhcGVSZWdFeHAiLCJlc2NhcGVDaGFyIiwiYmFyZUlkZW50aWZpZXIiLCJpZENvdW50ZXIiLCJleGVjdXRlQm91bmQiLCJzb3VyY2VGdW5jIiwiYm91bmRGdW5jIiwiY2FsbGluZ0NvbnRleHQiLCJwYXJ0aWFsIiwiYm91bmRBcmdzIiwicGxhY2Vob2xkZXIiLCJib3VuZCIsInBvc2l0aW9uIiwiYmluZCIsIlR5cGVFcnJvciIsImNhbGxBcmdzIiwiaXNBcnJheUxpa2UiLCJmbGF0dGVuIiwiaW5wdXQiLCJkZXB0aCIsInN0cmljdCIsIm91dHB1dCIsImlkeCIsImoiLCJsZW4iLCJiaW5kQWxsIiwiRXJyb3IiLCJkZWxheSIsIndhaXQiLCJzZXRUaW1lb3V0IiwiZGVmZXIiLCJuZWdhdGUiLCJwcmVkaWNhdGUiLCJiZWZvcmUiLCJ0aW1lcyIsIm1lbW8iLCJvbmNlIiwiZmluZEtleSIsImNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyIiwiZGlyIiwiYXJyYXkiLCJmaW5kSW5kZXgiLCJmaW5kTGFzdEluZGV4Iiwic29ydGVkSW5kZXgiLCJsb3ciLCJoaWdoIiwibWlkIiwiY3JlYXRlSW5kZXhGaW5kZXIiLCJwcmVkaWNhdGVGaW5kIiwiaXRlbSIsImluZGV4T2YiLCJsYXN0SW5kZXhPZiIsImZpbmQiLCJlYWNoIiwicmVzdWx0cyIsImN1cnJlbnRLZXkiLCJjcmVhdGVSZWR1Y2UiLCJyZWR1Y2VyIiwiaW5pdGlhbCIsInJlZHVjZSIsInJlZHVjZVJpZ2h0IiwiZmlsdGVyIiwibGlzdCIsImV2ZXJ5Iiwic29tZSIsImZyb21JbmRleCIsImd1YXJkIiwiaW52b2tlIiwiY29udGV4dFBhdGgiLCJtZXRob2QiLCJwbHVjayIsImNvbXB1dGVkIiwibGFzdENvbXB1dGVkIiwidiIsInJlU3RyU3ltYm9sIiwidG9BcnJheSIsInNhbXBsZSIsIm4iLCJsYXN0IiwicmFuZCIsInRlbXAiLCJncm91cCIsImJlaGF2aW9yIiwicGFydGl0aW9uIiwiZ3JvdXBCeSIsImluZGV4QnkiLCJjb3VudEJ5IiwicGFzcyIsImtleUluT2JqIiwicGljayIsIm9taXQiLCJmaXJzdCIsImRpZmZlcmVuY2UiLCJ3aXRob3V0Iiwib3RoZXJBcnJheXMiLCJ1bmlxIiwiaXNTb3J0ZWQiLCJzZWVuIiwidW5pb24iLCJhcnJheXMiLCJ1bnppcCIsInppcCIsImNoYWluUmVzdWx0IiwiaW5zdGFuY2UiLCJfY2hhaW4iLCJjaGFpbiIsIm1peGluIiwibm9kZVR5cGUiLCJwYXJzZUZsb2F0IiwicGFpcnMiLCJwcm9wcyIsImludGVyY2VwdG9yIiwiX2hhcyIsImFjY3VtIiwidGV4dCIsInNldHRpbmdzIiwib2xkU2V0dGluZ3MiLCJvZmZzZXQiLCJyZW5kZXIiLCJhcmd1bWVudCIsInZhcmlhYmxlIiwiZSIsInRlbXBsYXRlIiwiZGF0YSIsImZhbGxiYWNrIiwicHJlZml4IiwiaWQiLCJoYXNoZXIiLCJtZW1vaXplIiwiY2FjaGUiLCJhZGRyZXNzIiwib3B0aW9ucyIsInRpbWVvdXQiLCJwcmV2aW91cyIsImxhdGVyIiwibGVhZGluZyIsInRocm90dGxlZCIsIl9ub3ciLCJyZW1haW5pbmciLCJjbGVhclRpbWVvdXQiLCJ0cmFpbGluZyIsImNhbmNlbCIsImltbWVkaWF0ZSIsInBhc3NlZCIsImRlYm91bmNlZCIsIl9hcmdzIiwid3JhcHBlciIsInN0YXJ0IiwiY3JpdGVyaWEiLCJsZWZ0IiwicmlnaHQiLCJCb29sZWFuIiwiX2ZsYXR0ZW4iLCJhcmdzTGVuZ3RoIiwic3RvcCIsInN0ZXAiLCJjZWlsIiwicmFuZ2UiLCJjb3VudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDTyxJQUFJQSxFQUFVLFNBS1ZDLEVBQXVCLGlCQUFSQyxNQUFvQkEsS0FBS0EsT0FBU0EsTUFBUUEsTUFDeEMsaUJBQVZDLFFBQXNCQSxPQUFPQSxTQUFXQSxRQUFVQSxRQUMxREMsU0FBUyxjQUFUQSxJQUNBLEdBR0NDLEVBQWFDLE1BQU1DLFVBQVdDLEVBQVdDLE9BQU9GLFVBQ2hERyxFQUFnQyxvQkFBWEMsT0FBeUJBLE9BQU9KLFVBQVksS0FHakVLLEVBQU9QLEVBQVdPLEtBQ3pCQyxFQUFRUixFQUFXUSxNQUNuQkMsRUFBV04sRUFBU00sU0FDcEJDLEVBQWlCUCxFQUFTTyxlQUduQkMsRUFBNkMsb0JBQWhCQyxZQUNwQ0MsRUFBdUMsb0JBQWJDLFNBSW5CQyxFQUFnQmQsTUFBTWUsUUFDN0JDLEVBQWFiLE9BQU9jLEtBQ3BCQyxFQUFlZixPQUFPZ0IsT0FDdEJDLEVBQWVWLEdBQXVCQyxZQUFZVSxPQUczQ0MsRUFBU0MsTUFDaEJDLEVBQVlDLFNBR0xDLEdBQWMsQ0FBQ2xCLFNBQVUsTUFBTW1CLHFCQUFxQixZQUNwREMsRUFBcUIsQ0FBQyxVQUFXLGdCQUFpQixXQUMzRCx1QkFBd0IsaUJBQWtCLGtCQUdqQ0MsRUFBa0JDLEtBQUtDLElBQUksRUFBRyxJQUFNLEVDckNoQyxTQUFTQyxFQUFjQyxFQUFNQyxHQUUxQyxPQURBQSxFQUEyQixNQUFkQSxFQUFxQkQsRUFBS0UsT0FBUyxHQUFLRCxFQUM5QyxXQUlMLElBSEEsSUFBSUMsRUFBU0wsS0FBS00sSUFBSUMsVUFBVUYsT0FBU0QsRUFBWSxHQUNqREks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]]></data>
	</file>
	<file>
	  <filename>/js/dev/underscore-umd.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHsKICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6CiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKCd1bmRlcnNjb3JlJywgZmFjdG9yeSkgOgogIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgY3VycmVudCA9IGdsb2JhbC5fOwogICAgdmFyIGV4cG9ydHMgPSBnbG9iYWwuXyA9IGZhY3RvcnkoKTsKICAgIGV4cG9ydHMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHsgZ2xvYmFsLl8gPSBjdXJyZW50OyByZXR1cm4gZXhwb3J0czsgfTsKICB9KCkpKTsKfSh0aGlzLCAoZnVuY3Rpb24gKCkgewogIC8vICAgICBVbmRlcnNjb3JlLmpzIDEuMTMuNgogIC8vICAgICBodHRwczovL3VuZGVyc2NvcmVqcy5vcmcKICAvLyAgICAgKGMpIDIwMDktMjAyMiBKZXJlbXkgQXNoa2VuYXMsIEp1bGlhbiBHb25nZ3JpanAsIGFuZCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnMKICAvLyAgICAgVW5kZXJzY29yZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KCiAgLy8gQ3VycmVudCB2ZXJzaW9uLgogIHZhciBWRVJTSU9OID0gJzEuMTMuNic7CgogIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYAogIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmAKICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LgogIHZhciByb290ID0gKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmKSB8fAogICAgICAgICAgICAodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsKSB8fAogICAgICAgICAgICBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpIHx8CiAgICAgICAgICAgIHt9OwoKICAvLyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmllZCAoYnV0IG5vdCBnemlwcGVkKSB2ZXJzaW9uOgogIHZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLCBPYmpQcm90byA9IE9iamVjdC5wcm90b3R5cGU7CiAgdmFyIFN5bWJvbFByb3RvID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wucHJvdG90eXBlIDogbnVsbDsKCiAgLy8gQ3JlYXRlIHF1aWNrIHJlZmVyZW5jZSB2YXJpYWJsZXMgZm9yIHNwZWVkIGFjY2VzcyB0byBjb3JlIHByb3RvdHlwZXMuCiAgdmFyIHB1c2ggPSBBcnJheVByb3RvLnB1c2gsCiAgICAgIHNsaWNlID0gQXJyYXlQcm90by5zbGljZSwKICAgICAgdG9TdHJpbmcgPSBPYmpQcm90by50b1N0cmluZywKICAgICAgaGFzT3duUHJvcGVydHkgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTsKCiAgLy8gTW9kZXJuIGZlYXR1cmUgZGV0ZWN0aW9uLgogIHZhciBzdXBwb3J0c0FycmF5QnVmZmVyID0gdHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJywKICAgICAgc3VwcG9ydHNEYXRhVmlldyA9IHR5cGVvZiBEYXRhVmlldyAhPT0gJ3VuZGVmaW5lZCc7CgogIC8vIEFsbCAqKkVDTUFTY3JpcHQgNSsqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2UKICAvLyBhcmUgZGVjbGFyZWQgaGVyZS4KICB2YXIgbmF0aXZlSXNBcnJheSA9IEFycmF5LmlzQXJyYXksCiAgICAgIG5hdGl2ZUtleXMgPSBPYmplY3Qua2V5cywKICAgICAgbmF0aXZlQ3JlYXRlID0gT2JqZWN0LmNyZWF0ZSwKICAgICAgbmF0aXZlSXNWaWV3ID0gc3VwcG9ydHNBcnJheUJ1ZmZlciAmJiBBcnJheUJ1ZmZlci5pc1ZpZXc7CgogIC8vIENyZWF0ZSByZWZlcmVuY2VzIHRvIHRoZXNlIGJ1aWx0aW4gZnVuY3Rpb25zIGJlY2F1c2Ugd2Ugb3ZlcnJpZGUgdGhlbS4KICB2YXIgX2lzTmFOID0gaXNOYU4sCiAgICAgIF9pc0Zpbml0ZSA9IGlzRmluaXRlOwoKICAvLyBLZXlzIGluIElFIDwgOSB0aGF0IHdvbid0IGJlIGl0ZXJhdGVkIGJ5IGBmb3Iga2V5IGluIC4uLmAgYW5kIHRodXMgbWlzc2VkLgogIHZhciBoYXNFbnVtQnVnID0gIXt0b1N0cmluZzogbnVsbH0ucHJvcGVydHlJc0VudW1lcmFibGUoJ3RvU3RyaW5nJyk7CiAgdmFyIG5vbkVudW1lcmFibGVQcm9wcyA9IFsndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5nJywKICAgICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICdoYXNPd25Qcm9wZXJ0eScsICd0b0xvY2FsZVN0cmluZyddOwoKICAvLyBUaGUgbGFyZ2VzdCBpbnRlZ2VyIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGV4YWN0bHkuCiAgdmFyIE1BWF9BUlJBWV9JTkRFWCA9IE1hdGgucG93KDIsIDUzKSAtIDE7CgogIC8vIFNvbWUgZnVuY3Rpb25zIHRha2UgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLCBvciBhIGZldyBleHBlY3RlZAogIC8vIGFyZ3VtZW50cyBhdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGVuIGEgdmFyaWFibGUgbnVtYmVyIG9mIHZhbHVlcyB0byBvcGVyYXRlCiAgLy8gb24uIFRoaXMgaGVscGVyIGFjY3VtdWxhdGVzIGFsbCByZW1haW5pbmcgYXJndW1lbnRzIHBhc3QgdGhlIGZ1bmN0aW9u4oCZcwogIC8vIGFyZ3VtZW50IGxlbmd0aCAob3IgYW4gZXhwbGljaXQgYHN0YXJ0SW5kZXhgKSwgaW50byBhbiBhcnJheSB0aGF0IGJlY29tZXMKICAvLyB0aGUgbGFzdCBhcmd1bWVudC4gU2ltaWxhciB0byBFUzbigJlzICJyZXN0IHBhcmFtZXRlciIuCiAgZnVuY3Rpb24gcmVzdEFyZ3VtZW50cyhmdW5jLCBzdGFydEluZGV4KSB7CiAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCksCiAgICAgICAgICByZXN0ID0gQXJyYXkobGVuZ3RoKSwKICAgICAgICAgIGluZGV4ID0gMDsKICAgICAgZm9yICg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTsKICAgICAgfQogICAgICBzd2l0Y2ggKHN0YXJ0SW5kZXgpIHsKICAgICAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpcywgcmVzdCk7CiAgICAgICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3VtZW50c1swXSwgcmVzdCk7CiAgICAgICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3VtZW50c1swXSwgYXJndW1lbnRzWzFdLCByZXN0KTsKICAgICAgfQogICAgICB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTsKICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgc3RhcnRJbmRleDsgaW5kZXgrKykgewogICAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTsKICAgICAgfQogICAgICBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDsKICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7CiAgICB9OwogIH0KCiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBvYmplY3Q/CiAgZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7CiAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7CiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmopOwogIH0KCiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBlcXVhbCB0byBudWxsPwogIGZ1bmN0aW9uIGlzTnVsbChvYmopIHsKICAgIHJldHVybiBvYmogPT09IG51bGw7CiAgfQoKICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIHVuZGVmaW5lZD8KICBmdW5jdGlvbiBpc1VuZGVmaW5lZChvYmopIHsKICAgIHJldHVybiBvYmogPT09IHZvaWQgMDsKICB9CgogIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFuPwogIGZ1bmN0aW9uIGlzQm9vbGVhbihvYmopIHsKICAgIHJldHVybiBvYmogPT09IHRydWUgfHwgb2JqID09PSBmYWxzZSB8fCB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEJvb2xlYW5dJzsKICB9CgogIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD8KICBmdW5jdGlvbiBpc0VsZW1lbnQob2JqKSB7CiAgICByZXR1cm4gISEob2JqICYmIG9iai5ub2RlVHlwZSA9PT0gMSk7CiAgfQoKICAvLyBJbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBgdG9TdHJpbmdgLWJhc2VkIHR5cGUgdGVzdGVyLgogIGZ1bmN0aW9uIHRhZ1Rlc3RlcihuYW1lKSB7CiAgICB2YXIgdGFnID0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7CiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7CiAgICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09IHRhZzsKICAgIH07CiAgfQoKICB2YXIgaXNTdHJpbmcgPSB0YWdUZXN0ZXIoJ1N0cmluZycpOwoKICB2YXIgaXNOdW1iZXIgPSB0YWdUZXN0ZXIoJ051bWJlcicpOwoKICB2YXIgaXNEYXRlID0gdGFnVGVzdGVyKCdEYXRlJyk7CgogIHZhciBpc1JlZ0V4cCA9IHRhZ1Rlc3RlcignUmVnRXhwJyk7CgogIHZhciBpc0Vycm9yID0gdGFnVGVzdGVyKCdFcnJvcicpOwoKICB2YXIgaXNTeW1ib2wgPSB0YWdUZXN0ZXIoJ1N5bWJvbCcpOwoKICB2YXIgaXNBcnJheUJ1ZmZlciA9IHRhZ1Rlc3RlcignQXJyYXlCdWZmZXInKTsKCiAgdmFyIGlzRnVuY3Rpb24gPSB0YWdUZXN0ZXIoJ0Z1bmN0aW9uJyk7CgogIC8vIE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSBgdHlwZW9mYCBidWdzIGluIG9sZAogIC8vIHY4LCBJRSAxMSAoIzE2MjEpLCBTYWZhcmkgOCAoIzE5MjkpLCBhbmQgUGhhbnRvbUpTICgjMjIzNikuCiAgdmFyIG5vZGVsaXN0ID0gcm9vdC5kb2N1bWVudCAmJiByb290LmRvY3VtZW50LmNoaWxkTm9kZXM7CiAgaWYgKHR5cGVvZiAvLi8gIT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgSW50OEFycmF5ICE9ICdvYmplY3QnICYmIHR5cGVvZiBub2RlbGlzdCAhPSAnZnVuY3Rpb24nKSB7CiAgICBpc0Z1bmN0aW9uID0gZnVuY3Rpb24ob2JqKSB7CiAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicgfHwgZmFsc2U7CiAgICB9OwogIH0KCiAgdmFyIGlzRnVuY3Rpb24kMSA9IGlzRnVuY3Rpb247CgogIHZhciBoYXNPYmplY3RUYWcgPSB0YWdUZXN0ZXIoJ09iamVjdCcpOwoKICAvLyBJbiBJRSAxMCAtIEVkZ2UgMTMsIGBEYXRhVmlld2AgaGFzIHN0cmluZyB0YWcgYCdbb2JqZWN0IE9iamVjdF0nYC4KICAvLyBJbiBJRSAxMSwgdGhlIG1vc3QgY29tbW9uIGFtb25nIHRoZW0sIHRoaXMgcHJvYmxlbSBhbHNvIGFwcGxpZXMgdG8KICAvLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YC4KICB2YXIgaGFzU3RyaW5nVGFnQnVnID0gKAogICAgICAgIHN1cHBvcnRzRGF0YVZpZXcgJiYgaGFzT2JqZWN0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoOCkpKQogICAgICApLAogICAgICBpc0lFMTEgPSAodHlwZW9mIE1hcCAhPT0gJ3VuZGVmaW5lZCcgJiYgaGFzT2JqZWN0VGFnKG5ldyBNYXApKTsKCiAgdmFyIGlzRGF0YVZpZXcgPSB0YWdUZXN0ZXIoJ0RhdGFWaWV3Jyk7CgogIC8vIEluIElFIDEwIC0gRWRnZSAxMywgd2UgbmVlZCBhIGRpZmZlcmVudCBoZXVyaXN0aWMKICAvLyB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBvYmplY3QgaXMgYSBgRGF0YVZpZXdgLgogIGZ1bmN0aW9uIGllMTBJc0RhdGFWaWV3KG9iaikgewogICAgcmV0dXJuIG9iaiAhPSBudWxsICYmIGlzRnVuY3Rpb24kMShvYmouZ2V0SW50OCkgJiYgaXNBcnJheUJ1ZmZlcihvYmouYnVmZmVyKTsKICB9CgogIHZhciBpc0RhdGFWaWV3JDEgPSAoaGFzU3RyaW5nVGFnQnVnID8gaWUxMElzRGF0YVZpZXcgOiBpc0RhdGFWaWV3KTsKCiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhbiBhcnJheT8KICAvLyBEZWxlZ2F0ZXMgdG8gRUNNQTUncyBuYXRpdmUgYEFycmF5LmlzQXJyYXlgLgogIHZhciBpc0FycmF5ID0gbmF0aXZlSXNBcnJheSB8fCB0YWdUZXN0ZXIoJ0FycmF5Jyk7CgogIC8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGNoZWNrIHdoZXRoZXIgYGtleWAgaXMgYW4gb3duIHByb3BlcnR5IG5hbWUgb2YgYG9iamAuCiAgZnVuY3Rpb24gaGFzJDEob2JqLCBrZXkpIHsKICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTsKICB9CgogIHZhciBpc0FyZ3VtZW50cyA9IHRhZ1Rlc3RlcignQXJndW1lbnRzJyk7CgogIC8vIERlZmluZSBhIGZhbGxiYWNrIHZlcnNpb24gb2YgdGhlIG1ldGhvZCBpbiBicm93c2VycyAoYWhlbSwgSUUgPCA5KSwgd2hlcmUKICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgIkFyZ3VtZW50cyIgdHlwZS4KICAoZnVuY3Rpb24oKSB7CiAgICBpZiAoIWlzQXJndW1lbnRzKGFyZ3VtZW50cykpIHsKICAgICAgaXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHsKICAgICAgICByZXR1cm4gaGFzJDEob2JqLCAnY2FsbGVlJyk7CiAgICAgIH07CiAgICB9CiAgfSgpKTsKCiAgdmFyIGlzQXJndW1lbnRzJDEgPSBpc0FyZ3VtZW50czsKCiAgLy8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVtYmVyPwogIGZ1bmN0aW9uIGlzRmluaXRlJDEob2JqKSB7CiAgICByZXR1cm4gIWlzU3ltYm9sKG9iaikgJiYgX2lzRmluaXRlKG9iaikgJiYgIWlzTmFOKHBhcnNlRmxvYXQob2JqKSk7CiAgfQoKICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/CiAgZnVuY3Rpb24gaXNOYU4kMShvYmopIHsKICAgIHJldHVybiBpc051bWJlcihvYmopICYmIF9pc05hTihvYmopOwogIH0KCiAgLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb24uIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuCiAgZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHsKICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHZhbHVlOwogICAgfTsKICB9CgogIC8vIENvbW1vbiBpbnRlcm5hbCBsb2dpYyBmb3IgYGlzQXJyYXlMaWtlYCBhbmQgYGlzQnVmZmVyTGlrZWAuCiAgZnVuY3Rpb24gY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0U2l6ZVByb3BlcnR5KSB7CiAgICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbikgewogICAgICB2YXIgc2l6ZVByb3BlcnR5ID0gZ2V0U2l6ZVByb3BlcnR5KGNvbGxlY3Rpb24pOwogICAgICByZXR1cm4gdHlwZW9mIHNpemVQcm9wZXJ0eSA9PSAnbnVtYmVyJyAmJiBzaXplUHJvcGVydHkgPj0gMCAmJiBzaXplUHJvcGVydHkgPD0gTUFYX0FSUkFZX0lOREVYOwogICAgfQogIH0KCiAgLy8gSW50ZXJuYWwgaGVscGVyIHRvIGdlbmVyYXRlIGEgZnVuY3Rpb24gdG8gb2J0YWluIHByb3BlcnR5IGBrZXlgIGZyb20gYG9iamAuCiAgZnVuY3Rpb24gc2hhbGxvd1Byb3BlcnR5KGtleSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikgewogICAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5XTsKICAgIH07CiAgfQoKICAvLyBJbnRlcm5hbCBoZWxwZXIgdG8gb2J0YWluIHRoZSBgYnl0ZUxlbmd0aGAgcHJvcGVydHkgb2YgYW4gb2JqZWN0LgogIHZhciBnZXRCeXRlTGVuZ3RoID0gc2hhbGxvd1Byb3BlcnR5KCdieXRlTGVuZ3RoJyk7CgogIC8vIEludGVybmFsIGhlbHBlciB0byBkZXRlcm1pbmUgd2hldGhlciB3ZSBzaG91bGQgc3BlbmQgZXh0ZW5zaXZlIGNoZWNrcyBhZ2FpbnN0CiAgLy8gYEFycmF5QnVmZmVyYCBldCBhbC4KICB2YXIgaXNCdWZmZXJMaWtlID0gY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0Qnl0ZUxlbmd0aCk7CgogIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSB0eXBlZCBhcnJheT8KICB2YXIgdHlwZWRBcnJheVBhdHRlcm4gPSAvXFtvYmplY3QgKChJfFVpKW50KDh8MTZ8MzIpfEZsb2F0KDMyfDY0KXxVaW50OENsYW1wZWR8QmlnKEl8VWkpbnQ2NClBcnJheVxdLzsKICBmdW5jdGlvbiBpc1R5cGVkQXJyYXkob2JqKSB7CiAgICAvLyBgQXJyYXlCdWZmZXIuaXNWaWV3YCBpcyB0aGUgbW9zdCBmdXR1cmUtcHJvb2YsIHNvIHVzZSBpdCB3aGVuIGF2YWlsYWJsZS4KICAgIC8vIE90aGVyd2lzZSwgZmFsbCBiYWNrIG9uIHRoZSBhYm92ZSByZWd1bGFyIGV4cHJlc3Npb24uCiAgICByZXR1cm4gbmF0aXZlSXNWaWV3ID8gKG5hdGl2ZUlzVmlldyhvYmopICYmICFpc0RhdGFWaWV3JDEob2JqKSkgOgogICAgICAgICAgICAgICAgICBpc0J1ZmZlckxpa2Uob2JqKSAmJiB0eXBlZEFycmF5UGF0dGVybi50ZXN0KHRvU3RyaW5nLmNhbGwob2JqKSk7CiAgfQoKICB2YXIgaXNUeXBlZEFycmF5JDEgPSBzdXBwb3J0c0FycmF5QnVmZmVyID8gaXNUeXBlZEFycmF5IDogY29uc3RhbnQoZmFsc2UpOwoKICAvLyBJbnRlcm5hbCBoZWxwZXIgdG8gb2J0YWluIHRoZSBgbGVuZ3RoYCBwcm9wZXJ0eSBvZiBhbiBvYmplY3QuCiAgdmFyIGdldExlbmd0aCA9IHNoYWxsb3dQcm9wZXJ0eSgnbGVuZ3RoJyk7CgogIC8vIEludGVybmFsIGhlbHBlciB0byBjcmVhdGUgYSBzaW1wbGUgbG9va3VwIHN0cnVjdHVyZS4KICAvLyBgY29sbGVjdE5vbkVudW1Qcm9wc2AgdXNlZCB0byBkZXBlbmQgb24gYF8uY29udGFpbnNgLCBidXQgdGhpcyBsZWQgdG8KICAvLyBjaXJjdWxhciBpbXBvcnRzLiBgZW11bGF0ZWRTZXRgIGlzIGEgb25lLW9mZiBzb2x1dGlvbiB0aGF0IG9ubHkgd29ya3MgZm9yCiAgLy8gYXJyYXlzIG9mIHN0cmluZ3MuCiAgZnVuY3Rpb24gZW11bGF0ZWRTZXQoa2V5cykgewogICAgdmFyIGhhc2ggPSB7fTsKICAgIGZvciAodmFyIGwgPSBrZXlzLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyArK2kpIGhhc2hba2V5c1tpXV0gPSB0cnVlOwogICAgcmV0dXJuIHsKICAgICAgY29udGFpbnM6IGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gaGFzaFtrZXldID09PSB0cnVlOyB9LAogICAgICBwdXNoOiBmdW5jdGlvbihrZXkpIHsKICAgICAgICBoYXNoW2tleV0gPSB0cnVlOwogICAgICAgIHJldHVybiBrZXlzLnB1c2goa2V5KTsKICAgICAgfQogICAgfTsKICB9CgogIC8vIEludGVybmFsIGhlbHBlci4gQ2hlY2tzIGBrZXlzYCBmb3IgdGhlIHByZXNlbmNlIG9mIGtleXMgaW4gSUUgPCA5IHRoYXQgd29uJ3QKICAvLyBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC4gRXh0ZW5kcyBga2V5c2AgaW4gcGxhY2UgaWYKICAvLyBuZWVkZWQuCiAgZnVuY3Rpb24gY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpIHsKICAgIGtleXMgPSBlbXVsYXRlZFNldChrZXlzKTsKICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDsKICAgIHZhciBjb25zdHJ1Y3RvciA9IG9iai5jb25zdHJ1Y3RvcjsKICAgIHZhciBwcm90byA9IChpc0Z1bmN0aW9uJDEoY29uc3RydWN0b3IpICYmIGNvbnN0cnVjdG9yLnByb3RvdHlwZSkgfHwgT2JqUHJvdG87CgogICAgLy8gQ29uc3RydWN0b3IgaXMgYSBzcGVjaWFsIGNhc2UuCiAgICB2YXIgcHJvcCA9ICdjb25zdHJ1Y3Rvcic7CiAgICBpZiAoaGFzJDEob2JqLCBwcm9wKSAmJiAha2V5cy5jb250YWlucyhwcm9wKSkga2V5cy5wdXNoKHByb3ApOwoKICAgIHdoaWxlIChub25FbnVtSWR4LS0pIHsKICAgICAgcHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tub25FbnVtSWR4XTsKICAgICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtwcm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIWtleXMuY29udGFpbnMocHJvcCkpIHsKICAgICAgICBrZXlzLnB1c2gocHJvcCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIFJldHJpZXZlIHRoZSBuYW1lcyBvZiBhbiBvYmplY3QncyBvd24gcHJvcGVydGllcy4KICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgT2JqZWN0LmtleXNgLgogIGZ1bmN0aW9uIGtleXMob2JqKSB7CiAgICBpZiAoIWlzT2JqZWN0KG9iaikpIHJldHVybiBbXTsKICAgIGlmIChuYXRpdmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhvYmopOwogICAgdmFyIGtleXMgPSBbXTsKICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChoYXMkMShvYmosIGtleSkpIGtleXMucHVzaChrZXkpOwogICAgLy8gQWhlbSwgSUUgPCA5LgogICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTsKICAgIHJldHVybiBrZXlzOwogIH0KCiAgLy8gSXMgYSBnaXZlbiBhcnJheSwgc3RyaW5nLCBvciBvYmplY3QgZW1wdHk/CiAgLy8gQW4gImVtcHR5IiBvYmplY3QgaGFzIG5vIGVudW1lcmFibGUgb3duLXByb3BlcnRpZXMuCiAgZnVuY3Rpb24gaXNFbXB0eShvYmopIHsKICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICAvLyBTa2lwIHRoZSBtb3JlIGV4cGVuc2l2ZSBgdG9TdHJpbmdgLWJhc2VkIHR5cGUgY2hlY2tzIGlmIGBvYmpgIGhhcyBubwogICAgLy8gYC5sZW5ndGhgLgogICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChvYmopOwogICAgaWYgKHR5cGVvZiBsZW5ndGggPT0gJ251bWJlcicgJiYgKAogICAgICBpc0FycmF5KG9iaikgfHwgaXNTdHJpbmcob2JqKSB8fCBpc0FyZ3VtZW50cyQxKG9iaikKICAgICkpIHJldHVybiBsZW5ndGggPT09IDA7CiAgICByZXR1cm4gZ2V0TGVuZ3RoKGtleXMob2JqKSkgPT09IDA7CiAgfQoKICAvLyBSZXR1cm5zIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZiBga2V5OnZhbHVlYCBwYWlycy4KICBmdW5jdGlvbiBpc01hdGNoKG9iamVjdCwgYXR0cnMpIHsKICAgIHZhciBfa2V5cyA9IGtleXMoYXR0cnMpLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7CiAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiAhbGVuZ3RoOwogICAgdmFyIG9iaiA9IE9iamVjdChvYmplY3QpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB2YXIga2V5ID0gX2tleXNbaV07CiAgICAgIGlmIChhdHRyc1trZXldICE9PSBvYmpba2V5XSB8fCAhKGtleSBpbiBvYmopKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vIElmIFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJldHVybnMgYSB3cmFwcGVkIG9iamVjdCB0aGF0IGNhbgogIC8vIGJlIHVzZWQgT08tc3R5bGUuIFRoaXMgd3JhcHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCBmdW5jdGlvbnMgYWRkZWQKICAvLyB0aHJvdWdoIGBfLm1peGluYC4gV3JhcHBlZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLgogIGZ1bmN0aW9uIF8kMShvYmopIHsKICAgIGlmIChvYmogaW5zdGFuY2VvZiBfJDEpIHJldHVybiBvYmo7CiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXyQxKSkgcmV0dXJuIG5ldyBfJDEob2JqKTsKICAgIHRoaXMuX3dyYXBwZWQgPSBvYmo7CiAgfQoKICBfJDEuVkVSU0lPTiA9IFZFUlNJT047CgogIC8vIEV4dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWluZWQgb2JqZWN0LgogIF8kMS5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLl93cmFwcGVkOwogIH07CgogIC8vIFByb3ZpZGUgdW53cmFwcGluZyBwcm94aWVzIGZvciBzb21lIG1ldGhvZHMgdXNlZCBpbiBlbmdpbmUgb3BlcmF0aW9ucwogIC8vIHN1Y2ggYXMgYXJpdGhtZXRpYyBhbmQgSlNPTiBzdHJpbmdpZmljYXRpb24uCiAgXyQxLnByb3RvdHlwZS52YWx1ZU9mID0gXyQxLnByb3RvdHlwZS50b0pTT04gPSBfJDEucHJvdG90eXBlLnZhbHVlOwoKICBfJDEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gU3RyaW5nKHRoaXMuX3dyYXBwZWQpOwogIH07CgogIC8vIEludGVybmFsIGZ1bmN0aW9uIHRvIHdyYXAgb3Igc2hhbGxvdy1jb3B5IGFuIEFycmF5QnVmZmVyLAogIC8vIHR5cGVkIGFycmF5IG9yIERhdGFWaWV3IHRvIGEgbmV3IHZpZXcsIHJldXNpbmcgdGhlIGJ1ZmZlci4KICBmdW5jdGlvbiB0b0J1ZmZlclZpZXcoYnVmZmVyU291cmNlKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoCiAgICAgIGJ1ZmZlclNvdXJjZS5idWZmZXIgfHwgYnVmZmVyU291cmNlLAogICAgICBidWZmZXJTb3VyY2UuYnl0ZU9mZnNldCB8fCAwLAogICAgICBnZXRCeXRlTGVuZ3RoKGJ1ZmZlclNvdXJjZSkKICAgICk7CiAgfQoKICAvLyBXZSB1c2UgdGhpcyBzdHJpbmcgdHdpY2UsIHNvIGdpdmUgaXQgYSBuYW1lIGZvciBtaW5pZmljYXRpb24uCiAgdmFyIHRhZ0RhdGFWaWV3ID0gJ1tvYmplY3QgRGF0YVZpZXddJzsKCiAgLy8gSW50ZXJuYWwgcmVjdXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBfLmlzRXF1YWxgLgogIGZ1bmN0aW9uIGVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7CiAgICAvLyBJZGVudGljYWwgb2JqZWN0cyBhcmUgZXF1YWwuIGAwID09PSAtMGAsIGJ1dCB0aGV5IGFyZW4ndCBpZGVudGljYWwuCiAgICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cHM6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuCiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiOwogICAgLy8gYG51bGxgIG9yIGB1bmRlZmluZWRgIG9ubHkgZXF1YWwgdG8gaXRzZWxmIChzdHJpY3QgY29tcGFyaXNvbikuCiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS4KICAgIGlmIChhICE9PSBhKSByZXR1cm4gYiAhPT0gYjsKICAgIC8vIEV4aGF1c3QgcHJpbWl0aXZlIGNoZWNrcwogICAgdmFyIHR5cGUgPSB0eXBlb2YgYTsKICAgIGlmICh0eXBlICE9PSAnZnVuY3Rpb24nICYmIHR5cGUgIT09ICdvYmplY3QnICYmIHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gZGVlcEVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKTsKICB9CgogIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgXy5pc0VxdWFsYC4KICBmdW5jdGlvbiBkZWVwRXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spIHsKICAgIC8vIFVud3JhcCBhbnkgd3JhcHBlZCBvYmplY3RzLgogICAgaWYgKGEgaW5zdGFuY2VvZiBfJDEpIGEgPSBhLl93cmFwcGVkOwogICAgaWYgKGIgaW5zdGFuY2VvZiBfJDEpIGIgPSBiLl93cmFwcGVkOwogICAgLy8gQ29tcGFyZSBgW1tDbGFzc11dYCBuYW1lcy4KICAgIHZhciBjbGFzc05hbWUgPSB0b1N0cmluZy5jYWxsKGEpOwogICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJuIGZhbHNlOwogICAgLy8gV29yayBhcm91bmQgYSBidWcgaW4gSUUgMTAgLSBFZGdlIDEzLgogICAgaWYgKGhhc1N0cmluZ1RhZ0J1ZyAmJiBjbGFzc05hbWUgPT0gJ1tvYmplY3QgT2JqZWN0XScgJiYgaXNEYXRhVmlldyQxKGEpKSB7CiAgICAgIGlmICghaXNEYXRhVmlldyQxKGIpKSByZXR1cm4gZmFsc2U7CiAgICAgIGNsYXNzTmFtZSA9IHRhZ0RhdGFWaWV3OwogICAgfQogICAgc3dpdGNoIChjbGFzc05hbWUpIHsKICAgICAgLy8gVGhlc2UgdHlwZXMgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlLgogICAgICBjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOgogICAgICAgIC8vIFJlZ0V4cHMgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncyBmb3IgY29tcGFyaXNvbiAoTm90ZTogJycgKyAvYS9pID09PSAnL2EvaScpCiAgICAgIGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6CiAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGAiNSJgIGlzCiAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZygiNSIpYC4KICAgICAgICByZXR1cm4gJycgKyBhID09PSAnJyArIGI7CiAgICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6CiAgICAgICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS4KICAgICAgICAvLyBPYmplY3QoTmFOKSBpcyBlcXVpdmFsZW50IHRvIE5hTi4KICAgICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4gK2IgIT09ICtiOwogICAgICAgIC8vIEFuIGBlZ2FsYCBjb21wYXJpc29uIGlzIHBlcmZvcm1lZCBmb3Igb3RoZXIgbnVtZXJpYyB2YWx1ZXMuCiAgICAgICAgcmV0dXJuICthID09PSAwID8gMSAvICthID09PSAxIC8gYiA6ICthID09PSArYjsKICAgICAgY2FzZSAnW29iamVjdCBEYXRlXSc6CiAgICAgIGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOgogICAgICAgIC8vIENvZXJjZSBkYXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRpdmUgdmFsdWVzLiBEYXRlcyBhcmUgY29tcGFyZWQgYnkgdGhlaXIKICAgICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zCiAgICAgICAgLy8gb2YgYE5hTmAgYXJlIG5vdCBlcXVpdmFsZW50LgogICAgICAgIHJldHVybiArYSA9PT0gK2I7CiAgICAgIGNhc2UgJ1tvYmplY3QgU3ltYm9sXSc6CiAgICAgICAgcmV0dXJuIFN5bWJvbFByb3RvLnZhbHVlT2YuY2FsbChhKSA9PT0gU3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKGIpOwogICAgICBjYXNlICdbb2JqZWN0IEFycmF5QnVmZmVyXSc6CiAgICAgIGNhc2UgdGFnRGF0YVZpZXc6CiAgICAgICAgLy8gQ29lcmNlIHRvIHR5cGVkIGFycmF5IHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCiAgICAgICAgcmV0dXJuIGRlZXBFcSh0b0J1ZmZlclZpZXcoYSksIHRvQnVmZmVyVmlldyhiKSwgYVN0YWNrLCBiU3RhY2spOwogICAgfQoKICAgIHZhciBhcmVBcnJheXMgPSBjbGFzc05hbWUgPT09ICdbb2JqZWN0IEFycmF5XSc7CiAgICBpZiAoIWFyZUFycmF5cyAmJiBpc1R5cGVkQXJyYXkkMShhKSkgewogICAgICAgIHZhciBieXRlTGVuZ3RoID0gZ2V0Qnl0ZUxlbmd0aChhKTsKICAgICAgICBpZiAoYnl0ZUxlbmd0aCAhPT0gZ2V0Qnl0ZUxlbmd0aChiKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChhLmJ1ZmZlciA9PT0gYi5idWZmZXIgJiYgYS5ieXRlT2Zmc2V0ID09PSBiLmJ5dGVPZmZzZXQpIHJldHVybiB0cnVlOwogICAgICAgIGFyZUFycmF5cyA9IHRydWU7CiAgICB9CiAgICBpZiAoIWFyZUFycmF5cykgewogICAgICBpZiAodHlwZW9mIGEgIT0gJ29iamVjdCcgfHwgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTsKCiAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgcwogICAgICAvLyBmcm9tIGRpZmZlcmVudCBmcmFtZXMgYXJlLgogICAgICB2YXIgYUN0b3IgPSBhLmNvbnN0cnVjdG9yLCBiQ3RvciA9IGIuY29uc3RydWN0b3I7CiAgICAgIGlmIChhQ3RvciAhPT0gYkN0b3IgJiYgIShpc0Z1bmN0aW9uJDEoYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3IgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRnVuY3Rpb24kMShiQ3RvcikgJiYgYkN0b3IgaW5zdGFuY2VvZiBiQ3RvcikKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoJ2NvbnN0cnVjdG9yJyBpbiBhICYmICdjb25zdHJ1Y3RvcicgaW4gYikpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWMKICAgIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRlZCBmcm9tIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLgoKICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy4KICAgIC8vIEl0J3MgZG9uZSBoZXJlIHNpbmNlIHdlIG9ubHkgbmVlZCB0aGVtIGZvciBvYmplY3RzIGFuZCBhcnJheXMgY29tcGFyaXNvbi4KICAgIGFTdGFjayA9IGFTdGFjayB8fCBbXTsKICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTsKICAgIHZhciBsZW5ndGggPSBhU3RhY2subGVuZ3RoOwogICAgd2hpbGUgKGxlbmd0aC0tKSB7CiAgICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZgogICAgICAvLyB1bmlxdWUgbmVzdGVkIHN0cnVjdHVyZXMuCiAgICAgIGlmIChhU3RhY2tbbGVuZ3RoXSA9PT0gYSkgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09PSBiOwogICAgfQoKICAgIC8vIEFkZCB0aGUgZmlyc3Qgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy4KICAgIGFTdGFjay5wdXNoKGEpOwogICAgYlN0YWNrLnB1c2goYik7CgogICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuCiAgICBpZiAoYXJlQXJyYXlzKSB7CiAgICAgIC8vIENvbXBhcmUgYXJyYXkgbGVuZ3RocyB0byBkZXRlcm1pbmUgaWYgYSBkZWVwIGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5LgogICAgICBsZW5ndGggPSBhLmxlbmd0aDsKICAgICAgaWYgKGxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgICAgLy8gRGVlcCBjb21wYXJlIHRoZSBjb250ZW50cywgaWdub3Jpbmcgbm9uLW51bWVyaWMgcHJvcGVydGllcy4KICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7CiAgICAgICAgaWYgKCFlcShhW2xlbmd0aF0sIGJbbGVuZ3RoXSwgYVN0YWNrLCBiU3RhY2spKSByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIERlZXAgY29tcGFyZSBvYmplY3RzLgogICAgICB2YXIgX2tleXMgPSBrZXlzKGEpLCBrZXk7CiAgICAgIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDsKICAgICAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVwIGVxdWFsaXR5LgogICAgICBpZiAoa2V5cyhiKS5sZW5ndGggIT09IGxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgICB3aGlsZSAobGVuZ3RoLS0pIHsKICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXIKICAgICAgICBrZXkgPSBfa2V5c1tsZW5ndGhdOwogICAgICAgIGlmICghKGhhcyQxKGIsIGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrKSkpIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBvYmplY3QgZnJvbSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuCiAgICBhU3RhY2sucG9wKCk7CiAgICBiU3RhY2sucG9wKCk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJlIGVxdWFsLgogIGZ1bmN0aW9uIGlzRXF1YWwoYSwgYikgewogICAgcmV0dXJuIGVxKGEsIGIpOwogIH0KCiAgLy8gUmV0cmlldmUgYWxsIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGFuIG9iamVjdC4KICBmdW5jdGlvbiBhbGxLZXlzKG9iaikgewogICAgaWYgKCFpc09iamVjdChvYmopKSByZXR1cm4gW107CiAgICB2YXIga2V5cyA9IFtdOwogICAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7CiAgICAvLyBBaGVtLCBJRSA8IDkuCiAgICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpOwogICAgcmV0dXJuIGtleXM7CiAgfQoKICAvLyBTaW5jZSB0aGUgcmVndWxhciBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgdHlwZSB0ZXN0cyBkb24ndCB3b3JrIGZvcgogIC8vIHNvbWUgdHlwZXMgaW4gSUUgMTEsIHdlIHVzZSBhIGZpbmdlcnByaW50aW5nIGhldXJpc3RpYyBpbnN0ZWFkLCBiYXNlZAogIC8vIG9uIHRoZSBtZXRob2RzLiBJdCdzIG5vdCBncmVhdCwgYnV0IGl0J3MgdGhlIGJlc3Qgd2UgZ290LgogIC8vIFRoZSBmaW5nZXJwcmludCBtZXRob2QgbGlzdHMgYXJlIGRlZmluZWQgYmVsb3cuCiAgZnVuY3Rpb24gaWUxMWZpbmdlcnByaW50KG1ldGhvZHMpIHsKICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgobWV0aG9kcyk7CiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7CiAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICAvLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YCBoYXZlIG5vIGVudW1lcmFibGUga2V5cy4KICAgICAgdmFyIGtleXMgPSBhbGxLZXlzKG9iaik7CiAgICAgIGlmIChnZXRMZW5ndGgoa2V5cykpIHJldHVybiBmYWxzZTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGlmICghaXNGdW5jdGlvbiQxKG9ialttZXRob2RzW2ldXSkpIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICAvLyBJZiB3ZSBhcmUgdGVzdGluZyBhZ2FpbnN0IGBXZWFrTWFwYCwgd2UgbmVlZCB0byBlbnN1cmUgdGhhdAogICAgICAvLyBgb2JqYCBkb2Vzbid0IGhhdmUgYSBgZm9yRWFjaGAgbWV0aG9kIGluIG9yZGVyIHRvIGRpc3Rpbmd1aXNoCiAgICAgIC8vIGl0IGZyb20gYSByZWd1bGFyIGBNYXBgLgogICAgICByZXR1cm4gbWV0aG9kcyAhPT0gd2Vha01hcE1ldGhvZHMgfHwgIWlzRnVuY3Rpb24kMShvYmpbZm9yRWFjaE5hbWVdKTsKICAgIH07CiAgfQoKICAvLyBJbiB0aGUgaW50ZXJlc3Qgb2YgY29tcGFjdCBtaW5pZmljYXRpb24sIHdlIHdyaXRlCiAgLy8gZWFjaCBzdHJpbmcgaW4gdGhlIGZpbmdlcnByaW50cyBvbmx5IG9uY2UuCiAgdmFyIGZvckVhY2hOYW1lID0gJ2ZvckVhY2gnLAogICAgICBoYXNOYW1lID0gJ2hhcycsCiAgICAgIGNvbW1vbkluaXQgPSBbJ2NsZWFyJywgJ2RlbGV0ZSddLAogICAgICBtYXBUYWlsID0gWydnZXQnLCBoYXNOYW1lLCAnc2V0J107CgogIC8vIGBNYXBgLCBgV2Vha01hcGAgYW5kIGBTZXRgIGVhY2ggaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQKICAvLyBjb21iaW5hdGlvbnMgb2YgdGhlIGFib3ZlIHN1Ymxpc3RzLgogIHZhciBtYXBNZXRob2RzID0gY29tbW9uSW5pdC5jb25jYXQoZm9yRWFjaE5hbWUsIG1hcFRhaWwpLAogICAgICB3ZWFrTWFwTWV0aG9kcyA9IGNvbW1vbkluaXQuY29uY2F0KG1hcFRhaWwpLAogICAgICBzZXRNZXRob2RzID0gWydhZGQnXS5jb25jYXQoY29tbW9uSW5pdCwgZm9yRWFjaE5hbWUsIGhhc05hbWUpOwoKICB2YXIgaXNNYXAgPSBpc0lFMTEgPyBpZTExZmluZ2VycHJpbnQobWFwTWV0aG9kcykgOiB0YWdUZXN0ZXIoJ01hcCcpOwoKICB2YXIgaXNXZWFrTWFwID0gaXNJRTExID8gaWUxMWZpbmdlcnByaW50KHdlYWtNYXBNZXRob2RzKSA6IHRhZ1Rlc3RlcignV2Vha01hcCcpOwoKICB2YXIgaXNTZXQgPSBpc0lFMTEgPyBpZTExZmluZ2VycHJpbnQoc2V0TWV0aG9kcykgOiB0YWdUZXN0ZXIoJ1NldCcpOwoKICB2YXIgaXNXZWFrU2V0ID0gdGFnVGVzdGVyKCdXZWFrU2V0Jyk7CgogIC8vIFJldHJpZXZlIHRoZSB2YWx1ZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy4KICBmdW5jdGlvbiB2YWx1ZXMob2JqKSB7CiAgICB2YXIgX2tleXMgPSBrZXlzKG9iaik7CiAgICB2YXIgbGVuZ3RoID0gX2tleXMubGVuZ3RoOwogICAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhbHVlc1tpXSA9IG9ialtfa2V5c1tpXV07CiAgICB9CiAgICByZXR1cm4gdmFsdWVzOwogIH0KCiAgLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuCiAgLy8gVGhlIG9wcG9zaXRlIG9mIGBfLm9iamVjdGAgd2l0aCBvbmUgYXJndW1lbnQuCiAgZnVuY3Rpb24gcGFpcnMob2JqKSB7CiAgICB2YXIgX2tleXMgPSBrZXlzKG9iaik7CiAgICB2YXIgbGVuZ3RoID0gX2tleXMubGVuZ3RoOwogICAgdmFyIHBhaXJzID0gQXJyYXkobGVuZ3RoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgcGFpcnNbaV0gPSBbX2tleXNbaV0sIG9ialtfa2V5c1tpXV1dOwogICAgfQogICAgcmV0dXJuIHBhaXJzOwogIH0KCiAgLy8gSW52ZXJ0IHRoZSBrZXlzIGFuZCB2YWx1ZXMgb2YgYW4gb2JqZWN0LiBUaGUgdmFsdWVzIG11c3QgYmUgc2VyaWFsaXphYmxlLgogIGZ1bmN0aW9uIGludmVydChvYmopIHsKICAgIHZhciByZXN1bHQgPSB7fTsKICAgIHZhciBfa2V5cyA9IGtleXMob2JqKTsKICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICByZXN1bHRbb2JqW19rZXlzW2ldXV0gPSBfa2V5c1tpXTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiB0aGUgZnVuY3Rpb24gbmFtZXMgYXZhaWxhYmxlIG9uIHRoZSBvYmplY3QuCiAgZnVuY3Rpb24gZnVuY3Rpb25zKG9iaikgewogICAgdmFyIG5hbWVzID0gW107CiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICAgIGlmIChpc0Z1bmN0aW9uJDEob2JqW2tleV0pKSBuYW1lcy5wdXNoKGtleSk7CiAgICB9CiAgICByZXR1cm4gbmFtZXMuc29ydCgpOwogIH0KCiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGFzc2lnbmVyIGZ1bmN0aW9ucy4KICBmdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihrZXlzRnVuYywgZGVmYXVsdHMpIHsKICAgIHJldHVybiBmdW5jdGlvbihvYmopIHsKICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7CiAgICAgIGlmIChkZWZhdWx0cykgb2JqID0gT2JqZWN0KG9iaik7CiAgICAgIGlmIChsZW5ndGggPCAyIHx8IG9iaiA9PSBudWxsKSByZXR1cm4gb2JqOwogICAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF0sCiAgICAgICAgICAgIGtleXMgPSBrZXlzRnVuYyhzb3VyY2UpLAogICAgICAgICAgICBsID0ga2V5cy5sZW5ndGg7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHsKICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldOwogICAgICAgICAgaWYgKCFkZWZhdWx0cyB8fCBvYmpba2V5XSA9PT0gdm9pZCAwKSBvYmpba2V5XSA9IHNvdXJjZVtrZXldOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gb2JqOwogICAgfTsKICB9CgogIC8vIEV4dGVuZCBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgcHJvcGVydGllcyBpbiBwYXNzZWQtaW4gb2JqZWN0KHMpLgogIHZhciBleHRlbmQgPSBjcmVhdGVBc3NpZ25lcihhbGxLZXlzKTsKCiAgLy8gQXNzaWducyBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgb3duIHByb3BlcnRpZXMgaW4gdGhlIHBhc3NlZC1pbgogIC8vIG9iamVjdChzKS4KICAvLyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnbikKICB2YXIgZXh0ZW5kT3duID0gY3JlYXRlQXNzaWduZXIoa2V5cyk7CgogIC8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMuCiAgdmFyIGRlZmF1bHRzID0gY3JlYXRlQXNzaWduZXIoYWxsS2V5cywgdHJ1ZSk7CgogIC8vIENyZWF0ZSBhIG5ha2VkIGZ1bmN0aW9uIHJlZmVyZW5jZSBmb3Igc3Vycm9nYXRlLXByb3RvdHlwZS1zd2FwcGluZy4KICBmdW5jdGlvbiBjdG9yKCkgewogICAgcmV0dXJuIGZ1bmN0aW9uKCl7fTsKICB9CgogIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIGFub3RoZXIuCiAgZnVuY3Rpb24gYmFzZUNyZWF0ZShwcm90b3R5cGUpIHsKICAgIGlmICghaXNPYmplY3QocHJvdG90eXBlKSkgcmV0dXJuIHt9OwogICAgaWYgKG5hdGl2ZUNyZWF0ZSkgcmV0dXJuIG5hdGl2ZUNyZWF0ZShwcm90b3R5cGUpOwogICAgdmFyIEN0b3IgPSBjdG9yKCk7CiAgICBDdG9yLnByb3RvdHlwZSA9IHByb3RvdHlwZTsKICAgIHZhciByZXN1bHQgPSBuZXcgQ3RvcjsKICAgIEN0b3IucHJvdG90eXBlID0gbnVsbDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuCiAgLy8gSWYgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFyZSBwcm92aWRlZCB0aGVuIHRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGUKICAvLyBjcmVhdGVkIG9iamVjdC4KICBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCBwcm9wcykgewogICAgdmFyIHJlc3VsdCA9IGJhc2VDcmVhdGUocHJvdG90eXBlKTsKICAgIGlmIChwcm9wcykgZXh0ZW5kT3duKHJlc3VsdCwgcHJvcHMpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIENyZWF0ZSBhIChzaGFsbG93LWNsb25lZCkgZHVwbGljYXRlIG9mIGFuIG9iamVjdC4KICBmdW5jdGlvbiBjbG9uZShvYmopIHsKICAgIGlmICghaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajsKICAgIHJldHVybiBpc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IGV4dGVuZCh7fSwgb2JqKTsKICB9CgogIC8vIEludm9rZXMgYGludGVyY2VwdG9yYCB3aXRoIHRoZSBgb2JqYCBhbmQgdGhlbiByZXR1cm5zIGBvYmpgLgogIC8vIFRoZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gInRhcCBpbnRvIiBhIG1ldGhvZCBjaGFpbiwgaW4KICAvLyBvcmRlciB0byBwZXJmb3JtIG9wZXJhdGlvbnMgb24gaW50ZXJtZWRpYXRlIHJlc3VsdHMgd2l0aGluIHRoZSBjaGFpbi4KICBmdW5jdGlvbiB0YXAob2JqLCBpbnRlcmNlcHRvcikgewogICAgaW50ZXJjZXB0b3Iob2JqKTsKICAgIHJldHVybiBvYmo7CiAgfQoKICAvLyBOb3JtYWxpemUgYSAoZGVlcCkgcHJvcGVydHkgYHBhdGhgIHRvIGFycmF5LgogIC8vIExpa2UgYF8uaXRlcmF0ZWVgLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjdXN0b21pemVkLgogIGZ1bmN0aW9uIHRvUGF0aCQxKHBhdGgpIHsKICAgIHJldHVybiBpc0FycmF5KHBhdGgpID8gcGF0aCA6IFtwYXRoXTsKICB9CiAgXyQxLnRvUGF0aCA9IHRvUGF0aCQxOwoKICAvLyBJbnRlcm5hbCB3cmFwcGVyIGZvciBgXy50b1BhdGhgIHRvIGVuYWJsZSBtaW5pZmljYXRpb24uCiAgLy8gU2ltaWxhciB0byBgY2JgIGZvciBgXy5pdGVyYXRlZWAuCiAgZnVuY3Rpb24gdG9QYXRoKHBhdGgpIHsKICAgIHJldHVybiBfJDEudG9QYXRoKHBhdGgpOwogIH0KCiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gb2J0YWluIGEgbmVzdGVkIHByb3BlcnR5IGluIGBvYmpgIGFsb25nIGBwYXRoYC4KICBmdW5jdGlvbiBkZWVwR2V0KG9iaiwgcGF0aCkgewogICAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB2b2lkIDA7CiAgICAgIG9iaiA9IG9ialtwYXRoW2ldXTsKICAgIH0KICAgIHJldHVybiBsZW5ndGggPyBvYmogOiB2b2lkIDA7CiAgfQoKICAvLyBHZXQgdGhlIHZhbHVlIG9mIHRoZSAoZGVlcCkgcHJvcGVydHkgb24gYHBhdGhgIGZyb20gYG9iamVjdGAuCiAgLy8gSWYgYW55IHByb3BlcnR5IGluIGBwYXRoYCBkb2VzIG5vdCBleGlzdCBvciBpZiB0aGUgdmFsdWUgaXMKICAvLyBgdW5kZWZpbmVkYCwgcmV0dXJuIGBkZWZhdWx0VmFsdWVgIGluc3RlYWQuCiAgLy8gVGhlIGBwYXRoYCBpcyBub3JtYWxpemVkIHRocm91Z2ggYF8udG9QYXRoYC4KICBmdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHsKICAgIHZhciB2YWx1ZSA9IGRlZXBHZXQob2JqZWN0LCB0b1BhdGgocGF0aCkpOwogICAgcmV0dXJuIGlzVW5kZWZpbmVkKHZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlOwogIH0KCiAgLy8gU2hvcnRjdXQgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBwcm9wZXJ0eSBkaXJlY3RseSBvbgogIC8vIGl0c2VsZiAoaW4gb3RoZXIgd29yZHMsIG5vdCBvbiBhIHByb3RvdHlwZSkuIFVubGlrZSB0aGUgaW50ZXJuYWwgYGhhc2AKICAvLyBmdW5jdGlvbiwgdGhpcyBwdWJsaWMgdmVyc2lvbiBjYW4gYWxzbyB0cmF2ZXJzZSBuZXN0ZWQgcHJvcGVydGllcy4KICBmdW5jdGlvbiBoYXMob2JqLCBwYXRoKSB7CiAgICBwYXRoID0gdG9QYXRoKHBhdGgpOwogICAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB2YXIga2V5ID0gcGF0aFtpXTsKICAgICAgaWYgKCFoYXMkMShvYmosIGtleSkpIHJldHVybiBmYWxzZTsKICAgICAgb2JqID0gb2JqW2tleV07CiAgICB9CiAgICByZXR1cm4gISFsZW5ndGg7CiAgfQoKICAvLyBLZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0ZWVzLgogIGZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICAvLyBSZXR1cm5zIGEgcHJlZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2YKICAvLyBga2V5OnZhbHVlYCBwYWlycy4KICBmdW5jdGlvbiBtYXRjaGVyKGF0dHJzKSB7CiAgICBhdHRycyA9IGV4dGVuZE93bih7fSwgYXR0cnMpOwogICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikgewogICAgICByZXR1cm4gaXNNYXRjaChvYmosIGF0dHJzKTsKICAgIH07CiAgfQoKICAvLyBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBwYXNzZWQgYW4gb2JqZWN0LCB3aWxsIHRyYXZlcnNlIHRoYXQgb2JqZWN04oCZcwogIC8vIHByb3BlcnRpZXMgZG93biB0aGUgZ2l2ZW4gYHBhdGhgLCBzcGVjaWZpZWQgYXMgYW4gYXJyYXkgb2Yga2V5cyBvciBpbmRpY2VzLgogIGZ1bmN0aW9uIHByb3BlcnR5KHBhdGgpIHsKICAgIHBhdGggPSB0b1BhdGgocGF0aCk7CiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7CiAgICAgIHJldHVybiBkZWVwR2V0KG9iaiwgcGF0aCk7CiAgICB9OwogIH0KCiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvbgogIC8vIG9mIHRoZSBwYXNzZWQtaW4gY2FsbGJhY2ssIHRvIGJlIHJlcGVhdGVkbHkgYXBwbGllZCBpbiBvdGhlciBVbmRlcnNjb3JlCiAgLy8gZnVuY3Rpb25zLgogIGZ1bmN0aW9uIG9wdGltaXplQ2IoZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHsKICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHJldHVybiBmdW5jOwogICAgc3dpdGNoIChhcmdDb3VudCA9PSBudWxsID8gMyA6IGFyZ0NvdW50KSB7CiAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSk7CiAgICAgIH07CiAgICAgIC8vIFRoZSAyLWFyZ3VtZW50IGNhc2UgaXMgb21pdHRlZCBiZWNhdXNlIHdl4oCZcmUgbm90IHVzaW5nIGl0LgogICAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHsKICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7CiAgICAgIH07CiAgICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9uKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHsKICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pOwogICAgICB9OwogICAgfQogICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpOwogICAgfTsKICB9CgogIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGNhbGxiYWNrcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGVhY2gKICAvLyBlbGVtZW50IGluIGEgY29sbGVjdGlvbiwgcmV0dXJuaW5nIHRoZSBkZXNpcmVkIHJlc3VsdCDigJQgZWl0aGVyIGBfLmlkZW50aXR5YCwKICAvLyBhbiBhcmJpdHJhcnkgY2FsbGJhY2ssIGEgcHJvcGVydHkgbWF0Y2hlciwgb3IgYSBwcm9wZXJ0eSBhY2Nlc3Nvci4KICBmdW5jdGlvbiBiYXNlSXRlcmF0ZWUodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KSB7CiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGlkZW50aXR5OwogICAgaWYgKGlzRnVuY3Rpb24kMSh2YWx1ZSkpIHJldHVybiBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7CiAgICBpZiAoaXNPYmplY3QodmFsdWUpICYmICFpc0FycmF5KHZhbHVlKSkgcmV0dXJuIG1hdGNoZXIodmFsdWUpOwogICAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTsKICB9CgogIC8vIEV4dGVybmFsIHdyYXBwZXIgZm9yIG91ciBjYWxsYmFjayBnZW5lcmF0b3IuIFVzZXJzIG1heSBjdXN0b21pemUKICAvLyBgXy5pdGVyYXRlZWAgaWYgdGhleSB3YW50IGFkZGl0aW9uYWwgcHJlZGljYXRlL2l0ZXJhdGVlIHNob3J0aGFuZCBzdHlsZXMuCiAgLy8gVGhpcyBhYnN0cmFjdGlvbiBoaWRlcyB0aGUgaW50ZXJuYWwtb25seSBgYXJnQ291bnRgIGFyZ3VtZW50LgogIGZ1bmN0aW9uIGl0ZXJhdGVlKHZhbHVlLCBjb250ZXh0KSB7CiAgICByZXR1cm4gYmFzZUl0ZXJhdGVlKHZhbHVlLCBjb250ZXh0LCBJbmZpbml0eSk7CiAgfQogIF8kMS5pdGVyYXRlZSA9IGl0ZXJhdGVlOwoKICAvLyBUaGUgZnVuY3Rpb24gd2UgY2FsbCBpbnRlcm5hbGx5IHRvIGdlbmVyYXRlIGEgY2FsbGJhY2suIEl0IGludm9rZXMKICAvLyBgXy5pdGVyYXRlZWAgaWYgb3ZlcnJpZGRlbiwgb3RoZXJ3aXNlIGBiYXNlSXRlcmF0ZWVgLgogIGZ1bmN0aW9uIGNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkgewogICAgaWYgKF8kMS5pdGVyYXRlZSAhPT0gaXRlcmF0ZWUpIHJldHVybiBfJDEuaXRlcmF0ZWUodmFsdWUsIGNvbnRleHQpOwogICAgcmV0dXJuIGJhc2VJdGVyYXRlZSh2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpOwogIH0KCiAgLy8gUmV0dXJucyB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgYGl0ZXJhdGVlYCB0byBlYWNoIGVsZW1lbnQgb2YgYG9iamAuCiAgLy8gSW4gY29udHJhc3QgdG8gYF8ubWFwYCBpdCByZXR1cm5zIGFuIG9iamVjdC4KICBmdW5jdGlvbiBtYXBPYmplY3Qob2JqLCBpdGVyYXRlZSwgY29udGV4dCkgewogICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7CiAgICB2YXIgX2tleXMgPSBrZXlzKG9iaiksCiAgICAgICAgbGVuZ3RoID0gX2tleXMubGVuZ3RoLAogICAgICAgIHJlc3VsdHMgPSB7fTsKICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKICAgICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5c1tpbmRleF07CiAgICAgIHJlc3VsdHNbY3VycmVudEtleV0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9CgogIC8vIFByZWRpY2F0ZS1nZW5lcmF0aW5nIGZ1bmN0aW9uLiBPZnRlbiB1c2VmdWwgb3V0c2lkZSBvZiBVbmRlcnNjb3JlLgogIGZ1bmN0aW9uIG5vb3AoKXt9CgogIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVybnMgYSBnaXZlbiBwcm9wZXJ0eS4KICBmdW5jdGlvbiBwcm9wZXJ0eU9mKG9iaikgewogICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbm9vcDsKICAgIHJldHVybiBmdW5jdGlvbihwYXRoKSB7CiAgICAgIHJldHVybiBnZXQob2JqLCBwYXRoKTsKICAgIH07CiAgfQoKICAvLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy4KICBmdW5jdGlvbiB0aW1lcyhuLCBpdGVyYXRlZSwgY29udGV4dCkgewogICAgdmFyIGFjY3VtID0gQXJyYXkoTWF0aC5tYXgoMCwgbikpOwogICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBhY2N1bVtpXSA9IGl0ZXJhdGVlKGkpOwogICAgcmV0dXJuIGFjY3VtOwogIH0KCiAgLy8gUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiBgbWluYCBhbmQgYG1heGAgKGluY2x1c2l2ZSkuCiAgZnVuY3Rpb24gcmFuZG9tKG1pbiwgbWF4KSB7CiAgICBpZiAobWF4ID09IG51bGwpIHsKICAgICAgbWF4ID0gbWluOwogICAgICBtaW4gPSAwOwogICAgfQogICAgcmV0dXJuIG1pbiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7CiAgfQoKICAvLyBBIChwb3NzaWJseSBmYXN0ZXIpIHdheSB0byBnZXQgdGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGFuIGludGVnZXIuCiAgdmFyIG5vdyA9IERhdGUubm93IHx8IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOwogIH07CgogIC8vIEludGVybmFsIGhlbHBlciB0byBnZW5lcmF0ZSBmdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MKICAvLyB0by9mcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi4KICBmdW5jdGlvbiBjcmVhdGVFc2NhcGVyKG1hcCkgewogICAgdmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRjaCkgewogICAgICByZXR1cm4gbWFwW21hdGNoXTsKICAgIH07CiAgICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRzIHRvIGJlIGVzY2FwZWQuCiAgICB2YXIgc291cmNlID0gJyg/OicgKyBrZXlzKG1hcCkuam9pbignfCcpICsgJyknOwogICAgdmFyIHRlc3RSZWdleHAgPSBSZWdFeHAoc291cmNlKTsKICAgIHZhciByZXBsYWNlUmVnZXhwID0gUmVnRXhwKHNvdXJjZSwgJ2cnKTsKICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHsKICAgICAgc3RyaW5nID0gc3RyaW5nID09IG51bGwgPyAnJyA6ICcnICsgc3RyaW5nOwogICAgICByZXR1cm4gdGVzdFJlZ2V4cC50ZXN0KHN0cmluZykgPyBzdHJpbmcucmVwbGFjZShyZXBsYWNlUmVnZXhwLCBlc2NhcGVyKSA6IHN0cmluZzsKICAgIH07CiAgfQoKICAvLyBJbnRlcm5hbCBsaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5nLgogIHZhciBlc2NhcGVNYXAgPSB7CiAgICAnJic6ICcmYW1wOycsCiAgICAnPCc6ICcmbHQ7JywKICAgICc+JzogJyZndDsnLAogICAgJyInOiAnJnF1b3Q7JywKICAgICInIjogJyYjeDI3OycsCiAgICAnYCc6ICcmI3g2MDsnCiAgfTsKCiAgLy8gRnVuY3Rpb24gZm9yIGVzY2FwaW5nIHN0cmluZ3MgdG8gSFRNTCBpbnRlcnBvbGF0aW9uLgogIHZhciBfZXNjYXBlID0gY3JlYXRlRXNjYXBlcihlc2NhcGVNYXApOwoKICAvLyBJbnRlcm5hbCBsaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIHVuZXNjYXBpbmcuCiAgdmFyIHVuZXNjYXBlTWFwID0gaW52ZXJ0KGVzY2FwZU1hcCk7CgogIC8vIEZ1bmN0aW9uIGZvciB1bmVzY2FwaW5nIHN0cmluZ3MgZnJvbSBIVE1MIGludGVycG9sYXRpb24uCiAgdmFyIF91bmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIodW5lc2NhcGVNYXApOwoKICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMuIENoYW5nZSB0aGUKICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuCiAgdmFyIHRlbXBsYXRlU2V0dGluZ3MgPSBfJDEudGVtcGxhdGVTZXR0aW5ncyA9IHsKICAgIGV2YWx1YXRlOiAvPCUoW1xzXFNdKz8pJT4vZywKICAgIGludGVycG9sYXRlOiAvPCU9KFtcc1xTXSs/KSU+L2csCiAgICBlc2NhcGU6IC88JS0oW1xzXFNdKz8pJT4vZwogIH07CgogIC8vIFdoZW4gY3VzdG9taXppbmcgYF8udGVtcGxhdGVTZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhbgogIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXMKICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC4KICB2YXIgbm9NYXRjaCA9IC8oLileLzsKCiAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGEKICAvLyBzdHJpbmcgbGl0ZXJhbC4KICB2YXIgZXNjYXBlcyA9IHsKICAgICInIjogIiciLAogICAgJ1xcJzogJ1xcJywKICAgICdccic6ICdyJywKICAgICdcbic6ICduJywKICAgICdcdTIwMjgnOiAndTIwMjgnLAogICAgJ1x1MjAyOSc6ICd1MjAyOScKICB9OwoKICB2YXIgZXNjYXBlUmVnRXhwID0gL1xcfCd8XHJ8XG58XHUyMDI4fFx1MjAyOS9nOwoKICBmdW5jdGlvbiBlc2NhcGVDaGFyKG1hdGNoKSB7CiAgICByZXR1cm4gJ1xcJyArIGVzY2FwZXNbbWF0Y2hdOwogIH0KCiAgLy8gSW4gb3JkZXIgdG8gcHJldmVudCB0aGlyZC1wYXJ0eSBjb2RlIGluamVjdGlvbiB0aHJvdWdoCiAgLy8gYF8udGVtcGxhdGVTZXR0aW5ncy52YXJpYWJsZWAsIHdlIHRlc3QgaXQgYWdhaW5zdCB0aGUgZm9sbG93aW5nIHJlZ3VsYXIKICAvLyBleHByZXNzaW9uLiBJdCBpcyBpbnRlbnRpb25hbGx5IGEgYml0IG1vcmUgbGliZXJhbCB0aGFuIGp1c3QgbWF0Y2hpbmcgdmFsaWQKICAvLyBpZGVudGlmaWVycywgYnV0IHN0aWxsIHByZXZlbnRzIHBvc3NpYmxlIGxvb3Bob2xlcyB0aHJvdWdoIGRlZmF1bHRzIG9yCiAgLy8gZGVzdHJ1Y3R1cmluZyBhc3NpZ25tZW50LgogIHZhciBiYXJlSWRlbnRpZmllciA9IC9eXHMqKFx3fFwkKStccyokLzsKCiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi4KICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdoaXRlc3BhY2UsCiAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuCiAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgogIGZ1bmN0aW9uIHRlbXBsYXRlKHRleHQsIHNldHRpbmdzLCBvbGRTZXR0aW5ncykgewogICAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRTZXR0aW5nczsKICAgIHNldHRpbmdzID0gZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfJDEudGVtcGxhdGVTZXR0aW5ncyk7CgogICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uCiAgICB2YXIgbWF0Y2hlciA9IFJlZ0V4cChbCiAgICAgIChzZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLAogICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLAogICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlCiAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7CgogICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS4KICAgIHZhciBpbmRleCA9IDA7CiAgICB2YXIgc291cmNlID0gIl9fcCs9JyI7CiAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHsKICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShlc2NhcGVSZWdFeHAsIGVzY2FwZUNoYXIpOwogICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDsKCiAgICAgIGlmIChlc2NhcGUpIHsKICAgICAgICBzb3VyY2UgKz0gIicrXG4oKF9fdD0oIiArIGVzY2FwZSArICIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcbiciOwogICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRlKSB7CiAgICAgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBpbnRlcnBvbGF0ZSArICIpKT09bnVsbD8nJzpfX3QpK1xuJyI7CiAgICAgIH0gZWxzZSBpZiAoZXZhbHVhdGUpIHsKICAgICAgICBzb3VyY2UgKz0gIic7XG4iICsgZXZhbHVhdGUgKyAiXG5fX3ArPSciOwogICAgICB9CgogICAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZzZXQuCiAgICAgIHJldHVybiBtYXRjaDsKICAgIH0pOwogICAgc291cmNlICs9ICInO1xuIjsKCiAgICB2YXIgYXJndW1lbnQgPSBzZXR0aW5ncy52YXJpYWJsZTsKICAgIGlmIChhcmd1bWVudCkgewogICAgICAvLyBJbnN1cmUgYWdhaW5zdCB0aGlyZC1wYXJ0eSBjb2RlIGluamVjdGlvbi4gKENWRS0yMDIxLTIzMzU4KQogICAgICBpZiAoIWJhcmVJZGVudGlmaWVyLnRlc3QoYXJndW1lbnQpKSB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgJ3ZhcmlhYmxlIGlzIG5vdCBhIGJhcmUgaWRlbnRpZmllcjogJyArIGFyZ3VtZW50CiAgICAgICk7CiAgICB9IGVsc2UgewogICAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLgogICAgICBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcbicgKyBzb3VyY2UgKyAnfVxuJzsKICAgICAgYXJndW1lbnQgPSAnb2JqJzsKICAgIH0KCiAgICBzb3VyY2UgPSAidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLCIgKwogICAgICAicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcbiIgKwogICAgICBzb3VyY2UgKyAncmV0dXJuIF9fcDtcbic7CgogICAgdmFyIHJlbmRlcjsKICAgIHRyeSB7CiAgICAgIHJlbmRlciA9IG5ldyBGdW5jdGlvbihhcmd1bWVudCwgJ18nLCBzb3VyY2UpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBlLnNvdXJjZSA9IHNvdXJjZTsKICAgICAgdGhyb3cgZTsKICAgIH0KCiAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRhKSB7CiAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfJDEpOwogICAgfTsKCiAgICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29tcGlsYXRpb24uCiAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIGFyZ3VtZW50ICsgJyl7XG4nICsgc291cmNlICsgJ30nOwoKICAgIHJldHVybiB0ZW1wbGF0ZTsKICB9CgogIC8vIFRyYXZlcnNlcyB0aGUgY2hpbGRyZW4gb2YgYG9iamAgYWxvbmcgYHBhdGhgLiBJZiBhIGNoaWxkIGlzIGEgZnVuY3Rpb24sIGl0CiAgLy8gaXMgaW52b2tlZCB3aXRoIGl0cyBwYXJlbnQgYXMgY29udGV4dC4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpbmFsCiAgLy8gY2hpbGQsIG9yIGBmYWxsYmFja2AgaWYgYW55IGNoaWxkIGlzIHVuZGVmaW5lZC4KICBmdW5jdGlvbiByZXN1bHQob2JqLCBwYXRoLCBmYWxsYmFjaykgewogICAgcGF0aCA9IHRvUGF0aChwYXRoKTsKICAgIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDsKICAgIGlmICghbGVuZ3RoKSB7CiAgICAgIHJldHVybiBpc0Z1bmN0aW9uJDEoZmFsbGJhY2spID8gZmFsbGJhY2suY2FsbChvYmopIDogZmFsbGJhY2s7CiAgICB9CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBwcm9wID0gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpbcGF0aFtpXV07CiAgICAgIGlmIChwcm9wID09PSB2b2lkIDApIHsKICAgICAgICBwcm9wID0gZmFsbGJhY2s7CiAgICAgICAgaSA9IGxlbmd0aDsgLy8gRW5zdXJlIHdlIGRvbid0IGNvbnRpbnVlIGl0ZXJhdGluZy4KICAgICAgfQogICAgICBvYmogPSBpc0Z1bmN0aW9uJDEocHJvcCkgPyBwcm9wLmNhbGwob2JqKSA6IHByb3A7CiAgICB9CiAgICByZXR1cm4gb2JqOwogIH0KCiAgLy8gR2VuZXJhdGUgYSB1bmlxdWUgaW50ZWdlciBpZCAodW5pcXVlIHdpdGhpbiB0aGUgZW50aXJlIGNsaWVudCBzZXNzaW9uKS4KICAvLyBVc2VmdWwgZm9yIHRlbXBvcmFyeSBET00gaWRzLgogIHZhciBpZENvdW50ZXIgPSAwOwogIGZ1bmN0aW9uIHVuaXF1ZUlkKHByZWZpeCkgewogICAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAnJzsKICAgIHJldHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlkOwogIH0KCiAgLy8gU3RhcnQgY2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LgogIGZ1bmN0aW9uIGNoYWluKG9iaikgewogICAgdmFyIGluc3RhbmNlID0gXyQxKG9iaik7CiAgICBpbnN0YW5jZS5fY2hhaW4gPSB0cnVlOwogICAgcmV0dXJuIGluc3RhbmNlOwogIH0KCiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBgc291cmNlRnVuY2AgYm91bmQgdG8gYGNvbnRleHRgIHdpdGggb3B0aW9uYWwKICAvLyBgYXJnc2AuIERldGVybWluZXMgd2hldGhlciB0byBleGVjdXRlIGEgZnVuY3Rpb24gYXMgYSBjb25zdHJ1Y3RvciBvciBhcyBhCiAgLy8gbm9ybWFsIGZ1bmN0aW9uLgogIGZ1bmN0aW9uIGV4ZWN1dGVCb3VuZChzb3VyY2VGdW5jLCBib3VuZEZ1bmMsIGNvbnRleHQsIGNhbGxpbmdDb250ZXh0LCBhcmdzKSB7CiAgICBpZiAoIShjYWxsaW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBzb3VyY2VGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpOwogICAgdmFyIHNlbGYgPSBiYXNlQ3JlYXRlKHNvdXJjZUZ1bmMucHJvdG90eXBlKTsKICAgIHZhciByZXN1bHQgPSBzb3VyY2VGdW5jLmFwcGx5KHNlbGYsIGFyZ3MpOwogICAgaWYgKGlzT2JqZWN0KHJlc3VsdCkpIHJldHVybiByZXN1bHQ7CiAgICByZXR1cm4gc2VsZjsKICB9CgogIC8vIFBhcnRpYWxseSBhcHBseSBhIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIGEgdmVyc2lvbiB0aGF0IGhhcyBoYWQgc29tZSBvZiBpdHMKICAvLyBhcmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gYF9gIGFjdHMKICAvLyBhcyBhIHBsYWNlaG9sZGVyIGJ5IGRlZmF1bHQsIGFsbG93aW5nIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgdG8gYmUKICAvLyBwcmUtZmlsbGVkLiBTZXQgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgZm9yIGEgY3VzdG9tIHBsYWNlaG9sZGVyIGFyZ3VtZW50LgogIHZhciBwYXJ0aWFsID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCBib3VuZEFyZ3MpIHsKICAgIHZhciBwbGFjZWhvbGRlciA9IHBhcnRpYWwucGxhY2Vob2xkZXI7CiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHsKICAgICAgdmFyIHBvc2l0aW9uID0gMCwgbGVuZ3RoID0gYm91bmRBcmdzLmxlbmd0aDsKICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW5ndGgpOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgYXJnc1tpXSA9IGJvdW5kQXJnc1tpXSA9PT0gcGxhY2Vob2xkZXIgPyBhcmd1bWVudHNbcG9zaXRpb24rK10gOiBib3VuZEFyZ3NbaV07CiAgICAgIH0KICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlvbisrXSk7CiAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIHRoaXMsIHRoaXMsIGFyZ3MpOwogICAgfTsKICAgIHJldHVybiBib3VuZDsKICB9KTsKCiAgcGFydGlhbC5wbGFjZWhvbGRlciA9IF8kMTsKCiAgLy8gQ3JlYXRlIGEgZnVuY3Rpb24gYm91bmQgdG8gYSBnaXZlbiBvYmplY3QgKGFzc2lnbmluZyBgdGhpc2AsIGFuZCBhcmd1bWVudHMsCiAgLy8gb3B0aW9uYWxseSkuCiAgdmFyIGJpbmQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGZ1bmMsIGNvbnRleHQsIGFyZ3MpIHsKICAgIGlmICghaXNGdW5jdGlvbiQxKGZ1bmMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdCaW5kIG11c3QgYmUgY2FsbGVkIG9uIGEgZnVuY3Rpb24nKTsKICAgIHZhciBib3VuZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oY2FsbEFyZ3MpIHsKICAgICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgY29udGV4dCwgdGhpcywgYXJncy5jb25jYXQoY2FsbEFyZ3MpKTsKICAgIH0pOwogICAgcmV0dXJuIGJvdW5kOwogIH0pOwoKICAvLyBJbnRlcm5hbCBoZWxwZXIgZm9yIGNvbGxlY3Rpb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgd2hldGhlciBhIGNvbGxlY3Rpb24KICAvLyBzaG91bGQgYmUgaXRlcmF0ZWQgYXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0LgogIC8vIFJlbGF0ZWQ6IGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0aAogIC8vIEF2b2lkcyBhIHZlcnkgbmFzdHkgaU9TIDggSklUIGJ1ZyBvbiBBUk0tNjQuICMyMDk0CiAgdmFyIGlzQXJyYXlMaWtlID0gY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0TGVuZ3RoKTsKCiAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYSByZWN1cnNpdmUgYGZsYXR0ZW5gIGZ1bmN0aW9uLgogIGZ1bmN0aW9uIGZsYXR0ZW4kMShpbnB1dCwgZGVwdGgsIHN0cmljdCwgb3V0cHV0KSB7CiAgICBvdXRwdXQgPSBvdXRwdXQgfHwgW107CiAgICBpZiAoIWRlcHRoICYmIGRlcHRoICE9PSAwKSB7CiAgICAgIGRlcHRoID0gSW5maW5pdHk7CiAgICB9IGVsc2UgaWYgKGRlcHRoIDw9IDApIHsKICAgICAgcmV0dXJuIG91dHB1dC5jb25jYXQoaW5wdXQpOwogICAgfQogICAgdmFyIGlkeCA9IG91dHB1dC5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGlucHV0KTsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciB2YWx1ZSA9IGlucHV0W2ldOwogICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmIChpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyQxKHZhbHVlKSkpIHsKICAgICAgICAvLyBGbGF0dGVuIGN1cnJlbnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdC4KICAgICAgICBpZiAoZGVwdGggPiAxKSB7CiAgICAgICAgICBmbGF0dGVuJDEodmFsdWUsIGRlcHRoIC0gMSwgc3RyaWN0LCBvdXRwdXQpOwogICAgICAgICAgaWR4ID0gb3V0cHV0Lmxlbmd0aDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIGogPSAwLCBsZW4gPSB2YWx1ZS5sZW5ndGg7CiAgICAgICAgICB3aGlsZSAoaiA8IGxlbikgb3V0cHV0W2lkeCsrXSA9IHZhbHVlW2orK107CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKCFzdHJpY3QpIHsKICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBvdXRwdXQ7CiAgfQoKICAvLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmplY3QuIFJlbWFpbmluZyBhcmd1bWVudHMKICAvLyBhcmUgdGhlIG1ldGhvZCBuYW1lcyB0byBiZSBib3VuZC4gVXNlZnVsIGZvciBlbnN1cmluZyB0aGF0IGFsbCBjYWxsYmFja3MKICAvLyBkZWZpbmVkIG9uIGFuIG9iamVjdCBiZWxvbmcgdG8gaXQuCiAgdmFyIGJpbmRBbGwgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykgewogICAga2V5cyA9IGZsYXR0ZW4kMShrZXlzLCBmYWxzZSwgZmFsc2UpOwogICAgdmFyIGluZGV4ID0ga2V5cy5sZW5ndGg7CiAgICBpZiAoaW5kZXggPCAxKSB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBbGwgbXVzdCBiZSBwYXNzZWQgZnVuY3Rpb24gbmFtZXMnKTsKICAgIHdoaWxlIChpbmRleC0tKSB7CiAgICAgIHZhciBrZXkgPSBrZXlzW2luZGV4XTsKICAgICAgb2JqW2tleV0gPSBiaW5kKG9ialtrZXldLCBvYmopOwogICAgfQogICAgcmV0dXJuIG9iajsKICB9KTsKCiAgLy8gTWVtb2l6ZSBhbiBleHBlbnNpdmUgZnVuY3Rpb24gYnkgc3RvcmluZyBpdHMgcmVzdWx0cy4KICBmdW5jdGlvbiBtZW1vaXplKGZ1bmMsIGhhc2hlcikgewogICAgdmFyIG1lbW9pemUgPSBmdW5jdGlvbihrZXkpIHsKICAgICAgdmFyIGNhY2hlID0gbWVtb2l6ZS5jYWNoZTsKICAgICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGtleSk7CiAgICAgIGlmICghaGFzJDEoY2FjaGUsIGFkZHJlc3MpKSBjYWNoZVthZGRyZXNzXSA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgcmV0dXJuIGNhY2hlW2FkZHJlc3NdOwogICAgfTsKICAgIG1lbW9pemUuY2FjaGUgPSB7fTsKICAgIHJldHVybiBtZW1vaXplOwogIH0KCiAgLy8gRGVsYXlzIGEgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCBhbmQgdGhlbiBjYWxscwogIC8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC4KICB2YXIgZGVsYXkgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGFyZ3MpIHsKICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTsKICAgIH0sIHdhaXQpOwogIH0pOwoKICAvLyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXMKICAvLyBjbGVhcmVkLgogIHZhciBkZWZlciA9IHBhcnRpYWwoZGVsYXksIF8kMSwgMSk7CgogIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgd2hlbiBpbnZva2VkLCB3aWxsIG9ubHkgYmUgdHJpZ2dlcmVkIGF0IG1vc3Qgb25jZQogIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1bgogIC8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3aXRob3V0IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBkdXJhdGlvbjsKICAvLyBidXQgaWYgeW91J2QgbGlrZSB0byBkaXNhYmxlIHRoZSBleGVjdXRpb24gb24gdGhlIGxlYWRpbmcgZWRnZSwgcGFzcwogIC8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLgogIGZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHsKICAgIHZhciB0aW1lb3V0LCBjb250ZXh0LCBhcmdzLCByZXN1bHQ7CiAgICB2YXIgcHJldmlvdXMgPSAwOwogICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307CgogICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7CiAgICAgIHByZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiBub3coKTsKICAgICAgdGltZW91dCA9IG51bGw7CiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7CiAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsOwogICAgfTsKCiAgICB2YXIgdGhyb3R0bGVkID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciBfbm93ID0gbm93KCk7CiAgICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkgcHJldmlvdXMgPSBfbm93OwogICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChfbm93IC0gcHJldmlvdXMpOwogICAgICBjb250ZXh0ID0gdGhpczsKICAgICAgYXJncyA9IGFyZ3VtZW50czsKICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHsKICAgICAgICBpZiAodGltZW91dCkgewogICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpOwogICAgICAgICAgdGltZW91dCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHByZXZpb3VzID0gX25vdzsKICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpOwogICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsOwogICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJhaWxpbmcgIT09IGZhbHNlKSB7CiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07CgogICAgdGhyb3R0bGVkLmNhbmNlbCA9IGZ1bmN0aW9uKCkgewogICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7CiAgICAgIHByZXZpb3VzID0gMDsKICAgICAgdGltZW91dCA9IGNvbnRleHQgPSBhcmdzID0gbnVsbDsKICAgIH07CgogICAgcmV0dXJuIHRocm90dGxlZDsKICB9CgogIC8vIFdoZW4gYSBzZXF1ZW5jZSBvZiBjYWxscyBvZiB0aGUgcmV0dXJuZWQgZnVuY3Rpb24gZW5kcywgdGhlIGFyZ3VtZW50CiAgLy8gZnVuY3Rpb24gaXMgdHJpZ2dlcmVkLiBUaGUgZW5kIG9mIGEgc2VxdWVuY2UgaXMgZGVmaW5lZCBieSB0aGUgYHdhaXRgCiAgLy8gcGFyYW1ldGVyLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRoZSBhcmd1bWVudCBmdW5jdGlvbiB3aWxsIGJlCiAgLy8gdHJpZ2dlcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlcXVlbmNlIGluc3RlYWQgb2YgYXQgdGhlIGVuZC4KICBmdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHsKICAgIHZhciB0aW1lb3V0LCBwcmV2aW91cywgYXJncywgcmVzdWx0LCBjb250ZXh0OwoKICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgcGFzc2VkID0gbm93KCkgLSBwcmV2aW91czsKICAgICAgaWYgKHdhaXQgPiBwYXNzZWQpIHsKICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCAtIHBhc3NlZCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGltZW91dCA9IG51bGw7CiAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7CiAgICAgICAgLy8gVGhpcyBjaGVjayBpcyBuZWVkZWQgYmVjYXVzZSBgZnVuY2AgY2FuIHJlY3Vyc2l2ZWx5IGludm9rZSBgZGVib3VuY2VkYC4KICAgICAgICBpZiAoIXRpbWVvdXQpIGFyZ3MgPSBjb250ZXh0ID0gbnVsbDsKICAgICAgfQogICAgfTsKCiAgICB2YXIgZGVib3VuY2VkID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihfYXJncykgewogICAgICBjb250ZXh0ID0gdGhpczsKICAgICAgYXJncyA9IF9hcmdzOwogICAgICBwcmV2aW91cyA9IG5vdygpOwogICAgICBpZiAoIXRpbWVvdXQpIHsKICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7CiAgICAgICAgaWYgKGltbWVkaWF0ZSkgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSk7CgogICAgZGVib3VuY2VkLmNhbmNlbCA9IGZ1bmN0aW9uKCkgewogICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7CiAgICAgIHRpbWVvdXQgPSBhcmdzID0gY29udGV4dCA9IG51bGw7CiAgICB9OwoKICAgIHJldHVybiBkZWJvdW5jZWQ7CiAgfQoKICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNlY29uZCwKICAvLyBhbGxvd2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNvZGUgYmVmb3JlIGFuZCBhZnRlciwgYW5kCiAgLy8gY29uZGl0aW9uYWxseSBleGVjdXRlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi4KICBmdW5jdGlvbiB3cmFwKGZ1bmMsIHdyYXBwZXIpIHsKICAgIHJldHVybiBwYXJ0aWFsKHdyYXBwZXIsIGZ1bmMpOwogIH0KCiAgLy8gUmV0dXJucyBhIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUgcGFzc2VkLWluIHByZWRpY2F0ZS4KICBmdW5jdGlvbiBuZWdhdGUocHJlZGljYXRlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICB9OwogIH0KCiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIGEgbGlzdCBvZiBmdW5jdGlvbnMsIGVhY2gKICAvLyBjb25zdW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLgogIGZ1bmN0aW9uIGNvbXBvc2UoKSB7CiAgICB2YXIgYXJncyA9IGFyZ3VtZW50czsKICAgIHZhciBzdGFydCA9IGFyZ3MubGVuZ3RoIC0gMTsKICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgdmFyIGkgPSBzdGFydDsKICAgICAgdmFyIHJlc3VsdCA9IGFyZ3Nbc3RhcnRdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIHdoaWxlIChpLS0pIHJlc3VsdCA9IGFyZ3NbaV0uY2FsbCh0aGlzLCByZXN1bHQpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICB9CgogIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCBvbiBhbmQgYWZ0ZXIgdGhlIE50aCBjYWxsLgogIGZ1bmN0aW9uIGFmdGVyKHRpbWVzLCBmdW5jKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIGlmICgtLXRpbWVzIDwgMSkgewogICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIH0KICAgIH07CiAgfQoKICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgdXAgdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB0aGUKICAvLyBOdGggY2FsbC4KICBmdW5jdGlvbiBiZWZvcmUodGltZXMsIGZ1bmMpIHsKICAgIHZhciBtZW1vOwogICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICBpZiAoLS10aW1lcyA+IDApIHsKICAgICAgICBtZW1vID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICB9CiAgICAgIGlmICh0aW1lcyA8PSAxKSBmdW5jID0gbnVsbDsKICAgICAgcmV0dXJuIG1lbW87CiAgICB9OwogIH0KCiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhdCBtb3N0IG9uZSB0aW1lLCBubyBtYXR0ZXIgaG93CiAgLy8gb2Z0ZW4geW91IGNhbGwgaXQuIFVzZWZ1bCBmb3IgbGF6eSBpbml0aWFsaXphdGlvbi4KICB2YXIgb25jZSA9IHBhcnRpYWwoYmVmb3JlLCAyKTsKCiAgLy8gUmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0aGF0IHBhc3NlcyBhIHRydXRoIHRlc3QuCiAgZnVuY3Rpb24gZmluZEtleShvYmosIHByZWRpY2F0ZSwgY29udGV4dCkgewogICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTsKICAgIHZhciBfa2V5cyA9IGtleXMob2JqKSwga2V5OwogICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGtleSA9IF9rZXlzW2ldOwogICAgICBpZiAocHJlZGljYXRlKG9ialtrZXldLCBrZXksIG9iaikpIHJldHVybiBrZXk7CiAgICB9CiAgfQoKICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBgXy5maW5kSW5kZXhgIGFuZCBgXy5maW5kTGFzdEluZGV4YC4KICBmdW5jdGlvbiBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcihkaXIpIHsKICAgIHJldHVybiBmdW5jdGlvbihhcnJheSwgcHJlZGljYXRlLCBjb250ZXh0KSB7CiAgICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7CiAgICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOwogICAgICB2YXIgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7CiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHsKICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4OwogICAgICB9CiAgICAgIHJldHVybiAtMTsKICAgIH07CiAgfQoKICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBpbmRleCBvbiBhbiBhcnJheS1saWtlIHRoYXQgcGFzc2VzIGEgdHJ1dGggdGVzdC4KICB2YXIgZmluZEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoMSk7CgogIC8vIFJldHVybnMgdGhlIGxhc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHRydXRoIHRlc3QuCiAgdmFyIGZpbmRMYXN0SW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigtMSk7CgogIC8vIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0aGUgc21hbGxlc3QgaW5kZXggYXQgd2hpY2gKICAvLyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVkIHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guCiAgZnVuY3Rpb24gc29ydGVkSW5kZXgoYXJyYXksIG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHsKICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpOwogICAgdmFyIHZhbHVlID0gaXRlcmF0ZWUob2JqKTsKICAgIHZhciBsb3cgPSAwLCBoaWdoID0gZ2V0TGVuZ3RoKGFycmF5KTsKICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7CiAgICAgIHZhciBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpOwogICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbbWlkXSkgPCB2YWx1ZSkgbG93ID0gbWlkICsgMTsgZWxzZSBoaWdoID0gbWlkOwogICAgfQogICAgcmV0dXJuIGxvdzsKICB9CgogIC8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBgXy5pbmRleE9mYCBhbmQgYF8ubGFzdEluZGV4T2ZgIGZ1bmN0aW9ucy4KICBmdW5jdGlvbiBjcmVhdGVJbmRleEZpbmRlcihkaXIsIHByZWRpY2F0ZUZpbmQsIHNvcnRlZEluZGV4KSB7CiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGlkeCkgewogICAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7CiAgICAgIGlmICh0eXBlb2YgaWR4ID09ICdudW1iZXInKSB7CiAgICAgICAgaWYgKGRpciA+IDApIHsKICAgICAgICAgIGkgPSBpZHggPj0gMCA/IGlkeCA6IE1hdGgubWF4KGlkeCArIGxlbmd0aCwgaSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxlbmd0aCA9IGlkeCA+PSAwID8gTWF0aC5taW4oaWR4ICsgMSwgbGVuZ3RoKSA6IGlkeCArIGxlbmd0aCArIDE7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHNvcnRlZEluZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHsKICAgICAgICBpZHggPSBzb3J0ZWRJbmRleChhcnJheSwgaXRlbSk7CiAgICAgICAgcmV0dXJuIGFycmF5W2lkeF0gPT09IGl0ZW0gPyBpZHggOiAtMTsKICAgICAgfQogICAgICBpZiAoaXRlbSAhPT0gaXRlbSkgewogICAgICAgIGlkeCA9IHByZWRpY2F0ZUZpbmQoc2xpY2UuY2FsbChhcnJheSwgaSwgbGVuZ3RoKSwgaXNOYU4kMSk7CiAgICAgICAgcmV0dXJuIGlkeCA+PSAwID8gaWR4ICsgaSA6IC0xOwogICAgICB9CiAgICAgIGZvciAoaWR4ID0gZGlyID4gMCA/IGkgOiBsZW5ndGggLSAxOyBpZHggPj0gMCAmJiBpZHggPCBsZW5ndGg7IGlkeCArPSBkaXIpIHsKICAgICAgICBpZiAoYXJyYXlbaWR4XSA9PT0gaXRlbSkgcmV0dXJuIGlkeDsKICAgICAgfQogICAgICByZXR1cm4gLTE7CiAgICB9OwogIH0KCiAgLy8gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LAogIC8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuCiAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNvcnQgb3JkZXIsIHBhc3MgYHRydWVgCiAgLy8gZm9yICoqaXNTb3J0ZWQqKiB0byB1c2UgYmluYXJ5IHNlYXJjaC4KICB2YXIgaW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKDEsIGZpbmRJbmRleCwgc29ydGVkSW5kZXgpOwoKICAvLyBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSwKICAvLyBvciAtMSBpZiB0aGUgaXRlbSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5LgogIHZhciBsYXN0SW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKC0xLCBmaW5kTGFzdEluZGV4KTsKCiAgLy8gUmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSB3aGljaCBwYXNzZXMgYSB0cnV0aCB0ZXN0LgogIGZ1bmN0aW9uIGZpbmQob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHsKICAgIHZhciBrZXlGaW5kZXIgPSBpc0FycmF5TGlrZShvYmopID8gZmluZEluZGV4IDogZmluZEtleTsKICAgIHZhciBrZXkgPSBrZXlGaW5kZXIob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpOwogICAgaWYgKGtleSAhPT0gdm9pZCAwICYmIGtleSAhPT0gLTEpIHJldHVybiBvYmpba2V5XTsKICB9CgogIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYF8uZmluZGA6IGdldHRpbmcgdGhlIGZpcnN0CiAgLy8gb2JqZWN0IGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuCiAgZnVuY3Rpb24gZmluZFdoZXJlKG9iaiwgYXR0cnMpIHsKICAgIHJldHVybiBmaW5kKG9iaiwgbWF0Y2hlcihhdHRycykpOwogIH0KCiAgLy8gVGhlIGNvcm5lcnN0b25lIGZvciBjb2xsZWN0aW9uIGZ1bmN0aW9ucywgYW4gYGVhY2hgCiAgLy8gaW1wbGVtZW50YXRpb24sIGFrYSBgZm9yRWFjaGAuCiAgLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbAogIC8vIHNwYXJzZSBhcnJheS1saWtlcyBhcyBpZiB0aGV5IHdlcmUgZGVuc2UuCiAgZnVuY3Rpb24gZWFjaChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7CiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQpOwogICAgdmFyIGksIGxlbmd0aDsKICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7CiAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGl0ZXJhdGVlKG9ialtpXSwgaSwgb2JqKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdmFyIF9rZXlzID0ga2V5cyhvYmopOwogICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGl0ZXJhdGVlKG9ialtfa2V5c1tpXV0sIF9rZXlzW2ldLCBvYmopOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gb2JqOwogIH0KCiAgLy8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQuCiAgZnVuY3Rpb24gbWFwKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHsKICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpOwogICAgdmFyIF9rZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYga2V5cyhvYmopLAogICAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aCwKICAgICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTsKICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKICAgICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5cyA/IF9rZXlzW2luZGV4XSA6IGluZGV4OwogICAgICByZXN1bHRzW2luZGV4XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KCiAgLy8gSW50ZXJuYWwgaGVscGVyIHRvIGNyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9uLCBpdGVyYXRpbmcgbGVmdCBvciByaWdodC4KICBmdW5jdGlvbiBjcmVhdGVSZWR1Y2UoZGlyKSB7CiAgICAvLyBXcmFwIGNvZGUgdGhhdCByZWFzc2lnbnMgYXJndW1lbnQgdmFyaWFibGVzIGluIGEgc2VwYXJhdGUgZnVuY3Rpb24gdGhhbgogICAgLy8gdGhlIG9uZSB0aGF0IGFjY2Vzc2VzIGBhcmd1bWVudHMubGVuZ3RoYCB0byBhdm9pZCBhIHBlcmYgaGl0LiAoIzE5OTEpCiAgICB2YXIgcmVkdWNlciA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGluaXRpYWwpIHsKICAgICAgdmFyIF9rZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYga2V5cyhvYmopLAogICAgICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoLAogICAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7CiAgICAgIGlmICghaW5pdGlhbCkgewogICAgICAgIG1lbW8gPSBvYmpbX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleF07CiAgICAgICAgaW5kZXggKz0gZGlyOwogICAgICB9CiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHsKICAgICAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7CiAgICAgICAgbWVtbyA9IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTsKICAgICAgfQogICAgICByZXR1cm4gbWVtbzsKICAgIH07CgogICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGNvbnRleHQpIHsKICAgICAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoID49IDM7CiAgICAgIHJldHVybiByZWR1Y2VyKG9iaiwgb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgNCksIG1lbW8sIGluaXRpYWwpOwogICAgfTsKICB9CgogIC8vICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5qZWN0YCwKICAvLyBvciBgZm9sZGxgLgogIHZhciByZWR1Y2UgPSBjcmVhdGVSZWR1Y2UoMSk7CgogIC8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVjZSwgYWxzbyBrbm93biBhcyBgZm9sZHJgLgogIHZhciByZWR1Y2VSaWdodCA9IGNyZWF0ZVJlZHVjZSgtMSk7CgogIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuCiAgZnVuY3Rpb24gZmlsdGVyKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTsKICAgIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHsKICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1bHRzLnB1c2godmFsdWUpOwogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0czsKICB9CgogIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuCiAgZnVuY3Rpb24gcmVqZWN0KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7CiAgICByZXR1cm4gZmlsdGVyKG9iaiwgbmVnYXRlKGNiKHByZWRpY2F0ZSkpLCBjb250ZXh0KTsKICB9CgogIC8vIERldGVybWluZSB3aGV0aGVyIGFsbCBvZiB0aGUgZWxlbWVudHMgcGFzcyBhIHRydXRoIHRlc3QuCiAgZnVuY3Rpb24gZXZlcnkob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHsKICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7CiAgICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksCiAgICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoOwogICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgewogICAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7CiAgICAgIGlmICghcHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVjdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LgogIGZ1bmN0aW9uIHNvbWUob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHsKICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7CiAgICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksCiAgICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoOwogICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgewogICAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7CiAgICAgIGlmIChwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gaXRlbSAodXNpbmcgYD09PWApLgogIGZ1bmN0aW9uIGNvbnRhaW5zKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkgewogICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSB2YWx1ZXMob2JqKTsKICAgIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9ICdudW1iZXInIHx8IGd1YXJkKSBmcm9tSW5kZXggPSAwOwogICAgcmV0dXJuIGluZGV4T2Yob2JqLCBpdGVtLCBmcm9tSW5kZXgpID49IDA7CiAgfQoKICAvLyBJbnZva2UgYSBtZXRob2QgKHdpdGggYXJndW1lbnRzKSBvbiBldmVyeSBpdGVtIGluIGEgY29sbGVjdGlvbi4KICB2YXIgaW52b2tlID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIHBhdGgsIGFyZ3MpIHsKICAgIHZhciBjb250ZXh0UGF0aCwgZnVuYzsKICAgIGlmIChpc0Z1bmN0aW9uJDEocGF0aCkpIHsKICAgICAgZnVuYyA9IHBhdGg7CiAgICB9IGVsc2UgewogICAgICBwYXRoID0gdG9QYXRoKHBhdGgpOwogICAgICBjb250ZXh0UGF0aCA9IHBhdGguc2xpY2UoMCwgLTEpOwogICAgICBwYXRoID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdOwogICAgfQogICAgcmV0dXJuIG1hcChvYmosIGZ1bmN0aW9uKGNvbnRleHQpIHsKICAgICAgdmFyIG1ldGhvZCA9IGZ1bmM7CiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgaWYgKGNvbnRleHRQYXRoICYmIGNvbnRleHRQYXRoLmxlbmd0aCkgewogICAgICAgICAgY29udGV4dCA9IGRlZXBHZXQoY29udGV4dCwgY29udGV4dFBhdGgpOwogICAgICAgIH0KICAgICAgICBpZiAoY29udGV4dCA9PSBudWxsKSByZXR1cm4gdm9pZCAwOwogICAgICAgIG1ldGhvZCA9IGNvbnRleHRbcGF0aF07CiAgICAgIH0KICAgICAgcmV0dXJuIG1ldGhvZCA9PSBudWxsID8gbWV0aG9kIDogbWV0aG9kLmFwcGx5KGNvbnRleHQsIGFyZ3MpOwogICAgfSk7CiAgfSk7CgogIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYF8ubWFwYDogZmV0Y2hpbmcgYSBwcm9wZXJ0eS4KICBmdW5jdGlvbiBwbHVjayhvYmosIGtleSkgewogICAgcmV0dXJuIG1hcChvYmosIHByb3BlcnR5KGtleSkpOwogIH0KCiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgXy5maWx0ZXJgOiBzZWxlY3Rpbmcgb25seQogIC8vIG9iamVjdHMgY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy4KICBmdW5jdGlvbiB3aGVyZShvYmosIGF0dHJzKSB7CiAgICByZXR1cm4gZmlsdGVyKG9iaiwgbWF0Y2hlcihhdHRycykpOwogIH0KCiAgLy8gUmV0dXJuIHRoZSBtYXhpbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLgogIGZ1bmN0aW9uIG1heChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7CiAgICB2YXIgcmVzdWx0ID0gLUluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSAtSW5maW5pdHksCiAgICAgICAgdmFsdWUsIGNvbXB1dGVkOwogICAgaWYgKGl0ZXJhdGVlID09IG51bGwgfHwgKHR5cGVvZiBpdGVyYXRlZSA9PSAnbnVtYmVyJyAmJiB0eXBlb2Ygb2JqWzBdICE9ICdvYmplY3QnICYmIG9iaiAhPSBudWxsKSkgewogICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogdmFsdWVzKG9iaik7CiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICB2YWx1ZSA9IG9ialtpXTsKICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSA+IHJlc3VsdCkgewogICAgICAgICAgcmVzdWx0ID0gdmFsdWU7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTsKICAgICAgZWFjaChvYmosIGZ1bmN0aW9uKHYsIGluZGV4LCBsaXN0KSB7CiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2LCBpbmRleCwgbGlzdCk7CiAgICAgICAgaWYgKGNvbXB1dGVkID4gbGFzdENvbXB1dGVkIHx8IChjb21wdXRlZCA9PT0gLUluZmluaXR5ICYmIHJlc3VsdCA9PT0gLUluZmluaXR5KSkgewogICAgICAgICAgcmVzdWx0ID0gdjsKICAgICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gUmV0dXJuIHRoZSBtaW5pbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLgogIGZ1bmN0aW9uIG1pbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7CiAgICB2YXIgcmVzdWx0ID0gSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IEluZmluaXR5LAogICAgICAgIHZhbHVlLCBjb21wdXRlZDsKICAgIGlmIChpdGVyYXRlZSA9PSBudWxsIHx8ICh0eXBlb2YgaXRlcmF0ZWUgPT0gJ251bWJlcicgJiYgdHlwZW9mIG9ialswXSAhPSAnb2JqZWN0JyAmJiBvYmogIT0gbnVsbCkpIHsKICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IHZhbHVlcyhvYmopOwogICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFsdWUgPSBvYmpbaV07CiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPCByZXN1bHQpIHsKICAgICAgICAgIHJlc3VsdCA9IHZhbHVlOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7CiAgICAgIGVhY2gob2JqLCBmdW5jdGlvbih2LCBpbmRleCwgbGlzdCkgewogICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodiwgaW5kZXgsIGxpc3QpOwogICAgICAgIGlmIChjb21wdXRlZCA8IGxhc3RDb21wdXRlZCB8fCAoY29tcHV0ZWQgPT09IEluZmluaXR5ICYmIHJlc3VsdCA9PT0gSW5maW5pdHkpKSB7CiAgICAgICAgICByZXN1bHQgPSB2OwogICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBTYWZlbHkgY3JlYXRlIGEgcmVhbCwgbGl2ZSBhcnJheSBmcm9tIGFueXRoaW5nIGl0ZXJhYmxlLgogIHZhciByZVN0clN5bWJvbCA9IC9bXlx1ZDgwMC1cdWRmZmZdfFtcdWQ4MDAtXHVkYmZmXVtcdWRjMDAtXHVkZmZmXXxbXHVkODAwLVx1ZGZmZl0vZzsKICBmdW5jdGlvbiB0b0FycmF5KG9iaikgewogICAgaWYgKCFvYmopIHJldHVybiBbXTsKICAgIGlmIChpc0FycmF5KG9iaikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7CiAgICBpZiAoaXNTdHJpbmcob2JqKSkgewogICAgICAvLyBLZWVwIHN1cnJvZ2F0ZSBwYWlyIGNoYXJhY3RlcnMgdG9nZXRoZXIuCiAgICAgIHJldHVybiBvYmoubWF0Y2gocmVTdHJTeW1ib2wpOwogICAgfQogICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBtYXAob2JqLCBpZGVudGl0eSk7CiAgICByZXR1cm4gdmFsdWVzKG9iaik7CiAgfQoKICAvLyBTYW1wbGUgKipuKiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbiB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlCiAgLy8gW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXLigJNZYXRlc19zaHVmZmxlKS4KICAvLyBJZiAqKm4qKiBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIGEgc2luZ2xlIHJhbmRvbSBlbGVtZW50LgogIC8vIFRoZSBpbnRlcm5hbCBgZ3VhcmRgIGFyZ3VtZW50IGFsbG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC4KICBmdW5jdGlvbiBzYW1wbGUob2JqLCBuLCBndWFyZCkgewogICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgewogICAgICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IHZhbHVlcyhvYmopOwogICAgICByZXR1cm4gb2JqW3JhbmRvbShvYmoubGVuZ3RoIC0gMSldOwogICAgfQogICAgdmFyIHNhbXBsZSA9IHRvQXJyYXkob2JqKTsKICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoc2FtcGxlKTsKICAgIG4gPSBNYXRoLm1heChNYXRoLm1pbihuLCBsZW5ndGgpLCAwKTsKICAgIHZhciBsYXN0ID0gbGVuZ3RoIC0gMTsKICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBuOyBpbmRleCsrKSB7CiAgICAgIHZhciByYW5kID0gcmFuZG9tKGluZGV4LCBsYXN0KTsKICAgICAgdmFyIHRlbXAgPSBzYW1wbGVbaW5kZXhdOwogICAgICBzYW1wbGVbaW5kZXhdID0gc2FtcGxlW3JhbmRdOwogICAgICBzYW1wbGVbcmFuZF0gPSB0ZW1wOwogICAgfQogICAgcmV0dXJuIHNhbXBsZS5zbGljZSgwLCBuKTsKICB9CgogIC8vIFNodWZmbGUgYSBjb2xsZWN0aW9uLgogIGZ1bmN0aW9uIHNodWZmbGUob2JqKSB7CiAgICByZXR1cm4gc2FtcGxlKG9iaiwgSW5maW5pdHkpOwogIH0KCiAgLy8gU29ydCB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdGVlLgogIGZ1bmN0aW9uIHNvcnRCeShvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7CiAgICB2YXIgaW5kZXggPSAwOwogICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7CiAgICByZXR1cm4gcGx1Y2sobWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtleSwgbGlzdCkgewogICAgICByZXR1cm4gewogICAgICAgIHZhbHVlOiB2YWx1ZSwKICAgICAgICBpbmRleDogaW5kZXgrKywKICAgICAgICBjcml0ZXJpYTogaXRlcmF0ZWUodmFsdWUsIGtleSwgbGlzdCkKICAgICAgfTsKICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHsKICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhOwogICAgICB2YXIgYiA9IHJpZ2h0LmNyaXRlcmlhOwogICAgICBpZiAoYSAhPT0gYikgewogICAgICAgIGlmIChhID4gYiB8fCBhID09PSB2b2lkIDApIHJldHVybiAxOwogICAgICAgIGlmIChhIDwgYiB8fCBiID09PSB2b2lkIDApIHJldHVybiAtMTsKICAgICAgfQogICAgICByZXR1cm4gbGVmdC5pbmRleCAtIHJpZ2h0LmluZGV4OwogICAgfSksICd2YWx1ZScpOwogIH0KCiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlICJncm91cCBieSIgb3BlcmF0aW9ucy4KICBmdW5jdGlvbiBncm91cChiZWhhdmlvciwgcGFydGl0aW9uKSB7CiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkgewogICAgICB2YXIgcmVzdWx0ID0gcGFydGl0aW9uID8gW1tdLCBbXV0gOiB7fTsKICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7CiAgICAgIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKICAgICAgICB2YXIga2V5ID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBvYmopOwogICAgICAgIGJlaGF2aW9yKHJlc3VsdCwgdmFsdWUsIGtleSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICB9CgogIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUKICAvLyB0byBncm91cCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNyaXRlcmlvbi4KICB2YXIgZ3JvdXBCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkgewogICAgaWYgKGhhcyQxKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0ucHVzaCh2YWx1ZSk7IGVsc2UgcmVzdWx0W2tleV0gPSBbdmFsdWVdOwogIH0pOwoKICAvLyBJbmRleGVzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24sIHNpbWlsYXIgdG8gYF8uZ3JvdXBCeWAsIGJ1dCBmb3IKICAvLyB3aGVuIHlvdSBrbm93IHRoYXQgeW91ciBpbmRleCB2YWx1ZXMgd2lsbCBiZSB1bmlxdWUuCiAgdmFyIGluZGV4QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHsKICAgIHJlc3VsdFtrZXldID0gdmFsdWU7CiAgfSk7CgogIC8vIENvdW50cyBpbnN0YW5jZXMgb2YgYW4gb2JqZWN0IHRoYXQgZ3JvdXAgYnkgYSBjZXJ0YWluIGNyaXRlcmlvbi4gUGFzcwogIC8vIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUgdG8gY291bnQgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZQogIC8vIGNyaXRlcmlvbi4KICB2YXIgY291bnRCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkgewogICAgaWYgKGhhcyQxKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0rKzsgZWxzZSByZXN1bHRba2V5XSA9IDE7CiAgfSk7CgogIC8vIFNwbGl0IGEgY29sbGVjdGlvbiBpbnRvIHR3byBhcnJheXM6IG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgcGFzcyB0aGUgZ2l2ZW4KICAvLyB0cnV0aCB0ZXN0LCBhbmQgb25lIHdob3NlIGVsZW1lbnRzIGFsbCBkbyBub3QgcGFzcyB0aGUgdHJ1dGggdGVzdC4KICB2YXIgcGFydGl0aW9uID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwgcGFzcykgewogICAgcmVzdWx0W3Bhc3MgPyAwIDogMV0ucHVzaCh2YWx1ZSk7CiAgfSwgdHJ1ZSk7CgogIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgY29sbGVjdGlvbi4KICBmdW5jdGlvbiBzaXplKG9iaikgewogICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDsKICAgIHJldHVybiBpc0FycmF5TGlrZShvYmopID8gb2JqLmxlbmd0aCA6IGtleXMob2JqKS5sZW5ndGg7CiAgfQoKICAvLyBJbnRlcm5hbCBgXy5waWNrYCBoZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYGtleWAgaXMgYW4gZW51bWVyYWJsZQogIC8vIHByb3BlcnR5IG5hbWUgb2YgYG9iamAuCiAgZnVuY3Rpb24ga2V5SW5PYmoodmFsdWUsIGtleSwgb2JqKSB7CiAgICByZXR1cm4ga2V5IGluIG9iajsKICB9CgogIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCBvbmx5IGNvbnRhaW5pbmcgdGhlIGFsbG93ZWQgcHJvcGVydGllcy4KICB2YXIgcGljayA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBrZXlzKSB7CiAgICB2YXIgcmVzdWx0ID0ge30sIGl0ZXJhdGVlID0ga2V5c1swXTsKICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKICAgIGlmIChpc0Z1bmN0aW9uJDEoaXRlcmF0ZWUpKSB7CiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwga2V5c1sxXSk7CiAgICAgIGtleXMgPSBhbGxLZXlzKG9iaik7CiAgICB9IGVsc2UgewogICAgICBpdGVyYXRlZSA9IGtleUluT2JqOwogICAgICBrZXlzID0gZmxhdHRlbiQxKGtleXMsIGZhbHNlLCBmYWxzZSk7CiAgICAgIG9iaiA9IE9iamVjdChvYmopOwogICAgfQogICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGtleSA9IGtleXNbaV07CiAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldOwogICAgICBpZiAoaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqKSkgcmVzdWx0W2tleV0gPSB2YWx1ZTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfSk7CgogIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBkaXNhbGxvd2VkIHByb3BlcnRpZXMuCiAgdmFyIG9taXQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykgewogICAgdmFyIGl0ZXJhdGVlID0ga2V5c1swXSwgY29udGV4dDsKICAgIGlmIChpc0Z1bmN0aW9uJDEoaXRlcmF0ZWUpKSB7CiAgICAgIGl0ZXJhdGVlID0gbmVnYXRlKGl0ZXJhdGVlKTsKICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgY29udGV4dCA9IGtleXNbMV07CiAgICB9IGVsc2UgewogICAgICBrZXlzID0gbWFwKGZsYXR0ZW4kMShrZXlzLCBmYWxzZSwgZmFsc2UpLCBTdHJpbmcpOwogICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsKICAgICAgICByZXR1cm4gIWNvbnRhaW5zKGtleXMsIGtleSk7CiAgICAgIH07CiAgICB9CiAgICByZXR1cm4gcGljayhvYmosIGl0ZXJhdGVlLCBjb250ZXh0KTsKICB9KTsKCiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgbGFzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEVzcGVjaWFsbHkgdXNlZnVsIG9uCiAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW4KICAvLyB0aGUgYXJyYXksIGV4Y2x1ZGluZyB0aGUgbGFzdCBOLgogIGZ1bmN0aW9uIGluaXRpYWwoYXJyYXksIG4sIGd1YXJkKSB7CiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgMCwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gKG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKSkpOwogIH0KCiAgLy8gR2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOCiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS4gVGhlICoqZ3VhcmQqKiBjaGVjayBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuCiAgZnVuY3Rpb24gZmlyc3QoYXJyYXksIG4sIGd1YXJkKSB7CiAgICBpZiAoYXJyYXkgPT0gbnVsbCB8fCBhcnJheS5sZW5ndGggPCAxKSByZXR1cm4gbiA9PSBudWxsIHx8IGd1YXJkID8gdm9pZCAwIDogW107CiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbMF07CiAgICByZXR1cm4gaW5pdGlhbChhcnJheSwgYXJyYXkubGVuZ3RoIC0gbik7CiAgfQoKICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBmaXJzdCBlbnRyeSBvZiB0aGUgYGFycmF5YC4gRXNwZWNpYWxseSB1c2VmdWwgb24KICAvLyB0aGUgYGFyZ3VtZW50c2Agb2JqZWN0LiBQYXNzaW5nIGFuICoqbioqIHdpbGwgcmV0dXJuIHRoZSByZXN0IE4gdmFsdWVzIGluIHRoZQogIC8vIGBhcnJheWAuCiAgZnVuY3Rpb24gcmVzdChhcnJheSwgbiwgZ3VhcmQpIHsKICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCBuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbik7CiAgfQoKICAvLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOCiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS4KICBmdW5jdGlvbiBsYXN0KGFycmF5LCBuLCBndWFyZCkgewogICAgaWYgKGFycmF5ID09IG51bGwgfHwgYXJyYXkubGVuZ3RoIDwgMSkgcmV0dXJuIG4gPT0gbnVsbCB8fCBndWFyZCA/IHZvaWQgMCA6IFtdOwogICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdOwogICAgcmV0dXJuIHJlc3QoYXJyYXksIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIG4pKTsKICB9CgogIC8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS4KICBmdW5jdGlvbiBjb21wYWN0KGFycmF5KSB7CiAgICByZXR1cm4gZmlsdGVyKGFycmF5LCBCb29sZWFuKTsKICB9CgogIC8vIEZsYXR0ZW4gb3V0IGFuIGFycmF5LCBlaXRoZXIgcmVjdXJzaXZlbHkgKGJ5IGRlZmF1bHQpLCBvciB1cCB0byBgZGVwdGhgLgogIC8vIFBhc3NpbmcgYHRydWVgIG9yIGBmYWxzZWAgYXMgYGRlcHRoYCBtZWFucyBgMWAgb3IgYEluZmluaXR5YCwgcmVzcGVjdGl2ZWx5LgogIGZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXksIGRlcHRoKSB7CiAgICByZXR1cm4gZmxhdHRlbiQxKGFycmF5LCBkZXB0aCwgZmFsc2UpOwogIH0KCiAgLy8gVGFrZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9uZSBhcnJheSBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgYXJyYXlzLgogIC8vIE9ubHkgdGhlIGVsZW1lbnRzIHByZXNlbnQgaW4ganVzdCB0aGUgZmlyc3QgYXJyYXkgd2lsbCByZW1haW4uCiAgdmFyIGRpZmZlcmVuY2UgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5LCByZXN0KSB7CiAgICByZXN0ID0gZmxhdHRlbiQxKHJlc3QsIHRydWUsIHRydWUpOwogICAgcmV0dXJuIGZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpewogICAgICByZXR1cm4gIWNvbnRhaW5zKHJlc3QsIHZhbHVlKTsKICAgIH0pOwogIH0pOwoKICAvLyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS4KICB2YXIgd2l0aG91dCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXksIG90aGVyQXJyYXlzKSB7CiAgICByZXR1cm4gZGlmZmVyZW5jZShhcnJheSwgb3RoZXJBcnJheXMpOwogIH0pOwoKICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeQogIC8vIGJlZW4gc29ydGVkLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIGEgZmFzdGVyIGFsZ29yaXRobS4KICAvLyBUaGUgZmFzdGVyIGFsZ29yaXRobSB3aWxsIG5vdCB3b3JrIHdpdGggYW4gaXRlcmF0ZWUgaWYgdGhlIGl0ZXJhdGVlCiAgLy8gaXMgbm90IGEgb25lLXRvLW9uZSBmdW5jdGlvbiwgc28gcHJvdmlkaW5nIGFuIGl0ZXJhdGVlIHdpbGwgZGlzYWJsZQogIC8vIHRoZSBmYXN0ZXIgYWxnb3JpdGhtLgogIGZ1bmN0aW9uIHVuaXEoYXJyYXksIGlzU29ydGVkLCBpdGVyYXRlZSwgY29udGV4dCkgewogICAgaWYgKCFpc0Jvb2xlYW4oaXNTb3J0ZWQpKSB7CiAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTsKICAgICAgaXRlcmF0ZWUgPSBpc1NvcnRlZDsKICAgICAgaXNTb3J0ZWQgPSBmYWxzZTsKICAgIH0KICAgIGlmIChpdGVyYXRlZSAhPSBudWxsKSBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTsKICAgIHZhciByZXN1bHQgPSBbXTsKICAgIHZhciBzZWVuID0gW107CiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldLAogICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSkgOiB2YWx1ZTsKICAgICAgaWYgKGlzU29ydGVkICYmICFpdGVyYXRlZSkgewogICAgICAgIGlmICghaSB8fCBzZWVuICE9PSBjb21wdXRlZCkgcmVzdWx0LnB1c2godmFsdWUpOwogICAgICAgIHNlZW4gPSBjb21wdXRlZDsKICAgICAgfSBlbHNlIGlmIChpdGVyYXRlZSkgewogICAgICAgIGlmICghY29udGFpbnMoc2VlbiwgY29tcHV0ZWQpKSB7CiAgICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpOwogICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICghY29udGFpbnMocmVzdWx0LCB2YWx1ZSkpIHsKICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBhbGwgb2YKICAvLyB0aGUgcGFzc2VkLWluIGFycmF5cy4KICB2YXIgdW5pb24gPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5cykgewogICAgcmV0dXJuIHVuaXEoZmxhdHRlbiQxKGFycmF5cywgdHJ1ZSwgdHJ1ZSkpOwogIH0pOwoKICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgZXZlcnkgaXRlbSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlCiAgLy8gcGFzc2VkLWluIGFycmF5cy4KICBmdW5jdGlvbiBpbnRlcnNlY3Rpb24oYXJyYXkpIHsKICAgIHZhciByZXN1bHQgPSBbXTsKICAgIHZhciBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGl0ZW0gPSBhcnJheVtpXTsKICAgICAgaWYgKGNvbnRhaW5zKHJlc3VsdCwgaXRlbSkpIGNvbnRpbnVlOwogICAgICB2YXIgajsKICAgICAgZm9yIChqID0gMTsgaiA8IGFyZ3NMZW5ndGg7IGorKykgewogICAgICAgIGlmICghY29udGFpbnMoYXJndW1lbnRzW2pdLCBpdGVtKSkgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKGogPT09IGFyZ3NMZW5ndGgpIHJlc3VsdC5wdXNoKGl0ZW0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIENvbXBsZW1lbnQgb2YgemlwLiBVbnppcCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyBhbmQgZ3JvdXBzCiAgLy8gZWFjaCBhcnJheSdzIGVsZW1lbnRzIG9uIHNoYXJlZCBpbmRpY2VzLgogIGZ1bmN0aW9uIHVuemlwKGFycmF5KSB7CiAgICB2YXIgbGVuZ3RoID0gKGFycmF5ICYmIG1heChhcnJheSwgZ2V0TGVuZ3RoKS5sZW5ndGgpIHx8IDA7CiAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTsKCiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgIHJlc3VsdFtpbmRleF0gPSBwbHVjayhhcnJheSwgaW5kZXgpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIFppcCB0b2dldGhlciBtdWx0aXBsZSBsaXN0cyBpbnRvIGEgc2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRoYXQgc2hhcmUKICAvLyBhbiBpbmRleCBnbyB0b2dldGhlci4KICB2YXIgemlwID0gcmVzdEFyZ3VtZW50cyh1bnppcCk7CgogIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWAKICAvLyBwYWlycywgb3IgdHdvIHBhcmFsbGVsIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGggLS0gb25lIG9mIGtleXMsIGFuZCBvbmUgb2YKICAvLyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuIFBhc3NpbmcgYnkgcGFpcnMgaXMgdGhlIHJldmVyc2Ugb2YgYF8ucGFpcnNgLgogIGZ1bmN0aW9uIG9iamVjdChsaXN0LCB2YWx1ZXMpIHsKICAgIHZhciByZXN1bHQgPSB7fTsKICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgobGlzdCk7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBpZiAodmFsdWVzKSB7CiAgICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdFtsaXN0W2ldWzBdXSA9IGxpc3RbaV1bMV07CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBHZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJpdGhtZXRpYyBwcm9ncmVzc2lvbi4gQSBwb3J0IG9mCiAgLy8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWUKICAvLyBbdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uXShodHRwczovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS4KICBmdW5jdGlvbiByYW5nZShzdGFydCwgc3RvcCwgc3RlcCkgewogICAgaWYgKHN0b3AgPT0gbnVsbCkgewogICAgICBzdG9wID0gc3RhcnQgfHwgMDsKICAgICAgc3RhcnQgPSAwOwogICAgfQogICAgaWYgKCFzdGVwKSB7CiAgICAgIHN0ZXAgPSBzdG9wIDwgc3RhcnQgPyAtMSA6IDE7CiAgICB9CgogICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApLCAwKTsKICAgIHZhciByYW5nZSA9IEFycmF5KGxlbmd0aCk7CgogICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbGVuZ3RoOyBpZHgrKywgc3RhcnQgKz0gc3RlcCkgewogICAgICByYW5nZVtpZHhdID0gc3RhcnQ7CiAgICB9CgogICAgcmV0dXJuIHJhbmdlOwogIH0KCiAgLy8gQ2h1bmsgYSBzaW5nbGUgYXJyYXkgaW50byBtdWx0aXBsZSBhcnJheXMsIGVhY2ggY29udGFpbmluZyBgY291bnRgIG9yIGZld2VyCiAgLy8gaXRlbXMuCiAgZnVuY3Rpb24gY2h1bmsoYXJyYXksIGNvdW50KSB7CiAgICBpZiAoY291bnQgPT0gbnVsbCB8fCBjb3VudCA8IDEpIHJldHVybiBbXTsKICAgIHZhciByZXN1bHQgPSBbXTsKICAgIHZhciBpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOwogICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKICAgICAgcmVzdWx0LnB1c2goc2xpY2UuY2FsbChhcnJheSwgaSwgaSArPSBjb3VudCkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjb250aW51ZSBjaGFpbmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy4KICBmdW5jdGlvbiBjaGFpblJlc3VsdChpbnN0YW5jZSwgb2JqKSB7CiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWluID8gXyQxKG9iaikuY2hhaW4oKSA6IG9iajsKICB9CgogIC8vIEFkZCB5b3VyIG93biBjdXN0b20gZnVuY3Rpb25zIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC4KICBmdW5jdGlvbiBtaXhpbihvYmopIHsKICAgIGVhY2goZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgdmFyIGZ1bmMgPSBfJDFbbmFtZV0gPSBvYmpbbmFtZV07CiAgICAgIF8kMS5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYXJncyA9IFt0aGlzLl93cmFwcGVkXTsKICAgICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7CiAgICAgICAgcmV0dXJuIGNoYWluUmVzdWx0KHRoaXMsIGZ1bmMuYXBwbHkoXyQxLCBhcmdzKSk7CiAgICAgIH07CiAgICB9KTsKICAgIHJldHVybiBfJDE7CiAgfQoKICAvLyBBZGQgYWxsIG11dGF0b3IgYEFycmF5YCBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuCiAgZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1lKSB7CiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTsKICAgIF8kMS5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHsKICAgICAgdmFyIG9iaiA9IHRoaXMuX3dyYXBwZWQ7CiAgICAgIGlmIChvYmogIT0gbnVsbCkgewogICAgICAgIG1ldGhvZC5hcHBseShvYmosIGFyZ3VtZW50cyk7CiAgICAgICAgaWYgKChuYW1lID09PSAnc2hpZnQnIHx8IG5hbWUgPT09ICdzcGxpY2UnKSAmJiBvYmoubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICBkZWxldGUgb2JqWzBdOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgb2JqKTsKICAgIH07CiAgfSk7CgogIC8vIEFkZCBhbGwgYWNjZXNzb3IgYEFycmF5YCBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuCiAgZWFjaChbJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10sIGZ1bmN0aW9uKG5hbWUpIHsKICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdOwogICAgXyQxLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDsKICAgICAgaWYgKG9iaiAhPSBudWxsKSBvYmogPSBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpOwogICAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgb2JqKTsKICAgIH07CiAgfSk7CgogIC8vIE5hbWVkIEV4cG9ydHMKCiAgdmFyIGFsbEV4cG9ydHMgPSB7CiAgICBfX3Byb3RvX186IG51bGwsCiAgICBWRVJTSU9OOiBWRVJTSU9OLAogICAgcmVzdEFyZ3VtZW50czogcmVzdEFyZ3VtZW50cywKICAgIGlzT2JqZWN0OiBpc09iamVjdCwKICAgIGlzTnVsbDogaXNOdWxsLAogICAgaXNVbmRlZmluZWQ6IGlzVW5kZWZpbmVkLAogICAgaXNCb29sZWFuOiBpc0Jvb2xlYW4sCiAgICBpc0VsZW1lbnQ6IGlzRWxlbWVudCwKICAgIGlzU3RyaW5nOiBpc1N0cmluZywKICAgIGlzTnVtYmVyOiBpc051bWJlciwKICAgIGlzRGF0ZTogaXNEYXRlLAogICAgaXNSZWdFeHA6IGlzUmVnRXhwLAogICAgaXNFcnJvcjogaXNFcnJvciwKICAgIGlzU3ltYm9sOiBpc1N5bWJvbCwKICAgIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsCiAgICBpc0RhdGFWaWV3OiBpc0RhdGFWaWV3JDEsCiAgICBpc0FycmF5OiBpc0FycmF5LAogICAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbiQxLAogICAgaXNBcmd1bWVudHM6IGlzQXJndW1lbnRzJDEsCiAgICBpc0Zpbml0ZTogaXNGaW5pdGUkMSwKICAgIGlzTmFOOiBpc05hTiQxLAogICAgaXNUeXBlZEFycmF5OiBpc1R5cGVkQXJyYXkkMSwKICAgIGlzRW1wdHk6IGlzRW1wdHksCiAgICBpc01hdGNoOiBpc01hdGNoLAogICAgaXNFcXVhbDogaXNFcXVhbCwKICAgIGlzTWFwOiBpc01hcCwKICAgIGlzV2Vha01hcDogaXNXZWFrTWFwLAogICAgaXNTZXQ6IGlzU2V0LAogICAgaXNXZWFrU2V0OiBpc1dlYWtTZXQsCiAgICBrZXlzOiBrZXlzLAogICAgYWxsS2V5czogYWxsS2V5cywKICAgIHZhbHVlczogdmFsdWVzLAogICAgcGFpcnM6IHBhaXJzLAogICAgaW52ZXJ0OiBpbnZlcnQsCiAgICBmdW5jdGlvbnM6IGZ1bmN0aW9ucywKICAgIG1ldGhvZHM6IGZ1bmN0aW9ucywKICAgIGV4dGVuZDogZXh0ZW5kLAogICAgZXh0ZW5kT3duOiBleHRlbmRPd24sCiAgICBhc3NpZ246IGV4dGVuZE93biwKICAgIGRlZmF1bHRzOiBkZWZhdWx0cywKICAgIGNyZWF0ZTogY3JlYXRlLAogICAgY2xvbmU6IGNsb25lLAogICAgdGFwOiB0YXAsCiAgICBnZXQ6IGdldCwKICAgIGhhczogaGFzLAogICAgbWFwT2JqZWN0OiBtYXBPYmplY3QsCiAgICBpZGVudGl0eTogaWRlbnRpdHksCiAgICBjb25zdGFudDogY29uc3RhbnQsCiAgICBub29wOiBub29wLAogICAgdG9QYXRoOiB0b1BhdGgkMSwKICAgIHByb3BlcnR5OiBwcm9wZXJ0eSwKICAgIHByb3BlcnR5T2Y6IHByb3BlcnR5T2YsCiAgICBtYXRjaGVyOiBtYXRjaGVyLAogICAgbWF0Y2hlczogbWF0Y2hlciwKICAgIHRpbWVzOiB0aW1lcywKICAgIHJhbmRvbTogcmFuZG9tLAogICAgbm93OiBub3csCiAgICBlc2NhcGU6IF9lc2NhcGUsCiAgICB1bmVzY2FwZTogX3VuZXNjYXBlLAogICAgdGVtcGxhdGVTZXR0aW5nczogdGVtcGxhdGVTZXR0aW5ncywKICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSwKICAgIHJlc3VsdDogcmVzdWx0LAogICAgdW5pcXVlSWQ6IHVuaXF1ZUlkLAogICAgY2hhaW46IGNoYWluLAogICAgaXRlcmF0ZWU6IGl0ZXJhdGVlLAogICAgcGFydGlhbDogcGFydGlhbCwKICAgIGJpbmQ6IGJpbmQsCiAgICBiaW5kQWxsOiBiaW5kQWxsLAogICAgbWVtb2l6ZTogbWVtb2l6ZSwKICAgIGRlbGF5OiBkZWxheSwKICAgIGRlZmVyOiBkZWZlciwKICAgIHRocm90dGxlOiB0aHJvdHRsZSwKICAgIGRlYm91bmNlOiBkZWJvdW5jZSwKICAgIHdyYXA6IHdyYXAsCiAgICBuZWdhdGU6IG5lZ2F0ZSwKICAgIGNvbXBvc2U6IGNvbXBvc2UsCiAgICBhZnRlcjogYWZ0ZXIsCiAgICBiZWZvcmU6IGJlZm9yZSwKICAgIG9uY2U6IG9uY2UsCiAgICBmaW5kS2V5OiBmaW5kS2V5LAogICAgZmluZEluZGV4OiBmaW5kSW5kZXgsCiAgICBmaW5kTGFzdEluZGV4OiBmaW5kTGFzdEluZGV4LAogICAgc29ydGVkSW5kZXg6IHNvcnRlZEluZGV4LAogICAgaW5kZXhPZjogaW5kZXhPZiwKICAgIGxhc3RJbmRleE9mOiBsYXN0SW5kZXhPZiwKICAgIGZpbmQ6IGZpbmQsCiAgICBkZXRlY3Q6IGZpbmQsCiAgICBmaW5kV2hlcmU6IGZpbmRXaGVyZSwKICAgIGVhY2g6IGVhY2gsCiAgICBmb3JFYWNoOiBlYWNoLAogICAgbWFwOiBtYXAsCiAgICBjb2xsZWN0OiBtYXAsCiAgICByZWR1Y2U6IHJlZHVjZSwKICAgIGZvbGRsOiByZWR1Y2UsCiAgICBpbmplY3Q6IHJlZHVjZSwKICAgIHJlZHVjZVJpZ2h0OiByZWR1Y2VSaWdodCwKICAgIGZvbGRyOiByZWR1Y2VSaWdodCwKICAgIGZpbHRlcjogZmlsdGVyLAogICAgc2VsZWN0OiBmaWx0ZXIsCiAgICByZWplY3Q6IHJlamVjdCwKICAgIGV2ZXJ5OiBldmVyeSwKICAgIGFsbDogZXZlcnksCiAgICBzb21lOiBzb21lLAogICAgYW55OiBzb21lLAogICAgY29udGFpbnM6IGNvbnRhaW5zLAogICAgaW5jbHVkZXM6IGNvbnRhaW5zLAogICAgaW5jbHVkZTogY29udGFpbnMsCiAgICBpbnZva2U6IGludm9rZSwKICAgIHBsdWNrOiBwbHVjaywKICAgIHdoZXJlOiB3aGVyZSwKICAgIG1heDogbWF4LAogICAgbWluOiBtaW4sCiAgICBzaHVmZmxlOiBzaHVmZmxlLAogICAgc2FtcGxlOiBzYW1wbGUsCiAgICBzb3J0Qnk6IHNvcnRCeSwKICAgIGdyb3VwQnk6IGdyb3VwQnksCiAgICBpbmRleEJ5OiBpbmRleEJ5LAogICAgY291bnRCeTogY291bnRCeSwKICAgIHBhcnRpdGlvbjogcGFydGl0aW9uLAogICAgdG9BcnJheTogdG9BcnJheSwKICAgIHNpemU6IHNpemUsCiAgICBwaWNrOiBwaWNrLAogICAgb21pdDogb21pdCwKICAgIGZpcnN0OiBmaXJzdCwKICAgIGhlYWQ6IGZpcnN0LAogICAgdGFrZTogZmlyc3QsCiAgICBpbml0aWFsOiBpbml0aWFsLAogICAgbGFzdDogbGFzdCwKICAgIHJlc3Q6IHJlc3QsCiAgICB0YWlsOiByZXN0LAogICAgZHJvcDogcmVzdCwKICAgIGNvbXBhY3Q6IGNvbXBhY3QsCiAgICBmbGF0dGVuOiBmbGF0dGVuLAogICAgd2l0aG91dDogd2l0aG91dCwKICAgIHVuaXE6IHVuaXEsCiAgICB1bmlxdWU6IHVuaXEsCiAgICB1bmlvbjogdW5pb24sCiAgICBpbnRlcnNlY3Rpb246IGludGVyc2VjdGlvbiwKICAgIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2UsCiAgICB1bnppcDogdW56aXAsCiAgICB0cmFuc3Bvc2U6IHVuemlwLAogICAgemlwOiB6aXAsCiAgICBvYmplY3Q6IG9iamVjdCwKICAgIHJhbmdlOiByYW5nZSwKICAgIGNodW5rOiBjaHVuaywKICAgIG1peGluOiBtaXhpbiwKICAgICdkZWZhdWx0JzogXyQxCiAgfTsKCiAgLy8gRGVmYXVsdCBFeHBvcnQKCiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LgogIHZhciBfID0gbWl4aW4oYWxsRXhwb3J0cyk7CiAgLy8gTGVnYWN5IE5vZGUuanMgQVBJLgogIF8uXyA9IF87CgogIHJldHVybiBfOwoKfSkpKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9dW5kZXJzY29yZS11bWQuanMubWFwCg==]]></data>
	</file>
	<file>
	  <filename>/js/dev/underscore-umd.js.map</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5kZXJzY29yZS11bWQuanMiLCJzb3VyY2VzIjpbIm1vZHVsZXMvX3NldHVwLmpzIiwibW9kdWxlcy9yZXN0QXJndW1lbnRzLmpzIiwibW9kdWxlcy9pc09iamVjdC5qcyIsIm1vZHVsZXMvaXNOdWxsLmpzIiwibW9kdWxlcy9pc1VuZGVmaW5lZC5qcyIsIm1vZHVsZXMvaXNCb29sZWFuLmpzIiwibW9kdWxlcy9pc0VsZW1lbnQuanMiLCJtb2R1bGVzL190YWdUZXN0ZXIuanMiLCJtb2R1bGVzL2lzU3RyaW5nLmpzIiwibW9kdWxlcy9pc051bWJlci5qcyIsIm1vZHVsZXMvaXNEYXRlLmpzIiwibW9kdWxlcy9pc1JlZ0V4cC5qcyIsIm1vZHVsZXMvaXNFcnJvci5qcyIsIm1vZHVsZXMvaXNTeW1ib2wuanMiLCJtb2R1bGVzL2lzQXJyYXlCdWZmZXIuanMiLCJtb2R1bGVzL2lzRnVuY3Rpb24uanMiLCJtb2R1bGVzL19oYXNPYmplY3RUYWcuanMiLCJtb2R1bGVzL19zdHJpbmdUYWdCdWcuanMiLCJtb2R1bGVzL2lzRGF0YVZpZXcuanMiLCJtb2R1bGVzL2lzQXJyYXkuanMiLCJtb2R1bGVzL19oYXMuanMiLCJtb2R1bGVzL2lzQXJndW1lbnRzLmpzIiwibW9kdWxlcy9pc0Zpbml0ZS5qcyIsIm1vZHVsZXMvaXNOYU4uanMiLCJtb2R1bGVzL2NvbnN0YW50LmpzIiwibW9kdWxlcy9fY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2suanMiLCJtb2R1bGVzL19zaGFsbG93UHJvcGVydHkuanMiLCJtb2R1bGVzL19nZXRCeXRlTGVuZ3RoLmpzIiwibW9kdWxlcy9faXNCdWZmZXJMaWtlLmpzIiwibW9kdWxlcy9pc1R5cGVkQXJyYXkuanMiLCJtb2R1bGVzL19nZXRMZW5ndGguanMiLCJtb2R1bGVzL19jb2xsZWN0Tm9uRW51bVByb3BzLmpzIiwibW9kdWxlcy9rZXlzLmpzIiwibW9kdWxlcy9pc0VtcHR5LmpzIiwibW9kdWxlcy9pc01hdGNoLmpzIiwibW9kdWxlcy91bmRlcnNjb3JlLmpzIiwibW9kdWxlcy9fdG9CdWZmZXJWaWV3LmpzIiwibW9kdWxlcy9pc0VxdWFsLmpzIiwibW9kdWxlcy9hbGxLZXlzLmpzIiwibW9kdWxlcy9fbWV0aG9kRmluZ2VycHJpbnQuanMiLCJtb2R1bGVzL2lzTWFwLmpzIiwibW9kdWxlcy9pc1dlYWtNYXAuanMiLCJtb2R1bGVzL2lzU2V0LmpzIiwibW9kdWxlcy9pc1dlYWtTZXQuanMiLCJtb2R1bGVzL3ZhbHVlcy5qcyIsIm1vZHVsZXMvcGFpcnMuanMiLCJtb2R1bGVzL2ludmVydC5qcyIsIm1vZHVsZXMvZnVuY3Rpb25zLmpzIiwibW9kdWxlcy9fY3JlYXRlQXNzaWduZXIuanMiLCJtb2R1bGVzL2V4dGVuZC5qcyIsIm1vZHVsZXMvZXh0ZW5kT3duLmpzIiwibW9kdWxlcy9kZWZhdWx0cy5qcyIsIm1vZHVsZXMvX2Jhc2VDcmVhdGUuanMiLCJtb2R1bGVzL2NyZWF0ZS5qcyIsIm1vZHVsZXMvY2xvbmUuanMiLCJtb2R1bGVzL3RhcC5qcyIsIm1vZHVsZXMvdG9QYXRoLmpzIiwibW9kdWxlcy9fdG9QYXRoLmpzIiwibW9kdWxlcy9fZGVlcEdldC5qcyIsIm1vZHVsZXMvZ2V0LmpzIiwibW9kdWxlcy9oYXMuanMiLCJtb2R1bGVzL2lkZW50aXR5LmpzIiwibW9kdWxlcy9tYXRjaGVyLmpzIiwibW9kdWxlcy9wcm9wZXJ0eS5qcyIsIm1vZHVsZXMvX29wdGltaXplQ2IuanMiLCJtb2R1bGVzL19iYXNlSXRlcmF0ZWUuanMiLCJtb2R1bGVzL2l0ZXJhdGVlLmpzIiwibW9kdWxlcy9fY2IuanMiLCJtb2R1bGVzL21hcE9iamVjdC5qcyIsIm1vZHVsZXMvbm9vcC5qcyIsIm1vZHVsZXMvcHJvcGVydHlPZi5qcyIsIm1vZHVsZXMvdGltZXMuanMiLCJtb2R1bGVzL3JhbmRvbS5qcyIsIm1vZHVsZXMvbm93LmpzIiwibW9kdWxlcy9fY3JlYXRlRXNjYXBlci5qcyIsIm1vZHVsZXMvX2VzY2FwZU1hcC5qcyIsIm1vZHVsZXMvZXNjYXBlLmpzIiwibW9kdWxlcy9fdW5lc2NhcGVNYXAuanMiLCJtb2R1bGVzL3VuZXNjYXBlLmpzIiwibW9kdWxlcy90ZW1wbGF0ZVNldHRpbmdzLmpzIiwibW9kdWxlcy90ZW1wbGF0ZS5qcyIsIm1vZHVsZXMvcmVzdWx0LmpzIiwibW9kdWxlcy91bmlxdWVJZC5qcyIsIm1vZHVsZXMvY2hhaW4uanMiLCJtb2R1bGVzL19leGVjdXRlQm91bmQuanMiLCJtb2R1bGVzL3BhcnRpYWwuanMiLCJtb2R1bGVzL2JpbmQuanMiLCJtb2R1bGVzL19pc0FycmF5TGlrZS5qcyIsIm1vZHVsZXMvX2ZsYXR0ZW4uanMiLCJtb2R1bGVzL2JpbmRBbGwuanMiLCJtb2R1bGVzL21lbW9pemUuanMiLCJtb2R1bGVzL2RlbGF5LmpzIiwibW9kdWxlcy9kZWZlci5qcyIsIm1vZHVsZXMvdGhyb3R0bGUuanMiLCJtb2R1bGVzL2RlYm91bmNlLmpzIiwibW9kdWxlcy93cmFwLmpzIiwibW9kdWxlcy9uZWdhdGUuanMiLCJtb2R1bGVzL2NvbXBvc2UuanMiLCJtb2R1bGVzL2FmdGVyLmpzIiwibW9kdWxlcy9iZWZvcmUuanMiLCJtb2R1bGVzL29uY2UuanMiLCJtb2R1bGVzL2ZpbmRLZXkuanMiLCJtb2R1bGVzL19jcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlci5qcyIsIm1vZHVsZXMvZmluZEluZGV4LmpzIiwibW9kdWxlcy9maW5kTGFzdEluZGV4LmpzIiwibW9kdWxlcy9zb3J0ZWRJbmRleC5qcyIsIm1vZHVsZXMvX2NyZWF0ZUluZGV4RmluZGVyLmpzIiwibW9kdWxlcy9pbmRleE9mLmpzIiwibW9kdWxlcy9sYXN0SW5kZXhPZi5qcyIsIm1vZHVsZXMvZmluZC5qcyIsIm1vZHVsZXMvZmluZFdoZXJlLmpzIiwibW9kdWxlcy9lYWNoLmpzIiwibW9kdWxlcy9tYXAuanMiLCJtb2R1bGVzL19jcmVhdGVSZWR1Y2UuanMiLCJtb2R1bGVzL3JlZHVjZS5qcyIsIm1vZHVsZXMvcmVkdWNlUmlnaHQuanMiLCJtb2R1bGVzL2ZpbHRlci5qcyIsIm1vZHVsZXMvcmVqZWN0LmpzIiwibW9kdWxlcy9ldmVyeS5qcyIsIm1vZHVsZXMvc29tZS5qcyIsIm1vZHVsZXMvY29udGFpbnMuanMiLCJtb2R1bGVzL2ludm9rZS5qcyIsIm1vZHVsZXMvcGx1Y2suanMiLCJtb2R1bGVzL3doZXJlLmpzIiwibW9kdWxlcy9tYXguanMiLCJtb2R1bGVzL21pbi5qcyIsIm1vZHVsZXMvdG9BcnJheS5qcyIsIm1vZHVsZXMvc2FtcGxlLmpzIiwibW9kdWxlcy9zaHVmZmxlLmpzIiwibW9kdWxlcy9zb3J0QnkuanMiLCJtb2R1bGVzL19ncm91cC5qcyIsIm1vZHVsZXMvZ3JvdXBCeS5qcyIsIm1vZHVsZXMvaW5kZXhCeS5qcyIsIm1vZHVsZXMvY291bnRCeS5qcyIsIm1vZHVsZXMvcGFydGl0aW9uLmpzIiwibW9kdWxlcy9zaXplLmpzIiwibW9kdWxlcy9fa2V5SW5PYmouanMiLCJtb2R1bGVzL3BpY2suanMiLCJtb2R1bGVzL29taXQuanMiLCJtb2R1bGVzL2luaXRpYWwuanMiLCJtb2R1bGVzL2ZpcnN0LmpzIiwibW9kdWxlcy9yZXN0LmpzIiwibW9kdWxlcy9sYXN0LmpzIiwibW9kdWxlcy9jb21wYWN0LmpzIiwibW9kdWxlcy9mbGF0dGVuLmpzIiwibW9kdWxlcy9kaWZmZXJlbmNlLmpzIiwibW9kdWxlcy93aXRob3V0LmpzIiwibW9kdWxlcy91bmlxLmpzIiwibW9kdWxlcy91bmlvbi5qcyIsIm1vZHVsZXMvaW50ZXJzZWN0aW9uLmpzIiwibW9kdWxlcy91bnppcC5qcyIsIm1vZHVsZXMvemlwLmpzIiwibW9kdWxlcy9vYmplY3QuanMiLCJtb2R1bGVzL3JhbmdlLmpzIiwibW9kdWxlcy9jaHVuay5qcyIsIm1vZHVsZXMvX2NoYWluUmVzdWx0LmpzIiwibW9kdWxlcy9taXhpbi5qcyIsIm1vZHVsZXMvdW5kZXJzY29yZS1hcnJheS1tZXRob2RzLmpzIiwibW9kdWxlcy9pbmRleC5qcyIsIm1vZHVsZXMvaW5kZXgtZGVmYXVsdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6bnVsbCwibmFtZXMiOlsiaXNGdW5jdGlvbiIsImhhcyIsImlzRmluaXRlIiwiaXNOYU4iLCJpc0RhdGFWaWV3IiwiaXNBcmd1bWVudHMiLCJfIiwiaXNUeXBlZEFycmF5IiwidG9QYXRoIiwiX2hhcyIsImZsYXR0ZW4iLCJfZmxhdHRlbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7RUFBQTtFQUNPLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQztBQUM5QjtFQUNBO0VBQ0E7RUFDQTtFQUNPLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUk7RUFDeEUsV0FBVyxPQUFPLE1BQU0sSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLElBQUksTUFBTSxDQUFDO0VBQzNFLFVBQVUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFO0VBQ25DLFVBQVUsRUFBRSxDQUFDO0FBQ2I7RUFDQTtFQUNPLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7RUFDOUQsSUFBSSxXQUFXLEdBQUcsT0FBTyxNQUFNLEtBQUssV0FBVyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ2pGO0VBQ0E7RUFDTyxJQUFJLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSTtFQUNqQyxJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSztFQUM1QixJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUTtFQUNoQyxJQUFJLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO0FBQzdDO0VBQ0E7RUFDTyxJQUFJLG1CQUFtQixHQUFHLE9BQU8sV0FBVyxLQUFLLFdBQVc7RUFDbkUsSUFBSSxnQkFBZ0IsR0FBRyxPQUFPLFFBQVEsS0FBSyxXQUFXLENBQUM7QUFDdkQ7RUFDQTtFQUNBO0VBQ08sSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9B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TSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0VBQ3JEOztFQ0hBO0VBQ2UsU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUU7RUFDdkQsRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztFQUNyQyxFQUFFLElBQUksS0FBSyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDNUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sQ0FBQztFQUNyQyxFQUFFLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7RUFDL0MsSUFBSSxJQUFJLFVBQVUsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUNsRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQztFQUNuRSxHQUFHO0VBQ0gsRUFBRSxPQUFPLElBQUksQ0FBQztFQUNkOztFQ1ZBO0VBQ2UsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUU7RUFDdEQsRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztFQUNyQyxFQUFFLElBQUksS0FBSyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDNUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxFQUFFLE1BQU0sQ0FBQztFQUNyQyxFQUFFLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7RUFDL0MsSUFBSSxJQUFJLFVBQVUsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUNsRCxJQUFJLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUM7RUFDakUsR0FBRztFQUNILEVBQUUsT0FBTyxLQUFLLENBQUM7RUFDZjs7RUNWQTtFQUNlLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRTtFQUM5RCxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMzQyxFQUFFLElBQUksT0FBTyxTQUFTLElBQUksUUFBUSxJQUFJLEtBQUssRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0VBQzNELEVBQUUsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDNUM7O0VDSEE7QUFDQSxlQUFlLGFBQWEsQ0FBQyxTQUFTLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0VBQ3ZELEVBQUUsSUFBSSxXQUFXLEVBQUUsSUFBSSxDQUFDO0VBQ3hCLEVBQUUsSUFBSUgsWUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO0VBQ3hCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztFQUNoQixHQUFHLE1BQU07RUFDVCxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDeEIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNqQyxHQUFHO0VBQ0gsRUFBRSxPQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxPQUFPLEVBQUU7RUFDcEMsSUFBSSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7RUFDdEIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0VBQ2pCLE1BQU0sSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRTtFQUM3QyxRQUFRLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0VBQ2hELE9BQU87RUFDUCxNQUFNLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDO0VBQ3pDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUM3QixLQUFLO0VBQ0wsSUFBSSxPQUFPLE1BQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQ2pFLEdBQUcsQ0FBQyxDQUFDO0VBQ0wsQ0FBQyxDQUFDOztFQ3hCRjtFQUNlLFNBQVMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7RUFDeEMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDakM7O0VDSEE7RUFDQTtFQUNlLFNBQVMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUU7RUFDMUMsRUFBRSxPQUFPLE1BQU0sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7RUFDckM7O0VDRkE7RUFDZSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtFQUNwRCxFQUFFLElBQUksTUFBTSxHQUFHLENBQUMsUUFBUSxFQUFFLFlBQVksR0FBRyxDQUFDLFFBQVE7RUFDbEQsTUFBTSxLQUFLLEVBQUUsUUFBUSxDQUFDO0VBQ3RCLEVBQUUsSUFBSSxRQUFRLElBQUksSUFBSSxLQUFLLE9BQU8sUUFBUSxJQUFJLFFBQVEsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFO0VBQ3JHLElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQy9DLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUMxRCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckIsTUFBTSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxHQUFHLE1BQU0sRUFBRTtFQUMzQyxRQUFRLE1BQU0sR0FBRyxLQUFLLENBQUM7RUFDdkIsT0FBTztFQUNQLEtBQUs7RUFDTCxHQUFHLE1BQU07RUFDVCxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0VBQ3JDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0VBQ3ZDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQzFDLE1BQU0sSUFBSSxRQUFRLEdBQUcsWUFBWSxLQUFLLFFBQVEsS0FBSyxDQUFDLFFBQVEsSUFBSSxNQUFNLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtFQUN2RixRQUFRLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDbkIsUUFBUSxZQUFZLEdBQUcsUUFBUSxDQUFDO0VBQ2hDLE9BQU87RUFDUCxLQUFLLENBQUMsQ0FBQztFQUNQLEdBQUc7RUFDSCxFQUFFLE9BQU8sTUFBTSxDQUFDO0VBQ2hCOztFQ3ZCQTtFQUNlLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO0VBQ3BELEVBQUUsSUFBSSxNQUFNLEdBQUcsUUFBUSxFQUFFLFlBQVksR0FBRyxRQUFRO0VBQ2hELE1BQU0sS0FBSyxFQUFFLFFBQVEsQ0FBQztFQUN0QixFQUFFLElBQUksUUFBUSxJQUFJLElBQUksS0FBSyxPQUFPLFFBQVEsSUFBSSxRQUFRLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRTtFQUNyRyxJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUMvQyxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7RUFDMUQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3JCLE1BQU0sSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssR0FBRyxNQUFNLEVBQUU7RUFDM0MsUUFBUSxNQUFNLEdBQUcsS0FBSyxDQUFDO0VBQ3ZCLE9BQU87RUFDUCxLQUFLO0VBQ0wsR0FBRyxNQUFNO0VBQ1QsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztFQUNyQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtFQUN2QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztFQUMxQyxNQUFNLElBQUksUUFBUSxHQUFHLFlBQVksS0FBSyxRQUFRLEtBQUssUUFBUSxJQUFJLE1BQU0sS0FBSyxRQUFRLENBQUMsRUFBRTtFQUNyRixRQUFRLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDbkIsUUFBUSxZQUFZLEdBQUcsUUFBUSxDQUFDO0VBQ2hDLE9BQU87RUFDUCxLQUFLLENBQUMsQ0FBQztFQUNQLEdBQUc7RUFDSCxFQUFFLE9BQU8sTUFBTSxDQUFDO0VBQ2hCOztFQ3BCQTtFQUNBLElBQUksV0FBVyxHQUFHLGtFQUFrRSxDQUFDO0VBQ3RFLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRTtFQUNyQyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUM7RUFDdEIsRUFBRSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDM0MsRUFBRSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtFQUNyQjtFQUNBLElBQUksT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQ2xDLEdBQUc7RUFDSCxFQUFFLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztFQUNsRCxFQUFFLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JCOztFQ2JBO0VBQ0E7RUFDQTtFQUNBO0VBQ2UsU0FBUyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUU7RUFDOUMsRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFO0VBQzFCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzdDLElBQUksT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN2QyxHQUFHO0VBQ0gsRUFBRSxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDNUIsRUFBRSxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDakMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUN2QyxFQUFFLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDeEIsRUFBRSxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO0VBQzFDLElBQUksSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztFQUNuQyxJQUFJLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUM3QixJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDakMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0VBQ3hCLEdBQUc7RUFDSCxFQUFFLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDNUI7O0VDeEJBO0VBQ2UsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFO0VBQ3JDLEVBQUUsT0FBTyxNQUFNLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0VBQy9COztFQ0RBO0VBQ2UsU0FBUyxNQUFNLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7RUFDdkQsRUFBRSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7RUFDaEIsRUFBRSxRQUFRLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztFQUNuQyxFQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtFQUNuRCxJQUFJLE9BQU87RUFDWCxNQUFNLEtBQUssRUFBRSxLQUFLO0VBQ2xCLE1BQU0sS0FBSyxFQUFFLEtBQUssRUFBRTtFQUNwQixNQUFNLFFBQVEsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUM7RUFDMUMsS0FBSyxDQUFDO0VBQ04sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLEtBQUssRUFBRTtFQUNoQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7RUFDMUIsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0VBQzNCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0VBQ2pCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztFQUMxQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztFQUMzQyxLQUFLO0VBQ0wsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztFQUNwQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztFQUNmOztFQ3BCQTtFQUNlLFNBQVMsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUU7RUFDbkQsRUFBRSxPQUFPLFNBQVMsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7RUFDMUMsSUFBSSxJQUFJLE1BQU0sR0FBRyxTQUFTLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQzNDLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7RUFDckMsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsS0FBSyxFQUFFLEtBQUssRUFBRTtFQUNyQyxNQUFNLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzVDLE1BQU0sUUFBUSxDQUFDLE1BQU0sRUFB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TyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hGOztFQ0xBO0VBQ0E7RUFDZSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtFQUMvQyxFQUFFLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNqRixFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUMsRUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMxQzs7RUNOQTtFQUNBO0VBQ0E7RUFDZSxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtFQUM5QyxFQUFFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3ZEOztFQ0xBO0VBQ0E7RUFDZSxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtFQUM5QyxFQUFFLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUNqRixFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUUsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN6RCxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEQ7O0VDTkE7RUFDZSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7RUFDdkMsRUFBRSxPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7RUFDaEM7O0VDSEE7RUFDQTtFQUNlLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7RUFDOUMsRUFBRSxPQUFPQyxTQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztFQUN2Qzs7RUNEQTtFQUNBO0FBQ0EsbUJBQWUsYUFBYSxDQUFDLFNBQVMsS0FBSyxFQUFFLElBQUksRUFBRTtFQUNuRCxFQUFFLElBQUksR0FBR0QsU0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFDbkMsRUFBRSxPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxLQUFLLENBQUM7RUFDdEMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztFQUNsQyxHQUFHLENBQUMsQ0FBQztFQUNMLENBQUMsQ0FBQzs7RUNURjtBQUNBLGdCQUFlLGFBQWEsQ0FBQyxTQUFTLEtBQUssRUFBRSxXQUFXLEVBQUU7RUFDMUQsRUFBRSxPQUFPLFVBQVUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7RUFDeEMsQ0FBQyxDQUFDOztFQ0RGO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDZSxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7RUFDakUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0VBQzVCLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQztFQUN2QixJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUM7RUFDeEIsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO0VBQ3JCLEdBQUc7RUFDSCxFQUFFLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxRQUFRLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztFQUN6RCxFQUFFLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztFQUNsQixFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztFQUNoQixFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtFQUM5RCxJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7RUFDeEIsUUFBUSxRQUFRLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztFQUNoRSxJQUFJLElBQUksUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFO0VBQy9CLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDdEQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDO0VBQ3RCLEtBQUssTUFBTSxJQUFJLFFBQVEsRUFBRTtFQUN6QixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxFQUFFO0VBQ3JDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUM1QixRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDM0IsT0FBTztFQUNQLEtBQUssTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLENB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]]></data>
	</file>
	<file>
	  <filename>/js/dev/underscore.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHsKICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6CiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKCd1bmRlcnNjb3JlJywgZmFjdG9yeSkgOgogIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgY3VycmVudCA9IGdsb2JhbC5fOwogICAgdmFyIGV4cG9ydHMgPSBnbG9iYWwuXyA9IGZhY3RvcnkoKTsKICAgIGV4cG9ydHMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHsgZ2xvYmFsLl8gPSBjdXJyZW50OyByZXR1cm4gZXhwb3J0czsgfTsKICB9KCkpKTsKfSh0aGlzLCAoZnVuY3Rpb24gKCkgewogIC8vICAgICBVbmRlcnNjb3JlLmpzIDEuMTMuNgogIC8vICAgICBodHRwczovL3VuZGVyc2NvcmVqcy5vcmcKICAvLyAgICAgKGMpIDIwMDktMjAyMiBKZXJlbXkgQXNoa2VuYXMsIEp1bGlhbiBHb25nZ3JpanAsIGFuZCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnMKICAvLyAgICAgVW5kZXJzY29yZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KCiAgLy8gQ3VycmVudCB2ZXJzaW9uLgogIHZhciBWRVJTSU9OID0gJzEuMTMuNic7CgogIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYAogIC8vIG9uIHRoZSBzZXJ2ZXIsIG9yIGB0aGlzYCBpbiBzb21lIHZpcnR1YWwgbWFjaGluZXMuIFdlIHVzZSBgc2VsZmAKICAvLyBpbnN0ZWFkIG9mIGB3aW5kb3dgIGZvciBgV2ViV29ya2VyYCBzdXBwb3J0LgogIHZhciByb290ID0gKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYuc2VsZiA9PT0gc2VsZiAmJiBzZWxmKSB8fAogICAgICAgICAgICAodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwuZ2xvYmFsID09PSBnbG9iYWwgJiYgZ2xvYmFsKSB8fAogICAgICAgICAgICBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpIHx8CiAgICAgICAgICAgIHt9OwoKICAvLyBTYXZlIGJ5dGVzIGluIHRoZSBtaW5pZmllZCAoYnV0IG5vdCBnemlwcGVkKSB2ZXJzaW9uOgogIHZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLCBPYmpQcm90byA9IE9iamVjdC5wcm90b3R5cGU7CiAgdmFyIFN5bWJvbFByb3RvID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wucHJvdG90eXBlIDogbnVsbDsKCiAgLy8gQ3JlYXRlIHF1aWNrIHJlZmVyZW5jZSB2YXJpYWJsZXMgZm9yIHNwZWVkIGFjY2VzcyB0byBjb3JlIHByb3RvdHlwZXMuCiAgdmFyIHB1c2ggPSBBcnJheVByb3RvLnB1c2gsCiAgICAgIHNsaWNlID0gQXJyYXlQcm90by5zbGljZSwKICAgICAgdG9TdHJpbmcgPSBPYmpQcm90by50b1N0cmluZywKICAgICAgaGFzT3duUHJvcGVydHkgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTsKCiAgLy8gTW9kZXJuIGZlYXR1cmUgZGV0ZWN0aW9uLgogIHZhciBzdXBwb3J0c0FycmF5QnVmZmVyID0gdHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJywKICAgICAgc3VwcG9ydHNEYXRhVmlldyA9IHR5cGVvZiBEYXRhVmlldyAhPT0gJ3VuZGVmaW5lZCc7CgogIC8vIEFsbCAqKkVDTUFTY3JpcHQgNSsqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2UKICAvLyBhcmUgZGVjbGFyZWQgaGVyZS4KICB2YXIgbmF0aXZlSXNBcnJheSA9IEFycmF5LmlzQXJyYXksCiAgICAgIG5hdGl2ZUtleXMgPSBPYmplY3Qua2V5cywKICAgICAgbmF0aXZlQ3JlYXRlID0gT2JqZWN0LmNyZWF0ZSwKICAgICAgbmF0aXZlSXNWaWV3ID0gc3VwcG9ydHNBcnJheUJ1ZmZlciAmJiBBcnJheUJ1ZmZlci5pc1ZpZXc7CgogIC8vIENyZWF0ZSByZWZlcmVuY2VzIHRvIHRoZXNlIGJ1aWx0aW4gZnVuY3Rpb25zIGJlY2F1c2Ugd2Ugb3ZlcnJpZGUgdGhlbS4KICB2YXIgX2lzTmFOID0gaXNOYU4sCiAgICAgIF9pc0Zpbml0ZSA9IGlzRmluaXRlOwoKICAvLyBLZXlzIGluIElFIDwgOSB0aGF0IHdvbid0IGJlIGl0ZXJhdGVkIGJ5IGBmb3Iga2V5IGluIC4uLmAgYW5kIHRodXMgbWlzc2VkLgogIHZhciBoYXNFbnVtQnVnID0gIXt0b1N0cmluZzogbnVsbH0ucHJvcGVydHlJc0VudW1lcmFibGUoJ3RvU3RyaW5nJyk7CiAgdmFyIG5vbkVudW1lcmFibGVQcm9wcyA9IFsndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5nJywKICAgICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICdoYXNPd25Qcm9wZXJ0eScsICd0b0xvY2FsZVN0cmluZyddOwoKICAvLyBUaGUgbGFyZ2VzdCBpbnRlZ2VyIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGV4YWN0bHkuCiAgdmFyIE1BWF9BUlJBWV9JTkRFWCA9IE1hdGgucG93KDIsIDUzKSAtIDE7CgogIC8vIFNvbWUgZnVuY3Rpb25zIHRha2UgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLCBvciBhIGZldyBleHBlY3RlZAogIC8vIGFyZ3VtZW50cyBhdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGVuIGEgdmFyaWFibGUgbnVtYmVyIG9mIHZhbHVlcyB0byBvcGVyYXRlCiAgLy8gb24uIFRoaXMgaGVscGVyIGFjY3VtdWxhdGVzIGFsbCByZW1haW5pbmcgYXJndW1lbnRzIHBhc3QgdGhlIGZ1bmN0aW9u4oCZcwogIC8vIGFyZ3VtZW50IGxlbmd0aCAob3IgYW4gZXhwbGljaXQgYHN0YXJ0SW5kZXhgKSwgaW50byBhbiBhcnJheSB0aGF0IGJlY29tZXMKICAvLyB0aGUgbGFzdCBhcmd1bWVudC4gU2ltaWxhciB0byBFUzbigJlzICJyZXN0IHBhcmFtZXRlciIuCiAgZnVuY3Rpb24gcmVzdEFyZ3VtZW50cyhmdW5jLCBzdGFydEluZGV4KSB7CiAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1heChhcmd1bWVudHMubGVuZ3RoIC0gc3RhcnRJbmRleCwgMCksCiAgICAgICAgICByZXN0ID0gQXJyYXkobGVuZ3RoKSwKICAgICAgICAgIGluZGV4ID0gMDsKICAgICAgZm9yICg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTsKICAgICAgfQogICAgICBzd2l0Y2ggKHN0YXJ0SW5kZXgpIHsKICAgICAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpcywgcmVzdCk7CiAgICAgICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3VtZW50c1swXSwgcmVzdCk7CiAgICAgICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3VtZW50c1swXSwgYXJndW1lbnRzWzFdLCByZXN0KTsKICAgICAgfQogICAgICB2YXIgYXJncyA9IEFycmF5KHN0YXJ0SW5kZXggKyAxKTsKICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgc3RhcnRJbmRleDsgaW5kZXgrKykgewogICAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTsKICAgICAgfQogICAgICBhcmdzW3N0YXJ0SW5kZXhdID0gcmVzdDsKICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7CiAgICB9OwogIH0KCiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBvYmplY3Q/CiAgZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7CiAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7CiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmopOwogIH0KCiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBlcXVhbCB0byBudWxsPwogIGZ1bmN0aW9uIGlzTnVsbChvYmopIHsKICAgIHJldHVybiBvYmogPT09IG51bGw7CiAgfQoKICAvLyBJcyBhIGdpdmVuIHZhcmlhYmxlIHVuZGVmaW5lZD8KICBmdW5jdGlvbiBpc1VuZGVmaW5lZChvYmopIHsKICAgIHJldHVybiBvYmogPT09IHZvaWQgMDsKICB9CgogIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFuPwogIGZ1bmN0aW9uIGlzQm9vbGVhbihvYmopIHsKICAgIHJldHVybiBvYmogPT09IHRydWUgfHwgb2JqID09PSBmYWxzZSB8fCB0b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEJvb2xlYW5dJzsKICB9CgogIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD8KICBmdW5jdGlvbiBpc0VsZW1lbnQob2JqKSB7CiAgICByZXR1cm4gISEob2JqICYmIG9iai5ub2RlVHlwZSA9PT0gMSk7CiAgfQoKICAvLyBJbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBgdG9TdHJpbmdgLWJhc2VkIHR5cGUgdGVzdGVyLgogIGZ1bmN0aW9uIHRhZ1Rlc3RlcihuYW1lKSB7CiAgICB2YXIgdGFnID0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7CiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7CiAgICAgIHJldHVybiB0b1N0cmluZy5jYWxsKG9iaikgPT09IHRhZzsKICAgIH07CiAgfQoKICB2YXIgaXNTdHJpbmcgPSB0YWdUZXN0ZXIoJ1N0cmluZycpOwoKICB2YXIgaXNOdW1iZXIgPSB0YWdUZXN0ZXIoJ051bWJlcicpOwoKICB2YXIgaXNEYXRlID0gdGFnVGVzdGVyKCdEYXRlJyk7CgogIHZhciBpc1JlZ0V4cCA9IHRhZ1Rlc3RlcignUmVnRXhwJyk7CgogIHZhciBpc0Vycm9yID0gdGFnVGVzdGVyKCdFcnJvcicpOwoKICB2YXIgaXNTeW1ib2wgPSB0YWdUZXN0ZXIoJ1N5bWJvbCcpOwoKICB2YXIgaXNBcnJheUJ1ZmZlciA9IHRhZ1Rlc3RlcignQXJyYXlCdWZmZXInKTsKCiAgdmFyIGlzRnVuY3Rpb24gPSB0YWdUZXN0ZXIoJ0Z1bmN0aW9uJyk7CgogIC8vIE9wdGltaXplIGBpc0Z1bmN0aW9uYCBpZiBhcHByb3ByaWF0ZS4gV29yayBhcm91bmQgc29tZSBgdHlwZW9mYCBidWdzIGluIG9sZAogIC8vIHY4LCBJRSAxMSAoIzE2MjEpLCBTYWZhcmkgOCAoIzE5MjkpLCBhbmQgUGhhbnRvbUpTICgjMjIzNikuCiAgdmFyIG5vZGVsaXN0ID0gcm9vdC5kb2N1bWVudCAmJiByb290LmRvY3VtZW50LmNoaWxkTm9kZXM7CiAgaWYgKHR5cGVvZiAvLi8gIT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgSW50OEFycmF5ICE9ICdvYmplY3QnICYmIHR5cGVvZiBub2RlbGlzdCAhPSAnZnVuY3Rpb24nKSB7CiAgICBpc0Z1bmN0aW9uID0gZnVuY3Rpb24ob2JqKSB7CiAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicgfHwgZmFsc2U7CiAgICB9OwogIH0KCiAgdmFyIGlzRnVuY3Rpb24kMSA9IGlzRnVuY3Rpb247CgogIHZhciBoYXNPYmplY3RUYWcgPSB0YWdUZXN0ZXIoJ09iamVjdCcpOwoKICAvLyBJbiBJRSAxMCAtIEVkZ2UgMTMsIGBEYXRhVmlld2AgaGFzIHN0cmluZyB0YWcgYCdbb2JqZWN0IE9iamVjdF0nYC4KICAvLyBJbiBJRSAxMSwgdGhlIG1vc3QgY29tbW9uIGFtb25nIHRoZW0sIHRoaXMgcHJvYmxlbSBhbHNvIGFwcGxpZXMgdG8KICAvLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YC4KICB2YXIgaGFzU3RyaW5nVGFnQnVnID0gKAogICAgICAgIHN1cHBvcnRzRGF0YVZpZXcgJiYgaGFzT2JqZWN0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoOCkpKQogICAgICApLAogICAgICBpc0lFMTEgPSAodHlwZW9mIE1hcCAhPT0gJ3VuZGVmaW5lZCcgJiYgaGFzT2JqZWN0VGFnKG5ldyBNYXApKTsKCiAgdmFyIGlzRGF0YVZpZXcgPSB0YWdUZXN0ZXIoJ0RhdGFWaWV3Jyk7CgogIC8vIEluIElFIDEwIC0gRWRnZSAxMywgd2UgbmVlZCBhIGRpZmZlcmVudCBoZXVyaXN0aWMKICAvLyB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBvYmplY3QgaXMgYSBgRGF0YVZpZXdgLgogIGZ1bmN0aW9uIGllMTBJc0RhdGFWaWV3KG9iaikgewogICAgcmV0dXJuIG9iaiAhPSBudWxsICYmIGlzRnVuY3Rpb24kMShvYmouZ2V0SW50OCkgJiYgaXNBcnJheUJ1ZmZlcihvYmouYnVmZmVyKTsKICB9CgogIHZhciBpc0RhdGFWaWV3JDEgPSAoaGFzU3RyaW5nVGFnQnVnID8gaWUxMElzRGF0YVZpZXcgOiBpc0RhdGFWaWV3KTsKCiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhbiBhcnJheT8KICAvLyBEZWxlZ2F0ZXMgdG8gRUNNQTUncyBuYXRpdmUgYEFycmF5LmlzQXJyYXlgLgogIHZhciBpc0FycmF5ID0gbmF0aXZlSXNBcnJheSB8fCB0YWdUZXN0ZXIoJ0FycmF5Jyk7CgogIC8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGNoZWNrIHdoZXRoZXIgYGtleWAgaXMgYW4gb3duIHByb3BlcnR5IG5hbWUgb2YgYG9iamAuCiAgZnVuY3Rpb24gaGFzJDEob2JqLCBrZXkpIHsKICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTsKICB9CgogIHZhciBpc0FyZ3VtZW50cyA9IHRhZ1Rlc3RlcignQXJndW1lbnRzJyk7CgogIC8vIERlZmluZSBhIGZhbGxiYWNrIHZlcnNpb24gb2YgdGhlIG1ldGhvZCBpbiBicm93c2VycyAoYWhlbSwgSUUgPCA5KSwgd2hlcmUKICAvLyB0aGVyZSBpc24ndCBhbnkgaW5zcGVjdGFibGUgIkFyZ3VtZW50cyIgdHlwZS4KICAoZnVuY3Rpb24oKSB7CiAgICBpZiAoIWlzQXJndW1lbnRzKGFyZ3VtZW50cykpIHsKICAgICAgaXNBcmd1bWVudHMgPSBmdW5jdGlvbihvYmopIHsKICAgICAgICByZXR1cm4gaGFzJDEob2JqLCAnY2FsbGVlJyk7CiAgICAgIH07CiAgICB9CiAgfSgpKTsKCiAgdmFyIGlzQXJndW1lbnRzJDEgPSBpc0FyZ3VtZW50czsKCiAgLy8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVtYmVyPwogIGZ1bmN0aW9uIGlzRmluaXRlJDEob2JqKSB7CiAgICByZXR1cm4gIWlzU3ltYm9sKG9iaikgJiYgX2lzRmluaXRlKG9iaikgJiYgIWlzTmFOKHBhcnNlRmxvYXQob2JqKSk7CiAgfQoKICAvLyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYE5hTmA/CiAgZnVuY3Rpb24gaXNOYU4kMShvYmopIHsKICAgIHJldHVybiBpc051bWJlcihvYmopICYmIF9pc05hTihvYmopOwogIH0KCiAgLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb24uIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuCiAgZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHsKICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHZhbHVlOwogICAgfTsKICB9CgogIC8vIENvbW1vbiBpbnRlcm5hbCBsb2dpYyBmb3IgYGlzQXJyYXlMaWtlYCBhbmQgYGlzQnVmZmVyTGlrZWAuCiAgZnVuY3Rpb24gY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0U2l6ZVByb3BlcnR5KSB7CiAgICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbikgewogICAgICB2YXIgc2l6ZVByb3BlcnR5ID0gZ2V0U2l6ZVByb3BlcnR5KGNvbGxlY3Rpb24pOwogICAgICByZXR1cm4gdHlwZW9mIHNpemVQcm9wZXJ0eSA9PSAnbnVtYmVyJyAmJiBzaXplUHJvcGVydHkgPj0gMCAmJiBzaXplUHJvcGVydHkgPD0gTUFYX0FSUkFZX0lOREVYOwogICAgfQogIH0KCiAgLy8gSW50ZXJuYWwgaGVscGVyIHRvIGdlbmVyYXRlIGEgZnVuY3Rpb24gdG8gb2J0YWluIHByb3BlcnR5IGBrZXlgIGZyb20gYG9iamAuCiAgZnVuY3Rpb24gc2hhbGxvd1Byb3BlcnR5KGtleSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikgewogICAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpba2V5XTsKICAgIH07CiAgfQoKICAvLyBJbnRlcm5hbCBoZWxwZXIgdG8gb2J0YWluIHRoZSBgYnl0ZUxlbmd0aGAgcHJvcGVydHkgb2YgYW4gb2JqZWN0LgogIHZhciBnZXRCeXRlTGVuZ3RoID0gc2hhbGxvd1Byb3BlcnR5KCdieXRlTGVuZ3RoJyk7CgogIC8vIEludGVybmFsIGhlbHBlciB0byBkZXRlcm1pbmUgd2hldGhlciB3ZSBzaG91bGQgc3BlbmQgZXh0ZW5zaXZlIGNoZWNrcyBhZ2FpbnN0CiAgLy8gYEFycmF5QnVmZmVyYCBldCBhbC4KICB2YXIgaXNCdWZmZXJMaWtlID0gY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0Qnl0ZUxlbmd0aCk7CgogIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSB0eXBlZCBhcnJheT8KICB2YXIgdHlwZWRBcnJheVBhdHRlcm4gPSAvXFtvYmplY3QgKChJfFVpKW50KDh8MTZ8MzIpfEZsb2F0KDMyfDY0KXxVaW50OENsYW1wZWR8QmlnKEl8VWkpbnQ2NClBcnJheVxdLzsKICBmdW5jdGlvbiBpc1R5cGVkQXJyYXkob2JqKSB7CiAgICAvLyBgQXJyYXlCdWZmZXIuaXNWaWV3YCBpcyB0aGUgbW9zdCBmdXR1cmUtcHJvb2YsIHNvIHVzZSBpdCB3aGVuIGF2YWlsYWJsZS4KICAgIC8vIE90aGVyd2lzZSwgZmFsbCBiYWNrIG9uIHRoZSBhYm92ZSByZWd1bGFyIGV4cHJlc3Npb24uCiAgICByZXR1cm4gbmF0aXZlSXNWaWV3ID8gKG5hdGl2ZUlzVmlldyhvYmopICYmICFpc0RhdGFWaWV3JDEob2JqKSkgOgogICAgICAgICAgICAgICAgICBpc0J1ZmZlckxpa2Uob2JqKSAmJiB0eXBlZEFycmF5UGF0dGVybi50ZXN0KHRvU3RyaW5nLmNhbGwob2JqKSk7CiAgfQoKICB2YXIgaXNUeXBlZEFycmF5JDEgPSBzdXBwb3J0c0FycmF5QnVmZmVyID8gaXNUeXBlZEFycmF5IDogY29uc3RhbnQoZmFsc2UpOwoKICAvLyBJbnRlcm5hbCBoZWxwZXIgdG8gb2J0YWluIHRoZSBgbGVuZ3RoYCBwcm9wZXJ0eSBvZiBhbiBvYmplY3QuCiAgdmFyIGdldExlbmd0aCA9IHNoYWxsb3dQcm9wZXJ0eSgnbGVuZ3RoJyk7CgogIC8vIEludGVybmFsIGhlbHBlciB0byBjcmVhdGUgYSBzaW1wbGUgbG9va3VwIHN0cnVjdHVyZS4KICAvLyBgY29sbGVjdE5vbkVudW1Qcm9wc2AgdXNlZCB0byBkZXBlbmQgb24gYF8uY29udGFpbnNgLCBidXQgdGhpcyBsZWQgdG8KICAvLyBjaXJjdWxhciBpbXBvcnRzLiBgZW11bGF0ZWRTZXRgIGlzIGEgb25lLW9mZiBzb2x1dGlvbiB0aGF0IG9ubHkgd29ya3MgZm9yCiAgLy8gYXJyYXlzIG9mIHN0cmluZ3MuCiAgZnVuY3Rpb24gZW11bGF0ZWRTZXQoa2V5cykgewogICAgdmFyIGhhc2ggPSB7fTsKICAgIGZvciAodmFyIGwgPSBrZXlzLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyArK2kpIGhhc2hba2V5c1tpXV0gPSB0cnVlOwogICAgcmV0dXJuIHsKICAgICAgY29udGFpbnM6IGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gaGFzaFtrZXldID09PSB0cnVlOyB9LAogICAgICBwdXNoOiBmdW5jdGlvbihrZXkpIHsKICAgICAgICBoYXNoW2tleV0gPSB0cnVlOwogICAgICAgIHJldHVybiBrZXlzLnB1c2goa2V5KTsKICAgICAgfQogICAgfTsKICB9CgogIC8vIEludGVybmFsIGhlbHBlci4gQ2hlY2tzIGBrZXlzYCBmb3IgdGhlIHByZXNlbmNlIG9mIGtleXMgaW4gSUUgPCA5IHRoYXQgd29uJ3QKICAvLyBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC4gRXh0ZW5kcyBga2V5c2AgaW4gcGxhY2UgaWYKICAvLyBuZWVkZWQuCiAgZnVuY3Rpb24gY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpIHsKICAgIGtleXMgPSBlbXVsYXRlZFNldChrZXlzKTsKICAgIHZhciBub25FbnVtSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aDsKICAgIHZhciBjb25zdHJ1Y3RvciA9IG9iai5jb25zdHJ1Y3RvcjsKICAgIHZhciBwcm90byA9IChpc0Z1bmN0aW9uJDEoY29uc3RydWN0b3IpICYmIGNvbnN0cnVjdG9yLnByb3RvdHlwZSkgfHwgT2JqUHJvdG87CgogICAgLy8gQ29uc3RydWN0b3IgaXMgYSBzcGVjaWFsIGNhc2UuCiAgICB2YXIgcHJvcCA9ICdjb25zdHJ1Y3Rvcic7CiAgICBpZiAoaGFzJDEob2JqLCBwcm9wKSAmJiAha2V5cy5jb250YWlucyhwcm9wKSkga2V5cy5wdXNoKHByb3ApOwoKICAgIHdoaWxlIChub25FbnVtSWR4LS0pIHsKICAgICAgcHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tub25FbnVtSWR4XTsKICAgICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtwcm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIWtleXMuY29udGFpbnMocHJvcCkpIHsKICAgICAgICBrZXlzLnB1c2gocHJvcCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIFJldHJpZXZlIHRoZSBuYW1lcyBvZiBhbiBvYmplY3QncyBvd24gcHJvcGVydGllcy4KICAvLyBEZWxlZ2F0ZXMgdG8gKipFQ01BU2NyaXB0IDUqKidzIG5hdGl2ZSBgT2JqZWN0LmtleXNgLgogIGZ1bmN0aW9uIGtleXMob2JqKSB7CiAgICBpZiAoIWlzT2JqZWN0KG9iaikpIHJldHVybiBbXTsKICAgIGlmIChuYXRpdmVLZXlzKSByZXR1cm4gbmF0aXZlS2V5cyhvYmopOwogICAgdmFyIGtleXMgPSBbXTsKICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChoYXMkMShvYmosIGtleSkpIGtleXMucHVzaChrZXkpOwogICAgLy8gQWhlbSwgSUUgPCA5LgogICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTsKICAgIHJldHVybiBrZXlzOwogIH0KCiAgLy8gSXMgYSBnaXZlbiBhcnJheSwgc3RyaW5nLCBvciBvYmplY3QgZW1wdHk/CiAgLy8gQW4gImVtcHR5IiBvYmplY3QgaGFzIG5vIGVudW1lcmFibGUgb3duLXByb3BlcnRpZXMuCiAgZnVuY3Rpb24gaXNFbXB0eShvYmopIHsKICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICAvLyBTa2lwIHRoZSBtb3JlIGV4cGVuc2l2ZSBgdG9TdHJpbmdgLWJhc2VkIHR5cGUgY2hlY2tzIGlmIGBvYmpgIGhhcyBubwogICAgLy8gYC5sZW5ndGhgLgogICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChvYmopOwogICAgaWYgKHR5cGVvZiBsZW5ndGggPT0gJ251bWJlcicgJiYgKAogICAgICBpc0FycmF5KG9iaikgfHwgaXNTdHJpbmcob2JqKSB8fCBpc0FyZ3VtZW50cyQxKG9iaikKICAgICkpIHJldHVybiBsZW5ndGggPT09IDA7CiAgICByZXR1cm4gZ2V0TGVuZ3RoKGtleXMob2JqKSkgPT09IDA7CiAgfQoKICAvLyBSZXR1cm5zIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZiBga2V5OnZhbHVlYCBwYWlycy4KICBmdW5jdGlvbiBpc01hdGNoKG9iamVjdCwgYXR0cnMpIHsKICAgIHZhciBfa2V5cyA9IGtleXMoYXR0cnMpLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7CiAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiAhbGVuZ3RoOwogICAgdmFyIG9iaiA9IE9iamVjdChvYmplY3QpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB2YXIga2V5ID0gX2tleXNbaV07CiAgICAgIGlmIChhdHRyc1trZXldICE9PSBvYmpba2V5XSB8fCAhKGtleSBpbiBvYmopKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vIElmIFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJldHVybnMgYSB3cmFwcGVkIG9iamVjdCB0aGF0IGNhbgogIC8vIGJlIHVzZWQgT08tc3R5bGUuIFRoaXMgd3JhcHBlciBob2xkcyBhbHRlcmVkIHZlcnNpb25zIG9mIGFsbCBmdW5jdGlvbnMgYWRkZWQKICAvLyB0aHJvdWdoIGBfLm1peGluYC4gV3JhcHBlZCBvYmplY3RzIG1heSBiZSBjaGFpbmVkLgogIGZ1bmN0aW9uIF8kMShvYmopIHsKICAgIGlmIChvYmogaW5zdGFuY2VvZiBfJDEpIHJldHVybiBvYmo7CiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgXyQxKSkgcmV0dXJuIG5ldyBfJDEob2JqKTsKICAgIHRoaXMuX3dyYXBwZWQgPSBvYmo7CiAgfQoKICBfJDEuVkVSU0lPTiA9IFZFUlNJT047CgogIC8vIEV4dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWluZWQgb2JqZWN0LgogIF8kMS5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLl93cmFwcGVkOwogIH07CgogIC8vIFByb3ZpZGUgdW53cmFwcGluZyBwcm94aWVzIGZvciBzb21lIG1ldGhvZHMgdXNlZCBpbiBlbmdpbmUgb3BlcmF0aW9ucwogIC8vIHN1Y2ggYXMgYXJpdGhtZXRpYyBhbmQgSlNPTiBzdHJpbmdpZmljYXRpb24uCiAgXyQxLnByb3RvdHlwZS52YWx1ZU9mID0gXyQxLnByb3RvdHlwZS50b0pTT04gPSBfJDEucHJvdG90eXBlLnZhbHVlOwoKICBfJDEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gU3RyaW5nKHRoaXMuX3dyYXBwZWQpOwogIH07CgogIC8vIEludGVybmFsIGZ1bmN0aW9uIHRvIHdyYXAgb3Igc2hhbGxvdy1jb3B5IGFuIEFycmF5QnVmZmVyLAogIC8vIHR5cGVkIGFycmF5IG9yIERhdGFWaWV3IHRvIGEgbmV3IHZpZXcsIHJldXNpbmcgdGhlIGJ1ZmZlci4KICBmdW5jdGlvbiB0b0J1ZmZlclZpZXcoYnVmZmVyU291cmNlKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoCiAgICAgIGJ1ZmZlclNvdXJjZS5idWZmZXIgfHwgYnVmZmVyU291cmNlLAogICAgICBidWZmZXJTb3VyY2UuYnl0ZU9mZnNldCB8fCAwLAogICAgICBnZXRCeXRlTGVuZ3RoKGJ1ZmZlclNvdXJjZSkKICAgICk7CiAgfQoKICAvLyBXZSB1c2UgdGhpcyBzdHJpbmcgdHdpY2UsIHNvIGdpdmUgaXQgYSBuYW1lIGZvciBtaW5pZmljYXRpb24uCiAgdmFyIHRhZ0RhdGFWaWV3ID0gJ1tvYmplY3QgRGF0YVZpZXddJzsKCiAgLy8gSW50ZXJuYWwgcmVjdXJzaXZlIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGBfLmlzRXF1YWxgLgogIGZ1bmN0aW9uIGVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7CiAgICAvLyBJZGVudGljYWwgb2JqZWN0cyBhcmUgZXF1YWwuIGAwID09PSAtMGAsIGJ1dCB0aGV5IGFyZW4ndCBpZGVudGljYWwuCiAgICAvLyBTZWUgdGhlIFtIYXJtb255IGBlZ2FsYCBwcm9wb3NhbF0oaHR0cHM6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuCiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiOwogICAgLy8gYG51bGxgIG9yIGB1bmRlZmluZWRgIG9ubHkgZXF1YWwgdG8gaXRzZWxmIChzdHJpY3QgY29tcGFyaXNvbikuCiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS4KICAgIGlmIChhICE9PSBhKSByZXR1cm4gYiAhPT0gYjsKICAgIC8vIEV4aGF1c3QgcHJpbWl0aXZlIGNoZWNrcwogICAgdmFyIHR5cGUgPSB0eXBlb2YgYTsKICAgIGlmICh0eXBlICE9PSAnZnVuY3Rpb24nICYmIHR5cGUgIT09ICdvYmplY3QnICYmIHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gZGVlcEVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKTsKICB9CgogIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgXy5pc0VxdWFsYC4KICBmdW5jdGlvbiBkZWVwRXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spIHsKICAgIC8vIFVud3JhcCBhbnkgd3JhcHBlZCBvYmplY3RzLgogICAgaWYgKGEgaW5zdGFuY2VvZiBfJDEpIGEgPSBhLl93cmFwcGVkOwogICAgaWYgKGIgaW5zdGFuY2VvZiBfJDEpIGIgPSBiLl93cmFwcGVkOwogICAgLy8gQ29tcGFyZSBgW1tDbGFzc11dYCBuYW1lcy4KICAgIHZhciBjbGFzc05hbWUgPSB0b1N0cmluZy5jYWxsKGEpOwogICAgaWYgKGNsYXNzTmFtZSAhPT0gdG9TdHJpbmcuY2FsbChiKSkgcmV0dXJuIGZhbHNlOwogICAgLy8gV29yayBhcm91bmQgYSBidWcgaW4gSUUgMTAgLSBFZGdlIDEzLgogICAgaWYgKGhhc1N0cmluZ1RhZ0J1ZyAmJiBjbGFzc05hbWUgPT0gJ1tvYmplY3QgT2JqZWN0XScgJiYgaXNEYXRhVmlldyQxKGEpKSB7CiAgICAgIGlmICghaXNEYXRhVmlldyQxKGIpKSByZXR1cm4gZmFsc2U7CiAgICAgIGNsYXNzTmFtZSA9IHRhZ0RhdGFWaWV3OwogICAgfQogICAgc3dpdGNoIChjbGFzc05hbWUpIHsKICAgICAgLy8gVGhlc2UgdHlwZXMgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlLgogICAgICBjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOgogICAgICAgIC8vIFJlZ0V4cHMgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncyBmb3IgY29tcGFyaXNvbiAoTm90ZTogJycgKyAvYS9pID09PSAnL2EvaScpCiAgICAgIGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6CiAgICAgICAgLy8gUHJpbWl0aXZlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBvYmplY3Qgd3JhcHBlcnMgYXJlIGVxdWl2YWxlbnQ7IHRodXMsIGAiNSJgIGlzCiAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZygiNSIpYC4KICAgICAgICByZXR1cm4gJycgKyBhID09PSAnJyArIGI7CiAgICAgIGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6CiAgICAgICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS4KICAgICAgICAvLyBPYmplY3QoTmFOKSBpcyBlcXVpdmFsZW50IHRvIE5hTi4KICAgICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4gK2IgIT09ICtiOwogICAgICAgIC8vIEFuIGBlZ2FsYCBjb21wYXJpc29uIGlzIHBlcmZvcm1lZCBmb3Igb3RoZXIgbnVtZXJpYyB2YWx1ZXMuCiAgICAgICAgcmV0dXJuICthID09PSAwID8gMSAvICthID09PSAxIC8gYiA6ICthID09PSArYjsKICAgICAgY2FzZSAnW29iamVjdCBEYXRlXSc6CiAgICAgIGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOgogICAgICAgIC8vIENvZXJjZSBkYXRlcyBhbmQgYm9vbGVhbnMgdG8gbnVtZXJpYyBwcmltaXRpdmUgdmFsdWVzLiBEYXRlcyBhcmUgY29tcGFyZWQgYnkgdGhlaXIKICAgICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zCiAgICAgICAgLy8gb2YgYE5hTmAgYXJlIG5vdCBlcXVpdmFsZW50LgogICAgICAgIHJldHVybiArYSA9PT0gK2I7CiAgICAgIGNhc2UgJ1tvYmplY3QgU3ltYm9sXSc6CiAgICAgICAgcmV0dXJuIFN5bWJvbFByb3RvLnZhbHVlT2YuY2FsbChhKSA9PT0gU3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKGIpOwogICAgICBjYXNlICdbb2JqZWN0IEFycmF5QnVmZmVyXSc6CiAgICAgIGNhc2UgdGFnRGF0YVZpZXc6CiAgICAgICAgLy8gQ29lcmNlIHRvIHR5cGVkIGFycmF5IHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCiAgICAgICAgcmV0dXJuIGRlZXBFcSh0b0J1ZmZlclZpZXcoYSksIHRvQnVmZmVyVmlldyhiKSwgYVN0YWNrLCBiU3RhY2spOwogICAgfQoKICAgIHZhciBhcmVBcnJheXMgPSBjbGFzc05hbWUgPT09ICdbb2JqZWN0IEFycmF5XSc7CiAgICBpZiAoIWFyZUFycmF5cyAmJiBpc1R5cGVkQXJyYXkkMShhKSkgewogICAgICAgIHZhciBieXRlTGVuZ3RoID0gZ2V0Qnl0ZUxlbmd0aChhKTsKICAgICAgICBpZiAoYnl0ZUxlbmd0aCAhPT0gZ2V0Qnl0ZUxlbmd0aChiKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChhLmJ1ZmZlciA9PT0gYi5idWZmZXIgJiYgYS5ieXRlT2Zmc2V0ID09PSBiLmJ5dGVPZmZzZXQpIHJldHVybiB0cnVlOwogICAgICAgIGFyZUFycmF5cyA9IHRydWU7CiAgICB9CiAgICBpZiAoIWFyZUFycmF5cykgewogICAgICBpZiAodHlwZW9mIGEgIT0gJ29iamVjdCcgfHwgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTsKCiAgICAgIC8vIE9iamVjdHMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1aXZhbGVudCwgYnV0IGBPYmplY3RgcyBvciBgQXJyYXlgcwogICAgICAvLyBmcm9tIGRpZmZlcmVudCBmcmFtZXMgYXJlLgogICAgICB2YXIgYUN0b3IgPSBhLmNvbnN0cnVjdG9yLCBiQ3RvciA9IGIuY29uc3RydWN0b3I7CiAgICAgIGlmIChhQ3RvciAhPT0gYkN0b3IgJiYgIShpc0Z1bmN0aW9uJDEoYUN0b3IpICYmIGFDdG9yIGluc3RhbmNlb2YgYUN0b3IgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRnVuY3Rpb24kMShiQ3RvcikgJiYgYkN0b3IgaW5zdGFuY2VvZiBiQ3RvcikKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoJ2NvbnN0cnVjdG9yJyBpbiBhICYmICdjb25zdHJ1Y3RvcicgaW4gYikpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIC8vIEFzc3VtZSBlcXVhbGl0eSBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoZSBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBjeWNsaWMKICAgIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRlZCBmcm9tIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLgoKICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy4KICAgIC8vIEl0J3MgZG9uZSBoZXJlIHNpbmNlIHdlIG9ubHkgbmVlZCB0aGVtIGZvciBvYmplY3RzIGFuZCBhcnJheXMgY29tcGFyaXNvbi4KICAgIGFTdGFjayA9IGFTdGFjayB8fCBbXTsKICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTsKICAgIHZhciBsZW5ndGggPSBhU3RhY2subGVuZ3RoOwogICAgd2hpbGUgKGxlbmd0aC0tKSB7CiAgICAgIC8vIExpbmVhciBzZWFyY2guIFBlcmZvcm1hbmNlIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZgogICAgICAvLyB1bmlxdWUgbmVzdGVkIHN0cnVjdHVyZXMuCiAgICAgIGlmIChhU3RhY2tbbGVuZ3RoXSA9PT0gYSkgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09PSBiOwogICAgfQoKICAgIC8vIEFkZCB0aGUgZmlyc3Qgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy4KICAgIGFTdGFjay5wdXNoKGEpOwogICAgYlN0YWNrLnB1c2goYik7CgogICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuCiAgICBpZiAoYXJlQXJyYXlzKSB7CiAgICAgIC8vIENvbXBhcmUgYXJyYXkgbGVuZ3RocyB0byBkZXRlcm1pbmUgaWYgYSBkZWVwIGNvbXBhcmlzb24gaXMgbmVjZXNzYXJ5LgogICAgICBsZW5ndGggPSBhLmxlbmd0aDsKICAgICAgaWYgKGxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgICAgLy8gRGVlcCBjb21wYXJlIHRoZSBjb250ZW50cywgaWdub3Jpbmcgbm9uLW51bWVyaWMgcHJvcGVydGllcy4KICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7CiAgICAgICAgaWYgKCFlcShhW2xlbmd0aF0sIGJbbGVuZ3RoXSwgYVN0YWNrLCBiU3RhY2spKSByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIERlZXAgY29tcGFyZSBvYmplY3RzLgogICAgICB2YXIgX2tleXMgPSBrZXlzKGEpLCBrZXk7CiAgICAgIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDsKICAgICAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVwIGVxdWFsaXR5LgogICAgICBpZiAoa2V5cyhiKS5sZW5ndGggIT09IGxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgICB3aGlsZSAobGVuZ3RoLS0pIHsKICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXIKICAgICAgICBrZXkgPSBfa2V5c1tsZW5ndGhdOwogICAgICAgIGlmICghKGhhcyQxKGIsIGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGFTdGFjaywgYlN0YWNrKSkpIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBvYmplY3QgZnJvbSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuCiAgICBhU3RhY2sucG9wKCk7CiAgICBiU3RhY2sucG9wKCk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vIFBlcmZvcm0gYSBkZWVwIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgdHdvIG9iamVjdHMgYXJlIGVxdWFsLgogIGZ1bmN0aW9uIGlzRXF1YWwoYSwgYikgewogICAgcmV0dXJuIGVxKGEsIGIpOwogIH0KCiAgLy8gUmV0cmlldmUgYWxsIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGFuIG9iamVjdC4KICBmdW5jdGlvbiBhbGxLZXlzKG9iaikgewogICAgaWYgKCFpc09iamVjdChvYmopKSByZXR1cm4gW107CiAgICB2YXIga2V5cyA9IFtdOwogICAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7CiAgICAvLyBBaGVtLCBJRSA8IDkuCiAgICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpOwogICAgcmV0dXJuIGtleXM7CiAgfQoKICAvLyBTaW5jZSB0aGUgcmVndWxhciBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgdHlwZSB0ZXN0cyBkb24ndCB3b3JrIGZvcgogIC8vIHNvbWUgdHlwZXMgaW4gSUUgMTEsIHdlIHVzZSBhIGZpbmdlcnByaW50aW5nIGhldXJpc3RpYyBpbnN0ZWFkLCBiYXNlZAogIC8vIG9uIHRoZSBtZXRob2RzLiBJdCdzIG5vdCBncmVhdCwgYnV0IGl0J3MgdGhlIGJlc3Qgd2UgZ290LgogIC8vIFRoZSBmaW5nZXJwcmludCBtZXRob2QgbGlzdHMgYXJlIGRlZmluZWQgYmVsb3cuCiAgZnVuY3Rpb24gaWUxMWZpbmdlcnByaW50KG1ldGhvZHMpIHsKICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgobWV0aG9kcyk7CiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7CiAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICAvLyBgTWFwYCwgYFdlYWtNYXBgIGFuZCBgU2V0YCBoYXZlIG5vIGVudW1lcmFibGUga2V5cy4KICAgICAgdmFyIGtleXMgPSBhbGxLZXlzKG9iaik7CiAgICAgIGlmIChnZXRMZW5ndGgoa2V5cykpIHJldHVybiBmYWxzZTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGlmICghaXNGdW5jdGlvbiQxKG9ialttZXRob2RzW2ldXSkpIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICAvLyBJZiB3ZSBhcmUgdGVzdGluZyBhZ2FpbnN0IGBXZWFrTWFwYCwgd2UgbmVlZCB0byBlbnN1cmUgdGhhdAogICAgICAvLyBgb2JqYCBkb2Vzbid0IGhhdmUgYSBgZm9yRWFjaGAgbWV0aG9kIGluIG9yZGVyIHRvIGRpc3Rpbmd1aXNoCiAgICAgIC8vIGl0IGZyb20gYSByZWd1bGFyIGBNYXBgLgogICAgICByZXR1cm4gbWV0aG9kcyAhPT0gd2Vha01hcE1ldGhvZHMgfHwgIWlzRnVuY3Rpb24kMShvYmpbZm9yRWFjaE5hbWVdKTsKICAgIH07CiAgfQoKICAvLyBJbiB0aGUgaW50ZXJlc3Qgb2YgY29tcGFjdCBtaW5pZmljYXRpb24sIHdlIHdyaXRlCiAgLy8gZWFjaCBzdHJpbmcgaW4gdGhlIGZpbmdlcnByaW50cyBvbmx5IG9uY2UuCiAgdmFyIGZvckVhY2hOYW1lID0gJ2ZvckVhY2gnLAogICAgICBoYXNOYW1lID0gJ2hhcycsCiAgICAgIGNvbW1vbkluaXQgPSBbJ2NsZWFyJywgJ2RlbGV0ZSddLAogICAgICBtYXBUYWlsID0gWydnZXQnLCBoYXNOYW1lLCAnc2V0J107CgogIC8vIGBNYXBgLCBgV2Vha01hcGAgYW5kIGBTZXRgIGVhY2ggaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQKICAvLyBjb21iaW5hdGlvbnMgb2YgdGhlIGFib3ZlIHN1Ymxpc3RzLgogIHZhciBtYXBNZXRob2RzID0gY29tbW9uSW5pdC5jb25jYXQoZm9yRWFjaE5hbWUsIG1hcFRhaWwpLAogICAgICB3ZWFrTWFwTWV0aG9kcyA9IGNvbW1vbkluaXQuY29uY2F0KG1hcFRhaWwpLAogICAgICBzZXRNZXRob2RzID0gWydhZGQnXS5jb25jYXQoY29tbW9uSW5pdCwgZm9yRWFjaE5hbWUsIGhhc05hbWUpOwoKICB2YXIgaXNNYXAgPSBpc0lFMTEgPyBpZTExZmluZ2VycHJpbnQobWFwTWV0aG9kcykgOiB0YWdUZXN0ZXIoJ01hcCcpOwoKICB2YXIgaXNXZWFrTWFwID0gaXNJRTExID8gaWUxMWZpbmdlcnByaW50KHdlYWtNYXBNZXRob2RzKSA6IHRhZ1Rlc3RlcignV2Vha01hcCcpOwoKICB2YXIgaXNTZXQgPSBpc0lFMTEgPyBpZTExZmluZ2VycHJpbnQoc2V0TWV0aG9kcykgOiB0YWdUZXN0ZXIoJ1NldCcpOwoKICB2YXIgaXNXZWFrU2V0ID0gdGFnVGVzdGVyKCdXZWFrU2V0Jyk7CgogIC8vIFJldHJpZXZlIHRoZSB2YWx1ZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy4KICBmdW5jdGlvbiB2YWx1ZXMob2JqKSB7CiAgICB2YXIgX2tleXMgPSBrZXlzKG9iaik7CiAgICB2YXIgbGVuZ3RoID0gX2tleXMubGVuZ3RoOwogICAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhbHVlc1tpXSA9IG9ialtfa2V5c1tpXV07CiAgICB9CiAgICByZXR1cm4gdmFsdWVzOwogIH0KCiAgLy8gQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgYFtrZXksIHZhbHVlXWAgcGFpcnMuCiAgLy8gVGhlIG9wcG9zaXRlIG9mIGBfLm9iamVjdGAgd2l0aCBvbmUgYXJndW1lbnQuCiAgZnVuY3Rpb24gcGFpcnMob2JqKSB7CiAgICB2YXIgX2tleXMgPSBrZXlzKG9iaik7CiAgICB2YXIgbGVuZ3RoID0gX2tleXMubGVuZ3RoOwogICAgdmFyIHBhaXJzID0gQXJyYXkobGVuZ3RoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgcGFpcnNbaV0gPSBbX2tleXNbaV0sIG9ialtfa2V5c1tpXV1dOwogICAgfQogICAgcmV0dXJuIHBhaXJzOwogIH0KCiAgLy8gSW52ZXJ0IHRoZSBrZXlzIGFuZCB2YWx1ZXMgb2YgYW4gb2JqZWN0LiBUaGUgdmFsdWVzIG11c3QgYmUgc2VyaWFsaXphYmxlLgogIGZ1bmN0aW9uIGludmVydChvYmopIHsKICAgIHZhciByZXN1bHQgPSB7fTsKICAgIHZhciBfa2V5cyA9IGtleXMob2JqKTsKICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICByZXN1bHRbb2JqW19rZXlzW2ldXV0gPSBfa2V5c1tpXTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiB0aGUgZnVuY3Rpb24gbmFtZXMgYXZhaWxhYmxlIG9uIHRoZSBvYmplY3QuCiAgZnVuY3Rpb24gZnVuY3Rpb25zKG9iaikgewogICAgdmFyIG5hbWVzID0gW107CiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICAgIGlmIChpc0Z1bmN0aW9uJDEob2JqW2tleV0pKSBuYW1lcy5wdXNoKGtleSk7CiAgICB9CiAgICByZXR1cm4gbmFtZXMuc29ydCgpOwogIH0KCiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGFzc2lnbmVyIGZ1bmN0aW9ucy4KICBmdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihrZXlzRnVuYywgZGVmYXVsdHMpIHsKICAgIHJldHVybiBmdW5jdGlvbihvYmopIHsKICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7CiAgICAgIGlmIChkZWZhdWx0cykgb2JqID0gT2JqZWN0KG9iaik7CiAgICAgIGlmIChsZW5ndGggPCAyIHx8IG9iaiA9PSBudWxsKSByZXR1cm4gb2JqOwogICAgICBmb3IgKHZhciBpbmRleCA9IDE7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF0sCiAgICAgICAgICAgIGtleXMgPSBrZXlzRnVuYyhzb3VyY2UpLAogICAgICAgICAgICBsID0ga2V5cy5sZW5ndGg7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHsKICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldOwogICAgICAgICAgaWYgKCFkZWZhdWx0cyB8fCBvYmpba2V5XSA9PT0gdm9pZCAwKSBvYmpba2V5XSA9IHNvdXJjZVtrZXldOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gb2JqOwogICAgfTsKICB9CgogIC8vIEV4dGVuZCBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgcHJvcGVydGllcyBpbiBwYXNzZWQtaW4gb2JqZWN0KHMpLgogIHZhciBleHRlbmQgPSBjcmVhdGVBc3NpZ25lcihhbGxLZXlzKTsKCiAgLy8gQXNzaWducyBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgb3duIHByb3BlcnRpZXMgaW4gdGhlIHBhc3NlZC1pbgogIC8vIG9iamVjdChzKS4KICAvLyAoaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnbikKICB2YXIgZXh0ZW5kT3duID0gY3JlYXRlQXNzaWduZXIoa2V5cyk7CgogIC8vIEZpbGwgaW4gYSBnaXZlbiBvYmplY3Qgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXMuCiAgdmFyIGRlZmF1bHRzID0gY3JlYXRlQXNzaWduZXIoYWxsS2V5cywgdHJ1ZSk7CgogIC8vIENyZWF0ZSBhIG5ha2VkIGZ1bmN0aW9uIHJlZmVyZW5jZSBmb3Igc3Vycm9nYXRlLXByb3RvdHlwZS1zd2FwcGluZy4KICBmdW5jdGlvbiBjdG9yKCkgewogICAgcmV0dXJuIGZ1bmN0aW9uKCl7fTsKICB9CgogIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIGFub3RoZXIuCiAgZnVuY3Rpb24gYmFzZUNyZWF0ZShwcm90b3R5cGUpIHsKICAgIGlmICghaXNPYmplY3QocHJvdG90eXBlKSkgcmV0dXJuIHt9OwogICAgaWYgKG5hdGl2ZUNyZWF0ZSkgcmV0dXJuIG5hdGl2ZUNyZWF0ZShwcm90b3R5cGUpOwogICAgdmFyIEN0b3IgPSBjdG9yKCk7CiAgICBDdG9yLnByb3RvdHlwZSA9IHByb3RvdHlwZTsKICAgIHZhciByZXN1bHQgPSBuZXcgQ3RvcjsKICAgIEN0b3IucHJvdG90eXBlID0gbnVsbDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuCiAgLy8gSWYgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFyZSBwcm92aWRlZCB0aGVuIHRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGUKICAvLyBjcmVhdGVkIG9iamVjdC4KICBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCBwcm9wcykgewogICAgdmFyIHJlc3VsdCA9IGJhc2VDcmVhdGUocHJvdG90eXBlKTsKICAgIGlmIChwcm9wcykgZXh0ZW5kT3duKHJlc3VsdCwgcHJvcHMpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIENyZWF0ZSBhIChzaGFsbG93LWNsb25lZCkgZHVwbGljYXRlIG9mIGFuIG9iamVjdC4KICBmdW5jdGlvbiBjbG9uZShvYmopIHsKICAgIGlmICghaXNPYmplY3Qob2JqKSkgcmV0dXJuIG9iajsKICAgIHJldHVybiBpc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IGV4dGVuZCh7fSwgb2JqKTsKICB9CgogIC8vIEludm9rZXMgYGludGVyY2VwdG9yYCB3aXRoIHRoZSBgb2JqYCBhbmQgdGhlbiByZXR1cm5zIGBvYmpgLgogIC8vIFRoZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gInRhcCBpbnRvIiBhIG1ldGhvZCBjaGFpbiwgaW4KICAvLyBvcmRlciB0byBwZXJmb3JtIG9wZXJhdGlvbnMgb24gaW50ZXJtZWRpYXRlIHJlc3VsdHMgd2l0aGluIHRoZSBjaGFpbi4KICBmdW5jdGlvbiB0YXAob2JqLCBpbnRlcmNlcHRvcikgewogICAgaW50ZXJjZXB0b3Iob2JqKTsKICAgIHJldHVybiBvYmo7CiAgfQoKICAvLyBOb3JtYWxpemUgYSAoZGVlcCkgcHJvcGVydHkgYHBhdGhgIHRvIGFycmF5LgogIC8vIExpa2UgYF8uaXRlcmF0ZWVgLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjdXN0b21pemVkLgogIGZ1bmN0aW9uIHRvUGF0aCQxKHBhdGgpIHsKICAgIHJldHVybiBpc0FycmF5KHBhdGgpID8gcGF0aCA6IFtwYXRoXTsKICB9CiAgXyQxLnRvUGF0aCA9IHRvUGF0aCQxOwoKICAvLyBJbnRlcm5hbCB3cmFwcGVyIGZvciBgXy50b1BhdGhgIHRvIGVuYWJsZSBtaW5pZmljYXRpb24uCiAgLy8gU2ltaWxhciB0byBgY2JgIGZvciBgXy5pdGVyYXRlZWAuCiAgZnVuY3Rpb24gdG9QYXRoKHBhdGgpIHsKICAgIHJldHVybiBfJDEudG9QYXRoKHBhdGgpOwogIH0KCiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gb2J0YWluIGEgbmVzdGVkIHByb3BlcnR5IGluIGBvYmpgIGFsb25nIGBwYXRoYC4KICBmdW5jdGlvbiBkZWVwR2V0KG9iaiwgcGF0aCkgewogICAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB2b2lkIDA7CiAgICAgIG9iaiA9IG9ialtwYXRoW2ldXTsKICAgIH0KICAgIHJldHVybiBsZW5ndGggPyBvYmogOiB2b2lkIDA7CiAgfQoKICAvLyBHZXQgdGhlIHZhbHVlIG9mIHRoZSAoZGVlcCkgcHJvcGVydHkgb24gYHBhdGhgIGZyb20gYG9iamVjdGAuCiAgLy8gSWYgYW55IHByb3BlcnR5IGluIGBwYXRoYCBkb2VzIG5vdCBleGlzdCBvciBpZiB0aGUgdmFsdWUgaXMKICAvLyBgdW5kZWZpbmVkYCwgcmV0dXJuIGBkZWZhdWx0VmFsdWVgIGluc3RlYWQuCiAgLy8gVGhlIGBwYXRoYCBpcyBub3JtYWxpemVkIHRocm91Z2ggYF8udG9QYXRoYC4KICBmdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHsKICAgIHZhciB2YWx1ZSA9IGRlZXBHZXQob2JqZWN0LCB0b1BhdGgocGF0aCkpOwogICAgcmV0dXJuIGlzVW5kZWZpbmVkKHZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlOwogIH0KCiAgLy8gU2hvcnRjdXQgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBwcm9wZXJ0eSBkaXJlY3RseSBvbgogIC8vIGl0c2VsZiAoaW4gb3RoZXIgd29yZHMsIG5vdCBvbiBhIHByb3RvdHlwZSkuIFVubGlrZSB0aGUgaW50ZXJuYWwgYGhhc2AKICAvLyBmdW5jdGlvbiwgdGhpcyBwdWJsaWMgdmVyc2lvbiBjYW4gYWxzbyB0cmF2ZXJzZSBuZXN0ZWQgcHJvcGVydGllcy4KICBmdW5jdGlvbiBoYXMob2JqLCBwYXRoKSB7CiAgICBwYXRoID0gdG9QYXRoKHBhdGgpOwogICAgdmFyIGxlbmd0aCA9IHBhdGgubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB2YXIga2V5ID0gcGF0aFtpXTsKICAgICAgaWYgKCFoYXMkMShvYmosIGtleSkpIHJldHVybiBmYWxzZTsKICAgICAgb2JqID0gb2JqW2tleV07CiAgICB9CiAgICByZXR1cm4gISFsZW5ndGg7CiAgfQoKICAvLyBLZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0ZWVzLgogIGZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICAvLyBSZXR1cm5zIGEgcHJlZGljYXRlIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBzZXQgb2YKICAvLyBga2V5OnZhbHVlYCBwYWlycy4KICBmdW5jdGlvbiBtYXRjaGVyKGF0dHJzKSB7CiAgICBhdHRycyA9IGV4dGVuZE93bih7fSwgYXR0cnMpOwogICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikgewogICAgICByZXR1cm4gaXNNYXRjaChvYmosIGF0dHJzKTsKICAgIH07CiAgfQoKICAvLyBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBwYXNzZWQgYW4gb2JqZWN0LCB3aWxsIHRyYXZlcnNlIHRoYXQgb2JqZWN04oCZcwogIC8vIHByb3BlcnRpZXMgZG93biB0aGUgZ2l2ZW4gYHBhdGhgLCBzcGVjaWZpZWQgYXMgYW4gYXJyYXkgb2Yga2V5cyBvciBpbmRpY2VzLgogIGZ1bmN0aW9uIHByb3BlcnR5KHBhdGgpIHsKICAgIHBhdGggPSB0b1BhdGgocGF0aCk7CiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7CiAgICAgIHJldHVybiBkZWVwR2V0KG9iaiwgcGF0aCk7CiAgICB9OwogIH0KCiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVmZmljaWVudCAoZm9yIGN1cnJlbnQgZW5naW5lcykgdmVyc2lvbgogIC8vIG9mIHRoZSBwYXNzZWQtaW4gY2FsbGJhY2ssIHRvIGJlIHJlcGVhdGVkbHkgYXBwbGllZCBpbiBvdGhlciBVbmRlcnNjb3JlCiAgLy8gZnVuY3Rpb25zLgogIGZ1bmN0aW9uIG9wdGltaXplQ2IoZnVuYywgY29udGV4dCwgYXJnQ291bnQpIHsKICAgIGlmIChjb250ZXh0ID09PSB2b2lkIDApIHJldHVybiBmdW5jOwogICAgc3dpdGNoIChhcmdDb3VudCA9PSBudWxsID8gMyA6IGFyZ0NvdW50KSB7CiAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCB2YWx1ZSk7CiAgICAgIH07CiAgICAgIC8vIFRoZSAyLWFyZ3VtZW50IGNhc2UgaXMgb21pdHRlZCBiZWNhdXNlIHdl4oCZcmUgbm90IHVzaW5nIGl0LgogICAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHsKICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7CiAgICAgIH07CiAgICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9uKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHsKICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pOwogICAgICB9OwogICAgfQogICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gZnVuYy5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpOwogICAgfTsKICB9CgogIC8vIEFuIGludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGNhbGxiYWNrcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGVhY2gKICAvLyBlbGVtZW50IGluIGEgY29sbGVjdGlvbiwgcmV0dXJuaW5nIHRoZSBkZXNpcmVkIHJlc3VsdCDigJQgZWl0aGVyIGBfLmlkZW50aXR5YCwKICAvLyBhbiBhcmJpdHJhcnkgY2FsbGJhY2ssIGEgcHJvcGVydHkgbWF0Y2hlciwgb3IgYSBwcm9wZXJ0eSBhY2Nlc3Nvci4KICBmdW5jdGlvbiBiYXNlSXRlcmF0ZWUodmFsdWUsIGNvbnRleHQsIGFyZ0NvdW50KSB7CiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGlkZW50aXR5OwogICAgaWYgKGlzRnVuY3Rpb24kMSh2YWx1ZSkpIHJldHVybiBvcHRpbWl6ZUNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCk7CiAgICBpZiAoaXNPYmplY3QodmFsdWUpICYmICFpc0FycmF5KHZhbHVlKSkgcmV0dXJuIG1hdGNoZXIodmFsdWUpOwogICAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTsKICB9CgogIC8vIEV4dGVybmFsIHdyYXBwZXIgZm9yIG91ciBjYWxsYmFjayBnZW5lcmF0b3IuIFVzZXJzIG1heSBjdXN0b21pemUKICAvLyBgXy5pdGVyYXRlZWAgaWYgdGhleSB3YW50IGFkZGl0aW9uYWwgcHJlZGljYXRlL2l0ZXJhdGVlIHNob3J0aGFuZCBzdHlsZXMuCiAgLy8gVGhpcyBhYnN0cmFjdGlvbiBoaWRlcyB0aGUgaW50ZXJuYWwtb25seSBgYXJnQ291bnRgIGFyZ3VtZW50LgogIGZ1bmN0aW9uIGl0ZXJhdGVlKHZhbHVlLCBjb250ZXh0KSB7CiAgICByZXR1cm4gYmFzZUl0ZXJhdGVlKHZhbHVlLCBjb250ZXh0LCBJbmZpbml0eSk7CiAgfQogIF8kMS5pdGVyYXRlZSA9IGl0ZXJhdGVlOwoKICAvLyBUaGUgZnVuY3Rpb24gd2UgY2FsbCBpbnRlcm5hbGx5IHRvIGdlbmVyYXRlIGEgY2FsbGJhY2suIEl0IGludm9rZXMKICAvLyBgXy5pdGVyYXRlZWAgaWYgb3ZlcnJpZGRlbiwgb3RoZXJ3aXNlIGBiYXNlSXRlcmF0ZWVgLgogIGZ1bmN0aW9uIGNiKHZhbHVlLCBjb250ZXh0LCBhcmdDb3VudCkgewogICAgaWYgKF8kMS5pdGVyYXRlZSAhPT0gaXRlcmF0ZWUpIHJldHVybiBfJDEuaXRlcmF0ZWUodmFsdWUsIGNvbnRleHQpOwogICAgcmV0dXJuIGJhc2VJdGVyYXRlZSh2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpOwogIH0KCiAgLy8gUmV0dXJucyB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgYGl0ZXJhdGVlYCB0byBlYWNoIGVsZW1lbnQgb2YgYG9iamAuCiAgLy8gSW4gY29udHJhc3QgdG8gYF8ubWFwYCBpdCByZXR1cm5zIGFuIG9iamVjdC4KICBmdW5jdGlvbiBtYXBPYmplY3Qob2JqLCBpdGVyYXRlZSwgY29udGV4dCkgewogICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7CiAgICB2YXIgX2tleXMgPSBrZXlzKG9iaiksCiAgICAgICAgbGVuZ3RoID0gX2tleXMubGVuZ3RoLAogICAgICAgIHJlc3VsdHMgPSB7fTsKICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKICAgICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5c1tpbmRleF07CiAgICAgIHJlc3VsdHNbY3VycmVudEtleV0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9CgogIC8vIFByZWRpY2F0ZS1nZW5lcmF0aW5nIGZ1bmN0aW9uLiBPZnRlbiB1c2VmdWwgb3V0c2lkZSBvZiBVbmRlcnNjb3JlLgogIGZ1bmN0aW9uIG5vb3AoKXt9CgogIC8vIEdlbmVyYXRlcyBhIGZ1bmN0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0aGF0IHJldHVybnMgYSBnaXZlbiBwcm9wZXJ0eS4KICBmdW5jdGlvbiBwcm9wZXJ0eU9mKG9iaikgewogICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbm9vcDsKICAgIHJldHVybiBmdW5jdGlvbihwYXRoKSB7CiAgICAgIHJldHVybiBnZXQob2JqLCBwYXRoKTsKICAgIH07CiAgfQoKICAvLyBSdW4gYSBmdW5jdGlvbiAqKm4qKiB0aW1lcy4KICBmdW5jdGlvbiB0aW1lcyhuLCBpdGVyYXRlZSwgY29udGV4dCkgewogICAgdmFyIGFjY3VtID0gQXJyYXkoTWF0aC5tYXgoMCwgbikpOwogICAgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBjb250ZXh0LCAxKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBhY2N1bVtpXSA9IGl0ZXJhdGVlKGkpOwogICAgcmV0dXJuIGFjY3VtOwogIH0KCiAgLy8gUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiBgbWluYCBhbmQgYG1heGAgKGluY2x1c2l2ZSkuCiAgZnVuY3Rpb24gcmFuZG9tKG1pbiwgbWF4KSB7CiAgICBpZiAobWF4ID09IG51bGwpIHsKICAgICAgbWF4ID0gbWluOwogICAgICBtaW4gPSAwOwogICAgfQogICAgcmV0dXJuIG1pbiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7CiAgfQoKICAvLyBBIChwb3NzaWJseSBmYXN0ZXIpIHdheSB0byBnZXQgdGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGFuIGludGVnZXIuCiAgdmFyIG5vdyA9IERhdGUubm93IHx8IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOwogIH07CgogIC8vIEludGVybmFsIGhlbHBlciB0byBnZW5lcmF0ZSBmdW5jdGlvbnMgZm9yIGVzY2FwaW5nIGFuZCB1bmVzY2FwaW5nIHN0cmluZ3MKICAvLyB0by9mcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi4KICBmdW5jdGlvbiBjcmVhdGVFc2NhcGVyKG1hcCkgewogICAgdmFyIGVzY2FwZXIgPSBmdW5jdGlvbihtYXRjaCkgewogICAgICByZXR1cm4gbWFwW21hdGNoXTsKICAgIH07CiAgICAvLyBSZWdleGVzIGZvciBpZGVudGlmeWluZyBhIGtleSB0aGF0IG5lZWRzIHRvIGJlIGVzY2FwZWQuCiAgICB2YXIgc291cmNlID0gJyg/OicgKyBrZXlzKG1hcCkuam9pbignfCcpICsgJyknOwogICAgdmFyIHRlc3RSZWdleHAgPSBSZWdFeHAoc291cmNlKTsKICAgIHZhciByZXBsYWNlUmVnZXhwID0gUmVnRXhwKHNvdXJjZSwgJ2cnKTsKICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHsKICAgICAgc3RyaW5nID0gc3RyaW5nID09IG51bGwgPyAnJyA6ICcnICsgc3RyaW5nOwogICAgICByZXR1cm4gdGVzdFJlZ2V4cC50ZXN0KHN0cmluZykgPyBzdHJpbmcucmVwbGFjZShyZXBsYWNlUmVnZXhwLCBlc2NhcGVyKSA6IHN0cmluZzsKICAgIH07CiAgfQoKICAvLyBJbnRlcm5hbCBsaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5nLgogIHZhciBlc2NhcGVNYXAgPSB7CiAgICAnJic6ICcmYW1wOycsCiAgICAnPCc6ICcmbHQ7JywKICAgICc+JzogJyZndDsnLAogICAgJyInOiAnJnF1b3Q7JywKICAgICInIjogJyYjeDI3OycsCiAgICAnYCc6ICcmI3g2MDsnCiAgfTsKCiAgLy8gRnVuY3Rpb24gZm9yIGVzY2FwaW5nIHN0cmluZ3MgdG8gSFRNTCBpbnRlcnBvbGF0aW9uLgogIHZhciBfZXNjYXBlID0gY3JlYXRlRXNjYXBlcihlc2NhcGVNYXApOwoKICAvLyBJbnRlcm5hbCBsaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIHVuZXNjYXBpbmcuCiAgdmFyIHVuZXNjYXBlTWFwID0gaW52ZXJ0KGVzY2FwZU1hcCk7CgogIC8vIEZ1bmN0aW9uIGZvciB1bmVzY2FwaW5nIHN0cmluZ3MgZnJvbSBIVE1MIGludGVycG9sYXRpb24uCiAgdmFyIF91bmVzY2FwZSA9IGNyZWF0ZUVzY2FwZXIodW5lc2NhcGVNYXApOwoKICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxlIHRlbXBsYXRlIGRlbGltaXRlcnMuIENoYW5nZSB0aGUKICAvLyBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuCiAgdmFyIHRlbXBsYXRlU2V0dGluZ3MgPSBfJDEudGVtcGxhdGVTZXR0aW5ncyA9IHsKICAgIGV2YWx1YXRlOiAvPCUoW1xzXFNdKz8pJT4vZywKICAgIGludGVycG9sYXRlOiAvPCU9KFtcc1xTXSs/KSU+L2csCiAgICBlc2NhcGU6IC88JS0oW1xzXFNdKz8pJT4vZwogIH07CgogIC8vIFdoZW4gY3VzdG9taXppbmcgYF8udGVtcGxhdGVTZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhbgogIC8vIGludGVycG9sYXRpb24sIGV2YWx1YXRpb24gb3IgZXNjYXBpbmcgcmVnZXgsIHdlIG5lZWQgb25lIHRoYXQgaXMKICAvLyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC4KICB2YXIgbm9NYXRjaCA9IC8oLileLzsKCiAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGEKICAvLyBzdHJpbmcgbGl0ZXJhbC4KICB2YXIgZXNjYXBlcyA9IHsKICAgICInIjogIiciLAogICAgJ1xcJzogJ1xcJywKICAgICdccic6ICdyJywKICAgICdcbic6ICduJywKICAgICdcdTIwMjgnOiAndTIwMjgnLAogICAgJ1x1MjAyOSc6ICd1MjAyOScKICB9OwoKICB2YXIgZXNjYXBlUmVnRXhwID0gL1xcfCd8XHJ8XG58XHUyMDI4fFx1MjAyOS9nOwoKICBmdW5jdGlvbiBlc2NhcGVDaGFyKG1hdGNoKSB7CiAgICByZXR1cm4gJ1xcJyArIGVzY2FwZXNbbWF0Y2hdOwogIH0KCiAgLy8gSW4gb3JkZXIgdG8gcHJldmVudCB0aGlyZC1wYXJ0eSBjb2RlIGluamVjdGlvbiB0aHJvdWdoCiAgLy8gYF8udGVtcGxhdGVTZXR0aW5ncy52YXJpYWJsZWAsIHdlIHRlc3QgaXQgYWdhaW5zdCB0aGUgZm9sbG93aW5nIHJlZ3VsYXIKICAvLyBleHByZXNzaW9uLiBJdCBpcyBpbnRlbnRpb25hbGx5IGEgYml0IG1vcmUgbGliZXJhbCB0aGFuIGp1c3QgbWF0Y2hpbmcgdmFsaWQKICAvLyBpZGVudGlmaWVycywgYnV0IHN0aWxsIHByZXZlbnRzIHBvc3NpYmxlIGxvb3Bob2xlcyB0aHJvdWdoIGRlZmF1bHRzIG9yCiAgLy8gZGVzdHJ1Y3R1cmluZyBhc3NpZ25tZW50LgogIHZhciBiYXJlSWRlbnRpZmllciA9IC9eXHMqKFx3fFwkKStccyokLzsKCiAgLy8gSmF2YVNjcmlwdCBtaWNyby10ZW1wbGF0aW5nLCBzaW1pbGFyIHRvIEpvaG4gUmVzaWcncyBpbXBsZW1lbnRhdGlvbi4KICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdoaXRlc3BhY2UsCiAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4gaW50ZXJwb2xhdGVkIGNvZGUuCiAgLy8gTkI6IGBvbGRTZXR0aW5nc2Agb25seSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgogIGZ1bmN0aW9uIHRlbXBsYXRlKHRleHQsIHNldHRpbmdzLCBvbGRTZXR0aW5ncykgewogICAgaWYgKCFzZXR0aW5ncyAmJiBvbGRTZXR0aW5ncykgc2V0dGluZ3MgPSBvbGRTZXR0aW5nczsKICAgIHNldHRpbmdzID0gZGVmYXVsdHMoe30sIHNldHRpbmdzLCBfJDEudGVtcGxhdGVTZXR0aW5ncyk7CgogICAgLy8gQ29tYmluZSBkZWxpbWl0ZXJzIGludG8gb25lIHJlZ3VsYXIgZXhwcmVzc2lvbiB2aWEgYWx0ZXJuYXRpb24uCiAgICB2YXIgbWF0Y2hlciA9IFJlZ0V4cChbCiAgICAgIChzZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLAogICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291cmNlLAogICAgICAoc2V0dGluZ3MuZXZhbHVhdGUgfHwgbm9NYXRjaCkuc291cmNlCiAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7CgogICAgLy8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMgYXBwcm9wcmlhdGVseS4KICAgIHZhciBpbmRleCA9IDA7CiAgICB2YXIgc291cmNlID0gIl9fcCs9JyI7CiAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHsKICAgICAgc291cmNlICs9IHRleHQuc2xpY2UoaW5kZXgsIG9mZnNldCkucmVwbGFjZShlc2NhcGVSZWdFeHAsIGVzY2FwZUNoYXIpOwogICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDsKCiAgICAgIGlmIChlc2NhcGUpIHsKICAgICAgICBzb3VyY2UgKz0gIicrXG4oKF9fdD0oIiArIGVzY2FwZSArICIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcbiciOwogICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRlKSB7CiAgICAgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBpbnRlcnBvbGF0ZSArICIpKT09bnVsbD8nJzpfX3QpK1xuJyI7CiAgICAgIH0gZWxzZSBpZiAoZXZhbHVhdGUpIHsKICAgICAgICBzb3VyY2UgKz0gIic7XG4iICsgZXZhbHVhdGUgKyAiXG5fX3ArPSciOwogICAgICB9CgogICAgICAvLyBBZG9iZSBWTXMgbmVlZCB0aGUgbWF0Y2ggcmV0dXJuZWQgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvZmZzZXQuCiAgICAgIHJldHVybiBtYXRjaDsKICAgIH0pOwogICAgc291cmNlICs9ICInO1xuIjsKCiAgICB2YXIgYXJndW1lbnQgPSBzZXR0aW5ncy52YXJpYWJsZTsKICAgIGlmIChhcmd1bWVudCkgewogICAgICAvLyBJbnN1cmUgYWdhaW5zdCB0aGlyZC1wYXJ0eSBjb2RlIGluamVjdGlvbi4gKENWRS0yMDIxLTIzMzU4KQogICAgICBpZiAoIWJhcmVJZGVudGlmaWVyLnRlc3QoYXJndW1lbnQpKSB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgJ3ZhcmlhYmxlIGlzIG5vdCBhIGJhcmUgaWRlbnRpZmllcjogJyArIGFyZ3VtZW50CiAgICAgICk7CiAgICB9IGVsc2UgewogICAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxvY2FsIHNjb3BlLgogICAgICBzb3VyY2UgPSAnd2l0aChvYmp8fHt9KXtcbicgKyBzb3VyY2UgKyAnfVxuJzsKICAgICAgYXJndW1lbnQgPSAnb2JqJzsKICAgIH0KCiAgICBzb3VyY2UgPSAidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLCIgKwogICAgICAicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcbiIgKwogICAgICBzb3VyY2UgKyAncmV0dXJuIF9fcDtcbic7CgogICAgdmFyIHJlbmRlcjsKICAgIHRyeSB7CiAgICAgIHJlbmRlciA9IG5ldyBGdW5jdGlvbihhcmd1bWVudCwgJ18nLCBzb3VyY2UpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBlLnNvdXJjZSA9IHNvdXJjZTsKICAgICAgdGhyb3cgZTsKICAgIH0KCiAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihkYXRhKSB7CiAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfJDEpOwogICAgfTsKCiAgICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29tcGlsYXRpb24uCiAgICB0ZW1wbGF0ZS5zb3VyY2UgPSAnZnVuY3Rpb24oJyArIGFyZ3VtZW50ICsgJyl7XG4nICsgc291cmNlICsgJ30nOwoKICAgIHJldHVybiB0ZW1wbGF0ZTsKICB9CgogIC8vIFRyYXZlcnNlcyB0aGUgY2hpbGRyZW4gb2YgYG9iamAgYWxvbmcgYHBhdGhgLiBJZiBhIGNoaWxkIGlzIGEgZnVuY3Rpb24sIGl0CiAgLy8gaXMgaW52b2tlZCB3aXRoIGl0cyBwYXJlbnQgYXMgY29udGV4dC4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpbmFsCiAgLy8gY2hpbGQsIG9yIGBmYWxsYmFja2AgaWYgYW55IGNoaWxkIGlzIHVuZGVmaW5lZC4KICBmdW5jdGlvbiByZXN1bHQob2JqLCBwYXRoLCBmYWxsYmFjaykgewogICAgcGF0aCA9IHRvUGF0aChwYXRoKTsKICAgIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDsKICAgIGlmICghbGVuZ3RoKSB7CiAgICAgIHJldHVybiBpc0Z1bmN0aW9uJDEoZmFsbGJhY2spID8gZmFsbGJhY2suY2FsbChvYmopIDogZmFsbGJhY2s7CiAgICB9CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBwcm9wID0gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmpbcGF0aFtpXV07CiAgICAgIGlmIChwcm9wID09PSB2b2lkIDApIHsKICAgICAgICBwcm9wID0gZmFsbGJhY2s7CiAgICAgICAgaSA9IGxlbmd0aDsgLy8gRW5zdXJlIHdlIGRvbid0IGNvbnRpbnVlIGl0ZXJhdGluZy4KICAgICAgfQogICAgICBvYmogPSBpc0Z1bmN0aW9uJDEocHJvcCkgPyBwcm9wLmNhbGwob2JqKSA6IHByb3A7CiAgICB9CiAgICByZXR1cm4gb2JqOwogIH0KCiAgLy8gR2VuZXJhdGUgYSB1bmlxdWUgaW50ZWdlciBpZCAodW5pcXVlIHdpdGhpbiB0aGUgZW50aXJlIGNsaWVudCBzZXNzaW9uKS4KICAvLyBVc2VmdWwgZm9yIHRlbXBvcmFyeSBET00gaWRzLgogIHZhciBpZENvdW50ZXIgPSAwOwogIGZ1bmN0aW9uIHVuaXF1ZUlkKHByZWZpeCkgewogICAgdmFyIGlkID0gKytpZENvdW50ZXIgKyAnJzsKICAgIHJldHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlkOwogIH0KCiAgLy8gU3RhcnQgY2hhaW5pbmcgYSB3cmFwcGVkIFVuZGVyc2NvcmUgb2JqZWN0LgogIGZ1bmN0aW9uIGNoYWluKG9iaikgewogICAgdmFyIGluc3RhbmNlID0gXyQxKG9iaik7CiAgICBpbnN0YW5jZS5fY2hhaW4gPSB0cnVlOwogICAgcmV0dXJuIGluc3RhbmNlOwogIH0KCiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBgc291cmNlRnVuY2AgYm91bmQgdG8gYGNvbnRleHRgIHdpdGggb3B0aW9uYWwKICAvLyBgYXJnc2AuIERldGVybWluZXMgd2hldGhlciB0byBleGVjdXRlIGEgZnVuY3Rpb24gYXMgYSBjb25zdHJ1Y3RvciBvciBhcyBhCiAgLy8gbm9ybWFsIGZ1bmN0aW9uLgogIGZ1bmN0aW9uIGV4ZWN1dGVCb3VuZChzb3VyY2VGdW5jLCBib3VuZEZ1bmMsIGNvbnRleHQsIGNhbGxpbmdDb250ZXh0LCBhcmdzKSB7CiAgICBpZiAoIShjYWxsaW5nQ29udGV4dCBpbnN0YW5jZW9mIGJvdW5kRnVuYykpIHJldHVybiBzb3VyY2VGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpOwogICAgdmFyIHNlbGYgPSBiYXNlQ3JlYXRlKHNvdXJjZUZ1bmMucHJvdG90eXBlKTsKICAgIHZhciByZXN1bHQgPSBzb3VyY2VGdW5jLmFwcGx5KHNlbGYsIGFyZ3MpOwogICAgaWYgKGlzT2JqZWN0KHJlc3VsdCkpIHJldHVybiByZXN1bHQ7CiAgICByZXR1cm4gc2VsZjsKICB9CgogIC8vIFBhcnRpYWxseSBhcHBseSBhIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIGEgdmVyc2lvbiB0aGF0IGhhcyBoYWQgc29tZSBvZiBpdHMKICAvLyBhcmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gYF9gIGFjdHMKICAvLyBhcyBhIHBsYWNlaG9sZGVyIGJ5IGRlZmF1bHQsIGFsbG93aW5nIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgdG8gYmUKICAvLyBwcmUtZmlsbGVkLiBTZXQgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgZm9yIGEgY3VzdG9tIHBsYWNlaG9sZGVyIGFyZ3VtZW50LgogIHZhciBwYXJ0aWFsID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCBib3VuZEFyZ3MpIHsKICAgIHZhciBwbGFjZWhvbGRlciA9IHBhcnRpYWwucGxhY2Vob2xkZXI7CiAgICB2YXIgYm91bmQgPSBmdW5jdGlvbigpIHsKICAgICAgdmFyIHBvc2l0aW9uID0gMCwgbGVuZ3RoID0gYm91bmRBcmdzLmxlbmd0aDsKICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW5ndGgpOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgYXJnc1tpXSA9IGJvdW5kQXJnc1tpXSA9PT0gcGxhY2Vob2xkZXIgPyBhcmd1bWVudHNbcG9zaXRpb24rK10gOiBib3VuZEFyZ3NbaV07CiAgICAgIH0KICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYXJndW1lbnRzLmxlbmd0aCkgYXJncy5wdXNoKGFyZ3VtZW50c1twb3NpdGlvbisrXSk7CiAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIHRoaXMsIHRoaXMsIGFyZ3MpOwogICAgfTsKICAgIHJldHVybiBib3VuZDsKICB9KTsKCiAgcGFydGlhbC5wbGFjZWhvbGRlciA9IF8kMTsKCiAgLy8gQ3JlYXRlIGEgZnVuY3Rpb24gYm91bmQgdG8gYSBnaXZlbiBvYmplY3QgKGFzc2lnbmluZyBgdGhpc2AsIGFuZCBhcmd1bWVudHMsCiAgLy8gb3B0aW9uYWxseSkuCiAgdmFyIGJpbmQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGZ1bmMsIGNvbnRleHQsIGFyZ3MpIHsKICAgIGlmICghaXNGdW5jdGlvbiQxKGZ1bmMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdCaW5kIG11c3QgYmUgY2FsbGVkIG9uIGEgZnVuY3Rpb24nKTsKICAgIHZhciBib3VuZCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oY2FsbEFyZ3MpIHsKICAgICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgY29udGV4dCwgdGhpcywgYXJncy5jb25jYXQoY2FsbEFyZ3MpKTsKICAgIH0pOwogICAgcmV0dXJuIGJvdW5kOwogIH0pOwoKICAvLyBJbnRlcm5hbCBoZWxwZXIgZm9yIGNvbGxlY3Rpb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgd2hldGhlciBhIGNvbGxlY3Rpb24KICAvLyBzaG91bGQgYmUgaXRlcmF0ZWQgYXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0LgogIC8vIFJlbGF0ZWQ6IGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b2xlbmd0aAogIC8vIEF2b2lkcyBhIHZlcnkgbmFzdHkgaU9TIDggSklUIGJ1ZyBvbiBBUk0tNjQuICMyMDk0CiAgdmFyIGlzQXJyYXlMaWtlID0gY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0TGVuZ3RoKTsKCiAgLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgYSByZWN1cnNpdmUgYGZsYXR0ZW5gIGZ1bmN0aW9uLgogIGZ1bmN0aW9uIGZsYXR0ZW4kMShpbnB1dCwgZGVwdGgsIHN0cmljdCwgb3V0cHV0KSB7CiAgICBvdXRwdXQgPSBvdXRwdXQgfHwgW107CiAgICBpZiAoIWRlcHRoICYmIGRlcHRoICE9PSAwKSB7CiAgICAgIGRlcHRoID0gSW5maW5pdHk7CiAgICB9IGVsc2UgaWYgKGRlcHRoIDw9IDApIHsKICAgICAgcmV0dXJuIG91dHB1dC5jb25jYXQoaW5wdXQpOwogICAgfQogICAgdmFyIGlkeCA9IG91dHB1dC5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGlucHV0KTsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciB2YWx1ZSA9IGlucHV0W2ldOwogICAgICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmIChpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyQxKHZhbHVlKSkpIHsKICAgICAgICAvLyBGbGF0dGVuIGN1cnJlbnQgbGV2ZWwgb2YgYXJyYXkgb3IgYXJndW1lbnRzIG9iamVjdC4KICAgICAgICBpZiAoZGVwdGggPiAxKSB7CiAgICAgICAgICBmbGF0dGVuJDEodmFsdWUsIGRlcHRoIC0gMSwgc3RyaWN0LCBvdXRwdXQpOwogICAgICAgICAgaWR4ID0gb3V0cHV0Lmxlbmd0aDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIGogPSAwLCBsZW4gPSB2YWx1ZS5sZW5ndGg7CiAgICAgICAgICB3aGlsZSAoaiA8IGxlbikgb3V0cHV0W2lkeCsrXSA9IHZhbHVlW2orK107CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKCFzdHJpY3QpIHsKICAgICAgICBvdXRwdXRbaWR4KytdID0gdmFsdWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBvdXRwdXQ7CiAgfQoKICAvLyBCaW5kIGEgbnVtYmVyIG9mIGFuIG9iamVjdCdzIG1ldGhvZHMgdG8gdGhhdCBvYmplY3QuIFJlbWFpbmluZyBhcmd1bWVudHMKICAvLyBhcmUgdGhlIG1ldGhvZCBuYW1lcyB0byBiZSBib3VuZC4gVXNlZnVsIGZvciBlbnN1cmluZyB0aGF0IGFsbCBjYWxsYmFja3MKICAvLyBkZWZpbmVkIG9uIGFuIG9iamVjdCBiZWxvbmcgdG8gaXQuCiAgdmFyIGJpbmRBbGwgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykgewogICAga2V5cyA9IGZsYXR0ZW4kMShrZXlzLCBmYWxzZSwgZmFsc2UpOwogICAgdmFyIGluZGV4ID0ga2V5cy5sZW5ndGg7CiAgICBpZiAoaW5kZXggPCAxKSB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBbGwgbXVzdCBiZSBwYXNzZWQgZnVuY3Rpb24gbmFtZXMnKTsKICAgIHdoaWxlIChpbmRleC0tKSB7CiAgICAgIHZhciBrZXkgPSBrZXlzW2luZGV4XTsKICAgICAgb2JqW2tleV0gPSBiaW5kKG9ialtrZXldLCBvYmopOwogICAgfQogICAgcmV0dXJuIG9iajsKICB9KTsKCiAgLy8gTWVtb2l6ZSBhbiBleHBlbnNpdmUgZnVuY3Rpb24gYnkgc3RvcmluZyBpdHMgcmVzdWx0cy4KICBmdW5jdGlvbiBtZW1vaXplKGZ1bmMsIGhhc2hlcikgewogICAgdmFyIG1lbW9pemUgPSBmdW5jdGlvbihrZXkpIHsKICAgICAgdmFyIGNhY2hlID0gbWVtb2l6ZS5jYWNoZTsKICAgICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoZXIgPyBoYXNoZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGtleSk7CiAgICAgIGlmICghaGFzJDEoY2FjaGUsIGFkZHJlc3MpKSBjYWNoZVthZGRyZXNzXSA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgcmV0dXJuIGNhY2hlW2FkZHJlc3NdOwogICAgfTsKICAgIG1lbW9pemUuY2FjaGUgPSB7fTsKICAgIHJldHVybiBtZW1vaXplOwogIH0KCiAgLy8gRGVsYXlzIGEgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCBhbmQgdGhlbiBjYWxscwogIC8vIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBzdXBwbGllZC4KICB2YXIgZGVsYXkgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGFyZ3MpIHsKICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gZnVuYy5hcHBseShudWxsLCBhcmdzKTsKICAgIH0sIHdhaXQpOwogIH0pOwoKICAvLyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXMKICAvLyBjbGVhcmVkLgogIHZhciBkZWZlciA9IHBhcnRpYWwoZGVsYXksIF8kMSwgMSk7CgogIC8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgd2hlbiBpbnZva2VkLCB3aWxsIG9ubHkgYmUgdHJpZ2dlcmVkIGF0IG1vc3Qgb25jZQogIC8vIGR1cmluZyBhIGdpdmVuIHdpbmRvdyBvZiB0aW1lLiBOb3JtYWxseSwgdGhlIHRocm90dGxlZCBmdW5jdGlvbiB3aWxsIHJ1bgogIC8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3aXRob3V0IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBkdXJhdGlvbjsKICAvLyBidXQgaWYgeW91J2QgbGlrZSB0byBkaXNhYmxlIHRoZSBleGVjdXRpb24gb24gdGhlIGxlYWRpbmcgZWRnZSwgcGFzcwogIC8vIGB7bGVhZGluZzogZmFsc2V9YC4gVG8gZGlzYWJsZSBleGVjdXRpb24gb24gdGhlIHRyYWlsaW5nIGVkZ2UsIGRpdHRvLgogIGZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHsKICAgIHZhciB0aW1lb3V0LCBjb250ZXh0LCBhcmdzLCByZXN1bHQ7CiAgICB2YXIgcHJldmlvdXMgPSAwOwogICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307CgogICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7CiAgICAgIHByZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiBub3coKTsKICAgICAgdGltZW91dCA9IG51bGw7CiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7CiAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsOwogICAgfTsKCiAgICB2YXIgdGhyb3R0bGVkID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciBfbm93ID0gbm93KCk7CiAgICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkgcHJldmlvdXMgPSBfbm93OwogICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChfbm93IC0gcHJldmlvdXMpOwogICAgICBjb250ZXh0ID0gdGhpczsKICAgICAgYXJncyA9IGFyZ3VtZW50czsKICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHsKICAgICAgICBpZiAodGltZW91dCkgewogICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpOwogICAgICAgICAgdGltZW91dCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHByZXZpb3VzID0gX25vdzsKICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpOwogICAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsOwogICAgICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJhaWxpbmcgIT09IGZhbHNlKSB7CiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07CgogICAgdGhyb3R0bGVkLmNhbmNlbCA9IGZ1bmN0aW9uKCkgewogICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7CiAgICAgIHByZXZpb3VzID0gMDsKICAgICAgdGltZW91dCA9IGNvbnRleHQgPSBhcmdzID0gbnVsbDsKICAgIH07CgogICAgcmV0dXJuIHRocm90dGxlZDsKICB9CgogIC8vIFdoZW4gYSBzZXF1ZW5jZSBvZiBjYWxscyBvZiB0aGUgcmV0dXJuZWQgZnVuY3Rpb24gZW5kcywgdGhlIGFyZ3VtZW50CiAgLy8gZnVuY3Rpb24gaXMgdHJpZ2dlcmVkLiBUaGUgZW5kIG9mIGEgc2VxdWVuY2UgaXMgZGVmaW5lZCBieSB0aGUgYHdhaXRgCiAgLy8gcGFyYW1ldGVyLiBJZiBgaW1tZWRpYXRlYCBpcyBwYXNzZWQsIHRoZSBhcmd1bWVudCBmdW5jdGlvbiB3aWxsIGJlCiAgLy8gdHJpZ2dlcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlcXVlbmNlIGluc3RlYWQgb2YgYXQgdGhlIGVuZC4KICBmdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHsKICAgIHZhciB0aW1lb3V0LCBwcmV2aW91cywgYXJncywgcmVzdWx0LCBjb250ZXh0OwoKICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgcGFzc2VkID0gbm93KCkgLSBwcmV2aW91czsKICAgICAgaWYgKHdhaXQgPiBwYXNzZWQpIHsKICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCAtIHBhc3NlZCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGltZW91dCA9IG51bGw7CiAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7CiAgICAgICAgLy8gVGhpcyBjaGVjayBpcyBuZWVkZWQgYmVjYXVzZSBgZnVuY2AgY2FuIHJlY3Vyc2l2ZWx5IGludm9rZSBgZGVib3VuY2VkYC4KICAgICAgICBpZiAoIXRpbWVvdXQpIGFyZ3MgPSBjb250ZXh0ID0gbnVsbDsKICAgICAgfQogICAgfTsKCiAgICB2YXIgZGVib3VuY2VkID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihfYXJncykgewogICAgICBjb250ZXh0ID0gdGhpczsKICAgICAgYXJncyA9IF9hcmdzOwogICAgICBwcmV2aW91cyA9IG5vdygpOwogICAgICBpZiAoIXRpbWVvdXQpIHsKICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7CiAgICAgICAgaWYgKGltbWVkaWF0ZSkgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSk7CgogICAgZGVib3VuY2VkLmNhbmNlbCA9IGZ1bmN0aW9uKCkgewogICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7CiAgICAgIHRpbWVvdXQgPSBhcmdzID0gY29udGV4dCA9IG51bGw7CiAgICB9OwoKICAgIHJldHVybiBkZWJvdW5jZWQ7CiAgfQoKICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBmdW5jdGlvbiBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIHNlY29uZCwKICAvLyBhbGxvd2luZyB5b3UgdG8gYWRqdXN0IGFyZ3VtZW50cywgcnVuIGNvZGUgYmVmb3JlIGFuZCBhZnRlciwgYW5kCiAgLy8gY29uZGl0aW9uYWxseSBleGVjdXRlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi4KICBmdW5jdGlvbiB3cmFwKGZ1bmMsIHdyYXBwZXIpIHsKICAgIHJldHVybiBwYXJ0aWFsKHdyYXBwZXIsIGZ1bmMpOwogIH0KCiAgLy8gUmV0dXJucyBhIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUgcGFzc2VkLWluIHByZWRpY2F0ZS4KICBmdW5jdGlvbiBuZWdhdGUocHJlZGljYXRlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICB9OwogIH0KCiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIGEgbGlzdCBvZiBmdW5jdGlvbnMsIGVhY2gKICAvLyBjb25zdW1pbmcgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gdGhhdCBmb2xsb3dzLgogIGZ1bmN0aW9uIGNvbXBvc2UoKSB7CiAgICB2YXIgYXJncyA9IGFyZ3VtZW50czsKICAgIHZhciBzdGFydCA9IGFyZ3MubGVuZ3RoIC0gMTsKICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgdmFyIGkgPSBzdGFydDsKICAgICAgdmFyIHJlc3VsdCA9IGFyZ3Nbc3RhcnRdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIHdoaWxlIChpLS0pIHJlc3VsdCA9IGFyZ3NbaV0uY2FsbCh0aGlzLCByZXN1bHQpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICB9CgogIC8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBiZSBleGVjdXRlZCBvbiBhbmQgYWZ0ZXIgdGhlIE50aCBjYWxsLgogIGZ1bmN0aW9uIGFmdGVyKHRpbWVzLCBmdW5jKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIGlmICgtLXRpbWVzIDwgMSkgewogICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIH0KICAgIH07CiAgfQoKICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgdXAgdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSB0aGUKICAvLyBOdGggY2FsbC4KICBmdW5jdGlvbiBiZWZvcmUodGltZXMsIGZ1bmMpIHsKICAgIHZhciBtZW1vOwogICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICBpZiAoLS10aW1lcyA+IDApIHsKICAgICAgICBtZW1vID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICB9CiAgICAgIGlmICh0aW1lcyA8PSAxKSBmdW5jID0gbnVsbDsKICAgICAgcmV0dXJuIG1lbW87CiAgICB9OwogIH0KCiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhdCBtb3N0IG9uZSB0aW1lLCBubyBtYXR0ZXIgaG93CiAgLy8gb2Z0ZW4geW91IGNhbGwgaXQuIFVzZWZ1bCBmb3IgbGF6eSBpbml0aWFsaXphdGlvbi4KICB2YXIgb25jZSA9IHBhcnRpYWwoYmVmb3JlLCAyKTsKCiAgLy8gUmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0aGF0IHBhc3NlcyBhIHRydXRoIHRlc3QuCiAgZnVuY3Rpb24gZmluZEtleShvYmosIHByZWRpY2F0ZSwgY29udGV4dCkgewogICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTsKICAgIHZhciBfa2V5cyA9IGtleXMob2JqKSwga2V5OwogICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGtleSA9IF9rZXlzW2ldOwogICAgICBpZiAocHJlZGljYXRlKG9ialtrZXldLCBrZXksIG9iaikpIHJldHVybiBrZXk7CiAgICB9CiAgfQoKICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBgXy5maW5kSW5kZXhgIGFuZCBgXy5maW5kTGFzdEluZGV4YC4KICBmdW5jdGlvbiBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcihkaXIpIHsKICAgIHJldHVybiBmdW5jdGlvbihhcnJheSwgcHJlZGljYXRlLCBjb250ZXh0KSB7CiAgICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7CiAgICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOwogICAgICB2YXIgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7CiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHsKICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgcmV0dXJuIGluZGV4OwogICAgICB9CiAgICAgIHJldHVybiAtMTsKICAgIH07CiAgfQoKICAvLyBSZXR1cm5zIHRoZSBmaXJzdCBpbmRleCBvbiBhbiBhcnJheS1saWtlIHRoYXQgcGFzc2VzIGEgdHJ1dGggdGVzdC4KICB2YXIgZmluZEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoMSk7CgogIC8vIFJldHVybnMgdGhlIGxhc3QgaW5kZXggb24gYW4gYXJyYXktbGlrZSB0aGF0IHBhc3NlcyBhIHRydXRoIHRlc3QuCiAgdmFyIGZpbmRMYXN0SW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigtMSk7CgogIC8vIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCB0aGUgc21hbGxlc3QgaW5kZXggYXQgd2hpY2gKICAvLyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVkIHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guCiAgZnVuY3Rpb24gc29ydGVkSW5kZXgoYXJyYXksIG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHsKICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQsIDEpOwogICAgdmFyIHZhbHVlID0gaXRlcmF0ZWUob2JqKTsKICAgIHZhciBsb3cgPSAwLCBoaWdoID0gZ2V0TGVuZ3RoKGFycmF5KTsKICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7CiAgICAgIHZhciBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpOwogICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbbWlkXSkgPCB2YWx1ZSkgbG93ID0gbWlkICsgMTsgZWxzZSBoaWdoID0gbWlkOwogICAgfQogICAgcmV0dXJuIGxvdzsKICB9CgogIC8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBgXy5pbmRleE9mYCBhbmQgYF8ubGFzdEluZGV4T2ZgIGZ1bmN0aW9ucy4KICBmdW5jdGlvbiBjcmVhdGVJbmRleEZpbmRlcihkaXIsIHByZWRpY2F0ZUZpbmQsIHNvcnRlZEluZGV4KSB7CiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIGl0ZW0sIGlkeCkgewogICAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7CiAgICAgIGlmICh0eXBlb2YgaWR4ID09ICdudW1iZXInKSB7CiAgICAgICAgaWYgKGRpciA+IDApIHsKICAgICAgICAgIGkgPSBpZHggPj0gMCA/IGlkeCA6IE1hdGgubWF4KGlkeCArIGxlbmd0aCwgaSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxlbmd0aCA9IGlkeCA+PSAwID8gTWF0aC5taW4oaWR4ICsgMSwgbGVuZ3RoKSA6IGlkeCArIGxlbmd0aCArIDE7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHNvcnRlZEluZGV4ICYmIGlkeCAmJiBsZW5ndGgpIHsKICAgICAgICBpZHggPSBzb3J0ZWRJbmRleChhcnJheSwgaXRlbSk7CiAgICAgICAgcmV0dXJuIGFycmF5W2lkeF0gPT09IGl0ZW0gPyBpZHggOiAtMTsKICAgICAgfQogICAgICBpZiAoaXRlbSAhPT0gaXRlbSkgewogICAgICAgIGlkeCA9IHByZWRpY2F0ZUZpbmQoc2xpY2UuY2FsbChhcnJheSwgaSwgbGVuZ3RoKSwgaXNOYU4kMSk7CiAgICAgICAgcmV0dXJuIGlkeCA+PSAwID8gaWR4ICsgaSA6IC0xOwogICAgICB9CiAgICAgIGZvciAoaWR4ID0gZGlyID4gMCA/IGkgOiBsZW5ndGggLSAxOyBpZHggPj0gMCAmJiBpZHggPCBsZW5ndGg7IGlkeCArPSBkaXIpIHsKICAgICAgICBpZiAoYXJyYXlbaWR4XSA9PT0gaXRlbSkgcmV0dXJuIGlkeDsKICAgICAgfQogICAgICByZXR1cm4gLTE7CiAgICB9OwogIH0KCiAgLy8gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhbiBpdGVtIGluIGFuIGFycmF5LAogIC8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuCiAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNvcnQgb3JkZXIsIHBhc3MgYHRydWVgCiAgLy8gZm9yICoqaXNTb3J0ZWQqKiB0byB1c2UgYmluYXJ5IHNlYXJjaC4KICB2YXIgaW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKDEsIGZpbmRJbmRleCwgc29ydGVkSW5kZXgpOwoKICAvLyBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSwKICAvLyBvciAtMSBpZiB0aGUgaXRlbSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5LgogIHZhciBsYXN0SW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKC0xLCBmaW5kTGFzdEluZGV4KTsKCiAgLy8gUmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSB3aGljaCBwYXNzZXMgYSB0cnV0aCB0ZXN0LgogIGZ1bmN0aW9uIGZpbmQob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHsKICAgIHZhciBrZXlGaW5kZXIgPSBpc0FycmF5TGlrZShvYmopID8gZmluZEluZGV4IDogZmluZEtleTsKICAgIHZhciBrZXkgPSBrZXlGaW5kZXIob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpOwogICAgaWYgKGtleSAhPT0gdm9pZCAwICYmIGtleSAhPT0gLTEpIHJldHVybiBvYmpba2V5XTsKICB9CgogIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYF8uZmluZGA6IGdldHRpbmcgdGhlIGZpcnN0CiAgLy8gb2JqZWN0IGNvbnRhaW5pbmcgc3BlY2lmaWMgYGtleTp2YWx1ZWAgcGFpcnMuCiAgZnVuY3Rpb24gZmluZFdoZXJlKG9iaiwgYXR0cnMpIHsKICAgIHJldHVybiBmaW5kKG9iaiwgbWF0Y2hlcihhdHRycykpOwogIH0KCiAgLy8gVGhlIGNvcm5lcnN0b25lIGZvciBjb2xsZWN0aW9uIGZ1bmN0aW9ucywgYW4gYGVhY2hgCiAgLy8gaW1wbGVtZW50YXRpb24sIGFrYSBgZm9yRWFjaGAuCiAgLy8gSGFuZGxlcyByYXcgb2JqZWN0cyBpbiBhZGRpdGlvbiB0byBhcnJheS1saWtlcy4gVHJlYXRzIGFsbAogIC8vIHNwYXJzZSBhcnJheS1saWtlcyBhcyBpZiB0aGV5IHdlcmUgZGVuc2UuCiAgZnVuY3Rpb24gZWFjaChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7CiAgICBpdGVyYXRlZSA9IG9wdGltaXplQ2IoaXRlcmF0ZWUsIGNvbnRleHQpOwogICAgdmFyIGksIGxlbmd0aDsKICAgIGlmIChpc0FycmF5TGlrZShvYmopKSB7CiAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGl0ZXJhdGVlKG9ialtpXSwgaSwgb2JqKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdmFyIF9rZXlzID0ga2V5cyhvYmopOwogICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGl0ZXJhdGVlKG9ialtfa2V5c1tpXV0sIF9rZXlzW2ldLCBvYmopOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gb2JqOwogIH0KCiAgLy8gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGFwcGx5aW5nIHRoZSBpdGVyYXRlZSB0byBlYWNoIGVsZW1lbnQuCiAgZnVuY3Rpb24gbWFwKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHsKICAgIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpOwogICAgdmFyIF9rZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYga2V5cyhvYmopLAogICAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aCwKICAgICAgICByZXN1bHRzID0gQXJyYXkobGVuZ3RoKTsKICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKICAgICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5cyA/IF9rZXlzW2luZGV4XSA6IGluZGV4OwogICAgICByZXN1bHRzW2luZGV4XSA9IGl0ZXJhdGVlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KCiAgLy8gSW50ZXJuYWwgaGVscGVyIHRvIGNyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9uLCBpdGVyYXRpbmcgbGVmdCBvciByaWdodC4KICBmdW5jdGlvbiBjcmVhdGVSZWR1Y2UoZGlyKSB7CiAgICAvLyBXcmFwIGNvZGUgdGhhdCByZWFzc2lnbnMgYXJndW1lbnQgdmFyaWFibGVzIGluIGEgc2VwYXJhdGUgZnVuY3Rpb24gdGhhbgogICAgLy8gdGhlIG9uZSB0aGF0IGFjY2Vzc2VzIGBhcmd1bWVudHMubGVuZ3RoYCB0byBhdm9pZCBhIHBlcmYgaGl0LiAoIzE5OTEpCiAgICB2YXIgcmVkdWNlciA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGluaXRpYWwpIHsKICAgICAgdmFyIF9rZXlzID0gIWlzQXJyYXlMaWtlKG9iaikgJiYga2V5cyhvYmopLAogICAgICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoLAogICAgICAgICAgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7CiAgICAgIGlmICghaW5pdGlhbCkgewogICAgICAgIG1lbW8gPSBvYmpbX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleF07CiAgICAgICAgaW5kZXggKz0gZGlyOwogICAgICB9CiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHsKICAgICAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7CiAgICAgICAgbWVtbyA9IGl0ZXJhdGVlKG1lbW8sIG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKTsKICAgICAgfQogICAgICByZXR1cm4gbWVtbzsKICAgIH07CgogICAgcmV0dXJuIGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIG1lbW8sIGNvbnRleHQpIHsKICAgICAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoID49IDM7CiAgICAgIHJldHVybiByZWR1Y2VyKG9iaiwgb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgNCksIG1lbW8sIGluaXRpYWwpOwogICAgfTsKICB9CgogIC8vICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFrYSBgaW5qZWN0YCwKICAvLyBvciBgZm9sZGxgLgogIHZhciByZWR1Y2UgPSBjcmVhdGVSZWR1Y2UoMSk7CgogIC8vIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mIHJlZHVjZSwgYWxzbyBrbm93biBhcyBgZm9sZHJgLgogIHZhciByZWR1Y2VSaWdodCA9IGNyZWF0ZVJlZHVjZSgtMSk7CgogIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuCiAgZnVuY3Rpb24gZmlsdGVyKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgcHJlZGljYXRlID0gY2IocHJlZGljYXRlLCBjb250ZXh0KTsKICAgIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHsKICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGxpc3QpKSByZXN1bHRzLnB1c2godmFsdWUpOwogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0czsKICB9CgogIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuCiAgZnVuY3Rpb24gcmVqZWN0KG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7CiAgICByZXR1cm4gZmlsdGVyKG9iaiwgbmVnYXRlKGNiKHByZWRpY2F0ZSkpLCBjb250ZXh0KTsKICB9CgogIC8vIERldGVybWluZSB3aGV0aGVyIGFsbCBvZiB0aGUgZWxlbWVudHMgcGFzcyBhIHRydXRoIHRlc3QuCiAgZnVuY3Rpb24gZXZlcnkob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHsKICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7CiAgICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksCiAgICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoOwogICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgewogICAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7CiAgICAgIGlmICghcHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVjdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LgogIGZ1bmN0aW9uIHNvbWUob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHsKICAgIHByZWRpY2F0ZSA9IGNiKHByZWRpY2F0ZSwgY29udGV4dCk7CiAgICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksCiAgICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoOwogICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgewogICAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzID8gX2tleXNbaW5kZXhdIDogaW5kZXg7CiAgICAgIGlmIChwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vIERldGVybWluZSBpZiB0aGUgYXJyYXkgb3Igb2JqZWN0IGNvbnRhaW5zIGEgZ2l2ZW4gaXRlbSAodXNpbmcgYD09PWApLgogIGZ1bmN0aW9uIGNvbnRhaW5zKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkgewogICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSB2YWx1ZXMob2JqKTsKICAgIGlmICh0eXBlb2YgZnJvbUluZGV4ICE9ICdudW1iZXInIHx8IGd1YXJkKSBmcm9tSW5kZXggPSAwOwogICAgcmV0dXJuIGluZGV4T2Yob2JqLCBpdGVtLCBmcm9tSW5kZXgpID49IDA7CiAgfQoKICAvLyBJbnZva2UgYSBtZXRob2QgKHdpdGggYXJndW1lbnRzKSBvbiBldmVyeSBpdGVtIGluIGEgY29sbGVjdGlvbi4KICB2YXIgaW52b2tlID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihvYmosIHBhdGgsIGFyZ3MpIHsKICAgIHZhciBjb250ZXh0UGF0aCwgZnVuYzsKICAgIGlmIChpc0Z1bmN0aW9uJDEocGF0aCkpIHsKICAgICAgZnVuYyA9IHBhdGg7CiAgICB9IGVsc2UgewogICAgICBwYXRoID0gdG9QYXRoKHBhdGgpOwogICAgICBjb250ZXh0UGF0aCA9IHBhdGguc2xpY2UoMCwgLTEpOwogICAgICBwYXRoID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdOwogICAgfQogICAgcmV0dXJuIG1hcChvYmosIGZ1bmN0aW9uKGNvbnRleHQpIHsKICAgICAgdmFyIG1ldGhvZCA9IGZ1bmM7CiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgaWYgKGNvbnRleHRQYXRoICYmIGNvbnRleHRQYXRoLmxlbmd0aCkgewogICAgICAgICAgY29udGV4dCA9IGRlZXBHZXQoY29udGV4dCwgY29udGV4dFBhdGgpOwogICAgICAgIH0KICAgICAgICBpZiAoY29udGV4dCA9PSBudWxsKSByZXR1cm4gdm9pZCAwOwogICAgICAgIG1ldGhvZCA9IGNvbnRleHRbcGF0aF07CiAgICAgIH0KICAgICAgcmV0dXJuIG1ldGhvZCA9PSBudWxsID8gbWV0aG9kIDogbWV0aG9kLmFwcGx5KGNvbnRleHQsIGFyZ3MpOwogICAgfSk7CiAgfSk7CgogIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYF8ubWFwYDogZmV0Y2hpbmcgYSBwcm9wZXJ0eS4KICBmdW5jdGlvbiBwbHVjayhvYmosIGtleSkgewogICAgcmV0dXJuIG1hcChvYmosIHByb3BlcnR5KGtleSkpOwogIH0KCiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgXy5maWx0ZXJgOiBzZWxlY3Rpbmcgb25seQogIC8vIG9iamVjdHMgY29udGFpbmluZyBzcGVjaWZpYyBga2V5OnZhbHVlYCBwYWlycy4KICBmdW5jdGlvbiB3aGVyZShvYmosIGF0dHJzKSB7CiAgICByZXR1cm4gZmlsdGVyKG9iaiwgbWF0Y2hlcihhdHRycykpOwogIH0KCiAgLy8gUmV0dXJuIHRoZSBtYXhpbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLgogIGZ1bmN0aW9uIG1heChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7CiAgICB2YXIgcmVzdWx0ID0gLUluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSAtSW5maW5pdHksCiAgICAgICAgdmFsdWUsIGNvbXB1dGVkOwogICAgaWYgKGl0ZXJhdGVlID09IG51bGwgfHwgKHR5cGVvZiBpdGVyYXRlZSA9PSAnbnVtYmVyJyAmJiB0eXBlb2Ygb2JqWzBdICE9ICdvYmplY3QnICYmIG9iaiAhPSBudWxsKSkgewogICAgICBvYmogPSBpc0FycmF5TGlrZShvYmopID8gb2JqIDogdmFsdWVzKG9iaik7CiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICB2YWx1ZSA9IG9ialtpXTsKICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSA+IHJlc3VsdCkgewogICAgICAgICAgcmVzdWx0ID0gdmFsdWU7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTsKICAgICAgZWFjaChvYmosIGZ1bmN0aW9uKHYsIGluZGV4LCBsaXN0KSB7CiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2LCBpbmRleCwgbGlzdCk7CiAgICAgICAgaWYgKGNvbXB1dGVkID4gbGFzdENvbXB1dGVkIHx8IChjb21wdXRlZCA9PT0gLUluZmluaXR5ICYmIHJlc3VsdCA9PT0gLUluZmluaXR5KSkgewogICAgICAgICAgcmVzdWx0ID0gdjsKICAgICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gUmV0dXJuIHRoZSBtaW5pbXVtIGVsZW1lbnQgKG9yIGVsZW1lbnQtYmFzZWQgY29tcHV0YXRpb24pLgogIGZ1bmN0aW9uIG1pbihvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7CiAgICB2YXIgcmVzdWx0ID0gSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IEluZmluaXR5LAogICAgICAgIHZhbHVlLCBjb21wdXRlZDsKICAgIGlmIChpdGVyYXRlZSA9PSBudWxsIHx8ICh0eXBlb2YgaXRlcmF0ZWUgPT0gJ251bWJlcicgJiYgdHlwZW9mIG9ialswXSAhPSAnb2JqZWN0JyAmJiBvYmogIT0gbnVsbCkpIHsKICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IHZhbHVlcyhvYmopOwogICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFsdWUgPSBvYmpbaV07CiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPCByZXN1bHQpIHsKICAgICAgICAgIHJlc3VsdCA9IHZhbHVlOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7CiAgICAgIGVhY2gob2JqLCBmdW5jdGlvbih2LCBpbmRleCwgbGlzdCkgewogICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUodiwgaW5kZXgsIGxpc3QpOwogICAgICAgIGlmIChjb21wdXRlZCA8IGxhc3RDb21wdXRlZCB8fCAoY29tcHV0ZWQgPT09IEluZmluaXR5ICYmIHJlc3VsdCA9PT0gSW5maW5pdHkpKSB7CiAgICAgICAgICByZXN1bHQgPSB2OwogICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBTYWZlbHkgY3JlYXRlIGEgcmVhbCwgbGl2ZSBhcnJheSBmcm9tIGFueXRoaW5nIGl0ZXJhYmxlLgogIHZhciByZVN0clN5bWJvbCA9IC9bXlx1ZDgwMC1cdWRmZmZdfFtcdWQ4MDAtXHVkYmZmXVtcdWRjMDAtXHVkZmZmXXxbXHVkODAwLVx1ZGZmZl0vZzsKICBmdW5jdGlvbiB0b0FycmF5KG9iaikgewogICAgaWYgKCFvYmopIHJldHVybiBbXTsKICAgIGlmIChpc0FycmF5KG9iaikpIHJldHVybiBzbGljZS5jYWxsKG9iaik7CiAgICBpZiAoaXNTdHJpbmcob2JqKSkgewogICAgICAvLyBLZWVwIHN1cnJvZ2F0ZSBwYWlyIGNoYXJhY3RlcnMgdG9nZXRoZXIuCiAgICAgIHJldHVybiBvYmoubWF0Y2gocmVTdHJTeW1ib2wpOwogICAgfQogICAgaWYgKGlzQXJyYXlMaWtlKG9iaikpIHJldHVybiBtYXAob2JqLCBpZGVudGl0eSk7CiAgICByZXR1cm4gdmFsdWVzKG9iaik7CiAgfQoKICAvLyBTYW1wbGUgKipuKiogcmFuZG9tIHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbiB1c2luZyB0aGUgbW9kZXJuIHZlcnNpb24gb2YgdGhlCiAgLy8gW0Zpc2hlci1ZYXRlcyBzaHVmZmxlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXLigJNZYXRlc19zaHVmZmxlKS4KICAvLyBJZiAqKm4qKiBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIGEgc2luZ2xlIHJhbmRvbSBlbGVtZW50LgogIC8vIFRoZSBpbnRlcm5hbCBgZ3VhcmRgIGFyZ3VtZW50IGFsbG93cyBpdCB0byB3b3JrIHdpdGggYF8ubWFwYC4KICBmdW5jdGlvbiBzYW1wbGUob2JqLCBuLCBndWFyZCkgewogICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgewogICAgICBpZiAoIWlzQXJyYXlMaWtlKG9iaikpIG9iaiA9IHZhbHVlcyhvYmopOwogICAgICByZXR1cm4gb2JqW3JhbmRvbShvYmoubGVuZ3RoIC0gMSldOwogICAgfQogICAgdmFyIHNhbXBsZSA9IHRvQXJyYXkob2JqKTsKICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoc2FtcGxlKTsKICAgIG4gPSBNYXRoLm1heChNYXRoLm1pbihuLCBsZW5ndGgpLCAwKTsKICAgIHZhciBsYXN0ID0gbGVuZ3RoIC0gMTsKICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBuOyBpbmRleCsrKSB7CiAgICAgIHZhciByYW5kID0gcmFuZG9tKGluZGV4LCBsYXN0KTsKICAgICAgdmFyIHRlbXAgPSBzYW1wbGVbaW5kZXhdOwogICAgICBzYW1wbGVbaW5kZXhdID0gc2FtcGxlW3JhbmRdOwogICAgICBzYW1wbGVbcmFuZF0gPSB0ZW1wOwogICAgfQogICAgcmV0dXJuIHNhbXBsZS5zbGljZSgwLCBuKTsKICB9CgogIC8vIFNodWZmbGUgYSBjb2xsZWN0aW9uLgogIGZ1bmN0aW9uIHNodWZmbGUob2JqKSB7CiAgICByZXR1cm4gc2FtcGxlKG9iaiwgSW5maW5pdHkpOwogIH0KCiAgLy8gU29ydCB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uIHByb2R1Y2VkIGJ5IGFuIGl0ZXJhdGVlLgogIGZ1bmN0aW9uIHNvcnRCeShvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7CiAgICB2YXIgaW5kZXggPSAwOwogICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7CiAgICByZXR1cm4gcGx1Y2sobWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtleSwgbGlzdCkgewogICAgICByZXR1cm4gewogICAgICAgIHZhbHVlOiB2YWx1ZSwKICAgICAgICBpbmRleDogaW5kZXgrKywKICAgICAgICBjcml0ZXJpYTogaXRlcmF0ZWUodmFsdWUsIGtleSwgbGlzdCkKICAgICAgfTsKICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHsKICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhOwogICAgICB2YXIgYiA9IHJpZ2h0LmNyaXRlcmlhOwogICAgICBpZiAoYSAhPT0gYikgewogICAgICAgIGlmIChhID4gYiB8fCBhID09PSB2b2lkIDApIHJldHVybiAxOwogICAgICAgIGlmIChhIDwgYiB8fCBiID09PSB2b2lkIDApIHJldHVybiAtMTsKICAgICAgfQogICAgICByZXR1cm4gbGVmdC5pbmRleCAtIHJpZ2h0LmluZGV4OwogICAgfSksICd2YWx1ZScpOwogIH0KCiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdXNlZCBmb3IgYWdncmVnYXRlICJncm91cCBieSIgb3BlcmF0aW9ucy4KICBmdW5jdGlvbiBncm91cChiZWhhdmlvciwgcGFydGl0aW9uKSB7CiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkgewogICAgICB2YXIgcmVzdWx0ID0gcGFydGl0aW9uID8gW1tdLCBbXV0gOiB7fTsKICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7CiAgICAgIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKICAgICAgICB2YXIga2V5ID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBvYmopOwogICAgICAgIGJlaGF2aW9yKHJlc3VsdCwgdmFsdWUsIGtleSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICB9CgogIC8vIEdyb3VwcyB0aGUgb2JqZWN0J3MgdmFsdWVzIGJ5IGEgY3JpdGVyaW9uLiBQYXNzIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUKICAvLyB0byBncm91cCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNyaXRlcmlvbi4KICB2YXIgZ3JvdXBCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkgewogICAgaWYgKGhhcyQxKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0ucHVzaCh2YWx1ZSk7IGVsc2UgcmVzdWx0W2tleV0gPSBbdmFsdWVdOwogIH0pOwoKICAvLyBJbmRleGVzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24sIHNpbWlsYXIgdG8gYF8uZ3JvdXBCeWAsIGJ1dCBmb3IKICAvLyB3aGVuIHlvdSBrbm93IHRoYXQgeW91ciBpbmRleCB2YWx1ZXMgd2lsbCBiZSB1bmlxdWUuCiAgdmFyIGluZGV4QnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHsKICAgIHJlc3VsdFtrZXldID0gdmFsdWU7CiAgfSk7CgogIC8vIENvdW50cyBpbnN0YW5jZXMgb2YgYW4gb2JqZWN0IHRoYXQgZ3JvdXAgYnkgYSBjZXJ0YWluIGNyaXRlcmlvbi4gUGFzcwogIC8vIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUgdG8gY291bnQgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZQogIC8vIGNyaXRlcmlvbi4KICB2YXIgY291bnRCeSA9IGdyb3VwKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkgewogICAgaWYgKGhhcyQxKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0rKzsgZWxzZSByZXN1bHRba2V5XSA9IDE7CiAgfSk7CgogIC8vIFNwbGl0IGEgY29sbGVjdGlvbiBpbnRvIHR3byBhcnJheXM6IG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgcGFzcyB0aGUgZ2l2ZW4KICAvLyB0cnV0aCB0ZXN0LCBhbmQgb25lIHdob3NlIGVsZW1lbnRzIGFsbCBkbyBub3QgcGFzcyB0aGUgdHJ1dGggdGVzdC4KICB2YXIgcGFydGl0aW9uID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwgcGFzcykgewogICAgcmVzdWx0W3Bhc3MgPyAwIDogMV0ucHVzaCh2YWx1ZSk7CiAgfSwgdHJ1ZSk7CgogIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgY29sbGVjdGlvbi4KICBmdW5jdGlvbiBzaXplKG9iaikgewogICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gMDsKICAgIHJldHVybiBpc0FycmF5TGlrZShvYmopID8gb2JqLmxlbmd0aCA6IGtleXMob2JqKS5sZW5ndGg7CiAgfQoKICAvLyBJbnRlcm5hbCBgXy5waWNrYCBoZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYGtleWAgaXMgYW4gZW51bWVyYWJsZQogIC8vIHByb3BlcnR5IG5hbWUgb2YgYG9iamAuCiAgZnVuY3Rpb24ga2V5SW5PYmoodmFsdWUsIGtleSwgb2JqKSB7CiAgICByZXR1cm4ga2V5IGluIG9iajsKICB9CgogIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCBvbmx5IGNvbnRhaW5pbmcgdGhlIGFsbG93ZWQgcHJvcGVydGllcy4KICB2YXIgcGljayA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBrZXlzKSB7CiAgICB2YXIgcmVzdWx0ID0ge30sIGl0ZXJhdGVlID0ga2V5c1swXTsKICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKICAgIGlmIChpc0Z1bmN0aW9uJDEoaXRlcmF0ZWUpKSB7CiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwga2V5c1sxXSk7CiAgICAgIGtleXMgPSBhbGxLZXlzKG9iaik7CiAgICB9IGVsc2UgewogICAgICBpdGVyYXRlZSA9IGtleUluT2JqOwogICAgICBrZXlzID0gZmxhdHRlbiQxKGtleXMsIGZhbHNlLCBmYWxzZSk7CiAgICAgIG9iaiA9IE9iamVjdChvYmopOwogICAgfQogICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGtleSA9IGtleXNbaV07CiAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldOwogICAgICBpZiAoaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqKSkgcmVzdWx0W2tleV0gPSB2YWx1ZTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfSk7CgogIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRob3V0IHRoZSBkaXNhbGxvd2VkIHByb3BlcnRpZXMuCiAgdmFyIG9taXQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykgewogICAgdmFyIGl0ZXJhdGVlID0ga2V5c1swXSwgY29udGV4dDsKICAgIGlmIChpc0Z1bmN0aW9uJDEoaXRlcmF0ZWUpKSB7CiAgICAgIGl0ZXJhdGVlID0gbmVnYXRlKGl0ZXJhdGVlKTsKICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgY29udGV4dCA9IGtleXNbMV07CiAgICB9IGVsc2UgewogICAgICBrZXlzID0gbWFwKGZsYXR0ZW4kMShrZXlzLCBmYWxzZSwgZmFsc2UpLCBTdHJpbmcpOwogICAgICBpdGVyYXRlZSA9IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsKICAgICAgICByZXR1cm4gIWNvbnRhaW5zKGtleXMsIGtleSk7CiAgICAgIH07CiAgICB9CiAgICByZXR1cm4gcGljayhvYmosIGl0ZXJhdGVlLCBjb250ZXh0KTsKICB9KTsKCiAgLy8gUmV0dXJucyBldmVyeXRoaW5nIGJ1dCB0aGUgbGFzdCBlbnRyeSBvZiB0aGUgYXJyYXkuIEVzcGVjaWFsbHkgdXNlZnVsIG9uCiAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW4KICAvLyB0aGUgYXJyYXksIGV4Y2x1ZGluZyB0aGUgbGFzdCBOLgogIGZ1bmN0aW9uIGluaXRpYWwoYXJyYXksIG4sIGd1YXJkKSB7CiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgMCwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gKG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKSkpOwogIH0KCiAgLy8gR2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOCiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS4gVGhlICoqZ3VhcmQqKiBjaGVjayBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuCiAgZnVuY3Rpb24gZmlyc3QoYXJyYXksIG4sIGd1YXJkKSB7CiAgICBpZiAoYXJyYXkgPT0gbnVsbCB8fCBhcnJheS5sZW5ndGggPCAxKSByZXR1cm4gbiA9PSBudWxsIHx8IGd1YXJkID8gdm9pZCAwIDogW107CiAgICBpZiAobiA9PSBudWxsIHx8IGd1YXJkKSByZXR1cm4gYXJyYXlbMF07CiAgICByZXR1cm4gaW5pdGlhbChhcnJheSwgYXJyYXkubGVuZ3RoIC0gbik7CiAgfQoKICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBmaXJzdCBlbnRyeSBvZiB0aGUgYGFycmF5YC4gRXNwZWNpYWxseSB1c2VmdWwgb24KICAvLyB0aGUgYGFyZ3VtZW50c2Agb2JqZWN0LiBQYXNzaW5nIGFuICoqbioqIHdpbGwgcmV0dXJuIHRoZSByZXN0IE4gdmFsdWVzIGluIHRoZQogIC8vIGBhcnJheWAuCiAgZnVuY3Rpb24gcmVzdChhcnJheSwgbiwgZ3VhcmQpIHsKICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCBuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbik7CiAgfQoKICAvLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOCiAgLy8gdmFsdWVzIGluIHRoZSBhcnJheS4KICBmdW5jdGlvbiBsYXN0KGFycmF5LCBuLCBndWFyZCkgewogICAgaWYgKGFycmF5ID09IG51bGwgfHwgYXJyYXkubGVuZ3RoIDwgMSkgcmV0dXJuIG4gPT0gbnVsbCB8fCBndWFyZCA/IHZvaWQgMCA6IFtdOwogICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdOwogICAgcmV0dXJuIHJlc3QoYXJyYXksIE1hdGgubWF4KDAsIGFycmF5Lmxlbmd0aCAtIG4pKTsKICB9CgogIC8vIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS4KICBmdW5jdGlvbiBjb21wYWN0KGFycmF5KSB7CiAgICByZXR1cm4gZmlsdGVyKGFycmF5LCBCb29sZWFuKTsKICB9CgogIC8vIEZsYXR0ZW4gb3V0IGFuIGFycmF5LCBlaXRoZXIgcmVjdXJzaXZlbHkgKGJ5IGRlZmF1bHQpLCBvciB1cCB0byBgZGVwdGhgLgogIC8vIFBhc3NpbmcgYHRydWVgIG9yIGBmYWxzZWAgYXMgYGRlcHRoYCBtZWFucyBgMWAgb3IgYEluZmluaXR5YCwgcmVzcGVjdGl2ZWx5LgogIGZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXksIGRlcHRoKSB7CiAgICByZXR1cm4gZmxhdHRlbiQxKGFycmF5LCBkZXB0aCwgZmFsc2UpOwogIH0KCiAgLy8gVGFrZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9uZSBhcnJheSBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgYXJyYXlzLgogIC8vIE9ubHkgdGhlIGVsZW1lbnRzIHByZXNlbnQgaW4ganVzdCB0aGUgZmlyc3QgYXJyYXkgd2lsbCByZW1haW4uCiAgdmFyIGRpZmZlcmVuY2UgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5LCByZXN0KSB7CiAgICByZXN0ID0gZmxhdHRlbiQxKHJlc3QsIHRydWUsIHRydWUpOwogICAgcmV0dXJuIGZpbHRlcihhcnJheSwgZnVuY3Rpb24odmFsdWUpewogICAgICByZXR1cm4gIWNvbnRhaW5zKHJlc3QsIHZhbHVlKTsKICAgIH0pOwogIH0pOwoKICAvLyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS4KICB2YXIgd2l0aG91dCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24oYXJyYXksIG90aGVyQXJyYXlzKSB7CiAgICByZXR1cm4gZGlmZmVyZW5jZShhcnJheSwgb3RoZXJBcnJheXMpOwogIH0pOwoKICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeQogIC8vIGJlZW4gc29ydGVkLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIHVzaW5nIGEgZmFzdGVyIGFsZ29yaXRobS4KICAvLyBUaGUgZmFzdGVyIGFsZ29yaXRobSB3aWxsIG5vdCB3b3JrIHdpdGggYW4gaXRlcmF0ZWUgaWYgdGhlIGl0ZXJhdGVlCiAgLy8gaXMgbm90IGEgb25lLXRvLW9uZSBmdW5jdGlvbiwgc28gcHJvdmlkaW5nIGFuIGl0ZXJhdGVlIHdpbGwgZGlzYWJsZQogIC8vIHRoZSBmYXN0ZXIgYWxnb3JpdGhtLgogIGZ1bmN0aW9uIHVuaXEoYXJyYXksIGlzU29ydGVkLCBpdGVyYXRlZSwgY29udGV4dCkgewogICAgaWYgKCFpc0Jvb2xlYW4oaXNTb3J0ZWQpKSB7CiAgICAgIGNvbnRleHQgPSBpdGVyYXRlZTsKICAgICAgaXRlcmF0ZWUgPSBpc1NvcnRlZDsKICAgICAgaXNTb3J0ZWQgPSBmYWxzZTsKICAgIH0KICAgIGlmIChpdGVyYXRlZSAhPSBudWxsKSBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTsKICAgIHZhciByZXN1bHQgPSBbXTsKICAgIHZhciBzZWVuID0gW107CiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldLAogICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBpLCBhcnJheSkgOiB2YWx1ZTsKICAgICAgaWYgKGlzU29ydGVkICYmICFpdGVyYXRlZSkgewogICAgICAgIGlmICghaSB8fCBzZWVuICE9PSBjb21wdXRlZCkgcmVzdWx0LnB1c2godmFsdWUpOwogICAgICAgIHNlZW4gPSBjb21wdXRlZDsKICAgICAgfSBlbHNlIGlmIChpdGVyYXRlZSkgewogICAgICAgIGlmICghY29udGFpbnMoc2VlbiwgY29tcHV0ZWQpKSB7CiAgICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpOwogICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICghY29udGFpbnMocmVzdWx0LCB2YWx1ZSkpIHsKICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIHVuaW9uOiBlYWNoIGRpc3RpbmN0IGVsZW1lbnQgZnJvbSBhbGwgb2YKICAvLyB0aGUgcGFzc2VkLWluIGFycmF5cy4KICB2YXIgdW5pb24gPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5cykgewogICAgcmV0dXJuIHVuaXEoZmxhdHRlbiQxKGFycmF5cywgdHJ1ZSwgdHJ1ZSkpOwogIH0pOwoKICAvLyBQcm9kdWNlIGFuIGFycmF5IHRoYXQgY29udGFpbnMgZXZlcnkgaXRlbSBzaGFyZWQgYmV0d2VlbiBhbGwgdGhlCiAgLy8gcGFzc2VkLWluIGFycmF5cy4KICBmdW5jdGlvbiBpbnRlcnNlY3Rpb24oYXJyYXkpIHsKICAgIHZhciByZXN1bHQgPSBbXTsKICAgIHZhciBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGl0ZW0gPSBhcnJheVtpXTsKICAgICAgaWYgKGNvbnRhaW5zKHJlc3VsdCwgaXRlbSkpIGNvbnRpbnVlOwogICAgICB2YXIgajsKICAgICAgZm9yIChqID0gMTsgaiA8IGFyZ3NMZW5ndGg7IGorKykgewogICAgICAgIGlmICghY29udGFpbnMoYXJndW1lbnRzW2pdLCBpdGVtKSkgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKGogPT09IGFyZ3NMZW5ndGgpIHJlc3VsdC5wdXNoKGl0ZW0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIENvbXBsZW1lbnQgb2YgemlwLiBVbnppcCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyBhbmQgZ3JvdXBzCiAgLy8gZWFjaCBhcnJheSdzIGVsZW1lbnRzIG9uIHNoYXJlZCBpbmRpY2VzLgogIGZ1bmN0aW9uIHVuemlwKGFycmF5KSB7CiAgICB2YXIgbGVuZ3RoID0gKGFycmF5ICYmIG1heChhcnJheSwgZ2V0TGVuZ3RoKS5sZW5ndGgpIHx8IDA7CiAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTsKCiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgIHJlc3VsdFtpbmRleF0gPSBwbHVjayhhcnJheSwgaW5kZXgpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIFppcCB0b2dldGhlciBtdWx0aXBsZSBsaXN0cyBpbnRvIGEgc2luZ2xlIGFycmF5IC0tIGVsZW1lbnRzIHRoYXQgc2hhcmUKICAvLyBhbiBpbmRleCBnbyB0b2dldGhlci4KICB2YXIgemlwID0gcmVzdEFyZ3VtZW50cyh1bnppcCk7CgogIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWAKICAvLyBwYWlycywgb3IgdHdvIHBhcmFsbGVsIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGggLS0gb25lIG9mIGtleXMsIGFuZCBvbmUgb2YKICAvLyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuIFBhc3NpbmcgYnkgcGFpcnMgaXMgdGhlIHJldmVyc2Ugb2YgYF8ucGFpcnNgLgogIGZ1bmN0aW9uIG9iamVjdChsaXN0LCB2YWx1ZXMpIHsKICAgIHZhciByZXN1bHQgPSB7fTsKICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgobGlzdCk7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBpZiAodmFsdWVzKSB7CiAgICAgICAgcmVzdWx0W2xpc3RbaV1dID0gdmFsdWVzW2ldOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdFtsaXN0W2ldWzBdXSA9IGxpc3RbaV1bMV07CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBHZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJpdGhtZXRpYyBwcm9ncmVzc2lvbi4gQSBwb3J0IG9mCiAgLy8gdGhlIG5hdGl2ZSBQeXRob24gYHJhbmdlKClgIGZ1bmN0aW9uLiBTZWUKICAvLyBbdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uXShodHRwczovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L2Z1bmN0aW9ucy5odG1sI3JhbmdlKS4KICBmdW5jdGlvbiByYW5nZShzdGFydCwgc3RvcCwgc3RlcCkgewogICAgaWYgKHN0b3AgPT0gbnVsbCkgewogICAgICBzdG9wID0gc3RhcnQgfHwgMDsKICAgICAgc3RhcnQgPSAwOwogICAgfQogICAgaWYgKCFzdGVwKSB7CiAgICAgIHN0ZXAgPSBzdG9wIDwgc3RhcnQgPyAtMSA6IDE7CiAgICB9CgogICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApLCAwKTsKICAgIHZhciByYW5nZSA9IEFycmF5KGxlbmd0aCk7CgogICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbGVuZ3RoOyBpZHgrKywgc3RhcnQgKz0gc3RlcCkgewogICAgICByYW5nZVtpZHhdID0gc3RhcnQ7CiAgICB9CgogICAgcmV0dXJuIHJhbmdlOwogIH0KCiAgLy8gQ2h1bmsgYSBzaW5nbGUgYXJyYXkgaW50byBtdWx0aXBsZSBhcnJheXMsIGVhY2ggY29udGFpbmluZyBgY291bnRgIG9yIGZld2VyCiAgLy8gaXRlbXMuCiAgZnVuY3Rpb24gY2h1bmsoYXJyYXksIGNvdW50KSB7CiAgICBpZiAoY291bnQgPT0gbnVsbCB8fCBjb3VudCA8IDEpIHJldHVybiBbXTsKICAgIHZhciByZXN1bHQgPSBbXTsKICAgIHZhciBpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOwogICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKICAgICAgcmVzdWx0LnB1c2goc2xpY2UuY2FsbChhcnJheSwgaSwgaSArPSBjb3VudCkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjb250aW51ZSBjaGFpbmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy4KICBmdW5jdGlvbiBjaGFpblJlc3VsdChpbnN0YW5jZSwgb2JqKSB7CiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWluID8gXyQxKG9iaikuY2hhaW4oKSA6IG9iajsKICB9CgogIC8vIEFkZCB5b3VyIG93biBjdXN0b20gZnVuY3Rpb25zIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC4KICBmdW5jdGlvbiBtaXhpbihvYmopIHsKICAgIGVhY2goZnVuY3Rpb25zKG9iaiksIGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgdmFyIGZ1bmMgPSBfJDFbbmFtZV0gPSBvYmpbbmFtZV07CiAgICAgIF8kMS5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYXJncyA9IFt0aGlzLl93cmFwcGVkXTsKICAgICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7CiAgICAgICAgcmV0dXJuIGNoYWluUmVzdWx0KHRoaXMsIGZ1bmMuYXBwbHkoXyQxLCBhcmdzKSk7CiAgICAgIH07CiAgICB9KTsKICAgIHJldHVybiBfJDE7CiAgfQoKICAvLyBBZGQgYWxsIG11dGF0b3IgYEFycmF5YCBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuCiAgZWFjaChbJ3BvcCcsICdwdXNoJywgJ3JldmVyc2UnLCAnc2hpZnQnLCAnc29ydCcsICdzcGxpY2UnLCAndW5zaGlmdCddLCBmdW5jdGlvbihuYW1lKSB7CiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTsKICAgIF8kMS5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHsKICAgICAgdmFyIG9iaiA9IHRoaXMuX3dyYXBwZWQ7CiAgICAgIGlmIChvYmogIT0gbnVsbCkgewogICAgICAgIG1ldGhvZC5hcHBseShvYmosIGFyZ3VtZW50cyk7CiAgICAgICAgaWYgKChuYW1lID09PSAnc2hpZnQnIHx8IG5hbWUgPT09ICdzcGxpY2UnKSAmJiBvYmoubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICBkZWxldGUgb2JqWzBdOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgb2JqKTsKICAgIH07CiAgfSk7CgogIC8vIEFkZCBhbGwgYWNjZXNzb3IgYEFycmF5YCBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIuCiAgZWFjaChbJ2NvbmNhdCcsICdqb2luJywgJ3NsaWNlJ10sIGZ1bmN0aW9uKG5hbWUpIHsKICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdOwogICAgXyQxLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDsKICAgICAgaWYgKG9iaiAhPSBudWxsKSBvYmogPSBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpOwogICAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgb2JqKTsKICAgIH07CiAgfSk7CgogIC8vIE5hbWVkIEV4cG9ydHMKCiAgdmFyIGFsbEV4cG9ydHMgPSB7CiAgICBfX3Byb3RvX186IG51bGwsCiAgICBWRVJTSU9OOiBWRVJTSU9OLAogICAgcmVzdEFyZ3VtZW50czogcmVzdEFyZ3VtZW50cywKICAgIGlzT2JqZWN0OiBpc09iamVjdCwKICAgIGlzTnVsbDogaXNOdWxsLAogICAgaXNVbmRlZmluZWQ6IGlzVW5kZWZpbmVkLAogICAgaXNCb29sZWFuOiBpc0Jvb2xlYW4sCiAgICBpc0VsZW1lbnQ6IGlzRWxlbWVudCwKICAgIGlzU3RyaW5nOiBpc1N0cmluZywKICAgIGlzTnVtYmVyOiBpc051bWJlciwKICAgIGlzRGF0ZTogaXNEYXRlLAogICAgaXNSZWdFeHA6IGlzUmVnRXhwLAogICAgaXNFcnJvcjogaXNFcnJvciwKICAgIGlzU3ltYm9sOiBpc1N5bWJvbCwKICAgIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsCiAgICBpc0RhdGFWaWV3OiBpc0RhdGFWaWV3JDEsCiAgICBpc0FycmF5OiBpc0FycmF5LAogICAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbiQxLAogICAgaXNBcmd1bWVudHM6IGlzQXJndW1lbnRzJDEsCiAgICBpc0Zpbml0ZTogaXNGaW5pdGUkMSwKICAgIGlzTmFOOiBpc05hTiQxLAogICAgaXNUeXBlZEFycmF5OiBpc1R5cGVkQXJyYXkkMSwKICAgIGlzRW1wdHk6IGlzRW1wdHksCiAgICBpc01hdGNoOiBpc01hdGNoLAogICAgaXNFcXVhbDogaXNFcXVhbCwKICAgIGlzTWFwOiBpc01hcCwKICAgIGlzV2Vha01hcDogaXNXZWFrTWFwLAogICAgaXNTZXQ6IGlzU2V0LAogICAgaXNXZWFrU2V0OiBpc1dlYWtTZXQsCiAgICBrZXlzOiBrZXlzLAogICAgYWxsS2V5czogYWxsS2V5cywKICAgIHZhbHVlczogdmFsdWVzLAogICAgcGFpcnM6IHBhaXJzLAogICAgaW52ZXJ0OiBpbnZlcnQsCiAgICBmdW5jdGlvbnM6IGZ1bmN0aW9ucywKICAgIG1ldGhvZHM6IGZ1bmN0aW9ucywKICAgIGV4dGVuZDogZXh0ZW5kLAogICAgZXh0ZW5kT3duOiBleHRlbmRPd24sCiAgICBhc3NpZ246IGV4dGVuZE93biwKICAgIGRlZmF1bHRzOiBkZWZhdWx0cywKICAgIGNyZWF0ZTogY3JlYXRlLAogICAgY2xvbmU6IGNsb25lLAogICAgdGFwOiB0YXAsCiAgICBnZXQ6IGdldCwKICAgIGhhczogaGFzLAogICAgbWFwT2JqZWN0OiBtYXBPYmplY3QsCiAgICBpZGVudGl0eTogaWRlbnRpdHksCiAgICBjb25zdGFudDogY29uc3RhbnQsCiAgICBub29wOiBub29wLAogICAgdG9QYXRoOiB0b1BhdGgkMSwKICAgIHByb3BlcnR5OiBwcm9wZXJ0eSwKICAgIHByb3BlcnR5T2Y6IHByb3BlcnR5T2YsCiAgICBtYXRjaGVyOiBtYXRjaGVyLAogICAgbWF0Y2hlczogbWF0Y2hlciwKICAgIHRpbWVzOiB0aW1lcywKICAgIHJhbmRvbTogcmFuZG9tLAogICAgbm93OiBub3csCiAgICBlc2NhcGU6IF9lc2NhcGUsCiAgICB1bmVzY2FwZTogX3VuZXNjYXBlLAogICAgdGVtcGxhdGVTZXR0aW5nczogdGVtcGxhdGVTZXR0aW5ncywKICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSwKICAgIHJlc3VsdDogcmVzdWx0LAogICAgdW5pcXVlSWQ6IHVuaXF1ZUlkLAogICAgY2hhaW46IGNoYWluLAogICAgaXRlcmF0ZWU6IGl0ZXJhdGVlLAogICAgcGFydGlhbDogcGFydGlhbCwKICAgIGJpbmQ6IGJpbmQsCiAgICBiaW5kQWxsOiBiaW5kQWxsLAogICAgbWVtb2l6ZTogbWVtb2l6ZSwKICAgIGRlbGF5OiBkZWxheSwKICAgIGRlZmVyOiBkZWZlciwKICAgIHRocm90dGxlOiB0aHJvdHRsZSwKICAgIGRlYm91bmNlOiBkZWJvdW5jZSwKICAgIHdyYXA6IHdyYXAsCiAgICBuZWdhdGU6IG5lZ2F0ZSwKICAgIGNvbXBvc2U6IGNvbXBvc2UsCiAgICBhZnRlcjogYWZ0ZXIsCiAgICBiZWZvcmU6IGJlZm9yZSwKICAgIG9uY2U6IG9uY2UsCiAgICBmaW5kS2V5OiBmaW5kS2V5LAogICAgZmluZEluZGV4OiBmaW5kSW5kZXgsCiAgICBmaW5kTGFzdEluZGV4OiBmaW5kTGFzdEluZGV4LAogICAgc29ydGVkSW5kZXg6IHNvcnRlZEluZGV4LAogICAgaW5kZXhPZjogaW5kZXhPZiwKICAgIGxhc3RJbmRleE9mOiBsYXN0SW5kZXhPZiwKICAgIGZpbmQ6IGZpbmQsCiAgICBkZXRlY3Q6IGZpbmQsCiAgICBmaW5kV2hlcmU6IGZpbmRXaGVyZSwKICAgIGVhY2g6IGVhY2gsCiAgICBmb3JFYWNoOiBlYWNoLAogICAgbWFwOiBtYXAsCiAgICBjb2xsZWN0OiBtYXAsCiAgICByZWR1Y2U6IHJlZHVjZSwKICAgIGZvbGRsOiByZWR1Y2UsCiAgICBpbmplY3Q6IHJlZHVjZSwKICAgIHJlZHVjZVJpZ2h0OiByZWR1Y2VSaWdodCwKICAgIGZvbGRyOiByZWR1Y2VSaWdodCwKICAgIGZpbHRlcjogZmlsdGVyLAogICAgc2VsZWN0OiBmaWx0ZXIsCiAgICByZWplY3Q6IHJlamVjdCwKICAgIGV2ZXJ5OiBldmVyeSwKICAgIGFsbDogZXZlcnksCiAgICBzb21lOiBzb21lLAogICAgYW55OiBzb21lLAogICAgY29udGFpbnM6IGNvbnRhaW5zLAogICAgaW5jbHVkZXM6IGNvbnRhaW5zLAogICAgaW5jbHVkZTogY29udGFpbnMsCiAgICBpbnZva2U6IGludm9rZSwKICAgIHBsdWNrOiBwbHVjaywKICAgIHdoZXJlOiB3aGVyZSwKICAgIG1heDogbWF4LAogICAgbWluOiBtaW4sCiAgICBzaHVmZmxlOiBzaHVmZmxlLAogICAgc2FtcGxlOiBzYW1wbGUsCiAgICBzb3J0Qnk6IHNvcnRCeSwKICAgIGdyb3VwQnk6IGdyb3VwQnksCiAgICBpbmRleEJ5OiBpbmRleEJ5LAogICAgY291bnRCeTogY291bnRCeSwKICAgIHBhcnRpdGlvbjogcGFydGl0aW9uLAogICAgdG9BcnJheTogdG9BcnJheSwKICAgIHNpemU6IHNpemUsCiAgICBwaWNrOiBwaWNrLAogICAgb21pdDogb21pdCwKICAgIGZpcnN0OiBmaXJzdCwKICAgIGhlYWQ6IGZpcnN0LAogICAgdGFrZTogZmlyc3QsCiAgICBpbml0aWFsOiBpbml0aWFsLAogICAgbGFzdDogbGFzdCwKICAgIHJlc3Q6IHJlc3QsCiAgICB0YWlsOiByZXN0LAogICAgZHJvcDogcmVzdCwKICAgIGNvbXBhY3Q6IGNvbXBhY3QsCiAgICBmbGF0dGVuOiBmbGF0dGVuLAogICAgd2l0aG91dDogd2l0aG91dCwKICAgIHVuaXE6IHVuaXEsCiAgICB1bmlxdWU6IHVuaXEsCiAgICB1bmlvbjogdW5pb24sCiAgICBpbnRlcnNlY3Rpb246IGludGVyc2VjdGlvbiwKICAgIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2UsCiAgICB1bnppcDogdW56aXAsCiAgICB0cmFuc3Bvc2U6IHVuemlwLAogICAgemlwOiB6aXAsCiAgICBvYmplY3Q6IG9iamVjdCwKICAgIHJhbmdlOiByYW5nZSwKICAgIGNodW5rOiBjaHVuaywKICAgIG1peGluOiBtaXhpbiwKICAgICdkZWZhdWx0JzogXyQxCiAgfTsKCiAgLy8gRGVmYXVsdCBFeHBvcnQKCiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LgogIHZhciBfID0gbWl4aW4oYWxsRXhwb3J0cyk7CiAgLy8gTGVnYWN5IE5vZGUuanMgQVBJLgogIF8uXyA9IF87CgogIHJldHVybiBfOwoKfSkpKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9dW5kZXJzY29yZS11bWQuanMubWFwCg==]]></data>
	</file>
	<file>
	  <filename>/js/external</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/inputs-ext</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/inputs-ext/address</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/inputs-ext/address/address.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmVkaXRhYmxlLWFkZHJlc3MgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7ICAKfQoKLmVkaXRhYmxlLWFkZHJlc3Mgc3BhbiB7CiAgICB3aWR0aDogNzBweDsgIAogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwp9]]></data>
	</file>
	<file>
	  <filename>/js/external/inputs-ext/address/address.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCkFkZHJlc3MgZWRpdGFibGUgaW5wdXQuCkludGVybmFsbHkgdmFsdWUgc3RvcmVkIGFzIHtjaXR5OiAiTW9zY293Iiwgc3RyZWV0OiAiTGVuaW5hIiwgYnVpbGRpbmc6ICIxNSJ9CgpAY2xhc3MgYWRkcmVzcwpAZXh0ZW5kcyBhYnN0cmFjdGlucHV0CkBmaW5hbApAZXhhbXBsZQo8YSBocmVmPSIjIiBpZD0iYWRkcmVzcyIgZGF0YS10eXBlPSJhZGRyZXNzIiBkYXRhLXBrPSIxIj5hd2Vzb21lPC9hPgo8c2NyaXB0PgokKGZ1bmN0aW9uKCl7CiAgICAkKCcjYWRkcmVzcycpLmVkaXRhYmxlKHsKICAgICAgICB1cmw6ICcvcG9zdCcsCiAgICAgICAgdGl0bGU6ICdFbnRlciBjaXR5LCBzdHJlZXQgYW5kIGJ1aWxkaW5nICMnLAogICAgICAgIHZhbHVlOiB7CiAgICAgICAgICAgIGNpdHk6ICJNb3Njb3ciLCAKICAgICAgICAgICAgc3RyZWV0OiAiTGVuaW5hIiwgCiAgICAgICAgICAgIGJ1aWxkaW5nOiAiMTUiCiAgICAgICAgfQogICAgfSk7Cn0pOwo8L3NjcmlwdD4KKiovCihmdW5jdGlvbiAoJCkgewogICAgInVzZSBzdHJpY3QiOwogICAgCiAgICB2YXIgQWRkcmVzcyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICAgICAgdGhpcy5pbml0KCdhZGRyZXNzJywgb3B0aW9ucywgQWRkcmVzcy5kZWZhdWx0cyk7CiAgICB9OwoKICAgIC8vaW5oZXJpdCBmcm9tIEFic3RyYWN0IGlucHV0CiAgICAkLmZuLmVkaXRhYmxldXRpbHMuaW5oZXJpdChBZGRyZXNzLCAkLmZuLmVkaXRhYmxldHlwZXMuYWJzdHJhY3RpbnB1dCk7CgogICAgJC5leHRlbmQoQWRkcmVzcy5wcm90b3R5cGUsIHsKICAgICAgICAvKioKICAgICAgICBSZW5kZXJzIGlucHV0IGZyb20gdHBsCgogICAgICAgIEBtZXRob2QgcmVuZGVyKCkgCiAgICAgICAgKiovICAgICAgICAKICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgIHRoaXMuJGlucHV0ID0gdGhpcy4kdHBsLmZpbmQoJ2lucHV0Jyk7CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICAvKioKICAgICAgICBEZWZhdWx0IG1ldGhvZCB0byBzaG93IHZhbHVlIGluIGVsZW1lbnQuIENhbiBiZSBvdmVyd3JpdHRlbiBieSBkaXNwbGF5IG9wdGlvbi4KICAgICAgICAKICAgICAgICBAbWV0aG9kIHZhbHVlMmh0bWwodmFsdWUsIGVsZW1lbnQpIAogICAgICAgICoqLwogICAgICAgIHZhbHVlMmh0bWw6IGZ1bmN0aW9uKHZhbHVlLCBlbGVtZW50KSB7CiAgICAgICAgICAgIGlmKCF2YWx1ZSkgewogICAgICAgICAgICAgICAgJChlbGVtZW50KS5lbXB0eSgpOwogICAgICAgICAgICAgICAgcmV0dXJuOyAKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgaHRtbCA9ICQoJzxkaXY+JykudGV4dCh2YWx1ZS5jaXR5KS5odG1sKCkgKyAnLCAnICsgJCgnPGRpdj4nKS50ZXh0KHZhbHVlLnN0cmVldCkuaHRtbCgpICsgJyBzdC4sIGJsZC4gJyArICQoJzxkaXY+JykudGV4dCh2YWx1ZS5idWlsZGluZykuaHRtbCgpOwogICAgICAgICAgICAkKGVsZW1lbnQpLmh0bWwoaHRtbCk7IAogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgLyoqCiAgICAgICAgR2V0cyB2YWx1ZSBmcm9tIGVsZW1lbnQncyBodG1sCiAgICAgICAgCiAgICAgICAgQG1ldGhvZCBodG1sMnZhbHVlKGh0bWwpIAogICAgICAgICoqLyAgICAgICAgCiAgICAgICAgaHRtbDJ2YWx1ZTogZnVuY3Rpb24oaHRtbCkgeyAgICAgICAgCiAgICAgICAgICAvKgogICAgICAgICAgICB5b3UgbWF5IHdyaXRlIHBhcnNpbmcgbWV0aG9kIHRvIGdldCB2YWx1ZSBieSBlbGVtZW50J3MgaHRtbAogICAgICAgICAgICBlLmcuICJNb3Njb3csIHN0LiBMZW5pbmEsIGJsZC4gMTUiID0+IHtjaXR5OiAiTW9zY293Iiwgc3RyZWV0OiAiTGVuaW5hIiwgYnVpbGRpbmc6ICIxNSJ9CiAgICAgICAgICAgIGJ1dCBmb3IgY29tcGxleCBzdHJ1Y3R1cmVzIGl0J3Mgbm90IHJlY29tbWVuZGVkLgogICAgICAgICAgICBCZXR0ZXIgc2V0IHZhbHVlIGRpcmVjdGx5IHZpYSBqYXZhc2NyaXB0LCBlLmcuIAogICAgICAgICAgICBlZGl0YWJsZSh7CiAgICAgICAgICAgICAgICB2YWx1ZTogewogICAgICAgICAgICAgICAgICAgIGNpdHk6ICJNb3Njb3ciLCAKICAgICAgICAgICAgICAgICAgICBzdHJlZXQ6ICJMZW5pbmEiLCAKICAgICAgICAgICAgICAgICAgICBidWlsZGluZzogIjE1IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICovIAogICAgICAgICAgcmV0dXJuIG51bGw7ICAKICAgICAgICB9LAogICAgICAKICAgICAgIC8qKgogICAgICAgIENvbnZlcnRzIHZhbHVlIHRvIHN0cmluZy4gCiAgICAgICAgSXQgaXMgdXNlZCBpbiBpbnRlcm5hbCBjb21wYXJpbmcgKG5vdCBmb3Igc2VuZGluZyB0byBzZXJ2ZXIpLgogICAgICAgIAogICAgICAgIEBtZXRob2QgdmFsdWUyc3RyKHZhbHVlKSAgCiAgICAgICAqKi8KICAgICAgIHZhbHVlMnN0cjogZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICB2YXIgc3RyID0gJyc7CiAgICAgICAgICAgaWYodmFsdWUpIHsKICAgICAgICAgICAgICAgZm9yKHZhciBrIGluIHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICBzdHIgPSBzdHIgKyBrICsgJzonICsgdmFsdWVba10gKyAnOyc7ICAKICAgICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgICByZXR1cm4gc3RyOwogICAgICAgfSwgCiAgICAgICAKICAgICAgIC8qCiAgICAgICAgQ29udmVydHMgc3RyaW5nIHRvIHZhbHVlLiBVc2VkIGZvciByZWFkaW5nIHZhbHVlIGZyb20gJ2RhdGEtdmFsdWUnIGF0dHJpYnV0ZS4KICAgICAgICAKICAgICAgICBAbWV0aG9kIHN0cjJ2YWx1ZShzdHIpICAKICAgICAgICovCiAgICAgICBzdHIydmFsdWU6IGZ1bmN0aW9uKHN0cikgewogICAgICAgICAgIC8qCiAgICAgICAgICAgdGhpcyBpcyBtYWlubHkgZm9yIHBhcnNpbmcgdmFsdWUgZGVmaW5lZCBpbiBkYXRhLXZhbHVlIGF0dHJpYnV0ZS4gCiAgICAgICAgICAgSWYgeW91IHdpbGwgYWx3YXlzIHNldCB2YWx1ZSBieSBqYXZhc2NyaXB0LCBubyBuZWVkIHRvIG92ZXJ3cml0ZSBpdAogICAgICAgICAgICovCiAgICAgICAgICAgcmV0dXJuIHN0cjsKICAgICAgIH0sICAgICAgICAgICAgICAgIAogICAgICAgCiAgICAgICAvKioKICAgICAgICBTZXRzIHZhbHVlIG9mIGlucHV0LgogICAgICAgIAogICAgICAgIEBtZXRob2QgdmFsdWUyaW5wdXQodmFsdWUpIAogICAgICAgIEBwYXJhbSB7bWl4ZWR9IHZhbHVlCiAgICAgICAqKi8gICAgICAgICAKICAgICAgIHZhbHVlMmlucHV0OiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgIGlmKCF2YWx1ZSkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgIH0KICAgICAgICAgICB0aGlzLiRpbnB1dC5maWx0ZXIoJ1tuYW1lPSJjaXR5Il0nKS52YWwodmFsdWUuY2l0eSk7CiAgICAgICAgICAgdGhpcy4kaW5wdXQuZmlsdGVyKCdbbmFtZT0ic3RyZWV0Il0nKS52YWwodmFsdWUuc3RyZWV0KTsKICAgICAgICAgICB0aGlzLiRpbnB1dC5maWx0ZXIoJ1tuYW1lPSJidWlsZGluZyJdJykudmFsKHZhbHVlLmJ1aWxkaW5nKTsKICAgICAgIH0sICAgICAgIAogICAgICAgCiAgICAgICAvKioKICAgICAgICBSZXR1cm5zIHZhbHVlIG9mIGlucHV0LgogICAgICAgIAogICAgICAgIEBtZXRob2QgaW5wdXQydmFsdWUoKSAKICAgICAgICoqLyAgICAgICAgICAKICAgICAgIGlucHV0MnZhbHVlOiBmdW5jdGlvbigpIHsgCiAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICBjaXR5OiB0aGlzLiRpbnB1dC5maWx0ZXIoJ1tuYW1lPSJjaXR5Il0nKS52YWwoKSwgCiAgICAgICAgICAgICAgc3RyZWV0OiB0aGlzLiRpbnB1dC5maWx0ZXIoJ1tuYW1lPSJzdHJlZXQiXScpLnZhbCgpLCAKICAgICAgICAgICAgICBidWlsZGluZzogdGhpcy4kaW5wdXQuZmlsdGVyKCdbbmFtZT0iYnVpbGRpbmciXScpLnZhbCgpCiAgICAgICAgICAgfTsKICAgICAgIH0sICAgICAgICAKICAgICAgIAogICAgICAgIC8qKgogICAgICAgIEFjdGl2YXRlcyBpbnB1dDogc2V0cyBmb2N1cyBvbiB0aGUgZmlyc3QgZmllbGQuCiAgICAgICAgCiAgICAgICAgQG1ldGhvZCBhY3RpdmF0ZSgpIAogICAgICAgKiovICAgICAgICAKICAgICAgIGFjdGl2YXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdGhpcy4kaW5wdXQuZmlsdGVyKCdbbmFtZT0iY2l0eSJdJykuZm9jdXMoKTsKICAgICAgIH0sICAKICAgICAgIAogICAgICAgLyoqCiAgICAgICAgQXR0YWNoZXMgaGFuZGxlciB0byBzdWJtaXQgZm9ybSBpbiBjYXNlIG9mICdzaG93YnV0dG9ucz1mYWxzZScgbW9kZQogICAgICAgIAogICAgICAgIEBtZXRob2QgYXV0b3N1Ym1pdCgpIAogICAgICAgKiovICAgICAgIAogICAgICAgYXV0b3N1Ym1pdDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgdGhpcy4kaW5wdXQua2V5ZG93bihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgaWYgKGUud2hpY2ggPT09IDEzKSB7CiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCdmb3JtJykuc3VibWl0KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgfSk7CiAgICAgICB9ICAgICAgIAogICAgfSk7CgogICAgQWRkcmVzcy5kZWZhdWx0cyA9ICQuZXh0ZW5kKHt9LCAkLmZuLmVkaXRhYmxldHlwZXMuYWJzdHJhY3RpbnB1dC5kZWZhdWx0cywgewogICAgICAgIHRwbDogJzxkaXYgY2xhc3M9ImVkaXRhYmxlLWFkZHJlc3MiPjxsYWJlbD48c3Bhbj5DaXR5OiA8L3NwYW4+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNpdHkiIGNsYXNzPSJpbnB1dC1zbWFsbCI+PC9sYWJlbD48L2Rpdj4nKwogICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImVkaXRhYmxlLWFkZHJlc3MiPjxsYWJlbD48c3Bhbj5TdHJlZXQ6IDwvc3Bhbj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3RyZWV0IiBjbGFzcz0iaW5wdXQtc21hbGwiPjwvbGFiZWw+PC9kaXY+JysKICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJlZGl0YWJsZS1hZGRyZXNzIj48bGFiZWw+PHNwYW4+QnVpbGRpbmc6IDwvc3Bhbj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYnVpbGRpbmciIGNsYXNzPSJpbnB1dC1taW5pIj48L2xhYmVsPjwvZGl2PicsCiAgICAgICAgICAgICAKICAgICAgICBpbnB1dGNsYXNzOiAnJwogICAgfSk7CgogICAgJC5mbi5lZGl0YWJsZXR5cGVzLmFkZHJlc3MgPSBBZGRyZXNzOwoKfSh3aW5kb3cualF1ZXJ5KSk7]]></data>
	</file>
	<file>
	  <filename>/js/external/inputs-ext/password</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/inputs-ext/password/password.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmVkaXRhYmxlLWFkZHJlc3MgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7ICAKfQoKLmVkaXRhYmxlLWFkZHJlc3Mgc3BhbiB7CiAgICB3aWR0aDogNzBweDsgIAogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwp9]]></data>
	</file>
	<file>
	  <filename>/js/external/inputs-ext/password/password.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqClBhc3NvcmQgZWRpdGFibGUgaW5wdXQuCkludGVybmFsbHkgdmFsdWUgc3RvcmVkIGFzIHtjaXR5OiAiTW9zY293Iiwgc3RyZWV0OiAiTGVuaW5hIiwgYnVpbGRpbmc6ICIxNSJ9CgpAY2xhc3MgcGFzc29yZApAZXh0ZW5kcyBhYnN0cmFjdGlucHV0CkBmaW5hbApAZXhhbXBsZQo8YSBocmVmPSIjIiBpZD0icGFzc3dvcmQiIGRhdGEtdHlwZT0icGFzc3dvcmQiIGRhdGEtcGs9IjEiPmF3ZXNvbWU8L2E+CjxzY3JpcHQ+CiQoZnVuY3Rpb24oKXsKICAgICQoJyNwYXNzd29yZCcpLmVkaXRhYmxlKHsKICAgICAgICB1cmw6ICcvcG9zdCcsCiAgICAgICAgdGl0bGU6ICdwYXNzd29yZCcsCiAgICAgICAgdmFsdWU6IHsKICAgICAgICAgICAgcGFzc3dvcmQ6ICJ0ZXN0IiwKICAgICAgICB9CiAgICB9KTsKfSk7Cjwvc2NyaXB0PgoqKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CiAgCiAgdmFyIFBhc3N3b3JkID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgIHRoaXMuaW5pdCgnUGFzc3dvcmQnLCBvcHRpb25zLCBQYXNzd29yZC5kZWZhdWx0cyk7CiAgfTsKICAKICAvL2luaGVyaXQgZnJvbSBBYnN0cmFjdCBpbnB1dAogICQuZm4uZWRpdGFibGV1dGlscy5pbmhlcml0KFBhc3N3b3JkLCAkLmZuLmVkaXRhYmxldHlwZXMuYWJzdHJhY3RpbnB1dCk7CiAgCiAgJC5leHRlbmQoUGFzc3dvcmQucHJvdG90eXBlLCB7CiAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHsKICAgICAgdGhpcy4kaW5wdXQgPSB0aGlzLiR0cGwuZmluZCgnaW5wdXQnKTsKICAgIH0sCiAgICAKICAgIHZhbHVlMmh0bWw6IGZ1bmN0aW9uICh2YWx1ZSwgZWxlbWVudCkgewogICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgJChlbGVtZW50KS5lbXB0eSgpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB2YXIgaHRtbCA9ICcqKioqKioqKic7CiAgICAgICQoZWxlbWVudCkuaHRtbChodG1sKTsKICAgIH0sCiAgICB2YWx1ZTJzdHI6IGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICB2YXIgc3RyID0gJyc7CiAgICAgIGlmICh2YWx1ZSkgewogICAgICAgIGZvciAodmFyIGsgaW4gdmFsdWUpIHsKICAgICAgICAgIHN0ciA9IHN0ciArIGsgKyAnOicgKyB2YWx1ZVtrXSArICc7JzsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHN0cjsKICAgIH0sCiAgICBzdHIydmFsdWU6IGZ1bmN0aW9uIChzdHIpIHsKICAgICAgcmV0dXJuIHN0cjsKICAgIH0sCiAgICB2YWx1ZTJpbnB1dDogZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgIGlmICghdmFsdWUpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy4kaW5wdXQuZmlsdGVyKCdbbmFtZT0ib2xkX3Bhc3MiXScpLnZhbCgnJyk7CiAgICAgIHRoaXMuJGlucHV0LmZpbHRlcignW25hbWU9Im5ld19wYXNzIl0nKS52YWwoJycpOwogICAgICB0aGlzLiRpbnB1dC5maWx0ZXIoJ1tuYW1lPSJuZXdfcGFzc19jb25maXJtYXRpb24iXScpLnZhbCgnJyk7CiAgICB9LAogICAgaW5wdXQydmFsdWU6IGZ1bmN0aW9uICgpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBvbGRfcGFzczogdGhpcy4kaW5wdXQuZmlsdGVyKCdbbmFtZT0ib2xkX3Bhc3MiXScpLnZhbCgpLAogICAgICAgIG5ld19wYXNzOiB0aGlzLiRpbnB1dC5maWx0ZXIoJ1tuYW1lPSJuZXdfcGFzcyJdJykudmFsKCksCiAgICAgICAgbmV3X3Bhc3NfY29uZmlybWF0aW9uOiB0aGlzLiRpbnB1dC5maWx0ZXIoJ1tuYW1lPSJuZXdfcGFzc19jb25maXJtYXRpb24iXScpLnZhbCgpCiAgICAgIH07CiAgICB9LAogICAgdmFsaWRhdGU6IGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICBjYXNlIHZhbHVlLm9sZF9wYXNzLnRyaW0oKS5sZW5ndGggPT0gMCB8fCB2YWx1ZS5uZXdfcGFzcy50cmltKCkubGVuZ3RoID09IDAgfHwgdmFsdWUubmV3X3Bhc3NfY29uZmlybWF0aW9uLnRyaW0oKS5sZW5ndGggPT0gMDoKICAgICAgICAgIHJldHVybiB0cmFucygndmFsaWRhdGlvbi5yZXF1aXJlZHMnKTsKICAgICAgICBjYXNlIHZhbHVlLm5ld19wYXNzLmxlbmd0aCA8IDY6CiAgICAgICAgICByZXR1cm4gdHJhbnMoJ3ZhbGlkYXRpb24ucGFzc3dvcmQubWluJyk7CiAgICAgICAgY2FzZSB2YWx1ZS5uZXdfcGFzcyAhPT0gdmFsdWUubmV3X3Bhc3NfY29uZmlybWF0aW9uOgogICAgICAgICAgcmV0dXJuIHRyYW5zKCd2YWxpZGF0aW9uLnBhc3N3b3JkLm1hdGNoJyk7CiAgICAgIH0KICAgIH0sCiAgICBhY3RpdmF0ZTogZnVuY3Rpb24gKCkgewogICAgICB0aGlzLiRpbnB1dC5maWx0ZXIoJ1tuYW1lPSJvbGRfcGFzcyJdJykuZm9jdXMoKTsKICAgIH0sCiAgICBhdXRvc3VibWl0OiBmdW5jdGlvbiAoKSB7CiAgICAgIHRoaXMuJGlucHV0LmtleWRvd24oZnVuY3Rpb24gKGUpIHsKICAgICAgICBpZiAoZS53aGljaCA9PT0gMTMpIHsKICAgICAgICAgICQodGhpcykuY2xvc2VzdCgnZm9ybScpLnN1Ym1pdCgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfSk7CiAgCiAgUGFzc3dvcmQuZGVmYXVsdHMgPSAkLmV4dGVuZCh7fSwgJC5mbi5lZGl0YWJsZXR5cGVzLmFic3RyYWN0aW5wdXQuZGVmYXVsdHMsIHsKICAgIHRwbDogJzxkaXYgY2xhc3M9IiI+JyArCiAgICAgICAgICc8ZGl2IGNsYXNzPSJlZGl0YWJsZS1wYXNzd29yZCI+PGxhYmVsPjxpbnB1dCB0eXBlPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZCIgY2xhc3M9ImZvcm0tY29udHJvbCBpbnB1dC1zbWFsbCI+PC9sYWJlbD48L2Rpdj4nICsKICAgICAgICAgJzwvZGl2PicsCiAgICBpbnB1dGNsYXNzOiAnJwogIH0pOwogIAogICQuZm4uZWRpdGFibGV0eXBlcy5wYXNzd29yZCA9IFBhc3N3b3JkOwoKfSh3aW5kb3cualF1ZXJ5KSk7]]></data>
	</file>
	<file>
	  <filename>/js/external/inputs-ext/typeaheadjs</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/inputs-ext/typeaheadjs/lib</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/inputs-ext/typeaheadjs/lib/typeahead.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohCiAqIHR5cGVhaGVhZC5qcyAwLjkuMwogKiBodHRwczovL2dpdGh1Yi5jb20vdHdpdHRlci90eXBlYWhlYWQKICogQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jLiBhbmQgb3RoZXIgY29udHJpYnV0b3JzOyBMaWNlbnNlZCBNSVQKICovCgooZnVuY3Rpb24oJCkgewogICAgdmFyIFZFUlNJT04gPSAiMC45LjMiOwogICAgdmFyIHV0aWxzID0gewogICAgICAgIGlzTXNpZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IC8obXNpZSkgKFtcdy5dKykvaS5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpOwogICAgICAgICAgICByZXR1cm4gbWF0Y2ggPyBwYXJzZUludChtYXRjaFsyXSwgMTApIDogZmFsc2U7CiAgICAgICAgfSwKICAgICAgICBpc0JsYW5rU3RyaW5nOiBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgcmV0dXJuICFzdHIgfHwgL15ccyokLy50ZXN0KHN0cik7CiAgICAgICAgfSwKICAgICAgICBlc2NhcGVSZWdFeENoYXJzOiBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXC1cW1xdXC9ce1x9XChcKVwqXCtcP1wuXFxcXlwkXHxdL2csICJcXCQmIik7CiAgICAgICAgfSwKICAgICAgICBpc1N0cmluZzogZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAic3RyaW5nIjsKICAgICAgICB9LAogICAgICAgIGlzTnVtYmVyOiBmdW5jdGlvbihvYmopIHsKICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICJudW1iZXIiOwogICAgICAgIH0sCiAgICAgICAgaXNBcnJheTogJC5pc0FycmF5LAogICAgICAgIGlzRnVuY3Rpb246ICQuaXNGdW5jdGlvbiwKICAgICAgICBpc09iamVjdDogJC5pc1BsYWluT2JqZWN0LAogICAgICAgIGlzVW5kZWZpbmVkOiBmdW5jdGlvbihvYmopIHsKICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICJ1bmRlZmluZWQiOwogICAgICAgIH0sCiAgICAgICAgYmluZDogJC5wcm94eSwKICAgICAgICBiaW5kQWxsOiBmdW5jdGlvbihvYmopIHsKICAgICAgICAgICAgdmFyIHZhbDsKICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikgewogICAgICAgICAgICAgICAgJC5pc0Z1bmN0aW9uKHZhbCA9IG9ialtrZXldKSAmJiAob2JqW2tleV0gPSAkLnByb3h5KHZhbCwgb2JqKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGluZGV4T2Y6IGZ1bmN0aW9uKGhheXN0YWNrLCBuZWVkbGUpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYXlzdGFjay5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKGhheXN0YWNrW2ldID09PSBuZWVkbGUpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfSwKICAgICAgICBlYWNoOiAkLmVhY2gsCiAgICAgICAgbWFwOiAkLm1hcCwKICAgICAgICBmaWx0ZXI6ICQuZ3JlcCwKICAgICAgICBldmVyeTogZnVuY3Rpb24ob2JqLCB0ZXN0KSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0cnVlOwogICAgICAgICAgICBpZiAoIW9iaikgewogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgfQogICAgICAgICAgICAkLmVhY2gob2JqLCBmdW5jdGlvbihrZXksIHZhbCkgewogICAgICAgICAgICAgICAgaWYgKCEocmVzdWx0ID0gdGVzdC5jYWxsKG51bGwsIHZhbCwga2V5LCBvYmopKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiAhIXJlc3VsdDsKICAgICAgICB9LAogICAgICAgIHNvbWU6IGZ1bmN0aW9uKG9iaiwgdGVzdCkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgIGlmICghb2JqKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICB9CiAgICAgICAgICAgICQuZWFjaChvYmosIGZ1bmN0aW9uKGtleSwgdmFsKSB7CiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID0gdGVzdC5jYWxsKG51bGwsIHZhbCwga2V5LCBvYmopKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuICEhcmVzdWx0OwogICAgICAgIH0sCiAgICAgICAgbWl4aW46ICQuZXh0ZW5kLAogICAgICAgIGdldFVuaXF1ZUlkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSAwOwogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gY291bnRlcisrOwogICAgICAgICAgICB9OwogICAgICAgIH0oKSwKICAgICAgICBkZWZlcjogZnVuY3Rpb24oZm4pIHsKICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7CiAgICAgICAgfSwKICAgICAgICBkZWJvdW5jZTogZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7CiAgICAgICAgICAgIHZhciB0aW1lb3V0LCByZXN1bHQ7CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0gdGhpcywgYXJncyA9IGFyZ3VtZW50cywgbGF0ZXIsIGNhbGxOb3c7CiAgICAgICAgICAgICAgICBsYXRlciA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsOwogICAgICAgICAgICAgICAgICAgIGlmICghaW1tZWRpYXRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7CiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7CiAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7CiAgICAgICAgICAgICAgICBpZiAoY2FsbE5vdykgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgdGhyb3R0bGU6IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHsKICAgICAgICAgICAgdmFyIGNvbnRleHQsIGFyZ3MsIHRpbWVvdXQsIHJlc3VsdCwgcHJldmlvdXMsIGxhdGVyOwogICAgICAgICAgICBwcmV2aW91cyA9IDA7CiAgICAgICAgICAgIGxhdGVyID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBwcmV2aW91cyA9IG5ldyBEYXRlKCk7CiAgICAgICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDsKICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLCByZW1haW5pbmcgPSB3YWl0IC0gKG5vdyAtIHByZXZpb3VzKTsKICAgICAgICAgICAgICAgIGNvbnRleHQgPSB0aGlzOwogICAgICAgICAgICAgICAgYXJncyA9IGFyZ3VtZW50czsKICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPD0gMCkgewogICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTsKICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IG5vdzsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGltZW91dCkgewogICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCByZW1haW5pbmcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIHRva2VuaXplUXVlcnk6IGZ1bmN0aW9uKHN0cikgewogICAgICAgICAgICByZXR1cm4gJC50cmltKHN0cikudG9Mb3dlckNhc2UoKS5zcGxpdCgvW1xzXSsvKTsKICAgICAgICB9LAogICAgICAgIHRva2VuaXplVGV4dDogZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgIHJldHVybiAkLnRyaW0oc3RyKS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHNcLV9dKy8pOwogICAgICAgIH0sCiAgICAgICAgZ2V0UHJvdG9jb2w6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gbG9jYXRpb24ucHJvdG9jb2w7CiAgICAgICAgfSwKICAgICAgICBub29wOiBmdW5jdGlvbigpIHt9CiAgICB9OwogICAgdmFyIEV2ZW50VGFyZ2V0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGV2ZW50U3BsaXR0ZXIgPSAvXHMrLzsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBvbjogZnVuY3Rpb24oZXZlbnRzLCBjYWxsYmFjaykgewogICAgICAgICAgICAgICAgdmFyIGV2ZW50OwogICAgICAgICAgICAgICAgaWYgKCFjYWxsYmFjaykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9OwogICAgICAgICAgICAgICAgZXZlbnRzID0gZXZlbnRzLnNwbGl0KGV2ZW50U3BsaXR0ZXIpOwogICAgICAgICAgICAgICAgd2hpbGUgKGV2ZW50ID0gZXZlbnRzLnNoaWZ0KCkpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWxsYmFja3NbZXZlbnRdID0gdGhpcy5fY2FsbGJhY2tzW2V2ZW50XSB8fCBbXTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWxsYmFja3NbZXZlbnRdLnB1c2goY2FsbGJhY2spOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uKGV2ZW50cywgZGF0YSkgewogICAgICAgICAgICAgICAgdmFyIGV2ZW50LCBjYWxsYmFja3M7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NhbGxiYWNrcykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZXZlbnRzID0gZXZlbnRzLnNwbGl0KGV2ZW50U3BsaXR0ZXIpOwogICAgICAgICAgICAgICAgd2hpbGUgKGV2ZW50ID0gZXZlbnRzLnNoaWZ0KCkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzW2V2ZW50XSkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzW2ldLmNhbGwodGhpcywgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfSgpOwogICAgdmFyIEV2ZW50QnVzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG5hbWVzcGFjZSA9ICJ0eXBlYWhlYWQ6IjsKICAgICAgICBmdW5jdGlvbiBFdmVudEJ1cyhvKSB7CiAgICAgICAgICAgIGlmICghbyB8fCAhby5lbCkgewogICAgICAgICAgICAgICAgJC5lcnJvcigiRXZlbnRCdXMgaW5pdGlhbGl6ZWQgd2l0aG91dCBlbCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuJGVsID0gJChvLmVsKTsKICAgICAgICB9CiAgICAgICAgdXRpbHMubWl4aW4oRXZlbnRCdXMucHJvdG90eXBlLCB7CiAgICAgICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uKHR5cGUpIHsKICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwogICAgICAgICAgICAgICAgdGhpcy4kZWwudHJpZ2dlcihuYW1lc3BhY2UgKyB0eXBlLCBhcmdzKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBFdmVudEJ1czsKICAgIH0oKTsKICAgIHZhciBQZXJzaXN0ZW50U3RvcmFnZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBscywgbWV0aG9kczsKICAgICAgICB0cnkgewogICAgICAgICAgICBscyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2U7CiAgICAgICAgICAgIGxzLnNldEl0ZW0oIn5+fiIsICIhIik7CiAgICAgICAgICAgIGxzLnJlbW92ZUl0ZW0oIn5+fiIpOwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICBscyA9IG51bGw7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIFBlcnNpc3RlbnRTdG9yYWdlKG5hbWVzcGFjZSkgewogICAgICAgICAgICB0aGlzLnByZWZpeCA9IFsgIl9fIiwgbmFtZXNwYWNlLCAiX18iIF0uam9pbigiIik7CiAgICAgICAgICAgIHRoaXMudHRsS2V5ID0gIl9fdHRsX18iOwogICAgICAgICAgICB0aGlzLmtleU1hdGNoZXIgPSBuZXcgUmVnRXhwKCJeIiArIHRoaXMucHJlZml4KTsKICAgICAgICB9CiAgICAgICAgaWYgKGxzICYmIHdpbmRvdy5KU09OKSB7CiAgICAgICAgICAgIG1ldGhvZHMgPSB7CiAgICAgICAgICAgICAgICBfcHJlZml4OiBmdW5jdGlvbihrZXkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcmVmaXggKyBrZXk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgX3R0bEtleTogZnVuY3Rpb24oa2V5KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWZpeChrZXkpICsgdGhpcy50dGxLZXk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihrZXkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0V4cGlyZWQoa2V5KSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZShrZXkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlKGxzLmdldEl0ZW0odGhpcy5fcHJlZml4KGtleSkpKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKGtleSwgdmFsLCB0dGwpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIodHRsKSkgewogICAgICAgICAgICAgICAgICAgICAgICBscy5zZXRJdGVtKHRoaXMuX3R0bEtleShrZXkpLCBlbmNvZGUobm93KCkgKyB0dGwpKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBscy5yZW1vdmVJdGVtKHRoaXMuX3R0bEtleShrZXkpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxzLnNldEl0ZW0odGhpcy5fcHJlZml4KGtleSksIGVuY29kZSh2YWwpKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICAgICAgICAgIGxzLnJlbW92ZUl0ZW0odGhpcy5fdHRsS2V5KGtleSkpOwogICAgICAgICAgICAgICAgICAgIGxzLnJlbW92ZUl0ZW0odGhpcy5fcHJlZml4KGtleSkpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGNsZWFyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaSwga2V5LCBrZXlzID0gW10sIGxlbiA9IGxzLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChrZXkgPSBscy5rZXkoaSkpLm1hdGNoKHRoaXMua2V5TWF0Y2hlcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkucmVwbGFjZSh0aGlzLmtleU1hdGNoZXIsICIiKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0ga2V5cy5sZW5ndGg7IGktLTsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKGtleXNbaV0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBpc0V4cGlyZWQ6IGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICAgICAgICAgIHZhciB0dGwgPSBkZWNvZGUobHMuZ2V0SXRlbSh0aGlzLl90dGxLZXkoa2V5KSkpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB1dGlscy5pc051bWJlcih0dGwpICYmIG5vdygpID4gdHRsID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1ldGhvZHMgPSB7CiAgICAgICAgICAgICAgICBnZXQ6IHV0aWxzLm5vb3AsCiAgICAgICAgICAgICAgICBzZXQ6IHV0aWxzLm5vb3AsCiAgICAgICAgICAgICAgICByZW1vdmU6IHV0aWxzLm5vb3AsCiAgICAgICAgICAgICAgICBjbGVhcjogdXRpbHMubm9vcCwKICAgICAgICAgICAgICAgIGlzRXhwaXJlZDogdXRpbHMubm9vcAogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICB1dGlscy5taXhpbihQZXJzaXN0ZW50U3RvcmFnZS5wcm90b3R5cGUsIG1ldGhvZHMpOwogICAgICAgIHJldHVybiBQZXJzaXN0ZW50U3RvcmFnZTsKICAgICAgICBmdW5jdGlvbiBub3coKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZW5jb2RlKHZhbCkgewogICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodXRpbHMuaXNVbmRlZmluZWQodmFsKSA/IG51bGwgOiB2YWwpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBkZWNvZGUodmFsKSB7CiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbCk7CiAgICAgICAgfQogICAgfSgpOwogICAgdmFyIFJlcXVlc3RDYWNoZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIGZ1bmN0aW9uIFJlcXVlc3RDYWNoZShvKSB7CiAgICAgICAgICAgIHV0aWxzLmJpbmRBbGwodGhpcyk7CiAgICAgICAgICAgIG8gPSBvIHx8IHt9OwogICAgICAgICAgICB0aGlzLnNpemVMaW1pdCA9IG8uc2l6ZUxpbWl0IHx8IDEwOwogICAgICAgICAgICB0aGlzLmNhY2hlID0ge307CiAgICAgICAgICAgIHRoaXMuY2FjaGVkS2V5c0J5QWdlID0gW107CiAgICAgICAgfQogICAgICAgIHV0aWxzLm1peGluKFJlcXVlc3RDYWNoZS5wcm90b3R5cGUsIHsKICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbih1cmwpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlW3VybF07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNldDogZnVuY3Rpb24odXJsLCByZXNwKSB7CiAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdFRvRXZpY3Q7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5jYWNoZWRLZXlzQnlBZ2UubGVuZ3RoID09PSB0aGlzLnNpemVMaW1pdCkgewogICAgICAgICAgICAgICAgICAgIHJlcXVlc3RUb0V2aWN0ID0gdGhpcy5jYWNoZWRLZXlzQnlBZ2Uuc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jYWNoZVtyZXF1ZXN0VG9FdmljdF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlW3VybF0gPSByZXNwOwogICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRLZXlzQnlBZ2UucHVzaCh1cmwpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIFJlcXVlc3RDYWNoZTsKICAgIH0oKTsKICAgIHZhciBUcmFuc3BvcnQgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgcGVuZGluZ1JlcXVlc3RzQ291bnQgPSAwLCBwZW5kaW5nUmVxdWVzdHMgPSB7fSwgbWF4UGVuZGluZ1JlcXVlc3RzLCByZXF1ZXN0Q2FjaGU7CiAgICAgICAgZnVuY3Rpb24gVHJhbnNwb3J0KG8pIHsKICAgICAgICAgICAgdXRpbHMuYmluZEFsbCh0aGlzKTsKICAgICAgICAgICAgbyA9IHV0aWxzLmlzU3RyaW5nKG8pID8gewogICAgICAgICAgICAgICAgdXJsOiBvCiAgICAgICAgICAgIH0gOiBvOwogICAgICAgICAgICByZXF1ZXN0Q2FjaGUgPSByZXF1ZXN0Q2FjaGUgfHwgbmV3IFJlcXVlc3RDYWNoZSgpOwogICAgICAgICAgICBtYXhQZW5kaW5nUmVxdWVzdHMgPSB1dGlscy5pc051bWJlcihvLm1heFBhcmFsbGVsUmVxdWVzdHMpID8gby5tYXhQYXJhbGxlbFJlcXVlc3RzIDogbWF4UGVuZGluZ1JlcXVlc3RzIHx8IDY7CiAgICAgICAgICAgIHRoaXMudXJsID0gby51cmw7CiAgICAgICAgICAgIHRoaXMud2lsZGNhcmQgPSBvLndpbGRjYXJkIHx8ICIlUVVFUlkiOwogICAgICAgICAgICB0aGlzLmZpbHRlciA9IG8uZmlsdGVyOwogICAgICAgICAgICB0aGlzLnJlcGxhY2UgPSBvLnJlcGxhY2U7CiAgICAgICAgICAgIHRoaXMuYWpheFNldHRpbmdzID0gewogICAgICAgICAgICAgICAgdHlwZTogImdldCIsCiAgICAgICAgICAgICAgICBjYWNoZTogby5jYWNoZSwKICAgICAgICAgICAgICAgIHRpbWVvdXQ6IG8udGltZW91dCwKICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBvLmRhdGFUeXBlIHx8ICJqc29uIiwKICAgICAgICAgICAgICAgIGJlZm9yZVNlbmQ6IG8uYmVmb3JlU2VuZAogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLl9nZXQgPSAoL150aHJvdHRsZSQvaS50ZXN0KG8ucmF0ZUxpbWl0Rm4pID8gdXRpbHMudGhyb3R0bGUgOiB1dGlscy5kZWJvdW5jZSkodGhpcy5fZ2V0LCBvLnJhdGVMaW1pdFdhaXQgfHwgMzAwKTsKICAgICAgICB9CiAgICAgICAgdXRpbHMubWl4aW4oVHJhbnNwb3J0LnByb3RvdHlwZSwgewogICAgICAgICAgICBfZ2V0OiBmdW5jdGlvbih1cmwsIGNiKSB7CiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgICAgICAgICBpZiAoYmVsb3dQZW5kaW5nUmVxdWVzdHNUaHJlc2hvbGQoKSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbmRSZXF1ZXN0KHVybCkuZG9uZShkb25lKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRlY2tSZXF1ZXN0QXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmUocmVzcCkgewogICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGhhdC5maWx0ZXIgPyB0aGF0LmZpbHRlcihyZXNwKSA6IHJlc3A7CiAgICAgICAgICAgICAgICAgICAgY2IgJiYgY2IoZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENhY2hlLnNldCh1cmwsIHJlc3ApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBfc2VuZFJlcXVlc3Q6IGZ1bmN0aW9uKHVybCkgewogICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLCBqcVhociA9IHBlbmRpbmdSZXF1ZXN0c1t1cmxdOwogICAgICAgICAgICAgICAgaWYgKCFqcVhocikgewogICAgICAgICAgICAgICAgICAgIGluY3JlbWVudFBlbmRpbmdSZXF1ZXN0cygpOwogICAgICAgICAgICAgICAgICAgIGpxWGhyID0gcGVuZGluZ1JlcXVlc3RzW3VybF0gPSAkLmFqYXgodXJsLCB0aGlzLmFqYXhTZXR0aW5ncykuYWx3YXlzKGFsd2F5cyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4ganFYaHI7CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhbHdheXMoKSB7CiAgICAgICAgICAgICAgICAgICAgZGVjcmVtZW50UGVuZGluZ1JlcXVlc3RzKCk7CiAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3RzW3VybF0gPSBudWxsOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGF0Lm9uRGVja1JlcXVlc3RBcmdzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX2dldC5hcHBseSh0aGF0LCB0aGF0Lm9uRGVja1JlcXVlc3RBcmdzKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5vbkRlY2tSZXF1ZXN0QXJncyA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKHF1ZXJ5LCBjYikgewogICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLCBlbmNvZGVkUXVlcnkgPSBlbmNvZGVVUklDb21wb25lbnQocXVlcnkgfHwgIiIpLCB1cmwsIHJlc3A7CiAgICAgICAgICAgICAgICBjYiA9IGNiIHx8IHV0aWxzLm5vb3A7CiAgICAgICAgICAgICAgICB1cmwgPSB0aGlzLnJlcGxhY2UgPyB0aGlzLnJlcGxhY2UodGhpcy51cmwsIGVuY29kZWRRdWVyeSkgOiB0aGlzLnVybC5yZXBsYWNlKHRoaXMud2lsZGNhcmQsIGVuY29kZWRRdWVyeSk7CiAgICAgICAgICAgICAgICBpZiAocmVzcCA9IHJlcXVlc3RDYWNoZS5nZXQodXJsKSkgewogICAgICAgICAgICAgICAgICAgIHV0aWxzLmRlZmVyKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBjYih0aGF0LmZpbHRlciA/IHRoYXQuZmlsdGVyKHJlc3ApIDogcmVzcCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldCh1cmwsIGNiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiAhIXJlc3A7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gVHJhbnNwb3J0OwogICAgICAgIGZ1bmN0aW9uIGluY3JlbWVudFBlbmRpbmdSZXF1ZXN0cygpIHsKICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3RzQ291bnQrKzsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZGVjcmVtZW50UGVuZGluZ1JlcXVlc3RzKCkgewogICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHNDb3VudC0tOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBiZWxvd1BlbmRpbmdSZXF1ZXN0c1RocmVzaG9sZCgpIHsKICAgICAgICAgICAgcmV0dXJuIHBlbmRpbmdSZXF1ZXN0c0NvdW50IDwgbWF4UGVuZGluZ1JlcXVlc3RzOwogICAgICAgIH0KICAgIH0oKTsKICAgIHZhciBEYXRhc2V0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGtleXMgPSB7CiAgICAgICAgICAgIHRodW1icHJpbnQ6ICJ0aHVtYnByaW50IiwKICAgICAgICAgICAgcHJvdG9jb2w6ICJwcm90b2NvbCIsCiAgICAgICAgICAgIGl0ZW1IYXNoOiAiaXRlbUhhc2giLAogICAgICAgICAgICBhZGphY2VuY3lMaXN0OiAiYWRqYWNlbmN5TGlzdCIKICAgICAgICB9OwogICAgICAgIGZ1bmN0aW9uIERhdGFzZXQobykgewogICAgICAgICAgICB1dGlscy5iaW5kQWxsKHRoaXMpOwogICAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoby50ZW1wbGF0ZSkgJiYgIW8uZW5naW5lKSB7CiAgICAgICAgICAgICAgICAkLmVycm9yKCJubyB0ZW1wbGF0ZSBlbmdpbmUgc3BlY2lmaWVkIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFvLmxvY2FsICYmICFvLnByZWZldGNoICYmICFvLnJlbW90ZSkgewogICAgICAgICAgICAgICAgJC5lcnJvcigib25lIG9mIGxvY2FsLCBwcmVmZXRjaCwgb3IgcmVtb3RlIGlzIHJlcXVpcmVkIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5uYW1lID0gby5uYW1lIHx8IHV0aWxzLmdldFVuaXF1ZUlkKCk7CiAgICAgICAgICAgIHRoaXMubGltaXQgPSBvLmxpbWl0IHx8IDU7CiAgICAgICAgICAgIHRoaXMubWluTGVuZ3RoID0gby5taW5MZW5ndGggfHwgMTsKICAgICAgICAgICAgdGhpcy5oZWFkZXIgPSBvLmhlYWRlcjsKICAgICAgICAgICAgdGhpcy5mb290ZXIgPSBvLmZvb3RlcjsKICAgICAgICAgICAgdGhpcy52YWx1ZUtleSA9IG8udmFsdWVLZXkgfHwgInZhbHVlIjsKICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IGNvbXBpbGVUZW1wbGF0ZShvLnRlbXBsYXRlLCBvLmVuZ2luZSwgdGhpcy52YWx1ZUtleSk7CiAgICAgICAgICAgIHRoaXMubG9jYWwgPSBvLmxvY2FsOwogICAgICAgICAgICB0aGlzLnByZWZldGNoID0gby5wcmVmZXRjaDsKICAgICAgICAgICAgdGhpcy5yZW1vdGUgPSBvLnJlbW90ZTsKICAgICAgICAgICAgdGhpcy5pdGVtSGFzaCA9IHt9OwogICAgICAgICAgICB0aGlzLmFkamFjZW5jeUxpc3QgPSB7fTsKICAgICAgICAgICAgdGhpcy5zdG9yYWdlID0gby5uYW1lID8gbmV3IFBlcnNpc3RlbnRTdG9yYWdlKG8ubmFtZSkgOiBudWxsOwogICAgICAgIH0KICAgICAgICB1dGlscy5taXhpbihEYXRhc2V0LnByb3RvdHlwZSwgewogICAgICAgICAgICBfcHJvY2Vzc0xvY2FsRGF0YTogZnVuY3Rpb24oZGF0YSkgewogICAgICAgICAgICAgICAgdGhpcy5fbWVyZ2VQcm9jZXNzZWREYXRhKHRoaXMuX3Byb2Nlc3NEYXRhKGRhdGEpKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX2xvYWRQcmVmZXRjaERhdGE6IGZ1bmN0aW9uKG8pIHsKICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywgdGh1bWJwcmludCA9IFZFUlNJT04gKyAoby50aHVtYnByaW50IHx8ICIiKSwgc3RvcmVkVGh1bWJwcmludCwgc3RvcmVkUHJvdG9jb2wsIHN0b3JlZEl0ZW1IYXNoLCBzdG9yZWRBZGphY2VuY3lMaXN0LCBpc0V4cGlyZWQsIGRlZmVycmVkOwogICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RvcmFnZSkgewogICAgICAgICAgICAgICAgICAgIHN0b3JlZFRodW1icHJpbnQgPSB0aGlzLnN0b3JhZ2UuZ2V0KGtleXMudGh1bWJwcmludCk7CiAgICAgICAgICAgICAgICAgICAgc3RvcmVkUHJvdG9jb2wgPSB0aGlzLnN0b3JhZ2UuZ2V0KGtleXMucHJvdG9jb2wpOwogICAgICAgICAgICAgICAgICAgIHN0b3JlZEl0ZW1IYXNoID0gdGhpcy5zdG9yYWdlLmdldChrZXlzLml0ZW1IYXNoKTsKICAgICAgICAgICAgICAgICAgICBzdG9yZWRBZGphY2VuY3lMaXN0ID0gdGhpcy5zdG9yYWdlLmdldChrZXlzLmFkamFjZW5jeUxpc3QpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaXNFeHBpcmVkID0gc3RvcmVkVGh1bWJwcmludCAhPT0gdGh1bWJwcmludCB8fCBzdG9yZWRQcm90b2NvbCAhPT0gdXRpbHMuZ2V0UHJvdG9jb2woKTsKICAgICAgICAgICAgICAgIG8gPSB1dGlscy5pc1N0cmluZyhvKSA/IHsKICAgICAgICAgICAgICAgICAgICB1cmw6IG8KICAgICAgICAgICAgICAgIH0gOiBvOwogICAgICAgICAgICAgICAgby50dGwgPSB1dGlscy5pc051bWJlcihvLnR0bCkgPyBvLnR0bCA6IDI0ICogNjAgKiA2MCAqIDFlMzsKICAgICAgICAgICAgICAgIGlmIChzdG9yZWRJdGVtSGFzaCAmJiBzdG9yZWRBZGphY2VuY3lMaXN0ICYmICFpc0V4cGlyZWQpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXJnZVByb2Nlc3NlZERhdGEoewogICAgICAgICAgICAgICAgICAgICAgICBpdGVtSGFzaDogc3RvcmVkSXRlbUhhc2gsCiAgICAgICAgICAgICAgICAgICAgICAgIGFkamFjZW5jeUxpc3Q6IHN0b3JlZEFkamFjZW5jeUxpc3QKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZCA9ICQuRGVmZXJyZWQoKS5yZXNvbHZlKCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGRlZmVycmVkID0gJC5nZXRKU09OKG8udXJsKS5kb25lKHByb2Nlc3NQcmVmZXRjaERhdGEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgICAgICAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1ByZWZldGNoRGF0YShkYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGZpbHRlcmVkRGF0YSA9IG8uZmlsdGVyID8gby5maWx0ZXIoZGF0YSkgOiBkYXRhLCBwcm9jZXNzZWREYXRhID0gdGhhdC5fcHJvY2Vzc0RhdGEoZmlsdGVyZWREYXRhKSwgaXRlbUhhc2ggPSBwcm9jZXNzZWREYXRhLml0ZW1IYXNoLCBhZGphY2VuY3lMaXN0ID0gcHJvY2Vzc2VkRGF0YS5hZGphY2VuY3lMaXN0OwogICAgICAgICAgICAgICAgICAgIGlmICh0aGF0LnN0b3JhZ2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5zdG9yYWdlLnNldChrZXlzLml0ZW1IYXNoLCBpdGVtSGFzaCwgby50dGwpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnN0b3JhZ2Uuc2V0KGtleXMuYWRqYWNlbmN5TGlzdCwgYWRqYWNlbmN5TGlzdCwgby50dGwpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnN0b3JhZ2Uuc2V0KGtleXMudGh1bWJwcmludCwgdGh1bWJwcmludCwgby50dGwpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnN0b3JhZ2Uuc2V0KGtleXMucHJvdG9jb2wsIHV0aWxzLmdldFByb3RvY29sKCksIG8udHRsKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdGhhdC5fbWVyZ2VQcm9jZXNzZWREYXRhKHByb2Nlc3NlZERhdGEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBfdHJhbnNmb3JtRGF0dW06IGZ1bmN0aW9uKGRhdHVtKSB7CiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB1dGlscy5pc1N0cmluZyhkYXR1bSkgPyBkYXR1bSA6IGRhdHVtW3RoaXMudmFsdWVLZXldLCB0b2tlbnMgPSBkYXR1bS50b2tlbnMgfHwgdXRpbHMudG9rZW5pemVUZXh0KHZhbHVlKSwgaXRlbSA9IHsKICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgdG9rZW5zOiB0b2tlbnMKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZGF0dW0pKSB7CiAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXR1bSA9IHt9OwogICAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0dW1bdGhpcy52YWx1ZUtleV0gPSBkYXR1bTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXR1bSA9IGRhdHVtOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaXRlbS50b2tlbnMgPSB1dGlscy5maWx0ZXIoaXRlbS50b2tlbnMsIGZ1bmN0aW9uKHRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICF1dGlscy5pc0JsYW5rU3RyaW5nKHRva2VuKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgaXRlbS50b2tlbnMgPSB1dGlscy5tYXAoaXRlbS50b2tlbnMsIGZ1bmN0aW9uKHRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHVybiBpdGVtOwogICAgICAgICAgICB9LAogICAgICAgICAgICBfcHJvY2Vzc0RhdGE6IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywgaXRlbUhhc2ggPSB7fSwgYWRqYWNlbmN5TGlzdCA9IHt9OwogICAgICAgICAgICAgICAgdXRpbHMuZWFjaChkYXRhLCBmdW5jdGlvbihpLCBkYXR1bSkgewogICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdGhhdC5fdHJhbnNmb3JtRGF0dW0oZGF0dW0pLCBpZCA9IHV0aWxzLmdldFVuaXF1ZUlkKGl0ZW0udmFsdWUpOwogICAgICAgICAgICAgICAgICAgIGl0ZW1IYXNoW2lkXSA9IGl0ZW07CiAgICAgICAgICAgICAgICAgICAgdXRpbHMuZWFjaChpdGVtLnRva2VucywgZnVuY3Rpb24oaSwgdG9rZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJhY3RlciA9IHRva2VuLmNoYXJBdCgwKSwgYWRqYWNlbmN5ID0gYWRqYWNlbmN5TGlzdFtjaGFyYWN0ZXJdIHx8IChhZGphY2VuY3lMaXN0W2NoYXJhY3Rlcl0gPSBbIGlkIF0pOwogICAgICAgICAgICAgICAgICAgICAgICAhfnV0aWxzLmluZGV4T2YoYWRqYWNlbmN5LCBpZCkgJiYgYWRqYWNlbmN5LnB1c2goaWQpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIGl0ZW1IYXNoOiBpdGVtSGFzaCwKICAgICAgICAgICAgICAgICAgICBhZGphY2VuY3lMaXN0OiBhZGphY2VuY3lMaXN0CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9LAogICAgICAgICAgICBfbWVyZ2VQcm9jZXNzZWREYXRhOiBmdW5jdGlvbihwcm9jZXNzZWREYXRhKSB7CiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgICAgICAgICB1dGlscy5taXhpbih0aGlzLml0ZW1IYXNoLCBwcm9jZXNzZWREYXRhLml0ZW1IYXNoKTsKICAgICAgICAgICAgICAgIHV0aWxzLmVhY2gocHJvY2Vzc2VkRGF0YS5hZGphY2VuY3lMaXN0LCBmdW5jdGlvbihjaGFyYWN0ZXIsIGFkamFjZW5jeSkgewogICAgICAgICAgICAgICAgICAgIHZhciBtYXN0ZXJBZGphY2VuY3kgPSB0aGF0LmFkamFjZW5jeUxpc3RbY2hhcmFjdGVyXTsKICAgICAgICAgICAgICAgICAgICB0aGF0LmFkamFjZW5jeUxpc3RbY2hhcmFjdGVyXSA9IG1hc3RlckFkamFjZW5jeSA/IG1hc3RlckFkamFjZW5jeS5jb25jYXQoYWRqYWNlbmN5KSA6IGFkamFjZW5jeTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9LAogICAgICAgICAgICBfZ2V0TG9jYWxTdWdnZXN0aW9uczogZnVuY3Rpb24odGVybXMpIHsKICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywgZmlyc3RDaGFycyA9IFtdLCBsaXN0cyA9IFtdLCBzaG9ydGVzdExpc3QsIHN1Z2dlc3Rpb25zID0gW107CiAgICAgICAgICAgICAgICB1dGlscy5lYWNoKHRlcm1zLCBmdW5jdGlvbihpLCB0ZXJtKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0Q2hhciA9IHRlcm0uY2hhckF0KDApOwogICAgICAgICAgICAgICAgICAgICF+dXRpbHMuaW5kZXhPZihmaXJzdENoYXJzLCBmaXJzdENoYXIpICYmIGZpcnN0Q2hhcnMucHVzaChmaXJzdENoYXIpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB1dGlscy5lYWNoKGZpcnN0Q2hhcnMsIGZ1bmN0aW9uKGksIGZpcnN0Q2hhcikgewogICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gdGhhdC5hZGphY2VuY3lMaXN0W2ZpcnN0Q2hhcl07CiAgICAgICAgICAgICAgICAgICAgaWYgKCFsaXN0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgbGlzdHMucHVzaChsaXN0KTsKICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3J0ZXN0TGlzdCB8fCBsaXN0Lmxlbmd0aCA8IHNob3J0ZXN0TGlzdC5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRlc3RMaXN0ID0gbGlzdDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGlmIChsaXN0cy5sZW5ndGggPCBmaXJzdENoYXJzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHV0aWxzLmVhY2goc2hvcnRlc3RMaXN0LCBmdW5jdGlvbihpLCBpZCkgewogICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdGhhdC5pdGVtSGFzaFtpZF0sIGlzQ2FuZGlkYXRlLCBpc01hdGNoOwogICAgICAgICAgICAgICAgICAgIGlzQ2FuZGlkYXRlID0gdXRpbHMuZXZlcnkobGlzdHMsIGZ1bmN0aW9uKGxpc3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIH51dGlscy5pbmRleE9mKGxpc3QsIGlkKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBpc01hdGNoID0gaXNDYW5kaWRhdGUgJiYgdXRpbHMuZXZlcnkodGVybXMsIGZ1bmN0aW9uKHRlcm0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHV0aWxzLnNvbWUoaXRlbS50b2tlbnMsIGZ1bmN0aW9uKHRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW4uaW5kZXhPZih0ZXJtKSA9PT0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgaXNNYXRjaCAmJiBzdWdnZXN0aW9ucy5wdXNoKGl0ZW0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbnM7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGRlZmVycmVkOwogICAgICAgICAgICAgICAgdGhpcy5sb2NhbCAmJiB0aGlzLl9wcm9jZXNzTG9jYWxEYXRhKHRoaXMubG9jYWwpOwogICAgICAgICAgICAgICAgdGhpcy50cmFuc3BvcnQgPSB0aGlzLnJlbW90ZSA/IG5ldyBUcmFuc3BvcnQodGhpcy5yZW1vdGUpIDogbnVsbDsKICAgICAgICAgICAgICAgIGRlZmVycmVkID0gdGhpcy5wcmVmZXRjaCA/IHRoaXMuX2xvYWRQcmVmZXRjaERhdGEodGhpcy5wcmVmZXRjaCkgOiAkLkRlZmVycmVkKCkucmVzb2x2ZSgpOwogICAgICAgICAgICAgICAgdGhpcy5sb2NhbCA9IHRoaXMucHJlZmV0Y2ggPSB0aGlzLnJlbW90ZSA9IG51bGw7CiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemUgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQ7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgICAgICAgICB9LAogICAgICAgICAgICBnZXRTdWdnZXN0aW9uczogZnVuY3Rpb24ocXVlcnksIGNiKSB7CiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsIHRlcm1zLCBzdWdnZXN0aW9ucywgY2FjaGVIaXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGlmIChxdWVyeS5sZW5ndGggPCB0aGlzLm1pbkxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRlcm1zID0gdXRpbHMudG9rZW5pemVRdWVyeShxdWVyeSk7CiAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyA9IHRoaXMuX2dldExvY2FsU3VnZ2VzdGlvbnModGVybXMpLnNsaWNlKDAsIHRoaXMubGltaXQpOwogICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmxlbmd0aCA8IHRoaXMubGltaXQgJiYgdGhpcy50cmFuc3BvcnQpIHsKICAgICAgICAgICAgICAgICAgICBjYWNoZUhpdCA9IHRoaXMudHJhbnNwb3J0LmdldChxdWVyeSwgcHJvY2Vzc1JlbW90ZURhdGEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIWNhY2hlSGl0ICYmIGNiICYmIGNiKHN1Z2dlc3Rpb25zKTsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NSZW1vdGVEYXRhKGRhdGEpIHsKICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyA9IHN1Z2dlc3Rpb25zLnNsaWNlKDApOwogICAgICAgICAgICAgICAgICAgIHV0aWxzLmVhY2goZGF0YSwgZnVuY3Rpb24oaSwgZGF0dW0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGF0Ll90cmFuc2Zvcm1EYXR1bShkYXR1bSksIGlzRHVwbGljYXRlOwogICAgICAgICAgICAgICAgICAgICAgICBpc0R1cGxpY2F0ZSA9IHV0aWxzLnNvbWUoc3VnZ2VzdGlvbnMsIGZ1bmN0aW9uKHN1Z2dlc3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLnZhbHVlID09PSBzdWdnZXN0aW9uLnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgIWlzRHVwbGljYXRlICYmIHN1Z2dlc3Rpb25zLnB1c2goaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWdnZXN0aW9ucy5sZW5ndGggPCB0aGF0LmxpbWl0OwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGNiICYmIGNiKHN1Z2dlc3Rpb25zKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBEYXRhc2V0OwogICAgICAgIGZ1bmN0aW9uIGNvbXBpbGVUZW1wbGF0ZSh0ZW1wbGF0ZSwgZW5naW5lLCB2YWx1ZUtleSkgewogICAgICAgICAgICB2YXIgcmVuZGVyRm4sIGNvbXBpbGVkVGVtcGxhdGU7CiAgICAgICAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHRlbXBsYXRlKSkgewogICAgICAgICAgICAgICAgcmVuZGVyRm4gPSB0ZW1wbGF0ZTsKICAgICAgICAgICAgfSBlbHNlIGlmICh1dGlscy5pc1N0cmluZyh0ZW1wbGF0ZSkpIHsKICAgICAgICAgICAgICAgIGNvbXBpbGVkVGVtcGxhdGUgPSBlbmdpbmUuY29tcGlsZSh0ZW1wbGF0ZSk7CiAgICAgICAgICAgICAgICByZW5kZXJGbiA9IHV0aWxzLmJpbmQoY29tcGlsZWRUZW1wbGF0ZS5yZW5kZXIsIGNvbXBpbGVkVGVtcGxhdGUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmVuZGVyRm4gPSBmdW5jdGlvbihjb250ZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICI8cD4iICsgY29udGV4dFt2YWx1ZUtleV0gKyAiPC9wPiI7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZW5kZXJGbjsKICAgICAgICB9CiAgICB9KCk7CiAgICB2YXIgSW5wdXRWaWV3ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgZnVuY3Rpb24gSW5wdXRWaWV3KG8pIHsKICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICAgICAgICB1dGlscy5iaW5kQWxsKHRoaXMpOwogICAgICAgICAgICB0aGlzLnNwZWNpYWxLZXlDb2RlTWFwID0gewogICAgICAgICAgICAgICAgOTogInRhYiIsCiAgICAgICAgICAgICAgICAyNzogImVzYyIsCiAgICAgICAgICAgICAgICAzNzogImxlZnQiLAogICAgICAgICAgICAgICAgMzk6ICJyaWdodCIsCiAgICAgICAgICAgICAgICAxMzogImVudGVyIiwKICAgICAgICAgICAgICAgIDM4OiAidXAiLAogICAgICAgICAgICAgICAgNDA6ICJkb3duIgogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLiRoaW50ID0gJChvLmhpbnQpOwogICAgICAgICAgICB0aGlzLiRpbnB1dCA9ICQoby5pbnB1dCkub24oImJsdXIudHQiLCB0aGlzLl9oYW5kbGVCbHVyKS5vbigiZm9jdXMudHQiLCB0aGlzLl9oYW5kbGVGb2N1cykub24oImtleWRvd24udHQiLCB0aGlzLl9oYW5kbGVTcGVjaWFsS2V5RXZlbnQpOwogICAgICAgICAgICBpZiAoIXV0aWxzLmlzTXNpZSgpKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRpbnB1dC5vbigiaW5wdXQudHQiLCB0aGlzLl9jb21wYXJlUXVlcnlUb0lucHV0VmFsdWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQub24oImtleWRvd24udHQga2V5cHJlc3MudHQgY3V0LnR0IHBhc3RlLnR0IiwgZnVuY3Rpb24oJGUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5zcGVjaWFsS2V5Q29kZU1hcFskZS53aGljaCB8fCAkZS5rZXlDb2RlXSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHV0aWxzLmRlZmVyKHRoYXQuX2NvbXBhcmVRdWVyeVRvSW5wdXRWYWx1ZSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy4kaW5wdXQudmFsKCk7CiAgICAgICAgICAgIHRoaXMuJG92ZXJmbG93SGVscGVyID0gYnVpbGRPdmVyZmxvd0hlbHBlcih0aGlzLiRpbnB1dCk7CiAgICAgICAgfQogICAgICAgIHV0aWxzLm1peGluKElucHV0Vmlldy5wcm90b3R5cGUsIEV2ZW50VGFyZ2V0LCB7CiAgICAgICAgICAgIF9oYW5kbGVGb2N1czogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoImZvY3VzZWQiKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX2hhbmRsZUJsdXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCJibHVyZWQiKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX2hhbmRsZVNwZWNpYWxLZXlFdmVudDogZnVuY3Rpb24oJGUpIHsKICAgICAgICAgICAgICAgIHZhciBrZXlOYW1lID0gdGhpcy5zcGVjaWFsS2V5Q29kZU1hcFskZS53aGljaCB8fCAkZS5rZXlDb2RlXTsKICAgICAgICAgICAgICAgIGtleU5hbWUgJiYgdGhpcy50cmlnZ2VyKGtleU5hbWUgKyAiS2V5ZWQiLCAkZSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9jb21wYXJlUXVlcnlUb0lucHV0VmFsdWU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGlucHV0VmFsdWUgPSB0aGlzLmdldElucHV0VmFsdWUoKSwgaXNTYW1lUXVlcnkgPSBjb21wYXJlUXVlcmllcyh0aGlzLnF1ZXJ5LCBpbnB1dFZhbHVlKSwgaXNTYW1lUXVlcnlFeGNlcHRXaGl0ZXNwYWNlID0gaXNTYW1lUXVlcnkgPyB0aGlzLnF1ZXJ5Lmxlbmd0aCAhPT0gaW5wdXRWYWx1ZS5sZW5ndGggOiBmYWxzZTsKICAgICAgICAgICAgICAgIGlmIChpc1NhbWVRdWVyeUV4Y2VwdFdoaXRlc3BhY2UpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoIndoaXRlc3BhY2VDaGFuZ2VkIiwgewogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5xdWVyeQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNTYW1lUXVlcnkpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoInF1ZXJ5Q2hhbmdlZCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMucXVlcnkgPSBpbnB1dFZhbHVlCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy4kaGludC5vZmYoIi50dCIpOwogICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQub2ZmKCIudHQiKTsKICAgICAgICAgICAgICAgIHRoaXMuJGhpbnQgPSB0aGlzLiRpbnB1dCA9IHRoaXMuJG92ZXJmbG93SGVscGVyID0gbnVsbDsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZm9jdXM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQuZm9jdXMoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYmx1cjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRpbnB1dC5ibHVyKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGdldFF1ZXJ5OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5OwogICAgICAgICAgICB9LAogICAgICAgICAgICBzZXRRdWVyeTogZnVuY3Rpb24ocXVlcnkpIHsKICAgICAgICAgICAgICAgIHRoaXMucXVlcnkgPSBxdWVyeTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZ2V0SW5wdXRWYWx1ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kaW5wdXQudmFsKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNldElucHV0VmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBzaWxlbnQpIHsKICAgICAgICAgICAgICAgIHRoaXMuJGlucHV0LnZhbCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAhc2lsZW50ICYmIHRoaXMuX2NvbXBhcmVRdWVyeVRvSW5wdXRWYWx1ZSgpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBnZXRIaW50VmFsdWU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGhpbnQudmFsKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNldEhpbnRWYWx1ZTogZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgICAgIHRoaXMuJGhpbnQudmFsKHZhbHVlKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZ2V0TGFuZ3VhZ2VEaXJlY3Rpb246IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLiRpbnB1dC5jc3MoImRpcmVjdGlvbiIpIHx8ICJsdHIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBpc092ZXJmbG93OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHRoaXMuJG92ZXJmbG93SGVscGVyLnRleHQodGhpcy5nZXRJbnB1dFZhbHVlKCkpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJG92ZXJmbG93SGVscGVyLndpZHRoKCkgPiB0aGlzLiRpbnB1dC53aWR0aCgpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBpc0N1cnNvckF0RW5kOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZUxlbmd0aCA9IHRoaXMuJGlucHV0LnZhbCgpLmxlbmd0aCwgc2VsZWN0aW9uU3RhcnQgPSB0aGlzLiRpbnB1dFswXS5zZWxlY3Rpb25TdGFydCwgcmFuZ2U7CiAgICAgICAgICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoc2VsZWN0aW9uU3RhcnQpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvblN0YXJ0ID09PSB2YWx1ZUxlbmd0aDsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsKICAgICAgICAgICAgICAgICAgICByYW5nZS5tb3ZlU3RhcnQoImNoYXJhY3RlciIsIC12YWx1ZUxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlTGVuZ3RoID09PSByYW5nZS50ZXh0Lmxlbmd0aDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIElucHV0VmlldzsKICAgICAgICBmdW5jdGlvbiBidWlsZE92ZXJmbG93SGVscGVyKCRpbnB1dCkgewogICAgICAgICAgICByZXR1cm4gJCgiPHNwYW4+PC9zcGFuPiIpLmNzcyh7CiAgICAgICAgICAgICAgICBwb3NpdGlvbjogImFic29sdXRlIiwKICAgICAgICAgICAgICAgIGxlZnQ6ICItOTk5OXB4IiwKICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6ICJoaWRkZW4iLAogICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogIm5vd3JhcCIsCiAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAkaW5wdXQuY3NzKCJmb250LWZhbWlseSIpLAogICAgICAgICAgICAgICAgZm9udFNpemU6ICRpbnB1dC5jc3MoImZvbnQtc2l6ZSIpLAogICAgICAgICAgICAgICAgZm9udFN0eWxlOiAkaW5wdXQuY3NzKCJmb250LXN0eWxlIiksCiAgICAgICAgICAgICAgICBmb250VmFyaWFudDogJGlucHV0LmNzcygiZm9udC12YXJpYW50IiksCiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiAkaW5wdXQuY3NzKCJmb250LXdlaWdodCIpLAogICAgICAgICAgICAgICAgd29yZFNwYWNpbmc6ICRpbnB1dC5jc3MoIndvcmQtc3BhY2luZyIpLAogICAgICAgICAgICAgICAgbGV0dGVyU3BhY2luZzogJGlucHV0LmNzcygibGV0dGVyLXNwYWNpbmciKSwKICAgICAgICAgICAgICAgIHRleHRJbmRlbnQ6ICRpbnB1dC5jc3MoInRleHQtaW5kZW50IiksCiAgICAgICAgICAgICAgICB0ZXh0UmVuZGVyaW5nOiAkaW5wdXQuY3NzKCJ0ZXh0LXJlbmRlcmluZyIpLAogICAgICAgICAgICAgICAgdGV4dFRyYW5zZm9ybTogJGlucHV0LmNzcygidGV4dC10cmFuc2Zvcm0iKQogICAgICAgICAgICB9KS5pbnNlcnRBZnRlcigkaW5wdXQpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBjb21wYXJlUXVlcmllcyhhLCBiKSB7CiAgICAgICAgICAgIGEgPSAoYSB8fCAiIikucmVwbGFjZSgvXlxzKi9nLCAiIikucmVwbGFjZSgvXHN7Mix9L2csICIgIik7CiAgICAgICAgICAgIGIgPSAoYiB8fCAiIikucmVwbGFjZSgvXlxzKi9nLCAiIikucmVwbGFjZSgvXHN7Mix9L2csICIgIik7CiAgICAgICAgICAgIHJldHVybiBhID09PSBiOwogICAgICAgIH0KICAgIH0oKTsKICAgIHZhciBEcm9wZG93blZpZXcgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgaHRtbCA9IHsKICAgICAgICAgICAgc3VnZ2VzdGlvbnNMaXN0OiAnPHNwYW4gY2xhc3M9InR0LXN1Z2dlc3Rpb25zIj48L3NwYW4+JwogICAgICAgIH0sIGNzcyA9IHsKICAgICAgICAgICAgc3VnZ2VzdGlvbnNMaXN0OiB7CiAgICAgICAgICAgICAgICBkaXNwbGF5OiAiYmxvY2siCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHN1Z2dlc3Rpb246IHsKICAgICAgICAgICAgICAgIHdoaXRlU3BhY2U6ICJub3dyYXAiLAogICAgICAgICAgICAgICAgY3Vyc29yOiAicG9pbnRlciIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc3VnZ2VzdGlvbkNoaWxkOiB7CiAgICAgICAgICAgICAgICB3aGl0ZVNwYWNlOiAibm9ybWFsIgogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBmdW5jdGlvbiBEcm9wZG93blZpZXcobykgewogICAgICAgICAgICB1dGlscy5iaW5kQWxsKHRoaXMpOwogICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOwogICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSB0cnVlOwogICAgICAgICAgICB0aGlzLmlzTW91c2VPdmVyRHJvcGRvd24gPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy4kbWVudSA9ICQoby5tZW51KS5vbigibW91c2VlbnRlci50dCIsIHRoaXMuX2hhbmRsZU1vdXNlZW50ZXIpLm9uKCJtb3VzZWxlYXZlLnR0IiwgdGhpcy5faGFuZGxlTW91c2VsZWF2ZSkub24oImNsaWNrLnR0IiwgIi50dC1zdWdnZXN0aW9uIiwgdGhpcy5faGFuZGxlU2VsZWN0aW9uKS5vbigibW91c2VvdmVyLnR0IiwgIi50dC1zdWdnZXN0aW9uIiwgdGhpcy5faGFuZGxlTW91c2VvdmVyKTsKICAgICAgICB9CiAgICAgICAgdXRpbHMubWl4aW4oRHJvcGRvd25WaWV3LnByb3RvdHlwZSwgRXZlbnRUYXJnZXQsIHsKICAgICAgICAgICAgX2hhbmRsZU1vdXNlZW50ZXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy5pc01vdXNlT3ZlckRyb3Bkb3duID0gdHJ1ZTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX2hhbmRsZU1vdXNlbGVhdmU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy5pc01vdXNlT3ZlckRyb3Bkb3duID0gZmFsc2U7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9oYW5kbGVNb3VzZW92ZXI6IGZ1bmN0aW9uKCRlKSB7CiAgICAgICAgICAgICAgICB2YXIgJHN1Z2dlc3Rpb24gPSAkKCRlLmN1cnJlbnRUYXJnZXQpOwogICAgICAgICAgICAgICAgdGhpcy5fZ2V0U3VnZ2VzdGlvbnMoKS5yZW1vdmVDbGFzcygidHQtaXMtdW5kZXItY3Vyc29yIik7CiAgICAgICAgICAgICAgICAkc3VnZ2VzdGlvbi5hZGRDbGFzcygidHQtaXMtdW5kZXItY3Vyc29yIik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9oYW5kbGVTZWxlY3Rpb246IGZ1bmN0aW9uKCRlKSB7CiAgICAgICAgICAgICAgICB2YXIgJHN1Z2dlc3Rpb24gPSAkKCRlLmN1cnJlbnRUYXJnZXQpOwogICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCJzdWdnZXN0aW9uU2VsZWN0ZWQiLCBleHRyYWN0U3VnZ2VzdGlvbigkc3VnZ2VzdGlvbikpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBfc2hvdzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRtZW51LmNzcygiZGlzcGxheSIsICJibG9jayIpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBfaGlkZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRtZW51LmhpZGUoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX21vdmVDdXJzb3I6IGZ1bmN0aW9uKGluY3JlbWVudCkgewogICAgICAgICAgICAgICAgdmFyICRzdWdnZXN0aW9ucywgJGN1ciwgbmV4dEluZGV4LCAkdW5kZXJDdXJzb3I7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKCkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkc3VnZ2VzdGlvbnMgPSB0aGlzLl9nZXRTdWdnZXN0aW9ucygpOwogICAgICAgICAgICAgICAgJGN1ciA9ICRzdWdnZXN0aW9ucy5maWx0ZXIoIi50dC1pcy11bmRlci1jdXJzb3IiKTsKICAgICAgICAgICAgICAgICRjdXIucmVtb3ZlQ2xhc3MoInR0LWlzLXVuZGVyLWN1cnNvciIpOwogICAgICAgICAgICAgICAgbmV4dEluZGV4ID0gJHN1Z2dlc3Rpb25zLmluZGV4KCRjdXIpICsgaW5jcmVtZW50OwogICAgICAgICAgICAgICAgbmV4dEluZGV4ID0gKG5leHRJbmRleCArIDEpICUgKCRzdWdnZXN0aW9ucy5sZW5ndGggKyAxKSAtIDE7CiAgICAgICAgICAgICAgICBpZiAobmV4dEluZGV4ID09PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcigiY3Vyc29yUmVtb3ZlZCIpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dEluZGV4IDwgLTEpIHsKICAgICAgICAgICAgICAgICAgICBuZXh0SW5kZXggPSAkc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR1bmRlckN1cnNvciA9ICRzdWdnZXN0aW9ucy5lcShuZXh0SW5kZXgpLmFkZENsYXNzKCJ0dC1pcy11bmRlci1jdXJzb3IiKTsKICAgICAgICAgICAgICAgIHRoaXMuX2Vuc3VyZVZpc2liaWxpdHkoJHVuZGVyQ3Vyc29yKTsKICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcigiY3Vyc29yTW92ZWQiLCBleHRyYWN0U3VnZ2VzdGlvbigkdW5kZXJDdXJzb3IpKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX2dldFN1Z2dlc3Rpb25zOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRtZW51LmZpbmQoIi50dC1zdWdnZXN0aW9ucyA+IC50dC1zdWdnZXN0aW9uIik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9lbnN1cmVWaXNpYmlsaXR5OiBmdW5jdGlvbigkZWwpIHsKICAgICAgICAgICAgICAgIHZhciBtZW51SGVpZ2h0ID0gdGhpcy4kbWVudS5oZWlnaHQoKSArIHBhcnNlSW50KHRoaXMuJG1lbnUuY3NzKCJwYWRkaW5nVG9wIiksIDEwKSArIHBhcnNlSW50KHRoaXMuJG1lbnUuY3NzKCJwYWRkaW5nQm90dG9tIiksIDEwKSwgbWVudVNjcm9sbFRvcCA9IHRoaXMuJG1lbnUuc2Nyb2xsVG9wKCksIGVsVG9wID0gJGVsLnBvc2l0aW9uKCkudG9wLCBlbEJvdHRvbSA9IGVsVG9wICsgJGVsLm91dGVySGVpZ2h0KHRydWUpOwogICAgICAgICAgICAgICAgaWYgKGVsVG9wIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuJG1lbnUuc2Nyb2xsVG9wKG1lbnVTY3JvbGxUb3AgKyBlbFRvcCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1lbnVIZWlnaHQgPCBlbEJvdHRvbSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuJG1lbnUuc2Nyb2xsVG9wKG1lbnVTY3JvbGxUb3AgKyAoZWxCb3R0b20gLSBtZW51SGVpZ2h0KSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy4kbWVudS5vZmYoIi50dCIpOwogICAgICAgICAgICAgICAgdGhpcy4kbWVudSA9IG51bGw7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGlzVmlzaWJsZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pc09wZW4gJiYgIXRoaXMuaXNFbXB0eTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgY2xvc2VVbmxlc3NNb3VzZUlzT3ZlckRyb3Bkb3duOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc01vdXNlT3ZlckRyb3Bkb3duKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBjbG9zZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc09wZW4pIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIHRoaXMuaXNNb3VzZU92ZXJEcm9wZG93biA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX2hpZGUoKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLiRtZW51LmZpbmQoIi50dC1zdWdnZXN0aW9ucyA+IC50dC1zdWdnZXN0aW9uIikucmVtb3ZlQ2xhc3MoInR0LWlzLXVuZGVyLWN1cnNvciIpOwogICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcigiY2xvc2VkIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9wZW46IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzT3BlbikgewogICAgICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAhdGhpcy5pc0VtcHR5ICYmIHRoaXMuX3Nob3coKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIoIm9wZW5lZCIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBzZXRMYW5ndWFnZURpcmVjdGlvbjogZnVuY3Rpb24oZGlyKSB7CiAgICAgICAgICAgICAgICB2YXIgbHRyQ3NzID0gewogICAgICAgICAgICAgICAgICAgIGxlZnQ6ICIwIiwKICAgICAgICAgICAgICAgICAgICByaWdodDogImF1dG8iCiAgICAgICAgICAgICAgICB9LCBydGxDc3MgPSB7CiAgICAgICAgICAgICAgICAgICAgbGVmdDogImF1dG8iLAogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiIDAiCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgZGlyID09PSAibHRyIiA/IHRoaXMuJG1lbnUuY3NzKGx0ckNzcykgOiB0aGlzLiRtZW51LmNzcyhydGxDc3MpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBtb3ZlQ3Vyc29yVXA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy5fbW92ZUN1cnNvcigtMSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG1vdmVDdXJzb3JEb3duOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHRoaXMuX21vdmVDdXJzb3IoKzEpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBnZXRTdWdnZXN0aW9uVW5kZXJDdXJzb3I6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyICRzdWdnZXN0aW9uID0gdGhpcy5fZ2V0U3VnZ2VzdGlvbnMoKS5maWx0ZXIoIi50dC1pcy11bmRlci1jdXJzb3IiKS5maXJzdCgpOwogICAgICAgICAgICAgICAgcmV0dXJuICRzdWdnZXN0aW9uLmxlbmd0aCA+IDAgPyBleHRyYWN0U3VnZ2VzdGlvbigkc3VnZ2VzdGlvbikgOiBudWxsOwogICAgICAgICAgICB9LAogICAgICAgICAgICBnZXRGaXJzdFN1Z2dlc3Rpb246IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyICRzdWdnZXN0aW9uID0gdGhpcy5fZ2V0U3VnZ2VzdGlvbnMoKS5maXJzdCgpOwogICAgICAgICAgICAgICAgcmV0dXJuICRzdWdnZXN0aW9uLmxlbmd0aCA+IDAgPyBleHRyYWN0U3VnZ2VzdGlvbigkc3VnZ2VzdGlvbikgOiBudWxsOwogICAgICAgICAgICB9LAogICAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uczogZnVuY3Rpb24oZGF0YXNldCwgc3VnZ2VzdGlvbnMpIHsKICAgICAgICAgICAgICAgIHZhciBkYXRhc2V0Q2xhc3NOYW1lID0gInR0LWRhdGFzZXQtIiArIGRhdGFzZXQubmFtZSwgd3JhcHBlciA9ICc8ZGl2IGNsYXNzPSJ0dC1zdWdnZXN0aW9uIj4lYm9keTwvZGl2PicsIGNvbXBpbGVkSHRtbCwgJHN1Z2dlc3Rpb25zTGlzdCwgJGRhdGFzZXQgPSB0aGlzLiRtZW51LmZpbmQoIi4iICsgZGF0YXNldENsYXNzTmFtZSksIGVsQnVpbGRlciwgZnJhZ21lbnQsICRlbDsKICAgICAgICAgICAgICAgIGlmICgkZGF0YXNldC5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAkc3VnZ2VzdGlvbnNMaXN0ID0gJChodG1sLnN1Z2dlc3Rpb25zTGlzdCkuY3NzKGNzcy5zdWdnZXN0aW9uc0xpc3QpOwogICAgICAgICAgICAgICAgICAgICRkYXRhc2V0ID0gJCgiPGRpdj48L2Rpdj4iKS5hZGRDbGFzcyhkYXRhc2V0Q2xhc3NOYW1lKS5hcHBlbmQoZGF0YXNldC5oZWFkZXIpLmFwcGVuZCgkc3VnZ2VzdGlvbnNMaXN0KS5hcHBlbmQoZGF0YXNldC5mb290ZXIpLmFwcGVuZFRvKHRoaXMuJG1lbnUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbiAmJiB0aGlzLl9zaG93KCk7CiAgICAgICAgICAgICAgICAgICAgZWxCdWlsZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CiAgICAgICAgICAgICAgICAgICAgdXRpbHMuZWFjaChzdWdnZXN0aW9ucywgZnVuY3Rpb24oaSwgc3VnZ2VzdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLmRhdGFzZXQgPSBkYXRhc2V0Lm5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkSHRtbCA9IGRhdGFzZXQudGVtcGxhdGUoc3VnZ2VzdGlvbi5kYXR1bSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsQnVpbGRlci5pbm5lckhUTUwgPSB3cmFwcGVyLnJlcGxhY2UoIiVib2R5IiwgY29tcGlsZWRIdG1sKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGVsID0gJChlbEJ1aWxkZXIuZmlyc3RDaGlsZCkuY3NzKGNzcy5zdWdnZXN0aW9uKS5kYXRhKCJzdWdnZXN0aW9uIiwgc3VnZ2VzdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICRlbC5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNzcyhjc3Muc3VnZ2VzdGlvbkNoaWxkKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKCRlbFswXSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgJGRhdGFzZXQuc2hvdygpLmZpbmQoIi50dC1zdWdnZXN0aW9ucyIpLmh0bWwoZnJhZ21lbnQpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU3VnZ2VzdGlvbnMoZGF0YXNldC5uYW1lKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlcigic3VnZ2VzdGlvbnNSZW5kZXJlZCIpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBjbGVhclN1Z2dlc3Rpb25zOiBmdW5jdGlvbihkYXRhc2V0TmFtZSkgewogICAgICAgICAgICAgICAgdmFyICRkYXRhc2V0cyA9IGRhdGFzZXROYW1lID8gdGhpcy4kbWVudS5maW5kKCIudHQtZGF0YXNldC0iICsgZGF0YXNldE5hbWUpIDogdGhpcy4kbWVudS5maW5kKCdbY2xhc3NePSJ0dC1kYXRhc2V0LSJdJyksICRzdWdnZXN0aW9ucyA9ICRkYXRhc2V0cy5maW5kKCIudHQtc3VnZ2VzdGlvbnMiKTsKICAgICAgICAgICAgICAgICRkYXRhc2V0cy5oaWRlKCk7CiAgICAgICAgICAgICAgICAkc3VnZ2VzdGlvbnMuZW1wdHkoKTsKICAgICAgICAgICAgICAgIGlmICh0aGlzLl9nZXRTdWdnZXN0aW9ucygpLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGlkZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIERyb3Bkb3duVmlldzsKICAgICAgICBmdW5jdGlvbiBleHRyYWN0U3VnZ2VzdGlvbigkZWwpIHsKICAgICAgICAgICAgcmV0dXJuICRlbC5kYXRhKCJzdWdnZXN0aW9uIik7CiAgICAgICAgfQogICAgfSgpOwogICAgdmFyIFR5cGVhaGVhZFZpZXcgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgaHRtbCA9IHsKICAgICAgICAgICAgd3JhcHBlcjogJzxzcGFuIGNsYXNzPSJ0d2l0dGVyLXR5cGVhaGVhZCI+PC9zcGFuPicsCiAgICAgICAgICAgIGhpbnQ6ICc8aW5wdXQgY2xhc3M9InR0LWhpbnQiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBzcGVsbGNoZWNrPSJvZmYiIGRpc2FibGVkPicsCiAgICAgICAgICAgIGRyb3Bkb3duOiAnPHNwYW4gY2xhc3M9InR0LWRyb3Bkb3duLW1lbnUiPjwvc3Bhbj4nCiAgICAgICAgfSwgY3NzID0gewogICAgICAgICAgICB3cmFwcGVyOiB7CiAgICAgICAgICAgICAgICBwb3NpdGlvbjogInJlbGF0aXZlIiwKICAgICAgICAgICAgICAgIGRpc3BsYXk6ICJpbmxpbmUtYmxvY2siCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGhpbnQ6IHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAiYWJzb2x1dGUiLAogICAgICAgICAgICAgICAgdG9wOiAiMCIsCiAgICAgICAgICAgICAgICBsZWZ0OiAiMCIsCiAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogInRyYW5zcGFyZW50IiwKICAgICAgICAgICAgICAgIGJveFNoYWRvdzogIm5vbmUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHF1ZXJ5OiB7CiAgICAgICAgICAgICAgICBwb3NpdGlvbjogInJlbGF0aXZlIiwKICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246ICJ0b3AiLAogICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAidHJhbnNwYXJlbnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRyb3Bkb3duOiB7CiAgICAgICAgICAgICAgICBwb3NpdGlvbjogImFic29sdXRlIiwKICAgICAgICAgICAgICAgIHRvcDogIjEwMCUiLAogICAgICAgICAgICAgICAgbGVmdDogIjAiLAogICAgICAgICAgICAgICAgekluZGV4OiAiMTAwIiwKICAgICAgICAgICAgICAgIGRpc3BsYXk6ICJub25lIgogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBpZiAodXRpbHMuaXNNc2llKCkpIHsKICAgICAgICAgICAgdXRpbHMubWl4aW4oY3NzLnF1ZXJ5LCB7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICJ1cmwoZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQUFBQVAvLy95SDVCQUVBQUFBQUxBQUFBQUFCQUFFQUFBSUJSQUE3KSIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGlmICh1dGlscy5pc01zaWUoKSAmJiB1dGlscy5pc01zaWUoKSA8PSA3KSB7CiAgICAgICAgICAgIHV0aWxzLm1peGluKGNzcy53cmFwcGVyLCB7CiAgICAgICAgICAgICAgICBkaXNwbGF5OiAiaW5saW5lIiwKICAgICAgICAgICAgICAgIHpvb206ICIxIgogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdXRpbHMubWl4aW4oY3NzLnF1ZXJ5LCB7CiAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6ICItMXB4IgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gVHlwZWFoZWFkVmlldyhvKSB7CiAgICAgICAgICAgIHZhciAkbWVudSwgJGlucHV0LCAkaGludDsKICAgICAgICAgICAgdXRpbHMuYmluZEFsbCh0aGlzKTsKICAgICAgICAgICAgdGhpcy4kbm9kZSA9IGJ1aWxkRG9tU3RydWN0dXJlKG8uaW5wdXQpOwogICAgICAgICAgICB0aGlzLmRhdGFzZXRzID0gby5kYXRhc2V0czsKICAgICAgICAgICAgdGhpcy5kaXIgPSBudWxsOwogICAgICAgICAgICB0aGlzLmV2ZW50QnVzID0gby5ldmVudEJ1czsKICAgICAgICAgICAgJG1lbnUgPSB0aGlzLiRub2RlLmZpbmQoIi50dC1kcm9wZG93bi1tZW51Iik7CiAgICAgICAgICAgICRpbnB1dCA9IHRoaXMuJG5vZGUuZmluZCgiLnR0LXF1ZXJ5Iik7CiAgICAgICAgICAgICRoaW50ID0gdGhpcy4kbm9kZS5maW5kKCIudHQtaGludCIpOwogICAgICAgICAgICB0aGlzLmRyb3Bkb3duVmlldyA9IG5ldyBEcm9wZG93blZpZXcoewogICAgICAgICAgICAgICAgbWVudTogJG1lbnUKICAgICAgICAgICAgfSkub24oInN1Z2dlc3Rpb25TZWxlY3RlZCIsIHRoaXMuX2hhbmRsZVNlbGVjdGlvbikub24oImN1cnNvck1vdmVkIiwgdGhpcy5fY2xlYXJIaW50KS5vbigiY3Vyc29yTW92ZWQiLCB0aGlzLl9zZXRJbnB1dFZhbHVlVG9TdWdnZXN0aW9uVW5kZXJDdXJzb3IpLm9uKCJjdXJzb3JSZW1vdmVkIiwgdGhpcy5fc2V0SW5wdXRWYWx1ZVRvUXVlcnkpLm9uKCJjdXJzb3JSZW1vdmVkIiwgdGhpcy5fdXBkYXRlSGludCkub24oInN1Z2dlc3Rpb25zUmVuZGVyZWQiLCB0aGlzLl91cGRhdGVIaW50KS5vbigib3BlbmVkIiwgdGhpcy5fdXBkYXRlSGludCkub24oImNsb3NlZCIsIHRoaXMuX2NsZWFySGludCkub24oIm9wZW5lZCBjbG9zZWQiLCB0aGlzLl9wcm9wYWdhdGVFdmVudCk7CiAgICAgICAgICAgIHRoaXMuaW5wdXRWaWV3ID0gbmV3IElucHV0Vmlldyh7CiAgICAgICAgICAgICAgICBpbnB1dDogJGlucHV0LAogICAgICAgICAgICAgICAgaGludDogJGhpbnQKICAgICAgICAgICAgfSkub24oImZvY3VzZWQiLCB0aGlzLl9vcGVuRHJvcGRvd24pLm9uKCJibHVyZWQiLCB0aGlzLl9jbG9zZURyb3Bkb3duKS5vbigiYmx1cmVkIiwgdGhpcy5fc2V0SW5wdXRWYWx1ZVRvUXVlcnkpLm9uKCJlbnRlcktleWVkIHRhYktleWVkIiwgdGhpcy5faGFuZGxlU2VsZWN0aW9uKS5vbigicXVlcnlDaGFuZ2VkIiwgdGhpcy5fY2xlYXJIaW50KS5vbigicXVlcnlDaGFuZ2VkIiwgdGhpcy5fY2xlYXJTdWdnZXN0aW9ucykub24oInF1ZXJ5Q2hhbmdlZCIsIHRoaXMuX2dldFN1Z2dlc3Rpb25zKS5vbigid2hpdGVzcGFjZUNoYW5nZWQiLCB0aGlzLl91cGRhdGVIaW50KS5vbigicXVlcnlDaGFuZ2VkIHdoaXRlc3BhY2VDaGFuZ2VkIiwgdGhpcy5fb3BlbkRyb3Bkb3duKS5vbigicXVlcnlDaGFuZ2VkIHdoaXRlc3BhY2VDaGFuZ2VkIiwgdGhpcy5fc2V0TGFuZ3VhZ2VEaXJlY3Rpb24pLm9uKCJlc2NLZXllZCIsIHRoaXMuX2Nsb3NlRHJvcGRvd24pLm9uKCJlc2NLZXllZCIsIHRoaXMuX3NldElucHV0VmFsdWVUb1F1ZXJ5KS5vbigidGFiS2V5ZWQgdXBLZXllZCBkb3duS2V5ZWQiLCB0aGlzLl9tYW5hZ2VQcmV2ZW50RGVmYXVsdCkub24oInVwS2V5ZWQgZG93bktleWVkIiwgdGhpcy5fbW92ZURyb3Bkb3duQ3Vyc29yKS5vbigidXBLZXllZCBkb3duS2V5ZWQiLCB0aGlzLl9vcGVuRHJvcGRvd24pLm9uKCJ0YWJLZXllZCBsZWZ0S2V5ZWQgcmlnaHRLZXllZCIsIHRoaXMuX2F1dG9jb21wbGV0ZSk7CiAgICAgICAgfQogICAgICAgIHV0aWxzLm1peGluKFR5cGVhaGVhZFZpZXcucHJvdG90eXBlLCBFdmVudFRhcmdldCwgewogICAgICAgICAgICBfbWFuYWdlUHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIHZhciAkZSA9IGUuZGF0YSwgaGludCwgaW5wdXRWYWx1ZSwgcHJldmVudERlZmF1bHQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHN3aXRjaCAoZS50eXBlKSB7CiAgICAgICAgICAgICAgICAgIGNhc2UgInRhYktleWVkIjoKICAgICAgICAgICAgICAgICAgICBoaW50ID0gdGhpcy5pbnB1dFZpZXcuZ2V0SGludFZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWx1ZSA9IHRoaXMuaW5wdXRWaWV3LmdldElucHV0VmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCA9IGhpbnQgJiYgaGludCAhPT0gaW5wdXRWYWx1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgIGNhc2UgInVwS2V5ZWQiOgogICAgICAgICAgICAgICAgICBjYXNlICJkb3duS2V5ZWQiOgogICAgICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0ID0gISRlLnNoaWZ0S2V5ICYmICEkZS5jdHJsS2V5ICYmICEkZS5tZXRhS2V5OwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQgJiYgJGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX3NldExhbmd1YWdlRGlyZWN0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBkaXIgPSB0aGlzLmlucHV0Vmlldy5nZXRMYW5ndWFnZURpcmVjdGlvbigpOwogICAgICAgICAgICAgICAgaWYgKGRpciAhPT0gdGhpcy5kaXIpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRpciA9IGRpcjsKICAgICAgICAgICAgICAgICAgICB0aGlzLiRub2RlLmNzcygiZGlyZWN0aW9uIiwgZGlyKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duVmlldy5zZXRMYW5ndWFnZURpcmVjdGlvbihkaXIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBfdXBkYXRlSGludDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgc3VnZ2VzdGlvbiA9IHRoaXMuZHJvcGRvd25WaWV3LmdldEZpcnN0U3VnZ2VzdGlvbigpLCBoaW50ID0gc3VnZ2VzdGlvbiA/IHN1Z2dlc3Rpb24udmFsdWUgOiBudWxsLCBkcm9wZG93bklzVmlzaWJsZSA9IHRoaXMuZHJvcGRvd25WaWV3LmlzVmlzaWJsZSgpLCBpbnB1dEhhc092ZXJmbG93ID0gdGhpcy5pbnB1dFZpZXcuaXNPdmVyZmxvdygpLCBpbnB1dFZhbHVlLCBxdWVyeSwgZXNjYXBlZFF1ZXJ5LCBiZWdpbnNXaXRoUXVlcnksIG1hdGNoOwogICAgICAgICAgICAgICAgaWYgKGhpbnQgJiYgZHJvcGRvd25Jc1Zpc2libGUgJiYgIWlucHV0SGFzT3ZlcmZsb3cpIHsKICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlID0gdGhpcy5pbnB1dFZpZXcuZ2V0SW5wdXRWYWx1ZSgpOwogICAgICAgICAgICAgICAgICAgIHF1ZXJ5ID0gaW5wdXRWYWx1ZS5yZXBsYWNlKC9cc3syLH0vZywgIiAiKS5yZXBsYWNlKC9eXHMrL2csICIiKTsKICAgICAgICAgICAgICAgICAgICBlc2NhcGVkUXVlcnkgPSB1dGlscy5lc2NhcGVSZWdFeENoYXJzKHF1ZXJ5KTsKICAgICAgICAgICAgICAgICAgICBiZWdpbnNXaXRoUXVlcnkgPSBuZXcgUmVnRXhwKCJeKD86IiArIGVzY2FwZWRRdWVyeSArICIpKC4qJCkiLCAiaSIpOwogICAgICAgICAgICAgICAgICAgIG1hdGNoID0gYmVnaW5zV2l0aFF1ZXJ5LmV4ZWMoaGludCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dFZpZXcuc2V0SGludFZhbHVlKGlucHV0VmFsdWUgKyAobWF0Y2ggPyBtYXRjaFsxXSA6ICIiKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9jbGVhckhpbnQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy5pbnB1dFZpZXcuc2V0SGludFZhbHVlKCIiKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX2NsZWFyU3VnZ2VzdGlvbnM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93blZpZXcuY2xlYXJTdWdnZXN0aW9ucygpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBfc2V0SW5wdXRWYWx1ZVRvUXVlcnk6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy5pbnB1dFZpZXcuc2V0SW5wdXRWYWx1ZSh0aGlzLmlucHV0Vmlldy5nZXRRdWVyeSgpKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX3NldElucHV0VmFsdWVUb1N1Z2dlc3Rpb25VbmRlckN1cnNvcjogZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgdmFyIHN1Z2dlc3Rpb24gPSBlLmRhdGE7CiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Vmlldy5zZXRJbnB1dFZhbHVlKHN1Z2dlc3Rpb24udmFsdWUsIHRydWUpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBfb3BlbkRyb3Bkb3duOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25WaWV3Lm9wZW4oKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX2Nsb3NlRHJvcGRvd246IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25WaWV3W2UudHlwZSA9PT0gImJsdXJlZCIgPyAiY2xvc2VVbmxlc3NNb3VzZUlzT3ZlckRyb3Bkb3duIiA6ICJjbG9zZSJdKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9tb3ZlRHJvcGRvd25DdXJzb3I6IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIHZhciAkZSA9IGUuZGF0YTsKICAgICAgICAgICAgICAgIGlmICghJGUuc2hpZnRLZXkgJiYgISRlLmN0cmxLZXkgJiYgISRlLm1ldGFLZXkpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duVmlld1tlLnR5cGUgPT09ICJ1cEtleWVkIiA/ICJtb3ZlQ3Vyc29yVXAiIDogIm1vdmVDdXJzb3JEb3duIl0oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgX2hhbmRsZVNlbGVjdGlvbjogZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgdmFyIGJ5Q2xpY2sgPSBlLnR5cGUgPT09ICJzdWdnZXN0aW9uU2VsZWN0ZWQiLCBzdWdnZXN0aW9uID0gYnlDbGljayA/IGUuZGF0YSA6IHRoaXMuZHJvcGRvd25WaWV3LmdldFN1Z2dlc3Rpb25VbmRlckN1cnNvcigpOwogICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0Vmlldy5zZXRJbnB1dFZhbHVlKHN1Z2dlc3Rpb24udmFsdWUpOwogICAgICAgICAgICAgICAgICAgIGJ5Q2xpY2sgPyB0aGlzLmlucHV0Vmlldy5mb2N1cygpIDogZS5kYXRhLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgYnlDbGljayAmJiB1dGlscy5pc01zaWUoKSA/IHV0aWxzLmRlZmVyKHRoaXMuZHJvcGRvd25WaWV3LmNsb3NlKSA6IHRoaXMuZHJvcGRvd25WaWV3LmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy50cmlnZ2VyKCJzZWxlY3RlZCIsIHN1Z2dlc3Rpb24uZGF0dW0sIHN1Z2dlc3Rpb24uZGF0YXNldCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9nZXRTdWdnZXN0aW9uczogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsIHF1ZXJ5ID0gdGhpcy5pbnB1dFZpZXcuZ2V0UXVlcnkoKTsKICAgICAgICAgICAgICAgIGlmICh1dGlscy5pc0JsYW5rU3RyaW5nKHF1ZXJ5KSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHV0aWxzLmVhY2godGhpcy5kYXRhc2V0cywgZnVuY3Rpb24oaSwgZGF0YXNldCkgewogICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuZ2V0U3VnZ2VzdGlvbnMocXVlcnksIGZ1bmN0aW9uKHN1Z2dlc3Rpb25zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWVyeSA9PT0gdGhhdC5pbnB1dFZpZXcuZ2V0UXVlcnkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5kcm9wZG93blZpZXcucmVuZGVyU3VnZ2VzdGlvbnMoZGF0YXNldCwgc3VnZ2VzdGlvbnMpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX2F1dG9jb21wbGV0ZTogZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgdmFyIGlzQ3Vyc29yQXRFbmQsIGlnbm9yZUV2ZW50LCBxdWVyeSwgaGludCwgc3VnZ2VzdGlvbjsKICAgICAgICAgICAgICAgIGlmIChlLnR5cGUgPT09ICJyaWdodEtleWVkIiB8fCBlLnR5cGUgPT09ICJsZWZ0S2V5ZWQiKSB7CiAgICAgICAgICAgICAgICAgICAgaXNDdXJzb3JBdEVuZCA9IHRoaXMuaW5wdXRWaWV3LmlzQ3Vyc29yQXRFbmQoKTsKICAgICAgICAgICAgICAgICAgICBpZ25vcmVFdmVudCA9IHRoaXMuaW5wdXRWaWV3LmdldExhbmd1YWdlRGlyZWN0aW9uKCkgPT09ICJsdHIiID8gZS50eXBlID09PSAibGVmdEtleWVkIiA6IGUudHlwZSA9PT0gInJpZ2h0S2V5ZWQiOwogICAgICAgICAgICAgICAgICAgIGlmICghaXNDdXJzb3JBdEVuZCB8fCBpZ25vcmVFdmVudCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcXVlcnkgPSB0aGlzLmlucHV0Vmlldy5nZXRRdWVyeSgpOwogICAgICAgICAgICAgICAgaGludCA9IHRoaXMuaW5wdXRWaWV3LmdldEhpbnRWYWx1ZSgpOwogICAgICAgICAgICAgICAgaWYgKGhpbnQgIT09ICIiICYmIHF1ZXJ5ICE9PSBoaW50KSB7CiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbiA9IHRoaXMuZHJvcGRvd25WaWV3LmdldEZpcnN0U3VnZ2VzdGlvbigpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRWaWV3LnNldElucHV0VmFsdWUoc3VnZ2VzdGlvbi52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudEJ1cy50cmlnZ2VyKCJhdXRvY29tcGxldGVkIiwgc3VnZ2VzdGlvbi5kYXR1bSwgc3VnZ2VzdGlvbi5kYXRhc2V0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgX3Byb3BhZ2F0ZUV2ZW50OiBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50QnVzLnRyaWdnZXIoZS50eXBlKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Vmlldy5kZXN0cm95KCk7CiAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duVmlldy5kZXN0cm95KCk7CiAgICAgICAgICAgICAgICBkZXN0cm95RG9tU3RydWN0dXJlKHRoaXMuJG5vZGUpOwogICAgICAgICAgICAgICAgdGhpcy4kbm9kZSA9IG51bGw7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNldFF1ZXJ5OiBmdW5jdGlvbihxdWVyeSkgewogICAgICAgICAgICAgICAgdGhpcy5pbnB1dFZpZXcuc2V0UXVlcnkocXVlcnkpOwogICAgICAgICAgICAgICAgdGhpcy5pbnB1dFZpZXcuc2V0SW5wdXRWYWx1ZShxdWVyeSk7CiAgICAgICAgICAgICAgICB0aGlzLl9jbGVhckhpbnQoKTsKICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFyU3VnZ2VzdGlvbnMoKTsKICAgICAgICAgICAgICAgIHRoaXMuX2dldFN1Z2dlc3Rpb25zKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gVHlwZWFoZWFkVmlldzsKICAgICAgICBmdW5jdGlvbiBidWlsZERvbVN0cnVjdHVyZShpbnB1dCkgewogICAgICAgICAgICB2YXIgJHdyYXBwZXIgPSAkKGh0bWwud3JhcHBlciksICRkcm9wZG93biA9ICQoaHRtbC5kcm9wZG93biksICRpbnB1dCA9ICQoaW5wdXQpLCAkaGludCA9ICQoaHRtbC5oaW50KTsKICAgICAgICAgICAgJHdyYXBwZXIgPSAkd3JhcHBlci5jc3MoY3NzLndyYXBwZXIpOwogICAgICAgICAgICAkZHJvcGRvd24gPSAkZHJvcGRvd24uY3NzKGNzcy5kcm9wZG93bik7CiAgICAgICAgICAgICRoaW50LmNzcyhjc3MuaGludCkuY3NzKHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmRBdHRhY2htZW50OiAkaW5wdXQuY3NzKCJiYWNrZ3JvdW5kLWF0dGFjaG1lbnQiKSwKICAgICAgICAgICAgICAgIGJhY2tncm91bmRDbGlwOiAkaW5wdXQuY3NzKCJiYWNrZ3JvdW5kLWNsaXAiKSwKICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJGlucHV0LmNzcygiYmFja2dyb3VuZC1jb2xvciIpLAogICAgICAgICAgICAgICAgYmFja2dyb3VuZEltYWdlOiAkaW5wdXQuY3NzKCJiYWNrZ3JvdW5kLWltYWdlIiksCiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kT3JpZ2luOiAkaW5wdXQuY3NzKCJiYWNrZ3JvdW5kLW9yaWdpbiIpLAogICAgICAgICAgICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiAkaW5wdXQuY3NzKCJiYWNrZ3JvdW5kLXBvc2l0aW9uIiksCiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVwZWF0OiAkaW5wdXQuY3NzKCJiYWNrZ3JvdW5kLXJlcGVhdCIpLAogICAgICAgICAgICAgICAgYmFja2dyb3VuZFNpemU6ICRpbnB1dC5jc3MoImJhY2tncm91bmQtc2l6ZSIpCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAkaW5wdXQuZGF0YSgidHRBdHRycyIsIHsKICAgICAgICAgICAgICAgIGRpcjogJGlucHV0LmF0dHIoImRpciIpLAogICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlOiAkaW5wdXQuYXR0cigiYXV0b2NvbXBsZXRlIiksCiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrOiAkaW5wdXQuYXR0cigic3BlbGxjaGVjayIpLAogICAgICAgICAgICAgICAgc3R5bGU6ICRpbnB1dC5hdHRyKCJzdHlsZSIpCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAkaW5wdXQuYWRkQ2xhc3MoInR0LXF1ZXJ5IikuYXR0cih7CiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU6ICJvZmYiLAogICAgICAgICAgICAgICAgc3BlbGxjaGVjazogZmFsc2UKICAgICAgICAgICAgfSkuY3NzKGNzcy5xdWVyeSk7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAhJGlucHV0LmF0dHIoImRpciIpICYmICRpbnB1dC5hdHRyKCJkaXIiLCAiYXV0byIpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7fQogICAgICAgICAgICByZXR1cm4gJGlucHV0LndyYXAoJHdyYXBwZXIpLnBhcmVudCgpLnByZXBlbmQoJGhpbnQpLmFwcGVuZCgkZHJvcGRvd24pOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBkZXN0cm95RG9tU3RydWN0dXJlKCRub2RlKSB7CiAgICAgICAgICAgIHZhciAkaW5wdXQgPSAkbm9kZS5maW5kKCIudHQtcXVlcnkiKTsKICAgICAgICAgICAgdXRpbHMuZWFjaCgkaW5wdXQuZGF0YSgidHRBdHRycyIpLCBmdW5jdGlvbihrZXksIHZhbCkgewogICAgICAgICAgICAgICAgdXRpbHMuaXNVbmRlZmluZWQodmFsKSA/ICRpbnB1dC5yZW1vdmVBdHRyKGtleSkgOiAkaW5wdXQuYXR0cihrZXksIHZhbCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAkaW5wdXQuZGV0YWNoKCkucmVtb3ZlRGF0YSgidHRBdHRycyIpLnJlbW92ZUNsYXNzKCJ0dC1xdWVyeSIpLmluc2VydEFmdGVyKCRub2RlKTsKICAgICAgICAgICAgJG5vZGUucmVtb3ZlKCk7CiAgICAgICAgfQogICAgfSgpOwogICAgKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBjYWNoZSA9IHt9LCB2aWV3S2V5ID0gInR0VmlldyIsIG1ldGhvZHM7CiAgICAgICAgbWV0aG9kcyA9IHsKICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZGF0YXNldERlZnMpIHsKICAgICAgICAgICAgICAgIHZhciBkYXRhc2V0czsKICAgICAgICAgICAgICAgIGRhdGFzZXREZWZzID0gdXRpbHMuaXNBcnJheShkYXRhc2V0RGVmcykgPyBkYXRhc2V0RGVmcyA6IFsgZGF0YXNldERlZnMgXTsKICAgICAgICAgICAgICAgIGlmIChkYXRhc2V0RGVmcy5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAkLmVycm9yKCJubyBkYXRhc2V0cyBwcm92aWRlZCIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGF0YXNldHMgPSB1dGlscy5tYXAoZGF0YXNldERlZnMsIGZ1bmN0aW9uKG8pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YXNldCA9IGNhY2hlW28ubmFtZV0gPyBjYWNoZVtvLm5hbWVdIDogbmV3IERhdGFzZXQobyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKG8ubmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVtvLm5hbWVdID0gZGF0YXNldDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFzZXQ7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goaW5pdGlhbGl6ZSk7CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpbml0aWFsaXplKCkgewogICAgICAgICAgICAgICAgICAgIHZhciAkaW5wdXQgPSAkKHRoaXMpLCBkZWZlcnJlZHMsIGV2ZW50QnVzID0gbmV3IEV2ZW50QnVzKHsKICAgICAgICAgICAgICAgICAgICAgICAgZWw6ICRpbnB1dAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGRlZmVycmVkcyA9IHV0aWxzLm1hcChkYXRhc2V0cywgZnVuY3Rpb24oZGF0YXNldCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YXNldC5pbml0aWFsaXplKCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgJGlucHV0LmRhdGEodmlld0tleSwgbmV3IFR5cGVhaGVhZFZpZXcoewogICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogJGlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICBldmVudEJ1czogZXZlbnRCdXMgPSBuZXcgRXZlbnRCdXMoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWw6ICRpbnB1dAogICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldHM6IGRhdGFzZXRzCiAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICAgICQud2hlbi5hcHBseSgkLCBkZWZlcnJlZHMpLmFsd2F5cyhmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdXRpbHMuZGVmZXIoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudEJ1cy50cmlnZ2VyKCJpbml0aWFsaXplZCIpOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGRlc3Ryb3kpOwogICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVzdHJveSgpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpLCB2aWV3ID0gJHRoaXMuZGF0YSh2aWV3S2V5KTsKICAgICAgICAgICAgICAgICAgICBpZiAodmlldykgewogICAgICAgICAgICAgICAgICAgICAgICB2aWV3LmRlc3Ryb3koKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMucmVtb3ZlRGF0YSh2aWV3S2V5KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNldFF1ZXJ5OiBmdW5jdGlvbihxdWVyeSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChzZXRRdWVyeSk7CiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzZXRRdWVyeSgpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdmlldyA9ICQodGhpcykuZGF0YSh2aWV3S2V5KTsKICAgICAgICAgICAgICAgICAgICB2aWV3ICYmIHZpZXcuc2V0UXVlcnkocXVlcnkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBqUXVlcnkuZm4udHlwZWFoZWFkID0gZnVuY3Rpb24obWV0aG9kKSB7CiAgICAgICAgICAgIGlmIChtZXRob2RzW21ldGhvZF0pIHsKICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2RzW21ldGhvZF0uYXBwbHkodGhpcywgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2RzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9KSgpOwp9KSh3aW5kb3cualF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/js/external/inputs-ext/typeaheadjs/lib/typeahead.js-bootstrap.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LnR3aXR0ZXItdHlwZWFoZWFkIC50dC1xdWVyeSwKLnR3aXR0ZXItdHlwZWFoZWFkIC50dC1oaW50IHsKICBtYXJnaW4tYm90dG9tOiAwOwp9CgoudHQtZHJvcGRvd24tbWVudSB7CiAgbWluLXdpZHRoOiAxNjBweDsKICBtYXJnaW4tdG9wOiAycHg7CiAgcGFkZGluZzogNXB4IDA7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOwogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwwLDAsLjIpOwogICpib3JkZXItcmlnaHQtd2lkdGg6IDJweDsKICAqYm9yZGVyLWJvdHRvbS13aWR0aDogMnB4OwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNnB4OwogICAgIC1tb3otYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogIC13ZWJraXQtYm94LXNoYWRvdzogMCA1cHggMTBweCByZ2JhKDAsMCwwLC4yKTsKICAgICAtbW96LWJveC1zaGFkb3c6IDAgNXB4IDEwcHggcmdiYSgwLDAsMCwuMik7CiAgICAgICAgICBib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwwLDAsLjIpOwogIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKICAgICAtbW96LWJhY2tncm91bmQtY2xpcDogcGFkZGluZzsKICAgICAgICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7Cn0KCi50dC1zdWdnZXN0aW9uIHsKICBkaXNwbGF5OiBibG9jazsKICBwYWRkaW5nOiAzcHggMjBweDsKfQoKLnR0LXN1Z2dlc3Rpb24udHQtaXMtdW5kZXItY3Vyc29yIHsKICBjb2xvcjogI2ZmZjsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA4MWMyOwogIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgIzAwODhjYywgIzAwNzdiMyk7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMCAxMDAlLCBmcm9tKCMwMDg4Y2MpLCB0bygjMDA3N2IzKSk7CiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjMDA4OGNjLCAjMDA3N2IzKTsKICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCAjMDA4OGNjLCAjMDA3N2IzKTsKICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjMDA4OGNjLCAjMDA3N2IzKTsKICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMDA4OGNjJywgZW5kQ29sb3JzdHI9JyNmZjAwNzdiMycsIEdyYWRpZW50VHlwZT0wKQp9CgoudHQtc3VnZ2VzdGlvbi50dC1pcy11bmRlci1jdXJzb3IgYSB7CiAgY29sb3I6ICNmZmY7Cn0KCi50dC1zdWdnZXN0aW9uIHAgewogIG1hcmdpbjogMDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/js/external/inputs-ext/typeaheadjs/typeaheadjs.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqClR5cGVhaGVhZC5qcyBpbnB1dCwgYmFzZWQgb24gW1R3aXR0ZXIgVHlwZWFoZWFkXShodHRwOi8vdHdpdHRlci5naXRodWIuaW8vdHlwZWFoZWFkLmpzKS4gICAKSXQgaXMgbWFpbmx5IHJlcGxhY2VtZW50IG9mIHR5cGVhaGVhZCBpbiBCb290c3RyYXAgMy4KCgpAY2xhc3MgdHlwZWFoZWFkanMKQGV4dGVuZHMgdGV4dApAc2luY2UgMS41LjAKQGZpbmFsCkBleGFtcGxlCjxhIGhyZWY9IiMiIGlkPSJjb3VudHJ5IiBkYXRhLXR5cGU9InR5cGVhaGVhZGpzIiBkYXRhLXBrPSIxIiBkYXRhLXVybD0iL3Bvc3QiIGRhdGEtdGl0bGU9IklucHV0IGNvdW50cnkiPjwvYT4KPHNjcmlwdD4KJChmdW5jdGlvbigpewogICAgJCgnI2NvdW50cnknKS5lZGl0YWJsZSh7CiAgICAgICAgdmFsdWU6ICdydScsCiAgICAgICAgdHlwZWFoZWFkOiB7CiAgICAgICAgICAgIG5hbWU6ICdjb3VudHJ5JywKICAgICAgICAgICAgbG9jYWw6IFsKICAgICAgICAgICAgICAgIHt2YWx1ZTogJ3J1JywgdG9rZW5zOiBbJ1J1c3NpYSddfSwgCiAgICAgICAgICAgICAgICB7dmFsdWU6ICdnYicsIHRva2VuczogWydHcmVhdCBCcml0YWluJ119LCAKICAgICAgICAgICAgICAgIHt2YWx1ZTogJ3VzJywgdG9rZW5zOiBbJ1VuaXRlZCBTdGF0ZXMnXX0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgdGVtcGxhdGU6IGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLnRva2Vuc1swXSArICcgKCcgKyBpdGVtLnZhbHVlICsgJyknOyAKICAgICAgICAgICAgfSAKICAgICAgICB9CiAgICB9KTsKfSk7Cjwvc2NyaXB0PgoqKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICAKICAgIHZhciBDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICAgICAgdGhpcy5pbml0KCd0eXBlYWhlYWRqcycsIG9wdGlvbnMsIENvbnN0cnVjdG9yLmRlZmF1bHRzKTsKICAgIH07CgogICAgJC5mbi5lZGl0YWJsZXV0aWxzLmluaGVyaXQoQ29uc3RydWN0b3IsICQuZm4uZWRpdGFibGV0eXBlcy50ZXh0KTsKCiAgICAkLmV4dGVuZChDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHsKICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0aGlzLnJlbmRlckNsZWFyKCk7CiAgICAgICAgICAgIHRoaXMuc2V0Q2xhc3MoKTsKICAgICAgICAgICAgdGhpcy5zZXRBdHRyKCdwbGFjZWhvbGRlcicpOwogICAgICAgICAgICB0aGlzLiRpbnB1dC50eXBlYWhlYWQodGhpcy5vcHRpb25zLnR5cGVhaGVhZCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBjb3B5IGBpbnB1dC1zbSB8IGlucHV0LWxnYCBjbGFzc2VzIHRvIHBsYWNlaG9sZGVyIGlucHV0CiAgICAgICAgICAgIGlmKCQuZm4uZWRpdGFibGVmb3JtLmVuZ2luZSA9PT0gJ2JzMycpIHsKICAgICAgICAgICAgICAgIGlmKHRoaXMuJGlucHV0Lmhhc0NsYXNzKCdpbnB1dC1zbScpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQuc2libGluZ3MoJ2lucHV0LnR0LWhpbnQnKS5hZGRDbGFzcygnaW5wdXQtc20nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKHRoaXMuJGlucHV0Lmhhc0NsYXNzKCdpbnB1dC1sZycpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQuc2libGluZ3MoJ2lucHV0LnR0LWhpbnQnKS5hZGRDbGFzcygnaW5wdXQtbGcnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOyAgICAgIAoKICAgIENvbnN0cnVjdG9yLmRlZmF1bHRzID0gJC5leHRlbmQoe30sICQuZm4uZWRpdGFibGV0eXBlcy5saXN0LmRlZmF1bHRzLCB7CiAgICAgICAgLyoqCiAgICAgICAgQHByb3BlcnR5IHRwbCAKICAgICAgICBAZGVmYXVsdCA8aW5wdXQgdHlwZT0idGV4dCI+CiAgICAgICAgKiovICAgICAgICAgCiAgICAgICAgdHBsOic8aW5wdXQgdHlwZT0idGV4dCI+JywKICAgICAgICAvKioKICAgICAgICBDb25maWd1cmF0aW9uIG9mIHR5cGVhaGVhZCBpdHNlbGYuIAogICAgICAgIFtGdWxsIGxpc3Qgb2Ygb3B0aW9uc10oaHR0cHM6Ly9naXRodWIuY29tL3R3aXR0ZXIvdHlwZWFoZWFkLmpzI2RhdGFzZXQpLgogICAgICAgIAogICAgICAgIEBwcm9wZXJ0eSB0eXBlYWhlYWQgCiAgICAgICAgQHR5cGUgb2JqZWN0CiAgICAgICAgQGRlZmF1bHQgbnVsbAogICAgICAgICoqLwogICAgICAgIHR5cGVhaGVhZDogbnVsbCwKICAgICAgICAvKioKICAgICAgICBXaGV0aGVyIHRvIHNob3cgYGNsZWFyYCBidXR0b24gCiAgICAgICAgCiAgICAgICAgQHByb3BlcnR5IGNsZWFyIAogICAgICAgIEB0eXBlIGJvb2xlYW4KICAgICAgICBAZGVmYXVsdCB0cnVlICAgICAgICAKICAgICAgICAqKi8KICAgICAgICBjbGVhcjogdHJ1ZQogICAgfSk7CgogICAgJC5mbi5lZGl0YWJsZXR5cGVzLnR5cGVhaGVhZGpzID0gQ29uc3RydWN0b3I7ICAgICAgCiAgICAKfSh3aW5kb3cualF1ZXJ5KSk7]]></data>
	</file>
	<file>
	  <filename>/js/external/inputs-ext/wysihtml5</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/inputs-ext/wysihtml5/bootstrap-wysihtml5-0.0.2</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/inputs-ext/wysihtml5/bootstrap-wysihtml5-0.0.2/bootstrap-wysihtml5-0.0.2.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[dWwud3lzaWh0bWw1LXRvb2xiYXIgewoJbWFyZ2luOiAwOwoJcGFkZGluZzogMDsKCWRpc3BsYXk6IGJsb2NrOwp9Cgp1bC53eXNpaHRtbDUtdG9vbGJhcjo6YWZ0ZXIgewoJY2xlYXI6IGJvdGg7CglkaXNwbGF5OiB0YWJsZTsKCWNvbnRlbnQ6ICIiOwp9Cgp1bC53eXNpaHRtbDUtdG9vbGJhciA+IGxpIHsKCWZsb2F0OiBsZWZ0OwoJZGlzcGxheTogbGlzdC1pdGVtOwoJbGlzdC1zdHlsZTogbm9uZTsKCW1hcmdpbjogMCA1cHggMTBweCAwOwp9Cgp1bC53eXNpaHRtbDUtdG9vbGJhciBhW2RhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9Ym9sZF0gewoJZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCnVsLnd5c2lodG1sNS10b29sYmFyIGFbZGF0YS13eXNpaHRtbDUtY29tbWFuZD1pdGFsaWNdIHsKCWZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKdWwud3lzaWh0bWw1LXRvb2xiYXIgYVtkYXRhLXd5c2lodG1sNS1jb21tYW5kPXVuZGVybGluZV0gewoJdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KCnVsLnd5c2lodG1sNS10b29sYmFyIGEuYnRuLnd5c2lodG1sNS1jb21tYW5kLWFjdGl2ZSB7CgliYWNrZ3JvdW5kLWltYWdlOiBub25lOwoJLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjE1KSwwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA1KTsKCS1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xNSksMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7Cglib3gtc2hhZG93OiBpbnNldCAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjE1KSwwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA1KTsKCWJhY2tncm91bmQtY29sb3I6ICNFNkU2RTY7CgliYWNrZ3JvdW5kLWNvbG9yOiAjRDlEOUQ5OwoJb3V0bGluZTogMDsKfQoKdWwud3lzaWh0bWw1LWNvbW1hbmRzLWRpc2FibGVkIC5kcm9wZG93bi1tZW51IHsKCWRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoKdWwud3lzaWh0bWw1LXRvb2xiYXIgZGl2Lnd5c2lodG1sNS1jb2xvcnMgewogIGRpc3BsYXk6YmxvY2s7CiAgd2lkdGg6IDUwcHg7CiAgaGVpZ2h0OiAyMHB4OwogIG1hcmdpbi10b3A6IDJweDsKICBtYXJnaW4tbGVmdDogNXB4OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKdWwud3lzaWh0bWw1LXRvb2xiYXIgYS53eXNpaHRtbDUtY29sb3JzLXRpdGxlIHsKICBwYWRkaW5nLWxlZnQ6IDcwcHg7Cn0KCnVsLnd5c2lodG1sNS10b29sYmFyIGRpdltkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPSJibGFjayJdIHsKICBiYWNrZ3JvdW5kOiBibGFjayAhaW1wb3J0YW50Owp9Cgp1bC53eXNpaHRtbDUtdG9vbGJhciBkaXZbZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0ic2lsdmVyIl0gewogIGJhY2tncm91bmQ6IHNpbHZlciAhaW1wb3J0YW50Owp9Cgp1bC53eXNpaHRtbDUtdG9vbGJhciBkaXZbZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0iZ3JheSJdIHsKICBiYWNrZ3JvdW5kOiBncmF5ICFpbXBvcnRhbnQ7Cn0KCnVsLnd5c2lodG1sNS10b29sYmFyIGRpdltkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPSJtYXJvb24iXSB7CiAgYmFja2dyb3VuZDogbWFyb29uICFpbXBvcnRhbnQ7Cn0KCnVsLnd5c2lodG1sNS10b29sYmFyIGRpdltkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPSJyZWQiXSB7CiAgYmFja2dyb3VuZDogcmVkICFpbXBvcnRhbnQ7Cn0KCnVsLnd5c2lodG1sNS10b29sYmFyIGRpdltkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPSJwdXJwbGUiXSB7CiAgYmFja2dyb3VuZDogcHVycGxlICFpbXBvcnRhbnQ7Cn0KCnVsLnd5c2lodG1sNS10b29sYmFyIGRpdltkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPSJncmVlbiJdIHsKICBiYWNrZ3JvdW5kOiBncmVlbiAhaW1wb3J0YW50Owp9Cgp1bC53eXNpaHRtbDUtdG9vbGJhciBkaXZbZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0ib2xpdmUiXSB7CiAgYmFja2dyb3VuZDogb2xpdmUgIWltcG9ydGFudDsKfQoKdWwud3lzaWh0bWw1LXRvb2xiYXIgZGl2W2RhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9Im5hdnkiXSB7CiAgYmFja2dyb3VuZDogbmF2eSAhaW1wb3J0YW50Owp9Cgp1bC53eXNpaHRtbDUtdG9vbGJhciBkaXZbZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0iYmx1ZSJdIHsKICBiYWNrZ3JvdW5kOiBibHVlICFpbXBvcnRhbnQ7Cn0KCnVsLnd5c2lodG1sNS10b29sYmFyIGRpdltkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPSJvcmFuZ2UiXSB7CiAgYmFja2dyb3VuZDogb3JhbmdlICFpbXBvcnRhbnQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/js/external/inputs-ext/wysihtml5/bootstrap-wysihtml5-0.0.2/bootstrap-wysihtml5-0.0.2.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IWZ1bmN0aW9uKCQsIHd5c2kpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICB2YXIgdHBsID0gewogICAgICAgICJmb250LXN0eWxlcyI6IGZ1bmN0aW9uKGxvY2FsZSwgb3B0aW9ucykgewogICAgICAgICAgICB2YXIgc2l6ZSA9IChvcHRpb25zICYmIG9wdGlvbnMuc2l6ZSkgPyAnIGJ0bi0nK29wdGlvbnMuc2l6ZSA6ICcnOwogICAgICAgICAgICByZXR1cm4gIjxsaSBjbGFzcz0nZHJvcGRvd24nPiIgKwogICAgICAgICAgICAgICI8YSBjbGFzcz0nYnRuIGRyb3Bkb3duLXRvZ2dsZSIgKyBzaXplICsgIicgZGF0YS10b2dnbGU9J2Ryb3Bkb3duJyBocmVmPScjJz4iICsKICAgICAgICAgICAgICAiPGkgY2xhc3M9J2ljb24tZm9udCc+PC9pPiZuYnNwOzxzcGFuIGNsYXNzPSdjdXJyZW50LWZvbnQnPiIgKyBsb2NhbGUuZm9udF9zdHlsZXMubm9ybWFsICsgIjwvc3Bhbj4mbmJzcDs8YiBjbGFzcz0nY2FyZXQnPjwvYj4iICsKICAgICAgICAgICAgICAiPC9hPiIgKwogICAgICAgICAgICAgICI8dWwgY2xhc3M9J2Ryb3Bkb3duLW1lbnUnPiIgKwogICAgICAgICAgICAgICAgIjxsaT48YSBkYXRhLXd5c2lodG1sNS1jb21tYW5kPSdmb3JtYXRCbG9jaycgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0nZGl2JyB0YWJpbmRleD0nLTEnPiIgKyBsb2NhbGUuZm9udF9zdHlsZXMubm9ybWFsICsgIjwvYT48L2xpPiIgKwogICAgICAgICAgICAgICAgIjxsaT48YSBkYXRhLXd5c2lodG1sNS1jb21tYW5kPSdmb3JtYXRCbG9jaycgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0naDEnIHRhYmluZGV4PSctMSc+IiArIGxvY2FsZS5mb250X3N0eWxlcy5oMSArICI8L2E+PC9saT4iICsKICAgICAgICAgICAgICAgICI8bGk+PGEgZGF0YS13eXNpaHRtbDUtY29tbWFuZD0nZm9ybWF0QmxvY2snIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9J2gyJyB0YWJpbmRleD0nLTEnPiIgKyBsb2NhbGUuZm9udF9zdHlsZXMuaDIgKyAiPC9hPjwvbGk+IiArCiAgICAgICAgICAgICAgICAiPGxpPjxhIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9J2Zvcm1hdEJsb2NrJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPSdoMycgdGFiaW5kZXg9Jy0xJz4iICsgbG9jYWxlLmZvbnRfc3R5bGVzLmgzICsgIjwvYT48L2xpPiIgKwogICAgICAgICAgICAgICI8L3VsPiIgKwogICAgICAgICAgICAiPC9saT4iOwogICAgICAgIH0sCgogICAgICAgICJlbXBoYXNpcyI6IGZ1bmN0aW9uKGxvY2FsZSwgb3B0aW9ucykgewogICAgICAgICAgICB2YXIgc2l6ZSA9IChvcHRpb25zICYmIG9wdGlvbnMuc2l6ZSkgPyAnIGJ0bi0nK29wdGlvbnMuc2l6ZSA6ICcnOwogICAgICAgICAgICByZXR1cm4gIjxsaT4iICsKICAgICAgICAgICAgICAiPGRpdiBjbGFzcz0nYnRuLWdyb3VwJz4iICsKICAgICAgICAgICAgICAgICI8YSBjbGFzcz0nYnRuIiArIHNpemUgKyAiJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kPSdib2xkJyB0aXRsZT0nQ1RSTCtCJyB0YWJpbmRleD0nLTEnPiIgKyBsb2NhbGUuZW1waGFzaXMuYm9sZCArICI8L2E+IiArCiAgICAgICAgICAgICAgICAiPGEgY2xhc3M9J2J0biIgKyBzaXplICsgIicgZGF0YS13eXNpaHRtbDUtY29tbWFuZD0naXRhbGljJyB0aXRsZT0nQ1RSTCtJJyB0YWJpbmRleD0nLTEnPiIgKyBsb2NhbGUuZW1waGFzaXMuaXRhbGljICsgIjwvYT4iICsKICAgICAgICAgICAgICAgICI8YSBjbGFzcz0nYnRuIiArIHNpemUgKyAiJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kPSd1bmRlcmxpbmUnIHRpdGxlPSdDVFJMK1UnIHRhYmluZGV4PSctMSc+IiArIGxvY2FsZS5lbXBoYXNpcy51bmRlcmxpbmUgKyAiPC9hPiIgKwogICAgICAgICAgICAgICI8L2Rpdj4iICsKICAgICAgICAgICAgIjwvbGk+IjsKICAgICAgICB9LAoKICAgICAgICAibGlzdHMiOiBmdW5jdGlvbihsb2NhbGUsIG9wdGlvbnMpIHsKICAgICAgICAgICAgdmFyIHNpemUgPSAob3B0aW9ucyAmJiBvcHRpb25zLnNpemUpID8gJyBidG4tJytvcHRpb25zLnNpemUgOiAnJzsKICAgICAgICAgICAgcmV0dXJuICI8bGk+IiArCiAgICAgICAgICAgICAgIjxkaXYgY2xhc3M9J2J0bi1ncm91cCc+IiArCiAgICAgICAgICAgICAgICAiPGEgY2xhc3M9J2J0biIgKyBzaXplICsgIicgZGF0YS13eXNpaHRtbDUtY29tbWFuZD0naW5zZXJ0VW5vcmRlcmVkTGlzdCcgdGl0bGU9JyIgKyBsb2NhbGUubGlzdHMudW5vcmRlcmVkICsgIicgdGFiaW5kZXg9Jy0xJz48aSBjbGFzcz0naWNvbi1saXN0Jz48L2k+PC9hPiIgKwogICAgICAgICAgICAgICAgIjxhIGNsYXNzPSdidG4iICsgc2l6ZSArICInIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9J2luc2VydE9yZGVyZWRMaXN0JyB0aXRsZT0nIiArIGxvY2FsZS5saXN0cy5vcmRlcmVkICsgIicgdGFiaW5kZXg9Jy0xJz48aSBjbGFzcz0naWNvbi10aC1saXN0Jz48L2k+PC9hPiIgKwogICAgICAgICAgICAgICAgIjxhIGNsYXNzPSdidG4iICsgc2l6ZSArICInIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9J091dGRlbnQnIHRpdGxlPSciICsgbG9jYWxlLmxpc3RzLm91dGRlbnQgKyAiJyB0YWJpbmRleD0nLTEnPjxpIGNsYXNzPSdpY29uLWluZGVudC1yaWdodCc+PC9pPjwvYT4iICsKICAgICAgICAgICAgICAgICI8YSBjbGFzcz0nYnRuIiArIHNpemUgKyAiJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kPSdJbmRlbnQnIHRpdGxlPSciICsgbG9jYWxlLmxpc3RzLmluZGVudCArICInIHRhYmluZGV4PSctMSc+PGkgY2xhc3M9J2ljb24taW5kZW50LWxlZnQnPjwvaT48L2E+IiArCiAgICAgICAgICAgICAgIjwvZGl2PiIgKwogICAgICAgICAgICAiPC9saT4iOwogICAgICAgIH0sCgogICAgICAgICJsaW5rIjogZnVuY3Rpb24obG9jYWxlLCBvcHRpb25zKSB7CiAgICAgICAgICAgIHZhciBzaXplID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5zaXplKSA/ICcgYnRuLScrb3B0aW9ucy5zaXplIDogJyc7CiAgICAgICAgICAgIHJldHVybiAiPGxpPiIgKwogICAgICAgICAgICAgICI8ZGl2IGNsYXNzPSdib290c3RyYXAtd3lzaWh0bWw1LWluc2VydC1saW5rLW1vZGFsIG1vZGFsIGhpZGUgZmFkZSc+IiArCiAgICAgICAgICAgICAgICAiPGRpdiBjbGFzcz0nbW9kYWwtaGVhZGVyJz4iICsKICAgICAgICAgICAgICAgICAgIjxhIGNsYXNzPSdjbG9zZScgZGF0YS1kaXNtaXNzPSdtb2RhbCc+JnRpbWVzOzwvYT4iICsKICAgICAgICAgICAgICAgICAgIjxoMz4iICsgbG9jYWxlLmxpbmsuaW5zZXJ0ICsgIjwvaDM+IiArCiAgICAgICAgICAgICAgICAiPC9kaXY+IiArCiAgICAgICAgICAgICAgICAiPGRpdiBjbGFzcz0nbW9kYWwtYm9keSc+IiArCiAgICAgICAgICAgICAgICAgICI8aW5wdXQgdmFsdWU9J2h0dHA6Ly8nIGNsYXNzPSdib290c3RyYXAtd3lzaWh0bWw1LWluc2VydC1saW5rLXVybCBpbnB1dC14bGFyZ2UnPiIgKwogICAgICAgICAgICAgICAgIjwvZGl2PiIgKwogICAgICAgICAgICAgICAgIjxkaXYgY2xhc3M9J21vZGFsLWZvb3Rlcic+IiArCiAgICAgICAgICAgICAgICAgICI8YSBocmVmPScjJyBjbGFzcz0nYnRuJyBkYXRhLWRpc21pc3M9J21vZGFsJz4iICsgbG9jYWxlLmxpbmsuY2FuY2VsICsgIjwvYT4iICsKICAgICAgICAgICAgICAgICAgIjxhIGhyZWY9JyMnIGNsYXNzPSdidG4gYnRuLXByaW1hcnknIGRhdGEtZGlzbWlzcz0nbW9kYWwnPiIgKyBsb2NhbGUubGluay5pbnNlcnQgKyAiPC9hPiIgKwogICAgICAgICAgICAgICAgIjwvZGl2PiIgKwogICAgICAgICAgICAgICI8L2Rpdj4iICsKICAgICAgICAgICAgICAiPGEgY2xhc3M9J2J0biIgKyBzaXplICsgIicgZGF0YS13eXNpaHRtbDUtY29tbWFuZD0nY3JlYXRlTGluaycgdGl0bGU9JyIgKyBsb2NhbGUubGluay5pbnNlcnQgKyAiJyB0YWJpbmRleD0nLTEnPjxpIGNsYXNzPSdpY29uLXNoYXJlJz48L2k+PC9hPiIgKwogICAgICAgICAgICAiPC9saT4iOwogICAgICAgIH0sCgogICAgICAgICJpbWFnZSI6IGZ1bmN0aW9uKGxvY2FsZSwgb3B0aW9ucykgewogICAgICAgICAgICB2YXIgc2l6ZSA9IChvcHRpb25zICYmIG9wdGlvbnMuc2l6ZSkgPyAnIGJ0bi0nK29wdGlvbnMuc2l6ZSA6ICcnOwogICAgICAgICAgICByZXR1cm4gIjxsaT4iICsKICAgICAgICAgICAgICAiPGRpdiBjbGFzcz0nYm9vdHN0cmFwLXd5c2lodG1sNS1pbnNlcnQtaW1hZ2UtbW9kYWwgbW9kYWwgaGlkZSBmYWRlJz4iICsKICAgICAgICAgICAgICAgICI8ZGl2IGNsYXNzPSdtb2RhbC1oZWFkZXInPiIgKwogICAgICAgICAgICAgICAgICAiPGEgY2xhc3M9J2Nsb3NlJyBkYXRhLWRpc21pc3M9J21vZGFsJz4mdGltZXM7PC9hPiIgKwogICAgICAgICAgICAgICAgICAiPGgzPiIgKyBsb2NhbGUuaW1hZ2UuaW5zZXJ0ICsgIjwvaDM+IiArCiAgICAgICAgICAgICAgICAiPC9kaXY+IiArCiAgICAgICAgICAgICAgICAiPGRpdiBjbGFzcz0nbW9kYWwtYm9keSc+IiArCiAgICAgICAgICAgICAgICAgICI8aW5wdXQgdmFsdWU9J2h0dHA6Ly8nIGNsYXNzPSdib290c3RyYXAtd3lzaWh0bWw1LWluc2VydC1pbWFnZS11cmwgaW5wdXQteGxhcmdlJz4iICsKICAgICAgICAgICAgICAgICI8L2Rpdj4iICsKICAgICAgICAgICAgICAgICI8ZGl2IGNsYXNzPSdtb2RhbC1mb290ZXInPiIgKwogICAgICAgICAgICAgICAgICAiPGEgaHJlZj0nIycgY2xhc3M9J2J0bicgZGF0YS1kaXNtaXNzPSdtb2RhbCc+IiArIGxvY2FsZS5pbWFnZS5jYW5jZWwgKyAiPC9hPiIgKwogICAgICAgICAgICAgICAgICAiPGEgaHJlZj0nIycgY2xhc3M9J2J0biBidG4tcHJpbWFyeScgZGF0YS1kaXNtaXNzPSdtb2RhbCc+IiArIGxvY2FsZS5pbWFnZS5pbnNlcnQgKyAiPC9hPiIgKwogICAgICAgICAgICAgICAgIjwvZGl2PiIgKwogICAgICAgICAgICAgICI8L2Rpdj4iICsKICAgICAgICAgICAgICAiPGEgY2xhc3M9J2J0biIgKyBzaXplICsgIicgZGF0YS13eXNpaHRtbDUtY29tbWFuZD0naW5zZXJ0SW1hZ2UnIHRpdGxlPSciICsgbG9jYWxlLmltYWdlLmluc2VydCArICInIHRhYmluZGV4PSctMSc+PGkgY2xhc3M9J2ljb24tcGljdHVyZSc+PC9pPjwvYT4iICsKICAgICAgICAgICAgIjwvbGk+IjsKICAgICAgICB9LAoKICAgICAgICAiaHRtbCI6IGZ1bmN0aW9uKGxvY2FsZSwgb3B0aW9ucykgewogICAgICAgICAgICB2YXIgc2l6ZSA9IChvcHRpb25zICYmIG9wdGlvbnMuc2l6ZSkgPyAnIGJ0bi0nK29wdGlvbnMuc2l6ZSA6ICcnOwogICAgICAgICAgICByZXR1cm4gIjxsaT4iICsKICAgICAgICAgICAgICAiPGRpdiBjbGFzcz0nYnRuLWdyb3VwJz4iICsKICAgICAgICAgICAgICAgICI8YSBjbGFzcz0nYnRuIiArIHNpemUgKyAiJyBkYXRhLXd5c2lodG1sNS1hY3Rpb249J2NoYW5nZV92aWV3JyB0aXRsZT0nIiArIGxvY2FsZS5odG1sLmVkaXQgKyAiJyB0YWJpbmRleD0nLTEnPjxpIGNsYXNzPSdpY29uLXBlbmNpbCc+PC9pPjwvYT4iICsKICAgICAgICAgICAgICAiPC9kaXY+IiArCiAgICAgICAgICAgICI8L2xpPiI7CiAgICAgICAgfSwKCiAgICAgICAgImNvbG9yIjogZnVuY3Rpb24obG9jYWxlLCBvcHRpb25zKSB7CiAgICAgICAgICAgIHZhciBzaXplID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5zaXplKSA/ICcgYnRuLScrb3B0aW9ucy5zaXplIDogJyc7CiAgICAgICAgICAgIHJldHVybiAiPGxpIGNsYXNzPSdkcm9wZG93bic+IiArCiAgICAgICAgICAgICAgIjxhIGNsYXNzPSdidG4gZHJvcGRvd24tdG9nZ2xlIiArIHNpemUgKyAiJyBkYXRhLXRvZ2dsZT0nZHJvcGRvd24nIGhyZWY9JyMnIHRhYmluZGV4PSctMSc+IiArCiAgICAgICAgICAgICAgICAiPHNwYW4gY2xhc3M9J2N1cnJlbnQtY29sb3InPiIgKyBsb2NhbGUuY29sb3Vycy5ibGFjayArICI8L3NwYW4+Jm5ic3A7PGIgY2xhc3M9J2NhcmV0Jz48L2I+IiArCiAgICAgICAgICAgICAgIjwvYT4iICsKICAgICAgICAgICAgICAiPHVsIGNsYXNzPSdkcm9wZG93bi1tZW51Jz4iICsKICAgICAgICAgICAgICAgICI8bGk+PGRpdiBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycycgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0nYmxhY2snPjwvZGl2PjxhIGNsYXNzPSd3eXNpaHRtbDUtY29sb3JzLXRpdGxlJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kPSdmb3JlQ29sb3InIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9J2JsYWNrJz4iICsgbG9jYWxlLmNvbG91cnMuYmxhY2sgKyAiPC9hPjwvbGk+IiArCiAgICAgICAgICAgICAgICAiPGxpPjxkaXYgY2xhc3M9J3d5c2lodG1sNS1jb2xvcnMnIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9J3NpbHZlcic+PC9kaXY+PGEgY2xhc3M9J3d5c2lodG1sNS1jb2xvcnMtdGl0bGUnIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9J2ZvcmVDb2xvcicgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0nc2lsdmVyJz4iICsgbG9jYWxlLmNvbG91cnMuc2lsdmVyICsgIjwvYT48L2xpPiIgKwogICAgICAgICAgICAgICAgIjxsaT48ZGl2IGNsYXNzPSd3eXNpaHRtbDUtY29sb3JzJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPSdncmF5Jz48L2Rpdj48YSBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycy10aXRsZScgZGF0YS13eXNpaHRtbDUtY29tbWFuZD0nZm9yZUNvbG9yJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPSdncmF5Jz4iICsgbG9jYWxlLmNvbG91cnMuZ3JheSArICI8L2E+PC9saT4iICsKICAgICAgICAgICAgICAgICI8bGk+PGRpdiBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycycgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0nbWFyb29uJz48L2Rpdj48YSBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycy10aXRsZScgZGF0YS13eXNpaHRtbDUtY29tbWFuZD0nZm9yZUNvbG9yJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPSdtYXJvb24nPiIgKyBsb2NhbGUuY29sb3Vycy5tYXJvb24gKyAiPC9hPjwvbGk+IiArCiAgICAgICAgICAgICAgICAiPGxpPjxkaXYgY2xhc3M9J3d5c2lodG1sNS1jb2xvcnMnIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9J3JlZCc+PC9kaXY+PGEgY2xhc3M9J3d5c2lodG1sNS1jb2xvcnMtdGl0bGUnIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9J2ZvcmVDb2xvcicgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0ncmVkJz4iICsgbG9jYWxlLmNvbG91cnMucmVkICsgIjwvYT48L2xpPiIgKwogICAgICAgICAgICAgICAgIjxsaT48ZGl2IGNsYXNzPSd3eXNpaHRtbDUtY29sb3JzJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPSdwdXJwbGUnPjwvZGl2PjxhIGNsYXNzPSd3eXNpaHRtbDUtY29sb3JzLXRpdGxlJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kPSdmb3JlQ29sb3InIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9J3B1cnBsZSc+IiArIGxvY2FsZS5jb2xvdXJzLnB1cnBsZSArICI8L2E+PC9saT4iICsKICAgICAgICAgICAgICAgICI8bGk+PGRpdiBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycycgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0nZ3JlZW4nPjwvZGl2PjxhIGNsYXNzPSd3eXNpaHRtbDUtY29sb3JzLXRpdGxlJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kPSdmb3JlQ29sb3InIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9J2dyZWVuJz4iICsgbG9jYWxlLmNvbG91cnMuZ3JlZW4gKyAiPC9hPjwvbGk+IiArCiAgICAgICAgICAgICAgICAiPGxpPjxkaXYgY2xhc3M9J3d5c2lodG1sNS1jb2xvcnMnIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9J29saXZlJz48L2Rpdj48YSBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycy10aXRsZScgZGF0YS13eXNpaHRtbDUtY29tbWFuZD0nZm9yZUNvbG9yJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPSdvbGl2ZSc+IiArIGxvY2FsZS5jb2xvdXJzLm9saXZlICsgIjwvYT48L2xpPiIgKwogICAgICAgICAgICAgICAgIjxsaT48ZGl2IGNsYXNzPSd3eXNpaHRtbDUtY29sb3JzJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPSduYXZ5Jz48L2Rpdj48YSBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycy10aXRsZScgZGF0YS13eXNpaHRtbDUtY29tbWFuZD0nZm9yZUNvbG9yJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPSduYXZ5Jz4iICsgbG9jYWxlLmNvbG91cnMubmF2eSArICI8L2E+PC9saT4iICsKICAgICAgICAgICAgICAgICI8bGk+PGRpdiBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycycgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0nYmx1ZSc+PC9kaXY+PGEgY2xhc3M9J3d5c2lodG1sNS1jb2xvcnMtdGl0bGUnIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9J2ZvcmVDb2xvcicgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0nYmx1ZSc+IiArIGxvY2FsZS5jb2xvdXJzLmJsdWUgKyAiPC9hPjwvbGk+IiArCiAgICAgICAgICAgICAgICAiPGxpPjxkaXYgY2xhc3M9J3d5c2lodG1sNS1jb2xvcnMnIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9J29yYW5nZSc+PC9kaXY+PGEgY2xhc3M9J3d5c2lodG1sNS1jb2xvcnMtdGl0bGUnIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9J2ZvcmVDb2xvcicgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0nb3JhbmdlJz4iICsgbG9jYWxlLmNvbG91cnMub3JhbmdlICsgIjwvYT48L2xpPiIgKwogICAgICAgICAgICAgICI8L3VsPiIgKwogICAgICAgICAgICAiPC9saT4iOwogICAgICAgIH0KICAgIH07CgogICAgdmFyIHRlbXBsYXRlcyA9IGZ1bmN0aW9uKGtleSwgbG9jYWxlLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIHRwbFtrZXldKGxvY2FsZSwgb3B0aW9ucyk7CiAgICB9OwoKCiAgICB2YXIgV3lzaWh0bWw1ID0gZnVuY3Rpb24oZWwsIG9wdGlvbnMpIHsKICAgICAgICB0aGlzLmVsID0gZWw7CiAgICAgICAgdmFyIHRvb2xiYXJPcHRzID0gb3B0aW9ucyB8fCBkZWZhdWx0T3B0aW9uczsKICAgICAgICBmb3IodmFyIHQgaW4gdG9vbGJhck9wdHMuY3VzdG9tVGVtcGxhdGVzKSB7CiAgICAgICAgICB0cGxbdF0gPSB0b29sYmFyT3B0cy5jdXN0b21UZW1wbGF0ZXNbdF07CiAgICAgICAgfQogICAgICAgIHRoaXMudG9vbGJhciA9IHRoaXMuY3JlYXRlVG9vbGJhcihlbCwgdG9vbGJhck9wdHMpOwogICAgICAgIHRoaXMuZWRpdG9yID0gIHRoaXMuY3JlYXRlRWRpdG9yKG9wdGlvbnMpOwoKICAgICAgICB3aW5kb3cuZWRpdG9yID0gdGhpcy5lZGl0b3I7CgogICAgICAgICQoJ2lmcmFtZS53eXNpaHRtbDUtc2FuZGJveCcpLmVhY2goZnVuY3Rpb24oaSwgZWwpewogICAgICAgICAgICAkKGVsLmNvbnRlbnRXaW5kb3cpLm9mZignZm9jdXMud3lzaWh0bWw1Jykub24oewogICAgICAgICAgICAgICAgJ2ZvY3VzLnd5c2lodG1sNScgOiBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICQoJ2xpLmRyb3Bkb3duJykucmVtb3ZlQ2xhc3MoJ29wZW4nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICB9OwoKICAgIFd5c2lodG1sNS5wcm90b3R5cGUgPSB7CgogICAgICAgIGNvbnN0cnVjdG9yOiBXeXNpaHRtbDUsCgogICAgICAgIGNyZWF0ZUVkaXRvcjogZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEFkZCB0aGUgdG9vbGJhciB0byBhIGNsb25lIG9mIHRoZSBvcHRpb25zIG9iamVjdCBzbyBtdWx0aXBsZSBpbnN0YW5jZXMKICAgICAgICAgICAgLy8gb2YgdGhlIFdZSVNZV0cgZG9uJ3QgYnJlYWsgYmVjYXVzZSAidG9vbGJhciIgaXMgYWxyZWFkeSBkZWZpbmVkCiAgICAgICAgICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgb3B0aW9ucyk7CiAgICAgICAgICAgIG9wdGlvbnMudG9vbGJhciA9IHRoaXMudG9vbGJhclswXTsKCiAgICAgICAgICAgIHZhciBlZGl0b3IgPSBuZXcgd3lzaS5FZGl0b3IodGhpcy5lbFswXSwgb3B0aW9ucyk7CgogICAgICAgICAgICBpZihvcHRpb25zICYmIG9wdGlvbnMuZXZlbnRzKSB7CiAgICAgICAgICAgICAgICBmb3IodmFyIGV2ZW50TmFtZSBpbiBvcHRpb25zLmV2ZW50cykgewogICAgICAgICAgICAgICAgICAgIGVkaXRvci5vbihldmVudE5hbWUsIG9wdGlvbnMuZXZlbnRzW2V2ZW50TmFtZV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBlZGl0b3I7CiAgICAgICAgfSwKCiAgICAgICAgY3JlYXRlVG9vbGJhcjogZnVuY3Rpb24oZWwsIG9wdGlvbnMpIHsKICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgICAgICB2YXIgdG9vbGJhciA9ICQoIjx1bC8+IiwgewogICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICJ3eXNpaHRtbDUtdG9vbGJhciIsCiAgICAgICAgICAgICAgICAnc3R5bGUnOiAiZGlzcGxheTpub25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdmFyIGN1bHR1cmUgPSBvcHRpb25zLmxvY2FsZSB8fCBkZWZhdWx0T3B0aW9ucy5sb2NhbGUgfHwgImVuIjsKICAgICAgICAgICAgZm9yKHZhciBrZXkgaW4gZGVmYXVsdE9wdGlvbnMpIHsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIGlmKG9wdGlvbnNba2V5XSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYob3B0aW9uc1trZXldID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZGVmYXVsdE9wdGlvbnNba2V5XTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZih2YWx1ZSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgIHRvb2xiYXIuYXBwZW5kKHRlbXBsYXRlcyhrZXksIGxvY2FsZVtjdWx0dXJlXSwgb3B0aW9ucykpOwoKICAgICAgICAgICAgICAgICAgICBpZihrZXkgPT09ICJodG1sIikgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRIdG1sKHRvb2xiYXIpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYoa2V5ID09PSAibGluayIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0SW5zZXJ0TGluayh0b29sYmFyKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmKGtleSA9PT0gImltYWdlIikgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRJbnNlcnRJbWFnZSh0b29sYmFyKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKG9wdGlvbnMudG9vbGJhcikgewogICAgICAgICAgICAgICAgZm9yKGtleSBpbiBvcHRpb25zLnRvb2xiYXIpIHsKICAgICAgICAgICAgICAgICAgICB0b29sYmFyLmFwcGVuZChvcHRpb25zLnRvb2xiYXJba2V5XSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRvb2xiYXIuZmluZCgiYVtkYXRhLXd5c2lodG1sNS1jb21tYW5kPSdmb3JtYXRCbG9jayddIikuY2xpY2soZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDsKICAgICAgICAgICAgICAgIHZhciBlbCA9ICQodGFyZ2V0KTsKICAgICAgICAgICAgICAgIHNlbGYudG9vbGJhci5maW5kKCcuY3VycmVudC1mb250JykudGV4dChlbC5odG1sKCkpOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIHRvb2xiYXIuZmluZCgiYVtkYXRhLXd5c2lodG1sNS1jb21tYW5kPSdmb3JlQ29sb3InXSIpLmNsaWNrKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7CiAgICAgICAgICAgICAgICB2YXIgZWwgPSAkKHRhcmdldCk7CiAgICAgICAgICAgICAgICBzZWxmLnRvb2xiYXIuZmluZCgnLmN1cnJlbnQtY29sb3InKS50ZXh0KGVsLmh0bWwoKSk7CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgdGhpcy5lbC5iZWZvcmUodG9vbGJhcik7CgogICAgICAgICAgICByZXR1cm4gdG9vbGJhcjsKICAgICAgICB9LAoKICAgICAgICBpbml0SHRtbDogZnVuY3Rpb24odG9vbGJhcikgewogICAgICAgICAgICB2YXIgY2hhbmdlVmlld1NlbGVjdG9yID0gImFbZGF0YS13eXNpaHRtbDUtYWN0aW9uPSdjaGFuZ2VfdmlldyddIjsKICAgICAgICAgICAgdG9vbGJhci5maW5kKGNoYW5nZVZpZXdTZWxlY3RvcikuY2xpY2soZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgdG9vbGJhci5maW5kKCdhLmJ0bicpLm5vdChjaGFuZ2VWaWV3U2VsZWN0b3IpLnRvZ2dsZUNsYXNzKCdkaXNhYmxlZCcpOwogICAgICAgICAgICB9KTsKICAgICAgICB9LAoKICAgICAgICBpbml0SW5zZXJ0SW1hZ2U6IGZ1bmN0aW9uKHRvb2xiYXIpIHsKICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgICAgICB2YXIgaW5zZXJ0SW1hZ2VNb2RhbCA9IHRvb2xiYXIuZmluZCgnLmJvb3RzdHJhcC13eXNpaHRtbDUtaW5zZXJ0LWltYWdlLW1vZGFsJyk7CiAgICAgICAgICAgIHZhciB1cmxJbnB1dCA9IGluc2VydEltYWdlTW9kYWwuZmluZCgnLmJvb3RzdHJhcC13eXNpaHRtbDUtaW5zZXJ0LWltYWdlLXVybCcpOwogICAgICAgICAgICB2YXIgaW5zZXJ0QnV0dG9uID0gaW5zZXJ0SW1hZ2VNb2RhbC5maW5kKCdhLmJ0bi1wcmltYXJ5Jyk7CiAgICAgICAgICAgIHZhciBpbml0aWFsVmFsdWUgPSB1cmxJbnB1dC52YWwoKTsKICAgICAgICAgICAgdmFyIGNhcmV0Qm9va21hcms7CgogICAgICAgICAgICB2YXIgaW5zZXJ0SW1hZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciB1cmwgPSB1cmxJbnB1dC52YWwoKTsKICAgICAgICAgICAgICAgIHVybElucHV0LnZhbChpbml0aWFsVmFsdWUpOwogICAgICAgICAgICAgICAgc2VsZi5lZGl0b3IuY3VycmVudFZpZXcuZWxlbWVudC5mb2N1cygpOwogICAgICAgICAgICAgICAgaWYgKGNhcmV0Qm9va21hcmspIHsKICAgICAgICAgICAgICAgICAgc2VsZi5lZGl0b3IuY29tcG9zZXIuc2VsZWN0aW9uLnNldEJvb2ttYXJrKGNhcmV0Qm9va21hcmspOwogICAgICAgICAgICAgICAgICBjYXJldEJvb2ttYXJrID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHNlbGYuZWRpdG9yLmNvbXBvc2VyLmNvbW1hbmRzLmV4ZWMoImluc2VydEltYWdlIiwgdXJsKTsKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIHVybElucHV0LmtleXByZXNzKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIGlmKGUud2hpY2ggPT0gMTMpIHsKICAgICAgICAgICAgICAgICAgICBpbnNlcnRJbWFnZSgpOwogICAgICAgICAgICAgICAgICAgIGluc2VydEltYWdlTW9kYWwubW9kYWwoJ2hpZGUnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBpbnNlcnRCdXR0b24uY2xpY2soaW5zZXJ0SW1hZ2UpOwoKICAgICAgICAgICAgaW5zZXJ0SW1hZ2VNb2RhbC5vbignc2hvd24nLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHVybElucHV0LmZvY3VzKCk7CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgaW5zZXJ0SW1hZ2VNb2RhbC5vbignaGlkZScsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgc2VsZi5lZGl0b3IuY3VycmVudFZpZXcuZWxlbWVudC5mb2N1cygpOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIHRvb2xiYXIuZmluZCgnYVtkYXRhLXd5c2lodG1sNS1jb21tYW5kPWluc2VydEltYWdlXScpLmNsaWNrKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGFjdGl2ZUJ1dHRvbiA9ICQodGhpcykuaGFzQ2xhc3MoInd5c2lodG1sNS1jb21tYW5kLWFjdGl2ZSIpOwoKICAgICAgICAgICAgICAgIGlmICghYWN0aXZlQnV0dG9uKSB7CiAgICAgICAgICAgICAgICAgICAgc2VsZi5lZGl0b3IuY3VycmVudFZpZXcuZWxlbWVudC5mb2N1cyhmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgY2FyZXRCb29rbWFyayA9IHNlbGYuZWRpdG9yLmNvbXBvc2VyLnNlbGVjdGlvbi5nZXRCb29rbWFyaygpOwogICAgICAgICAgICAgICAgICAgIGluc2VydEltYWdlTW9kYWwuYXBwZW5kVG8oJ2JvZHknKS5tb2RhbCgnc2hvdycpOwogICAgICAgICAgICAgICAgICAgIGluc2VydEltYWdlTW9kYWwub24oJ2NsaWNrLmRpc21pc3MubW9kYWwnLCAnW2RhdGEtZGlzbWlzcz0ibW9kYWwiXScsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKCiAgICAgICAgaW5pdEluc2VydExpbms6IGZ1bmN0aW9uKHRvb2xiYXIpIHsKICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgICAgICB2YXIgaW5zZXJ0TGlua01vZGFsID0gdG9vbGJhci5maW5kKCcuYm9vdHN0cmFwLXd5c2lodG1sNS1pbnNlcnQtbGluay1tb2RhbCcpOwogICAgICAgICAgICB2YXIgdXJsSW5wdXQgPSBpbnNlcnRMaW5rTW9kYWwuZmluZCgnLmJvb3RzdHJhcC13eXNpaHRtbDUtaW5zZXJ0LWxpbmstdXJsJyk7CiAgICAgICAgICAgIHZhciBpbnNlcnRCdXR0b24gPSBpbnNlcnRMaW5rTW9kYWwuZmluZCgnYS5idG4tcHJpbWFyeScpOwogICAgICAgICAgICB2YXIgaW5pdGlhbFZhbHVlID0gdXJsSW5wdXQudmFsKCk7CiAgICAgICAgICAgIHZhciBjYXJldEJvb2ttYXJrOwoKICAgICAgICAgICAgdmFyIGluc2VydExpbmsgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciB1cmwgPSB1cmxJbnB1dC52YWwoKTsKICAgICAgICAgICAgICAgIHVybElucHV0LnZhbChpbml0aWFsVmFsdWUpOwogICAgICAgICAgICAgICAgc2VsZi5lZGl0b3IuY3VycmVudFZpZXcuZWxlbWVudC5mb2N1cygpOwogICAgICAgICAgICAgICAgaWYgKGNhcmV0Qm9va21hcmspIHsKICAgICAgICAgICAgICAgICAgc2VsZi5lZGl0b3IuY29tcG9zZXIuc2VsZWN0aW9uLnNldEJvb2ttYXJrKGNhcmV0Qm9va21hcmspOwogICAgICAgICAgICAgICAgICBjYXJldEJvb2ttYXJrID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHNlbGYuZWRpdG9yLmNvbXBvc2VyLmNvbW1hbmRzLmV4ZWMoImNyZWF0ZUxpbmsiLCB7CiAgICAgICAgICAgICAgICAgICAgaHJlZjogdXJsLAogICAgICAgICAgICAgICAgICAgIHRhcmdldDogIl9ibGFuayIsCiAgICAgICAgICAgICAgICAgICAgcmVsOiAibm9mb2xsb3ciCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgdmFyIHByZXNzZWRFbnRlciA9IGZhbHNlOwoKICAgICAgICAgICAgdXJsSW5wdXQua2V5cHJlc3MoZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgaWYoZS53aGljaCA9PSAxMykgewogICAgICAgICAgICAgICAgICAgIGluc2VydExpbmsoKTsKICAgICAgICAgICAgICAgICAgICBpbnNlcnRMaW5rTW9kYWwubW9kYWwoJ2hpZGUnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBpbnNlcnRCdXR0b24uY2xpY2soaW5zZXJ0TGluayk7CgogICAgICAgICAgICBpbnNlcnRMaW5rTW9kYWwub24oJ3Nob3duJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB1cmxJbnB1dC5mb2N1cygpOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIGluc2VydExpbmtNb2RhbC5vbignaGlkZScsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgc2VsZi5lZGl0b3IuY3VycmVudFZpZXcuZWxlbWVudC5mb2N1cygpOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIHRvb2xiYXIuZmluZCgnYVtkYXRhLXd5c2lodG1sNS1jb21tYW5kPWNyZWF0ZUxpbmtdJykuY2xpY2soZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgYWN0aXZlQnV0dG9uID0gJCh0aGlzKS5oYXNDbGFzcygid3lzaWh0bWw1LWNvbW1hbmQtYWN0aXZlIik7CgogICAgICAgICAgICAgICAgaWYgKCFhY3RpdmVCdXR0b24pIHsKICAgICAgICAgICAgICAgICAgICBzZWxmLmVkaXRvci5jdXJyZW50Vmlldy5lbGVtZW50LmZvY3VzKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICBjYXJldEJvb2ttYXJrID0gc2VsZi5lZGl0b3IuY29tcG9zZXIuc2VsZWN0aW9uLmdldEJvb2ttYXJrKCk7CiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGlua01vZGFsLmFwcGVuZFRvKCdib2R5JykubW9kYWwoJ3Nob3cnKTsKICAgICAgICAgICAgICAgICAgICBpbnNlcnRMaW5rTW9kYWwub24oJ2NsaWNrLmRpc21pc3MubW9kYWwnLCAnW2RhdGEtZGlzbWlzcz0ibW9kYWwiXScsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfTsKCiAgICAvLyB0aGVzZSBkZWZpbmUgb3VyIHB1YmxpYyBhcGkKICAgIHZhciBtZXRob2RzID0gewogICAgICAgIHJlc2V0RGVmYXVsdHM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAkLmZuLnd5c2lodG1sNS5kZWZhdWx0T3B0aW9ucyA9ICQuZXh0ZW5kKHRydWUsIHt9LCAkLmZuLnd5c2lodG1sNS5kZWZhdWx0T3B0aW9uc0NhY2hlKTsKICAgICAgICB9LAogICAgICAgIGJ5cGFzc0RlZmF1bHRzOiBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsKICAgICAgICAgICAgICAgICR0aGlzLmRhdGEoJ3d5c2lodG1sNScsIG5ldyBXeXNpaHRtbDUoJHRoaXMsIG9wdGlvbnMpKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBzaGFsbG93RXh0ZW5kOiBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSAkLmV4dGVuZCh7fSwgJC5mbi53eXNpaHRtbDUuZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMgfHwge30pOwogICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgICAgIHJldHVybiBtZXRob2RzLmJ5cGFzc0RlZmF1bHRzLmFwcGx5KHRoYXQsIFtzZXR0aW5nc10pOwogICAgICAgIH0sCiAgICAgICAgZGVlcEV4dGVuZDogZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSAkLmV4dGVuZCh0cnVlLCB7fSwgJC5mbi53eXNpaHRtbDUuZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMgfHwge30pOwogICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgICAgIHJldHVybiBtZXRob2RzLmJ5cGFzc0RlZmF1bHRzLmFwcGx5KHRoYXQsIFtzZXR0aW5nc10pOwogICAgICAgIH0sCiAgICAgICAgaW5pdDogZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgICAgIHJldHVybiBtZXRob2RzLnNoYWxsb3dFeHRlbmQuYXBwbHkodGhhdCwgW29wdGlvbnNdKTsKICAgICAgICB9CiAgICB9OwoKICAgICQuZm4ud3lzaWh0bWw1ID0gZnVuY3Rpb24gKCBtZXRob2QgKSB7CiAgICAgICAgaWYgKCBtZXRob2RzW21ldGhvZF0gKSB7CiAgICAgICAgICAgIHJldHVybiBtZXRob2RzW21ldGhvZF0uYXBwbHkoIHRoaXMsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBhcmd1bWVudHMsIDEgKSk7CiAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIG1ldGhvZCA9PT0gJ29iamVjdCcgfHwgISBtZXRob2QgKSB7CiAgICAgICAgICAgIHJldHVybiBtZXRob2RzLmluaXQuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICQuZXJyb3IoICdNZXRob2QgJyArICBtZXRob2QgKyAnIGRvZXMgbm90IGV4aXN0IG9uIGpRdWVyeS53eXNpaHRtbDUnICk7CiAgICAgICAgfSAgICAKICAgIH07CgogICAgJC5mbi53eXNpaHRtbDUuQ29uc3RydWN0b3IgPSBXeXNpaHRtbDU7CgogICAgdmFyIGRlZmF1bHRPcHRpb25zID0gJC5mbi53eXNpaHRtbDUuZGVmYXVsdE9wdGlvbnMgPSB7CiAgICAgICAgImZvbnQtc3R5bGVzIjogdHJ1ZSwKICAgICAgICAiY29sb3IiOiBmYWxzZSwKICAgICAgICAiZW1waGFzaXMiOiB0cnVlLAogICAgICAgICJsaXN0cyI6IHRydWUsCiAgICAgICAgImh0bWwiOiBmYWxzZSwKICAgICAgICAibGluayI6IHRydWUsCiAgICAgICAgImltYWdlIjogdHJ1ZSwKICAgICAgICBldmVudHM6IHt9LAogICAgICAgIHBhcnNlclJ1bGVzOiB7CiAgICAgICAgICAgIGNsYXNzZXM6IHsKICAgICAgICAgICAgICAgIC8vIChwYXRoX3RvX3Byb2plY3QvbGliL2Nzcy93eXNpd3lnLWNvbG9yLmNzcykKICAgICAgICAgICAgICAgICJ3eXNpd3lnLWNvbG9yLXNpbHZlciIgOiAxLAogICAgICAgICAgICAgICAgInd5c2l3eWctY29sb3ItZ3JheSIgOiAxLAogICAgICAgICAgICAgICAgInd5c2l3eWctY29sb3Itd2hpdGUiIDogMSwKICAgICAgICAgICAgICAgICJ3eXNpd3lnLWNvbG9yLW1hcm9vbiIgOiAxLAogICAgICAgICAgICAgICAgInd5c2l3eWctY29sb3ItcmVkIiA6IDEsCiAgICAgICAgICAgICAgICAid3lzaXd5Zy1jb2xvci1wdXJwbGUiIDogMSwKICAgICAgICAgICAgICAgICJ3eXNpd3lnLWNvbG9yLWZ1Y2hzaWEiIDogMSwKICAgICAgICAgICAgICAgICJ3eXNpd3lnLWNvbG9yLWdyZWVuIiA6IDEsCiAgICAgICAgICAgICAgICAid3lzaXd5Zy1jb2xvci1saW1lIiA6IDEsCiAgICAgICAgICAgICAgICAid3lzaXd5Zy1jb2xvci1vbGl2ZSIgOiAxLAogICAgICAgICAgICAgICAgInd5c2l3eWctY29sb3IteWVsbG93IiA6IDEsCiAgICAgICAgICAgICAgICAid3lzaXd5Zy1jb2xvci1uYXZ5IiA6IDEsCiAgICAgICAgICAgICAgICAid3lzaXd5Zy1jb2xvci1ibHVlIiA6IDEsCiAgICAgICAgICAgICAgICAid3lzaXd5Zy1jb2xvci10ZWFsIiA6IDEsCiAgICAgICAgICAgICAgICAid3lzaXd5Zy1jb2xvci1hcXVhIiA6IDEsCiAgICAgICAgICAgICAgICAid3lzaXd5Zy1jb2xvci1vcmFuZ2UiIDogMQogICAgICAgICAgICB9LAogICAgICAgICAgICB0YWdzOiB7CiAgICAgICAgICAgICAgICAiYiI6ICB7fSwKICAgICAgICAgICAgICAgICJpIjogIHt9LAogICAgICAgICAgICAgICAgImJyIjoge30sCiAgICAgICAgICAgICAgICAib2wiOiB7fSwKICAgICAgICAgICAgICAgICJ1bCI6IHt9LAogICAgICAgICAgICAgICAgImxpIjoge30sCiAgICAgICAgICAgICAgICAiaDEiOiB7fSwKICAgICAgICAgICAgICAgICJoMiI6IHt9LAogICAgICAgICAgICAgICAgImgzIjoge30sCiAgICAgICAgICAgICAgICAiYmxvY2txdW90ZSI6IHt9LAogICAgICAgICAgICAgICAgInUiOiAxLAogICAgICAgICAgICAgICAgImltZyI6IHsKICAgICAgICAgICAgICAgICAgICAiY2hlY2tfYXR0cmlidXRlcyI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoIjogIm51bWJlcnMiLAogICAgICAgICAgICAgICAgICAgICAgICAiYWx0IjogImFsdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzcmMiOiAidXJsIiwKICAgICAgICAgICAgICAgICAgICAgICAgImhlaWdodCI6ICJudW1iZXJzIgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiYSI6ICB7CiAgICAgICAgICAgICAgICAgICAgc2V0X2F0dHJpYnV0ZXM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiAiX2JsYW5rIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVsOiAgICAibm9mb2xsb3ciCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBjaGVja19hdHRyaWJ1dGVzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY6ICAgInVybCIgLy8gaW1wb3J0YW50IHRvIGF2b2lkIFhTUwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAic3BhbiI6IDEsCiAgICAgICAgICAgICAgICAiZGl2IjogMSwKICAgICAgICAgICAgICAgIC8vIHRvIGFsbG93IHNhdmUgYW5kIGVkaXQgZmlsZXMgd2l0aCBjb2RlIHRhZyBoYWNrcwogICAgICAgICAgICAgICAgImNvZGUiOiAxLAogICAgICAgICAgICAgICAgInByZSI6IDEKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgc3R5bGVzaGVldHM6IFsiLi9saWIvY3NzL3d5c2l3eWctY29sb3IuY3NzIl0sIC8vIChwYXRoX3RvX3Byb2plY3QvbGliL2Nzcy93eXNpd3lnLWNvbG9yLmNzcykKICAgICAgICBsb2NhbGU6ICJlbiIKICAgIH07CgogICAgaWYgKHR5cGVvZiAkLmZuLnd5c2lodG1sNS5kZWZhdWx0T3B0aW9uc0NhY2hlID09PSAndW5kZWZpbmVkJykgewogICAgICAgICQuZm4ud3lzaWh0bWw1LmRlZmF1bHRPcHRpb25zQ2FjaGUgPSAkLmV4dGVuZCh0cnVlLCB7fSwgJC5mbi53eXNpaHRtbDUuZGVmYXVsdE9wdGlvbnMpOwogICAgfQoKICAgIHZhciBsb2NhbGUgPSAkLmZuLnd5c2lodG1sNS5sb2NhbGUgPSB7CiAgICAgICAgZW46IHsKICAgICAgICAgICAgZm9udF9zdHlsZXM6IHsKICAgICAgICAgICAgICAgIG5vcm1hbDogIk5vcm1hbCB0ZXh0IiwKICAgICAgICAgICAgICAgIGgxOiAiSGVhZGluZyAxIiwKICAgICAgICAgICAgICAgIGgyOiAiSGVhZGluZyAyIiwKICAgICAgICAgICAgICAgIGgzOiAiSGVhZGluZyAzIgogICAgICAgICAgICB9LAogICAgICAgICAgICBlbXBoYXNpczogewogICAgICAgICAgICAgICAgYm9sZDogIkJvbGQiLAogICAgICAgICAgICAgICAgaXRhbGljOiAiSXRhbGljIiwKICAgICAgICAgICAgICAgIHVuZGVybGluZTogIlVuZGVybGluZSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgbGlzdHM6IHsKICAgICAgICAgICAgICAgIHVub3JkZXJlZDogIlVub3JkZXJlZCBsaXN0IiwKICAgICAgICAgICAgICAgIG9yZGVyZWQ6ICJPcmRlcmVkIGxpc3QiLAogICAgICAgICAgICAgICAgb3V0ZGVudDogIk91dGRlbnQiLAogICAgICAgICAgICAgICAgaW5kZW50OiAiSW5kZW50IgogICAgICAgICAgICB9LAogICAgICAgICAgICBsaW5rOiB7CiAgICAgICAgICAgICAgICBpbnNlcnQ6ICJJbnNlcnQgbGluayIsCiAgICAgICAgICAgICAgICBjYW5jZWw6ICJDYW5jZWwiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGltYWdlOiB7CiAgICAgICAgICAgICAgICBpbnNlcnQ6ICJJbnNlcnQgaW1hZ2UiLAogICAgICAgICAgICAgICAgY2FuY2VsOiAiQ2FuY2VsIgogICAgICAgICAgICB9LAogICAgICAgICAgICBodG1sOiB7CiAgICAgICAgICAgICAgICBlZGl0OiAiRWRpdCBIVE1MIgogICAgICAgICAgICB9LAogICAgICAgICAgICBjb2xvdXJzOiB7CiAgICAgICAgICAgICAgICBibGFjazogIkJsYWNrIiwKICAgICAgICAgICAgICAgIHNpbHZlcjogIlNpbHZlciIsCiAgICAgICAgICAgICAgICBncmF5OiAiR3JleSIsCiAgICAgICAgICAgICAgICBtYXJvb246ICJNYXJvb24iLAogICAgICAgICAgICAgICAgcmVkOiAiUmVkIiwKICAgICAgICAgICAgICAgIHB1cnBsZTogIlB1cnBsZSIsCiAgICAgICAgICAgICAgICBncmVlbjogIkdyZWVuIiwKICAgICAgICAgICAgICAgIG9saXZlOiAiT2xpdmUiLAogICAgICAgICAgICAgICAgbmF2eTogIk5hdnkiLAogICAgICAgICAgICAgICAgYmx1ZTogIkJsdWUiLAogICAgICAgICAgICAgICAgb3JhbmdlOiAiT3JhbmdlIgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCn0od2luZG93LmpRdWVyeSwgd2luZG93Lnd5c2lodG1sNSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/js/external/inputs-ext/wysihtml5/bootstrap-wysihtml5-0.0.2/bootstrap-wysihtml5-0.0.2.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IWZ1bmN0aW9uKCQsd3lzaSl7InVzZSBzdHJpY3QiO3ZhciB0cGw9eyJmb250LXN0eWxlcyI6ZnVuY3Rpb24obG9jYWxlLG9wdGlvbnMpe3ZhciBzaXplPW9wdGlvbnMmJm9wdGlvbnMuc2l6ZT8iIGJ0bi0iK29wdGlvbnMuc2l6ZToiIjtyZXR1cm4iPGxpIGNsYXNzPSdkcm9wZG93bic+IisiPGEgY2xhc3M9J2J0biBkcm9wZG93bi10b2dnbGUiK3NpemUrIicgZGF0YS10b2dnbGU9J2Ryb3Bkb3duJyBocmVmPScjJz4iKyI8aSBjbGFzcz0naWNvbi1mb250Jz48L2k+Jm5ic3A7PHNwYW4gY2xhc3M9J2N1cnJlbnQtZm9udCc+Iitsb2NhbGUuZm9udF9zdHlsZXMubm9ybWFsKyI8L3NwYW4+Jm5ic3A7PGIgY2xhc3M9J2NhcmV0Jz48L2I+IisiPC9hPiIrIjx1bCBjbGFzcz0nZHJvcGRvd24tbWVudSc+IisiPGxpPjxhIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9J2Zvcm1hdEJsb2NrJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPSdkaXYnIHRhYmluZGV4PSctMSc+Iitsb2NhbGUuZm9udF9zdHlsZXMubm9ybWFsKyI8L2E+PC9saT4iKyI8bGk+PGEgZGF0YS13eXNpaHRtbDUtY29tbWFuZD0nZm9ybWF0QmxvY2snIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9J2gxJyB0YWJpbmRleD0nLTEnPiIrbG9jYWxlLmZvbnRfc3R5bGVzLmgxKyI8L2E+PC9saT4iKyI8bGk+PGEgZGF0YS13eXNpaHRtbDUtY29tbWFuZD0nZm9ybWF0QmxvY2snIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9J2gyJyB0YWJpbmRleD0nLTEnPiIrbG9jYWxlLmZvbnRfc3R5bGVzLmgyKyI8L2E+PC9saT4iKyI8bGk+PGEgZGF0YS13eXNpaHRtbDUtY29tbWFuZD0nZm9ybWF0QmxvY2snIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9J2gzJyB0YWJpbmRleD0nLTEnPiIrbG9jYWxlLmZvbnRfc3R5bGVzLmgzKyI8L2E+PC9saT4iKyI8L3VsPiIrIjwvbGk+In0sZW1waGFzaXM6ZnVuY3Rpb24obG9jYWxlLG9wdGlvbnMpe3ZhciBzaXplPW9wdGlvbnMmJm9wdGlvbnMuc2l6ZT8iIGJ0bi0iK29wdGlvbnMuc2l6ZToiIjtyZXR1cm4iPGxpPiIrIjxkaXYgY2xhc3M9J2J0bi1ncm91cCc+IisiPGEgY2xhc3M9J2J0biIrc2l6ZSsiJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kPSdib2xkJyB0aXRsZT0nQ1RSTCtCJyB0YWJpbmRleD0nLTEnPiIrbG9jYWxlLmVtcGhhc2lzLmJvbGQrIjwvYT4iKyI8YSBjbGFzcz0nYnRuIitzaXplKyInIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9J2l0YWxpYycgdGl0bGU9J0NUUkwrSScgdGFiaW5kZXg9Jy0xJz4iK2xvY2FsZS5lbXBoYXNpcy5pdGFsaWMrIjwvYT4iKyI8YSBjbGFzcz0nYnRuIitzaXplKyInIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9J3VuZGVybGluZScgdGl0bGU9J0NUUkwrVScgdGFiaW5kZXg9Jy0xJz4iK2xvY2FsZS5lbXBoYXNpcy51bmRlcmxpbmUrIjwvYT4iKyI8L2Rpdj4iKyI8L2xpPiJ9LGxpc3RzOmZ1bmN0aW9uKGxvY2FsZSxvcHRpb25zKXt2YXIgc2l6ZT1vcHRpb25zJiZvcHRpb25zLnNpemU/IiBidG4tIitvcHRpb25zLnNpemU6IiI7cmV0dXJuIjxsaT4iKyI8ZGl2IGNsYXNzPSdidG4tZ3JvdXAnPiIrIjxhIGNsYXNzPSdidG4iK3NpemUrIicgZGF0YS13eXNpaHRtbDUtY29tbWFuZD0naW5zZXJ0VW5vcmRlcmVkTGlzdCcgdGl0bGU9JyIrbG9jYWxlLmxpc3RzLnVub3JkZXJlZCsiJyB0YWJpbmRleD0nLTEnPjxpIGNsYXNzPSdpY29uLWxpc3QnPjwvaT48L2E+IisiPGEgY2xhc3M9J2J0biIrc2l6ZSsiJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kPSdpbnNlcnRPcmRlcmVkTGlzdCcgdGl0bGU9JyIrbG9jYWxlLmxpc3RzLm9yZGVyZWQrIicgdGFiaW5kZXg9Jy0xJz48aSBjbGFzcz0naWNvbi10aC1saXN0Jz48L2k+PC9hPiIrIjxhIGNsYXNzPSdidG4iK3NpemUrIicgZGF0YS13eXNpaHRtbDUtY29tbWFuZD0nT3V0ZGVudCcgdGl0bGU9JyIrbG9jYWxlLmxpc3RzLm91dGRlbnQrIicgdGFiaW5kZXg9Jy0xJz48aSBjbGFzcz0naWNvbi1pbmRlbnQtcmlnaHQnPjwvaT48L2E+IisiPGEgY2xhc3M9J2J0biIrc2l6ZSsiJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kPSdJbmRlbnQnIHRpdGxlPSciK2xvY2FsZS5saXN0cy5pbmRlbnQrIicgdGFiaW5kZXg9Jy0xJz48aSBjbGFzcz0naWNvbi1pbmRlbnQtbGVmdCc+PC9pPjwvYT4iKyI8L2Rpdj4iKyI8L2xpPiJ9LGxpbms6ZnVuY3Rpb24obG9jYWxlLG9wdGlvbnMpe3ZhciBzaXplPW9wdGlvbnMmJm9wdGlvbnMuc2l6ZT8iIGJ0bi0iK29wdGlvbnMuc2l6ZToiIjtyZXR1cm4iPGxpPiIrIjxkaXYgY2xhc3M9J2Jvb3RzdHJhcC13eXNpaHRtbDUtaW5zZXJ0LWxpbmstbW9kYWwgbW9kYWwgaGlkZSBmYWRlJz4iKyI8ZGl2IGNsYXNzPSdtb2RhbC1oZWFkZXInPiIrIjxhIGNsYXNzPSdjbG9zZScgZGF0YS1kaXNtaXNzPSdtb2RhbCc+JnRpbWVzOzwvYT4iKyI8aDM+Iitsb2NhbGUubGluay5pbnNlcnQrIjwvaDM+IisiPC9kaXY+IisiPGRpdiBjbGFzcz0nbW9kYWwtYm9keSc+IisiPGlucHV0IHZhbHVlPSdodHRwOi8vJyBjbGFzcz0nYm9vdHN0cmFwLXd5c2lodG1sNS1pbnNlcnQtbGluay11cmwgaW5wdXQteGxhcmdlJz4iKyI8L2Rpdj4iKyI8ZGl2IGNsYXNzPSdtb2RhbC1mb290ZXInPiIrIjxhIGhyZWY9JyMnIGNsYXNzPSdidG4nIGRhdGEtZGlzbWlzcz0nbW9kYWwnPiIrbG9jYWxlLmxpbmsuY2FuY2VsKyI8L2E+IisiPGEgaHJlZj0nIycgY2xhc3M9J2J0biBidG4tcHJpbWFyeScgZGF0YS1kaXNtaXNzPSdtb2RhbCc+Iitsb2NhbGUubGluay5pbnNlcnQrIjwvYT4iKyI8L2Rpdj4iKyI8L2Rpdj4iKyI8YSBjbGFzcz0nYnRuIitzaXplKyInIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9J2NyZWF0ZUxpbmsnIHRpdGxlPSciK2xvY2FsZS5saW5rLmluc2VydCsiJyB0YWJpbmRleD0nLTEnPjxpIGNsYXNzPSdpY29uLXNoYXJlJz48L2k+PC9hPiIrIjwvbGk+In0saW1hZ2U6ZnVuY3Rpb24obG9jYWxlLG9wdGlvbnMpe3ZhciBzaXplPW9wdGlvbnMmJm9wdGlvbnMuc2l6ZT8iIGJ0bi0iK29wdGlvbnMuc2l6ZToiIjtyZXR1cm4iPGxpPiIrIjxkaXYgY2xhc3M9J2Jvb3RzdHJhcC13eXNpaHRtbDUtaW5zZXJ0LWltYWdlLW1vZGFsIG1vZGFsIGhpZGUgZmFkZSc+IisiPGRpdiBjbGFzcz0nbW9kYWwtaGVhZGVyJz4iKyI8YSBjbGFzcz0nY2xvc2UnIGRhdGEtZGlzbWlzcz0nbW9kYWwnPiZ0aW1lczs8L2E+IisiPGgzPiIrbG9jYWxlLmltYWdlLmluc2VydCsiPC9oMz4iKyI8L2Rpdj4iKyI8ZGl2IGNsYXNzPSdtb2RhbC1ib2R5Jz4iKyI8aW5wdXQgdmFsdWU9J2h0dHA6Ly8nIGNsYXNzPSdib290c3RyYXAtd3lzaWh0bWw1LWluc2VydC1pbWFnZS11cmwgaW5wdXQteGxhcmdlJz4iKyI8L2Rpdj4iKyI8ZGl2IGNsYXNzPSdtb2RhbC1mb290ZXInPiIrIjxhIGhyZWY9JyMnIGNsYXNzPSdidG4nIGRhdGEtZGlzbWlzcz0nbW9kYWwnPiIrbG9jYWxlLmltYWdlLmNhbmNlbCsiPC9hPiIrIjxhIGhyZWY9JyMnIGNsYXNzPSdidG4gYnRuLXByaW1hcnknIGRhdGEtZGlzbWlzcz0nbW9kYWwnPiIrbG9jYWxlLmltYWdlLmluc2VydCsiPC9hPiIrIjwvZGl2PiIrIjwvZGl2PiIrIjxhIGNsYXNzPSdidG4iK3NpemUrIicgZGF0YS13eXNpaHRtbDUtY29tbWFuZD0naW5zZXJ0SW1hZ2UnIHRpdGxlPSciK2xvY2FsZS5pbWFnZS5pbnNlcnQrIicgdGFiaW5kZXg9Jy0xJz48aSBjbGFzcz0naWNvbi1waWN0dXJlJz48L2k+PC9hPiIrIjwvbGk+In0saHRtbDpmdW5jdGlvbihsb2NhbGUsb3B0aW9ucyl7dmFyIHNpemU9b3B0aW9ucyYmb3B0aW9ucy5zaXplPyIgYnRuLSIrb3B0aW9ucy5zaXplOiIiO3JldHVybiI8bGk+IisiPGRpdiBjbGFzcz0nYnRuLWdyb3VwJz4iKyI8YSBjbGFzcz0nYnRuIitzaXplKyInIGRhdGEtd3lzaWh0bWw1LWFjdGlvbj0nY2hhbmdlX3ZpZXcnIHRpdGxlPSciK2xvY2FsZS5odG1sLmVkaXQrIicgdGFiaW5kZXg9Jy0xJz48aSBjbGFzcz0naWNvbi1wZW5jaWwnPjwvaT48L2E+IisiPC9kaXY+IisiPC9saT4ifSxjb2xvcjpmdW5jdGlvbihsb2NhbGUsb3B0aW9ucyl7dmFyIHNpemU9b3B0aW9ucyYmb3B0aW9ucy5zaXplPyIgYnRuLSIrb3B0aW9ucy5zaXplOiIiO3JldHVybiI8bGkgY2xhc3M9J2Ryb3Bkb3duJz4iKyI8YSBjbGFzcz0nYnRuIGRyb3Bkb3duLXRvZ2dsZSIrc2l6ZSsiJyBkYXRhLXRvZ2dsZT0nZHJvcGRvd24nIGhyZWY9JyMnIHRhYmluZGV4PSctMSc+IisiPHNwYW4gY2xhc3M9J2N1cnJlbnQtY29sb3InPiIrbG9jYWxlLmNvbG91cnMuYmxhY2srIjwvc3Bhbj4mbmJzcDs8YiBjbGFzcz0nY2FyZXQnPjwvYj4iKyI8L2E+IisiPHVsIGNsYXNzPSdkcm9wZG93bi1tZW51Jz4iKyI8bGk+PGRpdiBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycycgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0nYmxhY2snPjwvZGl2PjxhIGNsYXNzPSd3eXNpaHRtbDUtY29sb3JzLXRpdGxlJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kPSdmb3JlQ29sb3InIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9J2JsYWNrJz4iK2xvY2FsZS5jb2xvdXJzLmJsYWNrKyI8L2E+PC9saT4iKyI8bGk+PGRpdiBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycycgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0nc2lsdmVyJz48L2Rpdj48YSBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycy10aXRsZScgZGF0YS13eXNpaHRtbDUtY29tbWFuZD0nZm9yZUNvbG9yJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPSdzaWx2ZXInPiIrbG9jYWxlLmNvbG91cnMuc2lsdmVyKyI8L2E+PC9saT4iKyI8bGk+PGRpdiBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycycgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0nZ3JheSc+PC9kaXY+PGEgY2xhc3M9J3d5c2lodG1sNS1jb2xvcnMtdGl0bGUnIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9J2ZvcmVDb2xvcicgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0nZ3JheSc+Iitsb2NhbGUuY29sb3Vycy5ncmF5KyI8L2E+PC9saT4iKyI8bGk+PGRpdiBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycycgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0nbWFyb29uJz48L2Rpdj48YSBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycy10aXRsZScgZGF0YS13eXNpaHRtbDUtY29tbWFuZD0nZm9yZUNvbG9yJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPSdtYXJvb24nPiIrbG9jYWxlLmNvbG91cnMubWFyb29uKyI8L2E+PC9saT4iKyI8bGk+PGRpdiBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycycgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0ncmVkJz48L2Rpdj48YSBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycy10aXRsZScgZGF0YS13eXNpaHRtbDUtY29tbWFuZD0nZm9yZUNvbG9yJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPSdyZWQnPiIrbG9jYWxlLmNvbG91cnMucmVkKyI8L2E+PC9saT4iKyI8bGk+PGRpdiBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycycgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0ncHVycGxlJz48L2Rpdj48YSBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycy10aXRsZScgZGF0YS13eXNpaHRtbDUtY29tbWFuZD0nZm9yZUNvbG9yJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPSdwdXJwbGUnPiIrbG9jYWxlLmNvbG91cnMucHVycGxlKyI8L2E+PC9saT4iKyI8bGk+PGRpdiBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycycgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0nZ3JlZW4nPjwvZGl2PjxhIGNsYXNzPSd3eXNpaHRtbDUtY29sb3JzLXRpdGxlJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kPSdmb3JlQ29sb3InIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9J2dyZWVuJz4iK2xvY2FsZS5jb2xvdXJzLmdyZWVuKyI8L2E+PC9saT4iKyI8bGk+PGRpdiBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycycgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0nb2xpdmUnPjwvZGl2PjxhIGNsYXNzPSd3eXNpaHRtbDUtY29sb3JzLXRpdGxlJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kPSdmb3JlQ29sb3InIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWU9J29saXZlJz4iK2xvY2FsZS5jb2xvdXJzLm9saXZlKyI8L2E+PC9saT4iKyI8bGk+PGRpdiBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycycgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0nbmF2eSc+PC9kaXY+PGEgY2xhc3M9J3d5c2lodG1sNS1jb2xvcnMtdGl0bGUnIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9J2ZvcmVDb2xvcicgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0nbmF2eSc+Iitsb2NhbGUuY29sb3Vycy5uYXZ5KyI8L2E+PC9saT4iKyI8bGk+PGRpdiBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycycgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0nYmx1ZSc+PC9kaXY+PGEgY2xhc3M9J3d5c2lodG1sNS1jb2xvcnMtdGl0bGUnIGRhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9J2ZvcmVDb2xvcicgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0nYmx1ZSc+Iitsb2NhbGUuY29sb3Vycy5ibHVlKyI8L2E+PC9saT4iKyI8bGk+PGRpdiBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycycgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0nb3JhbmdlJz48L2Rpdj48YSBjbGFzcz0nd3lzaWh0bWw1LWNvbG9ycy10aXRsZScgZGF0YS13eXNpaHRtbDUtY29tbWFuZD0nZm9yZUNvbG9yJyBkYXRhLXd5c2lodG1sNS1jb21tYW5kLXZhbHVlPSdvcmFuZ2UnPiIrbG9jYWxlLmNvbG91cnMub3JhbmdlKyI8L2E+PC9saT4iKyI8L3VsPiIrIjwvbGk+In19O3ZhciB0ZW1wbGF0ZXM9ZnVuY3Rpb24oa2V5LGxvY2FsZSxvcHRpb25zKXtyZXR1cm4gdHBsW2tleV0obG9jYWxlLG9wdGlvbnMpfTt2YXIgV3lzaWh0bWw1PWZ1bmN0aW9uKGVsLG9wdGlvbnMpe3RoaXMuZWw9ZWw7dmFyIHRvb2xiYXJPcHRzPW9wdGlvbnN8fGRlZmF1bHRPcHRpb25zO2Zvcih2YXIgdCBpbiB0b29sYmFyT3B0cy5jdXN0b21UZW1wbGF0ZXMpe3RwbFt0XT10b29sYmFyT3B0cy5jdXN0b21UZW1wbGF0ZXNbdF19dGhpcy50b29sYmFyPXRoaXMuY3JlYXRlVG9vbGJhcihlbCx0b29sYmFyT3B0cyk7dGhpcy5lZGl0b3I9dGhpcy5jcmVhdGVFZGl0b3Iob3B0aW9ucyk7d2luZG93LmVkaXRvcj10aGlzLmVkaXRvcjskKCJpZnJhbWUud3lzaWh0bWw1LXNhbmRib3giKS5lYWNoKGZ1bmN0aW9uKGksZWwpeyQoZWwuY29udGVudFdpbmRvdykub2ZmKCJmb2N1cy53eXNpaHRtbDUiKS5vbih7ImZvY3VzLnd5c2lodG1sNSI6ZnVuY3Rpb24oKXskKCJsaS5kcm9wZG93biIpLnJlbW92ZUNsYXNzKCJvcGVuIil9fSl9KX07V3lzaWh0bWw1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6V3lzaWh0bWw1LGNyZWF0ZUVkaXRvcjpmdW5jdGlvbihvcHRpb25zKXtvcHRpb25zPW9wdGlvbnN8fHt9O29wdGlvbnM9JC5leHRlbmQodHJ1ZSx7fSxvcHRpb25zKTtvcHRpb25zLnRvb2xiYXI9dGhpcy50b29sYmFyWzBdO3ZhciBlZGl0b3I9bmV3IHd5c2kuRWRpdG9yKHRoaXMuZWxbMF0sb3B0aW9ucyk7aWYob3B0aW9ucyYmb3B0aW9ucy5ldmVudHMpe2Zvcih2YXIgZXZlbnROYW1lIGluIG9wdGlvbnMuZXZlbnRzKXtlZGl0b3Iub24oZXZlbnROYW1lLG9wdGlvbnMuZXZlbnRzW2V2ZW50TmFtZV0pfX1yZXR1cm4gZWRpdG9yfSxjcmVhdGVUb29sYmFyOmZ1bmN0aW9uKGVsLG9wdGlvbnMpe3ZhciBzZWxmPXRoaXM7dmFyIHRvb2xiYXI9JCgiPHVsLz4iLHsiY2xhc3MiOiJ3eXNpaHRtbDUtdG9vbGJhciIsc3R5bGU6ImRpc3BsYXk6bm9uZSJ9KTt2YXIgY3VsdHVyZT1vcHRpb25zLmxvY2FsZXx8ZGVmYXVsdE9wdGlvbnMubG9jYWxlfHwiZW4iO2Zvcih2YXIga2V5IGluIGRlZmF1bHRPcHRpb25zKXt2YXIgdmFsdWU9ZmFsc2U7aWYob3B0aW9uc1trZXldIT09dW5kZWZpbmVkKXtpZihvcHRpb25zW2tleV09PT10cnVlKXt2YWx1ZT10cnVlfX1lbHNle3ZhbHVlPWRlZmF1bHRPcHRpb25zW2tleV19aWYodmFsdWU9PT10cnVlKXt0b29sYmFyLmFwcGVuZCh0ZW1wbGF0ZXMoa2V5LGxvY2FsZVtjdWx0dXJlXSxvcHRpb25zKSk7aWYoa2V5PT09Imh0bWwiKXt0aGlzLmluaXRIdG1sKHRvb2xiYXIpfWlmKGtleT09PSJsaW5rIil7dGhpcy5pbml0SW5zZXJ0TGluayh0b29sYmFyKX1pZihrZXk9PT0iaW1hZ2UiKXt0aGlzLmluaXRJbnNlcnRJbWFnZSh0b29sYmFyKX19fWlmKG9wdGlvbnMudG9vbGJhcil7Zm9yKGtleSBpbiBvcHRpb25zLnRvb2xiYXIpe3Rvb2xiYXIuYXBwZW5kKG9wdGlvbnMudG9vbGJhcltrZXldKX19dG9vbGJhci5maW5kKCJhW2RhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9J2Zvcm1hdEJsb2NrJ10iKS5jbGljayhmdW5jdGlvbihlKXt2YXIgdGFyZ2V0PWUudGFyZ2V0fHxlLnNyY0VsZW1lbnQ7dmFyIGVsPSQodGFyZ2V0KTtzZWxmLnRvb2xiYXIuZmluZCgiLmN1cnJlbnQtZm9udCIpLnRleHQoZWwuaHRtbCgpKX0pO3Rvb2xiYXIuZmluZCgiYVtkYXRhLXd5c2lodG1sNS1jb21tYW5kPSdmb3JlQ29sb3InXSIpLmNsaWNrKGZ1bmN0aW9uKGUpe3ZhciB0YXJnZXQ9ZS50YXJnZXR8fGUuc3JjRWxlbWVudDt2YXIgZWw9JCh0YXJnZXQpO3NlbGYudG9vbGJhci5maW5kKCIuY3VycmVudC1jb2xvciIpLnRleHQoZWwuaHRtbCgpKX0pO3RoaXMuZWwuYmVmb3JlKHRvb2xiYXIpO3JldHVybiB0b29sYmFyfSxpbml0SHRtbDpmdW5jdGlvbih0b29sYmFyKXt2YXIgY2hhbmdlVmlld1NlbGVjdG9yPSJhW2RhdGEtd3lzaWh0bWw1LWFjdGlvbj0nY2hhbmdlX3ZpZXcnXSI7dG9vbGJhci5maW5kKGNoYW5nZVZpZXdTZWxlY3RvcikuY2xpY2soZnVuY3Rpb24oZSl7dG9vbGJhci5maW5kKCJhLmJ0biIpLm5vdChjaGFuZ2VWaWV3U2VsZWN0b3IpLnRvZ2dsZUNsYXNzKCJkaXNhYmxlZCIpfSl9LGluaXRJbnNlcnRJbWFnZTpmdW5jdGlvbih0b29sYmFyKXt2YXIgc2VsZj10aGlzO3ZhciBpbnNlcnRJbWFnZU1vZGFsPXRvb2xiYXIuZmluZCgiLmJvb3RzdHJhcC13eXNpaHRtbDUtaW5zZXJ0LWltYWdlLW1vZGFsIik7dmFyIHVybElucHV0PWluc2VydEltYWdlTW9kYWwuZmluZCgiLmJvb3RzdHJhcC13eXNpaHRtbDUtaW5zZXJ0LWltYWdlLXVybCIpO3ZhciBpbnNlcnRCdXR0b249aW5zZXJ0SW1hZ2VNb2RhbC5maW5kKCJhLmJ0bi1wcmltYXJ5Iik7dmFyIGluaXRpYWxWYWx1ZT11cmxJbnB1dC52YWwoKTt2YXIgY2FyZXRCb29rbWFyazt2YXIgaW5zZXJ0SW1hZ2U9ZnVuY3Rpb24oKXt2YXIgdXJsPXVybElucHV0LnZhbCgpO3VybElucHV0LnZhbChpbml0aWFsVmFsdWUpO3NlbGYuZWRpdG9yLmN1cnJlbnRWaWV3LmVsZW1lbnQuZm9jdXMoKTtpZihjYXJldEJvb2ttYXJrKXtzZWxmLmVkaXRvci5jb21wb3Nlci5zZWxlY3Rpb24uc2V0Qm9va21hcmsoY2FyZXRCb29rbWFyayk7Y2FyZXRCb29rbWFyaz1udWxsfXNlbGYuZWRpdG9yLmNvbXBvc2VyLmNvbW1hbmRzLmV4ZWMoImluc2VydEltYWdlIix1cmwpfTt1cmxJbnB1dC5rZXlwcmVzcyhmdW5jdGlvbihlKXtpZihlLndoaWNoPT0xMyl7aW5zZXJ0SW1hZ2UoKTtpbnNlcnRJbWFnZU1vZGFsLm1vZGFsKCJoaWRlIil9fSk7aW5zZXJ0QnV0dG9uLmNsaWNrKGluc2VydEltYWdlKTtpbnNlcnRJbWFnZU1vZGFsLm9uKCJzaG93biIsZnVuY3Rpb24oKXt1cmxJbnB1dC5mb2N1cygpfSk7aW5zZXJ0SW1hZ2VNb2RhbC5vbigiaGlkZSIsZnVuY3Rpb24oKXtzZWxmLmVkaXRvci5jdXJyZW50Vmlldy5lbGVtZW50LmZvY3VzKCl9KTt0b29sYmFyLmZpbmQoImFbZGF0YS13eXNpaHRtbDUtY29tbWFuZD1pbnNlcnRJbWFnZV0iKS5jbGljayhmdW5jdGlvbigpe3ZhciBhY3RpdmVCdXR0b249JCh0aGlzKS5oYXNDbGFzcygid3lzaWh0bWw1LWNvbW1hbmQtYWN0aXZlIik7aWYoIWFjdGl2ZUJ1dHRvbil7c2VsZi5lZGl0b3IuY3VycmVudFZpZXcuZWxlbWVudC5mb2N1cyhmYWxzZSk7Y2FyZXRCb29rbWFyaz1zZWxmLmVkaXRvci5jb21wb3Nlci5zZWxlY3Rpb24uZ2V0Qm9va21hcmsoKTtpbnNlcnRJbWFnZU1vZGFsLmFwcGVuZFRvKCJib2R5IikubW9kYWwoInNob3ciKTtpbnNlcnRJbWFnZU1vZGFsLm9uKCJjbGljay5kaXNtaXNzLm1vZGFsIiwnW2RhdGEtZGlzbWlzcz0ibW9kYWwiXScsZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX0pO3JldHVybiBmYWxzZX1lbHNle3JldHVybiB0cnVlfX0pfSxpbml0SW5zZXJ0TGluazpmdW5jdGlvbih0b29sYmFyKXt2YXIgc2VsZj10aGlzO3ZhciBpbnNlcnRMaW5rTW9kYWw9dG9vbGJhci5maW5kKCIuYm9vdHN0cmFwLXd5c2lodG1sNS1pbnNlcnQtbGluay1tb2RhbCIpO3ZhciB1cmxJbnB1dD1pbnNlcnRMaW5rTW9kYWwuZmluZCgiLmJvb3RzdHJhcC13eXNpaHRtbDUtaW5zZXJ0LWxpbmstdXJsIik7dmFyIGluc2VydEJ1dHRvbj1pbnNlcnRMaW5rTW9kYWwuZmluZCgiYS5idG4tcHJpbWFyeSIpO3ZhciBpbml0aWFsVmFsdWU9dXJsSW5wdXQudmFsKCk7dmFyIGNhcmV0Qm9va21hcms7dmFyIGluc2VydExpbms9ZnVuY3Rpb24oKXt2YXIgdXJsPXVybElucHV0LnZhbCgpO3VybElucHV0LnZhbChpbml0aWFsVmFsdWUpO3NlbGYuZWRpdG9yLmN1cnJlbnRWaWV3LmVsZW1lbnQuZm9jdXMoKTtpZihjYXJldEJvb2ttYXJrKXtzZWxmLmVkaXRvci5jb21wb3Nlci5zZWxlY3Rpb24uc2V0Qm9va21hcmsoY2FyZXRCb29rbWFyayk7Y2FyZXRCb29rbWFyaz1udWxsfXNlbGYuZWRpdG9yLmNvbXBvc2VyLmNvbW1hbmRzLmV4ZWMoImNyZWF0ZUxpbmsiLHtocmVmOnVybCx0YXJnZXQ6Il9ibGFuayIscmVsOiJub2ZvbGxvdyJ9KX07dmFyIHByZXNzZWRFbnRlcj1mYWxzZTt1cmxJbnB1dC5rZXlwcmVzcyhmdW5jdGlvbihlKXtpZihlLndoaWNoPT0xMyl7aW5zZXJ0TGluaygpO2luc2VydExpbmtNb2RhbC5tb2RhbCgiaGlkZSIpfX0pO2luc2VydEJ1dHRvbi5jbGljayhpbnNlcnRMaW5rKTtpbnNlcnRMaW5rTW9kYWwub24oInNob3duIixmdW5jdGlvbigpe3VybElucHV0LmZvY3VzKCl9KTtpbnNlcnRMaW5rTW9kYWwub24oImhpZGUiLGZ1bmN0aW9uKCl7c2VsZi5lZGl0b3IuY3VycmVudFZpZXcuZWxlbWVudC5mb2N1cygpfSk7dG9vbGJhci5maW5kKCJhW2RhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9Y3JlYXRlTGlua10iKS5jbGljayhmdW5jdGlvbigpe3ZhciBhY3RpdmVCdXR0b249JCh0aGlzKS5oYXNDbGFzcygid3lzaWh0bWw1LWNvbW1hbmQtYWN0aXZlIik7aWYoIWFjdGl2ZUJ1dHRvbil7c2VsZi5lZGl0b3IuY3VycmVudFZpZXcuZWxlbWVudC5mb2N1cyhmYWxzZSk7Y2FyZXRCb29rbWFyaz1zZWxmLmVkaXRvci5jb21wb3Nlci5zZWxlY3Rpb24uZ2V0Qm9va21hcmsoKTtpbnNlcnRMaW5rTW9kYWwuYXBwZW5kVG8oImJvZHkiKS5tb2RhbCgic2hvdyIpO2luc2VydExpbmtNb2RhbC5vbigiY2xpY2suZGlzbWlzcy5tb2RhbCIsJ1tkYXRhLWRpc21pc3M9Im1vZGFsIl0nLGZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCl9KTtyZXR1cm4gZmFsc2V9ZWxzZXtyZXR1cm4gdHJ1ZX19KX19O3ZhciBtZXRob2RzPXtyZXNldERlZmF1bHRzOmZ1bmN0aW9uKCl7JC5mbi53eXNpaHRtbDUuZGVmYXVsdE9wdGlvbnM9JC5leHRlbmQodHJ1ZSx7fSwkLmZuLnd5c2lodG1sNS5kZWZhdWx0T3B0aW9uc0NhY2hlKX0sYnlwYXNzRGVmYXVsdHM6ZnVuY3Rpb24ob3B0aW9ucyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciAkdGhpcz0kKHRoaXMpOyR0aGlzLmRhdGEoInd5c2lodG1sNSIsbmV3IFd5c2lodG1sNSgkdGhpcyxvcHRpb25zKSl9KX0sc2hhbGxvd0V4dGVuZDpmdW5jdGlvbihvcHRpb25zKXt2YXIgc2V0dGluZ3M9JC5leHRlbmQoe30sJC5mbi53eXNpaHRtbDUuZGVmYXVsdE9wdGlvbnMsb3B0aW9uc3x8e30pO3ZhciB0aGF0PXRoaXM7cmV0dXJuIG1ldGhvZHMuYnlwYXNzRGVmYXVsdHMuYXBwbHkodGhhdCxbc2V0dGluZ3NdKX0sZGVlcEV4dGVuZDpmdW5jdGlvbihvcHRpb25zKXt2YXIgc2V0dGluZ3M9JC5leHRlbmQodHJ1ZSx7fSwkLmZuLnd5c2lodG1sNS5kZWZhdWx0T3B0aW9ucyxvcHRpb25zfHx7fSk7dmFyIHRoYXQ9dGhpcztyZXR1cm4gbWV0aG9kcy5ieXBhc3NEZWZhdWx0cy5hcHBseSh0aGF0LFtzZXR0aW5nc10pfSxpbml0OmZ1bmN0aW9uKG9wdGlvbnMpe3ZhciB0aGF0PXRoaXM7cmV0dXJuIG1ldGhvZHMuc2hhbGxvd0V4dGVuZC5hcHBseSh0aGF0LFtvcHRpb25zXSl9fTskLmZuLnd5c2lodG1sNT1mdW5jdGlvbihtZXRob2Qpe2lmKG1ldGhvZHNbbWV0aG9kXSl7cmV0dXJuIG1ldGhvZHNbbWV0aG9kXS5hcHBseSh0aGlzLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSl9ZWxzZSBpZih0eXBlb2YgbWV0aG9kPT09Im9iamVjdCJ8fCFtZXRob2Qpe3JldHVybiBtZXRob2RzLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWVsc2V7JC5lcnJvcigiTWV0aG9kICIrbWV0aG9kKyIgZG9lcyBub3QgZXhpc3Qgb24galF1ZXJ5Lnd5c2lodG1sNSIpfX07JC5mbi53eXNpaHRtbDUuQ29uc3RydWN0b3I9V3lzaWh0bWw1O3ZhciBkZWZhdWx0T3B0aW9ucz0kLmZuLnd5c2lodG1sNS5kZWZhdWx0T3B0aW9ucz17ImZvbnQtc3R5bGVzIjp0cnVlLGNvbG9yOmZhbHNlLGVtcGhhc2lzOnRydWUsbGlzdHM6dHJ1ZSxodG1sOmZhbHNlLGxpbms6dHJ1ZSxpbWFnZTp0cnVlLGV2ZW50czp7fSxwYXJzZXJSdWxlczp7Y2xhc3Nlczp7Ind5c2l3eWctY29sb3Itc2lsdmVyIjoxLCJ3eXNpd3lnLWNvbG9yLWdyYXkiOjEsInd5c2l3eWctY29sb3Itd2hpdGUiOjEsInd5c2l3eWctY29sb3ItbWFyb29uIjoxLCJ3eXNpd3lnLWNvbG9yLXJlZCI6MSwid3lzaXd5Zy1jb2xvci1wdXJwbGUiOjEsInd5c2l3eWctY29sb3ItZnVjaHNpYSI6MSwid3lzaXd5Zy1jb2xvci1ncmVlbiI6MSwid3lzaXd5Zy1jb2xvci1saW1lIjoxLCJ3eXNpd3lnLWNvbG9yLW9saXZlIjoxLCJ3eXNpd3lnLWNvbG9yLXllbGxvdyI6MSwid3lzaXd5Zy1jb2xvci1uYXZ5IjoxLCJ3eXNpd3lnLWNvbG9yLWJsdWUiOjEsInd5c2l3eWctY29sb3ItdGVhbCI6MSwid3lzaXd5Zy1jb2xvci1hcXVhIjoxLCJ3eXNpd3lnLWNvbG9yLW9yYW5nZSI6MX0sdGFnczp7Yjp7fSxpOnt9LGJyOnt9LG9sOnt9LHVsOnt9LGxpOnt9LGgxOnt9LGgyOnt9LGgzOnt9LGJsb2NrcXVvdGU6e30sdToxLGltZzp7Y2hlY2tfYXR0cmlidXRlczp7d2lkdGg6Im51bWJlcnMiLGFsdDoiYWx0IixzcmM6InVybCIsaGVpZ2h0OiJudW1iZXJzIn19LGE6e3NldF9hdHRyaWJ1dGVzOnt0YXJnZXQ6Il9ibGFuayIscmVsOiJub2ZvbGxvdyJ9LGNoZWNrX2F0dHJpYnV0ZXM6e2hyZWY6InVybCJ9fSxzcGFuOjEsZGl2OjEsY29kZToxLHByZToxfX0sc3R5bGVzaGVldHM6WyIuL2xpYi9jc3Mvd3lzaXd5Zy1jb2xvci5jc3MiXSxsb2NhbGU6ImVuIn07aWYodHlwZW9mICQuZm4ud3lzaWh0bWw1LmRlZmF1bHRPcHRpb25zQ2FjaGU9PT0idW5kZWZpbmVkIil7JC5mbi53eXNpaHRtbDUuZGVmYXVsdE9wdGlvbnNDYWNoZT0kLmV4dGVuZCh0cnVlLHt9LCQuZm4ud3lzaWh0bWw1LmRlZmF1bHRPcHRpb25zKX12YXIgbG9jYWxlPSQuZm4ud3lzaWh0bWw1LmxvY2FsZT17ZW46e2ZvbnRfc3R5bGVzOntub3JtYWw6Ik5vcm1hbCB0ZXh0IixoMToiSGVhZGluZyAxIixoMjoiSGVhZGluZyAyIixoMzoiSGVhZGluZyAzIn0sZW1waGFzaXM6e2JvbGQ6IkJvbGQiLGl0YWxpYzoiSXRhbGljIix1bmRlcmxpbmU6IlVuZGVybGluZSJ9LGxpc3RzOnt1bm9yZGVyZWQ6IlVub3JkZXJlZCBsaXN0IixvcmRlcmVkOiJPcmRlcmVkIGxpc3QiLG91dGRlbnQ6Ik91dGRlbnQiLGluZGVudDoiSW5kZW50In0sbGluazp7aW5zZXJ0OiJJbnNlcnQgbGluayIsY2FuY2VsOiJDYW5jZWwifSxpbWFnZTp7aW5zZXJ0OiJJbnNlcnQgaW1hZ2UiLGNhbmNlbDoiQ2FuY2VsIn0saHRtbDp7ZWRpdDoiRWRpdCBIVE1MIn0sY29sb3Vyczp7YmxhY2s6IkJsYWNrIixzaWx2ZXI6IlNpbHZlciIsZ3JheToiR3JleSIsbWFyb29uOiJNYXJvb24iLHJlZDoiUmVkIixwdXJwbGU6IlB1cnBsZSIsZ3JlZW46IkdyZWVuIixvbGl2ZToiT2xpdmUiLG5hdnk6Ik5hdnkiLGJsdWU6IkJsdWUiLG9yYW5nZToiT3JhbmdlIn19fX0od2luZG93LmpRdWVyeSx3aW5kb3cud3lzaWh0bWw1KTs=]]></data>
	</file>
	<file>
	  <filename>/js/external/inputs-ext/wysihtml5/bootstrap-wysihtml5-0.0.2/wysihtml5-0.3.0.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIEBsaWNlbnNlIHd5c2lodG1sNSB2MC4zLjAKICogaHR0cHM6Ly9naXRodWIuY29tL3hpbmcvd3lzaWh0bWw1CiAqCiAqIEF1dGhvcjogQ2hyaXN0b3BoZXIgQmx1bSAoaHR0cHM6Ly9naXRodWIuY29tL3RpZmYpCiAqCiAqIENvcHlyaWdodCAoQykgMjAxMiBYSU5HIEFHCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoTUlUKQogKgogKi8KdmFyIHd5c2lodG1sNSA9IHsKICB2ZXJzaW9uOiAiMC4zLjAiLAogIAogIC8vIG5hbWVzcGFjZXMKICBjb21tYW5kczogICB7fSwKICBkb206ICAgICAgICB7fSwKICBxdWlya3M6ICAgICB7fSwKICB0b29sYmFyOiAgICB7fSwKICBsYW5nOiAgICAgICB7fSwKICBzZWxlY3Rpb246ICB7fSwKICB2aWV3czogICAgICB7fSwKICAKICBJTlZJU0lCTEVfU1BBQ0U6ICJcdUZFRkYiLAogIAogIEVNUFRZX0ZVTkNUSU9OOiBmdW5jdGlvbigpIHt9LAogIAogIEVMRU1FTlRfTk9ERTogMSwKICBURVhUX05PREU6ICAgIDMsCiAgCiAgQkFDS1NQQUNFX0tFWTogIDgsCiAgRU5URVJfS0VZOiAgICAgIDEzLAogIEVTQ0FQRV9LRVk6ICAgICAyNywKICBTUEFDRV9LRVk6ICAgICAgMzIsCiAgREVMRVRFX0tFWTogICAgIDQ2Cn07LyoqCiAqIEBsaWNlbnNlIFJhbmd5LCBhIGNyb3NzLWJyb3dzZXIgSmF2YVNjcmlwdCByYW5nZSBhbmQgc2VsZWN0aW9uIGxpYnJhcnkKICogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3Jhbmd5LwogKgogKiBDb3B5cmlnaHQgMjAxMSwgVGltIERvd24KICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgogKiBWZXJzaW9uOiAxLjIuMgogKiBCdWlsZCBkYXRlOiAxMyBOb3ZlbWJlciAyMDExCiAqLwp3aW5kb3dbJ3Jhbmd5J10gPSAoZnVuY3Rpb24oKSB7CgoKICAgIHZhciBPQkpFQ1QgPSAib2JqZWN0IiwgRlVOQ1RJT04gPSAiZnVuY3Rpb24iLCBVTkRFRklORUQgPSAidW5kZWZpbmVkIjsKCiAgICB2YXIgZG9tUmFuZ2VQcm9wZXJ0aWVzID0gWyJzdGFydENvbnRhaW5lciIsICJzdGFydE9mZnNldCIsICJlbmRDb250YWluZXIiLCAiZW5kT2Zmc2V0IiwgImNvbGxhcHNlZCIsCiAgICAgICAgImNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIiwgIlNUQVJUX1RPX1NUQVJUIiwgIlNUQVJUX1RPX0VORCIsICJFTkRfVE9fU1RBUlQiLCAiRU5EX1RPX0VORCJdOwoKICAgIHZhciBkb21SYW5nZU1ldGhvZHMgPSBbInNldFN0YXJ0IiwgInNldFN0YXJ0QmVmb3JlIiwgInNldFN0YXJ0QWZ0ZXIiLCAic2V0RW5kIiwgInNldEVuZEJlZm9yZSIsCiAgICAgICAgInNldEVuZEFmdGVyIiwgImNvbGxhcHNlIiwgInNlbGVjdE5vZGUiLCAic2VsZWN0Tm9kZUNvbnRlbnRzIiwgImNvbXBhcmVCb3VuZGFyeVBvaW50cyIsICJkZWxldGVDb250ZW50cyIsCiAgICAgICAgImV4dHJhY3RDb250ZW50cyIsICJjbG9uZUNvbnRlbnRzIiwgImluc2VydE5vZGUiLCAic3Vycm91bmRDb250ZW50cyIsICJjbG9uZVJhbmdlIiwgInRvU3RyaW5nIiwgImRldGFjaCJdOwoKICAgIHZhciB0ZXh0UmFuZ2VQcm9wZXJ0aWVzID0gWyJib3VuZGluZ0hlaWdodCIsICJib3VuZGluZ0xlZnQiLCAiYm91bmRpbmdUb3AiLCAiYm91bmRpbmdXaWR0aCIsICJodG1sVGV4dCIsICJ0ZXh0Il07CgogICAgLy8gU3Vic2V0IG9mIFRleHRSYW5nZSdzIGZ1bGwgc2V0IG9mIG1ldGhvZHMgdGhhdCB3ZSdyZSBpbnRlcmVzdGVkIGluCiAgICB2YXIgdGV4dFJhbmdlTWV0aG9kcyA9IFsiY29sbGFwc2UiLCAiY29tcGFyZUVuZFBvaW50cyIsICJkdXBsaWNhdGUiLCAiZ2V0Qm9va21hcmsiLCAibW92ZVRvQm9va21hcmsiLAogICAgICAgICJtb3ZlVG9FbGVtZW50VGV4dCIsICJwYXJlbnRFbGVtZW50IiwgInBhc3RlSFRNTCIsICJzZWxlY3QiLCAic2V0RW5kUG9pbnQiLCAiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Il07CgogICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCiAgICAvLyBUcmlvIG9mIGZ1bmN0aW9ucyB0YWtlbiBmcm9tIFBldGVyIE1pY2hhdXgncyBhcnRpY2xlOgogICAgLy8gaHR0cDovL3BldGVyLm1pY2hhdXguY2EvYXJ0aWNsZXMvZmVhdHVyZS1kZXRlY3Rpb24tc3RhdGUtb2YtdGhlLWFydC1icm93c2VyLXNjcmlwdGluZwogICAgZnVuY3Rpb24gaXNIb3N0TWV0aG9kKG8sIHApIHsKICAgICAgICB2YXIgdCA9IHR5cGVvZiBvW3BdOwogICAgICAgIHJldHVybiB0ID09IEZVTkNUSU9OIHx8ICghISh0ID09IE9CSkVDVCAmJiBvW3BdKSkgfHwgdCA9PSAidW5rbm93biI7CiAgICB9CgogICAgZnVuY3Rpb24gaXNIb3N0T2JqZWN0KG8sIHApIHsKICAgICAgICByZXR1cm4gISEodHlwZW9mIG9bcF0gPT0gT0JKRUNUICYmIG9bcF0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzSG9zdFByb3BlcnR5KG8sIHApIHsKICAgICAgICByZXR1cm4gdHlwZW9mIG9bcF0gIT0gVU5ERUZJTkVEOwogICAgfQoKICAgIC8vIENyZWF0ZXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0byBzYXZlIHZlcmJvc2UgcmVwZWF0ZWQgY2FsbHMgdG8gdGVzdHMgZnVuY3Rpb25zCiAgICBmdW5jdGlvbiBjcmVhdGVNdWx0aXBsZVByb3BlcnR5VGVzdCh0ZXN0RnVuYykgewogICAgICAgIHJldHVybiBmdW5jdGlvbihvLCBwcm9wcykgewogICAgICAgICAgICB2YXIgaSA9IHByb3BzLmxlbmd0aDsKICAgICAgICAgICAgd2hpbGUgKGktLSkgewogICAgICAgICAgICAgICAgaWYgKCF0ZXN0RnVuYyhvLCBwcm9wc1tpXSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfTsKICAgIH0KCiAgICAvLyBOZXh0IHRyaW8gb2YgZnVuY3Rpb25zIGFyZSBhIGNvbnZlbmllbmNlIHRvIHNhdmUgdmVyYm9zZSByZXBlYXRlZCBjYWxscyB0byBwcmV2aW91cyB0d28gZnVuY3Rpb25zCiAgICB2YXIgYXJlSG9zdE1ldGhvZHMgPSBjcmVhdGVNdWx0aXBsZVByb3BlcnR5VGVzdChpc0hvc3RNZXRob2QpOwogICAgdmFyIGFyZUhvc3RPYmplY3RzID0gY3JlYXRlTXVsdGlwbGVQcm9wZXJ0eVRlc3QoaXNIb3N0T2JqZWN0KTsKICAgIHZhciBhcmVIb3N0UHJvcGVydGllcyA9IGNyZWF0ZU11bHRpcGxlUHJvcGVydHlUZXN0KGlzSG9zdFByb3BlcnR5KTsKCiAgICBmdW5jdGlvbiBpc1RleHRSYW5nZShyYW5nZSkgewogICAgICAgIHJldHVybiByYW5nZSAmJiBhcmVIb3N0TWV0aG9kcyhyYW5nZSwgdGV4dFJhbmdlTWV0aG9kcykgJiYgYXJlSG9zdFByb3BlcnRpZXMocmFuZ2UsIHRleHRSYW5nZVByb3BlcnRpZXMpOwogICAgfQoKICAgIHZhciBhcGkgPSB7CiAgICAgICAgdmVyc2lvbjogIjEuMi4yIiwKICAgICAgICBpbml0aWFsaXplZDogZmFsc2UsCiAgICAgICAgc3VwcG9ydGVkOiB0cnVlLAoKICAgICAgICB1dGlsOiB7CiAgICAgICAgICAgIGlzSG9zdE1ldGhvZDogaXNIb3N0TWV0aG9kLAogICAgICAgICAgICBpc0hvc3RPYmplY3Q6IGlzSG9zdE9iamVjdCwKICAgICAgICAgICAgaXNIb3N0UHJvcGVydHk6IGlzSG9zdFByb3BlcnR5LAogICAgICAgICAgICBhcmVIb3N0TWV0aG9kczogYXJlSG9zdE1ldGhvZHMsCiAgICAgICAgICAgIGFyZUhvc3RPYmplY3RzOiBhcmVIb3N0T2JqZWN0cywKICAgICAgICAgICAgYXJlSG9zdFByb3BlcnRpZXM6IGFyZUhvc3RQcm9wZXJ0aWVzLAogICAgICAgICAgICBpc1RleHRSYW5nZTogaXNUZXh0UmFuZ2UKICAgICAgICB9LAoKICAgICAgICBmZWF0dXJlczoge30sCgogICAgICAgIG1vZHVsZXM6IHt9LAogICAgICAgIGNvbmZpZzogewogICAgICAgICAgICBhbGVydE9uV2FybjogZmFsc2UsCiAgICAgICAgICAgIHByZWZlclRleHRSYW5nZTogZmFsc2UKICAgICAgICB9CiAgICB9OwoKICAgIGZ1bmN0aW9uIGZhaWwocmVhc29uKSB7CiAgICAgICAgd2luZG93LmFsZXJ0KCJSYW5neSBub3Qgc3VwcG9ydGVkIGluIHlvdXIgYnJvd3Nlci4gUmVhc29uOiAiICsgcmVhc29uKTsKICAgICAgICBhcGkuaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgIGFwaS5zdXBwb3J0ZWQgPSBmYWxzZTsKICAgIH0KCiAgICBhcGkuZmFpbCA9IGZhaWw7CgogICAgZnVuY3Rpb24gd2Fybihtc2cpIHsKICAgICAgICB2YXIgd2FybmluZ01lc3NhZ2UgPSAiUmFuZ3kgd2FybmluZzogIiArIG1zZzsKICAgICAgICBpZiAoYXBpLmNvbmZpZy5hbGVydE9uV2FybikgewogICAgICAgICAgICB3aW5kb3cuYWxlcnQod2FybmluZ01lc3NhZ2UpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5jb25zb2xlICE9IFVOREVGSU5FRCAmJiB0eXBlb2Ygd2luZG93LmNvbnNvbGUubG9nICE9IFVOREVGSU5FRCkgewogICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2cod2FybmluZ01lc3NhZ2UpOwogICAgICAgIH0KICAgIH0KCiAgICBhcGkud2FybiA9IHdhcm47CgogICAgaWYgKHt9Lmhhc093blByb3BlcnR5KSB7CiAgICAgICAgYXBpLnV0aWwuZXh0ZW5kID0gZnVuY3Rpb24obywgcHJvcHMpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBwcm9wcykgewogICAgICAgICAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KGkpKSB7CiAgICAgICAgICAgICAgICAgICAgb1tpXSA9IHByb3BzW2ldOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgICAgZmFpbCgiaGFzT3duUHJvcGVydHkgbm90IHN1cHBvcnRlZCIpOwogICAgfQoKICAgIHZhciBpbml0TGlzdGVuZXJzID0gW107CiAgICB2YXIgbW9kdWxlSW5pdGlhbGl6ZXJzID0gW107CgogICAgLy8gSW5pdGlhbGl6YXRpb24KICAgIGZ1bmN0aW9uIGluaXQoKSB7CiAgICAgICAgaWYgKGFwaS5pbml0aWFsaXplZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHZhciB0ZXN0UmFuZ2U7CiAgICAgICAgdmFyIGltcGxlbWVudHNEb21SYW5nZSA9IGZhbHNlLCBpbXBsZW1lbnRzVGV4dFJhbmdlID0gZmFsc2U7CgogICAgICAgIC8vIEZpcnN0LCBwZXJmb3JtIGJhc2ljIGZlYXR1cmUgdGVzdHMKCiAgICAgICAgaWYgKGlzSG9zdE1ldGhvZChkb2N1bWVudCwgImNyZWF0ZVJhbmdlIikpIHsKICAgICAgICAgICAgdGVzdFJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICAgICAgaWYgKGFyZUhvc3RNZXRob2RzKHRlc3RSYW5nZSwgZG9tUmFuZ2VNZXRob2RzKSAmJiBhcmVIb3N0UHJvcGVydGllcyh0ZXN0UmFuZ2UsIGRvbVJhbmdlUHJvcGVydGllcykpIHsKICAgICAgICAgICAgICAgIGltcGxlbWVudHNEb21SYW5nZSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGVzdFJhbmdlLmRldGFjaCgpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGJvZHkgPSBpc0hvc3RPYmplY3QoZG9jdW1lbnQsICJib2R5IikgPyBkb2N1bWVudC5ib2R5IDogZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTsKCiAgICAgICAgaWYgKGJvZHkgJiYgaXNIb3N0TWV0aG9kKGJvZHksICJjcmVhdGVUZXh0UmFuZ2UiKSkgewogICAgICAgICAgICB0ZXN0UmFuZ2UgPSBib2R5LmNyZWF0ZVRleHRSYW5nZSgpOwogICAgICAgICAgICBpZiAoaXNUZXh0UmFuZ2UodGVzdFJhbmdlKSkgewogICAgICAgICAgICAgICAgaW1wbGVtZW50c1RleHRSYW5nZSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghaW1wbGVtZW50c0RvbVJhbmdlICYmICFpbXBsZW1lbnRzVGV4dFJhbmdlKSB7CiAgICAgICAgICAgIGZhaWwoIk5laXRoZXIgUmFuZ2Ugbm9yIFRleHRSYW5nZSBhcmUgaW1wbGVtZW50ZWQiKTsKICAgICAgICB9CgogICAgICAgIGFwaS5pbml0aWFsaXplZCA9IHRydWU7CiAgICAgICAgYXBpLmZlYXR1cmVzID0gewogICAgICAgICAgICBpbXBsZW1lbnRzRG9tUmFuZ2U6IGltcGxlbWVudHNEb21SYW5nZSwKICAgICAgICAgICAgaW1wbGVtZW50c1RleHRSYW5nZTogaW1wbGVtZW50c1RleHRSYW5nZQogICAgICAgIH07CgogICAgICAgIC8vIEluaXRpYWxpemUgbW9kdWxlcyBhbmQgY2FsbCBpbml0IGxpc3RlbmVycwogICAgICAgIHZhciBhbGxMaXN0ZW5lcnMgPSBtb2R1bGVJbml0aWFsaXplcnMuY29uY2F0KGluaXRMaXN0ZW5lcnMpOwogICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhbGxMaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGFsbExpc3RlbmVyc1tpXShhcGkpOwogICAgICAgICAgICB9IGNhdGNoIChleCkgewogICAgICAgICAgICAgICAgaWYgKGlzSG9zdE9iamVjdCh3aW5kb3csICJjb25zb2xlIikgJiYgaXNIb3N0TWV0aG9kKHdpbmRvdy5jb25zb2xlLCAibG9nIikpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2coIkluaXQgbGlzdGVuZXIgdGhyZXcgYW4gZXhjZXB0aW9uLiBDb250aW51aW5nLiIsIGV4KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLy8gQWxsb3cgZXh0ZXJuYWwgc2NyaXB0cyB0byBpbml0aWFsaXplIHRoaXMgbGlicmFyeSBpbiBjYXNlIGl0J3MgbG9hZGVkIGFmdGVyIHRoZSBkb2N1bWVudCBoYXMgbG9hZGVkCiAgICBhcGkuaW5pdCA9IGluaXQ7CgogICAgLy8gRXhlY3V0ZSBsaXN0ZW5lciBpbW1lZGlhdGVseSBpZiBhbHJlYWR5IGluaXRpYWxpemVkCiAgICBhcGkuYWRkSW5pdExpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHsKICAgICAgICBpZiAoYXBpLmluaXRpYWxpemVkKSB7CiAgICAgICAgICAgIGxpc3RlbmVyKGFwaSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaW5pdExpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTsKICAgICAgICB9CiAgICB9OwoKICAgIHZhciBjcmVhdGVNaXNzaW5nTmF0aXZlQXBpTGlzdGVuZXJzID0gW107CgogICAgYXBpLmFkZENyZWF0ZU1pc3NpbmdOYXRpdmVBcGlMaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7CiAgICAgICAgY3JlYXRlTWlzc2luZ05hdGl2ZUFwaUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTsKICAgIH07CgogICAgZnVuY3Rpb24gY3JlYXRlTWlzc2luZ05hdGl2ZUFwaSh3aW4pIHsKICAgICAgICB3aW4gPSB3aW4gfHwgd2luZG93OwogICAgICAgIGluaXQoKTsKCiAgICAgICAgLy8gTm90aWZ5IGxpc3RlbmVycwogICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBjcmVhdGVNaXNzaW5nTmF0aXZlQXBpTGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICAgIGNyZWF0ZU1pc3NpbmdOYXRpdmVBcGlMaXN0ZW5lcnNbaV0od2luKTsKICAgICAgICB9CiAgICB9CgogICAgYXBpLmNyZWF0ZU1pc3NpbmdOYXRpdmVBcGkgPSBjcmVhdGVNaXNzaW5nTmF0aXZlQXBpOwoKICAgIC8qKgogICAgICogQGNvbnN0cnVjdG9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIE1vZHVsZShuYW1lKSB7CiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7CiAgICAgICAgdGhpcy5zdXBwb3J0ZWQgPSBmYWxzZTsKICAgIH0KCiAgICBNb2R1bGUucHJvdG90eXBlLmZhaWwgPSBmdW5jdGlvbihyZWFzb24pIHsKICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICB0aGlzLnN1cHBvcnRlZCA9IGZhbHNlOwoKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk1vZHVsZSAnIiArIHRoaXMubmFtZSArICInIGZhaWxlZCB0byBsb2FkOiAiICsgcmVhc29uKTsKICAgIH07CgogICAgTW9kdWxlLnByb3RvdHlwZS53YXJuID0gZnVuY3Rpb24obXNnKSB7CiAgICAgICAgYXBpLndhcm4oIk1vZHVsZSAiICsgdGhpcy5uYW1lICsgIjogIiArIG1zZyk7CiAgICB9OwoKICAgIE1vZHVsZS5wcm90b3R5cGUuY3JlYXRlRXJyb3IgPSBmdW5jdGlvbihtc2cpIHsKICAgICAgICByZXR1cm4gbmV3IEVycm9yKCJFcnJvciBpbiBSYW5neSAiICsgdGhpcy5uYW1lICsgIiBtb2R1bGU6ICIgKyBtc2cpOwogICAgfTsKCiAgICBhcGkuY3JlYXRlTW9kdWxlID0gZnVuY3Rpb24obmFtZSwgaW5pdEZ1bmMpIHsKICAgICAgICB2YXIgbW9kdWxlID0gbmV3IE1vZHVsZShuYW1lKTsKICAgICAgICBhcGkubW9kdWxlc1tuYW1lXSA9IG1vZHVsZTsKCiAgICAgICAgbW9kdWxlSW5pdGlhbGl6ZXJzLnB1c2goZnVuY3Rpb24oYXBpKSB7CiAgICAgICAgICAgIGluaXRGdW5jKGFwaSwgbW9kdWxlKTsKICAgICAgICAgICAgbW9kdWxlLmluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICAgICAgbW9kdWxlLnN1cHBvcnRlZCA9IHRydWU7CiAgICAgICAgfSk7CiAgICB9OwoKICAgIGFwaS5yZXF1aXJlTW9kdWxlcyA9IGZ1bmN0aW9uKG1vZHVsZXMpIHsKICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gbW9kdWxlcy5sZW5ndGgsIG1vZHVsZSwgbW9kdWxlTmFtZTsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICAgIG1vZHVsZU5hbWUgPSBtb2R1bGVzW2ldOwogICAgICAgICAgICBtb2R1bGUgPSBhcGkubW9kdWxlc1ttb2R1bGVOYW1lXTsKICAgICAgICAgICAgaWYgKCFtb2R1bGUgfHwgIShtb2R1bGUgaW5zdGFuY2VvZiBNb2R1bGUpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk1vZHVsZSAnIiArIG1vZHVsZU5hbWUgKyAiJyBub3QgZm91bmQiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIW1vZHVsZS5zdXBwb3J0ZWQpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTW9kdWxlICciICsgbW9kdWxlTmFtZSArICInIG5vdCBzdXBwb3J0ZWQiKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CgogICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCiAgICAvLyBXYWl0IGZvciBkb2N1bWVudCB0byBsb2FkIGJlZm9yZSBydW5uaW5nIHRlc3RzCgogICAgdmFyIGRvY1JlYWR5ID0gZmFsc2U7CgogICAgdmFyIGxvYWRIYW5kbGVyID0gZnVuY3Rpb24oZSkgewoKICAgICAgICBpZiAoIWRvY1JlYWR5KSB7CiAgICAgICAgICAgIGRvY1JlYWR5ID0gdHJ1ZTsKICAgICAgICAgICAgaWYgKCFhcGkuaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgICAgICAgIGluaXQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CgogICAgLy8gVGVzdCB3aGV0aGVyIHdlIGhhdmUgd2luZG93IGFuZCBkb2N1bWVudCBvYmplY3RzIHRoYXQgd2Ugd2lsbCBuZWVkCiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PSBVTkRFRklORUQpIHsKICAgICAgICBmYWlsKCJObyB3aW5kb3cgZm91bmQiKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09IFVOREVGSU5FRCkgewogICAgICAgIGZhaWwoIk5vIGRvY3VtZW50IGZvdW5kIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChpc0hvc3RNZXRob2QoZG9jdW1lbnQsICJhZGRFdmVudExpc3RlbmVyIikpIHsKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgbG9hZEhhbmRsZXIsIGZhbHNlKTsKICAgIH0KCiAgICAvLyBBZGQgYSBmYWxsYmFjayBpbiBjYXNlIHRoZSBET01Db250ZW50TG9hZGVkIGV2ZW50IGlzbid0IHN1cHBvcnRlZAogICAgaWYgKGlzSG9zdE1ldGhvZCh3aW5kb3csICJhZGRFdmVudExpc3RlbmVyIikpIHsKICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGxvYWRIYW5kbGVyLCBmYWxzZSk7CiAgICB9IGVsc2UgaWYgKGlzSG9zdE1ldGhvZCh3aW5kb3csICJhdHRhY2hFdmVudCIpKSB7CiAgICAgICAgd2luZG93LmF0dGFjaEV2ZW50KCJvbmxvYWQiLCBsb2FkSGFuZGxlcik7CiAgICB9IGVsc2UgewogICAgICAgIGZhaWwoIldpbmRvdyBkb2VzIG5vdCBoYXZlIHJlcXVpcmVkIGFkZEV2ZW50TGlzdGVuZXIgb3IgYXR0YWNoRXZlbnQgbWV0aG9kIik7CiAgICB9CgogICAgcmV0dXJuIGFwaTsKfSkoKTsKcmFuZ3kuY3JlYXRlTW9kdWxlKCJEb21VdGlsIiwgZnVuY3Rpb24oYXBpLCBtb2R1bGUpIHsKCiAgICB2YXIgVU5ERUYgPSAidW5kZWZpbmVkIjsKICAgIHZhciB1dGlsID0gYXBpLnV0aWw7CgogICAgLy8gUGVyZm9ybSBmZWF0dXJlIHRlc3RzCiAgICBpZiAoIXV0aWwuYXJlSG9zdE1ldGhvZHMoZG9jdW1lbnQsIFsiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsICJjcmVhdGVFbGVtZW50IiwgImNyZWF0ZVRleHROb2RlIl0pKSB7CiAgICAgICAgbW9kdWxlLmZhaWwoImRvY3VtZW50IG1pc3NpbmcgYSBOb2RlIGNyZWF0aW9uIG1ldGhvZCIpOwogICAgfQoKICAgIGlmICghdXRpbC5pc0hvc3RNZXRob2QoZG9jdW1lbnQsICJnZXRFbGVtZW50c0J5VGFnTmFtZSIpKSB7CiAgICAgICAgbW9kdWxlLmZhaWwoImRvY3VtZW50IG1pc3NpbmcgZ2V0RWxlbWVudHNCeVRhZ05hbWUgbWV0aG9kIik7CiAgICB9CgogICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBpZiAoIXV0aWwuYXJlSG9zdE1ldGhvZHMoZWwsIFsiaW5zZXJ0QmVmb3JlIiwgImFwcGVuZENoaWxkIiwgImNsb25lTm9kZSJdIHx8CiAgICAgICAgICAgICF1dGlsLmFyZUhvc3RPYmplY3RzKGVsLCBbInByZXZpb3VzU2libGluZyIsICJuZXh0U2libGluZyIsICJjaGlsZE5vZGVzIiwgInBhcmVudE5vZGUiXSkpKSB7CiAgICAgICAgbW9kdWxlLmZhaWwoIkluY29tcGxldGUgRWxlbWVudCBpbXBsZW1lbnRhdGlvbiIpOwogICAgfQoKICAgIC8vIGlubmVySFRNTCBpcyByZXF1aXJlZCBmb3IgUmFuZ2UncyBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQgbWV0aG9kCiAgICBpZiAoIXV0aWwuaXNIb3N0UHJvcGVydHkoZWwsICJpbm5lckhUTUwiKSkgewogICAgICAgIG1vZHVsZS5mYWlsKCJFbGVtZW50IGlzIG1pc3NpbmcgaW5uZXJIVE1MIHByb3BlcnR5Iik7CiAgICB9CgogICAgdmFyIHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoInRlc3QiKTsKICAgIGlmICghdXRpbC5hcmVIb3N0TWV0aG9kcyh0ZXh0Tm9kZSwgWyJzcGxpdFRleHQiLCAiZGVsZXRlRGF0YSIsICJpbnNlcnREYXRhIiwgImFwcGVuZERhdGEiLCAiY2xvbmVOb2RlIl0gfHwKICAgICAgICAgICAgIXV0aWwuYXJlSG9zdE9iamVjdHMoZWwsIFsicHJldmlvdXNTaWJsaW5nIiwgIm5leHRTaWJsaW5nIiwgImNoaWxkTm9kZXMiLCAicGFyZW50Tm9kZSJdKSB8fAogICAgICAgICAgICAhdXRpbC5hcmVIb3N0UHJvcGVydGllcyh0ZXh0Tm9kZSwgWyJkYXRhIl0pKSkgewogICAgICAgIG1vZHVsZS5mYWlsKCJJbmNvbXBsZXRlIFRleHQgTm9kZSBpbXBsZW1lbnRhdGlvbiIpOwogICAgfQoKICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgogICAgLy8gUmVtb3ZlZCB1c2Ugb2YgaW5kZXhPZiBiZWNhdXNlIG9mIGEgYml6YXJyZSBidWcgaW4gT3BlcmEgdGhhdCBpcyB0aHJvd24gaW4gb25lIG9mIHRoZSBBY2lkMyB0ZXN0cy4gSSBoYXZlbid0IGJlZW4KICAgIC8vIGFibGUgdG8gcmVwbGljYXRlIGl0IG91dHNpZGUgb2YgdGhlIHRlc3QuIFRoZSBidWcgaXMgdGhhdCBpbmRleE9mIHJldHVybnMgLTEgd2hlbiBjYWxsZWQgb24gYW4gQXJyYXkgdGhhdAogICAgLy8gY29udGFpbnMganVzdCB0aGUgZG9jdW1lbnQgYXMgYSBzaW5nbGUgZWxlbWVudCBhbmQgdGhlIHZhbHVlIHNlYXJjaGVkIGZvciBpcyB0aGUgZG9jdW1lbnQuCiAgICB2YXIgYXJyYXlDb250YWlucyA9IC8qQXJyYXkucHJvdG90eXBlLmluZGV4T2YgPwogICAgICAgIGZ1bmN0aW9uKGFyciwgdmFsKSB7CiAgICAgICAgICAgIHJldHVybiBhcnIuaW5kZXhPZih2YWwpID4gLTE7CiAgICAgICAgfToqLwoKICAgICAgICBmdW5jdGlvbihhcnIsIHZhbCkgewogICAgICAgICAgICB2YXIgaSA9IGFyci5sZW5ndGg7CiAgICAgICAgICAgIHdoaWxlIChpLS0pIHsKICAgICAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IHZhbCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9OwoKICAgIC8vIE9wZXJhIDExIHB1dHMgSFRNTCBlbGVtZW50cyBpbiB0aGUgbnVsbCBuYW1lc3BhY2UsIGl0IHNlZW1zLCBhbmQgSUUgNyBoYXMgdW5kZWZpbmVkIG5hbWVzcGFjZVVSSQogICAgZnVuY3Rpb24gaXNIdG1sTmFtZXNwYWNlKG5vZGUpIHsKICAgICAgICB2YXIgbnM7CiAgICAgICAgcmV0dXJuIHR5cGVvZiBub2RlLm5hbWVzcGFjZVVSSSA9PSBVTkRFRiB8fCAoKG5zID0gbm9kZS5uYW1lc3BhY2VVUkkpID09PSBudWxsIHx8IG5zID09ICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIik7CiAgICB9CgogICAgZnVuY3Rpb24gcGFyZW50RWxlbWVudChub2RlKSB7CiAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTsKICAgICAgICByZXR1cm4gKHBhcmVudC5ub2RlVHlwZSA9PSAxKSA/IHBhcmVudCA6IG51bGw7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0Tm9kZUluZGV4KG5vZGUpIHsKICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgd2hpbGUoIChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcpICkgewogICAgICAgICAgICBpKys7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE5vZGVMZW5ndGgobm9kZSkgewogICAgICAgIHZhciBjaGlsZE5vZGVzOwogICAgICAgIHJldHVybiBpc0NoYXJhY3RlckRhdGFOb2RlKG5vZGUpID8gbm9kZS5sZW5ndGggOiAoKGNoaWxkTm9kZXMgPSBub2RlLmNoaWxkTm9kZXMpID8gY2hpbGROb2Rlcy5sZW5ndGggOiAwKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRDb21tb25BbmNlc3Rvcihub2RlMSwgbm9kZTIpIHsKICAgICAgICB2YXIgYW5jZXN0b3JzID0gW10sIG47CiAgICAgICAgZm9yIChuID0gbm9kZTE7IG47IG4gPSBuLnBhcmVudE5vZGUpIHsKICAgICAgICAgICAgYW5jZXN0b3JzLnB1c2gobik7CiAgICAgICAgfQoKICAgICAgICBmb3IgKG4gPSBub2RlMjsgbjsgbiA9IG4ucGFyZW50Tm9kZSkgewogICAgICAgICAgICBpZiAoYXJyYXlDb250YWlucyhhbmNlc3RvcnMsIG4pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgZnVuY3Rpb24gaXNBbmNlc3Rvck9mKGFuY2VzdG9yLCBkZXNjZW5kYW50LCBzZWxmSXNBbmNlc3RvcikgewogICAgICAgIHZhciBuID0gc2VsZklzQW5jZXN0b3IgPyBkZXNjZW5kYW50IDogZGVzY2VuZGFudC5wYXJlbnROb2RlOwogICAgICAgIHdoaWxlIChuKSB7CiAgICAgICAgICAgIGlmIChuID09PSBhbmNlc3RvcikgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBuID0gbi5wYXJlbnROb2RlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRDbG9zZXN0QW5jZXN0b3JJbihub2RlLCBhbmNlc3Rvciwgc2VsZklzQW5jZXN0b3IpIHsKICAgICAgICB2YXIgcCwgbiA9IHNlbGZJc0FuY2VzdG9yID8gbm9kZSA6IG5vZGUucGFyZW50Tm9kZTsKICAgICAgICB3aGlsZSAobikgewogICAgICAgICAgICBwID0gbi5wYXJlbnROb2RlOwogICAgICAgICAgICBpZiAocCA9PT0gYW5jZXN0b3IpIHsKICAgICAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG4gPSBwOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBmdW5jdGlvbiBpc0NoYXJhY3RlckRhdGFOb2RlKG5vZGUpIHsKICAgICAgICB2YXIgdCA9IG5vZGUubm9kZVR5cGU7CiAgICAgICAgcmV0dXJuIHQgPT0gMyB8fCB0ID09IDQgfHwgdCA9PSA4IDsgLy8gVGV4dCwgQ0RhdGFTZWN0aW9uIG9yIENvbW1lbnQKICAgIH0KCiAgICBmdW5jdGlvbiBpbnNlcnRBZnRlcihub2RlLCBwcmVjZWRpbmdOb2RlKSB7CiAgICAgICAgdmFyIG5leHROb2RlID0gcHJlY2VkaW5nTm9kZS5uZXh0U2libGluZywgcGFyZW50ID0gcHJlY2VkaW5nTm9kZS5wYXJlbnROb2RlOwogICAgICAgIGlmIChuZXh0Tm9kZSkgewogICAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5vZGUsIG5leHROb2RlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQobm9kZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBub2RlOwogICAgfQoKICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW5ub3QgdXNlIHNwbGl0VGV4dCgpIGJlY2F1c2UgaXQgaXMgYnVncmlkZGVuIGluIElFIDkuCiAgICBmdW5jdGlvbiBzcGxpdERhdGFOb2RlKG5vZGUsIGluZGV4KSB7CiAgICAgICAgdmFyIG5ld05vZGUgPSBub2RlLmNsb25lTm9kZShmYWxzZSk7CiAgICAgICAgbmV3Tm9kZS5kZWxldGVEYXRhKDAsIGluZGV4KTsKICAgICAgICBub2RlLmRlbGV0ZURhdGEoaW5kZXgsIG5vZGUubGVuZ3RoIC0gaW5kZXgpOwogICAgICAgIGluc2VydEFmdGVyKG5ld05vZGUsIG5vZGUpOwogICAgICAgIHJldHVybiBuZXdOb2RlOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldERvY3VtZW50KG5vZGUpIHsKICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSA5KSB7CiAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5vZGUub3duZXJEb2N1bWVudCAhPSBVTkRFRikgewogICAgICAgICAgICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50OwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5vZGUuZG9jdW1lbnQgIT0gVU5ERUYpIHsKICAgICAgICAgICAgcmV0dXJuIG5vZGUuZG9jdW1lbnQ7CiAgICAgICAgfSBlbHNlIGlmIChub2RlLnBhcmVudE5vZGUpIHsKICAgICAgICAgICAgcmV0dXJuIGdldERvY3VtZW50KG5vZGUucGFyZW50Tm9kZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJnZXREb2N1bWVudDogbm8gZG9jdW1lbnQgZm91bmQgZm9yIG5vZGUiKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHsKICAgICAgICB2YXIgZG9jID0gZ2V0RG9jdW1lbnQobm9kZSk7CiAgICAgICAgaWYgKHR5cGVvZiBkb2MuZGVmYXVsdFZpZXcgIT0gVU5ERUYpIHsKICAgICAgICAgICAgcmV0dXJuIGRvYy5kZWZhdWx0VmlldzsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2MucGFyZW50V2luZG93ICE9IFVOREVGKSB7CiAgICAgICAgICAgIHJldHVybiBkb2MucGFyZW50V2luZG93OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGdldCBhIHdpbmRvdyBvYmplY3QgZm9yIG5vZGUiKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0SWZyYW1lRG9jdW1lbnQoaWZyYW1lRWwpIHsKICAgICAgICBpZiAodHlwZW9mIGlmcmFtZUVsLmNvbnRlbnREb2N1bWVudCAhPSBVTkRFRikgewogICAgICAgICAgICByZXR1cm4gaWZyYW1lRWwuY29udGVudERvY3VtZW50OwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlmcmFtZUVsLmNvbnRlbnRXaW5kb3cgIT0gVU5ERUYpIHsKICAgICAgICAgICAgcmV0dXJuIGlmcmFtZUVsLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJnZXRJZnJhbWVXaW5kb3c6IE5vIERvY3VtZW50IG9iamVjdCBmb3VuZCBmb3IgaWZyYW1lIGVsZW1lbnQiKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0SWZyYW1lV2luZG93KGlmcmFtZUVsKSB7CiAgICAgICAgaWYgKHR5cGVvZiBpZnJhbWVFbC5jb250ZW50V2luZG93ICE9IFVOREVGKSB7CiAgICAgICAgICAgIHJldHVybiBpZnJhbWVFbC5jb250ZW50V2luZG93OwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlmcmFtZUVsLmNvbnRlbnREb2N1bWVudCAhPSBVTkRFRikgewogICAgICAgICAgICByZXR1cm4gaWZyYW1lRWwuY29udGVudERvY3VtZW50LmRlZmF1bHRWaWV3OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiZ2V0SWZyYW1lV2luZG93OiBObyBXaW5kb3cgb2JqZWN0IGZvdW5kIGZvciBpZnJhbWUgZWxlbWVudCIpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBnZXRCb2R5KGRvYykgewogICAgICAgIHJldHVybiB1dGlsLmlzSG9zdE9iamVjdChkb2MsICJib2R5IikgPyBkb2MuYm9keSA6IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFJvb3RDb250YWluZXIobm9kZSkgewogICAgICAgIHZhciBwYXJlbnQ7CiAgICAgICAgd2hpbGUgKCAocGFyZW50ID0gbm9kZS5wYXJlbnROb2RlKSApIHsKICAgICAgICAgICAgbm9kZSA9IHBhcmVudDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CgogICAgZnVuY3Rpb24gY29tcGFyZVBvaW50cyhub2RlQSwgb2Zmc2V0QSwgbm9kZUIsIG9mZnNldEIpIHsKICAgICAgICAvLyBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTItVHJhdmVyc2FsLVJhbmdlL3Jhbmdlcy5odG1sI0xldmVsLTItUmFuZ2UtQ29tcGFyaW5nCiAgICAgICAgdmFyIG5vZGVDLCByb290LCBjaGlsZEEsIGNoaWxkQiwgbjsKICAgICAgICBpZiAobm9kZUEgPT0gbm9kZUIpIHsKCiAgICAgICAgICAgIC8vIENhc2UgMTogbm9kZXMgYXJlIHRoZSBzYW1lCiAgICAgICAgICAgIHJldHVybiBvZmZzZXRBID09PSBvZmZzZXRCID8gMCA6IChvZmZzZXRBIDwgb2Zmc2V0QikgPyAtMSA6IDE7CiAgICAgICAgfSBlbHNlIGlmICggKG5vZGVDID0gZ2V0Q2xvc2VzdEFuY2VzdG9ySW4obm9kZUIsIG5vZGVBLCB0cnVlKSkgKSB7CgogICAgICAgICAgICAvLyBDYXNlIDI6IG5vZGUgQyAoY29udGFpbmVyIEIgb3IgYW4gYW5jZXN0b3IpIGlzIGEgY2hpbGQgbm9kZSBvZiBBCiAgICAgICAgICAgIHJldHVybiBvZmZzZXRBIDw9IGdldE5vZGVJbmRleChub2RlQykgPyAtMSA6IDE7CiAgICAgICAgfSBlbHNlIGlmICggKG5vZGVDID0gZ2V0Q2xvc2VzdEFuY2VzdG9ySW4obm9kZUEsIG5vZGVCLCB0cnVlKSkgKSB7CgogICAgICAgICAgICAvLyBDYXNlIDM6IG5vZGUgQyAoY29udGFpbmVyIEEgb3IgYW4gYW5jZXN0b3IpIGlzIGEgY2hpbGQgbm9kZSBvZiBCCiAgICAgICAgICAgIHJldHVybiBnZXROb2RlSW5kZXgobm9kZUMpIDwgb2Zmc2V0QiAgPyAtMSA6IDE7CiAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAgIC8vIENhc2UgNDogY29udGFpbmVycyBhcmUgc2libGluZ3Mgb3IgZGVzY2VuZGFudHMgb2Ygc2libGluZ3MKICAgICAgICAgICAgcm9vdCA9IGdldENvbW1vbkFuY2VzdG9yKG5vZGVBLCBub2RlQik7CiAgICAgICAgICAgIGNoaWxkQSA9IChub2RlQSA9PT0gcm9vdCkgPyByb290IDogZ2V0Q2xvc2VzdEFuY2VzdG9ySW4obm9kZUEsIHJvb3QsIHRydWUpOwogICAgICAgICAgICBjaGlsZEIgPSAobm9kZUIgPT09IHJvb3QpID8gcm9vdCA6IGdldENsb3Nlc3RBbmNlc3RvckluKG5vZGVCLCByb290LCB0cnVlKTsKCiAgICAgICAgICAgIGlmIChjaGlsZEEgPT09IGNoaWxkQikgewogICAgICAgICAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgYmUgcG9zc2libGUKCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNvbXBhcmVQb2ludHMgZ290IHRvIGNhc2UgNCBhbmQgY2hpbGRBIGFuZCBjaGlsZEIgYXJlIHRoZSBzYW1lISIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbiA9IHJvb3QuZmlyc3RDaGlsZDsKICAgICAgICAgICAgICAgIHdoaWxlIChuKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG4gPT09IGNoaWxkQSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuID09PSBjaGlsZEIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIG4gPSBuLm5leHRTaWJsaW5nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJTaG91bGQgbm90IGJlIGhlcmUhIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZnJhZ21lbnRGcm9tTm9kZUNoaWxkcmVuKG5vZGUpIHsKICAgICAgICB2YXIgZnJhZ21lbnQgPSBnZXREb2N1bWVudChub2RlKS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGNoaWxkOwogICAgICAgIHdoaWxlICggKGNoaWxkID0gbm9kZS5maXJzdENoaWxkKSApIHsKICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoY2hpbGQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CiAgICB9CgogICAgZnVuY3Rpb24gaW5zcGVjdE5vZGUobm9kZSkgewogICAgICAgIGlmICghbm9kZSkgewogICAgICAgICAgICByZXR1cm4gIltObyBub2RlXSI7CiAgICAgICAgfQogICAgICAgIGlmIChpc0NoYXJhY3RlckRhdGFOb2RlKG5vZGUpKSB7CiAgICAgICAgICAgIHJldHVybiAnIicgKyBub2RlLmRhdGEgKyAnIic7CiAgICAgICAgfSBlbHNlIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHsKICAgICAgICAgICAgdmFyIGlkQXR0ciA9IG5vZGUuaWQgPyAnIGlkPSInICsgbm9kZS5pZCArICciJyA6ICIiOwogICAgICAgICAgICByZXR1cm4gIjwiICsgbm9kZS5ub2RlTmFtZSArIGlkQXR0ciArICI+WyIgKyBub2RlLmNoaWxkTm9kZXMubGVuZ3RoICsgIl0iOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBub2RlLm5vZGVOYW1lOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICovCiAgICBmdW5jdGlvbiBOb2RlSXRlcmF0b3Iocm9vdCkgewogICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7CiAgICAgICAgdGhpcy5fbmV4dCA9IHJvb3Q7CiAgICB9CgogICAgTm9kZUl0ZXJhdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICBfY3VycmVudDogbnVsbCwKCiAgICAgICAgaGFzTmV4dDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuX25leHQ7CiAgICAgICAgfSwKCiAgICAgICAgbmV4dDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBuID0gdGhpcy5fY3VycmVudCA9IHRoaXMuX25leHQ7CiAgICAgICAgICAgIHZhciBjaGlsZCwgbmV4dDsKICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQpIHsKICAgICAgICAgICAgICAgIGNoaWxkID0gbi5maXJzdENoaWxkOwogICAgICAgICAgICAgICAgaWYgKGNoaWxkKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmV4dCA9IGNoaWxkOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBuZXh0ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKG4gIT09IHRoaXMucm9vdCkgJiYgIShuZXh0ID0gbi5uZXh0U2libGluZykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4ucGFyZW50Tm9kZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmV4dCA9IG5leHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7CiAgICAgICAgfSwKCiAgICAgICAgZGV0YWNoOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdGhpcy5fY3VycmVudCA9IHRoaXMuX25leHQgPSB0aGlzLnJvb3QgPSBudWxsOwogICAgICAgIH0KICAgIH07CgogICAgZnVuY3Rpb24gY3JlYXRlSXRlcmF0b3Iocm9vdCkgewogICAgICAgIHJldHVybiBuZXcgTm9kZUl0ZXJhdG9yKHJvb3QpOwogICAgfQoKICAgIC8qKgogICAgICogQGNvbnN0cnVjdG9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIERvbVBvc2l0aW9uKG5vZGUsIG9mZnNldCkgewogICAgICAgIHRoaXMubm9kZSA9IG5vZGU7CiAgICAgICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7CiAgICB9CgogICAgRG9tUG9zaXRpb24ucHJvdG90eXBlID0gewogICAgICAgIGVxdWFsczogZnVuY3Rpb24ocG9zKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGUgPT09IHBvcy5ub2RlICYgdGhpcy5vZmZzZXQgPT0gcG9zLm9mZnNldDsKICAgICAgICB9LAoKICAgICAgICBpbnNwZWN0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuICJbRG9tUG9zaXRpb24oIiArIGluc3BlY3ROb2RlKHRoaXMubm9kZSkgKyAiOiIgKyB0aGlzLm9mZnNldCArICIpXSI7CiAgICAgICAgfQogICAgfTsKCiAgICAvKioKICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICovCiAgICBmdW5jdGlvbiBET01FeGNlcHRpb24oY29kZU5hbWUpIHsKICAgICAgICB0aGlzLmNvZGUgPSB0aGlzW2NvZGVOYW1lXTsKICAgICAgICB0aGlzLmNvZGVOYW1lID0gY29kZU5hbWU7CiAgICAgICAgdGhpcy5tZXNzYWdlID0gIkRPTUV4Y2VwdGlvbjogIiArIHRoaXMuY29kZU5hbWU7CiAgICB9CgogICAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IHsKICAgICAgICBJTkRFWF9TSVpFX0VSUjogMSwKICAgICAgICBISUVSQVJDSFlfUkVRVUVTVF9FUlI6IDMsCiAgICAgICAgV1JPTkdfRE9DVU1FTlRfRVJSOiA0LAogICAgICAgIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogNywKICAgICAgICBOT1RfRk9VTkRfRVJSOiA4LAogICAgICAgIE5PVF9TVVBQT1JURURfRVJSOiA5LAogICAgICAgIElOVkFMSURfU1RBVEVfRVJSOiAxMQogICAgfTsKCiAgICBET01FeGNlcHRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZTsKICAgIH07CgogICAgYXBpLmRvbSA9IHsKICAgICAgICBhcnJheUNvbnRhaW5zOiBhcnJheUNvbnRhaW5zLAogICAgICAgIGlzSHRtbE5hbWVzcGFjZTogaXNIdG1sTmFtZXNwYWNlLAogICAgICAgIHBhcmVudEVsZW1lbnQ6IHBhcmVudEVsZW1lbnQsCiAgICAgICAgZ2V0Tm9kZUluZGV4OiBnZXROb2RlSW5kZXgsCiAgICAgICAgZ2V0Tm9kZUxlbmd0aDogZ2V0Tm9kZUxlbmd0aCwKICAgICAgICBnZXRDb21tb25BbmNlc3RvcjogZ2V0Q29tbW9uQW5jZXN0b3IsCiAgICAgICAgaXNBbmNlc3Rvck9mOiBpc0FuY2VzdG9yT2YsCiAgICAgICAgZ2V0Q2xvc2VzdEFuY2VzdG9ySW46IGdldENsb3Nlc3RBbmNlc3RvckluLAogICAgICAgIGlzQ2hhcmFjdGVyRGF0YU5vZGU6IGlzQ2hhcmFjdGVyRGF0YU5vZGUsCiAgICAgICAgaW5zZXJ0QWZ0ZXI6IGluc2VydEFmdGVyLAogICAgICAgIHNwbGl0RGF0YU5vZGU6IHNwbGl0RGF0YU5vZGUsCiAgICAgICAgZ2V0RG9jdW1lbnQ6IGdldERvY3VtZW50LAogICAgICAgIGdldFdpbmRvdzogZ2V0V2luZG93LAogICAgICAgIGdldElmcmFtZVdpbmRvdzogZ2V0SWZyYW1lV2luZG93LAogICAgICAgIGdldElmcmFtZURvY3VtZW50OiBnZXRJZnJhbWVEb2N1bWVudCwKICAgICAgICBnZXRCb2R5OiBnZXRCb2R5LAogICAgICAgIGdldFJvb3RDb250YWluZXI6IGdldFJvb3RDb250YWluZXIsCiAgICAgICAgY29tcGFyZVBvaW50czogY29tcGFyZVBvaW50cywKICAgICAgICBpbnNwZWN0Tm9kZTogaW5zcGVjdE5vZGUsCiAgICAgICAgZnJhZ21lbnRGcm9tTm9kZUNoaWxkcmVuOiBmcmFnbWVudEZyb21Ob2RlQ2hpbGRyZW4sCiAgICAgICAgY3JlYXRlSXRlcmF0b3I6IGNyZWF0ZUl0ZXJhdG9yLAogICAgICAgIERvbVBvc2l0aW9uOiBEb21Qb3NpdGlvbgogICAgfTsKCiAgICBhcGkuRE9NRXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOwp9KTtyYW5neS5jcmVhdGVNb2R1bGUoIkRvbVJhbmdlIiwgZnVuY3Rpb24oYXBpLCBtb2R1bGUpIHsKICAgIGFwaS5yZXF1aXJlTW9kdWxlcyggWyJEb21VdGlsIl0gKTsKCgogICAgdmFyIGRvbSA9IGFwaS5kb207CiAgICB2YXIgRG9tUG9zaXRpb24gPSBkb20uRG9tUG9zaXRpb247CiAgICB2YXIgRE9NRXhjZXB0aW9uID0gYXBpLkRPTUV4Y2VwdGlvbjsKICAgIAogICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCiAgICAvLyBVdGlsaXR5IGZ1bmN0aW9ucwoKICAgIGZ1bmN0aW9uIGlzTm9uVGV4dFBhcnRpYWxseVNlbGVjdGVkKG5vZGUsIHJhbmdlKSB7CiAgICAgICAgcmV0dXJuIChub2RlLm5vZGVUeXBlICE9IDMpICYmCiAgICAgICAgICAgICAgIChkb20uaXNBbmNlc3Rvck9mKG5vZGUsIHJhbmdlLnN0YXJ0Q29udGFpbmVyLCB0cnVlKSB8fCBkb20uaXNBbmNlc3Rvck9mKG5vZGUsIHJhbmdlLmVuZENvbnRhaW5lciwgdHJ1ZSkpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFJhbmdlRG9jdW1lbnQocmFuZ2UpIHsKICAgICAgICByZXR1cm4gZG9tLmdldERvY3VtZW50KHJhbmdlLnN0YXJ0Q29udGFpbmVyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBkaXNwYXRjaEV2ZW50KHJhbmdlLCB0eXBlLCBhcmdzKSB7CiAgICAgICAgdmFyIGxpc3RlbmVycyA9IHJhbmdlLl9saXN0ZW5lcnNbdHlwZV07CiAgICAgICAgaWYgKGxpc3RlbmVycykgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uY2FsbChyYW5nZSwge3RhcmdldDogcmFuZ2UsIGFyZ3M6IGFyZ3N9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBnZXRCb3VuZGFyeUJlZm9yZU5vZGUobm9kZSkgewogICAgICAgIHJldHVybiBuZXcgRG9tUG9zaXRpb24obm9kZS5wYXJlbnROb2RlLCBkb20uZ2V0Tm9kZUluZGV4KG5vZGUpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRCb3VuZGFyeUFmdGVyTm9kZShub2RlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBEb21Qb3NpdGlvbihub2RlLnBhcmVudE5vZGUsIGRvbS5nZXROb2RlSW5kZXgobm9kZSkgKyAxKTsKICAgIH0KCiAgICBmdW5jdGlvbiBpbnNlcnROb2RlQXRQb3NpdGlvbihub2RlLCBuLCBvKSB7CiAgICAgICAgdmFyIGZpcnN0Tm9kZUluc2VydGVkID0gbm9kZS5ub2RlVHlwZSA9PSAxMSA/IG5vZGUuZmlyc3RDaGlsZCA6IG5vZGU7CiAgICAgICAgaWYgKGRvbS5pc0NoYXJhY3RlckRhdGFOb2RlKG4pKSB7CiAgICAgICAgICAgIGlmIChvID09IG4ubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBkb20uaW5zZXJ0QWZ0ZXIobm9kZSwgbik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBuLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIG8gPT0gMCA/IG4gOiBkb20uc3BsaXREYXRhTm9kZShuLCBvKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKG8gPj0gbi5jaGlsZE5vZGVzLmxlbmd0aCkgewogICAgICAgICAgICBuLmFwcGVuZENoaWxkKG5vZGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG4uaW5zZXJ0QmVmb3JlKG5vZGUsIG4uY2hpbGROb2Rlc1tvXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmaXJzdE5vZGVJbnNlcnRlZDsKICAgIH0KCiAgICBmdW5jdGlvbiBjbG9uZVN1YnRyZWUoaXRlcmF0b3IpIHsKICAgICAgICB2YXIgcGFydGlhbGx5U2VsZWN0ZWQ7CiAgICAgICAgZm9yICh2YXIgbm9kZSwgZnJhZyA9IGdldFJhbmdlRG9jdW1lbnQoaXRlcmF0b3IucmFuZ2UpLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwgc3ViSXRlcmF0b3I7IG5vZGUgPSBpdGVyYXRvci5uZXh0KCk7ICkgewogICAgICAgICAgICBwYXJ0aWFsbHlTZWxlY3RlZCA9IGl0ZXJhdG9yLmlzUGFydGlhbGx5U2VsZWN0ZWRTdWJ0cmVlKCk7CgogICAgICAgICAgICBub2RlID0gbm9kZS5jbG9uZU5vZGUoIXBhcnRpYWxseVNlbGVjdGVkKTsKICAgICAgICAgICAgaWYgKHBhcnRpYWxseVNlbGVjdGVkKSB7CiAgICAgICAgICAgICAgICBzdWJJdGVyYXRvciA9IGl0ZXJhdG9yLmdldFN1YnRyZWVJdGVyYXRvcigpOwogICAgICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChjbG9uZVN1YnRyZWUoc3ViSXRlcmF0b3IpKTsKICAgICAgICAgICAgICAgIHN1Ykl0ZXJhdG9yLmRldGFjaCh0cnVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMTApIHsgLy8gRG9jdW1lbnRUeXBlCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJISUVSQVJDSFlfUkVRVUVTVF9FUlIiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmcmFnLmFwcGVuZENoaWxkKG5vZGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZnJhZzsKICAgIH0KCiAgICBmdW5jdGlvbiBpdGVyYXRlU3VidHJlZShyYW5nZUl0ZXJhdG9yLCBmdW5jLCBpdGVyYXRvclN0YXRlKSB7CiAgICAgICAgdmFyIGl0LCBuOwogICAgICAgIGl0ZXJhdG9yU3RhdGUgPSBpdGVyYXRvclN0YXRlIHx8IHsgc3RvcDogZmFsc2UgfTsKICAgICAgICBmb3IgKHZhciBub2RlLCBzdWJSYW5nZUl0ZXJhdG9yOyBub2RlID0gcmFuZ2VJdGVyYXRvci5uZXh0KCk7ICkgewogICAgICAgICAgICAvL2xvZy5kZWJ1ZygiaXRlcmF0ZVN1YnRyZWUsIHBhcnRpYWxseSBzZWxlY3RlZDogIiArIHJhbmdlSXRlcmF0b3IuaXNQYXJ0aWFsbHlTZWxlY3RlZFN1YnRyZWUoKSwgbm9kZVRvU3RyaW5nKG5vZGUpKTsKICAgICAgICAgICAgaWYgKHJhbmdlSXRlcmF0b3IuaXNQYXJ0aWFsbHlTZWxlY3RlZFN1YnRyZWUoKSkgewogICAgICAgICAgICAgICAgLy8gVGhlIG5vZGUgaXMgcGFydGlhbGx5IHNlbGVjdGVkIGJ5IHRoZSBSYW5nZSwgc28gd2UgY2FuIHVzZSBhIG5ldyBSYW5nZUl0ZXJhdG9yIG9uIHRoZSBwb3J0aW9uIG9mIHRoZQogICAgICAgICAgICAgICAgLy8gbm9kZSBzZWxlY3RlZCBieSB0aGUgUmFuZ2UuCiAgICAgICAgICAgICAgICBpZiAoZnVuYyhub2RlKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvclN0YXRlLnN0b3AgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3ViUmFuZ2VJdGVyYXRvciA9IHJhbmdlSXRlcmF0b3IuZ2V0U3VidHJlZUl0ZXJhdG9yKCk7CiAgICAgICAgICAgICAgICAgICAgaXRlcmF0ZVN1YnRyZWUoc3ViUmFuZ2VJdGVyYXRvciwgZnVuYywgaXRlcmF0b3JTdGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgc3ViUmFuZ2VJdGVyYXRvci5kZXRhY2godHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yU3RhdGUuc3RvcCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gVGhlIHdob2xlIG5vZGUgaXMgc2VsZWN0ZWQsIHNvIHdlIGNhbiB1c2UgZWZmaWNpZW50IERPTSBpdGVyYXRpb24gdG8gaXRlcmF0ZSBvdmVyIHRoZSBub2RlIGFuZCBpdHMKICAgICAgICAgICAgICAgIC8vIGRlc2NlbmRhbnQKICAgICAgICAgICAgICAgIGl0ID0gZG9tLmNyZWF0ZUl0ZXJhdG9yKG5vZGUpOwogICAgICAgICAgICAgICAgd2hpbGUgKCAobiA9IGl0Lm5leHQoKSkgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmMobikgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yU3RhdGUuc3RvcCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZGVsZXRlU3VidHJlZShpdGVyYXRvcikgewogICAgICAgIHZhciBzdWJJdGVyYXRvcjsKICAgICAgICB3aGlsZSAoaXRlcmF0b3IubmV4dCgpKSB7CiAgICAgICAgICAgIGlmIChpdGVyYXRvci5pc1BhcnRpYWxseVNlbGVjdGVkU3VidHJlZSgpKSB7CiAgICAgICAgICAgICAgICBzdWJJdGVyYXRvciA9IGl0ZXJhdG9yLmdldFN1YnRyZWVJdGVyYXRvcigpOwogICAgICAgICAgICAgICAgZGVsZXRlU3VidHJlZShzdWJJdGVyYXRvcik7CiAgICAgICAgICAgICAgICBzdWJJdGVyYXRvci5kZXRhY2godHJ1ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5yZW1vdmUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBleHRyYWN0U3VidHJlZShpdGVyYXRvcikgewoKICAgICAgICBmb3IgKHZhciBub2RlLCBmcmFnID0gZ2V0UmFuZ2VEb2N1bWVudChpdGVyYXRvci5yYW5nZSkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLCBzdWJJdGVyYXRvcjsgbm9kZSA9IGl0ZXJhdG9yLm5leHQoKTsgKSB7CgoKICAgICAgICAgICAgaWYgKGl0ZXJhdG9yLmlzUGFydGlhbGx5U2VsZWN0ZWRTdWJ0cmVlKCkpIHsKICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLmNsb25lTm9kZShmYWxzZSk7CiAgICAgICAgICAgICAgICBzdWJJdGVyYXRvciA9IGl0ZXJhdG9yLmdldFN1YnRyZWVJdGVyYXRvcigpOwogICAgICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChleHRyYWN0U3VidHJlZShzdWJJdGVyYXRvcikpOwogICAgICAgICAgICAgICAgc3ViSXRlcmF0b3IuZGV0YWNoKHRydWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaXRlcmF0b3IucmVtb3ZlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMTApIHsgLy8gRG9jdW1lbnRUeXBlCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJISUVSQVJDSFlfUkVRVUVTVF9FUlIiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmcmFnLmFwcGVuZENoaWxkKG5vZGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZnJhZzsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXROb2Rlc0luUmFuZ2UocmFuZ2UsIG5vZGVUeXBlcywgZmlsdGVyKSB7CiAgICAgICAgLy9sb2cuaW5mbygiZ2V0Tm9kZXNJblJhbmdlLCAiICsgbm9kZVR5cGVzLmpvaW4oIiwiKSk7CiAgICAgICAgdmFyIGZpbHRlck5vZGVUeXBlcyA9ICEhKG5vZGVUeXBlcyAmJiBub2RlVHlwZXMubGVuZ3RoKSwgcmVnZXg7CiAgICAgICAgdmFyIGZpbHRlckV4aXN0cyA9ICEhZmlsdGVyOwogICAgICAgIGlmIChmaWx0ZXJOb2RlVHlwZXMpIHsKICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKCJeKCIgKyBub2RlVHlwZXMuam9pbigifCIpICsgIikkIik7CiAgICAgICAgfQoKICAgICAgICB2YXIgbm9kZXMgPSBbXTsKICAgICAgICBpdGVyYXRlU3VidHJlZShuZXcgUmFuZ2VJdGVyYXRvcihyYW5nZSwgZmFsc2UpLCBmdW5jdGlvbihub2RlKSB7CiAgICAgICAgICAgIGlmICgoIWZpbHRlck5vZGVUeXBlcyB8fCByZWdleC50ZXN0KG5vZGUubm9kZVR5cGUpKSAmJiAoIWZpbHRlckV4aXN0cyB8fCBmaWx0ZXIobm9kZSkpKSB7CiAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIG5vZGVzOwogICAgfQoKICAgIGZ1bmN0aW9uIGluc3BlY3QocmFuZ2UpIHsKICAgICAgICB2YXIgbmFtZSA9ICh0eXBlb2YgcmFuZ2UuZ2V0TmFtZSA9PSAidW5kZWZpbmVkIikgPyAiUmFuZ2UiIDogcmFuZ2UuZ2V0TmFtZSgpOwogICAgICAgIHJldHVybiAiWyIgKyBuYW1lICsgIigiICsgZG9tLmluc3BlY3ROb2RlKHJhbmdlLnN0YXJ0Q29udGFpbmVyKSArICI6IiArIHJhbmdlLnN0YXJ0T2Zmc2V0ICsgIiwgIiArCiAgICAgICAgICAgICAgICBkb20uaW5zcGVjdE5vZGUocmFuZ2UuZW5kQ29udGFpbmVyKSArICI6IiArIHJhbmdlLmVuZE9mZnNldCArICIpXSI7CiAgICB9CgogICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCiAgICAvLyBSYW5nZUl0ZXJhdG9yIGNvZGUgcGFydGlhbGx5IGJvcnJvd3MgZnJvbSBJRVJhbmdlIGJ5IFRpbSBSeWFuIChodHRwOi8vZ2l0aHViLmNvbS90aW1jYW1lcm9ucnlhbi9JRVJhbmdlKQoKICAgIC8qKgogICAgICogQGNvbnN0cnVjdG9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIFJhbmdlSXRlcmF0b3IocmFuZ2UsIGNsb25lUGFydGlhbGx5U2VsZWN0ZWRUZXh0Tm9kZXMpIHsKICAgICAgICB0aGlzLnJhbmdlID0gcmFuZ2U7CiAgICAgICAgdGhpcy5jbG9uZVBhcnRpYWxseVNlbGVjdGVkVGV4dE5vZGVzID0gY2xvbmVQYXJ0aWFsbHlTZWxlY3RlZFRleHROb2RlczsKCgoKICAgICAgICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkgewogICAgICAgICAgICB0aGlzLnNjID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7CiAgICAgICAgICAgIHRoaXMuc28gPSByYW5nZS5zdGFydE9mZnNldDsKICAgICAgICAgICAgdGhpcy5lYyA9IHJhbmdlLmVuZENvbnRhaW5lcjsKICAgICAgICAgICAgdGhpcy5lbyA9IHJhbmdlLmVuZE9mZnNldDsKICAgICAgICAgICAgdmFyIHJvb3QgPSByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjsKCiAgICAgICAgICAgIGlmICh0aGlzLnNjID09PSB0aGlzLmVjICYmIGRvbS5pc0NoYXJhY3RlckRhdGFOb2RlKHRoaXMuc2MpKSB7CiAgICAgICAgICAgICAgICB0aGlzLmlzU2luZ2xlQ2hhcmFjdGVyRGF0YU5vZGUgPSB0cnVlOwogICAgICAgICAgICAgICAgdGhpcy5fZmlyc3QgPSB0aGlzLl9sYXN0ID0gdGhpcy5fbmV4dCA9IHRoaXMuc2M7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLl9maXJzdCA9IHRoaXMuX25leHQgPSAodGhpcy5zYyA9PT0gcm9vdCAmJiAhZG9tLmlzQ2hhcmFjdGVyRGF0YU5vZGUodGhpcy5zYykpID8KICAgICAgICAgICAgICAgICAgICB0aGlzLnNjLmNoaWxkTm9kZXNbdGhpcy5zb10gOiBkb20uZ2V0Q2xvc2VzdEFuY2VzdG9ySW4odGhpcy5zYywgcm9vdCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0ID0gKHRoaXMuZWMgPT09IHJvb3QgJiYgIWRvbS5pc0NoYXJhY3RlckRhdGFOb2RlKHRoaXMuZWMpKSA/CiAgICAgICAgICAgICAgICAgICAgdGhpcy5lYy5jaGlsZE5vZGVzW3RoaXMuZW8gLSAxXSA6IGRvbS5nZXRDbG9zZXN0QW5jZXN0b3JJbih0aGlzLmVjLCByb290LCB0cnVlKTsKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICB9CgogICAgUmFuZ2VJdGVyYXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgX2N1cnJlbnQ6IG51bGwsCiAgICAgICAgX25leHQ6IG51bGwsCiAgICAgICAgX2ZpcnN0OiBudWxsLAogICAgICAgIF9sYXN0OiBudWxsLAogICAgICAgIGlzU2luZ2xlQ2hhcmFjdGVyRGF0YU5vZGU6IGZhbHNlLAoKICAgICAgICByZXNldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnQgPSBudWxsOwogICAgICAgICAgICB0aGlzLl9uZXh0ID0gdGhpcy5fZmlyc3Q7CiAgICAgICAgfSwKCiAgICAgICAgaGFzTmV4dDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuX25leHQ7CiAgICAgICAgfSwKCiAgICAgICAgbmV4dDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIC8vIE1vdmUgdG8gbmV4dCBub2RlCiAgICAgICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5fY3VycmVudCA9IHRoaXMuX25leHQ7CiAgICAgICAgICAgIGlmIChjdXJyZW50KSB7CiAgICAgICAgICAgICAgICB0aGlzLl9uZXh0ID0gKGN1cnJlbnQgIT09IHRoaXMuX2xhc3QpID8gY3VycmVudC5uZXh0U2libGluZyA6IG51bGw7CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHBhcnRpYWxseSBzZWxlY3RlZCB0ZXh0IG5vZGVzCiAgICAgICAgICAgICAgICBpZiAoZG9tLmlzQ2hhcmFjdGVyRGF0YU5vZGUoY3VycmVudCkgJiYgdGhpcy5jbG9uZVBhcnRpYWxseVNlbGVjdGVkVGV4dE5vZGVzKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT09IHRoaXMuZWMpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyZW50ID0gY3VycmVudC5jbG9uZU5vZGUodHJ1ZSkpLmRlbGV0ZURhdGEodGhpcy5lbywgY3VycmVudC5sZW5ndGggLSB0aGlzLmVvKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQgPT09IHRoaXMuc2MpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyZW50ID0gY3VycmVudC5jbG9uZU5vZGUodHJ1ZSkpLmRlbGV0ZURhdGEoMCwgdGhpcy5zbyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gY3VycmVudDsKICAgICAgICB9LAoKICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuX2N1cnJlbnQsIHN0YXJ0LCBlbmQ7CgogICAgICAgICAgICBpZiAoZG9tLmlzQ2hhcmFjdGVyRGF0YU5vZGUoY3VycmVudCkgJiYgKGN1cnJlbnQgPT09IHRoaXMuc2MgfHwgY3VycmVudCA9PT0gdGhpcy5lYykpIHsKICAgICAgICAgICAgICAgIHN0YXJ0ID0gKGN1cnJlbnQgPT09IHRoaXMuc2MpID8gdGhpcy5zbyA6IDA7CiAgICAgICAgICAgICAgICBlbmQgPSAoY3VycmVudCA9PT0gdGhpcy5lYykgPyB0aGlzLmVvIDogY3VycmVudC5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAoc3RhcnQgIT0gZW5kKSB7CiAgICAgICAgICAgICAgICAgICAgY3VycmVudC5kZWxldGVEYXRhKHN0YXJ0LCBlbmQgLSBzdGFydCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoY3VycmVudC5wYXJlbnROb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgY3VycmVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGN1cnJlbnQpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAvLyBDaGVja3MgaWYgdGhlIGN1cnJlbnQgbm9kZSBpcyBwYXJ0aWFsbHkgc2VsZWN0ZWQKICAgICAgICBpc1BhcnRpYWxseVNlbGVjdGVkU3VidHJlZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5fY3VycmVudDsKICAgICAgICAgICAgcmV0dXJuIGlzTm9uVGV4dFBhcnRpYWxseVNlbGVjdGVkKGN1cnJlbnQsIHRoaXMucmFuZ2UpOwogICAgICAgIH0sCgogICAgICAgIGdldFN1YnRyZWVJdGVyYXRvcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZTsKICAgICAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVDaGFyYWN0ZXJEYXRhTm9kZSkgewogICAgICAgICAgICAgICAgc3ViUmFuZ2UgPSB0aGlzLnJhbmdlLmNsb25lUmFuZ2UoKTsKICAgICAgICAgICAgICAgIHN1YlJhbmdlLmNvbGxhcHNlKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzdWJSYW5nZSA9IG5ldyBSYW5nZShnZXRSYW5nZURvY3VtZW50KHRoaXMucmFuZ2UpKTsKICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5fY3VycmVudDsKICAgICAgICAgICAgICAgIHZhciBzdGFydENvbnRhaW5lciA9IGN1cnJlbnQsIHN0YXJ0T2Zmc2V0ID0gMCwgZW5kQ29udGFpbmVyID0gY3VycmVudCwgZW5kT2Zmc2V0ID0gZG9tLmdldE5vZGVMZW5ndGgoY3VycmVudCk7CgogICAgICAgICAgICAgICAgaWYgKGRvbS5pc0FuY2VzdG9yT2YoY3VycmVudCwgdGhpcy5zYywgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICAgICBzdGFydENvbnRhaW5lciA9IHRoaXMuc2M7CiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSB0aGlzLnNvOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGRvbS5pc0FuY2VzdG9yT2YoY3VycmVudCwgdGhpcy5lYywgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICAgICBlbmRDb250YWluZXIgPSB0aGlzLmVjOwogICAgICAgICAgICAgICAgICAgIGVuZE9mZnNldCA9IHRoaXMuZW87CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdXBkYXRlQm91bmRhcmllcyhzdWJSYW5nZSwgc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0LCBlbmRDb250YWluZXIsIGVuZE9mZnNldCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZUl0ZXJhdG9yKHN1YlJhbmdlLCB0aGlzLmNsb25lUGFydGlhbGx5U2VsZWN0ZWRUZXh0Tm9kZXMpOwogICAgICAgIH0sCgogICAgICAgIGRldGFjaDogZnVuY3Rpb24oZGV0YWNoUmFuZ2UpIHsKICAgICAgICAgICAgaWYgKGRldGFjaFJhbmdlKSB7CiAgICAgICAgICAgICAgICB0aGlzLnJhbmdlLmRldGFjaCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMucmFuZ2UgPSB0aGlzLl9jdXJyZW50ID0gdGhpcy5fbmV4dCA9IHRoaXMuX2ZpcnN0ID0gdGhpcy5fbGFzdCA9IHRoaXMuc2MgPSB0aGlzLnNvID0gdGhpcy5lYyA9IHRoaXMuZW8gPSBudWxsOwogICAgICAgIH0KICAgIH07CgogICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCiAgICAvLyBFeGNlcHRpb25zCgogICAgLyoqCiAgICAgKiBAY29uc3RydWN0b3IKICAgICAqLwogICAgZnVuY3Rpb24gUmFuZ2VFeGNlcHRpb24oY29kZU5hbWUpIHsKICAgICAgICB0aGlzLmNvZGUgPSB0aGlzW2NvZGVOYW1lXTsKICAgICAgICB0aGlzLmNvZGVOYW1lID0gY29kZU5hbWU7CiAgICAgICAgdGhpcy5tZXNzYWdlID0gIlJhbmdlRXhjZXB0aW9uOiAiICsgdGhpcy5jb2RlTmFtZTsKICAgIH0KCiAgICBSYW5nZUV4Y2VwdGlvbi5wcm90b3R5cGUgPSB7CiAgICAgICAgQkFEX0JPVU5EQVJZUE9JTlRTX0VSUjogMSwKICAgICAgICBJTlZBTElEX05PREVfVFlQRV9FUlI6IDIKICAgIH07CgogICAgUmFuZ2VFeGNlcHRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZTsKICAgIH07CgogICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCiAgICAvKioKICAgICAqIEN1cnJlbnRseSBpdGVyYXRlcyB0aHJvdWdoIGFsbCBub2RlcyBpbiB0aGUgcmFuZ2Ugb24gY3JlYXRpb24gdW50aWwgSSB0aGluayBvZiBhIGRlY2VudCB3YXkgdG8gZG8gaXQKICAgICAqIFRPRE86IExvb2sgaW50byBtYWtpbmcgdGhpcyBhIHByb3BlciBpdGVyYXRvciwgbm90IHJlcXVpcmluZyBwcmVsb2FkaW5nIGV2ZXJ5dGhpbmcgZmlyc3QKICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICovCiAgICBmdW5jdGlvbiBSYW5nZU5vZGVJdGVyYXRvcihyYW5nZSwgbm9kZVR5cGVzLCBmaWx0ZXIpIHsKICAgICAgICB0aGlzLm5vZGVzID0gZ2V0Tm9kZXNJblJhbmdlKHJhbmdlLCBub2RlVHlwZXMsIGZpbHRlcik7CiAgICAgICAgdGhpcy5fbmV4dCA9IHRoaXMubm9kZXNbMF07CiAgICAgICAgdGhpcy5fcG9zaXRpb24gPSAwOwogICAgfQoKICAgIFJhbmdlTm9kZUl0ZXJhdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICBfY3VycmVudDogbnVsbCwKCiAgICAgICAgaGFzTmV4dDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuX25leHQ7CiAgICAgICAgfSwKCiAgICAgICAgbmV4dDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnQgPSB0aGlzLl9uZXh0OwogICAgICAgICAgICB0aGlzLl9uZXh0ID0gdGhpcy5ub2Rlc1sgKyt0aGlzLl9wb3NpdGlvbiBdOwogICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudDsKICAgICAgICB9LAoKICAgICAgICBkZXRhY2g6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0aGlzLl9jdXJyZW50ID0gdGhpcy5fbmV4dCA9IHRoaXMubm9kZXMgPSBudWxsOwogICAgICAgIH0KICAgIH07CgogICAgdmFyIGJlZm9yZUFmdGVyTm9kZVR5cGVzID0gWzEsIDMsIDQsIDUsIDcsIDgsIDEwXTsKICAgIHZhciByb290Q29udGFpbmVyTm9kZVR5cGVzID0gWzIsIDksIDExXTsKICAgIHZhciByZWFkb25seU5vZGVUeXBlcyA9IFs1LCA2LCAxMCwgMTJdOwogICAgdmFyIGluc2VydGFibGVOb2RlVHlwZXMgPSBbMSwgMywgNCwgNSwgNywgOCwgMTAsIDExXTsKICAgIHZhciBzdXJyb3VuZE5vZGVUeXBlcyA9IFsxLCAzLCA0LCA1LCA3LCA4XTsKCiAgICBmdW5jdGlvbiBjcmVhdGVBbmNlc3RvckZpbmRlcihub2RlVHlwZXMpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24obm9kZSwgc2VsZklzQW5jZXN0b3IpIHsKICAgICAgICAgICAgdmFyIHQsIG4gPSBzZWxmSXNBbmNlc3RvciA/IG5vZGUgOiBub2RlLnBhcmVudE5vZGU7CiAgICAgICAgICAgIHdoaWxlIChuKSB7CiAgICAgICAgICAgICAgICB0ID0gbi5ub2RlVHlwZTsKICAgICAgICAgICAgICAgIGlmIChkb20uYXJyYXlDb250YWlucyhub2RlVHlwZXMsIHQpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBuID0gbi5wYXJlbnROb2RlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH07CiAgICB9CgogICAgdmFyIGdldFJvb3RDb250YWluZXIgPSBkb20uZ2V0Um9vdENvbnRhaW5lcjsKICAgIHZhciBnZXREb2N1bWVudE9yRnJhZ21lbnRDb250YWluZXIgPSBjcmVhdGVBbmNlc3RvckZpbmRlciggWzksIDExXSApOwogICAgdmFyIGdldFJlYWRvbmx5QW5jZXN0b3IgPSBjcmVhdGVBbmNlc3RvckZpbmRlcihyZWFkb25seU5vZGVUeXBlcyk7CiAgICB2YXIgZ2V0RG9jVHlwZU5vdGF0aW9uRW50aXR5QW5jZXN0b3IgPSBjcmVhdGVBbmNlc3RvckZpbmRlciggWzYsIDEwLCAxMl0gKTsKCiAgICBmdW5jdGlvbiBhc3NlcnROb0RvY1R5cGVOb3RhdGlvbkVudGl0eUFuY2VzdG9yKG5vZGUsIGFsbG93U2VsZikgewogICAgICAgIGlmIChnZXREb2NUeXBlTm90YXRpb25FbnRpdHlBbmNlc3Rvcihub2RlLCBhbGxvd1NlbGYpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUV4Y2VwdGlvbigiSU5WQUxJRF9OT0RFX1RZUEVfRVJSIik7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGFzc2VydE5vdERldGFjaGVkKHJhbmdlKSB7CiAgICAgICAgaWYgKCFyYW5nZS5zdGFydENvbnRhaW5lcikgewogICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJJTlZBTElEX1NUQVRFX0VSUiIpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBhc3NlcnRWYWxpZE5vZGVUeXBlKG5vZGUsIGludmFsaWRUeXBlcykgewogICAgICAgIGlmICghZG9tLmFycmF5Q29udGFpbnMoaW52YWxpZFR5cGVzLCBub2RlLm5vZGVUeXBlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFeGNlcHRpb24oIklOVkFMSURfTk9ERV9UWVBFX0VSUiIpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBhc3NlcnRWYWxpZE9mZnNldChub2RlLCBvZmZzZXQpIHsKICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiAoZG9tLmlzQ2hhcmFjdGVyRGF0YU5vZGUobm9kZSkgPyBub2RlLmxlbmd0aCA6IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oIklOREVYX1NJWkVfRVJSIik7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGFzc2VydFNhbWVEb2N1bWVudE9yRnJhZ21lbnQobm9kZTEsIG5vZGUyKSB7CiAgICAgICAgaWYgKGdldERvY3VtZW50T3JGcmFnbWVudENvbnRhaW5lcihub2RlMSwgdHJ1ZSkgIT09IGdldERvY3VtZW50T3JGcmFnbWVudENvbnRhaW5lcihub2RlMiwgdHJ1ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbigiV1JPTkdfRE9DVU1FTlRfRVJSIik7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGFzc2VydE5vZGVOb3RSZWFkT25seShub2RlKSB7CiAgICAgICAgaWYgKGdldFJlYWRvbmx5QW5jZXN0b3Iobm9kZSwgdHJ1ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbigiTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSIik7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGFzc2VydE5vZGUobm9kZSwgY29kZU5hbWUpIHsKICAgICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihjb2RlTmFtZSk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGlzT3JwaGFuKG5vZGUpIHsKICAgICAgICByZXR1cm4gIWRvbS5hcnJheUNvbnRhaW5zKHJvb3RDb250YWluZXJOb2RlVHlwZXMsIG5vZGUubm9kZVR5cGUpICYmICFnZXREb2N1bWVudE9yRnJhZ21lbnRDb250YWluZXIobm9kZSwgdHJ1ZSk7CiAgICB9CgogICAgZnVuY3Rpb24gaXNWYWxpZE9mZnNldChub2RlLCBvZmZzZXQpIHsKICAgICAgICByZXR1cm4gb2Zmc2V0IDw9IChkb20uaXNDaGFyYWN0ZXJEYXRhTm9kZShub2RlKSA/IG5vZGUubGVuZ3RoIDogbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCk7CiAgICB9CgogICAgZnVuY3Rpb24gYXNzZXJ0UmFuZ2VWYWxpZChyYW5nZSkgewogICAgICAgIGFzc2VydE5vdERldGFjaGVkKHJhbmdlKTsKICAgICAgICBpZiAoaXNPcnBoYW4ocmFuZ2Uuc3RhcnRDb250YWluZXIpIHx8IGlzT3JwaGFuKHJhbmdlLmVuZENvbnRhaW5lcikgfHwKICAgICAgICAgICAgICAgICFpc1ZhbGlkT2Zmc2V0KHJhbmdlLnN0YXJ0Q29udGFpbmVyLCByYW5nZS5zdGFydE9mZnNldCkgfHwKICAgICAgICAgICAgICAgICFpc1ZhbGlkT2Zmc2V0KHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlJhbmdlIGVycm9yOiBSYW5nZSBpcyBubyBsb25nZXIgdmFsaWQgYWZ0ZXIgRE9NIG11dGF0aW9uICgiICsgcmFuZ2UuaW5zcGVjdCgpICsgIikiKTsKICAgICAgICB9CiAgICB9CgogICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCiAgICAvLyBUZXN0IHRoZSBicm93c2VyJ3MgaW5uZXJIVE1MIHN1cHBvcnQgdG8gZGVjaWRlIGhvdyB0byBpbXBsZW1lbnQgY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50CiAgICB2YXIgc3R5bGVFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICB2YXIgaHRtbFBhcnNpbmdDb25mb3JtcyA9IGZhbHNlOwogICAgdHJ5IHsKICAgICAgICBzdHlsZUVsLmlubmVySFRNTCA9ICI8Yj54PC9iPiI7CiAgICAgICAgaHRtbFBhcnNpbmdDb25mb3JtcyA9IChzdHlsZUVsLmZpcnN0Q2hpbGQubm9kZVR5cGUgPT0gMyk7IC8vIE9wZXJhIGluY29ycmVjdGx5IGNyZWF0ZXMgYW4gZWxlbWVudCBub2RlCiAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgLy8gSUUgNiBhbmQgNyB0aHJvdwogICAgfQoKICAgIGFwaS5mZWF0dXJlcy5odG1sUGFyc2luZ0NvbmZvcm1zID0gaHRtbFBhcnNpbmdDb25mb3JtczsKCiAgICB2YXIgY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50ID0gaHRtbFBhcnNpbmdDb25mb3JtcyA/CgogICAgICAgIC8vIEltcGxlbWVudGF0aW9uIGFzIHBlciBIVE1MIHBhcnNpbmcgc3BlYywgdHJ1c3RpbmcgaW4gdGhlIGJyb3dzZXIncyBpbXBsZW1lbnRhdGlvbiBvZiBpbm5lckhUTUwuIFNlZQogICAgICAgIC8vIGRpc2N1c3Npb24gYW5kIGJhc2UgY29kZSBmb3IgdGhpcyBpbXBsZW1lbnRhdGlvbiBhdCBpc3N1ZSA2Ny4KICAgICAgICAvLyBTcGVjOiBodHRwOi8vaHRtbDUub3JnL3NwZWNzL2RvbS1wYXJzaW5nLmh0bWwjZXh0ZW5zaW9ucy10by10aGUtcmFuZ2UtaW50ZXJmYWNlCiAgICAgICAgLy8gVGhhbmtzIHRvIEFsZWtzIFdpbGxpYW1zLgogICAgICAgIGZ1bmN0aW9uKGZyYWdtZW50U3RyKSB7CiAgICAgICAgICAgIC8vICJMZXQgbm9kZSB0aGUgY29udGV4dCBvYmplY3QncyBzdGFydCdzIG5vZGUuIgogICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnRDb250YWluZXI7CiAgICAgICAgICAgIHZhciBkb2MgPSBkb20uZ2V0RG9jdW1lbnQobm9kZSk7CgogICAgICAgICAgICAvLyAiSWYgdGhlIGNvbnRleHQgb2JqZWN0J3Mgc3RhcnQncyBub2RlIGlzIG51bGwsIHJhaXNlIGFuIElOVkFMSURfU1RBVEVfRVJSCiAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuIgogICAgICAgICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oIklOVkFMSURfU1RBVEVfRVJSIik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vICJMZXQgZWxlbWVudCBiZSBhcyBmb2xsb3dzLCBkZXBlbmRpbmcgb24gbm9kZSdzIGludGVyZmFjZToiCiAgICAgICAgICAgIC8vIERvY3VtZW50LCBEb2N1bWVudCBGcmFnbWVudDogbnVsbAogICAgICAgICAgICB2YXIgZWwgPSBudWxsOwoKICAgICAgICAgICAgLy8gIkVsZW1lbnQ6IG5vZGUiCiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHsKICAgICAgICAgICAgICAgIGVsID0gbm9kZTsKCiAgICAgICAgICAgIC8vICJUZXh0LCBDb21tZW50OiBub2RlJ3MgcGFyZW50RWxlbWVudCIKICAgICAgICAgICAgfSBlbHNlIGlmIChkb20uaXNDaGFyYWN0ZXJEYXRhTm9kZShub2RlKSkgewogICAgICAgICAgICAgICAgZWwgPSBkb20ucGFyZW50RWxlbWVudChub2RlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gIklmIGVpdGhlciBlbGVtZW50IGlzIG51bGwgb3IgZWxlbWVudCdzIG93bmVyRG9jdW1lbnQgaXMgYW4gSFRNTCBkb2N1bWVudAogICAgICAgICAgICAvLyBhbmQgZWxlbWVudCdzIGxvY2FsIG5hbWUgaXMgImh0bWwiIGFuZCBlbGVtZW50J3MgbmFtZXNwYWNlIGlzIHRoZSBIVE1MCiAgICAgICAgICAgIC8vIG5hbWVzcGFjZSIKICAgICAgICAgICAgaWYgKGVsID09PSBudWxsIHx8ICgKICAgICAgICAgICAgICAgIGVsLm5vZGVOYW1lID09ICJIVE1MIgogICAgICAgICAgICAgICAgJiYgZG9tLmlzSHRtbE5hbWVzcGFjZShkb20uZ2V0RG9jdW1lbnQoZWwpLmRvY3VtZW50RWxlbWVudCkKICAgICAgICAgICAgICAgICYmIGRvbS5pc0h0bWxOYW1lc3BhY2UoZWwpCiAgICAgICAgICAgICkpIHsKCiAgICAgICAgICAgIC8vICJsZXQgZWxlbWVudCBiZSBhIG5ldyBFbGVtZW50IHdpdGggImJvZHkiIGFzIGl0cyBsb2NhbCBuYW1lIGFuZCB0aGUgSFRNTAogICAgICAgICAgICAvLyBuYW1lc3BhY2UgYXMgaXRzIG5hbWVzcGFjZS4iIgogICAgICAgICAgICAgICAgZWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiYm9keSIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZWwgPSBlbC5jbG9uZU5vZGUoZmFsc2UpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyAiSWYgdGhlIG5vZGUncyBkb2N1bWVudCBpcyBhbiBIVE1MIGRvY3VtZW50OiBJbnZva2UgdGhlIEhUTUwgZnJhZ21lbnQgcGFyc2luZyBhbGdvcml0aG0uIgogICAgICAgICAgICAvLyAiSWYgdGhlIG5vZGUncyBkb2N1bWVudCBpcyBhbiBYTUwgZG9jdW1lbnQ6IEludm9rZSB0aGUgWE1MIGZyYWdtZW50IHBhcnNpbmcgYWxnb3JpdGhtLiIKICAgICAgICAgICAgLy8gIkluIGVpdGhlciBjYXNlLCB0aGUgYWxnb3JpdGhtIG11c3QgYmUgaW52b2tlZCB3aXRoIGZyYWdtZW50IGFzIHRoZSBpbnB1dAogICAgICAgICAgICAvLyBhbmQgZWxlbWVudCBhcyB0aGUgY29udGV4dCBlbGVtZW50LiIKICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gZnJhZ21lbnRTdHI7CgogICAgICAgICAgICAvLyAiSWYgdGhpcyByYWlzZXMgYW4gZXhjZXB0aW9uLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLiBPdGhlcndpc2UsIGxldCBuZXcKICAgICAgICAgICAgLy8gY2hpbGRyZW4gYmUgdGhlIG5vZGVzIHJldHVybmVkLiIKCiAgICAgICAgICAgIC8vICJMZXQgZnJhZ21lbnQgYmUgYSBuZXcgRG9jdW1lbnRGcmFnbWVudC4iCiAgICAgICAgICAgIC8vICJBcHBlbmQgYWxsIG5ldyBjaGlsZHJlbiB0byBmcmFnbWVudC4iCiAgICAgICAgICAgIC8vICJSZXR1cm4gZnJhZ21lbnQuIgogICAgICAgICAgICByZXR1cm4gZG9tLmZyYWdtZW50RnJvbU5vZGVDaGlsZHJlbihlbCk7CiAgICAgICAgfSA6CgogICAgICAgIC8vIEluIHRoaXMgY2FzZSwgaW5uZXJIVE1MIGNhbm5vdCBiZSB0cnVzdGVkLCBzbyBmYWxsIGJhY2sgdG8gYSBzaW1wbGVyLCBub24tY29uZm9ybWFudCBpbXBsZW1lbnRhdGlvbiB0aGF0CiAgICAgICAgLy8gcHJldmlvdXMgdmVyc2lvbnMgb2YgUmFuZ3kgdXNlZCAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIHVzaW5nIGEgYm9keSBlbGVtZW50IHJhdGhlciB0aGFuIGEgZGl2KQogICAgICAgIGZ1bmN0aW9uKGZyYWdtZW50U3RyKSB7CiAgICAgICAgICAgIGFzc2VydE5vdERldGFjaGVkKHRoaXMpOwogICAgICAgICAgICB2YXIgZG9jID0gZ2V0UmFuZ2VEb2N1bWVudCh0aGlzKTsKICAgICAgICAgICAgdmFyIGVsID0gZG9jLmNyZWF0ZUVsZW1lbnQoImJvZHkiKTsKICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gZnJhZ21lbnRTdHI7CgogICAgICAgICAgICByZXR1cm4gZG9tLmZyYWdtZW50RnJvbU5vZGVDaGlsZHJlbihlbCk7CiAgICAgICAgfTsKCiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKICAgIHZhciByYW5nZVByb3BlcnRpZXMgPSBbInN0YXJ0Q29udGFpbmVyIiwgInN0YXJ0T2Zmc2V0IiwgImVuZENvbnRhaW5lciIsICJlbmRPZmZzZXQiLCAiY29sbGFwc2VkIiwKICAgICAgICAiY29tbW9uQW5jZXN0b3JDb250YWluZXIiXTsKCiAgICB2YXIgczJzID0gMCwgczJlID0gMSwgZTJlID0gMiwgZTJzID0gMzsKICAgIHZhciBuX2IgPSAwLCBuX2EgPSAxLCBuX2JfYSA9IDIsIG5faSA9IDM7CgogICAgZnVuY3Rpb24gUmFuZ2VQcm90b3R5cGUoKSB7fQoKICAgIFJhbmdlUHJvdG90eXBlLnByb3RvdHlwZSA9IHsKICAgICAgICBhdHRhY2hMaXN0ZW5lcjogZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHsKICAgICAgICAgICAgdGhpcy5fbGlzdGVuZXJzW3R5cGVdLnB1c2gobGlzdGVuZXIpOwogICAgICAgIH0sCgogICAgICAgIGNvbXBhcmVCb3VuZGFyeVBvaW50czogZnVuY3Rpb24oaG93LCByYW5nZSkgewogICAgICAgICAgICBhc3NlcnRSYW5nZVZhbGlkKHRoaXMpOwogICAgICAgICAgICBhc3NlcnRTYW1lRG9jdW1lbnRPckZyYWdtZW50KHRoaXMuc3RhcnRDb250YWluZXIsIHJhbmdlLnN0YXJ0Q29udGFpbmVyKTsKCiAgICAgICAgICAgIHZhciBub2RlQSwgb2Zmc2V0QSwgbm9kZUIsIG9mZnNldEI7CiAgICAgICAgICAgIHZhciBwcmVmaXhBID0gKGhvdyA9PSBlMnMgfHwgaG93ID09IHMycykgPyAic3RhcnQiIDogImVuZCI7CiAgICAgICAgICAgIHZhciBwcmVmaXhCID0gKGhvdyA9PSBzMmUgfHwgaG93ID09IHMycykgPyAic3RhcnQiIDogImVuZCI7CiAgICAgICAgICAgIG5vZGVBID0gdGhpc1twcmVmaXhBICsgIkNvbnRhaW5lciJdOwogICAgICAgICAgICBvZmZzZXRBID0gdGhpc1twcmVmaXhBICsgIk9mZnNldCJdOwogICAgICAgICAgICBub2RlQiA9IHJhbmdlW3ByZWZpeEIgKyAiQ29udGFpbmVyIl07CiAgICAgICAgICAgIG9mZnNldEIgPSByYW5nZVtwcmVmaXhCICsgIk9mZnNldCJdOwogICAgICAgICAgICByZXR1cm4gZG9tLmNvbXBhcmVQb2ludHMobm9kZUEsIG9mZnNldEEsIG5vZGVCLCBvZmZzZXRCKTsKICAgICAgICB9LAoKICAgICAgICBpbnNlcnROb2RlOiBmdW5jdGlvbihub2RlKSB7CiAgICAgICAgICAgIGFzc2VydFJhbmdlVmFsaWQodGhpcyk7CiAgICAgICAgICAgIGFzc2VydFZhbGlkTm9kZVR5cGUobm9kZSwgaW5zZXJ0YWJsZU5vZGVUeXBlcyk7CiAgICAgICAgICAgIGFzc2VydE5vZGVOb3RSZWFkT25seSh0aGlzLnN0YXJ0Q29udGFpbmVyKTsKCiAgICAgICAgICAgIGlmIChkb20uaXNBbmNlc3Rvck9mKG5vZGUsIHRoaXMuc3RhcnRDb250YWluZXIsIHRydWUpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJISUVSQVJDSFlfUkVRVUVTVF9FUlIiKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gTm8gY2hlY2sgZm9yIHdoZXRoZXIgdGhlIGNvbnRhaW5lciBvZiB0aGUgc3RhcnQgb2YgdGhlIFJhbmdlIGlzIG9mIGEgdHlwZSB0aGF0IGRvZXMgbm90IGFsbG93CiAgICAgICAgICAgIC8vIGNoaWxkcmVuIG9mIHRoZSB0eXBlIG9mIG5vZGU6IHRoZSBicm93c2VyJ3MgRE9NIGltcGxlbWVudGF0aW9uIHNob3VsZCBkbyB0aGlzIGZvciB1cyB3aGVuIHdlIGF0dGVtcHQKICAgICAgICAgICAgLy8gdG8gYWRkIHRoZSBub2RlCgogICAgICAgICAgICB2YXIgZmlyc3ROb2RlSW5zZXJ0ZWQgPSBpbnNlcnROb2RlQXRQb3NpdGlvbihub2RlLCB0aGlzLnN0YXJ0Q29udGFpbmVyLCB0aGlzLnN0YXJ0T2Zmc2V0KTsKICAgICAgICAgICAgdGhpcy5zZXRTdGFydEJlZm9yZShmaXJzdE5vZGVJbnNlcnRlZCk7CiAgICAgICAgfSwKCiAgICAgICAgY2xvbmVDb250ZW50czogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGFzc2VydFJhbmdlVmFsaWQodGhpcyk7CgogICAgICAgICAgICB2YXIgY2xvbmUsIGZyYWc7CiAgICAgICAgICAgIGlmICh0aGlzLmNvbGxhcHNlZCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGdldFJhbmdlRG9jdW1lbnQodGhpcykuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhcnRDb250YWluZXIgPT09IHRoaXMuZW5kQ29udGFpbmVyICYmIGRvbS5pc0NoYXJhY3RlckRhdGFOb2RlKHRoaXMuc3RhcnRDb250YWluZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgY2xvbmUgPSB0aGlzLnN0YXJ0Q29udGFpbmVyLmNsb25lTm9kZSh0cnVlKTsKICAgICAgICAgICAgICAgICAgICBjbG9uZS5kYXRhID0gY2xvbmUuZGF0YS5zbGljZSh0aGlzLnN0YXJ0T2Zmc2V0LCB0aGlzLmVuZE9mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgZnJhZyA9IGdldFJhbmdlRG9jdW1lbnQodGhpcykuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgICAgICAgICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoY2xvbmUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBmcmFnOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgUmFuZ2VJdGVyYXRvcih0aGlzLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICBjbG9uZSA9IGNsb25lU3VidHJlZShpdGVyYXRvcik7CiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IuZGV0YWNoKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gY2xvbmU7CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBjYW5TdXJyb3VuZENvbnRlbnRzOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgYXNzZXJ0UmFuZ2VWYWxpZCh0aGlzKTsKICAgICAgICAgICAgYXNzZXJ0Tm9kZU5vdFJlYWRPbmx5KHRoaXMuc3RhcnRDb250YWluZXIpOwogICAgICAgICAgICBhc3NlcnROb2RlTm90UmVhZE9ubHkodGhpcy5lbmRDb250YWluZXIpOwoKICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNvbnRlbnRzIGNhbiBiZSBzdXJyb3VuZGVkLiBTcGVjaWZpY2FsbHksIHRoaXMgbWVhbnMgd2hldGhlciB0aGUgcmFuZ2UgcGFydGlhbGx5IHNlbGVjdHMKICAgICAgICAgICAgLy8gbm8gbm9uLXRleHQgbm9kZXMuCiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBSYW5nZUl0ZXJhdG9yKHRoaXMsIHRydWUpOwogICAgICAgICAgICB2YXIgYm91bmRhcmllc0ludmFsaWQgPSAoaXRlcmF0b3IuX2ZpcnN0ICYmIChpc05vblRleHRQYXJ0aWFsbHlTZWxlY3RlZChpdGVyYXRvci5fZmlyc3QsIHRoaXMpKSB8fAogICAgICAgICAgICAgICAgICAgIChpdGVyYXRvci5fbGFzdCAmJiBpc05vblRleHRQYXJ0aWFsbHlTZWxlY3RlZChpdGVyYXRvci5fbGFzdCwgdGhpcykpKTsKICAgICAgICAgICAgaXRlcmF0b3IuZGV0YWNoKCk7CiAgICAgICAgICAgIHJldHVybiAhYm91bmRhcmllc0ludmFsaWQ7CiAgICAgICAgfSwKCiAgICAgICAgc3Vycm91bmRDb250ZW50czogZnVuY3Rpb24obm9kZSkgewogICAgICAgICAgICBhc3NlcnRWYWxpZE5vZGVUeXBlKG5vZGUsIHN1cnJvdW5kTm9kZVR5cGVzKTsKCiAgICAgICAgICAgIGlmICghdGhpcy5jYW5TdXJyb3VuZENvbnRlbnRzKCkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUV4Y2VwdGlvbigiQkFEX0JPVU5EQVJZUE9JTlRTX0VSUiIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBFeHRyYWN0IHRoZSBjb250ZW50cwogICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuZXh0cmFjdENvbnRlbnRzKCk7CgogICAgICAgICAgICAvLyBDbGVhciB0aGUgY2hpbGRyZW4gb2YgdGhlIG5vZGUKICAgICAgICAgICAgaWYgKG5vZGUuaGFzQ2hpbGROb2RlcygpKSB7CiAgICAgICAgICAgICAgICB3aGlsZSAobm9kZS5sYXN0Q2hpbGQpIHsKICAgICAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUNoaWxkKG5vZGUubGFzdENoaWxkKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBuZXcgbm9kZSBhbmQgYWRkIHRoZSBleHRyYWN0ZWQgY29udGVudHMKICAgICAgICAgICAgaW5zZXJ0Tm9kZUF0UG9zaXRpb24obm9kZSwgdGhpcy5zdGFydENvbnRhaW5lciwgdGhpcy5zdGFydE9mZnNldCk7CiAgICAgICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQoY29udGVudCk7CgogICAgICAgICAgICB0aGlzLnNlbGVjdE5vZGUobm9kZSk7CiAgICAgICAgfSwKCiAgICAgICAgY2xvbmVSYW5nZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGFzc2VydFJhbmdlVmFsaWQodGhpcyk7CiAgICAgICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShnZXRSYW5nZURvY3VtZW50KHRoaXMpKTsKICAgICAgICAgICAgdmFyIGkgPSByYW5nZVByb3BlcnRpZXMubGVuZ3RoLCBwcm9wOwogICAgICAgICAgICB3aGlsZSAoaS0tKSB7CiAgICAgICAgICAgICAgICBwcm9wID0gcmFuZ2VQcm9wZXJ0aWVzW2ldOwogICAgICAgICAgICAgICAgcmFuZ2VbcHJvcF0gPSB0aGlzW3Byb3BdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9LAoKICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGFzc2VydFJhbmdlVmFsaWQodGhpcyk7CiAgICAgICAgICAgIHZhciBzYyA9IHRoaXMuc3RhcnRDb250YWluZXI7CiAgICAgICAgICAgIGlmIChzYyA9PT0gdGhpcy5lbmRDb250YWluZXIgJiYgZG9tLmlzQ2hhcmFjdGVyRGF0YU5vZGUoc2MpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gKHNjLm5vZGVUeXBlID09IDMgfHwgc2Mubm9kZVR5cGUgPT0gNCkgPyBzYy5kYXRhLnNsaWNlKHRoaXMuc3RhcnRPZmZzZXQsIHRoaXMuZW5kT2Zmc2V0KSA6ICIiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFyIHRleHRCaXRzID0gW10sIGl0ZXJhdG9yID0gbmV3IFJhbmdlSXRlcmF0b3IodGhpcywgdHJ1ZSk7CgogICAgICAgICAgICAgICAgaXRlcmF0ZVN1YnRyZWUoaXRlcmF0b3IsIGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgICAgICAgICAgICAgICAvLyBBY2NlcHQgb25seSB0ZXh0IG9yIENEQVRBIG5vZGVzLCBub3QgY29tbWVudHMKCiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMyB8fCBub2RlLm5vZGVUeXBlID09IDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEJpdHMucHVzaChub2RlLmRhdGEpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgaXRlcmF0b3IuZGV0YWNoKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGV4dEJpdHMuam9pbigiIik7CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAvLyBUaGUgbWV0aG9kcyBiZWxvdyBhcmUgYWxsIG5vbi1zdGFuZGFyZC4gVGhlIGZvbGxvd2luZyBiYXRjaCB3ZXJlIGludHJvZHVjZWQgYnkgTW96aWxsYSBidXQgaGF2ZSBzaW5jZQogICAgICAgIC8vIGJlZW4gcmVtb3ZlZCBmcm9tIE1vemlsbGEuCgogICAgICAgIGNvbXBhcmVOb2RlOiBmdW5jdGlvbihub2RlKSB7CiAgICAgICAgICAgIGFzc2VydFJhbmdlVmFsaWQodGhpcyk7CgogICAgICAgICAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnROb2RlOwogICAgICAgICAgICB2YXIgbm9kZUluZGV4ID0gZG9tLmdldE5vZGVJbmRleChub2RlKTsKCiAgICAgICAgICAgIGlmICghcGFyZW50KSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJOT1RfRk9VTkRfRVJSIik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBzdGFydENvbXBhcmlzb24gPSB0aGlzLmNvbXBhcmVQb2ludChwYXJlbnQsIG5vZGVJbmRleCksCiAgICAgICAgICAgICAgICBlbmRDb21wYXJpc29uID0gdGhpcy5jb21wYXJlUG9pbnQocGFyZW50LCBub2RlSW5kZXggKyAxKTsKCiAgICAgICAgICAgIGlmIChzdGFydENvbXBhcmlzb24gPCAwKSB7IC8vIE5vZGUgc3RhcnRzIGJlZm9yZQogICAgICAgICAgICAgICAgcmV0dXJuIChlbmRDb21wYXJpc29uID4gMCkgPyBuX2JfYSA6IG5fYjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAoZW5kQ29tcGFyaXNvbiA+IDApID8gbl9hIDogbl9pOwogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgY29tcGFyZVBvaW50OiBmdW5jdGlvbihub2RlLCBvZmZzZXQpIHsKICAgICAgICAgICAgYXNzZXJ0UmFuZ2VWYWxpZCh0aGlzKTsKICAgICAgICAgICAgYXNzZXJ0Tm9kZShub2RlLCAiSElFUkFSQ0hZX1JFUVVFU1RfRVJSIik7CiAgICAgICAgICAgIGFzc2VydFNhbWVEb2N1bWVudE9yRnJhZ21lbnQobm9kZSwgdGhpcy5zdGFydENvbnRhaW5lcik7CgogICAgICAgICAgICBpZiAoZG9tLmNvbXBhcmVQb2ludHMobm9kZSwgb2Zmc2V0LCB0aGlzLnN0YXJ0Q29udGFpbmVyLCB0aGlzLnN0YXJ0T2Zmc2V0KSA8IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgfSBlbHNlIGlmIChkb20uY29tcGFyZVBvaW50cyhub2RlLCBvZmZzZXQsIHRoaXMuZW5kQ29udGFpbmVyLCB0aGlzLmVuZE9mZnNldCkgPiAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9LAoKICAgICAgICBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQ6IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCwKCiAgICAgICAgdG9IdG1sOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgYXNzZXJ0UmFuZ2VWYWxpZCh0aGlzKTsKICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGdldFJhbmdlRG9jdW1lbnQodGhpcykuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmNsb25lQ29udGVudHMoKSk7CiAgICAgICAgICAgIHJldHVybiBjb250YWluZXIuaW5uZXJIVE1MOwogICAgICAgIH0sCgogICAgICAgIC8vIHRvdWNoaW5nSXNJbnRlcnNlY3RpbmcgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXMgbWV0aG9kIGNvbnNpZGVycyBhIG5vZGUgdGhhdCBib3JkZXJzIGEgcmFuZ2UgaW50ZXJzZWN0cwogICAgICAgIC8vIHdpdGggaXQgKGFzIGluIFdlYktpdCkgb3Igbm90IChhcyBpbiBHZWNrbyBwcmUtMS45LCBhbmQgdGhlIGRlZmF1bHQpCiAgICAgICAgaW50ZXJzZWN0c05vZGU6IGZ1bmN0aW9uKG5vZGUsIHRvdWNoaW5nSXNJbnRlcnNlY3RpbmcpIHsKICAgICAgICAgICAgYXNzZXJ0UmFuZ2VWYWxpZCh0aGlzKTsKICAgICAgICAgICAgYXNzZXJ0Tm9kZShub2RlLCAiTk9UX0ZPVU5EX0VSUiIpOwogICAgICAgICAgICBpZiAoZG9tLmdldERvY3VtZW50KG5vZGUpICE9PSBnZXRSYW5nZURvY3VtZW50KHRoaXMpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUsIG9mZnNldCA9IGRvbS5nZXROb2RlSW5kZXgobm9kZSk7CiAgICAgICAgICAgIGFzc2VydE5vZGUocGFyZW50LCAiTk9UX0ZPVU5EX0VSUiIpOwoKICAgICAgICAgICAgdmFyIHN0YXJ0Q29tcGFyaXNvbiA9IGRvbS5jb21wYXJlUG9pbnRzKHBhcmVudCwgb2Zmc2V0LCB0aGlzLmVuZENvbnRhaW5lciwgdGhpcy5lbmRPZmZzZXQpLAogICAgICAgICAgICAgICAgZW5kQ29tcGFyaXNvbiA9IGRvbS5jb21wYXJlUG9pbnRzKHBhcmVudCwgb2Zmc2V0ICsgMSwgdGhpcy5zdGFydENvbnRhaW5lciwgdGhpcy5zdGFydE9mZnNldCk7CgogICAgICAgICAgICByZXR1cm4gdG91Y2hpbmdJc0ludGVyc2VjdGluZyA/IHN0YXJ0Q29tcGFyaXNvbiA8PSAwICYmIGVuZENvbXBhcmlzb24gPj0gMCA6IHN0YXJ0Q29tcGFyaXNvbiA8IDAgJiYgZW5kQ29tcGFyaXNvbiA+IDA7CiAgICAgICAgfSwKCgogICAgICAgIGlzUG9pbnRJblJhbmdlOiBmdW5jdGlvbihub2RlLCBvZmZzZXQpIHsKICAgICAgICAgICAgYXNzZXJ0UmFuZ2VWYWxpZCh0aGlzKTsKICAgICAgICAgICAgYXNzZXJ0Tm9kZShub2RlLCAiSElFUkFSQ0hZX1JFUVVFU1RfRVJSIik7CiAgICAgICAgICAgIGFzc2VydFNhbWVEb2N1bWVudE9yRnJhZ21lbnQobm9kZSwgdGhpcy5zdGFydENvbnRhaW5lcik7CgogICAgICAgICAgICByZXR1cm4gKGRvbS5jb21wYXJlUG9pbnRzKG5vZGUsIG9mZnNldCwgdGhpcy5zdGFydENvbnRhaW5lciwgdGhpcy5zdGFydE9mZnNldCkgPj0gMCkgJiYKICAgICAgICAgICAgICAgICAgIChkb20uY29tcGFyZVBvaW50cyhub2RlLCBvZmZzZXQsIHRoaXMuZW5kQ29udGFpbmVyLCB0aGlzLmVuZE9mZnNldCkgPD0gMCk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gVGhlIG1ldGhvZHMgYmVsb3cgYXJlIG5vbi1zdGFuZGFyZCBhbmQgaW52ZW50ZWQgYnkgbWUuCgogICAgICAgIC8vIFNoYXJpbmcgYSBib3VuZGFyeSBzdGFydC10by1lbmQgb3IgZW5kLXRvLXN0YXJ0IGRvZXMgbm90IGNvdW50IGFzIGludGVyc2VjdGlvbi4KICAgICAgICBpbnRlcnNlY3RzUmFuZ2U6IGZ1bmN0aW9uKHJhbmdlLCB0b3VjaGluZ0lzSW50ZXJzZWN0aW5nKSB7CiAgICAgICAgICAgIGFzc2VydFJhbmdlVmFsaWQodGhpcyk7CgogICAgICAgICAgICBpZiAoZ2V0UmFuZ2VEb2N1bWVudChyYW5nZSkgIT0gZ2V0UmFuZ2VEb2N1bWVudCh0aGlzKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbigiV1JPTkdfRE9DVU1FTlRfRVJSIik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBzdGFydENvbXBhcmlzb24gPSBkb20uY29tcGFyZVBvaW50cyh0aGlzLnN0YXJ0Q29udGFpbmVyLCB0aGlzLnN0YXJ0T2Zmc2V0LCByYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCksCiAgICAgICAgICAgICAgICBlbmRDb21wYXJpc29uID0gZG9tLmNvbXBhcmVQb2ludHModGhpcy5lbmRDb250YWluZXIsIHRoaXMuZW5kT2Zmc2V0LCByYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2Uuc3RhcnRPZmZzZXQpOwoKICAgICAgICAgICAgcmV0dXJuIHRvdWNoaW5nSXNJbnRlcnNlY3RpbmcgPyBzdGFydENvbXBhcmlzb24gPD0gMCAmJiBlbmRDb21wYXJpc29uID49IDAgOiBzdGFydENvbXBhcmlzb24gPCAwICYmIGVuZENvbXBhcmlzb24gPiAwOwogICAgICAgIH0sCgogICAgICAgIGludGVyc2VjdGlvbjogZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICAgICAgaWYgKHRoaXMuaW50ZXJzZWN0c1JhbmdlKHJhbmdlKSkgewogICAgICAgICAgICAgICAgdmFyIHN0YXJ0Q29tcGFyaXNvbiA9IGRvbS5jb21wYXJlUG9pbnRzKHRoaXMuc3RhcnRDb250YWluZXIsIHRoaXMuc3RhcnRPZmZzZXQsIHJhbmdlLnN0YXJ0Q29udGFpbmVyLCByYW5nZS5zdGFydE9mZnNldCksCiAgICAgICAgICAgICAgICAgICAgZW5kQ29tcGFyaXNvbiA9IGRvbS5jb21wYXJlUG9pbnRzKHRoaXMuZW5kQ29udGFpbmVyLCB0aGlzLmVuZE9mZnNldCwgcmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpOwoKICAgICAgICAgICAgICAgIHZhciBpbnRlcnNlY3Rpb25SYW5nZSA9IHRoaXMuY2xvbmVSYW5nZSgpOwoKICAgICAgICAgICAgICAgIGlmIChzdGFydENvbXBhcmlzb24gPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb25SYW5nZS5zZXRTdGFydChyYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2Uuc3RhcnRPZmZzZXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGVuZENvbXBhcmlzb24gPT0gMSkgewogICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvblJhbmdlLnNldEVuZChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJzZWN0aW9uUmFuZ2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfSwKCiAgICAgICAgdW5pb246IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmludGVyc2VjdHNSYW5nZShyYW5nZSwgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgIHZhciB1bmlvblJhbmdlID0gdGhpcy5jbG9uZVJhbmdlKCk7CiAgICAgICAgICAgICAgICBpZiAoZG9tLmNvbXBhcmVQb2ludHMocmFuZ2Uuc3RhcnRDb250YWluZXIsIHJhbmdlLnN0YXJ0T2Zmc2V0LCB0aGlzLnN0YXJ0Q29udGFpbmVyLCB0aGlzLnN0YXJ0T2Zmc2V0KSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHVuaW9uUmFuZ2Uuc2V0U3RhcnQocmFuZ2Uuc3RhcnRDb250YWluZXIsIHJhbmdlLnN0YXJ0T2Zmc2V0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChkb20uY29tcGFyZVBvaW50cyhyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCwgdGhpcy5lbmRDb250YWluZXIsIHRoaXMuZW5kT2Zmc2V0KSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgdW5pb25SYW5nZS5zZXRFbmQocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHVuaW9uUmFuZ2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFeGNlcHRpb24oIlJhbmdlcyBkbyBub3QgaW50ZXJzZWN0Iik7CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBjb250YWluc05vZGU6IGZ1bmN0aW9uKG5vZGUsIGFsbG93UGFydGlhbCkgewogICAgICAgICAgICBpZiAoYWxsb3dQYXJ0aWFsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnRlcnNlY3RzTm9kZShub2RlLCBmYWxzZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlTm9kZShub2RlKSA9PSBuX2k7CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBjb250YWluc05vZGVDb250ZW50czogZnVuY3Rpb24obm9kZSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlUG9pbnQobm9kZSwgMCkgPj0gMCAmJiB0aGlzLmNvbXBhcmVQb2ludChub2RlLCBkb20uZ2V0Tm9kZUxlbmd0aChub2RlKSkgPD0gMDsKICAgICAgICB9LAoKICAgICAgICBjb250YWluc1JhbmdlOiBmdW5jdGlvbihyYW5nZSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5pbnRlcnNlY3Rpb24ocmFuZ2UpLmVxdWFscyhyYW5nZSk7CiAgICAgICAgfSwKCiAgICAgICAgY29udGFpbnNOb2RlVGV4dDogZnVuY3Rpb24obm9kZSkgewogICAgICAgICAgICB2YXIgbm9kZVJhbmdlID0gdGhpcy5jbG9uZVJhbmdlKCk7CiAgICAgICAgICAgIG5vZGVSYW5nZS5zZWxlY3ROb2RlKG5vZGUpOwogICAgICAgICAgICB2YXIgdGV4dE5vZGVzID0gbm9kZVJhbmdlLmdldE5vZGVzKFszXSk7CiAgICAgICAgICAgIGlmICh0ZXh0Tm9kZXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgbm9kZVJhbmdlLnNldFN0YXJ0KHRleHROb2Rlc1swXSwgMCk7CiAgICAgICAgICAgICAgICB2YXIgbGFzdFRleHROb2RlID0gdGV4dE5vZGVzLnBvcCgpOwogICAgICAgICAgICAgICAgbm9kZVJhbmdlLnNldEVuZChsYXN0VGV4dE5vZGUsIGxhc3RUZXh0Tm9kZS5sZW5ndGgpOwogICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5zID0gdGhpcy5jb250YWluc1JhbmdlKG5vZGVSYW5nZSk7CiAgICAgICAgICAgICAgICBub2RlUmFuZ2UuZGV0YWNoKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbnM7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluc05vZGVDb250ZW50cyhub2RlKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIGNyZWF0ZU5vZGVJdGVyYXRvcjogZnVuY3Rpb24obm9kZVR5cGVzLCBmaWx0ZXIpIHsKICAgICAgICAgICAgYXNzZXJ0UmFuZ2VWYWxpZCh0aGlzKTsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZU5vZGVJdGVyYXRvcih0aGlzLCBub2RlVHlwZXMsIGZpbHRlcik7CiAgICAgICAgfSwKCiAgICAgICAgZ2V0Tm9kZXM6IGZ1bmN0aW9uKG5vZGVUeXBlcywgZmlsdGVyKSB7CiAgICAgICAgICAgIGFzc2VydFJhbmdlVmFsaWQodGhpcyk7CiAgICAgICAgICAgIHJldHVybiBnZXROb2Rlc0luUmFuZ2UodGhpcywgbm9kZVR5cGVzLCBmaWx0ZXIpOwogICAgICAgIH0sCgogICAgICAgIGdldERvY3VtZW50OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIGdldFJhbmdlRG9jdW1lbnQodGhpcyk7CiAgICAgICAgfSwKCiAgICAgICAgY29sbGFwc2VCZWZvcmU6IGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgICAgICAgYXNzZXJ0Tm90RGV0YWNoZWQodGhpcyk7CgogICAgICAgICAgICB0aGlzLnNldEVuZEJlZm9yZShub2RlKTsKICAgICAgICAgICAgdGhpcy5jb2xsYXBzZShmYWxzZSk7CiAgICAgICAgfSwKCiAgICAgICAgY29sbGFwc2VBZnRlcjogZnVuY3Rpb24obm9kZSkgewogICAgICAgICAgICBhc3NlcnROb3REZXRhY2hlZCh0aGlzKTsKCiAgICAgICAgICAgIHRoaXMuc2V0U3RhcnRBZnRlcihub2RlKTsKICAgICAgICAgICAgdGhpcy5jb2xsYXBzZSh0cnVlKTsKICAgICAgICB9LAoKICAgICAgICBnZXROYW1lOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuICJEb21SYW5nZSI7CiAgICAgICAgfSwKCiAgICAgICAgZXF1YWxzOiBmdW5jdGlvbihyYW5nZSkgewogICAgICAgICAgICByZXR1cm4gUmFuZ2UucmFuZ2VzRXF1YWwodGhpcywgcmFuZ2UpOwogICAgICAgIH0sCgogICAgICAgIGluc3BlY3Q6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gaW5zcGVjdCh0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIGZ1bmN0aW9uIGNvcHlDb21wYXJpc29uQ29uc3RhbnRzVG9PYmplY3Qob2JqKSB7CiAgICAgICAgb2JqLlNUQVJUX1RPX1NUQVJUID0gczJzOwogICAgICAgIG9iai5TVEFSVF9UT19FTkQgPSBzMmU7CiAgICAgICAgb2JqLkVORF9UT19FTkQgPSBlMmU7CiAgICAgICAgb2JqLkVORF9UT19TVEFSVCA9IGUyczsKCiAgICAgICAgb2JqLk5PREVfQkVGT1JFID0gbl9iOwogICAgICAgIG9iai5OT0RFX0FGVEVSID0gbl9hOwogICAgICAgIG9iai5OT0RFX0JFRk9SRV9BTkRfQUZURVIgPSBuX2JfYTsKICAgICAgICBvYmouTk9ERV9JTlNJREUgPSBuX2k7CiAgICB9CgogICAgZnVuY3Rpb24gY29weUNvbXBhcmlzb25Db25zdGFudHMoY29uc3RydWN0b3IpIHsKICAgICAgICBjb3B5Q29tcGFyaXNvbkNvbnN0YW50c1RvT2JqZWN0KGNvbnN0cnVjdG9yKTsKICAgICAgICBjb3B5Q29tcGFyaXNvbkNvbnN0YW50c1RvT2JqZWN0KGNvbnN0cnVjdG9yLnByb3RvdHlwZSk7CiAgICB9CgogICAgZnVuY3Rpb24gY3JlYXRlUmFuZ2VDb250ZW50UmVtb3ZlcihyZW1vdmVyLCBib3VuZGFyeVVwZGF0ZXIpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGFzc2VydFJhbmdlVmFsaWQodGhpcyk7CgogICAgICAgICAgICB2YXIgc2MgPSB0aGlzLnN0YXJ0Q29udGFpbmVyLCBzbyA9IHRoaXMuc3RhcnRPZmZzZXQsIHJvb3QgPSB0aGlzLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyOwoKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFJhbmdlSXRlcmF0b3IodGhpcywgdHJ1ZSk7CgogICAgICAgICAgICAvLyBXb3JrIG91dCB3aGVyZSB0byBwb3NpdGlvbiB0aGUgcmFuZ2UgYWZ0ZXIgY29udGVudCByZW1vdmFsCiAgICAgICAgICAgIHZhciBub2RlLCBib3VuZGFyeTsKICAgICAgICAgICAgaWYgKHNjICE9PSByb290KSB7CiAgICAgICAgICAgICAgICBub2RlID0gZG9tLmdldENsb3Nlc3RBbmNlc3RvckluKHNjLCByb290LCB0cnVlKTsKICAgICAgICAgICAgICAgIGJvdW5kYXJ5ID0gZ2V0Qm91bmRhcnlBZnRlck5vZGUobm9kZSk7CiAgICAgICAgICAgICAgICBzYyA9IGJvdW5kYXJ5Lm5vZGU7CiAgICAgICAgICAgICAgICBzbyA9IGJvdW5kYXJ5Lm9mZnNldDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gQ2hlY2sgbm9uZSBvZiB0aGUgcmFuZ2UgaXMgcmVhZC1vbmx5CiAgICAgICAgICAgIGl0ZXJhdGVTdWJ0cmVlKGl0ZXJhdG9yLCBhc3NlcnROb2RlTm90UmVhZE9ubHkpOwoKICAgICAgICAgICAgaXRlcmF0b3IucmVzZXQoKTsKCiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgY29udGVudAogICAgICAgICAgICB2YXIgcmV0dXJuVmFsdWUgPSByZW1vdmVyKGl0ZXJhdG9yKTsKICAgICAgICAgICAgaXRlcmF0b3IuZGV0YWNoKCk7CgogICAgICAgICAgICAvLyBNb3ZlIHRvIHRoZSBuZXcgcG9zaXRpb24KICAgICAgICAgICAgYm91bmRhcnlVcGRhdGVyKHRoaXMsIHNjLCBzbywgc2MsIHNvKTsKCiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGNyZWF0ZVByb3RvdHlwZVJhbmdlKGNvbnN0cnVjdG9yLCBib3VuZGFyeVVwZGF0ZXIsIGRldGFjaGVyKSB7CiAgICAgICAgZnVuY3Rpb24gY3JlYXRlQmVmb3JlQWZ0ZXJOb2RlU2V0dGVyKGlzQmVmb3JlLCBpc1N0YXJ0KSB7CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihub2RlKSB7CiAgICAgICAgICAgICAgICBhc3NlcnROb3REZXRhY2hlZCh0aGlzKTsKICAgICAgICAgICAgICAgIGFzc2VydFZhbGlkTm9kZVR5cGUobm9kZSwgYmVmb3JlQWZ0ZXJOb2RlVHlwZXMpOwogICAgICAgICAgICAgICAgYXNzZXJ0VmFsaWROb2RlVHlwZShnZXRSb290Q29udGFpbmVyKG5vZGUpLCByb290Q29udGFpbmVyTm9kZVR5cGVzKTsKCiAgICAgICAgICAgICAgICB2YXIgYm91bmRhcnkgPSAoaXNCZWZvcmUgPyBnZXRCb3VuZGFyeUJlZm9yZU5vZGUgOiBnZXRCb3VuZGFyeUFmdGVyTm9kZSkobm9kZSk7CiAgICAgICAgICAgICAgICAoaXNTdGFydCA/IHNldFJhbmdlU3RhcnQgOiBzZXRSYW5nZUVuZCkodGhpcywgYm91bmRhcnkubm9kZSwgYm91bmRhcnkub2Zmc2V0KTsKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHNldFJhbmdlU3RhcnQocmFuZ2UsIG5vZGUsIG9mZnNldCkgewogICAgICAgICAgICB2YXIgZWMgPSByYW5nZS5lbmRDb250YWluZXIsIGVvID0gcmFuZ2UuZW5kT2Zmc2V0OwogICAgICAgICAgICBpZiAobm9kZSAhPT0gcmFuZ2Uuc3RhcnRDb250YWluZXIgfHwgb2Zmc2V0ICE9PSByYW5nZS5zdGFydE9mZnNldCkgewogICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIHJvb3QgY29udGFpbmVycyBvZiB0aGUgcmFuZ2UgYW5kIHRoZSBuZXcgYm91bmRhcnksIGFuZCBhbHNvIGNoZWNrIHdoZXRoZXIgdGhlIG5ldyBib3VuZGFyeQogICAgICAgICAgICAgICAgLy8gaXMgYWZ0ZXIgdGhlIGN1cnJlbnQgZW5kLiBJbiBlaXRoZXIgY2FzZSwgY29sbGFwc2UgdGhlIHJhbmdlIHRvIHRoZSBuZXcgcG9zaXRpb24KICAgICAgICAgICAgICAgIGlmIChnZXRSb290Q29udGFpbmVyKG5vZGUpICE9IGdldFJvb3RDb250YWluZXIoZWMpIHx8IGRvbS5jb21wYXJlUG9pbnRzKG5vZGUsIG9mZnNldCwgZWMsIGVvKSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgZWMgPSBub2RlOwogICAgICAgICAgICAgICAgICAgIGVvID0gb2Zmc2V0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYm91bmRhcnlVcGRhdGVyKHJhbmdlLCBub2RlLCBvZmZzZXQsIGVjLCBlbyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHNldFJhbmdlRW5kKHJhbmdlLCBub2RlLCBvZmZzZXQpIHsKICAgICAgICAgICAgdmFyIHNjID0gcmFuZ2Uuc3RhcnRDb250YWluZXIsIHNvID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7CiAgICAgICAgICAgIGlmIChub2RlICE9PSByYW5nZS5lbmRDb250YWluZXIgfHwgb2Zmc2V0ICE9PSByYW5nZS5lbmRPZmZzZXQpIHsKICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSByb290IGNvbnRhaW5lcnMgb2YgdGhlIHJhbmdlIGFuZCB0aGUgbmV3IGJvdW5kYXJ5LCBhbmQgYWxzbyBjaGVjayB3aGV0aGVyIHRoZSBuZXcgYm91bmRhcnkKICAgICAgICAgICAgICAgIC8vIGlzIGFmdGVyIHRoZSBjdXJyZW50IGVuZC4gSW4gZWl0aGVyIGNhc2UsIGNvbGxhcHNlIHRoZSByYW5nZSB0byB0aGUgbmV3IHBvc2l0aW9uCiAgICAgICAgICAgICAgICBpZiAoZ2V0Um9vdENvbnRhaW5lcihub2RlKSAhPSBnZXRSb290Q29udGFpbmVyKHNjKSB8fCBkb20uY29tcGFyZVBvaW50cyhub2RlLCBvZmZzZXQsIHNjLCBzbykgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICBzYyA9IG5vZGU7CiAgICAgICAgICAgICAgICAgICAgc28gPSBvZmZzZXQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBib3VuZGFyeVVwZGF0ZXIocmFuZ2UsIHNjLCBzbywgbm9kZSwgb2Zmc2V0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gc2V0UmFuZ2VTdGFydEFuZEVuZChyYW5nZSwgbm9kZSwgb2Zmc2V0KSB7CiAgICAgICAgICAgIGlmIChub2RlICE9PSByYW5nZS5zdGFydENvbnRhaW5lciB8fCBvZmZzZXQgIT09IHJhbmdlLnN0YXJ0T2Zmc2V0IHx8IG5vZGUgIT09IHJhbmdlLmVuZENvbnRhaW5lciB8fCBvZmZzZXQgIT09IHJhbmdlLmVuZE9mZnNldCkgewogICAgICAgICAgICAgICAgYm91bmRhcnlVcGRhdGVyKHJhbmdlLCBub2RlLCBvZmZzZXQsIG5vZGUsIG9mZnNldCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IG5ldyBSYW5nZVByb3RvdHlwZSgpOwoKICAgICAgICBhcGkudXRpbC5leHRlbmQoY29uc3RydWN0b3IucHJvdG90eXBlLCB7CiAgICAgICAgICAgIHNldFN0YXJ0OiBmdW5jdGlvbihub2RlLCBvZmZzZXQpIHsKICAgICAgICAgICAgICAgIGFzc2VydE5vdERldGFjaGVkKHRoaXMpOwogICAgICAgICAgICAgICAgYXNzZXJ0Tm9Eb2NUeXBlTm90YXRpb25FbnRpdHlBbmNlc3Rvcihub2RlLCB0cnVlKTsKICAgICAgICAgICAgICAgIGFzc2VydFZhbGlkT2Zmc2V0KG5vZGUsIG9mZnNldCk7CgogICAgICAgICAgICAgICAgc2V0UmFuZ2VTdGFydCh0aGlzLCBub2RlLCBvZmZzZXQpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgc2V0RW5kOiBmdW5jdGlvbihub2RlLCBvZmZzZXQpIHsKICAgICAgICAgICAgICAgIGFzc2VydE5vdERldGFjaGVkKHRoaXMpOwogICAgICAgICAgICAgICAgYXNzZXJ0Tm9Eb2NUeXBlTm90YXRpb25FbnRpdHlBbmNlc3Rvcihub2RlLCB0cnVlKTsKICAgICAgICAgICAgICAgIGFzc2VydFZhbGlkT2Zmc2V0KG5vZGUsIG9mZnNldCk7CgogICAgICAgICAgICAgICAgc2V0UmFuZ2VFbmQodGhpcywgbm9kZSwgb2Zmc2V0KTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHNldFN0YXJ0QmVmb3JlOiBjcmVhdGVCZWZvcmVBZnRlck5vZGVTZXR0ZXIodHJ1ZSwgdHJ1ZSksCiAgICAgICAgICAgIHNldFN0YXJ0QWZ0ZXI6IGNyZWF0ZUJlZm9yZUFmdGVyTm9kZVNldHRlcihmYWxzZSwgdHJ1ZSksCiAgICAgICAgICAgIHNldEVuZEJlZm9yZTogY3JlYXRlQmVmb3JlQWZ0ZXJOb2RlU2V0dGVyKHRydWUsIGZhbHNlKSwKICAgICAgICAgICAgc2V0RW5kQWZ0ZXI6IGNyZWF0ZUJlZm9yZUFmdGVyTm9kZVNldHRlcihmYWxzZSwgZmFsc2UpLAoKICAgICAgICAgICAgY29sbGFwc2U6IGZ1bmN0aW9uKGlzU3RhcnQpIHsKICAgICAgICAgICAgICAgIGFzc2VydFJhbmdlVmFsaWQodGhpcyk7CiAgICAgICAgICAgICAgICBpZiAoaXNTdGFydCkgewogICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5VXBkYXRlcih0aGlzLCB0aGlzLnN0YXJ0Q29udGFpbmVyLCB0aGlzLnN0YXJ0T2Zmc2V0LCB0aGlzLnN0YXJ0Q29udGFpbmVyLCB0aGlzLnN0YXJ0T2Zmc2V0KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYm91bmRhcnlVcGRhdGVyKHRoaXMsIHRoaXMuZW5kQ29udGFpbmVyLCB0aGlzLmVuZE9mZnNldCwgdGhpcy5lbmRDb250YWluZXIsIHRoaXMuZW5kT2Zmc2V0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHNlbGVjdE5vZGVDb250ZW50czogZnVuY3Rpb24obm9kZSkgewogICAgICAgICAgICAgICAgLy8gVGhpcyBkb2Vzbid0IHNlZW0gd2VsbCBzcGVjaWZpZWQ6IHRoZSBzcGVjIHRhbGtzIG9ubHkgYWJvdXQgc2VsZWN0aW5nIHRoZSBub2RlJ3MgY29udGVudHMsIHdoaWNoCiAgICAgICAgICAgICAgICAvLyBjb3VsZCBiZSB0YWtlbiB0byBtZWFuIG9ubHkgaXRzIGNoaWxkcmVuLiBIb3dldmVyLCBicm93c2VycyBpbXBsZW1lbnQgdGhpcyB0aGUgc2FtZSBhcyBzZWxlY3ROb2RlIGZvcgogICAgICAgICAgICAgICAgLy8gdGV4dCBub2Rlcywgc28gSSBzaGFsbCBkbyBsaWtld2lzZQogICAgICAgICAgICAgICAgYXNzZXJ0Tm90RGV0YWNoZWQodGhpcyk7CiAgICAgICAgICAgICAgICBhc3NlcnROb0RvY1R5cGVOb3RhdGlvbkVudGl0eUFuY2VzdG9yKG5vZGUsIHRydWUpOwoKICAgICAgICAgICAgICAgIGJvdW5kYXJ5VXBkYXRlcih0aGlzLCBub2RlLCAwLCBub2RlLCBkb20uZ2V0Tm9kZUxlbmd0aChub2RlKSk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBzZWxlY3ROb2RlOiBmdW5jdGlvbihub2RlKSB7CiAgICAgICAgICAgICAgICBhc3NlcnROb3REZXRhY2hlZCh0aGlzKTsKICAgICAgICAgICAgICAgIGFzc2VydE5vRG9jVHlwZU5vdGF0aW9uRW50aXR5QW5jZXN0b3Iobm9kZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgYXNzZXJ0VmFsaWROb2RlVHlwZShub2RlLCBiZWZvcmVBZnRlck5vZGVUeXBlcyk7CgogICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gZ2V0Qm91bmRhcnlCZWZvcmVOb2RlKG5vZGUpLCBlbmQgPSBnZXRCb3VuZGFyeUFmdGVyTm9kZShub2RlKTsKICAgICAgICAgICAgICAgIGJvdW5kYXJ5VXBkYXRlcih0aGlzLCBzdGFydC5ub2RlLCBzdGFydC5vZmZzZXQsIGVuZC5ub2RlLCBlbmQub2Zmc2V0KTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGV4dHJhY3RDb250ZW50czogY3JlYXRlUmFuZ2VDb250ZW50UmVtb3ZlcihleHRyYWN0U3VidHJlZSwgYm91bmRhcnlVcGRhdGVyKSwKCiAgICAgICAgICAgIGRlbGV0ZUNvbnRlbnRzOiBjcmVhdGVSYW5nZUNvbnRlbnRSZW1vdmVyKGRlbGV0ZVN1YnRyZWUsIGJvdW5kYXJ5VXBkYXRlciksCgogICAgICAgICAgICBjYW5TdXJyb3VuZENvbnRlbnRzOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGFzc2VydFJhbmdlVmFsaWQodGhpcyk7CiAgICAgICAgICAgICAgICBhc3NlcnROb2RlTm90UmVhZE9ubHkodGhpcy5zdGFydENvbnRhaW5lcik7CiAgICAgICAgICAgICAgICBhc3NlcnROb2RlTm90UmVhZE9ubHkodGhpcy5lbmRDb250YWluZXIpOwoKICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBjb250ZW50cyBjYW4gYmUgc3Vycm91bmRlZC4gU3BlY2lmaWNhbGx5LCB0aGlzIG1lYW5zIHdoZXRoZXIgdGhlIHJhbmdlIHBhcnRpYWxseSBzZWxlY3RzCiAgICAgICAgICAgICAgICAvLyBubyBub24tdGV4dCBub2Rlcy4KICAgICAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBSYW5nZUl0ZXJhdG9yKHRoaXMsIHRydWUpOwogICAgICAgICAgICAgICAgdmFyIGJvdW5kYXJpZXNJbnZhbGlkID0gKGl0ZXJhdG9yLl9maXJzdCAmJiAoaXNOb25UZXh0UGFydGlhbGx5U2VsZWN0ZWQoaXRlcmF0b3IuX2ZpcnN0LCB0aGlzKSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZXJhdG9yLl9sYXN0ICYmIGlzTm9uVGV4dFBhcnRpYWxseVNlbGVjdGVkKGl0ZXJhdG9yLl9sYXN0LCB0aGlzKSkpOwogICAgICAgICAgICAgICAgaXRlcmF0b3IuZGV0YWNoKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gIWJvdW5kYXJpZXNJbnZhbGlkOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZGV0YWNoOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGRldGFjaGVyKHRoaXMpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgc3BsaXRCb3VuZGFyaWVzOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGFzc2VydFJhbmdlVmFsaWQodGhpcyk7CgoKICAgICAgICAgICAgICAgIHZhciBzYyA9IHRoaXMuc3RhcnRDb250YWluZXIsIHNvID0gdGhpcy5zdGFydE9mZnNldCwgZWMgPSB0aGlzLmVuZENvbnRhaW5lciwgZW8gPSB0aGlzLmVuZE9mZnNldDsKICAgICAgICAgICAgICAgIHZhciBzdGFydEVuZFNhbWUgPSAoc2MgPT09IGVjKTsKCiAgICAgICAgICAgICAgICBpZiAoZG9tLmlzQ2hhcmFjdGVyRGF0YU5vZGUoZWMpICYmIGVvID4gMCAmJiBlbyA8IGVjLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIGRvbS5zcGxpdERhdGFOb2RlKGVjLCBlbyk7CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChkb20uaXNDaGFyYWN0ZXJEYXRhTm9kZShzYykgJiYgc28gPiAwICYmIHNvIDwgc2MubGVuZ3RoKSB7CgogICAgICAgICAgICAgICAgICAgIHNjID0gZG9tLnNwbGl0RGF0YU5vZGUoc2MsIHNvKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRFbmRTYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVvIC09IHNvOwogICAgICAgICAgICAgICAgICAgICAgICBlYyA9IHNjOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWMgPT0gc2MucGFyZW50Tm9kZSAmJiBlbyA+PSBkb20uZ2V0Tm9kZUluZGV4KHNjKSkgewogICAgICAgICAgICAgICAgICAgICAgICBlbysrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzbyA9IDA7CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYm91bmRhcnlVcGRhdGVyKHRoaXMsIHNjLCBzbywgZWMsIGVvKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIG5vcm1hbGl6ZUJvdW5kYXJpZXM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgYXNzZXJ0UmFuZ2VWYWxpZCh0aGlzKTsKCiAgICAgICAgICAgICAgICB2YXIgc2MgPSB0aGlzLnN0YXJ0Q29udGFpbmVyLCBzbyA9IHRoaXMuc3RhcnRPZmZzZXQsIGVjID0gdGhpcy5lbmRDb250YWluZXIsIGVvID0gdGhpcy5lbmRPZmZzZXQ7CgogICAgICAgICAgICAgICAgdmFyIG1lcmdlRm9yd2FyZCA9IGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgc2libGluZyA9IG5vZGUubmV4dFNpYmxpbmc7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmcgJiYgc2libGluZy5ub2RlVHlwZSA9PSBub2RlLm5vZGVUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjID0gbm9kZTsKICAgICAgICAgICAgICAgICAgICAgICAgZW8gPSBub2RlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5hcHBlbmREYXRhKHNpYmxpbmcuZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzaWJsaW5nKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIHZhciBtZXJnZUJhY2t3YXJkID0gZnVuY3Rpb24obm9kZSkgewogICAgICAgICAgICAgICAgICAgIHZhciBzaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmcgJiYgc2libGluZy5ub2RlVHlwZSA9PSBub2RlLm5vZGVUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjID0gbm9kZTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGVMZW5ndGggPSBub2RlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgICAgc28gPSBzaWJsaW5nLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5pbnNlcnREYXRhKDAsIHNpYmxpbmcuZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzaWJsaW5nKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjID09IGVjKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbyArPSBzbzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjID0gc2M7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWMgPT0gbm9kZS5wYXJlbnROb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZUluZGV4ID0gZG9tLmdldE5vZGVJbmRleChub2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbyA9PSBub2RlSW5kZXgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYyA9IG5vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW8gPSBub2RlTGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbyA+IG5vZGVJbmRleCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVvLS07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIHZhciBub3JtYWxpemVTdGFydCA9IHRydWU7CgogICAgICAgICAgICAgICAgaWYgKGRvbS5pc0NoYXJhY3RlckRhdGFOb2RlKGVjKSkgewogICAgICAgICAgICAgICAgICAgIGlmIChlYy5sZW5ndGggPT0gZW8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VGb3J3YXJkKGVjKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChlbyA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZE5vZGUgPSBlYy5jaGlsZE5vZGVzW2VvIC0gMV07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmROb2RlICYmIGRvbS5pc0NoYXJhY3RlckRhdGFOb2RlKGVuZE5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUZvcndhcmQoZW5kTm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplU3RhcnQgPSAhdGhpcy5jb2xsYXBzZWQ7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZVN0YXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbS5pc0NoYXJhY3RlckRhdGFOb2RlKHNjKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc28gPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCYWNrd2FyZChzYyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc28gPCBzYy5jaGlsZE5vZGVzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0Tm9kZSA9IHNjLmNoaWxkTm9kZXNbc29dOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBkb20uaXNDaGFyYWN0ZXJEYXRhTm9kZShzdGFydE5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCYWNrd2FyZChzdGFydE5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzYyA9IGVjOwogICAgICAgICAgICAgICAgICAgIHNvID0gZW87CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYm91bmRhcnlVcGRhdGVyKHRoaXMsIHNjLCBzbywgZWMsIGVvKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGNvbGxhcHNlVG9Qb2ludDogZnVuY3Rpb24obm9kZSwgb2Zmc2V0KSB7CiAgICAgICAgICAgICAgICBhc3NlcnROb3REZXRhY2hlZCh0aGlzKTsKCiAgICAgICAgICAgICAgICBhc3NlcnROb0RvY1R5cGVOb3RhdGlvbkVudGl0eUFuY2VzdG9yKG5vZGUsIHRydWUpOwogICAgICAgICAgICAgICAgYXNzZXJ0VmFsaWRPZmZzZXQobm9kZSwgb2Zmc2V0KTsKCiAgICAgICAgICAgICAgICBzZXRSYW5nZVN0YXJ0QW5kRW5kKHRoaXMsIG5vZGUsIG9mZnNldCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgY29weUNvbXBhcmlzb25Db25zdGFudHMoY29uc3RydWN0b3IpOwogICAgfQoKICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgogICAgLy8gVXBkYXRlcyBjb21tb25BbmNlc3RvckNvbnRhaW5lciBhbmQgY29sbGFwc2VkIGFmdGVyIGJvdW5kYXJ5IGNoYW5nZQogICAgZnVuY3Rpb24gdXBkYXRlQ29sbGFwc2VkQW5kQ29tbW9uQW5jZXN0b3IocmFuZ2UpIHsKICAgICAgICByYW5nZS5jb2xsYXBzZWQgPSAocmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IHJhbmdlLmVuZENvbnRhaW5lciAmJiByYW5nZS5zdGFydE9mZnNldCA9PT0gcmFuZ2UuZW5kT2Zmc2V0KTsKICAgICAgICByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lciA9IHJhbmdlLmNvbGxhcHNlZCA/CiAgICAgICAgICAgIHJhbmdlLnN0YXJ0Q29udGFpbmVyIDogZG9tLmdldENvbW1vbkFuY2VzdG9yKHJhbmdlLnN0YXJ0Q29udGFpbmVyLCByYW5nZS5lbmRDb250YWluZXIpOwogICAgfQoKICAgIGZ1bmN0aW9uIHVwZGF0ZUJvdW5kYXJpZXMocmFuZ2UsIHN0YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCwgZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQpIHsKICAgICAgICB2YXIgc3RhcnRNb3ZlZCA9IChyYW5nZS5zdGFydENvbnRhaW5lciAhPT0gc3RhcnRDb250YWluZXIgfHwgcmFuZ2Uuc3RhcnRPZmZzZXQgIT09IHN0YXJ0T2Zmc2V0KTsKICAgICAgICB2YXIgZW5kTW92ZWQgPSAocmFuZ2UuZW5kQ29udGFpbmVyICE9PSBlbmRDb250YWluZXIgfHwgcmFuZ2UuZW5kT2Zmc2V0ICE9PSBlbmRPZmZzZXQpOwoKICAgICAgICByYW5nZS5zdGFydENvbnRhaW5lciA9IHN0YXJ0Q29udGFpbmVyOwogICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQ7CiAgICAgICAgcmFuZ2UuZW5kQ29udGFpbmVyID0gZW5kQ29udGFpbmVyOwogICAgICAgIHJhbmdlLmVuZE9mZnNldCA9IGVuZE9mZnNldDsKCiAgICAgICAgdXBkYXRlQ29sbGFwc2VkQW5kQ29tbW9uQW5jZXN0b3IocmFuZ2UpOwogICAgICAgIGRpc3BhdGNoRXZlbnQocmFuZ2UsICJib3VuZGFyeWNoYW5nZSIsIHtzdGFydE1vdmVkOiBzdGFydE1vdmVkLCBlbmRNb3ZlZDogZW5kTW92ZWR9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBkZXRhY2gocmFuZ2UpIHsKICAgICAgICBhc3NlcnROb3REZXRhY2hlZChyYW5nZSk7CiAgICAgICAgcmFuZ2Uuc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydE9mZnNldCA9IHJhbmdlLmVuZENvbnRhaW5lciA9IHJhbmdlLmVuZE9mZnNldCA9IG51bGw7CiAgICAgICAgcmFuZ2UuY29sbGFwc2VkID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIgPSBudWxsOwogICAgICAgIGRpc3BhdGNoRXZlbnQocmFuZ2UsICJkZXRhY2giLCBudWxsKTsKICAgICAgICByYW5nZS5fbGlzdGVuZXJzID0gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICovCiAgICBmdW5jdGlvbiBSYW5nZShkb2MpIHsKICAgICAgICB0aGlzLnN0YXJ0Q29udGFpbmVyID0gZG9jOwogICAgICAgIHRoaXMuc3RhcnRPZmZzZXQgPSAwOwogICAgICAgIHRoaXMuZW5kQ29udGFpbmVyID0gZG9jOwogICAgICAgIHRoaXMuZW5kT2Zmc2V0ID0gMDsKICAgICAgICB0aGlzLl9saXN0ZW5lcnMgPSB7CiAgICAgICAgICAgIGJvdW5kYXJ5Y2hhbmdlOiBbXSwKICAgICAgICAgICAgZGV0YWNoOiBbXQogICAgICAgIH07CiAgICAgICAgdXBkYXRlQ29sbGFwc2VkQW5kQ29tbW9uQW5jZXN0b3IodGhpcyk7CiAgICB9CgogICAgY3JlYXRlUHJvdG90eXBlUmFuZ2UoUmFuZ2UsIHVwZGF0ZUJvdW5kYXJpZXMsIGRldGFjaCk7CgogICAgYXBpLnJhbmdlUHJvdG90eXBlID0gUmFuZ2VQcm90b3R5cGUucHJvdG90eXBlOwoKICAgIFJhbmdlLnJhbmdlUHJvcGVydGllcyA9IHJhbmdlUHJvcGVydGllczsKICAgIFJhbmdlLlJhbmdlSXRlcmF0b3IgPSBSYW5nZUl0ZXJhdG9yOwogICAgUmFuZ2UuY29weUNvbXBhcmlzb25Db25zdGFudHMgPSBjb3B5Q29tcGFyaXNvbkNvbnN0YW50czsKICAgIFJhbmdlLmNyZWF0ZVByb3RvdHlwZVJhbmdlID0gY3JlYXRlUHJvdG90eXBlUmFuZ2U7CiAgICBSYW5nZS5pbnNwZWN0ID0gaW5zcGVjdDsKICAgIFJhbmdlLmdldFJhbmdlRG9jdW1lbnQgPSBnZXRSYW5nZURvY3VtZW50OwogICAgUmFuZ2UucmFuZ2VzRXF1YWwgPSBmdW5jdGlvbihyMSwgcjIpIHsKICAgICAgICByZXR1cm4gcjEuc3RhcnRDb250YWluZXIgPT09IHIyLnN0YXJ0Q29udGFpbmVyICYmCiAgICAgICAgICAgICAgIHIxLnN0YXJ0T2Zmc2V0ID09PSByMi5zdGFydE9mZnNldCAmJgogICAgICAgICAgICAgICByMS5lbmRDb250YWluZXIgPT09IHIyLmVuZENvbnRhaW5lciAmJgogICAgICAgICAgICAgICByMS5lbmRPZmZzZXQgPT09IHIyLmVuZE9mZnNldDsKICAgIH07CgogICAgYXBpLkRvbVJhbmdlID0gUmFuZ2U7CiAgICBhcGkuUmFuZ2VFeGNlcHRpb24gPSBSYW5nZUV4Y2VwdGlvbjsKfSk7cmFuZ3kuY3JlYXRlTW9kdWxlKCJXcmFwcGVkUmFuZ2UiLCBmdW5jdGlvbihhcGksIG1vZHVsZSkgewogICAgYXBpLnJlcXVpcmVNb2R1bGVzKCBbIkRvbVV0aWwiLCAiRG9tUmFuZ2UiXSApOwoKICAgIC8qKgogICAgICogQGNvbnN0cnVjdG9yCiAgICAgKi8KICAgIHZhciBXcmFwcGVkUmFuZ2U7CiAgICB2YXIgZG9tID0gYXBpLmRvbTsKICAgIHZhciBEb21Qb3NpdGlvbiA9IGRvbS5Eb21Qb3NpdGlvbjsKICAgIHZhciBEb21SYW5nZSA9IGFwaS5Eb21SYW5nZTsKCgoKICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgogICAgLyoKICAgIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyB3aGVyZSBJRSByZXR1cm5zIHRoZSB3cm9uZyBjb250YWluZXIgZWxlbWVudCBmcm9tIHRoZSBUZXh0UmFuZ2UncyBwYXJlbnRFbGVtZW50KCkKICAgIG1ldGhvZC4gRm9yIGV4YW1wbGUsIGluIHRoZSBmb2xsb3dpbmcgKHdoZXJlIHBpcGVzIGRlbm90ZSB0aGUgc2VsZWN0aW9uIGJvdW5kYXJpZXMpOgoKICAgIDx1bCBpZD0idWwiPjxsaSBpZD0iYSI+fCBhIDwvbGk+PGxpIGlkPSJiIj4gYiB8PC9saT48L3VsPgoKICAgIHZhciByYW5nZSA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpOwogICAgYWxlcnQocmFuZ2UucGFyZW50RWxlbWVudCgpLmlkKTsgLy8gU2hvdWxkIGFsZXJ0ICJ1bCIgYnV0IGFsZXJ0cyAiYiIKCiAgICBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjb21tb24gYW5jZXN0b3Igbm9kZSBvZiB0aGUgZm9sbG93aW5nOgogICAgLSB0aGUgcGFyZW50RWxlbWVudCgpIG9mIHRoZSB0ZXh0UmFuZ2UKICAgIC0gdGhlIHBhcmVudEVsZW1lbnQoKSBvZiB0aGUgdGV4dFJhbmdlIGFmdGVyIGNhbGxpbmcgY29sbGFwc2UodHJ1ZSkKICAgIC0gdGhlIHBhcmVudEVsZW1lbnQoKSBvZiB0aGUgdGV4dFJhbmdlIGFmdGVyIGNhbGxpbmcgY29sbGFwc2UoZmFsc2UpCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFRleHRSYW5nZUNvbnRhaW5lckVsZW1lbnQodGV4dFJhbmdlKSB7CiAgICAgICAgdmFyIHBhcmVudEVsID0gdGV4dFJhbmdlLnBhcmVudEVsZW1lbnQoKTsKCiAgICAgICAgdmFyIHJhbmdlID0gdGV4dFJhbmdlLmR1cGxpY2F0ZSgpOwogICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpOwogICAgICAgIHZhciBzdGFydEVsID0gcmFuZ2UucGFyZW50RWxlbWVudCgpOwogICAgICAgIHJhbmdlID0gdGV4dFJhbmdlLmR1cGxpY2F0ZSgpOwogICAgICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTsKICAgICAgICB2YXIgZW5kRWwgPSByYW5nZS5wYXJlbnRFbGVtZW50KCk7CiAgICAgICAgdmFyIHN0YXJ0RW5kQ29udGFpbmVyID0gKHN0YXJ0RWwgPT0gZW5kRWwpID8gc3RhcnRFbCA6IGRvbS5nZXRDb21tb25BbmNlc3RvcihzdGFydEVsLCBlbmRFbCk7CgogICAgICAgIHJldHVybiBzdGFydEVuZENvbnRhaW5lciA9PSBwYXJlbnRFbCA/IHN0YXJ0RW5kQ29udGFpbmVyIDogZG9tLmdldENvbW1vbkFuY2VzdG9yKHBhcmVudEVsLCBzdGFydEVuZENvbnRhaW5lcik7CiAgICB9CgogICAgZnVuY3Rpb24gdGV4dFJhbmdlSXNDb2xsYXBzZWQodGV4dFJhbmdlKSB7CiAgICAgICAgcmV0dXJuIHRleHRSYW5nZS5jb21wYXJlRW5kUG9pbnRzKCJTdGFydFRvRW5kIiwgdGV4dFJhbmdlKSA9PSAwOwogICAgfQoKICAgIC8vIEdldHMgdGhlIGJvdW5kYXJ5IG9mIGEgVGV4dFJhbmdlIGV4cHJlc3NlZCBhcyBhIG5vZGUgYW5kIGFuIG9mZnNldCB3aXRoaW4gdGhhdCBub2RlLiBUaGlzIGZ1bmN0aW9uIHN0YXJ0ZWQgb3V0IGFzCiAgICAvLyBhbiBpbXByb3ZlZCB2ZXJzaW9uIG9mIGNvZGUgZm91bmQgaW4gVGltIENhbWVyb24gUnlhbidzIElFUmFuZ2UgKGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9pZXJhbmdlLykgYnV0IGhhcwogICAgLy8gZ3Jvd24sIGZpeGluZyBwcm9ibGVtcyB3aXRoIGxpbmUgYnJlYWtzIGluIHByZWZvcm1hdHRlZCB0ZXh0LCBhZGRpbmcgd29ya2Fyb3VuZCBmb3IgSUUgVGV4dFJhbmdlIGJ1Z3MsIGhhbmRsaW5nCiAgICAvLyBmb3IgaW5wdXRzIGFuZCBpbWFnZXMsIHBsdXMgb3B0aW1pemF0aW9ucy4KICAgIGZ1bmN0aW9uIGdldFRleHRSYW5nZUJvdW5kYXJ5UG9zaXRpb24odGV4dFJhbmdlLCB3aG9sZVJhbmdlQ29udGFpbmVyRWxlbWVudCwgaXNTdGFydCwgaXNDb2xsYXBzZWQpIHsKICAgICAgICB2YXIgd29ya2luZ1JhbmdlID0gdGV4dFJhbmdlLmR1cGxpY2F0ZSgpOwoKICAgICAgICB3b3JraW5nUmFuZ2UuY29sbGFwc2UoaXNTdGFydCk7CiAgICAgICAgdmFyIGNvbnRhaW5lckVsZW1lbnQgPSB3b3JraW5nUmFuZ2UucGFyZW50RWxlbWVudCgpOwoKICAgICAgICAvLyBTb21ldGltZXMgY29sbGFwc2luZyBhIFRleHRSYW5nZSB0aGF0J3MgYXQgdGhlIHN0YXJ0IG9mIGEgdGV4dCBub2RlIGNhbiBtb3ZlIGl0IGludG8gdGhlIHByZXZpb3VzIG5vZGUsIHNvCiAgICAgICAgLy8gY2hlY2sgZm9yIHRoYXQKICAgICAgICAvLyBUT0RPOiBGaW5kIG91dCB3aGVuLiBXb3JrYXJvdW5kIGZvciB3aG9sZVJhbmdlQ29udGFpbmVyRWxlbWVudCBtYXkgYnJlYWsgdGhpcwogICAgICAgIGlmICghZG9tLmlzQW5jZXN0b3JPZih3aG9sZVJhbmdlQ29udGFpbmVyRWxlbWVudCwgY29udGFpbmVyRWxlbWVudCwgdHJ1ZSkpIHsKICAgICAgICAgICAgY29udGFpbmVyRWxlbWVudCA9IHdob2xlUmFuZ2VDb250YWluZXJFbGVtZW50OwoKICAgICAgICB9CgoKCiAgICAgICAgLy8gRGVhbCB3aXRoIG5vZGVzIHRoYXQgY2Fubm90ICJjb250YWluIHJpY2ggSFRNTCBtYXJrdXAiLiBJbiBwcmFjdGljZSwgdGhpcyBtZWFucyBmb3JtIGlucHV0cywgaW1hZ2VzIGFuZAogICAgICAgIC8vIHNpbWlsYXIuIFNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvYWE3MDM5NTAlMjhWUy44NSUyOS5hc3B4CiAgICAgICAgaWYgKCFjb250YWluZXJFbGVtZW50LmNhbkhhdmVIVE1MKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgRG9tUG9zaXRpb24oY29udGFpbmVyRWxlbWVudC5wYXJlbnROb2RlLCBkb20uZ2V0Tm9kZUluZGV4KGNvbnRhaW5lckVsZW1lbnQpKTsKICAgICAgICB9CgogICAgICAgIHZhciB3b3JraW5nTm9kZSA9IGRvbS5nZXREb2N1bWVudChjb250YWluZXJFbGVtZW50KS5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgICAgdmFyIGNvbXBhcmlzb24sIHdvcmtpbmdDb21wYXJpc29uVHlwZSA9IGlzU3RhcnQgPyAiU3RhcnRUb1N0YXJ0IiA6ICJTdGFydFRvRW5kIjsKICAgICAgICB2YXIgcHJldmlvdXNOb2RlLCBuZXh0Tm9kZSwgYm91bmRhcnlQb3NpdGlvbiwgYm91bmRhcnlOb2RlOwoKICAgICAgICAvLyBNb3ZlIHRoZSB3b3JraW5nIHJhbmdlIHRocm91Z2ggdGhlIGNvbnRhaW5lcidzIGNoaWxkcmVuLCBzdGFydGluZyBhdCB0aGUgZW5kIGFuZCB3b3JraW5nIGJhY2t3YXJkcywgdW50aWwgdGhlCiAgICAgICAgLy8gd29ya2luZyByYW5nZSByZWFjaGVzIG9yIGdvZXMgcGFzdCB0aGUgYm91bmRhcnkgd2UncmUgaW50ZXJlc3RlZCBpbgogICAgICAgIGRvIHsKICAgICAgICAgICAgY29udGFpbmVyRWxlbWVudC5pbnNlcnRCZWZvcmUod29ya2luZ05vZGUsIHdvcmtpbmdOb2RlLnByZXZpb3VzU2libGluZyk7CiAgICAgICAgICAgIHdvcmtpbmdSYW5nZS5tb3ZlVG9FbGVtZW50VGV4dCh3b3JraW5nTm9kZSk7CiAgICAgICAgfSB3aGlsZSAoIChjb21wYXJpc29uID0gd29ya2luZ1JhbmdlLmNvbXBhcmVFbmRQb2ludHMod29ya2luZ0NvbXBhcmlzb25UeXBlLCB0ZXh0UmFuZ2UpKSA+IDAgJiYKICAgICAgICAgICAgICAgIHdvcmtpbmdOb2RlLnByZXZpb3VzU2libGluZyk7CgogICAgICAgIC8vIFdlJ3ZlIG5vdyByZWFjaGVkIG9yIGdvbmUgcGFzdCB0aGUgYm91bmRhcnkgb2YgdGhlIHRleHQgcmFuZ2Ugd2UncmUgaW50ZXJlc3RlZCBpbgogICAgICAgIC8vIHNvIGhhdmUgaWRlbnRpZmllZCB0aGUgbm9kZSB3ZSB3YW50CiAgICAgICAgYm91bmRhcnlOb2RlID0gd29ya2luZ05vZGUubmV4dFNpYmxpbmc7CgogICAgICAgIGlmIChjb21wYXJpc29uID09IC0xICYmIGJvdW5kYXJ5Tm9kZSAmJiBkb20uaXNDaGFyYWN0ZXJEYXRhTm9kZShib3VuZGFyeU5vZGUpKSB7CiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBjaGFyYWN0ZXIgZGF0YSBub2RlICh0ZXh0LCBjb21tZW50LCBjZGF0YSkuIFRoZSB3b3JraW5nIHJhbmdlIGlzIGNvbGxhcHNlZCBhdCB0aGUgc3RhcnQgb2YgdGhlCiAgICAgICAgICAgIC8vIG5vZGUgY29udGFpbmluZyB0aGUgdGV4dCByYW5nZSdzIGJvdW5kYXJ5LCBzbyB3ZSBtb3ZlIHRoZSBlbmQgb2YgdGhlIHdvcmtpbmcgcmFuZ2UgdG8gdGhlIGJvdW5kYXJ5IHBvaW50CiAgICAgICAgICAgIC8vIGFuZCBtZWFzdXJlIHRoZSBsZW5ndGggb2YgaXRzIHRleHQgdG8gZ2V0IHRoZSBib3VuZGFyeSdzIG9mZnNldCB3aXRoaW4gdGhlIG5vZGUuCiAgICAgICAgICAgIHdvcmtpbmdSYW5nZS5zZXRFbmRQb2ludChpc1N0YXJ0ID8gIkVuZFRvU3RhcnQiIDogIkVuZFRvRW5kIiwgdGV4dFJhbmdlKTsKCgogICAgICAgICAgICB2YXIgb2Zmc2V0OwoKICAgICAgICAgICAgaWYgKC9bXHJcbl0vLnRlc3QoYm91bmRhcnlOb2RlLmRhdGEpKSB7CiAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgRm9yIHRoZSBwYXJ0aWN1bGFyIGNhc2Ugb2YgYSBib3VuZGFyeSB3aXRoaW4gYSB0ZXh0IG5vZGUgY29udGFpbmluZyBsaW5lIGJyZWFrcyAod2l0aGluIGEgPHByZT4gZWxlbWVudCwKICAgICAgICAgICAgICAgIGZvciBleGFtcGxlKSwgd2UgbmVlZCBhIHNsaWdodGx5IGNvbXBsaWNhdGVkIGFwcHJvYWNoIHRvIGdldCB0aGUgYm91bmRhcnkncyBvZmZzZXQgaW4gSUUuIFRoZSBmYWN0czoKCiAgICAgICAgICAgICAgICAtIEVhY2ggbGluZSBicmVhayBpcyByZXByZXNlbnRlZCBhcyBcciBpbiB0aGUgdGV4dCBub2RlJ3MgZGF0YS9ub2RlVmFsdWUgcHJvcGVydGllcwogICAgICAgICAgICAgICAgLSBFYWNoIGxpbmUgYnJlYWsgaXMgcmVwcmVzZW50ZWQgYXMgXHJcbiBpbiB0aGUgVGV4dFJhbmdlJ3MgJ3RleHQnIHByb3BlcnR5CiAgICAgICAgICAgICAgICAtIFRoZSAndGV4dCcgcHJvcGVydHkgb2YgdGhlIFRleHRSYW5nZSBkb2VzIG5vdCBjb250YWluIHRyYWlsaW5nIGxpbmUgYnJlYWtzCgogICAgICAgICAgICAgICAgVG8gZ2V0IHJvdW5kIHRoZSBwcm9ibGVtIHByZXNlbnRlZCBieSB0aGUgZmluYWwgZmFjdCBhYm92ZSwgd2UgY2FuIHVzZSB0aGUgZmFjdCB0aGF0IFRleHRSYW5nZSdzCiAgICAgICAgICAgICAgICBtb3ZlU3RhcnQoKSBhbmQgbW92ZUVuZCgpIG1ldGhvZHMgcmV0dXJuIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMgbW92ZWQsIHdoaWNoIGlzIG5vdCBuZWNlc3NhcmlseQogICAgICAgICAgICAgICAgdGhlIHNhbWUgYXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGl0IHdhcyBpbnN0cnVjdGVkIHRvIG1vdmUuIFRoZSBzaW1wbGVzdCBhcHByb2FjaCBpcyB0byB1c2UgdGhpcyB0bwogICAgICAgICAgICAgICAgc3RvcmUgdGhlIGNoYXJhY3RlcnMgbW92ZWQgd2hlbiBtb3ZpbmcgYm90aCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgcmFuZ2UgdG8gdGhlIHN0YXJ0IG9mIHRoZSBkb2N1bWVudAogICAgICAgICAgICAgICAgYm9keSBhbmQgc3VidHJhY3RpbmcgdGhlIHN0YXJ0IG9mZnNldCBmcm9tIHRoZSBlbmQgb2Zmc2V0ICh0aGUgIm1vdmUtbmVnYXRpdmUtZ2F6aWxsaW9uIiBtZXRob2QpLgogICAgICAgICAgICAgICAgSG93ZXZlciwgdGhpcyBpcyBleHRyZW1lbHkgc2xvdyB3aGVuIHRoZSBkb2N1bWVudCBpcyBsYXJnZSBhbmQgdGhlIHJhbmdlIGlzIG5lYXIgdGhlIGVuZCBvZiBpdC4gQ2xlYXJseQogICAgICAgICAgICAgICAgZG9pbmcgdGhlIG1pcnJvciBpbWFnZSAoaS5lLiBtb3ZpbmcgdGhlIHJhbmdlIGJvdW5kYXJpZXMgdG8gdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQpIGhhcyB0aGUgc2FtZQogICAgICAgICAgICAgICAgcHJvYmxlbS4KCiAgICAgICAgICAgICAgICBBbm90aGVyIGFwcHJvYWNoIHRoYXQgd29ya3MgaXMgdG8gdXNlIG1vdmVTdGFydCgpIHRvIG1vdmUgdGhlIHN0YXJ0IGJvdW5kYXJ5IG9mIHRoZSByYW5nZSB1cCB0byB0aGUgZW5kCiAgICAgICAgICAgICAgICBib3VuZGFyeSBvbmUgY2hhcmFjdGVyIGF0IGEgdGltZSBhbmQgaW5jcmVtZW50aW5nIGEgY291bnRlciB3aXRoIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgbW92ZVN0YXJ0KCkKICAgICAgICAgICAgICAgIGNhbGwuIEhvd2V2ZXIsIHRoZSBjaGVjayBmb3Igd2hldGhlciB0aGUgc3RhcnQgYm91bmRhcnkgaGFzIHJlYWNoZWQgdGhlIGVuZCBib3VuZGFyeSBpcyBleHBlbnNpdmUsIHNvCiAgICAgICAgICAgICAgICB0aGlzIG1ldGhvZCBpcyBzbG93IChhbHRob3VnaCB1bmxpa2UgIm1vdmUtbmVnYXRpdmUtZ2F6aWxsaW9uIiBpcyBsYXJnZWx5IHVuYWZmZWN0ZWQgYnkgdGhlIGxvY2F0aW9uIG9mCiAgICAgICAgICAgICAgICB0aGUgcmFuZ2Ugd2l0aGluIHRoZSBkb2N1bWVudCkuCgogICAgICAgICAgICAgICAgVGhlIG1ldGhvZCBiZWxvdyBpcyBhIGh5YnJpZCBvZiB0aGUgdHdvIG1ldGhvZHMgYWJvdmUuIEl0IHVzZXMgdGhlIGZhY3QgdGhhdCBhIHN0cmluZyBjb250YWluaW5nIHRoZQogICAgICAgICAgICAgICAgVGV4dFJhbmdlJ3MgJ3RleHQnIHByb3BlcnR5IHdpdGggZWFjaCBcclxuIGNvbnZlcnRlZCB0byBhIHNpbmdsZSBcciBjaGFyYWN0ZXIgY2Fubm90IGJlIGxvbmdlciB0aGFuIHRoZQogICAgICAgICAgICAgICAgdGV4dCBvZiB0aGUgVGV4dFJhbmdlLCBzbyB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIGlzIG1vdmVkIHRoYXQgbGVuZ3RoIGluaXRpYWxseSBhbmQgdGhlbiBhIGNoYXJhY3RlciBhdAogICAgICAgICAgICAgICAgYSB0aW1lIHRvIG1ha2UgdXAgZm9yIGFueSB0cmFpbGluZyBsaW5lIGJyZWFrcyBub3QgY29udGFpbmVkIGluIHRoZSAndGV4dCcgcHJvcGVydHkuIFRoaXMgaGFzIGdvb2QKICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlIGluIG1vc3Qgc2l0dWF0aW9ucyBjb21wYXJlZCB0byB0aGUgcHJldmlvdXMgdHdvIG1ldGhvZHMuCiAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgdmFyIHRlbXBSYW5nZSA9IHdvcmtpbmdSYW5nZS5kdXBsaWNhdGUoKTsKICAgICAgICAgICAgICAgIHZhciByYW5nZUxlbmd0aCA9IHRlbXBSYW5nZS50ZXh0LnJlcGxhY2UoL1xyXG4vZywgIlxyIikubGVuZ3RoOwoKICAgICAgICAgICAgICAgIG9mZnNldCA9IHRlbXBSYW5nZS5tb3ZlU3RhcnQoImNoYXJhY3RlciIsIHJhbmdlTGVuZ3RoKTsKICAgICAgICAgICAgICAgIHdoaWxlICggKGNvbXBhcmlzb24gPSB0ZW1wUmFuZ2UuY29tcGFyZUVuZFBvaW50cygiU3RhcnRUb0VuZCIsIHRlbXBSYW5nZSkpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Kys7CiAgICAgICAgICAgICAgICAgICAgdGVtcFJhbmdlLm1vdmVTdGFydCgiY2hhcmFjdGVyIiwgMSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBvZmZzZXQgPSB3b3JraW5nUmFuZ2UudGV4dC5sZW5ndGg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYm91bmRhcnlQb3NpdGlvbiA9IG5ldyBEb21Qb3NpdGlvbihib3VuZGFyeU5vZGUsIG9mZnNldCk7CiAgICAgICAgfSBlbHNlIHsKCgogICAgICAgICAgICAvLyBJZiB0aGUgYm91bmRhcnkgaW1tZWRpYXRlbHkgZm9sbG93cyBhIGNoYXJhY3RlciBkYXRhIG5vZGUgYW5kIHRoaXMgaXMgdGhlIGVuZCBib3VuZGFyeSwgd2Ugc2hvdWxkIGZhdm91cgogICAgICAgICAgICAvLyBhIHBvc2l0aW9uIHdpdGhpbiB0aGF0LCBhbmQgbGlrZXdpc2UgZm9yIGEgc3RhcnQgYm91bmRhcnkgcHJlY2VkaW5nIGEgY2hhcmFjdGVyIGRhdGEgbm9kZQogICAgICAgICAgICBwcmV2aW91c05vZGUgPSAoaXNDb2xsYXBzZWQgfHwgIWlzU3RhcnQpICYmIHdvcmtpbmdOb2RlLnByZXZpb3VzU2libGluZzsKICAgICAgICAgICAgbmV4dE5vZGUgPSAoaXNDb2xsYXBzZWQgfHwgaXNTdGFydCkgJiYgd29ya2luZ05vZGUubmV4dFNpYmxpbmc7CgoKCiAgICAgICAgICAgIGlmIChuZXh0Tm9kZSAmJiBkb20uaXNDaGFyYWN0ZXJEYXRhTm9kZShuZXh0Tm9kZSkpIHsKICAgICAgICAgICAgICAgIGJvdW5kYXJ5UG9zaXRpb24gPSBuZXcgRG9tUG9zaXRpb24obmV4dE5vZGUsIDApOwogICAgICAgICAgICB9IGVsc2UgaWYgKHByZXZpb3VzTm9kZSAmJiBkb20uaXNDaGFyYWN0ZXJEYXRhTm9kZShwcmV2aW91c05vZGUpKSB7CiAgICAgICAgICAgICAgICBib3VuZGFyeVBvc2l0aW9uID0gbmV3IERvbVBvc2l0aW9uKHByZXZpb3VzTm9kZSwgcHJldmlvdXNOb2RlLmxlbmd0aCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBib3VuZGFyeVBvc2l0aW9uID0gbmV3IERvbVBvc2l0aW9uKGNvbnRhaW5lckVsZW1lbnQsIGRvbS5nZXROb2RlSW5kZXgod29ya2luZ05vZGUpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQ2xlYW4gdXAKICAgICAgICB3b3JraW5nTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHdvcmtpbmdOb2RlKTsKCiAgICAgICAgcmV0dXJuIGJvdW5kYXJ5UG9zaXRpb247CiAgICB9CgogICAgLy8gUmV0dXJucyBhIFRleHRSYW5nZSByZXByZXNlbnRpbmcgdGhlIGJvdW5kYXJ5IG9mIGEgVGV4dFJhbmdlIGV4cHJlc3NlZCBhcyBhIG5vZGUgYW5kIGFuIG9mZnNldCB3aXRoaW4gdGhhdCBub2RlLgogICAgLy8gVGhpcyBmdW5jdGlvbiBzdGFydGVkIG91dCBhcyBhbiBvcHRpbWl6ZWQgdmVyc2lvbiBvZiBjb2RlIGZvdW5kIGluIFRpbSBDYW1lcm9uIFJ5YW4ncyBJRVJhbmdlCiAgICAvLyAoaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2llcmFuZ2UvKQogICAgZnVuY3Rpb24gY3JlYXRlQm91bmRhcnlUZXh0UmFuZ2UoYm91bmRhcnlQb3NpdGlvbiwgaXNTdGFydCkgewogICAgICAgIHZhciBib3VuZGFyeU5vZGUsIGJvdW5kYXJ5UGFyZW50LCBib3VuZGFyeU9mZnNldCA9IGJvdW5kYXJ5UG9zaXRpb24ub2Zmc2V0OwogICAgICAgIHZhciBkb2MgPSBkb20uZ2V0RG9jdW1lbnQoYm91bmRhcnlQb3NpdGlvbi5ub2RlKTsKICAgICAgICB2YXIgd29ya2luZ05vZGUsIGNoaWxkTm9kZXMsIHdvcmtpbmdSYW5nZSA9IGRvYy5ib2R5LmNyZWF0ZVRleHRSYW5nZSgpOwogICAgICAgIHZhciBub2RlSXNEYXRhTm9kZSA9IGRvbS5pc0NoYXJhY3RlckRhdGFOb2RlKGJvdW5kYXJ5UG9zaXRpb24ubm9kZSk7CgogICAgICAgIGlmIChub2RlSXNEYXRhTm9kZSkgewogICAgICAgICAgICBib3VuZGFyeU5vZGUgPSBib3VuZGFyeVBvc2l0aW9uLm5vZGU7CiAgICAgICAgICAgIGJvdW5kYXJ5UGFyZW50ID0gYm91bmRhcnlOb2RlLnBhcmVudE5vZGU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY2hpbGROb2RlcyA9IGJvdW5kYXJ5UG9zaXRpb24ubm9kZS5jaGlsZE5vZGVzOwogICAgICAgICAgICBib3VuZGFyeU5vZGUgPSAoYm91bmRhcnlPZmZzZXQgPCBjaGlsZE5vZGVzLmxlbmd0aCkgPyBjaGlsZE5vZGVzW2JvdW5kYXJ5T2Zmc2V0XSA6IG51bGw7CiAgICAgICAgICAgIGJvdW5kYXJ5UGFyZW50ID0gYm91bmRhcnlQb3NpdGlvbi5ub2RlOwogICAgICAgIH0KCiAgICAgICAgLy8gUG9zaXRpb24gdGhlIHJhbmdlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgbm9kZSBjb250YWluaW5nIHRoZSBib3VuZGFyeQogICAgICAgIHdvcmtpbmdOb2RlID0gZG9jLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKCiAgICAgICAgLy8gTWFraW5nIHRoZSB3b3JraW5nIGVsZW1lbnQgbm9uLWVtcHR5IGVsZW1lbnQgcGVyc3VhZGVzIElFIHRvIGNvbnNpZGVyIHRoZSBUZXh0UmFuZ2UgYm91bmRhcnkgdG8gYmUgd2l0aGluIHRoZQogICAgICAgIC8vIGVsZW1lbnQgcmF0aGVyIHRoYW4gaW1tZWRpYXRlbHkgYmVmb3JlIG9yIGFmdGVyIGl0LCB3aGljaCBpcyB3aGF0IHdlIHdhbnQKICAgICAgICB3b3JraW5nTm9kZS5pbm5lckhUTUwgPSAiJiNmZWZmOyI7CgogICAgICAgIC8vIGluc2VydEJlZm9yZSBpcyBzdXBwb3NlZCB0byB3b3JrIGxpa2UgYXBwZW5kQ2hpbGQgaWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgbnVsbC4gSG93ZXZlciwgYSBidWcgcmVwb3J0CiAgICAgICAgLy8gZm9yIElFUmFuZ2Ugc3VnZ2VzdHMgdGhhdCBpdCBjYW4gY3Jhc2ggdGhlIGJyb3dzZXI6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9pZXJhbmdlL2lzc3Vlcy9kZXRhaWw/aWQ9MTIKICAgICAgICBpZiAoYm91bmRhcnlOb2RlKSB7CiAgICAgICAgICAgIGJvdW5kYXJ5UGFyZW50Lmluc2VydEJlZm9yZSh3b3JraW5nTm9kZSwgYm91bmRhcnlOb2RlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBib3VuZGFyeVBhcmVudC5hcHBlbmRDaGlsZCh3b3JraW5nTm9kZSk7CiAgICAgICAgfQoKICAgICAgICB3b3JraW5nUmFuZ2UubW92ZVRvRWxlbWVudFRleHQod29ya2luZ05vZGUpOwogICAgICAgIHdvcmtpbmdSYW5nZS5jb2xsYXBzZSghaXNTdGFydCk7CgogICAgICAgIC8vIENsZWFuIHVwCiAgICAgICAgYm91bmRhcnlQYXJlbnQucmVtb3ZlQ2hpbGQod29ya2luZ05vZGUpOwoKICAgICAgICAvLyBNb3ZlIHRoZSB3b3JraW5nIHJhbmdlIHRvIHRoZSB0ZXh0IG9mZnNldCwgaWYgcmVxdWlyZWQKICAgICAgICBpZiAobm9kZUlzRGF0YU5vZGUpIHsKICAgICAgICAgICAgd29ya2luZ1JhbmdlW2lzU3RhcnQgPyAibW92ZVN0YXJ0IiA6ICJtb3ZlRW5kIl0oImNoYXJhY3RlciIsIGJvdW5kYXJ5T2Zmc2V0KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB3b3JraW5nUmFuZ2U7CiAgICB9CgogICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCiAgICBpZiAoYXBpLmZlYXR1cmVzLmltcGxlbWVudHNEb21SYW5nZSAmJiAoIWFwaS5mZWF0dXJlcy5pbXBsZW1lbnRzVGV4dFJhbmdlIHx8ICFhcGkuY29uZmlnLnByZWZlclRleHRSYW5nZSkpIHsKICAgICAgICAvLyBUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIGJyb3dzZXIncyBuYXRpdmUgRE9NIFJhbmdlLiBJdCBoYXMgdHdvIGFpbXM6CiAgICAgICAgLy8gLSBQcm92aWRlIHdvcmthcm91bmRzIGZvciBzcGVjaWZpYyBicm93c2VyIGJ1Z3MKICAgICAgICAvLyAtIHByb3ZpZGUgY29udmVuaWVudCBleHRlbnNpb25zLCB3aGljaCBhcmUgaW5oZXJpdGVkIGZyb20gUmFuZ3kncyBEb21SYW5nZQoKICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciByYW5nZVByb3RvOwogICAgICAgICAgICB2YXIgcmFuZ2VQcm9wZXJ0aWVzID0gRG9tUmFuZ2UucmFuZ2VQcm9wZXJ0aWVzOwogICAgICAgICAgICB2YXIgY2FuU2V0UmFuZ2VTdGFydEFmdGVyRW5kOwoKICAgICAgICAgICAgZnVuY3Rpb24gdXBkYXRlUmFuZ2VQcm9wZXJ0aWVzKHJhbmdlKSB7CiAgICAgICAgICAgICAgICB2YXIgaSA9IHJhbmdlUHJvcGVydGllcy5sZW5ndGgsIHByb3A7CiAgICAgICAgICAgICAgICB3aGlsZSAoaS0tKSB7CiAgICAgICAgICAgICAgICAgICAgcHJvcCA9IHJhbmdlUHJvcGVydGllc1tpXTsKICAgICAgICAgICAgICAgICAgICByYW5nZVtwcm9wXSA9IHJhbmdlLm5hdGl2ZVJhbmdlW3Byb3BdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBmdW5jdGlvbiB1cGRhdGVOYXRpdmVSYW5nZShyYW5nZSwgc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0LCBlbmRDb250YWluZXIsZW5kT2Zmc2V0KSB7CiAgICAgICAgICAgICAgICB2YXIgc3RhcnRNb3ZlZCA9IChyYW5nZS5zdGFydENvbnRhaW5lciAhPT0gc3RhcnRDb250YWluZXIgfHwgcmFuZ2Uuc3RhcnRPZmZzZXQgIT0gc3RhcnRPZmZzZXQpOwogICAgICAgICAgICAgICAgdmFyIGVuZE1vdmVkID0gKHJhbmdlLmVuZENvbnRhaW5lciAhPT0gZW5kQ29udGFpbmVyIHx8IHJhbmdlLmVuZE9mZnNldCAhPSBlbmRPZmZzZXQpOwoKICAgICAgICAgICAgICAgIC8vIEFsd2F5cyBzZXQgYm90aCBib3VuZGFyaWVzIGZvciB0aGUgYmVuZWZpdCBvZiBJRTkgKHNlZSBpc3N1ZSAzNSkKICAgICAgICAgICAgICAgIGlmIChzdGFydE1vdmVkIHx8IGVuZE1vdmVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKGVuZENvbnRhaW5lciwgZW5kT2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICByYW5nZS5zZXRTdGFydChzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBmdW5jdGlvbiBkZXRhY2gocmFuZ2UpIHsKICAgICAgICAgICAgICAgIHJhbmdlLm5hdGl2ZVJhbmdlLmRldGFjaCgpOwogICAgICAgICAgICAgICAgcmFuZ2UuZGV0YWNoZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgdmFyIGkgPSByYW5nZVByb3BlcnRpZXMubGVuZ3RoLCBwcm9wOwogICAgICAgICAgICAgICAgd2hpbGUgKGktLSkgewogICAgICAgICAgICAgICAgICAgIHByb3AgPSByYW5nZVByb3BlcnRpZXNbaV07CiAgICAgICAgICAgICAgICAgICAgcmFuZ2VbcHJvcF0gPSBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY3JlYXRlQmVmb3JlQWZ0ZXJOb2RlU2V0dGVyOwoKICAgICAgICAgICAgV3JhcHBlZFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmICghcmFuZ2UpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlJhbmdlIG11c3QgYmUgc3BlY2lmaWVkIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZVJhbmdlID0gcmFuZ2U7CiAgICAgICAgICAgICAgICB1cGRhdGVSYW5nZVByb3BlcnRpZXModGhpcyk7CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBEb21SYW5nZS5jcmVhdGVQcm90b3R5cGVSYW5nZShXcmFwcGVkUmFuZ2UsIHVwZGF0ZU5hdGl2ZVJhbmdlLCBkZXRhY2gpOwoKICAgICAgICAgICAgcmFuZ2VQcm90byA9IFdyYXBwZWRSYW5nZS5wcm90b3R5cGU7CgogICAgICAgICAgICByYW5nZVByb3RvLnNlbGVjdE5vZGUgPSBmdW5jdGlvbihub2RlKSB7CiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZVJhbmdlLnNlbGVjdE5vZGUobm9kZSk7CiAgICAgICAgICAgICAgICB1cGRhdGVSYW5nZVByb3BlcnRpZXModGhpcyk7CiAgICAgICAgICAgIH07CgogICAgICAgICAgICByYW5nZVByb3RvLmRlbGV0ZUNvbnRlbnRzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZVJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7CiAgICAgICAgICAgICAgICB1cGRhdGVSYW5nZVByb3BlcnRpZXModGhpcyk7CiAgICAgICAgICAgIH07CgogICAgICAgICAgICByYW5nZVByb3RvLmV4dHJhY3RDb250ZW50cyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGZyYWcgPSB0aGlzLm5hdGl2ZVJhbmdlLmV4dHJhY3RDb250ZW50cygpOwogICAgICAgICAgICAgICAgdXBkYXRlUmFuZ2VQcm9wZXJ0aWVzKHRoaXMpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZyYWc7CiAgICAgICAgICAgIH07CgogICAgICAgICAgICByYW5nZVByb3RvLmNsb25lQ29udGVudHMgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZVJhbmdlLmNsb25lQ29udGVudHMoKTsKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIC8vIFRPRE86IFVudGlsIEkgY2FuIGZpbmQgYSB3YXkgdG8gcHJvZ3JhbW1hdGljYWxseSB0cmlnZ2VyIHRoZSBGaXJlZm94IGJ1ZyAoYXBwYXJlbnRseSBsb25nLXN0YW5kaW5nLCBzdGlsbAogICAgICAgICAgICAvLyBwcmVzZW50IGluIDMuNi44KSB0aGF0IHRocm93cyAiSW5kZXggb3Igc2l6ZSBpcyBuZWdhdGl2ZSBvciBncmVhdGVyIHRoYW4gdGhlIGFsbG93ZWQgYW1vdW50IiBmb3IKICAgICAgICAgICAgLy8gaW5zZXJ0Tm9kZSBpbiBzb21lIGNpcmN1bXN0YW5jZXMsIGFsbCBicm93c2VycyB3aWxsIGhhdmUgdG8gdXNlIHRoZSBSYW5neSdzIG93biBpbXBsZW1lbnRhdGlvbiBvZgogICAgICAgICAgICAvLyBpbnNlcnROb2RlLCB3aGljaCB3b3JrcyBidXQgaXMgYWxtb3N0IGNlcnRhaW5seSBzbG93ZXIgdGhhbiB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLgovKgogICAgICAgICAgICByYW5nZVByb3RvLmluc2VydE5vZGUgPSBmdW5jdGlvbihub2RlKSB7CiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZVJhbmdlLmluc2VydE5vZGUobm9kZSk7CiAgICAgICAgICAgICAgICB1cGRhdGVSYW5nZVByb3BlcnRpZXModGhpcyk7CiAgICAgICAgICAgIH07CiovCgogICAgICAgICAgICByYW5nZVByb3RvLnN1cnJvdW5kQ29udGVudHMgPSBmdW5jdGlvbihub2RlKSB7CiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZVJhbmdlLnN1cnJvdW5kQ29udGVudHMobm9kZSk7CiAgICAgICAgICAgICAgICB1cGRhdGVSYW5nZVByb3BlcnRpZXModGhpcyk7CiAgICAgICAgICAgIH07CgogICAgICAgICAgICByYW5nZVByb3RvLmNvbGxhcHNlID0gZnVuY3Rpb24oaXNTdGFydCkgewogICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVSYW5nZS5jb2xsYXBzZShpc1N0YXJ0KTsKICAgICAgICAgICAgICAgIHVwZGF0ZVJhbmdlUHJvcGVydGllcyh0aGlzKTsKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIHJhbmdlUHJvdG8uY2xvbmVSYW5nZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXcmFwcGVkUmFuZ2UodGhpcy5uYXRpdmVSYW5nZS5jbG9uZVJhbmdlKCkpOwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgcmFuZ2VQcm90by5yZWZyZXNoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB1cGRhdGVSYW5nZVByb3BlcnRpZXModGhpcyk7CiAgICAgICAgICAgIH07CgogICAgICAgICAgICByYW5nZVByb3RvLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVSYW5nZS50b1N0cmluZygpOwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgLy8gQ3JlYXRlIHRlc3QgcmFuZ2UgYW5kIG5vZGUgZm9yIGZlYXR1cmUgZGV0ZWN0aW9uCgogICAgICAgICAgICB2YXIgdGVzdFRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoInRlc3QiKTsKICAgICAgICAgICAgZG9tLmdldEJvZHkoZG9jdW1lbnQpLmFwcGVuZENoaWxkKHRlc3RUZXh0Tm9kZSk7CiAgICAgICAgICAgIHZhciByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CgogICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCiAgICAgICAgICAgIC8vIFRlc3QgZm9yIEZpcmVmb3ggMiBidWcgdGhhdCBwcmV2ZW50cyBtb3ZpbmcgdGhlIHN0YXJ0IG9mIGEgUmFuZ2UgdG8gYSBwb2ludCBhZnRlciBpdHMgY3VycmVudCBlbmQgYW5kCiAgICAgICAgICAgIC8vIGNvcnJlY3QgZm9yIGl0CgogICAgICAgICAgICByYW5nZS5zZXRTdGFydCh0ZXN0VGV4dE5vZGUsIDApOwogICAgICAgICAgICByYW5nZS5zZXRFbmQodGVzdFRleHROb2RlLCAwKTsKCiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICByYW5nZS5zZXRTdGFydCh0ZXN0VGV4dE5vZGUsIDEpOwogICAgICAgICAgICAgICAgY2FuU2V0UmFuZ2VTdGFydEFmdGVyRW5kID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICByYW5nZVByb3RvLnNldFN0YXJ0ID0gZnVuY3Rpb24obm9kZSwgb2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVSYW5nZS5zZXRTdGFydChub2RlLCBvZmZzZXQpOwogICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJhbmdlUHJvcGVydGllcyh0aGlzKTsKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgcmFuZ2VQcm90by5zZXRFbmQgPSBmdW5jdGlvbihub2RlLCBvZmZzZXQpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZVJhbmdlLnNldEVuZChub2RlLCBvZmZzZXQpOwogICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJhbmdlUHJvcGVydGllcyh0aGlzKTsKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgY3JlYXRlQmVmb3JlQWZ0ZXJOb2RlU2V0dGVyID0gZnVuY3Rpb24obmFtZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihub2RlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlUmFuZ2VbbmFtZV0obm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJhbmdlUHJvcGVydGllcyh0aGlzKTsKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIH0gY2F0Y2goZXgpIHsKCgogICAgICAgICAgICAgICAgY2FuU2V0UmFuZ2VTdGFydEFmdGVyRW5kID0gZmFsc2U7CgogICAgICAgICAgICAgICAgcmFuZ2VQcm90by5zZXRTdGFydCA9IGZ1bmN0aW9uKG5vZGUsIG9mZnNldCkgewogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlUmFuZ2Uuc2V0U3RhcnQobm9kZSwgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZVJhbmdlLnNldEVuZChub2RlLCBvZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZVJhbmdlLnNldFN0YXJ0KG5vZGUsIG9mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJhbmdlUHJvcGVydGllcyh0aGlzKTsKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgcmFuZ2VQcm90by5zZXRFbmQgPSBmdW5jdGlvbihub2RlLCBvZmZzZXQpIHsKICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZVJhbmdlLnNldEVuZChub2RlLCBvZmZzZXQpOwogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlUmFuZ2Uuc2V0U3RhcnQobm9kZSwgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVSYW5nZS5zZXRFbmQobm9kZSwgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmFuZ2VQcm9wZXJ0aWVzKHRoaXMpOwogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICBjcmVhdGVCZWZvcmVBZnRlck5vZGVTZXR0ZXIgPSBmdW5jdGlvbihuYW1lLCBvcHBvc2l0ZU5hbWUpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24obm9kZSkgewogICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVSYW5nZVtuYW1lXShub2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlUmFuZ2Vbb3Bwb3NpdGVOYW1lXShub2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlUmFuZ2VbbmFtZV0obm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmFuZ2VQcm9wZXJ0aWVzKHRoaXMpOwogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICByYW5nZVByb3RvLnNldFN0YXJ0QmVmb3JlID0gY3JlYXRlQmVmb3JlQWZ0ZXJOb2RlU2V0dGVyKCJzZXRTdGFydEJlZm9yZSIsICJzZXRFbmRCZWZvcmUiKTsKICAgICAgICAgICAgcmFuZ2VQcm90by5zZXRTdGFydEFmdGVyID0gY3JlYXRlQmVmb3JlQWZ0ZXJOb2RlU2V0dGVyKCJzZXRTdGFydEFmdGVyIiwgInNldEVuZEFmdGVyIik7CiAgICAgICAgICAgIHJhbmdlUHJvdG8uc2V0RW5kQmVmb3JlID0gY3JlYXRlQmVmb3JlQWZ0ZXJOb2RlU2V0dGVyKCJzZXRFbmRCZWZvcmUiLCAic2V0U3RhcnRCZWZvcmUiKTsKICAgICAgICAgICAgcmFuZ2VQcm90by5zZXRFbmRBZnRlciA9IGNyZWF0ZUJlZm9yZUFmdGVyTm9kZVNldHRlcigic2V0RW5kQWZ0ZXIiLCAic2V0U3RhcnRBZnRlciIpOwoKICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgogICAgICAgICAgICAvLyBUZXN0IGZvciBhbmQgY29ycmVjdCBGaXJlZm94IDIgYmVoYXZpb3VyIHdpdGggc2VsZWN0Tm9kZUNvbnRlbnRzIG9uIHRleHQgbm9kZXM6IGl0IGNvbGxhcHNlcyB0aGUgcmFuZ2UgdG8KICAgICAgICAgICAgLy8gdGhlIDB0aCBjaGFyYWN0ZXIgb2YgdGhlIHRleHQgbm9kZQogICAgICAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHModGVzdFRleHROb2RlKTsKICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0Q29udGFpbmVyID09IHRlc3RUZXh0Tm9kZSAmJiByYW5nZS5lbmRDb250YWluZXIgPT0gdGVzdFRleHROb2RlICYmCiAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPT0gMCAmJiByYW5nZS5lbmRPZmZzZXQgPT0gdGVzdFRleHROb2RlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgcmFuZ2VQcm90by5zZWxlY3ROb2RlQ29udGVudHMgPSBmdW5jdGlvbihub2RlKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmFuZ2VQcm9wZXJ0aWVzKHRoaXMpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJhbmdlUHJvdG8uc2VsZWN0Tm9kZUNvbnRlbnRzID0gZnVuY3Rpb24obm9kZSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhcnQobm9kZSwgMCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRFbmQobm9kZSwgRG9tUmFuZ2UuZ2V0RW5kT2Zmc2V0KG5vZGUpKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKICAgICAgICAgICAgLy8gVGVzdCBmb3IgV2ViS2l0IGJ1ZyB0aGF0IGhhcyB0aGUgYmVhaHZpb3VyIG9mIGNvbXBhcmVCb3VuZGFyeVBvaW50cyByb3VuZCB0aGUgd3Jvbmcgd2F5IGZvciBjb25zdGFudHMKICAgICAgICAgICAgLy8gU1RBUlRfVE9fRU5EIGFuZCBFTkRfVE9fU1RBUlQ6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDczOAoKICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKHRlc3RUZXh0Tm9kZSk7CiAgICAgICAgICAgIHJhbmdlLnNldEVuZCh0ZXN0VGV4dE5vZGUsIDMpOwoKICAgICAgICAgICAgdmFyIHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgICAgIHJhbmdlMi5zZWxlY3ROb2RlQ29udGVudHModGVzdFRleHROb2RlKTsKICAgICAgICAgICAgcmFuZ2UyLnNldEVuZCh0ZXN0VGV4dE5vZGUsIDQpOwogICAgICAgICAgICByYW5nZTIuc2V0U3RhcnQodGVzdFRleHROb2RlLCAyKTsKCiAgICAgICAgICAgIGlmIChyYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMocmFuZ2UuU1RBUlRfVE9fRU5ELCByYW5nZTIpID09IC0xICYKICAgICAgICAgICAgICAgICAgICByYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMocmFuZ2UuRU5EX1RPX1NUQVJULCByYW5nZTIpID09IDEpIHsKICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHdyb25nIHdheSByb3VuZCwgc28gY29ycmVjdCBmb3IgaXQKCgogICAgICAgICAgICAgICAgcmFuZ2VQcm90by5jb21wYXJlQm91bmRhcnlQb2ludHMgPSBmdW5jdGlvbih0eXBlLCByYW5nZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gcmFuZ2UubmF0aXZlUmFuZ2UgfHwgcmFuZ2U7CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gcmFuZ2UuU1RBUlRfVE9fRU5EKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSByYW5nZS5FTkRfVE9fU1RBUlQ7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IHJhbmdlLkVORF9UT19TVEFSVCkgewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gcmFuZ2UuU1RBUlRfVE9fRU5EOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHModHlwZSwgcmFuZ2UpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJhbmdlUHJvdG8uY29tcGFyZUJvdW5kYXJ5UG9pbnRzID0gZnVuY3Rpb24odHlwZSwgcmFuZ2UpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHModHlwZSwgcmFuZ2UubmF0aXZlUmFuZ2UgfHwgcmFuZ2UpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgogICAgICAgICAgICAvLyBUZXN0IGZvciBleGlzdGVuY2Ugb2YgY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IGFuZCBkZWxlZ2F0ZSB0byBpdCBpZiBpdCBleGlzdHMKICAgICAgICAgICAgaWYgKGFwaS51dGlsLmlzSG9zdE1ldGhvZChyYW5nZSwgImNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCIpKSB7CiAgICAgICAgICAgICAgICByYW5nZVByb3RvLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCA9IGZ1bmN0aW9uKGZyYWdtZW50U3RyKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlUmFuZ2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGZyYWdtZW50U3RyKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKICAgICAgICAgICAgLy8gQ2xlYW4gdXAKICAgICAgICAgICAgZG9tLmdldEJvZHkoZG9jdW1lbnQpLnJlbW92ZUNoaWxkKHRlc3RUZXh0Tm9kZSk7CiAgICAgICAgICAgIHJhbmdlLmRldGFjaCgpOwogICAgICAgICAgICByYW5nZTIuZGV0YWNoKCk7CiAgICAgICAgfSkoKTsKCiAgICAgICAgYXBpLmNyZWF0ZU5hdGl2ZVJhbmdlID0gZnVuY3Rpb24oZG9jKSB7CiAgICAgICAgICAgIGRvYyA9IGRvYyB8fCBkb2N1bWVudDsKICAgICAgICAgICAgcmV0dXJuIGRvYy5jcmVhdGVSYW5nZSgpOwogICAgICAgIH07CiAgICB9IGVsc2UgaWYgKGFwaS5mZWF0dXJlcy5pbXBsZW1lbnRzVGV4dFJhbmdlKSB7CiAgICAgICAgLy8gVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIGEgVGV4dFJhbmdlLCBwcm92aWRpbmcgZnVsbCBET00gUmFuZ2UgZnVuY3Rpb25hbGl0eSB1c2luZyByYW5neSdzIERvbVJhbmdlIGFzIGEKICAgICAgICAvLyBwcm90b3R5cGUKCiAgICAgICAgV3JhcHBlZFJhbmdlID0gZnVuY3Rpb24odGV4dFJhbmdlKSB7CiAgICAgICAgICAgIHRoaXMudGV4dFJhbmdlID0gdGV4dFJhbmdlOwogICAgICAgICAgICB0aGlzLnJlZnJlc2goKTsKICAgICAgICB9OwoKICAgICAgICBXcmFwcGVkUmFuZ2UucHJvdG90eXBlID0gbmV3IERvbVJhbmdlKGRvY3VtZW50KTsKCiAgICAgICAgV3JhcHBlZFJhbmdlLnByb3RvdHlwZS5yZWZyZXNoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBzdGFydCwgZW5kOwoKICAgICAgICAgICAgLy8gVGV4dFJhbmdlJ3MgcGFyZW50RWxlbWVudCgpIG1ldGhvZCBjYW5ub3QgYmUgdHJ1c3RlZC4gZ2V0VGV4dFJhbmdlQ29udGFpbmVyRWxlbWVudCgpIHdvcmtzIGFyb3VuZCB0aGF0LgogICAgICAgICAgICB2YXIgcmFuZ2VDb250YWluZXJFbGVtZW50ID0gZ2V0VGV4dFJhbmdlQ29udGFpbmVyRWxlbWVudCh0aGlzLnRleHRSYW5nZSk7CgogICAgICAgICAgICBpZiAodGV4dFJhbmdlSXNDb2xsYXBzZWQodGhpcy50ZXh0UmFuZ2UpKSB7CiAgICAgICAgICAgICAgICBlbmQgPSBzdGFydCA9IGdldFRleHRSYW5nZUJvdW5kYXJ5UG9zaXRpb24odGhpcy50ZXh0UmFuZ2UsIHJhbmdlQ29udGFpbmVyRWxlbWVudCwgdHJ1ZSwgdHJ1ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICAgICAgc3RhcnQgPSBnZXRUZXh0UmFuZ2VCb3VuZGFyeVBvc2l0aW9uKHRoaXMudGV4dFJhbmdlLCByYW5nZUNvbnRhaW5lckVsZW1lbnQsIHRydWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgIGVuZCA9IGdldFRleHRSYW5nZUJvdW5kYXJ5UG9zaXRpb24odGhpcy50ZXh0UmFuZ2UsIHJhbmdlQ29udGFpbmVyRWxlbWVudCwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdGhpcy5zZXRTdGFydChzdGFydC5ub2RlLCBzdGFydC5vZmZzZXQpOwogICAgICAgICAgICB0aGlzLnNldEVuZChlbmQubm9kZSwgZW5kLm9mZnNldCk7CiAgICAgICAgfTsKCiAgICAgICAgRG9tUmFuZ2UuY29weUNvbXBhcmlzb25Db25zdGFudHMoV3JhcHBlZFJhbmdlKTsKCiAgICAgICAgLy8gQWRkIFdyYXBwZWRSYW5nZSBhcyB0aGUgUmFuZ2UgcHJvcGVydHkgb2YgdGhlIGdsb2JhbCBvYmplY3QgdG8gYWxsb3cgZXhwcmVzc2lvbiBsaWtlIFJhbmdlLkVORF9UT19FTkQgdG8gd29yawogICAgICAgIHZhciBnbG9iYWxPYmogPSAoZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSgpOwogICAgICAgIGlmICh0eXBlb2YgZ2xvYmFsT2JqLlJhbmdlID09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgIGdsb2JhbE9iai5SYW5nZSA9IFdyYXBwZWRSYW5nZTsKICAgICAgICB9CgogICAgICAgIGFwaS5jcmVhdGVOYXRpdmVSYW5nZSA9IGZ1bmN0aW9uKGRvYykgewogICAgICAgICAgICBkb2MgPSBkb2MgfHwgZG9jdW1lbnQ7CiAgICAgICAgICAgIHJldHVybiBkb2MuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTsKICAgICAgICB9OwogICAgfQoKICAgIGlmIChhcGkuZmVhdHVyZXMuaW1wbGVtZW50c1RleHRSYW5nZSkgewogICAgICAgIFdyYXBwZWRSYW5nZS5yYW5nZVRvVGV4dFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICAgICAgaWYgKHJhbmdlLmNvbGxhcHNlZCkgewogICAgICAgICAgICAgICAgdmFyIHRyID0gY3JlYXRlQm91bmRhcnlUZXh0UmFuZ2UobmV3IERvbVBvc2l0aW9uKHJhbmdlLnN0YXJ0Q29udGFpbmVyLCByYW5nZS5zdGFydE9mZnNldCksIHRydWUpOwoKCgogICAgICAgICAgICAgICAgcmV0dXJuIHRyOwoKICAgICAgICAgICAgICAgIC8vcmV0dXJuIGNyZWF0ZUJvdW5kYXJ5VGV4dFJhbmdlKG5ldyBEb21Qb3NpdGlvbihyYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2Uuc3RhcnRPZmZzZXQpLCB0cnVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBzdGFydFJhbmdlID0gY3JlYXRlQm91bmRhcnlUZXh0UmFuZ2UobmV3IERvbVBvc2l0aW9uKHJhbmdlLnN0YXJ0Q29udGFpbmVyLCByYW5nZS5zdGFydE9mZnNldCksIHRydWUpOwogICAgICAgICAgICAgICAgdmFyIGVuZFJhbmdlID0gY3JlYXRlQm91bmRhcnlUZXh0UmFuZ2UobmV3IERvbVBvc2l0aW9uKHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KSwgZmFsc2UpOwogICAgICAgICAgICAgICAgdmFyIHRleHRSYW5nZSA9IGRvbS5nZXREb2N1bWVudChyYW5nZS5zdGFydENvbnRhaW5lcikuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTsKICAgICAgICAgICAgICAgIHRleHRSYW5nZS5zZXRFbmRQb2ludCgiU3RhcnRUb1N0YXJ0Iiwgc3RhcnRSYW5nZSk7CiAgICAgICAgICAgICAgICB0ZXh0UmFuZ2Uuc2V0RW5kUG9pbnQoIkVuZFRvRW5kIiwgZW5kUmFuZ2UpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRleHRSYW5nZTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9CgogICAgV3JhcHBlZFJhbmdlLnByb3RvdHlwZS5nZXROYW1lID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICJXcmFwcGVkUmFuZ2UiOwogICAgfTsKCiAgICBhcGkuV3JhcHBlZFJhbmdlID0gV3JhcHBlZFJhbmdlOwoKICAgIGFwaS5jcmVhdGVSYW5nZSA9IGZ1bmN0aW9uKGRvYykgewogICAgICAgIGRvYyA9IGRvYyB8fCBkb2N1bWVudDsKICAgICAgICByZXR1cm4gbmV3IFdyYXBwZWRSYW5nZShhcGkuY3JlYXRlTmF0aXZlUmFuZ2UoZG9jKSk7CiAgICB9OwoKICAgIGFwaS5jcmVhdGVSYW5neVJhbmdlID0gZnVuY3Rpb24oZG9jKSB7CiAgICAgICAgZG9jID0gZG9jIHx8IGRvY3VtZW50OwogICAgICAgIHJldHVybiBuZXcgRG9tUmFuZ2UoZG9jKTsKICAgIH07CgogICAgYXBpLmNyZWF0ZUlmcmFtZVJhbmdlID0gZnVuY3Rpb24oaWZyYW1lRWwpIHsKICAgICAgICByZXR1cm4gYXBpLmNyZWF0ZVJhbmdlKGRvbS5nZXRJZnJhbWVEb2N1bWVudChpZnJhbWVFbCkpOwogICAgfTsKCiAgICBhcGkuY3JlYXRlSWZyYW1lUmFuZ3lSYW5nZSA9IGZ1bmN0aW9uKGlmcmFtZUVsKSB7CiAgICAgICAgcmV0dXJuIGFwaS5jcmVhdGVSYW5neVJhbmdlKGRvbS5nZXRJZnJhbWVEb2N1bWVudChpZnJhbWVFbCkpOwogICAgfTsKCiAgICBhcGkuYWRkQ3JlYXRlTWlzc2luZ05hdGl2ZUFwaUxpc3RlbmVyKGZ1bmN0aW9uKHdpbikgewogICAgICAgIHZhciBkb2MgPSB3aW4uZG9jdW1lbnQ7CiAgICAgICAgaWYgKHR5cGVvZiBkb2MuY3JlYXRlUmFuZ2UgPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgZG9jLmNyZWF0ZVJhbmdlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYXBpLmNyZWF0ZVJhbmdlKHRoaXMpOwogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBkb2MgPSB3aW4gPSBudWxsOwogICAgfSk7Cn0pO3Jhbmd5LmNyZWF0ZU1vZHVsZSgiV3JhcHBlZFNlbGVjdGlvbiIsIGZ1bmN0aW9uKGFwaSwgbW9kdWxlKSB7CiAgICAvLyBUaGlzIHdpbGwgY3JlYXRlIGEgc2VsZWN0aW9uIG9iamVjdCB3cmFwcGVyIHRoYXQgZm9sbG93cyB0aGUgU2VsZWN0aW9uIG9iamVjdCBmb3VuZCBpbiB0aGUgV0hBVFdHIGRyYWZ0IERPTSBSYW5nZQogICAgLy8gc3BlYyAoaHR0cDovL2h0bWw1Lm9yZy9zcGVjcy9kb20tcmFuZ2UuaHRtbCkKCiAgICBhcGkucmVxdWlyZU1vZHVsZXMoIFsiRG9tVXRpbCIsICJEb21SYW5nZSIsICJXcmFwcGVkUmFuZ2UiXSApOwoKICAgIGFwaS5jb25maWcuY2hlY2tTZWxlY3Rpb25SYW5nZXMgPSB0cnVlOwoKICAgIHZhciBCT09MRUFOID0gImJvb2xlYW4iLAogICAgICAgIHdpbmRvd1Byb3BlcnR5TmFtZSA9ICJfcmFuZ3lTZWxlY3Rpb24iLAogICAgICAgIGRvbSA9IGFwaS5kb20sCiAgICAgICAgdXRpbCA9IGFwaS51dGlsLAogICAgICAgIERvbVJhbmdlID0gYXBpLkRvbVJhbmdlLAogICAgICAgIFdyYXBwZWRSYW5nZSA9IGFwaS5XcmFwcGVkUmFuZ2UsCiAgICAgICAgRE9NRXhjZXB0aW9uID0gYXBpLkRPTUV4Y2VwdGlvbiwKICAgICAgICBEb21Qb3NpdGlvbiA9IGRvbS5Eb21Qb3NpdGlvbiwKICAgICAgICBnZXRTZWxlY3Rpb24sCiAgICAgICAgc2VsZWN0aW9uSXNDb2xsYXBzZWQsCiAgICAgICAgQ09OVFJPTCA9ICJDb250cm9sIjsKCgoKICAgIGZ1bmN0aW9uIGdldFdpblNlbGVjdGlvbih3aW5QYXJhbSkgewogICAgICAgIHJldHVybiAod2luUGFyYW0gfHwgd2luZG93KS5nZXRTZWxlY3Rpb24oKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXREb2NTZWxlY3Rpb24od2luUGFyYW0pIHsKICAgICAgICByZXR1cm4gKHdpblBhcmFtIHx8IHdpbmRvdykuZG9jdW1lbnQuc2VsZWN0aW9uOwogICAgfQoKICAgIC8vIFRlc3QgZm9yIHRoZSBSYW5nZS9UZXh0UmFuZ2UgYW5kIFNlbGVjdGlvbiBmZWF0dXJlcyByZXF1aXJlZAogICAgLy8gVGVzdCBmb3IgYWJpbGl0eSB0byByZXRyaWV2ZSBzZWxlY3Rpb24KICAgIHZhciBpbXBsZW1lbnRzV2luR2V0U2VsZWN0aW9uID0gYXBpLnV0aWwuaXNIb3N0TWV0aG9kKHdpbmRvdywgImdldFNlbGVjdGlvbiIpLAogICAgICAgIGltcGxlbWVudHNEb2NTZWxlY3Rpb24gPSBhcGkudXRpbC5pc0hvc3RPYmplY3QoZG9jdW1lbnQsICJzZWxlY3Rpb24iKTsKCiAgICB2YXIgdXNlRG9jdW1lbnRTZWxlY3Rpb24gPSBpbXBsZW1lbnRzRG9jU2VsZWN0aW9uICYmICghaW1wbGVtZW50c1dpbkdldFNlbGVjdGlvbiB8fCBhcGkuY29uZmlnLnByZWZlclRleHRSYW5nZSk7CgogICAgaWYgKHVzZURvY3VtZW50U2VsZWN0aW9uKSB7CiAgICAgICAgZ2V0U2VsZWN0aW9uID0gZ2V0RG9jU2VsZWN0aW9uOwogICAgICAgIGFwaS5pc1NlbGVjdGlvblZhbGlkID0gZnVuY3Rpb24od2luUGFyYW0pIHsKICAgICAgICAgICAgdmFyIGRvYyA9ICh3aW5QYXJhbSB8fCB3aW5kb3cpLmRvY3VtZW50LCBuYXRpdmVTZWwgPSBkb2Muc2VsZWN0aW9uOwoKICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgc2VsZWN0aW9uIFRleHRSYW5nZSBpcyBhY3R1YWxseSBjb250YWluZWQgd2l0aGluIHRoZSBjb3JyZWN0IGRvY3VtZW50CiAgICAgICAgICAgIHJldHVybiAobmF0aXZlU2VsLnR5cGUgIT0gIk5vbmUiIHx8IGRvbS5nZXREb2N1bWVudChuYXRpdmVTZWwuY3JlYXRlUmFuZ2UoKS5wYXJlbnRFbGVtZW50KCkpID09IGRvYyk7CiAgICAgICAgfTsKICAgIH0gZWxzZSBpZiAoaW1wbGVtZW50c1dpbkdldFNlbGVjdGlvbikgewogICAgICAgIGdldFNlbGVjdGlvbiA9IGdldFdpblNlbGVjdGlvbjsKICAgICAgICBhcGkuaXNTZWxlY3Rpb25WYWxpZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9OwogICAgfSBlbHNlIHsKICAgICAgICBtb2R1bGUuZmFpbCgiTmVpdGhlciBkb2N1bWVudC5zZWxlY3Rpb24gb3Igd2luZG93LmdldFNlbGVjdGlvbigpIGRldGVjdGVkLiIpOwogICAgfQoKICAgIGFwaS5nZXROYXRpdmVTZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb247CgogICAgdmFyIHRlc3RTZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb24oKTsKICAgIHZhciB0ZXN0UmFuZ2UgPSBhcGkuY3JlYXRlTmF0aXZlUmFuZ2UoZG9jdW1lbnQpOwogICAgdmFyIGJvZHkgPSBkb20uZ2V0Qm9keShkb2N1bWVudCk7CgogICAgLy8gT2J0YWluaW5nIGEgcmFuZ2UgZnJvbSBhIHNlbGVjdGlvbgogICAgdmFyIHNlbGVjdGlvbkhhc0FuY2hvckFuZEZvY3VzID0gdXRpbC5hcmVIb3N0T2JqZWN0cyh0ZXN0U2VsZWN0aW9uLCBbImFuY2hvck5vZGUiLCAiZm9jdXNOb2RlIl0gJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuYXJlSG9zdFByb3BlcnRpZXModGVzdFNlbGVjdGlvbiwgWyJhbmNob3JPZmZzZXQiLCAiZm9jdXNPZmZzZXQiXSkpOwogICAgYXBpLmZlYXR1cmVzLnNlbGVjdGlvbkhhc0FuY2hvckFuZEZvY3VzID0gc2VsZWN0aW9uSGFzQW5jaG9yQW5kRm9jdXM7CgogICAgLy8gVGVzdCBmb3IgZXhpc3RlbmNlIG9mIG5hdGl2ZSBzZWxlY3Rpb24gZXh0ZW5kKCkgbWV0aG9kCiAgICB2YXIgc2VsZWN0aW9uSGFzRXh0ZW5kID0gdXRpbC5pc0hvc3RNZXRob2QodGVzdFNlbGVjdGlvbiwgImV4dGVuZCIpOwogICAgYXBpLmZlYXR1cmVzLnNlbGVjdGlvbkhhc0V4dGVuZCA9IHNlbGVjdGlvbkhhc0V4dGVuZDsKCiAgICAvLyBUZXN0IGlmIHJhbmdlQ291bnQgZXhpc3RzCiAgICB2YXIgc2VsZWN0aW9uSGFzUmFuZ2VDb3VudCA9ICh0eXBlb2YgdGVzdFNlbGVjdGlvbi5yYW5nZUNvdW50ID09ICJudW1iZXIiKTsKICAgIGFwaS5mZWF0dXJlcy5zZWxlY3Rpb25IYXNSYW5nZUNvdW50ID0gc2VsZWN0aW9uSGFzUmFuZ2VDb3VudDsKCiAgICB2YXIgc2VsZWN0aW9uU3VwcG9ydHNNdWx0aXBsZVJhbmdlcyA9IGZhbHNlOwogICAgdmFyIGNvbGxhcHNlZE5vbkVkaXRhYmxlU2VsZWN0aW9uc1N1cHBvcnRlZCA9IHRydWU7CgogICAgaWYgKHV0aWwuYXJlSG9zdE1ldGhvZHModGVzdFNlbGVjdGlvbiwgWyJhZGRSYW5nZSIsICJnZXRSYW5nZUF0IiwgInJlbW92ZUFsbFJhbmdlcyJdKSAmJgogICAgICAgICAgICB0eXBlb2YgdGVzdFNlbGVjdGlvbi5yYW5nZUNvdW50ID09ICJudW1iZXIiICYmIGFwaS5mZWF0dXJlcy5pbXBsZW1lbnRzRG9tUmFuZ2UpIHsKCiAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CiAgICAgICAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKCiAgICAgICAgICAgIHZhciBpZnJhbWVEb2MgPSBkb20uZ2V0SWZyYW1lRG9jdW1lbnQoaWZyYW1lKTsKICAgICAgICAgICAgaWZyYW1lRG9jLm9wZW4oKTsKICAgICAgICAgICAgaWZyYW1lRG9jLndyaXRlKCI8aHRtbD48aGVhZD48L2hlYWQ+PGJvZHk+MTI8L2JvZHk+PC9odG1sPiIpOwogICAgICAgICAgICBpZnJhbWVEb2MuY2xvc2UoKTsKCiAgICAgICAgICAgIHZhciBzZWwgPSBkb20uZ2V0SWZyYW1lV2luZG93KGlmcmFtZSkuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgICAgIHZhciBkb2NFbCA9IGlmcmFtZURvYy5kb2N1bWVudEVsZW1lbnQ7CiAgICAgICAgICAgIHZhciBpZnJhbWVCb2R5ID0gZG9jRWwubGFzdENoaWxkLCB0ZXh0Tm9kZSA9IGlmcmFtZUJvZHkuZmlyc3RDaGlsZDsKCiAgICAgICAgICAgIC8vIFRlc3Qgd2hldGhlciB0aGUgbmF0aXZlIHNlbGVjdGlvbiB3aWxsIGFsbG93IGEgY29sbGFwc2VkIHNlbGVjdGlvbiB3aXRoaW4gYSBub24tZWRpdGFibGUgZWxlbWVudAogICAgICAgICAgICB2YXIgcjEgPSBpZnJhbWVEb2MuY3JlYXRlUmFuZ2UoKTsKICAgICAgICAgICAgcjEuc2V0U3RhcnQodGV4dE5vZGUsIDEpOwogICAgICAgICAgICByMS5jb2xsYXBzZSh0cnVlKTsKICAgICAgICAgICAgc2VsLmFkZFJhbmdlKHIxKTsKICAgICAgICAgICAgY29sbGFwc2VkTm9uRWRpdGFibGVTZWxlY3Rpb25zU3VwcG9ydGVkID0gKHNlbC5yYW5nZUNvdW50ID09IDEpOwogICAgICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CgogICAgICAgICAgICAvLyBUZXN0IHdoZXRoZXIgdGhlIG5hdGl2ZSBzZWxlY3Rpb24gaXMgY2FwYWJsZSBvZiBzdXBwb3J0aW5nIG11bHRpcGxlIHJhbmdlcwogICAgICAgICAgICB2YXIgcjIgPSByMS5jbG9uZVJhbmdlKCk7CiAgICAgICAgICAgIHIxLnNldFN0YXJ0KHRleHROb2RlLCAwKTsKICAgICAgICAgICAgcjIuc2V0RW5kKHRleHROb2RlLCAyKTsKICAgICAgICAgICAgc2VsLmFkZFJhbmdlKHIxKTsKICAgICAgICAgICAgc2VsLmFkZFJhbmdlKHIyKTsKCiAgICAgICAgICAgIHNlbGVjdGlvblN1cHBvcnRzTXVsdGlwbGVSYW5nZXMgPSAoc2VsLnJhbmdlQ291bnQgPT0gMik7CgogICAgICAgICAgICAvLyBDbGVhbiB1cAogICAgICAgICAgICByMS5kZXRhY2goKTsKICAgICAgICAgICAgcjIuZGV0YWNoKCk7CgogICAgICAgICAgICBib2R5LnJlbW92ZUNoaWxkKGlmcmFtZSk7CiAgICAgICAgfSkoKTsKICAgIH0KCiAgICBhcGkuZmVhdHVyZXMuc2VsZWN0aW9uU3VwcG9ydHNNdWx0aXBsZVJhbmdlcyA9IHNlbGVjdGlvblN1cHBvcnRzTXVsdGlwbGVSYW5nZXM7CiAgICBhcGkuZmVhdHVyZXMuY29sbGFwc2VkTm9uRWRpdGFibGVTZWxlY3Rpb25zU3VwcG9ydGVkID0gY29sbGFwc2VkTm9uRWRpdGFibGVTZWxlY3Rpb25zU3VwcG9ydGVkOwoKICAgIC8vIENvbnRyb2xSYW5nZXMKICAgIHZhciBpbXBsZW1lbnRzQ29udHJvbFJhbmdlID0gZmFsc2UsIHRlc3RDb250cm9sUmFuZ2U7CgogICAgaWYgKGJvZHkgJiYgdXRpbC5pc0hvc3RNZXRob2QoYm9keSwgImNyZWF0ZUNvbnRyb2xSYW5nZSIpKSB7CiAgICAgICAgdGVzdENvbnRyb2xSYW5nZSA9IGJvZHkuY3JlYXRlQ29udHJvbFJhbmdlKCk7CiAgICAgICAgaWYgKHV0aWwuYXJlSG9zdFByb3BlcnRpZXModGVzdENvbnRyb2xSYW5nZSwgWyJpdGVtIiwgImFkZCJdKSkgewogICAgICAgICAgICBpbXBsZW1lbnRzQ29udHJvbFJhbmdlID0gdHJ1ZTsKICAgICAgICB9CiAgICB9CiAgICBhcGkuZmVhdHVyZXMuaW1wbGVtZW50c0NvbnRyb2xSYW5nZSA9IGltcGxlbWVudHNDb250cm9sUmFuZ2U7CgogICAgLy8gU2VsZWN0aW9uIGNvbGxhcHNlZG5lc3MKICAgIGlmIChzZWxlY3Rpb25IYXNBbmNob3JBbmRGb2N1cykgewogICAgICAgIHNlbGVjdGlvbklzQ29sbGFwc2VkID0gZnVuY3Rpb24oc2VsKSB7CiAgICAgICAgICAgIHJldHVybiBzZWwuYW5jaG9yTm9kZSA9PT0gc2VsLmZvY3VzTm9kZSAmJiBzZWwuYW5jaG9yT2Zmc2V0ID09PSBzZWwuZm9jdXNPZmZzZXQ7CiAgICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgICAgc2VsZWN0aW9uSXNDb2xsYXBzZWQgPSBmdW5jdGlvbihzZWwpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbC5yYW5nZUNvdW50ID8gc2VsLmdldFJhbmdlQXQoc2VsLnJhbmdlQ291bnQgLSAxKS5jb2xsYXBzZWQgOiBmYWxzZTsKICAgICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIHVwZGF0ZUFuY2hvckFuZEZvY3VzRnJvbVJhbmdlKHNlbCwgcmFuZ2UsIGJhY2t3YXJkcykgewogICAgICAgIHZhciBhbmNob3JQcmVmaXggPSBiYWNrd2FyZHMgPyAiZW5kIiA6ICJzdGFydCIsIGZvY3VzUHJlZml4ID0gYmFja3dhcmRzID8gInN0YXJ0IiA6ICJlbmQiOwogICAgICAgIHNlbC5hbmNob3JOb2RlID0gcmFuZ2VbYW5jaG9yUHJlZml4ICsgIkNvbnRhaW5lciJdOwogICAgICAgIHNlbC5hbmNob3JPZmZzZXQgPSByYW5nZVthbmNob3JQcmVmaXggKyAiT2Zmc2V0Il07CiAgICAgICAgc2VsLmZvY3VzTm9kZSA9IHJhbmdlW2ZvY3VzUHJlZml4ICsgIkNvbnRhaW5lciJdOwogICAgICAgIHNlbC5mb2N1c09mZnNldCA9IHJhbmdlW2ZvY3VzUHJlZml4ICsgIk9mZnNldCJdOwogICAgfQoKICAgIGZ1bmN0aW9uIHVwZGF0ZUFuY2hvckFuZEZvY3VzRnJvbU5hdGl2ZVNlbGVjdGlvbihzZWwpIHsKICAgICAgICB2YXIgbmF0aXZlU2VsID0gc2VsLm5hdGl2ZVNlbGVjdGlvbjsKICAgICAgICBzZWwuYW5jaG9yTm9kZSA9IG5hdGl2ZVNlbC5hbmNob3JOb2RlOwogICAgICAgIHNlbC5hbmNob3JPZmZzZXQgPSBuYXRpdmVTZWwuYW5jaG9yT2Zmc2V0OwogICAgICAgIHNlbC5mb2N1c05vZGUgPSBuYXRpdmVTZWwuZm9jdXNOb2RlOwogICAgICAgIHNlbC5mb2N1c09mZnNldCA9IG5hdGl2ZVNlbC5mb2N1c09mZnNldDsKICAgIH0KCiAgICBmdW5jdGlvbiB1cGRhdGVFbXB0eVNlbGVjdGlvbihzZWwpIHsKICAgICAgICBzZWwuYW5jaG9yTm9kZSA9IHNlbC5mb2N1c05vZGUgPSBudWxsOwogICAgICAgIHNlbC5hbmNob3JPZmZzZXQgPSBzZWwuZm9jdXNPZmZzZXQgPSAwOwogICAgICAgIHNlbC5yYW5nZUNvdW50ID0gMDsKICAgICAgICBzZWwuaXNDb2xsYXBzZWQgPSB0cnVlOwogICAgICAgIHNlbC5fcmFuZ2VzLmxlbmd0aCA9IDA7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TmF0aXZlUmFuZ2UocmFuZ2UpIHsKICAgICAgICB2YXIgbmF0aXZlUmFuZ2U7CiAgICAgICAgaWYgKHJhbmdlIGluc3RhbmNlb2YgRG9tUmFuZ2UpIHsKICAgICAgICAgICAgbmF0aXZlUmFuZ2UgPSByYW5nZS5fc2VsZWN0aW9uTmF0aXZlUmFuZ2U7CiAgICAgICAgICAgIGlmICghbmF0aXZlUmFuZ2UpIHsKICAgICAgICAgICAgICAgIG5hdGl2ZVJhbmdlID0gYXBpLmNyZWF0ZU5hdGl2ZVJhbmdlKGRvbS5nZXREb2N1bWVudChyYW5nZS5zdGFydENvbnRhaW5lcikpOwogICAgICAgICAgICAgICAgbmF0aXZlUmFuZ2Uuc2V0RW5kKHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KTsKICAgICAgICAgICAgICAgIG5hdGl2ZVJhbmdlLnNldFN0YXJ0KHJhbmdlLnN0YXJ0Q29udGFpbmVyLCByYW5nZS5zdGFydE9mZnNldCk7CiAgICAgICAgICAgICAgICByYW5nZS5fc2VsZWN0aW9uTmF0aXZlUmFuZ2UgPSBuYXRpdmVSYW5nZTsKICAgICAgICAgICAgICAgIHJhbmdlLmF0dGFjaExpc3RlbmVyKCJkZXRhY2giLCBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTmF0aXZlUmFuZ2UgPSBudWxsOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHJhbmdlIGluc3RhbmNlb2YgV3JhcHBlZFJhbmdlKSB7CiAgICAgICAgICAgIG5hdGl2ZVJhbmdlID0gcmFuZ2UubmF0aXZlUmFuZ2U7CiAgICAgICAgfSBlbHNlIGlmIChhcGkuZmVhdHVyZXMuaW1wbGVtZW50c0RvbVJhbmdlICYmIChyYW5nZSBpbnN0YW5jZW9mIGRvbS5nZXRXaW5kb3cocmFuZ2Uuc3RhcnRDb250YWluZXIpLlJhbmdlKSkgewogICAgICAgICAgICBuYXRpdmVSYW5nZSA9IHJhbmdlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmF0aXZlUmFuZ2U7CiAgICB9CgogICAgZnVuY3Rpb24gcmFuZ2VDb250YWluc1NpbmdsZUVsZW1lbnQocmFuZ2VOb2RlcykgewogICAgICAgIGlmICghcmFuZ2VOb2Rlcy5sZW5ndGggfHwgcmFuZ2VOb2Rlc1swXS5ub2RlVHlwZSAhPSAxKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgaSA9IDEsIGxlbiA9IHJhbmdlTm9kZXMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICAgICAgaWYgKCFkb20uaXNBbmNlc3Rvck9mKHJhbmdlTm9kZXNbMF0sIHJhbmdlTm9kZXNbaV0pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0U2luZ2xlRWxlbWVudEZyb21SYW5nZShyYW5nZSkgewogICAgICAgIHZhciBub2RlcyA9IHJhbmdlLmdldE5vZGVzKCk7CiAgICAgICAgaWYgKCFyYW5nZUNvbnRhaW5zU2luZ2xlRWxlbWVudChub2RlcykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJnZXRTaW5nbGVFbGVtZW50RnJvbVJhbmdlOiByYW5nZSAiICsgcmFuZ2UuaW5zcGVjdCgpICsgIiBkaWQgbm90IGNvbnNpc3Qgb2YgYSBzaW5nbGUgZWxlbWVudCIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbm9kZXNbMF07CiAgICB9CgogICAgZnVuY3Rpb24gaXNUZXh0UmFuZ2UocmFuZ2UpIHsKICAgICAgICByZXR1cm4gISFyYW5nZSAmJiB0eXBlb2YgcmFuZ2UudGV4dCAhPSAidW5kZWZpbmVkIjsKICAgIH0KCiAgICBmdW5jdGlvbiB1cGRhdGVGcm9tVGV4dFJhbmdlKHNlbCwgcmFuZ2UpIHsKICAgICAgICAvLyBDcmVhdGUgYSBSYW5nZSBmcm9tIHRoZSBzZWxlY3RlZCBUZXh0UmFuZ2UKICAgICAgICB2YXIgd3JhcHBlZFJhbmdlID0gbmV3IFdyYXBwZWRSYW5nZShyYW5nZSk7CiAgICAgICAgc2VsLl9yYW5nZXMgPSBbd3JhcHBlZFJhbmdlXTsKCiAgICAgICAgdXBkYXRlQW5jaG9yQW5kRm9jdXNGcm9tUmFuZ2Uoc2VsLCB3cmFwcGVkUmFuZ2UsIGZhbHNlKTsKICAgICAgICBzZWwucmFuZ2VDb3VudCA9IDE7CiAgICAgICAgc2VsLmlzQ29sbGFwc2VkID0gd3JhcHBlZFJhbmdlLmNvbGxhcHNlZDsKICAgIH0KCiAgICBmdW5jdGlvbiB1cGRhdGVDb250cm9sU2VsZWN0aW9uKHNlbCkgewogICAgICAgIC8vIFVwZGF0ZSB0aGUgd3JhcHBlZCBzZWxlY3Rpb24gYmFzZWQgb24gd2hhdCdzIG5vdyBpbiB0aGUgbmF0aXZlIHNlbGVjdGlvbgogICAgICAgIHNlbC5fcmFuZ2VzLmxlbmd0aCA9IDA7CiAgICAgICAgaWYgKHNlbC5kb2NTZWxlY3Rpb24udHlwZSA9PSAiTm9uZSIpIHsKICAgICAgICAgICAgdXBkYXRlRW1wdHlTZWxlY3Rpb24oc2VsKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgY29udHJvbFJhbmdlID0gc2VsLmRvY1NlbGVjdGlvbi5jcmVhdGVSYW5nZSgpOwogICAgICAgICAgICBpZiAoaXNUZXh0UmFuZ2UoY29udHJvbFJhbmdlKSkgewogICAgICAgICAgICAgICAgLy8gVGhpcyBjYXNlICh3aGVyZSB0aGUgc2VsZWN0aW9uIHR5cGUgaXMgIkNvbnRyb2wiIGFuZCBjYWxsaW5nIGNyZWF0ZVJhbmdlKCkgb24gdGhlIHNlbGVjdGlvbiByZXR1cm5zCiAgICAgICAgICAgICAgICAvLyBhIFRleHRSYW5nZSkgY2FuIGhhcHBlbiBpbiBJRSA5LiBJdCBoYXBwZW5zLCBmb3IgZXhhbXBsZSwgd2hlbiBhbGwgZWxlbWVudHMgaW4gdGhlIHNlbGVjdGVkCiAgICAgICAgICAgICAgICAvLyBDb250cm9sUmFuZ2UgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgQ29udHJvbFJhbmdlIGFuZCByZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50LgogICAgICAgICAgICAgICAgdXBkYXRlRnJvbVRleHRSYW5nZShzZWwsIGNvbnRyb2xSYW5nZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzZWwucmFuZ2VDb3VudCA9IGNvbnRyb2xSYW5nZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB2YXIgcmFuZ2UsIGRvYyA9IGRvbS5nZXREb2N1bWVudChjb250cm9sUmFuZ2UuaXRlbSgwKSk7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbC5yYW5nZUNvdW50OyArK2kpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IGFwaS5jcmVhdGVSYW5nZShkb2MpOwogICAgICAgICAgICAgICAgICAgIHJhbmdlLnNlbGVjdE5vZGUoY29udHJvbFJhbmdlLml0ZW0oaSkpOwogICAgICAgICAgICAgICAgICAgIHNlbC5fcmFuZ2VzLnB1c2gocmFuZ2UpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc2VsLmlzQ29sbGFwc2VkID0gc2VsLnJhbmdlQ291bnQgPT0gMSAmJiBzZWwuX3Jhbmdlc1swXS5jb2xsYXBzZWQ7CiAgICAgICAgICAgICAgICB1cGRhdGVBbmNob3JBbmRGb2N1c0Zyb21SYW5nZShzZWwsIHNlbC5fcmFuZ2VzW3NlbC5yYW5nZUNvdW50IC0gMV0sIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBhZGRSYW5nZVRvQ29udHJvbFNlbGVjdGlvbihzZWwsIHJhbmdlKSB7CiAgICAgICAgdmFyIGNvbnRyb2xSYW5nZSA9IHNlbC5kb2NTZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsKICAgICAgICB2YXIgcmFuZ2VFbGVtZW50ID0gZ2V0U2luZ2xlRWxlbWVudEZyb21SYW5nZShyYW5nZSk7CgogICAgICAgIC8vIENyZWF0ZSBhIG5ldyBDb250cm9sUmFuZ2UgY29udGFpbmluZyBhbGwgdGhlIGVsZW1lbnRzIGluIHRoZSBzZWxlY3RlZCBDb250cm9sUmFuZ2UgcGx1cyB0aGUgZWxlbWVudAogICAgICAgIC8vIGNvbnRhaW5lZCBieSB0aGUgc3VwcGxpZWQgcmFuZ2UKICAgICAgICB2YXIgZG9jID0gZG9tLmdldERvY3VtZW50KGNvbnRyb2xSYW5nZS5pdGVtKDApKTsKICAgICAgICB2YXIgbmV3Q29udHJvbFJhbmdlID0gZG9tLmdldEJvZHkoZG9jKS5jcmVhdGVDb250cm9sUmFuZ2UoKTsKICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gY29udHJvbFJhbmdlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICAgIG5ld0NvbnRyb2xSYW5nZS5hZGQoY29udHJvbFJhbmdlLml0ZW0oaSkpOwogICAgICAgIH0KICAgICAgICB0cnkgewogICAgICAgICAgICBuZXdDb250cm9sUmFuZ2UuYWRkKHJhbmdlRWxlbWVudCk7CiAgICAgICAgfSBjYXRjaCAoZXgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJhZGRSYW5nZSgpOiBFbGVtZW50IHdpdGhpbiB0aGUgc3BlY2lmaWVkIFJhbmdlIGNvdWxkIG5vdCBiZSBhZGRlZCB0byBjb250cm9sIHNlbGVjdGlvbiAoZG9lcyBpdCBoYXZlIGxheW91dD8pIik7CiAgICAgICAgfQogICAgICAgIG5ld0NvbnRyb2xSYW5nZS5zZWxlY3QoKTsKCiAgICAgICAgLy8gVXBkYXRlIHRoZSB3cmFwcGVkIHNlbGVjdGlvbiBiYXNlZCBvbiB3aGF0J3Mgbm93IGluIHRoZSBuYXRpdmUgc2VsZWN0aW9uCiAgICAgICAgdXBkYXRlQ29udHJvbFNlbGVjdGlvbihzZWwpOwogICAgfQoKICAgIHZhciBnZXRTZWxlY3Rpb25SYW5nZUF0OwoKICAgIGlmICh1dGlsLmlzSG9zdE1ldGhvZCh0ZXN0U2VsZWN0aW9uLCAgImdldFJhbmdlQXQiKSkgewogICAgICAgIGdldFNlbGVjdGlvblJhbmdlQXQgPSBmdW5jdGlvbihzZWwsIGluZGV4KSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc2VsLmdldFJhbmdlQXQoaW5kZXgpOwogICAgICAgICAgICB9IGNhdGNoKGV4KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbkhhc0FuY2hvckFuZEZvY3VzKSB7CiAgICAgICAgZ2V0U2VsZWN0aW9uUmFuZ2VBdCA9IGZ1bmN0aW9uKHNlbCkgewogICAgICAgICAgICB2YXIgZG9jID0gZG9tLmdldERvY3VtZW50KHNlbC5hbmNob3JOb2RlKTsKICAgICAgICAgICAgdmFyIHJhbmdlID0gYXBpLmNyZWF0ZVJhbmdlKGRvYyk7CiAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KHNlbC5hbmNob3JOb2RlLCBzZWwuYW5jaG9yT2Zmc2V0KTsKICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKHNlbC5mb2N1c05vZGUsIHNlbC5mb2N1c09mZnNldCk7CgogICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlbiB0aGUgc2VsZWN0aW9uIHdhcyBzZWxlY3RlZCBiYWNrd2FyZHMgKGZyb20gdGhlIGVuZCB0byB0aGUgc3RhcnQgaW4gdGhlCiAgICAgICAgICAgIC8vIGRvY3VtZW50KQogICAgICAgICAgICBpZiAocmFuZ2UuY29sbGFwc2VkICE9PSB0aGlzLmlzQ29sbGFwc2VkKSB7CiAgICAgICAgICAgICAgICByYW5nZS5zZXRTdGFydChzZWwuZm9jdXNOb2RlLCBzZWwuZm9jdXNPZmZzZXQpOwogICAgICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKHNlbC5hbmNob3JOb2RlLCBzZWwuYW5jaG9yT2Zmc2V0KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBAY29uc3RydWN0b3IKICAgICAqLwogICAgZnVuY3Rpb24gV3JhcHBlZFNlbGVjdGlvbihzZWxlY3Rpb24sIGRvY1NlbGVjdGlvbiwgd2luKSB7CiAgICAgICAgdGhpcy5uYXRpdmVTZWxlY3Rpb24gPSBzZWxlY3Rpb247CiAgICAgICAgdGhpcy5kb2NTZWxlY3Rpb24gPSBkb2NTZWxlY3Rpb247CiAgICAgICAgdGhpcy5fcmFuZ2VzID0gW107CiAgICAgICAgdGhpcy53aW4gPSB3aW47CiAgICAgICAgdGhpcy5yZWZyZXNoKCk7CiAgICB9CgogICAgYXBpLmdldFNlbGVjdGlvbiA9IGZ1bmN0aW9uKHdpbikgewogICAgICAgIHdpbiA9IHdpbiB8fCB3aW5kb3c7CiAgICAgICAgdmFyIHNlbCA9IHdpblt3aW5kb3dQcm9wZXJ0eU5hbWVdOwogICAgICAgIHZhciBuYXRpdmVTZWwgPSBnZXRTZWxlY3Rpb24od2luKSwgZG9jU2VsID0gaW1wbGVtZW50c0RvY1NlbGVjdGlvbiA/IGdldERvY1NlbGVjdGlvbih3aW4pIDogbnVsbDsKICAgICAgICBpZiAoc2VsKSB7CiAgICAgICAgICAgIHNlbC5uYXRpdmVTZWxlY3Rpb24gPSBuYXRpdmVTZWw7CiAgICAgICAgICAgIHNlbC5kb2NTZWxlY3Rpb24gPSBkb2NTZWw7CiAgICAgICAgICAgIHNlbC5yZWZyZXNoKHdpbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2VsID0gbmV3IFdyYXBwZWRTZWxlY3Rpb24obmF0aXZlU2VsLCBkb2NTZWwsIHdpbik7CiAgICAgICAgICAgIHdpblt3aW5kb3dQcm9wZXJ0eU5hbWVdID0gc2VsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsOwogICAgfTsKCiAgICBhcGkuZ2V0SWZyYW1lU2VsZWN0aW9uID0gZnVuY3Rpb24oaWZyYW1lRWwpIHsKICAgICAgICByZXR1cm4gYXBpLmdldFNlbGVjdGlvbihkb20uZ2V0SWZyYW1lV2luZG93KGlmcmFtZUVsKSk7CiAgICB9OwoKICAgIHZhciBzZWxQcm90byA9IFdyYXBwZWRTZWxlY3Rpb24ucHJvdG90eXBlOwoKICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbnRyb2xTZWxlY3Rpb24oc2VsLCByYW5nZXMpIHsKICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgc2VsZWN0aW9uIGJlY29tZXMgb2YgdHlwZSAiQ29udHJvbCIKICAgICAgICB2YXIgZG9jID0gZG9tLmdldERvY3VtZW50KHJhbmdlc1swXS5zdGFydENvbnRhaW5lcik7CiAgICAgICAgdmFyIGNvbnRyb2xSYW5nZSA9IGRvbS5nZXRCb2R5KGRvYykuY3JlYXRlQ29udHJvbFJhbmdlKCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGVsOyBpIDwgcmFuZ2VDb3VudDsgKytpKSB7CiAgICAgICAgICAgIGVsID0gZ2V0U2luZ2xlRWxlbWVudEZyb21SYW5nZShyYW5nZXNbaV0pOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgY29udHJvbFJhbmdlLmFkZChlbCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInNldFJhbmdlcygpOiBFbGVtZW50IHdpdGhpbiB0aGUgb25lIG9mIHRoZSBzcGVjaWZpZWQgUmFuZ2VzIGNvdWxkIG5vdCBiZSBhZGRlZCB0byBjb250cm9sIHNlbGVjdGlvbiAoZG9lcyBpdCBoYXZlIGxheW91dD8pIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29udHJvbFJhbmdlLnNlbGVjdCgpOwoKICAgICAgICAvLyBVcGRhdGUgdGhlIHdyYXBwZWQgc2VsZWN0aW9uIGJhc2VkIG9uIHdoYXQncyBub3cgaW4gdGhlIG5hdGl2ZSBzZWxlY3Rpb24KICAgICAgICB1cGRhdGVDb250cm9sU2VsZWN0aW9uKHNlbCk7CiAgICB9CgogICAgLy8gU2VsZWN0aW5nIGEgcmFuZ2UKICAgIGlmICghdXNlRG9jdW1lbnRTZWxlY3Rpb24gJiYgc2VsZWN0aW9uSGFzQW5jaG9yQW5kRm9jdXMgJiYgdXRpbC5hcmVIb3N0TWV0aG9kcyh0ZXN0U2VsZWN0aW9uLCBbInJlbW92ZUFsbFJhbmdlcyIsICJhZGRSYW5nZSJdKSkgewogICAgICAgIHNlbFByb3RvLnJlbW92ZUFsbFJhbmdlcyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0aGlzLm5hdGl2ZVNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgICAgICAgdXBkYXRlRW1wdHlTZWxlY3Rpb24odGhpcyk7CiAgICAgICAgfTsKCiAgICAgICAgdmFyIGFkZFJhbmdlQmFja3dhcmRzID0gZnVuY3Rpb24oc2VsLCByYW5nZSkgewogICAgICAgICAgICB2YXIgZG9jID0gRG9tUmFuZ2UuZ2V0UmFuZ2VEb2N1bWVudChyYW5nZSk7CiAgICAgICAgICAgIHZhciBlbmRSYW5nZSA9IGFwaS5jcmVhdGVSYW5nZShkb2MpOwogICAgICAgICAgICBlbmRSYW5nZS5jb2xsYXBzZVRvUG9pbnQocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpOwogICAgICAgICAgICBzZWwubmF0aXZlU2VsZWN0aW9uLmFkZFJhbmdlKGdldE5hdGl2ZVJhbmdlKGVuZFJhbmdlKSk7CiAgICAgICAgICAgIHNlbC5uYXRpdmVTZWxlY3Rpb24uZXh0ZW5kKHJhbmdlLnN0YXJ0Q29udGFpbmVyLCByYW5nZS5zdGFydE9mZnNldCk7CiAgICAgICAgICAgIHNlbC5yZWZyZXNoKCk7CiAgICAgICAgfTsKCiAgICAgICAgaWYgKHNlbGVjdGlvbkhhc1JhbmdlQ291bnQpIHsKICAgICAgICAgICAgc2VsUHJvdG8uYWRkUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSwgYmFja3dhcmRzKSB7CiAgICAgICAgICAgICAgICBpZiAoaW1wbGVtZW50c0NvbnRyb2xSYW5nZSAmJiBpbXBsZW1lbnRzRG9jU2VsZWN0aW9uICYmIHRoaXMuZG9jU2VsZWN0aW9uLnR5cGUgPT0gQ09OVFJPTCkgewogICAgICAgICAgICAgICAgICAgIGFkZFJhbmdlVG9Db250cm9sU2VsZWN0aW9uKHRoaXMsIHJhbmdlKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGJhY2t3YXJkcyAmJiBzZWxlY3Rpb25IYXNFeHRlbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWRkUmFuZ2VCYWNrd2FyZHModGhpcywgcmFuZ2UpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c1JhbmdlQ291bnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25TdXBwb3J0c011bHRpcGxlUmFuZ2VzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1JhbmdlQ291bnQgPSB0aGlzLnJhbmdlQ291bnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNSYW5nZUNvdW50ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZVNlbGVjdGlvbi5hZGRSYW5nZShnZXROYXRpdmVSYW5nZShyYW5nZSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBhZGRpbmcgdGhlIHJhbmdlIHdhcyBzdWNjZXNzZnVsCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VDb3VudCA9IHRoaXMubmF0aXZlU2VsZWN0aW9uLnJhbmdlQ291bnQ7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yYW5nZUNvdW50ID09IHByZXZpb3VzUmFuZ2VDb3VudCArIDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSByYW5nZSB3YXMgYWRkZWQgc3VjY2Vzc2Z1bGx5CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgcmFuZ2UgdGhhdCB3ZSBhZGRlZCB0byB0aGUgc2VsZWN0aW9uIGlzIHJlZmxlY3RlZCBpbiB0aGUgbGFzdCByYW5nZSBleHRyYWN0ZWQgZnJvbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHNlbGVjdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFwaS5jb25maWcuY2hlY2tTZWxlY3Rpb25SYW5nZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmF0aXZlUmFuZ2UgPSBnZXRTZWxlY3Rpb25SYW5nZUF0KHRoaXMubmF0aXZlU2VsZWN0aW9uLCB0aGlzLnJhbmdlQ291bnQgLSAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmF0aXZlUmFuZ2UgJiYgIURvbVJhbmdlLnJhbmdlc0VxdWFsKG5hdGl2ZVJhbmdlLCByYW5nZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFwcGVucyBpbiBXZWJLaXQgd2l0aCwgZm9yIGV4YW1wbGUsIGEgc2VsZWN0aW9uIHBsYWNlZCBhdCB0aGUgc3RhcnQgb2YgYSB0ZXh0IG5vZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBuZXcgV3JhcHBlZFJhbmdlKG5hdGl2ZVJhbmdlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yYW5nZXNbdGhpcy5yYW5nZUNvdW50IC0gMV0gPSByYW5nZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUFuY2hvckFuZEZvY3VzRnJvbVJhbmdlKHRoaXMsIHJhbmdlLCBzZWxlY3Rpb25Jc0JhY2t3YXJkcyh0aGlzLm5hdGl2ZVNlbGVjdGlvbikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NvbGxhcHNlZCA9IHNlbGVjdGlvbklzQ29sbGFwc2VkKHRoaXMpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJhbmdlIHdhcyBub3QgYWRkZWQgc3VjY2Vzc2Z1bGx5LiBUaGUgc2ltcGxlc3QgdGhpbmcgaXMgdG8gcmVmcmVzaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2VsUHJvdG8uYWRkUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSwgYmFja3dhcmRzKSB7CiAgICAgICAgICAgICAgICBpZiAoYmFja3dhcmRzICYmIHNlbGVjdGlvbkhhc0V4dGVuZCkgewogICAgICAgICAgICAgICAgICAgIGFkZFJhbmdlQmFja3dhcmRzKHRoaXMsIHJhbmdlKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVTZWxlY3Rpb24uYWRkUmFuZ2UoZ2V0TmF0aXZlUmFuZ2UocmFuZ2UpKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2goKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIHNlbFByb3RvLnNldFJhbmdlcyA9IGZ1bmN0aW9uKHJhbmdlcykgewogICAgICAgICAgICBpZiAoaW1wbGVtZW50c0NvbnRyb2xSYW5nZSAmJiByYW5nZXMubGVuZ3RoID4gMSkgewogICAgICAgICAgICAgICAgY3JlYXRlQ29udHJvbFNlbGVjdGlvbih0aGlzLCByYW5nZXMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSByYW5nZXMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFJhbmdlKHJhbmdlc1tpXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfSBlbHNlIGlmICh1dGlsLmlzSG9zdE1ldGhvZCh0ZXN0U2VsZWN0aW9uLCAiZW1wdHkiKSAmJiB1dGlsLmlzSG9zdE1ldGhvZCh0ZXN0UmFuZ2UsICJzZWxlY3QiKSAmJgogICAgICAgICAgICAgICBpbXBsZW1lbnRzQ29udHJvbFJhbmdlICYmIHVzZURvY3VtZW50U2VsZWN0aW9uKSB7CgogICAgICAgIHNlbFByb3RvLnJlbW92ZUFsbFJhbmdlcyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAvLyBBZGRlZCB0cnkvY2F0Y2ggYXMgZml4IGZvciBpc3N1ZSAjMjEKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHRoaXMuZG9jU2VsZWN0aW9uLmVtcHR5KCk7CgogICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGVtcHR5KCkgbm90IHdvcmtpbmcgKGlzc3VlICMyNCkKICAgICAgICAgICAgICAgIGlmICh0aGlzLmRvY1NlbGVjdGlvbi50eXBlICE9ICJOb25lIikgewogICAgICAgICAgICAgICAgICAgIC8vIFdvcmsgYXJvdW5kIGZhaWx1cmUgdG8gZW1wdHkgYSBjb250cm9sIHNlbGVjdGlvbiBieSBpbnN0ZWFkIHNlbGVjdGluZyBhIFRleHRSYW5nZSBhbmQgdGhlbgogICAgICAgICAgICAgICAgICAgIC8vIGNhbGxpbmcgZW1wdHkoKQogICAgICAgICAgICAgICAgICAgIHZhciBkb2M7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYW5jaG9yTm9kZSkgewogICAgICAgICAgICAgICAgICAgICAgICBkb2MgPSBkb20uZ2V0RG9jdW1lbnQodGhpcy5hbmNob3JOb2RlKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZG9jU2VsZWN0aW9uLnR5cGUgPT0gQ09OVFJPTCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udHJvbFJhbmdlID0gdGhpcy5kb2NTZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xSYW5nZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvYyA9IGRvbS5nZXREb2N1bWVudChjb250cm9sUmFuZ2UuaXRlbSgwKSkuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZG9jKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0UmFuZ2UgPSBkb2MuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJhbmdlLnNlbGVjdCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY1NlbGVjdGlvbi5lbXB0eSgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaChleCkge30KICAgICAgICAgICAgdXBkYXRlRW1wdHlTZWxlY3Rpb24odGhpcyk7CiAgICAgICAgfTsKCiAgICAgICAgc2VsUHJvdG8uYWRkUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgICAgICBpZiAodGhpcy5kb2NTZWxlY3Rpb24udHlwZSA9PSBDT05UUk9MKSB7CiAgICAgICAgICAgICAgICBhZGRSYW5nZVRvQ29udHJvbFNlbGVjdGlvbih0aGlzLCByYW5nZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBXcmFwcGVkUmFuZ2UucmFuZ2VUb1RleHRSYW5nZShyYW5nZSkuc2VsZWN0KCk7CiAgICAgICAgICAgICAgICB0aGlzLl9yYW5nZXNbMF0gPSByYW5nZTsKICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VDb3VudCA9IDE7CiAgICAgICAgICAgICAgICB0aGlzLmlzQ29sbGFwc2VkID0gdGhpcy5fcmFuZ2VzWzBdLmNvbGxhcHNlZDsKICAgICAgICAgICAgICAgIHVwZGF0ZUFuY2hvckFuZEZvY3VzRnJvbVJhbmdlKHRoaXMsIHJhbmdlLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBzZWxQcm90by5zZXRSYW5nZXMgPSBmdW5jdGlvbihyYW5nZXMpIHsKICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgICAgICAgdmFyIHJhbmdlQ291bnQgPSByYW5nZXMubGVuZ3RoOwogICAgICAgICAgICBpZiAocmFuZ2VDb3VudCA+IDEpIHsKICAgICAgICAgICAgICAgIGNyZWF0ZUNvbnRyb2xTZWxlY3Rpb24odGhpcywgcmFuZ2VzKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChyYW5nZUNvdW50KSB7CiAgICAgICAgICAgICAgICB0aGlzLmFkZFJhbmdlKHJhbmdlc1swXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfSBlbHNlIHsKICAgICAgICBtb2R1bGUuZmFpbCgiTm8gbWVhbnMgb2Ygc2VsZWN0aW5nIGEgUmFuZ2Ugb3IgVGV4dFJhbmdlIHdhcyBmb3VuZCIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBzZWxQcm90by5nZXRSYW5nZUF0ID0gZnVuY3Rpb24oaW5kZXgpIHsKICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMucmFuZ2VDb3VudCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJJTkRFWF9TSVpFX0VSUiIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yYW5nZXNbaW5kZXhdOwogICAgICAgIH0KICAgIH07CgogICAgdmFyIHJlZnJlc2hTZWxlY3Rpb247CgogICAgaWYgKHVzZURvY3VtZW50U2VsZWN0aW9uKSB7CiAgICAgICAgcmVmcmVzaFNlbGVjdGlvbiA9IGZ1bmN0aW9uKHNlbCkgewogICAgICAgICAgICB2YXIgcmFuZ2U7CiAgICAgICAgICAgIGlmIChhcGkuaXNTZWxlY3Rpb25WYWxpZChzZWwud2luKSkgewogICAgICAgICAgICAgICAgcmFuZ2UgPSBzZWwuZG9jU2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByYW5nZSA9IGRvbS5nZXRCb2R5KHNlbC53aW4uZG9jdW1lbnQpLmNyZWF0ZVRleHRSYW5nZSgpOwogICAgICAgICAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7CiAgICAgICAgICAgIH0KCgogICAgICAgICAgICBpZiAoc2VsLmRvY1NlbGVjdGlvbi50eXBlID09IENPTlRST0wpIHsKICAgICAgICAgICAgICAgIHVwZGF0ZUNvbnRyb2xTZWxlY3Rpb24oc2VsKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChpc1RleHRSYW5nZShyYW5nZSkpIHsKICAgICAgICAgICAgICAgIHVwZGF0ZUZyb21UZXh0UmFuZ2Uoc2VsLCByYW5nZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB1cGRhdGVFbXB0eVNlbGVjdGlvbihzZWwpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0gZWxzZSBpZiAodXRpbC5pc0hvc3RNZXRob2QodGVzdFNlbGVjdGlvbiwgImdldFJhbmdlQXQiKSAmJiB0eXBlb2YgdGVzdFNlbGVjdGlvbi5yYW5nZUNvdW50ID09ICJudW1iZXIiKSB7CiAgICAgICAgcmVmcmVzaFNlbGVjdGlvbiA9IGZ1bmN0aW9uKHNlbCkgewogICAgICAgICAgICBpZiAoaW1wbGVtZW50c0NvbnRyb2xSYW5nZSAmJiBpbXBsZW1lbnRzRG9jU2VsZWN0aW9uICYmIHNlbC5kb2NTZWxlY3Rpb24udHlwZSA9PSBDT05UUk9MKSB7CiAgICAgICAgICAgICAgICB1cGRhdGVDb250cm9sU2VsZWN0aW9uKHNlbCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzZWwuX3Jhbmdlcy5sZW5ndGggPSBzZWwucmFuZ2VDb3VudCA9IHNlbC5uYXRpdmVTZWxlY3Rpb24ucmFuZ2VDb3VudDsKICAgICAgICAgICAgICAgIGlmIChzZWwucmFuZ2VDb3VudCkgewogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzZWwucmFuZ2VDb3VudDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbC5fcmFuZ2VzW2ldID0gbmV3IGFwaS5XcmFwcGVkUmFuZ2Uoc2VsLm5hdGl2ZVNlbGVjdGlvbi5nZXRSYW5nZUF0KGkpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdXBkYXRlQW5jaG9yQW5kRm9jdXNGcm9tUmFuZ2Uoc2VsLCBzZWwuX3Jhbmdlc1tzZWwucmFuZ2VDb3VudCAtIDFdLCBzZWxlY3Rpb25Jc0JhY2t3YXJkcyhzZWwubmF0aXZlU2VsZWN0aW9uKSk7CiAgICAgICAgICAgICAgICAgICAgc2VsLmlzQ29sbGFwc2VkID0gc2VsZWN0aW9uSXNDb2xsYXBzZWQoc2VsKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdXBkYXRlRW1wdHlTZWxlY3Rpb24oc2VsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbkhhc0FuY2hvckFuZEZvY3VzICYmIHR5cGVvZiB0ZXN0U2VsZWN0aW9uLmlzQ29sbGFwc2VkID09IEJPT0xFQU4gJiYgdHlwZW9mIHRlc3RSYW5nZS5jb2xsYXBzZWQgPT0gQk9PTEVBTiAmJiBhcGkuZmVhdHVyZXMuaW1wbGVtZW50c0RvbVJhbmdlKSB7CiAgICAgICAgcmVmcmVzaFNlbGVjdGlvbiA9IGZ1bmN0aW9uKHNlbCkgewogICAgICAgICAgICB2YXIgcmFuZ2UsIG5hdGl2ZVNlbCA9IHNlbC5uYXRpdmVTZWxlY3Rpb247CiAgICAgICAgICAgIGlmIChuYXRpdmVTZWwuYW5jaG9yTm9kZSkgewogICAgICAgICAgICAgICAgcmFuZ2UgPSBnZXRTZWxlY3Rpb25SYW5nZUF0KG5hdGl2ZVNlbCwgMCk7CiAgICAgICAgICAgICAgICBzZWwuX3JhbmdlcyA9IFtyYW5nZV07CiAgICAgICAgICAgICAgICBzZWwucmFuZ2VDb3VudCA9IDE7CiAgICAgICAgICAgICAgICB1cGRhdGVBbmNob3JBbmRGb2N1c0Zyb21OYXRpdmVTZWxlY3Rpb24oc2VsKTsKICAgICAgICAgICAgICAgIHNlbC5pc0NvbGxhcHNlZCA9IHNlbGVjdGlvbklzQ29sbGFwc2VkKHNlbCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB1cGRhdGVFbXB0eVNlbGVjdGlvbihzZWwpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgICAgbW9kdWxlLmZhaWwoIk5vIG1lYW5zIG9mIG9idGFpbmluZyBhIFJhbmdlIG9yIFRleHRSYW5nZSBmcm9tIHRoZSB1c2VyJ3Mgc2VsZWN0aW9uIHdhcyBmb3VuZCIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBzZWxQcm90by5yZWZyZXNoID0gZnVuY3Rpb24oY2hlY2tGb3JDaGFuZ2VzKSB7CiAgICAgICAgdmFyIG9sZFJhbmdlcyA9IGNoZWNrRm9yQ2hhbmdlcyA/IHRoaXMuX3Jhbmdlcy5zbGljZSgwKSA6IG51bGw7CiAgICAgICAgcmVmcmVzaFNlbGVjdGlvbih0aGlzKTsKICAgICAgICBpZiAoY2hlY2tGb3JDaGFuZ2VzKSB7CiAgICAgICAgICAgIHZhciBpID0gb2xkUmFuZ2VzLmxlbmd0aDsKICAgICAgICAgICAgaWYgKGkgIT0gdGhpcy5fcmFuZ2VzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHdoaWxlIChpLS0pIHsKICAgICAgICAgICAgICAgIGlmICghRG9tUmFuZ2UucmFuZ2VzRXF1YWwob2xkUmFuZ2VzW2ldLCB0aGlzLl9yYW5nZXNbaV0pKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH07CgogICAgLy8gUmVtb3ZhbCBvZiBhIHNpbmdsZSByYW5nZQogICAgdmFyIHJlbW92ZVJhbmdlTWFudWFsbHkgPSBmdW5jdGlvbihzZWwsIHJhbmdlKSB7CiAgICAgICAgdmFyIHJhbmdlcyA9IHNlbC5nZXRBbGxSYW5nZXMoKSwgcmVtb3ZlZCA9IGZhbHNlOwogICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcmFuZ2VzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICAgIGlmIChyZW1vdmVkIHx8IHJhbmdlICE9PSByYW5nZXNbaV0pIHsKICAgICAgICAgICAgICAgIHNlbC5hZGRSYW5nZShyYW5nZXNbaV0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkcmFmdCBXSEFUV0cgUmFuZ2Ugc3BlYywgdGhlIHNhbWUgcmFuZ2UgbWF5IGJlIGFkZGVkIHRvIHRoZSBzZWxlY3Rpb24gbXVsdGlwbGUKICAgICAgICAgICAgICAgIC8vIHRpbWVzLiByZW1vdmVSYW5nZSBzaG91bGQgb25seSByZW1vdmUgdGhlIGZpcnN0IGluc3RhbmNlLCBzbyB0aGUgZm9sbG93aW5nIGVuc3VyZXMgb25seSB0aGUgZmlyc3QKICAgICAgICAgICAgICAgIC8vIGluc3RhbmNlIGlzIHJlbW92ZWQKICAgICAgICAgICAgICAgIHJlbW92ZWQgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghc2VsLnJhbmdlQ291bnQpIHsKICAgICAgICAgICAgdXBkYXRlRW1wdHlTZWxlY3Rpb24oc2VsKTsKICAgICAgICB9CiAgICB9OwoKICAgIGlmIChpbXBsZW1lbnRzQ29udHJvbFJhbmdlKSB7CiAgICAgICAgc2VsUHJvdG8ucmVtb3ZlUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgICAgICBpZiAodGhpcy5kb2NTZWxlY3Rpb24udHlwZSA9PSBDT05UUk9MKSB7CiAgICAgICAgICAgICAgICB2YXIgY29udHJvbFJhbmdlID0gdGhpcy5kb2NTZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsKICAgICAgICAgICAgICAgIHZhciByYW5nZUVsZW1lbnQgPSBnZXRTaW5nbGVFbGVtZW50RnJvbVJhbmdlKHJhbmdlKTsKCiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgQ29udHJvbFJhbmdlIGNvbnRhaW5pbmcgYWxsIHRoZSBlbGVtZW50cyBpbiB0aGUgc2VsZWN0ZWQgQ29udHJvbFJhbmdlIG1pbnVzIHRoZQogICAgICAgICAgICAgICAgLy8gZWxlbWVudCBjb250YWluZWQgYnkgdGhlIHN1cHBsaWVkIHJhbmdlCiAgICAgICAgICAgICAgICB2YXIgZG9jID0gZG9tLmdldERvY3VtZW50KGNvbnRyb2xSYW5nZS5pdGVtKDApKTsKICAgICAgICAgICAgICAgIHZhciBuZXdDb250cm9sUmFuZ2UgPSBkb20uZ2V0Qm9keShkb2MpLmNyZWF0ZUNvbnRyb2xSYW5nZSgpOwogICAgICAgICAgICAgICAgdmFyIGVsLCByZW1vdmVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gY29udHJvbFJhbmdlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgZWwgPSBjb250cm9sUmFuZ2UuaXRlbShpKTsKICAgICAgICAgICAgICAgICAgICBpZiAoZWwgIT09IHJhbmdlRWxlbWVudCB8fCByZW1vdmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRyb2xSYW5nZS5hZGQoY29udHJvbFJhbmdlLml0ZW0oaSkpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG5ld0NvbnRyb2xSYW5nZS5zZWxlY3QoKTsKCiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHdyYXBwZWQgc2VsZWN0aW9uIGJhc2VkIG9uIHdoYXQncyBub3cgaW4gdGhlIG5hdGl2ZSBzZWxlY3Rpb24KICAgICAgICAgICAgICAgIHVwZGF0ZUNvbnRyb2xTZWxlY3Rpb24odGhpcyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZW1vdmVSYW5nZU1hbnVhbGx5KHRoaXMsIHJhbmdlKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9IGVsc2UgewogICAgICAgIHNlbFByb3RvLnJlbW92ZVJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICAgICAgcmVtb3ZlUmFuZ2VNYW51YWxseSh0aGlzLCByYW5nZSk7CiAgICAgICAgfTsKICAgIH0KCiAgICAvLyBEZXRlY3RpbmcgaWYgYSBzZWxlY3Rpb24gaXMgYmFja3dhcmRzCiAgICB2YXIgc2VsZWN0aW9uSXNCYWNrd2FyZHM7CiAgICBpZiAoIXVzZURvY3VtZW50U2VsZWN0aW9uICYmIHNlbGVjdGlvbkhhc0FuY2hvckFuZEZvY3VzICYmIGFwaS5mZWF0dXJlcy5pbXBsZW1lbnRzRG9tUmFuZ2UpIHsKICAgICAgICBzZWxlY3Rpb25Jc0JhY2t3YXJkcyA9IGZ1bmN0aW9uKHNlbCkgewogICAgICAgICAgICB2YXIgYmFja3dhcmRzID0gZmFsc2U7CiAgICAgICAgICAgIGlmIChzZWwuYW5jaG9yTm9kZSkgewogICAgICAgICAgICAgICAgYmFja3dhcmRzID0gKGRvbS5jb21wYXJlUG9pbnRzKHNlbC5hbmNob3JOb2RlLCBzZWwuYW5jaG9yT2Zmc2V0LCBzZWwuZm9jdXNOb2RlLCBzZWwuZm9jdXNPZmZzZXQpID09IDEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBiYWNrd2FyZHM7CiAgICAgICAgfTsKCiAgICAgICAgc2VsUHJvdG8uaXNCYWNrd2FyZHMgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbklzQmFja3dhcmRzKHRoaXMpOwogICAgICAgIH07CiAgICB9IGVsc2UgewogICAgICAgIHNlbGVjdGlvbklzQmFja3dhcmRzID0gc2VsUHJvdG8uaXNCYWNrd2FyZHMgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH07CiAgICB9CgogICAgLy8gU2VsZWN0aW9uIHRleHQKICAgIC8vIFRoaXMgaXMgY29uZm9ybWFudCB0byB0aGUgbmV3IFdIQVRXRyBET00gUmFuZ2UgZHJhZnQgc3BlYyBidXQgZGlmZmVycyBmcm9tIFdlYktpdCBhbmQgTW96aWxsYSdzIGltcGxlbWVudGF0aW9uCiAgICBzZWxQcm90by50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewoKICAgICAgICB2YXIgcmFuZ2VUZXh0cyA9IFtdOwogICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLnJhbmdlQ291bnQ7IGkgPCBsZW47ICsraSkgewogICAgICAgICAgICByYW5nZVRleHRzW2ldID0gIiIgKyB0aGlzLl9yYW5nZXNbaV07CiAgICAgICAgfQogICAgICAgIHJldHVybiByYW5nZVRleHRzLmpvaW4oIiIpOwogICAgfTsKCiAgICBmdW5jdGlvbiBhc3NlcnROb2RlSW5TYW1lRG9jdW1lbnQoc2VsLCBub2RlKSB7CiAgICAgICAgaWYgKHNlbC5hbmNob3JOb2RlICYmIChkb20uZ2V0RG9jdW1lbnQoc2VsLmFuY2hvck5vZGUpICE9PSBkb20uZ2V0RG9jdW1lbnQobm9kZSkpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oIldST05HX0RPQ1VNRU5UX0VSUiIpOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBObyBjdXJyZW50IGJyb3dzZXJzIGNvbmZvcm0gZnVsbHkgdG8gdGhlIEhUTUwgNSBkcmFmdCBzcGVjIGZvciB0aGlzIG1ldGhvZCwgc28gUmFuZ3kncyBvd24gbWV0aG9kIGlzIGFsd2F5cyB1c2VkCiAgICBzZWxQcm90by5jb2xsYXBzZSA9IGZ1bmN0aW9uKG5vZGUsIG9mZnNldCkgewogICAgICAgIGFzc2VydE5vZGVJblNhbWVEb2N1bWVudCh0aGlzLCBub2RlKTsKICAgICAgICB2YXIgcmFuZ2UgPSBhcGkuY3JlYXRlUmFuZ2UoZG9tLmdldERvY3VtZW50KG5vZGUpKTsKICAgICAgICByYW5nZS5jb2xsYXBzZVRvUG9pbnQobm9kZSwgb2Zmc2V0KTsKICAgICAgICB0aGlzLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgIHRoaXMuYWRkUmFuZ2UocmFuZ2UpOwogICAgICAgIHRoaXMuaXNDb2xsYXBzZWQgPSB0cnVlOwogICAgfTsKCiAgICBzZWxQcm90by5jb2xsYXBzZVRvU3RhcnQgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5yYW5nZUNvdW50KSB7CiAgICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuX3Jhbmdlc1swXTsKICAgICAgICAgICAgdGhpcy5jb2xsYXBzZShyYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2Uuc3RhcnRPZmZzZXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oIklOVkFMSURfU1RBVEVfRVJSIik7CiAgICAgICAgfQogICAgfTsKCiAgICBzZWxQcm90by5jb2xsYXBzZVRvRW5kID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMucmFuZ2VDb3VudCkgewogICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9yYW5nZXNbdGhpcy5yYW5nZUNvdW50IC0gMV07CiAgICAgICAgICAgIHRoaXMuY29sbGFwc2UocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oIklOVkFMSURfU1RBVEVfRVJSIik7CiAgICAgICAgfQogICAgfTsKCiAgICAvLyBUaGUgSFRNTCA1IHNwZWMgaXMgdmVyeSBzcGVjaWZpYyBvbiBob3cgc2VsZWN0QWxsQ2hpbGRyZW4gc2hvdWxkIGJlIGltcGxlbWVudGVkIHNvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24gaXMKICAgIC8vIG5ldmVyIHVzZWQgYnkgUmFuZ3kuCiAgICBzZWxQcm90by5zZWxlY3RBbGxDaGlsZHJlbiA9IGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgICBhc3NlcnROb2RlSW5TYW1lRG9jdW1lbnQodGhpcywgbm9kZSk7CiAgICAgICAgdmFyIHJhbmdlID0gYXBpLmNyZWF0ZVJhbmdlKGRvbS5nZXREb2N1bWVudChub2RlKSk7CiAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUpOwogICAgICAgIHRoaXMucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgdGhpcy5hZGRSYW5nZShyYW5nZSk7CiAgICB9OwoKICAgIHNlbFByb3RvLmRlbGV0ZUZyb21Eb2N1bWVudCA9IGZ1bmN0aW9uKCkgewogICAgICAgIC8vIFNlcGNpYWwgYmVoYXZpb3VyIHJlcXVpcmVkIGZvciBDb250cm9sIHNlbGVjdGlvbnMKICAgICAgICBpZiAoaW1wbGVtZW50c0NvbnRyb2xSYW5nZSAmJiBpbXBsZW1lbnRzRG9jU2VsZWN0aW9uICYmIHRoaXMuZG9jU2VsZWN0aW9uLnR5cGUgPT0gQ09OVFJPTCkgewogICAgICAgICAgICB2YXIgY29udHJvbFJhbmdlID0gdGhpcy5kb2NTZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsKICAgICAgICAgICAgdmFyIGVsZW1lbnQ7CiAgICAgICAgICAgIHdoaWxlIChjb250cm9sUmFuZ2UubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBlbGVtZW50ID0gY29udHJvbFJhbmdlLml0ZW0oMCk7CiAgICAgICAgICAgICAgICBjb250cm9sUmFuZ2UucmVtb3ZlKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5yYW5nZUNvdW50KSB7CiAgICAgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLmdldEFsbFJhbmdlcygpOwogICAgICAgICAgICB0aGlzLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcmFuZ2VzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICAgICAgICByYW5nZXNbaV0uZGVsZXRlQ29udGVudHMoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBUaGUgSFRNTDUgc3BlYyBzYXlzIG5vdGhpbmcgYWJvdXQgd2hhdCB0aGUgc2VsZWN0aW9uIHNob3VsZCBjb250YWluIGFmdGVyIGNhbGxpbmcgZGVsZXRlQ29udGVudHMgb24gZWFjaAogICAgICAgICAgICAvLyByYW5nZS4gRmlyZWZveCBtb3ZlcyB0aGUgc2VsZWN0aW9uIHRvIHdoZXJlIHRoZSBmaW5hbCBzZWxlY3RlZCByYW5nZSB3YXMsIHNvIHdlIGVtdWxhdGUgdGhhdAogICAgICAgICAgICB0aGlzLmFkZFJhbmdlKHJhbmdlc1tsZW4gLSAxXSk7CiAgICAgICAgfQogICAgfTsKCiAgICAvLyBUaGUgZm9sbG93aW5nIGFyZSBub24tc3RhbmRhcmQgZXh0ZW5zaW9ucwogICAgc2VsUHJvdG8uZ2V0QWxsUmFuZ2VzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3Jhbmdlcy5zbGljZSgwKTsKICAgIH07CgogICAgc2VsUHJvdG8uc2V0U2luZ2xlUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgIHRoaXMuc2V0UmFuZ2VzKCBbcmFuZ2VdICk7CiAgICB9OwoKICAgIHNlbFByb3RvLmNvbnRhaW5zTm9kZSA9IGZ1bmN0aW9uKG5vZGUsIGFsbG93UGFydGlhbCkgewogICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLl9yYW5nZXMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICAgICAgaWYgKHRoaXMuX3Jhbmdlc1tpXS5jb250YWluc05vZGUobm9kZSwgYWxsb3dQYXJ0aWFsKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKCiAgICBzZWxQcm90by50b0h0bWwgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgaHRtbCA9ICIiOwogICAgICAgIGlmICh0aGlzLnJhbmdlQ291bnQpIHsKICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IERvbVJhbmdlLmdldFJhbmdlRG9jdW1lbnQodGhpcy5fcmFuZ2VzWzBdKS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuX3Jhbmdlcy5sZW5ndGg7IGkgPCBsZW47ICsraSkgewogICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3Jhbmdlc1tpXS5jbG9uZUNvbnRlbnRzKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGh0bWwgPSBjb250YWluZXIuaW5uZXJIVE1MOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaHRtbDsKICAgIH07CgogICAgZnVuY3Rpb24gaW5zcGVjdChzZWwpIHsKICAgICAgICB2YXIgcmFuZ2VJbnNwZWN0cyA9IFtdOwogICAgICAgIHZhciBhbmNob3IgPSBuZXcgRG9tUG9zaXRpb24oc2VsLmFuY2hvck5vZGUsIHNlbC5hbmNob3JPZmZzZXQpOwogICAgICAgIHZhciBmb2N1cyA9IG5ldyBEb21Qb3NpdGlvbihzZWwuZm9jdXNOb2RlLCBzZWwuZm9jdXNPZmZzZXQpOwogICAgICAgIHZhciBuYW1lID0gKHR5cGVvZiBzZWwuZ2V0TmFtZSA9PSAiZnVuY3Rpb24iKSA/IHNlbC5nZXROYW1lKCkgOiAiU2VsZWN0aW9uIjsKCiAgICAgICAgaWYgKHR5cGVvZiBzZWwucmFuZ2VDb3VudCAhPSAidW5kZWZpbmVkIikgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gc2VsLnJhbmdlQ291bnQ7IGkgPCBsZW47ICsraSkgewogICAgICAgICAgICAgICAgcmFuZ2VJbnNwZWN0c1tpXSA9IERvbVJhbmdlLmluc3BlY3Qoc2VsLmdldFJhbmdlQXQoaSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAiWyIgKyBuYW1lICsgIihSYW5nZXM6ICIgKyByYW5nZUluc3BlY3RzLmpvaW4oIiwgIikgKwogICAgICAgICAgICAgICAgIikoYW5jaG9yOiAiICsgYW5jaG9yLmluc3BlY3QoKSArICIsIGZvY3VzOiAiICsgZm9jdXMuaW5zcGVjdCgpICsgIl0iOwoKICAgIH0KCiAgICBzZWxQcm90by5nZXROYW1lID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICJXcmFwcGVkU2VsZWN0aW9uIjsKICAgIH07CgogICAgc2VsUHJvdG8uaW5zcGVjdCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBpbnNwZWN0KHRoaXMpOwogICAgfTsKCiAgICBzZWxQcm90by5kZXRhY2ggPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLndpblt3aW5kb3dQcm9wZXJ0eU5hbWVdID0gbnVsbDsKICAgICAgICB0aGlzLndpbiA9IHRoaXMuYW5jaG9yTm9kZSA9IHRoaXMuZm9jdXNOb2RlID0gbnVsbDsKICAgIH07CgogICAgV3JhcHBlZFNlbGVjdGlvbi5pbnNwZWN0ID0gaW5zcGVjdDsKCiAgICBhcGkuU2VsZWN0aW9uID0gV3JhcHBlZFNlbGVjdGlvbjsKCiAgICBhcGkuc2VsZWN0aW9uUHJvdG90eXBlID0gc2VsUHJvdG87CgogICAgYXBpLmFkZENyZWF0ZU1pc3NpbmdOYXRpdmVBcGlMaXN0ZW5lcihmdW5jdGlvbih3aW4pIHsKICAgICAgICBpZiAodHlwZW9mIHdpbi5nZXRTZWxlY3Rpb24gPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgd2luLmdldFNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFwaS5nZXRTZWxlY3Rpb24odGhpcyk7CiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHdpbiA9IG51bGw7CiAgICB9KTsKfSk7Ci8qCglCYXNlLmpzLCB2ZXJzaW9uIDEuMWEKCUNvcHlyaWdodCAyMDA2LTIwMTAsIERlYW4gRWR3YXJkcwoJTGljZW5zZTogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHAKKi8KCnZhciBCYXNlID0gZnVuY3Rpb24oKSB7CgkvLyBkdW1teQp9OwoKQmFzZS5leHRlbmQgPSBmdW5jdGlvbihfaW5zdGFuY2UsIF9zdGF0aWMpIHsgLy8gc3ViY2xhc3MKCXZhciBleHRlbmQgPSBCYXNlLnByb3RvdHlwZS5leHRlbmQ7CgkKCS8vIGJ1aWxkIHRoZSBwcm90b3R5cGUKCUJhc2UuX3Byb3RvdHlwaW5nID0gdHJ1ZTsKCXZhciBwcm90byA9IG5ldyB0aGlzOwoJZXh0ZW5kLmNhbGwocHJvdG8sIF9pbnN0YW5jZSk7CiAgcHJvdG8uYmFzZSA9IGZ1bmN0aW9uKCkgewogICAgLy8gY2FsbCB0aGlzIG1ldGhvZCBmcm9tIGFueSBvdGhlciBtZXRob2QgdG8gaW52b2tlIHRoYXQgbWV0aG9kJ3MgYW5jZXN0b3IKICB9OwoJZGVsZXRlIEJhc2UuX3Byb3RvdHlwaW5nOwoJCgkvLyBjcmVhdGUgdGhlIHdyYXBwZXIgZm9yIHRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbgoJLy92YXIgY29uc3RydWN0b3IgPSBwcm90by5jb25zdHJ1Y3Rvci52YWx1ZU9mKCk7IC8vLWRlYW4KCXZhciBjb25zdHJ1Y3RvciA9IHByb3RvLmNvbnN0cnVjdG9yOwoJdmFyIGtsYXNzID0gcHJvdG8uY29uc3RydWN0b3IgPSBmdW5jdGlvbigpIHsKCQlpZiAoIUJhc2UuX3Byb3RvdHlwaW5nKSB7CgkJCWlmICh0aGlzLl9jb25zdHJ1Y3RpbmcgfHwgdGhpcy5jb25zdHJ1Y3RvciA9PSBrbGFzcykgeyAvLyBpbnN0YW50aWF0aW9uCgkJCQl0aGlzLl9jb25zdHJ1Y3RpbmcgPSB0cnVlOwoJCQkJY29uc3RydWN0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKCQkJCWRlbGV0ZSB0aGlzLl9jb25zdHJ1Y3Rpbmc7CgkJCX0gZWxzZSBpZiAoYXJndW1lbnRzWzBdICE9IG51bGwpIHsgLy8gY2FzdGluZwoJCQkJcmV0dXJuIChhcmd1bWVudHNbMF0uZXh0ZW5kIHx8IGV4dGVuZCkuY2FsbChhcmd1bWVudHNbMF0sIHByb3RvKTsKCQkJfQoJCX0KCX07CgkKCS8vIGJ1aWxkIHRoZSBjbGFzcyBpbnRlcmZhY2UKCWtsYXNzLmFuY2VzdG9yID0gdGhpczsKCWtsYXNzLmV4dGVuZCA9IHRoaXMuZXh0ZW5kOwoJa2xhc3MuZm9yRWFjaCA9IHRoaXMuZm9yRWFjaDsKCWtsYXNzLmltcGxlbWVudCA9IHRoaXMuaW1wbGVtZW50OwoJa2xhc3MucHJvdG90eXBlID0gcHJvdG87CglrbGFzcy50b1N0cmluZyA9IHRoaXMudG9TdHJpbmc7CglrbGFzcy52YWx1ZU9mID0gZnVuY3Rpb24odHlwZSkgewoJCS8vcmV0dXJuICh0eXBlID09ICJvYmplY3QiKSA/IGtsYXNzIDogY29uc3RydWN0b3I7IC8vLWRlYW4KCQlyZXR1cm4gKHR5cGUgPT0gIm9iamVjdCIpID8ga2xhc3MgOiBjb25zdHJ1Y3Rvci52YWx1ZU9mKCk7Cgl9OwoJZXh0ZW5kLmNhbGwoa2xhc3MsIF9zdGF0aWMpOwoJLy8gY2xhc3MgaW5pdGlhbGlzYXRpb24KCWlmICh0eXBlb2Yga2xhc3MuaW5pdCA9PSAiZnVuY3Rpb24iKSBrbGFzcy5pbml0KCk7CglyZXR1cm4ga2xhc3M7Cn07CgpCYXNlLnByb3RvdHlwZSA9IHsJCglleHRlbmQ6IGZ1bmN0aW9uKHNvdXJjZSwgdmFsdWUpIHsKCQlpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsgLy8gZXh0ZW5kaW5nIHdpdGggYSBuYW1lL3ZhbHVlIHBhaXIKCQkJdmFyIGFuY2VzdG9yID0gdGhpc1tzb3VyY2VdOwoJCQlpZiAoYW5jZXN0b3IgJiYgKHR5cGVvZiB2YWx1ZSA9PSAiZnVuY3Rpb24iKSAmJiAvLyBvdmVycmlkaW5nIGEgbWV0aG9kPwoJCQkJLy8gdGhlIHZhbHVlT2YoKSBjb21wYXJpc29uIGlzIHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXMKCQkJCSghYW5jZXN0b3IudmFsdWVPZiB8fCBhbmNlc3Rvci52YWx1ZU9mKCkgIT0gdmFsdWUudmFsdWVPZigpKSAmJgoJCQkJL1xiYmFzZVxiLy50ZXN0KHZhbHVlKSkgewoJCQkJLy8gZ2V0IHRoZSB1bmRlcmx5aW5nIG1ldGhvZAoJCQkJdmFyIG1ldGhvZCA9IHZhbHVlLnZhbHVlT2YoKTsKCQkJCS8vIG92ZXJyaWRlCgkJCQl2YWx1ZSA9IGZ1bmN0aW9uKCkgewoJCQkJCXZhciBwcmV2aW91cyA9IHRoaXMuYmFzZSB8fCBCYXNlLnByb3RvdHlwZS5iYXNlOwoJCQkJCXRoaXMuYmFzZSA9IGFuY2VzdG9yOwoJCQkJCXZhciByZXR1cm5WYWx1ZSA9IG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwoJCQkJCXRoaXMuYmFzZSA9IHByZXZpb3VzOwoJCQkJCXJldHVybiByZXR1cm5WYWx1ZTsKCQkJCX07CgkJCQkvLyBwb2ludCB0byB0aGUgdW5kZXJseWluZyBtZXRob2QKCQkJCXZhbHVlLnZhbHVlT2YgPSBmdW5jdGlvbih0eXBlKSB7CgkJCQkJcmV0dXJuICh0eXBlID09ICJvYmplY3QiKSA/IHZhbHVlIDogbWV0aG9kOwoJCQkJfTsKCQkJCXZhbHVlLnRvU3RyaW5nID0gQmFzZS50b1N0cmluZzsKCQkJfQoJCQl0aGlzW3NvdXJjZV0gPSB2YWx1ZTsKCQl9IGVsc2UgaWYgKHNvdXJjZSkgeyAvLyBleHRlbmRpbmcgd2l0aCBhbiBvYmplY3QgbGl0ZXJhbAoJCQl2YXIgZXh0ZW5kID0gQmFzZS5wcm90b3R5cGUuZXh0ZW5kOwoJCQkvLyBpZiB0aGlzIG9iamVjdCBoYXMgYSBjdXN0b21pc2VkIGV4dGVuZCBtZXRob2QgdGhlbiB1c2UgaXQKCQkJaWYgKCFCYXNlLl9wcm90b3R5cGluZyAmJiB0eXBlb2YgdGhpcyAhPSAiZnVuY3Rpb24iKSB7CgkJCQlleHRlbmQgPSB0aGlzLmV4dGVuZCB8fCBleHRlbmQ7CgkJCX0KCQkJdmFyIHByb3RvID0ge3RvU291cmNlOiBudWxsfTsKCQkJLy8gZG8gdGhlICJ0b1N0cmluZyIgYW5kIG90aGVyIG1ldGhvZHMgbWFudWFsbHkKCQkJdmFyIGhpZGRlbiA9IFsiY29uc3RydWN0b3IiLCAidG9TdHJpbmciLCAidmFsdWVPZiJdOwoJCQkvLyBpZiB3ZSBhcmUgcHJvdG90eXBpbmcgdGhlbiBpbmNsdWRlIHRoZSBjb25zdHJ1Y3RvcgoJCQl2YXIgaSA9IEJhc2UuX3Byb3RvdHlwaW5nID8gMCA6IDE7CgkJCXdoaWxlIChrZXkgPSBoaWRkZW5baSsrXSkgewoJCQkJaWYgKHNvdXJjZVtrZXldICE9IHByb3RvW2tleV0pIHsKCQkJCQlleHRlbmQuY2FsbCh0aGlzLCBrZXksIHNvdXJjZVtrZXldKTsKCgkJCQl9CgkJCX0KCQkJLy8gY29weSBlYWNoIG9mIHRoZSBzb3VyY2Ugb2JqZWN0J3MgcHJvcGVydGllcyB0byB0aGlzIG9iamVjdAoJCQlmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7CgkJCQlpZiAoIXByb3RvW2tleV0pIGV4dGVuZC5jYWxsKHRoaXMsIGtleSwgc291cmNlW2tleV0pOwoJCQl9CgkJfQoJCXJldHVybiB0aGlzOwoJfQp9OwoKLy8gaW5pdGlhbGlzZQpCYXNlID0gQmFzZS5leHRlbmQoewoJY29uc3RydWN0b3I6IGZ1bmN0aW9uKCkgewoJCXRoaXMuZXh0ZW5kKGFyZ3VtZW50c1swXSk7Cgl9Cn0sIHsKCWFuY2VzdG9yOiBPYmplY3QsCgl2ZXJzaW9uOiAiMS4xIiwKCQoJZm9yRWFjaDogZnVuY3Rpb24ob2JqZWN0LCBibG9jaywgY29udGV4dCkgewoJCWZvciAodmFyIGtleSBpbiBvYmplY3QpIHsKCQkJaWYgKHRoaXMucHJvdG90eXBlW2tleV0gPT09IHVuZGVmaW5lZCkgewoJCQkJYmxvY2suY2FsbChjb250ZXh0LCBvYmplY3Rba2V5XSwga2V5LCBvYmplY3QpOwoJCQl9CgkJfQoJfSwKCQkKCWltcGxlbWVudDogZnVuY3Rpb24oKSB7CgkJZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKCQkJaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gPT0gImZ1bmN0aW9uIikgewoJCQkJLy8gaWYgaXQncyBhIGZ1bmN0aW9uLCBjYWxsIGl0CgkJCQlhcmd1bWVudHNbaV0odGhpcy5wcm90b3R5cGUpOwoJCQl9IGVsc2UgewoJCQkJLy8gYWRkIHRoZSBpbnRlcmZhY2UgdXNpbmcgdGhlIGV4dGVuZCBtZXRob2QKCQkJCXRoaXMucHJvdG90eXBlLmV4dGVuZChhcmd1bWVudHNbaV0pOwoJCQl9CgkJfQoJCXJldHVybiB0aGlzOwoJfSwKCQoJdG9TdHJpbmc6IGZ1bmN0aW9uKCkgewoJCXJldHVybiBTdHJpbmcodGhpcy52YWx1ZU9mKCkpOwoJfQp9KTsvKioKICogRGV0ZWN0IGJyb3dzZXIgc3VwcG9ydCBmb3Igc3BlY2lmaWMgZmVhdHVyZXMKICovCnd5c2lodG1sNS5icm93c2VyID0gKGZ1bmN0aW9uKCkgewogIHZhciB1c2VyQWdlbnQgICA9IG5hdmlnYXRvci51c2VyQWdlbnQsCiAgICAgIHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksCiAgICAgIC8vIEJyb3dzZXIgc25pZmZpbmcgaXMgdW5mb3J0dW5hdGVseSBuZWVkZWQgc2luY2Ugc29tZSBiZWhhdmlvcnMgYXJlIGltcG9zc2libGUgdG8gZmVhdHVyZSBkZXRlY3QKICAgICAgaXNJRSAgICAgICAgPSB1c2VyQWdlbnQuaW5kZXhPZigiTVNJRSIpICAgICAgICAgIT09IC0xICYmIHVzZXJBZ2VudC5pbmRleE9mKCJPcGVyYSIpID09PSAtMSwKICAgICAgaXNHZWNrbyAgICAgPSB1c2VyQWdlbnQuaW5kZXhPZigiR2Vja28iKSAgICAgICAgIT09IC0xICYmIHVzZXJBZ2VudC5pbmRleE9mKCJLSFRNTCIpID09PSAtMSwKICAgICAgaXNXZWJLaXQgICAgPSB1c2VyQWdlbnQuaW5kZXhPZigiQXBwbGVXZWJLaXQvIikgIT09IC0xLAogICAgICBpc0Nocm9tZSAgICA9IHVzZXJBZ2VudC5pbmRleE9mKCJDaHJvbWUvIikgICAgICAhPT0gLTEsCiAgICAgIGlzT3BlcmEgICAgID0gdXNlckFnZW50LmluZGV4T2YoIk9wZXJhLyIpICAgICAgICE9PSAtMTsKICAKICBmdW5jdGlvbiBpb3NWZXJzaW9uKHVzZXJBZ2VudCkgewogICAgcmV0dXJuICgoL2lwYWR8aXBob25lfGlwb2QvLnRlc3QodXNlckFnZW50KSAmJiB1c2VyQWdlbnQubWF0Y2goLyBvcyAoXGQrKS4rPyBsaWtlIG1hYyBvcyB4LykpIHx8IFssIDBdKVsxXTsKICB9CiAgCiAgcmV0dXJuIHsKICAgIC8vIFN0YXRpYyB2YXJpYWJsZSBuZWVkZWQsIHB1YmxpY2x5IGFjY2Vzc2libGUsIHRvIGJlIGFibGUgb3ZlcnJpZGUgaXQgaW4gdW5pdCB0ZXN0cwogICAgVVNFUl9BR0VOVDogdXNlckFnZW50LAogICAgCiAgICAvKioKICAgICAqIEV4Y2x1ZGUgYnJvd3NlcnMgdGhhdCBhcmUgbm90IGNhcGFibGUgb2YgZGlzcGxheWluZyBhbmQgaGFuZGxpbmcKICAgICAqIGNvbnRlbnRFZGl0YWJsZSBhcyBkZXNpcmVkOgogICAgICogICAgLSBpUGhvbmUsIGlQYWQgKHRlc3RlZCBpT1MgNC4yLjIpIGFuZCBBbmRyb2lkICh0ZXN0ZWQgMi4yKSByZWZ1c2UgdG8gbWFrZSBjb250ZW50RWRpdGFibGVzIGZvY3VzYWJsZQogICAgICogICAgLSBJRSA8IDggY3JlYXRlIGludmFsaWQgbWFya3VwIGFuZCBjcmFzaCByYW5kb21seSBmcm9tIHRpbWUgdG8gdGltZQogICAgICoKICAgICAqIEByZXR1cm4ge0Jvb2xlYW59CiAgICAgKi8KICAgIHN1cHBvcnRlZDogZnVuY3Rpb24oKSB7CiAgICAgIHZhciB1c2VyQWdlbnQgICAgICAgICAgICAgICAgICAgPSB0aGlzLlVTRVJfQUdFTlQudG9Mb3dlckNhc2UoKSwKICAgICAgICAgIC8vIEVzc2VudGlhbCBmb3IgbWFraW5nIGh0bWwgZWxlbWVudHMgZWRpdGFibGUKICAgICAgICAgIGhhc0NvbnRlbnRFZGl0YWJsZVN1cHBvcnQgICA9ICJjb250ZW50RWRpdGFibGUiIGluIHRlc3RFbGVtZW50LAogICAgICAgICAgLy8gRm9sbG93aW5nIG1ldGhvZHMgYXJlIG5lZWRlZCBpbiBvcmRlciB0byBpbnRlcmFjdCB3aXRoIHRoZSBjb250ZW50RWRpdGFibGUgYXJlYQogICAgICAgICAgaGFzRWRpdGluZ0FwaVN1cHBvcnQgICAgICAgID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQgJiYgZG9jdW1lbnQucXVlcnlDb21tYW5kU3VwcG9ydGVkICYmIGRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN0YXRlLAogICAgICAgICAgLy8gZG9jdW1lbnQgc2VsZWN0b3IgYXBpcyBhcmUgb25seSBzdXBwb3J0ZWQgYnkgSUUgOCssIFNhZmFyaSA0KywgQ2hyb21lIGFuZCBGaXJlZm94IDMuNSsKICAgICAgICAgIGhhc1F1ZXJ5U2VsZWN0b3JTdXBwb3J0ICAgICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCwKICAgICAgICAgIC8vIGNvbnRlbnRFZGl0YWJsZSBpcyB1bnVzYWJsZSBpbiBtb2JpbGUgYnJvd3NlcnMgKHRlc3RlZCBpT1MgNC4yLjIsIEFuZHJvaWQgMi4yLCBPcGVyYSBNb2JpbGUsIFdlYk9TIDMuMDUpCiAgICAgICAgICBpc0luY29tcGF0aWJsZU1vYmlsZUJyb3dzZXIgPSAodGhpcy5pc0lvcygpICYmIGlvc1ZlcnNpb24odXNlckFnZW50KSA8IDUpIHx8IHVzZXJBZ2VudC5pbmRleE9mKCJvcGVyYSBtb2JpIikgIT09IC0xIHx8IHVzZXJBZ2VudC5pbmRleE9mKCJocHdvcy8iKSAhPT0gLTE7CiAgICAgIAogICAgICByZXR1cm4gaGFzQ29udGVudEVkaXRhYmxlU3VwcG9ydAogICAgICAgICYmIGhhc0VkaXRpbmdBcGlTdXBwb3J0CiAgICAgICAgJiYgaGFzUXVlcnlTZWxlY3RvclN1cHBvcnQKICAgICAgICAmJiAhaXNJbmNvbXBhdGlibGVNb2JpbGVCcm93c2VyOwogICAgfSwKICAgIAogICAgaXNUb3VjaERldmljZTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLnN1cHBvcnRzRXZlbnQoInRvdWNobW92ZSIpOwogICAgfSwKICAgIAogICAgaXNJb3M6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdXNlckFnZW50ID0gdGhpcy5VU0VSX0FHRU5ULnRvTG93ZXJDYXNlKCk7CiAgICAgIHJldHVybiB1c2VyQWdlbnQuaW5kZXhPZigid2Via2l0IikgIT09IC0xICYmIHVzZXJBZ2VudC5pbmRleE9mKCJtb2JpbGUiKSAhPT0gLTE7CiAgICB9LAogICAgCiAgICAvKioKICAgICAqIFdoZXRoZXIgdGhlIGJyb3dzZXIgc3VwcG9ydHMgc2FuZGJveGVkIGlmcmFtZXMKICAgICAqIEN1cnJlbnRseSBvbmx5IElFIDYrIG9mZmVycyBzdWNoIGZlYXR1cmUgPGlmcmFtZSBzZWN1cml0eT0icmVzdHJpY3RlZCI+CiAgICAgKgogICAgICogaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM0NjIyKHY9dnMuODUpLmFzcHgKICAgICAqIGh0dHA6Ly9ibG9ncy5tc2RuLmNvbS9iL2llL2FyY2hpdmUvMjAwOC8wMS8xOC91c2luZy1mcmFtZXMtbW9yZS1zZWN1cmVseS5hc3B4CiAgICAgKgogICAgICogSFRNTDUgc2FuZGJveGVkIGlmcmFtZXMgYXJlIHN0aWxsIGJ1Z2d5IGFuZCB0aGVpciBET00gaXMgbm90IHJlYWNoYWJsZSBmcm9tIHRoZSBvdXRzaWRlIChleGNlcHQgd2hlbiB1c2luZyBwb3N0TWVzc2FnZSkKICAgICAqLwogICAgc3VwcG9ydHNTYW5kYm94ZWRJZnJhbWVzOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGlzSUU7CiAgICB9LAoKICAgIC8qKgogICAgICogSUU2KzcgdGhyb3cgYSBtaXhlZCBjb250ZW50IHdhcm5pbmcgd2hlbiB0aGUgc3JjIG9mIGFuIGlmcmFtZQogICAgICogaXMgZW1wdHkvdW5zZXQgb3IgYWJvdXQ6YmxhbmsKICAgICAqIHdpbmRvdy5xdWVyeVNlbGVjdG9yIGlzIGltcGxlbWVudGVkIGFzIG9mIElFOAogICAgICovCiAgICB0aHJvd3NNaXhlZENvbnRlbnRXYXJuaW5nV2hlbklmcmFtZVNyY0lzRW1wdHk6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gISgicXVlcnlTZWxlY3RvciIgaW4gZG9jdW1lbnQpOwogICAgfSwKCiAgICAvKioKICAgICAqIFdoZXRoZXIgdGhlIGNhcmV0IGlzIGNvcnJlY3RseSBkaXNwbGF5ZWQgaW4gY29udGVudEVkaXRhYmxlIGVsZW1lbnRzCiAgICAgKiBGaXJlZm94IHNvbWV0aW1lcyBzaG93cyBhIGh1Z2UgY2FyZXQgaW4gdGhlIGJlZ2lubmluZyBhZnRlciBmb2N1c2luZwogICAgICovCiAgICBkaXNwbGF5c0NhcmV0SW5FbXB0eUNvbnRlbnRFZGl0YWJsZUNvcnJlY3RseTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiAhaXNHZWNrbzsKICAgIH0sCgogICAgLyoqCiAgICAgKiBPcGVyYSBhbmQgSUUgYXJlIHRoZSBvbmx5IGJyb3dzZXJzIHdobyBvZmZlciB0aGUgY3NzIHZhbHVlCiAgICAgKiBpbiB0aGUgb3JpZ2luYWwgdW5pdCwgdGh4IHRvIHRoZSBjdXJyZW50U3R5bGUgb2JqZWN0CiAgICAgKiBBbGwgb3RoZXIgYnJvd3NlcnMgcHJvdmlkZSB0aGUgY29tcHV0ZWQgc3R5bGUgaW4gcHggdmlhIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlCiAgICAgKi8KICAgIGhhc0N1cnJlbnRTdHlsZVByb3BlcnR5OiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuICJjdXJyZW50U3R5bGUiIGluIHRlc3RFbGVtZW50OwogICAgfSwKCiAgICAvKioKICAgICAqIFdoZXRoZXIgdGhlIGJyb3dzZXIgaW5zZXJ0cyBhIDxicj4gd2hlbiBwcmVzc2luZyBlbnRlciBpbiBhIGNvbnRlbnRFZGl0YWJsZSBlbGVtZW50CiAgICAgKi8KICAgIGluc2VydHNMaW5lQnJlYWtzT25SZXR1cm46IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gaXNHZWNrbzsKICAgIH0sCgogICAgc3VwcG9ydHNQbGFjZWhvbGRlckF0dHJpYnV0ZU9uOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICAgIHJldHVybiAicGxhY2Vob2xkZXIiIGluIGVsZW1lbnQ7CiAgICB9LAoKICAgIHN1cHBvcnRzRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50TmFtZSkgewogICAgICByZXR1cm4gIm9uIiArIGV2ZW50TmFtZSBpbiB0ZXN0RWxlbWVudCB8fCAoZnVuY3Rpb24oKSB7CiAgICAgICAgdGVzdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJvbiIgKyBldmVudE5hbWUsICJyZXR1cm47Iik7CiAgICAgICAgcmV0dXJuIHR5cGVvZih0ZXN0RWxlbWVudFsib24iICsgZXZlbnROYW1lXSkgPT09ICJmdW5jdGlvbiI7CiAgICAgIH0pKCk7CiAgICB9LAoKICAgIC8qKgogICAgICogT3BlcmEgZG9lc24ndCBjb3JyZWN0bHkgZmlyZSBmb2N1cy9ibHVyIGV2ZW50cyB3aGVuIGNsaWNraW5nIGluLSBhbmQgb3V0c2lkZSBvZiBpZnJhbWUKICAgICAqLwogICAgc3VwcG9ydHNFdmVudHNJbklmcmFtZUNvcnJlY3RseTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiAhaXNPcGVyYTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBDaHJvbWUgJiBTYWZhcmkgb25seSBmaXJlIHRoZSBvbmRyb3Avb25kcmFnZW5kLy4uLiBldmVudHMgd2hlbiB0aGUgb25kcmFnb3ZlciBldmVudCBpcyBjYW5jZWxsZWQKICAgICAqIHdpdGggZXZlbnQucHJldmVudERlZmF1bHQKICAgICAqIEZpcmVmb3ggMy42IGZpcmVzIHRob3NlIGV2ZW50cyBhbnl3YXksIGJ1dCB0aGUgbW96aWxsYSBkb2Mgc2F5cyB0aGF0IHRoZSBkcmFnb3Zlci9kcmFnZW50ZXIgZXZlbnQgbmVlZHMKICAgICAqIHRvIGJlIGNhbmNlbGxlZAogICAgICovCiAgICBmaXJlc09uRHJvcE9ubHlXaGVuT25EcmFnT3ZlcklzQ2FuY2VsbGVkOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGlzV2ViS2l0IHx8IGlzR2Vja287CiAgICB9LAogICAgCiAgICAvKioKICAgICAqIFdoZXRoZXIgdGhlIGJyb3dzZXIgc3VwcG9ydHMgdGhlIGV2ZW50LmRhdGFUcmFuc2ZlciBwcm9wZXJ0eSBpbiBhIHByb3BlciB3YXkKICAgICAqLwogICAgc3VwcG9ydHNEYXRhVHJhbnNmZXI6IGZ1bmN0aW9uKCkgewogICAgICB0cnkgewogICAgICAgIC8vIEZpcmVmb3ggZG9lc24ndCBzdXBwb3J0IGRhdGFUcmFuc2ZlciBpbiBhIHNhZmUgd2F5LCBpdCBkb2Vzbid0IHN0cmlwIHNjcmlwdCBjb2RlIGluIHRoZSBodG1sIHBheWxvYWQgKGxpa2UgQ2hyb21lIGRvZXMpCiAgICAgICAgcmV0dXJuIGlzV2ViS2l0ICYmICh3aW5kb3cuQ2xpcGJvYXJkIHx8IHdpbmRvdy5EYXRhVHJhbnNmZXIpLnByb3RvdHlwZS5nZXREYXRhOwogICAgICB9IGNhdGNoKGUpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0sCgogICAgLyoqCiAgICAgKiBFdmVyeXRoaW5nIGJlbG93IElFOSBkb2Vzbid0IGtub3cgaG93IHRvIHRyZWF0IEhUTUw1IHRhZ3MKICAgICAqCiAgICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCBUaGUgZG9jdW1lbnQgb2JqZWN0IG9uIHdoaWNoIHRvIGNoZWNrIEhUTUw1IHN1cHBvcnQKICAgICAqCiAgICAgKiBAZXhhbXBsZQogICAgICogICAgd3lzaWh0bWw1LmJyb3dzZXIuc3VwcG9ydHNIVE1MNVRhZ3MoZG9jdW1lbnQpOwogICAgICovCiAgICBzdXBwb3J0c0hUTUw1VGFnczogZnVuY3Rpb24oY29udGV4dCkgewogICAgICB2YXIgZWxlbWVudCA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCgiZGl2IiksCiAgICAgICAgICBodG1sNSAgID0gIjxhcnRpY2xlPmZvbzwvYXJ0aWNsZT4iOwogICAgICBlbGVtZW50LmlubmVySFRNTCA9IGh0bWw1OwogICAgICByZXR1cm4gZWxlbWVudC5pbm5lckhUTUwudG9Mb3dlckNhc2UoKSA9PT0gaHRtbDU7CiAgICB9LAoKICAgIC8qKgogICAgICogQ2hlY2tzIHdoZXRoZXIgYSBkb2N1bWVudCBzdXBwb3J0cyBhIGNlcnRhaW4gcXVlcnlDb21tYW5kCiAgICAgKiBJbiBwYXJ0aWN1bGFyLCBPcGVyYSBuZWVkcyBhIHJlZmVyZW5jZSB0byBhIGRvY3VtZW50IHRoYXQgaGFzIGEgY29udGVudEVkaXRhYmxlIGluIGl0J3MgZG9tIHRyZWUKICAgICAqIGluIG9kZXIgdG8gcmVwb3J0IGNvcnJlY3QgcmVzdWx0cwogICAgICoKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkb2MgRG9jdW1lbnQgb2JqZWN0IG9uIHdoaWNoIHRvIGNoZWNrIGZvciBhIHF1ZXJ5IGNvbW1hbmQKICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb21tYW5kIFRoZSBxdWVyeSBjb21tYW5kIHRvIGNoZWNrIGZvcgogICAgICogQHJldHVybiB7Qm9vbGVhbn0KICAgICAqCiAgICAgKiBAZXhhbXBsZQogICAgICogICAgd3lzaWh0bWw1LmJyb3dzZXIuc3VwcG9ydHNDb21tYW5kKGRvY3VtZW50LCAiYm9sZCIpOwogICAgICovCiAgICBzdXBwb3J0c0NvbW1hbmQ6IChmdW5jdGlvbigpIHsKICAgICAgLy8gRm9sbG93aW5nIGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQgYnV0IGNvbnRhaW4gYnVncyBpbiBzb21lIGJyb3dzZXJzCiAgICAgIHZhciBidWdneUNvbW1hbmRzID0gewogICAgICAgIC8vIGZvcm1hdEJsb2NrIGZhaWxzIHdpdGggc29tZSB0YWdzIChlZy4gPGJsb2NrcXVvdGU+KQogICAgICAgICJmb3JtYXRCbG9jayI6ICAgICAgICAgIGlzSUUsCiAgICAgICAgIC8vIFdoZW4gaW5zZXJ0aW5nIHVub3JkZXJlZCBvciBvcmRlcmVkIGxpc3RzIGluIEZpcmVmb3gsIENocm9tZSBvciBTYWZhcmksIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBvciBsaW5lIGdldHMKICAgICAgICAgLy8gY29udmVydGVkIGludG8gYSBsaXN0ICg8dWw+PGxpPi4uLjwvbGk+PC91bD4sIDxvbD48bGk+Li4uPC9saT48L29sPikKICAgICAgICAgLy8gSUUgYW5kIE9wZXJhIGFjdCBhIGJpdCBkaWZmZXJlbnQgaGVyZSBhcyB0aGV5IGNvbnZlcnQgdGhlIGVudGlyZSBjb250ZW50IG9mIHRoZSBjdXJyZW50IGJsb2NrIGVsZW1lbnQgaW50byBhIGxpc3QKICAgICAgICAiaW5zZXJ0VW5vcmRlcmVkTGlzdCI6ICBpc0lFIHx8IGlzT3BlcmEgfHwgaXNXZWJLaXQsCiAgICAgICAgImluc2VydE9yZGVyZWRMaXN0IjogICAgaXNJRSB8fCBpc09wZXJhIHx8IGlzV2ViS2l0CiAgICAgIH07CiAgICAgIAogICAgICAvLyBGaXJlZm94IHRocm93cyBlcnJvcnMgZm9yIHF1ZXJ5Q29tbWFuZFN1cHBvcnRlZCwgc28gd2UgaGF2ZSB0byBidWlsZCB1cCBvdXIgb3duIG9iamVjdCBvZiBzdXBwb3J0ZWQgY29tbWFuZHMKICAgICAgdmFyIHN1cHBvcnRlZCA9IHsKICAgICAgICAiaW5zZXJ0SFRNTCI6IGlzR2Vja28KICAgICAgfTsKCiAgICAgIHJldHVybiBmdW5jdGlvbihkb2MsIGNvbW1hbmQpIHsKICAgICAgICB2YXIgaXNCdWdneSA9IGJ1Z2d5Q29tbWFuZHNbY29tbWFuZF07CiAgICAgICAgaWYgKCFpc0J1Z2d5KSB7CiAgICAgICAgICAvLyBGaXJlZm94IHRocm93cyBlcnJvcnMgd2hlbiBpbnZva2luZyBxdWVyeUNvbW1hbmRTdXBwb3J0ZWQgb3IgcXVlcnlDb21tYW5kRW5hYmxlZAogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIGRvYy5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoY29tbWFuZCk7CiAgICAgICAgICB9IGNhdGNoKGUxKSB7fQoKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBkb2MucXVlcnlDb21tYW5kRW5hYmxlZChjb21tYW5kKTsKICAgICAgICAgIH0gY2F0Y2goZTIpIHsKICAgICAgICAgICAgcmV0dXJuICEhc3VwcG9ydGVkW2NvbW1hbmRdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH07CiAgICB9KSgpLAoKICAgIC8qKgogICAgICogSUU6IFVSTHMgc3RhcnRpbmcgd2l0aDoKICAgICAqICAgIHd3dy4sIGh0dHA6Ly8sIGh0dHBzOi8vLCBmdHA6Ly8sIGdvcGhlcjovLywgbWFpbHRvOiwgbmV3Oiwgc25ld3M6LCB0ZWxuZXQ6LCB3YXNpczosIGZpbGU6Ly8sCiAgICAgKiAgICBubnRwOi8vLCBuZXdzcmM6LCBsZGFwOi8vLCBsZGFwczovLywgb3V0bG9vazosIG1pYzovLyBhbmQgdXJsOgogICAgICogd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGF1dG8tbGlua2VkIHdoZW4gZWl0aGVyIHRoZSB1c2VyIGluc2VydHMgdGhlbSB2aWEgY29weSZwYXN0ZSBvciBwcmVzc2VzIHRoZQogICAgICogc3BhY2UgYmFyIHdoZW4gdGhlIGNhcmV0IGlzIGRpcmVjdGx5IGFmdGVyIHN1Y2ggYW4gdXJsLgogICAgICogVGhpcyBiZWhhdmlvciBjYW5ub3QgZWFzaWx5IGJlIGF2b2lkZWQgaW4gSUUgPCA5IHNpbmNlIHRoZSBsb2dpYyBpcyBoYXJkY29kZWQgaW4gdGhlIG1zaHRtbC5kbGwKICAgICAqIChyZWxhdGVkIGJsb2cgcG9zdCBvbiBtc2RuCiAgICAgKiBodHRwOi8vYmxvZ3MubXNkbi5jb20vYi9pZWludGVybmFscy9hcmNoaXZlLzIwMDkvMDkvMTcvcHJldmVudC1hdXRvbWF0aWMtaHlwZXJsaW5raW5nLWluLWNvbnRlbnRlZGl0YWJsZS1odG1sLmFzcHgpLgogICAgICovCiAgICBkb2VzQXV0b0xpbmtpbmdJbkNvbnRlbnRFZGl0YWJsZTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBpc0lFOwogICAgfSwKCiAgICAvKioKICAgICAqIEFzIHN0YXRlZCBhYm92ZSwgSUUgYXV0byBsaW5rcyB1cmxzIHR5cGVkIGludG8gY29udGVudEVkaXRhYmxlIGVsZW1lbnRzCiAgICAgKiBTaW5jZSBJRTkgaXQncyBwb3NzaWJsZSB0byBwcmV2ZW50IHRoaXMgYmVoYXZpb3IKICAgICAqLwogICAgY2FuRGlzYWJsZUF1dG9MaW5raW5nOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuc3VwcG9ydHNDb21tYW5kKGRvY3VtZW50LCAiQXV0b1VybERldGVjdCIpOwogICAgfSwKCiAgICAvKioKICAgICAqIElFIGxlYXZlcyBhbiBlbXB0eSBwYXJhZ3JhcGggaW4gdGhlIGNvbnRlbnRFZGl0YWJsZSBlbGVtZW50IGFmdGVyIGNsZWFyaW5nIGl0CiAgICAgKiBDaHJvbWUvU2FmYXJpIHNvbWV0aW1lcyBhbiBlbXB0eSA8ZGl2PgogICAgICovCiAgICBjbGVhcnNDb250ZW50RWRpdGFibGVDb3JyZWN0bHk6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gaXNHZWNrbyB8fCBpc09wZXJhIHx8IGlzV2ViS2l0OwogICAgfSwKCiAgICAvKioKICAgICAqIElFIGdpdmVzIHdyb25nIHJlc3VsdHMgZm9yIGdldEF0dHJpYnV0ZQogICAgICovCiAgICBzdXBwb3J0c0dldEF0dHJpYnV0ZUNvcnJlY3RseTogZnVuY3Rpb24oKSB7CiAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CiAgICAgIHJldHVybiB0ZC5nZXRBdHRyaWJ1dGUoInJvd3NwYW4iKSAhPSAiMSI7CiAgICB9LAoKICAgIC8qKgogICAgICogV2hlbiBjbGlja2luZyBvbiBpbWFnZXMgaW4gSUUsIE9wZXJhIGFuZCBGaXJlZm94LCB0aGV5IGFyZSBzZWxlY3RlZCwgd2hpY2ggbWFrZXMgaXQgZWFzeSB0byBpbnRlcmFjdCB3aXRoIHRoZW0uCiAgICAgKiBDaHJvbWUgYW5kIFNhZmFyaSBib3RoIGRvbid0IHN1cHBvcnQgdGhpcwogICAgICovCiAgICBjYW5TZWxlY3RJbWFnZXNJbkNvbnRlbnRFZGl0YWJsZTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBpc0dlY2tvIHx8IGlzSUUgfHwgaXNPcGVyYTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBXaGVuIHRoZSBjYXJldCBpcyBpbiBhbiBlbXB0eSBsaXN0ICg8dWw+PGxpPnw8L2xpPjwvdWw+KSB3aGljaCBpcyB0aGUgZmlyc3QgY2hpbGQgaW4gYW4gY29udGVudEVkaXRhYmxlIGNvbnRhaW5lcgogICAgICogcHJlc3NpbmcgYmFja3NwYWNlIGRvZXNuJ3QgcmVtb3ZlIHRoZSBlbnRpcmUgbGlzdCBhcyBkb25lIGluIG90aGVyIGJyb3dzZXJzCiAgICAgKi8KICAgIGNsZWFyc0xpc3RzSW5Db250ZW50RWRpdGFibGVDb3JyZWN0bHk6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gaXNHZWNrbyB8fCBpc0lFIHx8IGlzV2ViS2l0OwogICAgfSwKCiAgICAvKioKICAgICAqIEFsbCBicm93c2VycyBleGNlcHQgU2FmYXJpIGFuZCBDaHJvbWUgYXV0b21hdGljYWxseSBzY3JvbGwgdGhlIHJhbmdlL2NhcmV0IHBvc2l0aW9uIGludG8gdmlldwogICAgICovCiAgICBhdXRvU2Nyb2xsc1RvQ2FyZXQ6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gIWlzV2ViS2l0OwogICAgfSwKCiAgICAvKioKICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGJyb3dzZXIgYXV0b21hdGljYWxseSBjbG9zZXMgdGFncyB0aGF0IGRvbid0IG5lZWQgdG8gYmUgb3BlbmVkCiAgICAgKi8KICAgIGF1dG9DbG9zZXNVbmNsb3NlZFRhZ3M6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgY2xvbmVkVGVzdEVsZW1lbnQgPSB0ZXN0RWxlbWVudC5jbG9uZU5vZGUoZmFsc2UpLAogICAgICAgICAgcmV0dXJuVmFsdWUsCiAgICAgICAgICBpbm5lckhUTUw7CgogICAgICBjbG9uZWRUZXN0RWxlbWVudC5pbm5lckhUTUwgPSAiPHA+PGRpdj48L2Rpdj4iOwogICAgICBpbm5lckhUTUwgICAgICAgICAgICAgICAgICAgPSBjbG9uZWRUZXN0RWxlbWVudC5pbm5lckhUTUwudG9Mb3dlckNhc2UoKTsKICAgICAgcmV0dXJuVmFsdWUgICAgICAgICAgICAgICAgID0gaW5uZXJIVE1MID09PSAiPHA+PC9wPjxkaXY+PC9kaXY+IiB8fCBpbm5lckhUTUwgPT09ICI8cD48ZGl2PjwvZGl2PjwvcD4iOwoKICAgICAgLy8gQ2FjaGUgcmVzdWx0IGJ5IG92ZXJ3cml0aW5nIGN1cnJlbnQgZnVuY3Rpb24KICAgICAgdGhpcy5hdXRvQ2xvc2VzVW5jbG9zZWRUYWdzID0gZnVuY3Rpb24oKSB7IHJldHVybiByZXR1cm5WYWx1ZTsgfTsKCiAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBXaGV0aGVyIHRoZSBicm93c2VyIHN1cHBvcnRzIHRoZSBuYXRpdmUgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSB3aGljaCByZXR1cm5zIGxpdmUgTm9kZUxpc3RzCiAgICAgKi8KICAgIHN1cHBvcnRzTmF0aXZlR2V0RWxlbWVudHNCeUNsYXNzTmFtZTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBTdHJpbmcoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSkuaW5kZXhPZigiW25hdGl2ZSBjb2RlXSIpICE9PSAtMTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBBcyBvZiBub3cgKDE5LjA0LjIwMTEpIG9ubHkgc3VwcG9ydGVkIGJ5IEZpcmVmb3ggNCBhbmQgQ2hyb21lCiAgICAgKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vRE9NL1NlbGVjdGlvbi9tb2RpZnkKICAgICAqLwogICAgc3VwcG9ydHNTZWxlY3Rpb25Nb2RpZnk6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gImdldFNlbGVjdGlvbiIgaW4gd2luZG93ICYmICJtb2RpZnkiIGluIHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgIH0sCiAgICAKICAgIC8qKgogICAgICogV2hldGhlciB0aGUgYnJvd3NlciBzdXBwb3J0cyB0aGUgY2xhc3NMaXN0IG9iamVjdCBmb3IgZmFzdCBjbGFzc05hbWUgbWFuaXB1bGF0aW9uCiAgICAgKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vRE9NL2VsZW1lbnQuY2xhc3NMaXN0CiAgICAgKi8KICAgIHN1cHBvcnRzQ2xhc3NMaXN0OiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuICJjbGFzc0xpc3QiIGluIHRlc3RFbGVtZW50OwogICAgfSwKICAgIAogICAgLyoqCiAgICAgKiBPcGVyYSBuZWVkcyBhIHdoaXRlIHNwYWNlIGFmdGVyIGEgPGJyPiBpbiBvcmRlciB0byBwb3NpdGlvbiB0aGUgY2FyZXQgY29ycmVjdGx5CiAgICAgKi8KICAgIG5lZWRzU3BhY2VBZnRlckxpbmVCcmVhazogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBpc09wZXJhOwogICAgfSwKICAgIAogICAgLyoqCiAgICAgKiBXaGV0aGVyIHRoZSBicm93c2VyIHN1cHBvcnRzIHRoZSBzcGVlY2ggYXBpIG9uIHRoZSBnaXZlbiBlbGVtZW50CiAgICAgKiBTZWUgaHR0cDovL21pa2VwdWx0ei5jb20vMjAxMS8wMy9hY2Nlc3NpbmctZ29vZ2xlLXNwZWVjaC1hcGktY2hyb21lLTExLwogICAgICoKICAgICAqIEBleGFtcGxlCiAgICAgKiAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwogICAgICogICAgaWYgKHd5c2lodG1sNS5icm93c2VyLnN1cHBvcnRzU3BlZWNoQXBpT24oaW5wdXQpKSB7CiAgICAgKiAgICAgIC8vIC4uLgogICAgICogICAgfQogICAgICovCiAgICBzdXBwb3J0c1NwZWVjaEFwaU9uOiBmdW5jdGlvbihpbnB1dCkgewogICAgICB2YXIgY2hyb21lVmVyc2lvbiA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pIHx8IFssIDBdOwogICAgICByZXR1cm4gY2hyb21lVmVyc2lvblsxXSA+PSAxMSAmJiAoIm9ud2Via2l0c3BlZWNoY2hhbmdlIiBpbiBpbnB1dCB8fCAic3BlZWNoIiBpbiBpbnB1dCk7CiAgICB9LAogICAgCiAgICAvKioKICAgICAqIElFOSBjcmFzaGVzIHdoZW4gc2V0dGluZyBhIGdldHRlciB2aWEgT2JqZWN0LmRlZmluZVByb3BlcnR5IG9uIFhNTEh0dHBSZXF1ZXN0IG9yIFhEb21haW5SZXF1ZXN0CiAgICAgKiBTZWUgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vaWUvZmVlZGJhY2svZGV0YWlscy82NTAxMTIKICAgICAqIG9yIHRyeSB0aGUgUE9DIGh0dHA6Ly90aWZmdGlmZi5kZS9pZTlfY3Jhc2gvCiAgICAgKi8KICAgIGNyYXNoZXNXaGVuRGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uKHByb3BlcnR5KSB7CiAgICAgIHJldHVybiBpc0lFICYmIChwcm9wZXJ0eSA9PT0gIlhNTEh0dHBSZXF1ZXN0IiB8fCBwcm9wZXJ0eSA9PT0gIlhEb21haW5SZXF1ZXN0Iik7CiAgICB9LAogICAgCiAgICAvKioKICAgICAqIElFIGlzIHRoZSBvbmx5IGJyb3dzZXIgd2hvIGZpcmVzIHRoZSAiZm9jdXMiIGV2ZW50IG5vdCBpbW1lZGlhdGVseSB3aGVuIC5mb2N1cygpIGlzIGNhbGxlZCBvbiBhbiBlbGVtZW50CiAgICAgKi8KICAgIGRvZXNBc3luY0ZvY3VzOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGlzSUU7CiAgICB9LAogICAgCiAgICAvKioKICAgICAqIEluIElFIGl0J3MgaW1wc3NpYmxlIGZvciB0aGUgdXNlciBhbmQgZm9yIHRoZSBzZWxlY3Rpb24gbGlicmFyeSB0byBzZXQgdGhlIGNhcmV0IGFmdGVyIGFuIDxpbWc+IHdoZW4gaXQncyB0aGUgbGFzdENoaWxkIGluIHRoZSBkb2N1bWVudAogICAgICovCiAgICBoYXNQcm9ibGVtc1NldHRpbmdDYXJldEFmdGVySW1nOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGlzSUU7CiAgICB9LAogICAgCiAgICBoYXNVbmRvSW5Db250ZXh0TWVudTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBpc0dlY2tvIHx8IGlzQ2hyb21lIHx8IGlzT3BlcmE7CiAgICB9CiAgfTsKfSkoKTt3eXNpaHRtbDUubGFuZy5hcnJheSA9IGZ1bmN0aW9uKGFycikgewogIHJldHVybiB7CiAgICAvKioKICAgICAqIENoZWNrIHdoZXRoZXIgYSBnaXZlbiBvYmplY3QgZXhpc3RzIGluIGFuIGFycmF5CiAgICAgKgogICAgICogQGV4YW1wbGUKICAgICAqICAgIHd5c2lodG1sNS5sYW5nLmFycmF5KFsxLCAyXSkuY29udGFpbnMoMSk7CiAgICAgKiAgICAvLyA9PiB0cnVlCiAgICAgKi8KICAgIGNvbnRhaW5zOiBmdW5jdGlvbihuZWVkbGUpIHsKICAgICAgaWYgKGFyci5pbmRleE9mKSB7CiAgICAgICAgcmV0dXJuIGFyci5pbmRleE9mKG5lZWRsZSkgIT09IC0xOwogICAgICB9IGVsc2UgewogICAgICAgIGZvciAodmFyIGk9MCwgbGVuZ3RoPWFyci5sZW5ndGg7IGk8bGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGlmIChhcnJbaV0gPT09IG5lZWRsZSkgeyByZXR1cm4gdHJ1ZTsgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0sCiAgICAKICAgIC8qKgogICAgICogU3Vic3RyYWN0IG9uZSBhcnJheSBmcm9tIGFub3RoZXIKICAgICAqCiAgICAgKiBAZXhhbXBsZQogICAgICogICAgd3lzaWh0bWw1LmxhbmcuYXJyYXkoWzEsIDIsIDMsIDRdKS53aXRob3V0KFszLCA0XSk7CiAgICAgKiAgICAvLyA9PiBbMSwgMl0KICAgICAqLwogICAgd2l0aG91dDogZnVuY3Rpb24oYXJyYXlUb1N1YnN0cmFjdCkgewogICAgICBhcnJheVRvU3Vic3RyYWN0ID0gd3lzaWh0bWw1LmxhbmcuYXJyYXkoYXJyYXlUb1N1YnN0cmFjdCk7CiAgICAgIHZhciBuZXdBcnIgID0gW10sCiAgICAgICAgICBpICAgICAgID0gMCwKICAgICAgICAgIGxlbmd0aCAgPSBhcnIubGVuZ3RoOwogICAgICBmb3IgKDsgaTxsZW5ndGg7IGkrKykgewogICAgICAgIGlmICghYXJyYXlUb1N1YnN0cmFjdC5jb250YWlucyhhcnJbaV0pKSB7CiAgICAgICAgICBuZXdBcnIucHVzaChhcnJbaV0pOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbmV3QXJyOwogICAgfSwKICAgIAogICAgLyoqCiAgICAgKiBSZXR1cm4gYSBjbGVhbiBuYXRpdmUgYXJyYXkKICAgICAqIAogICAgICogRm9sbG93aW5nIHdpbGwgY29udmVydCBhIExpdmUgTm9kZUxpc3QgdG8gYSBwcm9wZXIgQXJyYXkKICAgICAqIEBleGFtcGxlCiAgICAgKiAgICB2YXIgY2hpbGROb2RlcyA9IHd5c2lodG1sNS5sYW5nLmFycmF5KGRvY3VtZW50LmJvZHkuY2hpbGROb2RlcykuZ2V0KCk7CiAgICAgKi8KICAgIGdldDogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBpICAgICAgICA9IDAsCiAgICAgICAgICBsZW5ndGggICA9IGFyci5sZW5ndGgsCiAgICAgICAgICBuZXdBcnJheSA9IFtdOwogICAgICBmb3IgKDsgaTxsZW5ndGg7IGkrKykgewogICAgICAgIG5ld0FycmF5LnB1c2goYXJyW2ldKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3QXJyYXk7CiAgICB9CiAgfTsKfTt3eXNpaHRtbDUubGFuZy5EaXNwYXRjaGVyID0gQmFzZS5leHRlbmQoCiAgLyoqIEBzY29wZSB3eXNpaHRtbDUubGFuZy5EaWFsb2cucHJvdG90eXBlICovIHsKICBvYnNlcnZlOiBmdW5jdGlvbihldmVudE5hbWUsIGhhbmRsZXIpIHsKICAgIHRoaXMuZXZlbnRzID0gdGhpcy5ldmVudHMgfHwge307CiAgICB0aGlzLmV2ZW50c1tldmVudE5hbWVdID0gdGhpcy5ldmVudHNbZXZlbnROYW1lXSB8fCBbXTsKICAgIHRoaXMuZXZlbnRzW2V2ZW50TmFtZV0ucHVzaChoYW5kbGVyKTsKICAgIHJldHVybiB0aGlzOwogIH0sCgogIG9uOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLm9ic2VydmUuYXBwbHkodGhpcywgd3lzaWh0bWw1LmxhbmcuYXJyYXkoYXJndW1lbnRzKS5nZXQoKSk7CiAgfSwKCiAgZmlyZTogZnVuY3Rpb24oZXZlbnROYW1lLCBwYXlsb2FkKSB7CiAgICB0aGlzLmV2ZW50cyA9IHRoaXMuZXZlbnRzIHx8IHt9OwogICAgdmFyIGhhbmRsZXJzID0gdGhpcy5ldmVudHNbZXZlbnROYW1lXSB8fCBbXSwKICAgICAgICBpICAgICAgICA9IDA7CiAgICBmb3IgKDsgaTxoYW5kbGVycy5sZW5ndGg7IGkrKykgewogICAgICBoYW5kbGVyc1tpXS5jYWxsKHRoaXMsIHBheWxvYWQpOwogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgc3RvcE9ic2VydmluZzogZnVuY3Rpb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7CiAgICB0aGlzLmV2ZW50cyA9IHRoaXMuZXZlbnRzIHx8IHt9OwogICAgdmFyIGkgPSAwLAogICAgICAgIGhhbmRsZXJzLAogICAgICAgIG5ld0hhbmRsZXJzOwogICAgaWYgKGV2ZW50TmFtZSkgewogICAgICBoYW5kbGVycyAgICA9IHRoaXMuZXZlbnRzW2V2ZW50TmFtZV0gfHwgW10sCiAgICAgIG5ld0hhbmRsZXJzID0gW107CiAgICAgIGZvciAoOyBpPGhhbmRsZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGhhbmRsZXJzW2ldICE9PSBoYW5kbGVyICYmIGhhbmRsZXIpIHsKICAgICAgICAgIG5ld0hhbmRsZXJzLnB1c2goaGFuZGxlcnNbaV0pOwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLmV2ZW50c1tldmVudE5hbWVdID0gbmV3SGFuZGxlcnM7CiAgICB9IGVsc2UgewogICAgICAvLyBDbGVhbiB1cCBhbGwgZXZlbnRzCiAgICAgIHRoaXMuZXZlbnRzID0ge307CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9Cn0pO3d5c2lodG1sNS5sYW5nLm9iamVjdCA9IGZ1bmN0aW9uKG9iaikgewogIHJldHVybiB7CiAgICAvKioKICAgICAqIEBleGFtcGxlCiAgICAgKiAgICB3eXNpaHRtbDUubGFuZy5vYmplY3QoeyBmb286IDEsIGJhcjogMSB9KS5tZXJnZSh7IGJhcjogMiwgYmF6OiAzIH0pLmdldCgpOwogICAgICogICAgLy8gPT4geyBmb286IDEsIGJhcjogMiwgYmF6OiAzIH0KICAgICAqLwogICAgbWVyZ2U6IGZ1bmN0aW9uKG90aGVyT2JqKSB7CiAgICAgIGZvciAodmFyIGkgaW4gb3RoZXJPYmopIHsKICAgICAgICBvYmpbaV0gPSBvdGhlck9ialtpXTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0sCiAgICAKICAgIGdldDogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBvYmo7CiAgICB9LAogICAgCiAgICAvKioKICAgICAqIEBleGFtcGxlCiAgICAgKiAgICB3eXNpaHRtbDUubGFuZy5vYmplY3QoeyBmb286IDEgfSkuY2xvbmUoKTsKICAgICAqICAgIC8vID0+IHsgZm9vOiAxIH0KICAgICAqLwogICAgY2xvbmU6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgbmV3T2JqID0ge30sCiAgICAgICAgICBpOwogICAgICBmb3IgKGkgaW4gb2JqKSB7CiAgICAgICAgbmV3T2JqW2ldID0gb2JqW2ldOwogICAgICB9CiAgICAgIHJldHVybiBuZXdPYmo7CiAgICB9LAogICAgCiAgICAvKioKICAgICAqIEBleGFtcGxlCiAgICAgKiAgICB3eXNpaHRtbDUubGFuZy5vYmplY3QoW10pLmlzQXJyYXkoKTsKICAgICAqICAgIC8vID0+IHRydWUKICAgICAqLwogICAgaXNBcnJheTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gIltvYmplY3QgQXJyYXldIjsKICAgIH0KICB9Owp9OyhmdW5jdGlvbigpIHsKICB2YXIgV0hJVEVfU1BBQ0VfU1RBUlQgPSAvXlxzKy8sCiAgICAgIFdISVRFX1NQQUNFX0VORCAgID0gL1xzKyQvOwogIHd5c2lodG1sNS5sYW5nLnN0cmluZyA9IGZ1bmN0aW9uKHN0cikgewogICAgc3RyID0gU3RyaW5nKHN0cik7CiAgICByZXR1cm4gewogICAgICAvKioKICAgICAgICogQGV4YW1wbGUKICAgICAgICogICAgd3lzaWh0bWw1Lmxhbmcuc3RyaW5nKCIgICBmb28gICAiKS50cmltKCk7CiAgICAgICAqICAgIC8vID0+ICJmb28iCiAgICAgICAqLwogICAgICB0cmltOiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoV0hJVEVfU1BBQ0VfU1RBUlQsICIiKS5yZXBsYWNlKFdISVRFX1NQQUNFX0VORCwgIiIpOwogICAgICB9LAogICAgICAKICAgICAgLyoqCiAgICAgICAqIEBleGFtcGxlCiAgICAgICAqICAgIHd5c2lodG1sNS5sYW5nLnN0cmluZygiSGVsbG8gI3tuYW1lfSIpLmludGVycG9sYXRlKHsgbmFtZTogIkNocmlzdG9waGVyIiB9KTsKICAgICAgICogICAgLy8gPT4gIkhlbGxvIENocmlzdG9waGVyIgogICAgICAgKi8KICAgICAgaW50ZXJwb2xhdGU6IGZ1bmN0aW9uKHZhcnMpIHsKICAgICAgICBmb3IgKHZhciBpIGluIHZhcnMpIHsKICAgICAgICAgIHN0ciA9IHRoaXMucmVwbGFjZSgiI3siICsgaSArICJ9IikuYnkodmFyc1tpXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzdHI7CiAgICAgIH0sCiAgICAgIAogICAgICAvKioKICAgICAgICogQGV4YW1wbGUKICAgICAgICogICAgd3lzaWh0bWw1Lmxhbmcuc3RyaW5nKCJIZWxsbyBUb20iKS5yZXBsYWNlKCJUb20iKS53aXRoKCJIYW5zIik7CiAgICAgICAqICAgIC8vID0+ICJIZWxsbyBIYW5zIgogICAgICAgKi8KICAgICAgcmVwbGFjZTogZnVuY3Rpb24oc2VhcmNoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJ5OiBmdW5jdGlvbihyZXBsYWNlKSB7CiAgICAgICAgICAgIHJldHVybiBzdHIuc3BsaXQoc2VhcmNoKS5qb2luKHJlcGxhY2UpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Owp9KSgpOy8qKgogKiBGaW5kIHVybHMgaW4gZGVzY2VuZGFudCB0ZXh0IG5vZGVzIG9mIGFuIGVsZW1lbnQgYW5kIGF1dG8tbGlua3MgdGhlbQogKiBJbnNwaXJlZCBieSBodHRwOi8vamFtZXMucGFkb2xzZXkuY29tL2phdmFzY3JpcHQvZmluZC1hbmQtcmVwbGFjZS10ZXh0LXdpdGgtamF2YXNjcmlwdC8KICoKICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IENvbnRhaW5lciBlbGVtZW50IGluIHdoaWNoIHRvIHNlYXJjaCBmb3IgdXJscwogKgogKiBAZXhhbXBsZQogKiAgICA8ZGl2IGlkPSJ0ZXh0LWNvbnRhaW5lciI+UGxlYXNlIGNsaWNrIGhlcmU6IHd3dy5nb29nbGUuY29tPC9kaXY+CiAqICAgIDxzY3JpcHQ+d3lzaWh0bWw1LmRvbS5hdXRvTGluayhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGV4dC1jb250YWluZXIiKSk7PC9zY3JpcHQ+CiAqLwooZnVuY3Rpb24od3lzaWh0bWw1KSB7CiAgdmFyIC8qKgogICAgICAgKiBEb24ndCBhdXRvLWxpbmsgdXJscyB0aGF0IGFyZSBjb250YWluZWQgaW4gdGhlIGZvbGxvd2luZyBlbGVtZW50czoKICAgICAgICovCiAgICAgIElHTk9SRV9VUkxTX0lOICAgICAgICA9IHd5c2lodG1sNS5sYW5nLmFycmF5KFsiQ09ERSIsICJQUkUiLCAiQSIsICJTQ1JJUFQiLCAiSEVBRCIsICJUSVRMRSIsICJTVFlMRSJdKSwKICAgICAgLyoqCiAgICAgICAqIHJldmlzaW9uIDE6CiAgICAgICAqICAgIC8oXFMrXC57MX1bXlxzXCxcLlwhXSspL2cKICAgICAgICoKICAgICAgICogcmV2aXNpb24gMjoKICAgICAgICogICAgLyhcYigoKGh0dHBzP3xmdHApOlwvXC8pfCh3d3dcLikpWy1BLVowLTkrJkAjXC8lPz1+X3whOiwuO1xbXF1dKlstQS1aMC05KyZAI1wvJT1+X3xdKS9naW0KICAgICAgICoKICAgICAgICogcHV0IHRoaXMgaW4gdGhlIGJlZ2lubmluZyBpZiB5b3UgZG9uJ3Qgd2FuJ3QgdG8gbWF0Y2ggd2l0aGluIGEgd29yZAogICAgICAgKiAgICAoXnxbXD5cKFx7XFtcc1w+XSkKICAgICAgICovCiAgICAgIFVSTF9SRUdfRVhQICAgICAgICAgICA9IC8oKGh0dHBzPzpcL1wvfHd3d1wuKVteXHM8XXszLH0pL2dpLAogICAgICBUUkFJTElOR19DSEFSX1JFR19FWFAgPSAvKFteXHdcL1wtXSgsPykpJC9pLAogICAgICBNQVhfRElTUExBWV9MRU5HVEggICAgPSAxMDAsCiAgICAgIEJSQUNLRVRTICAgICAgICAgICAgICA9IHsgIikiOiAiKCIsICJdIjogIlsiLCAifSI6ICJ7IiB9OwogIAogIGZ1bmN0aW9uIGF1dG9MaW5rKGVsZW1lbnQpIHsKICAgIGlmIChfaGFzUGFyZW50VGhhdFNob3VsZEJlSWdub3JlZChlbGVtZW50KSkgewogICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0KCiAgICBpZiAoZWxlbWVudCA9PT0gZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgewogICAgICBlbGVtZW50ID0gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7CiAgICB9CgogICAgcmV0dXJuIF9wYXJzZU5vZGUoZWxlbWVudCk7CiAgfQogIAogIC8qKgogICAqIFRoaXMgaXMgYmFzaWNhbGx5IGEgcmVidWlsZCBvZgogICAqIHRoZSByYWlscyBhdXRvX2xpbmtfdXJscyB0ZXh0IGhlbHBlcgogICAqLwogIGZ1bmN0aW9uIF9jb252ZXJ0VXJsc1RvTGlua3Moc3RyKSB7CiAgICByZXR1cm4gc3RyLnJlcGxhY2UoVVJMX1JFR19FWFAsIGZ1bmN0aW9uKG1hdGNoLCB1cmwpIHsKICAgICAgdmFyIHB1bmN0dWF0aW9uID0gKHVybC5tYXRjaChUUkFJTElOR19DSEFSX1JFR19FWFApIHx8IFtdKVsxXSB8fCAiIiwKICAgICAgICAgIG9wZW5pbmcgICAgID0gQlJBQ0tFVFNbcHVuY3R1YXRpb25dOwogICAgICB1cmwgPSB1cmwucmVwbGFjZShUUkFJTElOR19DSEFSX1JFR19FWFAsICIiKTsKCiAgICAgIGlmICh1cmwuc3BsaXQob3BlbmluZykubGVuZ3RoID4gdXJsLnNwbGl0KHB1bmN0dWF0aW9uKS5sZW5ndGgpIHsKICAgICAgICB1cmwgPSB1cmwgKyBwdW5jdHVhdGlvbjsKICAgICAgICBwdW5jdHVhdGlvbiA9ICIiOwogICAgICB9CiAgICAgIHZhciByZWFsVXJsICAgID0gdXJsLAogICAgICAgICAgZGlzcGxheVVybCA9IHVybDsKICAgICAgaWYgKHVybC5sZW5ndGggPiBNQVhfRElTUExBWV9MRU5HVEgpIHsKICAgICAgICBkaXNwbGF5VXJsID0gZGlzcGxheVVybC5zdWJzdHIoMCwgTUFYX0RJU1BMQVlfTEVOR1RIKSArICIuLi4iOwogICAgICB9CiAgICAgIC8vIEFkZCBodHRwIHByZWZpeCBpZiBuZWNlc3NhcnkKICAgICAgaWYgKHJlYWxVcmwuc3Vic3RyKDAsIDQpID09PSAid3d3LiIpIHsKICAgICAgICByZWFsVXJsID0gImh0dHA6Ly8iICsgcmVhbFVybDsKICAgICAgfQogICAgICAKICAgICAgcmV0dXJuICc8YSBocmVmPSInICsgcmVhbFVybCArICciPicgKyBkaXNwbGF5VXJsICsgJzwvYT4nICsgcHVuY3R1YXRpb247CiAgICB9KTsKICB9CiAgCiAgLyoqCiAgICogQ3JlYXRlcyBvciAoaWYgYWxyZWFkeSBjYWNoZWQpIHJldHVybnMgYSB0ZW1wIGVsZW1lbnQKICAgKiBmb3IgdGhlIGdpdmVuIGRvY3VtZW50IG9iamVjdAogICAqLwogIGZ1bmN0aW9uIF9nZXRUZW1wRWxlbWVudChjb250ZXh0KSB7CiAgICB2YXIgdGVtcEVsZW1lbnQgPSBjb250ZXh0Ll93eXNpaHRtbDVfdGVtcEVsZW1lbnQ7CiAgICBpZiAoIXRlbXBFbGVtZW50KSB7CiAgICAgIHRlbXBFbGVtZW50ID0gY29udGV4dC5fd3lzaWh0bWw1X3RlbXBFbGVtZW50ID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIH0KICAgIHJldHVybiB0ZW1wRWxlbWVudDsKICB9CiAgCiAgLyoqCiAgICogUmVwbGFjZXMgdGhlIG9yaWdpbmFsIHRleHQgbm9kZXMgd2l0aCB0aGUgbmV3bHkgYXV0by1saW5rZWQgZG9tIHRyZWUKICAgKi8KICBmdW5jdGlvbiBfd3JhcE1hdGNoZXNJbk5vZGUodGV4dE5vZGUpIHsKICAgIHZhciBwYXJlbnROb2RlICA9IHRleHROb2RlLnBhcmVudE5vZGUsCiAgICAgICAgdGVtcEVsZW1lbnQgPSBfZ2V0VGVtcEVsZW1lbnQocGFyZW50Tm9kZS5vd25lckRvY3VtZW50KTsKICAgIAogICAgLy8gV2UgbmVlZCB0byBpbnNlcnQgYW4gZW1wdHkvdGVtcG9yYXJ5IDxzcGFuIC8+IHRvIGZpeCBJRSBxdWlya3MKICAgIC8vIEVsc2V3aXNlIElFIHdvdWxkIHN0cmlwIHdoaXRlIHNwYWNlIGluIHRoZSBiZWdpbm5pbmcKICAgIHRlbXBFbGVtZW50LmlubmVySFRNTCA9ICI8c3Bhbj48L3NwYW4+IiArIF9jb252ZXJ0VXJsc1RvTGlua3ModGV4dE5vZGUuZGF0YSk7CiAgICB0ZW1wRWxlbWVudC5yZW1vdmVDaGlsZCh0ZW1wRWxlbWVudC5maXJzdENoaWxkKTsKICAgIAogICAgd2hpbGUgKHRlbXBFbGVtZW50LmZpcnN0Q2hpbGQpIHsKICAgICAgLy8gaW5zZXJ0cyB0ZW1wRWxlbWVudC5maXJzdENoaWxkIGJlZm9yZSB0ZXh0Tm9kZQogICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZSh0ZW1wRWxlbWVudC5maXJzdENoaWxkLCB0ZXh0Tm9kZSk7CiAgICB9CiAgICBwYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRleHROb2RlKTsKICB9CiAgCiAgZnVuY3Rpb24gX2hhc1BhcmVudFRoYXRTaG91bGRCZUlnbm9yZWQobm9kZSkgewogICAgdmFyIG5vZGVOYW1lOwogICAgd2hpbGUgKG5vZGUucGFyZW50Tm9kZSkgewogICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlOwogICAgICBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7CiAgICAgIGlmIChJR05PUkVfVVJMU19JTi5jb250YWlucyhub2RlTmFtZSkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSBlbHNlIGlmIChub2RlTmFtZSA9PT0gImJvZHkiKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIAogIGZ1bmN0aW9uIF9wYXJzZU5vZGUoZWxlbWVudCkgewogICAgaWYgKElHTk9SRV9VUkxTX0lOLmNvbnRhaW5zKGVsZW1lbnQubm9kZU5hbWUpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgaWYgKGVsZW1lbnQubm9kZVR5cGUgPT09IHd5c2lodG1sNS5URVhUX05PREUgJiYgZWxlbWVudC5kYXRhLm1hdGNoKFVSTF9SRUdfRVhQKSkgewogICAgICBfd3JhcE1hdGNoZXNJbk5vZGUoZWxlbWVudCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgdmFyIGNoaWxkTm9kZXMgICAgICAgID0gd3lzaWh0bWw1LmxhbmcuYXJyYXkoZWxlbWVudC5jaGlsZE5vZGVzKS5nZXQoKSwKICAgICAgICBjaGlsZE5vZGVzTGVuZ3RoICA9IGNoaWxkTm9kZXMubGVuZ3RoLAogICAgICAgIGkgICAgICAgICAgICAgICAgID0gMDsKICAgIAogICAgZm9yICg7IGk8Y2hpbGROb2Rlc0xlbmd0aDsgaSsrKSB7CiAgICAgIF9wYXJzZU5vZGUoY2hpbGROb2Rlc1tpXSk7CiAgICB9CiAgICAKICAgIHJldHVybiBlbGVtZW50OwogIH0KICAKICB3eXNpaHRtbDUuZG9tLmF1dG9MaW5rID0gYXV0b0xpbms7CiAgCiAgLy8gUmV2ZWFsIHVybCByZWcgZXhwIHRvIHRoZSBvdXRzaWRlCiAgd3lzaWh0bWw1LmRvbS5hdXRvTGluay5VUkxfUkVHX0VYUCA9IFVSTF9SRUdfRVhQOwp9KSh3eXNpaHRtbDUpOyhmdW5jdGlvbih3eXNpaHRtbDUpIHsKICB2YXIgc3VwcG9ydHNDbGFzc0xpc3QgPSB3eXNpaHRtbDUuYnJvd3Nlci5zdXBwb3J0c0NsYXNzTGlzdCgpLAogICAgICBhcGkgICAgICAgICAgICAgICA9IHd5c2lodG1sNS5kb207CiAgCiAgYXBpLmFkZENsYXNzID0gZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7CiAgICBpZiAoc3VwcG9ydHNDbGFzc0xpc3QpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpOwogICAgfQogICAgaWYgKGFwaS5oYXNDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGVsZW1lbnQuY2xhc3NOYW1lICs9ICIgIiArIGNsYXNzTmFtZTsKICB9OwogIAogIGFwaS5yZW1vdmVDbGFzcyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgewogICAgaWYgKHN1cHBvcnRzQ2xhc3NMaXN0KSB7CiAgICAgIHJldHVybiBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTsKICAgIH0KICAgIAogICAgZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKG5ldyBSZWdFeHAoIihefFxccyspIiArIGNsYXNzTmFtZSArICIoXFxzK3wkKSIpLCAiICIpOwogIH07CiAgCiAgYXBpLmhhc0NsYXNzID0gZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7CiAgICBpZiAoc3VwcG9ydHNDbGFzc0xpc3QpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7CiAgICB9CiAgICAKICAgIHZhciBlbGVtZW50Q2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWU7CiAgICByZXR1cm4gKGVsZW1lbnRDbGFzc05hbWUubGVuZ3RoID4gMCAmJiAoZWxlbWVudENsYXNzTmFtZSA9PSBjbGFzc05hbWUgfHwgbmV3IFJlZ0V4cCgiKF58XFxzKSIgKyBjbGFzc05hbWUgKyAiKFxcc3wkKSIpLnRlc3QoZWxlbWVudENsYXNzTmFtZSkpKTsKICB9Owp9KSh3eXNpaHRtbDUpOwp3eXNpaHRtbDUuZG9tLmNvbnRhaW5zID0gKGZ1bmN0aW9uKCkgewogIHZhciBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CiAgaWYgKGRvY3VtZW50RWxlbWVudC5jb250YWlucykgewogICAgcmV0dXJuIGZ1bmN0aW9uKGNvbnRhaW5lciwgZWxlbWVudCkgewogICAgICBpZiAoZWxlbWVudC5ub2RlVHlwZSAhPT0gd3lzaWh0bWw1LkVMRU1FTlRfTk9ERSkgewogICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvbnRhaW5lciAhPT0gZWxlbWVudCAmJiBjb250YWluZXIuY29udGFpbnMoZWxlbWVudCk7CiAgICB9OwogIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oY29udGFpbmVyLCBlbGVtZW50KSB7CiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0RPTS9Ob2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uCiAgICAgIHJldHVybiAhIShjb250YWluZXIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZWxlbWVudCkgJiAxNik7CiAgICB9OwogIH0KfSkoKTsvKioKICogQ29udmVydHMgYW4gSFRNTCBmcmFnbWVudC9lbGVtZW50IGludG8gYSB1bm9yZGVyZWQvb3JkZXJlZCBsaXN0CiAqCiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBzaG91bGQgYmUgdHVybmVkIGludG8gYSBsaXN0CiAqIEBwYXJhbSB7U3RyaW5nfSBsaXN0VHlwZSBUaGUgbGlzdCB0eXBlIGluIHdoaWNoIHRvIGNvbnZlcnQgdGhlIHRyZWUgKGVpdGhlciAidWwiIG9yICJvbCIpCiAqIEByZXR1cm4ge0VsZW1lbnR9IFRoZSBjcmVhdGVkIGxpc3QKICoKICogQGV4YW1wbGUKICogICAgPCEtLSBBc3N1bWUgdGhlIGZvbGxvd2luZyBkb206IC0tPgogKiAgICA8c3BhbiBpZD0icHNldWRvLWxpc3QiPgogKiAgICAgIGVtaW5lbTxicj4KICogICAgICBkci4gZHJlCiAqICAgICAgPGRpdj41MCBDZW50PC9kaXY+CiAqICAgIDwvc3Bhbj4KICoKICogICAgPHNjcmlwdD4KICogICAgICB3eXNpaHRtbDUuZG9tLmNvbnZlcnRUb0xpc3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBzZXVkby1saXN0IiksICJ1bCIpOwogKiAgICA8L3NjcmlwdD4KICoKICogICAgPCEtLSBXaWxsIHJlc3VsdCBpbjogLS0+CiAqICAgIDx1bD4KICogICAgICA8bGk+ZW1pbmVtPC9saT4KICogICAgICA8bGk+ZHIuIGRyZTwvbGk+CiAqICAgICAgPGxpPjUwIENlbnQ8L2xpPgogKiAgICA8L3VsPgogKi8Kd3lzaWh0bWw1LmRvbS5jb252ZXJ0VG9MaXN0ID0gKGZ1bmN0aW9uKCkgewogIGZ1bmN0aW9uIF9jcmVhdGVMaXN0SXRlbShkb2MsIGxpc3QpIHsKICAgIHZhciBsaXN0SXRlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCJsaSIpOwogICAgbGlzdC5hcHBlbmRDaGlsZChsaXN0SXRlbSk7CiAgICByZXR1cm4gbGlzdEl0ZW07CiAgfQogIAogIGZ1bmN0aW9uIF9jcmVhdGVMaXN0KGRvYywgdHlwZSkgewogICAgcmV0dXJuIGRvYy5jcmVhdGVFbGVtZW50KHR5cGUpOwogIH0KICAKICBmdW5jdGlvbiBjb252ZXJ0VG9MaXN0KGVsZW1lbnQsIGxpc3RUeXBlKSB7CiAgICBpZiAoZWxlbWVudC5ub2RlTmFtZSA9PT0gIlVMIiB8fCBlbGVtZW50Lm5vZGVOYW1lID09PSAiT0wiIHx8IGVsZW1lbnQubm9kZU5hbWUgPT09ICJNRU5VIikgewogICAgICAvLyBBbHJlYWR5IGEgbGlzdAogICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIAogICAgdmFyIGRvYyAgICAgICAgICAgICAgID0gZWxlbWVudC5vd25lckRvY3VtZW50LAogICAgICAgIGxpc3QgICAgICAgICAgICAgID0gX2NyZWF0ZUxpc3QoZG9jLCBsaXN0VHlwZSksCiAgICAgICAgbGluZUJyZWFrcyAgICAgICAgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImJyIiksCiAgICAgICAgbGluZUJyZWFrc0xlbmd0aCAgPSBsaW5lQnJlYWtzLmxlbmd0aCwKICAgICAgICBjaGlsZE5vZGVzLAogICAgICAgIGNoaWxkTm9kZXNMZW5ndGgsCiAgICAgICAgY2hpbGROb2RlLAogICAgICAgIGxpbmVCcmVhaywKICAgICAgICBwYXJlbnROb2RlLAogICAgICAgIGlzQmxvY2tFbGVtZW50LAogICAgICAgIGlzTGluZUJyZWFrLAogICAgICAgIGN1cnJlbnRMaXN0SXRlbSwKICAgICAgICBpOwogICAgCiAgICAvLyBGaXJzdCBmaW5kIDxicj4gYXQgdGhlIGVuZCBvZiBpbmxpbmUgZWxlbWVudHMgYW5kIG1vdmUgdGhlbSBiZWhpbmQgdGhlbQogICAgZm9yIChpPTA7IGk8bGluZUJyZWFrc0xlbmd0aDsgaSsrKSB7CiAgICAgIGxpbmVCcmVhayA9IGxpbmVCcmVha3NbaV07CiAgICAgIHdoaWxlICgocGFyZW50Tm9kZSA9IGxpbmVCcmVhay5wYXJlbnROb2RlKSAmJiBwYXJlbnROb2RlICE9PSBlbGVtZW50ICYmIHBhcmVudE5vZGUubGFzdENoaWxkID09PSBsaW5lQnJlYWspIHsKICAgICAgICBpZiAod3lzaWh0bWw1LmRvbS5nZXRTdHlsZSgiZGlzcGxheSIpLmZyb20ocGFyZW50Tm9kZSkgPT09ICJibG9jayIpIHsKICAgICAgICAgIHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobGluZUJyZWFrKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB3eXNpaHRtbDUuZG9tLmluc2VydChsaW5lQnJlYWspLmFmdGVyKGxpbmVCcmVhay5wYXJlbnROb2RlKTsKICAgICAgfQogICAgfQogICAgCiAgICBjaGlsZE5vZGVzICAgICAgICA9IHd5c2lodG1sNS5sYW5nLmFycmF5KGVsZW1lbnQuY2hpbGROb2RlcykuZ2V0KCk7CiAgICBjaGlsZE5vZGVzTGVuZ3RoICA9IGNoaWxkTm9kZXMubGVuZ3RoOwogICAgCiAgICBmb3IgKGk9MDsgaTxjaGlsZE5vZGVzTGVuZ3RoOyBpKyspIHsKICAgICAgY3VycmVudExpc3RJdGVtICAgPSBjdXJyZW50TGlzdEl0ZW0gfHwgX2NyZWF0ZUxpc3RJdGVtKGRvYywgbGlzdCk7CiAgICAgIGNoaWxkTm9kZSAgICAgICAgID0gY2hpbGROb2Rlc1tpXTsKICAgICAgaXNCbG9ja0VsZW1lbnQgICAgPSB3eXNpaHRtbDUuZG9tLmdldFN0eWxlKCJkaXNwbGF5IikuZnJvbShjaGlsZE5vZGUpID09PSAiYmxvY2siOwogICAgICBpc0xpbmVCcmVhayAgICAgICA9IGNoaWxkTm9kZS5ub2RlTmFtZSA9PT0gIkJSIjsKICAgICAgCiAgICAgIGlmIChpc0Jsb2NrRWxlbWVudCkgewogICAgICAgIC8vIEFwcGVuZCBibG9ja0VsZW1lbnQgdG8gY3VycmVudCA8bGk+IGlmIGVtcHR5LCBvdGhlcndpc2UgY3JlYXRlIGEgbmV3IG9uZQogICAgICAgIGN1cnJlbnRMaXN0SXRlbSA9IGN1cnJlbnRMaXN0SXRlbS5maXJzdENoaWxkID8gX2NyZWF0ZUxpc3RJdGVtKGRvYywgbGlzdCkgOiBjdXJyZW50TGlzdEl0ZW07CiAgICAgICAgY3VycmVudExpc3RJdGVtLmFwcGVuZENoaWxkKGNoaWxkTm9kZSk7CiAgICAgICAgY3VycmVudExpc3RJdGVtID0gbnVsbDsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICAKICAgICAgaWYgKGlzTGluZUJyZWFrKSB7CiAgICAgICAgLy8gT25seSBjcmVhdGUgYSBuZXcgbGlzdCBpdGVtIGluIHRoZSBuZXh0IGl0ZXJhdGlvbiB3aGVuIHRoZSBjdXJyZW50IG9uZSBoYXMgYWxyZWFkeSBjb250ZW50CiAgICAgICAgY3VycmVudExpc3RJdGVtID0gY3VycmVudExpc3RJdGVtLmZpcnN0Q2hpbGQgPyBudWxsIDogY3VycmVudExpc3RJdGVtOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIAogICAgICBjdXJyZW50TGlzdEl0ZW0uYXBwZW5kQ2hpbGQoY2hpbGROb2RlKTsKICAgIH0KICAgIAogICAgZWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChsaXN0LCBlbGVtZW50KTsKICAgIHJldHVybiBsaXN0OwogIH0KICAKICByZXR1cm4gY29udmVydFRvTGlzdDsKfSkoKTsvKioKICogQ29weSBhIHNldCBvZiBhdHRyaWJ1dGVzIGZyb20gb25lIGVsZW1lbnQgdG8gYW5vdGhlcgogKgogKiBAcGFyYW0ge0FycmF5fSBhdHRyaWJ1dGVzVG9Db3B5IExpc3Qgb2YgYXR0cmlidXRlcyB3aGljaCBzaG91bGQgYmUgY29waWVkCiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qgd2hpY2ggb2ZmZXJzIHRoZSAiZnJvbSIgbWV0aG9kIHdoaWNoIGNhbiBiZSBpbnZva2VkIHdpdGggdGhlIGVsZW1lbnQgd2hlcmUgdG8KICogICAgY29weSB0aGUgYXR0cmlidXRlcyBmcm9tLiwgdGhpcyBhZ2FpbiByZXR1cm5zIGFuIG9iamVjdCB3aGljaCBwcm92aWRlcyBhIG1ldGhvZCBuYW1lZCAidG8iIHdoaWNoIGNhbiBiZSBpbnZva2VkIAogKiAgICB3aXRoIHRoZSBlbGVtZW50IHdoZXJlIHRvIGNvcHkgdGhlIGF0dHJpYnV0ZXMgdG8gKHNlZSBleGFtcGxlKQogKgogKiBAZXhhbXBsZQogKiAgICB2YXIgdGV4dGFyZWEgICAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ0ZXh0YXJlYSIpLAogKiAgICAgICAgZGl2ICAgICAgICAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJkaXZbY29udGVudGVkaXRhYmxlPXRydWVdIiksCiAqICAgICAgICBhbm90aGVyRGl2ICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImRpdi5wcmV2aWV3Iik7CiAqICAgIHd5c2lodG1sNS5kb20uY29weUF0dHJpYnV0ZXMoWyJzcGVsbGNoZWNrIiwgInZhbHVlIiwgInBsYWNlaG9sZGVyIl0pLmZyb20odGV4dGFyZWEpLnRvKGRpdikuYW5kVG8oYW5vdGhlckRpdik7CiAqCiAqLwp3eXNpaHRtbDUuZG9tLmNvcHlBdHRyaWJ1dGVzID0gZnVuY3Rpb24oYXR0cmlidXRlc1RvQ29weSkgewogIHJldHVybiB7CiAgICBmcm9tOiBmdW5jdGlvbihlbGVtZW50VG9Db3B5RnJvbSkgewogICAgICByZXR1cm4gewogICAgICAgIHRvOiBmdW5jdGlvbihlbGVtZW50VG9Db3B5VG8pIHsKICAgICAgICAgIHZhciBhdHRyaWJ1dGUsCiAgICAgICAgICAgICAgaSAgICAgICAgID0gMCwKICAgICAgICAgICAgICBsZW5ndGggICAgPSBhdHRyaWJ1dGVzVG9Db3B5Lmxlbmd0aDsKICAgICAgICAgIGZvciAoOyBpPGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNUb0NvcHlbaV07CiAgICAgICAgICAgIGlmICh0eXBlb2YoZWxlbWVudFRvQ29weUZyb21bYXR0cmlidXRlXSkgIT09ICJ1bmRlZmluZWQiICYmIGVsZW1lbnRUb0NvcHlGcm9tW2F0dHJpYnV0ZV0gIT09ICIiKSB7CiAgICAgICAgICAgICAgZWxlbWVudFRvQ29weVRvW2F0dHJpYnV0ZV0gPSBlbGVtZW50VG9Db3B5RnJvbVthdHRyaWJ1dGVdOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4geyBhbmRUbzogYXJndW1lbnRzLmNhbGxlZSB9OwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICB9Owp9Oy8qKgogKiBDb3B5IGEgc2V0IG9mIHN0eWxlcyBmcm9tIG9uZSBlbGVtZW50IHRvIGFub3RoZXIKICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIG9ubHkgd29ya3MgcHJvcGVybHkgYWNyb3NzIGJyb3dzZXJzIHdoZW4gdGhlIGVsZW1lbnQgZnJvbSB3aGljaCB0byBjb3B5IHRoZSBzdHlsZXMKICogaXMgaW4gdGhlIGRvbQogKgogKiBJbnRlcmVzdGluZyBhcnRpY2xlIG9uIGhvdyB0byBjb3B5IHN0eWxlcwogKgogKiBAcGFyYW0ge0FycmF5fSBzdHlsZXNUb0NvcHkgTGlzdCBvZiBzdHlsZXMgd2hpY2ggc2hvdWxkIGJlIGNvcGllZAogKiBAcmV0dXJuIHtPYmplY3R9IFJldHVybnMgYW4gb2JqZWN0IHdoaWNoIG9mZmVycyB0aGUgImZyb20iIG1ldGhvZCB3aGljaCBjYW4gYmUgaW52b2tlZCB3aXRoIHRoZSBlbGVtZW50IHdoZXJlIHRvCiAqICAgIGNvcHkgdGhlIHN0eWxlcyBmcm9tLiwgdGhpcyBhZ2FpbiByZXR1cm5zIGFuIG9iamVjdCB3aGljaCBwcm92aWRlcyBhIG1ldGhvZCBuYW1lZCAidG8iIHdoaWNoIGNhbiBiZSBpbnZva2VkIAogKiAgICB3aXRoIHRoZSBlbGVtZW50IHdoZXJlIHRvIGNvcHkgdGhlIHN0eWxlcyB0byAoc2VlIGV4YW1wbGUpCiAqCiAqIEBleGFtcGxlCiAqICAgIHZhciB0ZXh0YXJlYSAgICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRleHRhcmVhIiksCiAqICAgICAgICBkaXYgICAgICAgICA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImRpdltjb250ZW50ZWRpdGFibGU9dHJ1ZV0iKSwKICogICAgICAgIGFub3RoZXJEaXYgID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZGl2LnByZXZpZXciKTsKICogICAgd3lzaWh0bWw1LmRvbS5jb3B5U3R5bGVzKFsib3ZlcmZsb3cteSIsICJ3aWR0aCIsICJoZWlnaHQiXSkuZnJvbSh0ZXh0YXJlYSkudG8oZGl2KS5hbmRUbyhhbm90aGVyRGl2KTsKICoKICovCihmdW5jdGlvbihkb20pIHsKICAKICAvKioKICAgKiBNb3ppbGxhLCBXZWJLaXQgYW5kIE9wZXJhIHJlY2FsY3VsYXRlIHRoZSBjb21wdXRlZCB3aWR0aCB3aGVuIGJveC1zaXppbmc6IGJvZGVyLWJveDsgaXMgc2V0CiAgICogU28gaWYgYW4gZWxlbWVudCBoYXMgIndpZHRoOiAyMDBweDsgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OyBib3JkZXI6IDFweDsiIHRoZW4gCiAgICogaXRzIGNvbXB1dGVkIGNzcyB3aWR0aCB3aWxsIGJlIDE5OHB4CiAgICovCiAgdmFyIEJPWF9TSVpJTkdfUFJPUEVSVElFUyA9IFsiLXdlYmtpdC1ib3gtc2l6aW5nIiwgIi1tb3otYm94LXNpemluZyIsICItbXMtYm94LXNpemluZyIsICJib3gtc2l6aW5nIl07CiAgCiAgdmFyIHNob3VsZElnbm9yZUJveFNpemluZ0JvcmRlckJveCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGlmIChoYXNCb3hTaXppbmdCb3JkZXJCb3goZWxlbWVudCkpIHsKICAgICAgIHJldHVybiBwYXJzZUludChkb20uZ2V0U3R5bGUoIndpZHRoIikuZnJvbShlbGVtZW50KSwgMTApIDwgZWxlbWVudC5vZmZzZXRXaWR0aDsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9OwogIAogIHZhciBoYXNCb3hTaXppbmdCb3JkZXJCb3ggPSBmdW5jdGlvbihlbGVtZW50KSB7CiAgICB2YXIgaSAgICAgICA9IDAsCiAgICAgICAgbGVuZ3RoICA9IEJPWF9TSVpJTkdfUFJPUEVSVElFUy5sZW5ndGg7CiAgICBmb3IgKDsgaTxsZW5ndGg7IGkrKykgewogICAgICBpZiAoZG9tLmdldFN0eWxlKEJPWF9TSVpJTkdfUFJPUEVSVElFU1tpXSkuZnJvbShlbGVtZW50KSA9PT0gImJvcmRlci1ib3giKSB7CiAgICAgICAgcmV0dXJuIEJPWF9TSVpJTkdfUFJPUEVSVElFU1tpXTsKICAgICAgfQogICAgfQogIH07CiAgCiAgZG9tLmNvcHlTdHlsZXMgPSBmdW5jdGlvbihzdHlsZXNUb0NvcHkpIHsKICAgIHJldHVybiB7CiAgICAgIGZyb206IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgICAgICBpZiAoc2hvdWxkSWdub3JlQm94U2l6aW5nQm9yZGVyQm94KGVsZW1lbnQpKSB7CiAgICAgICAgICBzdHlsZXNUb0NvcHkgPSB3eXNpaHRtbDUubGFuZy5hcnJheShzdHlsZXNUb0NvcHkpLndpdGhvdXQoQk9YX1NJWklOR19QUk9QRVJUSUVTKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdmFyIGNzc1RleHQgPSAiIiwKICAgICAgICAgICAgbGVuZ3RoICA9IHN0eWxlc1RvQ29weS5sZW5ndGgsCiAgICAgICAgICAgIGkgICAgICAgPSAwLAogICAgICAgICAgICBwcm9wZXJ0eTsKICAgICAgICBmb3IgKDsgaTxsZW5ndGg7IGkrKykgewogICAgICAgICAgcHJvcGVydHkgPSBzdHlsZXNUb0NvcHlbaV07CiAgICAgICAgICBjc3NUZXh0ICs9IHByb3BlcnR5ICsgIjoiICsgZG9tLmdldFN0eWxlKHByb3BlcnR5KS5mcm9tKGVsZW1lbnQpICsgIjsiOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gewogICAgICAgICAgdG86IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgICAgICAgICAgZG9tLnNldFN0eWxlcyhjc3NUZXh0KS5vbihlbGVtZW50KTsKICAgICAgICAgICAgcmV0dXJuIHsgYW5kVG86IGFyZ3VtZW50cy5jYWxsZWUgfTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CiAgICB9OwogIH07Cn0pKHd5c2lodG1sNS5kb20pOy8qKgogKiBFdmVudCBEZWxlZ2F0aW9uCiAqCiAqIEBleGFtcGxlCiAqICAgIHd5c2lodG1sNS5kb20uZGVsZWdhdGUoZG9jdW1lbnQuYm9keSwgImEiLCAiY2xpY2siLCBmdW5jdGlvbigpIHsKICogICAgICAvLyBmb28KICogICAgfSk7CiAqLwooZnVuY3Rpb24od3lzaWh0bWw1KSB7CiAgCiAgd3lzaWh0bWw1LmRvbS5kZWxlZ2F0ZSA9IGZ1bmN0aW9uKGNvbnRhaW5lciwgc2VsZWN0b3IsIGV2ZW50TmFtZSwgaGFuZGxlcikgewogICAgcmV0dXJuIHd5c2lodG1sNS5kb20ub2JzZXJ2ZShjb250YWluZXIsIGV2ZW50TmFtZSwgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgdmFyIHRhcmdldCAgICA9IGV2ZW50LnRhcmdldCwKICAgICAgICAgIG1hdGNoICAgICA9IHd5c2lodG1sNS5sYW5nLmFycmF5KGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSk7CiAgICAgIAogICAgICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldCAhPT0gY29udGFpbmVyKSB7CiAgICAgICAgaWYgKG1hdGNoLmNvbnRhaW5zKHRhcmdldCkpIHsKICAgICAgICAgIGhhbmRsZXIuY2FsbCh0YXJnZXQsIGV2ZW50KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTsKICAgICAgfQogICAgfSk7CiAgfTsKICAKfSkod3lzaWh0bWw1KTsvKioKICogUmV0dXJucyB0aGUgZ2l2ZW4gaHRtbCB3cmFwcGVkIGluIGEgZGl2IGVsZW1lbnQKICoKICogRml4aW5nIElFJ3MgaW5hYmlsaXR5IHRvIHRyZWF0IHVua25vd24gZWxlbWVudHMgKEhUTUw1IHNlY3Rpb24sIGFydGljbGUsIC4uLikgY29ycmVjdGx5CiAqIHdoZW4gaW5zZXJ0ZWQgdmlhIGlubmVySFRNTAogKiAKICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgVGhlIGh0bWwgd2hpY2ggc2hvdWxkIGJlIHdyYXBwZWQgaW4gYSBkb20gZWxlbWVudAogKiBAcGFyYW0ge09iZWpjdH0gW2NvbnRleHRdIERvY3VtZW50IG9iamVjdCBvZiB0aGUgY29udGV4dCB0aGUgaHRtbCBiZWxvbmdzIHRvCiAqCiAqIEBleGFtcGxlCiAqICAgIHd5c2lodG1sNS5kb20uZ2V0QXNEb20oIjxhcnRpY2xlPmZvbzwvYXJ0aWNsZT4iKTsKICovCnd5c2lodG1sNS5kb20uZ2V0QXNEb20gPSAoZnVuY3Rpb24oKSB7CiAgCiAgdmFyIF9pbm5lckhUTUxTaGl2ID0gZnVuY3Rpb24oaHRtbCwgY29udGV4dCkgewogICAgdmFyIHRlbXBFbGVtZW50ID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIHRlbXBFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICBjb250ZXh0LmJvZHkuYXBwZW5kQ2hpbGQodGVtcEVsZW1lbnQpOwogICAgLy8gSUUgdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGVuIHRyeWluZyB0byBpbnNlcnQgPGZyYW1lc2V0PjwvZnJhbWVzZXQ+IHZpYSBpbm5lckhUTUwKICAgIHRyeSB7IHRlbXBFbGVtZW50LmlubmVySFRNTCA9IGh0bWw7IH0gY2F0Y2goZSkge30KICAgIGNvbnRleHQuYm9keS5yZW1vdmVDaGlsZCh0ZW1wRWxlbWVudCk7CiAgICByZXR1cm4gdGVtcEVsZW1lbnQ7CiAgfTsKICAKICAvKioKICAgKiBNYWtlIHN1cmUgSUUgc3VwcG9ydHMgSFRNTDUgdGFncywgd2hpY2ggaXMgYWNjb21wbGlzaGVkIGJ5IHNpbXBseSBjcmVhdGluZyBvbmUgaW5zdGFuY2Ugb2YgZWFjaCBlbGVtZW50CiAgICovCiAgdmFyIF9lbnN1cmVIVE1MNUNvbXBhdGliaWxpdHkgPSBmdW5jdGlvbihjb250ZXh0KSB7CiAgICBpZiAoY29udGV4dC5fd3lzaWh0bWw1X3N1cHBvcnRzSFRNTDVUYWdzKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGZvciAodmFyIGk9MCwgbGVuZ3RoPUhUTUw1X0VMRU1FTlRTLmxlbmd0aDsgaTxsZW5ndGg7IGkrKykgewogICAgICBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoSFRNTDVfRUxFTUVOVFNbaV0pOwogICAgfQogICAgY29udGV4dC5fd3lzaWh0bWw1X3N1cHBvcnRzSFRNTDVUYWdzID0gdHJ1ZTsKICB9OwogIAogIAogIC8qKgogICAqIExpc3Qgb2YgaHRtbDUgdGFncwogICAqIHRha2VuIGZyb20gaHR0cDovL3NpbW9uLmh0bWw1Lm9yZy9odG1sNS1lbGVtZW50cwogICAqLwogIHZhciBIVE1MNV9FTEVNRU5UUyA9IFsKICAgICJhYmJyIiwgImFydGljbGUiLCAiYXNpZGUiLCAiYXVkaW8iLCAiYmRpIiwgImNhbnZhcyIsICJjb21tYW5kIiwgImRhdGFsaXN0IiwgImRldGFpbHMiLCAiZmlnY2FwdGlvbiIsCiAgICAiZmlndXJlIiwgImZvb3RlciIsICJoZWFkZXIiLCAiaGdyb3VwIiwgImtleWdlbiIsICJtYXJrIiwgIm1ldGVyIiwgIm5hdiIsICJvdXRwdXQiLCAicHJvZ3Jlc3MiLAogICAgInJwIiwgInJ0IiwgInJ1YnkiLCAic3ZnIiwgInNlY3Rpb24iLCAic291cmNlIiwgInN1bW1hcnkiLCAidGltZSIsICJ0cmFjayIsICJ2aWRlbyIsICJ3YnIiCiAgXTsKICAKICByZXR1cm4gZnVuY3Rpb24oaHRtbCwgY29udGV4dCkgewogICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7CiAgICB2YXIgdGVtcEVsZW1lbnQ7CiAgICBpZiAodHlwZW9mKGh0bWwpID09PSAib2JqZWN0IiAmJiBodG1sLm5vZGVUeXBlKSB7CiAgICAgIHRlbXBFbGVtZW50ID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgdGVtcEVsZW1lbnQuYXBwZW5kQ2hpbGQoaHRtbCk7CiAgICB9IGVsc2UgaWYgKHd5c2lodG1sNS5icm93c2VyLnN1cHBvcnRzSFRNTDVUYWdzKGNvbnRleHQpKSB7CiAgICAgIHRlbXBFbGVtZW50ID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgdGVtcEVsZW1lbnQuaW5uZXJIVE1MID0gaHRtbDsKICAgIH0gZWxzZSB7CiAgICAgIF9lbnN1cmVIVE1MNUNvbXBhdGliaWxpdHkoY29udGV4dCk7CiAgICAgIHRlbXBFbGVtZW50ID0gX2lubmVySFRNTFNoaXYoaHRtbCwgY29udGV4dCk7CiAgICB9CiAgICByZXR1cm4gdGVtcEVsZW1lbnQ7CiAgfTsKfSkoKTsvKioKICogV2Fsa3MgdGhlIGRvbSB0cmVlIGZyb20gdGhlIGdpdmVuIG5vZGUgdXAgdW50aWwgaXQgZmluZHMgYSBtYXRjaAogKiBEZXNpZ25lZCBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZS4KICoKICogQHBhcmFtIHtFbGVtZW50fSBub2RlIFRoZSBmcm9tIHdoaWNoIHRvIGNoZWNrIHRoZSBwYXJlbnQgbm9kZXMKICogQHBhcmFtIHtPYmplY3R9IG1hdGNoaW5nU2V0IE9iamVjdCB0byBtYXRjaCBhZ2FpbnN0IChwb3NzaWJsZSBwcm9wZXJ0aWVzOiBub2RlTmFtZSwgY2xhc3NOYW1lLCBjbGFzc1JlZ0V4cCkKICogQHBhcmFtIHtOdW1iZXJ9IFtsZXZlbHNdIEhvdyBtYW55IHBhcmVudHMgc2hvdWxkIHRoZSBmdW5jdGlvbiBjaGVjayB1cCBmcm9tIHRoZSBjdXJyZW50IG5vZGUgKGRlZmF1bHRzIHRvIDUwKQogKiBAcmV0dXJuIHtudWxsfEVsZW1lbnR9IFJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBtYXRjaGVkIHRoZSBkZXNpcmVkTm9kZU5hbWUocykKICogQGV4YW1wbGUKICogICAgdmFyIGxpc3RFbGVtZW50ID0gd3lzaWh0bWw1LmRvbS5nZXRQYXJlbnRFbGVtZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImxpIiksIHsgbm9kZU5hbWU6IFsiTUVOVSIsICJVTCIsICJPTCJdIH0pOwogKiAgICAvLyAuLi4gb3IgLi4uCiAqICAgIHZhciB1bm9yZGVyZWRMaXN0RWxlbWVudCA9IHd5c2lodG1sNS5kb20uZ2V0UGFyZW50RWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJsaSIpLCB7IG5vZGVOYW1lOiAiVUwiIH0pOwogKiAgICAvLyAuLi4gb3IgLi4uCiAqICAgIHZhciBjb2xvcmVkRWxlbWVudCA9IHd5c2lodG1sNS5kb20uZ2V0UGFyZW50RWxlbWVudChteVRleHROb2RlLCB7IG5vZGVOYW1lOiAiU1BBTiIsIGNsYXNzTmFtZTogInd5c2l3eWctY29sb3ItcmVkIiwgY2xhc3NSZWdFeHA6IC93eXNpd3lnLWNvbG9yLVthLXpdL2cgfSk7CiAqLwp3eXNpaHRtbDUuZG9tLmdldFBhcmVudEVsZW1lbnQgPSAoZnVuY3Rpb24oKSB7CiAgCiAgZnVuY3Rpb24gX2lzU2FtZU5vZGVOYW1lKG5vZGVOYW1lLCBkZXNpcmVkTm9kZU5hbWVzKSB7CiAgICBpZiAoIWRlc2lyZWROb2RlTmFtZXMgfHwgIWRlc2lyZWROb2RlTmFtZXMubGVuZ3RoKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgCiAgICBpZiAodHlwZW9mKGRlc2lyZWROb2RlTmFtZXMpID09PSAic3RyaW5nIikgewogICAgICByZXR1cm4gbm9kZU5hbWUgPT09IGRlc2lyZWROb2RlTmFtZXM7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gd3lzaWh0bWw1LmxhbmcuYXJyYXkoZGVzaXJlZE5vZGVOYW1lcykuY29udGFpbnMobm9kZU5hbWUpOwogICAgfQogIH0KICAKICBmdW5jdGlvbiBfaXNFbGVtZW50KG5vZGUpIHsKICAgIHJldHVybiBub2RlLm5vZGVUeXBlID09PSB3eXNpaHRtbDUuRUxFTUVOVF9OT0RFOwogIH0KICAKICBmdW5jdGlvbiBfaGFzQ2xhc3NOYW1lKGVsZW1lbnQsIGNsYXNzTmFtZSwgY2xhc3NSZWdFeHApIHsKICAgIHZhciBjbGFzc05hbWVzID0gKGVsZW1lbnQuY2xhc3NOYW1lIHx8ICIiKS5tYXRjaChjbGFzc1JlZ0V4cCkgfHwgW107CiAgICBpZiAoIWNsYXNzTmFtZSkgewogICAgICByZXR1cm4gISFjbGFzc05hbWVzLmxlbmd0aDsKICAgIH0KICAgIHJldHVybiBjbGFzc05hbWVzW2NsYXNzTmFtZXMubGVuZ3RoIC0gMV0gPT09IGNsYXNzTmFtZTsKICB9CiAgCiAgZnVuY3Rpb24gX2dldFBhcmVudEVsZW1lbnRXaXRoTm9kZU5hbWUobm9kZSwgbm9kZU5hbWUsIGxldmVscykgewogICAgd2hpbGUgKGxldmVscy0tICYmIG5vZGUgJiYgbm9kZS5ub2RlTmFtZSAhPT0gIkJPRFkiKSB7CiAgICAgIGlmIChfaXNTYW1lTm9kZU5hbWUobm9kZS5ub2RlTmFtZSwgbm9kZU5hbWUpKSB7CiAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgIH0KICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICAKICBmdW5jdGlvbiBfZ2V0UGFyZW50RWxlbWVudFdpdGhOb2RlTmFtZUFuZENsYXNzTmFtZShub2RlLCBub2RlTmFtZSwgY2xhc3NOYW1lLCBjbGFzc1JlZ0V4cCwgbGV2ZWxzKSB7CiAgICB3aGlsZSAobGV2ZWxzLS0gJiYgbm9kZSAmJiBub2RlLm5vZGVOYW1lICE9PSAiQk9EWSIpIHsKICAgICAgaWYgKF9pc0VsZW1lbnQobm9kZSkgJiYKICAgICAgICAgIF9pc1NhbWVOb2RlTmFtZShub2RlLm5vZGVOYW1lLCBub2RlTmFtZSkgJiYKICAgICAgICAgIF9oYXNDbGFzc05hbWUobm9kZSwgY2xhc3NOYW1lLCBjbGFzc1JlZ0V4cCkpIHsKICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgfQogICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIAogIHJldHVybiBmdW5jdGlvbihub2RlLCBtYXRjaGluZ1NldCwgbGV2ZWxzKSB7CiAgICBsZXZlbHMgPSBsZXZlbHMgfHwgNTA7IC8vIEdvIG1heCA1MCBub2RlcyB1cHdhcmRzIGZyb20gY3VycmVudCBub2RlCiAgICBpZiAobWF0Y2hpbmdTZXQuY2xhc3NOYW1lIHx8IG1hdGNoaW5nU2V0LmNsYXNzUmVnRXhwKSB7CiAgICAgIHJldHVybiBfZ2V0UGFyZW50RWxlbWVudFdpdGhOb2RlTmFtZUFuZENsYXNzTmFtZSgKICAgICAgICBub2RlLCBtYXRjaGluZ1NldC5ub2RlTmFtZSwgbWF0Y2hpbmdTZXQuY2xhc3NOYW1lLCBtYXRjaGluZ1NldC5jbGFzc1JlZ0V4cCwgbGV2ZWxzCiAgICAgICk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2dldFBhcmVudEVsZW1lbnRXaXRoTm9kZU5hbWUoCiAgICAgICAgbm9kZSwgbWF0Y2hpbmdTZXQubm9kZU5hbWUsIGxldmVscwogICAgICApOwogICAgfQogIH07Cn0pKCk7Ci8qKgogKiBHZXQgZWxlbWVudCdzIHN0eWxlIGZvciBhIHNwZWNpZmljIGNzcyBwcm9wZXJ0eQogKgogKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGhlIGVsZW1lbnQgb24gd2hpY2ggdG8gcmV0cmlldmUgdGhlIHN0eWxlCiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eSBUaGUgQ1NTIHByb3BlcnR5IHRvIHJldHJpZXZlICgiZmxvYXQiLCAiZGlzcGxheSIsICJ0ZXh0LWFsaWduIiwgLi4uKQogKgogKiBAZXhhbXBsZQogKiAgICB3eXNpaHRtbDUuZG9tLmdldFN0eWxlKCJkaXNwbGF5IikuZnJvbShkb2N1bWVudC5ib2R5KTsKICogICAgLy8gPT4gImJsb2NrIgogKi8Kd3lzaWh0bWw1LmRvbS5nZXRTdHlsZSA9IChmdW5jdGlvbigpIHsKICB2YXIgc3R5bGVQcm9wZXJ0eU1hcHBpbmcgPSB7CiAgICAgICAgImZsb2F0IjogKCJzdHlsZUZsb2F0IiBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZSkgPyAic3R5bGVGbG9hdCIgOiAiY3NzRmxvYXQiCiAgICAgIH0sCiAgICAgIFJFR19FWFBfQ0FNRUxJWkUgPSAvXC1bYS16XS9nOwogIAogIGZ1bmN0aW9uIGNhbWVsaXplKHN0cikgewogICAgcmV0dXJuIHN0ci5yZXBsYWNlKFJFR19FWFBfQ0FNRUxJWkUsIGZ1bmN0aW9uKG1hdGNoKSB7CiAgICAgIHJldHVybiBtYXRjaC5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTsKICAgIH0pOwogIH0KICAKICByZXR1cm4gZnVuY3Rpb24ocHJvcGVydHkpIHsKICAgIHJldHVybiB7CiAgICAgIGZyb206IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgICAgICBpZiAoZWxlbWVudC5ub2RlVHlwZSAhPT0gd3lzaWh0bWw1LkVMRU1FTlRfTk9ERSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgZG9jICAgICAgICAgICAgICAgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQsCiAgICAgICAgICAgIGNhbWVsaXplZFByb3BlcnR5ID0gc3R5bGVQcm9wZXJ0eU1hcHBpbmdbcHJvcGVydHldIHx8IGNhbWVsaXplKHByb3BlcnR5KSwKICAgICAgICAgICAgc3R5bGUgICAgICAgICAgICAgPSBlbGVtZW50LnN0eWxlLAogICAgICAgICAgICBjdXJyZW50U3R5bGUgICAgICA9IGVsZW1lbnQuY3VycmVudFN0eWxlLAogICAgICAgICAgICBzdHlsZVZhbHVlICAgICAgICA9IHN0eWxlW2NhbWVsaXplZFByb3BlcnR5XTsKICAgICAgICBpZiAoc3R5bGVWYWx1ZSkgewogICAgICAgICAgcmV0dXJuIHN0eWxlVmFsdWU7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIGN1cnJlbnRTdHlsZSBpcyBubyBzdGFuZGFyZCBhbmQgb25seSBzdXBwb3J0ZWQgYnkgT3BlcmEgYW5kIElFIGJ1dCBpdCBoYXMgb25lIGltcG9ydGFudCBhZHZhbnRhZ2Ugb3ZlciB0aGUgc3RhbmRhcmQtY29tcGxpYW50CiAgICAgICAgLy8gd2luZG93LmdldENvbXB1dGVkU3R5bGUsIHNpbmNlIGl0IHJldHVybnMgY3NzIHByb3BlcnR5IHZhbHVlcyBpbiB0aGVpciBvcmlnaW5hbCB1bml0OgogICAgICAgIC8vIElmIHlvdSBzZXQgYW4gZWxlbWVudHMgd2lkdGggdG8gIjUwJSIsIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlIHdpbGwgZ2l2ZSB5b3UgaXQncyBjdXJyZW50IHdpZHRoIGluIHB4IHdoaWxlIGN1cnJlbnRTdHlsZQogICAgICAgIC8vIGdpdmVzIHlvdSB0aGUgb3JpZ2luYWwgIjUwJSIuCiAgICAgICAgLy8gT3BlcmEgc3VwcG9ydHMgYm90aCwgY3VycmVudFN0eWxlIGFuZCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSwgdGhhdCdzIHdoeSBjaGVja2luZyBmb3IgY3VycmVudFN0eWxlIHNob3VsZCBoYXZlIGhpZ2hlciBwcmlvCiAgICAgICAgaWYgKGN1cnJlbnRTdHlsZSkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50U3R5bGVbY2FtZWxpemVkUHJvcGVydHldOwogICAgICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgICAgIC8vaWUgd2lsbCBvY2Nhc2lvbmFsbHkgZmFpbCBmb3IgdW5rbm93biByZWFzb25zLiBzd2FsbG93aW5nIGV4Y2VwdGlvbgogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIHdpbiAgICAgICAgICAgICAgICAgPSBkb2MuZGVmYXVsdFZpZXcgfHwgZG9jLnBhcmVudFdpbmRvdywKICAgICAgICAgICAgbmVlZHNPdmVyZmxvd1Jlc2V0ICA9IChwcm9wZXJ0eSA9PT0gImhlaWdodCIgfHwgcHJvcGVydHkgPT09ICJ3aWR0aCIpICYmIGVsZW1lbnQubm9kZU5hbWUgPT09ICJURVhUQVJFQSIsCiAgICAgICAgICAgIG9yaWdpbmFsT3ZlcmZsb3csCiAgICAgICAgICAgIHJldHVyblZhbHVlOwoKICAgICAgICBpZiAod2luLmdldENvbXB1dGVkU3R5bGUpIHsKICAgICAgICAgIC8vIENocm9tZSBhbmQgU2FmYXJpIGJvdGggY2FsY3VsYXRlIGEgd3Jvbmcgd2lkdGggYW5kIGhlaWdodCBmb3IgdGV4dGFyZWFzIHdoZW4gdGhleSBoYXZlIHNjcm9sbCBiYXJzCiAgICAgICAgICAvLyB0aGVyZm9yZSB3ZSByZW1vdmUgYW5kIHJlc3RvcmUgdGhlIHNjcm9sbGJhciBhbmQgY2FsY3VsYXRlIHRoZSB2YWx1ZSBpbiBiZXR3ZWVuCiAgICAgICAgICBpZiAobmVlZHNPdmVyZmxvd1Jlc2V0KSB7CiAgICAgICAgICAgIG9yaWdpbmFsT3ZlcmZsb3cgPSBzdHlsZS5vdmVyZmxvdzsKICAgICAgICAgICAgc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVyblZhbHVlID0gd2luLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eSk7CiAgICAgICAgICBpZiAobmVlZHNPdmVyZmxvd1Jlc2V0KSB7CiAgICAgICAgICAgIHN0eWxlLm92ZXJmbG93ID0gb3JpZ2luYWxPdmVyZmxvdyB8fCAiIjsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfTsKfSkoKTsvKioKICogSGlnaCBwZXJmb3JtYW50IHdheSB0byBjaGVjayB3aGV0aGVyIGFuIGVsZW1lbnQgd2l0aCBhIHNwZWNpZmljIHRhZyBuYW1lIGlzIGluIHRoZSBnaXZlbiBkb2N1bWVudAogKiBPcHRpbWl6ZWQgZm9yIGJlaW5nIGhlYXZpbHkgZXhlY3V0ZWQKICogVW5sZWFzaGVzIHRoZSBwb3dlciBvZiBsaXZlIG5vZGUgbGlzdHMKICoKICogQHBhcmFtIHtPYmplY3R9IGRvYyBUaGUgZG9jdW1lbnQgb2JqZWN0IG9mIHRoZSBjb250ZXh0IHdoZXJlIHRvIGNoZWNrCiAqIEBwYXJhbSB7U3RyaW5nfSB0YWdOYW1lIFVwcGVyIGNhc2VkIHRhZyBuYW1lCiAqIEBleGFtcGxlCiAqICAgIHd5c2lodG1sNS5kb20uaGFzRWxlbWVudFdpdGhUYWdOYW1lKGRvY3VtZW50LCAiSU1HIik7CiAqLwp3eXNpaHRtbDUuZG9tLmhhc0VsZW1lbnRXaXRoVGFnTmFtZSA9IChmdW5jdGlvbigpIHsKICB2YXIgTElWRV9DQUNIRSAgICAgICAgICA9IHt9LAogICAgICBET0NVTUVOVF9JREVOVElGSUVSID0gMTsKICAKICBmdW5jdGlvbiBfZ2V0RG9jdW1lbnRJZGVudGlmaWVyKGRvYykgewogICAgcmV0dXJuIGRvYy5fd3lzaWh0bWw1X2lkZW50aWZpZXIgfHwgKGRvYy5fd3lzaWh0bWw1X2lkZW50aWZpZXIgPSBET0NVTUVOVF9JREVOVElGSUVSKyspOwogIH0KICAKICByZXR1cm4gZnVuY3Rpb24oZG9jLCB0YWdOYW1lKSB7CiAgICB2YXIga2V5ICAgICAgICAgPSBfZ2V0RG9jdW1lbnRJZGVudGlmaWVyKGRvYykgKyAiOiIgKyB0YWdOYW1lLAogICAgICAgIGNhY2hlRW50cnkgID0gTElWRV9DQUNIRVtrZXldOwogICAgaWYgKCFjYWNoZUVudHJ5KSB7CiAgICAgIGNhY2hlRW50cnkgPSBMSVZFX0NBQ0hFW2tleV0gPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZSk7CiAgICB9CiAgICAKICAgIHJldHVybiBjYWNoZUVudHJ5Lmxlbmd0aCA+IDA7CiAgfTsKfSkoKTsvKioKICogSGlnaCBwZXJmb3JtYW50IHdheSB0byBjaGVjayB3aGV0aGVyIGFuIGVsZW1lbnQgd2l0aCBhIHNwZWNpZmljIGNsYXNzIG5hbWUgaXMgaW4gdGhlIGdpdmVuIGRvY3VtZW50CiAqIE9wdGltaXplZCBmb3IgYmVpbmcgaGVhdmlseSBleGVjdXRlZAogKiBVbmxlYXNoZXMgdGhlIHBvd2VyIG9mIGxpdmUgbm9kZSBsaXN0cwogKgogKiBAcGFyYW0ge09iamVjdH0gZG9jIFRoZSBkb2N1bWVudCBvYmplY3Qgb2YgdGhlIGNvbnRleHQgd2hlcmUgdG8gY2hlY2sKICogQHBhcmFtIHtTdHJpbmd9IHRhZ05hbWUgVXBwZXIgY2FzZWQgdGFnIG5hbWUKICogQGV4YW1wbGUKICogICAgd3lzaWh0bWw1LmRvbS5oYXNFbGVtZW50V2l0aENsYXNzTmFtZShkb2N1bWVudCwgImZvb2JhciIpOwogKi8KKGZ1bmN0aW9uKHd5c2lodG1sNSkgewogIHZhciBMSVZFX0NBQ0hFICAgICAgICAgID0ge30sCiAgICAgIERPQ1VNRU5UX0lERU5USUZJRVIgPSAxOwoKICBmdW5jdGlvbiBfZ2V0RG9jdW1lbnRJZGVudGlmaWVyKGRvYykgewogICAgcmV0dXJuIGRvYy5fd3lzaWh0bWw1X2lkZW50aWZpZXIgfHwgKGRvYy5fd3lzaWh0bWw1X2lkZW50aWZpZXIgPSBET0NVTUVOVF9JREVOVElGSUVSKyspOwogIH0KICAKICB3eXNpaHRtbDUuZG9tLmhhc0VsZW1lbnRXaXRoQ2xhc3NOYW1lID0gZnVuY3Rpb24oZG9jLCBjbGFzc05hbWUpIHsKICAgIC8vIGdldEVsZW1lbnRzQnlDbGFzc05hbWUgaXMgbm90IHN1cHBvcnRlZCBieSBJRTw5CiAgICAvLyBidXQgaXMgc29tZXRpbWVzIG1vY2tlZCB2aWEgbGlicmFyeSBjb2RlICh3aGljaCB0aGVuIGRvZXNuJ3QgcmV0dXJuIGxpdmUgbm9kZSBsaXN0cykKICAgIGlmICghd3lzaWh0bWw1LmJyb3dzZXIuc3VwcG9ydHNOYXRpdmVHZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCkpIHsKICAgICAgcmV0dXJuICEhZG9jLnF1ZXJ5U2VsZWN0b3IoIi4iICsgY2xhc3NOYW1lKTsKICAgIH0KCiAgICB2YXIga2V5ICAgICAgICAgPSBfZ2V0RG9jdW1lbnRJZGVudGlmaWVyKGRvYykgKyAiOiIgKyBjbGFzc05hbWUsCiAgICAgICAgY2FjaGVFbnRyeSAgPSBMSVZFX0NBQ0hFW2tleV07CiAgICBpZiAoIWNhY2hlRW50cnkpIHsKICAgICAgY2FjaGVFbnRyeSA9IExJVkVfQ0FDSEVba2V5XSA9IGRvYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7CiAgICB9CgogICAgcmV0dXJuIGNhY2hlRW50cnkubGVuZ3RoID4gMDsKICB9Owp9KSh3eXNpaHRtbDUpOwp3eXNpaHRtbDUuZG9tLmluc2VydCA9IGZ1bmN0aW9uKGVsZW1lbnRUb0luc2VydCkgewogIHJldHVybiB7CiAgICBhZnRlcjogZnVuY3Rpb24oZWxlbWVudCkgewogICAgICBlbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsZW1lbnRUb0luc2VydCwgZWxlbWVudC5uZXh0U2libGluZyk7CiAgICB9LAogICAgCiAgICBiZWZvcmU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgICAgZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbGVtZW50VG9JbnNlcnQsIGVsZW1lbnQpOwogICAgfSwKICAgIAogICAgaW50bzogZnVuY3Rpb24oZWxlbWVudCkgewogICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnRUb0luc2VydCk7CiAgICB9CiAgfTsKfTt3eXNpaHRtbDUuZG9tLmluc2VydENTUyA9IGZ1bmN0aW9uKHJ1bGVzKSB7CiAgcnVsZXMgPSBydWxlcy5qb2luKCJcbiIpOwogIAogIHJldHVybiB7CiAgICBpbnRvOiBmdW5jdGlvbihkb2MpIHsKICAgICAgdmFyIGhlYWQgICAgICAgICA9IGRvYy5oZWFkIHx8IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLAogICAgICAgICAgc3R5bGVFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CgogICAgICBzdHlsZUVsZW1lbnQudHlwZSA9ICJ0ZXh0L2NzcyI7CgogICAgICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHsKICAgICAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gcnVsZXM7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZShydWxlcykpOwogICAgICB9CgogICAgICBpZiAoaGVhZCkgewogICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTsKICAgICAgfQogICAgfQogIH07Cn07LyoqCiAqIE1ldGhvZCB0byBzZXQgZG9tIGV2ZW50cwogKgogKiBAZXhhbXBsZQogKiAgICB3eXNpaHRtbDUuZG9tLm9ic2VydmUoaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuYm9keSwgWyJmb2N1cyIsICJibHVyIl0sIGZ1bmN0aW9uKCkgeyAuLi4gfSk7CiAqLwp3eXNpaHRtbDUuZG9tLm9ic2VydmUgPSBmdW5jdGlvbihlbGVtZW50LCBldmVudE5hbWVzLCBoYW5kbGVyKSB7CiAgZXZlbnROYW1lcyA9IHR5cGVvZihldmVudE5hbWVzKSA9PT0gInN0cmluZyIgPyBbZXZlbnROYW1lc10gOiBldmVudE5hbWVzOwogIAogIHZhciBoYW5kbGVyV3JhcHBlciwKICAgICAgZXZlbnROYW1lLAogICAgICBpICAgICAgID0gMCwKICAgICAgbGVuZ3RoICA9IGV2ZW50TmFtZXMubGVuZ3RoOwogIAogIGZvciAoOyBpPGxlbmd0aDsgaSsrKSB7CiAgICBldmVudE5hbWUgPSBldmVudE5hbWVzW2ldOwogICAgaWYgKGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyLCBmYWxzZSk7CiAgICB9IGVsc2UgewogICAgICBoYW5kbGVyV3JhcHBlciA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgaWYgKCEoInRhcmdldCIgaW4gZXZlbnQpKSB7CiAgICAgICAgICBldmVudC50YXJnZXQgPSBldmVudC5zcmNFbGVtZW50OwogICAgICAgIH0KICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCA9IGV2ZW50LnByZXZlbnREZWZhdWx0IHx8IGZ1bmN0aW9uKCkgewogICAgICAgICAgdGhpcy5yZXR1cm5WYWx1ZSA9IGZhbHNlOwogICAgICAgIH07CiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uID0gZXZlbnQuc3RvcFByb3BhZ2F0aW9uIHx8IGZ1bmN0aW9uKCkgewogICAgICAgICAgdGhpcy5jYW5jZWxCdWJibGUgPSB0cnVlOwogICAgICAgIH07CiAgICAgICAgaGFuZGxlci5jYWxsKGVsZW1lbnQsIGV2ZW50KTsKICAgICAgfTsKICAgICAgZWxlbWVudC5hdHRhY2hFdmVudCgib24iICsgZXZlbnROYW1lLCBoYW5kbGVyV3JhcHBlcik7CiAgICB9CiAgfQogIAogIHJldHVybiB7CiAgICBzdG9wOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIGV2ZW50TmFtZSwKICAgICAgICAgIGkgICAgICAgPSAwLAogICAgICAgICAgbGVuZ3RoICA9IGV2ZW50TmFtZXMubGVuZ3RoOwogICAgICBmb3IgKDsgaTxsZW5ndGg7IGkrKykgewogICAgICAgIGV2ZW50TmFtZSA9IGV2ZW50TmFtZXNbaV07CiAgICAgICAgaWYgKGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcikgewogICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgaGFuZGxlciwgZmFsc2UpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBlbGVtZW50LmRldGFjaEV2ZW50KCJvbiIgKyBldmVudE5hbWUsIGhhbmRsZXJXcmFwcGVyKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Owp9OwovKioKICogSFRNTCBTYW5pdGl6ZXIKICogUmV3cml0ZXMgdGhlIEhUTUwgYmFzZWQgb24gZ2l2ZW4gcnVsZXMKICoKICogQHBhcmFtIHtFbGVtZW50fFN0cmluZ30gZWxlbWVudE9ySHRtbCBIVE1MIFN0cmluZyB0byBiZSBzYW5pdGl6ZWQgT1IgZWxlbWVudCB3aG9zZSBjb250ZW50IHNob3VsZCBiZSBzYW5pdGl6ZWQKICogQHBhcmFtIHtPYmplY3R9IFtydWxlc10gTGlzdCBvZiBydWxlcyBmb3IgcmV3cml0aW5nIHRoZSBIVE1MLCBpZiB0aGVyZSdzIG5vIHJ1bGUgZm9yIGFuIGVsZW1lbnQgaXQgd2lsbAogKiAgICBiZSBjb252ZXJ0ZWQgdG8gYSAic3BhbiIuIEVhY2ggcnVsZSBpcyBhIGtleS92YWx1ZSBwYWlyIHdoZXJlIGtleSBpcyB0aGUgdGFnIHRvIGNvbnZlcnQsIGFuZCB2YWx1ZSB0aGUKICogICAgZGVzaXJlZCBzdWJzdGl0dXRpb24uCiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IERvY3VtZW50IG9iamVjdCBpbiB3aGljaCB0byBwYXJzZSB0aGUgaHRtbCwgbmVlZGVkIHRvIHNhbmRib3ggdGhlIHBhcnNpbmcKICoKICogQHJldHVybiB7RWxlbWVudHxTdHJpbmd9IERlcGVuZHMgb24gdGhlIGVsZW1lbnRPckh0bWwgcGFyYW1ldGVyLiBXaGVuIGh0bWwgdGhlbiB0aGUgc2FuaXRpemVkIGh0bWwgYXMgc3RyaW5nIGVsc2V3aXNlIHRoZSBlbGVtZW50LgogKgogKiBAZXhhbXBsZQogKiAgICB2YXIgdXNlckhUTUwgPSAnPGRpdiBpZD0iZm9vIiBvbmNsaWNrPSJhbGVydCgxKTsiPjxwPjxmb250IGNvbG9yPSJyZWQiPmZvbzwvZm9udD48c2NyaXB0PmFsZXJ0KDEpOzwvc2NyaXB0PjwvcD48L2Rpdj4nOwogKiAgICB3eXNpaHRtbDUuZG9tLnBhcnNlKHVzZXJIVE1MLCB7CiAqICAgICAgdGFncyB7CiAqICAgICAgICBwOiAgICAgICJkaXYiLCAgICAgIC8vIFJlbmFtZSBwIHRhZ3MgdG8gZGl2IHRhZ3MKICogICAgICAgIGZvbnQ6ICAgInNwYW4iICAgICAgLy8gUmVuYW1lIGZvbnQgdGFncyB0byBzcGFuIHRhZ3MKICogICAgICAgIGRpdjogICAgdHJ1ZSwgICAgICAgLy8gS2VlcCB0aGVtLCBhbHNvIHBvc3NpYmxlIChzYW1lIHJlc3VsdCB3aGVuIHBhc3Npbmc6ICJkaXYiIG9yIHRydWUpCiAqICAgICAgICBzY3JpcHQ6IHVuZGVmaW5lZCAgIC8vIFJlbW92ZSBzY3JpcHQgZWxlbWVudHMKICogICAgICB9CiAqICAgIH0pOwogKiAgICAvLyA9PiA8ZGl2PjxkaXY+PHNwYW4+Zm9vIGJhcjwvc3Bhbj48L2Rpdj48L2Rpdj4KICoKICogICAgdmFyIHVzZXJIVE1MID0gJzx0YWJsZT48dGJvZHk+PHRyPjx0ZD5JJ20gYSB0YWJsZSE8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPic7CiAqICAgIHd5c2lodG1sNS5kb20ucGFyc2UodXNlckhUTUwpOwogKiAgICAvLyA9PiAnPHNwYW4+PHNwYW4+PHNwYW4+PHNwYW4+SSdtIGEgdGFibGUhPC9zcGFuPjwvc3Bhbj48L3NwYW4+PC9zcGFuPicKICoKICogICAgdmFyIHVzZXJIVE1MID0gJzxkaXY+Zm9vYmFyPGJyPmZvb2JhcjwvZGl2Pic7CiAqICAgIHd5c2lodG1sNS5kb20ucGFyc2UodXNlckhUTUwsIHsKICogICAgICB0YWdzOiB7CiAqICAgICAgICBkaXY6IHVuZGVmaW5lZCwKICogICAgICAgIGJyOiAgdHJ1ZQogKiAgICAgIH0KICogICAgfSk7CiAqICAgIC8vID0+ICcnCiAqCiAqICAgIHZhciB1c2VySFRNTCA9ICc8ZGl2IGNsYXNzPSJyZWQiPmZvbzwvZGl2PjxkaXYgY2xhc3M9InBpbmsiPmJhcjwvZGl2Pic7CiAqICAgIHd5c2lodG1sNS5kb20ucGFyc2UodXNlckhUTUwsIHsKICogICAgICBjbGFzc2VzOiB7CiAqICAgICAgICByZWQ6ICAgIDEsCiAqICAgICAgICBncmVlbjogIDEKICogICAgICB9LAogKiAgICAgIHRhZ3M6IHsKICogICAgICAgIGRpdjogewogKiAgICAgICAgICByZW5hbWVfdGFnOiAgICAgInAiCiAqICAgICAgICB9CiAqICAgICAgfQogKiAgICB9KTsKICogICAgLy8gPT4gJzxwIGNsYXNzPSJyZWQiPmZvbzwvcD48cD5iYXI8L3A+JwogKi8Kd3lzaWh0bWw1LmRvbS5wYXJzZSA9IChmdW5jdGlvbigpIHsKICAKICAvKioKICAgKiBJdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgYSBYTUxQYXJzZXIvRE9NUGFyc2VyIGFzIEhUTUw1IGlzIG5vdCBhbHdheXMgd2VsbC1mb3JtZWQgWE1MCiAgICogbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZygnPGltZyBzcmM9ImZvby5naWYiPicpIHdpbGwgY2F1c2UgYSBwYXJzZUVycm9yIHNpbmNlIHRoZQogICAqIG5vZGUgaXNuJ3QgY2xvc2VkCiAgICoKICAgKiBUaGVyZWZvcmUgd2UndmUgdG8gdXNlIHRoZSBicm93c2VyJ3Mgb3JkaW5hcnkgSFRNTCBwYXJzZXIgaW52b2tlZCBieSBzZXR0aW5nIGlubmVySFRNTC4KICAgKi8KICB2YXIgTk9ERV9UWVBFX01BUFBJTkcgPSB7CiAgICAgICAgIjEiOiBfaGFuZGxlRWxlbWVudCwKICAgICAgICAiMyI6IF9oYW5kbGVUZXh0CiAgICAgIH0sCiAgICAgIC8vIFJlbmFtZSB1bmtub3duIHRhZ3MgdG8gdGhpcwogICAgICBERUZBVUxUX05PREVfTkFNRSAgID0gInNwYW4iLAogICAgICBXSElURV9TUEFDRV9SRUdfRVhQID0gL1xzKy8sCiAgICAgIGRlZmF1bHRSdWxlcyAgICAgICAgPSB7IHRhZ3M6IHt9LCBjbGFzc2VzOiB7fSB9LAogICAgICBjdXJyZW50UnVsZXMgICAgICAgID0ge307CiAgCiAgLyoqCiAgICogSXRlcmF0ZXMgb3ZlciBhbGwgY2hpbGRzIG9mIHRoZSBlbGVtZW50LCByZWNyZWF0ZXMgdGhlbSwgYXBwZW5kcyB0aGVtIGludG8gYSBkb2N1bWVudCBmcmFnbWVudAogICAqIHdoaWNoIGxhdGVyIHJlcGxhY2VzIHRoZSBlbnRpcmUgYm9keSBjb250ZW50CiAgICovCiAgZnVuY3Rpb24gcGFyc2UoZWxlbWVudE9ySHRtbCwgcnVsZXMsIGNvbnRleHQsIGNsZWFuVXApIHsKICAgIHd5c2lodG1sNS5sYW5nLm9iamVjdChjdXJyZW50UnVsZXMpLm1lcmdlKGRlZmF1bHRSdWxlcykubWVyZ2UocnVsZXMpLmdldCgpOwogICAgCiAgICBjb250ZXh0ICAgICAgICAgICA9IGNvbnRleHQgfHwgZWxlbWVudE9ySHRtbC5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50OwogICAgdmFyIGZyYWdtZW50ICAgICAgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwKICAgICAgICBpc1N0cmluZyAgICAgID0gdHlwZW9mKGVsZW1lbnRPckh0bWwpID09PSAic3RyaW5nIiwKICAgICAgICBlbGVtZW50LAogICAgICAgIG5ld05vZGUsCiAgICAgICAgZmlyc3RDaGlsZDsKICAgIAogICAgaWYgKGlzU3RyaW5nKSB7CiAgICAgIGVsZW1lbnQgPSB3eXNpaHRtbDUuZG9tLmdldEFzRG9tKGVsZW1lbnRPckh0bWwsIGNvbnRleHQpOwogICAgfSBlbHNlIHsKICAgICAgZWxlbWVudCA9IGVsZW1lbnRPckh0bWw7CiAgICB9CiAgICAKICAgIHdoaWxlIChlbGVtZW50LmZpcnN0Q2hpbGQpIHsKICAgICAgZmlyc3RDaGlsZCAgPSBlbGVtZW50LmZpcnN0Q2hpbGQ7CiAgICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGQoZmlyc3RDaGlsZCk7CiAgICAgIG5ld05vZGUgPSBfY29udmVydChmaXJzdENoaWxkLCBjbGVhblVwKTsKICAgICAgaWYgKG5ld05vZGUpIHsKICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChuZXdOb2RlKTsKICAgICAgfQogICAgfQogICAgCiAgICAvLyBDbGVhciBlbGVtZW50IGNvbnRlbnRzCiAgICBlbGVtZW50LmlubmVySFRNTCA9ICIiOwogICAgCiAgICAvLyBJbnNlcnQgbmV3IERPTSB0cmVlCiAgICBlbGVtZW50LmFwcGVuZENoaWxkKGZyYWdtZW50KTsKICAgIAogICAgcmV0dXJuIGlzU3RyaW5nID8gd3lzaWh0bWw1LnF1aXJrcy5nZXRDb3JyZWN0SW5uZXJIVE1MKGVsZW1lbnQpIDogZWxlbWVudDsKICB9CiAgCiAgZnVuY3Rpb24gX2NvbnZlcnQob2xkTm9kZSwgY2xlYW5VcCkgewogICAgdmFyIG9sZE5vZGVUeXBlICAgICA9IG9sZE5vZGUubm9kZVR5cGUsCiAgICAgICAgb2xkQ2hpbGRzICAgICAgID0gb2xkTm9kZS5jaGlsZE5vZGVzLAogICAgICAgIG9sZENoaWxkc0xlbmd0aCA9IG9sZENoaWxkcy5sZW5ndGgsCiAgICAgICAgbmV3Tm9kZSwKICAgICAgICBtZXRob2QgICAgICAgICAgPSBOT0RFX1RZUEVfTUFQUElOR1tvbGROb2RlVHlwZV0sCiAgICAgICAgaSAgICAgICAgICAgICAgID0gMDsKICAgIAogICAgbmV3Tm9kZSA9IG1ldGhvZCAmJiBtZXRob2Qob2xkTm9kZSk7CiAgICAKICAgIGlmICghbmV3Tm9kZSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIAogICAgZm9yIChpPTA7IGk8b2xkQ2hpbGRzTGVuZ3RoOyBpKyspIHsKICAgICAgbmV3Q2hpbGQgPSBfY29udmVydChvbGRDaGlsZHNbaV0sIGNsZWFuVXApOwogICAgICBpZiAobmV3Q2hpbGQpIHsKICAgICAgICBuZXdOb2RlLmFwcGVuZENoaWxkKG5ld0NoaWxkKTsKICAgICAgfQogICAgfQogICAgCiAgICAvLyBDbGVhbnVwIHNlbnNlbGVzcyA8c3Bhbj4gZWxlbWVudHMKICAgIGlmIChjbGVhblVwICYmCiAgICAgICAgbmV3Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA8PSAxICYmCiAgICAgICAgbmV3Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBERUZBVUxUX05PREVfTkFNRSAmJgogICAgICAgICFuZXdOb2RlLmF0dHJpYnV0ZXMubGVuZ3RoKSB7CiAgICAgIHJldHVybiBuZXdOb2RlLmZpcnN0Q2hpbGQ7CiAgICB9CiAgICAKICAgIHJldHVybiBuZXdOb2RlOwogIH0KICAKICBmdW5jdGlvbiBfaGFuZGxlRWxlbWVudChvbGROb2RlKSB7CiAgICB2YXIgcnVsZSwKICAgICAgICBuZXdOb2RlLAogICAgICAgIGVuZFRhZywKICAgICAgICB0YWdSdWxlcyAgICA9IGN1cnJlbnRSdWxlcy50YWdzLAogICAgICAgIG5vZGVOYW1lICAgID0gb2xkTm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLAogICAgICAgIHNjb3BlTmFtZSAgID0gb2xkTm9kZS5zY29wZU5hbWU7CiAgICAKICAgIC8qKgogICAgICogV2UgYWxyZWFkeSBwYXJzZWQgdGhhdCBlbGVtZW50CiAgICAgKiBpZ25vcmUgaXQhICh5ZXMsIHRoaXMgc29tZXRpbWVzIGhhcHBlbnMgaW4gSUU4IHdoZW4gdGhlIGh0bWwgaXMgaW52YWxpZCkKICAgICAqLwogICAgaWYgKG9sZE5vZGUuX3d5c2lodG1sNSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIG9sZE5vZGUuX3d5c2lodG1sNSA9IDE7CiAgICAKICAgIGlmIChvbGROb2RlLmNsYXNzTmFtZSA9PT0gInd5c2lodG1sNS10ZW1wIikgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBJRSBpcyB0aGUgb25seSBicm93c2VyIHdobyBkb2Vzbid0IGluY2x1ZGUgdGhlIG5hbWVzcGFjZSBpbiB0aGUKICAgICAqIG5vZGVOYW1lLCB0aGF0J3Mgd2h5IHdlIGhhdmUgdG8gcHJlcGVuZCBpdCBieSBvdXJzZWx2ZXMKICAgICAqIHNjb3BlTmFtZSBpcyBhIHByb3ByaWV0YXJ5IElFIGZlYXR1cmUKICAgICAqIHJlYWQgbW9yZSBoZXJlIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczUzNDM4OCh2PXZzLjg1KS5hc3B4CiAgICAgKi8KICAgIGlmIChzY29wZU5hbWUgJiYgc2NvcGVOYW1lICE9ICJIVE1MIikgewogICAgICBub2RlTmFtZSA9IHNjb3BlTmFtZSArICI6IiArIG5vZGVOYW1lOwogICAgfQogICAgCiAgICAvKioKICAgICAqIFJlcGFpciBub2RlCiAgICAgKiBJRSBpcyBhIGJpdCBiaXRjaHkgd2hlbiBpdCBjb21lcyB0byBpbnZhbGlkIG5lc3RlZCBtYXJrdXAgd2hpY2ggaW5jbHVkZXMgdW5jbG9zZWQgdGFncwogICAgICogQSA8cD4gZG9lc24ndCBuZWVkIHRvIGJlIGNsb3NlZCBhY2NvcmRpbmcgSFRNTDQtNSBzcGVjLCB3ZSBzaW1wbHkgcmVwbGFjZSBpdCB3aXRoIGEgPGRpdj4gdG8gcHJlc2VydmUgaXRzIGNvbnRlbnQgYW5kIGxheW91dAogICAgICovCiAgICBpZiAoIm91dGVySFRNTCIgaW4gb2xkTm9kZSkgewogICAgICBpZiAoIXd5c2lodG1sNS5icm93c2VyLmF1dG9DbG9zZXNVbmNsb3NlZFRhZ3MoKSAmJgogICAgICAgICAgb2xkTm9kZS5ub2RlTmFtZSA9PT0gIlAiICYmCiAgICAgICAgICBvbGROb2RlLm91dGVySFRNTC5zbGljZSgtNCkudG9Mb3dlckNhc2UoKSAhPT0gIjwvcD4iKSB7CiAgICAgICAgbm9kZU5hbWUgPSAiZGl2IjsKICAgICAgfQogICAgfQogICAgCiAgICBpZiAobm9kZU5hbWUgaW4gdGFnUnVsZXMpIHsKICAgICAgcnVsZSA9IHRhZ1J1bGVzW25vZGVOYW1lXTsKICAgICAgaWYgKCFydWxlIHx8IHJ1bGUucmVtb3ZlKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgCiAgICAgIHJ1bGUgPSB0eXBlb2YocnVsZSkgPT09ICJzdHJpbmciID8geyByZW5hbWVfdGFnOiBydWxlIH0gOiBydWxlOwogICAgfSBlbHNlIGlmIChvbGROb2RlLmZpcnN0Q2hpbGQpIHsKICAgICAgcnVsZSA9IHsgcmVuYW1lX3RhZzogREVGQVVMVF9OT0RFX05BTUUgfTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFJlbW92ZSBlbXB0eSB1bmtub3duIGVsZW1lbnRzCiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgCiAgICBuZXdOb2RlID0gb2xkTm9kZS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocnVsZS5yZW5hbWVfdGFnIHx8IG5vZGVOYW1lKTsKICAgIF9oYW5kbGVBdHRyaWJ1dGVzKG9sZE5vZGUsIG5ld05vZGUsIHJ1bGUpOwogICAgCiAgICBvbGROb2RlID0gbnVsbDsKICAgIHJldHVybiBuZXdOb2RlOwogIH0KICAKICBmdW5jdGlvbiBfaGFuZGxlQXR0cmlidXRlcyhvbGROb2RlLCBuZXdOb2RlLCBydWxlKSB7CiAgICB2YXIgYXR0cmlidXRlcyAgICAgICAgICA9IHt9LCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmcmVzaCBuZXcgc2V0IG9mIGF0dHJpYnV0ZXMgdG8gc2V0IG9uIG5ld05vZGUKICAgICAgICBzZXRDbGFzcyAgICAgICAgICAgID0gcnVsZS5zZXRfY2xhc3MsICAgICAgICAgICAgIC8vIGNsYXNzZXMgdG8gc2V0CiAgICAgICAgYWRkQ2xhc3MgICAgICAgICAgICA9IHJ1bGUuYWRkX2NsYXNzLCAgICAgICAgICAgICAvLyBhZGQgY2xhc3NlcyBiYXNlZCBvbiBleGlzdGluZyBhdHRyaWJ1dGVzCiAgICAgICAgc2V0QXR0cmlidXRlcyAgICAgICA9IHJ1bGUuc2V0X2F0dHJpYnV0ZXMsICAgICAgICAvLyBhdHRyaWJ1dGVzIHRvIHNldCBvbiB0aGUgY3VycmVudCBub2RlCiAgICAgICAgY2hlY2tBdHRyaWJ1dGVzICAgICA9IHJ1bGUuY2hlY2tfYXR0cmlidXRlcywgICAgICAvLyBjaGVjay9jb252ZXJ0IHZhbHVlcyBvZiBhdHRyaWJ1dGVzCiAgICAgICAgYWxsb3dlZENsYXNzZXMgICAgICA9IGN1cnJlbnRSdWxlcy5jbGFzc2VzLAogICAgICAgIGkgICAgICAgICAgICAgICAgICAgPSAwLAogICAgICAgIGNsYXNzZXMgICAgICAgICAgICAgPSBbXSwKICAgICAgICBuZXdDbGFzc2VzICAgICAgICAgID0gW10sCiAgICAgICAgbmV3VW5pcXVlQ2xhc3NlcyAgICA9IFtdLAogICAgICAgIG9sZENsYXNzZXMgICAgICAgICAgPSBbXSwKICAgICAgICBjbGFzc2VzTGVuZ3RoLAogICAgICAgIG5ld0NsYXNzZXNMZW5ndGgsCiAgICAgICAgY3VycmVudENsYXNzLAogICAgICAgIG5ld0NsYXNzLAogICAgICAgIGF0dHJpYnV0ZU5hbWUsCiAgICAgICAgbmV3QXR0cmlidXRlVmFsdWUsCiAgICAgICAgbWV0aG9kOwogICAgCiAgICBpZiAoc2V0QXR0cmlidXRlcykgewogICAgICBhdHRyaWJ1dGVzID0gd3lzaWh0bWw1Lmxhbmcub2JqZWN0KHNldEF0dHJpYnV0ZXMpLmNsb25lKCk7CiAgICB9CiAgICAKICAgIGlmIChjaGVja0F0dHJpYnV0ZXMpIHsKICAgICAgZm9yIChhdHRyaWJ1dGVOYW1lIGluIGNoZWNrQXR0cmlidXRlcykgewogICAgICAgIG1ldGhvZCA9IGF0dHJpYnV0ZUNoZWNrTWV0aG9kc1tjaGVja0F0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV1dOwogICAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgbmV3QXR0cmlidXRlVmFsdWUgPSBtZXRob2QoX2dldEF0dHJpYnV0ZShvbGROb2RlLCBhdHRyaWJ1dGVOYW1lKSk7CiAgICAgICAgaWYgKHR5cGVvZihuZXdBdHRyaWJ1dGVWYWx1ZSkgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICBhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdID0gbmV3QXR0cmlidXRlVmFsdWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAKICAgIGlmIChzZXRDbGFzcykgewogICAgICBjbGFzc2VzLnB1c2goc2V0Q2xhc3MpOwogICAgfQogICAgCiAgICBpZiAoYWRkQ2xhc3MpIHsKICAgICAgZm9yIChhdHRyaWJ1dGVOYW1lIGluIGFkZENsYXNzKSB7CiAgICAgICAgbWV0aG9kID0gYWRkQ2xhc3NNZXRob2RzW2FkZENsYXNzW2F0dHJpYnV0ZU5hbWVdXTsKICAgICAgICBpZiAoIW1ldGhvZCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIG5ld0NsYXNzID0gbWV0aG9kKF9nZXRBdHRyaWJ1dGUob2xkTm9kZSwgYXR0cmlidXRlTmFtZSkpOwogICAgICAgIGlmICh0eXBlb2YobmV3Q2xhc3MpID09PSAic3RyaW5nIikgewogICAgICAgICAgY2xhc3Nlcy5wdXNoKG5ld0NsYXNzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIAogICAgLy8gbWFrZSBzdXJlIHRoYXQgd3lzaWh0bWw1IHRlbXAgY2xhc3MgZG9lc24ndCBnZXQgc3RyaXBwZWQgb3V0CiAgICBhbGxvd2VkQ2xhc3Nlc1siX3d5c2lodG1sNS10ZW1wLXBsYWNlaG9sZGVyIl0gPSAxOwogICAgCiAgICAvLyBhZGQgb2xkIGNsYXNzZXMgbGFzdAogICAgb2xkQ2xhc3NlcyA9IG9sZE5vZGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOwogICAgaWYgKG9sZENsYXNzZXMpIHsKICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuY29uY2F0KG9sZENsYXNzZXMuc3BsaXQoV0hJVEVfU1BBQ0VfUkVHX0VYUCkpOwogICAgfQogICAgY2xhc3Nlc0xlbmd0aCA9IGNsYXNzZXMubGVuZ3RoOwogICAgZm9yICg7IGk8Y2xhc3Nlc0xlbmd0aDsgaSsrKSB7CiAgICAgIGN1cnJlbnRDbGFzcyA9IGNsYXNzZXNbaV07CiAgICAgIGlmIChhbGxvd2VkQ2xhc3Nlc1tjdXJyZW50Q2xhc3NdKSB7CiAgICAgICAgbmV3Q2xhc3Nlcy5wdXNoKGN1cnJlbnRDbGFzcyk7CiAgICAgIH0KICAgIH0KICAgIAogICAgLy8gcmVtb3ZlIGR1cGxpY2F0ZSBlbnRyaWVzIGFuZCBwcmVzZXJ2ZSBjbGFzcyBzcGVjaWZpY2l0eQogICAgbmV3Q2xhc3Nlc0xlbmd0aCA9IG5ld0NsYXNzZXMubGVuZ3RoOwogICAgd2hpbGUgKG5ld0NsYXNzZXNMZW5ndGgtLSkgewogICAgICBjdXJyZW50Q2xhc3MgPSBuZXdDbGFzc2VzW25ld0NsYXNzZXNMZW5ndGhdOwogICAgICBpZiAoIXd5c2lodG1sNS5sYW5nLmFycmF5KG5ld1VuaXF1ZUNsYXNzZXMpLmNvbnRhaW5zKGN1cnJlbnRDbGFzcykpIHsKICAgICAgICBuZXdVbmlxdWVDbGFzc2VzLnVuc2hpZnQoY3VycmVudENsYXNzKTsKICAgICAgfQogICAgfQogICAgCiAgICBpZiAobmV3VW5pcXVlQ2xhc3Nlcy5sZW5ndGgpIHsKICAgICAgYXR0cmlidXRlc1siY2xhc3MiXSA9IG5ld1VuaXF1ZUNsYXNzZXMuam9pbigiICIpOwogICAgfQogICAgCiAgICAvLyBzZXQgYXR0cmlidXRlcyBvbiBuZXdOb2RlCiAgICBmb3IgKGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlcykgewogICAgICAvLyBTZXR0aW5nIGF0dHJpYnV0ZXMgY2FuIGNhdXNlIGEganMgZXJyb3IgaW4gSUUgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzCiAgICAgIC8vIGVnLiBvbiBhIDxpbWc+IHVuZGVyIGh0dHBzIHdoZW4gaXQncyBuZXcgYXR0cmlidXRlIHZhbHVlIGlzIG5vbi1odHRwcwogICAgICAvLyBUT0RPOiBJbnZlc3RpZ2F0ZSB0aGlzIGZ1cnRoZXIgYW5kIGNoZWNrIGZvciBzbWFydGVyIGhhbmRsaW5nCiAgICAgIHRyeSB7CiAgICAgICAgbmV3Tm9kZS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXSk7CiAgICAgIH0gY2F0Y2goZSkge30KICAgIH0KICAgIAogICAgLy8gSUU4IHNvbWV0aW1lcyBsb3NlcyB0aGUgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMgd2hlbiB0aG9zZSBhcmUgc2V0IGJlZm9yZSB0aGUgInNyYyIKICAgIC8vIHNvIHdlIG1ha2Ugc3VyZSB0byBzZXQgdGhlbSBhZ2FpbgogICAgaWYgKGF0dHJpYnV0ZXMuc3JjKSB7CiAgICAgIGlmICh0eXBlb2YoYXR0cmlidXRlcy53aWR0aCkgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgbmV3Tm9kZS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwgYXR0cmlidXRlcy53aWR0aCk7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZihhdHRyaWJ1dGVzLmhlaWdodCkgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgbmV3Tm9kZS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIGF0dHJpYnV0ZXMuaGVpZ2h0KTsKICAgICAgfQogICAgfQogIH0KICAKICAvKioKICAgKiBJRSBnaXZlcyB3cm9uZyByZXN1bHRzIGZvciBoYXNBdHRyaWJ1dGUvZ2V0QXR0cmlidXRlLCBmb3IgZXhhbXBsZToKICAgKiAgICB2YXIgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwogICAqICAgIHRkLmdldEF0dHJpYnV0ZSgicm93c3BhbiIpOyAvLyA9PiAiMSIgaW4gSUUKICAgKgogICAqIFRoZXJlZm9yZSB3ZSBoYXZlIHRvIGNoZWNrIHRoZSBlbGVtZW50J3Mgb3V0ZXJIVE1MIGZvciB0aGUgYXR0cmlidXRlCiAgICovCiAgdmFyIEhBU19HRVRfQVRUUklCVVRFX0JVRyA9ICF3eXNpaHRtbDUuYnJvd3Nlci5zdXBwb3J0c0dldEF0dHJpYnV0ZUNvcnJlY3RseSgpOwogIGZ1bmN0aW9uIF9nZXRBdHRyaWJ1dGUobm9kZSwgYXR0cmlidXRlTmFtZSkgewogICAgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKTsKICAgIHZhciBub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7CiAgICBpZiAobm9kZU5hbWUgPT0gIklNRyIgJiYgYXR0cmlidXRlTmFtZSA9PSAic3JjIiAmJiBfaXNMb2FkZWRJbWFnZShub2RlKSA9PT0gdHJ1ZSkgewogICAgICAvLyBHZXQgJ3NyYycgYXR0cmlidXRlIHZhbHVlIHZpYSBvYmplY3QgcHJvcGVydHkgc2luY2UgdGhpcyB3aWxsIGFsd2F5cyBjb250YWluIHRoZQogICAgICAvLyBmdWxsIGFic29sdXRlIHVybCAoaHR0cDovLy4uLikKICAgICAgLy8gdGhpcyBmaXhlcyBhIHZlcnkgYW5ub3lpbmcgYnVnIGluIGZpcmVmb3ggKHZlciAzLjYgJiA0KSBhbmQgSUUgOCB3aGVyZSBpbWFnZXMgY29waWVkIGZyb20gdGhlIHNhbWUgaG9zdAogICAgICAvLyB3aWxsIGhhdmUgcmVsYXRpdmUgcGF0aHMsIHdoaWNoIHRoZSBzYW5pdGl6ZXIgc3RyaXBzIG91dCAoc2VlIGF0dHJpYnV0ZUNoZWNrTWV0aG9kcy51cmwpCiAgICAgIHJldHVybiBub2RlLnNyYzsKICAgIH0gZWxzZSBpZiAoSEFTX0dFVF9BVFRSSUJVVEVfQlVHICYmICJvdXRlckhUTUwiIGluIG5vZGUpIHsKICAgICAgLy8gRG9uJ3QgdHJ1c3QgZ2V0QXR0cmlidXRlL2hhc0F0dHJpYnV0ZSBpbiBJRSA2LTgsIGluc3RlYWQgY2hlY2sgdGhlIGVsZW1lbnQncyBvdXRlckhUTUwKICAgICAgdmFyIG91dGVySFRNTCAgICAgID0gbm9kZS5vdXRlckhUTUwudG9Mb3dlckNhc2UoKSwKICAgICAgICAgIC8vIFRPRE86IFRoaXMgbWlnaHQgbm90IHdvcmsgZm9yIGF0dHJpYnV0ZXMgd2l0aG91dCB2YWx1ZTogPGlucHV0IGRpc2FibGVkPgogICAgICAgICAgaGFzQXR0cmlidXRlICAgPSBvdXRlckhUTUwuaW5kZXhPZigiICIgKyBhdHRyaWJ1dGVOYW1lICsgICI9IikgIT0gLTE7CiAgICAgIAogICAgICByZXR1cm4gaGFzQXR0cmlidXRlID8gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkgOiBudWxsOwogICAgfSBlbHNlewogICAgICByZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7CiAgICB9CiAgfQogIAogIC8qKgogICAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIG5vZGUgaXMgYSBwcm9wZXIgbG9hZGVkIGltYWdlCiAgICogRklYTUU6IFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdW5rbm93biAoQ2hyb21lLCBTYWZhcmkpCiAgICovCiAgZnVuY3Rpb24gX2lzTG9hZGVkSW1hZ2Uobm9kZSkgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIG5vZGUuY29tcGxldGUgJiYgIW5vZGUubW96TWF0Y2hlc1NlbGVjdG9yKCI6LW1vei1icm9rZW4iKTsKICAgIH0gY2F0Y2goZSkgewogICAgICBpZiAobm9kZS5jb21wbGV0ZSAmJiBub2RlLnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogIH0KICAKICBmdW5jdGlvbiBfaGFuZGxlVGV4dChvbGROb2RlKSB7CiAgICByZXR1cm4gb2xkTm9kZS5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG9sZE5vZGUuZGF0YSk7CiAgfQogIAogIAogIC8vIC0tLS0tLS0tLS0tLSBhdHRyaWJ1dGUgY2hlY2tzIC0tLS0tLS0tLS0tLSBcXAogIHZhciBhdHRyaWJ1dGVDaGVja01ldGhvZHMgPSB7CiAgICB1cmw6IChmdW5jdGlvbigpIHsKICAgICAgdmFyIFJFR19FWFAgPSAvXmh0dHBzPzpcL1wvL2k7CiAgICAgIHJldHVybiBmdW5jdGlvbihhdHRyaWJ1dGVWYWx1ZSkgewogICAgICAgIGlmICghYXR0cmlidXRlVmFsdWUgfHwgIWF0dHJpYnV0ZVZhbHVlLm1hdGNoKFJFR19FWFApKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlLnJlcGxhY2UoUkVHX0VYUCwgZnVuY3Rpb24obWF0Y2gpIHsKICAgICAgICAgIHJldHVybiBtYXRjaC50b0xvd2VyQ2FzZSgpOwogICAgICAgIH0pOwogICAgICB9OwogICAgfSkoKSwKICAgIAogICAgYWx0OiAoZnVuY3Rpb24oKSB7CiAgICAgIHZhciBSRUdfRVhQID0gL1teIGEtejAtOV9cLV0vZ2k7CiAgICAgIHJldHVybiBmdW5jdGlvbihhdHRyaWJ1dGVWYWx1ZSkgewogICAgICAgIGlmICghYXR0cmlidXRlVmFsdWUpIHsKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlLnJlcGxhY2UoUkVHX0VYUCwgIiIpOwogICAgICB9OwogICAgfSkoKSwKICAgIAogICAgbnVtYmVyczogKGZ1bmN0aW9uKCkgewogICAgICB2YXIgUkVHX0VYUCA9IC9cRC9nOwogICAgICByZXR1cm4gZnVuY3Rpb24oYXR0cmlidXRlVmFsdWUpIHsKICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9IChhdHRyaWJ1dGVWYWx1ZSB8fCAiIikucmVwbGFjZShSRUdfRVhQLCAiIik7CiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlIHx8IG51bGw7CiAgICAgIH07CiAgICB9KSgpCiAgfTsKICAKICAvLyAtLS0tLS0tLS0tLS0gY2xhc3MgY29udmVydGVyIChjb252ZXJ0cyBhbiBodG1sIGF0dHJpYnV0ZSB0byBhIGNsYXNzIG5hbWUpIC0tLS0tLS0tLS0tLSBcXAogIHZhciBhZGRDbGFzc01ldGhvZHMgPSB7CiAgICBhbGlnbl9pbWc6IChmdW5jdGlvbigpIHsKICAgICAgdmFyIG1hcHBpbmcgPSB7CiAgICAgICAgbGVmdDogICAid3lzaXd5Zy1mbG9hdC1sZWZ0IiwKICAgICAgICByaWdodDogICJ3eXNpd3lnLWZsb2F0LXJpZ2h0IgogICAgICB9OwogICAgICByZXR1cm4gZnVuY3Rpb24oYXR0cmlidXRlVmFsdWUpIHsKICAgICAgICByZXR1cm4gbWFwcGluZ1tTdHJpbmcoYXR0cmlidXRlVmFsdWUpLnRvTG93ZXJDYXNlKCldOwogICAgICB9OwogICAgfSkoKSwKICAgIAogICAgYWxpZ25fdGV4dDogKGZ1bmN0aW9uKCkgewogICAgICB2YXIgbWFwcGluZyA9IHsKICAgICAgICBsZWZ0OiAgICAgInd5c2l3eWctdGV4dC1hbGlnbi1sZWZ0IiwKICAgICAgICByaWdodDogICAgInd5c2l3eWctdGV4dC1hbGlnbi1yaWdodCIsCiAgICAgICAgY2VudGVyOiAgICJ3eXNpd3lnLXRleHQtYWxpZ24tY2VudGVyIiwKICAgICAgICBqdXN0aWZ5OiAgInd5c2l3eWctdGV4dC1hbGlnbi1qdXN0aWZ5IgogICAgICB9OwogICAgICByZXR1cm4gZnVuY3Rpb24oYXR0cmlidXRlVmFsdWUpIHsKICAgICAgICByZXR1cm4gbWFwcGluZ1tTdHJpbmcoYXR0cmlidXRlVmFsdWUpLnRvTG93ZXJDYXNlKCldOwogICAgICB9OwogICAgfSkoKSwKICAgIAogICAgY2xlYXJfYnI6IChmdW5jdGlvbigpIHsKICAgICAgdmFyIG1hcHBpbmcgPSB7CiAgICAgICAgbGVmdDogICAid3lzaXd5Zy1jbGVhci1sZWZ0IiwKICAgICAgICByaWdodDogICJ3eXNpd3lnLWNsZWFyLXJpZ2h0IiwKICAgICAgICBib3RoOiAgICJ3eXNpd3lnLWNsZWFyLWJvdGgiLAogICAgICAgIGFsbDogICAgInd5c2l3eWctY2xlYXItYm90aCIKICAgICAgfTsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKGF0dHJpYnV0ZVZhbHVlKSB7CiAgICAgICAgcmV0dXJuIG1hcHBpbmdbU3RyaW5nKGF0dHJpYnV0ZVZhbHVlKS50b0xvd2VyQ2FzZSgpXTsKICAgICAgfTsKICAgIH0pKCksCiAgICAKICAgIHNpemVfZm9udDogKGZ1bmN0aW9uKCkgewogICAgICB2YXIgbWFwcGluZyA9IHsKICAgICAgICAiMSI6ICJ3eXNpd3lnLWZvbnQtc2l6ZS14eC1zbWFsbCIsCiAgICAgICAgIjIiOiAid3lzaXd5Zy1mb250LXNpemUtc21hbGwiLAogICAgICAgICIzIjogInd5c2l3eWctZm9udC1zaXplLW1lZGl1bSIsCiAgICAgICAgIjQiOiAid3lzaXd5Zy1mb250LXNpemUtbGFyZ2UiLAogICAgICAgICI1IjogInd5c2l3eWctZm9udC1zaXplLXgtbGFyZ2UiLAogICAgICAgICI2IjogInd5c2l3eWctZm9udC1zaXplLXh4LWxhcmdlIiwKICAgICAgICAiNyI6ICJ3eXNpd3lnLWZvbnQtc2l6ZS14eC1sYXJnZSIsCiAgICAgICAgIi0iOiAid3lzaXd5Zy1mb250LXNpemUtc21hbGxlciIsCiAgICAgICAgIisiOiAid3lzaXd5Zy1mb250LXNpemUtbGFyZ2VyIgogICAgICB9OwogICAgICByZXR1cm4gZnVuY3Rpb24oYXR0cmlidXRlVmFsdWUpIHsKICAgICAgICByZXR1cm4gbWFwcGluZ1tTdHJpbmcoYXR0cmlidXRlVmFsdWUpLmNoYXJBdCgwKV07CiAgICAgIH07CiAgICB9KSgpCiAgfTsKICAKICByZXR1cm4gcGFyc2U7Cn0pKCk7LyoqCiAqIENoZWNrcyBmb3IgZW1wdHkgdGV4dCBub2RlIGNoaWxkcyBhbmQgcmVtb3ZlcyB0aGVtCiAqCiAqIEBwYXJhbSB7RWxlbWVudH0gbm9kZSBUaGUgZWxlbWVudCBpbiB3aGljaCB0byBjbGVhbnVwCiAqIEBleGFtcGxlCiAqICAgIHd5c2lodG1sNS5kb20ucmVtb3ZlRW1wdHlUZXh0Tm9kZXMoZWxlbWVudCk7CiAqLwp3eXNpaHRtbDUuZG9tLnJlbW92ZUVtcHR5VGV4dE5vZGVzID0gZnVuY3Rpb24obm9kZSkgewogIHZhciBjaGlsZE5vZGUsCiAgICAgIGNoaWxkTm9kZXMgICAgICAgID0gd3lzaWh0bWw1LmxhbmcuYXJyYXkobm9kZS5jaGlsZE5vZGVzKS5nZXQoKSwKICAgICAgY2hpbGROb2Rlc0xlbmd0aCAgPSBjaGlsZE5vZGVzLmxlbmd0aCwKICAgICAgaSAgICAgICAgICAgICAgICAgPSAwOwogIGZvciAoOyBpPGNoaWxkTm9kZXNMZW5ndGg7IGkrKykgewogICAgY2hpbGROb2RlID0gY2hpbGROb2Rlc1tpXTsKICAgIGlmIChjaGlsZE5vZGUubm9kZVR5cGUgPT09IHd5c2lodG1sNS5URVhUX05PREUgJiYgY2hpbGROb2RlLmRhdGEgPT09ICIiKSB7CiAgICAgIGNoaWxkTm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNoaWxkTm9kZSk7CiAgICB9CiAgfQp9OwovKioKICogUmVuYW1lcyBhbiBlbGVtZW50IChlZy4gYSA8ZGl2PiB0byBhIDxwPikgYW5kIGtlZXBzIGl0cyBjaGlsZHMKICoKICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRoZSBsaXN0IGVsZW1lbnQgd2hpY2ggc2hvdWxkIGJlIHJlbmFtZWQKICogQHBhcmFtIHtFbGVtZW50fSBuZXdOb2RlTmFtZSBUaGUgZGVzaXJlZCB0YWcgbmFtZQogKgogKiBAZXhhbXBsZQogKiAgICA8IS0tIEFzc3VtZSB0aGUgZm9sbG93aW5nIGRvbTogLS0+CiAqICAgIDx1bCBpZD0ibGlzdCI+CiAqICAgICAgPGxpPmVtaW5lbTwvbGk+CiAqICAgICAgPGxpPmRyLiBkcmU8L2xpPgogKiAgICAgIDxsaT41MCBDZW50PC9saT4KICogICAgPC91bD4KICoKICogICAgPHNjcmlwdD4KICogICAgICB3eXNpaHRtbDUuZG9tLnJlbmFtZUVsZW1lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxpc3QiKSwgIm9sIik7CiAqICAgIDwvc2NyaXB0PgogKgogKiAgICA8IS0tIFdpbGwgcmVzdWx0IGluOiAtLT4KICogICAgPG9sPgogKiAgICAgIDxsaT5lbWluZW08L2xpPgogKiAgICAgIDxsaT5kci4gZHJlPC9saT4KICogICAgICA8bGk+NTAgQ2VudDwvbGk+CiAqICAgIDwvb2w+CiAqLwp3eXNpaHRtbDUuZG9tLnJlbmFtZUVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50LCBuZXdOb2RlTmFtZSkgewogIHZhciBuZXdFbGVtZW50ID0gZWxlbWVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmV3Tm9kZU5hbWUpLAogICAgICBmaXJzdENoaWxkOwogIHdoaWxlIChmaXJzdENoaWxkID0gZWxlbWVudC5maXJzdENoaWxkKSB7CiAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGZpcnN0Q2hpbGQpOwogIH0KICB3eXNpaHRtbDUuZG9tLmNvcHlBdHRyaWJ1dGVzKFsiYWxpZ24iLCAiY2xhc3NOYW1lIl0pLmZyb20oZWxlbWVudCkudG8obmV3RWxlbWVudCk7CiAgZWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdFbGVtZW50LCBlbGVtZW50KTsKICByZXR1cm4gbmV3RWxlbWVudDsKfTsvKioKICogVGFrZXMgYW4gZWxlbWVudCwgcmVtb3ZlcyBpdCBhbmQgcmVwbGFjZXMgaXQgd2l0aCBpdCdzIGNoaWxkcwogKiAKICogQHBhcmFtIHtPYmplY3R9IG5vZGUgVGhlIG5vZGUgd2hpY2ggdG8gcmVwbGFjZSB3aXRoIGl0J3MgY2hpbGQgbm9kZXMKICogQGV4YW1wbGUKICogICAgPGRpdiBpZD0iZm9vIj4KICogICAgICA8c3Bhbj5oZWxsbzwvc3Bhbj4KICogICAgPC9kaXY+CiAqICAgIDxzY3JpcHQ+CiAqICAgICAgLy8gUmVtb3ZlICNmb28gYW5kIHJlcGxhY2Ugd2l0aCBpdCdzIGNoaWxkcmVuCiAqICAgICAgd3lzaWh0bWw1LmRvbS5yZXBsYWNlV2l0aENoaWxkTm9kZXMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvbyIpKTsKICogICAgPC9zY3JpcHQ+CiAqLwp3eXNpaHRtbDUuZG9tLnJlcGxhY2VXaXRoQ2hpbGROb2RlcyA9IGZ1bmN0aW9uKG5vZGUpIHsKICBpZiAoIW5vZGUucGFyZW50Tm9kZSkgewogICAgcmV0dXJuOwogIH0KICAKICBpZiAoIW5vZGUuZmlyc3RDaGlsZCkgewogICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpOwogICAgcmV0dXJuOwogIH0KICAKICB2YXIgZnJhZ21lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogIHdoaWxlIChub2RlLmZpcnN0Q2hpbGQpIHsKICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKG5vZGUuZmlyc3RDaGlsZCk7CiAgfQogIG5vZGUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZnJhZ21lbnQsIG5vZGUpOwogIG5vZGUgPSBmcmFnbWVudCA9IG51bGw7Cn07Ci8qKgogKiBVbndyYXBzIGFuIHVub3JkZXJlZC9vcmRlcmVkIGxpc3QKICoKICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRoZSBsaXN0IGVsZW1lbnQgd2hpY2ggc2hvdWxkIGJlIHVud3JhcHBlZAogKgogKiBAZXhhbXBsZQogKiAgICA8IS0tIEFzc3VtZSB0aGUgZm9sbG93aW5nIGRvbTogLS0+CiAqICAgIDx1bCBpZD0ibGlzdCI+CiAqICAgICAgPGxpPmVtaW5lbTwvbGk+CiAqICAgICAgPGxpPmRyLiBkcmU8L2xpPgogKiAgICAgIDxsaT41MCBDZW50PC9saT4KICogICAgPC91bD4KICoKICogICAgPHNjcmlwdD4KICogICAgICB3eXNpaHRtbDUuZG9tLnJlc29sdmVMaXN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsaXN0IikpOwogKiAgICA8L3NjcmlwdD4KICoKICogICAgPCEtLSBXaWxsIHJlc3VsdCBpbjogLS0+CiAqICAgIGVtaW5lbTxicj4KICogICAgZHIuIGRyZTxicj4KICogICAgNTAgQ2VudDxicj4KICovCihmdW5jdGlvbihkb20pIHsKICBmdW5jdGlvbiBfaXNCbG9ja0VsZW1lbnQobm9kZSkgewogICAgcmV0dXJuIGRvbS5nZXRTdHlsZSgiZGlzcGxheSIpLmZyb20obm9kZSkgPT09ICJibG9jayI7CiAgfQogIAogIGZ1bmN0aW9uIF9pc0xpbmVCcmVhayhub2RlKSB7CiAgICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gIkJSIjsKICB9CiAgCiAgZnVuY3Rpb24gX2FwcGVuZExpbmVCcmVhayhlbGVtZW50KSB7CiAgICB2YXIgbGluZUJyZWFrID0gZWxlbWVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIik7CiAgICBlbGVtZW50LmFwcGVuZENoaWxkKGxpbmVCcmVhayk7CiAgfQogIAogIGZ1bmN0aW9uIHJlc29sdmVMaXN0KGxpc3QpIHsKICAgIGlmIChsaXN0Lm5vZGVOYW1lICE9PSAiTUVOVSIgJiYgbGlzdC5ub2RlTmFtZSAhPT0gIlVMIiAmJiBsaXN0Lm5vZGVOYW1lICE9PSAiT0wiKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgdmFyIGRvYyAgICAgICAgICAgICA9IGxpc3Qub3duZXJEb2N1bWVudCwKICAgICAgICBmcmFnbWVudCAgICAgICAgPSBkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLAogICAgICAgIHByZXZpb3VzU2libGluZyA9IGxpc3QucHJldmlvdXNFbGVtZW50U2libGluZyB8fCBsaXN0LnByZXZpb3VzU2libGluZywKICAgICAgICBmaXJzdENoaWxkLAogICAgICAgIGxhc3RDaGlsZCwKICAgICAgICBpc0xhc3RDaGlsZCwKICAgICAgICBzaG91bGRBcHBlbmRMaW5lQnJlYWssCiAgICAgICAgbGlzdEl0ZW07CiAgICAKICAgIGlmIChwcmV2aW91c1NpYmxpbmcgJiYgIV9pc0Jsb2NrRWxlbWVudChwcmV2aW91c1NpYmxpbmcpKSB7CiAgICAgIF9hcHBlbmRMaW5lQnJlYWsoZnJhZ21lbnQpOwogICAgfQogICAgCiAgICB3aGlsZSAobGlzdEl0ZW0gPSBsaXN0LmZpcnN0Q2hpbGQpIHsKICAgICAgbGFzdENoaWxkID0gbGlzdEl0ZW0ubGFzdENoaWxkOwogICAgICB3aGlsZSAoZmlyc3RDaGlsZCA9IGxpc3RJdGVtLmZpcnN0Q2hpbGQpIHsKICAgICAgICBpc0xhc3RDaGlsZCAgICAgICAgICAgPSBmaXJzdENoaWxkID09PSBsYXN0Q2hpbGQ7CiAgICAgICAgLy8gVGhpcyBuZWVkcyB0byBiZSBkb25lIGJlZm9yZSBhcHBlbmRpbmcgaXQgdG8gdGhlIGZyYWdtZW50LCBhcyBpdCBvdGhlcndpc2Ugd2lsbCBsb29zZSBzdHlsZSBpbmZvcm1hdGlvbgogICAgICAgIHNob3VsZEFwcGVuZExpbmVCcmVhayA9IGlzTGFzdENoaWxkICYmICFfaXNCbG9ja0VsZW1lbnQoZmlyc3RDaGlsZCkgJiYgIV9pc0xpbmVCcmVhayhmaXJzdENoaWxkKTsKICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChmaXJzdENoaWxkKTsKICAgICAgICBpZiAoc2hvdWxkQXBwZW5kTGluZUJyZWFrKSB7CiAgICAgICAgICBfYXBwZW5kTGluZUJyZWFrKGZyYWdtZW50KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIGxpc3RJdGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobGlzdEl0ZW0pOwogICAgfQogICAgbGlzdC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmcmFnbWVudCwgbGlzdCk7CiAgfQogIAogIGRvbS5yZXNvbHZlTGlzdCA9IHJlc29sdmVMaXN0Owp9KSh3eXNpaHRtbDUuZG9tKTsvKioKICogU2FuZGJveCBmb3IgZXhlY3V0aW5nIGphdmFzY3JpcHQsIHBhcnNpbmcgY3NzIHN0eWxlcyBhbmQgZG9pbmcgZG9tIG9wZXJhdGlvbnMgaW4gYSBzZWN1cmUgd2F5CiAqCiAqIEJyb3dzZXIgQ29tcGF0aWJpbGl0eToKICogIC0gU2VjdXJlIGluIE1TSUUgNissIGJ1dCBvbmx5IHdoZW4gdGhlIHVzZXIgaGFzbid0IG1hZGUgY2hhbmdlcyB0byBoaXMgc2VjdXJpdHkgbGV2ZWwgInJlc3RyaWN0ZWQiCiAqICAtIFBhcnRpYWxseSBzZWN1cmUgaW4gb3RoZXIgYnJvd3NlcnMgKEZpcmVmb3gsIE9wZXJhLCBTYWZhcmksIENocm9tZSwgLi4uKQogKgogKiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgY2xhc3MgY2FuJ3QgYmVuZWZpdCBmcm9tIHRoZSBIVE1MNSBzYW5kYm94IGF0dHJpYnV0ZSBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOgogKiAgICAtIHNhbmRib3hpbmcgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIGlubGluZWQgY29udGVudCAoc3JjPSJqYXZhc2NyaXB0Oic8aHRtbD4uLi48L2h0bWw+JyIpCiAqICAgIC0gc2FuZGJveGluZyBvZiBwaHlzaWNhbCBkb2N1bWVudHMgY2F1c2VzIHRoYXQgdGhlIGRvbSBpc24ndCBhY2Nlc3NpYmxlIGFueW1vcmUgZnJvbSB0aGUgb3V0c2lkZSAoaWZyYW1lLmNvbnRlbnRXaW5kb3csIC4uLikKICogICAgLSBzZXR0aW5nIHRoZSAiYWxsb3ctc2FtZS1vcmlnaW4iIGZsYWcgd291bGQgZml4IHRoYXQsIGJ1dCB0aGVuIHN0aWxsIGphdmFzY3JpcHQgYW5kIGRvbSBldmVudHMgcmVmdXNlIHRvIGZpcmUKICogICAgLSB0aGVyZWZvcmUgdGhlICJhbGxvdy1zY3JpcHRzIiBmbGFnIGlzIG5lZWRlZCwgd2hpY2ggdGhlbiB3b3VsZCBkZWFjdGl2YXRlIGFueSBzZWN1cml0eSwgYXMgdGhlIGpzIGV4ZWN1dGVkIGluc2lkZSB0aGUgaWZyYW1lCiAqICAgICAgY2FuIGRvIGFueXRoaW5nIGFzIGlmIHRoZSBzYW5kYm94IGF0dHJpYnV0ZSB3YXNuJ3Qgc2V0CiAqCiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZWFkeUNhbGxiYWNrXSBNZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgc2FuZGJveCBpcyByZWFkeQogKiBAcGFyYW0ge09iamVjdH0gW2NvbmZpZ10gT3B0aW9uYWwgcGFyYW1ldGVycwogKgogKiBAZXhhbXBsZQogKiAgICBuZXcgd3lzaWh0bWw1LmRvbS5TYW5kYm94KGZ1bmN0aW9uKHNhbmRib3gpIHsKICogICAgICBzYW5kYm94LmdldFdpbmRvdygpLmRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJzxpbWcgc3JjPWZvby5naWYgb25lcnJvcj0iYWxlcnQoZG9jdW1lbnQuY29va2llKSI+JzsKICogICAgfSk7CiAqLwooZnVuY3Rpb24od3lzaWh0bWw1KSB7CiAgdmFyIC8qKgogICAgICAgKiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24KICAgICAgICovCiAgICAgIGRvYyAgICAgICAgICAgICAgICAgPSBkb2N1bWVudCwKICAgICAgLyoqCiAgICAgICAqIFByb3BlcnRpZXMgdG8gdW5zZXQvcHJvdGVjdCBvbiB0aGUgd2luZG93IG9iamVjdAogICAgICAgKi8KICAgICAgd2luZG93UHJvcGVydGllcyAgICA9IFsKICAgICAgICAicGFyZW50IiwgInRvcCIsICJvcGVuZXIiLCAiZnJhbWVFbGVtZW50IiwgImZyYW1lcyIsCiAgICAgICAgImxvY2FsU3RvcmFnZSIsICJnbG9iYWxTdG9yYWdlIiwgInNlc3Npb25TdG9yYWdlIiwgImluZGV4ZWREQiIKICAgICAgXSwKICAgICAgLyoqCiAgICAgICAqIFByb3BlcnRpZXMgb24gdGhlIHdpbmRvdyBvYmplY3Qgd2hpY2ggYXJlIHNldCB0byBhbiBlbXB0eSBmdW5jdGlvbgogICAgICAgKi8KICAgICAgd2luZG93UHJvcGVydGllczIgICA9IFsKICAgICAgICAib3BlbiIsICJjbG9zZSIsICJvcGVuRGlhbG9nIiwgInNob3dNb2RhbERpYWxvZyIsCiAgICAgICAgImFsZXJ0IiwgImNvbmZpcm0iLCAicHJvbXB0IiwKICAgICAgICAib3BlbkRhdGFiYXNlIiwgInBvc3RNZXNzYWdlIiwKICAgICAgICAiWE1MSHR0cFJlcXVlc3QiLCAiWERvbWFpblJlcXVlc3QiCiAgICAgIF0sCiAgICAgIC8qKgogICAgICAgKiBQcm9wZXJ0aWVzIHRvIHVuc2V0L3Byb3RlY3Qgb24gdGhlIGRvY3VtZW50IG9iamVjdAogICAgICAgKi8KICAgICAgZG9jdW1lbnRQcm9wZXJ0aWVzICA9IFsKICAgICAgICAicmVmZXJyZXIiLAogICAgICAgICJ3cml0ZSIsICJvcGVuIiwgImNsb3NlIgogICAgICBdOwogIAogIHd5c2lodG1sNS5kb20uU2FuZGJveCA9IEJhc2UuZXh0ZW5kKAogICAgLyoqIEBzY29wZSB3eXNpaHRtbDUuZG9tLlNhbmRib3gucHJvdG90eXBlICovIHsKCiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24ocmVhZHlDYWxsYmFjaywgY29uZmlnKSB7CiAgICAgIHRoaXMuY2FsbGJhY2sgPSByZWFkeUNhbGxiYWNrIHx8IHd5c2lodG1sNS5FTVBUWV9GVU5DVElPTjsKICAgICAgdGhpcy5jb25maWcgICA9IHd5c2lodG1sNS5sYW5nLm9iamVjdCh7fSkubWVyZ2UoY29uZmlnKS5nZXQoKTsKICAgICAgdGhpcy5pZnJhbWUgICA9IHRoaXMuX2NyZWF0ZUlmcmFtZSgpOwogICAgfSwKICAgIAogICAgaW5zZXJ0SW50bzogZnVuY3Rpb24oZWxlbWVudCkgewogICAgICBpZiAodHlwZW9mKGVsZW1lbnQpID09PSAic3RyaW5nIikgewogICAgICAgIGVsZW1lbnQgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudCk7CiAgICAgIH0KICAgICAgCiAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5pZnJhbWUpOwogICAgfSwKCiAgICBnZXRJZnJhbWU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy5pZnJhbWU7CiAgICB9LAoKICAgIGdldFdpbmRvdzogZnVuY3Rpb24oKSB7CiAgICAgIHRoaXMuX3JlYWR5RXJyb3IoKTsKICAgIH0sCgogICAgZ2V0RG9jdW1lbnQ6IGZ1bmN0aW9uKCkgewogICAgICB0aGlzLl9yZWFkeUVycm9yKCk7CiAgICB9LAoKICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgaWZyYW1lID0gdGhpcy5nZXRJZnJhbWUoKTsKICAgICAgaWZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaWZyYW1lKTsKICAgIH0sCgogICAgX3JlYWR5RXJyb3I6IGZ1bmN0aW9uKCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoInd5c2lodG1sNS5TYW5kYm94OiBTYW5kYm94IGlmcmFtZSBpc24ndCBsb2FkZWQgeWV0Iik7CiAgICB9LAoKICAgIC8qKgogICAgICogQ3JlYXRlcyB0aGUgc2FuZGJveCBpZnJhbWUKICAgICAqCiAgICAgKiBTb21lIGltcG9ydGFudCBub3RlczoKICAgICAqICAtIFdlIGNhbid0IHVzZSBIVE1MNSBzYW5kYm94IGZvciBub3c6CiAgICAgKiAgICBzZXR0aW5nIGl0IGNhdXNlcyB0aGF0IHRoZSBpZnJhbWUncyBkb20gY2FuJ3QgYmUgYWNjZXNzZWQgZnJvbSB0aGUgb3V0c2lkZQogICAgICogICAgVGhlcmVmb3JlIHdlIG5lZWQgdG8gc2V0IHRoZSAiYWxsb3ctc2FtZS1vcmlnaW4iIGZsYWcgd2hpY2ggZW5hYmxlcyBhY2Nlc3NpbmcgdGhlIGlmcmFtZSdzIGRvbQogICAgICogICAgQnV0IHRoZW4gdGhlcmUncyBhbm90aGVyIHByb2JsZW0sIERPTSBldmVudHMgKGZvY3VzLCBibHVyLCBjaGFuZ2UsIGtleXByZXNzLCAuLi4pIGFyZW4ndCBmaXJlZC4KICAgICAqICAgIEluIG9yZGVyIHRvIG1ha2UgdGhpcyBoYXBwZW4gd2UgbmVlZCB0byBzZXQgdGhlICJhbGxvdy1zY3JpcHRzIiBmbGFnLgogICAgICogICAgQSBjb21iaW5hdGlvbiBvZiBhbGxvdy1zY3JpcHRzIGFuZCBhbGxvdy1zYW1lLW9yaWdpbiBpcyBhbG1vc3QgdGhlIHNhbWUgYXMgc2V0dGluZyBubyBzYW5kYm94IGF0dHJpYnV0ZSBhdCBhbGwuCiAgICAgKiAgLSBDaHJvbWUgJiBTYWZhcmksIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHNhbmRib3hpbmcgY29ycmVjdGx5IHdoZW4gdGhlIGlmcmFtZSdzIGh0bWwgaXMgaW5saW5lZCAobm8gcGh5c2ljYWwgZG9jdW1lbnQpCiAgICAgKiAgLSBJRSBuZWVkcyB0byBoYXZlIHRoZSBzZWN1cml0eT0icmVzdHJpY3RlZCIgYXR0cmlidXRlIHNldCBiZWZvcmUgdGhlIGlmcmFtZSBpcyAKICAgICAqICAgIGluc2VydGVkIGludG8gdGhlIGRvbSB0cmVlCiAgICAgKiAgLSBCZWxpZXZlIGl0IG9yIG5vdCBidXQgaW4gSUUgInNlY3VyaXR5IiBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSBpcyBmYWxzZSwgZXZlbgogICAgICogICAgdGhvdWdoIGl0IHN1cHBvcnRzIGl0CiAgICAgKiAgLSBXaGVuIGFuIGlmcmFtZSBoYXMgc2VjdXJpdHk9InJlc3RyaWN0ZWQiLCBpbiBJRSBldmFsKCkgJiBleGVjU2NyaXB0KCkgZG9uJ3Qgd29yayBhbnltb3JlCiAgICAgKiAgLSBJRSBkb2Vzbid0IGZpcmUgdGhlIG9ubG9hZCBldmVudCB3aGVuIHRoZSBjb250ZW50IGlzIGlubGluZWQgaW4gdGhlIHNyYyBhdHRyaWJ1dGUsIHRoZXJlZm9yZSB3ZSByZWx5CiAgICAgKiAgICBvbiB0aGUgb25yZWFkeXN0YXRlY2hhbmdlIGV2ZW50CiAgICAgKi8KICAgIF9jcmVhdGVJZnJhbWU6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGhhdCAgID0gdGhpcywKICAgICAgICAgIGlmcmFtZSA9IGRvYy5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKICAgICAgaWZyYW1lLmNsYXNzTmFtZSA9ICJ3eXNpaHRtbDUtc2FuZGJveCI7CiAgICAgIHd5c2lodG1sNS5kb20uc2V0QXR0cmlidXRlcyh7CiAgICAgICAgInNlY3VyaXR5IjogICAgICAgICAgICJyZXN0cmljdGVkIiwKICAgICAgICAiYWxsb3d0cmFuc3BhcmVuY3kiOiAgInRydWUiLAogICAgICAgICJmcmFtZWJvcmRlciI6ICAgICAgICAwLAogICAgICAgICJ3aWR0aCI6ICAgICAgICAgICAgICAwLAogICAgICAgICJoZWlnaHQiOiAgICAgICAgICAgICAwLAogICAgICAgICJtYXJnaW53aWR0aCI6ICAgICAgICAwLAogICAgICAgICJtYXJnaW5oZWlnaHQiOiAgICAgICAwCiAgICAgIH0pLm9uKGlmcmFtZSk7CgogICAgICAvLyBTZXR0aW5nIHRoZSBzcmMgbGlrZSB0aGlzIHByZXZlbnRzIHNzbCB3YXJuaW5ncyBpbiBJRTYKICAgICAgaWYgKHd5c2lodG1sNS5icm93c2VyLnRocm93c01peGVkQ29udGVudFdhcm5pbmdXaGVuSWZyYW1lU3JjSXNFbXB0eSgpKSB7CiAgICAgICAgaWZyYW1lLnNyYyA9ICJqYXZhc2NyaXB0Oic8aHRtbD48L2h0bWw+JyI7CiAgICAgIH0KCiAgICAgIGlmcmFtZS5vbmxvYWQgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZnJhbWUub25yZWFkeXN0YXRlY2hhbmdlID0gaWZyYW1lLm9ubG9hZCA9IG51bGw7CiAgICAgICAgdGhhdC5fb25Mb2FkSWZyYW1lKGlmcmFtZSk7CiAgICAgIH07CgogICAgICBpZnJhbWUub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoaWZyYW1lLnJlYWR5U3RhdGUpKSB7CiAgICAgICAgICBpZnJhbWUub25yZWFkeXN0YXRlY2hhbmdlID0gaWZyYW1lLm9ubG9hZCA9IG51bGw7CiAgICAgICAgICB0aGF0Ll9vbkxvYWRJZnJhbWUoaWZyYW1lKTsKICAgICAgICB9CiAgICAgIH07CgogICAgICByZXR1cm4gaWZyYW1lOwogICAgfSwKCiAgICAvKioKICAgICAqIENhbGxiYWNrIGZvciB3aGVuIHRoZSBpZnJhbWUgaGFzIGZpbmlzaGVkIGxvYWRpbmcKICAgICAqLwogICAgX29uTG9hZElmcmFtZTogZnVuY3Rpb24oaWZyYW1lKSB7CiAgICAgIC8vIGRvbid0IHJlc3VtZSB3aGVuIHRoZSBpZnJhbWUgZ290IHVubG9hZGVkIChlZy4gYnkgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgZG9tKQogICAgICBpZiAoIXd5c2lodG1sNS5kb20uY29udGFpbnMoZG9jLmRvY3VtZW50RWxlbWVudCwgaWZyYW1lKSkgewogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgdmFyIHRoYXQgICAgICAgICAgID0gdGhpcywKICAgICAgICAgIGlmcmFtZVdpbmRvdyAgID0gaWZyYW1lLmNvbnRlbnRXaW5kb3csCiAgICAgICAgICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50LAogICAgICAgICAgY2hhcnNldCAgICAgICAgPSBkb2MuY2hhcmFjdGVyU2V0IHx8IGRvYy5jaGFyc2V0IHx8ICJ1dGYtOCIsCiAgICAgICAgICBzYW5kYm94SHRtbCAgICA9IHRoaXMuX2dldEh0bWwoewogICAgICAgICAgICBjaGFyc2V0OiAgICAgIGNoYXJzZXQsCiAgICAgICAgICAgIHN0eWxlc2hlZXRzOiAgdGhpcy5jb25maWcuc3R5bGVzaGVldHMKICAgICAgICAgIH0pOwoKICAgICAgLy8gQ3JlYXRlIHRoZSBiYXNpYyBkb20gdHJlZSBpbmNsdWRpbmcgcHJvcGVyIERPQ1RZUEUgYW5kIGNoYXJzZXQKICAgICAgaWZyYW1lRG9jdW1lbnQub3BlbigidGV4dC9odG1sIiwgInJlcGxhY2UiKTsKICAgICAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2FuZGJveEh0bWwpOwogICAgICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpOwoKICAgICAgdGhpcy5nZXRXaW5kb3cgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGlmcmFtZS5jb250ZW50V2luZG93OyB9OwogICAgICB0aGlzLmdldERvY3VtZW50ID0gZnVuY3Rpb24oKSB7IHJldHVybiBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDsgfTsKCiAgICAgIC8vIENhdGNoIGpzIGVycm9ycyBhbmQgcGFzcyB0aGVtIHRvIHRoZSBwYXJlbnQncyBvbmVycm9yIGV2ZW50CiAgICAgIC8vIGFkZEV2ZW50TGlzdGVuZXIoImVycm9yIikgZG9lc24ndCB3b3JrIHByb3Blcmx5IGluIHNvbWUgYnJvd3NlcnMKICAgICAgLy8gVE9ETzogYXBwYXJlbnRseSB0aGlzIGRvZXNuJ3Qgd29yayBpbiBJRTkhCiAgICAgIGlmcmFtZVdpbmRvdy5vbmVycm9yID0gZnVuY3Rpb24oZXJyb3JNZXNzYWdlLCBmaWxlTmFtZSwgbGluZU51bWJlcikgewogICAgICAgIHRocm93IG5ldyBFcnJvcigid3lzaWh0bWw1LlNhbmRib3g6ICIgKyBlcnJvck1lc3NhZ2UsIGZpbGVOYW1lLCBsaW5lTnVtYmVyKTsKICAgICAgfTsKCiAgICAgIGlmICghd3lzaWh0bWw1LmJyb3dzZXIuc3VwcG9ydHNTYW5kYm94ZWRJZnJhbWVzKCkpIHsKICAgICAgICAvLyBVbnNldCBhIGJ1bmNoIG9mIHNlbnNpdGl2ZSB2YXJpYWJsZXMKICAgICAgICAvLyBQbGVhc2Ugbm90ZTogVGhpcyBpc24ndCBoYWNrIHNhZmUhICAKICAgICAgICAvLyBJdCBtb3JlIG9yIGxlc3MganVzdCB0YWtlcyBjYXJlIG9mIGJhc2ljIGF0dGFja3MgYW5kIHByZXZlbnRzIGFjY2lkZW50YWwgdGhlZnQgb2Ygc2Vuc2l0aXZlIGluZm9ybWF0aW9uCiAgICAgICAgLy8gSUUgaXMgc2VjdXJlIHRob3VnaCwgd2hpY2ggaXMgdGhlIG1vc3QgaW1wb3J0YW50IHRoaW5nLCBzaW5jZSBJRSBpcyB0aGUgb25seSBicm93c2VyLCB3aG8KICAgICAgICAvLyB0YWtlcyBvdmVyIHNjcmlwdHMgJiBzdHlsZXMgaW50byBjb250ZW50RWRpdGFibGUgZWxlbWVudHMgd2hlbiBjb3BpZWQgZnJvbSBleHRlcm5hbCB3ZWJzaXRlcwogICAgICAgIC8vIG9yIGFwcGxpY2F0aW9ucyAoTWljcm9zb2Z0IFdvcmQsIC4uLikKICAgICAgICB2YXIgaSwgbGVuZ3RoOwogICAgICAgIGZvciAoaT0wLCBsZW5ndGg9d2luZG93UHJvcGVydGllcy5sZW5ndGg7IGk8bGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHRoaXMuX3Vuc2V0KGlmcmFtZVdpbmRvdywgd2luZG93UHJvcGVydGllc1tpXSk7CiAgICAgICAgfQogICAgICAgIGZvciAoaT0wLCBsZW5ndGg9d2luZG93UHJvcGVydGllczIubGVuZ3RoOyBpPGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB0aGlzLl91bnNldChpZnJhbWVXaW5kb3csIHdpbmRvd1Byb3BlcnRpZXMyW2ldLCB3eXNpaHRtbDUuRU1QVFlfRlVOQ1RJT04pOwogICAgICAgIH0KICAgICAgICBmb3IgKGk9MCwgbGVuZ3RoPWRvY3VtZW50UHJvcGVydGllcy5sZW5ndGg7IGk8bGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHRoaXMuX3Vuc2V0KGlmcmFtZURvY3VtZW50LCBkb2N1bWVudFByb3BlcnRpZXNbaV0pOwogICAgICAgIH0KICAgICAgICAvLyBUaGlzIGRvZXNuJ3Qgd29yayBpbiBTYWZhcmkgNSAKICAgICAgICAvLyBTZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy85OTI0NjEvaXMtaXQtcG9zc2libGUtdG8tb3ZlcnJpZGUtZG9jdW1lbnQtY29va2llLWluLXdlYmtpdAogICAgICAgIHRoaXMuX3Vuc2V0KGlmcmFtZURvY3VtZW50LCAiY29va2llIiwgIiIsIHRydWUpOwogICAgICB9CgogICAgICB0aGlzLmxvYWRlZCA9IHRydWU7CgogICAgICAvLyBUcmlnZ2VyIHRoZSBjYWxsYmFjawogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0aGF0LmNhbGxiYWNrKHRoYXQpOyB9LCAwKTsKICAgIH0sCgogICAgX2dldEh0bWw6IGZ1bmN0aW9uKHRlbXBsYXRlVmFycykgewogICAgICB2YXIgc3R5bGVzaGVldHMgPSB0ZW1wbGF0ZVZhcnMuc3R5bGVzaGVldHMsCiAgICAgICAgICBodG1sICAgICAgICA9ICIiLAogICAgICAgICAgaSAgICAgICAgICAgPSAwLAogICAgICAgICAgbGVuZ3RoOwogICAgICBzdHlsZXNoZWV0cyA9IHR5cGVvZihzdHlsZXNoZWV0cykgPT09ICJzdHJpbmciID8gW3N0eWxlc2hlZXRzXSA6IHN0eWxlc2hlZXRzOwogICAgICBpZiAoc3R5bGVzaGVldHMpIHsKICAgICAgICBsZW5ndGggPSBzdHlsZXNoZWV0cy5sZW5ndGg7CiAgICAgICAgZm9yICg7IGk8bGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGh0bWwgKz0gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iJyArIHN0eWxlc2hlZXRzW2ldICsgJyI+JzsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGVtcGxhdGVWYXJzLnN0eWxlc2hlZXRzID0gaHRtbDsKCiAgICAgIHJldHVybiB3eXNpaHRtbDUubGFuZy5zdHJpbmcoCiAgICAgICAgJzwhRE9DVFlQRSBodG1sPjxodG1sPjxoZWFkPicKICAgICAgICArICc8bWV0YSBjaGFyc2V0PSIje2NoYXJzZXR9Ij4je3N0eWxlc2hlZXRzfTwvaGVhZD4nCiAgICAgICAgKyAnPGJvZHk+PC9ib2R5PjwvaHRtbD4nCiAgICAgICkuaW50ZXJwb2xhdGUodGVtcGxhdGVWYXJzKTsKICAgIH0sCgogICAgLyoqCiAgICAgKiBNZXRob2QgdG8gdW5zZXQvb3ZlcnJpZGUgZXhpc3RpbmcgdmFyaWFibGVzCiAgICAgKiBAZXhhbXBsZQogICAgICogICAgLy8gTWFrZSBjb29raWUgdW5yZWFkYWJsZSBhbmQgdW53cml0YWJsZQogICAgICogICAgdGhpcy5fdW5zZXQoZG9jdW1lbnQsICJjb29raWUiLCAiIiwgdHJ1ZSk7CiAgICAgKi8KICAgIF91bnNldDogZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIHNldHRlcikgewogICAgICB0cnkgeyBvYmplY3RbcHJvcGVydHldID0gdmFsdWU7IH0gY2F0Y2goZSkge30KCiAgICAgIHRyeSB7IG9iamVjdC5fX2RlZmluZUdldHRlcl9fKHByb3BlcnR5LCBmdW5jdGlvbigpIHsgcmV0dXJuIHZhbHVlOyB9KTsgfSBjYXRjaChlKSB7fQogICAgICBpZiAoc2V0dGVyKSB7CiAgICAgICAgdHJ5IHsgb2JqZWN0Ll9fZGVmaW5lU2V0dGVyX18ocHJvcGVydHksIGZ1bmN0aW9uKCkge30pOyB9IGNhdGNoKGUpIHt9CiAgICAgIH0KCiAgICAgIGlmICghd3lzaWh0bWw1LmJyb3dzZXIuY3Jhc2hlc1doZW5EZWZpbmVQcm9wZXJ0eShwcm9wZXJ0eSkpIHsKICAgICAgICB0cnkgewogICAgICAgICAgdmFyIGNvbmZpZyA9IHsKICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHZhbHVlOyB9CiAgICAgICAgICB9OwogICAgICAgICAgaWYgKHNldHRlcikgewogICAgICAgICAgICBjb25maWcuc2V0ID0gZnVuY3Rpb24oKSB7fTsKICAgICAgICAgIH0KICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBjb25maWcpOwogICAgICAgIH0gY2F0Y2goZSkge30KICAgICAgfQogICAgfQogIH0pOwp9KSh3eXNpaHRtbDUpOwooZnVuY3Rpb24oKSB7CiAgdmFyIG1hcHBpbmcgPSB7CiAgICAiY2xhc3NOYW1lIjogImNsYXNzIgogIH07CiAgd3lzaWh0bWw1LmRvbS5zZXRBdHRyaWJ1dGVzID0gZnVuY3Rpb24oYXR0cmlidXRlcykgewogICAgcmV0dXJuIHsKICAgICAgb246IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgICAgICBmb3IgKHZhciBpIGluIGF0dHJpYnV0ZXMpIHsKICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG1hcHBpbmdbaV0gfHwgaSwgYXR0cmlidXRlc1tpXSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfTsKfSkoKTt3eXNpaHRtbDUuZG9tLnNldFN0eWxlcyA9IGZ1bmN0aW9uKHN0eWxlcykgewogIHJldHVybiB7CiAgICBvbjogZnVuY3Rpb24oZWxlbWVudCkgewogICAgICB2YXIgc3R5bGUgPSBlbGVtZW50LnN0eWxlOwogICAgICBpZiAodHlwZW9mKHN0eWxlcykgPT09ICJzdHJpbmciKSB7CiAgICAgICAgc3R5bGUuY3NzVGV4dCArPSAiOyIgKyBzdHlsZXM7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGZvciAodmFyIGkgaW4gc3R5bGVzKSB7CiAgICAgICAgaWYgKGkgPT09ICJmbG9hdCIpIHsKICAgICAgICAgIHN0eWxlLmNzc0Zsb2F0ID0gc3R5bGVzW2ldOwogICAgICAgICAgc3R5bGUuc3R5bGVGbG9hdCA9IHN0eWxlc1tpXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3R5bGVbaV0gPSBzdHlsZXNbaV07CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfTsKfTsvKioKICogU2ltdWxhdGUgSFRNTDUgcGxhY2Vob2xkZXIgYXR0cmlidXRlCiAqCiAqIE5lZWRlZCBzaW5jZQogKiAgICAtIGRpdltjb250ZW50RWRpdGFibGVdIGVsZW1lbnRzIGRvbid0IHN1cHBvcnQgaXQKICogICAgLSBvbGRlciBicm93c2VycyAoc3VjaCBhcyBJRTggYW5kIEZpcmVmb3ggMy42KSBkb24ndCBzdXBwb3J0IGl0IGF0IGFsbAogKgogKiBAcGFyYW0ge09iamVjdH0gcGFyZW50IEluc3RhbmNlIG9mIG1haW4gd3lzaWh0bWw1LkVkaXRvciBjbGFzcwogKiBAcGFyYW0ge0VsZW1lbnR9IHZpZXcgSW5zdGFuY2Ugb2Ygd3lzaWh0bWw1LnZpZXdzLiogY2xhc3MKICogQHBhcmFtIHtTdHJpbmd9IHBsYWNlaG9sZGVyVGV4dAogKgogKiBAZXhhbXBsZQogKiAgICB3eXNpaHRtbC5kb20uc2ltdWxhdGVQbGFjZWhvbGRlcih0aGlzLCBjb21wb3NlciwgIkZvb2JhciIpOwogKi8KKGZ1bmN0aW9uKGRvbSkgewogIGRvbS5zaW11bGF0ZVBsYWNlaG9sZGVyID0gZnVuY3Rpb24oZWRpdG9yLCB2aWV3LCBwbGFjZWhvbGRlclRleHQpIHsKICAgIHZhciBDTEFTU19OQU1FID0gInBsYWNlaG9sZGVyIiwKICAgICAgICB1bnNldCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgaWYgKHZpZXcuaGFzUGxhY2Vob2xkZXJTZXQoKSkgewogICAgICAgICAgICB2aWV3LmNsZWFyKCk7CiAgICAgICAgICB9CiAgICAgICAgICBkb20ucmVtb3ZlQ2xhc3Modmlldy5lbGVtZW50LCBDTEFTU19OQU1FKTsKICAgICAgICB9LAogICAgICAgIHNldCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgaWYgKHZpZXcuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZpZXcuc2V0VmFsdWUocGxhY2Vob2xkZXJUZXh0KTsKICAgICAgICAgICAgZG9tLmFkZENsYXNzKHZpZXcuZWxlbWVudCwgQ0xBU1NfTkFNRSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICBlZGl0b3IKICAgICAgLm9ic2VydmUoInNldF9wbGFjZWhvbGRlciIsIHNldCkKICAgICAgLm9ic2VydmUoInVuc2V0X3BsYWNlaG9sZGVyIiwgdW5zZXQpCiAgICAgIC5vYnNlcnZlKCJmb2N1czpjb21wb3NlciIsIHVuc2V0KQogICAgICAub2JzZXJ2ZSgicGFzdGU6Y29tcG9zZXIiLCB1bnNldCkKICAgICAgLm9ic2VydmUoImJsdXI6Y29tcG9zZXIiLCBzZXQpOwoKICAgIHNldCgpOwogIH07Cn0pKHd5c2lodG1sNS5kb20pOwooZnVuY3Rpb24oZG9tKSB7CiAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKICBpZiAoInRleHRDb250ZW50IiBpbiBkb2N1bWVudEVsZW1lbnQpIHsKICAgIGRvbS5zZXRUZXh0Q29udGVudCA9IGZ1bmN0aW9uKGVsZW1lbnQsIHRleHQpIHsKICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9IHRleHQ7CiAgICB9OwoKICAgIGRvbS5nZXRUZXh0Q29udGVudCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQudGV4dENvbnRlbnQ7CiAgICB9OwogIH0gZWxzZSBpZiAoImlubmVyVGV4dCIgaW4gZG9jdW1lbnRFbGVtZW50KSB7CiAgICBkb20uc2V0VGV4dENvbnRlbnQgPSBmdW5jdGlvbihlbGVtZW50LCB0ZXh0KSB7CiAgICAgIGVsZW1lbnQuaW5uZXJUZXh0ID0gdGV4dDsKICAgIH07CgogICAgZG9tLmdldFRleHRDb250ZW50ID0gZnVuY3Rpb24oZWxlbWVudCkgewogICAgICByZXR1cm4gZWxlbWVudC5pbm5lclRleHQ7CiAgICB9OwogIH0gZWxzZSB7CiAgICBkb20uc2V0VGV4dENvbnRlbnQgPSBmdW5jdGlvbihlbGVtZW50LCB0ZXh0KSB7CiAgICAgIGVsZW1lbnQubm9kZVZhbHVlID0gdGV4dDsKICAgIH07CgogICAgZG9tLmdldFRleHRDb250ZW50ID0gZnVuY3Rpb24oZWxlbWVudCkgewogICAgICByZXR1cm4gZWxlbWVudC5ub2RlVmFsdWU7CiAgICB9OwogIH0KfSkod3lzaWh0bWw1LmRvbSk7CgovKioKICogRml4IG1vc3QgY29tbW9uIGh0bWwgZm9ybWF0dGluZyBtaXNiZWhhdmlvcnMgb2YgYnJvd3NlcnMgaW1wbGVtZW50YXRpb24gd2hlbiBpbnNlcnRpbmcKICogY29udGVudCB2aWEgY29weSAmIHBhc3RlIGNvbnRlbnRFZGl0YWJsZQogKgogKiBAYXV0aG9yIENocmlzdG9waGVyIEJsdW0KICovCnd5c2lodG1sNS5xdWlya3MuY2xlYW5QYXN0ZWRIVE1MID0gKGZ1bmN0aW9uKCkgewogIC8vIFRPRE86IFdlIHByb2JhYmx5IG5lZWQgbW9yZSBydWxlcyBoZXJlCiAgdmFyIGRlZmF1bHRSdWxlcyA9IHsKICAgIC8vIFdoZW4gcGFzdGluZyB1bmRlcmxpbmVkIGxpbmtzIDxhPiBpbnRvIGEgY29udGVudEVkaXRhYmxlLCBJRSB0aGlua3MsIGl0IGhhcyB0byBpbnNlcnQgPHU+IHRvIGtlZXAgdGhlIHN0eWxpbmcKICAgICJhIHUiOiB3eXNpaHRtbDUuZG9tLnJlcGxhY2VXaXRoQ2hpbGROb2RlcwogIH07CiAgCiAgZnVuY3Rpb24gY2xlYW5QYXN0ZWRIVE1MKGVsZW1lbnRPckh0bWwsIHJ1bGVzLCBjb250ZXh0KSB7CiAgICBydWxlcyAgID0gcnVsZXMgfHwgZGVmYXVsdFJ1bGVzOwogICAgY29udGV4dCA9IGNvbnRleHQgfHwgZWxlbWVudE9ySHRtbC5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50OwogICAgCiAgICB2YXIgZWxlbWVudCwKICAgICAgICBpc1N0cmluZyA9IHR5cGVvZihlbGVtZW50T3JIdG1sKSA9PT0gInN0cmluZyIsCiAgICAgICAgbWV0aG9kLAogICAgICAgIG1hdGNoZXMsCiAgICAgICAgbWF0Y2hlc0xlbmd0aCwKICAgICAgICBpLAogICAgICAgIGogPSAwOwogICAgaWYgKGlzU3RyaW5nKSB7CiAgICAgIGVsZW1lbnQgPSB3eXNpaHRtbDUuZG9tLmdldEFzRG9tKGVsZW1lbnRPckh0bWwsIGNvbnRleHQpOwogICAgfSBlbHNlIHsKICAgICAgZWxlbWVudCA9IGVsZW1lbnRPckh0bWw7CiAgICB9CiAgICAKICAgIGZvciAoaSBpbiBydWxlcykgewogICAgICBtYXRjaGVzICAgICAgID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGkpOwogICAgICBtZXRob2QgICAgICAgID0gcnVsZXNbaV07CiAgICAgIG1hdGNoZXNMZW5ndGggPSBtYXRjaGVzLmxlbmd0aDsKICAgICAgZm9yICg7IGo8bWF0Y2hlc0xlbmd0aDsgaisrKSB7CiAgICAgICAgbWV0aG9kKG1hdGNoZXNbal0pOwogICAgICB9CiAgICB9CiAgICAKICAgIG1hdGNoZXMgPSBlbGVtZW50T3JIdG1sID0gcnVsZXMgPSBudWxsOwogICAgCiAgICByZXR1cm4gaXNTdHJpbmcgPyBlbGVtZW50LmlubmVySFRNTCA6IGVsZW1lbnQ7CiAgfQogIAogIHJldHVybiBjbGVhblBhc3RlZEhUTUw7Cn0pKCk7LyoqCiAqIElFIGFuZCBPcGVyYSBsZWF2ZSBhbiBlbXB0eSBwYXJhZ3JhcGggaW4gdGhlIGNvbnRlbnRFZGl0YWJsZSBlbGVtZW50IGFmdGVyIGNsZWFyaW5nIGl0CiAqCiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZW50RWRpdGFibGVFbGVtZW50IFRoZSBjb250ZW50RWRpdGFibGUgZWxlbWVudCB0byBvYnNlcnZlIGZvciBjbGVhcmluZyBldmVudHMKICogQGV4YXBsZQogKiAgICB3eXNpaHRtbDUucXVpcmtzLmVuc3VyZVByb3BlckNsZWFyaW5nKG15Q29udGVudEVkaXRhYmxlRWxlbWVudCk7CiAqLwooZnVuY3Rpb24od3lzaWh0bWw1KSB7CiAgdmFyIGRvbSA9IHd5c2lodG1sNS5kb207CiAgCiAgd3lzaWh0bWw1LnF1aXJrcy5lbnN1cmVQcm9wZXJDbGVhcmluZyA9IChmdW5jdGlvbigpIHsKICAgIHZhciBjbGVhcklmTmVjZXNzYXJ5ID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzOwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBpbm5lckhUTUwgPSBlbGVtZW50LmlubmVySFRNTC50b0xvd2VyQ2FzZSgpOwogICAgICAgIGlmIChpbm5lckhUTUwgPT0gIjxwPiZuYnNwOzwvcD4iIHx8CiAgICAgICAgICAgIGlubmVySFRNTCA9PSAiPHA+Jm5ic3A7PC9wPjxwPiZuYnNwOzwvcD4iKSB7CiAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9ICIiOwogICAgICAgIH0KICAgICAgfSwgMCk7CiAgICB9OwoKICAgIHJldHVybiBmdW5jdGlvbihjb21wb3NlcikgewogICAgICBkb20ub2JzZXJ2ZShjb21wb3Nlci5lbGVtZW50LCBbImN1dCIsICJrZXlkb3duIl0sIGNsZWFySWZOZWNlc3NhcnkpOwogICAgfTsKICB9KSgpOwoKCgogIC8qKgogICAqIEluIE9wZXJhIHdoZW4gdGhlIGNhcmV0IGlzIGluIHRoZSBmaXJzdCBhbmQgb25seSBpdGVtIG9mIGEgbGlzdCAoPHVsPjxsaT58PC9saT48L3VsPikgYW5kIHRoZSBsaXN0IGlzIHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgY29udGVudEVkaXRhYmxlIGVsZW1lbnQsIGl0J3MgaW1wb3NzaWJsZSB0byBkZWxldGUgdGhlIGxpc3QgYnkgaGl0dGluZyBiYWNrc3BhY2UKICAgKgogICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZW50RWRpdGFibGVFbGVtZW50IFRoZSBjb250ZW50RWRpdGFibGUgZWxlbWVudCB0byBvYnNlcnZlIGZvciBjbGVhcmluZyBldmVudHMKICAgKiBAZXhhcGxlCiAgICogICAgd3lzaWh0bWw1LnF1aXJrcy5lbnN1cmVQcm9wZXJDbGVhcmluZyhteUNvbnRlbnRFZGl0YWJsZUVsZW1lbnQpOwogICAqLwogIHd5c2lodG1sNS5xdWlya3MuZW5zdXJlUHJvcGVyQ2xlYXJpbmdPZkxpc3RzID0gKGZ1bmN0aW9uKCkgewogICAgdmFyIEVMRU1FTlRTX1RIQVRfQ09OVEFJTl9MSSA9IFsiT0wiLCAiVUwiLCAiTUVOVSJdOwoKICAgIHZhciBjbGVhcklmTmVjZXNzYXJ5ID0gZnVuY3Rpb24oZWxlbWVudCwgY29udGVudEVkaXRhYmxlRWxlbWVudCkgewogICAgICBpZiAoIWNvbnRlbnRFZGl0YWJsZUVsZW1lbnQuZmlyc3RDaGlsZCB8fCAhd3lzaWh0bWw1LmxhbmcuYXJyYXkoRUxFTUVOVFNfVEhBVF9DT05UQUlOX0xJKS5jb250YWlucyhjb250ZW50RWRpdGFibGVFbGVtZW50LmZpcnN0Q2hpbGQubm9kZU5hbWUpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICB2YXIgbGlzdCA9IGRvbS5nZXRQYXJlbnRFbGVtZW50KGVsZW1lbnQsIHsgbm9kZU5hbWU6IEVMRU1FTlRTX1RIQVRfQ09OVEFJTl9MSSB9KTsKICAgICAgaWYgKCFsaXN0KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICB2YXIgbGlzdElzRmlyc3RDaGlsZE9mQ29udGVudEVkaXRhYmxlID0gbGlzdCA9PSBjb250ZW50RWRpdGFibGVFbGVtZW50LmZpcnN0Q2hpbGQ7CiAgICAgIGlmICghbGlzdElzRmlyc3RDaGlsZE9mQ29udGVudEVkaXRhYmxlKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICB2YXIgaGFzT25seU9uZUxpc3RJdGVtID0gbGlzdC5jaGlsZE5vZGVzLmxlbmd0aCA8PSAxOwogICAgICBpZiAoIWhhc09ubHlPbmVMaXN0SXRlbSkgewogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgdmFyIG9ubHlMaXN0SXRlbUlzRW1wdHkgPSBsaXN0LmZpcnN0Q2hpbGQgPyBsaXN0LmZpcnN0Q2hpbGQuaW5uZXJIVE1MID09PSAiIiA6IHRydWU7CiAgICAgIGlmICghb25seUxpc3RJdGVtSXNFbXB0eSkgewogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgbGlzdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGxpc3QpOwogICAgfTsKCiAgICByZXR1cm4gZnVuY3Rpb24oY29tcG9zZXIpIHsKICAgICAgZG9tLm9ic2VydmUoY29tcG9zZXIuZWxlbWVudCwgImtleWRvd24iLCBmdW5jdGlvbihldmVudCkgewogICAgICAgIGlmIChldmVudC5rZXlDb2RlICE9PSB3eXNpaHRtbDUuQkFDS1NQQUNFX0tFWSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVsZW1lbnQgPSBjb21wb3Nlci5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKCk7CiAgICAgICAgY2xlYXJJZk5lY2Vzc2FyeShlbGVtZW50LCBjb21wb3Nlci5lbGVtZW50KTsKICAgICAgfSk7CiAgICB9OwogIH0pKCk7Cgp9KSh3eXNpaHRtbDUpOwovLyBTZWUgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY0Mzk4Ci8vCi8vIEluIEZpcmVmb3ggdGhpczoKLy8gICAgICB2YXIgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwovLyAgICAgIGQuaW5uZXJIVE1MID0nPGEgaHJlZj0ifiI+PC9hPic7Ci8vICAgICAgZC5pbm5lckhUTUw7Ci8vIHdpbGwgcmVzdWx0IGluOgovLyAgICAgIDxhIGhyZWY9IiU3RSI+PC9hPgovLyB3aGljaCBpcyB3cm9uZwooZnVuY3Rpb24od3lzaWh0bWw1KSB7CiAgdmFyIFRJTERFX0VTQ0FQRUQgPSAiJTdFIjsKICB3eXNpaHRtbDUucXVpcmtzLmdldENvcnJlY3RJbm5lckhUTUwgPSBmdW5jdGlvbihlbGVtZW50KSB7CiAgICB2YXIgaW5uZXJIVE1MID0gZWxlbWVudC5pbm5lckhUTUw7CiAgICBpZiAoaW5uZXJIVE1MLmluZGV4T2YoVElMREVfRVNDQVBFRCkgPT09IC0xKSB7CiAgICAgIHJldHVybiBpbm5lckhUTUw7CiAgICB9CiAgICAKICAgIHZhciBlbGVtZW50c1dpdGhUaWxkZSA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2hyZWYqPSd+J10sIFtzcmMqPSd+J10iKSwKICAgICAgICB1cmwsCiAgICAgICAgdXJsVG9TZWFyY2gsCiAgICAgICAgbGVuZ3RoLAogICAgICAgIGk7CiAgICBmb3IgKGk9MCwgbGVuZ3RoPWVsZW1lbnRzV2l0aFRpbGRlLmxlbmd0aDsgaTxsZW5ndGg7IGkrKykgewogICAgICB1cmwgICAgICAgICA9IGVsZW1lbnRzV2l0aFRpbGRlW2ldLmhyZWYgfHwgZWxlbWVudHNXaXRoVGlsZGVbaV0uc3JjOwogICAgICB1cmxUb1NlYXJjaCA9IHd5c2lodG1sNS5sYW5nLnN0cmluZyh1cmwpLnJlcGxhY2UoIn4iKS5ieShUSUxERV9FU0NBUEVEKTsKICAgICAgaW5uZXJIVE1MICAgPSB3eXNpaHRtbDUubGFuZy5zdHJpbmcoaW5uZXJIVE1MKS5yZXBsYWNlKHVybFRvU2VhcmNoKS5ieSh1cmwpOwogICAgfQogICAgcmV0dXJuIGlubmVySFRNTDsKICB9Owp9KSh3eXNpaHRtbDUpOy8qKgogKiBTb21lIGJyb3dzZXJzIGRvbid0IGluc2VydCBsaW5lIGJyZWFrcyB3aGVuIGhpdHRpbmcgcmV0dXJuIGluIGEgY29udGVudEVkaXRhYmxlIGVsZW1lbnQKICogICAgLSBPcGVyYSAmIElFIGluc2VydCBuZXcgPHA+IG9uIHJldHVybgogKiAgICAtIENocm9tZSAmIFNhZmFyaSBpbnNlcnQgbmV3IDxkaXY+IG9uIHJldHVybgogKiAgICAtIEZpcmVmb3ggaW5zZXJ0cyA8YnI+IG9uIHJldHVybiAoeWlwcGllISkKICoKICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50CiAqCiAqIEBleGFtcGxlCiAqICAgIHd5c2lodG1sNS5xdWlya3MuaW5zZXJ0TGluZUJyZWFrT25SZXR1cm4oZWxlbWVudCk7CiAqLwooZnVuY3Rpb24od3lzaWh0bWw1KSB7CiAgdmFyIGRvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHd5c2lodG1sNS5kb20sCiAgICAgIFVTRV9OQVRJVkVfTElORV9CUkVBS19XSEVOX0NBUkVUX0lOU0lERV9UQUdTICA9IFsiTEkiLCAiUCIsICJIMSIsICJIMiIsICJIMyIsICJINCIsICJINSIsICJINiJdLAogICAgICBMSVNUX1RBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBbIlVMIiwgIk9MIiwgIk1FTlUiXTsKICAKICB3eXNpaHRtbDUucXVpcmtzLmluc2VydExpbmVCcmVha09uUmV0dXJuID0gZnVuY3Rpb24oY29tcG9zZXIpIHsKICAgIGZ1bmN0aW9uIHVud3JhcChzZWxlY3RlZE5vZGUpIHsKICAgICAgdmFyIHBhcmVudEVsZW1lbnQgPSBkb20uZ2V0UGFyZW50RWxlbWVudChzZWxlY3RlZE5vZGUsIHsgbm9kZU5hbWU6IFsiUCIsICJESVYiXSB9LCAyKTsKICAgICAgaWYgKCFwYXJlbnRFbGVtZW50KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICB2YXIgaW52aXNpYmxlU3BhY2UgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh3eXNpaHRtbDUuSU5WSVNJQkxFX1NQQUNFKTsKICAgICAgZG9tLmluc2VydChpbnZpc2libGVTcGFjZSkuYmVmb3JlKHBhcmVudEVsZW1lbnQpOwogICAgICBkb20ucmVwbGFjZVdpdGhDaGlsZE5vZGVzKHBhcmVudEVsZW1lbnQpOwogICAgICBjb21wb3Nlci5zZWxlY3Rpb24uc2VsZWN0Tm9kZShpbnZpc2libGVTcGFjZSk7CiAgICB9CgogICAgZnVuY3Rpb24ga2V5RG93bihldmVudCkgewogICAgICB2YXIga2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7CiAgICAgIGlmIChldmVudC5zaGlmdEtleSB8fCAoa2V5Q29kZSAhPT0gd3lzaWh0bWw1LkVOVEVSX0tFWSAmJiBrZXlDb2RlICE9PSB3eXNpaHRtbDUuQkFDS1NQQUNFX0tFWSkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIHZhciBlbGVtZW50ICAgICAgICAgPSBldmVudC50YXJnZXQsCiAgICAgICAgICBzZWxlY3RlZE5vZGUgICAgPSBjb21wb3Nlci5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKCksCiAgICAgICAgICBibG9ja0VsZW1lbnQgICAgPSBkb20uZ2V0UGFyZW50RWxlbWVudChzZWxlY3RlZE5vZGUsIHsgbm9kZU5hbWU6IFVTRV9OQVRJVkVfTElORV9CUkVBS19XSEVOX0NBUkVUX0lOU0lERV9UQUdTIH0sIDQpOwogICAgICBpZiAoYmxvY2tFbGVtZW50KSB7CiAgICAgICAgLy8gU29tZSBicm93c2VycyBjcmVhdGUgPHA+IGVsZW1lbnRzIGFmdGVyIGxlYXZpbmcgYSBsaXN0CiAgICAgICAgLy8gY2hlY2sgYWZ0ZXIga2V5ZG93biBvZiBiYWNrc3BhY2UgYW5kIHJldHVybiB3aGV0aGVyIGEgPHA+IGdvdCBpbnNlcnRlZCBhbmQgdW53cmFwIGl0CiAgICAgICAgaWYgKGJsb2NrRWxlbWVudC5ub2RlTmFtZSA9PT0gIkxJIiAmJiAoa2V5Q29kZSA9PT0gd3lzaWh0bWw1LkVOVEVSX0tFWSB8fCBrZXlDb2RlID09PSB3eXNpaHRtbDUuQkFDS1NQQUNFX0tFWSkpIHsKICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBzZWxlY3RlZE5vZGUgPSBjb21wb3Nlci5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKCksCiAgICAgICAgICAgICAgICBsaXN0LAogICAgICAgICAgICAgICAgZGl2OwogICAgICAgICAgICBpZiAoIXNlbGVjdGVkTm9kZSkgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGlzdCA9IGRvbS5nZXRQYXJlbnRFbGVtZW50KHNlbGVjdGVkTm9kZSwgewogICAgICAgICAgICAgIG5vZGVOYW1lOiBMSVNUX1RBR1MKICAgICAgICAgICAgfSwgMik7CgogICAgICAgICAgICBpZiAobGlzdCkgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdW53cmFwKHNlbGVjdGVkTm9kZSk7CiAgICAgICAgICB9LCAwKTsKICAgICAgICB9IGVsc2UgaWYgKGJsb2NrRWxlbWVudC5ub2RlTmFtZS5tYXRjaCgvSFsxLTZdLykgJiYga2V5Q29kZSA9PT0gd3lzaWh0bWw1LkVOVEVSX0tFWSkgewogICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgdW53cmFwKGNvbXBvc2VyLnNlbGVjdGlvbi5nZXRTZWxlY3RlZE5vZGUoKSk7CiAgICAgICAgICB9LCAwKTsKICAgICAgICB9IAogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgaWYgKGtleUNvZGUgPT09IHd5c2lodG1sNS5FTlRFUl9LRVkgJiYgIXd5c2lodG1sNS5icm93c2VyLmluc2VydHNMaW5lQnJlYWtzT25SZXR1cm4oKSkgewogICAgICAgIGNvbXBvc2VyLmNvbW1hbmRzLmV4ZWMoImluc2VydExpbmVCcmVhayIpOwogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIH0KICAgIH0KICAgIAogICAgLy8ga2V5cHJlc3MgZG9lc24ndCBmaXJlIHdoZW4geW91IGhpdCBiYWNrc3BhY2UKICAgIGRvbS5vYnNlcnZlKGNvbXBvc2VyLmVsZW1lbnQub3duZXJEb2N1bWVudCwgImtleWRvd24iLCBrZXlEb3duKTsKICB9Owp9KSh3eXNpaHRtbDUpOy8qKgogKiBGb3JjZSByZXJlbmRlcmluZyBvZiBhIGdpdmVuIGVsZW1lbnQKICogTmVlZGVkIHRvIGZpeCBkaXNwbGF5IG1pc2JlaGF2aW9ycyBvZiBJRQogKgogKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGhlIGVsZW1lbnQgb2JqZWN0IHdoaWNoIG5lZWRzIHRvIGJlIHJlcmVuZGVyZWQKICogQGV4YW1wbGUKICogICAgd3lzaWh0bWw1LnF1aXJrcy5yZWRyYXcoZG9jdW1lbnQuYm9keSk7CiAqLwooZnVuY3Rpb24od3lzaWh0bWw1KSB7CiAgdmFyIENMQVNTX05BTUUgPSAid3lzaWh0bWw1LXF1aXJrcy1yZWRyYXciOwogIAogIHd5c2lodG1sNS5xdWlya3MucmVkcmF3ID0gZnVuY3Rpb24oZWxlbWVudCkgewogICAgd3lzaWh0bWw1LmRvbS5hZGRDbGFzcyhlbGVtZW50LCBDTEFTU19OQU1FKTsKICAgIHd5c2lodG1sNS5kb20ucmVtb3ZlQ2xhc3MoZWxlbWVudCwgQ0xBU1NfTkFNRSk7CiAgICAKICAgIC8vIEZvbGxvd2luZyBoYWNrIGlzIG5lZWRlZCBmb3IgZmlyZWZveCB0byBtYWtlIHN1cmUgdGhhdCBpbWFnZSByZXNpemUgaGFuZGxlcyBhcmUgcHJvcGVybHkgcmVtb3ZlZAogICAgdHJ5IHsKICAgICAgdmFyIGRvYyA9IGVsZW1lbnQub3duZXJEb2N1bWVudDsKICAgICAgZG9jLmV4ZWNDb21tYW5kKCJpdGFsaWMiLCBmYWxzZSwgbnVsbCk7CiAgICAgIGRvYy5leGVjQ29tbWFuZCgiaXRhbGljIiwgZmFsc2UsIG51bGwpOwogICAgfSBjYXRjaChlKSB7fQogIH07Cn0pKHd5c2lodG1sNSk7LyoqCiAqIFNlbGVjdGlvbiBBUEkKICoKICogQGV4YW1wbGUKICogICAgdmFyIHNlbGVjdGlvbiA9IG5ldyB3eXNpaHRtbDUuU2VsZWN0aW9uKGVkaXRvcik7CiAqLwooZnVuY3Rpb24od3lzaWh0bWw1KSB7CiAgdmFyIGRvbSA9IHd5c2lodG1sNS5kb207CiAgCiAgZnVuY3Rpb24gX2dldEN1bXVsYXRpdmVPZmZzZXRUb3AoZWxlbWVudCkgewogICAgdmFyIHRvcCA9IDA7CiAgICBpZiAoZWxlbWVudC5wYXJlbnROb2RlKSB7CiAgICAgIGRvIHsKICAgICAgICB0b3AgKz0gZWxlbWVudC5vZmZzZXRUb3AgfHwgMDsKICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7CiAgICAgIH0gd2hpbGUgKGVsZW1lbnQpOwogICAgfQogICAgcmV0dXJuIHRvcDsKICB9CiAgCiAgd3lzaWh0bWw1LlNlbGVjdGlvbiA9IEJhc2UuZXh0ZW5kKAogICAgLyoqIEBzY29wZSB3eXNpaHRtbDUuU2VsZWN0aW9uLnByb3RvdHlwZSAqLyB7CiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG91ciBleHRlcm5hbCByYW5nZSBsaWJyYXJ5IGlzIGluaXRpYWxpemVkCiAgICAgIHdpbmRvdy5yYW5neS5pbml0KCk7CiAgICAgIAogICAgICB0aGlzLmVkaXRvciAgID0gZWRpdG9yOwogICAgICB0aGlzLmNvbXBvc2VyID0gZWRpdG9yLmNvbXBvc2VyOwogICAgICB0aGlzLmRvYyAgICAgID0gdGhpcy5jb21wb3Nlci5kb2M7CiAgICB9LAogICAgCiAgICAvKioKICAgICAqIEdldCB0aGUgY3VycmVudCBzZWxlY3Rpb24gYXMgYSBib29rbWFyayB0byBiZSBhYmxlIHRvIGxhdGVyIHJlc3RvcmUgaXQKICAgICAqCiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uCiAgICAgKi8KICAgIGdldEJvb2ttYXJrOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRSYW5nZSgpOwogICAgICByZXR1cm4gcmFuZ2UgJiYgcmFuZ2UuY2xvbmVSYW5nZSgpOwogICAgfSwKCiAgICAvKioKICAgICAqIFJlc3RvcmUgYSBzZWxlY3Rpb24gcmV0cmlldmVkIHZpYSB3eXNpaHRtbDUuU2VsZWN0aW9uLnByb3RvdHlwZS5nZXRCb29rbWFyawogICAgICoKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBib29rbWFyayBBbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBjdXJyZW50IHNlbGVjdGlvbgogICAgICovCiAgICBzZXRCb29rbWFyazogZnVuY3Rpb24oYm9va21hcmspIHsKICAgICAgaWYgKCFib29rbWFyaykgewogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oYm9va21hcmspOwogICAgfSwKCiAgICAvKioKICAgICAqIFNldCB0aGUgY2FyZXQgaW4gZnJvbnQgb2YgdGhlIGdpdmVuIG5vZGUKICAgICAqCiAgICAgKiBAcGFyYW0ge09iamVjdH0gbm9kZSBUaGUgZWxlbWVudCBvciB0ZXh0IG5vZGUgd2hlcmUgdG8gcG9zaXRpb24gdGhlIGNhcmV0IGluIGZyb250IG9mCiAgICAgKiBAZXhhbXBsZQogICAgICogICAgc2VsZWN0aW9uLnNldEJlZm9yZShteUVsZW1lbnQpOwogICAgICovCiAgICBzZXRCZWZvcmU6IGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgdmFyIHJhbmdlID0gcmFuZ3kuY3JlYXRlUmFuZ2UodGhpcy5kb2MpOwogICAgICByYW5nZS5zZXRTdGFydEJlZm9yZShub2RlKTsKICAgICAgcmFuZ2Uuc2V0RW5kQmVmb3JlKG5vZGUpOwogICAgICByZXR1cm4gdGhpcy5zZXRTZWxlY3Rpb24ocmFuZ2UpOwogICAgfSwKCiAgICAvKioKICAgICAqIFNldCB0aGUgY2FyZXQgYWZ0ZXIgdGhlIGdpdmVuIG5vZGUKICAgICAqCiAgICAgKiBAcGFyYW0ge09iamVjdH0gbm9kZSBUaGUgZWxlbWVudCBvciB0ZXh0IG5vZGUgd2hlcmUgdG8gcG9zaXRpb24gdGhlIGNhcmV0IGluIGZyb250IG9mCiAgICAgKiBAZXhhbXBsZQogICAgICogICAgc2VsZWN0aW9uLnNldEJlZm9yZShteUVsZW1lbnQpOwogICAgICovCiAgICBzZXRBZnRlcjogZnVuY3Rpb24obm9kZSkgewogICAgICB2YXIgcmFuZ2UgPSByYW5neS5jcmVhdGVSYW5nZSh0aGlzLmRvYyk7CiAgICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIobm9kZSk7CiAgICAgIHJhbmdlLnNldEVuZEFmdGVyKG5vZGUpOwogICAgICByZXR1cm4gdGhpcy5zZXRTZWxlY3Rpb24ocmFuZ2UpOwogICAgfSwKCiAgICAvKioKICAgICAqIEFiaWxpdHkgdG8gc2VsZWN0L21hcmsgbm9kZXMKICAgICAqCiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGUgVGhlIG5vZGUvZWxlbWVudCB0byBzZWxlY3QKICAgICAqIEBleGFtcGxlCiAgICAgKiAgICBzZWxlY3Rpb24uc2VsZWN0Tm9kZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXktaW1hZ2UiKSk7CiAgICAgKi8KICAgIHNlbGVjdE5vZGU6IGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgdmFyIHJhbmdlICAgICAgICAgICA9IHJhbmd5LmNyZWF0ZVJhbmdlKHRoaXMuZG9jKSwKICAgICAgICAgIGlzRWxlbWVudCAgICAgICA9IG5vZGUubm9kZVR5cGUgPT09IHd5c2lodG1sNS5FTEVNRU5UX05PREUsCiAgICAgICAgICBjYW5IYXZlSFRNTCAgICAgPSAiY2FuSGF2ZUhUTUwiIGluIG5vZGUgPyBub2RlLmNhbkhhdmVIVE1MIDogKG5vZGUubm9kZU5hbWUgIT09ICJJTUciKSwKICAgICAgICAgIGNvbnRlbnQgICAgICAgICA9IGlzRWxlbWVudCA/IG5vZGUuaW5uZXJIVE1MIDogbm9kZS5kYXRhLAogICAgICAgICAgaXNFbXB0eSAgICAgICAgID0gKGNvbnRlbnQgPT09ICIiIHx8IGNvbnRlbnQgPT09IHd5c2lodG1sNS5JTlZJU0lCTEVfU1BBQ0UpLAogICAgICAgICAgZGlzcGxheVN0eWxlICAgID0gZG9tLmdldFN0eWxlKCJkaXNwbGF5IikuZnJvbShub2RlKSwKICAgICAgICAgIGlzQmxvY2tFbGVtZW50ICA9IChkaXNwbGF5U3R5bGUgPT09ICJibG9jayIgfHwgZGlzcGxheVN0eWxlID09PSAibGlzdC1pdGVtIik7CgogICAgICBpZiAoaXNFbXB0eSAmJiBpc0VsZW1lbnQgJiYgY2FuSGF2ZUhUTUwpIHsKICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBjYXJldCBpcyB2aXNpYmxlIGluIG5vZGUgYnkgaW5zZXJ0aW5nIGEgemVybyB3aWR0aCBubyBicmVha2luZyBzcGFjZQogICAgICAgIHRyeSB7IG5vZGUuaW5uZXJIVE1MID0gd3lzaWh0bWw1LklOVklTSUJMRV9TUEFDRTsgfSBjYXRjaChlKSB7fQogICAgICB9CgogICAgICBpZiAoY2FuSGF2ZUhUTUwpIHsKICAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMobm9kZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZShub2RlKTsKICAgICAgfQoKICAgICAgaWYgKGNhbkhhdmVIVE1MICYmIGlzRW1wdHkgJiYgaXNFbGVtZW50KSB7CiAgICAgICAgcmFuZ2UuY29sbGFwc2UoaXNCbG9ja0VsZW1lbnQpOwogICAgICB9IGVsc2UgaWYgKGNhbkhhdmVIVE1MICYmIGlzRW1wdHkpIHsKICAgICAgICByYW5nZS5zZXRTdGFydEFmdGVyKG5vZGUpOwogICAgICAgIHJhbmdlLnNldEVuZEFmdGVyKG5vZGUpOwogICAgICB9CgogICAgICB0aGlzLnNldFNlbGVjdGlvbihyYW5nZSk7CiAgICB9LAoKICAgIC8qKgogICAgICogR2V0IHRoZSBub2RlIHdoaWNoIGNvbnRhaW5zIHRoZSBzZWxlY3Rpb24KICAgICAqCiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtjb250cm9sUmFuZ2VdIChvbmx5IElFKSBXaGV0aGVyIGl0IHNob3VsZCByZXR1cm4gdGhlIHNlbGVjdGVkIENvbnRyb2xSYW5nZSBlbGVtZW50IHdoZW4gdGhlIHNlbGVjdGlvbiB0eXBlIGlzIGEgIkNvbnRyb2xSYW5nZSIKICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIG5vZGUgdGhhdCBjb250YWlucyB0aGUgY2FyZXQKICAgICAqIEBleGFtcGxlCiAgICAgKiAgICB2YXIgbm9kZVRoYXRDb250YWluc0NhcmV0ID0gc2VsZWN0aW9uLmdldFNlbGVjdGVkTm9kZSgpOwogICAgICovCiAgICBnZXRTZWxlY3RlZE5vZGU6IGZ1bmN0aW9uKGNvbnRyb2xSYW5nZSkgewogICAgICB2YXIgc2VsZWN0aW9uLAogICAgICAgICAgcmFuZ2U7CgogICAgICBpZiAoY29udHJvbFJhbmdlICYmIHRoaXMuZG9jLnNlbGVjdGlvbiAmJiB0aGlzLmRvYy5zZWxlY3Rpb24udHlwZSA9PT0gIkNvbnRyb2wiKSB7CiAgICAgICAgcmFuZ2UgPSB0aGlzLmRvYy5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsKICAgICAgICBpZiAocmFuZ2UgJiYgcmFuZ2UubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gcmFuZ2UuaXRlbSgwKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRoaXMuZG9jKTsKICAgICAgaWYgKHNlbGVjdGlvbi5mb2N1c05vZGUgPT09IHNlbGVjdGlvbi5hbmNob3JOb2RlKSB7CiAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi5mb2N1c05vZGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKHRoaXMuZG9jKTsKICAgICAgICByZXR1cm4gcmFuZ2UgPyByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lciA6IHRoaXMuZG9jLmJvZHk7CiAgICAgIH0KICAgIH0sCgogICAgZXhlY3V0ZUFuZFJlc3RvcmU6IGZ1bmN0aW9uKG1ldGhvZCwgcmVzdG9yZVNjcm9sbFBvc2l0aW9uKSB7CiAgICAgIHZhciBib2R5ICAgICAgICAgICAgICAgICAgPSB0aGlzLmRvYy5ib2R5LAogICAgICAgICAgb2xkU2Nyb2xsVG9wICAgICAgICAgID0gcmVzdG9yZVNjcm9sbFBvc2l0aW9uICYmIGJvZHkuc2Nyb2xsVG9wLAogICAgICAgICAgb2xkU2Nyb2xsTGVmdCAgICAgICAgID0gcmVzdG9yZVNjcm9sbFBvc2l0aW9uICYmIGJvZHkuc2Nyb2xsTGVmdCwKICAgICAgICAgIGNsYXNzTmFtZSAgICAgICAgICAgICA9ICJfd3lzaWh0bWw1LXRlbXAtcGxhY2Vob2xkZXIiLAogICAgICAgICAgcGxhY2Vob2xkZXJIVE1MICAgICAgID0gJzxzcGFuIGNsYXNzPSInICsgY2xhc3NOYW1lICsgJyI+JyArIHd5c2lodG1sNS5JTlZJU0lCTEVfU1BBQ0UgKyAnPC9zcGFuPicsCiAgICAgICAgICByYW5nZSAgICAgICAgICAgICAgICAgPSB0aGlzLmdldFJhbmdlKHRoaXMuZG9jKSwKICAgICAgICAgIG5ld1JhbmdlOwogICAgICAKICAgICAgLy8gTm90aGluZyBzZWxlY3RlZCwgZXhlY3V0ZSBhbmQgc2F5IGdvb2RieWUKICAgICAgaWYgKCFyYW5nZSkgewogICAgICAgIG1ldGhvZChib2R5LCBib2R5KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgCiAgICAgIHZhciBub2RlID0gcmFuZ2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHBsYWNlaG9sZGVySFRNTCk7CiAgICAgIHJhbmdlLmluc2VydE5vZGUobm9kZSk7CiAgICAgIAogICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhIHBvdGVudGlhbCBlcnJvciBkb2Vzbid0IGNhdXNlIG91ciBwbGFjZWhvbGRlciBlbGVtZW50IHRvIGJlIGxlZnQgYXMgYSBwbGFjZWhvbGRlcgogICAgICB0cnkgewogICAgICAgIG1ldGhvZChyYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2UuZW5kQ29udGFpbmVyKTsKICAgICAgfSBjYXRjaChlMykgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRocm93IGUzOyB9LCAwKTsKICAgICAgfQogICAgICAKICAgICAgY2FyZXRQbGFjZWhvbGRlciA9IHRoaXMuZG9jLnF1ZXJ5U2VsZWN0b3IoIi4iICsgY2xhc3NOYW1lKTsKICAgICAgaWYgKGNhcmV0UGxhY2Vob2xkZXIpIHsKICAgICAgICBuZXdSYW5nZSA9IHJhbmd5LmNyZWF0ZVJhbmdlKHRoaXMuZG9jKTsKICAgICAgICBuZXdSYW5nZS5zZWxlY3ROb2RlKGNhcmV0UGxhY2Vob2xkZXIpOwogICAgICAgIG5ld1JhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7CiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24obmV3UmFuZ2UpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIGZhbGxiYWNrIGZvciB3aGVuIGFsbCBoZWxsIGJyZWFrcyBsb29zZQogICAgICAgIGJvZHkuZm9jdXMoKTsKICAgICAgfQoKICAgICAgaWYgKHJlc3RvcmVTY3JvbGxQb3NpdGlvbikgewogICAgICAgIGJvZHkuc2Nyb2xsVG9wICA9IG9sZFNjcm9sbFRvcDsKICAgICAgICBib2R5LnNjcm9sbExlZnQgPSBvbGRTY3JvbGxMZWZ0OwogICAgICB9CgogICAgICAvLyBSZW1vdmUgaXQgYWdhaW4sIGp1c3QgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHBsYWNlaG9sZGVyIGlzIGRlZmluaXRlbHkgb3V0IG9mIHRoZSBkb20gdHJlZQogICAgICB0cnkgewogICAgICAgIGNhcmV0UGxhY2Vob2xkZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjYXJldFBsYWNlaG9sZGVyKTsKICAgICAgfSBjYXRjaChlNCkge30KICAgIH0sCgogICAgLyoqCiAgICAgKiBEaWZmZXJlbnQgYXBwcm9hY2ggb2YgcHJlc2VydmluZyB0aGUgc2VsZWN0aW9uIChkb2Vzbid0IG1vZGlmeSB0aGUgZG9tKQogICAgICogVGFrZXMgYWxsIHRleHQgbm9kZXMgaW4gdGhlIHNlbGVjdGlvbiBhbmQgc2F2ZXMgdGhlIHNlbGVjdGlvbiBwb3NpdGlvbiBpbiB0aGUgZmlyc3QgYW5kIGxhc3Qgb25lCiAgICAgKi8KICAgIGV4ZWN1dGVBbmRSZXN0b3JlU2ltcGxlOiBmdW5jdGlvbihtZXRob2QpIHsKICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRSYW5nZSgpLAogICAgICAgICAgYm9keSAgPSB0aGlzLmRvYy5ib2R5LAogICAgICAgICAgbmV3UmFuZ2UsCiAgICAgICAgICBmaXJzdE5vZGUsCiAgICAgICAgICBsYXN0Tm9kZSwKICAgICAgICAgIHRleHROb2RlcywKICAgICAgICAgIHJhbmdlQmFja3VwOwoKICAgICAgLy8gTm90aGluZyBzZWxlY3RlZCwgZXhlY3V0ZSBhbmQgc2F5IGdvb2RieWUKICAgICAgaWYgKCFyYW5nZSkgewogICAgICAgIG1ldGhvZChib2R5LCBib2R5KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIHRleHROb2RlcyA9IHJhbmdlLmdldE5vZGVzKFszXSk7CiAgICAgIGZpcnN0Tm9kZSA9IHRleHROb2Rlc1swXSB8fCByYW5nZS5zdGFydENvbnRhaW5lcjsKICAgICAgbGFzdE5vZGUgID0gdGV4dE5vZGVzW3RleHROb2Rlcy5sZW5ndGggLSAxXSB8fCByYW5nZS5lbmRDb250YWluZXI7CgogICAgICByYW5nZUJhY2t1cCA9IHsKICAgICAgICBjb2xsYXBzZWQ6ICAgICAgcmFuZ2UuY29sbGFwc2VkLAogICAgICAgIHN0YXJ0Q29udGFpbmVyOiBmaXJzdE5vZGUsCiAgICAgICAgc3RhcnRPZmZzZXQ6ICAgIGZpcnN0Tm9kZSA9PT0gcmFuZ2Uuc3RhcnRDb250YWluZXIgPyByYW5nZS5zdGFydE9mZnNldCA6IDAsCiAgICAgICAgZW5kQ29udGFpbmVyOiAgIGxhc3ROb2RlLAogICAgICAgIGVuZE9mZnNldDogICAgICBsYXN0Tm9kZSA9PT0gcmFuZ2UuZW5kQ29udGFpbmVyID8gcmFuZ2UuZW5kT2Zmc2V0IDogbGFzdE5vZGUubGVuZ3RoCiAgICAgIH07CgogICAgICB0cnkgewogICAgICAgIG1ldGhvZChyYW5nZS5zdGFydENvbnRhaW5lciwgcmFuZ2UuZW5kQ29udGFpbmVyKTsKICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgdGhyb3cgZTsgfSwgMCk7CiAgICAgIH0KCiAgICAgIG5ld1JhbmdlID0gcmFuZ3kuY3JlYXRlUmFuZ2UodGhpcy5kb2MpOwogICAgICB0cnkgeyBuZXdSYW5nZS5zZXRTdGFydChyYW5nZUJhY2t1cC5zdGFydENvbnRhaW5lciwgcmFuZ2VCYWNrdXAuc3RhcnRPZmZzZXQpOyB9IGNhdGNoKGUxKSB7fQogICAgICB0cnkgeyBuZXdSYW5nZS5zZXRFbmQocmFuZ2VCYWNrdXAuZW5kQ29udGFpbmVyLCByYW5nZUJhY2t1cC5lbmRPZmZzZXQpOyB9IGNhdGNoKGUyKSB7fQogICAgICB0cnkgeyB0aGlzLnNldFNlbGVjdGlvbihuZXdSYW5nZSk7IH0gY2F0Y2goZTMpIHt9CiAgICB9LAoKICAgIC8qKgogICAgICogSW5zZXJ0IGh0bWwgYXQgdGhlIGNhcmV0IHBvc2l0aW9uIGFuZCBtb3ZlIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlIGluc2VydGVkIGh0bWwKICAgICAqCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaHRtbCBIVE1MIHN0cmluZyB0byBpbnNlcnQKICAgICAqIEBleGFtcGxlCiAgICAgKiAgICBzZWxlY3Rpb24uaW5zZXJ0SFRNTCgiPHA+Zm9vYmFyPC9wPiIpOwogICAgICovCiAgICBpbnNlcnRIVE1MOiBmdW5jdGlvbihodG1sKSB7CiAgICAgIHZhciByYW5nZSAgICAgPSByYW5neS5jcmVhdGVSYW5nZSh0aGlzLmRvYyksCiAgICAgICAgICBub2RlICAgICAgPSByYW5nZS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoaHRtbCksCiAgICAgICAgICBsYXN0Q2hpbGQgPSBub2RlLmxhc3RDaGlsZDsKICAgICAgdGhpcy5pbnNlcnROb2RlKG5vZGUpOwogICAgICBpZiAobGFzdENoaWxkKSB7CiAgICAgICAgdGhpcy5zZXRBZnRlcihsYXN0Q2hpbGQpOwogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogSW5zZXJ0IGEgbm9kZSBhdCB0aGUgY2FyZXQgcG9zaXRpb24gYW5kIG1vdmUgdGhlIGN1cnNvciBiZWhpbmQgaXQKICAgICAqCiAgICAgKiBAcGFyYW0ge09iamVjdH0gbm9kZSBIVE1MIHN0cmluZyB0byBpbnNlcnQKICAgICAqIEBleGFtcGxlCiAgICAgKiAgICBzZWxlY3Rpb24uaW5zZXJ0Tm9kZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiZm9vYmFyIikpOwogICAgICovCiAgICBpbnNlcnROb2RlOiBmdW5jdGlvbihub2RlKSB7CiAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTsKICAgICAgaWYgKHJhbmdlKSB7CiAgICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShub2RlKTsKICAgICAgfQogICAgfSwKCiAgICAvKioKICAgICAqIFdyYXBzIGN1cnJlbnQgc2VsZWN0aW9uIHdpdGggdGhlIGdpdmVuIG5vZGUKICAgICAqCiAgICAgKiBAcGFyYW0ge09iamVjdH0gbm9kZSBUaGUgbm9kZSB0byBzdXJyb3VuZCB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgd2l0aAogICAgICovCiAgICBzdXJyb3VuZDogZnVuY3Rpb24obm9kZSkgewogICAgICB2YXIgcmFuZ2UgPSB0aGlzLmdldFJhbmdlKCk7CiAgICAgIGlmICghcmFuZ2UpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIHRyeSB7CiAgICAgICAgLy8gVGhpcyBvbmx5IHdvcmtzIHdoZW4gdGhlIHJhbmdlIGJvdW5kYXJpZXMgYXJlIG5vdCBvdmVybGFwcGluZyBvdGhlciBlbGVtZW50cwogICAgICAgIHJhbmdlLnN1cnJvdW5kQ29udGVudHMobm9kZSk7CiAgICAgICAgdGhpcy5zZWxlY3ROb2RlKG5vZGUpOwogICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAvLyBmYWxsYmFjawogICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQocmFuZ2UuZXh0cmFjdENvbnRlbnRzKCkpOwogICAgICAgIHJhbmdlLmluc2VydE5vZGUobm9kZSk7CiAgICAgIH0KICAgIH0sCgogICAgLyoqCiAgICAgKiBTY3JvbGwgdGhlIGN1cnJlbnQgY2FyZXQgcG9zaXRpb24gaW50byB0aGUgdmlldwogICAgICogRklYTUU6IFRoaXMgaXMgYSBiaXQgaGFja3ksIHRoZXJlIG1pZ2h0IGJlIGEgc21hcnRlciB3YXkgb2YgZG9pbmcgdGhpcwogICAgICoKICAgICAqIEBleGFtcGxlCiAgICAgKiAgICBzZWxlY3Rpb24uc2Nyb2xsSW50b1ZpZXcoKTsKICAgICAqLwogICAgc2Nyb2xsSW50b1ZpZXc6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgZG9jICAgICAgICAgICA9IHRoaXMuZG9jLAogICAgICAgICAgaGFzU2Nyb2xsQmFycyA9IGRvYy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZG9jLmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQsCiAgICAgICAgICB0ZW1wRWxlbWVudCAgID0gZG9jLl93eXNpaHRtbDVTY3JvbGxJbnRvVmlld0VsZW1lbnQgPSBkb2MuX3d5c2lodG1sNVNjcm9sbEludG9WaWV3RWxlbWVudCB8fCAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgICAgICAgLy8gVGhlIGVsZW1lbnQgbmVlZHMgY29udGVudCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBpdCdzIHBvc2l0aW9uIHByb3Blcmx5CiAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gd3lzaWh0bWw1LklOVklTSUJMRV9TUEFDRTsKICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgICB9KSgpLAogICAgICAgICAgb2Zmc2V0VG9wOwoKICAgICAgaWYgKGhhc1Njcm9sbEJhcnMpIHsKICAgICAgICB0aGlzLmluc2VydE5vZGUodGVtcEVsZW1lbnQpOwogICAgICAgIG9mZnNldFRvcCA9IF9nZXRDdW11bGF0aXZlT2Zmc2V0VG9wKHRlbXBFbGVtZW50KTsKICAgICAgICB0ZW1wRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRlbXBFbGVtZW50KTsKICAgICAgICBpZiAob2Zmc2V0VG9wID4gZG9jLmJvZHkuc2Nyb2xsVG9wKSB7CiAgICAgICAgICBkb2MuYm9keS5zY3JvbGxUb3AgPSBvZmZzZXRUb3A7CiAgICAgICAgfQogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogU2VsZWN0IGxpbmUgd2hlcmUgdGhlIGNhcmV0IGlzIGluCiAgICAgKi8KICAgIHNlbGVjdExpbmU6IGZ1bmN0aW9uKCkgewogICAgICBpZiAod3lzaWh0bWw1LmJyb3dzZXIuc3VwcG9ydHNTZWxlY3Rpb25Nb2RpZnkoKSkgewogICAgICAgIHRoaXMuX3NlbGVjdExpbmVfVzNDKCk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5kb2Muc2VsZWN0aW9uKSB7CiAgICAgICAgdGhpcy5fc2VsZWN0TGluZV9NU0lFKCk7CiAgICAgIH0KICAgIH0sCgogICAgLyoqCiAgICAgKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vRE9NL1NlbGVjdGlvbi9tb2RpZnkKICAgICAqLwogICAgX3NlbGVjdExpbmVfVzNDOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIHdpbiAgICAgICA9IHRoaXMuZG9jLmRlZmF1bHRWaWV3LAogICAgICAgICAgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbigpOwogICAgICBzZWxlY3Rpb24ubW9kaWZ5KCJleHRlbmQiLCAibGVmdCIsICJsaW5lYm91bmRhcnkiKTsKICAgICAgc2VsZWN0aW9uLm1vZGlmeSgiZXh0ZW5kIiwgInJpZ2h0IiwgImxpbmVib3VuZGFyeSIpOwogICAgfSwKCiAgICBfc2VsZWN0TGluZV9NU0lFOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIHJhbmdlICAgICAgID0gdGhpcy5kb2Muc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCksCiAgICAgICAgICByYW5nZVRvcCAgICA9IHJhbmdlLmJvdW5kaW5nVG9wLAogICAgICAgICAgcmFuZ2VIZWlnaHQgPSByYW5nZS5ib3VuZGluZ0hlaWdodCwKICAgICAgICAgIHNjcm9sbFdpZHRoID0gdGhpcy5kb2MuYm9keS5zY3JvbGxXaWR0aCwKICAgICAgICAgIHJhbmdlQm90dG9tLAogICAgICAgICAgcmFuZ2VFbmQsCiAgICAgICAgICBtZWFzdXJlTm9kZSwKICAgICAgICAgIGksCiAgICAgICAgICBqOwoKICAgICAgaWYgKCFyYW5nZS5tb3ZlVG9Qb2ludCkgewogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgaWYgKHJhbmdlVG9wID09PSAwKSB7CiAgICAgICAgLy8gRG9uJ3Qga25vdyB3aHksIGJ1dCB3aGVuIHRoZSBzZWxlY3Rpb24gZW5kcyBhdCB0aGUgZW5kIG9mIGEgbGluZQogICAgICAgIC8vIHJhbmdlLmJvdW5kaW5nVG9wIGlzIDAKICAgICAgICBtZWFzdXJlTm9kZSA9IHRoaXMuZG9jLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgICB0aGlzLmluc2VydE5vZGUobWVhc3VyZU5vZGUpOwogICAgICAgIHJhbmdlVG9wID0gbWVhc3VyZU5vZGUub2Zmc2V0VG9wOwogICAgICAgIG1lYXN1cmVOb2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobWVhc3VyZU5vZGUpOwogICAgICB9CgogICAgICByYW5nZVRvcCArPSAxOwoKICAgICAgZm9yIChpPS0xMDsgaTxzY3JvbGxXaWR0aDsgaSs9MikgewogICAgICAgIHRyeSB7CiAgICAgICAgICByYW5nZS5tb3ZlVG9Qb2ludChpLCByYW5nZVRvcCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGNhdGNoKGUxKSB7fQogICAgICB9CgogICAgICAvLyBJbnZlc3RpZ2F0ZSB0aGUgZm9sbG93aW5nIGluIG9yZGVyIHRvIGhhbmRsZSBtdWx0aSBsaW5lIHNlbGVjdGlvbnMKICAgICAgLy8gcmFuZ2VCb3R0b20gPSByYW5nZVRvcCArIChyYW5nZUhlaWdodCA/IChyYW5nZUhlaWdodCAtIDEpIDogMCk7CiAgICAgIHJhbmdlQm90dG9tID0gcmFuZ2VUb3A7CiAgICAgIHJhbmdlRW5kID0gdGhpcy5kb2Muc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7CiAgICAgIGZvciAoaj1zY3JvbGxXaWR0aDsgaj49MDsgai0tKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJhbmdlRW5kLm1vdmVUb1BvaW50KGosIHJhbmdlQm90dG9tKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gY2F0Y2goZTIpIHt9CiAgICAgIH0KCiAgICAgIHJhbmdlLnNldEVuZFBvaW50KCJFbmRUb0VuZCIsIHJhbmdlRW5kKTsKICAgICAgcmFuZ2Uuc2VsZWN0KCk7CiAgICB9LAoKICAgIGdldFRleHQ6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKTsKICAgICAgcmV0dXJuIHNlbGVjdGlvbiA/IHNlbGVjdGlvbi50b1N0cmluZygpIDogIiI7CiAgICB9LAoKICAgIGdldE5vZGVzOiBmdW5jdGlvbihub2RlVHlwZSwgZmlsdGVyKSB7CiAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UoKTsKICAgICAgaWYgKHJhbmdlKSB7CiAgICAgICAgcmV0dXJuIHJhbmdlLmdldE5vZGVzKFtub2RlVHlwZV0sIGZpbHRlcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgICB9CiAgICB9LAogICAgCiAgICBnZXRSYW5nZTogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpOwogICAgICByZXR1cm4gc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ICYmIHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgfSwKCiAgICBnZXRTZWxlY3Rpb246IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gcmFuZ3kuZ2V0U2VsZWN0aW9uKHRoaXMuZG9jLmRlZmF1bHRWaWV3IHx8IHRoaXMuZG9jLnBhcmVudFdpbmRvdyk7CiAgICB9LAoKICAgIHNldFNlbGVjdGlvbjogZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgdmFyIHdpbiAgICAgICA9IHRoaXMuZG9jLmRlZmF1bHRWaWV3IHx8IHRoaXMuZG9jLnBhcmVudFdpbmRvdywKICAgICAgICAgIHNlbGVjdGlvbiA9IHJhbmd5LmdldFNlbGVjdGlvbih3aW4pOwogICAgICByZXR1cm4gc2VsZWN0aW9uLnNldFNpbmdsZVJhbmdlKHJhbmdlKTsKICAgIH0KICB9KTsKICAKfSkod3lzaWh0bWw1KTsKLyoqCiAqIEluc3BpcmVkIGJ5IHRoZSByYW5neSBDU1MgQXBwbGllciBtb2R1bGUgd3JpdHRlbiBieSBUaW0gRG93biBhbmQgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgogKiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcmFuZ3kvCiAqCiAqIGNoYW5nZWQgaW4gb3JkZXIgdG8gYmUgYWJsZSAuLi4KICogICAgLSB0byB1c2UgY3VzdG9tIHRhZ3MKICogICAgLSB0byBkZXRlY3QgYW5kIHJlcGxhY2Ugc2ltaWxhciBjc3MgY2xhc3NlcyB2aWEgcmVnIGV4cAogKi8KKGZ1bmN0aW9uKHd5c2lodG1sNSwgcmFuZ3kpIHsKICB2YXIgZGVmYXVsdFRhZ05hbWUgPSAic3BhbiI7CiAgCiAgdmFyIFJFR19FWFBfV0hJVEVfU1BBQ0UgPSAvXHMrL2c7CiAgCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNzc0NsYXNzLCByZWdFeHApIHsKICAgIGlmICghZWwuY2xhc3NOYW1lKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIAogICAgdmFyIG1hdGNoaW5nQ2xhc3NOYW1lcyA9IGVsLmNsYXNzTmFtZS5tYXRjaChyZWdFeHApIHx8IFtdOwogICAgcmV0dXJuIG1hdGNoaW5nQ2xhc3NOYW1lc1ttYXRjaGluZ0NsYXNzTmFtZXMubGVuZ3RoIC0gMV0gPT09IGNzc0NsYXNzOwogIH0KCiAgZnVuY3Rpb24gYWRkQ2xhc3MoZWwsIGNzc0NsYXNzLCByZWdFeHApIHsKICAgIGlmIChlbC5jbGFzc05hbWUpIHsKICAgICAgcmVtb3ZlQ2xhc3MoZWwsIHJlZ0V4cCk7CiAgICAgIGVsLmNsYXNzTmFtZSArPSAiICIgKyBjc3NDbGFzczsKICAgIH0gZWxzZSB7CiAgICAgIGVsLmNsYXNzTmFtZSA9IGNzc0NsYXNzOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWwsIHJlZ0V4cCkgewogICAgaWYgKGVsLmNsYXNzTmFtZSkgewogICAgICBlbC5jbGFzc05hbWUgPSBlbC5jbGFzc05hbWUucmVwbGFjZShyZWdFeHAsICIiKTsKICAgIH0KICB9CiAgCiAgZnVuY3Rpb24gaGFzU2FtZUNsYXNzZXMoZWwxLCBlbDIpIHsKICAgIHJldHVybiBlbDEuY2xhc3NOYW1lLnJlcGxhY2UoUkVHX0VYUF9XSElURV9TUEFDRSwgIiAiKSA9PSBlbDIuY2xhc3NOYW1lLnJlcGxhY2UoUkVHX0VYUF9XSElURV9TUEFDRSwgIiAiKTsKICB9CgogIGZ1bmN0aW9uIHJlcGxhY2VXaXRoT3duQ2hpbGRyZW4oZWwpIHsKICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnROb2RlOwogICAgd2hpbGUgKGVsLmZpcnN0Q2hpbGQpIHsKICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShlbC5maXJzdENoaWxkLCBlbCk7CiAgICB9CiAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoZWwpOwogIH0KCiAgZnVuY3Rpb24gZWxlbWVudHNIYXZlU2FtZU5vbkNsYXNzQXR0cmlidXRlcyhlbDEsIGVsMikgewogICAgaWYgKGVsMS5hdHRyaWJ1dGVzLmxlbmd0aCAhPSBlbDIuYXR0cmlidXRlcy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGVsMS5hdHRyaWJ1dGVzLmxlbmd0aCwgYXR0cjEsIGF0dHIyLCBuYW1lOyBpIDwgbGVuOyArK2kpIHsKICAgICAgYXR0cjEgPSBlbDEuYXR0cmlidXRlc1tpXTsKICAgICAgbmFtZSA9IGF0dHIxLm5hbWU7CiAgICAgIGlmIChuYW1lICE9ICJjbGFzcyIpIHsKICAgICAgICBhdHRyMiA9IGVsMi5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbShuYW1lKTsKICAgICAgICBpZiAoYXR0cjEuc3BlY2lmaWVkICE9IGF0dHIyLnNwZWNpZmllZCkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoYXR0cjEuc3BlY2lmaWVkICYmIGF0dHIxLm5vZGVWYWx1ZSAhPT0gYXR0cjIubm9kZVZhbHVlKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGZ1bmN0aW9uIGlzU3BsaXRQb2ludChub2RlLCBvZmZzZXQpIHsKICAgIGlmIChyYW5neS5kb20uaXNDaGFyYWN0ZXJEYXRhTm9kZShub2RlKSkgewogICAgICBpZiAob2Zmc2V0ID09IDApIHsKICAgICAgICByZXR1cm4gISFub2RlLnByZXZpb3VzU2libGluZzsKICAgICAgfSBlbHNlIGlmIChvZmZzZXQgPT0gbm9kZS5sZW5ndGgpIHsKICAgICAgICByZXR1cm4gISFub2RlLm5leHRTaWJsaW5nOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG9mZnNldCA+IDAgJiYgb2Zmc2V0IDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsKICB9CgogIGZ1bmN0aW9uIHNwbGl0Tm9kZUF0KG5vZGUsIGRlc2NlbmRhbnROb2RlLCBkZXNjZW5kYW50T2Zmc2V0KSB7CiAgICB2YXIgbmV3Tm9kZTsKICAgIGlmIChyYW5neS5kb20uaXNDaGFyYWN0ZXJEYXRhTm9kZShkZXNjZW5kYW50Tm9kZSkpIHsKICAgICAgaWYgKGRlc2NlbmRhbnRPZmZzZXQgPT0gMCkgewogICAgICAgIGRlc2NlbmRhbnRPZmZzZXQgPSByYW5neS5kb20uZ2V0Tm9kZUluZGV4KGRlc2NlbmRhbnROb2RlKTsKICAgICAgICBkZXNjZW5kYW50Tm9kZSA9IGRlc2NlbmRhbnROb2RlLnBhcmVudE5vZGU7CiAgICAgIH0gZWxzZSBpZiAoZGVzY2VuZGFudE9mZnNldCA9PSBkZXNjZW5kYW50Tm9kZS5sZW5ndGgpIHsKICAgICAgICBkZXNjZW5kYW50T2Zmc2V0ID0gcmFuZ3kuZG9tLmdldE5vZGVJbmRleChkZXNjZW5kYW50Tm9kZSkgKyAxOwogICAgICAgIGRlc2NlbmRhbnROb2RlID0gZGVzY2VuZGFudE5vZGUucGFyZW50Tm9kZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuZXdOb2RlID0gcmFuZ3kuZG9tLnNwbGl0RGF0YU5vZGUoZGVzY2VuZGFudE5vZGUsIGRlc2NlbmRhbnRPZmZzZXQpOwogICAgICB9CiAgICB9CiAgICBpZiAoIW5ld05vZGUpIHsKICAgICAgbmV3Tm9kZSA9IGRlc2NlbmRhbnROb2RlLmNsb25lTm9kZShmYWxzZSk7CiAgICAgIGlmIChuZXdOb2RlLmlkKSB7CiAgICAgICAgbmV3Tm9kZS5yZW1vdmVBdHRyaWJ1dGUoImlkIik7CiAgICAgIH0KICAgICAgdmFyIGNoaWxkOwogICAgICB3aGlsZSAoKGNoaWxkID0gZGVzY2VuZGFudE5vZGUuY2hpbGROb2Rlc1tkZXNjZW5kYW50T2Zmc2V0XSkpIHsKICAgICAgICBuZXdOb2RlLmFwcGVuZENoaWxkKGNoaWxkKTsKICAgICAgfQogICAgICByYW5neS5kb20uaW5zZXJ0QWZ0ZXIobmV3Tm9kZSwgZGVzY2VuZGFudE5vZGUpOwogICAgfQogICAgcmV0dXJuIChkZXNjZW5kYW50Tm9kZSA9PSBub2RlKSA/IG5ld05vZGUgOiBzcGxpdE5vZGVBdChub2RlLCBuZXdOb2RlLnBhcmVudE5vZGUsIHJhbmd5LmRvbS5nZXROb2RlSW5kZXgobmV3Tm9kZSkpOwogIH0KICAKICBmdW5jdGlvbiBNZXJnZShmaXJzdE5vZGUpIHsKICAgIHRoaXMuaXNFbGVtZW50TWVyZ2UgPSAoZmlyc3ROb2RlLm5vZGVUeXBlID09IHd5c2lodG1sNS5FTEVNRU5UX05PREUpOwogICAgdGhpcy5maXJzdFRleHROb2RlID0gdGhpcy5pc0VsZW1lbnRNZXJnZSA/IGZpcnN0Tm9kZS5sYXN0Q2hpbGQgOiBmaXJzdE5vZGU7CiAgICB0aGlzLnRleHROb2RlcyA9IFt0aGlzLmZpcnN0VGV4dE5vZGVdOwogIH0KCiAgTWVyZ2UucHJvdG90eXBlID0gewogICAgZG9NZXJnZTogZnVuY3Rpb24oKSB7CiAgICAgIHZhciB0ZXh0Qml0cyA9IFtdLCB0ZXh0Tm9kZSwgcGFyZW50LCB0ZXh0OwogICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy50ZXh0Tm9kZXMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICB0ZXh0Tm9kZSA9IHRoaXMudGV4dE5vZGVzW2ldOwogICAgICAgIHBhcmVudCA9IHRleHROb2RlLnBhcmVudE5vZGU7CiAgICAgICAgdGV4dEJpdHNbaV0gPSB0ZXh0Tm9kZS5kYXRhOwogICAgICAgIGlmIChpKSB7CiAgICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQodGV4dE5vZGUpOwogICAgICAgICAgaWYgKCFwYXJlbnQuaGFzQ2hpbGROb2RlcygpKSB7CiAgICAgICAgICAgIHBhcmVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHBhcmVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuZmlyc3RUZXh0Tm9kZS5kYXRhID0gdGV4dCA9IHRleHRCaXRzLmpvaW4oIiIpOwogICAgICByZXR1cm4gdGV4dDsKICAgIH0sCgogICAgZ2V0TGVuZ3RoOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIGkgPSB0aGlzLnRleHROb2Rlcy5sZW5ndGgsIGxlbiA9IDA7CiAgICAgIHdoaWxlIChpLS0pIHsKICAgICAgICBsZW4gKz0gdGhpcy50ZXh0Tm9kZXNbaV0ubGVuZ3RoOwogICAgICB9CiAgICAgIHJldHVybiBsZW47CiAgICB9LAoKICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIHRleHRCaXRzID0gW107CiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLnRleHROb2Rlcy5sZW5ndGg7IGkgPCBsZW47ICsraSkgewogICAgICAgIHRleHRCaXRzW2ldID0gIiciICsgdGhpcy50ZXh0Tm9kZXNbaV0uZGF0YSArICInIjsKICAgICAgfQogICAgICByZXR1cm4gIltNZXJnZSgiICsgdGV4dEJpdHMuam9pbigiLCIpICsgIildIjsKICAgIH0KICB9OwoKICBmdW5jdGlvbiBIVE1MQXBwbGllcih0YWdOYW1lcywgY3NzQ2xhc3MsIHNpbWlsYXJDbGFzc1JlZ0V4cCwgbm9ybWFsaXplKSB7CiAgICB0aGlzLnRhZ05hbWVzID0gdGFnTmFtZXMgfHwgW2RlZmF1bHRUYWdOYW1lXTsKICAgIHRoaXMuY3NzQ2xhc3MgPSBjc3NDbGFzcyB8fCAiIjsKICAgIHRoaXMuc2ltaWxhckNsYXNzUmVnRXhwID0gc2ltaWxhckNsYXNzUmVnRXhwOwogICAgdGhpcy5ub3JtYWxpemUgPSBub3JtYWxpemU7CiAgICB0aGlzLmFwcGx5VG9BbnlUYWdOYW1lID0gZmFsc2U7CiAgfQoKICBIVE1MQXBwbGllci5wcm90b3R5cGUgPSB7CiAgICBnZXRBbmNlc3RvcldpdGhDbGFzczogZnVuY3Rpb24obm9kZSkgewogICAgICB2YXIgY3NzQ2xhc3NNYXRjaDsKICAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICBjc3NDbGFzc01hdGNoID0gdGhpcy5jc3NDbGFzcyA/IGhhc0NsYXNzKG5vZGUsIHRoaXMuY3NzQ2xhc3MsIHRoaXMuc2ltaWxhckNsYXNzUmVnRXhwKSA6IHRydWU7CiAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gd3lzaWh0bWw1LkVMRU1FTlRfTk9ERSAmJiByYW5neS5kb20uYXJyYXlDb250YWlucyh0aGlzLnRhZ05hbWVzLCBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkgJiYgY3NzQ2xhc3NNYXRjaCkgewogICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgfQogICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSwKCiAgICAvLyBOb3JtYWxpemVzIG5vZGVzIGFmdGVyIGFwcGx5aW5nIGEgQ1NTIGNsYXNzIHRvIGEgUmFuZ2UuCiAgICBwb3N0QXBwbHk6IGZ1bmN0aW9uKHRleHROb2RlcywgcmFuZ2UpIHsKICAgICAgdmFyIGZpcnN0Tm9kZSA9IHRleHROb2Rlc1swXSwgbGFzdE5vZGUgPSB0ZXh0Tm9kZXNbdGV4dE5vZGVzLmxlbmd0aCAtIDFdOwoKICAgICAgdmFyIG1lcmdlcyA9IFtdLCBjdXJyZW50TWVyZ2U7CgogICAgICB2YXIgcmFuZ2VTdGFydE5vZGUgPSBmaXJzdE5vZGUsIHJhbmdlRW5kTm9kZSA9IGxhc3ROb2RlOwogICAgICB2YXIgcmFuZ2VTdGFydE9mZnNldCA9IDAsIHJhbmdlRW5kT2Zmc2V0ID0gbGFzdE5vZGUubGVuZ3RoOwoKICAgICAgdmFyIHRleHROb2RlLCBwcmVjZWRpbmdUZXh0Tm9kZTsKCiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0ZXh0Tm9kZXMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICB0ZXh0Tm9kZSA9IHRleHROb2Rlc1tpXTsKICAgICAgICBwcmVjZWRpbmdUZXh0Tm9kZSA9IHRoaXMuZ2V0QWRqYWNlbnRNZXJnZWFibGVUZXh0Tm9kZSh0ZXh0Tm9kZS5wYXJlbnROb2RlLCBmYWxzZSk7CiAgICAgICAgaWYgKHByZWNlZGluZ1RleHROb2RlKSB7CiAgICAgICAgICBpZiAoIWN1cnJlbnRNZXJnZSkgewogICAgICAgICAgICBjdXJyZW50TWVyZ2UgPSBuZXcgTWVyZ2UocHJlY2VkaW5nVGV4dE5vZGUpOwogICAgICAgICAgICBtZXJnZXMucHVzaChjdXJyZW50TWVyZ2UpOwogICAgICAgICAgfQogICAgICAgICAgY3VycmVudE1lcmdlLnRleHROb2Rlcy5wdXNoKHRleHROb2RlKTsKICAgICAgICAgIGlmICh0ZXh0Tm9kZSA9PT0gZmlyc3ROb2RlKSB7CiAgICAgICAgICAgIHJhbmdlU3RhcnROb2RlID0gY3VycmVudE1lcmdlLmZpcnN0VGV4dE5vZGU7CiAgICAgICAgICAgIHJhbmdlU3RhcnRPZmZzZXQgPSByYW5nZVN0YXJ0Tm9kZS5sZW5ndGg7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodGV4dE5vZGUgPT09IGxhc3ROb2RlKSB7CiAgICAgICAgICAgIHJhbmdlRW5kTm9kZSA9IGN1cnJlbnRNZXJnZS5maXJzdFRleHROb2RlOwogICAgICAgICAgICByYW5nZUVuZE9mZnNldCA9IGN1cnJlbnRNZXJnZS5nZXRMZW5ndGgoKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgY3VycmVudE1lcmdlID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIFRlc3Qgd2hldGhlciB0aGUgZmlyc3Qgbm9kZSBhZnRlciB0aGUgcmFuZ2UgbmVlZHMgbWVyZ2luZwogICAgICB2YXIgbmV4dFRleHROb2RlID0gdGhpcy5nZXRBZGphY2VudE1lcmdlYWJsZVRleHROb2RlKGxhc3ROb2RlLnBhcmVudE5vZGUsIHRydWUpOwogICAgICBpZiAobmV4dFRleHROb2RlKSB7CiAgICAgICAgaWYgKCFjdXJyZW50TWVyZ2UpIHsKICAgICAgICAgIGN1cnJlbnRNZXJnZSA9IG5ldyBNZXJnZShsYXN0Tm9kZSk7CiAgICAgICAgICBtZXJnZXMucHVzaChjdXJyZW50TWVyZ2UpOwogICAgICAgIH0KICAgICAgICBjdXJyZW50TWVyZ2UudGV4dE5vZGVzLnB1c2gobmV4dFRleHROb2RlKTsKICAgICAgfQoKICAgICAgLy8gRG8gdGhlIG1lcmdlcwogICAgICBpZiAobWVyZ2VzLmxlbmd0aCkgewogICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IG1lcmdlcy5sZW5ndGg7IGkgPCBsZW47ICsraSkgewogICAgICAgICAgbWVyZ2VzW2ldLmRvTWVyZ2UoKTsKICAgICAgICB9CiAgICAgICAgLy8gU2V0IHRoZSByYW5nZSBib3VuZGFyaWVzCiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQocmFuZ2VTdGFydE5vZGUsIHJhbmdlU3RhcnRPZmZzZXQpOwogICAgICAgIHJhbmdlLnNldEVuZChyYW5nZUVuZE5vZGUsIHJhbmdlRW5kT2Zmc2V0KTsKICAgICAgfQogICAgfSwKICAgIAogICAgZ2V0QWRqYWNlbnRNZXJnZWFibGVUZXh0Tm9kZTogZnVuY3Rpb24obm9kZSwgZm9yd2FyZCkgewogICAgICAgIHZhciBpc1RleHROb2RlID0gKG5vZGUubm9kZVR5cGUgPT0gd3lzaWh0bWw1LlRFWFRfTk9ERSk7CiAgICAgICAgdmFyIGVsID0gaXNUZXh0Tm9kZSA/IG5vZGUucGFyZW50Tm9kZSA6IG5vZGU7CiAgICAgICAgdmFyIGFkamFjZW50Tm9kZTsKICAgICAgICB2YXIgcHJvcE5hbWUgPSBmb3J3YXJkID8gIm5leHRTaWJsaW5nIiA6ICJwcmV2aW91c1NpYmxpbmciOwogICAgICAgIGlmIChpc1RleHROb2RlKSB7CiAgICAgICAgICAvLyBDYW4gbWVyZ2UgaWYgdGhlIG5vZGUncyBwcmV2aW91cy9uZXh0IHNpYmxpbmcgaXMgYSB0ZXh0IG5vZGUKICAgICAgICAgIGFkamFjZW50Tm9kZSA9IG5vZGVbcHJvcE5hbWVdOwogICAgICAgICAgaWYgKGFkamFjZW50Tm9kZSAmJiBhZGphY2VudE5vZGUubm9kZVR5cGUgPT0gd3lzaWh0bWw1LlRFWFRfTk9ERSkgewogICAgICAgICAgICByZXR1cm4gYWRqYWNlbnROb2RlOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBDb21wYXJlIGVsZW1lbnQgd2l0aCBpdHMgc2libGluZwogICAgICAgICAgYWRqYWNlbnROb2RlID0gZWxbcHJvcE5hbWVdOwogICAgICAgICAgaWYgKGFkamFjZW50Tm9kZSAmJiB0aGlzLmFyZUVsZW1lbnRzTWVyZ2VhYmxlKG5vZGUsIGFkamFjZW50Tm9kZSkpIHsKICAgICAgICAgICAgcmV0dXJuIGFkamFjZW50Tm9kZVtmb3J3YXJkID8gImZpcnN0Q2hpbGQiIDogImxhc3RDaGlsZCJdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0sCiAgICAKICAgIGFyZUVsZW1lbnRzTWVyZ2VhYmxlOiBmdW5jdGlvbihlbDEsIGVsMikgewogICAgICByZXR1cm4gcmFuZ3kuZG9tLmFycmF5Q29udGFpbnModGhpcy50YWdOYW1lcywgKGVsMS50YWdOYW1lIHx8ICIiKS50b0xvd2VyQ2FzZSgpKQogICAgICAgICYmIHJhbmd5LmRvbS5hcnJheUNvbnRhaW5zKHRoaXMudGFnTmFtZXMsIChlbDIudGFnTmFtZSB8fCAiIikudG9Mb3dlckNhc2UoKSkKICAgICAgICAmJiBoYXNTYW1lQ2xhc3NlcyhlbDEsIGVsMikKICAgICAgICAmJiBlbGVtZW50c0hhdmVTYW1lTm9uQ2xhc3NBdHRyaWJ1dGVzKGVsMSwgZWwyKTsKICAgIH0sCgogICAgY3JlYXRlQ29udGFpbmVyOiBmdW5jdGlvbihkb2MpIHsKICAgICAgdmFyIGVsID0gZG9jLmNyZWF0ZUVsZW1lbnQodGhpcy50YWdOYW1lc1swXSk7CiAgICAgIGlmICh0aGlzLmNzc0NsYXNzKSB7CiAgICAgICAgZWwuY2xhc3NOYW1lID0gdGhpcy5jc3NDbGFzczsKICAgICAgfQogICAgICByZXR1cm4gZWw7CiAgICB9LAoKICAgIGFwcGx5VG9UZXh0Tm9kZTogZnVuY3Rpb24odGV4dE5vZGUpIHsKICAgICAgdmFyIHBhcmVudCA9IHRleHROb2RlLnBhcmVudE5vZGU7CiAgICAgIGlmIChwYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSAmJiByYW5neS5kb20uYXJyYXlDb250YWlucyh0aGlzLnRhZ05hbWVzLCBwYXJlbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSkgewogICAgICAgIGlmICh0aGlzLmNzc0NsYXNzKSB7CiAgICAgICAgICBhZGRDbGFzcyhwYXJlbnQsIHRoaXMuY3NzQ2xhc3MsIHRoaXMuc2ltaWxhckNsYXNzUmVnRXhwKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIGVsID0gdGhpcy5jcmVhdGVDb250YWluZXIocmFuZ3kuZG9tLmdldERvY3VtZW50KHRleHROb2RlKSk7CiAgICAgICAgdGV4dE5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZWwsIHRleHROb2RlKTsKICAgICAgICBlbC5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7CiAgICAgIH0KICAgIH0sCgogICAgaXNSZW1vdmFibGU6IGZ1bmN0aW9uKGVsKSB7CiAgICAgIHJldHVybiByYW5neS5kb20uYXJyYXlDb250YWlucyh0aGlzLnRhZ05hbWVzLCBlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpICYmIHd5c2lodG1sNS5sYW5nLnN0cmluZyhlbC5jbGFzc05hbWUpLnRyaW0oKSA9PSB0aGlzLmNzc0NsYXNzOwogICAgfSwKCiAgICB1bmRvVG9UZXh0Tm9kZTogZnVuY3Rpb24odGV4dE5vZGUsIHJhbmdlLCBhbmNlc3RvcldpdGhDbGFzcykgewogICAgICBpZiAoIXJhbmdlLmNvbnRhaW5zTm9kZShhbmNlc3RvcldpdGhDbGFzcykpIHsKICAgICAgICAvLyBTcGxpdCBvdXQgdGhlIHBvcnRpb24gb2YgdGhlIGFuY2VzdG9yIGZyb20gd2hpY2ggd2UgY2FuIHJlbW92ZSB0aGUgQ1NTIGNsYXNzCiAgICAgICAgdmFyIGFuY2VzdG9yUmFuZ2UgPSByYW5nZS5jbG9uZVJhbmdlKCk7CiAgICAgICAgYW5jZXN0b3JSYW5nZS5zZWxlY3ROb2RlKGFuY2VzdG9yV2l0aENsYXNzKTsKCiAgICAgICAgaWYgKGFuY2VzdG9yUmFuZ2UuaXNQb2ludEluUmFuZ2UocmFuZ2UuZW5kQ29udGFpbmVyLCByYW5nZS5lbmRPZmZzZXQpICYmIGlzU3BsaXRQb2ludChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCkpIHsKICAgICAgICAgIHNwbGl0Tm9kZUF0KGFuY2VzdG9yV2l0aENsYXNzLCByYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCk7CiAgICAgICAgICByYW5nZS5zZXRFbmRBZnRlcihhbmNlc3RvcldpdGhDbGFzcyk7CiAgICAgICAgfQogICAgICAgIGlmIChhbmNlc3RvclJhbmdlLmlzUG9pbnRJblJhbmdlKHJhbmdlLnN0YXJ0Q29udGFpbmVyLCByYW5nZS5zdGFydE9mZnNldCkgJiYgaXNTcGxpdFBvaW50KHJhbmdlLnN0YXJ0Q29udGFpbmVyLCByYW5nZS5zdGFydE9mZnNldCkpIHsKICAgICAgICAgIGFuY2VzdG9yV2l0aENsYXNzID0gc3BsaXROb2RlQXQoYW5jZXN0b3JXaXRoQ2xhc3MsIHJhbmdlLnN0YXJ0Q29udGFpbmVyLCByYW5nZS5zdGFydE9mZnNldCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICBpZiAodGhpcy5zaW1pbGFyQ2xhc3NSZWdFeHApIHsKICAgICAgICByZW1vdmVDbGFzcyhhbmNlc3RvcldpdGhDbGFzcywgdGhpcy5zaW1pbGFyQ2xhc3NSZWdFeHApOwogICAgICB9CiAgICAgIGlmICh0aGlzLmlzUmVtb3ZhYmxlKGFuY2VzdG9yV2l0aENsYXNzKSkgewogICAgICAgIHJlcGxhY2VXaXRoT3duQ2hpbGRyZW4oYW5jZXN0b3JXaXRoQ2xhc3MpOwogICAgICB9CiAgICB9LAoKICAgIGFwcGx5VG9SYW5nZTogZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICB2YXIgdGV4dE5vZGVzID0gcmFuZ2UuZ2V0Tm9kZXMoW3d5c2lodG1sNS5URVhUX05PREVdKTsKICAgICAgICBpZiAoIXRleHROb2Rlcy5sZW5ndGgpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5jcmVhdGVDb250YWluZXIocmFuZ2UuZW5kQ29udGFpbmVyLm93bmVyRG9jdW1lbnQpOwogICAgICAgICAgICByYW5nZS5zdXJyb3VuZENvbnRlbnRzKG5vZGUpOwogICAgICAgICAgICB0aGlzLnNlbGVjdE5vZGUocmFuZ2UsIG5vZGUpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9IGNhdGNoKGUpIHt9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJhbmdlLnNwbGl0Qm91bmRhcmllcygpOwogICAgICAgIHRleHROb2RlcyA9IHJhbmdlLmdldE5vZGVzKFt3eXNpaHRtbDUuVEVYVF9OT0RFXSk7CiAgICAgICAgCiAgICAgICAgaWYgKHRleHROb2Rlcy5sZW5ndGgpIHsKICAgICAgICAgIHZhciB0ZXh0Tm9kZTsKCiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGV4dE5vZGVzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7CiAgICAgICAgICAgIHRleHROb2RlID0gdGV4dE5vZGVzW2ldOwogICAgICAgICAgICBpZiAoIXRoaXMuZ2V0QW5jZXN0b3JXaXRoQ2xhc3ModGV4dE5vZGUpKSB7CiAgICAgICAgICAgICAgdGhpcy5hcHBseVRvVGV4dE5vZGUodGV4dE5vZGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICAKICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KHRleHROb2Rlc1swXSwgMCk7CiAgICAgICAgICB0ZXh0Tm9kZSA9IHRleHROb2Rlc1t0ZXh0Tm9kZXMubGVuZ3RoIC0gMV07CiAgICAgICAgICByYW5nZS5zZXRFbmQodGV4dE5vZGUsIHRleHROb2RlLmxlbmd0aCk7CiAgICAgICAgICAKICAgICAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZSkgewogICAgICAgICAgICB0aGlzLnBvc3RBcHBseSh0ZXh0Tm9kZXMsIHJhbmdlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICB9LAoKICAgIHVuZG9Ub1JhbmdlOiBmdW5jdGlvbihyYW5nZSkgewogICAgICB2YXIgdGV4dE5vZGVzID0gcmFuZ2UuZ2V0Tm9kZXMoW3d5c2lodG1sNS5URVhUX05PREVdKSwgdGV4dE5vZGUsIGFuY2VzdG9yV2l0aENsYXNzOwogICAgICBpZiAodGV4dE5vZGVzLmxlbmd0aCkgewogICAgICAgIHJhbmdlLnNwbGl0Qm91bmRhcmllcygpOwogICAgICAgIHRleHROb2RlcyA9IHJhbmdlLmdldE5vZGVzKFt3eXNpaHRtbDUuVEVYVF9OT0RFXSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIGRvYyA9IHJhbmdlLmVuZENvbnRhaW5lci5vd25lckRvY3VtZW50LAogICAgICAgICAgICBub2RlID0gZG9jLmNyZWF0ZVRleHROb2RlKHd5c2lodG1sNS5JTlZJU0lCTEVfU1BBQ0UpOwogICAgICAgIHJhbmdlLmluc2VydE5vZGUobm9kZSk7CiAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZShub2RlKTsKICAgICAgICB0ZXh0Tm9kZXMgPSBbbm9kZV07CiAgICAgIH0KICAgICAgCiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0ZXh0Tm9kZXMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICB0ZXh0Tm9kZSA9IHRleHROb2Rlc1tpXTsKICAgICAgICBhbmNlc3RvcldpdGhDbGFzcyA9IHRoaXMuZ2V0QW5jZXN0b3JXaXRoQ2xhc3ModGV4dE5vZGUpOwogICAgICAgIGlmIChhbmNlc3RvcldpdGhDbGFzcykgewogICAgICAgICAgdGhpcy51bmRvVG9UZXh0Tm9kZSh0ZXh0Tm9kZSwgcmFuZ2UsIGFuY2VzdG9yV2l0aENsYXNzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIGlmIChsZW4gPT0gMSkgewogICAgICAgIHRoaXMuc2VsZWN0Tm9kZShyYW5nZSwgdGV4dE5vZGVzWzBdKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByYW5nZS5zZXRTdGFydCh0ZXh0Tm9kZXNbMF0sIDApOwogICAgICAgIHRleHROb2RlID0gdGV4dE5vZGVzW3RleHROb2Rlcy5sZW5ndGggLSAxXTsKICAgICAgICByYW5nZS5zZXRFbmQodGV4dE5vZGUsIHRleHROb2RlLmxlbmd0aCk7CgogICAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZSkgewogICAgICAgICAgdGhpcy5wb3N0QXBwbHkodGV4dE5vZGVzLCByYW5nZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgCiAgICBzZWxlY3ROb2RlOiBmdW5jdGlvbihyYW5nZSwgbm9kZSkgewogICAgICB2YXIgaXNFbGVtZW50ICAgICAgID0gbm9kZS5ub2RlVHlwZSA9PT0gd3lzaWh0bWw1LkVMRU1FTlRfTk9ERSwKICAgICAgICAgIGNhbkhhdmVIVE1MICAgICA9ICJjYW5IYXZlSFRNTCIgaW4gbm9kZSA/IG5vZGUuY2FuSGF2ZUhUTUwgOiB0cnVlLAogICAgICAgICAgY29udGVudCAgICAgICAgID0gaXNFbGVtZW50ID8gbm9kZS5pbm5lckhUTUwgOiBub2RlLmRhdGEsCiAgICAgICAgICBpc0VtcHR5ICAgICAgICAgPSAoY29udGVudCA9PT0gIiIgfHwgY29udGVudCA9PT0gd3lzaWh0bWw1LklOVklTSUJMRV9TUEFDRSk7CgogICAgICBpZiAoaXNFbXB0eSAmJiBpc0VsZW1lbnQgJiYgY2FuSGF2ZUhUTUwpIHsKICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBjYXJldCBpcyB2aXNpYmxlIGluIG5vZGUgYnkgaW5zZXJ0aW5nIGEgemVybyB3aWR0aCBubyBicmVha2luZyBzcGFjZQogICAgICAgIHRyeSB7IG5vZGUuaW5uZXJIVE1MID0gd3lzaWh0bWw1LklOVklTSUJMRV9TUEFDRTsgfSBjYXRjaChlKSB7fQogICAgICB9CiAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhub2RlKTsKICAgICAgaWYgKGlzRW1wdHkgJiYgaXNFbGVtZW50KSB7CiAgICAgICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpOwogICAgICB9IGVsc2UgaWYgKGlzRW1wdHkpIHsKICAgICAgICByYW5nZS5zZXRTdGFydEFmdGVyKG5vZGUpOwogICAgICAgIHJhbmdlLnNldEVuZEFmdGVyKG5vZGUpOwogICAgICB9CiAgICB9LAogICAgCiAgICBnZXRUZXh0U2VsZWN0ZWRCeVJhbmdlOiBmdW5jdGlvbih0ZXh0Tm9kZSwgcmFuZ2UpIHsKICAgICAgdmFyIHRleHRSYW5nZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTsKICAgICAgdGV4dFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyh0ZXh0Tm9kZSk7CgogICAgICB2YXIgaW50ZXJzZWN0aW9uUmFuZ2UgPSB0ZXh0UmFuZ2UuaW50ZXJzZWN0aW9uKHJhbmdlKTsKICAgICAgdmFyIHRleHQgPSBpbnRlcnNlY3Rpb25SYW5nZSA/IGludGVyc2VjdGlvblJhbmdlLnRvU3RyaW5nKCkgOiAiIjsKICAgICAgdGV4dFJhbmdlLmRldGFjaCgpOwoKICAgICAgcmV0dXJuIHRleHQ7CiAgICB9LAoKICAgIGlzQXBwbGllZFRvUmFuZ2U6IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgIHZhciBhbmNlc3RvcnMgPSBbXSwKICAgICAgICAgIGFuY2VzdG9yLAogICAgICAgICAgdGV4dE5vZGVzID0gcmFuZ2UuZ2V0Tm9kZXMoW3d5c2lodG1sNS5URVhUX05PREVdKTsKICAgICAgaWYgKCF0ZXh0Tm9kZXMubGVuZ3RoKSB7CiAgICAgICAgYW5jZXN0b3IgPSB0aGlzLmdldEFuY2VzdG9yV2l0aENsYXNzKHJhbmdlLnN0YXJ0Q29udGFpbmVyKTsKICAgICAgICByZXR1cm4gYW5jZXN0b3IgPyBbYW5jZXN0b3JdIDogZmFsc2U7CiAgICAgIH0KICAgICAgCiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0ZXh0Tm9kZXMubGVuZ3RoLCBzZWxlY3RlZFRleHQ7IGkgPCBsZW47ICsraSkgewogICAgICAgIHNlbGVjdGVkVGV4dCA9IHRoaXMuZ2V0VGV4dFNlbGVjdGVkQnlSYW5nZSh0ZXh0Tm9kZXNbaV0sIHJhbmdlKTsKICAgICAgICBhbmNlc3RvciA9IHRoaXMuZ2V0QW5jZXN0b3JXaXRoQ2xhc3ModGV4dE5vZGVzW2ldKTsKICAgICAgICBpZiAoc2VsZWN0ZWRUZXh0ICE9ICIiICYmICFhbmNlc3RvcikgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhbmNlc3RvcnMucHVzaChhbmNlc3Rvcik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBhbmNlc3RvcnM7CiAgICB9LAoKICAgIHRvZ2dsZVJhbmdlOiBmdW5jdGlvbihyYW5nZSkgewogICAgICBpZiAodGhpcy5pc0FwcGxpZWRUb1JhbmdlKHJhbmdlKSkgewogICAgICAgIHRoaXMudW5kb1RvUmFuZ2UocmFuZ2UpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuYXBwbHlUb1JhbmdlKHJhbmdlKTsKICAgICAgfQogICAgfQogIH07CgogIHd5c2lodG1sNS5zZWxlY3Rpb24uSFRNTEFwcGxpZXIgPSBIVE1MQXBwbGllcjsKICAKfSkod3lzaWh0bWw1LCByYW5neSk7LyoqCiAqIFJpY2ggVGV4dCBRdWVyeS9Gb3JtYXR0aW5nIENvbW1hbmRzCiAqIAogKiBAZXhhbXBsZQogKiAgICB2YXIgY29tbWFuZHMgPSBuZXcgd3lzaWh0bWw1LkNvbW1hbmRzKGVkaXRvcik7CiAqLwp3eXNpaHRtbDUuQ29tbWFuZHMgPSBCYXNlLmV4dGVuZCgKICAvKiogQHNjb3BlIHd5c2lodG1sNS5Db21tYW5kcy5wcm90b3R5cGUgKi8gewogIGNvbnN0cnVjdG9yOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgIHRoaXMuZWRpdG9yICAgPSBlZGl0b3I7CiAgICB0aGlzLmNvbXBvc2VyID0gZWRpdG9yLmNvbXBvc2VyOwogICAgdGhpcy5kb2MgICAgICA9IHRoaXMuY29tcG9zZXIuZG9jOwogIH0sCiAgCiAgLyoqCiAgICogQ2hlY2sgd2hldGhlciB0aGUgYnJvd3NlciBzdXBwb3J0cyB0aGUgZ2l2ZW4gY29tbWFuZAogICAqCiAgICogQHBhcmFtIHtTdHJpbmd9IGNvbW1hbmQgVGhlIGNvbW1hbmQgc3RyaW5nIHdoaWNoIHRvIGNoZWNrIChlZy4gImJvbGQiLCAiaXRhbGljIiwgImluc2VydFVub3JkZXJlZExpc3QiKQogICAqIEBleGFtcGxlCiAgICogICAgY29tbWFuZHMuc3VwcG9ydHMoImNyZWF0ZUxpbmsiKTsKICAgKi8KICBzdXBwb3J0OiBmdW5jdGlvbihjb21tYW5kKSB7CiAgICByZXR1cm4gd3lzaWh0bWw1LmJyb3dzZXIuc3VwcG9ydHNDb21tYW5kKHRoaXMuZG9jLCBjb21tYW5kKTsKICB9LAogIAogIC8qKgogICAqIENoZWNrIHdoZXRoZXIgdGhlIGJyb3dzZXIgc3VwcG9ydHMgdGhlIGdpdmVuIGNvbW1hbmQKICAgKgogICAqIEBwYXJhbSB7U3RyaW5nfSBjb21tYW5kIFRoZSBjb21tYW5kIHN0cmluZyB3aGljaCB0byBleGVjdXRlIChlZy4gImJvbGQiLCAiaXRhbGljIiwgImluc2VydFVub3JkZXJlZExpc3QiKQogICAqIEBwYXJhbSB7U3RyaW5nfSBbdmFsdWVdIFRoZSBjb21tYW5kIHZhbHVlIHBhcmFtZXRlciwgbmVlZGVkIGZvciBzb21lIGNvbW1hbmRzICgiY3JlYXRlTGluayIsICJpbnNlcnRJbWFnZSIsIC4uLiksIG9wdGlvbmFsIGZvciBjb21tYW5kcyB0aGF0IGRvbid0IHJlcXVpcmUgb25lICgiYm9sZCIsICJ1bmRlcmxpbmUiLCAuLi4pCiAgICogQGV4YW1wbGUKICAgKiAgICBjb21tYW5kcy5leGVjKCJpbnNlcnRJbWFnZSIsICJodHRwOi8vYTEudHdpbWcuY29tL3Byb2ZpbGVfaW1hZ2VzLzExMzg2ODY1NS9zY2hyZWlfdHdpdHRlcl9yZWFzb25hYmx5X3NtYWxsLmpwZyIpOwogICAqLwogIGV4ZWM6IGZ1bmN0aW9uKGNvbW1hbmQsIHZhbHVlKSB7CiAgICB2YXIgb2JqICAgICA9IHd5c2lodG1sNS5jb21tYW5kc1tjb21tYW5kXSwKICAgICAgICBhcmdzICAgID0gd3lzaWh0bWw1LmxhbmcuYXJyYXkoYXJndW1lbnRzKS5nZXQoKSwKICAgICAgICBtZXRob2QgID0gb2JqICYmIG9iai5leGVjLAogICAgICAgIHJlc3VsdCAgPSBudWxsOwogICAgCiAgICB0aGlzLmVkaXRvci5maXJlKCJiZWZvcmVjb21tYW5kOmNvbXBvc2VyIik7CiAgICAKICAgIGlmIChtZXRob2QpIHsKICAgICAgYXJncy51bnNoaWZ0KHRoaXMuY29tcG9zZXIpOwogICAgICByZXN1bHQgPSBtZXRob2QuYXBwbHkob2JqLCBhcmdzKTsKICAgIH0gZWxzZSB7CiAgICAgIHRyeSB7CiAgICAgICAgLy8gdHJ5L2NhdGNoIGZvciBidWdneSBmaXJlZm94CiAgICAgICAgcmVzdWx0ID0gdGhpcy5kb2MuZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsIHZhbHVlKTsKICAgICAgfSBjYXRjaChlKSB7fQogICAgfQogICAgCiAgICB0aGlzLmVkaXRvci5maXJlKCJhZnRlcmNvbW1hbmQ6Y29tcG9zZXIiKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfSwKICAKICAvKioKICAgKiBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IGNvbW1hbmQgaXMgYWN0aXZlCiAgICogSWYgdGhlIGNhcmV0IGlzIHdpdGhpbiBhIGJvbGQgdGV4dCwgdGhlbiBjYWxsaW5nIHRoaXMgd2l0aCBjb21tYW5kICJib2xkIiBzaG91bGQgcmV0dXJuIHRydWUKICAgKgogICAqIEBwYXJhbSB7U3RyaW5nfSBjb21tYW5kIFRoZSBjb21tYW5kIHN0cmluZyB3aGljaCB0byBjaGVjayAoZWcuICJib2xkIiwgIml0YWxpYyIsICJpbnNlcnRVbm9yZGVyZWRMaXN0IikKICAgKiBAcGFyYW0ge1N0cmluZ30gW2NvbW1hbmRWYWx1ZV0gVGhlIGNvbW1hbmQgdmFsdWUgcGFyYW1ldGVyIChlZy4gZm9yICJpbnNlcnRJbWFnZSIgdGhlIGltYWdlIHNyYykKICAgKiBAcmV0dXJuIHtCb29sZWFufSBXaGV0aGVyIHRoZSBjb21tYW5kIGlzIGFjdGl2ZQogICAqIEBleGFtcGxlCiAgICogICAgdmFyIGlzQ3VycmVudFNlbGVjdGlvbkJvbGQgPSBjb21tYW5kcy5zdGF0ZSgiYm9sZCIpOwogICAqLwogIHN0YXRlOiBmdW5jdGlvbihjb21tYW5kLCBjb21tYW5kVmFsdWUpIHsKICAgIHZhciBvYmogICAgID0gd3lzaWh0bWw1LmNvbW1hbmRzW2NvbW1hbmRdLAogICAgICAgIGFyZ3MgICAgPSB3eXNpaHRtbDUubGFuZy5hcnJheShhcmd1bWVudHMpLmdldCgpLAogICAgICAgIG1ldGhvZCAgPSBvYmogJiYgb2JqLnN0YXRlOwogICAgaWYgKG1ldGhvZCkgewogICAgICBhcmdzLnVuc2hpZnQodGhpcy5jb21wb3Nlcik7CiAgICAgIHJldHVybiBtZXRob2QuYXBwbHkob2JqLCBhcmdzKTsKICAgIH0gZWxzZSB7CiAgICAgIHRyeSB7CiAgICAgICAgLy8gdHJ5L2NhdGNoIGZvciBidWdneSBmaXJlZm94CiAgICAgICAgcmV0dXJuIHRoaXMuZG9jLnF1ZXJ5Q29tbWFuZFN0YXRlKGNvbW1hbmQpOwogICAgICB9IGNhdGNoKGUpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICB9LAogIAogIC8qKgogICAqIEdldCB0aGUgY3VycmVudCBjb21tYW5kJ3MgdmFsdWUKICAgKgogICAqIEBwYXJhbSB7U3RyaW5nfSBjb21tYW5kIFRoZSBjb21tYW5kIHN0cmluZyB3aGljaCB0byBjaGVjayAoZWcuICJmb3JtYXRCbG9jayIpCiAgICogQHJldHVybiB7U3RyaW5nfSBUaGUgY29tbWFuZCB2YWx1ZQogICAqIEBleGFtcGxlCiAgICogICAgdmFyIGN1cnJlbnRCbG9ja0VsZW1lbnQgPSBjb21tYW5kcy52YWx1ZSgiZm9ybWF0QmxvY2siKTsKICAgKi8KICB2YWx1ZTogZnVuY3Rpb24oY29tbWFuZCkgewogICAgdmFyIG9iaiAgICAgPSB3eXNpaHRtbDUuY29tbWFuZHNbY29tbWFuZF0sCiAgICAgICAgbWV0aG9kICA9IG9iaiAmJiBvYmoudmFsdWU7CiAgICBpZiAobWV0aG9kKSB7CiAgICAgIHJldHVybiBtZXRob2QuY2FsbChvYmosIHRoaXMuY29tcG9zZXIsIGNvbW1hbmQpOwogICAgfSBlbHNlIHsKICAgICAgdHJ5IHsKICAgICAgICAvLyB0cnkvY2F0Y2ggZm9yIGJ1Z2d5IGZpcmVmb3gKICAgICAgICByZXR1cm4gdGhpcy5kb2MucXVlcnlDb21tYW5kVmFsdWUoY29tbWFuZCk7CiAgICAgIH0gY2F0Y2goZSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgfQp9KTsKKGZ1bmN0aW9uKHd5c2lodG1sNSkgewogIHZhciB1bmRlZjsKICAKICB3eXNpaHRtbDUuY29tbWFuZHMuYm9sZCA9IHsKICAgIGV4ZWM6IGZ1bmN0aW9uKGNvbXBvc2VyLCBjb21tYW5kKSB7CiAgICAgIHJldHVybiB3eXNpaHRtbDUuY29tbWFuZHMuZm9ybWF0SW5saW5lLmV4ZWMoY29tcG9zZXIsIGNvbW1hbmQsICJiIik7CiAgICB9LAoKICAgIHN0YXRlOiBmdW5jdGlvbihjb21wb3NlciwgY29tbWFuZCwgY29sb3IpIHsKICAgICAgLy8gZWxlbWVudC5vd25lckRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN0YXRlKCJib2xkIikgcmVzdWx0czoKICAgICAgLy8gZmlyZWZveDogb25seSA8Yj4KICAgICAgLy8gY2hyb21lOiAgPGI+LCA8c3Ryb25nPiwgPGgxPiwgPGgyPiwgLi4uCiAgICAgIC8vIGllOiAgICAgIDxiPiwgPHN0cm9uZz4KICAgICAgLy8gb3BlcmE6ICAgPGI+LCA8c3Ryb25nPgogICAgICByZXR1cm4gd3lzaWh0bWw1LmNvbW1hbmRzLmZvcm1hdElubGluZS5zdGF0ZShjb21wb3NlciwgY29tbWFuZCwgImIiKTsKICAgIH0sCgogICAgdmFsdWU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdW5kZWY7CiAgICB9CiAgfTsKfSkod3lzaWh0bWw1KTsKCihmdW5jdGlvbih3eXNpaHRtbDUpIHsKICB2YXIgdW5kZWYsCiAgICAgIE5PREVfTkFNRSA9ICJBIiwKICAgICAgZG9tICAgICAgID0gd3lzaWh0bWw1LmRvbTsKICAKICBmdW5jdGlvbiBfcmVtb3ZlRm9ybWF0KGNvbXBvc2VyLCBhbmNob3JzKSB7CiAgICB2YXIgbGVuZ3RoICA9IGFuY2hvcnMubGVuZ3RoLAogICAgICAgIGkgICAgICAgPSAwLAogICAgICAgIGFuY2hvciwKICAgICAgICBjb2RlRWxlbWVudCwKICAgICAgICB0ZXh0Q29udGVudDsKICAgIGZvciAoOyBpPGxlbmd0aDsgaSsrKSB7CiAgICAgIGFuY2hvciAgICAgID0gYW5jaG9yc1tpXTsKICAgICAgY29kZUVsZW1lbnQgPSBkb20uZ2V0UGFyZW50RWxlbWVudChhbmNob3IsIHsgbm9kZU5hbWU6ICJjb2RlIiB9KTsKICAgICAgdGV4dENvbnRlbnQgPSBkb20uZ2V0VGV4dENvbnRlbnQoYW5jaG9yKTsKCiAgICAgIC8vIGlmIDxhPiBjb250YWlucyB1cmwtbGlrZSB0ZXh0IGNvbnRlbnQsIHJlbmFtZSBpdCB0byA8Y29kZT4gdG8gcHJldmVudCByZS1hdXRvbGlua2luZwogICAgICAvLyBlbHNlIHJlcGxhY2UgPGE+IHdpdGggaXRzIGNoaWxkTm9kZXMKICAgICAgaWYgKHRleHRDb250ZW50Lm1hdGNoKGRvbS5hdXRvTGluay5VUkxfUkVHX0VYUCkgJiYgIWNvZGVFbGVtZW50KSB7CiAgICAgICAgLy8gPGNvZGU+IGVsZW1lbnQgaXMgdXNlZCB0byBwcmV2ZW50IGxhdGVyIGF1dG8tbGlua2luZyBvZiB0aGUgY29udGVudAogICAgICAgIGNvZGVFbGVtZW50ID0gZG9tLnJlbmFtZUVsZW1lbnQoYW5jaG9yLCAiY29kZSIpOwogICAgICB9IGVsc2UgewogICAgICAgIGRvbS5yZXBsYWNlV2l0aENoaWxkTm9kZXMoYW5jaG9yKTsKICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gX2Zvcm1hdChjb21wb3NlciwgYXR0cmlidXRlcykgewogICAgdmFyIGRvYyAgICAgICAgICAgICA9IGNvbXBvc2VyLmRvYywKICAgICAgICB0ZW1wQ2xhc3MgICAgICAgPSAiX3d5c2lodG1sNS10ZW1wLSIgKyAoK25ldyBEYXRlKCkpLAogICAgICAgIHRlbXBDbGFzc1JlZ0V4cCA9IC9ub24tbWF0Y2hpbmctY2xhc3MvZywKICAgICAgICBpICAgICAgICAgICAgICAgPSAwLAogICAgICAgIGxlbmd0aCwKICAgICAgICBhbmNob3JzLAogICAgICAgIGFuY2hvciwKICAgICAgICBoYXNFbGVtZW50Q2hpbGQsCiAgICAgICAgaXNFbXB0eSwKICAgICAgICBlbGVtZW50VG9TZXRDYXJldEFmdGVyLAogICAgICAgIHRleHRDb250ZW50LAogICAgICAgIHdoaXRlU3BhY2UsCiAgICAgICAgajsKICAgIHd5c2lodG1sNS5jb21tYW5kcy5mb3JtYXRJbmxpbmUuZXhlYyhjb21wb3NlciwgdW5kZWYsIE5PREVfTkFNRSwgdGVtcENsYXNzLCB0ZW1wQ2xhc3NSZWdFeHApOwogICAgYW5jaG9ycyA9IGRvYy5xdWVyeVNlbGVjdG9yQWxsKE5PREVfTkFNRSArICIuIiArIHRlbXBDbGFzcyk7CiAgICBsZW5ndGggID0gYW5jaG9ycy5sZW5ndGg7CiAgICBmb3IgKDsgaTxsZW5ndGg7IGkrKykgewogICAgICBhbmNob3IgPSBhbmNob3JzW2ldOwogICAgICBhbmNob3IucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpOwogICAgICBmb3IgKGogaW4gYXR0cmlidXRlcykgewogICAgICAgIGFuY2hvci5zZXRBdHRyaWJ1dGUoaiwgYXR0cmlidXRlc1tqXSk7CiAgICAgIH0KICAgIH0KCiAgICBlbGVtZW50VG9TZXRDYXJldEFmdGVyID0gYW5jaG9yOwogICAgaWYgKGxlbmd0aCA9PT0gMSkgewogICAgICB0ZXh0Q29udGVudCA9IGRvbS5nZXRUZXh0Q29udGVudChhbmNob3IpOwogICAgICBoYXNFbGVtZW50Q2hpbGQgPSAhIWFuY2hvci5xdWVyeVNlbGVjdG9yKCIqIik7CiAgICAgIGlzRW1wdHkgPSB0ZXh0Q29udGVudCA9PT0gIiIgfHwgdGV4dENvbnRlbnQgPT09IHd5c2lodG1sNS5JTlZJU0lCTEVfU1BBQ0U7CiAgICAgIGlmICghaGFzRWxlbWVudENoaWxkICYmIGlzRW1wdHkpIHsKICAgICAgICBkb20uc2V0VGV4dENvbnRlbnQoYW5jaG9yLCBhdHRyaWJ1dGVzLnRleHQgfHwgYW5jaG9yLmhyZWYpOwogICAgICAgIHdoaXRlU3BhY2UgPSBkb2MuY3JlYXRlVGV4dE5vZGUoIiAiKTsKICAgICAgICBjb21wb3Nlci5zZWxlY3Rpb24uc2V0QWZ0ZXIoYW5jaG9yKTsKICAgICAgICBjb21wb3Nlci5zZWxlY3Rpb24uaW5zZXJ0Tm9kZSh3aGl0ZVNwYWNlKTsKICAgICAgICBlbGVtZW50VG9TZXRDYXJldEFmdGVyID0gd2hpdGVTcGFjZTsKICAgICAgfQogICAgfQogICAgY29tcG9zZXIuc2VsZWN0aW9uLnNldEFmdGVyKGVsZW1lbnRUb1NldENhcmV0QWZ0ZXIpOwogIH0KICAKICB3eXNpaHRtbDUuY29tbWFuZHMuY3JlYXRlTGluayA9IHsKICAgIC8qKgogICAgICogVE9ETzogVXNlIEhUTUxBcHBsaWVyIG9yIGZvcm1hdElubGluZSBoZXJlCiAgICAgKgogICAgICogVHVybnMgc2VsZWN0aW9uIGludG8gYSBsaW5rCiAgICAgKiBJZiBzZWxlY3Rpb24gaXMgYWxyZWFkeSBhIGxpbmssIGl0IHJlbW92ZXMgdGhlIGxpbmsgYW5kIHdyYXBzIGl0IHdpdGggYSA8Y29kZT4gZWxlbWVudAogICAgICogVGhlIDxjb2RlPiBlbGVtZW50IGlzIG5lZWRlZCB0byBhdm9pZCBhdXRvIGxpbmtpbmcKICAgICAqIAogICAgICogQGV4YW1wbGUKICAgICAqICAgIC8vIGVpdGhlciAuLi4KICAgICAqICAgIHd5c2lodG1sNS5jb21tYW5kcy5jcmVhdGVMaW5rLmV4ZWMoY29tcG9zZXIsICJjcmVhdGVMaW5rIiwgImh0dHA6Ly93d3cuZ29vZ2xlLmRlIik7CiAgICAgKiAgICAvLyAuLi4gb3IgLi4uCiAgICAgKiAgICB3eXNpaHRtbDUuY29tbWFuZHMuY3JlYXRlTGluay5leGVjKGNvbXBvc2VyLCAiY3JlYXRlTGluayIsIHsgaHJlZjogImh0dHA6Ly93d3cuZ29vZ2xlLmRlIiwgdGFyZ2V0OiAiX2JsYW5rIiB9KTsKICAgICAqLwogICAgZXhlYzogZnVuY3Rpb24oY29tcG9zZXIsIGNvbW1hbmQsIHZhbHVlKSB7CiAgICAgIHZhciBhbmNob3JzID0gdGhpcy5zdGF0ZShjb21wb3NlciwgY29tbWFuZCk7CiAgICAgIGlmIChhbmNob3JzKSB7CiAgICAgICAgLy8gU2VsZWN0aW9uIGNvbnRhaW5zIGxpbmtzCiAgICAgICAgY29tcG9zZXIuc2VsZWN0aW9uLmV4ZWN1dGVBbmRSZXN0b3JlKGZ1bmN0aW9uKCkgewogICAgICAgICAgX3JlbW92ZUZvcm1hdChjb21wb3NlciwgYW5jaG9ycyk7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQ3JlYXRlIGxpbmtzCiAgICAgICAgdmFsdWUgPSB0eXBlb2YodmFsdWUpID09PSAib2JqZWN0IiA/IHZhbHVlIDogeyBocmVmOiB2YWx1ZSB9OwogICAgICAgIF9mb3JtYXQoY29tcG9zZXIsIHZhbHVlKTsKICAgICAgfQogICAgfSwKCiAgICBzdGF0ZTogZnVuY3Rpb24oY29tcG9zZXIsIGNvbW1hbmQpIHsKICAgICAgcmV0dXJuIHd5c2lodG1sNS5jb21tYW5kcy5mb3JtYXRJbmxpbmUuc3RhdGUoY29tcG9zZXIsIGNvbW1hbmQsICJBIik7CiAgICB9LAoKICAgIHZhbHVlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHVuZGVmOwogICAgfQogIH07Cn0pKHd5c2lodG1sNSk7LyoqCiAqIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJmb250U2l6ZSIpIHdpbGwgY3JlYXRlIGVpdGhlciBpbmxpbmUgc3R5bGVzIChmaXJlZm94LCBjaHJvbWUpIG9yIHVzZSBmb250IHRhZ3MKICogd2hpY2ggd2UgZG9uJ3Qgd2FudAogKiBJbnN0ZWFkIHdlIHNldCBhIGNzcyBjbGFzcwogKi8KKGZ1bmN0aW9uKHd5c2lodG1sNSkgewogIHZhciB1bmRlZiwKICAgICAgUkVHX0VYUCA9IC93eXNpd3lnLWZvbnQtc2l6ZS1bYS16XC1dKy9nOwogIAogIHd5c2lodG1sNS5jb21tYW5kcy5mb250U2l6ZSA9IHsKICAgIGV4ZWM6IGZ1bmN0aW9uKGNvbXBvc2VyLCBjb21tYW5kLCBzaXplKSB7CiAgICAgIHJldHVybiB3eXNpaHRtbDUuY29tbWFuZHMuZm9ybWF0SW5saW5lLmV4ZWMoY29tcG9zZXIsIGNvbW1hbmQsICJzcGFuIiwgInd5c2l3eWctZm9udC1zaXplLSIgKyBzaXplLCBSRUdfRVhQKTsKICAgIH0sCgogICAgc3RhdGU6IGZ1bmN0aW9uKGNvbXBvc2VyLCBjb21tYW5kLCBzaXplKSB7CiAgICAgIHJldHVybiB3eXNpaHRtbDUuY29tbWFuZHMuZm9ybWF0SW5saW5lLnN0YXRlKGNvbXBvc2VyLCBjb21tYW5kLCAic3BhbiIsICJ3eXNpd3lnLWZvbnQtc2l6ZS0iICsgc2l6ZSwgUkVHX0VYUCk7CiAgICB9LAoKICAgIHZhbHVlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHVuZGVmOwogICAgfQogIH07Cn0pKHd5c2lodG1sNSk7Ci8qKgogKiBkb2N1bWVudC5leGVjQ29tbWFuZCgiZm9yZUNvbG9yIikgd2lsbCBjcmVhdGUgZWl0aGVyIGlubGluZSBzdHlsZXMgKGZpcmVmb3gsIGNocm9tZSkgb3IgdXNlIGZvbnQgdGFncwogKiB3aGljaCB3ZSBkb24ndCB3YW50CiAqIEluc3RlYWQgd2Ugc2V0IGEgY3NzIGNsYXNzCiAqLwooZnVuY3Rpb24od3lzaWh0bWw1KSB7CiAgdmFyIHVuZGVmLAogICAgICBSRUdfRVhQID0gL3d5c2l3eWctY29sb3ItW2Etel0rL2c7CiAgCiAgd3lzaWh0bWw1LmNvbW1hbmRzLmZvcmVDb2xvciA9IHsKICAgIGV4ZWM6IGZ1bmN0aW9uKGNvbXBvc2VyLCBjb21tYW5kLCBjb2xvcikgewogICAgICByZXR1cm4gd3lzaWh0bWw1LmNvbW1hbmRzLmZvcm1hdElubGluZS5leGVjKGNvbXBvc2VyLCBjb21tYW5kLCAic3BhbiIsICJ3eXNpd3lnLWNvbG9yLSIgKyBjb2xvciwgUkVHX0VYUCk7CiAgICB9LAoKICAgIHN0YXRlOiBmdW5jdGlvbihjb21wb3NlciwgY29tbWFuZCwgY29sb3IpIHsKICAgICAgcmV0dXJuIHd5c2lodG1sNS5jb21tYW5kcy5mb3JtYXRJbmxpbmUuc3RhdGUoY29tcG9zZXIsIGNvbW1hbmQsICJzcGFuIiwgInd5c2l3eWctY29sb3ItIiArIGNvbG9yLCBSRUdfRVhQKTsKICAgIH0sCgogICAgdmFsdWU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdW5kZWY7CiAgICB9CiAgfTsKfSkod3lzaWh0bWw1KTsoZnVuY3Rpb24od3lzaWh0bWw1KSB7CiAgdmFyIHVuZGVmLAogICAgICBkb20gICAgICAgICAgICAgICAgICAgICA9IHd5c2lodG1sNS5kb20sCiAgICAgIERFRkFVTFRfTk9ERV9OQU1FICAgICAgID0gIkRJViIsCiAgICAgIC8vIEZvbGxvd2luZyBlbGVtZW50cyBhcmUgZ3JvdXBlZAogICAgICAvLyB3aGVuIHRoZSBjYXJldCBpcyB3aXRoaW4gYSBIMSBhbmQgdGhlIEg0IGlzIGludm9rZWQsIHRoZSBIMSBzaG91bGQgdHVybiBpbnRvIEg0CiAgICAgIC8vIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBINCB3aXRoaW4gYSBIMSB3aGljaCB3b3VsZCByZXN1bHQgaW4gc2VtYW50aWNhbGx5IGludmFsaWQgaHRtbAogICAgICBCTE9DS19FTEVNRU5UU19HUk9VUCAgICA9IFsiSDEiLCAiSDIiLCAiSDMiLCAiSDQiLCAiSDUiLCAiSDYiLCAiUCIsICJCTE9DS1FVT1RFIiwgREVGQVVMVF9OT0RFX05BTUVdOwogIAogIC8qKgogICAqIFJlbW92ZSBzaW1pbGlhciBjbGFzc2VzIChiYXNlZCBvbiBjbGFzc1JlZ0V4cCkKICAgKiBhbmQgYWRkIHRoZSBkZXNpcmVkIGNsYXNzIG5hbWUKICAgKi8KICBmdW5jdGlvbiBfYWRkQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lLCBjbGFzc1JlZ0V4cCkgewogICAgaWYgKGVsZW1lbnQuY2xhc3NOYW1lKSB7CiAgICAgIF9yZW1vdmVDbGFzcyhlbGVtZW50LCBjbGFzc1JlZ0V4cCk7CiAgICAgIGVsZW1lbnQuY2xhc3NOYW1lICs9ICIgIiArIGNsYXNzTmFtZTsKICAgIH0gZWxzZSB7CiAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gY2xhc3NOYW1lOwogICAgfQogIH0KCiAgZnVuY3Rpb24gX3JlbW92ZUNsYXNzKGVsZW1lbnQsIGNsYXNzUmVnRXhwKSB7CiAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lLnJlcGxhY2UoY2xhc3NSZWdFeHAsICIiKTsKICB9CgogIC8qKgogICAqIENoZWNrIHdoZXRoZXIgZ2l2ZW4gbm9kZSBpcyBhIHRleHQgbm9kZSBhbmQgd2hldGhlciBpdCdzIGVtcHR5CiAgICovCiAgZnVuY3Rpb24gX2lzQmxhbmtUZXh0Tm9kZShub2RlKSB7CiAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gd3lzaWh0bWw1LlRFWFRfTk9ERSAmJiAhd3lzaWh0bWw1Lmxhbmcuc3RyaW5nKG5vZGUuZGF0YSkudHJpbSgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBwcmV2aW91cyBzaWJsaW5nIG5vZGUgdGhhdCBpcyBub3QgYSBibGFuayB0ZXh0IG5vZGUKICAgKi8KICBmdW5jdGlvbiBfZ2V0UHJldmlvdXNTaWJsaW5nVGhhdElzTm90Qmxhbmsobm9kZSkgewogICAgdmFyIHByZXZpb3VzU2libGluZyA9IG5vZGUucHJldmlvdXNTaWJsaW5nOwogICAgd2hpbGUgKHByZXZpb3VzU2libGluZyAmJiBfaXNCbGFua1RleHROb2RlKHByZXZpb3VzU2libGluZykpIHsKICAgICAgcHJldmlvdXNTaWJsaW5nID0gcHJldmlvdXNTaWJsaW5nLnByZXZpb3VzU2libGluZzsKICAgIH0KICAgIHJldHVybiBwcmV2aW91c1NpYmxpbmc7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIG5leHQgc2libGluZyBub2RlIHRoYXQgaXMgbm90IGEgYmxhbmsgdGV4dCBub2RlCiAgICovCiAgZnVuY3Rpb24gX2dldE5leHRTaWJsaW5nVGhhdElzTm90Qmxhbmsobm9kZSkgewogICAgdmFyIG5leHRTaWJsaW5nID0gbm9kZS5uZXh0U2libGluZzsKICAgIHdoaWxlIChuZXh0U2libGluZyAmJiBfaXNCbGFua1RleHROb2RlKG5leHRTaWJsaW5nKSkgewogICAgICBuZXh0U2libGluZyA9IG5leHRTaWJsaW5nLm5leHRTaWJsaW5nOwogICAgfQogICAgcmV0dXJuIG5leHRTaWJsaW5nOwogIH0KCiAgLyoqCiAgICogQWRkcyBsaW5lIGJyZWFrcyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBnaXZlbiBub2RlIGlmIHRoZSBwcmV2aW91cyBhbmQgbmV4dCBzaWJsaW5ncwogICAqIGFyZW4ndCBhbHJlYWR5IGNhdXNpbmcgYSB2aXN1YWwgbGluZSBicmVhayAoYmxvY2sgZWxlbWVudCBvciA8YnI+KQogICAqLwogIGZ1bmN0aW9uIF9hZGRMaW5lQnJlYWtCZWZvcmVBbmRBZnRlcihub2RlKSB7CiAgICB2YXIgZG9jICAgICAgICAgICAgID0gbm9kZS5vd25lckRvY3VtZW50LAogICAgICAgIG5leHRTaWJsaW5nICAgICA9IF9nZXROZXh0U2libGluZ1RoYXRJc05vdEJsYW5rKG5vZGUpLAogICAgICAgIHByZXZpb3VzU2libGluZyA9IF9nZXRQcmV2aW91c1NpYmxpbmdUaGF0SXNOb3RCbGFuayhub2RlKTsKCiAgICBpZiAobmV4dFNpYmxpbmcgJiYgIV9pc0xpbmVCcmVha09yQmxvY2tFbGVtZW50KG5leHRTaWJsaW5nKSkgewogICAgICBub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGRvYy5jcmVhdGVFbGVtZW50KCJiciIpLCBuZXh0U2libGluZyk7CiAgICB9CiAgICBpZiAocHJldmlvdXNTaWJsaW5nICYmICFfaXNMaW5lQnJlYWtPckJsb2NrRWxlbWVudChwcmV2aW91c1NpYmxpbmcpKSB7CiAgICAgIG5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZG9jLmNyZWF0ZUVsZW1lbnQoImJyIiksIG5vZGUpOwogICAgfQogIH0KCiAgLyoqCiAgICogUmVtb3ZlcyBsaW5lIGJyZWFrcyBiZWZvcmUgYW5kIGFmdGVyIHRoZSBnaXZlbiBub2RlCiAgICovCiAgZnVuY3Rpb24gX3JlbW92ZUxpbmVCcmVha0JlZm9yZUFuZEFmdGVyKG5vZGUpIHsKICAgIHZhciBuZXh0U2libGluZyAgICAgPSBfZ2V0TmV4dFNpYmxpbmdUaGF0SXNOb3RCbGFuayhub2RlKSwKICAgICAgICBwcmV2aW91c1NpYmxpbmcgPSBfZ2V0UHJldmlvdXNTaWJsaW5nVGhhdElzTm90Qmxhbmsobm9kZSk7CgogICAgaWYgKG5leHRTaWJsaW5nICYmIF9pc0xpbmVCcmVhayhuZXh0U2libGluZykpIHsKICAgICAgbmV4dFNpYmxpbmcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuZXh0U2libGluZyk7CiAgICB9CiAgICBpZiAocHJldmlvdXNTaWJsaW5nICYmIF9pc0xpbmVCcmVhayhwcmV2aW91c1NpYmxpbmcpKSB7CiAgICAgIHByZXZpb3VzU2libGluZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHByZXZpb3VzU2libGluZyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBfcmVtb3ZlTGFzdENoaWxkSWZMaW5lQnJlYWsobm9kZSkgewogICAgdmFyIGxhc3RDaGlsZCA9IG5vZGUubGFzdENoaWxkOwogICAgaWYgKGxhc3RDaGlsZCAmJiBfaXNMaW5lQnJlYWsobGFzdENoaWxkKSkgewogICAgICBsYXN0Q2hpbGQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsYXN0Q2hpbGQpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gX2lzTGluZUJyZWFrKG5vZGUpIHsKICAgIHJldHVybiBub2RlLm5vZGVOYW1lID09PSAiQlIiOwogIH0KCiAgLyoqCiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGVsbWVudCBjYXVzZXMgYSB2aXN1YWwgbGluZSBicmVhawogICAqICg8YnI+IG9yIGJsb2NrIGVsZW1lbnRzKQogICAqLwogIGZ1bmN0aW9uIF9pc0xpbmVCcmVha09yQmxvY2tFbGVtZW50KGVsZW1lbnQpIHsKICAgIGlmIChfaXNMaW5lQnJlYWsoZWxlbWVudCkpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgaWYgKGRvbS5nZXRTdHlsZSgiZGlzcGxheSIpLmZyb20oZWxlbWVudCkgPT09ICJibG9jayIpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLyoqCiAgICogRXhlY3V0ZSBuYXRpdmUgcXVlcnkgY29tbWFuZAogICAqIGFuZCBpZiBuZWNlc3NhcnkgbW9kaWZ5IHRoZSBpbnNlcnRlZCBub2RlJ3MgY2xhc3NOYW1lCiAgICovCiAgZnVuY3Rpb24gX2V4ZWNDb21tYW5kKGRvYywgY29tbWFuZCwgbm9kZU5hbWUsIGNsYXNzTmFtZSkgewogICAgaWYgKGNsYXNzTmFtZSkgewogICAgICB2YXIgZXZlbnRMaXN0ZW5lciA9IGRvbS5vYnNlcnZlKGRvYywgIkRPTU5vZGVJbnNlcnRlZCIsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCwKICAgICAgICAgICAgZGlzcGxheVN0eWxlOwogICAgICAgIGlmICh0YXJnZXQubm9kZVR5cGUgIT09IHd5c2lodG1sNS5FTEVNRU5UX05PREUpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZGlzcGxheVN0eWxlID0gZG9tLmdldFN0eWxlKCJkaXNwbGF5IikuZnJvbSh0YXJnZXQpOwogICAgICAgIGlmIChkaXNwbGF5U3R5bGUuc3Vic3RyKDAsIDYpICE9PSAiaW5saW5lIikgewogICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgb25seSBibG9jayBlbGVtZW50cyByZWNlaXZlIHRoZSBnaXZlbiBjbGFzcwogICAgICAgICAgdGFyZ2V0LmNsYXNzTmFtZSArPSAiICIgKyBjbGFzc05hbWU7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIGRvYy5leGVjQ29tbWFuZChjb21tYW5kLCBmYWxzZSwgbm9kZU5hbWUpOwogICAgaWYgKGV2ZW50TGlzdGVuZXIpIHsKICAgICAgZXZlbnRMaXN0ZW5lci5zdG9wKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBfc2VsZWN0TGluZUFuZFdyYXAoY29tcG9zZXIsIGVsZW1lbnQpIHsKICAgIGNvbXBvc2VyLnNlbGVjdGlvbi5zZWxlY3RMaW5lKCk7CiAgICBjb21wb3Nlci5zZWxlY3Rpb24uc3Vycm91bmQoZWxlbWVudCk7CiAgICBfcmVtb3ZlTGluZUJyZWFrQmVmb3JlQW5kQWZ0ZXIoZWxlbWVudCk7CiAgICBfcmVtb3ZlTGFzdENoaWxkSWZMaW5lQnJlYWsoZWxlbWVudCk7CiAgICBjb21wb3Nlci5zZWxlY3Rpb24uc2VsZWN0Tm9kZShlbGVtZW50KTsKICB9CgogIGZ1bmN0aW9uIF9oYXNDbGFzc2VzKGVsZW1lbnQpIHsKICAgIHJldHVybiAhIXd5c2lodG1sNS5sYW5nLnN0cmluZyhlbGVtZW50LmNsYXNzTmFtZSkudHJpbSgpOwogIH0KICAKICB3eXNpaHRtbDUuY29tbWFuZHMuZm9ybWF0QmxvY2sgPSB7CiAgICBleGVjOiBmdW5jdGlvbihjb21wb3NlciwgY29tbWFuZCwgbm9kZU5hbWUsIGNsYXNzTmFtZSwgY2xhc3NSZWdFeHApIHsKICAgICAgdmFyIGRvYyAgICAgICAgICA9IGNvbXBvc2VyLmRvYywKICAgICAgICAgIGJsb2NrRWxlbWVudCA9IHRoaXMuc3RhdGUoY29tcG9zZXIsIGNvbW1hbmQsIG5vZGVOYW1lLCBjbGFzc05hbWUsIGNsYXNzUmVnRXhwKSwKICAgICAgICAgIHNlbGVjdGVkTm9kZTsKCiAgICAgIG5vZGVOYW1lID0gdHlwZW9mKG5vZGVOYW1lKSA9PT0gInN0cmluZyIgPyBub2RlTmFtZS50b1VwcGVyQ2FzZSgpIDogbm9kZU5hbWU7CgogICAgICBpZiAoYmxvY2tFbGVtZW50KSB7CiAgICAgICAgY29tcG9zZXIuc2VsZWN0aW9uLmV4ZWN1dGVBbmRSZXN0b3JlU2ltcGxlKGZ1bmN0aW9uKCkgewogICAgICAgICAgaWYgKGNsYXNzUmVnRXhwKSB7CiAgICAgICAgICAgIF9yZW1vdmVDbGFzcyhibG9ja0VsZW1lbnQsIGNsYXNzUmVnRXhwKTsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBoYXNDbGFzc2VzID0gX2hhc0NsYXNzZXMoYmxvY2tFbGVtZW50KTsKICAgICAgICAgIGlmICghaGFzQ2xhc3NlcyAmJiBibG9ja0VsZW1lbnQubm9kZU5hbWUgPT09IChub2RlTmFtZSB8fCBERUZBVUxUX05PREVfTkFNRSkpIHsKICAgICAgICAgICAgLy8gSW5zZXJ0IGEgbGluZSBicmVhayBhZnRlcndhcmRzIGFuZCBiZWZvcmV3YXJkcyB3aGVuIHRoZXJlIGFyZSBzaWJsaW5ncwogICAgICAgICAgICAvLyB0aGF0IGFyZSBub3Qgb2YgdHlwZSBsaW5lIGJyZWFrIG9yIGJsb2NrIGVsZW1lbnQKICAgICAgICAgICAgX2FkZExpbmVCcmVha0JlZm9yZUFuZEFmdGVyKGJsb2NrRWxlbWVudCk7CiAgICAgICAgICAgIGRvbS5yZXBsYWNlV2l0aENoaWxkTm9kZXMoYmxvY2tFbGVtZW50KTsKICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2xhc3NlcykgewogICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBzdHlsaW5nIGlzIGtlcHQgYnkgcmVuYW1pbmcgdGhlIGVsZW1lbnQgdG8gPGRpdj4gYW5kIGNvcHlpbmcgb3ZlciB0aGUgY2xhc3MgbmFtZQogICAgICAgICAgICBkb20ucmVuYW1lRWxlbWVudChibG9ja0VsZW1lbnQsIERFRkFVTFRfTk9ERV9OQU1FKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIC8vIEZpbmQgc2ltaWxpYXIgYmxvY2sgZWxlbWVudCBhbmQgcmVuYW1lIGl0ICg8aDIgY2xhc3M9ImZvbyI+PC9oMj4gID0+ICA8aDEgY2xhc3M9ImZvbyI+PC9oMT4pCiAgICAgIGlmIChub2RlTmFtZSA9PT0gbnVsbCB8fCB3eXNpaHRtbDUubGFuZy5hcnJheShCTE9DS19FTEVNRU5UU19HUk9VUCkuY29udGFpbnMobm9kZU5hbWUpKSB7CiAgICAgICAgc2VsZWN0ZWROb2RlID0gY29tcG9zZXIuc2VsZWN0aW9uLmdldFNlbGVjdGVkTm9kZSgpOwogICAgICAgIGJsb2NrRWxlbWVudCA9IGRvbS5nZXRQYXJlbnRFbGVtZW50KHNlbGVjdGVkTm9kZSwgewogICAgICAgICAgbm9kZU5hbWU6IEJMT0NLX0VMRU1FTlRTX0dST1VQCiAgICAgICAgfSk7CgogICAgICAgIGlmIChibG9ja0VsZW1lbnQpIHsKICAgICAgICAgIGNvbXBvc2VyLnNlbGVjdGlvbi5leGVjdXRlQW5kUmVzdG9yZVNpbXBsZShmdW5jdGlvbigpIHsKICAgICAgICAgICAgLy8gUmVuYW1lIGN1cnJlbnQgYmxvY2sgZWxlbWVudCB0byBuZXcgYmxvY2sgZWxlbWVudCBhbmQgYWRkIGNsYXNzCiAgICAgICAgICAgIGlmIChub2RlTmFtZSkgewogICAgICAgICAgICAgIGJsb2NrRWxlbWVudCA9IGRvbS5yZW5hbWVFbGVtZW50KGJsb2NrRWxlbWVudCwgbm9kZU5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjbGFzc05hbWUpIHsKICAgICAgICAgICAgICBfYWRkQ2xhc3MoYmxvY2tFbGVtZW50LCBjbGFzc05hbWUsIGNsYXNzUmVnRXhwKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoY29tcG9zZXIuY29tbWFuZHMuc3VwcG9ydChjb21tYW5kKSkgewogICAgICAgIF9leGVjQ29tbWFuZChkb2MsIGNvbW1hbmQsIG5vZGVOYW1lIHx8IERFRkFVTFRfTk9ERV9OQU1FLCBjbGFzc05hbWUpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgYmxvY2tFbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQobm9kZU5hbWUgfHwgREVGQVVMVF9OT0RFX05BTUUpOwogICAgICBpZiAoY2xhc3NOYW1lKSB7CiAgICAgICAgYmxvY2tFbGVtZW50LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKICAgICAgfQogICAgICBfc2VsZWN0TGluZUFuZFdyYXAoY29tcG9zZXIsIGJsb2NrRWxlbWVudCk7CiAgICB9LAoKICAgIHN0YXRlOiBmdW5jdGlvbihjb21wb3NlciwgY29tbWFuZCwgbm9kZU5hbWUsIGNsYXNzTmFtZSwgY2xhc3NSZWdFeHApIHsKICAgICAgbm9kZU5hbWUgPSB0eXBlb2Yobm9kZU5hbWUpID09PSAic3RyaW5nIiA/IG5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgOiBub2RlTmFtZTsKICAgICAgdmFyIHNlbGVjdGVkTm9kZSA9IGNvbXBvc2VyLnNlbGVjdGlvbi5nZXRTZWxlY3RlZE5vZGUoKTsKICAgICAgcmV0dXJuIGRvbS5nZXRQYXJlbnRFbGVtZW50KHNlbGVjdGVkTm9kZSwgewogICAgICAgIG5vZGVOYW1lOiAgICAgbm9kZU5hbWUsCiAgICAgICAgY2xhc3NOYW1lOiAgICBjbGFzc05hbWUsCiAgICAgICAgY2xhc3NSZWdFeHA6ICBjbGFzc1JlZ0V4cAogICAgICB9KTsKICAgIH0sCgogICAgdmFsdWU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdW5kZWY7CiAgICB9CiAgfTsKfSkod3lzaWh0bWw1KTsvKioKICogZm9ybWF0SW5saW5lIHNjZW5hcmlvcyBmb3IgdGFnICJCIiAofCA9IGNhcmV0LCB8Zm9vfCA9IHNlbGVjdGVkIHRleHQpCiAqCiAqICAgIzEgY2FyZXQgaW4gdW5mb3JtYXR0ZWQgdGV4dDoKICogICAgICBhYmNkZWZnfAogKiAgIG91dHB1dDoKICogICAgICBhYmNkZWZnPGI+fDwvYj4KICogICAKICogICAjMiB1bmZvcm1hdHRlZCB0ZXh0IHNlbGVjdGVkOgogKiAgICAgIGFiY3xkZWd8aAogKiAgIG91dHB1dDoKICogICAgICBhYmM8Yj58ZGVnfDwvYj5oCiAqICAgCiAqICAgIzMgdW5mb3JtYXR0ZWQgdGV4dCBzZWxlY3RlZCBhY3Jvc3MgYm91bmRhcmllczoKICogICAgICBhYnxjIDxzcGFuPmRlZmd8aDwvc3Bhbj4KICogICBvdXRwdXQ6CiAqICAgICAgYWI8Yj58YyA8L2I+PHNwYW4+PGI+ZGVmZzwvYj58aDwvc3Bhbj4KICoKICogICAjNCBmb3JtYXR0ZWQgdGV4dCBlbnRpcmVseSBzZWxlY3RlZAogKiAgICAgIDxiPnxhYmN8PC9iPgogKiAgIG91dHB1dDoKICogICAgICB8YWJjfAogKgogKiAgICM1IGZvcm1hdHRlZCB0ZXh0IHBhcnRpYWxseSBzZWxlY3RlZAogKiAgICAgIDxiPmFifGN8PC9iPgogKiAgIG91dHB1dDoKICogICAgICA8Yj5hYjwvYj58Y3wKICoKICogICAjNiBmb3JtYXR0ZWQgdGV4dCBzZWxlY3RlZCBhY3Jvc3MgYm91bmRhcmllcwogKiAgICAgIDxzcGFuPmFifGM8L3NwYW4+IDxiPmRlfGZnaDwvYj4KICogICBvdXRwdXQ6CiAqICAgICAgPHNwYW4+YWJ8Yzwvc3Bhbj4gZGV8PGI+ZmdoPC9iPgogKi8KKGZ1bmN0aW9uKHd5c2lodG1sNSkgewogIHZhciB1bmRlZiwKICAgICAgLy8gVHJlYXQgPGI+IGFzIDxzdHJvbmc+IGFuZCB2aWNlIHZlcnNhCiAgICAgIEFMSUFTX01BUFBJTkcgPSB7CiAgICAgICAgInN0cm9uZyI6ICJiIiwKICAgICAgICAiZW0iOiAgICAgImkiLAogICAgICAgICJiIjogICAgICAic3Ryb25nIiwKICAgICAgICAiaSI6ICAgICAgImVtIgogICAgICB9LAogICAgICBodG1sQXBwbGllciA9IHt9OwogIAogIGZ1bmN0aW9uIF9nZXRUYWdOYW1lcyh0YWdOYW1lKSB7CiAgICB2YXIgYWxpYXMgPSBBTElBU19NQVBQSU5HW3RhZ05hbWVdOwogICAgcmV0dXJuIGFsaWFzID8gW3RhZ05hbWUudG9Mb3dlckNhc2UoKSwgYWxpYXMudG9Mb3dlckNhc2UoKV0gOiBbdGFnTmFtZS50b0xvd2VyQ2FzZSgpXTsKICB9CiAgCiAgZnVuY3Rpb24gX2dldEFwcGxpZXIodGFnTmFtZSwgY2xhc3NOYW1lLCBjbGFzc1JlZ0V4cCkgewogICAgdmFyIGlkZW50aWZpZXIgPSB0YWdOYW1lICsgIjoiICsgY2xhc3NOYW1lOwogICAgaWYgKCFodG1sQXBwbGllcltpZGVudGlmaWVyXSkgewogICAgICBodG1sQXBwbGllcltpZGVudGlmaWVyXSA9IG5ldyB3eXNpaHRtbDUuc2VsZWN0aW9uLkhUTUxBcHBsaWVyKF9nZXRUYWdOYW1lcyh0YWdOYW1lKSwgY2xhc3NOYW1lLCBjbGFzc1JlZ0V4cCwgdHJ1ZSk7CiAgICB9CiAgICByZXR1cm4gaHRtbEFwcGxpZXJbaWRlbnRpZmllcl07CiAgfQogIAogIHd5c2lodG1sNS5jb21tYW5kcy5mb3JtYXRJbmxpbmUgPSB7CiAgICBleGVjOiBmdW5jdGlvbihjb21wb3NlciwgY29tbWFuZCwgdGFnTmFtZSwgY2xhc3NOYW1lLCBjbGFzc1JlZ0V4cCkgewogICAgICB2YXIgcmFuZ2UgPSBjb21wb3Nlci5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTsKICAgICAgaWYgKCFyYW5nZSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBfZ2V0QXBwbGllcih0YWdOYW1lLCBjbGFzc05hbWUsIGNsYXNzUmVnRXhwKS50b2dnbGVSYW5nZShyYW5nZSk7CiAgICAgIGNvbXBvc2VyLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb24ocmFuZ2UpOwogICAgfSwKCiAgICBzdGF0ZTogZnVuY3Rpb24oY29tcG9zZXIsIGNvbW1hbmQsIHRhZ05hbWUsIGNsYXNzTmFtZSwgY2xhc3NSZWdFeHApIHsKICAgICAgdmFyIGRvYyAgICAgICAgICAgPSBjb21wb3Nlci5kb2MsCiAgICAgICAgICBhbGlhc1RhZ05hbWUgID0gQUxJQVNfTUFQUElOR1t0YWdOYW1lXSB8fCB0YWdOYW1lLAogICAgICAgICAgcmFuZ2U7CgogICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBkb2N1bWVudCBjb250YWlucyBhIG5vZGUgd2l0aCB0aGUgZGVzaXJlZCB0YWdOYW1lCiAgICAgIGlmICghd3lzaWh0bWw1LmRvbS5oYXNFbGVtZW50V2l0aFRhZ05hbWUoZG9jLCB0YWdOYW1lKSAmJgogICAgICAgICAgIXd5c2lodG1sNS5kb20uaGFzRWxlbWVudFdpdGhUYWdOYW1lKGRvYywgYWxpYXNUYWdOYW1lKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGRvY3VtZW50IGNvbnRhaW5zIGEgbm9kZSB3aXRoIHRoZSBkZXNpcmVkIGNsYXNzTmFtZQogICAgICBpZiAoY2xhc3NOYW1lICYmICF3eXNpaHRtbDUuZG9tLmhhc0VsZW1lbnRXaXRoQ2xhc3NOYW1lKGRvYywgY2xhc3NOYW1lKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIHJhbmdlID0gY29tcG9zZXIuc2VsZWN0aW9uLmdldFJhbmdlKCk7CiAgICAgIGlmICghcmFuZ2UpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIHJldHVybiBfZ2V0QXBwbGllcih0YWdOYW1lLCBjbGFzc05hbWUsIGNsYXNzUmVnRXhwKS5pc0FwcGxpZWRUb1JhbmdlKHJhbmdlKTsKICAgIH0sCgogICAgdmFsdWU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdW5kZWY7CiAgICB9CiAgfTsKfSkod3lzaWh0bWw1KTsoZnVuY3Rpb24od3lzaWh0bWw1KSB7CiAgdmFyIHVuZGVmOwogIAogIHd5c2lodG1sNS5jb21tYW5kcy5pbnNlcnRIVE1MID0gewogICAgZXhlYzogZnVuY3Rpb24oY29tcG9zZXIsIGNvbW1hbmQsIGh0bWwpIHsKICAgICAgaWYgKGNvbXBvc2VyLmNvbW1hbmRzLnN1cHBvcnQoY29tbWFuZCkpIHsKICAgICAgICBjb21wb3Nlci5kb2MuZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsIGh0bWwpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbXBvc2VyLnNlbGVjdGlvbi5pbnNlcnRIVE1MKGh0bWwpOwogICAgICB9CiAgICB9LAoKICAgIHN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSwKCiAgICB2YWx1ZTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB1bmRlZjsKICAgIH0KICB9Owp9KSh3eXNpaHRtbDUpOyhmdW5jdGlvbih3eXNpaHRtbDUpIHsKICB2YXIgTk9ERV9OQU1FID0gIklNRyI7CiAgCiAgd3lzaWh0bWw1LmNvbW1hbmRzLmluc2VydEltYWdlID0gewogICAgLyoqCiAgICAgKiBJbnNlcnRzIGFuIDxpbWc+CiAgICAgKiBJZiBzZWxlY3Rpb24gaXMgYWxyZWFkeSBhbiBpbWFnZSBsaW5rLCBpdCByZW1vdmVzIGl0CiAgICAgKiAKICAgICAqIEBleGFtcGxlCiAgICAgKiAgICAvLyBlaXRoZXIgLi4uCiAgICAgKiAgICB3eXNpaHRtbDUuY29tbWFuZHMuaW5zZXJ0SW1hZ2UuZXhlYyhjb21wb3NlciwgImluc2VydEltYWdlIiwgImh0dHA6Ly93d3cuZ29vZ2xlLmRlL2xvZ28uanBnIik7CiAgICAgKiAgICAvLyAuLi4gb3IgLi4uCiAgICAgKiAgICB3eXNpaHRtbDUuY29tbWFuZHMuaW5zZXJ0SW1hZ2UuZXhlYyhjb21wb3NlciwgImluc2VydEltYWdlIiwgeyBzcmM6ICJodHRwOi8vd3d3Lmdvb2dsZS5kZS9sb2dvLmpwZyIsIHRpdGxlOiAiZm9vIiB9KTsKICAgICAqLwogICAgZXhlYzogZnVuY3Rpb24oY29tcG9zZXIsIGNvbW1hbmQsIHZhbHVlKSB7CiAgICAgIHZhbHVlID0gdHlwZW9mKHZhbHVlKSA9PT0gIm9iamVjdCIgPyB2YWx1ZSA6IHsgc3JjOiB2YWx1ZSB9OwoKICAgICAgdmFyIGRvYyAgICAgPSBjb21wb3Nlci5kb2MsCiAgICAgICAgICBpbWFnZSAgID0gdGhpcy5zdGF0ZShjb21wb3NlciksCiAgICAgICAgICB0ZXh0Tm9kZSwKICAgICAgICAgIGksCiAgICAgICAgICBwYXJlbnQ7CgogICAgICBpZiAoaW1hZ2UpIHsKICAgICAgICAvLyBJbWFnZSBhbHJlYWR5IHNlbGVjdGVkLCBzZXQgdGhlIGNhcmV0IGJlZm9yZSBpdCBhbmQgZGVsZXRlIGl0CiAgICAgICAgY29tcG9zZXIuc2VsZWN0aW9uLnNldEJlZm9yZShpbWFnZSk7CiAgICAgICAgcGFyZW50ID0gaW1hZ2UucGFyZW50Tm9kZTsKICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoaW1hZ2UpOwoKICAgICAgICAvLyBhbmQgaXQncyBwYXJlbnQgPGE+IHRvbyBpZiBpdCBoYXNuJ3QgZ290IGFueSBvdGhlciByZWxldmFudCBjaGlsZCBub2RlcwogICAgICAgIHd5c2lodG1sNS5kb20ucmVtb3ZlRW1wdHlUZXh0Tm9kZXMocGFyZW50KTsKICAgICAgICBpZiAocGFyZW50Lm5vZGVOYW1lID09PSAiQSIgJiYgIXBhcmVudC5maXJzdENoaWxkKSB7CiAgICAgICAgICBjb21wb3Nlci5zZWxlY3Rpb24uc2V0QWZ0ZXIocGFyZW50KTsKICAgICAgICAgIHBhcmVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHBhcmVudCk7CiAgICAgICAgfQoKICAgICAgICAvLyBmaXJlZm94IGFuZCBpZSBzb21ldGltZXMgZG9uJ3QgcmVtb3ZlIHRoZSBpbWFnZSBoYW5kbGVzLCBldmVuIHRob3VnaCB0aGUgaW1hZ2UgZ290IHJlbW92ZWQKICAgICAgICB3eXNpaHRtbDUucXVpcmtzLnJlZHJhdyhjb21wb3Nlci5lbGVtZW50KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGltYWdlID0gZG9jLmNyZWF0ZUVsZW1lbnQoTk9ERV9OQU1FKTsKCiAgICAgIGZvciAoaSBpbiB2YWx1ZSkgewogICAgICAgIGltYWdlW2ldID0gdmFsdWVbaV07CiAgICAgIH0KCiAgICAgIGNvbXBvc2VyLnNlbGVjdGlvbi5pbnNlcnROb2RlKGltYWdlKTsKICAgICAgaWYgKHd5c2lodG1sNS5icm93c2VyLmhhc1Byb2JsZW1zU2V0dGluZ0NhcmV0QWZ0ZXJJbWcoKSkgewogICAgICAgIHRleHROb2RlID0gZG9jLmNyZWF0ZVRleHROb2RlKHd5c2lodG1sNS5JTlZJU0lCTEVfU1BBQ0UpOwogICAgICAgIGNvbXBvc2VyLnNlbGVjdGlvbi5pbnNlcnROb2RlKHRleHROb2RlKTsKICAgICAgICBjb21wb3Nlci5zZWxlY3Rpb24uc2V0QWZ0ZXIodGV4dE5vZGUpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbXBvc2VyLnNlbGVjdGlvbi5zZXRBZnRlcihpbWFnZSk7CiAgICAgIH0KICAgIH0sCgogICAgc3RhdGU6IGZ1bmN0aW9uKGNvbXBvc2VyKSB7CiAgICAgIHZhciBkb2MgPSBjb21wb3Nlci5kb2MsCiAgICAgICAgICBzZWxlY3RlZE5vZGUsCiAgICAgICAgICB0ZXh0LAogICAgICAgICAgaW1hZ2VzSW5TZWxlY3Rpb247CgogICAgICBpZiAoIXd5c2lodG1sNS5kb20uaGFzRWxlbWVudFdpdGhUYWdOYW1lKGRvYywgTk9ERV9OQU1FKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgc2VsZWN0ZWROb2RlID0gY29tcG9zZXIuc2VsZWN0aW9uLmdldFNlbGVjdGVkTm9kZSgpOwogICAgICBpZiAoIXNlbGVjdGVkTm9kZSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgaWYgKHNlbGVjdGVkTm9kZS5ub2RlTmFtZSA9PT0gTk9ERV9OQU1FKSB7CiAgICAgICAgLy8gVGhpcyB3b3JrcyBwZXJmZWN0bHkgaW4gSUUKICAgICAgICByZXR1cm4gc2VsZWN0ZWROb2RlOwogICAgICB9CgogICAgICBpZiAoc2VsZWN0ZWROb2RlLm5vZGVUeXBlICE9PSB3eXNpaHRtbDUuRUxFTUVOVF9OT0RFKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICB0ZXh0ID0gY29tcG9zZXIuc2VsZWN0aW9uLmdldFRleHQoKTsKICAgICAgdGV4dCA9IHd5c2lodG1sNS5sYW5nLnN0cmluZyh0ZXh0KS50cmltKCk7CiAgICAgIGlmICh0ZXh0KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICBpbWFnZXNJblNlbGVjdGlvbiA9IGNvbXBvc2VyLnNlbGVjdGlvbi5nZXROb2Rlcyh3eXNpaHRtbDUuRUxFTUVOVF9OT0RFLCBmdW5jdGlvbihub2RlKSB7CiAgICAgICAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICJJTUciOwogICAgICB9KTsKCiAgICAgIGlmIChpbWFnZXNJblNlbGVjdGlvbi5sZW5ndGggIT09IDEpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIHJldHVybiBpbWFnZXNJblNlbGVjdGlvblswXTsKICAgIH0sCgogICAgdmFsdWU6IGZ1bmN0aW9uKGNvbXBvc2VyKSB7CiAgICAgIHZhciBpbWFnZSA9IHRoaXMuc3RhdGUoY29tcG9zZXIpOwogICAgICByZXR1cm4gaW1hZ2UgJiYgaW1hZ2Uuc3JjOwogICAgfQogIH07Cn0pKHd5c2lodG1sNSk7KGZ1bmN0aW9uKHd5c2lodG1sNSkgewogIHZhciB1bmRlZiwKICAgICAgTElORV9CUkVBSyA9ICI8YnI+IiArICh3eXNpaHRtbDUuYnJvd3Nlci5uZWVkc1NwYWNlQWZ0ZXJMaW5lQnJlYWsoKSA/ICIgIiA6ICIiKTsKICAKICB3eXNpaHRtbDUuY29tbWFuZHMuaW5zZXJ0TGluZUJyZWFrID0gewogICAgZXhlYzogZnVuY3Rpb24oY29tcG9zZXIsIGNvbW1hbmQpIHsKICAgICAgaWYgKGNvbXBvc2VyLmNvbW1hbmRzLnN1cHBvcnQoY29tbWFuZCkpIHsKICAgICAgICBjb21wb3Nlci5kb2MuZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsIG51bGwpOwogICAgICAgIGlmICghd3lzaWh0bWw1LmJyb3dzZXIuYXV0b1Njcm9sbHNUb0NhcmV0KCkpIHsKICAgICAgICAgIGNvbXBvc2VyLnNlbGVjdGlvbi5zY3JvbGxJbnRvVmlldygpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBjb21wb3Nlci5jb21tYW5kcy5leGVjKCJpbnNlcnRIVE1MIiwgTElORV9CUkVBSyk7CiAgICAgIH0KICAgIH0sCgogICAgc3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9LAoKICAgIHZhbHVlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHVuZGVmOwogICAgfQogIH07Cn0pKHd5c2lodG1sNSk7KGZ1bmN0aW9uKHd5c2lodG1sNSkgewogIHZhciB1bmRlZjsKICAKICB3eXNpaHRtbDUuY29tbWFuZHMuaW5zZXJ0T3JkZXJlZExpc3QgPSB7CiAgICBleGVjOiBmdW5jdGlvbihjb21wb3NlciwgY29tbWFuZCkgewogICAgICB2YXIgZG9jICAgICAgICAgICA9IGNvbXBvc2VyLmRvYywKICAgICAgICAgIHNlbGVjdGVkTm9kZSAgPSBjb21wb3Nlci5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKCksCiAgICAgICAgICBsaXN0ICAgICAgICAgID0gd3lzaWh0bWw1LmRvbS5nZXRQYXJlbnRFbGVtZW50KHNlbGVjdGVkTm9kZSwgeyBub2RlTmFtZTogIk9MIiB9KSwKICAgICAgICAgIG90aGVyTGlzdCAgICAgPSB3eXNpaHRtbDUuZG9tLmdldFBhcmVudEVsZW1lbnQoc2VsZWN0ZWROb2RlLCB7IG5vZGVOYW1lOiAiVUwiIH0pLAogICAgICAgICAgdGVtcENsYXNzTmFtZSA9ICAiX3d5c2lodG1sNS10ZW1wLSIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSwKICAgICAgICAgIGlzRW1wdHksCiAgICAgICAgICB0ZW1wRWxlbWVudDsKICAgICAgCiAgICAgIGlmIChjb21wb3Nlci5jb21tYW5kcy5zdXBwb3J0KGNvbW1hbmQpKSB7CiAgICAgICAgZG9jLmV4ZWNDb21tYW5kKGNvbW1hbmQsIGZhbHNlLCBudWxsKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgCiAgICAgIGlmIChsaXN0KSB7CiAgICAgICAgLy8gVW53cmFwIGxpc3QKICAgICAgICAvLyA8b2w+PGxpPmZvbzwvbGk+PGxpPmJhcjwvbGk+PC9vbD4KICAgICAgICAvLyBiZWNvbWVzOgogICAgICAgIC8vIGZvbzxicj5iYXI8YnI+CiAgICAgICAgY29tcG9zZXIuc2VsZWN0aW9uLmV4ZWN1dGVBbmRSZXN0b3JlU2ltcGxlKGZ1bmN0aW9uKCkgewogICAgICAgICAgd3lzaWh0bWw1LmRvbS5yZXNvbHZlTGlzdChsaXN0KTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmIChvdGhlckxpc3QpIHsKICAgICAgICAvLyBUdXJuIGFuIHVub3JkZXJlZCBsaXN0IGludG8gYW4gb3JkZXJlZCBsaXN0CiAgICAgICAgLy8gPHVsPjxsaT5mb288L2xpPjxsaT5iYXI8L2xpPjwvdWw+CiAgICAgICAgLy8gYmVjb21lczoKICAgICAgICAvLyA8b2w+PGxpPmZvbzwvbGk+PGxpPmJhcjwvbGk+PC9vbD4KICAgICAgICBjb21wb3Nlci5zZWxlY3Rpb24uZXhlY3V0ZUFuZFJlc3RvcmVTaW1wbGUoZnVuY3Rpb24oKSB7CiAgICAgICAgICB3eXNpaHRtbDUuZG9tLnJlbmFtZUVsZW1lbnQob3RoZXJMaXN0LCAib2wiKTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBDcmVhdGUgbGlzdAogICAgICAgIGNvbXBvc2VyLmNvbW1hbmRzLmV4ZWMoImZvcm1hdEJsb2NrIiwgImRpdiIsIHRlbXBDbGFzc05hbWUpOwogICAgICAgIHRlbXBFbGVtZW50ID0gZG9jLnF1ZXJ5U2VsZWN0b3IoIi4iICsgdGVtcENsYXNzTmFtZSk7CiAgICAgICAgaXNFbXB0eSA9IHRlbXBFbGVtZW50LmlubmVySFRNTCA9PT0gIiIgfHwgdGVtcEVsZW1lbnQuaW5uZXJIVE1MID09PSB3eXNpaHRtbDUuSU5WSVNJQkxFX1NQQUNFOwogICAgICAgIGNvbXBvc2VyLnNlbGVjdGlvbi5leGVjdXRlQW5kUmVzdG9yZVNpbXBsZShmdW5jdGlvbigpIHsKICAgICAgICAgIGxpc3QgPSB3eXNpaHRtbDUuZG9tLmNvbnZlcnRUb0xpc3QodGVtcEVsZW1lbnQsICJvbCIpOwogICAgICAgIH0pOwogICAgICAgIGlmIChpc0VtcHR5KSB7CiAgICAgICAgICBjb21wb3Nlci5zZWxlY3Rpb24uc2VsZWN0Tm9kZShsaXN0LnF1ZXJ5U2VsZWN0b3IoImxpIikpOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIAogICAgc3RhdGU6IGZ1bmN0aW9uKGNvbXBvc2VyKSB7CiAgICAgIHZhciBzZWxlY3RlZE5vZGUgPSBjb21wb3Nlci5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKCk7CiAgICAgIHJldHVybiB3eXNpaHRtbDUuZG9tLmdldFBhcmVudEVsZW1lbnQoc2VsZWN0ZWROb2RlLCB7IG5vZGVOYW1lOiAiT0wiIH0pOwogICAgfSwKCiAgICB2YWx1ZTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB1bmRlZjsKICAgIH0KICB9Owp9KSh3eXNpaHRtbDUpOyhmdW5jdGlvbih3eXNpaHRtbDUpIHsKICB2YXIgdW5kZWY7CiAgCiAgd3lzaWh0bWw1LmNvbW1hbmRzLmluc2VydFVub3JkZXJlZExpc3QgPSB7CiAgICBleGVjOiBmdW5jdGlvbihjb21wb3NlciwgY29tbWFuZCkgewogICAgICB2YXIgZG9jICAgICAgICAgICA9IGNvbXBvc2VyLmRvYywKICAgICAgICAgIHNlbGVjdGVkTm9kZSAgPSBjb21wb3Nlci5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKCksCiAgICAgICAgICBsaXN0ICAgICAgICAgID0gd3lzaWh0bWw1LmRvbS5nZXRQYXJlbnRFbGVtZW50KHNlbGVjdGVkTm9kZSwgeyBub2RlTmFtZTogIlVMIiB9KSwKICAgICAgICAgIG90aGVyTGlzdCAgICAgPSB3eXNpaHRtbDUuZG9tLmdldFBhcmVudEVsZW1lbnQoc2VsZWN0ZWROb2RlLCB7IG5vZGVOYW1lOiAiT0wiIH0pLAogICAgICAgICAgdGVtcENsYXNzTmFtZSA9ICAiX3d5c2lodG1sNS10ZW1wLSIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSwKICAgICAgICAgIGlzRW1wdHksCiAgICAgICAgICB0ZW1wRWxlbWVudDsKICAgICAgCiAgICAgIGlmIChjb21wb3Nlci5jb21tYW5kcy5zdXBwb3J0KGNvbW1hbmQpKSB7CiAgICAgICAgZG9jLmV4ZWNDb21tYW5kKGNvbW1hbmQsIGZhbHNlLCBudWxsKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgCiAgICAgIGlmIChsaXN0KSB7CiAgICAgICAgLy8gVW53cmFwIGxpc3QKICAgICAgICAvLyA8dWw+PGxpPmZvbzwvbGk+PGxpPmJhcjwvbGk+PC91bD4KICAgICAgICAvLyBiZWNvbWVzOgogICAgICAgIC8vIGZvbzxicj5iYXI8YnI+CiAgICAgICAgY29tcG9zZXIuc2VsZWN0aW9uLmV4ZWN1dGVBbmRSZXN0b3JlU2ltcGxlKGZ1bmN0aW9uKCkgewogICAgICAgICAgd3lzaWh0bWw1LmRvbS5yZXNvbHZlTGlzdChsaXN0KTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmIChvdGhlckxpc3QpIHsKICAgICAgICAvLyBUdXJuIGFuIG9yZGVyZWQgbGlzdCBpbnRvIGFuIHVub3JkZXJlZCBsaXN0CiAgICAgICAgLy8gPG9sPjxsaT5mb288L2xpPjxsaT5iYXI8L2xpPjwvb2w+CiAgICAgICAgLy8gYmVjb21lczoKICAgICAgICAvLyA8dWw+PGxpPmZvbzwvbGk+PGxpPmJhcjwvbGk+PC91bD4KICAgICAgICBjb21wb3Nlci5zZWxlY3Rpb24uZXhlY3V0ZUFuZFJlc3RvcmVTaW1wbGUoZnVuY3Rpb24oKSB7CiAgICAgICAgICB3eXNpaHRtbDUuZG9tLnJlbmFtZUVsZW1lbnQob3RoZXJMaXN0LCAidWwiKTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBDcmVhdGUgbGlzdAogICAgICAgIGNvbXBvc2VyLmNvbW1hbmRzLmV4ZWMoImZvcm1hdEJsb2NrIiwgImRpdiIsIHRlbXBDbGFzc05hbWUpOwogICAgICAgIHRlbXBFbGVtZW50ID0gZG9jLnF1ZXJ5U2VsZWN0b3IoIi4iICsgdGVtcENsYXNzTmFtZSk7CiAgICAgICAgaXNFbXB0eSA9IHRlbXBFbGVtZW50LmlubmVySFRNTCA9PT0gIiIgfHwgdGVtcEVsZW1lbnQuaW5uZXJIVE1MID09PSB3eXNpaHRtbDUuSU5WSVNJQkxFX1NQQUNFOwogICAgICAgIGNvbXBvc2VyLnNlbGVjdGlvbi5leGVjdXRlQW5kUmVzdG9yZVNpbXBsZShmdW5jdGlvbigpIHsKICAgICAgICAgIGxpc3QgPSB3eXNpaHRtbDUuZG9tLmNvbnZlcnRUb0xpc3QodGVtcEVsZW1lbnQsICJ1bCIpOwogICAgICAgIH0pOwogICAgICAgIGlmIChpc0VtcHR5KSB7CiAgICAgICAgICBjb21wb3Nlci5zZWxlY3Rpb24uc2VsZWN0Tm9kZShsaXN0LnF1ZXJ5U2VsZWN0b3IoImxpIikpOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIAogICAgc3RhdGU6IGZ1bmN0aW9uKGNvbXBvc2VyKSB7CiAgICAgIHZhciBzZWxlY3RlZE5vZGUgPSBjb21wb3Nlci5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKCk7CiAgICAgIHJldHVybiB3eXNpaHRtbDUuZG9tLmdldFBhcmVudEVsZW1lbnQoc2VsZWN0ZWROb2RlLCB7IG5vZGVOYW1lOiAiVUwiIH0pOwogICAgfSwKCiAgICB2YWx1ZTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB1bmRlZjsKICAgIH0KICB9Owp9KSh3eXNpaHRtbDUpOyhmdW5jdGlvbih3eXNpaHRtbDUpIHsKICB2YXIgdW5kZWY7CiAgCiAgd3lzaWh0bWw1LmNvbW1hbmRzLml0YWxpYyA9IHsKICAgIGV4ZWM6IGZ1bmN0aW9uKGNvbXBvc2VyLCBjb21tYW5kKSB7CiAgICAgIHJldHVybiB3eXNpaHRtbDUuY29tbWFuZHMuZm9ybWF0SW5saW5lLmV4ZWMoY29tcG9zZXIsIGNvbW1hbmQsICJpIik7CiAgICB9LAoKICAgIHN0YXRlOiBmdW5jdGlvbihjb21wb3NlciwgY29tbWFuZCwgY29sb3IpIHsKICAgICAgLy8gZWxlbWVudC5vd25lckRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN0YXRlKCJpdGFsaWMiKSByZXN1bHRzOgogICAgICAvLyBmaXJlZm94OiBvbmx5IDxpPgogICAgICAvLyBjaHJvbWU6ICA8aT4sIDxlbT4sIDxibG9ja3F1b3RlPiwgLi4uCiAgICAgIC8vIGllOiAgICAgIDxpPiwgPGVtPgogICAgICAvLyBvcGVyYTogICBvbmx5IDxpPgogICAgICByZXR1cm4gd3lzaWh0bWw1LmNvbW1hbmRzLmZvcm1hdElubGluZS5zdGF0ZShjb21wb3NlciwgY29tbWFuZCwgImkiKTsKICAgIH0sCgogICAgdmFsdWU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdW5kZWY7CiAgICB9CiAgfTsKfSkod3lzaWh0bWw1KTsoZnVuY3Rpb24od3lzaWh0bWw1KSB7CiAgdmFyIHVuZGVmLAogICAgICBDTEFTU19OQU1FICA9ICJ3eXNpd3lnLXRleHQtYWxpZ24tY2VudGVyIiwKICAgICAgUkVHX0VYUCAgICAgPSAvd3lzaXd5Zy10ZXh0LWFsaWduLVthLXpdKy9nOwogIAogIHd5c2lodG1sNS5jb21tYW5kcy5qdXN0aWZ5Q2VudGVyID0gewogICAgZXhlYzogZnVuY3Rpb24oY29tcG9zZXIsIGNvbW1hbmQpIHsKICAgICAgcmV0dXJuIHd5c2lodG1sNS5jb21tYW5kcy5mb3JtYXRCbG9jay5leGVjKGNvbXBvc2VyLCAiZm9ybWF0QmxvY2siLCBudWxsLCBDTEFTU19OQU1FLCBSRUdfRVhQKTsKICAgIH0sCgogICAgc3RhdGU6IGZ1bmN0aW9uKGNvbXBvc2VyLCBjb21tYW5kKSB7CiAgICAgIHJldHVybiB3eXNpaHRtbDUuY29tbWFuZHMuZm9ybWF0QmxvY2suc3RhdGUoY29tcG9zZXIsICJmb3JtYXRCbG9jayIsIG51bGwsIENMQVNTX05BTUUsIFJFR19FWFApOwogICAgfSwKCiAgICB2YWx1ZTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB1bmRlZjsKICAgIH0KICB9Owp9KSh3eXNpaHRtbDUpOyhmdW5jdGlvbih3eXNpaHRtbDUpIHsKICB2YXIgdW5kZWYsCiAgICAgIENMQVNTX05BTUUgID0gInd5c2l3eWctdGV4dC1hbGlnbi1sZWZ0IiwKICAgICAgUkVHX0VYUCAgICAgPSAvd3lzaXd5Zy10ZXh0LWFsaWduLVthLXpdKy9nOwogIAogIHd5c2lodG1sNS5jb21tYW5kcy5qdXN0aWZ5TGVmdCA9IHsKICAgIGV4ZWM6IGZ1bmN0aW9uKGNvbXBvc2VyLCBjb21tYW5kKSB7CiAgICAgIHJldHVybiB3eXNpaHRtbDUuY29tbWFuZHMuZm9ybWF0QmxvY2suZXhlYyhjb21wb3NlciwgImZvcm1hdEJsb2NrIiwgbnVsbCwgQ0xBU1NfTkFNRSwgUkVHX0VYUCk7CiAgICB9LAoKICAgIHN0YXRlOiBmdW5jdGlvbihjb21wb3NlciwgY29tbWFuZCkgewogICAgICByZXR1cm4gd3lzaWh0bWw1LmNvbW1hbmRzLmZvcm1hdEJsb2NrLnN0YXRlKGNvbXBvc2VyLCAiZm9ybWF0QmxvY2siLCBudWxsLCBDTEFTU19OQU1FLCBSRUdfRVhQKTsKICAgIH0sCgogICAgdmFsdWU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdW5kZWY7CiAgICB9CiAgfTsKfSkod3lzaWh0bWw1KTsoZnVuY3Rpb24od3lzaWh0bWw1KSB7CiAgdmFyIHVuZGVmLAogICAgICBDTEFTU19OQU1FICA9ICJ3eXNpd3lnLXRleHQtYWxpZ24tcmlnaHQiLAogICAgICBSRUdfRVhQICAgICA9IC93eXNpd3lnLXRleHQtYWxpZ24tW2Etel0rL2c7CiAgCiAgd3lzaWh0bWw1LmNvbW1hbmRzLmp1c3RpZnlSaWdodCA9IHsKICAgIGV4ZWM6IGZ1bmN0aW9uKGNvbXBvc2VyLCBjb21tYW5kKSB7CiAgICAgIHJldHVybiB3eXNpaHRtbDUuY29tbWFuZHMuZm9ybWF0QmxvY2suZXhlYyhjb21wb3NlciwgImZvcm1hdEJsb2NrIiwgbnVsbCwgQ0xBU1NfTkFNRSwgUkVHX0VYUCk7CiAgICB9LAoKICAgIHN0YXRlOiBmdW5jdGlvbihjb21wb3NlciwgY29tbWFuZCkgewogICAgICByZXR1cm4gd3lzaWh0bWw1LmNvbW1hbmRzLmZvcm1hdEJsb2NrLnN0YXRlKGNvbXBvc2VyLCAiZm9ybWF0QmxvY2siLCBudWxsLCBDTEFTU19OQU1FLCBSRUdfRVhQKTsKICAgIH0sCgogICAgdmFsdWU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdW5kZWY7CiAgICB9CiAgfTsKfSkod3lzaWh0bWw1KTsoZnVuY3Rpb24od3lzaWh0bWw1KSB7CiAgdmFyIHVuZGVmOwogIHd5c2lodG1sNS5jb21tYW5kcy51bmRlcmxpbmUgPSB7CiAgICBleGVjOiBmdW5jdGlvbihjb21wb3NlciwgY29tbWFuZCkgewogICAgICByZXR1cm4gd3lzaWh0bWw1LmNvbW1hbmRzLmZvcm1hdElubGluZS5leGVjKGNvbXBvc2VyLCBjb21tYW5kLCAidSIpOwogICAgfSwKCiAgICBzdGF0ZTogZnVuY3Rpb24oY29tcG9zZXIsIGNvbW1hbmQpIHsKICAgICAgcmV0dXJuIHd5c2lodG1sNS5jb21tYW5kcy5mb3JtYXRJbmxpbmUuc3RhdGUoY29tcG9zZXIsIGNvbW1hbmQsICJ1Iik7CiAgICB9LAoKICAgIHZhbHVlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHVuZGVmOwogICAgfQogIH07Cn0pKHd5c2lodG1sNSk7LyoqCiAqIFVuZG8gTWFuYWdlciBmb3Igd3lzaWh0bWw1CiAqIHNsaWdodGx5IGluc3BpcmVkIGJ5IGh0dHA6Ly9ybml3YS5jb20vZWRpdGluZy91bmRvbWFuYWdlci5odG1sI3RoZS11bmRvbWFuYWdlci1pbnRlcmZhY2UKICovCihmdW5jdGlvbih3eXNpaHRtbDUpIHsKICB2YXIgWl9LRVkgICAgICAgICAgICAgICA9IDkwLAogICAgICBZX0tFWSAgICAgICAgICAgICAgID0gODksCiAgICAgIEJBQ0tTUEFDRV9LRVkgICAgICAgPSA4LAogICAgICBERUxFVEVfS0VZICAgICAgICAgID0gNDYsCiAgICAgIE1BWF9ISVNUT1JZX0VOVFJJRVMgPSA0MCwKICAgICAgVU5ET19IVE1MICAgICAgICAgICA9ICc8c3BhbiBpZD0iX3d5c2lodG1sNS11bmRvIiBjbGFzcz0iX3d5c2lodG1sNS10ZW1wIj4nICsgd3lzaWh0bWw1LklOVklTSUJMRV9TUEFDRSArICc8L3NwYW4+JywKICAgICAgUkVET19IVE1MICAgICAgICAgICA9ICc8c3BhbiBpZD0iX3d5c2lodG1sNS1yZWRvIiBjbGFzcz0iX3d5c2lodG1sNS10ZW1wIj4nICsgd3lzaWh0bWw1LklOVklTSUJMRV9TUEFDRSArICc8L3NwYW4+JywKICAgICAgZG9tICAgICAgICAgICAgICAgICA9IHd5c2lodG1sNS5kb207CiAgCiAgZnVuY3Rpb24gY2xlYW5UZW1wRWxlbWVudHMoZG9jKSB7CiAgICB2YXIgdGVtcEVsZW1lbnQ7CiAgICB3aGlsZSAodGVtcEVsZW1lbnQgPSBkb2MucXVlcnlTZWxlY3RvcigiLl93eXNpaHRtbDUtdGVtcCIpKSB7CiAgICAgIHRlbXBFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGVtcEVsZW1lbnQpOwogICAgfQogIH0KICAKICB3eXNpaHRtbDUuVW5kb01hbmFnZXIgPSB3eXNpaHRtbDUubGFuZy5EaXNwYXRjaGVyLmV4dGVuZCgKICAgIC8qKiBAc2NvcGUgd3lzaWh0bWw1LlVuZG9NYW5hZ2VyLnByb3RvdHlwZSAqLyB7CiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yOwogICAgICB0aGlzLmNvbXBvc2VyID0gZWRpdG9yLmNvbXBvc2VyOwogICAgICB0aGlzLmVsZW1lbnQgPSB0aGlzLmNvbXBvc2VyLmVsZW1lbnQ7CiAgICAgIHRoaXMuaGlzdG9yeSA9IFt0aGlzLmNvbXBvc2VyLmdldFZhbHVlKCldOwogICAgICB0aGlzLnBvc2l0aW9uID0gMTsKICAgICAgCiAgICAgIC8vIFVuZG8gbWFuYWdlciBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgaW4gYnJvd3NlcnMgd2hvIGhhdmUgdGhlIGluc2VydEhUTUwgY29tbWFuZCAobm90IElFKQogICAgICBpZiAodGhpcy5jb21wb3Nlci5jb21tYW5kcy5zdXBwb3J0KCJpbnNlcnRIVE1MIikpIHsKICAgICAgICB0aGlzLl9vYnNlcnZlKCk7CiAgICAgIH0KICAgIH0sCiAgICAKICAgIF9vYnNlcnZlOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIHRoYXQgICAgICA9IHRoaXMsCiAgICAgICAgICBkb2MgICAgICAgPSB0aGlzLmNvbXBvc2VyLnNhbmRib3guZ2V0RG9jdW1lbnQoKSwKICAgICAgICAgIGxhc3RLZXk7CiAgICAgICAgICAKICAgICAgLy8gQ2F0Y2ggQ1RSTCtaIGFuZCBDVFJMK1kKICAgICAgZG9tLm9ic2VydmUodGhpcy5lbGVtZW50LCAia2V5ZG93biIsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgaWYgKGV2ZW50LmFsdEtleSB8fCAoIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50Lm1ldGFLZXkpKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBrZXlDb2RlID0gZXZlbnQua2V5Q29kZSwKICAgICAgICAgICAgaXNVbmRvID0ga2V5Q29kZSA9PT0gWl9LRVkgJiYgIWV2ZW50LnNoaWZ0S2V5LAogICAgICAgICAgICBpc1JlZG8gPSAoa2V5Q29kZSA9PT0gWl9LRVkgJiYgZXZlbnQuc2hpZnRLZXkpIHx8IChrZXlDb2RlID09PSBZX0tFWSk7CiAgICAgICAgCiAgICAgICAgaWYgKGlzVW5kbykgewogICAgICAgICAgdGhhdC51bmRvKCk7CiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0gZWxzZSBpZiAoaXNSZWRvKSB7CiAgICAgICAgICB0aGF0LnJlZG8oKTsKICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgCiAgICAgIC8vIENhdGNoIGRlbGV0ZSBhbmQgYmFja3NwYWNlCiAgICAgIGRvbS5vYnNlcnZlKHRoaXMuZWxlbWVudCwgImtleWRvd24iLCBmdW5jdGlvbihldmVudCkgewogICAgICAgIHZhciBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTsKICAgICAgICBpZiAoa2V5Q29kZSA9PT0gbGFzdEtleSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBsYXN0S2V5ID0ga2V5Q29kZTsKICAgICAgICAKICAgICAgICBpZiAoa2V5Q29kZSA9PT0gQkFDS1NQQUNFX0tFWSB8fCBrZXlDb2RlID09PSBERUxFVEVfS0VZKSB7CiAgICAgICAgICB0aGF0LnRyYW5zYWN0KCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgCiAgICAgIC8vIE5vdyB0aGlzIGlzIHZlcnkgaGFja3k6CiAgICAgIC8vIFRoZXNlIGRheXMgYnJvd3NlcnMgZG9uJ3Qgb2ZmZXIgYSB1bmRvL3JlZG8gZXZlbnQgd2hpY2ggd2UgY291bGQgaG9vayBpbnRvCiAgICAgIC8vIHRvIGJlIG5vdGlmaWVkIHdoZW4gdGhlIHVzZXIgaGl0cyB1bmRvL3JlZG8gaW4gdGhlIGNvbnRleHRtZW51LgogICAgICAvLyBUaGVyZWZvcmUgd2Ugc2ltcGx5IGluc2VydCB0d28gZWxlbWVudHMgYXMgc29vbiBhcyB0aGUgY29udGV4dG1lbnUgZ2V0cyBvcGVuZWQuCiAgICAgIC8vIFRoZSBsYXN0IGVsZW1lbnQgYmVpbmcgaW5zZXJ0ZWQgd2lsbCBiZSBpbW1lZGlhdGVseSBiZSByZW1vdmVkIGFnYWluIGJ5IGEgZXhleENvbW1hbmQoInVuZG8iKQogICAgICAvLyAgPT4gV2hlbiB0aGUgc2Vjb25kIGVsZW1lbnQgYXBwZWFycyBpbiB0aGUgZG9tIHRyZWUgdGhlbiB3ZSBrbm93IHRoZSB1c2VyIGNsaWNrZWQgInJlZG8iIGluIHRoZSBjb250ZXh0IG1lbnUKICAgICAgLy8gID0+IFdoZW4gdGhlIGZpcnN0IGVsZW1lbnQgZGlzYXBwZWFycyBmcm9tIHRoZSBkb20gdHJlZSB0aGVuIHdlIGtub3cgdGhlIHVzZXIgY2xpY2tlZCAidW5kbyIgaW4gdGhlIGNvbnRleHQgbWVudQogICAgICBpZiAod3lzaWh0bWw1LmJyb3dzZXIuaGFzVW5kb0luQ29udGV4dE1lbnUoKSkgewogICAgICAgIHZhciBpbnRlcnZhbCwgb2JzZXJ2ZWQsIGNsZWFuVXAgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIGNsZWFuVGVtcEVsZW1lbnRzKGRvYyk7CiAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTsKICAgICAgICB9OwogICAgICAgIAogICAgICAgIGRvbS5vYnNlcnZlKHRoaXMuZWxlbWVudCwgImNvbnRleHRtZW51IiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICBjbGVhblVwKCk7CiAgICAgICAgICB0aGF0LmNvbXBvc2VyLnNlbGVjdGlvbi5leGVjdXRlQW5kUmVzdG9yZVNpbXBsZShmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKHRoYXQuZWxlbWVudC5sYXN0Q2hpbGQpIHsKICAgICAgICAgICAgICB0aGF0LmNvbXBvc2VyLnNlbGVjdGlvbi5zZXRBZnRlcih0aGF0LmVsZW1lbnQubGFzdENoaWxkKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gZW5hYmxlIHVuZG8gYnV0dG9uIGluIGNvbnRleHQgbWVudQogICAgICAgICAgICBkb2MuZXhlY0NvbW1hbmQoImluc2VydEhUTUwiLCBmYWxzZSwgVU5ET19IVE1MKTsKICAgICAgICAgICAgLy8gZW5hYmxlIHJlZG8gYnV0dG9uIGluIGNvbnRleHQgbWVudQogICAgICAgICAgICBkb2MuZXhlY0NvbW1hbmQoImluc2VydEhUTUwiLCBmYWxzZSwgUkVET19IVE1MKTsKICAgICAgICAgICAgZG9jLmV4ZWNDb21tYW5kKCJ1bmRvIiwgZmFsc2UsIG51bGwpOwogICAgICAgICAgfSk7CgogICAgICAgICAgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKGRvYy5nZXRFbGVtZW50QnlJZCgiX3d5c2lodG1sNS1yZWRvIikpIHsKICAgICAgICAgICAgICBjbGVhblVwKCk7CiAgICAgICAgICAgICAgdGhhdC5yZWRvKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWRvYy5nZXRFbGVtZW50QnlJZCgiX3d5c2lodG1sNS11bmRvIikpIHsKICAgICAgICAgICAgICBjbGVhblVwKCk7CiAgICAgICAgICAgICAgdGhhdC51bmRvKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIDQwMCk7CgogICAgICAgICAgaWYgKCFvYnNlcnZlZCkgewogICAgICAgICAgICBvYnNlcnZlZCA9IHRydWU7CiAgICAgICAgICAgIGRvbS5vYnNlcnZlKGRvY3VtZW50LCAibW91c2Vkb3duIiwgY2xlYW5VcCk7CiAgICAgICAgICAgIGRvbS5vYnNlcnZlKGRvYywgWyJtb3VzZWRvd24iLCAicGFzdGUiLCAiY3V0IiwgImNvcHkiXSwgY2xlYW5VcCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgCiAgICAgIHRoaXMuZWRpdG9yCiAgICAgICAgLm9ic2VydmUoIm5ld3dvcmQ6Y29tcG9zZXIiLCBmdW5jdGlvbigpIHsKICAgICAgICAgIHRoYXQudHJhbnNhY3QoKTsKICAgICAgICB9KQogICAgICAgIAogICAgICAgIC5vYnNlcnZlKCJiZWZvcmVjb21tYW5kOmNvbXBvc2VyIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICB0aGF0LnRyYW5zYWN0KCk7CiAgICAgICAgfSk7CiAgICB9LAogICAgCiAgICB0cmFuc2FjdDogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBwcmV2aW91c0h0bWwgID0gdGhpcy5oaXN0b3J5W3RoaXMucG9zaXRpb24gLSAxXSwKICAgICAgICAgIGN1cnJlbnRIdG1sICAgPSB0aGlzLmNvbXBvc2VyLmdldFZhbHVlKCk7CiAgICAgIAogICAgICBpZiAoY3VycmVudEh0bWwgPT0gcHJldmlvdXNIdG1sKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIAogICAgICB2YXIgbGVuZ3RoID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCA9IHRoaXMucG9zaXRpb247CiAgICAgIGlmIChsZW5ndGggPiBNQVhfSElTVE9SWV9FTlRSSUVTKSB7CiAgICAgICAgdGhpcy5oaXN0b3J5LnNoaWZ0KCk7CiAgICAgICAgdGhpcy5wb3NpdGlvbi0tOwogICAgICB9CiAgICAgIAogICAgICB0aGlzLnBvc2l0aW9uKys7CiAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGN1cnJlbnRIdG1sKTsKICAgIH0sCiAgICAKICAgIHVuZG86IGZ1bmN0aW9uKCkgewogICAgICB0aGlzLnRyYW5zYWN0KCk7CiAgICAgIAogICAgICBpZiAodGhpcy5wb3NpdGlvbiA8PSAxKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIAogICAgICB0aGlzLnNldCh0aGlzLmhpc3RvcnlbLS10aGlzLnBvc2l0aW9uIC0gMV0pOwogICAgICB0aGlzLmVkaXRvci5maXJlKCJ1bmRvOmNvbXBvc2VyIik7CiAgICB9LAogICAgCiAgICByZWRvOiBmdW5jdGlvbigpIHsKICAgICAgaWYgKHRoaXMucG9zaXRpb24gPj0gdGhpcy5oaXN0b3J5Lmxlbmd0aCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICAKICAgICAgdGhpcy5zZXQodGhpcy5oaXN0b3J5WysrdGhpcy5wb3NpdGlvbiAtIDFdKTsKICAgICAgdGhpcy5lZGl0b3IuZmlyZSgicmVkbzpjb21wb3NlciIpOwogICAgfSwKICAgIAogICAgc2V0OiBmdW5jdGlvbihodG1sKSB7CiAgICAgIHRoaXMuY29tcG9zZXIuc2V0VmFsdWUoaHRtbCk7CiAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKHRydWUpOwogICAgfQogIH0pOwp9KSh3eXNpaHRtbDUpOwovKioKICogVE9ETzogdGhlIGZvbGxvd2luZyBtZXRob2RzIHN0aWxsIG5lZWQgdW5pdCB0ZXN0IGNvdmVyYWdlCiAqLwp3eXNpaHRtbDUudmlld3MuVmlldyA9IEJhc2UuZXh0ZW5kKAogIC8qKiBAc2NvcGUgd3lzaWh0bWw1LnZpZXdzLlZpZXcucHJvdG90eXBlICovIHsKICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24ocGFyZW50LCB0ZXh0YXJlYUVsZW1lbnQsIGNvbmZpZykgewogICAgdGhpcy5wYXJlbnQgICA9IHBhcmVudDsKICAgIHRoaXMuZWxlbWVudCAgPSB0ZXh0YXJlYUVsZW1lbnQ7CiAgICB0aGlzLmNvbmZpZyAgID0gY29uZmlnOwogICAgCiAgICB0aGlzLl9vYnNlcnZlVmlld0NoYW5nZSgpOwogIH0sCiAgCiAgX29ic2VydmVWaWV3Q2hhbmdlOiBmdW5jdGlvbigpIHsKICAgIHZhciB0aGF0ID0gdGhpczsKICAgIHRoaXMucGFyZW50Lm9ic2VydmUoImJlZm9yZWxvYWQiLCBmdW5jdGlvbigpIHsKICAgICAgdGhhdC5wYXJlbnQub2JzZXJ2ZSgiY2hhbmdlX3ZpZXciLCBmdW5jdGlvbih2aWV3KSB7CiAgICAgICAgaWYgKHZpZXcgPT09IHRoYXQubmFtZSkgewogICAgICAgICAgdGhhdC5wYXJlbnQuY3VycmVudFZpZXcgPSB0aGF0OwogICAgICAgICAgdGhhdC5zaG93KCk7CiAgICAgICAgICAvLyBVc2luZyB0aW55IGRlbGF5IGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHBsYWNlaG9sZGVyIGlzIHNldCBiZWZvcmUgZm9jdXNpbmcKICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRoYXQuZm9jdXMoKTsgfSwgMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoYXQuaGlkZSgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9LAogIAogIGZvY3VzOiBmdW5jdGlvbigpIHsKICAgIGlmICh0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKCI6Zm9jdXMiKSA9PT0gdGhpcy5lbGVtZW50KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgdHJ5IHsgdGhpcy5lbGVtZW50LmZvY3VzKCk7IH0gY2F0Y2goZSkge30KICB9LAogIAogIGhpZGU6IGZ1bmN0aW9uKCkgewogICAgdGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgfSwKICAKICBzaG93OiBmdW5jdGlvbigpIHsKICAgIHRoaXMuZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgfSwKICAKICBkaXNhYmxlOiBmdW5jdGlvbigpIHsKICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRpc2FibGVkIiwgImRpc2FibGVkIik7CiAgfSwKICAKICBlbmFibGU6IGZ1bmN0aW9uKCkgewogICAgdGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiZGlzYWJsZWQiKTsKICB9Cn0pOyhmdW5jdGlvbih3eXNpaHRtbDUpIHsKICB2YXIgZG9tICAgICAgID0gd3lzaWh0bWw1LmRvbSwKICAgICAgYnJvd3NlciAgID0gd3lzaWh0bWw1LmJyb3dzZXI7CiAgCiAgd3lzaWh0bWw1LnZpZXdzLkNvbXBvc2VyID0gd3lzaWh0bWw1LnZpZXdzLlZpZXcuZXh0ZW5kKAogICAgLyoqIEBzY29wZSB3eXNpaHRtbDUudmlld3MuQ29tcG9zZXIucHJvdG90eXBlICovIHsKICAgIG5hbWU6ICJjb21wb3NlciIsCgogICAgLy8gTmVlZGVkIGZvciBmaXJlZm94IGluIG9yZGVyIHRvIGRpc3BsYXkgYSBwcm9wZXIgY2FyZXQgaW4gYW4gZW1wdHkgY29udGVudEVkaXRhYmxlCiAgICBDQVJFVF9IQUNLOiAiPGJyPiIsCgogICAgY29uc3RydWN0b3I6IGZ1bmN0aW9uKHBhcmVudCwgdGV4dGFyZWFFbGVtZW50LCBjb25maWcpIHsKICAgICAgdGhpcy5iYXNlKHBhcmVudCwgdGV4dGFyZWFFbGVtZW50LCBjb25maWcpOwogICAgICB0aGlzLnRleHRhcmVhID0gdGhpcy5wYXJlbnQudGV4dGFyZWE7CiAgICAgIHRoaXMuX2luaXRTYW5kYm94KCk7CiAgICB9LAoKICAgIGNsZWFyOiBmdW5jdGlvbigpIHsKICAgICAgdGhpcy5lbGVtZW50LmlubmVySFRNTCA9IGJyb3dzZXIuZGlzcGxheXNDYXJldEluRW1wdHlDb250ZW50RWRpdGFibGVDb3JyZWN0bHkoKSA/ICIiIDogdGhpcy5DQVJFVF9IQUNLOwogICAgfSwKCiAgICBnZXRWYWx1ZTogZnVuY3Rpb24ocGFyc2UpIHsKICAgICAgdmFyIHZhbHVlID0gdGhpcy5pc0VtcHR5KCkgPyAiIiA6IHd5c2lodG1sNS5xdWlya3MuZ2V0Q29ycmVjdElubmVySFRNTCh0aGlzLmVsZW1lbnQpOwogICAgICAKICAgICAgaWYgKHBhcnNlKSB7CiAgICAgICAgdmFsdWUgPSB0aGlzLnBhcmVudC5wYXJzZSh2YWx1ZSk7CiAgICAgIH0KCiAgICAgIC8vIFJlcGxhY2UgYWxsICJ6ZXJvIHdpZHRoIG5vIGJyZWFraW5nIHNwYWNlIiBjaGFycwogICAgICAvLyB3aGljaCBhcmUgdXNlZCBhcyBoYWNrcyB0byBlbmFibGUgc29tZSBmdW5jdGlvbmFsaXRpZXMKICAgICAgLy8gQWxzbyByZW1vdmUgYWxsIENBUkVUIGhhY2tzIHRoYXQgc29tZWhvdyBnb3QgbGVmdAogICAgICB2YWx1ZSA9IHd5c2lodG1sNS5sYW5nLnN0cmluZyh2YWx1ZSkucmVwbGFjZSh3eXNpaHRtbDUuSU5WSVNJQkxFX1NQQUNFKS5ieSgiIik7CgogICAgICByZXR1cm4gdmFsdWU7CiAgICB9LAoKICAgIHNldFZhbHVlOiBmdW5jdGlvbihodG1sLCBwYXJzZSkgewogICAgICBpZiAocGFyc2UpIHsKICAgICAgICBodG1sID0gdGhpcy5wYXJlbnQucGFyc2UoaHRtbCk7CiAgICAgIH0KICAgICAgdGhpcy5lbGVtZW50LmlubmVySFRNTCA9IGh0bWw7CiAgICB9LAoKICAgIHNob3c6IGZ1bmN0aW9uKCkgewogICAgICB0aGlzLmlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gdGhpcy5fZGlzcGxheVN0eWxlIHx8ICIiOwoKICAgICAgLy8gRmlyZWZveCBuZWVkcyB0aGlzLCBvdGhlcndpc2UgY29udGVudEVkaXRhYmxlIGJlY29tZXMgdW5lZGl0YWJsZQogICAgICB0aGlzLmRpc2FibGUoKTsKICAgICAgdGhpcy5lbmFibGUoKTsKICAgIH0sCgogICAgaGlkZTogZnVuY3Rpb24oKSB7CiAgICAgIHRoaXMuX2Rpc3BsYXlTdHlsZSA9IGRvbS5nZXRTdHlsZSgiZGlzcGxheSIpLmZyb20odGhpcy5pZnJhbWUpOwogICAgICBpZiAodGhpcy5fZGlzcGxheVN0eWxlID09PSAibm9uZSIpIHsKICAgICAgICB0aGlzLl9kaXNwbGF5U3R5bGUgPSBudWxsOwogICAgICB9CiAgICAgIHRoaXMuaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICB9LAoKICAgIGRpc2FibGU6IGZ1bmN0aW9uKCkgewogICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJjb250ZW50RWRpdGFibGUiKTsKICAgICAgdGhpcy5iYXNlKCk7CiAgICB9LAoKICAgIGVuYWJsZTogZnVuY3Rpb24oKSB7CiAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoImNvbnRlbnRFZGl0YWJsZSIsICJ0cnVlIik7CiAgICAgIHRoaXMuYmFzZSgpOwogICAgfSwKCiAgICBmb2N1czogZnVuY3Rpb24oc2V0VG9FbmQpIHsKICAgICAgLy8gSUUgOCBmaXJlcyB0aGUgZm9jdXMgZXZlbnQgYWZ0ZXIgLmZvY3VzKCkKICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgYnkgb3VyIHNpbXVsYXRlX3BsYWNlaG9sZGVyLmpzIHRvIHdvcmsKICAgICAgLy8gdGhlcmVmb3JlIHdlIGNsZWFyIGl0IG91cnNlbHZlcyB0aGlzIHRpbWUKICAgICAgaWYgKHd5c2lodG1sNS5icm93c2VyLmRvZXNBc3luY0ZvY3VzKCkgJiYgdGhpcy5oYXNQbGFjZWhvbGRlclNldCgpKSB7CiAgICAgICAgdGhpcy5jbGVhcigpOwogICAgICB9CiAgICAgIAogICAgICB0aGlzLmJhc2UoKTsKICAgICAgCiAgICAgIHZhciBsYXN0Q2hpbGQgPSB0aGlzLmVsZW1lbnQubGFzdENoaWxkOwogICAgICBpZiAoc2V0VG9FbmQgJiYgbGFzdENoaWxkKSB7CiAgICAgICAgaWYgKGxhc3RDaGlsZC5ub2RlTmFtZSA9PT0gIkJSIikgewogICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0QmVmb3JlKHRoaXMuZWxlbWVudC5sYXN0Q2hpbGQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRBZnRlcih0aGlzLmVsZW1lbnQubGFzdENoaWxkKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCgogICAgZ2V0VGV4dENvbnRlbnQ6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gZG9tLmdldFRleHRDb250ZW50KHRoaXMuZWxlbWVudCk7CiAgICB9LAoKICAgIGhhc1BsYWNlaG9sZGVyU2V0OiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuZ2V0VGV4dENvbnRlbnQoKSA9PSB0aGlzLnRleHRhcmVhLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIpOwogICAgfSwKCiAgICBpc0VtcHR5OiBmdW5jdGlvbigpIHsKICAgICAgdmFyIGlubmVySFRNTCAgICAgICAgICAgICAgID0gdGhpcy5lbGVtZW50LmlubmVySFRNTCwKICAgICAgICAgIGVsZW1lbnRzV2l0aFZpc3VhbFZhbHVlID0gImJsb2NrcXVvdGUsIHVsLCBvbCwgaW1nLCBlbWJlZCwgb2JqZWN0LCB0YWJsZSwgaWZyYW1lLCBzdmcsIHZpZGVvLCBhdWRpbywgYnV0dG9uLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSI7CiAgICAgIHJldHVybiBpbm5lckhUTUwgPT09ICIiICAgICAgICAgICAgICB8fCAKICAgICAgICAgICAgIGlubmVySFRNTCA9PT0gdGhpcy5DQVJFVF9IQUNLIHx8CiAgICAgICAgICAgICB0aGlzLmhhc1BsYWNlaG9sZGVyU2V0KCkgICAgICB8fAogICAgICAgICAgICAgKHRoaXMuZ2V0VGV4dENvbnRlbnQoKSA9PT0gIiIgJiYgIXRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKGVsZW1lbnRzV2l0aFZpc3VhbFZhbHVlKSk7CiAgICB9LAoKICAgIF9pbml0U2FuZGJveDogZnVuY3Rpb24oKSB7CiAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgCiAgICAgIHRoaXMuc2FuZGJveCA9IG5ldyBkb20uU2FuZGJveChmdW5jdGlvbigpIHsKICAgICAgICB0aGF0Ll9jcmVhdGUoKTsKICAgICAgfSwgewogICAgICAgIHN0eWxlc2hlZXRzOiAgdGhpcy5jb25maWcuc3R5bGVzaGVldHMKICAgICAgfSk7CiAgICAgIHRoaXMuaWZyYW1lICA9IHRoaXMuc2FuZGJveC5nZXRJZnJhbWUoKTsKCiAgICAgIC8vIENyZWF0ZSBoaWRkZW4gZmllbGQgd2hpY2ggdGVsbHMgdGhlIHNlcnZlciBhZnRlciBzdWJtaXQsIHRoYXQgdGhlIHVzZXIgdXNlZCBhbiB3eXNpd3lnIGVkaXRvcgogICAgICB2YXIgaGlkZGVuRmllbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwogICAgICBoaWRkZW5GaWVsZC50eXBlICAgPSAiaGlkZGVuIjsKICAgICAgaGlkZGVuRmllbGQubmFtZSAgID0gIl93eXNpaHRtbDVfbW9kZSI7CiAgICAgIGhpZGRlbkZpZWxkLnZhbHVlICA9IDE7CgogICAgICAvLyBTdG9yZSByZWZlcmVuY2UgdG8gY3VycmVudCB3eXNpaHRtbDUgaW5zdGFuY2Ugb24gdGhlIHRleHRhcmVhIGVsZW1lbnQKICAgICAgdmFyIHRleHRhcmVhRWxlbWVudCA9IHRoaXMudGV4dGFyZWEuZWxlbWVudDsKICAgICAgZG9tLmluc2VydCh0aGlzLmlmcmFtZSkuYWZ0ZXIodGV4dGFyZWFFbGVtZW50KTsKICAgICAgZG9tLmluc2VydChoaWRkZW5GaWVsZCkuYWZ0ZXIodGV4dGFyZWFFbGVtZW50KTsKICAgIH0sCgogICAgX2NyZWF0ZTogZnVuY3Rpb24oKSB7CiAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgCiAgICAgIHRoaXMuZG9jICAgICAgICAgICAgICAgID0gdGhpcy5zYW5kYm94LmdldERvY3VtZW50KCk7CiAgICAgIHRoaXMuZWxlbWVudCAgICAgICAgICAgID0gdGhpcy5kb2MuYm9keTsKICAgICAgdGhpcy50ZXh0YXJlYSAgICAgICAgICAgPSB0aGlzLnBhcmVudC50ZXh0YXJlYTsKICAgICAgdGhpcy5lbGVtZW50LmlubmVySFRNTCAgPSB0aGlzLnRleHRhcmVhLmdldFZhbHVlKHRydWUpOwogICAgICB0aGlzLmVuYWJsZSgpOwogICAgICAKICAgICAgLy8gTWFrZSBzdXJlIG91ciBzZWxlY3Rpb24gaGFuZGxlciBpcyByZWFkeQogICAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyB3eXNpaHRtbDUuU2VsZWN0aW9uKHRoaXMucGFyZW50KTsKICAgICAgCiAgICAgIC8vIE1ha2Ugc3VyZSBjb21tYW5kcyBkaXNwYXRjaGVyIGlzIHJlYWR5CiAgICAgIHRoaXMuY29tbWFuZHMgID0gbmV3IHd5c2lodG1sNS5Db21tYW5kcyh0aGlzLnBhcmVudCk7CgogICAgICBkb20uY29weUF0dHJpYnV0ZXMoWwogICAgICAgICJjbGFzc05hbWUiLCAic3BlbGxjaGVjayIsICJ0aXRsZSIsICJsYW5nIiwgImRpciIsICJhY2Nlc3NLZXkiCiAgICAgIF0pLmZyb20odGhpcy50ZXh0YXJlYS5lbGVtZW50KS50byh0aGlzLmVsZW1lbnQpOwogICAgICAKICAgICAgZG9tLmFkZENsYXNzKHRoaXMuZWxlbWVudCwgdGhpcy5jb25maWcuY29tcG9zZXJDbGFzc05hbWUpOwoKICAgICAgLy8gTWFrZSB0aGUgZWRpdG9yIGxvb2sgbGlrZSB0aGUgb3JpZ2luYWwgdGV4dGFyZWEsIGJ5IHN5bmNpbmcgc3R5bGVzCiAgICAgIGlmICh0aGlzLmNvbmZpZy5zdHlsZSkgewogICAgICAgIHRoaXMuc3R5bGUoKTsKICAgICAgfQoKICAgICAgdGhpcy5vYnNlcnZlKCk7CgogICAgICB2YXIgbmFtZSA9IHRoaXMuY29uZmlnLm5hbWU7CiAgICAgIGlmIChuYW1lKSB7CiAgICAgICAgZG9tLmFkZENsYXNzKHRoaXMuZWxlbWVudCwgbmFtZSk7CiAgICAgICAgZG9tLmFkZENsYXNzKHRoaXMuaWZyYW1lLCBuYW1lKTsKICAgICAgfQoKICAgICAgLy8gU2ltdWxhdGUgaHRtbDUgcGxhY2Vob2xkZXIgYXR0cmlidXRlIG9uIGNvbnRlbnRFZGl0YWJsZSBlbGVtZW50CiAgICAgIHZhciBwbGFjZWhvbGRlclRleHQgPSB0eXBlb2YodGhpcy5jb25maWcucGxhY2Vob2xkZXIpID09PSAic3RyaW5nIgogICAgICAgID8gdGhpcy5jb25maWcucGxhY2Vob2xkZXIKICAgICAgICA6IHRoaXMudGV4dGFyZWEuZWxlbWVudC5nZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIik7CiAgICAgIGlmIChwbGFjZWhvbGRlclRleHQpIHsKICAgICAgICBkb20uc2ltdWxhdGVQbGFjZWhvbGRlcih0aGlzLnBhcmVudCwgdGhpcywgcGxhY2Vob2xkZXJUZXh0KTsKICAgICAgfQogICAgICAKICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGJyb3dzZXIgYXZvaWRzIHVzaW5nIGlubGluZSBzdHlsZXMgd2hlbmV2ZXIgcG9zc2libGUKICAgICAgdGhpcy5jb21tYW5kcy5leGVjKCJzdHlsZVdpdGhDU1MiLCBmYWxzZSk7CgogICAgICB0aGlzLl9pbml0QXV0b0xpbmtpbmcoKTsKICAgICAgdGhpcy5faW5pdE9iamVjdFJlc2l6aW5nKCk7CiAgICAgIHRoaXMuX2luaXRVbmRvTWFuYWdlcigpOwoKICAgICAgLy8gU2ltdWxhdGUgaHRtbDUgYXV0b2ZvY3VzIG9uIGNvbnRlbnRFZGl0YWJsZSBlbGVtZW50CiAgICAgIGlmICh0aGlzLnRleHRhcmVhLmVsZW1lbnQuaGFzQXR0cmlidXRlKCJhdXRvZm9jdXMiKSB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCI6Zm9jdXMiKSA9PSB0aGlzLnRleHRhcmVhLmVsZW1lbnQpIHsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0aGF0LmZvY3VzKCk7IH0sIDEwMCk7CiAgICAgIH0KCiAgICAgIHd5c2lodG1sNS5xdWlya3MuaW5zZXJ0TGluZUJyZWFrT25SZXR1cm4odGhpcyk7CgogICAgICAvLyBJRSBzb21ldGltZXMgbGVhdmVzIGEgc2luZ2xlIHBhcmFncmFwaCwgd2hpY2ggY2FuJ3QgYmUgcmVtb3ZlZCBieSB0aGUgdXNlcgogICAgICBpZiAoIWJyb3dzZXIuY2xlYXJzQ29udGVudEVkaXRhYmxlQ29ycmVjdGx5KCkpIHsKICAgICAgICB3eXNpaHRtbDUucXVpcmtzLmVuc3VyZVByb3BlckNsZWFyaW5nKHRoaXMpOwogICAgICB9CgogICAgICBpZiAoIWJyb3dzZXIuY2xlYXJzTGlzdHNJbkNvbnRlbnRFZGl0YWJsZUNvcnJlY3RseSgpKSB7CiAgICAgICAgd3lzaWh0bWw1LnF1aXJrcy5lbnN1cmVQcm9wZXJDbGVhcmluZ09mTGlzdHModGhpcyk7CiAgICAgIH0KCiAgICAgIC8vIFNldCB1cCBhIHN5bmMgdGhhdCBtYWtlcyBzdXJlIHRoYXQgdGV4dGFyZWEgYW5kIGVkaXRvciBoYXZlIHRoZSBzYW1lIGNvbnRlbnQKICAgICAgaWYgKHRoaXMuaW5pdFN5bmMgJiYgdGhpcy5jb25maWcuc3luYykgewogICAgICAgIHRoaXMuaW5pdFN5bmMoKTsKICAgICAgfQoKICAgICAgLy8gT2theSBoaWRlIHRoZSB0ZXh0YXJlYSwgd2UgYXJlIHJlYWR5IHRvIGdvCiAgICAgIHRoaXMudGV4dGFyZWEuaGlkZSgpOwoKICAgICAgLy8gRmlyZSBnbG9iYWwgKGJlZm9yZS0pbG9hZCBldmVudAogICAgICB0aGlzLnBhcmVudC5maXJlKCJiZWZvcmVsb2FkIikuZmlyZSgibG9hZCIpOwogICAgfSwKCiAgICBfaW5pdEF1dG9MaW5raW5nOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIHRoYXQgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHRoaXMsCiAgICAgICAgICBzdXBwb3J0c0Rpc2FibGluZ09mQXV0b0xpbmtpbmcgPSBicm93c2VyLmNhbkRpc2FibGVBdXRvTGlua2luZygpLAogICAgICAgICAgc3VwcG9ydHNBdXRvTGlua2luZyAgICAgICAgICAgID0gYnJvd3Nlci5kb2VzQXV0b0xpbmtpbmdJbkNvbnRlbnRFZGl0YWJsZSgpOwogICAgICBpZiAoc3VwcG9ydHNEaXNhYmxpbmdPZkF1dG9MaW5raW5nKSB7CiAgICAgICAgdGhpcy5jb21tYW5kcy5leGVjKCJhdXRvVXJsRGV0ZWN0IiwgZmFsc2UpOwogICAgICB9CgogICAgICBpZiAoIXRoaXMuY29uZmlnLmF1dG9MaW5rKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICAvLyBPbmx5IGRvIHRoZSBhdXRvIGxpbmtpbmcgYnkgb3Vyc2VsdmVzIHdoZW4gdGhlIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGF1dG8gbGlua2luZwogICAgICAvLyBPUiB3aGVuIGhlIHN1cHBvcnRzIGF1dG8gbGlua2luZyBidXQgd2Ugd2VyZSBhYmxlIHRvIHR1cm4gaXQgb2ZmIChJRTkrKQogICAgICBpZiAoIXN1cHBvcnRzQXV0b0xpbmtpbmcgfHwgKHN1cHBvcnRzQXV0b0xpbmtpbmcgJiYgc3VwcG9ydHNEaXNhYmxpbmdPZkF1dG9MaW5raW5nKSkgewogICAgICAgIHRoaXMucGFyZW50Lm9ic2VydmUoIm5ld3dvcmQ6Y29tcG9zZXIiLCBmdW5jdGlvbigpIHsKICAgICAgICAgIHRoYXQuc2VsZWN0aW9uLmV4ZWN1dGVBbmRSZXN0b3JlKGZ1bmN0aW9uKHN0YXJ0Q29udGFpbmVyLCBlbmRDb250YWluZXIpIHsKICAgICAgICAgICAgZG9tLmF1dG9MaW5rKGVuZENvbnRhaW5lci5wYXJlbnROb2RlKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9CgogICAgICAvLyBBc3N1bWluZyB3ZSBoYXZlIHRoZSBmb2xsb3dpbmc6CiAgICAgIC8vICA8YSBocmVmPSJodHRwOi8vd3d3Lmdvb2dsZS5kZSI+aHR0cDovL3d3dy5nb29nbGUuZGU8L2E+CiAgICAgIC8vIElmIGEgdXNlciBub3cgY2hhbmdlcyB0aGUgdXJsIGluIHRoZSBpbm5lckhUTUwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdAogICAgICAvLyBpdCdzIHN5bmNocm9uaXplZCB3aXRoIHRoZSBocmVmIGF0dHJpYnV0ZSAoYXMgbG9uZyBhcyB0aGUgaW5uZXJIVE1MIGlzIHN0aWxsIGEgdXJsKQogICAgICB2YXIgLy8gVXNlIGEgbGl2ZSBOb2RlTGlzdCB0byBjaGVjayB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgbGlua3MgaW4gdGhlIGRvY3VtZW50CiAgICAgICAgICBsaW5rcyAgICAgICAgICAgPSB0aGlzLnNhbmRib3guZ2V0RG9jdW1lbnQoKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpLAogICAgICAgICAgLy8gVGhlIGF1dG9MaW5rIGhlbHBlciBtZXRob2QgcmV2ZWFscyBhIHJlZyBleHAgdG8gZGV0ZWN0IGNvcnJlY3QgdXJscwogICAgICAgICAgdXJsUmVnRXhwICAgICAgID0gZG9tLmF1dG9MaW5rLlVSTF9SRUdfRVhQLAogICAgICAgICAgZ2V0VGV4dENvbnRlbnQgID0gZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgICAgICB2YXIgdGV4dENvbnRlbnQgPSB3eXNpaHRtbDUubGFuZy5zdHJpbmcoZG9tLmdldFRleHRDb250ZW50KGVsZW1lbnQpKS50cmltKCk7CiAgICAgICAgICAgIGlmICh0ZXh0Q29udGVudC5zdWJzdHIoMCwgNCkgPT09ICJ3d3cuIikgewogICAgICAgICAgICAgIHRleHRDb250ZW50ID0gImh0dHA6Ly8iICsgdGV4dENvbnRlbnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRleHRDb250ZW50OwogICAgICAgICAgfTsKCiAgICAgIGRvbS5vYnNlcnZlKHRoaXMuZWxlbWVudCwgImtleWRvd24iLCBmdW5jdGlvbihldmVudCkgewogICAgICAgIGlmICghbGlua3MubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB2YXIgc2VsZWN0ZWROb2RlID0gdGhhdC5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50KSwKICAgICAgICAgICAgbGluayAgICAgICAgID0gZG9tLmdldFBhcmVudEVsZW1lbnQoc2VsZWN0ZWROb2RlLCB7IG5vZGVOYW1lOiAiQSIgfSwgNCksCiAgICAgICAgICAgIHRleHRDb250ZW50OwoKICAgICAgICBpZiAoIWxpbmspIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHRleHRDb250ZW50ID0gZ2V0VGV4dENvbnRlbnQobGluayk7CiAgICAgICAgLy8ga2V5ZG93biBpcyBmaXJlZCBiZWZvcmUgdGhlIGFjdHVhbCBjb250ZW50IGlzIGNoYW5nZWQKICAgICAgICAvLyB0aGVyZWZvcmUgd2Ugc2V0IGEgdGltZW91dCB0byBjaGFuZ2UgdGhlIGhyZWYKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIG5ld1RleHRDb250ZW50ID0gZ2V0VGV4dENvbnRlbnQobGluayk7CiAgICAgICAgICBpZiAobmV3VGV4dENvbnRlbnQgPT09IHRleHRDb250ZW50KSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBPbmx5IHNldCBocmVmIHdoZW4gbmV3IGhyZWYgbG9va3MgbGlrZSBhIHZhbGlkIHVybAogICAgICAgICAgaWYgKG5ld1RleHRDb250ZW50Lm1hdGNoKHVybFJlZ0V4cCkpIHsKICAgICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoImhyZWYiLCBuZXdUZXh0Q29udGVudCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgMCk7CiAgICAgIH0pOwogICAgfSwKCiAgICBfaW5pdE9iamVjdFJlc2l6aW5nOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIHByb3BlcnRpZXMgICAgICAgID0gWyJ3aWR0aCIsICJoZWlnaHQiXSwKICAgICAgICAgIHByb3BlcnRpZXNMZW5ndGggID0gcHJvcGVydGllcy5sZW5ndGgsCiAgICAgICAgICBlbGVtZW50ICAgICAgICAgICA9IHRoaXMuZWxlbWVudDsKICAgICAgCiAgICAgIHRoaXMuY29tbWFuZHMuZXhlYygiZW5hYmxlT2JqZWN0UmVzaXppbmciLCB0aGlzLmNvbmZpZy5hbGxvd09iamVjdFJlc2l6aW5nKTsKICAgICAgCiAgICAgIGlmICh0aGlzLmNvbmZpZy5hbGxvd09iamVjdFJlc2l6aW5nKSB7CiAgICAgICAgIC8vIElFIHNldHMgaW5saW5lIHN0eWxlcyBhZnRlciByZXNpemluZyBvYmplY3RzCiAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgbGluZXMgbWFrZSBzdXJlIHRoYXQgdGhlIHdpZHRoL2hlaWdodCBjc3MgcHJvcGVydGllcwogICAgICAgICAvLyBhcmUgY29waWVkIG92ZXIgdG8gdGhlIHdpZHRoL2hlaWdodCBhdHRyaWJ1dGVzCiAgICAgICAgaWYgKGJyb3dzZXIuc3VwcG9ydHNFdmVudCgicmVzaXplZW5kIikpIHsKICAgICAgICAgIGRvbS5vYnNlcnZlKGVsZW1lbnQsICJyZXNpemVlbmQiLCBmdW5jdGlvbihldmVudCkgewogICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQsCiAgICAgICAgICAgICAgICBzdHlsZSAgPSB0YXJnZXQuc3R5bGUsCiAgICAgICAgICAgICAgICBpICAgICAgPSAwLAogICAgICAgICAgICAgICAgcHJvcGVydHk7CiAgICAgICAgICAgIGZvcig7IGk8cHJvcGVydGllc0xlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldOwogICAgICAgICAgICAgIGlmIChzdHlsZVtwcm9wZXJ0eV0pIHsKICAgICAgICAgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUocHJvcGVydHksIHBhcnNlSW50KHN0eWxlW3Byb3BlcnR5XSwgMTApKTsKICAgICAgICAgICAgICAgIHN0eWxlW3Byb3BlcnR5XSA9ICIiOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBBZnRlciByZXNpemluZyBJRSBzb21ldGltZXMgZm9yZ2V0cyB0byByZW1vdmUgdGhlIG9sZCByZXNpemUgaGFuZGxlcwogICAgICAgICAgICB3eXNpaHRtbDUucXVpcmtzLnJlZHJhdyhlbGVtZW50KTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoYnJvd3Nlci5zdXBwb3J0c0V2ZW50KCJyZXNpemVzdGFydCIpKSB7CiAgICAgICAgICBkb20ub2JzZXJ2ZShlbGVtZW50LCAicmVzaXplc3RhcnQiLCBmdW5jdGlvbihldmVudCkgeyBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAKICAgIF9pbml0VW5kb01hbmFnZXI6IGZ1bmN0aW9uKCkgewogICAgICBuZXcgd3lzaWh0bWw1LlVuZG9NYW5hZ2VyKHRoaXMucGFyZW50KTsKICAgIH0KICB9KTsKfSkod3lzaWh0bWw1KTsoZnVuY3Rpb24od3lzaWh0bWw1KSB7CiAgdmFyIGRvbSAgICAgICAgICAgICA9IHd5c2lodG1sNS5kb20sCiAgICAgIGRvYyAgICAgICAgICAgICA9IGRvY3VtZW50LAogICAgICB3aW4gICAgICAgICAgICAgPSB3aW5kb3csCiAgICAgIEhPU1RfVEVNUExBVEUgICA9IGRvYy5jcmVhdGVFbGVtZW50KCJkaXYiKSwKICAgICAgLyoqCiAgICAgICAqIFN0eWxlcyB0byBjb3B5IGZyb20gdGV4dGFyZWEgdG8gdGhlIGNvbXBvc2VyIGVsZW1lbnQKICAgICAgICovCiAgICAgIFRFWFRfRk9STUFUVElORyA9IFsKICAgICAgICAiYmFja2dyb3VuZC1jb2xvciIsCiAgICAgICAgImNvbG9yIiwgImN1cnNvciIsCiAgICAgICAgImZvbnQtZmFtaWx5IiwgImZvbnQtc2l6ZSIsICJmb250LXN0eWxlIiwgImZvbnQtdmFyaWFudCIsICJmb250LXdlaWdodCIsCiAgICAgICAgImxpbmUtaGVpZ2h0IiwgImxldHRlci1zcGFjaW5nIiwKICAgICAgICAidGV4dC1hbGlnbiIsICJ0ZXh0LWRlY29yYXRpb24iLCAidGV4dC1pbmRlbnQiLCAidGV4dC1yZW5kZXJpbmciLAogICAgICAgICJ3b3JkLWJyZWFrIiwgIndvcmQtd3JhcCIsICJ3b3JkLXNwYWNpbmciCiAgICAgIF0sCiAgICAgIC8qKgogICAgICAgKiBTdHlsZXMgdG8gY29weSBmcm9tIHRleHRhcmVhIHRvIHRoZSBpZnJhbWUKICAgICAgICovCiAgICAgIEJPWF9GT1JNQVRUSU5HID0gWwogICAgICAgICJiYWNrZ3JvdW5kLWNvbG9yIiwKICAgICAgICAiYm9yZGVyLWNvbGxhcHNlIiwKICAgICAgICAiYm9yZGVyLWJvdHRvbS1jb2xvciIsICJib3JkZXItYm90dG9tLXN0eWxlIiwgImJvcmRlci1ib3R0b20td2lkdGgiLAogICAgICAgICJib3JkZXItbGVmdC1jb2xvciIsICJib3JkZXItbGVmdC1zdHlsZSIsICJib3JkZXItbGVmdC13aWR0aCIsCiAgICAgICAgImJvcmRlci1yaWdodC1jb2xvciIsICJib3JkZXItcmlnaHQtc3R5bGUiLCAiYm9yZGVyLXJpZ2h0LXdpZHRoIiwKICAgICAgICAiYm9yZGVyLXRvcC1jb2xvciIsICJib3JkZXItdG9wLXN0eWxlIiwgImJvcmRlci10b3Atd2lkdGgiLAogICAgICAgICJjbGVhciIsICJkaXNwbGF5IiwgImZsb2F0IiwKICAgICAgICAibWFyZ2luLWJvdHRvbSIsICJtYXJnaW4tbGVmdCIsICJtYXJnaW4tcmlnaHQiLCAibWFyZ2luLXRvcCIsCiAgICAgICAgIm91dGxpbmUtY29sb3IiLCAib3V0bGluZS1vZmZzZXQiLCAib3V0bGluZS13aWR0aCIsICJvdXRsaW5lLXN0eWxlIiwKICAgICAgICAicGFkZGluZy1sZWZ0IiwgInBhZGRpbmctcmlnaHQiLCAicGFkZGluZy10b3AiLCAicGFkZGluZy1ib3R0b20iLAogICAgICAgICJwb3NpdGlvbiIsICJ0b3AiLCAibGVmdCIsICJyaWdodCIsICJib3R0b20iLCAiei1pbmRleCIsCiAgICAgICAgInZlcnRpY2FsLWFsaWduIiwgInRleHQtYWxpZ24iLAogICAgICAgICItd2Via2l0LWJveC1zaXppbmciLCAiLW1vei1ib3gtc2l6aW5nIiwgIi1tcy1ib3gtc2l6aW5nIiwgImJveC1zaXppbmciLAogICAgICAgICItd2Via2l0LWJveC1zaGFkb3ciLCAiLW1vei1ib3gtc2hhZG93IiwgIi1tcy1ib3gtc2hhZG93IiwiYm94LXNoYWRvdyIsCiAgICAgICAgIi13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMiLCAiLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0IiwgImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiwKICAgICAgICAiLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cyIsICItbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQiLCAiYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMiLAogICAgICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiLCAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQiLCAiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyIsCiAgICAgICAgIi13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyIsICItbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdCIsICJib3JkZXItdG9wLWxlZnQtcmFkaXVzIiwKICAgICAgICAid2lkdGgiLCAiaGVpZ2h0IgogICAgICBdLAogICAgICAvKioKICAgICAgICogU3R5bGVzIHRvIHN5bmMgd2hpbGUgdGhlIHdpbmRvdyBnZXRzIHJlc2l6ZWQKICAgICAgICovCiAgICAgIFJFU0laRV9TVFlMRSA9IFsKICAgICAgICAid2lkdGgiLCAiaGVpZ2h0IiwKICAgICAgICAidG9wIiwgImxlZnQiLCAicmlnaHQiLCAiYm90dG9tIgogICAgICBdLAogICAgICBBRERJVElPTkFMX0NTU19SVUxFUyA9IFsKICAgICAgICAiaHRtbCAgICAgICAgICAgICB7IGhlaWdodDogMTAwJTsgfSIsCiAgICAgICAgImJvZHkgICAgICAgICAgICAgeyBtaW4taGVpZ2h0OiAxMDAlOyBwYWRkaW5nOiAwOyBtYXJnaW46IDA7IG1hcmdpbi10b3A6IC0xcHg7IHBhZGRpbmctdG9wOiAxcHg7IH0iLAogICAgICAgICIuX3d5c2lodG1sNS10ZW1wIHsgZGlzcGxheTogbm9uZTsgfSIsCiAgICAgICAgd3lzaWh0bWw1LmJyb3dzZXIuaXNHZWNrbyA/CiAgICAgICAgICAiYm9keS5wbGFjZWhvbGRlciB7IGNvbG9yOiBncmF5dGV4dCAhaW1wb3J0YW50OyB9IiA6IAogICAgICAgICAgImJvZHkucGxhY2Vob2xkZXIgeyBjb2xvcjogI2E5YTlhOSAhaW1wb3J0YW50OyB9IiwKICAgICAgICAiYm9keVtkaXNhYmxlZF0gICB7IGJhY2tncm91bmQtY29sb3I6ICNlZWUgIWltcG9ydGFudDsgY29sb3I6ICM5OTkgIWltcG9ydGFudDsgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7IH0iLAogICAgICAgIC8vIEVuc3VyZSB0aGF0IHVzZXIgc2VlJ3MgYnJva2VuIGltYWdlcyBhbmQgY2FuIGRlbGV0ZSB0aGVtCiAgICAgICAgImltZzotbW96LWJyb2tlbiAgeyAtbW96LWZvcmNlLWJyb2tlbi1pbWFnZS1pY29uOiAxOyBoZWlnaHQ6IDI0cHg7IHdpZHRoOiAyNHB4OyB9IgogICAgICBdOwogIAogIC8qKgogICAqIFdpdGggInNldEFjdGl2ZSIgSUUgb2ZmZXJzIGEgc21hcnQgd2F5IG9mIGZvY3VzaW5nIGVsZW1lbnRzIHdpdGhvdXQgc2Nyb2xsaW5nIHRoZW0gaW50byB2aWV3OgogICAqIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczUzNjczOCh2PXZzLjg1KS5hc3B4CiAgICoKICAgKiBPdGhlciBicm93c2VycyBuZWVkIGEgbW9yZSBoYWNreSB3YXk6IChwc3NzdCBkb24ndCB0ZWxsIG15IG1hbWEpCiAgICogSW4gb3JkZXIgdG8gcHJldmVudCB0aGUgZWxlbWVudCBiZWluZyBzY3JvbGxlZCBpbnRvIHZpZXcgd2hlbiBmb2N1c2luZyBpdCwgd2Ugc2ltcGx5CiAgICogbW92ZSBpdCBvdXQgb2YgdGhlIHNjcm9sbGFibGUgYXJlYSwgZm9jdXMgaXQsIGFuZCByZXNldCBpdCdzIHBvc2l0aW9uCiAgICovCiAgdmFyIGZvY3VzV2l0aG91dFNjcm9sbGluZyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGlmIChlbGVtZW50LnNldEFjdGl2ZSkgewogICAgICAvLyBGb2xsb3dpbmcgbGluZSBjb3VsZCBjYXVzZSBhIGpzIGVycm9yIHdoZW4gdGhlIHRleHRhcmVhIGlzIGludmlzaWJsZQogICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3hpbmcvd3lzaWh0bWw1L2lzc3Vlcy85CiAgICAgIHRyeSB7IGVsZW1lbnQuc2V0QWN0aXZlKCk7IH0gY2F0Y2goZSkge30KICAgIH0gZWxzZSB7CiAgICAgIHZhciBlbGVtZW50U3R5bGUgPSBlbGVtZW50LnN0eWxlLAogICAgICAgICAgb3JpZ2luYWxTY3JvbGxUb3AgPSBkb2MuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCB8fCBkb2MuYm9keS5zY3JvbGxUb3AsCiAgICAgICAgICBvcmlnaW5hbFNjcm9sbExlZnQgPSBkb2MuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgfHwgZG9jLmJvZHkuc2Nyb2xsTGVmdCwKICAgICAgICAgIG9yaWdpbmFsU3R5bGVzID0gewogICAgICAgICAgICBwb3NpdGlvbjogICAgICAgICBlbGVtZW50U3R5bGUucG9zaXRpb24sCiAgICAgICAgICAgIHRvcDogICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS50b3AsCiAgICAgICAgICAgIGxlZnQ6ICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS5sZWZ0LAogICAgICAgICAgICBXZWJraXRVc2VyU2VsZWN0OiBlbGVtZW50U3R5bGUuV2Via2l0VXNlclNlbGVjdAogICAgICAgICAgfTsKICAgICAgCiAgICAgIGRvbS5zZXRTdHlsZXMoewogICAgICAgIHBvc2l0aW9uOiAgICAgICAgICJhYnNvbHV0ZSIsCiAgICAgICAgdG9wOiAgICAgICAgICAgICAgIi05OTk5OXB4IiwKICAgICAgICBsZWZ0OiAgICAgICAgICAgICAiLTk5OTk5cHgiLAogICAgICAgIC8vIERvbid0IGFzayB3aHkgYnV0IHRlbXBvcmFyaWx5IHNldHRpbmcgLXdlYmtpdC11c2VyLXNlbGVjdCB0byBub25lIG1ha2VzIHRoZSB3aG9sZSB0aGluZyBwZXJmb3JtaW5nIHNtb290aGVyCiAgICAgICAgV2Via2l0VXNlclNlbGVjdDogIm5vbmUiCiAgICAgIH0pLm9uKGVsZW1lbnQpOwogICAgICAKICAgICAgZWxlbWVudC5mb2N1cygpOwogICAgICAKICAgICAgZG9tLnNldFN0eWxlcyhvcmlnaW5hbFN0eWxlcykub24oZWxlbWVudCk7CiAgICAgIAogICAgICBpZiAod2luLnNjcm9sbFRvKSB7CiAgICAgICAgLy8gU29tZSBicm93c2VyIGV4dGVuc2lvbnMgdW5zZXQgdGhpcyBtZXRob2QgdG8gcHJldmVudCBhbm5veWFuY2VzCiAgICAgICAgLy8gIkJldHRlciBQb3BVcCBCbG9ja2VyIiBmb3IgQ2hyb21lIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9iZXR0ZXJwb3B1cGJsb2NrZXIvc291cmNlL2Jyb3dzZS90cnVuay9ibG9ja1N0YXJ0LmpzIzEwMAogICAgICAgIC8vIElzc3VlOiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYmV0dGVycG9wdXBibG9ja2VyL2lzc3Vlcy9kZXRhaWw/aWQ9MQogICAgICAgIHdpbi5zY3JvbGxUbyhvcmlnaW5hbFNjcm9sbExlZnQsIG9yaWdpbmFsU2Nyb2xsVG9wKTsKICAgICAgfQogICAgfQogIH07CiAgCiAgCiAgd3lzaWh0bWw1LnZpZXdzLkNvbXBvc2VyLnByb3RvdHlwZS5zdHlsZSA9IGZ1bmN0aW9uKCkgewogICAgdmFyIHRoYXQgICAgICAgICAgICAgICAgICA9IHRoaXMsCiAgICAgICAgb3JpZ2luYWxBY3RpdmVFbGVtZW50ID0gZG9jLnF1ZXJ5U2VsZWN0b3IoIjpmb2N1cyIpLAogICAgICAgIHRleHRhcmVhRWxlbWVudCAgICAgICA9IHRoaXMudGV4dGFyZWEuZWxlbWVudCwKICAgICAgICBoYXNQbGFjZWhvbGRlciAgICAgICAgPSB0ZXh0YXJlYUVsZW1lbnQuaGFzQXR0cmlidXRlKCJwbGFjZWhvbGRlciIpLAogICAgICAgIG9yaWdpbmFsUGxhY2Vob2xkZXIgICA9IGhhc1BsYWNlaG9sZGVyICYmIHRleHRhcmVhRWxlbWVudC5nZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIik7CiAgICB0aGlzLmZvY3VzU3R5bGVzSG9zdCAgICAgID0gdGhpcy5mb2N1c1N0eWxlc0hvc3QgIHx8IEhPU1RfVEVNUExBVEUuY2xvbmVOb2RlKGZhbHNlKTsKICAgIHRoaXMuYmx1clN0eWxlc0hvc3QgICAgICAgPSB0aGlzLmJsdXJTdHlsZXNIb3N0ICAgfHwgSE9TVF9URU1QTEFURS5jbG9uZU5vZGUoZmFsc2UpOwogIAogICAgLy8gUmVtb3ZlIHBsYWNlaG9sZGVyIGJlZm9yZSBjb3B5aW5nIChhcyB0aGUgcGxhY2Vob2xkZXIgaGFzIGFuIGFmZmVjdCBvbiB0aGUgY29tcHV0ZWQgc3R5bGUpCiAgICBpZiAoaGFzUGxhY2Vob2xkZXIpIHsKICAgICAgdGV4dGFyZWFFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiKTsKICAgIH0KICAKICAgIGlmICh0ZXh0YXJlYUVsZW1lbnQgPT09IG9yaWdpbmFsQWN0aXZlRWxlbWVudCkgewogICAgICB0ZXh0YXJlYUVsZW1lbnQuYmx1cigpOwogICAgfQogIAogICAgLy8gLS0tLS0tLS0tIGlmcmFtZSBzdHlsZXMgKGhhcyB0byBiZSBzZXQgYmVmb3JlIGVkaXRvciBzdHlsZXMsIG90aGVyd2lzZSBJRTkgc2V0cyB3cm9uZyBmb250RmFtaWx5IG9uIGJsdXJTdHlsZXNIb3N0KSAtLS0tLS0tLS0KICAgIGRvbS5jb3B5U3R5bGVzKEJPWF9GT1JNQVRUSU5HKS5mcm9tKHRleHRhcmVhRWxlbWVudCkudG8odGhpcy5pZnJhbWUpLmFuZFRvKHRoaXMuYmx1clN0eWxlc0hvc3QpOwogIAogICAgLy8gLS0tLS0tLS0tIGVkaXRvciBzdHlsZXMgLS0tLS0tLS0tCiAgICBkb20uY29weVN0eWxlcyhURVhUX0ZPUk1BVFRJTkcpLmZyb20odGV4dGFyZWFFbGVtZW50KS50byh0aGlzLmVsZW1lbnQpLmFuZFRvKHRoaXMuYmx1clN0eWxlc0hvc3QpOwogIAogICAgLy8gLS0tLS0tLS0tIGFwcGx5IHN0YW5kYXJkIHJ1bGVzIC0tLS0tLS0tLQogICAgZG9tLmluc2VydENTUyhBRERJVElPTkFMX0NTU19SVUxFUykuaW50byh0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudCk7CiAgCiAgICAvLyAtLS0tLS0tLS0gOmZvY3VzIHN0eWxlcyAtLS0tLS0tLS0KICAgIGZvY3VzV2l0aG91dFNjcm9sbGluZyh0ZXh0YXJlYUVsZW1lbnQpOwogICAgZG9tLmNvcHlTdHlsZXMoQk9YX0ZPUk1BVFRJTkcpLmZyb20odGV4dGFyZWFFbGVtZW50KS50byh0aGlzLmZvY3VzU3R5bGVzSG9zdCk7CiAgICBkb20uY29weVN0eWxlcyhURVhUX0ZPUk1BVFRJTkcpLmZyb20odGV4dGFyZWFFbGVtZW50KS50byh0aGlzLmZvY3VzU3R5bGVzSG9zdCk7CiAgCiAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBjaGFuZ2UgdGhlIGRpc3BsYXkgc3R5bGUgb2YgdGhlIGlmcmFtZSB3aGVuIGNvcHlpbmcgc3R5bGVzIG9ibHVyL29uZm9jdXMKICAgIC8vIHRoaXMgaXMgbmVlZGVkIGZvciB3aGVuIHRoZSBjaGFuZ2VfdmlldyBldmVudCBpcyBmaXJlZCB3aGVyZSB0aGUgaWZyYW1lIGlzIGhpZGRlbiBhbmQgdGhlbgogICAgLy8gdGhlIGJsdXIgZXZlbnQgZmlyZXMgYW5kIHJlLWRpc3BsYXlzIGl0CiAgICB2YXIgYm94Rm9ybWF0dGluZ1N0eWxlcyA9IHd5c2lodG1sNS5sYW5nLmFycmF5KEJPWF9GT1JNQVRUSU5HKS53aXRob3V0KFsiZGlzcGxheSJdKTsKICAKICAgIC8vIC0tLS0tLS0tLSByZXN0b3JlIGZvY3VzIC0tLS0tLS0tLQogICAgaWYgKG9yaWdpbmFsQWN0aXZlRWxlbWVudCkgewogICAgICBvcmlnaW5hbEFjdGl2ZUVsZW1lbnQuZm9jdXMoKTsKICAgIH0gZWxzZSB7CiAgICAgIHRleHRhcmVhRWxlbWVudC5ibHVyKCk7CiAgICB9CiAgCiAgICAvLyAtLS0tLS0tLS0gcmVzdG9yZSBwbGFjZWhvbGRlciAtLS0tLS0tLS0KICAgIGlmIChoYXNQbGFjZWhvbGRlcikgewogICAgICB0ZXh0YXJlYUVsZW1lbnQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsIG9yaWdpbmFsUGxhY2Vob2xkZXIpOwogICAgfQogIAogICAgLy8gV2hlbiBjb3B5aW5nIHN0eWxlcywgd2Ugb25seSBnZXQgdGhlIGNvbXB1dGVkIHN0eWxlIHdoaWNoIGlzIG5ldmVyIHJldHVybmVkIGluIHBlcmNlbnQgdW5pdAogICAgLy8gVGhlcmVmb3JlIHdlJ3ZlIHRvIHJlY2FsY3VsYXRlIHN0eWxlIG9ucmVzaXplCiAgICBpZiAoIXd5c2lodG1sNS5icm93c2VyLmhhc0N1cnJlbnRTdHlsZVByb3BlcnR5KCkpIHsKICAgICAgdmFyIHdpbk9ic2VydmVyID0gZG9tLm9ic2VydmUod2luLCAicmVzaXplIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgLy8gUmVtb3ZlIGV2ZW50IGxpc3RlbmVyIGlmIGNvbXBvc2VyIGRvZXNuJ3QgZXhpc3QgYW55bW9yZQogICAgICAgIGlmICghZG9tLmNvbnRhaW5zKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgdGhhdC5pZnJhbWUpKSB7CiAgICAgICAgICB3aW5PYnNlcnZlci5zdG9wKCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHZhciBvcmlnaW5hbFRleHRhcmVhRGlzcGxheVN0eWxlID0gZG9tLmdldFN0eWxlKCJkaXNwbGF5IikuZnJvbSh0ZXh0YXJlYUVsZW1lbnQpLAogICAgICAgICAgICBvcmlnaW5hbENvbXBvc2VyRGlzcGxheVN0eWxlID0gZG9tLmdldFN0eWxlKCJkaXNwbGF5IikuZnJvbSh0aGF0LmlmcmFtZSk7CiAgICAgICAgdGV4dGFyZWFFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgICB0aGF0LmlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgIGRvbS5jb3B5U3R5bGVzKFJFU0laRV9TVFlMRSkKICAgICAgICAgIC5mcm9tKHRleHRhcmVhRWxlbWVudCkKICAgICAgICAgIC50byh0aGF0LmlmcmFtZSkKICAgICAgICAgIC5hbmRUbyh0aGF0LmZvY3VzU3R5bGVzSG9zdCkKICAgICAgICAgIC5hbmRUbyh0aGF0LmJsdXJTdHlsZXNIb3N0KTsKICAgICAgICB0aGF0LmlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gb3JpZ2luYWxDb21wb3NlckRpc3BsYXlTdHlsZTsKICAgICAgICB0ZXh0YXJlYUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IG9yaWdpbmFsVGV4dGFyZWFEaXNwbGF5U3R5bGU7CiAgICAgIH0pOwogICAgfQogIAogICAgLy8gLS0tLS0tLS0tIFN5bmMgZm9jdXMvYmx1ciBzdHlsZXMgLS0tLS0tLS0tCiAgICB0aGlzLnBhcmVudC5vYnNlcnZlKCJmb2N1czpjb21wb3NlciIsIGZ1bmN0aW9uKCkgewogICAgICBkb20uY29weVN0eWxlcyhib3hGb3JtYXR0aW5nU3R5bGVzKSAuZnJvbSh0aGF0LmZvY3VzU3R5bGVzSG9zdCkudG8odGhhdC5pZnJhbWUpOwogICAgICBkb20uY29weVN0eWxlcyhURVhUX0ZPUk1BVFRJTkcpICAgICAuZnJvbSh0aGF0LmZvY3VzU3R5bGVzSG9zdCkudG8odGhhdC5lbGVtZW50KTsKICAgIH0pOwoKICAgIHRoaXMucGFyZW50Lm9ic2VydmUoImJsdXI6Y29tcG9zZXIiLCBmdW5jdGlvbigpIHsKICAgICAgZG9tLmNvcHlTdHlsZXMoYm94Rm9ybWF0dGluZ1N0eWxlcykgLmZyb20odGhhdC5ibHVyU3R5bGVzSG9zdCkudG8odGhhdC5pZnJhbWUpOwogICAgICBkb20uY29weVN0eWxlcyhURVhUX0ZPUk1BVFRJTkcpICAgICAuZnJvbSh0aGF0LmJsdXJTdHlsZXNIb3N0KS50byh0aGF0LmVsZW1lbnQpOwogICAgfSk7CiAgCiAgICByZXR1cm4gdGhpczsKICB9Owp9KSh3eXNpaHRtbDUpOy8qKgogKiBUYWtpbmcgY2FyZSBvZiBldmVudHMKICogIC0gU2ltdWxhdGluZyAnY2hhbmdlJyBldmVudCBvbiBjb250ZW50RWRpdGFibGUgZWxlbWVudAogKiAgLSBIYW5kbGluZyBkcmFnICYgZHJvcCBsb2dpYwogKiAgLSBDYXRjaCBwYXN0ZSBldmVudHMKICogIC0gRGlzcGF0Y2ggcHJvcHJpZXRhcnkgbmV3d29yZDpjb21wb3NlciBldmVudAogKiAgLSBLZXlib2FyZCBzaG9ydGN1dHMKICovCihmdW5jdGlvbih3eXNpaHRtbDUpIHsKICB2YXIgZG9tICAgICAgID0gd3lzaWh0bWw1LmRvbSwKICAgICAgYnJvd3NlciAgID0gd3lzaWh0bWw1LmJyb3dzZXIsCiAgICAgIC8qKgogICAgICAgKiBNYXAga2V5Q29kZXMgdG8gcXVlcnkgY29tbWFuZHMKICAgICAgICovCiAgICAgIHNob3J0Y3V0cyA9IHsKICAgICAgICAiNjYiOiAiYm9sZCIsICAgICAvLyBCCiAgICAgICAgIjczIjogIml0YWxpYyIsICAgLy8gSQogICAgICAgICI4NSI6ICJ1bmRlcmxpbmUiIC8vIFUKICAgICAgfTsKICAKICB3eXNpaHRtbDUudmlld3MuQ29tcG9zZXIucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbigpIHsKICAgIHZhciB0aGF0ICAgICAgICAgICAgICAgID0gdGhpcywKICAgICAgICBzdGF0ZSAgICAgICAgICAgICAgID0gdGhpcy5nZXRWYWx1ZSgpLAogICAgICAgIGlmcmFtZSAgICAgICAgICAgICAgPSB0aGlzLnNhbmRib3guZ2V0SWZyYW1lKCksCiAgICAgICAgZWxlbWVudCAgICAgICAgICAgICA9IHRoaXMuZWxlbWVudCwKICAgICAgICBmb2N1c0JsdXJFbGVtZW50ICAgID0gYnJvd3Nlci5zdXBwb3J0c0V2ZW50c0luSWZyYW1lQ29ycmVjdGx5KCkgPyBlbGVtZW50IDogdGhpcy5zYW5kYm94LmdldFdpbmRvdygpLAogICAgICAgIC8vIEZpcmVmb3ggPCAzLjUgZG9lc24ndCBzdXBwb3J0IHRoZSBkcm9wIGV2ZW50LCBpbnN0ZWFkIGl0IHN1cHBvcnRzIGEgc28gY2FsbGVkICJkcmFnZHJvcCIgZXZlbnQgd2hpY2ggYmVoYXZlcyBhbG1vc3QgdGhlIHNhbWUKICAgICAgICBwYXN0ZUV2ZW50cyAgICAgICAgID0gYnJvd3Nlci5zdXBwb3J0c0V2ZW50KCJkcm9wIikgPyBbImRyb3AiLCAicGFzdGUiXSA6IFsiZHJhZ2Ryb3AiLCAicGFzdGUiXTsKCiAgICAvLyAtLS0tLS0tLS0gZGVzdHJveTpjb21wb3NlciBldmVudCAtLS0tLS0tLS0KICAgIGRvbS5vYnNlcnZlKGlmcmFtZSwgIkRPTU5vZGVSZW1vdmVkIiwgZnVuY3Rpb24oKSB7CiAgICAgIGNsZWFySW50ZXJ2YWwoZG9tTm9kZVJlbW92ZWRJbnRlcnZhbCk7CiAgICAgIHRoYXQucGFyZW50LmZpcmUoImRlc3Ryb3k6Y29tcG9zZXIiKTsKICAgIH0pOwoKICAgIC8vIERPTU5vZGVSZW1vdmVkIGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gSUUgOAogICAgdmFyIGRvbU5vZGVSZW1vdmVkSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKICAgICAgaWYgKCFkb20uY29udGFpbnMoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBpZnJhbWUpKSB7CiAgICAgICAgY2xlYXJJbnRlcnZhbChkb21Ob2RlUmVtb3ZlZEludGVydmFsKTsKICAgICAgICB0aGF0LnBhcmVudC5maXJlKCJkZXN0cm95OmNvbXBvc2VyIik7CiAgICAgIH0KICAgIH0sIDI1MCk7CgoKICAgIC8vIC0tLS0tLS0tLSBGb2N1cyAmIGJsdXIgbG9naWMgLS0tLS0tLS0tCiAgICBkb20ub2JzZXJ2ZShmb2N1c0JsdXJFbGVtZW50LCAiZm9jdXMiLCBmdW5jdGlvbigpIHsKICAgICAgdGhhdC5wYXJlbnQuZmlyZSgiZm9jdXMiKS5maXJlKCJmb2N1czpjb21wb3NlciIpOwoKICAgICAgLy8gRGVsYXkgc3RvcmluZyBvZiBzdGF0ZSB1bnRpbCBhbGwgZm9jdXMgaGFuZGxlciBhcmUgZmlyZWQKICAgICAgLy8gZXNwZWNpYWxseSB0aGUgb25lIHdoaWNoIHJlc2V0cyB0aGUgcGxhY2Vob2xkZXIKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgc3RhdGUgPSB0aGF0LmdldFZhbHVlKCk7IH0sIDApOwogICAgfSk7CgogICAgZG9tLm9ic2VydmUoZm9jdXNCbHVyRWxlbWVudCwgImJsdXIiLCBmdW5jdGlvbigpIHsKICAgICAgaWYgKHN0YXRlICE9PSB0aGF0LmdldFZhbHVlKCkpIHsKICAgICAgICB0aGF0LnBhcmVudC5maXJlKCJjaGFuZ2UiKS5maXJlKCJjaGFuZ2U6Y29tcG9zZXIiKTsKICAgICAgfQogICAgICB0aGF0LnBhcmVudC5maXJlKCJibHVyIikuZmlyZSgiYmx1cjpjb21wb3NlciIpOwogICAgfSk7CiAgICAKICAgIGlmICh3eXNpaHRtbDUuYnJvd3Nlci5pc0lvcygpKSB7CiAgICAgIC8vIFdoZW4gb24gaVBhZC9pUGhvbmUvSVBvZCBhZnRlciBjbGlja2luZyBvdXRzaWRlIG9mIGVkaXRvciwgdGhlIGVkaXRvciBsb3NlcyBmb2N1cwogICAgICAvLyBidXQgdGhlIFVJIHN0aWxsIGFjdHMgYXMgaWYgdGhlIGVkaXRvciBoYXMgZm9jdXMgKGJsaW5raW5nIGNhcmV0IGFuZCBvbnNjcmVlbiBrZXlib2FyZCB2aXNpYmxlKQogICAgICAvLyBXZSBwcmV2ZW50IHRoYXQgYnkgZm9jdXNpbmcgYSB0ZW1wb3JhcnkgaW5wdXQgZWxlbWVudCB3aGljaCBpbW1lZGlhdGVseSBsb3NlcyBmb2N1cwogICAgICBkb20ub2JzZXJ2ZShlbGVtZW50LCAiYmx1ciIsIGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBpbnB1dCA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLAogICAgICAgICAgICBvcmlnaW5hbFNjcm9sbFRvcCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AsCiAgICAgICAgICAgIG9yaWdpbmFsU2Nyb2xsTGVmdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdDsKICAgICAgICB0cnkgewogICAgICAgICAgdGhhdC5zZWxlY3Rpb24uaW5zZXJ0Tm9kZShpbnB1dCk7CiAgICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICB9CiAgICAgICAgaW5wdXQuZm9jdXMoKTsKICAgICAgICBpbnB1dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGlucHV0KTsKICAgICAgICAKICAgICAgICB3aW5kb3cuc2Nyb2xsVG8ob3JpZ2luYWxTY3JvbGxMZWZ0LCBvcmlnaW5hbFNjcm9sbFRvcCk7CiAgICAgIH0pOwogICAgfQoKICAgIC8vIC0tLS0tLS0tLSBEcmFnICYgRHJvcCBsb2dpYyAtLS0tLS0tLS0KICAgIGRvbS5vYnNlcnZlKGVsZW1lbnQsICJkcmFnZW50ZXIiLCBmdW5jdGlvbigpIHsKICAgICAgdGhhdC5wYXJlbnQuZmlyZSgidW5zZXRfcGxhY2Vob2xkZXIiKTsKICAgIH0pOwoKICAgIGlmIChicm93c2VyLmZpcmVzT25Ecm9wT25seVdoZW5PbkRyYWdPdmVySXNDYW5jZWxsZWQoKSkgewogICAgICBkb20ub2JzZXJ2ZShlbGVtZW50LCBbImRyYWdvdmVyIiwgImRyYWdlbnRlciJdLCBmdW5jdGlvbihldmVudCkgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIH0pOwogICAgfQoKICAgIGRvbS5vYnNlcnZlKGVsZW1lbnQsIHBhc3RlRXZlbnRzLCBmdW5jdGlvbihldmVudCkgewogICAgICB2YXIgZGF0YVRyYW5zZmVyID0gZXZlbnQuZGF0YVRyYW5zZmVyLAogICAgICAgICAgZGF0YTsKCiAgICAgIGlmIChkYXRhVHJhbnNmZXIgJiYgYnJvd3Nlci5zdXBwb3J0c0RhdGFUcmFuc2ZlcigpKSB7CiAgICAgICAgZGF0YSA9IGRhdGFUcmFuc2Zlci5nZXREYXRhKCJ0ZXh0L2h0bWwiKSB8fCBkYXRhVHJhbnNmZXIuZ2V0RGF0YSgidGV4dC9wbGFpbiIpOwogICAgICB9CiAgICAgIGlmIChkYXRhKSB7CiAgICAgICAgZWxlbWVudC5mb2N1cygpOwogICAgICAgIHRoYXQuY29tbWFuZHMuZXhlYygiaW5zZXJ0SFRNTCIsIGRhdGEpOwogICAgICAgIHRoYXQucGFyZW50LmZpcmUoInBhc3RlIikuZmlyZSgicGFzdGU6Y29tcG9zZXIiKTsKICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB9IGVsc2UgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICB0aGF0LnBhcmVudC5maXJlKCJwYXN0ZSIpLmZpcmUoInBhc3RlOmNvbXBvc2VyIik7CiAgICAgICAgfSwgMCk7CiAgICAgIH0KICAgIH0pOwoKICAgIC8vIC0tLS0tLS0tLSBuZXdvcmQgZXZlbnQgLS0tLS0tLS0tCiAgICBkb20ub2JzZXJ2ZShlbGVtZW50LCAia2V5dXAiLCBmdW5jdGlvbihldmVudCkgewogICAgICB2YXIga2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7CiAgICAgIGlmIChrZXlDb2RlID09PSB3eXNpaHRtbDUuU1BBQ0VfS0VZIHx8IGtleUNvZGUgPT09IHd5c2lodG1sNS5FTlRFUl9LRVkpIHsKICAgICAgICB0aGF0LnBhcmVudC5maXJlKCJuZXd3b3JkOmNvbXBvc2VyIik7CiAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMucGFyZW50Lm9ic2VydmUoInBhc3RlOmNvbXBvc2VyIiwgZnVuY3Rpb24oKSB7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRoYXQucGFyZW50LmZpcmUoIm5ld3dvcmQ6Y29tcG9zZXIiKTsgfSwgMCk7CiAgICB9KTsKCiAgICAvLyAtLS0tLS0tLS0gTWFrZSBzdXJlIHRoYXQgaW1hZ2VzIGFyZSBzZWxlY3RlZCB3aGVuIGNsaWNraW5nIG9uIHRoZW0gLS0tLS0tLS0tCiAgICBpZiAoIWJyb3dzZXIuY2FuU2VsZWN0SW1hZ2VzSW5Db250ZW50RWRpdGFibGUoKSkgewogICAgICBkb20ub2JzZXJ2ZShlbGVtZW50LCAibW91c2Vkb3duIiwgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OwogICAgICAgIGlmICh0YXJnZXQubm9kZU5hbWUgPT09ICJJTUciKSB7CiAgICAgICAgICB0aGF0LnNlbGVjdGlvbi5zZWxlY3ROb2RlKHRhcmdldCk7CiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICAKICAgIC8vIC0tLS0tLS0tLSBTaG9ydGN1dCBsb2dpYyAtLS0tLS0tLS0KICAgIGRvbS5vYnNlcnZlKGVsZW1lbnQsICJrZXlkb3duIiwgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgdmFyIGtleUNvZGUgID0gZXZlbnQua2V5Q29kZSwKICAgICAgICAgIGNvbW1hbmQgID0gc2hvcnRjdXRzW2tleUNvZGVdOwogICAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgIWV2ZW50LmFsdEtleSAmJiBjb21tYW5kKSB7CiAgICAgICAgdGhhdC5jb21tYW5kcy5leGVjKGNvbW1hbmQpOwogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIH0KICAgIH0pOwoKICAgIC8vIC0tLS0tLS0tLSBNYWtlIHN1cmUgdGhhdCB3aGVuIHByZXNzaW5nIGJhY2tzcGFjZS9kZWxldGUgb24gc2VsZWN0ZWQgaW1hZ2VzIGRlbGV0ZXMgdGhlIGltYWdlIGFuZCBpdCdzIGFuY2hvciAtLS0tLS0tLS0KICAgIGRvbS5vYnNlcnZlKGVsZW1lbnQsICJrZXlkb3duIiwgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgdmFyIHRhcmdldCAgPSB0aGF0LnNlbGVjdGlvbi5nZXRTZWxlY3RlZE5vZGUodHJ1ZSksCiAgICAgICAgICBrZXlDb2RlID0gZXZlbnQua2V5Q29kZSwKICAgICAgICAgIHBhcmVudDsKICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQubm9kZU5hbWUgPT09ICJJTUciICYmIChrZXlDb2RlID09PSB3eXNpaHRtbDUuQkFDS1NQQUNFX0tFWSB8fCBrZXlDb2RlID09PSB3eXNpaHRtbDUuREVMRVRFX0tFWSkpIHsgLy8gOCA9PiBiYWNrc3BhY2UsIDQ2ID0+IGRlbGV0ZQogICAgICAgIHBhcmVudCA9IHRhcmdldC5wYXJlbnROb2RlOwogICAgICAgIC8vIGRlbGV0ZSB0aGUgPGltZz4KICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQodGFyZ2V0KTsKICAgICAgICAvLyBhbmQgaXQncyBwYXJlbnQgPGE+IHRvbyBpZiBpdCBoYXNuJ3QgZ290IGFueSBvdGhlciBjaGlsZCBub2RlcwogICAgICAgIGlmIChwYXJlbnQubm9kZU5hbWUgPT09ICJBIiAmJiAhcGFyZW50LmZpcnN0Q2hpbGQpIHsKICAgICAgICAgIHBhcmVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHBhcmVudCk7CiAgICAgICAgfQoKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB3eXNpaHRtbDUucXVpcmtzLnJlZHJhdyhlbGVtZW50KTsgfSwgMCk7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgfQogICAgfSk7CgogICAgLy8gLS0tLS0tLS0tIFNob3cgdXJsIGluIHRvb2x0aXAgd2hlbiBob3ZlcmluZyBsaW5rcyBvciBpbWFnZXMgLS0tLS0tLS0tCiAgICB2YXIgdGl0bGVQcmVmaXhlcyA9IHsKICAgICAgSU1HOiAiSW1hZ2U6ICIsCiAgICAgIEE6ICAgIkxpbms6ICIKICAgIH07CiAgICAKICAgIGRvbS5vYnNlcnZlKGVsZW1lbnQsICJtb3VzZW92ZXIiLCBmdW5jdGlvbihldmVudCkgewogICAgICB2YXIgdGFyZ2V0ICAgPSBldmVudC50YXJnZXQsCiAgICAgICAgICBub2RlTmFtZSA9IHRhcmdldC5ub2RlTmFtZSwKICAgICAgICAgIHRpdGxlOwogICAgICBpZiAobm9kZU5hbWUgIT09ICJBIiAmJiBub2RlTmFtZSAhPT0gIklNRyIpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdmFyIGhhc1RpdGxlID0gdGFyZ2V0Lmhhc0F0dHJpYnV0ZSgidGl0bGUiKTsKICAgICAgaWYoIWhhc1RpdGxlKXsKICAgICAgICB0aXRsZSA9IHRpdGxlUHJlZml4ZXNbbm9kZU5hbWVdICsgKHRhcmdldC5nZXRBdHRyaWJ1dGUoImhyZWYiKSB8fCB0YXJnZXQuZ2V0QXR0cmlidXRlKCJzcmMiKSk7CiAgICAgICAgdGFyZ2V0LnNldEF0dHJpYnV0ZSgidGl0bGUiLCB0aXRsZSk7CiAgICAgIH0KICAgIH0pOwogIH07Cn0pKHd5c2lodG1sNSk7LyoqCiAqIENsYXNzIHRoYXQgdGFrZXMgY2FyZSB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgY29tcG9zZXIgYW5kIHRoZSB0ZXh0YXJlYSBpcyBhbHdheXMgaW4gc3luYwogKi8KKGZ1bmN0aW9uKHd5c2lodG1sNSkgewogIHZhciBJTlRFUlZBTCA9IDQwMDsKICAKICB3eXNpaHRtbDUudmlld3MuU3luY2hyb25pemVyID0gQmFzZS5leHRlbmQoCiAgICAvKiogQHNjb3BlIHd5c2lodG1sNS52aWV3cy5TeW5jaHJvbml6ZXIucHJvdG90eXBlICovIHsKCiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24oZWRpdG9yLCB0ZXh0YXJlYSwgY29tcG9zZXIpIHsKICAgICAgdGhpcy5lZGl0b3IgICA9IGVkaXRvcjsKICAgICAgdGhpcy50ZXh0YXJlYSA9IHRleHRhcmVhOwogICAgICB0aGlzLmNvbXBvc2VyID0gY29tcG9zZXI7CgogICAgICB0aGlzLl9vYnNlcnZlKCk7CiAgICB9LAoKICAgIC8qKgogICAgICogU3luYyBodG1sIGZyb20gY29tcG9zZXIgdG8gdGV4dGFyZWEKICAgICAqIFRha2VzIGNhcmUgb2YgcGxhY2Vob2xkZXJzCiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHNob3VsZFBhcnNlSHRtbCBXaGV0aGVyIHRoZSBodG1sIHNob3VsZCBiZSBzYW5pdGl6ZWQgYmVmb3JlIGluc2VydGluZyBpdCBpbnRvIHRoZSB0ZXh0YXJlYQogICAgICovCiAgICBmcm9tQ29tcG9zZXJUb1RleHRhcmVhOiBmdW5jdGlvbihzaG91bGRQYXJzZUh0bWwpIHsKICAgICAgdGhpcy50ZXh0YXJlYS5zZXRWYWx1ZSh3eXNpaHRtbDUubGFuZy5zdHJpbmcodGhpcy5jb21wb3Nlci5nZXRWYWx1ZSgpKS50cmltKCksIHNob3VsZFBhcnNlSHRtbCk7CiAgICB9LAoKICAgIC8qKgogICAgICogU3luYyB2YWx1ZSBvZiB0ZXh0YXJlYSB0byBjb21wb3NlcgogICAgICogVGFrZXMgY2FyZSBvZiBwbGFjZWhvbGRlcnMKICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gc2hvdWxkUGFyc2VIdG1sIFdoZXRoZXIgdGhlIGh0bWwgc2hvdWxkIGJlIHNhbml0aXplZCBiZWZvcmUgaW5zZXJ0aW5nIGl0IGludG8gdGhlIGNvbXBvc2VyCiAgICAgKi8KICAgIGZyb21UZXh0YXJlYVRvQ29tcG9zZXI6IGZ1bmN0aW9uKHNob3VsZFBhcnNlSHRtbCkgewogICAgICB2YXIgdGV4dGFyZWFWYWx1ZSA9IHRoaXMudGV4dGFyZWEuZ2V0VmFsdWUoKTsKICAgICAgaWYgKHRleHRhcmVhVmFsdWUpIHsKICAgICAgICB0aGlzLmNvbXBvc2VyLnNldFZhbHVlKHRleHRhcmVhVmFsdWUsIHNob3VsZFBhcnNlSHRtbCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5jb21wb3Nlci5jbGVhcigpOwogICAgICAgIHRoaXMuZWRpdG9yLmZpcmUoInNldF9wbGFjZWhvbGRlciIpOwogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogSW52b2tlIHN5bmNpbmcgYmFzZWQgb24gdmlldyBzdGF0ZQogICAgICogQHBhcmFtIHtCb29sZWFufSBzaG91bGRQYXJzZUh0bWwgV2hldGhlciB0aGUgaHRtbCBzaG91bGQgYmUgc2FuaXRpemVkIGJlZm9yZSBpbnNlcnRpbmcgaXQgaW50byB0aGUgY29tcG9zZXIvdGV4dGFyZWEKICAgICAqLwogICAgc3luYzogZnVuY3Rpb24oc2hvdWxkUGFyc2VIdG1sKSB7CiAgICAgIGlmICh0aGlzLmVkaXRvci5jdXJyZW50Vmlldy5uYW1lID09PSAidGV4dGFyZWEiKSB7CiAgICAgICAgdGhpcy5mcm9tVGV4dGFyZWFUb0NvbXBvc2VyKHNob3VsZFBhcnNlSHRtbCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5mcm9tQ29tcG9zZXJUb1RleHRhcmVhKHNob3VsZFBhcnNlSHRtbCk7CiAgICAgIH0KICAgIH0sCgogICAgLyoqCiAgICAgKiBJbml0aWFsaXplcyBpbnRlcnZhbC1iYXNlZCBzeW5jaW5nCiAgICAgKiBhbHNvIG1ha2VzIHN1cmUgdGhhdCBvbi1zdWJtaXQgdGhlIGNvbXBvc2VyJ3MgY29udGVudCBpcyBzeW5jZWQgd2l0aCB0aGUgdGV4dGFyZWEKICAgICAqIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGZvcm0gZ2V0cyBzdWJtaXR0ZWQKICAgICAqLwogICAgX29ic2VydmU6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgaW50ZXJ2YWwsCiAgICAgICAgICB0aGF0ICAgICAgICAgID0gdGhpcywKICAgICAgICAgIGZvcm0gICAgICAgICAgPSB0aGlzLnRleHRhcmVhLmVsZW1lbnQuZm9ybSwKICAgICAgICAgIHN0YXJ0SW50ZXJ2YWwgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsgdGhhdC5mcm9tQ29tcG9zZXJUb1RleHRhcmVhKCk7IH0sIElOVEVSVkFMKTsKICAgICAgICAgIH0sCiAgICAgICAgICBzdG9wSW50ZXJ2YWwgID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpOwogICAgICAgICAgICBpbnRlcnZhbCA9IG51bGw7CiAgICAgICAgICB9OwoKICAgICAgc3RhcnRJbnRlcnZhbCgpOwoKICAgICAgaWYgKGZvcm0pIHsKICAgICAgICAvLyBJZiB0aGUgdGV4dGFyZWEgaXMgaW4gYSBmb3JtIG1ha2Ugc3VyZSB0aGF0IGFmdGVyIG9ucmVzZXQgYW5kIG9uc3VibWl0IHRoZSBjb21wb3NlcgogICAgICAgIC8vIGhhcyB0aGUgY29ycmVjdCBzdGF0ZQogICAgICAgIHd5c2lodG1sNS5kb20ub2JzZXJ2ZShmb3JtLCAic3VibWl0IiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICB0aGF0LnN5bmModHJ1ZSk7CiAgICAgICAgfSk7CiAgICAgICAgd3lzaWh0bWw1LmRvbS5vYnNlcnZlKGZvcm0sICJyZXNldCIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgdGhhdC5mcm9tVGV4dGFyZWFUb0NvbXBvc2VyKCk7IH0sIDApOwogICAgICAgIH0pOwogICAgICB9CgogICAgICB0aGlzLmVkaXRvci5vYnNlcnZlKCJjaGFuZ2VfdmlldyIsIGZ1bmN0aW9uKHZpZXcpIHsKICAgICAgICBpZiAodmlldyA9PT0gImNvbXBvc2VyIiAmJiAhaW50ZXJ2YWwpIHsKICAgICAgICAgIHRoYXQuZnJvbVRleHRhcmVhVG9Db21wb3Nlcih0cnVlKTsKICAgICAgICAgIHN0YXJ0SW50ZXJ2YWwoKTsKICAgICAgICB9IGVsc2UgaWYgKHZpZXcgPT09ICJ0ZXh0YXJlYSIpIHsKICAgICAgICAgIHRoYXQuZnJvbUNvbXBvc2VyVG9UZXh0YXJlYSh0cnVlKTsKICAgICAgICAgIHN0b3BJbnRlcnZhbCgpOwogICAgICAgIH0KICAgICAgfSk7CgogICAgICB0aGlzLmVkaXRvci5vYnNlcnZlKCJkZXN0cm95OmNvbXBvc2VyIiwgc3RvcEludGVydmFsKTsKICAgIH0KICB9KTsKfSkod3lzaWh0bWw1KTsKd3lzaWh0bWw1LnZpZXdzLlRleHRhcmVhID0gd3lzaWh0bWw1LnZpZXdzLlZpZXcuZXh0ZW5kKAogIC8qKiBAc2NvcGUgd3lzaWh0bWw1LnZpZXdzLlRleHRhcmVhLnByb3RvdHlwZSAqLyB7CiAgbmFtZTogInRleHRhcmVhIiwKICAKICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24ocGFyZW50LCB0ZXh0YXJlYUVsZW1lbnQsIGNvbmZpZykgewogICAgdGhpcy5iYXNlKHBhcmVudCwgdGV4dGFyZWFFbGVtZW50LCBjb25maWcpOwogICAgCiAgICB0aGlzLl9vYnNlcnZlKCk7CiAgfSwKICAKICBjbGVhcjogZnVuY3Rpb24oKSB7CiAgICB0aGlzLmVsZW1lbnQudmFsdWUgPSAiIjsKICB9LAogIAogIGdldFZhbHVlOiBmdW5jdGlvbihwYXJzZSkgewogICAgdmFyIHZhbHVlID0gdGhpcy5pc0VtcHR5KCkgPyAiIiA6IHRoaXMuZWxlbWVudC52YWx1ZTsKICAgIGlmIChwYXJzZSkgewogICAgICB2YWx1ZSA9IHRoaXMucGFyZW50LnBhcnNlKHZhbHVlKTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9LAogIAogIHNldFZhbHVlOiBmdW5jdGlvbihodG1sLCBwYXJzZSkgewogICAgaWYgKHBhcnNlKSB7CiAgICAgIGh0bWwgPSB0aGlzLnBhcmVudC5wYXJzZShodG1sKTsKICAgIH0KICAgIHRoaXMuZWxlbWVudC52YWx1ZSA9IGh0bWw7CiAgfSwKICAKICBoYXNQbGFjZWhvbGRlclNldDogZnVuY3Rpb24oKSB7CiAgICB2YXIgc3VwcG9ydHNQbGFjZWhvbGRlciA9IHd5c2lodG1sNS5icm93c2VyLnN1cHBvcnRzUGxhY2Vob2xkZXJBdHRyaWJ1dGVPbih0aGlzLmVsZW1lbnQpLAogICAgICAgIHBsYWNlaG9sZGVyVGV4dCAgICAgPSB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIpIHx8IG51bGwsCiAgICAgICAgdmFsdWUgICAgICAgICAgICAgICA9IHRoaXMuZWxlbWVudC52YWx1ZSwKICAgICAgICBpc0VtcHR5ICAgICAgICAgICAgID0gIXZhbHVlOwogICAgcmV0dXJuIChzdXBwb3J0c1BsYWNlaG9sZGVyICYmIGlzRW1wdHkpIHx8ICh2YWx1ZSA9PT0gcGxhY2Vob2xkZXJUZXh0KTsKICB9LAogIAogIGlzRW1wdHk6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuICF3eXNpaHRtbDUubGFuZy5zdHJpbmcodGhpcy5lbGVtZW50LnZhbHVlKS50cmltKCkgfHwgdGhpcy5oYXNQbGFjZWhvbGRlclNldCgpOwogIH0sCiAgCiAgX29ic2VydmU6IGZ1bmN0aW9uKCkgewogICAgdmFyIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQsCiAgICAgICAgcGFyZW50ICA9IHRoaXMucGFyZW50LAogICAgICAgIGV2ZW50TWFwcGluZyA9IHsKICAgICAgICAgIGZvY3VzaW46ICAiZm9jdXMiLAogICAgICAgICAgZm9jdXNvdXQ6ICJibHVyIgogICAgICAgIH0sCiAgICAgICAgLyoqCiAgICAgICAgICogQ2FsbGluZyBmb2N1cygpIG9yIGJsdXIoKSBvbiBhbiBlbGVtZW50IGRvZXNuJ3Qgc3luY2hyb25vdXNseSB0cmlnZ2VyIHRoZSBhdHRhY2hlZCBmb2N1cy9ibHVyIGV2ZW50cwogICAgICAgICAqIFRoaXMgaXMgdGhlIGNhc2UgZm9yIGZvY3VzaW4gYW5kIGZvY3Vzb3V0LCBzbyBsZXQncyB1c2UgdGhlbSB3aGVuZXZlciBwb3NzaWJsZSwga2t0aHhiYWkKICAgICAgICAgKi8KICAgICAgICBldmVudHMgPSB3eXNpaHRtbDUuYnJvd3Nlci5zdXBwb3J0c0V2ZW50KCJmb2N1c2luIikgPyBbImZvY3VzaW4iLCAiZm9jdXNvdXQiLCAiY2hhbmdlIl0gOiBbImZvY3VzIiwgImJsdXIiLCAiY2hhbmdlIl07CiAgICAKICAgIHBhcmVudC5vYnNlcnZlKCJiZWZvcmVsb2FkIiwgZnVuY3Rpb24oKSB7CiAgICAgIHd5c2lodG1sNS5kb20ub2JzZXJ2ZShlbGVtZW50LCBldmVudHMsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgdmFyIGV2ZW50TmFtZSA9IGV2ZW50TWFwcGluZ1tldmVudC50eXBlXSB8fCBldmVudC50eXBlOwogICAgICAgIHBhcmVudC5maXJlKGV2ZW50TmFtZSkuZmlyZShldmVudE5hbWUgKyAiOnRleHRhcmVhIik7CiAgICAgIH0pOwogICAgICAKICAgICAgd3lzaWh0bWw1LmRvbS5vYnNlcnZlKGVsZW1lbnQsIFsicGFzdGUiLCAiZHJvcCJdLCBmdW5jdGlvbigpIHsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBwYXJlbnQuZmlyZSgicGFzdGUiKS5maXJlKCJwYXN0ZTp0ZXh0YXJlYSIpOyB9LCAwKTsKICAgICAgfSk7CiAgICB9KTsKICB9Cn0pOy8qKgogKiBUb29sYmFyIERpYWxvZwogKgogKiBAcGFyYW0ge0VsZW1lbnR9IGxpbmsgVGhlIHRvb2xiYXIgbGluayB3aGljaCBjYXVzZXMgdGhlIGRpYWxvZyB0byBzaG93IHVwCiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGFpbmVyIFRoZSBkaWFsb2cgY29udGFpbmVyCiAqCiAqIEBleGFtcGxlCiAqICAgIDwhLS0gVG9vbGJhciBsaW5rIC0tPgogKiAgICA8YSBkYXRhLXd5c2lodG1sNS1jb21tYW5kPSJpbnNlcnRJbWFnZSI+aW5zZXJ0IGFuIGltYWdlPC9hPgogKgogKiAgICA8IS0tIERpYWxvZyAtLT4KICogICAgPGRpdiBkYXRhLXd5c2lodG1sNS1kaWFsb2c9Imluc2VydEltYWdlIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogKiAgICAgIDxsYWJlbD4KICogICAgICAgIFVSTDogPGlucHV0IGRhdGEtd3lzaWh0bWw1LWRpYWxvZy1maWVsZD0ic3JjIiB2YWx1ZT0iaHR0cDovLyI+CiAqICAgICAgPC9sYWJlbD4KICogICAgICA8bGFiZWw+CiAqICAgICAgICBBbHRlcm5hdGl2ZSB0ZXh0OiA8aW5wdXQgZGF0YS13eXNpaHRtbDUtZGlhbG9nLWZpZWxkPSJhbHQiIHZhbHVlPSIiPgogKiAgICAgIDwvbGFiZWw+CiAqICAgIDwvZGl2PgogKgogKiAgICA8c2NyaXB0PgogKiAgICAgIHZhciBkaWFsb2cgPSBuZXcgd3lzaWh0bWw1LnRvb2xiYXIuRGlhbG9nKAogKiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiW2RhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9J2luc2VydEltYWdlJ10iKSwKICogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIltkYXRhLXd5c2lodG1sNS1kaWFsb2c9J2luc2VydEltYWdlJ10iKQogKiAgICAgICk7CiAqICAgICAgZGlhbG9nLm9ic2VydmUoInNhdmUiLCBmdW5jdGlvbihhdHRyaWJ1dGVzKSB7CiAqICAgICAgICAvLyBkbyBzb21ldGhpbmcKICogICAgICB9KTsKICogICAgPC9zY3JpcHQ+CiAqLwooZnVuY3Rpb24od3lzaWh0bWw1KSB7CiAgdmFyIGRvbSAgICAgICAgICAgICAgICAgICAgID0gd3lzaWh0bWw1LmRvbSwKICAgICAgQ0xBU1NfTkFNRV9PUEVORUQgICAgICAgPSAid3lzaWh0bWw1LWNvbW1hbmQtZGlhbG9nLW9wZW5lZCIsCiAgICAgIFNFTEVDVE9SX0ZPUk1fRUxFTUVOVFMgID0gImlucHV0LCBzZWxlY3QsIHRleHRhcmVhIiwKICAgICAgU0VMRUNUT1JfRklFTERTICAgICAgICAgPSAiW2RhdGEtd3lzaWh0bWw1LWRpYWxvZy1maWVsZF0iLAogICAgICBBVFRSSUJVVEVfRklFTERTICAgICAgICA9ICJkYXRhLXd5c2lodG1sNS1kaWFsb2ctZmllbGQiOwogICAgICAKICAKICB3eXNpaHRtbDUudG9vbGJhci5EaWFsb2cgPSB3eXNpaHRtbDUubGFuZy5EaXNwYXRjaGVyLmV4dGVuZCgKICAgIC8qKiBAc2NvcGUgd3lzaWh0bWw1LnRvb2xiYXIuRGlhbG9nLnByb3RvdHlwZSAqLyB7CiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24obGluaywgY29udGFpbmVyKSB7CiAgICAgIHRoaXMubGluayAgICAgICA9IGxpbms7CiAgICAgIHRoaXMuY29udGFpbmVyICA9IGNvbnRhaW5lcjsKICAgIH0sCgogICAgX29ic2VydmU6IGZ1bmN0aW9uKCkgewogICAgICBpZiAodGhpcy5fb2JzZXJ2ZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgCiAgICAgIHZhciB0aGF0ID0gdGhpcywKICAgICAgICAgIGNhbGxiYWNrV3JhcHBlciA9IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gdGhhdC5fc2VyaWFsaXplKCk7CiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzID09IHRoYXQuZWxlbWVudFRvQ2hhbmdlKSB7CiAgICAgICAgICAgICAgdGhhdC5maXJlKCJlZGl0IiwgYXR0cmlidXRlcyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhhdC5maXJlKCJzYXZlIiwgYXR0cmlidXRlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhhdC5oaWRlKCk7CiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgfTsKCiAgICAgIGRvbS5vYnNlcnZlKHRoYXQubGluaywgImNsaWNrIiwgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICBpZiAoZG9tLmhhc0NsYXNzKHRoYXQubGluaywgQ0xBU1NfTkFNRV9PUEVORUQpKSB7CiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0aGF0LmhpZGUoKTsgfSwgMCk7CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIGRvbS5vYnNlcnZlKHRoaXMuY29udGFpbmVyLCAia2V5ZG93biIsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgdmFyIGtleUNvZGUgPSBldmVudC5rZXlDb2RlOwogICAgICAgIGlmIChrZXlDb2RlID09PSB3eXNpaHRtbDUuRU5URVJfS0VZKSB7CiAgICAgICAgICBjYWxsYmFja1dyYXBwZXIoZXZlbnQpOwogICAgICAgIH0KICAgICAgICBpZiAoa2V5Q29kZSA9PT0gd3lzaWh0bWw1LkVTQ0FQRV9LRVkpIHsKICAgICAgICAgIHRoYXQuaGlkZSgpOwogICAgICAgIH0KICAgICAgfSk7CgogICAgICBkb20uZGVsZWdhdGUodGhpcy5jb250YWluZXIsICJbZGF0YS13eXNpaHRtbDUtZGlhbG9nLWFjdGlvbj1zYXZlXSIsICJjbGljayIsIGNhbGxiYWNrV3JhcHBlcik7CgogICAgICBkb20uZGVsZWdhdGUodGhpcy5jb250YWluZXIsICJbZGF0YS13eXNpaHRtbDUtZGlhbG9nLWFjdGlvbj1jYW5jZWxdIiwgImNsaWNrIiwgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICB0aGF0LmZpcmUoImNhbmNlbCIpOwogICAgICAgIHRoYXQuaGlkZSgpOwogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIH0pOwoKICAgICAgdmFyIGZvcm1FbGVtZW50cyAgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFNFTEVDVE9SX0ZPUk1fRUxFTUVOVFMpLAogICAgICAgICAgaSAgICAgICAgICAgICA9IDAsCiAgICAgICAgICBsZW5ndGggICAgICAgID0gZm9ybUVsZW1lbnRzLmxlbmd0aCwKICAgICAgICAgIF9jbGVhckludGVydmFsID0gZnVuY3Rpb24oKSB7IGNsZWFySW50ZXJ2YWwodGhhdC5pbnRlcnZhbCk7IH07CiAgICAgIGZvciAoOyBpPGxlbmd0aDsgaSsrKSB7CiAgICAgICAgZG9tLm9ic2VydmUoZm9ybUVsZW1lbnRzW2ldLCAiY2hhbmdlIiwgX2NsZWFySW50ZXJ2YWwpOwogICAgICB9CgogICAgICB0aGlzLl9vYnNlcnZlZCA9IHRydWU7CiAgICB9LAoKICAgIC8qKgogICAgICogR3JhYnMgYWxsIGZpZWxkcyBpbiB0aGUgZGlhbG9nIGFuZCBwdXRzIHRoZW0gaW4ga2V5PT52YWx1ZSBzdHlsZSBpbiBhbiBvYmplY3Qgd2hpY2gKICAgICAqIHRoZW4gZ2V0cyByZXR1cm5lZAogICAgICovCiAgICBfc2VyaWFsaXplOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIGRhdGEgICAgPSB0aGlzLmVsZW1lbnRUb0NoYW5nZSB8fCB7fSwKICAgICAgICAgIGZpZWxkcyAgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFNFTEVDVE9SX0ZJRUxEUyksCiAgICAgICAgICBsZW5ndGggID0gZmllbGRzLmxlbmd0aCwKICAgICAgICAgIGkgICAgICAgPSAwOwogICAgICBmb3IgKDsgaTxsZW5ndGg7IGkrKykgewogICAgICAgIGRhdGFbZmllbGRzW2ldLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRklFTERTKV0gPSBmaWVsZHNbaV0udmFsdWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGRhdGE7CiAgICB9LAoKICAgIC8qKgogICAgICogVGFrZXMgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlICJlbGVtZW50VG9DaGFuZ2UiCiAgICAgKiBhbmQgaW5zZXJ0cyB0aGVtIGluIHRoZWlyIGNvcnJlc3BvbmRpbmcgZGlhbG9nIGlucHV0IGZpZWxkcwogICAgICogCiAgICAgKiBBc3N1bWUgdGhlICJlbGVtZW50VG9DaGFuZ2UiIGxvb2tzIGxpa2UgdGhpczoKICAgICAqICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmZvbzwvYT4KICAgICAqCiAgICAgKiBhbmQgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIGRpYWxvZzoKICAgICAqICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBkYXRhLXd5c2lodG1sNS1kaWFsb2ctZmllbGQ9ImhyZWYiIHZhbHVlPSIiPgogICAgICogICAgPGlucHV0IHR5cGU9InRleHQiIGRhdGEtd3lzaWh0bWw1LWRpYWxvZy1maWVsZD0idGFyZ2V0IiB2YWx1ZT0iIj4KICAgICAqIAogICAgICogYWZ0ZXIgY2FsbGluZyBfaW50ZXJwb2xhdGUoKSB0aGUgZGlhbG9nIHdpbGwgbG9vayBsaWtlIHRoaXMKICAgICAqICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBkYXRhLXd5c2lodG1sNS1kaWFsb2ctZmllbGQ9ImhyZWYiIHZhbHVlPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20iPgogICAgICogICAgPGlucHV0IHR5cGU9InRleHQiIGRhdGEtd3lzaWh0bWw1LWRpYWxvZy1maWVsZD0idGFyZ2V0IiB2YWx1ZT0iX2JsYW5rIj4KICAgICAqCiAgICAgKiBCYXNpY2FsbHkgaXQgYWRvcHRlZCB0aGUgYXR0cmlidXRlIHZhbHVlcyBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGlucHV0IGZpZWxkcwogICAgICoKICAgICAqLwogICAgX2ludGVycG9sYXRlOiBmdW5jdGlvbihhdm9pZEhpZGRlbkZpZWxkcykgewogICAgICB2YXIgZmllbGQsCiAgICAgICAgICBmaWVsZE5hbWUsCiAgICAgICAgICBuZXdWYWx1ZSwKICAgICAgICAgIGZvY3VzZWRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiOmZvY3VzIiksCiAgICAgICAgICBmaWVsZHMgICAgICAgICA9IHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoU0VMRUNUT1JfRklFTERTKSwKICAgICAgICAgIGxlbmd0aCAgICAgICAgID0gZmllbGRzLmxlbmd0aCwKICAgICAgICAgIGkgICAgICAgICAgICAgID0gMDsKICAgICAgZm9yICg7IGk8bGVuZ3RoOyBpKyspIHsKICAgICAgICBmaWVsZCA9IGZpZWxkc1tpXTsKICAgICAgICAKICAgICAgICAvLyBOZXZlciBjaGFuZ2UgZWxlbWVudHMgd2hlcmUgdGhlIHVzZXIgaXMgY3VycmVudGx5IHR5cGluZyBpbgogICAgICAgIGlmIChmaWVsZCA9PT0gZm9jdXNlZEVsZW1lbnQpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBEb24ndCB1cGRhdGUgaGlkZGVuIGZpZWxkcwogICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20veGluZy93eXNpaHRtbDUvcHVsbC8xNAogICAgICAgIGlmIChhdm9pZEhpZGRlbkZpZWxkcyAmJiBmaWVsZC50eXBlID09PSAiaGlkZGVuIikgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRklFTERTKTsKICAgICAgICBuZXdWYWx1ZSAgPSB0aGlzLmVsZW1lbnRUb0NoYW5nZSA/ICh0aGlzLmVsZW1lbnRUb0NoYW5nZVtmaWVsZE5hbWVdIHx8ICIiKSA6IGZpZWxkLmRlZmF1bHRWYWx1ZTsKICAgICAgICBmaWVsZC52YWx1ZSA9IG5ld1ZhbHVlOwogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogU2hvdyB0aGUgZGlhbG9nIGVsZW1lbnQKICAgICAqLwogICAgc2hvdzogZnVuY3Rpb24oZWxlbWVudFRvQ2hhbmdlKSB7CiAgICAgIHZhciB0aGF0ICAgICAgICA9IHRoaXMsCiAgICAgICAgICBmaXJzdEZpZWxkICA9IHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoU0VMRUNUT1JfRk9STV9FTEVNRU5UUyk7CiAgICAgIHRoaXMuZWxlbWVudFRvQ2hhbmdlID0gZWxlbWVudFRvQ2hhbmdlOwogICAgICB0aGlzLl9vYnNlcnZlKCk7CiAgICAgIHRoaXMuX2ludGVycG9sYXRlKCk7CiAgICAgIGlmIChlbGVtZW50VG9DaGFuZ2UpIHsKICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7IHRoYXQuX2ludGVycG9sYXRlKHRydWUpOyB9LCA1MDApOwogICAgICB9CiAgICAgIGRvbS5hZGRDbGFzcyh0aGlzLmxpbmssIENMQVNTX05BTUVfT1BFTkVEKTsKICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICB0aGlzLmZpcmUoInNob3ciKTsKICAgICAgaWYgKGZpcnN0RmllbGQgJiYgIWVsZW1lbnRUb0NoYW5nZSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBmaXJzdEZpZWxkLmZvY3VzKCk7CiAgICAgICAgfSBjYXRjaChlKSB7fQogICAgICB9CiAgICB9LAoKICAgIC8qKgogICAgICogSGlkZSB0aGUgZGlhbG9nIGVsZW1lbnQKICAgICAqLwogICAgaGlkZTogZnVuY3Rpb24oKSB7CiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7CiAgICAgIHRoaXMuZWxlbWVudFRvQ2hhbmdlID0gbnVsbDsKICAgICAgZG9tLnJlbW92ZUNsYXNzKHRoaXMubGluaywgQ0xBU1NfTkFNRV9PUEVORUQpOwogICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICB0aGlzLmZpcmUoImhpZGUiKTsKICAgIH0KICB9KTsKfSkod3lzaWh0bWw1KTsKLyoqCiAqIENvbnZlcnRzIHNwZWVjaC10by10ZXh0IGFuZCBpbnNlcnRzIHRoaXMgaW50byB0aGUgZWRpdG9yCiAqIEFzIG9mIG5vdyAoMjAxMS8wMy8yNSkgdGhpcyBvbmx5IGlzIHN1cHBvcnRlZCBpbiBDaHJvbWUgPj0gMTEKICoKICogTm90ZSB0aGF0IGl0IHNlbmRzIHRoZSByZWNvcmRlZCBhdWRpbyB0byB0aGUgZ29vZ2xlIHNwZWVjaCByZWNvZ25pdGlvbiBhcGk6CiAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDM2MTgyNi9kb2VzLWNocm9tZS1oYXZlLWJ1aWwtaW4tc3BlZWNoLXJlY29nbml0aW9uLWZvci1pbnB1dC10eXBlLXRleHQteC13ZWJraXQtc3BlZWMKICoKICogQ3VycmVudCBIVE1MNSBkcmFmdCBjYW4gYmUgZm91bmQgaGVyZQogKiBodHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy9wdWJsaWMteGctaHRtbHNwZWVjaC8yMDExRmViL2F0dC0wMDIwL2FwaS1kcmFmdC5odG1sCiAqIAogKiAiQWNjZXNzaW5nIEdvb2dsZSBTcGVlY2ggQVBJIENocm9tZSAxMSIKICogaHR0cDovL21pa2VwdWx0ei5jb20vMjAxMS8wMy9hY2Nlc3NpbmctZ29vZ2xlLXNwZWVjaC1hcGktY2hyb21lLTExLwogKi8KKGZ1bmN0aW9uKHd5c2lodG1sNSkgewogIHZhciBkb20gPSB3eXNpaHRtbDUuZG9tOwogIAogIHZhciBsaW5rU3R5bGVzID0gewogICAgcG9zaXRpb246ICJyZWxhdGl2ZSIKICB9OwogIAogIHZhciB3cmFwcGVyU3R5bGVzID0gewogICAgbGVmdDogICAgIDAsCiAgICBtYXJnaW46ICAgMCwKICAgIG9wYWNpdHk6ICAwLAogICAgb3ZlcmZsb3c6ICJoaWRkZW4iLAogICAgcGFkZGluZzogIDAsCiAgICBwb3NpdGlvbjogImFic29sdXRlIiwKICAgIHRvcDogICAgICAwLAogICAgekluZGV4OiAgIDEKICB9OwogIAogIHZhciBpbnB1dFN0eWxlcyA9IHsKICAgIGN1cnNvcjogICAgICJpbmhlcml0IiwKICAgIGZvbnRTaXplOiAgICI1MHB4IiwKICAgIGhlaWdodDogICAgICI1MHB4IiwKICAgIG1hcmdpblRvcDogICItMjVweCIsCiAgICBvdXRsaW5lOiAgICAwLAogICAgcGFkZGluZzogICAgMCwKICAgIHBvc2l0aW9uOiAgICJhYnNvbHV0ZSIsCiAgICByaWdodDogICAgICAiLTRweCIsCiAgICB0b3A6ICAgICAgICAiNTAlIgogIH07CiAgCiAgdmFyIGlucHV0QXR0cmlidXRlcyA9IHsKICAgICJ4LXdlYmtpdC1zcGVlY2giOiAiIiwKICAgICJzcGVlY2giOiAgICAgICAgICAiIgogIH07CiAgCiAgd3lzaWh0bWw1LnRvb2xiYXIuU3BlZWNoID0gZnVuY3Rpb24ocGFyZW50LCBsaW5rKSB7CiAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwogICAgaWYgKCF3eXNpaHRtbDUuYnJvd3Nlci5zdXBwb3J0c1NwZWVjaEFwaU9uKGlucHV0KSkgewogICAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIAogICAgd3lzaWh0bWw1Lmxhbmcub2JqZWN0KHdyYXBwZXJTdHlsZXMpLm1lcmdlKHsKICAgICAgd2lkdGg6ICBsaW5rLm9mZnNldFdpZHRoICArICJweCIsCiAgICAgIGhlaWdodDogbGluay5vZmZzZXRIZWlnaHQgKyAicHgiCiAgICB9KTsKICAgIAogICAgZG9tLmluc2VydChpbnB1dCkuaW50byh3cmFwcGVyKTsKICAgIGRvbS5pbnNlcnQod3JhcHBlcikuaW50byhsaW5rKTsKICAgIAogICAgZG9tLnNldFN0eWxlcyhpbnB1dFN0eWxlcykub24oaW5wdXQpOwogICAgZG9tLnNldEF0dHJpYnV0ZXMoaW5wdXRBdHRyaWJ1dGVzKS5vbihpbnB1dCkKICAgIAogICAgZG9tLnNldFN0eWxlcyh3cmFwcGVyU3R5bGVzKS5vbih3cmFwcGVyKTsKICAgIGRvbS5zZXRTdHlsZXMobGlua1N0eWxlcykub24obGluayk7CiAgICAKICAgIHZhciBldmVudE5hbWUgPSAib253ZWJraXRzcGVlY2hjaGFuZ2UiIGluIGlucHV0ID8gIndlYmtpdHNwZWVjaGNoYW5nZSIgOiAic3BlZWNoY2hhbmdlIjsKICAgIGRvbS5vYnNlcnZlKGlucHV0LCBldmVudE5hbWUsIGZ1bmN0aW9uKCkgewogICAgICBwYXJlbnQuZXhlY0NvbW1hbmQoImluc2VydFRleHQiLCBpbnB1dC52YWx1ZSk7CiAgICAgIGlucHV0LnZhbHVlID0gIiI7CiAgICB9KTsKICAgIAogICAgZG9tLm9ic2VydmUoaW5wdXQsICJjbGljayIsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgIGlmIChkb20uaGFzQ2xhc3MobGluaywgInd5c2lodG1sNS1jb21tYW5kLWRpc2FibGVkIikpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB9CiAgICAgIAogICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgIH0pOwogIH07Cn0pKHd5c2lodG1sNSk7LyoqCiAqIFRvb2xiYXIKICoKICogQHBhcmFtIHtPYmplY3R9IHBhcmVudCBSZWZlcmVuY2UgdG8gaW5zdGFuY2Ugb2YgRWRpdG9yIGluc3RhbmNlCiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGFpbmVyIFJlZmVyZW5jZSB0byB0aGUgdG9vbGJhciBjb250YWluZXIgZWxlbWVudAogKgogKiBAZXhhbXBsZQogKiAgICA8ZGl2IGlkPSJ0b29sYmFyIj4KICogICAgICA8YSBkYXRhLXd5c2lodG1sNS1jb21tYW5kPSJjcmVhdGVMaW5rIj5pbnNlcnQgbGluazwvYT4KICogICAgICA8YSBkYXRhLXd5c2lodG1sNS1jb21tYW5kPSJmb3JtYXRCbG9jayIgZGF0YS13eXNpaHRtbDUtY29tbWFuZC12YWx1ZT0iaDEiPmluc2VydCBoMTwvYT4KICogICAgPC9kaXY+CiAqCiAqICAgIDxzY3JpcHQ+CiAqICAgICAgdmFyIHRvb2xiYXIgPSBuZXcgd3lzaWh0bWw1LnRvb2xiYXIuVG9vbGJhcihlZGl0b3IsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0b29sYmFyIikpOwogKiAgICA8L3NjcmlwdD4KICovCihmdW5jdGlvbih3eXNpaHRtbDUpIHsKICB2YXIgQ0xBU1NfTkFNRV9DT01NQU5EX0RJU0FCTEVEICAgPSAid3lzaWh0bWw1LWNvbW1hbmQtZGlzYWJsZWQiLAogICAgICBDTEFTU19OQU1FX0NPTU1BTkRTX0RJU0FCTEVEICA9ICJ3eXNpaHRtbDUtY29tbWFuZHMtZGlzYWJsZWQiLAogICAgICBDTEFTU19OQU1FX0NPTU1BTkRfQUNUSVZFICAgICA9ICJ3eXNpaHRtbDUtY29tbWFuZC1hY3RpdmUiLAogICAgICBDTEFTU19OQU1FX0FDVElPTl9BQ1RJVkUgICAgICA9ICJ3eXNpaHRtbDUtYWN0aW9uLWFjdGl2ZSIsCiAgICAgIGRvbSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gd3lzaWh0bWw1LmRvbTsKICAKICB3eXNpaHRtbDUudG9vbGJhci5Ub29sYmFyID0gQmFzZS5leHRlbmQoCiAgICAvKiogQHNjb3BlIHd5c2lodG1sNS50b29sYmFyLlRvb2xiYXIucHJvdG90eXBlICovIHsKICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbihlZGl0b3IsIGNvbnRhaW5lcikgewogICAgICB0aGlzLmVkaXRvciAgICAgPSBlZGl0b3I7CiAgICAgIHRoaXMuY29udGFpbmVyICA9IHR5cGVvZihjb250YWluZXIpID09PSAic3RyaW5nIiA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbnRhaW5lcikgOiBjb250YWluZXI7CiAgICAgIHRoaXMuY29tcG9zZXIgICA9IGVkaXRvci5jb21wb3NlcjsKCiAgICAgIHRoaXMuX2dldExpbmtzKCJjb21tYW5kIik7CiAgICAgIHRoaXMuX2dldExpbmtzKCJhY3Rpb24iKTsKCiAgICAgIHRoaXMuX29ic2VydmUoKTsKICAgICAgdGhpcy5zaG93KCk7CiAgICAgIAogICAgICB2YXIgc3BlZWNoSW5wdXRMaW5rcyAgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS13eXNpaHRtbDUtY29tbWFuZD1pbnNlcnRTcGVlY2hdIiksCiAgICAgICAgICBsZW5ndGggICAgICAgICAgICA9IHNwZWVjaElucHV0TGlua3MubGVuZ3RoLAogICAgICAgICAgaSAgICAgICAgICAgICAgICAgPSAwOwogICAgICBmb3IgKDsgaTxsZW5ndGg7IGkrKykgewogICAgICAgIG5ldyB3eXNpaHRtbDUudG9vbGJhci5TcGVlY2godGhpcywgc3BlZWNoSW5wdXRMaW5rc1tpXSk7CiAgICAgIH0KICAgIH0sCgogICAgX2dldExpbmtzOiBmdW5jdGlvbih0eXBlKSB7CiAgICAgIHZhciBsaW5rcyAgID0gdGhpc1t0eXBlICsgIkxpbmtzIl0gPSB3eXNpaHRtbDUubGFuZy5hcnJheSh0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS13eXNpaHRtbDUtIiArIHR5cGUgKyAiXSIpKS5nZXQoKSwKICAgICAgICAgIGxlbmd0aCAgPSBsaW5rcy5sZW5ndGgsCiAgICAgICAgICBpICAgICAgID0gMCwKICAgICAgICAgIG1hcHBpbmcgPSB0aGlzW3R5cGUgKyAiTWFwcGluZyJdID0ge30sCiAgICAgICAgICBsaW5rLAogICAgICAgICAgZ3JvdXAsCiAgICAgICAgICBuYW1lLAogICAgICAgICAgdmFsdWUsCiAgICAgICAgICBkaWFsb2c7CiAgICAgIGZvciAoOyBpPGxlbmd0aDsgaSsrKSB7CiAgICAgICAgbGluayAgICA9IGxpbmtzW2ldOwogICAgICAgIG5hbWUgICAgPSBsaW5rLmdldEF0dHJpYnV0ZSgiZGF0YS13eXNpaHRtbDUtIiArIHR5cGUpOwogICAgICAgIHZhbHVlICAgPSBsaW5rLmdldEF0dHJpYnV0ZSgiZGF0YS13eXNpaHRtbDUtIiArIHR5cGUgKyAiLXZhbHVlIik7CiAgICAgICAgZ3JvdXAgICA9IHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIltkYXRhLXd5c2lodG1sNS0iICsgdHlwZSArICItZ3JvdXA9JyIgKyBuYW1lICsgIiddIik7CiAgICAgICAgZGlhbG9nICA9IHRoaXMuX2dldERpYWxvZyhsaW5rLCBuYW1lKTsKICAgICAgICAKICAgICAgICBtYXBwaW5nW25hbWUgKyAiOiIgKyB2YWx1ZV0gPSB7CiAgICAgICAgICBsaW5rOiAgIGxpbmssCiAgICAgICAgICBncm91cDogIGdyb3VwLAogICAgICAgICAgbmFtZTogICBuYW1lLAogICAgICAgICAgdmFsdWU6ICB2YWx1ZSwKICAgICAgICAgIGRpYWxvZzogZGlhbG9nLAogICAgICAgICAgc3RhdGU6ICBmYWxzZQogICAgICAgIH07CiAgICAgIH0KICAgIH0sCgogICAgX2dldERpYWxvZzogZnVuY3Rpb24obGluaywgY29tbWFuZCkgewogICAgICB2YXIgdGhhdCAgICAgICAgICA9IHRoaXMsCiAgICAgICAgICBkaWFsb2dFbGVtZW50ID0gdGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcigiW2RhdGEtd3lzaWh0bWw1LWRpYWxvZz0nIiArIGNvbW1hbmQgKyAiJ10iKSwKICAgICAgICAgIGRpYWxvZywKICAgICAgICAgIGNhcmV0Qm9va21hcms7CiAgICAgIAogICAgICBpZiAoZGlhbG9nRWxlbWVudCkgewogICAgICAgIGRpYWxvZyA9IG5ldyB3eXNpaHRtbDUudG9vbGJhci5EaWFsb2cobGluaywgZGlhbG9nRWxlbWVudCk7CgogICAgICAgIGRpYWxvZy5vYnNlcnZlKCJzaG93IiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICBjYXJldEJvb2ttYXJrID0gdGhhdC5jb21wb3Nlci5zZWxlY3Rpb24uZ2V0Qm9va21hcmsoKTsKCiAgICAgICAgICB0aGF0LmVkaXRvci5maXJlKCJzaG93OmRpYWxvZyIsIHsgY29tbWFuZDogY29tbWFuZCwgZGlhbG9nQ29udGFpbmVyOiBkaWFsb2dFbGVtZW50LCBjb21tYW5kTGluazogbGluayB9KTsKICAgICAgICB9KTsKCiAgICAgICAgZGlhbG9nLm9ic2VydmUoInNhdmUiLCBmdW5jdGlvbihhdHRyaWJ1dGVzKSB7CiAgICAgICAgICBpZiAoY2FyZXRCb29rbWFyaykgewogICAgICAgICAgICB0aGF0LmNvbXBvc2VyLnNlbGVjdGlvbi5zZXRCb29rbWFyayhjYXJldEJvb2ttYXJrKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoYXQuX2V4ZWNDb21tYW5kKGNvbW1hbmQsIGF0dHJpYnV0ZXMpOwogICAgICAgICAgCiAgICAgICAgICB0aGF0LmVkaXRvci5maXJlKCJzYXZlOmRpYWxvZyIsIHsgY29tbWFuZDogY29tbWFuZCwgZGlhbG9nQ29udGFpbmVyOiBkaWFsb2dFbGVtZW50LCBjb21tYW5kTGluazogbGluayB9KTsKICAgICAgICB9KTsKCiAgICAgICAgZGlhbG9nLm9ic2VydmUoImNhbmNlbCIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgdGhhdC5lZGl0b3IuZm9jdXMoZmFsc2UpOwogICAgICAgICAgdGhhdC5lZGl0b3IuZmlyZSgiY2FuY2VsOmRpYWxvZyIsIHsgY29tbWFuZDogY29tbWFuZCwgZGlhbG9nQ29udGFpbmVyOiBkaWFsb2dFbGVtZW50LCBjb21tYW5kTGluazogbGluayB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gZGlhbG9nOwogICAgfSwKCiAgICAvKioKICAgICAqIEBleGFtcGxlCiAgICAgKiAgICB2YXIgdG9vbGJhciA9IG5ldyB3eXNpaHRtbDUuVG9vbGJhcigpOwogICAgICogICAgLy8gSW5zZXJ0IGEgPGJsb2NrcXVvdGU+IGVsZW1lbnQgb3Igd3JhcCBjdXJyZW50IHNlbGVjdGlvbiBpbiA8YmxvY2txdW90ZT4KICAgICAqICAgIHRvb2xiYXIuZXhlY0NvbW1hbmQoImZvcm1hdEJsb2NrIiwgImJsb2NrcXVvdGUiKTsKICAgICAqLwogICAgZXhlY0NvbW1hbmQ6IGZ1bmN0aW9uKGNvbW1hbmQsIGNvbW1hbmRWYWx1ZSkgewogICAgICBpZiAodGhpcy5jb21tYW5kc0Rpc2FibGVkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICB2YXIgY29tbWFuZE9iaiA9IHRoaXMuY29tbWFuZE1hcHBpbmdbY29tbWFuZCArICI6IiArIGNvbW1hbmRWYWx1ZV07CgogICAgICAvLyBTaG93IGRpYWxvZyB3aGVuIGF2YWlsYWJsZQogICAgICBpZiAoY29tbWFuZE9iaiAmJiBjb21tYW5kT2JqLmRpYWxvZyAmJiAhY29tbWFuZE9iai5zdGF0ZSkgewogICAgICAgIGNvbW1hbmRPYmouZGlhbG9nLnNob3coKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLl9leGVjQ29tbWFuZChjb21tYW5kLCBjb21tYW5kVmFsdWUpOwogICAgICB9CiAgICB9LAoKICAgIF9leGVjQ29tbWFuZDogZnVuY3Rpb24oY29tbWFuZCwgY29tbWFuZFZhbHVlKSB7CiAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGNvbXBvc2VyIGlzIGZvY3Vzc2VkIChmYWxzZSA9PiBkb24ndCBtb3ZlIGNhcmV0IHRvIHRoZSBlbmQpCiAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKGZhbHNlKTsKCiAgICAgIHRoaXMuY29tcG9zZXIuY29tbWFuZHMuZXhlYyhjb21tYW5kLCBjb21tYW5kVmFsdWUpOwogICAgICB0aGlzLl91cGRhdGVMaW5rU3RhdGVzKCk7CiAgICB9LAoKICAgIGV4ZWNBY3Rpb246IGZ1bmN0aW9uKGFjdGlvbikgewogICAgICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CiAgICAgIHN3aXRjaChhY3Rpb24pIHsKICAgICAgICBjYXNlICJjaGFuZ2VfdmlldyI6CiAgICAgICAgICBpZiAoZWRpdG9yLmN1cnJlbnRWaWV3ID09PSBlZGl0b3IudGV4dGFyZWEpIHsKICAgICAgICAgICAgZWRpdG9yLmZpcmUoImNoYW5nZV92aWV3IiwgImNvbXBvc2VyIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBlZGl0b3IuZmlyZSgiY2hhbmdlX3ZpZXciLCAidGV4dGFyZWEiKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9LAoKICAgIF9vYnNlcnZlOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIHRoYXQgICAgICA9IHRoaXMsCiAgICAgICAgICBlZGl0b3IgICAgPSB0aGlzLmVkaXRvciwKICAgICAgICAgIGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyLAogICAgICAgICAgbGlua3MgICAgID0gdGhpcy5jb21tYW5kTGlua3MuY29uY2F0KHRoaXMuYWN0aW9uTGlua3MpLAogICAgICAgICAgbGVuZ3RoICAgID0gbGlua3MubGVuZ3RoLAogICAgICAgICAgaSAgICAgICAgID0gMDsKICAgICAgCiAgICAgIGZvciAoOyBpPGxlbmd0aDsgaSsrKSB7CiAgICAgICAgLy8gJ2phdmFzY3JpcHQ6OycgYW5kIHVuc2VsZWN0YWJsZT1vbiBOZWVkZWQgZm9yIElFLCBidXQgZG9uZSBpbiBhbGwgYnJvd3NlcnMgdG8gbWFrZSBzdXJlIHRoYXQgYWxsIGdldCB0aGUgc2FtZSBjc3MgYXBwbGllZAogICAgICAgIC8vICh5b3Uga25vdywgYTpsaW5rIHsgLi4uIH0gZG9lc24ndCBtYXRjaCBhbmNob3JzIHdpdGggbWlzc2luZyBocmVmIGF0dHJpYnV0ZSkKICAgICAgICBkb20uc2V0QXR0cmlidXRlcyh7CiAgICAgICAgICBocmVmOiAgICAgICAgICJqYXZhc2NyaXB0OjsiLAogICAgICAgICAgdW5zZWxlY3RhYmxlOiAib24iCiAgICAgICAgfSkub24obGlua3NbaV0pOwogICAgICB9CgogICAgICAvLyBOZWVkZWQgZm9yIG9wZXJhCiAgICAgIGRvbS5kZWxlZ2F0ZShjb250YWluZXIsICJbZGF0YS13eXNpaHRtbDUtY29tbWFuZF0iLCAibW91c2Vkb3duIiwgZnVuY3Rpb24oZXZlbnQpIHsgZXZlbnQucHJldmVudERlZmF1bHQoKTsgfSk7CiAgICAgIAogICAgICBkb20uZGVsZWdhdGUoY29udGFpbmVyLCAiW2RhdGEtd3lzaWh0bWw1LWNvbW1hbmRdIiwgImNsaWNrIiwgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICB2YXIgbGluayAgICAgICAgICA9IHRoaXMsCiAgICAgICAgICAgIGNvbW1hbmQgICAgICAgPSBsaW5rLmdldEF0dHJpYnV0ZSgiZGF0YS13eXNpaHRtbDUtY29tbWFuZCIpLAogICAgICAgICAgICBjb21tYW5kVmFsdWUgID0gbGluay5nZXRBdHRyaWJ1dGUoImRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWUiKTsKICAgICAgICB0aGF0LmV4ZWNDb21tYW5kKGNvbW1hbmQsIGNvbW1hbmRWYWx1ZSk7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgfSk7CgogICAgICBkb20uZGVsZWdhdGUoY29udGFpbmVyLCAiW2RhdGEtd3lzaWh0bWw1LWFjdGlvbl0iLCAiY2xpY2siLCBmdW5jdGlvbihldmVudCkgewogICAgICAgIHZhciBhY3Rpb24gPSB0aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS13eXNpaHRtbDUtYWN0aW9uIik7CiAgICAgICAgdGhhdC5leGVjQWN0aW9uKGFjdGlvbik7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgfSk7CgogICAgICBlZGl0b3Iub2JzZXJ2ZSgiZm9jdXM6Y29tcG9zZXIiLCBmdW5jdGlvbigpIHsKICAgICAgICB0aGF0LmJvb2ttYXJrID0gbnVsbDsKICAgICAgICBjbGVhckludGVydmFsKHRoYXQuaW50ZXJ2YWwpOwogICAgICAgIHRoYXQuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsgdGhhdC5fdXBkYXRlTGlua1N0YXRlcygpOyB9LCA1MDApOwogICAgICB9KTsKCiAgICAgIGVkaXRvci5vYnNlcnZlKCJibHVyOmNvbXBvc2VyIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGF0LmludGVydmFsKTsKICAgICAgfSk7CgogICAgICBlZGl0b3Iub2JzZXJ2ZSgiZGVzdHJveTpjb21wb3NlciIsIGZ1bmN0aW9uKCkgewogICAgICAgIGNsZWFySW50ZXJ2YWwodGhhdC5pbnRlcnZhbCk7CiAgICAgIH0pOwoKICAgICAgZWRpdG9yLm9ic2VydmUoImNoYW5nZV92aWV3IiwgZnVuY3Rpb24oY3VycmVudFZpZXcpIHsKICAgICAgICAvLyBTZXQgdGltZW91dCBuZWVkZWQgaW4gb3JkZXIgdG8gbGV0IHRoZSBibHVyIGV2ZW50IGZpcmUgZmlyc3QKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgdGhhdC5jb21tYW5kc0Rpc2FibGVkID0gKGN1cnJlbnRWaWV3ICE9PSAiY29tcG9zZXIiKTsKICAgICAgICAgIHRoYXQuX3VwZGF0ZUxpbmtTdGF0ZXMoKTsKICAgICAgICAgIGlmICh0aGF0LmNvbW1hbmRzRGlzYWJsZWQpIHsKICAgICAgICAgICAgZG9tLmFkZENsYXNzKGNvbnRhaW5lciwgQ0xBU1NfTkFNRV9DT01NQU5EU19ESVNBQkxFRCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkb20ucmVtb3ZlQ2xhc3MoY29udGFpbmVyLCBDTEFTU19OQU1FX0NPTU1BTkRTX0RJU0FCTEVEKTsKICAgICAgICAgIH0KICAgICAgICB9LCAwKTsKICAgICAgfSk7CiAgICB9LAoKICAgIF91cGRhdGVMaW5rU3RhdGVzOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIGVsZW1lbnQgICAgICAgICAgID0gdGhpcy5jb21wb3Nlci5lbGVtZW50LAogICAgICAgICAgY29tbWFuZE1hcHBpbmcgICAgPSB0aGlzLmNvbW1hbmRNYXBwaW5nLAogICAgICAgICAgYWN0aW9uTWFwcGluZyAgICAgPSB0aGlzLmFjdGlvbk1hcHBpbmcsCiAgICAgICAgICBpLAogICAgICAgICAgc3RhdGUsCiAgICAgICAgICBhY3Rpb24sCiAgICAgICAgICBjb21tYW5kOwogICAgICAvLyBldmVyeSBtaWxsaXNlY29uZCBjb3VudHMuLi4gdGhpcyBpcyBleGVjdXRlZCBxdWl0ZSBvZnRlbgogICAgICBmb3IgKGkgaW4gY29tbWFuZE1hcHBpbmcpIHsKICAgICAgICBjb21tYW5kID0gY29tbWFuZE1hcHBpbmdbaV07CiAgICAgICAgaWYgKHRoaXMuY29tbWFuZHNEaXNhYmxlZCkgewogICAgICAgICAgc3RhdGUgPSBmYWxzZTsKICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhjb21tYW5kLmxpbmssIENMQVNTX05BTUVfQ09NTUFORF9BQ1RJVkUpOwogICAgICAgICAgaWYgKGNvbW1hbmQuZ3JvdXApIHsKICAgICAgICAgICAgZG9tLnJlbW92ZUNsYXNzKGNvbW1hbmQuZ3JvdXAsIENMQVNTX05BTUVfQ09NTUFORF9BQ1RJVkUpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNvbW1hbmQuZGlhbG9nKSB7CiAgICAgICAgICAgIGNvbW1hbmQuZGlhbG9nLmhpZGUoKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RhdGUgPSB0aGlzLmNvbXBvc2VyLmNvbW1hbmRzLnN0YXRlKGNvbW1hbmQubmFtZSwgY29tbWFuZC52YWx1ZSk7CiAgICAgICAgICBpZiAod3lzaWh0bWw1Lmxhbmcub2JqZWN0KHN0YXRlKS5pc0FycmF5KCkpIHsKICAgICAgICAgICAgLy8gR3JhYiBmaXJzdCBhbmQgb25seSBvYmplY3QvZWxlbWVudCBpbiBzdGF0ZSBhcnJheSwgb3RoZXJ3aXNlIGNvbnZlcnQgc3RhdGUgaW50byBib29sZWFuCiAgICAgICAgICAgIC8vIHRvIGF2b2lkIHNob3dpbmcgYSBkaWFsb2cgZm9yIG11bHRpcGxlIHNlbGVjdGVkIGVsZW1lbnRzIHdoaWNoIG1heSBoYXZlIGRpZmZlcmVudCBhdHRyaWJ1dGVzCiAgICAgICAgICAgIC8vIGVnLiB3aGVuIHR3byBsaW5rcyB3aXRoIGRpZmZlcmVudCBocmVmIGFyZSBzZWxlY3RlZCwgdGhlIHN0YXRlIHdpbGwgYmUgYW4gYXJyYXkgY29uc2lzdGluZyBvZiBib3RoIGxpbmsgZWxlbWVudHMKICAgICAgICAgICAgLy8gYnV0IHRoZSBkaWFsb2cgaW50ZXJmYWNlIGNhbiBvbmx5IHVwZGF0ZSBvbmUKICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZS5sZW5ndGggPT09IDEgPyBzdGF0ZVswXSA6IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBkb20ucmVtb3ZlQ2xhc3MoY29tbWFuZC5saW5rLCBDTEFTU19OQU1FX0NPTU1BTkRfRElTQUJMRUQpOwogICAgICAgICAgaWYgKGNvbW1hbmQuZ3JvdXApIHsKICAgICAgICAgICAgZG9tLnJlbW92ZUNsYXNzKGNvbW1hbmQuZ3JvdXAsIENMQVNTX05BTUVfQ09NTUFORF9ESVNBQkxFRCk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoY29tbWFuZC5zdGF0ZSA9PT0gc3RhdGUpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgY29tbWFuZC5zdGF0ZSA9IHN0YXRlOwogICAgICAgIGlmIChzdGF0ZSkgewogICAgICAgICAgZG9tLmFkZENsYXNzKGNvbW1hbmQubGluaywgQ0xBU1NfTkFNRV9DT01NQU5EX0FDVElWRSk7CiAgICAgICAgICBpZiAoY29tbWFuZC5ncm91cCkgewogICAgICAgICAgICBkb20uYWRkQ2xhc3MoY29tbWFuZC5ncm91cCwgQ0xBU1NfTkFNRV9DT01NQU5EX0FDVElWRSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY29tbWFuZC5kaWFsb2cpIHsKICAgICAgICAgICAgaWYgKHR5cGVvZihzdGF0ZSkgPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgICAgY29tbWFuZC5kaWFsb2cuc2hvdyhzdGF0ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY29tbWFuZC5kaWFsb2cuaGlkZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRvbS5yZW1vdmVDbGFzcyhjb21tYW5kLmxpbmssIENMQVNTX05BTUVfQ09NTUFORF9BQ1RJVkUpOwogICAgICAgICAgaWYgKGNvbW1hbmQuZ3JvdXApIHsKICAgICAgICAgICAgZG9tLnJlbW92ZUNsYXNzKGNvbW1hbmQuZ3JvdXAsIENMQVNTX05BTUVfQ09NTUFORF9BQ1RJVkUpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNvbW1hbmQuZGlhbG9nKSB7CiAgICAgICAgICAgIGNvbW1hbmQuZGlhbG9nLmhpZGUoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIGZvciAoaSBpbiBhY3Rpb25NYXBwaW5nKSB7CiAgICAgICAgYWN0aW9uID0gYWN0aW9uTWFwcGluZ1tpXTsKICAgICAgICAKICAgICAgICBpZiAoYWN0aW9uLm5hbWUgPT09ICJjaGFuZ2VfdmlldyIpIHsKICAgICAgICAgIGFjdGlvbi5zdGF0ZSA9IHRoaXMuZWRpdG9yLmN1cnJlbnRWaWV3ID09PSB0aGlzLmVkaXRvci50ZXh0YXJlYTsKICAgICAgICAgIGlmIChhY3Rpb24uc3RhdGUpIHsKICAgICAgICAgICAgZG9tLmFkZENsYXNzKGFjdGlvbi5saW5rLCBDTEFTU19OQU1FX0FDVElPTl9BQ1RJVkUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZG9tLnJlbW92ZUNsYXNzKGFjdGlvbi5saW5rLCBDTEFTU19OQU1FX0FDVElPTl9BQ1RJVkUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKCiAgICBzaG93OiBmdW5jdGlvbigpIHsKICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgfSwKCiAgICBoaWRlOiBmdW5jdGlvbigpIHsKICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIH0KICB9KTsKICAKfSkod3lzaWh0bWw1KTsKLyoqCiAqIFdZU0lIVE1MNSBFZGl0b3IKICoKICogQHBhcmFtIHtFbGVtZW50fSB0ZXh0YXJlYUVsZW1lbnQgUmVmZXJlbmNlIHRvIHRoZSB0ZXh0YXJlYSB3aGljaCBzaG91bGQgYmUgdHVybmVkIGludG8gYSByaWNoIHRleHQgaW50ZXJmYWNlCiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBTZWUgZGVmYXVsdENvbmZpZyBvYmplY3QgYmVsb3cgZm9yIGV4cGxhbmF0aW9uIG9mIGVhY2ggaW5kaXZpZHVhbCBjb25maWcgb3B0aW9uCiAqCiAqIEBldmVudHMKICogICAgbG9hZAogKiAgICBiZWZvcmVsb2FkIChmb3IgaW50ZXJuYWwgdXNlIG9ubHkpCiAqICAgIGZvY3VzCiAqICAgIGZvY3VzOmNvbXBvc2VyCiAqICAgIGZvY3VzOnRleHRhcmVhCiAqICAgIGJsdXIKICogICAgYmx1cjpjb21wb3NlcgogKiAgICBibHVyOnRleHRhcmVhCiAqICAgIGNoYW5nZQogKiAgICBjaGFuZ2U6Y29tcG9zZXIKICogICAgY2hhbmdlOnRleHRhcmVhCiAqICAgIHBhc3RlCiAqICAgIHBhc3RlOmNvbXBvc2VyCiAqICAgIHBhc3RlOnRleHRhcmVhCiAqICAgIG5ld3dvcmQ6Y29tcG9zZXIKICogICAgZGVzdHJveTpjb21wb3NlcgogKiAgICB1bmRvOmNvbXBvc2VyCiAqICAgIHJlZG86Y29tcG9zZXIKICogICAgYmVmb3JlY29tbWFuZDpjb21wb3NlcgogKiAgICBhZnRlcmNvbW1hbmQ6Y29tcG9zZXIKICogICAgY2hhbmdlX3ZpZXcKICovCihmdW5jdGlvbih3eXNpaHRtbDUpIHsKICB2YXIgdW5kZWY7CiAgCiAgdmFyIGRlZmF1bHRDb25maWcgPSB7CiAgICAvLyBHaXZlIHRoZSBlZGl0b3IgYSBuYW1lLCB0aGUgbmFtZSB3aWxsIGFsc28gYmUgc2V0IGFzIGNsYXNzIG5hbWUgb24gdGhlIGlmcmFtZSBhbmQgb24gdGhlIGlmcmFtZSdzIGJvZHkgCiAgICBuYW1lOiAgICAgICAgICAgICAgICAgdW5kZWYsCiAgICAvLyBXaGV0aGVyIHRoZSBlZGl0b3Igc2hvdWxkIGxvb2sgbGlrZSB0aGUgdGV4dGFyZWEgKGJ5IGFkb3B0aW5nIHN0eWxlcykKICAgIHN0eWxlOiAgICAgICAgICAgICAgICB0cnVlLAogICAgLy8gSWQgb2YgdGhlIHRvb2xiYXIgZWxlbWVudCwgcGFzcyBmYWxzZXkgdmFsdWUgaWYgeW91IGRvbid0IHdhbnQgYW55IHRvb2xiYXIgbG9naWMKICAgIHRvb2xiYXI6ICAgICAgICAgICAgICB1bmRlZiwKICAgIC8vIFdoZXRoZXIgdXJscywgZW50ZXJlZCBieSB0aGUgdXNlciBzaG91bGQgYXV0b21hdGljYWxseSBiZWNvbWUgY2xpY2thYmxlLWxpbmtzCiAgICBhdXRvTGluazogICAgICAgICAgICAgdHJ1ZSwKICAgIC8vIE9iamVjdCB3aGljaCBpbmNsdWRlcyBwYXJzZXIgcnVsZXMgdG8gYXBwbHkgd2hlbiBodG1sIGdldHMgaW5zZXJ0ZWQgdmlhIGNvcHkgJiBwYXN0ZQogICAgLy8gU2VlIHBhcnNlcl9ydWxlcy8qLmpzIGZvciBleGFtcGxlcwogICAgcGFyc2VyUnVsZXM6ICAgICAgICAgIHsgdGFnczogeyBicjoge30sIHNwYW46IHt9LCBkaXY6IHt9LCBwOiB7fSB9LCBjbGFzc2VzOiB7fSB9LAogICAgLy8gUGFyc2VyIG1ldGhvZCB0byB1c2Ugd2hlbiB0aGUgdXNlciBpbnNlcnRzIGNvbnRlbnQgdmlhIGNvcHkgJiBwYXN0ZQogICAgcGFyc2VyOiAgICAgICAgICAgICAgIHd5c2lodG1sNS5kb20ucGFyc2UsCiAgICAvLyBDbGFzcyBuYW1lIHdoaWNoIHNob3VsZCBiZSBzZXQgb24gdGhlIGNvbnRlbnRFZGl0YWJsZSBlbGVtZW50IGluIHRoZSBjcmVhdGVkIHNhbmRib3ggaWZyYW1lLCBjYW4gYmUgc3R5bGVkIHZpYSB0aGUgJ3N0eWxlc2hlZXRzJyBvcHRpb24KICAgIGNvbXBvc2VyQ2xhc3NOYW1lOiAgICAid3lzaWh0bWw1LWVkaXRvciIsCiAgICAvLyBDbGFzcyBuYW1lIHRvIGFkZCB0byB0aGUgYm9keSB3aGVuIHRoZSB3eXNpaHRtbDUgZWRpdG9yIGlzIHN1cHBvcnRlZAogICAgYm9keUNsYXNzTmFtZTogICAgICAgICJ3eXNpaHRtbDUtc3VwcG9ydGVkIiwKICAgIC8vIEFycmF5IChvciBzaW5nbGUgc3RyaW5nKSBvZiBzdHlsZXNoZWV0IHVybHMgdG8gYmUgbG9hZGVkIGluIHRoZSBlZGl0b3IncyBpZnJhbWUKICAgIHN0eWxlc2hlZXRzOiAgICAgICAgICBbXSwKICAgIC8vIFBsYWNlaG9sZGVyIHRleHQgdG8gdXNlLCBkZWZhdWx0cyB0byB0aGUgcGxhY2Vob2xkZXIgYXR0cmlidXRlIG9uIHRoZSB0ZXh0YXJlYSBlbGVtZW50CiAgICBwbGFjZWhvbGRlclRleHQ6ICAgICAgdW5kZWYsCiAgICAvLyBXaGV0aGVyIHRoZSBjb21wb3NlciBzaG91bGQgYWxsb3cgdGhlIHVzZXIgdG8gbWFudWFsbHkgcmVzaXplIGltYWdlcywgdGFibGVzIGV0Yy4KICAgIGFsbG93T2JqZWN0UmVzaXppbmc6ICB0cnVlLAogICAgLy8gV2hldGhlciB0aGUgcmljaCB0ZXh0IGVkaXRvciBzaG91bGQgYmUgcmVuZGVyZWQgb24gdG91Y2ggZGV2aWNlcyAod3lzaWh0bWw1ID49IDAuMy4wIGNvbWVzIHdpdGggYmFzaWMgc3VwcG9ydCBmb3IgaU9TIDUpCiAgICBzdXBwb3J0VG91Y2hEZXZpY2VzOiAgdHJ1ZQogIH07CiAgCiAgd3lzaWh0bWw1LkVkaXRvciA9IHd5c2lodG1sNS5sYW5nLkRpc3BhdGNoZXIuZXh0ZW5kKAogICAgLyoqIEBzY29wZSB3eXNpaHRtbDUuRWRpdG9yLnByb3RvdHlwZSAqLyB7CiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24odGV4dGFyZWFFbGVtZW50LCBjb25maWcpIHsKICAgICAgdGhpcy50ZXh0YXJlYUVsZW1lbnQgID0gdHlwZW9mKHRleHRhcmVhRWxlbWVudCkgPT09ICJzdHJpbmciID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGV4dGFyZWFFbGVtZW50KSA6IHRleHRhcmVhRWxlbWVudDsKICAgICAgdGhpcy5jb25maWcgICAgICAgICAgID0gd3lzaWh0bWw1Lmxhbmcub2JqZWN0KHt9KS5tZXJnZShkZWZhdWx0Q29uZmlnKS5tZXJnZShjb25maWcpLmdldCgpOwogICAgICB0aGlzLnRleHRhcmVhICAgICAgICAgPSBuZXcgd3lzaWh0bWw1LnZpZXdzLlRleHRhcmVhKHRoaXMsIHRoaXMudGV4dGFyZWFFbGVtZW50LCB0aGlzLmNvbmZpZyk7CiAgICAgIHRoaXMuY3VycmVudFZpZXcgICAgICA9IHRoaXMudGV4dGFyZWE7CiAgICAgIHRoaXMuX2lzQ29tcGF0aWJsZSAgICA9IHd5c2lodG1sNS5icm93c2VyLnN1cHBvcnRlZCgpOwogICAgICAKICAgICAgLy8gU29ydCBvdXQgdW5zdXBwb3J0ZWQvdW53YW50ZWQgYnJvd3NlcnMgaGVyZQogICAgICBpZiAoIXRoaXMuX2lzQ29tcGF0aWJsZSB8fCAoIXRoaXMuY29uZmlnLnN1cHBvcnRUb3VjaERldmljZXMgJiYgd3lzaWh0bWw1LmJyb3dzZXIuaXNUb3VjaERldmljZSgpKSkgewogICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0aGF0LmZpcmUoImJlZm9yZWxvYWQiKS5maXJlKCJsb2FkIik7IH0sIDApOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICAKICAgICAgLy8gQWRkIGNsYXNzIG5hbWUgdG8gYm9keSwgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZWRpdG9yIGlzIHN1cHBvcnRlZAogICAgICB3eXNpaHRtbDUuZG9tLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIHRoaXMuY29uZmlnLmJvZHlDbGFzc05hbWUpOwogICAgICAKICAgICAgdGhpcy5jb21wb3NlciA9IG5ldyB3eXNpaHRtbDUudmlld3MuQ29tcG9zZXIodGhpcywgdGhpcy50ZXh0YXJlYUVsZW1lbnQsIHRoaXMuY29uZmlnKTsKICAgICAgdGhpcy5jdXJyZW50VmlldyA9IHRoaXMuY29tcG9zZXI7CiAgICAgIAogICAgICBpZiAodHlwZW9mKHRoaXMuY29uZmlnLnBhcnNlcikgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB0aGlzLl9pbml0UGFyc2VyKCk7CiAgICAgIH0KICAgICAgCiAgICAgIHRoaXMub2JzZXJ2ZSgiYmVmb3JlbG9hZCIsIGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuc3luY2hyb25pemVyID0gbmV3IHd5c2lodG1sNS52aWV3cy5TeW5jaHJvbml6ZXIodGhpcywgdGhpcy50ZXh0YXJlYSwgdGhpcy5jb21wb3Nlcik7CiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnRvb2xiYXIpIHsKICAgICAgICAgIHRoaXMudG9vbGJhciA9IG5ldyB3eXNpaHRtbDUudG9vbGJhci5Ub29sYmFyKHRoaXMsIHRoaXMuY29uZmlnLnRvb2xiYXIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIAogICAgICB0cnkgewogICAgICAgIGNvbnNvbGUubG9nKCJIZXlhISBUaGlzIHBhZ2UgaXMgdXNpbmcgd3lzaWh0bWw1IGZvciByaWNoIHRleHQgZWRpdGluZy4gQ2hlY2sgb3V0IGh0dHBzOi8vZ2l0aHViLmNvbS94aW5nL3d5c2lodG1sNSIpOwogICAgICB9IGNhdGNoKGUpIHt9CiAgICB9LAogICAgCiAgICBpc0NvbXBhdGlibGU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy5faXNDb21wYXRpYmxlOwogICAgfSwKCiAgICBjbGVhcjogZnVuY3Rpb24oKSB7CiAgICAgIHRoaXMuY3VycmVudFZpZXcuY2xlYXIoKTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9LAoKICAgIGdldFZhbHVlOiBmdW5jdGlvbihwYXJzZSkgewogICAgICByZXR1cm4gdGhpcy5jdXJyZW50Vmlldy5nZXRWYWx1ZShwYXJzZSk7CiAgICB9LAoKICAgIHNldFZhbHVlOiBmdW5jdGlvbihodG1sLCBwYXJzZSkgewogICAgICBpZiAoIWh0bWwpIHsKICAgICAgICByZXR1cm4gdGhpcy5jbGVhcigpOwogICAgICB9CiAgICAgIHRoaXMuY3VycmVudFZpZXcuc2V0VmFsdWUoaHRtbCwgcGFyc2UpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0sCgogICAgZm9jdXM6IGZ1bmN0aW9uKHNldFRvRW5kKSB7CiAgICAgIHRoaXMuY3VycmVudFZpZXcuZm9jdXMoc2V0VG9FbmQpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0sCgogICAgLyoqCiAgICAgKiBEZWFjdGl2YXRlIGVkaXRvciAobWFrZSBpdCByZWFkb25seSkKICAgICAqLwogICAgZGlzYWJsZTogZnVuY3Rpb24oKSB7CiAgICAgIHRoaXMuY3VycmVudFZpZXcuZGlzYWJsZSgpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0sCiAgICAKICAgIC8qKgogICAgICogQWN0aXZhdGUgZWRpdG9yCiAgICAgKi8KICAgIGVuYWJsZTogZnVuY3Rpb24oKSB7CiAgICAgIHRoaXMuY3VycmVudFZpZXcuZW5hYmxlKCk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSwKICAgIAogICAgaXNFbXB0eTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRWaWV3LmlzRW1wdHkoKTsKICAgIH0sCiAgICAKICAgIGhhc1BsYWNlaG9sZGVyU2V0OiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFZpZXcuaGFzUGxhY2Vob2xkZXJTZXQoKTsKICAgIH0sCiAgICAKICAgIHBhcnNlOiBmdW5jdGlvbihodG1sT3JFbGVtZW50KSB7CiAgICAgIHZhciByZXR1cm5WYWx1ZSA9IHRoaXMuY29uZmlnLnBhcnNlcihodG1sT3JFbGVtZW50LCB0aGlzLmNvbmZpZy5wYXJzZXJSdWxlcywgdGhpcy5jb21wb3Nlci5zYW5kYm94LmdldERvY3VtZW50KCksIHRydWUpOwogICAgICBpZiAodHlwZW9mKGh0bWxPckVsZW1lbnQpID09PSAib2JqZWN0IikgewogICAgICAgIHd5c2lodG1sNS5xdWlya3MucmVkcmF3KGh0bWxPckVsZW1lbnQpOwogICAgICB9CiAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgIH0sCiAgICAKICAgIC8qKgogICAgICogUHJlcGFyZSBodG1sIHBhcnNlciBsb2dpYwogICAgICogIC0gT2JzZXJ2ZXMgZm9yIHBhc3RlIGFuZCBkcm9wCiAgICAgKi8KICAgIF9pbml0UGFyc2VyOiBmdW5jdGlvbigpIHsKICAgICAgdGhpcy5vYnNlcnZlKCJwYXN0ZTpjb21wb3NlciIsIGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBrZWVwU2Nyb2xsUG9zaXRpb24gID0gdHJ1ZSwKICAgICAgICAgICAgdGhhdCAgICAgICAgICAgICAgICA9IHRoaXM7CiAgICAgICAgdGhhdC5jb21wb3Nlci5zZWxlY3Rpb24uZXhlY3V0ZUFuZFJlc3RvcmUoZnVuY3Rpb24oKSB7CiAgICAgICAgICB3eXNpaHRtbDUucXVpcmtzLmNsZWFuUGFzdGVkSFRNTCh0aGF0LmNvbXBvc2VyLmVsZW1lbnQpOwogICAgICAgICAgdGhhdC5wYXJzZSh0aGF0LmNvbXBvc2VyLmVsZW1lbnQpOwogICAgICAgIH0sIGtlZXBTY3JvbGxQb3NpdGlvbik7CiAgICAgIH0pOwogICAgICAKICAgICAgdGhpcy5vYnNlcnZlKCJwYXN0ZTp0ZXh0YXJlYSIsIGZ1bmN0aW9uKCkgewogICAgICAgIHZhciB2YWx1ZSAgID0gdGhpcy50ZXh0YXJlYS5nZXRWYWx1ZSgpLAogICAgICAgICAgICBuZXdWYWx1ZTsKICAgICAgICBuZXdWYWx1ZSA9IHRoaXMucGFyc2UodmFsdWUpOwogICAgICAgIHRoaXMudGV4dGFyZWEuc2V0VmFsdWUobmV3VmFsdWUpOwogICAgICB9KTsKICAgIH0KICB9KTsKfSkod3lzaWh0bWw1KTsK]]></data>
	</file>
	<file>
	  <filename>/js/external/inputs-ext/wysihtml5/bootstrap-wysihtml5-0.0.2/wysihtml5-0.3.0.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKIHd5c2lodG1sNSB2MC4zLjAKIGh0dHBzOi8vZ2l0aHViLmNvbS94aW5nL3d5c2lodG1sNQoKIEF1dGhvcjogQ2hyaXN0b3BoZXIgQmx1bSAoaHR0cHM6Ly9naXRodWIuY29tL3RpZmYpCgogQ29weXJpZ2h0IChDKSAyMDEyIFhJTkcgQUcKIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoTUlUKQoKIFJhbmd5LCBhIGNyb3NzLWJyb3dzZXIgSmF2YVNjcmlwdCByYW5nZSBhbmQgc2VsZWN0aW9uIGxpYnJhcnkKIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9yYW5neS8KCiBDb3B5cmlnaHQgMjAxMSwgVGltIERvd24KIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KIFZlcnNpb246IDEuMi4yCiBCdWlsZCBkYXRlOiAxMyBOb3ZlbWJlciAyMDExCiovCnZhciB3eXNpaHRtbDU9e3ZlcnNpb246IjAuMy4wIixjb21tYW5kczp7fSxkb206e30scXVpcmtzOnt9LHRvb2xiYXI6e30sbGFuZzp7fSxzZWxlY3Rpb246e30sdmlld3M6e30sSU5WSVNJQkxFX1NQQUNFOiJcdWZlZmYiLEVNUFRZX0ZVTkNUSU9OOmZ1bmN0aW9uKCl7fSxFTEVNRU5UX05PREU6MSxURVhUX05PREU6MyxCQUNLU1BBQ0VfS0VZOjgsRU5URVJfS0VZOjEzLEVTQ0FQRV9LRVk6MjcsU1BBQ0VfS0VZOjMyLERFTEVURV9LRVk6NDZ9Owp3aW5kb3cucmFuZ3k9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKGEsYil7dmFyIGM9dHlwZW9mIGFbYl07cmV0dXJuIGM9PWt8fCEhKGM9PWgmJmFbYl0pfHwidW5rbm93biI9PWN9ZnVuY3Rpb24gYyhhLGIpe3JldHVybiEhKHR5cGVvZiBhW2JdPT1oJiZhW2JdKX1mdW5jdGlvbiBhKGEsYil7cmV0dXJuIHR5cGVvZiBhW2JdIT1qfWZ1bmN0aW9uIGQoYSl7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7Zm9yKHZhciBkPWMubGVuZ3RoO2QtLTspaWYoIWEoYixjW2RdKSlyZXR1cm4hMTtyZXR1cm4hMH19ZnVuY3Rpb24gZShhKXtyZXR1cm4gYSYmbShhLHIpJiZ4KGEscSl9ZnVuY3Rpb24gZihhKXt3aW5kb3cuYWxlcnQoIlJhbmd5IG5vdCBzdXBwb3J0ZWQgaW4geW91ciBicm93c2VyLiBSZWFzb246ICIrYSk7by5pbml0aWFsaXplZD0hMDtvLnN1cHBvcnRlZD0hMX1mdW5jdGlvbiBnKCl7aWYoIW8uaW5pdGlhbGl6ZWQpe3ZhciBhLGQ9ITEsaD0hMTtiKGRvY3VtZW50LCJjcmVhdGVSYW5nZSIpJiYKKGE9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxtKGEscCkmJngoYSxuKSYmKGQ9ITApLGEuZGV0YWNoKCkpO2lmKChhPWMoZG9jdW1lbnQsImJvZHkiKT9kb2N1bWVudC5ib2R5OmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0pJiZiKGEsImNyZWF0ZVRleHRSYW5nZSIpKWE9YS5jcmVhdGVUZXh0UmFuZ2UoKSxlKGEpJiYoaD0hMCk7IWQmJiFoJiZmKCJOZWl0aGVyIFJhbmdlIG5vciBUZXh0UmFuZ2UgYXJlIGltcGxlbWVudGVkIik7by5pbml0aWFsaXplZD0hMDtvLmZlYXR1cmVzPXtpbXBsZW1lbnRzRG9tUmFuZ2U6ZCxpbXBsZW1lbnRzVGV4dFJhbmdlOmh9O2Q9dy5jb25jYXQoeik7aD0wO2ZvcihhPWQubGVuZ3RoO2g8YTsrK2gpdHJ5e2RbaF0obyl9Y2F0Y2goail7Yyh3aW5kb3csImNvbnNvbGUiKSYmYih3aW5kb3cuY29uc29sZSwibG9nIikmJndpbmRvdy5jb25zb2xlLmxvZygiSW5pdCBsaXN0ZW5lciB0aHJldyBhbiBleGNlcHRpb24uIENvbnRpbnVpbmcuIiwKail9fX1mdW5jdGlvbiBpKGEpe3RoaXMubmFtZT1hO3RoaXMuc3VwcG9ydGVkPXRoaXMuaW5pdGlhbGl6ZWQ9ITF9dmFyIGg9Im9iamVjdCIsaz0iZnVuY3Rpb24iLGo9InVuZGVmaW5lZCIsbj0ic3RhcnRDb250YWluZXIgc3RhcnRPZmZzZXQgZW5kQ29udGFpbmVyIGVuZE9mZnNldCBjb2xsYXBzZWQgY29tbW9uQW5jZXN0b3JDb250YWluZXIgU1RBUlRfVE9fU1RBUlQgU1RBUlRfVE9fRU5EIEVORF9UT19TVEFSVCBFTkRfVE9fRU5EIi5zcGxpdCgiICIpLHA9InNldFN0YXJ0IHNldFN0YXJ0QmVmb3JlIHNldFN0YXJ0QWZ0ZXIgc2V0RW5kIHNldEVuZEJlZm9yZSBzZXRFbmRBZnRlciBjb2xsYXBzZSBzZWxlY3ROb2RlIHNlbGVjdE5vZGVDb250ZW50cyBjb21wYXJlQm91bmRhcnlQb2ludHMgZGVsZXRlQ29udGVudHMgZXh0cmFjdENvbnRlbnRzIGNsb25lQ29udGVudHMgaW5zZXJ0Tm9kZSBzdXJyb3VuZENvbnRlbnRzIGNsb25lUmFuZ2UgdG9TdHJpbmcgZGV0YWNoIi5zcGxpdCgiICIpLApxPSJib3VuZGluZ0hlaWdodCBib3VuZGluZ0xlZnQgYm91bmRpbmdUb3AgYm91bmRpbmdXaWR0aCBodG1sVGV4dCB0ZXh0Ii5zcGxpdCgiICIpLHI9ImNvbGxhcHNlIGNvbXBhcmVFbmRQb2ludHMgZHVwbGljYXRlIGdldEJvb2ttYXJrIG1vdmVUb0Jvb2ttYXJrIG1vdmVUb0VsZW1lbnRUZXh0IHBhcmVudEVsZW1lbnQgcGFzdGVIVE1MIHNlbGVjdCBzZXRFbmRQb2ludCBnZXRCb3VuZGluZ0NsaWVudFJlY3QiLnNwbGl0KCIgIiksbT1kKGIpLHM9ZChjKSx4PWQoYSksbz17dmVyc2lvbjoiMS4yLjIiLGluaXRpYWxpemVkOiExLHN1cHBvcnRlZDohMCx1dGlsOntpc0hvc3RNZXRob2Q6Yixpc0hvc3RPYmplY3Q6Yyxpc0hvc3RQcm9wZXJ0eTphLGFyZUhvc3RNZXRob2RzOm0sYXJlSG9zdE9iamVjdHM6cyxhcmVIb3N0UHJvcGVydGllczp4LGlzVGV4dFJhbmdlOmV9LGZlYXR1cmVzOnt9LG1vZHVsZXM6e30sY29uZmlnOnthbGVydE9uV2FybjohMSxwcmVmZXJUZXh0UmFuZ2U6ITF9fTsKby5mYWlsPWY7by53YXJuPWZ1bmN0aW9uKGEpe2E9IlJhbmd5IHdhcm5pbmc6ICIrYTtvLmNvbmZpZy5hbGVydE9uV2Fybj93aW5kb3cuYWxlcnQoYSk6dHlwZW9mIHdpbmRvdy5jb25zb2xlIT1qJiZ0eXBlb2Ygd2luZG93LmNvbnNvbGUubG9nIT1qJiZ3aW5kb3cuY29uc29sZS5sb2coYSl9Oyh7fSkuaGFzT3duUHJvcGVydHk/by51dGlsLmV4dGVuZD1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYyBpbiBiKWIuaGFzT3duUHJvcGVydHkoYykmJihhW2NdPWJbY10pfTpmKCJoYXNPd25Qcm9wZXJ0eSBub3Qgc3VwcG9ydGVkIik7dmFyIHo9W10sdz1bXTtvLmluaXQ9ZztvLmFkZEluaXRMaXN0ZW5lcj1mdW5jdGlvbihhKXtvLmluaXRpYWxpemVkP2Eobyk6ei5wdXNoKGEpfTt2YXIgeT1bXTtvLmFkZENyZWF0ZU1pc3NpbmdOYXRpdmVBcGlMaXN0ZW5lcj1mdW5jdGlvbihhKXt5LnB1c2goYSl9O28uY3JlYXRlTWlzc2luZ05hdGl2ZUFwaT1mdW5jdGlvbihhKXthPWF8fHdpbmRvdztnKCk7CmZvcih2YXIgYj0wLGM9eS5sZW5ndGg7YjxjOysrYil5W2JdKGEpfTtpLnByb3RvdHlwZS5mYWlsPWZ1bmN0aW9uKGEpe3RoaXMuaW5pdGlhbGl6ZWQ9ITA7dGhpcy5zdXBwb3J0ZWQ9ITE7dGhyb3cgRXJyb3IoIk1vZHVsZSAnIit0aGlzLm5hbWUrIicgZmFpbGVkIHRvIGxvYWQ6ICIrYSk7fTtpLnByb3RvdHlwZS53YXJuPWZ1bmN0aW9uKGEpe28ud2FybigiTW9kdWxlICIrdGhpcy5uYW1lKyI6ICIrYSl9O2kucHJvdG90eXBlLmNyZWF0ZUVycm9yPWZ1bmN0aW9uKGEpe3JldHVybiBFcnJvcigiRXJyb3IgaW4gUmFuZ3kgIit0aGlzLm5hbWUrIiBtb2R1bGU6ICIrYSl9O28uY3JlYXRlTW9kdWxlPWZ1bmN0aW9uKGEsYil7dmFyIGM9bmV3IGkoYSk7by5tb2R1bGVzW2FdPWM7dy5wdXNoKGZ1bmN0aW9uKGEpe2IoYSxjKTtjLmluaXRpYWxpemVkPSEwO2Muc3VwcG9ydGVkPSEwfSl9O28ucmVxdWlyZU1vZHVsZXM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aCxkLGg7YjwKYzsrK2Ipe2g9YVtiXTtkPW8ubW9kdWxlc1toXTtpZighZHx8IShkIGluc3RhbmNlb2YgaSkpdGhyb3cgRXJyb3IoIk1vZHVsZSAnIitoKyInIG5vdCBmb3VuZCIpO2lmKCFkLnN1cHBvcnRlZCl0aHJvdyBFcnJvcigiTW9kdWxlICciK2grIicgbm90IHN1cHBvcnRlZCIpO319O3ZhciBBPSExLHM9ZnVuY3Rpb24oKXtBfHwoQT0hMCxvLmluaXRpYWxpemVkfHxnKCkpfTtpZih0eXBlb2Ygd2luZG93PT1qKWYoIk5vIHdpbmRvdyBmb3VuZCIpO2Vsc2UgaWYodHlwZW9mIGRvY3VtZW50PT1qKWYoIk5vIGRvY3VtZW50IGZvdW5kIik7ZWxzZSByZXR1cm4gYihkb2N1bWVudCwiYWRkRXZlbnRMaXN0ZW5lciIpJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixzLCExKSxiKHdpbmRvdywiYWRkRXZlbnRMaXN0ZW5lciIpP3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixzLCExKTpiKHdpbmRvdywiYXR0YWNoRXZlbnQiKT93aW5kb3cuYXR0YWNoRXZlbnQoIm9ubG9hZCIsCnMpOmYoIldpbmRvdyBkb2VzIG5vdCBoYXZlIHJlcXVpcmVkIGFkZEV2ZW50TGlzdGVuZXIgb3IgYXR0YWNoRXZlbnQgbWV0aG9kIiksb30oKTsKcmFuZ3kuY3JlYXRlTW9kdWxlKCJEb21VdGlsIixmdW5jdGlvbihiLGMpe2Z1bmN0aW9uIGEoYSl7Zm9yKHZhciBiPTA7YT1hLnByZXZpb3VzU2libGluZzspYisrO3JldHVybiBifWZ1bmN0aW9uIGQoYSxiKXt2YXIgYz1bXSxkO2ZvcihkPWE7ZDtkPWQucGFyZW50Tm9kZSljLnB1c2goZCk7Zm9yKGQ9YjtkO2Q9ZC5wYXJlbnROb2RlKWlmKG0oYyxkKSlyZXR1cm4gZDtyZXR1cm4gbnVsbH1mdW5jdGlvbiBlKGEsYixjKXtmb3IoYz1jP2E6YS5wYXJlbnROb2RlO2M7KXthPWMucGFyZW50Tm9kZTtpZihhPT09YilyZXR1cm4gYztjPWF9cmV0dXJuIG51bGx9ZnVuY3Rpb24gZihhKXthPWEubm9kZVR5cGU7cmV0dXJuIDM9PWF8fDQ9PWF8fDg9PWF9ZnVuY3Rpb24gZyhhLGIpe3ZhciBjPWIubmV4dFNpYmxpbmcsZD1iLnBhcmVudE5vZGU7Yz9kLmluc2VydEJlZm9yZShhLGMpOmQuYXBwZW5kQ2hpbGQoYSk7cmV0dXJuIGF9ZnVuY3Rpb24gaShhKXtpZig5PT1hLm5vZGVUeXBlKXJldHVybiBhOwppZih0eXBlb2YgYS5vd25lckRvY3VtZW50IT1wKXJldHVybiBhLm93bmVyRG9jdW1lbnQ7aWYodHlwZW9mIGEuZG9jdW1lbnQhPXApcmV0dXJuIGEuZG9jdW1lbnQ7aWYoYS5wYXJlbnROb2RlKXJldHVybiBpKGEucGFyZW50Tm9kZSk7dGhyb3cgRXJyb3IoImdldERvY3VtZW50OiBubyBkb2N1bWVudCBmb3VuZCBmb3Igbm9kZSIpO31mdW5jdGlvbiBoKGEpe3JldHVybiFhPyJbTm8gbm9kZV0iOmYoYSk/JyInK2EuZGF0YSsnIic6MT09YS5ub2RlVHlwZT8iPCIrYS5ub2RlTmFtZSsoYS5pZD8nIGlkPSInK2EuaWQrJyInOiIiKSsiPlsiK2EuY2hpbGROb2Rlcy5sZW5ndGgrIl0iOmEubm9kZU5hbWV9ZnVuY3Rpb24gayhhKXt0aGlzLl9uZXh0PXRoaXMucm9vdD1hfWZ1bmN0aW9uIGooYSxiKXt0aGlzLm5vZGU9YTt0aGlzLm9mZnNldD1ifWZ1bmN0aW9uIG4oYSl7dGhpcy5jb2RlPXRoaXNbYV07dGhpcy5jb2RlTmFtZT1hO3RoaXMubWVzc2FnZT0iRE9NRXhjZXB0aW9uOiAiK3RoaXMuY29kZU5hbWV9CnZhciBwPSJ1bmRlZmluZWQiLHE9Yi51dGlsO3EuYXJlSG9zdE1ldGhvZHMoZG9jdW1lbnQsWyJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiY3JlYXRlRWxlbWVudCIsImNyZWF0ZVRleHROb2RlIl0pfHxjLmZhaWwoImRvY3VtZW50IG1pc3NpbmcgYSBOb2RlIGNyZWF0aW9uIG1ldGhvZCIpO3EuaXNIb3N0TWV0aG9kKGRvY3VtZW50LCJnZXRFbGVtZW50c0J5VGFnTmFtZSIpfHxjLmZhaWwoImRvY3VtZW50IG1pc3NpbmcgZ2V0RWxlbWVudHNCeVRhZ05hbWUgbWV0aG9kIik7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cS5hcmVIb3N0TWV0aG9kcyhyLFsiaW5zZXJ0QmVmb3JlIiwiYXBwZW5kQ2hpbGQiLCJjbG9uZU5vZGUiXSl8fGMuZmFpbCgiSW5jb21wbGV0ZSBFbGVtZW50IGltcGxlbWVudGF0aW9uIik7cS5pc0hvc3RQcm9wZXJ0eShyLCJpbm5lckhUTUwiKXx8Yy5mYWlsKCJFbGVtZW50IGlzIG1pc3NpbmcgaW5uZXJIVE1MIHByb3BlcnR5Iik7cj1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgidGVzdCIpOwpxLmFyZUhvc3RNZXRob2RzKHIsWyJzcGxpdFRleHQiLCJkZWxldGVEYXRhIiwiaW5zZXJ0RGF0YSIsImFwcGVuZERhdGEiLCJjbG9uZU5vZGUiXSl8fGMuZmFpbCgiSW5jb21wbGV0ZSBUZXh0IE5vZGUgaW1wbGVtZW50YXRpb24iKTt2YXIgbT1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1hLmxlbmd0aDtjLS07KWlmKGFbY109PT1iKXJldHVybiEwO3JldHVybiExfTtrLnByb3RvdHlwZT17X2N1cnJlbnQ6bnVsbCxoYXNOZXh0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9uZXh0fSxuZXh0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fY3VycmVudD10aGlzLl9uZXh0LGI7aWYodGhpcy5fY3VycmVudCl7Yj1hLmZpcnN0Q2hpbGQ7aWYoIWIpZm9yKGI9bnVsbDthIT09dGhpcy5yb290JiYhKGI9YS5uZXh0U2libGluZyk7KWE9YS5wYXJlbnROb2RlO3RoaXMuX25leHQ9Yn1yZXR1cm4gdGhpcy5fY3VycmVudH0sZGV0YWNoOmZ1bmN0aW9uKCl7dGhpcy5fY3VycmVudD10aGlzLl9uZXh0PXRoaXMucm9vdD0KbnVsbH19O2oucHJvdG90eXBlPXtlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZT09PWEubm9kZSZ0aGlzLm9mZnNldD09YS5vZmZzZXR9LGluc3BlY3Q6ZnVuY3Rpb24oKXtyZXR1cm4iW0RvbVBvc2l0aW9uKCIraCh0aGlzLm5vZGUpKyI6Iit0aGlzLm9mZnNldCsiKV0ifX07bi5wcm90b3R5cGU9e0lOREVYX1NJWkVfRVJSOjEsSElFUkFSQ0hZX1JFUVVFU1RfRVJSOjMsV1JPTkdfRE9DVU1FTlRfRVJSOjQsTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOjcsTk9UX0ZPVU5EX0VSUjo4LE5PVF9TVVBQT1JURURfRVJSOjksSU5WQUxJRF9TVEFURV9FUlI6MTF9O24ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZX07Yi5kb209e2FycmF5Q29udGFpbnM6bSxpc0h0bWxOYW1lc3BhY2U6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIHR5cGVvZiBhLm5hbWVzcGFjZVVSST09cHx8bnVsbD09PShiPWEubmFtZXNwYWNlVVJJKXx8Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPT0KYn0scGFyZW50RWxlbWVudDpmdW5jdGlvbihhKXthPWEucGFyZW50Tm9kZTtyZXR1cm4gMT09YS5ub2RlVHlwZT9hOm51bGx9LGdldE5vZGVJbmRleDphLGdldE5vZGVMZW5ndGg6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIGYoYSk/YS5sZW5ndGg6KGI9YS5jaGlsZE5vZGVzKT9iLmxlbmd0aDowfSxnZXRDb21tb25BbmNlc3RvcjpkLGlzQW5jZXN0b3JPZjpmdW5jdGlvbihhLGIsYyl7Zm9yKGI9Yz9iOmIucGFyZW50Tm9kZTtiOyl7aWYoYj09PWEpcmV0dXJuITA7Yj1iLnBhcmVudE5vZGV9cmV0dXJuITF9LGdldENsb3Nlc3RBbmNlc3RvckluOmUsaXNDaGFyYWN0ZXJEYXRhTm9kZTpmLGluc2VydEFmdGVyOmcsc3BsaXREYXRhTm9kZTpmdW5jdGlvbihhLGIpe3ZhciBjPWEuY2xvbmVOb2RlKCExKTtjLmRlbGV0ZURhdGEoMCxiKTthLmRlbGV0ZURhdGEoYixhLmxlbmd0aC1iKTtnKGMsYSk7cmV0dXJuIGN9LGdldERvY3VtZW50OmksZ2V0V2luZG93OmZ1bmN0aW9uKGEpe2E9aShhKTsKaWYodHlwZW9mIGEuZGVmYXVsdFZpZXchPXApcmV0dXJuIGEuZGVmYXVsdFZpZXc7aWYodHlwZW9mIGEucGFyZW50V2luZG93IT1wKXJldHVybiBhLnBhcmVudFdpbmRvdzt0aHJvdyBFcnJvcigiQ2Fubm90IGdldCBhIHdpbmRvdyBvYmplY3QgZm9yIG5vZGUiKTt9LGdldElmcmFtZVdpbmRvdzpmdW5jdGlvbihhKXtpZih0eXBlb2YgYS5jb250ZW50V2luZG93IT1wKXJldHVybiBhLmNvbnRlbnRXaW5kb3c7aWYodHlwZW9mIGEuY29udGVudERvY3VtZW50IT1wKXJldHVybiBhLmNvbnRlbnREb2N1bWVudC5kZWZhdWx0Vmlldzt0aHJvdyBFcnJvcigiZ2V0SWZyYW1lV2luZG93OiBObyBXaW5kb3cgb2JqZWN0IGZvdW5kIGZvciBpZnJhbWUgZWxlbWVudCIpO30sZ2V0SWZyYW1lRG9jdW1lbnQ6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGEuY29udGVudERvY3VtZW50IT1wKXJldHVybiBhLmNvbnRlbnREb2N1bWVudDtpZih0eXBlb2YgYS5jb250ZW50V2luZG93IT1wKXJldHVybiBhLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7CnRocm93IEVycm9yKCJnZXRJZnJhbWVXaW5kb3c6IE5vIERvY3VtZW50IG9iamVjdCBmb3VuZCBmb3IgaWZyYW1lIGVsZW1lbnQiKTt9LGdldEJvZHk6ZnVuY3Rpb24oYSl7cmV0dXJuIHEuaXNIb3N0T2JqZWN0KGEsImJvZHkiKT9hLmJvZHk6YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdfSxnZXRSb290Q29udGFpbmVyOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYjtiPWEucGFyZW50Tm9kZTspYT1iO3JldHVybiBhfSxjb21wYXJlUG9pbnRzOmZ1bmN0aW9uKGIsYyxoLGope3ZhciBrO2lmKGI9PWgpcmV0dXJuIGM9PT1qPzA6YzxqPy0xOjE7aWYoaz1lKGgsYiwhMCkpcmV0dXJuIGM8PWEoayk/LTE6MTtpZihrPWUoYixoLCEwKSlyZXR1cm4gYShrKTxqPy0xOjE7Yz1kKGIsaCk7Yj1iPT09Yz9jOmUoYixjLCEwKTtoPWg9PT1jP2M6ZShoLGMsITApO2lmKGI9PT1oKXRocm93IEVycm9yKCJjb21wYXJlUG9pbnRzIGdvdCB0byBjYXNlIDQgYW5kIGNoaWxkQSBhbmQgY2hpbGRCIGFyZSB0aGUgc2FtZSEiKTsKZm9yKGM9Yy5maXJzdENoaWxkO2M7KXtpZihjPT09YilyZXR1cm4tMTtpZihjPT09aClyZXR1cm4gMTtjPWMubmV4dFNpYmxpbmd9dGhyb3cgRXJyb3IoIlNob3VsZCBub3QgYmUgaGVyZSEiKTt9LGluc3BlY3ROb2RlOmgsZnJhZ21lbnRGcm9tTm9kZUNoaWxkcmVuOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1pKGEpLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxjO2M9YS5maXJzdENoaWxkOyliLmFwcGVuZENoaWxkKGMpO3JldHVybiBifSxjcmVhdGVJdGVyYXRvcjpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IGsoYSl9LERvbVBvc2l0aW9uOmp9O2IuRE9NRXhjZXB0aW9uPW59KTsKcmFuZ3kuY3JlYXRlTW9kdWxlKCJEb21SYW5nZSIsZnVuY3Rpb24oYil7ZnVuY3Rpb24gYyhhLGIpe3JldHVybiAzIT1hLm5vZGVUeXBlJiYobC5pc0FuY2VzdG9yT2YoYSxiLnN0YXJ0Q29udGFpbmVyLCEwKXx8bC5pc0FuY2VzdG9yT2YoYSxiLmVuZENvbnRhaW5lciwhMCkpfWZ1bmN0aW9uIGEoYSl7cmV0dXJuIGwuZ2V0RG9jdW1lbnQoYS5zdGFydENvbnRhaW5lcil9ZnVuY3Rpb24gZChhLGIsYyl7aWYoYj1hLl9saXN0ZW5lcnNbYl0pZm9yKHZhciBkPTAsaD1iLmxlbmd0aDtkPGg7KytkKWJbZF0uY2FsbChhLHt0YXJnZXQ6YSxhcmdzOmN9KX1mdW5jdGlvbiBlKGEpe3JldHVybiBuZXcgdShhLnBhcmVudE5vZGUsbC5nZXROb2RlSW5kZXgoYSkpfWZ1bmN0aW9uIGYoYSl7cmV0dXJuIG5ldyB1KGEucGFyZW50Tm9kZSxsLmdldE5vZGVJbmRleChhKSsxKX1mdW5jdGlvbiBnKGEsYixjKXt2YXIgZD0xMT09YS5ub2RlVHlwZT9hLmZpcnN0Q2hpbGQ6YTtsLmlzQ2hhcmFjdGVyRGF0YU5vZGUoYik/CmM9PWIubGVuZ3RoP2wuaW5zZXJ0QWZ0ZXIoYSxiKTpiLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsMD09Yz9iOmwuc3BsaXREYXRhTm9kZShiLGMpKTpjPj1iLmNoaWxkTm9kZXMubGVuZ3RoP2IuYXBwZW5kQ2hpbGQoYSk6Yi5pbnNlcnRCZWZvcmUoYSxiLmNoaWxkTm9kZXNbY10pO3JldHVybiBkfWZ1bmN0aW9uIGkoYil7Zm9yKHZhciBjLGQsaD1hKGIucmFuZ2UpLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtkPWIubmV4dCgpOyl7Yz1iLmlzUGFydGlhbGx5U2VsZWN0ZWRTdWJ0cmVlKCk7ZD1kLmNsb25lTm9kZSghYyk7YyYmKGM9Yi5nZXRTdWJ0cmVlSXRlcmF0b3IoKSxkLmFwcGVuZENoaWxkKGkoYykpLGMuZGV0YWNoKCEwKSk7aWYoMTA9PWQubm9kZVR5cGUpdGhyb3cgbmV3IEIoIkhJRVJBUkNIWV9SRVFVRVNUX0VSUiIpO2guYXBwZW5kQ2hpbGQoZCl9cmV0dXJuIGh9ZnVuY3Rpb24gaChhLGIsYyl7Zm9yKHZhciBkLGUsYz1jfHx7c3RvcDohMX07ZD1hLm5leHQoKTspaWYoYS5pc1BhcnRpYWxseVNlbGVjdGVkU3VidHJlZSgpKWlmKCExPT09CmIoZCkpe2Muc3RvcD0hMDticmVha31lbHNle2lmKGQ9YS5nZXRTdWJ0cmVlSXRlcmF0b3IoKSxoKGQsYixjKSxkLmRldGFjaCghMCksYy5zdG9wKWJyZWFrfWVsc2UgZm9yKGQ9bC5jcmVhdGVJdGVyYXRvcihkKTtlPWQubmV4dCgpOylpZighMT09PWIoZSkpe2Muc3RvcD0hMDtyZXR1cm59fWZ1bmN0aW9uIGsoYSl7Zm9yKHZhciBiO2EubmV4dCgpOylhLmlzUGFydGlhbGx5U2VsZWN0ZWRTdWJ0cmVlKCk/KGI9YS5nZXRTdWJ0cmVlSXRlcmF0b3IoKSxrKGIpLGIuZGV0YWNoKCEwKSk6YS5yZW1vdmUoKX1mdW5jdGlvbiBqKGIpe2Zvcih2YXIgYyxkPWEoYi5yYW5nZSkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg7Yz1iLm5leHQoKTspe2IuaXNQYXJ0aWFsbHlTZWxlY3RlZFN1YnRyZWUoKT8oYz1jLmNsb25lTm9kZSghMSksaD1iLmdldFN1YnRyZWVJdGVyYXRvcigpLGMuYXBwZW5kQ2hpbGQoaihoKSksaC5kZXRhY2goITApKTpiLnJlbW92ZSgpO2lmKDEwPT1jLm5vZGVUeXBlKXRocm93IG5ldyBCKCJISUVSQVJDSFlfUkVRVUVTVF9FUlIiKTsKZC5hcHBlbmRDaGlsZChjKX1yZXR1cm4gZH1mdW5jdGlvbiBuKGEsYixjKXt2YXIgZD0hKCFifHwhYi5sZW5ndGgpLGUsaj0hIWM7ZCYmKGU9UmVnRXhwKCJeKCIrYi5qb2luKCJ8IikrIikkIikpO3ZhciBrPVtdO2gobmV3IHEoYSwhMSksZnVuY3Rpb24oYSl7KCFkfHxlLnRlc3QoYS5ub2RlVHlwZSkpJiYoIWp8fGMoYSkpJiZrLnB1c2goYSl9KTtyZXR1cm4ga31mdW5jdGlvbiBwKGEpe3JldHVybiJbIisoInVuZGVmaW5lZCI9PXR5cGVvZiBhLmdldE5hbWU/IlJhbmdlIjphLmdldE5hbWUoKSkrIigiK2wuaW5zcGVjdE5vZGUoYS5zdGFydENvbnRhaW5lcikrIjoiK2Euc3RhcnRPZmZzZXQrIiwgIitsLmluc3BlY3ROb2RlKGEuZW5kQ29udGFpbmVyKSsiOiIrYS5lbmRPZmZzZXQrIildIn1mdW5jdGlvbiBxKGEsYil7dGhpcy5yYW5nZT1hO3RoaXMuY2xvbmVQYXJ0aWFsbHlTZWxlY3RlZFRleHROb2Rlcz1iO2lmKCFhLmNvbGxhcHNlZCl7dGhpcy5zYz1hLnN0YXJ0Q29udGFpbmVyOwp0aGlzLnNvPWEuc3RhcnRPZmZzZXQ7dGhpcy5lYz1hLmVuZENvbnRhaW5lcjt0aGlzLmVvPWEuZW5kT2Zmc2V0O3ZhciBjPWEuY29tbW9uQW5jZXN0b3JDb250YWluZXI7dGhpcy5zYz09PXRoaXMuZWMmJmwuaXNDaGFyYWN0ZXJEYXRhTm9kZSh0aGlzLnNjKT8odGhpcy5pc1NpbmdsZUNoYXJhY3RlckRhdGFOb2RlPSEwLHRoaXMuX2ZpcnN0PXRoaXMuX2xhc3Q9dGhpcy5fbmV4dD10aGlzLnNjKToodGhpcy5fZmlyc3Q9dGhpcy5fbmV4dD10aGlzLnNjPT09YyYmIWwuaXNDaGFyYWN0ZXJEYXRhTm9kZSh0aGlzLnNjKT90aGlzLnNjLmNoaWxkTm9kZXNbdGhpcy5zb106bC5nZXRDbG9zZXN0QW5jZXN0b3JJbih0aGlzLnNjLGMsITApLHRoaXMuX2xhc3Q9dGhpcy5lYz09PWMmJiFsLmlzQ2hhcmFjdGVyRGF0YU5vZGUodGhpcy5lYyk/dGhpcy5lYy5jaGlsZE5vZGVzW3RoaXMuZW8tMV06bC5nZXRDbG9zZXN0QW5jZXN0b3JJbih0aGlzLmVjLGMsITApKX19ZnVuY3Rpb24gcihhKXt0aGlzLmNvZGU9CnRoaXNbYV07dGhpcy5jb2RlTmFtZT1hO3RoaXMubWVzc2FnZT0iUmFuZ2VFeGNlcHRpb246ICIrdGhpcy5jb2RlTmFtZX1mdW5jdGlvbiBtKGEsYixjKXt0aGlzLm5vZGVzPW4oYSxiLGMpO3RoaXMuX25leHQ9dGhpcy5ub2Rlc1swXTt0aGlzLl9wb3NpdGlvbj0wfWZ1bmN0aW9uIHMoYSl7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7Zm9yKHZhciBkLGg9Yz9iOmIucGFyZW50Tm9kZTtoOyl7ZD1oLm5vZGVUeXBlO2lmKGwuYXJyYXlDb250YWlucyhhLGQpKXJldHVybiBoO2g9aC5wYXJlbnROb2RlfXJldHVybiBudWxsfX1mdW5jdGlvbiB4KGEsYil7aWYoJChhLGIpKXRocm93IG5ldyByKCJJTlZBTElEX05PREVfVFlQRV9FUlIiKTt9ZnVuY3Rpb24gbyhhKXtpZighYS5zdGFydENvbnRhaW5lcil0aHJvdyBuZXcgQigiSU5WQUxJRF9TVEFURV9FUlIiKTt9ZnVuY3Rpb24geihhLGIpe2lmKCFsLmFycmF5Q29udGFpbnMoYixhLm5vZGVUeXBlKSl0aHJvdyBuZXcgcigiSU5WQUxJRF9OT0RFX1RZUEVfRVJSIik7Cn1mdW5jdGlvbiB3KGEsYil7aWYoMD5ifHxiPihsLmlzQ2hhcmFjdGVyRGF0YU5vZGUoYSk/YS5sZW5ndGg6YS5jaGlsZE5vZGVzLmxlbmd0aCkpdGhyb3cgbmV3IEIoIklOREVYX1NJWkVfRVJSIik7fWZ1bmN0aW9uIHkoYSxiKXtpZihPKGEsITApIT09TyhiLCEwKSl0aHJvdyBuZXcgQigiV1JPTkdfRE9DVU1FTlRfRVJSIik7fWZ1bmN0aW9uIEEoYSl7aWYoYWEoYSwhMCkpdGhyb3cgbmV3IEIoIk5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiIpO31mdW5jdGlvbiB0KGEsYil7aWYoIWEpdGhyb3cgbmV3IEIoYik7fWZ1bmN0aW9uIHYoYSl7byhhKTtpZighbC5hcnJheUNvbnRhaW5zKEcsYS5zdGFydENvbnRhaW5lci5ub2RlVHlwZSkmJiFPKGEuc3RhcnRDb250YWluZXIsITApfHwhbC5hcnJheUNvbnRhaW5zKEcsYS5lbmRDb250YWluZXIubm9kZVR5cGUpJiYhTyhhLmVuZENvbnRhaW5lciwhMCl8fCEoYS5zdGFydE9mZnNldDw9KGwuaXNDaGFyYWN0ZXJEYXRhTm9kZShhLnN0YXJ0Q29udGFpbmVyKT8KYS5zdGFydENvbnRhaW5lci5sZW5ndGg6YS5zdGFydENvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCkpfHwhKGEuZW5kT2Zmc2V0PD0obC5pc0NoYXJhY3RlckRhdGFOb2RlKGEuZW5kQ29udGFpbmVyKT9hLmVuZENvbnRhaW5lci5sZW5ndGg6YS5lbmRDb250YWluZXIuY2hpbGROb2Rlcy5sZW5ndGgpKSl0aHJvdyBFcnJvcigiUmFuZ2UgZXJyb3I6IFJhbmdlIGlzIG5vIGxvbmdlciB2YWxpZCBhZnRlciBET00gbXV0YXRpb24gKCIrYS5pbnNwZWN0KCkrIikiKTt9ZnVuY3Rpb24gRCgpe31mdW5jdGlvbiBLKGEpe2EuU1RBUlRfVE9fU1RBUlQ9UTthLlNUQVJUX1RPX0VORD1VO2EuRU5EX1RPX0VORD1iYTthLkVORF9UT19TVEFSVD1WO2EuTk9ERV9CRUZPUkU9VzthLk5PREVfQUZURVI9WDthLk5PREVfQkVGT1JFX0FORF9BRlRFUj1ZO2EuTk9ERV9JTlNJREU9Un1mdW5jdGlvbiBGKGEpe0soYSk7SyhhLnByb3RvdHlwZSl9ZnVuY3Rpb24gRShhLGIpe3JldHVybiBmdW5jdGlvbigpe3YodGhpcyk7CnZhciBjPXRoaXMuc3RhcnRDb250YWluZXIsZD10aGlzLnN0YXJ0T2Zmc2V0LGU9dGhpcy5jb21tb25BbmNlc3RvckNvbnRhaW5lcixqPW5ldyBxKHRoaXMsITApO2MhPT1lJiYoYz1sLmdldENsb3Nlc3RBbmNlc3RvckluKGMsZSwhMCksZD1mKGMpLGM9ZC5ub2RlLGQ9ZC5vZmZzZXQpO2goaixBKTtqLnJlc2V0KCk7ZT1hKGopO2ouZGV0YWNoKCk7Yih0aGlzLGMsZCxjLGQpO3JldHVybiBlfX1mdW5jdGlvbiBJKGEsZCxoKXtmdW5jdGlvbiBnKGEsYil7cmV0dXJuIGZ1bmN0aW9uKGMpe28odGhpcyk7eihjLEwpO3ooTShjKSxHKTtjPShhP2U6ZikoYyk7KGI/aTpuKSh0aGlzLGMubm9kZSxjLm9mZnNldCl9fWZ1bmN0aW9uIGkoYSxiLGMpe3ZhciBoPWEuZW5kQ29udGFpbmVyLGU9YS5lbmRPZmZzZXQ7aWYoYiE9PWEuc3RhcnRDb250YWluZXJ8fGMhPT1hLnN0YXJ0T2Zmc2V0KXtpZihNKGIpIT1NKGgpfHwxPT1sLmNvbXBhcmVQb2ludHMoYixjLGgsZSkpaD1iLGU9YztkKGEsYixjLApoLGUpfX1mdW5jdGlvbiBuKGEsYixjKXt2YXIgaD1hLnN0YXJ0Q29udGFpbmVyLGU9YS5zdGFydE9mZnNldDtpZihiIT09YS5lbmRDb250YWluZXJ8fGMhPT1hLmVuZE9mZnNldCl7aWYoTShiKSE9TShoKXx8LTE9PWwuY29tcGFyZVBvaW50cyhiLGMsaCxlKSloPWIsZT1jO2QoYSxoLGUsYixjKX19YS5wcm90b3R5cGU9bmV3IEQ7Yi51dGlsLmV4dGVuZChhLnByb3RvdHlwZSx7c2V0U3RhcnQ6ZnVuY3Rpb24oYSxiKXtvKHRoaXMpO3goYSwhMCk7dyhhLGIpO2kodGhpcyxhLGIpfSxzZXRFbmQ6ZnVuY3Rpb24oYSxiKXtvKHRoaXMpO3goYSwhMCk7dyhhLGIpO24odGhpcyxhLGIpfSxzZXRTdGFydEJlZm9yZTpnKCEwLCEwKSxzZXRTdGFydEFmdGVyOmcoITEsITApLHNldEVuZEJlZm9yZTpnKCEwLCExKSxzZXRFbmRBZnRlcjpnKCExLCExKSxjb2xsYXBzZTpmdW5jdGlvbihhKXt2KHRoaXMpO2E/ZCh0aGlzLHRoaXMuc3RhcnRDb250YWluZXIsdGhpcy5zdGFydE9mZnNldCx0aGlzLnN0YXJ0Q29udGFpbmVyLAp0aGlzLnN0YXJ0T2Zmc2V0KTpkKHRoaXMsdGhpcy5lbmRDb250YWluZXIsdGhpcy5lbmRPZmZzZXQsdGhpcy5lbmRDb250YWluZXIsdGhpcy5lbmRPZmZzZXQpfSxzZWxlY3ROb2RlQ29udGVudHM6ZnVuY3Rpb24oYSl7byh0aGlzKTt4KGEsITApO2QodGhpcyxhLDAsYSxsLmdldE5vZGVMZW5ndGgoYSkpfSxzZWxlY3ROb2RlOmZ1bmN0aW9uKGEpe28odGhpcyk7eChhLCExKTt6KGEsTCk7dmFyIGI9ZShhKSxhPWYoYSk7ZCh0aGlzLGIubm9kZSxiLm9mZnNldCxhLm5vZGUsYS5vZmZzZXQpfSxleHRyYWN0Q29udGVudHM6RShqLGQpLGRlbGV0ZUNvbnRlbnRzOkUoayxkKSxjYW5TdXJyb3VuZENvbnRlbnRzOmZ1bmN0aW9uKCl7dih0aGlzKTtBKHRoaXMuc3RhcnRDb250YWluZXIpO0EodGhpcy5lbmRDb250YWluZXIpO3ZhciBhPW5ldyBxKHRoaXMsITApLGI9YS5fZmlyc3QmJmMoYS5fZmlyc3QsdGhpcyl8fGEuX2xhc3QmJmMoYS5fbGFzdCx0aGlzKTthLmRldGFjaCgpO3JldHVybiFifSwKZGV0YWNoOmZ1bmN0aW9uKCl7aCh0aGlzKX0sc3BsaXRCb3VuZGFyaWVzOmZ1bmN0aW9uKCl7dih0aGlzKTt2YXIgYT10aGlzLnN0YXJ0Q29udGFpbmVyLGI9dGhpcy5zdGFydE9mZnNldCxjPXRoaXMuZW5kQ29udGFpbmVyLGg9dGhpcy5lbmRPZmZzZXQsZT1hPT09YztsLmlzQ2hhcmFjdGVyRGF0YU5vZGUoYykmJigwPGgmJmg8Yy5sZW5ndGgpJiZsLnNwbGl0RGF0YU5vZGUoYyxoKTtsLmlzQ2hhcmFjdGVyRGF0YU5vZGUoYSkmJigwPGImJmI8YS5sZW5ndGgpJiYoYT1sLnNwbGl0RGF0YU5vZGUoYSxiKSxlPyhoLT1iLGM9YSk6Yz09YS5wYXJlbnROb2RlJiZoPj1sLmdldE5vZGVJbmRleChhKSYmaCsrLGI9MCk7ZCh0aGlzLGEsYixjLGgpfSxub3JtYWxpemVCb3VuZGFyaWVzOmZ1bmN0aW9uKCl7dih0aGlzKTt2YXIgYT10aGlzLnN0YXJ0Q29udGFpbmVyLGI9dGhpcy5zdGFydE9mZnNldCxjPXRoaXMuZW5kQ29udGFpbmVyLGg9dGhpcy5lbmRPZmZzZXQsZT1mdW5jdGlvbihhKXt2YXIgYj0KYS5uZXh0U2libGluZztiJiZiLm5vZGVUeXBlPT1hLm5vZGVUeXBlJiYoYz1hLGg9YS5sZW5ndGgsYS5hcHBlbmREYXRhKGIuZGF0YSksYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpKX0saj1mdW5jdGlvbihkKXt2YXIgZT1kLnByZXZpb3VzU2libGluZztpZihlJiZlLm5vZGVUeXBlPT1kLm5vZGVUeXBlKXthPWQ7dmFyIGo9ZC5sZW5ndGg7Yj1lLmxlbmd0aDtkLmluc2VydERhdGEoMCxlLmRhdGEpO2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKTthPT1jPyhoKz1iLGM9YSk6Yz09ZC5wYXJlbnROb2RlJiYoZT1sLmdldE5vZGVJbmRleChkKSxoPT1lPyhjPWQsaD1qKTpoPmUmJmgtLSl9fSxrPSEwO2wuaXNDaGFyYWN0ZXJEYXRhTm9kZShjKT9jLmxlbmd0aD09aCYmZShjKTooMDxoJiYoaz1jLmNoaWxkTm9kZXNbaC0xXSkmJmwuaXNDaGFyYWN0ZXJEYXRhTm9kZShrKSYmZShrKSxrPSF0aGlzLmNvbGxhcHNlZCk7az9sLmlzQ2hhcmFjdGVyRGF0YU5vZGUoYSk/MD09YiYmaihhKToKYjxhLmNoaWxkTm9kZXMubGVuZ3RoJiYoZT1hLmNoaWxkTm9kZXNbYl0pJiZsLmlzQ2hhcmFjdGVyRGF0YU5vZGUoZSkmJmooZSk6KGE9YyxiPWgpO2QodGhpcyxhLGIsYyxoKX0sY29sbGFwc2VUb1BvaW50OmZ1bmN0aW9uKGEsYil7byh0aGlzKTt4KGEsITApO3coYSxiKTsoYSE9PXRoaXMuc3RhcnRDb250YWluZXJ8fGIhPT10aGlzLnN0YXJ0T2Zmc2V0fHxhIT09dGhpcy5lbmRDb250YWluZXJ8fGIhPT10aGlzLmVuZE9mZnNldCkmJmQodGhpcyxhLGIsYSxiKX19KTtGKGEpfWZ1bmN0aW9uIE4oYSl7YS5jb2xsYXBzZWQ9YS5zdGFydENvbnRhaW5lcj09PWEuZW5kQ29udGFpbmVyJiZhLnN0YXJ0T2Zmc2V0PT09YS5lbmRPZmZzZXQ7YS5jb21tb25BbmNlc3RvckNvbnRhaW5lcj1hLmNvbGxhcHNlZD9hLnN0YXJ0Q29udGFpbmVyOmwuZ2V0Q29tbW9uQW5jZXN0b3IoYS5zdGFydENvbnRhaW5lcixhLmVuZENvbnRhaW5lcil9ZnVuY3Rpb24gSihhLGIsYyxoLGUpe3ZhciBqPWEuc3RhcnRDb250YWluZXIhPT0KYnx8YS5zdGFydE9mZnNldCE9PWMsaz1hLmVuZENvbnRhaW5lciE9PWh8fGEuZW5kT2Zmc2V0IT09ZTthLnN0YXJ0Q29udGFpbmVyPWI7YS5zdGFydE9mZnNldD1jO2EuZW5kQ29udGFpbmVyPWg7YS5lbmRPZmZzZXQ9ZTtOKGEpO2QoYSwiYm91bmRhcnljaGFuZ2UiLHtzdGFydE1vdmVkOmosZW5kTW92ZWQ6a30pfWZ1bmN0aW9uIEMoYSl7dGhpcy5zdGFydENvbnRhaW5lcj1hO3RoaXMuc3RhcnRPZmZzZXQ9MDt0aGlzLmVuZENvbnRhaW5lcj1hO3RoaXMuZW5kT2Zmc2V0PTA7dGhpcy5fbGlzdGVuZXJzPXtib3VuZGFyeWNoYW5nZTpbXSxkZXRhY2g6W119O04odGhpcyl9Yi5yZXF1aXJlTW9kdWxlcyhbIkRvbVV0aWwiXSk7dmFyIGw9Yi5kb20sdT1sLkRvbVBvc2l0aW9uLEI9Yi5ET01FeGNlcHRpb247cS5wcm90b3R5cGU9e19jdXJyZW50Om51bGwsX25leHQ6bnVsbCxfZmlyc3Q6bnVsbCxfbGFzdDpudWxsLGlzU2luZ2xlQ2hhcmFjdGVyRGF0YU5vZGU6ITEscmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50PQpudWxsO3RoaXMuX25leHQ9dGhpcy5fZmlyc3R9LGhhc05leHQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX25leHR9LG5leHQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9jdXJyZW50PXRoaXMuX25leHQ7YSYmKHRoaXMuX25leHQ9YSE9PXRoaXMuX2xhc3Q/YS5uZXh0U2libGluZzpudWxsLGwuaXNDaGFyYWN0ZXJEYXRhTm9kZShhKSYmdGhpcy5jbG9uZVBhcnRpYWxseVNlbGVjdGVkVGV4dE5vZGVzJiYoYT09PXRoaXMuZWMmJihhPWEuY2xvbmVOb2RlKCEwKSkuZGVsZXRlRGF0YSh0aGlzLmVvLGEubGVuZ3RoLXRoaXMuZW8pLHRoaXMuX2N1cnJlbnQ9PT10aGlzLnNjJiYoYT1hLmNsb25lTm9kZSghMCkpLmRlbGV0ZURhdGEoMCx0aGlzLnNvKSkpO3JldHVybiBhfSxyZW1vdmU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9jdXJyZW50LGIsYztsLmlzQ2hhcmFjdGVyRGF0YU5vZGUoYSkmJihhPT09dGhpcy5zY3x8YT09PXRoaXMuZWMpPyhiPWE9PT10aGlzLnNjP3RoaXMuc286MCxjPWE9PT0KdGhpcy5lYz90aGlzLmVvOmEubGVuZ3RoLGIhPWMmJmEuZGVsZXRlRGF0YShiLGMtYikpOmEucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpfSxpc1BhcnRpYWxseVNlbGVjdGVkU3VidHJlZTpmdW5jdGlvbigpe3JldHVybiBjKHRoaXMuX2N1cnJlbnQsdGhpcy5yYW5nZSl9LGdldFN1YnRyZWVJdGVyYXRvcjpmdW5jdGlvbigpe3ZhciBiO2lmKHRoaXMuaXNTaW5nbGVDaGFyYWN0ZXJEYXRhTm9kZSliPXRoaXMucmFuZ2UuY2xvbmVSYW5nZSgpLGIuY29sbGFwc2UoKTtlbHNle2I9bmV3IEMoYSh0aGlzLnJhbmdlKSk7dmFyIGM9dGhpcy5fY3VycmVudCxkPWMsaD0wLGU9YyxqPWwuZ2V0Tm9kZUxlbmd0aChjKTtsLmlzQW5jZXN0b3JPZihjLHRoaXMuc2MsITApJiYoZD10aGlzLnNjLGg9dGhpcy5zbyk7bC5pc0FuY2VzdG9yT2YoYyx0aGlzLmVjLCEwKSYmKGU9dGhpcy5lYyxqPXRoaXMuZW8pO0ooYixkLGgsZSxqKX1yZXR1cm4gbmV3IHEoYix0aGlzLmNsb25lUGFydGlhbGx5U2VsZWN0ZWRUZXh0Tm9kZXMpfSwKZGV0YWNoOmZ1bmN0aW9uKGEpe2EmJnRoaXMucmFuZ2UuZGV0YWNoKCk7dGhpcy5yYW5nZT10aGlzLl9jdXJyZW50PXRoaXMuX25leHQ9dGhpcy5fZmlyc3Q9dGhpcy5fbGFzdD10aGlzLnNjPXRoaXMuc289dGhpcy5lYz10aGlzLmVvPW51bGx9fTtyLnByb3RvdHlwZT17QkFEX0JPVU5EQVJZUE9JTlRTX0VSUjoxLElOVkFMSURfTk9ERV9UWVBFX0VSUjoyfTtyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2V9O20ucHJvdG90eXBlPXtfY3VycmVudDpudWxsLGhhc05leHQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX25leHR9LG5leHQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50PXRoaXMuX25leHQ7dGhpcy5fbmV4dD10aGlzLm5vZGVzWysrdGhpcy5fcG9zaXRpb25dO3JldHVybiB0aGlzLl9jdXJyZW50fSxkZXRhY2g6ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50PXRoaXMuX25leHQ9dGhpcy5ub2Rlcz1udWxsfX07dmFyIEw9WzEsMyw0LDUsCjcsOCwxMF0sRz1bMiw5LDExXSxQPVsxLDMsNCw1LDcsOCwxMCwxMV0sSD1bMSwzLDQsNSw3LDhdLE09bC5nZXRSb290Q29udGFpbmVyLE89cyhbOSwxMV0pLGFhPXMoWzUsNiwxMCwxMl0pLCQ9cyhbNiwxMCwxMl0pLFo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxTPSExO3RyeXtaLmlubmVySFRNTD0iPGI+eDwvYj4iLFM9Mz09Wi5maXJzdENoaWxkLm5vZGVUeXBlfWNhdGNoKGNhKXt9Yi5mZWF0dXJlcy5odG1sUGFyc2luZ0NvbmZvcm1zPVM7dmFyIFQ9InN0YXJ0Q29udGFpbmVyIHN0YXJ0T2Zmc2V0IGVuZENvbnRhaW5lciBlbmRPZmZzZXQgY29sbGFwc2VkIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIi5zcGxpdCgiICIpLFE9MCxVPTEsYmE9MixWPTMsVz0wLFg9MSxZPTIsUj0zO0QucHJvdG90eXBlPXthdHRhY2hMaXN0ZW5lcjpmdW5jdGlvbihhLGIpe3RoaXMuX2xpc3RlbmVyc1thXS5wdXNoKGIpfSxjb21wYXJlQm91bmRhcnlQb2ludHM6ZnVuY3Rpb24oYSxiKXt2KHRoaXMpOwp5KHRoaXMuc3RhcnRDb250YWluZXIsYi5zdGFydENvbnRhaW5lcik7dmFyIGM9YT09Vnx8YT09UT8ic3RhcnQiOiJlbmQiLGQ9YT09VXx8YT09UT8ic3RhcnQiOiJlbmQiO3JldHVybiBsLmNvbXBhcmVQb2ludHModGhpc1tjKyJDb250YWluZXIiXSx0aGlzW2MrIk9mZnNldCJdLGJbZCsiQ29udGFpbmVyIl0sYltkKyJPZmZzZXQiXSl9LGluc2VydE5vZGU6ZnVuY3Rpb24oYSl7dih0aGlzKTt6KGEsUCk7QSh0aGlzLnN0YXJ0Q29udGFpbmVyKTtpZihsLmlzQW5jZXN0b3JPZihhLHRoaXMuc3RhcnRDb250YWluZXIsITApKXRocm93IG5ldyBCKCJISUVSQVJDSFlfUkVRVUVTVF9FUlIiKTt0aGlzLnNldFN0YXJ0QmVmb3JlKGcoYSx0aGlzLnN0YXJ0Q29udGFpbmVyLHRoaXMuc3RhcnRPZmZzZXQpKX0sY2xvbmVDb250ZW50czpmdW5jdGlvbigpe3YodGhpcyk7dmFyIGIsYztpZih0aGlzLmNvbGxhcHNlZClyZXR1cm4gYSh0aGlzKS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7aWYodGhpcy5zdGFydENvbnRhaW5lcj09PQp0aGlzLmVuZENvbnRhaW5lciYmbC5pc0NoYXJhY3RlckRhdGFOb2RlKHRoaXMuc3RhcnRDb250YWluZXIpKXJldHVybiBiPXRoaXMuc3RhcnRDb250YWluZXIuY2xvbmVOb2RlKCEwKSxiLmRhdGE9Yi5kYXRhLnNsaWNlKHRoaXMuc3RhcnRPZmZzZXQsdGhpcy5lbmRPZmZzZXQpLGM9YSh0aGlzKS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksYy5hcHBlbmRDaGlsZChiKSxjO2M9bmV3IHEodGhpcywhMCk7Yj1pKGMpO2MuZGV0YWNoKCk7cmV0dXJuIGJ9LGNhblN1cnJvdW5kQ29udGVudHM6ZnVuY3Rpb24oKXt2KHRoaXMpO0EodGhpcy5zdGFydENvbnRhaW5lcik7QSh0aGlzLmVuZENvbnRhaW5lcik7dmFyIGE9bmV3IHEodGhpcywhMCksYj1hLl9maXJzdCYmYyhhLl9maXJzdCx0aGlzKXx8YS5fbGFzdCYmYyhhLl9sYXN0LHRoaXMpO2EuZGV0YWNoKCk7cmV0dXJuIWJ9LHN1cnJvdW5kQ29udGVudHM6ZnVuY3Rpb24oYSl7eihhLEgpO2lmKCF0aGlzLmNhblN1cnJvdW5kQ29udGVudHMoKSl0aHJvdyBuZXcgcigiQkFEX0JPVU5EQVJZUE9JTlRTX0VSUiIpOwp2YXIgYj10aGlzLmV4dHJhY3RDb250ZW50cygpO2lmKGEuaGFzQ2hpbGROb2RlcygpKWZvcig7YS5sYXN0Q2hpbGQ7KWEucmVtb3ZlQ2hpbGQoYS5sYXN0Q2hpbGQpO2coYSx0aGlzLnN0YXJ0Q29udGFpbmVyLHRoaXMuc3RhcnRPZmZzZXQpO2EuYXBwZW5kQ2hpbGQoYik7dGhpcy5zZWxlY3ROb2RlKGEpfSxjbG9uZVJhbmdlOmZ1bmN0aW9uKCl7dih0aGlzKTtmb3IodmFyIGI9bmV3IEMoYSh0aGlzKSksYz1ULmxlbmd0aCxkO2MtLTspZD1UW2NdLGJbZF09dGhpc1tkXTtyZXR1cm4gYn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2KHRoaXMpO3ZhciBhPXRoaXMuc3RhcnRDb250YWluZXI7aWYoYT09PXRoaXMuZW5kQ29udGFpbmVyJiZsLmlzQ2hhcmFjdGVyRGF0YU5vZGUoYSkpcmV0dXJuIDM9PWEubm9kZVR5cGV8fDQ9PWEubm9kZVR5cGU/YS5kYXRhLnNsaWNlKHRoaXMuc3RhcnRPZmZzZXQsdGhpcy5lbmRPZmZzZXQpOiIiO3ZhciBiPVtdLGE9bmV3IHEodGhpcywhMCk7aChhLGZ1bmN0aW9uKGEpeygzPT0KYS5ub2RlVHlwZXx8ND09YS5ub2RlVHlwZSkmJmIucHVzaChhLmRhdGEpfSk7YS5kZXRhY2goKTtyZXR1cm4gYi5qb2luKCIiKX0sY29tcGFyZU5vZGU6ZnVuY3Rpb24oYSl7dih0aGlzKTt2YXIgYj1hLnBhcmVudE5vZGUsYz1sLmdldE5vZGVJbmRleChhKTtpZighYil0aHJvdyBuZXcgQigiTk9UX0ZPVU5EX0VSUiIpO2E9dGhpcy5jb21wYXJlUG9pbnQoYixjKTtiPXRoaXMuY29tcGFyZVBvaW50KGIsYysxKTtyZXR1cm4gMD5hPzA8Yj9ZOlc6MDxiP1g6Un0sY29tcGFyZVBvaW50OmZ1bmN0aW9uKGEsYil7dih0aGlzKTt0KGEsIkhJRVJBUkNIWV9SRVFVRVNUX0VSUiIpO3koYSx0aGlzLnN0YXJ0Q29udGFpbmVyKTtyZXR1cm4gMD5sLmNvbXBhcmVQb2ludHMoYSxiLHRoaXMuc3RhcnRDb250YWluZXIsdGhpcy5zdGFydE9mZnNldCk/LTE6MDxsLmNvbXBhcmVQb2ludHMoYSxiLHRoaXMuZW5kQ29udGFpbmVyLHRoaXMuZW5kT2Zmc2V0KT8xOjB9LGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudDpTPwpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnN0YXJ0Q29udGFpbmVyLGM9bC5nZXREb2N1bWVudChiKTtpZighYil0aHJvdyBuZXcgQigiSU5WQUxJRF9TVEFURV9FUlIiKTt2YXIgZD1udWxsOzE9PWIubm9kZVR5cGU/ZD1iOmwuaXNDaGFyYWN0ZXJEYXRhTm9kZShiKSYmKGQ9bC5wYXJlbnRFbGVtZW50KGIpKTtkPW51bGw9PT1kfHwiSFRNTCI9PWQubm9kZU5hbWUmJmwuaXNIdG1sTmFtZXNwYWNlKGwuZ2V0RG9jdW1lbnQoZCkuZG9jdW1lbnRFbGVtZW50KSYmbC5pc0h0bWxOYW1lc3BhY2UoZCk/Yy5jcmVhdGVFbGVtZW50KCJib2R5Iik6ZC5jbG9uZU5vZGUoITEpO2QuaW5uZXJIVE1MPWE7cmV0dXJuIGwuZnJhZ21lbnRGcm9tTm9kZUNoaWxkcmVuKGQpfTpmdW5jdGlvbihiKXtvKHRoaXMpO3ZhciBjPWEodGhpcykuY3JlYXRlRWxlbWVudCgiYm9keSIpO2MuaW5uZXJIVE1MPWI7cmV0dXJuIGwuZnJhZ21lbnRGcm9tTm9kZUNoaWxkcmVuKGMpfSx0b0h0bWw6ZnVuY3Rpb24oKXt2KHRoaXMpOwp2YXIgYj1hKHRoaXMpLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2IuYXBwZW5kQ2hpbGQodGhpcy5jbG9uZUNvbnRlbnRzKCkpO3JldHVybiBiLmlubmVySFRNTH0saW50ZXJzZWN0c05vZGU6ZnVuY3Rpb24oYixjKXt2KHRoaXMpO3QoYiwiTk9UX0ZPVU5EX0VSUiIpO2lmKGwuZ2V0RG9jdW1lbnQoYikhPT1hKHRoaXMpKXJldHVybiExO3ZhciBkPWIucGFyZW50Tm9kZSxoPWwuZ2V0Tm9kZUluZGV4KGIpO3QoZCwiTk9UX0ZPVU5EX0VSUiIpO3ZhciBlPWwuY29tcGFyZVBvaW50cyhkLGgsdGhpcy5lbmRDb250YWluZXIsdGhpcy5lbmRPZmZzZXQpLGQ9bC5jb21wYXJlUG9pbnRzKGQsaCsxLHRoaXMuc3RhcnRDb250YWluZXIsdGhpcy5zdGFydE9mZnNldCk7cmV0dXJuIGM/MD49ZSYmMDw9ZDowPmUmJjA8ZH0saXNQb2ludEluUmFuZ2U6ZnVuY3Rpb24oYSxiKXt2KHRoaXMpO3QoYSwiSElFUkFSQ0hZX1JFUVVFU1RfRVJSIik7eShhLHRoaXMuc3RhcnRDb250YWluZXIpO3JldHVybiAwPD0KbC5jb21wYXJlUG9pbnRzKGEsYix0aGlzLnN0YXJ0Q29udGFpbmVyLHRoaXMuc3RhcnRPZmZzZXQpJiYwPj1sLmNvbXBhcmVQb2ludHMoYSxiLHRoaXMuZW5kQ29udGFpbmVyLHRoaXMuZW5kT2Zmc2V0KX0saW50ZXJzZWN0c1JhbmdlOmZ1bmN0aW9uKGIsYyl7dih0aGlzKTtpZihhKGIpIT1hKHRoaXMpKXRocm93IG5ldyBCKCJXUk9OR19ET0NVTUVOVF9FUlIiKTt2YXIgZD1sLmNvbXBhcmVQb2ludHModGhpcy5zdGFydENvbnRhaW5lcix0aGlzLnN0YXJ0T2Zmc2V0LGIuZW5kQ29udGFpbmVyLGIuZW5kT2Zmc2V0KSxoPWwuY29tcGFyZVBvaW50cyh0aGlzLmVuZENvbnRhaW5lcix0aGlzLmVuZE9mZnNldCxiLnN0YXJ0Q29udGFpbmVyLGIuc3RhcnRPZmZzZXQpO3JldHVybiBjPzA+PWQmJjA8PWg6MD5kJiYwPGh9LGludGVyc2VjdGlvbjpmdW5jdGlvbihhKXtpZih0aGlzLmludGVyc2VjdHNSYW5nZShhKSl7dmFyIGI9bC5jb21wYXJlUG9pbnRzKHRoaXMuc3RhcnRDb250YWluZXIsCnRoaXMuc3RhcnRPZmZzZXQsYS5zdGFydENvbnRhaW5lcixhLnN0YXJ0T2Zmc2V0KSxjPWwuY29tcGFyZVBvaW50cyh0aGlzLmVuZENvbnRhaW5lcix0aGlzLmVuZE9mZnNldCxhLmVuZENvbnRhaW5lcixhLmVuZE9mZnNldCksZD10aGlzLmNsb25lUmFuZ2UoKTstMT09YiYmZC5zZXRTdGFydChhLnN0YXJ0Q29udGFpbmVyLGEuc3RhcnRPZmZzZXQpOzE9PWMmJmQuc2V0RW5kKGEuZW5kQ29udGFpbmVyLGEuZW5kT2Zmc2V0KTtyZXR1cm4gZH1yZXR1cm4gbnVsbH0sdW5pb246ZnVuY3Rpb24oYSl7aWYodGhpcy5pbnRlcnNlY3RzUmFuZ2UoYSwhMCkpe3ZhciBiPXRoaXMuY2xvbmVSYW5nZSgpOy0xPT1sLmNvbXBhcmVQb2ludHMoYS5zdGFydENvbnRhaW5lcixhLnN0YXJ0T2Zmc2V0LHRoaXMuc3RhcnRDb250YWluZXIsdGhpcy5zdGFydE9mZnNldCkmJmIuc2V0U3RhcnQoYS5zdGFydENvbnRhaW5lcixhLnN0YXJ0T2Zmc2V0KTsxPT1sLmNvbXBhcmVQb2ludHMoYS5lbmRDb250YWluZXIsCmEuZW5kT2Zmc2V0LHRoaXMuZW5kQ29udGFpbmVyLHRoaXMuZW5kT2Zmc2V0KSYmYi5zZXRFbmQoYS5lbmRDb250YWluZXIsYS5lbmRPZmZzZXQpO3JldHVybiBifXRocm93IG5ldyByKCJSYW5nZXMgZG8gbm90IGludGVyc2VjdCIpO30sY29udGFpbnNOb2RlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI/dGhpcy5pbnRlcnNlY3RzTm9kZShhLCExKTp0aGlzLmNvbXBhcmVOb2RlKGEpPT1SfSxjb250YWluc05vZGVDb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gMDw9dGhpcy5jb21wYXJlUG9pbnQoYSwwKSYmMD49dGhpcy5jb21wYXJlUG9pbnQoYSxsLmdldE5vZGVMZW5ndGgoYSkpfSxjb250YWluc1JhbmdlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmludGVyc2VjdGlvbihhKS5lcXVhbHMoYSl9LGNvbnRhaW5zTm9kZVRleHQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jbG9uZVJhbmdlKCk7Yi5zZWxlY3ROb2RlKGEpO3ZhciBjPWIuZ2V0Tm9kZXMoWzNdKTtyZXR1cm4gMDxjLmxlbmd0aD8KKGIuc2V0U3RhcnQoY1swXSwwKSxhPWMucG9wKCksYi5zZXRFbmQoYSxhLmxlbmd0aCksYT10aGlzLmNvbnRhaW5zUmFuZ2UoYiksYi5kZXRhY2goKSxhKTp0aGlzLmNvbnRhaW5zTm9kZUNvbnRlbnRzKGEpfSxjcmVhdGVOb2RlSXRlcmF0b3I6ZnVuY3Rpb24oYSxiKXt2KHRoaXMpO3JldHVybiBuZXcgbSh0aGlzLGEsYil9LGdldE5vZGVzOmZ1bmN0aW9uKGEsYil7dih0aGlzKTtyZXR1cm4gbih0aGlzLGEsYil9LGdldERvY3VtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcyl9LGNvbGxhcHNlQmVmb3JlOmZ1bmN0aW9uKGEpe28odGhpcyk7dGhpcy5zZXRFbmRCZWZvcmUoYSk7dGhpcy5jb2xsYXBzZSghMSl9LGNvbGxhcHNlQWZ0ZXI6ZnVuY3Rpb24oYSl7byh0aGlzKTt0aGlzLnNldFN0YXJ0QWZ0ZXIoYSk7dGhpcy5jb2xsYXBzZSghMCl9LGdldE5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4iRG9tUmFuZ2UifSxlcXVhbHM6ZnVuY3Rpb24oYSl7cmV0dXJuIEMucmFuZ2VzRXF1YWwodGhpcywKYSl9LGluc3BlY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzKX19O0koQyxKLGZ1bmN0aW9uKGEpe28oYSk7YS5zdGFydENvbnRhaW5lcj1hLnN0YXJ0T2Zmc2V0PWEuZW5kQ29udGFpbmVyPWEuZW5kT2Zmc2V0PW51bGw7YS5jb2xsYXBzZWQ9YS5jb21tb25BbmNlc3RvckNvbnRhaW5lcj1udWxsO2QoYSwiZGV0YWNoIixudWxsKTthLl9saXN0ZW5lcnM9bnVsbH0pO2IucmFuZ2VQcm90b3R5cGU9RC5wcm90b3R5cGU7Qy5yYW5nZVByb3BlcnRpZXM9VDtDLlJhbmdlSXRlcmF0b3I9cTtDLmNvcHlDb21wYXJpc29uQ29uc3RhbnRzPUY7Qy5jcmVhdGVQcm90b3R5cGVSYW5nZT1JO0MuaW5zcGVjdD1wO0MuZ2V0UmFuZ2VEb2N1bWVudD1hO0MucmFuZ2VzRXF1YWw9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5zdGFydENvbnRhaW5lcj09PWIuc3RhcnRDb250YWluZXImJmEuc3RhcnRPZmZzZXQ9PT1iLnN0YXJ0T2Zmc2V0JiZhLmVuZENvbnRhaW5lcj09PWIuZW5kQ29udGFpbmVyJiZhLmVuZE9mZnNldD09PQpiLmVuZE9mZnNldH07Yi5Eb21SYW5nZT1DO2IuUmFuZ2VFeGNlcHRpb249cn0pOwpyYW5neS5jcmVhdGVNb2R1bGUoIldyYXBwZWRSYW5nZSIsZnVuY3Rpb24oYil7ZnVuY3Rpb24gYyhhLGIsYyxkKXt2YXIgZz1hLmR1cGxpY2F0ZSgpO2cuY29sbGFwc2UoYyk7dmFyIGk9Zy5wYXJlbnRFbGVtZW50KCk7ZS5pc0FuY2VzdG9yT2YoYixpLCEwKXx8KGk9Yik7aWYoIWkuY2FuSGF2ZUhUTUwpcmV0dXJuIG5ldyBmKGkucGFyZW50Tm9kZSxlLmdldE5vZGVJbmRleChpKSk7dmFyIGI9ZS5nZXREb2N1bWVudChpKS5jcmVhdGVFbGVtZW50KCJzcGFuIikscixtPWM/IlN0YXJ0VG9TdGFydCI6IlN0YXJ0VG9FbmQiO2RvIGkuaW5zZXJ0QmVmb3JlKGIsYi5wcmV2aW91c1NpYmxpbmcpLGcubW92ZVRvRWxlbWVudFRleHQoYik7d2hpbGUoMDwocj1nLmNvbXBhcmVFbmRQb2ludHMobSxhKSkmJmIucHJldmlvdXNTaWJsaW5nKTttPWIubmV4dFNpYmxpbmc7aWYoLTE9PXImJm0mJmUuaXNDaGFyYWN0ZXJEYXRhTm9kZShtKSl7Zy5zZXRFbmRQb2ludChjPyJFbmRUb1N0YXJ0IjoiRW5kVG9FbmQiLAphKTtpZigvW1xyXG5dLy50ZXN0KG0uZGF0YSkpe2k9Zy5kdXBsaWNhdGUoKTtjPWkudGV4dC5yZXBsYWNlKC9cclxuL2csIlxyIikubGVuZ3RoO2ZvcihjPWkubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLGMpOy0xPT1pLmNvbXBhcmVFbmRQb2ludHMoIlN0YXJ0VG9FbmQiLGkpOyljKyssaS5tb3ZlU3RhcnQoImNoYXJhY3RlciIsMSl9ZWxzZSBjPWcudGV4dC5sZW5ndGg7aT1uZXcgZihtLGMpfWVsc2UgbT0oZHx8IWMpJiZiLnByZXZpb3VzU2libGluZyxpPShjPShkfHxjKSYmYi5uZXh0U2libGluZykmJmUuaXNDaGFyYWN0ZXJEYXRhTm9kZShjKT9uZXcgZihjLDApOm0mJmUuaXNDaGFyYWN0ZXJEYXRhTm9kZShtKT9uZXcgZihtLG0ubGVuZ3RoKTpuZXcgZihpLGUuZ2V0Tm9kZUluZGV4KGIpKTtiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYik7cmV0dXJuIGl9ZnVuY3Rpb24gYShhLGIpe3ZhciBjLGQsZj1hLm9mZnNldCxnPWUuZ2V0RG9jdW1lbnQoYS5ub2RlKSxpPWcuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKSwKbT1lLmlzQ2hhcmFjdGVyRGF0YU5vZGUoYS5ub2RlKTttPyhjPWEubm9kZSxkPWMucGFyZW50Tm9kZSk6KGM9YS5ub2RlLmNoaWxkTm9kZXMsYz1mPGMubGVuZ3RoP2NbZl06bnVsbCxkPWEubm9kZSk7Zz1nLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtnLmlubmVySFRNTD0iJiNmZWZmOyI7Yz9kLmluc2VydEJlZm9yZShnLGMpOmQuYXBwZW5kQ2hpbGQoZyk7aS5tb3ZlVG9FbGVtZW50VGV4dChnKTtpLmNvbGxhcHNlKCFiKTtkLnJlbW92ZUNoaWxkKGcpO2lmKG0paVtiPyJtb3ZlU3RhcnQiOiJtb3ZlRW5kIl0oImNoYXJhY3RlciIsZik7cmV0dXJuIGl9Yi5yZXF1aXJlTW9kdWxlcyhbIkRvbVV0aWwiLCJEb21SYW5nZSJdKTt2YXIgZCxlPWIuZG9tLGY9ZS5Eb21Qb3NpdGlvbixnPWIuRG9tUmFuZ2U7aWYoYi5mZWF0dXJlcy5pbXBsZW1lbnRzRG9tUmFuZ2UmJighYi5mZWF0dXJlcy5pbXBsZW1lbnRzVGV4dFJhbmdlfHwhYi5jb25maWcucHJlZmVyVGV4dFJhbmdlKSkoZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGIpe2Zvcih2YXIgYz0Kai5sZW5ndGgsZDtjLS07KWQ9altjXSxiW2RdPWIubmF0aXZlUmFuZ2VbZF19dmFyIGMsaj1nLnJhbmdlUHJvcGVydGllcyxmO2Q9ZnVuY3Rpb24oYil7aWYoIWIpdGhyb3cgRXJyb3IoIlJhbmdlIG11c3QgYmUgc3BlY2lmaWVkIik7dGhpcy5uYXRpdmVSYW5nZT1iO2EodGhpcyl9O2cuY3JlYXRlUHJvdG90eXBlUmFuZ2UoZCxmdW5jdGlvbihhLGIsYyxkLGgpe3ZhciBlPWEuZW5kQ29udGFpbmVyIT09ZHx8YS5lbmRPZmZzZXQhPWg7aWYoYS5zdGFydENvbnRhaW5lciE9PWJ8fGEuc3RhcnRPZmZzZXQhPWN8fGUpYS5zZXRFbmQoZCxoKSxhLnNldFN0YXJ0KGIsYyl9LGZ1bmN0aW9uKGEpe2EubmF0aXZlUmFuZ2UuZGV0YWNoKCk7YS5kZXRhY2hlZD0hMDtmb3IodmFyIGI9ai5sZW5ndGgsYztiLS07KWM9altiXSxhW2NdPW51bGx9KTtjPWQucHJvdG90eXBlO2Muc2VsZWN0Tm9kZT1mdW5jdGlvbihiKXt0aGlzLm5hdGl2ZVJhbmdlLnNlbGVjdE5vZGUoYik7YSh0aGlzKX07Yy5kZWxldGVDb250ZW50cz0KZnVuY3Rpb24oKXt0aGlzLm5hdGl2ZVJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7YSh0aGlzKX07Yy5leHRyYWN0Q29udGVudHM9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm5hdGl2ZVJhbmdlLmV4dHJhY3RDb250ZW50cygpO2EodGhpcyk7cmV0dXJuIGJ9O2MuY2xvbmVDb250ZW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hdGl2ZVJhbmdlLmNsb25lQ29udGVudHMoKX07Yy5zdXJyb3VuZENvbnRlbnRzPWZ1bmN0aW9uKGIpe3RoaXMubmF0aXZlUmFuZ2Uuc3Vycm91bmRDb250ZW50cyhiKTthKHRoaXMpfTtjLmNvbGxhcHNlPWZ1bmN0aW9uKGIpe3RoaXMubmF0aXZlUmFuZ2UuY29sbGFwc2UoYik7YSh0aGlzKX07Yy5jbG9uZVJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkKHRoaXMubmF0aXZlUmFuZ2UuY2xvbmVSYW5nZSgpKX07Yy5yZWZyZXNoPWZ1bmN0aW9uKCl7YSh0aGlzKX07Yy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hdGl2ZVJhbmdlLnRvU3RyaW5nKCl9Owp2YXIgaT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgidGVzdCIpO2UuZ2V0Qm9keShkb2N1bWVudCkuYXBwZW5kQ2hpbGQoaSk7dmFyIHE9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtxLnNldFN0YXJ0KGksMCk7cS5zZXRFbmQoaSwwKTt0cnl7cS5zZXRTdGFydChpLDEpLGMuc2V0U3RhcnQ9ZnVuY3Rpb24oYixjKXt0aGlzLm5hdGl2ZVJhbmdlLnNldFN0YXJ0KGIsYyk7YSh0aGlzKX0sYy5zZXRFbmQ9ZnVuY3Rpb24oYixjKXt0aGlzLm5hdGl2ZVJhbmdlLnNldEVuZChiLGMpO2EodGhpcyl9LGY9ZnVuY3Rpb24oYil7cmV0dXJuIGZ1bmN0aW9uKGMpe3RoaXMubmF0aXZlUmFuZ2VbYl0oYyk7YSh0aGlzKX19fWNhdGNoKHIpe2Muc2V0U3RhcnQ9ZnVuY3Rpb24oYixjKXt0cnl7dGhpcy5uYXRpdmVSYW5nZS5zZXRTdGFydChiLGMpfWNhdGNoKGQpe3RoaXMubmF0aXZlUmFuZ2Uuc2V0RW5kKGIsYyksdGhpcy5uYXRpdmVSYW5nZS5zZXRTdGFydChiLGMpfWEodGhpcyl9LGMuc2V0RW5kPWZ1bmN0aW9uKGIsCmMpe3RyeXt0aGlzLm5hdGl2ZVJhbmdlLnNldEVuZChiLGMpfWNhdGNoKGQpe3RoaXMubmF0aXZlUmFuZ2Uuc2V0U3RhcnQoYixjKSx0aGlzLm5hdGl2ZVJhbmdlLnNldEVuZChiLGMpfWEodGhpcyl9LGY9ZnVuY3Rpb24oYixjKXtyZXR1cm4gZnVuY3Rpb24oZCl7dHJ5e3RoaXMubmF0aXZlUmFuZ2VbYl0oZCl9Y2F0Y2goZSl7dGhpcy5uYXRpdmVSYW5nZVtjXShkKSx0aGlzLm5hdGl2ZVJhbmdlW2JdKGQpfWEodGhpcyl9fX1jLnNldFN0YXJ0QmVmb3JlPWYoInNldFN0YXJ0QmVmb3JlIiwic2V0RW5kQmVmb3JlIik7Yy5zZXRTdGFydEFmdGVyPWYoInNldFN0YXJ0QWZ0ZXIiLCJzZXRFbmRBZnRlciIpO2Muc2V0RW5kQmVmb3JlPWYoInNldEVuZEJlZm9yZSIsInNldFN0YXJ0QmVmb3JlIik7Yy5zZXRFbmRBZnRlcj1mKCJzZXRFbmRBZnRlciIsInNldFN0YXJ0QWZ0ZXIiKTtxLnNlbGVjdE5vZGVDb250ZW50cyhpKTtjLnNlbGVjdE5vZGVDb250ZW50cz1xLnN0YXJ0Q29udGFpbmVyPT0KaSYmcS5lbmRDb250YWluZXI9PWkmJjA9PXEuc3RhcnRPZmZzZXQmJnEuZW5kT2Zmc2V0PT1pLmxlbmd0aD9mdW5jdGlvbihiKXt0aGlzLm5hdGl2ZVJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhiKTthKHRoaXMpfTpmdW5jdGlvbihhKXt0aGlzLnNldFN0YXJ0KGEsMCk7dGhpcy5zZXRFbmQoYSxnLmdldEVuZE9mZnNldChhKSl9O3Euc2VsZWN0Tm9kZUNvbnRlbnRzKGkpO3Euc2V0RW5kKGksMyk7Zj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO2Yuc2VsZWN0Tm9kZUNvbnRlbnRzKGkpO2Yuc2V0RW5kKGksNCk7Zi5zZXRTdGFydChpLDIpO2MuY29tcGFyZUJvdW5kYXJ5UG9pbnRzPS0xPT1xLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhxLlNUQVJUX1RPX0VORCxmKSYxPT1xLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhxLkVORF9UT19TVEFSVCxmKT9mdW5jdGlvbihhLGIpe2I9Yi5uYXRpdmVSYW5nZXx8YjthPT1iLlNUQVJUX1RPX0VORD9hPWIuRU5EX1RPX1NUQVJUOmE9PWIuRU5EX1RPX1NUQVJUJiYKKGE9Yi5TVEFSVF9UT19FTkQpO3JldHVybiB0aGlzLm5hdGl2ZVJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhhLGIpfTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm5hdGl2ZVJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhhLGIubmF0aXZlUmFuZ2V8fGIpfTtiLnV0aWwuaXNIb3N0TWV0aG9kKHEsImNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCIpJiYoYy5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubmF0aXZlUmFuZ2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGEpfSk7ZS5nZXRCb2R5KGRvY3VtZW50KS5yZW1vdmVDaGlsZChpKTtxLmRldGFjaCgpO2YuZGV0YWNoKCl9KSgpLGIuY3JlYXRlTmF0aXZlUmFuZ2U9ZnVuY3Rpb24oYSl7YT1hfHxkb2N1bWVudDtyZXR1cm4gYS5jcmVhdGVSYW5nZSgpfTtlbHNlIGlmKGIuZmVhdHVyZXMuaW1wbGVtZW50c1RleHRSYW5nZSl7ZD1mdW5jdGlvbihhKXt0aGlzLnRleHRSYW5nZT1hO3RoaXMucmVmcmVzaCgpfTsKZC5wcm90b3R5cGU9bmV3IGcoZG9jdW1lbnQpO2QucHJvdG90eXBlLnJlZnJlc2g9ZnVuY3Rpb24oKXt2YXIgYSxiLGQ9dGhpcy50ZXh0UmFuZ2U7YT1kLnBhcmVudEVsZW1lbnQoKTt2YXIgZj1kLmR1cGxpY2F0ZSgpO2YuY29sbGFwc2UoITApO2I9Zi5wYXJlbnRFbGVtZW50KCk7Zj1kLmR1cGxpY2F0ZSgpO2YuY29sbGFwc2UoITEpO2Q9Zi5wYXJlbnRFbGVtZW50KCk7Yj1iPT1kP2I6ZS5nZXRDb21tb25BbmNlc3RvcihiLGQpO2I9Yj09YT9iOmUuZ2V0Q29tbW9uQW5jZXN0b3IoYSxiKTswPT10aGlzLnRleHRSYW5nZS5jb21wYXJlRW5kUG9pbnRzKCJTdGFydFRvRW5kIix0aGlzLnRleHRSYW5nZSk/Yj1hPWModGhpcy50ZXh0UmFuZ2UsYiwhMCwhMCk6KGE9Yyh0aGlzLnRleHRSYW5nZSxiLCEwLCExKSxiPWModGhpcy50ZXh0UmFuZ2UsYiwhMSwhMSkpO3RoaXMuc2V0U3RhcnQoYS5ub2RlLGEub2Zmc2V0KTt0aGlzLnNldEVuZChiLm5vZGUsYi5vZmZzZXQpfTtnLmNvcHlDb21wYXJpc29uQ29uc3RhbnRzKGQpOwp2YXIgaT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSgpOyJ1bmRlZmluZWQiPT10eXBlb2YgaS5SYW5nZSYmKGkuUmFuZ2U9ZCk7Yi5jcmVhdGVOYXRpdmVSYW5nZT1mdW5jdGlvbihhKXthPWF8fGRvY3VtZW50O3JldHVybiBhLmJvZHkuY3JlYXRlVGV4dFJhbmdlKCl9fWIuZmVhdHVyZXMuaW1wbGVtZW50c1RleHRSYW5nZSYmKGQucmFuZ2VUb1RleHRSYW5nZT1mdW5jdGlvbihiKXtpZihiLmNvbGxhcHNlZClyZXR1cm4gYShuZXcgZihiLnN0YXJ0Q29udGFpbmVyLGIuc3RhcnRPZmZzZXQpLCEwKTt2YXIgYz1hKG5ldyBmKGIuc3RhcnRDb250YWluZXIsYi5zdGFydE9mZnNldCksITApLGQ9YShuZXcgZihiLmVuZENvbnRhaW5lcixiLmVuZE9mZnNldCksITEpLGI9ZS5nZXREb2N1bWVudChiLnN0YXJ0Q29udGFpbmVyKS5ib2R5LmNyZWF0ZVRleHRSYW5nZSgpO2Iuc2V0RW5kUG9pbnQoIlN0YXJ0VG9TdGFydCIsYyk7Yi5zZXRFbmRQb2ludCgiRW5kVG9FbmQiLGQpO3JldHVybiBifSk7CmQucHJvdG90eXBlLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4iV3JhcHBlZFJhbmdlIn07Yi5XcmFwcGVkUmFuZ2U9ZDtiLmNyZWF0ZVJhbmdlPWZ1bmN0aW9uKGEpe2E9YXx8ZG9jdW1lbnQ7cmV0dXJuIG5ldyBkKGIuY3JlYXRlTmF0aXZlUmFuZ2UoYSkpfTtiLmNyZWF0ZVJhbmd5UmFuZ2U9ZnVuY3Rpb24oYSl7YT1hfHxkb2N1bWVudDtyZXR1cm4gbmV3IGcoYSl9O2IuY3JlYXRlSWZyYW1lUmFuZ2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGIuY3JlYXRlUmFuZ2UoZS5nZXRJZnJhbWVEb2N1bWVudChhKSl9O2IuY3JlYXRlSWZyYW1lUmFuZ3lSYW5nZT1mdW5jdGlvbihhKXtyZXR1cm4gYi5jcmVhdGVSYW5neVJhbmdlKGUuZ2V0SWZyYW1lRG9jdW1lbnQoYSkpfTtiLmFkZENyZWF0ZU1pc3NpbmdOYXRpdmVBcGlMaXN0ZW5lcihmdW5jdGlvbihhKXthPWEuZG9jdW1lbnQ7aWYodHlwZW9mIGEuY3JlYXRlUmFuZ2U9PSJ1bmRlZmluZWQiKWEuY3JlYXRlUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gYi5jcmVhdGVSYW5nZSh0aGlzKX07CmE9YT1udWxsfSl9KTsKcmFuZ3kuY3JlYXRlTW9kdWxlKCJXcmFwcGVkU2VsZWN0aW9uIixmdW5jdGlvbihiLGMpe2Z1bmN0aW9uIGEoYSl7cmV0dXJuKGF8fHdpbmRvdykuZ2V0U2VsZWN0aW9uKCl9ZnVuY3Rpb24gZChhKXtyZXR1cm4oYXx8d2luZG93KS5kb2N1bWVudC5zZWxlY3Rpb259ZnVuY3Rpb24gZShhLGIsYyl7dmFyIGQ9Yz8iZW5kIjoic3RhcnQiLGM9Yz8ic3RhcnQiOiJlbmQiO2EuYW5jaG9yTm9kZT1iW2QrIkNvbnRhaW5lciJdO2EuYW5jaG9yT2Zmc2V0PWJbZCsiT2Zmc2V0Il07YS5mb2N1c05vZGU9YltjKyJDb250YWluZXIiXTthLmZvY3VzT2Zmc2V0PWJbYysiT2Zmc2V0Il19ZnVuY3Rpb24gZihhKXthLmFuY2hvck5vZGU9YS5mb2N1c05vZGU9bnVsbDthLmFuY2hvck9mZnNldD1hLmZvY3VzT2Zmc2V0PTA7YS5yYW5nZUNvdW50PTA7YS5pc0NvbGxhcHNlZD0hMDthLl9yYW5nZXMubGVuZ3RoPTB9ZnVuY3Rpb24gZyhhKXt2YXIgYzthIGluc3RhbmNlb2YgeD8oYz1hLl9zZWxlY3Rpb25OYXRpdmVSYW5nZSwKY3x8KGM9Yi5jcmVhdGVOYXRpdmVSYW5nZShtLmdldERvY3VtZW50KGEuc3RhcnRDb250YWluZXIpKSxjLnNldEVuZChhLmVuZENvbnRhaW5lcixhLmVuZE9mZnNldCksYy5zZXRTdGFydChhLnN0YXJ0Q29udGFpbmVyLGEuc3RhcnRPZmZzZXQpLGEuX3NlbGVjdGlvbk5hdGl2ZVJhbmdlPWMsYS5hdHRhY2hMaXN0ZW5lcigiZGV0YWNoIixmdW5jdGlvbigpe3RoaXMuX3NlbGVjdGlvbk5hdGl2ZVJhbmdlPW51bGx9KSkpOmEgaW5zdGFuY2VvZiBvP2M9YS5uYXRpdmVSYW5nZTpiLmZlYXR1cmVzLmltcGxlbWVudHNEb21SYW5nZSYmYSBpbnN0YW5jZW9mIG0uZ2V0V2luZG93KGEuc3RhcnRDb250YWluZXIpLlJhbmdlJiYoYz1hKTtyZXR1cm4gY31mdW5jdGlvbiBpKGEpe3ZhciBiPWEuZ2V0Tm9kZXMoKSxjO2E6aWYoIWIubGVuZ3RofHwxIT1iWzBdLm5vZGVUeXBlKWM9ITE7ZWxzZXtjPTE7Zm9yKHZhciBkPWIubGVuZ3RoO2M8ZDsrK2MpaWYoIW0uaXNBbmNlc3Rvck9mKGJbMF0sYltjXSkpe2M9CiExO2JyZWFrIGF9Yz0hMH1pZighYyl0aHJvdyBFcnJvcigiZ2V0U2luZ2xlRWxlbWVudEZyb21SYW5nZTogcmFuZ2UgIithLmluc3BlY3QoKSsiIGRpZCBub3QgY29uc2lzdCBvZiBhIHNpbmdsZSBlbGVtZW50Iik7cmV0dXJuIGJbMF19ZnVuY3Rpb24gaChhLGIpe3ZhciBjPW5ldyBvKGIpO2EuX3Jhbmdlcz1bY107ZShhLGMsITEpO2EucmFuZ2VDb3VudD0xO2EuaXNDb2xsYXBzZWQ9Yy5jb2xsYXBzZWR9ZnVuY3Rpb24gayhhKXthLl9yYW5nZXMubGVuZ3RoPTA7aWYoIk5vbmUiPT1hLmRvY1NlbGVjdGlvbi50eXBlKWYoYSk7ZWxzZXt2YXIgYz1hLmRvY1NlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO2lmKGMmJiJ1bmRlZmluZWQiIT10eXBlb2YgYy50ZXh0KWgoYSxjKTtlbHNle2EucmFuZ2VDb3VudD1jLmxlbmd0aDtmb3IodmFyIGQsaj1tLmdldERvY3VtZW50KGMuaXRlbSgwKSksaz0wO2s8YS5yYW5nZUNvdW50OysraylkPWIuY3JlYXRlUmFuZ2UoaiksZC5zZWxlY3ROb2RlKGMuaXRlbShrKSksCmEuX3Jhbmdlcy5wdXNoKGQpO2EuaXNDb2xsYXBzZWQ9MT09YS5yYW5nZUNvdW50JiZhLl9yYW5nZXNbMF0uY29sbGFwc2VkO2UoYSxhLl9yYW5nZXNbYS5yYW5nZUNvdW50LTFdLCExKX19fWZ1bmN0aW9uIGooYSxiKXtmb3IodmFyIGM9YS5kb2NTZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKSxkPWkoYiksZT1tLmdldERvY3VtZW50KGMuaXRlbSgwKSksZT1tLmdldEJvZHkoZSkuY3JlYXRlQ29udHJvbFJhbmdlKCksaD0wLGo9Yy5sZW5ndGg7aDxqOysraCllLmFkZChjLml0ZW0oaCkpO3RyeXtlLmFkZChkKX1jYXRjaChmKXt0aHJvdyBFcnJvcigiYWRkUmFuZ2UoKTogRWxlbWVudCB3aXRoaW4gdGhlIHNwZWNpZmllZCBSYW5nZSBjb3VsZCBub3QgYmUgYWRkZWQgdG8gY29udHJvbCBzZWxlY3Rpb24gKGRvZXMgaXQgaGF2ZSBsYXlvdXQ/KSIpO31lLnNlbGVjdCgpO2soYSl9ZnVuY3Rpb24gbihhLGIsYyl7dGhpcy5uYXRpdmVTZWxlY3Rpb249YTt0aGlzLmRvY1NlbGVjdGlvbj1iO3RoaXMuX3Jhbmdlcz0KW107dGhpcy53aW49Yzt0aGlzLnJlZnJlc2goKX1mdW5jdGlvbiBwKGEsYil7Zm9yKHZhciBjPW0uZ2V0RG9jdW1lbnQoYlswXS5zdGFydENvbnRhaW5lciksYz1tLmdldEJvZHkoYykuY3JlYXRlQ29udHJvbFJhbmdlKCksZD0wLGU7ZDxyYW5nZUNvdW50OysrZCl7ZT1pKGJbZF0pO3RyeXtjLmFkZChlKX1jYXRjaChoKXt0aHJvdyBFcnJvcigic2V0UmFuZ2VzKCk6IEVsZW1lbnQgd2l0aGluIHRoZSBvbmUgb2YgdGhlIHNwZWNpZmllZCBSYW5nZXMgY291bGQgbm90IGJlIGFkZGVkIHRvIGNvbnRyb2wgc2VsZWN0aW9uIChkb2VzIGl0IGhhdmUgbGF5b3V0PykiKTt9fWMuc2VsZWN0KCk7ayhhKX1mdW5jdGlvbiBxKGEsYil7aWYoYS5hbmNob3JOb2RlJiZtLmdldERvY3VtZW50KGEuYW5jaG9yTm9kZSkhPT1tLmdldERvY3VtZW50KGIpKXRocm93IG5ldyB6KCJXUk9OR19ET0NVTUVOVF9FUlIiKTt9ZnVuY3Rpb24gcihhKXt2YXIgYj1bXSxjPW5ldyB3KGEuYW5jaG9yTm9kZSxhLmFuY2hvck9mZnNldCksCmQ9bmV3IHcoYS5mb2N1c05vZGUsYS5mb2N1c09mZnNldCksZT0iZnVuY3Rpb24iPT10eXBlb2YgYS5nZXROYW1lP2EuZ2V0TmFtZSgpOiJTZWxlY3Rpb24iO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgYS5yYW5nZUNvdW50KWZvcih2YXIgaD0wLGo9YS5yYW5nZUNvdW50O2g8ajsrK2gpYltoXT14Lmluc3BlY3QoYS5nZXRSYW5nZUF0KGgpKTtyZXR1cm4iWyIrZSsiKFJhbmdlczogIitiLmpvaW4oIiwgIikrIikoYW5jaG9yOiAiK2MuaW5zcGVjdCgpKyIsIGZvY3VzOiAiK2QuaW5zcGVjdCgpKyJdIn1iLnJlcXVpcmVNb2R1bGVzKFsiRG9tVXRpbCIsIkRvbVJhbmdlIiwiV3JhcHBlZFJhbmdlIl0pO2IuY29uZmlnLmNoZWNrU2VsZWN0aW9uUmFuZ2VzPSEwO3ZhciBtPWIuZG9tLHM9Yi51dGlsLHg9Yi5Eb21SYW5nZSxvPWIuV3JhcHBlZFJhbmdlLHo9Yi5ET01FeGNlcHRpb24sdz1tLkRvbVBvc2l0aW9uLHksQSx0PWIudXRpbC5pc0hvc3RNZXRob2Qod2luZG93LCJnZXRTZWxlY3Rpb24iKSwKdj1iLnV0aWwuaXNIb3N0T2JqZWN0KGRvY3VtZW50LCJzZWxlY3Rpb24iKSxEPXYmJighdHx8Yi5jb25maWcucHJlZmVyVGV4dFJhbmdlKTtEPyh5PWQsYi5pc1NlbGVjdGlvblZhbGlkPWZ1bmN0aW9uKGEpe3ZhciBhPShhfHx3aW5kb3cpLmRvY3VtZW50LGI9YS5zZWxlY3Rpb247cmV0dXJuIk5vbmUiIT1iLnR5cGV8fG0uZ2V0RG9jdW1lbnQoYi5jcmVhdGVSYW5nZSgpLnBhcmVudEVsZW1lbnQoKSk9PWF9KTp0Pyh5PWEsYi5pc1NlbGVjdGlvblZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuITB9KTpjLmZhaWwoIk5laXRoZXIgZG9jdW1lbnQuc2VsZWN0aW9uIG9yIHdpbmRvdy5nZXRTZWxlY3Rpb24oKSBkZXRlY3RlZC4iKTtiLmdldE5hdGl2ZVNlbGVjdGlvbj15O3ZhciB0PXkoKSxLPWIuY3JlYXRlTmF0aXZlUmFuZ2UoZG9jdW1lbnQpLEY9bS5nZXRCb2R5KGRvY3VtZW50KSxFPXMuYXJlSG9zdE9iamVjdHModCxzLmFyZUhvc3RQcm9wZXJ0aWVzKHQsWyJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCJdKSk7CmIuZmVhdHVyZXMuc2VsZWN0aW9uSGFzQW5jaG9yQW5kRm9jdXM9RTt2YXIgST1zLmlzSG9zdE1ldGhvZCh0LCJleHRlbmQiKTtiLmZlYXR1cmVzLnNlbGVjdGlvbkhhc0V4dGVuZD1JO3ZhciBOPSJudW1iZXIiPT10eXBlb2YgdC5yYW5nZUNvdW50O2IuZmVhdHVyZXMuc2VsZWN0aW9uSGFzUmFuZ2VDb3VudD1OO3ZhciBKPSExLEM9ITA7cy5hcmVIb3N0TWV0aG9kcyh0LFsiYWRkUmFuZ2UiLCJnZXRSYW5nZUF0IiwicmVtb3ZlQWxsUmFuZ2VzIl0pJiYoIm51bWJlciI9PXR5cGVvZiB0LnJhbmdlQ291bnQmJmIuZmVhdHVyZXMuaW1wbGVtZW50c0RvbVJhbmdlKSYmZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTtGLmFwcGVuZENoaWxkKGEpO3ZhciBiPW0uZ2V0SWZyYW1lRG9jdW1lbnQoYSk7Yi5vcGVuKCk7Yi53cml0ZSgiPGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PjEyPC9ib2R5PjwvaHRtbD4iKTtiLmNsb3NlKCk7dmFyIGM9bS5nZXRJZnJhbWVXaW5kb3coYSkuZ2V0U2VsZWN0aW9uKCksCmQ9Yi5kb2N1bWVudEVsZW1lbnQubGFzdENoaWxkLmZpcnN0Q2hpbGQsYj1iLmNyZWF0ZVJhbmdlKCk7Yi5zZXRTdGFydChkLDEpO2IuY29sbGFwc2UodHJ1ZSk7Yy5hZGRSYW5nZShiKTtDPWMucmFuZ2VDb3VudD09MTtjLnJlbW92ZUFsbFJhbmdlcygpO3ZhciBlPWIuY2xvbmVSYW5nZSgpO2Iuc2V0U3RhcnQoZCwwKTtlLnNldEVuZChkLDIpO2MuYWRkUmFuZ2UoYik7Yy5hZGRSYW5nZShlKTtKPWMucmFuZ2VDb3VudD09MjtiLmRldGFjaCgpO2UuZGV0YWNoKCk7Ri5yZW1vdmVDaGlsZChhKX0oKTtiLmZlYXR1cmVzLnNlbGVjdGlvblN1cHBvcnRzTXVsdGlwbGVSYW5nZXM9SjtiLmZlYXR1cmVzLmNvbGxhcHNlZE5vbkVkaXRhYmxlU2VsZWN0aW9uc1N1cHBvcnRlZD1DO3ZhciBsPSExLHU7RiYmcy5pc0hvc3RNZXRob2QoRiwiY3JlYXRlQ29udHJvbFJhbmdlIikmJih1PUYuY3JlYXRlQ29udHJvbFJhbmdlKCkscy5hcmVIb3N0UHJvcGVydGllcyh1LFsiaXRlbSIsImFkZCJdKSYmKGw9CiEwKSk7Yi5mZWF0dXJlcy5pbXBsZW1lbnRzQ29udHJvbFJhbmdlPWw7QT1FP2Z1bmN0aW9uKGEpe3JldHVybiBhLmFuY2hvck5vZGU9PT1hLmZvY3VzTm9kZSYmYS5hbmNob3JPZmZzZXQ9PT1hLmZvY3VzT2Zmc2V0fTpmdW5jdGlvbihhKXtyZXR1cm4gYS5yYW5nZUNvdW50P2EuZ2V0UmFuZ2VBdChhLnJhbmdlQ291bnQtMSkuY29sbGFwc2VkOmZhbHNlfTt2YXIgQjtzLmlzSG9zdE1ldGhvZCh0LCJnZXRSYW5nZUF0Iik/Qj1mdW5jdGlvbihhLGIpe3RyeXtyZXR1cm4gYS5nZXRSYW5nZUF0KGIpfWNhdGNoKGMpe3JldHVybiBudWxsfX06RSYmKEI9ZnVuY3Rpb24oYSl7dmFyIGM9bS5nZXREb2N1bWVudChhLmFuY2hvck5vZGUpLGM9Yi5jcmVhdGVSYW5nZShjKTtjLnNldFN0YXJ0KGEuYW5jaG9yTm9kZSxhLmFuY2hvck9mZnNldCk7Yy5zZXRFbmQoYS5mb2N1c05vZGUsYS5mb2N1c09mZnNldCk7aWYoYy5jb2xsYXBzZWQhPT10aGlzLmlzQ29sbGFwc2VkKXtjLnNldFN0YXJ0KGEuZm9jdXNOb2RlLAphLmZvY3VzT2Zmc2V0KTtjLnNldEVuZChhLmFuY2hvck5vZGUsYS5hbmNob3JPZmZzZXQpfXJldHVybiBjfSk7Yi5nZXRTZWxlY3Rpb249ZnVuY3Rpb24oYSl7dmFyIGE9YXx8d2luZG93LGI9YS5fcmFuZ3lTZWxlY3Rpb24sYz15KGEpLGU9dj9kKGEpOm51bGw7aWYoYil7Yi5uYXRpdmVTZWxlY3Rpb249YztiLmRvY1NlbGVjdGlvbj1lO2IucmVmcmVzaChhKX1lbHNle2I9bmV3IG4oYyxlLGEpO2EuX3Jhbmd5U2VsZWN0aW9uPWJ9cmV0dXJuIGJ9O2IuZ2V0SWZyYW1lU2VsZWN0aW9uPWZ1bmN0aW9uKGEpe3JldHVybiBiLmdldFNlbGVjdGlvbihtLmdldElmcmFtZVdpbmRvdyhhKSl9O3U9bi5wcm90b3R5cGU7aWYoIUQmJkUmJnMuYXJlSG9zdE1ldGhvZHModCxbInJlbW92ZUFsbFJhbmdlcyIsImFkZFJhbmdlIl0pKXt1LnJlbW92ZUFsbFJhbmdlcz1mdW5jdGlvbigpe3RoaXMubmF0aXZlU2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO2YodGhpcyl9O3ZhciBMPWZ1bmN0aW9uKGEsCmMpe3ZhciBkPXguZ2V0UmFuZ2VEb2N1bWVudChjKSxkPWIuY3JlYXRlUmFuZ2UoZCk7ZC5jb2xsYXBzZVRvUG9pbnQoYy5lbmRDb250YWluZXIsYy5lbmRPZmZzZXQpO2EubmF0aXZlU2VsZWN0aW9uLmFkZFJhbmdlKGcoZCkpO2EubmF0aXZlU2VsZWN0aW9uLmV4dGVuZChjLnN0YXJ0Q29udGFpbmVyLGMuc3RhcnRPZmZzZXQpO2EucmVmcmVzaCgpfTt1LmFkZFJhbmdlPU4/ZnVuY3Rpb24oYSxjKXtpZihsJiZ2JiZ0aGlzLmRvY1NlbGVjdGlvbi50eXBlPT0iQ29udHJvbCIpaih0aGlzLGEpO2Vsc2UgaWYoYyYmSSlMKHRoaXMsYSk7ZWxzZXt2YXIgZDtpZihKKWQ9dGhpcy5yYW5nZUNvdW50O2Vsc2V7dGhpcy5yZW1vdmVBbGxSYW5nZXMoKTtkPTB9dGhpcy5uYXRpdmVTZWxlY3Rpb24uYWRkUmFuZ2UoZyhhKSk7dGhpcy5yYW5nZUNvdW50PXRoaXMubmF0aXZlU2VsZWN0aW9uLnJhbmdlQ291bnQ7aWYodGhpcy5yYW5nZUNvdW50PT1kKzEpe2lmKGIuY29uZmlnLmNoZWNrU2VsZWN0aW9uUmFuZ2VzKShkPQpCKHRoaXMubmF0aXZlU2VsZWN0aW9uLHRoaXMucmFuZ2VDb3VudC0xKSkmJiF4LnJhbmdlc0VxdWFsKGQsYSkmJihhPW5ldyBvKGQpKTt0aGlzLl9yYW5nZXNbdGhpcy5yYW5nZUNvdW50LTFdPWE7ZSh0aGlzLGEsSCh0aGlzLm5hdGl2ZVNlbGVjdGlvbikpO3RoaXMuaXNDb2xsYXBzZWQ9QSh0aGlzKX1lbHNlIHRoaXMucmVmcmVzaCgpfX06ZnVuY3Rpb24oYSxiKXtpZihiJiZJKUwodGhpcyxhKTtlbHNle3RoaXMubmF0aXZlU2VsZWN0aW9uLmFkZFJhbmdlKGcoYSkpO3RoaXMucmVmcmVzaCgpfX07dS5zZXRSYW5nZXM9ZnVuY3Rpb24oYSl7aWYobCYmYS5sZW5ndGg+MSlwKHRoaXMsYSk7ZWxzZXt0aGlzLnJlbW92ZUFsbFJhbmdlcygpO2Zvcih2YXIgYj0wLGM9YS5sZW5ndGg7YjxjOysrYil0aGlzLmFkZFJhbmdlKGFbYl0pfX19ZWxzZSBpZihzLmlzSG9zdE1ldGhvZCh0LCJlbXB0eSIpJiZzLmlzSG9zdE1ldGhvZChLLCJzZWxlY3QiKSYmbCYmRCl1LnJlbW92ZUFsbFJhbmdlcz0KZnVuY3Rpb24oKXt0cnl7dGhpcy5kb2NTZWxlY3Rpb24uZW1wdHkoKTtpZih0aGlzLmRvY1NlbGVjdGlvbi50eXBlIT0iTm9uZSIpe3ZhciBhO2lmKHRoaXMuYW5jaG9yTm9kZSlhPW0uZ2V0RG9jdW1lbnQodGhpcy5hbmNob3JOb2RlKTtlbHNlIGlmKHRoaXMuZG9jU2VsZWN0aW9uLnR5cGU9PSJDb250cm9sIil7dmFyIGI9dGhpcy5kb2NTZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtiLmxlbmd0aCYmKGE9bS5nZXREb2N1bWVudChiLml0ZW0oMCkpLmJvZHkuY3JlYXRlVGV4dFJhbmdlKCkpfWlmKGEpe2EuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKS5zZWxlY3QoKTt0aGlzLmRvY1NlbGVjdGlvbi5lbXB0eSgpfX19Y2F0Y2goYyl7fWYodGhpcyl9LHUuYWRkUmFuZ2U9ZnVuY3Rpb24oYSl7aWYodGhpcy5kb2NTZWxlY3Rpb24udHlwZT09IkNvbnRyb2wiKWoodGhpcyxhKTtlbHNle28ucmFuZ2VUb1RleHRSYW5nZShhKS5zZWxlY3QoKTt0aGlzLl9yYW5nZXNbMF09YTt0aGlzLnJhbmdlQ291bnQ9CjE7dGhpcy5pc0NvbGxhcHNlZD10aGlzLl9yYW5nZXNbMF0uY29sbGFwc2VkO2UodGhpcyxhLGZhbHNlKX19LHUuc2V0UmFuZ2VzPWZ1bmN0aW9uKGEpe3RoaXMucmVtb3ZlQWxsUmFuZ2VzKCk7dmFyIGI9YS5sZW5ndGg7Yj4xP3AodGhpcyxhKTpiJiZ0aGlzLmFkZFJhbmdlKGFbMF0pfTtlbHNlIHJldHVybiBjLmZhaWwoIk5vIG1lYW5zIG9mIHNlbGVjdGluZyBhIFJhbmdlIG9yIFRleHRSYW5nZSB3YXMgZm91bmQiKSwhMTt1LmdldFJhbmdlQXQ9ZnVuY3Rpb24oYSl7aWYoYTwwfHxhPj10aGlzLnJhbmdlQ291bnQpdGhyb3cgbmV3IHooIklOREVYX1NJWkVfRVJSIik7cmV0dXJuIHRoaXMuX3Jhbmdlc1thXX07dmFyIEc7aWYoRClHPWZ1bmN0aW9uKGEpe3ZhciBjO2lmKGIuaXNTZWxlY3Rpb25WYWxpZChhLndpbikpYz1hLmRvY1NlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO2Vsc2V7Yz1tLmdldEJvZHkoYS53aW4uZG9jdW1lbnQpLmNyZWF0ZVRleHRSYW5nZSgpO2MuY29sbGFwc2UodHJ1ZSl9YS5kb2NTZWxlY3Rpb24udHlwZT09CiJDb250cm9sIj9rKGEpOmMmJnR5cGVvZiBjLnRleHQhPSJ1bmRlZmluZWQiP2goYSxjKTpmKGEpfTtlbHNlIGlmKHMuaXNIb3N0TWV0aG9kKHQsImdldFJhbmdlQXQiKSYmIm51bWJlciI9PXR5cGVvZiB0LnJhbmdlQ291bnQpRz1mdW5jdGlvbihhKXtpZihsJiZ2JiZhLmRvY1NlbGVjdGlvbi50eXBlPT0iQ29udHJvbCIpayhhKTtlbHNle2EuX3Jhbmdlcy5sZW5ndGg9YS5yYW5nZUNvdW50PWEubmF0aXZlU2VsZWN0aW9uLnJhbmdlQ291bnQ7aWYoYS5yYW5nZUNvdW50KXtmb3IodmFyIGM9MCxkPWEucmFuZ2VDb3VudDtjPGQ7KytjKWEuX3Jhbmdlc1tjXT1uZXcgYi5XcmFwcGVkUmFuZ2UoYS5uYXRpdmVTZWxlY3Rpb24uZ2V0UmFuZ2VBdChjKSk7ZShhLGEuX3Jhbmdlc1thLnJhbmdlQ291bnQtMV0sSChhLm5hdGl2ZVNlbGVjdGlvbikpO2EuaXNDb2xsYXBzZWQ9QShhKX1lbHNlIGYoYSl9fTtlbHNlIGlmKEUmJiJib29sZWFuIj09dHlwZW9mIHQuaXNDb2xsYXBzZWQmJiJib29sZWFuIj09CnR5cGVvZiBLLmNvbGxhcHNlZCYmYi5mZWF0dXJlcy5pbXBsZW1lbnRzRG9tUmFuZ2UpRz1mdW5jdGlvbihhKXt2YXIgYjtiPWEubmF0aXZlU2VsZWN0aW9uO2lmKGIuYW5jaG9yTm9kZSl7Yj1CKGIsMCk7YS5fcmFuZ2VzPVtiXTthLnJhbmdlQ291bnQ9MTtiPWEubmF0aXZlU2VsZWN0aW9uO2EuYW5jaG9yTm9kZT1iLmFuY2hvck5vZGU7YS5hbmNob3JPZmZzZXQ9Yi5hbmNob3JPZmZzZXQ7YS5mb2N1c05vZGU9Yi5mb2N1c05vZGU7YS5mb2N1c09mZnNldD1iLmZvY3VzT2Zmc2V0O2EuaXNDb2xsYXBzZWQ9QShhKX1lbHNlIGYoYSl9O2Vsc2UgcmV0dXJuIGMuZmFpbCgiTm8gbWVhbnMgb2Ygb2J0YWluaW5nIGEgUmFuZ2Ugb3IgVGV4dFJhbmdlIGZyb20gdGhlIHVzZXIncyBzZWxlY3Rpb24gd2FzIGZvdW5kIiksITE7dS5yZWZyZXNoPWZ1bmN0aW9uKGEpe3ZhciBiPWE/dGhpcy5fcmFuZ2VzLnNsaWNlKDApOm51bGw7Ryh0aGlzKTtpZihhKXthPWIubGVuZ3RoO2lmKGEhPXRoaXMuX3Jhbmdlcy5sZW5ndGgpcmV0dXJuIGZhbHNlOwpmb3IoO2EtLTspaWYoIXgucmFuZ2VzRXF1YWwoYlthXSx0aGlzLl9yYW5nZXNbYV0pKXJldHVybiBmYWxzZTtyZXR1cm4gdHJ1ZX19O3ZhciBQPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRBbGxSYW5nZXMoKSxkPWZhbHNlO2EucmVtb3ZlQWxsUmFuZ2VzKCk7Zm9yKHZhciBlPTAsaD1jLmxlbmd0aDtlPGg7KytlKWR8fGIhPT1jW2VdP2EuYWRkUmFuZ2UoY1tlXSk6ZD10cnVlO2EucmFuZ2VDb3VudHx8ZihhKX07dS5yZW1vdmVSYW5nZT1sP2Z1bmN0aW9uKGEpe2lmKHRoaXMuZG9jU2VsZWN0aW9uLnR5cGU9PSJDb250cm9sIil7Zm9yKHZhciBiPXRoaXMuZG9jU2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCksYT1pKGEpLGM9bS5nZXREb2N1bWVudChiLml0ZW0oMCkpLGM9bS5nZXRCb2R5KGMpLmNyZWF0ZUNvbnRyb2xSYW5nZSgpLGQsZT1mYWxzZSxoPTAsaj1iLmxlbmd0aDtoPGo7KytoKXtkPWIuaXRlbShoKTtkIT09YXx8ZT9jLmFkZChiLml0ZW0oaCkpOmU9dHJ1ZX1jLnNlbGVjdCgpOwprKHRoaXMpfWVsc2UgUCh0aGlzLGEpfTpmdW5jdGlvbihhKXtQKHRoaXMsYSl9O3ZhciBIOyFEJiZFJiZiLmZlYXR1cmVzLmltcGxlbWVudHNEb21SYW5nZT8oSD1mdW5jdGlvbihhKXt2YXIgYj1mYWxzZTthLmFuY2hvck5vZGUmJihiPW0uY29tcGFyZVBvaW50cyhhLmFuY2hvck5vZGUsYS5hbmNob3JPZmZzZXQsYS5mb2N1c05vZGUsYS5mb2N1c09mZnNldCk9PTEpO3JldHVybiBifSx1LmlzQmFja3dhcmRzPWZ1bmN0aW9uKCl7cmV0dXJuIEgodGhpcyl9KTpIPXUuaXNCYWNrd2FyZHM9ZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2V9O3UudG9TdHJpbmc9ZnVuY3Rpb24oKXtmb3IodmFyIGE9W10sYj0wLGM9dGhpcy5yYW5nZUNvdW50O2I8YzsrK2IpYVtiXT0iIit0aGlzLl9yYW5nZXNbYl07cmV0dXJuIGEuam9pbigiIil9O3UuY29sbGFwc2U9ZnVuY3Rpb24oYSxjKXtxKHRoaXMsYSk7dmFyIGQ9Yi5jcmVhdGVSYW5nZShtLmdldERvY3VtZW50KGEpKTtkLmNvbGxhcHNlVG9Qb2ludChhLApjKTt0aGlzLnJlbW92ZUFsbFJhbmdlcygpO3RoaXMuYWRkUmFuZ2UoZCk7dGhpcy5pc0NvbGxhcHNlZD10cnVlfTt1LmNvbGxhcHNlVG9TdGFydD1mdW5jdGlvbigpe2lmKHRoaXMucmFuZ2VDb3VudCl7dmFyIGE9dGhpcy5fcmFuZ2VzWzBdO3RoaXMuY29sbGFwc2UoYS5zdGFydENvbnRhaW5lcixhLnN0YXJ0T2Zmc2V0KX1lbHNlIHRocm93IG5ldyB6KCJJTlZBTElEX1NUQVRFX0VSUiIpO307dS5jb2xsYXBzZVRvRW5kPWZ1bmN0aW9uKCl7aWYodGhpcy5yYW5nZUNvdW50KXt2YXIgYT10aGlzLl9yYW5nZXNbdGhpcy5yYW5nZUNvdW50LTFdO3RoaXMuY29sbGFwc2UoYS5lbmRDb250YWluZXIsYS5lbmRPZmZzZXQpfWVsc2UgdGhyb3cgbmV3IHooIklOVkFMSURfU1RBVEVfRVJSIik7fTt1LnNlbGVjdEFsbENoaWxkcmVuPWZ1bmN0aW9uKGEpe3EodGhpcyxhKTt2YXIgYz1iLmNyZWF0ZVJhbmdlKG0uZ2V0RG9jdW1lbnQoYSkpO2Muc2VsZWN0Tm9kZUNvbnRlbnRzKGEpO3RoaXMucmVtb3ZlQWxsUmFuZ2VzKCk7CnRoaXMuYWRkUmFuZ2UoYyl9O3UuZGVsZXRlRnJvbURvY3VtZW50PWZ1bmN0aW9uKCl7aWYobCYmdiYmdGhpcy5kb2NTZWxlY3Rpb24udHlwZT09IkNvbnRyb2wiKXtmb3IodmFyIGE9dGhpcy5kb2NTZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKSxiO2EubGVuZ3RoOyl7Yj1hLml0ZW0oMCk7YS5yZW1vdmUoYik7Yi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpfXRoaXMucmVmcmVzaCgpfWVsc2UgaWYodGhpcy5yYW5nZUNvdW50KXthPXRoaXMuZ2V0QWxsUmFuZ2VzKCk7dGhpcy5yZW1vdmVBbGxSYW5nZXMoKTtiPTA7Zm9yKHZhciBjPWEubGVuZ3RoO2I8YzsrK2IpYVtiXS5kZWxldGVDb250ZW50cygpO3RoaXMuYWRkUmFuZ2UoYVtjLTFdKX19O3UuZ2V0QWxsUmFuZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jhbmdlcy5zbGljZSgwKX07dS5zZXRTaW5nbGVSYW5nZT1mdW5jdGlvbihhKXt0aGlzLnNldFJhbmdlcyhbYV0pfTt1LmNvbnRhaW5zTm9kZT1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0KMCxkPXRoaXMuX3Jhbmdlcy5sZW5ndGg7YzxkOysrYylpZih0aGlzLl9yYW5nZXNbY10uY29udGFpbnNOb2RlKGEsYikpcmV0dXJuIHRydWU7cmV0dXJuIGZhbHNlfTt1LnRvSHRtbD1mdW5jdGlvbigpe3ZhciBhPSIiO2lmKHRoaXMucmFuZ2VDb3VudCl7Zm9yKHZhciBhPXguZ2V0UmFuZ2VEb2N1bWVudCh0aGlzLl9yYW5nZXNbMF0pLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGI9MCxjPXRoaXMuX3Jhbmdlcy5sZW5ndGg7YjxjOysrYilhLmFwcGVuZENoaWxkKHRoaXMuX3Jhbmdlc1tiXS5jbG9uZUNvbnRlbnRzKCkpO2E9YS5pbm5lckhUTUx9cmV0dXJuIGF9O3UuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiJXcmFwcGVkU2VsZWN0aW9uIn07dS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcyl9O3UuZGV0YWNoPWZ1bmN0aW9uKCl7dGhpcy53aW49dGhpcy5hbmNob3JOb2RlPXRoaXMuZm9jdXNOb2RlPXRoaXMud2luLl9yYW5neVNlbGVjdGlvbj1udWxsfTtuLmluc3BlY3Q9CnI7Yi5TZWxlY3Rpb249bjtiLnNlbGVjdGlvblByb3RvdHlwZT11O2IuYWRkQ3JlYXRlTWlzc2luZ05hdGl2ZUFwaUxpc3RlbmVyKGZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhLmdldFNlbGVjdGlvbj09InVuZGVmaW5lZCIpYS5nZXRTZWxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gYi5nZXRTZWxlY3Rpb24odGhpcyl9O2E9bnVsbH0pfSk7dmFyIEJhc2U9ZnVuY3Rpb24oKXt9OwpCYXNlLmV4dGVuZD1mdW5jdGlvbihiLGMpe3ZhciBhPUJhc2UucHJvdG90eXBlLmV4dGVuZDtCYXNlLl9wcm90b3R5cGluZz0hMDt2YXIgZD1uZXcgdGhpczthLmNhbGwoZCxiKTtkLmJhc2U9ZnVuY3Rpb24oKXt9O2RlbGV0ZSBCYXNlLl9wcm90b3R5cGluZzt2YXIgZT1kLmNvbnN0cnVjdG9yLGY9ZC5jb25zdHJ1Y3Rvcj1mdW5jdGlvbigpe2lmKCFCYXNlLl9wcm90b3R5cGluZylpZih0aGlzLl9jb25zdHJ1Y3Rpbmd8fHRoaXMuY29uc3RydWN0b3I9PWYpdGhpcy5fY29uc3RydWN0aW5nPSEwLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGRlbGV0ZSB0aGlzLl9jb25zdHJ1Y3Rpbmc7ZWxzZSBpZihudWxsIT1hcmd1bWVudHNbMF0pcmV0dXJuKGFyZ3VtZW50c1swXS5leHRlbmR8fGEpLmNhbGwoYXJndW1lbnRzWzBdLGQpfTtmLmFuY2VzdG9yPXRoaXM7Zi5leHRlbmQ9dGhpcy5leHRlbmQ7Zi5mb3JFYWNoPXRoaXMuZm9yRWFjaDtmLmltcGxlbWVudD10aGlzLmltcGxlbWVudDtmLnByb3RvdHlwZT0KZDtmLnRvU3RyaW5nPXRoaXMudG9TdHJpbmc7Zi52YWx1ZU9mPWZ1bmN0aW9uKGEpe3JldHVybiJvYmplY3QiPT1hP2Y6ZS52YWx1ZU9mKCl9O2EuY2FsbChmLGMpOyJmdW5jdGlvbiI9PXR5cGVvZiBmLmluaXQmJmYuaW5pdCgpO3JldHVybiBmfTsKQmFzZS5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbihiLGMpe2lmKDE8YXJndW1lbnRzLmxlbmd0aCl7dmFyIGE9dGhpc1tiXTtpZihhJiYiZnVuY3Rpb24iPT10eXBlb2YgYyYmKCFhLnZhbHVlT2Z8fGEudmFsdWVPZigpIT1jLnZhbHVlT2YoKSkmJi9cYmJhc2VcYi8udGVzdChjKSl7dmFyIGQ9Yy52YWx1ZU9mKCksYz1mdW5jdGlvbigpe3ZhciBiPXRoaXMuYmFzZXx8QmFzZS5wcm90b3R5cGUuYmFzZTt0aGlzLmJhc2U9YTt2YXIgYz1kLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmJhc2U9YjtyZXR1cm4gY307Yy52YWx1ZU9mPWZ1bmN0aW9uKGEpe3JldHVybiJvYmplY3QiPT1hP2M6ZH07Yy50b1N0cmluZz1CYXNlLnRvU3RyaW5nfXRoaXNbYl09Y31lbHNlIGlmKGIpe3ZhciBlPUJhc2UucHJvdG90eXBlLmV4dGVuZDshQmFzZS5fcHJvdG90eXBpbmcmJiJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzJiYoZT10aGlzLmV4dGVuZHx8ZSk7Zm9yKHZhciBmPXt0b1NvdXJjZTpudWxsfSwKZz1bImNvbnN0cnVjdG9yIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl0saT1CYXNlLl9wcm90b3R5cGluZz8wOjE7aD1nW2krK107KWJbaF0hPWZbaF0mJmUuY2FsbCh0aGlzLGgsYltoXSk7Zm9yKHZhciBoIGluIGIpZltoXXx8ZS5jYWxsKHRoaXMsaCxiW2hdKX1yZXR1cm4gdGhpc319OwpCYXNlPUJhc2UuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihiKXt0aGlzLmV4dGVuZChiKX19LHthbmNlc3RvcjpPYmplY3QsdmVyc2lvbjoiMS4xIixmb3JFYWNoOmZ1bmN0aW9uKGIsYyxhKXtmb3IodmFyIGQgaW4gYil2b2lkIDA9PT10aGlzLnByb3RvdHlwZVtkXSYmYy5jYWxsKGEsYltkXSxkLGIpfSxpbXBsZW1lbnQ6ZnVuY3Rpb24oKXtmb3IodmFyIGI9MDtiPGFyZ3VtZW50cy5sZW5ndGg7YisrKWlmKCJmdW5jdGlvbiI9PXR5cGVvZiBhcmd1bWVudHNbYl0pYXJndW1lbnRzW2JdKHRoaXMucHJvdG90eXBlKTtlbHNlIHRoaXMucHJvdG90eXBlLmV4dGVuZChhcmd1bWVudHNbYl0pO3JldHVybiB0aGlzfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiIiK3RoaXMudmFsdWVPZigpfX0pOwp3eXNpaHRtbDUuYnJvd3Nlcj1mdW5jdGlvbigpe3ZhciBiPW5hdmlnYXRvci51c2VyQWdlbnQsYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxhPS0xIT09Yi5pbmRleE9mKCJNU0lFIikmJi0xPT09Yi5pbmRleE9mKCJPcGVyYSIpLGQ9LTEhPT1iLmluZGV4T2YoIkdlY2tvIikmJi0xPT09Yi5pbmRleE9mKCJLSFRNTCIpLGU9LTEhPT1iLmluZGV4T2YoIkFwcGxlV2ViS2l0LyIpLGY9LTEhPT1iLmluZGV4T2YoIkNocm9tZS8iKSxnPS0xIT09Yi5pbmRleE9mKCJPcGVyYS8iKTtyZXR1cm57VVNFUl9BR0VOVDpiLHN1cHBvcnRlZDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuVVNFUl9BR0VOVC50b0xvd2VyQ2FzZSgpLGI9ImNvbnRlbnRFZGl0YWJsZSJpbiBjLGQ9ZG9jdW1lbnQuZXhlY0NvbW1hbmQmJmRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZCYmZG9jdW1lbnQucXVlcnlDb21tYW5kU3RhdGUsZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yJiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsLAphPXRoaXMuaXNJb3MoKSYmNT4oL2lwYWR8aXBob25lfGlwb2QvLnRlc3QoYSkmJmEubWF0Y2goLyBvcyAoXGQrKS4rPyBsaWtlIG1hYyBvcyB4Lyl8fFssMF0pWzFdfHwtMSE9PWEuaW5kZXhPZigib3BlcmEgbW9iaSIpfHwtMSE9PWEuaW5kZXhPZigiaHB3b3MvIik7cmV0dXJuIGImJmQmJmUmJiFhfSxpc1RvdWNoRGV2aWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3VwcG9ydHNFdmVudCgidG91Y2htb3ZlIil9LGlzSW9zOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5VU0VSX0FHRU5ULnRvTG93ZXJDYXNlKCk7cmV0dXJuLTEhPT1hLmluZGV4T2YoIndlYmtpdCIpJiYtMSE9PWEuaW5kZXhPZigibW9iaWxlIil9LHN1cHBvcnRzU2FuZGJveGVkSWZyYW1lczpmdW5jdGlvbigpe3JldHVybiBhfSx0aHJvd3NNaXhlZENvbnRlbnRXYXJuaW5nV2hlbklmcmFtZVNyY0lzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hKCJxdWVyeVNlbGVjdG9yImluIGRvY3VtZW50KX0sZGlzcGxheXNDYXJldEluRW1wdHlDb250ZW50RWRpdGFibGVDb3JyZWN0bHk6ZnVuY3Rpb24oKXtyZXR1cm4hZH0sCmhhc0N1cnJlbnRTdHlsZVByb3BlcnR5OmZ1bmN0aW9uKCl7cmV0dXJuImN1cnJlbnRTdHlsZSJpbiBjfSxpbnNlcnRzTGluZUJyZWFrc09uUmV0dXJuOmZ1bmN0aW9uKCl7cmV0dXJuIGR9LHN1cHBvcnRzUGxhY2Vob2xkZXJBdHRyaWJ1dGVPbjpmdW5jdGlvbihhKXtyZXR1cm4icGxhY2Vob2xkZXIiaW4gYX0sc3VwcG9ydHNFdmVudDpmdW5jdGlvbihhKXt2YXIgYjtpZighKGI9Im9uIithIGluIGMpKWMuc2V0QXR0cmlidXRlKCJvbiIrYSwicmV0dXJuOyIpLGI9ImZ1bmN0aW9uIj09PXR5cGVvZiBjWyJvbiIrYV07cmV0dXJuIGJ9LHN1cHBvcnRzRXZlbnRzSW5JZnJhbWVDb3JyZWN0bHk6ZnVuY3Rpb24oKXtyZXR1cm4hZ30sZmlyZXNPbkRyb3BPbmx5V2hlbk9uRHJhZ092ZXJJc0NhbmNlbGxlZDpmdW5jdGlvbigpe3JldHVybiBlfHxkfSxzdXBwb3J0c0RhdGFUcmFuc2ZlcjpmdW5jdGlvbigpe3RyeXtyZXR1cm4gZSYmKHdpbmRvdy5DbGlwYm9hcmR8fHdpbmRvdy5EYXRhVHJhbnNmZXIpLnByb3RvdHlwZS5nZXREYXRhfWNhdGNoKGEpe3JldHVybiExfX0sCnN1cHBvcnRzSFRNTDVUYWdzOmZ1bmN0aW9uKGEpe2E9YS5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmlubmVySFRNTD0iPGFydGljbGU+Zm9vPC9hcnRpY2xlPiI7cmV0dXJuIjxhcnRpY2xlPmZvbzwvYXJ0aWNsZT4iPT09YS5pbm5lckhUTUwudG9Mb3dlckNhc2UoKX0sc3VwcG9ydHNDb21tYW5kOmZ1bmN0aW9uKCl7dmFyIGI9e2Zvcm1hdEJsb2NrOmEsaW5zZXJ0VW5vcmRlcmVkTGlzdDphfHxnfHxlLGluc2VydE9yZGVyZWRMaXN0OmF8fGd8fGV9LGM9e2luc2VydEhUTUw6ZH07cmV0dXJuIGZ1bmN0aW9uKGEsZCl7aWYoIWJbZF0pe3RyeXtyZXR1cm4gYS5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoZCl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gYS5xdWVyeUNvbW1hbmRFbmFibGVkKGQpfWNhdGNoKGYpe3JldHVybiEhY1tkXX19cmV0dXJuITF9fSgpLGRvZXNBdXRvTGlua2luZ0luQ29udGVudEVkaXRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LGNhbkRpc2FibGVBdXRvTGlua2luZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN1cHBvcnRzQ29tbWFuZChkb2N1bWVudCwKIkF1dG9VcmxEZXRlY3QiKX0sY2xlYXJzQ29udGVudEVkaXRhYmxlQ29ycmVjdGx5OmZ1bmN0aW9uKCl7cmV0dXJuIGR8fGd8fGV9LHN1cHBvcnRzR2V0QXR0cmlidXRlQ29ycmVjdGx5OmZ1bmN0aW9uKCl7cmV0dXJuIjEiIT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpLmdldEF0dHJpYnV0ZSgicm93c3BhbiIpfSxjYW5TZWxlY3RJbWFnZXNJbkNvbnRlbnRFZGl0YWJsZTpmdW5jdGlvbigpe3JldHVybiBkfHxhfHxnfSxjbGVhcnNMaXN0c0luQ29udGVudEVkaXRhYmxlQ29ycmVjdGx5OmZ1bmN0aW9uKCl7cmV0dXJuIGR8fGF8fGV9LGF1dG9TY3JvbGxzVG9DYXJldDpmdW5jdGlvbigpe3JldHVybiFlfSxhdXRvQ2xvc2VzVW5jbG9zZWRUYWdzOmZ1bmN0aW9uKCl7dmFyIGE9Yy5jbG9uZU5vZGUoITEpLGI7YS5pbm5lckhUTUw9IjxwPjxkaXY+PC9kaXY+IjthPWEuaW5uZXJIVE1MLnRvTG93ZXJDYXNlKCk7Yj0iPHA+PC9wPjxkaXY+PC9kaXY+Ij09PWF8fCI8cD48ZGl2PjwvZGl2PjwvcD4iPT09CmE7dGhpcy5hdXRvQ2xvc2VzVW5jbG9zZWRUYWdzPWZ1bmN0aW9uKCl7cmV0dXJuIGJ9O3JldHVybiBifSxzdXBwb3J0c05hdGl2ZUdldEVsZW1lbnRzQnlDbGFzc05hbWU6ZnVuY3Rpb24oKXtyZXR1cm4tMSE9PSgiIitkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIil9LHN1cHBvcnRzU2VsZWN0aW9uTW9kaWZ5OmZ1bmN0aW9uKCl7cmV0dXJuImdldFNlbGVjdGlvbiJpbiB3aW5kb3cmJiJtb2RpZnkiaW4gd2luZG93LmdldFNlbGVjdGlvbigpfSxzdXBwb3J0c0NsYXNzTGlzdDpmdW5jdGlvbigpe3JldHVybiJjbGFzc0xpc3QiaW4gY30sbmVlZHNTcGFjZUFmdGVyTGluZUJyZWFrOmZ1bmN0aW9uKCl7cmV0dXJuIGd9LHN1cHBvcnRzU3BlZWNoQXBpT246ZnVuY3Rpb24oYSl7cmV0dXJuIDExPD0oYi5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pfHxbLDBdKVsxXSYmKCJvbndlYmtpdHNwZWVjaGNoYW5nZSJpbiBhfHwic3BlZWNoImluIGEpfSwKY3Jhc2hlc1doZW5EZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihiKXtyZXR1cm4gYSYmKCJYTUxIdHRwUmVxdWVzdCI9PT1ifHwiWERvbWFpblJlcXVlc3QiPT09Yil9LGRvZXNBc3luY0ZvY3VzOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LGhhc1Byb2JsZW1zU2V0dGluZ0NhcmV0QWZ0ZXJJbWc6ZnVuY3Rpb24oKXtyZXR1cm4gYX0saGFzVW5kb0luQ29udGV4dE1lbnU6ZnVuY3Rpb24oKXtyZXR1cm4gZHx8Znx8Z319fSgpOwp3eXNpaHRtbDUubGFuZy5hcnJheT1mdW5jdGlvbihiKXtyZXR1cm57Y29udGFpbnM6ZnVuY3Rpb24oYyl7aWYoYi5pbmRleE9mKXJldHVybi0xIT09Yi5pbmRleE9mKGMpO2Zvcih2YXIgYT0wLGQ9Yi5sZW5ndGg7YTxkO2ErKylpZihiW2FdPT09YylyZXR1cm4hMDtyZXR1cm4hMX0sd2l0aG91dDpmdW5jdGlvbihjKXtmb3IodmFyIGM9d3lzaWh0bWw1LmxhbmcuYXJyYXkoYyksYT1bXSxkPTAsZT1iLmxlbmd0aDtkPGU7ZCsrKWMuY29udGFpbnMoYltkXSl8fGEucHVzaChiW2RdKTtyZXR1cm4gYX0sZ2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciBjPTAsYT1iLmxlbmd0aCxkPVtdO2M8YTtjKyspZC5wdXNoKGJbY10pO3JldHVybiBkfX19Owp3eXNpaHRtbDUubGFuZy5EaXNwYXRjaGVyPUJhc2UuZXh0ZW5kKHtvYnNlcnZlOmZ1bmN0aW9uKGIsYyl7dGhpcy5ldmVudHM9dGhpcy5ldmVudHN8fHt9O3RoaXMuZXZlbnRzW2JdPXRoaXMuZXZlbnRzW2JdfHxbXTt0aGlzLmV2ZW50c1tiXS5wdXNoKGMpO3JldHVybiB0aGlzfSxvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9ic2VydmUuYXBwbHkodGhpcyx3eXNpaHRtbDUubGFuZy5hcnJheShhcmd1bWVudHMpLmdldCgpKX0sZmlyZTpmdW5jdGlvbihiLGMpe3RoaXMuZXZlbnRzPXRoaXMuZXZlbnRzfHx7fTtmb3IodmFyIGE9dGhpcy5ldmVudHNbYl18fFtdLGQ9MDtkPGEubGVuZ3RoO2QrKylhW2RdLmNhbGwodGhpcyxjKTtyZXR1cm4gdGhpc30sc3RvcE9ic2VydmluZzpmdW5jdGlvbihiLGMpe3RoaXMuZXZlbnRzPXRoaXMuZXZlbnRzfHx7fTt2YXIgYT0wLGQsZTtpZihiKXtkPXRoaXMuZXZlbnRzW2JdfHxbXTtmb3IoZT1bXTthPGQubGVuZ3RoO2ErKylkW2FdIT09YyYmYyYmCmUucHVzaChkW2FdKTt0aGlzLmV2ZW50c1tiXT1lfWVsc2UgdGhpcy5ldmVudHM9e307cmV0dXJuIHRoaXN9fSk7d3lzaWh0bWw1Lmxhbmcub2JqZWN0PWZ1bmN0aW9uKGIpe3JldHVybnttZXJnZTpmdW5jdGlvbihjKXtmb3IodmFyIGEgaW4gYyliW2FdPWNbYV07cmV0dXJuIHRoaXN9LGdldDpmdW5jdGlvbigpe3JldHVybiBifSxjbG9uZTpmdW5jdGlvbigpe3ZhciBjPXt9LGE7Zm9yKGEgaW4gYiljW2FdPWJbYV07cmV0dXJuIGN9LGlzQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGIpfX19OwooZnVuY3Rpb24oKXt2YXIgYj0vXlxzKy8sYz0vXHMrJC87d3lzaWh0bWw1Lmxhbmcuc3RyaW5nPWZ1bmN0aW9uKGEpe2E9IiIrYTtyZXR1cm57dHJpbTpmdW5jdGlvbigpe3JldHVybiBhLnJlcGxhY2UoYiwiIikucmVwbGFjZShjLCIiKX0saW50ZXJwb2xhdGU6ZnVuY3Rpb24oYil7Zm9yKHZhciBjIGluIGIpYT10aGlzLnJlcGxhY2UoIiN7IitjKyJ9IikuYnkoYltjXSk7cmV0dXJuIGF9LHJlcGxhY2U6ZnVuY3Rpb24oYil7cmV0dXJue2J5OmZ1bmN0aW9uKGMpe3JldHVybiBhLnNwbGl0KGIpLmpvaW4oYyl9fX19fX0pKCk7CihmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBhLnJlcGxhY2UoZSxmdW5jdGlvbihhLGIpe3ZhciBjPShiLm1hdGNoKGYpfHxbXSlbMV18fCIiLGQ9aVtjXSxiPWIucmVwbGFjZShmLCIiKTtiLnNwbGl0KGQpLmxlbmd0aD5iLnNwbGl0KGMpLmxlbmd0aCYmKGIrPWMsYz0iIik7dmFyIGU9ZD1iO2IubGVuZ3RoPmcmJihlPWUuc3Vic3RyKDAsZykrIi4uLiIpOyJ3d3cuIj09PWQuc3Vic3RyKDAsNCkmJihkPSJodHRwOi8vIitkKTtyZXR1cm4nPGEgaHJlZj0iJytkKyciPicrZSsiPC9hPiIrY30pfWZ1bmN0aW9uIGEoaCl7aWYoIWQuY29udGFpbnMoaC5ub2RlTmFtZSkpaWYoaC5ub2RlVHlwZT09PWIuVEVYVF9OT0RFJiZoLmRhdGEubWF0Y2goZSkpe3ZhciBmPWgucGFyZW50Tm9kZSxqO2o9Zi5vd25lckRvY3VtZW50O3ZhciBnPWouX3d5c2lodG1sNV90ZW1wRWxlbWVudDtnfHwoZz1qLl93eXNpaHRtbDVfdGVtcEVsZW1lbnQ9ai5jcmVhdGVFbGVtZW50KCJkaXYiKSk7aj0KZztqLmlubmVySFRNTD0iPHNwYW4+PC9zcGFuPiIrYyhoLmRhdGEpO2ZvcihqLnJlbW92ZUNoaWxkKGouZmlyc3RDaGlsZCk7ai5maXJzdENoaWxkOylmLmluc2VydEJlZm9yZShqLmZpcnN0Q2hpbGQsaCk7Zi5yZW1vdmVDaGlsZChoKX1lbHNle2Y9Yi5sYW5nLmFycmF5KGguY2hpbGROb2RlcykuZ2V0KCk7aj1mLmxlbmd0aDtmb3IoZz0wO2c8ajtnKyspYShmW2ddKTtyZXR1cm4gaH19dmFyIGQ9Yi5sYW5nLmFycmF5KCJDT0RFIFBSRSBBIFNDUklQVCBIRUFEIFRJVExFIFNUWUxFIi5zcGxpdCgiICIpKSxlPS8oKGh0dHBzPzpcL1wvfHd3d1wuKVteXHM8XXszLH0pL2dpLGY9LyhbXlx3XC9cLV0oLD8pKSQvaSxnPTEwMCxpPXsiKSI6IigiLCJdIjoiWyIsIn0iOiJ7In07Yi5kb20uYXV0b0xpbms9ZnVuY3Rpb24oYil7dmFyIGM7YTp7Yz1iO2Zvcih2YXIgZTtjLnBhcmVudE5vZGU7KXtjPWMucGFyZW50Tm9kZTtlPWMubm9kZU5hbWU7aWYoZC5jb250YWlucyhlKSl7Yz0hMDticmVhayBhfWlmKCJib2R5Ij09PQplKWJyZWFrfWM9ITF9aWYoYylyZXR1cm4gYjtiPT09Yi5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmKGI9Yi5vd25lckRvY3VtZW50LmJvZHkpO3JldHVybiBhKGIpfTtiLmRvbS5hdXRvTGluay5VUkxfUkVHX0VYUD1lfSkod3lzaWh0bWw1KTsKKGZ1bmN0aW9uKGIpe3ZhciBjPWIuYnJvd3Nlci5zdXBwb3J0c0NsYXNzTGlzdCgpLGE9Yi5kb207YS5hZGRDbGFzcz1mdW5jdGlvbihiLGUpe2lmKGMpcmV0dXJuIGIuY2xhc3NMaXN0LmFkZChlKTthLmhhc0NsYXNzKGIsZSl8fChiLmNsYXNzTmFtZSs9IiAiK2UpfTthLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKGEsYil7aWYoYylyZXR1cm4gYS5jbGFzc0xpc3QucmVtb3ZlKGIpO2EuY2xhc3NOYW1lPWEuY2xhc3NOYW1lLnJlcGxhY2UoUmVnRXhwKCIoXnxcXHMrKSIrYisiKFxccyt8JCkiKSwiICIpfTthLmhhc0NsYXNzPWZ1bmN0aW9uKGEsYil7aWYoYylyZXR1cm4gYS5jbGFzc0xpc3QuY29udGFpbnMoYik7dmFyIGY9YS5jbGFzc05hbWU7cmV0dXJuIDA8Zi5sZW5ndGgmJihmPT1ifHxSZWdFeHAoIihefFxccykiK2IrIihcXHN8JCkiKS50ZXN0KGYpKX19KSh3eXNpaHRtbDUpOwp3eXNpaHRtbDUuZG9tLmNvbnRhaW5zPWZ1bmN0aW9uKCl7dmFyIGI9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2lmKGIuY29udGFpbnMpcmV0dXJuIGZ1bmN0aW9uKGIsYSl7YS5ub2RlVHlwZSE9PXd5c2lodG1sNS5FTEVNRU5UX05PREUmJihhPWEucGFyZW50Tm9kZSk7cmV0dXJuIGIhPT1hJiZiLmNvbnRhaW5zKGEpfTtpZihiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXJldHVybiBmdW5jdGlvbihiLGEpe3JldHVybiEhKGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSkmMTYpfX0oKTsKd3lzaWh0bWw1LmRvbS5jb252ZXJ0VG9MaXN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihiLGEpe3ZhciBkPWIuY3JlYXRlRWxlbWVudCgibGkiKTthLmFwcGVuZENoaWxkKGQpO3JldHVybiBkfXJldHVybiBmdW5jdGlvbihjLGEpe2lmKCJVTCI9PT1jLm5vZGVOYW1lfHwiT0wiPT09Yy5ub2RlTmFtZXx8Ik1FTlUiPT09Yy5ub2RlTmFtZSlyZXR1cm4gYzt2YXIgZD1jLm93bmVyRG9jdW1lbnQsZT1kLmNyZWF0ZUVsZW1lbnQoYSksZj1jLnF1ZXJ5U2VsZWN0b3JBbGwoImJyIiksZz1mLmxlbmd0aCxpLGgsayxqLG47Zm9yKG49MDtuPGc7bisrKWZvcihpPWZbbl07KGg9aS5wYXJlbnROb2RlKSYmaCE9PWMmJmgubGFzdENoaWxkPT09aTspe2lmKCJibG9jayI9PT13eXNpaHRtbDUuZG9tLmdldFN0eWxlKCJkaXNwbGF5IikuZnJvbShoKSl7aC5yZW1vdmVDaGlsZChpKTticmVha313eXNpaHRtbDUuZG9tLmluc2VydChpKS5hZnRlcihpLnBhcmVudE5vZGUpfWY9d3lzaWh0bWw1LmxhbmcuYXJyYXkoYy5jaGlsZE5vZGVzKS5nZXQoKTsKZz1mLmxlbmd0aDtmb3Iobj0wO248ZztuKyspaj1qfHxiKGQsZSksaT1mW25dLGg9ImJsb2NrIj09PXd5c2lodG1sNS5kb20uZ2V0U3R5bGUoImRpc3BsYXkiKS5mcm9tKGkpLGs9IkJSIj09PWkubm9kZU5hbWUsaD8oaj1qLmZpcnN0Q2hpbGQ/YihkLGUpOmosai5hcHBlbmRDaGlsZChpKSxqPW51bGwpOms/aj1qLmZpcnN0Q2hpbGQ/bnVsbDpqOmouYXBwZW5kQ2hpbGQoaSk7Yy5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlLGMpO3JldHVybiBlfX0oKTt3eXNpaHRtbDUuZG9tLmNvcHlBdHRyaWJ1dGVzPWZ1bmN0aW9uKGIpe3JldHVybntmcm9tOmZ1bmN0aW9uKGMpe3JldHVybnt0bzpmdW5jdGlvbihhKXtmb3IodmFyIGQsZT0wLGY9Yi5sZW5ndGg7ZTxmO2UrKylkPWJbZV0sInVuZGVmaW5lZCIhPT10eXBlb2YgY1tkXSYmIiIhPT1jW2RdJiYoYVtkXT1jW2RdKTtyZXR1cm57YW5kVG86YXJndW1lbnRzLmNhbGxlZX19fX19fTsKKGZ1bmN0aW9uKGIpe3ZhciBjPVsiLXdlYmtpdC1ib3gtc2l6aW5nIiwiLW1vei1ib3gtc2l6aW5nIiwiLW1zLWJveC1zaXppbmciLCJib3gtc2l6aW5nIl0sYT1mdW5jdGlvbihhKXt2YXIgZTthOmZvcih2YXIgZj0wLGc9Yy5sZW5ndGg7ZjxnO2YrKylpZigiYm9yZGVyLWJveCI9PT1iLmdldFN0eWxlKGNbZl0pLmZyb20oYSkpe2U9Y1tmXTticmVhayBhfXJldHVybiBlP3BhcnNlSW50KGIuZ2V0U3R5bGUoIndpZHRoIikuZnJvbShhKSwxMCk8YS5vZmZzZXRXaWR0aDohMX07Yi5jb3B5U3R5bGVzPWZ1bmN0aW9uKGQpe3JldHVybntmcm9tOmZ1bmN0aW9uKGUpe2EoZSkmJihkPXd5c2lodG1sNS5sYW5nLmFycmF5KGQpLndpdGhvdXQoYykpO2Zvcih2YXIgZj0iIixnPWQubGVuZ3RoLGk9MCxoO2k8ZztpKyspaD1kW2ldLGYrPWgrIjoiK2IuZ2V0U3R5bGUoaCkuZnJvbShlKSsiOyI7cmV0dXJue3RvOmZ1bmN0aW9uKGEpe2Iuc2V0U3R5bGVzKGYpLm9uKGEpO3JldHVybnthbmRUbzphcmd1bWVudHMuY2FsbGVlfX19fX19fSkod3lzaWh0bWw1LmRvbSk7CihmdW5jdGlvbihiKXtiLmRvbS5kZWxlZ2F0ZT1mdW5jdGlvbihjLGEsZCxlKXtyZXR1cm4gYi5kb20ub2JzZXJ2ZShjLGQsZnVuY3Rpb24oZCl7Zm9yKHZhciBnPWQudGFyZ2V0LGk9Yi5sYW5nLmFycmF5KGMucXVlcnlTZWxlY3RvckFsbChhKSk7ZyYmZyE9PWM7KXtpZihpLmNvbnRhaW5zKGcpKXtlLmNhbGwoZyxkKTticmVha31nPWcucGFyZW50Tm9kZX19KX19KSh3eXNpaHRtbDUpOwp3eXNpaHRtbDUuZG9tLmdldEFzRG9tPWZ1bmN0aW9uKCl7dmFyIGI9ImFiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBiZGkgY2FudmFzIGNvbW1hbmQgZGF0YWxpc3QgZGV0YWlscyBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgaGVhZGVyIGhncm91cCBrZXlnZW4gbWFyayBtZXRlciBuYXYgb3V0cHV0IHByb2dyZXNzIHJwIHJ0IHJ1Ynkgc3ZnIHNlY3Rpb24gc291cmNlIHN1bW1hcnkgdGltZSB0cmFjayB2aWRlbyB3YnIiLnNwbGl0KCIgIik7cmV0dXJuIGZ1bmN0aW9uKGMsYSl7dmFyIGE9YXx8ZG9jdW1lbnQsZDtpZigib2JqZWN0Ij09PXR5cGVvZiBjJiZjLm5vZGVUeXBlKWQ9YS5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLmFwcGVuZENoaWxkKGMpO2Vsc2UgaWYod3lzaWh0bWw1LmJyb3dzZXIuc3VwcG9ydHNIVE1MNVRhZ3MoYSkpZD1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuaW5uZXJIVE1MPWM7ZWxzZXtkPWE7aWYoIWQuX3d5c2lodG1sNV9zdXBwb3J0c0hUTUw1VGFncyl7Zm9yKHZhciBlPQowLGY9Yi5sZW5ndGg7ZTxmO2UrKylkLmNyZWF0ZUVsZW1lbnQoYltlXSk7ZC5fd3lzaWh0bWw1X3N1cHBvcnRzSFRNTDVUYWdzPSEwfWQ9YTtlPWQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZS5zdHlsZS5kaXNwbGF5PSJub25lIjtkLmJvZHkuYXBwZW5kQ2hpbGQoZSk7dHJ5e2UuaW5uZXJIVE1MPWN9Y2F0Y2goZyl7fWQuYm9keS5yZW1vdmVDaGlsZChlKTtkPWV9cmV0dXJuIGR9fSgpOwp3eXNpaHRtbDUuZG9tLmdldFBhcmVudEVsZW1lbnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKGIsYSl7cmV0dXJuIWF8fCFhLmxlbmd0aD8hMDoic3RyaW5nIj09PXR5cGVvZiBhP2I9PT1hOnd5c2lodG1sNS5sYW5nLmFycmF5KGEpLmNvbnRhaW5zKGIpfXJldHVybiBmdW5jdGlvbihjLGEsZCl7ZD1kfHw1MDtpZihhLmNsYXNzTmFtZXx8YS5jbGFzc1JlZ0V4cCl7YTp7Zm9yKHZhciBlPWEubm9kZU5hbWUsZj1hLmNsYXNzTmFtZSxhPWEuY2xhc3NSZWdFeHA7ZC0tJiZjJiYiQk9EWSIhPT1jLm5vZGVOYW1lOyl7dmFyIGc7aWYoZz1jLm5vZGVUeXBlPT09d3lzaWh0bWw1LkVMRU1FTlRfTk9ERSlpZihnPWIoYy5ub2RlTmFtZSxlKSl7Zz1mO3ZhciBpPShjLmNsYXNzTmFtZXx8IiIpLm1hdGNoKGEpfHxbXTtnPSFnPyEhaS5sZW5ndGg6aVtpLmxlbmd0aC0xXT09PWd9aWYoZylicmVhayBhO2M9Yy5wYXJlbnROb2RlfWM9bnVsbH1yZXR1cm4gY31hOntlPWEubm9kZU5hbWU7Zm9yKGY9ZDtmLS0mJgpjJiYiQk9EWSIhPT1jLm5vZGVOYW1lOyl7aWYoYihjLm5vZGVOYW1lLGUpKWJyZWFrIGE7Yz1jLnBhcmVudE5vZGV9Yz1udWxsfXJldHVybiBjfX0oKTsKd3lzaWh0bWw1LmRvbS5nZXRTdHlsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGIoYil7cmV0dXJuIGIucmVwbGFjZShhLGZ1bmN0aW9uKGEpe3JldHVybiBhLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpfSl9dmFyIGM9eyJmbG9hdCI6InN0eWxlRmxvYXQiaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGU/InN0eWxlRmxvYXQiOiJjc3NGbG9hdCJ9LGE9L1wtW2Etel0vZztyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJue2Zyb206ZnVuY3Rpb24oZSl7aWYoZS5ub2RlVHlwZT09PXd5c2lodG1sNS5FTEVNRU5UX05PREUpe3ZhciBmPWUub3duZXJEb2N1bWVudCxnPWNbYV18fGIoYSksaT1lLnN0eWxlLGg9ZS5jdXJyZW50U3R5bGUsaz1pW2ddO2lmKGspcmV0dXJuIGs7aWYoaCl0cnl7cmV0dXJuIGhbZ119Y2F0Y2goail7fXZhciBnPWYuZGVmYXVsdFZpZXd8fGYucGFyZW50V2luZG93LGY9KCJoZWlnaHQiPT09YXx8IndpZHRoIj09PWEpJiYiVEVYVEFSRUEiPT09ZS5ub2RlTmFtZSwKbjtpZihnLmdldENvbXB1dGVkU3R5bGUpcmV0dXJuIGYmJihuPWkub3ZlcmZsb3csaS5vdmVyZmxvdz0iaGlkZGVuIiksZT1nLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGEpLGYmJihpLm92ZXJmbG93PW58fCIiKSxlfX19fX0oKTt3eXNpaHRtbDUuZG9tLmhhc0VsZW1lbnRXaXRoVGFnTmFtZT1mdW5jdGlvbigpe3ZhciBiPXt9LGM9MTtyZXR1cm4gZnVuY3Rpb24oYSxkKXt2YXIgZT0oYS5fd3lzaWh0bWw1X2lkZW50aWZpZXJ8fChhLl93eXNpaHRtbDVfaWRlbnRpZmllcj1jKyspKSsiOiIrZCxmPWJbZV07Znx8KGY9YltlXT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKGQpKTtyZXR1cm4gMDxmLmxlbmd0aH19KCk7CihmdW5jdGlvbihiKXt2YXIgYz17fSxhPTE7Yi5kb20uaGFzRWxlbWVudFdpdGhDbGFzc05hbWU9ZnVuY3Rpb24oZCxlKXtpZighYi5icm93c2VyLnN1cHBvcnRzTmF0aXZlR2V0RWxlbWVudHNCeUNsYXNzTmFtZSgpKXJldHVybiEhZC5xdWVyeVNlbGVjdG9yKCIuIitlKTt2YXIgZj0oZC5fd3lzaWh0bWw1X2lkZW50aWZpZXJ8fChkLl93eXNpaHRtbDVfaWRlbnRpZmllcj1hKyspKSsiOiIrZSxnPWNbZl07Z3x8KGc9Y1tmXT1kLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZSkpO3JldHVybiAwPGcubGVuZ3RofX0pKHd5c2lodG1sNSk7d3lzaWh0bWw1LmRvbS5pbnNlcnQ9ZnVuY3Rpb24oYil7cmV0dXJue2FmdGVyOmZ1bmN0aW9uKGMpe2MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYixjLm5leHRTaWJsaW5nKX0sYmVmb3JlOmZ1bmN0aW9uKGMpe2MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYixjKX0saW50bzpmdW5jdGlvbihjKXtjLmFwcGVuZENoaWxkKGIpfX19Owp3eXNpaHRtbDUuZG9tLmluc2VydENTUz1mdW5jdGlvbihiKXtiPWIuam9pbigiXG4iKTtyZXR1cm57aW50bzpmdW5jdGlvbihjKXt2YXIgYT1jLmhlYWR8fGMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSxkPWMuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtkLnR5cGU9InRleHQvY3NzIjtkLnN0eWxlU2hlZXQ/ZC5zdHlsZVNoZWV0LmNzc1RleHQ9YjpkLmFwcGVuZENoaWxkKGMuY3JlYXRlVGV4dE5vZGUoYikpO2EmJmEuYXBwZW5kQ2hpbGQoZCl9fX07Cnd5c2lodG1sNS5kb20ub2JzZXJ2ZT1mdW5jdGlvbihiLGMsYSl7Zm9yKHZhciBjPSJzdHJpbmciPT09dHlwZW9mIGM/W2NdOmMsZCxlLGY9MCxnPWMubGVuZ3RoO2Y8ZztmKyspZT1jW2ZdLGIuYWRkRXZlbnRMaXN0ZW5lcj9iLmFkZEV2ZW50TGlzdGVuZXIoZSxhLCExKTooZD1mdW5jdGlvbihjKXsidGFyZ2V0ImluIGN8fChjLnRhcmdldD1jLnNyY0VsZW1lbnQpO2MucHJldmVudERlZmF1bHQ9Yy5wcmV2ZW50RGVmYXVsdHx8ZnVuY3Rpb24oKXt0aGlzLnJldHVyblZhbHVlPWZhbHNlfTtjLnN0b3BQcm9wYWdhdGlvbj1jLnN0b3BQcm9wYWdhdGlvbnx8ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbEJ1YmJsZT10cnVlfTthLmNhbGwoYixjKX0sYi5hdHRhY2hFdmVudCgib24iK2UsZCkpO3JldHVybntzdG9wOmZ1bmN0aW9uKCl7Zm9yKHZhciBlLGg9MCxmPWMubGVuZ3RoO2g8ZjtoKyspZT1jW2hdLGIucmVtb3ZlRXZlbnRMaXN0ZW5lcj9iLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxhLCExKToKYi5kZXRhY2hFdmVudCgib24iK2UsZCl9fX07Cnd5c2lodG1sNS5kb20ucGFyc2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKGMsZSl7dmFyIGg9Yy5jaGlsZE5vZGVzLGY9aC5sZW5ndGgsZztnPWFbYy5ub2RlVHlwZV07dmFyIGs9MDtnPWcmJmcoYyk7aWYoIWcpcmV0dXJuIG51bGw7Zm9yKGs9MDtrPGY7aysrKShuZXdDaGlsZD1iKGhba10sZSkpJiZnLmFwcGVuZENoaWxkKG5ld0NoaWxkKTtyZXR1cm4gZSYmMT49Zy5jaGlsZE5vZGVzLmxlbmd0aCYmZy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ZCYmIWcuYXR0cmlidXRlcy5sZW5ndGg/Zy5maXJzdENoaWxkOmd9ZnVuY3Rpb24gYyhhLGIpe3ZhciBiPWIudG9Mb3dlckNhc2UoKSxjO2lmKGM9IklNRyI9PWEubm9kZU5hbWUpaWYoYz0ic3JjIj09Yil7dmFyIGQ7dHJ5e2Q9YS5jb21wbGV0ZSYmIWEubW96TWF0Y2hlc1NlbGVjdG9yKCI6LW1vei1icm9rZW4iKX1jYXRjaChlKXthLmNvbXBsZXRlJiYiY29tcGxldGUiPT09YS5yZWFkeVN0YXRlJiYoZD0hMCl9Yz0hMD09PWR9cmV0dXJuIGM/CmEuc3JjOmkmJiJvdXRlckhUTUwiaW4gYT8tMSE9YS5vdXRlckhUTUwudG9Mb3dlckNhc2UoKS5pbmRleE9mKCIgIitiKyI9Iik/YS5nZXRBdHRyaWJ1dGUoYik6bnVsbDphLmdldEF0dHJpYnV0ZShiKX12YXIgYT17MTpmdW5jdGlvbihhKXt2YXIgYixmLGk9Zy50YWdzO2Y9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2I9YS5zY29wZU5hbWU7aWYoYS5fd3lzaWh0bWw1KXJldHVybiBudWxsO2EuX3d5c2lodG1sNT0xO2lmKCJ3eXNpaHRtbDUtdGVtcCI9PT1hLmNsYXNzTmFtZSlyZXR1cm4gbnVsbDtiJiYiSFRNTCIhPWImJihmPWIrIjoiK2YpOyJvdXRlckhUTUwiaW4gYSYmIXd5c2lodG1sNS5icm93c2VyLmF1dG9DbG9zZXNVbmNsb3NlZFRhZ3MoKSYmKCJQIj09PWEubm9kZU5hbWUmJiI8L3A+IiE9PWEub3V0ZXJIVE1MLnNsaWNlKC00KS50b0xvd2VyQ2FzZSgpKSYmKGY9ImRpdiIpO2lmKGYgaW4gaSl7Yj1pW2ZdO2lmKCFifHxiLnJlbW92ZSlyZXR1cm4gbnVsbDtiPSJzdHJpbmciPT09CnR5cGVvZiBiP3tyZW5hbWVfdGFnOmJ9OmJ9ZWxzZSBpZihhLmZpcnN0Q2hpbGQpYj17cmVuYW1lX3RhZzpkfTtlbHNlIHJldHVybiBudWxsO2Y9YS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYi5yZW5hbWVfdGFnfHxmKTt2YXIgaT17fSxyPWIuc2V0X2NsYXNzLG09Yi5hZGRfY2xhc3Mscz1iLnNldF9hdHRyaWJ1dGVzLHg9Yi5jaGVja19hdHRyaWJ1dGVzLG89Zy5jbGFzc2VzLHo9MCx3PVtdO2I9W107dmFyIHk9W10sQT1bXSx0O3MmJihpPXd5c2lodG1sNS5sYW5nLm9iamVjdChzKS5jbG9uZSgpKTtpZih4KWZvcih0IGluIHgpaWYocz1oW3hbdF1dKXM9cyhjKGEsdCkpLCJzdHJpbmciPT09dHlwZW9mIHMmJihpW3RdPXMpO3ImJncucHVzaChyKTtpZihtKWZvcih0IGluIG0paWYocz1rW21bdF1dKXI9cyhjKGEsdCkpLCJzdHJpbmciPT09dHlwZW9mIHImJncucHVzaChyKTtvWyJfd3lzaWh0bWw1LXRlbXAtcGxhY2Vob2xkZXIiXT0xOyhBPWEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSYmCih3PXcuY29uY2F0KEEuc3BsaXQoZSkpKTtmb3IobT13Lmxlbmd0aDt6PG07eisrKWE9d1t6XSxvW2FdJiZiLnB1c2goYSk7Zm9yKG89Yi5sZW5ndGg7by0tOylhPWJbb10sd3lzaWh0bWw1LmxhbmcuYXJyYXkoeSkuY29udGFpbnMoYSl8fHkudW5zaGlmdChhKTt5Lmxlbmd0aCYmKGlbImNsYXNzIl09eS5qb2luKCIgIikpO2Zvcih0IGluIGkpdHJ5e2Yuc2V0QXR0cmlidXRlKHQsaVt0XSl9Y2F0Y2godil7fWkuc3JjJiYoInVuZGVmaW5lZCIhPT10eXBlb2YgaS53aWR0aCYmZi5zZXRBdHRyaWJ1dGUoIndpZHRoIixpLndpZHRoKSwidW5kZWZpbmVkIiE9PXR5cGVvZiBpLmhlaWdodCYmZi5zZXRBdHRyaWJ1dGUoImhlaWdodCIsaS5oZWlnaHQpKTtyZXR1cm4gZn0sMzpmdW5jdGlvbihhKXtyZXR1cm4gYS5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGEuZGF0YSl9fSxkPSJzcGFuIixlPS9ccysvLGY9e3RhZ3M6e30sY2xhc3Nlczp7fX0sZz17fSxpPSF3eXNpaHRtbDUuYnJvd3Nlci5zdXBwb3J0c0dldEF0dHJpYnV0ZUNvcnJlY3RseSgpLApoPXt1cmw6ZnVuY3Rpb24oKXt2YXIgYT0vXmh0dHBzPzpcL1wvL2k7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiFifHwhYi5tYXRjaChhKT9udWxsOmIucmVwbGFjZShhLGZ1bmN0aW9uKGEpe3JldHVybiBhLnRvTG93ZXJDYXNlKCl9KX19KCksYWx0OmZ1bmN0aW9uKCl7dmFyIGE9L1teIGEtejAtOV9cLV0vZ2k7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiFiPyIiOmIucmVwbGFjZShhLCIiKX19KCksbnVtYmVyczpmdW5jdGlvbigpe3ZhciBhPS9cRC9nO3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4oYj0oYnx8IiIpLnJlcGxhY2UoYSwiIikpfHxudWxsfX0oKX0saz17YWxpZ25faW1nOmZ1bmN0aW9uKCl7dmFyIGE9e2xlZnQ6Ind5c2l3eWctZmxvYXQtbGVmdCIscmlnaHQ6Ind5c2l3eWctZmxvYXQtcmlnaHQifTtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGFbKCIiK2IpLnRvTG93ZXJDYXNlKCldfX0oKSxhbGlnbl90ZXh0OmZ1bmN0aW9uKCl7dmFyIGE9e2xlZnQ6Ind5c2l3eWctdGV4dC1hbGlnbi1sZWZ0IiwKcmlnaHQ6Ind5c2l3eWctdGV4dC1hbGlnbi1yaWdodCIsY2VudGVyOiJ3eXNpd3lnLXRleHQtYWxpZ24tY2VudGVyIixqdXN0aWZ5OiJ3eXNpd3lnLXRleHQtYWxpZ24tanVzdGlmeSJ9O3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gYVsoIiIrYikudG9Mb3dlckNhc2UoKV19fSgpLGNsZWFyX2JyOmZ1bmN0aW9uKCl7dmFyIGE9e2xlZnQ6Ind5c2l3eWctY2xlYXItbGVmdCIscmlnaHQ6Ind5c2l3eWctY2xlYXItcmlnaHQiLGJvdGg6Ind5c2l3eWctY2xlYXItYm90aCIsYWxsOiJ3eXNpd3lnLWNsZWFyLWJvdGgifTtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGFbKCIiK2IpLnRvTG93ZXJDYXNlKCldfX0oKSxzaXplX2ZvbnQ6ZnVuY3Rpb24oKXt2YXIgYT17MToid3lzaXd5Zy1mb250LXNpemUteHgtc21hbGwiLDI6Ind5c2l3eWctZm9udC1zaXplLXNtYWxsIiwzOiJ3eXNpd3lnLWZvbnQtc2l6ZS1tZWRpdW0iLDQ6Ind5c2l3eWctZm9udC1zaXplLWxhcmdlIiw1OiJ3eXNpd3lnLWZvbnQtc2l6ZS14LWxhcmdlIiwKNjoid3lzaXd5Zy1mb250LXNpemUteHgtbGFyZ2UiLDc6Ind5c2l3eWctZm9udC1zaXplLXh4LWxhcmdlIiwiLSI6Ind5c2l3eWctZm9udC1zaXplLXNtYWxsZXIiLCIrIjoid3lzaXd5Zy1mb250LXNpemUtbGFyZ2VyIn07cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBhWygiIitiKS5jaGFyQXQoMCldfX0oKX07cmV0dXJuIGZ1bmN0aW9uKGEsYyxkLGUpe3d5c2lodG1sNS5sYW5nLm9iamVjdChnKS5tZXJnZShmKS5tZXJnZShjKS5nZXQoKTtmb3IodmFyIGQ9ZHx8YS5vd25lckRvY3VtZW50fHxkb2N1bWVudCxjPWQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9InN0cmluZyI9PT10eXBlb2YgYSxhPWg/d3lzaWh0bWw1LmRvbS5nZXRBc0RvbShhLGQpOmE7YS5maXJzdENoaWxkOylkPWEuZmlyc3RDaGlsZCxhLnJlbW92ZUNoaWxkKGQpLChkPWIoZCxlKSkmJmMuYXBwZW5kQ2hpbGQoZCk7YS5pbm5lckhUTUw9IiI7YS5hcHBlbmRDaGlsZChjKTtyZXR1cm4gaD93eXNpaHRtbDUucXVpcmtzLmdldENvcnJlY3RJbm5lckhUTUwoYSk6CmF9fSgpO3d5c2lodG1sNS5kb20ucmVtb3ZlRW1wdHlUZXh0Tm9kZXM9ZnVuY3Rpb24oYil7Zm9yKHZhciBjPXd5c2lodG1sNS5sYW5nLmFycmF5KGIuY2hpbGROb2RlcykuZ2V0KCksYT1jLmxlbmd0aCxkPTA7ZDxhO2QrKyliPWNbZF0sYi5ub2RlVHlwZT09PXd5c2lodG1sNS5URVhUX05PREUmJiIiPT09Yi5kYXRhJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYil9O3d5c2lodG1sNS5kb20ucmVuYW1lRWxlbWVudD1mdW5jdGlvbihiLGMpe2Zvcih2YXIgYT1iLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChjKSxkO2Q9Yi5maXJzdENoaWxkOylhLmFwcGVuZENoaWxkKGQpO3d5c2lodG1sNS5kb20uY29weUF0dHJpYnV0ZXMoWyJhbGlnbiIsImNsYXNzTmFtZSJdKS5mcm9tKGIpLnRvKGEpO2IucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoYSxiKTtyZXR1cm4gYX07Cnd5c2lodG1sNS5kb20ucmVwbGFjZVdpdGhDaGlsZE5vZGVzPWZ1bmN0aW9uKGIpe2lmKGIucGFyZW50Tm9kZSlpZihiLmZpcnN0Q2hpbGQpe2Zvcih2YXIgYz1iLm93bmVyRG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2IuZmlyc3RDaGlsZDspYy5hcHBlbmRDaGlsZChiLmZpcnN0Q2hpbGQpO2IucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoYyxiKX1lbHNlIGIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKX07CihmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGEpe3ZhciBiPWEub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpO2EuYXBwZW5kQ2hpbGQoYil9Yi5yZXNvbHZlTGlzdD1mdW5jdGlvbihhKXtpZighKCJNRU5VIiE9PWEubm9kZU5hbWUmJiJVTCIhPT1hLm5vZGVOYW1lJiYiT0wiIT09YS5ub2RlTmFtZSkpe3ZhciBkPWEub3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZT1hLnByZXZpb3VzRWxlbWVudFNpYmxpbmd8fGEucHJldmlvdXNTaWJsaW5nLGYsZyxpO2ZvcihlJiYiYmxvY2siIT09Yi5nZXRTdHlsZSgiZGlzcGxheSIpLmZyb20oZSkmJmMoZCk7aT1hLmZpcnN0Q2hpbGQ7KXtmb3IoZj1pLmxhc3RDaGlsZDtlPWkuZmlyc3RDaGlsZDspZz0oZz1lPT09ZikmJiJibG9jayIhPT1iLmdldFN0eWxlKCJkaXNwbGF5IikuZnJvbShlKSYmIkJSIiE9PWUubm9kZU5hbWUsZC5hcHBlbmRDaGlsZChlKSxnJiZjKGQpO2kucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpKX1hLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGQsCmEpfX19KSh3eXNpaHRtbDUuZG9tKTsKKGZ1bmN0aW9uKGIpe3ZhciBjPWRvY3VtZW50LGE9InBhcmVudCB0b3Agb3BlbmVyIGZyYW1lRWxlbWVudCBmcmFtZXMgbG9jYWxTdG9yYWdlIGdsb2JhbFN0b3JhZ2Ugc2Vzc2lvblN0b3JhZ2UgaW5kZXhlZERCIi5zcGxpdCgiICIpLGQ9Im9wZW4gY2xvc2Ugb3BlbkRpYWxvZyBzaG93TW9kYWxEaWFsb2cgYWxlcnQgY29uZmlybSBwcm9tcHQgb3BlbkRhdGFiYXNlIHBvc3RNZXNzYWdlIFhNTEh0dHBSZXF1ZXN0IFhEb21haW5SZXF1ZXN0Ii5zcGxpdCgiICIpLGU9WyJyZWZlcnJlciIsIndyaXRlIiwib3BlbiIsImNsb3NlIl07Yi5kb20uU2FuZGJveD1CYXNlLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oYSxjKXt0aGlzLmNhbGxiYWNrPWF8fGIuRU1QVFlfRlVOQ1RJT047dGhpcy5jb25maWc9Yi5sYW5nLm9iamVjdCh7fSkubWVyZ2UoYykuZ2V0KCk7dGhpcy5pZnJhbWU9dGhpcy5fY3JlYXRlSWZyYW1lKCl9LGluc2VydEludG86ZnVuY3Rpb24oYSl7InN0cmluZyI9PT10eXBlb2YgYSYmCihhPWMuZ2V0RWxlbWVudEJ5SWQoYSkpO2EuYXBwZW5kQ2hpbGQodGhpcy5pZnJhbWUpfSxnZXRJZnJhbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pZnJhbWV9LGdldFdpbmRvdzpmdW5jdGlvbigpe3RoaXMuX3JlYWR5RXJyb3IoKX0sZ2V0RG9jdW1lbnQ6ZnVuY3Rpb24oKXt0aGlzLl9yZWFkeUVycm9yKCl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldElmcmFtZSgpO2EucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhKX0sX3JlYWR5RXJyb3I6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigid3lzaWh0bWw1LlNhbmRib3g6IFNhbmRib3ggaWZyYW1lIGlzbid0IGxvYWRlZCB5ZXQiKTt9LF9jcmVhdGVJZnJhbWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGQ9Yy5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTtkLmNsYXNzTmFtZT0id3lzaWh0bWw1LXNhbmRib3giO2IuZG9tLnNldEF0dHJpYnV0ZXMoe3NlY3VyaXR5OiJyZXN0cmljdGVkIixhbGxvd3RyYW5zcGFyZW5jeToidHJ1ZSIsCmZyYW1lYm9yZGVyOjAsd2lkdGg6MCxoZWlnaHQ6MCxtYXJnaW53aWR0aDowLG1hcmdpbmhlaWdodDowfSkub24oZCk7Yi5icm93c2VyLnRocm93c01peGVkQ29udGVudFdhcm5pbmdXaGVuSWZyYW1lU3JjSXNFbXB0eSgpJiYoZC5zcmM9ImphdmFzY3JpcHQ6JzxodG1sPjwvaHRtbD4nIik7ZC5vbmxvYWQ9ZnVuY3Rpb24oKXtkLm9ucmVhZHlzdGF0ZWNoYW5nZT1kLm9ubG9hZD1udWxsO2EuX29uTG9hZElmcmFtZShkKX07ZC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZigvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KGQucmVhZHlTdGF0ZSkpe2Qub25yZWFkeXN0YXRlY2hhbmdlPWQub25sb2FkPW51bGw7YS5fb25Mb2FkSWZyYW1lKGQpfX07cmV0dXJuIGR9LF9vbkxvYWRJZnJhbWU6ZnVuY3Rpb24oZil7aWYoYi5kb20uY29udGFpbnMoYy5kb2N1bWVudEVsZW1lbnQsZikpe3ZhciBnPXRoaXMsaT1mLmNvbnRlbnRXaW5kb3csaD1mLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsaz0KdGhpcy5fZ2V0SHRtbCh7Y2hhcnNldDpjLmNoYXJhY3RlclNldHx8Yy5jaGFyc2V0fHwidXRmLTgiLHN0eWxlc2hlZXRzOnRoaXMuY29uZmlnLnN0eWxlc2hlZXRzfSk7aC5vcGVuKCJ0ZXh0L2h0bWwiLCJyZXBsYWNlIik7aC53cml0ZShrKTtoLmNsb3NlKCk7dGhpcy5nZXRXaW5kb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZi5jb250ZW50V2luZG93fTt0aGlzLmdldERvY3VtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGYuY29udGVudFdpbmRvdy5kb2N1bWVudH07aS5vbmVycm9yPWZ1bmN0aW9uKGEsYixjKXt0aHJvdyBFcnJvcigid3lzaWh0bWw1LlNhbmRib3g6ICIrYSxiLGMpO307aWYoIWIuYnJvd3Nlci5zdXBwb3J0c1NhbmRib3hlZElmcmFtZXMoKSl7dmFyIGosaz0wO2ZvcihqPWEubGVuZ3RoO2s8ajtrKyspdGhpcy5fdW5zZXQoaSxhW2tdKTtrPTA7Zm9yKGo9ZC5sZW5ndGg7azxqO2srKyl0aGlzLl91bnNldChpLGRba10sYi5FTVBUWV9GVU5DVElPTik7az0wO2ZvcihqPWUubGVuZ3RoO2s8Cmo7aysrKXRoaXMuX3Vuc2V0KGgsZVtrXSk7dGhpcy5fdW5zZXQoaCwiY29va2llIiwiIiwhMCl9dGhpcy5sb2FkZWQ9ITA7c2V0VGltZW91dChmdW5jdGlvbigpe2cuY2FsbGJhY2soZyl9LDApfX0sX2dldEh0bWw6ZnVuY3Rpb24oYSl7dmFyIGM9YS5zdHlsZXNoZWV0cyxkPSIiLGU9MCxrO2lmKGM9InN0cmluZyI9PT10eXBlb2YgYz9bY106Yylmb3Ioaz1jLmxlbmd0aDtlPGs7ZSsrKWQrPSc8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IicrY1tlXSsnIj4nO2Euc3R5bGVzaGVldHM9ZDtyZXR1cm4gYi5sYW5nLnN0cmluZygnPCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0iI3tjaGFyc2V0fSI+I3tzdHlsZXNoZWV0c308L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4nKS5pbnRlcnBvbGF0ZShhKX0sX3Vuc2V0OmZ1bmN0aW9uKGEsYyxkLGUpe3RyeXthW2NdPWR9Y2F0Y2goayl7fXRyeXthLl9fZGVmaW5lR2V0dGVyX18oYyxmdW5jdGlvbigpe3JldHVybiBkfSl9Y2F0Y2goail7fWlmKGUpdHJ5e2EuX19kZWZpbmVTZXR0ZXJfXyhjLApmdW5jdGlvbigpe30pfWNhdGNoKG4pe31pZighYi5icm93c2VyLmNyYXNoZXNXaGVuRGVmaW5lUHJvcGVydHkoYykpdHJ5e3ZhciBwPXtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZH19O2UmJihwLnNldD1mdW5jdGlvbigpe30pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGMscCl9Y2F0Y2gocSl7fX19KX0pKHd5c2lodG1sNSk7KGZ1bmN0aW9uKCl7dmFyIGI9e2NsYXNzTmFtZToiY2xhc3MifTt3eXNpaHRtbDUuZG9tLnNldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oYyl7cmV0dXJue29uOmZ1bmN0aW9uKGEpe2Zvcih2YXIgZCBpbiBjKWEuc2V0QXR0cmlidXRlKGJbZF18fGQsY1tkXSl9fX19KSgpOwp3eXNpaHRtbDUuZG9tLnNldFN0eWxlcz1mdW5jdGlvbihiKXtyZXR1cm57b246ZnVuY3Rpb24oYyl7Yz1jLnN0eWxlO2lmKCJzdHJpbmciPT09dHlwZW9mIGIpYy5jc3NUZXh0Kz0iOyIrYjtlbHNlIGZvcih2YXIgYSBpbiBiKSJmbG9hdCI9PT1hPyhjLmNzc0Zsb2F0PWJbYV0sYy5zdHlsZUZsb2F0PWJbYV0pOmNbYV09YlthXX19fTsKKGZ1bmN0aW9uKGIpe2Iuc2ltdWxhdGVQbGFjZWhvbGRlcj1mdW5jdGlvbihjLGEsZCl7dmFyIGU9ZnVuY3Rpb24oKXthLmhhc1BsYWNlaG9sZGVyU2V0KCkmJmEuY2xlYXIoKTtiLnJlbW92ZUNsYXNzKGEuZWxlbWVudCwicGxhY2Vob2xkZXIiKX0sZj1mdW5jdGlvbigpe2EuaXNFbXB0eSgpJiYoYS5zZXRWYWx1ZShkKSxiLmFkZENsYXNzKGEuZWxlbWVudCwicGxhY2Vob2xkZXIiKSl9O2Mub2JzZXJ2ZSgic2V0X3BsYWNlaG9sZGVyIixmKS5vYnNlcnZlKCJ1bnNldF9wbGFjZWhvbGRlciIsZSkub2JzZXJ2ZSgiZm9jdXM6Y29tcG9zZXIiLGUpLm9ic2VydmUoInBhc3RlOmNvbXBvc2VyIixlKS5vYnNlcnZlKCJibHVyOmNvbXBvc2VyIixmKTtmKCl9fSkod3lzaWh0bWw1LmRvbSk7CihmdW5jdGlvbihiKXt2YXIgYz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7InRleHRDb250ZW50ImluIGM/KGIuc2V0VGV4dENvbnRlbnQ9ZnVuY3Rpb24oYSxiKXthLnRleHRDb250ZW50PWJ9LGIuZ2V0VGV4dENvbnRlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEudGV4dENvbnRlbnR9KToiaW5uZXJUZXh0ImluIGM/KGIuc2V0VGV4dENvbnRlbnQ9ZnVuY3Rpb24oYSxiKXthLmlubmVyVGV4dD1ifSxiLmdldFRleHRDb250ZW50PWZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVyVGV4dH0pOihiLnNldFRleHRDb250ZW50PWZ1bmN0aW9uKGEsYil7YS5ub2RlVmFsdWU9Yn0sYi5nZXRUZXh0Q29udGVudD1mdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlVmFsdWV9KX0pKHd5c2lodG1sNS5kb20pOwp3eXNpaHRtbDUucXVpcmtzLmNsZWFuUGFzdGVkSFRNTD1mdW5jdGlvbigpe3ZhciBiPXsiYSB1Ijp3eXNpaHRtbDUuZG9tLnJlcGxhY2VXaXRoQ2hpbGROb2Rlc307cmV0dXJuIGZ1bmN0aW9uKGMsYSxkKXt2YXIgYT1hfHxiLGQ9ZHx8Yy5vd25lckRvY3VtZW50fHxkb2N1bWVudCxlPSJzdHJpbmciPT09dHlwZW9mIGMsZixnLGksaD0wLGM9ZT93eXNpaHRtbDUuZG9tLmdldEFzRG9tKGMsZCk6Yztmb3IoaSBpbiBhKXtmPWMucXVlcnlTZWxlY3RvckFsbChpKTtkPWFbaV07Zm9yKGc9Zi5sZW5ndGg7aDxnO2grKylkKGZbaF0pfXJldHVybiBlP2MuaW5uZXJIVE1MOmN9fSgpOwooZnVuY3Rpb24oYil7dmFyIGM9Yi5kb207Yi5xdWlya3MuZW5zdXJlUHJvcGVyQ2xlYXJpbmc9ZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbigpe3ZhciBhPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBiPWEuaW5uZXJIVE1MLnRvTG93ZXJDYXNlKCk7aWYoIjxwPiZuYnNwOzwvcD4iPT1ifHwiPHA+Jm5ic3A7PC9wPjxwPiZuYnNwOzwvcD4iPT1iKWEuaW5uZXJIVE1MPSIifSwwKX07cmV0dXJuIGZ1bmN0aW9uKGIpe2Mub2JzZXJ2ZShiLmVsZW1lbnQsWyJjdXQiLCJrZXlkb3duIl0sYSl9fSgpO2IucXVpcmtzLmVuc3VyZVByb3BlckNsZWFyaW5nT2ZMaXN0cz1mdW5jdGlvbigpe3ZhciBhPVsiT0wiLCJVTCIsIk1FTlUiXTtyZXR1cm4gZnVuY3Rpb24oZCl7Yy5vYnNlcnZlKGQuZWxlbWVudCwia2V5ZG93biIsZnVuY3Rpb24oZSl7aWYoZS5rZXlDb2RlPT09Yi5CQUNLU1BBQ0VfS0VZKXt2YXIgZj1kLnNlbGVjdGlvbi5nZXRTZWxlY3RlZE5vZGUoKSxlPWQuZWxlbWVudDsKZS5maXJzdENoaWxkJiZiLmxhbmcuYXJyYXkoYSkuY29udGFpbnMoZS5maXJzdENoaWxkLm5vZGVOYW1lKSYmKGY9Yy5nZXRQYXJlbnRFbGVtZW50KGYse25vZGVOYW1lOmF9KSkmJmY9PWUuZmlyc3RDaGlsZCYmMT49Zi5jaGlsZE5vZGVzLmxlbmd0aCYmKGYuZmlyc3RDaGlsZD8iIj09PWYuZmlyc3RDaGlsZC5pbm5lckhUTUw6MSkmJmYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmKX19KX19KCl9KSh3eXNpaHRtbDUpOwooZnVuY3Rpb24oYil7Yi5xdWlya3MuZ2V0Q29ycmVjdElubmVySFRNTD1mdW5jdGlvbihjKXt2YXIgYT1jLmlubmVySFRNTDtpZigtMT09PWEuaW5kZXhPZigiJTdFIikpcmV0dXJuIGE7dmFyIGM9Yy5xdWVyeVNlbGVjdG9yQWxsKCJbaHJlZio9J34nXSwgW3NyYyo9J34nXSIpLGQsZSxmLGc7Zz0wO2ZvcihmPWMubGVuZ3RoO2c8ZjtnKyspZD1jW2ddLmhyZWZ8fGNbZ10uc3JjLGU9Yi5sYW5nLnN0cmluZyhkKS5yZXBsYWNlKCJ+IikuYnkoIiU3RSIpLGE9Yi5sYW5nLnN0cmluZyhhKS5yZXBsYWNlKGUpLmJ5KGQpO3JldHVybiBhfX0pKHd5c2lodG1sNSk7CihmdW5jdGlvbihiKXt2YXIgYz1iLmRvbSxhPSJMSSBQIEgxIEgyIEgzIEg0IEg1IEg2Ii5zcGxpdCgiICIpLGQ9WyJVTCIsIk9MIiwiTUVOVSJdO2IucXVpcmtzLmluc2VydExpbmVCcmVha09uUmV0dXJuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGYoYSl7aWYoYT1jLmdldFBhcmVudEVsZW1lbnQoYSx7bm9kZU5hbWU6WyJQIiwiRElWIl19LDIpKXt2YXIgZD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShiLklOVklTSUJMRV9TUEFDRSk7Yy5pbnNlcnQoZCkuYmVmb3JlKGEpO2MucmVwbGFjZVdpdGhDaGlsZE5vZGVzKGEpO2Uuc2VsZWN0aW9uLnNlbGVjdE5vZGUoZCl9fWMub2JzZXJ2ZShlLmVsZW1lbnQub3duZXJEb2N1bWVudCwia2V5ZG93biIsZnVuY3Rpb24oZyl7dmFyIGk9Zy5rZXlDb2RlO2lmKCEoZy5zaGlmdEtleXx8aSE9PWIuRU5URVJfS0VZJiZpIT09Yi5CQUNLU1BBQ0VfS0VZKSl7dmFyIGg9ZS5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKCk7KGg9Yy5nZXRQYXJlbnRFbGVtZW50KGgsCntub2RlTmFtZTphfSw0KSk/IkxJIj09PWgubm9kZU5hbWUmJihpPT09Yi5FTlRFUl9LRVl8fGk9PT1iLkJBQ0tTUEFDRV9LRVkpP3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT1lLnNlbGVjdGlvbi5nZXRTZWxlY3RlZE5vZGUoKSxiO2EmJigoYj1jLmdldFBhcmVudEVsZW1lbnQoYSx7bm9kZU5hbWU6ZH0sMikpfHxmKGEpKX0sMCk6aC5ub2RlTmFtZS5tYXRjaCgvSFsxLTZdLykmJmk9PT1iLkVOVEVSX0tFWSYmc2V0VGltZW91dChmdW5jdGlvbigpe2YoZS5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKCkpfSwwKTppPT09Yi5FTlRFUl9LRVkmJiFiLmJyb3dzZXIuaW5zZXJ0c0xpbmVCcmVha3NPblJldHVybigpJiYoZS5jb21tYW5kcy5leGVjKCJpbnNlcnRMaW5lQnJlYWsiKSxnLnByZXZlbnREZWZhdWx0KCkpfX0pfX0pKHd5c2lodG1sNSk7CihmdW5jdGlvbihiKXtiLnF1aXJrcy5yZWRyYXc9ZnVuY3Rpb24oYyl7Yi5kb20uYWRkQ2xhc3MoYywid3lzaWh0bWw1LXF1aXJrcy1yZWRyYXciKTtiLmRvbS5yZW1vdmVDbGFzcyhjLCJ3eXNpaHRtbDUtcXVpcmtzLXJlZHJhdyIpO3RyeXt2YXIgYT1jLm93bmVyRG9jdW1lbnQ7YS5leGVjQ29tbWFuZCgiaXRhbGljIiwhMSxudWxsKTthLmV4ZWNDb21tYW5kKCJpdGFsaWMiLCExLG51bGwpfWNhdGNoKGQpe319fSkod3lzaWh0bWw1KTsKKGZ1bmN0aW9uKGIpe3ZhciBjPWIuZG9tO2IuU2VsZWN0aW9uPUJhc2UuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihhKXt3aW5kb3cucmFuZ3kuaW5pdCgpO3RoaXMuZWRpdG9yPWE7dGhpcy5jb21wb3Nlcj1hLmNvbXBvc2VyO3RoaXMuZG9jPXRoaXMuY29tcG9zZXIuZG9jfSxnZXRCb29rbWFyazpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0UmFuZ2UoKTtyZXR1cm4gYSYmYS5jbG9uZVJhbmdlKCl9LHNldEJvb2ttYXJrOmZ1bmN0aW9uKGEpe2EmJnRoaXMuc2V0U2VsZWN0aW9uKGEpfSxzZXRCZWZvcmU6ZnVuY3Rpb24oYSl7dmFyIGI9cmFuZ3kuY3JlYXRlUmFuZ2UodGhpcy5kb2MpO2Iuc2V0U3RhcnRCZWZvcmUoYSk7Yi5zZXRFbmRCZWZvcmUoYSk7cmV0dXJuIHRoaXMuc2V0U2VsZWN0aW9uKGIpfSxzZXRBZnRlcjpmdW5jdGlvbihhKXt2YXIgYj1yYW5neS5jcmVhdGVSYW5nZSh0aGlzLmRvYyk7Yi5zZXRTdGFydEFmdGVyKGEpO2Iuc2V0RW5kQWZ0ZXIoYSk7cmV0dXJuIHRoaXMuc2V0U2VsZWN0aW9uKGIpfSwKc2VsZWN0Tm9kZTpmdW5jdGlvbihhKXt2YXIgZD1yYW5neS5jcmVhdGVSYW5nZSh0aGlzLmRvYyksZT1hLm5vZGVUeXBlPT09Yi5FTEVNRU5UX05PREUsZj0iY2FuSGF2ZUhUTUwiaW4gYT9hLmNhbkhhdmVIVE1MOiJJTUciIT09YS5ub2RlTmFtZSxnPWU/YS5pbm5lckhUTUw6YS5kYXRhLGc9IiI9PT1nfHxnPT09Yi5JTlZJU0lCTEVfU1BBQ0UsaT1jLmdldFN0eWxlKCJkaXNwbGF5IikuZnJvbShhKSxpPSJibG9jayI9PT1pfHwibGlzdC1pdGVtIj09PWk7aWYoZyYmZSYmZil0cnl7YS5pbm5lckhUTUw9Yi5JTlZJU0lCTEVfU1BBQ0V9Y2F0Y2goaCl7fWY/ZC5zZWxlY3ROb2RlQ29udGVudHMoYSk6ZC5zZWxlY3ROb2RlKGEpO2YmJmcmJmU/ZC5jb2xsYXBzZShpKTpmJiZnJiYoZC5zZXRTdGFydEFmdGVyKGEpLGQuc2V0RW5kQWZ0ZXIoYSkpO3RoaXMuc2V0U2VsZWN0aW9uKGQpfSxnZXRTZWxlY3RlZE5vZGU6ZnVuY3Rpb24oYSl7aWYoYSYmdGhpcy5kb2Muc2VsZWN0aW9uJiYiQ29udHJvbCI9PT0KdGhpcy5kb2Muc2VsZWN0aW9uLnR5cGUmJihhPXRoaXMuZG9jLnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpKSYmYS5sZW5ndGgpcmV0dXJuIGEuaXRlbSgwKTthPXRoaXMuZ2V0U2VsZWN0aW9uKHRoaXMuZG9jKTtyZXR1cm4gYS5mb2N1c05vZGU9PT1hLmFuY2hvck5vZGU/YS5mb2N1c05vZGU6KGE9dGhpcy5nZXRSYW5nZSh0aGlzLmRvYykpP2EuY29tbW9uQW5jZXN0b3JDb250YWluZXI6dGhpcy5kb2MuYm9keX0sZXhlY3V0ZUFuZFJlc3RvcmU6ZnVuY3Rpb24oYSxjKXt2YXIgZT10aGlzLmRvYy5ib2R5LGY9YyYmZS5zY3JvbGxUb3AsZz1jJiZlLnNjcm9sbExlZnQsaT0nPHNwYW4gY2xhc3M9Il93eXNpaHRtbDUtdGVtcC1wbGFjZWhvbGRlciI+JytiLklOVklTSUJMRV9TUEFDRSsiPC9zcGFuPiIsaD10aGlzLmdldFJhbmdlKHRoaXMuZG9jKTtpZihoKXtpPWguY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGkpO2guaW5zZXJ0Tm9kZShpKTt0cnl7YShoLnN0YXJ0Q29udGFpbmVyLGguZW5kQ29udGFpbmVyKX1jYXRjaChrKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgazsKfSwwKX0oY2FyZXRQbGFjZWhvbGRlcj10aGlzLmRvYy5xdWVyeVNlbGVjdG9yKCIuX3d5c2lodG1sNS10ZW1wLXBsYWNlaG9sZGVyIikpPyhoPXJhbmd5LmNyZWF0ZVJhbmdlKHRoaXMuZG9jKSxoLnNlbGVjdE5vZGUoY2FyZXRQbGFjZWhvbGRlciksaC5kZWxldGVDb250ZW50cygpLHRoaXMuc2V0U2VsZWN0aW9uKGgpKTplLmZvY3VzKCk7YyYmKGUuc2Nyb2xsVG9wPWYsZS5zY3JvbGxMZWZ0PWcpO3RyeXtjYXJldFBsYWNlaG9sZGVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2FyZXRQbGFjZWhvbGRlcil9Y2F0Y2goail7fX1lbHNlIGEoZSxlKX0sZXhlY3V0ZUFuZFJlc3RvcmVTaW1wbGU6ZnVuY3Rpb24oYSl7dmFyIGIsYyxmPXRoaXMuZ2V0UmFuZ2UoKSxnPXRoaXMuZG9jLmJvZHksaTtpZihmKXtiPWYuZ2V0Tm9kZXMoWzNdKTtnPWJbMF18fGYuc3RhcnRDb250YWluZXI7aT1iW2IubGVuZ3RoLTFdfHxmLmVuZENvbnRhaW5lcjtiPWc9PT1mLnN0YXJ0Q29udGFpbmVyP2Yuc3RhcnRPZmZzZXQ6CjA7Yz1pPT09Zi5lbmRDb250YWluZXI/Zi5lbmRPZmZzZXQ6aS5sZW5ndGg7dHJ5e2EoZi5zdGFydENvbnRhaW5lcixmLmVuZENvbnRhaW5lcil9Y2F0Y2goaCl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGg7fSwwKX1hPXJhbmd5LmNyZWF0ZVJhbmdlKHRoaXMuZG9jKTt0cnl7YS5zZXRTdGFydChnLGIpfWNhdGNoKGspe310cnl7YS5zZXRFbmQoaSxjKX1jYXRjaChqKXt9dHJ5e3RoaXMuc2V0U2VsZWN0aW9uKGEpfWNhdGNoKG4pe319ZWxzZSBhKGcsZyl9LGluc2VydEhUTUw6ZnVuY3Rpb24oYSl7dmFyIGE9cmFuZ3kuY3JlYXRlUmFuZ2UodGhpcy5kb2MpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChhKSxiPWEubGFzdENoaWxkO3RoaXMuaW5zZXJ0Tm9kZShhKTtiJiZ0aGlzLnNldEFmdGVyKGIpfSxpbnNlcnROb2RlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ2V0UmFuZ2UoKTtiJiZiLmluc2VydE5vZGUoYSl9LHN1cnJvdW5kOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ2V0UmFuZ2UoKTsKaWYoYil0cnl7Yi5zdXJyb3VuZENvbnRlbnRzKGEpLHRoaXMuc2VsZWN0Tm9kZShhKX1jYXRjaChjKXthLmFwcGVuZENoaWxkKGIuZXh0cmFjdENvbnRlbnRzKCkpLGIuaW5zZXJ0Tm9kZShhKX19LHNjcm9sbEludG9WaWV3OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kb2MsYz1hLmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQ+YS5kb2N1bWVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0LGU7aWYoIShlPWEuX3d5c2lodG1sNVNjcm9sbEludG9WaWV3RWxlbWVudCkpZT1hLmNyZWF0ZUVsZW1lbnQoInNwYW4iKSxlLmlubmVySFRNTD1iLklOVklTSUJMRV9TUEFDRTtlPWEuX3d5c2lodG1sNVNjcm9sbEludG9WaWV3RWxlbWVudD1lO2lmKGMpe3RoaXMuaW5zZXJ0Tm9kZShlKTt2YXIgYz1lLGY9MDtpZihjLnBhcmVudE5vZGUpe2RvIGYrPWMub2Zmc2V0VG9wfHwwLGM9Yy5vZmZzZXRQYXJlbnQ7d2hpbGUoYyl9Yz1mO2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKTtjPmEuYm9keS5zY3JvbGxUb3AmJgooYS5ib2R5LnNjcm9sbFRvcD1jKX19LHNlbGVjdExpbmU6ZnVuY3Rpb24oKXtiLmJyb3dzZXIuc3VwcG9ydHNTZWxlY3Rpb25Nb2RpZnkoKT90aGlzLl9zZWxlY3RMaW5lX1czQygpOnRoaXMuZG9jLnNlbGVjdGlvbiYmdGhpcy5fc2VsZWN0TGluZV9NU0lFKCl9LF9zZWxlY3RMaW5lX1czQzpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZG9jLmRlZmF1bHRWaWV3LmdldFNlbGVjdGlvbigpO2EubW9kaWZ5KCJleHRlbmQiLCJsZWZ0IiwibGluZWJvdW5kYXJ5Iik7YS5tb2RpZnkoImV4dGVuZCIsInJpZ2h0IiwibGluZWJvdW5kYXJ5Iil9LF9zZWxlY3RMaW5lX01TSUU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRvYy5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKSxiPWEuYm91bmRpbmdUb3AsYz10aGlzLmRvYy5ib2R5LnNjcm9sbFdpZHRoLGY7aWYoYS5tb3ZlVG9Qb2ludCl7MD09PWImJihmPXRoaXMuZG9jLmNyZWF0ZUVsZW1lbnQoInNwYW4iKSx0aGlzLmluc2VydE5vZGUoZiksYj1mLm9mZnNldFRvcCwKZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGYpKTtiKz0xO2ZvcihmPS0xMDtmPGM7Zis9Mil0cnl7YS5tb3ZlVG9Qb2ludChmLGIpO2JyZWFrfWNhdGNoKGcpe31mb3IoZj10aGlzLmRvYy5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTswPD1jO2MtLSl0cnl7Zi5tb3ZlVG9Qb2ludChjLGIpO2JyZWFrfWNhdGNoKGkpe31hLnNldEVuZFBvaW50KCJFbmRUb0VuZCIsZik7YS5zZWxlY3QoKX19LGdldFRleHQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFNlbGVjdGlvbigpO3JldHVybiBhP2EudG9TdHJpbmcoKToiIn0sZ2V0Tm9kZXM6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmdldFJhbmdlKCk7cmV0dXJuIGM/Yy5nZXROb2RlcyhbYV0sYik6W119LGdldFJhbmdlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRTZWxlY3Rpb24oKTtyZXR1cm4gYSYmYS5yYW5nZUNvdW50JiZhLmdldFJhbmdlQXQoMCl9LGdldFNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiByYW5neS5nZXRTZWxlY3Rpb24odGhpcy5kb2MuZGVmYXVsdFZpZXd8fAp0aGlzLmRvYy5wYXJlbnRXaW5kb3cpfSxzZXRTZWxlY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuIHJhbmd5LmdldFNlbGVjdGlvbih0aGlzLmRvYy5kZWZhdWx0Vmlld3x8dGhpcy5kb2MucGFyZW50V2luZG93KS5zZXRTaW5nbGVSYW5nZShhKX19KX0pKHd5c2lodG1sNSk7CihmdW5jdGlvbihiLGMpe2Z1bmN0aW9uIGEoYSxiKXtyZXR1cm4gYy5kb20uaXNDaGFyYWN0ZXJEYXRhTm9kZShhKT8wPT1iPyEhYS5wcmV2aW91c1NpYmxpbmc6Yj09YS5sZW5ndGg/ISFhLm5leHRTaWJsaW5nOiEwOjA8YiYmYjxhLmNoaWxkTm9kZXMubGVuZ3RofWZ1bmN0aW9uIGQoYSxiLGUpe3ZhciBmO2MuZG9tLmlzQ2hhcmFjdGVyRGF0YU5vZGUoYikmJigwPT1lPyhlPWMuZG9tLmdldE5vZGVJbmRleChiKSxiPWIucGFyZW50Tm9kZSk6ZT09Yi5sZW5ndGg/KGU9Yy5kb20uZ2V0Tm9kZUluZGV4KGIpKzEsYj1iLnBhcmVudE5vZGUpOmY9Yy5kb20uc3BsaXREYXRhTm9kZShiLGUpKTtpZighZil7Zj1iLmNsb25lTm9kZSghMSk7Zi5pZCYmZi5yZW1vdmVBdHRyaWJ1dGUoImlkIik7Zm9yKHZhciBnO2c9Yi5jaGlsZE5vZGVzW2VdOylmLmFwcGVuZENoaWxkKGcpO2MuZG9tLmluc2VydEFmdGVyKGYsYil9cmV0dXJuIGI9PWE/ZjpkKGEsZi5wYXJlbnROb2RlLGMuZG9tLmdldE5vZGVJbmRleChmKSl9CmZ1bmN0aW9uIGUoYSl7dGhpcy5maXJzdFRleHROb2RlPSh0aGlzLmlzRWxlbWVudE1lcmdlPWEubm9kZVR5cGU9PWIuRUxFTUVOVF9OT0RFKT9hLmxhc3RDaGlsZDphO3RoaXMudGV4dE5vZGVzPVt0aGlzLmZpcnN0VGV4dE5vZGVdfWZ1bmN0aW9uIGYoYSxiLGMsZCl7dGhpcy50YWdOYW1lcz1hfHxbZ107dGhpcy5jc3NDbGFzcz1ifHwiIjt0aGlzLnNpbWlsYXJDbGFzc1JlZ0V4cD1jO3RoaXMubm9ybWFsaXplPWQ7dGhpcy5hcHBseVRvQW55VGFnTmFtZT0hMX12YXIgZz0ic3BhbiIsaT0vXHMrL2c7ZS5wcm90b3R5cGU9e2RvTWVyZ2U6ZnVuY3Rpb24oKXtmb3IodmFyIGE9W10sYixjLGQ9MCxlPXRoaXMudGV4dE5vZGVzLmxlbmd0aDtkPGU7KytkKWI9dGhpcy50ZXh0Tm9kZXNbZF0sYz1iLnBhcmVudE5vZGUsYVtkXT1iLmRhdGEsZCYmKGMucmVtb3ZlQ2hpbGQoYiksYy5oYXNDaGlsZE5vZGVzKCl8fGMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKSk7cmV0dXJuIHRoaXMuZmlyc3RUZXh0Tm9kZS5kYXRhPQphPWEuam9pbigiIil9LGdldExlbmd0aDpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLnRleHROb2Rlcy5sZW5ndGgsYj0wO2EtLTspYis9dGhpcy50ZXh0Tm9kZXNbYV0ubGVuZ3RoO3JldHVybiBifSx0b1N0cmluZzpmdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxiPTAsYz10aGlzLnRleHROb2Rlcy5sZW5ndGg7YjxjOysrYilhW2JdPSInIit0aGlzLnRleHROb2Rlc1tiXS5kYXRhKyInIjtyZXR1cm4iW01lcmdlKCIrYS5qb2luKCIsIikrIildIn19O2YucHJvdG90eXBlPXtnZXRBbmNlc3RvcldpdGhDbGFzczpmdW5jdGlvbihhKXtmb3IodmFyIGQ7YTspe2lmKHRoaXMuY3NzQ2xhc3MpaWYoZD10aGlzLmNzc0NsYXNzLGEuY2xhc3NOYW1lKXt2YXIgZT1hLmNsYXNzTmFtZS5tYXRjaCh0aGlzLnNpbWlsYXJDbGFzc1JlZ0V4cCl8fFtdO2Q9ZVtlLmxlbmd0aC0xXT09PWR9ZWxzZSBkPSExO2Vsc2UgZD0hMDtpZihhLm5vZGVUeXBlPT1iLkVMRU1FTlRfTk9ERSYmYy5kb20uYXJyYXlDb250YWlucyh0aGlzLnRhZ05hbWVzLAphLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkmJmQpcmV0dXJuIGE7YT1hLnBhcmVudE5vZGV9cmV0dXJuITF9LHBvc3RBcHBseTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1hWzBdLGQ9YVthLmxlbmd0aC0xXSxmPVtdLGcsaT1jLG09ZCxzPTAseD1kLmxlbmd0aCxvLHosdz0wLHk9YS5sZW5ndGg7dzx5OysrdylpZihvPWFbd10sej10aGlzLmdldEFkamFjZW50TWVyZ2VhYmxlVGV4dE5vZGUoby5wYXJlbnROb2RlLCExKSl7aWYoZ3x8KGc9bmV3IGUoeiksZi5wdXNoKGcpKSxnLnRleHROb2Rlcy5wdXNoKG8pLG89PT1jJiYoaT1nLmZpcnN0VGV4dE5vZGUscz1pLmxlbmd0aCksbz09PWQpbT1nLmZpcnN0VGV4dE5vZGUseD1nLmdldExlbmd0aCgpfWVsc2UgZz1udWxsO2lmKGM9dGhpcy5nZXRBZGphY2VudE1lcmdlYWJsZVRleHROb2RlKGQucGFyZW50Tm9kZSwhMCkpZ3x8KGc9bmV3IGUoZCksZi5wdXNoKGcpKSxnLnRleHROb2Rlcy5wdXNoKGMpO2lmKGYubGVuZ3RoKXt3PTA7Zm9yKHk9CmYubGVuZ3RoO3c8eTsrK3cpZlt3XS5kb01lcmdlKCk7Yi5zZXRTdGFydChpLHMpO2Iuc2V0RW5kKG0seCl9fSxnZXRBZGphY2VudE1lcmdlYWJsZVRleHROb2RlOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9YS5ub2RlVHlwZT09Yi5URVhUX05PREUsZT1kP2EucGFyZW50Tm9kZTphLGY9Yz8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciO2lmKGQpe2lmKChkPWFbZl0pJiZkLm5vZGVUeXBlPT1iLlRFWFRfTk9ERSlyZXR1cm4gZH1lbHNlIGlmKChkPWVbZl0pJiZ0aGlzLmFyZUVsZW1lbnRzTWVyZ2VhYmxlKGEsZCkpcmV0dXJuIGRbYz8iZmlyc3RDaGlsZCI6Imxhc3RDaGlsZCJdO3JldHVybiBudWxsfSxhcmVFbGVtZW50c01lcmdlYWJsZTpmdW5jdGlvbihhLGIpe3ZhciBkO2lmKGQ9Yy5kb20uYXJyYXlDb250YWlucyh0aGlzLnRhZ05hbWVzLChhLnRhZ05hbWV8fCIiKS50b0xvd2VyQ2FzZSgpKSlpZihkPWMuZG9tLmFycmF5Q29udGFpbnModGhpcy50YWdOYW1lcywoYi50YWdOYW1lfHwKIiIpLnRvTG93ZXJDYXNlKCkpKWlmKGQ9YS5jbGFzc05hbWUucmVwbGFjZShpLCIgIik9PWIuY2xhc3NOYW1lLnJlcGxhY2UoaSwiICIpKWE6aWYoYS5hdHRyaWJ1dGVzLmxlbmd0aCE9Yi5hdHRyaWJ1dGVzLmxlbmd0aClkPSExO2Vsc2V7ZD0wO2Zvcih2YXIgZT1hLmF0dHJpYnV0ZXMubGVuZ3RoLGYsZztkPGU7KytkKWlmKGY9YS5hdHRyaWJ1dGVzW2RdLGc9Zi5uYW1lLCJjbGFzcyIhPWcmJihnPWIuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oZyksZi5zcGVjaWZpZWQhPWcuc3BlY2lmaWVkfHxmLnNwZWNpZmllZCYmZi5ub2RlVmFsdWUhPT1nLm5vZGVWYWx1ZSkpe2Q9ITE7YnJlYWsgYX1kPSEwfXJldHVybiBkfSxjcmVhdGVDb250YWluZXI6ZnVuY3Rpb24oYSl7YT1hLmNyZWF0ZUVsZW1lbnQodGhpcy50YWdOYW1lc1swXSk7dGhpcy5jc3NDbGFzcyYmKGEuY2xhc3NOYW1lPXRoaXMuY3NzQ2xhc3MpO3JldHVybiBhfSxhcHBseVRvVGV4dE5vZGU6ZnVuY3Rpb24oYSl7dmFyIGI9CmEucGFyZW50Tm9kZTsxPT1iLmNoaWxkTm9kZXMubGVuZ3RoJiZjLmRvbS5hcnJheUNvbnRhaW5zKHRoaXMudGFnTmFtZXMsYi50YWdOYW1lLnRvTG93ZXJDYXNlKCkpP3RoaXMuY3NzQ2xhc3MmJihhPXRoaXMuY3NzQ2xhc3MsYi5jbGFzc05hbWU/KGIuY2xhc3NOYW1lJiYoYi5jbGFzc05hbWU9Yi5jbGFzc05hbWUucmVwbGFjZSh0aGlzLnNpbWlsYXJDbGFzc1JlZ0V4cCwiIikpLGIuY2xhc3NOYW1lKz0iICIrYSk6Yi5jbGFzc05hbWU9YSk6KGI9dGhpcy5jcmVhdGVDb250YWluZXIoYy5kb20uZ2V0RG9jdW1lbnQoYSkpLGEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYixhKSxiLmFwcGVuZENoaWxkKGEpKX0saXNSZW1vdmFibGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGMuZG9tLmFycmF5Q29udGFpbnModGhpcy50YWdOYW1lcyxhLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkmJmIubGFuZy5zdHJpbmcoYS5jbGFzc05hbWUpLnRyaW0oKT09dGhpcy5jc3NDbGFzc30sdW5kb1RvVGV4dE5vZGU6ZnVuY3Rpb24oYiwKYyxlKXtjLmNvbnRhaW5zTm9kZShlKXx8KGI9Yy5jbG9uZVJhbmdlKCksYi5zZWxlY3ROb2RlKGUpLGIuaXNQb2ludEluUmFuZ2UoYy5lbmRDb250YWluZXIsYy5lbmRPZmZzZXQpJiZhKGMuZW5kQ29udGFpbmVyLGMuZW5kT2Zmc2V0KSYmKGQoZSxjLmVuZENvbnRhaW5lcixjLmVuZE9mZnNldCksYy5zZXRFbmRBZnRlcihlKSksYi5pc1BvaW50SW5SYW5nZShjLnN0YXJ0Q29udGFpbmVyLGMuc3RhcnRPZmZzZXQpJiZhKGMuc3RhcnRDb250YWluZXIsYy5zdGFydE9mZnNldCkmJihlPWQoZSxjLnN0YXJ0Q29udGFpbmVyLGMuc3RhcnRPZmZzZXQpKSk7dGhpcy5zaW1pbGFyQ2xhc3NSZWdFeHAmJmUuY2xhc3NOYW1lJiYoZS5jbGFzc05hbWU9ZS5jbGFzc05hbWUucmVwbGFjZSh0aGlzLnNpbWlsYXJDbGFzc1JlZ0V4cCwiIikpO2lmKHRoaXMuaXNSZW1vdmFibGUoZSkpe2M9ZTtmb3IoZT1jLnBhcmVudE5vZGU7Yy5maXJzdENoaWxkOyllLmluc2VydEJlZm9yZShjLmZpcnN0Q2hpbGQsCmMpO2UucmVtb3ZlQ2hpbGQoYyl9fSxhcHBseVRvUmFuZ2U6ZnVuY3Rpb24oYSl7dmFyIGM9YS5nZXROb2RlcyhbYi5URVhUX05PREVdKTtpZighYy5sZW5ndGgpdHJ5e3ZhciBkPXRoaXMuY3JlYXRlQ29udGFpbmVyKGEuZW5kQ29udGFpbmVyLm93bmVyRG9jdW1lbnQpO2Euc3Vycm91bmRDb250ZW50cyhkKTt0aGlzLnNlbGVjdE5vZGUoYSxkKTtyZXR1cm59Y2F0Y2goZSl7fWEuc3BsaXRCb3VuZGFyaWVzKCk7Yz1hLmdldE5vZGVzKFtiLlRFWFRfTk9ERV0pO2lmKGMubGVuZ3RoKXtmb3IodmFyIGY9MCxnPWMubGVuZ3RoO2Y8ZzsrK2YpZD1jW2ZdLHRoaXMuZ2V0QW5jZXN0b3JXaXRoQ2xhc3MoZCl8fHRoaXMuYXBwbHlUb1RleHROb2RlKGQpO2Euc2V0U3RhcnQoY1swXSwwKTtkPWNbYy5sZW5ndGgtMV07YS5zZXRFbmQoZCxkLmxlbmd0aCk7dGhpcy5ub3JtYWxpemUmJnRoaXMucG9zdEFwcGx5KGMsYSl9fSx1bmRvVG9SYW5nZTpmdW5jdGlvbihhKXt2YXIgYz1hLmdldE5vZGVzKFtiLlRFWFRfTk9ERV0pLApkLGU7Yy5sZW5ndGg/KGEuc3BsaXRCb3VuZGFyaWVzKCksYz1hLmdldE5vZGVzKFtiLlRFWFRfTk9ERV0pKTooYz1hLmVuZENvbnRhaW5lci5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGIuSU5WSVNJQkxFX1NQQUNFKSxhLmluc2VydE5vZGUoYyksYS5zZWxlY3ROb2RlKGMpLGM9W2NdKTtmb3IodmFyIGY9MCxnPWMubGVuZ3RoO2Y8ZzsrK2YpZD1jW2ZdLChlPXRoaXMuZ2V0QW5jZXN0b3JXaXRoQ2xhc3MoZCkpJiZ0aGlzLnVuZG9Ub1RleHROb2RlKGQsYSxlKTsxPT1nP3RoaXMuc2VsZWN0Tm9kZShhLGNbMF0pOihhLnNldFN0YXJ0KGNbMF0sMCksZD1jW2MubGVuZ3RoLTFdLGEuc2V0RW5kKGQsZC5sZW5ndGgpLHRoaXMubm9ybWFsaXplJiZ0aGlzLnBvc3RBcHBseShjLGEpKX0sc2VsZWN0Tm9kZTpmdW5jdGlvbihhLGMpe3ZhciBkPWMubm9kZVR5cGU9PT1iLkVMRU1FTlRfTk9ERSxlPSJjYW5IYXZlSFRNTCJpbiBjP2MuY2FuSGF2ZUhUTUw6ITAsZj1kP2MuaW5uZXJIVE1MOgpjLmRhdGE7aWYoKGY9IiI9PT1mfHxmPT09Yi5JTlZJU0lCTEVfU1BBQ0UpJiZkJiZlKXRyeXtjLmlubmVySFRNTD1iLklOVklTSUJMRV9TUEFDRX1jYXRjaChnKXt9YS5zZWxlY3ROb2RlQ29udGVudHMoYyk7ZiYmZD9hLmNvbGxhcHNlKCExKTpmJiYoYS5zZXRTdGFydEFmdGVyKGMpLGEuc2V0RW5kQWZ0ZXIoYykpfSxnZXRUZXh0U2VsZWN0ZWRCeVJhbmdlOmZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5jbG9uZVJhbmdlKCk7Yy5zZWxlY3ROb2RlQ29udGVudHMoYSk7dmFyIGQ9Yy5pbnRlcnNlY3Rpb24oYiksZD1kP2QudG9TdHJpbmcoKToiIjtjLmRldGFjaCgpO3JldHVybiBkfSxpc0FwcGxpZWRUb1JhbmdlOmZ1bmN0aW9uKGEpe3ZhciBjPVtdLGQsZT1hLmdldE5vZGVzKFtiLlRFWFRfTk9ERV0pO2lmKCFlLmxlbmd0aClyZXR1cm4oZD10aGlzLmdldEFuY2VzdG9yV2l0aENsYXNzKGEuc3RhcnRDb250YWluZXIpKT9bZF06ITE7Zm9yKHZhciBmPTAsZz1lLmxlbmd0aCxpO2Y8ZzsrK2Ype2k9CnRoaXMuZ2V0VGV4dFNlbGVjdGVkQnlSYW5nZShlW2ZdLGEpO2Q9dGhpcy5nZXRBbmNlc3RvcldpdGhDbGFzcyhlW2ZdKTtpZigiIiE9aSYmIWQpcmV0dXJuITE7Yy5wdXNoKGQpfXJldHVybiBjfSx0b2dnbGVSYW5nZTpmdW5jdGlvbihhKXt0aGlzLmlzQXBwbGllZFRvUmFuZ2UoYSk/dGhpcy51bmRvVG9SYW5nZShhKTp0aGlzLmFwcGx5VG9SYW5nZShhKX19O2Iuc2VsZWN0aW9uLkhUTUxBcHBsaWVyPWZ9KSh3eXNpaHRtbDUscmFuZ3kpOwp3eXNpaHRtbDUuQ29tbWFuZHM9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGIpe3RoaXMuZWRpdG9yPWI7dGhpcy5jb21wb3Nlcj1iLmNvbXBvc2VyO3RoaXMuZG9jPXRoaXMuY29tcG9zZXIuZG9jfSxzdXBwb3J0OmZ1bmN0aW9uKGIpe3JldHVybiB3eXNpaHRtbDUuYnJvd3Nlci5zdXBwb3J0c0NvbW1hbmQodGhpcy5kb2MsYil9LGV4ZWM6ZnVuY3Rpb24oYixjKXt2YXIgYT13eXNpaHRtbDUuY29tbWFuZHNbYl0sZD13eXNpaHRtbDUubGFuZy5hcnJheShhcmd1bWVudHMpLmdldCgpLGU9YSYmYS5leGVjLGY9bnVsbDt0aGlzLmVkaXRvci5maXJlKCJiZWZvcmVjb21tYW5kOmNvbXBvc2VyIik7aWYoZSlkLnVuc2hpZnQodGhpcy5jb21wb3NlciksZj1lLmFwcGx5KGEsZCk7ZWxzZSB0cnl7Zj10aGlzLmRvYy5leGVjQ29tbWFuZChiLCExLGMpfWNhdGNoKGcpe310aGlzLmVkaXRvci5maXJlKCJhZnRlcmNvbW1hbmQ6Y29tcG9zZXIiKTtyZXR1cm4gZn0sc3RhdGU6ZnVuY3Rpb24oYiwKYyl7dmFyIGE9d3lzaWh0bWw1LmNvbW1hbmRzW2JdLGQ9d3lzaWh0bWw1LmxhbmcuYXJyYXkoYXJndW1lbnRzKS5nZXQoKSxlPWEmJmEuc3RhdGU7aWYoZSlyZXR1cm4gZC51bnNoaWZ0KHRoaXMuY29tcG9zZXIpLGUuYXBwbHkoYSxkKTt0cnl7cmV0dXJuIHRoaXMuZG9jLnF1ZXJ5Q29tbWFuZFN0YXRlKGIpfWNhdGNoKGYpe3JldHVybiExfX0sdmFsdWU6ZnVuY3Rpb24oYil7dmFyIGM9d3lzaWh0bWw1LmNvbW1hbmRzW2JdLGE9YyYmYy52YWx1ZTtpZihhKXJldHVybiBhLmNhbGwoYyx0aGlzLmNvbXBvc2VyLGIpO3RyeXtyZXR1cm4gdGhpcy5kb2MucXVlcnlDb21tYW5kVmFsdWUoYil9Y2F0Y2goZCl7cmV0dXJuIG51bGx9fX0pOwooZnVuY3Rpb24oYil7Yi5jb21tYW5kcy5ib2xkPXtleGVjOmZ1bmN0aW9uKGMsYSl7cmV0dXJuIGIuY29tbWFuZHMuZm9ybWF0SW5saW5lLmV4ZWMoYyxhLCJiIil9LHN0YXRlOmZ1bmN0aW9uKGMsYSl7cmV0dXJuIGIuY29tbWFuZHMuZm9ybWF0SW5saW5lLnN0YXRlKGMsYSwiYiIpfSx2YWx1ZTpmdW5jdGlvbigpe319fSkod3lzaWh0bWw1KTsKKGZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGMoYyxnKXt2YXIgaT1jLmRvYyxoPSJfd3lzaWh0bWw1LXRlbXAtIisgK25ldyBEYXRlLGs9MCxqLG4scDtiLmNvbW1hbmRzLmZvcm1hdElubGluZS5leGVjKGMsYSxkLGgsL25vbi1tYXRjaGluZy1jbGFzcy9nKTtqPWkucXVlcnlTZWxlY3RvckFsbChkKyIuIitoKTtmb3IoaD1qLmxlbmd0aDtrPGg7aysrKWZvcihwIGluIG49altrXSxuLnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKSxnKW4uc2V0QXR0cmlidXRlKHAsZ1twXSk7az1uOzE9PT1oJiYocD1lLmdldFRleHRDb250ZW50KG4pLGg9ISFuLnF1ZXJ5U2VsZWN0b3IoIioiKSxwPSIiPT09cHx8cD09PWIuSU5WSVNJQkxFX1NQQUNFLCFoJiZwJiYoZS5zZXRUZXh0Q29udGVudChuLGcudGV4dHx8bi5ocmVmKSxpPWkuY3JlYXRlVGV4dE5vZGUoIiAiKSxjLnNlbGVjdGlvbi5zZXRBZnRlcihuKSxjLnNlbGVjdGlvbi5pbnNlcnROb2RlKGkpLGs9aSkpO2Muc2VsZWN0aW9uLnNldEFmdGVyKGspfQp2YXIgYSxkPSJBIixlPWIuZG9tO2IuY29tbWFuZHMuY3JlYXRlTGluaz17ZXhlYzpmdW5jdGlvbihhLGIsZCl7dmFyIGg9dGhpcy5zdGF0ZShhLGIpO2g/YS5zZWxlY3Rpb24uZXhlY3V0ZUFuZFJlc3RvcmUoZnVuY3Rpb24oKXtmb3IodmFyIGE9aC5sZW5ndGgsYj0wLGMsZCxmO2I8YTtiKyspYz1oW2JdLGQ9ZS5nZXRQYXJlbnRFbGVtZW50KGMse25vZGVOYW1lOiJjb2RlIn0pLGY9ZS5nZXRUZXh0Q29udGVudChjKSxmLm1hdGNoKGUuYXV0b0xpbmsuVVJMX1JFR19FWFApJiYhZD9lLnJlbmFtZUVsZW1lbnQoYywiY29kZSIpOmUucmVwbGFjZVdpdGhDaGlsZE5vZGVzKGMpfSk6KGQ9Im9iamVjdCI9PT10eXBlb2YgZD9kOntocmVmOmR9LGMoYSxkKSl9LHN0YXRlOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGIuY29tbWFuZHMuZm9ybWF0SW5saW5lLnN0YXRlKGEsYywiQSIpfSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBhfX19KSh3eXNpaHRtbDUpOwooZnVuY3Rpb24oYil7dmFyIGM9L3d5c2l3eWctZm9udC1zaXplLVthLXpcLV0rL2c7Yi5jb21tYW5kcy5mb250U2l6ZT17ZXhlYzpmdW5jdGlvbihhLGQsZSl7cmV0dXJuIGIuY29tbWFuZHMuZm9ybWF0SW5saW5lLmV4ZWMoYSxkLCJzcGFuIiwid3lzaXd5Zy1mb250LXNpemUtIitlLGMpfSxzdGF0ZTpmdW5jdGlvbihhLGQsZSl7cmV0dXJuIGIuY29tbWFuZHMuZm9ybWF0SW5saW5lLnN0YXRlKGEsZCwic3BhbiIsInd5c2l3eWctZm9udC1zaXplLSIrZSxjKX0sdmFsdWU6ZnVuY3Rpb24oKXt9fX0pKHd5c2lodG1sNSk7CihmdW5jdGlvbihiKXt2YXIgYz0vd3lzaXd5Zy1jb2xvci1bYS16XSsvZztiLmNvbW1hbmRzLmZvcmVDb2xvcj17ZXhlYzpmdW5jdGlvbihhLGQsZSl7cmV0dXJuIGIuY29tbWFuZHMuZm9ybWF0SW5saW5lLmV4ZWMoYSxkLCJzcGFuIiwid3lzaXd5Zy1jb2xvci0iK2UsYyl9LHN0YXRlOmZ1bmN0aW9uKGEsZCxlKXtyZXR1cm4gYi5jb21tYW5kcy5mb3JtYXRJbmxpbmUuc3RhdGUoYSxkLCJzcGFuIiwid3lzaXd5Zy1jb2xvci0iK2UsYyl9LHZhbHVlOmZ1bmN0aW9uKCl7fX19KSh3eXNpaHRtbDUpOwooZnVuY3Rpb24oYil7ZnVuY3Rpb24gYyhhKXtmb3IoYT1hLnByZXZpb3VzU2libGluZzthJiZhLm5vZGVUeXBlPT09Yi5URVhUX05PREUmJiFiLmxhbmcuc3RyaW5nKGEuZGF0YSkudHJpbSgpOylhPWEucHJldmlvdXNTaWJsaW5nO3JldHVybiBhfWZ1bmN0aW9uIGEoYSl7Zm9yKGE9YS5uZXh0U2libGluZzthJiZhLm5vZGVUeXBlPT09Yi5URVhUX05PREUmJiFiLmxhbmcuc3RyaW5nKGEuZGF0YSkudHJpbSgpOylhPWEubmV4dFNpYmxpbmc7cmV0dXJuIGF9ZnVuY3Rpb24gZChhKXtyZXR1cm4iQlIiPT09YS5ub2RlTmFtZXx8ImJsb2NrIj09PWcuZ2V0U3R5bGUoImRpc3BsYXkiKS5mcm9tKGEpPyEwOiExfWZ1bmN0aW9uIGUoYSxjLGQsZSl7aWYoZSl2YXIgZj1nLm9ic2VydmUoYSwiRE9NTm9kZUluc2VydGVkIixmdW5jdGlvbihhKXt2YXIgYT1hLnRhcmdldCxjO2Eubm9kZVR5cGU9PT1iLkVMRU1FTlRfTk9ERSYmKGM9Zy5nZXRTdHlsZSgiZGlzcGxheSIpLmZyb20oYSksImlubGluZSIhPT0KYy5zdWJzdHIoMCw2KSYmKGEuY2xhc3NOYW1lKz0iICIrZSkpfSk7YS5leGVjQ29tbWFuZChjLCExLGQpO2YmJmYuc3RvcCgpfWZ1bmN0aW9uIGYoYixkKXtiLnNlbGVjdGlvbi5zZWxlY3RMaW5lKCk7Yi5zZWxlY3Rpb24uc3Vycm91bmQoZCk7dmFyIGU9YShkKSxmPWMoZCk7ZSYmIkJSIj09PWUubm9kZU5hbWUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKTtmJiYiQlIiPT09Zi5ub2RlTmFtZSYmZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGYpOyhlPWQubGFzdENoaWxkKSYmIkJSIj09PWUubm9kZU5hbWUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKTtiLnNlbGVjdGlvbi5zZWxlY3ROb2RlKGQpfXZhciBnPWIuZG9tLGk9IkgxIEgyIEgzIEg0IEg1IEg2IFAgQkxPQ0tRVU9URSBESVYiLnNwbGl0KCIgIik7Yi5jb21tYW5kcy5mb3JtYXRCbG9jaz17ZXhlYzpmdW5jdGlvbihoLGssaixuLHApe3ZhciBxPWguZG9jLHI9dGhpcy5zdGF0ZShoLGssaixuLHApLG0saj0ic3RyaW5nIj09PQp0eXBlb2Ygaj9qLnRvVXBwZXJDYXNlKCk6ajtpZihyKWguc2VsZWN0aW9uLmV4ZWN1dGVBbmRSZXN0b3JlU2ltcGxlKGZ1bmN0aW9uKCl7cCYmKHIuY2xhc3NOYW1lPXIuY2xhc3NOYW1lLnJlcGxhY2UocCwiIikpO3ZhciBlPSEhYi5sYW5nLnN0cmluZyhyLmNsYXNzTmFtZSkudHJpbSgpO2lmKCFlJiZyLm5vZGVOYW1lPT09KGp8fCJESVYiKSl7dmFyIGU9cixmPWUub3duZXJEb2N1bWVudCxoPWEoZSksaT1jKGUpO2gmJiFkKGgpJiZlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGYuY3JlYXRlRWxlbWVudCgiYnIiKSxoKTtpJiYhZChpKSYmZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShmLmNyZWF0ZUVsZW1lbnQoImJyIiksZSk7Zy5yZXBsYWNlV2l0aENoaWxkTm9kZXMocil9ZWxzZSBlJiZnLnJlbmFtZUVsZW1lbnQociwiRElWIil9KTtlbHNle2lmKG51bGw9PT1qfHxiLmxhbmcuYXJyYXkoaSkuY29udGFpbnMoaikpaWYobT1oLnNlbGVjdGlvbi5nZXRTZWxlY3RlZE5vZGUoKSwKcj1nLmdldFBhcmVudEVsZW1lbnQobSx7bm9kZU5hbWU6aX0pKXtoLnNlbGVjdGlvbi5leGVjdXRlQW5kUmVzdG9yZVNpbXBsZShmdW5jdGlvbigpe2omJihyPWcucmVuYW1lRWxlbWVudChyLGopKTtpZihuKXt2YXIgYT1yO2EuY2xhc3NOYW1lPyhhLmNsYXNzTmFtZT1hLmNsYXNzTmFtZS5yZXBsYWNlKHAsIiIpLGEuY2xhc3NOYW1lKz0iICIrbik6YS5jbGFzc05hbWU9bn19KTtyZXR1cm59aC5jb21tYW5kcy5zdXBwb3J0KGspP2UocSxrLGp8fCJESVYiLG4pOihyPXEuY3JlYXRlRWxlbWVudChqfHwiRElWIiksbiYmKHIuY2xhc3NOYW1lPW4pLGYoaCxyKSl9fSxzdGF0ZTpmdW5jdGlvbihhLGIsYyxkLGUpe2M9InN0cmluZyI9PT10eXBlb2YgYz9jLnRvVXBwZXJDYXNlKCk6YzthPWEuc2VsZWN0aW9uLmdldFNlbGVjdGVkTm9kZSgpO3JldHVybiBnLmdldFBhcmVudEVsZW1lbnQoYSx7bm9kZU5hbWU6YyxjbGFzc05hbWU6ZCxjbGFzc1JlZ0V4cDplfSl9LHZhbHVlOmZ1bmN0aW9uKCl7fX19KSh3eXNpaHRtbDUpOwooZnVuY3Rpb24oYil7ZnVuY3Rpb24gYyhjLGYsZyl7dmFyIGk9YysiOiIrZjtpZighZFtpXSl7dmFyIGg9ZCxrPWIuc2VsZWN0aW9uLkhUTUxBcHBsaWVyLGo9YVtjXSxjPWo/W2MudG9Mb3dlckNhc2UoKSxqLnRvTG93ZXJDYXNlKCldOltjLnRvTG93ZXJDYXNlKCldO2hbaV09bmV3IGsoYyxmLGcsITApfXJldHVybiBkW2ldfXZhciBhPXtzdHJvbmc6ImIiLGVtOiJpIixiOiJzdHJvbmciLGk6ImVtIn0sZD17fTtiLmNvbW1hbmRzLmZvcm1hdElubGluZT17ZXhlYzpmdW5jdGlvbihhLGIsZCxpLGgpe2I9YS5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTtpZighYilyZXR1cm4hMTtjKGQsaSxoKS50b2dnbGVSYW5nZShiKTthLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oYil9LHN0YXRlOmZ1bmN0aW9uKGQsZixnLGksaCl7dmFyIGY9ZC5kb2Msaz1hW2ddfHxnO2lmKCFiLmRvbS5oYXNFbGVtZW50V2l0aFRhZ05hbWUoZixnKSYmIWIuZG9tLmhhc0VsZW1lbnRXaXRoVGFnTmFtZShmLGspfHxpJiYKIWIuZG9tLmhhc0VsZW1lbnRXaXRoQ2xhc3NOYW1lKGYsaSkpcmV0dXJuITE7ZD1kLnNlbGVjdGlvbi5nZXRSYW5nZSgpO3JldHVybiFkPyExOmMoZyxpLGgpLmlzQXBwbGllZFRvUmFuZ2UoZCl9LHZhbHVlOmZ1bmN0aW9uKCl7fX19KSh3eXNpaHRtbDUpOyhmdW5jdGlvbihiKXtiLmNvbW1hbmRzLmluc2VydEhUTUw9e2V4ZWM6ZnVuY3Rpb24oYixhLGQpe2IuY29tbWFuZHMuc3VwcG9ydChhKT9iLmRvYy5leGVjQ29tbWFuZChhLCExLGQpOmIuc2VsZWN0aW9uLmluc2VydEhUTUwoZCl9LHN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuITF9LHZhbHVlOmZ1bmN0aW9uKCl7fX19KSh3eXNpaHRtbDUpOwooZnVuY3Rpb24oYil7Yi5jb21tYW5kcy5pbnNlcnRJbWFnZT17ZXhlYzpmdW5jdGlvbihjLGEsZCl7dmFyIGQ9Im9iamVjdCI9PT10eXBlb2YgZD9kOntzcmM6ZH0sZT1jLmRvYyxhPXRoaXMuc3RhdGUoYyksZjtpZihhKWMuc2VsZWN0aW9uLnNldEJlZm9yZShhKSxkPWEucGFyZW50Tm9kZSxkLnJlbW92ZUNoaWxkKGEpLGIuZG9tLnJlbW92ZUVtcHR5VGV4dE5vZGVzKGQpLCJBIj09PWQubm9kZU5hbWUmJiFkLmZpcnN0Q2hpbGQmJihjLnNlbGVjdGlvbi5zZXRBZnRlcihkKSxkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZCkpLGIucXVpcmtzLnJlZHJhdyhjLmVsZW1lbnQpO2Vsc2V7YT1lLmNyZWF0ZUVsZW1lbnQoIklNRyIpO2ZvcihmIGluIGQpYVtmXT1kW2ZdO2Muc2VsZWN0aW9uLmluc2VydE5vZGUoYSk7Yi5icm93c2VyLmhhc1Byb2JsZW1zU2V0dGluZ0NhcmV0QWZ0ZXJJbWcoKT8oZD1lLmNyZWF0ZVRleHROb2RlKGIuSU5WSVNJQkxFX1NQQUNFKSxjLnNlbGVjdGlvbi5pbnNlcnROb2RlKGQpLApjLnNlbGVjdGlvbi5zZXRBZnRlcihkKSk6Yy5zZWxlY3Rpb24uc2V0QWZ0ZXIoYSl9fSxzdGF0ZTpmdW5jdGlvbihjKXt2YXIgYTtpZighYi5kb20uaGFzRWxlbWVudFdpdGhUYWdOYW1lKGMuZG9jLCJJTUciKSlyZXR1cm4hMTthPWMuc2VsZWN0aW9uLmdldFNlbGVjdGVkTm9kZSgpO2lmKCFhKXJldHVybiExO2lmKCJJTUciPT09YS5ub2RlTmFtZSlyZXR1cm4gYTtpZihhLm5vZGVUeXBlIT09Yi5FTEVNRU5UX05PREUpcmV0dXJuITE7YT1jLnNlbGVjdGlvbi5nZXRUZXh0KCk7aWYoYT1iLmxhbmcuc3RyaW5nKGEpLnRyaW0oKSlyZXR1cm4hMTtjPWMuc2VsZWN0aW9uLmdldE5vZGVzKGIuRUxFTUVOVF9OT0RFLGZ1bmN0aW9uKGEpe3JldHVybiJJTUciPT09YS5ub2RlTmFtZX0pO3JldHVybiAxIT09Yy5sZW5ndGg/ITE6Y1swXX0sdmFsdWU6ZnVuY3Rpb24oYil7cmV0dXJuKGI9dGhpcy5zdGF0ZShiKSkmJmIuc3JjfX19KSh3eXNpaHRtbDUpOwooZnVuY3Rpb24oYil7dmFyIGM9Ijxicj4iKyhiLmJyb3dzZXIubmVlZHNTcGFjZUFmdGVyTGluZUJyZWFrKCk/IiAiOiIiKTtiLmNvbW1hbmRzLmluc2VydExpbmVCcmVhaz17ZXhlYzpmdW5jdGlvbihhLGQpe2EuY29tbWFuZHMuc3VwcG9ydChkKT8oYS5kb2MuZXhlY0NvbW1hbmQoZCwhMSxudWxsKSxiLmJyb3dzZXIuYXV0b1Njcm9sbHNUb0NhcmV0KCl8fGEuc2VsZWN0aW9uLnNjcm9sbEludG9WaWV3KCkpOmEuY29tbWFuZHMuZXhlYygiaW5zZXJ0SFRNTCIsYyl9LHN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuITF9LHZhbHVlOmZ1bmN0aW9uKCl7fX19KSh3eXNpaHRtbDUpOwooZnVuY3Rpb24oYil7Yi5jb21tYW5kcy5pbnNlcnRPcmRlcmVkTGlzdD17ZXhlYzpmdW5jdGlvbihjLGEpe3ZhciBkPWMuZG9jLGU9Yy5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKCksZj1iLmRvbS5nZXRQYXJlbnRFbGVtZW50KGUse25vZGVOYW1lOiJPTCJ9KSxnPWIuZG9tLmdldFBhcmVudEVsZW1lbnQoZSx7bm9kZU5hbWU6IlVMIn0pLGU9Il93eXNpaHRtbDUtdGVtcC0iKyhuZXcgRGF0ZSkuZ2V0VGltZSgpLGk7Yy5jb21tYW5kcy5zdXBwb3J0KGEpP2QuZXhlY0NvbW1hbmQoYSwhMSxudWxsKTpmP2Muc2VsZWN0aW9uLmV4ZWN1dGVBbmRSZXN0b3JlU2ltcGxlKGZ1bmN0aW9uKCl7Yi5kb20ucmVzb2x2ZUxpc3QoZil9KTpnP2Muc2VsZWN0aW9uLmV4ZWN1dGVBbmRSZXN0b3JlU2ltcGxlKGZ1bmN0aW9uKCl7Yi5kb20ucmVuYW1lRWxlbWVudChnLCJvbCIpfSk6KGMuY29tbWFuZHMuZXhlYygiZm9ybWF0QmxvY2siLCJkaXYiLGUpLGk9ZC5xdWVyeVNlbGVjdG9yKCIuIitlKSwKZD0iIj09PWkuaW5uZXJIVE1MfHxpLmlubmVySFRNTD09PWIuSU5WSVNJQkxFX1NQQUNFLGMuc2VsZWN0aW9uLmV4ZWN1dGVBbmRSZXN0b3JlU2ltcGxlKGZ1bmN0aW9uKCl7Zj1iLmRvbS5jb252ZXJ0VG9MaXN0KGksIm9sIil9KSxkJiZjLnNlbGVjdGlvbi5zZWxlY3ROb2RlKGYucXVlcnlTZWxlY3RvcigibGkiKSkpfSxzdGF0ZTpmdW5jdGlvbihjKXtjPWMuc2VsZWN0aW9uLmdldFNlbGVjdGVkTm9kZSgpO3JldHVybiBiLmRvbS5nZXRQYXJlbnRFbGVtZW50KGMse25vZGVOYW1lOiJPTCJ9KX0sdmFsdWU6ZnVuY3Rpb24oKXt9fX0pKHd5c2lodG1sNSk7CihmdW5jdGlvbihiKXtiLmNvbW1hbmRzLmluc2VydFVub3JkZXJlZExpc3Q9e2V4ZWM6ZnVuY3Rpb24oYyxhKXt2YXIgZD1jLmRvYyxlPWMuc2VsZWN0aW9uLmdldFNlbGVjdGVkTm9kZSgpLGY9Yi5kb20uZ2V0UGFyZW50RWxlbWVudChlLHtub2RlTmFtZToiVUwifSksZz1iLmRvbS5nZXRQYXJlbnRFbGVtZW50KGUse25vZGVOYW1lOiJPTCJ9KSxlPSJfd3lzaWh0bWw1LXRlbXAtIisobmV3IERhdGUpLmdldFRpbWUoKSxpO2MuY29tbWFuZHMuc3VwcG9ydChhKT9kLmV4ZWNDb21tYW5kKGEsITEsbnVsbCk6Zj9jLnNlbGVjdGlvbi5leGVjdXRlQW5kUmVzdG9yZVNpbXBsZShmdW5jdGlvbigpe2IuZG9tLnJlc29sdmVMaXN0KGYpfSk6Zz9jLnNlbGVjdGlvbi5leGVjdXRlQW5kUmVzdG9yZVNpbXBsZShmdW5jdGlvbigpe2IuZG9tLnJlbmFtZUVsZW1lbnQoZywidWwiKX0pOihjLmNvbW1hbmRzLmV4ZWMoImZvcm1hdEJsb2NrIiwiZGl2IixlKSxpPWQucXVlcnlTZWxlY3RvcigiLiIrZSksCmQ9IiI9PT1pLmlubmVySFRNTHx8aS5pbm5lckhUTUw9PT1iLklOVklTSUJMRV9TUEFDRSxjLnNlbGVjdGlvbi5leGVjdXRlQW5kUmVzdG9yZVNpbXBsZShmdW5jdGlvbigpe2Y9Yi5kb20uY29udmVydFRvTGlzdChpLCJ1bCIpfSksZCYmYy5zZWxlY3Rpb24uc2VsZWN0Tm9kZShmLnF1ZXJ5U2VsZWN0b3IoImxpIikpKX0sc3RhdGU6ZnVuY3Rpb24oYyl7Yz1jLnNlbGVjdGlvbi5nZXRTZWxlY3RlZE5vZGUoKTtyZXR1cm4gYi5kb20uZ2V0UGFyZW50RWxlbWVudChjLHtub2RlTmFtZToiVUwifSl9LHZhbHVlOmZ1bmN0aW9uKCl7fX19KSh3eXNpaHRtbDUpOyhmdW5jdGlvbihiKXtiLmNvbW1hbmRzLml0YWxpYz17ZXhlYzpmdW5jdGlvbihjLGEpe3JldHVybiBiLmNvbW1hbmRzLmZvcm1hdElubGluZS5leGVjKGMsYSwiaSIpfSxzdGF0ZTpmdW5jdGlvbihjLGEpe3JldHVybiBiLmNvbW1hbmRzLmZvcm1hdElubGluZS5zdGF0ZShjLGEsImkiKX0sdmFsdWU6ZnVuY3Rpb24oKXt9fX0pKHd5c2lodG1sNSk7CihmdW5jdGlvbihiKXt2YXIgYz0vd3lzaXd5Zy10ZXh0LWFsaWduLVthLXpdKy9nO2IuY29tbWFuZHMuanVzdGlmeUNlbnRlcj17ZXhlYzpmdW5jdGlvbihhKXtyZXR1cm4gYi5jb21tYW5kcy5mb3JtYXRCbG9jay5leGVjKGEsImZvcm1hdEJsb2NrIixudWxsLCJ3eXNpd3lnLXRleHQtYWxpZ24tY2VudGVyIixjKX0sc3RhdGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGIuY29tbWFuZHMuZm9ybWF0QmxvY2suc3RhdGUoYSwiZm9ybWF0QmxvY2siLG51bGwsInd5c2l3eWctdGV4dC1hbGlnbi1jZW50ZXIiLGMpfSx2YWx1ZTpmdW5jdGlvbigpe319fSkod3lzaWh0bWw1KTsKKGZ1bmN0aW9uKGIpe3ZhciBjPS93eXNpd3lnLXRleHQtYWxpZ24tW2Etel0rL2c7Yi5jb21tYW5kcy5qdXN0aWZ5TGVmdD17ZXhlYzpmdW5jdGlvbihhKXtyZXR1cm4gYi5jb21tYW5kcy5mb3JtYXRCbG9jay5leGVjKGEsImZvcm1hdEJsb2NrIixudWxsLCJ3eXNpd3lnLXRleHQtYWxpZ24tbGVmdCIsYyl9LHN0YXRlOmZ1bmN0aW9uKGEpe3JldHVybiBiLmNvbW1hbmRzLmZvcm1hdEJsb2NrLnN0YXRlKGEsImZvcm1hdEJsb2NrIixudWxsLCJ3eXNpd3lnLXRleHQtYWxpZ24tbGVmdCIsYyl9LHZhbHVlOmZ1bmN0aW9uKCl7fX19KSh3eXNpaHRtbDUpOwooZnVuY3Rpb24oYil7dmFyIGM9L3d5c2l3eWctdGV4dC1hbGlnbi1bYS16XSsvZztiLmNvbW1hbmRzLmp1c3RpZnlSaWdodD17ZXhlYzpmdW5jdGlvbihhKXtyZXR1cm4gYi5jb21tYW5kcy5mb3JtYXRCbG9jay5leGVjKGEsImZvcm1hdEJsb2NrIixudWxsLCJ3eXNpd3lnLXRleHQtYWxpZ24tcmlnaHQiLGMpfSxzdGF0ZTpmdW5jdGlvbihhKXtyZXR1cm4gYi5jb21tYW5kcy5mb3JtYXRCbG9jay5zdGF0ZShhLCJmb3JtYXRCbG9jayIsbnVsbCwid3lzaXd5Zy10ZXh0LWFsaWduLXJpZ2h0IixjKX0sdmFsdWU6ZnVuY3Rpb24oKXt9fX0pKHd5c2lodG1sNSk7KGZ1bmN0aW9uKGIpe2IuY29tbWFuZHMudW5kZXJsaW5lPXtleGVjOmZ1bmN0aW9uKGMsYSl7cmV0dXJuIGIuY29tbWFuZHMuZm9ybWF0SW5saW5lLmV4ZWMoYyxhLCJ1Iil9LHN0YXRlOmZ1bmN0aW9uKGMsYSl7cmV0dXJuIGIuY29tbWFuZHMuZm9ybWF0SW5saW5lLnN0YXRlKGMsYSwidSIpfSx2YWx1ZTpmdW5jdGlvbigpe319fSkod3lzaWh0bWw1KTsKKGZ1bmN0aW9uKGIpe3ZhciBjPSc8c3BhbiBpZD0iX3d5c2lodG1sNS11bmRvIiBjbGFzcz0iX3d5c2lodG1sNS10ZW1wIj4nK2IuSU5WSVNJQkxFX1NQQUNFKyI8L3NwYW4+IixhPSc8c3BhbiBpZD0iX3d5c2lodG1sNS1yZWRvIiBjbGFzcz0iX3d5c2lodG1sNS10ZW1wIj4nK2IuSU5WSVNJQkxFX1NQQUNFKyI8L3NwYW4+IixkPWIuZG9tO2IuVW5kb01hbmFnZXI9Yi5sYW5nLkRpc3BhdGNoZXIuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihhKXt0aGlzLmVkaXRvcj1hO3RoaXMuY29tcG9zZXI9YS5jb21wb3Nlcjt0aGlzLmVsZW1lbnQ9dGhpcy5jb21wb3Nlci5lbGVtZW50O3RoaXMuaGlzdG9yeT1bdGhpcy5jb21wb3Nlci5nZXRWYWx1ZSgpXTt0aGlzLnBvc2l0aW9uPTE7dGhpcy5jb21wb3Nlci5jb21tYW5kcy5zdXBwb3J0KCJpbnNlcnRIVE1MIikmJnRoaXMuX29ic2VydmUoKX0sX29ic2VydmU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLGY9dGhpcy5jb21wb3Nlci5zYW5kYm94LmdldERvY3VtZW50KCksCmc7ZC5vYnNlcnZlKHRoaXMuZWxlbWVudCwia2V5ZG93biIsZnVuY3Rpb24oYSl7aWYoIShhLmFsdEtleXx8IWEuY3RybEtleSYmIWEubWV0YUtleSkpe3ZhciBiPWEua2V5Q29kZSxjPTkwPT09YiYmYS5zaGlmdEtleXx8ODk9PT1iOzkwPT09YiYmIWEuc2hpZnRLZXk/KGUudW5kbygpLGEucHJldmVudERlZmF1bHQoKSk6YyYmKGUucmVkbygpLGEucHJldmVudERlZmF1bHQoKSl9fSk7ZC5vYnNlcnZlKHRoaXMuZWxlbWVudCwia2V5ZG93biIsZnVuY3Rpb24oYSl7YT1hLmtleUNvZGU7YSE9PWcmJihnPWEsKDg9PT1hfHw0Nj09PWEpJiZlLnRyYW5zYWN0KCkpfSk7aWYoYi5icm93c2VyLmhhc1VuZG9JbkNvbnRleHRNZW51KCkpe3ZhciBpLGgsaz1mdW5jdGlvbigpe2Zvcih2YXIgYTthPWYucXVlcnlTZWxlY3RvcigiLl93eXNpaHRtbDUtdGVtcCIpOylhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSk7Y2xlYXJJbnRlcnZhbChpKX07ZC5vYnNlcnZlKHRoaXMuZWxlbWVudCwiY29udGV4dG1lbnUiLApmdW5jdGlvbigpe2soKTtlLmNvbXBvc2VyLnNlbGVjdGlvbi5leGVjdXRlQW5kUmVzdG9yZVNpbXBsZShmdW5jdGlvbigpe2UuZWxlbWVudC5sYXN0Q2hpbGQmJmUuY29tcG9zZXIuc2VsZWN0aW9uLnNldEFmdGVyKGUuZWxlbWVudC5sYXN0Q2hpbGQpO2YuZXhlY0NvbW1hbmQoImluc2VydEhUTUwiLCExLGMpO2YuZXhlY0NvbW1hbmQoImluc2VydEhUTUwiLCExLGEpO2YuZXhlY0NvbW1hbmQoInVuZG8iLCExLG51bGwpfSk7aT1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2YuZ2V0RWxlbWVudEJ5SWQoIl93eXNpaHRtbDUtcmVkbyIpPyhrKCksZS5yZWRvKCkpOmYuZ2V0RWxlbWVudEJ5SWQoIl93eXNpaHRtbDUtdW5kbyIpfHwoaygpLGUudW5kbygpKX0sNDAwKTtofHwoaD0hMCxkLm9ic2VydmUoZG9jdW1lbnQsIm1vdXNlZG93biIsayksZC5vYnNlcnZlKGYsWyJtb3VzZWRvd24iLCJwYXN0ZSIsImN1dCIsImNvcHkiXSxrKSl9KX10aGlzLmVkaXRvci5vYnNlcnZlKCJuZXd3b3JkOmNvbXBvc2VyIiwKZnVuY3Rpb24oKXtlLnRyYW5zYWN0KCl9KS5vYnNlcnZlKCJiZWZvcmVjb21tYW5kOmNvbXBvc2VyIixmdW5jdGlvbigpe2UudHJhbnNhY3QoKX0pfSx0cmFuc2FjdDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuaGlzdG9yeVt0aGlzLnBvc2l0aW9uLTFdLGI9dGhpcy5jb21wb3Nlci5nZXRWYWx1ZSgpO2lmKGIhPWEpe2lmKDQwPCh0aGlzLmhpc3RvcnkubGVuZ3RoPXRoaXMucG9zaXRpb24pKXRoaXMuaGlzdG9yeS5zaGlmdCgpLHRoaXMucG9zaXRpb24tLTt0aGlzLnBvc2l0aW9uKys7dGhpcy5oaXN0b3J5LnB1c2goYil9fSx1bmRvOmZ1bmN0aW9uKCl7dGhpcy50cmFuc2FjdCgpOzE+PXRoaXMucG9zaXRpb258fCh0aGlzLnNldCh0aGlzLmhpc3RvcnlbLS10aGlzLnBvc2l0aW9uLTFdKSx0aGlzLmVkaXRvci5maXJlKCJ1bmRvOmNvbXBvc2VyIikpfSxyZWRvOmZ1bmN0aW9uKCl7dGhpcy5wb3NpdGlvbj49dGhpcy5oaXN0b3J5Lmxlbmd0aHx8KHRoaXMuc2V0KHRoaXMuaGlzdG9yeVsrK3RoaXMucG9zaXRpb24tCjFdKSx0aGlzLmVkaXRvci5maXJlKCJyZWRvOmNvbXBvc2VyIikpfSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5jb21wb3Nlci5zZXRWYWx1ZShhKTt0aGlzLmVkaXRvci5mb2N1cyghMCl9fSl9KSh3eXNpaHRtbDUpOwp3eXNpaHRtbDUudmlld3MuVmlldz1CYXNlLmV4dGVuZCh7Y29uc3RydWN0b3I6ZnVuY3Rpb24oYixjLGEpe3RoaXMucGFyZW50PWI7dGhpcy5lbGVtZW50PWM7dGhpcy5jb25maWc9YTt0aGlzLl9vYnNlcnZlVmlld0NoYW5nZSgpfSxfb2JzZXJ2ZVZpZXdDaGFuZ2U6ZnVuY3Rpb24oKXt2YXIgYj10aGlzO3RoaXMucGFyZW50Lm9ic2VydmUoImJlZm9yZWxvYWQiLGZ1bmN0aW9uKCl7Yi5wYXJlbnQub2JzZXJ2ZSgiY2hhbmdlX3ZpZXciLGZ1bmN0aW9uKGMpe2M9PT1iLm5hbWU/KGIucGFyZW50LmN1cnJlbnRWaWV3PWIsYi5zaG93KCksc2V0VGltZW91dChmdW5jdGlvbigpe2IuZm9jdXMoKX0sMCkpOmIuaGlkZSgpfSl9KX0sZm9jdXM6ZnVuY3Rpb24oKXtpZih0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKCI6Zm9jdXMiKSE9PXRoaXMuZWxlbWVudCl0cnl7dGhpcy5lbGVtZW50LmZvY3VzKCl9Y2F0Y2goYil7fX0saGlkZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5zdHlsZS5kaXNwbGF5PQoibm9uZSJ9LHNob3c6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuc3R5bGUuZGlzcGxheT0iIn0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRpc2FibGVkIiwiZGlzYWJsZWQiKX0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiZGlzYWJsZWQiKX19KTsKKGZ1bmN0aW9uKGIpe3ZhciBjPWIuZG9tLGE9Yi5icm93c2VyO2Iudmlld3MuQ29tcG9zZXI9Yi52aWV3cy5WaWV3LmV4dGVuZCh7bmFtZToiY29tcG9zZXIiLENBUkVUX0hBQ0s6Ijxicj4iLGNvbnN0cnVjdG9yOmZ1bmN0aW9uKGEsYixjKXt0aGlzLmJhc2UoYSxiLGMpO3RoaXMudGV4dGFyZWE9dGhpcy5wYXJlbnQudGV4dGFyZWE7dGhpcy5faW5pdFNhbmRib3goKX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuaW5uZXJIVE1MPWEuZGlzcGxheXNDYXJldEluRW1wdHlDb250ZW50RWRpdGFibGVDb3JyZWN0bHkoKT8iIjp0aGlzLkNBUkVUX0hBQ0t9LGdldFZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuaXNFbXB0eSgpPyIiOmIucXVpcmtzLmdldENvcnJlY3RJbm5lckhUTUwodGhpcy5lbGVtZW50KTthJiYoYz10aGlzLnBhcmVudC5wYXJzZShjKSk7cmV0dXJuIGM9Yi5sYW5nLnN0cmluZyhjKS5yZXBsYWNlKGIuSU5WSVNJQkxFX1NQQUNFKS5ieSgiIil9LHNldFZhbHVlOmZ1bmN0aW9uKGEsCmIpe2ImJihhPXRoaXMucGFyZW50LnBhcnNlKGEpKTt0aGlzLmVsZW1lbnQuaW5uZXJIVE1MPWF9LHNob3c6ZnVuY3Rpb24oKXt0aGlzLmlmcmFtZS5zdHlsZS5kaXNwbGF5PXRoaXMuX2Rpc3BsYXlTdHlsZXx8IiI7dGhpcy5kaXNhYmxlKCk7dGhpcy5lbmFibGUoKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuX2Rpc3BsYXlTdHlsZT1jLmdldFN0eWxlKCJkaXNwbGF5IikuZnJvbSh0aGlzLmlmcmFtZSk7Im5vbmUiPT09dGhpcy5fZGlzcGxheVN0eWxlJiYodGhpcy5fZGlzcGxheVN0eWxlPW51bGwpO3RoaXMuaWZyYW1lLnN0eWxlLmRpc3BsYXk9Im5vbmUifSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiY29udGVudEVkaXRhYmxlIik7dGhpcy5iYXNlKCl9LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoImNvbnRlbnRFZGl0YWJsZSIsInRydWUiKTt0aGlzLmJhc2UoKX0sZm9jdXM6ZnVuY3Rpb24oYSl7Yi5icm93c2VyLmRvZXNBc3luY0ZvY3VzKCkmJgp0aGlzLmhhc1BsYWNlaG9sZGVyU2V0KCkmJnRoaXMuY2xlYXIoKTt0aGlzLmJhc2UoKTt2YXIgYz10aGlzLmVsZW1lbnQubGFzdENoaWxkO2EmJmMmJigiQlIiPT09Yy5ub2RlTmFtZT90aGlzLnNlbGVjdGlvbi5zZXRCZWZvcmUodGhpcy5lbGVtZW50Lmxhc3RDaGlsZCk6dGhpcy5zZWxlY3Rpb24uc2V0QWZ0ZXIodGhpcy5lbGVtZW50Lmxhc3RDaGlsZCkpfSxnZXRUZXh0Q29udGVudDpmdW5jdGlvbigpe3JldHVybiBjLmdldFRleHRDb250ZW50KHRoaXMuZWxlbWVudCl9LGhhc1BsYWNlaG9sZGVyU2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGV4dENvbnRlbnQoKT09dGhpcy50ZXh0YXJlYS5lbGVtZW50LmdldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiKX0saXNFbXB0eTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZWxlbWVudC5pbm5lckhUTUw7cmV0dXJuIiI9PT1hfHxhPT09dGhpcy5DQVJFVF9IQUNLfHx0aGlzLmhhc1BsYWNlaG9sZGVyU2V0KCl8fCIiPT09dGhpcy5nZXRUZXh0Q29udGVudCgpJiYKIXRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKCJibG9ja3F1b3RlLCB1bCwgb2wsIGltZywgZW1iZWQsIG9iamVjdCwgdGFibGUsIGlmcmFtZSwgc3ZnLCB2aWRlbywgYXVkaW8sIGJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEiKX0sX2luaXRTYW5kYm94OmZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLnNhbmRib3g9bmV3IGMuU2FuZGJveChmdW5jdGlvbigpe2EuX2NyZWF0ZSgpfSx7c3R5bGVzaGVldHM6dGhpcy5jb25maWcuc3R5bGVzaGVldHN9KTt0aGlzLmlmcmFtZT10aGlzLnNhbmRib3guZ2V0SWZyYW1lKCk7dmFyIGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtiLnR5cGU9ImhpZGRlbiI7Yi5uYW1lPSJfd3lzaWh0bWw1X21vZGUiO2IudmFsdWU9MTt2YXIgZj10aGlzLnRleHRhcmVhLmVsZW1lbnQ7Yy5pbnNlcnQodGhpcy5pZnJhbWUpLmFmdGVyKGYpO2MuaW5zZXJ0KGIpLmFmdGVyKGYpfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpczt0aGlzLmRvYz0KdGhpcy5zYW5kYm94LmdldERvY3VtZW50KCk7dGhpcy5lbGVtZW50PXRoaXMuZG9jLmJvZHk7dGhpcy50ZXh0YXJlYT10aGlzLnBhcmVudC50ZXh0YXJlYTt0aGlzLmVsZW1lbnQuaW5uZXJIVE1MPXRoaXMudGV4dGFyZWEuZ2V0VmFsdWUoITApO3RoaXMuZW5hYmxlKCk7dGhpcy5zZWxlY3Rpb249bmV3IGIuU2VsZWN0aW9uKHRoaXMucGFyZW50KTt0aGlzLmNvbW1hbmRzPW5ldyBiLkNvbW1hbmRzKHRoaXMucGFyZW50KTtjLmNvcHlBdHRyaWJ1dGVzKCJjbGFzc05hbWUgc3BlbGxjaGVjayB0aXRsZSBsYW5nIGRpciBhY2Nlc3NLZXkiLnNwbGl0KCIgIikpLmZyb20odGhpcy50ZXh0YXJlYS5lbGVtZW50KS50byh0aGlzLmVsZW1lbnQpO2MuYWRkQ2xhc3ModGhpcy5lbGVtZW50LHRoaXMuY29uZmlnLmNvbXBvc2VyQ2xhc3NOYW1lKTt0aGlzLmNvbmZpZy5zdHlsZSYmdGhpcy5zdHlsZSgpO3RoaXMub2JzZXJ2ZSgpO3ZhciBlPXRoaXMuY29uZmlnLm5hbWU7ZSYmKGMuYWRkQ2xhc3ModGhpcy5lbGVtZW50LAplKSxjLmFkZENsYXNzKHRoaXMuaWZyYW1lLGUpKTsoZT0ic3RyaW5nIj09PXR5cGVvZiB0aGlzLmNvbmZpZy5wbGFjZWhvbGRlcj90aGlzLmNvbmZpZy5wbGFjZWhvbGRlcjp0aGlzLnRleHRhcmVhLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIpKSYmYy5zaW11bGF0ZVBsYWNlaG9sZGVyKHRoaXMucGFyZW50LHRoaXMsZSk7dGhpcy5jb21tYW5kcy5leGVjKCJzdHlsZVdpdGhDU1MiLCExKTt0aGlzLl9pbml0QXV0b0xpbmtpbmcoKTt0aGlzLl9pbml0T2JqZWN0UmVzaXppbmcoKTt0aGlzLl9pbml0VW5kb01hbmFnZXIoKTsodGhpcy50ZXh0YXJlYS5lbGVtZW50Lmhhc0F0dHJpYnV0ZSgiYXV0b2ZvY3VzIil8fGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIjpmb2N1cyIpPT10aGlzLnRleHRhcmVhLmVsZW1lbnQpJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5mb2N1cygpfSwxMDApO2IucXVpcmtzLmluc2VydExpbmVCcmVha09uUmV0dXJuKHRoaXMpO2EuY2xlYXJzQ29udGVudEVkaXRhYmxlQ29ycmVjdGx5KCl8fApiLnF1aXJrcy5lbnN1cmVQcm9wZXJDbGVhcmluZyh0aGlzKTthLmNsZWFyc0xpc3RzSW5Db250ZW50RWRpdGFibGVDb3JyZWN0bHkoKXx8Yi5xdWlya3MuZW5zdXJlUHJvcGVyQ2xlYXJpbmdPZkxpc3RzKHRoaXMpO3RoaXMuaW5pdFN5bmMmJnRoaXMuY29uZmlnLnN5bmMmJnRoaXMuaW5pdFN5bmMoKTt0aGlzLnRleHRhcmVhLmhpZGUoKTt0aGlzLnBhcmVudC5maXJlKCJiZWZvcmVsb2FkIikuZmlyZSgibG9hZCIpfSxfaW5pdEF1dG9MaW5raW5nOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxlPWEuY2FuRGlzYWJsZUF1dG9MaW5raW5nKCksZj1hLmRvZXNBdXRvTGlua2luZ0luQ29udGVudEVkaXRhYmxlKCk7ZSYmdGhpcy5jb21tYW5kcy5leGVjKCJhdXRvVXJsRGV0ZWN0IiwhMSk7aWYodGhpcy5jb25maWcuYXV0b0xpbmspeyghZnx8ZiYmZSkmJnRoaXMucGFyZW50Lm9ic2VydmUoIm5ld3dvcmQ6Y29tcG9zZXIiLGZ1bmN0aW9uKCl7ZC5zZWxlY3Rpb24uZXhlY3V0ZUFuZFJlc3RvcmUoZnVuY3Rpb24oYSwKYil7Yy5hdXRvTGluayhiLnBhcmVudE5vZGUpfSl9KTt2YXIgZz10aGlzLnNhbmRib3guZ2V0RG9jdW1lbnQoKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpLGk9Yy5hdXRvTGluay5VUkxfUkVHX0VYUCxoPWZ1bmN0aW9uKGEpe2E9Yi5sYW5nLnN0cmluZyhjLmdldFRleHRDb250ZW50KGEpKS50cmltKCk7Ind3dy4iPT09YS5zdWJzdHIoMCw0KSYmKGE9Imh0dHA6Ly8iK2EpO3JldHVybiBhfTtjLm9ic2VydmUodGhpcy5lbGVtZW50LCJrZXlkb3duIixmdW5jdGlvbihhKXtpZihnLmxlbmd0aCl7dmFyIGE9ZC5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKGEudGFyZ2V0Lm93bmVyRG9jdW1lbnQpLGI9Yy5nZXRQYXJlbnRFbGVtZW50KGEse25vZGVOYW1lOiJBIn0sNCksZTtiJiYoZT1oKGIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT1oKGIpO2EhPT1lJiZhLm1hdGNoKGkpJiZiLnNldEF0dHJpYnV0ZSgiaHJlZiIsYSl9LDApKX19KX19LF9pbml0T2JqZWN0UmVzaXppbmc6ZnVuY3Rpb24oKXt2YXIgZD0KWyJ3aWR0aCIsImhlaWdodCJdLGU9ZC5sZW5ndGgsZj10aGlzLmVsZW1lbnQ7dGhpcy5jb21tYW5kcy5leGVjKCJlbmFibGVPYmplY3RSZXNpemluZyIsdGhpcy5jb25maWcuYWxsb3dPYmplY3RSZXNpemluZyk7dGhpcy5jb25maWcuYWxsb3dPYmplY3RSZXNpemluZz9hLnN1cHBvcnRzRXZlbnQoInJlc2l6ZWVuZCIpJiZjLm9ic2VydmUoZiwicmVzaXplZW5kIixmdW5jdGlvbihhKXtmb3IodmFyIGE9YS50YXJnZXR8fGEuc3JjRWxlbWVudCxjPWEuc3R5bGUsaD0wLGs7aDxlO2grKylrPWRbaF0sY1trXSYmKGEuc2V0QXR0cmlidXRlKGsscGFyc2VJbnQoY1trXSwxMCkpLGNba109IiIpO2IucXVpcmtzLnJlZHJhdyhmKX0pOmEuc3VwcG9ydHNFdmVudCgicmVzaXplc3RhcnQiKSYmYy5vYnNlcnZlKGYsInJlc2l6ZXN0YXJ0IixmdW5jdGlvbihhKXthLnByZXZlbnREZWZhdWx0KCl9KX0sX2luaXRVbmRvTWFuYWdlcjpmdW5jdGlvbigpe25ldyBiLlVuZG9NYW5hZ2VyKHRoaXMucGFyZW50KX19KX0pKHd5c2lodG1sNSk7CihmdW5jdGlvbihiKXt2YXIgYz1iLmRvbSxhPWRvY3VtZW50LGQ9d2luZG93LGU9YS5jcmVhdGVFbGVtZW50KCJkaXYiKSxmPSJiYWNrZ3JvdW5kLWNvbG9yIGNvbG9yIGN1cnNvciBmb250LWZhbWlseSBmb250LXNpemUgZm9udC1zdHlsZSBmb250LXZhcmlhbnQgZm9udC13ZWlnaHQgbGluZS1oZWlnaHQgbGV0dGVyLXNwYWNpbmcgdGV4dC1hbGlnbiB0ZXh0LWRlY29yYXRpb24gdGV4dC1pbmRlbnQgdGV4dC1yZW5kZXJpbmcgd29yZC1icmVhayB3b3JkLXdyYXAgd29yZC1zcGFjaW5nIi5zcGxpdCgiICIpLGc9ImJhY2tncm91bmQtY29sb3IgYm9yZGVyLWNvbGxhcHNlIGJvcmRlci1ib3R0b20tY29sb3IgYm9yZGVyLWJvdHRvbS1zdHlsZSBib3JkZXItYm90dG9tLXdpZHRoIGJvcmRlci1sZWZ0LWNvbG9yIGJvcmRlci1sZWZ0LXN0eWxlIGJvcmRlci1sZWZ0LXdpZHRoIGJvcmRlci1yaWdodC1jb2xvciBib3JkZXItcmlnaHQtc3R5bGUgYm9yZGVyLXJpZ2h0LXdpZHRoIGJvcmRlci10b3AtY29sb3IgYm9yZGVyLXRvcC1zdHlsZSBib3JkZXItdG9wLXdpZHRoIGNsZWFyIGRpc3BsYXkgZmxvYXQgbWFyZ2luLWJvdHRvbSBtYXJnaW4tbGVmdCBtYXJnaW4tcmlnaHQgbWFyZ2luLXRvcCBvdXRsaW5lLWNvbG9yIG91dGxpbmUtb2Zmc2V0IG91dGxpbmUtd2lkdGggb3V0bGluZS1zdHlsZSBwYWRkaW5nLWxlZnQgcGFkZGluZy1yaWdodCBwYWRkaW5nLXRvcCBwYWRkaW5nLWJvdHRvbSBwb3NpdGlvbiB0b3AgbGVmdCByaWdodCBib3R0b20gei1pbmRleCB2ZXJ0aWNhbC1hbGlnbiB0ZXh0LWFsaWduIC13ZWJraXQtYm94LXNpemluZyAtbW96LWJveC1zaXppbmcgLW1zLWJveC1zaXppbmcgYm94LXNpemluZyAtd2Via2l0LWJveC1zaGFkb3cgLW1vei1ib3gtc2hhZG93IC1tcy1ib3gtc2hhZG93IGJveC1zaGFkb3cgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyAtbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMgLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cyAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0IGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMgLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIC1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0IGJvcmRlci10b3AtbGVmdC1yYWRpdXMgd2lkdGggaGVpZ2h0Ii5zcGxpdCgiICIpLAppPSJ3aWR0aCBoZWlnaHQgdG9wIGxlZnQgcmlnaHQgYm90dG9tIi5zcGxpdCgiICIpLGg9WyJodG1sICAgICAgICAgICAgIHsgaGVpZ2h0OiAxMDAlOyB9IiwiYm9keSAgICAgICAgICAgICB7IG1pbi1oZWlnaHQ6IDEwMCU7IHBhZGRpbmc6IDA7IG1hcmdpbjogMDsgbWFyZ2luLXRvcDogLTFweDsgcGFkZGluZy10b3A6IDFweDsgfSIsIi5fd3lzaWh0bWw1LXRlbXAgeyBkaXNwbGF5OiBub25lOyB9IixiLmJyb3dzZXIuaXNHZWNrbz8iYm9keS5wbGFjZWhvbGRlciB7IGNvbG9yOiBncmF5dGV4dCAhaW1wb3J0YW50OyB9IjoiYm9keS5wbGFjZWhvbGRlciB7IGNvbG9yOiAjYTlhOWE5ICFpbXBvcnRhbnQ7IH0iLCJib2R5W2Rpc2FibGVkXSAgIHsgYmFja2dyb3VuZC1jb2xvcjogI2VlZSAhaW1wb3J0YW50OyBjb2xvcjogIzk5OSAhaW1wb3J0YW50OyBjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDsgfSIsImltZzotbW96LWJyb2tlbiAgeyAtbW96LWZvcmNlLWJyb2tlbi1pbWFnZS1pY29uOiAxOyBoZWlnaHQ6IDI0cHg7IHdpZHRoOiAyNHB4OyB9Il0sCms9ZnVuY3Rpb24oYil7aWYoYi5zZXRBY3RpdmUpdHJ5e2Iuc2V0QWN0aXZlKCl9Y2F0Y2goZSl7fWVsc2V7dmFyIGY9Yi5zdHlsZSxoPWEuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8YS5ib2R5LnNjcm9sbFRvcCxnPWEuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnR8fGEuYm9keS5zY3JvbGxMZWZ0LGY9e3Bvc2l0aW9uOmYucG9zaXRpb24sdG9wOmYudG9wLGxlZnQ6Zi5sZWZ0LFdlYmtpdFVzZXJTZWxlY3Q6Zi5XZWJraXRVc2VyU2VsZWN0fTtjLnNldFN0eWxlcyh7cG9zaXRpb246ImFic29sdXRlIix0b3A6Ii05OTk5OXB4IixsZWZ0OiItOTk5OTlweCIsV2Via2l0VXNlclNlbGVjdDoibm9uZSJ9KS5vbihiKTtiLmZvY3VzKCk7Yy5zZXRTdHlsZXMoZikub24oYik7ZC5zY3JvbGxUbyYmZC5zY3JvbGxUbyhnLGgpfX07Yi52aWV3cy5Db21wb3Nlci5wcm90b3R5cGUuc3R5bGU9ZnVuY3Rpb24oKXt2YXIgaj10aGlzLG49YS5xdWVyeVNlbGVjdG9yKCI6Zm9jdXMiKSxwPXRoaXMudGV4dGFyZWEuZWxlbWVudCwKcT1wLmhhc0F0dHJpYnV0ZSgicGxhY2Vob2xkZXIiKSxyPXEmJnAuZ2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIpO3RoaXMuZm9jdXNTdHlsZXNIb3N0PXRoaXMuZm9jdXNTdHlsZXNIb3N0fHxlLmNsb25lTm9kZSghMSk7dGhpcy5ibHVyU3R5bGVzSG9zdD10aGlzLmJsdXJTdHlsZXNIb3N0fHxlLmNsb25lTm9kZSghMSk7cSYmcC5yZW1vdmVBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIik7cD09PW4mJnAuYmx1cigpO2MuY29weVN0eWxlcyhnKS5mcm9tKHApLnRvKHRoaXMuaWZyYW1lKS5hbmRUbyh0aGlzLmJsdXJTdHlsZXNIb3N0KTtjLmNvcHlTdHlsZXMoZikuZnJvbShwKS50byh0aGlzLmVsZW1lbnQpLmFuZFRvKHRoaXMuYmx1clN0eWxlc0hvc3QpO2MuaW5zZXJ0Q1NTKGgpLmludG8odGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQpO2socCk7Yy5jb3B5U3R5bGVzKGcpLmZyb20ocCkudG8odGhpcy5mb2N1c1N0eWxlc0hvc3QpO2MuY29weVN0eWxlcyhmKS5mcm9tKHApLnRvKHRoaXMuZm9jdXNTdHlsZXNIb3N0KTsKdmFyIG09Yi5sYW5nLmFycmF5KGcpLndpdGhvdXQoWyJkaXNwbGF5Il0pO24/bi5mb2N1cygpOnAuYmx1cigpO3EmJnAuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIscik7aWYoIWIuYnJvd3Nlci5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0eSgpKXZhciBzPWMub2JzZXJ2ZShkLCJyZXNpemUiLGZ1bmN0aW9uKCl7aWYoYy5jb250YWlucyhkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsai5pZnJhbWUpKXt2YXIgYT1jLmdldFN0eWxlKCJkaXNwbGF5IikuZnJvbShwKSxiPWMuZ2V0U3R5bGUoImRpc3BsYXkiKS5mcm9tKGouaWZyYW1lKTtwLnN0eWxlLmRpc3BsYXk9IiI7ai5pZnJhbWUuc3R5bGUuZGlzcGxheT0ibm9uZSI7Yy5jb3B5U3R5bGVzKGkpLmZyb20ocCkudG8oai5pZnJhbWUpLmFuZFRvKGouZm9jdXNTdHlsZXNIb3N0KS5hbmRUbyhqLmJsdXJTdHlsZXNIb3N0KTtqLmlmcmFtZS5zdHlsZS5kaXNwbGF5PWI7cC5zdHlsZS5kaXNwbGF5PWF9ZWxzZSBzLnN0b3AoKX0pO3RoaXMucGFyZW50Lm9ic2VydmUoImZvY3VzOmNvbXBvc2VyIiwKZnVuY3Rpb24oKXtjLmNvcHlTdHlsZXMobSkuZnJvbShqLmZvY3VzU3R5bGVzSG9zdCkudG8oai5pZnJhbWUpO2MuY29weVN0eWxlcyhmKS5mcm9tKGouZm9jdXNTdHlsZXNIb3N0KS50byhqLmVsZW1lbnQpfSk7dGhpcy5wYXJlbnQub2JzZXJ2ZSgiYmx1cjpjb21wb3NlciIsZnVuY3Rpb24oKXtjLmNvcHlTdHlsZXMobSkuZnJvbShqLmJsdXJTdHlsZXNIb3N0KS50byhqLmlmcmFtZSk7Yy5jb3B5U3R5bGVzKGYpLmZyb20oai5ibHVyU3R5bGVzSG9zdCkudG8oai5lbGVtZW50KX0pO3JldHVybiB0aGlzfX0pKHd5c2lodG1sNSk7CihmdW5jdGlvbihiKXt2YXIgYz1iLmRvbSxhPWIuYnJvd3NlcixkPXs2NjoiYm9sZCIsNzM6Iml0YWxpYyIsODU6InVuZGVybGluZSJ9O2Iudmlld3MuQ29tcG9zZXIucHJvdG90eXBlLm9ic2VydmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLGY9dGhpcy5nZXRWYWx1ZSgpLGc9dGhpcy5zYW5kYm94LmdldElmcmFtZSgpLGk9dGhpcy5lbGVtZW50LGg9YS5zdXBwb3J0c0V2ZW50c0luSWZyYW1lQ29ycmVjdGx5KCk/aTp0aGlzLnNhbmRib3guZ2V0V2luZG93KCksaz1hLnN1cHBvcnRzRXZlbnQoImRyb3AiKT9bImRyb3AiLCJwYXN0ZSJdOlsiZHJhZ2Ryb3AiLCJwYXN0ZSJdO2Mub2JzZXJ2ZShnLCJET01Ob2RlUmVtb3ZlZCIsZnVuY3Rpb24oKXtjbGVhckludGVydmFsKGopO2UucGFyZW50LmZpcmUoImRlc3Ryb3k6Y29tcG9zZXIiKX0pO3ZhciBqPXNldEludGVydmFsKGZ1bmN0aW9uKCl7Yy5jb250YWlucyhkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZyl8fChjbGVhckludGVydmFsKGopLAplLnBhcmVudC5maXJlKCJkZXN0cm95OmNvbXBvc2VyIikpfSwyNTApO2Mub2JzZXJ2ZShoLCJmb2N1cyIsZnVuY3Rpb24oKXtlLnBhcmVudC5maXJlKCJmb2N1cyIpLmZpcmUoImZvY3VzOmNvbXBvc2VyIik7c2V0VGltZW91dChmdW5jdGlvbigpe2Y9ZS5nZXRWYWx1ZSgpfSwwKX0pO2Mub2JzZXJ2ZShoLCJibHVyIixmdW5jdGlvbigpe2YhPT1lLmdldFZhbHVlKCkmJmUucGFyZW50LmZpcmUoImNoYW5nZSIpLmZpcmUoImNoYW5nZTpjb21wb3NlciIpO2UucGFyZW50LmZpcmUoImJsdXIiKS5maXJlKCJibHVyOmNvbXBvc2VyIil9KTtiLmJyb3dzZXIuaXNJb3MoKSYmYy5vYnNlcnZlKGksImJsdXIiLGZ1bmN0aW9uKCl7dmFyIGE9aS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0IiksYj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCxjPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQ7CnRyeXtlLnNlbGVjdGlvbi5pbnNlcnROb2RlKGEpfWNhdGNoKGQpe2kuYXBwZW5kQ2hpbGQoYSl9YS5mb2N1cygpO2EucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhKTt3aW5kb3cuc2Nyb2xsVG8oYyxiKX0pO2Mub2JzZXJ2ZShpLCJkcmFnZW50ZXIiLGZ1bmN0aW9uKCl7ZS5wYXJlbnQuZmlyZSgidW5zZXRfcGxhY2Vob2xkZXIiKX0pO2EuZmlyZXNPbkRyb3BPbmx5V2hlbk9uRHJhZ092ZXJJc0NhbmNlbGxlZCgpJiZjLm9ic2VydmUoaSxbImRyYWdvdmVyIiwiZHJhZ2VudGVyIl0sZnVuY3Rpb24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpfSk7Yy5vYnNlcnZlKGksayxmdW5jdGlvbihiKXt2YXIgYz1iLmRhdGFUcmFuc2ZlcixkO2MmJmEuc3VwcG9ydHNEYXRhVHJhbnNmZXIoKSYmKGQ9Yy5nZXREYXRhKCJ0ZXh0L2h0bWwiKXx8Yy5nZXREYXRhKCJ0ZXh0L3BsYWluIikpO2Q/KGkuZm9jdXMoKSxlLmNvbW1hbmRzLmV4ZWMoImluc2VydEhUTUwiLGQpLGUucGFyZW50LmZpcmUoInBhc3RlIikuZmlyZSgicGFzdGU6Y29tcG9zZXIiKSwKYi5zdG9wUHJvcGFnYXRpb24oKSxiLnByZXZlbnREZWZhdWx0KCkpOnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLnBhcmVudC5maXJlKCJwYXN0ZSIpLmZpcmUoInBhc3RlOmNvbXBvc2VyIil9LDApfSk7Yy5vYnNlcnZlKGksImtleXVwIixmdW5jdGlvbihhKXthPWEua2V5Q29kZTsoYT09PWIuU1BBQ0VfS0VZfHxhPT09Yi5FTlRFUl9LRVkpJiZlLnBhcmVudC5maXJlKCJuZXd3b3JkOmNvbXBvc2VyIil9KTt0aGlzLnBhcmVudC5vYnNlcnZlKCJwYXN0ZTpjb21wb3NlciIsZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5wYXJlbnQuZmlyZSgibmV3d29yZDpjb21wb3NlciIpfSwwKX0pO2EuY2FuU2VsZWN0SW1hZ2VzSW5Db250ZW50RWRpdGFibGUoKXx8Yy5vYnNlcnZlKGksIm1vdXNlZG93biIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7IklNRyI9PT1iLm5vZGVOYW1lJiYoZS5zZWxlY3Rpb24uc2VsZWN0Tm9kZShiKSxhLnByZXZlbnREZWZhdWx0KCkpfSk7Yy5vYnNlcnZlKGksCiJrZXlkb3duIixmdW5jdGlvbihhKXt2YXIgYj1kW2Eua2V5Q29kZV07aWYoKGEuY3RybEtleXx8YS5tZXRhS2V5KSYmIWEuYWx0S2V5JiZiKWUuY29tbWFuZHMuZXhlYyhiKSxhLnByZXZlbnREZWZhdWx0KCl9KTtjLm9ic2VydmUoaSwia2V5ZG93biIsZnVuY3Rpb24oYSl7dmFyIGM9ZS5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWROb2RlKCEwKSxkPWEua2V5Q29kZTtpZihjJiYiSU1HIj09PWMubm9kZU5hbWUmJihkPT09Yi5CQUNLU1BBQ0VfS0VZfHxkPT09Yi5ERUxFVEVfS0VZKSlkPWMucGFyZW50Tm9kZSxkLnJlbW92ZUNoaWxkKGMpLCJBIj09PWQubm9kZU5hbWUmJiFkLmZpcnN0Q2hpbGQmJmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yi5xdWlya3MucmVkcmF3KGkpfSwwKSxhLnByZXZlbnREZWZhdWx0KCl9KTt2YXIgbj17SU1HOiJJbWFnZTogIixBOiJMaW5rOiAifTtjLm9ic2VydmUoaSwibW91c2VvdmVyIixmdW5jdGlvbihhKXt2YXIgYT0KYS50YXJnZXQsYj1hLm5vZGVOYW1lOyEoIkEiIT09YiYmIklNRyIhPT1iKSYmIWEuaGFzQXR0cmlidXRlKCJ0aXRsZSIpJiYoYj1uW2JdKyhhLmdldEF0dHJpYnV0ZSgiaHJlZiIpfHxhLmdldEF0dHJpYnV0ZSgic3JjIikpLGEuc2V0QXR0cmlidXRlKCJ0aXRsZSIsYikpfSl9fSkod3lzaWh0bWw1KTsKKGZ1bmN0aW9uKGIpe2Iudmlld3MuU3luY2hyb25pemVyPUJhc2UuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihiLGEsZCl7dGhpcy5lZGl0b3I9Yjt0aGlzLnRleHRhcmVhPWE7dGhpcy5jb21wb3Nlcj1kO3RoaXMuX29ic2VydmUoKX0sZnJvbUNvbXBvc2VyVG9UZXh0YXJlYTpmdW5jdGlvbihjKXt0aGlzLnRleHRhcmVhLnNldFZhbHVlKGIubGFuZy5zdHJpbmcodGhpcy5jb21wb3Nlci5nZXRWYWx1ZSgpKS50cmltKCksYyl9LGZyb21UZXh0YXJlYVRvQ29tcG9zZXI6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy50ZXh0YXJlYS5nZXRWYWx1ZSgpO2E/dGhpcy5jb21wb3Nlci5zZXRWYWx1ZShhLGIpOih0aGlzLmNvbXBvc2VyLmNsZWFyKCksdGhpcy5lZGl0b3IuZmlyZSgic2V0X3BsYWNlaG9sZGVyIikpfSxzeW5jOmZ1bmN0aW9uKGIpeyJ0ZXh0YXJlYSI9PT10aGlzLmVkaXRvci5jdXJyZW50Vmlldy5uYW1lP3RoaXMuZnJvbVRleHRhcmVhVG9Db21wb3NlcihiKTp0aGlzLmZyb21Db21wb3NlclRvVGV4dGFyZWEoYil9LApfb2JzZXJ2ZTpmdW5jdGlvbigpe3ZhciBjLGE9dGhpcyxkPXRoaXMudGV4dGFyZWEuZWxlbWVudC5mb3JtLGU9ZnVuY3Rpb24oKXtjPXNldEludGVydmFsKGZ1bmN0aW9uKCl7YS5mcm9tQ29tcG9zZXJUb1RleHRhcmVhKCl9LDQwMCl9LGY9ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKGMpO2M9bnVsbH07ZSgpO2QmJihiLmRvbS5vYnNlcnZlKGQsInN1Ym1pdCIsZnVuY3Rpb24oKXthLnN5bmMoITApfSksYi5kb20ub2JzZXJ2ZShkLCJyZXNldCIsZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5mcm9tVGV4dGFyZWFUb0NvbXBvc2VyKCl9LDApfSkpO3RoaXMuZWRpdG9yLm9ic2VydmUoImNoYW5nZV92aWV3IixmdW5jdGlvbihiKXtpZihiPT09ImNvbXBvc2VyIiYmIWMpe2EuZnJvbVRleHRhcmVhVG9Db21wb3Nlcih0cnVlKTtlKCl9ZWxzZSBpZihiPT09InRleHRhcmVhIil7YS5mcm9tQ29tcG9zZXJUb1RleHRhcmVhKHRydWUpO2YoKX19KTt0aGlzLmVkaXRvci5vYnNlcnZlKCJkZXN0cm95OmNvbXBvc2VyIiwKZil9fSl9KSh3eXNpaHRtbDUpOwp3eXNpaHRtbDUudmlld3MuVGV4dGFyZWE9d3lzaWh0bWw1LnZpZXdzLlZpZXcuZXh0ZW5kKHtuYW1lOiJ0ZXh0YXJlYSIsY29uc3RydWN0b3I6ZnVuY3Rpb24oYixjLGEpe3RoaXMuYmFzZShiLGMsYSk7dGhpcy5fb2JzZXJ2ZSgpfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC52YWx1ZT0iIn0sZ2V0VmFsdWU6ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5pc0VtcHR5KCk/IiI6dGhpcy5lbGVtZW50LnZhbHVlO2ImJihjPXRoaXMucGFyZW50LnBhcnNlKGMpKTtyZXR1cm4gY30sc2V0VmFsdWU6ZnVuY3Rpb24oYixjKXtjJiYoYj10aGlzLnBhcmVudC5wYXJzZShiKSk7dGhpcy5lbGVtZW50LnZhbHVlPWJ9LGhhc1BsYWNlaG9sZGVyU2V0OmZ1bmN0aW9uKCl7dmFyIGI9d3lzaWh0bWw1LmJyb3dzZXIuc3VwcG9ydHNQbGFjZWhvbGRlckF0dHJpYnV0ZU9uKHRoaXMuZWxlbWVudCksYz10aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIpfHxudWxsLGE9dGhpcy5lbGVtZW50LnZhbHVlOwpyZXR1cm4gYiYmIWF8fGE9PT1jfSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXd5c2lodG1sNS5sYW5nLnN0cmluZyh0aGlzLmVsZW1lbnQudmFsdWUpLnRyaW0oKXx8dGhpcy5oYXNQbGFjZWhvbGRlclNldCgpfSxfb2JzZXJ2ZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZWxlbWVudCxjPXRoaXMucGFyZW50LGE9e2ZvY3VzaW46ImZvY3VzIixmb2N1c291dDoiYmx1ciJ9LGQ9d3lzaWh0bWw1LmJyb3dzZXIuc3VwcG9ydHNFdmVudCgiZm9jdXNpbiIpP1siZm9jdXNpbiIsImZvY3Vzb3V0IiwiY2hhbmdlIl06WyJmb2N1cyIsImJsdXIiLCJjaGFuZ2UiXTtjLm9ic2VydmUoImJlZm9yZWxvYWQiLGZ1bmN0aW9uKCl7d3lzaWh0bWw1LmRvbS5vYnNlcnZlKGIsZCxmdW5jdGlvbihiKXtiPWFbYi50eXBlXXx8Yi50eXBlO2MuZmlyZShiKS5maXJlKGIrIjp0ZXh0YXJlYSIpfSk7d3lzaWh0bWw1LmRvbS5vYnNlcnZlKGIsWyJwYXN0ZSIsImRyb3AiXSxmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmZpcmUoInBhc3RlIikuZmlyZSgicGFzdGU6dGV4dGFyZWEiKX0sCjApfSl9KX19KTsKKGZ1bmN0aW9uKGIpe3ZhciBjPWIuZG9tO2IudG9vbGJhci5EaWFsb2c9Yi5sYW5nLkRpc3BhdGNoZXIuZXh0ZW5kKHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihhLGIpe3RoaXMubGluaz1hO3RoaXMuY29udGFpbmVyPWJ9LF9vYnNlcnZlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX29ic2VydmVkKXt2YXIgYT10aGlzLGQ9ZnVuY3Rpb24oYil7dmFyIGM9YS5fc2VyaWFsaXplKCk7Yz09YS5lbGVtZW50VG9DaGFuZ2U/YS5maXJlKCJlZGl0IixjKTphLmZpcmUoInNhdmUiLGMpO2EuaGlkZSgpO2IucHJldmVudERlZmF1bHQoKTtiLnN0b3BQcm9wYWdhdGlvbigpfTtjLm9ic2VydmUoYS5saW5rLCJjbGljayIsZnVuY3Rpb24oKXtjLmhhc0NsYXNzKGEubGluaywid3lzaWh0bWw1LWNvbW1hbmQtZGlhbG9nLW9wZW5lZCIpJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5oaWRlKCl9LDApfSk7Yy5vYnNlcnZlKHRoaXMuY29udGFpbmVyLCJrZXlkb3duIixmdW5jdGlvbihjKXt2YXIgZT1jLmtleUNvZGU7CmU9PT1iLkVOVEVSX0tFWSYmZChjKTtlPT09Yi5FU0NBUEVfS0VZJiZhLmhpZGUoKX0pO2MuZGVsZWdhdGUodGhpcy5jb250YWluZXIsIltkYXRhLXd5c2lodG1sNS1kaWFsb2ctYWN0aW9uPXNhdmVdIiwiY2xpY2siLGQpO2MuZGVsZWdhdGUodGhpcy5jb250YWluZXIsIltkYXRhLXd5c2lodG1sNS1kaWFsb2ctYWN0aW9uPWNhbmNlbF0iLCJjbGljayIsZnVuY3Rpb24oYil7YS5maXJlKCJjYW5jZWwiKTthLmhpZGUoKTtiLnByZXZlbnREZWZhdWx0KCk7Yi5zdG9wUHJvcGFnYXRpb24oKX0pO2Zvcih2YXIgZT10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSIpLGY9MCxnPWUubGVuZ3RoLGk9ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKGEuaW50ZXJ2YWwpfTtmPGc7ZisrKWMub2JzZXJ2ZShlW2ZdLCJjaGFuZ2UiLGkpO3RoaXMuX29ic2VydmVkPSEwfX0sX3NlcmlhbGl6ZTpmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLmVsZW1lbnRUb0NoYW5nZXx8Cnt9LGI9dGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtd3lzaWh0bWw1LWRpYWxvZy1maWVsZF0iKSxjPWIubGVuZ3RoLGY9MDtmPGM7ZisrKWFbYltmXS5nZXRBdHRyaWJ1dGUoImRhdGEtd3lzaWh0bWw1LWRpYWxvZy1maWVsZCIpXT1iW2ZdLnZhbHVlO3JldHVybiBhfSxfaW50ZXJwb2xhdGU6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCI6Zm9jdXMiKSxnPXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXd5c2lodG1sNS1kaWFsb2ctZmllbGRdIiksaT1nLmxlbmd0aCxoPTA7aDxpO2grKyliPWdbaF0sYiE9PWYmJiEoYSYmImhpZGRlbiI9PT1iLnR5cGUpJiYoYz1iLmdldEF0dHJpYnV0ZSgiZGF0YS13eXNpaHRtbDUtZGlhbG9nLWZpZWxkIiksYz10aGlzLmVsZW1lbnRUb0NoYW5nZT90aGlzLmVsZW1lbnRUb0NoYW5nZVtjXXx8IiI6Yi5kZWZhdWx0VmFsdWUsYi52YWx1ZT1jKX0sc2hvdzpmdW5jdGlvbihhKXt2YXIgYj0KdGhpcyxlPXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoImlucHV0LCBzZWxlY3QsIHRleHRhcmVhIik7dGhpcy5lbGVtZW50VG9DaGFuZ2U9YTt0aGlzLl9vYnNlcnZlKCk7dGhpcy5faW50ZXJwb2xhdGUoKTthJiYodGhpcy5pbnRlcnZhbD1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2IuX2ludGVycG9sYXRlKCEwKX0sNTAwKSk7Yy5hZGRDbGFzcyh0aGlzLmxpbmssInd5c2lodG1sNS1jb21tYW5kLWRpYWxvZy1vcGVuZWQiKTt0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSIiO3RoaXMuZmlyZSgic2hvdyIpO2lmKGUmJiFhKXRyeXtlLmZvY3VzKCl9Y2F0Y2goZil7fX0saGlkZTpmdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7dGhpcy5lbGVtZW50VG9DaGFuZ2U9bnVsbDtjLnJlbW92ZUNsYXNzKHRoaXMubGluaywid3lzaWh0bWw1LWNvbW1hbmQtZGlhbG9nLW9wZW5lZCIpO3RoaXMuY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3RoaXMuZmlyZSgiaGlkZSIpfX0pfSkod3lzaWh0bWw1KTsKKGZ1bmN0aW9uKGIpe3ZhciBjPWIuZG9tLGE9e3Bvc2l0aW9uOiJyZWxhdGl2ZSJ9LGQ9e2xlZnQ6MCxtYXJnaW46MCxvcGFjaXR5OjAsb3ZlcmZsb3c6ImhpZGRlbiIscGFkZGluZzowLHBvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsekluZGV4OjF9LGU9e2N1cnNvcjoiaW5oZXJpdCIsZm9udFNpemU6IjUwcHgiLGhlaWdodDoiNTBweCIsbWFyZ2luVG9wOiItMjVweCIsb3V0bGluZTowLHBhZGRpbmc6MCxwb3NpdGlvbjoiYWJzb2x1dGUiLHJpZ2h0OiItNHB4Iix0b3A6IjUwJSJ9LGY9eyJ4LXdlYmtpdC1zcGVlY2giOiIiLHNwZWVjaDoiIn07Yi50b29sYmFyLlNwZWVjaD1mdW5jdGlvbihnLGkpe3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7aWYoYi5icm93c2VyLnN1cHBvcnRzU3BlZWNoQXBpT24oaCkpe3ZhciBrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2IubGFuZy5vYmplY3QoZCkubWVyZ2Uoe3dpZHRoOmkub2Zmc2V0V2lkdGgrInB4IixoZWlnaHQ6aS5vZmZzZXRIZWlnaHQrCiJweCJ9KTtjLmluc2VydChoKS5pbnRvKGspO2MuaW5zZXJ0KGspLmludG8oaSk7Yy5zZXRTdHlsZXMoZSkub24oaCk7Yy5zZXRBdHRyaWJ1dGVzKGYpLm9uKGgpO2Muc2V0U3R5bGVzKGQpLm9uKGspO2Muc2V0U3R5bGVzKGEpLm9uKGkpO2Mub2JzZXJ2ZShoLCJvbndlYmtpdHNwZWVjaGNoYW5nZSJpbiBoPyJ3ZWJraXRzcGVlY2hjaGFuZ2UiOiJzcGVlY2hjaGFuZ2UiLGZ1bmN0aW9uKCl7Zy5leGVjQ29tbWFuZCgiaW5zZXJ0VGV4dCIsaC52YWx1ZSk7aC52YWx1ZT0iIn0pO2Mub2JzZXJ2ZShoLCJjbGljayIsZnVuY3Rpb24oYSl7Yy5oYXNDbGFzcyhpLCJ3eXNpaHRtbDUtY29tbWFuZC1kaXNhYmxlZCIpJiZhLnByZXZlbnREZWZhdWx0KCk7YS5zdG9wUHJvcGFnYXRpb24oKX0pfWVsc2UgaS5zdHlsZS5kaXNwbGF5PSJub25lIn19KSh3eXNpaHRtbDUpOwooZnVuY3Rpb24oYil7dmFyIGM9Yi5kb207Yi50b29sYmFyLlRvb2xiYXI9QmFzZS5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGEsYyl7dGhpcy5lZGl0b3I9YTt0aGlzLmNvbnRhaW5lcj0ic3RyaW5nIj09PXR5cGVvZiBjP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGMpOmM7dGhpcy5jb21wb3Nlcj1hLmNvbXBvc2VyO3RoaXMuX2dldExpbmtzKCJjb21tYW5kIik7dGhpcy5fZ2V0TGlua3MoImFjdGlvbiIpO3RoaXMuX29ic2VydmUoKTt0aGlzLnNob3coKTtmb3IodmFyIGU9dGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtd3lzaWh0bWw1LWNvbW1hbmQ9aW5zZXJ0U3BlZWNoXSIpLGY9ZS5sZW5ndGgsZz0wO2c8ZjtnKyspbmV3IGIudG9vbGJhci5TcGVlY2godGhpcyxlW2ddKX0sX2dldExpbmtzOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYz10aGlzW2ErIkxpbmtzIl09Yi5sYW5nLmFycmF5KHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXd5c2lodG1sNS0iKwphKyJdIikpLmdldCgpLGU9Yy5sZW5ndGgsZj0wLGc9dGhpc1thKyJNYXBwaW5nIl09e30saSxoLGssaixuO2Y8ZTtmKyspaT1jW2ZdLGs9aS5nZXRBdHRyaWJ1dGUoImRhdGEtd3lzaWh0bWw1LSIrYSksaj1pLmdldEF0dHJpYnV0ZSgiZGF0YS13eXNpaHRtbDUtIithKyItdmFsdWUiKSxoPXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIltkYXRhLXd5c2lodG1sNS0iK2ErIi1ncm91cD0nIitrKyInXSIpLG49dGhpcy5fZ2V0RGlhbG9nKGksayksZ1trKyI6IitqXT17bGluazppLGdyb3VwOmgsbmFtZTprLHZhbHVlOmosZGlhbG9nOm4sc3RhdGU6ITF9fSxfZ2V0RGlhbG9nOmZ1bmN0aW9uKGEsYyl7dmFyIGU9dGhpcyxmPXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIltkYXRhLXd5c2lodG1sNS1kaWFsb2c9JyIrYysiJ10iKSxnLGk7ZiYmKGc9bmV3IGIudG9vbGJhci5EaWFsb2coYSxmKSxnLm9ic2VydmUoInNob3ciLGZ1bmN0aW9uKCl7aT1lLmNvbXBvc2VyLnNlbGVjdGlvbi5nZXRCb29rbWFyaygpOwplLmVkaXRvci5maXJlKCJzaG93OmRpYWxvZyIse2NvbW1hbmQ6YyxkaWFsb2dDb250YWluZXI6Zixjb21tYW5kTGluazphfSl9KSxnLm9ic2VydmUoInNhdmUiLGZ1bmN0aW9uKGIpe2kmJmUuY29tcG9zZXIuc2VsZWN0aW9uLnNldEJvb2ttYXJrKGkpO2UuX2V4ZWNDb21tYW5kKGMsYik7ZS5lZGl0b3IuZmlyZSgic2F2ZTpkaWFsb2ciLHtjb21tYW5kOmMsZGlhbG9nQ29udGFpbmVyOmYsY29tbWFuZExpbms6YX0pfSksZy5vYnNlcnZlKCJjYW5jZWwiLGZ1bmN0aW9uKCl7ZS5lZGl0b3IuZm9jdXMoITEpO2UuZWRpdG9yLmZpcmUoImNhbmNlbDpkaWFsb2ciLHtjb21tYW5kOmMsZGlhbG9nQ29udGFpbmVyOmYsY29tbWFuZExpbms6YX0pfSkpO3JldHVybiBnfSxleGVjQ29tbWFuZDpmdW5jdGlvbihhLGIpe2lmKCF0aGlzLmNvbW1hbmRzRGlzYWJsZWQpe3ZhciBjPXRoaXMuY29tbWFuZE1hcHBpbmdbYSsiOiIrYl07YyYmYy5kaWFsb2cmJiFjLnN0YXRlP2MuZGlhbG9nLnNob3coKToKdGhpcy5fZXhlY0NvbW1hbmQoYSxiKX19LF9leGVjQ29tbWFuZDpmdW5jdGlvbihhLGIpe3RoaXMuZWRpdG9yLmZvY3VzKCExKTt0aGlzLmNvbXBvc2VyLmNvbW1hbmRzLmV4ZWMoYSxiKTt0aGlzLl91cGRhdGVMaW5rU3RhdGVzKCl9LGV4ZWNBY3Rpb246ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lZGl0b3I7c3dpdGNoKGEpe2Nhc2UgImNoYW5nZV92aWV3IjpiLmN1cnJlbnRWaWV3PT09Yi50ZXh0YXJlYT9iLmZpcmUoImNoYW5nZV92aWV3IiwiY29tcG9zZXIiKTpiLmZpcmUoImNoYW5nZV92aWV3IiwidGV4dGFyZWEiKX19LF9vYnNlcnZlOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMsYj10aGlzLmVkaXRvcixlPXRoaXMuY29udGFpbmVyLGY9dGhpcy5jb21tYW5kTGlua3MuY29uY2F0KHRoaXMuYWN0aW9uTGlua3MpLGc9Zi5sZW5ndGgsaT0wO2k8ZztpKyspYy5zZXRBdHRyaWJ1dGVzKHtocmVmOiJqYXZhc2NyaXB0OjsiLHVuc2VsZWN0YWJsZToib24ifSkub24oZltpXSk7Yy5kZWxlZ2F0ZShlLAoiW2RhdGEtd3lzaWh0bWw1LWNvbW1hbmRdIiwibW91c2Vkb3duIixmdW5jdGlvbihhKXthLnByZXZlbnREZWZhdWx0KCl9KTtjLmRlbGVnYXRlKGUsIltkYXRhLXd5c2lodG1sNS1jb21tYW5kXSIsImNsaWNrIixmdW5jdGlvbihiKXt2YXIgYz10aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS13eXNpaHRtbDUtY29tbWFuZCIpLGQ9dGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtd3lzaWh0bWw1LWNvbW1hbmQtdmFsdWUiKTthLmV4ZWNDb21tYW5kKGMsZCk7Yi5wcmV2ZW50RGVmYXVsdCgpfSk7Yy5kZWxlZ2F0ZShlLCJbZGF0YS13eXNpaHRtbDUtYWN0aW9uXSIsImNsaWNrIixmdW5jdGlvbihiKXt2YXIgYz10aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS13eXNpaHRtbDUtYWN0aW9uIik7YS5leGVjQWN0aW9uKGMpO2IucHJldmVudERlZmF1bHQoKX0pO2Iub2JzZXJ2ZSgiZm9jdXM6Y29tcG9zZXIiLGZ1bmN0aW9uKCl7YS5ib29rbWFyaz1udWxsO2NsZWFySW50ZXJ2YWwoYS5pbnRlcnZhbCk7YS5pbnRlcnZhbD0Kc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXthLl91cGRhdGVMaW5rU3RhdGVzKCl9LDUwMCl9KTtiLm9ic2VydmUoImJsdXI6Y29tcG9zZXIiLGZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChhLmludGVydmFsKX0pO2Iub2JzZXJ2ZSgiZGVzdHJveTpjb21wb3NlciIsZnVuY3Rpb24oKXtjbGVhckludGVydmFsKGEuaW50ZXJ2YWwpfSk7Yi5vYnNlcnZlKCJjaGFuZ2VfdmlldyIsZnVuY3Rpb24oYil7c2V0VGltZW91dChmdW5jdGlvbigpe2EuY29tbWFuZHNEaXNhYmxlZD0iY29tcG9zZXIiIT09YjthLl91cGRhdGVMaW5rU3RhdGVzKCk7YS5jb21tYW5kc0Rpc2FibGVkP2MuYWRkQ2xhc3MoZSwid3lzaWh0bWw1LWNvbW1hbmRzLWRpc2FibGVkIik6Yy5yZW1vdmVDbGFzcyhlLCJ3eXNpaHRtbDUtY29tbWFuZHMtZGlzYWJsZWQiKX0sMCl9KX0sX3VwZGF0ZUxpbmtTdGF0ZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNvbW1hbmRNYXBwaW5nLGQ9dGhpcy5hY3Rpb25NYXBwaW5nLGUsZixnO2ZvcihlIGluIGEpaWYoZz0KYVtlXSx0aGlzLmNvbW1hbmRzRGlzYWJsZWQ/KGY9ITEsYy5yZW1vdmVDbGFzcyhnLmxpbmssInd5c2lodG1sNS1jb21tYW5kLWFjdGl2ZSIpLGcuZ3JvdXAmJmMucmVtb3ZlQ2xhc3MoZy5ncm91cCwid3lzaWh0bWw1LWNvbW1hbmQtYWN0aXZlIiksZy5kaWFsb2cmJmcuZGlhbG9nLmhpZGUoKSk6KGY9dGhpcy5jb21wb3Nlci5jb21tYW5kcy5zdGF0ZShnLm5hbWUsZy52YWx1ZSksYi5sYW5nLm9iamVjdChmKS5pc0FycmF5KCkmJihmPTE9PT1mLmxlbmd0aD9mWzBdOiEwKSxjLnJlbW92ZUNsYXNzKGcubGluaywid3lzaWh0bWw1LWNvbW1hbmQtZGlzYWJsZWQiKSxnLmdyb3VwJiZjLnJlbW92ZUNsYXNzKGcuZ3JvdXAsInd5c2lodG1sNS1jb21tYW5kLWRpc2FibGVkIikpLGcuc3RhdGUhPT1mKShnLnN0YXRlPWYpPyhjLmFkZENsYXNzKGcubGluaywid3lzaWh0bWw1LWNvbW1hbmQtYWN0aXZlIiksZy5ncm91cCYmYy5hZGRDbGFzcyhnLmdyb3VwLCJ3eXNpaHRtbDUtY29tbWFuZC1hY3RpdmUiKSwKZy5kaWFsb2cmJigib2JqZWN0Ij09PXR5cGVvZiBmP2cuZGlhbG9nLnNob3coZik6Zy5kaWFsb2cuaGlkZSgpKSk6KGMucmVtb3ZlQ2xhc3MoZy5saW5rLCJ3eXNpaHRtbDUtY29tbWFuZC1hY3RpdmUiKSxnLmdyb3VwJiZjLnJlbW92ZUNsYXNzKGcuZ3JvdXAsInd5c2lodG1sNS1jb21tYW5kLWFjdGl2ZSIpLGcuZGlhbG9nJiZnLmRpYWxvZy5oaWRlKCkpO2ZvcihlIGluIGQpYT1kW2VdLCJjaGFuZ2VfdmlldyI9PT1hLm5hbWUmJihhLnN0YXRlPXRoaXMuZWRpdG9yLmN1cnJlbnRWaWV3PT09dGhpcy5lZGl0b3IudGV4dGFyZWEsYS5zdGF0ZT9jLmFkZENsYXNzKGEubGluaywid3lzaWh0bWw1LWFjdGlvbi1hY3RpdmUiKTpjLnJlbW92ZUNsYXNzKGEubGluaywid3lzaWh0bWw1LWFjdGlvbi1hY3RpdmUiKSl9LHNob3c6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSIifSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheT0ibm9uZSJ9fSl9KSh3eXNpaHRtbDUpOwooZnVuY3Rpb24oYil7dmFyIGM9e25hbWU6dm9pZCAwLHN0eWxlOiEwLHRvb2xiYXI6dm9pZCAwLGF1dG9MaW5rOiEwLHBhcnNlclJ1bGVzOnt0YWdzOnticjp7fSxzcGFuOnt9LGRpdjp7fSxwOnt9fSxjbGFzc2VzOnt9fSxwYXJzZXI6Yi5kb20ucGFyc2UsY29tcG9zZXJDbGFzc05hbWU6Ind5c2lodG1sNS1lZGl0b3IiLGJvZHlDbGFzc05hbWU6Ind5c2lodG1sNS1zdXBwb3J0ZWQiLHN0eWxlc2hlZXRzOltdLHBsYWNlaG9sZGVyVGV4dDp2b2lkIDAsYWxsb3dPYmplY3RSZXNpemluZzohMCxzdXBwb3J0VG91Y2hEZXZpY2VzOiEwfTtiLkVkaXRvcj1iLmxhbmcuRGlzcGF0Y2hlci5leHRlbmQoe2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGEsZCl7dGhpcy50ZXh0YXJlYUVsZW1lbnQ9InN0cmluZyI9PT10eXBlb2YgYT9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKTphO3RoaXMuY29uZmlnPWIubGFuZy5vYmplY3Qoe30pLm1lcmdlKGMpLm1lcmdlKGQpLmdldCgpO3RoaXMuY3VycmVudFZpZXc9CnRoaXMudGV4dGFyZWE9bmV3IGIudmlld3MuVGV4dGFyZWEodGhpcyx0aGlzLnRleHRhcmVhRWxlbWVudCx0aGlzLmNvbmZpZyk7dGhpcy5faXNDb21wYXRpYmxlPWIuYnJvd3Nlci5zdXBwb3J0ZWQoKTtpZighdGhpcy5faXNDb21wYXRpYmxlfHwhdGhpcy5jb25maWcuc3VwcG9ydFRvdWNoRGV2aWNlcyYmYi5icm93c2VyLmlzVG91Y2hEZXZpY2UoKSl7dmFyIGU9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5maXJlKCJiZWZvcmVsb2FkIikuZmlyZSgibG9hZCIpfSwwKX1lbHNle2IuZG9tLmFkZENsYXNzKGRvY3VtZW50LmJvZHksdGhpcy5jb25maWcuYm9keUNsYXNzTmFtZSk7dGhpcy5jdXJyZW50Vmlldz10aGlzLmNvbXBvc2VyPW5ldyBiLnZpZXdzLkNvbXBvc2VyKHRoaXMsdGhpcy50ZXh0YXJlYUVsZW1lbnQsdGhpcy5jb25maWcpOyJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5jb25maWcucGFyc2VyJiZ0aGlzLl9pbml0UGFyc2VyKCk7dGhpcy5vYnNlcnZlKCJiZWZvcmVsb2FkIiwKZnVuY3Rpb24oKXt0aGlzLnN5bmNocm9uaXplcj1uZXcgYi52aWV3cy5TeW5jaHJvbml6ZXIodGhpcyx0aGlzLnRleHRhcmVhLHRoaXMuY29tcG9zZXIpO3RoaXMuY29uZmlnLnRvb2xiYXImJih0aGlzLnRvb2xiYXI9bmV3IGIudG9vbGJhci5Ub29sYmFyKHRoaXMsdGhpcy5jb25maWcudG9vbGJhcikpfSk7dHJ5e2NvbnNvbGUubG9nKCJIZXlhISBUaGlzIHBhZ2UgaXMgdXNpbmcgd3lzaWh0bWw1IGZvciByaWNoIHRleHQgZWRpdGluZy4gQ2hlY2sgb3V0IGh0dHBzOi8vZ2l0aHViLmNvbS94aW5nL3d5c2lodG1sNSIpfWNhdGNoKGYpe319fSxpc0NvbXBhdGlibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNDb21wYXRpYmxlfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuY3VycmVudFZpZXcuY2xlYXIoKTtyZXR1cm4gdGhpc30sZ2V0VmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY3VycmVudFZpZXcuZ2V0VmFsdWUoYSl9LHNldFZhbHVlOmZ1bmN0aW9uKGEsYil7aWYoIWEpcmV0dXJuIHRoaXMuY2xlYXIoKTsKdGhpcy5jdXJyZW50Vmlldy5zZXRWYWx1ZShhLGIpO3JldHVybiB0aGlzfSxmb2N1czpmdW5jdGlvbihhKXt0aGlzLmN1cnJlbnRWaWV3LmZvY3VzKGEpO3JldHVybiB0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50Vmlldy5kaXNhYmxlKCk7cmV0dXJuIHRoaXN9LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMuY3VycmVudFZpZXcuZW5hYmxlKCk7cmV0dXJuIHRoaXN9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50Vmlldy5pc0VtcHR5KCl9LGhhc1BsYWNlaG9sZGVyU2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudFZpZXcuaGFzUGxhY2Vob2xkZXJTZXQoKX0scGFyc2U6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5jb25maWcucGFyc2VyKGEsdGhpcy5jb25maWcucGFyc2VyUnVsZXMsdGhpcy5jb21wb3Nlci5zYW5kYm94LmdldERvY3VtZW50KCksITApOyJvYmplY3QiPT09dHlwZW9mIGEmJmIucXVpcmtzLnJlZHJhdyhhKTtyZXR1cm4gY30sCl9pbml0UGFyc2VyOmZ1bmN0aW9uKCl7dGhpcy5vYnNlcnZlKCJwYXN0ZTpjb21wb3NlciIsZnVuY3Rpb24oKXt2YXIgYT10aGlzO2EuY29tcG9zZXIuc2VsZWN0aW9uLmV4ZWN1dGVBbmRSZXN0b3JlKGZ1bmN0aW9uKCl7Yi5xdWlya3MuY2xlYW5QYXN0ZWRIVE1MKGEuY29tcG9zZXIuZWxlbWVudCk7YS5wYXJzZShhLmNvbXBvc2VyLmVsZW1lbnQpfSwhMCl9KTt0aGlzLm9ic2VydmUoInBhc3RlOnRleHRhcmVhIixmdW5jdGlvbigpe3RoaXMudGV4dGFyZWEuc2V0VmFsdWUodGhpcy5wYXJzZSh0aGlzLnRleHRhcmVhLmdldFZhbHVlKCkpKX0pfX0pfSkod3lzaWh0bWw1KTsK]]></data>
	</file>
	<file>
	  <filename>/js/external/inputs-ext/wysihtml5/bootstrap-wysihtml5-0.0.2/wysiwyg-color.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Lnd5c2l3eWctY29sb3ItYmxhY2sgewogIGNvbG9yOiBibGFjazsKfQoKLnd5c2l3eWctY29sb3Itc2lsdmVyIHsKICBjb2xvcjogc2lsdmVyOwp9Cgoud3lzaXd5Zy1jb2xvci1ncmF5IHsKICBjb2xvcjogZ3JheTsKfQoKLnd5c2l3eWctY29sb3Itd2hpdGUgewogIGNvbG9yOiB3aGl0ZTsKfQoKLnd5c2l3eWctY29sb3ItbWFyb29uIHsKICBjb2xvcjogbWFyb29uOwp9Cgoud3lzaXd5Zy1jb2xvci1yZWQgewogIGNvbG9yOiByZWQ7Cn0KCi53eXNpd3lnLWNvbG9yLXB1cnBsZSB7CiAgY29sb3I6IHB1cnBsZTsKfQoKLnd5c2l3eWctY29sb3ItZnVjaHNpYSB7CiAgY29sb3I6IGZ1Y2hzaWE7Cn0KCi53eXNpd3lnLWNvbG9yLWdyZWVuIHsKICBjb2xvcjogZ3JlZW47Cn0KCi53eXNpd3lnLWNvbG9yLWxpbWUgewogIGNvbG9yOiBsaW1lOwp9Cgoud3lzaXd5Zy1jb2xvci1vbGl2ZSB7CiAgY29sb3I6IG9saXZlOwp9Cgoud3lzaXd5Zy1jb2xvci15ZWxsb3cgewogIGNvbG9yOiB5ZWxsb3c7Cn0KCi53eXNpd3lnLWNvbG9yLW5hdnkgewogIGNvbG9yOiBuYXZ5Owp9Cgoud3lzaXd5Zy1jb2xvci1ibHVlIHsKICBjb2xvcjogYmx1ZTsKfQoKLnd5c2l3eWctY29sb3ItdGVhbCB7CiAgY29sb3I6IHRlYWw7Cn0KCi53eXNpd3lnLWNvbG9yLWFxdWEgewogIGNvbG9yOiBhcXVhOwp9Cgoud3lzaXd5Zy1jb2xvci1vcmFuZ2UgewogIGNvbG9yOiBvcmFuZ2U7Cn0=]]></data>
	</file>
	<file>
	  <filename>/js/external/inputs-ext/wysihtml5/wysihtml5.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCkJvb3RzdHJhcCB3eXNpaHRtbDUgZWRpdG9yLiBCYXNlZCBvbiBbYm9vdHN0cmFwLXd5c2lodG1sNV0oaHR0cHM6Ly9naXRodWIuY29tL2pob2xsaW5nd29ydGgvYm9vdHN0cmFwLXd5c2lodG1sNSkuICAKWW91IHNob3VsZCBpbmNsdWRlICoqbWFudWFsbHkqKiBkaXN0cmlidXRpdmVzIG9mIGB3eXNpaHRtbDVgIGFuZCBgYm9vdHN0cmFwLXd5c2lodG1sNWA6CgogICAgPGxpbmsgaHJlZj0ianMvaW5wdXRzLWV4dC93eXNpaHRtbDUvYm9vdHN0cmFwLXd5c2lodG1sNS0wLjAuMi9ib290c3RyYXAtd3lzaWh0bWw1LTAuMC4yLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PC9saW5rPiAgCiAgICA8c2NyaXB0IHNyYz0ianMvaW5wdXRzLWV4dC93eXNpaHRtbDUvYm9vdHN0cmFwLXd5c2lodG1sNS0wLjAuMi93eXNpaHRtbDUtMC4zLjAubWluLmpzIj48L3NjcmlwdD4gIAogICAgPHNjcmlwdCBzcmM9ImpzL2lucHV0cy1leHQvd3lzaWh0bWw1L2Jvb3RzdHJhcC13eXNpaHRtbDUtMC4wLjIvYm9vdHN0cmFwLXd5c2lodG1sNS0wLjAuMi5taW4uanMiPjwvc2NyaXB0PgogICAgCkFuZCBhbHNvIGluY2x1ZGUgYHd5c2lodG1sNS5qc2AgZnJvbSBgaW5wdXRzLWV4dGAgZGlyZWN0b3J5IG9mIHgtZWRpdGFibGU6CiAgICAgIAogICAgPHNjcmlwdCBzcmM9ImpzL2lucHV0cy1leHQvd3lzaWh0bWw1L3d5c2lodG1sNS5qcyI+PC9zY3JpcHQ+ICAKCioqTm90ZToqKiBJdCdzIGJldHRlciB0byB1c2UgZnJlc2ggYm9vdHN0cmFwLXd5c2lodG1sNSBmcm9tIGl0J3MgW21hc3RlciBicmFuY2hdKGh0dHBzOi8vZ2l0aHViLmNvbS9qaG9sbGluZ3dvcnRoL2Jvb3RzdHJhcC13eXNpaHRtbDUvdHJlZS9tYXN0ZXIvc3JjKSBhcyB0aGVyZSBpcyB1cGRhdGUgZm9yIGNvcnJlY3QgaW1hZ2UgaW5zZXJ0aW9uLiAgICAKICAgIApAY2xhc3Mgd3lzaWh0bWw1CkBleHRlbmRzIGFic3RyYWN0aW5wdXQKQGZpbmFsCkBzaW5jZSAxLjQuMApAZXhhbXBsZQo8ZGl2IGlkPSJjb21tZW50cyIgZGF0YS10eXBlPSJ3eXNpaHRtbDUiIGRhdGEtcGs9IjEiPjxoMj5hd2Vzb21lPC9oMj4gY29tbWVudCE8L2Rpdj4KPHNjcmlwdD4KJChmdW5jdGlvbigpewogICAgJCgnI2NvbW1lbnRzJykuZWRpdGFibGUoewogICAgICAgIHVybDogJy9wb3N0JywKICAgICAgICB0aXRsZTogJ0VudGVyIGNvbW1lbnRzJwogICAgfSk7Cn0pOwo8L3NjcmlwdD4KKiovCihmdW5jdGlvbiAoJCkgewogICAgInVzZSBzdHJpY3QiOwogICAgCiAgICB2YXIgV3lzaWh0bWw1ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgICAgICB0aGlzLmluaXQoJ3d5c2lodG1sNScsIG9wdGlvbnMsIFd5c2lodG1sNS5kZWZhdWx0cyk7CiAgICAgICAgCiAgICAgICAgLy9leHRlbmQgd3lzaWh0bWw1IG1hbnVhbGx5IGFzICQuZXh0ZW5kIG5vdCByZWN1cnNpdmUgCiAgICAgICAgdGhpcy5vcHRpb25zLnd5c2lodG1sNSA9ICQuZXh0ZW5kKHt9LCBXeXNpaHRtbDUuZGVmYXVsdHMud3lzaWh0bWw1LCBvcHRpb25zLnd5c2lodG1sNSk7CiAgICB9OwoKICAgICQuZm4uZWRpdGFibGV1dGlscy5pbmhlcml0KFd5c2lodG1sNSwgJC5mbi5lZGl0YWJsZXR5cGVzLmFic3RyYWN0aW5wdXQpOwoKICAgICQuZXh0ZW5kKFd5c2lodG1sNS5wcm90b3R5cGUsIHsKICAgICAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGRlZmVycmVkID0gJC5EZWZlcnJlZCgpLAogICAgICAgICAgICBtc2llT2xkOwogICAgICAgICAgICAKICAgICAgICAgICAgLy9nZW5lcmF0ZSB1bmlxdWUgaWQgYXMgaXQgcmVxdWlyZWQgZm9yIHd5c2lodG1sNQogICAgICAgICAgICB0aGlzLiRpbnB1dC5hdHRyKCdpZCcsICd0ZXh0YXJlYV8nKyhuZXcgRGF0ZSgpKS5nZXRUaW1lKCkpOwoKICAgICAgICAgICAgdGhpcy5zZXRDbGFzcygpOwogICAgICAgICAgICB0aGlzLnNldEF0dHIoJ3BsYWNlaG9sZGVyJyk7ICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAvL3Jlc29sdmUgZGVmZmVyZWQgd2hlbiB3aWRnZXQgbG9hZGVkCiAgICAgICAgICAgICQuZXh0ZW5kKHRoaXMub3B0aW9ucy53eXNpaHRtbDUsIHsKICAgICAgICAgICAgICAgIGV2ZW50czogewogICAgICAgICAgICAgICAgICBsb2FkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoKTsKICAgICAgICAgICAgICAgICAgfSAgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy4kaW5wdXQud3lzaWh0bWw1KHRoaXMub3B0aW9ucy53eXNpaHRtbDUpOwogICAgICAgICAgICAKICAgICAgICAgICAgLyoKICAgICAgICAgICAgIEluIElFOCB3eXNpaHRtbDUgaWZyYW1lIHN0YXlzIG9uIHRoZSBzYW1lIGxpbmUgd2l0aCBidXR0b25zIHRvb2xiYXIgKGluc2lkZSBwb3BvdmVyKS4KICAgICAgICAgICAgIFRoZSBvbmx5IHNvbHV0aW9uIEkgZm91bmQgaXMgdG8gYWRkIDxicj4uIElmIHlvdSBmaW5lIGJldHRlciB3YXksIHBsZWFzZSBzZW5kIFBSLiAgIAogICAgICAgICAgICAqLwogICAgICAgICAgICBtc2llT2xkID0gL21zaWVccyooOHw3fDYpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSk7CiAgICAgICAgICAgIGlmKG1zaWVPbGQpIHsKICAgICAgICAgICAgICAgIHRoaXMuJGlucHV0LmJlZm9yZSgnPGJyPjxicj4nKTsgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlKCk7CiAgICAgICAgfSwKICAgICAgIAogICAgICAgIHZhbHVlMmh0bWw6IGZ1bmN0aW9uKHZhbHVlLCBlbGVtZW50KSB7CiAgICAgICAgICAgICQoZWxlbWVudCkuaHRtbCh2YWx1ZSk7CiAgICAgICAgfSwKCiAgICAgICAgaHRtbDJ2YWx1ZTogZnVuY3Rpb24oaHRtbCkgewogICAgICAgICAgICByZXR1cm4gaHRtbDsKICAgICAgICB9LAogICAgICAgIAogICAgICAgIHZhbHVlMmlucHV0OiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICB0aGlzLiRpbnB1dC5kYXRhKCJ3eXNpaHRtbDUiKS5lZGl0b3Iuc2V0VmFsdWUodmFsdWUsIHRydWUpOwogICAgICAgIH0sIAoKICAgICAgICBhY3RpdmF0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoaXMuJGlucHV0LmRhdGEoInd5c2lodG1sNSIpLmVkaXRvci5mb2N1cygpOwogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgaXNFbXB0eTogZnVuY3Rpb24oJGVsZW1lbnQpIHsKICAgICAgICAgICAgaWYoJC50cmltKCRlbGVtZW50Lmh0bWwoKSkgPT09ICcnKSB7IAogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0gZWxzZSBpZigkLnRyaW0oJGVsZW1lbnQudGV4dCgpKSAhPT0gJycpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vZS5nLiAnPGltZz4nLCAnPGJyPicsICc8cD48L3A+JwogICAgICAgICAgICAgICAgcmV0dXJuICEkZWxlbWVudC5oZWlnaHQoKSB8fCAhJGVsZW1lbnQud2lkdGgoKTsKICAgICAgICAgICAgfSAKICAgICAgICB9CiAgICB9KTsKCiAgICBXeXNpaHRtbDUuZGVmYXVsdHMgPSAkLmV4dGVuZCh7fSwgJC5mbi5lZGl0YWJsZXR5cGVzLmFic3RyYWN0aW5wdXQuZGVmYXVsdHMsIHsKICAgICAgICAvKioKICAgICAgICBAcHJvcGVydHkgdHBsCiAgICAgICAgQGRlZmF1bHQgPHRleHRhcmVhPjwvdGV4dGFyZWE+CiAgICAgICAgKiovCiAgICAgICAgdHBsOic8dGV4dGFyZWE+PC90ZXh0YXJlYT4nLAogICAgICAgIC8qKgogICAgICAgIEBwcm9wZXJ0eSBpbnB1dGNsYXNzCiAgICAgICAgQGRlZmF1bHQgZWRpdGFibGUtd3lzaWh0bWw1CiAgICAgICAgKiovCiAgICAgICAgaW5wdXRjbGFzczogJ2VkaXRhYmxlLXd5c2lodG1sNScsCiAgICAgICAgLyoqCiAgICAgICAgUGxhY2Vob2xkZXIgYXR0cmlidXRlIG9mIGlucHV0LiBTaG93biB3aGVuIGlucHV0IGlzIGVtcHR5LgoKICAgICAgICBAcHJvcGVydHkgcGxhY2Vob2xkZXIKICAgICAgICBAdHlwZSBzdHJpbmcKICAgICAgICBAZGVmYXVsdCBudWxsCiAgICAgICAgKiovCiAgICAgICAgcGxhY2Vob2xkZXI6IG51bGwsCiAgICAgICAgLyoqCiAgICAgICAgV3lzaWh0bWw1IGRlZmF1bHQgb3B0aW9ucy4gIAogICAgICAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vamhvbGxpbmd3b3J0aC9ib290c3RyYXAtd3lzaWh0bWw1I29wdGlvbnMKCiAgICAgICAgQHByb3BlcnR5IHd5c2lodG1sNQogICAgICAgIEB0eXBlIG9iamVjdAogICAgICAgIEBkZWZhdWx0IHtzdHlsZXNoZWV0czogZmFsc2V9CiAgICAgICAgKiovICAgICAgICAKICAgICAgICB3eXNpaHRtbDU6IHsKICAgICAgICAgICAgc3R5bGVzaGVldHM6IGZhbHNlIC8vc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qaG9sbGluZ3dvcnRoL2Jvb3RzdHJhcC13eXNpaHRtbDUvaXNzdWVzLzE4MwogICAgICAgIH0KICAgIH0pOwoKICAgICQuZm4uZWRpdGFibGV0eXBlcy53eXNpaHRtbDUgPSBXeXNpaHRtbDU7Cgp9KHdpbmRvdy5qUXVlcnkpKTsK]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/css</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/css/jquery-editable.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIFgtZWRpdGFibGUgLSB2MS41LjEgCiogSW4tcGxhY2UgZWRpdGluZyB3aXRoIFR3aXR0ZXIgQm9vdHN0cmFwLCBqUXVlcnkgVUkgb3IgcHVyZSBqUXVlcnkKKiBodHRwOi8vZ2l0aHViLmNvbS92aXRhbGV0cy94LWVkaXRhYmxlCiogQ29weXJpZ2h0IChjKSAyMDEzIFZpdGFsaXkgUG90YXBvdjsgTGljZW5zZWQgTUlUICovCi5lZGl0YWJsZWZvcm0gewogICAgbWFyZ2luLWJvdHRvbTogMDsgLyogb3ZlcndyaXRlcyBib290c3RyYXAgbWFyZ2luICovCn0KCi5lZGl0YWJsZWZvcm0gLmNvbnRyb2wtZ3JvdXAgewogICAgbWFyZ2luLWJvdHRvbTogMDsgLyogb3ZlcndyaXRlcyBib290c3RyYXAgbWFyZ2luICovCiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOyAvKiBwcmV2ZW50IHdyYXBwaW5nIGJ1dHRvbnMgb24gbmV3IGxpbmUgKi8KICAgIGxpbmUtaGVpZ2h0OiAyMHB4OyAvKiBvdmVyd3JpdGluZyBib290c3RyYXAgbGluZS1oZWlnaHQuIFNlZSAjMTMzICovCn0KCi8qIAogIEJTMyB3aWR0aDoxMDA1IGZvciBpbnB1dHMgYnJlYWtzIGVkaXRhYmxlIGZvcm0gaW4gcG9wdXAgCiAgU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdml0YWxldHMveC1lZGl0YWJsZS9pc3N1ZXMvMzkzCiovCi5lZGl0YWJsZWZvcm0gLmZvcm0tY29udHJvbCB7CiAgICB3aWR0aDogYXV0bzsKfQoKLmVkaXRhYmxlLWJ1dHRvbnMgewogICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8qIHNob3VsZCBiZSBpbmxpbmUgdG8gdGFrZSBlZmZlY3Qgb2YgcGFyZW50J3Mgd2hpdGUtc3BhY2U6IG5vd3JhcCAqLwogICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICBtYXJnaW4tbGVmdDogN3B4OwogICAvKiBpbmxpbmUtYmxvY2sgZW11bGF0aW9uIGZvciBJRTcqLwogICB6b29tOiAxOyAKICAgKmRpc3BsYXk6IGlubGluZTsKfQoKLmVkaXRhYmxlLWJ1dHRvbnMuZWRpdGFibGUtYnV0dG9ucy1ib3R0b20gewogICBkaXNwbGF5OiBibG9jazsgCiAgIG1hcmdpbi10b3A6IDdweDsKICAgbWFyZ2luLWxlZnQ6IDA7Cn0KCi5lZGl0YWJsZS1pbnB1dCB7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOyAKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgLyogc2hvdWxkIGJlIGlubGluZSB0byB0YWtlIGVmZmVjdCBvZiBwYXJlbnQncyB3aGl0ZS1zcGFjZTogbm93cmFwICovCiAgICB3aWR0aDogYXV0bzsgLyogYm9vdHN0cmFwLXJlc3BvbnNpdmUgaGFzIHdpZHRoOiAxMDAlIHRoYXQgYnJlYWtlcyBsYXlvdXQgKi8KICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7IC8qIHJlc2V0IHdoaXRlLXNwYWNlIGRlY2FscmVkIGluIHBhcmVudCovCiAgIC8qIGRpc3BsYXktaW5saW5lIGVtdWxhdGlvbiBmb3IgSUU3Ki8KICAgem9vbTogMTsgCiAgICpkaXNwbGF5OiBpbmxpbmU7ICAgCn0KCi5lZGl0YWJsZS1idXR0b25zIC5lZGl0YWJsZS1jYW5jZWwgewogICBtYXJnaW4tbGVmdDogN3B4OyAKfQoKLypmb3IganF1ZXJ5LXVpIGJ1dHRvbnMgbmVlZCBzZXQgaGVpZ2h0IHRvIGxvb2sgbW9yZSBwcmV0dHkqLwouZWRpdGFibGUtYnV0dG9ucyBidXR0b24udWktYnV0dG9uLWljb24tb25seSB7CiAgIGhlaWdodDogMjRweDsgCiAgIHdpZHRoOiAzMHB4Owp9CgouZWRpdGFibGVmb3JtLWxvYWRpbmcgewogICAgYmFja2dyb3VuZDogdXJsKCcuLi9pbWcvbG9hZGluZy5naWYnKSBjZW50ZXIgY2VudGVyIG5vLXJlcGVhdDsgIAogICAgaGVpZ2h0OiAyNXB4OwogICAgd2lkdGg6IGF1dG87IAogICAgbWluLXdpZHRoOiAyNXB4OyAKfQoKLmVkaXRhYmxlLWlubGluZSAuZWRpdGFibGVmb3JtLWxvYWRpbmcgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCA1cHg7ICAgICAgCn0KCiAuZWRpdGFibGUtZXJyb3ItYmxvY2sgewogICAgbWF4LXdpZHRoOiAzMDBweDsKICAgIG1hcmdpbjogNXB4IDAgMCAwOwogICAgd2lkdGg6IGF1dG87CiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwp9CgovKmFkZCBwYWRkaW5nIGZvciBqcXVlcnkgdWkqLwouZWRpdGFibGUtZXJyb3ItYmxvY2sudWktc3RhdGUtZXJyb3IgewogICAgcGFkZGluZzogM3B4OyAgCn0gIAoKLmVkaXRhYmxlLWVycm9yIHsKICAgY29sb3I6IHJlZDsgIAp9CgovKiAtLS0tIEZvciBzcGVjaWZpYyB0eXBlcyAtLS0tICovCgouZWRpdGFibGVmb3JtIC5lZGl0YWJsZS1kYXRlIHsKICAgIHBhZGRpbmc6IDA7IAogICAgbWFyZ2luOiAwOwogICAgZmxvYXQ6IGxlZnQ7Cn0KCi8qIG1vdmUgZGF0ZXBpY2tlciBpY29uIHRvIGNlbnRlciBvZiBhZGQtb24gYnV0dG9uLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3ZpdGFsZXRzL3gtZWRpdGFibGUvaXNzdWVzLzE4MyAqLwouZWRpdGFibGUtaW5saW5lIC5hZGQtb24gLmljb24tdGggewogICBtYXJnaW4tdG9wOiAzcHg7CiAgIG1hcmdpbi1sZWZ0OiAxcHg7IAp9CgoKLyogY2hlY2tsaXN0IHZlcnRpY2FsIGFsaWdubWVudCAqLwouZWRpdGFibGUtY2hlY2tsaXN0IGxhYmVsIGlucHV0W3R5cGU9ImNoZWNrYm94Il0sIAouZWRpdGFibGUtY2hlY2tsaXN0IGxhYmVsIHNwYW4gewogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgIG1hcmdpbjogMDsKfQoKLmVkaXRhYmxlLWNoZWNrbGlzdCBsYWJlbCB7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOyAKfQoKLyogc2V0IGV4YWN0IHdpZHRoIG9mIHRleHRhcmVhIHRvIGZpdCBidXR0b25zIHRvb2xiYXIgKi8KLmVkaXRhYmxlLXd5c2lodG1sNSB7CiAgICB3aWR0aDogNTY2cHg7IAogICAgaGVpZ2h0OiAyNTBweDsgCn0KCi8qIGNsZWFyIGJ1dHRvbiBzaG93biBhcyBsaW5rIGluIGRhdGUgaW5wdXRzICovCi5lZGl0YWJsZS1jbGVhciB7CiAgIGNsZWFyOiBib3RoOwogICBmb250LXNpemU6IDAuOWVtOwogICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgIHRleHQtYWxpZ246IHJpZ2h0Owp9CgovKiBJT1Mtc3R5bGUgY2xlYXIgYnV0dG9uIGZvciB0ZXh0IGlucHV0cyAqLwouZWRpdGFibGUtY2xlYXIteCB7CiAgIGJhY2tncm91bmQ6IHVybCgnLi4vaW1nL2NsZWFyLnBuZycpIGNlbnRlciBjZW50ZXIgbm8tcmVwZWF0OwogICBkaXNwbGF5OiBibG9jazsKICAgd2lkdGg6IDEzcHg7ICAgIAogICBoZWlnaHQ6IDEzcHg7CiAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgb3BhY2l0eTogMC42OwogICB6LWluZGV4OiAxMDA7CiAgIAogICB0b3A6IDUwJTsKICAgcmlnaHQ6IDZweDsKICAgbWFyZ2luLXRvcDogLTZweDsKICAgCn0KCi5lZGl0YWJsZS1jbGVhci14OmhvdmVyIHsKICAgb3BhY2l0eTogMTsKfQoKLmVkaXRhYmxlLXByZS13cmFwcGVkIHsKICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwp9Ci5lZGl0YWJsZS1jb250YWluZXIuZWRpdGFibGUtcG9wdXAgewogICAgbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7IC8qIHdpdGhvdXQgdGhpcyBydWxlIHBvc2h5dGlwL3Rvb2x0aXAgZG9lcyBub3Qgc3RyZXRjaCAqLwp9ICAKCi5lZGl0YWJsZS1jb250YWluZXIucG9wb3ZlciB7CiAgICB3aWR0aDogYXV0bzsgLyogd2l0aG91dCB0aGlzIHJ1bGUgcG9wb3ZlciBkb2VzIG5vdCBzdHJldGNoICovCn0KCi5lZGl0YWJsZS1jb250YWluZXIuZWRpdGFibGUtaW5saW5lIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgCiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgd2lkdGg6IGF1dG87CiAgICAvKiBpbmxpbmUtYmxvY2sgZW11bGF0aW9uIGZvciBJRTcqLwogICAgem9vbTogMTsgCiAgICAqZGlzcGxheTogaW5saW5lOyAgICAKfQoKLmVkaXRhYmxlLWNvbnRhaW5lci51aS13aWRnZXQgewogICBmb250LXNpemU6IGluaGVyaXQ7ICAvKiBqcXVlcnl1aSB3aWRnZXQgZm9udCAxLjFlbSB0b28gYmlnLCBvdmVyd3JpdGUgaXQgKi8KICAgei1pbmRleDogOTk5MDsgLyogc2hvdWxkIGJlIGxlc3MgdGhhbiBzZWxlY3QyIGRyb3Bkb3duIHotaW5kZXggdG8gY2xvc2UgZHJvcGRvd24gZmlyc3Qgd2hlbiBjbGljayAqLwp9Ci5lZGl0YWJsZS1jbGljaywgCmEuZWRpdGFibGUtY2xpY2ssIAphLmVkaXRhYmxlLWNsaWNrOmhvdmVyIHsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIGJvcmRlci1ib3R0b206IGRhc2hlZCAxcHggIzAwODhjYzsKfQoKLmVkaXRhYmxlLWNsaWNrLmVkaXRhYmxlLWRpc2FibGVkLCAKYS5lZGl0YWJsZS1jbGljay5lZGl0YWJsZS1kaXNhYmxlZCwgCmEuZWRpdGFibGUtY2xpY2suZWRpdGFibGUtZGlzYWJsZWQ6aG92ZXIgewogICBjb2xvcjogIzU4NTg1ODsgIAogICBjdXJzb3I6IGRlZmF1bHQ7CiAgIGJvcmRlci1ib3R0b206IG5vbmU7Cn0KCi5lZGl0YWJsZS1lbXB0eSwgLmVkaXRhYmxlLWVtcHR5OmhvdmVyLCAuZWRpdGFibGUtZW1wdHk6Zm9jdXN7CiAgZm9udC1zdHlsZTogaXRhbGljOyAKICBjb2xvcjogI0REMTE0NDsgIAogIC8qIGJvcmRlci1ib3R0b206IG5vbmU7ICovCiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CgouZWRpdGFibGUtdW5zYXZlZCB7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7IAp9CgouZWRpdGFibGUtdW5zYXZlZDphZnRlciB7Ci8qICAgIGNvbnRlbnQ6ICcqJyovCn0KCi5lZGl0YWJsZS1iZy10cmFuc2l0aW9uIHsKICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwMG1zIGVhc2Utb3V0OwogIC1tb3otdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxNDAwbXMgZWFzZS1vdXQ7CiAgLW8tdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxNDAwbXMgZWFzZS1vdXQ7CiAgLW1zLXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwMG1zIGVhc2Utb3V0OwogIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwMG1zIGVhc2Utb3V0OyAgCn0KCi8qc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS92aXRhbGV0cy94LWVkaXRhYmxlL2lzc3Vlcy8xMzkgKi8KLmZvcm0taG9yaXpvbnRhbCAuZWRpdGFibGUKeyAKICAgIHBhZGRpbmctdG9wOiA1cHg7CiAgICBkaXNwbGF5OmlubGluZS1ibG9jazsKfQoK]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/img</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/img/clear.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAQAAADY4iz3AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAAAJdnBBZwAAAA0AAAANABzi0JoAAAEFSURBVBjTNdC/alNhAIbx3/edpGeQlJqElIihpqKYpfYPyRXoUEe33pdXUOjolqXQG2glUnDQkkKVgIRoIDQIpsnJ6ZD2Wd/lfZ5gxYZXqgrmxq7cQkDijabgkaW+vjzBri0hlYFUFlQVjaJNzzmu/D5oBFrJqPNpA03laItS+Pi6XL/cf1c8b6/Xjl6m8CI4VKCVfOk8qViKk+FOb5Djf1SA79lRz1JcLj5cDnKwFi2glZzsi8RC921j9fUuGlMK5+1SdTJ8f/pvXK5/3UthHP1imnevJ8Od3tm8fTH9+/lmBj8DDjwjNXvwWg2+JRhJPM0eUmTkrv2QP+ap2FYTZf7om8A9PrJPoYpSXtIAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTEtMDItMTRUMTE6MTI6MTUrMDI6MDD7C2qGAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDExLTAyLTE0VDExOjEyOjE1KzAyOjAwilbSOgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/img/loading.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css/redmond</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css/redmond/images</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css/redmond/images/animated-overlay.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAABkAgAAAACbvzUHAAAAAmJLR0QAAzOEcogAAAAJcEhZcwAAAEgAAABIAEbJaz4AAAAWSURBVDjLY1gFBwyjzFHmKHOUSS4TAApJmC9aV5jjAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDEzLTAzLTMxVDE5OjU2OjAwLTA3OjAwMPhSDAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMy0wMy0zMVQxOTo1NjowMC0wNzowMEGl6rAAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css/redmond/images/ui-bg_flat_55_fbec88_40x100.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAABkAQMAAADOquA5AAAAA1BMVEX77IgPQxYZAAAACXBIWXMAAABIAAAASABGyWs+AAAAD0lEQVQoz2NgGAWjgPoAAAJYAAF1NoZ3AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDEzLTAzLTMxVDE5OjU2OjM2LTA3OjAw3adg1QAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMy0wMy0zMVQxOTo1NjozNi0wNzowMKz62GkAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQEAIAAACwqkHPAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAjklEQVRIx+3PoQ4BARzH8e/vl/STBEkz7yDQbIImunQewCtoHkSSdfWK2S4pprE56XbbjeAZjPBPn/BNX87VfV9VBoAgCILg6zyLqt801kZTda0hO0Z2qgMTa62CmZ0LLexcL1K7VKLMLpWwtHLBpym1t7ox53J8ZLW4JmWnHpsTKwZWjzat/5gOgiD4HW/gtCd0DyuhYAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMy0wMy0zMVQxOTo1NjozNy0wNzowMHvQa2EAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTMtMDMtMzFUMTk6NTY6MzctMDc6MDAKjdPdAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css/redmond/images/ui-bg_glass_85_dfeffc_1x400.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQEAIAAACwqkHPAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAk0lEQVRIx+3UIQrCABhH8ff9g8EggoKgA5mITe9hsFi8gDuFwewJdgHtYjTZ9Q5aRBjCBNnSNmzewOSXfu3FR3LOokoCAMdxHOfXcL2maVFwm71GZU2Ws6Ija9mGrmxMTCBb2oGBFNmBkMflfS+P0tpODEn22aKCZzuvV6Fsypa+bGIxwTe2szlN0aOBD95xnL/nA7WPJ+2NbKMjAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDEzLTAzLTMxVDE5OjU2OjM2LTA3OjAw3adg1QAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMy0wMy0zMVQxOTo1NjozNi0wNzowMKz62GkAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css/redmond/images/ui-bg_glass_95_fef1ec_1x400.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQEAIAAACwqkHPAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAiklEQVRIx+3PsQ0BYRiH8ef/FhLnXCFWEI3WDkojWMAAltDQi0R9ExiADS5m+D7JHYnuPgWxgVC81a94qoe0eMzuEwMAx3Ec59vQtnUdAsmacZySsmYXK9LwNrqujR5bnY1cpcKHgqOS0debV6NUNHLtuRiZNjoZXVY6GB3mLA0oGPzFtOM4zg95AkctKGSanwlIAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDEzLTAzLTMxVDE5OjU2OjE0LTA3OjAwCB12gQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMy0wMy0zMVQxOTo1NjoxNC0wNzowMHlAzj0AAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAABkEAIAAACY3hF0AAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAi0lEQVQoz+3PIQ8BcRjA4d+9gc0m2Gg0STeFTTDJpjv12hW+gm8jC5pJoo+g2gTBzt37f98zX0G8ID35IcuKQlUA4M8v8O5pO7SEmCkjIWHOmHyh93Ahv4aZdSTaEbOkuJnYEU0t8Sb6tLOvCVvv+p7w8I2/sJWfyiF28E+ZCpNoQF9oUKdWiW11+QL3bzY9wDlB+AAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMy0wMy0zMVQxOTo1NjozNS0wNzowMOxPekgAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTMtMDMtMzFUMTk6NTY6MzUtMDc6MDCdEsL0AAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAABkEAIAAACY3hF0AAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAYklEQVQoz+3PMQqAMBQE0cmKYJFKRYMJiCAoev/b+cVCSG2ZwuoVAwvLdZmZCQB+voA1d33XItLSipmeXiyMjGJjYsqcJJLcQSKJjUgU+9tWAkEsbnBDHuvweFEhVMTbcnkARNMN2kh7KjEAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTMtMDMtMzFUMTk6NTY6MjMtMDc6MDBDNU/sAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEzLTAzLTMxVDE5OjU2OjIzLTA3OjAwMmj3UAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css/redmond/images/ui-icons_217bc0_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css/redmond/images/ui-icons_2e83ff_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css/redmond/images/ui-icons_469bdd_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css/redmond/images/ui-icons_6da8d5_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css/redmond/images/ui-icons_cd0a0a_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css/redmond/images/ui-icons_d8e7f3_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css/redmond/images/ui-icons_f9bd01_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css/redmond/jquery-ui-1.10.3.custom.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGpRdWVyeSBVSSAtIHYxLjEwLjMgLSAyMDEzLTA4LTA1CiogaHR0cDovL2pxdWVyeXVpLmNvbQoqIEluY2x1ZGVzOiBqcXVlcnkudWkuY29yZS5jc3MsIGpxdWVyeS51aS5kYXRlcGlja2VyLmNzcwoqIFRvIHZpZXcgYW5kIG1vZGlmeSB0aGlzIHRoZW1lLCB2aXNpdCBodHRwOi8vanF1ZXJ5dWkuY29tL3RoZW1lcm9sbGVyLz9mZkRlZmF1bHQ9THVjaWRhJTIwR3JhbmRlJTJDTHVjaWRhJTIwU2FucyUyQ0FyaWFsJTJDc2Fucy1zZXJpZiZmd0RlZmF1bHQ9Ym9sZCZmc0RlZmF1bHQ9MS4xZW0mY29ybmVyUmFkaXVzPTVweCZiZ0NvbG9ySGVhZGVyPTVjOWNjYyZiZ1RleHR1cmVIZWFkZXI9Z2xvc3Nfd2F2ZSZiZ0ltZ09wYWNpdHlIZWFkZXI9NTUmYm9yZGVyQ29sb3JIZWFkZXI9NDI5N2Q3JmZjSGVhZGVyPWZmZmZmZiZpY29uQ29sb3JIZWFkZXI9ZDhlN2YzJmJnQ29sb3JDb250ZW50PWZjZmRmZCZiZ1RleHR1cmVDb250ZW50PWluc2V0X2hhcmQmYmdJbWdPcGFjaXR5Q29udGVudD0xMDAmYm9yZGVyQ29sb3JDb250ZW50PWE2YzllMiZmY0NvbnRlbnQ9MjIyMjIyJmljb25Db2xvckNvbnRlbnQ9NDY5YmRkJmJnQ29sb3JEZWZhdWx0PWRmZWZmYyZiZ1RleHR1cmVEZWZhdWx0PWdsYXNzJmJnSW1nT3BhY2l0eURlZmF1bHQ9ODUmYm9yZGVyQ29sb3JEZWZhdWx0PWM1ZGJlYyZmY0RlZmF1bHQ9MmU2ZTllJmljb25Db2xvckRlZmF1bHQ9NmRhOGQ1JmJnQ29sb3JIb3Zlcj1kMGU1ZjUmYmdUZXh0dXJlSG92ZXI9Z2xhc3MmYmdJbWdPcGFjaXR5SG92ZXI9NzUmYm9yZGVyQ29sb3JIb3Zlcj03OWI3ZTcmZmNIb3Zlcj0xZDU5ODcmaWNvbkNvbG9ySG92ZXI9MjE3YmMwJmJnQ29sb3JBY3RpdmU9ZjVmOGY5JmJnVGV4dHVyZUFjdGl2ZT1pbnNldF9oYXJkJmJnSW1nT3BhY2l0eUFjdGl2ZT0xMDAmYm9yZGVyQ29sb3JBY3RpdmU9NzliN2U3JmZjQWN0aXZlPWUxNzAwOSZpY29uQ29sb3JBY3RpdmU9ZjliZDAxJmJnQ29sb3JIaWdobGlnaHQ9ZmJlYzg4JmJnVGV4dHVyZUhpZ2hsaWdodD1mbGF0JmJnSW1nT3BhY2l0eUhpZ2hsaWdodD01NSZib3JkZXJDb2xvckhpZ2hsaWdodD1mYWQ0MmUmZmNIaWdobGlnaHQ9MzYzNjM2Jmljb25Db2xvckhpZ2hsaWdodD0yZTgzZmYmYmdDb2xvckVycm9yPWZlZjFlYyZiZ1RleHR1cmVFcnJvcj1nbGFzcyZiZ0ltZ09wYWNpdHlFcnJvcj05NSZib3JkZXJDb2xvckVycm9yPWNkMGEwYSZmY0Vycm9yPWNkMGEwYSZpY29uQ29sb3JFcnJvcj1jZDBhMGEmYmdDb2xvck92ZXJsYXk9YWFhYWFhJmJnVGV4dHVyZU92ZXJsYXk9ZmxhdCZiZ0ltZ09wYWNpdHlPdmVybGF5PTAmb3BhY2l0eU92ZXJsYXk9MzAmYmdDb2xvclNoYWRvdz1hYWFhYWEmYmdUZXh0dXJlU2hhZG93PWZsYXQmYmdJbWdPcGFjaXR5U2hhZG93PTAmb3BhY2l0eVNoYWRvdz0zMCZ0aGlja25lc3NTaGFkb3c9OHB4Jm9mZnNldFRvcFNoYWRvdz0tOHB4Jm9mZnNldExlZnRTaGFkb3c9LThweCZjb3JuZXJSYWRpdXNTaGFkb3c9OHB4CiogQ29weXJpZ2h0IDIwMTMgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyBMaWNlbnNlZCBNSVQgKi8KCi8qIExheW91dCBoZWxwZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoudWktaGVscGVyLWhpZGRlbiB7CglkaXNwbGF5OiBub25lOwp9Ci51aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUgewoJYm9yZGVyOiAwOwoJY2xpcDogcmVjdCgwIDAgMCAwKTsKCWhlaWdodDogMXB4OwoJbWFyZ2luOiAtMXB4OwoJb3ZlcmZsb3c6IGhpZGRlbjsKCXBhZGRpbmc6IDA7Cglwb3NpdGlvbjogYWJzb2x1dGU7Cgl3aWR0aDogMXB4Owp9Ci51aS1oZWxwZXItcmVzZXQgewoJbWFyZ2luOiAwOwoJcGFkZGluZzogMDsKCWJvcmRlcjogMDsKCW91dGxpbmU6IDA7CglsaW5lLWhlaWdodDogMS4zOwoJdGV4dC1kZWNvcmF0aW9uOiBub25lOwoJZm9udC1zaXplOiAxMDAlOwoJbGlzdC1zdHlsZTogbm9uZTsKfQoudWktaGVscGVyLWNsZWFyZml4OmJlZm9yZSwKLnVpLWhlbHBlci1jbGVhcmZpeDphZnRlciB7Cgljb250ZW50OiAiIjsKCWRpc3BsYXk6IHRhYmxlOwoJYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKfQoudWktaGVscGVyLWNsZWFyZml4OmFmdGVyIHsKCWNsZWFyOiBib3RoOwp9Ci51aS1oZWxwZXItY2xlYXJmaXggewoJbWluLWhlaWdodDogMDsgLyogc3VwcG9ydDogSUU3ICovCn0KLnVpLWhlbHBlci16Zml4IHsKCXdpZHRoOiAxMDAlOwoJaGVpZ2h0OiAxMDAlOwoJdG9wOiAwOwoJbGVmdDogMDsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCW9wYWNpdHk6IDA7CglmaWx0ZXI6QWxwaGEoT3BhY2l0eT0wKTsKfQoKLnVpLWZyb250IHsKCXotaW5kZXg6IDEwMDsKfQoKCi8qIEludGVyYWN0aW9uIEN1ZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi51aS1zdGF0ZS1kaXNhYmxlZCB7CgljdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDsKfQoKCi8qIEljb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKLyogc3RhdGVzIGFuZCBpbWFnZXMgKi8KLnVpLWljb24gewoJZGlzcGxheTogYmxvY2s7Cgl0ZXh0LWluZGVudDogLTk5OTk5cHg7CglvdmVyZmxvdzogaGlkZGVuOwoJYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKfQoKCi8qIE1pc2MgdmlzdWFscwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCi8qIE92ZXJsYXlzICovCi51aS13aWRnZXQtb3ZlcmxheSB7Cglwb3NpdGlvbjogZml4ZWQ7Cgl0b3A6IDA7CglsZWZ0OiAwOwoJd2lkdGg6IDEwMCU7CgloZWlnaHQ6IDEwMCU7Cn0KLnVpLWRhdGVwaWNrZXIgewoJd2lkdGg6IDE3ZW07CglwYWRkaW5nOiAuMmVtIC4yZW0gMDsKCWRpc3BsYXk6IG5vbmU7Cn0KLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItaGVhZGVyIHsKCXBvc2l0aW9uOiByZWxhdGl2ZTsKCXBhZGRpbmc6IC4yZW0gMDsKfQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LAoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0IHsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCXRvcDogMnB4OwoJd2lkdGg6IDEuOGVtOwoJaGVpZ2h0OiAxLjhlbTsKfQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyLAoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIHsKCXRvcDogMXB4Owp9Ci51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYgewoJbGVmdDogMnB4Owp9Ci51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQgewoJcmlnaHQ6IDJweDsKfQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyIHsKCWxlZnQ6IDFweDsKfQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIHsKCXJpZ2h0OiAxcHg7Cn0KLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldiBzcGFuLAoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0IHNwYW4gewoJZGlzcGxheTogYmxvY2s7Cglwb3NpdGlvbjogYWJzb2x1dGU7CglsZWZ0OiA1MCU7CgltYXJnaW4tbGVmdDogLThweDsKCXRvcDogNTAlOwoJbWFyZ2luLXRvcDogLThweDsKfQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci10aXRsZSB7CgltYXJnaW46IDAgMi4zZW07CglsaW5lLWhlaWdodDogMS44ZW07Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItdGl0bGUgc2VsZWN0IHsKCWZvbnQtc2l6ZTogMWVtOwoJbWFyZ2luOiAxcHggMDsKfQoudWktZGF0ZXBpY2tlciBzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aC15ZWFyIHsKCXdpZHRoOiAxMDAlOwp9Ci51aS1kYXRlcGlja2VyIHNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLAoudWktZGF0ZXBpY2tlciBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyIHsKCXdpZHRoOiA0OSU7Cn0KLnVpLWRhdGVwaWNrZXIgdGFibGUgewoJd2lkdGg6IDEwMCU7Cglmb250LXNpemU6IC45ZW07Cglib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJbWFyZ2luOiAwIDAgLjRlbTsKfQoudWktZGF0ZXBpY2tlciB0aCB7CglwYWRkaW5nOiAuN2VtIC4zZW07Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cglmb250LXdlaWdodDogYm9sZDsKCWJvcmRlcjogMDsKfQoudWktZGF0ZXBpY2tlciB0ZCB7Cglib3JkZXI6IDA7CglwYWRkaW5nOiAxcHg7Cn0KLnVpLWRhdGVwaWNrZXIgdGQgc3BhbiwKLnVpLWRhdGVwaWNrZXIgdGQgYSB7CglkaXNwbGF5OiBibG9jazsKCXBhZGRpbmc6IC4yZW07Cgl0ZXh0LWFsaWduOiByaWdodDsKCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIHsKCWJhY2tncm91bmQtaW1hZ2U6IG5vbmU7CgltYXJnaW46IC43ZW0gMCAwIDA7CglwYWRkaW5nOiAwIC4yZW07Cglib3JkZXItbGVmdDogMDsKCWJvcmRlci1yaWdodDogMDsKCWJvcmRlci1ib3R0b206IDA7Cn0KLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24gewoJZmxvYXQ6IHJpZ2h0OwoJbWFyZ2luOiAuNWVtIC4yZW0gLjRlbTsKCWN1cnNvcjogcG9pbnRlcjsKCXBhZGRpbmc6IC4yZW0gLjZlbSAuM2VtIC42ZW07Cgl3aWR0aDogYXV0bzsKCW92ZXJmbG93OiB2aXNpYmxlOwp9Ci51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uLnVpLWRhdGVwaWNrZXItY3VycmVudCB7CglmbG9hdDogbGVmdDsKfQoKLyogd2l0aCBtdWx0aXBsZSBjYWxlbmRhcnMgKi8KLnVpLWRhdGVwaWNrZXIudWktZGF0ZXBpY2tlci1tdWx0aSB7Cgl3aWR0aDogYXV0bzsKfQoudWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cCB7CglmbG9hdDogbGVmdDsKfQoudWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cCB0YWJsZSB7Cgl3aWR0aDogOTUlOwoJbWFyZ2luOiAwIGF1dG8gLjRlbTsKfQoudWktZGF0ZXBpY2tlci1tdWx0aS0yIC51aS1kYXRlcGlja2VyLWdyb3VwIHsKCXdpZHRoOiA1MCU7Cn0KLnVpLWRhdGVwaWNrZXItbXVsdGktMyAudWktZGF0ZXBpY2tlci1ncm91cCB7Cgl3aWR0aDogMzMuMyU7Cn0KLnVpLWRhdGVwaWNrZXItbXVsdGktNCAudWktZGF0ZXBpY2tlci1ncm91cCB7Cgl3aWR0aDogMjUlOwp9Ci51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QgLnVpLWRhdGVwaWNrZXItaGVhZGVyLAoudWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGUgLnVpLWRhdGVwaWNrZXItaGVhZGVyIHsKCWJvcmRlci1sZWZ0LXdpZHRoOiAwOwp9Ci51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgewoJY2xlYXI6IGxlZnQ7Cn0KLnVpLWRhdGVwaWNrZXItcm93LWJyZWFrIHsKCWNsZWFyOiBib3RoOwoJd2lkdGg6IDEwMCU7Cglmb250LXNpemU6IDA7Cn0KCi8qIFJUTCBzdXBwb3J0ICovCi51aS1kYXRlcGlja2VyLXJ0bCB7CglkaXJlY3Rpb246IHJ0bDsKfQoudWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItcHJldiB7CglyaWdodDogMnB4OwoJbGVmdDogYXV0bzsKfQoudWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItbmV4dCB7CglsZWZ0OiAycHg7CglyaWdodDogYXV0bzsKfQoudWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItcHJldjpob3ZlciB7CglyaWdodDogMXB4OwoJbGVmdDogYXV0bzsKfQoudWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItbmV4dDpob3ZlciB7CglsZWZ0OiAxcHg7CglyaWdodDogYXV0bzsKfQoudWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSB7CgljbGVhcjogcmlnaHQ7Cn0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uIHsKCWZsb2F0OiBsZWZ0Owp9Ci51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbi51aS1kYXRlcGlja2VyLWN1cnJlbnQsCi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cCB7CglmbG9hdDogcmlnaHQ7Cn0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QgLnVpLWRhdGVwaWNrZXItaGVhZGVyLAoudWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIC51aS1kYXRlcGlja2VyLWhlYWRlciB7Cglib3JkZXItcmlnaHQtd2lkdGg6IDA7Cglib3JkZXItbGVmdC13aWR0aDogMXB4Owp9CgovKiBDb21wb25lbnQgY29udGFpbmVycwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLnVpLXdpZGdldCB7Cglmb250LWZhbWlseTogTHVjaWRhIEdyYW5kZSxMdWNpZGEgU2FucyxBcmlhbCxzYW5zLXNlcmlmOwoJZm9udC1zaXplOiAxLjFlbTsKfQoudWktd2lkZ2V0IC51aS13aWRnZXQgewoJZm9udC1zaXplOiAxZW07Cn0KLnVpLXdpZGdldCBpbnB1dCwKLnVpLXdpZGdldCBzZWxlY3QsCi51aS13aWRnZXQgdGV4dGFyZWEsCi51aS13aWRnZXQgYnV0dG9uIHsKCWZvbnQtZmFtaWx5OiBMdWNpZGEgR3JhbmRlLEx1Y2lkYSBTYW5zLEFyaWFsLHNhbnMtc2VyaWY7Cglmb250LXNpemU6IDFlbTsKfQoudWktd2lkZ2V0LWNvbnRlbnQgewoJYm9yZGVyOiAxcHggc29saWQgI2E2YzllMjsKCWJhY2tncm91bmQ6ICNmY2ZkZmQgdXJsKGltYWdlcy91aS1iZ19pbnNldC1oYXJkXzEwMF9mY2ZkZmRfMXgxMDAucG5nKSA1MCUgYm90dG9tIHJlcGVhdC14OwoJY29sb3I6ICMyMjIyMjI7Cn0KLnVpLXdpZGdldC1jb250ZW50IGEgewoJY29sb3I6ICMyMjIyMjI7Cn0KLnVpLXdpZGdldC1oZWFkZXIgewoJYm9yZGVyOiAxcHggc29saWQgIzQyOTdkNzsKCWJhY2tncm91bmQ6ICM1YzljY2MgdXJsKGltYWdlcy91aS1iZ19nbG9zcy13YXZlXzU1XzVjOWNjY181MDB4MTAwLnBuZykgNTAlIDUwJSByZXBlYXQteDsKCWNvbG9yOiAjZmZmZmZmOwoJZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KLnVpLXdpZGdldC1oZWFkZXIgYSB7Cgljb2xvcjogI2ZmZmZmZjsKfQoKLyogSW50ZXJhY3Rpb24gc3RhdGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoudWktc3RhdGUtZGVmYXVsdCwKLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kZWZhdWx0LAoudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZGVmYXVsdCB7Cglib3JkZXI6IDFweCBzb2xpZCAjYzVkYmVjOwoJYmFja2dyb3VuZDogI2RmZWZmYyB1cmwoaW1hZ2VzL3VpLWJnX2dsYXNzXzg1X2RmZWZmY18xeDQwMC5wbmcpIDUwJSA1MCUgcmVwZWF0LXg7Cglmb250LXdlaWdodDogYm9sZDsKCWNvbG9yOiAjMmU2ZTllOwp9Ci51aS1zdGF0ZS1kZWZhdWx0IGEsCi51aS1zdGF0ZS1kZWZhdWx0IGE6bGluaywKLnVpLXN0YXRlLWRlZmF1bHQgYTp2aXNpdGVkIHsKCWNvbG9yOiAjMmU2ZTllOwoJdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9Ci51aS1zdGF0ZS1ob3ZlciwKLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1ob3ZlciwKLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhvdmVyLAoudWktc3RhdGUtZm9jdXMsCi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZm9jdXMsCi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1mb2N1cyB7Cglib3JkZXI6IDFweCBzb2xpZCAjNzliN2U3OwoJYmFja2dyb3VuZDogI2QwZTVmNSB1cmwoaW1hZ2VzL3VpLWJnX2dsYXNzXzc1X2QwZTVmNV8xeDQwMC5wbmcpIDUwJSA1MCUgcmVwZWF0LXg7Cglmb250LXdlaWdodDogYm9sZDsKCWNvbG9yOiAjMWQ1OTg3Owp9Ci51aS1zdGF0ZS1ob3ZlciBhLAoudWktc3RhdGUtaG92ZXIgYTpob3ZlciwKLnVpLXN0YXRlLWhvdmVyIGE6bGluaywKLnVpLXN0YXRlLWhvdmVyIGE6dmlzaXRlZCB7Cgljb2xvcjogIzFkNTk4NzsKCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoudWktc3RhdGUtYWN0aXZlLAoudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWFjdGl2ZSwKLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWFjdGl2ZSB7Cglib3JkZXI6IDFweCBzb2xpZCAjNzliN2U3OwoJYmFja2dyb3VuZDogI2Y1ZjhmOSB1cmwoaW1hZ2VzL3VpLWJnX2luc2V0LWhhcmRfMTAwX2Y1ZjhmOV8xeDEwMC5wbmcpIDUwJSA1MCUgcmVwZWF0LXg7Cglmb250LXdlaWdodDogYm9sZDsKCWNvbG9yOiAjZTE3MDA5Owp9Ci51aS1zdGF0ZS1hY3RpdmUgYSwKLnVpLXN0YXRlLWFjdGl2ZSBhOmxpbmssCi51aS1zdGF0ZS1hY3RpdmUgYTp2aXNpdGVkIHsKCWNvbG9yOiAjZTE3MDA5OwoJdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CgovKiBJbnRlcmFjdGlvbiBDdWVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoudWktc3RhdGUtaGlnaGxpZ2h0LAoudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhpZ2hsaWdodCwKLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodCB7Cglib3JkZXI6IDFweCBzb2xpZCAjZmFkNDJlOwoJYmFja2dyb3VuZDogI2ZiZWM4OCB1cmwoaW1hZ2VzL3VpLWJnX2ZsYXRfNTVfZmJlYzg4XzQweDEwMC5wbmcpIDUwJSA1MCUgcmVwZWF0LXg7Cgljb2xvcjogIzM2MzYzNjsKfQoudWktc3RhdGUtaGlnaGxpZ2h0IGEsCi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaGlnaGxpZ2h0IGEsCi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1oaWdobGlnaHQgYSB7Cgljb2xvcjogIzM2MzYzNjsKfQoudWktc3RhdGUtZXJyb3IsCi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3IsCi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvciB7Cglib3JkZXI6IDFweCBzb2xpZCAjY2QwYTBhOwoJYmFja2dyb3VuZDogI2ZlZjFlYyB1cmwoaW1hZ2VzL3VpLWJnX2dsYXNzXzk1X2ZlZjFlY18xeDQwMC5wbmcpIDUwJSA1MCUgcmVwZWF0LXg7Cgljb2xvcjogI2NkMGEwYTsKfQoudWktc3RhdGUtZXJyb3IgYSwKLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvciBhLAoudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3IgYSB7Cgljb2xvcjogI2NkMGEwYTsKfQoudWktc3RhdGUtZXJyb3ItdGV4dCwKLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvci10ZXh0LAoudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3ItdGV4dCB7Cgljb2xvcjogI2NkMGEwYTsKfQoudWktcHJpb3JpdHktcHJpbWFyeSwKLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1wcmltYXJ5LAoudWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktcHJpbWFyeSB7Cglmb250LXdlaWdodDogYm9sZDsKfQoudWktcHJpb3JpdHktc2Vjb25kYXJ5LAoudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXByaW9yaXR5LXNlY29uZGFyeSwKLnVpLXdpZGdldC1oZWFkZXIgLnVpLXByaW9yaXR5LXNlY29uZGFyeSB7CglvcGFjaXR5OiAuNzsKCWZpbHRlcjpBbHBoYShPcGFjaXR5PTcwKTsKCWZvbnQtd2VpZ2h0OiBub3JtYWw7Cn0KLnVpLXN0YXRlLWRpc2FibGVkLAoudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWRpc2FibGVkLAoudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZGlzYWJsZWQgewoJb3BhY2l0eTogLjM1OwoJZmlsdGVyOkFscGhhKE9wYWNpdHk9MzUpOwoJYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKfQoudWktc3RhdGUtZGlzYWJsZWQgLnVpLWljb24gewoJZmlsdGVyOkFscGhhKE9wYWNpdHk9MzUpOyAvKiBGb3IgSUU4IC0gU2VlICM2MDU5ICovCn0KCi8qIEljb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKLyogc3RhdGVzIGFuZCBpbWFnZXMgKi8KLnVpLWljb24gewoJd2lkdGg6IDE2cHg7CgloZWlnaHQ6IDE2cHg7Cn0KLnVpLWljb24sCi51aS13aWRnZXQtY29udGVudCAudWktaWNvbiB7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3VpLWljb25zXzQ2OWJkZF8yNTZ4MjQwLnBuZyk7Cn0KLnVpLXdpZGdldC1oZWFkZXIgLnVpLWljb24gewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy91aS1pY29uc19kOGU3ZjNfMjU2eDI0MC5wbmcpOwp9Ci51aS1zdGF0ZS1kZWZhdWx0IC51aS1pY29uIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybChpbWFnZXMvdWktaWNvbnNfNmRhOGQ1XzI1NngyNDAucG5nKTsKfQoudWktc3RhdGUtaG92ZXIgLnVpLWljb24sCi51aS1zdGF0ZS1mb2N1cyAudWktaWNvbiB7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3VpLWljb25zXzIxN2JjMF8yNTZ4MjQwLnBuZyk7Cn0KLnVpLXN0YXRlLWFjdGl2ZSAudWktaWNvbiB7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3VpLWljb25zX2Y5YmQwMV8yNTZ4MjQwLnBuZyk7Cn0KLnVpLXN0YXRlLWhpZ2hsaWdodCAudWktaWNvbiB7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3VpLWljb25zXzJlODNmZl8yNTZ4MjQwLnBuZyk7Cn0KLnVpLXN0YXRlLWVycm9yIC51aS1pY29uLAoudWktc3RhdGUtZXJyb3ItdGV4dCAudWktaWNvbiB7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3VpLWljb25zX2NkMGEwYV8yNTZ4MjQwLnBuZyk7Cn0KCi8qIHBvc2l0aW9uaW5nICovCi51aS1pY29uLWJsYW5rIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMTZweCAxNnB4OyB9Ci51aS1pY29uLWNhcmF0LTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsgfQoudWktaWNvbi1jYXJhdC0xLW5lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggMDsgfQoudWktaWNvbi1jYXJhdC0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAwOyB9Ci51aS1pY29uLWNhcmF0LTEtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAwOyB9Ci51aS1pY29uLWNhcmF0LTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IDA7IH0KLnVpLWljb24tY2FyYXQtMS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IDA7IH0KLnVpLWljb24tY2FyYXQtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggMDsgfQoudWktaWNvbi1jYXJhdC0xLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IDA7IH0KLnVpLWljb24tY2FyYXQtMi1uLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggMDsgfQoudWktaWNvbi1jYXJhdC0yLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAwOyB9Ci51aS1pY29uLXRyaWFuZ2xlLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE2cHg7IH0KLnVpLWljb24tdHJpYW5nbGUtMS1uZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNnB4OyB9Ci51aS1pY29uLXRyaWFuZ2xlLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNnB4OyB9Ci51aS1pY29uLXRyaWFuZ2xlLTEtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTZweDsgfQoudWktaWNvbi10cmlhbmdsZS0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTZweDsgfQoudWktaWNvbi10cmlhbmdsZS0xLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE2cHg7IH0KLnVpLWljb24tdHJpYW5nbGUtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE2cHg7IH0KLnVpLWljb24tdHJpYW5nbGUtMS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTZweDsgfQoudWktaWNvbi10cmlhbmdsZS0yLW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTZweDsgfQoudWktaWNvbi10cmlhbmdsZS0yLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTZweDsgfQoudWktaWNvbi1hcnJvdy0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0zMnB4OyB9Ci51aS1pY29uLWFycm93LTEtbmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMzJweDsgfQoudWktaWNvbi1hcnJvdy0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMzJweDsgfQoudWktaWNvbi1hcnJvdy0xLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTMycHg7IH0KLnVpLWljb24tYXJyb3ctMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTMycHg7IH0KLnVpLWljb24tYXJyb3ctMS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0zMnB4OyB9Ci51aS1pY29uLWFycm93LTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0zMnB4OyB9Ci51aS1pY29uLWFycm93LTEtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTMycHg7IH0KLnVpLWljb24tYXJyb3ctMi1uLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTMycHg7IH0KLnVpLWljb24tYXJyb3ctMi1uZS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMzJweDsgfQoudWktaWNvbi1hcnJvdy0yLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMzJweDsgfQoudWktaWNvbi1hcnJvdy0yLXNlLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0zMnB4OyB9Ci51aS1pY29uLWFycm93c3RvcC0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTMycHg7IH0KLnVpLWljb24tYXJyb3dzdG9wLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMzJweDsgfQoudWktaWNvbi1hcnJvd3N0b3AtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0zMnB4OyB9Ci51aS1pY29uLWFycm93c3RvcC0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTMycHg7IH0KLnVpLWljb24tYXJyb3d0aGljay0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00OHB4OyB9Ci51aS1pY29uLWFycm93dGhpY2stMS1uZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC00OHB4OyB9Ci51aS1pY29uLWFycm93dGhpY2stMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTQ4cHg7IH0KLnVpLWljb24tYXJyb3d0aGljay0xLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTQ4cHg7IH0KLnVpLWljb24tYXJyb3d0aGljay0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtNDhweDsgfQoudWktaWNvbi1hcnJvd3RoaWNrLTEtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtNDhweDsgfQoudWktaWNvbi1hcnJvd3RoaWNrLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC00OHB4OyB9Ci51aS1pY29uLWFycm93dGhpY2stMS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtNDhweDsgfQoudWktaWNvbi1hcnJvd3RoaWNrLTItbi1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC00OHB4OyB9Ci51aS1pY29uLWFycm93dGhpY2stMi1uZS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtNDhweDsgfQoudWktaWNvbi1hcnJvd3RoaWNrLTItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC00OHB4OyB9Ci51aS1pY29uLWFycm93dGhpY2stMi1zZS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtNDhweDsgfQoudWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTQ4cHg7IH0KLnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC00OHB4OyB9Ci51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtNDhweDsgfQoudWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTQ4cHg7IH0KLnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC02NHB4OyB9Ci51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTY0cHg7IH0KLnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtNjRweDsgfQoudWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC02NHB4OyB9Ci51aS1pY29uLWFycm93cmV0dXJuLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC02NHB4OyB9Ci51aS1pY29uLWFycm93cmV0dXJuLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC02NHB4OyB9Ci51aS1pY29uLWFycm93cmV0dXJuLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC02NHB4OyB9Ci51aS1pY29uLWFycm93cmV0dXJuLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtNjRweDsgfQoudWktaWNvbi1hcnJvd3JlZnJlc2gtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC02NHB4OyB9Ci51aS1pY29uLWFycm93cmVmcmVzaC0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTY0cHg7IH0KLnVpLWljb24tYXJyb3dyZWZyZXNoLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtNjRweDsgfQoudWktaWNvbi1hcnJvd3JlZnJlc2gtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC02NHB4OyB9Ci51aS1pY29uLWFycm93LTQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC04MHB4OyB9Ci51aS1pY29uLWFycm93LTQtZGlhZyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC04MHB4OyB9Ci51aS1pY29uLWV4dGxpbmsgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtODBweDsgfQoudWktaWNvbi1uZXd3aW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtODBweDsgfQoudWktaWNvbi1yZWZyZXNoIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTgwcHg7IH0KLnVpLWljb24tc2h1ZmZsZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC04MHB4OyB9Ci51aS1pY29uLXRyYW5zZmVyLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC04MHB4OyB9Ci51aS1pY29uLXRyYW5zZmVydGhpY2stZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC04MHB4OyB9Ci51aS1pY29uLWZvbGRlci1jb2xsYXBzZWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05NnB4OyB9Ci51aS1pY29uLWZvbGRlci1vcGVuIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTk2cHg7IH0KLnVpLWljb24tZG9jdW1lbnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtOTZweDsgfQoudWktaWNvbi1kb2N1bWVudC1iIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTk2cHg7IH0KLnVpLWljb24tbm90ZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC05NnB4OyB9Ci51aS1pY29uLW1haWwtY2xvc2VkIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTk2cHg7IH0KLnVpLWljb24tbWFpbC1vcGVuIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTk2cHg7IH0KLnVpLWljb24tc3VpdGNhc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTk2cHg7IH0KLnVpLWljb24tY29tbWVudCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtOTZweDsgfQoudWktaWNvbi1wZXJzb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTk2cHg7IH0KLnVpLWljb24tcHJpbnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTk2cHg7IH0KLnVpLWljb24tdHJhc2ggeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTk2cHg7IH0KLnVpLWljb24tbG9ja2VkIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC05NnB4OyB9Ci51aS1pY29uLXVubG9ja2VkIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC05NnB4OyB9Ci51aS1pY29uLWJvb2ttYXJrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC05NnB4OyB9Ci51aS1pY29uLXRhZyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtOTZweDsgfQoudWktaWNvbi1ob21lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTEycHg7IH0KLnVpLWljb24tZmxhZyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xMTJweDsgfQoudWktaWNvbi1jYWxlbmRhciB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xMTJweDsgfQoudWktaWNvbi1jYXJ0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTExMnB4OyB9Ci51aS1pY29uLXBlbmNpbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xMTJweDsgfQoudWktaWNvbi1jbG9jayB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xMTJweDsgfQoudWktaWNvbi1kaXNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTExMnB4OyB9Ci51aS1pY29uLWNhbGN1bGF0b3IgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTExMnB4OyB9Ci51aS1pY29uLXpvb21pbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTEycHg7IH0KLnVpLWljb24tem9vbW91dCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTEycHg7IH0KLnVpLWljb24tc2VhcmNoIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xMTJweDsgfQoudWktaWNvbi13cmVuY2ggeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTExMnB4OyB9Ci51aS1pY29uLWdlYXIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTExMnB4OyB9Ci51aS1pY29uLWhlYXJ0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xMTJweDsgfQoudWktaWNvbi1zdGFyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xMTJweDsgfQoudWktaWNvbi1saW5rIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC0xMTJweDsgfQoudWktaWNvbi1jYW5jZWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMjhweDsgfQoudWktaWNvbi1wbHVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTEyOHB4OyB9Ci51aS1pY29uLXBsdXN0aGljayB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xMjhweDsgfQoudWktaWNvbi1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xMjhweDsgfQoudWktaWNvbi1taW51c3RoaWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTEyOHB4OyB9Ci51aS1pY29uLWNsb3NlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTEyOHB4OyB9Ci51aS1pY29uLWNsb3NldGhpY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTI4cHg7IH0KLnVpLWljb24ta2V5IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xMjhweDsgfQoudWktaWNvbi1saWdodGJ1bGIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTEyOHB4OyB9Ci51aS1pY29uLXNjaXNzb3JzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xMjhweDsgfQoudWktaWNvbi1jbGlwYm9hcmQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTEyOHB4OyB9Ci51aS1pY29uLWNvcHkgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTEyOHB4OyB9Ci51aS1pY29uLWNvbnRhY3QgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTEyOHB4OyB9Ci51aS1pY29uLWltYWdlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xMjhweDsgfQoudWktaWNvbi12aWRlbyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTI4cHg7IH0KLnVpLWljb24tc2NyaXB0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC0xMjhweDsgfQoudWktaWNvbi1hbGVydCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE0NHB4OyB9Ci51aS1pY29uLWluZm8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTQ0cHg7IH0KLnVpLWljb24tbm90aWNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE0NHB4OyB9Ci51aS1pY29uLWhlbHAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTQ0cHg7IH0KLnVpLWljb24tY2hlY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTQ0cHg7IH0KLnVpLWljb24tYnVsbGV0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE0NHB4OyB9Ci51aS1pY29uLXJhZGlvLW9uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE0NHB4OyB9Ci51aS1pY29uLXJhZGlvLW9mZiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTQ0cHg7IH0KLnVpLWljb24tcGluLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE0NHB4OyB9Ci51aS1pY29uLXBpbi1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNDRweDsgfQoudWktaWNvbi1wbGF5IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTYwcHg7IH0KLnVpLWljb24tcGF1c2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTYwcHg7IH0KLnVpLWljb24tc2Vlay1uZXh0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE2MHB4OyB9Ci51aS1pY29uLXNlZWstcHJldiB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNjBweDsgfQoudWktaWNvbi1zZWVrLWVuZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNjBweDsgfQoudWktaWNvbi1zZWVrLXN0YXJ0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE2MHB4OyB9Ci8qIHVpLWljb24tc2Vlay1maXJzdCBpcyBkZXByZWNhdGVkLCB1c2UgdWktaWNvbi1zZWVrLXN0YXJ0IGluc3RlYWQgKi8KLnVpLWljb24tc2Vlay1maXJzdCB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNjBweDsgfQoudWktaWNvbi1zdG9wIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE2MHB4OyB9Ci51aS1pY29uLWVqZWN0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNjBweDsgfQoudWktaWNvbi12b2x1bWUtb2ZmIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNjBweDsgfQoudWktaWNvbi12b2x1bWUtb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE2MHB4OyB9Ci51aS1pY29uLXBvd2VyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTc2cHg7IH0KLnVpLWljb24tc2lnbmFsLWRpYWcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTc2cHg7IH0KLnVpLWljb24tc2lnbmFsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE3NnB4OyB9Ci51aS1pY29uLWJhdHRlcnktMCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNzZweDsgfQoudWktaWNvbi1iYXR0ZXJ5LTEgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTc2cHg7IH0KLnVpLWljb24tYmF0dGVyeS0yIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE3NnB4OyB9Ci51aS1pY29uLWJhdHRlcnktMyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xNzZweDsgfQoudWktaWNvbi1jaXJjbGUtcGx1cyB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE5MnB4OyB9Ci51aS1pY29uLWNpcmNsZS1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xOTJweDsgfQoudWktaWNvbi1jaXJjbGUtY2xvc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTkycHg7IH0KLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTkycHg7IH0KLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTkycHg7IH0KLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTkycHg7IH0KLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTkycHg7IH0KLnVpLWljb24tY2lyY2xlLWFycm93LWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE5MnB4OyB9Ci51aS1pY29uLWNpcmNsZS1hcnJvdy1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xOTJweDsgfQoudWktaWNvbi1jaXJjbGUtYXJyb3ctdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTkycHg7IH0KLnVpLWljb24tY2lyY2xlLWFycm93LW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTE5MnB4OyB9Ci51aS1pY29uLWNpcmNsZS16b29taW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTE5MnB4OyB9Ci51aS1pY29uLWNpcmNsZS16b29tb3V0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xOTJweDsgfQoudWktaWNvbi1jaXJjbGUtY2hlY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTE5MnB4OyB9Ci51aS1pY29uLWNpcmNsZXNtYWxsLXBsdXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMDhweDsgfQoudWktaWNvbi1jaXJjbGVzbWFsbC1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0yMDhweDsgfQoudWktaWNvbi1jaXJjbGVzbWFsbC1jbG9zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0yMDhweDsgfQoudWktaWNvbi1zcXVhcmVzbWFsbC1wbHVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTIwOHB4OyB9Ci51aS1pY29uLXNxdWFyZXNtYWxsLW1pbnVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTIwOHB4OyB9Ci51aS1pY29uLXNxdWFyZXNtYWxsLWNsb3NlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTIwOHB4OyB9Ci51aS1pY29uLWdyaXAtZG90dGVkLXZlcnRpY2FsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjI0cHg7IH0KLnVpLWljb24tZ3JpcC1kb3R0ZWQtaG9yaXpvbnRhbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0yMjRweDsgfQoudWktaWNvbi1ncmlwLXNvbGlkLXZlcnRpY2FsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTIyNHB4OyB9Ci51aS1pY29uLWdyaXAtc29saWQtaG9yaXpvbnRhbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0yMjRweDsgfQoudWktaWNvbi1ncmlwc21hbGwtZGlhZ29uYWwtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMjI0cHg7IH0KLnVpLWljb24tZ3JpcC1kaWFnb25hbC1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0yMjRweDsgfQoKCi8qIE1pc2MgdmlzdWFscwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCi8qIENvcm5lciByYWRpdXMgKi8KLnVpLWNvcm5lci1hbGwsCi51aS1jb3JuZXItdG9wLAoudWktY29ybmVyLWxlZnQsCi51aS1jb3JuZXItdGwgewoJYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNXB4Owp9Ci51aS1jb3JuZXItYWxsLAoudWktY29ybmVyLXRvcCwKLnVpLWNvcm5lci1yaWdodCwKLnVpLWNvcm5lci10ciB7Cglib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNXB4Owp9Ci51aS1jb3JuZXItYWxsLAoudWktY29ybmVyLWJvdHRvbSwKLnVpLWNvcm5lci1sZWZ0LAoudWktY29ybmVyLWJsIHsKCWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDVweDsKfQoudWktY29ybmVyLWFsbCwKLnVpLWNvcm5lci1ib3R0b20sCi51aS1jb3JuZXItcmlnaHQsCi51aS1jb3JuZXItYnIgewoJYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDVweDsKfQoKLyogT3ZlcmxheXMgKi8KLnVpLXdpZGdldC1vdmVybGF5IHsKCWJhY2tncm91bmQ6ICNhYWFhYWEgdXJsKGltYWdlcy91aS1iZ19mbGF0XzBfYWFhYWFhXzQweDEwMC5wbmcpIDUwJSA1MCUgcmVwZWF0LXg7CglvcGFjaXR5OiAuMzsKCWZpbHRlcjogQWxwaGEoT3BhY2l0eT0zMCk7Cn0KLnVpLXdpZGdldC1zaGFkb3cgewoJbWFyZ2luOiAtOHB4IDAgMCAtOHB4OwoJcGFkZGluZzogOHB4OwoJYmFja2dyb3VuZDogI2FhYWFhYSB1cmwoaW1hZ2VzL3VpLWJnX2ZsYXRfMF9hYWFhYWFfNDB4MTAwLnBuZykgNTAlIDUwJSByZXBlYXQteDsKCW9wYWNpdHk6IC4zOwoJZmlsdGVyOiBBbHBoYShPcGFjaXR5PTMwKTsKCWJvcmRlci1yYWRpdXM6IDhweDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/css/redmond/jquery-ui-1.10.3.custom.min.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGpRdWVyeSBVSSAtIHYxLjEwLjMgLSAyMDEzLTA4LTA1CiogaHR0cDovL2pxdWVyeXVpLmNvbQoqIEluY2x1ZGVzOiBqcXVlcnkudWkuY29yZS5jc3MsIGpxdWVyeS51aS5kYXRlcGlja2VyLmNzcwoqIFRvIHZpZXcgYW5kIG1vZGlmeSB0aGlzIHRoZW1lLCB2aXNpdCBodHRwOi8vanF1ZXJ5dWkuY29tL3RoZW1lcm9sbGVyLz9mZkRlZmF1bHQ9THVjaWRhJTIwR3JhbmRlJTJDTHVjaWRhJTIwU2FucyUyQ0FyaWFsJTJDc2Fucy1zZXJpZiZmd0RlZmF1bHQ9Ym9sZCZmc0RlZmF1bHQ9MS4xZW0mY29ybmVyUmFkaXVzPTVweCZiZ0NvbG9ySGVhZGVyPTVjOWNjYyZiZ1RleHR1cmVIZWFkZXI9Z2xvc3Nfd2F2ZSZiZ0ltZ09wYWNpdHlIZWFkZXI9NTUmYm9yZGVyQ29sb3JIZWFkZXI9NDI5N2Q3JmZjSGVhZGVyPWZmZmZmZiZpY29uQ29sb3JIZWFkZXI9ZDhlN2YzJmJnQ29sb3JDb250ZW50PWZjZmRmZCZiZ1RleHR1cmVDb250ZW50PWluc2V0X2hhcmQmYmdJbWdPcGFjaXR5Q29udGVudD0xMDAmYm9yZGVyQ29sb3JDb250ZW50PWE2YzllMiZmY0NvbnRlbnQ9MjIyMjIyJmljb25Db2xvckNvbnRlbnQ9NDY5YmRkJmJnQ29sb3JEZWZhdWx0PWRmZWZmYyZiZ1RleHR1cmVEZWZhdWx0PWdsYXNzJmJnSW1nT3BhY2l0eURlZmF1bHQ9ODUmYm9yZGVyQ29sb3JEZWZhdWx0PWM1ZGJlYyZmY0RlZmF1bHQ9MmU2ZTllJmljb25Db2xvckRlZmF1bHQ9NmRhOGQ1JmJnQ29sb3JIb3Zlcj1kMGU1ZjUmYmdUZXh0dXJlSG92ZXI9Z2xhc3MmYmdJbWdPcGFjaXR5SG92ZXI9NzUmYm9yZGVyQ29sb3JIb3Zlcj03OWI3ZTcmZmNIb3Zlcj0xZDU5ODcmaWNvbkNvbG9ySG92ZXI9MjE3YmMwJmJnQ29sb3JBY3RpdmU9ZjVmOGY5JmJnVGV4dHVyZUFjdGl2ZT1pbnNldF9oYXJkJmJnSW1nT3BhY2l0eUFjdGl2ZT0xMDAmYm9yZGVyQ29sb3JBY3RpdmU9NzliN2U3JmZjQWN0aXZlPWUxNzAwOSZpY29uQ29sb3JBY3RpdmU9ZjliZDAxJmJnQ29sb3JIaWdobGlnaHQ9ZmJlYzg4JmJnVGV4dHVyZUhpZ2hsaWdodD1mbGF0JmJnSW1nT3BhY2l0eUhpZ2hsaWdodD01NSZib3JkZXJDb2xvckhpZ2hsaWdodD1mYWQ0MmUmZmNIaWdobGlnaHQ9MzYzNjM2Jmljb25Db2xvckhpZ2hsaWdodD0yZTgzZmYmYmdDb2xvckVycm9yPWZlZjFlYyZiZ1RleHR1cmVFcnJvcj1nbGFzcyZiZ0ltZ09wYWNpdHlFcnJvcj05NSZib3JkZXJDb2xvckVycm9yPWNkMGEwYSZmY0Vycm9yPWNkMGEwYSZpY29uQ29sb3JFcnJvcj1jZDBhMGEmYmdDb2xvck92ZXJsYXk9YWFhYWFhJmJnVGV4dHVyZU92ZXJsYXk9ZmxhdCZiZ0ltZ09wYWNpdHlPdmVybGF5PTAmb3BhY2l0eU92ZXJsYXk9MzAmYmdDb2xvclNoYWRvdz1hYWFhYWEmYmdUZXh0dXJlU2hhZG93PWZsYXQmYmdJbWdPcGFjaXR5U2hhZG93PTAmb3BhY2l0eVNoYWRvdz0zMCZ0aGlja25lc3NTaGFkb3c9OHB4Jm9mZnNldFRvcFNoYWRvdz0tOHB4Jm9mZnNldExlZnRTaGFkb3c9LThweCZjb3JuZXJSYWRpdXNTaGFkb3c9OHB4CiogQ29weXJpZ2h0IDIwMTMgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyBMaWNlbnNlZCBNSVQgKi8udWktaGVscGVyLWhpZGRlbntkaXNwbGF5Om5vbmV9LnVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZXtib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweH0udWktaGVscGVyLXJlc2V0e21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtvdXRsaW5lOjA7bGluZS1oZWlnaHQ6MS4zO3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZToxMDAlO2xpc3Qtc3R5bGU6bm9uZX0udWktaGVscGVyLWNsZWFyZml4OmJlZm9yZSwudWktaGVscGVyLWNsZWFyZml4OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTp0YWJsZTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9LnVpLWhlbHBlci1jbGVhcmZpeDphZnRlcntjbGVhcjpib3RofS51aS1oZWxwZXItY2xlYXJmaXh7bWluLWhlaWdodDowfS51aS1oZWxwZXItemZpeHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RvcDowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5OjA7ZmlsdGVyOkFscGhhKE9wYWNpdHk9MCl9LnVpLWZyb250e3otaW5kZXg6MTAwfS51aS1zdGF0ZS1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdCFpbXBvcnRhbnR9LnVpLWljb257ZGlzcGxheTpibG9jazt0ZXh0LWluZGVudDotOTk5OTlweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fS51aS13aWRnZXQtb3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0udWktZGF0ZXBpY2tlcnt3aWR0aDoxN2VtO3BhZGRpbmc6LjJlbSAuMmVtIDA7ZGlzcGxheTpub25lfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWhlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOi4yZW0gMH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LC51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjJweDt3aWR0aDoxLjhlbTtoZWlnaHQ6MS44ZW19LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciwudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0LWhvdmVye3RvcDoxcHh9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldntsZWZ0OjJweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0e3JpZ2h0OjJweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LWhvdmVye2xlZnQ6MXB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQtaG92ZXJ7cmlnaHQ6MXB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYgc3BhbiwudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0IHNwYW57ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjUwJTttYXJnaW4tbGVmdDotOHB4O3RvcDo1MCU7bWFyZ2luLXRvcDotOHB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxle21hcmdpbjowIDIuM2VtO2xpbmUtaGVpZ2h0OjEuOGVtO3RleHQtYWxpZ246Y2VudGVyfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxlIHNlbGVjdHtmb250LXNpemU6MWVtO21hcmdpbjoxcHggMH0udWktZGF0ZXBpY2tlciBzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aC15ZWFye3dpZHRoOjEwMCV9LnVpLWRhdGVwaWNrZXIgc2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsLnVpLWRhdGVwaWNrZXIgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhcnt3aWR0aDo0OSV9LnVpLWRhdGVwaWNrZXIgdGFibGV7d2lkdGg6MTAwJTtmb250LXNpemU6LjllbTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7bWFyZ2luOjAgMCAuNGVtfS51aS1kYXRlcGlja2VyIHRoe3BhZGRpbmc6LjdlbSAuM2VtO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtd2VpZ2h0OjcwMDtib3JkZXI6MH0udWktZGF0ZXBpY2tlciB0ZHtib3JkZXI6MDtwYWRkaW5nOjFweH0udWktZGF0ZXBpY2tlciB0ZCBzcGFuLC51aS1kYXRlcGlja2VyIHRkIGF7ZGlzcGxheTpibG9jaztwYWRkaW5nOi4yZW07dGV4dC1hbGlnbjpyaWdodDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5le2JhY2tncm91bmQtaW1hZ2U6bm9uZTttYXJnaW46LjdlbSAwIDA7cGFkZGluZzowIC4yZW07Ym9yZGVyLWxlZnQ6MDtib3JkZXItcmlnaHQ6MDtib3JkZXItYm90dG9tOjB9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b257ZmxvYXQ6cmlnaHQ7bWFyZ2luOi41ZW0gLjJlbSAuNGVtO2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6LjJlbSAuNmVtIC4zZW07d2lkdGg6YXV0bztvdmVyZmxvdzp2aXNpYmxlfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uLnVpLWRhdGVwaWNrZXItY3VycmVudHtmbG9hdDpsZWZ0fS51aS1kYXRlcGlja2VyLnVpLWRhdGVwaWNrZXItbXVsdGl7d2lkdGg6YXV0b30udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cHtmbG9hdDpsZWZ0fS51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwIHRhYmxle3dpZHRoOjk1JTttYXJnaW46MCBhdXRvIC40ZW19LnVpLWRhdGVwaWNrZXItbXVsdGktMiAudWktZGF0ZXBpY2tlci1ncm91cHt3aWR0aDo1MCV9LnVpLWRhdGVwaWNrZXItbXVsdGktMyAudWktZGF0ZXBpY2tlci1ncm91cHt3aWR0aDozMy4zJX0udWktZGF0ZXBpY2tlci1tdWx0aS00IC51aS1kYXRlcGlja2VyLWdyb3Vwe3dpZHRoOjI1JX0udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cC1sYXN0IC51aS1kYXRlcGlja2VyLWhlYWRlciwudWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGUgLnVpLWRhdGVwaWNrZXItaGVhZGVye2JvcmRlci1sZWZ0LXdpZHRoOjB9LnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZXtjbGVhcjpsZWZ0fS51aS1kYXRlcGlja2VyLXJvdy1icmVha3tjbGVhcjpib3RoO3dpZHRoOjEwMCU7Zm9udC1zaXplOjB9LnVpLWRhdGVwaWNrZXItcnRse2RpcmVjdGlvbjpydGx9LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLXByZXZ7cmlnaHQ6MnB4O2xlZnQ6YXV0b30udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItbmV4dHtsZWZ0OjJweDtyaWdodDphdXRvfS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1wcmV2OmhvdmVye3JpZ2h0OjFweDtsZWZ0OmF1dG99LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLW5leHQ6aG92ZXJ7bGVmdDoxcHg7cmlnaHQ6YXV0b30udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZXtjbGVhcjpyaWdodH0udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b257ZmxvYXQ6bGVmdH0udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24udWktZGF0ZXBpY2tlci1jdXJyZW50LC51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cHtmbG9hdDpyaWdodH0udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdCAudWktZGF0ZXBpY2tlci1oZWFkZXIsLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSAudWktZGF0ZXBpY2tlci1oZWFkZXJ7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MXB4fS51aS13aWRnZXR7Zm9udC1mYW1pbHk6THVjaWRhIEdyYW5kZSxMdWNpZGEgU2FucyxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxLjFlbX0udWktd2lkZ2V0IC51aS13aWRnZXR7Zm9udC1zaXplOjFlbX0udWktd2lkZ2V0IGlucHV0LC51aS13aWRnZXQgc2VsZWN0LC51aS13aWRnZXQgdGV4dGFyZWEsLnVpLXdpZGdldCBidXR0b257Zm9udC1mYW1pbHk6THVjaWRhIEdyYW5kZSxMdWNpZGEgU2FucyxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxZW19LnVpLXdpZGdldC1jb250ZW50e2JvcmRlcjoxcHggc29saWQgI2E2YzllMjtiYWNrZ3JvdW5kOiNmY2ZkZmQgdXJsKGltYWdlcy91aS1iZ19pbnNldC1oYXJkXzEwMF9mY2ZkZmRfMXgxMDAucG5nKSA1MCUgYm90dG9tIHJlcGVhdC14O2NvbG9yOiMyMjJ9LnVpLXdpZGdldC1jb250ZW50IGF7Y29sb3I6IzIyMn0udWktd2lkZ2V0LWhlYWRlcntib3JkZXI6MXB4IHNvbGlkICM0Mjk3ZDc7YmFja2dyb3VuZDojNWM5Y2NjIHVybChpbWFnZXMvdWktYmdfZ2xvc3Mtd2F2ZV81NV81YzljY2NfNTAweDEwMC5wbmcpIDUwJSA1MCUgcmVwZWF0LXg7Y29sb3I6I2ZmZjtmb250LXdlaWdodDpib2xkfS51aS13aWRnZXQtaGVhZGVyIGF7Y29sb3I6I2ZmZn0udWktc3RhdGUtZGVmYXVsdCwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWRlZmF1bHQsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRlZmF1bHR7Ym9yZGVyOjFweCBzb2xpZCAjYzVkYmVjO2JhY2tncm91bmQ6I2RmZWZmYyB1cmwoaW1hZ2VzL3VpLWJnX2dsYXNzXzg1X2RmZWZmY18xeDQwMC5wbmcpIDUwJSA1MCUgcmVwZWF0LXg7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojMmU2ZTllfS51aS1zdGF0ZS1kZWZhdWx0IGEsLnVpLXN0YXRlLWRlZmF1bHQgYTpsaW5rLC51aS1zdGF0ZS1kZWZhdWx0IGE6dmlzaXRlZHtjb2xvcjojMmU2ZTllO3RleHQtZGVjb3JhdGlvbjpub25lfS51aS1zdGF0ZS1ob3ZlciwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhvdmVyLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1ob3ZlciwudWktc3RhdGUtZm9jdXMsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1mb2N1cywudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZm9jdXN7Ym9yZGVyOjFweCBzb2xpZCAjNzliN2U3O2JhY2tncm91bmQ6I2QwZTVmNSB1cmwoaW1hZ2VzL3VpLWJnX2dsYXNzXzc1X2QwZTVmNV8xeDQwMC5wbmcpIDUwJSA1MCUgcmVwZWF0LXg7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojMWQ1OTg3fS51aS1zdGF0ZS1ob3ZlciBhLC51aS1zdGF0ZS1ob3ZlciBhOmhvdmVyLC51aS1zdGF0ZS1ob3ZlciBhOmxpbmssLnVpLXN0YXRlLWhvdmVyIGE6dmlzaXRlZHtjb2xvcjojMWQ1OTg3O3RleHQtZGVjb3JhdGlvbjpub25lfS51aS1zdGF0ZS1hY3RpdmUsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1hY3RpdmUsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWFjdGl2ZXtib3JkZXI6MXB4IHNvbGlkICM3OWI3ZTc7YmFja2dyb3VuZDojZjVmOGY5IHVybChpbWFnZXMvdWktYmdfaW5zZXQtaGFyZF8xMDBfZjVmOGY5XzF4MTAwLnBuZykgNTAlIDUwJSByZXBlYXQteDtmb250LXdlaWdodDpib2xkO2NvbG9yOiNlMTcwMDl9LnVpLXN0YXRlLWFjdGl2ZSBhLC51aS1zdGF0ZS1hY3RpdmUgYTpsaW5rLC51aS1zdGF0ZS1hY3RpdmUgYTp2aXNpdGVke2NvbG9yOiNlMTcwMDk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVpLXN0YXRlLWhpZ2hsaWdodCwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhpZ2hsaWdodCwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaGlnaGxpZ2h0e2JvcmRlcjoxcHggc29saWQgI2ZhZDQyZTtiYWNrZ3JvdW5kOiNmYmVjODggdXJsKGltYWdlcy91aS1iZ19mbGF0XzU1X2ZiZWM4OF80MHgxMDAucG5nKSA1MCUgNTAlIHJlcGVhdC14O2NvbG9yOiMzNjM2MzZ9LnVpLXN0YXRlLWhpZ2hsaWdodCBhLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaGlnaGxpZ2h0IGEsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodCBhe2NvbG9yOiMzNjM2MzZ9LnVpLXN0YXRlLWVycm9yLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3IsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9ye2JvcmRlcjoxcHggc29saWQgI2NkMGEwYTtiYWNrZ3JvdW5kOiNmZWYxZWMgdXJsKGltYWdlcy91aS1iZ19nbGFzc185NV9mZWYxZWNfMXg0MDAucG5nKSA1MCUgNTAlIHJlcGVhdC14O2NvbG9yOiNjZDBhMGF9LnVpLXN0YXRlLWVycm9yIGEsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvciBhLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvciBhe2NvbG9yOiNjZDBhMGF9LnVpLXN0YXRlLWVycm9yLXRleHQsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvci10ZXh0LC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvci10ZXh0e2NvbG9yOiNjZDBhMGF9LnVpLXByaW9yaXR5LXByaW1hcnksLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1wcmltYXJ5LC51aS13aWRnZXQtaGVhZGVyIC51aS1wcmlvcml0eS1wcmltYXJ5e2ZvbnQtd2VpZ2h0OmJvbGR9LnVpLXByaW9yaXR5LXNlY29uZGFyeSwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXByaW9yaXR5LXNlY29uZGFyeSwudWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktc2Vjb25kYXJ5e29wYWNpdHk6Ljc7ZmlsdGVyOkFscGhhKE9wYWNpdHk9NzApO2ZvbnQtd2VpZ2h0Om5vcm1hbH0udWktc3RhdGUtZGlzYWJsZWQsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kaXNhYmxlZCwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZGlzYWJsZWR7b3BhY2l0eTouMzU7ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzUpO2JhY2tncm91bmQtaW1hZ2U6bm9uZX0udWktc3RhdGUtZGlzYWJsZWQgLnVpLWljb257ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzUpfS51aS1pY29ue3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHh9LnVpLWljb24sLnVpLXdpZGdldC1jb250ZW50IC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy91aS1pY29uc180NjliZGRfMjU2eDI0MC5wbmcpfS51aS13aWRnZXQtaGVhZGVyIC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy91aS1pY29uc19kOGU3ZjNfMjU2eDI0MC5wbmcpfS51aS1zdGF0ZS1kZWZhdWx0IC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy91aS1pY29uc182ZGE4ZDVfMjU2eDI0MC5wbmcpfS51aS1zdGF0ZS1ob3ZlciAudWktaWNvbiwudWktc3RhdGUtZm9jdXMgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3VpLWljb25zXzIxN2JjMF8yNTZ4MjQwLnBuZyl9LnVpLXN0YXRlLWFjdGl2ZSAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdWktaWNvbnNfZjliZDAxXzI1NngyNDAucG5nKX0udWktc3RhdGUtaGlnaGxpZ2h0IC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy91aS1pY29uc18yZTgzZmZfMjU2eDI0MC5wbmcpfS51aS1zdGF0ZS1lcnJvciAudWktaWNvbiwudWktc3RhdGUtZXJyb3ItdGV4dCAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdWktaWNvbnNfY2QwYTBhXzI1NngyNDAucG5nKX0udWktaWNvbi1ibGFua3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjE2cHggMTZweH0udWktaWNvbi1jYXJhdC0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9LnVpLWljb24tY2FyYXQtMS1uZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IDB9LnVpLWljb24tY2FyYXQtMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggMH0udWktaWNvbi1jYXJhdC0xLXNle2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggMH0udWktaWNvbi1jYXJhdC0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAwfS51aS1pY29uLWNhcmF0LTEtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAwfS51aS1pY29uLWNhcmF0LTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IDB9LnVpLWljb24tY2FyYXQtMS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAwfS51aS1pY29uLWNhcmF0LTItbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IDB9LnVpLWljb24tY2FyYXQtMi1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggMH0udWktaWNvbi10cmlhbmdsZS0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtbmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLXNle2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMi1uLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMi1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTE2cHh9LnVpLWljb24tYXJyb3ctMS1ue2JhY2tncm91bmQtcG9zaXRpb246MCAtMzJweH0udWktaWNvbi1hcnJvdy0xLW5le2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLW53e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0zMnB4fS51aS1pY29uLWFycm93LTItbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0zMnB4fS51aS1pY29uLWFycm93LTItbmUtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTMycHh9LnVpLWljb24tYXJyb3ctMi1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTMycHh9LnVpLWljb24tYXJyb3ctMi1zZS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtMzJweH0udWktaWNvbi1hcnJvd3N0b3AtMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0zMnB4fS51aS1pY29uLWFycm93c3RvcC0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMjA4cHggLTMycHh9LnVpLWljb24tYXJyb3dzdG9wLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtMzJweH0udWktaWNvbi1hcnJvd3N0b3AtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC0zMnB4fS51aS1pY29uLWFycm93dGhpY2stMS1ue2JhY2tncm91bmQtcG9zaXRpb246MCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtbmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLXN3e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0yLW4tc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTItbmUtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0yLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTItc2Utbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMjI0cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC00OHB4fS51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS13e2JhY2tncm91bmQtcG9zaXRpb246MCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTY0cHh9LnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybi0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybi0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybi0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybi0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTY0cHh9LnVpLWljb24tYXJyb3dyZWZyZXNoLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtNjRweH0udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC02NHB4fS51aS1pY29uLWFycm93cmVmcmVzaC0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTY0cHh9LnVpLWljb24tYXJyb3dyZWZyZXNoLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtNjRweH0udWktaWNvbi1hcnJvdy00e2JhY2tncm91bmQtcG9zaXRpb246MCAtODBweH0udWktaWNvbi1hcnJvdy00LWRpYWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtODBweH0udWktaWNvbi1leHRsaW5re2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTgwcHh9LnVpLWljb24tbmV3d2lue2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTgwcHh9LnVpLWljb24tcmVmcmVzaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC04MHB4fS51aS1pY29uLXNodWZmbGV7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtODBweH0udWktaWNvbi10cmFuc2Zlci1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtODBweH0udWktaWNvbi10cmFuc2ZlcnRoaWNrLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtODBweH0udWktaWNvbi1mb2xkZXItY29sbGFwc2Vke2JhY2tncm91bmQtcG9zaXRpb246MCAtOTZweH0udWktaWNvbi1mb2xkZXItb3BlbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC05NnB4fS51aS1pY29uLWRvY3VtZW50e2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTk2cHh9LnVpLWljb24tZG9jdW1lbnQtYntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC05NnB4fS51aS1pY29uLW5vdGV7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtOTZweH0udWktaWNvbi1tYWlsLWNsb3NlZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC05NnB4fS51aS1pY29uLW1haWwtb3BlbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC05NnB4fS51aS1pY29uLXN1aXRjYXNle2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC05NnB4fS51aS1pY29uLWNvbW1lbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTk2cHh9LnVpLWljb24tcGVyc29ue2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC05NnB4fS51aS1pY29uLXByaW50e2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC05NnB4fS51aS1pY29uLXRyYXNoe2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC05NnB4fS51aS1pY29uLWxvY2tlZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtOTZweH0udWktaWNvbi11bmxvY2tlZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtOTZweH0udWktaWNvbi1ib29rbWFya3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtOTZweH0udWktaWNvbi10YWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTk2cHh9LnVpLWljb24taG9tZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTExMnB4fS51aS1pY29uLWZsYWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTEycHh9LnVpLWljb24tY2FsZW5kYXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTEycHh9LnVpLWljb24tY2FydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xMTJweH0udWktaWNvbi1wZW5jaWx7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTEycHh9LnVpLWljb24tY2xvY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTEycHh9LnVpLWljb24tZGlza3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xMTJweH0udWktaWNvbi1jYWxjdWxhdG9ye2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xMTJweH0udWktaWNvbi16b29taW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTExMnB4fS51aS1pY29uLXpvb21vdXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTExMnB4fS51aS1pY29uLXNlYXJjaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtMTEycHh9LnVpLWljb24td3JlbmNoe2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC0xMTJweH0udWktaWNvbi1nZWFye2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xMTJweH0udWktaWNvbi1oZWFydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtMTEycHh9LnVpLWljb24tc3RhcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtMTEycHh9LnVpLWljb24tbGlua3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMTEycHh9LnVpLWljb24tY2FuY2Vse2JhY2tncm91bmQtcG9zaXRpb246MCAtMTI4cHh9LnVpLWljb24tcGx1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xMjhweH0udWktaWNvbi1wbHVzdGhpY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTI4cHh9LnVpLWljb24tbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTI4cHh9LnVpLWljb24tbWludXN0aGlja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xMjhweH0udWktaWNvbi1jbG9zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xMjhweH0udWktaWNvbi1jbG9zZXRoaWNre2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTEyOHB4fS51aS1pY29uLWtleXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTI4cHh9LnVpLWljb24tbGlnaHRidWxie2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0xMjhweH0udWktaWNvbi1zY2lzc29yc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTI4cHh9LnVpLWljb24tY2xpcGJvYXJke2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC0xMjhweH0udWktaWNvbi1jb3B5e2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC0xMjhweH0udWktaWNvbi1jb250YWN0e2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xMjhweH0udWktaWNvbi1pbWFnZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtMTI4cHh9LnVpLWljb24tdmlkZW97YmFja2dyb3VuZC1wb3NpdGlvbjotMjI0cHggLTEyOHB4fS51aS1pY29uLXNjcmlwdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMTI4cHh9LnVpLWljb24tYWxlcnR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNDRweH0udWktaWNvbi1pbmZve2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE0NHB4fS51aS1pY29uLW5vdGljZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xNDRweH0udWktaWNvbi1oZWxwe2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE0NHB4fS51aS1pY29uLWNoZWNre2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE0NHB4fS51aS1pY29uLWJ1bGxldHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNDRweH0udWktaWNvbi1yYWRpby1vbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNDRweH0udWktaWNvbi1yYWRpby1vZmZ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTE0NHB4fS51aS1pY29uLXBpbi13e2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0xNDRweH0udWktaWNvbi1waW4tc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTQ0cHh9LnVpLWljb24tcGxheXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE2MHB4fS51aS1pY29uLXBhdXNle2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE2MHB4fS51aS1pY29uLXNlZWstbmV4dHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xNjBweH0udWktaWNvbi1zZWVrLXByZXZ7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTYwcHh9LnVpLWljb24tc2Vlay1lbmR7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTYwcHh9LnVpLWljb24tc2Vlay1zdGFydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNjBweH0udWktaWNvbi1zZWVrLWZpcnN0e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE2MHB4fS51aS1pY29uLXN0b3B7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTYwcHh9LnVpLWljb24tZWplY3R7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTE2MHB4fS51aS1pY29uLXZvbHVtZS1vZmZ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTE2MHB4fS51aS1pY29uLXZvbHVtZS1vbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTYwcHh9LnVpLWljb24tcG93ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNzZweH0udWktaWNvbi1zaWduYWwtZGlhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xNzZweH0udWktaWNvbi1zaWduYWx7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTc2cHh9LnVpLWljb24tYmF0dGVyeS0we2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE3NnB4fS51aS1pY29uLWJhdHRlcnktMXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xNzZweH0udWktaWNvbi1iYXR0ZXJ5LTJ7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTc2cHh9LnVpLWljb24tYmF0dGVyeS0ze2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE3NnB4fS51aS1pY29uLWNpcmNsZS1wbHVze2JhY2tncm91bmQtcG9zaXRpb246MCAtMTkycHh9LnVpLWljb24tY2lyY2xlLW1pbnVze2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1jbG9zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtYXJyb3ctZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWFycm93LXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1hcnJvdy13e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtYXJyb3ctbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLXpvb21pbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLXpvb21vdXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1jaGVja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtMTkycHh9LnVpLWljb24tY2lyY2xlc21hbGwtcGx1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTIwOHB4fS51aS1pY29uLWNpcmNsZXNtYWxsLW1pbnVze2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTIwOHB4fS51aS1pY29uLWNpcmNsZXNtYWxsLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTIwOHB4fS51aS1pY29uLXNxdWFyZXNtYWxsLXBsdXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMjA4cHh9LnVpLWljb24tc3F1YXJlc21hbGwtbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMjA4cHh9LnVpLWljb24tc3F1YXJlc21hbGwtY2xvc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMjA4cHh9LnVpLWljb24tZ3JpcC1kb3R0ZWQtdmVydGljYWx7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0yMjRweH0udWktaWNvbi1ncmlwLWRvdHRlZC1ob3Jpem9udGFse2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTIyNHB4fS51aS1pY29uLWdyaXAtc29saWQtdmVydGljYWx7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMjI0cHh9LnVpLWljb24tZ3JpcC1zb2xpZC1ob3Jpem9udGFse2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTIyNHB4fS51aS1pY29uLWdyaXBzbWFsbC1kaWFnb25hbC1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0yMjRweH0udWktaWNvbi1ncmlwLWRpYWdvbmFsLXNle2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTIyNHB4fS51aS1jb3JuZXItYWxsLC51aS1jb3JuZXItdG9wLC51aS1jb3JuZXItbGVmdCwudWktY29ybmVyLXRse2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NXB4fS51aS1jb3JuZXItYWxsLC51aS1jb3JuZXItdG9wLC51aS1jb3JuZXItcmlnaHQsLnVpLWNvcm5lci10cntib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo1cHh9LnVpLWNvcm5lci1hbGwsLnVpLWNvcm5lci1ib3R0b20sLnVpLWNvcm5lci1sZWZ0LC51aS1jb3JuZXItYmx7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo1cHh9LnVpLWNvcm5lci1hbGwsLnVpLWNvcm5lci1ib3R0b20sLnVpLWNvcm5lci1yaWdodCwudWktY29ybmVyLWJye2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjVweH0udWktd2lkZ2V0LW92ZXJsYXl7YmFja2dyb3VuZDojYWFhIHVybChpbWFnZXMvdWktYmdfZmxhdF8wX2FhYWFhYV80MHgxMDAucG5nKSA1MCUgNTAlIHJlcGVhdC14O29wYWNpdHk6LjM7ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzApfS51aS13aWRnZXQtc2hhZG93e21hcmdpbjotOHB4IDAgMCAtOHB4O3BhZGRpbmc6OHB4O2JhY2tncm91bmQ6I2FhYSB1cmwoaW1hZ2VzL3VpLWJnX2ZsYXRfMF9hYWFhYWFfNDB4MTAwLnBuZykgNTAlIDUwJSByZXBlYXQteDtvcGFjaXR5Oi4zO2ZpbHRlcjpBbHBoYShPcGFjaXR5PTMwKTtib3JkZXItcmFkaXVzOjhweH0=]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/js</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/js/jquery-ui-1.10.3.custom.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGpRdWVyeSBVSSAtIHYxLjEwLjMgLSAyMDEzLTA4LTA1CiogaHR0cDovL2pxdWVyeXVpLmNvbQoqIEluY2x1ZGVzOiBqcXVlcnkudWkuY29yZS5qcywganF1ZXJ5LnVpLmRhdGVwaWNrZXIuanMKKiBDb3B5cmlnaHQgMjAxMyBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIExpY2Vuc2VkIE1JVCAqLwoKKGZ1bmN0aW9uKCAkLCB1bmRlZmluZWQgKSB7Cgp2YXIgdXVpZCA9IDAsCglydW5pcXVlSWQgPSAvXnVpLWlkLVxkKyQvOwoKLy8gJC51aSBtaWdodCBleGlzdCBmcm9tIGNvbXBvbmVudHMgd2l0aCBubyBkZXBlbmRlbmNpZXMsIGUuZy4sICQudWkucG9zaXRpb24KJC51aSA9ICQudWkgfHwge307CgokLmV4dGVuZCggJC51aSwgewoJdmVyc2lvbjogIjEuMTAuMyIsCgoJa2V5Q29kZTogewoJCUJBQ0tTUEFDRTogOCwKCQlDT01NQTogMTg4LAoJCURFTEVURTogNDYsCgkJRE9XTjogNDAsCgkJRU5EOiAzNSwKCQlFTlRFUjogMTMsCgkJRVNDQVBFOiAyNywKCQlIT01FOiAzNiwKCQlMRUZUOiAzNywKCQlOVU1QQURfQUREOiAxMDcsCgkJTlVNUEFEX0RFQ0lNQUw6IDExMCwKCQlOVU1QQURfRElWSURFOiAxMTEsCgkJTlVNUEFEX0VOVEVSOiAxMDgsCgkJTlVNUEFEX01VTFRJUExZOiAxMDYsCgkJTlVNUEFEX1NVQlRSQUNUOiAxMDksCgkJUEFHRV9ET1dOOiAzNCwKCQlQQUdFX1VQOiAzMywKCQlQRVJJT0Q6IDE5MCwKCQlSSUdIVDogMzksCgkJU1BBQ0U6IDMyLAoJCVRBQjogOSwKCQlVUDogMzgKCX0KfSk7CgovLyBwbHVnaW5zCiQuZm4uZXh0ZW5kKHsKCWZvY3VzOiAoZnVuY3Rpb24oIG9yaWcgKSB7CgkJcmV0dXJuIGZ1bmN0aW9uKCBkZWxheSwgZm4gKSB7CgkJCXJldHVybiB0eXBlb2YgZGVsYXkgPT09ICJudW1iZXIiID8KCQkJCXRoaXMuZWFjaChmdW5jdGlvbigpIHsKCQkJCQl2YXIgZWxlbSA9IHRoaXM7CgkJCQkJc2V0VGltZW91dChmdW5jdGlvbigpIHsKCQkJCQkJJCggZWxlbSApLmZvY3VzKCk7CgkJCQkJCWlmICggZm4gKSB7CgkJCQkJCQlmbi5jYWxsKCBlbGVtICk7CgkJCQkJCX0KCQkJCQl9LCBkZWxheSApOwoJCQkJfSkgOgoJCQkJb3JpZy5hcHBseSggdGhpcywgYXJndW1lbnRzICk7CgkJfTsKCX0pKCAkLmZuLmZvY3VzICksCgoJc2Nyb2xsUGFyZW50OiBmdW5jdGlvbigpIHsKCQl2YXIgc2Nyb2xsUGFyZW50OwoJCWlmICgoJC51aS5pZSAmJiAoLyhzdGF0aWN8cmVsYXRpdmUpLykudGVzdCh0aGlzLmNzcygicG9zaXRpb24iKSkpIHx8ICgvYWJzb2x1dGUvKS50ZXN0KHRoaXMuY3NzKCJwb3NpdGlvbiIpKSkgewoJCQlzY3JvbGxQYXJlbnQgPSB0aGlzLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKSB7CgkJCQlyZXR1cm4gKC8ocmVsYXRpdmV8YWJzb2x1dGV8Zml4ZWQpLykudGVzdCgkLmNzcyh0aGlzLCJwb3NpdGlvbiIpKSAmJiAoLyhhdXRvfHNjcm9sbCkvKS50ZXN0KCQuY3NzKHRoaXMsIm92ZXJmbG93IikrJC5jc3ModGhpcywib3ZlcmZsb3cteSIpKyQuY3NzKHRoaXMsIm92ZXJmbG93LXgiKSk7CgkJCX0pLmVxKDApOwoJCX0gZWxzZSB7CgkJCXNjcm9sbFBhcmVudCA9IHRoaXMucGFyZW50cygpLmZpbHRlcihmdW5jdGlvbigpIHsKCQkJCXJldHVybiAoLyhhdXRvfHNjcm9sbCkvKS50ZXN0KCQuY3NzKHRoaXMsIm92ZXJmbG93IikrJC5jc3ModGhpcywib3ZlcmZsb3cteSIpKyQuY3NzKHRoaXMsIm92ZXJmbG93LXgiKSk7CgkJCX0pLmVxKDApOwoJCX0KCgkJcmV0dXJuICgvZml4ZWQvKS50ZXN0KHRoaXMuY3NzKCJwb3NpdGlvbiIpKSB8fCAhc2Nyb2xsUGFyZW50Lmxlbmd0aCA/ICQoZG9jdW1lbnQpIDogc2Nyb2xsUGFyZW50OwoJfSwKCgl6SW5kZXg6IGZ1bmN0aW9uKCB6SW5kZXggKSB7CgkJaWYgKCB6SW5kZXggIT09IHVuZGVmaW5lZCApIHsKCQkJcmV0dXJuIHRoaXMuY3NzKCAiekluZGV4IiwgekluZGV4ICk7CgkJfQoKCQlpZiAoIHRoaXMubGVuZ3RoICkgewoJCQl2YXIgZWxlbSA9ICQoIHRoaXNbIDAgXSApLCBwb3NpdGlvbiwgdmFsdWU7CgkJCXdoaWxlICggZWxlbS5sZW5ndGggJiYgZWxlbVsgMCBdICE9PSBkb2N1bWVudCApIHsKCQkJCS8vIElnbm9yZSB6LWluZGV4IGlmIHBvc2l0aW9uIGlzIHNldCB0byBhIHZhbHVlIHdoZXJlIHotaW5kZXggaXMgaWdub3JlZCBieSB0aGUgYnJvd3NlcgoJCQkJLy8gVGhpcyBtYWtlcyBiZWhhdmlvciBvZiB0aGlzIGZ1bmN0aW9uIGNvbnNpc3RlbnQgYWNyb3NzIGJyb3dzZXJzCgkJCQkvLyBXZWJLaXQgYWx3YXlzIHJldHVybnMgYXV0byBpZiB0aGUgZWxlbWVudCBpcyBwb3NpdGlvbmVkCgkJCQlwb3NpdGlvbiA9IGVsZW0uY3NzKCAicG9zaXRpb24iICk7CgkJCQlpZiAoIHBvc2l0aW9uID09PSAiYWJzb2x1dGUiIHx8IHBvc2l0aW9uID09PSAicmVsYXRpdmUiIHx8IHBvc2l0aW9uID09PSAiZml4ZWQiICkgewoJCQkJCS8vIElFIHJldHVybnMgMCB3aGVuIHpJbmRleCBpcyBub3Qgc3BlY2lmaWVkCgkJCQkJLy8gb3RoZXIgYnJvd3NlcnMgcmV0dXJuIGEgc3RyaW5nCgkJCQkJLy8gd2UgaWdub3JlIHRoZSBjYXNlIG9mIG5lc3RlZCBlbGVtZW50cyB3aXRoIGFuIGV4cGxpY2l0IHZhbHVlIG9mIDAKCQkJCQkvLyA8ZGl2IHN0eWxlPSJ6LWluZGV4OiAtMTA7Ij48ZGl2IHN0eWxlPSJ6LWluZGV4OiAwOyI+PC9kaXY+PC9kaXY+CgkJCQkJdmFsdWUgPSBwYXJzZUludCggZWxlbS5jc3MoICJ6SW5kZXgiICksIDEwICk7CgkJCQkJaWYgKCAhaXNOYU4oIHZhbHVlICkgJiYgdmFsdWUgIT09IDAgKSB7CgkJCQkJCXJldHVybiB2YWx1ZTsKCQkJCQl9CgkJCQl9CgkJCQllbGVtID0gZWxlbS5wYXJlbnQoKTsKCQkJfQoJCX0KCgkJcmV0dXJuIDA7Cgl9LAoKCXVuaXF1ZUlkOiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQlpZiAoICF0aGlzLmlkICkgewoJCQkJdGhpcy5pZCA9ICJ1aS1pZC0iICsgKCsrdXVpZCk7CgkJCX0KCQl9KTsKCX0sCgoJcmVtb3ZlVW5pcXVlSWQ6IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCWlmICggcnVuaXF1ZUlkLnRlc3QoIHRoaXMuaWQgKSApIHsKCQkJCSQoIHRoaXMgKS5yZW1vdmVBdHRyKCAiaWQiICk7CgkJCX0KCQl9KTsKCX0KfSk7CgovLyBzZWxlY3RvcnMKZnVuY3Rpb24gZm9jdXNhYmxlKCBlbGVtZW50LCBpc1RhYkluZGV4Tm90TmFOICkgewoJdmFyIG1hcCwgbWFwTmFtZSwgaW1nLAoJCW5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwoJaWYgKCAiYXJlYSIgPT09IG5vZGVOYW1lICkgewoJCW1hcCA9IGVsZW1lbnQucGFyZW50Tm9kZTsKCQltYXBOYW1lID0gbWFwLm5hbWU7CgkJaWYgKCAhZWxlbWVudC5ocmVmIHx8ICFtYXBOYW1lIHx8IG1hcC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAibWFwIiApIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlpbWcgPSAkKCAiaW1nW3VzZW1hcD0jIiArIG1hcE5hbWUgKyAiXSIgKVswXTsKCQlyZXR1cm4gISFpbWcgJiYgdmlzaWJsZSggaW1nICk7Cgl9CglyZXR1cm4gKCAvaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QvLnRlc3QoIG5vZGVOYW1lICkgPwoJCSFlbGVtZW50LmRpc2FibGVkIDoKCQkiYSIgPT09IG5vZGVOYW1lID8KCQkJZWxlbWVudC5ocmVmIHx8IGlzVGFiSW5kZXhOb3ROYU4gOgoJCQlpc1RhYkluZGV4Tm90TmFOKSAmJgoJCS8vIHRoZSBlbGVtZW50IGFuZCBhbGwgb2YgaXRzIGFuY2VzdG9ycyBtdXN0IGJlIHZpc2libGUKCQl2aXNpYmxlKCBlbGVtZW50ICk7Cn0KCmZ1bmN0aW9uIHZpc2libGUoIGVsZW1lbnQgKSB7CglyZXR1cm4gJC5leHByLmZpbHRlcnMudmlzaWJsZSggZWxlbWVudCApICYmCgkJISQoIGVsZW1lbnQgKS5wYXJlbnRzKCkuYWRkQmFjaygpLmZpbHRlcihmdW5jdGlvbigpIHsKCQkJcmV0dXJuICQuY3NzKCB0aGlzLCAidmlzaWJpbGl0eSIgKSA9PT0gImhpZGRlbiI7CgkJfSkubGVuZ3RoOwp9CgokLmV4dGVuZCggJC5leHByWyAiOiIgXSwgewoJZGF0YTogJC5leHByLmNyZWF0ZVBzZXVkbyA/CgkJJC5leHByLmNyZWF0ZVBzZXVkbyhmdW5jdGlvbiggZGF0YU5hbWUgKSB7CgkJCXJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKCQkJCXJldHVybiAhISQuZGF0YSggZWxlbSwgZGF0YU5hbWUgKTsKCQkJfTsKCQl9KSA6CgkJLy8gc3VwcG9ydDogalF1ZXJ5IDwxLjgKCQlmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7CgkJCXJldHVybiAhISQuZGF0YSggZWxlbSwgbWF0Y2hbIDMgXSApOwoJCX0sCgoJZm9jdXNhYmxlOiBmdW5jdGlvbiggZWxlbWVudCApIHsKCQlyZXR1cm4gZm9jdXNhYmxlKCBlbGVtZW50LCAhaXNOYU4oICQuYXR0ciggZWxlbWVudCwgInRhYmluZGV4IiApICkgKTsKCX0sCgoJdGFiYmFibGU6IGZ1bmN0aW9uKCBlbGVtZW50ICkgewoJCXZhciB0YWJJbmRleCA9ICQuYXR0ciggZWxlbWVudCwgInRhYmluZGV4IiApLAoJCQlpc1RhYkluZGV4TmFOID0gaXNOYU4oIHRhYkluZGV4ICk7CgkJcmV0dXJuICggaXNUYWJJbmRleE5hTiB8fCB0YWJJbmRleCA+PSAwICkgJiYgZm9jdXNhYmxlKCBlbGVtZW50LCAhaXNUYWJJbmRleE5hTiApOwoJfQp9KTsKCi8vIHN1cHBvcnQ6IGpRdWVyeSA8MS44CmlmICggISQoICI8YT4iICkub3V0ZXJXaWR0aCggMSApLmpxdWVyeSApIHsKCSQuZWFjaCggWyAiV2lkdGgiLCAiSGVpZ2h0IiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKCQl2YXIgc2lkZSA9IG5hbWUgPT09ICJXaWR0aCIgPyBbICJMZWZ0IiwgIlJpZ2h0IiBdIDogWyAiVG9wIiwgIkJvdHRvbSIgXSwKCQkJdHlwZSA9IG5hbWUudG9Mb3dlckNhc2UoKSwKCQkJb3JpZyA9IHsKCQkJCWlubmVyV2lkdGg6ICQuZm4uaW5uZXJXaWR0aCwKCQkJCWlubmVySGVpZ2h0OiAkLmZuLmlubmVySGVpZ2h0LAoJCQkJb3V0ZXJXaWR0aDogJC5mbi5vdXRlcldpZHRoLAoJCQkJb3V0ZXJIZWlnaHQ6ICQuZm4ub3V0ZXJIZWlnaHQKCQkJfTsKCgkJZnVuY3Rpb24gcmVkdWNlKCBlbGVtLCBzaXplLCBib3JkZXIsIG1hcmdpbiApIHsKCQkJJC5lYWNoKCBzaWRlLCBmdW5jdGlvbigpIHsKCQkJCXNpemUgLT0gcGFyc2VGbG9hdCggJC5jc3MoIGVsZW0sICJwYWRkaW5nIiArIHRoaXMgKSApIHx8IDA7CgkJCQlpZiAoIGJvcmRlciApIHsKCQkJCQlzaXplIC09IHBhcnNlRmxvYXQoICQuY3NzKCBlbGVtLCAiYm9yZGVyIiArIHRoaXMgKyAiV2lkdGgiICkgKSB8fCAwOwoJCQkJfQoJCQkJaWYgKCBtYXJnaW4gKSB7CgkJCQkJc2l6ZSAtPSBwYXJzZUZsb2F0KCAkLmNzcyggZWxlbSwgIm1hcmdpbiIgKyB0aGlzICkgKSB8fCAwOwoJCQkJfQoJCQl9KTsKCQkJcmV0dXJuIHNpemU7CgkJfQoKCQkkLmZuWyAiaW5uZXIiICsgbmFtZSBdID0gZnVuY3Rpb24oIHNpemUgKSB7CgkJCWlmICggc2l6ZSA9PT0gdW5kZWZpbmVkICkgewoJCQkJcmV0dXJuIG9yaWdbICJpbm5lciIgKyBuYW1lIF0uY2FsbCggdGhpcyApOwoJCQl9CgoJCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQkJJCggdGhpcyApLmNzcyggdHlwZSwgcmVkdWNlKCB0aGlzLCBzaXplICkgKyAicHgiICk7CgkJCX0pOwoJCX07CgoJCSQuZm5bICJvdXRlciIgKyBuYW1lXSA9IGZ1bmN0aW9uKCBzaXplLCBtYXJnaW4gKSB7CgkJCWlmICggdHlwZW9mIHNpemUgIT09ICJudW1iZXIiICkgewoJCQkJcmV0dXJuIG9yaWdbICJvdXRlciIgKyBuYW1lIF0uY2FsbCggdGhpcywgc2l6ZSApOwoJCQl9CgoJCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQkJJCggdGhpcykuY3NzKCB0eXBlLCByZWR1Y2UoIHRoaXMsIHNpemUsIHRydWUsIG1hcmdpbiApICsgInB4IiApOwoJCQl9KTsKCQl9OwoJfSk7Cn0KCi8vIHN1cHBvcnQ6IGpRdWVyeSA8MS44CmlmICggISQuZm4uYWRkQmFjayApIHsKCSQuZm4uYWRkQmFjayA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKCQlyZXR1cm4gdGhpcy5hZGQoIHNlbGVjdG9yID09IG51bGwgPwoJCQl0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApCgkJKTsKCX07Cn0KCi8vIHN1cHBvcnQ6IGpRdWVyeSAxLjYuMSwgMS42LjIgKGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0Lzk0MTMpCmlmICggJCggIjxhPiIgKS5kYXRhKCAiYS1iIiwgImEiICkucmVtb3ZlRGF0YSggImEtYiIgKS5kYXRhKCAiYS1iIiApICkgewoJJC5mbi5yZW1vdmVEYXRhID0gKGZ1bmN0aW9uKCByZW1vdmVEYXRhICkgewoJCXJldHVybiBmdW5jdGlvbigga2V5ICkgewoJCQlpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7CgkJCQlyZXR1cm4gcmVtb3ZlRGF0YS5jYWxsKCB0aGlzLCAkLmNhbWVsQ2FzZSgga2V5ICkgKTsKCQkJfSBlbHNlIHsKCQkJCXJldHVybiByZW1vdmVEYXRhLmNhbGwoIHRoaXMgKTsKCQkJfQoJCX07Cgl9KSggJC5mbi5yZW1vdmVEYXRhICk7Cn0KCgoKCgovLyBkZXByZWNhdGVkCiQudWkuaWUgPSAhIS9tc2llIFtcdy5dKy8uZXhlYyggbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpICk7CgokLnN1cHBvcnQuc2VsZWN0c3RhcnQgPSAib25zZWxlY3RzdGFydCIgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKTsKJC5mbi5leHRlbmQoewoJZGlzYWJsZVNlbGVjdGlvbjogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMuYmluZCggKCAkLnN1cHBvcnQuc2VsZWN0c3RhcnQgPyAic2VsZWN0c3RhcnQiIDogIm1vdXNlZG93biIgKSArCgkJCSIudWktZGlzYWJsZVNlbGVjdGlvbiIsIGZ1bmN0aW9uKCBldmVudCApIHsKCQkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgkJCX0pOwoJfSwKCgllbmFibGVTZWxlY3Rpb246IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0aGlzLnVuYmluZCggIi51aS1kaXNhYmxlU2VsZWN0aW9uIiApOwoJfQp9KTsKCiQuZXh0ZW5kKCAkLnVpLCB7CgkvLyAkLnVpLnBsdWdpbiBpcyBkZXByZWNhdGVkLiBVc2UgJC53aWRnZXQoKSBleHRlbnNpb25zIGluc3RlYWQuCglwbHVnaW46IHsKCQlhZGQ6IGZ1bmN0aW9uKCBtb2R1bGUsIG9wdGlvbiwgc2V0ICkgewoJCQl2YXIgaSwKCQkJCXByb3RvID0gJC51aVsgbW9kdWxlIF0ucHJvdG90eXBlOwoJCQlmb3IgKCBpIGluIHNldCApIHsKCQkJCXByb3RvLnBsdWdpbnNbIGkgXSA9IHByb3RvLnBsdWdpbnNbIGkgXSB8fCBbXTsKCQkJCXByb3RvLnBsdWdpbnNbIGkgXS5wdXNoKCBbIG9wdGlvbiwgc2V0WyBpIF0gXSApOwoJCQl9CgkJfSwKCQljYWxsOiBmdW5jdGlvbiggaW5zdGFuY2UsIG5hbWUsIGFyZ3MgKSB7CgkJCXZhciBpLAoJCQkJc2V0ID0gaW5zdGFuY2UucGx1Z2luc1sgbmFtZSBdOwoJCQlpZiAoICFzZXQgfHwgIWluc3RhbmNlLmVsZW1lbnRbIDAgXS5wYXJlbnROb2RlIHx8IGluc3RhbmNlLmVsZW1lbnRbIDAgXS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSAxMSApIHsKCQkJCXJldHVybjsKCQkJfQoKCQkJZm9yICggaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpKysgKSB7CgkJCQlpZiAoIGluc3RhbmNlLm9wdGlvbnNbIHNldFsgaSBdWyAwIF0gXSApIHsKCQkJCQlzZXRbIGkgXVsgMSBdLmFwcGx5KCBpbnN0YW5jZS5lbGVtZW50LCBhcmdzICk7CgkJCQl9CgkJCX0KCQl9Cgl9LAoKCS8vIG9ubHkgdXNlZCBieSByZXNpemFibGUKCWhhc1Njcm9sbDogZnVuY3Rpb24oIGVsLCBhICkgewoKCQkvL0lmIG92ZXJmbG93IGlzIGhpZGRlbiwgdGhlIGVsZW1lbnQgbWlnaHQgaGF2ZSBleHRyYSBjb250ZW50LCBidXQgdGhlIHVzZXIgd2FudHMgdG8gaGlkZSBpdAoJCWlmICggJCggZWwgKS5jc3MoICJvdmVyZmxvdyIgKSA9PT0gImhpZGRlbiIpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJdmFyIHNjcm9sbCA9ICggYSAmJiBhID09PSAibGVmdCIgKSA/ICJzY3JvbGxMZWZ0IiA6ICJzY3JvbGxUb3AiLAoJCQloYXMgPSBmYWxzZTsKCgkJaWYgKCBlbFsgc2Nyb2xsIF0gPiAwICkgewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgoJCS8vIFRPRE86IGRldGVybWluZSB3aGljaCBjYXNlcyBhY3R1YWxseSBjYXVzZSB0aGlzIHRvIGhhcHBlbgoJCS8vIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSB0aGUgc2Nyb2xsIHNldCwgc2VlIGlmIGl0J3MgcG9zc2libGUgdG8KCQkvLyBzZXQgdGhlIHNjcm9sbAoJCWVsWyBzY3JvbGwgXSA9IDE7CgkJaGFzID0gKCBlbFsgc2Nyb2xsIF0gPiAwICk7CgkJZWxbIHNjcm9sbCBdID0gMDsKCQlyZXR1cm4gaGFzOwoJfQp9KTsKCn0pKCBqUXVlcnkgKTsKKGZ1bmN0aW9uKCAkLCB1bmRlZmluZWQgKSB7CgokLmV4dGVuZCgkLnVpLCB7IGRhdGVwaWNrZXI6IHsgdmVyc2lvbjogIjEuMTAuMyIgfSB9KTsKCnZhciBQUk9QX05BTUUgPSAiZGF0ZXBpY2tlciIsCglpbnN0QWN0aXZlOwoKLyogRGF0ZSBwaWNrZXIgbWFuYWdlci4KICAgVXNlIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcywgJC5kYXRlcGlja2VyLCB0byBpbnRlcmFjdCB3aXRoIHRoZSBkYXRlIHBpY2tlci4KICAgU2V0dGluZ3MgZm9yIChncm91cHMgb2YpIGRhdGUgcGlja2VycyBhcmUgbWFpbnRhaW5lZCBpbiBhbiBpbnN0YW5jZSBvYmplY3QsCiAgIGFsbG93aW5nIG11bHRpcGxlIGRpZmZlcmVudCBzZXR0aW5ncyBvbiB0aGUgc2FtZSBwYWdlLiAqLwoKZnVuY3Rpb24gRGF0ZXBpY2tlcigpIHsKCXRoaXMuX2N1ckluc3QgPSBudWxsOyAvLyBUaGUgY3VycmVudCBpbnN0YW5jZSBpbiB1c2UKCXRoaXMuX2tleUV2ZW50ID0gZmFsc2U7IC8vIElmIHRoZSBsYXN0IGV2ZW50IHdhcyBhIGtleSBldmVudAoJdGhpcy5fZGlzYWJsZWRJbnB1dHMgPSBbXTsgLy8gTGlzdCBvZiBkYXRlIHBpY2tlciBpbnB1dHMgdGhhdCBoYXZlIGJlZW4gZGlzYWJsZWQKCXRoaXMuX2RhdGVwaWNrZXJTaG93aW5nID0gZmFsc2U7IC8vIFRydWUgaWYgdGhlIHBvcHVwIHBpY2tlciBpcyBzaG93aW5nICwgZmFsc2UgaWYgbm90Cgl0aGlzLl9pbkRpYWxvZyA9IGZhbHNlOyAvLyBUcnVlIGlmIHNob3dpbmcgd2l0aGluIGEgImRpYWxvZyIsIGZhbHNlIGlmIG5vdAoJdGhpcy5fbWFpbkRpdklkID0gInVpLWRhdGVwaWNrZXItZGl2IjsgLy8gVGhlIElEIG9mIHRoZSBtYWluIGRhdGVwaWNrZXIgZGl2aXNpb24KCXRoaXMuX2lubGluZUNsYXNzID0gInVpLWRhdGVwaWNrZXItaW5saW5lIjsgLy8gVGhlIG5hbWUgb2YgdGhlIGlubGluZSBtYXJrZXIgY2xhc3MKCXRoaXMuX2FwcGVuZENsYXNzID0gInVpLWRhdGVwaWNrZXItYXBwZW5kIjsgLy8gVGhlIG5hbWUgb2YgdGhlIGFwcGVuZCBtYXJrZXIgY2xhc3MKCXRoaXMuX3RyaWdnZXJDbGFzcyA9ICJ1aS1kYXRlcGlja2VyLXRyaWdnZXIiOyAvLyBUaGUgbmFtZSBvZiB0aGUgdHJpZ2dlciBtYXJrZXIgY2xhc3MKCXRoaXMuX2RpYWxvZ0NsYXNzID0gInVpLWRhdGVwaWNrZXItZGlhbG9nIjsgLy8gVGhlIG5hbWUgb2YgdGhlIGRpYWxvZyBtYXJrZXIgY2xhc3MKCXRoaXMuX2Rpc2FibGVDbGFzcyA9ICJ1aS1kYXRlcGlja2VyLWRpc2FibGVkIjsgLy8gVGhlIG5hbWUgb2YgdGhlIGRpc2FibGVkIGNvdmVyaW5nIG1hcmtlciBjbGFzcwoJdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MgPSAidWktZGF0ZXBpY2tlci11bnNlbGVjdGFibGUiOyAvLyBUaGUgbmFtZSBvZiB0aGUgdW5zZWxlY3RhYmxlIGNlbGwgbWFya2VyIGNsYXNzCgl0aGlzLl9jdXJyZW50Q2xhc3MgPSAidWktZGF0ZXBpY2tlci1jdXJyZW50LWRheSI7IC8vIFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGRheSBtYXJrZXIgY2xhc3MKCXRoaXMuX2RheU92ZXJDbGFzcyA9ICJ1aS1kYXRlcGlja2VyLWRheXMtY2VsbC1vdmVyIjsgLy8gVGhlIG5hbWUgb2YgdGhlIGRheSBob3ZlciBtYXJrZXIgY2xhc3MKCXRoaXMucmVnaW9uYWwgPSBbXTsgLy8gQXZhaWxhYmxlIHJlZ2lvbmFsIHNldHRpbmdzLCBpbmRleGVkIGJ5IGxhbmd1YWdlIGNvZGUKCXRoaXMucmVnaW9uYWxbIiJdID0geyAvLyBEZWZhdWx0IHJlZ2lvbmFsIHNldHRpbmdzCgkJY2xvc2VUZXh0OiAiRG9uZSIsIC8vIERpc3BsYXkgdGV4dCBmb3IgY2xvc2UgbGluawoJCXByZXZUZXh0OiAiUHJldiIsIC8vIERpc3BsYXkgdGV4dCBmb3IgcHJldmlvdXMgbW9udGggbGluawoJCW5leHRUZXh0OiAiTmV4dCIsIC8vIERpc3BsYXkgdGV4dCBmb3IgbmV4dCBtb250aCBsaW5rCgkJY3VycmVudFRleHQ6ICJUb2RheSIsIC8vIERpc3BsYXkgdGV4dCBmb3IgY3VycmVudCBtb250aCBsaW5rCgkJbW9udGhOYW1lczogWyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsCgkJCSJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSwgLy8gTmFtZXMgb2YgbW9udGhzIGZvciBkcm9wLWRvd24gYW5kIGZvcm1hdHRpbmcKCQltb250aE5hbWVzU2hvcnQ6IFsiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJKdW4iLCAiSnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMiXSwgLy8gRm9yIGZvcm1hdHRpbmcKCQlkYXlOYW1lczogWyJTdW5kYXkiLCAiTW9uZGF5IiwgIlR1ZXNkYXkiLCAiV2VkbmVzZGF5IiwgIlRodXJzZGF5IiwgIkZyaWRheSIsICJTYXR1cmRheSJdLCAvLyBGb3IgZm9ybWF0dGluZwoJCWRheU5hbWVzU2hvcnQ6IFsiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0Il0sIC8vIEZvciBmb3JtYXR0aW5nCgkJZGF5TmFtZXNNaW46IFsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSwgLy8gQ29sdW1uIGhlYWRpbmdzIGZvciBkYXlzIHN0YXJ0aW5nIGF0IFN1bmRheQoJCXdlZWtIZWFkZXI6ICJXayIsIC8vIENvbHVtbiBoZWFkZXIgZm9yIHdlZWsgb2YgdGhlIHllYXIKCQlkYXRlRm9ybWF0OiAibW0vZGQveXkiLCAvLyBTZWUgZm9ybWF0IG9wdGlvbnMgb24gcGFyc2VEYXRlCgkJZmlyc3REYXk6IDAsIC8vIFRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWssIFN1biA9IDAsIE1vbiA9IDEsIC4uLgoJCWlzUlRMOiBmYWxzZSwgLy8gVHJ1ZSBpZiByaWdodC10by1sZWZ0IGxhbmd1YWdlLCBmYWxzZSBpZiBsZWZ0LXRvLXJpZ2h0CgkJc2hvd01vbnRoQWZ0ZXJZZWFyOiBmYWxzZSwgLy8gVHJ1ZSBpZiB0aGUgeWVhciBzZWxlY3QgcHJlY2VkZXMgbW9udGgsIGZhbHNlIGZvciBtb250aCB0aGVuIHllYXIKCQl5ZWFyU3VmZml4OiAiIiAvLyBBZGRpdGlvbmFsIHRleHQgdG8gYXBwZW5kIHRvIHRoZSB5ZWFyIGluIHRoZSBtb250aCBoZWFkZXJzCgl9OwoJdGhpcy5fZGVmYXVsdHMgPSB7IC8vIEdsb2JhbCBkZWZhdWx0cyBmb3IgYWxsIHRoZSBkYXRlIHBpY2tlciBpbnN0YW5jZXMKCQlzaG93T246ICJmb2N1cyIsIC8vICJmb2N1cyIgZm9yIHBvcHVwIG9uIGZvY3VzLAoJCQkvLyAiYnV0dG9uIiBmb3IgdHJpZ2dlciBidXR0b24sIG9yICJib3RoIiBmb3IgZWl0aGVyCgkJc2hvd0FuaW06ICJmYWRlSW4iLCAvLyBOYW1lIG9mIGpRdWVyeSBhbmltYXRpb24gZm9yIHBvcHVwCgkJc2hvd09wdGlvbnM6IHt9LCAvLyBPcHRpb25zIGZvciBlbmhhbmNlZCBhbmltYXRpb25zCgkJZGVmYXVsdERhdGU6IG51bGwsIC8vIFVzZWQgd2hlbiBmaWVsZCBpcyBibGFuazogYWN0dWFsIGRhdGUsCgkJCS8vICsvLW51bWJlciBmb3Igb2Zmc2V0IGZyb20gdG9kYXksIG51bGwgZm9yIHRvZGF5CgkJYXBwZW5kVGV4dDogIiIsIC8vIERpc3BsYXkgdGV4dCBmb2xsb3dpbmcgdGhlIGlucHV0IGJveCwgZS5nLiBzaG93aW5nIHRoZSBmb3JtYXQKCQlidXR0b25UZXh0OiAiLi4uIiwgLy8gVGV4dCBmb3IgdHJpZ2dlciBidXR0b24KCQlidXR0b25JbWFnZTogIiIsIC8vIFVSTCBmb3IgdHJpZ2dlciBidXR0b24gaW1hZ2UKCQlidXR0b25JbWFnZU9ubHk6IGZhbHNlLCAvLyBUcnVlIGlmIHRoZSBpbWFnZSBhcHBlYXJzIGFsb25lLCBmYWxzZSBpZiBpdCBhcHBlYXJzIG9uIGEgYnV0dG9uCgkJaGlkZUlmTm9QcmV2TmV4dDogZmFsc2UsIC8vIFRydWUgdG8gaGlkZSBuZXh0L3ByZXZpb3VzIG1vbnRoIGxpbmtzCgkJCS8vIGlmIG5vdCBhcHBsaWNhYmxlLCBmYWxzZSB0byBqdXN0IGRpc2FibGUgdGhlbQoJCW5hdmlnYXRpb25Bc0RhdGVGb3JtYXQ6IGZhbHNlLCAvLyBUcnVlIGlmIGRhdGUgZm9ybWF0dGluZyBhcHBsaWVkIHRvIHByZXYvdG9kYXkvbmV4dCBsaW5rcwoJCWdvdG9DdXJyZW50OiBmYWxzZSwgLy8gVHJ1ZSBpZiB0b2RheSBsaW5rIGdvZXMgYmFjayB0byBjdXJyZW50IHNlbGVjdGlvbiBpbnN0ZWFkCgkJY2hhbmdlTW9udGg6IGZhbHNlLCAvLyBUcnVlIGlmIG1vbnRoIGNhbiBiZSBzZWxlY3RlZCBkaXJlY3RseSwgZmFsc2UgaWYgb25seSBwcmV2L25leHQKCQljaGFuZ2VZZWFyOiBmYWxzZSwgLy8gVHJ1ZSBpZiB5ZWFyIGNhbiBiZSBzZWxlY3RlZCBkaXJlY3RseSwgZmFsc2UgaWYgb25seSBwcmV2L25leHQKCQl5ZWFyUmFuZ2U6ICJjLTEwOmMrMTAiLCAvLyBSYW5nZSBvZiB5ZWFycyB0byBkaXNwbGF5IGluIGRyb3AtZG93biwKCQkJLy8gZWl0aGVyIHJlbGF0aXZlIHRvIHRvZGF5J3MgeWVhciAoLW5uOitubiksIHJlbGF0aXZlIHRvIGN1cnJlbnRseSBkaXNwbGF5ZWQgeWVhcgoJCQkvLyAoYy1ubjpjK25uKSwgYWJzb2x1dGUgKG5ubm46bm5ubiksIG9yIGEgY29tYmluYXRpb24gb2YgdGhlIGFib3ZlIChubm5uOi1uKQoJCXNob3dPdGhlck1vbnRoczogZmFsc2UsIC8vIFRydWUgdG8gc2hvdyBkYXRlcyBpbiBvdGhlciBtb250aHMsIGZhbHNlIHRvIGxlYXZlIGJsYW5rCgkJc2VsZWN0T3RoZXJNb250aHM6IGZhbHNlLCAvLyBUcnVlIHRvIGFsbG93IHNlbGVjdGlvbiBvZiBkYXRlcyBpbiBvdGhlciBtb250aHMsIGZhbHNlIGZvciB1bnNlbGVjdGFibGUKCQlzaG93V2VlazogZmFsc2UsIC8vIFRydWUgdG8gc2hvdyB3ZWVrIG9mIHRoZSB5ZWFyLCBmYWxzZSB0byBub3Qgc2hvdyBpdAoJCWNhbGN1bGF0ZVdlZWs6IHRoaXMuaXNvODYwMVdlZWssIC8vIEhvdyB0byBjYWxjdWxhdGUgdGhlIHdlZWsgb2YgdGhlIHllYXIsCgkJCS8vIHRha2VzIGEgRGF0ZSBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSB3ZWVrIGZvciBpdAoJCXNob3J0WWVhckN1dG9mZjogIisxMCIsIC8vIFNob3J0IHllYXIgdmFsdWVzIDwgdGhpcyBhcmUgaW4gdGhlIGN1cnJlbnQgY2VudHVyeSwKCQkJLy8gPiB0aGlzIGFyZSBpbiB0aGUgcHJldmlvdXMgY2VudHVyeSwKCQkJLy8gc3RyaW5nIHZhbHVlIHN0YXJ0aW5nIHdpdGggIisiIGZvciBjdXJyZW50IHllYXIgKyB2YWx1ZQoJCW1pbkRhdGU6IG51bGwsIC8vIFRoZSBlYXJsaWVzdCBzZWxlY3RhYmxlIGRhdGUsIG9yIG51bGwgZm9yIG5vIGxpbWl0CgkJbWF4RGF0ZTogbnVsbCwgLy8gVGhlIGxhdGVzdCBzZWxlY3RhYmxlIGRhdGUsIG9yIG51bGwgZm9yIG5vIGxpbWl0CgkJZHVyYXRpb246ICJmYXN0IiwgLy8gRHVyYXRpb24gb2YgZGlzcGxheS9jbG9zdXJlCgkJYmVmb3JlU2hvd0RheTogbnVsbCwgLy8gRnVuY3Rpb24gdGhhdCB0YWtlcyBhIGRhdGUgYW5kIHJldHVybnMgYW4gYXJyYXkgd2l0aAoJCQkvLyBbMF0gPSB0cnVlIGlmIHNlbGVjdGFibGUsIGZhbHNlIGlmIG5vdCwgWzFdID0gY3VzdG9tIENTUyBjbGFzcyBuYW1lKHMpIG9yICIiLAoJCQkvLyBbMl0gPSBjZWxsIHRpdGxlIChvcHRpb25hbCksIGUuZy4gJC5kYXRlcGlja2VyLm5vV2Vla2VuZHMKCQliZWZvcmVTaG93OiBudWxsLCAvLyBGdW5jdGlvbiB0aGF0IHRha2VzIGFuIGlucHV0IGZpZWxkIGFuZAoJCQkvLyByZXR1cm5zIGEgc2V0IG9mIGN1c3RvbSBzZXR0aW5ncyBmb3IgdGhlIGRhdGUgcGlja2VyCgkJb25TZWxlY3Q6IG51bGwsIC8vIERlZmluZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gYSBkYXRlIGlzIHNlbGVjdGVkCgkJb25DaGFuZ2VNb250aFllYXI6IG51bGwsIC8vIERlZmluZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gdGhlIG1vbnRoIG9yIHllYXIgaXMgY2hhbmdlZAoJCW9uQ2xvc2U6IG51bGwsIC8vIERlZmluZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gdGhlIGRhdGVwaWNrZXIgaXMgY2xvc2VkCgkJbnVtYmVyT2ZNb250aHM6IDEsIC8vIE51bWJlciBvZiBtb250aHMgdG8gc2hvdyBhdCBhIHRpbWUKCQlzaG93Q3VycmVudEF0UG9zOiAwLCAvLyBUaGUgcG9zaXRpb24gaW4gbXVsdGlwZSBtb250aHMgYXQgd2hpY2ggdG8gc2hvdyB0aGUgY3VycmVudCBtb250aCAoc3RhcnRpbmcgYXQgMCkKCQlzdGVwTW9udGhzOiAxLCAvLyBOdW1iZXIgb2YgbW9udGhzIHRvIHN0ZXAgYmFjay9mb3J3YXJkCgkJc3RlcEJpZ01vbnRoczogMTIsIC8vIE51bWJlciBvZiBtb250aHMgdG8gc3RlcCBiYWNrL2ZvcndhcmQgZm9yIHRoZSBiaWcgbGlua3MKCQlhbHRGaWVsZDogIiIsIC8vIFNlbGVjdG9yIGZvciBhbiBhbHRlcm5hdGUgZmllbGQgdG8gc3RvcmUgc2VsZWN0ZWQgZGF0ZXMgaW50bwoJCWFsdEZvcm1hdDogIiIsIC8vIFRoZSBkYXRlIGZvcm1hdCB0byB1c2UgZm9yIHRoZSBhbHRlcm5hdGUgZmllbGQKCQljb25zdHJhaW5JbnB1dDogdHJ1ZSwgLy8gVGhlIGlucHV0IGlzIGNvbnN0cmFpbmVkIGJ5IHRoZSBjdXJyZW50IGRhdGUgZm9ybWF0CgkJc2hvd0J1dHRvblBhbmVsOiBmYWxzZSwgLy8gVHJ1ZSB0byBzaG93IGJ1dHRvbiBwYW5lbCwgZmFsc2UgdG8gbm90IHNob3cgaXQKCQlhdXRvU2l6ZTogZmFsc2UsIC8vIFRydWUgdG8gc2l6ZSB0aGUgaW5wdXQgZm9yIHRoZSBkYXRlIGZvcm1hdCwgZmFsc2UgdG8gbGVhdmUgYXMgaXMKCQlkaXNhYmxlZDogZmFsc2UgLy8gVGhlIGluaXRpYWwgZGlzYWJsZWQgc3RhdGUKCX07CgkkLmV4dGVuZCh0aGlzLl9kZWZhdWx0cywgdGhpcy5yZWdpb25hbFsiIl0pOwoJdGhpcy5kcERpdiA9IGJpbmRIb3ZlcigkKCI8ZGl2IGlkPSciICsgdGhpcy5fbWFpbkRpdklkICsgIicgY2xhc3M9J3VpLWRhdGVwaWNrZXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsJz48L2Rpdj4iKSk7Cn0KCiQuZXh0ZW5kKERhdGVwaWNrZXIucHJvdG90eXBlLCB7CgkvKiBDbGFzcyBuYW1lIGFkZGVkIHRvIGVsZW1lbnRzIHRvIGluZGljYXRlIGFscmVhZHkgY29uZmlndXJlZCB3aXRoIGEgZGF0ZSBwaWNrZXIuICovCgltYXJrZXJDbGFzc05hbWU6ICJoYXNEYXRlcGlja2VyIiwKCgkvL0tlZXAgdHJhY2sgb2YgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJvd3MgZGlzcGxheWVkIChzZWUgIzcwNDMpCgltYXhSb3dzOiA0LAoKCS8vIFRPRE8gcmVuYW1lIHRvICJ3aWRnZXQiIHdoZW4gc3dpdGNoaW5nIHRvIHdpZGdldCBmYWN0b3J5Cglfd2lkZ2V0RGF0ZXBpY2tlcjogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMuZHBEaXY7Cgl9LAoKCS8qIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciBhbGwgaW5zdGFuY2VzIG9mIHRoZSBkYXRlIHBpY2tlci4KCSAqIEBwYXJhbSAgc2V0dGluZ3MgIG9iamVjdCAtIHRoZSBuZXcgc2V0dGluZ3MgdG8gdXNlIGFzIGRlZmF1bHRzIChhbm9ueW1vdXMgb2JqZWN0KQoJICogQHJldHVybiB0aGUgbWFuYWdlciBvYmplY3QKCSAqLwoJc2V0RGVmYXVsdHM6IGZ1bmN0aW9uKHNldHRpbmdzKSB7CgkJZXh0ZW5kUmVtb3ZlKHRoaXMuX2RlZmF1bHRzLCBzZXR0aW5ncyB8fCB7fSk7CgkJcmV0dXJuIHRoaXM7Cgl9LAoKCS8qIEF0dGFjaCB0aGUgZGF0ZSBwaWNrZXIgdG8gYSBqUXVlcnkgc2VsZWN0aW9uLgoJICogQHBhcmFtICB0YXJnZXQJZWxlbWVudCAtIHRoZSB0YXJnZXQgaW5wdXQgZmllbGQgb3IgZGl2aXNpb24gb3Igc3BhbgoJICogQHBhcmFtICBzZXR0aW5ncyAgb2JqZWN0IC0gdGhlIG5ldyBzZXR0aW5ncyB0byB1c2UgZm9yIHRoaXMgZGF0ZSBwaWNrZXIgaW5zdGFuY2UgKGFub255bW91cykKCSAqLwoJX2F0dGFjaERhdGVwaWNrZXI6IGZ1bmN0aW9uKHRhcmdldCwgc2V0dGluZ3MpIHsKCQl2YXIgbm9kZU5hbWUsIGlubGluZSwgaW5zdDsKCQlub2RlTmFtZSA9IHRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwoJCWlubGluZSA9IChub2RlTmFtZSA9PT0gImRpdiIgfHwgbm9kZU5hbWUgPT09ICJzcGFuIik7CgkJaWYgKCF0YXJnZXQuaWQpIHsKCQkJdGhpcy51dWlkICs9IDE7CgkJCXRhcmdldC5pZCA9ICJkcCIgKyB0aGlzLnV1aWQ7CgkJfQoJCWluc3QgPSB0aGlzLl9uZXdJbnN0KCQodGFyZ2V0KSwgaW5saW5lKTsKCQlpbnN0LnNldHRpbmdzID0gJC5leHRlbmQoe30sIHNldHRpbmdzIHx8IHt9KTsKCQlpZiAobm9kZU5hbWUgPT09ICJpbnB1dCIpIHsKCQkJdGhpcy5fY29ubmVjdERhdGVwaWNrZXIodGFyZ2V0LCBpbnN0KTsKCQl9IGVsc2UgaWYgKGlubGluZSkgewoJCQl0aGlzLl9pbmxpbmVEYXRlcGlja2VyKHRhcmdldCwgaW5zdCk7CgkJfQoJfSwKCgkvKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2JqZWN0LiAqLwoJX25ld0luc3Q6IGZ1bmN0aW9uKHRhcmdldCwgaW5saW5lKSB7CgkJdmFyIGlkID0gdGFyZ2V0WzBdLmlkLnJlcGxhY2UoLyhbXkEtWmEtejAtOV9cLV0pL2csICJcXFxcJDEiKTsgLy8gZXNjYXBlIGpRdWVyeSBtZXRhIGNoYXJzCgkJcmV0dXJuIHtpZDogaWQsIGlucHV0OiB0YXJnZXQsIC8vIGFzc29jaWF0ZWQgdGFyZ2V0CgkJCXNlbGVjdGVkRGF5OiAwLCBzZWxlY3RlZE1vbnRoOiAwLCBzZWxlY3RlZFllYXI6IDAsIC8vIGN1cnJlbnQgc2VsZWN0aW9uCgkJCWRyYXdNb250aDogMCwgZHJhd1llYXI6IDAsIC8vIG1vbnRoIGJlaW5nIGRyYXduCgkJCWlubGluZTogaW5saW5lLCAvLyBpcyBkYXRlcGlja2VyIGlubGluZSBvciBub3QKCQkJZHBEaXY6ICghaW5saW5lID8gdGhpcy5kcERpdiA6IC8vIHByZXNlbnRhdGlvbiBkaXYKCQkJYmluZEhvdmVyKCQoIjxkaXYgY2xhc3M9JyIgKyB0aGlzLl9pbmxpbmVDbGFzcyArICIgdWktZGF0ZXBpY2tlciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGwnPjwvZGl2PiIpKSl9OwoJfSwKCgkvKiBBdHRhY2ggdGhlIGRhdGUgcGlja2VyIHRvIGFuIGlucHV0IGZpZWxkLiAqLwoJX2Nvbm5lY3REYXRlcGlja2VyOiBmdW5jdGlvbih0YXJnZXQsIGluc3QpIHsKCQl2YXIgaW5wdXQgPSAkKHRhcmdldCk7CgkJaW5zdC5hcHBlbmQgPSAkKFtdKTsKCQlpbnN0LnRyaWdnZXIgPSAkKFtdKTsKCQlpZiAoaW5wdXQuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpKSB7CgkJCXJldHVybjsKCQl9CgkJdGhpcy5fYXR0YWNobWVudHMoaW5wdXQsIGluc3QpOwoJCWlucHV0LmFkZENsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5rZXlkb3duKHRoaXMuX2RvS2V5RG93bikuCgkJCWtleXByZXNzKHRoaXMuX2RvS2V5UHJlc3MpLmtleXVwKHRoaXMuX2RvS2V5VXApOwoJCXRoaXMuX2F1dG9TaXplKGluc3QpOwoJCSQuZGF0YSh0YXJnZXQsIFBST1BfTkFNRSwgaW5zdCk7CgkJLy9JZiBkaXNhYmxlZCBvcHRpb24gaXMgdHJ1ZSwgZGlzYWJsZSB0aGUgZGF0ZXBpY2tlciBvbmNlIGl0IGhhcyBiZWVuIGF0dGFjaGVkIHRvIHRoZSBpbnB1dCAoc2VlIHRpY2tldCAjNTY2NSkKCQlpZiggaW5zdC5zZXR0aW5ncy5kaXNhYmxlZCApIHsKCQkJdGhpcy5fZGlzYWJsZURhdGVwaWNrZXIoIHRhcmdldCApOwoJCX0KCX0sCgoJLyogTWFrZSBhdHRhY2htZW50cyBiYXNlZCBvbiBzZXR0aW5ncy4gKi8KCV9hdHRhY2htZW50czogZnVuY3Rpb24oaW5wdXQsIGluc3QpIHsKCQl2YXIgc2hvd09uLCBidXR0b25UZXh0LCBidXR0b25JbWFnZSwKCQkJYXBwZW5kVGV4dCA9IHRoaXMuX2dldChpbnN0LCAiYXBwZW5kVGV4dCIpLAoJCQlpc1JUTCA9IHRoaXMuX2dldChpbnN0LCAiaXNSVEwiKTsKCgkJaWYgKGluc3QuYXBwZW5kKSB7CgkJCWluc3QuYXBwZW5kLnJlbW92ZSgpOwoJCX0KCQlpZiAoYXBwZW5kVGV4dCkgewoJCQlpbnN0LmFwcGVuZCA9ICQoIjxzcGFuIGNsYXNzPSciICsgdGhpcy5fYXBwZW5kQ2xhc3MgKyAiJz4iICsgYXBwZW5kVGV4dCArICI8L3NwYW4+Iik7CgkJCWlucHV0W2lzUlRMID8gImJlZm9yZSIgOiAiYWZ0ZXIiXShpbnN0LmFwcGVuZCk7CgkJfQoKCQlpbnB1dC51bmJpbmQoImZvY3VzIiwgdGhpcy5fc2hvd0RhdGVwaWNrZXIpOwoKCQlpZiAoaW5zdC50cmlnZ2VyKSB7CgkJCWluc3QudHJpZ2dlci5yZW1vdmUoKTsKCQl9CgoJCXNob3dPbiA9IHRoaXMuX2dldChpbnN0LCAic2hvd09uIik7CgkJaWYgKHNob3dPbiA9PT0gImZvY3VzIiB8fCBzaG93T24gPT09ICJib3RoIikgeyAvLyBwb3AtdXAgZGF0ZSBwaWNrZXIgd2hlbiBpbiB0aGUgbWFya2VkIGZpZWxkCgkJCWlucHV0LmZvY3VzKHRoaXMuX3Nob3dEYXRlcGlja2VyKTsKCQl9CgkJaWYgKHNob3dPbiA9PT0gImJ1dHRvbiIgfHwgc2hvd09uID09PSAiYm90aCIpIHsgLy8gcG9wLXVwIGRhdGUgcGlja2VyIHdoZW4gYnV0dG9uIGNsaWNrZWQKCQkJYnV0dG9uVGV4dCA9IHRoaXMuX2dldChpbnN0LCAiYnV0dG9uVGV4dCIpOwoJCQlidXR0b25JbWFnZSA9IHRoaXMuX2dldChpbnN0LCAiYnV0dG9uSW1hZ2UiKTsKCQkJaW5zdC50cmlnZ2VyID0gJCh0aGlzLl9nZXQoaW5zdCwgImJ1dHRvbkltYWdlT25seSIpID8KCQkJCSQoIjxpbWcvPiIpLmFkZENsYXNzKHRoaXMuX3RyaWdnZXJDbGFzcykuCgkJCQkJYXR0cih7IHNyYzogYnV0dG9uSW1hZ2UsIGFsdDogYnV0dG9uVGV4dCwgdGl0bGU6IGJ1dHRvblRleHQgfSkgOgoJCQkJJCgiPGJ1dHRvbiB0eXBlPSdidXR0b24nPjwvYnV0dG9uPiIpLmFkZENsYXNzKHRoaXMuX3RyaWdnZXJDbGFzcykuCgkJCQkJaHRtbCghYnV0dG9uSW1hZ2UgPyBidXR0b25UZXh0IDogJCgiPGltZy8+IikuYXR0cigKCQkJCQl7IHNyYzpidXR0b25JbWFnZSwgYWx0OmJ1dHRvblRleHQsIHRpdGxlOmJ1dHRvblRleHQgfSkpKTsKCQkJaW5wdXRbaXNSVEwgPyAiYmVmb3JlIiA6ICJhZnRlciJdKGluc3QudHJpZ2dlcik7CgkJCWluc3QudHJpZ2dlci5jbGljayhmdW5jdGlvbigpIHsKCQkJCWlmICgkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nICYmICQuZGF0ZXBpY2tlci5fbGFzdElucHV0ID09PSBpbnB1dFswXSkgewoJCQkJCSQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTsKCQkJCX0gZWxzZSBpZiAoJC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyAmJiAkLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCAhPT0gaW5wdXRbMF0pIHsKCQkJCQkkLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk7CgkJCQkJJC5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcihpbnB1dFswXSk7CgkJCQl9IGVsc2UgewoJCQkJCSQuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIoaW5wdXRbMF0pOwoJCQkJfQoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9KTsKCQl9Cgl9LAoKCS8qIEFwcGx5IHRoZSBtYXhpbXVtIGxlbmd0aCBmb3IgdGhlIGRhdGUgZm9ybWF0LiAqLwoJX2F1dG9TaXplOiBmdW5jdGlvbihpbnN0KSB7CgkJaWYgKHRoaXMuX2dldChpbnN0LCAiYXV0b1NpemUiKSAmJiAhaW5zdC5pbmxpbmUpIHsKCQkJdmFyIGZpbmRNYXgsIG1heCwgbWF4SSwgaSwKCQkJCWRhdGUgPSBuZXcgRGF0ZSgyMDA5LCAxMiAtIDEsIDIwKSwgLy8gRW5zdXJlIGRvdWJsZSBkaWdpdHMKCQkJCWRhdGVGb3JtYXQgPSB0aGlzLl9nZXQoaW5zdCwgImRhdGVGb3JtYXQiKTsKCgkJCWlmIChkYXRlRm9ybWF0Lm1hdGNoKC9bRE1dLykpIHsKCQkJCWZpbmRNYXggPSBmdW5jdGlvbihuYW1lcykgewoJCQkJCW1heCA9IDA7CgkJCQkJbWF4SSA9IDA7CgkJCQkJZm9yIChpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7CgkJCQkJCWlmIChuYW1lc1tpXS5sZW5ndGggPiBtYXgpIHsKCQkJCQkJCW1heCA9IG5hbWVzW2ldLmxlbmd0aDsKCQkJCQkJCW1heEkgPSBpOwoJCQkJCQl9CgkJCQkJfQoJCQkJCXJldHVybiBtYXhJOwoJCQkJfTsKCQkJCWRhdGUuc2V0TW9udGgoZmluZE1heCh0aGlzLl9nZXQoaW5zdCwgKGRhdGVGb3JtYXQubWF0Y2goL01NLykgPwoJCQkJCSJtb250aE5hbWVzIiA6ICJtb250aE5hbWVzU2hvcnQiKSkpKTsKCQkJCWRhdGUuc2V0RGF0ZShmaW5kTWF4KHRoaXMuX2dldChpbnN0LCAoZGF0ZUZvcm1hdC5tYXRjaCgvREQvKSA/CgkJCQkJImRheU5hbWVzIiA6ICJkYXlOYW1lc1Nob3J0IikpKSArIDIwIC0gZGF0ZS5nZXREYXkoKSk7CgkJCX0KCQkJaW5zdC5pbnB1dC5hdHRyKCJzaXplIiwgdGhpcy5fZm9ybWF0RGF0ZShpbnN0LCBkYXRlKS5sZW5ndGgpOwoJCX0KCX0sCgoJLyogQXR0YWNoIGFuIGlubGluZSBkYXRlIHBpY2tlciB0byBhIGRpdi4gKi8KCV9pbmxpbmVEYXRlcGlja2VyOiBmdW5jdGlvbih0YXJnZXQsIGluc3QpIHsKCQl2YXIgZGl2U3BhbiA9ICQodGFyZ2V0KTsKCQlpZiAoZGl2U3Bhbi5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkpIHsKCQkJcmV0dXJuOwoJCX0KCQlkaXZTcGFuLmFkZENsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5hcHBlbmQoaW5zdC5kcERpdik7CgkJJC5kYXRhKHRhcmdldCwgUFJPUF9OQU1FLCBpbnN0KTsKCQl0aGlzLl9zZXREYXRlKGluc3QsIHRoaXMuX2dldERlZmF1bHREYXRlKGluc3QpLCB0cnVlKTsKCQl0aGlzLl91cGRhdGVEYXRlcGlja2VyKGluc3QpOwoJCXRoaXMuX3VwZGF0ZUFsdGVybmF0ZShpbnN0KTsKCQkvL0lmIGRpc2FibGVkIG9wdGlvbiBpcyB0cnVlLCBkaXNhYmxlIHRoZSBkYXRlcGlja2VyIGJlZm9yZSBzaG93aW5nIGl0IChzZWUgdGlja2V0ICM1NjY1KQoJCWlmKCBpbnN0LnNldHRpbmdzLmRpc2FibGVkICkgewoJCQl0aGlzLl9kaXNhYmxlRGF0ZXBpY2tlciggdGFyZ2V0ICk7CgkJfQoJCS8vIFNldCBkaXNwbGF5OmJsb2NrIGluIHBsYWNlIG9mIGluc3QuZHBEaXYuc2hvdygpIHdoaWNoIHdvbid0IHdvcmsgb24gZGlzY29ubmVjdGVkIGVsZW1lbnRzCgkJLy8gaHR0cDovL2J1Z3MuanF1ZXJ5dWkuY29tL3RpY2tldC83NTUyIC0gQSBEYXRlcGlja2VyIGNyZWF0ZWQgb24gYSBkZXRhY2hlZCBkaXYgaGFzIHplcm8gaGVpZ2h0CgkJaW5zdC5kcERpdi5jc3MoICJkaXNwbGF5IiwgImJsb2NrIiApOwoJfSwKCgkvKiBQb3AtdXAgdGhlIGRhdGUgcGlja2VyIGluIGEgImRpYWxvZyIgYm94LgoJICogQHBhcmFtICBpbnB1dCBlbGVtZW50IC0gaWdub3JlZAoJICogQHBhcmFtICBkYXRlCXN0cmluZyBvciBEYXRlIC0gdGhlIGluaXRpYWwgZGF0ZSB0byBkaXNwbGF5CgkgKiBAcGFyYW0gIG9uU2VsZWN0ICBmdW5jdGlvbiAtIHRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBkYXRlIGlzIHNlbGVjdGVkCgkgKiBAcGFyYW0gIHNldHRpbmdzICBvYmplY3QgLSB1cGRhdGUgdGhlIGRpYWxvZyBkYXRlIHBpY2tlciBpbnN0YW5jZSdzIHNldHRpbmdzIChhbm9ueW1vdXMgb2JqZWN0KQoJICogQHBhcmFtICBwb3MgaW50WzJdIC0gY29vcmRpbmF0ZXMgZm9yIHRoZSBkaWFsb2cncyBwb3NpdGlvbiB3aXRoaW4gdGhlIHNjcmVlbiBvcgoJICoJCQkJCWV2ZW50IC0gd2l0aCB4L3kgY29vcmRpbmF0ZXMgb3IKCSAqCQkJCQlsZWF2ZSBlbXB0eSBmb3IgZGVmYXVsdCAoc2NyZWVuIGNlbnRyZSkKCSAqIEByZXR1cm4gdGhlIG1hbmFnZXIgb2JqZWN0CgkgKi8KCV9kaWFsb2dEYXRlcGlja2VyOiBmdW5jdGlvbihpbnB1dCwgZGF0ZSwgb25TZWxlY3QsIHNldHRpbmdzLCBwb3MpIHsKCQl2YXIgaWQsIGJyb3dzZXJXaWR0aCwgYnJvd3NlckhlaWdodCwgc2Nyb2xsWCwgc2Nyb2xsWSwKCQkJaW5zdCA9IHRoaXMuX2RpYWxvZ0luc3Q7IC8vIGludGVybmFsIGluc3RhbmNlCgoJCWlmICghaW5zdCkgewoJCQl0aGlzLnV1aWQgKz0gMTsKCQkJaWQgPSAiZHAiICsgdGhpcy51dWlkOwoJCQl0aGlzLl9kaWFsb2dJbnB1dCA9ICQoIjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nIiArIGlkICsKCQkJCSInIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogLTEwMHB4OyB3aWR0aDogMHB4OycvPiIpOwoJCQl0aGlzLl9kaWFsb2dJbnB1dC5rZXlkb3duKHRoaXMuX2RvS2V5RG93bik7CgkJCSQoImJvZHkiKS5hcHBlbmQodGhpcy5fZGlhbG9nSW5wdXQpOwoJCQlpbnN0ID0gdGhpcy5fZGlhbG9nSW5zdCA9IHRoaXMuX25ld0luc3QodGhpcy5fZGlhbG9nSW5wdXQsIGZhbHNlKTsKCQkJaW5zdC5zZXR0aW5ncyA9IHt9OwoJCQkkLmRhdGEodGhpcy5fZGlhbG9nSW5wdXRbMF0sIFBST1BfTkFNRSwgaW5zdCk7CgkJfQoJCWV4dGVuZFJlbW92ZShpbnN0LnNldHRpbmdzLCBzZXR0aW5ncyB8fCB7fSk7CgkJZGF0ZSA9IChkYXRlICYmIGRhdGUuY29uc3RydWN0b3IgPT09IERhdGUgPyB0aGlzLl9mb3JtYXREYXRlKGluc3QsIGRhdGUpIDogZGF0ZSk7CgkJdGhpcy5fZGlhbG9nSW5wdXQudmFsKGRhdGUpOwoKCQl0aGlzLl9wb3MgPSAocG9zID8gKHBvcy5sZW5ndGggPyBwb3MgOiBbcG9zLnBhZ2VYLCBwb3MucGFnZVldKSA6IG51bGwpOwoJCWlmICghdGhpcy5fcG9zKSB7CgkJCWJyb3dzZXJXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDsKCQkJYnJvd3NlckhlaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7CgkJCXNjcm9sbFggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQ7CgkJCXNjcm9sbFkgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOwoJCQl0aGlzLl9wb3MgPSAvLyBzaG91bGQgdXNlIGFjdHVhbCB3aWR0aC9oZWlnaHQgYmVsb3cKCQkJCVsoYnJvd3NlcldpZHRoIC8gMikgLSAxMDAgKyBzY3JvbGxYLCAoYnJvd3NlckhlaWdodCAvIDIpIC0gMTUwICsgc2Nyb2xsWV07CgkJfQoKCQkvLyBtb3ZlIGlucHV0IG9uIHNjcmVlbiBmb3IgZm9jdXMsIGJ1dCBoaWRkZW4gYmVoaW5kIGRpYWxvZwoJCXRoaXMuX2RpYWxvZ0lucHV0LmNzcygibGVmdCIsICh0aGlzLl9wb3NbMF0gKyAyMCkgKyAicHgiKS5jc3MoInRvcCIsIHRoaXMuX3Bvc1sxXSArICJweCIpOwoJCWluc3Quc2V0dGluZ3Mub25TZWxlY3QgPSBvblNlbGVjdDsKCQl0aGlzLl9pbkRpYWxvZyA9IHRydWU7CgkJdGhpcy5kcERpdi5hZGRDbGFzcyh0aGlzLl9kaWFsb2dDbGFzcyk7CgkJdGhpcy5fc2hvd0RhdGVwaWNrZXIodGhpcy5fZGlhbG9nSW5wdXRbMF0pOwoJCWlmICgkLmJsb2NrVUkpIHsKCQkJJC5ibG9ja1VJKHRoaXMuZHBEaXYpOwoJCX0KCQkkLmRhdGEodGhpcy5fZGlhbG9nSW5wdXRbMF0sIFBST1BfTkFNRSwgaW5zdCk7CgkJcmV0dXJuIHRoaXM7Cgl9LAoKCS8qIERldGFjaCBhIGRhdGVwaWNrZXIgZnJvbSBpdHMgY29udHJvbC4KCSAqIEBwYXJhbSAgdGFyZ2V0CWVsZW1lbnQgLSB0aGUgdGFyZ2V0IGlucHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNwYW4KCSAqLwoJX2Rlc3Ryb3lEYXRlcGlja2VyOiBmdW5jdGlvbih0YXJnZXQpIHsKCQl2YXIgbm9kZU5hbWUsCgkJCSR0YXJnZXQgPSAkKHRhcmdldCksCgkJCWluc3QgPSAkLmRhdGEodGFyZ2V0LCBQUk9QX05BTUUpOwoKCQlpZiAoISR0YXJnZXQuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpKSB7CgkJCXJldHVybjsKCQl9CgoJCW5vZGVOYW1lID0gdGFyZ2V0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CgkJJC5yZW1vdmVEYXRhKHRhcmdldCwgUFJPUF9OQU1FKTsKCQlpZiAobm9kZU5hbWUgPT09ICJpbnB1dCIpIHsKCQkJaW5zdC5hcHBlbmQucmVtb3ZlKCk7CgkJCWluc3QudHJpZ2dlci5yZW1vdmUoKTsKCQkJJHRhcmdldC5yZW1vdmVDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkuCgkJCQl1bmJpbmQoImZvY3VzIiwgdGhpcy5fc2hvd0RhdGVwaWNrZXIpLgoJCQkJdW5iaW5kKCJrZXlkb3duIiwgdGhpcy5fZG9LZXlEb3duKS4KCQkJCXVuYmluZCgia2V5cHJlc3MiLCB0aGlzLl9kb0tleVByZXNzKS4KCQkJCXVuYmluZCgia2V5dXAiLCB0aGlzLl9kb0tleVVwKTsKCQl9IGVsc2UgaWYgKG5vZGVOYW1lID09PSAiZGl2IiB8fCBub2RlTmFtZSA9PT0gInNwYW4iKSB7CgkJCSR0YXJnZXQucmVtb3ZlQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmVtcHR5KCk7CgkJfQoJfSwKCgkvKiBFbmFibGUgdGhlIGRhdGUgcGlja2VyIHRvIGEgalF1ZXJ5IHNlbGVjdGlvbi4KCSAqIEBwYXJhbSAgdGFyZ2V0CWVsZW1lbnQgLSB0aGUgdGFyZ2V0IGlucHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNwYW4KCSAqLwoJX2VuYWJsZURhdGVwaWNrZXI6IGZ1bmN0aW9uKHRhcmdldCkgewoJCXZhciBub2RlTmFtZSwgaW5saW5lLAoJCQkkdGFyZ2V0ID0gJCh0YXJnZXQpLAoJCQlpbnN0ID0gJC5kYXRhKHRhcmdldCwgUFJPUF9OQU1FKTsKCgkJaWYgKCEkdGFyZ2V0Lmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSkgewoJCQlyZXR1cm47CgkJfQoKCQlub2RlTmFtZSA9IHRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwoJCWlmIChub2RlTmFtZSA9PT0gImlucHV0IikgewoJCQl0YXJnZXQuZGlzYWJsZWQgPSBmYWxzZTsKCQkJaW5zdC50cmlnZ2VyLmZpbHRlcigiYnV0dG9uIikuCgkJCQllYWNoKGZ1bmN0aW9uKCkgeyB0aGlzLmRpc2FibGVkID0gZmFsc2U7IH0pLmVuZCgpLgoJCQkJZmlsdGVyKCJpbWciKS5jc3Moe29wYWNpdHk6ICIxLjAiLCBjdXJzb3I6ICIifSk7CgkJfSBlbHNlIGlmIChub2RlTmFtZSA9PT0gImRpdiIgfHwgbm9kZU5hbWUgPT09ICJzcGFuIikgewoJCQlpbmxpbmUgPSAkdGFyZ2V0LmNoaWxkcmVuKCIuIiArIHRoaXMuX2lubGluZUNsYXNzKTsKCQkJaW5saW5lLmNoaWxkcmVuKCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIik7CgkJCWlubGluZS5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhciIpLgoJCQkJcHJvcCgiZGlzYWJsZWQiLCBmYWxzZSk7CgkJfQoJCXRoaXMuX2Rpc2FibGVkSW5wdXRzID0gJC5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsCgkJCWZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiAodmFsdWUgPT09IHRhcmdldCA/IG51bGwgOiB2YWx1ZSk7IH0pOyAvLyBkZWxldGUgZW50cnkKCX0sCgoJLyogRGlzYWJsZSB0aGUgZGF0ZSBwaWNrZXIgdG8gYSBqUXVlcnkgc2VsZWN0aW9uLgoJICogQHBhcmFtICB0YXJnZXQJZWxlbWVudCAtIHRoZSB0YXJnZXQgaW5wdXQgZmllbGQgb3IgZGl2aXNpb24gb3Igc3BhbgoJICovCglfZGlzYWJsZURhdGVwaWNrZXI6IGZ1bmN0aW9uKHRhcmdldCkgewoJCXZhciBub2RlTmFtZSwgaW5saW5lLAoJCQkkdGFyZ2V0ID0gJCh0YXJnZXQpLAoJCQlpbnN0ID0gJC5kYXRhKHRhcmdldCwgUFJPUF9OQU1FKTsKCgkJaWYgKCEkdGFyZ2V0Lmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSkgewoJCQlyZXR1cm47CgkJfQoKCQlub2RlTmFtZSA9IHRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwoJCWlmIChub2RlTmFtZSA9PT0gImlucHV0IikgewoJCQl0YXJnZXQuZGlzYWJsZWQgPSB0cnVlOwoJCQlpbnN0LnRyaWdnZXIuZmlsdGVyKCJidXR0b24iKS4KCQkJCWVhY2goZnVuY3Rpb24oKSB7IHRoaXMuZGlzYWJsZWQgPSB0cnVlOyB9KS5lbmQoKS4KCQkJCWZpbHRlcigiaW1nIikuY3NzKHtvcGFjaXR5OiAiMC41IiwgY3Vyc29yOiAiZGVmYXVsdCJ9KTsKCQl9IGVsc2UgaWYgKG5vZGVOYW1lID09PSAiZGl2IiB8fCBub2RlTmFtZSA9PT0gInNwYW4iKSB7CgkJCWlubGluZSA9ICR0YXJnZXQuY2hpbGRyZW4oIi4iICsgdGhpcy5faW5saW5lQ2xhc3MpOwoJCQlpbmxpbmUuY2hpbGRyZW4oKS5hZGRDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKTsKCQkJaW5saW5lLmZpbmQoInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyIikuCgkJCQlwcm9wKCJkaXNhYmxlZCIsIHRydWUpOwoJCX0KCQl0aGlzLl9kaXNhYmxlZElucHV0cyA9ICQubWFwKHRoaXMuX2Rpc2FibGVkSW5wdXRzLAoJCQlmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gKHZhbHVlID09PSB0YXJnZXQgPyBudWxsIDogdmFsdWUpOyB9KTsgLy8gZGVsZXRlIGVudHJ5CgkJdGhpcy5fZGlzYWJsZWRJbnB1dHNbdGhpcy5fZGlzYWJsZWRJbnB1dHMubGVuZ3RoXSA9IHRhcmdldDsKCX0sCgoJLyogSXMgdGhlIGZpcnN0IGZpZWxkIGluIGEgalF1ZXJ5IGNvbGxlY3Rpb24gZGlzYWJsZWQgYXMgYSBkYXRlcGlja2VyPwoJICogQHBhcmFtICB0YXJnZXQJZWxlbWVudCAtIHRoZSB0YXJnZXQgaW5wdXQgZmllbGQgb3IgZGl2aXNpb24gb3Igc3BhbgoJICogQHJldHVybiBib29sZWFuIC0gdHJ1ZSBpZiBkaXNhYmxlZCwgZmFsc2UgaWYgZW5hYmxlZAoJICovCglfaXNEaXNhYmxlZERhdGVwaWNrZXI6IGZ1bmN0aW9uKHRhcmdldCkgewoJCWlmICghdGFyZ2V0KSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9kaXNhYmxlZElucHV0cy5sZW5ndGg7IGkrKykgewoJCQlpZiAodGhpcy5fZGlzYWJsZWRJbnB1dHNbaV0gPT09IHRhcmdldCkgewoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQl9CgkJcmV0dXJuIGZhbHNlOwoJfSwKCgkvKiBSZXRyaWV2ZSB0aGUgaW5zdGFuY2UgZGF0YSBmb3IgdGhlIHRhcmdldCBjb250cm9sLgoJICogQHBhcmFtICB0YXJnZXQgIGVsZW1lbnQgLSB0aGUgdGFyZ2V0IGlucHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNwYW4KCSAqIEByZXR1cm4gIG9iamVjdCAtIHRoZSBhc3NvY2lhdGVkIGluc3RhbmNlIGRhdGEKCSAqIEB0aHJvd3MgIGVycm9yIGlmIGEgalF1ZXJ5IHByb2JsZW0gZ2V0dGluZyBkYXRhCgkgKi8KCV9nZXRJbnN0OiBmdW5jdGlvbih0YXJnZXQpIHsKCQl0cnkgewoJCQlyZXR1cm4gJC5kYXRhKHRhcmdldCwgUFJPUF9OQU1FKTsKCQl9CgkJY2F0Y2ggKGVycikgewoJCQl0aHJvdyAiTWlzc2luZyBpbnN0YW5jZSBkYXRhIGZvciB0aGlzIGRhdGVwaWNrZXIiOwoJCX0KCX0sCgoJLyogVXBkYXRlIG9yIHJldHJpZXZlIHRoZSBzZXR0aW5ncyBmb3IgYSBkYXRlIHBpY2tlciBhdHRhY2hlZCB0byBhbiBpbnB1dCBmaWVsZCBvciBkaXZpc2lvbi4KCSAqIEBwYXJhbSAgdGFyZ2V0ICBlbGVtZW50IC0gdGhlIHRhcmdldCBpbnB1dCBmaWVsZCBvciBkaXZpc2lvbiBvciBzcGFuCgkgKiBAcGFyYW0gIG5hbWUJb2JqZWN0IC0gdGhlIG5ldyBzZXR0aW5ncyB0byB1cGRhdGUgb3IKCSAqCQkJCXN0cmluZyAtIHRoZSBuYW1lIG9mIHRoZSBzZXR0aW5nIHRvIGNoYW5nZSBvciByZXRyaWV2ZSwKCSAqCQkJCXdoZW4gcmV0cmlldmluZyBhbHNvICJhbGwiIGZvciBhbGwgaW5zdGFuY2Ugc2V0dGluZ3Mgb3IKCSAqCQkJCSJkZWZhdWx0cyIgZm9yIGFsbCBnbG9iYWwgZGVmYXVsdHMKCSAqIEBwYXJhbSAgdmFsdWUgICBhbnkgLSB0aGUgbmV3IHZhbHVlIGZvciB0aGUgc2V0dGluZwoJICoJCQkJKG9taXQgaWYgYWJvdmUgaXMgYW4gb2JqZWN0IG9yIHRvIHJldHJpZXZlIGEgdmFsdWUpCgkgKi8KCV9vcHRpb25EYXRlcGlja2VyOiBmdW5jdGlvbih0YXJnZXQsIG5hbWUsIHZhbHVlKSB7CgkJdmFyIHNldHRpbmdzLCBkYXRlLCBtaW5EYXRlLCBtYXhEYXRlLAoJCQlpbnN0ID0gdGhpcy5fZ2V0SW5zdCh0YXJnZXQpOwoKCQlpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiB0eXBlb2YgbmFtZSA9PT0gInN0cmluZyIpIHsKCQkJcmV0dXJuIChuYW1lID09PSAiZGVmYXVsdHMiID8gJC5leHRlbmQoe30sICQuZGF0ZXBpY2tlci5fZGVmYXVsdHMpIDoKCQkJCShpbnN0ID8gKG5hbWUgPT09ICJhbGwiID8gJC5leHRlbmQoe30sIGluc3Quc2V0dGluZ3MpIDoKCQkJCXRoaXMuX2dldChpbnN0LCBuYW1lKSkgOiBudWxsKSk7CgkJfQoKCQlzZXR0aW5ncyA9IG5hbWUgfHwge307CgkJaWYgKHR5cGVvZiBuYW1lID09PSAic3RyaW5nIikgewoJCQlzZXR0aW5ncyA9IHt9OwoJCQlzZXR0aW5nc1tuYW1lXSA9IHZhbHVlOwoJCX0KCgkJaWYgKGluc3QpIHsKCQkJaWYgKHRoaXMuX2N1ckluc3QgPT09IGluc3QpIHsKCQkJCXRoaXMuX2hpZGVEYXRlcGlja2VyKCk7CgkJCX0KCgkJCWRhdGUgPSB0aGlzLl9nZXREYXRlRGF0ZXBpY2tlcih0YXJnZXQsIHRydWUpOwoJCQltaW5EYXRlID0gdGhpcy5fZ2V0TWluTWF4RGF0ZShpbnN0LCAibWluIik7CgkJCW1heERhdGUgPSB0aGlzLl9nZXRNaW5NYXhEYXRlKGluc3QsICJtYXgiKTsKCQkJZXh0ZW5kUmVtb3ZlKGluc3Quc2V0dGluZ3MsIHNldHRpbmdzKTsKCQkJLy8gcmVmb3JtYXQgdGhlIG9sZCBtaW5EYXRlL21heERhdGUgdmFsdWVzIGlmIGRhdGVGb3JtYXQgY2hhbmdlcyBhbmQgYSBuZXcgbWluRGF0ZS9tYXhEYXRlIGlzbid0IHByb3ZpZGVkCgkJCWlmIChtaW5EYXRlICE9PSBudWxsICYmIHNldHRpbmdzLmRhdGVGb3JtYXQgIT09IHVuZGVmaW5lZCAmJiBzZXR0aW5ncy5taW5EYXRlID09PSB1bmRlZmluZWQpIHsKCQkJCWluc3Quc2V0dGluZ3MubWluRGF0ZSA9IHRoaXMuX2Zvcm1hdERhdGUoaW5zdCwgbWluRGF0ZSk7CgkJCX0KCQkJaWYgKG1heERhdGUgIT09IG51bGwgJiYgc2V0dGluZ3MuZGF0ZUZvcm1hdCAhPT0gdW5kZWZpbmVkICYmIHNldHRpbmdzLm1heERhdGUgPT09IHVuZGVmaW5lZCkgewoJCQkJaW5zdC5zZXR0aW5ncy5tYXhEYXRlID0gdGhpcy5fZm9ybWF0RGF0ZShpbnN0LCBtYXhEYXRlKTsKCQkJfQoJCQlpZiAoICJkaXNhYmxlZCIgaW4gc2V0dGluZ3MgKSB7CgkJCQlpZiAoIHNldHRpbmdzLmRpc2FibGVkICkgewoJCQkJCXRoaXMuX2Rpc2FibGVEYXRlcGlja2VyKHRhcmdldCk7CgkJCQl9IGVsc2UgewoJCQkJCXRoaXMuX2VuYWJsZURhdGVwaWNrZXIodGFyZ2V0KTsKCQkJCX0KCQkJfQoJCQl0aGlzLl9hdHRhY2htZW50cygkKHRhcmdldCksIGluc3QpOwoJCQl0aGlzLl9hdXRvU2l6ZShpbnN0KTsKCQkJdGhpcy5fc2V0RGF0ZShpbnN0LCBkYXRlKTsKCQkJdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGluc3QpOwoJCQl0aGlzLl91cGRhdGVEYXRlcGlja2VyKGluc3QpOwoJCX0KCX0sCgoJLy8gY2hhbmdlIG1ldGhvZCBkZXByZWNhdGVkCglfY2hhbmdlRGF0ZXBpY2tlcjogZnVuY3Rpb24odGFyZ2V0LCBuYW1lLCB2YWx1ZSkgewoJCXRoaXMuX29wdGlvbkRhdGVwaWNrZXIodGFyZ2V0LCBuYW1lLCB2YWx1ZSk7Cgl9LAoKCS8qIFJlZHJhdyB0aGUgZGF0ZSBwaWNrZXIgYXR0YWNoZWQgdG8gYW4gaW5wdXQgZmllbGQgb3IgZGl2aXNpb24uCgkgKiBAcGFyYW0gIHRhcmdldCAgZWxlbWVudCAtIHRoZSB0YXJnZXQgaW5wdXQgZmllbGQgb3IgZGl2aXNpb24gb3Igc3BhbgoJICovCglfcmVmcmVzaERhdGVwaWNrZXI6IGZ1bmN0aW9uKHRhcmdldCkgewoJCXZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdCh0YXJnZXQpOwoJCWlmIChpbnN0KSB7CgkJCXRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaW5zdCk7CgkJfQoJfSwKCgkvKiBTZXQgdGhlIGRhdGVzIGZvciBhIGpRdWVyeSBzZWxlY3Rpb24uCgkgKiBAcGFyYW0gIHRhcmdldCBlbGVtZW50IC0gdGhlIHRhcmdldCBpbnB1dCBmaWVsZCBvciBkaXZpc2lvbiBvciBzcGFuCgkgKiBAcGFyYW0gIGRhdGUJRGF0ZSAtIHRoZSBuZXcgZGF0ZQoJICovCglfc2V0RGF0ZURhdGVwaWNrZXI6IGZ1bmN0aW9uKHRhcmdldCwgZGF0ZSkgewoJCXZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdCh0YXJnZXQpOwoJCWlmIChpbnN0KSB7CgkJCXRoaXMuX3NldERhdGUoaW5zdCwgZGF0ZSk7CgkJCXRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaW5zdCk7CgkJCXRoaXMuX3VwZGF0ZUFsdGVybmF0ZShpbnN0KTsKCQl9Cgl9LAoKCS8qIEdldCB0aGUgZGF0ZShzKSBmb3IgdGhlIGZpcnN0IGVudHJ5IGluIGEgalF1ZXJ5IHNlbGVjdGlvbi4KCSAqIEBwYXJhbSAgdGFyZ2V0IGVsZW1lbnQgLSB0aGUgdGFyZ2V0IGlucHV0IGZpZWxkIG9yIGRpdmlzaW9uIG9yIHNwYW4KCSAqIEBwYXJhbSAgbm9EZWZhdWx0IGJvb2xlYW4gLSB0cnVlIGlmIG5vIGRlZmF1bHQgZGF0ZSBpcyB0byBiZSB1c2VkCgkgKiBAcmV0dXJuIERhdGUgLSB0aGUgY3VycmVudCBkYXRlCgkgKi8KCV9nZXREYXRlRGF0ZXBpY2tlcjogZnVuY3Rpb24odGFyZ2V0LCBub0RlZmF1bHQpIHsKCQl2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QodGFyZ2V0KTsKCQlpZiAoaW5zdCAmJiAhaW5zdC5pbmxpbmUpIHsKCQkJdGhpcy5fc2V0RGF0ZUZyb21GaWVsZChpbnN0LCBub0RlZmF1bHQpOwoJCX0KCQlyZXR1cm4gKGluc3QgPyB0aGlzLl9nZXREYXRlKGluc3QpIDogbnVsbCk7Cgl9LAoKCS8qIEhhbmRsZSBrZXlzdHJva2VzLiAqLwoJX2RvS2V5RG93bjogZnVuY3Rpb24oZXZlbnQpIHsKCQl2YXIgb25TZWxlY3QsIGRhdGVTdHIsIHNlbCwKCQkJaW5zdCA9ICQuZGF0ZXBpY2tlci5fZ2V0SW5zdChldmVudC50YXJnZXQpLAoJCQloYW5kbGVkID0gdHJ1ZSwKCQkJaXNSVEwgPSBpbnN0LmRwRGl2LmlzKCIudWktZGF0ZXBpY2tlci1ydGwiKTsKCgkJaW5zdC5fa2V5RXZlbnQgPSB0cnVlOwoJCWlmICgkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nKSB7CgkJCXN3aXRjaCAoZXZlbnQua2V5Q29kZSkgewoJCQkJY2FzZSA5OiAkLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk7CgkJCQkJCWhhbmRsZWQgPSBmYWxzZTsKCQkJCQkJYnJlYWs7IC8vIGhpZGUgb24gdGFiIG91dAoJCQkJY2FzZSAxMzogc2VsID0gJCgidGQuIiArICQuZGF0ZXBpY2tlci5fZGF5T3ZlckNsYXNzICsgIjpub3QoLiIgKwoJCQkJCQkJCQkkLmRhdGVwaWNrZXIuX2N1cnJlbnRDbGFzcyArICIpIiwgaW5zdC5kcERpdik7CgkJCQkJCWlmIChzZWxbMF0pIHsKCQkJCQkJCSQuZGF0ZXBpY2tlci5fc2VsZWN0RGF5KGV2ZW50LnRhcmdldCwgaW5zdC5zZWxlY3RlZE1vbnRoLCBpbnN0LnNlbGVjdGVkWWVhciwgc2VsWzBdKTsKCQkJCQkJfQoKCQkJCQkJb25TZWxlY3QgPSAkLmRhdGVwaWNrZXIuX2dldChpbnN0LCAib25TZWxlY3QiKTsKCQkJCQkJaWYgKG9uU2VsZWN0KSB7CgkJCQkJCQlkYXRlU3RyID0gJC5kYXRlcGlja2VyLl9mb3JtYXREYXRlKGluc3QpOwoKCQkJCQkJCS8vIHRyaWdnZXIgY3VzdG9tIGNhbGxiYWNrCgkJCQkJCQlvblNlbGVjdC5hcHBseSgoaW5zdC5pbnB1dCA/IGluc3QuaW5wdXRbMF0gOiBudWxsKSwgW2RhdGVTdHIsIGluc3RdKTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTsKCQkJCQkJfQoKCQkJCQkJcmV0dXJuIGZhbHNlOyAvLyBkb24ndCBzdWJtaXQgdGhlIGZvcm0KCQkJCWNhc2UgMjc6ICQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTsKCQkJCQkJYnJlYWs7IC8vIGhpZGUgb24gZXNjYXBlCgkJCQljYXNlIDMzOiAkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZXZlbnQudGFyZ2V0LCAoZXZlbnQuY3RybEtleSA/CgkJCQkJCQktJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgInN0ZXBCaWdNb250aHMiKSA6CgkJCQkJCQktJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgInN0ZXBNb250aHMiKSksICJNIik7CgkJCQkJCWJyZWFrOyAvLyBwcmV2aW91cyBtb250aC95ZWFyIG9uIHBhZ2UgdXAvKyBjdHJsCgkJCQljYXNlIDM0OiAkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZXZlbnQudGFyZ2V0LCAoZXZlbnQuY3RybEtleSA/CgkJCQkJCQkrJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgInN0ZXBCaWdNb250aHMiKSA6CgkJCQkJCQkrJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgInN0ZXBNb250aHMiKSksICJNIik7CgkJCQkJCWJyZWFrOyAvLyBuZXh0IG1vbnRoL3llYXIgb24gcGFnZSBkb3duLysgY3RybAoJCQkJY2FzZSAzNTogaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgewoJCQkJCQkJJC5kYXRlcGlja2VyLl9jbGVhckRhdGUoZXZlbnQudGFyZ2V0KTsKCQkJCQkJfQoJCQkJCQloYW5kbGVkID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5OwoJCQkJCQlicmVhazsgLy8gY2xlYXIgb24gY3RybCBvciBjb21tYW5kICtlbmQKCQkJCWNhc2UgMzY6IGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpIHsKCQkJCQkJCSQuZGF0ZXBpY2tlci5fZ290b1RvZGF5KGV2ZW50LnRhcmdldCk7CgkJCQkJCX0KCQkJCQkJaGFuZGxlZCA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTsKCQkJCQkJYnJlYWs7IC8vIGN1cnJlbnQgb24gY3RybCBvciBjb21tYW5kICtob21lCgkJCQljYXNlIDM3OiBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSB7CgkJCQkJCQkkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZXZlbnQudGFyZ2V0LCAoaXNSVEwgPyArMSA6IC0xKSwgIkQiKTsKCQkJCQkJfQoJCQkJCQloYW5kbGVkID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5OwoJCQkJCQkvLyAtMSBkYXkgb24gY3RybCBvciBjb21tYW5kICtsZWZ0CgkJCQkJCWlmIChldmVudC5vcmlnaW5hbEV2ZW50LmFsdEtleSkgewoJCQkJCQkJJC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGV2ZW50LnRhcmdldCwgKGV2ZW50LmN0cmxLZXkgPwoJCQkJCQkJCS0kLmRhdGVwaWNrZXIuX2dldChpbnN0LCAic3RlcEJpZ01vbnRocyIpIDoKCQkJCQkJCQktJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgInN0ZXBNb250aHMiKSksICJNIik7CgkJCQkJCX0KCQkJCQkJLy8gbmV4dCBtb250aC95ZWFyIG9uIGFsdCArbGVmdCBvbiBNYWMKCQkJCQkJYnJlYWs7CgkJCQljYXNlIDM4OiBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSB7CgkJCQkJCQkkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZXZlbnQudGFyZ2V0LCAtNywgIkQiKTsKCQkJCQkJfQoJCQkJCQloYW5kbGVkID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5OwoJCQkJCQlicmVhazsgLy8gLTEgd2VlayBvbiBjdHJsIG9yIGNvbW1hbmQgK3VwCgkJCQljYXNlIDM5OiBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSB7CgkJCQkJCQkkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZXZlbnQudGFyZ2V0LCAoaXNSVEwgPyAtMSA6ICsxKSwgIkQiKTsKCQkJCQkJfQoJCQkJCQloYW5kbGVkID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5OwoJCQkJCQkvLyArMSBkYXkgb24gY3RybCBvciBjb21tYW5kICtyaWdodAoJCQkJCQlpZiAoZXZlbnQub3JpZ2luYWxFdmVudC5hbHRLZXkpIHsKCQkJCQkJCSQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShldmVudC50YXJnZXQsIChldmVudC5jdHJsS2V5ID8KCQkJCQkJCQkrJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgInN0ZXBCaWdNb250aHMiKSA6CgkJCQkJCQkJKyQuZGF0ZXBpY2tlci5fZ2V0KGluc3QsICJzdGVwTW9udGhzIikpLCAiTSIpOwoJCQkJCQl9CgkJCQkJCS8vIG5leHQgbW9udGgveWVhciBvbiBhbHQgK3JpZ2h0CgkJCQkJCWJyZWFrOwoJCQkJY2FzZSA0MDogaWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgewoJCQkJCQkJJC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGV2ZW50LnRhcmdldCwgKzcsICJEIik7CgkJCQkJCX0KCQkJCQkJaGFuZGxlZCA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTsKCQkJCQkJYnJlYWs7IC8vICsxIHdlZWsgb24gY3RybCBvciBjb21tYW5kICtkb3duCgkJCQlkZWZhdWx0OiBoYW5kbGVkID0gZmFsc2U7CgkJCX0KCQl9IGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IDM2ICYmIGV2ZW50LmN0cmxLZXkpIHsgLy8gZGlzcGxheSB0aGUgZGF0ZSBwaWNrZXIgb24gY3RybCtob21lCgkJCSQuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIodGhpcyk7CgkJfSBlbHNlIHsKCQkJaGFuZGxlZCA9IGZhbHNlOwoJCX0KCgkJaWYgKGhhbmRsZWQpIHsKCQkJZXZlbnQucHJldmVudERlZmF1bHQoKTsKCQkJZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CgkJfQoJfSwKCgkvKiBGaWx0ZXIgZW50ZXJlZCBjaGFyYWN0ZXJzIC0gYmFzZWQgb24gZGF0ZSBmb3JtYXQuICovCglfZG9LZXlQcmVzczogZnVuY3Rpb24oZXZlbnQpIHsKCQl2YXIgY2hhcnMsIGNociwKCQkJaW5zdCA9ICQuZGF0ZXBpY2tlci5fZ2V0SW5zdChldmVudC50YXJnZXQpOwoKCQlpZiAoJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgImNvbnN0cmFpbklucHV0IikpIHsKCQkJY2hhcnMgPSAkLmRhdGVwaWNrZXIuX3Bvc3NpYmxlQ2hhcnMoJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgImRhdGVGb3JtYXQiKSk7CgkJCWNociA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUgPT0gbnVsbCA/IGV2ZW50LmtleUNvZGUgOiBldmVudC5jaGFyQ29kZSk7CgkJCXJldHVybiBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgKGNociA8ICIgIiB8fCAhY2hhcnMgfHwgY2hhcnMuaW5kZXhPZihjaHIpID4gLTEpOwoJCX0KCX0sCgoJLyogU3luY2hyb25pc2UgbWFudWFsIGVudHJ5IGFuZCBmaWVsZC9hbHRlcm5hdGUgZmllbGQuICovCglfZG9LZXlVcDogZnVuY3Rpb24oZXZlbnQpIHsKCQl2YXIgZGF0ZSwKCQkJaW5zdCA9ICQuZGF0ZXBpY2tlci5fZ2V0SW5zdChldmVudC50YXJnZXQpOwoKCQlpZiAoaW5zdC5pbnB1dC52YWwoKSAhPT0gaW5zdC5sYXN0VmFsKSB7CgkJCXRyeSB7CgkJCQlkYXRlID0gJC5kYXRlcGlja2VyLnBhcnNlRGF0ZSgkLmRhdGVwaWNrZXIuX2dldChpbnN0LCAiZGF0ZUZvcm1hdCIpLAoJCQkJCShpbnN0LmlucHV0ID8gaW5zdC5pbnB1dC52YWwoKSA6IG51bGwpLAoJCQkJCSQuZGF0ZXBpY2tlci5fZ2V0Rm9ybWF0Q29uZmlnKGluc3QpKTsKCgkJCQlpZiAoZGF0ZSkgeyAvLyBvbmx5IGlmIHZhbGlkCgkJCQkJJC5kYXRlcGlja2VyLl9zZXREYXRlRnJvbUZpZWxkKGluc3QpOwoJCQkJCSQuZGF0ZXBpY2tlci5fdXBkYXRlQWx0ZXJuYXRlKGluc3QpOwoJCQkJCSQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcihpbnN0KTsKCQkJCX0KCQkJfQoJCQljYXRjaCAoZXJyKSB7CgkJCX0KCQl9CgkJcmV0dXJuIHRydWU7Cgl9LAoKCS8qIFBvcC11cCB0aGUgZGF0ZSBwaWNrZXIgZm9yIGEgZ2l2ZW4gaW5wdXQgZmllbGQuCgkgKiBJZiBmYWxzZSByZXR1cm5lZCBmcm9tIGJlZm9yZVNob3cgZXZlbnQgaGFuZGxlciBkbyBub3Qgc2hvdy4KCSAqIEBwYXJhbSAgaW5wdXQgIGVsZW1lbnQgLSB0aGUgaW5wdXQgZmllbGQgYXR0YWNoZWQgdG8gdGhlIGRhdGUgcGlja2VyIG9yCgkgKgkJCQkJZXZlbnQgLSBpZiB0cmlnZ2VyZWQgYnkgZm9jdXMKCSAqLwoJX3Nob3dEYXRlcGlja2VyOiBmdW5jdGlvbihpbnB1dCkgewoJCWlucHV0ID0gaW5wdXQudGFyZ2V0IHx8IGlucHV0OwoJCWlmIChpbnB1dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAiaW5wdXQiKSB7IC8vIGZpbmQgZnJvbSBidXR0b24vaW1hZ2UgdHJpZ2dlcgoJCQlpbnB1dCA9ICQoImlucHV0IiwgaW5wdXQucGFyZW50Tm9kZSlbMF07CgkJfQoKCQlpZiAoJC5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihpbnB1dCkgfHwgJC5kYXRlcGlja2VyLl9sYXN0SW5wdXQgPT09IGlucHV0KSB7IC8vIGFscmVhZHkgaGVyZQoJCQlyZXR1cm47CgkJfQoKCQl2YXIgaW5zdCwgYmVmb3JlU2hvdywgYmVmb3JlU2hvd1NldHRpbmdzLCBpc0ZpeGVkLAoJCQlvZmZzZXQsIHNob3dBbmltLCBkdXJhdGlvbjsKCgkJaW5zdCA9ICQuZGF0ZXBpY2tlci5fZ2V0SW5zdChpbnB1dCk7CgkJaWYgKCQuZGF0ZXBpY2tlci5fY3VySW5zdCAmJiAkLmRhdGVwaWNrZXIuX2N1ckluc3QgIT09IGluc3QpIHsKCQkJJC5kYXRlcGlja2VyLl9jdXJJbnN0LmRwRGl2LnN0b3AodHJ1ZSwgdHJ1ZSk7CgkJCWlmICggaW5zdCAmJiAkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nICkgewoJCQkJJC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlciggJC5kYXRlcGlja2VyLl9jdXJJbnN0LmlucHV0WzBdICk7CgkJCX0KCQl9CgoJCWJlZm9yZVNob3cgPSAkLmRhdGVwaWNrZXIuX2dldChpbnN0LCAiYmVmb3JlU2hvdyIpOwoJCWJlZm9yZVNob3dTZXR0aW5ncyA9IGJlZm9yZVNob3cgPyBiZWZvcmVTaG93LmFwcGx5KGlucHV0LCBbaW5wdXQsIGluc3RdKSA6IHt9OwoJCWlmKGJlZm9yZVNob3dTZXR0aW5ncyA9PT0gZmFsc2UpewoJCQlyZXR1cm47CgkJfQoJCWV4dGVuZFJlbW92ZShpbnN0LnNldHRpbmdzLCBiZWZvcmVTaG93U2V0dGluZ3MpOwoKCQlpbnN0Lmxhc3RWYWwgPSBudWxsOwoJCSQuZGF0ZXBpY2tlci5fbGFzdElucHV0ID0gaW5wdXQ7CgkJJC5kYXRlcGlja2VyLl9zZXREYXRlRnJvbUZpZWxkKGluc3QpOwoKCQlpZiAoJC5kYXRlcGlja2VyLl9pbkRpYWxvZykgeyAvLyBoaWRlIGN1cnNvcgoJCQlpbnB1dC52YWx1ZSA9ICIiOwoJCX0KCQlpZiAoISQuZGF0ZXBpY2tlci5fcG9zKSB7IC8vIHBvc2l0aW9uIGJlbG93IGlucHV0CgkJCSQuZGF0ZXBpY2tlci5fcG9zID0gJC5kYXRlcGlja2VyLl9maW5kUG9zKGlucHV0KTsKCQkJJC5kYXRlcGlja2VyLl9wb3NbMV0gKz0gaW5wdXQub2Zmc2V0SGVpZ2h0OyAvLyBhZGQgdGhlIGhlaWdodAoJCX0KCgkJaXNGaXhlZCA9IGZhbHNlOwoJCSQoaW5wdXQpLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCkgewoJCQlpc0ZpeGVkIHw9ICQodGhpcykuY3NzKCJwb3NpdGlvbiIpID09PSAiZml4ZWQiOwoJCQlyZXR1cm4gIWlzRml4ZWQ7CgkJfSk7CgoJCW9mZnNldCA9IHtsZWZ0OiAkLmRhdGVwaWNrZXIuX3Bvc1swXSwgdG9wOiAkLmRhdGVwaWNrZXIuX3Bvc1sxXX07CgkJJC5kYXRlcGlja2VyLl9wb3MgPSBudWxsOwoJCS8vdG8gYXZvaWQgZmxhc2hlcyBvbiBGaXJlZm94CgkJaW5zdC5kcERpdi5lbXB0eSgpOwoJCS8vIGRldGVybWluZSBzaXppbmcgb2Zmc2NyZWVuCgkJaW5zdC5kcERpdi5jc3Moe3Bvc2l0aW9uOiAiYWJzb2x1dGUiLCBkaXNwbGF5OiAiYmxvY2siLCB0b3A6ICItMTAwMHB4In0pOwoJCSQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcihpbnN0KTsKCQkvLyBmaXggd2lkdGggZm9yIGR5bmFtaWMgbnVtYmVyIG9mIGRhdGUgcGlja2VycwoJCS8vIGFuZCBhZGp1c3QgcG9zaXRpb24gYmVmb3JlIHNob3dpbmcKCQlvZmZzZXQgPSAkLmRhdGVwaWNrZXIuX2NoZWNrT2Zmc2V0KGluc3QsIG9mZnNldCwgaXNGaXhlZCk7CgkJaW5zdC5kcERpdi5jc3Moe3Bvc2l0aW9uOiAoJC5kYXRlcGlja2VyLl9pbkRpYWxvZyAmJiAkLmJsb2NrVUkgPwoJCQkic3RhdGljIiA6IChpc0ZpeGVkID8gImZpeGVkIiA6ICJhYnNvbHV0ZSIpKSwgZGlzcGxheTogIm5vbmUiLAoJCQlsZWZ0OiBvZmZzZXQubGVmdCArICJweCIsIHRvcDogb2Zmc2V0LnRvcCArICJweCJ9KTsKCgkJaWYgKCFpbnN0LmlubGluZSkgewoJCQlzaG93QW5pbSA9ICQuZGF0ZXBpY2tlci5fZ2V0KGluc3QsICJzaG93QW5pbSIpOwoJCQlkdXJhdGlvbiA9ICQuZGF0ZXBpY2tlci5fZ2V0KGluc3QsICJkdXJhdGlvbiIpOwoJCQlpbnN0LmRwRGl2LnpJbmRleCgkKGlucHV0KS56SW5kZXgoKSsxKTsKCQkJJC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyA9IHRydWU7CgoJCQlpZiAoICQuZWZmZWN0cyAmJiAkLmVmZmVjdHMuZWZmZWN0WyBzaG93QW5pbSBdICkgewoJCQkJaW5zdC5kcERpdi5zaG93KHNob3dBbmltLCAkLmRhdGVwaWNrZXIuX2dldChpbnN0LCAic2hvd09wdGlvbnMiKSwgZHVyYXRpb24pOwoJCQl9IGVsc2UgewoJCQkJaW5zdC5kcERpdltzaG93QW5pbSB8fCAic2hvdyJdKHNob3dBbmltID8gZHVyYXRpb24gOiBudWxsKTsKCQkJfQoKCQkJaWYgKCAkLmRhdGVwaWNrZXIuX3Nob3VsZEZvY3VzSW5wdXQoIGluc3QgKSApIHsKCQkJCWluc3QuaW5wdXQuZm9jdXMoKTsKCQkJfQoKCQkJJC5kYXRlcGlja2VyLl9jdXJJbnN0ID0gaW5zdDsKCQl9Cgl9LAoKCS8qIEdlbmVyYXRlIHRoZSBkYXRlIHBpY2tlciBjb250ZW50LiAqLwoJX3VwZGF0ZURhdGVwaWNrZXI6IGZ1bmN0aW9uKGluc3QpIHsKCQl0aGlzLm1heFJvd3MgPSA0OyAvL1Jlc2V0IHRoZSBtYXggbnVtYmVyIG9mIHJvd3MgYmVpbmcgZGlzcGxheWVkIChzZWUgIzcwNDMpCgkJaW5zdEFjdGl2ZSA9IGluc3Q7IC8vIGZvciBkZWxlZ2F0ZSBob3ZlciBldmVudHMKCQlpbnN0LmRwRGl2LmVtcHR5KCkuYXBwZW5kKHRoaXMuX2dlbmVyYXRlSFRNTChpbnN0KSk7CgkJdGhpcy5fYXR0YWNoSGFuZGxlcnMoaW5zdCk7CgkJaW5zdC5kcERpdi5maW5kKCIuIiArIHRoaXMuX2RheU92ZXJDbGFzcyArICIgYSIpLm1vdXNlb3ZlcigpOwoKCQl2YXIgb3JpZ3llYXJzaHRtbCwKCQkJbnVtTW9udGhzID0gdGhpcy5fZ2V0TnVtYmVyT2ZNb250aHMoaW5zdCksCgkJCWNvbHMgPSBudW1Nb250aHNbMV0sCgkJCXdpZHRoID0gMTc7CgoJCWluc3QuZHBEaXYucmVtb3ZlQ2xhc3MoInVpLWRhdGVwaWNrZXItbXVsdGktMiB1aS1kYXRlcGlja2VyLW11bHRpLTMgdWktZGF0ZXBpY2tlci1tdWx0aS00Iikud2lkdGgoIiIpOwoJCWlmIChjb2xzID4gMSkgewoJCQlpbnN0LmRwRGl2LmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLW11bHRpLSIgKyBjb2xzKS5jc3MoIndpZHRoIiwgKHdpZHRoICogY29scykgKyAiZW0iKTsKCQl9CgkJaW5zdC5kcERpdlsobnVtTW9udGhzWzBdICE9PSAxIHx8IG51bU1vbnRoc1sxXSAhPT0gMSA/ICJhZGQiIDogInJlbW92ZSIpICsKCQkJIkNsYXNzIl0oInVpLWRhdGVwaWNrZXItbXVsdGkiKTsKCQlpbnN0LmRwRGl2Wyh0aGlzLl9nZXQoaW5zdCwgImlzUlRMIikgPyAiYWRkIiA6ICJyZW1vdmUiKSArCgkJCSJDbGFzcyJdKCJ1aS1kYXRlcGlja2VyLXJ0bCIpOwoKCQlpZiAoaW5zdCA9PT0gJC5kYXRlcGlja2VyLl9jdXJJbnN0ICYmICQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcgJiYgJC5kYXRlcGlja2VyLl9zaG91bGRGb2N1c0lucHV0KCBpbnN0ICkgKSB7CgkJCWluc3QuaW5wdXQuZm9jdXMoKTsKCQl9CgoJCS8vIGRlZmZlcmVkIHJlbmRlciBvZiB0aGUgeWVhcnMgc2VsZWN0ICh0byBhdm9pZCBmbGFzaGVzIG9uIEZpcmVmb3gpCgkJaWYoIGluc3QueWVhcnNodG1sICl7CgkJCW9yaWd5ZWFyc2h0bWwgPSBpbnN0LnllYXJzaHRtbDsKCQkJc2V0VGltZW91dChmdW5jdGlvbigpewoJCQkJLy9hc3N1cmUgdGhhdCBpbnN0LnllYXJzaHRtbCBkaWRuJ3QgY2hhbmdlLgoJCQkJaWYoIG9yaWd5ZWFyc2h0bWwgPT09IGluc3QueWVhcnNodG1sICYmIGluc3QueWVhcnNodG1sICl7CgkJCQkJaW5zdC5kcERpdi5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyOmZpcnN0IikucmVwbGFjZVdpdGgoaW5zdC55ZWFyc2h0bWwpOwoJCQkJfQoJCQkJb3JpZ3llYXJzaHRtbCA9IGluc3QueWVhcnNodG1sID0gbnVsbDsKCQkJfSwgMCk7CgkJfQoJfSwKCgkvLyAjNjY5NCAtIGRvbid0IGZvY3VzIHRoZSBpbnB1dCBpZiBpdCdzIGFscmVhZHkgZm9jdXNlZAoJLy8gdGhpcyBicmVha3MgdGhlIGNoYW5nZSBldmVudCBpbiBJRQoJLy8gU3VwcG9ydDogSUUgYW5kIGpRdWVyeSA8MS45Cglfc2hvdWxkRm9jdXNJbnB1dDogZnVuY3Rpb24oIGluc3QgKSB7CgkJcmV0dXJuIGluc3QuaW5wdXQgJiYgaW5zdC5pbnB1dC5pcyggIjp2aXNpYmxlIiApICYmICFpbnN0LmlucHV0LmlzKCAiOmRpc2FibGVkIiApICYmICFpbnN0LmlucHV0LmlzKCAiOmZvY3VzIiApOwoJfSwKCgkvKiBDaGVjayBwb3NpdGlvbmluZyB0byByZW1haW4gb24gc2NyZWVuLiAqLwoJX2NoZWNrT2Zmc2V0OiBmdW5jdGlvbihpbnN0LCBvZmZzZXQsIGlzRml4ZWQpIHsKCQl2YXIgZHBXaWR0aCA9IGluc3QuZHBEaXYub3V0ZXJXaWR0aCgpLAoJCQlkcEhlaWdodCA9IGluc3QuZHBEaXYub3V0ZXJIZWlnaHQoKSwKCQkJaW5wdXRXaWR0aCA9IGluc3QuaW5wdXQgPyBpbnN0LmlucHV0Lm91dGVyV2lkdGgoKSA6IDAsCgkJCWlucHV0SGVpZ2h0ID0gaW5zdC5pbnB1dCA/IGluc3QuaW5wdXQub3V0ZXJIZWlnaHQoKSA6IDAsCgkJCXZpZXdXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCArIChpc0ZpeGVkID8gMCA6ICQoZG9jdW1lbnQpLnNjcm9sbExlZnQoKSksCgkJCXZpZXdIZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0ICsgKGlzRml4ZWQgPyAwIDogJChkb2N1bWVudCkuc2Nyb2xsVG9wKCkpOwoKCQlvZmZzZXQubGVmdCAtPSAodGhpcy5fZ2V0KGluc3QsICJpc1JUTCIpID8gKGRwV2lkdGggLSBpbnB1dFdpZHRoKSA6IDApOwoJCW9mZnNldC5sZWZ0IC09IChpc0ZpeGVkICYmIG9mZnNldC5sZWZ0ID09PSBpbnN0LmlucHV0Lm9mZnNldCgpLmxlZnQpID8gJChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpIDogMDsKCQlvZmZzZXQudG9wIC09IChpc0ZpeGVkICYmIG9mZnNldC50b3AgPT09IChpbnN0LmlucHV0Lm9mZnNldCgpLnRvcCArIGlucHV0SGVpZ2h0KSkgPyAkKGRvY3VtZW50KS5zY3JvbGxUb3AoKSA6IDA7CgoJCS8vIG5vdyBjaGVjayBpZiBkYXRlcGlja2VyIGlzIHNob3dpbmcgb3V0c2lkZSB3aW5kb3cgdmlld3BvcnQgLSBtb3ZlIHRvIGEgYmV0dGVyIHBsYWNlIGlmIHNvLgoJCW9mZnNldC5sZWZ0IC09IE1hdGgubWluKG9mZnNldC5sZWZ0LCAob2Zmc2V0LmxlZnQgKyBkcFdpZHRoID4gdmlld1dpZHRoICYmIHZpZXdXaWR0aCA+IGRwV2lkdGgpID8KCQkJTWF0aC5hYnMob2Zmc2V0LmxlZnQgKyBkcFdpZHRoIC0gdmlld1dpZHRoKSA6IDApOwoJCW9mZnNldC50b3AgLT0gTWF0aC5taW4ob2Zmc2V0LnRvcCwgKG9mZnNldC50b3AgKyBkcEhlaWdodCA+IHZpZXdIZWlnaHQgJiYgdmlld0hlaWdodCA+IGRwSGVpZ2h0KSA/CgkJCU1hdGguYWJzKGRwSGVpZ2h0ICsgaW5wdXRIZWlnaHQpIDogMCk7CgoJCXJldHVybiBvZmZzZXQ7Cgl9LAoKCS8qIEZpbmQgYW4gb2JqZWN0J3MgcG9zaXRpb24gb24gdGhlIHNjcmVlbi4gKi8KCV9maW5kUG9zOiBmdW5jdGlvbihvYmopIHsKCQl2YXIgcG9zaXRpb24sCgkJCWluc3QgPSB0aGlzLl9nZXRJbnN0KG9iaiksCgkJCWlzUlRMID0gdGhpcy5fZ2V0KGluc3QsICJpc1JUTCIpOwoKCQl3aGlsZSAob2JqICYmIChvYmoudHlwZSA9PT0gImhpZGRlbiIgfHwgb2JqLm5vZGVUeXBlICE9PSAxIHx8ICQuZXhwci5maWx0ZXJzLmhpZGRlbihvYmopKSkgewoJCQlvYmogPSBvYmpbaXNSVEwgPyAicHJldmlvdXNTaWJsaW5nIiA6ICJuZXh0U2libGluZyJdOwoJCX0KCgkJcG9zaXRpb24gPSAkKG9iaikub2Zmc2V0KCk7CgkJcmV0dXJuIFtwb3NpdGlvbi5sZWZ0LCBwb3NpdGlvbi50b3BdOwoJfSwKCgkvKiBIaWRlIHRoZSBkYXRlIHBpY2tlciBmcm9tIHZpZXcuCgkgKiBAcGFyYW0gIGlucHV0ICBlbGVtZW50IC0gdGhlIGlucHV0IGZpZWxkIGF0dGFjaGVkIHRvIHRoZSBkYXRlIHBpY2tlcgoJICovCglfaGlkZURhdGVwaWNrZXI6IGZ1bmN0aW9uKGlucHV0KSB7CgkJdmFyIHNob3dBbmltLCBkdXJhdGlvbiwgcG9zdFByb2Nlc3MsIG9uQ2xvc2UsCgkJCWluc3QgPSB0aGlzLl9jdXJJbnN0OwoKCQlpZiAoIWluc3QgfHwgKGlucHV0ICYmIGluc3QgIT09ICQuZGF0YShpbnB1dCwgUFJPUF9OQU1FKSkpIHsKCQkJcmV0dXJuOwoJCX0KCgkJaWYgKHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nKSB7CgkJCXNob3dBbmltID0gdGhpcy5fZ2V0KGluc3QsICJzaG93QW5pbSIpOwoJCQlkdXJhdGlvbiA9IHRoaXMuX2dldChpbnN0LCAiZHVyYXRpb24iKTsKCQkJcG9zdFByb2Nlc3MgPSBmdW5jdGlvbigpIHsKCQkJCSQuZGF0ZXBpY2tlci5fdGlkeURpYWxvZyhpbnN0KTsKCQkJfTsKCgkJCS8vIERFUFJFQ0FURUQ6IGFmdGVyIEJDIGZvciAxLjgueCAkLmVmZmVjdHNbIHNob3dBbmltIF0gaXMgbm90IG5lZWRlZAoJCQlpZiAoICQuZWZmZWN0cyAmJiAoICQuZWZmZWN0cy5lZmZlY3RbIHNob3dBbmltIF0gfHwgJC5lZmZlY3RzWyBzaG93QW5pbSBdICkgKSB7CgkJCQlpbnN0LmRwRGl2LmhpZGUoc2hvd0FuaW0sICQuZGF0ZXBpY2tlci5fZ2V0KGluc3QsICJzaG93T3B0aW9ucyIpLCBkdXJhdGlvbiwgcG9zdFByb2Nlc3MpOwoJCQl9IGVsc2UgewoJCQkJaW5zdC5kcERpdlsoc2hvd0FuaW0gPT09ICJzbGlkZURvd24iID8gInNsaWRlVXAiIDoKCQkJCQkoc2hvd0FuaW0gPT09ICJmYWRlSW4iID8gImZhZGVPdXQiIDogImhpZGUiKSldKChzaG93QW5pbSA/IGR1cmF0aW9uIDogbnVsbCksIHBvc3RQcm9jZXNzKTsKCQkJfQoKCQkJaWYgKCFzaG93QW5pbSkgewoJCQkJcG9zdFByb2Nlc3MoKTsKCQkJfQoJCQl0aGlzLl9kYXRlcGlja2VyU2hvd2luZyA9IGZhbHNlOwoKCQkJb25DbG9zZSA9IHRoaXMuX2dldChpbnN0LCAib25DbG9zZSIpOwoJCQlpZiAob25DbG9zZSkgewoJCQkJb25DbG9zZS5hcHBseSgoaW5zdC5pbnB1dCA/IGluc3QuaW5wdXRbMF0gOiBudWxsKSwgWyhpbnN0LmlucHV0ID8gaW5zdC5pbnB1dC52YWwoKSA6ICIiKSwgaW5zdF0pOwoJCQl9CgoJCQl0aGlzLl9sYXN0SW5wdXQgPSBudWxsOwoJCQlpZiAodGhpcy5faW5EaWFsb2cpIHsKCQkJCXRoaXMuX2RpYWxvZ0lucHV0LmNzcyh7IHBvc2l0aW9uOiAiYWJzb2x1dGUiLCBsZWZ0OiAiMCIsIHRvcDogIi0xMDBweCIgfSk7CgkJCQlpZiAoJC5ibG9ja1VJKSB7CgkJCQkJJC51bmJsb2NrVUkoKTsKCQkJCQkkKCJib2R5IikuYXBwZW5kKHRoaXMuZHBEaXYpOwoJCQkJfQoJCQl9CgkJCXRoaXMuX2luRGlhbG9nID0gZmFsc2U7CgkJfQoJfSwKCgkvKiBUaWR5IHVwIGFmdGVyIGEgZGlhbG9nIGRpc3BsYXkuICovCglfdGlkeURpYWxvZzogZnVuY3Rpb24oaW5zdCkgewoJCWluc3QuZHBEaXYucmVtb3ZlQ2xhc3ModGhpcy5fZGlhbG9nQ2xhc3MpLnVuYmluZCgiLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIiKTsKCX0sCgoJLyogQ2xvc2UgZGF0ZSBwaWNrZXIgaWYgY2xpY2tlZCBlbHNld2hlcmUuICovCglfY2hlY2tFeHRlcm5hbENsaWNrOiBmdW5jdGlvbihldmVudCkgewoJCWlmICghJC5kYXRlcGlja2VyLl9jdXJJbnN0KSB7CgkJCXJldHVybjsKCQl9CgoJCXZhciAkdGFyZ2V0ID0gJChldmVudC50YXJnZXQpLAoJCQlpbnN0ID0gJC5kYXRlcGlja2VyLl9nZXRJbnN0KCR0YXJnZXRbMF0pOwoKCQlpZiAoICggKCAkdGFyZ2V0WzBdLmlkICE9PSAkLmRhdGVwaWNrZXIuX21haW5EaXZJZCAmJgoJCQkJJHRhcmdldC5wYXJlbnRzKCIjIiArICQuZGF0ZXBpY2tlci5fbWFpbkRpdklkKS5sZW5ndGggPT09IDAgJiYKCQkJCSEkdGFyZ2V0Lmhhc0NsYXNzKCQuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpICYmCgkJCQkhJHRhcmdldC5jbG9zZXN0KCIuIiArICQuZGF0ZXBpY2tlci5fdHJpZ2dlckNsYXNzKS5sZW5ndGggJiYKCQkJCSQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcgJiYgISgkLmRhdGVwaWNrZXIuX2luRGlhbG9nICYmICQuYmxvY2tVSSkgKSApIHx8CgkJCSggJHRhcmdldC5oYXNDbGFzcygkLmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lKSAmJiAkLmRhdGVwaWNrZXIuX2N1ckluc3QgIT09IGluc3QgKSApIHsKCQkJCSQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTsKCQl9Cgl9LAoKCS8qIEFkanVzdCBvbmUgb2YgdGhlIGRhdGUgc3ViLWZpZWxkcy4gKi8KCV9hZGp1c3REYXRlOiBmdW5jdGlvbihpZCwgb2Zmc2V0LCBwZXJpb2QpIHsKCQl2YXIgdGFyZ2V0ID0gJChpZCksCgkJCWluc3QgPSB0aGlzLl9nZXRJbnN0KHRhcmdldFswXSk7CgoJCWlmICh0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcih0YXJnZXRbMF0pKSB7CgkJCXJldHVybjsKCQl9CgkJdGhpcy5fYWRqdXN0SW5zdERhdGUoaW5zdCwgb2Zmc2V0ICsKCQkJKHBlcmlvZCA9PT0gIk0iID8gdGhpcy5fZ2V0KGluc3QsICJzaG93Q3VycmVudEF0UG9zIikgOiAwKSwgLy8gdW5kbyBwb3NpdGlvbmluZwoJCQlwZXJpb2QpOwoJCXRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaW5zdCk7Cgl9LAoKCS8qIEFjdGlvbiBmb3IgY3VycmVudCBsaW5rLiAqLwoJX2dvdG9Ub2RheTogZnVuY3Rpb24oaWQpIHsKCQl2YXIgZGF0ZSwKCQkJdGFyZ2V0ID0gJChpZCksCgkJCWluc3QgPSB0aGlzLl9nZXRJbnN0KHRhcmdldFswXSk7CgoJCWlmICh0aGlzLl9nZXQoaW5zdCwgImdvdG9DdXJyZW50IikgJiYgaW5zdC5jdXJyZW50RGF5KSB7CgkJCWluc3Quc2VsZWN0ZWREYXkgPSBpbnN0LmN1cnJlbnREYXk7CgkJCWluc3QuZHJhd01vbnRoID0gaW5zdC5zZWxlY3RlZE1vbnRoID0gaW5zdC5jdXJyZW50TW9udGg7CgkJCWluc3QuZHJhd1llYXIgPSBpbnN0LnNlbGVjdGVkWWVhciA9IGluc3QuY3VycmVudFllYXI7CgkJfSBlbHNlIHsKCQkJZGF0ZSA9IG5ldyBEYXRlKCk7CgkJCWluc3Quc2VsZWN0ZWREYXkgPSBkYXRlLmdldERhdGUoKTsKCQkJaW5zdC5kcmF3TW9udGggPSBpbnN0LnNlbGVjdGVkTW9udGggPSBkYXRlLmdldE1vbnRoKCk7CgkJCWluc3QuZHJhd1llYXIgPSBpbnN0LnNlbGVjdGVkWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKCQl9CgkJdGhpcy5fbm90aWZ5Q2hhbmdlKGluc3QpOwoJCXRoaXMuX2FkanVzdERhdGUodGFyZ2V0KTsKCX0sCgoJLyogQWN0aW9uIGZvciBzZWxlY3RpbmcgYSBuZXcgbW9udGgveWVhci4gKi8KCV9zZWxlY3RNb250aFllYXI6IGZ1bmN0aW9uKGlkLCBzZWxlY3QsIHBlcmlvZCkgewoJCXZhciB0YXJnZXQgPSAkKGlkKSwKCQkJaW5zdCA9IHRoaXMuX2dldEluc3QodGFyZ2V0WzBdKTsKCgkJaW5zdFsic2VsZWN0ZWQiICsgKHBlcmlvZCA9PT0gIk0iID8gIk1vbnRoIiA6ICJZZWFyIildID0KCQlpbnN0WyJkcmF3IiArIChwZXJpb2QgPT09ICJNIiA/ICJNb250aCIgOiAiWWVhciIpXSA9CgkJCXBhcnNlSW50KHNlbGVjdC5vcHRpb25zW3NlbGVjdC5zZWxlY3RlZEluZGV4XS52YWx1ZSwxMCk7CgoJCXRoaXMuX25vdGlmeUNoYW5nZShpbnN0KTsKCQl0aGlzLl9hZGp1c3REYXRlKHRhcmdldCk7Cgl9LAoKCS8qIEFjdGlvbiBmb3Igc2VsZWN0aW5nIGEgZGF5LiAqLwoJX3NlbGVjdERheTogZnVuY3Rpb24oaWQsIG1vbnRoLCB5ZWFyLCB0ZCkgewoJCXZhciBpbnN0LAoJCQl0YXJnZXQgPSAkKGlkKTsKCgkJaWYgKCQodGQpLmhhc0NsYXNzKHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzKSB8fCB0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcih0YXJnZXRbMF0pKSB7CgkJCXJldHVybjsKCQl9CgoJCWluc3QgPSB0aGlzLl9nZXRJbnN0KHRhcmdldFswXSk7CgkJaW5zdC5zZWxlY3RlZERheSA9IGluc3QuY3VycmVudERheSA9ICQoImEiLCB0ZCkuaHRtbCgpOwoJCWluc3Quc2VsZWN0ZWRNb250aCA9IGluc3QuY3VycmVudE1vbnRoID0gbW9udGg7CgkJaW5zdC5zZWxlY3RlZFllYXIgPSBpbnN0LmN1cnJlbnRZZWFyID0geWVhcjsKCQl0aGlzLl9zZWxlY3REYXRlKGlkLCB0aGlzLl9mb3JtYXREYXRlKGluc3QsCgkJCWluc3QuY3VycmVudERheSwgaW5zdC5jdXJyZW50TW9udGgsIGluc3QuY3VycmVudFllYXIpKTsKCX0sCgoJLyogRXJhc2UgdGhlIGlucHV0IGZpZWxkIGFuZCBoaWRlIHRoZSBkYXRlIHBpY2tlci4gKi8KCV9jbGVhckRhdGU6IGZ1bmN0aW9uKGlkKSB7CgkJdmFyIHRhcmdldCA9ICQoaWQpOwoJCXRoaXMuX3NlbGVjdERhdGUodGFyZ2V0LCAiIik7Cgl9LAoKCS8qIFVwZGF0ZSB0aGUgaW5wdXQgZmllbGQgd2l0aCB0aGUgc2VsZWN0ZWQgZGF0ZS4gKi8KCV9zZWxlY3REYXRlOiBmdW5jdGlvbihpZCwgZGF0ZVN0cikgewoJCXZhciBvblNlbGVjdCwKCQkJdGFyZ2V0ID0gJChpZCksCgkJCWluc3QgPSB0aGlzLl9nZXRJbnN0KHRhcmdldFswXSk7CgoJCWRhdGVTdHIgPSAoZGF0ZVN0ciAhPSBudWxsID8gZGF0ZVN0ciA6IHRoaXMuX2Zvcm1hdERhdGUoaW5zdCkpOwoJCWlmIChpbnN0LmlucHV0KSB7CgkJCWluc3QuaW5wdXQudmFsKGRhdGVTdHIpOwoJCX0KCQl0aGlzLl91cGRhdGVBbHRlcm5hdGUoaW5zdCk7CgoJCW9uU2VsZWN0ID0gdGhpcy5fZ2V0KGluc3QsICJvblNlbGVjdCIpOwoJCWlmIChvblNlbGVjdCkgewoJCQlvblNlbGVjdC5hcHBseSgoaW5zdC5pbnB1dCA/IGluc3QuaW5wdXRbMF0gOiBudWxsKSwgW2RhdGVTdHIsIGluc3RdKTsgIC8vIHRyaWdnZXIgY3VzdG9tIGNhbGxiYWNrCgkJfSBlbHNlIGlmIChpbnN0LmlucHV0KSB7CgkJCWluc3QuaW5wdXQudHJpZ2dlcigiY2hhbmdlIik7IC8vIGZpcmUgdGhlIGNoYW5nZSBldmVudAoJCX0KCgkJaWYgKGluc3QuaW5saW5lKXsKCQkJdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihpbnN0KTsKCQl9IGVsc2UgewoJCQl0aGlzLl9oaWRlRGF0ZXBpY2tlcigpOwoJCQl0aGlzLl9sYXN0SW5wdXQgPSBpbnN0LmlucHV0WzBdOwoJCQlpZiAodHlwZW9mKGluc3QuaW5wdXRbMF0pICE9PSAib2JqZWN0IikgewoJCQkJaW5zdC5pbnB1dC5mb2N1cygpOyAvLyByZXN0b3JlIGZvY3VzCgkJCX0KCQkJdGhpcy5fbGFzdElucHV0ID0gbnVsbDsKCQl9Cgl9LAoKCS8qIFVwZGF0ZSBhbnkgYWx0ZXJuYXRlIGZpZWxkIHRvIHN5bmNocm9uaXNlIHdpdGggdGhlIG1haW4gZmllbGQuICovCglfdXBkYXRlQWx0ZXJuYXRlOiBmdW5jdGlvbihpbnN0KSB7CgkJdmFyIGFsdEZvcm1hdCwgZGF0ZSwgZGF0ZVN0ciwKCQkJYWx0RmllbGQgPSB0aGlzLl9nZXQoaW5zdCwgImFsdEZpZWxkIik7CgoJCWlmIChhbHRGaWVsZCkgeyAvLyB1cGRhdGUgYWx0ZXJuYXRlIGZpZWxkIHRvbwoJCQlhbHRGb3JtYXQgPSB0aGlzLl9nZXQoaW5zdCwgImFsdEZvcm1hdCIpIHx8IHRoaXMuX2dldChpbnN0LCAiZGF0ZUZvcm1hdCIpOwoJCQlkYXRlID0gdGhpcy5fZ2V0RGF0ZShpbnN0KTsKCQkJZGF0ZVN0ciA9IHRoaXMuZm9ybWF0RGF0ZShhbHRGb3JtYXQsIGRhdGUsIHRoaXMuX2dldEZvcm1hdENvbmZpZyhpbnN0KSk7CgkJCSQoYWx0RmllbGQpLmVhY2goZnVuY3Rpb24oKSB7ICQodGhpcykudmFsKGRhdGVTdHIpOyB9KTsKCQl9Cgl9LAoKCS8qIFNldCBhcyBiZWZvcmVTaG93RGF5IGZ1bmN0aW9uIHRvIHByZXZlbnQgc2VsZWN0aW9uIG9mIHdlZWtlbmRzLgoJICogQHBhcmFtICBkYXRlICBEYXRlIC0gdGhlIGRhdGUgdG8gY3VzdG9taXNlCgkgKiBAcmV0dXJuIFtib29sZWFuLCBzdHJpbmddIC0gaXMgdGhpcyBkYXRlIHNlbGVjdGFibGU/LCB3aGF0IGlzIGl0cyBDU1MgY2xhc3M/CgkgKi8KCW5vV2Vla2VuZHM6IGZ1bmN0aW9uKGRhdGUpIHsKCQl2YXIgZGF5ID0gZGF0ZS5nZXREYXkoKTsKCQlyZXR1cm4gWyhkYXkgPiAwICYmIGRheSA8IDYpLCAiIl07Cgl9LAoKCS8qIFNldCBhcyBjYWxjdWxhdGVXZWVrIHRvIGRldGVybWluZSB0aGUgd2VlayBvZiB0aGUgeWVhciBiYXNlZCBvbiB0aGUgSVNPIDg2MDEgZGVmaW5pdGlvbi4KCSAqIEBwYXJhbSAgZGF0ZSAgRGF0ZSAtIHRoZSBkYXRlIHRvIGdldCB0aGUgd2VlayBmb3IKCSAqIEByZXR1cm4gIG51bWJlciAtIHRoZSBudW1iZXIgb2YgdGhlIHdlZWsgd2l0aGluIHRoZSB5ZWFyIHRoYXQgY29udGFpbnMgdGhpcyBkYXRlCgkgKi8KCWlzbzg2MDFXZWVrOiBmdW5jdGlvbihkYXRlKSB7CgkJdmFyIHRpbWUsCgkJCWNoZWNrRGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpKTsKCgkJLy8gRmluZCBUaHVyc2RheSBvZiB0aGlzIHdlZWsgc3RhcnRpbmcgb24gTW9uZGF5CgkJY2hlY2tEYXRlLnNldERhdGUoY2hlY2tEYXRlLmdldERhdGUoKSArIDQgLSAoY2hlY2tEYXRlLmdldERheSgpIHx8IDcpKTsKCgkJdGltZSA9IGNoZWNrRGF0ZS5nZXRUaW1lKCk7CgkJY2hlY2tEYXRlLnNldE1vbnRoKDApOyAvLyBDb21wYXJlIHdpdGggSmFuIDEKCQljaGVja0RhdGUuc2V0RGF0ZSgxKTsKCQlyZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJvdW5kKCh0aW1lIC0gY2hlY2tEYXRlKSAvIDg2NDAwMDAwKSAvIDcpICsgMTsKCX0sCgoJLyogUGFyc2UgYSBzdHJpbmcgdmFsdWUgaW50byBhIGRhdGUgb2JqZWN0LgoJICogU2VlIGZvcm1hdERhdGUgYmVsb3cgZm9yIHRoZSBwb3NzaWJsZSBmb3JtYXRzLgoJICoKCSAqIEBwYXJhbSAgZm9ybWF0IHN0cmluZyAtIHRoZSBleHBlY3RlZCBmb3JtYXQgb2YgdGhlIGRhdGUKCSAqIEBwYXJhbSAgdmFsdWUgc3RyaW5nIC0gdGhlIGRhdGUgaW4gdGhlIGFib3ZlIGZvcm1hdAoJICogQHBhcmFtICBzZXR0aW5ncyBPYmplY3QgLSBhdHRyaWJ1dGVzIGluY2x1ZGU6CgkgKgkJCQkJc2hvcnRZZWFyQ3V0b2ZmICBudW1iZXIgLSB0aGUgY3V0b2ZmIHllYXIgZm9yIGRldGVybWluaW5nIHRoZSBjZW50dXJ5IChvcHRpb25hbCkKCSAqCQkJCQlkYXlOYW1lc1Nob3J0CXN0cmluZ1s3XSAtIGFiYnJldmlhdGVkIG5hbWVzIG9mIHRoZSBkYXlzIGZyb20gU3VuZGF5IChvcHRpb25hbCkKCSAqCQkJCQlkYXlOYW1lcwkJc3RyaW5nWzddIC0gbmFtZXMgb2YgdGhlIGRheXMgZnJvbSBTdW5kYXkgKG9wdGlvbmFsKQoJICoJCQkJCW1vbnRoTmFtZXNTaG9ydCBzdHJpbmdbMTJdIC0gYWJicmV2aWF0ZWQgbmFtZXMgb2YgdGhlIG1vbnRocyAob3B0aW9uYWwpCgkgKgkJCQkJbW9udGhOYW1lcwkJc3RyaW5nWzEyXSAtIG5hbWVzIG9mIHRoZSBtb250aHMgKG9wdGlvbmFsKQoJICogQHJldHVybiAgRGF0ZSAtIHRoZSBleHRyYWN0ZWQgZGF0ZSB2YWx1ZSBvciBudWxsIGlmIHZhbHVlIGlzIGJsYW5rCgkgKi8KCXBhcnNlRGF0ZTogZnVuY3Rpb24gKGZvcm1hdCwgdmFsdWUsIHNldHRpbmdzKSB7CgkJaWYgKGZvcm1hdCA9PSBudWxsIHx8IHZhbHVlID09IG51bGwpIHsKCQkJdGhyb3cgIkludmFsaWQgYXJndW1lbnRzIjsKCQl9CgoJCXZhbHVlID0gKHR5cGVvZiB2YWx1ZSA9PT0gIm9iamVjdCIgPyB2YWx1ZS50b1N0cmluZygpIDogdmFsdWUgKyAiIik7CgkJaWYgKHZhbHVlID09PSAiIikgewoJCQlyZXR1cm4gbnVsbDsKCQl9CgoJCXZhciBpRm9ybWF0LCBkaW0sIGV4dHJhLAoJCQlpVmFsdWUgPSAwLAoJCQlzaG9ydFllYXJDdXRvZmZUZW1wID0gKHNldHRpbmdzID8gc2V0dGluZ3Muc2hvcnRZZWFyQ3V0b2ZmIDogbnVsbCkgfHwgdGhpcy5fZGVmYXVsdHMuc2hvcnRZZWFyQ3V0b2ZmLAoJCQlzaG9ydFllYXJDdXRvZmYgPSAodHlwZW9mIHNob3J0WWVhckN1dG9mZlRlbXAgIT09ICJzdHJpbmciID8gc2hvcnRZZWFyQ3V0b2ZmVGVtcCA6CgkJCQluZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkgJSAxMDAgKyBwYXJzZUludChzaG9ydFllYXJDdXRvZmZUZW1wLCAxMCkpLAoJCQlkYXlOYW1lc1Nob3J0ID0gKHNldHRpbmdzID8gc2V0dGluZ3MuZGF5TmFtZXNTaG9ydCA6IG51bGwpIHx8IHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzU2hvcnQsCgkJCWRheU5hbWVzID0gKHNldHRpbmdzID8gc2V0dGluZ3MuZGF5TmFtZXMgOiBudWxsKSB8fCB0aGlzLl9kZWZhdWx0cy5kYXlOYW1lcywKCQkJbW9udGhOYW1lc1Nob3J0ID0gKHNldHRpbmdzID8gc2V0dGluZ3MubW9udGhOYW1lc1Nob3J0IDogbnVsbCkgfHwgdGhpcy5fZGVmYXVsdHMubW9udGhOYW1lc1Nob3J0LAoJCQltb250aE5hbWVzID0gKHNldHRpbmdzID8gc2V0dGluZ3MubW9udGhOYW1lcyA6IG51bGwpIHx8IHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXMsCgkJCXllYXIgPSAtMSwKCQkJbW9udGggPSAtMSwKCQkJZGF5ID0gLTEsCgkJCWRveSA9IC0xLAoJCQlsaXRlcmFsID0gZmFsc2UsCgkJCWRhdGUsCgkJCS8vIENoZWNrIHdoZXRoZXIgYSBmb3JtYXQgY2hhcmFjdGVyIGlzIGRvdWJsZWQKCQkJbG9va0FoZWFkID0gZnVuY3Rpb24obWF0Y2gpIHsKCQkJCXZhciBtYXRjaGVzID0gKGlGb3JtYXQgKyAxIDwgZm9ybWF0Lmxlbmd0aCAmJiBmb3JtYXQuY2hhckF0KGlGb3JtYXQgKyAxKSA9PT0gbWF0Y2gpOwoJCQkJaWYgKG1hdGNoZXMpIHsKCQkJCQlpRm9ybWF0Kys7CgkJCQl9CgkJCQlyZXR1cm4gbWF0Y2hlczsKCQkJfSwKCQkJLy8gRXh0cmFjdCBhIG51bWJlciBmcm9tIHRoZSBzdHJpbmcgdmFsdWUKCQkJZ2V0TnVtYmVyID0gZnVuY3Rpb24obWF0Y2gpIHsKCQkJCXZhciBpc0RvdWJsZWQgPSBsb29rQWhlYWQobWF0Y2gpLAoJCQkJCXNpemUgPSAobWF0Y2ggPT09ICJAIiA/IDE0IDogKG1hdGNoID09PSAiISIgPyAyMCA6CgkJCQkJKG1hdGNoID09PSAieSIgJiYgaXNEb3VibGVkID8gNCA6IChtYXRjaCA9PT0gIm8iID8gMyA6IDIpKSkpLAoJCQkJCWRpZ2l0cyA9IG5ldyBSZWdFeHAoIl5cXGR7MSwiICsgc2l6ZSArICJ9IiksCgkJCQkJbnVtID0gdmFsdWUuc3Vic3RyaW5nKGlWYWx1ZSkubWF0Y2goZGlnaXRzKTsKCQkJCWlmICghbnVtKSB7CgkJCQkJdGhyb3cgIk1pc3NpbmcgbnVtYmVyIGF0IHBvc2l0aW9uICIgKyBpVmFsdWU7CgkJCQl9CgkJCQlpVmFsdWUgKz0gbnVtWzBdLmxlbmd0aDsKCQkJCXJldHVybiBwYXJzZUludChudW1bMF0sIDEwKTsKCQkJfSwKCQkJLy8gRXh0cmFjdCBhIG5hbWUgZnJvbSB0aGUgc3RyaW5nIHZhbHVlIGFuZCBjb252ZXJ0IHRvIGFuIGluZGV4CgkJCWdldE5hbWUgPSBmdW5jdGlvbihtYXRjaCwgc2hvcnROYW1lcywgbG9uZ05hbWVzKSB7CgkJCQl2YXIgaW5kZXggPSAtMSwKCQkJCQluYW1lcyA9ICQubWFwKGxvb2tBaGVhZChtYXRjaCkgPyBsb25nTmFtZXMgOiBzaG9ydE5hbWVzLCBmdW5jdGlvbiAodiwgaykgewoJCQkJCQlyZXR1cm4gWyBbaywgdl0gXTsKCQkJCQl9KS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7CgkJCQkJCXJldHVybiAtKGFbMV0ubGVuZ3RoIC0gYlsxXS5sZW5ndGgpOwoJCQkJCX0pOwoKCQkJCSQuZWFjaChuYW1lcywgZnVuY3Rpb24gKGksIHBhaXIpIHsKCQkJCQl2YXIgbmFtZSA9IHBhaXJbMV07CgkJCQkJaWYgKHZhbHVlLnN1YnN0cihpVmFsdWUsIG5hbWUubGVuZ3RoKS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCkpIHsKCQkJCQkJaW5kZXggPSBwYWlyWzBdOwoJCQkJCQlpVmFsdWUgKz0gbmFtZS5sZW5ndGg7CgkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQl9CgkJCQl9KTsKCQkJCWlmIChpbmRleCAhPT0gLTEpIHsKCQkJCQlyZXR1cm4gaW5kZXggKyAxOwoJCQkJfSBlbHNlIHsKCQkJCQl0aHJvdyAiVW5rbm93biBuYW1lIGF0IHBvc2l0aW9uICIgKyBpVmFsdWU7CgkJCQl9CgkJCX0sCgkJCS8vIENvbmZpcm0gdGhhdCBhIGxpdGVyYWwgY2hhcmFjdGVyIG1hdGNoZXMgdGhlIHN0cmluZyB2YWx1ZQoJCQljaGVja0xpdGVyYWwgPSBmdW5jdGlvbigpIHsKCQkJCWlmICh2YWx1ZS5jaGFyQXQoaVZhbHVlKSAhPT0gZm9ybWF0LmNoYXJBdChpRm9ybWF0KSkgewoJCQkJCXRocm93ICJVbmV4cGVjdGVkIGxpdGVyYWwgYXQgcG9zaXRpb24gIiArIGlWYWx1ZTsKCQkJCX0KCQkJCWlWYWx1ZSsrOwoJCQl9OwoKCQlmb3IgKGlGb3JtYXQgPSAwOyBpRm9ybWF0IDwgZm9ybWF0Lmxlbmd0aDsgaUZvcm1hdCsrKSB7CgkJCWlmIChsaXRlcmFsKSB7CgkJCQlpZiAoZm9ybWF0LmNoYXJBdChpRm9ybWF0KSA9PT0gIiciICYmICFsb29rQWhlYWQoIiciKSkgewoJCQkJCWxpdGVyYWwgPSBmYWxzZTsKCQkJCX0gZWxzZSB7CgkJCQkJY2hlY2tMaXRlcmFsKCk7CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQlzd2l0Y2ggKGZvcm1hdC5jaGFyQXQoaUZvcm1hdCkpIHsKCQkJCQljYXNlICJkIjoKCQkJCQkJZGF5ID0gZ2V0TnVtYmVyKCJkIik7CgkJCQkJCWJyZWFrOwoJCQkJCWNhc2UgIkQiOgoJCQkJCQlnZXROYW1lKCJEIiwgZGF5TmFtZXNTaG9ydCwgZGF5TmFtZXMpOwoJCQkJCQlicmVhazsKCQkJCQljYXNlICJvIjoKCQkJCQkJZG95ID0gZ2V0TnVtYmVyKCJvIik7CgkJCQkJCWJyZWFrOwoJCQkJCWNhc2UgIm0iOgoJCQkJCQltb250aCA9IGdldE51bWJlcigibSIpOwoJCQkJCQlicmVhazsKCQkJCQljYXNlICJNIjoKCQkJCQkJbW9udGggPSBnZXROYW1lKCJNIiwgbW9udGhOYW1lc1Nob3J0LCBtb250aE5hbWVzKTsKCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSAieSI6CgkJCQkJCXllYXIgPSBnZXROdW1iZXIoInkiKTsKCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSAiQCI6CgkJCQkJCWRhdGUgPSBuZXcgRGF0ZShnZXROdW1iZXIoIkAiKSk7CgkJCQkJCXllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7CgkJCQkJCW1vbnRoID0gZGF0ZS5nZXRNb250aCgpICsgMTsKCQkJCQkJZGF5ID0gZGF0ZS5nZXREYXRlKCk7CgkJCQkJCWJyZWFrOwoJCQkJCWNhc2UgIiEiOgoJCQkJCQlkYXRlID0gbmV3IERhdGUoKGdldE51bWJlcigiISIpIC0gdGhpcy5fdGlja3NUbzE5NzApIC8gMTAwMDApOwoJCQkJCQl5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpOwoJCQkJCQltb250aCA9IGRhdGUuZ2V0TW9udGgoKSArIDE7CgkJCQkJCWRheSA9IGRhdGUuZ2V0RGF0ZSgpOwoJCQkJCQlicmVhazsKCQkJCQljYXNlICInIjoKCQkJCQkJaWYgKGxvb2tBaGVhZCgiJyIpKXsKCQkJCQkJCWNoZWNrTGl0ZXJhbCgpOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJbGl0ZXJhbCA9IHRydWU7CgkJCQkJCX0KCQkJCQkJYnJlYWs7CgkJCQkJZGVmYXVsdDoKCQkJCQkJY2hlY2tMaXRlcmFsKCk7CgkJCQl9CgkJCX0KCQl9CgoJCWlmIChpVmFsdWUgPCB2YWx1ZS5sZW5ndGgpewoJCQlleHRyYSA9IHZhbHVlLnN1YnN0cihpVmFsdWUpOwoJCQlpZiAoIS9eXHMrLy50ZXN0KGV4dHJhKSkgewoJCQkJdGhyb3cgIkV4dHJhL3VucGFyc2VkIGNoYXJhY3RlcnMgZm91bmQgaW4gZGF0ZTogIiArIGV4dHJhOwoJCQl9CgkJfQoKCQlpZiAoeWVhciA9PT0gLTEpIHsKCQkJeWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTsKCQl9IGVsc2UgaWYgKHllYXIgPCAxMDApIHsKCQkJeWVhciArPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkgLSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkgJSAxMDAgKwoJCQkJKHllYXIgPD0gc2hvcnRZZWFyQ3V0b2ZmID8gMCA6IC0xMDApOwoJCX0KCgkJaWYgKGRveSA+IC0xKSB7CgkJCW1vbnRoID0gMTsKCQkJZGF5ID0gZG95OwoJCQlkbyB7CgkJCQlkaW0gPSB0aGlzLl9nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCAtIDEpOwoJCQkJaWYgKGRheSA8PSBkaW0pIHsKCQkJCQlicmVhazsKCQkJCX0KCQkJCW1vbnRoKys7CgkJCQlkYXkgLT0gZGltOwoJCQl9IHdoaWxlICh0cnVlKTsKCQl9CgoJCWRhdGUgPSB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSkpOwoJCWlmIChkYXRlLmdldEZ1bGxZZWFyKCkgIT09IHllYXIgfHwgZGF0ZS5nZXRNb250aCgpICsgMSAhPT0gbW9udGggfHwgZGF0ZS5nZXREYXRlKCkgIT09IGRheSkgewoJCQl0aHJvdyAiSW52YWxpZCBkYXRlIjsgLy8gRS5nLiAzMS8wMi8wMAoJCX0KCQlyZXR1cm4gZGF0ZTsKCX0sCgoJLyogU3RhbmRhcmQgZGF0ZSBmb3JtYXRzLiAqLwoJQVRPTTogInl5LW1tLWRkIiwgLy8gUkZDIDMzMzkgKElTTyA4NjAxKQoJQ09PS0lFOiAiRCwgZGQgTSB5eSIsCglJU09fODYwMTogInl5LW1tLWRkIiwKCVJGQ184MjI6ICJELCBkIE0geSIsCglSRkNfODUwOiAiREQsIGRkLU0teSIsCglSRkNfMTAzNjogIkQsIGQgTSB5IiwKCVJGQ18xMTIzOiAiRCwgZCBNIHl5IiwKCVJGQ18yODIyOiAiRCwgZCBNIHl5IiwKCVJTUzogIkQsIGQgTSB5IiwgLy8gUkZDIDgyMgoJVElDS1M6ICIhIiwKCVRJTUVTVEFNUDogIkAiLAoJVzNDOiAieXktbW0tZGQiLCAvLyBJU08gODYwMQoKCV90aWNrc1RvMTk3MDogKCgoMTk3MCAtIDEpICogMzY1ICsgTWF0aC5mbG9vcigxOTcwIC8gNCkgLSBNYXRoLmZsb29yKDE5NzAgLyAxMDApICsKCQlNYXRoLmZsb29yKDE5NzAgLyA0MDApKSAqIDI0ICogNjAgKiA2MCAqIDEwMDAwMDAwKSwKCgkvKiBGb3JtYXQgYSBkYXRlIG9iamVjdCBpbnRvIGEgc3RyaW5nIHZhbHVlLgoJICogVGhlIGZvcm1hdCBjYW4gYmUgY29tYmluYXRpb25zIG9mIHRoZSBmb2xsb3dpbmc6CgkgKiBkICAtIGRheSBvZiBtb250aCAobm8gbGVhZGluZyB6ZXJvKQoJICogZGQgLSBkYXkgb2YgbW9udGggKHR3byBkaWdpdCkKCSAqIG8gIC0gZGF5IG9mIHllYXIgKG5vIGxlYWRpbmcgemVyb3MpCgkgKiBvbyAtIGRheSBvZiB5ZWFyICh0aHJlZSBkaWdpdCkKCSAqIEQgIC0gZGF5IG5hbWUgc2hvcnQKCSAqIEREIC0gZGF5IG5hbWUgbG9uZwoJICogbSAgLSBtb250aCBvZiB5ZWFyIChubyBsZWFkaW5nIHplcm8pCgkgKiBtbSAtIG1vbnRoIG9mIHllYXIgKHR3byBkaWdpdCkKCSAqIE0gIC0gbW9udGggbmFtZSBzaG9ydAoJICogTU0gLSBtb250aCBuYW1lIGxvbmcKCSAqIHkgIC0geWVhciAodHdvIGRpZ2l0KQoJICogeXkgLSB5ZWFyIChmb3VyIGRpZ2l0KQoJICogQCAtIFVuaXggdGltZXN0YW1wIChtcyBzaW5jZSAwMS8wMS8xOTcwKQoJICogISAtIFdpbmRvd3MgdGlja3MgKDEwMG5zIHNpbmNlIDAxLzAxLzAwMDEpCgkgKiAiLi4uIiAtIGxpdGVyYWwgdGV4dAoJICogJycgLSBzaW5nbGUgcXVvdGUKCSAqCgkgKiBAcGFyYW0gIGZvcm1hdCBzdHJpbmcgLSB0aGUgZGVzaXJlZCBmb3JtYXQgb2YgdGhlIGRhdGUKCSAqIEBwYXJhbSAgZGF0ZSBEYXRlIC0gdGhlIGRhdGUgdmFsdWUgdG8gZm9ybWF0CgkgKiBAcGFyYW0gIHNldHRpbmdzIE9iamVjdCAtIGF0dHJpYnV0ZXMgaW5jbHVkZToKCSAqCQkJCQlkYXlOYW1lc1Nob3J0CXN0cmluZ1s3XSAtIGFiYnJldmlhdGVkIG5hbWVzIG9mIHRoZSBkYXlzIGZyb20gU3VuZGF5IChvcHRpb25hbCkKCSAqCQkJCQlkYXlOYW1lcwkJc3RyaW5nWzddIC0gbmFtZXMgb2YgdGhlIGRheXMgZnJvbSBTdW5kYXkgKG9wdGlvbmFsKQoJICoJCQkJCW1vbnRoTmFtZXNTaG9ydCBzdHJpbmdbMTJdIC0gYWJicmV2aWF0ZWQgbmFtZXMgb2YgdGhlIG1vbnRocyAob3B0aW9uYWwpCgkgKgkJCQkJbW9udGhOYW1lcwkJc3RyaW5nWzEyXSAtIG5hbWVzIG9mIHRoZSBtb250aHMgKG9wdGlvbmFsKQoJICogQHJldHVybiAgc3RyaW5nIC0gdGhlIGRhdGUgaW4gdGhlIGFib3ZlIGZvcm1hdAoJICovCglmb3JtYXREYXRlOiBmdW5jdGlvbiAoZm9ybWF0LCBkYXRlLCBzZXR0aW5ncykgewoJCWlmICghZGF0ZSkgewoJCQlyZXR1cm4gIiI7CgkJfQoKCQl2YXIgaUZvcm1hdCwKCQkJZGF5TmFtZXNTaG9ydCA9IChzZXR0aW5ncyA/IHNldHRpbmdzLmRheU5hbWVzU2hvcnQgOiBudWxsKSB8fCB0aGlzLl9kZWZhdWx0cy5kYXlOYW1lc1Nob3J0LAoJCQlkYXlOYW1lcyA9IChzZXR0aW5ncyA/IHNldHRpbmdzLmRheU5hbWVzIDogbnVsbCkgfHwgdGhpcy5fZGVmYXVsdHMuZGF5TmFtZXMsCgkJCW1vbnRoTmFtZXNTaG9ydCA9IChzZXR0aW5ncyA/IHNldHRpbmdzLm1vbnRoTmFtZXNTaG9ydCA6IG51bGwpIHx8IHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCwKCQkJbW9udGhOYW1lcyA9IChzZXR0aW5ncyA/IHNldHRpbmdzLm1vbnRoTmFtZXMgOiBudWxsKSB8fCB0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzLAoJCQkvLyBDaGVjayB3aGV0aGVyIGEgZm9ybWF0IGNoYXJhY3RlciBpcyBkb3VibGVkCgkJCWxvb2tBaGVhZCA9IGZ1bmN0aW9uKG1hdGNoKSB7CgkJCQl2YXIgbWF0Y2hlcyA9IChpRm9ybWF0ICsgMSA8IGZvcm1hdC5sZW5ndGggJiYgZm9ybWF0LmNoYXJBdChpRm9ybWF0ICsgMSkgPT09IG1hdGNoKTsKCQkJCWlmIChtYXRjaGVzKSB7CgkJCQkJaUZvcm1hdCsrOwoJCQkJfQoJCQkJcmV0dXJuIG1hdGNoZXM7CgkJCX0sCgkJCS8vIEZvcm1hdCBhIG51bWJlciwgd2l0aCBsZWFkaW5nIHplcm8gaWYgbmVjZXNzYXJ5CgkJCWZvcm1hdE51bWJlciA9IGZ1bmN0aW9uKG1hdGNoLCB2YWx1ZSwgbGVuKSB7CgkJCQl2YXIgbnVtID0gIiIgKyB2YWx1ZTsKCQkJCWlmIChsb29rQWhlYWQobWF0Y2gpKSB7CgkJCQkJd2hpbGUgKG51bS5sZW5ndGggPCBsZW4pIHsKCQkJCQkJbnVtID0gIjAiICsgbnVtOwoJCQkJCX0KCQkJCX0KCQkJCXJldHVybiBudW07CgkJCX0sCgkJCS8vIEZvcm1hdCBhIG5hbWUsIHNob3J0IG9yIGxvbmcgYXMgcmVxdWVzdGVkCgkJCWZvcm1hdE5hbWUgPSBmdW5jdGlvbihtYXRjaCwgdmFsdWUsIHNob3J0TmFtZXMsIGxvbmdOYW1lcykgewoJCQkJcmV0dXJuIChsb29rQWhlYWQobWF0Y2gpID8gbG9uZ05hbWVzW3ZhbHVlXSA6IHNob3J0TmFtZXNbdmFsdWVdKTsKCQkJfSwKCQkJb3V0cHV0ID0gIiIsCgkJCWxpdGVyYWwgPSBmYWxzZTsKCgkJaWYgKGRhdGUpIHsKCQkJZm9yIChpRm9ybWF0ID0gMDsgaUZvcm1hdCA8IGZvcm1hdC5sZW5ndGg7IGlGb3JtYXQrKykgewoJCQkJaWYgKGxpdGVyYWwpIHsKCQkJCQlpZiAoZm9ybWF0LmNoYXJBdChpRm9ybWF0KSA9PT0gIiciICYmICFsb29rQWhlYWQoIiciKSkgewoJCQkJCQlsaXRlcmFsID0gZmFsc2U7CgkJCQkJfSBlbHNlIHsKCQkJCQkJb3V0cHV0ICs9IGZvcm1hdC5jaGFyQXQoaUZvcm1hdCk7CgkJCQkJfQoJCQkJfSBlbHNlIHsKCQkJCQlzd2l0Y2ggKGZvcm1hdC5jaGFyQXQoaUZvcm1hdCkpIHsKCQkJCQkJY2FzZSAiZCI6CgkJCQkJCQlvdXRwdXQgKz0gZm9ybWF0TnVtYmVyKCJkIiwgZGF0ZS5nZXREYXRlKCksIDIpOwoJCQkJCQkJYnJlYWs7CgkJCQkJCWNhc2UgIkQiOgoJCQkJCQkJb3V0cHV0ICs9IGZvcm1hdE5hbWUoIkQiLCBkYXRlLmdldERheSgpLCBkYXlOYW1lc1Nob3J0LCBkYXlOYW1lcyk7CgkJCQkJCQlicmVhazsKCQkJCQkJY2FzZSAibyI6CgkJCQkJCQlvdXRwdXQgKz0gZm9ybWF0TnVtYmVyKCJvIiwKCQkJCQkJCQlNYXRoLnJvdW5kKChuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMCwgMCkuZ2V0VGltZSgpKSAvIDg2NDAwMDAwKSwgMyk7CgkJCQkJCQlicmVhazsKCQkJCQkJY2FzZSAibSI6CgkJCQkJCQlvdXRwdXQgKz0gZm9ybWF0TnVtYmVyKCJtIiwgZGF0ZS5nZXRNb250aCgpICsgMSwgMik7CgkJCQkJCQlicmVhazsKCQkJCQkJY2FzZSAiTSI6CgkJCQkJCQlvdXRwdXQgKz0gZm9ybWF0TmFtZSgiTSIsIGRhdGUuZ2V0TW9udGgoKSwgbW9udGhOYW1lc1Nob3J0LCBtb250aE5hbWVzKTsKCQkJCQkJCWJyZWFrOwoJCQkJCQljYXNlICJ5IjoKCQkJCQkJCW91dHB1dCArPSAobG9va0FoZWFkKCJ5IikgPyBkYXRlLmdldEZ1bGxZZWFyKCkgOgoJCQkJCQkJCShkYXRlLmdldFllYXIoKSAlIDEwMCA8IDEwID8gIjAiIDogIiIpICsgZGF0ZS5nZXRZZWFyKCkgJSAxMDApOwoJCQkJCQkJYnJlYWs7CgkJCQkJCWNhc2UgIkAiOgoJCQkJCQkJb3V0cHV0ICs9IGRhdGUuZ2V0VGltZSgpOwoJCQkJCQkJYnJlYWs7CgkJCQkJCWNhc2UgIiEiOgoJCQkJCQkJb3V0cHV0ICs9IGRhdGUuZ2V0VGltZSgpICogMTAwMDAgKyB0aGlzLl90aWNrc1RvMTk3MDsKCQkJCQkJCWJyZWFrOwoJCQkJCQljYXNlICInIjoKCQkJCQkJCWlmIChsb29rQWhlYWQoIiciKSkgewoJCQkJCQkJCW91dHB1dCArPSAiJyI7CgkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCWxpdGVyYWwgPSB0cnVlOwoJCQkJCQkJfQoJCQkJCQkJYnJlYWs7CgkJCQkJCWRlZmF1bHQ6CgkJCQkJCQlvdXRwdXQgKz0gZm9ybWF0LmNoYXJBdChpRm9ybWF0KTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuIG91dHB1dDsKCX0sCgoJLyogRXh0cmFjdCBhbGwgcG9zc2libGUgY2hhcmFjdGVycyBmcm9tIHRoZSBkYXRlIGZvcm1hdC4gKi8KCV9wb3NzaWJsZUNoYXJzOiBmdW5jdGlvbiAoZm9ybWF0KSB7CgkJdmFyIGlGb3JtYXQsCgkJCWNoYXJzID0gIiIsCgkJCWxpdGVyYWwgPSBmYWxzZSwKCQkJLy8gQ2hlY2sgd2hldGhlciBhIGZvcm1hdCBjaGFyYWN0ZXIgaXMgZG91YmxlZAoJCQlsb29rQWhlYWQgPSBmdW5jdGlvbihtYXRjaCkgewoJCQkJdmFyIG1hdGNoZXMgPSAoaUZvcm1hdCArIDEgPCBmb3JtYXQubGVuZ3RoICYmIGZvcm1hdC5jaGFyQXQoaUZvcm1hdCArIDEpID09PSBtYXRjaCk7CgkJCQlpZiAobWF0Y2hlcykgewoJCQkJCWlGb3JtYXQrKzsKCQkJCX0KCQkJCXJldHVybiBtYXRjaGVzOwoJCQl9OwoKCQlmb3IgKGlGb3JtYXQgPSAwOyBpRm9ybWF0IDwgZm9ybWF0Lmxlbmd0aDsgaUZvcm1hdCsrKSB7CgkJCWlmIChsaXRlcmFsKSB7CgkJCQlpZiAoZm9ybWF0LmNoYXJBdChpRm9ybWF0KSA9PT0gIiciICYmICFsb29rQWhlYWQoIiciKSkgewoJCQkJCWxpdGVyYWwgPSBmYWxzZTsKCQkJCX0gZWxzZSB7CgkJCQkJY2hhcnMgKz0gZm9ybWF0LmNoYXJBdChpRm9ybWF0KTsKCQkJCX0KCQkJfSBlbHNlIHsKCQkJCXN3aXRjaCAoZm9ybWF0LmNoYXJBdChpRm9ybWF0KSkgewoJCQkJCWNhc2UgImQiOiBjYXNlICJtIjogY2FzZSAieSI6IGNhc2UgIkAiOgoJCQkJCQljaGFycyArPSAiMDEyMzQ1Njc4OSI7CgkJCQkJCWJyZWFrOwoJCQkJCWNhc2UgIkQiOiBjYXNlICJNIjoKCQkJCQkJcmV0dXJuIG51bGw7IC8vIEFjY2VwdCBhbnl0aGluZwoJCQkJCWNhc2UgIiciOgoJCQkJCQlpZiAobG9va0FoZWFkKCInIikpIHsKCQkJCQkJCWNoYXJzICs9ICInIjsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCWxpdGVyYWwgPSB0cnVlOwoJCQkJCQl9CgkJCQkJCWJyZWFrOwoJCQkJCWRlZmF1bHQ6CgkJCQkJCWNoYXJzICs9IGZvcm1hdC5jaGFyQXQoaUZvcm1hdCk7CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuIGNoYXJzOwoJfSwKCgkvKiBHZXQgYSBzZXR0aW5nIHZhbHVlLCBkZWZhdWx0aW5nIGlmIG5lY2Vzc2FyeS4gKi8KCV9nZXQ6IGZ1bmN0aW9uKGluc3QsIG5hbWUpIHsKCQlyZXR1cm4gaW5zdC5zZXR0aW5nc1tuYW1lXSAhPT0gdW5kZWZpbmVkID8KCQkJaW5zdC5zZXR0aW5nc1tuYW1lXSA6IHRoaXMuX2RlZmF1bHRzW25hbWVdOwoJfSwKCgkvKiBQYXJzZSBleGlzdGluZyBkYXRlIGFuZCBpbml0aWFsaXNlIGRhdGUgcGlja2VyLiAqLwoJX3NldERhdGVGcm9tRmllbGQ6IGZ1bmN0aW9uKGluc3QsIG5vRGVmYXVsdCkgewoJCWlmIChpbnN0LmlucHV0LnZhbCgpID09PSBpbnN0Lmxhc3RWYWwpIHsKCQkJcmV0dXJuOwoJCX0KCgkJdmFyIGRhdGVGb3JtYXQgPSB0aGlzLl9nZXQoaW5zdCwgImRhdGVGb3JtYXQiKSwKCQkJZGF0ZXMgPSBpbnN0Lmxhc3RWYWwgPSBpbnN0LmlucHV0ID8gaW5zdC5pbnB1dC52YWwoKSA6IG51bGwsCgkJCWRlZmF1bHREYXRlID0gdGhpcy5fZ2V0RGVmYXVsdERhdGUoaW5zdCksCgkJCWRhdGUgPSBkZWZhdWx0RGF0ZSwKCQkJc2V0dGluZ3MgPSB0aGlzLl9nZXRGb3JtYXRDb25maWcoaW5zdCk7CgoJCXRyeSB7CgkJCWRhdGUgPSB0aGlzLnBhcnNlRGF0ZShkYXRlRm9ybWF0LCBkYXRlcywgc2V0dGluZ3MpIHx8IGRlZmF1bHREYXRlOwoJCX0gY2F0Y2ggKGV2ZW50KSB7CgkJCWRhdGVzID0gKG5vRGVmYXVsdCA/ICIiIDogZGF0ZXMpOwoJCX0KCQlpbnN0LnNlbGVjdGVkRGF5ID0gZGF0ZS5nZXREYXRlKCk7CgkJaW5zdC5kcmF3TW9udGggPSBpbnN0LnNlbGVjdGVkTW9udGggPSBkYXRlLmdldE1vbnRoKCk7CgkJaW5zdC5kcmF3WWVhciA9IGluc3Quc2VsZWN0ZWRZZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpOwoJCWluc3QuY3VycmVudERheSA9IChkYXRlcyA/IGRhdGUuZ2V0RGF0ZSgpIDogMCk7CgkJaW5zdC5jdXJyZW50TW9udGggPSAoZGF0ZXMgPyBkYXRlLmdldE1vbnRoKCkgOiAwKTsKCQlpbnN0LmN1cnJlbnRZZWFyID0gKGRhdGVzID8gZGF0ZS5nZXRGdWxsWWVhcigpIDogMCk7CgkJdGhpcy5fYWRqdXN0SW5zdERhdGUoaW5zdCk7Cgl9LAoKCS8qIFJldHJpZXZlIHRoZSBkZWZhdWx0IGRhdGUgc2hvd24gb24gb3BlbmluZy4gKi8KCV9nZXREZWZhdWx0RGF0ZTogZnVuY3Rpb24oaW5zdCkgewoJCXJldHVybiB0aGlzLl9yZXN0cmljdE1pbk1heChpbnN0LAoJCQl0aGlzLl9kZXRlcm1pbmVEYXRlKGluc3QsIHRoaXMuX2dldChpbnN0LCAiZGVmYXVsdERhdGUiKSwgbmV3IERhdGUoKSkpOwoJfSwKCgkvKiBBIGRhdGUgbWF5IGJlIHNwZWNpZmllZCBhcyBhbiBleGFjdCB2YWx1ZSBvciBhIHJlbGF0aXZlIG9uZS4gKi8KCV9kZXRlcm1pbmVEYXRlOiBmdW5jdGlvbihpbnN0LCBkYXRlLCBkZWZhdWx0RGF0ZSkgewoJCXZhciBvZmZzZXROdW1lcmljID0gZnVuY3Rpb24ob2Zmc2V0KSB7CgkJCQl2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7CgkJCQlkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBvZmZzZXQpOwoJCQkJcmV0dXJuIGRhdGU7CgkJCX0sCgkJCW9mZnNldFN0cmluZyA9IGZ1bmN0aW9uKG9mZnNldCkgewoJCQkJdHJ5IHsKCQkJCQlyZXR1cm4gJC5kYXRlcGlja2VyLnBhcnNlRGF0ZSgkLmRhdGVwaWNrZXIuX2dldChpbnN0LCAiZGF0ZUZvcm1hdCIpLAoJCQkJCQlvZmZzZXQsICQuZGF0ZXBpY2tlci5fZ2V0Rm9ybWF0Q29uZmlnKGluc3QpKTsKCQkJCX0KCQkJCWNhdGNoIChlKSB7CgkJCQkJLy8gSWdub3JlCgkJCQl9CgoJCQkJdmFyIGRhdGUgPSAob2Zmc2V0LnRvTG93ZXJDYXNlKCkubWF0Y2goL15jLykgPwoJCQkJCSQuZGF0ZXBpY2tlci5fZ2V0RGF0ZShpbnN0KSA6IG51bGwpIHx8IG5ldyBEYXRlKCksCgkJCQkJeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKSwKCQkJCQltb250aCA9IGRhdGUuZ2V0TW9udGgoKSwKCQkJCQlkYXkgPSBkYXRlLmdldERhdGUoKSwKCQkJCQlwYXR0ZXJuID0gLyhbK1wtXT9bMC05XSspXHMqKGR8RHx3fFd8bXxNfHl8WSk/L2csCgkJCQkJbWF0Y2hlcyA9IHBhdHRlcm4uZXhlYyhvZmZzZXQpOwoKCQkJCXdoaWxlIChtYXRjaGVzKSB7CgkJCQkJc3dpdGNoIChtYXRjaGVzWzJdIHx8ICJkIikgewoJCQkJCQljYXNlICJkIiA6IGNhc2UgIkQiIDoKCQkJCQkJCWRheSArPSBwYXJzZUludChtYXRjaGVzWzFdLDEwKTsgYnJlYWs7CgkJCQkJCWNhc2UgInciIDogY2FzZSAiVyIgOgoJCQkJCQkJZGF5ICs9IHBhcnNlSW50KG1hdGNoZXNbMV0sMTApICogNzsgYnJlYWs7CgkJCQkJCWNhc2UgIm0iIDogY2FzZSAiTSIgOgoJCQkJCQkJbW9udGggKz0gcGFyc2VJbnQobWF0Y2hlc1sxXSwxMCk7CgkJCQkJCQlkYXkgPSBNYXRoLm1pbihkYXksICQuZGF0ZXBpY2tlci5fZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpKTsKCQkJCQkJCWJyZWFrOwoJCQkJCQljYXNlICJ5IjogY2FzZSAiWSIgOgoJCQkJCQkJeWVhciArPSBwYXJzZUludChtYXRjaGVzWzFdLDEwKTsKCQkJCQkJCWRheSA9IE1hdGgubWluKGRheSwgJC5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCkpOwoJCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCW1hdGNoZXMgPSBwYXR0ZXJuLmV4ZWMob2Zmc2V0KTsKCQkJCX0KCQkJCXJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5KTsKCQkJfSwKCQkJbmV3RGF0ZSA9IChkYXRlID09IG51bGwgfHwgZGF0ZSA9PT0gIiIgPyBkZWZhdWx0RGF0ZSA6ICh0eXBlb2YgZGF0ZSA9PT0gInN0cmluZyIgPyBvZmZzZXRTdHJpbmcoZGF0ZSkgOgoJCQkJKHR5cGVvZiBkYXRlID09PSAibnVtYmVyIiA/IChpc05hTihkYXRlKSA/IGRlZmF1bHREYXRlIDogb2Zmc2V0TnVtZXJpYyhkYXRlKSkgOiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSkpKSk7CgoJCW5ld0RhdGUgPSAobmV3RGF0ZSAmJiBuZXdEYXRlLnRvU3RyaW5nKCkgPT09ICJJbnZhbGlkIERhdGUiID8gZGVmYXVsdERhdGUgOiBuZXdEYXRlKTsKCQlpZiAobmV3RGF0ZSkgewoJCQluZXdEYXRlLnNldEhvdXJzKDApOwoJCQluZXdEYXRlLnNldE1pbnV0ZXMoMCk7CgkJCW5ld0RhdGUuc2V0U2Vjb25kcygwKTsKCQkJbmV3RGF0ZS5zZXRNaWxsaXNlY29uZHMoMCk7CgkJfQoJCXJldHVybiB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXdEYXRlKTsKCX0sCgoJLyogSGFuZGxlIHN3aXRjaCB0by9mcm9tIGRheWxpZ2h0IHNhdmluZy4KCSAqIEhvdXJzIG1heSBiZSBub24temVybyBvbiBkYXlsaWdodCBzYXZpbmcgY3V0LW92ZXI6CgkgKiA+IDEyIHdoZW4gbWlkbmlnaHQgY2hhbmdlb3ZlciwgYnV0IHRoZW4gY2Fubm90IGdlbmVyYXRlCgkgKiBtaWRuaWdodCBkYXRldGltZSwgc28ganVtcCB0byAxQU0sIG90aGVyd2lzZSByZXNldC4KCSAqIEBwYXJhbSAgZGF0ZSAgKERhdGUpIHRoZSBkYXRlIHRvIGNoZWNrCgkgKiBAcmV0dXJuICAoRGF0ZSkgdGhlIGNvcnJlY3RlZCBkYXRlCgkgKi8KCV9kYXlsaWdodFNhdmluZ0FkanVzdDogZnVuY3Rpb24oZGF0ZSkgewoJCWlmICghZGF0ZSkgewoJCQlyZXR1cm4gbnVsbDsKCQl9CgkJZGF0ZS5zZXRIb3VycyhkYXRlLmdldEhvdXJzKCkgPiAxMiA/IGRhdGUuZ2V0SG91cnMoKSArIDIgOiAwKTsKCQlyZXR1cm4gZGF0ZTsKCX0sCgoJLyogU2V0IHRoZSBkYXRlKHMpIGRpcmVjdGx5LiAqLwoJX3NldERhdGU6IGZ1bmN0aW9uKGluc3QsIGRhdGUsIG5vQ2hhbmdlKSB7CgkJdmFyIGNsZWFyID0gIWRhdGUsCgkJCW9yaWdNb250aCA9IGluc3Quc2VsZWN0ZWRNb250aCwKCQkJb3JpZ1llYXIgPSBpbnN0LnNlbGVjdGVkWWVhciwKCQkJbmV3RGF0ZSA9IHRoaXMuX3Jlc3RyaWN0TWluTWF4KGluc3QsIHRoaXMuX2RldGVybWluZURhdGUoaW5zdCwgZGF0ZSwgbmV3IERhdGUoKSkpOwoKCQlpbnN0LnNlbGVjdGVkRGF5ID0gaW5zdC5jdXJyZW50RGF5ID0gbmV3RGF0ZS5nZXREYXRlKCk7CgkJaW5zdC5kcmF3TW9udGggPSBpbnN0LnNlbGVjdGVkTW9udGggPSBpbnN0LmN1cnJlbnRNb250aCA9IG5ld0RhdGUuZ2V0TW9udGgoKTsKCQlpbnN0LmRyYXdZZWFyID0gaW5zdC5zZWxlY3RlZFllYXIgPSBpbnN0LmN1cnJlbnRZZWFyID0gbmV3RGF0ZS5nZXRGdWxsWWVhcigpOwoJCWlmICgob3JpZ01vbnRoICE9PSBpbnN0LnNlbGVjdGVkTW9udGggfHwgb3JpZ1llYXIgIT09IGluc3Quc2VsZWN0ZWRZZWFyKSAmJiAhbm9DaGFuZ2UpIHsKCQkJdGhpcy5fbm90aWZ5Q2hhbmdlKGluc3QpOwoJCX0KCQl0aGlzLl9hZGp1c3RJbnN0RGF0ZShpbnN0KTsKCQlpZiAoaW5zdC5pbnB1dCkgewoJCQlpbnN0LmlucHV0LnZhbChjbGVhciA/ICIiIDogdGhpcy5fZm9ybWF0RGF0ZShpbnN0KSk7CgkJfQoJfSwKCgkvKiBSZXRyaWV2ZSB0aGUgZGF0ZShzKSBkaXJlY3RseS4gKi8KCV9nZXREYXRlOiBmdW5jdGlvbihpbnN0KSB7CgkJdmFyIHN0YXJ0RGF0ZSA9ICghaW5zdC5jdXJyZW50WWVhciB8fCAoaW5zdC5pbnB1dCAmJiBpbnN0LmlucHV0LnZhbCgpID09PSAiIikgPyBudWxsIDoKCQkJdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoCgkJCWluc3QuY3VycmVudFllYXIsIGluc3QuY3VycmVudE1vbnRoLCBpbnN0LmN1cnJlbnREYXkpKSk7CgkJCXJldHVybiBzdGFydERhdGU7Cgl9LAoKCS8qIEF0dGFjaCB0aGUgb254eHggaGFuZGxlcnMuICBUaGVzZSBhcmUgZGVjbGFyZWQgc3RhdGljYWxseSBzbwoJICogdGhleSB3b3JrIHdpdGggc3RhdGljIGNvZGUgdHJhbnNmb3JtZXJzIGxpa2UgQ2FqYS4KCSAqLwoJX2F0dGFjaEhhbmRsZXJzOiBmdW5jdGlvbihpbnN0KSB7CgkJdmFyIHN0ZXBNb250aHMgPSB0aGlzLl9nZXQoaW5zdCwgInN0ZXBNb250aHMiKSwKCQkJaWQgPSAiIyIgKyBpbnN0LmlkLnJlcGxhY2UoIC9cXFxcL2csICJcXCIgKTsKCQlpbnN0LmRwRGl2LmZpbmQoIltkYXRhLWhhbmRsZXJdIikubWFwKGZ1bmN0aW9uICgpIHsKCQkJdmFyIGhhbmRsZXIgPSB7CgkJCQlwcmV2OiBmdW5jdGlvbiAoKSB7CgkJCQkJJC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGlkLCAtc3RlcE1vbnRocywgIk0iKTsKCQkJCX0sCgkJCQluZXh0OiBmdW5jdGlvbiAoKSB7CgkJCQkJJC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGlkLCArc3RlcE1vbnRocywgIk0iKTsKCQkJCX0sCgkJCQloaWRlOiBmdW5jdGlvbiAoKSB7CgkJCQkJJC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpOwoJCQkJfSwKCQkJCXRvZGF5OiBmdW5jdGlvbiAoKSB7CgkJCQkJJC5kYXRlcGlja2VyLl9nb3RvVG9kYXkoaWQpOwoJCQkJfSwKCQkJCXNlbGVjdERheTogZnVuY3Rpb24gKCkgewoJCQkJCSQuZGF0ZXBpY2tlci5fc2VsZWN0RGF5KGlkLCArdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtbW9udGgiKSwgK3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLXllYXIiKSwgdGhpcyk7CgkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJfSwKCQkJCXNlbGVjdE1vbnRoOiBmdW5jdGlvbiAoKSB7CgkJCQkJJC5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIoaWQsIHRoaXMsICJNIik7CgkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJfSwKCQkJCXNlbGVjdFllYXI6IGZ1bmN0aW9uICgpIHsKCQkJCQkkLmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhcihpZCwgdGhpcywgIlkiKTsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCX07CgkJCSQodGhpcykuYmluZCh0aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS1ldmVudCIpLCBoYW5kbGVyW3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLWhhbmRsZXIiKV0pOwoJCX0pOwoJfSwKCgkvKiBHZW5lcmF0ZSB0aGUgSFRNTCBmb3IgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRhdGUgcGlja2VyLiAqLwoJX2dlbmVyYXRlSFRNTDogZnVuY3Rpb24oaW5zdCkgewoJCXZhciBtYXhEcmF3LCBwcmV2VGV4dCwgcHJldiwgbmV4dFRleHQsIG5leHQsIGN1cnJlbnRUZXh0LCBnb3RvRGF0ZSwKCQkJY29udHJvbHMsIGJ1dHRvblBhbmVsLCBmaXJzdERheSwgc2hvd1dlZWssIGRheU5hbWVzLCBkYXlOYW1lc01pbiwKCQkJbW9udGhOYW1lcywgbW9udGhOYW1lc1Nob3J0LCBiZWZvcmVTaG93RGF5LCBzaG93T3RoZXJNb250aHMsCgkJCXNlbGVjdE90aGVyTW9udGhzLCBkZWZhdWx0RGF0ZSwgaHRtbCwgZG93LCByb3csIGdyb3VwLCBjb2wsIHNlbGVjdGVkRGF0ZSwKCQkJY29ybmVyQ2xhc3MsIGNhbGVuZGVyLCB0aGVhZCwgZGF5LCBkYXlzSW5Nb250aCwgbGVhZERheXMsIGN1clJvd3MsIG51bVJvd3MsCgkJCXByaW50RGF0ZSwgZFJvdywgdGJvZHksIGRheVNldHRpbmdzLCBvdGhlck1vbnRoLCB1bnNlbGVjdGFibGUsCgkJCXRlbXBEYXRlID0gbmV3IERhdGUoKSwKCQkJdG9kYXkgPSB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdCgKCQkJCW5ldyBEYXRlKHRlbXBEYXRlLmdldEZ1bGxZZWFyKCksIHRlbXBEYXRlLmdldE1vbnRoKCksIHRlbXBEYXRlLmdldERhdGUoKSkpLCAvLyBjbGVhciB0aW1lCgkJCWlzUlRMID0gdGhpcy5fZ2V0KGluc3QsICJpc1JUTCIpLAoJCQlzaG93QnV0dG9uUGFuZWwgPSB0aGlzLl9nZXQoaW5zdCwgInNob3dCdXR0b25QYW5lbCIpLAoJCQloaWRlSWZOb1ByZXZOZXh0ID0gdGhpcy5fZ2V0KGluc3QsICJoaWRlSWZOb1ByZXZOZXh0IiksCgkJCW5hdmlnYXRpb25Bc0RhdGVGb3JtYXQgPSB0aGlzLl9nZXQoaW5zdCwgIm5hdmlnYXRpb25Bc0RhdGVGb3JtYXQiKSwKCQkJbnVtTW9udGhzID0gdGhpcy5fZ2V0TnVtYmVyT2ZNb250aHMoaW5zdCksCgkJCXNob3dDdXJyZW50QXRQb3MgPSB0aGlzLl9nZXQoaW5zdCwgInNob3dDdXJyZW50QXRQb3MiKSwKCQkJc3RlcE1vbnRocyA9IHRoaXMuX2dldChpbnN0LCAic3RlcE1vbnRocyIpLAoJCQlpc011bHRpTW9udGggPSAobnVtTW9udGhzWzBdICE9PSAxIHx8IG51bU1vbnRoc1sxXSAhPT0gMSksCgkJCWN1cnJlbnREYXRlID0gdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoKCFpbnN0LmN1cnJlbnREYXkgPyBuZXcgRGF0ZSg5OTk5LCA5LCA5KSA6CgkJCQluZXcgRGF0ZShpbnN0LmN1cnJlbnRZZWFyLCBpbnN0LmN1cnJlbnRNb250aCwgaW5zdC5jdXJyZW50RGF5KSkpLAoJCQltaW5EYXRlID0gdGhpcy5fZ2V0TWluTWF4RGF0ZShpbnN0LCAibWluIiksCgkJCW1heERhdGUgPSB0aGlzLl9nZXRNaW5NYXhEYXRlKGluc3QsICJtYXgiKSwKCQkJZHJhd01vbnRoID0gaW5zdC5kcmF3TW9udGggLSBzaG93Q3VycmVudEF0UG9zLAoJCQlkcmF3WWVhciA9IGluc3QuZHJhd1llYXI7CgoJCWlmIChkcmF3TW9udGggPCAwKSB7CgkJCWRyYXdNb250aCArPSAxMjsKCQkJZHJhd1llYXItLTsKCQl9CgkJaWYgKG1heERhdGUpIHsKCQkJbWF4RHJhdyA9IHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKG1heERhdGUuZ2V0RnVsbFllYXIoKSwKCQkJCW1heERhdGUuZ2V0TW9udGgoKSAtIChudW1Nb250aHNbMF0gKiBudW1Nb250aHNbMV0pICsgMSwgbWF4RGF0ZS5nZXREYXRlKCkpKTsKCQkJbWF4RHJhdyA9IChtaW5EYXRlICYmIG1heERyYXcgPCBtaW5EYXRlID8gbWluRGF0ZSA6IG1heERyYXcpOwoJCQl3aGlsZSAodGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZHJhd1llYXIsIGRyYXdNb250aCwgMSkpID4gbWF4RHJhdykgewoJCQkJZHJhd01vbnRoLS07CgkJCQlpZiAoZHJhd01vbnRoIDwgMCkgewoJCQkJCWRyYXdNb250aCA9IDExOwoJCQkJCWRyYXdZZWFyLS07CgkJCQl9CgkJCX0KCQl9CgkJaW5zdC5kcmF3TW9udGggPSBkcmF3TW9udGg7CgkJaW5zdC5kcmF3WWVhciA9IGRyYXdZZWFyOwoKCQlwcmV2VGV4dCA9IHRoaXMuX2dldChpbnN0LCAicHJldlRleHQiKTsKCQlwcmV2VGV4dCA9ICghbmF2aWdhdGlvbkFzRGF0ZUZvcm1hdCA/IHByZXZUZXh0IDogdGhpcy5mb3JtYXREYXRlKHByZXZUZXh0LAoJCQl0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShkcmF3WWVhciwgZHJhd01vbnRoIC0gc3RlcE1vbnRocywgMSkpLAoJCQl0aGlzLl9nZXRGb3JtYXRDb25maWcoaW5zdCkpKTsKCgkJcHJldiA9ICh0aGlzLl9jYW5BZGp1c3RNb250aChpbnN0LCAtMSwgZHJhd1llYXIsIGRyYXdNb250aCkgPwoJCQkiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J3ByZXYnIGRhdGEtZXZlbnQ9J2NsaWNrJyIgKwoJCQkiIHRpdGxlPSciICsgcHJldlRleHQgKyAiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0iICsgKCBpc1JUTCA/ICJlIiA6ICJ3IikgKyAiJz4iICsgcHJldlRleHQgKyAiPC9zcGFuPjwvYT4iIDoKCQkJKGhpZGVJZk5vUHJldk5leHQgPyAiIiA6ICI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtZGlzYWJsZWQnIHRpdGxlPSciKyBwcmV2VGV4dCArIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtIiArICggaXNSVEwgPyAiZSIgOiAidyIpICsgIic+IiArIHByZXZUZXh0ICsgIjwvc3Bhbj48L2E+IikpOwoKCQluZXh0VGV4dCA9IHRoaXMuX2dldChpbnN0LCAibmV4dFRleHQiKTsKCQluZXh0VGV4dCA9ICghbmF2aWdhdGlvbkFzRGF0ZUZvcm1hdCA/IG5leHRUZXh0IDogdGhpcy5mb3JtYXREYXRlKG5leHRUZXh0LAoJCQl0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShkcmF3WWVhciwgZHJhd01vbnRoICsgc3RlcE1vbnRocywgMSkpLAoJCQl0aGlzLl9nZXRGb3JtYXRDb25maWcoaW5zdCkpKTsKCgkJbmV4dCA9ICh0aGlzLl9jYW5BZGp1c3RNb250aChpbnN0LCArMSwgZHJhd1llYXIsIGRyYXdNb250aCkgPwoJCQkiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItbmV4dCB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J25leHQnIGRhdGEtZXZlbnQ9J2NsaWNrJyIgKwoJCQkiIHRpdGxlPSciICsgbmV4dFRleHQgKyAiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0iICsgKCBpc1JUTCA/ICJ3IiA6ICJlIikgKyAiJz4iICsgbmV4dFRleHQgKyAiPC9zcGFuPjwvYT4iIDoKCQkJKGhpZGVJZk5vUHJldk5leHQgPyAiIiA6ICI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1uZXh0IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtZGlzYWJsZWQnIHRpdGxlPSciKyBuZXh0VGV4dCArICInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIgKyAoIGlzUlRMID8gInciIDogImUiKSArICInPiIgKyBuZXh0VGV4dCArICI8L3NwYW4+PC9hPiIpKTsKCgkJY3VycmVudFRleHQgPSB0aGlzLl9nZXQoaW5zdCwgImN1cnJlbnRUZXh0Iik7CgkJZ290b0RhdGUgPSAodGhpcy5fZ2V0KGluc3QsICJnb3RvQ3VycmVudCIpICYmIGluc3QuY3VycmVudERheSA/IGN1cnJlbnREYXRlIDogdG9kYXkpOwoJCWN1cnJlbnRUZXh0ID0gKCFuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0ID8gY3VycmVudFRleHQgOgoJCQl0aGlzLmZvcm1hdERhdGUoY3VycmVudFRleHQsIGdvdG9EYXRlLCB0aGlzLl9nZXRGb3JtYXRDb25maWcoaW5zdCkpKTsKCgkJY29udHJvbHMgPSAoIWluc3QuaW5saW5lID8gIjxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0ndWktZGF0ZXBpY2tlci1jbG9zZSB1aS1zdGF0ZS1kZWZhdWx0IHVpLXByaW9yaXR5LXByaW1hcnkgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSdoaWRlJyBkYXRhLWV2ZW50PSdjbGljayc+IiArCgkJCXRoaXMuX2dldChpbnN0LCAiY2xvc2VUZXh0IikgKyAiPC9idXR0b24+IiA6ICIiKTsKCgkJYnV0dG9uUGFuZWwgPSAoc2hvd0J1dHRvblBhbmVsKSA/ICI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgdWktd2lkZ2V0LWNvbnRlbnQnPiIgKyAoaXNSVEwgPyBjb250cm9scyA6ICIiKSArCgkJCSh0aGlzLl9pc0luUmFuZ2UoaW5zdCwgZ290b0RhdGUpID8gIjxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0ndWktZGF0ZXBpY2tlci1jdXJyZW50IHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktc2Vjb25kYXJ5IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0ndG9kYXknIGRhdGEtZXZlbnQ9J2NsaWNrJyIgKwoJCQkiPiIgKyBjdXJyZW50VGV4dCArICI8L2J1dHRvbj4iIDogIiIpICsgKGlzUlRMID8gIiIgOiBjb250cm9scykgKyAiPC9kaXY+IiA6ICIiOwoKCQlmaXJzdERheSA9IHBhcnNlSW50KHRoaXMuX2dldChpbnN0LCAiZmlyc3REYXkiKSwxMCk7CgkJZmlyc3REYXkgPSAoaXNOYU4oZmlyc3REYXkpID8gMCA6IGZpcnN0RGF5KTsKCgkJc2hvd1dlZWsgPSB0aGlzLl9nZXQoaW5zdCwgInNob3dXZWVrIik7CgkJZGF5TmFtZXMgPSB0aGlzLl9nZXQoaW5zdCwgImRheU5hbWVzIik7CgkJZGF5TmFtZXNNaW4gPSB0aGlzLl9nZXQoaW5zdCwgImRheU5hbWVzTWluIik7CgkJbW9udGhOYW1lcyA9IHRoaXMuX2dldChpbnN0LCAibW9udGhOYW1lcyIpOwoJCW1vbnRoTmFtZXNTaG9ydCA9IHRoaXMuX2dldChpbnN0LCAibW9udGhOYW1lc1Nob3J0Iik7CgkJYmVmb3JlU2hvd0RheSA9IHRoaXMuX2dldChpbnN0LCAiYmVmb3JlU2hvd0RheSIpOwoJCXNob3dPdGhlck1vbnRocyA9IHRoaXMuX2dldChpbnN0LCAic2hvd090aGVyTW9udGhzIik7CgkJc2VsZWN0T3RoZXJNb250aHMgPSB0aGlzLl9nZXQoaW5zdCwgInNlbGVjdE90aGVyTW9udGhzIik7CgkJZGVmYXVsdERhdGUgPSB0aGlzLl9nZXREZWZhdWx0RGF0ZShpbnN0KTsKCQlodG1sID0gIiI7CgkJZG93OwoJCWZvciAocm93ID0gMDsgcm93IDwgbnVtTW9udGhzWzBdOyByb3crKykgewoJCQlncm91cCA9ICIiOwoJCQl0aGlzLm1heFJvd3MgPSA0OwoJCQlmb3IgKGNvbCA9IDA7IGNvbCA8IG51bU1vbnRoc1sxXTsgY29sKyspIHsKCQkJCXNlbGVjdGVkRGF0ZSA9IHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGRyYXdZZWFyLCBkcmF3TW9udGgsIGluc3Quc2VsZWN0ZWREYXkpKTsKCQkJCWNvcm5lckNsYXNzID0gIiB1aS1jb3JuZXItYWxsIjsKCQkJCWNhbGVuZGVyID0gIiI7CgkJCQlpZiAoaXNNdWx0aU1vbnRoKSB7CgkJCQkJY2FsZW5kZXIgKz0gIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItZ3JvdXAiOwoJCQkJCWlmIChudW1Nb250aHNbMV0gPiAxKSB7CgkJCQkJCXN3aXRjaCAoY29sKSB7CgkJCQkJCQljYXNlIDA6IGNhbGVuZGVyICs9ICIgdWktZGF0ZXBpY2tlci1ncm91cC1maXJzdCI7CgkJCQkJCQkJY29ybmVyQ2xhc3MgPSAiIHVpLWNvcm5lci0iICsgKGlzUlRMID8gInJpZ2h0IiA6ICJsZWZ0Iik7IGJyZWFrOwoJCQkJCQkJY2FzZSBudW1Nb250aHNbMV0tMTogY2FsZW5kZXIgKz0gIiB1aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QiOwoJCQkJCQkJCWNvcm5lckNsYXNzID0gIiB1aS1jb3JuZXItIiArIChpc1JUTCA/ICJsZWZ0IiA6ICJyaWdodCIpOyBicmVhazsKCQkJCQkJCWRlZmF1bHQ6IGNhbGVuZGVyICs9ICIgdWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGUiOyBjb3JuZXJDbGFzcyA9ICIiOyBicmVhazsKCQkJCQkJfQoJCQkJCX0KCQkJCQljYWxlbmRlciArPSAiJz4iOwoJCQkJfQoJCQkJY2FsZW5kZXIgKz0gIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItaGVhZGVyIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4IiArIGNvcm5lckNsYXNzICsgIic+IiArCgkJCQkJKC9hbGx8bGVmdC8udGVzdChjb3JuZXJDbGFzcykgJiYgcm93ID09PSAwID8gKGlzUlRMID8gbmV4dCA6IHByZXYpIDogIiIpICsKCQkJCQkoL2FsbHxyaWdodC8udGVzdChjb3JuZXJDbGFzcykgJiYgcm93ID09PSAwID8gKGlzUlRMID8gcHJldiA6IG5leHQpIDogIiIpICsKCQkJCQl0aGlzLl9nZW5lcmF0ZU1vbnRoWWVhckhlYWRlcihpbnN0LCBkcmF3TW9udGgsIGRyYXdZZWFyLCBtaW5EYXRlLCBtYXhEYXRlLAoJCQkJCXJvdyA+IDAgfHwgY29sID4gMCwgbW9udGhOYW1lcywgbW9udGhOYW1lc1Nob3J0KSArIC8vIGRyYXcgbW9udGggaGVhZGVycwoJCQkJCSI8L2Rpdj48dGFibGUgY2xhc3M9J3VpLWRhdGVwaWNrZXItY2FsZW5kYXInPjx0aGVhZD4iICsKCQkJCQkiPHRyPiI7CgkJCQl0aGVhZCA9IChzaG93V2VlayA/ICI8dGggY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1jb2wnPiIgKyB0aGlzLl9nZXQoaW5zdCwgIndlZWtIZWFkZXIiKSArICI8L3RoPiIgOiAiIik7CgkJCQlmb3IgKGRvdyA9IDA7IGRvdyA8IDc7IGRvdysrKSB7IC8vIGRheXMgb2YgdGhlIHdlZWsKCQkJCQlkYXkgPSAoZG93ICsgZmlyc3REYXkpICUgNzsKCQkJCQl0aGVhZCArPSAiPHRoIiArICgoZG93ICsgZmlyc3REYXkgKyA2KSAlIDcgPj0gNSA/ICIgY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1lbmQnIiA6ICIiKSArICI+IiArCgkJCQkJCSI8c3BhbiB0aXRsZT0nIiArIGRheU5hbWVzW2RheV0gKyAiJz4iICsgZGF5TmFtZXNNaW5bZGF5XSArICI8L3NwYW4+PC90aD4iOwoJCQkJfQoJCQkJY2FsZW5kZXIgKz0gdGhlYWQgKyAiPC90cj48L3RoZWFkPjx0Ym9keT4iOwoJCQkJZGF5c0luTW9udGggPSB0aGlzLl9nZXREYXlzSW5Nb250aChkcmF3WWVhciwgZHJhd01vbnRoKTsKCQkJCWlmIChkcmF3WWVhciA9PT0gaW5zdC5zZWxlY3RlZFllYXIgJiYgZHJhd01vbnRoID09PSBpbnN0LnNlbGVjdGVkTW9udGgpIHsKCQkJCQlpbnN0LnNlbGVjdGVkRGF5ID0gTWF0aC5taW4oaW5zdC5zZWxlY3RlZERheSwgZGF5c0luTW9udGgpOwoJCQkJfQoJCQkJbGVhZERheXMgPSAodGhpcy5fZ2V0Rmlyc3REYXlPZk1vbnRoKGRyYXdZZWFyLCBkcmF3TW9udGgpIC0gZmlyc3REYXkgKyA3KSAlIDc7CgkJCQljdXJSb3dzID0gTWF0aC5jZWlsKChsZWFkRGF5cyArIGRheXNJbk1vbnRoKSAvIDcpOyAvLyBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiByb3dzIHRvIGdlbmVyYXRlCgkJCQludW1Sb3dzID0gKGlzTXVsdGlNb250aCA/IHRoaXMubWF4Um93cyA+IGN1clJvd3MgPyB0aGlzLm1heFJvd3MgOiBjdXJSb3dzIDogY3VyUm93cyk7IC8vSWYgbXVsdGlwbGUgbW9udGhzLCB1c2UgdGhlIGhpZ2hlciBudW1iZXIgb2Ygcm93cyAoc2VlICM3MDQzKQoJCQkJdGhpcy5tYXhSb3dzID0gbnVtUm93czsKCQkJCXByaW50RGF0ZSA9IHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGRyYXdZZWFyLCBkcmF3TW9udGgsIDEgLSBsZWFkRGF5cykpOwoJCQkJZm9yIChkUm93ID0gMDsgZFJvdyA8IG51bVJvd3M7IGRSb3crKykgeyAvLyBjcmVhdGUgZGF0ZSBwaWNrZXIgcm93cwoJCQkJCWNhbGVuZGVyICs9ICI8dHI+IjsKCQkJCQl0Ym9keSA9ICghc2hvd1dlZWsgPyAiIiA6ICI8dGQgY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1jb2wnPiIgKwoJCQkJCQl0aGlzLl9nZXQoaW5zdCwgImNhbGN1bGF0ZVdlZWsiKShwcmludERhdGUpICsgIjwvdGQ+Iik7CgkJCQkJZm9yIChkb3cgPSAwOyBkb3cgPCA3OyBkb3crKykgeyAvLyBjcmVhdGUgZGF0ZSBwaWNrZXIgZGF5cwoJCQkJCQlkYXlTZXR0aW5ncyA9IChiZWZvcmVTaG93RGF5ID8KCQkJCQkJCWJlZm9yZVNob3dEYXkuYXBwbHkoKGluc3QuaW5wdXQgPyBpbnN0LmlucHV0WzBdIDogbnVsbCksIFtwcmludERhdGVdKSA6IFt0cnVlLCAiIl0pOwoJCQkJCQlvdGhlck1vbnRoID0gKHByaW50RGF0ZS5nZXRNb250aCgpICE9PSBkcmF3TW9udGgpOwoJCQkJCQl1bnNlbGVjdGFibGUgPSAob3RoZXJNb250aCAmJiAhc2VsZWN0T3RoZXJNb250aHMpIHx8ICFkYXlTZXR0aW5nc1swXSB8fAoJCQkJCQkJKG1pbkRhdGUgJiYgcHJpbnREYXRlIDwgbWluRGF0ZSkgfHwgKG1heERhdGUgJiYgcHJpbnREYXRlID4gbWF4RGF0ZSk7CgkJCQkJCXRib2R5ICs9ICI8dGQgY2xhc3M9JyIgKwoJCQkJCQkJKChkb3cgKyBmaXJzdERheSArIDYpICUgNyA+PSA1ID8gIiB1aS1kYXRlcGlja2VyLXdlZWstZW5kIiA6ICIiKSArIC8vIGhpZ2hsaWdodCB3ZWVrZW5kcwoJCQkJCQkJKG90aGVyTW9udGggPyAiIHVpLWRhdGVwaWNrZXItb3RoZXItbW9udGgiIDogIiIpICsgLy8gaGlnaGxpZ2h0IGRheXMgZnJvbSBvdGhlciBtb250aHMKCQkJCQkJCSgocHJpbnREYXRlLmdldFRpbWUoKSA9PT0gc2VsZWN0ZWREYXRlLmdldFRpbWUoKSAmJiBkcmF3TW9udGggPT09IGluc3Quc2VsZWN0ZWRNb250aCAmJiBpbnN0Ll9rZXlFdmVudCkgfHwgLy8gdXNlciBwcmVzc2VkIGtleQoJCQkJCQkJKGRlZmF1bHREYXRlLmdldFRpbWUoKSA9PT0gcHJpbnREYXRlLmdldFRpbWUoKSAmJiBkZWZhdWx0RGF0ZS5nZXRUaW1lKCkgPT09IHNlbGVjdGVkRGF0ZS5nZXRUaW1lKCkpID8KCQkJCQkJCS8vIG9yIGRlZmF1bHREYXRlIGlzIGN1cnJlbnQgcHJpbnRlZERhdGUgYW5kIGRlZmF1bHREYXRlIGlzIHNlbGVjdGVkRGF0ZQoJCQkJCQkJIiAiICsgdGhpcy5fZGF5T3ZlckNsYXNzIDogIiIpICsgLy8gaGlnaGxpZ2h0IHNlbGVjdGVkIGRheQoJCQkJCQkJKHVuc2VsZWN0YWJsZSA/ICIgIiArIHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzICsgIiB1aS1zdGF0ZS1kaXNhYmxlZCI6ICIiKSArICAvLyBoaWdobGlnaHQgdW5zZWxlY3RhYmxlIGRheXMKCQkJCQkJCShvdGhlck1vbnRoICYmICFzaG93T3RoZXJNb250aHMgPyAiIiA6ICIgIiArIGRheVNldHRpbmdzWzFdICsgLy8gaGlnaGxpZ2h0IGN1c3RvbSBkYXRlcwoJCQkJCQkJKHByaW50RGF0ZS5nZXRUaW1lKCkgPT09IGN1cnJlbnREYXRlLmdldFRpbWUoKSA/ICIgIiArIHRoaXMuX2N1cnJlbnRDbGFzcyA6ICIiKSArIC8vIGhpZ2hsaWdodCBzZWxlY3RlZCBkYXkKCQkJCQkJCShwcmludERhdGUuZ2V0VGltZSgpID09PSB0b2RheS5nZXRUaW1lKCkgPyAiIHVpLWRhdGVwaWNrZXItdG9kYXkiIDogIiIpKSArICInIiArIC8vIGhpZ2hsaWdodCB0b2RheSAoaWYgZGlmZmVyZW50KQoJCQkJCQkJKCghb3RoZXJNb250aCB8fCBzaG93T3RoZXJNb250aHMpICYmIGRheVNldHRpbmdzWzJdID8gIiB0aXRsZT0nIiArIGRheVNldHRpbmdzWzJdLnJlcGxhY2UoLycvZywgIiYjMzk7IikgKyAiJyIgOiAiIikgKyAvLyBjZWxsIHRpdGxlCgkJCQkJCQkodW5zZWxlY3RhYmxlID8gIiIgOiAiIGRhdGEtaGFuZGxlcj0nc2VsZWN0RGF5JyBkYXRhLWV2ZW50PSdjbGljaycgZGF0YS1tb250aD0nIiArIHByaW50RGF0ZS5nZXRNb250aCgpICsgIicgZGF0YS15ZWFyPSciICsgcHJpbnREYXRlLmdldEZ1bGxZZWFyKCkgKyAiJyIpICsgIj4iICsgLy8gYWN0aW9ucwoJCQkJCQkJKG90aGVyTW9udGggJiYgIXNob3dPdGhlck1vbnRocyA/ICImI3hhMDsiIDogLy8gZGlzcGxheSBmb3Igb3RoZXIgbW9udGhzCgkJCQkJCQkodW5zZWxlY3RhYmxlID8gIjxzcGFuIGNsYXNzPSd1aS1zdGF0ZS1kZWZhdWx0Jz4iICsgcHJpbnREYXRlLmdldERhdGUoKSArICI8L3NwYW4+IiA6ICI8YSBjbGFzcz0ndWktc3RhdGUtZGVmYXVsdCIgKwoJCQkJCQkJKHByaW50RGF0ZS5nZXRUaW1lKCkgPT09IHRvZGF5LmdldFRpbWUoKSA/ICIgdWktc3RhdGUtaGlnaGxpZ2h0IiA6ICIiKSArCgkJCQkJCQkocHJpbnREYXRlLmdldFRpbWUoKSA9PT0gY3VycmVudERhdGUuZ2V0VGltZSgpID8gIiB1aS1zdGF0ZS1hY3RpdmUiIDogIiIpICsgLy8gaGlnaGxpZ2h0IHNlbGVjdGVkIGRheQoJCQkJCQkJKG90aGVyTW9udGggPyAiIHVpLXByaW9yaXR5LXNlY29uZGFyeSIgOiAiIikgKyAvLyBkaXN0aW5ndWlzaCBkYXRlcyBmcm9tIG90aGVyIG1vbnRocwoJCQkJCQkJIicgaHJlZj0nIyc+IiArIHByaW50RGF0ZS5nZXREYXRlKCkgKyAiPC9hPiIpKSArICI8L3RkPiI7IC8vIGRpc3BsYXkgc2VsZWN0YWJsZSBkYXRlCgkJCQkJCXByaW50RGF0ZS5zZXREYXRlKHByaW50RGF0ZS5nZXREYXRlKCkgKyAxKTsKCQkJCQkJcHJpbnREYXRlID0gdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QocHJpbnREYXRlKTsKCQkJCQl9CgkJCQkJY2FsZW5kZXIgKz0gdGJvZHkgKyAiPC90cj4iOwoJCQkJfQoJCQkJZHJhd01vbnRoKys7CgkJCQlpZiAoZHJhd01vbnRoID4gMTEpIHsKCQkJCQlkcmF3TW9udGggPSAwOwoJCQkJCWRyYXdZZWFyKys7CgkJCQl9CgkJCQljYWxlbmRlciArPSAiPC90Ym9keT48L3RhYmxlPiIgKyAoaXNNdWx0aU1vbnRoID8gIjwvZGl2PiIgKwoJCQkJCQkJKChudW1Nb250aHNbMF0gPiAwICYmIGNvbCA9PT0gbnVtTW9udGhzWzFdLTEpID8gIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItcm93LWJyZWFrJz48L2Rpdj4iIDogIiIpIDogIiIpOwoJCQkJZ3JvdXAgKz0gY2FsZW5kZXI7CgkJCX0KCQkJaHRtbCArPSBncm91cDsKCQl9CgkJaHRtbCArPSBidXR0b25QYW5lbDsKCQlpbnN0Ll9rZXlFdmVudCA9IGZhbHNlOwoJCXJldHVybiBodG1sOwoJfSwKCgkvKiBHZW5lcmF0ZSB0aGUgbW9udGggYW5kIHllYXIgaGVhZGVyLiAqLwoJX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyOiBmdW5jdGlvbihpbnN0LCBkcmF3TW9udGgsIGRyYXdZZWFyLCBtaW5EYXRlLCBtYXhEYXRlLAoJCQlzZWNvbmRhcnksIG1vbnRoTmFtZXMsIG1vbnRoTmFtZXNTaG9ydCkgewoKCQl2YXIgaW5NaW5ZZWFyLCBpbk1heFllYXIsIG1vbnRoLCB5ZWFycywgdGhpc1llYXIsIGRldGVybWluZVllYXIsIHllYXIsIGVuZFllYXIsCgkJCWNoYW5nZU1vbnRoID0gdGhpcy5fZ2V0KGluc3QsICJjaGFuZ2VNb250aCIpLAoJCQljaGFuZ2VZZWFyID0gdGhpcy5fZ2V0KGluc3QsICJjaGFuZ2VZZWFyIiksCgkJCXNob3dNb250aEFmdGVyWWVhciA9IHRoaXMuX2dldChpbnN0LCAic2hvd01vbnRoQWZ0ZXJZZWFyIiksCgkJCWh0bWwgPSAiPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci10aXRsZSc+IiwKCQkJbW9udGhIdG1sID0gIiI7CgoJCS8vIG1vbnRoIHNlbGVjdGlvbgoJCWlmIChzZWNvbmRhcnkgfHwgIWNoYW5nZU1vbnRoKSB7CgkJCW1vbnRoSHRtbCArPSAiPHNwYW4gY2xhc3M9J3VpLWRhdGVwaWNrZXItbW9udGgnPiIgKyBtb250aE5hbWVzW2RyYXdNb250aF0gKyAiPC9zcGFuPiI7CgkJfSBlbHNlIHsKCQkJaW5NaW5ZZWFyID0gKG1pbkRhdGUgJiYgbWluRGF0ZS5nZXRGdWxsWWVhcigpID09PSBkcmF3WWVhcik7CgkJCWluTWF4WWVhciA9IChtYXhEYXRlICYmIG1heERhdGUuZ2V0RnVsbFllYXIoKSA9PT0gZHJhd1llYXIpOwoJCQltb250aEh0bWwgKz0gIjxzZWxlY3QgY2xhc3M9J3VpLWRhdGVwaWNrZXItbW9udGgnIGRhdGEtaGFuZGxlcj0nc2VsZWN0TW9udGgnIGRhdGEtZXZlbnQ9J2NoYW5nZSc+IjsKCQkJZm9yICggbW9udGggPSAwOyBtb250aCA8IDEyOyBtb250aCsrKSB7CgkJCQlpZiAoKCFpbk1pblllYXIgfHwgbW9udGggPj0gbWluRGF0ZS5nZXRNb250aCgpKSAmJiAoIWluTWF4WWVhciB8fCBtb250aCA8PSBtYXhEYXRlLmdldE1vbnRoKCkpKSB7CgkJCQkJbW9udGhIdG1sICs9ICI8b3B0aW9uIHZhbHVlPSciICsgbW9udGggKyAiJyIgKwoJCQkJCQkobW9udGggPT09IGRyYXdNb250aCA/ICIgc2VsZWN0ZWQ9J3NlbGVjdGVkJyIgOiAiIikgKwoJCQkJCQkiPiIgKyBtb250aE5hbWVzU2hvcnRbbW9udGhdICsgIjwvb3B0aW9uPiI7CgkJCQl9CgkJCX0KCQkJbW9udGhIdG1sICs9ICI8L3NlbGVjdD4iOwoJCX0KCgkJaWYgKCFzaG93TW9udGhBZnRlclllYXIpIHsKCQkJaHRtbCArPSBtb250aEh0bWwgKyAoc2Vjb25kYXJ5IHx8ICEoY2hhbmdlTW9udGggJiYgY2hhbmdlWWVhcikgPyAiJiN4YTA7IiA6ICIiKTsKCQl9CgoJCS8vIHllYXIgc2VsZWN0aW9uCgkJaWYgKCAhaW5zdC55ZWFyc2h0bWwgKSB7CgkJCWluc3QueWVhcnNodG1sID0gIiI7CgkJCWlmIChzZWNvbmRhcnkgfHwgIWNoYW5nZVllYXIpIHsKCQkJCWh0bWwgKz0gIjxzcGFuIGNsYXNzPSd1aS1kYXRlcGlja2VyLXllYXInPiIgKyBkcmF3WWVhciArICI8L3NwYW4+IjsKCQkJfSBlbHNlIHsKCQkJCS8vIGRldGVybWluZSByYW5nZSBvZiB5ZWFycyB0byBkaXNwbGF5CgkJCQl5ZWFycyA9IHRoaXMuX2dldChpbnN0LCAieWVhclJhbmdlIikuc3BsaXQoIjoiKTsKCQkJCXRoaXNZZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpOwoJCQkJZGV0ZXJtaW5lWWVhciA9IGZ1bmN0aW9uKHZhbHVlKSB7CgkJCQkJdmFyIHllYXIgPSAodmFsdWUubWF0Y2goL2NbK1wtXS4qLykgPyBkcmF3WWVhciArIHBhcnNlSW50KHZhbHVlLnN1YnN0cmluZygxKSwgMTApIDoKCQkJCQkJKHZhbHVlLm1hdGNoKC9bK1wtXS4qLykgPyB0aGlzWWVhciArIHBhcnNlSW50KHZhbHVlLCAxMCkgOgoJCQkJCQlwYXJzZUludCh2YWx1ZSwgMTApKSk7CgkJCQkJcmV0dXJuIChpc05hTih5ZWFyKSA/IHRoaXNZZWFyIDogeWVhcik7CgkJCQl9OwoJCQkJeWVhciA9IGRldGVybWluZVllYXIoeWVhcnNbMF0pOwoJCQkJZW5kWWVhciA9IE1hdGgubWF4KHllYXIsIGRldGVybWluZVllYXIoeWVhcnNbMV0gfHwgIiIpKTsKCQkJCXllYXIgPSAobWluRGF0ZSA/IE1hdGgubWF4KHllYXIsIG1pbkRhdGUuZ2V0RnVsbFllYXIoKSkgOiB5ZWFyKTsKCQkJCWVuZFllYXIgPSAobWF4RGF0ZSA/IE1hdGgubWluKGVuZFllYXIsIG1heERhdGUuZ2V0RnVsbFllYXIoKSkgOiBlbmRZZWFyKTsKCQkJCWluc3QueWVhcnNodG1sICs9ICI8c2VsZWN0IGNsYXNzPSd1aS1kYXRlcGlja2VyLXllYXInIGRhdGEtaGFuZGxlcj0nc2VsZWN0WWVhcicgZGF0YS1ldmVudD0nY2hhbmdlJz4iOwoJCQkJZm9yICg7IHllYXIgPD0gZW5kWWVhcjsgeWVhcisrKSB7CgkJCQkJaW5zdC55ZWFyc2h0bWwgKz0gIjxvcHRpb24gdmFsdWU9JyIgKyB5ZWFyICsgIiciICsKCQkJCQkJKHllYXIgPT09IGRyYXdZZWFyID8gIiBzZWxlY3RlZD0nc2VsZWN0ZWQnIiA6ICIiKSArCgkJCQkJCSI+IiArIHllYXIgKyAiPC9vcHRpb24+IjsKCQkJCX0KCQkJCWluc3QueWVhcnNodG1sICs9ICI8L3NlbGVjdD4iOwoKCQkJCWh0bWwgKz0gaW5zdC55ZWFyc2h0bWw7CgkJCQlpbnN0LnllYXJzaHRtbCA9IG51bGw7CgkJCX0KCQl9CgoJCWh0bWwgKz0gdGhpcy5fZ2V0KGluc3QsICJ5ZWFyU3VmZml4Iik7CgkJaWYgKHNob3dNb250aEFmdGVyWWVhcikgewoJCQlodG1sICs9IChzZWNvbmRhcnkgfHwgIShjaGFuZ2VNb250aCAmJiBjaGFuZ2VZZWFyKSA/ICImI3hhMDsiIDogIiIpICsgbW9udGhIdG1sOwoJCX0KCQlodG1sICs9ICI8L2Rpdj4iOyAvLyBDbG9zZSBkYXRlcGlja2VyX2hlYWRlcgoJCXJldHVybiBodG1sOwoJfSwKCgkvKiBBZGp1c3Qgb25lIG9mIHRoZSBkYXRlIHN1Yi1maWVsZHMuICovCglfYWRqdXN0SW5zdERhdGU6IGZ1bmN0aW9uKGluc3QsIG9mZnNldCwgcGVyaW9kKSB7CgkJdmFyIHllYXIgPSBpbnN0LmRyYXdZZWFyICsgKHBlcmlvZCA9PT0gIlkiID8gb2Zmc2V0IDogMCksCgkJCW1vbnRoID0gaW5zdC5kcmF3TW9udGggKyAocGVyaW9kID09PSAiTSIgPyBvZmZzZXQgOiAwKSwKCQkJZGF5ID0gTWF0aC5taW4oaW5zdC5zZWxlY3RlZERheSwgdGhpcy5fZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpKSArIChwZXJpb2QgPT09ICJEIiA/IG9mZnNldCA6IDApLAoJCQlkYXRlID0gdGhpcy5fcmVzdHJpY3RNaW5NYXgoaW5zdCwgdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoeWVhciwgbW9udGgsIGRheSkpKTsKCgkJaW5zdC5zZWxlY3RlZERheSA9IGRhdGUuZ2V0RGF0ZSgpOwoJCWluc3QuZHJhd01vbnRoID0gaW5zdC5zZWxlY3RlZE1vbnRoID0gZGF0ZS5nZXRNb250aCgpOwoJCWluc3QuZHJhd1llYXIgPSBpbnN0LnNlbGVjdGVkWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKCQlpZiAocGVyaW9kID09PSAiTSIgfHwgcGVyaW9kID09PSAiWSIpIHsKCQkJdGhpcy5fbm90aWZ5Q2hhbmdlKGluc3QpOwoJCX0KCX0sCgoJLyogRW5zdXJlIGEgZGF0ZSBpcyB3aXRoaW4gYW55IG1pbi9tYXggYm91bmRzLiAqLwoJX3Jlc3RyaWN0TWluTWF4OiBmdW5jdGlvbihpbnN0LCBkYXRlKSB7CgkJdmFyIG1pbkRhdGUgPSB0aGlzLl9nZXRNaW5NYXhEYXRlKGluc3QsICJtaW4iKSwKCQkJbWF4RGF0ZSA9IHRoaXMuX2dldE1pbk1heERhdGUoaW5zdCwgIm1heCIpLAoJCQluZXdEYXRlID0gKG1pbkRhdGUgJiYgZGF0ZSA8IG1pbkRhdGUgPyBtaW5EYXRlIDogZGF0ZSk7CgkJcmV0dXJuIChtYXhEYXRlICYmIG5ld0RhdGUgPiBtYXhEYXRlID8gbWF4RGF0ZSA6IG5ld0RhdGUpOwoJfSwKCgkvKiBOb3RpZnkgY2hhbmdlIG9mIG1vbnRoL3llYXIuICovCglfbm90aWZ5Q2hhbmdlOiBmdW5jdGlvbihpbnN0KSB7CgkJdmFyIG9uQ2hhbmdlID0gdGhpcy5fZ2V0KGluc3QsICJvbkNoYW5nZU1vbnRoWWVhciIpOwoJCWlmIChvbkNoYW5nZSkgewoJCQlvbkNoYW5nZS5hcHBseSgoaW5zdC5pbnB1dCA/IGluc3QuaW5wdXRbMF0gOiBudWxsKSwKCQkJCVtpbnN0LnNlbGVjdGVkWWVhciwgaW5zdC5zZWxlY3RlZE1vbnRoICsgMSwgaW5zdF0pOwoJCX0KCX0sCgoJLyogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgbW9udGhzIHRvIHNob3cuICovCglfZ2V0TnVtYmVyT2ZNb250aHM6IGZ1bmN0aW9uKGluc3QpIHsKCQl2YXIgbnVtTW9udGhzID0gdGhpcy5fZ2V0KGluc3QsICJudW1iZXJPZk1vbnRocyIpOwoJCXJldHVybiAobnVtTW9udGhzID09IG51bGwgPyBbMSwgMV0gOiAodHlwZW9mIG51bU1vbnRocyA9PT0gIm51bWJlciIgPyBbMSwgbnVtTW9udGhzXSA6IG51bU1vbnRocykpOwoJfSwKCgkvKiBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgbWF4aW11bSBkYXRlIC0gZW5zdXJlIG5vIHRpbWUgY29tcG9uZW50cyBhcmUgc2V0LiAqLwoJX2dldE1pbk1heERhdGU6IGZ1bmN0aW9uKGluc3QsIG1pbk1heCkgewoJCXJldHVybiB0aGlzLl9kZXRlcm1pbmVEYXRlKGluc3QsIHRoaXMuX2dldChpbnN0LCBtaW5NYXggKyAiRGF0ZSIpLCBudWxsKTsKCX0sCgoJLyogRmluZCB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYSBnaXZlbiBtb250aC4gKi8KCV9nZXREYXlzSW5Nb250aDogZnVuY3Rpb24oeWVhciwgbW9udGgpIHsKCQlyZXR1cm4gMzIgLSB0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMzIpKS5nZXREYXRlKCk7Cgl9LAoKCS8qIEZpbmQgdGhlIGRheSBvZiB0aGUgd2VlayBvZiB0aGUgZmlyc3Qgb2YgYSBtb250aC4gKi8KCV9nZXRGaXJzdERheU9mTW9udGg6IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7CgkJcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKS5nZXREYXkoKTsKCX0sCgoJLyogRGV0ZXJtaW5lcyBpZiB3ZSBzaG91bGQgYWxsb3cgYSAibmV4dC9wcmV2IiBtb250aCBkaXNwbGF5IGNoYW5nZS4gKi8KCV9jYW5BZGp1c3RNb250aDogZnVuY3Rpb24oaW5zdCwgb2Zmc2V0LCBjdXJZZWFyLCBjdXJNb250aCkgewoJCXZhciBudW1Nb250aHMgPSB0aGlzLl9nZXROdW1iZXJPZk1vbnRocyhpbnN0KSwKCQkJZGF0ZSA9IHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGN1clllYXIsCgkJCWN1ck1vbnRoICsgKG9mZnNldCA8IDAgPyBvZmZzZXQgOiBudW1Nb250aHNbMF0gKiBudW1Nb250aHNbMV0pLCAxKSk7CgoJCWlmIChvZmZzZXQgPCAwKSB7CgkJCWRhdGUuc2V0RGF0ZSh0aGlzLl9nZXREYXlzSW5Nb250aChkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSkpOwoJCX0KCQlyZXR1cm4gdGhpcy5faXNJblJhbmdlKGluc3QsIGRhdGUpOwoJfSwKCgkvKiBJcyB0aGUgZ2l2ZW4gZGF0ZSBpbiB0aGUgYWNjZXB0ZWQgcmFuZ2U/ICovCglfaXNJblJhbmdlOiBmdW5jdGlvbihpbnN0LCBkYXRlKSB7CgkJdmFyIHllYXJTcGxpdCwgY3VycmVudFllYXIsCgkJCW1pbkRhdGUgPSB0aGlzLl9nZXRNaW5NYXhEYXRlKGluc3QsICJtaW4iKSwKCQkJbWF4RGF0ZSA9IHRoaXMuX2dldE1pbk1heERhdGUoaW5zdCwgIm1heCIpLAoJCQltaW5ZZWFyID0gbnVsbCwKCQkJbWF4WWVhciA9IG51bGwsCgkJCXllYXJzID0gdGhpcy5fZ2V0KGluc3QsICJ5ZWFyUmFuZ2UiKTsKCQkJaWYgKHllYXJzKXsKCQkJCXllYXJTcGxpdCA9IHllYXJzLnNwbGl0KCI6Iik7CgkJCQljdXJyZW50WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTsKCQkJCW1pblllYXIgPSBwYXJzZUludCh5ZWFyU3BsaXRbMF0sIDEwKTsKCQkJCW1heFllYXIgPSBwYXJzZUludCh5ZWFyU3BsaXRbMV0sIDEwKTsKCQkJCWlmICggeWVhclNwbGl0WzBdLm1hdGNoKC9bK1wtXS4qLykgKSB7CgkJCQkJbWluWWVhciArPSBjdXJyZW50WWVhcjsKCQkJCX0KCQkJCWlmICggeWVhclNwbGl0WzFdLm1hdGNoKC9bK1wtXS4qLykgKSB7CgkJCQkJbWF4WWVhciArPSBjdXJyZW50WWVhcjsKCQkJCX0KCQkJfQoKCQlyZXR1cm4gKCghbWluRGF0ZSB8fCBkYXRlLmdldFRpbWUoKSA+PSBtaW5EYXRlLmdldFRpbWUoKSkgJiYKCQkJKCFtYXhEYXRlIHx8IGRhdGUuZ2V0VGltZSgpIDw9IG1heERhdGUuZ2V0VGltZSgpKSAmJgoJCQkoIW1pblllYXIgfHwgZGF0ZS5nZXRGdWxsWWVhcigpID49IG1pblllYXIpICYmCgkJCSghbWF4WWVhciB8fCBkYXRlLmdldEZ1bGxZZWFyKCkgPD0gbWF4WWVhcikpOwoJfSwKCgkvKiBQcm92aWRlIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciBmb3JtYXR0aW5nL3BhcnNpbmcuICovCglfZ2V0Rm9ybWF0Q29uZmlnOiBmdW5jdGlvbihpbnN0KSB7CgkJdmFyIHNob3J0WWVhckN1dG9mZiA9IHRoaXMuX2dldChpbnN0LCAic2hvcnRZZWFyQ3V0b2ZmIik7CgkJc2hvcnRZZWFyQ3V0b2ZmID0gKHR5cGVvZiBzaG9ydFllYXJDdXRvZmYgIT09ICJzdHJpbmciID8gc2hvcnRZZWFyQ3V0b2ZmIDoKCQkJbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpICUgMTAwICsgcGFyc2VJbnQoc2hvcnRZZWFyQ3V0b2ZmLCAxMCkpOwoJCXJldHVybiB7c2hvcnRZZWFyQ3V0b2ZmOiBzaG9ydFllYXJDdXRvZmYsCgkJCWRheU5hbWVzU2hvcnQ6IHRoaXMuX2dldChpbnN0LCAiZGF5TmFtZXNTaG9ydCIpLCBkYXlOYW1lczogdGhpcy5fZ2V0KGluc3QsICJkYXlOYW1lcyIpLAoJCQltb250aE5hbWVzU2hvcnQ6IHRoaXMuX2dldChpbnN0LCAibW9udGhOYW1lc1Nob3J0IiksIG1vbnRoTmFtZXM6IHRoaXMuX2dldChpbnN0LCAibW9udGhOYW1lcyIpfTsKCX0sCgoJLyogRm9ybWF0IHRoZSBnaXZlbiBkYXRlIGZvciBkaXNwbGF5LiAqLwoJX2Zvcm1hdERhdGU6IGZ1bmN0aW9uKGluc3QsIGRheSwgbW9udGgsIHllYXIpIHsKCQlpZiAoIWRheSkgewoJCQlpbnN0LmN1cnJlbnREYXkgPSBpbnN0LnNlbGVjdGVkRGF5OwoJCQlpbnN0LmN1cnJlbnRNb250aCA9IGluc3Quc2VsZWN0ZWRNb250aDsKCQkJaW5zdC5jdXJyZW50WWVhciA9IGluc3Quc2VsZWN0ZWRZZWFyOwoJCX0KCQl2YXIgZGF0ZSA9IChkYXkgPyAodHlwZW9mIGRheSA9PT0gIm9iamVjdCIgPyBkYXkgOgoJCQl0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5KSkpIDoKCQkJdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoaW5zdC5jdXJyZW50WWVhciwgaW5zdC5jdXJyZW50TW9udGgsIGluc3QuY3VycmVudERheSkpKTsKCQlyZXR1cm4gdGhpcy5mb3JtYXREYXRlKHRoaXMuX2dldChpbnN0LCAiZGF0ZUZvcm1hdCIpLCBkYXRlLCB0aGlzLl9nZXRGb3JtYXRDb25maWcoaW5zdCkpOwoJfQp9KTsKCi8qCiAqIEJpbmQgaG92ZXIgZXZlbnRzIGZvciBkYXRlcGlja2VyIGVsZW1lbnRzLgogKiBEb25lIHZpYSBkZWxlZ2F0ZSBzbyB0aGUgYmluZGluZyBvbmx5IG9jY3VycyBvbmNlIGluIHRoZSBsaWZldGltZSBvZiB0aGUgcGFyZW50IGRpdi4KICogR2xvYmFsIGluc3RBY3RpdmUsIHNldCBieSBfdXBkYXRlRGF0ZXBpY2tlciBhbGxvd3MgdGhlIGhhbmRsZXJzIHRvIGZpbmQgdGhlaXIgd2F5IGJhY2sgdG8gdGhlIGFjdGl2ZSBwaWNrZXIuCiAqLwpmdW5jdGlvbiBiaW5kSG92ZXIoZHBEaXYpIHsKCXZhciBzZWxlY3RvciA9ICJidXR0b24sIC51aS1kYXRlcGlja2VyLXByZXYsIC51aS1kYXRlcGlja2VyLW5leHQsIC51aS1kYXRlcGlja2VyLWNhbGVuZGFyIHRkIGEiOwoJcmV0dXJuIGRwRGl2LmRlbGVnYXRlKHNlbGVjdG9yLCAibW91c2VvdXQiLCBmdW5jdGlvbigpIHsKCQkJJCh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKTsKCQkJaWYgKHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItcHJldiIpICE9PSAtMSkgewoJCQkJJCh0aGlzKS5yZW1vdmVDbGFzcygidWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyIik7CgkJCX0KCQkJaWYgKHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItbmV4dCIpICE9PSAtMSkgewoJCQkJJCh0aGlzKS5yZW1vdmVDbGFzcygidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIik7CgkJCX0KCQl9KQoJCS5kZWxlZ2F0ZShzZWxlY3RvciwgIm1vdXNlb3ZlciIsIGZ1bmN0aW9uKCl7CgkJCWlmICghJC5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlciggaW5zdEFjdGl2ZS5pbmxpbmUgPyBkcERpdi5wYXJlbnQoKVswXSA6IGluc3RBY3RpdmUuaW5wdXRbMF0pKSB7CgkJCQkkKHRoaXMpLnBhcmVudHMoIi51aS1kYXRlcGlja2VyLWNhbGVuZGFyIikuZmluZCgiYSIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpOwoJCQkJJCh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKTsKCQkJCWlmICh0aGlzLmNsYXNzTmFtZS5pbmRleE9mKCJ1aS1kYXRlcGlja2VyLXByZXYiKSAhPT0gLTEpIHsKCQkJCQkkKHRoaXMpLmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXIiKTsKCQkJCX0KCQkJCWlmICh0aGlzLmNsYXNzTmFtZS5pbmRleE9mKCJ1aS1kYXRlcGlja2VyLW5leHQiKSAhPT0gLTEpIHsKCQkJCQkkKHRoaXMpLmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLW5leHQtaG92ZXIiKTsKCQkJCX0KCQkJfQoJCX0pOwp9CgovKiBqUXVlcnkgZXh0ZW5kIG5vdyBpZ25vcmVzIG51bGxzISAqLwpmdW5jdGlvbiBleHRlbmRSZW1vdmUodGFyZ2V0LCBwcm9wcykgewoJJC5leHRlbmQodGFyZ2V0LCBwcm9wcyk7Cglmb3IgKHZhciBuYW1lIGluIHByb3BzKSB7CgkJaWYgKHByb3BzW25hbWVdID09IG51bGwpIHsKCQkJdGFyZ2V0W25hbWVdID0gcHJvcHNbbmFtZV07CgkJfQoJfQoJcmV0dXJuIHRhcmdldDsKfQoKLyogSW52b2tlIHRoZSBkYXRlcGlja2VyIGZ1bmN0aW9uYWxpdHkuCiAgIEBwYXJhbSAgb3B0aW9ucyAgc3RyaW5nIC0gYSBjb21tYW5kLCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGFkZGl0aW9uYWwgcGFyYW1ldGVycyBvcgoJCQkJCU9iamVjdCAtIHNldHRpbmdzIGZvciBhdHRhY2hpbmcgbmV3IGRhdGVwaWNrZXIgZnVuY3Rpb25hbGl0eQogICBAcmV0dXJuICBqUXVlcnkgb2JqZWN0ICovCiQuZm4uZGF0ZXBpY2tlciA9IGZ1bmN0aW9uKG9wdGlvbnMpewoKCS8qIFZlcmlmeSBhbiBlbXB0eSBjb2xsZWN0aW9uIHdhc24ndCBwYXNzZWQgLSBGaXhlcyAjNjk3NiAqLwoJaWYgKCAhdGhpcy5sZW5ndGggKSB7CgkJcmV0dXJuIHRoaXM7Cgl9CgoJLyogSW5pdGlhbGlzZSB0aGUgZGF0ZSBwaWNrZXIuICovCglpZiAoISQuZGF0ZXBpY2tlci5pbml0aWFsaXplZCkgewoJCSQoZG9jdW1lbnQpLm1vdXNlZG93bigkLmRhdGVwaWNrZXIuX2NoZWNrRXh0ZXJuYWxDbGljayk7CgkJJC5kYXRlcGlja2VyLmluaXRpYWxpemVkID0gdHJ1ZTsKCX0KCgkvKiBBcHBlbmQgZGF0ZXBpY2tlciBtYWluIGNvbnRhaW5lciB0byBib2R5IGlmIG5vdCBleGlzdC4gKi8KCWlmICgkKCIjIiskLmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RoID09PSAwKSB7CgkJJCgiYm9keSIpLmFwcGVuZCgkLmRhdGVwaWNrZXIuZHBEaXYpOwoJfQoKCXZhciBvdGhlckFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwoJaWYgKHR5cGVvZiBvcHRpb25zID09PSAic3RyaW5nIiAmJiAob3B0aW9ucyA9PT0gImlzRGlzYWJsZWQiIHx8IG9wdGlvbnMgPT09ICJnZXREYXRlIiB8fCBvcHRpb25zID09PSAid2lkZ2V0IikpIHsKCQlyZXR1cm4gJC5kYXRlcGlja2VyWyJfIiArIG9wdGlvbnMgKyAiRGF0ZXBpY2tlciJdLgoJCQlhcHBseSgkLmRhdGVwaWNrZXIsIFt0aGlzWzBdXS5jb25jYXQob3RoZXJBcmdzKSk7Cgl9CglpZiAob3B0aW9ucyA9PT0gIm9wdGlvbiIgJiYgYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiB0eXBlb2YgYXJndW1lbnRzWzFdID09PSAic3RyaW5nIikgewoJCXJldHVybiAkLmRhdGVwaWNrZXJbIl8iICsgb3B0aW9ucyArICJEYXRlcGlja2VyIl0uCgkJCWFwcGx5KCQuZGF0ZXBpY2tlciwgW3RoaXNbMF1dLmNvbmNhdChvdGhlckFyZ3MpKTsKCX0KCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJdHlwZW9mIG9wdGlvbnMgPT09ICJzdHJpbmciID8KCQkJJC5kYXRlcGlja2VyWyJfIiArIG9wdGlvbnMgKyAiRGF0ZXBpY2tlciJdLgoJCQkJYXBwbHkoJC5kYXRlcGlja2VyLCBbdGhpc10uY29uY2F0KG90aGVyQXJncykpIDoKCQkJJC5kYXRlcGlja2VyLl9hdHRhY2hEYXRlcGlja2VyKHRoaXMsIG9wdGlvbnMpOwoJfSk7Cn07CgokLmRhdGVwaWNrZXIgPSBuZXcgRGF0ZXBpY2tlcigpOyAvLyBzaW5nbGV0b24gaW5zdGFuY2UKJC5kYXRlcGlja2VyLmluaXRpYWxpemVkID0gZmFsc2U7CiQuZGF0ZXBpY2tlci51dWlkID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CiQuZGF0ZXBpY2tlci52ZXJzaW9uID0gIjEuMTAuMyI7Cgp9KShqUXVlcnkpOwo=]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/jquery-ui-datepicker/js/jquery-ui-1.10.3.custom.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGpRdWVyeSBVSSAtIHYxLjEwLjMgLSAyMDEzLTA4LTA1CiogaHR0cDovL2pxdWVyeXVpLmNvbQoqIEluY2x1ZGVzOiBqcXVlcnkudWkuY29yZS5qcywganF1ZXJ5LnVpLmRhdGVwaWNrZXIuanMKKiBDb3B5cmlnaHQgMjAxMyBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIExpY2Vuc2VkIE1JVCAqLwoKKGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSh0LGkpe3ZhciBhLG4scixvPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iYXJlYSI9PT1vPyhhPXQucGFyZW50Tm9kZSxuPWEubmFtZSx0LmhyZWYmJm4mJiJtYXAiPT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPyhyPWUoImltZ1t1c2VtYXA9IyIrbisiXSIpWzBdLCEhciYmcyhyKSk6ITEpOigvaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QvLnRlc3Qobyk/IXQuZGlzYWJsZWQ6ImEiPT09bz90LmhyZWZ8fGk6aSkmJnModCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZS5leHByLmZpbHRlcnMudmlzaWJsZSh0KSYmIWUodCkucGFyZW50cygpLmFkZEJhY2soKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4iaGlkZGVuIj09PWUuY3NzKHRoaXMsInZpc2liaWxpdHkiKX0pLmxlbmd0aH12YXIgYT0wLG49L151aS1pZC1cZCskLztlLnVpPWUudWl8fHt9LGUuZXh0ZW5kKGUudWkse3ZlcnNpb246IjEuMTAuMyIsa2V5Q29kZTp7QkFDS1NQQUNFOjgsQ09NTUE6MTg4LERFTEVURTo0NixET1dOOjQwLEVORDozNSxFTlRFUjoxMyxFU0NBUEU6MjcsSE9NRTozNixMRUZUOjM3LE5VTVBBRF9BREQ6MTA3LE5VTVBBRF9ERUNJTUFMOjExMCxOVU1QQURfRElWSURFOjExMSxOVU1QQURfRU5URVI6MTA4LE5VTVBBRF9NVUxUSVBMWToxMDYsTlVNUEFEX1NVQlRSQUNUOjEwOSxQQUdFX0RPV046MzQsUEFHRV9VUDozMyxQRVJJT0Q6MTkwLFJJR0hUOjM5LFNQQUNFOjMyLFRBQjo5LFVQOjM4fX0pLGUuZm4uZXh0ZW5kKHtmb2N1czpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oaSxzKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGk/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZSh0KS5mb2N1cygpLHMmJnMuY2FsbCh0KX0saSl9KTp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KGUuZm4uZm9jdXMpLHNjcm9sbFBhcmVudDpmdW5jdGlvbigpe3ZhciB0O3JldHVybiB0PWUudWkuaWUmJi8oc3RhdGljfHJlbGF0aXZlKS8udGVzdCh0aGlzLmNzcygicG9zaXRpb24iKSl8fC9hYnNvbHV0ZS8udGVzdCh0aGlzLmNzcygicG9zaXRpb24iKSk/dGhpcy5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuLyhyZWxhdGl2ZXxhYnNvbHV0ZXxmaXhlZCkvLnRlc3QoZS5jc3ModGhpcywicG9zaXRpb24iKSkmJi8oYXV0b3xzY3JvbGwpLy50ZXN0KGUuY3NzKHRoaXMsIm92ZXJmbG93IikrZS5jc3ModGhpcywib3ZlcmZsb3cteSIpK2UuY3NzKHRoaXMsIm92ZXJmbG93LXgiKSl9KS5lcSgwKTp0aGlzLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4vKGF1dG98c2Nyb2xsKS8udGVzdChlLmNzcyh0aGlzLCJvdmVyZmxvdyIpK2UuY3NzKHRoaXMsIm92ZXJmbG93LXkiKStlLmNzcyh0aGlzLCJvdmVyZmxvdy14IikpfSkuZXEoMCksL2ZpeGVkLy50ZXN0KHRoaXMuY3NzKCJwb3NpdGlvbiIpKXx8IXQubGVuZ3RoP2UoZG9jdW1lbnQpOnR9LHpJbmRleDpmdW5jdGlvbihpKXtpZihpIT09dClyZXR1cm4gdGhpcy5jc3MoInpJbmRleCIsaSk7aWYodGhpcy5sZW5ndGgpZm9yKHZhciBzLGEsbj1lKHRoaXNbMF0pO24ubGVuZ3RoJiZuWzBdIT09ZG9jdW1lbnQ7KXtpZihzPW4uY3NzKCJwb3NpdGlvbiIpLCgiYWJzb2x1dGUiPT09c3x8InJlbGF0aXZlIj09PXN8fCJmaXhlZCI9PT1zKSYmKGE9cGFyc2VJbnQobi5jc3MoInpJbmRleCIpLDEwKSwhaXNOYU4oYSkmJjAhPT1hKSlyZXR1cm4gYTtuPW4ucGFyZW50KCl9cmV0dXJuIDB9LHVuaXF1ZUlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuaWR8fCh0aGlzLmlkPSJ1aS1pZC0iKyArK2EpfSl9LHJlbW92ZVVuaXF1ZUlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe24udGVzdCh0aGlzLmlkKSYmZSh0aGlzKS5yZW1vdmVBdHRyKCJpZCIpfSl9fSksZS5leHRlbmQoZS5leHByWyI6Il0se2RhdGE6ZS5leHByLmNyZWF0ZVBzZXVkbz9lLmV4cHIuY3JlYXRlUHNldWRvKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4hIWUuZGF0YShpLHQpfX0pOmZ1bmN0aW9uKHQsaSxzKXtyZXR1cm4hIWUuZGF0YSh0LHNbM10pfSxmb2N1c2FibGU6ZnVuY3Rpb24odCl7cmV0dXJuIGkodCwhaXNOYU4oZS5hdHRyKHQsInRhYmluZGV4IikpKX0sdGFiYmFibGU6ZnVuY3Rpb24odCl7dmFyIHM9ZS5hdHRyKHQsInRhYmluZGV4IiksYT1pc05hTihzKTtyZXR1cm4oYXx8cz49MCkmJmkodCwhYSl9fSksZSgiPGE+Iikub3V0ZXJXaWR0aCgxKS5qcXVlcnl8fGUuZWFjaChbIldpZHRoIiwiSGVpZ2h0Il0sZnVuY3Rpb24oaSxzKXtmdW5jdGlvbiBhKHQsaSxzLGEpe3JldHVybiBlLmVhY2gobixmdW5jdGlvbigpe2ktPXBhcnNlRmxvYXQoZS5jc3ModCwicGFkZGluZyIrdGhpcykpfHwwLHMmJihpLT1wYXJzZUZsb2F0KGUuY3NzKHQsImJvcmRlciIrdGhpcysiV2lkdGgiKSl8fDApLGEmJihpLT1wYXJzZUZsb2F0KGUuY3NzKHQsIm1hcmdpbiIrdGhpcykpfHwwKX0pLGl9dmFyIG49IldpZHRoIj09PXM/WyJMZWZ0IiwiUmlnaHQiXTpbIlRvcCIsIkJvdHRvbSJdLHI9cy50b0xvd2VyQ2FzZSgpLG89e2lubmVyV2lkdGg6ZS5mbi5pbm5lcldpZHRoLGlubmVySGVpZ2h0OmUuZm4uaW5uZXJIZWlnaHQsb3V0ZXJXaWR0aDplLmZuLm91dGVyV2lkdGgsb3V0ZXJIZWlnaHQ6ZS5mbi5vdXRlckhlaWdodH07ZS5mblsiaW5uZXIiK3NdPWZ1bmN0aW9uKGkpe3JldHVybiBpPT09dD9vWyJpbm5lciIrc10uY2FsbCh0aGlzKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmNzcyhyLGEodGhpcyxpKSsicHgiKX0pfSxlLmZuWyJvdXRlciIrc109ZnVuY3Rpb24odCxpKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQ/b1sib3V0ZXIiK3NdLmNhbGwodGhpcyx0KTp0aGlzLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmNzcyhyLGEodGhpcyx0LCEwLGkpKyJweCIpfSl9fSksZS5mbi5hZGRCYWNrfHwoZS5mbi5hZGRCYWNrPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFkZChudWxsPT1lP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGUpKX0pLGUoIjxhPiIpLmRhdGEoImEtYiIsImEiKS5yZW1vdmVEYXRhKCJhLWIiKS5kYXRhKCJhLWIiKSYmKGUuZm4ucmVtb3ZlRGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dC5jYWxsKHRoaXMsZS5jYW1lbENhc2UoaSkpOnQuY2FsbCh0aGlzKX19KGUuZm4ucmVtb3ZlRGF0YSkpLGUudWkuaWU9ISEvbXNpZSBbXHcuXSsvLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKSxlLnN1cHBvcnQuc2VsZWN0c3RhcnQ9Im9uc2VsZWN0c3RhcnQiaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZS5mbi5leHRlbmQoe2Rpc2FibGVTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iaW5kKChlLnN1cHBvcnQuc2VsZWN0c3RhcnQ/InNlbGVjdHN0YXJ0IjoibW91c2Vkb3duIikrIi51aS1kaXNhYmxlU2VsZWN0aW9uIixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9KX0sZW5hYmxlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5iaW5kKCIudWktZGlzYWJsZVNlbGVjdGlvbiIpfX0pLGUuZXh0ZW5kKGUudWkse3BsdWdpbjp7YWRkOmZ1bmN0aW9uKHQsaSxzKXt2YXIgYSxuPWUudWlbdF0ucHJvdG90eXBlO2ZvcihhIGluIHMpbi5wbHVnaW5zW2FdPW4ucGx1Z2luc1thXXx8W10sbi5wbHVnaW5zW2FdLnB1c2goW2ksc1thXV0pfSxjYWxsOmZ1bmN0aW9uKGUsdCxpKXt2YXIgcyxhPWUucGx1Z2luc1t0XTtpZihhJiZlLmVsZW1lbnRbMF0ucGFyZW50Tm9kZSYmMTEhPT1lLmVsZW1lbnRbMF0ucGFyZW50Tm9kZS5ub2RlVHlwZSlmb3Iocz0wO2EubGVuZ3RoPnM7cysrKWUub3B0aW9uc1thW3NdWzBdXSYmYVtzXVsxXS5hcHBseShlLmVsZW1lbnQsaSl9fSxoYXNTY3JvbGw6ZnVuY3Rpb24odCxpKXtpZigiaGlkZGVuIj09PWUodCkuY3NzKCJvdmVyZmxvdyIpKXJldHVybiExO3ZhciBzPWkmJiJsZWZ0Ij09PWk/InNjcm9sbExlZnQiOiJzY3JvbGxUb3AiLGE9ITE7cmV0dXJuIHRbc10+MD8hMDoodFtzXT0xLGE9dFtzXT4wLHRbc109MCxhKX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gaSgpe3RoaXMuX2N1ckluc3Q9bnVsbCx0aGlzLl9rZXlFdmVudD0hMSx0aGlzLl9kaXNhYmxlZElucHV0cz1bXSx0aGlzLl9kYXRlcGlja2VyU2hvd2luZz0hMSx0aGlzLl9pbkRpYWxvZz0hMSx0aGlzLl9tYWluRGl2SWQ9InVpLWRhdGVwaWNrZXItZGl2Iix0aGlzLl9pbmxpbmVDbGFzcz0idWktZGF0ZXBpY2tlci1pbmxpbmUiLHRoaXMuX2FwcGVuZENsYXNzPSJ1aS1kYXRlcGlja2VyLWFwcGVuZCIsdGhpcy5fdHJpZ2dlckNsYXNzPSJ1aS1kYXRlcGlja2VyLXRyaWdnZXIiLHRoaXMuX2RpYWxvZ0NsYXNzPSJ1aS1kYXRlcGlja2VyLWRpYWxvZyIsdGhpcy5fZGlzYWJsZUNsYXNzPSJ1aS1kYXRlcGlja2VyLWRpc2FibGVkIix0aGlzLl91bnNlbGVjdGFibGVDbGFzcz0idWktZGF0ZXBpY2tlci11bnNlbGVjdGFibGUiLHRoaXMuX2N1cnJlbnRDbGFzcz0idWktZGF0ZXBpY2tlci1jdXJyZW50LWRheSIsdGhpcy5fZGF5T3ZlckNsYXNzPSJ1aS1kYXRlcGlja2VyLWRheXMtY2VsbC1vdmVyIix0aGlzLnJlZ2lvbmFsPVtdLHRoaXMucmVnaW9uYWxbIiJdPXtjbG9zZVRleHQ6IkRvbmUiLHByZXZUZXh0OiJQcmV2IixuZXh0VGV4dDoiTmV4dCIsY3VycmVudFRleHQ6IlRvZGF5Iixtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSx3ZWVrSGVhZGVyOiJXayIsZGF0ZUZvcm1hdDoibW0vZGQveXkiLGZpcnN0RGF5OjAsaXNSVEw6ITEsc2hvd01vbnRoQWZ0ZXJZZWFyOiExLHllYXJTdWZmaXg6IiJ9LHRoaXMuX2RlZmF1bHRzPXtzaG93T246ImZvY3VzIixzaG93QW5pbToiZmFkZUluIixzaG93T3B0aW9uczp7fSxkZWZhdWx0RGF0ZTpudWxsLGFwcGVuZFRleHQ6IiIsYnV0dG9uVGV4dDoiLi4uIixidXR0b25JbWFnZToiIixidXR0b25JbWFnZU9ubHk6ITEsaGlkZUlmTm9QcmV2TmV4dDohMSxuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0OiExLGdvdG9DdXJyZW50OiExLGNoYW5nZU1vbnRoOiExLGNoYW5nZVllYXI6ITEseWVhclJhbmdlOiJjLTEwOmMrMTAiLHNob3dPdGhlck1vbnRoczohMSxzZWxlY3RPdGhlck1vbnRoczohMSxzaG93V2VlazohMSxjYWxjdWxhdGVXZWVrOnRoaXMuaXNvODYwMVdlZWssc2hvcnRZZWFyQ3V0b2ZmOiIrMTAiLG1pbkRhdGU6bnVsbCxtYXhEYXRlOm51bGwsZHVyYXRpb246ImZhc3QiLGJlZm9yZVNob3dEYXk6bnVsbCxiZWZvcmVTaG93Om51bGwsb25TZWxlY3Q6bnVsbCxvbkNoYW5nZU1vbnRoWWVhcjpudWxsLG9uQ2xvc2U6bnVsbCxudW1iZXJPZk1vbnRoczoxLHNob3dDdXJyZW50QXRQb3M6MCxzdGVwTW9udGhzOjEsc3RlcEJpZ01vbnRoczoxMixhbHRGaWVsZDoiIixhbHRGb3JtYXQ6IiIsY29uc3RyYWluSW5wdXQ6ITAsc2hvd0J1dHRvblBhbmVsOiExLGF1dG9TaXplOiExLGRpc2FibGVkOiExfSx0LmV4dGVuZCh0aGlzLl9kZWZhdWx0cyx0aGlzLnJlZ2lvbmFsWyIiXSksdGhpcy5kcERpdj1zKHQoIjxkaXYgaWQ9JyIrdGhpcy5fbWFpbkRpdklkKyInIGNsYXNzPSd1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCc+PC9kaXY+IikpfWZ1bmN0aW9uIHMoZSl7dmFyIGk9ImJ1dHRvbiwgLnVpLWRhdGVwaWNrZXItcHJldiwgLnVpLWRhdGVwaWNrZXItbmV4dCwgLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdGQgYSI7cmV0dXJuIGUuZGVsZWdhdGUoaSwibW91c2VvdXQiLGZ1bmN0aW9uKCl7dCh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItcHJldiIpJiZ0KHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXIiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItbmV4dCIpJiZ0KHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kYXRlcGlja2VyLW5leHQtaG92ZXIiKX0pLmRlbGVnYXRlKGksIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXt0LmRhdGVwaWNrZXIuX2lzRGlzYWJsZWREYXRlcGlja2VyKGEuaW5saW5lP2UucGFyZW50KClbMF06YS5pbnB1dFswXSl8fCh0KHRoaXMpLnBhcmVudHMoIi51aS1kYXRlcGlja2VyLWNhbGVuZGFyIikuZmluZCgiYSIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLHQodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWhvdmVyIiksLTEhPT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKCJ1aS1kYXRlcGlja2VyLXByZXYiKSYmdCh0aGlzKS5hZGRDbGFzcygidWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyIiksLTEhPT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKCJ1aS1kYXRlcGlja2VyLW5leHQiKSYmdCh0aGlzKS5hZGRDbGFzcygidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIikpfSl9ZnVuY3Rpb24gbihlLGkpe3QuZXh0ZW5kKGUsaSk7Zm9yKHZhciBzIGluIGkpbnVsbD09aVtzXSYmKGVbc109aVtzXSk7cmV0dXJuIGV9dC5leHRlbmQodC51aSx7ZGF0ZXBpY2tlcjp7dmVyc2lvbjoiMS4xMC4zIn19KTt2YXIgYSxyPSJkYXRlcGlja2VyIjt0LmV4dGVuZChpLnByb3RvdHlwZSx7bWFya2VyQ2xhc3NOYW1lOiJoYXNEYXRlcGlja2VyIixtYXhSb3dzOjQsX3dpZGdldERhdGVwaWNrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kcERpdn0sc2V0RGVmYXVsdHM6ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5fZGVmYXVsdHMsdHx8e30pLHRoaXN9LF9hdHRhY2hEYXRlcGlja2VyOmZ1bmN0aW9uKGUsaSl7dmFyIHMsbixhO3M9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG49ImRpdiI9PT1zfHwic3BhbiI9PT1zLGUuaWR8fCh0aGlzLnV1aWQrPTEsZS5pZD0iZHAiK3RoaXMudXVpZCksYT10aGlzLl9uZXdJbnN0KHQoZSksbiksYS5zZXR0aW5ncz10LmV4dGVuZCh7fSxpfHx7fSksImlucHV0Ij09PXM/dGhpcy5fY29ubmVjdERhdGVwaWNrZXIoZSxhKTpuJiZ0aGlzLl9pbmxpbmVEYXRlcGlja2VyKGUsYSl9LF9uZXdJbnN0OmZ1bmN0aW9uKGUsaSl7dmFyIG49ZVswXS5pZC5yZXBsYWNlKC8oW15BLVphLXowLTlfXC1dKS9nLCJcXFxcJDEiKTtyZXR1cm57aWQ6bixpbnB1dDplLHNlbGVjdGVkRGF5OjAsc2VsZWN0ZWRNb250aDowLHNlbGVjdGVkWWVhcjowLGRyYXdNb250aDowLGRyYXdZZWFyOjAsaW5saW5lOmksZHBEaXY6aT9zKHQoIjxkaXYgY2xhc3M9JyIrdGhpcy5faW5saW5lQ2xhc3MrIiB1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCc+PC9kaXY+IikpOnRoaXMuZHBEaXZ9fSxfY29ubmVjdERhdGVwaWNrZXI6ZnVuY3Rpb24oZSxpKXt2YXIgcz10KGUpO2kuYXBwZW5kPXQoW10pLGkudHJpZ2dlcj10KFtdKSxzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKXx8KHRoaXMuX2F0dGFjaG1lbnRzKHMsaSkscy5hZGRDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkua2V5ZG93bih0aGlzLl9kb0tleURvd24pLmtleXByZXNzKHRoaXMuX2RvS2V5UHJlc3MpLmtleXVwKHRoaXMuX2RvS2V5VXApLHRoaXMuX2F1dG9TaXplKGkpLHQuZGF0YShlLHIsaSksaS5zZXR0aW5ncy5kaXNhYmxlZCYmdGhpcy5fZGlzYWJsZURhdGVwaWNrZXIoZSkpfSxfYXR0YWNobWVudHM6ZnVuY3Rpb24oZSxpKXt2YXIgcyxuLGEscj10aGlzLl9nZXQoaSwiYXBwZW5kVGV4dCIpLG89dGhpcy5fZ2V0KGksImlzUlRMIik7aS5hcHBlbmQmJmkuYXBwZW5kLnJlbW92ZSgpLHImJihpLmFwcGVuZD10KCI8c3BhbiBjbGFzcz0nIit0aGlzLl9hcHBlbmRDbGFzcysiJz4iK3IrIjwvc3Bhbj4iKSxlW28/ImJlZm9yZSI6ImFmdGVyIl0oaS5hcHBlbmQpKSxlLnVuYmluZCgiZm9jdXMiLHRoaXMuX3Nob3dEYXRlcGlja2VyKSxpLnRyaWdnZXImJmkudHJpZ2dlci5yZW1vdmUoKSxzPXRoaXMuX2dldChpLCJzaG93T24iKSwoImZvY3VzIj09PXN8fCJib3RoIj09PXMpJiZlLmZvY3VzKHRoaXMuX3Nob3dEYXRlcGlja2VyKSwoImJ1dHRvbiI9PT1zfHwiYm90aCI9PT1zKSYmKG49dGhpcy5fZ2V0KGksImJ1dHRvblRleHQiKSxhPXRoaXMuX2dldChpLCJidXR0b25JbWFnZSIpLGkudHJpZ2dlcj10KHRoaXMuX2dldChpLCJidXR0b25JbWFnZU9ubHkiKT90KCI8aW1nLz4iKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpLmF0dHIoe3NyYzphLGFsdDpuLHRpdGxlOm59KTp0KCI8YnV0dG9uIHR5cGU9J2J1dHRvbic+PC9idXR0b24+IikuYWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKS5odG1sKGE/dCgiPGltZy8+IikuYXR0cih7c3JjOmEsYWx0Om4sdGl0bGU6bn0pOm4pKSxlW28/ImJlZm9yZSI6ImFmdGVyIl0oaS50cmlnZ2VyKSxpLnRyaWdnZXIuY2xpY2soZnVuY3Rpb24oKXtyZXR1cm4gdC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmdC5kYXRlcGlja2VyLl9sYXN0SW5wdXQ9PT1lWzBdP3QuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTp0LmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZ0LmRhdGVwaWNrZXIuX2xhc3RJbnB1dCE9PWVbMF0/KHQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKSx0LmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKGVbMF0pKTp0LmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKGVbMF0pLCExfSkpfSxfYXV0b1NpemU6ZnVuY3Rpb24odCl7aWYodGhpcy5fZ2V0KHQsImF1dG9TaXplIikmJiF0LmlubGluZSl7dmFyIGUsaSxzLG4sYT1uZXcgRGF0ZSgyMDA5LDExLDIwKSxyPXRoaXMuX2dldCh0LCJkYXRlRm9ybWF0Iik7ci5tYXRjaCgvW0RNXS8pJiYoZT1mdW5jdGlvbih0KXtmb3IoaT0wLHM9MCxuPTA7dC5sZW5ndGg+bjtuKyspdFtuXS5sZW5ndGg+aSYmKGk9dFtuXS5sZW5ndGgscz1uKTtyZXR1cm4gc30sYS5zZXRNb250aChlKHRoaXMuX2dldCh0LHIubWF0Y2goL01NLyk/Im1vbnRoTmFtZXMiOiJtb250aE5hbWVzU2hvcnQiKSkpLGEuc2V0RGF0ZShlKHRoaXMuX2dldCh0LHIubWF0Y2goL0RELyk/ImRheU5hbWVzIjoiZGF5TmFtZXNTaG9ydCIpKSsyMC1hLmdldERheSgpKSksdC5pbnB1dC5hdHRyKCJzaXplIix0aGlzLl9mb3JtYXREYXRlKHQsYSkubGVuZ3RoKX19LF9pbmxpbmVEYXRlcGlja2VyOmZ1bmN0aW9uKGUsaSl7dmFyIHM9dChlKTtzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKXx8KHMuYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmFwcGVuZChpLmRwRGl2KSx0LmRhdGEoZSxyLGkpLHRoaXMuX3NldERhdGUoaSx0aGlzLl9nZXREZWZhdWx0RGF0ZShpKSwhMCksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihpKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUoaSksaS5zZXR0aW5ncy5kaXNhYmxlZCYmdGhpcy5fZGlzYWJsZURhdGVwaWNrZXIoZSksaS5kcERpdi5jc3MoImRpc3BsYXkiLCJibG9jayIpKX0sX2RpYWxvZ0RhdGVwaWNrZXI6ZnVuY3Rpb24oZSxpLHMsYSxvKXt2YXIgaCxsLGMsdSxkLHA9dGhpcy5fZGlhbG9nSW5zdDtyZXR1cm4gcHx8KHRoaXMudXVpZCs9MSxoPSJkcCIrdGhpcy51dWlkLHRoaXMuX2RpYWxvZ0lucHV0PXQoIjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nIitoKyInIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogLTEwMHB4OyB3aWR0aDogMHB4OycvPiIpLHRoaXMuX2RpYWxvZ0lucHV0LmtleWRvd24odGhpcy5fZG9LZXlEb3duKSx0KCJib2R5IikuYXBwZW5kKHRoaXMuX2RpYWxvZ0lucHV0KSxwPXRoaXMuX2RpYWxvZ0luc3Q9dGhpcy5fbmV3SW5zdCh0aGlzLl9kaWFsb2dJbnB1dCwhMSkscC5zZXR0aW5ncz17fSx0LmRhdGEodGhpcy5fZGlhbG9nSW5wdXRbMF0scixwKSksbihwLnNldHRpbmdzLGF8fHt9KSxpPWkmJmkuY29uc3RydWN0b3I9PT1EYXRlP3RoaXMuX2Zvcm1hdERhdGUocCxpKTppLHRoaXMuX2RpYWxvZ0lucHV0LnZhbChpKSx0aGlzLl9wb3M9bz9vLmxlbmd0aD9vOltvLnBhZ2VYLG8ucGFnZVldOm51bGwsdGhpcy5fcG9zfHwobD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsYz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LHU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnR8fGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCxkPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wLHRoaXMuX3Bvcz1bbC8yLTEwMCt1LGMvMi0xNTArZF0pLHRoaXMuX2RpYWxvZ0lucHV0LmNzcygibGVmdCIsdGhpcy5fcG9zWzBdKzIwKyJweCIpLmNzcygidG9wIix0aGlzLl9wb3NbMV0rInB4IikscC5zZXR0aW5ncy5vblNlbGVjdD1zLHRoaXMuX2luRGlhbG9nPSEwLHRoaXMuZHBEaXYuYWRkQ2xhc3ModGhpcy5fZGlhbG9nQ2xhc3MpLHRoaXMuX3Nob3dEYXRlcGlja2VyKHRoaXMuX2RpYWxvZ0lucHV0WzBdKSx0LmJsb2NrVUkmJnQuYmxvY2tVSSh0aGlzLmRwRGl2KSx0LmRhdGEodGhpcy5fZGlhbG9nSW5wdXRbMF0scixwKSx0aGlzfSxfZGVzdHJveURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dmFyIGkscz10KGUpLG49dC5kYXRhKGUscik7cy5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkmJihpPWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSx0LnJlbW92ZURhdGEoZSxyKSwiaW5wdXQiPT09aT8obi5hcHBlbmQucmVtb3ZlKCksbi50cmlnZ2VyLnJlbW92ZSgpLHMucmVtb3ZlQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLnVuYmluZCgiZm9jdXMiLHRoaXMuX3Nob3dEYXRlcGlja2VyKS51bmJpbmQoImtleWRvd24iLHRoaXMuX2RvS2V5RG93bikudW5iaW5kKCJrZXlwcmVzcyIsdGhpcy5fZG9LZXlQcmVzcykudW5iaW5kKCJrZXl1cCIsdGhpcy5fZG9LZXlVcCkpOigiZGl2Ij09PWl8fCJzcGFuIj09PWkpJiZzLnJlbW92ZUNsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5lbXB0eSgpKX0sX2VuYWJsZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dmFyIGkscyxuPXQoZSksYT10LmRhdGEoZSxyKTtuLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSYmKGk9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCJpbnB1dCI9PT1pPyhlLmRpc2FibGVkPSExLGEudHJpZ2dlci5maWx0ZXIoImJ1dHRvbiIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkPSExfSkuZW5kKCkuZmlsdGVyKCJpbWciKS5jc3Moe29wYWNpdHk6IjEuMCIsY3Vyc29yOiIifSkpOigiZGl2Ij09PWl8fCJzcGFuIj09PWkpJiYocz1uLmNoaWxkcmVuKCIuIit0aGlzLl9pbmxpbmVDbGFzcykscy5jaGlsZHJlbigpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLHMuZmluZCgic2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsIHNlbGVjdC51aS1kYXRlcGlja2VyLXllYXIiKS5wcm9wKCJkaXNhYmxlZCIsITEpKSx0aGlzLl9kaXNhYmxlZElucHV0cz10Lm1hcCh0aGlzLl9kaXNhYmxlZElucHV0cyxmdW5jdGlvbih0KXtyZXR1cm4gdD09PWU/bnVsbDp0fSkpfSxfZGlzYWJsZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dmFyIGkscyxuPXQoZSksYT10LmRhdGEoZSxyKTtuLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSYmKGk9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCJpbnB1dCI9PT1pPyhlLmRpc2FibGVkPSEwLGEudHJpZ2dlci5maWx0ZXIoImJ1dHRvbiIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkPSEwfSkuZW5kKCkuZmlsdGVyKCJpbWciKS5jc3Moe29wYWNpdHk6IjAuNSIsY3Vyc29yOiJkZWZhdWx0In0pKTooImRpdiI9PT1pfHwic3BhbiI9PT1pKSYmKHM9bi5jaGlsZHJlbigiLiIrdGhpcy5faW5saW5lQ2xhc3MpLHMuY2hpbGRyZW4oKS5hZGRDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKSxzLmZpbmQoInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyIikucHJvcCgiZGlzYWJsZWQiLCEwKSksdGhpcy5fZGlzYWJsZWRJbnB1dHM9dC5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lP251bGw6dH0pLHRoaXMuX2Rpc2FibGVkSW5wdXRzW3RoaXMuX2Rpc2FibGVkSW5wdXRzLmxlbmd0aF09ZSl9LF9pc0Rpc2FibGVkRGF0ZXBpY2tlcjpmdW5jdGlvbih0KXtpZighdClyZXR1cm4hMTtmb3IodmFyIGU9MDt0aGlzLl9kaXNhYmxlZElucHV0cy5sZW5ndGg+ZTtlKyspaWYodGhpcy5fZGlzYWJsZWRJbnB1dHNbZV09PT10KXJldHVybiEwO3JldHVybiExfSxfZ2V0SW5zdDpmdW5jdGlvbihlKXt0cnl7cmV0dXJuIHQuZGF0YShlLHIpfWNhdGNoKGkpe3Rocm93Ik1pc3NpbmcgaW5zdGFuY2UgZGF0YSBmb3IgdGhpcyBkYXRlcGlja2VyIn19LF9vcHRpb25EYXRlcGlja2VyOmZ1bmN0aW9uKGkscyxhKXt2YXIgcixvLGgsbCxjPXRoaXMuX2dldEluc3QoaSk7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mIHM/ImRlZmF1bHRzIj09PXM/dC5leHRlbmQoe30sdC5kYXRlcGlja2VyLl9kZWZhdWx0cyk6Yz8iYWxsIj09PXM/dC5leHRlbmQoe30sYy5zZXR0aW5ncyk6dGhpcy5fZ2V0KGMscyk6bnVsbDoocj1zfHx7fSwic3RyaW5nIj09dHlwZW9mIHMmJihyPXt9LHJbc109YSksYyYmKHRoaXMuX2N1ckluc3Q9PT1jJiZ0aGlzLl9oaWRlRGF0ZXBpY2tlcigpLG89dGhpcy5fZ2V0RGF0ZURhdGVwaWNrZXIoaSwhMCksaD10aGlzLl9nZXRNaW5NYXhEYXRlKGMsIm1pbiIpLGw9dGhpcy5fZ2V0TWluTWF4RGF0ZShjLCJtYXgiKSxuKGMuc2V0dGluZ3MsciksbnVsbCE9PWgmJnIuZGF0ZUZvcm1hdCE9PWUmJnIubWluRGF0ZT09PWUmJihjLnNldHRpbmdzLm1pbkRhdGU9dGhpcy5fZm9ybWF0RGF0ZShjLGgpKSxudWxsIT09bCYmci5kYXRlRm9ybWF0IT09ZSYmci5tYXhEYXRlPT09ZSYmKGMuc2V0dGluZ3MubWF4RGF0ZT10aGlzLl9mb3JtYXREYXRlKGMsbCkpLCJkaXNhYmxlZCJpbiByJiYoci5kaXNhYmxlZD90aGlzLl9kaXNhYmxlRGF0ZXBpY2tlcihpKTp0aGlzLl9lbmFibGVEYXRlcGlja2VyKGkpKSx0aGlzLl9hdHRhY2htZW50cyh0KGkpLGMpLHRoaXMuX2F1dG9TaXplKGMpLHRoaXMuX3NldERhdGUoYyxvKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUoYyksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihjKSksZSl9LF9jaGFuZ2VEYXRlcGlja2VyOmZ1bmN0aW9uKHQsZSxpKXt0aGlzLl9vcHRpb25EYXRlcGlja2VyKHQsZSxpKX0sX3JlZnJlc2hEYXRlcGlja2VyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldEluc3QodCk7ZSYmdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihlKX0sX3NldERhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fZ2V0SW5zdCh0KTtpJiYodGhpcy5fc2V0RGF0ZShpLGUpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaSksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGkpKX0sX2dldERhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fZ2V0SW5zdCh0KTtyZXR1cm4gaSYmIWkuaW5saW5lJiZ0aGlzLl9zZXREYXRlRnJvbUZpZWxkKGksZSksaT90aGlzLl9nZXREYXRlKGkpOm51bGx9LF9kb0tleURvd246ZnVuY3Rpb24oZSl7dmFyIGkscyxuLGE9dC5kYXRlcGlja2VyLl9nZXRJbnN0KGUudGFyZ2V0KSxyPSEwLG89YS5kcERpdi5pcygiLnVpLWRhdGVwaWNrZXItcnRsIik7aWYoYS5fa2V5RXZlbnQ9ITAsdC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZylzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDk6dC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLHI9ITE7YnJlYWs7Y2FzZSAxMzpyZXR1cm4gbj10KCJ0ZC4iK3QuZGF0ZXBpY2tlci5fZGF5T3ZlckNsYXNzKyI6bm90KC4iK3QuZGF0ZXBpY2tlci5fY3VycmVudENsYXNzKyIpIixhLmRwRGl2KSxuWzBdJiZ0LmRhdGVwaWNrZXIuX3NlbGVjdERheShlLnRhcmdldCxhLnNlbGVjdGVkTW9udGgsYS5zZWxlY3RlZFllYXIsblswXSksaT10LmRhdGVwaWNrZXIuX2dldChhLCJvblNlbGVjdCIpLGk/KHM9dC5kYXRlcGlja2VyLl9mb3JtYXREYXRlKGEpLGkuYXBwbHkoYS5pbnB1dD9hLmlucHV0WzBdOm51bGwsW3MsYV0pKTp0LmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksITE7Y2FzZSAyNzp0LmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk7YnJlYWs7Y2FzZSAzMzp0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5Py10LmRhdGVwaWNrZXIuX2dldChhLCJzdGVwQmlnTW9udGhzIik6LXQuZGF0ZXBpY2tlci5fZ2V0KGEsInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgMzQ6dC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LGUuY3RybEtleT8rdC5kYXRlcGlja2VyLl9nZXQoYSwic3RlcEJpZ01vbnRocyIpOit0LmRhdGVwaWNrZXIuX2dldChhLCJzdGVwTW9udGhzIiksIk0iKTticmVhaztjYXNlIDM1OihlLmN0cmxLZXl8fGUubWV0YUtleSkmJnQuZGF0ZXBpY2tlci5fY2xlYXJEYXRlKGUudGFyZ2V0KSxyPWUuY3RybEtleXx8ZS5tZXRhS2V5O2JyZWFrO2Nhc2UgMzY6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9nb3RvVG9kYXkoZS50YXJnZXQpLHI9ZS5jdHJsS2V5fHxlLm1ldGFLZXk7YnJlYWs7Y2FzZSAzNzooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiZ0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsbz8xOi0xLCJEIikscj1lLmN0cmxLZXl8fGUubWV0YUtleSxlLm9yaWdpbmFsRXZlbnQuYWx0S2V5JiZ0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5Py10LmRhdGVwaWNrZXIuX2dldChhLCJzdGVwQmlnTW9udGhzIik6LXQuZGF0ZXBpY2tlci5fZ2V0KGEsInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgMzg6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LC03LCJEIikscj1lLmN0cmxLZXl8fGUubWV0YUtleTticmVhaztjYXNlIDM5OihlLmN0cmxLZXl8fGUubWV0YUtleSkmJnQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxvPy0xOjEsIkQiKSxyPWUuY3RybEtleXx8ZS5tZXRhS2V5LGUub3JpZ2luYWxFdmVudC5hbHRLZXkmJnQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxlLmN0cmxLZXk/K3QuZGF0ZXBpY2tlci5fZ2V0KGEsInN0ZXBCaWdNb250aHMiKTordC5kYXRlcGlja2VyLl9nZXQoYSwic3RlcE1vbnRocyIpLCJNIik7YnJlYWs7Y2FzZSA0MDooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiZ0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsNywiRCIpLHI9ZS5jdHJsS2V5fHxlLm1ldGFLZXk7YnJlYWs7ZGVmYXVsdDpyPSExfWVsc2UgMzY9PT1lLmtleUNvZGUmJmUuY3RybEtleT90LmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRoaXMpOnI9ITE7ciYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKX0sX2RvS2V5UHJlc3M6ZnVuY3Rpb24oaSl7dmFyIHMsbixhPXQuZGF0ZXBpY2tlci5fZ2V0SW5zdChpLnRhcmdldCk7cmV0dXJuIHQuZGF0ZXBpY2tlci5fZ2V0KGEsImNvbnN0cmFpbklucHV0Iik/KHM9dC5kYXRlcGlja2VyLl9wb3NzaWJsZUNoYXJzKHQuZGF0ZXBpY2tlci5fZ2V0KGEsImRhdGVGb3JtYXQiKSksbj1TdHJpbmcuZnJvbUNoYXJDb2RlKG51bGw9PWkuY2hhckNvZGU/aS5rZXlDb2RlOmkuY2hhckNvZGUpLGkuY3RybEtleXx8aS5tZXRhS2V5fHwiICI+bnx8IXN8fHMuaW5kZXhPZihuKT4tMSk6ZX0sX2RvS2V5VXA6ZnVuY3Rpb24oZSl7dmFyIGkscz10LmRhdGVwaWNrZXIuX2dldEluc3QoZS50YXJnZXQpO2lmKHMuaW5wdXQudmFsKCkhPT1zLmxhc3RWYWwpdHJ5e2k9dC5kYXRlcGlja2VyLnBhcnNlRGF0ZSh0LmRhdGVwaWNrZXIuX2dldChzLCJkYXRlRm9ybWF0Iikscy5pbnB1dD9zLmlucHV0LnZhbCgpOm51bGwsdC5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcocykpLGkmJih0LmRhdGVwaWNrZXIuX3NldERhdGVGcm9tRmllbGQocyksdC5kYXRlcGlja2VyLl91cGRhdGVBbHRlcm5hdGUocyksdC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKHMpKX1jYXRjaChuKXt9cmV0dXJuITB9LF9zaG93RGF0ZXBpY2tlcjpmdW5jdGlvbihlKXtpZihlPWUudGFyZ2V0fHxlLCJpbnB1dCIhPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJihlPXQoImlucHV0IixlLnBhcmVudE5vZGUpWzBdKSwhdC5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihlKSYmdC5kYXRlcGlja2VyLl9sYXN0SW5wdXQhPT1lKXt2YXIgaSxzLGEscixvLGgsbDtpPXQuZGF0ZXBpY2tlci5fZ2V0SW5zdChlKSx0LmRhdGVwaWNrZXIuX2N1ckluc3QmJnQuZGF0ZXBpY2tlci5fY3VySW5zdCE9PWkmJih0LmRhdGVwaWNrZXIuX2N1ckluc3QuZHBEaXYuc3RvcCghMCwhMCksaSYmdC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmdC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcih0LmRhdGVwaWNrZXIuX2N1ckluc3QuaW5wdXRbMF0pKSxzPXQuZGF0ZXBpY2tlci5fZ2V0KGksImJlZm9yZVNob3ciKSxhPXM/cy5hcHBseShlLFtlLGldKTp7fSxhIT09ITEmJihuKGkuc2V0dGluZ3MsYSksaS5sYXN0VmFsPW51bGwsdC5kYXRlcGlja2VyLl9sYXN0SW5wdXQ9ZSx0LmRhdGVwaWNrZXIuX3NldERhdGVGcm9tRmllbGQoaSksdC5kYXRlcGlja2VyLl9pbkRpYWxvZyYmKGUudmFsdWU9IiIpLHQuZGF0ZXBpY2tlci5fcG9zfHwodC5kYXRlcGlja2VyLl9wb3M9dC5kYXRlcGlja2VyLl9maW5kUG9zKGUpLHQuZGF0ZXBpY2tlci5fcG9zWzFdKz1lLm9mZnNldEhlaWdodCkscj0hMSx0KGUpLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCl7cmV0dXJuIHJ8PSJmaXhlZCI9PT10KHRoaXMpLmNzcygicG9zaXRpb24iKSwhcn0pLG89e2xlZnQ6dC5kYXRlcGlja2VyLl9wb3NbMF0sdG9wOnQuZGF0ZXBpY2tlci5fcG9zWzFdfSx0LmRhdGVwaWNrZXIuX3Bvcz1udWxsLGkuZHBEaXYuZW1wdHkoKSxpLmRwRGl2LmNzcyh7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJibG9jayIsdG9wOiItMTAwMHB4In0pLHQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcihpKSxvPXQuZGF0ZXBpY2tlci5fY2hlY2tPZmZzZXQoaSxvLHIpLGkuZHBEaXYuY3NzKHtwb3NpdGlvbjp0LmRhdGVwaWNrZXIuX2luRGlhbG9nJiZ0LmJsb2NrVUk/InN0YXRpYyI6cj8iZml4ZWQiOiJhYnNvbHV0ZSIsZGlzcGxheToibm9uZSIsbGVmdDpvLmxlZnQrInB4Iix0b3A6by50b3ArInB4In0pLGkuaW5saW5lfHwoaD10LmRhdGVwaWNrZXIuX2dldChpLCJzaG93QW5pbSIpLGw9dC5kYXRlcGlja2VyLl9nZXQoaSwiZHVyYXRpb24iKSxpLmRwRGl2LnpJbmRleCh0KGUpLnpJbmRleCgpKzEpLHQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmc9ITAsdC5lZmZlY3RzJiZ0LmVmZmVjdHMuZWZmZWN0W2hdP2kuZHBEaXYuc2hvdyhoLHQuZGF0ZXBpY2tlci5fZ2V0KGksInNob3dPcHRpb25zIiksbCk6aS5kcERpdltofHwic2hvdyJdKGg/bDpudWxsKSx0LmRhdGVwaWNrZXIuX3Nob3VsZEZvY3VzSW5wdXQoaSkmJmkuaW5wdXQuZm9jdXMoKSx0LmRhdGVwaWNrZXIuX2N1ckluc3Q9aSkpfX0sX3VwZGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dGhpcy5tYXhSb3dzPTQsYT1lLGUuZHBEaXYuZW1wdHkoKS5hcHBlbmQodGhpcy5fZ2VuZXJhdGVIVE1MKGUpKSx0aGlzLl9hdHRhY2hIYW5kbGVycyhlKSxlLmRwRGl2LmZpbmQoIi4iK3RoaXMuX2RheU92ZXJDbGFzcysiIGEiKS5tb3VzZW92ZXIoKTt2YXIgaSxzPXRoaXMuX2dldE51bWJlck9mTW9udGhzKGUpLG49c1sxXSxyPTE3O2UuZHBEaXYucmVtb3ZlQ2xhc3MoInVpLWRhdGVwaWNrZXItbXVsdGktMiB1aS1kYXRlcGlja2VyLW11bHRpLTMgdWktZGF0ZXBpY2tlci1tdWx0aS00Iikud2lkdGgoIiIpLG4+MSYmZS5kcERpdi5hZGRDbGFzcygidWktZGF0ZXBpY2tlci1tdWx0aS0iK24pLmNzcygid2lkdGgiLHIqbisiZW0iKSxlLmRwRGl2WygxIT09c1swXXx8MSE9PXNbMV0/ImFkZCI6InJlbW92ZSIpKyJDbGFzcyJdKCJ1aS1kYXRlcGlja2VyLW11bHRpIiksZS5kcERpdlsodGhpcy5fZ2V0KGUsImlzUlRMIik/ImFkZCI6InJlbW92ZSIpKyJDbGFzcyJdKCJ1aS1kYXRlcGlja2VyLXJ0bCIpLGU9PT10LmRhdGVwaWNrZXIuX2N1ckluc3QmJnQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJnQuZGF0ZXBpY2tlci5fc2hvdWxkRm9jdXNJbnB1dChlKSYmZS5pbnB1dC5mb2N1cygpLGUueWVhcnNodG1sJiYoaT1lLnllYXJzaHRtbCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aT09PWUueWVhcnNodG1sJiZlLnllYXJzaHRtbCYmZS5kcERpdi5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyOmZpcnN0IikucmVwbGFjZVdpdGgoZS55ZWFyc2h0bWwpLGk9ZS55ZWFyc2h0bWw9bnVsbH0sMCkpfSxfc2hvdWxkRm9jdXNJbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdC5pbnB1dCYmdC5pbnB1dC5pcygiOnZpc2libGUiKSYmIXQuaW5wdXQuaXMoIjpkaXNhYmxlZCIpJiYhdC5pbnB1dC5pcygiOmZvY3VzIil9LF9jaGVja09mZnNldDpmdW5jdGlvbihlLGkscyl7dmFyIG49ZS5kcERpdi5vdXRlcldpZHRoKCksYT1lLmRwRGl2Lm91dGVySGVpZ2h0KCkscj1lLmlucHV0P2UuaW5wdXQub3V0ZXJXaWR0aCgpOjAsbz1lLmlucHV0P2UuaW5wdXQub3V0ZXJIZWlnaHQoKTowLGg9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKyhzPzA6dChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKSxsPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQrKHM/MDp0KGRvY3VtZW50KS5zY3JvbGxUb3AoKSk7cmV0dXJuIGkubGVmdC09dGhpcy5fZ2V0KGUsImlzUlRMIik/bi1yOjAsaS5sZWZ0LT1zJiZpLmxlZnQ9PT1lLmlucHV0Lm9mZnNldCgpLmxlZnQ/dChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpOjAsaS50b3AtPXMmJmkudG9wPT09ZS5pbnB1dC5vZmZzZXQoKS50b3Arbz90KGRvY3VtZW50KS5zY3JvbGxUb3AoKTowLGkubGVmdC09TWF0aC5taW4oaS5sZWZ0LGkubGVmdCtuPmgmJmg+bj9NYXRoLmFicyhpLmxlZnQrbi1oKTowKSxpLnRvcC09TWF0aC5taW4oaS50b3AsaS50b3ArYT5sJiZsPmE/TWF0aC5hYnMoYStvKTowKSxpfSxfZmluZFBvczpmdW5jdGlvbihlKXtmb3IodmFyIGkscz10aGlzLl9nZXRJbnN0KGUpLG49dGhpcy5fZ2V0KHMsImlzUlRMIik7ZSYmKCJoaWRkZW4iPT09ZS50eXBlfHwxIT09ZS5ub2RlVHlwZXx8dC5leHByLmZpbHRlcnMuaGlkZGVuKGUpKTspZT1lW24/InByZXZpb3VzU2libGluZyI6Im5leHRTaWJsaW5nIl07cmV0dXJuIGk9dChlKS5vZmZzZXQoKSxbaS5sZWZ0LGkudG9wXX0sX2hpZGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbixhLG89dGhpcy5fY3VySW5zdDshb3x8ZSYmbyE9PXQuZGF0YShlLHIpfHx0aGlzLl9kYXRlcGlja2VyU2hvd2luZyYmKGk9dGhpcy5fZ2V0KG8sInNob3dBbmltIikscz10aGlzLl9nZXQobywiZHVyYXRpb24iKSxuPWZ1bmN0aW9uKCl7dC5kYXRlcGlja2VyLl90aWR5RGlhbG9nKG8pfSx0LmVmZmVjdHMmJih0LmVmZmVjdHMuZWZmZWN0W2ldfHx0LmVmZmVjdHNbaV0pP28uZHBEaXYuaGlkZShpLHQuZGF0ZXBpY2tlci5fZ2V0KG8sInNob3dPcHRpb25zIikscyxuKTpvLmRwRGl2WyJzbGlkZURvd24iPT09aT8ic2xpZGVVcCI6ImZhZGVJbiI9PT1pPyJmYWRlT3V0IjoiaGlkZSJdKGk/czpudWxsLG4pLGl8fG4oKSx0aGlzLl9kYXRlcGlja2VyU2hvd2luZz0hMSxhPXRoaXMuX2dldChvLCJvbkNsb3NlIiksYSYmYS5hcHBseShvLmlucHV0P28uaW5wdXRbMF06bnVsbCxbby5pbnB1dD9vLmlucHV0LnZhbCgpOiIiLG9dKSx0aGlzLl9sYXN0SW5wdXQ9bnVsbCx0aGlzLl9pbkRpYWxvZyYmKHRoaXMuX2RpYWxvZ0lucHV0LmNzcyh7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OiIwIix0b3A6Ii0xMDBweCJ9KSx0LmJsb2NrVUkmJih0LnVuYmxvY2tVSSgpLHQoImJvZHkiKS5hcHBlbmQodGhpcy5kcERpdikpKSx0aGlzLl9pbkRpYWxvZz0hMSl9LF90aWR5RGlhbG9nOmZ1bmN0aW9uKHQpe3QuZHBEaXYucmVtb3ZlQ2xhc3ModGhpcy5fZGlhbG9nQ2xhc3MpLnVuYmluZCgiLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIiKX0sX2NoZWNrRXh0ZXJuYWxDbGljazpmdW5jdGlvbihlKXtpZih0LmRhdGVwaWNrZXIuX2N1ckluc3Qpe3ZhciBpPXQoZS50YXJnZXQpLHM9dC5kYXRlcGlja2VyLl9nZXRJbnN0KGlbMF0pOyhpWzBdLmlkIT09dC5kYXRlcGlja2VyLl9tYWluRGl2SWQmJjA9PT1pLnBhcmVudHMoIiMiK3QuZGF0ZXBpY2tlci5fbWFpbkRpdklkKS5sZW5ndGgmJiFpLmhhc0NsYXNzKHQuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpJiYhaS5jbG9zZXN0KCIuIit0LmRhdGVwaWNrZXIuX3RyaWdnZXJDbGFzcykubGVuZ3RoJiZ0LmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiYoIXQuZGF0ZXBpY2tlci5faW5EaWFsb2d8fCF0LmJsb2NrVUkpfHxpLmhhc0NsYXNzKHQuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpJiZ0LmRhdGVwaWNrZXIuX2N1ckluc3QhPT1zKSYmdC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpfX0sX2FkanVzdERhdGU6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuPXQoZSksYT10aGlzLl9nZXRJbnN0KG5bMF0pO3RoaXMuX2lzRGlzYWJsZWREYXRlcGlja2VyKG5bMF0pfHwodGhpcy5fYWRqdXN0SW5zdERhdGUoYSxpKygiTSI9PT1zP3RoaXMuX2dldChhLCJzaG93Q3VycmVudEF0UG9zIik6MCkscyksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihhKSl9LF9nb3RvVG9kYXk6ZnVuY3Rpb24oZSl7dmFyIGkscz10KGUpLG49dGhpcy5fZ2V0SW5zdChzWzBdKTt0aGlzLl9nZXQobiwiZ290b0N1cnJlbnQiKSYmbi5jdXJyZW50RGF5PyhuLnNlbGVjdGVkRGF5PW4uY3VycmVudERheSxuLmRyYXdNb250aD1uLnNlbGVjdGVkTW9udGg9bi5jdXJyZW50TW9udGgsbi5kcmF3WWVhcj1uLnNlbGVjdGVkWWVhcj1uLmN1cnJlbnRZZWFyKTooaT1uZXcgRGF0ZSxuLnNlbGVjdGVkRGF5PWkuZ2V0RGF0ZSgpLG4uZHJhd01vbnRoPW4uc2VsZWN0ZWRNb250aD1pLmdldE1vbnRoKCksbi5kcmF3WWVhcj1uLnNlbGVjdGVkWWVhcj1pLmdldEZ1bGxZZWFyKCkpLHRoaXMuX25vdGlmeUNoYW5nZShuKSx0aGlzLl9hZGp1c3REYXRlKHMpfSxfc2VsZWN0TW9udGhZZWFyOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbj10KGUpLGE9dGhpcy5fZ2V0SW5zdChuWzBdKTthWyJzZWxlY3RlZCIrKCJNIj09PXM/Ik1vbnRoIjoiWWVhciIpXT1hWyJkcmF3IisoIk0iPT09cz8iTW9udGgiOiJZZWFyIildPXBhcnNlSW50KGkub3B0aW9uc1tpLnNlbGVjdGVkSW5kZXhdLnZhbHVlLDEwKSx0aGlzLl9ub3RpZnlDaGFuZ2UoYSksdGhpcy5fYWRqdXN0RGF0ZShuKX0sX3NlbGVjdERheTpmdW5jdGlvbihlLGkscyxuKXt2YXIgYSxyPXQoZSk7dChuKS5oYXNDbGFzcyh0aGlzLl91bnNlbGVjdGFibGVDbGFzcyl8fHRoaXMuX2lzRGlzYWJsZWREYXRlcGlja2VyKHJbMF0pfHwoYT10aGlzLl9nZXRJbnN0KHJbMF0pLGEuc2VsZWN0ZWREYXk9YS5jdXJyZW50RGF5PXQoImEiLG4pLmh0bWwoKSxhLnNlbGVjdGVkTW9udGg9YS5jdXJyZW50TW9udGg9aSxhLnNlbGVjdGVkWWVhcj1hLmN1cnJlbnRZZWFyPXMsdGhpcy5fc2VsZWN0RGF0ZShlLHRoaXMuX2Zvcm1hdERhdGUoYSxhLmN1cnJlbnREYXksYS5jdXJyZW50TW9udGgsYS5jdXJyZW50WWVhcikpKX0sX2NsZWFyRGF0ZTpmdW5jdGlvbihlKXt2YXIgaT10KGUpO3RoaXMuX3NlbGVjdERhdGUoaSwiIil9LF9zZWxlY3REYXRlOmZ1bmN0aW9uKGUsaSl7dmFyIHMsbj10KGUpLGE9dGhpcy5fZ2V0SW5zdChuWzBdKTtpPW51bGwhPWk/aTp0aGlzLl9mb3JtYXREYXRlKGEpLGEuaW5wdXQmJmEuaW5wdXQudmFsKGkpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShhKSxzPXRoaXMuX2dldChhLCJvblNlbGVjdCIpLHM/cy5hcHBseShhLmlucHV0P2EuaW5wdXRbMF06bnVsbCxbaSxhXSk6YS5pbnB1dCYmYS5pbnB1dC50cmlnZ2VyKCJjaGFuZ2UiKSxhLmlubGluZT90aGlzLl91cGRhdGVEYXRlcGlja2VyKGEpOih0aGlzLl9oaWRlRGF0ZXBpY2tlcigpLHRoaXMuX2xhc3RJbnB1dD1hLmlucHV0WzBdLCJvYmplY3QiIT10eXBlb2YgYS5pbnB1dFswXSYmYS5pbnB1dC5mb2N1cygpLHRoaXMuX2xhc3RJbnB1dD1udWxsKX0sX3VwZGF0ZUFsdGVybmF0ZTpmdW5jdGlvbihlKXt2YXIgaSxzLG4sYT10aGlzLl9nZXQoZSwiYWx0RmllbGQiKTthJiYoaT10aGlzLl9nZXQoZSwiYWx0Rm9ybWF0Iil8fHRoaXMuX2dldChlLCJkYXRlRm9ybWF0Iikscz10aGlzLl9nZXREYXRlKGUpLG49dGhpcy5mb3JtYXREYXRlKGkscyx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpLHQoYSkuZWFjaChmdW5jdGlvbigpe3QodGhpcykudmFsKG4pfSkpfSxub1dlZWtlbmRzOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuW2U+MCYmNj5lLCIiXX0saXNvODYwMVdlZWs6ZnVuY3Rpb24odCl7dmFyIGUsaT1uZXcgRGF0ZSh0LmdldFRpbWUoKSk7cmV0dXJuIGkuc2V0RGF0ZShpLmdldERhdGUoKSs0LShpLmdldERheSgpfHw3KSksZT1pLmdldFRpbWUoKSxpLnNldE1vbnRoKDApLGkuc2V0RGF0ZSgxKSxNYXRoLmZsb29yKE1hdGgucm91bmQoKGUtaSkvODY0ZTUpLzcpKzF9LHBhcnNlRGF0ZTpmdW5jdGlvbihpLHMsbil7aWYobnVsbD09aXx8bnVsbD09cyl0aHJvdyJJbnZhbGlkIGFyZ3VtZW50cyI7aWYocz0ib2JqZWN0Ij09dHlwZW9mIHM/IiIrczpzKyIiLCIiPT09cylyZXR1cm4gbnVsbDt2YXIgYSxyLG8saCxsPTAsYz0obj9uLnNob3J0WWVhckN1dG9mZjpudWxsKXx8dGhpcy5fZGVmYXVsdHMuc2hvcnRZZWFyQ3V0b2ZmLHU9InN0cmluZyIhPXR5cGVvZiBjP2M6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCtwYXJzZUludChjLDEwKSxkPShuP24uZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCxwPShuP24uZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLGY9KG4/bi5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxtPShuP24ubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyxnPS0xLHY9LTEsXz0tMSxiPS0xLHk9ITEseD1mdW5jdGlvbih0KXt2YXIgZT1pLmxlbmd0aD5hKzEmJmkuY2hhckF0KGErMSk9PT10O3JldHVybiBlJiZhKyssZX0saz1mdW5jdGlvbih0KXt2YXIgZT14KHQpLGk9IkAiPT09dD8xNDoiISI9PT10PzIwOiJ5Ij09PXQmJmU/NDoibyI9PT10PzM6MixuPVJlZ0V4cCgiXlxcZHsxLCIraSsifSIpLGE9cy5zdWJzdHJpbmcobCkubWF0Y2gobik7aWYoIWEpdGhyb3ciTWlzc2luZyBudW1iZXIgYXQgcG9zaXRpb24gIitsO3JldHVybiBsKz1hWzBdLmxlbmd0aCxwYXJzZUludChhWzBdLDEwKX0sdz1mdW5jdGlvbihpLG4sYSl7dmFyIHI9LTEsbz10Lm1hcCh4KGkpP2E6bixmdW5jdGlvbih0LGUpe3JldHVybltbZSx0XV19KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuLSh0WzFdLmxlbmd0aC1lWzFdLmxlbmd0aCl9KTtpZih0LmVhY2gobyxmdW5jdGlvbih0LGkpe3ZhciBuPWlbMV07cmV0dXJuIHMuc3Vic3RyKGwsbi5sZW5ndGgpLnRvTG93ZXJDYXNlKCk9PT1uLnRvTG93ZXJDYXNlKCk/KHI9aVswXSxsKz1uLmxlbmd0aCwhMSk6ZX0pLC0xIT09cilyZXR1cm4gcisxO3Rocm93IlVua25vd24gbmFtZSBhdCBwb3NpdGlvbiAiK2x9LEQ9ZnVuY3Rpb24oKXtpZihzLmNoYXJBdChsKSE9PWkuY2hhckF0KGEpKXRocm93IlVuZXhwZWN0ZWQgbGl0ZXJhbCBhdCBwb3NpdGlvbiAiK2w7bCsrfTtmb3IoYT0wO2kubGVuZ3RoPmE7YSsrKWlmKHkpIiciIT09aS5jaGFyQXQoYSl8fHgoIiciKT9EKCk6eT0hMTtlbHNlIHN3aXRjaChpLmNoYXJBdChhKSl7Y2FzZSJkIjpfPWsoImQiKTticmVhaztjYXNlIkQiOncoIkQiLGQscCk7YnJlYWs7Y2FzZSJvIjpiPWsoIm8iKTticmVhaztjYXNlIm0iOnY9aygibSIpO2JyZWFrO2Nhc2UiTSI6dj13KCJNIixmLG0pO2JyZWFrO2Nhc2UieSI6Zz1rKCJ5Iik7YnJlYWs7Y2FzZSJAIjpoPW5ldyBEYXRlKGsoIkAiKSksZz1oLmdldEZ1bGxZZWFyKCksdj1oLmdldE1vbnRoKCkrMSxfPWguZ2V0RGF0ZSgpO2JyZWFrO2Nhc2UiISI6aD1uZXcgRGF0ZSgoaygiISIpLXRoaXMuX3RpY2tzVG8xOTcwKS8xZTQpLGc9aC5nZXRGdWxsWWVhcigpLHY9aC5nZXRNb250aCgpKzEsXz1oLmdldERhdGUoKTticmVhaztjYXNlIiciOngoIiciKT9EKCk6eT0hMDticmVhaztkZWZhdWx0OkQoKX1pZihzLmxlbmd0aD5sJiYobz1zLnN1YnN0cihsKSwhL15ccysvLnRlc3QobykpKXRocm93IkV4dHJhL3VucGFyc2VkIGNoYXJhY3RlcnMgZm91bmQgaW4gZGF0ZTogIitvO2lmKC0xPT09Zz9nPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKToxMDA+ZyYmKGcrPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwKyh1Pj1nPzA6LTEwMCkpLGI+LTEpZm9yKHY9MSxfPWI7Oyl7aWYocj10aGlzLl9nZXREYXlzSW5Nb250aChnLHYtMSkscj49XylicmVhazt2KyssXy09cn1pZihoPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGcsdi0xLF8pKSxoLmdldEZ1bGxZZWFyKCkhPT1nfHxoLmdldE1vbnRoKCkrMSE9PXZ8fGguZ2V0RGF0ZSgpIT09Xyl0aHJvdyJJbnZhbGlkIGRhdGUiO3JldHVybiBofSxBVE9NOiJ5eS1tbS1kZCIsQ09PS0lFOiJELCBkZCBNIHl5IixJU09fODYwMToieXktbW0tZGQiLFJGQ184MjI6IkQsIGQgTSB5IixSRkNfODUwOiJERCwgZGQtTS15IixSRkNfMTAzNjoiRCwgZCBNIHkiLFJGQ18xMTIzOiJELCBkIE0geXkiLFJGQ18yODIyOiJELCBkIE0geXkiLFJTUzoiRCwgZCBNIHkiLFRJQ0tTOiIhIixUSU1FU1RBTVA6IkAiLFczQzoieXktbW0tZGQiLF90aWNrc1RvMTk3MDoxZTcqNjAqNjAqMjQqKDcxODY4NStNYXRoLmZsb29yKDQ5Mi41KS1NYXRoLmZsb29yKDE5LjcpK01hdGguZmxvb3IoNC45MjUpKSxmb3JtYXREYXRlOmZ1bmN0aW9uKHQsZSxpKXtpZighZSlyZXR1cm4iIjt2YXIgcyxuPShpP2kuZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCxhPShpP2kuZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLHI9KGk/aS5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxvPShpP2kubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyxoPWZ1bmN0aW9uKGUpe3ZhciBpPXQubGVuZ3RoPnMrMSYmdC5jaGFyQXQocysxKT09PWU7cmV0dXJuIGkmJnMrKyxpfSxsPWZ1bmN0aW9uKHQsZSxpKXt2YXIgcz0iIitlO2lmKGgodCkpZm9yKDtpPnMubGVuZ3RoOylzPSIwIitzO3JldHVybiBzfSxjPWZ1bmN0aW9uKHQsZSxpLHMpe3JldHVybiBoKHQpP3NbZV06aVtlXX0sdT0iIixkPSExO2lmKGUpZm9yKHM9MDt0Lmxlbmd0aD5zO3MrKylpZihkKSInIiE9PXQuY2hhckF0KHMpfHxoKCInIik/dSs9dC5jaGFyQXQocyk6ZD0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdChzKSl7Y2FzZSJkIjp1Kz1sKCJkIixlLmdldERhdGUoKSwyKTticmVhaztjYXNlIkQiOnUrPWMoIkQiLGUuZ2V0RGF5KCksbixhKTticmVhaztjYXNlIm8iOnUrPWwoIm8iLE1hdGgucm91bmQoKG5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSxlLmdldE1vbnRoKCksZS5nZXREYXRlKCkpLmdldFRpbWUoKS1uZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksMCwwKS5nZXRUaW1lKCkpLzg2NGU1KSwzKTticmVhaztjYXNlIm0iOnUrPWwoIm0iLGUuZ2V0TW9udGgoKSsxLDIpO2JyZWFrO2Nhc2UiTSI6dSs9YygiTSIsZS5nZXRNb250aCgpLHIsbyk7YnJlYWs7Y2FzZSJ5Ijp1Kz1oKCJ5Iik/ZS5nZXRGdWxsWWVhcigpOigxMD5lLmdldFllYXIoKSUxMDA/IjAiOiIiKStlLmdldFllYXIoKSUxMDA7YnJlYWs7Y2FzZSJAIjp1Kz1lLmdldFRpbWUoKTticmVhaztjYXNlIiEiOnUrPTFlNCplLmdldFRpbWUoKSt0aGlzLl90aWNrc1RvMTk3MDticmVhaztjYXNlIiciOmgoIiciKT91Kz0iJyI6ZD0hMDticmVhaztkZWZhdWx0OnUrPXQuY2hhckF0KHMpfXJldHVybiB1fSxfcG9zc2libGVDaGFyczpmdW5jdGlvbih0KXt2YXIgZSxpPSIiLHM9ITEsbj1mdW5jdGlvbihpKXt2YXIgcz10Lmxlbmd0aD5lKzEmJnQuY2hhckF0KGUrMSk9PT1pO3JldHVybiBzJiZlKyssc307Zm9yKGU9MDt0Lmxlbmd0aD5lO2UrKylpZihzKSInIiE9PXQuY2hhckF0KGUpfHxuKCInIik/aSs9dC5jaGFyQXQoZSk6cz0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdChlKSl7Y2FzZSJkIjpjYXNlIm0iOmNhc2UieSI6Y2FzZSJAIjppKz0iMDEyMzQ1Njc4OSI7YnJlYWs7Y2FzZSJEIjpjYXNlIk0iOnJldHVybiBudWxsO2Nhc2UiJyI6bigiJyIpP2krPSInIjpzPSEwO2JyZWFrO2RlZmF1bHQ6aSs9dC5jaGFyQXQoZSl9cmV0dXJuIGl9LF9nZXQ6ZnVuY3Rpb24odCxpKXtyZXR1cm4gdC5zZXR0aW5nc1tpXSE9PWU/dC5zZXR0aW5nc1tpXTp0aGlzLl9kZWZhdWx0c1tpXX0sX3NldERhdGVGcm9tRmllbGQ6ZnVuY3Rpb24odCxlKXtpZih0LmlucHV0LnZhbCgpIT09dC5sYXN0VmFsKXt2YXIgaT10aGlzLl9nZXQodCwiZGF0ZUZvcm1hdCIpLHM9dC5sYXN0VmFsPXQuaW5wdXQ/dC5pbnB1dC52YWwoKTpudWxsLG49dGhpcy5fZ2V0RGVmYXVsdERhdGUodCksYT1uLHI9dGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKHQpO3RyeXthPXRoaXMucGFyc2VEYXRlKGkscyxyKXx8bn1jYXRjaChvKXtzPWU/IiI6c310LnNlbGVjdGVkRGF5PWEuZ2V0RGF0ZSgpLHQuZHJhd01vbnRoPXQuc2VsZWN0ZWRNb250aD1hLmdldE1vbnRoKCksdC5kcmF3WWVhcj10LnNlbGVjdGVkWWVhcj1hLmdldEZ1bGxZZWFyKCksdC5jdXJyZW50RGF5PXM/YS5nZXREYXRlKCk6MCx0LmN1cnJlbnRNb250aD1zP2EuZ2V0TW9udGgoKTowLHQuY3VycmVudFllYXI9cz9hLmdldEZ1bGxZZWFyKCk6MCx0aGlzLl9hZGp1c3RJbnN0RGF0ZSh0KX19LF9nZXREZWZhdWx0RGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzdHJpY3RNaW5NYXgodCx0aGlzLl9kZXRlcm1pbmVEYXRlKHQsdGhpcy5fZ2V0KHQsImRlZmF1bHREYXRlIiksbmV3IERhdGUpKX0sX2RldGVybWluZURhdGU6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlO3JldHVybiBlLnNldERhdGUoZS5nZXREYXRlKCkrdCksZX0sYT1mdW5jdGlvbihpKXt0cnl7cmV0dXJuIHQuZGF0ZXBpY2tlci5wYXJzZURhdGUodC5kYXRlcGlja2VyLl9nZXQoZSwiZGF0ZUZvcm1hdCIpLGksdC5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcoZSkpfWNhdGNoKHMpe31mb3IodmFyIG49KGkudG9Mb3dlckNhc2UoKS5tYXRjaCgvXmMvKT90LmRhdGVwaWNrZXIuX2dldERhdGUoZSk6bnVsbCl8fG5ldyBEYXRlLGE9bi5nZXRGdWxsWWVhcigpLHI9bi5nZXRNb250aCgpLG89bi5nZXREYXRlKCksaD0vKFsrXC1dP1swLTldKylccyooZHxEfHd8V3xtfE18eXxZKT8vZyxsPWguZXhlYyhpKTtsOyl7c3dpdGNoKGxbMl18fCJkIil7Y2FzZSJkIjpjYXNlIkQiOm8rPXBhcnNlSW50KGxbMV0sMTApO2JyZWFrO2Nhc2UidyI6Y2FzZSJXIjpvKz03KnBhcnNlSW50KGxbMV0sMTApO2JyZWFrO2Nhc2UibSI6Y2FzZSJNIjpyKz1wYXJzZUludChsWzFdLDEwKSxvPU1hdGgubWluKG8sdC5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChhLHIpKTticmVhaztjYXNlInkiOmNhc2UiWSI6YSs9cGFyc2VJbnQobFsxXSwxMCksbz1NYXRoLm1pbihvLHQuZGF0ZXBpY2tlci5fZ2V0RGF5c0luTW9udGgoYSxyKSl9bD1oLmV4ZWMoaSl9cmV0dXJuIG5ldyBEYXRlKGEscixvKX0scj1udWxsPT1pfHwiIj09PWk/czoic3RyaW5nIj09dHlwZW9mIGk/YShpKToibnVtYmVyIj09dHlwZW9mIGk/aXNOYU4oaSk/czpuKGkpOm5ldyBEYXRlKGkuZ2V0VGltZSgpKTtyZXR1cm4gcj1yJiYiSW52YWxpZCBEYXRlIj09IiIrcj9zOnIsciYmKHIuc2V0SG91cnMoMCksci5zZXRNaW51dGVzKDApLHIuc2V0U2Vjb25kcygwKSxyLnNldE1pbGxpc2Vjb25kcygwKSksdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3Qocil9LF9kYXlsaWdodFNhdmluZ0FkanVzdDpmdW5jdGlvbih0KXtyZXR1cm4gdD8odC5zZXRIb3Vycyh0LmdldEhvdXJzKCk+MTI/dC5nZXRIb3VycygpKzI6MCksdCk6bnVsbH0sX3NldERhdGU6ZnVuY3Rpb24odCxlLGkpe3ZhciBzPSFlLG49dC5zZWxlY3RlZE1vbnRoLGE9dC5zZWxlY3RlZFllYXIscj10aGlzLl9yZXN0cmljdE1pbk1heCh0LHRoaXMuX2RldGVybWluZURhdGUodCxlLG5ldyBEYXRlKSk7dC5zZWxlY3RlZERheT10LmN1cnJlbnREYXk9ci5nZXREYXRlKCksdC5kcmF3TW9udGg9dC5zZWxlY3RlZE1vbnRoPXQuY3VycmVudE1vbnRoPXIuZ2V0TW9udGgoKSx0LmRyYXdZZWFyPXQuc2VsZWN0ZWRZZWFyPXQuY3VycmVudFllYXI9ci5nZXRGdWxsWWVhcigpLG49PT10LnNlbGVjdGVkTW9udGgmJmE9PT10LnNlbGVjdGVkWWVhcnx8aXx8dGhpcy5fbm90aWZ5Q2hhbmdlKHQpLHRoaXMuX2FkanVzdEluc3REYXRlKHQpLHQuaW5wdXQmJnQuaW5wdXQudmFsKHM/IiI6dGhpcy5fZm9ybWF0RGF0ZSh0KSl9LF9nZXREYXRlOmZ1bmN0aW9uKHQpe3ZhciBlPSF0LmN1cnJlbnRZZWFyfHx0LmlucHV0JiYiIj09PXQuaW5wdXQudmFsKCk/bnVsbDp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0LmN1cnJlbnRZZWFyLHQuY3VycmVudE1vbnRoLHQuY3VycmVudERheSkpO3JldHVybiBlfSxfYXR0YWNoSGFuZGxlcnM6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5fZ2V0KGUsInN0ZXBNb250aHMiKSxzPSIjIitlLmlkLnJlcGxhY2UoL1xcXFwvZywiXFwiKTtlLmRwRGl2LmZpbmQoIltkYXRhLWhhbmRsZXJdIikubWFwKGZ1bmN0aW9uKCl7dmFyIGU9e3ByZXY6ZnVuY3Rpb24oKXt0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUocywtaSwiTSIpfSxuZXh0OmZ1bmN0aW9uKCl7dC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHMsK2ksIk0iKX0saGlkZTpmdW5jdGlvbigpe3QuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKX0sdG9kYXk6ZnVuY3Rpb24oKXt0LmRhdGVwaWNrZXIuX2dvdG9Ub2RheShzKX0sc2VsZWN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHQuZGF0ZXBpY2tlci5fc2VsZWN0RGF5KHMsK3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLW1vbnRoIiksK3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLXllYXIiKSx0aGlzKSwhMX0sc2VsZWN0TW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdC5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIocyx0aGlzLCJNIiksITF9LHNlbGVjdFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdC5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIocyx0aGlzLCJZIiksITF9fTt0KHRoaXMpLmJpbmQodGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtZXZlbnQiKSxlW3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLWhhbmRsZXIiKV0pfSl9LF9nZW5lcmF0ZUhUTUw6ZnVuY3Rpb24odCl7dmFyIGUsaSxzLG4sYSxyLG8saCxsLGMsdSxkLHAsZixtLGcsdixfLGIseSx4LGssdyxELFQsQyxNLFMsTixJLFAsQSx6LEgsRSxGLE8sVyxqLFI9bmV3IERhdGUsTD10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShSLmdldEZ1bGxZZWFyKCksUi5nZXRNb250aCgpLFIuZ2V0RGF0ZSgpKSksWT10aGlzLl9nZXQodCwiaXNSVEwiKSxCPXRoaXMuX2dldCh0LCJzaG93QnV0dG9uUGFuZWwiKSxKPXRoaXMuX2dldCh0LCJoaWRlSWZOb1ByZXZOZXh0IiksSz10aGlzLl9nZXQodCwibmF2aWdhdGlvbkFzRGF0ZUZvcm1hdCIpLFE9dGhpcy5fZ2V0TnVtYmVyT2ZNb250aHModCksVj10aGlzLl9nZXQodCwic2hvd0N1cnJlbnRBdFBvcyIpLFU9dGhpcy5fZ2V0KHQsInN0ZXBNb250aHMiKSxxPTEhPT1RWzBdfHwxIT09UVsxXSxYPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KHQuY3VycmVudERheT9uZXcgRGF0ZSh0LmN1cnJlbnRZZWFyLHQuY3VycmVudE1vbnRoLHQuY3VycmVudERheSk6bmV3IERhdGUoOTk5OSw5LDkpKSxHPXRoaXMuX2dldE1pbk1heERhdGUodCwibWluIiksJD10aGlzLl9nZXRNaW5NYXhEYXRlKHQsIm1heCIpLFo9dC5kcmF3TW9udGgtVix0ZT10LmRyYXdZZWFyO2lmKDA+WiYmKForPTEyLHRlLS0pLCQpZm9yKGU9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoJC5nZXRGdWxsWWVhcigpLCQuZ2V0TW9udGgoKS1RWzBdKlFbMV0rMSwkLmdldERhdGUoKSkpLGU9RyYmRz5lP0c6ZTt0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0ZSxaLDEpKT5lOylaLS0sMD5aJiYoWj0xMSx0ZS0tKTtmb3IodC5kcmF3TW9udGg9Wix0LmRyYXdZZWFyPXRlLGk9dGhpcy5fZ2V0KHQsInByZXZUZXh0IiksaT1LP3RoaXMuZm9ybWF0RGF0ZShpLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHRlLFotVSwxKSksdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKHQpKTppLHM9dGhpcy5fY2FuQWRqdXN0TW9udGgodCwtMSx0ZSxaKT8iPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J3ByZXYnIGRhdGEtZXZlbnQ9J2NsaWNrJyB0aXRsZT0nIitpKyInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIrKFk/ImUiOiJ3IikrIic+IitpKyI8L3NwYW4+PC9hPiI6Sj8iIjoiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWRpc2FibGVkJyB0aXRsZT0nIitpKyInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIrKFk/ImUiOiJ3IikrIic+IitpKyI8L3NwYW4+PC9hPiIsbj10aGlzLl9nZXQodCwibmV4dFRleHQiKSxuPUs/dGhpcy5mb3JtYXREYXRlKG4sdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodGUsWitVLDEpKSx0aGlzLl9nZXRGb3JtYXRDb25maWcodCkpOm4sYT10aGlzLl9jYW5BZGp1c3RNb250aCh0LDEsdGUsWik/IjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSduZXh0JyBkYXRhLWV2ZW50PSdjbGljaycgdGl0bGU9JyIrbisiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0iKyhZPyJ3IjoiZSIpKyInPiIrbisiPC9zcGFuPjwvYT4iOko/IiI6IjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCB1aS1zdGF0ZS1kaXNhYmxlZCcgdGl0bGU9JyIrbisiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0iKyhZPyJ3IjoiZSIpKyInPiIrbisiPC9zcGFuPjwvYT4iLHI9dGhpcy5fZ2V0KHQsImN1cnJlbnRUZXh0Iiksbz10aGlzLl9nZXQodCwiZ290b0N1cnJlbnQiKSYmdC5jdXJyZW50RGF5P1g6TCxyPUs/dGhpcy5mb3JtYXREYXRlKHIsbyx0aGlzLl9nZXRGb3JtYXRDb25maWcodCkpOnIsaD10LmlubGluZT8iIjoiPGJ1dHRvbiB0eXBlPSdidXR0b24nIGNsYXNzPSd1aS1kYXRlcGlja2VyLWNsb3NlIHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktcHJpbWFyeSB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J2hpZGUnIGRhdGEtZXZlbnQ9J2NsaWNrJz4iK3RoaXMuX2dldCh0LCJjbG9zZVRleHQiKSsiPC9idXR0b24+IixsPUI/IjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSB1aS13aWRnZXQtY29udGVudCc+IisoWT9oOiIiKSsodGhpcy5faXNJblJhbmdlKHQsbyk/IjxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0ndWktZGF0ZXBpY2tlci1jdXJyZW50IHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktc2Vjb25kYXJ5IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0ndG9kYXknIGRhdGEtZXZlbnQ9J2NsaWNrJz4iK3IrIjwvYnV0dG9uPiI6IiIpKyhZPyIiOmgpKyI8L2Rpdj4iOiIiLGM9cGFyc2VJbnQodGhpcy5fZ2V0KHQsImZpcnN0RGF5IiksMTApLGM9aXNOYU4oYyk/MDpjLHU9dGhpcy5fZ2V0KHQsInNob3dXZWVrIiksZD10aGlzLl9nZXQodCwiZGF5TmFtZXMiKSxwPXRoaXMuX2dldCh0LCJkYXlOYW1lc01pbiIpLGY9dGhpcy5fZ2V0KHQsIm1vbnRoTmFtZXMiKSxtPXRoaXMuX2dldCh0LCJtb250aE5hbWVzU2hvcnQiKSxnPXRoaXMuX2dldCh0LCJiZWZvcmVTaG93RGF5Iiksdj10aGlzLl9nZXQodCwic2hvd090aGVyTW9udGhzIiksXz10aGlzLl9nZXQodCwic2VsZWN0T3RoZXJNb250aHMiKSxiPXRoaXMuX2dldERlZmF1bHREYXRlKHQpLHk9IiIsaz0wO1FbMF0+aztrKyspe2Zvcih3PSIiLHRoaXMubWF4Um93cz00LEQ9MDtRWzFdPkQ7RCsrKXtpZihUPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHRlLFosdC5zZWxlY3RlZERheSkpLEM9IiB1aS1jb3JuZXItYWxsIixNPSIiLHEpe2lmKE0rPSI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWdyb3VwIixRWzFdPjEpc3dpdGNoKEQpe2Nhc2UgMDpNKz0iIHVpLWRhdGVwaWNrZXItZ3JvdXAtZmlyc3QiLEM9IiB1aS1jb3JuZXItIisoWT8icmlnaHQiOiJsZWZ0Iik7YnJlYWs7Y2FzZSBRWzFdLTE6TSs9IiB1aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QiLEM9IiB1aS1jb3JuZXItIisoWT8ibGVmdCI6InJpZ2h0Iik7YnJlYWs7ZGVmYXVsdDpNKz0iIHVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIixDPSIifU0rPSInPiJ9Zm9yKE0rPSI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWhlYWRlciB1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeCIrQysiJz4iKygvYWxsfGxlZnQvLnRlc3QoQykmJjA9PT1rP1k/YTpzOiIiKSsoL2FsbHxyaWdodC8udGVzdChDKSYmMD09PWs/WT9zOmE6IiIpK3RoaXMuX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyKHQsWix0ZSxHLCQsaz4wfHxEPjAsZixtKSsiPC9kaXY+PHRhYmxlIGNsYXNzPSd1aS1kYXRlcGlja2VyLWNhbGVuZGFyJz48dGhlYWQ+IisiPHRyPiIsUz11PyI8dGggY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1jb2wnPiIrdGhpcy5fZ2V0KHQsIndlZWtIZWFkZXIiKSsiPC90aD4iOiIiLHg9MDs3Png7eCsrKU49KHgrYyklNyxTKz0iPHRoIisoKHgrYys2KSU3Pj01PyIgY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1lbmQnIjoiIikrIj4iKyI8c3BhbiB0aXRsZT0nIitkW05dKyInPiIrcFtOXSsiPC9zcGFuPjwvdGg+Ijtmb3IoTSs9UysiPC90cj48L3RoZWFkPjx0Ym9keT4iLEk9dGhpcy5fZ2V0RGF5c0luTW9udGgodGUsWiksdGU9PT10LnNlbGVjdGVkWWVhciYmWj09PXQuc2VsZWN0ZWRNb250aCYmKHQuc2VsZWN0ZWREYXk9TWF0aC5taW4odC5zZWxlY3RlZERheSxJKSksUD0odGhpcy5fZ2V0Rmlyc3REYXlPZk1vbnRoKHRlLFopLWMrNyklNyxBPU1hdGguY2VpbCgoUCtJKS83KSx6PXE/dGhpcy5tYXhSb3dzPkE/dGhpcy5tYXhSb3dzOkE6QSx0aGlzLm1heFJvd3M9eixIPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHRlLFosMS1QKSksRT0wO3o+RTtFKyspe2ZvcihNKz0iPHRyPiIsRj11PyI8dGQgY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1jb2wnPiIrdGhpcy5fZ2V0KHQsImNhbGN1bGF0ZVdlZWsiKShIKSsiPC90ZD4iOiIiLHg9MDs3Png7eCsrKU89Zz9nLmFwcGx5KHQuaW5wdXQ/dC5pbnB1dFswXTpudWxsLFtIXSk6WyEwLCIiXSxXPUguZ2V0TW9udGgoKSE9PVosaj1XJiYhX3x8IU9bMF18fEcmJkc+SHx8JCYmSD4kLEYrPSI8dGQgY2xhc3M9JyIrKCh4K2MrNiklNz49NT8iIHVpLWRhdGVwaWNrZXItd2Vlay1lbmQiOiIiKSsoVz8iIHVpLWRhdGVwaWNrZXItb3RoZXItbW9udGgiOiIiKSsoSC5nZXRUaW1lKCk9PT1ULmdldFRpbWUoKSYmWj09PXQuc2VsZWN0ZWRNb250aCYmdC5fa2V5RXZlbnR8fGIuZ2V0VGltZSgpPT09SC5nZXRUaW1lKCkmJmIuZ2V0VGltZSgpPT09VC5nZXRUaW1lKCk/IiAiK3RoaXMuX2RheU92ZXJDbGFzczoiIikrKGo/IiAiK3RoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzKyIgdWktc3RhdGUtZGlzYWJsZWQiOiIiKSsoVyYmIXY/IiI6IiAiK09bMV0rKEguZ2V0VGltZSgpPT09WC5nZXRUaW1lKCk/IiAiK3RoaXMuX2N1cnJlbnRDbGFzczoiIikrKEguZ2V0VGltZSgpPT09TC5nZXRUaW1lKCk/IiB1aS1kYXRlcGlja2VyLXRvZGF5IjoiIikpKyInIisoVyYmIXZ8fCFPWzJdPyIiOiIgdGl0bGU9JyIrT1syXS5yZXBsYWNlKC8nL2csIiYjMzk7IikrIiciKSsoaj8iIjoiIGRhdGEtaGFuZGxlcj0nc2VsZWN0RGF5JyBkYXRhLWV2ZW50PSdjbGljaycgZGF0YS1tb250aD0nIitILmdldE1vbnRoKCkrIicgZGF0YS15ZWFyPSciK0guZ2V0RnVsbFllYXIoKSsiJyIpKyI+IisoVyYmIXY/IiYjeGEwOyI6aj8iPHNwYW4gY2xhc3M9J3VpLXN0YXRlLWRlZmF1bHQnPiIrSC5nZXREYXRlKCkrIjwvc3Bhbj4iOiI8YSBjbGFzcz0ndWktc3RhdGUtZGVmYXVsdCIrKEguZ2V0VGltZSgpPT09TC5nZXRUaW1lKCk/IiB1aS1zdGF0ZS1oaWdobGlnaHQiOiIiKSsoSC5nZXRUaW1lKCk9PT1YLmdldFRpbWUoKT8iIHVpLXN0YXRlLWFjdGl2ZSI6IiIpKyhXPyIgdWktcHJpb3JpdHktc2Vjb25kYXJ5IjoiIikrIicgaHJlZj0nIyc+IitILmdldERhdGUoKSsiPC9hPiIpKyI8L3RkPiIsSC5zZXREYXRlKEguZ2V0RGF0ZSgpKzEpLEg9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoSCk7TSs9RisiPC90cj4ifVorKyxaPjExJiYoWj0wLHRlKyspLE0rPSI8L3Rib2R5PjwvdGFibGU+IisocT8iPC9kaXY+IisoUVswXT4wJiZEPT09UVsxXS0xPyI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLXJvdy1icmVhayc+PC9kaXY+IjoiIik6IiIpLHcrPU19eSs9d31yZXR1cm4geSs9bCx0Ll9rZXlFdmVudD0hMSx5fSxfZ2VuZXJhdGVNb250aFllYXJIZWFkZXI6ZnVuY3Rpb24odCxlLGkscyxuLGEscixvKXt2YXIgaCxsLGMsdSxkLHAsZixtLGc9dGhpcy5fZ2V0KHQsImNoYW5nZU1vbnRoIiksdj10aGlzLl9nZXQodCwiY2hhbmdlWWVhciIpLF89dGhpcy5fZ2V0KHQsInNob3dNb250aEFmdGVyWWVhciIpLGI9IjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItdGl0bGUnPiIseT0iIjtpZihhfHwhZyl5Kz0iPHNwYW4gY2xhc3M9J3VpLWRhdGVwaWNrZXItbW9udGgnPiIrcltlXSsiPC9zcGFuPiI7ZWxzZXtmb3IoaD1zJiZzLmdldEZ1bGxZZWFyKCk9PT1pLGw9biYmbi5nZXRGdWxsWWVhcigpPT09aSx5Kz0iPHNlbGVjdCBjbGFzcz0ndWktZGF0ZXBpY2tlci1tb250aCcgZGF0YS1oYW5kbGVyPSdzZWxlY3RNb250aCcgZGF0YS1ldmVudD0nY2hhbmdlJz4iLGM9MDsxMj5jO2MrKykoIWh8fGM+PXMuZ2V0TW9udGgoKSkmJighbHx8bi5nZXRNb250aCgpPj1jKSYmKHkrPSI8b3B0aW9uIHZhbHVlPSciK2MrIiciKyhjPT09ZT8iIHNlbGVjdGVkPSdzZWxlY3RlZCciOiIiKSsiPiIrb1tjXSsiPC9vcHRpb24+Iik7eSs9Ijwvc2VsZWN0PiJ9aWYoX3x8KGIrPXkrKCFhJiZnJiZ2PyIiOiImI3hhMDsiKSksIXQueWVhcnNodG1sKWlmKHQueWVhcnNodG1sPSIiLGF8fCF2KWIrPSI8c3BhbiBjbGFzcz0ndWktZGF0ZXBpY2tlci15ZWFyJz4iK2krIjwvc3Bhbj4iO2Vsc2V7Zm9yKHU9dGhpcy5fZ2V0KHQsInllYXJSYW5nZSIpLnNwbGl0KCI6IiksZD0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCkscD1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKC9jWytcLV0uKi8pP2krcGFyc2VJbnQodC5zdWJzdHJpbmcoMSksMTApOnQubWF0Y2goL1srXC1dLiovKT9kK3BhcnNlSW50KHQsMTApOnBhcnNlSW50KHQsMTApOwpyZXR1cm4gaXNOYU4oZSk/ZDplfSxmPXAodVswXSksbT1NYXRoLm1heChmLHAodVsxXXx8IiIpKSxmPXM/TWF0aC5tYXgoZixzLmdldEZ1bGxZZWFyKCkpOmYsbT1uP01hdGgubWluKG0sbi5nZXRGdWxsWWVhcigpKTptLHQueWVhcnNodG1sKz0iPHNlbGVjdCBjbGFzcz0ndWktZGF0ZXBpY2tlci15ZWFyJyBkYXRhLWhhbmRsZXI9J3NlbGVjdFllYXInIGRhdGEtZXZlbnQ9J2NoYW5nZSc+IjttPj1mO2YrKyl0LnllYXJzaHRtbCs9IjxvcHRpb24gdmFsdWU9JyIrZisiJyIrKGY9PT1pPyIgc2VsZWN0ZWQ9J3NlbGVjdGVkJyI6IiIpKyI+IitmKyI8L29wdGlvbj4iO3QueWVhcnNodG1sKz0iPC9zZWxlY3Q+IixiKz10LnllYXJzaHRtbCx0LnllYXJzaHRtbD1udWxsfXJldHVybiBiKz10aGlzLl9nZXQodCwieWVhclN1ZmZpeCIpLF8mJihiKz0oIWEmJmcmJnY/IiI6IiYjeGEwOyIpK3kpLGIrPSI8L2Rpdj4ifSxfYWRqdXN0SW5zdERhdGU6ZnVuY3Rpb24odCxlLGkpe3ZhciBzPXQuZHJhd1llYXIrKCJZIj09PWk/ZTowKSxuPXQuZHJhd01vbnRoKygiTSI9PT1pP2U6MCksYT1NYXRoLm1pbih0LnNlbGVjdGVkRGF5LHRoaXMuX2dldERheXNJbk1vbnRoKHMsbikpKygiRCI9PT1pP2U6MCkscj10aGlzLl9yZXN0cmljdE1pbk1heCh0LHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHMsbixhKSkpO3Quc2VsZWN0ZWREYXk9ci5nZXREYXRlKCksdC5kcmF3TW9udGg9dC5zZWxlY3RlZE1vbnRoPXIuZ2V0TW9udGgoKSx0LmRyYXdZZWFyPXQuc2VsZWN0ZWRZZWFyPXIuZ2V0RnVsbFllYXIoKSwoIk0iPT09aXx8IlkiPT09aSkmJnRoaXMuX25vdGlmeUNoYW5nZSh0KX0sX3Jlc3RyaWN0TWluTWF4OmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fZ2V0TWluTWF4RGF0ZSh0LCJtaW4iKSxzPXRoaXMuX2dldE1pbk1heERhdGUodCwibWF4Iiksbj1pJiZpPmU/aTplO3JldHVybiBzJiZuPnM/czpufSxfbm90aWZ5Q2hhbmdlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldCh0LCJvbkNoYW5nZU1vbnRoWWVhciIpO2UmJmUuYXBwbHkodC5pbnB1dD90LmlucHV0WzBdOm51bGwsW3Quc2VsZWN0ZWRZZWFyLHQuc2VsZWN0ZWRNb250aCsxLHRdKX0sX2dldE51bWJlck9mTW9udGhzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldCh0LCJudW1iZXJPZk1vbnRocyIpO3JldHVybiBudWxsPT1lP1sxLDFdOiJudW1iZXIiPT10eXBlb2YgZT9bMSxlXTplfSxfZ2V0TWluTWF4RGF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9kZXRlcm1pbmVEYXRlKHQsdGhpcy5fZ2V0KHQsZSsiRGF0ZSIpLG51bGwpfSxfZ2V0RGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gMzItdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodCxlLDMyKSkuZ2V0RGF0ZSgpfSxfZ2V0Rmlyc3REYXlPZk1vbnRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBEYXRlKHQsZSwxKS5nZXREYXkoKX0sX2NhbkFkanVzdE1vbnRoOmZ1bmN0aW9uKHQsZSxpLHMpe3ZhciBuPXRoaXMuX2dldE51bWJlck9mTW9udGhzKHQpLGE9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoaSxzKygwPmU/ZTpuWzBdKm5bMV0pLDEpKTtyZXR1cm4gMD5lJiZhLnNldERhdGUodGhpcy5fZ2V0RGF5c0luTW9udGgoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSkpLHRoaXMuX2lzSW5SYW5nZSh0LGEpfSxfaXNJblJhbmdlOmZ1bmN0aW9uKHQsZSl7dmFyIGkscyxuPXRoaXMuX2dldE1pbk1heERhdGUodCwibWluIiksYT10aGlzLl9nZXRNaW5NYXhEYXRlKHQsIm1heCIpLHI9bnVsbCxvPW51bGwsaD10aGlzLl9nZXQodCwieWVhclJhbmdlIik7cmV0dXJuIGgmJihpPWguc3BsaXQoIjoiKSxzPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxyPXBhcnNlSW50KGlbMF0sMTApLG89cGFyc2VJbnQoaVsxXSwxMCksaVswXS5tYXRjaCgvWytcLV0uKi8pJiYocis9cyksaVsxXS5tYXRjaCgvWytcLV0uKi8pJiYobys9cykpLCghbnx8ZS5nZXRUaW1lKCk+PW4uZ2V0VGltZSgpKSYmKCFhfHxlLmdldFRpbWUoKTw9YS5nZXRUaW1lKCkpJiYoIXJ8fGUuZ2V0RnVsbFllYXIoKT49cikmJighb3x8bz49ZS5nZXRGdWxsWWVhcigpKX0sX2dldEZvcm1hdENvbmZpZzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXQodCwic2hvcnRZZWFyQ3V0b2ZmIik7cmV0dXJuIGU9InN0cmluZyIhPXR5cGVvZiBlP2U6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCtwYXJzZUludChlLDEwKSx7c2hvcnRZZWFyQ3V0b2ZmOmUsZGF5TmFtZXNTaG9ydDp0aGlzLl9nZXQodCwiZGF5TmFtZXNTaG9ydCIpLGRheU5hbWVzOnRoaXMuX2dldCh0LCJkYXlOYW1lcyIpLG1vbnRoTmFtZXNTaG9ydDp0aGlzLl9nZXQodCwibW9udGhOYW1lc1Nob3J0IiksbW9udGhOYW1lczp0aGlzLl9nZXQodCwibW9udGhOYW1lcyIpfX0sX2Zvcm1hdERhdGU6ZnVuY3Rpb24odCxlLGkscyl7ZXx8KHQuY3VycmVudERheT10LnNlbGVjdGVkRGF5LHQuY3VycmVudE1vbnRoPXQuc2VsZWN0ZWRNb250aCx0LmN1cnJlbnRZZWFyPXQuc2VsZWN0ZWRZZWFyKTt2YXIgbj1lPyJvYmplY3QiPT10eXBlb2YgZT9lOnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHMsaSxlKSk6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodC5jdXJyZW50WWVhcix0LmN1cnJlbnRNb250aCx0LmN1cnJlbnREYXkpKTtyZXR1cm4gdGhpcy5mb3JtYXREYXRlKHRoaXMuX2dldCh0LCJkYXRlRm9ybWF0Iiksbix0aGlzLl9nZXRGb3JtYXRDb25maWcodCkpfX0pLHQuZm4uZGF0ZXBpY2tlcj1mdW5jdGlvbihlKXtpZighdGhpcy5sZW5ndGgpcmV0dXJuIHRoaXM7dC5kYXRlcGlja2VyLmluaXRpYWxpemVkfHwodChkb2N1bWVudCkubW91c2Vkb3duKHQuZGF0ZXBpY2tlci5fY2hlY2tFeHRlcm5hbENsaWNrKSx0LmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQ9ITApLDA9PT10KCIjIit0LmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RoJiZ0KCJib2R5IikuYXBwZW5kKHQuZGF0ZXBpY2tlci5kcERpdik7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiJzdHJpbmciIT10eXBlb2YgZXx8ImlzRGlzYWJsZWQiIT09ZSYmImdldERhdGUiIT09ZSYmIndpZGdldCIhPT1lPyJvcHRpb24iPT09ZSYmMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgYXJndW1lbnRzWzFdP3QuZGF0ZXBpY2tlclsiXyIrZSsiRGF0ZXBpY2tlciJdLmFwcGx5KHQuZGF0ZXBpY2tlcixbdGhpc1swXV0uY29uY2F0KGkpKTp0aGlzLmVhY2goZnVuY3Rpb24oKXsic3RyaW5nIj09dHlwZW9mIGU/dC5kYXRlcGlja2VyWyJfIitlKyJEYXRlcGlja2VyIl0uYXBwbHkodC5kYXRlcGlja2VyLFt0aGlzXS5jb25jYXQoaSkpOnQuZGF0ZXBpY2tlci5fYXR0YWNoRGF0ZXBpY2tlcih0aGlzLGUpfSk6dC5kYXRlcGlja2VyWyJfIitlKyJEYXRlcGlja2VyIl0uYXBwbHkodC5kYXRlcGlja2VyLFt0aGlzWzBdXS5jb25jYXQoaSkpfSx0LmRhdGVwaWNrZXI9bmV3IGksdC5kYXRlcGlja2VyLmluaXRpYWxpemVkPSExLHQuZGF0ZXBpY2tlci51dWlkPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHQuZGF0ZXBpY2tlci52ZXJzaW9uPSIxLjEwLjMifSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/js</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/js/jquery-editable-poshytip.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIFgtZWRpdGFibGUgLSB2MS41LjEgCiogSW4tcGxhY2UgZWRpdGluZyB3aXRoIFR3aXR0ZXIgQm9vdHN0cmFwLCBqUXVlcnkgVUkgb3IgcHVyZSBqUXVlcnkKKiBodHRwOi8vZ2l0aHViLmNvbS92aXRhbGV0cy94LWVkaXRhYmxlCiogQ29weXJpZ2h0IChjKSAyMDEzIFZpdGFsaXkgUG90YXBvdjsgTGljZW5zZWQgTUlUICovCi8qKgpGb3JtIHdpdGggc2luZ2xlIGlucHV0IGVsZW1lbnQsIHR3byBidXR0b25zIGFuZCB0d28gc3RhdGVzOiBub3JtYWwvbG9hZGluZy4KQXBwbGllZCBhcyBqUXVlcnkgbWV0aG9kIHRvIERJViB0YWcgKG5vdCB0byBmb3JtIHRhZyEpLiBUaGlzIGlzIGJlY2F1c2UgZm9ybSBjYW4gYmUgaW4gbG9hZGluZyBzdGF0ZSB3aGVuIHNwaW5uZXIgc2hvd24uCkVkaXRhYmxlZm9ybSBpcyBsaW5rZWQgd2l0aCBvbmUgb2YgaW5wdXQgdHlwZXMsIGUuZy4gJ3RleHQnLCAnc2VsZWN0JyBldGMuCgpAY2xhc3MgZWRpdGFibGVmb3JtCkB1c2VzIHRleHQKQHVzZXMgdGV4dGFyZWEKKiovCihmdW5jdGlvbiAoJCkgewogICAgInVzZSBzdHJpY3QiOwogICAgCiAgICB2YXIgRWRpdGFibGVGb3JtID0gZnVuY3Rpb24gKGRpdiwgb3B0aW9ucykgewogICAgICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCAkLmZuLmVkaXRhYmxlZm9ybS5kZWZhdWx0cywgb3B0aW9ucyk7CiAgICAgICAgdGhpcy4kZGl2ID0gJChkaXYpOyAvL2RpdiwgY29udGFpbmluZyBmb3JtLiBOb3QgZm9ybSB0YWcuIE5vdCBlZGl0YWJsZS1lbGVtZW50LgogICAgICAgIGlmKCF0aGlzLm9wdGlvbnMuc2NvcGUpIHsKICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNjb3BlID0gdGhpczsKICAgICAgICB9CiAgICAgICAgLy9ub3RoaW5nIHNob3duIGFmdGVyIGluaXQKICAgIH07CgogICAgRWRpdGFibGVGb3JtLnByb3RvdHlwZSA9IHsKICAgICAgICBjb25zdHJ1Y3RvcjogRWRpdGFibGVGb3JtLAogICAgICAgIGluaXRJbnB1dDogZnVuY3Rpb24oKSB7ICAvL2NhbGxlZCBvbmNlCiAgICAgICAgICAgIC8vdGFrZSBpbnB1dCBmcm9tIG9wdGlvbnMgKGFzIGl0IGlzIGNyZWF0ZWQgaW4gZWRpdGFibGUtZWxlbWVudCkKICAgICAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMub3B0aW9ucy5pbnB1dDsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vc2V0IGluaXRpYWwgdmFsdWUKICAgICAgICAgICAgLy90b2RvOiBtYXkgYmUgYWRkIGNoZWNrOiB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyA/IAogICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pbnB1dC5zdHIydmFsdWUodGhpcy5vcHRpb25zLnZhbHVlKTsgCiAgICAgICAgICAgIAogICAgICAgICAgICAvL3ByZXJlbmRlcjogZ2V0IGlucHV0LiRpbnB1dAogICAgICAgICAgICB0aGlzLmlucHV0LnByZXJlbmRlcigpOwogICAgICAgIH0sCiAgICAgICAgaW5pdFRlbXBsYXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdGhpcy4kZm9ybSA9ICQoJC5mbi5lZGl0YWJsZWZvcm0udGVtcGxhdGUpOyAKICAgICAgICB9LAogICAgICAgIGluaXRCdXR0b25zOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyICRidG4gPSB0aGlzLiRmb3JtLmZpbmQoJy5lZGl0YWJsZS1idXR0b25zJyk7CiAgICAgICAgICAgICRidG4uYXBwZW5kKCQuZm4uZWRpdGFibGVmb3JtLmJ1dHRvbnMpOwogICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMuc2hvd2J1dHRvbnMgPT09ICdib3R0b20nKSB7CiAgICAgICAgICAgICAgICAkYnRuLmFkZENsYXNzKCdlZGl0YWJsZS1idXR0b25zLWJvdHRvbScpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAvKioKICAgICAgICBSZW5kZXJzIGVkaXRhYmxlZm9ybQoKICAgICAgICBAbWV0aG9kIHJlbmRlcgogICAgICAgICoqLyAgICAgICAgCiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgLy9pbml0IGxvYWRlcgogICAgICAgICAgICB0aGlzLiRsb2FkaW5nID0gJCgkLmZuLmVkaXRhYmxlZm9ybS5sb2FkaW5nKTsgICAgICAgIAogICAgICAgICAgICB0aGlzLiRkaXYuZW1wdHkoKS5hcHBlbmQodGhpcy4kbG9hZGluZyk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvL2luaXQgZm9ybSB0ZW1wbGF0ZSBhbmQgYnV0dG9ucwogICAgICAgICAgICB0aGlzLmluaXRUZW1wbGF0ZSgpOwogICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMuc2hvd2J1dHRvbnMpIHsKICAgICAgICAgICAgICAgIHRoaXMuaW5pdEJ1dHRvbnMoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuJGZvcm0uZmluZCgnLmVkaXRhYmxlLWJ1dHRvbnMnKS5yZW1vdmUoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9zaG93IGxvYWRpbmcgc3RhdGUKICAgICAgICAgICAgdGhpcy5zaG93TG9hZGluZygpOyAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgLy9mbGFnIHNob3dpbmcgaXMgZm9ybSBub3cgc2F2aW5nIHZhbHVlIHRvIHNlcnZlci4gCiAgICAgICAgICAgIC8vSXQgaXMgbmVlZGVkIHRvIHdhaXQgd2hlbiBjbG9zaW5nIGZvcm0uCiAgICAgICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8qKiAgICAgICAgCiAgICAgICAgICAgIEZpcmVkIHdoZW4gcmVuZGVyaW5nIHN0YXJ0cwogICAgICAgICAgICBAZXZlbnQgcmVuZGVyaW5nIAogICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gZXZlbnQgZXZlbnQgb2JqZWN0CiAgICAgICAgICAgICoqLyAgICAgICAgICAgIAogICAgICAgICAgICB0aGlzLiRkaXYudHJpZ2dlckhhbmRsZXIoJ3JlbmRlcmluZycpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy9pbml0IGlucHV0CiAgICAgICAgICAgIHRoaXMuaW5pdElucHV0KCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvL2FwcGVuZCBpbnB1dCB0byBmb3JtCiAgICAgICAgICAgIHRoaXMuJGZvcm0uZmluZCgnZGl2LmVkaXRhYmxlLWlucHV0JykuYXBwZW5kKHRoaXMuaW5wdXQuJHRwbCk7ICAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAvL2FwcGVuZCBmb3JtIHRvIGNvbnRhaW5lcgogICAgICAgICAgICB0aGlzLiRkaXYuYXBwZW5kKHRoaXMuJGZvcm0pOwogICAgICAgICAgICAKICAgICAgICAgICAgLy9yZW5kZXIgaW5wdXQKICAgICAgICAgICAgJC53aGVuKHRoaXMuaW5wdXQucmVuZGVyKCkpCiAgICAgICAgICAgIC50aGVuKCQucHJveHkoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgLy9zZXR1cCBpbnB1dCB0byBzdWJtaXQgYXV0b21hdGljYWxseSB3aGVuIG5vIGJ1dHRvbnMgc2hvd24KICAgICAgICAgICAgICAgIGlmKCF0aGlzLm9wdGlvbnMuc2hvd2J1dHRvbnMpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0LmF1dG9zdWJtaXQoKTsgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvL2F0dGFjaCAnY2FuY2VsJyBoYW5kbGVyCiAgICAgICAgICAgICAgICB0aGlzLiRmb3JtLmZpbmQoJy5lZGl0YWJsZS1jYW5jZWwnKS5jbGljaygkLnByb3h5KHRoaXMuY2FuY2VsLCB0aGlzKSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmKHRoaXMuaW5wdXQuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yKHRoaXMuaW5wdXQuZXJyb3IpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuJGZvcm0uZmluZCgnLmVkaXRhYmxlLXN1Ym1pdCcpLmF0dHIoJ2Rpc2FibGVkJywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC4kaW5wdXQuYXR0cignZGlzYWJsZWQnLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAvL3ByZXZlbnQgZm9ybSBmcm9tIHN1Ym1pdHRpbmcKICAgICAgICAgICAgICAgICAgICB0aGlzLiRmb3JtLnN1Ym1pdChmdW5jdGlvbihlKXsgZS5wcmV2ZW50RGVmYXVsdCgpOyB9KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC4kaW5wdXQucmVtb3ZlQXR0cignZGlzYWJsZWQnKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLiRmb3JtLmZpbmQoJy5lZGl0YWJsZS1zdWJtaXQnKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpOwogICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9ICh0aGlzLnZhbHVlID09PSBudWxsIHx8IHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnZhbHVlID09PSAnJykgPyB0aGlzLm9wdGlvbnMuZGVmYXVsdFZhbHVlIDogdGhpcy52YWx1ZTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnZhbHVlMmlucHV0KHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAvL2F0dGFjaCBzdWJtaXQgaGFuZGxlcgogICAgICAgICAgICAgICAgICAgIHRoaXMuJGZvcm0uc3VibWl0KCQucHJveHkodGhpcy5zdWJtaXQsIHRoaXMpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvKiogICAgICAgIAogICAgICAgICAgICAgICAgRmlyZWQgd2hlbiBmb3JtIGlzIHJlbmRlcmVkCiAgICAgICAgICAgICAgICBAZXZlbnQgcmVuZGVyZWQKICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBldmVudCBldmVudCBvYmplY3QKICAgICAgICAgICAgICAgICoqLyAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdGhpcy4kZGl2LnRyaWdnZXJIYW5kbGVyKCdyZW5kZXJlZCcpOyAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB0aGlzLnNob3dGb3JtKCk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vY2FsbCBwb3N0cmVuZGVyIG1ldGhvZCB0byBwZXJmb3JtIGFjdGlvbnMgcmVxdWlyZWQgdmlzaWJpbGl0eSBvZiBmb3JtCiAgICAgICAgICAgICAgICBpZih0aGlzLmlucHV0LnBvc3RyZW5kZXIpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnBvc3RyZW5kZXIoKTsKICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgIH0sIHRoaXMpKTsKICAgICAgICB9LAogICAgICAgIGNhbmNlbDogZnVuY3Rpb24oKSB7ICAgCiAgICAgICAgICAgIC8qKiAgICAgICAgCiAgICAgICAgICAgIEZpcmVkIHdoZW4gZm9ybSB3YXMgY2FuY2VsbGVkIGJ5IHVzZXIKICAgICAgICAgICAgQGV2ZW50IGNhbmNlbCAKICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IGV2ZW50IGV2ZW50IG9iamVjdAogICAgICAgICAgICAqKi8gICAgICAgICAgICAgIAogICAgICAgICAgICB0aGlzLiRkaXYudHJpZ2dlckhhbmRsZXIoJ2NhbmNlbCcpOwogICAgICAgIH0sCiAgICAgICAgc2hvd0xvYWRpbmc6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgdywgaDsKICAgICAgICAgICAgaWYodGhpcy4kZm9ybSkgewogICAgICAgICAgICAgICAgLy9zZXQgbG9hZGluZyBzaXplIGVxdWFsIHRvIGZvcm0KICAgICAgICAgICAgICAgIHcgPSB0aGlzLiRmb3JtLm91dGVyV2lkdGgoKTsKICAgICAgICAgICAgICAgIGggPSB0aGlzLiRmb3JtLm91dGVySGVpZ2h0KCk7IAogICAgICAgICAgICAgICAgaWYodykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvYWRpbmcud2lkdGgodyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZihoKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9hZGluZy5oZWlnaHQoaCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLiRmb3JtLmhpZGUoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vc3RyZXRjaCBsb2FkaW5nIHRvIGZpbGwgY29udGFpbmVyIHdpZHRoCiAgICAgICAgICAgICAgICB3ID0gdGhpcy4kbG9hZGluZy5wYXJlbnQoKS53aWR0aCgpOwogICAgICAgICAgICAgICAgaWYodykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuJGxvYWRpbmcud2lkdGgodyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy4kbG9hZGluZy5zaG93KCk7IAogICAgICAgIH0sCgogICAgICAgIHNob3dGb3JtOiBmdW5jdGlvbihhY3RpdmF0ZSkgewogICAgICAgICAgICB0aGlzLiRsb2FkaW5nLmhpZGUoKTsKICAgICAgICAgICAgdGhpcy4kZm9ybS5zaG93KCk7CiAgICAgICAgICAgIGlmKGFjdGl2YXRlICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5hY3RpdmF0ZSgpOyAKICAgICAgICAgICAgfQogICAgICAgICAgICAvKiogICAgICAgIAogICAgICAgICAgICBGaXJlZCB3aGVuIGZvcm0gaXMgc2hvd24KICAgICAgICAgICAgQGV2ZW50IHNob3cgCiAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBldmVudCBldmVudCBvYmplY3QKICAgICAgICAgICAgKiovICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy4kZGl2LnRyaWdnZXJIYW5kbGVyKCdzaG93Jyk7CiAgICAgICAgfSwKCiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKG1zZykgewogICAgICAgICAgICB2YXIgJGdyb3VwID0gdGhpcy4kZm9ybS5maW5kKCcuY29udHJvbC1ncm91cCcpLAogICAgICAgICAgICAgICAgJGJsb2NrID0gdGhpcy4kZm9ybS5maW5kKCcuZWRpdGFibGUtZXJyb3ItYmxvY2snKSwKICAgICAgICAgICAgICAgIGxpbmVzOwoKICAgICAgICAgICAgaWYobXNnID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgJGdyb3VwLnJlbW92ZUNsYXNzKCQuZm4uZWRpdGFibGVmb3JtLmVycm9yR3JvdXBDbGFzcyk7CiAgICAgICAgICAgICAgICAkYmxvY2sucmVtb3ZlQ2xhc3MoJC5mbi5lZGl0YWJsZWZvcm0uZXJyb3JCbG9ja0NsYXNzKS5lbXB0eSgpLmhpZGUoKTsgCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvL2NvbnZlcnQgbmV3bGluZSB0byA8YnI+IGZvciBtb3JlIHByZXR0eSBlcnJvciBkaXNwbGF5CiAgICAgICAgICAgICAgICBpZihtc2cpIHsKICAgICAgICAgICAgICAgICAgICBsaW5lcyA9ICgnJyttc2cpLnNwbGl0KCdcbicpOwogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNbaV0gPSAkKCc8ZGl2PicpLnRleHQobGluZXNbaV0pLmh0bWwoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgbXNnID0gbGluZXMuam9pbignPGJyPicpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGdyb3VwLmFkZENsYXNzKCQuZm4uZWRpdGFibGVmb3JtLmVycm9yR3JvdXBDbGFzcyk7CiAgICAgICAgICAgICAgICAkYmxvY2suYWRkQ2xhc3MoJC5mbi5lZGl0YWJsZWZvcm0uZXJyb3JCbG9ja0NsYXNzKS5odG1sKG1zZykuc2hvdygpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgc3VibWl0OiBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vZ2V0IG5ldyB2YWx1ZSBmcm9tIGlucHV0CiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMuaW5wdXQuaW5wdXQydmFsdWUoKTsgCgogICAgICAgICAgICAvL3ZhbGlkYXRpb246IGlmIHZhbGlkYXRlIHJldHVybnMgc3RyaW5nIG9yIHRydXRoeSB2YWx1ZSAtIG1lYW5zIGVycm9yCiAgICAgICAgICAgIC8vaWYgcmV0dXJucyBvYmplY3QgbGlrZSB7bmV3VmFsdWU6ICcuLi4nfSA9PiBzdWJtaXR0ZWQgdmFsdWUgaXMgcmVhc3NpZ25lZCB0byBpdAogICAgICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLnZhbGlkYXRlKG5ld1ZhbHVlKTsKICAgICAgICAgICAgaWYgKCQudHlwZShlcnJvcikgPT09ICdvYmplY3QnICYmIGVycm9yLm5ld1ZhbHVlICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gZXJyb3IubmV3VmFsdWU7CiAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnZhbHVlMmlucHV0KG5ld1ZhbHVlKTsKICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBlcnJvci5tc2cgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlcnJvci5tc2cpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Zvcm0oKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyb3IpOwogICAgICAgICAgICAgICAgdGhpcy5zaG93Rm9ybSgpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9IAogICAgICAgICAgICAKICAgICAgICAgICAgLy9pZiB2YWx1ZSBub3QgY2hhbmdlZCAtLT4gdHJpZ2dlciAnbm9jaGFuZ2UnIGV2ZW50IGFuZCByZXR1cm4KICAgICAgICAgICAgLypqc2xpbnQgZXFlcTogdHJ1ZSovCiAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLnNhdmVub2NoYW5nZSAmJiB0aGlzLmlucHV0LnZhbHVlMnN0cihuZXdWYWx1ZSkgPT0gdGhpcy5pbnB1dC52YWx1ZTJzdHIodGhpcy52YWx1ZSkpIHsKICAgICAgICAgICAgLypqc2xpbnQgZXFlcTogZmFsc2UqLyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8qKiAgICAgICAgCiAgICAgICAgICAgICAgICBGaXJlZCB3aGVuIHZhbHVlIG5vdCBjaGFuZ2VkIGJ1dCBmb3JtIGlzIHN1Ym1pdHRlZC4gUmVxdWlyZXMgc2F2ZW5vY2hhbmdlID0gZmFsc2UuCiAgICAgICAgICAgICAgICBAZXZlbnQgbm9jaGFuZ2UgCiAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gZXZlbnQgZXZlbnQgb2JqZWN0CiAgICAgICAgICAgICAgICAqKi8gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdGhpcy4kZGl2LnRyaWdnZXJIYW5kbGVyKCdub2NoYW5nZScpOyAgICAgICAgICAgIAogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9IAoKICAgICAgICAgICAgLy9jb252ZXJ0IHZhbHVlIGZvciBzdWJtaXR0aW5nIHRvIHNlcnZlcgogICAgICAgICAgICB2YXIgc3VibWl0VmFsdWUgPSB0aGlzLmlucHV0LnZhbHVlMnN1Ym1pdChuZXdWYWx1ZSk7CiAgICAgICAgICAgIAogICAgICAgICAgICB0aGlzLmlzU2F2aW5nID0gdHJ1ZTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vc2VuZGluZyBkYXRhIHRvIHNlcnZlcgogICAgICAgICAgICAkLndoZW4odGhpcy5zYXZlKHN1Ym1pdFZhbHVlKSkKICAgICAgICAgICAgLmRvbmUoJC5wcm94eShmdW5jdGlvbihyZXNwb25zZSkgewogICAgICAgICAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIC8vcnVuIHN1Y2Nlc3MgY2FsbGJhY2sKICAgICAgICAgICAgICAgIHZhciByZXMgPSB0eXBlb2YgdGhpcy5vcHRpb25zLnN1Y2Nlc3MgPT09ICdmdW5jdGlvbicgPyB0aGlzLm9wdGlvbnMuc3VjY2Vzcy5jYWxsKHRoaXMub3B0aW9ucy5zY29wZSwgcmVzcG9uc2UsIG5ld1ZhbHVlKSA6IG51bGw7CgogICAgICAgICAgICAgICAgLy9pZiBzdWNjZXNzIGNhbGxiYWNrIHJldHVybnMgZmFsc2UgLS0+IGtlZXAgZm9ybSBvcGVuIGFuZCBkbyBub3QgYWN0aXZhdGUgaW5wdXQKICAgICAgICAgICAgICAgIGlmKHJlcyA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dGb3JtKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9pZiBzdWNjZXNzIGNhbGxiYWNrIHJldHVybnMgc3RyaW5nIC0tPiAga2VlcCBmb3JtIG9wZW4sIHNob3cgZXJyb3IgYW5kIGFjdGl2YXRlIGlucHV0ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZih0eXBlb2YgcmVzID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IocmVzKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dGb3JtKCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vaWYgc3VjY2VzcyBjYWxsYmFjayByZXR1cm5zIG9iamVjdCBsaWtlIHtuZXdWYWx1ZTogPHNvbWV0aGluZz59IC0tPiB1c2UgdGhhdCB2YWx1ZSBpbnN0ZWFkIG9mIHN1Ym1pdHRlZAogICAgICAgICAgICAgICAgLy9pdCBpcyB1c2VmdWxsIGlmIHlvdSB3YW50IHRvIGNobmFnZSB2YWx1ZSBpbiB1cmwtZnVuY3Rpb24KICAgICAgICAgICAgICAgIGlmKHJlcyAmJiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJiByZXMuaGFzT3duUHJvcGVydHkoJ25ld1ZhbHVlJykpIHsKICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHJlcy5uZXdWYWx1ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL2NsZWFyIGVycm9yIG1lc3NhZ2UKICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZmFsc2UpOyAgIAogICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlOwogICAgICAgICAgICAgICAgLyoqICAgICAgICAKICAgICAgICAgICAgICAgIEZpcmVkIHdoZW4gZm9ybSBpcyBzdWJtaXR0ZWQKICAgICAgICAgICAgICAgIEBldmVudCBzYXZlIAogICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IGV2ZW50IGV2ZW50IG9iamVjdAogICAgICAgICAgICAgICAgQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBhZGRpdGlvbmFsIHBhcmFtcwogICAgICAgICAgICAgICAgQHBhcmFtIHttaXhlZH0gcGFyYW1zLm5ld1ZhbHVlIHJhdyBuZXcgdmFsdWUKICAgICAgICAgICAgICAgIEBwYXJhbSB7bWl4ZWR9IHBhcmFtcy5zdWJtaXRWYWx1ZSBzdWJtaXR0ZWQgdmFsdWUgYXMgc3RyaW5nCiAgICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gcGFyYW1zLnJlc3BvbnNlIGFqYXggcmVzcG9uc2UKCiAgICAgICAgICAgICAgICBAZXhhbXBsZQogICAgICAgICAgICAgICAgJCgnI2Zvcm0tZGl2Jykub24oJ3NhdmUnKSwgZnVuY3Rpb24oZSwgcGFyYW1zKXsKICAgICAgICAgICAgICAgICAgICBpZihwYXJhbXMubmV3VmFsdWUgPT09ICd1c2VybmFtZScpIHsuLi59CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICoqLwogICAgICAgICAgICAgICAgdGhpcy4kZGl2LnRyaWdnZXJIYW5kbGVyKCdzYXZlJywge25ld1ZhbHVlOiBuZXdWYWx1ZSwgc3VibWl0VmFsdWU6IHN1Ym1pdFZhbHVlLCByZXNwb25zZTogcmVzcG9uc2V9KTsKICAgICAgICAgICAgfSwgdGhpcykpCiAgICAgICAgICAgIC5mYWlsKCQucHJveHkoZnVuY3Rpb24oeGhyKSB7CiAgICAgICAgICAgICAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7CgogICAgICAgICAgICAgICAgdmFyIG1zZzsKICAgICAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLm9wdGlvbnMuZXJyb3IgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgICAgICAgICBtc2cgPSB0aGlzLm9wdGlvbnMuZXJyb3IuY2FsbCh0aGlzLm9wdGlvbnMuc2NvcGUsIHhociwgbmV3VmFsdWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBtc2cgPSB0eXBlb2YgeGhyID09PSAnc3RyaW5nJyA/IHhociA6IHhoci5yZXNwb25zZVRleHQgfHwgeGhyLnN0YXR1c1RleHQgfHwgJ1Vua25vd24gZXJyb3IhJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0aGlzLmVycm9yKG1zZyk7CiAgICAgICAgICAgICAgICB0aGlzLnNob3dGb3JtKCk7CiAgICAgICAgICAgIH0sIHRoaXMpKTsKICAgICAgICB9LAoKICAgICAgICBzYXZlOiBmdW5jdGlvbihzdWJtaXRWYWx1ZSkgewogICAgICAgICAgICAvL3RyeSBwYXJzZSBjb21wb3NpdGUgcGsgZGVmaW5lZCBhcyBqc29uIHN0cmluZyBpbiBkYXRhLXBrIAogICAgICAgICAgICB0aGlzLm9wdGlvbnMucGsgPSAkLmZuLmVkaXRhYmxldXRpbHMudHJ5UGFyc2VKc29uKHRoaXMub3B0aW9ucy5waywgdHJ1ZSk7IAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBrID0gKHR5cGVvZiB0aGlzLm9wdGlvbnMucGsgPT09ICdmdW5jdGlvbicpID8gdGhpcy5vcHRpb25zLnBrLmNhbGwodGhpcy5vcHRpb25zLnNjb3BlKSA6IHRoaXMub3B0aW9ucy5waywKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICBzZW5kIG9uIHNlcnZlciBpbiBmb2xsb3dpbmcgY2FzZXM6CiAgICAgICAgICAgICAgMS4gdXJsIGlzIGZ1bmN0aW9uCiAgICAgICAgICAgICAgMi4gdXJsIGlzIHN0cmluZyBBTkQgKHBrIGRlZmluZWQgT1Igc2VuZCBvcHRpb24gPSBhbHdheXMpIAogICAgICAgICAgICAqLwogICAgICAgICAgICBzZW5kID0gISEodHlwZW9mIHRoaXMub3B0aW9ucy51cmwgPT09ICdmdW5jdGlvbicgfHwgKHRoaXMub3B0aW9ucy51cmwgJiYgKCh0aGlzLm9wdGlvbnMuc2VuZCA9PT0gJ2Fsd2F5cycpIHx8ICh0aGlzLm9wdGlvbnMuc2VuZCA9PT0gJ2F1dG8nICYmIHBrICE9PSBudWxsICYmIHBrICE9PSB1bmRlZmluZWQpKSkpLAogICAgICAgICAgICBwYXJhbXM7CgogICAgICAgICAgICBpZiAoc2VuZCkgeyAvL3NlbmQgdG8gc2VydmVyCiAgICAgICAgICAgICAgICB0aGlzLnNob3dMb2FkaW5nKCk7CgogICAgICAgICAgICAgICAgLy9zdGFuZGFyZCBwYXJhbXMKICAgICAgICAgICAgICAgIHBhcmFtcyA9IHsKICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm9wdGlvbnMubmFtZSB8fCAnJywKICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc3VibWl0VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgcGs6IHBrIAogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAvL2FkZGl0aW9uYWwgcGFyYW1zCiAgICAgICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5vcHRpb25zLnBhcmFtcyA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IHRoaXMub3B0aW9ucy5wYXJhbXMuY2FsbCh0aGlzLm9wdGlvbnMuc2NvcGUsIHBhcmFtcyk7ICAKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy90cnkgcGFyc2UganNvbiBpbiBzaW5nbGUgcXVvdGVzIChmcm9tIGRhdGEtcGFyYW1zIGF0dHJpYnV0ZSkKICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucGFyYW1zID0gJC5mbi5lZGl0YWJsZXV0aWxzLnRyeVBhcnNlSnNvbih0aGlzLm9wdGlvbnMucGFyYW1zLCB0cnVlKTsgICAKICAgICAgICAgICAgICAgICAgICAkLmV4dGVuZChwYXJhbXMsIHRoaXMub3B0aW9ucy5wYXJhbXMpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLm9wdGlvbnMudXJsID09PSAnZnVuY3Rpb24nKSB7IC8vdXNlcidzIGZ1bmN0aW9uCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy51cmwuY2FsbCh0aGlzLm9wdGlvbnMuc2NvcGUsIHBhcmFtcyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgeyAgCiAgICAgICAgICAgICAgICAgICAgLy9zZW5kIGFqYXggdG8gc2VydmVyIGFuZCByZXR1cm4gZGVmZXJyZWQgb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQuYWpheCgkLmV4dGVuZCh7CiAgICAgICAgICAgICAgICAgICAgICAgIHVybCAgICAgOiB0aGlzLm9wdGlvbnMudXJsLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhICAgIDogcGFyYW1zLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlICAgIDogJ1BPU1QnCiAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5vcHRpb25zLmFqYXhPcHRpb25zKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LCAKCiAgICAgICAgdmFsaWRhdGU6IGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLnZhbGlkYXRlID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZhbGlkYXRlLmNhbGwodGhpcy5vcHRpb25zLnNjb3BlLCB2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBvcHRpb246IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKICAgICAgICAgICAgaWYoa2V5IGluIHRoaXMub3B0aW9ucykgewogICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zW2tleV0gPSB2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYoa2V5ID09PSAndmFsdWUnKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy9kbyBub3QgcGFzcyBvcHRpb24gdG8gaW5wdXQgYXMgaXQgaXMgcGFzc2VkIGluIGVkaXRhYmxlLWVsZW1lbnQKICAgICAgICB9LAoKICAgICAgICBzZXRWYWx1ZTogZnVuY3Rpb24odmFsdWUsIGNvbnZlcnRTdHIpIHsKICAgICAgICAgICAgaWYoY29udmVydFN0cikgewogICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5wdXQuc3RyMnZhbHVlKHZhbHVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy9pZiBmb3JtIGlzIHZpc2libGUsIHVwZGF0ZSBpbnB1dAogICAgICAgICAgICBpZih0aGlzLiRmb3JtICYmIHRoaXMuJGZvcm0uaXMoJzp2aXNpYmxlJykpIHsKICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQudmFsdWUyaW5wdXQodGhpcy52YWx1ZSk7CiAgICAgICAgICAgIH0gICAgICAgICAgICAKICAgICAgICB9ICAgICAgICAgICAgICAgCiAgICB9OwoKICAgIC8qCiAgICBJbml0aWFsaXplIGVkaXRhYmxlZm9ybS4gQXBwbGllZCB0byBqUXVlcnkgb2JqZWN0LgoKICAgIEBtZXRob2QgJCgpLmVkaXRhYmxlZm9ybShvcHRpb25zKQogICAgQHBhcmFtcyB7T2JqZWN0fSBvcHRpb25zCiAgICBAZXhhbXBsZQogICAgdmFyICRmb3JtID0gJCgnJmx0O2RpdiZndDsnKS5lZGl0YWJsZWZvcm0oewogICAgICAgIHR5cGU6ICd0ZXh0JywKICAgICAgICBuYW1lOiAndXNlcm5hbWUnLAogICAgICAgIHVybDogJy9wb3N0JywKICAgICAgICB2YWx1ZTogJ3ZpdGFsaXknCiAgICB9KTsKCiAgICAvL3RvIGRpc3BsYXkgZm9ybSB5b3Ugc2hvdWxkIGNhbGwgJ3JlbmRlcicgbWV0aG9kCiAgICAkZm9ybS5lZGl0YWJsZWZvcm0oJ3JlbmRlcicpOyAgICAgCiAgICAqLwogICAgJC5mbi5lZGl0YWJsZWZvcm0gPSBmdW5jdGlvbiAob3B0aW9uKSB7CiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7CiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyksIAogICAgICAgICAgICBkYXRhID0gJHRoaXMuZGF0YSgnZWRpdGFibGVmb3JtJyksIAogICAgICAgICAgICBvcHRpb25zID0gdHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcgJiYgb3B0aW9uOyAKICAgICAgICAgICAgaWYgKCFkYXRhKSB7CiAgICAgICAgICAgICAgICAkdGhpcy5kYXRhKCdlZGl0YWJsZWZvcm0nLCAoZGF0YSA9IG5ldyBFZGl0YWJsZUZvcm0odGhpcywgb3B0aW9ucykpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnKSB7IC8vY2FsbCBtZXRob2QgCiAgICAgICAgICAgICAgICBkYXRhW29wdGlvbl0uYXBwbHkoZGF0YSwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncywgMSkpOwogICAgICAgICAgICB9IAogICAgICAgIH0pOwogICAgfTsKCiAgICAvL2tlZXAgbGluayB0byBjb25zdHJ1Y3RvciB0byBhbGxvdyBpbmhlcml0YW5jZQogICAgJC5mbi5lZGl0YWJsZWZvcm0uQ29uc3RydWN0b3IgPSBFZGl0YWJsZUZvcm07ICAgIAoKICAgIC8vZGVmYXVsdHMKICAgICQuZm4uZWRpdGFibGVmb3JtLmRlZmF1bHRzID0gewogICAgICAgIC8qIHNlZSBhbHNvIGRlZmF1bHRzIGZvciBpbnB1dCAqLwoKICAgICAgICAvKioKICAgICAgICBUeXBlIG9mIGlucHV0LiBDYW4gYmUgPGNvZGU+dGV4dHx0ZXh0YXJlYXxzZWxlY3R8ZGF0ZXxjaGVja2xpc3Q8L2NvZGU+CgogICAgICAgIEBwcm9wZXJ0eSB0eXBlIAogICAgICAgIEB0eXBlIHN0cmluZwogICAgICAgIEBkZWZhdWx0ICd0ZXh0JwogICAgICAgICoqLwogICAgICAgIHR5cGU6ICd0ZXh0JywKICAgICAgICAvKioKICAgICAgICBVcmwgZm9yIHN1Ym1pdCwgZS5nLiA8Y29kZT4nL3Bvc3QnPC9jb2RlPiAgCiAgICAgICAgSWYgZnVuY3Rpb24gLSBpdCB3aWxsIGJlIGNhbGxlZCBpbnN0ZWFkIG9mIGFqYXguIEZ1bmN0aW9uIHNob3VsZCByZXR1cm4gZGVmZXJyZWQgb2JqZWN0IHRvIHJ1biBmYWlsL2RvbmUgY2FsbGJhY2tzLgoKICAgICAgICBAcHJvcGVydHkgdXJsIAogICAgICAgIEB0eXBlIHN0cmluZ3xmdW5jdGlvbgogICAgICAgIEBkZWZhdWx0IG51bGwKICAgICAgICBAZXhhbXBsZQogICAgICAgIHVybDogZnVuY3Rpb24ocGFyYW1zKSB7CiAgICAgICAgICAgIHZhciBkID0gbmV3ICQuRGVmZXJyZWQ7CiAgICAgICAgICAgIGlmKHBhcmFtcy52YWx1ZSA9PT0gJ2FiYycpIHsKICAgICAgICAgICAgICAgIHJldHVybiBkLnJlamVjdCgnZXJyb3IgbWVzc2FnZScpOyAvL3JldHVybmluZyBlcnJvciB2aWEgZGVmZXJyZWQgb2JqZWN0CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvL2FzeW5jIHNhdmluZyBkYXRhIGluIGpzIG1vZGVsCiAgICAgICAgICAgICAgICBzb21lTW9kZWwuYXN5bmNTYXZlTWV0aG9kKHsKICAgICAgICAgICAgICAgICAgIC4uLiwgCiAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgZC5yZXNvbHZlKCk7CiAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsgCiAgICAgICAgICAgICAgICByZXR1cm4gZC5wcm9taXNlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IAogICAgICAgICoqLyAgICAgICAgCiAgICAgICAgdXJsOm51bGwsCiAgICAgICAgLyoqCiAgICAgICAgQWRkaXRpb25hbCBwYXJhbXMgZm9yIHN1Ym1pdC4gSWYgZGVmaW5lZCBhcyA8Y29kZT5vYmplY3Q8L2NvZGU+IC0gaXQgaXMgKiphcHBlbmRlZCoqIHRvIG9yaWdpbmFsIGFqYXggZGF0YSAocGssIG5hbWUgYW5kIHZhbHVlKS4gIAogICAgICAgIElmIGRlZmluZWQgYXMgPGNvZGU+ZnVuY3Rpb248L2NvZGU+IC0gcmV0dXJuZWQgb2JqZWN0ICoqb3ZlcndyaXRlcyoqIG9yaWdpbmFsIGFqYXggZGF0YS4KICAgICAgICBAZXhhbXBsZQogICAgICAgIHBhcmFtczogZnVuY3Rpb24ocGFyYW1zKSB7CiAgICAgICAgICAgIC8vb3JpZ2luYWxseSBwYXJhbXMgY29udGFpbiBwaywgbmFtZSBhbmQgdmFsdWUKICAgICAgICAgICAgcGFyYW1zLmEgPSAxOwogICAgICAgICAgICByZXR1cm4gcGFyYW1zOwogICAgICAgIH0KCiAgICAgICAgQHByb3BlcnR5IHBhcmFtcyAKICAgICAgICBAdHlwZSBvYmplY3R8ZnVuY3Rpb24KICAgICAgICBAZGVmYXVsdCBudWxsCiAgICAgICAgKiovICAgICAgICAgIAogICAgICAgIHBhcmFtczpudWxsLAogICAgICAgIC8qKgogICAgICAgIE5hbWUgb2YgZmllbGQuIFdpbGwgYmUgc3VibWl0dGVkIG9uIHNlcnZlci4gQ2FuIGJlIHRha2VuIGZyb20gPGNvZGU+aWQ8L2NvZGU+IGF0dHJpYnV0ZQoKICAgICAgICBAcHJvcGVydHkgbmFtZSAKICAgICAgICBAdHlwZSBzdHJpbmcKICAgICAgICBAZGVmYXVsdCBudWxsCiAgICAgICAgKiovICAgICAgICAgCiAgICAgICAgbmFtZTogbnVsbCwKICAgICAgICAvKioKICAgICAgICBQcmltYXJ5IGtleSBvZiBlZGl0YWJsZSBvYmplY3QgKGUuZy4gcmVjb3JkIGlkIGluIGRhdGFiYXNlKS4gRm9yIGNvbXBvc2l0ZSBrZXlzIHVzZSBvYmplY3QsIGUuZy4gPGNvZGU+e2lkOiAxLCBsYW5nOiAnZW4nfTwvY29kZT4uCiAgICAgICAgQ2FuIGJlIGNhbGN1bGF0ZWQgZHluYW1pY2FsbHkgdmlhIGZ1bmN0aW9uLgoKICAgICAgICBAcHJvcGVydHkgcGsgCiAgICAgICAgQHR5cGUgc3RyaW5nfG9iamVjdHxmdW5jdGlvbgogICAgICAgIEBkZWZhdWx0IG51bGwKICAgICAgICAqKi8gICAgICAgICAKICAgICAgICBwazogbnVsbCwKICAgICAgICAvKioKICAgICAgICBJbml0aWFsIHZhbHVlLiBJZiBub3QgZGVmaW5lZCAtIHdpbGwgYmUgdGFrZW4gZnJvbSBlbGVtZW50J3MgY29udGVudC4KICAgICAgICBGb3IgX19zZWxlY3RfXyB0eXBlIHNob3VsZCBiZSBkZWZpbmVkIChhcyBpdCBpcyBJRCBvZiBzaG93biB0ZXh0KS4KCiAgICAgICAgQHByb3BlcnR5IHZhbHVlIAogICAgICAgIEB0eXBlIHN0cmluZ3xvYmplY3QKICAgICAgICBAZGVmYXVsdCBudWxsCiAgICAgICAgKiovICAgICAgICAKICAgICAgICB2YWx1ZTogbnVsbCwKICAgICAgICAvKioKICAgICAgICBWYWx1ZSB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGluIGlucHV0IGlmIG9yaWdpbmFsIGZpZWxkIHZhbHVlIGlzIGVtcHR5IChgbnVsbHx1bmRlZmluZWR8JydgKS4KCiAgICAgICAgQHByb3BlcnR5IGRlZmF1bHRWYWx1ZSAKICAgICAgICBAdHlwZSBzdHJpbmd8b2JqZWN0CiAgICAgICAgQGRlZmF1bHQgbnVsbAogICAgICAgIEBzaW5jZSAxLjQuNgogICAgICAgICoqLyAgICAgICAgCiAgICAgICAgZGVmYXVsdFZhbHVlOiBudWxsLAogICAgICAgIC8qKgogICAgICAgIFN0cmF0ZWd5IGZvciBzZW5kaW5nIGRhdGEgb24gc2VydmVyLiBDYW4gYmUgYGF1dG98YWx3YXlzfG5ldmVyYC4KICAgICAgICBXaGVuICdhdXRvJyBkYXRhIHdpbGwgYmUgc2VudCBvbiBzZXJ2ZXIgKipvbmx5IGlmIHBrIGFuZCB1cmwgZGVmaW5lZCoqLCBvdGhlcndpc2UgbmV3IHZhbHVlIHdpbGwgYmUgc3RvcmVkIGxvY2FsbHkuCgogICAgICAgIEBwcm9wZXJ0eSBzZW5kIAogICAgICAgIEB0eXBlIHN0cmluZwogICAgICAgIEBkZWZhdWx0ICdhdXRvJwogICAgICAgICoqLyAgICAgICAgICAKICAgICAgICBzZW5kOiAnYXV0bycsIAogICAgICAgIC8qKgogICAgICAgIEZ1bmN0aW9uIGZvciBjbGllbnQtc2lkZSB2YWxpZGF0aW9uLiBJZiByZXR1cm5zIHN0cmluZyAtIG1lYW5zIHZhbGlkYXRpb24gbm90IHBhc3NlZCBhbmQgc3RyaW5nIHNob3dlZCBhcyBlcnJvci4KICAgICAgICBTaW5jZSAxLjUuMSB5b3UgY2FuIG1vZGlmeSBzdWJtaXR0ZWQgdmFsdWUgYnkgcmV0dXJuaW5nIG9iamVjdCBmcm9tIGB2YWxpZGF0ZWA6IAogICAgICAgIGB7bmV3VmFsdWU6ICcuLi4nfWAgb3IgYHtuZXdWYWx1ZTogJy4uLicsIG1zZzogJy4uLid9YAoKICAgICAgICBAcHJvcGVydHkgdmFsaWRhdGUgCiAgICAgICAgQHR5cGUgZnVuY3Rpb24KICAgICAgICBAZGVmYXVsdCBudWxsCiAgICAgICAgQGV4YW1wbGUKICAgICAgICB2YWxpZGF0ZTogZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgaWYoJC50cmltKHZhbHVlKSA9PSAnJykgewogICAgICAgICAgICAgICAgcmV0dXJuICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAqKi8gICAgICAgICAKICAgICAgICB2YWxpZGF0ZTogbnVsbCwKICAgICAgICAvKioKICAgICAgICBTdWNjZXNzIGNhbGxiYWNrLiBDYWxsZWQgd2hlbiB2YWx1ZSBzdWNjZXNzZnVsbHkgc2VudCBvbiBzZXJ2ZXIgYW5kICoqcmVzcG9uc2Ugc3RhdHVzID0gMjAwKiouICAKICAgICAgICBVc2VmdWxsIHRvIHdvcmsgd2l0aCBqc29uIHJlc3BvbnNlLiBGb3IgZXhhbXBsZSwgaWYgeW91ciBiYWNrZW5kIHJlc3BvbnNlIGNhbiBiZSA8Y29kZT57c3VjY2VzczogdHJ1ZX08L2NvZGU+CiAgICAgICAgb3IgPGNvZGU+e3N1Y2Nlc3M6IGZhbHNlLCBtc2c6ICJzZXJ2ZXIgZXJyb3IifTwvY29kZT4geW91IGNhbiBjaGVjayBpdCBpbnNpZGUgdGhpcyBjYWxsYmFjay4gIAogICAgICAgIElmIGl0IHJldHVybnMgKipzdHJpbmcqKiAtIG1lYW5zIGVycm9yIG9jY3VyZWQgYW5kIHN0cmluZyBpcyBzaG93biBhcyBlcnJvciBtZXNzYWdlLiAgCiAgICAgICAgSWYgaXQgcmV0dXJucyAqKm9iamVjdCBsaWtlKiogPGNvZGU+e25ld1ZhbHVlOiAmbHQ7c29tZXRoaW5nJmd0O308L2NvZGU+IC0gaXQgb3ZlcndyaXRlcyB2YWx1ZSwgc3VibWl0dGVkIGJ5IHVzZXIuICAKICAgICAgICBPdGhlcndpc2UgbmV3VmFsdWUgc2ltcGx5IHJlbmRlcmVkIGludG8gZWxlbWVudC4KICAgICAgICAKICAgICAgICBAcHJvcGVydHkgc3VjY2VzcyAKICAgICAgICBAdHlwZSBmdW5jdGlvbgogICAgICAgIEBkZWZhdWx0IG51bGwKICAgICAgICBAZXhhbXBsZQogICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlLCBuZXdWYWx1ZSkgewogICAgICAgICAgICBpZighcmVzcG9uc2Uuc3VjY2VzcykgcmV0dXJuIHJlc3BvbnNlLm1zZzsKICAgICAgICB9CiAgICAgICAgKiovICAgICAgICAgIAogICAgICAgIHN1Y2Nlc3M6IG51bGwsCiAgICAgICAgLyoqCiAgICAgICAgRXJyb3IgY2FsbGJhY2suIENhbGxlZCB3aGVuIHJlcXVlc3QgZmFpbGVkIChyZXNwb25zZSBzdGF0dXMgIT0gMjAwKS4gIAogICAgICAgIFVzZWZ1bGwgd2hlbiB5b3Ugd2FudCB0byBwYXJzZSBlcnJvciByZXNwb25zZSBhbmQgZGlzcGxheSBhIGN1c3RvbSBtZXNzYWdlLgogICAgICAgIE11c3QgcmV0dXJuICoqc3RyaW5nKiogLSB0aGUgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGVycm9yIGJsb2NrLgogICAgICAgICAgICAgICAgCiAgICAgICAgQHByb3BlcnR5IGVycm9yIAogICAgICAgIEB0eXBlIGZ1bmN0aW9uCiAgICAgICAgQGRlZmF1bHQgbnVsbAogICAgICAgIEBzaW5jZSAxLjQuNAogICAgICAgIEBleGFtcGxlCiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKHJlc3BvbnNlLCBuZXdWYWx1ZSkgewogICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXMgPT09IDUwMCkgewogICAgICAgICAgICAgICAgcmV0dXJuICdTZXJ2aWNlIHVuYXZhaWxhYmxlLiBQbGVhc2UgdHJ5IGxhdGVyLic7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVzcG9uc2VUZXh0OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICoqLyAgICAgICAgICAKICAgICAgICBlcnJvcjogbnVsbCwKICAgICAgICAvKioKICAgICAgICBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHN1Ym1pdCBhamF4IHJlcXVlc3QuCiAgICAgICAgTGlzdCBvZiB2YWx1ZXM6IGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9qUXVlcnkuYWpheAogICAgICAgIAogICAgICAgIEBwcm9wZXJ0eSBhamF4T3B0aW9ucyAKICAgICAgICBAdHlwZSBvYmplY3QKICAgICAgICBAZGVmYXVsdCBudWxsCiAgICAgICAgQHNpbmNlIDEuMS4xICAgICAgICAKICAgICAgICBAZXhhbXBsZSAKICAgICAgICBhamF4T3B0aW9uczogewogICAgICAgICAgICB0eXBlOiAncHV0JywKICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJwogICAgICAgIH0gICAgICAgIAogICAgICAgICoqLyAgICAgICAgCiAgICAgICAgYWpheE9wdGlvbnM6IG51bGwsCiAgICAgICAgLyoqCiAgICAgICAgV2hlcmUgdG8gc2hvdyBidXR0b25zOiBsZWZ0KHRydWUpfGJvdHRvbXxmYWxzZSAgCiAgICAgICAgRm9ybSB3aXRob3V0IGJ1dHRvbnMgaXMgYXV0by1zdWJtaXR0ZWQuCgogICAgICAgIEBwcm9wZXJ0eSBzaG93YnV0dG9ucyAKICAgICAgICBAdHlwZSBib29sZWFufHN0cmluZwogICAgICAgIEBkZWZhdWx0IHRydWUKICAgICAgICBAc2luY2UgMS4xLjEKICAgICAgICAqKi8gICAgICAgICAKICAgICAgICBzaG93YnV0dG9uczogdHJ1ZSwKICAgICAgICAvKioKICAgICAgICBTY29wZSBmb3IgY2FsbGJhY2sgbWV0aG9kcyAoc3VjY2VzcywgdmFsaWRhdGUpLiAgCiAgICAgICAgSWYgPGNvZGU+bnVsbDwvY29kZT4gbWVhbnMgZWRpdGFibGVmb3JtIGluc3RhbmNlIGl0c2VsZi4gCgogICAgICAgIEBwcm9wZXJ0eSBzY29wZSAKICAgICAgICBAdHlwZSBET01FbGVtZW50fG9iamVjdAogICAgICAgIEBkZWZhdWx0IG51bGwKICAgICAgICBAc2luY2UgMS4yLjAKICAgICAgICBAcHJpdmF0ZQogICAgICAgICoqLyAgICAgICAgICAgIAogICAgICAgIHNjb3BlOiBudWxsLAogICAgICAgIC8qKgogICAgICAgIFdoZXRoZXIgdG8gc2F2ZSBvciBjYW5jZWwgdmFsdWUgd2hlbiBpdCB3YXMgbm90IGNoYW5nZWQgYnV0IGZvcm0gd2FzIHN1Ym1pdHRlZAoKICAgICAgICBAcHJvcGVydHkgc2F2ZW5vY2hhbmdlIAogICAgICAgIEB0eXBlIGJvb2xlYW4KICAgICAgICBAZGVmYXVsdCBmYWxzZQogICAgICAgIEBzaW5jZSAxLjIuMAogICAgICAgICoqLwogICAgICAgIHNhdmVub2NoYW5nZTogZmFsc2UKICAgIH07ICAgCgogICAgLyoKICAgIE5vdGU6IGZvbGxvd2luZyBwYXJhbXMgY291bGQgcmVkZWZpbmVkIGluIGVuZ2luZTogYm9vdHN0cmFwIG9yIGpxdWVyeXVpOgogICAgQ2xhc3NlcyAnY29udHJvbC1ncm91cCcgYW5kICdlZGl0YWJsZS1lcnJvci1ibG9jaycgbXVzdCBhbHdheXMgcHJlc2VudCEKICAgICovICAgICAgCiAgICAkLmZuLmVkaXRhYmxlZm9ybS50ZW1wbGF0ZSA9ICc8Zm9ybSBjbGFzcz0iZm9ybS1pbmxpbmUgZWRpdGFibGVmb3JtIj4nKwogICAgJzxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiPicgKyAKICAgICc8ZGl2PjxkaXYgY2xhc3M9ImVkaXRhYmxlLWlucHV0Ij48L2Rpdj48ZGl2IGNsYXNzPSJlZGl0YWJsZS1idXR0b25zIj48L2Rpdj48L2Rpdj4nKwogICAgJzxkaXYgY2xhc3M9ImVkaXRhYmxlLWVycm9yLWJsb2NrIj48L2Rpdj4nICsgCiAgICAnPC9kaXY+JyArIAogICAgJzwvZm9ybT4nOwoKICAgIC8vbG9hZGluZyBkaXYKICAgICQuZm4uZWRpdGFibGVmb3JtLmxvYWRpbmcgPSAnPGRpdiBjbGFzcz0iZWRpdGFibGVmb3JtLWxvYWRpbmciPjwvZGl2Pic7CgogICAgLy9idXR0b25zCiAgICAkLmZuLmVkaXRhYmxlZm9ybS5idXR0b25zID0gJzxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iZWRpdGFibGUtc3VibWl0Ij5vazwvYnV0dG9uPicrCiAgICAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJlZGl0YWJsZS1jYW5jZWwiPmNhbmNlbDwvYnV0dG9uPic7ICAgICAgCgogICAgLy9lcnJvciBjbGFzcyBhdHRhY2hlZCB0byBjb250cm9sLWdyb3VwCiAgICAkLmZuLmVkaXRhYmxlZm9ybS5lcnJvckdyb3VwQ2xhc3MgPSBudWxsOyAgCgogICAgLy9lcnJvciBjbGFzcyBhdHRhY2hlZCB0byBlZGl0YWJsZS1lcnJvci1ibG9jawogICAgJC5mbi5lZGl0YWJsZWZvcm0uZXJyb3JCbG9ja0NsYXNzID0gJ2VkaXRhYmxlLWVycm9yJzsKICAgIAogICAgLy9lbmdpbmUKICAgICQuZm4uZWRpdGFibGVmb3JtLmVuZ2luZSA9ICdqcXVlcnknOwp9KHdpbmRvdy5qUXVlcnkpKTsKCi8qKgoqIEVkaXRhYmxlRm9ybSB1dGlsaXRlcwoqLwooZnVuY3Rpb24gKCQpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIAogICAgLy91dGlscwogICAgJC5mbi5lZGl0YWJsZXV0aWxzID0gewogICAgICAgIC8qKgogICAgICAgICogY2xhc3NpYyBKUyBpbmhlcml0YW5jZSBmdW5jdGlvbgogICAgICAgICovICAKICAgICAgICBpbmhlcml0OiBmdW5jdGlvbiAoQ2hpbGQsIFBhcmVudCkgewogICAgICAgICAgICB2YXIgRiA9IGZ1bmN0aW9uKCkgeyB9OwogICAgICAgICAgICBGLnByb3RvdHlwZSA9IFBhcmVudC5wcm90b3R5cGU7CiAgICAgICAgICAgIENoaWxkLnByb3RvdHlwZSA9IG5ldyBGKCk7CiAgICAgICAgICAgIENoaWxkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENoaWxkOwogICAgICAgICAgICBDaGlsZC5zdXBlcmNsYXNzID0gUGFyZW50LnByb3RvdHlwZTsKICAgICAgICB9LAoKICAgICAgICAvKioKICAgICAgICAqIHNldCBjYXJldCBwb3NpdGlvbiBpbiBpbnB1dAogICAgICAgICogc2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDk5MTI2L2pxdWVyeS1zZXQtY3Vyc29yLXBvc2l0aW9uLWluLXRleHQtYXJlYQogICAgICAgICovICAgICAgICAKICAgICAgICBzZXRDdXJzb3JQb3NpdGlvbjogZnVuY3Rpb24oZWxlbSwgcG9zKSB7CiAgICAgICAgICAgIGlmIChlbGVtLnNldFNlbGVjdGlvblJhbmdlKSB7CiAgICAgICAgICAgICAgICBlbGVtLnNldFNlbGVjdGlvblJhbmdlKHBvcywgcG9zKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtLmNyZWF0ZVRleHRSYW5nZSkgewogICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gZWxlbS5jcmVhdGVUZXh0UmFuZ2UoKTsKICAgICAgICAgICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpOwogICAgICAgICAgICAgICAgcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgcG9zKTsKICAgICAgICAgICAgICAgIHJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgcG9zKTsKICAgICAgICAgICAgICAgIHJhbmdlLnNlbGVjdCgpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgKiBmdW5jdGlvbiB0byBwYXJzZSBKU09OIGluICpzaW5nbGUqIHF1b3Rlcy4gKGpxdWVyeSBhdXRvbWF0aWNhbGx5IHBhcnNlIG9ubHkgZG91YmxlIHF1b3RlcykKICAgICAgICAqIFRoYXQgYWxsb3dzIHN1Y2ggY29kZSBhczogPGEgZGF0YS1zb3VyY2U9InsnYSc6ICdiJywgJ2MnOiAnZCd9Ij4KICAgICAgICAqIHNhZmUgPSB0cnVlIC0tPiBtZWFucyBubyBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24KICAgICAgICAqIGZvciBkZXRhaWxzIHNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc0MTAzNDgvaG93LXRvLXNldC1qc29uLWZvcm1hdC10by1odG1sNS1kYXRhLWF0dHJpYnV0ZXMtaW4tdGhlLWpxdWVyeQogICAgICAgICovCiAgICAgICAgdHJ5UGFyc2VKc29uOiBmdW5jdGlvbihzLCBzYWZlKSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgcyA9PT0gJ3N0cmluZycgJiYgcy5sZW5ndGggJiYgcy5tYXRjaCgvXltce1xbXS4qW1x9XF1dJC8pKSB7CiAgICAgICAgICAgICAgICBpZiAoc2FmZSkgewogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8qanNsaW50IGV2aWw6IHRydWUqLwogICAgICAgICAgICAgICAgICAgICAgICBzID0gKG5ldyBGdW5jdGlvbigncmV0dXJuICcgKyBzKSkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgLypqc2xpbnQgZXZpbDogZmFsc2UqLwogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gczsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8qanNsaW50IGV2aWw6IHRydWUqLwogICAgICAgICAgICAgICAgICAgIHMgPSAobmV3IEZ1bmN0aW9uKCdyZXR1cm4gJyArIHMpKSgpOwogICAgICAgICAgICAgICAgICAgIC8qanNsaW50IGV2aWw6IGZhbHNlKi8KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gczsKICAgICAgICB9LAoKICAgICAgICAvKioKICAgICAgICAqIHNsaWNlIG9iamVjdCBieSBzcGVjaWZpZWQga2V5cwogICAgICAgICovCiAgICAgICAgc2xpY2VPYmo6IGZ1bmN0aW9uKG9iaiwga2V5cywgY2FzZVNlbnNpdGl2ZSAvKiBkZWZhdWx0OiBmYWxzZSAqLykgewogICAgICAgICAgICB2YXIga2V5LCBrZXlMb3dlciwgbmV3T2JqID0ge307CgogICAgICAgICAgICBpZiAoISQuaXNBcnJheShrZXlzKSB8fCAha2V5cy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBuZXdPYmo7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAga2V5ID0ga2V5c1tpXTsKICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkgewogICAgICAgICAgICAgICAgICAgIG5ld09ialtrZXldID0gb2JqW2tleV07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYoY2FzZVNlbnNpdGl2ZSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vd2hlbiBnZXR0aW5nIGRhdGEtKiBhdHRyaWJ1dGVzIHZpYSAkLmRhdGEoKSBpdCdzIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UuCiAgICAgICAgICAgICAgICAvL2RldGFpbHM6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzYwMjU2NS91c2luZy1kYXRhLWF0dHJpYnV0ZXMtd2l0aC1qcXVlcnkKICAgICAgICAgICAgICAgIC8vd29ya2Fyb3VuZCBpcyBjb2RlIGJlbG93LgogICAgICAgICAgICAgICAga2V5TG93ZXIgPSBrZXkudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5TG93ZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgbmV3T2JqW2tleV0gPSBvYmpba2V5TG93ZXJdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gbmV3T2JqOwogICAgICAgIH0sCgogICAgICAgIC8qCiAgICAgICAgZXhjbHVkZSBjb21wbGV4IG9iamVjdHMgZnJvbSAkLmRhdGEoKSBiZWZvcmUgcGFzcyB0byBjb25maWcKICAgICAgICAqLwogICAgICAgIGdldENvbmZpZ0RhdGE6IGZ1bmN0aW9uKCRlbGVtZW50KSB7CiAgICAgICAgICAgIHZhciBkYXRhID0ge307CiAgICAgICAgICAgICQuZWFjaCgkZWxlbWVudC5kYXRhKCksIGZ1bmN0aW9uKGssIHYpIHsKICAgICAgICAgICAgICAgIGlmKHR5cGVvZiB2ICE9PSAnb2JqZWN0JyB8fCAodiAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgKHYuY29uc3RydWN0b3IgPT09IE9iamVjdCB8fCB2LmNvbnN0cnVjdG9yID09PSBBcnJheSkpKSB7CiAgICAgICAgICAgICAgICAgICAgZGF0YVtrXSA9IHY7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gZGF0YTsKICAgICAgICB9LAoKICAgICAgICAvKgogICAgICAgICByZXR1cm5zIGtleXMgb2Ygb2JqZWN0CiAgICAgICAgKi8KICAgICAgICBvYmplY3RLZXlzOiBmdW5jdGlvbihvKSB7CiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cykgewogICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG8pOyAgCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAobyAhPT0gT2JqZWN0KG8pKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmtleXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIGs9W10sIHA7CiAgICAgICAgICAgICAgICBmb3IgKHAgaW4gbykgewogICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobyxwKSkgewogICAgICAgICAgICAgICAgICAgICAgICBrLnB1c2gocCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGs7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKICAgICAgICAKICAgICAgIC8qKgogICAgICAgIG1ldGhvZCB0byBlc2NhcGUgaHRtbC4KICAgICAgICoqLwogICAgICAgZXNjYXBlOiBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICByZXR1cm4gJCgnPGRpdj4nKS50ZXh0KHN0cikuaHRtbCgpOwogICAgICAgfSwKICAgICAgIAogICAgICAgLyoKICAgICAgICByZXR1cm5zIGFycmF5IGl0ZW1zIGZyb20gc291cmNlRGF0YSBoYXZpbmcgdmFsdWUgcHJvcGVydHkgZXF1YWwgb3IgaW5BcnJheSBvZiAndmFsdWUnCiAgICAgICAqLwogICAgICAgaXRlbXNCeVZhbHVlOiBmdW5jdGlvbih2YWx1ZSwgc291cmNlRGF0YSwgdmFsdWVQcm9wKSB7CiAgICAgICAgICAgaWYoIXNvdXJjZURhdGEgfHwgdmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgICAgIH0KICAgICAgICAgICAKICAgICAgICAgICBpZiAodHlwZW9mKHZhbHVlUHJvcCkgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgdmFyIGlkS2V5ID0gdmFsdWVQcm9wIHx8ICd2YWx1ZSc7CiAgICAgICAgICAgICAgIHZhbHVlUHJvcCA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlW2lkS2V5XTsgfTsKICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICB2YXIgaXNWYWxBcnJheSA9ICQuaXNBcnJheSh2YWx1ZSksCiAgICAgICAgICAgcmVzdWx0ID0gW10sIAogICAgICAgICAgIHRoYXQgPSB0aGlzOwoKICAgICAgICAgICAkLmVhY2goc291cmNlRGF0YSwgZnVuY3Rpb24oaSwgbykgewogICAgICAgICAgICAgICBpZihvLmNoaWxkcmVuKSB7CiAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHRoYXQuaXRlbXNCeVZhbHVlKHZhbHVlLCBvLmNoaWxkcmVuLCB2YWx1ZVByb3ApKTsKICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgIC8qanNsaW50IGVxZXE6IHRydWUqLwogICAgICAgICAgICAgICAgICAgaWYoaXNWYWxBcnJheSkgewogICAgICAgICAgICAgICAgICAgICAgIGlmKCQuZ3JlcCh2YWx1ZSwgZnVuY3Rpb24odil7ICByZXR1cm4gdiA9PSAobyAmJiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgPyB2YWx1ZVByb3AobykgOiBvKTsgfSkubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG8pOyAKICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtVmFsdWUgPSAobyAmJiAodHlwZW9mIG8gPT09ICdvYmplY3QnKSkgPyB2YWx1ZVByb3AobykgOiBvOwogICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlID09IGl0ZW1WYWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChvKTsgCiAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgLypqc2xpbnQgZXFlcTogZmFsc2UqLwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgfSk7CiAgICAgICAgICAgCiAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgIH0sCiAgICAgICAKICAgICAgIC8qCiAgICAgICBSZXR1cm5zIGlucHV0IGJ5IG9wdGlvbnM6IHR5cGUsIG1vZGUuIAogICAgICAgKi8KICAgICAgIGNyZWF0ZUlucHV0OiBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgICAgdmFyIFR5cGVDb25zdHJ1Y3RvciwgdHlwZU9wdGlvbnMsIGlucHV0LAogICAgICAgICAgIHR5cGUgPSBvcHRpb25zLnR5cGU7CgogICAgICAgICAgIC8vYGRhdGVgIGlzIHNvbWUga2luZCBvZiB2aXJ0dWFsIHR5cGUgdGhhdCBpcyB0cmFuc2Zvcm1lZCB0byBvbmUgb2YgZXhhY3QgdHlwZXMKICAgICAgICAgICAvL2RlcGVuZGluZyBvbiBtb2RlIGFuZCBjb3JlIGxpYgogICAgICAgICAgIGlmKHR5cGUgPT09ICdkYXRlJykgewogICAgICAgICAgICAgICAvL2lubGluZQogICAgICAgICAgICAgICBpZihvcHRpb25zLm1vZGUgPT09ICdpbmxpbmUnKSB7CiAgICAgICAgICAgICAgICAgICBpZigkLmZuLmVkaXRhYmxldHlwZXMuZGF0ZWZpZWxkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICdkYXRlZmllbGQnOwogICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKCQuZm4uZWRpdGFibGV0eXBlcy5kYXRldWlmaWVsZCkgewogICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAnZGF0ZXVpZmllbGQnOwogICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAvL3BvcHVwCiAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICBpZigkLmZuLmVkaXRhYmxldHlwZXMuZGF0ZSkgewogICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAnZGF0ZSc7CiAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYoJC5mbi5lZGl0YWJsZXR5cGVzLmRhdGV1aSkgewogICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAnZGF0ZXVpJzsKICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgLy9pZiB0eXBlIHN0aWxsIGBkYXRlYCBhbmQgbm90IGV4aXN0IGluIHR5cGVzLCByZXBsYWNlIHdpdGggYGNvbWJvZGF0ZWAgdGhhdCBpcyBiYXNlIGlucHV0CiAgICAgICAgICAgICAgIGlmKHR5cGUgPT09ICdkYXRlJyAmJiAhJC5mbi5lZGl0YWJsZXR5cGVzLmRhdGUpIHsKICAgICAgICAgICAgICAgICAgIHR5cGUgPSAnY29tYm9kYXRlJzsKICAgICAgICAgICAgICAgfSAKICAgICAgICAgICB9CiAgICAgICAgICAgCiAgICAgICAgICAgLy9gZGF0ZXRpbWVgIHNob3VsZCBiZSBkYXRldGltZWZpZWxkIGluICdpbmxpbmUnIG1vZGUKICAgICAgICAgICBpZih0eXBlID09PSAnZGF0ZXRpbWUnICYmIG9wdGlvbnMubW9kZSA9PT0gJ2lubGluZScpIHsKICAgICAgICAgICAgIHR5cGUgPSAnZGF0ZXRpbWVmaWVsZCc7ICAKICAgICAgICAgICB9ICAgICAgICAgICAKCiAgICAgICAgICAgLy9jaGFuZ2Ugd3lzaWh0bWw1IHRvIHRleHRhcmVhIGZvciBqcXVlcnkgVUkgYW5kIHBsYWluIHZlcnNpb25zCiAgICAgICAgICAgaWYodHlwZSA9PT0gJ3d5c2lodG1sNScgJiYgISQuZm4uZWRpdGFibGV0eXBlc1t0eXBlXSkgewogICAgICAgICAgICAgICB0eXBlID0gJ3RleHRhcmVhJzsKICAgICAgICAgICB9CgogICAgICAgICAgIC8vY3JlYXRlIGlucHV0IG9mIHNwZWNpZmllZCB0eXBlLiBJbnB1dCB3aWxsIGJlIHVzZWQgZm9yIGNvbnZlcnRpbmcgdmFsdWUsIG5vdCBpbiBmb3JtCiAgICAgICAgICAgaWYodHlwZW9mICQuZm4uZWRpdGFibGV0eXBlc1t0eXBlXSA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgICAgICBUeXBlQ29uc3RydWN0b3IgPSAkLmZuLmVkaXRhYmxldHlwZXNbdHlwZV07CiAgICAgICAgICAgICAgIHR5cGVPcHRpb25zID0gdGhpcy5zbGljZU9iaihvcHRpb25zLCB0aGlzLm9iamVjdEtleXMoVHlwZUNvbnN0cnVjdG9yLmRlZmF1bHRzKSk7CiAgICAgICAgICAgICAgIGlucHV0ID0gbmV3IFR5cGVDb25zdHJ1Y3Rvcih0eXBlT3B0aW9ucyk7CiAgICAgICAgICAgICAgIHJldHVybiBpbnB1dDsKICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAkLmVycm9yKCdVbmtub3duIHR5cGU6ICcrIHR5cGUpOwogICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IAogICAgICAgICAgIH0gIAogICAgICAgfSwKICAgICAgIAogICAgICAgLy9zZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83MjY0ODk5L2RldGVjdC1jc3MtdHJhbnNpdGlvbnMtdXNpbmctamF2YXNjcmlwdC1hbmQtd2l0aG91dC1tb2Rlcm5penIKICAgICAgIHN1cHBvcnRzVHJhbnNpdGlvbnM6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICB2YXIgYiA9IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAogICAgICAgICAgICAgICBzID0gYi5zdHlsZSwKICAgICAgICAgICAgICAgcCA9ICd0cmFuc2l0aW9uJywKICAgICAgICAgICAgICAgdiA9IFsnTW96JywgJ1dlYmtpdCcsICdLaHRtbCcsICdPJywgJ21zJ107CiAgICAgICAgICAgICAgIAogICAgICAgICAgIGlmKHR5cGVvZiBzW3BdID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgCiAgICAgICAgICAgfQoKICAgICAgICAgICAvLyBUZXN0cyBmb3IgdmVuZG9yIHNwZWNpZmljIHByb3AKICAgICAgICAgICBwID0gcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHAuc3Vic3RyKDEpOwogICAgICAgICAgIGZvcih2YXIgaT0wOyBpPHYubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgaWYodHlwZW9mIHNbdltpXSArIHBdID09PSAnc3RyaW5nJykgeyAKICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAKICAgICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9ICAgICAgICAgICAgCiAgICAgICAKICAgIH07ICAgICAgCn0od2luZG93LmpRdWVyeSkpOwoKLyoqCkF0dGFjaGVzIHN0YW5kLWFsb25lIGNvbnRhaW5lciB3aXRoIGVkaXRhYmxlLWZvcm0gdG8gSFRNTCBlbGVtZW50LiBFbGVtZW50IGlzIHVzZWQgb25seSBmb3IgcG9zaXRpb25pbmcsIHZhbHVlIGlzIG5vdCBzdG9yZWQgYW55d2hlcmUuPGJyPgpUaGlzIG1ldGhvZCBhcHBsaWVkIGludGVybmFsbHkgaW4gPGNvZGU+JCgpLmVkaXRhYmxlKCk8L2NvZGU+LiBZb3Ugc2hvdWxkIHN1YnNjcmliZSBvbiBpdCdzIGV2ZW50cyAoc2F2ZSAvIGNhbmNlbCkgdG8gZ2V0IHByb2ZpdCBvZiBpdC48YnI+CkZpbmFsIHJlYWxpemF0aW9uIGNhbiBiZSBkaWZmZXJlbnQ6IGJvb3RzdHJhcC1wb3BvdmVyLCBqcXVlcnl1aS10b29sdGlwLCBwb3NoeXRpcCwgaW5saW5lLWRpdi4gSXQgZGVwZW5kcyBvbiB3aGljaCBqcyBmaWxlIHlvdSBpbmNsdWRlLjxicj4KQXBwbGllZCBhcyBqUXVlcnkgbWV0aG9kLgoKQGNsYXNzIGVkaXRhYmxlQ29udGFpbmVyCkB1c2VzIGVkaXRhYmxlZm9ybQoqKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgdmFyIFBvcHVwID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHsKICAgICAgICB0aGlzLmluaXQoZWxlbWVudCwgb3B0aW9ucyk7CiAgICB9OwogICAgCiAgICB2YXIgSW5saW5lID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHsKICAgICAgICB0aGlzLmluaXQoZWxlbWVudCwgb3B0aW9ucyk7CiAgICB9OyAgICAKCiAgICAvL21ldGhvZHMKICAgIFBvcHVwLnByb3RvdHlwZSA9IHsKICAgICAgICBjb250YWluZXJOYW1lOiBudWxsLCAvL21ldGhvZCB0byBjYWxsIGNvbnRhaW5lciBvbiBlbGVtZW50CiAgICAgICAgY29udGFpbmVyRGF0YU5hbWU6IG51bGwsIC8vb2JqZWN0IG5hbWUgaW4gZWxlbWVudCdzIC5kYXRhKCkKICAgICAgICBpbm5lckNzczogbnVsbCwgLy90YmQgaW4gY2hpbGQgY2xhc3MKICAgICAgICBjb250YWluZXJDbGFzczogJ2VkaXRhYmxlLWNvbnRhaW5lciBlZGl0YWJsZS1wb3B1cCcsIC8vY3NzIGNsYXNzIGFwcGxpZWQgdG8gY29udGFpbmVyIGVsZW1lbnQKICAgICAgICBkZWZhdWx0czoge30sIC8vY29udGFpbmVyIGl0c2VsZiBkZWZhdWx0cwogICAgICAgIAogICAgICAgIGluaXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpIHsKICAgICAgICAgICAgdGhpcy4kZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICAgICAgICAgIC8vc2luY2UgMS40LjEgY29udGFpbmVyIGRvIG5vdCB1c2UgZGF0YS0qIGRpcmVjdGx5IGFzIHRoZXkgYWxyZWFkeSBtZXJnZWQgaW50byBvcHRpb25zLgogICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgJC5mbi5lZGl0YWJsZUNvbnRhaW5lci5kZWZhdWx0cywgb3B0aW9ucyk7ICAgICAgICAgCiAgICAgICAgICAgIHRoaXMuc3BsaXRPcHRpb25zKCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvL3NldCBzY29wZSBvZiBmb3JtIGNhbGxiYWNrcyB0byBlbGVtZW50CiAgICAgICAgICAgIHRoaXMuZm9ybU9wdGlvbnMuc2NvcGUgPSB0aGlzLiRlbGVtZW50WzBdOyAKICAgICAgICAgICAgCiAgICAgICAgICAgIHRoaXMuaW5pdENvbnRhaW5lcigpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy9mbGFnIHRvIGhpZGUgY29udGFpbmVyLCB3aGVuIHNhdmluZyB2YWx1ZSB3aWxsIGZpbmlzaAogICAgICAgICAgICB0aGlzLmRlbGF5ZWRIaWRlID0gZmFsc2U7CgogICAgICAgICAgICAvL2JpbmQgJ2Rlc3Ryb3llZCcgbGlzdGVuZXIgdG8gZGVzdHJveSBjb250YWluZXIgd2hlbiBlbGVtZW50IGlzIHJlbW92ZWQgZnJvbSBkb20KICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5vbignZGVzdHJveWVkJywgJC5wcm94eShmdW5jdGlvbigpewogICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7CiAgICAgICAgICAgIH0sIHRoaXMpKTsgCiAgICAgICAgICAgIAogICAgICAgICAgICAvL2F0dGFjaCBkb2N1bWVudCBoYW5kbGVyIHRvIGNsb3NlIGNvbnRhaW5lcnMgb24gY2xpY2sgLyBlc2NhcGUKICAgICAgICAgICAgaWYoISQoZG9jdW1lbnQpLmRhdGEoJ2VkaXRhYmxlLWhhbmRsZXJzLWF0dGFjaGVkJykpIHsKICAgICAgICAgICAgICAgIC8vY2xvc2UgYWxsIG9uIGVzY2FwZQogICAgICAgICAgICAgICAgJChkb2N1bWVudCkub24oJ2tleXVwLmVkaXRhYmxlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZS53aGljaCA9PT0gMjcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmVkaXRhYmxlLW9wZW4nKS5lZGl0YWJsZUNvbnRhaW5lcignaGlkZScpOwogICAgICAgICAgICAgICAgICAgICAgICAvL3RvZG86IHJldHVybiBmb2N1cyBvbiBlbGVtZW50IAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vY2xvc2UgY29udGFpbmVycyB3aGVuIGNsaWNrIG91dHNpZGUgCiAgICAgICAgICAgICAgICAvLyhtb3VzZWRvd24gY291bGQgYmUgYmV0dGVyIHRoYW4gY2xpY2ssIGl0IGNsb3NlcyBldmVyeXRoaW5nIGFsc28gb24gZHJhZyBkcm9wKQogICAgICAgICAgICAgICAgJChkb2N1bWVudCkub24oJ2NsaWNrLmVkaXRhYmxlJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgICAgIHZhciAkdGFyZ2V0ID0gJChlLnRhcmdldCksIGksCiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVfY2xhc3NlcyA9IFsnLmVkaXRhYmxlLWNvbnRhaW5lcicsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy51aS1kYXRlcGlja2VyLWhlYWRlcicsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5kYXRlcGlja2VyJywgLy9pbiBpbmxpbmUgbW9kZSBkYXRlcGlja2VyIGlzIHJlbmRlcmVkIGludG8gYm9keQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5tb2RhbC1iYWNrZHJvcCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5ib290c3RyYXAtd3lzaWh0bWw1LWluc2VydC1pbWFnZS1tb2RhbCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5ib290c3RyYXAtd3lzaWh0bWw1LWluc2VydC1saW5rLW1vZGFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAvL2NoZWNrIGlmIGVsZW1lbnQgaXMgZGV0YWNoZWQuIEl0IG9jY3VycyB3aGVuIGNsaWNraW5nIGluIGJvb3RzdHJhcCBkYXRlcGlja2VyCiAgICAgICAgICAgICAgICAgICAgaWYgKCEkLmNvbnRhaW5zKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgZS50YXJnZXQpKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL2ZvciBzb21lIHJlYXNvbiBGRiAyMCBnZW5lcmF0ZXMgZXh0cmEgZXZlbnQgKGNsaWNrKSBpbiBzZWxlY3QyIHdpZGdldCB3aXRoIGUudGFyZ2V0ID0gZG9jdW1lbnQKICAgICAgICAgICAgICAgICAgICAvL3dlIG5lZWQgdG8gZmlsdGVyIGl0IHZpYSBjb25zdHJ1Y3Rpb24gYmVsb3cuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdml0YWxldHMveC1lZGl0YWJsZS9pc3N1ZXMvMTk5CiAgICAgICAgICAgICAgICAgICAgLy9Qb3NzaWJseSByZWxhdGVkIHRvIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTAxMTk3OTMvd2h5LWRvZXMtZmlyZWZveC1yZWFjdC1kaWZmZXJlbnRseS1mcm9tLXdlYmtpdC1hbmQtaWUtdG8tY2xpY2stZXZlbnQtb24tc2VsZWMKICAgICAgICAgICAgICAgICAgICBpZigkdGFyZ2V0LmlzKGRvY3VtZW50KSkgewogICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vaWYgY2xpY2sgaW5zaWRlIG9uZSBvZiBleGNsdWRlIGNsYXNzZXMgLS0+IG5vIG5vdGhpbmcKICAgICAgICAgICAgICAgICAgICBmb3IoaT0wOyBpPGV4Y2x1ZGVfY2xhc3Nlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHRhcmdldC5pcyhleGNsdWRlX2NsYXNzZXNbaV0pIHx8ICR0YXJnZXQucGFyZW50cyhleGNsdWRlX2NsYXNzZXNbaV0pLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAvL2Nsb3NlIGFsbCBvcGVuIGNvbnRhaW5lcnMgKGV4Y2VwdCBvbmUgLSB0YXJnZXQpCiAgICAgICAgICAgICAgICAgICAgUG9wdXAucHJvdG90eXBlLmNsb3NlT3RoZXJzKGUudGFyZ2V0KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5kYXRhKCdlZGl0YWJsZS1oYW5kbGVycy1hdHRhY2hlZCcsIHRydWUpOwogICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgfSwKCiAgICAgICAgLy9zcGxpdCBvcHRpb25zIG9uIGNvbnRhaW5lck9wdGlvbnMgYW5kIGZvcm1PcHRpb25zCiAgICAgICAgc3BsaXRPcHRpb25zOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdGhpcy5jb250YWluZXJPcHRpb25zID0ge307CiAgICAgICAgICAgIHRoaXMuZm9ybU9wdGlvbnMgPSB7fTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmKCEkLmZuW3RoaXMuY29udGFpbmVyTmFtZV0pIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLmNvbnRhaW5lck5hbWUgKyAnIG5vdCBmb3VuZC4gSGF2ZSB5b3UgaW5jbHVkZWQgY29ycmVzcG9uZGluZyBqcyBmaWxlPycpOyAgIAogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvL2tleXMgZGVmaW5lZCBpbiBjb250YWluZXIgZGVmYXVsdHMgZ28gdG8gY29udGFpbmVyLCBvdGhlcnMgZ28gdG8gZm9ybQogICAgICAgICAgICBmb3IodmFyIGsgaW4gdGhpcy5vcHRpb25zKSB7CiAgICAgICAgICAgICAgaWYoayBpbiB0aGlzLmRlZmF1bHRzKSB7CiAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXJPcHRpb25zW2tdID0gdGhpcy5vcHRpb25zW2tdOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgdGhpcy5mb3JtT3B0aW9uc1trXSA9IHRoaXMub3B0aW9uc1trXTsKICAgICAgICAgICAgICB9IAogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICAvKgogICAgICAgIFJldHVybnMganF1ZXJ5IG9iamVjdCBvZiBjb250YWluZXIKICAgICAgICBAbWV0aG9kIHRpcCgpCiAgICAgICAgKi8gICAgICAgICAKICAgICAgICB0aXA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXIoKSA/IHRoaXMuY29udGFpbmVyKCkuJHRpcCA6IG51bGw7CiAgICAgICAgfSwKCiAgICAgICAgLyogcmV0dXJucyBjb250YWluZXIgb2JqZWN0ICovCiAgICAgICAgY29udGFpbmVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGNvbnRhaW5lcjsKICAgICAgICAgICAgLy9maXJzdCwgdHJ5IGdldCBpdCBieSBgY29udGFpbmVyRGF0YU5hbWVgCiAgICAgICAgICAgIGlmKHRoaXMuY29udGFpbmVyRGF0YU5hbWUpIHsKICAgICAgICAgICAgICAgIGlmKGNvbnRhaW5lciA9IHRoaXMuJGVsZW1lbnQuZGF0YSh0aGlzLmNvbnRhaW5lckRhdGFOYW1lKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250YWluZXI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy9zZWNvbmQsIHRyeSBgY29udGFpbmVyTmFtZWAKICAgICAgICAgICAgY29udGFpbmVyID0gdGhpcy4kZWxlbWVudC5kYXRhKHRoaXMuY29udGFpbmVyTmFtZSk7CiAgICAgICAgICAgIHJldHVybiBjb250YWluZXI7CiAgICAgICAgfSwKCiAgICAgICAgLyogY2FsbCBuYXRpdmUgbWV0aG9kIG9mIHVuZGVybHlpbmcgY29udGFpbmVyLCBlLmcuIHRoaXMuJGVsZW1lbnQucG9wb3ZlcignbWV0aG9kJykgKi8gCiAgICAgICAgY2FsbDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnRbdGhpcy5jb250YWluZXJOYW1lXS5hcHBseSh0aGlzLiRlbGVtZW50LCBhcmd1bWVudHMpOyAKICAgICAgICB9LCAgICAgICAgCiAgICAgICAgCiAgICAgICAgaW5pdENvbnRhaW5lcjogZnVuY3Rpb24oKXsKICAgICAgICAgICAgdGhpcy5jYWxsKHRoaXMuY29udGFpbmVyT3B0aW9ucyk7CiAgICAgICAgfSwKCiAgICAgICAgcmVuZGVyRm9ybTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoaXMuJGZvcm0KICAgICAgICAgICAgLmVkaXRhYmxlZm9ybSh0aGlzLmZvcm1PcHRpb25zKQogICAgICAgICAgICAub24oewogICAgICAgICAgICAgICAgc2F2ZTogJC5wcm94eSh0aGlzLnNhdmUsIHRoaXMpLCAvL2NsaWNrIG9uIHN1Ym1pdCBidXR0b24gKHZhbHVlIGNoYW5nZWQpCiAgICAgICAgICAgICAgICBub2NoYW5nZTogJC5wcm94eShmdW5jdGlvbigpeyB0aGlzLmhpZGUoJ25vY2hhbmdlJyk7IH0sIHRoaXMpLCAvL2NsaWNrIG9uIHN1Ym1pdCBidXR0b24gKHZhbHVlIE5PVCBjaGFuZ2VkKSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGNhbmNlbDogJC5wcm94eShmdW5jdGlvbigpeyB0aGlzLmhpZGUoJ2NhbmNlbCcpOyB9LCB0aGlzKSwgLy9jbGljayBvbiBjYWxjZWwgYnV0dG9uCiAgICAgICAgICAgICAgICBzaG93OiAkLnByb3h5KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVsYXllZEhpZGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlKHRoaXMuZGVsYXllZEhpZGUucmVhc29uKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxheWVkSGlkZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24oKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LCB0aGlzKSwgLy9yZS1wb3NpdGlvbiBjb250YWluZXIgZXZlcnkgdGltZSBmb3JtIGlzIHNob3duIChvY2N1cnMgZWFjaCB0aW1lIGFmdGVyIGxvYWRpbmcgc3RhdGUpCiAgICAgICAgICAgICAgICByZW5kZXJpbmc6ICQucHJveHkodGhpcy5zZXRQb3NpdGlvbiwgdGhpcyksIC8vdGhpcyBhbGxvd3MgdG8gcGxhY2UgY29udGFpbmVyIGNvcnJlY3RseSB3aGVuIGxvYWRpbmcgc2hvd24KICAgICAgICAgICAgICAgIHJlc2l6ZTogJC5wcm94eSh0aGlzLnNldFBvc2l0aW9uLCB0aGlzKSwgLy90aGlzIGFsbG93cyB0byByZS1wb3NpdGlvbiBjb250YWluZXIgd2hlbiBmb3JtIHNpemUgaXMgY2hhbmdlZCAKICAgICAgICAgICAgICAgIHJlbmRlcmVkOiAkLnByb3h5KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgLyoqICAgICAgICAKICAgICAgICAgICAgICAgICAgICBGaXJlZCB3aGVuIGNvbnRhaW5lciBpcyBzaG93biBhbmQgZm9ybSBpcyByZW5kZXJlZCAoZm9yIHNlbGVjdCB3aWxsIHdhaXQgZm9yIGxvYWRpbmcgZHJvcGRvd24gb3B0aW9ucykuICAKICAgICAgICAgICAgICAgICAgICAqKk5vdGU6KiogQm9vdHN0cmFwIHBvcG92ZXIgaGFzIG93biBgc2hvd25gIGV2ZW50IHRoYXQgbm93IGNhbm5vdCBiZSBzZXBhcmF0ZWQgZnJvbSB4LWVkaXRhYmxlJ3Mgb25lLgogICAgICAgICAgICAgICAgICAgIFRoZSB3b3JrYXJvdW5kIGlzIHRvIGNoZWNrIGBhcmd1bWVudHMubGVuZ3RoYCB0aGF0IGlzIGFsd2F5cyBgMmAgZm9yIHgtZWRpdGFibGUuICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgQGV2ZW50IHNob3duIAogICAgICAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBldmVudCBldmVudCBvYmplY3QKICAgICAgICAgICAgICAgICAgICBAZXhhbXBsZQogICAgICAgICAgICAgICAgICAgICQoJyN1c2VybmFtZScpLm9uKCdzaG93bicsIGZ1bmN0aW9uKGUsIGVkaXRhYmxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlLmlucHV0LiRpbnB1dC52YWwoJ292ZXJ3cml0aW5nIHZhbHVlIG9mIGlucHV0Li4nKTsKICAgICAgICAgICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAqKi8gICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgVE9ETzogYWRkZWQgc2Vjb25kIHBhcmFtIG1haW5seSB0byBkaXN0aW5ndWlzaCBmcm9tIGJvb3RzdHJhcCdzIHNob3duIGV2ZW50LiBJdCdzIGEgaG90Zml4IHRoYXQgd2lsbCBiZSBzb2x2ZWQgaW4gZnV0dXJlIHZlcnNpb25zIHZpYSBuYW1lc3BhY2VkIGV2ZW50cy4gIAogICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VySGFuZGxlcignc2hvd24nLCAkKHRoaXMub3B0aW9ucy5zY29wZSkuZGF0YSgnZWRpdGFibGUnKSk7IAogICAgICAgICAgICAgICAgfSwgdGhpcykgCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIC5lZGl0YWJsZWZvcm0oJ3JlbmRlcicpOwogICAgICAgIH0sICAgICAgICAKCiAgICAgICAgLyoqCiAgICAgICAgU2hvd3MgY29udGFpbmVyIHdpdGggZm9ybQogICAgICAgIEBtZXRob2Qgc2hvdygpCiAgICAgICAgQHBhcmFtIHtib29sZWFufSBjbG9zZUFsbCBXaGV0aGVyIHRvIGNsb3NlIGFsbCBvdGhlciBlZGl0YWJsZSBjb250YWluZXJzIHdoZW4gc2hvd2luZyB0aGlzIG9uZS4gRGVmYXVsdCB0cnVlLgogICAgICAgICoqLwogICAgICAgIC8qIE5vdGU6IHBvc2h5dGlwIG93ZXJ3cml0ZXMgdGhpcyBtZXRob2QgdG90YWxseSEgKi8gICAgICAgICAgCiAgICAgICAgc2hvdzogZnVuY3Rpb24gKGNsb3NlQWxsKSB7CiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoJ2VkaXRhYmxlLW9wZW4nKTsKICAgICAgICAgICAgaWYoY2xvc2VBbGwgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAvL2Nsb3NlIGFsbCBvcGVuIGNvbnRhaW5lcnMgKGV4Y2VwdCB0aGlzKQogICAgICAgICAgICAgICAgdGhpcy5jbG9zZU90aGVycyh0aGlzLiRlbGVtZW50WzBdKTsgIAogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvL3Nob3cgY29udGFpbmVyIGl0c2VsZgogICAgICAgICAgICB0aGlzLmlubmVyU2hvdygpOwogICAgICAgICAgICB0aGlzLnRpcCgpLmFkZENsYXNzKHRoaXMuY29udGFpbmVyQ2xhc3MpOwoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgQ3VycmVudGx5LCBmb3JtIGlzIHJlLXJlbmRlcmVkIG9uIGV2ZXJ5IHNob3cuIAogICAgICAgICAgICBUaGUgbWFpbiByZWFzb24gaXMgdGhhdCB3ZSBkb250IGtub3csIHdoYXQgd2lsbCBjb250YWluZXIgZG8gd2l0aCBjb250ZW50IHdoZW4gY2xvc2VkOgogICAgICAgICAgICByZW1vdmUoKSwgZGV0YWNoKCkgb3IganVzdCBoaWRlKCkgLSBpdCBkZXBlbmRzIG9uIGNvbnRhaW5lci4KICAgICAgICAgICAgCiAgICAgICAgICAgIERldGFjaGluZyBmb3JtIGl0c2VsZiBiZWZvcmUgaGlkZSBhbmQgcmUtaW5zZXJ0IGJlZm9yZSBzaG93IGlzIGdvb2Qgc29sdXRpb24sIAogICAgICAgICAgICBidXQgdmlzdWFsbHkgaXQgbG9va3MgdWdseSAtLT4gY29udGFpbmVyIGNoYW5nZXMgc2l6ZSBiZWZvcmUgaGlkZS4gIAogICAgICAgICAgICAqLyAgICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vaWYgZm9ybSBhbHJlYWR5IGV4aXN0IC0gZGVsZXRlIHByZXZpb3VzIGRhdGEgCiAgICAgICAgICAgIGlmKHRoaXMuJGZvcm0pIHsKICAgICAgICAgICAgICAgIC8vdG9kbzogZGVzdHJveSBwcmV2IGRhdGEhCiAgICAgICAgICAgICAgICAvL3RoaXMuJGZvcm0uZGVzdHJveSgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0aGlzLiRmb3JtID0gJCgnPGRpdj4nKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vaW5zZXJ0IGZvcm0gaW50byBjb250YWluZXIgYm9keQogICAgICAgICAgICBpZih0aGlzLnRpcCgpLmlzKHRoaXMuaW5uZXJDc3MpKSB7CiAgICAgICAgICAgICAgICAvL2ZvciBpbmxpbmUgY29udGFpbmVyCiAgICAgICAgICAgICAgICB0aGlzLnRpcCgpLmFwcGVuZCh0aGlzLiRmb3JtKTsgCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLnRpcCgpLmZpbmQodGhpcy5pbm5lckNzcykuYXBwZW5kKHRoaXMuJGZvcm0pOwogICAgICAgICAgICB9IAogICAgICAgICAgICAKICAgICAgICAgICAgLy9yZW5kZXIgZm9ybQogICAgICAgICAgICB0aGlzLnJlbmRlckZvcm0oKTsKICAgICAgICB9LAoKICAgICAgICAvKioKICAgICAgICBIaWRlcyBjb250YWluZXIgd2l0aCBmb3JtCiAgICAgICAgQG1ldGhvZCBoaWRlKCkKICAgICAgICBAcGFyYW0ge3N0cmluZ30gcmVhc29uIFJlYXNvbiBjYXVzZWQgaGlkaW5nLiBDYW4gYmUgPGNvZGU+c2F2ZXxjYW5jZWx8b25ibHVyfG5vY2hhbmdlfHVuZGVmaW5lZCAoPW1hbnVhbCk8L2NvZGU+CiAgICAgICAgKiovICAgICAgICAgCiAgICAgICAgaGlkZTogZnVuY3Rpb24ocmVhc29uKSB7ICAKICAgICAgICAgICAgaWYoIXRoaXMudGlwKCkgfHwgIXRoaXMudGlwKCkuaXMoJzp2aXNpYmxlJykgfHwgIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2VkaXRhYmxlLW9wZW4nKSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvL2lmIGZvcm0gaXMgc2F2aW5nIHZhbHVlLCBzY2hlZHVsZSBoaWRlCiAgICAgICAgICAgIGlmKHRoaXMuJGZvcm0uZGF0YSgnZWRpdGFibGVmb3JtJykuaXNTYXZpbmcpIHsKICAgICAgICAgICAgICAgIHRoaXMuZGVsYXllZEhpZGUgPSB7cmVhc29uOiByZWFzb259OwogICAgICAgICAgICAgICAgcmV0dXJuOyAgICAKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuZGVsYXllZEhpZGUgPSBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygnZWRpdGFibGUtb3BlbicpOyAgIAogICAgICAgICAgICB0aGlzLmlubmVySGlkZSgpOwoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgIEZpcmVkIHdoZW4gY29udGFpbmVyIHdhcyBoaWRkZW4uIEl0IG9jY3VycyBvbiBib3RoIHNhdmUgb3IgY2FuY2VsLiAgCiAgICAgICAgICAgICoqTm90ZToqKiBCb290c3RyYXAgcG9wb3ZlciBoYXMgb3duIGBoaWRkZW5gIGV2ZW50IHRoYXQgbm93IGNhbm5vdCBiZSBzZXBhcmF0ZWQgZnJvbSB4LWVkaXRhYmxlJ3Mgb25lLgogICAgICAgICAgICBUaGUgd29ya2Fyb3VuZCBpcyB0byBjaGVjayBgYXJndW1lbnRzLmxlbmd0aGAgdGhhdCBpcyBhbHdheXMgYDJgIGZvciB4LWVkaXRhYmxlLiAKCiAgICAgICAgICAgIEBldmVudCBoaWRkZW4gCiAgICAgICAgICAgIEBwYXJhbSB7b2JqZWN0fSBldmVudCBldmVudCBvYmplY3QKICAgICAgICAgICAgQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiBSZWFzb24gY2F1c2VkIGhpZGluZy4gQ2FuIGJlIDxjb2RlPnNhdmV8Y2FuY2VsfG9uYmx1cnxub2NoYW5nZXxtYW51YWw8L2NvZGU+CiAgICAgICAgICAgIEBleGFtcGxlCiAgICAgICAgICAgICQoJyN1c2VybmFtZScpLm9uKCdoaWRkZW4nLCBmdW5jdGlvbihlLCByZWFzb24pIHsKICAgICAgICAgICAgICAgIGlmKHJlYXNvbiA9PT0gJ3NhdmUnIHx8IHJlYXNvbiA9PT0gJ2NhbmNlbCcpIHsKICAgICAgICAgICAgICAgICAgICAvL2F1dG8tb3BlbiBuZXh0IGVkaXRhYmxlCiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCd0cicpLm5leHQoKS5maW5kKCcuZWRpdGFibGUnKS5lZGl0YWJsZSgnc2hvdycpOwogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICoqLwogICAgICAgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXJIYW5kbGVyKCdoaWRkZW4nLCByZWFzb24gfHwgJ21hbnVhbCcpOyAgIAogICAgICAgIH0sCgogICAgICAgIC8qIGludGVybmFsIHNob3cgbWV0aG9kLiBUbyBiZSBvdmVyd3JpdHRlbiBpbiBjaGlsZCBjbGFzc2VzICovCiAgICAgICAgaW5uZXJTaG93OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAKICAgICAgICB9LCAgICAgICAgCgogICAgICAgIC8qIGludGVybmFsIGhpZGUgbWV0aG9kLiBUbyBiZSBvdmVyd3JpdHRlbiBpbiBjaGlsZCBjbGFzc2VzICovCiAgICAgICAgaW5uZXJIaWRlOiBmdW5jdGlvbiAoKSB7CgogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgLyoqCiAgICAgICAgVG9nZ2xlcyBjb250YWluZXIgdmlzaWJpbGl0eSAoc2hvdyAvIGhpZGUpCiAgICAgICAgQG1ldGhvZCB0b2dnbGUoKQogICAgICAgIEBwYXJhbSB7Ym9vbGVhbn0gY2xvc2VBbGwgV2hldGhlciB0byBjbG9zZSBhbGwgb3RoZXIgZWRpdGFibGUgY29udGFpbmVycyB3aGVuIHNob3dpbmcgdGhpcyBvbmUuIERlZmF1bHQgdHJ1ZS4KICAgICAgICAqKi8gICAgICAgICAgCiAgICAgICAgdG9nZ2xlOiBmdW5jdGlvbihjbG9zZUFsbCkgewogICAgICAgICAgICBpZih0aGlzLmNvbnRhaW5lcigpICYmIHRoaXMudGlwKCkgJiYgdGhpcy50aXAoKS5pcygnOnZpc2libGUnKSkgewogICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLnNob3coY2xvc2VBbGwpOwogICAgICAgICAgICB9IAogICAgICAgIH0sCgogICAgICAgIC8qCiAgICAgICAgVXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgY29udGFpbmVyIHdoZW4gY29udGVudCBjaGFuZ2VkLgogICAgICAgIEBtZXRob2Qgc2V0UG9zaXRpb24oKQogICAgICAgICovICAgICAgIAogICAgICAgIHNldFBvc2l0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgLy90YmQgaW4gY2hpbGQgY2xhc3MKICAgICAgICB9LAoKICAgICAgICBzYXZlOiBmdW5jdGlvbihlLCBwYXJhbXMpIHsKICAgICAgICAgICAgLyoqICAgICAgICAKICAgICAgICAgICAgRmlyZWQgd2hlbiBuZXcgdmFsdWUgd2FzIHN1Ym1pdHRlZC4gWW91IGNhbiB1c2UgPGNvZGU+JCh0aGlzKS5kYXRhKCdlZGl0YWJsZUNvbnRhaW5lcicpPC9jb2RlPiBpbnNpZGUgaGFuZGxlciB0byBhY2Nlc3MgdG8gZWRpdGFibGVDb250YWluZXIgaW5zdGFuY2UKICAgICAgICAgICAgCiAgICAgICAgICAgIEBldmVudCBzYXZlIAogICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gZXZlbnQgZXZlbnQgb2JqZWN0CiAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgYWRkaXRpb25hbCBwYXJhbXMKICAgICAgICAgICAgQHBhcmFtIHttaXhlZH0gcGFyYW1zLm5ld1ZhbHVlIHN1Ym1pdHRlZCB2YWx1ZQogICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gcGFyYW1zLnJlc3BvbnNlIGFqYXggcmVzcG9uc2UKICAgICAgICAgICAgQGV4YW1wbGUKICAgICAgICAgICAgJCgnI3VzZXJuYW1lJykub24oJ3NhdmUnLCBmdW5jdGlvbihlLCBwYXJhbXMpIHsKICAgICAgICAgICAgICAgIC8vYXNzdW1pbmcgc2VydmVyIHJlc3BvbnNlOiAne3N1Y2Nlc3M6IHRydWV9JwogICAgICAgICAgICAgICAgdmFyIHBrID0gJCh0aGlzKS5kYXRhKCdlZGl0YWJsZUNvbnRhaW5lcicpLm9wdGlvbnMucGs7CiAgICAgICAgICAgICAgICBpZihwYXJhbXMucmVzcG9uc2UgJiYgcGFyYW1zLnJlc3BvbnNlLnN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgICAgICBhbGVydCgndmFsdWU6ICcgKyBwYXJhbXMubmV3VmFsdWUgKyAnIHdpdGggcGs6ICcgKyBwayArICcgc2F2ZWQhJyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCdlcnJvciEnKTsgCiAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgKiovICAgICAgICAgICAgIAogICAgICAgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXJIYW5kbGVyKCdzYXZlJywgcGFyYW1zKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vaGlkZSBtdXN0IGJlIGFmdGVyIHRyaWdnZXIsIGFzIHNhdmluZyB2YWx1ZSBtYXkgcmVxdWlyZSBtZXRob2RzIG9mIHBsdWdpbiwgYXBwbGllZCB0byBpbnB1dAogICAgICAgICAgICB0aGlzLmhpZGUoJ3NhdmUnKTsKICAgICAgICB9LAoKICAgICAgICAvKioKICAgICAgICBTZXRzIG5ldyBvcHRpb24KICAgICAgICAKICAgICAgICBAbWV0aG9kIG9wdGlvbihrZXksIHZhbHVlKQogICAgICAgIEBwYXJhbSB7c3RyaW5nfSBrZXkgCiAgICAgICAgQHBhcmFtIHttaXhlZH0gdmFsdWUgCiAgICAgICAgKiovICAgICAgICAgCiAgICAgICAgb3B0aW9uOiBmdW5jdGlvbihrZXksIHZhbHVlKSB7CiAgICAgICAgICAgIHRoaXMub3B0aW9uc1trZXldID0gdmFsdWU7CiAgICAgICAgICAgIGlmKGtleSBpbiB0aGlzLmNvbnRhaW5lck9wdGlvbnMpIHsKICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyT3B0aW9uc1trZXldID0gdmFsdWU7CiAgICAgICAgICAgICAgICB0aGlzLnNldENvbnRhaW5lck9wdGlvbihrZXksIHZhbHVlKTsgCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLmZvcm1PcHRpb25zW2tleV0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgIGlmKHRoaXMuJGZvcm0pIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLiRmb3JtLmVkaXRhYmxlZm9ybSgnb3B0aW9uJywga2V5LCB2YWx1ZSk7ICAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgc2V0Q29udGFpbmVyT3B0aW9uOiBmdW5jdGlvbihrZXksIHZhbHVlKSB7CiAgICAgICAgICAgIHRoaXMuY2FsbCgnb3B0aW9uJywga2V5LCB2YWx1ZSk7CiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgRGVzdHJveXMgdGhlIGNvbnRhaW5lciBpbnN0YW5jZQogICAgICAgIEBtZXRob2QgZGVzdHJveSgpCiAgICAgICAgKiovICAgICAgICAKICAgICAgICBkZXN0cm95OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICAgIHRoaXMuaW5uZXJEZXN0cm95KCk7CiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQub2ZmKCdkZXN0cm95ZWQnKTsKICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5yZW1vdmVEYXRhKCdlZGl0YWJsZUNvbnRhaW5lcicpOwogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgLyogdG8gYmUgb3ZlcndyaXR0ZW4gaW4gY2hpbGQgY2xhc3NlcyAqLwogICAgICAgIGlubmVyRGVzdHJveTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIAogICAgICAgIH0sIAogICAgICAgIAogICAgICAgIC8qCiAgICAgICAgQ2xvc2VzIG90aGVyIGNvbnRhaW5lcnMgZXhjZXB0IG9uZSByZWxhdGVkIHRvIHBhc3NlZCBlbGVtZW50LiAKICAgICAgICBPdGhlciBjb250YWluZXJzIGNhbiBiZSBjYW5jZWxsZWQgb3Igc3VibWl0dGVkIChkZXBlbmRzIG9uIG9uYmx1ciBvcHRpb24pCiAgICAgICAgKi8KICAgICAgICBjbG9zZU90aGVyczogZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgICAgICAkKCcuZWRpdGFibGUtb3BlbicpLmVhY2goZnVuY3Rpb24oaSwgZWwpewogICAgICAgICAgICAgICAgLy9kbyBub3RoaW5nIHdpdGggcGFzc2VkIGVsZW1lbnQgYW5kIGl0J3MgY2hpbGRyZW4KICAgICAgICAgICAgICAgIGlmKGVsID09PSBlbGVtZW50IHx8ICQoZWwpLmZpbmQoZWxlbWVudCkubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vb3RoZXJ3aXNlIGNhbmNlbCBvciBzdWJtaXQgYWxsIG9wZW4gY29udGFpbmVycyAKICAgICAgICAgICAgICAgIHZhciAkZWwgPSAkKGVsKSwKICAgICAgICAgICAgICAgIGVjID0gJGVsLmRhdGEoJ2VkaXRhYmxlQ29udGFpbmVyJyk7CgogICAgICAgICAgICAgICAgaWYoIWVjKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmKGVjLm9wdGlvbnMub25ibHVyID09PSAnY2FuY2VsJykgewogICAgICAgICAgICAgICAgICAgICRlbC5kYXRhKCdlZGl0YWJsZUNvbnRhaW5lcicpLmhpZGUoJ29uYmx1cicpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmKGVjLm9wdGlvbnMub25ibHVyID09PSAnc3VibWl0JykgewogICAgICAgICAgICAgICAgICAgICRlbC5kYXRhKCdlZGl0YWJsZUNvbnRhaW5lcicpLnRpcCgpLmZpbmQoJ2Zvcm0nKS5zdWJtaXQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgLyoqCiAgICAgICAgQWN0aXZhdGVzIGlucHV0IG9mIHZpc2libGUgY29udGFpbmVyIChlLmcuIHNldCBmb2N1cykKICAgICAgICBAbWV0aG9kIGFjdGl2YXRlKCkKICAgICAgICAqKi8gICAgICAgICAKICAgICAgICBhY3RpdmF0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmKHRoaXMudGlwICYmIHRoaXMudGlwKCkuaXMoJzp2aXNpYmxlJykgJiYgdGhpcy4kZm9ybSkgewogICAgICAgICAgICAgICB0aGlzLiRmb3JtLmRhdGEoJ2VkaXRhYmxlZm9ybScpLmlucHV0LmFjdGl2YXRlKCk7IAogICAgICAgICAgICB9CiAgICAgICAgfSAKCiAgICB9OwoKICAgIC8qKgogICAgalF1ZXJ5IG1ldGhvZCB0byBpbml0aWFsaXplIGVkaXRhYmxlQ29udGFpbmVyLgogICAgCiAgICBAbWV0aG9kICQoKS5lZGl0YWJsZUNvbnRhaW5lcihvcHRpb25zKQogICAgQHBhcmFtcyB7T2JqZWN0fSBvcHRpb25zCiAgICBAZXhhbXBsZQogICAgJCgnI2VkaXQnKS5lZGl0YWJsZUNvbnRhaW5lcih7CiAgICAgICAgdHlwZTogJ3RleHQnLAogICAgICAgIHVybDogJy9wb3N0JywKICAgICAgICBwazogMSwKICAgICAgICB2YWx1ZTogJ2hlbGxvJwogICAgfSk7CiAgICAqKi8gIAogICAgJC5mbi5lZGl0YWJsZUNvbnRhaW5lciA9IGZ1bmN0aW9uIChvcHRpb24pIHsKICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50czsKICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKSwKICAgICAgICAgICAgZGF0YUtleSA9ICdlZGl0YWJsZUNvbnRhaW5lcicsIAogICAgICAgICAgICBkYXRhID0gJHRoaXMuZGF0YShkYXRhS2V5KSwKICAgICAgICAgICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnICYmIG9wdGlvbiwKICAgICAgICAgICAgQ29uc3RydWN0b3IgPSAob3B0aW9ucy5tb2RlID09PSAnaW5saW5lJykgPyBJbmxpbmUgOiBQb3B1cDsgICAgICAgICAgICAgCgogICAgICAgICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAgICAgICR0aGlzLmRhdGEoZGF0YUtleSwgKGRhdGEgPSBuZXcgQ29uc3RydWN0b3IodGhpcywgb3B0aW9ucykpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnKSB7IC8vY2FsbCBtZXRob2QgCiAgICAgICAgICAgICAgICBkYXRhW29wdGlvbl0uYXBwbHkoZGF0YSwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncywgMSkpOwogICAgICAgICAgICB9ICAgICAgICAgICAgCiAgICAgICAgfSk7CiAgICB9OyAgICAgCgogICAgLy9zdG9yZSBjb25zdHJ1Y3RvcnMKICAgICQuZm4uZWRpdGFibGVDb250YWluZXIuUG9wdXAgPSBQb3B1cDsKICAgICQuZm4uZWRpdGFibGVDb250YWluZXIuSW5saW5lID0gSW5saW5lOwoKICAgIC8vZGVmYXVsdHMKICAgICQuZm4uZWRpdGFibGVDb250YWluZXIuZGVmYXVsdHMgPSB7CiAgICAgICAgLyoqCiAgICAgICAgSW5pdGlhbCB2YWx1ZSBvZiBmb3JtIGlucHV0CgogICAgICAgIEBwcm9wZXJ0eSB2YWx1ZSAKICAgICAgICBAdHlwZSBtaXhlZAogICAgICAgIEBkZWZhdWx0IG51bGwKICAgICAgICBAcHJpdmF0ZQogICAgICAgICoqLyAgICAgICAgCiAgICAgICAgdmFsdWU6IG51bGwsCiAgICAgICAgLyoqCiAgICAgICAgUGxhY2VtZW50IG9mIGNvbnRhaW5lciByZWxhdGl2ZSB0byBlbGVtZW50LiBDYW4gYmUgPGNvZGU+dG9wfHJpZ2h0fGJvdHRvbXxsZWZ0PC9jb2RlPi4gTm90IHVzZWQgZm9yIGlubGluZSBjb250YWluZXIuCgogICAgICAgIEBwcm9wZXJ0eSBwbGFjZW1lbnQgCiAgICAgICAgQHR5cGUgc3RyaW5nCiAgICAgICAgQGRlZmF1bHQgJ3RvcCcKICAgICAgICAqKi8gICAgICAgIAogICAgICAgIHBsYWNlbWVudDogJ3RvcCcsCiAgICAgICAgLyoqCiAgICAgICAgV2hldGhlciB0byBoaWRlIGNvbnRhaW5lciBvbiBzYXZlL2NhbmNlbC4KCiAgICAgICAgQHByb3BlcnR5IGF1dG9oaWRlIAogICAgICAgIEB0eXBlIGJvb2xlYW4KICAgICAgICBAZGVmYXVsdCB0cnVlCiAgICAgICAgQHByaXZhdGUgCiAgICAgICAgKiovICAgICAgICAKICAgICAgICBhdXRvaGlkZTogdHJ1ZSwKICAgICAgICAvKioKICAgICAgICBBY3Rpb24gd2hlbiB1c2VyIGNsaWNrcyBvdXRzaWRlIHRoZSBjb250YWluZXIuIENhbiBiZSA8Y29kZT5jYW5jZWx8c3VibWl0fGlnbm9yZTwvY29kZT4uICAKICAgICAgICBTZXR0aW5nIDxjb2RlPmlnbm9yZTwvY29kZT4gYWxsb3dzIHRvIGhhdmUgc2V2ZXJhbCBjb250YWluZXJzIG9wZW4uIAoKICAgICAgICBAcHJvcGVydHkgb25ibHVyIAogICAgICAgIEB0eXBlIHN0cmluZwogICAgICAgIEBkZWZhdWx0ICdjYW5jZWwnCiAgICAgICAgQHNpbmNlIDEuMS4xCiAgICAgICAgKiovICAgICAgICAKICAgICAgICBvbmJsdXI6ICdjYW5jZWwnLAogICAgICAgIAogICAgICAgIC8qKgogICAgICAgIEFuaW1hdGlvbiBzcGVlZCAoaW5saW5lIG1vZGUgb25seSkKICAgICAgICBAcHJvcGVydHkgYW5pbSAKICAgICAgICBAdHlwZSBzdHJpbmcKICAgICAgICBAZGVmYXVsdCBmYWxzZQogICAgICAgICoqLyAgICAgICAgCiAgICAgICAgYW5pbTogZmFsc2UsCiAgICAgICAgCiAgICAgICAgLyoqCiAgICAgICAgTW9kZSBvZiBlZGl0YWJsZSwgY2FuIGJlIGBwb3B1cGAgb3IgYGlubGluZWAgCiAgICAgICAgCiAgICAgICAgQHByb3BlcnR5IG1vZGUgCiAgICAgICAgQHR5cGUgc3RyaW5nICAgICAgICAgCiAgICAgICAgQGRlZmF1bHQgJ3BvcHVwJwogICAgICAgIEBzaW5jZSAxLjQuMCAgICAgICAgCiAgICAgICAgKiovICAgICAgICAKICAgICAgICBtb2RlOiAncG9wdXAnICAgICAgICAKICAgIH07CgogICAgLyogCiAgICAqIHdvcmthcm91bmQgdG8gaGF2ZSAnZGVzdHJveWVkJyBldmVudCB0byBkZXN0cm95IHBvcG92ZXIgd2hlbiBlbGVtZW50IGlzIGRlc3Ryb3llZAogICAgKiBzZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMjAwNDk0L2pxdWVyeS10cmlnZ2VyLWV2ZW50LXdoZW4tYW4tZWxlbWVudC1pcy1yZW1vdmVkLWZyb20tdGhlLWRvbQogICAgKi8KICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsLmRlc3Ryb3llZCA9IHsKICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKG8pIHsKICAgICAgICAgICAgaWYgKG8uaGFuZGxlcikgewogICAgICAgICAgICAgICAgby5oYW5kbGVyKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OyAgICAKCn0od2luZG93LmpRdWVyeSkpOwoKLyoqCiogRWRpdGFibGUgSW5saW5lIAoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQoqLwooZnVuY3Rpb24gKCQpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIAogICAgLy9jb3B5IHByb3RvdHlwZSBmcm9tIEVkaXRhYmxlQ29udGFpbmVyCiAgICAvL2V4dGVuZCBtZXRob2RzCiAgICAkLmV4dGVuZCgkLmZuLmVkaXRhYmxlQ29udGFpbmVyLklubGluZS5wcm90b3R5cGUsICQuZm4uZWRpdGFibGVDb250YWluZXIuUG9wdXAucHJvdG90eXBlLCB7CiAgICAgICAgY29udGFpbmVyTmFtZTogJ2VkaXRhYmxlZm9ybScsCiAgICAgICAgaW5uZXJDc3M6ICcuZWRpdGFibGUtaW5saW5lJywKICAgICAgICBjb250YWluZXJDbGFzczogJ2VkaXRhYmxlLWNvbnRhaW5lciBlZGl0YWJsZS1pbmxpbmUnLCAvL2NzcyBjbGFzcyBhcHBsaWVkIHRvIGNvbnRhaW5lciBlbGVtZW50CiAgICAgICAgICAgICAgICAgCiAgICAgICAgaW5pdENvbnRhaW5lcjogZnVuY3Rpb24oKXsKICAgICAgICAgICAgLy9jb250YWluZXIgaXMgPHNwYW4+IGVsZW1lbnQKICAgICAgICAgICAgdGhpcy4kdGlwID0gJCgnPHNwYW4+PC9zcGFuPicpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy9jb252ZXJ0IGFuaW0gdG8gbWlsaXNlY29uZHMgKGludCkKICAgICAgICAgICAgaWYoIXRoaXMub3B0aW9ucy5hbmltKSB7CiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuYW5pbSA9IDA7CiAgICAgICAgICAgIH0gICAgICAgICAKICAgICAgICB9LAogICAgICAgIAogICAgICAgIHNwbGl0T3B0aW9uczogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIC8vYWxsIG9wdGlvbnMgYXJlIHBhc3NlZCB0byBmb3JtCiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyT3B0aW9ucyA9IHt9OwogICAgICAgICAgICB0aGlzLmZvcm1PcHRpb25zID0gdGhpcy5vcHRpb25zOwogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgdGlwOiBmdW5jdGlvbigpIHsKICAgICAgICAgICByZXR1cm4gdGhpcy4kdGlwOyAKICAgICAgICB9LAogICAgICAgIAogICAgICAgIGlubmVyU2hvdzogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aGlzLiRlbGVtZW50LmhpZGUoKTsKICAgICAgICAgICAgdGhpcy50aXAoKS5pbnNlcnRBZnRlcih0aGlzLiRlbGVtZW50KS5zaG93KCk7CiAgICAgICAgfSwgCiAgICAgICAgCiAgICAgICAgaW5uZXJIaWRlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuJHRpcC5oaWRlKHRoaXMub3B0aW9ucy5hbmltLCAkLnByb3h5KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5zaG93KCk7CiAgICAgICAgICAgICAgICB0aGlzLmlubmVyRGVzdHJveSgpOwogICAgICAgICAgICB9LCB0aGlzKSk7IAogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgaW5uZXJEZXN0cm95OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYodGhpcy50aXAoKSkgewogICAgICAgICAgICAgICAgdGhpcy50aXAoKS5lbXB0eSgpLnJlbW92ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfSAKICAgIH0pOwoKfSh3aW5kb3cualF1ZXJ5KSk7Ci8qKgpNYWtlcyBlZGl0YWJsZSBhbnkgSFRNTCBlbGVtZW50IG9uIHRoZSBwYWdlLiBBcHBsaWVkIGFzIGpRdWVyeSBtZXRob2QuCgpAY2xhc3MgZWRpdGFibGUKQHVzZXMgZWRpdGFibGVDb250YWluZXIKKiovCihmdW5jdGlvbiAoJCkgewogICAgInVzZSBzdHJpY3QiOwoKICAgIHZhciBFZGl0YWJsZSA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7CiAgICAgICAgdGhpcy4kZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICAgICAgLy9kYXRhLSogaGFzIG1vcmUgcHJpb3JpdHkgb3ZlciBqcyBvcHRpb25zOiBiZWNhdXNlIGR5bmFtaWNhbGx5IGNyZWF0ZWQgZWxlbWVudHMgbWF5IGNoYW5nZSBkYXRhLSogCiAgICAgICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sICQuZm4uZWRpdGFibGUuZGVmYXVsdHMsIG9wdGlvbnMsICQuZm4uZWRpdGFibGV1dGlscy5nZXRDb25maWdEYXRhKHRoaXMuJGVsZW1lbnQpKTsgIAogICAgICAgIGlmKHRoaXMub3B0aW9ucy5zZWxlY3RvcikgewogICAgICAgICAgICB0aGlzLmluaXRMaXZlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5pbml0KCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vY2hlY2sgZm9yIHRyYW5zaXRpb24gc3VwcG9ydAogICAgICAgIGlmKHRoaXMub3B0aW9ucy5oaWdobGlnaHQgJiYgISQuZm4uZWRpdGFibGV1dGlscy5zdXBwb3J0c1RyYW5zaXRpb25zKCkpIHsKICAgICAgICAgICAgdGhpcy5vcHRpb25zLmhpZ2hsaWdodCA9IGZhbHNlOwogICAgICAgIH0KICAgIH07CgogICAgRWRpdGFibGUucHJvdG90eXBlID0gewogICAgICAgIGNvbnN0cnVjdG9yOiBFZGl0YWJsZSwgCiAgICAgICAgaW5pdDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgaXNWYWx1ZUJ5VGV4dCA9IGZhbHNlLCAKICAgICAgICAgICAgICAgIGRvQXV0b3RleHQsIGZpbmFsaXplOwoKICAgICAgICAgICAgLy9uYW1lCiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5uYW1lID0gdGhpcy5vcHRpb25zLm5hbWUgfHwgdGhpcy4kZWxlbWVudC5hdHRyKCdpZCcpOwogICAgICAgICAgICAgCiAgICAgICAgICAgIC8vY3JlYXRlIGlucHV0IG9mIHNwZWNpZmllZCB0eXBlLiBJbnB1dCBuZWVkZWQgYWxyZWFkeSBoZXJlIHRvIGNvbnZlcnQgdmFsdWUgZm9yIGluaXRpYWwgZGlzcGxheSAoZS5nLiBzaG93IHRleHQgYnkgaWQgZm9yIHNlbGVjdCkKICAgICAgICAgICAgLy9hbHNvIHdlIHNldCBzY29wZSBvcHRpb24gdG8gaGF2ZSBhY2Nlc3MgdG8gZWxlbWVudCBpbnNpZGUgaW5wdXQgc3BlY2lmaWMgY2FsbGJhY2tzIChlLiBnLiBzb3VyY2UgYXMgZnVuY3Rpb24pCiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zY29wZSA9IHRoaXMuJGVsZW1lbnRbMF07IAogICAgICAgICAgICB0aGlzLmlucHV0ID0gJC5mbi5lZGl0YWJsZXV0aWxzLmNyZWF0ZUlucHV0KHRoaXMub3B0aW9ucyk7CiAgICAgICAgICAgIGlmKCF0aGlzLmlucHV0KSB7CiAgICAgICAgICAgICAgICByZXR1cm47IAogICAgICAgICAgICB9ICAgICAgICAgICAgCgogICAgICAgICAgICAvL3NldCB2YWx1ZSBmcm9tIHNldHRpbmdzIG9yIGJ5IGVsZW1lbnQncyB0ZXh0CiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLm9wdGlvbnMudmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlucHV0Lmh0bWwydmFsdWUoJC50cmltKHRoaXMuJGVsZW1lbnQuaHRtbCgpKSk7CiAgICAgICAgICAgICAgICBpc1ZhbHVlQnlUZXh0ID0gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgIHZhbHVlIGNhbiBiZSBzdHJpbmcgd2hlbiByZWNlaXZlZCBmcm9tICdkYXRhLXZhbHVlJyBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgICAgZm9yIGNvbXBsZXh0IG9iamVjdHMgdmFsdWUgY2FuIGJlIHNldCBhcyBqc29uIHN0cmluZyBpbiBkYXRhLXZhbHVlIGF0dHJpYnV0ZSwgCiAgICAgICAgICAgICAgICAgIGUuZy4gZGF0YS12YWx1ZT0ie2NpdHk6ICdNb3Njb3cnLCBzdHJlZXQ6ICdMZW5pbmEnfSIKICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMudmFsdWUgPSAkLmZuLmVkaXRhYmxldXRpbHMudHJ5UGFyc2VKc29uKHRoaXMub3B0aW9ucy52YWx1ZSwgdHJ1ZSk7IAogICAgICAgICAgICAgICAgaWYodHlwZW9mIHRoaXMub3B0aW9ucy52YWx1ZSA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pbnB1dC5zdHIydmFsdWUodGhpcy5vcHRpb25zLnZhbHVlKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMub3B0aW9ucy52YWx1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy9hZGQgJ2VkaXRhYmxlJyBjbGFzcyB0byBldmVyeSBlZGl0YWJsZSBlbGVtZW50CiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoJ2VkaXRhYmxlJyk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvL3NwZWNpZmljYWxseSBmb3IgInRleHRhcmVhIiBhZGQgY2xhc3MgLmVkaXRhYmxlLXByZS13cmFwcGVkIHRvIGtlZXAgbGluZWJyZWFrcwogICAgICAgICAgICBpZih0aGlzLmlucHV0LnR5cGUgPT09ICd0ZXh0YXJlYScpIHsKICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoJ2VkaXRhYmxlLXByZS13cmFwcGVkJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vYXR0YWNoIGhhbmRsZXIgYWN0aXZhdGluZyBlZGl0YWJsZS4gSW4gZGlzYWJsZWQgbW9kZSBpdCBqdXN0IHByZXZlbnQgZGVmYXVsdCBhY3Rpb24gKHVzZWZ1bCBmb3IgbGlua3MpCiAgICAgICAgICAgIGlmKHRoaXMub3B0aW9ucy50b2dnbGUgIT09ICdtYW51YWwnKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKCdlZGl0YWJsZS1jbGljaycpOwogICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5vbih0aGlzLm9wdGlvbnMudG9nZ2xlICsgJy5lZGl0YWJsZScsICQucHJveHkoZnVuY3Rpb24oZSl7CiAgICAgICAgICAgICAgICAgICAgLy9wcmV2ZW50IGZvbGxvd2luZyBsaW5rIGlmIGVkaXRhYmxlIGVuYWJsZWQKICAgICAgICAgICAgICAgICAgICBpZighdGhpcy5vcHRpb25zLmRpc2FibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgLy9zdG9wIHByb3BhZ2F0aW9uIG5vdCByZXF1aXJlZCBiZWNhdXNlIGluIGRvY3VtZW50IGNsaWNrIGhhbmRsZXIgaXQgY2hlY2tzIGV2ZW50IHRhcmdldAogICAgICAgICAgICAgICAgICAgIC8vZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMudG9nZ2xlID09PSAnbW91c2VlbnRlcicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9mb3IgaG92ZXIgb25seSBzaG93IGNvbnRhaW5lcgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3coKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvL3doZW4gdG9nZ2xlPSdjbGljaycgd2Ugc2hvdWxkIG5vdCBjbG9zZSBhbGwgb3RoZXIgY29udGFpbmVycyBhcyB0aGV5IHdpbGwgYmUgY2xvc2VkIGF1dG9tYXRpY2FsbHkgaW4gZG9jdW1lbnQgY2xpY2sgbGlzdGVuZXIKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsb3NlQWxsID0gKHRoaXMub3B0aW9ucy50b2dnbGUgIT09ICdjbGljaycpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZShjbG9zZUFsbCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwgdGhpcykpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5hdHRyKCd0YWJpbmRleCcsIC0xKTsgLy9kbyBub3Qgc3RvcCBmb2N1cyBvbiBlbGVtZW50IHdoZW4gdG9nZ2xlZCBtYW51YWxseQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvL2lmIGRpc3BsYXkgaXMgZnVuY3Rpb24gaXQncyBmYXIgbW9yZSBjb252aW5pZW50IHRvIGhhdmUgYXV0b3RleHQgPSBhbHdheXMgdG8gcmVuZGVyIGNvcnJlY3RseSBvbiBpbml0CiAgICAgICAgICAgIC8vc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS92aXRhbGV0cy94LWVkaXRhYmxlLXlpaS9pc3N1ZXMvMzQKICAgICAgICAgICAgaWYodHlwZW9mIHRoaXMub3B0aW9ucy5kaXNwbGF5ID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuYXV0b3RleHQgPSAnYWx3YXlzJzsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy9jaGVjayBjb25kaXRpb25zIGZvciBhdXRvdGV4dDoKICAgICAgICAgICAgc3dpdGNoKHRoaXMub3B0aW9ucy5hdXRvdGV4dCkgewogICAgICAgICAgICAgIGNhc2UgJ2Fsd2F5cyc6CiAgICAgICAgICAgICAgIGRvQXV0b3RleHQgPSB0cnVlOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgJ2F1dG8nOgogICAgICAgICAgICAgICAgLy9pZiBlbGVtZW50IHRleHQgaXMgZW1wdHkgYW5kIHZhbHVlIGlzIGRlZmluZWQgYW5kIHZhbHVlIG5vdCBnZW5lcmF0ZWQgYnkgdGV4dCAtLT4gcnVuIGF1dG90ZXh0CiAgICAgICAgICAgICAgICBkb0F1dG90ZXh0ID0gISQudHJpbSh0aGlzLiRlbGVtZW50LnRleHQoKSkubGVuZ3RoICYmIHRoaXMudmFsdWUgIT09IG51bGwgJiYgdGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmICFpc1ZhbHVlQnlUZXh0OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgIGRvQXV0b3RleHQgPSBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9kZXBlbmRpbmcgb24gYXV0b3RleHQgcnVuIHJlbmRlcigpIG9yIGp1c3QgZmluaWxpemUgaW5pdAogICAgICAgICAgICAkLndoZW4oZG9BdXRvdGV4dCA/IHRoaXMucmVuZGVyKCkgOiB0cnVlKS50aGVuKCQucHJveHkoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGUoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGUoKTsgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIC8qKiAgICAgICAgCiAgICAgICAgICAgICAgIEZpcmVkIHdoZW4gZWxlbWVudCB3YXMgaW5pdGlhbGl6ZWQgYnkgYCQoKS5lZGl0YWJsZSgpYCBtZXRob2QuIAogICAgICAgICAgICAgICBQbGVhc2Ugbm90ZSB0aGF0IHlvdSBzaG91bGQgc2V0dXAgYGluaXRgIGhhbmRsZXIgKipiZWZvcmUqKiBhcHBseWluZyBgZWRpdGFibGVgLiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgIEBldmVudCBpbml0IAogICAgICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gZXZlbnQgZXZlbnQgb2JqZWN0CiAgICAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBlZGl0YWJsZSBlZGl0YWJsZSBpbnN0YW5jZSAoYXMgaGVyZSBpdCBjYW5ub3QgYWNjZXNzZWQgdmlhIGRhdGEoJ2VkaXRhYmxlJykpCiAgICAgICAgICAgICAgIEBzaW5jZSAxLjIuMAogICAgICAgICAgICAgICBAZXhhbXBsZQogICAgICAgICAgICAgICAkKCcjdXNlcm5hbWUnKS5vbignaW5pdCcsIGZ1bmN0aW9uKGUsIGVkaXRhYmxlKSB7CiAgICAgICAgICAgICAgICAgICBhbGVydCgnaW5pdGlhbGl6ZWQgJyArIGVkaXRhYmxlLm9wdGlvbnMubmFtZSk7CiAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAkKCcjdXNlcm5hbWUnKS5lZGl0YWJsZSgpOwogICAgICAgICAgICAgICAqKi8gICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlckhhbmRsZXIoJ2luaXQnLCB0aGlzKTsKICAgICAgICAgICAgfSwgdGhpcykpOwogICAgICAgIH0sCgogICAgICAgIC8qCiAgICAgICAgIEluaXRpYWxpemVzIHBhcmVudCBlbGVtZW50IGZvciBsaXZlIGVkaXRhYmxlcyAKICAgICAgICAqLwogICAgICAgIGluaXRMaXZlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAvL3N0b3JlIHNlbGVjdG9yIAogICAgICAgICAgIHZhciBzZWxlY3RvciA9IHRoaXMub3B0aW9ucy5zZWxlY3RvcjsKICAgICAgICAgICAvL21vZGlmeSBvcHRpb25zIGZvciBjaGlsZCBlbGVtZW50cwogICAgICAgICAgIHRoaXMub3B0aW9ucy5zZWxlY3RvciA9IGZhbHNlOyAKICAgICAgICAgICB0aGlzLm9wdGlvbnMuYXV0b3RleHQgPSAnbmV2ZXInOwogICAgICAgICAgIC8vbGlzdGVuIHRvZ2dsZSBldmVudHMKICAgICAgICAgICB0aGlzLiRlbGVtZW50Lm9uKHRoaXMub3B0aW9ucy50b2dnbGUgKyAnLmVkaXRhYmxlJywgc2VsZWN0b3IsICQucHJveHkoZnVuY3Rpb24oZSl7CiAgICAgICAgICAgICAgIHZhciAkdGFyZ2V0ID0gJChlLnRhcmdldCk7CiAgICAgICAgICAgICAgIGlmKCEkdGFyZ2V0LmRhdGEoJ2VkaXRhYmxlJykpIHsKICAgICAgICAgICAgICAgICAgIC8vaWYgZGVsZWdhdGVkIGVsZW1lbnQgaW5pdGlhbGx5IGVtcHR5LCB3ZSBuZWVkIHRvIGNsZWFyIGl0J3MgdGV4dCAodGhhdCB3YXMgbWFudWFsbHkgc2V0IHRvIGBlbXB0eWAgYnkgdXNlcikKICAgICAgICAgICAgICAgICAgIC8vc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS92aXRhbGV0cy94LWVkaXRhYmxlL2lzc3Vlcy8xMzcgCiAgICAgICAgICAgICAgICAgICBpZigkdGFyZ2V0Lmhhc0NsYXNzKHRoaXMub3B0aW9ucy5lbXB0eWNsYXNzKSkgewogICAgICAgICAgICAgICAgICAgICAgJHRhcmdldC5lbXB0eSgpOwogICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgJHRhcmdldC5lZGl0YWJsZSh0aGlzLm9wdGlvbnMpLnRyaWdnZXIoZSk7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICB9LCB0aGlzKSk7IAogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgLyoKICAgICAgICBSZW5kZXJzIHZhbHVlIGludG8gZWxlbWVudCdzIHRleHQuCiAgICAgICAgQ2FuIGNhbGwgY3VzdG9tIGRpc3BsYXkgbWV0aG9kIGZyb20gb3B0aW9ucy4KICAgICAgICBDYW4gcmV0dXJuIGRlZmVycmVkIG9iamVjdC4KICAgICAgICBAbWV0aG9kIHJlbmRlcigpCiAgICAgICAgQHBhcmFtIHttaXhlZH0gcmVzcG9uc2Ugc2VydmVyIHJlc3BvbnNlIChpZiBleGlzdCkgdG8gcGFzcyBpbnRvIGRpc3BsYXkgZnVuY3Rpb24KICAgICAgICAqLyAgICAgICAgICAKICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7CiAgICAgICAgICAgIC8vZG8gbm90IGRpc3BsYXkgYW55dGhpbmcKICAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLmRpc3BsYXkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vaWYgaW5wdXQgaGFzIGB2YWx1ZTJodG1sRmluYWxgIG1ldGhvZCwgd2UgcGFzcyBjYWxsYmFjayBpbiB0aGlyZCBwYXJhbSB0byBiZSBjYWxsZWQgd2hlbiBzb3VyY2UgaXMgbG9hZGVkCiAgICAgICAgICAgIGlmKHRoaXMuaW5wdXQudmFsdWUyaHRtbEZpbmFsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC52YWx1ZTJodG1sKHRoaXMudmFsdWUsIHRoaXMuJGVsZW1lbnRbMF0sIHRoaXMub3B0aW9ucy5kaXNwbGF5LCByZXNwb25zZSk7IAogICAgICAgICAgICAvL2lmIGRpc3BsYXkgbWV0aG9kIGRlZmluZWQgLS0+IHVzZSBpdCAgICAKICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGVvZiB0aGlzLm9wdGlvbnMuZGlzcGxheSA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5kaXNwbGF5LmNhbGwodGhpcy4kZWxlbWVudFswXSwgdGhpcy52YWx1ZSwgcmVzcG9uc2UpOwogICAgICAgICAgICAvL2Vsc2UgdXNlIGlucHV0J3Mgb3JpZ2luYWwgdmFsdWUyaHRtbCgpIG1ldGhvZCAgICAKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LnZhbHVlMmh0bWwodGhpcy52YWx1ZSwgdGhpcy4kZWxlbWVudFswXSk7IAogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICAvKioKICAgICAgICBFbmFibGVzIGVkaXRhYmxlCiAgICAgICAgQG1ldGhvZCBlbmFibGUoKQogICAgICAgICoqLyAgICAgICAgICAKICAgICAgICBlbmFibGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygnZWRpdGFibGUtZGlzYWJsZWQnKTsKICAgICAgICAgICAgdGhpcy5oYW5kbGVFbXB0eSh0aGlzLmlzRW1wdHkpOwogICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMudG9nZ2xlICE9PSAnbWFudWFsJykgewogICAgICAgICAgICAgICAgaWYodGhpcy4kZWxlbWVudC5hdHRyKCd0YWJpbmRleCcpID09PSAnLTEnKSB7ICAgIAogICAgICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQXR0cigndGFiaW5kZXgnKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICAvKioKICAgICAgICBEaXNhYmxlcyBlZGl0YWJsZQogICAgICAgIEBtZXRob2QgZGlzYWJsZSgpCiAgICAgICAgKiovICAgICAgICAgCiAgICAgICAgZGlzYWJsZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5kaXNhYmxlZCA9IHRydWU7IAogICAgICAgICAgICB0aGlzLmhpZGUoKTsgICAgICAgICAgIAogICAgICAgICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKCdlZGl0YWJsZS1kaXNhYmxlZCcpOwogICAgICAgICAgICB0aGlzLmhhbmRsZUVtcHR5KHRoaXMuaXNFbXB0eSk7CiAgICAgICAgICAgIC8vZG8gbm90IHN0b3AgZm9jdXMgb24gdGhpcyBlbGVtZW50CiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuYXR0cigndGFiaW5kZXgnLCAtMSk7ICAgICAgICAgICAgICAgIAogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgLyoqCiAgICAgICAgVG9nZ2xlcyBlbmFibGVkIC8gZGlzYWJsZWQgc3RhdGUgb2YgZWRpdGFibGUgZWxlbWVudAogICAgICAgIEBtZXRob2QgdG9nZ2xlRGlzYWJsZWQoKQogICAgICAgICoqLyAgICAgICAgIAogICAgICAgIHRvZ2dsZURpc2FibGVkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLmRpc2FibGVkKSB7CiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZSgpOwogICAgICAgICAgICB9IGVsc2UgeyAKICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZSgpOyAKICAgICAgICAgICAgfQogICAgICAgIH0sICAKICAgICAgICAKICAgICAgICAvKioKICAgICAgICBTZXRzIG5ldyBvcHRpb24KICAgICAgICAKICAgICAgICBAbWV0aG9kIG9wdGlvbihrZXksIHZhbHVlKQogICAgICAgIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0ga2V5IG9wdGlvbiBuYW1lIG9yIG9iamVjdCB3aXRoIHNldmVyYWwgb3B0aW9ucwogICAgICAgIEBwYXJhbSB7bWl4ZWR9IHZhbHVlIG9wdGlvbiBuZXcgdmFsdWUKICAgICAgICBAZXhhbXBsZQogICAgICAgICQoJy5lZGl0YWJsZScpLmVkaXRhYmxlKCdvcHRpb24nLCAncGsnLCAyKTsKICAgICAgICAqKi8gICAgICAgICAgCiAgICAgICAgb3B0aW9uOiBmdW5jdGlvbihrZXksIHZhbHVlKSB7CiAgICAgICAgICAgIC8vc2V0IG9wdGlvbihzKSBieSBvYmplY3QKICAgICAgICAgICAgaWYoa2V5ICYmIHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSB7CiAgICAgICAgICAgICAgICQuZWFjaChrZXksICQucHJveHkoZnVuY3Rpb24oaywgdil7CiAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uKCQudHJpbShrKSwgdik7IAogICAgICAgICAgICAgICB9LCB0aGlzKSk7IAogICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vc2V0IG9wdGlvbiBieSBzdHJpbmcgICAgICAgICAgICAgCiAgICAgICAgICAgIHRoaXMub3B0aW9uc1trZXldID0gdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vZGlzYWJsZWQKICAgICAgICAgICAgaWYoa2V5ID09PSAnZGlzYWJsZWQnKSB7CiAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA/IHRoaXMuZGlzYWJsZSgpIDogdGhpcy5lbmFibGUoKTsKICAgICAgICAgICAgfSAKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vdmFsdWUKICAgICAgICAgICAgaWYoa2V5ID09PSAndmFsdWUnKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy90cmFuc2ZlciBuZXcgb3B0aW9uIHRvIGNvbnRhaW5lciEgCiAgICAgICAgICAgIGlmKHRoaXMuY29udGFpbmVyKSB7CiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5vcHRpb24oa2V5LCB2YWx1ZSk7ICAKICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgIC8vcGFzcyBvcHRpb24gdG8gaW5wdXQgZGlyZWN0bHkgKGFzIGl0IHBvaW50cyB0byB0aGUgc2FtZSBpbiBmb3JtKQogICAgICAgICAgICBpZih0aGlzLmlucHV0Lm9wdGlvbikgewogICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5vcHRpb24oa2V5LCB2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgfSwgICAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIC8qCiAgICAgICAgKiBzZXQgZW1wdHl0ZXh0IGlmIGVsZW1lbnQgaXMgZW1wdHkKICAgICAgICAqLwogICAgICAgIGhhbmRsZUVtcHR5OiBmdW5jdGlvbiAoaXNFbXB0eSkgewogICAgICAgICAgICAvL2RvIG5vdCBoYW5kbGUgZW1wdHkgaWYgd2UgZG8gbm90IGRpc3BsYXkgYW55dGhpbmcKICAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLmRpc3BsYXkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8qIAogICAgICAgICAgICBpc0VtcHR5IG1heSBiZSBzZXQgZGlyZWN0bHkgYXMgcGFyYW0gb2YgbWV0aG9kLgogICAgICAgICAgICBJdCBpcyByZXF1aXJlZCB3aGVuIHdlIGVuYWJsZS9kaXNhYmxlIGZpZWxkIGFuZCBjYW4ndCByZWx5IG9uIGNvbnRlbnQgCiAgICAgICAgICAgIGFzIG5vZGUgY29udGVudCBpcyB0ZXh0OiAiRW1wdHkiIHRoYXQgaXMgbm90IGVtcHR5ICUpCiAgICAgICAgICAgICovCiAgICAgICAgICAgIGlmKGlzRW1wdHkgIT09IHVuZGVmaW5lZCkgeyAKICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IGlzRW1wdHk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvL2RldGVjdCBlbXB0eQogICAgICAgICAgICAgICAgLy9mb3Igc29tZSBpbnB1dHMgd2UgbmVlZCBtb3JlIHNtYXJ0IGNoZWNrCiAgICAgICAgICAgICAgICAvL2UuZy4gd3lzaWh0bWw1IG1heSBoYXZlIDxicj4sIDxwPjwvcD4sIDxpbWc+CiAgICAgICAgICAgICAgICBpZih0eXBlb2YodGhpcy5pbnB1dC5pc0VtcHR5KSA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuaXNFbXB0eSA9IHRoaXMuaW5wdXQuaXNFbXB0eSh0aGlzLiRlbGVtZW50KTsgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRW1wdHkgPSAkLnRyaW0odGhpcy4kZWxlbWVudC5odG1sKCkpID09PSAnJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSAgICAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAvL2VtcHR5dGV4dCBzaG93biBvbmx5IGZvciBlbmFibGVkCiAgICAgICAgICAgIGlmKCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRW1wdHkpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50Lmh0bWwodGhpcy5vcHRpb25zLmVtcHR5dGV4dCk7CiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLmVtcHR5Y2xhc3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuZW1wdHljbGFzcyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmKHRoaXMub3B0aW9ucy5lbXB0eWNsYXNzKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuZW1wdHljbGFzcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvL2JlbG93IHJlcXVpcmVkIGlmIGVsZW1lbnQgZGlzYWJsZSBwcm9wZXJ0eSB3YXMgY2hhbmdlZAogICAgICAgICAgICAgICAgaWYodGhpcy5pc0VtcHR5KSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5lbXB0eSgpOwogICAgICAgICAgICAgICAgICAgIGlmKHRoaXMub3B0aW9ucy5lbXB0eWNsYXNzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmVtcHR5Y2xhc3MpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sICAgICAgICAKICAgICAgICAKICAgICAgICAvKioKICAgICAgICBTaG93cyBjb250YWluZXIgd2l0aCBmb3JtCiAgICAgICAgQG1ldGhvZCBzaG93KCkKICAgICAgICBAcGFyYW0ge2Jvb2xlYW59IGNsb3NlQWxsIFdoZXRoZXIgdG8gY2xvc2UgYWxsIG90aGVyIGVkaXRhYmxlIGNvbnRhaW5lcnMgd2hlbiBzaG93aW5nIHRoaXMgb25lLiBEZWZhdWx0IHRydWUuCiAgICAgICAgKiovICAKICAgICAgICBzaG93OiBmdW5jdGlvbiAoY2xvc2VBbGwpIHsKICAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLmRpc2FibGVkKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vaW5pdCBlZGl0YWJsZUNvbnRhaW5lcjogcG9wb3ZlciwgdG9vbHRpcCwgaW5saW5lLCBldGMuLgogICAgICAgICAgICBpZighdGhpcy5jb250YWluZXIpIHsKICAgICAgICAgICAgICAgIHZhciBjb250YWluZXJPcHRpb25zID0gJC5leHRlbmQoe30sIHRoaXMub3B0aW9ucywgewogICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLAogICAgICAgICAgICAgICAgICAgIGlucHV0OiB0aGlzLmlucHV0IC8vcGFzcyBpbnB1dCB0byBmb3JtIChhcyBpdCBpcyBhbHJlYWR5IGNyZWF0ZWQpCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuZWRpdGFibGVDb250YWluZXIoY29udGFpbmVyT3B0aW9ucyk7CiAgICAgICAgICAgICAgICAvL2xpc3RlbiBgc2F2ZWAgZXZlbnQgCiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50Lm9uKCJzYXZlLmludGVybmFsIiwgJC5wcm94eSh0aGlzLnNhdmUsIHRoaXMpKTsKICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy4kZWxlbWVudC5kYXRhKCdlZGl0YWJsZUNvbnRhaW5lcicpOyAKICAgICAgICAgICAgfSBlbHNlIGlmKHRoaXMuY29udGFpbmVyLnRpcCgpLmlzKCc6dmlzaWJsZScpKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0gICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vc2hvdyBjb250YWluZXIKICAgICAgICAgICAgdGhpcy5jb250YWluZXIuc2hvdyhjbG9zZUFsbCk7CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICAvKioKICAgICAgICBIaWRlcyBjb250YWluZXIgd2l0aCBmb3JtCiAgICAgICAgQG1ldGhvZCBoaWRlKCkKICAgICAgICAqKi8gICAgICAgCiAgICAgICAgaGlkZTogZnVuY3Rpb24gKCkgeyAgIAogICAgICAgICAgICBpZih0aGlzLmNvbnRhaW5lcikgeyAgCiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5oaWRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIAogICAgICAgIC8qKgogICAgICAgIFRvZ2dsZXMgY29udGFpbmVyIHZpc2liaWxpdHkgKHNob3cgLyBoaWRlKQogICAgICAgIEBtZXRob2QgdG9nZ2xlKCkKICAgICAgICBAcGFyYW0ge2Jvb2xlYW59IGNsb3NlQWxsIFdoZXRoZXIgdG8gY2xvc2UgYWxsIG90aGVyIGVkaXRhYmxlIGNvbnRhaW5lcnMgd2hlbiBzaG93aW5nIHRoaXMgb25lLiBEZWZhdWx0IHRydWUuCiAgICAgICAgKiovICAKICAgICAgICB0b2dnbGU6IGZ1bmN0aW9uKGNsb3NlQWxsKSB7CiAgICAgICAgICAgIGlmKHRoaXMuY29udGFpbmVyICYmIHRoaXMuY29udGFpbmVyLnRpcCgpLmlzKCc6dmlzaWJsZScpKSB7CiAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuc2hvdyhjbG9zZUFsbCk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIAogICAgICAgIC8qCiAgICAgICAgKiBjYWxsZWQgd2hlbiBmb3JtIHdhcyBzdWJtaXR0ZWQKICAgICAgICAqLyAgICAgICAgICAKICAgICAgICBzYXZlOiBmdW5jdGlvbihlLCBwYXJhbXMpIHsKICAgICAgICAgICAgLy9tYXJrIGVsZW1lbnQgd2l0aCB1bnNhdmVkIGNsYXNzIGlmIG5lZWRlZAogICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMudW5zYXZlZGNsYXNzKSB7CiAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgIEFkZCB1bnNhdmVkIGNzcyB0byBlbGVtZW50IGlmOgogICAgICAgICAgICAgICAgICAtIHVybCBpcyBub3QgdXNlcidzIGZ1bmN0aW9uIAogICAgICAgICAgICAgICAgICAtIHZhbHVlIHdhcyBub3Qgc2VudCB0byBzZXJ2ZXIKICAgICAgICAgICAgICAgICAgLSBwYXJhbXMucmVzcG9uc2UgPT09IHVuZGVmaW5lZCwgdGhhdCBtZWFucyBkYXRhIHdhcyBub3Qgc2VudAogICAgICAgICAgICAgICAgICAtIHZhbHVlIGNoYW5nZWQgCiAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgdmFyIHNlbnQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHNlbnQgPSBzZW50IHx8IHR5cGVvZiB0aGlzLm9wdGlvbnMudXJsID09PSAnZnVuY3Rpb24nOwogICAgICAgICAgICAgICAgc2VudCA9IHNlbnQgfHwgdGhpcy5vcHRpb25zLmRpc3BsYXkgPT09IGZhbHNlOyAKICAgICAgICAgICAgICAgIHNlbnQgPSBzZW50IHx8IHBhcmFtcy5yZXNwb25zZSAhPT0gdW5kZWZpbmVkOyAKICAgICAgICAgICAgICAgIHNlbnQgPSBzZW50IHx8ICh0aGlzLm9wdGlvbnMuc2F2ZW5vY2hhbmdlICYmIHRoaXMuaW5wdXQudmFsdWUyc3RyKHRoaXMudmFsdWUpICE9PSB0aGlzLmlucHV0LnZhbHVlMnN0cihwYXJhbXMubmV3VmFsdWUpKTsgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmKHNlbnQpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy51bnNhdmVkY2xhc3MpOyAKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMudW5zYXZlZGNsYXNzKTsgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvL2hpZ2hsaWdodCB3aGVuIHNhdmluZwogICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KSB7CiAgICAgICAgICAgICAgICB2YXIgJGUgPSB0aGlzLiRlbGVtZW50LAogICAgICAgICAgICAgICAgICAgIGJnQ29sb3IgPSAkZS5jc3MoJ2JhY2tncm91bmQtY29sb3InKTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICRlLmNzcygnYmFja2dyb3VuZC1jb2xvcicsIHRoaXMub3B0aW9ucy5oaWdobGlnaHQpOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgIGlmKGJnQ29sb3IgPT09ICd0cmFuc3BhcmVudCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYmdDb2xvciA9ICcnOyAKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJGUuY3NzKCdiYWNrZ3JvdW5kLWNvbG9yJywgYmdDb2xvcik7CiAgICAgICAgICAgICAgICAgICAgJGUuYWRkQ2xhc3MoJ2VkaXRhYmxlLWJnLXRyYW5zaXRpb24nKTsKICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgJGUucmVtb3ZlQ2xhc3MoJ2VkaXRhYmxlLWJnLXRyYW5zaXRpb24nKTsgIAogICAgICAgICAgICAgICAgICAgIH0sIDE3MDApOwogICAgICAgICAgICAgICAgfSwgMTApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvL3NldCBuZXcgdmFsdWUKICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShwYXJhbXMubmV3VmFsdWUsIGZhbHNlLCBwYXJhbXMucmVzcG9uc2UpOwogICAgICAgICAgICAKICAgICAgICAgICAgLyoqICAgICAgICAKICAgICAgICAgICAgRmlyZWQgd2hlbiBuZXcgdmFsdWUgd2FzIHN1Ym1pdHRlZC4gWW91IGNhbiB1c2UgPGNvZGU+JCh0aGlzKS5kYXRhKCdlZGl0YWJsZScpPC9jb2RlPiB0byBhY2Nlc3MgdG8gZWRpdGFibGUgaW5zdGFuY2UKICAgICAgICAgICAgCiAgICAgICAgICAgIEBldmVudCBzYXZlIAogICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gZXZlbnQgZXZlbnQgb2JqZWN0CiAgICAgICAgICAgIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgYWRkaXRpb25hbCBwYXJhbXMKICAgICAgICAgICAgQHBhcmFtIHttaXhlZH0gcGFyYW1zLm5ld1ZhbHVlIHN1Ym1pdHRlZCB2YWx1ZQogICAgICAgICAgICBAcGFyYW0ge09iamVjdH0gcGFyYW1zLnJlc3BvbnNlIGFqYXggcmVzcG9uc2UKICAgICAgICAgICAgQGV4YW1wbGUKICAgICAgICAgICAgJCgnI3VzZXJuYW1lJykub24oJ3NhdmUnLCBmdW5jdGlvbihlLCBwYXJhbXMpIHsKICAgICAgICAgICAgICAgIGFsZXJ0KCdTYXZlZCB2YWx1ZTogJyArIHBhcmFtcy5uZXdWYWx1ZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAqKi8KICAgICAgICAgICAgLy9ldmVudCBpdHNlbGYgaXMgdHJpZ2dlcmVkIGJ5IGVkaXRhYmxlQ29udGFpbmVyLiBEZXNjcmlwdGlvbiBoZXJlIGlzIG9ubHkgZm9yIGRvY3VtZW50YXRpb24gICAgICAgICAgICAgIAogICAgICAgIH0sCgogICAgICAgIHZhbGlkYXRlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLnZhbGlkYXRlID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZhbGlkYXRlLmNhbGwodGhpcywgdGhpcy52YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIAogICAgICAgIC8qKgogICAgICAgIFNldHMgbmV3IHZhbHVlIG9mIGVkaXRhYmxlCiAgICAgICAgQG1ldGhvZCBzZXRWYWx1ZSh2YWx1ZSwgY29udmVydFN0cikKICAgICAgICBAcGFyYW0ge21peGVkfSB2YWx1ZSBuZXcgdmFsdWUgCiAgICAgICAgQHBhcmFtIHtib29sZWFufSBjb252ZXJ0U3RyIHdoZXRoZXIgdG8gY29udmVydCB2YWx1ZSBmcm9tIHN0cmluZyB0byBpbnRlcm5hbCBmb3JtYXQKICAgICAgICAqKi8gICAgICAgICAKICAgICAgICBzZXRWYWx1ZTogZnVuY3Rpb24odmFsdWUsIGNvbnZlcnRTdHIsIHJlc3BvbnNlKSB7CiAgICAgICAgICAgIGlmKGNvbnZlcnRTdHIpIHsKICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlucHV0LnN0cjJ2YWx1ZSh2YWx1ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYodGhpcy5jb250YWluZXIpIHsKICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLm9wdGlvbigndmFsdWUnLCB0aGlzLnZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkLndoZW4odGhpcy5yZW5kZXIocmVzcG9uc2UpKQogICAgICAgICAgICAudGhlbigkLnByb3h5KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFbXB0eSgpOwogICAgICAgICAgICB9LCB0aGlzKSk7CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICAvKioKICAgICAgICBBY3RpdmF0ZXMgaW5wdXQgb2YgdmlzaWJsZSBjb250YWluZXIgKGUuZy4gc2V0IGZvY3VzKQogICAgICAgIEBtZXRob2QgYWN0aXZhdGUoKQogICAgICAgICoqLyAgICAgICAgIAogICAgICAgIGFjdGl2YXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYodGhpcy5jb250YWluZXIpIHsKICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYWN0aXZhdGUoKTsgCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIAogICAgICAgIC8qKgogICAgICAgIFJlbW92ZXMgZWRpdGFibGUgZmVhdHVyZSBmcm9tIGVsZW1lbnQKICAgICAgICBAbWV0aG9kIGRlc3Ryb3koKQogICAgICAgICoqLyAgICAgICAgCiAgICAgICAgZGVzdHJveTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoaXMuZGlzYWJsZSgpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYodGhpcy5jb250YWluZXIpIHsKICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZGVzdHJveSgpOyAKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy5pbnB1dC5kZXN0cm95KCk7CgogICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMudG9nZ2xlICE9PSAnbWFudWFsJykgewogICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygnZWRpdGFibGUtY2xpY2snKTsKICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQub2ZmKHRoaXMub3B0aW9ucy50b2dnbGUgKyAnLmVkaXRhYmxlJyk7CiAgICAgICAgICAgIH0gCiAgICAgICAgICAgIAogICAgICAgICAgICB0aGlzLiRlbGVtZW50Lm9mZigic2F2ZS5pbnRlcm5hbCIpOwogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygnZWRpdGFibGUgZWRpdGFibGUtb3BlbiBlZGl0YWJsZS1kaXNhYmxlZCcpOwogICAgICAgICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZURhdGEoJ2VkaXRhYmxlJyk7CiAgICAgICAgfSAgICAgICAgCiAgICB9OwoKICAgIC8qIEVESVRBQkxFIFBMVUdJTiBERUZJTklUSU9OCiAgICAqID09PT09PT09PT09PT09PT09PT09PT09ICovCgogICAgLyoqCiAgICBqUXVlcnkgbWV0aG9kIHRvIGluaXRpYWxpemUgZWRpdGFibGUgZWxlbWVudC4KICAgIAogICAgQG1ldGhvZCAkKCkuZWRpdGFibGUob3B0aW9ucykKICAgIEBwYXJhbXMge09iamVjdH0gb3B0aW9ucwogICAgQGV4YW1wbGUKICAgICQoJyN1c2VybmFtZScpLmVkaXRhYmxlKHsKICAgICAgICB0eXBlOiAndGV4dCcsCiAgICAgICAgdXJsOiAnL3Bvc3QnLAogICAgICAgIHBrOiAxCiAgICB9KTsKICAgICoqLwogICAgJC5mbi5lZGl0YWJsZSA9IGZ1bmN0aW9uIChvcHRpb24pIHsKICAgICAgICAvL3NwZWNpYWwgQVBJIG1ldGhvZHMgcmV0dXJuaW5nIG5vbi1qcXVlcnkgb2JqZWN0CiAgICAgICAgdmFyIHJlc3VsdCA9IHt9LCBhcmdzID0gYXJndW1lbnRzLCBkYXRha2V5ID0gJ2VkaXRhYmxlJzsKICAgICAgICBzd2l0Y2ggKG9wdGlvbikgewogICAgICAgICAgICAvKioKICAgICAgICAgICAgUnVucyBjbGllbnQtc2lkZSB2YWxpZGF0aW9uIGZvciBhbGwgbWF0Y2hlZCBlZGl0YWJsZXMKICAgICAgICAgICAgCiAgICAgICAgICAgIEBtZXRob2QgdmFsaWRhdGUoKQogICAgICAgICAgICBAcmV0dXJucyB7T2JqZWN0fSB2YWxpZGF0aW9uIGVycm9ycyBtYXAKICAgICAgICAgICAgQGV4YW1wbGUKICAgICAgICAgICAgJCgnI3VzZXJuYW1lLCAjZnVsbG5hbWUnKS5lZGl0YWJsZSgndmFsaWRhdGUnKTsKICAgICAgICAgICAgLy8gcG9zc2libGUgcmVzdWx0OgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdXNlcm5hbWU6ICJ1c2VybmFtZSBpcyByZXF1aXJlZCIsCiAgICAgICAgICAgICAgZnVsbG5hbWU6ICJmdWxsbmFtZSBzaG91bGQgYmUgbWluaW11bSAzIGxldHRlcnMgbGVuZ3RoIgogICAgICAgICAgICB9CiAgICAgICAgICAgICoqLwogICAgICAgICAgICBjYXNlICd2YWxpZGF0ZSc6CiAgICAgICAgICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyksIGRhdGEgPSAkdGhpcy5kYXRhKGRhdGFrZXkpLCBlcnJvcjsKICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiAoZXJyb3IgPSBkYXRhLnZhbGlkYXRlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtkYXRhLm9wdGlvbnMubmFtZV0gPSBlcnJvcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICBSZXR1cm5zIGN1cnJlbnQgdmFsdWVzIG9mIGVkaXRhYmxlIGVsZW1lbnRzLiAgIAogICAgICAgICAgICBOb3RlIHRoYXQgaXQgcmV0dXJucyBhbiAqKm9iamVjdCoqIHdpdGggbmFtZS12YWx1ZSBwYWlycywgbm90IGEgdmFsdWUgaXRzZWxmLiBJdCBhbGxvd3MgdG8gZ2V0IGRhdGEgZnJvbSBzZXZlcmFsIGVsZW1lbnRzLiAgICAKICAgICAgICAgICAgSWYgdmFsdWUgb2Ygc29tZSBlZGl0YWJsZSBpcyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgaXQgaXMgZXhjbHVkZWQgZnJvbSByZXN1bHQgb2JqZWN0LgogICAgICAgICAgICBXaGVuIHBhcmFtIGBpc1NpbmdsZWAgaXMgc2V0IHRvICoqdHJ1ZSoqIC0gaXQgaXMgc3VwcG9zZWQgeW91IGhhdmUgc2luZ2xlIGVsZW1lbnQgYW5kIHdpbGwgcmV0dXJuIHZhbHVlIG9mIGVkaXRhYmxlIGluc3RlYWQgb2Ygb2JqZWN0LiAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgIEBtZXRob2QgZ2V0VmFsdWUoKQogICAgICAgICAgICBAcGFyYW0ge2Jvb2x9IGlzU2luZ2xlIHdoZXRoZXIgdG8gcmV0dXJuIGp1c3QgdmFsdWUgb2Ygc2luZ2xlIGVsZW1lbnQKICAgICAgICAgICAgQHJldHVybnMge09iamVjdH0gb2JqZWN0IG9mIGVsZW1lbnQgbmFtZXMgYW5kIHZhbHVlcwogICAgICAgICAgICBAZXhhbXBsZQogICAgICAgICAgICAkKCcjdXNlcm5hbWUsICNmdWxsbmFtZScpLmVkaXRhYmxlKCdnZXRWYWx1ZScpOwogICAgICAgICAgICAvL3Jlc3VsdDoKICAgICAgICAgICAgewogICAgICAgICAgICB1c2VybmFtZTogInN1cGVydXNlciIsCiAgICAgICAgICAgIGZ1bGxuYW1lOiAiSm9obiIKICAgICAgICAgICAgfQogICAgICAgICAgICAvL2lzU2luZ2xlID0gdHJ1ZQogICAgICAgICAgICAkKCcjdXNlcm5hbWUnKS5lZGl0YWJsZSgnZ2V0VmFsdWUnLCB0cnVlKTsKICAgICAgICAgICAgLy9yZXN1bHQgInN1cGVydXNlciIgCiAgICAgICAgICAgICoqLwogICAgICAgICAgICBjYXNlICdnZXRWYWx1ZSc6CiAgICAgICAgICAgICAgICBpZihhcmd1bWVudHMubGVuZ3RoID09PSAyICYmIGFyZ3VtZW50c1sxXSA9PT0gdHJ1ZSkgeyAvL2lzU2luZ2xlID0gdHJ1ZQogICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuZXEoMCkuZGF0YShkYXRha2V5KS52YWx1ZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKSwgZGF0YSA9ICR0aGlzLmRhdGEoZGF0YWtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBkYXRhLnZhbHVlICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbZGF0YS5vcHRpb25zLm5hbWVdID0gZGF0YS5pbnB1dC52YWx1ZTJzdWJtaXQoZGF0YS52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICBUaGlzIG1ldGhvZCBjb2xsZWN0cyB2YWx1ZXMgZnJvbSBzZXZlcmFsIGVkaXRhYmxlIGVsZW1lbnRzIGFuZCBzdWJtaXQgdGhlbSBhbGwgdG8gc2VydmVyLiAgIAogICAgICAgICAgICBJbnRlcm5hbGx5IGl0IHJ1bnMgY2xpZW50LXNpZGUgdmFsaWRhdGlvbiBmb3IgYWxsIGZpZWxkcyBhbmQgc3VibWl0cyBvbmx5IGluIGNhc2Ugb2Ygc3VjY2Vzcy4gIAogICAgICAgICAgICBTZWUgPGEgaHJlZj0iI25ld3JlY29yZCI+Y3JlYXRpbmcgbmV3IHJlY29yZHM8L2E+IGZvciBkZXRhaWxzLiAgCiAgICAgICAgICAgIFNpbmNlIDEuNS4xIGBzdWJtaXRgIGNhbiBiZSBhcHBsaWVkIHRvIHNpbmdsZSBlbGVtZW50IHRvIHNlbmQgZGF0YSBwcm9ncmFtbWF0aWNhbGx5LiBJbiB0aGF0IGNhc2UKICAgICAgICAgICAgYHVybGAsIGBzdWNjZXNzYCBhbmQgYGVycm9yYCBpcyB0YWtlbiBmcm9tIGluaXRpYWwgb3B0aW9ucyBhbmQgeW91IGNhbiBqdXN0IGNhbGwgYCQoJyN1c2VybmFtZScpLmVkaXRhYmxlKCdzdWJtaXQnKWAuIAogICAgICAgICAgICAKICAgICAgICAgICAgQG1ldGhvZCBzdWJtaXQob3B0aW9ucykKICAgICAgICAgICAgQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgCiAgICAgICAgICAgIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zLnVybCB1cmwgdG8gc3VibWl0IGRhdGEgCiAgICAgICAgICAgIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zLmRhdGEgYWRkaXRpb25hbCBkYXRhIHRvIHN1Ym1pdAogICAgICAgICAgICBAcGFyYW0ge29iamVjdH0gb3B0aW9ucy5hamF4T3B0aW9ucyBhZGRpdGlvbmFsIGFqYXggb3B0aW9ucwogICAgICAgICAgICBAcGFyYW0ge2Z1bmN0aW9ufSBvcHRpb25zLmVycm9yKG9iaikgZXJyb3IgaGFuZGxlciAKICAgICAgICAgICAgQHBhcmFtIHtmdW5jdGlvbn0gb3B0aW9ucy5zdWNjZXNzKG9iaixjb25maWcpIHN1Y2Nlc3MgaGFuZGxlcgogICAgICAgICAgICBAcmV0dXJucyB7T2JqZWN0fSBqUXVlcnkgb2JqZWN0CiAgICAgICAgICAgICoqLwogICAgICAgICAgICBjYXNlICdzdWJtaXQnOiAgLy9jb2xsZWN0cyB2YWx1ZSwgdmFsaWRhdGUgYW5kIHN1Ym1pdCB0byBzZXJ2ZXIgZm9yIGNyZWF0aW5nIG5ldyByZWNvcmQKICAgICAgICAgICAgICAgIHZhciBjb25maWcgPSBhcmd1bWVudHNbMV0gfHwge30sCiAgICAgICAgICAgICAgICAkZWxlbXMgPSB0aGlzLAogICAgICAgICAgICAgICAgZXJyb3JzID0gdGhpcy5lZGl0YWJsZSgndmFsaWRhdGUnKTsKCiAgICAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIG9rCiAgICAgICAgICAgICAgICBpZigkLmlzRW1wdHlPYmplY3QoZXJyb3JzKSkgewogICAgICAgICAgICAgICAgICAgIHZhciBhamF4T3B0aW9ucyA9IHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAvLyBmb3Igc2luZ2xlIGVsZW1lbnQgdXNlIHVybCwgc3VjY2VzcyBldGMgZnJvbSBvcHRpb25zCiAgICAgICAgICAgICAgICAgICAgaWYoJGVsZW1zLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWRpdGFibGUgPSAkZWxlbXMuZGF0YSgnZWRpdGFibGUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy9zdGFuZGFyZCBwYXJhbXMKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGVkaXRhYmxlLm9wdGlvbnMubmFtZSB8fCAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlZGl0YWJsZS5pbnB1dC52YWx1ZTJzdWJtaXQoZWRpdGFibGUudmFsdWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGs6ICh0eXBlb2YgZWRpdGFibGUub3B0aW9ucy5wayA9PT0gJ2Z1bmN0aW9uJykgPyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZS5vcHRpb25zLnBrLmNhbGwoZWRpdGFibGUub3B0aW9ucy5zY29wZSkgOiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZS5vcHRpb25zLnBrIAogICAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9hZGRpdGlvbmFsIHBhcmFtcwogICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgZWRpdGFibGUub3B0aW9ucy5wYXJhbXMgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IGVkaXRhYmxlLm9wdGlvbnMucGFyYW1zLmNhbGwoZWRpdGFibGUub3B0aW9ucy5zY29wZSwgcGFyYW1zKTsgIAogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90cnkgcGFyc2UganNvbiBpbiBzaW5nbGUgcXVvdGVzIChmcm9tIGRhdGEtcGFyYW1zIGF0dHJpYnV0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlLm9wdGlvbnMucGFyYW1zID0gJC5mbi5lZGl0YWJsZXV0aWxzLnRyeVBhcnNlSnNvbihlZGl0YWJsZS5vcHRpb25zLnBhcmFtcywgdHJ1ZSk7ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmV4dGVuZChwYXJhbXMsIGVkaXRhYmxlLm9wdGlvbnMucGFyYW1zKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgYWpheE9wdGlvbnMgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGVkaXRhYmxlLm9wdGlvbnMudXJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogcGFyYW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1BPU1QnICAKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSBzdWNjZXNzIC8gZXJyb3IgZnJvbSBvcHRpb25zIAogICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuc3VjY2VzcyA9IGNvbmZpZy5zdWNjZXNzIHx8IGVkaXRhYmxlLm9wdGlvbnMuc3VjY2VzczsKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmVycm9yID0gY29uZmlnLmVycm9yIHx8IGVkaXRhYmxlLm9wdGlvbnMuZXJyb3I7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vIG11bHRpcGxlIGVsZW1lbnRzCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuZWRpdGFibGUoJ2dldFZhbHVlJyk7IAogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgYWpheE9wdGlvbnMgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGNvbmZpZy51cmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB2YWx1ZXMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1BPU1QnCiAgICAgICAgICAgICAgICAgICAgICAgIH07ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgICAgIC8vIGFqYXggc3VjY2VzcyBjYWxsYWJjayAocmVzcG9uc2UgMjAwIE9LKQogICAgICAgICAgICAgICAgICAgIGFqYXhPcHRpb25zLnN1Y2Nlc3MgPSB0eXBlb2YgY29uZmlnLnN1Y2Nlc3MgPT09ICdmdW5jdGlvbicgPyBmdW5jdGlvbihyZXNwb25zZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnN1Y2Nlc3MuY2FsbCgkZWxlbXMsIHJlc3BvbnNlLCBjb25maWcpOwogICAgICAgICAgICAgICAgICAgICAgICB9IDogJC5ub29wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgLy8gYWpheCBlcnJvciBjYWxsYWJjawogICAgICAgICAgICAgICAgICAgIGFqYXhPcHRpb25zLmVycm9yID0gdHlwZW9mIGNvbmZpZy5lcnJvciA9PT0gJ2Z1bmN0aW9uJyA/IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5lcnJvci5hcHBseSgkZWxlbXMsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gOiAkLm5vb3A7CiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgLy8gZXh0ZW5kIGFqYXhPcHRpb25zICAgIAogICAgICAgICAgICAgICAgICAgIGlmKGNvbmZpZy5hamF4T3B0aW9ucykgeyAKICAgICAgICAgICAgICAgICAgICAgICAgJC5leHRlbmQoYWpheE9wdGlvbnMsIGNvbmZpZy5hamF4T3B0aW9ucyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIC8vIGV4dHJhIGRhdGEgCiAgICAgICAgICAgICAgICAgICAgaWYoY29uZmlnLmRhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJC5leHRlbmQoYWpheE9wdGlvbnMuZGF0YSwgY29uZmlnLmRhdGEpOwogICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAvLyBwZXJmb3JtIGFqYXggcmVxdWVzdAogICAgICAgICAgICAgICAgICAgICQuYWpheChhamF4T3B0aW9ucyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgeyAvL2NsaWVudC1zaWRlIHZhbGlkYXRpb24gZXJyb3IKICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgY29uZmlnLmVycm9yID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5lcnJvci5jYWxsKCRlbGVtcywgZXJyb3JzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICAgICAgLy9yZXR1cm4ganF1ZXJ5IG9iamVjdAogICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpLCAKICAgICAgICAgICAgICAgIGRhdGEgPSAkdGhpcy5kYXRhKGRhdGFrZXkpLCAKICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyAmJiBvcHRpb247CgogICAgICAgICAgICAvL2ZvciBkZWxlZ2F0ZWQgdGFyZ2V0cyBkbyBub3Qgc3RvcmUgYGVkaXRhYmxlYCBvYmplY3QgZm9yIGVsZW1lbnQKICAgICAgICAgICAgLy9pdCdzIGFsbG93cyBzZXZlcmFsIGRpZmZlcmVudCBzZWxlY3RvcnMuCiAgICAgICAgICAgIC8vc2VlOiBodHRwczovL2dpdGh1Yi5jb20vdml0YWxldHMveC1lZGl0YWJsZS9pc3N1ZXMvMzEyICAgIAogICAgICAgICAgICBpZihvcHRpb25zICYmIG9wdGlvbnMuc2VsZWN0b3IpIHsKICAgICAgICAgICAgICAgIGRhdGEgPSBuZXcgRWRpdGFibGUodGhpcywgb3B0aW9ucyk7CiAgICAgICAgICAgICAgICByZXR1cm47IAogICAgICAgICAgICB9ICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKCFkYXRhKSB7CiAgICAgICAgICAgICAgICAkdGhpcy5kYXRhKGRhdGFrZXksIChkYXRhID0gbmV3IEVkaXRhYmxlKHRoaXMsIG9wdGlvbnMpKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJykgeyAvL2NhbGwgbWV0aG9kIAogICAgICAgICAgICAgICAgZGF0YVtvcHRpb25dLmFwcGx5KGRhdGEsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MsIDEpKTsKICAgICAgICAgICAgfSAKICAgICAgICB9KTsKICAgIH07ICAgIAogICAgICAgICAgICAKCiAgICAkLmZuLmVkaXRhYmxlLmRlZmF1bHRzID0gewogICAgICAgIC8qKgogICAgICAgIFR5cGUgb2YgaW5wdXQuIENhbiBiZSA8Y29kZT50ZXh0fHRleHRhcmVhfHNlbGVjdHxkYXRlfGNoZWNrbGlzdDwvY29kZT4gYW5kIG1vcmUKCiAgICAgICAgQHByb3BlcnR5IHR5cGUgCiAgICAgICAgQHR5cGUgc3RyaW5nCiAgICAgICAgQGRlZmF1bHQgJ3RleHQnCiAgICAgICAgKiovCiAgICAgICAgdHlwZTogJ3RleHQnLCAgICAgICAgCiAgICAgICAgLyoqCiAgICAgICAgU2V0cyBkaXNhYmxlZCBzdGF0ZSBvZiBlZGl0YWJsZQoKICAgICAgICBAcHJvcGVydHkgZGlzYWJsZWQgCiAgICAgICAgQHR5cGUgYm9vbGVhbgogICAgICAgIEBkZWZhdWx0IGZhbHNlCiAgICAgICAgKiovICAgICAgICAgCiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLAogICAgICAgIC8qKgogICAgICAgIEhvdyB0byB0b2dnbGUgZWRpdGFibGUuIENhbiBiZSA8Y29kZT5jbGlja3xkYmxjbGlja3xtb3VzZWVudGVyfG1hbnVhbDwvY29kZT4uICAgCiAgICAgICAgV2hlbiBzZXQgdG8gPGNvZGU+bWFudWFsPC9jb2RlPiB5b3Ugc2hvdWxkIG1hbnVhbGx5IGNhbGwgPGNvZGU+c2hvdy9oaWRlPC9jb2RlPiBtZXRob2RzIG9mIGVkaXRhYmxlLiAgICAKICAgICAgICAqKk5vdGUqKjogaWYgeW91IGNhbGwgPGNvZGU+c2hvdzwvY29kZT4gb3IgPGNvZGU+dG9nZ2xlPC9jb2RlPiBpbnNpZGUgKipjbGljayoqIGhhbmRsZXIgb2Ygc29tZSBET00gZWxlbWVudCwgCiAgICAgICAgeW91IG5lZWQgdG8gYXBwbHkgPGNvZGU+ZS5zdG9wUHJvcGFnYXRpb24oKTwvY29kZT4gYmVjYXVzZSBjb250YWluZXJzIGFyZSBiZWluZyBjbG9zZWQgb24gYW55IGNsaWNrIG9uIGRvY3VtZW50LgogICAgICAgIAogICAgICAgIEBleGFtcGxlCiAgICAgICAgJCgnI2VkaXQtYnV0dG9uJykuY2xpY2soZnVuY3Rpb24oZSkgewogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAkKCcjdXNlcm5hbWUnKS5lZGl0YWJsZSgndG9nZ2xlJyk7CiAgICAgICAgfSk7CgogICAgICAgIEBwcm9wZXJ0eSB0b2dnbGUgCiAgICAgICAgQHR5cGUgc3RyaW5nCiAgICAgICAgQGRlZmF1bHQgJ2NsaWNrJwogICAgICAgICoqLyAgICAgICAgICAKICAgICAgICB0b2dnbGU6ICdjbGljaycsCiAgICAgICAgLyoqCiAgICAgICAgVGV4dCBzaG93biB3aGVuIGVsZW1lbnQgaXMgZW1wdHkuCgogICAgICAgIEBwcm9wZXJ0eSBlbXB0eXRleHQgCiAgICAgICAgQHR5cGUgc3RyaW5nCiAgICAgICAgQGRlZmF1bHQgJ0VtcHR5JwogICAgICAgICoqLyAgICAgICAgIAogICAgICAgIGVtcHR5dGV4dDogJ0VtcHR5JywKICAgICAgICAvKioKICAgICAgICBBbGxvd3MgdG8gYXV0b21hdGljYWxseSBzZXQgZWxlbWVudCdzIHRleHQgYmFzZWQgb24gaXQncyB2YWx1ZS4gQ2FuIGJlIDxjb2RlPmF1dG98YWx3YXlzfG5ldmVyPC9jb2RlPi4gVXNlZnVsIGZvciBzZWxlY3QgYW5kIGRhdGUuCiAgICAgICAgRm9yIGV4YW1wbGUsIGlmIGRyb3Bkb3duIGxpc3QgaXMgPGNvZGU+ezE6ICdhJywgMjogJ2InfTwvY29kZT4gYW5kIGVsZW1lbnQncyB2YWx1ZSBzZXQgdG8gPGNvZGU+MTwvY29kZT4sIGl0J3MgaHRtbCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2V0IHRvIDxjb2RlPidhJzwvY29kZT4uICAKICAgICAgICA8Y29kZT5hdXRvPC9jb2RlPiAtIHRleHQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHNldCBvbmx5IGlmIGVsZW1lbnQgaXMgZW1wdHkuICAKICAgICAgICA8Y29kZT5hbHdheXN8bmV2ZXI8L2NvZGU+IC0gYWx3YXlzKG5ldmVyKSB0cnkgdG8gc2V0IGVsZW1lbnQncyB0ZXh0LgoKICAgICAgICBAcHJvcGVydHkgYXV0b3RleHQgCiAgICAgICAgQHR5cGUgc3RyaW5nCiAgICAgICAgQGRlZmF1bHQgJ2F1dG8nCiAgICAgICAgKiovICAgICAgICAgIAogICAgICAgIGF1dG90ZXh0OiAnYXV0bycsIAogICAgICAgIC8qKgogICAgICAgIEluaXRpYWwgdmFsdWUgb2YgaW5wdXQuIElmIG5vdCBzZXQsIHRha2VuIGZyb20gZWxlbWVudCdzIHRleHQuICAKICAgICAgICBOb3RlLCB0aGF0IGlmIGVsZW1lbnQncyB0ZXh0IGlzIGVtcHR5IC0gdGV4dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHZhbHVlIGFuZCBjYW4gYmUgY3VzdG9taXplZCAoc2VlIGBhdXRvdGV4dGAgb3B0aW9uKS4gIAogICAgICAgIEZvciBleGFtcGxlLCB0byBkaXNwbGF5IGN1cnJlbmN5IHNpZ246CiAgICAgICAgQGV4YW1wbGUKICAgICAgICA8YSBpZD0icHJpY2UiIGRhdGEtdHlwZT0idGV4dCIgZGF0YS12YWx1ZT0iMTAwIj48L2E+CiAgICAgICAgPHNjcmlwdD4KICAgICAgICAkKCcjcHJpY2UnKS5lZGl0YWJsZSh7CiAgICAgICAgICAgIC4uLgogICAgICAgICAgICBkaXNwbGF5OiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgICQodGhpcykudGV4dCh2YWx1ZSArICckJyk7CiAgICAgICAgICAgIH0gCiAgICAgICAgfSkgCiAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAgICAgICAgICAKICAgICAgICBAcHJvcGVydHkgdmFsdWUgCiAgICAgICAgQHR5cGUgbWl4ZWQKICAgICAgICBAZGVmYXVsdCBlbGVtZW50J3MgdGV4dAogICAgICAgICoqLwogICAgICAgIHZhbHVlOiBudWxsLAogICAgICAgIC8qKgogICAgICAgIENhbGxiYWNrIHRvIHBlcmZvcm0gY3VzdG9tIGRpc3BsYXlpbmcgb2YgdmFsdWUgaW4gZWxlbWVudCdzIHRleHQuICAKICAgICAgICBJZiBgbnVsbGAsIGRlZmF1bHQgaW5wdXQncyBkaXNwbGF5IHVzZWQuICAKICAgICAgICBJZiBgZmFsc2VgLCBubyBkaXNwbGF5aW5nIG1ldGhvZHMgd2lsbCBiZSBjYWxsZWQsIGVsZW1lbnQncyB0ZXh0IHdpbGwgbmV2ZXIgY2hhbmdlLiAgCiAgICAgICAgUnVucyB1bmRlciBlbGVtZW50J3Mgc2NvcGUuICAKICAgICAgICBfKipQYXJhbWV0ZXJzOioqXyAgCiAgICAgICAgCiAgICAgICAgKiBgdmFsdWVgIGN1cnJlbnQgdmFsdWUgdG8gYmUgZGlzcGxheWVkCiAgICAgICAgKiBgcmVzcG9uc2VgIHNlcnZlciByZXNwb25zZSAoaWYgZGlzcGxheSBjYWxsZWQgYWZ0ZXIgYWpheCBzdWJtaXQpLCBzaW5jZSAxLjQuMAogICAgICAgICAKICAgICAgICBGb3IgX2lucHV0cyB3aXRoIHNvdXJjZV8gKHNlbGVjdCwgY2hlY2tsaXN0KSBwYXJhbWV0ZXJzIGFyZSBkaWZmZXJlbnQ6ICAKICAgICAgICAgIAogICAgICAgICogYHZhbHVlYCBjdXJyZW50IHZhbHVlIHRvIGJlIGRpc3BsYXllZAogICAgICAgICogYHNvdXJjZURhdGFgIGFycmF5IG9mIGl0ZW1zIGZvciBjdXJyZW50IGlucHV0IChlLmcuIGRyb3Bkb3duIGl0ZW1zKSAKICAgICAgICAqIGByZXNwb25zZWAgc2VydmVyIHJlc3BvbnNlIChpZiBkaXNwbGF5IGNhbGxlZCBhZnRlciBhamF4IHN1Ym1pdCksIHNpbmNlIDEuNC4wCiAgICAgICAgICAgICAgICAgIAogICAgICAgIFRvIGdldCBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbXMgdXNlIGAkLmZuLmVkaXRhYmxldXRpbHMuaXRlbXNCeVZhbHVlKHZhbHVlLCBzb3VyY2VEYXRhKWAuCiAgICAgICAgCiAgICAgICAgQHByb3BlcnR5IGRpc3BsYXkgCiAgICAgICAgQHR5cGUgZnVuY3Rpb258Ym9vbGVhbgogICAgICAgIEBkZWZhdWx0IG51bGwKICAgICAgICBAc2luY2UgMS4yLjAKICAgICAgICBAZXhhbXBsZQogICAgICAgIGRpc3BsYXk6IGZ1bmN0aW9uKHZhbHVlLCBzb3VyY2VEYXRhKSB7CiAgICAgICAgICAgLy9kaXNwbGF5IGNoZWNrbGlzdCBhcyBjb21tYS1zZXBhcmF0ZWQgdmFsdWVzCiAgICAgICAgICAgdmFyIGh0bWwgPSBbXSwKICAgICAgICAgICAgICAgY2hlY2tlZCA9ICQuZm4uZWRpdGFibGV1dGlscy5pdGVtc0J5VmFsdWUodmFsdWUsIHNvdXJjZURhdGEpOwogICAgICAgICAgICAgICAKICAgICAgICAgICBpZihjaGVja2VkLmxlbmd0aCkgewogICAgICAgICAgICAgICAkLmVhY2goY2hlY2tlZCwgZnVuY3Rpb24oaSwgdikgeyBodG1sLnB1c2goJC5mbi5lZGl0YWJsZXV0aWxzLmVzY2FwZSh2LnRleHQpKTsgfSk7CiAgICAgICAgICAgICAgICQodGhpcykuaHRtbChodG1sLmpvaW4oJywgJykpOwogICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICQodGhpcykuZW1wdHkoKTsgCiAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAqKi8gICAgICAgICAgCiAgICAgICAgZGlzcGxheTogbnVsbCwKICAgICAgICAvKioKICAgICAgICBDc3MgY2xhc3MgYXBwbGllZCB3aGVuIGVkaXRhYmxlIHRleHQgaXMgZW1wdHkuCgogICAgICAgIEBwcm9wZXJ0eSBlbXB0eWNsYXNzIAogICAgICAgIEB0eXBlIHN0cmluZwogICAgICAgIEBzaW5jZSAxLjQuMSAgICAgICAgCiAgICAgICAgQGRlZmF1bHQgZWRpdGFibGUtZW1wdHkKICAgICAgICAqKi8gICAgICAgIAogICAgICAgIGVtcHR5Y2xhc3M6ICdlZGl0YWJsZS1lbXB0eScsCiAgICAgICAgLyoqCiAgICAgICAgQ3NzIGNsYXNzIGFwcGxpZWQgd2hlbiB2YWx1ZSB3YXMgc3RvcmVkIGJ1dCBub3Qgc2VudCB0byBzZXJ2ZXIgKGBwa2AgaXMgZW1wdHkgb3IgYHNlbmQgPSAnbmV2ZXInYCkuICAKICAgICAgICBZb3UgbWF5IHNldCBpdCB0byBgbnVsbGAgaWYgeW91IHdvcmsgd2l0aCBlZGl0YWJsZXMgbG9jYWxseSBhbmQgc3VibWl0IHRoZW0gdG9nZXRoZXIuICAKCiAgICAgICAgQHByb3BlcnR5IHVuc2F2ZWRjbGFzcyAKICAgICAgICBAdHlwZSBzdHJpbmcKICAgICAgICBAc2luY2UgMS40LjEgICAgICAgIAogICAgICAgIEBkZWZhdWx0IGVkaXRhYmxlLXVuc2F2ZWQKICAgICAgICAqKi8gICAgICAgIAogICAgICAgIHVuc2F2ZWRjbGFzczogJ2VkaXRhYmxlLXVuc2F2ZWQnLAogICAgICAgIC8qKgogICAgICAgIElmIHNlbGVjdG9yIGlzIHByb3ZpZGVkLCBlZGl0YWJsZSB3aWxsIGJlIGRlbGVnYXRlZCB0byB0aGUgc3BlY2lmaWVkIHRhcmdldHMuICAKICAgICAgICBVc2VmdWxsIGZvciBkeW5hbWljYWxseSBnZW5lcmF0ZWQgRE9NIGVsZW1lbnRzLiAgCiAgICAgICAgKipQbGVhc2Ugbm90ZSoqLCB0aGF0IGRlbGVnYXRlZCB0YXJnZXRzIGNhbid0IGJlIGluaXRpYWxpemVkIHdpdGggYGVtcHR5dGV4dGAgYW5kIGBhdXRvdGV4dGAgb3B0aW9ucywgCiAgICAgICAgYXMgdGhleSBhY3R1YWxseSBiZWNvbWUgZWRpdGFibGUgb25seSBhZnRlciBmaXJzdCBjbGljay4gIAogICAgICAgIFlvdSBzaG91bGQgbWFudWFsbHkgc2V0IGNsYXNzIGBlZGl0YWJsZS1jbGlja2AgdG8gdGhlc2UgZWxlbWVudHMuICAKICAgICAgICBBbHNvLCBpZiBlbGVtZW50IG9yaWdpbmFsbHkgZW1wdHkgeW91IHNob3VsZCBhZGQgY2xhc3MgYGVkaXRhYmxlLWVtcHR5YCwgc2V0IGBkYXRhLXZhbHVlPSIiYCBhbmQgd3JpdGUgZW1wdHl0ZXh0IGludG8gZWxlbWVudDoKCiAgICAgICAgQHByb3BlcnR5IHNlbGVjdG9yIAogICAgICAgIEB0eXBlIHN0cmluZwogICAgICAgIEBzaW5jZSAxLjQuMSAgICAgICAgCiAgICAgICAgQGRlZmF1bHQgbnVsbAogICAgICAgIEBleGFtcGxlCiAgICAgICAgPGRpdiBpZD0idXNlciI+CiAgICAgICAgICA8IS0tIGVtcHR5IC0tPgogICAgICAgICAgPGEgaHJlZj0iIyIgZGF0YS1uYW1lPSJ1c2VybmFtZSIgZGF0YS10eXBlPSJ0ZXh0IiBjbGFzcz0iZWRpdGFibGUtY2xpY2sgZWRpdGFibGUtZW1wdHkiIGRhdGEtdmFsdWU9IiIgdGl0bGU9IlVzZXJuYW1lIj5FbXB0eTwvYT4KICAgICAgICAgIDwhLS0gbm9uLWVtcHR5IC0tPgogICAgICAgICAgPGEgaHJlZj0iIyIgZGF0YS1uYW1lPSJncm91cCIgZGF0YS10eXBlPSJzZWxlY3QiIGRhdGEtc291cmNlPSIvZ3JvdXBzIiBkYXRhLXZhbHVlPSIxIiBjbGFzcz0iZWRpdGFibGUtY2xpY2siIHRpdGxlPSJHcm91cCI+T3BlcmF0b3I8L2E+CiAgICAgICAgPC9kaXY+ICAgICAKICAgICAgICAKICAgICAgICA8c2NyaXB0PgogICAgICAgICQoJyN1c2VyJykuZWRpdGFibGUoewogICAgICAgICAgICBzZWxlY3RvcjogJ2EnLAogICAgICAgICAgICB1cmw6ICcvcG9zdCcsCiAgICAgICAgICAgIHBrOiAxCiAgICAgICAgfSk7CiAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAgKiovICAgICAgICAgCiAgICAgICAgc2VsZWN0b3I6IG51bGwsCiAgICAgICAgLyoqCiAgICAgICAgQ29sb3IgdXNlZCB0byBoaWdobGlnaHQgZWxlbWVudCBhZnRlciB1cGRhdGUuIEltcGxlbWVudGVkIHZpYSBDU1MzIHRyYW5zaXRpb24sIHdvcmtzIGluIG1vZGVybiBicm93c2Vycy4KICAgICAgICAKICAgICAgICBAcHJvcGVydHkgaGlnaGxpZ2h0IAogICAgICAgIEB0eXBlIHN0cmluZ3xib29sZWFuCiAgICAgICAgQHNpbmNlIDEuNC41ICAgICAgICAKICAgICAgICBAZGVmYXVsdCAjRkZGRjgwIAogICAgICAgICoqLwogICAgICAgIGhpZ2hsaWdodDogJyNGRkZGODAnCiAgICB9OwogICAgCn0od2luZG93LmpRdWVyeSkpOwoKLyoqCkFic3RyYWN0SW5wdXQgLSBiYXNlIGNsYXNzIGZvciBhbGwgZWRpdGFibGUgaW5wdXRzLgpJdCBkZWZpbmVzIGludGVyZmFjZSB0byBiZSBpbXBsZW1lbnRlZCBieSBhbnkgaW5wdXQgdHlwZS4KVG8gY3JlYXRlIHlvdXIgb3duIGlucHV0IHlvdSBjYW4gaW5oZXJpdCBmcm9tIHRoaXMgY2xhc3MuCgpAY2xhc3MgYWJzdHJhY3RpbnB1dAoqKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgLy90eXBlcwogICAgJC5mbi5lZGl0YWJsZXR5cGVzID0ge307CgogICAgdmFyIEFic3RyYWN0SW5wdXQgPSBmdW5jdGlvbiAoKSB7IH07CgogICAgQWJzdHJhY3RJbnB1dC5wcm90b3R5cGUgPSB7CiAgICAgICAvKioKICAgICAgICBJbml0aWFsaXplcyBpbnB1dAoKICAgICAgICBAbWV0aG9kIGluaXQoKSAKICAgICAgICAqKi8KICAgICAgIGluaXQ6IGZ1bmN0aW9uKHR5cGUsIG9wdGlvbnMsIGRlZmF1bHRzKSB7CiAgICAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgZGVmYXVsdHMsIG9wdGlvbnMpOwogICAgICAgfSwKCiAgICAgICAvKgogICAgICAgdGhpcyBtZXRob2QgY2FsbGVkIGJlZm9yZSByZW5kZXIgdG8gaW5pdCAkdHBsIHRoYXQgaXMgaW5zZXJ0ZWQgaW4gRE9NCiAgICAgICAqLwogICAgICAgcHJlcmVuZGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICB0aGlzLiR0cGwgPSAkKHRoaXMub3B0aW9ucy50cGwpOyAvL3dob2xlIHRwbCBhcyBqcXVlcnkgb2JqZWN0ICAgIAogICAgICAgICAgIHRoaXMuJGlucHV0ID0gdGhpcy4kdHBsOyAgICAgICAgIC8vY29udHJvbCBpdHNlbGYsIGNhbiBiZSBjaGFuZ2VkIGluIHJlbmRlciBtZXRob2QKICAgICAgICAgICB0aGlzLiRjbGVhciA9IG51bGw7ICAgICAgICAgICAgICAvL2NsZWFyIGJ1dHRvbgogICAgICAgICAgIHRoaXMuZXJyb3IgPSBudWxsOyAgICAgICAgICAgICAgIC8vZXJyb3IgbWVzc2FnZSwgaWYgaW5wdXQgY2Fubm90IGJlIHJlbmRlcmVkICAgICAgICAgICAKICAgICAgIH0sCiAgICAgICAKICAgICAgIC8qKgogICAgICAgIFJlbmRlcnMgaW5wdXQgZnJvbSB0cGwuIENhbiByZXR1cm4galF1ZXJ5IGRlZmVycmVkIG9iamVjdC4KICAgICAgICBDYW4gYmUgb3ZlcndyaXR0ZW4gaW4gY2hpbGQgb2JqZWN0cwoKICAgICAgICBAbWV0aG9kIHJlbmRlcigpCiAgICAgICAqKi8KICAgICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7CgogICAgICAgfSwgCgogICAgICAgLyoqCiAgICAgICAgU2V0cyBlbGVtZW50J3MgaHRtbCBieSB2YWx1ZS4gCgogICAgICAgIEBtZXRob2QgdmFsdWUyaHRtbCh2YWx1ZSwgZWxlbWVudCkKICAgICAgICBAcGFyYW0ge21peGVkfSB2YWx1ZQogICAgICAgIEBwYXJhbSB7RE9NRWxlbWVudH0gZWxlbWVudAogICAgICAgKiovCiAgICAgICB2YWx1ZTJodG1sOiBmdW5jdGlvbih2YWx1ZSwgZWxlbWVudCkgewogICAgICAgICAgICQoZWxlbWVudClbdGhpcy5vcHRpb25zLmVzY2FwZSA/ICd0ZXh0JyA6ICdodG1sJ10oJC50cmltKHZhbHVlKSk7CiAgICAgICB9LAoKICAgICAgIC8qKgogICAgICAgIENvbnZlcnRzIGVsZW1lbnQncyBodG1sIHRvIHZhbHVlCgogICAgICAgIEBtZXRob2QgaHRtbDJ2YWx1ZShodG1sKQogICAgICAgIEBwYXJhbSB7c3RyaW5nfSBodG1sCiAgICAgICAgQHJldHVybnMge21peGVkfQogICAgICAgKiovCiAgICAgICBodG1sMnZhbHVlOiBmdW5jdGlvbihodG1sKSB7CiAgICAgICAgICAgcmV0dXJuICQoJzxkaXY+JykuaHRtbChodG1sKS50ZXh0KCk7CiAgICAgICB9LAoKICAgICAgIC8qKgogICAgICAgIENvbnZlcnRzIHZhbHVlIHRvIHN0cmluZyAoZm9yIGludGVybmFsIGNvbXBhcmUpLiBGb3Igc3VibWl0dGluZyB0byBzZXJ2ZXIgdXNlZCB2YWx1ZTJzdWJtaXQoKS4KCiAgICAgICAgQG1ldGhvZCB2YWx1ZTJzdHIodmFsdWUpIAogICAgICAgIEBwYXJhbSB7bWl4ZWR9IHZhbHVlCiAgICAgICAgQHJldHVybnMge3N0cmluZ30KICAgICAgICoqLwogICAgICAgdmFsdWUyc3RyOiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgIH0sIAoKICAgICAgIC8qKgogICAgICAgIENvbnZlcnRzIHN0cmluZyByZWNlaXZlZCBmcm9tIHNlcnZlciBpbnRvIHZhbHVlLiBVc3VhbGx5IGZyb20gYGRhdGEtdmFsdWVgIGF0dHJpYnV0ZS4KCiAgICAgICAgQG1ldGhvZCBzdHIydmFsdWUoc3RyKQogICAgICAgIEBwYXJhbSB7c3RyaW5nfSBzdHIKICAgICAgICBAcmV0dXJucyB7bWl4ZWR9CiAgICAgICAqKi8KICAgICAgIHN0cjJ2YWx1ZTogZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgcmV0dXJuIHN0cjsKICAgICAgIH0sIAogICAgICAgCiAgICAgICAvKioKICAgICAgICBDb252ZXJ0cyB2YWx1ZSBmb3Igc3VibWl0dGluZyB0byBzZXJ2ZXIuIFJlc3VsdCBjYW4gYmUgc3RyaW5nIG9yIG9iamVjdC4KCiAgICAgICAgQG1ldGhvZCB2YWx1ZTJzdWJtaXQodmFsdWUpIAogICAgICAgIEBwYXJhbSB7bWl4ZWR9IHZhbHVlCiAgICAgICAgQHJldHVybnMge21peGVkfQogICAgICAgKiovCiAgICAgICB2YWx1ZTJzdWJtaXQ6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgfSwKCiAgICAgICAvKioKICAgICAgICBTZXRzIHZhbHVlIG9mIGlucHV0LgoKICAgICAgICBAbWV0aG9kIHZhbHVlMmlucHV0KHZhbHVlKSAKICAgICAgICBAcGFyYW0ge21peGVkfSB2YWx1ZQogICAgICAgKiovCiAgICAgICB2YWx1ZTJpbnB1dDogZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICB0aGlzLiRpbnB1dC52YWwodmFsdWUpOwogICAgICAgfSwKCiAgICAgICAvKioKICAgICAgICBSZXR1cm5zIHZhbHVlIG9mIGlucHV0LiBWYWx1ZSBjYW4gYmUgb2JqZWN0IChlLmcuIGRhdGVwaWNrZXIpCgogICAgICAgIEBtZXRob2QgaW5wdXQydmFsdWUoKSAKICAgICAgICoqLwogICAgICAgaW5wdXQydmFsdWU6IGZ1bmN0aW9uKCkgeyAKICAgICAgICAgICByZXR1cm4gdGhpcy4kaW5wdXQudmFsKCk7CiAgICAgICB9LCAKCiAgICAgICAvKioKICAgICAgICBBY3RpdmF0ZXMgaW5wdXQuIEZvciB0ZXh0IGl0IHNldHMgZm9jdXMuCgogICAgICAgIEBtZXRob2QgYWN0aXZhdGUoKSAKICAgICAgICoqLwogICAgICAgYWN0aXZhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgIGlmKHRoaXMuJGlucHV0LmlzKCc6dmlzaWJsZScpKSB7CiAgICAgICAgICAgICAgIHRoaXMuJGlucHV0LmZvY3VzKCk7CiAgICAgICAgICAgfQogICAgICAgfSwKCiAgICAgICAvKioKICAgICAgICBDcmVhdGVzIGlucHV0LgoKICAgICAgICBAbWV0aG9kIGNsZWFyKCkgCiAgICAgICAqKi8gICAgICAgIAogICAgICAgY2xlYXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgIHRoaXMuJGlucHV0LnZhbChudWxsKTsKICAgICAgIH0sCgogICAgICAgLyoqCiAgICAgICAgbWV0aG9kIHRvIGVzY2FwZSBodG1sLgogICAgICAgKiovCiAgICAgICBlc2NhcGU6IGZ1bmN0aW9uKHN0cikgewogICAgICAgICAgIHJldHVybiAkKCc8ZGl2PicpLnRleHQoc3RyKS5odG1sKCk7CiAgICAgICB9LAogICAgICAgCiAgICAgICAvKioKICAgICAgICBhdHRhY2ggaGFuZGxlciB0byBhdXRvbWF0aWNhbGx5IHN1Ym1pdCBmb3JtIHdoZW4gdmFsdWUgY2hhbmdlZCAodXNlZnVsIHdoZW4gYnV0dG9ucyBub3Qgc2hvd24pCiAgICAgICAqKi8KICAgICAgIGF1dG9zdWJtaXQ6IGZ1bmN0aW9uKCkgewogICAgICAgIAogICAgICAgfSwKICAgICAgIAogICAgICAgLyoqCiAgICAgICBBZGRpdGlvbmFsIGFjdGlvbnMgd2hlbiBkZXN0cm95aW5nIGVsZW1lbnQgCiAgICAgICAqKi8KICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkgewogICAgICAgfSwKCiAgICAgICAvLyAtLS0tLS0tLSBoZWxwZXIgZnVuY3Rpb25zIC0tLS0tLS0tCiAgICAgICBzZXRDbGFzczogZnVuY3Rpb24oKSB7ICAgICAgICAgIAogICAgICAgICAgIGlmKHRoaXMub3B0aW9ucy5pbnB1dGNsYXNzKSB7CiAgICAgICAgICAgICAgIHRoaXMuJGlucHV0LmFkZENsYXNzKHRoaXMub3B0aW9ucy5pbnB1dGNsYXNzKTsgCiAgICAgICAgICAgfSAKICAgICAgIH0sCgogICAgICAgc2V0QXR0cjogZnVuY3Rpb24oYXR0cikgewogICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnNbYXR0cl0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnNbYXR0cl0gIT09IG51bGwpIHsKICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQuYXR0cihhdHRyLCB0aGlzLm9wdGlvbnNbYXR0cl0pOwogICAgICAgICAgIH0gCiAgICAgICB9LAogICAgICAgCiAgICAgICBvcHRpb246IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKICAgICAgICAgICAgdGhpcy5vcHRpb25zW2tleV0gPSB2YWx1ZTsKICAgICAgIH0KICAgICAgIAogICAgfTsKICAgICAgICAKICAgIEFic3RyYWN0SW5wdXQuZGVmYXVsdHMgPSB7ICAKICAgICAgICAvKioKICAgICAgICBIVE1MIHRlbXBsYXRlIG9mIGlucHV0LiBOb3JtYWxseSB5b3Ugc2hvdWxkIG5vdCBjaGFuZ2UgaXQuCgogICAgICAgIEBwcm9wZXJ0eSB0cGwgCiAgICAgICAgQHR5cGUgc3RyaW5nCiAgICAgICAgQGRlZmF1bHQgJycKICAgICAgICAqKi8gICAKICAgICAgICB0cGw6ICcnLAogICAgICAgIC8qKgogICAgICAgIENTUyBjbGFzcyBhdXRvbWF0aWNhbGx5IGFwcGxpZWQgdG8gaW5wdXQKICAgICAgICAKICAgICAgICBAcHJvcGVydHkgaW5wdXRjbGFzcyAKICAgICAgICBAdHlwZSBzdHJpbmcKICAgICAgICBAZGVmYXVsdCBudWxsCiAgICAgICAgKiovICAgICAgICAgCiAgICAgICAgaW5wdXRjbGFzczogbnVsbCwKICAgICAgICAKICAgICAgICAvKioKICAgICAgICBJZiBgdHJ1ZWAgLSBodG1sIHdpbGwgYmUgZXNjYXBlZCBpbiBjb250ZW50IG9mIGVsZW1lbnQgdmlhICQudGV4dCgpIG1ldGhvZC4gIAogICAgICAgIElmIGBmYWxzZWAgLSBodG1sIHdpbGwgbm90IGJlIGVzY2FwZWQsICQuaHRtbCgpIHVzZWQuICAKICAgICAgICBXaGVuIHlvdSB1c2Ugb3duIGBkaXNwbGF5YCBmdW5jdGlvbiwgdGhpcyBvcHRpb24gb2J2aW9zbHkgaGFzIG5vIGVmZmVjdC4KICAgICAgICAKICAgICAgICBAcHJvcGVydHkgZXNjYXBlIAogICAgICAgIEB0eXBlIGJvb2xlYW4KICAgICAgICBAc2luY2UgMS41LjAKICAgICAgICBAZGVmYXVsdCB0cnVlCiAgICAgICAgKiovICAgICAgICAgCiAgICAgICAgZXNjYXBlOiB0cnVlLAogICAgICAgICAgICAgICAgCiAgICAgICAgLy9zY29wZSBmb3IgZXh0ZXJuYWwgbWV0aG9kcyAoZS5nLiBzb3VyY2UgZGVmaW5lZCBhcyBmdW5jdGlvbikKICAgICAgICAvL2ZvciBpbnRlcm5hbCB1c2Ugb25seQogICAgICAgIHNjb3BlOiBudWxsLAogICAgICAgIAogICAgICAgIC8vbmVlZCB0byByZS1kZWNsYXJlIHNob3didXR0b25zIGhlcmUgdG8gZ2V0IGl0J3MgdmFsdWUgZnJvbSBjb21tb24gY29uZmlnIChwYXNzZWQgb25seSBvcHRpb25zIGV4aXN0aW5nIGluIGRlZmF1bHRzKQogICAgICAgIHNob3didXR0b25zOiB0cnVlIAogICAgfTsKICAgIAogICAgJC5leHRlbmQoJC5mbi5lZGl0YWJsZXR5cGVzLCB7YWJzdHJhY3RpbnB1dDogQWJzdHJhY3RJbnB1dH0pOwogICAgICAgIAp9KHdpbmRvdy5qUXVlcnkpKTsKCi8qKgpMaXN0IC0gYWJzdHJhY3QgY2xhc3MgZm9yIGlucHV0cyB0aGF0IGhhdmUgc291cmNlIG9wdGlvbiBsb2FkZWQgZnJvbSBqcyBhcnJheSBvciB2aWEgYWpheAoKQGNsYXNzIGxpc3QKQGV4dGVuZHMgYWJzdHJhY3RpbnB1dAoqKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICAKICAgIHZhciBMaXN0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgICAgIAogICAgfTsKCiAgICAkLmZuLmVkaXRhYmxldXRpbHMuaW5oZXJpdChMaXN0LCAkLmZuLmVkaXRhYmxldHlwZXMuYWJzdHJhY3RpbnB1dCk7CgogICAgJC5leHRlbmQoTGlzdC5wcm90b3R5cGUsIHsKICAgICAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGRlZmVycmVkID0gJC5EZWZlcnJlZCgpOwoKICAgICAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7CiAgICAgICAgICAgIHRoaXMub25Tb3VyY2VSZWFkeShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckxpc3QoKTsKICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoKTsKICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMub3B0aW9ucy5zb3VyY2VFcnJvcjsKICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmUoKTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpOwogICAgICAgIH0sCgogICAgICAgIGh0bWwydmFsdWU6IGZ1bmN0aW9uIChodG1sKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOyAvL2Nhbid0IHNldCB2YWx1ZSBieSB0ZXh0CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICB2YWx1ZTJodG1sOiBmdW5jdGlvbiAodmFsdWUsIGVsZW1lbnQsIGRpc3BsYXksIHJlc3BvbnNlKSB7CiAgICAgICAgICAgIHZhciBkZWZlcnJlZCA9ICQuRGVmZXJyZWQoKSwKICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIGRpc3BsYXkgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9jdXN0b20gZGlzcGxheSBtZXRob2QKICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheS5jYWxsKGVsZW1lbnQsIHZhbHVlLCB0aGlzLnNvdXJjZURhdGEsIHJlc3BvbnNlKTsgCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZTJodG1sRmluYWwodmFsdWUsIGVsZW1lbnQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIAogICAgICAgICAgICAvL2ZvciBudWxsIHZhbHVlIGp1c3QgY2FsbCBzdWNjZXNzIHdpdGhvdXQgbG9hZGluZyBzb3VyY2UKICAgICAgICAgICAgaWYodmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgc3VjY2Vzcy5jYWxsKHRoaXMpOyAgIAogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICB0aGlzLm9uU291cmNlUmVhZHkoc3VjY2VzcywgZnVuY3Rpb24gKCkgeyBkZWZlcnJlZC5yZXNvbHZlKCk7IH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpOwogICAgICAgIH0sICAKCiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLSBhZGRpdGlvbmFsIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0KCiAgICAgICAgb25Tb3VyY2VSZWFkeTogZnVuY3Rpb24gKHN1Y2Nlc3MsIGVycm9yKSB7CiAgICAgICAgICAgIC8vcnVuIHNvdXJjZSBpZiBpdCBmdW5jdGlvbgogICAgICAgICAgICB2YXIgc291cmNlOwogICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5zb3VyY2UpKSB7CiAgICAgICAgICAgICAgICBzb3VyY2UgPSB0aGlzLm9wdGlvbnMuc291cmNlLmNhbGwodGhpcy5vcHRpb25zLnNjb3BlKTsKICAgICAgICAgICAgICAgIHRoaXMuc291cmNlRGF0YSA9IG51bGw7CiAgICAgICAgICAgICAgICAvL25vdGU6IGlmIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgc291cmNlIGFzIFVSTCAtIHNvdXJjZURhdGEgd2lsbCBiZSB0YWtlbiBmcm9tIGNhaGNlIGFuZCBubyBleHRyYSByZXF1ZXN0IHBlcmZvcm1lZAogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgc291cmNlID0gdGhpcy5vcHRpb25zLnNvdXJjZTsKICAgICAgICAgICAgfSAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgLy9pZiBhbGxyZWFkeSBsb2FkZWQganVzdCBjYWxsIHN1Y2Nlc3MKICAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLnNvdXJjZUNhY2hlICYmICQuaXNBcnJheSh0aGlzLnNvdXJjZURhdGEpKSB7CiAgICAgICAgICAgICAgICBzdWNjZXNzLmNhbGwodGhpcyk7CiAgICAgICAgICAgICAgICByZXR1cm47IAogICAgICAgICAgICB9CgogICAgICAgICAgICAvL3RyeSBwYXJzZSBqc29uIGluIHNpbmdsZSBxdW90ZXMgKGZvciBkb3VibGUgcXVvdGVzIGpxdWVyeSBkb2VzIGF1dG9tYXRpY2FsbHkpCiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBzb3VyY2UgPSAkLmZuLmVkaXRhYmxldXRpbHMudHJ5UGFyc2VKc29uKHNvdXJjZSwgZmFsc2UpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICBlcnJvci5jYWxsKHRoaXMpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL2xvYWRpbmcgZnJvbSB1cmwKICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAvL3RyeSB0byBnZXQgc291cmNlRGF0YSBmcm9tIGNhY2hlCiAgICAgICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMuc291cmNlQ2FjaGUpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgY2FjaGVJRCA9IHNvdXJjZSwKICAgICAgICAgICAgICAgICAgICBjYWNoZTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCEkKGRvY3VtZW50KS5kYXRhKGNhY2hlSUQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLmRhdGEoY2FjaGVJRCwge30pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjYWNoZSA9ICQoZG9jdW1lbnQpLmRhdGEoY2FjaGVJRCk7CgogICAgICAgICAgICAgICAgICAgIC8vY2hlY2sgZm9yIGNhY2hlZCBkYXRhCiAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlLmxvYWRpbmcgPT09IGZhbHNlICYmIGNhY2hlLnNvdXJjZURhdGEpIHsgLy90YWtlIHNvdXJjZSBmcm9tIGNhY2hlCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlRGF0YSA9IGNhY2hlLnNvdXJjZURhdGE7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9QcmVwZW5kKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MuY2FsbCh0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FjaGUubG9hZGluZyA9PT0gdHJ1ZSkgeyAvL2NhY2hlIGlzIGxvYWRpbmcsIHB1dCBjYWxsYmFjayBpbiBzdGFjayB0byBiZSBjYWxsZWQgbGF0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUuY2FsbGJhY2tzLnB1c2goJC5wcm94eShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZURhdGEgPSBjYWNoZS5zb3VyY2VEYXRhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb1ByZXBlbmQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MuY2FsbCh0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcykpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9hbHNvIGNvbGxlY3RpbmcgZXJyb3IgY2FsbGJhY2tzCiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLmVycl9jYWxsYmFja3MucHVzaCgkLnByb3h5KGVycm9yLCB0aGlzKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAvL25vIGNhY2hlIHlldCwgYWN0aXZhdGUgaXQKICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUubG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLmNhbGxiYWNrcyA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5lcnJfY2FsbGJhY2tzID0gW107CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvL2FqYXhPcHRpb25zIGZvciBzb3VyY2UuIENhbiBiZSBvdmVyd3JpdHRlbiBidCBvcHRpb25zLnNvdXJjZU9wdGlvbnMKICAgICAgICAgICAgICAgIHZhciBhamF4T3B0aW9ucyA9ICQuZXh0ZW5kKHsKICAgICAgICAgICAgICAgICAgICB1cmw6IHNvdXJjZSwKICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZ2V0JywKICAgICAgICAgICAgICAgICAgICBjYWNoZTogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJywKICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiAkLnByb3h5KGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNhY2hlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VEYXRhID0gdGhpcy5tYWtlQXJyYXkoZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCQuaXNBcnJheSh0aGlzLnNvdXJjZURhdGEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjYWNoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vc3RvcmUgcmVzdWx0IGluIGNhY2hlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUuc291cmNlRGF0YSA9IHRoaXMuc291cmNlRGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3J1biBzdWNjZXNzIGNhbGxiYWNrcyBmb3Igb3RoZXIgZmllbGRzIHdhaXRpbmcgZm9yIHRoaXMgc291cmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5lYWNoKGNhY2hlLmNhbGxiYWNrcywgZnVuY3Rpb24gKCkgeyB0aGlzLmNhbGwoKTsgfSk7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb1ByZXBlbmQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MuY2FsbCh0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLmNhbGwodGhpcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjYWNoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcnVuIGVycm9yIGNhbGxiYWNrcyBmb3Igb3RoZXIgZmllbGRzIHdhaXRpbmcgZm9yIHRoaXMgc291cmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5lYWNoKGNhY2hlLmVycl9jYWxsYmFja3MsIGZ1bmN0aW9uICgpIHsgdGhpcy5jYWxsKCk7IH0pOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpLAogICAgICAgICAgICAgICAgICAgIGVycm9yOiAkLnByb3h5KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IuY2FsbCh0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2FjaGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9ydW4gZXJyb3IgY2FsbGJhY2tzIGZvciBvdGhlciBmaWVsZHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmVhY2goY2FjaGUuZXJyX2NhbGxiYWNrcywgZnVuY3Rpb24gKCkgeyB0aGlzLmNhbGwoKTsgfSk7IAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSwgdGhpcykKICAgICAgICAgICAgICAgIH0sIHRoaXMub3B0aW9ucy5zb3VyY2VPcHRpb25zKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy9sb2FkaW5nIHNvdXJjZURhdGEgZnJvbSBzZXJ2ZXIKICAgICAgICAgICAgICAgICQuYWpheChhamF4T3B0aW9ucyk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfSBlbHNlIHsgLy9vcHRpb25zIGFzIGpzb24vYXJyYXkKICAgICAgICAgICAgICAgIHRoaXMuc291cmNlRGF0YSA9IHRoaXMubWFrZUFycmF5KHNvdXJjZSk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZigkLmlzQXJyYXkodGhpcy5zb3VyY2VEYXRhKSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuZG9QcmVwZW5kKCk7CiAgICAgICAgICAgICAgICAgICAgc3VjY2Vzcy5jYWxsKHRoaXMpOyAgIAogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBlcnJvci5jYWxsKHRoaXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgZG9QcmVwZW5kOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmKHRoaXMub3B0aW9ucy5wcmVwZW5kID09PSBudWxsIHx8IHRoaXMub3B0aW9ucy5wcmVwZW5kID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIHJldHVybjsgIAogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBpZighJC5pc0FycmF5KHRoaXMucHJlcGVuZERhdGEpKSB7CiAgICAgICAgICAgICAgICAvL3J1biBwcmVwZW5kIGlmIGl0IGlzIGZ1bmN0aW9uIChvbmNlKQogICAgICAgICAgICAgICAgaWYgKCQuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMucHJlcGVuZCkpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucHJlcGVuZCA9IHRoaXMub3B0aW9ucy5wcmVwZW5kLmNhbGwodGhpcy5vcHRpb25zLnNjb3BlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vdHJ5IHBhcnNlIGpzb24gaW4gc2luZ2xlIHF1b3RlcwogICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnByZXBlbmQgPSAkLmZuLmVkaXRhYmxldXRpbHMudHJ5UGFyc2VKc29uKHRoaXMub3B0aW9ucy5wcmVwZW5kLCB0cnVlKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy9jb252ZXJ0IHByZXBlbmQgZnJvbSBzdHJpbmcgdG8gb2JqZWN0CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5wcmVwZW5kID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wcmVwZW5kID0geycnOiB0aGlzLm9wdGlvbnMucHJlcGVuZH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHRoaXMucHJlcGVuZERhdGEgPSB0aGlzLm1ha2VBcnJheSh0aGlzLm9wdGlvbnMucHJlcGVuZCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKCQuaXNBcnJheSh0aGlzLnByZXBlbmREYXRhKSAmJiAkLmlzQXJyYXkodGhpcy5zb3VyY2VEYXRhKSkgewogICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VEYXRhID0gdGhpcy5wcmVwZW5kRGF0YS5jb25jYXQodGhpcy5zb3VyY2VEYXRhKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIC8qCiAgICAgICAgIHJlbmRlcnMgaW5wdXQgbGlzdAogICAgICAgICovCiAgICAgICAgcmVuZGVyTGlzdDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIC8vIHRoaXMgbWV0aG9kIHNob3VsZCBiZSBvdmVyd3JpdHRlbiBpbiBjaGlsZCBjbGFzcwogICAgICAgIH0sCiAgICAgICAKICAgICAgICAgLyoKICAgICAgICAgc2V0IGVsZW1lbnQncyBodG1sIGJ5IHZhbHVlCiAgICAgICAgKi8KICAgICAgICB2YWx1ZTJodG1sRmluYWw6IGZ1bmN0aW9uKHZhbHVlLCBlbGVtZW50KSB7CiAgICAgICAgICAgIC8vIHRoaXMgbWV0aG9kIHNob3VsZCBiZSBvdmVyd3JpdHRlbiBpbiBjaGlsZCBjbGFzcwogICAgICAgIH0sICAgICAgICAKCiAgICAgICAgLyoqCiAgICAgICAgKiBjb252ZXJ0IGRhdGEgdG8gYXJyYXkgc3VpdGFibGUgZm9yIHNvdXJjZURhdGEsIGUuZy4gW3t2YWx1ZTogMSwgdGV4dDogJ2FiYyd9LCB7Li4ufV0KICAgICAgICAqLwogICAgICAgIG1ha2VBcnJheTogZnVuY3Rpb24oZGF0YSkgewogICAgICAgICAgICB2YXIgY291bnQsIG9iaiwgcmVzdWx0ID0gW10sIGl0ZW0sIGl0ZXJhdGVJdGVtOwogICAgICAgICAgICBpZighZGF0YSB8fCB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyAKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYoJC5pc0FycmF5KGRhdGEpKSB7IC8vYXJyYXkKICAgICAgICAgICAgICAgIC8qIAogICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gdG8gaXRlcmF0ZSBpbnNpZGUgaXRlbSBvZiBhcnJheSBpZiBpdGVtIGlzIG9iamVjdC4KICAgICAgICAgICAgICAgICAgIENhY2x1bGF0ZXMgY291bnQgb2Yga2V5cyBpbiBpdGVtIGFuZCBzdG9yZSBpbiBvYmouIAogICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgIGl0ZXJhdGVJdGVtID0gZnVuY3Rpb24gKGssIHYpIHsKICAgICAgICAgICAgICAgICAgICBvYmogPSB7dmFsdWU6IGssIHRleHQ6IHZ9OwogICAgICAgICAgICAgICAgICAgIGlmKGNvdW50KysgPj0gMikgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ly8gZXhpdCBmcm9tIGBlYWNoYCBpZiBpdGVtIGhhcyBtb3JlIHRoYW4gb25lIGtleS4KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGRhdGFbaV07IAogICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JykgewogICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IDA7IC8vY291bnQgb2Yga2V5cyBpbnNpZGUgaXRlbQogICAgICAgICAgICAgICAgICAgICAgICAkLmVhY2goaXRlbSwgaXRlcmF0ZUl0ZW0pOwogICAgICAgICAgICAgICAgICAgICAgICAvL2Nhc2U6IFt7dmFsMTogJ3RleHQxJ30sIHt2YWwyOiAndGV4dDJ9IC4uLl0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoY291bnQgPT09IDEpIHsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChvYmopOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY2FzZTogW3t2YWx1ZTogMSwgdGV4dDogJ3RleHQxJ30sIHt2YWx1ZTogMiwgdGV4dDogJ3RleHQyJ30sIC4uLl0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKGNvdW50ID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZW1vdmVkIGNoZWNrIG9mIGV4aXN0YW5jZTogaXRlbS5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSAmJiBpdGVtLmhhc093blByb3BlcnR5KCd0ZXh0JykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGl0ZW0uY2hpbGRyZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmNoaWxkcmVuID0gdGhpcy5tYWtlQXJyYXkoaXRlbS5jaGlsZHJlbik7ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vY2FzZTogWyd0ZXh0MScsICd0ZXh0MicgLi4uXQogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7dmFsdWU6IGl0ZW0sIHRleHQ6IGl0ZW19KTsgCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgeyAgLy9jYXNlOiB7dmFsMTogJ3RleHQxJywgdmFsMjogJ3RleHQyLCAuLi59CiAgICAgICAgICAgICAgICAkLmVhY2goZGF0YSwgZnVuY3Rpb24gKGssIHYpIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7dmFsdWU6IGssIHRleHQ6IHZ9KTsKICAgICAgICAgICAgICAgIH0pOyAgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9LAogICAgICAgIAogICAgICAgIG9wdGlvbjogZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewogICAgICAgICAgICB0aGlzLm9wdGlvbnNba2V5XSA9IHZhbHVlOwogICAgICAgICAgICBpZihrZXkgPT09ICdzb3VyY2UnKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZURhdGEgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGtleSA9PT0gJ3ByZXBlbmQnKSB7CiAgICAgICAgICAgICAgICB0aGlzLnByZXBlbmREYXRhID0gbnVsbDsKICAgICAgICAgICAgfSAgICAgICAgICAgIAogICAgICAgIH0gICAgICAgIAoKICAgIH0pOyAgICAgIAoKICAgIExpc3QuZGVmYXVsdHMgPSAkLmV4dGVuZCh7fSwgJC5mbi5lZGl0YWJsZXR5cGVzLmFic3RyYWN0aW5wdXQuZGVmYXVsdHMsIHsKICAgICAgICAvKioKICAgICAgICBTb3VyY2UgZGF0YSBmb3IgbGlzdC4gIAogICAgICAgIElmICoqYXJyYXkqKiAtIGl0IHNob3VsZCBiZSBpbiBmb3JtYXQ6IGBbe3ZhbHVlOiAxLCB0ZXh0OiAidGV4dDEifSwge3ZhbHVlOiAyLCB0ZXh0OiAidGV4dDIifSwgLi4uXWAgIAogICAgICAgIEZvciBjb21wYWJpbGl0eSwgb2JqZWN0IGZvcm1hdCBpcyBhbHNvIHN1cHBvcnRlZDogYHsiMSI6ICJ0ZXh0MSIsICIyIjogInRleHQyIiAuLi59YCBidXQgaXQgZG9lcyBub3QgZ3VhcmFudGVlIGVsZW1lbnRzIG9yZGVyLgogICAgICAgIAogICAgICAgIElmICoqc3RyaW5nKiogLSBjb25zaWRlcmVkIGFqYXggdXJsIHRvIGxvYWQgaXRlbXMuIEluIHRoYXQgY2FzZSByZXN1bHRzIHdpbGwgYmUgY2FjaGVkIGZvciBmaWVsZHMgd2l0aCB0aGUgc2FtZSBzb3VyY2UgYW5kIG5hbWUuIFNlZSBhbHNvIGBzb3VyY2VDYWNoZWAgb3B0aW9uLgogICAgICAgICAgCiAgICAgICAgSWYgKipmdW5jdGlvbioqLCBpdCBzaG91bGQgcmV0dXJuIGRhdGEgaW4gZm9ybWF0IGFib3ZlIChzaW5jZSAxLjQuMCkuCiAgICAgICAgCiAgICAgICAgU2luY2UgMS40LjEga2V5IGBjaGlsZHJlbmAgc3VwcG9ydGVkIHRvIHJlbmRlciBPUFRHUk9VUCAoZm9yICoqc2VsZWN0KiogaW5wdXQgb25seSkuICAKICAgICAgICBgW3t0ZXh0OiAiZ3JvdXAxIiwgY2hpbGRyZW46IFt7dmFsdWU6IDEsIHRleHQ6ICJ0ZXh0MSJ9LCB7dmFsdWU6IDIsIHRleHQ6ICJ0ZXh0MiJ9XX0sIC4uLl1gIAoKCQkKICAgICAgICBAcHJvcGVydHkgc291cmNlIAogICAgICAgIEB0eXBlIHN0cmluZyB8IGFycmF5IHwgb2JqZWN0IHwgZnVuY3Rpb24KICAgICAgICBAZGVmYXVsdCBudWxsCiAgICAgICAgKiovICAgICAgICAgCiAgICAgICAgc291cmNlOiBudWxsLCAKICAgICAgICAvKioKICAgICAgICBEYXRhIGF1dG9tYXRpY2FsbHkgcHJlcGVuZGVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgZHJvcGRvd24gbGlzdC4KICAgICAgICAKICAgICAgICBAcHJvcGVydHkgcHJlcGVuZCAKICAgICAgICBAdHlwZSBzdHJpbmcgfCBhcnJheSB8IG9iamVjdCB8IGZ1bmN0aW9uCiAgICAgICAgQGRlZmF1bHQgZmFsc2UKICAgICAgICAqKi8gICAgICAgICAKICAgICAgICBwcmVwZW5kOiBmYWxzZSwKICAgICAgICAvKioKICAgICAgICBFcnJvciBtZXNzYWdlIHdoZW4gbGlzdCBjYW5ub3QgYmUgbG9hZGVkIChlLmcuIGFqYXggZXJyb3IpCiAgICAgICAgCiAgICAgICAgQHByb3BlcnR5IHNvdXJjZUVycm9yIAogICAgICAgIEB0eXBlIHN0cmluZwogICAgICAgIEBkZWZhdWx0IEVycm9yIHdoZW4gbG9hZGluZyBsaXN0CiAgICAgICAgKiovICAgICAgICAgIAogICAgICAgIHNvdXJjZUVycm9yOiAnRXJyb3Igd2hlbiBsb2FkaW5nIGxpc3QnLAogICAgICAgIC8qKgogICAgICAgIGlmIDxjb2RlPnRydWU8L2NvZGU+IGFuZCBzb3VyY2UgaXMgKipzdHJpbmcgdXJsKiogLSByZXN1bHRzIHdpbGwgYmUgY2FjaGVkIGZvciBmaWVsZHMgd2l0aCB0aGUgc2FtZSBzb3VyY2UuICAgIAogICAgICAgIFVzZWZ1bGwgZm9yIGVkaXRhYmxlIGNvbHVtbiBpbiBncmlkIHRvIHByZXZlbnQgZXh0cmEgcmVxdWVzdHMuCiAgICAgICAgCiAgICAgICAgQHByb3BlcnR5IHNvdXJjZUNhY2hlIAogICAgICAgIEB0eXBlIGJvb2xlYW4KICAgICAgICBAZGVmYXVsdCB0cnVlCiAgICAgICAgQHNpbmNlIDEuMi4wCiAgICAgICAgKiovICAgICAgICAKICAgICAgICBzb3VyY2VDYWNoZTogdHJ1ZSwKICAgICAgICAvKioKICAgICAgICBBZGRpdGlvbmFsIGFqYXggb3B0aW9ucyB0byBiZSB1c2VkIGluICQuYWpheCgpIHdoZW4gbG9hZGluZyBsaXN0IGZyb20gc2VydmVyLgogICAgICAgIFVzZWZ1bCB0byBzZW5kIGV4dHJhIHBhcmFtZXRlcnMgKGBkYXRhYCBrZXkpIG9yIGNoYW5nZSByZXF1ZXN0IG1ldGhvZCAoYHR5cGVgIGtleSkuCiAgICAgICAgCiAgICAgICAgQHByb3BlcnR5IHNvdXJjZU9wdGlvbnMgCiAgICAgICAgQHR5cGUgb2JqZWN0fGZ1bmN0aW9uCiAgICAgICAgQGRlZmF1bHQgbnVsbAogICAgICAgIEBzaW5jZSAxLjUuMAogICAgICAgICoqLyAgICAgICAgCiAgICAgICAgc291cmNlT3B0aW9uczogbnVsbAogICAgfSk7CgogICAgJC5mbi5lZGl0YWJsZXR5cGVzLmxpc3QgPSBMaXN0OyAgICAgIAoKfSh3aW5kb3cualF1ZXJ5KSk7CgovKioKVGV4dCBpbnB1dAoKQGNsYXNzIHRleHQKQGV4dGVuZHMgYWJzdHJhY3RpbnB1dApAZmluYWwKQGV4YW1wbGUKPGEgaHJlZj0iIyIgaWQ9InVzZXJuYW1lIiBkYXRhLXR5cGU9InRleHQiIGRhdGEtcGs9IjEiPmF3ZXNvbWU8L2E+CjxzY3JpcHQ+CiQoZnVuY3Rpb24oKXsKICAgICQoJyN1c2VybmFtZScpLmVkaXRhYmxlKHsKICAgICAgICB1cmw6ICcvcG9zdCcsCiAgICAgICAgdGl0bGU6ICdFbnRlciB1c2VybmFtZScKICAgIH0pOwp9KTsKPC9zY3JpcHQ+CioqLwooZnVuY3Rpb24gKCQpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIAogICAgdmFyIFRleHQgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgIHRoaXMuaW5pdCgndGV4dCcsIG9wdGlvbnMsIFRleHQuZGVmYXVsdHMpOwogICAgfTsKCiAgICAkLmZuLmVkaXRhYmxldXRpbHMuaW5oZXJpdChUZXh0LCAkLmZuLmVkaXRhYmxldHlwZXMuYWJzdHJhY3RpbnB1dCk7CgogICAgJC5leHRlbmQoVGV4dC5wcm90b3R5cGUsIHsKICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgIHRoaXMucmVuZGVyQ2xlYXIoKTsKICAgICAgICAgICB0aGlzLnNldENsYXNzKCk7CiAgICAgICAgICAgdGhpcy5zZXRBdHRyKCdwbGFjZWhvbGRlcicpOwogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgYWN0aXZhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZih0aGlzLiRpbnB1dC5pcygnOnZpc2libGUnKSkgewogICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQuZm9jdXMoKTsKICAgICAgICAgICAgICAgICQuZm4uZWRpdGFibGV1dGlscy5zZXRDdXJzb3JQb3NpdGlvbih0aGlzLiRpbnB1dC5nZXQoMCksIHRoaXMuJGlucHV0LnZhbCgpLmxlbmd0aCk7CiAgICAgICAgICAgICAgICBpZih0aGlzLnRvZ2dsZUNsZWFyKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVDbGVhcigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICAvL3JlbmRlciBjbGVhciBidXR0b24KICAgICAgICByZW5kZXJDbGVhcjogIGZ1bmN0aW9uKCkgewogICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY2xlYXIpIHsKICAgICAgICAgICAgICAgdGhpcy4kY2xlYXIgPSAkKCc8c3BhbiBjbGFzcz0iZWRpdGFibGUtY2xlYXIteCI+PC9zcGFuPicpOwogICAgICAgICAgICAgICB0aGlzLiRpbnB1dC5hZnRlcih0aGlzLiRjbGVhcikKICAgICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdwYWRkaW5nLXJpZ2h0JywgMjQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgLmtleXVwKCQucHJveHkoZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2Fycm93cywgZW50ZXIsIHRhYiwgZXRjCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKH4kLmluQXJyYXkoZS5rZXlDb2RlLCBbNDAsMzgsOSwxMywyN10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnRvZ2dsZUNsZWFyKGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAucGFyZW50KCkuY3NzKCdwb3NpdGlvbicsICdyZWxhdGl2ZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICB0aGlzLiRjbGVhci5jbGljaygkLnByb3h5KHRoaXMuY2xlYXIsIHRoaXMpKTsgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgIH0gICAgICAgICAgICAKICAgICAgICB9LAogICAgICAgIAogICAgICAgIHBvc3RyZW5kZXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAvKgogICAgICAgICAgICAvL25vdyBgY2xlYXJgIGlzIHBvc2l0aW9uZWQgdmlhIGNzcwogICAgICAgICAgICBpZih0aGlzLiRjbGVhcikgewogICAgICAgICAgICAgICAgLy9jYW4gcG9zaXRpb24gY2xlYXIgYnV0dG9uIG9ubHkgaGVyZSwgd2hlbiBmb3JtIGlzIHNob3duIGFuZCBoZWlnaHQgY2FuIGJlIGNhbGN1bGF0ZWQKLy8gICAgICAgICAgICAgICAgdmFyIGggPSB0aGlzLiRpbnB1dC5vdXRlckhlaWdodCh0cnVlKSB8fCAyMCwKICAgICAgICAgICAgICAgIHZhciBoID0gdGhpcy4kY2xlYXIucGFyZW50KCkuaGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSAoaCAtIHRoaXMuJGNsZWFyLmhlaWdodCgpKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvL3RoaXMuJGNsZWFyLmNzcyh7Ym90dG9tOiBkZWx0YSwgcmlnaHQ6IGRlbHRhfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgKi8gCiAgICAgICAgfSwKICAgICAgICAKICAgICAgICAvL3Nob3cgLyBoaWRlIGNsZWFyIGJ1dHRvbgogICAgICAgIHRvZ2dsZUNsZWFyOiBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGlmKCF0aGlzLiRjbGVhcikgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgbGVuID0gdGhpcy4kaW5wdXQudmFsKCkubGVuZ3RoLAogICAgICAgICAgICAgICAgdmlzaWJsZSA9IHRoaXMuJGNsZWFyLmlzKCc6dmlzaWJsZScpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICBpZihsZW4gJiYgIXZpc2libGUpIHsKICAgICAgICAgICAgICAgIHRoaXMuJGNsZWFyLnNob3coKTsKICAgICAgICAgICAgfSAKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmKCFsZW4gJiYgdmlzaWJsZSkgewogICAgICAgICAgICAgICAgdGhpcy4kY2xlYXIuaGlkZSgpOwogICAgICAgICAgICB9IAogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgY2xlYXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgIHRoaXMuJGNsZWFyLmhpZGUoKTsKICAgICAgICAgICB0aGlzLiRpbnB1dC52YWwoJycpLmZvY3VzKCk7CiAgICAgICAgfSAgICAgICAgICAKICAgIH0pOwoKICAgIFRleHQuZGVmYXVsdHMgPSAkLmV4dGVuZCh7fSwgJC5mbi5lZGl0YWJsZXR5cGVzLmFic3RyYWN0aW5wdXQuZGVmYXVsdHMsIHsKICAgICAgICAvKioKICAgICAgICBAcHJvcGVydHkgdHBsIAogICAgICAgIEBkZWZhdWx0IDxpbnB1dCB0eXBlPSJ0ZXh0Ij4KICAgICAgICAqKi8gICAgICAgICAKICAgICAgICB0cGw6ICc8aW5wdXQgdHlwZT0idGV4dCI+JywKICAgICAgICAvKioKICAgICAgICBQbGFjZWhvbGRlciBhdHRyaWJ1dGUgb2YgaW5wdXQuIFNob3duIHdoZW4gaW5wdXQgaXMgZW1wdHkuCgogICAgICAgIEBwcm9wZXJ0eSBwbGFjZWhvbGRlciAKICAgICAgICBAdHlwZSBzdHJpbmcKICAgICAgICBAZGVmYXVsdCBudWxsCiAgICAgICAgKiovICAgICAgICAgICAgIAogICAgICAgIHBsYWNlaG9sZGVyOiBudWxsLAogICAgICAgIAogICAgICAgIC8qKgogICAgICAgIFdoZXRoZXIgdG8gc2hvdyBgY2xlYXJgIGJ1dHRvbiAKICAgICAgICAKICAgICAgICBAcHJvcGVydHkgY2xlYXIgCiAgICAgICAgQHR5cGUgYm9vbGVhbgogICAgICAgIEBkZWZhdWx0IHRydWUgICAgICAgIAogICAgICAgICoqLwogICAgICAgIGNsZWFyOiB0cnVlCiAgICB9KTsKCiAgICAkLmZuLmVkaXRhYmxldHlwZXMudGV4dCA9IFRleHQ7Cgp9KHdpbmRvdy5qUXVlcnkpKTsKCi8qKgpUZXh0YXJlYSBpbnB1dAoKQGNsYXNzIHRleHRhcmVhCkBleHRlbmRzIGFic3RyYWN0aW5wdXQKQGZpbmFsCkBleGFtcGxlCjxhIGhyZWY9IiMiIGlkPSJjb21tZW50cyIgZGF0YS10eXBlPSJ0ZXh0YXJlYSIgZGF0YS1waz0iMSI+YXdlc29tZSBjb21tZW50ITwvYT4KPHNjcmlwdD4KJChmdW5jdGlvbigpewogICAgJCgnI2NvbW1lbnRzJykuZWRpdGFibGUoewogICAgICAgIHVybDogJy9wb3N0JywKICAgICAgICB0aXRsZTogJ0VudGVyIGNvbW1lbnRzJywKICAgICAgICByb3dzOiAxMAogICAgfSk7Cn0pOwo8L3NjcmlwdD4KKiovCihmdW5jdGlvbiAoJCkgewogICAgInVzZSBzdHJpY3QiOwogICAgCiAgICB2YXIgVGV4dGFyZWEgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgIHRoaXMuaW5pdCgndGV4dGFyZWEnLCBvcHRpb25zLCBUZXh0YXJlYS5kZWZhdWx0cyk7CiAgICB9OwoKICAgICQuZm4uZWRpdGFibGV1dGlscy5pbmhlcml0KFRleHRhcmVhLCAkLmZuLmVkaXRhYmxldHlwZXMuYWJzdHJhY3RpbnB1dCk7CgogICAgJC5leHRlbmQoVGV4dGFyZWEucHJvdG90eXBlLCB7CiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuc2V0Q2xhc3MoKTsKICAgICAgICAgICAgdGhpcy5zZXRBdHRyKCdwbGFjZWhvbGRlcicpOwogICAgICAgICAgICB0aGlzLnNldEF0dHIoJ3Jvd3MnKTsgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vY3RybCArIGVudGVyCiAgICAgICAgICAgIHRoaXMuJGlucHV0LmtleWRvd24oZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIGlmIChlLmN0cmxLZXkgJiYgZS53aGljaCA9PT0gMTMpIHsKICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ2Zvcm0nKS5zdWJtaXQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICAKICAgICAgIC8vdXNpbmcgYHdoaXRlLXNwYWNlOiBwcmUtd3JhcGAgc29sdmVzIFxuICA8LS0+IEJSIGNvbnZlcnNpb24gdmVyeSBlbGVnYW50IQogICAgICAgLyogCiAgICAgICB2YWx1ZTJodG1sOiBmdW5jdGlvbih2YWx1ZSwgZWxlbWVudCkgewogICAgICAgICAgICB2YXIgaHRtbCA9ICcnLCBsaW5lczsKICAgICAgICAgICAgaWYodmFsdWUpIHsKICAgICAgICAgICAgICAgIGxpbmVzID0gdmFsdWUuc3BsaXQoIlxuIik7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgbGluZXNbaV0gPSAkKCc8ZGl2PicpLnRleHQobGluZXNbaV0pLmh0bWwoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGh0bWwgPSBsaW5lcy5qb2luKCc8YnI+Jyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJChlbGVtZW50KS5odG1sKGh0bWwpOwogICAgICAgIH0sCiAgICAgICAKICAgICAgICBodG1sMnZhbHVlOiBmdW5jdGlvbihodG1sKSB7CiAgICAgICAgICAgIGlmKCFodG1sKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciByZWdleCA9IG5ldyBSZWdFeHAoU3RyaW5nLmZyb21DaGFyQ29kZSgxMCksICdnJyk7CiAgICAgICAgICAgIHZhciBsaW5lcyA9IGh0bWwuc3BsaXQoLzxiclxzKlwvPz4vaSk7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gJCgnPGRpdj4nKS5odG1sKGxpbmVzW2ldKS50ZXh0KCk7CgogICAgICAgICAgICAgICAgLy8gUmVtb3ZlIG5ld2xpbmUgY2hhcmFjdGVycyAoXG4pIHRvIGF2b2lkIHRoZW0gYmVpbmcgY29udmVydGVkIGJ5IHZhbHVlMmh0bWwoKSBtZXRob2QKICAgICAgICAgICAgICAgIC8vIHRodXMgYWRkaW5nIGV4dHJhIDxicj4gdGFncwogICAgICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZShyZWdleCwgJycpOwoKICAgICAgICAgICAgICAgIGxpbmVzW2ldID0gdGV4dDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gbGluZXMuam9pbigiXG4iKTsKICAgICAgICB9LAogICAgICAgICAqLwogICAgICAgIGFjdGl2YXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgJC5mbi5lZGl0YWJsZXR5cGVzLnRleHQucHJvdG90eXBlLmFjdGl2YXRlLmNhbGwodGhpcyk7CiAgICAgICAgfQogICAgfSk7CgogICAgVGV4dGFyZWEuZGVmYXVsdHMgPSAkLmV4dGVuZCh7fSwgJC5mbi5lZGl0YWJsZXR5cGVzLmFic3RyYWN0aW5wdXQuZGVmYXVsdHMsIHsKICAgICAgICAvKioKICAgICAgICBAcHJvcGVydHkgdHBsCiAgICAgICAgQGRlZmF1bHQgPHRleHRhcmVhPjwvdGV4dGFyZWE+CiAgICAgICAgKiovCiAgICAgICAgdHBsOic8dGV4dGFyZWE+PC90ZXh0YXJlYT4nLAogICAgICAgIC8qKgogICAgICAgIEBwcm9wZXJ0eSBpbnB1dGNsYXNzCiAgICAgICAgQGRlZmF1bHQgaW5wdXQtbGFyZ2UKICAgICAgICAqKi8KICAgICAgICBpbnB1dGNsYXNzOiAnaW5wdXQtbGFyZ2UnLAogICAgICAgIC8qKgogICAgICAgIFBsYWNlaG9sZGVyIGF0dHJpYnV0ZSBvZiBpbnB1dC4gU2hvd24gd2hlbiBpbnB1dCBpcyBlbXB0eS4KCiAgICAgICAgQHByb3BlcnR5IHBsYWNlaG9sZGVyCiAgICAgICAgQHR5cGUgc3RyaW5nCiAgICAgICAgQGRlZmF1bHQgbnVsbAogICAgICAgICoqLwogICAgICAgIHBsYWNlaG9sZGVyOiBudWxsLAogICAgICAgIC8qKgogICAgICAgIE51bWJlciBvZiByb3dzIGluIHRleHRhcmVhCgogICAgICAgIEBwcm9wZXJ0eSByb3dzCiAgICAgICAgQHR5cGUgaW50ZWdlcgogICAgICAgIEBkZWZhdWx0IDcKICAgICAgICAqKi8gICAgICAgIAogICAgICAgIHJvd3M6IDcgICAgICAgIAogICAgfSk7CgogICAgJC5mbi5lZGl0YWJsZXR5cGVzLnRleHRhcmVhID0gVGV4dGFyZWE7Cgp9KHdpbmRvdy5qUXVlcnkpKTsKCi8qKgpTZWxlY3QgKGRyb3Bkb3duKQoKQGNsYXNzIHNlbGVjdApAZXh0ZW5kcyBsaXN0CkBmaW5hbApAZXhhbXBsZQo8YSBocmVmPSIjIiBpZD0ic3RhdHVzIiBkYXRhLXR5cGU9InNlbGVjdCIgZGF0YS1waz0iMSIgZGF0YS11cmw9Ii9wb3N0IiBkYXRhLXRpdGxlPSJTZWxlY3Qgc3RhdHVzIj48L2E+CjxzY3JpcHQ+CiQoZnVuY3Rpb24oKXsKICAgICQoJyNzdGF0dXMnKS5lZGl0YWJsZSh7CiAgICAgICAgdmFsdWU6IDIsICAgIAogICAgICAgIHNvdXJjZTogWwogICAgICAgICAgICAgIHt2YWx1ZTogMSwgdGV4dDogJ0FjdGl2ZSd9LAogICAgICAgICAgICAgIHt2YWx1ZTogMiwgdGV4dDogJ0Jsb2NrZWQnfSwKICAgICAgICAgICAgICB7dmFsdWU6IDMsIHRleHQ6ICdEZWxldGVkJ30KICAgICAgICAgICBdCiAgICB9KTsKfSk7Cjwvc2NyaXB0PgoqKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICAKICAgIHZhciBTZWxlY3QgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgIHRoaXMuaW5pdCgnc2VsZWN0Jywgb3B0aW9ucywgU2VsZWN0LmRlZmF1bHRzKTsKICAgIH07CgogICAgJC5mbi5lZGl0YWJsZXV0aWxzLmluaGVyaXQoU2VsZWN0LCAkLmZuLmVkaXRhYmxldHlwZXMubGlzdCk7CgogICAgJC5leHRlbmQoU2VsZWN0LnByb3RvdHlwZSwgewogICAgICAgIHJlbmRlckxpc3Q6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0aGlzLiRpbnB1dC5lbXB0eSgpOwoKICAgICAgICAgICAgdmFyIGZpbGxJdGVtcyA9IGZ1bmN0aW9uKCRlbCwgZGF0YSkgewogICAgICAgICAgICAgICAgdmFyIGF0dHI7CiAgICAgICAgICAgICAgICBpZigkLmlzQXJyYXkoZGF0YSkpIHsKICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGk9MDsgaTxkYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIgPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YVtpXS5jaGlsZHJlbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5sYWJlbCA9IGRhdGFbaV0udGV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlbC5hcHBlbmQoZmlsbEl0ZW1zKCQoJzxvcHRncm91cD4nLCBhdHRyKSwgZGF0YVtpXS5jaGlsZHJlbikpOyAKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIudmFsdWUgPSBkYXRhW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YVtpXS5kaXNhYmxlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGlzYWJsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVsLmFwcGVuZCgkKCc8b3B0aW9uPicsIGF0dHIpLnRleHQoZGF0YVtpXS50ZXh0KSk7IAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuICRlbDsKICAgICAgICAgICAgfTsgICAgICAgIAoKICAgICAgICAgICAgZmlsbEl0ZW1zKHRoaXMuJGlucHV0LCB0aGlzLnNvdXJjZURhdGEpOwogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy5zZXRDbGFzcygpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy9lbnRlciBzdWJtaXQKICAgICAgICAgICAgdGhpcy4kaW5wdXQub24oJ2tleWRvd24uZWRpdGFibGUnLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgaWYgKGUud2hpY2ggPT09IDEzKSB7CiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCdmb3JtJykuc3VibWl0KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOyAgICAgICAgICAgIAogICAgICAgIH0sCiAgICAgICAKICAgICAgICB2YWx1ZTJodG1sRmluYWw6IGZ1bmN0aW9uKHZhbHVlLCBlbGVtZW50KSB7CiAgICAgICAgICAgIHZhciB0ZXh0ID0gJycsIAogICAgICAgICAgICAgICAgaXRlbXMgPSAkLmZuLmVkaXRhYmxldXRpbHMuaXRlbXNCeVZhbHVlKHZhbHVlLCB0aGlzLnNvdXJjZURhdGEpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGlmKGl0ZW1zLmxlbmd0aCkgewogICAgICAgICAgICAgICAgdGV4dCA9IGl0ZW1zWzBdLnRleHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIC8vJChlbGVtZW50KS50ZXh0KHRleHQpOwogICAgICAgICAgICAkLmZuLmVkaXRhYmxldHlwZXMuYWJzdHJhY3RpbnB1dC5wcm90b3R5cGUudmFsdWUyaHRtbC5jYWxsKHRoaXMsIHRleHQsIGVsZW1lbnQpOwogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgYXV0b3N1Ym1pdDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoaXMuJGlucHV0Lm9mZigna2V5ZG93bi5lZGl0YWJsZScpLm9uKCdjaGFuZ2UuZWRpdGFibGUnLCBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCdmb3JtJykuc3VibWl0KCk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0pOyAgICAgIAoKICAgIFNlbGVjdC5kZWZhdWx0cyA9ICQuZXh0ZW5kKHt9LCAkLmZuLmVkaXRhYmxldHlwZXMubGlzdC5kZWZhdWx0cywgewogICAgICAgIC8qKgogICAgICAgIEBwcm9wZXJ0eSB0cGwgCiAgICAgICAgQGRlZmF1bHQgPHNlbGVjdD48L3NlbGVjdD4KICAgICAgICAqKi8gICAgICAgICAKICAgICAgICB0cGw6JzxzZWxlY3Q+PC9zZWxlY3Q+JwogICAgfSk7CgogICAgJC5mbi5lZGl0YWJsZXR5cGVzLnNlbGVjdCA9IFNlbGVjdDsgICAgICAKCn0od2luZG93LmpRdWVyeSkpOwoKLyoqCkxpc3Qgb2YgY2hlY2tib3hlcy4gCkludGVybmFsbHkgdmFsdWUgc3RvcmVkIGFzIGphdmFzY3JpcHQgYXJyYXkgb2YgdmFsdWVzLgoKQGNsYXNzIGNoZWNrbGlzdApAZXh0ZW5kcyBsaXN0CkBmaW5hbApAZXhhbXBsZQo8YSBocmVmPSIjIiBpZD0ib3B0aW9ucyIgZGF0YS10eXBlPSJjaGVja2xpc3QiIGRhdGEtcGs9IjEiIGRhdGEtdXJsPSIvcG9zdCIgZGF0YS10aXRsZT0iU2VsZWN0IG9wdGlvbnMiPjwvYT4KPHNjcmlwdD4KJChmdW5jdGlvbigpewogICAgJCgnI29wdGlvbnMnKS5lZGl0YWJsZSh7CiAgICAgICAgdmFsdWU6IFsyLCAzXSwgICAgCiAgICAgICAgc291cmNlOiBbCiAgICAgICAgICAgICAge3ZhbHVlOiAxLCB0ZXh0OiAnb3B0aW9uMSd9LAogICAgICAgICAgICAgIHt2YWx1ZTogMiwgdGV4dDogJ29wdGlvbjInfSwKICAgICAgICAgICAgICB7dmFsdWU6IDMsIHRleHQ6ICdvcHRpb24zJ30KICAgICAgICAgICBdCiAgICB9KTsKfSk7Cjwvc2NyaXB0PgoqKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICAKICAgIHZhciBDaGVja2xpc3QgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgIHRoaXMuaW5pdCgnY2hlY2tsaXN0Jywgb3B0aW9ucywgQ2hlY2tsaXN0LmRlZmF1bHRzKTsKICAgIH07CgogICAgJC5mbi5lZGl0YWJsZXV0aWxzLmluaGVyaXQoQ2hlY2tsaXN0LCAkLmZuLmVkaXRhYmxldHlwZXMubGlzdCk7CgogICAgJC5leHRlbmQoQ2hlY2tsaXN0LnByb3RvdHlwZSwgewogICAgICAgIHJlbmRlckxpc3Q6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgJGxhYmVsLCAkZGl2OwogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy4kdHBsLmVtcHR5KCk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZighJC5pc0FycmF5KHRoaXMuc291cmNlRGF0YSkpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yKHZhciBpPTA7IGk8dGhpcy5zb3VyY2VEYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAkbGFiZWwgPSAkKCc8bGFiZWw+JykuYXBwZW5kKCQoJzxpbnB1dD4nLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY2hlY2tib3gnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuc291cmNlRGF0YVtpXS52YWx1ZSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCgkKCc8c3Bhbj4nKS50ZXh0KCcgJyt0aGlzLnNvdXJjZURhdGFbaV0udGV4dCkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAkKCc8ZGl2PicpLmFwcGVuZCgkbGFiZWwpLmFwcGVuZFRvKHRoaXMuJHRwbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHRoaXMuJGlucHV0ID0gdGhpcy4kdHBsLmZpbmQoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKTsKICAgICAgICAgICAgdGhpcy5zZXRDbGFzcygpOwogICAgICAgIH0sCiAgICAgICAKICAgICAgIHZhbHVlMnN0cjogZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICByZXR1cm4gJC5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLnNvcnQoKS5qb2luKCQudHJpbSh0aGlzLm9wdGlvbnMuc2VwYXJhdG9yKSkgOiAnJzsKICAgICAgIH0sICAKICAgICAgIAogICAgICAgLy9wYXJzZSBzZXBhcmF0ZWQgc3RyaW5nCiAgICAgICAgc3RyMnZhbHVlOiBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICB2YXIgcmVnLCB2YWx1ZSA9IG51bGw7CiAgICAgICAgICAgaWYodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgJiYgc3RyLmxlbmd0aCkgewogICAgICAgICAgICAgICByZWcgPSBuZXcgUmVnRXhwKCdcXHMqJyskLnRyaW0odGhpcy5vcHRpb25zLnNlcGFyYXRvcikrJ1xccyonKTsKICAgICAgICAgICAgICAgdmFsdWUgPSBzdHIuc3BsaXQocmVnKTsKICAgICAgICAgICB9IGVsc2UgaWYoJC5pc0FycmF5KHN0cikpIHsKICAgICAgICAgICAgICAgdmFsdWUgPSBzdHI7IAogICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIHZhbHVlID0gW3N0cl07CiAgICAgICAgICAgfQogICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICB9LCAgICAgICAKICAgICAgIAogICAgICAgLy9zZXQgY2hlY2tlZCBvbiByZXF1aXJlZCBjaGVja2JveGVzCiAgICAgICB2YWx1ZTJpbnB1dDogZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgdGhpcy4kaW5wdXQucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTsKICAgICAgICAgICAgaWYoJC5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQuZWFjaChmdW5jdGlvbihpLCBlbCkgewogICAgICAgICAgICAgICAgICAgdmFyICRlbCA9ICQoZWwpOwogICAgICAgICAgICAgICAgICAgLy8gY2Fubm90IHVzZSAkLmluQXJyYXkgYXMgaXQgcGVyZm9ybXMgc3RyaWN0IGNvbXBhcmlzb24KICAgICAgICAgICAgICAgICAgICQuZWFjaCh2YWx1ZSwgZnVuY3Rpb24oaiwgdmFsKXsKICAgICAgICAgICAgICAgICAgICAgICAvKmpzbGludCBlcWVxOiB0cnVlKi8KICAgICAgICAgICAgICAgICAgICAgICBpZigkZWwudmFsKCkgPT0gdmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgLypqc2xpbnQgZXFlcTogZmFsc2UqLyAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAkZWwucHJvcCgnY2hlY2tlZCcsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICB9KTsgCiAgICAgICAgICAgIH0gIAogICAgICAgIH0sICAKICAgICAgICAKICAgICAgIGlucHV0MnZhbHVlOiBmdW5jdGlvbigpIHsgCiAgICAgICAgICAgdmFyIGNoZWNrZWQgPSBbXTsKICAgICAgICAgICB0aGlzLiRpbnB1dC5maWx0ZXIoJzpjaGVja2VkJykuZWFjaChmdW5jdGlvbihpLCBlbCkgewogICAgICAgICAgICAgICBjaGVja2VkLnB1c2goJChlbCkudmFsKCkpOwogICAgICAgICAgIH0pOwogICAgICAgICAgIHJldHVybiBjaGVja2VkOwogICAgICAgfSwgICAgICAgICAgICAKICAgICAgICAgIAogICAgICAgLy9jb2xsZWN0IHRleHQgb2YgY2hlY2tlZCBib3hlcwogICAgICAgIHZhbHVlMmh0bWxGaW5hbDogZnVuY3Rpb24odmFsdWUsIGVsZW1lbnQpIHsKICAgICAgICAgICB2YXIgaHRtbCA9IFtdLAogICAgICAgICAgICAgICBjaGVja2VkID0gJC5mbi5lZGl0YWJsZXV0aWxzLml0ZW1zQnlWYWx1ZSh2YWx1ZSwgdGhpcy5zb3VyY2VEYXRhKSwKICAgICAgICAgICAgICAgZXNjYXBlID0gdGhpcy5vcHRpb25zLmVzY2FwZTsKICAgICAgICAgICAgICAgCiAgICAgICAgICAgaWYoY2hlY2tlZC5sZW5ndGgpIHsKICAgICAgICAgICAgICAgJC5lYWNoKGNoZWNrZWQsIGZ1bmN0aW9uKGksIHYpIHsKICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gZXNjYXBlID8gJC5mbi5lZGl0YWJsZXV0aWxzLmVzY2FwZSh2LnRleHQpIDogdi50ZXh0OyAKICAgICAgICAgICAgICAgICAgIGh0bWwucHVzaCh0ZXh0KTsgCiAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAkKGVsZW1lbnQpLmh0bWwoaHRtbC5qb2luKCc8YnI+JykpOwogICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICQoZWxlbWVudCkuZW1wdHkoKTsgCiAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgCiAgICAgICBhY3RpdmF0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgdGhpcy4kaW5wdXQuZmlyc3QoKS5mb2N1cygpOwogICAgICAgfSwKICAgICAgIAogICAgICAgYXV0b3N1Ym1pdDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgdGhpcy4kaW5wdXQub24oJ2tleWRvd24nLCBmdW5jdGlvbihlKXsKICAgICAgICAgICAgICAgaWYgKGUud2hpY2ggPT09IDEzKSB7CiAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ2Zvcm0nKS5zdWJtaXQoKTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgIH0pOwogICAgICAgfQogICAgfSk7ICAgICAgCgogICAgQ2hlY2tsaXN0LmRlZmF1bHRzID0gJC5leHRlbmQoe30sICQuZm4uZWRpdGFibGV0eXBlcy5saXN0LmRlZmF1bHRzLCB7CiAgICAgICAgLyoqCiAgICAgICAgQHByb3BlcnR5IHRwbCAKICAgICAgICBAZGVmYXVsdCA8ZGl2PjwvZGl2PgogICAgICAgICoqLyAgICAgICAgIAogICAgICAgIHRwbDonPGRpdiBjbGFzcz0iZWRpdGFibGUtY2hlY2tsaXN0Ij48L2Rpdj4nLAogICAgICAgIAogICAgICAgIC8qKgogICAgICAgIEBwcm9wZXJ0eSBpbnB1dGNsYXNzIAogICAgICAgIEB0eXBlIHN0cmluZwogICAgICAgIEBkZWZhdWx0IG51bGwKICAgICAgICAqKi8gICAgICAgICAKICAgICAgICBpbnB1dGNsYXNzOiBudWxsLCAgICAgICAgCiAgICAgICAgCiAgICAgICAgLyoqCiAgICAgICAgU2VwYXJhdG9yIG9mIHZhbHVlcyB3aGVuIHJlYWRpbmcgZnJvbSBgZGF0YS12YWx1ZWAgYXR0cmlidXRlCgogICAgICAgIEBwcm9wZXJ0eSBzZXBhcmF0b3IgCiAgICAgICAgQHR5cGUgc3RyaW5nCiAgICAgICAgQGRlZmF1bHQgJywnCiAgICAgICAgKiovICAgICAgICAgCiAgICAgICAgc2VwYXJhdG9yOiAnLCcKICAgIH0pOwoKICAgICQuZm4uZWRpdGFibGV0eXBlcy5jaGVja2xpc3QgPSBDaGVja2xpc3Q7ICAgICAgCgp9KHdpbmRvdy5qUXVlcnkpKTsKCi8qKgpIVE1MNSBpbnB1dCB0eXBlcy4KRm9sbG93aW5nIHR5cGVzIGFyZSBzdXBwb3J0ZWQ6CgoqIHBhc3N3b3JkCiogZW1haWwKKiB1cmwKKiB0ZWwKKiBudW1iZXIKKiByYW5nZQoqIHRpbWUKCkxlYXJuIG1vcmUgYWJvdXQgaHRtbDUgaW5wdXRzOiAgCmh0dHA6Ly93d3cudzMub3JnL3dpa2kvSFRNTDVfZm9ybV9hZGRpdGlvbnMgIApUbyBjaGVjayBicm93c2VyIGNvbXBhdGliaWxpdHkgcGxlYXNlIHNlZTogIApodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0hUTUwvRWxlbWVudC9JbnB1dAogICAgICAgICAgICAKQGNsYXNzIGh0bWw1dHlwZXMgCkBleHRlbmRzIHRleHQKQGZpbmFsCkBzaW5jZSAxLjMuMApAZXhhbXBsZQo8YSBocmVmPSIjIiBpZD0iZW1haWwiIGRhdGEtdHlwZT0iZW1haWwiIGRhdGEtcGs9IjEiPmFkbWluQGV4YW1wbGUuY29tPC9hPgo8c2NyaXB0PgokKGZ1bmN0aW9uKCl7CiAgICAkKCcjZW1haWwnKS5lZGl0YWJsZSh7CiAgICAgICAgdXJsOiAnL3Bvc3QnLAogICAgICAgIHRpdGxlOiAnRW50ZXIgZW1haWwnCiAgICB9KTsKfSk7Cjwvc2NyaXB0PgoqKi8KCi8qKgpAcHJvcGVydHkgdHBsIApAZGVmYXVsdCBkZXBlbmRzIG9uIHR5cGUKKiovIAoKLyoKUGFzc3dvcmQKKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICAKICAgIHZhciBQYXNzd29yZCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICAgICAgdGhpcy5pbml0KCdwYXNzd29yZCcsIG9wdGlvbnMsIFBhc3N3b3JkLmRlZmF1bHRzKTsKICAgIH07CiAgICAkLmZuLmVkaXRhYmxldXRpbHMuaW5oZXJpdChQYXNzd29yZCwgJC5mbi5lZGl0YWJsZXR5cGVzLnRleHQpOwogICAgJC5leHRlbmQoUGFzc3dvcmQucHJvdG90eXBlLCB7CiAgICAgICAvL2RvIG5vdCBkaXNwbGF5IHBhc3N3b3JkLCBzaG93ICdbaGlkZGVuXScgaW5zdGVhZAogICAgICAgdmFsdWUyaHRtbDogZnVuY3Rpb24odmFsdWUsIGVsZW1lbnQpIHsKICAgICAgICAgICBpZih2YWx1ZSkgewogICAgICAgICAgICAgICAkKGVsZW1lbnQpLnRleHQoJ1toaWRkZW5dJyk7CiAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgJChlbGVtZW50KS5lbXB0eSgpOyAKICAgICAgICAgICB9CiAgICAgICB9LAogICAgICAgLy9hcyBwYXNzd29yZCBub3QgZGlzcGxheWVkLCBzaG91bGQgbm90IHNldCB2YWx1ZSBieSBodG1sCiAgICAgICBodG1sMnZhbHVlOiBmdW5jdGlvbihodG1sKSB7CiAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICB9ICAgICAgIAogICAgfSk7ICAgIAogICAgUGFzc3dvcmQuZGVmYXVsdHMgPSAkLmV4dGVuZCh7fSwgJC5mbi5lZGl0YWJsZXR5cGVzLnRleHQuZGVmYXVsdHMsIHsKICAgICAgICB0cGw6ICc8aW5wdXQgdHlwZT0icGFzc3dvcmQiPicKICAgIH0pOwogICAgJC5mbi5lZGl0YWJsZXR5cGVzLnBhc3N3b3JkID0gUGFzc3dvcmQ7Cn0od2luZG93LmpRdWVyeSkpOwoKCi8qCkVtYWlsCiovCihmdW5jdGlvbiAoJCkgewogICAgInVzZSBzdHJpY3QiOwogICAgCiAgICB2YXIgRW1haWwgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgIHRoaXMuaW5pdCgnZW1haWwnLCBvcHRpb25zLCBFbWFpbC5kZWZhdWx0cyk7CiAgICB9OwogICAgJC5mbi5lZGl0YWJsZXV0aWxzLmluaGVyaXQoRW1haWwsICQuZm4uZWRpdGFibGV0eXBlcy50ZXh0KTsKICAgIEVtYWlsLmRlZmF1bHRzID0gJC5leHRlbmQoe30sICQuZm4uZWRpdGFibGV0eXBlcy50ZXh0LmRlZmF1bHRzLCB7CiAgICAgICAgdHBsOiAnPGlucHV0IHR5cGU9ImVtYWlsIj4nCiAgICB9KTsKICAgICQuZm4uZWRpdGFibGV0eXBlcy5lbWFpbCA9IEVtYWlsOwp9KHdpbmRvdy5qUXVlcnkpKTsKCgovKgpVcmwKKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICAKICAgIHZhciBVcmwgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgIHRoaXMuaW5pdCgndXJsJywgb3B0aW9ucywgVXJsLmRlZmF1bHRzKTsKICAgIH07CiAgICAkLmZuLmVkaXRhYmxldXRpbHMuaW5oZXJpdChVcmwsICQuZm4uZWRpdGFibGV0eXBlcy50ZXh0KTsKICAgIFVybC5kZWZhdWx0cyA9ICQuZXh0ZW5kKHt9LCAkLmZuLmVkaXRhYmxldHlwZXMudGV4dC5kZWZhdWx0cywgewogICAgICAgIHRwbDogJzxpbnB1dCB0eXBlPSJ1cmwiPicKICAgIH0pOwogICAgJC5mbi5lZGl0YWJsZXR5cGVzLnVybCA9IFVybDsKfSh3aW5kb3cualF1ZXJ5KSk7CgoKLyoKVGVsCiovCihmdW5jdGlvbiAoJCkgewogICAgInVzZSBzdHJpY3QiOwogICAgCiAgICB2YXIgVGVsID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgICAgICB0aGlzLmluaXQoJ3RlbCcsIG9wdGlvbnMsIFRlbC5kZWZhdWx0cyk7CiAgICB9OwogICAgJC5mbi5lZGl0YWJsZXV0aWxzLmluaGVyaXQoVGVsLCAkLmZuLmVkaXRhYmxldHlwZXMudGV4dCk7CiAgICBUZWwuZGVmYXVsdHMgPSAkLmV4dGVuZCh7fSwgJC5mbi5lZGl0YWJsZXR5cGVzLnRleHQuZGVmYXVsdHMsIHsKICAgICAgICB0cGw6ICc8aW5wdXQgdHlwZT0idGVsIj4nCiAgICB9KTsKICAgICQuZm4uZWRpdGFibGV0eXBlcy50ZWwgPSBUZWw7Cn0od2luZG93LmpRdWVyeSkpOwoKCi8qCk51bWJlcgoqLwooZnVuY3Rpb24gKCQpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIAogICAgdmFyIE51bWJlcklucHV0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgICAgICB0aGlzLmluaXQoJ251bWJlcicsIG9wdGlvbnMsIE51bWJlcklucHV0LmRlZmF1bHRzKTsKICAgIH07CiAgICAkLmZuLmVkaXRhYmxldXRpbHMuaW5oZXJpdChOdW1iZXJJbnB1dCwgJC5mbi5lZGl0YWJsZXR5cGVzLnRleHQpOwogICAgJC5leHRlbmQoTnVtYmVySW5wdXQucHJvdG90eXBlLCB7CiAgICAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICBOdW1iZXJJbnB1dC5zdXBlcmNsYXNzLnJlbmRlci5jYWxsKHRoaXMpOwogICAgICAgICAgICB0aGlzLnNldEF0dHIoJ21pbicpOwogICAgICAgICAgICB0aGlzLnNldEF0dHIoJ21heCcpOwogICAgICAgICAgICB0aGlzLnNldEF0dHIoJ3N0ZXAnKTsKICAgICAgICB9LAogICAgICAgIHBvc3RyZW5kZXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZih0aGlzLiRjbGVhcikgewogICAgICAgICAgICAgICAgLy9pbmNyZWFzZSByaWdodCBmZnNldCAgZm9yIHVwL2Rvd24gYXJyb3dzCiAgICAgICAgICAgICAgICB0aGlzLiRjbGVhci5jc3Moe3JpZ2h0OiAyNH0pOwogICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgIC8vY2FuIHBvc2l0aW9uIGNsZWFyIGJ1dHRvbiBvbmx5IGhlcmUsIHdoZW4gZm9ybSBpcyBzaG93biBhbmQgaGVpZ2h0IGNhbiBiZSBjYWxjdWxhdGVkCiAgICAgICAgICAgICAgICB2YXIgaCA9IHRoaXMuJGlucHV0Lm91dGVySGVpZ2h0KHRydWUpIHx8IDIwLAogICAgICAgICAgICAgICAgICAgIGRlbHRhID0gKGggLSB0aGlzLiRjbGVhci5oZWlnaHQoKSkgLyAyOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvL2FkZCAxMnB4IHRvIG9mZnNldCByaWdodCBmb3IgdXAvZG93biBhcnJvd3MgICAgCiAgICAgICAgICAgICAgICB0aGlzLiRjbGVhci5jc3Moe3RvcDogZGVsdGEsIHJpZ2h0OiBkZWx0YSArIDE2fSk7CiAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICB9IAogICAgICAgIH0gICAgICAgIAogICAgfSk7ICAgICAKICAgIE51bWJlcklucHV0LmRlZmF1bHRzID0gJC5leHRlbmQoe30sICQuZm4uZWRpdGFibGV0eXBlcy50ZXh0LmRlZmF1bHRzLCB7CiAgICAgICAgdHBsOiAnPGlucHV0IHR5cGU9Im51bWJlciI+JywKICAgICAgICBpbnB1dGNsYXNzOiAnaW5wdXQtbWluaScsCiAgICAgICAgbWluOiBudWxsLAogICAgICAgIG1heDogbnVsbCwKICAgICAgICBzdGVwOiBudWxsCiAgICB9KTsKICAgICQuZm4uZWRpdGFibGV0eXBlcy5udW1iZXIgPSBOdW1iZXJJbnB1dDsKfSh3aW5kb3cualF1ZXJ5KSk7CgoKLyoKUmFuZ2UgKGluaGVyaXQgZnJvbSBudW1iZXIpCiovCihmdW5jdGlvbiAoJCkgewogICAgInVzZSBzdHJpY3QiOwogICAgCiAgICB2YXIgUmFuZ2UgPSBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgIHRoaXMuaW5pdCgncmFuZ2UnLCBvcHRpb25zLCBSYW5nZS5kZWZhdWx0cyk7CiAgICB9OwogICAgJC5mbi5lZGl0YWJsZXV0aWxzLmluaGVyaXQoUmFuZ2UsICQuZm4uZWRpdGFibGV0eXBlcy5udW1iZXIpOwogICAgJC5leHRlbmQoUmFuZ2UucHJvdG90eXBlLCB7CiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuJGlucHV0ID0gdGhpcy4kdHBsLmZpbHRlcignaW5wdXQnKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHRoaXMuc2V0Q2xhc3MoKTsKICAgICAgICAgICAgdGhpcy5zZXRBdHRyKCdtaW4nKTsKICAgICAgICAgICAgdGhpcy5zZXRBdHRyKCdtYXgnKTsKICAgICAgICAgICAgdGhpcy5zZXRBdHRyKCdzdGVwJyk7ICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHRoaXMuJGlucHV0Lm9uKCdpbnB1dCcsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAkKHRoaXMpLnNpYmxpbmdzKCdvdXRwdXQnKS50ZXh0KCQodGhpcykudmFsKCkpOyAKICAgICAgICAgICAgfSk7ICAKICAgICAgICB9LAogICAgICAgIGFjdGl2YXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdGhpcy4kaW5wdXQuZm9jdXMoKTsKICAgICAgICB9ICAgICAgICAgCiAgICB9KTsKICAgIFJhbmdlLmRlZmF1bHRzID0gJC5leHRlbmQoe30sICQuZm4uZWRpdGFibGV0eXBlcy5udW1iZXIuZGVmYXVsdHMsIHsKICAgICAgICB0cGw6ICc8aW5wdXQgdHlwZT0icmFuZ2UiPjxvdXRwdXQgc3R5bGU9IndpZHRoOiAzMHB4OyBkaXNwbGF5OiBpbmxpbmUtYmxvY2siPjwvb3V0cHV0PicsCiAgICAgICAgaW5wdXRjbGFzczogJ2lucHV0LW1lZGl1bScKICAgIH0pOwogICAgJC5mbi5lZGl0YWJsZXR5cGVzLnJhbmdlID0gUmFuZ2U7Cn0od2luZG93LmpRdWVyeSkpOwoKLyoKVGltZQoqLwooZnVuY3Rpb24gKCQpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICB2YXIgVGltZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICAgICAgdGhpcy5pbml0KCd0aW1lJywgb3B0aW9ucywgVGltZS5kZWZhdWx0cyk7CiAgICB9OwogICAgLy9pbmhlcml0IGZyb20gYWJzdHJhY3QsIGFzIGluaGVyaXRhbmNlIGZyb20gdGV4dCBnaXZlcyBzZWxlY3Rpb24gZXJyb3IuCiAgICAkLmZuLmVkaXRhYmxldXRpbHMuaW5oZXJpdChUaW1lLCAkLmZuLmVkaXRhYmxldHlwZXMuYWJzdHJhY3RpbnB1dCk7CiAgICAkLmV4dGVuZChUaW1lLnByb3RvdHlwZSwgewogICAgICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgdGhpcy5zZXRDbGFzcygpOwogICAgICAgIH0gICAgICAgIAogICAgfSk7CiAgICBUaW1lLmRlZmF1bHRzID0gJC5leHRlbmQoe30sICQuZm4uZWRpdGFibGV0eXBlcy5hYnN0cmFjdGlucHV0LmRlZmF1bHRzLCB7CiAgICAgICAgdHBsOiAnPGlucHV0IHR5cGU9InRpbWUiPicKICAgIH0pOwogICAgJC5mbi5lZGl0YWJsZXR5cGVzLnRpbWUgPSBUaW1lOwp9KHdpbmRvdy5qUXVlcnkpKTsKCi8qKgpTZWxlY3QyIGlucHV0LiBCYXNlZCBvbiBhbWF6aW5nIHdvcmsgb2YgSWdvciBWYXluYmVyZyBodHRwczovL2dpdGh1Yi5jb20vaXZheW5iZXJnL3NlbGVjdDIuICAKUGxlYXNlIHNlZSBbb3JpZ2luYWwgc2VsZWN0MiBkb2NzXShodHRwOi8vaXZheW5iZXJnLmdpdGh1Yi5jb20vc2VsZWN0MikgZm9yIGRldGFpbGVkIGRlc2NyaXB0aW9uIGFuZCBvcHRpb25zLiAgCiAKWW91IHNob3VsZCBtYW51YWxseSBkb3dubG9hZCBhbmQgaW5jbHVkZSBzZWxlY3QyIGRpc3RyaWJ1dGl2ZTogIAoKICAgIDxsaW5rIGhyZWY9InNlbGVjdDIvc2VsZWN0Mi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPjwvbGluaz4gIAogICAgPHNjcmlwdCBzcmM9InNlbGVjdDIvc2VsZWN0Mi5qcyI+PC9zY3JpcHQ+ICAKICAgIApUbyBtYWtlIGl0ICoqYm9vdHN0cmFwLXN0eWxlZCoqIHlvdSBjYW4gdXNlIGNzcyBmcm9tIFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vdDBtL3NlbGVjdDItYm9vdHN0cmFwLWNzcyk6IAoKICAgIDxsaW5rIGhyZWY9InNlbGVjdDItYm9vdHN0cmFwLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+PC9saW5rPiAgICAKICAgIAoqKk5vdGU6KiogY3VycmVudGx5IGBhdXRvdGV4dGAgZmVhdHVyZSBkb2VzIG5vdCB3b3JrIGZvciBzZWxlY3QyIHdpdGggYGFqYXhgIHJlbW90ZSBzb3VyY2UuICAgIApZb3UgbmVlZCBpbml0aWFsbHkgcHV0IGJvdGggYGRhdGEtdmFsdWVgIGFuZCBlbGVtZW50J3MgdGV4dCB5b3VzZWxmOiAgICAKCiAgICA8YSBocmVmPSIjIiBkYXRhLXR5cGU9InNlbGVjdDIiIGRhdGEtdmFsdWU9IjEiPlRleHQxPC9hPgogICAgCiAgICAKQGNsYXNzIHNlbGVjdDIKQGV4dGVuZHMgYWJzdHJhY3RpbnB1dApAc2luY2UgMS40LjEKQGZpbmFsCkBleGFtcGxlCjxhIGhyZWY9IiMiIGlkPSJjb3VudHJ5IiBkYXRhLXR5cGU9InNlbGVjdDIiIGRhdGEtcGs9IjEiIGRhdGEtdmFsdWU9InJ1IiBkYXRhLXVybD0iL3Bvc3QiIGRhdGEtdGl0bGU9IlNlbGVjdCBjb3VudHJ5Ij48L2E+CjxzY3JpcHQ+CiQoZnVuY3Rpb24oKXsKICAgIC8vbG9jYWwgc291cmNlCiAgICAkKCcjY291bnRyeScpLmVkaXRhYmxlKHsKICAgICAgICBzb3VyY2U6IFsKICAgICAgICAgICAgICB7aWQ6ICdnYicsIHRleHQ6ICdHcmVhdCBCcml0YWluJ30sCiAgICAgICAgICAgICAge2lkOiAndXMnLCB0ZXh0OiAnVW5pdGVkIFN0YXRlcyd9LAogICAgICAgICAgICAgIHtpZDogJ3J1JywgdGV4dDogJ1J1c3NpYSd9CiAgICAgICAgICAgXSwKICAgICAgICBzZWxlY3QyOiB7CiAgICAgICAgICAgbXVsdGlwbGU6IHRydWUKICAgICAgICB9CiAgICB9KTsKICAgIC8vcmVtb3RlIHNvdXJjZSAoc2ltcGxlKQogICAgJCgnI2NvdW50cnknKS5lZGl0YWJsZSh7CiAgICAgICAgc291cmNlOiAnL2dldENvdW50cmllcycsCiAgICAgICAgc2VsZWN0MjogewogICAgICAgICAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCBDb3VudHJ5JywKICAgICAgICAgICAgbWluaW11bUlucHV0TGVuZ3RoOiAxCiAgICAgICAgfQogICAgfSk7CiAgICAvL3JlbW90ZSBzb3VyY2UgKGFkdmFuY2VkKQogICAgJCgnI2NvdW50cnknKS5lZGl0YWJsZSh7CiAgICAgICAgc2VsZWN0MjogewogICAgICAgICAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCBDb3VudHJ5JywKICAgICAgICAgICAgYWxsb3dDbGVhcjogdHJ1ZSwKICAgICAgICAgICAgbWluaW11bUlucHV0TGVuZ3RoOiAzLAogICAgICAgICAgICBpZDogZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLkNvdW50cnlJZDsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYWpheDogewogICAgICAgICAgICAgICAgdXJsOiAnL2dldENvdW50cmllcycsCiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLAogICAgICAgICAgICAgICAgZGF0YTogZnVuY3Rpb24gKHRlcm0sIHBhZ2UpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBxdWVyeTogdGVybSB9OwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHJlc3VsdHM6IGZ1bmN0aW9uIChkYXRhLCBwYWdlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgcmVzdWx0czogZGF0YSB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBmb3JtYXRSZXN1bHQ6IGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5Db3VudHJ5TmFtZTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZm9ybWF0U2VsZWN0aW9uOiBmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uQ291bnRyeU5hbWU7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGluaXRTZWxlY3Rpb246IGZ1bmN0aW9uIChlbGVtZW50LCBjYWxsYmFjaykgewogICAgICAgICAgICAgICAgcmV0dXJuICQuZ2V0KCcvZ2V0Q291bnRyeUJ5SWQnLCB7IHF1ZXJ5OiBlbGVtZW50LnZhbCgpIH0sIGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZGF0YSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSAKICAgICAgICB9ICAKICAgIH0pOwp9KTsKPC9zY3JpcHQ+CioqLwooZnVuY3Rpb24gKCQpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIAogICAgdmFyIENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgICAgICB0aGlzLmluaXQoJ3NlbGVjdDInLCBvcHRpb25zLCBDb25zdHJ1Y3Rvci5kZWZhdWx0cyk7CgogICAgICAgIG9wdGlvbnMuc2VsZWN0MiA9IG9wdGlvbnMuc2VsZWN0MiB8fCB7fTsKCiAgICAgICAgdGhpcy5zb3VyY2VEYXRhID0gbnVsbDsKICAgICAgICAKICAgICAgICAvL3BsYWNlaG9sZGVyCiAgICAgICAgaWYob3B0aW9ucy5wbGFjZWhvbGRlcikgewogICAgICAgICAgICBvcHRpb25zLnNlbGVjdDIucGxhY2Vob2xkZXIgPSBvcHRpb25zLnBsYWNlaG9sZGVyOwogICAgICAgIH0KICAgICAgIAogICAgICAgIC8vaWYgbm90IGB0YWdzYCBtb2RlLCB1c2Ugc291cmNlCiAgICAgICAgaWYoIW9wdGlvbnMuc2VsZWN0Mi50YWdzICYmIG9wdGlvbnMuc291cmNlKSB7CiAgICAgICAgICAgIHZhciBzb3VyY2UgPSBvcHRpb25zLnNvdXJjZTsKICAgICAgICAgICAgLy9pZiBzb3VyY2UgaXMgZnVuY3Rpb24sIGNhbGwgaXQgKG9uY2UhKQogICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKG9wdGlvbnMuc291cmNlKSkgewogICAgICAgICAgICAgICAgc291cmNlID0gb3B0aW9ucy5zb3VyY2UuY2FsbChvcHRpb25zLnNjb3BlKTsKICAgICAgICAgICAgfSAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICBvcHRpb25zLnNlbGVjdDIuYWpheCA9IG9wdGlvbnMuc2VsZWN0Mi5hamF4IHx8IHt9OwogICAgICAgICAgICAgICAgLy9zb21lIGRlZmF1bHQgYWpheCBwYXJhbXMKICAgICAgICAgICAgICAgIGlmKCFvcHRpb25zLnNlbGVjdDIuYWpheC5kYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zZWxlY3QyLmFqYXguZGF0YSA9IGZ1bmN0aW9uKHRlcm0pIHtyZXR1cm4geyBxdWVyeTp0ZXJtIH07fTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKCFvcHRpb25zLnNlbGVjdDIuYWpheC5yZXN1bHRzKSB7CiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zZWxlY3QyLmFqYXgucmVzdWx0cyA9IGZ1bmN0aW9uKGRhdGEpIHsgcmV0dXJuIHtyZXN1bHRzOmRhdGEgfTt9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgb3B0aW9ucy5zZWxlY3QyLmFqYXgudXJsID0gc291cmNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy9jaGVjayBmb3JtYXQgYW5kIGNvbnZlcnQgeC1lZGl0YWJsZSBmb3JtYXQgdG8gc2VsZWN0MiBmb3JtYXQgKGlmIG5lZWRlZCkKICAgICAgICAgICAgICAgIHRoaXMuc291cmNlRGF0YSA9IHRoaXMuY29udmVydFNvdXJjZShzb3VyY2UpOwogICAgICAgICAgICAgICAgb3B0aW9ucy5zZWxlY3QyLmRhdGEgPSB0aGlzLnNvdXJjZURhdGE7CiAgICAgICAgICAgIH0KICAgICAgICB9IAoKICAgICAgICAvL292ZXJyaWRpbmcgb2JqZWN0cyBpbiBjb25maWcgKGFzIGJ5IGRlZmF1bHQgalF1ZXJ5IGV4dGVuZCgpIGlzIG5vdCByZWN1cnNpdmUpCiAgICAgICAgdGhpcy5vcHRpb25zLnNlbGVjdDIgPSAkLmV4dGVuZCh7fSwgQ29uc3RydWN0b3IuZGVmYXVsdHMuc2VsZWN0Miwgb3B0aW9ucy5zZWxlY3QyKTsKCiAgICAgICAgLy9kZXRlY3Qgd2hldGhlciBpdCBpcyBtdWx0aS12YWx1ZWQKICAgICAgICB0aGlzLmlzTXVsdGlwbGUgPSB0aGlzLm9wdGlvbnMuc2VsZWN0Mi50YWdzIHx8IHRoaXMub3B0aW9ucy5zZWxlY3QyLm11bHRpcGxlOwogICAgICAgIHRoaXMuaXNSZW1vdGUgPSAoJ2FqYXgnIGluIHRoaXMub3B0aW9ucy5zZWxlY3QyKTsKCiAgICAgICAgLy9zdG9yZSBmdW5jdGlvbiByZXR1cm5pbmcgSUQgb2YgaXRlbQogICAgICAgIC8vc2hvdWxkIGJlIGhlcmUgYXMgdXNlZCBpbmF1dG90ZXh0IGZvciBsb2NhbCBzb3VyY2UKICAgICAgICB0aGlzLmlkRnVuYyA9IHRoaXMub3B0aW9ucy5zZWxlY3QyLmlkOwogICAgICAgIGlmICh0eXBlb2YodGhpcy5pZEZ1bmMpICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIHZhciBpZEtleSA9IHRoaXMuaWRGdW5jIHx8ICdpZCc7CiAgICAgICAgICAgIHRoaXMuaWRGdW5jID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGVbaWRLZXldOyB9OwogICAgICAgIH0KCiAgICAgICAgLy9zdG9yZSBmdW5jdGlvbiB0aGF0IHJlbmRlcnMgdGV4dCBpbiBzZWxlY3QyCiAgICAgICAgdGhpcy5mb3JtYXRTZWxlY3Rpb24gPSB0aGlzLm9wdGlvbnMuc2VsZWN0Mi5mb3JtYXRTZWxlY3Rpb247CiAgICAgICAgaWYgKHR5cGVvZih0aGlzLmZvcm1hdFNlbGVjdGlvbikgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgdGhpcy5mb3JtYXRTZWxlY3Rpb24gPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS50ZXh0OyB9OwogICAgICAgIH0KICAgIH07CgogICAgJC5mbi5lZGl0YWJsZXV0aWxzLmluaGVyaXQoQ29uc3RydWN0b3IsICQuZm4uZWRpdGFibGV0eXBlcy5hYnN0cmFjdGlucHV0KTsKCiAgICAkLmV4dGVuZChDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHsKICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0aGlzLnNldENsYXNzKCk7CgogICAgICAgICAgICAvL2NhbiBub3QgYXBwbHkgc2VsZWN0MiBoZXJlIGFzIGl0IGNhbGxzIGluaXRTZWxlY3Rpb24gCiAgICAgICAgICAgIC8vb3ZlciBpbnB1dCB0aGF0IGRvZXMgbm90IGhhdmUgY29ycmVjdCB2YWx1ZSB5ZXQuCiAgICAgICAgICAgIC8vYXBwbHkgc2VsZWN0MiBvbmx5IGluIHZhbHVlMmlucHV0CiAgICAgICAgICAgIC8vdGhpcy4kaW5wdXQuc2VsZWN0Mih0aGlzLm9wdGlvbnMuc2VsZWN0Mik7CgogICAgICAgICAgICAvL3doZW4gZGF0YSBpcyBsb2FkZWQgdmlhIGFqYXgsIHdlIG5lZWQgdG8ga25vdyB3aGVuIGl0J3MgZG9uZSB0byBwb3B1bGF0ZSBsaXN0RGF0YQogICAgICAgICAgICBpZih0aGlzLmlzUmVtb3RlKSB7CiAgICAgICAgICAgICAgICAvL2xpc3RlbiB0byBsb2FkZWQgZXZlbnQgdG8gcG9wdWxhdGUgZGF0YQogICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQub24oJ3NlbGVjdDItbG9hZGVkJywgJC5wcm94eShmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VEYXRhID0gZS5pdGVtcy5yZXN1bHRzOwogICAgICAgICAgICAgICAgfSwgdGhpcykpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL3RyaWdnZXIgcmVzaXplIG9mIGVkaXRhYmxlZm9ybSB0byByZS1wb3NpdGlvbiBjb250YWluZXIgaW4gbXVsdGktdmFsdWVkIG1vZGUKICAgICAgICAgICAgaWYodGhpcy5pc011bHRpcGxlKSB7CiAgICAgICAgICAgICAgIHRoaXMuJGlucHV0Lm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgnZm9ybScpLnBhcmVudCgpLnRyaWdnZXJIYW5kbGVyKCdyZXNpemUnKTsKICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgIH0sCgogICAgICAgdmFsdWUyaHRtbDogZnVuY3Rpb24odmFsdWUsIGVsZW1lbnQpIHsKICAgICAgICAgICB2YXIgdGV4dCA9ICcnLCBkYXRhLAogICAgICAgICAgICAgICB0aGF0ID0gdGhpczsKCiAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLnNlbGVjdDIudGFncykgeyAvL2luIHRhZ3MgbW9kZSBqdXN0IGFzc2lnbiB2YWx1ZQogICAgICAgICAgICAgIGRhdGEgPSB2YWx1ZTsgCiAgICAgICAgICAgICAgLy9kYXRhID0gJC5mbi5lZGl0YWJsZXV0aWxzLml0ZW1zQnlWYWx1ZSh2YWx1ZSwgdGhpcy5vcHRpb25zLnNlbGVjdDIudGFncywgdGhpcy5pZEZ1bmMpOwogICAgICAgICAgIH0gZWxzZSBpZih0aGlzLnNvdXJjZURhdGEpIHsKICAgICAgICAgICAgICBkYXRhID0gJC5mbi5lZGl0YWJsZXV0aWxzLml0ZW1zQnlWYWx1ZSh2YWx1ZSwgdGhpcy5zb3VyY2VEYXRhLCB0aGlzLmlkRnVuYyk7IAogICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy9jYW4gbm90IGdldCBsaXN0IG9mIHBvc3NpYmxlIHZhbHVlcyAKICAgICAgICAgICAgICAvLyhlLmcuIGF1dG90ZXh0IGZvciBzZWxlY3QyIHdpdGggYWpheCBzb3VyY2UpCiAgICAgICAgICAgfQoKICAgICAgICAgICAvL2RhdGEgbWF5IGJlIGFycmF5ICh3aGVuIG11bHRpcGxlIHZhbHVlcyBhbGxvd2VkKQogICAgICAgICAgIGlmKCQuaXNBcnJheShkYXRhKSkgewogICAgICAgICAgICAgICAvL2NvbGxlY3Qgc2VsZWN0ZWQgZGF0YSBhbmQgc2hvdyB3aXRoIHNlcGFyYXRvcgogICAgICAgICAgICAgICB0ZXh0ID0gW107CiAgICAgICAgICAgICAgICQuZWFjaChkYXRhLCBmdW5jdGlvbihrLCB2KXsKICAgICAgICAgICAgICAgICAgIHRleHQucHVzaCh2ICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyA/IHRoYXQuZm9ybWF0U2VsZWN0aW9uKHYpIDogdik7CiAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgIH0gZWxzZSBpZihkYXRhKSB7CiAgICAgICAgICAgICAgIHRleHQgPSB0aGF0LmZvcm1hdFNlbGVjdGlvbihkYXRhKTsKICAgICAgICAgICB9CgogICAgICAgICAgIHRleHQgPSAkLmlzQXJyYXkodGV4dCkgPyB0ZXh0LmpvaW4odGhpcy5vcHRpb25zLnZpZXdzZXBhcmF0b3IpIDogdGV4dDsKCiAgICAgICAgICAgLy8kKGVsZW1lbnQpLnRleHQodGV4dCk7CiAgICAgICAgICAgQ29uc3RydWN0b3Iuc3VwZXJjbGFzcy52YWx1ZTJodG1sLmNhbGwodGhpcywgdGV4dCwgZWxlbWVudCk7IAogICAgICAgfSwKCiAgICAgICBodG1sMnZhbHVlOiBmdW5jdGlvbihodG1sKSB7CiAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zZWxlY3QyLnRhZ3MgPyB0aGlzLnN0cjJ2YWx1ZShodG1sLCB0aGlzLm9wdGlvbnMudmlld3NlcGFyYXRvcikgOiBudWxsOwogICAgICAgfSwKCiAgICAgICB2YWx1ZTJpbnB1dDogZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAvLyBpZiB2YWx1ZSBhcnJheSA9PiBqb2luIGl0IGFueXdheQogICAgICAgICAgIGlmKCQuaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmpvaW4odGhpcy5nZXRTZXBhcmF0b3IoKSk7CiAgICAgICAgICAgfQoKICAgICAgICAgICAvL2ZvciByZW1vdGUgc291cmNlIGp1c3Qgc2V0IHZhbHVlLCB0ZXh0IGlzIHVwZGF0ZWQgYnkgaW5pdFNlbGVjdGlvbgogICAgICAgICAgIGlmKCF0aGlzLiRpbnB1dC5kYXRhKCdzZWxlY3QyJykpIHsKICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQudmFsKHZhbHVlKTsKICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQuc2VsZWN0Mih0aGlzLm9wdGlvbnMuc2VsZWN0Mik7CiAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgLy9zZWNvbmQgYXJndW1lbnQgbmVlZGVkIHRvIHNlcGFyYXRlIGluaXRpYWwgY2hhbmdlIGZyb20gdXNlcidzIGNsaWNrIChmb3IgYXV0b3N1Ym1pdCkgICAKICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQudmFsKHZhbHVlKS50cmlnZ2VyKCdjaGFuZ2UnLCB0cnVlKTsgCgogICAgICAgICAgICAgICAvL1VuY2F1Z2h0IEVycm9yOiBjYW5ub3QgY2FsbCB2YWwoKSBpZiBpbml0U2VsZWN0aW9uKCkgaXMgbm90IGRlZmluZWQKICAgICAgICAgICAgICAgLy90aGlzLiRpbnB1dC5zZWxlY3QyKCd2YWwnLCB2YWx1ZSk7CiAgICAgICAgICAgfQoKICAgICAgICAgICAvLyBpZiBkZWZpbmVkIHJlbW90ZSBzb3VyY2UgQU5EIG5vIG11bHRpcGxlIG1vZGUgQU5EIG5vIHVzZXIncyBpbml0U2VsZWN0aW9uIHByb3ZpZGVkIC0tPiAKICAgICAgICAgICAvLyB3ZSBzaG91bGQgc29tZWhvdyBnZXQgdGV4dCBmb3IgcHJvdmlkZWQgaWQuCiAgICAgICAgICAgLy8gVGhlIHNvbHV0aW9uIGlzIHRvIHVzZSBlbGVtZW50J3MgdGV4dCBhcyB0ZXh0IGZvciB0aGF0IGlkIChleGNsdWRlIGVtcHR5KQogICAgICAgICAgIGlmKHRoaXMuaXNSZW1vdGUgJiYgIXRoaXMuaXNNdWx0aXBsZSAmJiAhdGhpcy5vcHRpb25zLnNlbGVjdDIuaW5pdFNlbGVjdGlvbikgewogICAgICAgICAgICAgICAvLyBjdXN0b21JZCBhbmQgY3VzdG9tVGV4dCBhcmUgbWV0aG9kcyB0byBleHRyYWN0IGBpZGAgYW5kIGB0ZXh0YCBmcm9tIGRhdGEgb2JqZWN0CiAgICAgICAgICAgICAgIC8vIHdlIGNhbiB1c2UgdGhpcyB3b3JrYXJvdW5kIG9ubHkgaWYgdXNlciBkaWQgbm90IGRlZmluZSB0aGVzZSBtZXRob2RzCiAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB3ZSBjYW50IGNvbnN0cnVjdCBkYXRhIG9iamVjdAogICAgICAgICAgICAgICB2YXIgY3VzdG9tSWQgPSB0aGlzLm9wdGlvbnMuc2VsZWN0Mi5pZCwKICAgICAgICAgICAgICAgICAgIGN1c3RvbVRleHQgPSB0aGlzLm9wdGlvbnMuc2VsZWN0Mi5mb3JtYXRTZWxlY3Rpb247CgogICAgICAgICAgICAgICBpZighY3VzdG9tSWQgJiYgIWN1c3RvbVRleHQpIHsKICAgICAgICAgICAgICAgICAgIHZhciAkZWwgPSAkKHRoaXMub3B0aW9ucy5zY29wZSk7CiAgICAgICAgICAgICAgICAgICBpZiAoISRlbC5kYXRhKCdlZGl0YWJsZScpLmlzRW1wdHkpIHsKICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHtpZDogdmFsdWUsIHRleHQ6ICRlbC50ZXh0KCl9OwogICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGlucHV0LnNlbGVjdDIoJ2RhdGEnLCBkYXRhKTsgCiAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICB9LAogICAgICAgCiAgICAgICBpbnB1dDJ2YWx1ZTogZnVuY3Rpb24oKSB7IAogICAgICAgICAgIHJldHVybiB0aGlzLiRpbnB1dC5zZWxlY3QyKCd2YWwnKTsKICAgICAgIH0sCgogICAgICAgc3RyMnZhbHVlOiBmdW5jdGlvbihzdHIsIHNlcGFyYXRvcikgewogICAgICAgICAgICBpZih0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJyB8fCAhdGhpcy5pc011bHRpcGxlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzZXBhcmF0b3IgPSBzZXBhcmF0b3IgfHwgdGhpcy5nZXRTZXBhcmF0b3IoKTsKCiAgICAgICAgICAgIHZhciB2YWwsIGksIGw7CgogICAgICAgICAgICBpZiAoc3RyID09PSBudWxsIHx8IHN0ci5sZW5ndGggPCAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YWwgPSBzdHIuc3BsaXQoc2VwYXJhdG9yKTsKICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IHZhbC5sZW5ndGg7IGkgPCBsOyBpID0gaSArIDEpIHsKICAgICAgICAgICAgICAgIHZhbFtpXSA9ICQudHJpbSh2YWxbaV0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gdmFsOwogICAgICAgfSwKCiAgICAgICAgYXV0b3N1Ym1pdDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoaXMuJGlucHV0Lm9uKCdjaGFuZ2UnLCBmdW5jdGlvbihlLCBpc0luaXRpYWwpewogICAgICAgICAgICAgICAgaWYoIWlzSW5pdGlhbCkgewogICAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ2Zvcm0nKS5zdWJtaXQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKCiAgICAgICAgZ2V0U2VwYXJhdG9yOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zZWxlY3QyLnNlcGFyYXRvciB8fCAkLmZuLnNlbGVjdDIuZGVmYXVsdHMuc2VwYXJhdG9yOwogICAgICAgIH0sCgogICAgICAgIC8qCiAgICAgICAgQ29udmVydHMgc291cmNlIGZyb20geC1lZGl0YWJsZSBmb3JtYXQ6IHt2YWx1ZTogMSwgdGV4dDogIjEifSB0bwogICAgICAgIHNlbGVjdDIgZm9ybWF0OiB7aWQ6IDEsIHRleHQ6ICIxIn0KICAgICAgICAqLwogICAgICAgIGNvbnZlcnRTb3VyY2U6IGZ1bmN0aW9uKHNvdXJjZSkgewogICAgICAgICAgICBpZigkLmlzQXJyYXkoc291cmNlKSAmJiBzb3VyY2UubGVuZ3RoICYmIHNvdXJjZVswXS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpPHNvdXJjZS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGlmKHNvdXJjZVtpXS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVtpXS5pZCA9IHNvdXJjZVtpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNvdXJjZVtpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTsKICAgICAgICB9LAogICAgICAgIAogICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZih0aGlzLiRpbnB1dC5kYXRhKCdzZWxlY3QyJykpIHsKICAgICAgICAgICAgICAgIHRoaXMuJGlucHV0LnNlbGVjdDIoJ2Rlc3Ryb3knKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH0pOwoKICAgIENvbnN0cnVjdG9yLmRlZmF1bHRzID0gJC5leHRlbmQoe30sICQuZm4uZWRpdGFibGV0eXBlcy5hYnN0cmFjdGlucHV0LmRlZmF1bHRzLCB7CiAgICAgICAgLyoqCiAgICAgICAgQHByb3BlcnR5IHRwbCAKICAgICAgICBAZGVmYXVsdCA8aW5wdXQgdHlwZT0iaGlkZGVuIj4KICAgICAgICAqKi8KICAgICAgICB0cGw6JzxpbnB1dCB0eXBlPSJoaWRkZW4iPicsCiAgICAgICAgLyoqCiAgICAgICAgQ29uZmlndXJhdGlvbiBvZiBzZWxlY3QyLiBbRnVsbCBsaXN0IG9mIG9wdGlvbnNdKGh0dHA6Ly9pdmF5bmJlcmcuZ2l0aHViLmNvbS9zZWxlY3QyKS4KCiAgICAgICAgQHByb3BlcnR5IHNlbGVjdDIgCiAgICAgICAgQHR5cGUgb2JqZWN0CiAgICAgICAgQGRlZmF1bHQgbnVsbAogICAgICAgICoqLwogICAgICAgIHNlbGVjdDI6IG51bGwsCiAgICAgICAgLyoqCiAgICAgICAgUGxhY2Vob2xkZXIgYXR0cmlidXRlIG9mIHNlbGVjdAoKICAgICAgICBAcHJvcGVydHkgcGxhY2Vob2xkZXIgCiAgICAgICAgQHR5cGUgc3RyaW5nCiAgICAgICAgQGRlZmF1bHQgbnVsbAogICAgICAgICoqLwogICAgICAgIHBsYWNlaG9sZGVyOiBudWxsLAogICAgICAgIC8qKgogICAgICAgIFNvdXJjZSBkYXRhIGZvciBzZWxlY3QuIEl0IHdpbGwgYmUgYXNzaWduZWQgdG8gc2VsZWN0MiBgZGF0YWAgcHJvcGVydHkgYW5kIGtlcHQgaGVyZSBqdXN0IGZvciBjb252ZW5pZW5jZS4KICAgICAgICBQbGVhc2Ugbm90ZSwgdGhhdCBmb3JtYXQgaXMgZGlmZmVyZW50IGZyb20gc2ltcGxlIGBzZWxlY3RgIGlucHV0OiB1c2UgJ2lkJyBpbnN0ZWFkIG9mICd2YWx1ZScuCiAgICAgICAgRS5nLiBgW3tpZDogMSwgdGV4dDogInRleHQxIn0sIHtpZDogMiwgdGV4dDogInRleHQyIn0sIC4uLl1gLgoKICAgICAgICBAcHJvcGVydHkgc291cmNlIAogICAgICAgIEB0eXBlIGFycmF5fHN0cmluZ3xmdW5jdGlvbgogICAgICAgIEBkZWZhdWx0IG51bGwgICAgICAgIAogICAgICAgICoqLwogICAgICAgIHNvdXJjZTogbnVsbCwKICAgICAgICAvKioKICAgICAgICBTZXBhcmF0b3IgdXNlZCB0byBkaXNwbGF5IHRhZ3MuCgogICAgICAgIEBwcm9wZXJ0eSB2aWV3c2VwYXJhdG9yIAogICAgICAgIEB0eXBlIHN0cmluZwogICAgICAgIEBkZWZhdWx0ICcsICcgICAgICAgIAogICAgICAgICoqLwogICAgICAgIHZpZXdzZXBhcmF0b3I6ICcsICcKICAgIH0pOwoKICAgICQuZm4uZWRpdGFibGV0eXBlcy5zZWxlY3QyID0gQ29uc3RydWN0b3I7Cgp9KHdpbmRvdy5qUXVlcnkpKTsKCi8qKgoqIENvbWJvZGF0ZSAtIDEuMC41CiogRHJvcGRvd24gZGF0ZSBhbmQgdGltZSBwaWNrZXIuCiogQ29udmVydHMgdGV4dCBpbnB1dCBpbnRvIGRyb3Bkb3ducyB0byBwaWNrIGRheSwgbW9udGgsIHllYXIsIGhvdXIsIG1pbnV0ZSBhbmQgc2Vjb25kLgoqIFVzZXMgbW9tZW50anMgYXMgZGF0ZXRpbWUgbGlicmFyeSBodHRwOi8vbW9tZW50anMuY29tLgoqIEZvciBpMThuIGluY2x1ZGUgY29ycmVzcG9uZGluZyBmaWxlIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3RpbXJ3b29kL21vbWVudC90cmVlL21hc3Rlci9sYW5nIAoqCiogQ29uZnVzaW9uIGF0IG5vb24gYW5kIG1pZG5pZ2h0IC0gc2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvMTItaG91cl9jbG9jayNDb25mdXNpb25fYXRfbm9vbl9hbmRfbWlkbmlnaHQKKiBJbiBjb21ib2RhdGU6IAoqIDEyOjAwIHBtIC0tPiAxMjowMCAoMjQtaCBmb3JtYXQsIG1pZGRheSkKKiAxMjowMCBhbSAtLT4gMDA6MDAgKDI0LWggZm9ybWF0LCBtaWRuaWdodCwgc3RhcnQgb2YgZGF5KQoqIAoqIERpZmZlcnMgZnJvbSBtb21lbnRqcyBwYXJzZSBydWxlczoKKiAwMDowMCBwbSwgMTI6MDAgcG0gLS0+IDEyOjAwICgyNC1oIGZvcm1hdCwgZGF5IG5vdCBjaGFuZ2UpCiogMDA6MDAgYW0sIDEyOjAwIGFtIC0tPiAwMDowMCAoMjQtaCBmb3JtYXQsIGRheSBub3QgY2hhbmdlKQoqIAoqIAoqIEF1dGhvcjogVml0YWxpeSBQb3RhcG92CiogUHJvamVjdCBwYWdlOiBodHRwOi8vZ2l0aHViLmNvbS92aXRhbGV0cy9jb21ib2RhdGUKKiBDb3B5cmlnaHQgKGMpIDIwMTIgVml0YWxpeSBQb3RhcG92LiBSZWxlYXNlZCB1bmRlciBNSVQgTGljZW5zZS4KKiovCihmdW5jdGlvbiAoJCkgewoKICAgIHZhciBDb21ib2RhdGUgPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykgewogICAgICAgIHRoaXMuJGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgICAgIGlmKCF0aGlzLiRlbGVtZW50LmlzKCdpbnB1dCcpKSB7CiAgICAgICAgICAgICQuZXJyb3IoJ0NvbWJvZGF0ZSBzaG91bGQgYmUgYXBwbGllZCB0byBJTlBVVCBlbGVtZW50Jyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sICQuZm4uY29tYm9kYXRlLmRlZmF1bHRzLCBvcHRpb25zLCB0aGlzLiRlbGVtZW50LmRhdGEoKSk7CiAgICAgICAgdGhpcy5pbml0KCk7ICAKICAgICB9OwoKICAgIENvbWJvZGF0ZS5wcm90b3R5cGUgPSB7CiAgICAgICAgY29uc3RydWN0b3I6IENvbWJvZGF0ZSwgCiAgICAgICAgaW5pdDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aGlzLm1hcCA9IHsKICAgICAgICAgICAgICAgIC8va2V5ICAgcmVnZXhwICAgIG1vbWVudC5tZXRob2QKICAgICAgICAgICAgICAgIGRheTogICAgWydEJywgICAgJ2RhdGUnXSwgCiAgICAgICAgICAgICAgICBtb250aDogIFsnTScsICAgICdtb250aCddLCAKICAgICAgICAgICAgICAgIHllYXI6ICAgWydZJywgICAgJ3llYXInXSwgCiAgICAgICAgICAgICAgICBob3VyOiAgIFsnW0hoXScsICdob3VycyddLAogICAgICAgICAgICAgICAgbWludXRlOiBbJ20nLCAgICAnbWludXRlcyddLCAKICAgICAgICAgICAgICAgIHNlY29uZDogWydzJywgICAgJ3NlY29uZHMnXSwKICAgICAgICAgICAgICAgIGFtcG06ICAgWydbQWFdJywgJyddIAogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy4kd2lkZ2V0ID0gJCgnPHNwYW4gY2xhc3M9ImNvbWJvZGF0ZSI+PC9zcGFuPicpLmh0bWwodGhpcy5nZXRUZW1wbGF0ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICB0aGlzLmluaXRDb21ib3MoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vdXBkYXRlIG9yaWdpbmFsIGlucHV0IG9uIGNoYW5nZSAKICAgICAgICAgICAgdGhpcy4kd2lkZ2V0Lm9uKCdjaGFuZ2UnLCAnc2VsZWN0JywgJC5wcm94eShmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LnZhbCh0aGlzLmdldFZhbHVlKCkpLmNoYW5nZSgpOwogICAgICAgICAgICAgICAgLy8gdXBkYXRlIGRheXMgY291bnQgaWYgbW9udGggb3IgeWVhciBjaGFuZ2VzCiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNtYXJ0RGF5cykgewogICAgICAgICAgICAgICAgICAgIGlmICgkKGUudGFyZ2V0KS5pcygnLm1vbnRoJykgfHwgJChlLnRhcmdldCkuaXMoJy55ZWFyJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxsQ29tYm8oJ2RheScpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgdGhpcykpOwogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy4kd2lkZ2V0LmZpbmQoJ3NlbGVjdCcpLmNzcygnd2lkdGgnLCAnYXV0bycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgLy8gaGlkZSBvcmlnaW5hbCBpbnB1dCBhbmQgaW5zZXJ0IHdpZGdldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICB0aGlzLiRlbGVtZW50LmhpZGUoKS5hZnRlcih0aGlzLiR3aWRnZXQpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gc2V0IGluaXRpYWwgdmFsdWUKICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLiRlbGVtZW50LnZhbCgpIHx8IHRoaXMub3B0aW9ucy52YWx1ZSk7CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICAvKgogICAgICAgICBSZXBsYWNlIHRva2VucyBpbiB0ZW1wbGF0ZSB3aXRoIDxzZWxlY3Q+IGVsZW1lbnRzIAogICAgICAgICovICAgICAgICAgCiAgICAgICAgZ2V0VGVtcGxhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgdHBsID0gdGhpcy5vcHRpb25zLnRlbXBsYXRlOwoKICAgICAgICAgICAgLy9maXJzdCBwYXNzCiAgICAgICAgICAgICQuZWFjaCh0aGlzLm1hcCwgZnVuY3Rpb24oaywgdikgewogICAgICAgICAgICAgICAgdiA9IHZbMF07IAogICAgICAgICAgICAgICAgdmFyIHIgPSBuZXcgUmVnRXhwKHYrJysnKSwKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHYubGVuZ3RoID4gMSA/IHYuc3Vic3RyaW5nKDEsIDIpIDogdjsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHRwbCA9IHRwbC5yZXBsYWNlKHIsICd7Jyt0b2tlbisnfScpOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIC8vcmVwbGFjZSBzcGFjZXMgd2l0aCAmbmJzcDsKICAgICAgICAgICAgdHBsID0gdHBsLnJlcGxhY2UoLyAvZywgJyZuYnNwOycpOwoKICAgICAgICAgICAgLy9zZWNvbmQgcGFzcwogICAgICAgICAgICAkLmVhY2godGhpcy5tYXAsIGZ1bmN0aW9uKGssIHYpIHsKICAgICAgICAgICAgICAgIHYgPSB2WzBdOwogICAgICAgICAgICAgICAgdmFyIHRva2VuID0gdi5sZW5ndGggPiAxID8gdi5zdWJzdHJpbmcoMSwgMikgOiB2OwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdHBsID0gdHBsLnJlcGxhY2UoJ3snK3Rva2VuKyd9JywgJzxzZWxlY3QgY2xhc3M9IicraysnIj48L3NlbGVjdD4nKTsKICAgICAgICAgICAgfSk7ICAgCgogICAgICAgICAgICByZXR1cm4gdHBsOwogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgLyoKICAgICAgICAgSW5pdGlhbGl6ZSBjb21ib3MgdGhhdCBwcmVzZW50cyBpbiB0ZW1wbGF0ZSAKICAgICAgICAqLyAgICAgICAgCiAgICAgICAgaW5pdENvbWJvczogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gdGhpcy5tYXApIHsKICAgICAgICAgICAgICAgIHZhciAkYyA9IHRoaXMuJHdpZGdldC5maW5kKCcuJytrKTsKICAgICAgICAgICAgICAgIC8vIHNldCBwcm9wZXJ0aWVzIGxpa2UgdGhpcy4kZGF5LCB0aGlzLiRtb250aCBldGMuCiAgICAgICAgICAgICAgICB0aGlzWyckJytrXSA9ICRjLmxlbmd0aCA/ICRjIDogbnVsbDsKICAgICAgICAgICAgICAgIC8vIGZpbGwgd2l0aCBpdGVtcwogICAgICAgICAgICAgICAgdGhpcy5maWxsQ29tYm8oayk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAvKgogICAgICAgICBGaWxsIGNvbWJvIHdpdGggaXRlbXMgCiAgICAgICAgKi8gICAgICAgIAogICAgICAgIGZpbGxDb21ibzogZnVuY3Rpb24oaykgewogICAgICAgICAgICB2YXIgJGNvbWJvID0gdGhpc1snJCcra107CiAgICAgICAgICAgIGlmICghJGNvbWJvKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGRlZmluZSBtZXRob2QgbmFtZSB0byBmaWxsIGl0ZW1zLCBlLmcgYGZpbGxEYXlzYAogICAgICAgICAgICB2YXIgZiA9ICdmaWxsJyArIGsuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrLnNsaWNlKDEpOyAKICAgICAgICAgICAgdmFyIGl0ZW1zID0gdGhpc1tmXSgpOwogICAgICAgICAgICB2YXIgdmFsdWUgPSAkY29tYm8udmFsKCk7CgogICAgICAgICAgICAkY29tYm8uZW1wdHkoKTsKICAgICAgICAgICAgZm9yKHZhciBpPTA7IGk8aXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICRjb21iby5hcHBlbmQoJzxvcHRpb24gdmFsdWU9IicraXRlbXNbaV1bMF0rJyI+JytpdGVtc1tpXVsxXSsnPC9vcHRpb24+Jyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRjb21iby52YWwodmFsdWUpOwogICAgICAgIH0sCgogICAgICAgIC8qCiAgICAgICAgIEluaXRpYWxpemUgaXRlbXMgb2YgY29tYm9zLiBIYW5kbGVzIGBmaXJzdEl0ZW1gIG9wdGlvbiAKICAgICAgICAqLwogICAgICAgIGZpbGxDb21tb246IGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICB2YXIgdmFsdWVzID0gW10sCiAgICAgICAgICAgICAgICByZWxUaW1lOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGlmKHRoaXMub3B0aW9ucy5maXJzdEl0ZW0gPT09ICduYW1lJykgewogICAgICAgICAgICAgICAgLy9uZWVkIGJvdGggdG8gc3VwcG9ydCBtb21lbnQgdmVyIDwgMiBhbmQgID49IDIKICAgICAgICAgICAgICAgIHJlbFRpbWUgPSBtb21lbnQucmVsYXRpdmVUaW1lIHx8IG1vbWVudC5sYW5nRGF0YSgpLl9yZWxhdGl2ZVRpbWU7IAogICAgICAgICAgICAgICAgdmFyIGhlYWRlciA9IHR5cGVvZiByZWxUaW1lW2tleV0gPT09ICdmdW5jdGlvbicgPyByZWxUaW1lW2tleV0oMSwgdHJ1ZSwga2V5LCBmYWxzZSkgOiByZWxUaW1lW2tleV07CiAgICAgICAgICAgICAgICAvL3Rha2UgbGFzdCBlbnRyeSAoc2VlIG1vbWVudGpzIGxhbmcgZmlsZXMgc3RydWN0dXJlKSAKICAgICAgICAgICAgICAgIGhlYWRlciA9IGhlYWRlci5zcGxpdCgnICcpLnJldmVyc2UoKVswXTsgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChbJycsIGhlYWRlcl0pOwogICAgICAgICAgICB9IGVsc2UgaWYodGhpcy5vcHRpb25zLmZpcnN0SXRlbSA9PT0gJ2VtcHR5JykgewogICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goWycnLCAnJ10pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7CiAgICAgICAgfSwgIAoKCiAgICAgICAgLyoKICAgICAgICBmaWxsIGRheQogICAgICAgICovCiAgICAgICAgZmlsbERheTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBpdGVtcyA9IHRoaXMuZmlsbENvbW1vbignZCcpLCBuYW1lLCBpLAogICAgICAgICAgICAgICAgdHdvRGlnaXQgPSB0aGlzLm9wdGlvbnMudGVtcGxhdGUuaW5kZXhPZignREQnKSAhPT0gLTEsCiAgICAgICAgICAgICAgICBkYXlzQ291bnQgPSAzMTsKCiAgICAgICAgICAgIC8vIGRldGVjdCBkYXlzIGNvdW50IChkZXBlbmRzIG9uIG1vbnRoIGFuZCB5ZWFyKQogICAgICAgICAgICAvLyBvcmlnaW5hbGx5IGh0dHBzOi8vZ2l0aHViLmNvbS92aXRhbGV0cy9jb21ib2RhdGUvcHVsbC83CiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc21hcnREYXlzICYmIHRoaXMuJG1vbnRoICYmIHRoaXMuJHllYXIpIHsKICAgICAgICAgICAgICAgIHZhciBtb250aCA9IHBhcnNlSW50KHRoaXMuJG1vbnRoLnZhbCgpLCAxMCk7CiAgICAgICAgICAgICAgICB2YXIgeWVhciA9IHBhcnNlSW50KHRoaXMuJHllYXIudmFsKCksIDEwKTsKCiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKG1vbnRoKSAmJiAhaXNOYU4oeWVhcikpIHsKICAgICAgICAgICAgICAgICAgICBkYXlzQ291bnQgPSBtb21lbnQoW3llYXIsIG1vbnRoXSkuZGF5c0luTW9udGgoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8PSBkYXlzQ291bnQ7IGkrKykgewogICAgICAgICAgICAgICAgbmFtZSA9IHR3b0RpZ2l0ID8gdGhpcy5sZWFkWmVybyhpKSA6IGk7CiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKFtpLCBuYW1lXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGl0ZW1zOyAgICAgICAgCiAgICAgICAgfSwKICAgICAgICAKICAgICAgICAvKgogICAgICAgIGZpbGwgbW9udGgKICAgICAgICAqLwogICAgICAgIGZpbGxNb250aDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBpdGVtcyA9IHRoaXMuZmlsbENvbW1vbignTScpLCBuYW1lLCBpLCAKICAgICAgICAgICAgICAgIGxvbmdOYW1lcyA9IHRoaXMub3B0aW9ucy50ZW1wbGF0ZS5pbmRleE9mKCdNTU1NJykgIT09IC0xLAogICAgICAgICAgICAgICAgc2hvcnROYW1lcyA9IHRoaXMub3B0aW9ucy50ZW1wbGF0ZS5pbmRleE9mKCdNTU0nKSAhPT0gLTEsCiAgICAgICAgICAgICAgICB0d29EaWdpdCA9IHRoaXMub3B0aW9ucy50ZW1wbGF0ZS5pbmRleE9mKCdNTScpICE9PSAtMTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICBmb3IoaT0wOyBpPD0xMTsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZihsb25nTmFtZXMpIHsKICAgICAgICAgICAgICAgICAgICAvL3NlZSBodHRwczovL2dpdGh1Yi5jb20vdGltcndvb2QvbW9tZW50anMuY29tL3B1bGwvMzYKICAgICAgICAgICAgICAgICAgICBuYW1lID0gbW9tZW50KCkuZGF0ZSgxKS5tb250aChpKS5mb3JtYXQoJ01NTU0nKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZihzaG9ydE5hbWVzKSB7CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG1vbWVudCgpLmRhdGUoMSkubW9udGgoaSkuZm9ybWF0KCdNTU0nKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZih0d29EaWdpdCkgewogICAgICAgICAgICAgICAgICAgIG5hbWUgPSB0aGlzLmxlYWRaZXJvKGkrMSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIG5hbWUgPSBpKzE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKFtpLCBuYW1lXSk7CiAgICAgICAgICAgIH0gCiAgICAgICAgICAgIHJldHVybiBpdGVtczsKICAgICAgICB9LCAgCiAgICAgICAgCiAgICAgICAgLyoKICAgICAgICBmaWxsIHllYXIKICAgICAgICAqLwogICAgICAgIGZpbGxZZWFyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGl0ZW1zID0gW10sIG5hbWUsIGksIAogICAgICAgICAgICAgICAgbG9uZ05hbWVzID0gdGhpcy5vcHRpb25zLnRlbXBsYXRlLmluZGV4T2YoJ1lZWVknKSAhPT0gLTE7CiAgICAgICAgICAgCiAgICAgICAgICAgIGZvcihpPXRoaXMub3B0aW9ucy5tYXhZZWFyOyBpPj10aGlzLm9wdGlvbnMubWluWWVhcjsgaS0tKSB7CiAgICAgICAgICAgICAgICBuYW1lID0gbG9uZ05hbWVzID8gaSA6IChpKycnKS5zdWJzdHJpbmcoMik7CiAgICAgICAgICAgICAgICBpdGVtc1t0aGlzLm9wdGlvbnMueWVhckRlc2NlbmRpbmcgPyAncHVzaCcgOiAndW5zaGlmdCddKFtpLCBuYW1lXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGl0ZW1zID0gdGhpcy5maWxsQ29tbW9uKCd5JykuY29uY2F0KGl0ZW1zKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiBpdGVtczsgICAgICAgICAgICAgIAogICAgICAgIH0sICAgIAogICAgICAgIAogICAgICAgIC8qCiAgICAgICAgZmlsbCBob3VyCiAgICAgICAgKi8KICAgICAgICBmaWxsSG91cjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBpdGVtcyA9IHRoaXMuZmlsbENvbW1vbignaCcpLCBuYW1lLCBpLAogICAgICAgICAgICAgICAgaDEyID0gdGhpcy5vcHRpb25zLnRlbXBsYXRlLmluZGV4T2YoJ2gnKSAhPT0gLTEsCiAgICAgICAgICAgICAgICBoMjQgPSB0aGlzLm9wdGlvbnMudGVtcGxhdGUuaW5kZXhPZignSCcpICE9PSAtMSwKICAgICAgICAgICAgICAgIHR3b0RpZ2l0ID0gdGhpcy5vcHRpb25zLnRlbXBsYXRlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignaGgnKSAhPT0gLTEsCiAgICAgICAgICAgICAgICBtaW4gPSBoMTIgPyAxIDogMCwgCiAgICAgICAgICAgICAgICBtYXggPSBoMTIgPyAxMiA6IDIzOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGZvcihpPW1pbjsgaTw9bWF4OyBpKyspIHsKICAgICAgICAgICAgICAgIG5hbWUgPSB0d29EaWdpdCA/IHRoaXMubGVhZFplcm8oaSkgOiBpOwogICAgICAgICAgICAgICAgaXRlbXMucHVzaChbaSwgbmFtZV0pOwogICAgICAgICAgICB9IAogICAgICAgICAgICByZXR1cm4gaXRlbXM7ICAgICAgICAgICAgICAgICAKICAgICAgICB9LCAgICAKICAgICAgICAKICAgICAgICAvKgogICAgICAgIGZpbGwgbWludXRlCiAgICAgICAgKi8KICAgICAgICBmaWxsTWludXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGl0ZW1zID0gdGhpcy5maWxsQ29tbW9uKCdtJyksIG5hbWUsIGksCiAgICAgICAgICAgICAgICB0d29EaWdpdCA9IHRoaXMub3B0aW9ucy50ZW1wbGF0ZS5pbmRleE9mKCdtbScpICE9PSAtMTsKCiAgICAgICAgICAgIGZvcihpPTA7IGk8PTU5OyBpKz0gdGhpcy5vcHRpb25zLm1pbnV0ZVN0ZXApIHsKICAgICAgICAgICAgICAgIG5hbWUgPSB0d29EaWdpdCA/IHRoaXMubGVhZFplcm8oaSkgOiBpOwogICAgICAgICAgICAgICAgaXRlbXMucHVzaChbaSwgbmFtZV0pOwogICAgICAgICAgICB9ICAgIAogICAgICAgICAgICByZXR1cm4gaXRlbXM7ICAgICAgICAgICAgICAKICAgICAgICB9LCAgCiAgICAgICAgCiAgICAgICAgLyoKICAgICAgICBmaWxsIHNlY29uZAogICAgICAgICovCiAgICAgICAgZmlsbFNlY29uZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBpdGVtcyA9IHRoaXMuZmlsbENvbW1vbigncycpLCBuYW1lLCBpLAogICAgICAgICAgICAgICAgdHdvRGlnaXQgPSB0aGlzLm9wdGlvbnMudGVtcGxhdGUuaW5kZXhPZignc3MnKSAhPT0gLTE7CgogICAgICAgICAgICBmb3IoaT0wOyBpPD01OTsgaSs9IHRoaXMub3B0aW9ucy5zZWNvbmRTdGVwKSB7CiAgICAgICAgICAgICAgICBuYW1lID0gdHdvRGlnaXQgPyB0aGlzLmxlYWRaZXJvKGkpIDogaTsKICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goW2ksIG5hbWVdKTsKICAgICAgICAgICAgfSAgICAKICAgICAgICAgICAgcmV0dXJuIGl0ZW1zOyAgICAgICAgICAgICAgCiAgICAgICAgfSwgIAogICAgICAgIAogICAgICAgIC8qCiAgICAgICAgZmlsbCBhbXBtCiAgICAgICAgKi8KICAgICAgICBmaWxsQW1wbTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBhbXBtTCA9IHRoaXMub3B0aW9ucy50ZW1wbGF0ZS5pbmRleE9mKCdhJykgIT09IC0xLAogICAgICAgICAgICAgICAgYW1wbVUgPSB0aGlzLm9wdGlvbnMudGVtcGxhdGUuaW5kZXhPZignQScpICE9PSAtMSwgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGl0ZW1zID0gWwogICAgICAgICAgICAgICAgICAgIFsnYW0nLCBhbXBtTCA/ICdhbScgOiAnQU0nXSwKICAgICAgICAgICAgICAgICAgICBbJ3BtJywgYW1wbUwgPyAncG0nIDogJ1BNJ10KICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIHJldHVybiBpdGVtczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAvKgogICAgICAgICBSZXR1cm5zIGN1cnJlbnQgZGF0ZSB2YWx1ZSBmcm9tIGNvbWJvcy4gCiAgICAgICAgIElmIGZvcm1hdCBub3Qgc3BlY2lmaWVkIC0gYG9wdGlvbnMuZm9ybWF0YCB1c2VkLgogICAgICAgICBJZiBmb3JtYXQgPSBgbnVsbGAgLSBNb21lbnQgb2JqZWN0IHJldHVybmVkLgogICAgICAgICovCiAgICAgICAgZ2V0VmFsdWU6IGZ1bmN0aW9uKGZvcm1hdCkgewogICAgICAgICAgICB2YXIgZHQsIHZhbHVlcyA9IHt9LCAKICAgICAgICAgICAgICAgIHRoYXQgPSB0aGlzLAogICAgICAgICAgICAgICAgbm90U2VsZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAvL2dldHRpbmcgc2VsZWN0ZWQgdmFsdWVzICAgIAogICAgICAgICAgICAkLmVhY2godGhpcy5tYXAsIGZ1bmN0aW9uKGssIHYpIHsKICAgICAgICAgICAgICAgIGlmKGsgPT09ICdhbXBtJykgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBkZWYgPSBrID09PSAnZGF5JyA/IDEgOiAwOwogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhbHVlc1trXSA9IHRoYXRbJyQnK2tdID8gcGFyc2VJbnQodGhhdFsnJCcra10udmFsKCksIDEwKSA6IGRlZjsgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmKGlzTmFOKHZhbHVlc1trXSkpIHsKICAgICAgICAgICAgICAgICAgIG5vdFNlbGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAKICAgICAgICAgICAgLy9pZiBhdCBsZWFzdCBvbmUgdmlzaWJsZSBjb21ibyBub3Qgc2VsZWN0ZWQgLSByZXR1cm4gZW1wdHkgc3RyaW5nCiAgICAgICAgICAgIGlmKG5vdFNlbGVjdGVkKSB7CiAgICAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy9jb252ZXJ0IGhvdXJzIDEyaCAtLT4gMjRoIAogICAgICAgICAgICBpZih0aGlzLiRhbXBtKSB7CiAgICAgICAgICAgICAgICAvLzEyOjAwIHBtIC0tPiAxMjowMCAoMjQtaCBmb3JtYXQsIG1pZGRheSksIDEyOjAwIGFtIC0tPiAwMDowMCAoMjQtaCBmb3JtYXQsIG1pZG5pZ2h0LCBzdGFydCBvZiBkYXkpCiAgICAgICAgICAgICAgICBpZih2YWx1ZXMuaG91ciA9PT0gMTIpIHsKICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuaG91ciA9IHRoaXMuJGFtcG0udmFsKCkgPT09ICdhbScgPyAwIDogMTI7ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmhvdXIgPSB0aGlzLiRhbXBtLnZhbCgpID09PSAnYW0nID8gdmFsdWVzLmhvdXIgOiB2YWx1ZXMuaG91cisxMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIGR0ID0gbW9tZW50KFt2YWx1ZXMueWVhciwgdmFsdWVzLm1vbnRoLCB2YWx1ZXMuZGF5LCB2YWx1ZXMuaG91ciwgdmFsdWVzLm1pbnV0ZSwgdmFsdWVzLnNlY29uZF0pOwogICAgICAgICAgICAKICAgICAgICAgICAgLy9oaWdobGlnaHQgaW52YWxpZCBkYXRlCiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0KGR0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCA9PT0gdW5kZWZpbmVkID8gdGhpcy5vcHRpb25zLmZvcm1hdCA6IGZvcm1hdDsKICAgICAgICAgICAgaWYoZm9ybWF0ID09PSBudWxsKSB7CiAgICAgICAgICAgICAgIHJldHVybiBkdC5pc1ZhbGlkKCkgPyBkdCA6IG51bGw7IAogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICByZXR1cm4gZHQuaXNWYWxpZCgpID8gZHQuZm9ybWF0KGZvcm1hdCkgOiAnJzsgCiAgICAgICAgICAgIH0gICAgICAgICAgIAogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgc2V0VmFsdWU6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgIGlmKCF2YWx1ZSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgZHQgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gbW9tZW50KHZhbHVlLCB0aGlzLm9wdGlvbnMuZm9ybWF0KSA6IG1vbWVudCh2YWx1ZSksCiAgICAgICAgICAgICAgICB0aGF0ID0gdGhpcywKICAgICAgICAgICAgICAgIHZhbHVlcyA9IHt9OwogICAgICAgICAgICAKICAgICAgICAgICAgLy9mdW5jdGlvbiB0byBmaW5kIG5lYXJlc3QgdmFsdWUgaW4gc2VsZWN0IG9wdGlvbnMKICAgICAgICAgICAgZnVuY3Rpb24gZ2V0TmVhcmVzdCgkc2VsZWN0LCB2YWx1ZSkgewogICAgICAgICAgICAgICAgdmFyIGRlbHRhID0ge307CiAgICAgICAgICAgICAgICAkc2VsZWN0LmNoaWxkcmVuKCdvcHRpb24nKS5lYWNoKGZ1bmN0aW9uKGksIG9wdCl7CiAgICAgICAgICAgICAgICAgICAgdmFyIG9wdFZhbHVlID0gJChvcHQpLmF0dHIoJ3ZhbHVlJyksCiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U7CgogICAgICAgICAgICAgICAgICAgIGlmKG9wdFZhbHVlID09PSAnJykgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMob3B0VmFsdWUgLSB2YWx1ZSk7IAogICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBkZWx0YS5kaXN0YW5jZSA9PT0gJ3VuZGVmaW5lZCcgfHwgZGlzdGFuY2UgPCBkZWx0YS5kaXN0YW5jZSkgewogICAgICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IHt2YWx1ZTogb3B0VmFsdWUsIGRpc3RhbmNlOiBkaXN0YW5jZX07CiAgICAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgIH0pOyAKICAgICAgICAgICAgICAgIHJldHVybiBkZWx0YS52YWx1ZTsKICAgICAgICAgICAgfSAgICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmKGR0LmlzVmFsaWQoKSkgewogICAgICAgICAgICAgICAgLy9yZWFkIHZhbHVlcyBmcm9tIGRhdGUgb2JqZWN0CiAgICAgICAgICAgICAgICAkLmVhY2godGhpcy5tYXAsIGZ1bmN0aW9uKGssIHYpIHsKICAgICAgICAgICAgICAgICAgICBpZihrID09PSAnYW1wbScpIHsKICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB2YWx1ZXNba10gPSBkdFt2WzFdXSgpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYodGhpcy4kYW1wbSkgewogICAgICAgICAgICAgICAgICAgIC8vMTI6MDAgcG0gLS0+IDEyOjAwICgyNC1oIGZvcm1hdCwgbWlkZGF5KSwgMTI6MDAgYW0gLS0+IDAwOjAwICgyNC1oIGZvcm1hdCwgbWlkbmlnaHQsIHN0YXJ0IG9mIGRheSkKICAgICAgICAgICAgICAgICAgICBpZih2YWx1ZXMuaG91ciA+PSAxMikgewogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuYW1wbSA9ICdwbSc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlcy5ob3VyID4gMTIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5ob3VyIC09IDEyOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFtcG0gPSAnYW0nOwogICAgICAgICAgICAgICAgICAgICAgICBpZih2YWx1ZXMuaG91ciA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmhvdXIgPSAxMjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJC5lYWNoKHZhbHVlcywgZnVuY3Rpb24oaywgdikgewogICAgICAgICAgICAgICAgICAgIC8vY2FsbCB2YWwoKSBmb3IgZWFjaCBleGlzdGluZyBjb21ibywgZS5nLiB0aGlzLiRob3VyLnZhbCgpCiAgICAgICAgICAgICAgICAgICAgaWYodGhhdFsnJCcra10pIHsKICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgaWYoayA9PT0gJ21pbnV0ZScgJiYgdGhhdC5vcHRpb25zLm1pbnV0ZVN0ZXAgPiAxICYmIHRoYXQub3B0aW9ucy5yb3VuZFRpbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IGdldE5lYXJlc3QodGhhdFsnJCcra10sIHYpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGsgPT09ICdzZWNvbmQnICYmIHRoYXQub3B0aW9ucy5zZWNvbmRTdGVwID4gMSAmJiB0aGF0Lm9wdGlvbnMucm91bmRUaW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBnZXROZWFyZXN0KHRoYXRbJyQnK2tdLCB2KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXRbJyQnK2tdLnZhbCh2KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgZGF5cyBjb3VudAogICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zbWFydERheXMpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGxDb21ibygnZGF5Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LnZhbChkdC5mb3JtYXQodGhpcy5vcHRpb25zLmZvcm1hdCkpLmNoYW5nZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICAvKgogICAgICAgICBoaWdobGlnaHQgY29tYm9zIGlmIGRhdGUgaXMgaW52YWxpZAogICAgICAgICovCiAgICAgICAgaGlnaGxpZ2h0OiBmdW5jdGlvbihkdCkgewogICAgICAgICAgICBpZighZHQuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMuZXJyb3JDbGFzcykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuJHdpZGdldC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuZXJyb3JDbGFzcyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vc3RvcmUgb3JpZ2luYWwgYm9yZGVyIGNvbG9yCiAgICAgICAgICAgICAgICAgICAgaWYoIXRoaXMuYm9yZGVyQ29sb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3JkZXJDb2xvciA9IHRoaXMuJHdpZGdldC5maW5kKCdzZWxlY3QnKS5jc3MoJ2JvcmRlci1jb2xvcicpOyAKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdGhpcy4kd2lkZ2V0LmZpbmQoJ3NlbGVjdCcpLmNzcygnYm9yZGVyLWNvbG9yJywgJ3JlZCcpOwogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmKHRoaXMub3B0aW9ucy5lcnJvckNsYXNzKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy4kd2lkZ2V0LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5lcnJvckNsYXNzKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy4kd2lkZ2V0LmZpbmQoJ3NlbGVjdCcpLmNzcygnYm9yZGVyLWNvbG9yJywgdGhpcy5ib3JkZXJDb2xvcik7CiAgICAgICAgICAgICAgICB9ICAKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgbGVhZFplcm86IGZ1bmN0aW9uKHYpIHsKICAgICAgICAgICAgcmV0dXJuIHYgPD0gOSA/ICcwJyArIHYgOiB2OyAKICAgICAgICB9LAogICAgICAgIAogICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0aGlzLiR3aWRnZXQucmVtb3ZlKCk7CiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlRGF0YSgnY29tYm9kYXRlJykuc2hvdygpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvL3RvZG86IGNsZWFyIG1ldGhvZCAgICAgICAgCiAgICB9OwoKICAgICQuZm4uY29tYm9kYXRlID0gZnVuY3Rpb24gKCBvcHRpb24gKSB7CiAgICAgICAgdmFyIGQsIGFyZ3MgPSBBcnJheS5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgICAgIGFyZ3Muc2hpZnQoKTsKCiAgICAgICAgLy9nZXRWYWx1ZSByZXR1cm5zIGRhdGUgYXMgc3RyaW5nIC8gb2JqZWN0IChub3QgalF1ZXJ5IG9iamVjdCkKICAgICAgICBpZihvcHRpb24gPT09ICdnZXRWYWx1ZScgJiYgdGhpcy5sZW5ndGggJiYgKGQgPSB0aGlzLmVxKDApLmRhdGEoJ2NvbWJvZGF0ZScpKSkgewogICAgICAgICAgcmV0dXJuIGQuZ2V0VmFsdWUuYXBwbHkoZCwgYXJncyk7CiAgICAgICAgfSAgICAgICAgCiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyksCiAgICAgICAgICAgIGRhdGEgPSAkdGhpcy5kYXRhKCdjb21ib2RhdGUnKSwKICAgICAgICAgICAgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uOwogICAgICAgICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAgICAgICR0aGlzLmRhdGEoJ2NvbWJvZGF0ZScsIChkYXRhID0gbmV3IENvbWJvZGF0ZSh0aGlzLCBvcHRpb25zKSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnICYmIHR5cGVvZiBkYXRhW29wdGlvbl0gPT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgICAgICAgZGF0YVtvcHRpb25dLmFwcGx5KGRhdGEsIGFyZ3MpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9OyAgCiAgICAKICAgICQuZm4uY29tYm9kYXRlLmRlZmF1bHRzID0gewogICAgICAgICAvL2luIHRoaXMgZm9ybWF0IHZhbHVlIHN0b3JlZCBpbiBvcmlnaW5hbCBpbnB1dAogICAgICAgIGZvcm1hdDogJ0RELU1NLVlZWVkgSEg6bW0nLCAgICAgIAogICAgICAgIC8vaW4gdGhpcyBmb3JtYXQgaXRlbXMgaW4gZHJvcGRvd25zIGFyZSBkaXNwbGF5ZWQKICAgICAgICB0ZW1wbGF0ZTogJ0QgLyBNTU0gLyBZWVlZICAgSCA6IG1tJywKICAgICAgICAvL2luaXRpYWwgdmFsdWUsIGNhbiBiZSBgbmV3IERhdGUoKWAgICAgCiAgICAgICAgdmFsdWU6IG51bGwsICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICBtaW5ZZWFyOiAxOTcwLAogICAgICAgIG1heFllYXI6IDIwMTUsCiAgICAgICAgeWVhckRlc2NlbmRpbmc6IHRydWUsCiAgICAgICAgbWludXRlU3RlcDogNSwKICAgICAgICBzZWNvbmRTdGVwOiAxLAogICAgICAgIGZpcnN0SXRlbTogJ2VtcHR5JywgLy8nbmFtZScsICdlbXB0eScsICdub25lJwogICAgICAgIGVycm9yQ2xhc3M6IG51bGwsCiAgICAgICAgcm91bmRUaW1lOiB0cnVlLCAvLyB3aGV0aGVyIHRvIHJvdW5kIG1pbnV0ZXMgYW5kIHNlY29uZHMgaWYgc3RlcCA+IDEKICAgICAgICBzbWFydERheXM6IGZhbHNlIC8vIHdoZXRoZXIgZGF5cyBpbiBjb21ibyBkZXBlbmQgb24gc2VsZWN0ZWQgbW9udGg6IDMxLCAzMCwgMjgKICAgIH07Cgp9KHdpbmRvdy5qUXVlcnkpKTsKLyoqCkNvbWJvZGF0ZSBpbnB1dCAtIGRyb3Bkb3duIGRhdGUgYW5kIHRpbWUgcGlja2VyLiAgICAKQmFzZWQgb24gW2NvbWJvZGF0ZV0oaHR0cDovL3ZpdGFsZXRzLmdpdGh1Yi5jb20vY29tYm9kYXRlKSBwbHVnaW4gKGluY2x1ZGVkKS4gVG8gdXNlIGl0IHlvdSBzaG91bGQgbWFudWFsbHkgaW5jbHVkZSBbbW9tZW50anNdKGh0dHA6Ly9tb21lbnRqcy5jb20pLgoKICAgIDxzY3JpcHQgc3JjPSJqcy9tb21lbnQubWluLmpzIj48L3NjcmlwdD4KICAgCkFsbG93cyB0byBpbnB1dDoKCiogb25seSBkYXRlCiogb25seSB0aW1lIAoqIGJvdGggZGF0ZSBhbmQgdGltZSAgCgpQbGVhc2Ugbm90ZSwgdGhhdCBmb3JtYXQgaXMgdGFrZW4gZnJvbSBtb21lbnRqcyBhbmQgKipub3QgY29tcGF0aWJsZSoqIHdpdGggYm9vdHN0cmFwLWRhdGVwaWNrZXIgLyBqcXVlcnkgVUkgZGF0ZXBpY2tlci4gIApJbnRlcm5hbGx5IHZhbHVlIHN0b3JlZCBhcyBgbW9tZW50anNgIG9iamVjdC4gCgpAY2xhc3MgY29tYm9kYXRlCkBleHRlbmRzIGFic3RyYWN0aW5wdXQKQGZpbmFsCkBzaW5jZSAxLjQuMApAZXhhbXBsZQo8YSBocmVmPSIjIiBpZD0iZG9iIiBkYXRhLXR5cGU9ImNvbWJvZGF0ZSIgZGF0YS1waz0iMSIgZGF0YS11cmw9Ii9wb3N0IiBkYXRhLXZhbHVlPSIxOTg0LTA1LTE1IiBkYXRhLXRpdGxlPSJTZWxlY3QgZGF0ZSI+PC9hPgo8c2NyaXB0PgokKGZ1bmN0aW9uKCl7CiAgICAkKCcjZG9iJykuZWRpdGFibGUoewogICAgICAgIGZvcm1hdDogJ1lZWVktTU0tREQnLCAgICAKICAgICAgICB2aWV3Zm9ybWF0OiAnREQuTU0uWVlZWScsICAgIAogICAgICAgIHRlbXBsYXRlOiAnRCAvIE1NTU0gLyBZWVlZJywgICAgCiAgICAgICAgY29tYm9kYXRlOiB7CiAgICAgICAgICAgICAgICBtaW5ZZWFyOiAyMDAwLAogICAgICAgICAgICAgICAgbWF4WWVhcjogMjAxNSwKICAgICAgICAgICAgICAgIG1pbnV0ZVN0ZXA6IDEKICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cn0pOwo8L3NjcmlwdD4KKiovCgovKmdsb2JhbCBtb21lbnQqLwoKKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICAKICAgIHZhciBDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICAgICAgdGhpcy5pbml0KCdjb21ib2RhdGUnLCBvcHRpb25zLCBDb25zdHJ1Y3Rvci5kZWZhdWx0cyk7CiAgICAgICAgCiAgICAgICAgLy9ieSBkZWZhdWx0IHZpZXdmb3JtYXQgZXF1YWxzIHRvIGZvcm1hdAogICAgICAgIGlmKCF0aGlzLm9wdGlvbnMudmlld2Zvcm1hdCkgewogICAgICAgICAgICB0aGlzLm9wdGlvbnMudmlld2Zvcm1hdCA9IHRoaXMub3B0aW9ucy5mb3JtYXQ7CiAgICAgICAgfSAgICAgICAgCiAgICAgICAgCiAgICAgICAgLy90cnkgcGFyc2UgY29tYm9kYXRlIGNvbmZpZyBkZWZpbmVkIGFzIGpzb24gc3RyaW5nIGluIGRhdGEtY29tYm9kYXRlCiAgICAgICAgb3B0aW9ucy5jb21ib2RhdGUgPSAkLmZuLmVkaXRhYmxldXRpbHMudHJ5UGFyc2VKc29uKG9wdGlvbnMuY29tYm9kYXRlLCB0cnVlKTsKCiAgICAgICAgLy9vdmVycmlkaW5nIGNvbWJvZGF0ZSBjb25maWcgKGFzIGJ5IGRlZmF1bHQgalF1ZXJ5IGV4dGVuZCgpIGlzIG5vdCByZWN1cnNpdmUpCiAgICAgICAgdGhpcy5vcHRpb25zLmNvbWJvZGF0ZSA9ICQuZXh0ZW5kKHt9LCBDb25zdHJ1Y3Rvci5kZWZhdWx0cy5jb21ib2RhdGUsIG9wdGlvbnMuY29tYm9kYXRlLCB7CiAgICAgICAgICAgIGZvcm1hdDogdGhpcy5vcHRpb25zLmZvcm1hdCwKICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMub3B0aW9ucy50ZW1wbGF0ZQogICAgICAgIH0pOwogICAgfTsKCiAgICAkLmZuLmVkaXRhYmxldXRpbHMuaW5oZXJpdChDb25zdHJ1Y3RvciwgJC5mbi5lZGl0YWJsZXR5cGVzLmFic3RyYWN0aW5wdXQpOyAgICAKICAgIAogICAgJC5leHRlbmQoQ29uc3RydWN0b3IucHJvdG90eXBlLCB7CiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuJGlucHV0LmNvbWJvZGF0ZSh0aGlzLm9wdGlvbnMuY29tYm9kYXRlKTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgaWYoJC5mbi5lZGl0YWJsZWZvcm0uZW5naW5lID09PSAnYnMzJykgewogICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQuc2libGluZ3MoKS5maW5kKCdzZWxlY3QnKS5hZGRDbGFzcygnZm9ybS1jb250cm9sJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmKHRoaXMub3B0aW9ucy5pbnB1dGNsYXNzKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRpbnB1dC5zaWJsaW5ncygpLmZpbmQoJ3NlbGVjdCcpLmFkZENsYXNzKHRoaXMub3B0aW9ucy5pbnB1dGNsYXNzKTsKICAgICAgICAgICAgfSAgICAgICAgICAgIAogICAgICAgICAgICAvLyJjbGVhciIgbGluawogICAgICAgICAgICAvKgogICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMuY2xlYXIpIHsKICAgICAgICAgICAgICAgIHRoaXMuJGNsZWFyID0gJCgnPGEgaHJlZj0iIyI+PC9hPicpLmh0bWwodGhpcy5vcHRpb25zLmNsZWFyKS5jbGljaygkLnByb3h5KGZ1bmN0aW9uKGUpewogICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXIoKTsKICAgICAgICAgICAgICAgIH0sIHRoaXMpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdGhpcy4kdHBsLnBhcmVudCgpLmFwcGVuZCgkKCc8ZGl2IGNsYXNzPSJlZGl0YWJsZS1jbGVhciI+JykuYXBwZW5kKHRoaXMuJGNsZWFyKSk7ICAKICAgICAgICAgICAgfSAKICAgICAgICAgICAgKi8gICAgICAgICAgICAgICAKICAgICAgICB9LAogICAgICAgIAogICAgICAgIHZhbHVlMmh0bWw6IGZ1bmN0aW9uKHZhbHVlLCBlbGVtZW50KSB7CiAgICAgICAgICAgIHZhciB0ZXh0ID0gdmFsdWUgPyB2YWx1ZS5mb3JtYXQodGhpcy5vcHRpb25zLnZpZXdmb3JtYXQpIDogJyc7CiAgICAgICAgICAgIC8vJChlbGVtZW50KS50ZXh0KHRleHQpOwogICAgICAgICAgICBDb25zdHJ1Y3Rvci5zdXBlcmNsYXNzLnZhbHVlMmh0bWwuY2FsbCh0aGlzLCB0ZXh0LCBlbGVtZW50KTsgIAogICAgICAgIH0sCgogICAgICAgIGh0bWwydmFsdWU6IGZ1bmN0aW9uKGh0bWwpIHsKICAgICAgICAgICAgcmV0dXJuIGh0bWwgPyBtb21lbnQoaHRtbCwgdGhpcy5vcHRpb25zLnZpZXdmb3JtYXQpIDogbnVsbDsKICAgICAgICB9LCAgIAogICAgICAgIAogICAgICAgIHZhbHVlMnN0cjogZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUuZm9ybWF0KHRoaXMub3B0aW9ucy5mb3JtYXQpIDogJyc7CiAgICAgICB9LCAKICAgICAgIAogICAgICAgc3RyMnZhbHVlOiBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICByZXR1cm4gc3RyID8gbW9tZW50KHN0ciwgdGhpcy5vcHRpb25zLmZvcm1hdCkgOiBudWxsOwogICAgICAgfSwgCiAgICAgICAKICAgICAgIHZhbHVlMnN1Ym1pdDogZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTJzdHIodmFsdWUpOwogICAgICAgfSwgICAgICAgICAgICAgICAgICAgIAoKICAgICAgIHZhbHVlMmlucHV0OiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgIHRoaXMuJGlucHV0LmNvbWJvZGF0ZSgnc2V0VmFsdWUnLCB2YWx1ZSk7CiAgICAgICB9LAogICAgICAgIAogICAgICAgaW5wdXQydmFsdWU6IGZ1bmN0aW9uKCkgeyAKICAgICAgICAgICByZXR1cm4gdGhpcy4kaW5wdXQuY29tYm9kYXRlKCdnZXRWYWx1ZScsIG51bGwpOwogICAgICAgfSwgICAgICAgCiAgICAgICAKICAgICAgIGFjdGl2YXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICB0aGlzLiRpbnB1dC5zaWJsaW5ncygnLmNvbWJvZGF0ZScpLmZpbmQoJ3NlbGVjdCcpLmVxKDApLmZvY3VzKCk7CiAgICAgICB9LAogICAgICAgCiAgICAgICAvKgogICAgICAgY2xlYXI6ICBmdW5jdGlvbigpIHsKICAgICAgICAgIHRoaXMuJGlucHV0LmRhdGEoJ2RhdGVwaWNrZXInKS5kYXRlID0gbnVsbDsKICAgICAgICAgIHRoaXMuJGlucHV0LmZpbmQoJy5hY3RpdmUnKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7CiAgICAgICB9LAogICAgICAgKi8KICAgICAgIAogICAgICAgYXV0b3N1Ym1pdDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgCiAgICAgICB9CgogICAgfSk7CiAgICAKICAgIENvbnN0cnVjdG9yLmRlZmF1bHRzID0gJC5leHRlbmQoe30sICQuZm4uZWRpdGFibGV0eXBlcy5hYnN0cmFjdGlucHV0LmRlZmF1bHRzLCB7CiAgICAgICAgLyoqCiAgICAgICAgQHByb3BlcnR5IHRwbCAKICAgICAgICBAZGVmYXVsdCA8aW5wdXQgdHlwZT0idGV4dCI+CiAgICAgICAgKiovICAgICAgICAgCiAgICAgICAgdHBsOic8aW5wdXQgdHlwZT0idGV4dCI+JywKICAgICAgICAvKioKICAgICAgICBAcHJvcGVydHkgaW5wdXRjbGFzcyAKICAgICAgICBAZGVmYXVsdCBudWxsCiAgICAgICAgKiovICAgICAgICAgCiAgICAgICAgaW5wdXRjbGFzczogbnVsbCwKICAgICAgICAvKioKICAgICAgICBGb3JtYXQgdXNlZCBmb3Igc2VuZGluZyB2YWx1ZSB0byBzZXJ2ZXIuIEFsc28gYXBwbGllZCB3aGVuIGNvbnZlcnRpbmcgZGF0ZSBmcm9tIDxjb2RlPmRhdGEtdmFsdWU8L2NvZGU+IGF0dHJpYnV0ZS48YnI+CiAgICAgICAgU2VlIGxpc3Qgb2YgdG9rZW5zIGluIFttb21lbnRqcyBkb2NzXShodHRwOi8vbW9tZW50anMuY29tL2RvY3MvIy9wYXJzaW5nL3N0cmluZy1mb3JtYXQpICAKICAgICAgICAKICAgICAgICBAcHJvcGVydHkgZm9ybWF0IAogICAgICAgIEB0eXBlIHN0cmluZwogICAgICAgIEBkZWZhdWx0IFlZWVktTU0tREQKICAgICAgICAqKi8gICAgICAgICAKICAgICAgICBmb3JtYXQ6J1lZWVktTU0tREQnLAogICAgICAgIC8qKgogICAgICAgIEZvcm1hdCB1c2VkIGZvciBkaXNwbGF5aW5nIGRhdGUuIEFsc28gYXBwbGllZCB3aGVuIGNvbnZlcnRpbmcgZGF0ZSBmcm9tIGVsZW1lbnQncyB0ZXh0IG9uIGluaXQuICAgCiAgICAgICAgSWYgbm90IHNwZWNpZmllZCBlcXVhbHMgdG8gYGZvcm1hdGAuCiAgICAgICAgCiAgICAgICAgQHByb3BlcnR5IHZpZXdmb3JtYXQgCiAgICAgICAgQHR5cGUgc3RyaW5nCiAgICAgICAgQGRlZmF1bHQgbnVsbAogICAgICAgICoqLyAgICAgICAgICAKICAgICAgICB2aWV3Zm9ybWF0OiBudWxsLCAgICAgICAgCiAgICAgICAgLyoqCiAgICAgICAgVGVtcGxhdGUgdXNlZCBmb3IgZGlzcGxheWluZyBkcm9wZG93bnMuCiAgICAgICAgCiAgICAgICAgQHByb3BlcnR5IHRlbXBsYXRlIAogICAgICAgIEB0eXBlIHN0cmluZwogICAgICAgIEBkZWZhdWx0IEQgLyBNTU0gLyBZWVlZCiAgICAgICAgKiovICAgICAgICAgIAogICAgICAgIHRlbXBsYXRlOiAnRCAvIE1NTSAvIFlZWVknLCAgCiAgICAgICAgLyoqCiAgICAgICAgQ29uZmlndXJhdGlvbiBvZiBjb21ib2RhdGUuCiAgICAgICAgRnVsbCBsaXN0IG9mIG9wdGlvbnM6IGh0dHA6Ly92aXRhbGV0cy5naXRodWIuY29tL2NvbWJvZGF0ZS8jZG9jcwogICAgICAgIAogICAgICAgIEBwcm9wZXJ0eSBjb21ib2RhdGUgCiAgICAgICAgQHR5cGUgb2JqZWN0CiAgICAgICAgQGRlZmF1bHQgbnVsbAogICAgICAgICoqLwogICAgICAgIGNvbWJvZGF0ZTogbnVsbAogICAgICAgIAogICAgICAgIC8qCiAgICAgICAgKG5vdCBpbXBsZW1lbnRlZCB5ZXQpCiAgICAgICAgVGV4dCBzaG93biBhcyBjbGVhciBkYXRlIGJ1dHRvbi4gCiAgICAgICAgSWYgPGNvZGU+ZmFsc2U8L2NvZGU+IGNsZWFyIGJ1dHRvbiB3aWxsIG5vdCBiZSByZW5kZXJlZC4KICAgICAgICAKICAgICAgICBAcHJvcGVydHkgY2xlYXIgCiAgICAgICAgQHR5cGUgYm9vbGVhbnxzdHJpbmcKICAgICAgICBAZGVmYXVsdCAneCBjbGVhcicgICAgICAgICAKICAgICAgICAqLwogICAgICAgIC8vY2xlYXI6ICcmdGltZXM7IGNsZWFyJwogICAgfSk7ICAgCgogICAgJC5mbi5lZGl0YWJsZXR5cGVzLmNvbWJvZGF0ZSA9IENvbnN0cnVjdG9yOwoKfSh3aW5kb3cualF1ZXJ5KSk7CgovKioKKiBFZGl0YWJsZSBQb3NoeXRpcCAKKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKiByZXF1aXJlcyBqcXVlcnkucG9zaHl0aXAuanMKKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICAKICAgIC8vZXh0ZW5kIG1ldGhvZHMKICAgICQuZXh0ZW5kKCQuZm4uZWRpdGFibGVDb250YWluZXIuUG9wdXAucHJvdG90eXBlLCB7CiAgICAgICAgY29udGFpbmVyTmFtZTogJ3Bvc2h5dGlwJywKICAgICAgICBpbm5lckNzczogJ2Rpdi50aXAtaW5uZXInLAogICAgICAgIGRlZmF1bHRzOiAkLmZuLnBvc2h5dGlwLmRlZmF1bHRzLAogICAgICAgIAogICAgICAgIGluaXRDb250YWluZXI6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHRoaXMuaGFuZGxlUGxhY2VtZW50KCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAkLmV4dGVuZCh0aGlzLmNvbnRhaW5lck9wdGlvbnMsIHsKICAgICAgICAgICAgICAgIHNob3dPbjogJ25vbmUnLAogICAgICAgICAgICAgICAgY29udGVudDogJycsCiAgICAgICAgICAgICAgICBhbGlnblRvOiAndGFyZ2V0JwogICAgICAgICAgICB9KTsgICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHRoaXMuY2FsbCh0aGlzLmNvbnRhaW5lck9wdGlvbnMpOwogICAgICAgIH0sICAgICAgICAKICAgICAgICAKICAgICAgICAvKgogICAgICAgIE92ZXJ3cml0ZSB0b3RhbGx5IHNob3coKSBtZXRob2QgYXMgcG9zaHl0aXAgcmVxdWlyZXMgY29udGVudCBpcyBzZXQgYmVmb3JlIHNob3cgCiAgICAgICAgKi8KICAgICAgICBzaG93OiBmdW5jdGlvbiAoY2xvc2VBbGwpIHsKICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcygnZWRpdGFibGUtb3BlbicpOwogICAgICAgICAgICBpZihjbG9zZUFsbCAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIC8vY2xvc2UgYWxsIG9wZW4gY29udGFpbmVycyAoZXhjZXB0IHRoaXMpCiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlT3RoZXJzKHRoaXMuJGVsZW1lbnRbMF0pOyAgCiAgICAgICAgICAgIH0gICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vcmVuZGVyIGZvcm0KICAgICAgICAgICAgdGhpcy4kZm9ybSA9ICQoJzxkaXY+Jyk7CiAgICAgICAgICAgIHRoaXMucmVuZGVyRm9ybSgpOyAgICAgICAgICAgICAKICAgICAgICAgIAogICAgICAgICAgICB2YXIgJGxhYmVsID0gJCgnPGxhYmVsPicpLnRleHQodGhpcy5vcHRpb25zLnRpdGxlIHx8IHRoaXMuJGVsZW1lbnQuZGF0YSggInRpdGxlIikgfHwgdGhpcy4kZWxlbWVudC5kYXRhKCAib3JpZ2luYWxUaXRsZSIpKSwKICAgICAgICAgICAgICAgICRjb250ZW50ID0gJCgnPGRpdj4nKS5hcHBlbmQoJGxhYmVsKS5hcHBlbmQodGhpcy4kZm9ybSk7ICAgICAgICAgICAKICAgICAgICAgIAogICAgICAgICAgICB0aGlzLmNhbGwoJ3VwZGF0ZScsICRjb250ZW50KTsKICAgICAgICAgICAgdGhpcy5jYWxsKCdzaG93Jyk7CiAgICAgICAgICAgIAogICAgICAgICAgICB0aGlzLnRpcCgpLmFkZENsYXNzKHRoaXMuY29udGFpbmVyQ2xhc3MpOwogICAgICAgICAgICB0aGlzLiRmb3JtLmRhdGEoJ2VkaXRhYmxlZm9ybScpLmlucHV0LmFjdGl2YXRlKCk7CiAgICAgICAgfSwgICAgIAogICAgICAgIAogICAgICAgIC8qIGhpZGUgKi8KICAgICAgICBpbm5lckhpZGU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5jYWxsKCdoaWRlJyk7ICAgICAgIAogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgLyogZGVzdHJveSAqLwogICAgICAgIGlubmVyRGVzdHJveTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoaXMuY2FsbCgnZGVzdHJveScpOwogICAgICAgIH0sICAgICAgICAgICAgIAogICAgICAgICAKICAgICAgICBzZXRQb3NpdGlvbjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyKCkucmVmcmVzaChmYWxzZSk7CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICBoYW5kbGVQbGFjZW1lbnQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgIHZhciB4LCB5LCBveCA9IDAsIG95ID0gMDsgCiAgICAgICAgICAgc3dpdGNoKHRoaXMub3B0aW9ucy5wbGFjZW1lbnQpIHsKICAgICAgICAgICAgICAgY2FzZSAndG9wJzoKICAgICAgICAgICAgICAgICAgICAgIHggPSAnY2VudGVyJzsKICAgICAgICAgICAgICAgICAgICAgIHkgPSAndG9wJzsKICAgICAgICAgICAgICAgICAgICAgIG95ID0gNTsKICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgJ3JpZ2h0JzoKICAgICAgICAgICAgICAgICAgICAgIHggPSAncmlnaHQnOwogICAgICAgICAgICAgICAgICAgICAgeSA9ICdjZW50ZXInOwogICAgICAgICAgICAgICAgICAgICAgb3ggPSAxMDsKICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6CiAgICAgICAgICAgICAgICAgICAgICB4ID0gJ2NlbnRlcic7CiAgICAgICAgICAgICAgICAgICAgICB5ID0gJ2JvdHRvbSc7CiAgICAgICAgICAgICAgICAgICAgICBveSA9IDU7CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlICdsZWZ0JzoKICAgICAgICAgICAgICAgICAgICAgIHggPSAnbGVmdCc7CiAgICAgICAgICAgICAgICAgICAgICB5ID0gJ2NlbnRlcic7CiAgICAgICAgICAgICAgICAgICAgICBveCA9IDEwOwogICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICB9CiAgICAgICAgICAgCiAgICAgICAgICAgJC5leHRlbmQodGhpcy5jb250YWluZXJPcHRpb25zLCB7CiAgICAgICAgICAgICAgIGFsaWduWDogeCwKICAgICAgICAgICAgICAgb2Zmc2V0WDogb3gsCiAgICAgICAgICAgICAgIGFsaWduWTogeSwKICAgICAgICAgICAgICAgb2Zmc2V0WTpveQogICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0pOwogICAgCiAgICAvL2RlZmF1bHRzCiAgICAkLmZuLmVkaXRhYmxlQ29udGFpbmVyLmRlZmF1bHRzID0gJC5leHRlbmQoe30sICQuZm4uZWRpdGFibGVDb250YWluZXIuZGVmYXVsdHMsIHsKICAgICAgICBjbGFzc05hbWU6ICd0aXAteWVsbG93c2ltcGxlJwogICAgfSk7CiAgICAKICAgIAogICAgLyoqCiAgICAqIFBvc2h5dGlwIGZpeDogZGlzYWJsZSBpbmNvcnJlY3QgdGFibGUgZGlzcGxheQogICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3ZhZGlrb20vcG9zaHl0aXAvaXNzdWVzLzcKICAgICovIAogICAgLypqc2hpbnQgZXFlcWVxOmZhbHNlLCBjdXJseTogZmFsc2UqLwogICAgaWYoJC5Qb3NoeXRpcCkgeyAgLy9uZWVkIHRoaXMgY2hlY2ssIGJlY2F1c2UgaW4gaW5saW5lIG1vZGUgcG9zaHl0aXAgbWF5IG5vdCBiZSBsb2FkZWQhCiAgICAgIHZhciB0aXBzID0gW10sCiAgICAgIHJlQmdJbWFnZSA9IC9edXJsXChbIiddPyhbXiInXCldKilbIiddP1wpOz8kL2ksCiAgICAgIHJlUE5HID0gL1wucG5nJC9pLAogICAgICBpZTYgPSAhIXdpbmRvdy5jcmVhdGVQb3B1cCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY3VycmVudFN0eWxlLm1pbldpZHRoID09ICd1bmRlZmluZWQnOwogICAgICAKICAgICAgJC5Qb3NoeXRpcC5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uKGFzeW5jKSB7CiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgCiAgICAgICAgICB2YXIgY3VyclBvczsKICAgICAgICAgIGlmIChhc3luYykgewogICAgICAgICAgICAgIGlmICghdGhpcy4kdGlwLmRhdGEoJ2FjdGl2ZScpKQogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgLy8gc2F2ZSBjdXJyZW50IHBvc2l0aW9uIGFzIHdlIHdpbGwgbmVlZCB0byBhbmltYXRlCiAgICAgICAgICAgICAgY3VyclBvcyA9IHtsZWZ0OiB0aGlzLiR0aXAuY3NzKCdsZWZ0JyksIHRvcDogdGhpcy4kdGlwLmNzcygndG9wJyl9OwogICAgICAgICAgfQoKICAgICAgICAgIC8vIHJlc2V0IHBvc2l0aW9uIHRvIGF2b2lkIHRleHQgd3JhcHBpbmcsIGV0Yy4KICAgICAgICAgIHRoaXMuJHRpcC5jc3Moe2xlZnQ6IDAsIHRvcDogMH0pLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpOwoKICAgICAgICAgIC8vIHNhdmUgZGVmYXVsdCBvcGFjaXR5CiAgICAgICAgICBpZiAodGhpcy5vcGFjaXR5ID09PSB1bmRlZmluZWQpCiAgICAgICAgICAgICAgdGhpcy5vcGFjaXR5ID0gdGhpcy4kdGlwLmNzcygnb3BhY2l0eScpOwoKICAgICAgICAgIC8vIGNoZWNrIGZvciBpbWFnZXMgLSB0aGlzIGNvZGUgaXMgaGVyZSAoaS5lLiBleGVjdXRlZCBlYWNoIHRpbWUgd2Ugc2hvdyB0aGUgdGlwIGFuZCBub3Qgb24gaW5pdCkgZHVlIHRvIHNvbWUgYnJvd3NlciBpbmNvbnNpc3RlbmNpZXMKICAgICAgICAgIHZhciBiZ0ltYWdlID0gdGhpcy4kdGlwLmNzcygnYmFja2dyb3VuZC1pbWFnZScpLm1hdGNoKHJlQmdJbWFnZSksCiAgICAgICAgICBhcnJvdyA9IHRoaXMuJGFycm93LmNzcygnYmFja2dyb3VuZC1pbWFnZScpLm1hdGNoKHJlQmdJbWFnZSk7CgogICAgICAgICAgaWYgKGJnSW1hZ2UpIHsKICAgICAgICAgICAgICB2YXIgYmdJbWFnZVBORyA9IHJlUE5HLnRlc3QoYmdJbWFnZVsxXSk7CiAgICAgICAgICAgICAgLy8gZmFsbGJhY2sgdG8gYmFja2dyb3VuZC1jb2xvci9wYWRkaW5nL2JvcmRlciBpbiBJRTYgaWYgYSBQTkcgaXMgdXNlZAogICAgICAgICAgICAgIGlmIChpZTYgJiYgYmdJbWFnZVBORykgewogICAgICAgICAgICAgICAgICB0aGlzLiR0aXAuY3NzKCdiYWNrZ3JvdW5kLWltYWdlJywgJ25vbmUnKTsKICAgICAgICAgICAgICAgICAgdGhpcy4kaW5uZXIuY3NzKHttYXJnaW46IDAsIGJvcmRlcjogMCwgcGFkZGluZzogMH0pOwogICAgICAgICAgICAgICAgICBiZ0ltYWdlID0gYmdJbWFnZVBORyA9IGZhbHNlOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHRoaXMuJHRpcC5wcmVwZW5kKCc8dGFibGUgY2xhc3M9ImZhbGxiYWNrIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0ZCBjbGFzcz0idGlwLXRvcCB0aXAtYmctaW1hZ2UiIGNvbHNwYW49IjIiPjxzcGFuPjwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0idGlwLXJpZ2h0IHRpcC1iZy1pbWFnZSIgcm93c3Bhbj0iMiI+PHNwYW4+PC9zcGFuPjwvdGQ+PC90cj48dHI+PHRkIGNsYXNzPSJ0aXAtbGVmdCB0aXAtYmctaW1hZ2UiIHJvd3NwYW49IjIiPjxzcGFuPjwvc3Bhbj48L3RkPjx0ZD48L3RkPjwvdHI+PHRyPjx0ZCBjbGFzcz0idGlwLWJvdHRvbSB0aXAtYmctaW1hZ2UiIGNvbHNwYW49IjIiPjxzcGFuPjwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4nKQogICAgICAgICAgICAgICAgICAuY3NzKHtib3JkZXI6IDAsIHBhZGRpbmc6IDAsICdiYWNrZ3JvdW5kLWltYWdlJzogJ25vbmUnLCAnYmFja2dyb3VuZC1jb2xvcic6ICd0cmFuc3BhcmVudCd9KQogICAgICAgICAgICAgICAgICAuZmluZCgnLnRpcC1iZy1pbWFnZScpLmNzcygnYmFja2dyb3VuZC1pbWFnZScsICd1cmwoIicgKyBiZ0ltYWdlWzFdICsnIiknKS5lbmQoKQogICAgICAgICAgICAgICAgICAuZmluZCgndGQnKS5lcSgzKS5hcHBlbmQodGhpcy4kaW5uZXIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAvLyBkaXNhYmxlIGZhZGUgZWZmZWN0IGluIElFIGR1ZSB0byBBbHBoYSBmaWx0ZXIgKyB0cmFuc2x1Y2VudCBQTkcgaXNzdWUKICAgICAgICAgICAgICBpZiAoYmdJbWFnZVBORyAmJiAhJC5zdXBwb3J0Lm9wYWNpdHkpCiAgICAgICAgICAgICAgICAgIHRoaXMub3B0cy5mYWRlID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICAvLyBJRSBhcnJvdyBmaXhlcwogICAgICAgICAgaWYgKGFycm93ICYmICEkLnN1cHBvcnQub3BhY2l0eSkgewogICAgICAgICAgICAgIC8vIGRpc2FibGUgYXJyb3cgaW4gSUU2IGlmIHVzaW5nIGEgUE5HCiAgICAgICAgICAgICAgaWYgKGllNiAmJiByZVBORy50ZXN0KGFycm93WzFdKSkgewogICAgICAgICAgICAgICAgICBhcnJvdyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICB0aGlzLiRhcnJvdy5jc3MoJ2JhY2tncm91bmQtaW1hZ2UnLCAnbm9uZScpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAvLyBkaXNhYmxlIGZhZGUgZWZmZWN0IGluIElFIGR1ZSB0byBBbHBoYSBmaWx0ZXIgKyB0cmFuc2x1Y2VudCBQTkcgaXNzdWUKICAgICAgICAgICAgICB0aGlzLm9wdHMuZmFkZSA9IGZhbHNlOwogICAgICAgICAgfQoKICAgICAgICAgIHZhciAkdGFibGUgPSB0aGlzLiR0aXAuZmluZCgndGFibGUuZmFsbGJhY2snKTsKICAgICAgICAgIGlmIChpZTYpIHsKICAgICAgICAgICAgICAvLyBmaXggbWluL21heC13aWR0aCBpbiBJRTYKICAgICAgICAgICAgICB0aGlzLiR0aXBbMF0uc3R5bGUud2lkdGggPSAnJzsKICAgICAgICAgICAgICAkdGFibGUud2lkdGgoJ2F1dG8nKS5maW5kKCd0ZCcpLmVxKDMpLndpZHRoKCdhdXRvJyk7CiAgICAgICAgICAgICAgdmFyIHRpcFcgPSB0aGlzLiR0aXAud2lkdGgoKSwKICAgICAgICAgICAgICBtaW5XID0gcGFyc2VJbnQodGhpcy4kdGlwLmNzcygnbWluLXdpZHRoJyksIDEwKSwKICAgICAgICAgICAgICBtYXhXID0gcGFyc2VJbnQodGhpcy4kdGlwLmNzcygnbWF4LXdpZHRoJyksIDEwKTsKICAgICAgICAgICAgICBpZiAoIWlzTmFOKG1pblcpICYmIHRpcFcgPCBtaW5XKQogICAgICAgICAgICAgICAgICB0aXBXID0gbWluVzsKICAgICAgICAgICAgICBlbHNlIGlmICghaXNOYU4obWF4VykgJiYgdGlwVyA+IG1heFcpCiAgICAgICAgICAgICAgICAgIHRpcFcgPSBtYXhXOwogICAgICAgICAgICAgIHRoaXMuJHRpcC5hZGQoJHRhYmxlKS53aWR0aCh0aXBXKS5lcSgwKS5maW5kKCd0ZCcpLmVxKDMpLndpZHRoKCcxMDAlJyk7CiAgICAgICAgICB9IGVsc2UgaWYgKCR0YWJsZVswXSkgewogICAgICAgICAgICAgIC8vIGZpeCB0aGUgdGFibGUgd2lkdGggaWYgd2UgYXJlIHVzaW5nIGEgYmFja2dyb3VuZCBpbWFnZQogICAgICAgICAgICAgIC8vIElFOSwgRkY0IHVzZSBmbG9hdCBudW1iZXJzIGZvciB3aWR0aC9oZWlnaHQgc28gdXNlIGdldENvbXB1dGVkU3R5bGUgZm9yIHRoZW0gdG8gYXZvaWQgdGV4dCB3cmFwcGluZwogICAgICAgICAgICAgIC8vIGZvciBkZXRhaWxzIGxvb2sgYXQ6IGh0dHA6Ly92YWRpa29tLmNvbS9kYWlsaWVzL29mZnNldHdpZHRoLW9mZnNldGhlaWdodC11c2VsZXNzLWluLWllOS1maXJlZm94NC8KICAgICAgICAgICAgICAkdGFibGUud2lkdGgoJ2F1dG8nKS5maW5kKCd0ZCcpLmVxKDMpLndpZHRoKCdhdXRvJykuZW5kKCkuZW5kKCkud2lkdGgoZG9jdW1lbnQuZGVmYXVsdFZpZXcgJiYgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSAmJiBwYXJzZUZsb2F0KGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcy4kdGlwWzBdLCBudWxsKS53aWR0aCkgfHwgdGhpcy4kdGlwLndpZHRoKCkpLmZpbmQoJ3RkJykuZXEoMykud2lkdGgoJzEwMCUnKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMudGlwT3V0ZXJXID0gdGhpcy4kdGlwLm91dGVyV2lkdGgoKTsKICAgICAgICAgIHRoaXMudGlwT3V0ZXJIID0gdGhpcy4kdGlwLm91dGVySGVpZ2h0KCk7CgogICAgICAgICAgdGhpcy5jYWxjUG9zKCk7CgogICAgICAgICAgLy8gcG9zaXRpb24gYW5kIHNob3cgdGhlIGFycm93IGltYWdlCiAgICAgICAgICBpZiAoYXJyb3cgJiYgdGhpcy5wb3MuYXJyb3cpIHsKICAgICAgICAgICAgICB0aGlzLiRhcnJvd1swXS5jbGFzc05hbWUgPSAndGlwLWFycm93IHRpcC1hcnJvdy0nICsgdGhpcy5wb3MuYXJyb3c7CiAgICAgICAgICAgICAgdGhpcy4kYXJyb3cuY3NzKCd2aXNpYmlsaXR5JywgJ2luaGVyaXQnKTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoYXN5bmMpIHsKICAgICAgICAgICAgICB0aGlzLmFzeW5jQW5pbWF0aW5nID0gdHJ1ZTsKICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICAgICAgICAgICAgdGhpcy4kdGlwLmNzcyhjdXJyUG9zKS5hbmltYXRlKHtsZWZ0OiB0aGlzLnBvcy5sLCB0b3A6IHRoaXMucG9zLnR9LCAyMDAsIGZ1bmN0aW9uKCkgeyBzZWxmLmFzeW5jQW5pbWF0aW5nID0gZmFsc2U7IH0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLiR0aXAuY3NzKHtsZWZ0OiB0aGlzLnBvcy5sLCB0b3A6IHRoaXMucG9zLnR9KTsKICAgICAgICAgIH0KICAgICAgfTsKICAgIH0KICAgIC8qanNoaW50ZXFlcWVxOiB0cnVlLCBjdXJseTogdHJ1ZSovCn0od2luZG93LmpRdWVyeSkpOwovKioKalF1ZXJ5IFVJIERhdGVwaWNrZXIuICAKRGVzY3JpcHRpb24gYW5kIGV4YW1wbGVzOiBodHRwOi8vanF1ZXJ5dWkuY29tL2RhdGVwaWNrZXIuICAgClRoaXMgaW5wdXQgaXMgYWxzbyBhY2Nlc3NpYmxlIGFzICoqZGF0ZSoqIHR5cGUuIERvIG5vdCB1c2UgaXQgdG9nZXRoZXIgd2l0aCBfX2Jvb3RzdHJhcC1kYXRlcGlja2VyX18gYXMgYm90aCBhcHBseSA8Y29kZT4kKCkuZGF0ZXBpY2tlcigpPC9jb2RlPiBtZXRob2QuICAKRm9yICoqaTE4bioqIHlvdSBzaG91bGQgaW5jbHVkZSBqcyBmaWxlIGZyb20gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnktdWkvdHJlZS9tYXN0ZXIvdWkvaTE4bi4KCkBjbGFzcyBkYXRldWkKQGV4dGVuZHMgYWJzdHJhY3RpbnB1dApAZmluYWwKQGV4YW1wbGUKPGEgaHJlZj0iIyIgaWQ9ImRvYiIgZGF0YS10eXBlPSJkYXRlIiBkYXRhLXBrPSIxIiBkYXRhLXVybD0iL3Bvc3QiIGRhdGEtdGl0bGU9IlNlbGVjdCBkYXRlIj4xNS8wNS8xOTg0PC9hPgo8c2NyaXB0PgokKGZ1bmN0aW9uKCl7CiAgICAkKCcjZG9iJykuZWRpdGFibGUoewogICAgICAgIGZvcm1hdDogJ3l5eXktbW0tZGQnLCAgICAKICAgICAgICB2aWV3Zm9ybWF0OiAnZGQvbW0veXl5eScsICAgIAogICAgICAgIGRhdGVwaWNrZXI6IHsKICAgICAgICAgICAgICAgIGZpcnN0RGF5OiAxCiAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwp9KTsKPC9zY3JpcHQ+CioqLwooZnVuY3Rpb24gKCQpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIAogICAgdmFyIERhdGVVSSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICAgICAgdGhpcy5pbml0KCdkYXRldWknLCBvcHRpb25zLCBEYXRlVUkuZGVmYXVsdHMpOwogICAgICAgIHRoaXMuaW5pdFBpY2tlcihvcHRpb25zLCBEYXRlVUkuZGVmYXVsdHMpOwogICAgfTsKCiAgICAkLmZuLmVkaXRhYmxldXRpbHMuaW5oZXJpdChEYXRlVUksICQuZm4uZWRpdGFibGV0eXBlcy5hYnN0cmFjdGlucHV0KTsgICAgCiAgICAKICAgICQuZXh0ZW5kKERhdGVVSS5wcm90b3R5cGUsIHsKICAgICAgICBpbml0UGlja2VyOiBmdW5jdGlvbihvcHRpb25zLCBkZWZhdWx0cykgewogICAgICAgICAgICAvL2J5IGRlZmF1bHQgdmlld2Zvcm1hdCBlcXVhbHMgdG8gZm9ybWF0CiAgICAgICAgICAgIGlmKCF0aGlzLm9wdGlvbnMudmlld2Zvcm1hdCkgewogICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnZpZXdmb3JtYXQgPSB0aGlzLm9wdGlvbnMuZm9ybWF0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvL2NvcnJlY3QgZm9ybWF0czogcmVwbGFjZSB5eXl5IHdpdGggeXkgKGZvciBjb21wYXRpYmlsaXR5IHdpdGggYm9vdHN0cmFwIGRhdGVwaWNrZXIpCiAgICAgICAgICAgIHRoaXMub3B0aW9ucy52aWV3Zm9ybWF0ID0gdGhpcy5vcHRpb25zLnZpZXdmb3JtYXQucmVwbGFjZSgneXl5eScsICd5eScpOyAKICAgICAgICAgICAgdGhpcy5vcHRpb25zLmZvcm1hdCA9IHRoaXMub3B0aW9ucy5mb3JtYXQucmVwbGFjZSgneXl5eScsICd5eScpOyAgICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vb3ZlcnJpZGluZyBkYXRlcGlja2VyIGNvbmZpZyAoYXMgYnkgZGVmYXVsdCBqUXVlcnkgZXh0ZW5kKCkgaXMgbm90IHJlY3Vyc2l2ZSkKICAgICAgICAgICAgLy9zaW5jZSAxLjQgZGF0ZXBpY2tlciBpbnRlcm5hbGx5IHVzZXMgdmlld2Zvcm1hdCBpbnN0ZWFkIG9mIGZvcm1hdC4gRm9ybWF0IGlzIGZvciBzdWJtaXQgb25seQogICAgICAgICAgICB0aGlzLm9wdGlvbnMuZGF0ZXBpY2tlciA9ICQuZXh0ZW5kKHt9LCBkZWZhdWx0cy5kYXRlcGlja2VyLCBvcHRpb25zLmRhdGVwaWNrZXIsIHsKICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQ6IHRoaXMub3B0aW9ucy52aWV3Zm9ybWF0CiAgICAgICAgICAgIH0pOyAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuJGlucHV0LmRhdGVwaWNrZXIodGhpcy5vcHRpb25zLmRhdGVwaWNrZXIpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8iY2xlYXIiIGxpbmsKICAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLmNsZWFyKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRjbGVhciA9ICQoJzxhIGhyZWY9IiMiPjwvYT4nKS5odG1sKHRoaXMub3B0aW9ucy5jbGVhcikuY2xpY2soJC5wcm94eShmdW5jdGlvbihlKXsKICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyKCk7CiAgICAgICAgICAgICAgICB9LCB0aGlzKSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHRoaXMuJHRwbC5wYXJlbnQoKS5hcHBlbmQoJCgnPGRpdiBjbGFzcz0iZWRpdGFibGUtY2xlYXIiPicpLmFwcGVuZCh0aGlzLiRjbGVhcikpOyAgCiAgICAgICAgICAgIH0gICAgICAgICAgICAgIAogICAgICAgIH0sCgogICAgICAgIHZhbHVlMmh0bWw6IGZ1bmN0aW9uKHZhbHVlLCBlbGVtZW50KSB7CiAgICAgICAgICAgIHZhciB0ZXh0ID0gJC5kYXRlcGlja2VyLmZvcm1hdERhdGUodGhpcy5vcHRpb25zLnZpZXdmb3JtYXQsIHZhbHVlKTsKICAgICAgICAgICAgRGF0ZVVJLnN1cGVyY2xhc3MudmFsdWUyaHRtbC5jYWxsKHRoaXMsIHRleHQsIGVsZW1lbnQpOyAKICAgICAgICB9LAoKICAgICAgICBodG1sMnZhbHVlOiBmdW5jdGlvbihodG1sKSB7CiAgICAgICAgICAgaWYodHlwZW9mIGh0bWwgIT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgIHJldHVybiBodG1sOwogICAgICAgICAgIH0gICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgLy9pZiBzdHJpbmcgZG9lcyBub3QgbWF0Y2ggZm9ybWF0LCBVSSBkYXRlcGlja2VyIHRocm93cyBleGNlcHRpb24KICAgICAgICAgICB2YXIgZDsKICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGQgPSAkLmRhdGVwaWNrZXIucGFyc2VEYXRlKHRoaXMub3B0aW9ucy52aWV3Zm9ybWF0LCBodG1sKTsKICAgICAgICAgICB9IGNhdGNoKGUpIHt9CiAgICAgICAgICAgCiAgICAgICAgICAgcmV0dXJuIGQ7ICAgICAgICAgICAgCiAgICAgICAgfSwgICAKICAgICAgICAKICAgICAgICB2YWx1ZTJzdHI6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgcmV0dXJuICQuZGF0ZXBpY2tlci5mb3JtYXREYXRlKHRoaXMub3B0aW9ucy5mb3JtYXQsIHZhbHVlKTsKICAgICAgIH0sIAogICAgICAgCiAgICAgICBzdHIydmFsdWU6IGZ1bmN0aW9uKHN0cikgewogICAgICAgICAgIGlmKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgIHJldHVybiBzdHI7CiAgICAgICAgICAgfQogICAgICAgICAgIAogICAgICAgICAgIC8vaWYgc3RyaW5nIGRvZXMgbm90IG1hdGNoIGZvcm1hdCwgVUkgZGF0ZXBpY2tlciB0aHJvd3MgZXhjZXB0aW9uCiAgICAgICAgICAgdmFyIGQ7CiAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBkID0gJC5kYXRlcGlja2VyLnBhcnNlRGF0ZSh0aGlzLm9wdGlvbnMuZm9ybWF0LCBzdHIpOwogICAgICAgICAgIH0gY2F0Y2goZSkge30KICAgICAgICAgICAKICAgICAgICAgICByZXR1cm4gZDsKICAgICAgIH0sIAogICAgICAgCiAgICAgICB2YWx1ZTJzdWJtaXQ6IGZ1bmN0aW9uKHZhbHVlKSB7IAogICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlMnN0cih2YWx1ZSk7CiAgICAgICB9LCAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgIHZhbHVlMmlucHV0OiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgIHRoaXMuJGlucHV0LmRhdGVwaWNrZXIoJ3NldERhdGUnLCB2YWx1ZSk7CiAgICAgICB9LAogICAgICAgIAogICAgICAgaW5wdXQydmFsdWU6IGZ1bmN0aW9uKCkgeyAKICAgICAgICAgICByZXR1cm4gdGhpcy4kaW5wdXQuZGF0ZXBpY2tlcignZ2V0RGF0ZScpOwogICAgICAgfSwgICAgICAgCiAgICAgICAKICAgICAgIGFjdGl2YXRlOiBmdW5jdGlvbigpIHsKICAgICAgIH0sCiAgICAgICAKICAgICAgIGNsZWFyOiAgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgdGhpcy4kaW5wdXQuZGF0ZXBpY2tlcignc2V0RGF0ZScsIG51bGwpOwogICAgICAgICAgIC8vIHN1Ym1pdCBhdXRvbWF0aWNhbGx5IHdoZSB0aGF0IGFyZSBubyBidXR0b25zCiAgICAgICAgICAgaWYodGhpcy5pc0F1dG9zdWJtaXQpIHsKICAgICAgICAgICAgICB0aGlzLnN1Ym1pdCgpOwogICAgICAgICAgIH0KICAgICAgIH0sCiAgICAgICAKICAgICAgIGF1dG9zdWJtaXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgIHRoaXMuaXNBdXRvc3VibWl0ID0gdHJ1ZTsgCiAgICAgICAgICAgdGhpcy4kaW5wdXQub24oJ21vdXNldXAnLCAndGFibGUudWktZGF0ZXBpY2tlci1jYWxlbmRhciBhLnVpLXN0YXRlLWRlZmF1bHQnLCAkLnByb3h5KHRoaXMuc3VibWl0LCB0aGlzKSk7CiAgICAgICB9LAoKICAgICAgIHN1Ym1pdDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgdmFyICRmb3JtID0gdGhpcy4kaW5wdXQuY2xvc2VzdCgnZm9ybScpOwogICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICRmb3JtLnN1Ym1pdCgpOwogICAgICAgICAgIH0sIDIwMCk7CiAgICAgICB9CgogICAgfSk7CiAgICAKICAgIERhdGVVSS5kZWZhdWx0cyA9ICQuZXh0ZW5kKHt9LCAkLmZuLmVkaXRhYmxldHlwZXMuYWJzdHJhY3RpbnB1dC5kZWZhdWx0cywgewogICAgICAgIC8qKgogICAgICAgIEBwcm9wZXJ0eSB0cGwgCiAgICAgICAgQGRlZmF1bHQgPGRpdj48L2Rpdj4KICAgICAgICAqKi8gICAgICAgICAKICAgICAgICB0cGw6JzxkaXYgY2xhc3M9ImVkaXRhYmxlLWRhdGUiPjwvZGl2PicsCiAgICAgICAgLyoqCiAgICAgICAgQHByb3BlcnR5IGlucHV0Y2xhc3MgCiAgICAgICAgQGRlZmF1bHQgbnVsbAogICAgICAgICoqLyAgICAgICAgIAogICAgICAgIGlucHV0Y2xhc3M6IG51bGwsCiAgICAgICAgLyoqCiAgICAgICAgRm9ybWF0IHVzZWQgZm9yIHNlbmRpbmcgdmFsdWUgdG8gc2VydmVyLiBBbHNvIGFwcGxpZWQgd2hlbiBjb252ZXJ0aW5nIGRhdGUgZnJvbSA8Y29kZT5kYXRhLXZhbHVlPC9jb2RlPiBhdHRyaWJ1dGUuPGJyPgogICAgICAgIEZ1bGwgbGlzdCBvZiB0b2tlbnM6IGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVUkvRGF0ZXBpY2tlci9mb3JtYXREYXRlCiAgICAgICAgCiAgICAgICAgQHByb3BlcnR5IGZvcm1hdCAKICAgICAgICBAdHlwZSBzdHJpbmcKICAgICAgICBAZGVmYXVsdCB5eXl5LW1tLWRkCiAgICAgICAgKiovICAgICAgICAgIAogICAgICAgIGZvcm1hdDoneXl5eS1tbS1kZCcsIAogICAgICAgIC8qKgogICAgICAgIEZvcm1hdCB1c2VkIGZvciBkaXNwbGF5aW5nIGRhdGUuIEFsc28gYXBwbGllZCB3aGVuIGNvbnZlcnRpbmcgZGF0ZSBmcm9tIGVsZW1lbnQncyB0ZXh0IG9uIGluaXQuICAgIAogICAgICAgIElmIG5vdCBzcGVjaWZpZWQgZXF1YWxzIHRvIDxjb2RlPmZvcm1hdDwvY29kZT4KICAgICAgICAKICAgICAgICBAcHJvcGVydHkgdmlld2Zvcm1hdCAKICAgICAgICBAdHlwZSBzdHJpbmcKICAgICAgICBAZGVmYXVsdCBudWxsCiAgICAgICAgKiovICAgICAgICAgIAogICAgICAgIHZpZXdmb3JtYXQ6IG51bGwsCiAgICAgICAgCiAgICAgICAgLyoqCiAgICAgICAgQ29uZmlndXJhdGlvbiBvZiBkYXRlcGlja2VyLgogICAgICAgIEZ1bGwgbGlzdCBvZiBvcHRpb25zOiBodHRwOi8vYXBpLmpxdWVyeXVpLmNvbS9kYXRlcGlja2VyCiAgICAgICAgCiAgICAgICAgQHByb3BlcnR5IGRhdGVwaWNrZXIgCiAgICAgICAgQHR5cGUgb2JqZWN0CiAgICAgICAgQGRlZmF1bHQgewogICAgICAgICAgIGZpcnN0RGF5OiAwLCAKICAgICAgICAgICBjaGFuZ2VZZWFyOiB0cnVlLCAKICAgICAgICAgICBjaGFuZ2VNb250aDogdHJ1ZQogICAgICAgIH0KICAgICAgICAqKi8KICAgICAgICBkYXRlcGlja2VyOiB7CiAgICAgICAgICAgIGZpcnN0RGF5OiAwLAogICAgICAgICAgICBjaGFuZ2VZZWFyOiB0cnVlLAogICAgICAgICAgICBjaGFuZ2VNb250aDogdHJ1ZSwKICAgICAgICAgICAgc2hvd090aGVyTW9udGhzOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAvKioKICAgICAgICBUZXh0IHNob3duIGFzIGNsZWFyIGRhdGUgYnV0dG9uLiAKICAgICAgICBJZiA8Y29kZT5mYWxzZTwvY29kZT4gY2xlYXIgYnV0dG9uIHdpbGwgbm90IGJlIHJlbmRlcmVkLgogICAgICAgIAogICAgICAgIEBwcm9wZXJ0eSBjbGVhciAKICAgICAgICBAdHlwZSBib29sZWFufHN0cmluZwogICAgICAgIEBkZWZhdWx0ICd4IGNsZWFyJyAgICAgICAgIAogICAgICAgICoqLwogICAgICAgIGNsZWFyOiAnJnRpbWVzOyBjbGVhcicgICAgICAgIAogICAgfSk7ICAgCgogICAgJC5mbi5lZGl0YWJsZXR5cGVzLmRhdGV1aSA9IERhdGVVSTsKCn0od2luZG93LmpRdWVyeSkpOwoKLyoqCmpRdWVyeSBVSSBkYXRlZmllbGQgaW5wdXQgLSBtb2RpZmljYXRpb24gZm9yIGlubGluZSBtb2RlLgpTaG93cyBub3JtYWwgPGlucHV0IHR5cGU9InRleHQiPiBhbmQgYmluZHMgcG9wdXAgZGF0ZXBpY2tlci4gIApBdXRvbWF0aWNhbGx5IHNob3duIGluIGlubGluZSBtb2RlLgoKQGNsYXNzIGRhdGV1aWZpZWxkCkBleHRlbmRzIGRhdGV1aQoKQHNpbmNlIDEuNC4wCioqLwooZnVuY3Rpb24gKCQpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIAogICAgdmFyIERhdGVVSUZpZWxkID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgICAgICB0aGlzLmluaXQoJ2RhdGV1aWZpZWxkJywgb3B0aW9ucywgRGF0ZVVJRmllbGQuZGVmYXVsdHMpOwogICAgICAgIHRoaXMuaW5pdFBpY2tlcihvcHRpb25zLCBEYXRlVUlGaWVsZC5kZWZhdWx0cyk7CiAgICB9OwoKICAgICQuZm4uZWRpdGFibGV1dGlscy5pbmhlcml0KERhdGVVSUZpZWxkLCAkLmZuLmVkaXRhYmxldHlwZXMuZGF0ZXVpKTsgICAgCiAgICAKICAgICQuZXh0ZW5kKERhdGVVSUZpZWxkLnByb3RvdHlwZSwgewogICAgICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyAgdGhpcy4kaW5wdXQgPSB0aGlzLiR0cGwuZmluZCgnaW5wdXQnKTsgCiAgICAgICAgICAgIHRoaXMuJGlucHV0LmRhdGVwaWNrZXIodGhpcy5vcHRpb25zLmRhdGVwaWNrZXIpOwogICAgICAgICAgICAkLmZuLmVkaXRhYmxldHlwZXMudGV4dC5wcm90b3R5cGUucmVuZGVyQ2xlYXIuY2FsbCh0aGlzKTsKICAgICAgIH0sCiAgICAgIAogICAgICAgdmFsdWUyaW5wdXQ6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgdGhpcy4kaW5wdXQudmFsKCQuZGF0ZXBpY2tlci5mb3JtYXREYXRlKHRoaXMub3B0aW9ucy52aWV3Zm9ybWF0LCB2YWx1ZSkpOwogICAgICAgfSwKICAgICAgICAKICAgICAgIGlucHV0MnZhbHVlOiBmdW5jdGlvbigpIHsgCiAgICAgICAgICAgcmV0dXJuIHRoaXMuaHRtbDJ2YWx1ZSh0aGlzLiRpbnB1dC52YWwoKSk7CiAgICAgICB9LCAgICAgICAgCiAgICAgICAgCiAgICAgICBhY3RpdmF0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgJC5mbi5lZGl0YWJsZXR5cGVzLnRleHQucHJvdG90eXBlLmFjdGl2YXRlLmNhbGwodGhpcyk7CiAgICAgICB9LAogICAgICAgCiAgICAgICB0b2dnbGVDbGVhcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgJC5mbi5lZGl0YWJsZXR5cGVzLnRleHQucHJvdG90eXBlLnRvZ2dsZUNsZWFyLmNhbGwodGhpcyk7CiAgICAgICB9LAogICAgICAgCiAgICAgICBhdXRvc3VibWl0OiBmdW5jdGlvbigpIHsKICAgICAgICAgIC8vcmVzZXQgYXV0b3N1Ym1pdCB0byBlbXB0eSAgCiAgICAgICB9CiAgICB9KTsKICAgIAogICAgRGF0ZVVJRmllbGQuZGVmYXVsdHMgPSAkLmV4dGVuZCh7fSwgJC5mbi5lZGl0YWJsZXR5cGVzLmRhdGV1aS5kZWZhdWx0cywgewogICAgICAgIC8qKgogICAgICAgIEBwcm9wZXJ0eSB0cGwgCiAgICAgICAgQGRlZmF1bHQgPGlucHV0IHR5cGU9InRleHQiPgogICAgICAgICoqLyAgICAgICAgIAogICAgICAgIHRwbDogJzxpbnB1dCB0eXBlPSJ0ZXh0Ii8+JywKICAgICAgICAvKioKICAgICAgICBAcHJvcGVydHkgaW5wdXRjbGFzcyAKICAgICAgICBAZGVmYXVsdCBudWxsCiAgICAgICAgKiovICAgICAgICAgCiAgICAgICAgaW5wdXRjbGFzczogbnVsbCwKICAgICAgICAKICAgICAgICAvKiBkYXRlcGlja2VyIGNvbmZpZyAqLwogICAgICAgIGRhdGVwaWNrZXI6IHsKICAgICAgICAgICAgc2hvd09uOiAiYnV0dG9uIiwKICAgICAgICAgICAgYnV0dG9uSW1hZ2U6ICJodHRwOi8vanF1ZXJ5dWkuY29tL3Jlc291cmNlcy9kZW1vcy9kYXRlcGlja2VyL2ltYWdlcy9jYWxlbmRhci5naWYiLAogICAgICAgICAgICBidXR0b25JbWFnZU9ubHk6IHRydWUsICAgICAgICAgICAgCiAgICAgICAgICAgIGZpcnN0RGF5OiAwLAogICAgICAgICAgICBjaGFuZ2VZZWFyOiB0cnVlLAogICAgICAgICAgICBjaGFuZ2VNb250aDogdHJ1ZSwKICAgICAgICAgICAgc2hvd090aGVyTW9udGhzOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAKICAgICAgICAvKiBkaXNhYmxlIGNsZWFyIGxpbmsgKi8gCiAgICAgICAgY2xlYXI6IGZhbHNlCiAgICB9KTsKICAgIAogICAgJC5mbi5lZGl0YWJsZXR5cGVzLmRhdGV1aWZpZWxkID0gRGF0ZVVJRmllbGQ7Cgp9KHdpbmRvdy5qUXVlcnkpKTs=]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery-editable/js/jquery-editable-poshytip.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIFgtZWRpdGFibGUgLSB2MS41LjEgCiogSW4tcGxhY2UgZWRpdGluZyB3aXRoIFR3aXR0ZXIgQm9vdHN0cmFwLCBqUXVlcnkgVUkgb3IgcHVyZSBqUXVlcnkKKiBodHRwOi8vZ2l0aHViLmNvbS92aXRhbGV0cy94LWVkaXRhYmxlCiogQ29weXJpZ2h0IChjKSAyMDEzIFZpdGFsaXkgUG90YXBvdjsgTGljZW5zZWQgTUlUICovCiFmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7dmFyIGI9ZnVuY3Rpb24oYixjKXt0aGlzLm9wdGlvbnM9YS5leHRlbmQoe30sYS5mbi5lZGl0YWJsZWZvcm0uZGVmYXVsdHMsYyksdGhpcy4kZGl2PWEoYiksdGhpcy5vcHRpb25zLnNjb3BlfHwodGhpcy5vcHRpb25zLnNjb3BlPXRoaXMpfTtiLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Yixpbml0SW5wdXQ6ZnVuY3Rpb24oKXt0aGlzLmlucHV0PXRoaXMub3B0aW9ucy5pbnB1dCx0aGlzLnZhbHVlPXRoaXMuaW5wdXQuc3RyMnZhbHVlKHRoaXMub3B0aW9ucy52YWx1ZSksdGhpcy5pbnB1dC5wcmVyZW5kZXIoKX0saW5pdFRlbXBsYXRlOmZ1bmN0aW9uKCl7dGhpcy4kZm9ybT1hKGEuZm4uZWRpdGFibGVmb3JtLnRlbXBsYXRlKX0saW5pdEJ1dHRvbnM6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLiRmb3JtLmZpbmQoIi5lZGl0YWJsZS1idXR0b25zIik7Yi5hcHBlbmQoYS5mbi5lZGl0YWJsZWZvcm0uYnV0dG9ucyksImJvdHRvbSI9PT10aGlzLm9wdGlvbnMuc2hvd2J1dHRvbnMmJmIuYWRkQ2xhc3MoImVkaXRhYmxlLWJ1dHRvbnMtYm90dG9tIil9LHJlbmRlcjpmdW5jdGlvbigpe3RoaXMuJGxvYWRpbmc9YShhLmZuLmVkaXRhYmxlZm9ybS5sb2FkaW5nKSx0aGlzLiRkaXYuZW1wdHkoKS5hcHBlbmQodGhpcy4kbG9hZGluZyksdGhpcy5pbml0VGVtcGxhdGUoKSx0aGlzLm9wdGlvbnMuc2hvd2J1dHRvbnM/dGhpcy5pbml0QnV0dG9ucygpOnRoaXMuJGZvcm0uZmluZCgiLmVkaXRhYmxlLWJ1dHRvbnMiKS5yZW1vdmUoKSx0aGlzLnNob3dMb2FkaW5nKCksdGhpcy5pc1NhdmluZz0hMSx0aGlzLiRkaXYudHJpZ2dlckhhbmRsZXIoInJlbmRlcmluZyIpLHRoaXMuaW5pdElucHV0KCksdGhpcy4kZm9ybS5maW5kKCJkaXYuZWRpdGFibGUtaW5wdXQiKS5hcHBlbmQodGhpcy5pbnB1dC4kdHBsKSx0aGlzLiRkaXYuYXBwZW5kKHRoaXMuJGZvcm0pLGEud2hlbih0aGlzLmlucHV0LnJlbmRlcigpKS50aGVuKGEucHJveHkoZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuc2hvd2J1dHRvbnN8fHRoaXMuaW5wdXQuYXV0b3N1Ym1pdCgpLHRoaXMuJGZvcm0uZmluZCgiLmVkaXRhYmxlLWNhbmNlbCIpLmNsaWNrKGEucHJveHkodGhpcy5jYW5jZWwsdGhpcykpLHRoaXMuaW5wdXQuZXJyb3IpdGhpcy5lcnJvcih0aGlzLmlucHV0LmVycm9yKSx0aGlzLiRmb3JtLmZpbmQoIi5lZGl0YWJsZS1zdWJtaXQiKS5hdHRyKCJkaXNhYmxlZCIsITApLHRoaXMuaW5wdXQuJGlucHV0LmF0dHIoImRpc2FibGVkIiwhMCksdGhpcy4kZm9ybS5zdWJtaXQoZnVuY3Rpb24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpfSk7ZWxzZXt0aGlzLmVycm9yKCExKSx0aGlzLmlucHV0LiRpbnB1dC5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpLHRoaXMuJGZvcm0uZmluZCgiLmVkaXRhYmxlLXN1Ym1pdCIpLnJlbW92ZUF0dHIoImRpc2FibGVkIik7dmFyIGI9bnVsbD09PXRoaXMudmFsdWV8fHZvaWQgMD09PXRoaXMudmFsdWV8fCIiPT09dGhpcy52YWx1ZT90aGlzLm9wdGlvbnMuZGVmYXVsdFZhbHVlOnRoaXMudmFsdWU7dGhpcy5pbnB1dC52YWx1ZTJpbnB1dChiKSx0aGlzLiRmb3JtLnN1Ym1pdChhLnByb3h5KHRoaXMuc3VibWl0LHRoaXMpKX10aGlzLiRkaXYudHJpZ2dlckhhbmRsZXIoInJlbmRlcmVkIiksdGhpcy5zaG93Rm9ybSgpLHRoaXMuaW5wdXQucG9zdHJlbmRlciYmdGhpcy5pbnB1dC5wb3N0cmVuZGVyKCl9LHRoaXMpKX0sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy4kZGl2LnRyaWdnZXJIYW5kbGVyKCJjYW5jZWwiKX0sc2hvd0xvYWRpbmc6ZnVuY3Rpb24oKXt2YXIgYSxiO3RoaXMuJGZvcm0/KGE9dGhpcy4kZm9ybS5vdXRlcldpZHRoKCksYj10aGlzLiRmb3JtLm91dGVySGVpZ2h0KCksYSYmdGhpcy4kbG9hZGluZy53aWR0aChhKSxiJiZ0aGlzLiRsb2FkaW5nLmhlaWdodChiKSx0aGlzLiRmb3JtLmhpZGUoKSk6KGE9dGhpcy4kbG9hZGluZy5wYXJlbnQoKS53aWR0aCgpLGEmJnRoaXMuJGxvYWRpbmcud2lkdGgoYSkpLHRoaXMuJGxvYWRpbmcuc2hvdygpfSxzaG93Rm9ybTpmdW5jdGlvbihhKXt0aGlzLiRsb2FkaW5nLmhpZGUoKSx0aGlzLiRmb3JtLnNob3coKSxhIT09ITEmJnRoaXMuaW5wdXQuYWN0aXZhdGUoKSx0aGlzLiRkaXYudHJpZ2dlckhhbmRsZXIoInNob3ciKX0sZXJyb3I6ZnVuY3Rpb24oYil7dmFyIGMsZD10aGlzLiRmb3JtLmZpbmQoIi5jb250cm9sLWdyb3VwIiksZT10aGlzLiRmb3JtLmZpbmQoIi5lZGl0YWJsZS1lcnJvci1ibG9jayIpO2lmKGI9PT0hMSlkLnJlbW92ZUNsYXNzKGEuZm4uZWRpdGFibGVmb3JtLmVycm9yR3JvdXBDbGFzcyksZS5yZW1vdmVDbGFzcyhhLmZuLmVkaXRhYmxlZm9ybS5lcnJvckJsb2NrQ2xhc3MpLmVtcHR5KCkuaGlkZSgpO2Vsc2V7aWYoYil7Yz0oIiIrYikuc3BsaXQoIlxuIik7Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspY1tmXT1hKCI8ZGl2PiIpLnRleHQoY1tmXSkuaHRtbCgpO2I9Yy5qb2luKCI8YnI+Iil9ZC5hZGRDbGFzcyhhLmZuLmVkaXRhYmxlZm9ybS5lcnJvckdyb3VwQ2xhc3MpLGUuYWRkQ2xhc3MoYS5mbi5lZGl0YWJsZWZvcm0uZXJyb3JCbG9ja0NsYXNzKS5odG1sKGIpLnNob3coKX19LHN1Ym1pdDpmdW5jdGlvbihiKXtiLnN0b3BQcm9wYWdhdGlvbigpLGIucHJldmVudERlZmF1bHQoKTt2YXIgYz10aGlzLmlucHV0LmlucHV0MnZhbHVlKCksZD10aGlzLnZhbGlkYXRlKGMpO2lmKCJvYmplY3QiPT09YS50eXBlKGQpJiZ2b2lkIDAhPT1kLm5ld1ZhbHVlKXtpZihjPWQubmV3VmFsdWUsdGhpcy5pbnB1dC52YWx1ZTJpbnB1dChjKSwic3RyaW5nIj09dHlwZW9mIGQubXNnKXJldHVybiB0aGlzLmVycm9yKGQubXNnKSx0aGlzLnNob3dGb3JtKCksdm9pZCAwfWVsc2UgaWYoZClyZXR1cm4gdGhpcy5lcnJvcihkKSx0aGlzLnNob3dGb3JtKCksdm9pZCAwO2lmKCF0aGlzLm9wdGlvbnMuc2F2ZW5vY2hhbmdlJiZ0aGlzLmlucHV0LnZhbHVlMnN0cihjKT09dGhpcy5pbnB1dC52YWx1ZTJzdHIodGhpcy52YWx1ZSkpcmV0dXJuIHRoaXMuJGRpdi50cmlnZ2VySGFuZGxlcigibm9jaGFuZ2UiKSx2b2lkIDA7dmFyIGU9dGhpcy5pbnB1dC52YWx1ZTJzdWJtaXQoYyk7dGhpcy5pc1NhdmluZz0hMCxhLndoZW4odGhpcy5zYXZlKGUpKS5kb25lKGEucHJveHkoZnVuY3Rpb24oYSl7dGhpcy5pc1NhdmluZz0hMTt2YXIgYj0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vcHRpb25zLnN1Y2Nlc3M/dGhpcy5vcHRpb25zLnN1Y2Nlc3MuY2FsbCh0aGlzLm9wdGlvbnMuc2NvcGUsYSxjKTpudWxsO3JldHVybiBiPT09ITE/KHRoaXMuZXJyb3IoITEpLHRoaXMuc2hvd0Zvcm0oITEpLHZvaWQgMCk6InN0cmluZyI9PXR5cGVvZiBiPyh0aGlzLmVycm9yKGIpLHRoaXMuc2hvd0Zvcm0oKSx2b2lkIDApOihiJiYib2JqZWN0Ij09dHlwZW9mIGImJmIuaGFzT3duUHJvcGVydHkoIm5ld1ZhbHVlIikmJihjPWIubmV3VmFsdWUpLHRoaXMuZXJyb3IoITEpLHRoaXMudmFsdWU9Yyx0aGlzLiRkaXYudHJpZ2dlckhhbmRsZXIoInNhdmUiLHtuZXdWYWx1ZTpjLHN1Ym1pdFZhbHVlOmUscmVzcG9uc2U6YX0pLHZvaWQgMCl9LHRoaXMpKS5mYWlsKGEucHJveHkoZnVuY3Rpb24oYSl7dGhpcy5pc1NhdmluZz0hMTt2YXIgYjtiPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuZXJyb3I/dGhpcy5vcHRpb25zLmVycm9yLmNhbGwodGhpcy5vcHRpb25zLnNjb3BlLGEsYyk6InN0cmluZyI9PXR5cGVvZiBhP2E6YS5yZXNwb25zZVRleHR8fGEuc3RhdHVzVGV4dHx8IlVua25vd24gZXJyb3IhIix0aGlzLmVycm9yKGIpLHRoaXMuc2hvd0Zvcm0oKX0sdGhpcykpfSxzYXZlOmZ1bmN0aW9uKGIpe3RoaXMub3B0aW9ucy5waz1hLmZuLmVkaXRhYmxldXRpbHMudHJ5UGFyc2VKc29uKHRoaXMub3B0aW9ucy5waywhMCk7dmFyIGMsZD0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5vcHRpb25zLnBrP3RoaXMub3B0aW9ucy5way5jYWxsKHRoaXMub3B0aW9ucy5zY29wZSk6dGhpcy5vcHRpb25zLnBrLGU9ISEoImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMub3B0aW9ucy51cmx8fHRoaXMub3B0aW9ucy51cmwmJigiYWx3YXlzIj09PXRoaXMub3B0aW9ucy5zZW5kfHwiYXV0byI9PT10aGlzLm9wdGlvbnMuc2VuZCYmbnVsbCE9PWQmJnZvaWQgMCE9PWQpKTtyZXR1cm4gZT8odGhpcy5zaG93TG9hZGluZygpLGM9e25hbWU6dGhpcy5vcHRpb25zLm5hbWV8fCIiLHZhbHVlOmIscGs6ZH0sImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMub3B0aW9ucy5wYXJhbXM/Yz10aGlzLm9wdGlvbnMucGFyYW1zLmNhbGwodGhpcy5vcHRpb25zLnNjb3BlLGMpOih0aGlzLm9wdGlvbnMucGFyYW1zPWEuZm4uZWRpdGFibGV1dGlscy50cnlQYXJzZUpzb24odGhpcy5vcHRpb25zLnBhcmFtcywhMCksYS5leHRlbmQoYyx0aGlzLm9wdGlvbnMucGFyYW1zKSksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMub3B0aW9ucy51cmw/dGhpcy5vcHRpb25zLnVybC5jYWxsKHRoaXMub3B0aW9ucy5zY29wZSxjKTphLmFqYXgoYS5leHRlbmQoe3VybDp0aGlzLm9wdGlvbnMudXJsLGRhdGE6Yyx0eXBlOiJQT1NUIn0sdGhpcy5vcHRpb25zLmFqYXhPcHRpb25zKSkpOnZvaWQgMH0sdmFsaWRhdGU6ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWEmJihhPXRoaXMudmFsdWUpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMudmFsaWRhdGU/dGhpcy5vcHRpb25zLnZhbGlkYXRlLmNhbGwodGhpcy5vcHRpb25zLnNjb3BlLGEpOnZvaWQgMH0sb3B0aW9uOmZ1bmN0aW9uKGEsYil7YSBpbiB0aGlzLm9wdGlvbnMmJih0aGlzLm9wdGlvbnNbYV09YiksInZhbHVlIj09PWEmJnRoaXMuc2V0VmFsdWUoYil9LHNldFZhbHVlOmZ1bmN0aW9uKGEsYil7dGhpcy52YWx1ZT1iP3RoaXMuaW5wdXQuc3RyMnZhbHVlKGEpOmEsdGhpcy4kZm9ybSYmdGhpcy4kZm9ybS5pcygiOnZpc2libGUiKSYmdGhpcy5pbnB1dC52YWx1ZTJpbnB1dCh0aGlzLnZhbHVlKX19LGEuZm4uZWRpdGFibGVmb3JtPWZ1bmN0aW9uKGMpe3ZhciBkPWFyZ3VtZW50cztyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9YSh0aGlzKSxmPWUuZGF0YSgiZWRpdGFibGVmb3JtIiksZz0ib2JqZWN0Ij09dHlwZW9mIGMmJmM7Znx8ZS5kYXRhKCJlZGl0YWJsZWZvcm0iLGY9bmV3IGIodGhpcyxnKSksInN0cmluZyI9PXR5cGVvZiBjJiZmW2NdLmFwcGx5KGYsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZCwxKSl9KX0sYS5mbi5lZGl0YWJsZWZvcm0uQ29uc3RydWN0b3I9YixhLmZuLmVkaXRhYmxlZm9ybS5kZWZhdWx0cz17dHlwZToidGV4dCIsdXJsOm51bGwscGFyYW1zOm51bGwsbmFtZTpudWxsLHBrOm51bGwsdmFsdWU6bnVsbCxkZWZhdWx0VmFsdWU6bnVsbCxzZW5kOiJhdXRvIix2YWxpZGF0ZTpudWxsLHN1Y2Nlc3M6bnVsbCxlcnJvcjpudWxsLGFqYXhPcHRpb25zOm51bGwsc2hvd2J1dHRvbnM6ITAsc2NvcGU6bnVsbCxzYXZlbm9jaGFuZ2U6ITF9LGEuZm4uZWRpdGFibGVmb3JtLnRlbXBsYXRlPSc8Zm9ybSBjbGFzcz0iZm9ybS1pbmxpbmUgZWRpdGFibGVmb3JtIj48ZGl2IGNsYXNzPSJjb250cm9sLWdyb3VwIj48ZGl2PjxkaXYgY2xhc3M9ImVkaXRhYmxlLWlucHV0Ij48L2Rpdj48ZGl2IGNsYXNzPSJlZGl0YWJsZS1idXR0b25zIj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJlZGl0YWJsZS1lcnJvci1ibG9jayI+PC9kaXY+PC9kaXY+PC9mb3JtPicsYS5mbi5lZGl0YWJsZWZvcm0ubG9hZGluZz0nPGRpdiBjbGFzcz0iZWRpdGFibGVmb3JtLWxvYWRpbmciPjwvZGl2PicsYS5mbi5lZGl0YWJsZWZvcm0uYnV0dG9ucz0nPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJlZGl0YWJsZS1zdWJtaXQiPm9rPC9idXR0b24+PGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJlZGl0YWJsZS1jYW5jZWwiPmNhbmNlbDwvYnV0dG9uPicsYS5mbi5lZGl0YWJsZWZvcm0uZXJyb3JHcm91cENsYXNzPW51bGwsYS5mbi5lZGl0YWJsZWZvcm0uZXJyb3JCbG9ja0NsYXNzPSJlZGl0YWJsZS1lcnJvciIsYS5mbi5lZGl0YWJsZWZvcm0uZW5naW5lPSJqcXVlcnkifSh3aW5kb3cualF1ZXJ5KSxmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7YS5mbi5lZGl0YWJsZXV0aWxzPXtpbmhlcml0OmZ1bmN0aW9uKGEsYil7dmFyIGM9ZnVuY3Rpb24oKXt9O2MucHJvdG90eXBlPWIucHJvdG90eXBlLGEucHJvdG90eXBlPW5ldyBjLGEucHJvdG90eXBlLmNvbnN0cnVjdG9yPWEsYS5zdXBlcmNsYXNzPWIucHJvdG90eXBlfSxzZXRDdXJzb3JQb3NpdGlvbjpmdW5jdGlvbihhLGIpe2lmKGEuc2V0U2VsZWN0aW9uUmFuZ2UpYS5zZXRTZWxlY3Rpb25SYW5nZShiLGIpO2Vsc2UgaWYoYS5jcmVhdGVUZXh0UmFuZ2Upe3ZhciBjPWEuY3JlYXRlVGV4dFJhbmdlKCk7Yy5jb2xsYXBzZSghMCksYy5tb3ZlRW5kKCJjaGFyYWN0ZXIiLGIpLGMubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLGIpLGMuc2VsZWN0KCl9fSx0cnlQYXJzZUpzb246ZnVuY3Rpb24oYSxiKXtpZigic3RyaW5nIj09dHlwZW9mIGEmJmEubGVuZ3RoJiZhLm1hdGNoKC9eW1x7XFtdLipbXH1cXV0kLykpaWYoYil0cnl7YT1uZXcgRnVuY3Rpb24oInJldHVybiAiK2EpKCl9Y2F0Y2goYyl7fWZpbmFsbHl7cmV0dXJuIGF9ZWxzZSBhPW5ldyBGdW5jdGlvbigicmV0dXJuICIrYSkoKTtyZXR1cm4gYX0sc2xpY2VPYmo6ZnVuY3Rpb24oYixjLGQpe3ZhciBlLGYsZz17fTtpZighYS5pc0FycmF5KGMpfHwhYy5sZW5ndGgpcmV0dXJuIGc7Zm9yKHZhciBoPTA7aDxjLmxlbmd0aDtoKyspZT1jW2hdLGIuaGFzT3duUHJvcGVydHkoZSkmJihnW2VdPWJbZV0pLGQhPT0hMCYmKGY9ZS50b0xvd2VyQ2FzZSgpLGIuaGFzT3duUHJvcGVydHkoZikmJihnW2VdPWJbZl0pKTtyZXR1cm4gZ30sZ2V0Q29uZmlnRGF0YTpmdW5jdGlvbihiKXt2YXIgYz17fTtyZXR1cm4gYS5lYWNoKGIuZGF0YSgpLGZ1bmN0aW9uKGEsYil7KCJvYmplY3QiIT10eXBlb2YgYnx8YiYmIm9iamVjdCI9PXR5cGVvZiBiJiYoYi5jb25zdHJ1Y3Rvcj09PU9iamVjdHx8Yi5jb25zdHJ1Y3Rvcj09PUFycmF5KSkmJihjW2FdPWIpfSksY30sb2JqZWN0S2V5czpmdW5jdGlvbihhKXtpZihPYmplY3Qua2V5cylyZXR1cm4gT2JqZWN0LmtleXMoYSk7aWYoYSE9PU9iamVjdChhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Iik7dmFyIGIsYz1bXTtmb3IoYiBpbiBhKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGIpJiZjLnB1c2goYik7cmV0dXJuIGN9LGVzY2FwZTpmdW5jdGlvbihiKXtyZXR1cm4gYSgiPGRpdj4iKS50ZXh0KGIpLmh0bWwoKX0saXRlbXNCeVZhbHVlOmZ1bmN0aW9uKGIsYyxkKXtpZighY3x8bnVsbD09PWIpcmV0dXJuW107aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGQpe3ZhciBlPWR8fCJ2YWx1ZSI7ZD1mdW5jdGlvbihhKXtyZXR1cm4gYVtlXX19dmFyIGY9YS5pc0FycmF5KGIpLGc9W10saD10aGlzO3JldHVybiBhLmVhY2goYyxmdW5jdGlvbihjLGUpe2lmKGUuY2hpbGRyZW4pZz1nLmNvbmNhdChoLml0ZW1zQnlWYWx1ZShiLGUuY2hpbGRyZW4sZCkpO2Vsc2UgaWYoZilhLmdyZXAoYixmdW5jdGlvbihhKXtyZXR1cm4gYT09KGUmJiJvYmplY3QiPT10eXBlb2YgZT9kKGUpOmUpfSkubGVuZ3RoJiZnLnB1c2goZSk7ZWxzZXt2YXIgaT1lJiYib2JqZWN0Ij09dHlwZW9mIGU/ZChlKTplO2I9PWkmJmcucHVzaChlKX19KSxnfSxjcmVhdGVJbnB1dDpmdW5jdGlvbihiKXt2YXIgYyxkLGUsZj1iLnR5cGU7cmV0dXJuImRhdGUiPT09ZiYmKCJpbmxpbmUiPT09Yi5tb2RlP2EuZm4uZWRpdGFibGV0eXBlcy5kYXRlZmllbGQ/Zj0iZGF0ZWZpZWxkIjphLmZuLmVkaXRhYmxldHlwZXMuZGF0ZXVpZmllbGQmJihmPSJkYXRldWlmaWVsZCIpOmEuZm4uZWRpdGFibGV0eXBlcy5kYXRlP2Y9ImRhdGUiOmEuZm4uZWRpdGFibGV0eXBlcy5kYXRldWkmJihmPSJkYXRldWkiKSwiZGF0ZSIhPT1mfHxhLmZuLmVkaXRhYmxldHlwZXMuZGF0ZXx8KGY9ImNvbWJvZGF0ZSIpKSwiZGF0ZXRpbWUiPT09ZiYmImlubGluZSI9PT1iLm1vZGUmJihmPSJkYXRldGltZWZpZWxkIiksInd5c2lodG1sNSIhPT1mfHxhLmZuLmVkaXRhYmxldHlwZXNbZl18fChmPSJ0ZXh0YXJlYSIpLCJmdW5jdGlvbiI9PXR5cGVvZiBhLmZuLmVkaXRhYmxldHlwZXNbZl0/KGM9YS5mbi5lZGl0YWJsZXR5cGVzW2ZdLGQ9dGhpcy5zbGljZU9iaihiLHRoaXMub2JqZWN0S2V5cyhjLmRlZmF1bHRzKSksZT1uZXcgYyhkKSk6KGEuZXJyb3IoIlVua25vd24gdHlwZTogIitmKSwhMSl9LHN1cHBvcnRzVHJhbnNpdGlvbnM6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5ib2R5fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYj1hLnN0eWxlLGM9InRyYW5zaXRpb24iLGQ9WyJNb3oiLCJXZWJraXQiLCJLaHRtbCIsIk8iLCJtcyJdO2lmKCJzdHJpbmciPT10eXBlb2YgYltjXSlyZXR1cm4hMDtjPWMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zdWJzdHIoMSk7Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspaWYoInN0cmluZyI9PXR5cGVvZiBiW2RbZV0rY10pcmV0dXJuITA7cmV0dXJuITF9fX0od2luZG93LmpRdWVyeSksZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO3ZhciBiPWZ1bmN0aW9uKGEsYil7dGhpcy5pbml0KGEsYil9LGM9ZnVuY3Rpb24oYSxiKXt0aGlzLmluaXQoYSxiKX07Yi5wcm90b3R5cGU9e2NvbnRhaW5lck5hbWU6bnVsbCxjb250YWluZXJEYXRhTmFtZTpudWxsLGlubmVyQ3NzOm51bGwsY29udGFpbmVyQ2xhc3M6ImVkaXRhYmxlLWNvbnRhaW5lciBlZGl0YWJsZS1wb3B1cCIsZGVmYXVsdHM6e30saW5pdDpmdW5jdGlvbihjLGQpe3RoaXMuJGVsZW1lbnQ9YShjKSx0aGlzLm9wdGlvbnM9YS5leHRlbmQoe30sYS5mbi5lZGl0YWJsZUNvbnRhaW5lci5kZWZhdWx0cyxkKSx0aGlzLnNwbGl0T3B0aW9ucygpLHRoaXMuZm9ybU9wdGlvbnMuc2NvcGU9dGhpcy4kZWxlbWVudFswXSx0aGlzLmluaXRDb250YWluZXIoKSx0aGlzLmRlbGF5ZWRIaWRlPSExLHRoaXMuJGVsZW1lbnQub24oImRlc3Ryb3llZCIsYS5wcm94eShmdW5jdGlvbigpe3RoaXMuZGVzdHJveSgpfSx0aGlzKSksYShkb2N1bWVudCkuZGF0YSgiZWRpdGFibGUtaGFuZGxlcnMtYXR0YWNoZWQiKXx8KGEoZG9jdW1lbnQpLm9uKCJrZXl1cC5lZGl0YWJsZSIsZnVuY3Rpb24oYil7Mjc9PT1iLndoaWNoJiZhKCIuZWRpdGFibGUtb3BlbiIpLmVkaXRhYmxlQ29udGFpbmVyKCJoaWRlIil9KSxhKGRvY3VtZW50KS5vbigiY2xpY2suZWRpdGFibGUiLGZ1bmN0aW9uKGMpe3ZhciBkLGU9YShjLnRhcmdldCksZj1bIi5lZGl0YWJsZS1jb250YWluZXIiLCIudWktZGF0ZXBpY2tlci1oZWFkZXIiLCIuZGF0ZXBpY2tlciIsIi5tb2RhbC1iYWNrZHJvcCIsIi5ib290c3RyYXAtd3lzaWh0bWw1LWluc2VydC1pbWFnZS1tb2RhbCIsIi5ib290c3RyYXAtd3lzaWh0bWw1LWluc2VydC1saW5rLW1vZGFsIl07aWYoYS5jb250YWlucyhkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYy50YXJnZXQpJiYhZS5pcyhkb2N1bWVudCkpe2ZvcihkPTA7ZDxmLmxlbmd0aDtkKyspaWYoZS5pcyhmW2RdKXx8ZS5wYXJlbnRzKGZbZF0pLmxlbmd0aClyZXR1cm47Yi5wcm90b3R5cGUuY2xvc2VPdGhlcnMoYy50YXJnZXQpfX0pLGEoZG9jdW1lbnQpLmRhdGEoImVkaXRhYmxlLWhhbmRsZXJzLWF0dGFjaGVkIiwhMCkpfSxzcGxpdE9wdGlvbnM6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRhaW5lck9wdGlvbnM9e30sdGhpcy5mb3JtT3B0aW9ucz17fSwhYS5mblt0aGlzLmNvbnRhaW5lck5hbWVdKXRocm93IG5ldyBFcnJvcih0aGlzLmNvbnRhaW5lck5hbWUrIiBub3QgZm91bmQuIEhhdmUgeW91IGluY2x1ZGVkIGNvcnJlc3BvbmRpbmcganMgZmlsZT8iKTtmb3IodmFyIGIgaW4gdGhpcy5vcHRpb25zKWIgaW4gdGhpcy5kZWZhdWx0cz90aGlzLmNvbnRhaW5lck9wdGlvbnNbYl09dGhpcy5vcHRpb25zW2JdOnRoaXMuZm9ybU9wdGlvbnNbYl09dGhpcy5vcHRpb25zW2JdfSx0aXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250YWluZXIoKT90aGlzLmNvbnRhaW5lcigpLiR0aXA6bnVsbH0sY29udGFpbmVyOmZ1bmN0aW9uKCl7dmFyIGE7cmV0dXJuIHRoaXMuY29udGFpbmVyRGF0YU5hbWUmJihhPXRoaXMuJGVsZW1lbnQuZGF0YSh0aGlzLmNvbnRhaW5lckRhdGFOYW1lKSk/YTphPXRoaXMuJGVsZW1lbnQuZGF0YSh0aGlzLmNvbnRhaW5lck5hbWUpfSxjYWxsOmZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudFt0aGlzLmNvbnRhaW5lck5hbWVdLmFwcGx5KHRoaXMuJGVsZW1lbnQsYXJndW1lbnRzKX0saW5pdENvbnRhaW5lcjpmdW5jdGlvbigpe3RoaXMuY2FsbCh0aGlzLmNvbnRhaW5lck9wdGlvbnMpfSxyZW5kZXJGb3JtOmZ1bmN0aW9uKCl7dGhpcy4kZm9ybS5lZGl0YWJsZWZvcm0odGhpcy5mb3JtT3B0aW9ucykub24oe3NhdmU6YS5wcm94eSh0aGlzLnNhdmUsdGhpcyksbm9jaGFuZ2U6YS5wcm94eShmdW5jdGlvbigpe3RoaXMuaGlkZSgibm9jaGFuZ2UiKX0sdGhpcyksY2FuY2VsOmEucHJveHkoZnVuY3Rpb24oKXt0aGlzLmhpZGUoImNhbmNlbCIpfSx0aGlzKSxzaG93OmEucHJveHkoZnVuY3Rpb24oKXt0aGlzLmRlbGF5ZWRIaWRlPyh0aGlzLmhpZGUodGhpcy5kZWxheWVkSGlkZS5yZWFzb24pLHRoaXMuZGVsYXllZEhpZGU9ITEpOnRoaXMuc2V0UG9zaXRpb24oKX0sdGhpcykscmVuZGVyaW5nOmEucHJveHkodGhpcy5zZXRQb3NpdGlvbix0aGlzKSxyZXNpemU6YS5wcm94eSh0aGlzLnNldFBvc2l0aW9uLHRoaXMpLHJlbmRlcmVkOmEucHJveHkoZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50LnRyaWdnZXJIYW5kbGVyKCJzaG93biIsYSh0aGlzLm9wdGlvbnMuc2NvcGUpLmRhdGEoImVkaXRhYmxlIikpfSx0aGlzKX0pLmVkaXRhYmxlZm9ybSgicmVuZGVyIil9LHNob3c6ZnVuY3Rpb24oYil7dGhpcy4kZWxlbWVudC5hZGRDbGFzcygiZWRpdGFibGUtb3BlbiIpLGIhPT0hMSYmdGhpcy5jbG9zZU90aGVycyh0aGlzLiRlbGVtZW50WzBdKSx0aGlzLmlubmVyU2hvdygpLHRoaXMudGlwKCkuYWRkQ2xhc3ModGhpcy5jb250YWluZXJDbGFzcyksdGhpcy4kZm9ybSx0aGlzLiRmb3JtPWEoIjxkaXY+IiksdGhpcy50aXAoKS5pcyh0aGlzLmlubmVyQ3NzKT90aGlzLnRpcCgpLmFwcGVuZCh0aGlzLiRmb3JtKTp0aGlzLnRpcCgpLmZpbmQodGhpcy5pbm5lckNzcykuYXBwZW5kKHRoaXMuJGZvcm0pLHRoaXMucmVuZGVyRm9ybSgpfSxoaWRlOmZ1bmN0aW9uKGEpe2lmKHRoaXMudGlwKCkmJnRoaXMudGlwKCkuaXMoIjp2aXNpYmxlIikmJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImVkaXRhYmxlLW9wZW4iKSl7aWYodGhpcy4kZm9ybS5kYXRhKCJlZGl0YWJsZWZvcm0iKS5pc1NhdmluZylyZXR1cm4gdGhpcy5kZWxheWVkSGlkZT17cmVhc29uOmF9LHZvaWQgMDt0aGlzLmRlbGF5ZWRIaWRlPSExLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImVkaXRhYmxlLW9wZW4iKSx0aGlzLmlubmVySGlkZSgpLHRoaXMuJGVsZW1lbnQudHJpZ2dlckhhbmRsZXIoImhpZGRlbiIsYXx8Im1hbnVhbCIpfX0saW5uZXJTaG93OmZ1bmN0aW9uKCl7fSxpbm5lckhpZGU6ZnVuY3Rpb24oKXt9LHRvZ2dsZTpmdW5jdGlvbihhKXt0aGlzLmNvbnRhaW5lcigpJiZ0aGlzLnRpcCgpJiZ0aGlzLnRpcCgpLmlzKCI6dmlzaWJsZSIpP3RoaXMuaGlkZSgpOnRoaXMuc2hvdyhhKX0sc2V0UG9zaXRpb246ZnVuY3Rpb24oKXt9LHNhdmU6ZnVuY3Rpb24oYSxiKXt0aGlzLiRlbGVtZW50LnRyaWdnZXJIYW5kbGVyKCJzYXZlIixiKSx0aGlzLmhpZGUoInNhdmUiKX0sb3B0aW9uOmZ1bmN0aW9uKGEsYil7dGhpcy5vcHRpb25zW2FdPWIsYSBpbiB0aGlzLmNvbnRhaW5lck9wdGlvbnM/KHRoaXMuY29udGFpbmVyT3B0aW9uc1thXT1iLHRoaXMuc2V0Q29udGFpbmVyT3B0aW9uKGEsYikpOih0aGlzLmZvcm1PcHRpb25zW2FdPWIsdGhpcy4kZm9ybSYmdGhpcy4kZm9ybS5lZGl0YWJsZWZvcm0oIm9wdGlvbiIsYSxiKSl9LHNldENvbnRhaW5lck9wdGlvbjpmdW5jdGlvbihhLGIpe3RoaXMuY2FsbCgib3B0aW9uIixhLGIpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5oaWRlKCksdGhpcy5pbm5lckRlc3Ryb3koKSx0aGlzLiRlbGVtZW50Lm9mZigiZGVzdHJveWVkIiksdGhpcy4kZWxlbWVudC5yZW1vdmVEYXRhKCJlZGl0YWJsZUNvbnRhaW5lciIpfSxpbm5lckRlc3Ryb3k6ZnVuY3Rpb24oKXt9LGNsb3NlT3RoZXJzOmZ1bmN0aW9uKGIpe2EoIi5lZGl0YWJsZS1vcGVuIikuZWFjaChmdW5jdGlvbihjLGQpe2lmKGQhPT1iJiYhYShkKS5maW5kKGIpLmxlbmd0aCl7dmFyIGU9YShkKSxmPWUuZGF0YSgiZWRpdGFibGVDb250YWluZXIiKTtmJiYoImNhbmNlbCI9PT1mLm9wdGlvbnMub25ibHVyP2UuZGF0YSgiZWRpdGFibGVDb250YWluZXIiKS5oaWRlKCJvbmJsdXIiKToic3VibWl0Ij09PWYub3B0aW9ucy5vbmJsdXImJmUuZGF0YSgiZWRpdGFibGVDb250YWluZXIiKS50aXAoKS5maW5kKCJmb3JtIikuc3VibWl0KCkpfX0pfSxhY3RpdmF0ZTpmdW5jdGlvbigpe3RoaXMudGlwJiZ0aGlzLnRpcCgpLmlzKCI6dmlzaWJsZSIpJiZ0aGlzLiRmb3JtJiZ0aGlzLiRmb3JtLmRhdGEoImVkaXRhYmxlZm9ybSIpLmlucHV0LmFjdGl2YXRlKCl9fSxhLmZuLmVkaXRhYmxlQ29udGFpbmVyPWZ1bmN0aW9uKGQpe3ZhciBlPWFyZ3VtZW50cztyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGY9YSh0aGlzKSxnPSJlZGl0YWJsZUNvbnRhaW5lciIsaD1mLmRhdGEoZyksaT0ib2JqZWN0Ij09dHlwZW9mIGQmJmQsaj0iaW5saW5lIj09PWkubW9kZT9jOmI7aHx8Zi5kYXRhKGcsaD1uZXcgaih0aGlzLGkpKSwic3RyaW5nIj09dHlwZW9mIGQmJmhbZF0uYXBwbHkoaCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLDEpKX0pfSxhLmZuLmVkaXRhYmxlQ29udGFpbmVyLlBvcHVwPWIsYS5mbi5lZGl0YWJsZUNvbnRhaW5lci5JbmxpbmU9YyxhLmZuLmVkaXRhYmxlQ29udGFpbmVyLmRlZmF1bHRzPXt2YWx1ZTpudWxsLHBsYWNlbWVudDoidG9wIixhdXRvaGlkZTohMCxvbmJsdXI6ImNhbmNlbCIsYW5pbTohMSxtb2RlOiJwb3B1cCJ9LGpRdWVyeS5ldmVudC5zcGVjaWFsLmRlc3Ryb3llZD17cmVtb3ZlOmZ1bmN0aW9uKGEpe2EuaGFuZGxlciYmYS5oYW5kbGVyKCl9fX0od2luZG93LmpRdWVyeSksZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2EuZXh0ZW5kKGEuZm4uZWRpdGFibGVDb250YWluZXIuSW5saW5lLnByb3RvdHlwZSxhLmZuLmVkaXRhYmxlQ29udGFpbmVyLlBvcHVwLnByb3RvdHlwZSx7Y29udGFpbmVyTmFtZToiZWRpdGFibGVmb3JtIixpbm5lckNzczoiLmVkaXRhYmxlLWlubGluZSIsY29udGFpbmVyQ2xhc3M6ImVkaXRhYmxlLWNvbnRhaW5lciBlZGl0YWJsZS1pbmxpbmUiLGluaXRDb250YWluZXI6ZnVuY3Rpb24oKXt0aGlzLiR0aXA9YSgiPHNwYW4+PC9zcGFuPiIpLHRoaXMub3B0aW9ucy5hbmltfHwodGhpcy5vcHRpb25zLmFuaW09MCl9LHNwbGl0T3B0aW9uczpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyT3B0aW9ucz17fSx0aGlzLmZvcm1PcHRpb25zPXRoaXMub3B0aW9uc30sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHRpcH0saW5uZXJTaG93OmZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5oaWRlKCksdGhpcy50aXAoKS5pbnNlcnRBZnRlcih0aGlzLiRlbGVtZW50KS5zaG93KCl9LGlubmVySGlkZTpmdW5jdGlvbigpe3RoaXMuJHRpcC5oaWRlKHRoaXMub3B0aW9ucy5hbmltLGEucHJveHkoZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50LnNob3coKSx0aGlzLmlubmVyRGVzdHJveSgpfSx0aGlzKSl9LGlubmVyRGVzdHJveTpmdW5jdGlvbigpe3RoaXMudGlwKCkmJnRoaXMudGlwKCkuZW1wdHkoKS5yZW1vdmUoKX19KX0od2luZG93LmpRdWVyeSksZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO3ZhciBiPWZ1bmN0aW9uKGIsYyl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxhLmZuLmVkaXRhYmxlLmRlZmF1bHRzLGMsYS5mbi5lZGl0YWJsZXV0aWxzLmdldENvbmZpZ0RhdGEodGhpcy4kZWxlbWVudCkpLHRoaXMub3B0aW9ucy5zZWxlY3Rvcj90aGlzLmluaXRMaXZlKCk6dGhpcy5pbml0KCksdGhpcy5vcHRpb25zLmhpZ2hsaWdodCYmIWEuZm4uZWRpdGFibGV1dGlscy5zdXBwb3J0c1RyYW5zaXRpb25zKCkmJih0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0PSExKX07Yi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmIsaW5pdDpmdW5jdGlvbigpe3ZhciBiLGM9ITE7aWYodGhpcy5vcHRpb25zLm5hbWU9dGhpcy5vcHRpb25zLm5hbWV8fHRoaXMuJGVsZW1lbnQuYXR0cigiaWQiKSx0aGlzLm9wdGlvbnMuc2NvcGU9dGhpcy4kZWxlbWVudFswXSx0aGlzLmlucHV0PWEuZm4uZWRpdGFibGV1dGlscy5jcmVhdGVJbnB1dCh0aGlzLm9wdGlvbnMpLHRoaXMuaW5wdXQpe3N3aXRjaCh2b2lkIDA9PT10aGlzLm9wdGlvbnMudmFsdWV8fG51bGw9PT10aGlzLm9wdGlvbnMudmFsdWU/KHRoaXMudmFsdWU9dGhpcy5pbnB1dC5odG1sMnZhbHVlKGEudHJpbSh0aGlzLiRlbGVtZW50Lmh0bWwoKSkpLGM9ITApOih0aGlzLm9wdGlvbnMudmFsdWU9YS5mbi5lZGl0YWJsZXV0aWxzLnRyeVBhcnNlSnNvbih0aGlzLm9wdGlvbnMudmFsdWUsITApLHRoaXMudmFsdWU9InN0cmluZyI9PXR5cGVvZiB0aGlzLm9wdGlvbnMudmFsdWU/dGhpcy5pbnB1dC5zdHIydmFsdWUodGhpcy5vcHRpb25zLnZhbHVlKTp0aGlzLm9wdGlvbnMudmFsdWUpLHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoImVkaXRhYmxlIiksInRleHRhcmVhIj09PXRoaXMuaW5wdXQudHlwZSYmdGhpcy4kZWxlbWVudC5hZGRDbGFzcygiZWRpdGFibGUtcHJlLXdyYXBwZWQiKSwibWFudWFsIiE9PXRoaXMub3B0aW9ucy50b2dnbGU/KHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoImVkaXRhYmxlLWNsaWNrIiksdGhpcy4kZWxlbWVudC5vbih0aGlzLm9wdGlvbnMudG9nZ2xlKyIuZWRpdGFibGUiLGEucHJveHkoZnVuY3Rpb24oYSl7aWYodGhpcy5vcHRpb25zLmRpc2FibGVkfHxhLnByZXZlbnREZWZhdWx0KCksIm1vdXNlZW50ZXIiPT09dGhpcy5vcHRpb25zLnRvZ2dsZSl0aGlzLnNob3coKTtlbHNle3ZhciBiPSJjbGljayIhPT10aGlzLm9wdGlvbnMudG9nZ2xlO3RoaXMudG9nZ2xlKGIpfX0sdGhpcykpKTp0aGlzLiRlbGVtZW50LmF0dHIoInRhYmluZGV4IiwtMSksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMub3B0aW9ucy5kaXNwbGF5JiYodGhpcy5vcHRpb25zLmF1dG90ZXh0PSJhbHdheXMiKSx0aGlzLm9wdGlvbnMuYXV0b3RleHQpe2Nhc2UiYWx3YXlzIjpiPSEwO2JyZWFrO2Nhc2UiYXV0byI6Yj0hYS50cmltKHRoaXMuJGVsZW1lbnQudGV4dCgpKS5sZW5ndGgmJm51bGwhPT10aGlzLnZhbHVlJiZ2b2lkIDAhPT10aGlzLnZhbHVlJiYhYzticmVhaztkZWZhdWx0OmI9ITF9YS53aGVuKGI/dGhpcy5yZW5kZXIoKTohMCkudGhlbihhLnByb3h5KGZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmRpc2FibGVkP3RoaXMuZGlzYWJsZSgpOnRoaXMuZW5hYmxlKCksdGhpcy4kZWxlbWVudC50cmlnZ2VySGFuZGxlcigiaW5pdCIsdGhpcyl9LHRoaXMpKX19LGluaXRMaXZlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5vcHRpb25zLnNlbGVjdG9yO3RoaXMub3B0aW9ucy5zZWxlY3Rvcj0hMSx0aGlzLm9wdGlvbnMuYXV0b3RleHQ9Im5ldmVyIix0aGlzLiRlbGVtZW50Lm9uKHRoaXMub3B0aW9ucy50b2dnbGUrIi5lZGl0YWJsZSIsYixhLnByb3h5KGZ1bmN0aW9uKGIpe3ZhciBjPWEoYi50YXJnZXQpO2MuZGF0YSgiZWRpdGFibGUiKXx8KGMuaGFzQ2xhc3ModGhpcy5vcHRpb25zLmVtcHR5Y2xhc3MpJiZjLmVtcHR5KCksYy5lZGl0YWJsZSh0aGlzLm9wdGlvbnMpLnRyaWdnZXIoYikpfSx0aGlzKSl9LHJlbmRlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5vcHRpb25zLmRpc3BsYXkhPT0hMT90aGlzLmlucHV0LnZhbHVlMmh0bWxGaW5hbD90aGlzLmlucHV0LnZhbHVlMmh0bWwodGhpcy52YWx1ZSx0aGlzLiRlbGVtZW50WzBdLHRoaXMub3B0aW9ucy5kaXNwbGF5LGEpOiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuZGlzcGxheT90aGlzLm9wdGlvbnMuZGlzcGxheS5jYWxsKHRoaXMuJGVsZW1lbnRbMF0sdGhpcy52YWx1ZSxhKTp0aGlzLmlucHV0LnZhbHVlMmh0bWwodGhpcy52YWx1ZSx0aGlzLiRlbGVtZW50WzBdKTp2b2lkIDB9LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5kaXNhYmxlZD0hMSx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJlZGl0YWJsZS1kaXNhYmxlZCIpLHRoaXMuaGFuZGxlRW1wdHkodGhpcy5pc0VtcHR5KSwibWFudWFsIiE9PXRoaXMub3B0aW9ucy50b2dnbGUmJiItMSI9PT10aGlzLiRlbGVtZW50LmF0dHIoInRhYmluZGV4IikmJnRoaXMuJGVsZW1lbnQucmVtb3ZlQXR0cigidGFiaW5kZXgiKX0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5kaXNhYmxlZD0hMCx0aGlzLmhpZGUoKSx0aGlzLiRlbGVtZW50LmFkZENsYXNzKCJlZGl0YWJsZS1kaXNhYmxlZCIpLHRoaXMuaGFuZGxlRW1wdHkodGhpcy5pc0VtcHR5KSx0aGlzLiRlbGVtZW50LmF0dHIoInRhYmluZGV4IiwtMSl9LHRvZ2dsZURpc2FibGVkOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmRpc2FibGVkP3RoaXMuZW5hYmxlKCk6dGhpcy5kaXNhYmxlKCl9LG9wdGlvbjpmdW5jdGlvbihiLGMpe3JldHVybiBiJiYib2JqZWN0Ij09dHlwZW9mIGI/KGEuZWFjaChiLGEucHJveHkoZnVuY3Rpb24oYixjKXt0aGlzLm9wdGlvbihhLnRyaW0oYiksYyl9LHRoaXMpKSx2b2lkIDApOih0aGlzLm9wdGlvbnNbYl09YywiZGlzYWJsZWQiPT09Yj9jP3RoaXMuZGlzYWJsZSgpOnRoaXMuZW5hYmxlKCk6KCJ2YWx1ZSI9PT1iJiZ0aGlzLnNldFZhbHVlKGMpLHRoaXMuY29udGFpbmVyJiZ0aGlzLmNvbnRhaW5lci5vcHRpb24oYixjKSx0aGlzLmlucHV0Lm9wdGlvbiYmdGhpcy5pbnB1dC5vcHRpb24oYixjKSx2b2lkIDApKX0saGFuZGxlRW1wdHk6ZnVuY3Rpb24oYil7dGhpcy5vcHRpb25zLmRpc3BsYXkhPT0hMSYmKHRoaXMuaXNFbXB0eT12b2lkIDAhPT1iP2I6ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuaW5wdXQuaXNFbXB0eT90aGlzLmlucHV0LmlzRW1wdHkodGhpcy4kZWxlbWVudCk6IiI9PT1hLnRyaW0odGhpcy4kZWxlbWVudC5odG1sKCkpLHRoaXMub3B0aW9ucy5kaXNhYmxlZD90aGlzLmlzRW1wdHkmJih0aGlzLiRlbGVtZW50LmVtcHR5KCksdGhpcy5vcHRpb25zLmVtcHR5Y2xhc3MmJnRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmVtcHR5Y2xhc3MpKTp0aGlzLmlzRW1wdHk/KHRoaXMuJGVsZW1lbnQuaHRtbCh0aGlzLm9wdGlvbnMuZW1wdHl0ZXh0KSx0aGlzLm9wdGlvbnMuZW1wdHljbGFzcyYmdGhpcy4kZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuZW1wdHljbGFzcykpOnRoaXMub3B0aW9ucy5lbXB0eWNsYXNzJiZ0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5lbXB0eWNsYXNzKSl9LHNob3c6ZnVuY3Rpb24oYil7aWYoIXRoaXMub3B0aW9ucy5kaXNhYmxlZCl7aWYodGhpcy5jb250YWluZXIpe2lmKHRoaXMuY29udGFpbmVyLnRpcCgpLmlzKCI6dmlzaWJsZSIpKXJldHVybn1lbHNle3ZhciBjPWEuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyx7dmFsdWU6dGhpcy52YWx1ZSxpbnB1dDp0aGlzLmlucHV0fSk7dGhpcy4kZWxlbWVudC5lZGl0YWJsZUNvbnRhaW5lcihjKSx0aGlzLiRlbGVtZW50Lm9uKCJzYXZlLmludGVybmFsIixhLnByb3h5KHRoaXMuc2F2ZSx0aGlzKSksdGhpcy5jb250YWluZXI9dGhpcy4kZWxlbWVudC5kYXRhKCJlZGl0YWJsZUNvbnRhaW5lciIpfXRoaXMuY29udGFpbmVyLnNob3coYil9fSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXImJnRoaXMuY29udGFpbmVyLmhpZGUoKX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3RoaXMuY29udGFpbmVyJiZ0aGlzLmNvbnRhaW5lci50aXAoKS5pcygiOnZpc2libGUiKT90aGlzLmhpZGUoKTp0aGlzLnNob3coYSl9LHNhdmU6ZnVuY3Rpb24oYSxiKXtpZih0aGlzLm9wdGlvbnMudW5zYXZlZGNsYXNzKXt2YXIgYz0hMTtjPWN8fCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMudXJsLGM9Y3x8dGhpcy5vcHRpb25zLmRpc3BsYXk9PT0hMSxjPWN8fHZvaWQgMCE9PWIucmVzcG9uc2UsYz1jfHx0aGlzLm9wdGlvbnMuc2F2ZW5vY2hhbmdlJiZ0aGlzLmlucHV0LnZhbHVlMnN0cih0aGlzLnZhbHVlKSE9PXRoaXMuaW5wdXQudmFsdWUyc3RyKGIubmV3VmFsdWUpLGM/dGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMudW5zYXZlZGNsYXNzKTp0aGlzLiRlbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy51bnNhdmVkY2xhc3MpfWlmKHRoaXMub3B0aW9ucy5oaWdobGlnaHQpe3ZhciBkPXRoaXMuJGVsZW1lbnQsZT1kLmNzcygiYmFja2dyb3VuZC1jb2xvciIpO2QuY3NzKCJiYWNrZ3JvdW5kLWNvbG9yIix0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7InRyYW5zcGFyZW50Ij09PWUmJihlPSIiKSxkLmNzcygiYmFja2dyb3VuZC1jb2xvciIsZSksZC5hZGRDbGFzcygiZWRpdGFibGUtYmctdHJhbnNpdGlvbiIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLnJlbW92ZUNsYXNzKCJlZGl0YWJsZS1iZy10cmFuc2l0aW9uIil9LDE3MDApfSwxMCl9dGhpcy5zZXRWYWx1ZShiLm5ld1ZhbHVlLCExLGIucmVzcG9uc2UpfSx2YWxpZGF0ZTpmdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMudmFsaWRhdGU/dGhpcy5vcHRpb25zLnZhbGlkYXRlLmNhbGwodGhpcyx0aGlzLnZhbHVlKTp2b2lkIDB9LHNldFZhbHVlOmZ1bmN0aW9uKGIsYyxkKXt0aGlzLnZhbHVlPWM/dGhpcy5pbnB1dC5zdHIydmFsdWUoYik6Yix0aGlzLmNvbnRhaW5lciYmdGhpcy5jb250YWluZXIub3B0aW9uKCJ2YWx1ZSIsdGhpcy52YWx1ZSksYS53aGVuKHRoaXMucmVuZGVyKGQpKS50aGVuKGEucHJveHkoZnVuY3Rpb24oKXt0aGlzLmhhbmRsZUVtcHR5KCl9LHRoaXMpKX0sYWN0aXZhdGU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lciYmdGhpcy5jb250YWluZXIuYWN0aXZhdGUoKX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZSgpLHRoaXMuY29udGFpbmVyJiZ0aGlzLmNvbnRhaW5lci5kZXN0cm95KCksdGhpcy5pbnB1dC5kZXN0cm95KCksIm1hbnVhbCIhPT10aGlzLm9wdGlvbnMudG9nZ2xlJiYodGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygiZWRpdGFibGUtY2xpY2siKSx0aGlzLiRlbGVtZW50Lm9mZih0aGlzLm9wdGlvbnMudG9nZ2xlKyIuZWRpdGFibGUiKSksdGhpcy4kZWxlbWVudC5vZmYoInNhdmUuaW50ZXJuYWwiKSx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJlZGl0YWJsZSBlZGl0YWJsZS1vcGVuIGVkaXRhYmxlLWRpc2FibGVkIiksdGhpcy4kZWxlbWVudC5yZW1vdmVEYXRhKCJlZGl0YWJsZSIpfX0sYS5mbi5lZGl0YWJsZT1mdW5jdGlvbihjKXt2YXIgZD17fSxlPWFyZ3VtZW50cyxmPSJlZGl0YWJsZSI7c3dpdGNoKGMpe2Nhc2UidmFsaWRhdGUiOnJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYixjPWEodGhpcyksZT1jLmRhdGEoZik7ZSYmKGI9ZS52YWxpZGF0ZSgpKSYmKGRbZS5vcHRpb25zLm5hbWVdPWIpfSksZDtjYXNlImdldFZhbHVlIjpyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJmFyZ3VtZW50c1sxXT09PSEwP2Q9dGhpcy5lcSgwKS5kYXRhKGYpLnZhbHVlOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWEodGhpcyksYz1iLmRhdGEoZik7YyYmdm9pZCAwIT09Yy52YWx1ZSYmbnVsbCE9PWMudmFsdWUmJihkW2Mub3B0aW9ucy5uYW1lXT1jLmlucHV0LnZhbHVlMnN1Ym1pdChjLnZhbHVlKSl9KSxkO2Nhc2Uic3VibWl0Ijp2YXIgZz1hcmd1bWVudHNbMV18fHt9LGg9dGhpcyxpPXRoaXMuZWRpdGFibGUoInZhbGlkYXRlIik7aWYoYS5pc0VtcHR5T2JqZWN0KGkpKXt2YXIgaj17fTtpZigxPT09aC5sZW5ndGgpe3ZhciBrPWguZGF0YSgiZWRpdGFibGUiKSxsPXtuYW1lOmsub3B0aW9ucy5uYW1lfHwiIix2YWx1ZTprLmlucHV0LnZhbHVlMnN1Ym1pdChrLnZhbHVlKSxwazoiZnVuY3Rpb24iPT10eXBlb2Ygay5vcHRpb25zLnBrP2sub3B0aW9ucy5way5jYWxsKGsub3B0aW9ucy5zY29wZSk6ay5vcHRpb25zLnBrfTsiZnVuY3Rpb24iPT10eXBlb2Ygay5vcHRpb25zLnBhcmFtcz9sPWsub3B0aW9ucy5wYXJhbXMuY2FsbChrLm9wdGlvbnMuc2NvcGUsbCk6KGsub3B0aW9ucy5wYXJhbXM9YS5mbi5lZGl0YWJsZXV0aWxzLnRyeVBhcnNlSnNvbihrLm9wdGlvbnMucGFyYW1zLCEwKSxhLmV4dGVuZChsLGsub3B0aW9ucy5wYXJhbXMpKSxqPXt1cmw6ay5vcHRpb25zLnVybCxkYXRhOmwsdHlwZToiUE9TVCJ9LGcuc3VjY2Vzcz1nLnN1Y2Nlc3N8fGsub3B0aW9ucy5zdWNjZXNzLGcuZXJyb3I9Zy5lcnJvcnx8ay5vcHRpb25zLmVycm9yfWVsc2V7dmFyIG09dGhpcy5lZGl0YWJsZSgiZ2V0VmFsdWUiKTtqPXt1cmw6Zy51cmwsZGF0YTptLHR5cGU6IlBPU1QifX1qLnN1Y2Nlc3M9ImZ1bmN0aW9uIj09dHlwZW9mIGcuc3VjY2Vzcz9mdW5jdGlvbihhKXtnLnN1Y2Nlc3MuY2FsbChoLGEsZyl9OmEubm9vcCxqLmVycm9yPSJmdW5jdGlvbiI9PXR5cGVvZiBnLmVycm9yP2Z1bmN0aW9uKCl7Zy5lcnJvci5hcHBseShoLGFyZ3VtZW50cyl9OmEubm9vcCxnLmFqYXhPcHRpb25zJiZhLmV4dGVuZChqLGcuYWpheE9wdGlvbnMpLGcuZGF0YSYmYS5leHRlbmQoai5kYXRhLGcuZGF0YSksYS5hamF4KGopfWVsc2UiZnVuY3Rpb24iPT10eXBlb2YgZy5lcnJvciYmZy5lcnJvci5jYWxsKGgsaSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZz1kLmRhdGEoZiksaD0ib2JqZWN0Ij09dHlwZW9mIGMmJmM7cmV0dXJuIGgmJmguc2VsZWN0b3I/KGc9bmV3IGIodGhpcyxoKSx2b2lkIDApOihnfHxkLmRhdGEoZixnPW5ldyBiKHRoaXMsaCkpLCJzdHJpbmciPT10eXBlb2YgYyYmZ1tjXS5hcHBseShnLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUsMSkpLHZvaWQgMCl9KX0sYS5mbi5lZGl0YWJsZS5kZWZhdWx0cz17dHlwZToidGV4dCIsZGlzYWJsZWQ6ITEsdG9nZ2xlOiJjbGljayIsZW1wdHl0ZXh0OiJFbXB0eSIsYXV0b3RleHQ6ImF1dG8iLHZhbHVlOm51bGwsZGlzcGxheTpudWxsLGVtcHR5Y2xhc3M6ImVkaXRhYmxlLWVtcHR5Iix1bnNhdmVkY2xhc3M6ImVkaXRhYmxlLXVuc2F2ZWQiLHNlbGVjdG9yOm51bGwsaGlnaGxpZ2h0OiIjRkZGRjgwIn19KHdpbmRvdy5qUXVlcnkpLGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjthLmZuLmVkaXRhYmxldHlwZXM9e307dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXtpbml0OmZ1bmN0aW9uKGIsYyxkKXt0aGlzLnR5cGU9Yix0aGlzLm9wdGlvbnM9YS5leHRlbmQoe30sZCxjKX0scHJlcmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy4kdHBsPWEodGhpcy5vcHRpb25zLnRwbCksdGhpcy4kaW5wdXQ9dGhpcy4kdHBsLHRoaXMuJGNsZWFyPW51bGwsdGhpcy5lcnJvcj1udWxsfSxyZW5kZXI6ZnVuY3Rpb24oKXt9LHZhbHVlMmh0bWw6ZnVuY3Rpb24oYixjKXthKGMpW3RoaXMub3B0aW9ucy5lc2NhcGU/InRleHQiOiJodG1sIl0oYS50cmltKGIpKX0saHRtbDJ2YWx1ZTpmdW5jdGlvbihiKXtyZXR1cm4gYSgiPGRpdj4iKS5odG1sKGIpLnRleHQoKX0sdmFsdWUyc3RyOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxzdHIydmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LHZhbHVlMnN1Ym1pdDpmdW5jdGlvbihhKXtyZXR1cm4gYX0sdmFsdWUyaW5wdXQ6ZnVuY3Rpb24oYSl7dGhpcy4kaW5wdXQudmFsKGEpfSxpbnB1dDJ2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRpbnB1dC52YWwoKX0sYWN0aXZhdGU6ZnVuY3Rpb24oKXt0aGlzLiRpbnB1dC5pcygiOnZpc2libGUiKSYmdGhpcy4kaW5wdXQuZm9jdXMoKX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLiRpbnB1dC52YWwobnVsbCl9LGVzY2FwZTpmdW5jdGlvbihiKXtyZXR1cm4gYSgiPGRpdj4iKS50ZXh0KGIpLmh0bWwoKX0sYXV0b3N1Ym1pdDpmdW5jdGlvbigpe30sZGVzdHJveTpmdW5jdGlvbigpe30sc2V0Q2xhc3M6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuaW5wdXRjbGFzcyYmdGhpcy4kaW5wdXQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmlucHV0Y2xhc3MpfSxzZXRBdHRyOmZ1bmN0aW9uKGEpe3ZvaWQgMCE9PXRoaXMub3B0aW9uc1thXSYmbnVsbCE9PXRoaXMub3B0aW9uc1thXSYmdGhpcy4kaW5wdXQuYXR0cihhLHRoaXMub3B0aW9uc1thXSl9LG9wdGlvbjpmdW5jdGlvbihhLGIpe3RoaXMub3B0aW9uc1thXT1ifX0sYi5kZWZhdWx0cz17dHBsOiIiLGlucHV0Y2xhc3M6bnVsbCxlc2NhcGU6ITAsc2NvcGU6bnVsbCxzaG93YnV0dG9uczohMH0sYS5leHRlbmQoYS5mbi5lZGl0YWJsZXR5cGVzLHthYnN0cmFjdGlucHV0OmJ9KX0od2luZG93LmpRdWVyeSksZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO3ZhciBiPWZ1bmN0aW9uKCl7fTthLmZuLmVkaXRhYmxldXRpbHMuaW5oZXJpdChiLGEuZm4uZWRpdGFibGV0eXBlcy5hYnN0cmFjdGlucHV0KSxhLmV4dGVuZChiLnByb3RvdHlwZSx7cmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGI9YS5EZWZlcnJlZCgpO3JldHVybiB0aGlzLmVycm9yPW51bGwsdGhpcy5vblNvdXJjZVJlYWR5KGZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJMaXN0KCksYi5yZXNvbHZlKCl9LGZ1bmN0aW9uKCl7dGhpcy5lcnJvcj10aGlzLm9wdGlvbnMuc291cmNlRXJyb3IsYi5yZXNvbHZlKCl9KSxiLnByb21pc2UoKX0saHRtbDJ2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBudWxsfSx2YWx1ZTJodG1sOmZ1bmN0aW9uKGIsYyxkLGUpe3ZhciBmPWEuRGVmZXJyZWQoKSxnPWZ1bmN0aW9uKCl7ImZ1bmN0aW9uIj09dHlwZW9mIGQ/ZC5jYWxsKGMsYix0aGlzLnNvdXJjZURhdGEsZSk6dGhpcy52YWx1ZTJodG1sRmluYWwoYixjKSxmLnJlc29sdmUoKX07cmV0dXJuIG51bGw9PT1iP2cuY2FsbCh0aGlzKTp0aGlzLm9uU291cmNlUmVhZHkoZyxmdW5jdGlvbigpe2YucmVzb2x2ZSgpfSksZi5wcm9taXNlKCl9LG9uU291cmNlUmVhZHk6ZnVuY3Rpb24oYixjKXt2YXIgZDtpZihhLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLnNvdXJjZSk/KGQ9dGhpcy5vcHRpb25zLnNvdXJjZS5jYWxsKHRoaXMub3B0aW9ucy5zY29wZSksdGhpcy5zb3VyY2VEYXRhPW51bGwpOmQ9dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLm9wdGlvbnMuc291cmNlQ2FjaGUmJmEuaXNBcnJheSh0aGlzLnNvdXJjZURhdGEpKXJldHVybiBiLmNhbGwodGhpcyksdm9pZCAwO3RyeXtkPWEuZm4uZWRpdGFibGV1dGlscy50cnlQYXJzZUpzb24oZCwhMSl9Y2F0Y2goZSl7cmV0dXJuIGMuY2FsbCh0aGlzKSx2b2lkIDB9aWYoInN0cmluZyI9PXR5cGVvZiBkKXtpZih0aGlzLm9wdGlvbnMuc291cmNlQ2FjaGUpe3ZhciBmLGc9ZDtpZihhKGRvY3VtZW50KS5kYXRhKGcpfHxhKGRvY3VtZW50KS5kYXRhKGcse30pLGY9YShkb2N1bWVudCkuZGF0YShnKSxmLmxvYWRpbmc9PT0hMSYmZi5zb3VyY2VEYXRhKXJldHVybiB0aGlzLnNvdXJjZURhdGE9Zi5zb3VyY2VEYXRhLHRoaXMuZG9QcmVwZW5kKCksYi5jYWxsKHRoaXMpLHZvaWQgMDtpZihmLmxvYWRpbmc9PT0hMClyZXR1cm4gZi5jYWxsYmFja3MucHVzaChhLnByb3h5KGZ1bmN0aW9uKCl7dGhpcy5zb3VyY2VEYXRhPWYuc291cmNlRGF0YSx0aGlzLmRvUHJlcGVuZCgpLGIuY2FsbCh0aGlzKX0sdGhpcykpLGYuZXJyX2NhbGxiYWNrcy5wdXNoKGEucHJveHkoYyx0aGlzKSksdm9pZCAwO2YubG9hZGluZz0hMCxmLmNhbGxiYWNrcz1bXSxmLmVycl9jYWxsYmFja3M9W119dmFyIGg9YS5leHRlbmQoe3VybDpkLHR5cGU6ImdldCIsY2FjaGU6ITEsZGF0YVR5cGU6Impzb24iLHN1Y2Nlc3M6YS5wcm94eShmdW5jdGlvbihkKXtmJiYoZi5sb2FkaW5nPSExKSx0aGlzLnNvdXJjZURhdGE9dGhpcy5tYWtlQXJyYXkoZCksYS5pc0FycmF5KHRoaXMuc291cmNlRGF0YSk/KGYmJihmLnNvdXJjZURhdGE9dGhpcy5zb3VyY2VEYXRhLGEuZWFjaChmLmNhbGxiYWNrcyxmdW5jdGlvbigpe3RoaXMuY2FsbCgpfSkpLHRoaXMuZG9QcmVwZW5kKCksYi5jYWxsKHRoaXMpKTooYy5jYWxsKHRoaXMpLGYmJmEuZWFjaChmLmVycl9jYWxsYmFja3MsZnVuY3Rpb24oKXt0aGlzLmNhbGwoKX0pKX0sdGhpcyksZXJyb3I6YS5wcm94eShmdW5jdGlvbigpe2MuY2FsbCh0aGlzKSxmJiYoZi5sb2FkaW5nPSExLGEuZWFjaChmLmVycl9jYWxsYmFja3MsZnVuY3Rpb24oKXt0aGlzLmNhbGwoKX0pKX0sdGhpcyl9LHRoaXMub3B0aW9ucy5zb3VyY2VPcHRpb25zKTthLmFqYXgoaCl9ZWxzZSB0aGlzLnNvdXJjZURhdGE9dGhpcy5tYWtlQXJyYXkoZCksYS5pc0FycmF5KHRoaXMuc291cmNlRGF0YSk/KHRoaXMuZG9QcmVwZW5kKCksYi5jYWxsKHRoaXMpKTpjLmNhbGwodGhpcyl9LGRvUHJlcGVuZDpmdW5jdGlvbigpe251bGwhPT10aGlzLm9wdGlvbnMucHJlcGVuZCYmdm9pZCAwIT09dGhpcy5vcHRpb25zLnByZXBlbmQmJihhLmlzQXJyYXkodGhpcy5wcmVwZW5kRGF0YSl8fChhLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLnByZXBlbmQpJiYodGhpcy5vcHRpb25zLnByZXBlbmQ9dGhpcy5vcHRpb25zLnByZXBlbmQuY2FsbCh0aGlzLm9wdGlvbnMuc2NvcGUpKSx0aGlzLm9wdGlvbnMucHJlcGVuZD1hLmZuLmVkaXRhYmxldXRpbHMudHJ5UGFyc2VKc29uKHRoaXMub3B0aW9ucy5wcmVwZW5kLCEwKSwic3RyaW5nIj09dHlwZW9mIHRoaXMub3B0aW9ucy5wcmVwZW5kJiYodGhpcy5vcHRpb25zLnByZXBlbmQ9eyIiOnRoaXMub3B0aW9ucy5wcmVwZW5kfSksdGhpcy5wcmVwZW5kRGF0YT10aGlzLm1ha2VBcnJheSh0aGlzLm9wdGlvbnMucHJlcGVuZCkpLGEuaXNBcnJheSh0aGlzLnByZXBlbmREYXRhKSYmYS5pc0FycmF5KHRoaXMuc291cmNlRGF0YSkmJih0aGlzLnNvdXJjZURhdGE9dGhpcy5wcmVwZW5kRGF0YS5jb25jYXQodGhpcy5zb3VyY2VEYXRhKSkpfSxyZW5kZXJMaXN0OmZ1bmN0aW9uKCl7fSx2YWx1ZTJodG1sRmluYWw6ZnVuY3Rpb24oKXt9LG1ha2VBcnJheTpmdW5jdGlvbihiKXt2YXIgYyxkLGUsZixnPVtdO2lmKCFifHwic3RyaW5nIj09dHlwZW9mIGIpcmV0dXJuIG51bGw7aWYoYS5pc0FycmF5KGIpKXtmPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQ9e3ZhbHVlOmEsdGV4dDpifSxjKys+PTI/ITE6dm9pZCAwfTtmb3IodmFyIGg9MDtoPGIubGVuZ3RoO2grKyllPWJbaF0sIm9iamVjdCI9PXR5cGVvZiBlPyhjPTAsYS5lYWNoKGUsZiksMT09PWM/Zy5wdXNoKGQpOmM+MSYmKGUuY2hpbGRyZW4mJihlLmNoaWxkcmVuPXRoaXMubWFrZUFycmF5KGUuY2hpbGRyZW4pKSxnLnB1c2goZSkpKTpnLnB1c2goe3ZhbHVlOmUsdGV4dDplfSl9ZWxzZSBhLmVhY2goYixmdW5jdGlvbihhLGIpe2cucHVzaCh7dmFsdWU6YSx0ZXh0OmJ9KX0pO3JldHVybiBnfSxvcHRpb246ZnVuY3Rpb24oYSxiKXt0aGlzLm9wdGlvbnNbYV09Yiwic291cmNlIj09PWEmJih0aGlzLnNvdXJjZURhdGE9bnVsbCksInByZXBlbmQiPT09YSYmKHRoaXMucHJlcGVuZERhdGE9bnVsbCl9fSksYi5kZWZhdWx0cz1hLmV4dGVuZCh7fSxhLmZuLmVkaXRhYmxldHlwZXMuYWJzdHJhY3RpbnB1dC5kZWZhdWx0cyx7c291cmNlOm51bGwscHJlcGVuZDohMSxzb3VyY2VFcnJvcjoiRXJyb3Igd2hlbiBsb2FkaW5nIGxpc3QiLHNvdXJjZUNhY2hlOiEwLHNvdXJjZU9wdGlvbnM6bnVsbH0pLGEuZm4uZWRpdGFibGV0eXBlcy5saXN0PWJ9KHdpbmRvdy5qUXVlcnkpLGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1mdW5jdGlvbihhKXt0aGlzLmluaXQoInRleHQiLGEsYi5kZWZhdWx0cyl9O2EuZm4uZWRpdGFibGV1dGlscy5pbmhlcml0KGIsYS5mbi5lZGl0YWJsZXR5cGVzLmFic3RyYWN0aW5wdXQpLGEuZXh0ZW5kKGIucHJvdG90eXBlLHtyZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLnJlbmRlckNsZWFyKCksdGhpcy5zZXRDbGFzcygpLHRoaXMuc2V0QXR0cigicGxhY2Vob2xkZXIiKX0sYWN0aXZhdGU6ZnVuY3Rpb24oKXt0aGlzLiRpbnB1dC5pcygiOnZpc2libGUiKSYmKHRoaXMuJGlucHV0LmZvY3VzKCksYS5mbi5lZGl0YWJsZXV0aWxzLnNldEN1cnNvclBvc2l0aW9uKHRoaXMuJGlucHV0LmdldCgwKSx0aGlzLiRpbnB1dC52YWwoKS5sZW5ndGgpLHRoaXMudG9nZ2xlQ2xlYXImJnRoaXMudG9nZ2xlQ2xlYXIoKSl9LHJlbmRlckNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmNsZWFyJiYodGhpcy4kY2xlYXI9YSgnPHNwYW4gY2xhc3M9ImVkaXRhYmxlLWNsZWFyLXgiPjwvc3Bhbj4nKSx0aGlzLiRpbnB1dC5hZnRlcih0aGlzLiRjbGVhcikuY3NzKCJwYWRkaW5nLXJpZ2h0IiwyNCkua2V5dXAoYS5wcm94eShmdW5jdGlvbihiKXtpZighfmEuaW5BcnJheShiLmtleUNvZGUsWzQwLDM4LDksMTMsMjddKSl7Y2xlYXJUaW1lb3V0KHRoaXMudCk7dmFyIGM9dGhpczt0aGlzLnQ9c2V0VGltZW91dChmdW5jdGlvbigpe2MudG9nZ2xlQ2xlYXIoYil9LDEwMCl9fSx0aGlzKSkucGFyZW50KCkuY3NzKCJwb3NpdGlvbiIsInJlbGF0aXZlIiksdGhpcy4kY2xlYXIuY2xpY2soYS5wcm94eSh0aGlzLmNsZWFyLHRoaXMpKSl9LHBvc3RyZW5kZXI6ZnVuY3Rpb24oKXt9LHRvZ2dsZUNsZWFyOmZ1bmN0aW9uKCl7aWYodGhpcy4kY2xlYXIpe3ZhciBhPXRoaXMuJGlucHV0LnZhbCgpLmxlbmd0aCxiPXRoaXMuJGNsZWFyLmlzKCI6dmlzaWJsZSIpO2EmJiFiJiZ0aGlzLiRjbGVhci5zaG93KCksIWEmJmImJnRoaXMuJGNsZWFyLmhpZGUoKX19LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy4kY2xlYXIuaGlkZSgpLHRoaXMuJGlucHV0LnZhbCgiIikuZm9jdXMoKX19KSxiLmRlZmF1bHRzPWEuZXh0ZW5kKHt9LGEuZm4uZWRpdGFibGV0eXBlcy5hYnN0cmFjdGlucHV0LmRlZmF1bHRzLHt0cGw6JzxpbnB1dCB0eXBlPSJ0ZXh0Ij4nLHBsYWNlaG9sZGVyOm51bGwsY2xlYXI6ITB9KSxhLmZuLmVkaXRhYmxldHlwZXMudGV4dD1ifSh3aW5kb3cualF1ZXJ5KSxmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7dmFyIGI9ZnVuY3Rpb24oYSl7dGhpcy5pbml0KCJ0ZXh0YXJlYSIsYSxiLmRlZmF1bHRzKX07YS5mbi5lZGl0YWJsZXV0aWxzLmluaGVyaXQoYixhLmZuLmVkaXRhYmxldHlwZXMuYWJzdHJhY3RpbnB1dCksYS5leHRlbmQoYi5wcm90b3R5cGUse3JlbmRlcjpmdW5jdGlvbigpe3RoaXMuc2V0Q2xhc3MoKSx0aGlzLnNldEF0dHIoInBsYWNlaG9sZGVyIiksdGhpcy5zZXRBdHRyKCJyb3dzIiksdGhpcy4kaW5wdXQua2V5ZG93bihmdW5jdGlvbihiKXtiLmN0cmxLZXkmJjEzPT09Yi53aGljaCYmYSh0aGlzKS5jbG9zZXN0KCJmb3JtIikuc3VibWl0KCl9KX0sYWN0aXZhdGU6ZnVuY3Rpb24oKXthLmZuLmVkaXRhYmxldHlwZXMudGV4dC5wcm90b3R5cGUuYWN0aXZhdGUuY2FsbCh0aGlzKX19KSxiLmRlZmF1bHRzPWEuZXh0ZW5kKHt9LGEuZm4uZWRpdGFibGV0eXBlcy5hYnN0cmFjdGlucHV0LmRlZmF1bHRzLHt0cGw6Ijx0ZXh0YXJlYT48L3RleHRhcmVhPiIsaW5wdXRjbGFzczoiaW5wdXQtbGFyZ2UiLHBsYWNlaG9sZGVyOm51bGwscm93czo3fSksYS5mbi5lZGl0YWJsZXR5cGVzLnRleHRhcmVhPWJ9KHdpbmRvdy5qUXVlcnkpLGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1mdW5jdGlvbihhKXt0aGlzLmluaXQoInNlbGVjdCIsYSxiLmRlZmF1bHRzKX07YS5mbi5lZGl0YWJsZXV0aWxzLmluaGVyaXQoYixhLmZuLmVkaXRhYmxldHlwZXMubGlzdCksYS5leHRlbmQoYi5wcm90b3R5cGUse3JlbmRlckxpc3Q6ZnVuY3Rpb24oKXt0aGlzLiRpbnB1dC5lbXB0eSgpO3ZhciBiPWZ1bmN0aW9uKGMsZCl7dmFyIGU7aWYoYS5pc0FycmF5KGQpKWZvcih2YXIgZj0wO2Y8ZC5sZW5ndGg7ZisrKWU9e30sZFtmXS5jaGlsZHJlbj8oZS5sYWJlbD1kW2ZdLnRleHQsYy5hcHBlbmQoYihhKCI8b3B0Z3JvdXA+IixlKSxkW2ZdLmNoaWxkcmVuKSkpOihlLnZhbHVlPWRbZl0udmFsdWUsZFtmXS5kaXNhYmxlZCYmKGUuZGlzYWJsZWQ9ITApLGMuYXBwZW5kKGEoIjxvcHRpb24+IixlKS50ZXh0KGRbZl0udGV4dCkpKTtyZXR1cm4gY307Yih0aGlzLiRpbnB1dCx0aGlzLnNvdXJjZURhdGEpLHRoaXMuc2V0Q2xhc3MoKSx0aGlzLiRpbnB1dC5vbigia2V5ZG93bi5lZGl0YWJsZSIsZnVuY3Rpb24oYil7MTM9PT1iLndoaWNoJiZhKHRoaXMpLmNsb3Nlc3QoImZvcm0iKS5zdWJtaXQoKX0pfSx2YWx1ZTJodG1sRmluYWw6ZnVuY3Rpb24oYixjKXt2YXIgZD0iIixlPWEuZm4uZWRpdGFibGV1dGlscy5pdGVtc0J5VmFsdWUoYix0aGlzLnNvdXJjZURhdGEpO2UubGVuZ3RoJiYoZD1lWzBdLnRleHQpLGEuZm4uZWRpdGFibGV0eXBlcy5hYnN0cmFjdGlucHV0LnByb3RvdHlwZS52YWx1ZTJodG1sLmNhbGwodGhpcyxkLGMpfSxhdXRvc3VibWl0OmZ1bmN0aW9uKCl7dGhpcy4kaW5wdXQub2ZmKCJrZXlkb3duLmVkaXRhYmxlIikub24oImNoYW5nZS5lZGl0YWJsZSIsZnVuY3Rpb24oKXthKHRoaXMpLmNsb3Nlc3QoImZvcm0iKS5zdWJtaXQoKX0pfX0pLGIuZGVmYXVsdHM9YS5leHRlbmQoe30sYS5mbi5lZGl0YWJsZXR5cGVzLmxpc3QuZGVmYXVsdHMse3RwbDoiPHNlbGVjdD48L3NlbGVjdD4ifSksYS5mbi5lZGl0YWJsZXR5cGVzLnNlbGVjdD1ifSh3aW5kb3cualF1ZXJ5KSxmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7dmFyIGI9ZnVuY3Rpb24oYSl7dGhpcy5pbml0KCJjaGVja2xpc3QiLGEsYi5kZWZhdWx0cyl9O2EuZm4uZWRpdGFibGV1dGlscy5pbmhlcml0KGIsYS5mbi5lZGl0YWJsZXR5cGVzLmxpc3QpLGEuZXh0ZW5kKGIucHJvdG90eXBlLHtyZW5kZXJMaXN0OmZ1bmN0aW9uKCl7dmFyIGI7aWYodGhpcy4kdHBsLmVtcHR5KCksYS5pc0FycmF5KHRoaXMuc291cmNlRGF0YSkpe2Zvcih2YXIgYz0wO2M8dGhpcy5zb3VyY2VEYXRhLmxlbmd0aDtjKyspYj1hKCI8bGFiZWw+IikuYXBwZW5kKGEoIjxpbnB1dD4iLHt0eXBlOiJjaGVja2JveCIsdmFsdWU6dGhpcy5zb3VyY2VEYXRhW2NdLnZhbHVlfSkpLmFwcGVuZChhKCI8c3Bhbj4iKS50ZXh0KCIgIit0aGlzLnNvdXJjZURhdGFbY10udGV4dCkpLGEoIjxkaXY+IikuYXBwZW5kKGIpLmFwcGVuZFRvKHRoaXMuJHRwbCk7dGhpcy4kaW5wdXQ9dGhpcy4kdHBsLmZpbmQoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKSx0aGlzLnNldENsYXNzKCl9fSx2YWx1ZTJzdHI6ZnVuY3Rpb24oYil7cmV0dXJuIGEuaXNBcnJheShiKT9iLnNvcnQoKS5qb2luKGEudHJpbSh0aGlzLm9wdGlvbnMuc2VwYXJhdG9yKSk6IiJ9LHN0cjJ2YWx1ZTpmdW5jdGlvbihiKXt2YXIgYyxkPW51bGw7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBiJiZiLmxlbmd0aD8oYz1uZXcgUmVnRXhwKCJcXHMqIithLnRyaW0odGhpcy5vcHRpb25zLnNlcGFyYXRvcikrIlxccyoiKSxkPWIuc3BsaXQoYykpOmQ9YS5pc0FycmF5KGIpP2I6W2JdLGR9LHZhbHVlMmlucHV0OmZ1bmN0aW9uKGIpe3RoaXMuJGlucHV0LnByb3AoImNoZWNrZWQiLCExKSxhLmlzQXJyYXkoYikmJmIubGVuZ3RoJiZ0aGlzLiRpbnB1dC5lYWNoKGZ1bmN0aW9uKGMsZCl7dmFyIGU9YShkKTthLmVhY2goYixmdW5jdGlvbihhLGIpe2UudmFsKCk9PWImJmUucHJvcCgiY2hlY2tlZCIsITApfSl9KX0saW5wdXQydmFsdWU6ZnVuY3Rpb24oKXt2YXIgYj1bXTtyZXR1cm4gdGhpcy4kaW5wdXQuZmlsdGVyKCI6Y2hlY2tlZCIpLmVhY2goZnVuY3Rpb24oYyxkKXtiLnB1c2goYShkKS52YWwoKSl9KSxifSx2YWx1ZTJodG1sRmluYWw6ZnVuY3Rpb24oYixjKXt2YXIgZD1bXSxlPWEuZm4uZWRpdGFibGV1dGlscy5pdGVtc0J5VmFsdWUoYix0aGlzLnNvdXJjZURhdGEpLGY9dGhpcy5vcHRpb25zLmVzY2FwZTtlLmxlbmd0aD8oYS5lYWNoKGUsZnVuY3Rpb24oYixjKXt2YXIgZT1mP2EuZm4uZWRpdGFibGV1dGlscy5lc2NhcGUoYy50ZXh0KTpjLnRleHQ7ZC5wdXNoKGUpfSksYShjKS5odG1sKGQuam9pbigiPGJyPiIpKSk6YShjKS5lbXB0eSgpfSxhY3RpdmF0ZTpmdW5jdGlvbigpe3RoaXMuJGlucHV0LmZpcnN0KCkuZm9jdXMoKX0sYXV0b3N1Ym1pdDpmdW5jdGlvbigpe3RoaXMuJGlucHV0Lm9uKCJrZXlkb3duIixmdW5jdGlvbihiKXsxMz09PWIud2hpY2gmJmEodGhpcykuY2xvc2VzdCgiZm9ybSIpLnN1Ym1pdCgpfSl9fSksYi5kZWZhdWx0cz1hLmV4dGVuZCh7fSxhLmZuLmVkaXRhYmxldHlwZXMubGlzdC5kZWZhdWx0cyx7dHBsOic8ZGl2IGNsYXNzPSJlZGl0YWJsZS1jaGVja2xpc3QiPjwvZGl2PicsaW5wdXRjbGFzczpudWxsLHNlcGFyYXRvcjoiLCJ9KSxhLmZuLmVkaXRhYmxldHlwZXMuY2hlY2tsaXN0PWJ9KHdpbmRvdy5qUXVlcnkpLGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1mdW5jdGlvbihhKXt0aGlzLmluaXQoInBhc3N3b3JkIixhLGIuZGVmYXVsdHMpfTthLmZuLmVkaXRhYmxldXRpbHMuaW5oZXJpdChiLGEuZm4uZWRpdGFibGV0eXBlcy50ZXh0KSxhLmV4dGVuZChiLnByb3RvdHlwZSx7dmFsdWUyaHRtbDpmdW5jdGlvbihiLGMpe2I/YShjKS50ZXh0KCJbaGlkZGVuXSIpOmEoYykuZW1wdHkoKX0saHRtbDJ2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBudWxsfX0pLGIuZGVmYXVsdHM9YS5leHRlbmQoe30sYS5mbi5lZGl0YWJsZXR5cGVzLnRleHQuZGVmYXVsdHMse3RwbDonPGlucHV0IHR5cGU9InBhc3N3b3JkIj4nfSksYS5mbi5lZGl0YWJsZXR5cGVzLnBhc3N3b3JkPWJ9KHdpbmRvdy5qUXVlcnkpLGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1mdW5jdGlvbihhKXt0aGlzLmluaXQoImVtYWlsIixhLGIuZGVmYXVsdHMpfTthLmZuLmVkaXRhYmxldXRpbHMuaW5oZXJpdChiLGEuZm4uZWRpdGFibGV0eXBlcy50ZXh0KSxiLmRlZmF1bHRzPWEuZXh0ZW5kKHt9LGEuZm4uZWRpdGFibGV0eXBlcy50ZXh0LmRlZmF1bHRzLHt0cGw6JzxpbnB1dCB0eXBlPSJlbWFpbCI+J30pLGEuZm4uZWRpdGFibGV0eXBlcy5lbWFpbD1ifSh3aW5kb3cualF1ZXJ5KSxmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7dmFyIGI9ZnVuY3Rpb24oYSl7dGhpcy5pbml0KCJ1cmwiLGEsYi5kZWZhdWx0cyl9O2EuZm4uZWRpdGFibGV1dGlscy5pbmhlcml0KGIsYS5mbi5lZGl0YWJsZXR5cGVzLnRleHQpLGIuZGVmYXVsdHM9YS5leHRlbmQoe30sYS5mbi5lZGl0YWJsZXR5cGVzLnRleHQuZGVmYXVsdHMse3RwbDonPGlucHV0IHR5cGU9InVybCI+J30pLGEuZm4uZWRpdGFibGV0eXBlcy51cmw9Yn0od2luZG93LmpRdWVyeSksZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO3ZhciBiPWZ1bmN0aW9uKGEpe3RoaXMuaW5pdCgidGVsIixhLGIuZGVmYXVsdHMpfTthLmZuLmVkaXRhYmxldXRpbHMuaW5oZXJpdChiLGEuZm4uZWRpdGFibGV0eXBlcy50ZXh0KSxiLmRlZmF1bHRzPWEuZXh0ZW5kKHt9LGEuZm4uZWRpdGFibGV0eXBlcy50ZXh0LmRlZmF1bHRzLHt0cGw6JzxpbnB1dCB0eXBlPSJ0ZWwiPid9KSxhLmZuLmVkaXRhYmxldHlwZXMudGVsPWJ9KHdpbmRvdy5qUXVlcnkpLGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1mdW5jdGlvbihhKXt0aGlzLmluaXQoIm51bWJlciIsYSxiLmRlZmF1bHRzKX07YS5mbi5lZGl0YWJsZXV0aWxzLmluaGVyaXQoYixhLmZuLmVkaXRhYmxldHlwZXMudGV4dCksYS5leHRlbmQoYi5wcm90b3R5cGUse3JlbmRlcjpmdW5jdGlvbigpe2Iuc3VwZXJjbGFzcy5yZW5kZXIuY2FsbCh0aGlzKSx0aGlzLnNldEF0dHIoIm1pbiIpLHRoaXMuc2V0QXR0cigibWF4IiksdGhpcy5zZXRBdHRyKCJzdGVwIil9LHBvc3RyZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLiRjbGVhciYmdGhpcy4kY2xlYXIuY3NzKHtyaWdodDoyNH0pfX0pLGIuZGVmYXVsdHM9YS5leHRlbmQoe30sYS5mbi5lZGl0YWJsZXR5cGVzLnRleHQuZGVmYXVsdHMse3RwbDonPGlucHV0IHR5cGU9Im51bWJlciI+JyxpbnB1dGNsYXNzOiJpbnB1dC1taW5pIixtaW46bnVsbCxtYXg6bnVsbCxzdGVwOm51bGx9KSxhLmZuLmVkaXRhYmxldHlwZXMubnVtYmVyPWJ9KHdpbmRvdy5qUXVlcnkpLGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjsKdmFyIGI9ZnVuY3Rpb24oYSl7dGhpcy5pbml0KCJyYW5nZSIsYSxiLmRlZmF1bHRzKX07YS5mbi5lZGl0YWJsZXV0aWxzLmluaGVyaXQoYixhLmZuLmVkaXRhYmxldHlwZXMubnVtYmVyKSxhLmV4dGVuZChiLnByb3RvdHlwZSx7cmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy4kaW5wdXQ9dGhpcy4kdHBsLmZpbHRlcigiaW5wdXQiKSx0aGlzLnNldENsYXNzKCksdGhpcy5zZXRBdHRyKCJtaW4iKSx0aGlzLnNldEF0dHIoIm1heCIpLHRoaXMuc2V0QXR0cigic3RlcCIpLHRoaXMuJGlucHV0Lm9uKCJpbnB1dCIsZnVuY3Rpb24oKXthKHRoaXMpLnNpYmxpbmdzKCJvdXRwdXQiKS50ZXh0KGEodGhpcykudmFsKCkpfSl9LGFjdGl2YXRlOmZ1bmN0aW9uKCl7dGhpcy4kaW5wdXQuZm9jdXMoKX19KSxiLmRlZmF1bHRzPWEuZXh0ZW5kKHt9LGEuZm4uZWRpdGFibGV0eXBlcy5udW1iZXIuZGVmYXVsdHMse3RwbDonPGlucHV0IHR5cGU9InJhbmdlIj48b3V0cHV0IHN0eWxlPSJ3aWR0aDogMzBweDsgZGlzcGxheTogaW5saW5lLWJsb2NrIj48L291dHB1dD4nLGlucHV0Y2xhc3M6ImlucHV0LW1lZGl1bSJ9KSxhLmZuLmVkaXRhYmxldHlwZXMucmFuZ2U9Yn0od2luZG93LmpRdWVyeSksZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO3ZhciBiPWZ1bmN0aW9uKGEpe3RoaXMuaW5pdCgidGltZSIsYSxiLmRlZmF1bHRzKX07YS5mbi5lZGl0YWJsZXV0aWxzLmluaGVyaXQoYixhLmZuLmVkaXRhYmxldHlwZXMuYWJzdHJhY3RpbnB1dCksYS5leHRlbmQoYi5wcm90b3R5cGUse3JlbmRlcjpmdW5jdGlvbigpe3RoaXMuc2V0Q2xhc3MoKX19KSxiLmRlZmF1bHRzPWEuZXh0ZW5kKHt9LGEuZm4uZWRpdGFibGV0eXBlcy5hYnN0cmFjdGlucHV0LmRlZmF1bHRzLHt0cGw6JzxpbnB1dCB0eXBlPSJ0aW1lIj4nfSksYS5mbi5lZGl0YWJsZXR5cGVzLnRpbWU9Yn0od2luZG93LmpRdWVyeSksZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO3ZhciBiPWZ1bmN0aW9uKGMpe2lmKHRoaXMuaW5pdCgic2VsZWN0MiIsYyxiLmRlZmF1bHRzKSxjLnNlbGVjdDI9Yy5zZWxlY3QyfHx7fSx0aGlzLnNvdXJjZURhdGE9bnVsbCxjLnBsYWNlaG9sZGVyJiYoYy5zZWxlY3QyLnBsYWNlaG9sZGVyPWMucGxhY2Vob2xkZXIpLCFjLnNlbGVjdDIudGFncyYmYy5zb3VyY2Upe3ZhciBkPWMuc291cmNlO2EuaXNGdW5jdGlvbihjLnNvdXJjZSkmJihkPWMuc291cmNlLmNhbGwoYy5zY29wZSkpLCJzdHJpbmciPT10eXBlb2YgZD8oYy5zZWxlY3QyLmFqYXg9Yy5zZWxlY3QyLmFqYXh8fHt9LGMuc2VsZWN0Mi5hamF4LmRhdGF8fChjLnNlbGVjdDIuYWpheC5kYXRhPWZ1bmN0aW9uKGEpe3JldHVybntxdWVyeTphfX0pLGMuc2VsZWN0Mi5hamF4LnJlc3VsdHN8fChjLnNlbGVjdDIuYWpheC5yZXN1bHRzPWZ1bmN0aW9uKGEpe3JldHVybntyZXN1bHRzOmF9fSksYy5zZWxlY3QyLmFqYXgudXJsPWQpOih0aGlzLnNvdXJjZURhdGE9dGhpcy5jb252ZXJ0U291cmNlKGQpLGMuc2VsZWN0Mi5kYXRhPXRoaXMuc291cmNlRGF0YSl9aWYodGhpcy5vcHRpb25zLnNlbGVjdDI9YS5leHRlbmQoe30sYi5kZWZhdWx0cy5zZWxlY3QyLGMuc2VsZWN0MiksdGhpcy5pc011bHRpcGxlPXRoaXMub3B0aW9ucy5zZWxlY3QyLnRhZ3N8fHRoaXMub3B0aW9ucy5zZWxlY3QyLm11bHRpcGxlLHRoaXMuaXNSZW1vdGU9ImFqYXgiaW4gdGhpcy5vcHRpb25zLnNlbGVjdDIsdGhpcy5pZEZ1bmM9dGhpcy5vcHRpb25zLnNlbGVjdDIuaWQsImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuaWRGdW5jKXt2YXIgZT10aGlzLmlkRnVuY3x8ImlkIjt0aGlzLmlkRnVuYz1mdW5jdGlvbihhKXtyZXR1cm4gYVtlXX19dGhpcy5mb3JtYXRTZWxlY3Rpb249dGhpcy5vcHRpb25zLnNlbGVjdDIuZm9ybWF0U2VsZWN0aW9uLCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLmZvcm1hdFNlbGVjdGlvbiYmKHRoaXMuZm9ybWF0U2VsZWN0aW9uPWZ1bmN0aW9uKGEpe3JldHVybiBhLnRleHR9KX07YS5mbi5lZGl0YWJsZXV0aWxzLmluaGVyaXQoYixhLmZuLmVkaXRhYmxldHlwZXMuYWJzdHJhY3RpbnB1dCksYS5leHRlbmQoYi5wcm90b3R5cGUse3JlbmRlcjpmdW5jdGlvbigpe3RoaXMuc2V0Q2xhc3MoKSx0aGlzLmlzUmVtb3RlJiZ0aGlzLiRpbnB1dC5vbigic2VsZWN0Mi1sb2FkZWQiLGEucHJveHkoZnVuY3Rpb24oYSl7dGhpcy5zb3VyY2VEYXRhPWEuaXRlbXMucmVzdWx0c30sdGhpcykpLHRoaXMuaXNNdWx0aXBsZSYmdGhpcy4kaW5wdXQub24oImNoYW5nZSIsZnVuY3Rpb24oKXthKHRoaXMpLmNsb3Nlc3QoImZvcm0iKS5wYXJlbnQoKS50cmlnZ2VySGFuZGxlcigicmVzaXplIil9KX0sdmFsdWUyaHRtbDpmdW5jdGlvbihjLGQpe3ZhciBlLGY9IiIsZz10aGlzO3RoaXMub3B0aW9ucy5zZWxlY3QyLnRhZ3M/ZT1jOnRoaXMuc291cmNlRGF0YSYmKGU9YS5mbi5lZGl0YWJsZXV0aWxzLml0ZW1zQnlWYWx1ZShjLHRoaXMuc291cmNlRGF0YSx0aGlzLmlkRnVuYykpLGEuaXNBcnJheShlKT8oZj1bXSxhLmVhY2goZSxmdW5jdGlvbihhLGIpe2YucHVzaChiJiYib2JqZWN0Ij09dHlwZW9mIGI/Zy5mb3JtYXRTZWxlY3Rpb24oYik6Yil9KSk6ZSYmKGY9Zy5mb3JtYXRTZWxlY3Rpb24oZSkpLGY9YS5pc0FycmF5KGYpP2Yuam9pbih0aGlzLm9wdGlvbnMudmlld3NlcGFyYXRvcik6ZixiLnN1cGVyY2xhc3MudmFsdWUyaHRtbC5jYWxsKHRoaXMsZixkKX0saHRtbDJ2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5vcHRpb25zLnNlbGVjdDIudGFncz90aGlzLnN0cjJ2YWx1ZShhLHRoaXMub3B0aW9ucy52aWV3c2VwYXJhdG9yKTpudWxsfSx2YWx1ZTJpbnB1dDpmdW5jdGlvbihiKXtpZihhLmlzQXJyYXkoYikmJihiPWIuam9pbih0aGlzLmdldFNlcGFyYXRvcigpKSksdGhpcy4kaW5wdXQuZGF0YSgic2VsZWN0MiIpP3RoaXMuJGlucHV0LnZhbChiKS50cmlnZ2VyKCJjaGFuZ2UiLCEwKToodGhpcy4kaW5wdXQudmFsKGIpLHRoaXMuJGlucHV0LnNlbGVjdDIodGhpcy5vcHRpb25zLnNlbGVjdDIpKSx0aGlzLmlzUmVtb3RlJiYhdGhpcy5pc011bHRpcGxlJiYhdGhpcy5vcHRpb25zLnNlbGVjdDIuaW5pdFNlbGVjdGlvbil7dmFyIGM9dGhpcy5vcHRpb25zLnNlbGVjdDIuaWQsZD10aGlzLm9wdGlvbnMuc2VsZWN0Mi5mb3JtYXRTZWxlY3Rpb247aWYoIWMmJiFkKXt2YXIgZT1hKHRoaXMub3B0aW9ucy5zY29wZSk7aWYoIWUuZGF0YSgiZWRpdGFibGUiKS5pc0VtcHR5KXt2YXIgZj17aWQ6Yix0ZXh0OmUudGV4dCgpfTt0aGlzLiRpbnB1dC5zZWxlY3QyKCJkYXRhIixmKX19fX0saW5wdXQydmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kaW5wdXQuc2VsZWN0MigidmFsIil9LHN0cjJ2YWx1ZTpmdW5jdGlvbihiLGMpe2lmKCJzdHJpbmciIT10eXBlb2YgYnx8IXRoaXMuaXNNdWx0aXBsZSlyZXR1cm4gYjtjPWN8fHRoaXMuZ2V0U2VwYXJhdG9yKCk7dmFyIGQsZSxmO2lmKG51bGw9PT1ifHxiLmxlbmd0aDwxKXJldHVybiBudWxsO2ZvcihkPWIuc3BsaXQoYyksZT0wLGY9ZC5sZW5ndGg7Zj5lO2UrPTEpZFtlXT1hLnRyaW0oZFtlXSk7cmV0dXJuIGR9LGF1dG9zdWJtaXQ6ZnVuY3Rpb24oKXt0aGlzLiRpbnB1dC5vbigiY2hhbmdlIixmdW5jdGlvbihiLGMpe2N8fGEodGhpcykuY2xvc2VzdCgiZm9ybSIpLnN1Ym1pdCgpfSl9LGdldFNlcGFyYXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuc2VsZWN0Mi5zZXBhcmF0b3J8fGEuZm4uc2VsZWN0Mi5kZWZhdWx0cy5zZXBhcmF0b3J9LGNvbnZlcnRTb3VyY2U6ZnVuY3Rpb24oYil7aWYoYS5pc0FycmF5KGIpJiZiLmxlbmd0aCYmdm9pZCAwIT09YlswXS52YWx1ZSlmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl2b2lkIDAhPT1iW2NdLnZhbHVlJiYoYltjXS5pZD1iW2NdLnZhbHVlLGRlbGV0ZSBiW2NdLnZhbHVlKTtyZXR1cm4gYn0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuJGlucHV0LmRhdGEoInNlbGVjdDIiKSYmdGhpcy4kaW5wdXQuc2VsZWN0MigiZGVzdHJveSIpfX0pLGIuZGVmYXVsdHM9YS5leHRlbmQoe30sYS5mbi5lZGl0YWJsZXR5cGVzLmFic3RyYWN0aW5wdXQuZGVmYXVsdHMse3RwbDonPGlucHV0IHR5cGU9ImhpZGRlbiI+JyxzZWxlY3QyOm51bGwscGxhY2Vob2xkZXI6bnVsbCxzb3VyY2U6bnVsbCx2aWV3c2VwYXJhdG9yOiIsICJ9KSxhLmZuLmVkaXRhYmxldHlwZXMuc2VsZWN0Mj1ifSh3aW5kb3cualF1ZXJ5KSxmdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbihiLGMpe3JldHVybiB0aGlzLiRlbGVtZW50PWEoYiksdGhpcy4kZWxlbWVudC5pcygiaW5wdXQiKT8odGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LGEuZm4uY29tYm9kYXRlLmRlZmF1bHRzLGMsdGhpcy4kZWxlbWVudC5kYXRhKCkpLHRoaXMuaW5pdCgpLHZvaWQgMCk6KGEuZXJyb3IoIkNvbWJvZGF0ZSBzaG91bGQgYmUgYXBwbGllZCB0byBJTlBVVCBlbGVtZW50Iiksdm9pZCAwKX07Yi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmIsaW5pdDpmdW5jdGlvbigpe3RoaXMubWFwPXtkYXk6WyJEIiwiZGF0ZSJdLG1vbnRoOlsiTSIsIm1vbnRoIl0seWVhcjpbIlkiLCJ5ZWFyIl0saG91cjpbIltIaF0iLCJob3VycyJdLG1pbnV0ZTpbIm0iLCJtaW51dGVzIl0sc2Vjb25kOlsicyIsInNlY29uZHMiXSxhbXBtOlsiW0FhXSIsIiJdfSx0aGlzLiR3aWRnZXQ9YSgnPHNwYW4gY2xhc3M9ImNvbWJvZGF0ZSI+PC9zcGFuPicpLmh0bWwodGhpcy5nZXRUZW1wbGF0ZSgpKSx0aGlzLmluaXRDb21ib3MoKSx0aGlzLiR3aWRnZXQub24oImNoYW5nZSIsInNlbGVjdCIsYS5wcm94eShmdW5jdGlvbihiKXt0aGlzLiRlbGVtZW50LnZhbCh0aGlzLmdldFZhbHVlKCkpLmNoYW5nZSgpLHRoaXMub3B0aW9ucy5zbWFydERheXMmJihhKGIudGFyZ2V0KS5pcygiLm1vbnRoIil8fGEoYi50YXJnZXQpLmlzKCIueWVhciIpKSYmdGhpcy5maWxsQ29tYm8oImRheSIpfSx0aGlzKSksdGhpcy4kd2lkZ2V0LmZpbmQoInNlbGVjdCIpLmNzcygid2lkdGgiLCJhdXRvIiksdGhpcy4kZWxlbWVudC5oaWRlKCkuYWZ0ZXIodGhpcy4kd2lkZ2V0KSx0aGlzLnNldFZhbHVlKHRoaXMuJGVsZW1lbnQudmFsKCl8fHRoaXMub3B0aW9ucy52YWx1ZSl9LGdldFRlbXBsYXRlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5vcHRpb25zLnRlbXBsYXRlO3JldHVybiBhLmVhY2godGhpcy5tYXAsZnVuY3Rpb24oYSxjKXtjPWNbMF07dmFyIGQ9bmV3IFJlZ0V4cChjKyIrIiksZT1jLmxlbmd0aD4xP2Muc3Vic3RyaW5nKDEsMik6YztiPWIucmVwbGFjZShkLCJ7IitlKyJ9Iil9KSxiPWIucmVwbGFjZSgvIC9nLCImbmJzcDsiKSxhLmVhY2godGhpcy5tYXAsZnVuY3Rpb24oYSxjKXtjPWNbMF07dmFyIGQ9Yy5sZW5ndGg+MT9jLnN1YnN0cmluZygxLDIpOmM7Yj1iLnJlcGxhY2UoInsiK2QrIn0iLCc8c2VsZWN0IGNsYXNzPSInK2ErJyI+PC9zZWxlY3Q+Jyl9KSxifSxpbml0Q29tYm9zOmZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIHRoaXMubWFwKXt2YXIgYj10aGlzLiR3aWRnZXQuZmluZCgiLiIrYSk7dGhpc1siJCIrYV09Yi5sZW5ndGg/YjpudWxsLHRoaXMuZmlsbENvbWJvKGEpfX0sZmlsbENvbWJvOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbIiQiK2FdO2lmKGIpe3ZhciBjPSJmaWxsIithLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Euc2xpY2UoMSksZD10aGlzW2NdKCksZT1iLnZhbCgpO2IuZW1wdHkoKTtmb3IodmFyIGY9MDtmPGQubGVuZ3RoO2YrKyliLmFwcGVuZCgnPG9wdGlvbiB2YWx1ZT0iJytkW2ZdWzBdKyciPicrZFtmXVsxXSsiPC9vcHRpb24+Iik7Yi52YWwoZSl9fSxmaWxsQ29tbW9uOmZ1bmN0aW9uKGEpe3ZhciBiLGM9W107aWYoIm5hbWUiPT09dGhpcy5vcHRpb25zLmZpcnN0SXRlbSl7Yj1tb21lbnQucmVsYXRpdmVUaW1lfHxtb21lbnQubGFuZ0RhdGEoKS5fcmVsYXRpdmVUaW1lO3ZhciBkPSJmdW5jdGlvbiI9PXR5cGVvZiBiW2FdP2JbYV0oMSwhMCxhLCExKTpiW2FdO2Q9ZC5zcGxpdCgiICIpLnJldmVyc2UoKVswXSxjLnB1c2goWyIiLGRdKX1lbHNlImVtcHR5Ij09PXRoaXMub3B0aW9ucy5maXJzdEl0ZW0mJmMucHVzaChbIiIsIiJdKTtyZXR1cm4gY30sZmlsbERheTpmdW5jdGlvbigpe3ZhciBhLGIsYz10aGlzLmZpbGxDb21tb24oImQiKSxkPS0xIT09dGhpcy5vcHRpb25zLnRlbXBsYXRlLmluZGV4T2YoIkREIiksZT0zMTtpZih0aGlzLm9wdGlvbnMuc21hcnREYXlzJiZ0aGlzLiRtb250aCYmdGhpcy4keWVhcil7dmFyIGY9cGFyc2VJbnQodGhpcy4kbW9udGgudmFsKCksMTApLGc9cGFyc2VJbnQodGhpcy4keWVhci52YWwoKSwxMCk7aXNOYU4oZil8fGlzTmFOKGcpfHwoZT1tb21lbnQoW2csZl0pLmRheXNJbk1vbnRoKCkpfWZvcihiPTE7ZT49YjtiKyspYT1kP3RoaXMubGVhZFplcm8oYik6YixjLnB1c2goW2IsYV0pO3JldHVybiBjfSxmaWxsTW9udGg6ZnVuY3Rpb24oKXt2YXIgYSxiLGM9dGhpcy5maWxsQ29tbW9uKCJNIiksZD0tMSE9PXRoaXMub3B0aW9ucy50ZW1wbGF0ZS5pbmRleE9mKCJNTU1NIiksZT0tMSE9PXRoaXMub3B0aW9ucy50ZW1wbGF0ZS5pbmRleE9mKCJNTU0iKSxmPS0xIT09dGhpcy5vcHRpb25zLnRlbXBsYXRlLmluZGV4T2YoIk1NIik7Zm9yKGI9MDsxMT49YjtiKyspYT1kP21vbWVudCgpLmRhdGUoMSkubW9udGgoYikuZm9ybWF0KCJNTU1NIik6ZT9tb21lbnQoKS5kYXRlKDEpLm1vbnRoKGIpLmZvcm1hdCgiTU1NIik6Zj90aGlzLmxlYWRaZXJvKGIrMSk6YisxLGMucHVzaChbYixhXSk7cmV0dXJuIGN9LGZpbGxZZWFyOmZ1bmN0aW9uKCl7dmFyIGEsYixjPVtdLGQ9LTEhPT10aGlzLm9wdGlvbnMudGVtcGxhdGUuaW5kZXhPZigiWVlZWSIpO2ZvcihiPXRoaXMub3B0aW9ucy5tYXhZZWFyO2I+PXRoaXMub3B0aW9ucy5taW5ZZWFyO2ItLSlhPWQ/YjooYisiIikuc3Vic3RyaW5nKDIpLGNbdGhpcy5vcHRpb25zLnllYXJEZXNjZW5kaW5nPyJwdXNoIjoidW5zaGlmdCJdKFtiLGFdKTtyZXR1cm4gYz10aGlzLmZpbGxDb21tb24oInkiKS5jb25jYXQoYyl9LGZpbGxIb3VyOmZ1bmN0aW9uKCl7dmFyIGEsYixjPXRoaXMuZmlsbENvbW1vbigiaCIpLGQ9LTEhPT10aGlzLm9wdGlvbnMudGVtcGxhdGUuaW5kZXhPZigiaCIpLGU9KC0xIT09dGhpcy5vcHRpb25zLnRlbXBsYXRlLmluZGV4T2YoIkgiKSwtMSE9PXRoaXMub3B0aW9ucy50ZW1wbGF0ZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImhoIikpLGY9ZD8xOjAsZz1kPzEyOjIzO2ZvcihiPWY7Zz49YjtiKyspYT1lP3RoaXMubGVhZFplcm8oYik6YixjLnB1c2goW2IsYV0pO3JldHVybiBjfSxmaWxsTWludXRlOmZ1bmN0aW9uKCl7dmFyIGEsYixjPXRoaXMuZmlsbENvbW1vbigibSIpLGQ9LTEhPT10aGlzLm9wdGlvbnMudGVtcGxhdGUuaW5kZXhPZigibW0iKTtmb3IoYj0wOzU5Pj1iO2IrPXRoaXMub3B0aW9ucy5taW51dGVTdGVwKWE9ZD90aGlzLmxlYWRaZXJvKGIpOmIsYy5wdXNoKFtiLGFdKTtyZXR1cm4gY30sZmlsbFNlY29uZDpmdW5jdGlvbigpe3ZhciBhLGIsYz10aGlzLmZpbGxDb21tb24oInMiKSxkPS0xIT09dGhpcy5vcHRpb25zLnRlbXBsYXRlLmluZGV4T2YoInNzIik7Zm9yKGI9MDs1OT49YjtiKz10aGlzLm9wdGlvbnMuc2Vjb25kU3RlcClhPWQ/dGhpcy5sZWFkWmVybyhiKTpiLGMucHVzaChbYixhXSk7cmV0dXJuIGN9LGZpbGxBbXBtOmZ1bmN0aW9uKCl7dmFyIGE9LTEhPT10aGlzLm9wdGlvbnMudGVtcGxhdGUuaW5kZXhPZigiYSIpLGI9KC0xIT09dGhpcy5vcHRpb25zLnRlbXBsYXRlLmluZGV4T2YoIkEiKSxbWyJhbSIsYT8iYW0iOiJBTSJdLFsicG0iLGE/InBtIjoiUE0iXV0pO3JldHVybiBifSxnZXRWYWx1ZTpmdW5jdGlvbihiKXt2YXIgYyxkPXt9LGU9dGhpcyxmPSExO3JldHVybiBhLmVhY2godGhpcy5tYXAsZnVuY3Rpb24oYSl7aWYoImFtcG0iIT09YSl7dmFyIGI9ImRheSI9PT1hPzE6MDtyZXR1cm4gZFthXT1lWyIkIithXT9wYXJzZUludChlWyIkIithXS52YWwoKSwxMCk6Yixpc05hTihkW2FdKT8oZj0hMCwhMSk6dm9pZCAwfX0pLGY/IiI6KHRoaXMuJGFtcG0mJihkLmhvdXI9MTI9PT1kLmhvdXI/ImFtIj09PXRoaXMuJGFtcG0udmFsKCk/MDoxMjoiYW0iPT09dGhpcy4kYW1wbS52YWwoKT9kLmhvdXI6ZC5ob3VyKzEyKSxjPW1vbWVudChbZC55ZWFyLGQubW9udGgsZC5kYXksZC5ob3VyLGQubWludXRlLGQuc2Vjb25kXSksdGhpcy5oaWdobGlnaHQoYyksYj12b2lkIDA9PT1iP3RoaXMub3B0aW9ucy5mb3JtYXQ6YixudWxsPT09Yj9jLmlzVmFsaWQoKT9jOm51bGw6Yy5pc1ZhbGlkKCk/Yy5mb3JtYXQoYik6IiIpfSxzZXRWYWx1ZTpmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGIsYyl7dmFyIGQ9e307cmV0dXJuIGIuY2hpbGRyZW4oIm9wdGlvbiIpLmVhY2goZnVuY3Rpb24oYixlKXt2YXIgZixnPWEoZSkuYXR0cigidmFsdWUiKTsiIiE9PWcmJihmPU1hdGguYWJzKGctYyksKCJ1bmRlZmluZWQiPT10eXBlb2YgZC5kaXN0YW5jZXx8ZjxkLmRpc3RhbmNlKSYmKGQ9e3ZhbHVlOmcsZGlzdGFuY2U6Zn0pKX0pLGQudmFsdWV9aWYoYil7dmFyIGQ9InN0cmluZyI9PXR5cGVvZiBiP21vbWVudChiLHRoaXMub3B0aW9ucy5mb3JtYXQpOm1vbWVudChiKSxlPXRoaXMsZj17fTtkLmlzVmFsaWQoKSYmKGEuZWFjaCh0aGlzLm1hcCxmdW5jdGlvbihhLGIpeyJhbXBtIiE9PWEmJihmW2FdPWRbYlsxXV0oKSl9KSx0aGlzLiRhbXBtJiYoZi5ob3VyPj0xMj8oZi5hbXBtPSJwbSIsZi5ob3VyPjEyJiYoZi5ob3VyLT0xMikpOihmLmFtcG09ImFtIiwwPT09Zi5ob3VyJiYoZi5ob3VyPTEyKSkpLGEuZWFjaChmLGZ1bmN0aW9uKGEsYil7ZVsiJCIrYV0mJigibWludXRlIj09PWEmJmUub3B0aW9ucy5taW51dGVTdGVwPjEmJmUub3B0aW9ucy5yb3VuZFRpbWUmJihiPWMoZVsiJCIrYV0sYikpLCJzZWNvbmQiPT09YSYmZS5vcHRpb25zLnNlY29uZFN0ZXA+MSYmZS5vcHRpb25zLnJvdW5kVGltZSYmKGI9YyhlWyIkIithXSxiKSksZVsiJCIrYV0udmFsKGIpKX0pLHRoaXMub3B0aW9ucy5zbWFydERheXMmJnRoaXMuZmlsbENvbWJvKCJkYXkiKSx0aGlzLiRlbGVtZW50LnZhbChkLmZvcm1hdCh0aGlzLm9wdGlvbnMuZm9ybWF0KSkuY2hhbmdlKCkpfX0saGlnaGxpZ2h0OmZ1bmN0aW9uKGEpe2EuaXNWYWxpZCgpP3RoaXMub3B0aW9ucy5lcnJvckNsYXNzP3RoaXMuJHdpZGdldC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuZXJyb3JDbGFzcyk6dGhpcy4kd2lkZ2V0LmZpbmQoInNlbGVjdCIpLmNzcygiYm9yZGVyLWNvbG9yIix0aGlzLmJvcmRlckNvbG9yKTp0aGlzLm9wdGlvbnMuZXJyb3JDbGFzcz90aGlzLiR3aWRnZXQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmVycm9yQ2xhc3MpOih0aGlzLmJvcmRlckNvbG9yfHwodGhpcy5ib3JkZXJDb2xvcj10aGlzLiR3aWRnZXQuZmluZCgic2VsZWN0IikuY3NzKCJib3JkZXItY29sb3IiKSksdGhpcy4kd2lkZ2V0LmZpbmQoInNlbGVjdCIpLmNzcygiYm9yZGVyLWNvbG9yIiwicmVkIikpfSxsZWFkWmVybzpmdW5jdGlvbihhKXtyZXR1cm4gOT49YT8iMCIrYTphfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy4kd2lkZ2V0LnJlbW92ZSgpLHRoaXMuJGVsZW1lbnQucmVtb3ZlRGF0YSgiY29tYm9kYXRlIikuc2hvdygpfX0sYS5mbi5jb21ib2RhdGU9ZnVuY3Rpb24oYyl7dmFyIGQsZT1BcnJheS5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIGUuc2hpZnQoKSwiZ2V0VmFsdWUiPT09YyYmdGhpcy5sZW5ndGgmJihkPXRoaXMuZXEoMCkuZGF0YSgiY29tYm9kYXRlIikpP2QuZ2V0VmFsdWUuYXBwbHkoZCxlKTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGY9ZC5kYXRhKCJjb21ib2RhdGUiKSxnPSJvYmplY3QiPT10eXBlb2YgYyYmYztmfHxkLmRhdGEoImNvbWJvZGF0ZSIsZj1uZXcgYih0aGlzLGcpKSwic3RyaW5nIj09dHlwZW9mIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBmW2NdJiZmW2NdLmFwcGx5KGYsZSl9KX0sYS5mbi5jb21ib2RhdGUuZGVmYXVsdHM9e2Zvcm1hdDoiREQtTU0tWVlZWSBISDptbSIsdGVtcGxhdGU6IkQgLyBNTU0gLyBZWVlZICAgSCA6IG1tIix2YWx1ZTpudWxsLG1pblllYXI6MTk3MCxtYXhZZWFyOjIwMTUseWVhckRlc2NlbmRpbmc6ITAsbWludXRlU3RlcDo1LHNlY29uZFN0ZXA6MSxmaXJzdEl0ZW06ImVtcHR5IixlcnJvckNsYXNzOm51bGwscm91bmRUaW1lOiEwLHNtYXJ0RGF5czohMX19KHdpbmRvdy5qUXVlcnkpLGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1mdW5jdGlvbihjKXt0aGlzLmluaXQoImNvbWJvZGF0ZSIsYyxiLmRlZmF1bHRzKSx0aGlzLm9wdGlvbnMudmlld2Zvcm1hdHx8KHRoaXMub3B0aW9ucy52aWV3Zm9ybWF0PXRoaXMub3B0aW9ucy5mb3JtYXQpLGMuY29tYm9kYXRlPWEuZm4uZWRpdGFibGV1dGlscy50cnlQYXJzZUpzb24oYy5jb21ib2RhdGUsITApLHRoaXMub3B0aW9ucy5jb21ib2RhdGU9YS5leHRlbmQoe30sYi5kZWZhdWx0cy5jb21ib2RhdGUsYy5jb21ib2RhdGUse2Zvcm1hdDp0aGlzLm9wdGlvbnMuZm9ybWF0LHRlbXBsYXRlOnRoaXMub3B0aW9ucy50ZW1wbGF0ZX0pfTthLmZuLmVkaXRhYmxldXRpbHMuaW5oZXJpdChiLGEuZm4uZWRpdGFibGV0eXBlcy5hYnN0cmFjdGlucHV0KSxhLmV4dGVuZChiLnByb3RvdHlwZSx7cmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy4kaW5wdXQuY29tYm9kYXRlKHRoaXMub3B0aW9ucy5jb21ib2RhdGUpLCJiczMiPT09YS5mbi5lZGl0YWJsZWZvcm0uZW5naW5lJiZ0aGlzLiRpbnB1dC5zaWJsaW5ncygpLmZpbmQoInNlbGVjdCIpLmFkZENsYXNzKCJmb3JtLWNvbnRyb2wiKSx0aGlzLm9wdGlvbnMuaW5wdXRjbGFzcyYmdGhpcy4kaW5wdXQuc2libGluZ3MoKS5maW5kKCJzZWxlY3QiKS5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuaW5wdXRjbGFzcyl9LHZhbHVlMmh0bWw6ZnVuY3Rpb24oYSxjKXt2YXIgZD1hP2EuZm9ybWF0KHRoaXMub3B0aW9ucy52aWV3Zm9ybWF0KToiIjtiLnN1cGVyY2xhc3MudmFsdWUyaHRtbC5jYWxsKHRoaXMsZCxjKX0saHRtbDJ2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gYT9tb21lbnQoYSx0aGlzLm9wdGlvbnMudmlld2Zvcm1hdCk6bnVsbH0sdmFsdWUyc3RyOmZ1bmN0aW9uKGEpe3JldHVybiBhP2EuZm9ybWF0KHRoaXMub3B0aW9ucy5mb3JtYXQpOiIifSxzdHIydmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/bW9tZW50KGEsdGhpcy5vcHRpb25zLmZvcm1hdCk6bnVsbH0sdmFsdWUyc3VibWl0OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnZhbHVlMnN0cihhKX0sdmFsdWUyaW5wdXQ6ZnVuY3Rpb24oYSl7dGhpcy4kaW5wdXQuY29tYm9kYXRlKCJzZXRWYWx1ZSIsYSl9LGlucHV0MnZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGlucHV0LmNvbWJvZGF0ZSgiZ2V0VmFsdWUiLG51bGwpfSxhY3RpdmF0ZTpmdW5jdGlvbigpe3RoaXMuJGlucHV0LnNpYmxpbmdzKCIuY29tYm9kYXRlIikuZmluZCgic2VsZWN0IikuZXEoMCkuZm9jdXMoKX0sYXV0b3N1Ym1pdDpmdW5jdGlvbigpe319KSxiLmRlZmF1bHRzPWEuZXh0ZW5kKHt9LGEuZm4uZWRpdGFibGV0eXBlcy5hYnN0cmFjdGlucHV0LmRlZmF1bHRzLHt0cGw6JzxpbnB1dCB0eXBlPSJ0ZXh0Ij4nLGlucHV0Y2xhc3M6bnVsbCxmb3JtYXQ6IllZWVktTU0tREQiLHZpZXdmb3JtYXQ6bnVsbCx0ZW1wbGF0ZToiRCAvIE1NTSAvIFlZWVkiLGNvbWJvZGF0ZTpudWxsfSksYS5mbi5lZGl0YWJsZXR5cGVzLmNvbWJvZGF0ZT1ifSh3aW5kb3cualF1ZXJ5KSxmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7aWYoYS5leHRlbmQoYS5mbi5lZGl0YWJsZUNvbnRhaW5lci5Qb3B1cC5wcm90b3R5cGUse2NvbnRhaW5lck5hbWU6InBvc2h5dGlwIixpbm5lckNzczoiZGl2LnRpcC1pbm5lciIsZGVmYXVsdHM6YS5mbi5wb3NoeXRpcC5kZWZhdWx0cyxpbml0Q29udGFpbmVyOmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGVQbGFjZW1lbnQoKSxhLmV4dGVuZCh0aGlzLmNvbnRhaW5lck9wdGlvbnMse3Nob3dPbjoibm9uZSIsY29udGVudDoiIixhbGlnblRvOiJ0YXJnZXQifSksdGhpcy5jYWxsKHRoaXMuY29udGFpbmVyT3B0aW9ucyl9LHNob3c6ZnVuY3Rpb24oYil7dGhpcy4kZWxlbWVudC5hZGRDbGFzcygiZWRpdGFibGUtb3BlbiIpLGIhPT0hMSYmdGhpcy5jbG9zZU90aGVycyh0aGlzLiRlbGVtZW50WzBdKSx0aGlzLiRmb3JtPWEoIjxkaXY+IiksdGhpcy5yZW5kZXJGb3JtKCk7dmFyIGM9YSgiPGxhYmVsPiIpLnRleHQodGhpcy5vcHRpb25zLnRpdGxlfHx0aGlzLiRlbGVtZW50LmRhdGEoInRpdGxlIil8fHRoaXMuJGVsZW1lbnQuZGF0YSgib3JpZ2luYWxUaXRsZSIpKSxkPWEoIjxkaXY+IikuYXBwZW5kKGMpLmFwcGVuZCh0aGlzLiRmb3JtKTt0aGlzLmNhbGwoInVwZGF0ZSIsZCksdGhpcy5jYWxsKCJzaG93IiksdGhpcy50aXAoKS5hZGRDbGFzcyh0aGlzLmNvbnRhaW5lckNsYXNzKSx0aGlzLiRmb3JtLmRhdGEoImVkaXRhYmxlZm9ybSIpLmlucHV0LmFjdGl2YXRlKCl9LGlubmVySGlkZTpmdW5jdGlvbigpe3RoaXMuY2FsbCgiaGlkZSIpfSxpbm5lckRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmNhbGwoImRlc3Ryb3kiKX0sc2V0UG9zaXRpb246ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lcigpLnJlZnJlc2goITEpfSxoYW5kbGVQbGFjZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgYixjLGQ9MCxlPTA7c3dpdGNoKHRoaXMub3B0aW9ucy5wbGFjZW1lbnQpe2Nhc2UidG9wIjpiPSJjZW50ZXIiLGM9InRvcCIsZT01O2JyZWFrO2Nhc2UicmlnaHQiOmI9InJpZ2h0IixjPSJjZW50ZXIiLGQ9MTA7YnJlYWs7Y2FzZSJib3R0b20iOmI9ImNlbnRlciIsYz0iYm90dG9tIixlPTU7YnJlYWs7Y2FzZSJsZWZ0IjpiPSJsZWZ0IixjPSJjZW50ZXIiLGQ9MTB9YS5leHRlbmQodGhpcy5jb250YWluZXJPcHRpb25zLHthbGlnblg6YixvZmZzZXRYOmQsYWxpZ25ZOmMsb2Zmc2V0WTplfSl9fSksYS5mbi5lZGl0YWJsZUNvbnRhaW5lci5kZWZhdWx0cz1hLmV4dGVuZCh7fSxhLmZuLmVkaXRhYmxlQ29udGFpbmVyLmRlZmF1bHRzLHtjbGFzc05hbWU6InRpcC15ZWxsb3dzaW1wbGUifSksYS5Qb3NoeXRpcCl7dmFyIGI9L151cmxcKFsiJ10/KFteIidcKV0qKVsiJ10/XCk7PyQvaSxjPS9cLnBuZyQvaSxkPSEhd2luZG93LmNyZWF0ZVBvcHVwJiYidW5kZWZpbmVkIj09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZS5taW5XaWR0aDthLlBvc2h5dGlwLnByb3RvdHlwZS5yZWZyZXNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmRpc2FibGVkKXt2YXIgZjtpZihlKXtpZighdGhpcy4kdGlwLmRhdGEoImFjdGl2ZSIpKXJldHVybjtmPXtsZWZ0OnRoaXMuJHRpcC5jc3MoImxlZnQiKSx0b3A6dGhpcy4kdGlwLmNzcygidG9wIil9fXRoaXMuJHRpcC5jc3Moe2xlZnQ6MCx0b3A6MH0pLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpLHZvaWQgMD09PXRoaXMub3BhY2l0eSYmKHRoaXMub3BhY2l0eT10aGlzLiR0aXAuY3NzKCJvcGFjaXR5IikpO3ZhciBnPXRoaXMuJHRpcC5jc3MoImJhY2tncm91bmQtaW1hZ2UiKS5tYXRjaChiKSxoPXRoaXMuJGFycm93LmNzcygiYmFja2dyb3VuZC1pbWFnZSIpLm1hdGNoKGIpO2lmKGcpe3ZhciBpPWMudGVzdChnWzFdKTtkJiZpPyh0aGlzLiR0aXAuY3NzKCJiYWNrZ3JvdW5kLWltYWdlIiwibm9uZSIpLHRoaXMuJGlubmVyLmNzcyh7bWFyZ2luOjAsYm9yZGVyOjAscGFkZGluZzowfSksZz1pPSExKTp0aGlzLiR0aXAucHJlcGVuZCgnPHRhYmxlIGNsYXNzPSJmYWxsYmFjayIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPjx0cj48dGQgY2xhc3M9InRpcC10b3AgdGlwLWJnLWltYWdlIiBjb2xzcGFuPSIyIj48c3Bhbj48L3NwYW4+PC90ZD48dGQgY2xhc3M9InRpcC1yaWdodCB0aXAtYmctaW1hZ2UiIHJvd3NwYW49IjIiPjxzcGFuPjwvc3Bhbj48L3RkPjwvdHI+PHRyPjx0ZCBjbGFzcz0idGlwLWxlZnQgdGlwLWJnLWltYWdlIiByb3dzcGFuPSIyIj48c3Bhbj48L3NwYW4+PC90ZD48dGQ+PC90ZD48L3RyPjx0cj48dGQgY2xhc3M9InRpcC1ib3R0b20gdGlwLWJnLWltYWdlIiBjb2xzcGFuPSIyIj48c3Bhbj48L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+JykuY3NzKHtib3JkZXI6MCxwYWRkaW5nOjAsImJhY2tncm91bmQtaW1hZ2UiOiJub25lIiwiYmFja2dyb3VuZC1jb2xvciI6InRyYW5zcGFyZW50In0pLmZpbmQoIi50aXAtYmctaW1hZ2UiKS5jc3MoImJhY2tncm91bmQtaW1hZ2UiLCd1cmwoIicrZ1sxXSsnIiknKS5lbmQoKS5maW5kKCJ0ZCIpLmVxKDMpLmFwcGVuZCh0aGlzLiRpbm5lciksaSYmIWEuc3VwcG9ydC5vcGFjaXR5JiYodGhpcy5vcHRzLmZhZGU9ITEpfWgmJiFhLnN1cHBvcnQub3BhY2l0eSYmKGQmJmMudGVzdChoWzFdKSYmKGg9ITEsdGhpcy4kYXJyb3cuY3NzKCJiYWNrZ3JvdW5kLWltYWdlIiwibm9uZSIpKSx0aGlzLm9wdHMuZmFkZT0hMSk7dmFyIGo9dGhpcy4kdGlwLmZpbmQoInRhYmxlLmZhbGxiYWNrIik7aWYoZCl7dGhpcy4kdGlwWzBdLnN0eWxlLndpZHRoPSIiLGoud2lkdGgoImF1dG8iKS5maW5kKCJ0ZCIpLmVxKDMpLndpZHRoKCJhdXRvIik7dmFyIGs9dGhpcy4kdGlwLndpZHRoKCksbD1wYXJzZUludCh0aGlzLiR0aXAuY3NzKCJtaW4td2lkdGgiKSwxMCksbT1wYXJzZUludCh0aGlzLiR0aXAuY3NzKCJtYXgtd2lkdGgiKSwxMCk7IWlzTmFOKGwpJiZsPms/az1sOiFpc05hTihtKSYmaz5tJiYoaz1tKSx0aGlzLiR0aXAuYWRkKGopLndpZHRoKGspLmVxKDApLmZpbmQoInRkIikuZXEoMykud2lkdGgoIjEwMCUiKX1lbHNlIGpbMF0mJmoud2lkdGgoImF1dG8iKS5maW5kKCJ0ZCIpLmVxKDMpLndpZHRoKCJhdXRvIikuZW5kKCkuZW5kKCkud2lkdGgoZG9jdW1lbnQuZGVmYXVsdFZpZXcmJmRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJnBhcnNlRmxvYXQoZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiR0aXBbMF0sbnVsbCkud2lkdGgpfHx0aGlzLiR0aXAud2lkdGgoKSkuZmluZCgidGQiKS5lcSgzKS53aWR0aCgiMTAwJSIpO2lmKHRoaXMudGlwT3V0ZXJXPXRoaXMuJHRpcC5vdXRlcldpZHRoKCksdGhpcy50aXBPdXRlckg9dGhpcy4kdGlwLm91dGVySGVpZ2h0KCksdGhpcy5jYWxjUG9zKCksaCYmdGhpcy5wb3MuYXJyb3cmJih0aGlzLiRhcnJvd1swXS5jbGFzc05hbWU9InRpcC1hcnJvdyB0aXAtYXJyb3ctIit0aGlzLnBvcy5hcnJvdyx0aGlzLiRhcnJvdy5jc3MoInZpc2liaWxpdHkiLCJpbmhlcml0IikpLGUpe3RoaXMuYXN5bmNBbmltYXRpbmc9ITA7dmFyIG49dGhpczt0aGlzLiR0aXAuY3NzKGYpLmFuaW1hdGUoe2xlZnQ6dGhpcy5wb3MubCx0b3A6dGhpcy5wb3MudH0sMjAwLGZ1bmN0aW9uKCl7bi5hc3luY0FuaW1hdGluZz0hMX0pfWVsc2UgdGhpcy4kdGlwLmNzcyh7bGVmdDp0aGlzLnBvcy5sLHRvcDp0aGlzLnBvcy50fSl9fX19KHdpbmRvdy5qUXVlcnkpLGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1mdW5jdGlvbihhKXt0aGlzLmluaXQoImRhdGV1aSIsYSxiLmRlZmF1bHRzKSx0aGlzLmluaXRQaWNrZXIoYSxiLmRlZmF1bHRzKX07YS5mbi5lZGl0YWJsZXV0aWxzLmluaGVyaXQoYixhLmZuLmVkaXRhYmxldHlwZXMuYWJzdHJhY3RpbnB1dCksYS5leHRlbmQoYi5wcm90b3R5cGUse2luaXRQaWNrZXI6ZnVuY3Rpb24oYixjKXt0aGlzLm9wdGlvbnMudmlld2Zvcm1hdHx8KHRoaXMub3B0aW9ucy52aWV3Zm9ybWF0PXRoaXMub3B0aW9ucy5mb3JtYXQpLHRoaXMub3B0aW9ucy52aWV3Zm9ybWF0PXRoaXMub3B0aW9ucy52aWV3Zm9ybWF0LnJlcGxhY2UoInl5eXkiLCJ5eSIpLHRoaXMub3B0aW9ucy5mb3JtYXQ9dGhpcy5vcHRpb25zLmZvcm1hdC5yZXBsYWNlKCJ5eXl5IiwieXkiKSx0aGlzLm9wdGlvbnMuZGF0ZXBpY2tlcj1hLmV4dGVuZCh7fSxjLmRhdGVwaWNrZXIsYi5kYXRlcGlja2VyLHtkYXRlRm9ybWF0OnRoaXMub3B0aW9ucy52aWV3Zm9ybWF0fSl9LHJlbmRlcjpmdW5jdGlvbigpe3RoaXMuJGlucHV0LmRhdGVwaWNrZXIodGhpcy5vcHRpb25zLmRhdGVwaWNrZXIpLHRoaXMub3B0aW9ucy5jbGVhciYmKHRoaXMuJGNsZWFyPWEoJzxhIGhyZWY9IiMiPjwvYT4nKS5odG1sKHRoaXMub3B0aW9ucy5jbGVhcikuY2xpY2soYS5wcm94eShmdW5jdGlvbihhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNsZWFyKCl9LHRoaXMpKSx0aGlzLiR0cGwucGFyZW50KCkuYXBwZW5kKGEoJzxkaXYgY2xhc3M9ImVkaXRhYmxlLWNsZWFyIj4nKS5hcHBlbmQodGhpcy4kY2xlYXIpKSl9LHZhbHVlMmh0bWw6ZnVuY3Rpb24oYyxkKXt2YXIgZT1hLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSh0aGlzLm9wdGlvbnMudmlld2Zvcm1hdCxjKTtiLnN1cGVyY2xhc3MudmFsdWUyaHRtbC5jYWxsKHRoaXMsZSxkKX0saHRtbDJ2YWx1ZTpmdW5jdGlvbihiKXtpZigic3RyaW5nIiE9dHlwZW9mIGIpcmV0dXJuIGI7dmFyIGM7dHJ5e2M9YS5kYXRlcGlja2VyLnBhcnNlRGF0ZSh0aGlzLm9wdGlvbnMudmlld2Zvcm1hdCxiKX1jYXRjaChkKXt9cmV0dXJuIGN9LHZhbHVlMnN0cjpmdW5jdGlvbihiKXtyZXR1cm4gYS5kYXRlcGlja2VyLmZvcm1hdERhdGUodGhpcy5vcHRpb25zLmZvcm1hdCxiKX0sc3RyMnZhbHVlOmZ1bmN0aW9uKGIpe2lmKCJzdHJpbmciIT10eXBlb2YgYilyZXR1cm4gYjt2YXIgYzt0cnl7Yz1hLmRhdGVwaWNrZXIucGFyc2VEYXRlKHRoaXMub3B0aW9ucy5mb3JtYXQsYil9Y2F0Y2goZCl7fXJldHVybiBjfSx2YWx1ZTJzdWJtaXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMudmFsdWUyc3RyKGEpfSx2YWx1ZTJpbnB1dDpmdW5jdGlvbihhKXt0aGlzLiRpbnB1dC5kYXRlcGlja2VyKCJzZXREYXRlIixhKX0saW5wdXQydmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kaW5wdXQuZGF0ZXBpY2tlcigiZ2V0RGF0ZSIpfSxhY3RpdmF0ZTpmdW5jdGlvbigpe30sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLiRpbnB1dC5kYXRlcGlja2VyKCJzZXREYXRlIixudWxsKSx0aGlzLmlzQXV0b3N1Ym1pdCYmdGhpcy5zdWJtaXQoKX0sYXV0b3N1Ym1pdDpmdW5jdGlvbigpe3RoaXMuaXNBdXRvc3VibWl0PSEwLHRoaXMuJGlucHV0Lm9uKCJtb3VzZXVwIiwidGFibGUudWktZGF0ZXBpY2tlci1jYWxlbmRhciBhLnVpLXN0YXRlLWRlZmF1bHQiLGEucHJveHkodGhpcy5zdWJtaXQsdGhpcykpfSxzdWJtaXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRpbnB1dC5jbG9zZXN0KCJmb3JtIik7c2V0VGltZW91dChmdW5jdGlvbigpe2Euc3VibWl0KCl9LDIwMCl9fSksYi5kZWZhdWx0cz1hLmV4dGVuZCh7fSxhLmZuLmVkaXRhYmxldHlwZXMuYWJzdHJhY3RpbnB1dC5kZWZhdWx0cyx7dHBsOic8ZGl2IGNsYXNzPSJlZGl0YWJsZS1kYXRlIj48L2Rpdj4nLGlucHV0Y2xhc3M6bnVsbCxmb3JtYXQ6Inl5eXktbW0tZGQiLHZpZXdmb3JtYXQ6bnVsbCxkYXRlcGlja2VyOntmaXJzdERheTowLGNoYW5nZVllYXI6ITAsY2hhbmdlTW9udGg6ITAsc2hvd090aGVyTW9udGhzOiEwfSxjbGVhcjoiJnRpbWVzOyBjbGVhciJ9KSxhLmZuLmVkaXRhYmxldHlwZXMuZGF0ZXVpPWJ9KHdpbmRvdy5qUXVlcnkpLGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1mdW5jdGlvbihhKXt0aGlzLmluaXQoImRhdGV1aWZpZWxkIixhLGIuZGVmYXVsdHMpLHRoaXMuaW5pdFBpY2tlcihhLGIuZGVmYXVsdHMpfTthLmZuLmVkaXRhYmxldXRpbHMuaW5oZXJpdChiLGEuZm4uZWRpdGFibGV0eXBlcy5kYXRldWkpLGEuZXh0ZW5kKGIucHJvdG90eXBlLHtyZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLiRpbnB1dC5kYXRlcGlja2VyKHRoaXMub3B0aW9ucy5kYXRlcGlja2VyKSxhLmZuLmVkaXRhYmxldHlwZXMudGV4dC5wcm90b3R5cGUucmVuZGVyQ2xlYXIuY2FsbCh0aGlzKX0sdmFsdWUyaW5wdXQ6ZnVuY3Rpb24oYil7dGhpcy4kaW5wdXQudmFsKGEuZGF0ZXBpY2tlci5mb3JtYXREYXRlKHRoaXMub3B0aW9ucy52aWV3Zm9ybWF0LGIpKX0saW5wdXQydmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5odG1sMnZhbHVlKHRoaXMuJGlucHV0LnZhbCgpKX0sYWN0aXZhdGU6ZnVuY3Rpb24oKXthLmZuLmVkaXRhYmxldHlwZXMudGV4dC5wcm90b3R5cGUuYWN0aXZhdGUuY2FsbCh0aGlzKX0sdG9nZ2xlQ2xlYXI6ZnVuY3Rpb24oKXthLmZuLmVkaXRhYmxldHlwZXMudGV4dC5wcm90b3R5cGUudG9nZ2xlQ2xlYXIuY2FsbCh0aGlzKX0sYXV0b3N1Ym1pdDpmdW5jdGlvbigpe319KSxiLmRlZmF1bHRzPWEuZXh0ZW5kKHt9LGEuZm4uZWRpdGFibGV0eXBlcy5kYXRldWkuZGVmYXVsdHMse3RwbDonPGlucHV0IHR5cGU9InRleHQiLz4nLGlucHV0Y2xhc3M6bnVsbCxkYXRlcGlja2VyOntzaG93T246ImJ1dHRvbiIsYnV0dG9uSW1hZ2U6Imh0dHA6Ly9qcXVlcnl1aS5jb20vcmVzb3VyY2VzL2RlbW9zL2RhdGVwaWNrZXIvaW1hZ2VzL2NhbGVuZGFyLmdpZiIsYnV0dG9uSW1hZ2VPbmx5OiEwLGZpcnN0RGF5OjAsY2hhbmdlWWVhcjohMCxjaGFuZ2VNb250aDohMCxzaG93T3RoZXJNb250aHM6ITB9LGNsZWFyOiExfSksYS5mbi5lZGl0YWJsZXR5cGVzLmRhdGV1aWZpZWxkPWJ9KHdpbmRvdy5qUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/jquery.poshytip.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogUG9zaHkgVGlwIGpRdWVyeSBwbHVnaW4gdjEuMisKICogaHR0cDovL3ZhZGlrb20uY29tL3Rvb2xzL3Bvc2h5LXRpcC1qcXVlcnktcGx1Z2luLWZvci1zdHlsaXNoLXRvb2x0aXBzLwogKiBDb3B5cmlnaHQgMjAxMC0yMDEzLCBWYXNpbCBEaW5rb3YsIGh0dHA6Ly92YWRpa29tLmNvbS8KICovCgooZnVuY3Rpb24oJCkgewoKCXZhciB0aXBzID0gW10sCgkJcmVCZ0ltYWdlID0gL151cmxcKFsiJ10/KFteIidcKV0qKVsiJ10/XCk7PyQvaSwKCQlyZVBORyA9IC9cLnBuZyQvaSwKCQlJRSA9ICEhd2luZG93LmNyZWF0ZVBvcHVwLAogCQlJRTYgPSBJRSAmJiB0eXBlb2YgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZS5taW5XaWR0aCA9PSAndW5kZWZpbmVkJywKCQlJRWx0OSA9IElFICYmICFkb2N1bWVudC5kZWZhdWx0VmlldzsKCgkvLyBtYWtlIHN1cmUgdGhlIHRpcHMnIHBvc2l0aW9uIGlzIHVwZGF0ZWQgb24gcmVzaXplCglmdW5jdGlvbiBoYW5kbGVXaW5kb3dSZXNpemUoKSB7CgkJJC5lYWNoKHRpcHMsIGZ1bmN0aW9uKCkgewoJCQl0aGlzLnJlZnJlc2godHJ1ZSk7CgkJfSk7Cgl9CgkkKHdpbmRvdykucmVzaXplKGhhbmRsZVdpbmRvd1Jlc2l6ZSk7CgoJJC5Qb3NoeXRpcCA9IGZ1bmN0aW9uKGVsbSwgb3B0aW9ucykgewoJCXRoaXMuJGVsbSA9ICQoZWxtKTsKCQl0aGlzLm9wdHMgPSAkLmV4dGVuZCh7fSwgJC5mbi5wb3NoeXRpcC5kZWZhdWx0cywgb3B0aW9ucyk7CgkJdmFyIGlkTmFtZUh0bWwgPSAoKCcnICE9IHRoaXMub3B0cy5pZE5hbWUpID8gKCdpZD0nK3RoaXMub3B0cy5pZE5hbWUpIDogJycpOwoJCXRoaXMuJHRpcCA9ICQoWyc8ZGl2ICcsIGlkTmFtZUh0bWwsJyBjbGFzcz0iJyx0aGlzLm9wdHMuY2xhc3NOYW1lLCciPicsCgkJCQknPGRpdiBjbGFzcz0idGlwLWlubmVyIHRpcC1iZy1pbWFnZSI+PC9kaXY+JywKCQkJCSc8ZGl2IGNsYXNzPSJ0aXAtYXJyb3cgdGlwLWFycm93LXRvcCB0aXAtYXJyb3ctcmlnaHQgdGlwLWFycm93LWJvdHRvbSB0aXAtYXJyb3ctbGVmdCI+PC9kaXY+JywKCQkJJzwvZGl2PiddLmpvaW4oJycpKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KTsKCQl0aGlzLiRhcnJvdyA9IHRoaXMuJHRpcC5maW5kKCdkaXYudGlwLWFycm93Jyk7CgkJdGhpcy4kaW5uZXIgPSB0aGlzLiR0aXAuZmluZCgnZGl2LnRpcC1pbm5lcicpOwoJCXRoaXMuZGlzYWJsZWQgPSBmYWxzZTsKCQl0aGlzLmNvbnRlbnQgPSBudWxsOwoJCXRoaXMuaW5pdCgpOwoJfTsKCgkkLlBvc2h5dGlwLmhpZGVBbGwgPSBmdW5jdGlvbigpIHsKCQkkLmVhY2godGlwcywgZnVuY3Rpb24oKSB7CgkJCXRoaXMuaGlkZSgpOwoJCX0pOwoJfTsKCgkkLlBvc2h5dGlwLnByb3RvdHlwZSA9IHsKCQlpbml0OiBmdW5jdGlvbigpIHsKCQkJdGlwcy5wdXNoKHRoaXMpOwoKCQkJLy8gc2F2ZSB0aGUgb3JpZ2luYWwgdGl0bGUgYW5kIGEgcmVmZXJlbmNlIHRvIHRoZSBQb3NoeXRpcCBvYmplY3QKCQkJdmFyIHRpdGxlID0gdGhpcy4kZWxtLmF0dHIoJ3RpdGxlJyk7CgkJCXRoaXMuJGVsbS5kYXRhKCd0aXRsZS5wb3NoeXRpcCcsIHRpdGxlICE9PSB1bmRlZmluZWQgPyB0aXRsZSA6IG51bGwpCgkJCQkuZGF0YSgncG9zaHl0aXAnLCB0aGlzKTsKCgkJCS8vIGhvb2sgZWxlbWVudCBldmVudHMKCQkJaWYgKHRoaXMub3B0cy5zaG93T24gIT0gJ25vbmUnKSB7CgkJCQl0aGlzLiRlbG0uYmluZCh7CgkJCQkJJ21vdXNlZW50ZXIucG9zaHl0aXAnOiAkLnByb3h5KHRoaXMubW91c2VlbnRlciwgdGhpcyksCgkJCQkJJ21vdXNlbGVhdmUucG9zaHl0aXAnOiAkLnByb3h5KHRoaXMubW91c2VsZWF2ZSwgdGhpcykKCQkJCX0pOwoJCQkJc3dpdGNoICh0aGlzLm9wdHMuc2hvd09uKSB7CgkJCQkJY2FzZSAnaG92ZXInOgoJCQkJCQlpZiAodGhpcy5vcHRzLmFsaWduVG8gPT0gJ2N1cnNvcicpCgkJCQkJCQl0aGlzLiRlbG0uYmluZCgnbW91c2Vtb3ZlLnBvc2h5dGlwJywgJC5wcm94eSh0aGlzLm1vdXNlbW92ZSwgdGhpcykpOwoJCQkJCQlpZiAodGhpcy5vcHRzLmFsbG93VGlwSG92ZXIpCgkJCQkJCQl0aGlzLiR0aXAuaG92ZXIoJC5wcm94eSh0aGlzLmNsZWFyVGltZW91dHMsIHRoaXMpLCAkLnByb3h5KHRoaXMubW91c2VsZWF2ZSwgdGhpcykpOwoJCQkJCQlicmVhazsKCQkJCQljYXNlICdmb2N1cyc6CgkJCQkJCXRoaXMuJGVsbS5iaW5kKHsKCQkJCQkJCSdmb2N1cy5wb3NoeXRpcCc6ICQucHJveHkodGhpcy5zaG93RGVsYXllZCwgdGhpcyksCgkJCQkJCQknYmx1ci5wb3NoeXRpcCc6ICQucHJveHkodGhpcy5oaWRlRGVsYXllZCwgdGhpcykKCQkJCQkJfSk7CgkJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJfSwKCQltb3VzZWVudGVyOiBmdW5jdGlvbihlKSB7CgkJCWlmICh0aGlzLmRpc2FibGVkKQoJCQkJcmV0dXJuIHRydWU7CgoJCQl0aGlzLnVwZGF0ZUN1cnNvclBvcyhlKTsKCgkJCXRoaXMuJGVsbS5hdHRyKCd0aXRsZScsICcnKTsKCQkJaWYgKHRoaXMub3B0cy5zaG93T24gPT0gJ2ZvY3VzJykKCQkJCXJldHVybiB0cnVlOwoKCQkJdGhpcy5zaG93RGVsYXllZCgpOwoJCX0sCgkJbW91c2VsZWF2ZTogZnVuY3Rpb24oZSkgewoJCQlpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmFzeW5jQW5pbWF0aW5nICYmICh0aGlzLiR0aXBbMF0gPT09IGUucmVsYXRlZFRhcmdldCB8fCBqUXVlcnkuY29udGFpbnModGhpcy4kdGlwWzBdLCBlLnJlbGF0ZWRUYXJnZXQpKSkKCQkJCXJldHVybiB0cnVlOwoKCQkJaWYgKCF0aGlzLiR0aXAuZGF0YSgnYWN0aXZlJykpIHsKCQkJCXZhciB0aXRsZSA9IHRoaXMuJGVsbS5kYXRhKCd0aXRsZS5wb3NoeXRpcCcpOwoJCQkJaWYgKHRpdGxlICE9PSBudWxsKQoJCQkJCXRoaXMuJGVsbS5hdHRyKCd0aXRsZScsIHRpdGxlKTsKCQkJfQoJCQlpZiAodGhpcy5vcHRzLnNob3dPbiA9PSAnZm9jdXMnKQoJCQkJcmV0dXJuIHRydWU7CgoJCQl0aGlzLmhpZGVEZWxheWVkKCk7CgkJfSwKCQltb3VzZW1vdmU6IGZ1bmN0aW9uKGUpIHsKCQkJaWYgKHRoaXMuZGlzYWJsZWQpCgkJCQlyZXR1cm4gdHJ1ZTsKCgkJCXRoaXMudXBkYXRlQ3Vyc29yUG9zKGUpOwoKCQkJaWYgKHRoaXMub3B0cy5mb2xsb3dDdXJzb3IgJiYgdGhpcy4kdGlwLmRhdGEoJ2FjdGl2ZScpKSB7CgkJCQl0aGlzLmNhbGNQb3MoKTsKCQkJCXRoaXMuJHRpcC5jc3Moe2xlZnQ6IHRoaXMucG9zLmwsIHRvcDogdGhpcy5wb3MudH0pOwoJCQkJaWYgKHRoaXMucG9zLmFycm93KQoJCQkJCXRoaXMuJGFycm93WzBdLmNsYXNzTmFtZSA9ICd0aXAtYXJyb3cgdGlwLWFycm93LScgKyB0aGlzLnBvcy5hcnJvdzsKCQkJfQoJCX0sCgkJc2hvdzogZnVuY3Rpb24oKSB7CgkJCWlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuJHRpcC5kYXRhKCdhY3RpdmUnKSkKCQkJCXJldHVybjsKCgkJCXRoaXMucmVzZXQoKTsKCQkJdGhpcy51cGRhdGUoKTsKCgkJCS8vIGRvbid0IHByb2NlZWQgaWYgd2UgZGlkbid0IGdldCBhbnkgY29udGVudCBpbiB1cGRhdGUoKSAoZS5nLiB0aGUgZWxlbWVudCBoYXMgYW4gZW1wdHkgdGl0bGUgYXR0cmlidXRlKQoJCQlpZiAoIXRoaXMuY29udGVudCkKCQkJCXJldHVybjsKCgkJCXRoaXMuZGlzcGxheSgpOwoJCQlpZiAodGhpcy5vcHRzLnRpbWVPblNjcmVlbikKCQkJCXRoaXMuaGlkZURlbGF5ZWQodGhpcy5vcHRzLnRpbWVPblNjcmVlbik7CgkJfSwKCQlzaG93RGVsYXllZDogZnVuY3Rpb24odGltZW91dCkgewoJCQl0aGlzLmNsZWFyVGltZW91dHMoKTsKCQkJdGhpcy5zaG93VGltZW91dCA9IHNldFRpbWVvdXQoJC5wcm94eSh0aGlzLnNob3csIHRoaXMpLCB0eXBlb2YgdGltZW91dCA9PSAnbnVtYmVyJyA/IHRpbWVvdXQgOiB0aGlzLm9wdHMuc2hvd1RpbWVvdXQpOwoJCX0sCgkJaGlkZTogZnVuY3Rpb24oKSB7CgkJCWlmICh0aGlzLmRpc2FibGVkIHx8ICF0aGlzLiR0aXAuZGF0YSgnYWN0aXZlJykpCgkJCQlyZXR1cm47CgoJCQl0aGlzLmRpc3BsYXkodHJ1ZSk7CgkJfSwKCQloaWRlRGVsYXllZDogZnVuY3Rpb24odGltZW91dCkgewoJCQl0aGlzLmNsZWFyVGltZW91dHMoKTsKCQkJdGhpcy5oaWRlVGltZW91dCA9IHNldFRpbWVvdXQoJC5wcm94eSh0aGlzLmhpZGUsIHRoaXMpLCB0eXBlb2YgdGltZW91dCA9PSAnbnVtYmVyJyA/IHRpbWVvdXQgOiB0aGlzLm9wdHMuaGlkZVRpbWVvdXQpOwoJCX0sCgkJcmVzZXQ6IGZ1bmN0aW9uKCkgewoJCQl0aGlzLiR0aXAucXVldWUoW10pLmRldGFjaCgpLmNzcygndmlzaWJpbGl0eScsICdoaWRkZW4nKS5kYXRhKCdhY3RpdmUnLCBmYWxzZSk7CgkJCXRoaXMuJGlubmVyLmZpbmQoJyonKS5wb3NoeXRpcCgnaGlkZScpOwoJCQlpZiAodGhpcy5vcHRzLmZhZGUpCgkJCQl0aGlzLiR0aXAuY3NzKCdvcGFjaXR5JywgdGhpcy5vcGFjaXR5KTsKCQkJdGhpcy4kYXJyb3dbMF0uY2xhc3NOYW1lID0gJ3RpcC1hcnJvdyB0aXAtYXJyb3ctdG9wIHRpcC1hcnJvdy1yaWdodCB0aXAtYXJyb3ctYm90dG9tIHRpcC1hcnJvdy1sZWZ0JzsKCQkJdGhpcy5hc3luY0FuaW1hdGluZyA9IGZhbHNlOwoJCX0sCgkJdXBkYXRlOiBmdW5jdGlvbihjb250ZW50LCBkb250T3ZlcndyaXRlT3B0aW9uKSB7CgkJCWlmICh0aGlzLmRpc2FibGVkKQoJCQkJcmV0dXJuOwoKCQkJdmFyIGFzeW5jID0gY29udGVudCAhPT0gdW5kZWZpbmVkOwoJCQlpZiAoYXN5bmMpIHsKCQkJCWlmICghZG9udE92ZXJ3cml0ZU9wdGlvbikKCQkJCQl0aGlzLm9wdHMuY29udGVudCA9IGNvbnRlbnQ7CgkJCQlpZiAoIXRoaXMuJHRpcC5kYXRhKCdhY3RpdmUnKSkKCQkJCQlyZXR1cm47CgkJCX0gZWxzZSB7CgkJCQljb250ZW50ID0gdGhpcy5vcHRzLmNvbnRlbnQ7CgkJCX0KCgkJCS8vIHVwZGF0ZSBjb250ZW50IG9ubHkgaWYgaXQgaGFzIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IHRpbWUKCQkJdmFyIHNlbGYgPSB0aGlzLAoJCQkJbmV3Q29udGVudCA9IHR5cGVvZiBjb250ZW50ID09ICdmdW5jdGlvbicgPwoJCQkJCWNvbnRlbnQuY2FsbCh0aGlzLiRlbG1bMF0sIGZ1bmN0aW9uKG5ld0NvbnRlbnQpIHsKCQkJCQkJc2VsZi51cGRhdGUobmV3Q29udGVudCk7CgkJCQkJfSkgOgoJCQkJCWNvbnRlbnQgPT0gJ1t0aXRsZV0nID8gdGhpcy4kZWxtLmRhdGEoJ3RpdGxlLnBvc2h5dGlwJykgOiBjb250ZW50OwoJCQlpZiAodGhpcy5jb250ZW50ICE9PSBuZXdDb250ZW50KSB7CgkJCQl0aGlzLiRpbm5lci5lbXB0eSgpLmFwcGVuZChuZXdDb250ZW50KTsKCQkJCXRoaXMuY29udGVudCA9IG5ld0NvbnRlbnQ7CgkJCX0KCgkJCXRoaXMucmVmcmVzaChhc3luYyk7CgkJfSwKCQlyZWZyZXNoOiBmdW5jdGlvbihhc3luYykgewoJCQlpZiAodGhpcy5kaXNhYmxlZCkKCQkJCXJldHVybjsKCgkJCWlmIChhc3luYykgewoJCQkJaWYgKCF0aGlzLiR0aXAuZGF0YSgnYWN0aXZlJykpCgkJCQkJcmV0dXJuOwoJCQkJLy8gc2F2ZSBjdXJyZW50IHBvc2l0aW9uIGFzIHdlIHdpbGwgbmVlZCB0byBhbmltYXRlCgkJCQl2YXIgY3VyclBvcyA9IHtsZWZ0OiB0aGlzLiR0aXAuY3NzKCdsZWZ0JyksIHRvcDogdGhpcy4kdGlwLmNzcygndG9wJyl9OwoJCQl9CgoJCQkvLyByZXNldCBwb3NpdGlvbiB0byBhdm9pZCB0ZXh0IHdyYXBwaW5nLCBldGMuCgkJCXRoaXMuJHRpcC5jc3Moe2xlZnQ6IDAsIHRvcDogMH0pLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpOwoKCQkJLy8gc2F2ZSBkZWZhdWx0IG9wYWNpdHkKCQkJaWYgKHRoaXMub3BhY2l0eSA9PT0gdW5kZWZpbmVkKQoJCQkJdGhpcy5vcGFjaXR5ID0gdGhpcy4kdGlwLmNzcygnb3BhY2l0eScpOwoKCQkJLy8gY2hlY2sgZm9yIGltYWdlcyAtIHRoaXMgY29kZSBpcyBoZXJlIChpLmUuIGV4ZWN1dGVkIGVhY2ggdGltZSB3ZSBzaG93IHRoZSB0aXAgYW5kIG5vdCBvbiBpbml0KSBkdWUgdG8gc29tZSBicm93c2VyIGluY29uc2lzdGVuY2llcwoJCQl2YXIgYmdJbWFnZSA9IHRoaXMuJHRpcC5jc3MoJ2JhY2tncm91bmQtaW1hZ2UnKS5tYXRjaChyZUJnSW1hZ2UpLAoJCQkJYXJyb3cgPSB0aGlzLiRhcnJvdy5jc3MoJ2JhY2tncm91bmQtaW1hZ2UnKS5tYXRjaChyZUJnSW1hZ2UpOwoKCQkJaWYgKGJnSW1hZ2UpIHsKCQkJCXZhciBiZ0ltYWdlUE5HID0gcmVQTkcudGVzdChiZ0ltYWdlWzFdKTsKCQkJCS8vIGZhbGxiYWNrIHRvIGJhY2tncm91bmQtY29sb3IvcGFkZGluZy9ib3JkZXIgaW4gSUU2IGlmIGEgUE5HIGlzIHVzZWQKCQkJCWlmIChJRTYgJiYgYmdJbWFnZVBORykgewoJCQkJCXRoaXMuJHRpcC5jc3MoJ2JhY2tncm91bmQtaW1hZ2UnLCAnbm9uZScpOwoJCQkJCXRoaXMuJGlubmVyLmNzcyh7bWFyZ2luOiAwLCBib3JkZXI6IDAsIHBhZGRpbmc6IDB9KTsKCQkJCQliZ0ltYWdlID0gYmdJbWFnZVBORyA9IGZhbHNlOwoJCQkJfSBlbHNlIHsKCQkJCQl0aGlzLiR0aXAucHJlcGVuZCgnPHRhYmxlIGNsYXNzPSJ0aXAtdGFibGUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj48dHI+PHRkIGNsYXNzPSJ0aXAtdG9wIHRpcC1iZy1pbWFnZSIgY29sc3Bhbj0iMiI+PHNwYW4+PC9zcGFuPjwvdGQ+PHRkIGNsYXNzPSJ0aXAtcmlnaHQgdGlwLWJnLWltYWdlIiByb3dzcGFuPSIyIj48c3Bhbj48L3NwYW4+PC90ZD48L3RyPjx0cj48dGQgY2xhc3M9InRpcC1sZWZ0IHRpcC1iZy1pbWFnZSIgcm93c3Bhbj0iMiI+PHNwYW4+PC9zcGFuPjwvdGQ+PHRkPjwvdGQ+PC90cj48dHI+PHRkIGNsYXNzPSJ0aXAtYm90dG9tIHRpcC1iZy1pbWFnZSIgY29sc3Bhbj0iMiI+PHNwYW4+PC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPicpCgkJCQkJCS5jc3Moe2JvcmRlcjogMCwgcGFkZGluZzogMCwgJ2JhY2tncm91bmQtaW1hZ2UnOiAnbm9uZScsICdiYWNrZ3JvdW5kLWNvbG9yJzogJ3RyYW5zcGFyZW50J30pCgkJCQkJCS5maW5kKCcudGlwLWJnLWltYWdlJykuY3NzKCdiYWNrZ3JvdW5kLWltYWdlJywgJ3VybCgiJyArIGJnSW1hZ2VbMV0gKyciKScpLmVuZCgpCgkJCQkJCS5maW5kKCd0ZCcpLmVxKDMpLmFwcGVuZCh0aGlzLiRpbm5lcik7CgkJCQl9CgkJCQkvLyBkaXNhYmxlIGZhZGUgZWZmZWN0IGluIElFIGR1ZSB0byBBbHBoYSBmaWx0ZXIgKyB0cmFuc2x1Y2VudCBQTkcgaXNzdWUKCQkJCWlmIChiZ0ltYWdlUE5HICYmIElFbHQ5KQoJCQkJCXRoaXMub3B0cy5mYWRlID0gZmFsc2U7CgkJCX0KCQkJLy8gSUUgYXJyb3cgZml4ZXMKCQkJaWYgKGFycm93ICYmIElFbHQ5KSB7CgkJCQkvLyBkaXNhYmxlIGFycm93IGluIElFNiBpZiB1c2luZyBhIFBORwoJCQkJaWYgKElFNiAmJiByZVBORy50ZXN0KGFycm93WzFdKSkgewoJCQkJCWFycm93ID0gZmFsc2U7CgkJCQkJdGhpcy4kYXJyb3cuY3NzKCdiYWNrZ3JvdW5kLWltYWdlJywgJ25vbmUnKTsKCQkJCX0KCQkJCS8vIGRpc2FibGUgZmFkZSBlZmZlY3QgaW4gSUUgZHVlIHRvIEFscGhhIGZpbHRlciArIHRyYW5zbHVjZW50IFBORyBpc3N1ZQoJCQkJdGhpcy5vcHRzLmZhZGUgPSBmYWxzZTsKCQkJfQoKCQkJdmFyICR0YWJsZSA9IHRoaXMuJHRpcC5maW5kKCc+IHRhYmxlLnRpcC10YWJsZScpOwoJCQlpZiAoSUU2KSB7CgkJCQkvLyBmaXggbWluL21heC13aWR0aCBpbiBJRTYKCQkJCXRoaXMuJHRpcFswXS5zdHlsZS53aWR0aCA9ICcnOwoJCQkJJHRhYmxlLndpZHRoKCdhdXRvJykuZmluZCgndGQnKS5lcSgzKS53aWR0aCgnYXV0bycpOwoJCQkJdmFyIHRpcFcgPSB0aGlzLiR0aXAud2lkdGgoKSwKCQkJCQltaW5XID0gcGFyc2VJbnQodGhpcy4kdGlwLmNzcygnbWluLXdpZHRoJykpLAoJCQkJCW1heFcgPSBwYXJzZUludCh0aGlzLiR0aXAuY3NzKCdtYXgtd2lkdGgnKSk7CgkJCQlpZiAoIWlzTmFOKG1pblcpICYmIHRpcFcgPCBtaW5XKQoJCQkJCXRpcFcgPSBtaW5XOwoJCQkJZWxzZSBpZiAoIWlzTmFOKG1heFcpICYmIHRpcFcgPiBtYXhXKQoJCQkJCXRpcFcgPSBtYXhXOwoJCQkJdGhpcy4kdGlwLmFkZCgkdGFibGUpLndpZHRoKHRpcFcpLmVxKDApLmZpbmQoJ3RkJykuZXEoMykud2lkdGgoJzEwMCUnKTsKCQkJfSBlbHNlIGlmICgkdGFibGVbMF0pIHsKCQkJCS8vIGZpeCB0aGUgdGFibGUgd2lkdGggaWYgd2UgYXJlIHVzaW5nIGEgYmFja2dyb3VuZCBpbWFnZQoJCQkJLy8gSUU5LCBGRjQgdXNlIGZsb2F0IG51bWJlcnMgZm9yIHdpZHRoL2hlaWdodCBzbyB1c2UgZ2V0Q29tcHV0ZWRTdHlsZSBmb3IgdGhlbSB0byBhdm9pZCB0ZXh0IHdyYXBwaW5nCgkJCQkvLyBmb3IgZGV0YWlscyBsb29rIGF0OiBodHRwOi8vdmFkaWtvbS5jb20vZGFpbGllcy9vZmZzZXR3aWR0aC1vZmZzZXRoZWlnaHQtdXNlbGVzcy1pbi1pZTktZmlyZWZveDQvCgkJCQkkdGFibGUud2lkdGgoJ2F1dG8nKS5maW5kKCd0ZCcpLmVxKDMpLndpZHRoKCdhdXRvJykuZW5kKCkuZW5kKCkud2lkdGgoZG9jdW1lbnQuZGVmYXVsdFZpZXcgJiYgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSAmJiBwYXJzZUZsb2F0KGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcy4kdGlwWzBdLCBudWxsKS53aWR0aCkgfHwgdGhpcy4kdGlwLndpZHRoKCkpLmZpbmQoJ3RkJykuZXEoMykud2lkdGgoJzEwMCUnKTsKCQkJfQoJCQl0aGlzLnRpcE91dGVyVyA9IHRoaXMuJHRpcC5vdXRlcldpZHRoKCk7CgkJCXRoaXMudGlwT3V0ZXJIID0gdGhpcy4kdGlwLm91dGVySGVpZ2h0KCk7CgoJCQl0aGlzLmNhbGNQb3MoKTsKCgkJCS8vIHBvc2l0aW9uIGFuZCBzaG93IHRoZSBhcnJvdyBpbWFnZQoJCQlpZiAoYXJyb3cgJiYgdGhpcy5wb3MuYXJyb3cpIHsKCQkJCXRoaXMuJGFycm93WzBdLmNsYXNzTmFtZSA9ICd0aXAtYXJyb3cgdGlwLWFycm93LScgKyB0aGlzLnBvcy5hcnJvdzsKCQkJCXRoaXMuJGFycm93LmNzcygndmlzaWJpbGl0eScsICdpbmhlcml0Jyk7CgkJCX0KCgkJCWlmIChhc3luYyAmJiB0aGlzLm9wdHMucmVmcmVzaEFuaUR1cmF0aW9uKSB7CgkJCQl0aGlzLmFzeW5jQW5pbWF0aW5nID0gdHJ1ZTsKCQkJCXZhciBzZWxmID0gdGhpczsKCQkJCXRoaXMuJHRpcC5jc3MoY3VyclBvcykuYW5pbWF0ZSh7bGVmdDogdGhpcy5wb3MubCwgdG9wOiB0aGlzLnBvcy50fSwgdGhpcy5vcHRzLnJlZnJlc2hBbmlEdXJhdGlvbiwgZnVuY3Rpb24oKSB7IHNlbGYuYXN5bmNBbmltYXRpbmcgPSBmYWxzZTsgfSk7CgkJCX0gZWxzZSB7CgkJCQl0aGlzLiR0aXAuY3NzKHtsZWZ0OiB0aGlzLnBvcy5sLCB0b3A6IHRoaXMucG9zLnR9KTsKCQkJfQoJCX0sCgkJZGlzcGxheTogZnVuY3Rpb24oaGlkZSkgewoJCQl2YXIgYWN0aXZlID0gdGhpcy4kdGlwLmRhdGEoJ2FjdGl2ZScpOwoJCQlpZiAoYWN0aXZlICYmICFoaWRlIHx8ICFhY3RpdmUgJiYgaGlkZSkKCQkJCXJldHVybjsKCgkJCXRoaXMuJHRpcC5zdG9wKCk7CgkJCWlmICgodGhpcy5vcHRzLnNsaWRlICYmIHRoaXMucG9zLmFycm93IHx8IHRoaXMub3B0cy5mYWRlKSAmJiAoaGlkZSAmJiB0aGlzLm9wdHMuaGlkZUFuaUR1cmF0aW9uIHx8ICFoaWRlICYmIHRoaXMub3B0cy5zaG93QW5pRHVyYXRpb24pKSB7CgkJCQl2YXIgZnJvbSA9IHt9LCB0byA9IHt9OwoJCQkJLy8gdGhpcy5wb3MuYXJyb3cgaXMgb25seSB1bmRlZmluZWQgd2hlbiBhbGlnblggPT0gYWxpZ25ZID09ICdjZW50ZXInIGFuZCB3ZSBkb24ndCBuZWVkIHRvIHNsaWRlIGluIHRoYXQgcmFyZSBjYXNlCgkJCQlpZiAodGhpcy5vcHRzLnNsaWRlICYmIHRoaXMucG9zLmFycm93KSB7CgkJCQkJdmFyIHByb3AsIGFycjsKCQkJCQlpZiAodGhpcy5wb3MuYXJyb3cgPT0gJ2JvdHRvbScgfHwgdGhpcy5wb3MuYXJyb3cgPT0gJ3RvcCcpIHsKCQkJCQkJcHJvcCA9ICd0b3AnOwoJCQkJCQlhcnIgPSAnYm90dG9tJzsKCQkJCQl9IGVsc2UgewoJCQkJCQlwcm9wID0gJ2xlZnQnOwoJCQkJCQlhcnIgPSAncmlnaHQnOwoJCQkJCX0KCQkJCQl2YXIgdmFsID0gcGFyc2VJbnQodGhpcy4kdGlwLmNzcyhwcm9wKSk7CgkJCQkJZnJvbVtwcm9wXSA9IHZhbCArIChoaWRlID8gMCA6ICh0aGlzLnBvcy5hcnJvdyA9PSBhcnIgPyAtdGhpcy5vcHRzLnNsaWRlT2Zmc2V0IDogdGhpcy5vcHRzLnNsaWRlT2Zmc2V0KSk7CgkJCQkJdG9bcHJvcF0gPSB2YWwgKyAoaGlkZSA/ICh0aGlzLnBvcy5hcnJvdyA9PSBhcnIgPyB0aGlzLm9wdHMuc2xpZGVPZmZzZXQgOiAtdGhpcy5vcHRzLnNsaWRlT2Zmc2V0KSA6IDApICsgJ3B4JzsKCQkJCX0KCQkJCWlmICh0aGlzLm9wdHMuZmFkZSkgewoJCQkJCWZyb20ub3BhY2l0eSA9IGhpZGUgPyB0aGlzLiR0aXAuY3NzKCdvcGFjaXR5JykgOiAwOwoJCQkJCXRvLm9wYWNpdHkgPSBoaWRlID8gMCA6IHRoaXMub3BhY2l0eTsKCQkJCX0KCQkJCXRoaXMuJHRpcC5jc3MoZnJvbSkuYW5pbWF0ZSh0bywgdGhpcy5vcHRzW2hpZGUgPyAnaGlkZUFuaUR1cmF0aW9uJyA6ICdzaG93QW5pRHVyYXRpb24nXSk7CgkJCX0KCQkJaGlkZSA/IHRoaXMuJHRpcC5xdWV1ZSgkLnByb3h5KHRoaXMucmVzZXQsIHRoaXMpKSA6IHRoaXMuJHRpcC5jc3MoJ3Zpc2liaWxpdHknLCAnaW5oZXJpdCcpOwoJCQlpZiAoYWN0aXZlKSB7CgkJCQl2YXIgdGl0bGUgPSB0aGlzLiRlbG0uZGF0YSgndGl0bGUucG9zaHl0aXAnKTsKCQkJCWlmICh0aXRsZSAhPT0gbnVsbCkKCQkJCQl0aGlzLiRlbG0uYXR0cigndGl0bGUnLCB0aXRsZSk7CgkJCX0KCQkJdGhpcy4kdGlwLmRhdGEoJ2FjdGl2ZScsICFhY3RpdmUpOwoJCX0sCgkJZGlzYWJsZTogZnVuY3Rpb24oKSB7CgkJCXRoaXMucmVzZXQoKTsKCQkJdGhpcy5kaXNhYmxlZCA9IHRydWU7CgkJfSwKCQllbmFibGU6IGZ1bmN0aW9uKCkgewoJCQl0aGlzLmRpc2FibGVkID0gZmFsc2U7CgkJfSwKCQlkZXN0cm95OiBmdW5jdGlvbigpIHsKCQkJdGhpcy5yZXNldCgpOwoJCQl0aGlzLiR0aXAucmVtb3ZlKCk7CgkJCWRlbGV0ZSB0aGlzLiR0aXA7CgkJCXRoaXMuY29udGVudCA9IG51bGw7CgkJCXRoaXMuJGVsbS51bmJpbmQoJy5wb3NoeXRpcCcpLnJlbW92ZURhdGEoJ3RpdGxlLnBvc2h5dGlwJykucmVtb3ZlRGF0YSgncG9zaHl0aXAnKTsKCQkJdGlwcy5zcGxpY2UoJC5pbkFycmF5KHRoaXMsIHRpcHMpLCAxKTsKCQl9LAoJCWNsZWFyVGltZW91dHM6IGZ1bmN0aW9uKCkgewoJCQlpZiAodGhpcy5zaG93VGltZW91dCkgewoJCQkJY2xlYXJUaW1lb3V0KHRoaXMuc2hvd1RpbWVvdXQpOwoJCQkJdGhpcy5zaG93VGltZW91dCA9IDA7CgkJCX0KCQkJaWYgKHRoaXMuaGlkZVRpbWVvdXQpIHsKCQkJCWNsZWFyVGltZW91dCh0aGlzLmhpZGVUaW1lb3V0KTsKCQkJCXRoaXMuaGlkZVRpbWVvdXQgPSAwOwoJCQl9CgkJfSwKCQl1cGRhdGVDdXJzb3JQb3M6IGZ1bmN0aW9uKGUpIHsKCQkJdGhpcy5ldmVudFggPSBlLnBhZ2VYOwoJCQl0aGlzLmV2ZW50WSA9IGUucGFnZVk7CgkJfSwKCQljYWxjUG9zOiBmdW5jdGlvbigpIHsKCQkJdmFyIHBvcyA9IHtsOiAwLCB0OiAwLCBhcnJvdzogJyd9LAoJCQkJJHdpbiA9ICQod2luZG93KSwKCQkJCXdpbiA9IHsKCQkJCQlsOiAkd2luLnNjcm9sbExlZnQoKSwKCQkJCQl0OiAkd2luLnNjcm9sbFRvcCgpLAoJCQkJCXc6ICR3aW4ud2lkdGgoKSwKCQkJCQloOiAkd2luLmhlaWdodCgpCgkJCQl9LCB4TCwgeEMsIHhSLCB5VCwgeUMsIHlCOwoJCQlpZiAodGhpcy5vcHRzLmFsaWduVG8gPT0gJ2N1cnNvcicpIHsKCQkJCXhMID0geEMgPSB4UiA9IHRoaXMuZXZlbnRYOwoJCQkJeVQgPSB5QyA9IHlCID0gdGhpcy5ldmVudFk7CgkJCX0gZWxzZSB7IC8vIHRoaXMub3B0cy5hbGlnblRvID09ICd0YXJnZXQnCgkJCQl2YXIgZWxtT2Zmc2V0ID0gdGhpcy4kZWxtLm9mZnNldCgpLAoJCQkJCWVsbSA9IHsKCQkJCQkJbDogZWxtT2Zmc2V0LmxlZnQsCgkJCQkJCXQ6IGVsbU9mZnNldC50b3AsCgkJCQkJCXc6IHRoaXMuJGVsbS5vdXRlcldpZHRoKCksCgkJCQkJCWg6IHRoaXMuJGVsbS5vdXRlckhlaWdodCgpCgkJCQkJfTsKCQkJCXhMID0gZWxtLmwgKyAodGhpcy5vcHRzLmFsaWduWCAhPSAnaW5uZXItcmlnaHQnID8gMCA6IGVsbS53KTsJLy8gbGVmdCBlZGdlCgkJCQl4QyA9IHhMICsgTWF0aC5mbG9vcihlbG0udyAvIDIpOwkJCQkvLyBoIGNlbnRlcgoJCQkJeFIgPSB4TCArICh0aGlzLm9wdHMuYWxpZ25YICE9ICdpbm5lci1sZWZ0JyA/IGVsbS53IDogMCk7CS8vIHJpZ2h0IGVkZ2UKCQkJCXlUID0gZWxtLnQgKyAodGhpcy5vcHRzLmFsaWduWSAhPSAnaW5uZXItYm90dG9tJyA/IDAgOiBlbG0uaCk7CS8vIHRvcCBlZGdlCgkJCQl5QyA9IHlUICsgTWF0aC5mbG9vcihlbG0uaCAvIDIpOwkJCQkvLyB2IGNlbnRlcgoJCQkJeUIgPSB5VCArICh0aGlzLm9wdHMuYWxpZ25ZICE9ICdpbm5lci10b3AnID8gZWxtLmggOiAwKTsJLy8gYm90dG9tIGVkZ2UKCQkJfQoKCQkJLy8ga2VlcCBpbiB2aWV3cG9ydCBhbmQgY2FsYyBhcnJvdyBwb3NpdGlvbgoJCQlzd2l0Y2ggKHRoaXMub3B0cy5hbGlnblgpIHsKCQkJCWNhc2UgJ3JpZ2h0JzoKCQkJCWNhc2UgJ2lubmVyLWxlZnQnOgoJCQkJCXBvcy5sID0geFIgKyB0aGlzLm9wdHMub2Zmc2V0WDsKCQkJCQlpZiAodGhpcy5vcHRzLmtlZXBJblZpZXdwb3J0ICYmIHBvcy5sICsgdGhpcy50aXBPdXRlclcgPiB3aW4ubCArIHdpbi53KQoJCQkJCQlwb3MubCA9IHdpbi5sICsgd2luLncgLSB0aGlzLnRpcE91dGVyVzsKCQkJCQlpZiAodGhpcy5vcHRzLmFsaWduWCA9PSAncmlnaHQnIHx8IHRoaXMub3B0cy5hbGlnblkgPT0gJ2NlbnRlcicpCgkJCQkJCXBvcy5hcnJvdyA9ICdsZWZ0JzsKCQkJCQlicmVhazsKCQkJCWNhc2UgJ2NlbnRlcic6CgkJCQkJcG9zLmwgPSB4QyAtIE1hdGguZmxvb3IodGhpcy50aXBPdXRlclcgLyAyKTsKCQkJCQlpZiAodGhpcy5vcHRzLmtlZXBJblZpZXdwb3J0KSB7CgkJCQkJCWlmIChwb3MubCArIHRoaXMudGlwT3V0ZXJXID4gd2luLmwgKyB3aW4udykKCQkJCQkJCXBvcy5sID0gd2luLmwgKyB3aW4udyAtIHRoaXMudGlwT3V0ZXJXOwoJCQkJCQllbHNlIGlmIChwb3MubCA8IHdpbi5sKQoJCQkJCQkJcG9zLmwgPSB3aW4ubDsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQlkZWZhdWx0OiAvLyAnbGVmdCcgfHwgJ2lubmVyLXJpZ2h0JwoJCQkJCXBvcy5sID0geEwgLSB0aGlzLnRpcE91dGVyVyAtIHRoaXMub3B0cy5vZmZzZXRYOwoJCQkJCWlmICh0aGlzLm9wdHMua2VlcEluVmlld3BvcnQgJiYgcG9zLmwgPCB3aW4ubCkKCQkJCQkJcG9zLmwgPSB3aW4ubDsKCQkJCQlpZiAodGhpcy5vcHRzLmFsaWduWCA9PSAnbGVmdCcgfHwgdGhpcy5vcHRzLmFsaWduWSA9PSAnY2VudGVyJykKCQkJCQkJcG9zLmFycm93ID0gJ3JpZ2h0JzsKCQkJfQoJCQlzd2l0Y2ggKHRoaXMub3B0cy5hbGlnblkpIHsKCQkJCWNhc2UgJ2JvdHRvbSc6CgkJCQljYXNlICdpbm5lci10b3AnOgoJCQkJCXBvcy50ID0geUIgKyB0aGlzLm9wdHMub2Zmc2V0WTsKCQkJCQkvLyAnbGVmdCcgYW5kICdyaWdodCcgbmVlZCBwcmlvcml0eSBmb3IgJ3RhcmdldCcKCQkJCQlpZiAoIXBvcy5hcnJvdyB8fCB0aGlzLm9wdHMuYWxpZ25UbyA9PSAnY3Vyc29yJykKCQkJCQkJcG9zLmFycm93ID0gJ3RvcCc7CgkJCQkJaWYgKHRoaXMub3B0cy5rZWVwSW5WaWV3cG9ydCAmJiBwb3MudCArIHRoaXMudGlwT3V0ZXJIID4gd2luLnQgKyB3aW4uaCkgewoJCQkJCQlwb3MudCA9IHlUIC0gdGhpcy50aXBPdXRlckggLSB0aGlzLm9wdHMub2Zmc2V0WTsKCQkJCQkJaWYgKHBvcy5hcnJvdyA9PSAndG9wJykKCQkJCQkJCXBvcy5hcnJvdyA9ICdib3R0b20nOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJCWNhc2UgJ2NlbnRlcic6CgkJCQkJcG9zLnQgPSB5QyAtIE1hdGguZmxvb3IodGhpcy50aXBPdXRlckggLyAyKTsKCQkJCQlpZiAodGhpcy5vcHRzLmtlZXBJblZpZXdwb3J0KSB7CgkJCQkJCWlmIChwb3MudCArIHRoaXMudGlwT3V0ZXJIID4gd2luLnQgKyB3aW4uaCkKCQkJCQkJCXBvcy50ID0gd2luLnQgKyB3aW4uaCAtIHRoaXMudGlwT3V0ZXJIOwoJCQkJCQllbHNlIGlmIChwb3MudCA8IHdpbi50KQoJCQkJCQkJcG9zLnQgPSB3aW4udDsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQlkZWZhdWx0OiAvLyAndG9wJyB8fCAnaW5uZXItYm90dG9tJwoJCQkJCXBvcy50ID0geVQgLSB0aGlzLnRpcE91dGVySCAtIHRoaXMub3B0cy5vZmZzZXRZOwoJCQkJCS8vICdsZWZ0JyBhbmQgJ3JpZ2h0JyBuZWVkIHByaW9yaXR5IGZvciAndGFyZ2V0JwoJCQkJCWlmICghcG9zLmFycm93IHx8IHRoaXMub3B0cy5hbGlnblRvID09ICdjdXJzb3InKQoJCQkJCQlwb3MuYXJyb3cgPSAnYm90dG9tJzsKCQkJCQlpZiAodGhpcy5vcHRzLmtlZXBJblZpZXdwb3J0ICYmIHBvcy50IDwgd2luLnQpIHsKCQkJCQkJcG9zLnQgPSB5QiArIHRoaXMub3B0cy5vZmZzZXRZOwoJCQkJCQlpZiAocG9zLmFycm93ID09ICdib3R0b20nKQoJCQkJCQkJcG9zLmFycm93ID0gJ3RvcCc7CgkJCQkJfQoJCQl9CgkJCXRoaXMucG9zID0gcG9zOwoJCX0KCX07CgoJJC5mbi5wb3NoeXRpcCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKCQlpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ3N0cmluZycpIHsKCQkJdmFyIGFyZ3MgPSBhcmd1bWVudHMsCgkJCQltZXRob2QgPSBvcHRpb25zOwoJCQlBcnJheS5wcm90b3R5cGUuc2hpZnQuY2FsbChhcmdzKTsKCQkJLy8gdW5ob29rIGxpdmUgZXZlbnRzIGlmICdkZXN0cm95JyBpcyBjYWxsZWQKCQkJaWYgKG1ldGhvZCA9PSAnZGVzdHJveScpIHsKCQkJCXRoaXMuZGllID8KCQkJCQl0aGlzLmRpZSgnbW91c2VlbnRlci5wb3NoeXRpcCcpLmRpZSgnZm9jdXMucG9zaHl0aXAnKSA6CgkJCQkJJChkb2N1bWVudCkudW5kZWxlZ2F0ZSh0aGlzLnNlbGVjdG9yLCAnbW91c2VlbnRlci5wb3NoeXRpcCcpLnVuZGVsZWdhdGUodGhpcy5zZWxlY3RvciwgJ2ZvY3VzLnBvc2h5dGlwJyk7CgkJCX0KCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKCQkJCXZhciBwb3NoeXRpcCA9ICQodGhpcykuZGF0YSgncG9zaHl0aXAnKTsKCQkJCWlmIChwb3NoeXRpcCAmJiBwb3NoeXRpcFttZXRob2RdKQoJCQkJCXBvc2h5dGlwW21ldGhvZF0uYXBwbHkocG9zaHl0aXAsIGFyZ3MpOwoJCQl9KTsKCQl9CgoJCXZhciBvcHRzID0gJC5leHRlbmQoe30sICQuZm4ucG9zaHl0aXAuZGVmYXVsdHMsIG9wdGlvbnMpOwoKCQkvLyBnZW5lcmF0ZSBDU1MgZm9yIHRoaXMgdGlwIGNsYXNzIGlmIG5vdCBhbHJlYWR5IGdlbmVyYXRlZAoJCWlmICghJCgnI3Bvc2h5dGlwLWNzcy0nICsgb3B0cy5jbGFzc05hbWUpWzBdKQoJCQkkKFsnPHN0eWxlIGlkPSJwb3NoeXRpcC1jc3MtJyxvcHRzLmNsYXNzTmFtZSwnIiB0eXBlPSJ0ZXh0L2NzcyI+JywKCQkJCSdkaXYuJyxvcHRzLmNsYXNzTmFtZSwne3Zpc2liaWxpdHk6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt9JywKCQkJCSdkaXYuJyxvcHRzLmNsYXNzTmFtZSwnIHRhYmxlLnRpcC10YWJsZSwgZGl2Licsb3B0cy5jbGFzc05hbWUsJyB0YWJsZS50aXAtdGFibGUgdGR7bWFyZ2luOjA7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0O2ZvbnQtc3R5bGU6aW5oZXJpdDtmb250LXZhcmlhbnQ6aW5oZXJpdDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7fScsCgkJCQknZGl2Licsb3B0cy5jbGFzc05hbWUsJyB0ZC50aXAtYmctaW1hZ2Ugc3BhbntkaXNwbGF5OmJsb2NrO2ZvbnQ6MXB4LzFweCBzYW5zLXNlcmlmO2hlaWdodDonLG9wdHMuYmdJbWFnZUZyYW1lU2l6ZSwncHg7d2lkdGg6JyxvcHRzLmJnSW1hZ2VGcmFtZVNpemUsJ3B4O292ZXJmbG93OmhpZGRlbjt9JywKCQkJCSdkaXYuJyxvcHRzLmNsYXNzTmFtZSwnIHRkLnRpcC1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCUgMDt9JywKCQkJCSdkaXYuJyxvcHRzLmNsYXNzTmFtZSwnIHRkLnRpcC1ib3R0b217YmFja2dyb3VuZC1wb3NpdGlvbjoxMDAlIDEwMCU7fScsCgkJCQknZGl2Licsb3B0cy5jbGFzc05hbWUsJyB0ZC50aXAtbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMTAwJTt9JywKCQkJCSdkaXYuJyxvcHRzLmNsYXNzTmFtZSwnIGRpdi50aXAtaW5uZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotJyxvcHRzLmJnSW1hZ2VGcmFtZVNpemUsJ3B4IC0nLG9wdHMuYmdJbWFnZUZyYW1lU2l6ZSwncHg7fScsCgkJCQknZGl2Licsb3B0cy5jbGFzc05hbWUsJyBkaXYudGlwLWFycm93e3Zpc2liaWxpdHk6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO292ZXJmbG93OmhpZGRlbjtmb250OjFweC8xcHggc2Fucy1zZXJpZjt9JywKCQkJJzwvc3R5bGU+J10uam9pbignJykpLmFwcGVuZFRvKCdoZWFkJyk7CgoJCS8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gaG9vayBsaXZlIGV2ZW50cwoJCWlmIChvcHRzLmxpdmVFdmVudHMgJiYgb3B0cy5zaG93T24gIT0gJ25vbmUnKSB7CgkJCXZhciBoYW5kbGVyLAoJCQkJZGVhZE9wdHMgPSAkLmV4dGVuZCh7fSwgb3B0cywgeyBsaXZlRXZlbnRzOiBmYWxzZSB9KTsKCQkJc3dpdGNoIChvcHRzLnNob3dPbikgewoJCQkJY2FzZSAnaG92ZXInOgoJCQkJCWhhbmRsZXIgPSBmdW5jdGlvbigpIHsKCQkJCQkJdmFyICR0aGlzID0gJCh0aGlzKTsKCQkJCQkJaWYgKCEkdGhpcy5kYXRhKCdwb3NoeXRpcCcpKQoJCQkJCQkJJHRoaXMucG9zaHl0aXAoZGVhZE9wdHMpLnBvc2h5dGlwKCdtb3VzZWVudGVyJyk7CgkJCQkJfTsKCQkJCQkvLyBzdXBwb3J0IDEuNC4yKyAmIDEuOSsKCQkJCQl0aGlzLmxpdmUgPwoJCQkJCQl0aGlzLmxpdmUoJ21vdXNlZW50ZXIucG9zaHl0aXAnLCBoYW5kbGVyKSA6CgkJCQkJCSQoZG9jdW1lbnQpLmRlbGVnYXRlKHRoaXMuc2VsZWN0b3IsICdtb3VzZWVudGVyLnBvc2h5dGlwJywgaGFuZGxlcik7CgkJCQkJYnJlYWs7CgkJCQljYXNlICdmb2N1cyc6CgkJCQkJaGFuZGxlciA9IGZ1bmN0aW9uKCkgewoJCQkJCQl2YXIgJHRoaXMgPSAkKHRoaXMpOwoJCQkJCQlpZiAoISR0aGlzLmRhdGEoJ3Bvc2h5dGlwJykpCgkJCQkJCQkkdGhpcy5wb3NoeXRpcChkZWFkT3B0cykucG9zaHl0aXAoJ3Nob3dEZWxheWVkJyk7CgkJCQkJfTsKCQkJCQl0aGlzLmxpdmUgPwoJCQkJCQl0aGlzLmxpdmUoJ2ZvY3VzLnBvc2h5dGlwJywgaGFuZGxlcikgOgoJCQkJCQkkKGRvY3VtZW50KS5kZWxlZ2F0ZSh0aGlzLnNlbGVjdG9yLCAnZm9jdXMucG9zaHl0aXAnLCBoYW5kbGVyKTsKCQkJCQlicmVhazsKCQkJfQoJCQlyZXR1cm4gdGhpczsKCQl9CgoJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCW5ldyAkLlBvc2h5dGlwKHRoaXMsIG9wdHMpOwoJCX0pOwoJfQoKCS8vIGRlZmF1bHQgc2V0dGluZ3MKCSQuZm4ucG9zaHl0aXAuZGVmYXVsdHMgPSB7CgkJY29udGVudDogCQknW3RpdGxlXScsCS8vIGNvbnRlbnQgdG8gZGlzcGxheSAoJ1t0aXRsZV0nLCAnc3RyaW5nJywgZWxlbWVudCwgZnVuY3Rpb24odXBkYXRlQ2FsbGJhY2spey4uLn0sIGpRdWVyeSkKCQljbGFzc05hbWU6CQkndGlwLXllbGxvdycsCS8vIGNsYXNzIGZvciB0aGUgdGlwcwoJCWlkTmFtZToJCQknJywJCS8vIGlkIGZvciB0aGUgdGlwCgkJYmdJbWFnZUZyYW1lU2l6ZToJMTAsCQkvLyBzaXplIGluIHBpeGVscyBmb3IgdGhlIGJhY2tncm91bmQtaW1hZ2UgKGlmIHNldCBpbiBDU1MpIGZyYW1lIGFyb3VuZCB0aGUgaW5uZXIgY29udGVudCBvZiB0aGUgdGlwCgkJc2hvd1RpbWVvdXQ6CQk1MDAsCQkvLyB0aW1lb3V0IGJlZm9yZSBzaG93aW5nIHRoZSB0aXAgKGluIG1pbGxpc2Vjb25kcyAxMDAwID09IDEgc2Vjb25kKQoJCWhpZGVUaW1lb3V0OgkJMTAwLAkJLy8gdGltZW91dCBiZWZvcmUgaGlkaW5nIHRoZSB0aXAKCQl0aW1lT25TY3JlZW46CQkwLAkJLy8gdGltZW91dCBiZWZvcmUgYXV0b21hdGljYWxseSBoaWRpbmcgdGhlIHRpcCBhZnRlciBzaG93aW5nIGl0IChzZXQgdG8gPiAwIGluIG9yZGVyIHRvIGFjdGl2YXRlKQoJCXNob3dPbjoJCQknaG92ZXInLAkvLyBoYW5kbGVyIGZvciBzaG93aW5nIHRoZSB0aXAgKCdob3ZlcicsICdmb2N1cycsICdub25lJykgLSB1c2UgJ25vbmUnIHRvIHRyaWdnZXIgaXQgbWFudWFsbHkKCQlsaXZlRXZlbnRzOgkJZmFsc2UsCQkvLyB1c2UgbGl2ZSBldmVudHMKCQlhbGlnblRvOgkJJ2N1cnNvcicsCS8vIGFsaWduL3Bvc2l0aW9uIHRoZSB0aXAgcmVsYXRpdmUgdG8gKCdjdXJzb3InLCAndGFyZ2V0JykKCQlhbGlnblg6CQkJJ3JpZ2h0JywJLy8gaG9yaXpvbnRhbCBhbGlnbm1lbnQgZm9yIHRoZSB0aXAgcmVsYXRpdmUgdG8gdGhlIG1vdXNlIGN1cnNvciBvciB0aGUgdGFyZ2V0IGVsZW1lbnQKCQkJCQkJCS8vICgncmlnaHQnLCAnY2VudGVyJywgJ2xlZnQnLCAnaW5uZXItbGVmdCcsICdpbm5lci1yaWdodCcpIC0gJ2lubmVyLSonIG1hdHRlciBpZiBhbGlnblRvOid0YXJnZXQnCgkJYWxpZ25ZOgkJCSd0b3AnLAkJLy8gdmVydGljYWwgYWxpZ25tZW50IGZvciB0aGUgdGlwIHJlbGF0aXZlIHRvIHRoZSBtb3VzZSBjdXJzb3Igb3IgdGhlIHRhcmdldCBlbGVtZW50CgkJCQkJCQkvLyAoJ2JvdHRvbScsICdjZW50ZXInLCAndG9wJywgJ2lubmVyLWJvdHRvbScsICdpbm5lci10b3AnKSAtICdpbm5lci0qJyBtYXR0ZXIgaWYgYWxpZ25UbzondGFyZ2V0JwoJCW9mZnNldFg6CQktMjIsCQkvLyBvZmZzZXQgWCBwaXhlbHMgZnJvbSB0aGUgZGVmYXVsdCBwb3NpdGlvbiAtIGRvZXNuJ3QgbWF0dGVyIGlmIGFsaWduWDonY2VudGVyJwoJCW9mZnNldFk6CQkxOCwJCS8vIG9mZnNldCBZIHBpeGVscyBmcm9tIHRoZSBkZWZhdWx0IHBvc2l0aW9uIC0gZG9lc24ndCBtYXR0ZXIgaWYgYWxpZ25ZOidjZW50ZXInCgkJa2VlcEluVmlld3BvcnQ6CQl0cnVlLAkJLy8gcmVwb3NpdGlvbiB0aGUgdG9vbHRpcCBpZiBuZWVkZWQgdG8gbWFrZSBzdXJlIGl0IGFsd2F5cyBhcHBlYXJzIGluc2lkZSB0aGUgdmlld3BvcnQKCQlhbGxvd1RpcEhvdmVyOgkJdHJ1ZSwJCS8vIGFsbG93IGhvdmVyaW5nIHRoZSB0aXAgd2l0aG91dCBoaWRpbmcgaXQgb25tb3VzZW91dCBvZiB0aGUgdGFyZ2V0IC0gbWF0dGVycyBvbmx5IGlmIHNob3dPbjonaG92ZXInCgkJZm9sbG93Q3Vyc29yOgkJZmFsc2UsCQkvLyBpZiB0aGUgdGlwIHNob3VsZCBmb2xsb3cgdGhlIGN1cnNvciAtIG1hdHRlcnMgb25seSBpZiBzaG93T246J2hvdmVyJyBhbmQgYWxpZ25UbzonY3Vyc29yJwoJCWZhZGU6IAkJCXRydWUsCQkvLyB1c2UgZmFkZSBhbmltYXRpb24KCQlzbGlkZTogCQkJdHJ1ZSwJCS8vIHVzZSBzbGlkZSBhbmltYXRpb24KCQlzbGlkZU9mZnNldDogCQk4LAkJLy8gc2xpZGUgYW5pbWF0aW9uIG9mZnNldAoJCXNob3dBbmlEdXJhdGlvbjogCTMwMCwJCS8vIHNob3cgYW5pbWF0aW9uIGR1cmF0aW9uIC0gc2V0IHRvIDAgaWYgeW91IGRvbid0IHdhbnQgc2hvdyBhbmltYXRpb24KCQloaWRlQW5pRHVyYXRpb246IAkzMDAsCQkvLyBoaWRlIGFuaW1hdGlvbiBkdXJhdGlvbiAtIHNldCB0byAwIGlmIHlvdSBkb24ndCB3YW50IGhpZGUgYW5pbWF0aW9uCgkJcmVmcmVzaEFuaUR1cmF0aW9uOgkyMDAJCS8vIHJlZnJlc2ggYW5pbWF0aW9uIGR1cmF0aW9uIC0gc2V0IHRvIDAgaWYgeW91IGRvbid0IHdhbnQgYW5pbWF0aW9uIHdoZW4gdXBkYXRpbmcgdGhlIHRvb2x0aXAgYXN5bmNocm9ub3VzbHkKCX07Cgp9KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/jquery.poshytip.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogUG9zaHkgVGlwIGpRdWVyeSBwbHVnaW4gdjEuMisKICogaHR0cDovL3ZhZGlrb20uY29tL3Rvb2xzL3Bvc2h5LXRpcC1qcXVlcnktcGx1Z2luLWZvci1zdHlsaXNoLXRvb2x0aXBzLwogKiBDb3B5cmlnaHQgMjAxMC0yMDEzLCBWYXNpbCBEaW5rb3YsIGh0dHA6Ly92YWRpa29tLmNvbS8KICovCgooZnVuY3Rpb24oZil7dmFyIGI9W10sZD0vXnVybFwoWyInXT8oW14iJ1wpXSopWyInXT9cKTs/JC9pLGM9L1wucG5nJC9pLGg9ISF3aW5kb3cuY3JlYXRlUG9wdXAsYT1oJiZ0eXBlb2YgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZS5taW5XaWR0aD09InVuZGVmaW5lZCIsZT1oJiYhZG9jdW1lbnQuZGVmYXVsdFZpZXc7ZnVuY3Rpb24gZygpe2YuZWFjaChiLGZ1bmN0aW9uKCl7dGhpcy5yZWZyZXNoKHRydWUpfSl9Zih3aW5kb3cpLnJlc2l6ZShnKTtmLlBvc2h5dGlwPWZ1bmN0aW9uKGssaSl7dGhpcy4kZWxtPWYoayk7dGhpcy5vcHRzPWYuZXh0ZW5kKHt9LGYuZm4ucG9zaHl0aXAuZGVmYXVsdHMsaSk7dmFyIGo9KCgiIiE9dGhpcy5vcHRzLmlkTmFtZSk/KCJpZD0iK3RoaXMub3B0cy5pZE5hbWUpOiIiKTt0aGlzLiR0aXA9ZihbIjxkaXYgIixqLCcgY2xhc3M9IicsdGhpcy5vcHRzLmNsYXNzTmFtZSwnIj4nLCc8ZGl2IGNsYXNzPSJ0aXAtaW5uZXIgdGlwLWJnLWltYWdlIj48L2Rpdj4nLCc8ZGl2IGNsYXNzPSJ0aXAtYXJyb3cgdGlwLWFycm93LXRvcCB0aXAtYXJyb3ctcmlnaHQgdGlwLWFycm93LWJvdHRvbSB0aXAtYXJyb3ctbGVmdCI+PC9kaXY+JywiPC9kaXY+Il0uam9pbigiIikpLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpO3RoaXMuJGFycm93PXRoaXMuJHRpcC5maW5kKCJkaXYudGlwLWFycm93Iik7dGhpcy4kaW5uZXI9dGhpcy4kdGlwLmZpbmQoImRpdi50aXAtaW5uZXIiKTt0aGlzLmRpc2FibGVkPWZhbHNlO3RoaXMuY29udGVudD1udWxsO3RoaXMuaW5pdCgpfTtmLlBvc2h5dGlwLmhpZGVBbGw9ZnVuY3Rpb24oKXtmLmVhY2goYixmdW5jdGlvbigpe3RoaXMuaGlkZSgpfSl9O2YuUG9zaHl0aXAucHJvdG90eXBlPXtpbml0OmZ1bmN0aW9uKCl7Yi5wdXNoKHRoaXMpO3ZhciBpPXRoaXMuJGVsbS5hdHRyKCJ0aXRsZSIpO3RoaXMuJGVsbS5kYXRhKCJ0aXRsZS5wb3NoeXRpcCIsaSE9PXVuZGVmaW5lZD9pOm51bGwpLmRhdGEoInBvc2h5dGlwIix0aGlzKTtpZih0aGlzLm9wdHMuc2hvd09uIT0ibm9uZSIpe3RoaXMuJGVsbS5iaW5kKHsibW91c2VlbnRlci5wb3NoeXRpcCI6Zi5wcm94eSh0aGlzLm1vdXNlZW50ZXIsdGhpcyksIm1vdXNlbGVhdmUucG9zaHl0aXAiOmYucHJveHkodGhpcy5tb3VzZWxlYXZlLHRoaXMpfSk7c3dpdGNoKHRoaXMub3B0cy5zaG93T24pe2Nhc2UiaG92ZXIiOmlmKHRoaXMub3B0cy5hbGlnblRvPT0iY3Vyc29yIil7dGhpcy4kZWxtLmJpbmQoIm1vdXNlbW92ZS5wb3NoeXRpcCIsZi5wcm94eSh0aGlzLm1vdXNlbW92ZSx0aGlzKSl9aWYodGhpcy5vcHRzLmFsbG93VGlwSG92ZXIpe3RoaXMuJHRpcC5ob3ZlcihmLnByb3h5KHRoaXMuY2xlYXJUaW1lb3V0cyx0aGlzKSxmLnByb3h5KHRoaXMubW91c2VsZWF2ZSx0aGlzKSl9YnJlYWs7Y2FzZSJmb2N1cyI6dGhpcy4kZWxtLmJpbmQoeyJmb2N1cy5wb3NoeXRpcCI6Zi5wcm94eSh0aGlzLnNob3dEZWxheWVkLHRoaXMpLCJibHVyLnBvc2h5dGlwIjpmLnByb3h5KHRoaXMuaGlkZURlbGF5ZWQsdGhpcyl9KTticmVha319fSxtb3VzZWVudGVyOmZ1bmN0aW9uKGkpe2lmKHRoaXMuZGlzYWJsZWQpe3JldHVybiB0cnVlfXRoaXMudXBkYXRlQ3Vyc29yUG9zKGkpO3RoaXMuJGVsbS5hdHRyKCJ0aXRsZSIsIiIpO2lmKHRoaXMub3B0cy5zaG93T249PSJmb2N1cyIpe3JldHVybiB0cnVlfXRoaXMuc2hvd0RlbGF5ZWQoKX0sbW91c2VsZWF2ZTpmdW5jdGlvbihpKXtpZih0aGlzLmRpc2FibGVkfHx0aGlzLmFzeW5jQW5pbWF0aW5nJiYodGhpcy4kdGlwWzBdPT09aS5yZWxhdGVkVGFyZ2V0fHxqUXVlcnkuY29udGFpbnModGhpcy4kdGlwWzBdLGkucmVsYXRlZFRhcmdldCkpKXtyZXR1cm4gdHJ1ZX1pZighdGhpcy4kdGlwLmRhdGEoImFjdGl2ZSIpKXt2YXIgaj10aGlzLiRlbG0uZGF0YSgidGl0bGUucG9zaHl0aXAiKTtpZihqIT09bnVsbCl7dGhpcy4kZWxtLmF0dHIoInRpdGxlIixqKX19aWYodGhpcy5vcHRzLnNob3dPbj09ImZvY3VzIil7cmV0dXJuIHRydWV9dGhpcy5oaWRlRGVsYXllZCgpfSxtb3VzZW1vdmU6ZnVuY3Rpb24oaSl7aWYodGhpcy5kaXNhYmxlZCl7cmV0dXJuIHRydWV9dGhpcy51cGRhdGVDdXJzb3JQb3MoaSk7aWYodGhpcy5vcHRzLmZvbGxvd0N1cnNvciYmdGhpcy4kdGlwLmRhdGEoImFjdGl2ZSIpKXt0aGlzLmNhbGNQb3MoKTt0aGlzLiR0aXAuY3NzKHtsZWZ0OnRoaXMucG9zLmwsdG9wOnRoaXMucG9zLnR9KTtpZih0aGlzLnBvcy5hcnJvdyl7dGhpcy4kYXJyb3dbMF0uY2xhc3NOYW1lPSJ0aXAtYXJyb3cgdGlwLWFycm93LSIrdGhpcy5wb3MuYXJyb3d9fX0sc2hvdzpmdW5jdGlvbigpe2lmKHRoaXMuZGlzYWJsZWR8fHRoaXMuJHRpcC5kYXRhKCJhY3RpdmUiKSl7cmV0dXJufXRoaXMucmVzZXQoKTt0aGlzLnVwZGF0ZSgpO2lmKCF0aGlzLmNvbnRlbnQpe3JldHVybn10aGlzLmRpc3BsYXkoKTtpZih0aGlzLm9wdHMudGltZU9uU2NyZWVuKXt0aGlzLmhpZGVEZWxheWVkKHRoaXMub3B0cy50aW1lT25TY3JlZW4pfX0sc2hvd0RlbGF5ZWQ6ZnVuY3Rpb24oaSl7dGhpcy5jbGVhclRpbWVvdXRzKCk7dGhpcy5zaG93VGltZW91dD1zZXRUaW1lb3V0KGYucHJveHkodGhpcy5zaG93LHRoaXMpLHR5cGVvZiBpPT0ibnVtYmVyIj9pOnRoaXMub3B0cy5zaG93VGltZW91dCl9LGhpZGU6ZnVuY3Rpb24oKXtpZih0aGlzLmRpc2FibGVkfHwhdGhpcy4kdGlwLmRhdGEoImFjdGl2ZSIpKXtyZXR1cm59dGhpcy5kaXNwbGF5KHRydWUpfSxoaWRlRGVsYXllZDpmdW5jdGlvbihpKXt0aGlzLmNsZWFyVGltZW91dHMoKTt0aGlzLmhpZGVUaW1lb3V0PXNldFRpbWVvdXQoZi5wcm94eSh0aGlzLmhpZGUsdGhpcyksdHlwZW9mIGk9PSJudW1iZXIiP2k6dGhpcy5vcHRzLmhpZGVUaW1lb3V0KX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLiR0aXAucXVldWUoW10pLmRldGFjaCgpLmNzcygidmlzaWJpbGl0eSIsImhpZGRlbiIpLmRhdGEoImFjdGl2ZSIsZmFsc2UpO3RoaXMuJGlubmVyLmZpbmQoIioiKS5wb3NoeXRpcCgiaGlkZSIpO2lmKHRoaXMub3B0cy5mYWRlKXt0aGlzLiR0aXAuY3NzKCJvcGFjaXR5Iix0aGlzLm9wYWNpdHkpfXRoaXMuJGFycm93WzBdLmNsYXNzTmFtZT0idGlwLWFycm93IHRpcC1hcnJvdy10b3AgdGlwLWFycm93LXJpZ2h0IHRpcC1hcnJvdy1ib3R0b20gdGlwLWFycm93LWxlZnQiO3RoaXMuYXN5bmNBbmltYXRpbmc9ZmFsc2V9LHVwZGF0ZTpmdW5jdGlvbihsLG0pe2lmKHRoaXMuZGlzYWJsZWQpe3JldHVybn12YXIgaz1sIT09dW5kZWZpbmVkO2lmKGspe2lmKCFtKXt0aGlzLm9wdHMuY29udGVudD1sfWlmKCF0aGlzLiR0aXAuZGF0YSgiYWN0aXZlIikpe3JldHVybn19ZWxzZXtsPXRoaXMub3B0cy5jb250ZW50fXZhciBqPXRoaXMsaT10eXBlb2YgbD09ImZ1bmN0aW9uIj9sLmNhbGwodGhpcy4kZWxtWzBdLGZ1bmN0aW9uKG4pe2oudXBkYXRlKG4pfSk6bD09Ilt0aXRsZV0iP3RoaXMuJGVsbS5kYXRhKCJ0aXRsZS5wb3NoeXRpcCIpOmw7aWYodGhpcy5jb250ZW50IT09aSl7dGhpcy4kaW5uZXIuZW1wdHkoKS5hcHBlbmQoaSk7dGhpcy5jb250ZW50PWl9dGhpcy5yZWZyZXNoKGspfSxyZWZyZXNoOmZ1bmN0aW9uKGope2lmKHRoaXMuZGlzYWJsZWQpe3JldHVybn1pZihqKXtpZighdGhpcy4kdGlwLmRhdGEoImFjdGl2ZSIpKXtyZXR1cm59dmFyIG09e2xlZnQ6dGhpcy4kdGlwLmNzcygibGVmdCIpLHRvcDp0aGlzLiR0aXAuY3NzKCJ0b3AiKX19dGhpcy4kdGlwLmNzcyh7bGVmdDowLHRvcDowfSkuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSk7aWYodGhpcy5vcGFjaXR5PT09dW5kZWZpbmVkKXt0aGlzLm9wYWNpdHk9dGhpcy4kdGlwLmNzcygib3BhY2l0eSIpfXZhciBuPXRoaXMuJHRpcC5jc3MoImJhY2tncm91bmQtaW1hZ2UiKS5tYXRjaChkKSxvPXRoaXMuJGFycm93LmNzcygiYmFja2dyb3VuZC1pbWFnZSIpLm1hdGNoKGQpO2lmKG4pe3ZhciBrPWMudGVzdChuWzFdKTtpZihhJiZrKXt0aGlzLiR0aXAuY3NzKCJiYWNrZ3JvdW5kLWltYWdlIiwibm9uZSIpO3RoaXMuJGlubmVyLmNzcyh7bWFyZ2luOjAsYm9yZGVyOjAscGFkZGluZzowfSk7bj1rPWZhbHNlfWVsc2V7dGhpcy4kdGlwLnByZXBlbmQoJzx0YWJsZSBjbGFzcz0idGlwLXRhYmxlIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0ZCBjbGFzcz0idGlwLXRvcCB0aXAtYmctaW1hZ2UiIGNvbHNwYW49IjIiPjxzcGFuPjwvc3Bhbj48L3RkPjx0ZCBjbGFzcz0idGlwLXJpZ2h0IHRpcC1iZy1pbWFnZSIgcm93c3Bhbj0iMiI+PHNwYW4+PC9zcGFuPjwvdGQ+PC90cj48dHI+PHRkIGNsYXNzPSJ0aXAtbGVmdCB0aXAtYmctaW1hZ2UiIHJvd3NwYW49IjIiPjxzcGFuPjwvc3Bhbj48L3RkPjx0ZD48L3RkPjwvdHI+PHRyPjx0ZCBjbGFzcz0idGlwLWJvdHRvbSB0aXAtYmctaW1hZ2UiIGNvbHNwYW49IjIiPjxzcGFuPjwvc3Bhbj48L3RkPjwvdHI+PC90YWJsZT4nKS5jc3Moe2JvcmRlcjowLHBhZGRpbmc6MCwiYmFja2dyb3VuZC1pbWFnZSI6Im5vbmUiLCJiYWNrZ3JvdW5kLWNvbG9yIjoidHJhbnNwYXJlbnQifSkuZmluZCgiLnRpcC1iZy1pbWFnZSIpLmNzcygiYmFja2dyb3VuZC1pbWFnZSIsJ3VybCgiJytuWzFdKyciKScpLmVuZCgpLmZpbmQoInRkIikuZXEoMykuYXBwZW5kKHRoaXMuJGlubmVyKX1pZihrJiZlKXt0aGlzLm9wdHMuZmFkZT1mYWxzZX19aWYobyYmZSl7aWYoYSYmYy50ZXN0KG9bMV0pKXtvPWZhbHNlO3RoaXMuJGFycm93LmNzcygiYmFja2dyb3VuZC1pbWFnZSIsIm5vbmUiKX10aGlzLm9wdHMuZmFkZT1mYWxzZX12YXIgcT10aGlzLiR0aXAuZmluZCgiPiB0YWJsZS50aXAtdGFibGUiKTtpZihhKXt0aGlzLiR0aXBbMF0uc3R5bGUud2lkdGg9IiI7cS53aWR0aCgiYXV0byIpLmZpbmQoInRkIikuZXEoMykud2lkdGgoImF1dG8iKTt2YXIgcD10aGlzLiR0aXAud2lkdGgoKSxsPXBhcnNlSW50KHRoaXMuJHRpcC5jc3MoIm1pbi13aWR0aCIpKSxpPXBhcnNlSW50KHRoaXMuJHRpcC5jc3MoIm1heC13aWR0aCIpKTtpZighaXNOYU4obCkmJnA8bCl7cD1sfWVsc2V7aWYoIWlzTmFOKGkpJiZwPmkpe3A9aX19dGhpcy4kdGlwLmFkZChxKS53aWR0aChwKS5lcSgwKS5maW5kKCJ0ZCIpLmVxKDMpLndpZHRoKCIxMDAlIil9ZWxzZXtpZihxWzBdKXtxLndpZHRoKCJhdXRvIikuZmluZCgidGQiKS5lcSgzKS53aWR0aCgiYXV0byIpLmVuZCgpLmVuZCgpLndpZHRoKGRvY3VtZW50LmRlZmF1bHRWaWV3JiZkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiZwYXJzZUZsb2F0KGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcy4kdGlwWzBdLG51bGwpLndpZHRoKXx8dGhpcy4kdGlwLndpZHRoKCkpLmZpbmQoInRkIikuZXEoMykud2lkdGgoIjEwMCUiKX19dGhpcy50aXBPdXRlclc9dGhpcy4kdGlwLm91dGVyV2lkdGgoKTt0aGlzLnRpcE91dGVySD10aGlzLiR0aXAub3V0ZXJIZWlnaHQoKTt0aGlzLmNhbGNQb3MoKTtpZihvJiZ0aGlzLnBvcy5hcnJvdyl7dGhpcy4kYXJyb3dbMF0uY2xhc3NOYW1lPSJ0aXAtYXJyb3cgdGlwLWFycm93LSIrdGhpcy5wb3MuYXJyb3c7dGhpcy4kYXJyb3cuY3NzKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpfWlmKGomJnRoaXMub3B0cy5yZWZyZXNoQW5pRHVyYXRpb24pe3RoaXMuYXN5bmNBbmltYXRpbmc9dHJ1ZTt2YXIgcj10aGlzO3RoaXMuJHRpcC5jc3MobSkuYW5pbWF0ZSh7bGVmdDp0aGlzLnBvcy5sLHRvcDp0aGlzLnBvcy50fSx0aGlzLm9wdHMucmVmcmVzaEFuaUR1cmF0aW9uLGZ1bmN0aW9uKCl7ci5hc3luY0FuaW1hdGluZz1mYWxzZX0pfWVsc2V7dGhpcy4kdGlwLmNzcyh7bGVmdDp0aGlzLnBvcy5sLHRvcDp0aGlzLnBvcy50fSl9fSxkaXNwbGF5OmZ1bmN0aW9uKGope3ZhciBrPXRoaXMuJHRpcC5kYXRhKCJhY3RpdmUiKTtpZihrJiYhanx8IWsmJmope3JldHVybn10aGlzLiR0aXAuc3RvcCgpO2lmKCh0aGlzLm9wdHMuc2xpZGUmJnRoaXMucG9zLmFycm93fHx0aGlzLm9wdHMuZmFkZSkmJihqJiZ0aGlzLm9wdHMuaGlkZUFuaUR1cmF0aW9ufHwhaiYmdGhpcy5vcHRzLnNob3dBbmlEdXJhdGlvbikpe3ZhciBwPXt9LG89e307aWYodGhpcy5vcHRzLnNsaWRlJiZ0aGlzLnBvcy5hcnJvdyl7dmFyIG4saTtpZih0aGlzLnBvcy5hcnJvdz09ImJvdHRvbSJ8fHRoaXMucG9zLmFycm93PT0idG9wIil7bj0idG9wIjtpPSJib3R0b20ifWVsc2V7bj0ibGVmdCI7aT0icmlnaHQifXZhciBtPXBhcnNlSW50KHRoaXMuJHRpcC5jc3MobikpO3Bbbl09bSsoaj8wOih0aGlzLnBvcy5hcnJvdz09aT8tdGhpcy5vcHRzLnNsaWRlT2Zmc2V0OnRoaXMub3B0cy5zbGlkZU9mZnNldCkpO29bbl09bSsoaj8odGhpcy5wb3MuYXJyb3c9PWk/dGhpcy5vcHRzLnNsaWRlT2Zmc2V0Oi10aGlzLm9wdHMuc2xpZGVPZmZzZXQpOjApKyJweCJ9aWYodGhpcy5vcHRzLmZhZGUpe3Aub3BhY2l0eT1qP3RoaXMuJHRpcC5jc3MoIm9wYWNpdHkiKTowO28ub3BhY2l0eT1qPzA6dGhpcy5vcGFjaXR5fXRoaXMuJHRpcC5jc3MocCkuYW5pbWF0ZShvLHRoaXMub3B0c1tqPyJoaWRlQW5pRHVyYXRpb24iOiJzaG93QW5pRHVyYXRpb24iXSl9aj90aGlzLiR0aXAucXVldWUoZi5wcm94eSh0aGlzLnJlc2V0LHRoaXMpKTp0aGlzLiR0aXAuY3NzKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpO2lmKGspe3ZhciBsPXRoaXMuJGVsbS5kYXRhKCJ0aXRsZS5wb3NoeXRpcCIpO2lmKGwhPT1udWxsKXt0aGlzLiRlbG0uYXR0cigidGl0bGUiLGwpfX10aGlzLiR0aXAuZGF0YSgiYWN0aXZlIiwhayl9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCk7dGhpcy5kaXNhYmxlZD10cnVlfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkPWZhbHNlfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5yZXNldCgpO3RoaXMuJHRpcC5yZW1vdmUoKTtkZWxldGUgdGhpcy4kdGlwO3RoaXMuY29udGVudD1udWxsO3RoaXMuJGVsbS51bmJpbmQoIi5wb3NoeXRpcCIpLnJlbW92ZURhdGEoInRpdGxlLnBvc2h5dGlwIikucmVtb3ZlRGF0YSgicG9zaHl0aXAiKTtiLnNwbGljZShmLmluQXJyYXkodGhpcyxiKSwxKX0sY2xlYXJUaW1lb3V0czpmdW5jdGlvbigpe2lmKHRoaXMuc2hvd1RpbWVvdXQpe2NsZWFyVGltZW91dCh0aGlzLnNob3dUaW1lb3V0KTt0aGlzLnNob3dUaW1lb3V0PTB9aWYodGhpcy5oaWRlVGltZW91dCl7Y2xlYXJUaW1lb3V0KHRoaXMuaGlkZVRpbWVvdXQpO3RoaXMuaGlkZVRpbWVvdXQ9MH19LHVwZGF0ZUN1cnNvclBvczpmdW5jdGlvbihpKXt0aGlzLmV2ZW50WD1pLnBhZ2VYO3RoaXMuZXZlbnRZPWkucGFnZVl9LGNhbGNQb3M6ZnVuY3Rpb24oKXt2YXIgcD17bDowLHQ6MCxhcnJvdzoiIn0saj1mKHdpbmRvdyksbT17bDpqLnNjcm9sbExlZnQoKSx0Omouc2Nyb2xsVG9wKCksdzpqLndpZHRoKCksaDpqLmhlaWdodCgpfSxyLGwsbyxrLHMsaTtpZih0aGlzLm9wdHMuYWxpZ25Ubz09ImN1cnNvciIpe3I9bD1vPXRoaXMuZXZlbnRYO2s9cz1pPXRoaXMuZXZlbnRZfWVsc2V7dmFyIHE9dGhpcy4kZWxtLm9mZnNldCgpLG49e2w6cS5sZWZ0LHQ6cS50b3Asdzp0aGlzLiRlbG0ub3V0ZXJXaWR0aCgpLGg6dGhpcy4kZWxtLm91dGVySGVpZ2h0KCl9O3I9bi5sKyh0aGlzLm9wdHMuYWxpZ25YIT0iaW5uZXItcmlnaHQiPzA6bi53KTtsPXIrTWF0aC5mbG9vcihuLncvMik7bz1yKyh0aGlzLm9wdHMuYWxpZ25YIT0iaW5uZXItbGVmdCI/bi53OjApO2s9bi50Kyh0aGlzLm9wdHMuYWxpZ25ZIT0iaW5uZXItYm90dG9tIj8wOm4uaCk7cz1rK01hdGguZmxvb3Iobi5oLzIpO2k9aysodGhpcy5vcHRzLmFsaWduWSE9ImlubmVyLXRvcCI/bi5oOjApfXN3aXRjaCh0aGlzLm9wdHMuYWxpZ25YKXtjYXNlInJpZ2h0IjpjYXNlImlubmVyLWxlZnQiOnAubD1vK3RoaXMub3B0cy5vZmZzZXRYO2lmKHRoaXMub3B0cy5rZWVwSW5WaWV3cG9ydCYmcC5sK3RoaXMudGlwT3V0ZXJXPm0ubCttLncpe3AubD1tLmwrbS53LXRoaXMudGlwT3V0ZXJXfWlmKHRoaXMub3B0cy5hbGlnblg9PSJyaWdodCJ8fHRoaXMub3B0cy5hbGlnblk9PSJjZW50ZXIiKXtwLmFycm93PSJsZWZ0In1icmVhaztjYXNlImNlbnRlciI6cC5sPWwtTWF0aC5mbG9vcih0aGlzLnRpcE91dGVyVy8yKTtpZih0aGlzLm9wdHMua2VlcEluVmlld3BvcnQpe2lmKHAubCt0aGlzLnRpcE91dGVyVz5tLmwrbS53KXtwLmw9bS5sK20udy10aGlzLnRpcE91dGVyV31lbHNle2lmKHAubDxtLmwpe3AubD1tLmx9fX1icmVhaztkZWZhdWx0OnAubD1yLXRoaXMudGlwT3V0ZXJXLXRoaXMub3B0cy5vZmZzZXRYO2lmKHRoaXMub3B0cy5rZWVwSW5WaWV3cG9ydCYmcC5sPG0ubCl7cC5sPW0ubH1pZih0aGlzLm9wdHMuYWxpZ25YPT0ibGVmdCJ8fHRoaXMub3B0cy5hbGlnblk9PSJjZW50ZXIiKXtwLmFycm93PSJyaWdodCJ9fXN3aXRjaCh0aGlzLm9wdHMuYWxpZ25ZKXtjYXNlImJvdHRvbSI6Y2FzZSJpbm5lci10b3AiOnAudD1pK3RoaXMub3B0cy5vZmZzZXRZO2lmKCFwLmFycm93fHx0aGlzLm9wdHMuYWxpZ25Ubz09ImN1cnNvciIpe3AuYXJyb3c9InRvcCJ9aWYodGhpcy5vcHRzLmtlZXBJblZpZXdwb3J0JiZwLnQrdGhpcy50aXBPdXRlckg+bS50K20uaCl7cC50PWstdGhpcy50aXBPdXRlckgtdGhpcy5vcHRzLm9mZnNldFk7aWYocC5hcnJvdz09InRvcCIpe3AuYXJyb3c9ImJvdHRvbSJ9fWJyZWFrO2Nhc2UiY2VudGVyIjpwLnQ9cy1NYXRoLmZsb29yKHRoaXMudGlwT3V0ZXJILzIpO2lmKHRoaXMub3B0cy5rZWVwSW5WaWV3cG9ydCl7aWYocC50K3RoaXMudGlwT3V0ZXJIPm0udCttLmgpe3AudD1tLnQrbS5oLXRoaXMudGlwT3V0ZXJIfWVsc2V7aWYocC50PG0udCl7cC50PW0udH19fWJyZWFrO2RlZmF1bHQ6cC50PWstdGhpcy50aXBPdXRlckgtdGhpcy5vcHRzLm9mZnNldFk7aWYoIXAuYXJyb3d8fHRoaXMub3B0cy5hbGlnblRvPT0iY3Vyc29yIil7cC5hcnJvdz0iYm90dG9tIn1pZih0aGlzLm9wdHMua2VlcEluVmlld3BvcnQmJnAudDxtLnQpe3AudD1pK3RoaXMub3B0cy5vZmZzZXRZO2lmKHAuYXJyb3c9PSJib3R0b20iKXtwLmFycm93PSJ0b3AifX19dGhpcy5wb3M9cH19O2YuZm4ucG9zaHl0aXA9ZnVuY3Rpb24oail7aWYodHlwZW9mIGo9PSJzdHJpbmciKXt2YXIgaT1hcmd1bWVudHMsbj1qO0FycmF5LnByb3RvdHlwZS5zaGlmdC5jYWxsKGkpO2lmKG49PSJkZXN0cm95Iil7dGhpcy5kaWU/dGhpcy5kaWUoIm1vdXNlZW50ZXIucG9zaHl0aXAiKS5kaWUoImZvY3VzLnBvc2h5dGlwIik6Zihkb2N1bWVudCkudW5kZWxlZ2F0ZSh0aGlzLnNlbGVjdG9yLCJtb3VzZWVudGVyLnBvc2h5dGlwIikudW5kZWxlZ2F0ZSh0aGlzLnNlbGVjdG9yLCJmb2N1cy5wb3NoeXRpcCIpfXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbz1mKHRoaXMpLmRhdGEoInBvc2h5dGlwIik7aWYobyYmb1tuXSl7b1tuXS5hcHBseShvLGkpfX0pfXZhciBsPWYuZXh0ZW5kKHt9LGYuZm4ucG9zaHl0aXAuZGVmYXVsdHMsaik7aWYoIWYoIiNwb3NoeXRpcC1jc3MtIitsLmNsYXNzTmFtZSlbMF0pe2YoWyc8c3R5bGUgaWQ9InBvc2h5dGlwLWNzcy0nLGwuY2xhc3NOYW1lLCciIHR5cGU9InRleHQvY3NzIj4nLCJkaXYuIixsLmNsYXNzTmFtZSwie3Zpc2liaWxpdHk6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt9IiwiZGl2LiIsbC5jbGFzc05hbWUsIiB0YWJsZS50aXAtdGFibGUsIGRpdi4iLGwuY2xhc3NOYW1lLCIgdGFibGUudGlwLXRhYmxlIHRke21hcmdpbjowO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdDtmb250LXN0eWxlOmluaGVyaXQ7Zm9udC12YXJpYW50OmluaGVyaXQ7dmVydGljYWwtYWxpZ246bWlkZGxlO30iLCJkaXYuIixsLmNsYXNzTmFtZSwiIHRkLnRpcC1iZy1pbWFnZSBzcGFue2Rpc3BsYXk6YmxvY2s7Zm9udDoxcHgvMXB4IHNhbnMtc2VyaWY7aGVpZ2h0OiIsbC5iZ0ltYWdlRnJhbWVTaXplLCJweDt3aWR0aDoiLGwuYmdJbWFnZUZyYW1lU2l6ZSwicHg7b3ZlcmZsb3c6aGlkZGVuO30iLCJkaXYuIixsLmNsYXNzTmFtZSwiIHRkLnRpcC1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCUgMDt9IiwiZGl2LiIsbC5jbGFzc05hbWUsIiB0ZC50aXAtYm90dG9te2JhY2tncm91bmQtcG9zaXRpb246MTAwJSAxMDAlO30iLCJkaXYuIixsLmNsYXNzTmFtZSwiIHRkLnRpcC1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246MCAxMDAlO30iLCJkaXYuIixsLmNsYXNzTmFtZSwiIGRpdi50aXAtaW5uZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotIixsLmJnSW1hZ2VGcmFtZVNpemUsInB4IC0iLGwuYmdJbWFnZUZyYW1lU2l6ZSwicHg7fSIsImRpdi4iLGwuY2xhc3NOYW1lLCIgZGl2LnRpcC1hcnJvd3t2aXNpYmlsaXR5OmhpZGRlbjtwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47Zm9udDoxcHgvMXB4IHNhbnMtc2VyaWY7fSIsIjwvc3R5bGU+Il0uam9pbigiIikpLmFwcGVuZFRvKCJoZWFkIil9aWYobC5saXZlRXZlbnRzJiZsLnNob3dPbiE9Im5vbmUiKXt2YXIgayxtPWYuZXh0ZW5kKHt9LGwse2xpdmVFdmVudHM6ZmFsc2V9KTtzd2l0Y2gobC5zaG93T24pe2Nhc2UiaG92ZXIiOms9ZnVuY3Rpb24oKXt2YXIgbz1mKHRoaXMpO2lmKCFvLmRhdGEoInBvc2h5dGlwIikpe28ucG9zaHl0aXAobSkucG9zaHl0aXAoIm1vdXNlZW50ZXIiKX19O3RoaXMubGl2ZT90aGlzLmxpdmUoIm1vdXNlZW50ZXIucG9zaHl0aXAiLGspOmYoZG9jdW1lbnQpLmRlbGVnYXRlKHRoaXMuc2VsZWN0b3IsIm1vdXNlZW50ZXIucG9zaHl0aXAiLGspO2JyZWFrO2Nhc2UiZm9jdXMiOms9ZnVuY3Rpb24oKXt2YXIgbz1mKHRoaXMpO2lmKCFvLmRhdGEoInBvc2h5dGlwIikpe28ucG9zaHl0aXAobSkucG9zaHl0aXAoInNob3dEZWxheWVkIil9fTt0aGlzLmxpdmU/dGhpcy5saXZlKCJmb2N1cy5wb3NoeXRpcCIsayk6Zihkb2N1bWVudCkuZGVsZWdhdGUodGhpcy5zZWxlY3RvciwiZm9jdXMucG9zaHl0aXAiLGspO2JyZWFrfXJldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuZXcgZi5Qb3NoeXRpcCh0aGlzLGwpfSl9O2YuZm4ucG9zaHl0aXAuZGVmYXVsdHM9e2NvbnRlbnQ6Ilt0aXRsZV0iLGNsYXNzTmFtZToidGlwLXllbGxvdyIsaWROYW1lOiIiLGJnSW1hZ2VGcmFtZVNpemU6MTAsc2hvd1RpbWVvdXQ6NTAwLGhpZGVUaW1lb3V0OjEwMCx0aW1lT25TY3JlZW46MCxzaG93T246ImhvdmVyIixsaXZlRXZlbnRzOmZhbHNlLGFsaWduVG86ImN1cnNvciIsYWxpZ25YOiJyaWdodCIsYWxpZ25ZOiJ0b3AiLG9mZnNldFg6LTIyLG9mZnNldFk6MTgsa2VlcEluVmlld3BvcnQ6dHJ1ZSxhbGxvd1RpcEhvdmVyOnRydWUsZm9sbG93Q3Vyc29yOmZhbHNlLGZhZGU6dHJ1ZSxzbGlkZTp0cnVlLHNsaWRlT2Zmc2V0Ojgsc2hvd0FuaUR1cmF0aW9uOjMwMCxoaWRlQW5pRHVyYXRpb246MzAwLHJlZnJlc2hBbmlEdXJhdGlvbjoyMDB9fSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-darkgray</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-darkgray/tip-darkgray.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LnRpcC1kYXJrZ3JheSB7CglvcGFjaXR5OjAuOTU7Cgl6LWluZGV4OjEwMDA7Cgl0ZXh0LWFsaWduOmxlZnQ7Cgl0ZXh0LXNoYWRvdzojNDQ0IDAgMXB4IDFweDsKCWJvcmRlcjoxcHggc29saWQgIzg4ODsKCXBhZGRpbmc6OHB4OwoJbWluLXdpZHRoOjUwcHg7CgltYXgtd2lkdGg6NTMwcHg7Cgljb2xvcjojZmZmOwoJYmFja2dyb3VuZC1jb2xvcjojOTk5OwoJYmFja2dyb3VuZC1pbWFnZTp1cmwodGlwLWRhcmtncmF5LnBuZyk7IC8qIGJnSW1hZ2VGcmFtZVNpemUgPj0gMTEgc2hvdWxkIHdvcmsgZmluZSAqLwoJLyoqCgkgKiAtIElmIHlvdSBzZXQgYSBiYWNrZ3JvdW5kLWltYWdlLCBib3JkZXIvcGFkZGluZy9iYWNrZ3JvdW5kLWNvbG9yIHdpbGwgYmUgaW5nbm9yZWQuCgkgKiAgIFlvdSBjYW4gc2V0IGFueSBwYWRkaW5nIHRvIC50aXAtaW5uZXIgaW5zdGVhZCBpZiB5b3UgbmVlZC4KCSAqIC0gSWYgeW91IHdhbnQgYSB0aWxlZCBiYWNrZ3JvdW5kLWltYWdlIGFuZCBib3JkZXIvcGFkZGluZyBmb3IgdGhlIHRpcCwKCSAqICAgc2V0IHRoZSBiYWNrZ3JvdW5kLWltYWdlIHRvIC50aXAtaW5uZXIgaW5zdGVhZC4KCSAqLwp9Ci50aXAtZGFya2dyYXkgLnRpcC1pbm5lciB7Cglmb250OmJvbGQgMTJweC8xOHB4IGFyaWFsLGhlbHZldGljYSxzYW5zLXNlcmlmOwoJbWFyZ2luLXRvcDotMXB4OwoJcGFkZGluZzowIDRweCAzcHggNHB4Owp9CgovKiBDb25maWd1cmUgYW4gYXJyb3cgaW1hZ2UgLSB0aGUgc2NyaXB0IHdpbGwgYXV0b21hdGljYWxseSBwb3NpdGlvbiBpdCBvbiB0aGUgY29ycmVjdCBzaWRlIG9mIHRoZSB0aXAgKi8KLnRpcC1kYXJrZ3JheSAudGlwLWFycm93LXRvcCB7CgltYXJnaW4tdG9wOi03cHg7CgltYXJnaW4tbGVmdDoxNXB4OwoJdG9wOjA7CglsZWZ0OjA7Cgl3aWR0aDoxNnB4OwoJaGVpZ2h0OjEwcHg7CgliYWNrZ3JvdW5kOnVybCh0aXAtZGFya2dyYXlfYXJyb3dzLnBuZykgbm8tcmVwZWF0Owp9Ci50aXAtZGFya2dyYXkgLnRpcC1hcnJvdy1yaWdodCB7CgltYXJnaW4tdG9wOi05cHg7IC8qIGFwcHJveC4gaGFsZiB0aGUgaGVpZ2h0IHRvIGNlbnRlciBpdCAqLwoJbWFyZ2luLWxlZnQ6LTdweDsKCXRvcDo1MCU7CglsZWZ0OjEwMCU7Cgl3aWR0aDoxMXB4OwoJaGVpZ2h0OjIxcHg7CgliYWNrZ3JvdW5kOnVybCh0aXAtZGFya2dyYXlfYXJyb3dzLnBuZykgbm8tcmVwZWF0IC0yMnB4IDA7Cn0KLnRpcC1kYXJrZ3JheSAudGlwLWFycm93LWJvdHRvbSB7CgltYXJnaW4tdG9wOi03cHg7CgltYXJnaW4tbGVmdDoxNXB4OwoJdG9wOjEwMCU7CglsZWZ0OjA7Cgl3aWR0aDoyMnB4OwoJaGVpZ2h0OjEzcHg7CgliYWNrZ3JvdW5kOnVybCh0aXAtZGFya2dyYXlfYXJyb3dzLnBuZykgbm8tcmVwZWF0IC00NHB4IDA7Cn0KLnRpcC1kYXJrZ3JheSAudGlwLWFycm93LWxlZnQgewoJbWFyZ2luLXRvcDotOXB4OyAvKiBhcHByb3guIGhhbGYgdGhlIGhlaWdodCB0byBjZW50ZXIgaXQgKi8KCW1hcmdpbi1sZWZ0Oi02cHg7Cgl0b3A6NTAlOwoJbGVmdDowOwoJd2lkdGg6MTFweDsKCWhlaWdodDoyMXB4OwoJYmFja2dyb3VuZDp1cmwodGlwLWRhcmtncmF5X2Fycm93cy5wbmcpIG5vLXJlcGVhdCAtNjZweCAwOwp9]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-darkgray/tip-darkgray.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAABAAAAAMACAYAAAC6uhUNAAAUFklEQVR42uzdPWwTZxzA4fd8tnNOHEjY+FpYQUHqUgkJVR1YGNsBqXOLVDJ07tyhc1UlldpOlTqwdIrEgNSFpWUDJUvFiGAjRXFix1/Xe81dOKHstaPnkV7Bnc8Mt/1/9/pIwumSU/5MAgAAALCQklOOZ+v27dvZxsbGV2mafpYkycfFubbbBQAAAHNnmOf535PJ5I/nz5//8uTJk0FxLo9rMBjkpwWAavhvbG5u3m+321tXrlwJ6+vrYWlpKRT/mFsKAAAAcyZJknB8fBz29/fDy5cvw3A43Nza2vq5+GhajwAfbvFPHzx48HW32/3h+vXrYTQaheLCMB6PBQAAAACY0wDQbDZDlmWh1WqFvb290Ov1vtne3v6p+HhSRYAqADTiunHjxsqdO3f+vXnzZrx4VhAM/gAAALAYISDu4O92u+HZs2fh8ePHa7u7u4fFR9PBYDBthvdP/5u3bt26f/ny5dDv98PR0ZHhHwAAABbIZDIJaZqGONvHGX93d/fH4vQoy7KkWV4TdwCk7Xb78/Pnz4e3b9/Otv0DAAAAi+Xw8DDE2T7O+MXhdnj3M4CTHQAxADTTNP2oennAdDp11wAAAGDBxJk+zvZxxo+zfrHiE/6THQCzFwAWqxVf/DccDt0xAAAAWFBxto8zfjnrz97/V98BEE/Ofvfv6T8AAAAsrto7/dJy5k/qLwFsCAAAAABwpgJAo5r7G+WJKgIAAAAAZ8fJvN9wLwAAAODsEwAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABwC0AAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAcAsAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAA3AIAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAgDMUAEaNRiPEBQAAACzgoF/O9XmeH50WAPK4RqPRXjxotVruGAAAACygaqYfj8f/VPN+FQCqg2mv19s5ODgIy8vLIUkSdw0AAAAWSJzl40wfZ/s448dZv5r76wFgsrOz89urV6/CuXPnQqfTEQEAAABggYb/OMvHmT7O9nHGj7N+FQHSeE14txMg7ff7ybVr1w7H4/EnV69enX05z/OTBQAAAMyX+Hv/drsdVldXw4ULF8KLFy/C69evv3v69OlfxcfHxRrHCJCUAaBZrHaxlou1eu/evS8vXrz47aVLl8LKykpI0zRMJhN3FQAAAOZMnNmn02nc8j978l8M/98/fPjw1+Kjg2LFFwEOYwSoAkDcARDfErBURoBuYf3u3btfrK2tfdrpdDbcUgAAAJhPg8Fg982bN38+evTo916vt1+c6pXDf9wBMApxB0BxUciyrPFBBOjUVjyOuwOqnwt4MQAAAAD8/07e6RfePeWPw36/tk6G/2L2nzZrX4ovBRjXjsflxTEKNAUAAAAAmNsAMC6H/WFtjcP7/wVgNtjHrQJ5lmWh/FJeCwDDcvCPq2H4BwAAgLmLANNynq9CwKQ+/MeZP144+wlAJcuy6gl/9V6ARm3w9/QfAAAA5i8A5LUQUK28PvxHzfq3yg/yMgRMawO/4R8AAADmOwJUfw/1wb/ynwADAIQOhKi66xJnAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-darkgray/tip-darkgray_arrows.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAFgAAAAVCAYAAADCUymGAAAEtElEQVR42tSY3WvkVBjGk3TcftGWfoDglfSiF973RgRBlBX/EMGuF7p1p8z0ux1pu6VsP7Ydu1hb6FZUVITVVRD8L7zpVWGpovSDttPOTJpJfJ7sOcMxm0wnybTMHnhJcpLz5jm/vOec90R3HEfzFh2Fx8HBwVs8LiwsmDw6fg8HlLW1NWd3d1fr6en5aHR09JGodsL48CuQZkDXa729vc94fXJyop2fn4fy0draqnV0dLjne3t7r8/Pzz+DLDuAg8tienr6w4ODg2xfX582MDCgV/suw+uQHWD9xMTEbcuyCrTJyckPWMd7Ev5V5fj4WKMYipqamvpEvEuvtn2lgg/+L8ogPyBBEVhYuGwLH0nA/TvgQ0q4BvVLuOxXmGL4OUTE3YajX/v7+zXa0dHRz6wLAymfz5chHx4eLuAjJVGdEB8qDmRXJ/x92dTU9JkK2TCMSpH/P7jNzc1p+FiX/nzg0lmCuqlfwmW/QgNW4DakUqn3Tk9PfyHYQqHgGs9Zl06n3+czUSDjI32OUTEs2hs1iGRnbm7uMYZ2SkJuaWnxhcw63pNw8erh2dnZrypELp00UC91R4WrKR2VcN+9uLh4SqB0hvOysQ5z3RM+ExUyjmMQPSYhRwWrWGl5efkbBEGa4Nrb21+A7IVrmub44uLi12wLsxVfXrhj1BsHroxgF+7Q0NA7KlyabduuMYp5zXt8RoVczUvYHpEgIQ9DfEa0j1psAciCmevr6z9ghI1KyHK6kHBZx3u5XG48m81+yzairYTshZuhTjHyXP1Ri+swmUy+DSe/eeGWe4NzWe8D+eqQQ+JQLBY5F0vI99CJmRgRLAFfwoocKJubmz8ChhvJbW1tZZNwkW2Mb2xsfM9nRZtLTxTrAu4M9Ym1w9UdJ/ExAPctOPk9CG4lyIz6qqm8CPluJLrPe+vI6OUAgTFPO9ve3v4Jq7278DGKaTxHdI9tbW0R7pl4tiAAW0rqaKA/b1JXreC6gOHkj6vgBkFm1IfMYbUaZGkq5JIX8s7OzhNAvkOwAu49RPd3uHeqwDU9cF0W6I9Za60JCbfaZJ2Q5bNsGwZuY2Oj1tXVpYkIexAXsgBQ8kwfJUB+2t3d/QbSuIb9/f2c8hEKytTg3fToS0tLfyJTegB9n8r5N24U63GHQFAZGRlxguAmEomH2CzM4N1/xX2PmgWJPPsVYXJ9KCnTQRBc+mnEoYl7EewUU9hgfRwEOZPJRNvJXVdBJJXhQmgWcJc9kVer6aK86Inp4EJZ1MwguGr006iPOqmXuqk/ThZxrQU7Jq2zs9OFi6jIIm99qAxVrcaQbWXxMxWwlswWKvwLUTOTAnVSL3VTP/tRd4A9cFdWV1fXRGTlRce1WkLmDxtYCWbBLoVZos6+4keTrSya7gigXuqOA9m4CbhYGO8LuGeelbyeim9WQt3UHxXytQGWcLneraysfIFjzgO3VFd0n0e37QM5J/SPSMh1kUUoq/Orytx4qcC1net+efSsxBBZyC2Rkbh/ASH3n9B58A1oziuRUfJJ8LV6i2QwlttnmeZF/jl1E4CLygpv1zNcn02MpQSHXq+ALSUa6h6uD2QZGJEA6y9Jf1/a8p8AAwCbD7sSFgG7XQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-green</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-green/tip-green.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LnRpcC1ncmVlbiB7Cgl6LWluZGV4OjEwMDA7Cgl0ZXh0LWFsaWduOmxlZnQ7Cglib3JkZXI6MXB4IHNvbGlkICNiZGRlOTg7CglwYWRkaW5nOjdweCAxMHB4OwoJbWluLXdpZHRoOjUwcHg7CgltYXgtd2lkdGg6MzAwcHg7Cgljb2xvcjojODYwNDA0OwoJYmFja2dyb3VuZC1jb2xvcjojZGZmNmM2OwoJLyoqCgkgKiAtIElmIHlvdSBzZXQgYSBiYWNrZ3JvdW5kLWltYWdlLCBib3JkZXIvcGFkZGluZy9iYWNrZ3JvdW5kLWNvbG9yIHdpbGwgYmUgaW5nbm9yZWQuCgkgKiAgIFlvdSBjYW4gc2V0IGFueSBwYWRkaW5nIHRvIC50aXAtaW5uZXIgaW5zdGVhZCBpZiB5b3UgbmVlZC4KCSAqIC0gSWYgeW91IHdhbnQgYSB0aWxlZCBiYWNrZ3JvdW5kLWltYWdlIGFuZCBib3JkZXIvcGFkZGluZyBmb3IgdGhlIHRpcCwKCSAqICAgc2V0IHRoZSBiYWNrZ3JvdW5kLWltYWdlIHRvIC50aXAtaW5uZXIgaW5zdGVhZC4KCSAqLwp9Ci50aXAtZ3JlZW4gLnRpcC1pbm5lciB7Cglmb250OmJvbGQgMTJweC8xNHB4IGFyaWFsLGhlbHZldGljYSxzYW5zLXNlcmlmOwp9CgovKiBDb25maWd1cmUgYW4gYXJyb3cgaW1hZ2UgLSB0aGUgc2NyaXB0IHdpbGwgYXV0b21hdGljYWxseSBwb3NpdGlvbiBpdCBvbiB0aGUgY29ycmVjdCBzaWRlIG9mIHRoZSB0aXAgKi8KLnRpcC1ncmVlbiAudGlwLWFycm93LXRvcCB7CgltYXJnaW4tdG9wOi0xMHB4OwoJbWFyZ2luLWxlZnQ6NnB4OwoJdG9wOjA7CglsZWZ0OjA7Cgl3aWR0aDoxMHB4OwoJaGVpZ2h0OjEwcHg7CgliYWNrZ3JvdW5kOnVybCh0aXAtZ3JlZW5fYXJyb3dzLmdpZikgbm8tcmVwZWF0Owp9Ci50aXAtZ3JlZW4gLnRpcC1hcnJvdy1yaWdodCB7CgltYXJnaW4tdG9wOjZweDsKCW1hcmdpbi1sZWZ0OjA7Cgl0b3A6MDsKCWxlZnQ6MTAwJTsKCXdpZHRoOjEwcHg7CgloZWlnaHQ6MTBweDsKCWJhY2tncm91bmQ6dXJsKHRpcC1ncmVlbl9hcnJvd3MuZ2lmKSBuby1yZXBlYXQgLTEwcHggMDsKfQoudGlwLWdyZWVuIC50aXAtYXJyb3ctYm90dG9tIHsKCW1hcmdpbi10b3A6MDsKCW1hcmdpbi1sZWZ0OjZweDsKCXRvcDoxMDAlOwoJbGVmdDowOwoJd2lkdGg6MTBweDsKCWhlaWdodDoxMHB4OwoJYmFja2dyb3VuZDp1cmwodGlwLWdyZWVuX2Fycm93cy5naWYpIG5vLXJlcGVhdCAtMjBweCAwOwp9Ci50aXAtZ3JlZW4gLnRpcC1hcnJvdy1sZWZ0IHsKCW1hcmdpbi10b3A6NnB4OwoJbWFyZ2luLWxlZnQ6LTEwcHg7Cgl0b3A6MDsKCWxlZnQ6MDsKCXdpZHRoOjEwcHg7CgloZWlnaHQ6MTBweDsKCWJhY2tncm91bmQ6dXJsKHRpcC1ncmVlbl9hcnJvd3MuZ2lmKSBuby1yZXBlYXQgLTMwcHggMDsKfQ==]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-green/tip-green_arrows.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhKAAKAJECAN/2xr3emP///wAAACH5BAEAAAIALAAAAAAoAAoAAAJHjI4Yyx0AI3R0pSSleRkYwXXPd3XeEUYkaHLrISrZy85qqSUpjdo3ktP9LjLVDDghuohK41GQbPKYrhZ0amFqRybPFKQNgwoAOw==]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-skyblue</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-skyblue/tip-skyblue.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LnRpcC1za3libHVlIHsKCXotaW5kZXg6MTAwMDsKCXRleHQtYWxpZ246bGVmdDsKCXBhZGRpbmc6OHB4IDEwcHg7CgltaW4td2lkdGg6NTBweDsKCW1heC13aWR0aDozMDBweDsKCWNvbG9yOiMzNzM1NmM7CgliYWNrZ3JvdW5kLWNvbG9yOiNiOWYzZjg7CgliYWNrZ3JvdW5kLWltYWdlOnVybCh0aXAtc2t5Ymx1ZS5wbmcpOyAvKiBiZ0ltYWdlRnJhbWVTaXplID09IDkgd29ya3MgZmluZSAqLwoJLyoqCgkgKiAtIElmIHlvdSBzZXQgYSBiYWNrZ3JvdW5kLWltYWdlLCBib3JkZXIvcGFkZGluZy9iYWNrZ3JvdW5kLWNvbG9yIHdpbGwgYmUgaW5nbm9yZWQuCgkgKiAgIFlvdSBjYW4gc2V0IGFueSBwYWRkaW5nIHRvIC50aXAtaW5uZXIgaW5zdGVhZCBpZiB5b3UgbmVlZC4KCSAqIC0gSWYgeW91IHdhbnQgYSB0aWxlZCBiYWNrZ3JvdW5kLWltYWdlIGFuZCBib3JkZXIvcGFkZGluZyBmb3IgdGhlIHRpcCwKCSAqICAgc2V0IHRoZSBiYWNrZ3JvdW5kLWltYWdlIHRvIC50aXAtaW5uZXIgaW5zdGVhZC4KCSAqLwp9Ci50aXAtc2t5Ymx1ZSAudGlwLWlubmVyIHsKCWZvbnQ6Ym9sZCAxM3B4LzE1cHggJ3RyZWJ1Y2hldCBtcycsYXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWY7CglwYWRkaW5nOjAgM3B4IDFweCAzcHg7Cn0KCi8qIENvbmZpZ3VyZSBhbiBhcnJvdyBpbWFnZSAtIHRoZSBzY3JpcHQgd2lsbCBhdXRvbWF0aWNhbGx5IHBvc2l0aW9uIGl0IG9uIHRoZSBjb3JyZWN0IHNpZGUgb2YgdGhlIHRpcCAqLwoudGlwLXNreWJsdWUgLnRpcC1hcnJvdy10b3AgewoJbWFyZ2luLXRvcDotMTJweDsKCW1hcmdpbi1sZWZ0OjA7Cgl0b3A6MDsKCWxlZnQ6MDsKCXdpZHRoOjExcHg7CgloZWlnaHQ6MTlweDsKCWJhY2tncm91bmQ6dXJsKHRpcC1za3libHVlX2Fycm93cy5wbmcpIG5vLXJlcGVhdDsKfQoudGlwLXNreWJsdWUgLnRpcC1hcnJvdy1yaWdodCB7CgltYXJnaW4tdG9wOjA7CgltYXJnaW4tbGVmdDotN3B4OwoJdG9wOjA7CglsZWZ0OjEwMCU7Cgl3aWR0aDoxOHB4OwoJaGVpZ2h0OjEzcHg7CgliYWNrZ3JvdW5kOnVybCh0aXAtc2t5Ymx1ZV9hcnJvd3MucG5nKSBuby1yZXBlYXQgLTIwcHggMDsKfQoudGlwLXNreWJsdWUgLnRpcC1hcnJvdy1ib3R0b20gewoJbWFyZ2luLXRvcDotOHB4OwoJbWFyZ2luLWxlZnQ6MDsKCXRvcDoxMDAlOwoJbGVmdDowOwoJd2lkdGg6MTFweDsKCWhlaWdodDoyMHB4OwoJYmFja2dyb3VuZDp1cmwodGlwLXNreWJsdWVfYXJyb3dzLnBuZykgbm8tcmVwZWF0IC00MHB4IDA7Cn0KLnRpcC1za3libHVlIC50aXAtYXJyb3ctbGVmdCB7CgltYXJnaW4tdG9wOjA7CgltYXJnaW4tbGVmdDotMTFweDsKCXRvcDowOwoJbGVmdDowOwoJd2lkdGg6MThweDsKCWhlaWdodDoxM3B4OwoJYmFja2dyb3VuZDp1cmwodGlwLXNreWJsdWVfYXJyb3dzLnBuZykgbm8tcmVwZWF0IC02MHB4IDA7Cn0=]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-skyblue/tip-skyblue.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAABAAAAAMACAYAAAC6uhUNAAASQElEQVR42uzcv0uUcRzAcR/v6UTTzn5QQ0MURFEEQSBORh1EYQQ1NbS4CNEmNAQNDUFD0FpU4NLQVFARSVLUFFFUW02ZUGuZP9LT5759H8mQ/gF7Hl8v+HD3IOjdB4X7vjkvaVlmtLHQGW+G4hyN0xOn0gIAAAAURRbndZwnca7V11Smlr6QLN0ZmZ0/GG+G42y3LwAAACi8z3EGjrSlL/4GgMczcyfjzT27AQAAgNI5day9ej95ODW7IV58idNpJwAAAFA6+b8BbEuzZhhy+AcAAIDSWvy8vzQLod8uAAAAoNT683cA7LEHAAAAKK8Qwo48AFStAgAAAEptXdoMwRoAAACg5AQAAAAAWAVarQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAHACgAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEACsAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAEibzeZk0traZRUAAABQTiGE6TSbnx9Pq9W91gEAAADllDUaY+nM5M/Rro2bBAAAAAAoqfzsX+modY/t7OkdiNdVKwEAAIByyd/+//TWjcEk3u+6/PLV6a27dt+0FgAAACiXr58+Dl7s671bifcXng3f/rbvcP1NbfOWniRJatYDAAAAxdbMsvGxD+/OXar3jcTL70kIoSUe+tvjxfoDx0+sPXPl6tmOWu1QWm3bb10AAABQLAuNufczExPP71w4f/3towfT+eE/nv1/LQaAXJIkbfGmO07Fulad/F9BgjXAivztFfF7/88/uwiPx3PiX8FzKvXjCX53gBWUxfkRz/1ziy8glgLAnwiQv6DojJPHAB8KKAAAAoAAIAAgAAgAAgBQPI04+aF/Kiw79P8WYADSeKJ84HmXQwAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-skyblue/tip-skyblue_arrows.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAFAAAAAUCAYAAAAa2LrXAAADR0lEQVR42uyXW0gUURjHZ9z1VlgmBqsPgj0WKXZBukCFWlEQvUSQ9WZSEBQFERn4EpEPPdhj+BC0L4kgFEIJZpmYdiPtggmu+JDrrpfZdr2suzvn9P903Ax2Z8+Os8M+9C0/ZpmdPef//ec7N7mX8e0HZOmHZFJ0hVVu8K+T4CnoBWNVmbZPdPPJlF+4vQtbN8kC+nbjUgoOgrPAYUQs9C33ZQeHgWkGqixp/76CO0ez7c9i/cglc0N7MUQbuNa5FDmF612w00h7GVzip80UqDImRERVg9Nud9O50pKTx3IyP8qy7ACbQS7IjBrIuTAiQW1rfVBfDuqbNJAW0iSqfzVQgfJecw0USkR1DQ1evrq/shPfwyAAA4JWVCD6CWt9LoLfMDFnxu3Oqy0tedjcNzC8ray8BfdtwhWIgZz/lvFiMw1MxK/R0dsw76Vm3FQ881JRgTHaD5IG0kKaSJtIDlEDtetj0wxEInrMBfztl8p3OPGoAuGBhAkmwTork7QopI00JsrjHwNRxtU9jBdYUIHqi5YWmrB9elWXRAW+AzdALdhjwvAmTT7SSFpFKtC+bCB5KEnf8LU4lXNgKLjY42xsGIPQBeGkYt/uAPfrHFt6JfPnyAUU1FhNXX1PVk7ukYRz4N/JUC56o7LO9QpgqIx4+LzeLjziTzKhKIyx4MTIzysXiwrqgQuJFoKNIAvYTPTRT1r1clm7jYl+bBlyDUwcTJWBisfzHkaoRlfP8cEvdY2H9rVrK+g07hHzIGS03Th9qaRVyEAacWvBmyx7rbKl7oj6wOzhobgnRpJORsPnmWy6d6L6lTZ/0gIUklIYolrlbp2j1/KCI/EhXGnL8bwqy9aXqEHndIDrHLWyk038kXuWR8Kh7w2Vu477Jt205VmSLAiaFnCMjNvX+cK8laOcqr9/onmlAqtMBa63VtabdUXEyJ+8LlczzPNZZV4yWu0Gzq66sfpmYv5mYLPLGZtx3rzeAfPmLDSP5kEmUjD2tee6dIzFgL9j9MPAbLrqM70CzY45RekX3XT/NzDWhszr+ZzO+jISnflinf+sjP621uF0NlBuVeaFnTmTv0G2XKAs2zGEI2lrIOfpPYRhIGlMW5F/BBgAXhxcfUwLg1QAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-twitter</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-twitter/tip-twitter.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LnRpcC10d2l0dGVyIHsKCW9wYWNpdHk6MC44OwoJei1pbmRleDoxMDAwOwoJdGV4dC1hbGlnbjpsZWZ0OwoJYm9yZGVyLXJhZGl1czo0cHg7CgktbW96LWJvcmRlci1yYWRpdXM6NHB4OwoJLXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDsKCXBhZGRpbmc6OHB4IDhweDsKCW1heC13aWR0aDoyMDBweDsKCWNvbG9yOiNmZmY7CgliYWNrZ3JvdW5kLWNvbG9yOiMwMDA7CgkvKioKCSAqIC0gSWYgeW91IHNldCBhIGJhY2tncm91bmQtaW1hZ2UsIGJvcmRlci9wYWRkaW5nL2JhY2tncm91bmQtY29sb3Igd2lsbCBiZSBpbmdub3JlZC4KCSAqICAgWW91IGNhbiBzZXQgYW55IHBhZGRpbmcgdG8gLnRpcC1pbm5lciBpbnN0ZWFkIGlmIHlvdSBuZWVkLgoJICogLSBJZiB5b3Ugd2FudCBhIHRpbGVkIGJhY2tncm91bmQtaW1hZ2UgYW5kIGJvcmRlci9wYWRkaW5nIGZvciB0aGUgdGlwLAoJICogICBzZXQgdGhlIGJhY2tncm91bmQtaW1hZ2UgdG8gLnRpcC1pbm5lciBpbnN0ZWFkLgoJICovCn0KLnRpcC10d2l0dGVyIC50aXAtaW5uZXIgewoJZm9udDpib2xkIDExcHgvMTRweCAnTHVjaWRhIEdyYW5kZScsc2Fucy1zZXJpZjsKfQoKLyogQ29uZmlndXJlIGFuIGFycm93IGltYWdlIC0gdGhlIHNjcmlwdCB3aWxsIGF1dG9tYXRpY2FsbHkgcG9zaXRpb24gaXQgb24gdGhlIGNvcnJlY3Qgc2lkZSBvZiB0aGUgdGlwICovCi50aXAtdHdpdHRlciAudGlwLWFycm93LXRvcCB7CgltYXJnaW4tdG9wOi01cHg7CgltYXJnaW4tbGVmdDotNXB4OyAvKiBhcHByb3guIGhhbGYgdGhlIHdpZHRoIHRvIGNlbnRlciBpdCAqLwoJdG9wOjA7CglsZWZ0OjUwJTsKCXdpZHRoOjlweDsKCWhlaWdodDo1cHg7CgliYWNrZ3JvdW5kOnVybCh0aXAtdHdpdHRlcl9hcnJvd3MuZ2lmKSBuby1yZXBlYXQ7Cn0KLnRpcC10d2l0dGVyIC50aXAtYXJyb3ctcmlnaHQgewoJbWFyZ2luLXRvcDotNHB4OyAvKiBhcHByb3guIGhhbGYgdGhlIGhlaWdodCB0byBjZW50ZXIgaXQgKi8KCW1hcmdpbi1sZWZ0OjA7Cgl0b3A6NTAlOwoJbGVmdDoxMDAlOwoJd2lkdGg6NXB4OwoJaGVpZ2h0OjlweDsKCWJhY2tncm91bmQ6dXJsKHRpcC10d2l0dGVyX2Fycm93cy5naWYpIG5vLXJlcGVhdCAtOXB4IDA7Cn0KLnRpcC10d2l0dGVyIC50aXAtYXJyb3ctYm90dG9tIHsKCW1hcmdpbi10b3A6MDsKCW1hcmdpbi1sZWZ0Oi01cHg7IC8qIGFwcHJveC4gaGFsZiB0aGUgd2lkdGggdG8gY2VudGVyIGl0ICovCgl0b3A6MTAwJTsKCWxlZnQ6NTAlOwoJd2lkdGg6OXB4OwoJaGVpZ2h0OjVweDsKCWJhY2tncm91bmQ6dXJsKHRpcC10d2l0dGVyX2Fycm93cy5naWYpIG5vLXJlcGVhdCAtMThweCAwOwp9Ci50aXAtdHdpdHRlciAudGlwLWFycm93LWxlZnQgewoJbWFyZ2luLXRvcDotNHB4OyAvKiBhcHByb3guIGhhbGYgdGhlIGhlaWdodCB0byBjZW50ZXIgaXQgKi8KCW1hcmdpbi1sZWZ0Oi01cHg7Cgl0b3A6NTAlOwoJbGVmdDowOwoJd2lkdGg6NXB4OwoJaGVpZ2h0OjlweDsKCWJhY2tncm91bmQ6dXJsKHRpcC10d2l0dGVyX2Fycm93cy5naWYpIG5vLXJlcGVhdCAtMjdweCAwOwp9]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-twitter/tip-twitter_arrows.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhJAAJAIABAAAAAP///yH5BAEAAAEALAAAAAAkAAkAAAIujAOHquD/GjORpomga5fXOmkeo20QlnWpWraqdIio986rHW84qeP9zgHWgBRFAQA7]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-violet</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-violet/tip-violet.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LnRpcC12aW9sZXQgewoJei1pbmRleDoxMDAwOwoJdGV4dC1hbGlnbjpsZWZ0OwoJYm9yZGVyOjFweCBzb2xpZCAjYWZhZmFmOwoJcGFkZGluZzo3cHg7CgltaW4td2lkdGg6NTBweDsKCW1heC13aWR0aDo1MzBweDsKCWNvbG9yOiM4NjA0MDQ7CgliYWNrZ3JvdW5kLWNvbG9yOiNmMmU3ZmQ7CgliYWNrZ3JvdW5kLWltYWdlOnVybCh0aXAtdmlvbGV0LnBuZyk7IC8qIGJnSW1hZ2VGcmFtZVNpemUgPj0gOSBzaG91bGQgd29yayBmaW5lICovCgkvKioKCSAqIC0gSWYgeW91IHNldCBhIGJhY2tncm91bmQtaW1hZ2UsIGJvcmRlci9wYWRkaW5nL2JhY2tncm91bmQtY29sb3Igd2lsbCBiZSBpbmdub3JlZC4KCSAqICAgWW91IGNhbiBzZXQgYW55IHBhZGRpbmcgdG8gLnRpcC1pbm5lciBpbnN0ZWFkIGlmIHlvdSBuZWVkLgoJICogLSBJZiB5b3Ugd2FudCBhIHRpbGVkIGJhY2tncm91bmQtaW1hZ2UgYW5kIGJvcmRlci9wYWRkaW5nIGZvciB0aGUgdGlwLAoJICogICBzZXQgdGhlIGJhY2tncm91bmQtaW1hZ2UgdG8gLnRpcC1pbm5lciBpbnN0ZWFkLgoJICovCn0KLnRpcC12aW9sZXQgLnRpcC1pbm5lciB7Cglmb250OmJvbGQgMTJweC8xOHB4ICd0cmVidWNoZXQgbXMnLGFyaWFsLGhlbHZldGljYSxzYW5zLXNlcmlmOwoJbWFyZ2luLXRvcDotMXB4OwoJcGFkZGluZzowIDNweCAycHggM3B4Owp9CgovKiBDb25maWd1cmUgYW4gYXJyb3cgaW1hZ2UgLSB0aGUgc2NyaXB0IHdpbGwgYXV0b21hdGljYWxseSBwb3NpdGlvbiBpdCBvbiB0aGUgY29ycmVjdCBzaWRlIG9mIHRoZSB0aXAgKi8KLnRpcC12aW9sZXQgLnRpcC1hcnJvdy10b3AgewoJbWFyZ2luLXRvcDotN3B4OwoJbWFyZ2luLWxlZnQ6MTVweDsKCXRvcDowOwoJbGVmdDowOwoJd2lkdGg6MTZweDsKCWhlaWdodDoxMHB4OwoJYmFja2dyb3VuZDp1cmwodGlwLXZpb2xldF9hcnJvd3MucG5nKSBuby1yZXBlYXQ7Cn0KLnRpcC12aW9sZXQgLnRpcC1hcnJvdy1yaWdodCB7CgltYXJnaW4tdG9wOi05cHg7IC8qIGFwcHJveC4gaGFsZiB0aGUgaGVpZ2h0IHRvIGNlbnRlciBpdCAqLwoJbWFyZ2luLWxlZnQ6LTRweDsKCXRvcDo1MCU7CglsZWZ0OjEwMCU7Cgl3aWR0aDoxMHB4OwoJaGVpZ2h0OjIwcHg7CgliYWNrZ3JvdW5kOnVybCh0aXAtdmlvbGV0X2Fycm93cy5wbmcpIG5vLXJlcGVhdCAtMTZweCAwOwp9Ci50aXAtdmlvbGV0IC50aXAtYXJyb3ctYm90dG9tIHsKCW1hcmdpbi10b3A6LTZweDsKCW1hcmdpbi1sZWZ0OjE1cHg7Cgl0b3A6MTAwJTsKCWxlZnQ6MDsKCXdpZHRoOjE2cHg7CgloZWlnaHQ6MTNweDsKCWJhY2tncm91bmQ6dXJsKHRpcC12aW9sZXRfYXJyb3dzLnBuZykgbm8tcmVwZWF0IC0zMnB4IDA7Cn0KLnRpcC12aW9sZXQgLnRpcC1hcnJvdy1sZWZ0IHsKCW1hcmdpbi10b3A6LTlweDsgLyogYXBwcm94LiBoYWxmIHRoZSBoZWlnaHQgdG8gY2VudGVyIGl0ICovCgltYXJnaW4tbGVmdDotNnB4OwoJdG9wOjUwJTsKCWxlZnQ6MDsKCXdpZHRoOjEwcHg7CgloZWlnaHQ6MjBweDsKCWJhY2tncm91bmQ6dXJsKHRpcC12aW9sZXRfYXJyb3dzLnBuZykgbm8tcmVwZWF0IC00OHB4IDA7Cn0=]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-violet/tip-violet.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAABAAAAAMACAYAAAC6uhUNAAAS+0lEQVR42uzdzWqcVRjA8XPmIx82tLbNzlxAlEZwqyKF4MJtFoHgOmC9giCIiCC5AhGycSOBLHIBtQuhRJcFUzQXkKxiTKyxmWQ+judM3onThQt3ecPvB0/mc3V2z3/emcTwqri1tfWw1Wp9EmN8Lz9+IwAAAAB1cZBS2un1et8uLy//mO+nq4V/7E2N7e3tr6anpz9beLAQ7r5+P0xNToXk8AAAAODaKwt+57wTjk+Owu7z3XB2dvb10tLS5ymlwXgAaGxubi7Ozs4+fv/dD0IjtUN5Odn+AQAAoD4RIG/5sRHCIHbDzs9Pw+Hh4UcrKyuPSwRoVRGg0W63H705/1ZI563Q7dn8AQAAoK4arVYoO/7JyU+P8sMnMcZ0FQCyxXt3ZkP/pU/+AQAAoM7KVf13b8+WZX+x7Px5Bo0qADRjjLebsW35BwAAgLoHgFQW/VbIu/6tsvOHy28GXAaA4RucEQAAANyMCPDv3asAEMKr/w0AAAAAuDkaoz9RAAAAAIAb7eoKAAAAAOAGEwAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABwBEAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAACAAOAIAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQARwAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAAIAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAAIAAAAACAAAAAAAAIAAAAAIAAAAAAAAgAAAAAgAAAAAAACAAAAACAAAAAAAP8rAETnAQAAADdC/K8AkFL6q5+6IaoAAAAAUO/lP+/2/dQru/7f4wEglel0OjvHL45Co+WgAAAAoM7Kbn/84veQd/2n1VNpdAVAOjg4+O63vV9DnOiGZjuE6NcBAAAAoFbKLj/c6fNuX3b8suvnpwfD1/I080zkubWxsfHl3NzcpwsP3g53Zu6FifZkSMkBAgAAwLVf/vOGf9E9D3+e/hF2n/8S9vf3v1ldXf0iv1S+BnBRAkD5rL9c+D+dZ2Ztbe3D+fn5j2dmZt5pNpv3HSEAAADUQ7/fPzo9PX22t7f3/fr6+g/5qdM8Z3l6JQCMrgJo55nK81p1O1mFgdF7AAAAgOspVdPLc56nk+dlddstbaCVshjjoHpiGAyqN7eqMCAAAAAAQD0CQL+KABfVnl9mMNz9U/Ul/xiHP/s3mqblHwAAAGobAcoMquX/8kcA09iv/MUY49jSP1r8BQAAAACoRwAYDwHlg/+rpf8fAQYAkrTmxQRZFZUAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-violet/tip-violet_arrows.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAEAAAAAUCAYAAAA9djs/AAAFSElEQVR42sRXXUgjVxQ+k59JjFptqq5K8c13qeZHpZR2Cy2FLoKlamGh2naRKpSt7VbrIuK7+lh3kdIK1r+KSrFLobKUuhpj9UH8Ax981MVdN/4kcZLMTM9J7liNM3FSXb1wJGbume/nnnvuDSfLMqiN8fHx9w0GwyN6jvFmRUXFtNo84VCW//zrdxAEoa6ysvInWeuFGoPyRUEGMQxJDaMZw8KBJY3j1J5zOEZHRz+1WCw/vvvWB5rzDBrib5F4p9MJxcXF9LK/8bt31OaKIRnKysqAgBDwNs41JCPk8fQfIPL+qKBkxEuWQDRXQ7yBuBAn4kYctYZBRfxHRqNxwuVyQU52LuTnvQ6OEgegIVNUFWcNALDIGeAqKQWz2fzz8PBwNbmvV8z+/v7d6elpOJL2YyYkyuRi4gU4BMrx+Xzfqq08cSAuxIm4EUddBqDAT1D8iNvlhqxXc0AKy9G4kZ0HDoeTTHhE1aFmgs2cCS5HKVit1v6hoaFKvSZUVVU93N7e/tozP4Mm7IHRpGECicdnZJTH+wQwp7mmpuaHePGETRyIC3FKJP6UASjstslk6i91l0FmehZEMFGMxII+Z2XeAJfTBVQdVCVnTMA9nMa/Bs4SF5kwMjg4+KFeE+rq6vo2Nzfvzcw9AX/kxdlKOBa/B2QUzm2pra3txSfySfGESdjEgbjo6SsGJv4zLJm+UlcZpKfYISLgHoucDjIhMy0HTXCTCSNk2Kk3yWSCDOmWbNwyTkhJSZkYGBh4T4cJIkaksbGxf3V19RuPdwYOQs/RBC5mAiv7QMQHs/hsfX39fkNDQx/lYEiKeMIiTMImDsQFdLRjbmxs7A7P8w/cTiqZDJBE0E5EMgZcCb/gwzKchXA4/PlN963e+DkmnoNd/zYsLM5DIBC4iaX6WOt0QO603hQpGKkdHR2VRUVFXSQkw5oTnXMY2oW5+VlYWVlpaW5u/gW/8mMEMWiNIyj+bZvNNlX8hgPsqbm4WGfFp+ca1E8B7JQPysvLY+IjkNg1fCYhZCqfCZSDxvWqzaGua0/LjZ4guCpT1dXV5nMqIMQEHba1tY0uLi42eufnYE94CoeRZ0BVsbS09J2KeJHeTRiERZhiSN/KHxsQPcIgPbbyOgcZZeVeiZqg4VP0D24VWmE6IjUNwMKQWCkfm9De3j6xsLDwhdfrBY/HA8vLy1+1trYO0DM2h+aKlEvvJgzCguS0xyow6BPl6Mr/j0HbIRxUO6o4OBB2sGw9sLW1VVVfXz+OZBP2Y9YrjGw7WDEsBQUFqTiMa2trB/j/Ed2bmHiJGUd5fE9PT0VeXt6Qy+HW3P9aW4BL8uJ2ZhxsS3L8Oa3s2Y2NjTtNTU3DtGrnGRBngulEKNskrDQ+RbxiAPWPzs7OjwsLCx/S8ZfG22MngKyjB8BlDXZU+cMvouKxo99F8b8x8rpcZo1SESuwcg+y1Q8rZa+y40TCIkzCJg6a94mXZQABBsU98P7joW59DxvWr0zE8XGVhAkSywvHrbyakcpcgTAJmzgQF6Ppigww8v9dUpDA/ZaWliH8OsBWLikDFBPYkFjICX5kKQYQVoCwicPxzZI/H+xC4X8uyjs7O/Lk5KTc1dX1Pb6yAMPOznWT0mdeZrBiNzFMwi4gLsSJuBFHzdyLgh8dSFHx3d3dXyJwPiNguyrxKibYGId84kTciKNW3oVPgRPd2H6igYXiu/VVDPZTnIJnx6kROewmyjFdIn6Q7UfxOsQrlyr20yPEeJzb4y7TgLDS7K5DvIoJkh4DDJeILbIGfm3i467Xyp0i4fhXgAEAYEXoUvA5zvYAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-yellow</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-yellow/tip-yellow.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LnRpcC15ZWxsb3cgewoJei1pbmRleDoxMDAwOwoJdGV4dC1hbGlnbjpsZWZ0OwoJYm9yZGVyOjFweCBzb2xpZCAjOTM5MzkzOwoJcGFkZGluZzo3cHg7CgltaW4td2lkdGg6NTBweDsKCW1heC13aWR0aDo1MzBweDsKCWNvbG9yOiM4YzM5MDE7CgliYWNrZ3JvdW5kLWNvbG9yOiNmZWY5ZDk7CgliYWNrZ3JvdW5kLWltYWdlOnVybCh0aXAteWVsbG93LnBuZyk7IC8qIGJnSW1hZ2VGcmFtZVNpemUgPj0gMTAgc2hvdWxkIHdvcmsgZmluZSAqLwoJLyoqCgkgKiAtIElmIHlvdSBzZXQgYSBiYWNrZ3JvdW5kLWltYWdlLCBib3JkZXIvcGFkZGluZy9iYWNrZ3JvdW5kLWNvbG9yIHdpbGwgYmUgaW5nbm9yZWQuCgkgKiAgIFlvdSBjYW4gc2V0IGFueSBwYWRkaW5nIHRvIC50aXAtaW5uZXIgaW5zdGVhZCBpZiB5b3UgbmVlZC4KCSAqIC0gSWYgeW91IHdhbnQgYSB0aWxlZCBiYWNrZ3JvdW5kLWltYWdlIGFuZCBib3JkZXIvcGFkZGluZyBmb3IgdGhlIHRpcCwKCSAqICAgc2V0IHRoZSBiYWNrZ3JvdW5kLWltYWdlIHRvIC50aXAtaW5uZXIgaW5zdGVhZC4KCSAqLwp9Ci50aXAteWVsbG93IC50aXAtaW5uZXIgewoJZm9udDpib2xkIDEzcHgvMThweCAndHJlYnVjaGV0IG1zJyxhcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZjsKCW1hcmdpbi10b3A6LTJweDsKCXBhZGRpbmc6MCAzcHggMXB4IDNweDsKfQoKLyogQ29uZmlndXJlIGFuIGFycm93IGltYWdlIC0gdGhlIHNjcmlwdCB3aWxsIGF1dG9tYXRpY2FsbHkgcG9zaXRpb24gaXQgb24gdGhlIGNvcnJlY3Qgc2lkZSBvZiB0aGUgdGlwICovCi50aXAteWVsbG93IC50aXAtYXJyb3ctdG9wIHsKCW1hcmdpbi10b3A6LTdweDsKCW1hcmdpbi1sZWZ0OjE1cHg7Cgl0b3A6MDsKCWxlZnQ6MDsKCXdpZHRoOjE2cHg7CgloZWlnaHQ6MTBweDsKCWJhY2tncm91bmQ6dXJsKHRpcC15ZWxsb3dfYXJyb3dzLnBuZykgbm8tcmVwZWF0Owp9Ci50aXAteWVsbG93IC50aXAtYXJyb3ctcmlnaHQgewoJbWFyZ2luLXRvcDotOXB4OyAvKiBhcHByb3guIGhhbGYgdGhlIGhlaWdodCB0byBjZW50ZXIgaXQgKi8KCW1hcmdpbi1sZWZ0Oi00cHg7Cgl0b3A6NTAlOwoJbGVmdDoxMDAlOwoJd2lkdGg6MTBweDsKCWhlaWdodDoyMHB4OwoJYmFja2dyb3VuZDp1cmwodGlwLXllbGxvd19hcnJvd3MucG5nKSBuby1yZXBlYXQgLTE2cHggMDsKfQoudGlwLXllbGxvdyAudGlwLWFycm93LWJvdHRvbSB7CgltYXJnaW4tdG9wOi02cHg7CgltYXJnaW4tbGVmdDoxNXB4OwoJdG9wOjEwMCU7CglsZWZ0OjA7Cgl3aWR0aDoxNnB4OwoJaGVpZ2h0OjEzcHg7CgliYWNrZ3JvdW5kOnVybCh0aXAteWVsbG93X2Fycm93cy5wbmcpIG5vLXJlcGVhdCAtMzJweCAwOwp9Ci50aXAteWVsbG93IC50aXAtYXJyb3ctbGVmdCB7CgltYXJnaW4tdG9wOi05cHg7IC8qIGFwcHJveC4gaGFsZiB0aGUgaGVpZ2h0IHRvIGNlbnRlciBpdCAqLwoJbWFyZ2luLWxlZnQ6LTZweDsKCXRvcDo1MCU7CglsZWZ0OjA7Cgl3aWR0aDoxMHB4OwoJaGVpZ2h0OjIwcHg7CgliYWNrZ3JvdW5kOnVybCh0aXAteWVsbG93X2Fycm93cy5wbmcpIG5vLXJlcGVhdCAtNDhweCAwOwp9]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-yellow/tip-yellow.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAABAAAAAMACAYAAAC6uhUNAAATlElEQVR42uzcv0+cdQDH8e/d8aPgGWqKkhDoAn8BOhhiOpjYv8A4EAanYowJEDYTJ2cCGGO0g3EgTA6OpoNJG0O6GScZYCkNASW1pEe5Fu4ev9+H5/Cocb8jr1f65Prcczo82+d9z7WUZVloV4pWVlb6RkZG7sTTD+Ppu/G1LwAAAACd6mXc9w/j648HBwd3FxcX0/mlwV9qP0/jf2Nj406lUvl2YmIijI+Ph+Hh4VAul91KAAAA6FDNZjMcHh6G3d3dsLOzExqNxiczMzN32yPARQBI4399ff3TarX69a1b74U3rr8WQtZM/xt3EgAAADpeOY77cvj76XF48ODXUKvVPpudnf2mFQHyAJDG//z8/LXp6ennt2+/H4Zej9ey03g5c/8AAACga5Tin95w9KwU7t37JWxubg6ura3VUwToSeM/fWJqamouPfY/VI3Dv1Ez/gEAAKBLI8BQtRrSxq/X63Pxja/S9G/9uL9cqVQ+unlzJO7+uvEPAAAAXSvLt33a+Gnrh3C+/ct5GgjpvcrbN64Pxg+duVcAAADQ1Q3gLKSNn7Z+2vwh/9cBzgNAeu0rl7Pg238AAADo+gIQzjd+6Cs2f+niJwDB9AcAAIArlAAuXPoJQMmtAQAAgCsp3/1l9wEAAACuPgEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQANwCAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEALcAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABwC0AAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAAEAAAAAAAAQAAAAAQAAAAAAABAAAAAAQAAAAAAABAAAAABAAAAAAAAEAAAAA6JwAUHI/AAAA4Eoo/V8AyLLstNmUAQAAAOAqzP+zs3zrH/8nADQajd+fHNXjZ3rcJwAAAOjq/d8Tnj6rp63/R3sAyNJRq9V+evToIH7oWvAUAAAAAHTt+s+3fdr4aeu3dn/rCYDm2tra99vb2+GoFt8q9YsAAAAA0JXjvz/f9mnjp62fNn+60noCoLm1tfV8f3//8/v3H4aj4/54pRr/o14hAAAAALpi+PfmWz5t+rTt08ZPW78IAFmpWPiVeKSv/QeXl5fnxsbGvpycnAxjY2+Gt25UQ3YeCwAAAICOnP/l8NeT47C7+2f+zf/jx4+/WFpa+i5eSgHgRTwarQCQjt4iAgyMjo4OLSwsfDw8PPzBwMDAO24lAAAAdLaTk5PfDg8Pf15dXf1hb2/vKL1VjP/TkJ4AyLIslKJw/nOAFAH6ihDQX5z3FNf8FgAAAAA6T/7T/nicFWP/RXG8LM6bcfufB4CkLQL0vHJUwr9PCQAAAACdFwDS0SgiQPuRj/9897cCQFsEaIWASvHq238AAADo/AjQLI5G8ZplbaP/UgBoiwAhXP7WXwAAAACAzg4Ardf879krg/8fAQYAfUs1Zg+wNckAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-yellow/tip-yellow_arrows.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAEAAAAAUCAYAAAA9djs/AAAFQUlEQVR42sRXW09jVRRepzcohuFapsAo4UV+gVoo7ZR5mOjTCIpGIYQYgkQ0jI4QhZCQ8MgLDxISTCbDzZE4iDOjPgmU4TbxkQQeuAUCjhkucimBFtqzXet0H6jl9LSdqbCTlRDOXnt937fWXmtXYIxB8BJw9ff3v63T6X6n716v115eXj7BlDb7ttngL07weDwflZWVDSjuUVkM/fEMeKGlTQNBmyYofeIcPoyLi7v/3rsO2qu4T6Pk2Nvbe4vIW61WsFgsgH8/6evru0HfFAiAzWYDCoQBK5X2qK2Hj8fB5TZHzf3AkwmPfp0AFfKVhImwMRWBNQrkS9FxyGYrhOwsM+S8dg0KCvJBr9f/0dPT844SQVPyLjgcBSTCXdxTHo0ILpfr9vDwMOweJCKAeEKhsluQ9rgOrwD57O/v31EiTxgIC2EibGpLE0S+DB0H7HYbZJrT8L/Hkr16zQxWq0TwN6oOJYKpST6w2y0QHx/f093d/UGkIlRUVHRtbGx8Oeqchp19nYoIRD4Odl16GB6dhs3NzQb07QwmT7EJA2EhTOGWRnbEEq9Ax16Hww4ZpkRgzIN2ws0DWVmpWOpWEmGIquQcQdEN6cki2G0WMBqNP4YSSqkN1NTU3FtfX78zMjoFW7saBRH85EkgEmptba2hurr6e/INvroUmzAQFsIUVgBOvgrJ33M4bJCeZsRjPWjeADvBwzxgvnoFCUoiDJBg/yWIWJgbMtIFKLS+BQaDYQhL8WYEIojUSuvq6vqWlpZuO51TsEFXVmPkIvjLfntPK5FfXl7+Bvd2kw/3lcv+JsWk2ISBsAToE/pSIZEaVK3T4SiElGS9n3BIRwKjg+1/PDA2Nglut7v649I3uk6/SX6CBP6vv70wNf0nTYcbWKrOUNMBsWPdAxml3dja2lqSl5f3HRExZ2ilPVs7gPGmYWFhob6xsbEf/3WEhlmCExICyTswKSMF+W9CdiYeJR6dYeFcBMPrylMgISGhs6ioCFJTkvyZVlWNSXvS01KAfFC4LsU9CCA70yBNEMzKSFVVlU7lUMokqU4pO2xubv55bm7u0/GJp/DsOcNq0AJVxfz8/FcB5N0yeTqbYlAsinlGPrKlKS4uxswnABP3Ip/duDc15RUoKSlRFQvHJ/AboA+5y18ZsgiU1cOWlpZHs7OzlZOTU/DkyTgsLi5+1tTUdJ++cfK018d99RSDYkVD/LQCmc+Fxxy+0DtEEFA47zNQugLPNxlQFrFbl9bW1j5kTCovlbMkpTRcLANZbm5uQmJionZmZuaAi3McRJ789B0dHbdMJtNPtkILXDUJUV0BIcqH2/kMHs+zMwFAalibO4J0Z1dXVz+pr69/QFkLJ0CQCJROLTe5UXq5iYH9hASg/tHW1vZ+Tk7O3evX88GUwngThPA9AGK2/KNqe0+DZfuUyvYLJP+Yl3dEKnNiMtljnnXZzpEPYOijWBSTYhMGwqL+qIq1AHxOj41J5L/GhvWAk/BFczkDRPAFZN0XgvypABSLYlJswuB/VMVdnAC7B3pwYmCc09/i+oF3a/nOilFdq7MlcmMqP7ICK+aIYhMGwkKYLkSA7f1UHFXTsLKy0tjQ0NDNu7U8p0X2so0msoo5kacIYSAshImwhTvg5cy7xQYHB1l7e/vn9LsILYk/anRyk70I4xdeflARBhNhImyEMZSfEKvkYDdOCr63/2fmVaaIlgshTRKEoPrA0cUwvoeXongZ5OXrgBr4AnpD2CseSwHkdzS7DPIKIoiRzMEYvgOkgJdKPqgxskimz78CDACAM1hQjTiACQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-yellowsimple</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-yellowsimple/tip-yellowsimple.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LnRpcC15ZWxsb3dzaW1wbGUgewoJei1pbmRleDoxMDAwOwoJdGV4dC1hbGlnbjpsZWZ0OwoJYm9yZGVyOjFweCBzb2xpZCAjYzdiZjkzOwoJYm9yZGVyLXJhZGl1czo0cHg7CgktbW96LWJvcmRlci1yYWRpdXM6NHB4OwoJLXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDsKCXBhZGRpbmc6NnB4IDhweDsKCW1pbi13aWR0aDo1MHB4OwoJbWF4LXdpZHRoOjMwMHB4OwoJY29sb3I6IzAwMDsKCWJhY2tncm91bmQtY29sb3I6I2ZmZjljOTsKCS8qKgoJICogLSBJZiB5b3Ugc2V0IGEgYmFja2dyb3VuZC1pbWFnZSwgYm9yZGVyL3BhZGRpbmcvYmFja2dyb3VuZC1jb2xvciB3aWxsIGJlIGluZ25vcmVkLgoJICogICBZb3UgY2FuIHNldCBhbnkgcGFkZGluZyB0byAudGlwLWlubmVyIGluc3RlYWQgaWYgeW91IG5lZWQuCgkgKiAtIElmIHlvdSB3YW50IGEgdGlsZWQgYmFja2dyb3VuZC1pbWFnZSBhbmQgYm9yZGVyL3BhZGRpbmcgZm9yIHRoZSB0aXAsCgkgKiAgIHNldCB0aGUgYmFja2dyb3VuZC1pbWFnZSB0byAudGlwLWlubmVyIGluc3RlYWQuCgkgKi8KfQoudGlwLXllbGxvd3NpbXBsZSAudGlwLWlubmVyIHsKCWZvbnQ6MTJweC8xNnB4IGFyaWFsLGhlbHZldGljYSxzYW5zLXNlcmlmOwp9CgovKiBDb25maWd1cmUgYW4gYXJyb3cgaW1hZ2UgLSB0aGUgc2NyaXB0IHdpbGwgYXV0b21hdGljYWxseSBwb3NpdGlvbiBpdCBvbiB0aGUgY29ycmVjdCBzaWRlIG9mIHRoZSB0aXAgKi8KLnRpcC15ZWxsb3dzaW1wbGUgLnRpcC1hcnJvdy10b3AgewoJbWFyZ2luLXRvcDotNnB4OwoJbWFyZ2luLWxlZnQ6LTVweDsgLyogYXBwcm94LiBoYWxmIHRoZSB3aWR0aCB0byBjZW50ZXIgaXQgKi8KCXRvcDowOwoJbGVmdDo1MCU7Cgl3aWR0aDo5cHg7CgloZWlnaHQ6NnB4OwoJYmFja2dyb3VuZDp1cmwodGlwLXllbGxvd3NpbXBsZV9hcnJvd3MuZ2lmKSBuby1yZXBlYXQ7Cn0KLnRpcC15ZWxsb3dzaW1wbGUgLnRpcC1hcnJvdy1yaWdodCB7CgltYXJnaW4tdG9wOi00cHg7IC8qIGFwcHJveC4gaGFsZiB0aGUgaGVpZ2h0IHRvIGNlbnRlciBpdCAqLwoJbWFyZ2luLWxlZnQ6MDsKCXRvcDo1MCU7CglsZWZ0OjEwMCU7Cgl3aWR0aDo2cHg7CgloZWlnaHQ6OXB4OwoJYmFja2dyb3VuZDp1cmwodGlwLXllbGxvd3NpbXBsZV9hcnJvd3MuZ2lmKSBuby1yZXBlYXQgLTlweCAwOwp9Ci50aXAteWVsbG93c2ltcGxlIC50aXAtYXJyb3ctYm90dG9tIHsKCW1hcmdpbi10b3A6MDsKCW1hcmdpbi1sZWZ0Oi01cHg7IC8qIGFwcHJveC4gaGFsZiB0aGUgd2lkdGggdG8gY2VudGVyIGl0ICovCgl0b3A6MTAwJTsKCWxlZnQ6NTAlOwoJd2lkdGg6OXB4OwoJaGVpZ2h0OjZweDsKCWJhY2tncm91bmQ6dXJsKHRpcC15ZWxsb3dzaW1wbGVfYXJyb3dzLmdpZikgbm8tcmVwZWF0IC0xOHB4IDA7Cn0KLnRpcC15ZWxsb3dzaW1wbGUgLnRpcC1hcnJvdy1sZWZ0IHsKCW1hcmdpbi10b3A6LTRweDsgLyogYXBwcm94LiBoYWxmIHRoZSBoZWlnaHQgdG8gY2VudGVyIGl0ICovCgltYXJnaW4tbGVmdDotNnB4OwoJdG9wOjUwJTsKCWxlZnQ6MDsKCXdpZHRoOjZweDsKCWhlaWdodDo5cHg7CgliYWNrZ3JvdW5kOnVybCh0aXAteWVsbG93c2ltcGxlX2Fycm93cy5naWYpIG5vLXJlcGVhdCAtMjdweCAwOwp9]]></data>
	</file>
	<file>
	  <filename>/js/external/jquery.poshytip/tip-yellowsimple/tip-yellowsimple_arrows.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhJAAJAJECAP/5yce/k////wAAACH5BAEAAAIALAAAAAAkAAkAAAI8lBUnkGoAY1QBOMQObFRGXlnd9pBO+B3omEqcmhqoiHmM98qZLmm2nVOdehdHrFhcIX3BJYy23DmRlUMBADs=]]></data>
	</file>
	<file>
	  <filename>/js/jquery-3.6.0.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGpRdWVyeSB2My42LjAgfCAoYykgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLwohZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZS5kb2N1bWVudD90KGUsITApOmZ1bmN0aW9uKGUpe2lmKCFlLmRvY3VtZW50KXRocm93IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpO3JldHVybiB0KGUpfTp0KGUpfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihDLGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1bXSxyPU9iamVjdC5nZXRQcm90b3R5cGVPZixzPXQuc2xpY2UsZz10LmZsYXQ/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZmxhdC5jYWxsKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gdC5jb25jYXQuYXBwbHkoW10sZSl9LHU9dC5wdXNoLGk9dC5pbmRleE9mLG49e30sbz1uLnRvU3RyaW5nLHY9bi5oYXNPd25Qcm9wZXJ0eSxhPXYudG9TdHJpbmcsbD1hLmNhbGwoT2JqZWN0KSx5PXt9LG09ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUmJiJudW1iZXIiIT10eXBlb2YgZS5ub2RlVHlwZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUuaXRlbX0seD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmZT09PWUud2luZG93fSxFPUMuZG9jdW1lbnQsYz17dHlwZTohMCxzcmM6ITAsbm9uY2U6ITAsbm9Nb2R1bGU6ITB9O2Z1bmN0aW9uIGIoZSx0LG4pe3ZhciByLGksbz0obj1ufHxFKS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtpZihvLnRleHQ9ZSx0KWZvcihyIGluIGMpKGk9dFtyXXx8dC5nZXRBdHRyaWJ1dGUmJnQuZ2V0QXR0cmlidXRlKHIpKSYmby5zZXRBdHRyaWJ1dGUocixpKTtuLmhlYWQuYXBwZW5kQ2hpbGQobykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKX1mdW5jdGlvbiB3KGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9uW28uY2FsbChlKV18fCJvYmplY3QiOnR5cGVvZiBlfXZhciBmPSIzLjYuMCIsUz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgUy5mbi5pbml0KGUsdCl9O2Z1bmN0aW9uIHAoZSl7dmFyIHQ9ISFlJiYibGVuZ3RoImluIGUmJmUubGVuZ3RoLG49dyhlKTtyZXR1cm4hbShlKSYmIXgoZSkmJigiYXJyYXkiPT09bnx8MD09PXR8fCJudW1iZXIiPT10eXBlb2YgdCYmMDx0JiZ0LTEgaW4gZSl9Uy5mbj1TLnByb3RvdHlwZT17anF1ZXJ5OmYsY29uc3RydWN0b3I6UyxsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHMuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3MuY2FsbCh0aGlzKTplPDA/dGhpc1tlK3RoaXMubGVuZ3RoXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9Uy5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHR9LGVhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIFMuZWFjaCh0aGlzLGUpfSxtYXA6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFMubWFwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCxlKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2socy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxldmVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFMuZ3JlcCh0aGlzLGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQrMSklMn0pKX0sb2RkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFMuZ3JlcCh0aGlzLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQlMn0pKX0sZXE6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sZW5ndGgsbj0rZSsoZTwwP3Q6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKDA8PW4mJm48dD9bdGhpc1tuXV06W10pfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKCl9LHB1c2g6dSxzb3J0OnQuc29ydCxzcGxpY2U6dC5zcGxpY2V9LFMuZXh0ZW5kPVMuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHIsaSxvLGE9YXJndW1lbnRzWzBdfHx7fSxzPTEsdT1hcmd1bWVudHMubGVuZ3RoLGw9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIGEmJihsPWEsYT1hcmd1bWVudHNbc118fHt9LHMrKyksIm9iamVjdCI9PXR5cGVvZiBhfHxtKGEpfHwoYT17fSkscz09PXUmJihhPXRoaXMscy0tKTtzPHU7cysrKWlmKG51bGwhPShlPWFyZ3VtZW50c1tzXSkpZm9yKHQgaW4gZSlyPWVbdF0sIl9fcHJvdG9fXyIhPT10JiZhIT09ciYmKGwmJnImJihTLmlzUGxhaW5PYmplY3Qocil8fChpPUFycmF5LmlzQXJyYXkocikpKT8obj1hW3RdLG89aSYmIUFycmF5LmlzQXJyYXkobik/W106aXx8Uy5pc1BsYWluT2JqZWN0KG4pP246e30saT0hMSxhW3RdPVMuZXh0ZW5kKGwsbyxyKSk6dm9pZCAwIT09ciYmKGFbdF09cikpO3JldHVybiBhfSxTLmV4dGVuZCh7ZXhwYW5kbzoialF1ZXJ5IisoZitNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxpc1JlYWR5OiEwLGVycm9yOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihlKX0sbm9vcDpmdW5jdGlvbigpe30saXNQbGFpbk9iamVjdDpmdW5jdGlvbihlKXt2YXIgdCxuO3JldHVybiEoIWV8fCJbb2JqZWN0IE9iamVjdF0iIT09by5jYWxsKGUpKSYmKCEodD1yKGUpKXx8ImZ1bmN0aW9uIj09dHlwZW9mKG49di5jYWxsKHQsImNvbnN0cnVjdG9yIikmJnQuY29uc3RydWN0b3IpJiZhLmNhbGwobik9PT1sKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXJldHVybiExO3JldHVybiEwfSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGUsdCxuKXtiKGUse25vbmNlOnQmJnQubm9uY2V9LG4pfSxlYWNoOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wO2lmKHAoZSkpe2ZvcihuPWUubGVuZ3RoO3I8bjtyKyspaWYoITE9PT10LmNhbGwoZVtyXSxyLGVbcl0pKWJyZWFrfWVsc2UgZm9yKHIgaW4gZSlpZighMT09PXQuY2FsbChlW3JdLHIsZVtyXSkpYnJlYWs7cmV0dXJuIGV9LG1ha2VBcnJheTpmdW5jdGlvbihlLHQpe3ZhciBuPXR8fFtdO3JldHVybiBudWxsIT1lJiYocChPYmplY3QoZSkpP1MubWVyZ2Uobiwic3RyaW5nIj09dHlwZW9mIGU/W2VdOmUpOnUuY2FsbChuLGUpKSxufSxpbkFycmF5OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09dD8tMTppLmNhbGwodCxlLG4pfSxtZXJnZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0rdC5sZW5ndGgscj0wLGk9ZS5sZW5ndGg7cjxuO3IrKyllW2krK109dFtyXTtyZXR1cm4gZS5sZW5ndGg9aSxlfSxncmVwOmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9W10saT0wLG89ZS5sZW5ndGgsYT0hbjtpPG87aSsrKSF0KGVbaV0saSkhPT1hJiZyLnB1c2goZVtpXSk7cmV0dXJuIHJ9LG1hcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPTAsYT1bXTtpZihwKGUpKWZvcihyPWUubGVuZ3RoO288cjtvKyspbnVsbCE9KGk9dChlW29dLG8sbikpJiZhLnB1c2goaSk7ZWxzZSBmb3IobyBpbiBlKW51bGwhPShpPXQoZVtvXSxvLG4pKSYmYS5wdXNoKGkpO3JldHVybiBnKGEpfSxndWlkOjEsc3VwcG9ydDp5fSksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFMuZm5bU3ltYm9sLml0ZXJhdG9yXT10W1N5bWJvbC5pdGVyYXRvcl0pLFMuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2wiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXtuWyJbb2JqZWN0ICIrdCsiXSJdPXQudG9Mb3dlckNhc2UoKX0pO3ZhciBkPWZ1bmN0aW9uKG4pe3ZhciBlLGQsYixvLGksaCxmLGcsdyx1LGwsVCxDLGEsRSx2LHMsYyx5LFM9InNpenpsZSIrMSpuZXcgRGF0ZSxwPW4uZG9jdW1lbnQsaz0wLHI9MCxtPXVlKCkseD11ZSgpLEE9dWUoKSxOPXVlKCksaj1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dCYmKGw9ITApLDB9LEQ9e30uaGFzT3duUHJvcGVydHksdD1bXSxxPXQucG9wLEw9dC5wdXNoLEg9dC5wdXNoLE89dC5zbGljZSxQPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKWlmKGVbbl09PT10KXJldHVybiBuO3JldHVybi0xfSxSPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsTT0iW1xceDIwXFx0XFxyXFxuXFxmXSIsST0iKD86XFxcXFtcXGRhLWZBLUZdezEsNn0iK00rIj98XFxcXFteXFxyXFxuXFxmXXxbXFx3LV18W15cMC1cXHg3Zl0pKyIsVz0iXFxbIitNKyIqKCIrSSsiKSg/OiIrTSsiKihbKl4kfCF+XT89KSIrTSsiKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgiK0krIikpfCkiK00rIipcXF0iLEY9IjooIitJKyIpKD86XFwoKCgnKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcIil8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IitXKyIpKil8LiopXFwpfCkiLEI9bmV3IFJlZ0V4cChNKyIrIiwiZyIpLCQ9bmV3IFJlZ0V4cCgiXiIrTSsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitNKyIrJCIsImciKSxfPW5ldyBSZWdFeHAoIl4iK00rIiosIitNKyIqIiksej1uZXcgUmVnRXhwKCJeIitNKyIqKFs+K35dfCIrTSsiKSIrTSsiKiIpLFU9bmV3IFJlZ0V4cChNKyJ8PiIpLFg9bmV3IFJlZ0V4cChGKSxWPW5ldyBSZWdFeHAoIl4iK0krIiQiKSxHPXtJRDpuZXcgUmVnRXhwKCJeIygiK0krIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrSSsiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrSSsifFsqXSkiKSxBVFRSOm5ldyBSZWdFeHAoIl4iK1cpLFBTRVVETzpuZXcgUmVnRXhwKCJeIitGKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK00rIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK00rIiooPzooWystXXwpIitNKyIqKFxcZCspfCkpIitNKyIqXFwpfCkiLCJpIiksYm9vbDpuZXcgUmVnRXhwKCJeKD86IitSKyIpJCIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrTSsiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitNKyIqKCg/Oi1cXGQpP1xcZCopIitNKyIqXFwpfCkoPz1bXi1dfCQpIiwiaSIpfSxZPS9IVE1MJC9pLFE9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxKPS9eaFxkJC9pLEs9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLFo9L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxlZT0vWyt+XS8sdGU9bmV3IFJlZ0V4cCgiXFxcXFtcXGRhLWZBLUZdezEsNn0iK00rIj98XFxcXChbXlxcclxcblxcZl0pIiwiZyIpLG5lPWZ1bmN0aW9uKGUsdCl7dmFyIG49IjB4IitlLnNsaWNlKDEpLTY1NTM2O3JldHVybiB0fHwobjwwP1N0cmluZy5mcm9tQ2hhckNvZGUobis2NTUzNik6U3RyaW5nLmZyb21DaGFyQ29kZShuPj4xMHw1NTI5NiwxMDIzJm58NTYzMjApKX0scmU9LyhbXDAtXHgxZlx4N2ZdfF4tP1xkKXxeLSR8W15cMC1ceDFmXHg3Zi1cdUZGRkZcdy1dL2csaWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8iXDAiPT09ZT8iXHVmZmZkIjplLnNsaWNlKDAsLTEpKyJcXCIrZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpLnRvU3RyaW5nKDE2KSsiICI6IlxcIitlfSxvZT1mdW5jdGlvbigpe1QoKX0sYWU9YmUoZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lLmRpc2FibGVkJiYiZmllbGRzZXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSx7ZGlyOiJwYXJlbnROb2RlIixuZXh0OiJsZWdlbmQifSk7dHJ5e0guYXBwbHkodD1PLmNhbGwocC5jaGlsZE5vZGVzKSxwLmNoaWxkTm9kZXMpLHRbcC5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2goZSl7SD17YXBwbHk6dC5sZW5ndGg/ZnVuY3Rpb24oZSx0KXtMLmFwcGx5KGUsTy5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7d2hpbGUoZVtuKytdPXRbcisrXSk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gc2UodCxlLG4scil7dmFyIGksbyxhLHMsdSxsLGMsZj1lJiZlLm93bmVyRG9jdW1lbnQscD1lP2Uubm9kZVR5cGU6OTtpZihuPW58fFtdLCJzdHJpbmciIT10eXBlb2YgdHx8IXR8fDEhPT1wJiY5IT09cCYmMTEhPT1wKXJldHVybiBuO2lmKCFyJiYoVChlKSxlPWV8fEMsRSkpe2lmKDExIT09cCYmKHU9Wi5leGVjKHQpKSlpZihpPXVbMV0pe2lmKDk9PT1wKXtpZighKGE9ZS5nZXRFbGVtZW50QnlJZChpKSkpcmV0dXJuIG47aWYoYS5pZD09PWkpcmV0dXJuIG4ucHVzaChhKSxufWVsc2UgaWYoZiYmKGE9Zi5nZXRFbGVtZW50QnlJZChpKSkmJnkoZSxhKSYmYS5pZD09PWkpcmV0dXJuIG4ucHVzaChhKSxufWVsc2V7aWYodVsyXSlyZXR1cm4gSC5hcHBseShuLGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodCkpLG47aWYoKGk9dVszXSkmJmQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBILmFwcGx5KG4sZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGkpKSxufWlmKGQucXNhJiYhTlt0KyIgIl0mJighdnx8IXYudGVzdCh0KSkmJigxIT09cHx8Im9iamVjdCIhPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpKXtpZihjPXQsZj1lLDE9PT1wJiYoVS50ZXN0KHQpfHx6LnRlc3QodCkpKXsoZj1lZS50ZXN0KHQpJiZ5ZShlLnBhcmVudE5vZGUpfHxlKT09PWUmJmQuc2NvcGV8fCgocz1lLmdldEF0dHJpYnV0ZSgiaWQiKSk/cz1zLnJlcGxhY2UocmUsaWUpOmUuc2V0QXR0cmlidXRlKCJpZCIscz1TKSksbz0obD1oKHQpKS5sZW5ndGg7d2hpbGUoby0tKWxbb109KHM/IiMiK3M6IjpzY29wZSIpKyIgIit4ZShsW29dKTtjPWwuam9pbigiLCIpfXRyeXtyZXR1cm4gSC5hcHBseShuLGYucXVlcnlTZWxlY3RvckFsbChjKSksbn1jYXRjaChlKXtOKHQsITApfWZpbmFsbHl7cz09PVMmJmUucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGcodC5yZXBsYWNlKCQsIiQxIiksZSxuLHIpfWZ1bmN0aW9uIHVlKCl7dmFyIHI9W107cmV0dXJuIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gci5wdXNoKHQrIiAiKT5iLmNhY2hlTGVuZ3RoJiZkZWxldGUgZVtyLnNoaWZ0KCldLGVbdCsiICJdPW59fWZ1bmN0aW9uIGxlKGUpe3JldHVybiBlW1NdPSEwLGV9ZnVuY3Rpb24gY2UoZSl7dmFyIHQ9Qy5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpO3RyeXtyZXR1cm4hIWUodCl9Y2F0Y2goZSl7cmV0dXJuITF9ZmluYWxseXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0PW51bGx9fWZ1bmN0aW9uIGZlKGUsdCl7dmFyIG49ZS5zcGxpdCgifCIpLHI9bi5sZW5ndGg7d2hpbGUoci0tKWIuYXR0ckhhbmRsZVtuW3JdXT10fWZ1bmN0aW9uIHBlKGUsdCl7dmFyIG49dCYmZSxyPW4mJjE9PT1lLm5vZGVUeXBlJiYxPT09dC5ub2RlVHlwZSYmZS5zb3VyY2VJbmRleC10LnNvdXJjZUluZGV4O2lmKHIpcmV0dXJuIHI7aWYobil3aGlsZShuPW4ubmV4dFNpYmxpbmcpaWYobj09PXQpcmV0dXJuLTE7cmV0dXJuIGU/MTotMX1mdW5jdGlvbiBkZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmZS50eXBlPT09dH19ZnVuY3Rpb24gaGUobil7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oImlucHV0Ij09PXR8fCJidXR0b24iPT09dCkmJmUudHlwZT09PW59fWZ1bmN0aW9uIGdlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4iZm9ybSJpbiBlP2UucGFyZW50Tm9kZSYmITE9PT1lLmRpc2FibGVkPyJsYWJlbCJpbiBlPyJsYWJlbCJpbiBlLnBhcmVudE5vZGU/ZS5wYXJlbnROb2RlLmRpc2FibGVkPT09dDplLmRpc2FibGVkPT09dDplLmlzRGlzYWJsZWQ9PT10fHxlLmlzRGlzYWJsZWQhPT0hdCYmYWUoZSk9PT10OmUuZGlzYWJsZWQ9PT10OiJsYWJlbCJpbiBlJiZlLmRpc2FibGVkPT09dH19ZnVuY3Rpb24gdmUoYSl7cmV0dXJuIGxlKGZ1bmN0aW9uKG8pe3JldHVybiBvPStvLGxlKGZ1bmN0aW9uKGUsdCl7dmFyIG4scj1hKFtdLGUubGVuZ3RoLG8pLGk9ci5sZW5ndGg7d2hpbGUoaS0tKWVbbj1yW2ldXSYmKGVbbl09ISh0W25dPWVbbl0pKX0pfSl9ZnVuY3Rpb24geWUoZSl7cmV0dXJuIGUmJiJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZSYmZX1mb3IoZSBpbiBkPXNlLnN1cHBvcnQ9e30saT1zZS5pc1hNTD1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLm5hbWVzcGFjZVVSSSxuPWUmJihlLm93bmVyRG9jdW1lbnR8fGUpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4hWS50ZXN0KHR8fG4mJm4ubm9kZU5hbWV8fCJIVE1MIil9LFQ9c2Uuc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWU/ZS5vd25lckRvY3VtZW50fHxlOnA7cmV0dXJuIHIhPUMmJjk9PT1yLm5vZGVUeXBlJiZyLmRvY3VtZW50RWxlbWVudCYmKGE9KEM9cikuZG9jdW1lbnRFbGVtZW50LEU9IWkoQykscCE9QyYmKG49Qy5kZWZhdWx0VmlldykmJm4udG9wIT09biYmKG4uYWRkRXZlbnRMaXN0ZW5lcj9uLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsb2UsITEpOm4uYXR0YWNoRXZlbnQmJm4uYXR0YWNoRXZlbnQoIm9udW5sb2FkIixvZSkpLGQuc2NvcGU9Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIGEuYXBwZW5kQ2hpbGQoZSkuYXBwZW5kQ2hpbGQoQy5jcmVhdGVFbGVtZW50KCJkaXYiKSksInVuZGVmaW5lZCIhPXR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGwmJiFlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpzY29wZSBmaWVsZHNldCBkaXYiKS5sZW5ndGh9KSxkLmF0dHJpYnV0ZXM9Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NOYW1lPSJpIiwhZS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksZC5nZXRFbGVtZW50c0J5VGFnTmFtZT1jZShmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBlbmRDaGlsZChDLmNyZWF0ZUNvbW1lbnQoIiIpKSwhZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLGQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT1LLnRlc3QoQy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSxkLmdldEJ5SWQ9Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIGEuYXBwZW5kQ2hpbGQoZSkuaWQ9UywhQy5nZXRFbGVtZW50c0J5TmFtZXx8IUMuZ2V0RWxlbWVudHNCeU5hbWUoUykubGVuZ3RofSksZC5nZXRCeUlkPyhiLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UodGUsbmUpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoImlkIik9PT10fX0sYi5maW5kLklEPWZ1bmN0aW9uKGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRCeUlkJiZFKXt2YXIgbj10LmdldEVsZW1lbnRCeUlkKGUpO3JldHVybiBuP1tuXTpbXX19KTooYi5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIG49ZS5yZXBsYWNlKHRlLG5lKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUmJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gdCYmdC52YWx1ZT09PW59fSxiLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQmJkUpe3ZhciBuLHIsaSxvPXQuZ2V0RWxlbWVudEJ5SWQoZSk7aWYobyl7aWYoKG49by5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dO2k9dC5nZXRFbGVtZW50c0J5TmFtZShlKSxyPTA7d2hpbGUobz1pW3IrK10paWYoKG49by5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dfXJldHVybltdfX0pLGIuZmluZC5UQUc9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihlLHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50c0J5VGFnTmFtZT90LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpOmQucXNhP3QucXVlcnlTZWxlY3RvckFsbChlKTp2b2lkIDB9OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKCIqIj09PWUpe3doaWxlKG49b1tpKytdKTE9PT1uLm5vZGVUeXBlJiZyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIG99LGIuZmluZC5DTEFTUz1kLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJkUpcmV0dXJuIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKX0scz1bXSx2PVtdLChkLnFzYT1LLnRlc3QoQy5xdWVyeVNlbGVjdG9yQWxsKSkmJihjZShmdW5jdGlvbihlKXt2YXIgdDthLmFwcGVuZENoaWxkKGUpLmlubmVySFRNTD0iPGEgaWQ9JyIrUysiJz48L2E+PHNlbGVjdCBpZD0nIitTKyItXHJcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGUucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJnYucHVzaCgiWypeJF09IitNKyIqKD86Jyd8XCJcIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fHYucHVzaCgiXFxbIitNKyIqKD86dmFsdWV8IitSKyIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIrUysiLV0iKS5sZW5ndGh8fHYucHVzaCgifj0iKSwodD1DLmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnNldEF0dHJpYnV0ZSgibmFtZSIsIiIpLGUuYXBwZW5kQ2hpbGQodCksZS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT0nJ10iKS5sZW5ndGh8fHYucHVzaCgiXFxbIitNKyIqbmFtZSIrTSsiKj0iK00rIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fHYucHVzaCgiOmNoZWNrZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoImEjIitTKyIrKiIpLmxlbmd0aHx8di5wdXNoKCIuIy4rWyt+XSIpLGUucXVlcnlTZWxlY3RvckFsbCgiXFxcZiIpLHYucHVzaCgiW1xcclxcblxcZl0iKX0pLGNlKGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD4iO3ZhciB0PUMuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTt0LnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGUuYXBwZW5kQ2hpbGQodCkuc2V0QXR0cmlidXRlKCJuYW1lIiwiRCIpLGUucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGgmJnYucHVzaCgibmFtZSIrTSsiKlsqXiR8IX5dPz0iKSwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCYmdi5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpLGEuYXBwZW5kQ2hpbGQoZSkuZGlzYWJsZWQ9ITAsMiE9PWUucXVlcnlTZWxlY3RvckFsbCgiOmRpc2FibGVkIikubGVuZ3RoJiZ2LnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4Iiksdi5wdXNoKCIsLio6Iil9KSksKGQubWF0Y2hlc1NlbGVjdG9yPUsudGVzdChjPWEubWF0Y2hlc3x8YS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLm9NYXRjaGVzU2VsZWN0b3J8fGEubXNNYXRjaGVzU2VsZWN0b3IpKSYmY2UoZnVuY3Rpb24oZSl7ZC5kaXNjb25uZWN0ZWRNYXRjaD1jLmNhbGwoZSwiKiIpLGMuY2FsbChlLCJbcyE9JyddOngiKSxzLnB1c2goIiE9IixGKX0pLHY9di5sZW5ndGgmJm5ldyBSZWdFeHAodi5qb2luKCJ8IikpLHM9cy5sZW5ndGgmJm5ldyBSZWdFeHAocy5qb2luKCJ8IikpLHQ9Sy50ZXN0KGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24pLHk9dHx8Sy50ZXN0KGEuY29udGFpbnMpP2Z1bmN0aW9uKGUsdCl7dmFyIG49OT09PWUubm9kZVR5cGU/ZS5kb2N1bWVudEVsZW1lbnQ6ZSxyPXQmJnQucGFyZW50Tm9kZTtyZXR1cm4gZT09PXJ8fCEoIXJ8fDEhPT1yLm5vZGVUeXBlfHwhKG4uY29udGFpbnM/bi5jb250YWlucyhyKTplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpKSl9OmZ1bmN0aW9uKGUsdCl7aWYodCl3aGlsZSh0PXQucGFyZW50Tm9kZSlpZih0PT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0saj10P2Z1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIGw9ITAsMDt2YXIgbj0hZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtyZXR1cm4gbnx8KDEmKG49KGUub3duZXJEb2N1bWVudHx8ZSk9PSh0Lm93bmVyRG9jdW1lbnR8fHQpP2UuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk6MSl8fCFkLnNvcnREZXRhY2hlZCYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PW4/ZT09Q3x8ZS5vd25lckRvY3VtZW50PT1wJiZ5KHAsZSk/LTE6dD09Q3x8dC5vd25lckRvY3VtZW50PT1wJiZ5KHAsdCk/MTp1P1AodSxlKS1QKHUsdCk6MDo0Jm4/LTE6MSl9OmZ1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIGw9ITAsMDt2YXIgbixyPTAsaT1lLnBhcmVudE5vZGUsbz10LnBhcmVudE5vZGUsYT1bZV0scz1bdF07aWYoIWl8fCFvKXJldHVybiBlPT1DPy0xOnQ9PUM/MTppPy0xOm8/MTp1P1AodSxlKS1QKHUsdCk6MDtpZihpPT09bylyZXR1cm4gcGUoZSx0KTtuPWU7d2hpbGUobj1uLnBhcmVudE5vZGUpYS51bnNoaWZ0KG4pO249dDt3aGlsZShuPW4ucGFyZW50Tm9kZSlzLnVuc2hpZnQobik7d2hpbGUoYVtyXT09PXNbcl0pcisrO3JldHVybiByP3BlKGFbcl0sc1tyXSk6YVtyXT09cD8tMTpzW3JdPT1wPzE6MH0pLEN9LHNlLm1hdGNoZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc2UoZSxudWxsLG51bGwsdCl9LHNlLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihlLHQpe2lmKFQoZSksZC5tYXRjaGVzU2VsZWN0b3ImJkUmJiFOW3QrIiAiXSYmKCFzfHwhcy50ZXN0KHQpKSYmKCF2fHwhdi50ZXN0KHQpKSl0cnl7dmFyIG49Yy5jYWxsKGUsdCk7aWYobnx8ZC5kaXNjb25uZWN0ZWRNYXRjaHx8ZS5kb2N1bWVudCYmMTEhPT1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiBufWNhdGNoKGUpe04odCwhMCl9cmV0dXJuIDA8c2UodCxDLG51bGwsW2VdKS5sZW5ndGh9LHNlLmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUub3duZXJEb2N1bWVudHx8ZSkhPUMmJlQoZSkseShlLHQpfSxzZS5hdHRyPWZ1bmN0aW9uKGUsdCl7KGUub3duZXJEb2N1bWVudHx8ZSkhPUMmJlQoZSk7dmFyIG49Yi5hdHRySGFuZGxlW3QudG9Mb3dlckNhc2UoKV0scj1uJiZELmNhbGwoYi5hdHRySGFuZGxlLHQudG9Mb3dlckNhc2UoKSk/bihlLHQsIUUpOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09cj9yOmQuYXR0cmlidXRlc3x8IUU/ZS5nZXRBdHRyaWJ1dGUodCk6KHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpKSYmci5zcGVjaWZpZWQ/ci52YWx1ZTpudWxsfSxzZS5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGUrIiIpLnJlcGxhY2UocmUsaWUpfSxzZS5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZSl9LHNlLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPTAsaT0wO2lmKGw9IWQuZGV0ZWN0RHVwbGljYXRlcyx1PSFkLnNvcnRTdGFibGUmJmUuc2xpY2UoMCksZS5zb3J0KGopLGwpe3doaWxlKHQ9ZVtpKytdKXQ9PT1lW2ldJiYocj1uLnB1c2goaSkpO3doaWxlKHItLSllLnNwbGljZShuW3JdLDEpfXJldHVybiB1PW51bGwsZX0sbz1zZS5nZXRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0LG49IiIscj0wLGk9ZS5ub2RlVHlwZTtpZihpKXtpZigxPT09aXx8OT09PWl8fDExPT09aSl7aWYoInN0cmluZyI9PXR5cGVvZiBlLnRleHRDb250ZW50KXJldHVybiBlLnRleHRDb250ZW50O2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZyluKz1vKGUpfWVsc2UgaWYoMz09PWl8fDQ9PT1pKXJldHVybiBlLm5vZGVWYWx1ZX1lbHNlIHdoaWxlKHQ9ZVtyKytdKW4rPW8odCk7cmV0dXJuIG59LChiPXNlLnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOmxlLG1hdGNoOkcsYXR0ckhhbmRsZTp7fSxmaW5kOnt9LHJlbGF0aXZlOnsiPiI6e2RpcjoicGFyZW50Tm9kZSIsZmlyc3Q6ITB9LCIgIjp7ZGlyOiJwYXJlbnROb2RlIn0sIisiOntkaXI6InByZXZpb3VzU2libGluZyIsZmlyc3Q6ITB9LCJ+Ijp7ZGlyOiJwcmV2aW91c1NpYmxpbmcifX0scHJlRmlsdGVyOntBVFRSOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0ucmVwbGFjZSh0ZSxuZSksZVszXT0oZVszXXx8ZVs0XXx8ZVs1XXx8IiIpLnJlcGxhY2UodGUsbmUpLCJ+PSI9PT1lWzJdJiYoZVszXT0iICIrZVszXSsiICIpLGUuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS50b0xvd2VyQ2FzZSgpLCJudGgiPT09ZVsxXS5zbGljZSgwLDMpPyhlWzNdfHxzZS5lcnJvcihlWzBdKSxlWzRdPSsoZVs0XT9lWzVdKyhlWzZdfHwxKToyKigiZXZlbiI9PT1lWzNdfHwib2RkIj09PWVbM10pKSxlWzVdPSsoZVs3XStlWzhdfHwib2RkIj09PWVbM10pKTplWzNdJiZzZS5lcnJvcihlWzBdKSxlfSxQU0VVRE86ZnVuY3Rpb24oZSl7dmFyIHQsbj0hZVs2XSYmZVsyXTtyZXR1cm4gRy5DSElMRC50ZXN0KGVbMF0pP251bGw6KGVbM10/ZVsyXT1lWzRdfHxlWzVdfHwiIjpuJiZYLnRlc3QobikmJih0PWgobiwhMCkpJiYodD1uLmluZGV4T2YoIikiLG4ubGVuZ3RoLXQpLW4ubGVuZ3RoKSYmKGVbMF09ZVswXS5zbGljZSgwLHQpLGVbMl09bi5zbGljZSgwLHQpKSxlLnNsaWNlKDAsMykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHRlLG5lKS50b0xvd2VyQ2FzZSgpO3JldHVybiIqIj09PWU/ZnVuY3Rpb24oKXtyZXR1cm4hMH06ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXR9fSxDTEFTUzpmdW5jdGlvbihlKXt2YXIgdD1tW2UrIiAiXTtyZXR1cm4gdHx8KHQ9bmV3IFJlZ0V4cCgiKF58IitNKyIpIitlKyIoIitNKyJ8JCkiKSkmJm0oZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KCJzdHJpbmciPT10eXBlb2YgZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1lfHwidW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24obixyLGkpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1zZS5hdHRyKGUsbik7cmV0dXJuIG51bGw9PXQ/IiE9Ij09PXI6IXJ8fCh0Kz0iIiwiPSI9PT1yP3Q9PT1pOiIhPSI9PT1yP3QhPT1pOiJePSI9PT1yP2kmJjA9PT10LmluZGV4T2YoaSk6Iio9Ij09PXI/aSYmLTE8dC5pbmRleE9mKGkpOiIkPSI9PT1yP2kmJnQuc2xpY2UoLWkubGVuZ3RoKT09PWk6In49Ij09PXI/LTE8KCIgIit0LnJlcGxhY2UoQiwiICIpKyIgIikuaW5kZXhPZihpKToifD0iPT09ciYmKHQ9PT1pfHx0LnNsaWNlKDAsaS5sZW5ndGgrMSk9PT1pKyItIikpfX0sQ0hJTEQ6ZnVuY3Rpb24oaCxlLHQsZyx2KXt2YXIgeT0ibnRoIiE9PWguc2xpY2UoMCwzKSxtPSJsYXN0IiE9PWguc2xpY2UoLTQpLHg9Im9mLXR5cGUiPT09ZTtyZXR1cm4gMT09PWcmJjA9PT12P2Z1bmN0aW9uKGUpe3JldHVybiEhZS5wYXJlbnROb2RlfTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGw9eSE9PW0/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixjPWUucGFyZW50Tm9kZSxmPXgmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxwPSFuJiYheCxkPSExO2lmKGMpe2lmKHkpe3doaWxlKGwpe2E9ZTt3aGlsZShhPWFbbF0paWYoeD9hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1mOjE9PT1hLm5vZGVUeXBlKXJldHVybiExO3U9bD0ib25seSI9PT1oJiYhdSYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZih1PVttP2MuZmlyc3RDaGlsZDpjLmxhc3RDaGlsZF0sbSYmcCl7ZD0ocz0ocj0oaT0obz0oYT1jKVtTXXx8KGFbU109e30pKVthLnVuaXF1ZUlEXXx8KG9bYS51bmlxdWVJRF09e30pKVtoXXx8W10pWzBdPT09ayYmclsxXSkmJnJbMl0sYT1zJiZjLmNoaWxkTm9kZXNbc107d2hpbGUoYT0rK3MmJmEmJmFbbF18fChkPXM9MCl8fHUucG9wKCkpaWYoMT09PWEubm9kZVR5cGUmJisrZCYmYT09PWUpe2lbaF09W2sscyxkXTticmVha319ZWxzZSBpZihwJiYoZD1zPShyPShpPShvPShhPWUpW1NdfHwoYVtTXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdfHxbXSlbMF09PT1rJiZyWzFdKSwhMT09PWQpd2hpbGUoYT0rK3MmJmEmJmFbbF18fChkPXM9MCl8fHUucG9wKCkpaWYoKHg/YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ZjoxPT09YS5ub2RlVHlwZSkmJisrZCYmKHAmJigoaT0obz1hW1NdfHwoYVtTXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdPVtrLGRdKSxhPT09ZSkpYnJlYWs7cmV0dXJuKGQtPXYpPT09Z3x8ZCVnPT0wJiYwPD1kL2d9fX0sUFNFVURPOmZ1bmN0aW9uKGUsbyl7dmFyIHQsYT1iLnBzZXVkb3NbZV18fGIuc2V0RmlsdGVyc1tlLnRvTG93ZXJDYXNlKCldfHxzZS5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2UpO3JldHVybiBhW1NdP2Eobyk6MTxhLmxlbmd0aD8odD1bZSxlLCIiLG9dLGIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpP2xlKGZ1bmN0aW9uKGUsdCl7dmFyIG4scj1hKGUsbyksaT1yLmxlbmd0aDt3aGlsZShpLS0pZVtuPVAoZSxyW2ldKV09ISh0W25dPXJbaV0pfSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSwwLHQpfSk6YX19LHBzZXVkb3M6e25vdDpsZShmdW5jdGlvbihlKXt2YXIgcj1bXSxpPVtdLHM9ZihlLnJlcGxhY2UoJCwiJDEiKSk7cmV0dXJuIHNbU10/bGUoZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1zKGUsbnVsbCxyLFtdKSxhPWUubGVuZ3RoO3doaWxlKGEtLSkoaT1vW2FdKSYmKGVbYV09ISh0W2FdPWkpKX0pOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gclswXT1lLHMocixudWxsLG4saSksclswXT1udWxsLCFpLnBvcCgpfX0pLGhhczpsZShmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDA8c2UodCxlKS5sZW5ndGh9fSksY29udGFpbnM6bGUoZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC5yZXBsYWNlKHRlLG5lKSxmdW5jdGlvbihlKXtyZXR1cm4tMTwoZS50ZXh0Q29udGVudHx8byhlKSkuaW5kZXhPZih0KX19KSxsYW5nOmxlKGZ1bmN0aW9uKG4pe3JldHVybiBWLnRlc3Qobnx8IiIpfHxzZS5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIituKSxuPW4ucmVwbGFjZSh0ZSxuZSkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihlKXt2YXIgdDtkb3tpZih0PUU/ZS5sYW5nOmUuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHxlLmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybih0PXQudG9Mb3dlckNhc2UoKSk9PT1ufHwwPT09dC5pbmRleE9mKG4rIi0iKX13aGlsZSgoZT1lLnBhcmVudE5vZGUpJiYxPT09ZS5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGUpe3ZhciB0PW4ubG9jYXRpb24mJm4ubG9jYXRpb24uaGFzaDtyZXR1cm4gdCYmdC5zbGljZSgxKT09PWUuaWR9LHJvb3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1hfSxmb2N1czpmdW5jdGlvbihlKXtyZXR1cm4gZT09PUMuYWN0aXZlRWxlbWVudCYmKCFDLmhhc0ZvY3VzfHxDLmhhc0ZvY3VzKCkpJiYhIShlLnR5cGV8fGUuaHJlZnx8fmUudGFiSW5kZXgpfSxlbmFibGVkOmdlKCExKSxkaXNhYmxlZDpnZSghMCksY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiEhZS5jaGVja2VkfHwib3B0aW9uIj09PXQmJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsITA9PT1lLnNlbGVjdGVkfSxlbXB0eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaWYoZS5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIWIucHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBKLnRlc3QoZS5ub2RlTmFtZSl9LGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBRLnRlc3QoZS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiJidXR0b24iPT09ZS50eXBlfHwiYnV0dG9uIj09PXR9LHRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fCJ0ZXh0Ij09PXQudG9Mb3dlckNhc2UoKSl9LGZpcnN0OnZlKGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDp2ZShmdW5jdGlvbihlLHQpe3JldHVyblt0LTFdfSksZXE6dmUoZnVuY3Rpb24oZSx0LG4pe3JldHVybltuPDA/bit0Om5dfSksZXZlbjp2ZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLG9kZDp2ZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0xO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0OnZlKGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDp0PG4/dDpuOzA8PS0tcjspZS5wdXNoKHIpO3JldHVybiBlfSksZ3Q6dmUoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0Om47KytyPHQ7KWUucHVzaChyKTtyZXR1cm4gZX0pfX0pLnBzZXVkb3MubnRoPWIucHNldWRvcy5lcSx7cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pYi5wc2V1ZG9zW2VdPWRlKGUpO2ZvcihlIGlue3N1Ym1pdDohMCxyZXNldDohMH0pYi5wc2V1ZG9zW2VdPWhlKGUpO2Z1bmN0aW9uIG1lKCl7fWZ1bmN0aW9uIHhlKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGgscj0iIjt0PG47dCsrKXIrPWVbdF0udmFsdWU7cmV0dXJuIHJ9ZnVuY3Rpb24gYmUocyxlLHQpe3ZhciB1PWUuZGlyLGw9ZS5uZXh0LGM9bHx8dSxmPXQmJiJwYXJlbnROb2RlIj09PWMscD1yKys7cmV0dXJuIGUuZmlyc3Q/ZnVuY3Rpb24oZSx0LG4pe3doaWxlKGU9ZVt1XSlpZigxPT09ZS5ub2RlVHlwZXx8ZilyZXR1cm4gcyhlLHQsbik7cmV0dXJuITF9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYT1bayxwXTtpZihuKXt3aGlsZShlPWVbdV0paWYoKDE9PT1lLm5vZGVUeXBlfHxmKSYmcyhlLHQsbikpcmV0dXJuITB9ZWxzZSB3aGlsZShlPWVbdV0paWYoMT09PWUubm9kZVR5cGV8fGYpaWYoaT0obz1lW1NdfHwoZVtTXT17fSkpW2UudW5pcXVlSURdfHwob1tlLnVuaXF1ZUlEXT17fSksbCYmbD09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSllPWVbdV18fGU7ZWxzZXtpZigocj1pW2NdKSYmclswXT09PWsmJnJbMV09PT1wKXJldHVybiBhWzJdPXJbMl07aWYoKGlbY109YSlbMl09cyhlLHQsbikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHdlKGkpe3JldHVybiAxPGkubGVuZ3RoP2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1pLmxlbmd0aDt3aGlsZShyLS0paWYoIWlbcl0oZSx0LG4pKXJldHVybiExO3JldHVybiEwfTppWzBdfWZ1bmN0aW9uIFRlKGUsdCxuLHIsaSl7Zm9yKHZhciBvLGE9W10scz0wLHU9ZS5sZW5ndGgsbD1udWxsIT10O3M8dTtzKyspKG89ZVtzXSkmJihuJiYhbihvLHIsaSl8fChhLnB1c2gobyksbCYmdC5wdXNoKHMpKSk7cmV0dXJuIGF9ZnVuY3Rpb24gQ2UoZCxoLGcsdix5LGUpe3JldHVybiB2JiYhdltTXSYmKHY9Q2UodikpLHkmJiF5W1NdJiYoeT1DZSh5LGUpKSxsZShmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscz1bXSx1PVtdLGw9dC5sZW5ndGgsYz1lfHxmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7cisrKXNlKGUsdFtyXSxuKTtyZXR1cm4gbn0oaHx8IioiLG4ubm9kZVR5cGU/W25dOm4sW10pLGY9IWR8fCFlJiZoP2M6VGUoYyxzLGQsbixyKSxwPWc/eXx8KGU/ZDpsfHx2KT9bXTp0OmY7aWYoZyYmZyhmLHAsbixyKSx2KXtpPVRlKHAsdSksdihpLFtdLG4sciksbz1pLmxlbmd0aDt3aGlsZShvLS0pKGE9aVtvXSkmJihwW3Vbb11dPSEoZlt1W29dXT1hKSl9aWYoZSl7aWYoeXx8ZCl7aWYoeSl7aT1bXSxvPXAubGVuZ3RoO3doaWxlKG8tLSkoYT1wW29dKSYmaS5wdXNoKGZbb109YSk7eShudWxsLHA9W10saSxyKX1vPXAubGVuZ3RoO3doaWxlKG8tLSkoYT1wW29dKSYmLTE8KGk9eT9QKGUsYSk6c1tvXSkmJihlW2ldPSEodFtpXT1hKSl9fWVsc2UgcD1UZShwPT09dD9wLnNwbGljZShsLHAubGVuZ3RoKTpwKSx5P3kobnVsbCx0LHAscik6SC5hcHBseSh0LHApfSl9ZnVuY3Rpb24gRWUoZSl7Zm9yKHZhciBpLHQsbixyPWUubGVuZ3RoLG89Yi5yZWxhdGl2ZVtlWzBdLnR5cGVdLGE9b3x8Yi5yZWxhdGl2ZVsiICJdLHM9bz8xOjAsdT1iZShmdW5jdGlvbihlKXtyZXR1cm4gZT09PWl9LGEsITApLGw9YmUoZnVuY3Rpb24oZSl7cmV0dXJuLTE8UChpLGUpfSxhLCEwKSxjPVtmdW5jdGlvbihlLHQsbil7dmFyIHI9IW8mJihufHx0IT09dyl8fCgoaT10KS5ub2RlVHlwZT91KGUsdCxuKTpsKGUsdCxuKSk7cmV0dXJuIGk9bnVsbCxyfV07czxyO3MrKylpZih0PWIucmVsYXRpdmVbZVtzXS50eXBlXSljPVtiZSh3ZShjKSx0KV07ZWxzZXtpZigodD1iLmZpbHRlcltlW3NdLnR5cGVdLmFwcGx5KG51bGwsZVtzXS5tYXRjaGVzKSlbU10pe2ZvcihuPSsrcztuPHI7bisrKWlmKGIucmVsYXRpdmVbZVtuXS50eXBlXSlicmVhaztyZXR1cm4gQ2UoMTxzJiZ3ZShjKSwxPHMmJnhlKGUuc2xpY2UoMCxzLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09ZVtzLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoJCwiJDEiKSx0LHM8biYmRWUoZS5zbGljZShzLG4pKSxuPHImJkVlKGU9ZS5zbGljZShuKSksbjxyJiZ4ZShlKSl9Yy5wdXNoKHQpfXJldHVybiB3ZShjKX1yZXR1cm4gbWUucHJvdG90eXBlPWIuZmlsdGVycz1iLnBzZXVkb3MsYi5zZXRGaWx0ZXJzPW5ldyBtZSxoPXNlLnRva2VuaXplPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzLHUsbD14W2UrIiAiXTtpZihsKXJldHVybiB0PzA6bC5zbGljZSgwKTthPWUscz1bXSx1PWIucHJlRmlsdGVyO3doaWxlKGEpe2ZvcihvIGluIG4mJiEocj1fLmV4ZWMoYSkpfHwociYmKGE9YS5zbGljZShyWzBdLmxlbmd0aCl8fGEpLHMucHVzaChpPVtdKSksbj0hMSwocj16LmV4ZWMoYSkpJiYobj1yLnNoaWZ0KCksaS5wdXNoKHt2YWx1ZTpuLHR5cGU6clswXS5yZXBsYWNlKCQsIiAiKX0pLGE9YS5zbGljZShuLmxlbmd0aCkpLGIuZmlsdGVyKSEocj1HW29dLmV4ZWMoYSkpfHx1W29dJiYhKHI9dVtvXShyKSl8fChuPXIuc2hpZnQoKSxpLnB1c2goe3ZhbHVlOm4sdHlwZTpvLG1hdGNoZXM6cn0pLGE9YS5zbGljZShuLmxlbmd0aCkpO2lmKCFuKWJyZWFrfXJldHVybiB0P2EubGVuZ3RoOmE/c2UuZXJyb3IoZSk6eChlLHMpLnNsaWNlKDApfSxmPXNlLmNvbXBpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbix2LHksbSx4LHIsaT1bXSxvPVtdLGE9QVtlKyIgIl07aWYoIWEpe3R8fCh0PWgoZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKShhPUVlKHRbbl0pKVtTXT9pLnB1c2goYSk6by5wdXNoKGEpOyhhPUEoZSwodj1vLG09MDwoeT1pKS5sZW5ndGgseD0wPHYubGVuZ3RoLHI9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdT0wLGw9IjAiLGM9ZSYmW10sZj1bXSxwPXcsZD1lfHx4JiZiLmZpbmQuVEFHKCIqIixpKSxoPWsrPW51bGw9PXA/MTpNYXRoLnJhbmRvbSgpfHwuMSxnPWQubGVuZ3RoO2ZvcihpJiYodz10PT1DfHx0fHxpKTtsIT09ZyYmbnVsbCE9KG89ZFtsXSk7bCsrKXtpZih4JiZvKXthPTAsdHx8by5vd25lckRvY3VtZW50PT1DfHwoVChvKSxuPSFFKTt3aGlsZShzPXZbYSsrXSlpZihzKG8sdHx8QyxuKSl7ci5wdXNoKG8pO2JyZWFrfWkmJihrPWgpfW0mJigobz0hcyYmbykmJnUtLSxlJiZjLnB1c2gobykpfWlmKHUrPWwsbSYmbCE9PXUpe2E9MDt3aGlsZShzPXlbYSsrXSlzKGMsZix0LG4pO2lmKGUpe2lmKDA8dSl3aGlsZShsLS0pY1tsXXx8ZltsXXx8KGZbbF09cS5jYWxsKHIpKTtmPVRlKGYpfUguYXBwbHkocixmKSxpJiYhZSYmMDxmLmxlbmd0aCYmMTx1K3kubGVuZ3RoJiZzZS51bmlxdWVTb3J0KHIpfXJldHVybiBpJiYoaz1oLHc9cCksY30sbT9sZShyKTpyKSkpLnNlbGVjdG9yPWV9cmV0dXJuIGF9LGc9c2Uuc2VsZWN0PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZSxjPSFyJiZoKGU9bC5zZWxlY3Rvcnx8ZSk7aWYobj1ufHxbXSwxPT09Yy5sZW5ndGgpe2lmKDI8KG89Y1swXT1jWzBdLnNsaWNlKDApKS5sZW5ndGgmJiJJRCI9PT0oYT1vWzBdKS50eXBlJiY5PT09dC5ub2RlVHlwZSYmRSYmYi5yZWxhdGl2ZVtvWzFdLnR5cGVdKXtpZighKHQ9KGIuZmluZC5JRChhLm1hdGNoZXNbMF0ucmVwbGFjZSh0ZSxuZSksdCl8fFtdKVswXSkpcmV0dXJuIG47bCYmKHQ9dC5wYXJlbnROb2RlKSxlPWUuc2xpY2Uoby5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9aT1HLm5lZWRzQ29udGV4dC50ZXN0KGUpPzA6by5sZW5ndGg7d2hpbGUoaS0tKXtpZihhPW9baV0sYi5yZWxhdGl2ZVtzPWEudHlwZV0pYnJlYWs7aWYoKHU9Yi5maW5kW3NdKSYmKHI9dShhLm1hdGNoZXNbMF0ucmVwbGFjZSh0ZSxuZSksZWUudGVzdChvWzBdLnR5cGUpJiZ5ZSh0LnBhcmVudE5vZGUpfHx0KSkpe2lmKG8uc3BsaWNlKGksMSksIShlPXIubGVuZ3RoJiZ4ZShvKSkpcmV0dXJuIEguYXBwbHkobixyKSxuO2JyZWFrfX19cmV0dXJuKGx8fGYoZSxjKSkocix0LCFFLG4sIXR8fGVlLnRlc3QoZSkmJnllKHQucGFyZW50Tm9kZSl8fHQpLG59LGQuc29ydFN0YWJsZT1TLnNwbGl0KCIiKS5zb3J0KGopLmpvaW4oIiIpPT09UyxkLmRldGVjdER1cGxpY2F0ZXM9ISFsLFQoKSxkLnNvcnREZXRhY2hlZD1jZShmdW5jdGlvbihlKXtyZXR1cm4gMSZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKEMuY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKSl9KSxjZShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLCIjIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0pfHxmZSgidHlwZXxocmVmfGhlaWdodHx3aWR0aCIsZnVuY3Rpb24oZSx0LG4pe2lmKCFuKXJldHVybiBlLmdldEF0dHJpYnV0ZSh0LCJ0eXBlIj09PXQudG9Mb3dlckNhc2UoKT8xOjIpfSksZC5hdHRyaWJ1dGVzJiZjZShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxpbnB1dC8+IixlLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLCIiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgidmFsdWUiKX0pfHxmZSgidmFsdWUiLGZ1bmN0aW9uKGUsdCxuKXtpZighbiYmImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gZS5kZWZhdWx0VmFsdWV9KSxjZShmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIil9KXx8ZmUoUixmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoIW4pcmV0dXJuITA9PT1lW3RdP3QudG9Mb3dlckNhc2UoKToocj1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZyLnNwZWNpZmllZD9yLnZhbHVlOm51bGx9KSxzZX0oQyk7Uy5maW5kPWQsUy5leHByPWQuc2VsZWN0b3JzLFMuZXhwclsiOiJdPVMuZXhwci5wc2V1ZG9zLFMudW5pcXVlU29ydD1TLnVuaXF1ZT1kLnVuaXF1ZVNvcnQsUy50ZXh0PWQuZ2V0VGV4dCxTLmlzWE1MRG9jPWQuaXNYTUwsUy5jb250YWlucz1kLmNvbnRhaW5zLFMuZXNjYXBlU2VsZWN0b3I9ZC5lc2NhcGU7dmFyIGg9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtdLGk9dm9pZCAwIT09bjt3aGlsZSgoZT1lW3RdKSYmOSE9PWUubm9kZVR5cGUpaWYoMT09PWUubm9kZVR5cGUpe2lmKGkmJlMoZSkuaXMobikpYnJlYWs7ci5wdXNoKGUpfXJldHVybiByfSxUPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUpO3JldHVybiBufSxrPVMuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7ZnVuY3Rpb24gQShlLHQpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9dmFyIE49L148KFthLXpdW15cL1wwPjpceDIwXHRcclxuXGZdKilbXHgyMFx0XHJcblxmXSpcLz8+KD86PFwvXDE+fCkkL2k7ZnVuY3Rpb24gaihlLG4scil7cmV0dXJuIG0obik/Uy5ncmVwKGUsZnVuY3Rpb24oZSx0KXtyZXR1cm4hIW4uY2FsbChlLHQsZSkhPT1yfSk6bi5ub2RlVHlwZT9TLmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT09PW4hPT1yfSk6InN0cmluZyIhPXR5cGVvZiBuP1MuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybi0xPGkuY2FsbChuLGUpIT09cn0pOlMuZmlsdGVyKG4sZSxyKX1TLmZpbHRlcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dFswXTtyZXR1cm4gbiYmKGU9Ijpub3QoIitlKyIpIiksMT09PXQubGVuZ3RoJiYxPT09ci5ub2RlVHlwZT9TLmZpbmQubWF0Y2hlc1NlbGVjdG9yKHIsZSk/W3JdOltdOlMuZmluZC5tYXRjaGVzKGUsUy5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfSkpfSxTLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcy5sZW5ndGgsaT10aGlzO2lmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gdGhpcy5wdXNoU3RhY2soUyhlKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodD0wO3Q8cjt0KyspaWYoUy5jb250YWlucyhpW3RdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihuPXRoaXMucHVzaFN0YWNrKFtdKSx0PTA7dDxyO3QrKylTLmZpbmQoZSxpW3RdLG4pO3JldHVybiAxPHI/Uy51bmlxdWVTb3J0KG4pOm59LGZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soaih0aGlzLGV8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soaih0aGlzLGV8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGUpe3JldHVybiEhaih0aGlzLCJzdHJpbmciPT10eXBlb2YgZSYmay50ZXN0KGUpP1MoZSk6ZXx8W10sITEpLmxlbmd0aH19KTt2YXIgRCxxPS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKykpJC87KFMuZm4uaW5pdD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZighZSlyZXR1cm4gdGhpcztpZihuPW58fEQsInN0cmluZyI9PXR5cGVvZiBlKXtpZighKHI9IjwiPT09ZVswXSYmIj4iPT09ZVtlLmxlbmd0aC0xXSYmMzw9ZS5sZW5ndGg/W251bGwsZSxudWxsXTpxLmV4ZWMoZSkpfHwhclsxXSYmdClyZXR1cm4hdHx8dC5qcXVlcnk/KHR8fG4pLmZpbmQoZSk6dGhpcy5jb25zdHJ1Y3Rvcih0KS5maW5kKGUpO2lmKHJbMV0pe2lmKHQ9dCBpbnN0YW5jZW9mIFM/dFswXTp0LFMubWVyZ2UodGhpcyxTLnBhcnNlSFRNTChyWzFdLHQmJnQubm9kZVR5cGU/dC5vd25lckRvY3VtZW50fHx0OkUsITApKSxOLnRlc3QoclsxXSkmJlMuaXNQbGFpbk9iamVjdCh0KSlmb3IociBpbiB0KW0odGhpc1tyXSk/dGhpc1tyXSh0W3JdKTp0aGlzLmF0dHIocix0W3JdKTtyZXR1cm4gdGhpc31yZXR1cm4oaT1FLmdldEVsZW1lbnRCeUlkKHJbMl0pKSYmKHRoaXNbMF09aSx0aGlzLmxlbmd0aD0xKSx0aGlzfXJldHVybiBlLm5vZGVUeXBlPyh0aGlzWzBdPWUsdGhpcy5sZW5ndGg9MSx0aGlzKTptKGUpP3ZvaWQgMCE9PW4ucmVhZHk/bi5yZWFkeShlKTplKFMpOlMubWFrZUFycmF5KGUsdGhpcyl9KS5wcm90b3R5cGU9Uy5mbixEPVMoRSk7dmFyIEw9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sSD17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtmdW5jdGlvbiBPKGUsdCl7d2hpbGUoKGU9ZVt0XSkmJjEhPT1lLm5vZGVUeXBlKTtyZXR1cm4gZX1TLmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGUpe3ZhciB0PVMoZSx0aGlzKSxuPXQubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8bjtlKyspaWYoUy5jb250YWlucyh0aGlzLHRbZV0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtdLGE9InN0cmluZyIhPXR5cGVvZiBlJiZTKGUpO2lmKCFrLnRlc3QoZSkpZm9yKDtyPGk7cisrKWZvcihuPXRoaXNbcl07biYmbiE9PXQ7bj1uLnBhcmVudE5vZGUpaWYobi5ub2RlVHlwZTwxMSYmKGE/LTE8YS5pbmRleChuKToxPT09bi5ub2RlVHlwZSYmUy5maW5kLm1hdGNoZXNTZWxlY3RvcihuLGUpKSl7by5wdXNoKG4pO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjaygxPG8ubGVuZ3RoP1MudW5pcXVlU29ydChvKTpvKX0saW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/InN0cmluZyI9PXR5cGVvZiBlP2kuY2FsbChTKGUpLHRoaXNbMF0pOmkuY2FsbCh0aGlzLGUuanF1ZXJ5P2VbMF06ZSk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUy51bmlxdWVTb3J0KFMubWVyZ2UodGhpcy5nZXQoKSxTKGUsdCkpKSl9LGFkZEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWU/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpfX0pLFMuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmMTEhPT10Lm5vZGVUeXBlP3Q6bnVsbH0scGFyZW50czpmdW5jdGlvbihlKXtyZXR1cm4gaChlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGgoZSwicGFyZW50Tm9kZSIsbil9LG5leHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE8oZSwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihlKXtyZXR1cm4gTyhlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihlKXtyZXR1cm4gaChlLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBoKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBoKGUsIm5leHRTaWJsaW5nIixuKX0scHJldlVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaChlLCJwcmV2aW91c1NpYmxpbmciLG4pfSxzaWJsaW5nczpmdW5jdGlvbihlKXtyZXR1cm4gVCgoZS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxlKX0sY2hpbGRyZW46ZnVuY3Rpb24oZSl7cmV0dXJuIFQoZS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUuY29udGVudERvY3VtZW50JiZyKGUuY29udGVudERvY3VtZW50KT9lLmNvbnRlbnREb2N1bWVudDooQShlLCJ0ZW1wbGF0ZSIpJiYoZT1lLmNvbnRlbnR8fGUpLFMubWVyZ2UoW10sZS5jaGlsZE5vZGVzKSl9fSxmdW5jdGlvbihyLGkpe1MuZm5bcl09ZnVuY3Rpb24oZSx0KXt2YXIgbj1TLm1hcCh0aGlzLGksZSk7cmV0dXJuIlVudGlsIiE9PXIuc2xpY2UoLTUpJiYodD1lKSx0JiYic3RyaW5nIj09dHlwZW9mIHQmJihuPVMuZmlsdGVyKHQsbikpLDE8dGhpcy5sZW5ndGgmJihIW3JdfHxTLnVuaXF1ZVNvcnQobiksTC50ZXN0KHIpJiZuLnJldmVyc2UoKSksdGhpcy5wdXNoU3RhY2sobil9fSk7dmFyIFA9L1teXHgyMFx0XHJcblxmXSsvZztmdW5jdGlvbiBSKGUpe3JldHVybiBlfWZ1bmN0aW9uIE0oZSl7dGhyb3cgZX1mdW5jdGlvbiBJKGUsdCxuLHIpe3ZhciBpO3RyeXtlJiZtKGk9ZS5wcm9taXNlKT9pLmNhbGwoZSkuZG9uZSh0KS5mYWlsKG4pOmUmJm0oaT1lLnRoZW4pP2kuY2FsbChlLHQsbik6dC5hcHBseSh2b2lkIDAsW2VdLnNsaWNlKHIpKX1jYXRjaChlKXtuLmFwcGx5KHZvaWQgMCxbZV0pfX1TLkNhbGxiYWNrcz1mdW5jdGlvbihyKXt2YXIgZSxuO3I9InN0cmluZyI9PXR5cGVvZiByPyhlPXIsbj17fSxTLmVhY2goZS5tYXRjaChQKXx8W10sZnVuY3Rpb24oZSx0KXtuW3RdPSEwfSksbik6Uy5leHRlbmQoe30scik7dmFyIGksdCxvLGEscz1bXSx1PVtdLGw9LTEsYz1mdW5jdGlvbigpe2ZvcihhPWF8fHIub25jZSxvPWk9ITA7dS5sZW5ndGg7bD0tMSl7dD11LnNoaWZ0KCk7d2hpbGUoKytsPHMubGVuZ3RoKSExPT09c1tsXS5hcHBseSh0WzBdLHRbMV0pJiZyLnN0b3BPbkZhbHNlJiYobD1zLmxlbmd0aCx0PSExKX1yLm1lbW9yeXx8KHQ9ITEpLGk9ITEsYSYmKHM9dD9bXToiIil9LGY9e2FkZDpmdW5jdGlvbigpe3JldHVybiBzJiYodCYmIWkmJihsPXMubGVuZ3RoLTEsdS5wdXNoKHQpKSxmdW5jdGlvbiBuKGUpe1MuZWFjaChlLGZ1bmN0aW9uKGUsdCl7bSh0KT9yLnVuaXF1ZSYmZi5oYXModCl8fHMucHVzaCh0KTp0JiZ0Lmxlbmd0aCYmInN0cmluZyIhPT13KHQpJiZuKHQpfSl9KGFyZ3VtZW50cyksdCYmIWkmJmMoKSksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIFMuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oZSx0KXt2YXIgbjt3aGlsZSgtMTwobj1TLmluQXJyYXkodCxzLG4pKSlzLnNwbGljZShuLDEpLG48PWwmJmwtLX0pLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZT8tMTxTLmluQXJyYXkoZSxzKTowPHMubGVuZ3RofSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBzJiYocz1bXSksdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBhPXU9W10scz10PSIiLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIXN9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gYT11PVtdLHR8fGl8fChzPXQ9IiIpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiEhYX0sZmlyZVdpdGg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXx8KHQ9W2UsKHQ9dHx8W10pLnNsaWNlP3Quc2xpY2UoKTp0XSx1LnB1c2godCksaXx8YygpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGYuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFvfX07cmV0dXJuIGZ9LFMuZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihlKXt2YXIgbz1bWyJub3RpZnkiLCJwcm9ncmVzcyIsUy5DYWxsYmFja3MoIm1lbW9yeSIpLFMuQ2FsbGJhY2tzKCJtZW1vcnkiKSwyXSxbInJlc29sdmUiLCJkb25lIixTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwwLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsUy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksUy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksMSwicmVqZWN0ZWQiXV0saT0icGVuZGluZyIsYT17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIHMuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSwiY2F0Y2giOmZ1bmN0aW9uKGUpe3JldHVybiBhLnRoZW4obnVsbCxlKX0scGlwZTpmdW5jdGlvbigpe3ZhciBpPWFyZ3VtZW50cztyZXR1cm4gUy5EZWZlcnJlZChmdW5jdGlvbihyKXtTLmVhY2gobyxmdW5jdGlvbihlLHQpe3ZhciBuPW0oaVt0WzRdXSkmJmlbdFs0XV07c1t0WzFdXShmdW5jdGlvbigpe3ZhciBlPW4mJm4uYXBwbHkodGhpcyxhcmd1bWVudHMpO2UmJm0oZS5wcm9taXNlKT9lLnByb21pc2UoKS5wcm9ncmVzcyhyLm5vdGlmeSkuZG9uZShyLnJlc29sdmUpLmZhaWwoci5yZWplY3QpOnJbdFswXSsiV2l0aCJdKHRoaXMsbj9bZV06YXJndW1lbnRzKX0pfSksaT1udWxsfSkucHJvbWlzZSgpfSx0aGVuOmZ1bmN0aW9uKHQsbixyKXt2YXIgdT0wO2Z1bmN0aW9uIGwoaSxvLGEscyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcyxyPWFyZ3VtZW50cyxlPWZ1bmN0aW9uKCl7dmFyIGUsdDtpZighKGk8dSkpe2lmKChlPWEuYXBwbHkobixyKSk9PT1vLnByb21pc2UoKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb24iKTt0PWUmJigib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSYmZS50aGVuLG0odCk/cz90LmNhbGwoZSxsKHUsbyxSLHMpLGwodSxvLE0scykpOih1KyssdC5jYWxsKGUsbCh1LG8sUixzKSxsKHUsbyxNLHMpLGwodSxvLFIsby5ub3RpZnlXaXRoKSkpOihhIT09UiYmKG49dm9pZCAwLHI9W2VdKSwoc3x8by5yZXNvbHZlV2l0aCkobixyKSl9fSx0PXM/ZTpmdW5jdGlvbigpe3RyeXtlKCl9Y2F0Y2goZSl7Uy5EZWZlcnJlZC5leGNlcHRpb25Ib29rJiZTLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2soZSx0LnN0YWNrVHJhY2UpLHU8PWkrMSYmKGEhPT1NJiYobj12b2lkIDAscj1bZV0pLG8ucmVqZWN0V2l0aChuLHIpKX19O2k/dCgpOihTLkRlZmVycmVkLmdldFN0YWNrSG9vayYmKHQuc3RhY2tUcmFjZT1TLkRlZmVycmVkLmdldFN0YWNrSG9vaygpKSxDLnNldFRpbWVvdXQodCkpfX1yZXR1cm4gUy5EZWZlcnJlZChmdW5jdGlvbihlKXtvWzBdWzNdLmFkZChsKDAsZSxtKHIpP3I6UixlLm5vdGlmeVdpdGgpKSxvWzFdWzNdLmFkZChsKDAsZSxtKHQpP3Q6UikpLG9bMl1bM10uYWRkKGwoMCxlLG0obik/bjpNKSl9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWU/Uy5leHRlbmQoZSxhKTphfX0scz17fTtyZXR1cm4gUy5lYWNoKG8sZnVuY3Rpb24oZSx0KXt2YXIgbj10WzJdLHI9dFs1XTthW3RbMV1dPW4uYWRkLHImJm4uYWRkKGZ1bmN0aW9uKCl7aT1yfSxvWzMtZV1bMl0uZGlzYWJsZSxvWzMtZV1bM10uZGlzYWJsZSxvWzBdWzJdLmxvY2ssb1swXVszXS5sb2NrKSxuLmFkZCh0WzNdLmZpcmUpLHNbdFswXV09ZnVuY3Rpb24oKXtyZXR1cm4gc1t0WzBdKyJXaXRoIl0odGhpcz09PXM/dm9pZCAwOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxzW3RbMF0rIldpdGgiXT1uLmZpcmVXaXRofSksYS5wcm9taXNlKHMpLGUmJmUuY2FsbChzLHMpLHN9LHdoZW46ZnVuY3Rpb24oZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aCx0PW4scj1BcnJheSh0KSxpPXMuY2FsbChhcmd1bWVudHMpLG89Uy5EZWZlcnJlZCgpLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JbdF09dGhpcyxpW3RdPTE8YXJndW1lbnRzLmxlbmd0aD9zLmNhbGwoYXJndW1lbnRzKTplLC0tbnx8by5yZXNvbHZlV2l0aChyLGkpfX07aWYobjw9MSYmKEkoZSxvLmRvbmUoYSh0KSkucmVzb2x2ZSxvLnJlamVjdCwhbiksInBlbmRpbmciPT09by5zdGF0ZSgpfHxtKGlbdF0mJmlbdF0udGhlbikpKXJldHVybiBvLnRoZW4oKTt3aGlsZSh0LS0pSShpW3RdLGEodCksby5yZWplY3QpO3JldHVybiBvLnByb21pc2UoKX19KTt2YXIgVz0vXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztTLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2s9ZnVuY3Rpb24oZSx0KXtDLmNvbnNvbGUmJkMuY29uc29sZS53YXJuJiZlJiZXLnRlc3QoZS5uYW1lKSYmQy5jb25zb2xlLndhcm4oImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246ICIrZS5tZXNzYWdlLGUuc3RhY2ssdCl9LFMucmVhZHlFeGNlcHRpb249ZnVuY3Rpb24oZSl7Qy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgZX0pfTt2YXIgRj1TLkRlZmVycmVkKCk7ZnVuY3Rpb24gQigpe0UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiksQy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixCKSxTLnJlYWR5KCl9Uy5mbi5yZWFkeT1mdW5jdGlvbihlKXtyZXR1cm4gRi50aGVuKGUpWyJjYXRjaCJdKGZ1bmN0aW9uKGUpe1MucmVhZHlFeGNlcHRpb24oZSl9KSx0aGlzfSxTLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxyZWFkeTpmdW5jdGlvbihlKXsoITA9PT1lPy0tUy5yZWFkeVdhaXQ6Uy5pc1JlYWR5KXx8KFMuaXNSZWFkeT0hMCkhPT1lJiYwPC0tUy5yZWFkeVdhaXR8fEYucmVzb2x2ZVdpdGgoRSxbU10pfX0pLFMucmVhZHkudGhlbj1GLnRoZW4sImNvbXBsZXRlIj09PUUucmVhZHlTdGF0ZXx8ImxvYWRpbmciIT09RS5yZWFkeVN0YXRlJiYhRS5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGw/Qy5zZXRUaW1lb3V0KFMucmVhZHkpOihFLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEIpLEMuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsQikpO3ZhciAkPWZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZhciBzPTAsdT1lLmxlbmd0aCxsPW51bGw9PW47aWYoIm9iamVjdCI9PT13KG4pKWZvcihzIGluIGk9ITAsbikkKGUsdCxzLG5bc10sITAsbyxhKTtlbHNlIGlmKHZvaWQgMCE9PXImJihpPSEwLG0ocil8fChhPSEwKSxsJiYoYT8odC5jYWxsKGUsciksdD1udWxsKToobD10LHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBsLmNhbGwoUyhlKSxuKX0pKSx0KSlmb3IoO3M8dTtzKyspdChlW3NdLG4sYT9yOnIuY2FsbChlW3NdLHMsdChlW3NdLG4pKSk7cmV0dXJuIGk/ZTpsP3QuY2FsbChlKTp1P3QoZVswXSxuKTpvfSxfPS9eLW1zLS8sej0vLShbYS16XSkvZztmdW5jdGlvbiBVKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBYKGUpe3JldHVybiBlLnJlcGxhY2UoXywibXMtIikucmVwbGFjZSh6LFUpfXZhciBWPWZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZS5ub2RlVHlwZXx8OT09PWUubm9kZVR5cGV8fCErZS5ub2RlVHlwZX07ZnVuY3Rpb24gRygpe3RoaXMuZXhwYW5kbz1TLmV4cGFuZG8rRy51aWQrK31HLnVpZD0xLEcucHJvdG90eXBlPXtjYWNoZTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHR8fCh0PXt9LFYoZSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT10Ok9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHRoaXMuZXhwYW5kbyx7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KSkpLHR9LHNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT10aGlzLmNhY2hlKGUpO2lmKCJzdHJpbmciPT10eXBlb2YgdClpW1godCldPW47ZWxzZSBmb3IociBpbiB0KWlbWChyKV09dFtyXTtyZXR1cm4gaX0sZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5jYWNoZShlKTplW3RoaXMuZXhwYW5kb10mJmVbdGhpcy5leHBhbmRvXVtYKHQpXX0sYWNjZXNzOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dHx8dCYmInN0cmluZyI9PXR5cGVvZiB0JiZ2b2lkIDA9PT1uP3RoaXMuZ2V0KGUsdCk6KHRoaXMuc2V0KGUsdCxuKSx2b2lkIDAhPT1uP246dCl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9ZVt0aGlzLmV4cGFuZG9dO2lmKHZvaWQgMCE9PXIpe2lmKHZvaWQgMCE9PXQpe249KHQ9QXJyYXkuaXNBcnJheSh0KT90Lm1hcChYKToodD1YKHQpKWluIHI/W3RdOnQubWF0Y2goUCl8fFtdKS5sZW5ndGg7d2hpbGUobi0tKWRlbGV0ZSByW3Rbbl1dfSh2b2lkIDA9PT10fHxTLmlzRW1wdHlPYmplY3QocikpJiYoZS5ub2RlVHlwZT9lW3RoaXMuZXhwYW5kb109dm9pZCAwOmRlbGV0ZSBlW3RoaXMuZXhwYW5kb10pfX0saGFzRGF0YTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHZvaWQgMCE9PXQmJiFTLmlzRW1wdHlPYmplY3QodCl9fTt2YXIgWT1uZXcgRyxRPW5ldyBHLEo9L14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLyxLPS9bQS1aXS9nO2Z1bmN0aW9uIFooZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09biYmMT09PWUubm9kZVR5cGUpaWYocj0iZGF0YS0iK3QucmVwbGFjZShLLCItJCYiKS50b0xvd2VyQ2FzZSgpLCJzdHJpbmciPT10eXBlb2Yobj1lLmdldEF0dHJpYnV0ZShyKSkpe3RyeXtuPSJ0cnVlIj09PShpPW4pfHwiZmFsc2UiIT09aSYmKCJudWxsIj09PWk/bnVsbDppPT09K2krIiI/K2k6Si50ZXN0KGkpP0pTT04ucGFyc2UoaSk6aSl9Y2F0Y2goZSl7fVEuc2V0KGUsdCxuKX1lbHNlIG49dm9pZCAwO3JldHVybiBufVMuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBRLmhhc0RhdGEoZSl8fFkuaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFEuYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe1EucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gWS5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe1kucmVtb3ZlKGUsdCl9fSksUy5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24obixlKXt2YXIgdCxyLGksbz10aGlzWzBdLGE9byYmby5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PW4pe2lmKHRoaXMubGVuZ3RoJiYoaT1RLmdldChvKSwxPT09by5ub2RlVHlwZSYmIVkuZ2V0KG8sImhhc0RhdGFBdHRycyIpKSl7dD1hLmxlbmd0aDt3aGlsZSh0LS0pYVt0XSYmMD09PShyPWFbdF0ubmFtZSkuaW5kZXhPZigiZGF0YS0iKSYmKHI9WChyLnNsaWNlKDUpKSxaKG8scixpW3JdKSk7WS5zZXQobywiaGFzRGF0YUF0dHJzIiwhMCl9cmV0dXJuIGl9cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBuP3RoaXMuZWFjaChmdW5jdGlvbigpe1Euc2V0KHRoaXMsbil9KTokKHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ7aWYobyYmdm9pZCAwPT09ZSlyZXR1cm4gdm9pZCAwIT09KHQ9US5nZXQobyxuKSk/dDp2b2lkIDAhPT0odD1aKG8sbikpP3Q6dm9pZCAwO3RoaXMuZWFjaChmdW5jdGlvbigpe1Euc2V0KHRoaXMsbixlKX0pfSxudWxsLGUsMTxhcmd1bWVudHMubGVuZ3RoLG51bGwsITApfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtRLnJlbW92ZSh0aGlzLGUpfSl9fSksUy5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZihlKXJldHVybiB0PSh0fHwiZngiKSsicXVldWUiLHI9WS5nZXQoZSx0KSxuJiYoIXJ8fEFycmF5LmlzQXJyYXkobik/cj1ZLmFjY2VzcyhlLHQsUy5tYWtlQXJyYXkobikpOnIucHVzaChuKSkscnx8W119LGRlcXVldWU6ZnVuY3Rpb24oZSx0KXt0PXR8fCJmeCI7dmFyIG49Uy5xdWV1ZShlLHQpLHI9bi5sZW5ndGgsaT1uLnNoaWZ0KCksbz1TLl9xdWV1ZUhvb2tzKGUsdCk7ImlucHJvZ3Jlc3MiPT09aSYmKGk9bi5zaGlmdCgpLHItLSksaSYmKCJmeCI9PT10JiZuLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgby5zdG9wLGkuY2FsbChlLGZ1bmN0aW9uKCl7Uy5kZXF1ZXVlKGUsdCl9LG8pKSwhciYmbyYmby5lbXB0eS5maXJlKCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dCsicXVldWVIb29rcyI7cmV0dXJuIFkuZ2V0KGUsbil8fFkuYWNjZXNzKGUsbix7ZW1wdHk6Uy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7WS5yZW1vdmUoZSxbdCsicXVldWUiLG5dKX0pfSl9fSksUy5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKHQsbil7dmFyIGU9MjtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJihuPXQsdD0iZngiLGUtLSksYXJndW1lbnRzLmxlbmd0aDxlP1MucXVldWUodGhpc1swXSx0KTp2b2lkIDA9PT1uP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9Uy5xdWV1ZSh0aGlzLHQsbik7Uy5fcXVldWVIb29rcyh0aGlzLHQpLCJmeCI9PT10JiYiaW5wcm9ncmVzcyIhPT1lWzBdJiZTLmRlcXVldWUodGhpcyx0KX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtTLmRlcXVldWUodGhpcyxlKX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0xLGk9Uy5EZWZlcnJlZCgpLG89dGhpcyxhPXRoaXMubGVuZ3RoLHM9ZnVuY3Rpb24oKXstLXJ8fGkucmVzb2x2ZVdpdGgobyxbb10pfTsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT12b2lkIDApLGU9ZXx8ImZ4Ijt3aGlsZShhLS0pKG49WS5nZXQob1thXSxlKyJxdWV1ZUhvb2tzIikpJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKHMpKTtyZXR1cm4gcygpLGkucHJvbWlzZSh0KX19KTt2YXIgZWU9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsdGU9bmV3IFJlZ0V4cCgiXig/OihbKy1dKT18KSgiK2VlKyIpKFthLXolXSopJCIsImkiKSxuZT1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLHJlPUUuZG9jdW1lbnRFbGVtZW50LGllPWZ1bmN0aW9uKGUpe3JldHVybiBTLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKX0sb2U9e2NvbXBvc2VkOiEwfTtyZS5nZXRSb290Tm9kZSYmKGllPWZ1bmN0aW9uKGUpe3JldHVybiBTLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKXx8ZS5nZXRSb290Tm9kZShvZSk9PT1lLm93bmVyRG9jdW1lbnR9KTt2YXIgYWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ibm9uZSI9PT0oZT10fHxlKS5zdHlsZS5kaXNwbGF5fHwiIj09PWUuc3R5bGUuZGlzcGxheSYmaWUoZSkmJiJub25lIj09PVMuY3NzKGUsImRpc3BsYXkiKX07ZnVuY3Rpb24gc2UoZSx0LG4scil7dmFyIGksbyxhPTIwLHM9cj9mdW5jdGlvbigpe3JldHVybiByLmN1cigpfTpmdW5jdGlvbigpe3JldHVybiBTLmNzcyhlLHQsIiIpfSx1PXMoKSxsPW4mJm5bM118fChTLmNzc051bWJlclt0XT8iIjoicHgiKSxjPWUubm9kZVR5cGUmJihTLmNzc051bWJlclt0XXx8InB4IiE9PWwmJit1KSYmdGUuZXhlYyhTLmNzcyhlLHQpKTtpZihjJiZjWzNdIT09bCl7dS89MixsPWx8fGNbM10sYz0rdXx8MTt3aGlsZShhLS0pUy5zdHlsZShlLHQsYytsKSwoMS1vKSooMS0obz1zKCkvdXx8LjUpKTw9MCYmKGE9MCksYy89bztjKj0yLFMuc3R5bGUoZSx0LGMrbCksbj1ufHxbXX1yZXR1cm4gbiYmKGM9K2N8fCt1fHwwLGk9blsxXT9jKyhuWzFdKzEpKm5bMl06K25bMl0sciYmKHIudW5pdD1sLHIuc3RhcnQ9YyxyLmVuZD1pKSksaX12YXIgdWU9e307ZnVuY3Rpb24gbGUoZSx0KXtmb3IodmFyIG4scixpLG8sYSxzLHUsbD1bXSxjPTAsZj1lLmxlbmd0aDtjPGY7YysrKShyPWVbY10pLnN0eWxlJiYobj1yLnN0eWxlLmRpc3BsYXksdD8oIm5vbmUiPT09biYmKGxbY109WS5nZXQociwiZGlzcGxheSIpfHxudWxsLGxbY118fChyLnN0eWxlLmRpc3BsYXk9IiIpKSwiIj09PXIuc3R5bGUuZGlzcGxheSYmYWUocikmJihsW2NdPSh1PWE9bz12b2lkIDAsYT0oaT1yKS5vd25lckRvY3VtZW50LHM9aS5ub2RlTmFtZSwodT11ZVtzXSl8fChvPWEuYm9keS5hcHBlbmRDaGlsZChhLmNyZWF0ZUVsZW1lbnQocykpLHU9Uy5jc3MobywiZGlzcGxheSIpLG8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKSwibm9uZSI9PT11JiYodT0iYmxvY2siKSx1ZVtzXT11KSkpKToibm9uZSIhPT1uJiYobFtjXT0ibm9uZSIsWS5zZXQociwiZGlzcGxheSIsbikpKTtmb3IoYz0wO2M8ZjtjKyspbnVsbCE9bFtjXSYmKGVbY10uc3R5bGUuZGlzcGxheT1sW2NdKTtyZXR1cm4gZX1TLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbigpe3JldHVybiBsZSh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBsZSh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGU/ZT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXthZSh0aGlzKT9TKHRoaXMpLnNob3coKTpTKHRoaXMpLmhpZGUoKX0pfX0pO3ZhciBjZSxmZSxwZT0vXig/OmNoZWNrYm94fHJhZGlvKSQvaSxkZT0vPChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKikvaSxoZT0vXiR8Xm1vZHVsZSR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2k7Y2U9RS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuYXBwZW5kQ2hpbGQoRS5jcmVhdGVFbGVtZW50KCJkaXYiKSksKGZlPUUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSxmZS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIiksZmUuc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLGNlLmFwcGVuZENoaWxkKGZlKSx5LmNoZWNrQ2xvbmU9Y2UuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGNlLmlubmVySFRNTD0iPHRleHRhcmVhPng8L3RleHRhcmVhPiIseS5ub0Nsb25lQ2hlY2tlZD0hIWNlLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZSxjZS5pbm5lckhUTUw9IjxvcHRpb24+PC9vcHRpb24+Iix5Lm9wdGlvbj0hIWNlLmxhc3RDaGlsZDt2YXIgZ2U9e3RoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTtmdW5jdGlvbiB2ZShlLHQpe3ZhciBuO3JldHVybiBuPSJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKHR8fCIqIik6InVuZGVmaW5lZCIhPXR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6W10sdm9pZCAwPT09dHx8dCYmQShlLHQpP1MubWVyZ2UoW2VdLG4pOm59ZnVuY3Rpb24geWUoZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspWS5zZXQoZVtuXSwiZ2xvYmFsRXZhbCIsIXR8fFkuZ2V0KHRbbl0sImdsb2JhbEV2YWwiKSl9Z2UudGJvZHk9Z2UudGZvb3Q9Z2UuY29sZ3JvdXA9Z2UuY2FwdGlvbj1nZS50aGVhZCxnZS50aD1nZS50ZCx5Lm9wdGlvbnx8KGdlLm9wdGdyb3VwPWdlLm9wdGlvbj1bMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdKTt2YXIgbWU9Lzx8JiM/XHcrOy87ZnVuY3Rpb24geGUoZSx0LG4scixpKXtmb3IodmFyIG8sYSxzLHUsbCxjLGY9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscD1bXSxkPTAsaD1lLmxlbmd0aDtkPGg7ZCsrKWlmKChvPWVbZF0pfHwwPT09bylpZigib2JqZWN0Ij09PXcobykpUy5tZXJnZShwLG8ubm9kZVR5cGU/W29dOm8pO2Vsc2UgaWYobWUudGVzdChvKSl7YT1hfHxmLmFwcGVuZENoaWxkKHQuY3JlYXRlRWxlbWVudCgiZGl2IikpLHM9KGRlLmV4ZWMobyl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksdT1nZVtzXXx8Z2UuX2RlZmF1bHQsYS5pbm5lckhUTUw9dVsxXStTLmh0bWxQcmVmaWx0ZXIobykrdVsyXSxjPXVbMF07d2hpbGUoYy0tKWE9YS5sYXN0Q2hpbGQ7Uy5tZXJnZShwLGEuY2hpbGROb2RlcyksKGE9Zi5maXJzdENoaWxkKS50ZXh0Q29udGVudD0iIn1lbHNlIHAucHVzaCh0LmNyZWF0ZVRleHROb2RlKG8pKTtmLnRleHRDb250ZW50PSIiLGQ9MDt3aGlsZShvPXBbZCsrXSlpZihyJiYtMTxTLmluQXJyYXkobyxyKSlpJiZpLnB1c2gobyk7ZWxzZSBpZihsPWllKG8pLGE9dmUoZi5hcHBlbmRDaGlsZChvKSwic2NyaXB0IiksbCYmeWUoYSksbil7Yz0wO3doaWxlKG89YVtjKytdKWhlLnRlc3Qoby50eXBlfHwiIikmJm4ucHVzaChvKX1yZXR1cm4gZn12YXIgYmU9L14oW14uXSopKD86XC4oLispfCkvO2Z1bmN0aW9uIHdlKCl7cmV0dXJuITB9ZnVuY3Rpb24gVGUoKXtyZXR1cm4hMX1mdW5jdGlvbiBDZShlLHQpe3JldHVybiBlPT09ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIEUuYWN0aXZlRWxlbWVudH1jYXRjaChlKXt9fSgpPT0oImZvY3VzIj09PXQpfWZ1bmN0aW9uIEVlKGUsdCxuLHIsaSxvKXt2YXIgYSxzO2lmKCJvYmplY3QiPT10eXBlb2YgdCl7Zm9yKHMgaW4ic3RyaW5nIiE9dHlwZW9mIG4mJihyPXJ8fG4sbj12b2lkIDApLHQpRWUoZSxzLG4scix0W3NdLG8pO3JldHVybiBlfWlmKG51bGw9PXImJm51bGw9PWk/KGk9bixyPW49dm9pZCAwKTpudWxsPT1pJiYoInN0cmluZyI9PXR5cGVvZiBuPyhpPXIscj12b2lkIDApOihpPXIscj1uLG49dm9pZCAwKSksITE9PT1pKWk9VGU7ZWxzZSBpZighaSlyZXR1cm4gZTtyZXR1cm4gMT09PW8mJihhPWksKGk9ZnVuY3Rpb24oZSl7cmV0dXJuIFMoKS5vZmYoZSksYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KS5ndWlkPWEuZ3VpZHx8KGEuZ3VpZD1TLmd1aWQrKykpLGUuZWFjaChmdW5jdGlvbigpe1MuZXZlbnQuYWRkKHRoaXMsdCxpLHIsbil9KX1mdW5jdGlvbiBTZShlLGksbyl7bz8oWS5zZXQoZSxpLCExKSxTLmV2ZW50LmFkZChlLGkse25hbWVzcGFjZTohMSxoYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1ZLmdldCh0aGlzLGkpO2lmKDEmZS5pc1RyaWdnZXImJnRoaXNbaV0pe2lmKHIubGVuZ3RoKShTLmV2ZW50LnNwZWNpYWxbaV18fHt9KS5kZWxlZ2F0ZVR5cGUmJmUuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZihyPXMuY2FsbChhcmd1bWVudHMpLFkuc2V0KHRoaXMsaSxyKSx0PW8odGhpcyxpKSx0aGlzW2ldKCksciE9PShuPVkuZ2V0KHRoaXMsaSkpfHx0P1kuc2V0KHRoaXMsaSwhMSk6bj17fSxyIT09bilyZXR1cm4gZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCksbiYmbi52YWx1ZX1lbHNlIHIubGVuZ3RoJiYoWS5zZXQodGhpcyxpLHt2YWx1ZTpTLmV2ZW50LnRyaWdnZXIoUy5leHRlbmQoclswXSxTLkV2ZW50LnByb3RvdHlwZSksci5zbGljZSgxKSx0aGlzKX0pLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfX0pKTp2b2lkIDA9PT1ZLmdldChlLGkpJiZTLmV2ZW50LmFkZChlLGksd2UpfVMuZXZlbnQ9e2dsb2JhbDp7fSxhZGQ6ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixwLGQsaCxnLHY9WS5nZXQodCk7aWYoVih0KSl7bi5oYW5kbGVyJiYobj0obz1uKS5oYW5kbGVyLGk9by5zZWxlY3RvciksaSYmUy5maW5kLm1hdGNoZXNTZWxlY3RvcihyZSxpKSxuLmd1aWR8fChuLmd1aWQ9Uy5ndWlkKyspLCh1PXYuZXZlbnRzKXx8KHU9di5ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSksKGE9di5oYW5kbGUpfHwoYT12LmhhbmRsZT1mdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIFMmJlMuZXZlbnQudHJpZ2dlcmVkIT09ZS50eXBlP1MuZXZlbnQuZGlzcGF0Y2guYXBwbHkodCxhcmd1bWVudHMpOnZvaWQgMH0pLGw9KGU9KGV8fCIiKS5tYXRjaChQKXx8WyIiXSkubGVuZ3RoO3doaWxlKGwtLSlkPWc9KHM9YmUuZXhlYyhlW2xdKXx8W10pWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkJiYoZj1TLmV2ZW50LnNwZWNpYWxbZF18fHt9LGQ9KGk/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGQsZj1TLmV2ZW50LnNwZWNpYWxbZF18fHt9LGM9Uy5leHRlbmQoe3R5cGU6ZCxvcmlnVHlwZTpnLGRhdGE6cixoYW5kbGVyOm4sZ3VpZDpuLmd1aWQsc2VsZWN0b3I6aSxuZWVkc0NvbnRleHQ6aSYmUy5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KGkpLG5hbWVzcGFjZTpoLmpvaW4oIi4iKX0sbyksKHA9dVtkXSl8fCgocD11W2RdPVtdKS5kZWxlZ2F0ZUNvdW50PTAsZi5zZXR1cCYmITEhPT1mLnNldHVwLmNhbGwodCxyLGgsYSl8fHQuYWRkRXZlbnRMaXN0ZW5lciYmdC5hZGRFdmVudExpc3RlbmVyKGQsYSkpLGYuYWRkJiYoZi5hZGQuY2FsbCh0LGMpLGMuaGFuZGxlci5ndWlkfHwoYy5oYW5kbGVyLmd1aWQ9bi5ndWlkKSksaT9wLnNwbGljZShwLmRlbGVnYXRlQ291bnQrKywwLGMpOnAucHVzaChjKSxTLmV2ZW50Lmdsb2JhbFtkXT0hMCl9fSxyZW1vdmU6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixwLGQsaCxnLHY9WS5oYXNEYXRhKGUpJiZZLmdldChlKTtpZih2JiYodT12LmV2ZW50cykpe2w9KHQ9KHR8fCIiKS5tYXRjaChQKXx8WyIiXSkubGVuZ3RoO3doaWxlKGwtLSlpZihkPWc9KHM9YmUuZXhlYyh0W2xdKXx8W10pWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkKXtmPVMuZXZlbnQuc3BlY2lhbFtkXXx8e30scD11W2Q9KHI/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGRdfHxbXSxzPXNbMl0mJm5ldyBSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiksYT1vPXAubGVuZ3RoO3doaWxlKG8tLSljPXBbb10sIWkmJmchPT1jLm9yaWdUeXBlfHxuJiZuLmd1aWQhPT1jLmd1aWR8fHMmJiFzLnRlc3QoYy5uYW1lc3BhY2UpfHxyJiZyIT09Yy5zZWxlY3RvciYmKCIqKiIhPT1yfHwhYy5zZWxlY3Rvcil8fChwLnNwbGljZShvLDEpLGMuc2VsZWN0b3ImJnAuZGVsZWdhdGVDb3VudC0tLGYucmVtb3ZlJiZmLnJlbW92ZS5jYWxsKGUsYykpO2EmJiFwLmxlbmd0aCYmKGYudGVhcmRvd24mJiExIT09Zi50ZWFyZG93bi5jYWxsKGUsaCx2LmhhbmRsZSl8fFMucmVtb3ZlRXZlbnQoZSxkLHYuaGFuZGxlKSxkZWxldGUgdVtkXSl9ZWxzZSBmb3IoZCBpbiB1KVMuZXZlbnQucmVtb3ZlKGUsZCt0W2xdLG4sciwhMCk7Uy5pc0VtcHR5T2JqZWN0KHUpJiZZLnJlbW92ZShlLCJoYW5kbGUgZXZlbnRzIil9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksdT1TLmV2ZW50LmZpeChlKSxsPShZLmdldCh0aGlzLCJldmVudHMiKXx8T2JqZWN0LmNyZWF0ZShudWxsKSlbdS50eXBlXXx8W10sYz1TLmV2ZW50LnNwZWNpYWxbdS50eXBlXXx8e307Zm9yKHNbMF09dSx0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKylzW3RdPWFyZ3VtZW50c1t0XTtpZih1LmRlbGVnYXRlVGFyZ2V0PXRoaXMsIWMucHJlRGlzcGF0Y2h8fCExIT09Yy5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsdSkpe2E9Uy5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsdSxsKSx0PTA7d2hpbGUoKGk9YVt0KytdKSYmIXUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7dS5jdXJyZW50VGFyZ2V0PWkuZWxlbSxuPTA7d2hpbGUoKG89aS5oYW5kbGVyc1tuKytdKSYmIXUuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSl1LnJuYW1lc3BhY2UmJiExIT09by5uYW1lc3BhY2UmJiF1LnJuYW1lc3BhY2UudGVzdChvLm5hbWVzcGFjZSl8fCh1LmhhbmRsZU9iaj1vLHUuZGF0YT1vLmRhdGEsdm9pZCAwIT09KHI9KChTLmV2ZW50LnNwZWNpYWxbby5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fG8uaGFuZGxlcikuYXBwbHkoaS5lbGVtLHMpKSYmITE9PT0odS5yZXN1bHQ9cikmJih1LnByZXZlbnREZWZhdWx0KCksdS5zdG9wUHJvcGFnYXRpb24oKSkpfXJldHVybiBjLnBvc3REaXNwYXRjaCYmYy5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLHUpLHUucmVzdWx0fX0saGFuZGxlcnM6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhLHM9W10sdT10LmRlbGVnYXRlQ291bnQsbD1lLnRhcmdldDtpZih1JiZsLm5vZGVUeXBlJiYhKCJjbGljayI9PT1lLnR5cGUmJjE8PWUuYnV0dG9uKSlmb3IoO2whPT10aGlzO2w9bC5wYXJlbnROb2RlfHx0aGlzKWlmKDE9PT1sLm5vZGVUeXBlJiYoImNsaWNrIiE9PWUudHlwZXx8ITAhPT1sLmRpc2FibGVkKSl7Zm9yKG89W10sYT17fSxuPTA7bjx1O24rKyl2b2lkIDA9PT1hW2k9KHI9dFtuXSkuc2VsZWN0b3IrIiAiXSYmKGFbaV09ci5uZWVkc0NvbnRleHQ/LTE8UyhpLHRoaXMpLmluZGV4KGwpOlMuZmluZChpLHRoaXMsbnVsbCxbbF0pLmxlbmd0aCksYVtpXSYmby5wdXNoKHIpO28ubGVuZ3RoJiZzLnB1c2goe2VsZW06bCxoYW5kbGVyczpvfSl9cmV0dXJuIGw9dGhpcyx1PHQubGVuZ3RoJiZzLnB1c2goe2VsZW06bCxoYW5kbGVyczp0LnNsaWNlKHUpfSksc30sYWRkUHJvcDpmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLkV2ZW50LnByb3RvdHlwZSx0LHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6bShlKT9mdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gZSh0aGlzLm9yaWdpbmFsRXZlbnQpfTpmdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50W3RdfSxzZXQ6ZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZX0pfX0pfSxmaXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbUy5leHBhbmRvXT9lOm5ldyBTLkV2ZW50KGUpfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sY2xpY2s6e3NldHVwOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXN8fGU7cmV0dXJuIHBlLnRlc3QodC50eXBlKSYmdC5jbGljayYmQSh0LCJpbnB1dCIpJiZTZSh0LCJjbGljayIsd2UpLCExfSx0cmlnZ2VyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXN8fGU7cmV0dXJuIHBlLnRlc3QodC50eXBlKSYmdC5jbGljayYmQSh0LCJpbnB1dCIpJiZTZSh0LCJjbGljayIpLCEwfSxfZGVmYXVsdDpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDtyZXR1cm4gcGUudGVzdCh0LnR5cGUpJiZ0LmNsaWNrJiZBKHQsImlucHV0IikmJlkuZ2V0KHQsImNsaWNrIil8fEEodCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7dm9pZCAwIT09ZS5yZXN1bHQmJmUub3JpZ2luYWxFdmVudCYmKGUub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1lLnJlc3VsdCl9fX19LFMucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbil9LFMuRXZlbnQ9ZnVuY3Rpb24oZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBTLkV2ZW50KSlyZXR1cm4gbmV3IFMuRXZlbnQoZSx0KTtlJiZlLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkfHx2b2lkIDA9PT1lLmRlZmF1bHRQcmV2ZW50ZWQmJiExPT09ZS5yZXR1cm5WYWx1ZT93ZTpUZSx0aGlzLnRhcmdldD1lLnRhcmdldCYmMz09PWUudGFyZ2V0Lm5vZGVUeXBlP2UudGFyZ2V0LnBhcmVudE5vZGU6ZS50YXJnZXQsdGhpcy5jdXJyZW50VGFyZ2V0PWUuY3VycmVudFRhcmdldCx0aGlzLnJlbGF0ZWRUYXJnZXQ9ZS5yZWxhdGVkVGFyZ2V0KTp0aGlzLnR5cGU9ZSx0JiZTLmV4dGVuZCh0aGlzLHQpLHRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHxEYXRlLm5vdygpLHRoaXNbUy5leHBhbmRvXT0hMH0sUy5FdmVudC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlMuRXZlbnQsaXNEZWZhdWx0UHJldmVudGVkOlRlLGlzUHJvcGFnYXRpb25TdG9wcGVkOlRlLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOlRlLGlzU2ltdWxhdGVkOiExLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPXdlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXdlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnN0b3BQcm9wYWdhdGlvbigpfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD13ZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0sUy5lYWNoKHthbHRLZXk6ITAsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNoYW5nZWRUb3VjaGVzOiEwLGN0cmxLZXk6ITAsZGV0YWlsOiEwLGV2ZW50UGhhc2U6ITAsbWV0YUtleTohMCxwYWdlWDohMCxwYWdlWTohMCxzaGlmdEtleTohMCx2aWV3OiEwLCJjaGFyIjohMCxjb2RlOiEwLGNoYXJDb2RlOiEwLGtleTohMCxrZXlDb2RlOiEwLGJ1dHRvbjohMCxidXR0b25zOiEwLGNsaWVudFg6ITAsY2xpZW50WTohMCxvZmZzZXRYOiEwLG9mZnNldFk6ITAscG9pbnRlcklkOiEwLHBvaW50ZXJUeXBlOiEwLHNjcmVlblg6ITAsc2NyZWVuWTohMCx0YXJnZXRUb3VjaGVzOiEwLHRvRWxlbWVudDohMCx0b3VjaGVzOiEwLHdoaWNoOiEwfSxTLmV2ZW50LmFkZFByb3ApLFMuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oZSx0KXtTLmV2ZW50LnNwZWNpYWxbZV09e3NldHVwOmZ1bmN0aW9uKCl7cmV0dXJuIFNlKHRoaXMsZSxDZSksITF9LHRyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gU2UodGhpcyxlKSwhMH0sX2RlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZGVsZWdhdGVUeXBlOnR9fSksUy5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0Iixwb2ludGVyZW50ZXI6InBvaW50ZXJvdmVyIixwb2ludGVybGVhdmU6InBvaW50ZXJvdXQifSxmdW5jdGlvbihlLGkpe1MuZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOmksYmluZFR5cGU6aSxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLnJlbGF0ZWRUYXJnZXQscj1lLmhhbmRsZU9iajtyZXR1cm4gbiYmKG49PT10aGlzfHxTLmNvbnRhaW5zKHRoaXMsbikpfHwoZS50eXBlPXIub3JpZ1R5cGUsdD1yLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT1pKSx0fX19KSxTLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIEVlKHRoaXMsZSx0LG4scil9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gRWUodGhpcyxlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIHI9ZS5oYW5kbGVPYmosUyhlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2U/ci5vcmlnVHlwZSsiLiIrci5uYW1lc3BhY2U6ci5vcmlnVHlwZSxyLnNlbGVjdG9yLHIuaGFuZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGUpe2ZvcihpIGluIGUpdGhpcy5vZmYoaSx0LGVbaV0pO3JldHVybiB0aGlzfXJldHVybiExIT09dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHR8fChuPXQsdD12b2lkIDApLCExPT09biYmKG49VGUpLHRoaXMuZWFjaChmdW5jdGlvbigpe1MuZXZlbnQucmVtb3ZlKHRoaXMsZSxuLHQpfSl9fSk7dmFyIGtlPS88c2NyaXB0fDxzdHlsZXw8bGluay9pLEFlPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLE5lPS9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZztmdW5jdGlvbiBqZShlLHQpe3JldHVybiBBKGUsInRhYmxlIikmJkEoMTEhPT10Lm5vZGVUeXBlP3Q6dC5maXJzdENoaWxkLCJ0ciIpJiZTKGUpLmNoaWxkcmVuKCJ0Ym9keSIpWzBdfHxlfWZ1bmN0aW9uIERlKGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKSsiLyIrZS50eXBlLGV9ZnVuY3Rpb24gcWUoZSl7cmV0dXJuInRydWUvIj09PShlLnR5cGV8fCIiKS5zbGljZSgwLDUpP2UudHlwZT1lLnR5cGUuc2xpY2UoNSk6ZS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxlfWZ1bmN0aW9uIExlKGUsdCl7dmFyIG4scixpLG8sYSxzO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihZLmhhc0RhdGEoZSkmJihzPVkuZ2V0KGUpLmV2ZW50cykpZm9yKGkgaW4gWS5yZW1vdmUodCwiaGFuZGxlIGV2ZW50cyIpLHMpZm9yKG49MCxyPXNbaV0ubGVuZ3RoO248cjtuKyspUy5ldmVudC5hZGQodCxpLHNbaV1bbl0pO1EuaGFzRGF0YShlKSYmKG89US5hY2Nlc3MoZSksYT1TLmV4dGVuZCh7fSxvKSxRLnNldCh0LGEpKX19ZnVuY3Rpb24gSGUobixyLGksbyl7cj1nKHIpO3ZhciBlLHQsYSxzLHUsbCxjPTAsZj1uLmxlbmd0aCxwPWYtMSxkPXJbMF0saD1tKGQpO2lmKGh8fDE8ZiYmInN0cmluZyI9PXR5cGVvZiBkJiYheS5jaGVja0Nsb25lJiZBZS50ZXN0KGQpKXJldHVybiBuLmVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9bi5lcShlKTtoJiYoclswXT1kLmNhbGwodGhpcyxlLHQuaHRtbCgpKSksSGUodCxyLGksbyl9KTtpZihmJiYodD0oZT14ZShyLG5bMF0ub3duZXJEb2N1bWVudCwhMSxuLG8pKS5maXJzdENoaWxkLDE9PT1lLmNoaWxkTm9kZXMubGVuZ3RoJiYoZT10KSx0fHxvKSl7Zm9yKHM9KGE9Uy5tYXAodmUoZSwic2NyaXB0IiksRGUpKS5sZW5ndGg7YzxmO2MrKyl1PWUsYyE9PXAmJih1PVMuY2xvbmUodSwhMCwhMCkscyYmUy5tZXJnZShhLHZlKHUsInNjcmlwdCIpKSksaS5jYWxsKG5bY10sdSxjKTtpZihzKWZvcihsPWFbYS5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCxTLm1hcChhLHFlKSxjPTA7YzxzO2MrKyl1PWFbY10saGUudGVzdCh1LnR5cGV8fCIiKSYmIVkuYWNjZXNzKHUsImdsb2JhbEV2YWwiKSYmUy5jb250YWlucyhsLHUpJiYodS5zcmMmJiJtb2R1bGUiIT09KHUudHlwZXx8IiIpLnRvTG93ZXJDYXNlKCk/Uy5fZXZhbFVybCYmIXUubm9Nb2R1bGUmJlMuX2V2YWxVcmwodS5zcmMse25vbmNlOnUubm9uY2V8fHUuZ2V0QXR0cmlidXRlKCJub25jZSIpfSxsKTpiKHUudGV4dENvbnRlbnQucmVwbGFjZShOZSwiIiksdSxsKSl9cmV0dXJuIG59ZnVuY3Rpb24gT2UoZSx0LG4pe2Zvcih2YXIgcixpPXQ/Uy5maWx0ZXIodCxlKTplLG89MDtudWxsIT0ocj1pW29dKTtvKyspbnx8MSE9PXIubm9kZVR5cGV8fFMuY2xlYW5EYXRhKHZlKHIpKSxyLnBhcmVudE5vZGUmJihuJiZpZShyKSYmeWUodmUociwic2NyaXB0IikpLHIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKSk7cmV0dXJuIGV9Uy5leHRlbmQoe2h0bWxQcmVmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGNsb25lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjPWUuY2xvbmVOb2RlKCEwKSxmPWllKGUpO2lmKCEoeS5ub0Nsb25lQ2hlY2tlZHx8MSE9PWUubm9kZVR5cGUmJjExIT09ZS5ub2RlVHlwZXx8Uy5pc1hNTERvYyhlKSkpZm9yKGE9dmUoYykscj0wLGk9KG89dmUoZSkpLmxlbmd0aDtyPGk7cisrKXM9b1tyXSx1PWFbcl0sdm9pZCAwLCJpbnB1dCI9PT0obD11Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpJiZwZS50ZXN0KHMudHlwZSk/dS5jaGVja2VkPXMuY2hlY2tlZDoiaW5wdXQiIT09bCYmInRleHRhcmVhIiE9PWx8fCh1LmRlZmF1bHRWYWx1ZT1zLmRlZmF1bHRWYWx1ZSk7aWYodClpZihuKWZvcihvPW98fHZlKGUpLGE9YXx8dmUoYykscj0wLGk9by5sZW5ndGg7cjxpO3IrKylMZShvW3JdLGFbcl0pO2Vsc2UgTGUoZSxjKTtyZXR1cm4gMDwoYT12ZShjLCJzY3JpcHQiKSkubGVuZ3RoJiZ5ZShhLCFmJiZ2ZShlLCJzY3JpcHQiKSksY30sY2xlYW5EYXRhOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHIsaT1TLmV2ZW50LnNwZWNpYWwsbz0wO3ZvaWQgMCE9PShuPWVbb10pO28rKylpZihWKG4pKXtpZih0PW5bWS5leHBhbmRvXSl7aWYodC5ldmVudHMpZm9yKHIgaW4gdC5ldmVudHMpaVtyXT9TLmV2ZW50LnJlbW92ZShuLHIpOlMucmVtb3ZlRXZlbnQobixyLHQuaGFuZGxlKTtuW1kuZXhwYW5kb109dm9pZCAwfW5bUS5leHBhbmRvXSYmKG5bUS5leHBhbmRvXT12b2lkIDApfX19KSxTLmZuLmV4dGVuZCh7ZGV0YWNoOmZ1bmN0aW9uKGUpe3JldHVybiBPZSh0aGlzLGUsITApfSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIE9lKHRoaXMsZSl9LHRleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuICQodGhpcyxmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT9TLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmVhY2goZnVuY3Rpb24oKXsxIT09dGhpcy5ub2RlVHlwZSYmMTEhPT10aGlzLm5vZGVUeXBlJiY5IT09dGhpcy5ub2RlVHlwZXx8KHRoaXMudGV4dENvbnRlbnQ9ZSl9KX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gSGUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fGplKHRoaXMsZSkuYXBwZW5kQ2hpbGQoZSl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiBIZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9amUodGhpcyxlKTt0Lmluc2VydEJlZm9yZShlLHQuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiBIZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiBIZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKX0pfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PTA7bnVsbCE9KGU9dGhpc1t0XSk7dCsrKTE9PT1lLm5vZGVUeXBlJiYoUy5jbGVhbkRhdGEodmUoZSwhMSkpLGUudGV4dENvbnRlbnQ9IiIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGwhPWUmJmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBTLmNsb25lKHRoaXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiAkKHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1swXXx8e30sbj0wLHI9dGhpcy5sZW5ndGg7aWYodm9pZCAwPT09ZSYmMT09PXQubm9kZVR5cGUpcmV0dXJuIHQuaW5uZXJIVE1MO2lmKCJzdHJpbmciPT10eXBlb2YgZSYmIWtlLnRlc3QoZSkmJiFnZVsoZGUuZXhlYyhlKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2U9Uy5odG1sUHJlZmlsdGVyKGUpO3RyeXtmb3IoO248cjtuKyspMT09PSh0PXRoaXNbbl18fHt9KS5ub2RlVHlwZSYmKFMuY2xlYW5EYXRhKHZlKHQsITEpKSx0LmlubmVySFRNTD1lKTt0PTB9Y2F0Y2goZSl7fX10JiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIG49W107cmV0dXJuIEhlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtTLmluQXJyYXkodGhpcyxuKTwwJiYoUy5jbGVhbkRhdGEodmUodGhpcykpLHQmJnQucmVwbGFjZUNoaWxkKGUsdGhpcykpfSxuKX19KSxTLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihlLGEpe1MuZm5bZV09ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49W10scj1TKGUpLGk9ci5sZW5ndGgtMSxvPTA7bzw9aTtvKyspdD1vPT09aT90aGlzOnRoaXMuY2xvbmUoITApLFMocltvXSlbYV0odCksdS5hcHBseShuLHQuZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhuKX19KTt2YXIgUGU9bmV3IFJlZ0V4cCgiXigiK2VlKyIpKD8hcHgpW2EteiVdKyQiLCJpIiksUmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O3JldHVybiB0JiZ0Lm9wZW5lcnx8KHQ9QyksdC5nZXRDb21wdXRlZFN0eWxlKGUpfSxNZT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXt9O2ZvcihpIGluIHQpb1tpXT1lLnN0eWxlW2ldLGUuc3R5bGVbaV09dFtpXTtmb3IoaSBpbiByPW4uY2FsbChlKSx0KWUuc3R5bGVbaV09b1tpXTtyZXR1cm4gcn0sSWU9bmV3IFJlZ0V4cChuZS5qb2luKCJ8IiksImkiKTtmdW5jdGlvbiBXZShlLHQsbil7dmFyIHIsaSxvLGEscz1lLnN0eWxlO3JldHVybihuPW58fFJlKGUpKSYmKCIiIT09KGE9bi5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxuW3RdKXx8aWUoZSl8fChhPVMuc3R5bGUoZSx0KSksIXkucGl4ZWxCb3hTdHlsZXMoKSYmUGUudGVzdChhKSYmSWUudGVzdCh0KSYmKHI9cy53aWR0aCxpPXMubWluV2lkdGgsbz1zLm1heFdpZHRoLHMubWluV2lkdGg9cy5tYXhXaWR0aD1zLndpZHRoPWEsYT1uLndpZHRoLHMud2lkdGg9cixzLm1pbldpZHRoPWkscy5tYXhXaWR0aD1vKSksdm9pZCAwIT09YT9hKyIiOmF9ZnVuY3Rpb24gRmUoZSx0KXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7aWYoIWUoKSlyZXR1cm4odGhpcy5nZXQ9dCkuYXBwbHkodGhpcyxhcmd1bWVudHMpO2RlbGV0ZSB0aGlzLmdldH19fSFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtpZihsKXt1LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDttYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjAiLGwuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO21hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7d2lkdGg6NjAlO3RvcDoxJSIscmUuYXBwZW5kQ2hpbGQodSkuYXBwZW5kQ2hpbGQobCk7dmFyIGU9Qy5nZXRDb21wdXRlZFN0eWxlKGwpO249IjElIiE9PWUudG9wLHM9MTI9PT10KGUubWFyZ2luTGVmdCksbC5zdHlsZS5yaWdodD0iNjAlIixvPTM2PT09dChlLnJpZ2h0KSxyPTM2PT09dChlLndpZHRoKSxsLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaT0xMj09PXQobC5vZmZzZXRXaWR0aC8zKSxyZS5yZW1vdmVDaGlsZCh1KSxsPW51bGx9fWZ1bmN0aW9uIHQoZSl7cmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChlKSl9dmFyIG4scixpLG8sYSxzLHU9RS5jcmVhdGVFbGVtZW50KCJkaXYiKSxsPUUuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5zdHlsZSYmKGwuc3R5bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94IixsLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIseS5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PWwuc3R5bGUuYmFja2dyb3VuZENsaXAsUy5leHRlbmQoeSx7Ym94U2l6aW5nUmVsaWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLHJ9LHBpeGVsQm94U3R5bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSxvfSxwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSxufSxyZWxpYWJsZU1hcmdpbkxlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLHN9LHNjcm9sbGJveFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLGl9LHJlbGlhYmxlVHJEaW1lbnNpb25zOmZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI7cmV0dXJuIG51bGw9PWEmJihlPUUuY3JlYXRlRWxlbWVudCgidGFibGUiKSx0PUUuY3JlYXRlRWxlbWVudCgidHIiKSxuPUUuY3JlYXRlRWxlbWVudCgiZGl2IiksZS5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZSIsdC5zdHlsZS5jc3NUZXh0PSJib3JkZXI6MXB4IHNvbGlkIix0LnN0eWxlLmhlaWdodD0iMXB4IixuLnN0eWxlLmhlaWdodD0iOXB4IixuLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixyZS5hcHBlbmRDaGlsZChlKS5hcHBlbmRDaGlsZCh0KS5hcHBlbmRDaGlsZChuKSxyPUMuZ2V0Q29tcHV0ZWRTdHlsZSh0KSxhPXBhcnNlSW50KHIuaGVpZ2h0LDEwKStwYXJzZUludChyLmJvcmRlclRvcFdpZHRoLDEwKStwYXJzZUludChyLmJvcmRlckJvdHRvbVdpZHRoLDEwKT09PXQub2Zmc2V0SGVpZ2h0LHJlLnJlbW92ZUNoaWxkKGUpKSxhfX0pKX0oKTt2YXIgQmU9WyJXZWJraXQiLCJNb3oiLCJtcyJdLCRlPUUuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsX2U9e307ZnVuY3Rpb24gemUoZSl7dmFyIHQ9Uy5jc3NQcm9wc1tlXXx8X2VbZV07cmV0dXJuIHR8fChlIGluICRlP2U6X2VbZV09ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSksbj1CZS5sZW5ndGg7d2hpbGUobi0tKWlmKChlPUJlW25dK3QpaW4gJGUpcmV0dXJuIGV9KGUpfHxlKX12YXIgVWU9L14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFhlPS9eLS0vLFZlPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSxHZT17bGV0dGVyU3BhY2luZzoiMCIsZm9udFdlaWdodDoiNDAwIn07ZnVuY3Rpb24gWWUoZSx0LG4pe3ZhciByPXRlLmV4ZWModCk7cmV0dXJuIHI/TWF0aC5tYXgoMCxyWzJdLShufHwwKSkrKHJbM118fCJweCIpOnR9ZnVuY3Rpb24gUWUoZSx0LG4scixpLG8pe3ZhciBhPSJ3aWR0aCI9PT10PzE6MCxzPTAsdT0wO2lmKG49PT0ocj8iYm9yZGVyIjoiY29udGVudCIpKXJldHVybiAwO2Zvcig7YTw0O2ErPTIpIm1hcmdpbiI9PT1uJiYodSs9Uy5jc3MoZSxuK25lW2FdLCEwLGkpKSxyPygiY29udGVudCI9PT1uJiYodS09Uy5jc3MoZSwicGFkZGluZyIrbmVbYV0sITAsaSkpLCJtYXJnaW4iIT09biYmKHUtPVMuY3NzKGUsImJvcmRlciIrbmVbYV0rIldpZHRoIiwhMCxpKSkpOih1Kz1TLmNzcyhlLCJwYWRkaW5nIituZVthXSwhMCxpKSwicGFkZGluZyIhPT1uP3UrPVMuY3NzKGUsImJvcmRlciIrbmVbYV0rIldpZHRoIiwhMCxpKTpzKz1TLmNzcyhlLCJib3JkZXIiK25lW2FdKyJXaWR0aCIsITAsaSkpO3JldHVybiFyJiYwPD1vJiYodSs9TWF0aC5tYXgoMCxNYXRoLmNlaWwoZVsib2Zmc2V0Iit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKV0tby11LXMtLjUpKXx8MCksdX1mdW5jdGlvbiBKZShlLHQsbil7dmFyIHI9UmUoZSksaT0oIXkuYm94U2l6aW5nUmVsaWFibGUoKXx8bikmJiJib3JkZXItYm94Ij09PVMuY3NzKGUsImJveFNpemluZyIsITEsciksbz1pLGE9V2UoZSx0LHIpLHM9Im9mZnNldCIrdFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSk7aWYoUGUudGVzdChhKSl7aWYoIW4pcmV0dXJuIGE7YT0iYXV0byJ9cmV0dXJuKCF5LmJveFNpemluZ1JlbGlhYmxlKCkmJml8fCF5LnJlbGlhYmxlVHJEaW1lbnNpb25zKCkmJkEoZSwidHIiKXx8ImF1dG8iPT09YXx8IXBhcnNlRmxvYXQoYSkmJiJpbmxpbmUiPT09Uy5jc3MoZSwiZGlzcGxheSIsITEscikpJiZlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiYoaT0iYm9yZGVyLWJveCI9PT1TLmNzcyhlLCJib3hTaXppbmciLCExLHIpLChvPXMgaW4gZSkmJihhPWVbc10pKSwoYT1wYXJzZUZsb2F0KGEpfHwwKStRZShlLHQsbnx8KGk/ImJvcmRlciI6ImNvbnRlbnQiKSxvLHIsYSkrInB4In1mdW5jdGlvbiBLZShlLHQsbixyLGkpe3JldHVybiBuZXcgS2UucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX1TLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPVdlKGUsIm9wYWNpdHkiKTtyZXR1cm4iIj09PW4/IjEiOm59fX19LGNzc051bWJlcjp7YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsY29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGdyaWRBcmVhOiEwLGdyaWRDb2x1bW46ITAsZ3JpZENvbHVtbkVuZDohMCxncmlkQ29sdW1uU3RhcnQ6ITAsZ3JpZFJvdzohMCxncmlkUm93RW5kOiEwLGdyaWRSb3dTdGFydDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOnt9LHN0eWxlOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKGUmJjMhPT1lLm5vZGVUeXBlJiY4IT09ZS5ub2RlVHlwZSYmZS5zdHlsZSl7dmFyIGksbyxhLHM9WCh0KSx1PVhlLnRlc3QodCksbD1lLnN0eWxlO2lmKHV8fCh0PXplKHMpKSxhPVMuY3NzSG9va3NbdF18fFMuY3NzSG9va3Nbc10sdm9pZCAwPT09bilyZXR1cm4gYSYmImdldCJpbiBhJiZ2b2lkIDAhPT0oaT1hLmdldChlLCExLHIpKT9pOmxbdF07InN0cmluZyI9PT0obz10eXBlb2YgbikmJihpPXRlLmV4ZWMobikpJiZpWzFdJiYobj1zZShlLHQsaSksbz0ibnVtYmVyIiksbnVsbCE9biYmbj09biYmKCJudW1iZXIiIT09b3x8dXx8KG4rPWkmJmlbM118fChTLmNzc051bWJlcltzXT8iIjoicHgiKSkseS5jbGVhckNsb25lU3R5bGV8fCIiIT09bnx8MCE9PXQuaW5kZXhPZigiYmFja2dyb3VuZCIpfHwobFt0XT0iaW5oZXJpdCIpLGEmJiJzZXQiaW4gYSYmdm9pZCAwPT09KG49YS5zZXQoZSxuLHIpKXx8KHU/bC5zZXRQcm9wZXJ0eSh0LG4pOmxbdF09bikpfX0sY3NzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzPVgodCk7cmV0dXJuIFhlLnRlc3QodCl8fCh0PXplKHMpKSwoYT1TLmNzc0hvb2tzW3RdfHxTLmNzc0hvb2tzW3NdKSYmImdldCJpbiBhJiYoaT1hLmdldChlLCEwLG4pKSx2b2lkIDA9PT1pJiYoaT1XZShlLHQscikpLCJub3JtYWwiPT09aSYmdCBpbiBHZSYmKGk9R2VbdF0pLCIiPT09bnx8bj8obz1wYXJzZUZsb2F0KGkpLCEwPT09bnx8aXNGaW5pdGUobyk/b3x8MDppKTppfX0pLFMuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oZSx1KXtTLmNzc0hvb2tzW3VdPXtnZXQ6ZnVuY3Rpb24oZSx0LG4pe2lmKHQpcmV0dXJuIVVlLnRlc3QoUy5jc3MoZSwiZGlzcGxheSIpKXx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCYmZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD9KZShlLHUsbik6TWUoZSxWZSxmdW5jdGlvbigpe3JldHVybiBKZShlLHUsbil9KX0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPVJlKGUpLG89IXkuc2Nyb2xsYm94U2l6ZSgpJiYiYWJzb2x1dGUiPT09aS5wb3NpdGlvbixhPShvfHxuKSYmImJvcmRlci1ib3giPT09Uy5jc3MoZSwiYm94U2l6aW5nIiwhMSxpKSxzPW4/UWUoZSx1LG4sYSxpKTowO3JldHVybiBhJiZvJiYocy09TWF0aC5jZWlsKGVbIm9mZnNldCIrdVswXS50b1VwcGVyQ2FzZSgpK3Uuc2xpY2UoMSldLXBhcnNlRmxvYXQoaVt1XSktUWUoZSx1LCJib3JkZXIiLCExLGkpLS41KSkscyYmKHI9dGUuZXhlYyh0KSkmJiJweCIhPT0oclszXXx8InB4IikmJihlLnN0eWxlW3VdPXQsdD1TLmNzcyhlLHUpKSxZZSgwLHQscyl9fX0pLFMuY3NzSG9va3MubWFyZ2luTGVmdD1GZSh5LnJlbGlhYmxlTWFyZ2luTGVmdCxmdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuKHBhcnNlRmxvYXQoV2UoZSwibWFyZ2luTGVmdCIpKXx8ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LU1lKGUse21hcmdpbkxlZnQ6MH0sZnVuY3Rpb24oKXtyZXR1cm4gZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSkpKyJweCJ9KSxTLmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihpLG8pe1MuY3NzSG9va3NbaStvXT17ZXhwYW5kOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49e30scj0ic3RyaW5nIj09dHlwZW9mIGU/ZS5zcGxpdCgiICIpOltlXTt0PDQ7dCsrKW5baStuZVt0XStvXT1yW3RdfHxyW3QtMl18fHJbMF07cmV0dXJuIG59fSwibWFyZ2luIiE9PWkmJihTLmNzc0hvb2tzW2krb10uc2V0PVllKX0pLFMuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJCh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e30sYT0wO2lmKEFycmF5LmlzQXJyYXkodCkpe2ZvcihyPVJlKGUpLGk9dC5sZW5ndGg7YTxpO2ErKylvW3RbYV1dPVMuY3NzKGUsdFthXSwhMSxyKTtyZXR1cm4gb31yZXR1cm4gdm9pZCAwIT09bj9TLnN0eWxlKGUsdCxuKTpTLmNzcyhlLHQpfSxlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX19KSwoKFMuVHdlZW49S2UpLnByb3RvdHlwZT17Y29uc3RydWN0b3I6S2UsaW5pdDpmdW5jdGlvbihlLHQsbixyLGksbyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8Uy5lYXNpbmcuX2RlZmF1bHQsdGhpcy5vcHRpb25zPXQsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhpcy51bml0PW98fChTLmNzc051bWJlcltuXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGU9S2UucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGUmJmUuZ2V0P2UuZ2V0KHRoaXMpOktlLnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihlKXt2YXIgdCxuPUtlLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9dD1TLmVhc2luZ1t0aGlzLmVhc2luZ10oZSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qZSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp0aGlzLnBvcz10PWUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6S2UucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0pLmluaXQucHJvdG90eXBlPUtlLnByb3RvdHlwZSwoS2UucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiAxIT09ZS5lbGVtLm5vZGVUeXBlfHxudWxsIT1lLmVsZW1bZS5wcm9wXSYmbnVsbD09ZS5lbGVtLnN0eWxlW2UucHJvcF0/ZS5lbGVtW2UucHJvcF06KHQ9Uy5jc3MoZS5lbGVtLGUucHJvcCwiIikpJiYiYXV0byIhPT10P3Q6MH0sc2V0OmZ1bmN0aW9uKGUpe1MuZnguc3RlcFtlLnByb3BdP1MuZnguc3RlcFtlLnByb3BdKGUpOjEhPT1lLmVsZW0ubm9kZVR5cGV8fCFTLmNzc0hvb2tzW2UucHJvcF0mJm51bGw9PWUuZWxlbS5zdHlsZVt6ZShlLnByb3ApXT9lLmVsZW1bZS5wcm9wXT1lLm5vdzpTLnN0eWxlKGUuZWxlbSxlLnByb3AsZS5ub3crZS51bml0KX19fSkuc2Nyb2xsVG9wPUtlLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oZSl7ZS5lbGVtLm5vZGVUeXBlJiZlLmVsZW0ucGFyZW50Tm9kZSYmKGUuZWxlbVtlLnByb3BdPWUubm93KX19LFMuZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5QSSkvMn0sX2RlZmF1bHQ6InN3aW5nIn0sUy5meD1LZS5wcm90b3R5cGUuaW5pdCxTLmZ4LnN0ZXA9e307dmFyIFplLGV0LHR0LG50LHJ0PS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxpdD0vcXVldWVIb29rcyQvO2Z1bmN0aW9uIG90KCl7ZXQmJighMT09PUUuaGlkZGVuJiZDLnJlcXVlc3RBbmltYXRpb25GcmFtZT9DLnJlcXVlc3RBbmltYXRpb25GcmFtZShvdCk6Qy5zZXRUaW1lb3V0KG90LFMuZnguaW50ZXJ2YWwpLFMuZngudGljaygpKX1mdW5jdGlvbiBhdCgpe3JldHVybiBDLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtaZT12b2lkIDB9KSxaZT1EYXRlLm5vdygpfWZ1bmN0aW9uIHN0KGUsdCl7dmFyIG4scj0wLGk9e2hlaWdodDplfTtmb3IodD10PzE6MDtyPDQ7cis9Mi10KWlbIm1hcmdpbiIrKG49bmVbcl0pXT1pWyJwYWRkaW5nIituXT1lO3JldHVybiB0JiYoaS5vcGFjaXR5PWkud2lkdGg9ZSksaX1mdW5jdGlvbiB1dChlLHQsbil7Zm9yKHZhciByLGk9KGx0LnR3ZWVuZXJzW3RdfHxbXSkuY29uY2F0KGx0LnR3ZWVuZXJzWyIqIl0pLG89MCxhPWkubGVuZ3RoO288YTtvKyspaWYocj1pW29dLmNhbGwobix0LGUpKXJldHVybiByfWZ1bmN0aW9uIGx0KG8sZSx0KXt2YXIgbixhLHI9MCxpPWx0LnByZWZpbHRlcnMubGVuZ3RoLHM9Uy5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSB1LmVsZW19KSx1PWZ1bmN0aW9uKCl7aWYoYSlyZXR1cm4hMTtmb3IodmFyIGU9WmV8fGF0KCksdD1NYXRoLm1heCgwLGwuc3RhcnRUaW1lK2wuZHVyYXRpb24tZSksbj0xLSh0L2wuZHVyYXRpb258fDApLHI9MCxpPWwudHdlZW5zLmxlbmd0aDtyPGk7cisrKWwudHdlZW5zW3JdLnJ1bihuKTtyZXR1cm4gcy5ub3RpZnlXaXRoKG8sW2wsbix0XSksbjwxJiZpP3Q6KGl8fHMubm90aWZ5V2l0aChvLFtsLDEsMF0pLHMucmVzb2x2ZVdpdGgobyxbbF0pLCExKX0sbD1zLnByb21pc2Uoe2VsZW06byxwcm9wczpTLmV4dGVuZCh7fSxlKSxvcHRzOlMuZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9LGVhc2luZzpTLmVhc2luZy5fZGVmYXVsdH0sdCksb3JpZ2luYWxQcm9wZXJ0aWVzOmUsb3JpZ2luYWxPcHRpb25zOnQsc3RhcnRUaW1lOlplfHxhdCgpLGR1cmF0aW9uOnQuZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKGUsdCl7dmFyIG49Uy5Ud2VlbihvLGwub3B0cyxlLHQsbC5vcHRzLnNwZWNpYWxFYXNpbmdbZV18fGwub3B0cy5lYXNpbmcpO3JldHVybiBsLnR3ZWVucy5wdXNoKG4pLG59LHN0b3A6ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPWU/bC50d2VlbnMubGVuZ3RoOjA7aWYoYSlyZXR1cm4gdGhpcztmb3IoYT0hMDt0PG47dCsrKWwudHdlZW5zW3RdLnJ1bigxKTtyZXR1cm4gZT8ocy5ub3RpZnlXaXRoKG8sW2wsMSwwXSkscy5yZXNvbHZlV2l0aChvLFtsLGVdKSk6cy5yZWplY3RXaXRoKG8sW2wsZV0pLHRoaXN9fSksYz1sLnByb3BzO2ZvcighZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhO2ZvcihuIGluIGUpaWYoaT10W3I9WChuKV0sbz1lW25dLEFycmF5LmlzQXJyYXkobykmJihpPW9bMV0sbz1lW25dPW9bMF0pLG4hPT1yJiYoZVtyXT1vLGRlbGV0ZSBlW25dKSwoYT1TLmNzc0hvb2tzW3JdKSYmImV4cGFuZCJpbiBhKWZvcihuIGluIG89YS5leHBhbmQobyksZGVsZXRlIGVbcl0sbyluIGluIGV8fChlW25dPW9bbl0sdFtuXT1pKTtlbHNlIHRbcl09aX0oYyxsLm9wdHMuc3BlY2lhbEVhc2luZyk7cjxpO3IrKylpZihuPWx0LnByZWZpbHRlcnNbcl0uY2FsbChsLG8sYyxsLm9wdHMpKXJldHVybiBtKG4uc3RvcCkmJihTLl9xdWV1ZUhvb2tzKGwuZWxlbSxsLm9wdHMucXVldWUpLnN0b3A9bi5zdG9wLmJpbmQobikpLG47cmV0dXJuIFMubWFwKGMsdXQsbCksbShsLm9wdHMuc3RhcnQpJiZsLm9wdHMuc3RhcnQuY2FsbChvLGwpLGwucHJvZ3Jlc3MobC5vcHRzLnByb2dyZXNzKS5kb25lKGwub3B0cy5kb25lLGwub3B0cy5jb21wbGV0ZSkuZmFpbChsLm9wdHMuZmFpbCkuYWx3YXlzKGwub3B0cy5hbHdheXMpLFMuZngudGltZXIoUy5leHRlbmQodSx7ZWxlbTpvLGFuaW06bCxxdWV1ZTpsLm9wdHMucXVldWV9KSksbH1TLkFuaW1hdGlvbj1TLmV4dGVuZChsdCx7dHdlZW5lcnM6eyIqIjpbZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZVR3ZWVuKGUsdCk7cmV0dXJuIHNlKG4uZWxlbSxlLHRlLmV4ZWModCksbiksbn1dfSx0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7bShlKT8odD1lLGU9WyIqIl0pOmU9ZS5tYXRjaChQKTtmb3IodmFyIG4scj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyluPWVbcl0sbHQudHdlZW5lcnNbbl09bHQudHdlZW5lcnNbbl18fFtdLGx0LnR3ZWVuZXJzW25dLnVuc2hpZnQodCl9LHByZWZpbHRlcnM6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjLGY9IndpZHRoImluIHR8fCJoZWlnaHQiaW4gdCxwPXRoaXMsZD17fSxoPWUuc3R5bGUsZz1lLm5vZGVUeXBlJiZhZShlKSx2PVkuZ2V0KGUsImZ4c2hvdyIpO2ZvcihyIGluIG4ucXVldWV8fChudWxsPT0oYT1TLl9xdWV1ZUhvb2tzKGUsImZ4IikpLnVucXVldWVkJiYoYS51bnF1ZXVlZD0wLHM9YS5lbXB0eS5maXJlLGEuZW1wdHkuZmlyZT1mdW5jdGlvbigpe2EudW5xdWV1ZWR8fHMoKX0pLGEudW5xdWV1ZWQrKyxwLmFsd2F5cyhmdW5jdGlvbigpe3AuYWx3YXlzKGZ1bmN0aW9uKCl7YS51bnF1ZXVlZC0tLFMucXVldWUoZSwiZngiKS5sZW5ndGh8fGEuZW1wdHkuZmlyZSgpfSl9KSksdClpZihpPXRbcl0scnQudGVzdChpKSl7aWYoZGVsZXRlIHRbcl0sbz1vfHwidG9nZ2xlIj09PWksaT09PShnPyJoaWRlIjoic2hvdyIpKXtpZigic2hvdyIhPT1pfHwhdnx8dm9pZCAwPT09dltyXSljb250aW51ZTtnPSEwfWRbcl09diYmdltyXXx8Uy5zdHlsZShlLHIpfWlmKCh1PSFTLmlzRW1wdHlPYmplY3QodCkpfHwhUy5pc0VtcHR5T2JqZWN0KGQpKWZvcihyIGluIGYmJjE9PT1lLm5vZGVUeXBlJiYobi5vdmVyZmxvdz1baC5vdmVyZmxvdyxoLm92ZXJmbG93WCxoLm92ZXJmbG93WV0sbnVsbD09KGw9diYmdi5kaXNwbGF5KSYmKGw9WS5nZXQoZSwiZGlzcGxheSIpKSwibm9uZSI9PT0oYz1TLmNzcyhlLCJkaXNwbGF5IikpJiYobD9jPWw6KGxlKFtlXSwhMCksbD1lLnN0eWxlLmRpc3BsYXl8fGwsYz1TLmNzcyhlLCJkaXNwbGF5IiksbGUoW2VdKSkpLCgiaW5saW5lIj09PWN8fCJpbmxpbmUtYmxvY2siPT09YyYmbnVsbCE9bCkmJiJub25lIj09PVMuY3NzKGUsImZsb2F0IikmJih1fHwocC5kb25lKGZ1bmN0aW9uKCl7aC5kaXNwbGF5PWx9KSxudWxsPT1sJiYoYz1oLmRpc3BsYXksbD0ibm9uZSI9PT1jPyIiOmMpKSxoLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxuLm92ZXJmbG93JiYoaC5vdmVyZmxvdz0iaGlkZGVuIixwLmFsd2F5cyhmdW5jdGlvbigpe2gub3ZlcmZsb3c9bi5vdmVyZmxvd1swXSxoLm92ZXJmbG93WD1uLm92ZXJmbG93WzFdLGgub3ZlcmZsb3dZPW4ub3ZlcmZsb3dbMl19KSksdT0hMSxkKXV8fCh2PyJoaWRkZW4iaW4gdiYmKGc9di5oaWRkZW4pOnY9WS5hY2Nlc3MoZSwiZnhzaG93Iix7ZGlzcGxheTpsfSksbyYmKHYuaGlkZGVuPSFnKSxnJiZsZShbZV0sITApLHAuZG9uZShmdW5jdGlvbigpe2ZvcihyIGluIGd8fGxlKFtlXSksWS5yZW1vdmUoZSwiZnhzaG93IiksZClTLnN0eWxlKGUscixkW3JdKX0pKSx1PXV0KGc/dltyXTowLHIscCksciBpbiB2fHwodltyXT11LnN0YXJ0LGcmJih1LmVuZD11LnN0YXJ0LHUuc3RhcnQ9MCkpfV0scHJlZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dD9sdC5wcmVmaWx0ZXJzLnVuc2hpZnQoZSk6bHQucHJlZmlsdGVycy5wdXNoKGUpfX0pLFMuc3BlZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUmJiJvYmplY3QiPT10eXBlb2YgZT9TLmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fG0oZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIW0odCkmJnR9O3JldHVybiBTLmZ4Lm9mZj9yLmR1cmF0aW9uPTA6Im51bWJlciIhPXR5cGVvZiByLmR1cmF0aW9uJiYoci5kdXJhdGlvbiBpbiBTLmZ4LnNwZWVkcz9yLmR1cmF0aW9uPVMuZnguc3BlZWRzW3IuZHVyYXRpb25dOnIuZHVyYXRpb249Uy5meC5zcGVlZHMuX2RlZmF1bHQpLG51bGwhPXIucXVldWUmJiEwIT09ci5xdWV1ZXx8KHIucXVldWU9ImZ4Iiksci5vbGQ9ci5jb21wbGV0ZSxyLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bShyLm9sZCkmJnIub2xkLmNhbGwodGhpcyksci5xdWV1ZSYmUy5kZXF1ZXVlKHRoaXMsci5xdWV1ZSl9LHJ9LFMuZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuZmlsdGVyKGFlKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0ZTpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1TLmlzRW1wdHlPYmplY3QodCksbz1TLnNwZWVkKGUsbixyKSxhPWZ1bmN0aW9uKCl7dmFyIGU9bHQodGhpcyxTLmV4dGVuZCh7fSx0KSxvKTsoaXx8WS5nZXQodGhpcywiZmluaXNoIikpJiZlLnN0b3AoITApfTtyZXR1cm4gYS5maW5pc2g9YSxpfHwhMT09PW8ucXVldWU/dGhpcy5lYWNoKGEpOnRoaXMucXVldWUoby5xdWV1ZSxhKX0sc3RvcDpmdW5jdGlvbihpLGUsbyl7dmFyIGE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChvKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBpJiYobz1lLGU9aSxpPXZvaWQgMCksZSYmdGhpcy5xdWV1ZShpfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT0hMCx0PW51bGwhPWkmJmkrInF1ZXVlSG9va3MiLG49Uy50aW1lcnMscj1ZLmdldCh0aGlzKTtpZih0KXJbdF0mJnJbdF0uc3RvcCYmYShyW3RdKTtlbHNlIGZvcih0IGluIHIpclt0XSYmclt0XS5zdG9wJiZpdC50ZXN0KHQpJiZhKHJbdF0pO2Zvcih0PW4ubGVuZ3RoO3QtLTspblt0XS5lbGVtIT09dGhpc3x8bnVsbCE9aSYmblt0XS5xdWV1ZSE9PWl8fChuW3RdLmFuaW0uc3RvcChvKSxlPSExLG4uc3BsaWNlKHQsMSkpOyFlJiZvfHxTLmRlcXVldWUodGhpcyxpKX0pfSxmaW5pc2g6ZnVuY3Rpb24oYSl7cmV0dXJuITEhPT1hJiYoYT1hfHwiZngiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZSx0PVkuZ2V0KHRoaXMpLG49dFthKyJxdWV1ZSJdLHI9dFthKyJxdWV1ZUhvb2tzIl0saT1TLnRpbWVycyxvPW4/bi5sZW5ndGg6MDtmb3IodC5maW5pc2g9ITAsUy5xdWV1ZSh0aGlzLGEsW10pLHImJnIuc3RvcCYmci5zdG9wLmNhbGwodGhpcywhMCksZT1pLmxlbmd0aDtlLS07KWlbZV0uZWxlbT09PXRoaXMmJmlbZV0ucXVldWU9PT1hJiYoaVtlXS5hbmltLnN0b3AoITApLGkuc3BsaWNlKGUsMSkpO2ZvcihlPTA7ZTxvO2UrKyluW2VdJiZuW2VdLmZpbmlzaCYmbltlXS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgdC5maW5pc2h9KX19KSxTLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGUscil7dmFyIGk9Uy5mbltyXTtTLmZuW3JdPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT10eXBlb2YgZT9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoc3QociwhMCksZSx0LG4pfX0pLFMuZWFjaCh7c2xpZGVEb3duOnN0KCJzaG93Iiksc2xpZGVVcDpzdCgiaGlkZSIpLHNsaWRlVG9nZ2xlOnN0KCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGUscil7Uy5mbltlXT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuYW5pbWF0ZShyLGUsdCxuKX19KSxTLnRpbWVycz1bXSxTLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgZSx0PTAsbj1TLnRpbWVycztmb3IoWmU9RGF0ZS5ub3coKTt0PG4ubGVuZ3RoO3QrKykoZT1uW3RdKSgpfHxuW3RdIT09ZXx8bi5zcGxpY2UodC0tLDEpO24ubGVuZ3RofHxTLmZ4LnN0b3AoKSxaZT12b2lkIDB9LFMuZngudGltZXI9ZnVuY3Rpb24oZSl7Uy50aW1lcnMucHVzaChlKSxTLmZ4LnN0YXJ0KCl9LFMuZnguaW50ZXJ2YWw9MTMsUy5meC5zdGFydD1mdW5jdGlvbigpe2V0fHwoZXQ9ITAsb3QoKSl9LFMuZnguc3RvcD1mdW5jdGlvbigpe2V0PW51bGx9LFMuZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LFMuZm4uZGVsYXk9ZnVuY3Rpb24ocixlKXtyZXR1cm4gcj1TLmZ4JiZTLmZ4LnNwZWVkc1tyXXx8cixlPWV8fCJmeCIsdGhpcy5xdWV1ZShlLGZ1bmN0aW9uKGUsdCl7dmFyIG49Qy5zZXRUaW1lb3V0KGUscik7dC5zdG9wPWZ1bmN0aW9uKCl7Qy5jbGVhclRpbWVvdXQobil9fSl9LHR0PUUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxudD1FLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLmFwcGVuZENoaWxkKEUuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLHR0LnR5cGU9ImNoZWNrYm94Iix5LmNoZWNrT249IiIhPT10dC52YWx1ZSx5Lm9wdFNlbGVjdGVkPW50LnNlbGVjdGVkLCh0dD1FLmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnZhbHVlPSJ0Iix0dC50eXBlPSJyYWRpbyIseS5yYWRpb1ZhbHVlPSJ0Ij09PXR0LnZhbHVlO3ZhciBjdCxmdD1TLmV4cHIuYXR0ckhhbmRsZTtTLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiAkKHRoaXMsUy5hdHRyLGUsdCwxPGFyZ3VtZW50cy5sZW5ndGgpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtTLnJlbW92ZUF0dHIodGhpcyxlKX0pfX0pLFMuZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgZS5nZXRBdHRyaWJ1dGU/Uy5wcm9wKGUsdCxuKTooMT09PW8mJlMuaXNYTUxEb2MoZSl8fChpPVMuYXR0ckhvb2tzW3QudG9Mb3dlckNhc2UoKV18fChTLmV4cHIubWF0Y2guYm9vbC50ZXN0KHQpP2N0OnZvaWQgMCkpLHZvaWQgMCE9PW4/bnVsbD09PW4/dm9pZCBTLnJlbW92ZUF0dHIoZSx0KTppJiYic2V0ImluIGkmJnZvaWQgMCE9PShyPWkuc2V0KGUsbix0KSk/cjooZS5zZXRBdHRyaWJ1dGUodCxuKyIiKSxuKTppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOm51bGw9PShyPVMuZmluZC5hdHRyKGUsdCkpP3ZvaWQgMDpyKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oZSx0KXtpZigheS5yYWRpb1ZhbHVlJiYicmFkaW8iPT09dCYmQShlLCJpbnB1dCIpKXt2YXIgbj1lLnZhbHVlO3JldHVybiBlLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbiYmKGUudmFsdWU9biksdH19fX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXQmJnQubWF0Y2goUCk7aWYoaSYmMT09PWUubm9kZVR5cGUpd2hpbGUobj1pW3IrK10pZS5yZW1vdmVBdHRyaWJ1dGUobil9fSksY3Q9e3NldDpmdW5jdGlvbihlLHQsbil7cmV0dXJuITE9PT10P1MucmVtb3ZlQXR0cihlLG4pOmUuc2V0QXR0cmlidXRlKG4sbiksbn19LFMuZWFjaChTLmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1x3Ky9nKSxmdW5jdGlvbihlLHQpe3ZhciBhPWZ0W3RdfHxTLmZpbmQuYXR0cjtmdFt0XT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXQudG9Mb3dlckNhc2UoKTtyZXR1cm4gbnx8KGk9ZnRbb10sZnRbb109cixyPW51bGwhPWEoZSx0LG4pP286bnVsbCxmdFtvXT1pKSxyfX0pO3ZhciBwdD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLGR0PS9eKD86YXxhcmVhKSQvaTtmdW5jdGlvbiBodChlKXtyZXR1cm4oZS5tYXRjaChQKXx8W10pLmpvaW4oIiAiKX1mdW5jdGlvbiBndChlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIn1mdW5jdGlvbiB2dChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOiJzdHJpbmciPT10eXBlb2YgZSYmZS5tYXRjaChQKXx8W119Uy5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJCh0aGlzLFMucHJvcCxlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbUy5wcm9wRml4W2VdfHxlXX0pfX0pLFMuZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiAxPT09byYmUy5pc1hNTERvYyhlKXx8KHQ9Uy5wcm9wRml4W3RdfHx0LGk9Uy5wcm9wSG9va3NbdF0pLHZvaWQgMCE9PW4/aSYmInNldCJpbiBpJiZ2b2lkIDAhPT0ocj1pLnNldChlLG4sdCkpP3I6ZVt0XT1uOmkmJiJnZXQiaW4gaSYmbnVsbCE9PShyPWkuZ2V0KGUsdCkpP3I6ZVt0XX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PVMuZmluZC5hdHRyKGUsInRhYmluZGV4Iik7cmV0dXJuIHQ/cGFyc2VJbnQodCwxMCk6cHQudGVzdChlLm5vZGVOYW1lKXx8ZHQudGVzdChlLm5vZGVOYW1lKSYmZS5ocmVmPzA6LTF9fX0scHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9fSkseS5vcHRTZWxlY3RlZHx8KFMucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiZ0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LG51bGx9LHNldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7dCYmKHQuc2VsZWN0ZWRJbmRleCx0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KX19KSxTLmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe1MucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSxTLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhLHMsdT0wO2lmKG0odCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLmFkZENsYXNzKHQuY2FsbCh0aGlzLGUsZ3QodGhpcykpKX0pO2lmKChlPXZ0KHQpKS5sZW5ndGgpd2hpbGUobj10aGlzW3UrK10paWYoaT1ndChuKSxyPTE9PT1uLm5vZGVUeXBlJiYiICIraHQoaSkrIiAiKXthPTA7d2hpbGUobz1lW2ErK10pci5pbmRleE9mKCIgIitvKyIgIik8MCYmKHIrPW8rIiAiKTtpIT09KHM9aHQocikpJiZuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHMpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxvLGEscyx1PTA7aWYobSh0KSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe1ModGhpcykucmVtb3ZlQ2xhc3ModC5jYWxsKHRoaXMsZSxndCh0aGlzKSkpfSk7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuYXR0cigiY2xhc3MiLCIiKTtpZigoZT12dCh0KSkubGVuZ3RoKXdoaWxlKG49dGhpc1t1KytdKWlmKGk9Z3Qobikscj0xPT09bi5ub2RlVHlwZSYmIiAiK2h0KGkpKyIgIil7YT0wO3doaWxlKG89ZVthKytdKXdoaWxlKC0xPHIuaW5kZXhPZigiICIrbysiICIpKXI9ci5yZXBsYWNlKCIgIitvKyIgIiwiICIpO2khPT0ocz1odChyKSkmJm4uc2V0QXR0cmlidXRlKCJjbGFzcyIscyl9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGksdCl7dmFyIG89dHlwZW9mIGksYT0ic3RyaW5nIj09PW98fEFycmF5LmlzQXJyYXkoaSk7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdCYmYT90P3RoaXMuYWRkQ2xhc3MoaSk6dGhpcy5yZW1vdmVDbGFzcyhpKTptKGkpP3RoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLnRvZ2dsZUNsYXNzKGkuY2FsbCh0aGlzLGUsZ3QodGhpcyksdCksdCl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZSx0LG4scjtpZihhKXt0PTAsbj1TKHRoaXMpLHI9dnQoaSk7d2hpbGUoZT1yW3QrK10pbi5oYXNDbGFzcyhlKT9uLnJlbW92ZUNsYXNzKGUpOm4uYWRkQ2xhc3MoZSl9ZWxzZSB2b2lkIDAhPT1pJiYiYm9vbGVhbiIhPT1vfHwoKGU9Z3QodGhpcykpJiZZLnNldCh0aGlzLCJfX2NsYXNzTmFtZV9fIixlKSx0aGlzLnNldEF0dHJpYnV0ZSYmdGhpcy5zZXRBdHRyaWJ1dGUoImNsYXNzIixlfHwhMT09PWk/IiI6WS5nZXQodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIikpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj0wO3Q9IiAiK2UrIiAiO3doaWxlKG49dGhpc1tyKytdKWlmKDE9PT1uLm5vZGVUeXBlJiYtMTwoIiAiK2h0KGd0KG4pKSsiICIpLmluZGV4T2YodCkpcmV0dXJuITA7cmV0dXJuITF9fSk7dmFyIHl0PS9cci9nO1MuZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24obil7dmFyIHIsZSxpLHQ9dGhpc1swXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1tKG4pLHRoaXMuZWFjaChmdW5jdGlvbihlKXt2YXIgdDsxPT09dGhpcy5ub2RlVHlwZSYmKG51bGw9PSh0PWk/bi5jYWxsKHRoaXMsZSxTKHRoaXMpLnZhbCgpKTpuKT90PSIiOiJudW1iZXIiPT10eXBlb2YgdD90Kz0iIjpBcnJheS5pc0FycmF5KHQpJiYodD1TLm1hcCh0LGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSksKHI9Uy52YWxIb29rc1t0aGlzLnR5cGVdfHxTLnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYic2V0ImluIHImJnZvaWQgMCE9PXIuc2V0KHRoaXMsdCwidmFsdWUiKXx8KHRoaXMudmFsdWU9dCkpfSkpOnQ/KHI9Uy52YWxIb29rc1t0LnR5cGVdfHxTLnZhbEhvb2tzW3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYiZ2V0ImluIHImJnZvaWQgMCE9PShlPXIuZ2V0KHQsInZhbHVlIikpP2U6InN0cmluZyI9PXR5cGVvZihlPXQudmFsdWUpP2UucmVwbGFjZSh5dCwiIik6bnVsbD09ZT8iIjplOnZvaWQgMH19KSxTLmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PVMuZmluZC5hdHRyKGUsInZhbHVlIik7cmV0dXJuIG51bGwhPXQ/dDpodChTLnRleHQoZSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9ZS5vcHRpb25zLG89ZS5zZWxlY3RlZEluZGV4LGE9InNlbGVjdC1vbmUiPT09ZS50eXBlLHM9YT9udWxsOltdLHU9YT9vKzE6aS5sZW5ndGg7Zm9yKHI9bzwwP3U6YT9vOjA7cjx1O3IrKylpZigoKG49aVtyXSkuc2VsZWN0ZWR8fHI9PT1vKSYmIW4uZGlzYWJsZWQmJighbi5wYXJlbnROb2RlLmRpc2FibGVkfHwhQShuLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtpZih0PVMobikudmFsKCksYSlyZXR1cm4gdDtzLnB1c2godCl9cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT1lLm9wdGlvbnMsbz1TLm1ha2VBcnJheSh0KSxhPWkubGVuZ3RoO3doaWxlKGEtLSkoKHI9aVthXSkuc2VsZWN0ZWQ9LTE8Uy5pbkFycmF5KFMudmFsSG9va3Mub3B0aW9uLmdldChyKSxvKSkmJihuPSEwKTtyZXR1cm4gbnx8KGUuc2VsZWN0ZWRJbmRleD0tMSksb319fX0pLFMuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe1MudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGUuY2hlY2tlZD0tMTxTLmluQXJyYXkoUyhlKS52YWwoKSx0KX19LHkuY2hlY2tPbnx8KFMudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjplLnZhbHVlfSl9KSx5LmZvY3VzaW49Im9uZm9jdXNpbiJpbiBDO3ZhciBtdD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8seHQ9ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX07Uy5leHRlbmQoUy5ldmVudCx7dHJpZ2dlcjpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGwsYyxmLHA9W258fEVdLGQ9di5jYWxsKGUsInR5cGUiKT9lLnR5cGU6ZSxoPXYuY2FsbChlLCJuYW1lc3BhY2UiKT9lLm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKG89Zj1hPW49bnx8RSwzIT09bi5ub2RlVHlwZSYmOCE9PW4ubm9kZVR5cGUmJiFtdC50ZXN0KGQrUy5ldmVudC50cmlnZ2VyZWQpJiYoLTE8ZC5pbmRleE9mKCIuIikmJihkPShoPWQuc3BsaXQoIi4iKSkuc2hpZnQoKSxoLnNvcnQoKSksdT1kLmluZGV4T2YoIjoiKTwwJiYib24iK2QsKGU9ZVtTLmV4cGFuZG9dP2U6bmV3IFMuRXZlbnQoZCwib2JqZWN0Ij09dHlwZW9mIGUmJmUpKS5pc1RyaWdnZXI9cj8yOjMsZS5uYW1lc3BhY2U9aC5qb2luKCIuIiksZS5ybmFtZXNwYWNlPWUubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxlLnJlc3VsdD12b2lkIDAsZS50YXJnZXR8fChlLnRhcmdldD1uKSx0PW51bGw9PXQ/W2VdOlMubWFrZUFycmF5KHQsW2VdKSxjPVMuZXZlbnQuc3BlY2lhbFtkXXx8e30scnx8IWMudHJpZ2dlcnx8ITEhPT1jLnRyaWdnZXIuYXBwbHkobix0KSkpe2lmKCFyJiYhYy5ub0J1YmJsZSYmIXgobikpe2ZvcihzPWMuZGVsZWdhdGVUeXBlfHxkLG10LnRlc3QocytkKXx8KG89by5wYXJlbnROb2RlKTtvO289by5wYXJlbnROb2RlKXAucHVzaChvKSxhPW87YT09PShuLm93bmVyRG9jdW1lbnR8fEUpJiZwLnB1c2goYS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3d8fEMpfWk9MDt3aGlsZSgobz1wW2krK10pJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWY9byxlLnR5cGU9MTxpP3M6Yy5iaW5kVHlwZXx8ZCwobD0oWS5nZXQobywiZXZlbnRzIil8fE9iamVjdC5jcmVhdGUobnVsbCkpW2UudHlwZV0mJlkuZ2V0KG8sImhhbmRsZSIpKSYmbC5hcHBseShvLHQpLChsPXUmJm9bdV0pJiZsLmFwcGx5JiZWKG8pJiYoZS5yZXN1bHQ9bC5hcHBseShvLHQpLCExPT09ZS5yZXN1bHQmJmUucHJldmVudERlZmF1bHQoKSk7cmV0dXJuIGUudHlwZT1kLHJ8fGUuaXNEZWZhdWx0UHJldmVudGVkKCl8fGMuX2RlZmF1bHQmJiExIT09Yy5fZGVmYXVsdC5hcHBseShwLnBvcCgpLHQpfHwhVihuKXx8dSYmbShuW2RdKSYmIXgobikmJigoYT1uW3VdKSYmKG5bdV09bnVsbCksUy5ldmVudC50cmlnZ2VyZWQ9ZCxlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmYuYWRkRXZlbnRMaXN0ZW5lcihkLHh0KSxuW2RdKCksZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZmLnJlbW92ZUV2ZW50TGlzdGVuZXIoZCx4dCksUy5ldmVudC50cmlnZ2VyZWQ9dm9pZCAwLGEmJihuW3VdPWEpKSxlLnJlc3VsdH19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1TLmV4dGVuZChuZXcgUy5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITB9KTtTLmV2ZW50LnRyaWdnZXIocixudWxsLHQpfX0pLFMuZm4uZXh0ZW5kKHt0cmlnZ2VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1MuZXZlbnQudHJpZ2dlcihlLHQsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzWzBdO2lmKG4pcmV0dXJuIFMuZXZlbnQudHJpZ2dlcihlLHQsbiwhMCl9fSkseS5mb2N1c2lufHxTLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKG4scil7dmFyIGk9ZnVuY3Rpb24oZSl7Uy5ldmVudC5zaW11bGF0ZShyLGUudGFyZ2V0LFMuZXZlbnQuZml4KGUpKX07Uy5ldmVudC5zcGVjaWFsW3JdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcy5kb2N1bWVudHx8dGhpcyx0PVkuYWNjZXNzKGUscik7dHx8ZS5hZGRFdmVudExpc3RlbmVyKG4saSwhMCksWS5hY2Nlc3MoZSxyLCh0fHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMuZG9jdW1lbnR8fHRoaXMsdD1ZLmFjY2VzcyhlLHIpLTE7dD9ZLmFjY2VzcyhlLHIsdCk6KGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLGksITApLFkucmVtb3ZlKGUscikpfX19KTt2YXIgYnQ9Qy5sb2NhdGlvbix3dD17Z3VpZDpEYXRlLm5vdygpfSxUdD0vXD8vO1MucGFyc2VYTUw9ZnVuY3Rpb24oZSl7dmFyIHQsbjtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBudWxsO3RyeXt0PShuZXcgQy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhlLCJ0ZXh0L3htbCIpfWNhdGNoKGUpe31yZXR1cm4gbj10JiZ0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpWzBdLHQmJiFufHxTLmVycm9yKCJJbnZhbGlkIFhNTDogIisobj9TLm1hcChuLmNoaWxkTm9kZXMsZnVuY3Rpb24oZSl7cmV0dXJuIGUudGV4dENvbnRlbnR9KS5qb2luKCJcbiIpOmUpKSx0fTt2YXIgQ3Q9L1xbXF0kLyxFdD0vXHI/XG4vZyxTdD0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksa3Q9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIEF0KG4sZSxyLGkpe3ZhciB0O2lmKEFycmF5LmlzQXJyYXkoZSkpUy5lYWNoKGUsZnVuY3Rpb24oZSx0KXtyfHxDdC50ZXN0KG4pP2kobix0KTpBdChuKyJbIisoIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10P2U6IiIpKyJdIix0LHIsaSl9KTtlbHNlIGlmKHJ8fCJvYmplY3QiIT09dyhlKSlpKG4sZSk7ZWxzZSBmb3IodCBpbiBlKUF0KG4rIlsiK3QrIl0iLGVbdF0scixpKX1TLnBhcmFtPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPWZ1bmN0aW9uKGUsdCl7dmFyIG49bSh0KT90KCk6dDtyW3IubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChudWxsPT1uPyIiOm4pfTtpZihudWxsPT1lKXJldHVybiIiO2lmKEFycmF5LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYhUy5pc1BsYWluT2JqZWN0KGUpKVMuZWFjaChlLGZ1bmN0aW9uKCl7aSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihuIGluIGUpQXQobixlW25dLHQsaSk7cmV0dXJuIHIuam9pbigiJiIpfSxTLmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIFMucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT1TLnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT9TLm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFTKHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYma3QudGVzdCh0aGlzLm5vZGVOYW1lKSYmIVN0LnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFwZS50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPVModGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDpBcnJheS5pc0FycmF5KG4pP1MubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShFdCwiXHJcbiIpfX0pOntuYW1lOnQubmFtZSx2YWx1ZTpuLnJlcGxhY2UoRXQsIlxyXG4iKX19KS5nZXQoKX19KTt2YXIgTnQ9LyUyMC9nLGp0PS8jLiokLyxEdD0vKFs/Jl0pXz1bXiZdKi8scXQ9L14oLio/KTpbIFx0XSooW15cclxuXSopJC9nbSxMdD0vXig/OkdFVHxIRUFEKSQvLEh0PS9eXC9cLy8sT3Q9e30sUHQ9e30sUnQ9IiovIi5jb25jYXQoIioiKSxNdD1FLmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiBJdChvKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT0iKiIpO3ZhciBuLHI9MCxpPWUudG9Mb3dlckNhc2UoKS5tYXRjaChQKXx8W107aWYobSh0KSl3aGlsZShuPWlbcisrXSkiKyI9PT1uWzBdPyhuPW4uc2xpY2UoMSl8fCIqIiwob1tuXT1vW25dfHxbXSkudW5zaGlmdCh0KSk6KG9bbl09b1tuXXx8W10pLnB1c2godCl9fWZ1bmN0aW9uIFd0KHQsaSxvLGEpe3ZhciBzPXt9LHU9dD09PVB0O2Z1bmN0aW9uIGwoZSl7dmFyIHI7cmV0dXJuIHNbZV09ITAsUy5lYWNoKHRbZV18fFtdLGZ1bmN0aW9uKGUsdCl7dmFyIG49dChpLG8sYSk7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBufHx1fHxzW25dP3U/IShyPW4pOnZvaWQgMDooaS5kYXRhVHlwZXMudW5zaGlmdChuKSxsKG4pLCExKX0pLHJ9cmV0dXJuIGwoaS5kYXRhVHlwZXNbMF0pfHwhc1siKiJdJiZsKCIqIil9ZnVuY3Rpb24gRnQoZSx0KXt2YXIgbixyLGk9Uy5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihuIGluIHQpdm9pZCAwIT09dFtuXSYmKChpW25dP2U6cnx8KHI9e30pKVtuXT10W25dKTtyZXR1cm4gciYmUy5leHRlbmQoITAsZSxyKSxlfU10LmhyZWY9YnQuaHJlZixTLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6YnQuaHJlZix0eXBlOiJHRVQiLGlzTG9jYWw6L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8udGVzdChidC5wcm90b2NvbCksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjpSdCx0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDovXGJ4bWxcYi8saHRtbDovXGJodG1sLyxqc29uOi9cYmpzb25cYi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpKU09OLnBhcnNlLCJ0ZXh0IHhtbCI6Uy5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/RnQoRnQoZSxTLmFqYXhTZXR0aW5ncyksdCk6RnQoUy5hamF4U2V0dGluZ3MsZSl9LGFqYXhQcmVmaWx0ZXI6SXQoT3QpLGFqYXhUcmFuc3BvcnQ6SXQoUHQpLGFqYXg6ZnVuY3Rpb24oZSx0KXsib2JqZWN0Ij09dHlwZW9mIGUmJih0PWUsZT12b2lkIDApLHQ9dHx8e307dmFyIGMsZixwLG4sZCxyLGgsZyxpLG8sdj1TLmFqYXhTZXR1cCh7fSx0KSx5PXYuY29udGV4dHx8dixtPXYuY29udGV4dCYmKHkubm9kZVR5cGV8fHkuanF1ZXJ5KT9TKHkpOlMuZXZlbnQseD1TLkRlZmVycmVkKCksYj1TLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSx3PXYuc3RhdHVzQ29kZXx8e30sYT17fSxzPXt9LHU9ImNhbmNlbGVkIixUPXtyZWFkeVN0YXRlOjAsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoaCl7aWYoIW4pe249e307d2hpbGUodD1xdC5leGVjKHApKW5bdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl09KG5bdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl18fFtdKS5jb25jYXQodFsyXSl9dD1uW2UudG9Mb3dlckNhc2UoKSsiICJdfXJldHVybiBudWxsPT10P251bGw6dC5qb2luKCIsICIpfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gaD9wOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09aCYmKGU9c1tlLnRvTG93ZXJDYXNlKCldPXNbZS50b0xvd2VyQ2FzZSgpXXx8ZSxhW2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWgmJih2Lm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlpZihoKVQuYWx3YXlzKGVbVC5zdGF0dXNdKTtlbHNlIGZvcih0IGluIGUpd1t0XT1bd1t0XSxlW3RdXTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8dTtyZXR1cm4gYyYmYy5hYm9ydCh0KSxsKDAsdCksdGhpc319O2lmKHgucHJvbWlzZShUKSx2LnVybD0oKGV8fHYudXJsfHxidC5ocmVmKSsiIikucmVwbGFjZShIdCxidC5wcm90b2NvbCsiLy8iKSx2LnR5cGU9dC5tZXRob2R8fHQudHlwZXx8di5tZXRob2R8fHYudHlwZSx2LmRhdGFUeXBlcz0odi5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKFApfHxbIiJdLG51bGw9PXYuY3Jvc3NEb21haW4pe3I9RS5jcmVhdGVFbGVtZW50KCJhIik7dHJ5e3IuaHJlZj12LnVybCxyLmhyZWY9ci5ocmVmLHYuY3Jvc3NEb21haW49TXQucHJvdG9jb2wrIi8vIitNdC5ob3N0IT1yLnByb3RvY29sKyIvLyIrci5ob3N0fWNhdGNoKGUpe3YuY3Jvc3NEb21haW49ITB9fWlmKHYuZGF0YSYmdi5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiB2LmRhdGEmJih2LmRhdGE9Uy5wYXJhbSh2LmRhdGEsdi50cmFkaXRpb25hbCkpLFd0KE90LHYsdCxUKSxoKXJldHVybiBUO2ZvcihpIGluKGc9Uy5ldmVudCYmdi5nbG9iYWwpJiYwPT1TLmFjdGl2ZSsrJiZTLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLHYudHlwZT12LnR5cGUudG9VcHBlckNhc2UoKSx2Lmhhc0NvbnRlbnQ9IUx0LnRlc3Qodi50eXBlKSxmPXYudXJsLnJlcGxhY2UoanQsIiIpLHYuaGFzQ29udGVudD92LmRhdGEmJnYucHJvY2Vzc0RhdGEmJjA9PT0odi5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiYodi5kYXRhPXYuZGF0YS5yZXBsYWNlKE50LCIrIikpOihvPXYudXJsLnNsaWNlKGYubGVuZ3RoKSx2LmRhdGEmJih2LnByb2Nlc3NEYXRhfHwic3RyaW5nIj09dHlwZW9mIHYuZGF0YSkmJihmKz0oVHQudGVzdChmKT8iJiI6Ij8iKSt2LmRhdGEsZGVsZXRlIHYuZGF0YSksITE9PT12LmNhY2hlJiYoZj1mLnJlcGxhY2UoRHQsIiQxIiksbz0oVHQudGVzdChmKT8iJiI6Ij8iKSsiXz0iK3d0Lmd1aWQrKytvKSx2LnVybD1mK28pLHYuaWZNb2RpZmllZCYmKFMubGFzdE1vZGlmaWVkW2ZdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixTLmxhc3RNb2RpZmllZFtmXSksUy5ldGFnW2ZdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLFMuZXRhZ1tmXSkpLCh2LmRhdGEmJnYuaGFzQ29udGVudCYmITEhPT12LmNvbnRlbnRUeXBlfHx0LmNvbnRlbnRUeXBlKSYmVC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLHYuY29udGVudFR5cGUpLFQuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0Iix2LmRhdGFUeXBlc1swXSYmdi5hY2NlcHRzW3YuZGF0YVR5cGVzWzBdXT92LmFjY2VwdHNbdi5kYXRhVHlwZXNbMF1dKygiKiIhPT12LmRhdGFUeXBlc1swXT8iLCAiK1J0KyI7IHE9MC4wMSI6IiIpOnYuYWNjZXB0c1siKiJdKSx2LmhlYWRlcnMpVC5zZXRSZXF1ZXN0SGVhZGVyKGksdi5oZWFkZXJzW2ldKTtpZih2LmJlZm9yZVNlbmQmJighMT09PXYuYmVmb3JlU2VuZC5jYWxsKHksVCx2KXx8aCkpcmV0dXJuIFQuYWJvcnQoKTtpZih1PSJhYm9ydCIsYi5hZGQodi5jb21wbGV0ZSksVC5kb25lKHYuc3VjY2VzcyksVC5mYWlsKHYuZXJyb3IpLGM9V3QoUHQsdix0LFQpKXtpZihULnJlYWR5U3RhdGU9MSxnJiZtLnRyaWdnZXIoImFqYXhTZW5kIixbVCx2XSksaClyZXR1cm4gVDt2LmFzeW5jJiYwPHYudGltZW91dCYmKGQ9Qy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VC5hYm9ydCgidGltZW91dCIpfSx2LnRpbWVvdXQpKTt0cnl7aD0hMSxjLnNlbmQoYSxsKX1jYXRjaChlKXtpZihoKXRocm93IGU7bCgtMSxlKX19ZWxzZSBsKC0xLCJObyBUcmFuc3BvcnQiKTtmdW5jdGlvbiBsKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbD10O2h8fChoPSEwLGQmJkMuY2xlYXJUaW1lb3V0KGQpLGM9dm9pZCAwLHA9cnx8IiIsVC5yZWFkeVN0YXRlPTA8ZT80OjAsaT0yMDA8PWUmJmU8MzAwfHwzMDQ9PT1lLG4mJihzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzPWUuY29udGVudHMsdT1lLmRhdGFUeXBlczt3aGlsZSgiKiI9PT11WzBdKXUuc2hpZnQoKSx2b2lkIDA9PT1yJiYocj1lLm1pbWVUeXBlfHx0LmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSk7aWYocilmb3IoaSBpbiBzKWlmKHNbaV0mJnNbaV0udGVzdChyKSl7dS51bnNoaWZ0KGkpO2JyZWFrfWlmKHVbMF1pbiBuKW89dVswXTtlbHNle2ZvcihpIGluIG4pe2lmKCF1WzBdfHxlLmNvbnZlcnRlcnNbaSsiICIrdVswXV0pe289aTticmVha31hfHwoYT1pKX1vPW98fGF9aWYobylyZXR1cm4gbyE9PXVbMF0mJnUudW5zaGlmdChvKSxuW29dfSh2LFQsbikpLCFpJiYtMTxTLmluQXJyYXkoInNjcmlwdCIsdi5kYXRhVHlwZXMpJiZTLmluQXJyYXkoImpzb24iLHYuZGF0YVR5cGVzKTwwJiYodi5jb252ZXJ0ZXJzWyJ0ZXh0IHNjcmlwdCJdPWZ1bmN0aW9uKCl7fSkscz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGw9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gZS5jb252ZXJ0ZXJzKWxbYS50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbYV07bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKCIqIj09PW8pbz11O2Vsc2UgaWYoIioiIT09dSYmdSE9PW8pe2lmKCEoYT1sW3UrIiAiK29dfHxsWyIqICIrb10pKWZvcihpIGluIGwpaWYoKHM9aS5zcGxpdCgiICIpKVsxXT09PW8mJihhPWxbdSsiICIrc1swXV18fGxbIiogIitzWzBdXSkpeyEwPT09YT9hPWxbaV06ITAhPT1sW2ldJiYobz1zWzBdLGMudW5zaGlmdChzWzFdKSk7YnJlYWt9aWYoITAhPT1hKWlmKGEmJmVbInRocm93cyJdKXQ9YSh0KTtlbHNlIHRyeXt0PWEodCl9Y2F0Y2goZSl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6YT9lOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitvfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOnR9fSh2LHMsVCxpKSxpPyh2LmlmTW9kaWZpZWQmJigodT1ULmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIikpJiYoUy5sYXN0TW9kaWZpZWRbZl09dSksKHU9VC5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpKSYmKFMuZXRhZ1tmXT11KSksMjA0PT09ZXx8IkhFQUQiPT09di50eXBlP2w9Im5vY29udGVudCI6MzA0PT09ZT9sPSJub3Rtb2RpZmllZCI6KGw9cy5zdGF0ZSxvPXMuZGF0YSxpPSEoYT1zLmVycm9yKSkpOihhPWwsIWUmJmx8fChsPSJlcnJvciIsZTwwJiYoZT0wKSkpLFQuc3RhdHVzPWUsVC5zdGF0dXNUZXh0PSh0fHxsKSsiIixpP3gucmVzb2x2ZVdpdGgoeSxbbyxsLFRdKTp4LnJlamVjdFdpdGgoeSxbVCxsLGFdKSxULnN0YXR1c0NvZGUodyksdz12b2lkIDAsZyYmbS50cmlnZ2VyKGk/ImFqYXhTdWNjZXNzIjoiYWpheEVycm9yIixbVCx2LGk/bzphXSksYi5maXJlV2l0aCh5LFtULGxdKSxnJiYobS50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtULHZdKSwtLVMuYWN0aXZlfHxTLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gVH0sZ2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFMuZ2V0KGUsdCxuLCJqc29uIil9LGdldFNjcmlwdDpmdW5jdGlvbihlLHQpe3JldHVybiBTLmdldChlLHZvaWQgMCx0LCJzY3JpcHQiKX19KSxTLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oZSxpKXtTW2ldPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBtKHQpJiYocj1yfHxuLG49dCx0PXZvaWQgMCksUy5hamF4KFMuZXh0ZW5kKHt1cmw6ZSx0eXBlOmksZGF0YVR5cGU6cixkYXRhOnQsc3VjY2VzczpufSxTLmlzUGxhaW5PYmplY3QoZSkmJmUpKX19KSxTLmFqYXhQcmVmaWx0ZXIoZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQgaW4gZS5oZWFkZXJzKSJjb250ZW50LXR5cGUiPT09dC50b0xvd2VyQ2FzZSgpJiYoZS5jb250ZW50VHlwZT1lLmhlYWRlcnNbdF18fCIiKX0pLFMuX2V2YWxVcmw9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBTLmFqYXgoe3VybDplLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsY2FjaGU6ITAsYXN5bmM6ITEsZ2xvYmFsOiExLGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oKXt9fSxkYXRhRmlsdGVyOmZ1bmN0aW9uKGUpe1MuZ2xvYmFsRXZhbChlLHQsbil9fSl9LFMuZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzWzBdJiYobShlKSYmKGU9ZS5jYWxsKHRoaXNbMF0pKSx0PVMoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpczt3aGlsZShlLmZpcnN0RWxlbWVudENoaWxkKWU9ZS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKSksdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKG4pe3JldHVybiBtKG4pP3RoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLndyYXBJbm5lcihuLmNhbGwodGhpcyxlKSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1TKHRoaXMpLHQ9ZS5jb250ZW50cygpO3QubGVuZ3RoP3Qud3JhcEFsbChuKTplLmFwcGVuZChuKX0pfSx3cmFwOmZ1bmN0aW9uKHQpe3ZhciBuPW0odCk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLndyYXBBbGwobj90LmNhbGwodGhpcyxlKTp0KX0pfSx1bndyYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucGFyZW50KGUpLm5vdCgiYm9keSIpLmVhY2goZnVuY3Rpb24oKXtTKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KSx0aGlzfX0pLFMuZXhwci5wc2V1ZG9zLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4hUy5leHByLnBzZXVkb3MudmlzaWJsZShlKX0sUy5leHByLnBzZXVkb3MudmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4hIShlLm9mZnNldFdpZHRofHxlLm9mZnNldEhlaWdodHx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9LFMuYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEMuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goZSl7fX07dmFyIEJ0PXswOjIwMCwxMjIzOjIwNH0sJHQ9Uy5hamF4U2V0dGluZ3MueGhyKCk7eS5jb3JzPSEhJHQmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gJHQseS5hamF4PSR0PSEhJHQsUy5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGkpe3ZhciBvLGE7aWYoeS5jb3JzfHwkdCYmIWkuY3Jvc3NEb21haW4pcmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWkueGhyKCk7aWYoci5vcGVuKGkudHlwZSxpLnVybCxpLmFzeW5jLGkudXNlcm5hbWUsaS5wYXNzd29yZCksaS54aHJGaWVsZHMpZm9yKG4gaW4gaS54aHJGaWVsZHMpcltuXT1pLnhockZpZWxkc1tuXTtmb3IobiBpbiBpLm1pbWVUeXBlJiZyLm92ZXJyaWRlTWltZVR5cGUmJnIub3ZlcnJpZGVNaW1lVHlwZShpLm1pbWVUeXBlKSxpLmNyb3NzRG9tYWlufHxlWyJYLVJlcXVlc3RlZC1XaXRoIl18fChlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0IiksZSlyLnNldFJlcXVlc3RIZWFkZXIobixlW25dKTtvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe28mJihvPWE9ci5vbmxvYWQ9ci5vbmVycm9yPXIub25hYm9ydD1yLm9udGltZW91dD1yLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLCJhYm9ydCI9PT1lP3IuYWJvcnQoKToiZXJyb3IiPT09ZT8ibnVtYmVyIiE9dHlwZW9mIHIuc3RhdHVzP3QoMCwiZXJyb3IiKTp0KHIuc3RhdHVzLHIuc3RhdHVzVGV4dCk6dChCdFtyLnN0YXR1c118fHIuc3RhdHVzLHIuc3RhdHVzVGV4dCwidGV4dCIhPT0oci5yZXNwb25zZVR5cGV8fCJ0ZXh0Iil8fCJzdHJpbmciIT10eXBlb2Ygci5yZXNwb25zZVRleHQ/e2JpbmFyeTpyLnJlc3BvbnNlfTp7dGV4dDpyLnJlc3BvbnNlVGV4dH0sci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0sci5vbmxvYWQ9bygpLGE9ci5vbmVycm9yPXIub250aW1lb3V0PW8oImVycm9yIiksdm9pZCAwIT09ci5vbmFib3J0P3Iub25hYm9ydD1hOnIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PXIucmVhZHlTdGF0ZSYmQy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7byYmYSgpfSl9LG89bygiYWJvcnQiKTt0cnl7ci5zZW5kKGkuaGFzQ29udGVudCYmaS5kYXRhfHxudWxsKX1jYXRjaChlKXtpZihvKXRocm93IGV9fSxhYm9ydDpmdW5jdGlvbigpe28mJm8oKX19fSksUy5hamF4UHJlZmlsdGVyKGZ1bmN0aW9uKGUpe2UuY3Jvc3NEb21haW4mJihlLmNvbnRlbnRzLnNjcmlwdD0hMSl9KSxTLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L1xiKD86amF2YXxlY21hKXNjcmlwdFxiL30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4gUy5nbG9iYWxFdmFsKGUpLGV9fX0pLFMuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXt2b2lkIDA9PT1lLmNhY2hlJiYoZS5jYWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT0iR0VUIil9KSxTLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24obil7dmFyIHIsaTtpZihuLmNyb3NzRG9tYWlufHxuLnNjcmlwdEF0dHJzKXJldHVybntzZW5kOmZ1bmN0aW9uKGUsdCl7cj1TKCI8c2NyaXB0PiIpLmF0dHIobi5zY3JpcHRBdHRyc3x8e30pLnByb3Aoe2NoYXJzZXQ6bi5zY3JpcHRDaGFyc2V0LHNyYzpuLnVybH0pLm9uKCJsb2FkIGVycm9yIixpPWZ1bmN0aW9uKGUpe3IucmVtb3ZlKCksaT1udWxsLGUmJnQoImVycm9yIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxFLmhlYWQuYXBwZW5kQ2hpbGQoclswXSl9LGFib3J0OmZ1bmN0aW9uKCl7aSYmaSgpfX19KTt2YXIgX3QsenQ9W10sVXQ9Lyg9KVw/KD89JnwkKXxcP1w/LztTLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9enQucG9wKCl8fFMuZXhwYW5kbysiXyIrd3QuZ3VpZCsrO3JldHVybiB0aGlzW2VdPSEwLGV9fSksUy5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9ITEhPT1lLmpzb25wJiYoVXQudGVzdChlLnVybCk/InVybCI6InN0cmluZyI9PXR5cGVvZiBlLmRhdGEmJjA9PT0oZS5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZVdC50ZXN0KGUuZGF0YSkmJiJkYXRhIik7aWYoYXx8Impzb25wIj09PWUuZGF0YVR5cGVzWzBdKXJldHVybiByPWUuanNvbnBDYWxsYmFjaz1tKGUuanNvbnBDYWxsYmFjayk/ZS5qc29ucENhbGxiYWNrKCk6ZS5qc29ucENhbGxiYWNrLGE/ZVthXT1lW2FdLnJlcGxhY2UoVXQsIiQxIityKTohMSE9PWUuanNvbnAmJihlLnVybCs9KFR0LnRlc3QoZS51cmwpPyImIjoiPyIpK2UuanNvbnArIj0iK3IpLGUuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiBvfHxTLmVycm9yKHIrIiB3YXMgbm90IGNhbGxlZCIpLG9bMF19LGUuZGF0YVR5cGVzWzBdPSJqc29uIixpPUNbcl0sQ1tyXT1mdW5jdGlvbigpe289YXJndW1lbnRzfSxuLmFsd2F5cyhmdW5jdGlvbigpe3ZvaWQgMD09PWk/UyhDKS5yZW1vdmVQcm9wKHIpOkNbcl09aSxlW3JdJiYoZS5qc29ucENhbGxiYWNrPXQuanNvbnBDYWxsYmFjayx6dC5wdXNoKHIpKSxvJiZtKGkpJiZpKG9bMF0pLG89aT12b2lkIDB9KSwic2NyaXB0In0pLHkuY3JlYXRlSFRNTERvY3VtZW50PSgoX3Q9RS5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpLmJvZHkpLmlubmVySFRNTD0iPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT4iLDI9PT1fdC5jaGlsZE5vZGVzLmxlbmd0aCksUy5wYXJzZUhUTUw9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiJzdHJpbmciIT10eXBlb2YgZT9bXTooImJvb2xlYW4iPT10eXBlb2YgdCYmKG49dCx0PSExKSx0fHwoeS5jcmVhdGVIVE1MRG9jdW1lbnQ/KChyPSh0PUUuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKSkuY3JlYXRlRWxlbWVudCgiYmFzZSIpKS5ocmVmPUUubG9jYXRpb24uaHJlZix0LmhlYWQuYXBwZW5kQ2hpbGQocikpOnQ9RSksbz0hbiYmW10sKGk9Ti5leGVjKGUpKT9bdC5jcmVhdGVFbGVtZW50KGlbMV0pXTooaT14ZShbZV0sdCxvKSxvJiZvLmxlbmd0aCYmUyhvKS5yZW1vdmUoKSxTLm1lcmdlKFtdLGkuY2hpbGROb2RlcykpKTt2YXIgcixpLG99LFMuZm4ubG9hZD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9dGhpcyxzPWUuaW5kZXhPZigiICIpO3JldHVybi0xPHMmJihyPWh0KGUuc2xpY2UocykpLGU9ZS5zbGljZSgwLHMpKSxtKHQpPyhuPXQsdD12b2lkIDApOnQmJiJvYmplY3QiPT10eXBlb2YgdCYmKGk9IlBPU1QiKSwwPGEubGVuZ3RoJiZTLmFqYXgoe3VybDplLHR5cGU6aXx8IkdFVCIsZGF0YVR5cGU6Imh0bWwiLGRhdGE6dH0pLmRvbmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMsYS5odG1sKHI/UygiPGRpdj4iKS5hcHBlbmQoUy5wYXJzZUhUTUwoZSkpLmZpbmQocik6ZSl9KS5hbHdheXMobiYmZnVuY3Rpb24oZSx0KXthLmVhY2goZnVuY3Rpb24oKXtuLmFwcGx5KHRoaXMsb3x8W2UucmVzcG9uc2VUZXh0LHQsZV0pfSl9KSx0aGlzfSxTLmV4cHIucHNldWRvcy5hbmltYXRlZD1mdW5jdGlvbih0KXtyZXR1cm4gUy5ncmVwKFMudGltZXJzLGZ1bmN0aW9uKGUpe3JldHVybiB0PT09ZS5lbGVtfSkubGVuZ3RofSxTLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbD1TLmNzcyhlLCJwb3NpdGlvbiIpLGM9UyhlKSxmPXt9OyJzdGF0aWMiPT09bCYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIikscz1jLm9mZnNldCgpLG89Uy5jc3MoZSwidG9wIiksdT1TLmNzcyhlLCJsZWZ0IiksKCJhYnNvbHV0ZSI9PT1sfHwiZml4ZWQiPT09bCkmJi0xPChvK3UpLmluZGV4T2YoImF1dG8iKT8oYT0ocj1jLnBvc2l0aW9uKCkpLnRvcCxpPXIubGVmdCk6KGE9cGFyc2VGbG9hdChvKXx8MCxpPXBhcnNlRmxvYXQodSl8fDApLG0odCkmJih0PXQuY2FsbChlLG4sUy5leHRlbmQoe30scykpKSxudWxsIT10LnRvcCYmKGYudG9wPXQudG9wLXMudG9wK2EpLG51bGwhPXQubGVmdCYmKGYubGVmdD10LmxlZnQtcy5sZWZ0K2kpLCJ1c2luZyJpbiB0P3QudXNpbmcuY2FsbChlLGYpOmMuY3NzKGYpfX0sUy5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbih0KXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGUpe1Mub2Zmc2V0LnNldE9mZnNldCh0aGlzLHQsZSl9KTt2YXIgZSxuLHI9dGhpc1swXTtyZXR1cm4gcj9yLmdldENsaWVudFJlY3RzKCkubGVuZ3RoPyhlPXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcse3RvcDplLnRvcCtuLnBhZ2VZT2Zmc2V0LGxlZnQ6ZS5sZWZ0K24ucGFnZVhPZmZzZXR9KTp7dG9wOjAsbGVmdDowfTp2b2lkIDB9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGUsdCxuLHI9dGhpc1swXSxpPXt0b3A6MCxsZWZ0OjB9O2lmKCJmaXhlZCI9PT1TLmNzcyhyLCJwb3NpdGlvbiIpKXQ9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlbHNle3Q9dGhpcy5vZmZzZXQoKSxuPXIub3duZXJEb2N1bWVudCxlPXIub2Zmc2V0UGFyZW50fHxuLmRvY3VtZW50RWxlbWVudDt3aGlsZShlJiYoZT09PW4uYm9keXx8ZT09PW4uZG9jdW1lbnRFbGVtZW50KSYmInN0YXRpYyI9PT1TLmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5wYXJlbnROb2RlO2UmJmUhPT1yJiYxPT09ZS5ub2RlVHlwZSYmKChpPVMoZSkub2Zmc2V0KCkpLnRvcCs9Uy5jc3MoZSwiYm9yZGVyVG9wV2lkdGgiLCEwKSxpLmxlZnQrPVMuY3NzKGUsImJvcmRlckxlZnRXaWR0aCIsITApKX1yZXR1cm57dG9wOnQudG9wLWkudG9wLVMuY3NzKHIsIm1hcmdpblRvcCIsITApLGxlZnQ6dC5sZWZ0LWkubGVmdC1TLmNzcyhyLCJtYXJnaW5MZWZ0IiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnQ7d2hpbGUoZSYmInN0YXRpYyI9PT1TLmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV8fHJlfSl9fSksUy5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKHQsaSl7dmFyIG89InBhZ2VZT2Zmc2V0Ij09PWk7Uy5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gJCh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZih4KGUpP3I9ZTo5PT09ZS5ub2RlVHlwZSYmKHI9ZS5kZWZhdWx0Vmlldyksdm9pZCAwPT09bilyZXR1cm4gcj9yW2ldOmVbdF07cj9yLnNjcm9sbFRvKG8/ci5wYWdlWE9mZnNldDpuLG8/bjpyLnBhZ2VZT2Zmc2V0KTplW3RdPW59LHQsZSxhcmd1bWVudHMubGVuZ3RoKX19KSxTLmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oZSxuKXtTLmNzc0hvb2tzW25dPUZlKHkucGl4ZWxQb3NpdGlvbixmdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuIHQ9V2UoZSxuKSxQZS50ZXN0KHQpP1MoZSkucG9zaXRpb24oKVtuXSsicHgiOnR9KX0pLFMuZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGEscyl7Uy5lYWNoKHtwYWRkaW5nOiJpbm5lciIrYSxjb250ZW50OnMsIiI6Im91dGVyIithfSxmdW5jdGlvbihyLG8pe1MuZm5bb109ZnVuY3Rpb24oZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoJiYocnx8ImJvb2xlYW4iIT10eXBlb2YgZSksaT1yfHwoITA9PT1lfHwhMD09PXQ/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiAkKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiB4KGUpPzA9PT1vLmluZGV4T2YoIm91dGVyIik/ZVsiaW5uZXIiK2FdOmUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2FdOjk9PT1lLm5vZGVUeXBlPyhyPWUuZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KGUuYm9keVsic2Nyb2xsIithXSxyWyJzY3JvbGwiK2FdLGUuYm9keVsib2Zmc2V0IithXSxyWyJvZmZzZXQiK2FdLHJbImNsaWVudCIrYV0pKTp2b2lkIDA9PT1uP1MuY3NzKGUsdCxpKTpTLnN0eWxlKGUsdCxuLGkpfSxzLG4/ZTp2b2lkIDAsbil9fSl9KSxTLmVhY2goWyJhamF4U3RhcnQiLCJhamF4U3RvcCIsImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIsImFqYXhTdWNjZXNzIiwiYWpheFNlbmQiXSxmdW5jdGlvbihlLHQpe1MuZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub24odCxlKX19KSxTLmZuLmV4dGVuZCh7YmluZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub24oZSxudWxsLHQsbil9LHVuYmluZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9mZihlLG51bGwsdCl9LGRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKHQsZSxuLHIpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vZmYoZSwiKioiKTp0aGlzLm9mZih0LGV8fCIqKiIsbil9LGhvdmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfX0pLFMuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLG4pe1MuZm5bbl09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMDxhcmd1bWVudHMubGVuZ3RoP3RoaXMub24obixudWxsLGUsdCk6dGhpcy50cmlnZ2VyKG4pfX0pO3ZhciBYdD0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2c7Uy5wcm94eT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaTtpZigic3RyaW5nIj09dHlwZW9mIHQmJihuPWVbdF0sdD1lLGU9biksbShlKSlyZXR1cm4gcj1zLmNhbGwoYXJndW1lbnRzLDIpLChpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodHx8dGhpcyxyLmNvbmNhdChzLmNhbGwoYXJndW1lbnRzKSkpfSkuZ3VpZD1lLmd1aWQ9ZS5ndWlkfHxTLmd1aWQrKyxpfSxTLmhvbGRSZWFkeT1mdW5jdGlvbihlKXtlP1MucmVhZHlXYWl0Kys6Uy5yZWFkeSghMCl9LFMuaXNBcnJheT1BcnJheS5pc0FycmF5LFMucGFyc2VKU09OPUpTT04ucGFyc2UsUy5ub2RlTmFtZT1BLFMuaXNGdW5jdGlvbj1tLFMuaXNXaW5kb3c9eCxTLmNhbWVsQ2FzZT1YLFMudHlwZT13LFMubm93PURhdGUubm93LFMuaXNOdW1lcmljPWZ1bmN0aW9uKGUpe3ZhciB0PVMudHlwZShlKTtyZXR1cm4oIm51bWJlciI9PT10fHwic3RyaW5nIj09PXQpJiYhaXNOYU4oZS1wYXJzZUZsb2F0KGUpKX0sUy50cmltPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOihlKyIiKS5yZXBsYWNlKFh0LCIiKX0sImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIFN9KTt2YXIgVnQ9Qy5qUXVlcnksR3Q9Qy4kO3JldHVybiBTLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIEMuJD09PVMmJihDLiQ9R3QpLGUmJkMualF1ZXJ5PT09UyYmKEMualF1ZXJ5PVZ0KSxTfSwidW5kZWZpbmVkIj09dHlwZW9mIGUmJihDLmpRdWVyeT1DLiQ9UyksU30pOwo=]]></data>
	</file>
	<file>
	  <filename>/js/jquery.devlib01_hierselector.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIEBuYW1lIGRldmxpYjAxLmhpZXJzZWxlY3RvcgogKiBAbmFtZXNwYWNlIGRldmxpYjAxLmhpZXJzZWxlY3RvcgogKgogKiBAZXhhbXBsZQogKiAkKCcjbXlpbnB1dCcpLmRldmxpYjAxX2hpZXJzZWxlY3RvcigpOwogKi8KKGZ1bmN0aW9uKCQpewoKICAkLndpZGdldCgnZGV2bGliMDEuZGV2bGliMDFfaGllcnNlbGVjdG9yJywgewogICAgICBvcHRpb25zOiB7CgkgIGN1cnJlbnQ6IG51bGwsIC8qIHRoZSBjdXJyZW50IGNvbnRlbnQgaXRlbSB3ZSBhcmUgd29ya2luZyBvbiAqLwoJICB2YWx1ZTogbnVsbCwgICAvKiB0aGUgY3VycmVudCB2YWx1ZSAoY29udGVudCBpZCkgKi8KCSAgYWxsb3djdXJyZW50OiB0cnVlLCAvKiB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIHNlbGVjdCB0aGUgY3VycmVudCBwYWdlLCBpZiBjdXJyZW50IGlzIGdyZWF0ZXIgdGhhbiAtMS4uLiB0aGVuIGFsc28gYWxsb3dlZCB0byBzZWxlY3QgYSBjaGlsZCBvZiAnY3VycmVudCcgKi8KCSAgdXNlX3Blcm1zOiBmYWxzZSwgLyogdXNlIHBlcm1pc3Npb25zIHRvIGNvbnRyb2wgd2hhdCBpcyBzZWxlY3RhYmxlICovCgkgIHVzZV9zaW1wbGU6IGZhbHNlLCAvKiB1c2UgYSBzaW1wbGUgZHJvcGRvd24uLi4gaW1wbGllZCBpZiB1c2VfcGVybXMgaXMgdHJ1ZSAqLwoJICBhbGxvd19hbGw6IGZhbHNlLCAvKiBzaG93IGFsbCBjb250ZW50IGVudHJpZXMsIGV2ZW4gdGhvc2UgdGhhdCBkb24ndCBoYXZlIHVzYWJsZSBsaW5rcyAqLwoJICBmb3JfY2hpbGQ6IGZhbHNlLCAvKiB3ZSBhcmUgd2FudGluZyB0byBhZGQgYSBjaGlsZCBwYWdlICovCgkgIGlzX21hbmFnZXI6IGZhbHNlLCAvKiB0aGUgY3VycmVudCB1c2VyIGlzIGEgY29udGVudCBtYW5hZ2VyICovCiAgICAgIH0sCgogICAgICAvKioKICAgICAgICogQGlnbm9yZQogICAgICAgKi8KICAgICAgX2NyZWF0ZTogZnVuY3Rpb24oKSB7CgkgIGlmKCB0eXBlb2YoY21zX2RhdGFbJ3NlY3VyZV9wYXJhbV9uYW1lJ10pICE9ICd1bmRlZmluZWQnICkgdGhpcy5vcHRpb25zLnNlY3VyZV9wYXJhbSA9IGNtc19kYXRhWydzZWN1cmVfcGFyYW1fbmFtZSddOwoJICBpZiggdHlwZW9mKGNtc19kYXRhWyd1c2VyX2tleSddKSAhPSAndW5kZWZpbmVkJyApIHRoaXMub3B0aW9ucy51c2VyX2tleSA9IGNtc19kYXRhWyd1c2VyX2tleSddOwoJICBpZiggdHlwZW9mKGNtc19kYXRhWydhZG1pbl91cmwnXSkgIT0gJ3VuZGVmaW5lZCcgKSB0aGlzLm9wdGlvbnMuYWRtaW5fdXJsID0gY21zX2RhdGFbJ2FkbWluX3VybCddOwoJICBpZiggIXRoaXMub3B0aW9ucy5zZWN1cmVfcGFyYW0gKSB0aHJvdyAnVGhlIHNlY3VyZV9wYXJhbSBvcHRpb24gKHN0cmluZykgbXVzdCBiZSBzZXQgaW4gdGhlIGNtc21zX2xvY2sgcGx1Z2luJzsKCSAgaWYoICF0aGlzLm9wdGlvbnMudXNlcl9rZXkgKSB0aHJvdyAnVGhlIHVzZXJfa2V5IG9wdGlvbiAoc3RyaW5nKSBtdXN0IGJlIHNldCBpbiB0aGUgY21zbXNfbG9jayBwbHVnaW4nOwoJICBpZiggIXRoaXMub3B0aW9ucy5hZG1pbl91cmwgKSB0aHJvdyAnVGhlIGFkbWluX3VybCBvcHRpb24gKHN0cmluZykgbXVzdCBiZSBzZXQgaW4gdGhlIGNtc21zX2xvY2sgcGx1Z2luJzsKCgkgIC8vIGluaXRpYWxpemF0aW9uCgkgIHZhciBzZWxmID0gdGhpczsKCSAgdGhpcy5kYXRhID0ge307CgkgIHRoaXMuZGF0YS5vcmlnX3ZhbCA9IHRoaXMuZWxlbWVudC52YWwoKTsKCSAgdGhpcy5kYXRhLm5hbWUgPSB0aGlzLmVsZW1lbnQuYXR0cignbmFtZScpOwoJICB0aGlzLmRhdGEuaWQgPSB0aGlzLmVsZW1lbnQuYXR0cignaWQnKTsKCSAgdGhpcy5kYXRhLmhpZGRlbl9lID0gJCgnPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iJyt0aGlzLmRhdGEubmFtZSsnIiB2YWx1ZT0iJyt0aGlzLmRhdGEub3JpZ192YWwrJyIvPicpLmluc2VydEFmdGVyKHRoaXMuZWxlbWVudCk7CgkgIHRoaXMuZGF0YS5hamF4X3VybCA9IHRoaXMub3B0aW9ucy5hZG1pbl91cmwgKyAnL2FqYXhfY29udGVudC5waHA/Jyt0aGlzLm9wdGlvbnMuc2VjdXJlX3BhcmFtKyc9Jyt0aGlzLm9wdGlvbnMudXNlcl9rZXk7CgkgIHRoaXMuZWxlbWVudC52YWwoJycpLnJlbW92ZUF0dHIoJ25hbWUnKS5hdHRyKCdyZWFkb25seScsJ3JlYWRvbmx5JykuaGlkZSgpOwoJICAkLmFqYXgoewoJICAgICAgdXJsOiB0aGlzLmRhdGEuYWpheF91cmwrJyZ0PScrJC5ub3coKSwKCSAgICAgIGRhdGE6IHsgb3A6ICdwYWdlaW5mbycsIHBhZ2U6IHRoaXMuZGF0YS5vcmlnX3ZhbCB9LAoJICAgICAgdHlwZTogJ0dFVCcsCiAgICAgICAgICB9KS5waXBlKGZ1bmN0aW9uKHJlc3VsdCx0ZXh0U3RhdHVzLHhocil7CgkgICAgICBpZiggeGhyLnN0YXR1cyAhPSAyMDAgKSByZXR1cm4gJC5EZWZlcnJlZCgpLnJlamVjdChyZXN1bHQpOwoJICAgICAgaWYoIHR5cGVvZiByZXN1bHQuc3RhdHVzID09ICd1bmRlZmluZWQnIHx8IHJlc3VsdC5zdGF0dXMgIT0gJ3N1Y2Nlc3MnICkgcmV0dXJuICQuRGVmZXJyZWQoKS5yZWplY3QocmVzdWx0KTsKCSAgICAgIHJldHVybiByZXN1bHQuZGF0YTsKCSAgfSkuZG9uZShmdW5jdGlvbihkYXRhKXsKCSAgICAgIHNlbGYuZGF0YS5vcmlnX2lkaGllciA9IGRhdGEuaWRfaGllcmFyY2h5OwoJICAgICAgc2VsZi5kYXRhLm9yaWdfcGFnZXMgPSBkYXRhLmlkX2hpZXJhcmNoeS5zcGxpdCgnLicpOwoJICB9KS5hbHdheXMoZnVuY3Rpb24oZGF0YSl7CgkgICAgICBzZWxmLl9zZXR1cF9kcm9wZG93bnMoKTsKCSAgfSkKICAgICAgfSwKCiAgICAgIF9zZXRPcHRpb246IGZ1bmN0aW9uKCBrLCB2ICkgewoJICB0aGlzLm9wdGlvbnNba10gPSB2OwoJICB0aGlzLl9zZXR1cF9kcm9wZG93bnMoKTsKICAgICAgfSwKCiAgICAgIF9zZXR1cF9kcm9wZG93bnM6IGZ1bmN0aW9uKCkgewoJICBpZiggdGhpcy5vcHRpb25zLnVzZV9zaW1wbGUgKSB7CgkgICAgICB0aGlzLl9zZXR1cF9zaW1wbGVfZHJvcGRvd24oKTsKCSAgfQoJICBlbHNlIHsKCSAgICAgIHRoaXMuX3NldHVwX3NtYXJ0X2Ryb3Bkb3ducygpOwoJICB9CiAgICAgIH0sCgogICAgICBfYnVpbGRfc2ltcGxlX3NlbGVjdDogZnVuY3Rpb24obmFtZSxkYXRhLHNlbGVjdGVkX2lkLGhpbGl0ZSkgewoJICB2YXIgc2VsZiA9IHRoaXM7CgkgIHZhciBzZWwgPSAkKCc8c2VsZWN0Pjwvc2VsZWN0PicpLmF0dHIoJ2lkJyxuYW1lKS5hZGRDbGFzcygnY21zX3NlbGhpZXIgXFwtc2VsZWN0JykuYXR0cigndGl0bGUnLGNtc19sYW5nKCdoaWVyc2VsZWN0X3RpdGxlJykpOwoJICBzZWwub24oJ2NoYW5nZScsZnVuY3Rpb24oKXsKIAkgICAgICB2YXIgdiA9ICQodGhpcykudmFsKCk7CgkgICAgICAkKHRoaXMpLnRyaWdnZXIoJ2Ntc21zX2Zvcm1jaGFuZ2UnLHsKCQkgICdlbGVtJzogJCh0aGlzKSwKCQkgICd2YWx1ZSc6IHYKICAgICAgICAgICAgICB9KTsKCSAgfSk7CgkgIGZvciggdmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKyApIHsKCSAgICAgIHZhciBkZXB0aCA9IGRhdGFbaV0uaGllcmFyY2h5LnNwbGl0KCcuJykubGVuZ3RoOwoJICAgICAgdmFyIHN0ciA9ICcmbmJzcDsmbmJzcDsnLnJlcGVhdChkZXB0aC0xKSArIGRhdGFbaV0uZGlzcGxheTsKICAgICAgICAgICAgICB2YXIgb3B0ID0gJCgnPG9wdGlvbj4nK3N0cisnPC9vcHRpb24+JykuYXR0cigndmFsdWUnLGRhdGFbaV0uY29udGVudF9pZCk7CiAgICAgICAgICAgICAgLy9pZiggZGF0YVtpXS5jb250ZW50X2lkID09IGN1cnJlbnQgKSBvcHQuYWRkY2xhc3MoJ2N1cnJlbnQnKTsKICAgICAgICAgICAgICBpZiggZGF0YVtpXS5jb250ZW50X2lkID09IHNlbGVjdGVkX2lkICkgb3B0LmF0dHIoJ3NlbGVjdGVkJywnc2VsZWN0ZWQnKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTsKCSAgICAgIGlmKCBkYXRhW2ldLmNvbnRlbnRfaWQgPT0gaGlsaXRlICkgb3B0LmFkZENsYXNzKCdoaWxpdGUnKTsKCSAgICAgIGlmKCBkYXRhW2ldLmNvbnRlbnRfaWQgPT0gdGhpcy5vcHRpb25zLnZhbHVlICYmICF0aGlzLm9wdGlvbnMuYWxsb3djdXJyZW50ICkgb3B0LmF0dHIoJ2Rpc2FibGVkJywnZGlzYWJsZWQnKTsKCSAgICAgIGlmKCB0aGlzLm9wdGlvbnMudXNlX3Blcm1zICYmICFkYXRhW2ldLmNhbl9lZGl0ICkgb3B0LmF0dHIoJ2Rpc2FibGVkJywnZGlzYWJsZWQnKS5hZGRDbGFzcygnbm9jaGlsZHJlbicpOwoJICAgICAgLy9pZiggdGhpcy5vcHRpb25zLmZvcl9jaGlsZCAmJiAhZGF0YVtpXS5oYXNfY2hpbGRyZW4gJiYgIWRhdGFbaV0ud2FudHNfY2hpbGRyZW4gKSBvcHQuYXR0cignZGlzYWJsZWQnLCdkaXNhYmxlZCcpLmFkZENsYXNzKCdub2NoaWxkcmVuJyk7CgkgICAgICBzZWwuYXBwZW5kKG9wdCk7CgkgIH0KCSAgcmV0dXJuIHNlbDsKICAgICAgfSwKCiAgICAgIF9idWlsZF9zbWFydF9zZWxlY3Q6IGZ1bmN0aW9uKG5hbWUsZGF0YSxzZWxlY3RlZF9pZCxwYXJlbnRfc2VsZWN0YWJsZSxoaWxpdGUpIHsKCSAgdmFyIHNlbGYgPSB0aGlzOwoJICB2YXIgc2VsID0gJCgnPHNlbGVjdD48L3NlbGVjdD4nKS5hdHRyKCdpZCcsbmFtZSkuYWRkQ2xhc3MoJ2Ntc19zZWxoaWVyIFxcLXNlbGVjdCcpLmF0dHIoJ3RpdGxlJyxjbXNfbGFuZygnaGllcnNlbGVjdF90aXRsZScpKTsKCSAgc2VsLm9uKCdjaGFuZ2UnLGZ1bmN0aW9uKCl7CiAJICAgICAgdmFyIHYgPSAkKHRoaXMpLnZhbCgpOwogICAgICAgICAgICAgIGlmKCB2IDwgMSApIHsKCQkgIHYgPSAkKHRoaXMpLnByZXYoJ3NlbGVjdCcpLnZhbCgpOwoJCSAgaWYoIHR5cGVvZih2KSA9PSAndW5kZWZpbmVkJyApIHYgPSAtMTsKCSAgICAgIH0KICAgICAgICAgICAgICBzZWxmLmRhdGEuaGlkZGVuX2UudmFsKHYpLmNoYW5nZSgpOwogICAgICAgICAgICAgIHNlbGYuX3NldHVwX3NtYXJ0X2Ryb3Bkb3ducygpOwoJICAgICAgJCh0aGlzKS50cmlnZ2VyKCdjbXNtc19mb3JtY2hhbmdlJyx7CgkJICAnZWxlbSc6ICQodGhpcyksCgkJICAndmFsdWUnOiB2CiAgICAgICAgICAgICAgfSk7CgkgIH0pOwoJICBpZiggcGFyZW50X3NlbGVjdGFibGUgKSB7CgkgICAgICB2YXIgb3B0ID0gJCgnPG9wdGlvbj4nK2Ntc19sYW5nKCdub25lJykrJzwvb3B0aW9uPicpLmF0dHIoJ3ZhbHVlJywtMSk7CgkgICAgICBzZWwuYXBwZW5kKG9wdCk7CgkgIH0gZWxzZSBpZiggc2VsZWN0ZWRfaWQgPT0gLTEgKSB7CiAgICAgICAgICAgICAgLy8gbm90aGluZyBzZWxlY3RlZCwgY2Fubm90IHNlbGVjdCBub25lLi4uIGJ1dCBoYXZlIG9wdGlvbnMKCSAgICAgIHNlbGVjdGVkX2lkID0gZGF0YVswXS5jb250ZW50X2lkOwoJICAgICAgc2VsZi5kYXRhLmhpZGRlbl9lLnZhbChzZWxlY3RlZF9pZCkuY2hhbmdlKCk7CgkgIH0KCSAgZm9yKCB2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrICkgewogICAgICAgICAgICAgIHZhciBvcHQgPSAkKCc8b3B0aW9uPicrZGF0YVtpXS5kaXNwbGF5Kyc8L29wdGlvbj4nKS5hdHRyKCd2YWx1ZScsZGF0YVtpXS5jb250ZW50X2lkKTsKICAgICAgICAgICAgICAvL2lmKCBkYXRhW2ldLmNvbnRlbnRfaWQgPT0gY3VycmVudCApIG9wdC5hZGRjbGFzcygnY3VycmVudCcpOwogICAgICAgICAgICAgIGlmKCBkYXRhW2ldLmNvbnRlbnRfaWQgPT0gc2VsZWN0ZWRfaWQgKSB7CiAgICAgICAgICAgICAgICAgIG9wdC5hdHRyKCdzZWxlY3RlZCcsJ3NlbGVjdGVkJykuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7CgkgICAgICB9CgkgICAgICBpZiggZGF0YVtpXS5jb250ZW50X2lkID09IGhpbGl0ZSApIG9wdC5hZGRDbGFzcygnaGlsaXRlJyk7CgkgICAgICBpZiggZGF0YVtpXS5jb250ZW50X2lkID09IHRoaXMub3B0aW9ucy52YWx1ZSAmJiAhdGhpcy5vcHRpb25zLmFsbG93Y3VycmVudCApIG9wdC5hdHRyKCdkaXNhYmxlZCcsJ2Rpc2FibGVkJyk7CgkgICAgICBpZiggIWRhdGFbaV0uaGFzX2NoaWxkcmVuICYmIHRoaXMub3B0aW9ucy51c2VfcGVybXMgJiYgIWRhdGFbaV0uY2FuX2VkaXQgKSBvcHQuYXR0cignZGlzYWJsZWQnLCdkaXNhYmxlZCcpLmFkZENsYXNzKCdub2NoaWxkcmVuJyk7CgkgICAgICBpZiggdGhpcy5vcHRpb25zLmZvcl9jaGlsZCAmJiAhZGF0YVtpXS5oYXNfY2hpbGRyZW4gJiYgIWRhdGFbaV0ud2FudHNfY2hpbGRyZW4gKSBvcHQuYXR0cignZGlzYWJsZWQnLCdkaXNhYmxlZCcpLmFkZENsYXNzKCdub2NoaWxkcmVuJyk7CgkgICAgICBzZWwuYXBwZW5kKG9wdCk7CgkgIH0KCSAgcmV0dXJuIHNlbDsKICAgICAgfSwKCiAgICAgIF9zZXR1cF9zbWFydF9kcm9wZG93bnM6IGZ1bmN0aW9uKCkgewoJICB2YXIgc2VsZiA9IHRoaXM7CgkgIHZhciBjdXJfdmFsID0gdGhpcy5kYXRhLmhpZGRlbl9lLnZhbCgpOwoJICBzZWxmLmVsZW1lbnQucHJldkFsbCgnc2VsZWN0LmNtc19zZWxoaWVyJykucmVtb3ZlKCk7CgkgIHNlbGYuZWxlbWVudC52YWwoJycpOwoJICB2YXIgb3B0cyA9IHRoaXMub3B0aW9uczsKCSAgb3B0cy5vcCA9ICdoZXJlX3VwJzsKCSAgb3B0cy5wYWdlID0gY3VyX3ZhbDsKICAgICAgICAgICQuYWpheCh7CgkgICAgICB1cmw6IHRoaXMuZGF0YS5hamF4X3VybCsnJnQ9JyskLm5vdygpLAoJICAgICAgZGF0YTogb3B0cywKCSAgICAgIHR5cGU6ICdHRVQnLAogICAgICAgICAgfSkucGlwZShmdW5jdGlvbihyZXN1bHQsdGV4dFN0YXR1cyx4aHIpewoJICAgICAgaWYoIHhoci5zdGF0dXMgIT0gMjAwICkgcmV0dXJuICQuRGVmZXJyZWQoKS5yZWplY3QocmVzdWx0KTsKCSAgICAgIGlmKCB0eXBlb2YgcmVzdWx0LnN0YXR1cyA9PSAndW5kZWZpbmVkJyB8fCByZXN1bHQuc3RhdHVzICE9ICdzdWNjZXNzJyApIHJldHVybiAkLkRlZmVycmVkKCkucmVqZWN0KHJlc3VsdCk7CgkgICAgICByZXR1cm4gcmVzdWx0LmRhdGE7CgkgIH0pLmRvbmUoZnVuY3Rpb24oZGF0YSl7CgkgICAgICB2YXIgZm91bmRfY3VyLGN1cl9wYWdlcyA9IGZhbHNlOwoJICAgICAgdmFyIHBhcmVudF9zZWxlY3RhYmxlID0gdHJ1ZTsgLy8gcm9vdCBsZXZlbAoJICAgICAgaWYoIHNlbGYub3B0aW9ucy5mb3JfY2hpbGQgJiYgc2VsZi5vcHRpb25zLnVzZV9wZXJtcyAmJiAhc2VsZi5vcHRpb25zLmlzX21hbmFnZXIgKSBwYXJlbnRfc2VsZWN0YWJsZSA9IGZhbHNlOyAgLy8gb25seSBtYW5hZ2VycyBjYW4gYWRkIGNoaWxkIHBhZ2VzIGF0IHRvcCBsZXZlbC4KCSAgICAgIGZvciggdmFyIHgxID0gMDsgeDEgPCBkYXRhLmxlbmd0aCAmJiAhZm91bmRfY3VyOyB4MSsrICkgewoJCSAgZm9yKCB2YXIgeDIgPSAwOyB4MiA8IGRhdGFbeDFdLmxlbmd0aCAmJiAhZm91bmRfY3VyOyB4MisrICkgewoJCSAgICAgIGlmKCBkYXRhW3gxXVt4Ml0uY29udGVudF9pZCA9PSBjdXJfdmFsICkgewoJCQkgIGZvdW5kX2N1ciA9IGRhdGFbeDFdW3gyXS5pZF9oaWVyYXJjaHk7CgkJCSAgYnJlYWs7CgkJICAgICAgfQoJCSAgfQoJICAgICAgfQoJICAgICAgaWYoIGZvdW5kX2N1ciApIGN1cl9wYWdlcyA9IGZvdW5kX2N1ci5zcGxpdCgnLicpOwoJICAgICAgZm9yKCB2YXIgaWR4ID0gMDsgaWR4IDwgZGF0YS5sZW5ndGg7IGlkeCsrICkgewoJCSAgaWYoIGRhdGFbaWR4XSA9PSBudWxsICkgYnJlYWs7CgkJICB2YXIgc2VsZWN0ZWQgPSAoIGlkeCA8IGN1cl9wYWdlcy5sZW5ndGggKSA/IGN1cl9wYWdlc1tpZHhdIDogLTE7CgkJICB2YXIgb3JpZ19wYWdlID0gKCBzZWxmLmRhdGEub3JpZ19wYWdlcyAmJiBpZHggPCBzZWxmLmRhdGEub3JpZ19wYWdlcy5sZW5ndGggKSA/IHNlbGYuZGF0YS5vcmlnX3BhZ2VzW2lkeF0gOiAtMTAwOwoJCSAgdmFyIHNlbCA9IHNlbGYuX2J1aWxkX3NtYXJ0X3NlbGVjdChzZWxmLmRhdGEuaWQrJ18nK2lkeCxkYXRhW2lkeF0sc2VsZWN0ZWQscGFyZW50X3NlbGVjdGFibGUsb3JpZ19wYWdlKTsKCQkgIGlmKCBzZWxlY3RlZCApIHsKCQkgICAgICBmb3IoIHZhciB4MiA9IDA7IHgyIDwgZGF0YVtpZHhdLmxlbmd0aDsgeDIrKyApIHsKCQkJICBpZiggZGF0YVtpZHhdW3gyXS5jb250ZW50X2lkID09IHNlbGVjdGVkICkgewoJCQkgICAgICBwYXJlbnRfc2VsZWN0YWJsZSA9IGRhdGFbaWR4XVt4Ml0ud2FudHNfY2hpbGRyZW47CgkJCSAgICAgIC8vIGlmIHdlIGFyZSB1c2luZyBwZXJtaXNzaW9ucywgYW5kIG5vdCBhIG1hbmFnZXIsIGFuZCBvdGhlcndpc2UgY2Fubm90IGVkaXQgdGhpcyBwYWdlCgkJCSAgICAgIC8vIHRoZW4gd2UgZGlzYWJsZSB0aGUgPG5vbmU+IGl0ZW0gaW4gdGhpcyBpdGVtcyBzZWxlY3QgZmllbGQuCgkJCSAgICAgIGlmKCAhc2VsZi5vcHRpb25zLmZvcl9jaGlsZCAmJiAhZGF0YVtpZHhdW3gyXS5oYXNfdXNhYmxlX2xpbmsgKSBwYXJlbnRfc2VsZWN0YWJsZSA9IGZhbHNlOwoJCQkgICAgICBpZiggc2VsZi5vcHRpb25zLmZvcl9jaGlsZCAmJiBzZWxmLm9wdGlvbnMudXNlX3Blcm1zICYmICFzZWxmLm9wdGlvbnMuaXNfbWFuYWdlciAmJiAhZGF0YVtpZHhdW3gyXS5jYW5fZWRpdCApIHBhcmVudF9zZWxlY3RhYmxlID0gZmFsc2U7CgkJCSAgICAgIGJyZWFrOwoJCQkgIH0KCQkgICAgICB9CgkJICB9CgkJICBzZWwuaW5zZXJ0QmVmb3JlKHNlbGYuZWxlbWVudCk7CgkgICAgICB9CgkgIH0pOwogICAgICB9LAoKICAgICAgX3NldHVwX3NpbXBsZV9kcm9wZG93bjogZnVuY3Rpb24oKSB7CgkgIHZhciBzZWxmID0gdGhpczsKCSAgdmFyIGN1cl92YWwgPSB0aGlzLmRhdGEuaGlkZGVuX2UudmFsKCk7CgkgIHZhciBvcHRzID0gdGhpcy5vcHRpb25zOwoJICBvcHRzLm9wID0gJ3VzZXJwYWdlcyc7CiAgICAgICAgICAkLmFqYXgoewoJICAgICAgdXJsOiB0aGlzLmRhdGEuYWpheF91cmwrJyZ0PScrJC5ub3coKSwKCSAgICAgIGRhdGE6IG9wdHMsCgkgICAgICB0eXBlOiAnR0VUJywKICAgICAgICAgIH0pLnBpcGUoZnVuY3Rpb24ocmVzdWx0LHRleHRTdGF0dXMseGhyKXsKCSAgICAgIGlmKCB4aHIuc3RhdHVzICE9IDIwMCApIHJldHVybiAkLkRlZmVycmVkKCkucmVqZWN0KHJlc3VsdCk7CgkgICAgICBpZiggdHlwZW9mIHJlc3VsdC5zdGF0dXMgPT0gJ3VuZGVmaW5lZCcgfHwgcmVzdWx0LnN0YXR1cyAhPSAnc3VjY2VzcycgKSByZXR1cm4gJC5EZWZlcnJlZCgpLnJlamVjdChyZXN1bHQpOwoJICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhOwoJICB9KS5kb25lKGZ1bmN0aW9uKGRhdGEpewoJICAgICAgdmFyIHNlbCA9IHNlbGYuX2J1aWxkX3NpbXBsZV9zZWxlY3Qoc2VsZi5kYXRhLmlkKydfMCcsZGF0YSxjdXJfdmFsLHRydWUsLTEpOwoJICAgICAgc2VsLmluc2VydEJlZm9yZShzZWxmLmVsZW1lbnQpOwoJICB9KTsKICAgICAgfSwKCiAgICAgIF9ub29wOiBmdW5jdGlvbigpIHt9CiAgfSk7Cn0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/js/jquery.loading.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHsKCWlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JykKCQltb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgianF1ZXJ5IikpOwoJZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpCgkJZGVmaW5lKFsianF1ZXJ5Il0sIGZhY3RvcnkpOwoJZWxzZSB7CgkJdmFyIGEgPSB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgPyBmYWN0b3J5KHJlcXVpcmUoImpxdWVyeSIpKSA6IGZhY3Rvcnkocm9vdFsialF1ZXJ5Il0pOwoJCWZvcih2YXIgaSBpbiBhKSAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnID8gZXhwb3J0cyA6IHJvb3QpW2ldID0gYVtpXTsKCX0KfSkod2luZG93LCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2pxdWVyeV9fKSB7CnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwCi8qKioqKiovIAkvLyBUaGUgbW9kdWxlIGNhY2hlCi8qKioqKiovIAl2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9OwovKioqKioqLwovKioqKioqLyAJLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb24KLyoqKioqKi8gCWZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHsKLyoqKioqKi8KLyoqKioqKi8gCQkvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGUKLyoqKioqKi8gCQlpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkgewovKioqKioqLyAJCQlyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0czsKLyoqKioqKi8gCQl9Ci8qKioqKiovIAkJLy8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSkKLyoqKioqKi8gCQl2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7Ci8qKioqKiovIAkJCWk6IG1vZHVsZUlkLAovKioqKioqLyAJCQlsOiBmYWxzZSwKLyoqKioqKi8gCQkJZXhwb3J0czoge30KLyoqKioqKi8gCQl9OwovKioqKioqLwovKioqKioqLyAJCS8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvbgovKioqKioqLyAJCW1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pOwovKioqKioqLwovKioqKioqLyAJCS8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWQKLyoqKioqKi8gCQltb2R1bGUubCA9IHRydWU7Ci8qKioqKiovCi8qKioqKiovIAkJLy8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGUKLyoqKioqKi8gCQlyZXR1cm4gbW9kdWxlLmV4cG9ydHM7Ci8qKioqKiovIAl9Ci8qKioqKiovCi8qKioqKiovCi8qKioqKiovIAkvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKQovKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlczsKLyoqKioqKi8KLyoqKioqKi8gCS8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlCi8qKioqKiovIAlfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzOwovKioqKioqLwovKioqKioqLyAJLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzCi8qKioqKiovIAlfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHsKLyoqKioqKi8gCQlpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7Ci8qKioqKiovIAkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pOwovKioqKioqLyAJCX0KLyoqKioqKi8gCX07Ci8qKioqKiovCi8qKioqKiovIAkvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzCi8qKioqKiovIAlfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7Ci8qKioqKiovIAkJaWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7Ci8qKioqKiovIAkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pOwovKioqKioqLyAJCX0KLyoqKioqKi8gCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pOwovKioqKioqLyAJfTsKLyoqKioqKi8KLyoqKioqKi8gCS8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdAovKioqKioqLyAJLy8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0Ci8qKioqKiovIAkvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnMKLyoqKioqKi8gCS8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdAovKioqKioqLyAJLy8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZQovKioqKioqLyAJX193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHsKLyoqKioqKi8gCQlpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTsKLyoqKioqKi8gCQlpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlOwovKioqKioqLyAJCWlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7Ci8qKioqKiovIAkJdmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKLyoqKioqKi8gCQlfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpOwovKioqKioqLyAJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTsKLyoqKioqKi8gCQlpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7Ci8qKioqKiovIAkJcmV0dXJuIG5zOwovKioqKioqLyAJfTsKLyoqKioqKi8KLyoqKioqKi8gCS8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzCi8qKioqKiovIAlfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHsKLyoqKioqKi8gCQl2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID8KLyoqKioqKi8gCQkJZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDoKLyoqKioqKi8gCQkJZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTsKLyoqKioqKi8gCQlfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7Ci8qKioqKiovIAkJcmV0dXJuIGdldHRlcjsKLyoqKioqKi8gCX07Ci8qKioqKiovCi8qKioqKiovIAkvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwKLyoqKioqKi8gCV9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTsKLyoqKioqKi8KLyoqKioqKi8gCS8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fCi8qKioqKiovIAlfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSAiIjsKLyoqKioqKi8KLyoqKioqKi8KLyoqKioqKi8gCS8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0cwovKioqKioqLyAJcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gIi4vc3JjL2xvYWRpbmcuanMiKTsKLyoqKioqKi8gfSkKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKi8gKHsKCi8qKiovICIuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL2xvYWRpbmcuY3NzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL2xvYWRpbmcuY3NzICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoKZXZhbCgiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiKShmYWxzZSk7XG4vLyBNb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmksIFwiLyogRGVmYXVsdCBqcXVlcnktbG9hZGluZyBzdHlsZXMgKi9cXHJcXG5cXHJcXG4ubG9hZGluZy1vdmVybGF5IHtcXHJcXG4gIGRpc3BsYXk6IHRhYmxlO1xcclxcbiAgb3BhY2l0eTogMC43O1xcclxcbn1cXHJcXG5cXHJcXG4ubG9hZGluZy1vdmVybGF5LWNvbnRlbnQge1xcclxcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXHJcXG4gIGxldHRlci1zcGFjaW5nOiAwLjRlbTtcXHJcXG4gIGZvbnQtc2l6ZTogMS4xNWVtO1xcclxcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxyXFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxyXFxuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xcclxcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXHJcXG59XFxyXFxuXFxyXFxuLmxvYWRpbmctb3ZlcmxheS5sb2FkaW5nLXRoZW1lLWxpZ2h0IHtcXHJcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxyXFxuICBjb2xvcjogIzAwMDtcXHJcXG59XFxyXFxuXFxyXFxuLmxvYWRpbmctb3ZlcmxheS5sb2FkaW5nLXRoZW1lLWRhcmsge1xcclxcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDtcXHJcXG4gIGNvbG9yOiAjZmZmO1xcclxcbn1cXHJcXG5cIiwgXCJcIl0pO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovLy8uL3NyYy9sb2FkaW5nLmNzcz8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIik7CgovKioqLyB9KSwKCi8qKiovICIuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICEqKiogLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoidXNlIHN0cmljdCI7CmV2YWwoIlxuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuLy8gY3NzIGJhc2UgY29kZSwgaW5qZWN0ZWQgYnkgdGhlIGNzcy1sb2FkZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh1c2VTb3VyY2VNYXApIHtcbiAgdmFyIGxpc3QgPSBbXTsgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtLCB1c2VTb3VyY2VNYXApO1xuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICByZXR1cm4gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwie1wiKS5jb25jYXQoY29udGVudCwgXCJ9XCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKCcnKTtcbiAgfTsgLy8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3RcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblxuXG4gIGxpc3QuaSA9IGZ1bmN0aW9uIChtb2R1bGVzLCBtZWRpYVF1ZXJ5KSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCAnJ11dO1xuICAgIH1cblxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgICAgdmFyIGlkID0gdGhpc1tpXVswXTtcblxuICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBtb2R1bGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGl0ZW0gPSBtb2R1bGVzW19pXTsgLy8gc2tpcCBhbHJlYWR5IGltcG9ydGVkIG1vZHVsZVxuICAgICAgLy8gdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgMTAwJSBwZXJmZWN0IGZvciB3ZWlyZCBtZWRpYSBxdWVyeSBjb21iaW5hdGlvbnNcbiAgICAgIC8vIHdoZW4gYSBtb2R1bGUgaXMgaW1wb3J0ZWQgbXVsdGlwbGUgdGltZXMgd2l0aCBkaWZmZXJlbnQgbWVkaWEgcXVlcmllcy5cbiAgICAgIC8vIEkgaG9wZSB0aGlzIHdpbGwgbmV2ZXIgb2NjdXIgKEhleSB0aGlzIHdheSB3ZSBoYXZlIHNtYWxsZXIgYnVuZGxlcylcblxuICAgICAgaWYgKGl0ZW1bMF0gPT0gbnVsbCB8fCAhYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICBpZiAobWVkaWFRdWVyeSAmJiAhaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYVF1ZXJ5O1xuICAgICAgICB9IGVsc2UgaWYgKG1lZGlhUXVlcnkpIHtcbiAgICAgICAgICBpdGVtWzJdID0gXCIoXCIuY29uY2F0KGl0ZW1bMl0sIFwiKSBhbmQgKFwiKS5jb25jYXQobWVkaWFRdWVyeSwgXCIpXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07XG5cbmZ1bmN0aW9uIGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXSB8fCAnJzsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG5cbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuXG4gIGlmICghY3NzTWFwcGluZykge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgaWYgKHVzZVNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gdG9Db21tZW50KGNzc01hcHBpbmcpO1xuICAgIHZhciBzb3VyY2VVUkxzID0gY3NzTWFwcGluZy5zb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gXCIvKiMgc291cmNlVVJMPVwiLmNvbmNhdChjc3NNYXBwaW5nLnNvdXJjZVJvb3QpLmNvbmNhdChzb3VyY2UsIFwiICovXCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKCdcXG4nKTtcbn0gLy8gQWRhcHRlZCBmcm9tIGNvbnZlcnQtc291cmNlLW1hcCAoTUlUKVxuXG5cbmZ1bmN0aW9uIHRvQ29tbWVudChzb3VyY2VNYXApIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpO1xuICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gIHJldHVybiBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG59XG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanM/Iik7CgovKioqLyB9KSwKCi8qKiovICIuL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAhKioqIC4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovCi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHsKCiJ1c2Ugc3RyaWN0IjsKZXZhbCgiXG5cbnZhciBzdHlsZXNJbkRvbSA9IHt9O1xuXG52YXIgaXNPbGRJRSA9IGZ1bmN0aW9uIGlzT2xkSUUoKSB7XG4gIHZhciBtZW1vO1xuICByZXR1cm4gZnVuY3Rpb24gbWVtb3JpemUoKSB7XG4gICAgaWYgKHR5cGVvZiBtZW1vID09PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gVGVzdCBmb3IgSUUgPD0gOSBhcyBwcm9wb3NlZCBieSBCcm93c2VyaGFja3NcbiAgICAgIC8vIEBzZWUgaHR0cDovL2Jyb3dzZXJoYWNrcy5jb20vI2hhY2stZTcxZDg2OTJmNjUzMzQxNzNmZWU3MTVjMjIyY2I4MDVcbiAgICAgIC8vIFRlc3RzIGZvciBleGlzdGVuY2Ugb2Ygc3RhbmRhcmQgZ2xvYmFscyBpcyB0byBhbGxvdyBzdHlsZS1sb2FkZXJcbiAgICAgIC8vIHRvIG9wZXJhdGUgY29ycmVjdGx5IGludG8gbm9uLXN0YW5kYXJkIGVudmlyb25tZW50c1xuICAgICAgLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlci9pc3N1ZXMvMTc3XG4gICAgICBtZW1vID0gQm9vbGVhbih3aW5kb3cgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWxsICYmICF3aW5kb3cuYXRvYik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG59KCk7XG5cbnZhciBnZXRUYXJnZXQgPSBmdW5jdGlvbiBnZXRUYXJnZXQoKSB7XG4gIHZhciBtZW1vID0ge307XG4gIHJldHVybiBmdW5jdGlvbiBtZW1vcml6ZSh0YXJnZXQpIHtcbiAgICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblxuICAgICAgaWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgICAgLy8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcbiAgICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbW9bdGFyZ2V0XTtcbiAgfTtcbn0oKTtcblxuZnVuY3Rpb24gbGlzdFRvU3R5bGVzKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIHN0eWxlcyA9IFtdO1xuICB2YXIgbmV3U3R5bGVzID0ge307XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldO1xuICAgIHZhciBpZCA9IG9wdGlvbnMuYmFzZSA/IGl0ZW1bMF0gKyBvcHRpb25zLmJhc2UgOiBpdGVtWzBdO1xuICAgIHZhciBjc3MgPSBpdGVtWzFdO1xuICAgIHZhciBtZWRpYSA9IGl0ZW1bMl07XG4gICAgdmFyIHNvdXJjZU1hcCA9IGl0ZW1bM107XG4gICAgdmFyIHBhcnQgPSB7XG4gICAgICBjc3M6IGNzcyxcbiAgICAgIG1lZGlhOiBtZWRpYSxcbiAgICAgIHNvdXJjZU1hcDogc291cmNlTWFwXG4gICAgfTtcblxuICAgIGlmICghbmV3U3R5bGVzW2lkXSkge1xuICAgICAgc3R5bGVzLnB1c2gobmV3U3R5bGVzW2lkXSA9IHtcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBwYXJ0czogW3BhcnRdXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3U3R5bGVzW2lkXS5wYXJ0cy5wdXNoKHBhcnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHlsZXM7XG59XG5cbmZ1bmN0aW9uIGFkZFN0eWxlc1RvRG9tKHN0eWxlcywgb3B0aW9ucykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gc3R5bGVzW2ldO1xuICAgIHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuICAgIHZhciBqID0gMDtcblxuICAgIGlmIChkb21TdHlsZSkge1xuICAgICAgZG9tU3R5bGUucmVmcysrO1xuXG4gICAgICBmb3IgKDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGRvbVN0eWxlLnBhcnRzW2pdKGl0ZW0ucGFydHNbal0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgZG9tU3R5bGUucGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdLCBvcHRpb25zKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwYXJ0cyA9IFtdO1xuXG4gICAgICBmb3IgKDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgcGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdLCBvcHRpb25zKSk7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlc0luRG9tW2l0ZW0uaWRdID0ge1xuICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgcmVmczogMSxcbiAgICAgICAgcGFydHM6IHBhcnRzXG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5hdHRyaWJ1dGVzLm5vbmNlID09PSAndW5kZWZpbmVkJykge1xuICAgIHZhciBub25jZSA9ICB0cnVlID8gX193ZWJwYWNrX3JlcXVpcmVfXy5uYyA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChub25jZSkge1xuICAgICAgb3B0aW9ucy5hdHRyaWJ1dGVzLm5vbmNlID0gbm9uY2U7XG4gICAgfVxuICB9XG5cbiAgT2JqZWN0LmtleXMob3B0aW9ucy5hdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBzdHlsZS5zZXRBdHRyaWJ1dGUoa2V5LCBvcHRpb25zLmF0dHJpYnV0ZXNba2V5XSk7XG4gIH0pO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5pbnNlcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRpb25zLmluc2VydChzdHlsZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRhcmdldCA9IGdldFRhcmdldChvcHRpb25zLmluc2VydCB8fCAnaGVhZCcpO1xuXG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gICAgfVxuXG4gICAgdGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICBpZiAoc3R5bGUucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxudmFyIHJlcGxhY2VUZXh0ID0gZnVuY3Rpb24gcmVwbGFjZVRleHQoKSB7XG4gIHZhciB0ZXh0U3RvcmUgPSBbXTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJlcGxhY2UoaW5kZXgsIHJlcGxhY2VtZW50KSB7XG4gICAgdGV4dFN0b3JlW2luZGV4XSA9IHJlcGxhY2VtZW50O1xuICAgIHJldHVybiB0ZXh0U3RvcmUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpO1xuICB9O1xufSgpO1xuXG5mdW5jdGlvbiBhcHBseVRvU2luZ2xldG9uVGFnKHN0eWxlLCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcbiAgdmFyIGNzcyA9IHJlbW92ZSA/ICcnIDogb2JqLmNzczsgLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IHJlcGxhY2VUZXh0KGluZGV4LCBjc3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKTtcbiAgICB2YXIgY2hpbGROb2RlcyA9IHN0eWxlLmNoaWxkTm9kZXM7XG5cbiAgICBpZiAoY2hpbGROb2Rlc1tpbmRleF0pIHtcbiAgICAgIHN0eWxlLnJlbW92ZUNoaWxkKGNoaWxkTm9kZXNbaW5kZXhdKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgIHN0eWxlLmluc2VydEJlZm9yZShjc3NOb2RlLCBjaGlsZE5vZGVzW2luZGV4XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGNzc05vZGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseVRvVGFnKHN0eWxlLCBvcHRpb25zLCBvYmopIHtcbiAgdmFyIGNzcyA9IG9iai5jc3M7XG4gIHZhciBtZWRpYSA9IG9iai5tZWRpYTtcbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cbiAgaWYgKG1lZGlhKSB7XG4gICAgc3R5bGUuc2V0QXR0cmlidXRlKCdtZWRpYScsIG1lZGlhKTtcbiAgfVxuXG4gIGlmIChzb3VyY2VNYXAgJiYgYnRvYSkge1xuICAgIGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSksIFwiICovXCIpO1xuICB9IC8vIEZvciBvbGQgSUVcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgICovXG5cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGUuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGUucmVtb3ZlQ2hpbGQoc3R5bGUuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxudmFyIHNpbmdsZXRvbiA9IG51bGw7XG52YXIgc2luZ2xldG9uQ291bnRlciA9IDA7XG5cbmZ1bmN0aW9uIGFkZFN0eWxlKG9iaiwgb3B0aW9ucykge1xuICB2YXIgc3R5bGU7XG4gIHZhciB1cGRhdGU7XG4gIHZhciByZW1vdmU7XG5cbiAgaWYgKG9wdGlvbnMuc2luZ2xldG9uKSB7XG4gICAgdmFyIHN0eWxlSW5kZXggPSBzaW5nbGV0b25Db3VudGVyKys7XG4gICAgc3R5bGUgPSBzaW5nbGV0b24gfHwgKHNpbmdsZXRvbiA9IGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSk7XG4gICAgdXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCBmYWxzZSk7XG4gICAgcmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBzdHlsZSA9IGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgICB1cGRhdGUgPSBhcHBseVRvVGFnLmJpbmQobnVsbCwgc3R5bGUsIG9wdGlvbnMpO1xuXG4gICAgcmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKTtcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlKG9iaik7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZShuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlKG9iaiA9IG5ld09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZSgpO1xuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgb3B0aW9ucy5hdHRyaWJ1dGVzID0gdHlwZW9mIG9wdGlvbnMuYXR0cmlidXRlcyA9PT0gJ29iamVjdCcgPyBvcHRpb25zLmF0dHJpYnV0ZXMgOiB7fTsgLy8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG4gIC8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2VcblxuICBpZiAoIW9wdGlvbnMuc2luZ2xldG9uICYmIHR5cGVvZiBvcHRpb25zLnNpbmdsZXRvbiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgb3B0aW9ucy5zaW5nbGV0b24gPSBpc09sZElFKCk7XG4gIH1cblxuICB2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKGxpc3QsIG9wdGlvbnMpO1xuICBhZGRTdHlsZXNUb0RvbShzdHlsZXMsIG9wdGlvbnMpO1xuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlKG5ld0xpc3QpIHtcbiAgICB2YXIgbWF5UmVtb3ZlID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBzdHlsZXNbaV07XG4gICAgICB2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcblxuICAgICAgaWYgKGRvbVN0eWxlKSB7XG4gICAgICAgIGRvbVN0eWxlLnJlZnMtLTtcbiAgICAgICAgbWF5UmVtb3ZlLnB1c2goZG9tU3R5bGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZXdMaXN0KSB7XG4gICAgICB2YXIgbmV3U3R5bGVzID0gbGlzdFRvU3R5bGVzKG5ld0xpc3QsIG9wdGlvbnMpO1xuICAgICAgYWRkU3R5bGVzVG9Eb20obmV3U3R5bGVzLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbWF5UmVtb3ZlLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9kb21TdHlsZSA9IG1heVJlbW92ZVtfaV07XG5cbiAgICAgIGlmIChfZG9tU3R5bGUucmVmcyA9PT0gMCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IF9kb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIF9kb21TdHlsZS5wYXJ0c1tqXSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVsZXRlIHN0eWxlc0luRG9tW19kb21TdHlsZS5pZF07XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzPyIpOwoKLyoqKi8gfSksCgovKioqLyAiLi9zcmMvbG9hZGluZy5jc3MiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiAuL3NyYy9sb2FkaW5nLmNzcyAqKiohCiAgXCoqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgpldmFsKCJ2YXIgY29udGVudCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohICEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2xvYWRpbmcuY3NzICovIFwiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9sb2FkaW5nLmNzc1wiKTtcblxuaWYgKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykge1xuICBjb250ZW50ID0gW1ttb2R1bGUuaSwgY29udGVudCwgJyddXTtcbn1cblxudmFyIG9wdGlvbnMgPSB7fVxuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5pZiAoY29udGVudC5sb2NhbHMpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2Fscztcbn1cblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly8vLi9zcmMvbG9hZGluZy5jc3M/Iik7CgovKioqLyB9KSwKCi8qKiovICIuL3NyYy9sb2FkaW5nLmpzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiAuL3NyYy9sb2FkaW5nLmpzICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gZXhwb3J0cyBwcm92aWRlZCAqLwovKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CgoidXNlIHN0cmljdCI7CmV2YWwoIl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBqcXVlcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGpxdWVyeSAqLyBcImpxdWVyeVwiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBqcXVlcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihqcXVlcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvYWRpbmdfY3NzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2xvYWRpbmcuY3NzICovIFwiLi9zcmMvbG9hZGluZy5jc3NcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2xvYWRpbmdfY3NzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX2xvYWRpbmdfY3NzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pO1xuXHJcblxyXG5cclxuY29uc3QgTG9hZGluZyA9IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpIHtcclxuICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xyXG4gIHRoaXMuc2V0dGluZ3MgPSBqcXVlcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuZXh0ZW5kKHt9LCBMb2FkaW5nLmRlZmF1bHRzLCBvcHRpb25zKTtcclxuICB0aGlzLnNldHRpbmdzLmZ1bGxQYWdlID0gdGhpcy5lbGVtZW50LmlzKFwiYm9keVwiKTtcclxuXHJcbiAgdGhpcy5pbml0KCk7XHJcblxyXG4gIGlmICh0aGlzLnNldHRpbmdzLnN0YXJ0KSB7XHJcbiAgICB0aGlzLnN0YXJ0KCk7XHJcbiAgfVxyXG59O1xyXG5cclxuTG9hZGluZy5kZWZhdWx0cyA9IHtcclxuICAvKipcclxuICAgKiBqUXVlcnkgZWxlbWVudCB0byBiZSB1c2VkIGFzIG92ZXJsYXlcclxuICAgKiBJZiBub3QgZGVmaW5lZCwgYSBkZWZhdWx0IG92ZXJsYXkgd2lsbCBiZSBjcmVhdGVkXHJcbiAgICovXHJcbiAgb3ZlcmxheTogdW5kZWZpbmVkLFxyXG5cclxuICAvKipcclxuICAgKiB6LWluZGV4IHRvIGJlIHVzZWQgYnkgdGhlIGRlZmF1bHQgb3ZlcmxheVxyXG4gICAqIElmIG5vdCBkZWZpbmVkLCBhIHotaW5kZXggd2lsbCBiZSBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZVxyXG4gICAqIHRhcmdldCdzIHotaW5kZXhcclxuICAgKiBIYXMgbm8gZWZmZWN0IGlmIGEgY3VzdG9tIG92ZXJsYXkgaXMgZGVmaW5lZFxyXG4gICAqL1xyXG4gIHpJbmRleDogdW5kZWZpbmVkLFxyXG5cclxuICAvKipcclxuICAgKiBNZXNzYWdlIHRvIGJlIHJlbmRlcmVkIG9uIHRoZSBvdmVybGF5IGNvbnRlbnRcclxuICAgKiBIYXMgbm8gZWZmZWN0IGlmIGEgY3VzdG9tIG92ZXJsYXkgaXMgZGVmaW5lZFxyXG4gICAqL1xyXG4gIG1lc3NhZ2U6IFwiTG9hZGluZy4uLlwiLFxyXG5cclxuICAvKipcclxuICAgKiBUaGVtZSB0byBiZSBhcHBsaWVkIG9uIHRoZSBsb2FkaW5nIGVsZW1lbnRcclxuICAgKlxyXG4gICAqIFNvbWUgZGVmYXVsdCB0aGVtZXMgYXJlIGltcGxlbWVudGVkIG9uIGBqcXVlcnkubG9hZGluZy5jc3NgLCBidXQgeW91IGNhblxyXG4gICAqICBkZWZpbmUgeW91ciBvd24uIEp1c3QgYWRkIGEgYC5sb2FkaW5nLXRoZW1lLW15X2F3ZXNvbWVfdGhlbWVgIHNlbGVjdG9yXHJcbiAgICogIHNvbWV3aGVyZSB3aXRoIHlvdXIgY3VzdG9tIHN0eWxlcyBhbmQgY2hhbmdlIHRoaXMgb3B0aW9uXHJcbiAgICogIHRvICdteV9hd2Vzb21lX3RoZW1lJy4gVGhlIGNsYXNzIGlzIGFwcGxpZWQgdG8gdGhlIHBhcmVudCBvdmVybGF5IGRpdlxyXG4gICAqXHJcbiAgICogSGFzIG5vIGVmZmVjdCBpZiBhIGN1c3RvbSBvdmVybGF5IGlzIGRlZmluZWRcclxuICAgKi9cclxuICB0aGVtZTogXCJsaWdodFwiLFxyXG5cclxuICAvKipcclxuICAgKiBDbGFzcyhlcykgdG8gYmUgYXBwbGllZCB0byB0aGUgb3ZlcmxheSBlbGVtZW50IHdoZW4gdGhlIGxvYWRpbmcgc3RhdGUgaXMgc3RhcnRlZFxyXG4gICAqL1xyXG4gIHNob3duQ2xhc3M6IFwibG9hZGluZy1zaG93blwiLFxyXG5cclxuICAvKipcclxuICAgKiBDbGFzcyhlcykgdG8gYmUgYXBwbGllZCB0byB0aGUgb3ZlcmxheSBlbGVtZW50IHdoZW4gdGhlIGxvYWRpbmcgc3RhdGUgaXMgc3RvcHBlZFxyXG4gICAqL1xyXG4gIGhpZGRlbkNsYXNzOiBcImxvYWRpbmctaGlkZGVuXCIsXHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0byB0cnVlIHRvIHN0b3AgdGhlIGxvYWRpbmcgc3RhdGUgaWYgdGhlIG92ZXJsYXkgaXMgY2xpY2tlZFxyXG4gICAqIFRoaXMgb3B0aW9ucyBkb2VzIE5PVCBvdmVycmlkZSB0aGUgb25DbGljayBldmVudFxyXG4gICAqL1xyXG4gIHN0b3BwYWJsZTogZmFsc2UsXHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0byBmYWxzZSB0byBub3Qgc3RhcnQgdGhlIGxvYWRpbmcgc3RhdGUgd2hlbiBpbml0aWFsaXplZFxyXG4gICAqL1xyXG4gIHN0YXJ0OiB0cnVlLFxyXG5cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBsb2FkaW5nIHN0YXRlIGlzIHN0YXJ0ZWRcclxuICAgKiBSZWNlaXZlcyB0aGUgbG9hZGluZyBvYmplY3QgYXMgcGFyYW1ldGVyXHJcbiAgICpcclxuICAgKiBUaGUgZnVuY3Rpb24gaXMgYXR0YWNoZWQgdG8gdGhlIGBsb2FkaW5nLnN0YXJ0YCBldmVudFxyXG4gICAqL1xyXG4gIG9uU3RhcnQ6IGZ1bmN0aW9uKGxvYWRpbmcpIHtcclxuICAgIGxvYWRpbmcub3ZlcmxheS5mYWRlSW4oMTUwKTtcclxuICB9LFxyXG5cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBsb2FkaW5nIHN0YXRlIGlzIHN0b3BwZWRcclxuICAgKiBSZWNlaXZlcyB0aGUgbG9hZGluZyBvYmplY3QgYXMgcGFyYW1ldGVyXHJcbiAgICpcclxuICAgKiBUaGUgZnVuY3Rpb24gaXMgYXR0YWNoZWQgdG8gdGhlIGBsb2FkaW5nLnN0b3BgIGV2ZW50XHJcbiAgICovXHJcbiAgb25TdG9wOiBmdW5jdGlvbihsb2FkaW5nKSB7XHJcbiAgICBsb2FkaW5nLm92ZXJsYXkuZmFkZU91dCgxNTApO1xyXG4gIH0sXHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIG92ZXJsYXkgaXMgY2xpY2tlZFxyXG4gICAqIFJlY2VpdmVzIHRoZSBsb2FkaW5nIG9iamVjdCBhcyBwYXJhbWV0ZXJcclxuICAgKlxyXG4gICAqIFRoZSBmdW5jdGlvbiBpcyBhdHRhY2hlZCB0byB0aGUgYGxvYWRpbmcuY2xpY2tgIGV2ZW50XHJcbiAgICovXHJcbiAgb25DbGljazogZnVuY3Rpb24oKSB7fVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEV4dGVuZCB0aGUgTG9hZGluZyBwbHVnaW4gZGVmYXVsdCBzZXR0aW5ncyB3aXRoIHRoZSB1c2VyIG9wdGlvbnNcclxuICogVXNlIGl0IGFzIGAkLkxvYWRpbmcuc2V0RGVmYXVsdHMoeyAuLi4gfSlgXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEN1c3RvbSBvcHRpb25zIHRvIG92ZXJyaWRlIHRoZSBwbHVnaW4gZGVmYXVsdHNcclxuICovXHJcbkxvYWRpbmcuc2V0RGVmYXVsdHMgPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgTG9hZGluZy5kZWZhdWx0cyA9IGpxdWVyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5leHRlbmQoe30sIExvYWRpbmcuZGVmYXVsdHMsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuanF1ZXJ5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmV4dGVuZChMb2FkaW5nLnByb3RvdHlwZSwge1xyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIHRoZSBvdmVybGF5IGFuZCBhdHRhY2ggaGFuZGxlcnMgdG8gdGhlIGFwcHJvcHJpYXRlIGV2ZW50c1xyXG4gICAqL1xyXG4gIGluaXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5vdmVybGF5ID0gdGhpcy5zZXR0aW5ncy5vdmVybGF5IHx8IHRoaXMuY3JlYXRlT3ZlcmxheSgpO1xyXG4gICAgdGhpcy5yZXNpemUoKTtcclxuICAgIHRoaXMuYXR0YWNoTWV0aG9kc1RvRXh0ZXJuYWxFdmVudHMoKTtcclxuICAgIHRoaXMuYXR0YWNoT3B0aW9uc0hhbmRsZXJzKCk7XHJcbiAgfSxcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgbmV3IGRlZmF1bHQgb3ZlcmxheVxyXG4gICAqXHJcbiAgICogQHJldHVybiB7alF1ZXJ5fSBBIG5ldyBvdmVybGF5IGFscmVhZHkgYXBwZW5kZWQgdG8gdGhlIHBhZ2UncyBib2R5XHJcbiAgICovXHJcbiAgY3JlYXRlT3ZlcmxheTogZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgb3ZlcmxheSA9IGpxdWVyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQoKShcclxuICAgICAgJzxkaXYgY2xhc3M9XCJsb2FkaW5nLW92ZXJsYXkgbG9hZGluZy10aGVtZS0nICtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLnRoZW1lICtcclxuICAgICAgICAnXCI+PGRpdiBjbGFzcz1cImxvYWRpbmctb3ZlcmxheS1jb250ZW50XCI+JyArXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5tZXNzYWdlICtcclxuICAgICAgICBcIjwvZGl2PjwvZGl2PlwiXHJcbiAgICApXHJcbiAgICAgIC5hZGRDbGFzcyh0aGlzLnNldHRpbmdzLmhpZGRlbkNsYXNzKVxyXG4gICAgICAuaGlkZSgpXHJcbiAgICAgIC5hcHBlbmRUbyhcImJvZHlcIik7XHJcblxyXG4gICAgdmFyIGVsZW1lbnRJRCA9IHRoaXMuZWxlbWVudC5hdHRyKFwiaWRcIik7XHJcbiAgICBpZiAoZWxlbWVudElEKSB7XHJcbiAgICAgIG92ZXJsYXkuYXR0cihcImlkXCIsIGVsZW1lbnRJRCArIFwiX2xvYWRpbmctb3ZlcmxheVwiKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3ZlcmxheTtcclxuICB9LFxyXG5cclxuICAvKipcclxuICAgKiBBdHRhY2ggc29tZSBpbnRlcm5hbCBtZXRob2RzIHRvIGV4dGVybmFsIGV2ZW50c1xyXG4gICAqIGUuZy4gb3ZlcmxheSBjbGljaywgd2luZG93IHJlc2l6ZSBldGNcclxuICAgKi9cclxuICBhdHRhY2hNZXRob2RzVG9FeHRlcm5hbEV2ZW50czogZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgLy8gQWRkIGBzaG93bkNsYXNzYCBhbmQgcmVtb3ZlIGBoaWRkZW5DbGFzc2AgZnJvbSBvdmVybGF5IHdoZW4gbG9hZGluZyBzdGF0ZVxyXG4gICAgLy8gaXMgYWN0aXZhdGVkXHJcbiAgICBzZWxmLmVsZW1lbnQub24oXCJsb2FkaW5nLnN0YXJ0XCIsIGZ1bmN0aW9uKCkge1xyXG4gICAgICBzZWxmLm92ZXJsYXlcclxuICAgICAgICAucmVtb3ZlQ2xhc3Moc2VsZi5zZXR0aW5ncy5oaWRkZW5DbGFzcylcclxuICAgICAgICAuYWRkQ2xhc3Moc2VsZi5zZXR0aW5ncy5zaG93bkNsYXNzKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEFkZCBgaGlkZGVuQ2xhc3NgIGFuZCByZW1vdmUgYHNob3duQ2xhc3NgIGZyb20gb3ZlcmxheSB3aGVuIGxvYWRpbmcgc3RhdGVcclxuICAgIC8vIGlzIHN0b3BwZWRcclxuICAgIHNlbGYuZWxlbWVudC5vbihcImxvYWRpbmcuc3RvcFwiLCBmdW5jdGlvbigpIHtcclxuICAgICAgc2VsZi5vdmVybGF5XHJcbiAgICAgICAgLnJlbW92ZUNsYXNzKHNlbGYuc2V0dGluZ3Muc2hvd25DbGFzcylcclxuICAgICAgICAuYWRkQ2xhc3Moc2VsZi5zZXR0aW5ncy5oaWRkZW5DbGFzcyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBBdHRhY2ggdGhlICdzdG9wIGxvYWRpbmcgb24gY2xpY2snIGJlaGF2aW91ciBpZiB0aGUgYHN0b3BwYWJsZWAgb3B0aW9uIGlzIHNldFxyXG4gICAgaWYgKHNlbGYuc2V0dGluZ3Muc3RvcHBhYmxlKSB7XHJcbiAgICAgIHNlbGYub3ZlcmxheS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHNlbGYuc3RvcCgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUcmlnZ2VyIHRoZSBgbG9hZGluZy5jbGlja2AgZXZlbnQgaWYgdGhlIG92ZXJsYXkgaXMgY2xpY2tlZFxyXG4gICAgc2VsZi5vdmVybGF5Lm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oKSB7XHJcbiAgICAgIHNlbGYuZWxlbWVudC50cmlnZ2VyKFwibG9hZGluZy5jbGlja1wiLCBzZWxmKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEJpbmQgdGhlIGByZXNpemVgIG1ldGhvZCB0byBgd2luZG93LnJlc2l6ZWBcclxuICAgIGpxdWVyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQoKSh3aW5kb3cpLm9uKFwicmVzaXplXCIsIGZ1bmN0aW9uKCkge1xyXG4gICAgICBzZWxmLnJlc2l6ZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQmluZCB0aGUgYHJlc2l6ZWAgbWV0aG9kIHRvIGBkb2N1bWVudC5yZWFkeWAgdG8gZ3VhcmFudGVlIHJpZ2h0XHJcbiAgICAvLyBwb3NpdGlvbmluZyBhbmQgZGltZW5zaW9ucyBhZnRlciB0aGUgcGFnZSBpcyBsb2FkZWRcclxuICAgIGpxdWVyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQoKShmdW5jdGlvbigpIHtcclxuICAgICAgc2VsZi5yZXNpemUoKTtcclxuICAgIH0pO1xyXG4gIH0sXHJcblxyXG4gIC8qKlxyXG4gICAqIEF0dGFjaCB0aGUgaGFuZGxlcnMgZGVmaW5lZCBvbiBgb3B0aW9uc2AgZm9yIHRoZSByZXNwZWN0aXZlIGV2ZW50c1xyXG4gICAqL1xyXG4gIGF0dGFjaE9wdGlvbnNIYW5kbGVyczogZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgc2VsZi5lbGVtZW50Lm9uKFwibG9hZGluZy5zdGFydFwiLCBmdW5jdGlvbihldmVudCwgbG9hZGluZykge1xyXG4gICAgICBzZWxmLnNldHRpbmdzLm9uU3RhcnQobG9hZGluZyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBzZWxmLmVsZW1lbnQub24oXCJsb2FkaW5nLnN0b3BcIiwgZnVuY3Rpb24oZXZlbnQsIGxvYWRpbmcpIHtcclxuICAgICAgc2VsZi5zZXR0aW5ncy5vblN0b3AobG9hZGluZyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBzZWxmLmVsZW1lbnQub24oXCJsb2FkaW5nLmNsaWNrXCIsIGZ1bmN0aW9uKGV2ZW50LCBsb2FkaW5nKSB7XHJcbiAgICAgIHNlbGYuc2V0dGluZ3Mub25DbGljayhsb2FkaW5nKTtcclxuICAgIH0pO1xyXG4gIH0sXHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGN1bGF0ZSB0aGUgei1pbmRleCBmb3IgdGhlIGRlZmF1bHQgb3ZlcmxheSBlbGVtZW50XHJcbiAgICogUmV0dXJuIHRoZSB6LWluZGV4IHBhc3NlZCBhcyBzZXR0aW5nIHRvIHRoZSBwbHVnaW4gb3IgY2FsY3VsYXRlIGl0XHJcbiAgICogYmFzZWQgb24gdGhlIHRhcmdldCdzIHotaW5kZXhcclxuICAgKi9cclxuICBjYWxjWkluZGV4OiBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnNldHRpbmdzLnpJbmRleCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnpJbmRleDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgKHBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoXCJ6LWluZGV4XCIpKSB8fCAwKSArXHJcbiAgICAgICAgMSArXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5mdWxsUGFnZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8qKlxyXG4gICAqIFJlcG9zaXRpb24gdGhlIG92ZXJsYXkgb24gdGhlIHRvcCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnRcclxuICAgKiBUaGlzIG1ldGhvZCBuZWVkcyB0byBiZSBjYWxsZWQgaWYgdGhlIHRhcmdldCBlbGVtZW50IGNoYW5nZXMgcG9zaXRpb25cclxuICAgKiAgb3IgZGltZW5zaW9uXHJcbiAgICovXHJcbiAgcmVzaXplOiBmdW5jdGlvbigpIHtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICB2YXIgZWxlbWVudCA9IHNlbGYuZWxlbWVudCxcclxuICAgICAgdG90YWxXaWR0aCA9IGVsZW1lbnQub3V0ZXJXaWR0aCgpLFxyXG4gICAgICB0b3RhbEhlaWdodCA9IGVsZW1lbnQub3V0ZXJIZWlnaHQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5mdWxsUGFnZSkge1xyXG4gICAgICB0b3RhbEhlaWdodCA9IFwiMTAwJVwiO1xyXG4gICAgICB0b3RhbFdpZHRoID0gXCIxMDAlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vdmVybGF5LmNzcyh7XHJcbiAgICAgIHBvc2l0aW9uOiBzZWxmLnNldHRpbmdzLmZ1bGxQYWdlID8gXCJmaXhlZFwiIDogXCJhYnNvbHV0ZVwiLFxyXG4gICAgICB6SW5kZXg6IHNlbGYuY2FsY1pJbmRleCgpLFxyXG4gICAgICB0b3A6IGVsZW1lbnQub2Zmc2V0KCkudG9wLFxyXG4gICAgICBsZWZ0OiBlbGVtZW50Lm9mZnNldCgpLmxlZnQsXHJcbiAgICAgIHdpZHRoOiB0b3RhbFdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHRvdGFsSGVpZ2h0XHJcbiAgICB9KTtcclxuICB9LFxyXG5cclxuICAvKipcclxuICAgKiBUcmlnZ2VyIHRoZSBgbG9hZGluZy5zdGFydGAgZXZlbnQgYW5kIHR1cm4gb24gdGhlIGxvYWRpbmcgc3RhdGVcclxuICAgKi9cclxuICBzdGFydDogZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzaXplKCk7XHJcbiAgICB0aGlzLmVsZW1lbnQudHJpZ2dlcihcImxvYWRpbmcuc3RhcnRcIiwgdGhpcyk7XHJcbiAgfSxcclxuXHJcbiAgLyoqXHJcbiAgICogVHJpZ2dlciB0aGUgYGxvYWRpbmcuc3RvcGAgZXZlbnQgYW5kIHR1cm4gb2ZmIHRoZSBsb2FkaW5nIHN0YXRlXHJcbiAgICovXHJcbiAgc3RvcDogZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XHJcbiAgICB0aGlzLmVsZW1lbnQudHJpZ2dlcihcImxvYWRpbmcuc3RvcFwiLCB0aGlzKTtcclxuICB9LFxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBsb2FkaW5nIHN0YXRlIGlzIGFjdGl2ZSBvciBub3RcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XHJcbiAgICovXHJcbiAgYWN0aXZlOiBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLmlzQWN0aXZlO1xyXG4gIH0sXHJcblxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZSB0aGUgc3RhdGUgb2YgdGhlIGxvYWRpbmcgb3ZlcmxheVxyXG4gICAqL1xyXG4gIHRvZ2dsZTogZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5hY3RpdmUoKSkge1xyXG4gICAgICB0aGlzLnN0b3AoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RhcnQoKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICAvKipcclxuICAgKiBEZXN0cm95IHBsdWdpbiBpbnN0YW5jZS5cclxuICAgKi9cclxuICBkZXN0cm95OiBmdW5jdGlvbigpIHtcclxuICAgIHRoaXMub3ZlcmxheS5yZW1vdmUoKTtcclxuICB9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIE5hbWUgb2YgdGhlIGRhdGEgYXR0cmlidXRlIHdoZXJlIHRoZSBwbHVnaW4gb2JqZWN0IHdpbGwgYmUgc3RvcmVkXHJcbiAqL1xyXG52YXIgZGF0YUF0dHIgPSBcImpxdWVyeS1sb2FkaW5nXCI7XHJcblxyXG4vKipcclxuICogSW5pdGlhbGl6ZXMgdGhlIHBsdWdpbiBhbmQgcmV0dXJuIGEgY2hhaW5hYmxlIGpRdWVyeSBvYmplY3RcclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBJbml0aWFsaXphdGlvbiBvcHRpb25zLiBFeHRlbmRzIGBMb2FkaW5nLmRlZmF1bHRzYFxyXG4gKiBAcmV0dXJuIHtqUXVlcnl9XHJcbiAqL1xyXG5qcXVlcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuZm4ubG9hZGluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgLy8gKFRyeSB0bykgcmV0cmlldmUgYW4gZXhpc3RpbmcgcGx1Z2luIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggZWxlbWVudFxyXG4gICAgdmFyIGxvYWRpbmcgPSBqcXVlcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuZGF0YSh0aGlzLCBkYXRhQXR0cik7XHJcblxyXG4gICAgaWYgKCFsb2FkaW5nKSB7XHJcbiAgICAgIC8vIEZpcnN0IGNhbGwuIEluaXRpYWxpemUgYW5kIHNhdmUgcGx1Z2luIG9iamVjdFxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgb3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMgPT09IFwib2JqZWN0XCIgfHxcclxuICAgICAgICBvcHRpb25zID09PSBcInN0YXJ0XCIgfHxcclxuICAgICAgICBvcHRpb25zID09PSBcInRvZ2dsZVwiXHJcbiAgICAgICkge1xyXG4gICAgICAgIC8vIEluaXRpYWxpemUgaXQganVzdCBpZiBhcmd1bWVudCBpcyB1bmRlZmluZWQsIGEgY29uZmlnIG9iamVjdFxyXG4gICAgICAgIC8vIG9yIGEgZGlyZWN0IGNhbGwgdG8gJ3N0YXJ0JyBvciAndG9nZ2xlJyBtZXRob2RzXHJcbiAgICAgICAganF1ZXJ5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdC5hLmRhdGEodGhpcywgZGF0YUF0dHIsIG5ldyBMb2FkaW5nKGpxdWVyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQoKSh0aGlzKSwgb3B0aW9ucykpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBBbHJlYWR5IGluaXRpYWxpemVkXHJcbiAgICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAvLyAkKC4uLikubG9hZGluZygpIGNhbGwuIENhbGwgdGhlICdzdGFydCcgYnkgZGVmYXVsdFxyXG4gICAgICAgIGxvYWRpbmcuc3RhcnQoKTtcclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIC8vICQoLi4uKS5sb2FkaW5nKCdtZXRob2QnKSBjYWxsLiBFeGVjdXRlICdtZXRob2QnXHJcbiAgICAgICAgbG9hZGluZ1tvcHRpb25zXS5hcHBseShsb2FkaW5nKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyAkKC4uLikubG9hZGluZyh7Li4ufSkgY2FsbC4gTmV3IGNvbmZpZ3VyYXRpb25zLiBSZWluaXRpYWxpemVcclxuICAgICAgICAvLyBwbHVnaW4gb2JqZWN0IHdpdGggbmV3IGNvbmZpZyBvcHRpb25zIGFuZCBzdGFydCB0aGUgcGx1Z2luXHJcbiAgICAgICAgLy8gQWxzbywgZGVzdHJveSB0aGUgb2xkIG92ZXJsYXkgaW5zdGFuY2VcclxuICAgICAgICBsb2FkaW5nLmRlc3Ryb3koKTtcclxuICAgICAgICBqcXVlcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuZGF0YSh0aGlzLCBkYXRhQXR0ciwgbmV3IExvYWRpbmcoanF1ZXJ5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCgpKHRoaXMpLCBvcHRpb25zKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gdGhlIGxvYWRpbmcgb2JqZWN0IGFzc29jaWF0ZWQgdG8gdGhlIGVsZW1lbnQgb3IgaW5pdGlhbGl6ZSBpdFxyXG4gKiBUaGlzIG1ldGhvZCBpcyBpbnRlcmVzdGluZyBpZiB5b3UgbmVlZCB0aGUgcGx1Z2luIG9iamVjdCB0byBhY2Nlc3MgdGhlXHJcbiAqIGludGVybmFsIEFQSVxyXG4gKiBFeGFtcGxlOiBgJCgnI3NvbWUtZWxlbWVudCcpLkxvYWRpbmcoKS50b2dnbGUoKWBcclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBJbml0aWFsaXphdGlvbiBvcHRpb25zLiBJZiBuZXcgb3B0aW9ucyBhcmUgZ2l2ZW5cclxuICogdG8gYSBwcmV2aW91c2x5IGluaXRpYWxpemVkIG9iamVjdCwgdGhlIG9sZCBvbmVzIGFyZSBvdmVycmlkZW4gYW5kIHRoZVxyXG4gKiBwbHVnaW4gcmVzdGFydGVkXHJcbiAqIEByZXR1cm4ge0xvYWRpbmd9XHJcbiAqL1xyXG5qcXVlcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuZm4uTG9hZGluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICB2YXIgbG9hZGluZyA9IGpxdWVyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQoKSh0aGlzKS5kYXRhKGRhdGFBdHRyKTtcclxuXHJcbiAgaWYgKCFsb2FkaW5nIHx8IG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAganF1ZXJ5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCgpKHRoaXMpLmRhdGEoZGF0YUF0dHIsIChsb2FkaW5nID0gbmV3IExvYWRpbmcoanF1ZXJ5X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCgpKHRoaXMpLCBvcHRpb25zKSkpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGxvYWRpbmc7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlIHRoZSBgOmxvYWRpbmdgIGpRdWVyeSBzZWxlY3RvclxyXG4gKiBSZXR1cm4gYWxsIHRoZSBqUXVlcnkgZWxlbWVudHMgd2l0aCB0aGUgbG9hZGluZyBzdGF0ZSBhY3RpdmVcclxuICpcclxuICogVXNpbmcgdGhlIGA6bm90KDpsb2FkaW5nKWAgd2lsbCByZXR1cm4gYWxsIGpRdWVyeSBlbGVtZW50cyB0aGF0IGFyZSBub3RcclxuICogIGxvYWRpbmcsIGV2ZW4gdGhlIG9uZXMgd2l0aCB0aGUgcGx1Z2luIG5vdCBhdHRhY2hlZC5cclxuICpcclxuICogRXhhbXBsZXMgb2YgdXNhZ2U6XHJcbiAqICBgJCgnOmxvYWRpbmcnKWAgdG8gZ2V0IGFsbCB0aGUgZWxlbWVudHMgd2l0aCB0aGUgbG9hZGluZyBzdGF0ZSBhY3RpdmVcclxuICogIGAkKCcjbXktZWxlbWVudCcpLmlzKCc6bG9hZGluZycpYCB0byBjaGVjayBpZiB0aGUgZWxlbWVudCBpcyBsb2FkaW5nXHJcbiAqL1xyXG5qcXVlcnlfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0LmEuZXhwcltcIjpcIl0ubG9hZGluZyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICB2YXIgbG9hZGluZ09iaiA9IGpxdWVyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5kYXRhKGVsZW1lbnQsIGRhdGFBdHRyKTtcclxuXHJcbiAgaWYgKCFsb2FkaW5nT2JqKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbG9hZGluZ09iai5hY3RpdmUoKTtcclxufTtcclxuXHJcbmpxdWVyeV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQuYS5Mb2FkaW5nID0gTG9hZGluZztcclxuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovLy8uL3NyYy9sb2FkaW5nLmpzPyIpOwoKLyoqKi8gfSksCgovKioqLyAianF1ZXJ5IjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgISoqKiBleHRlcm5hbCB7InJvb3QiOiJqUXVlcnkiLCJjb21tb25qcyI6ImpxdWVyeSIsImNvbW1vbmpzMiI6ImpxdWVyeSIsImFtZCI6ImpxdWVyeSJ9ICoqKiEKICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi8KLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykgewoKZXZhbCgibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2pxdWVyeV9fO1xuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly8vZXh0ZXJuYWxfJTdCJTIycm9vdCUyMjolMjJqUXVlcnklMjIsJTIyY29tbW9uanMlMjI6JTIyanF1ZXJ5JTIyLCUyMmNvbW1vbmpzMiUyMjolMjJqcXVlcnklMjIsJTIyYW1kJTIyOiUyMmpxdWVyeSUyMiU3RD8iKTsKCi8qKiovIH0pCgovKioqKioqLyB9KTsKfSk7]]></data>
	</file>
	<file>
	  <filename>/js/jquery.loading.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1lKHJlcXVpcmUoImpxdWVyeSIpKTtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFsianF1ZXJ5Il0sZSk7ZWxzZXt2YXIgbj0ib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHM/ZShyZXF1aXJlKCJqcXVlcnkiKSk6ZSh0LmpRdWVyeSk7Zm9yKHZhciBpIGluIG4pKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzOnQpW2ldPW5baV19fSh3aW5kb3csZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIG4oaSl7aWYoZVtpXSlyZXR1cm4gZVtpXS5leHBvcnRzO3ZhciBvPWVbaV09e2k6aSxsOiExLGV4cG9ydHM6e319O3JldHVybiB0W2ldLmNhbGwoby5leHBvcnRzLG8sby5leHBvcnRzLG4pLG8ubD0hMCxvLmV4cG9ydHN9cmV0dXJuIG4ubT10LG4uYz1lLG4uZD1mdW5jdGlvbih0LGUsaSl7bi5vKHQsZSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2VudW1lcmFibGU6ITAsZ2V0Oml9KX0sbi5yPWZ1bmN0aW9uKHQpeyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LG4udD1mdW5jdGlvbih0LGUpe2lmKDEmZSYmKHQ9bih0KSksOCZlKXJldHVybiB0O2lmKDQmZSYmIm9iamVjdCI9PXR5cGVvZiB0JiZ0JiZ0Ll9fZXNNb2R1bGUpcmV0dXJuIHQ7dmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihuLnIoaSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KSwyJmUmJiJzdHJpbmciIT10eXBlb2YgdClmb3IodmFyIG8gaW4gdCluLmQoaSxvLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfS5iaW5kKG51bGwsbykpO3JldHVybiBpfSxuLm49ZnVuY3Rpb24odCl7dmFyIGU9dCYmdC5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gdH07cmV0dXJuIG4uZChlLCJhIixlKSxlfSxuLm89ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9LG4ucD0iIixuKG4ucz0xKX0oW2Z1bmN0aW9uKGUsbil7ZS5leHBvcnRzPXR9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5yKGUpO3ZhciBpPW4oMCksbz1uLm4oaSk7bigyKTtjb25zdCByPWZ1bmN0aW9uKHQsZSl7dGhpcy5lbGVtZW50PXQsdGhpcy5zZXR0aW5ncz1vLmEuZXh0ZW5kKHt9LHIuZGVmYXVsdHMsZSksdGhpcy5zZXR0aW5ncy5mdWxsUGFnZT10aGlzLmVsZW1lbnQuaXMoImJvZHkiKSx0aGlzLmluaXQoKSx0aGlzLnNldHRpbmdzLnN0YXJ0JiZ0aGlzLnN0YXJ0KCl9O3IuZGVmYXVsdHM9e292ZXJsYXk6dm9pZCAwLHpJbmRleDp2b2lkIDAsbWVzc2FnZToiTG9hZGluZy4uLiIsdGhlbWU6ImxpZ2h0IixzaG93bkNsYXNzOiJsb2FkaW5nLXNob3duIixoaWRkZW5DbGFzczoibG9hZGluZy1oaWRkZW4iLHN0b3BwYWJsZTohMSxzdGFydDohMCxvblN0YXJ0OmZ1bmN0aW9uKHQpe3Qub3ZlcmxheS5mYWRlSW4oMTUwKX0sb25TdG9wOmZ1bmN0aW9uKHQpe3Qub3ZlcmxheS5mYWRlT3V0KDE1MCl9LG9uQ2xpY2s6ZnVuY3Rpb24oKXt9fSxyLnNldERlZmF1bHRzPWZ1bmN0aW9uKHQpe3IuZGVmYXVsdHM9by5hLmV4dGVuZCh7fSxyLmRlZmF1bHRzLHQpfSxvLmEuZXh0ZW5kKHIucHJvdG90eXBlLHtpbml0OmZ1bmN0aW9uKCl7dGhpcy5pc0FjdGl2ZT0hMSx0aGlzLm92ZXJsYXk9dGhpcy5zZXR0aW5ncy5vdmVybGF5fHx0aGlzLmNyZWF0ZU92ZXJsYXkoKSx0aGlzLnJlc2l6ZSgpLHRoaXMuYXR0YWNoTWV0aG9kc1RvRXh0ZXJuYWxFdmVudHMoKSx0aGlzLmF0dGFjaE9wdGlvbnNIYW5kbGVycygpfSxjcmVhdGVPdmVybGF5OmZ1bmN0aW9uKCl7dmFyIHQ9bygpKCc8ZGl2IGNsYXNzPSJsb2FkaW5nLW92ZXJsYXkgbG9hZGluZy10aGVtZS0nK3RoaXMuc2V0dGluZ3MudGhlbWUrJyI+PGRpdiBjbGFzcz0ibG9hZGluZy1vdmVybGF5LWNvbnRlbnQiPicrdGhpcy5zZXR0aW5ncy5tZXNzYWdlKyI8L2Rpdj48L2Rpdj4iKS5hZGRDbGFzcyh0aGlzLnNldHRpbmdzLmhpZGRlbkNsYXNzKS5oaWRlKCkuYXBwZW5kVG8oImJvZHkiKSxlPXRoaXMuZWxlbWVudC5hdHRyKCJpZCIpO3JldHVybiBlJiZ0LmF0dHIoImlkIixlKyJfbG9hZGluZy1vdmVybGF5IiksdH0sYXR0YWNoTWV0aG9kc1RvRXh0ZXJuYWxFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3QuZWxlbWVudC5vbigibG9hZGluZy5zdGFydCIsZnVuY3Rpb24oKXt0Lm92ZXJsYXkucmVtb3ZlQ2xhc3ModC5zZXR0aW5ncy5oaWRkZW5DbGFzcykuYWRkQ2xhc3ModC5zZXR0aW5ncy5zaG93bkNsYXNzKX0pLHQuZWxlbWVudC5vbigibG9hZGluZy5zdG9wIixmdW5jdGlvbigpe3Qub3ZlcmxheS5yZW1vdmVDbGFzcyh0LnNldHRpbmdzLnNob3duQ2xhc3MpLmFkZENsYXNzKHQuc2V0dGluZ3MuaGlkZGVuQ2xhc3MpfSksdC5zZXR0aW5ncy5zdG9wcGFibGUmJnQub3ZlcmxheS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7dC5zdG9wKCl9KSx0Lm92ZXJsYXkub24oImNsaWNrIixmdW5jdGlvbigpe3QuZWxlbWVudC50cmlnZ2VyKCJsb2FkaW5nLmNsaWNrIix0KX0pLG8oKSh3aW5kb3cpLm9uKCJyZXNpemUiLGZ1bmN0aW9uKCl7dC5yZXNpemUoKX0pLG8oKShmdW5jdGlvbigpe3QucmVzaXplKCl9KX0sYXR0YWNoT3B0aW9uc0hhbmRsZXJzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0LmVsZW1lbnQub24oImxvYWRpbmcuc3RhcnQiLGZ1bmN0aW9uKGUsbil7dC5zZXR0aW5ncy5vblN0YXJ0KG4pfSksdC5lbGVtZW50Lm9uKCJsb2FkaW5nLnN0b3AiLGZ1bmN0aW9uKGUsbil7dC5zZXR0aW5ncy5vblN0b3Aobil9KSx0LmVsZW1lbnQub24oImxvYWRpbmcuY2xpY2siLGZ1bmN0aW9uKGUsbil7dC5zZXR0aW5ncy5vbkNsaWNrKG4pfSl9LGNhbGNaSW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5zZXR0aW5ncy56SW5kZXg/dGhpcy5zZXR0aW5ncy56SW5kZXg6KHBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoInotaW5kZXgiKSl8fDApKzErdGhpcy5zZXR0aW5ncy5mdWxsUGFnZX0scmVzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50LGU9dC5vdXRlcldpZHRoKCksbj10Lm91dGVySGVpZ2h0KCk7dGhpcy5zZXR0aW5ncy5mdWxsUGFnZSYmKG49IjEwMCUiLGU9IjEwMCUiKSx0aGlzLm92ZXJsYXkuY3NzKHtwb3NpdGlvbjp0aGlzLnNldHRpbmdzLmZ1bGxQYWdlPyJmaXhlZCI6ImFic29sdXRlIix6SW5kZXg6dGhpcy5jYWxjWkluZGV4KCksdG9wOnQub2Zmc2V0KCkudG9wLGxlZnQ6dC5vZmZzZXQoKS5sZWZ0LHdpZHRoOmUsaGVpZ2h0Om59KX0sc3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLmlzQWN0aXZlPSEwLHRoaXMucmVzaXplKCksdGhpcy5lbGVtZW50LnRyaWdnZXIoImxvYWRpbmcuc3RhcnQiLHRoaXMpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5pc0FjdGl2ZT0hMSx0aGlzLmVsZW1lbnQudHJpZ2dlcigibG9hZGluZy5zdG9wIix0aGlzKX0sYWN0aXZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNBY3RpdmV9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMuYWN0aXZlKCk/dGhpcy5zdG9wKCk6dGhpcy5zdGFydCgpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5vdmVybGF5LnJlbW92ZSgpfX0pO3ZhciBzPSJqcXVlcnktbG9hZGluZyI7by5hLmZuLmxvYWRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPW8uYS5kYXRhKHRoaXMscyk7ZT92b2lkIDA9PT10P2Uuc3RhcnQoKToic3RyaW5nIj09dHlwZW9mIHQ/ZVt0XS5hcHBseShlKTooZS5kZXN0cm95KCksby5hLmRhdGEodGhpcyxzLG5ldyByKG8oKSh0aGlzKSx0KSkpOnZvaWQgMCE9PXQmJiJvYmplY3QiIT10eXBlb2YgdCYmInN0YXJ0IiE9PXQmJiJ0b2dnbGUiIT09dHx8by5hLmRhdGEodGhpcyxzLG5ldyByKG8oKSh0aGlzKSx0KSl9KX0sby5hLmZuLkxvYWRpbmc9ZnVuY3Rpb24odCl7dmFyIGU9bygpKHRoaXMpLmRhdGEocyk7cmV0dXJuIGUmJnZvaWQgMD09PXR8fG8oKSh0aGlzKS5kYXRhKHMsZT1uZXcgcihvKCkodGhpcyksdCkpLGV9LG8uYS5leHByWyI6Il0ubG9hZGluZz1mdW5jdGlvbih0KXt2YXIgZT1vLmEuZGF0YSh0LHMpO3JldHVybiEhZSYmZS5hY3RpdmUoKX0sby5hLkxvYWRpbmc9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4oMyk7InN0cmluZyI9PXR5cGVvZiBpJiYoaT1bW3QuaSxpLCIiXV0pO3ZhciBvPXtpbnNlcnQ6ImhlYWQiLHNpbmdsZXRvbjohMX07big1KShpLG8pO2kubG9jYWxzJiYodC5leHBvcnRzPWkubG9jYWxzKX0sZnVuY3Rpb24odCxlLG4peyh0LmV4cG9ydHM9big0KSghMSkpLnB1c2goW3QuaSwiLyogRGVmYXVsdCBqcXVlcnktbG9hZGluZyBzdHlsZXMgKi9cclxuXHJcbi5sb2FkaW5nLW92ZXJsYXkge1xyXG4gIGRpc3BsYXk6IHRhYmxlO1xyXG4gIG9wYWNpdHk6IDAuNztcclxufVxyXG5cclxuLmxvYWRpbmctb3ZlcmxheS1jb250ZW50IHtcclxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xyXG4gIGxldHRlci1zcGFjaW5nOiAwLjRlbTtcclxuICBmb250LXNpemU6IDEuMTVlbTtcclxuICBmb250LXdlaWdodDogYm9sZDtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcclxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG59XHJcblxyXG4ubG9hZGluZy1vdmVybGF5LmxvYWRpbmctdGhlbWUtbGlnaHQge1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcbiAgY29sb3I6ICMwMDA7XHJcbn1cclxuXHJcbi5sb2FkaW5nLW92ZXJsYXkubG9hZGluZy10aGVtZS1kYXJrIHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xyXG4gIGNvbG9yOiAjZmZmO1xyXG59XHJcbiIsIiJdKX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oZSl7dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgbj10WzFdfHwiIixpPXRbM107aWYoIWkpcmV0dXJuIG47aWYoZSYmImZ1bmN0aW9uIj09dHlwZW9mIGJ0b2Epe3ZhciBvPShzPWksYT1idG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzKSkpKSxsPSJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwiLmNvbmNhdChhKSwiLyojICIuY29uY2F0KGwsIiAqLyIpKSxyPWkuc291cmNlcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIi8qIyBzb3VyY2VVUkw9Ii5jb25jYXQoaS5zb3VyY2VSb290KS5jb25jYXQodCwiICovIil9KTtyZXR1cm5bbl0uY29uY2F0KHIpLmNvbmNhdChbb10pLmpvaW4oIlxuIil9dmFyIHMsYSxsO3JldHVybltuXS5qb2luKCJcbiIpfShlLHQpO3JldHVybiBlWzJdPyJAbWVkaWEgIi5jb25jYXQoZVsyXSwieyIpLmNvbmNhdChuLCJ9Iik6bn0pLmpvaW4oIiIpfSxlLmk9ZnVuY3Rpb24odCxuKXsic3RyaW5nIj09dHlwZW9mIHQmJih0PVtbbnVsbCx0LCIiXV0pO2Zvcih2YXIgaT17fSxvPTA7bzx0aGlzLmxlbmd0aDtvKyspe3ZhciByPXRoaXNbb11bMF07bnVsbCE9ciYmKGlbcl09ITApfWZvcih2YXIgcz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgYT10W3NdO251bGwhPWFbMF0mJmlbYVswXV18fChuJiYhYVsyXT9hWzJdPW46biYmKGFbMl09IigiLmNvbmNhdChhWzJdLCIpIGFuZCAoIikuY29uY2F0KG4sIikiKSksZS5wdXNoKGEpKX19LGV9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciBpLG89e30scj1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1pJiYoaT1Cb29sZWFuKHdpbmRvdyYmZG9jdW1lbnQmJmRvY3VtZW50LmFsbCYmIXdpbmRvdy5hdG9iKSksaX0scz1mdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiBmdW5jdGlvbihlKXtpZih2b2lkIDA9PT10W2VdKXt2YXIgbj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpO2lmKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCYmbiBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCl0cnl7bj1uLmNvbnRlbnREb2N1bWVudC5oZWFkfWNhdGNoKHQpe249bnVsbH10W2VdPW59cmV0dXJuIHRbZV19fSgpO2Z1bmN0aW9uIGEodCxlKXtmb3IodmFyIG49W10saT17fSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciByPXRbb10scz1lLmJhc2U/clswXStlLmJhc2U6clswXSxhPXtjc3M6clsxXSxtZWRpYTpyWzJdLHNvdXJjZU1hcDpyWzNdfTtpW3NdP2lbc10ucGFydHMucHVzaChhKTpuLnB1c2goaVtzXT17aWQ6cyxwYXJ0czpbYV19KX1yZXR1cm4gbn1mdW5jdGlvbiBsKHQsZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0scj1vW2kuaWRdLHM9MDtpZihyKXtmb3Ioci5yZWZzKys7czxyLnBhcnRzLmxlbmd0aDtzKyspci5wYXJ0c1tzXShpLnBhcnRzW3NdKTtmb3IoO3M8aS5wYXJ0cy5sZW5ndGg7cysrKXIucGFydHMucHVzaCh2KGkucGFydHNbc10sZSkpfWVsc2V7Zm9yKHZhciBhPVtdO3M8aS5wYXJ0cy5sZW5ndGg7cysrKWEucHVzaCh2KGkucGFydHNbc10sZSkpO29baS5pZF09e2lkOmkuaWQscmVmczoxLHBhcnRzOmF9fX19ZnVuY3Rpb24gYyh0KXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2lmKHZvaWQgMD09PXQuYXR0cmlidXRlcy5ub25jZSl7dmFyIGk9bi5uYztpJiYodC5hdHRyaWJ1dGVzLm5vbmNlPWkpfWlmKE9iamVjdC5rZXlzKHQuYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbihuKXtlLnNldEF0dHJpYnV0ZShuLHQuYXR0cmlidXRlc1tuXSl9KSwiZnVuY3Rpb24iPT10eXBlb2YgdC5pbnNlcnQpdC5pbnNlcnQoZSk7ZWxzZXt2YXIgbz1zKHQuaW5zZXJ0fHwiaGVhZCIpO2lmKCFvKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLiIpO28uYXBwZW5kQ2hpbGQoZSl9cmV0dXJuIGV9dmFyIHUsZD0odT1bXSxmdW5jdGlvbih0LGUpe3JldHVybiB1W3RdPWUsdS5maWx0ZXIoQm9vbGVhbikuam9pbigiXG4iKX0pO2Z1bmN0aW9uIGYodCxlLG4saSl7dmFyIG89bj8iIjppLmNzcztpZih0LnN0eWxlU2hlZXQpdC5zdHlsZVNoZWV0LmNzc1RleHQ9ZChlLG8pO2Vsc2V7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobykscz10LmNoaWxkTm9kZXM7c1tlXSYmdC5yZW1vdmVDaGlsZChzW2VdKSxzLmxlbmd0aD90Lmluc2VydEJlZm9yZShyLHNbZV0pOnQuYXBwZW5kQ2hpbGQocil9fXZhciBoPW51bGwscD0wO2Z1bmN0aW9uIHYodCxlKXt2YXIgbixpLG87aWYoZS5zaW5nbGV0b24pe3ZhciByPXArKztuPWh8fChoPWMoZSkpLGk9Zi5iaW5kKG51bGwsbixyLCExKSxvPWYuYmluZChudWxsLG4sciwhMCl9ZWxzZSBuPWMoZSksaT1mdW5jdGlvbih0LGUsbil7dmFyIGk9bi5jc3Msbz1uLm1lZGlhLHI9bi5zb3VyY2VNYXA7aWYobyYmdC5zZXRBdHRyaWJ1dGUoIm1lZGlhIixvKSxyJiZidG9hJiYoaSs9IlxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShyKSkpKSwiICovIikpLHQuc3R5bGVTaGVldCl0LnN0eWxlU2hlZXQuY3NzVGV4dD1pO2Vsc2V7Zm9yKDt0LmZpcnN0Q2hpbGQ7KXQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKTt0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGkpKX19LmJpbmQobnVsbCxuLGUpLG89ZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7aWYobnVsbD09PXQucGFyZW50Tm9kZSlyZXR1cm4hMTt0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9KG4pfTtyZXR1cm4gaSh0KSxmdW5jdGlvbihlKXtpZihlKXtpZihlLmNzcz09PXQuY3NzJiZlLm1lZGlhPT09dC5tZWRpYSYmZS5zb3VyY2VNYXA9PT10LnNvdXJjZU1hcClyZXR1cm47aSh0PWUpfWVsc2UgbygpfX10LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsoZT1lfHx7fSkuYXR0cmlidXRlcz0ib2JqZWN0Ij09dHlwZW9mIGUuYXR0cmlidXRlcz9lLmF0dHJpYnV0ZXM6e30sZS5zaW5nbGV0b258fCJib29sZWFuIj09dHlwZW9mIGUuc2luZ2xldG9ufHwoZS5zaW5nbGV0b249cigpKTt2YXIgbj1hKHQsZSk7cmV0dXJuIGwobixlKSxmdW5jdGlvbih0KXtmb3IodmFyIGk9W10scj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgcz1uW3JdLGM9b1tzLmlkXTtjJiYoYy5yZWZzLS0saS5wdXNoKGMpKX10JiZsKGEodCxlKSxlKTtmb3IodmFyIHU9MDt1PGkubGVuZ3RoO3UrKyl7dmFyIGQ9aVt1XTtpZigwPT09ZC5yZWZzKXtmb3IodmFyIGY9MDtmPGQucGFydHMubGVuZ3RoO2YrKylkLnBhcnRzW2ZdKCk7ZGVsZXRlIG9bZC5pZF19fX19fV0pfSk7]]></data>
	</file>
	<file>
	  <filename>/js/jquery.multi-select.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKKiBNdWx0aVNlbGVjdCB2MC45LjEyCiogQ29weXJpZ2h0IChjKSAyMDEyIExvdWlzIEN1bnkKKgoqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlLiBJdCBjb21lcyB3aXRob3V0IGFueSB3YXJyYW50eSwgdG8KKiB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdy4gWW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKKiBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRG8gV2hhdCBUaGUgRnVjayBZb3UgV2FudAoqIFRvIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSBTYW0gSG9jZXZhci4gU2VlCiogaHR0cDovL3NhbS56b3kub3JnL3d0ZnBsL0NPUFlJTkcgZm9yIG1vcmUgZGV0YWlscy4KKi8KCiFmdW5jdGlvbiAoJCkgewoKICAidXNlIHN0cmljdCI7CgoKIC8qIE1VTFRJU0VMRUNUIENMQVNTIERFRklOSVRJT04KICAqID09PT09PT09PT09PT09PT09PT09PT0gKi8KCiAgdmFyIE11bHRpU2VsZWN0ID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHsKICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CiAgICB0aGlzLiRlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIHRoaXMuJGNvbnRhaW5lciA9ICQoJzxkaXYvPicsIHsgJ2NsYXNzJzogIm1zLWNvbnRhaW5lciIgfSk7CiAgICB0aGlzLiRzZWxlY3RhYmxlQ29udGFpbmVyID0gJCgnPGRpdi8+JywgeyAnY2xhc3MnOiAnbXMtc2VsZWN0YWJsZScgfSk7CiAgICB0aGlzLiRzZWxlY3Rpb25Db250YWluZXIgPSAkKCc8ZGl2Lz4nLCB7ICdjbGFzcyc6ICdtcy1zZWxlY3Rpb24nIH0pOwogICAgdGhpcy4kc2VsZWN0YWJsZVVsID0gJCgnPHVsLz4nLCB7ICdjbGFzcyc6ICJtcy1saXN0IiwgJ3RhYmluZGV4JyA6ICctMScgfSk7CiAgICB0aGlzLiRzZWxlY3Rpb25VbCA9ICQoJzx1bC8+JywgeyAnY2xhc3MnOiAibXMtbGlzdCIsICd0YWJpbmRleCcgOiAnLTEnIH0pOwogICAgdGhpcy5zY3JvbGxUbyA9IDA7CiAgICB0aGlzLmVsZW1zU2VsZWN0b3IgPSAnbGk6dmlzaWJsZTpub3QoLm1zLW9wdGdyb3VwLWxhYmVsLC5tcy1vcHRncm91cC1jb250YWluZXIsLicrb3B0aW9ucy5kaXNhYmxlZENsYXNzKycpJzsKICB9OwoKICBNdWx0aVNlbGVjdC5wcm90b3R5cGUgPSB7CiAgICBjb25zdHJ1Y3RvcjogTXVsdGlTZWxlY3QsCgogICAgaW5pdDogZnVuY3Rpb24oKXsKICAgICAgdmFyIHRoYXQgPSB0aGlzLAogICAgICAgICAgbXMgPSB0aGlzLiRlbGVtZW50OwoKICAgICAgaWYgKG1zLm5leHQoJy5tcy1jb250YWluZXInKS5sZW5ndGggPT09IDApewogICAgICAgIG1zLmNzcyh7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBsZWZ0OiAnLTk5OTlweCcgfSk7CiAgICAgICAgbXMuYXR0cignaWQnLCBtcy5hdHRyKCdpZCcpID8gbXMuYXR0cignaWQnKSA6IE1hdGguY2VpbChNYXRoLnJhbmRvbSgpKjEwMDApKydtdWx0aXNlbGVjdCcpOwogICAgICAgIHRoaXMuJGNvbnRhaW5lci5hdHRyKCdpZCcsICdtcy0nK21zLmF0dHIoJ2lkJykpOwogICAgICAgIHRoaXMuJGNvbnRhaW5lci5hZGRDbGFzcyh0aGF0Lm9wdGlvbnMuY3NzQ2xhc3MpOwogICAgICAgIG1zLmZpbmQoJ29wdGlvbicpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgIHRoYXQuZ2VuZXJhdGVMaXNGcm9tT3B0aW9uKHRoaXMpOwogICAgICAgIH0pOwoKICAgICAgICB0aGlzLiRzZWxlY3Rpb25VbC5maW5kKCcubXMtb3B0Z3JvdXAtbGFiZWwnKS5oaWRlKCk7CgogICAgICAgIGlmICh0aGF0Lm9wdGlvbnMuc2VsZWN0YWJsZUhlYWRlcil7CiAgICAgICAgICB0aGF0LiRzZWxlY3RhYmxlQ29udGFpbmVyLmFwcGVuZCh0aGF0Lm9wdGlvbnMuc2VsZWN0YWJsZUhlYWRlcik7CiAgICAgICAgfQogICAgICAgIHRoYXQuJHNlbGVjdGFibGVDb250YWluZXIuYXBwZW5kKHRoYXQuJHNlbGVjdGFibGVVbCk7CiAgICAgICAgaWYgKHRoYXQub3B0aW9ucy5zZWxlY3RhYmxlRm9vdGVyKXsKICAgICAgICAgIHRoYXQuJHNlbGVjdGFibGVDb250YWluZXIuYXBwZW5kKHRoYXQub3B0aW9ucy5zZWxlY3RhYmxlRm9vdGVyKTsKICAgICAgICB9CgogICAgICAgIGlmICh0aGF0Lm9wdGlvbnMuc2VsZWN0aW9uSGVhZGVyKXsKICAgICAgICAgIHRoYXQuJHNlbGVjdGlvbkNvbnRhaW5lci5hcHBlbmQodGhhdC5vcHRpb25zLnNlbGVjdGlvbkhlYWRlcik7CiAgICAgICAgfQogICAgICAgIHRoYXQuJHNlbGVjdGlvbkNvbnRhaW5lci5hcHBlbmQodGhhdC4kc2VsZWN0aW9uVWwpOwogICAgICAgIGlmICh0aGF0Lm9wdGlvbnMuc2VsZWN0aW9uRm9vdGVyKXsKICAgICAgICAgIHRoYXQuJHNlbGVjdGlvbkNvbnRhaW5lci5hcHBlbmQodGhhdC5vcHRpb25zLnNlbGVjdGlvbkZvb3Rlcik7CiAgICAgICAgfQoKICAgICAgICB0aGF0LiRjb250YWluZXIuYXBwZW5kKHRoYXQuJHNlbGVjdGFibGVDb250YWluZXIpOwogICAgICAgIHRoYXQuJGNvbnRhaW5lci5hcHBlbmQodGhhdC4kc2VsZWN0aW9uQ29udGFpbmVyKTsKICAgICAgICBtcy5hZnRlcih0aGF0LiRjb250YWluZXIpOwoKICAgICAgICB0aGF0LmFjdGl2ZU1vdXNlKHRoYXQuJHNlbGVjdGFibGVVbCk7CiAgICAgICAgdGhhdC5hY3RpdmVLZXlib2FyZCh0aGF0LiRzZWxlY3RhYmxlVWwpOwoKICAgICAgICB2YXIgYWN0aW9uID0gdGhhdC5vcHRpb25zLmRibENsaWNrID8gJ2RibGNsaWNrJyA6ICdjbGljayc7CgogICAgICAgIHRoYXQuJHNlbGVjdGFibGVVbC5vbihhY3Rpb24sICcubXMtZWxlbS1zZWxlY3RhYmxlJywgZnVuY3Rpb24oKXsKICAgICAgICAgIHRoYXQuc2VsZWN0KCQodGhpcykuZGF0YSgnbXMtdmFsdWUnKSk7CiAgICAgICAgfSk7CiAgICAgICAgdGhhdC4kc2VsZWN0aW9uVWwub24oYWN0aW9uLCAnLm1zLWVsZW0tc2VsZWN0aW9uJywgZnVuY3Rpb24oKXsKICAgICAgICAgIHRoYXQuZGVzZWxlY3QoJCh0aGlzKS5kYXRhKCdtcy12YWx1ZScpKTsKICAgICAgICB9KTsKCiAgICAgICAgdGhhdC5hY3RpdmVNb3VzZSh0aGF0LiRzZWxlY3Rpb25VbCk7CiAgICAgICAgdGhhdC5hY3RpdmVLZXlib2FyZCh0aGF0LiRzZWxlY3Rpb25VbCk7CgogICAgICAgIG1zLm9uKCdmb2N1cycsIGZ1bmN0aW9uKCl7CiAgICAgICAgICB0aGF0LiRzZWxlY3RhYmxlVWwuZm9jdXMoKTsKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgdmFyIHNlbGVjdGVkVmFsdWVzID0gbXMuZmluZCgnb3B0aW9uOnNlbGVjdGVkJykubWFwKGZ1bmN0aW9uKCl7IHJldHVybiAkKHRoaXMpLnZhbCgpOyB9KS5nZXQoKTsKICAgICAgdGhhdC5zZWxlY3Qoc2VsZWN0ZWRWYWx1ZXMsICdpbml0Jyk7CgogICAgICBpZiAodHlwZW9mIHRoYXQub3B0aW9ucy5hZnRlckluaXQgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICB0aGF0Lm9wdGlvbnMuYWZ0ZXJJbml0LmNhbGwodGhpcywgdGhpcy4kY29udGFpbmVyKTsKICAgICAgfQogICAgfSwKCiAgICAnZ2VuZXJhdGVMaXNGcm9tT3B0aW9uJyA6IGZ1bmN0aW9uKG9wdGlvbiwgaW5kZXgsICRjb250YWluZXIpewogICAgICB2YXIgdGhhdCA9IHRoaXMsCiAgICAgICAgICBtcyA9IHRoYXQuJGVsZW1lbnQsCiAgICAgICAgICBhdHRyaWJ1dGVzID0gIiIsCiAgICAgICAgICAkb3B0aW9uID0gJChvcHRpb24pOwoKICAgICAgZm9yICh2YXIgY3B0ID0gMDsgY3B0IDwgb3B0aW9uLmF0dHJpYnV0ZXMubGVuZ3RoOyBjcHQrKyl7CiAgICAgICAgdmFyIGF0dHIgPSBvcHRpb24uYXR0cmlidXRlc1tjcHRdOwoKICAgICAgICBpZihhdHRyLm5hbWUgIT09ICd2YWx1ZScgJiYgYXR0ci5uYW1lICE9PSAnZGlzYWJsZWQnKXsKICAgICAgICAgIGF0dHJpYnV0ZXMgKz0gYXR0ci5uYW1lKyc9IicrYXR0ci52YWx1ZSsnIiAnOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgc2VsZWN0YWJsZUxpID0gJCgnPGxpICcrYXR0cmlidXRlcysnPjxzcGFuPicrdGhhdC5lc2NhcGVIVE1MKCRvcHRpb24udGV4dCgpKSsnPC9zcGFuPjwvbGk+JyksCiAgICAgICAgICBzZWxlY3RlZExpID0gc2VsZWN0YWJsZUxpLmNsb25lKCksCiAgICAgICAgICB2YWx1ZSA9ICRvcHRpb24udmFsKCksCiAgICAgICAgICBlbGVtZW50SWQgPSB0aGF0LnNhbml0aXplKHZhbHVlKTsKCiAgICAgIHNlbGVjdGFibGVMaQogICAgICAgIC5kYXRhKCdtcy12YWx1ZScsIHZhbHVlKQogICAgICAgIC5hZGRDbGFzcygnbXMtZWxlbS1zZWxlY3RhYmxlJykKICAgICAgICAuYXR0cignaWQnLCBlbGVtZW50SWQrJy1zZWxlY3RhYmxlJyk7CgogICAgICBzZWxlY3RlZExpCiAgICAgICAgLmRhdGEoJ21zLXZhbHVlJywgdmFsdWUpCiAgICAgICAgLmFkZENsYXNzKCdtcy1lbGVtLXNlbGVjdGlvbicpCiAgICAgICAgLmF0dHIoJ2lkJywgZWxlbWVudElkKyctc2VsZWN0aW9uJykKICAgICAgICAuaGlkZSgpOwoKICAgICAgaWYgKCRvcHRpb24ucHJvcCgnZGlzYWJsZWQnKSB8fCBtcy5wcm9wKCdkaXNhYmxlZCcpKXsKICAgICAgICBzZWxlY3RlZExpLmFkZENsYXNzKHRoYXQub3B0aW9ucy5kaXNhYmxlZENsYXNzKTsKICAgICAgICBzZWxlY3RhYmxlTGkuYWRkQ2xhc3ModGhhdC5vcHRpb25zLmRpc2FibGVkQ2xhc3MpOwogICAgICB9CgogICAgICB2YXIgJG9wdGdyb3VwID0gJG9wdGlvbi5wYXJlbnQoJ29wdGdyb3VwJyk7CgogICAgICBpZiAoJG9wdGdyb3VwLmxlbmd0aCA+IDApewogICAgICAgIHZhciBvcHRncm91cExhYmVsID0gJG9wdGdyb3VwLmF0dHIoJ2xhYmVsJyksCiAgICAgICAgICAgIG9wdGdyb3VwSWQgPSB0aGF0LnNhbml0aXplKG9wdGdyb3VwTGFiZWwpLAogICAgICAgICAgICAkc2VsZWN0YWJsZU9wdGdyb3VwID0gdGhhdC4kc2VsZWN0YWJsZVVsLmZpbmQoJyNvcHRncm91cC1zZWxlY3RhYmxlLScrb3B0Z3JvdXBJZCksCiAgICAgICAgICAgICRzZWxlY3Rpb25PcHRncm91cCA9IHRoYXQuJHNlbGVjdGlvblVsLmZpbmQoJyNvcHRncm91cC1zZWxlY3Rpb24tJytvcHRncm91cElkKTsKCiAgICAgICAgaWYgKCRzZWxlY3RhYmxlT3B0Z3JvdXAubGVuZ3RoID09PSAwKXsKICAgICAgICAgIHZhciBvcHRncm91cENvbnRhaW5lclRwbCA9ICc8bGkgY2xhc3M9Im1zLW9wdGdyb3VwLWNvbnRhaW5lciI+PC9saT4nLAogICAgICAgICAgICAgIG9wdGdyb3VwVHBsID0gJzx1bCBjbGFzcz0ibXMtb3B0Z3JvdXAiPjxsaSBjbGFzcz0ibXMtb3B0Z3JvdXAtbGFiZWwiPjxzcGFuPicrb3B0Z3JvdXBMYWJlbCsnPC9zcGFuPjwvbGk+PC91bD4nOwoKICAgICAgICAgICRzZWxlY3RhYmxlT3B0Z3JvdXAgPSAkKG9wdGdyb3VwQ29udGFpbmVyVHBsKTsKICAgICAgICAgICRzZWxlY3Rpb25PcHRncm91cCA9ICQob3B0Z3JvdXBDb250YWluZXJUcGwpOwogICAgICAgICAgJHNlbGVjdGFibGVPcHRncm91cC5hdHRyKCdpZCcsICdvcHRncm91cC1zZWxlY3RhYmxlLScrb3B0Z3JvdXBJZCk7CiAgICAgICAgICAkc2VsZWN0aW9uT3B0Z3JvdXAuYXR0cignaWQnLCAnb3B0Z3JvdXAtc2VsZWN0aW9uLScrb3B0Z3JvdXBJZCk7CiAgICAgICAgICAkc2VsZWN0YWJsZU9wdGdyb3VwLmFwcGVuZCgkKG9wdGdyb3VwVHBsKSk7CiAgICAgICAgICAkc2VsZWN0aW9uT3B0Z3JvdXAuYXBwZW5kKCQob3B0Z3JvdXBUcGwpKTsKICAgICAgICAgIGlmICh0aGF0Lm9wdGlvbnMuc2VsZWN0YWJsZU9wdGdyb3VwKXsKICAgICAgICAgICAgJHNlbGVjdGFibGVPcHRncm91cC5maW5kKCcubXMtb3B0Z3JvdXAtbGFiZWwnKS5vbignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSAkb3B0Z3JvdXAuY2hpbGRyZW4oJzpub3QoOnNlbGVjdGVkLCA6ZGlzYWJsZWQpJykubWFwKGZ1bmN0aW9uKCl7IHJldHVybiAkKHRoaXMpLnZhbCgpO30pLmdldCgpOwogICAgICAgICAgICAgIHRoYXQuc2VsZWN0KHZhbHVlcyk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAkc2VsZWN0aW9uT3B0Z3JvdXAuZmluZCgnLm1zLW9wdGdyb3VwLWxhYmVsJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gJG9wdGdyb3VwLmNoaWxkcmVuKCc6c2VsZWN0ZWQ6bm90KDpkaXNhYmxlZCknKS5tYXAoZnVuY3Rpb24oKXsgcmV0dXJuICQodGhpcykudmFsKCk7fSkuZ2V0KCk7CiAgICAgICAgICAgICAgdGhhdC5kZXNlbGVjdCh2YWx1ZXMpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHRoYXQuJHNlbGVjdGFibGVVbC5hcHBlbmQoJHNlbGVjdGFibGVPcHRncm91cCk7CiAgICAgICAgICB0aGF0LiRzZWxlY3Rpb25VbC5hcHBlbmQoJHNlbGVjdGlvbk9wdGdyb3VwKTsKICAgICAgICB9CiAgICAgICAgaW5kZXggPSBpbmRleCA9PT0gdW5kZWZpbmVkID8gJHNlbGVjdGFibGVPcHRncm91cC5maW5kKCd1bCcpLmNoaWxkcmVuKCkubGVuZ3RoIDogaW5kZXggKyAxOwogICAgICAgIHNlbGVjdGFibGVMaS5pbnNlcnRBdChpbmRleCwgJHNlbGVjdGFibGVPcHRncm91cC5jaGlsZHJlbigpKTsKICAgICAgICBzZWxlY3RlZExpLmluc2VydEF0KGluZGV4LCAkc2VsZWN0aW9uT3B0Z3JvdXAuY2hpbGRyZW4oKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5kZXggPSBpbmRleCA9PT0gdW5kZWZpbmVkID8gdGhhdC4kc2VsZWN0YWJsZVVsLmNoaWxkcmVuKCkubGVuZ3RoIDogaW5kZXg7CgogICAgICAgIHNlbGVjdGFibGVMaS5pbnNlcnRBdChpbmRleCwgdGhhdC4kc2VsZWN0YWJsZVVsKTsKICAgICAgICBzZWxlY3RlZExpLmluc2VydEF0KGluZGV4LCB0aGF0LiRzZWxlY3Rpb25VbCk7CiAgICAgIH0KICAgIH0sCgogICAgJ2FkZE9wdGlvbicgOiBmdW5jdGlvbihvcHRpb25zKXsKICAgICAgdmFyIHRoYXQgPSB0aGlzOwoKICAgICAgaWYgKG9wdGlvbnMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnZhbHVlICE9PSBudWxsKXsKICAgICAgICBvcHRpb25zID0gW29wdGlvbnNdOwogICAgICB9IAogICAgICAkLmVhY2gob3B0aW9ucywgZnVuY3Rpb24oaW5kZXgsIG9wdGlvbil7CiAgICAgICAgaWYgKG9wdGlvbi52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbi52YWx1ZSAhPT0gbnVsbCAmJgogICAgICAgICAgICB0aGF0LiRlbGVtZW50LmZpbmQoIm9wdGlvblt2YWx1ZT0nIitvcHRpb24udmFsdWUrIiddIikubGVuZ3RoID09PSAwKXsKICAgICAgICAgIHZhciAkb3B0aW9uID0gJCgnPG9wdGlvbiB2YWx1ZT0iJytvcHRpb24udmFsdWUrJyI+JytvcHRpb24udGV4dCsnPC9vcHRpb24+JyksCiAgICAgICAgICAgICAgaW5kZXggPSBwYXJzZUludCgodHlwZW9mIG9wdGlvbi5pbmRleCA9PT0gJ3VuZGVmaW5lZCcgPyB0aGF0LiRlbGVtZW50LmNoaWxkcmVuKCkubGVuZ3RoIDogb3B0aW9uLmluZGV4KSksCiAgICAgICAgICAgICAgJGNvbnRhaW5lciA9IG9wdGlvbi5uZXN0ZWQgPT09IHVuZGVmaW5lZCA/IHRoYXQuJGVsZW1lbnQgOiAkKCJvcHRncm91cFtsYWJlbD0nIitvcHRpb24ubmVzdGVkKyInXSIpOwoKICAgICAgICAgICRvcHRpb24uaW5zZXJ0QXQoaW5kZXgsICRjb250YWluZXIpOwogICAgICAgICAgdGhhdC5nZW5lcmF0ZUxpc0Zyb21PcHRpb24oJG9wdGlvbi5nZXQoMCksIGluZGV4LCBvcHRpb24ubmVzdGVkKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSwKCiAgICAnZXNjYXBlSFRNTCcgOiBmdW5jdGlvbih0ZXh0KXsKICAgICAgcmV0dXJuICQoIjxkaXY+IikudGV4dCh0ZXh0KS5odG1sKCk7CiAgICB9LAoKICAgICdhY3RpdmVLZXlib2FyZCcgOiBmdW5jdGlvbigkbGlzdCl7CiAgICAgIHZhciB0aGF0ID0gdGhpczsKCiAgICAgICRsaXN0Lm9uKCdmb2N1cycsIGZ1bmN0aW9uKCl7CiAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnbXMtZm9jdXMnKTsKICAgICAgfSkKICAgICAgLm9uKCdibHVyJywgZnVuY3Rpb24oKXsKICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdtcy1mb2N1cycpOwogICAgICB9KQogICAgICAub24oJ2tleWRvd24nLCBmdW5jdGlvbihlKXsKICAgICAgICBzd2l0Y2ggKGUud2hpY2gpIHsKICAgICAgICAgIGNhc2UgNDA6CiAgICAgICAgICBjYXNlIDM4OgogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgIHRoYXQubW92ZUhpZ2hsaWdodCgkKHRoaXMpLCAoZS53aGljaCA9PT0gMzgpID8gLTEgOiAxKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY2FzZSAzNzoKICAgICAgICAgIGNhc2UgMzk6CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgdGhhdC5zd2l0Y2hMaXN0KCRsaXN0KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY2FzZSA5OgogICAgICAgICAgICBpZih0aGF0LiRlbGVtZW50LmlzKCdbdGFiaW5kZXhdJykpewogICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICB2YXIgdGFiaW5kZXggPSBwYXJzZUludCh0aGF0LiRlbGVtZW50LmF0dHIoJ3RhYmluZGV4JyksIDEwKTsKICAgICAgICAgICAgICB0YWJpbmRleCA9IChlLnNoaWZ0S2V5KSA/IHRhYmluZGV4LTEgOiB0YWJpbmRleCsxOwogICAgICAgICAgICAgICQoJ1t0YWJpbmRleD0iJysodGFiaW5kZXgpKyciXScpLmZvY3VzKCk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICBpZihlLnNoaWZ0S2V5KXsKICAgICAgICAgICAgICAgIHRoYXQuJGVsZW1lbnQudHJpZ2dlcignZm9jdXMnKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoJC5pbkFycmF5KGUud2hpY2gsIHRoYXQub3B0aW9ucy5rZXlTZWxlY3QpID4gLTEpewogICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIHRoYXQuc2VsZWN0SGlnaGxpZ2h0ZWQoJGxpc3QpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAoKICAgICdtb3ZlSGlnaGxpZ2h0JzogZnVuY3Rpb24oJGxpc3QsIGRpcmVjdGlvbil7CiAgICAgIHZhciAkZWxlbXMgPSAkbGlzdC5maW5kKHRoaXMuZWxlbXNTZWxlY3RvciksCiAgICAgICAgICAkY3VyckVsZW0gPSAkZWxlbXMuZmlsdGVyKCcubXMtaG92ZXInKSwKICAgICAgICAgICRuZXh0RWxlbSA9IG51bGwsCiAgICAgICAgICBlbGVtSGVpZ2h0ID0gJGVsZW1zLmZpcnN0KCkub3V0ZXJIZWlnaHQoKSwKICAgICAgICAgIGNvbnRhaW5lckhlaWdodCA9ICRsaXN0LmhlaWdodCgpLAogICAgICAgICAgY29udGFpbmVyU2VsZWN0b3IgPSAnIycrdGhpcy4kY29udGFpbmVyLnByb3AoJ2lkJyk7CgogICAgICAkZWxlbXMucmVtb3ZlQ2xhc3MoJ21zLWhvdmVyJyk7CiAgICAgIGlmIChkaXJlY3Rpb24gPT09IDEpeyAvLyBET1dOCgogICAgICAgICRuZXh0RWxlbSA9ICRjdXJyRWxlbS5uZXh0QWxsKHRoaXMuZWxlbXNTZWxlY3RvcikuZmlyc3QoKTsKICAgICAgICBpZiAoJG5leHRFbGVtLmxlbmd0aCA9PT0gMCl7CiAgICAgICAgICB2YXIgJG9wdGdyb3VwVWwgPSAkY3VyckVsZW0ucGFyZW50KCk7CgogICAgICAgICAgaWYgKCRvcHRncm91cFVsLmhhc0NsYXNzKCdtcy1vcHRncm91cCcpKXsKICAgICAgICAgICAgdmFyICRvcHRncm91cExpID0gJG9wdGdyb3VwVWwucGFyZW50KCksCiAgICAgICAgICAgICAgICAkbmV4dE9wdGdyb3VwTGkgPSAkb3B0Z3JvdXBMaS5uZXh0KCc6dmlzaWJsZScpOwoKICAgICAgICAgICAgaWYgKCRuZXh0T3B0Z3JvdXBMaS5sZW5ndGggPiAwKXsKICAgICAgICAgICAgICAkbmV4dEVsZW0gPSAkbmV4dE9wdGdyb3VwTGkuZmluZCh0aGlzLmVsZW1zU2VsZWN0b3IpLmZpcnN0KCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgJG5leHRFbGVtID0gJGVsZW1zLmZpcnN0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRuZXh0RWxlbSA9ICRlbGVtcy5maXJzdCgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IC0xKXsgLy8gVVAKCiAgICAgICAgJG5leHRFbGVtID0gJGN1cnJFbGVtLnByZXZBbGwodGhpcy5lbGVtc1NlbGVjdG9yKS5maXJzdCgpOwogICAgICAgIGlmICgkbmV4dEVsZW0ubGVuZ3RoID09PSAwKXsKICAgICAgICAgIHZhciAkb3B0Z3JvdXBVbCA9ICRjdXJyRWxlbS5wYXJlbnQoKTsKCiAgICAgICAgICBpZiAoJG9wdGdyb3VwVWwuaGFzQ2xhc3MoJ21zLW9wdGdyb3VwJykpewogICAgICAgICAgICB2YXIgJG9wdGdyb3VwTGkgPSAkb3B0Z3JvdXBVbC5wYXJlbnQoKSwKICAgICAgICAgICAgICAgICRwcmV2T3B0Z3JvdXBMaSA9ICRvcHRncm91cExpLnByZXYoJzp2aXNpYmxlJyk7CgogICAgICAgICAgICBpZiAoJHByZXZPcHRncm91cExpLmxlbmd0aCA+IDApewogICAgICAgICAgICAgICRuZXh0RWxlbSA9ICRwcmV2T3B0Z3JvdXBMaS5maW5kKHRoaXMuZWxlbXNTZWxlY3RvcikubGFzdCgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICRuZXh0RWxlbSA9ICRlbGVtcy5sYXN0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRuZXh0RWxlbSA9ICRlbGVtcy5sYXN0KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICgkbmV4dEVsZW0ubGVuZ3RoID4gMCl7CiAgICAgICAgJG5leHRFbGVtLmFkZENsYXNzKCdtcy1ob3ZlcicpOwogICAgICAgIHZhciBzY3JvbGxUbyA9ICRsaXN0LnNjcm9sbFRvcCgpICsgJG5leHRFbGVtLnBvc2l0aW9uKCkudG9wIC0gCiAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVySGVpZ2h0IC8gMiArIGVsZW1IZWlnaHQgLyAyOwoKICAgICAgICAkbGlzdC5zY3JvbGxUb3Aoc2Nyb2xsVG8pOwogICAgICB9CiAgICB9LAoKICAgICdzZWxlY3RIaWdobGlnaHRlZCcgOiBmdW5jdGlvbigkbGlzdCl7CiAgICAgIHZhciAkZWxlbXMgPSAkbGlzdC5maW5kKHRoaXMuZWxlbXNTZWxlY3RvciksCiAgICAgICAgICAkaGlnaGxpZ2h0ZWRFbGVtID0gJGVsZW1zLmZpbHRlcignLm1zLWhvdmVyJykuZmlyc3QoKTsKCiAgICAgIGlmICgkaGlnaGxpZ2h0ZWRFbGVtLmxlbmd0aCA+IDApewogICAgICAgIGlmICgkbGlzdC5wYXJlbnQoKS5oYXNDbGFzcygnbXMtc2VsZWN0YWJsZScpKXsKICAgICAgICAgIHRoaXMuc2VsZWN0KCRoaWdobGlnaHRlZEVsZW0uZGF0YSgnbXMtdmFsdWUnKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuZGVzZWxlY3QoJGhpZ2hsaWdodGVkRWxlbS5kYXRhKCdtcy12YWx1ZScpKTsKICAgICAgICB9CiAgICAgICAgJGVsZW1zLnJlbW92ZUNsYXNzKCdtcy1ob3ZlcicpOwogICAgICB9CiAgICB9LAoKICAgICdzd2l0Y2hMaXN0JyA6IGZ1bmN0aW9uKCRsaXN0KXsKICAgICAgJGxpc3QuYmx1cigpOwogICAgICB0aGlzLiRjb250YWluZXIuZmluZCh0aGlzLmVsZW1zU2VsZWN0b3IpLnJlbW92ZUNsYXNzKCdtcy1ob3ZlcicpOwogICAgICBpZiAoJGxpc3QucGFyZW50KCkuaGFzQ2xhc3MoJ21zLXNlbGVjdGFibGUnKSl7CiAgICAgICAgdGhpcy4kc2VsZWN0aW9uVWwuZm9jdXMoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLiRzZWxlY3RhYmxlVWwuZm9jdXMoKTsKICAgICAgfQogICAgfSwKCiAgICAnYWN0aXZlTW91c2UnIDogZnVuY3Rpb24oJGxpc3QpewogICAgICB2YXIgdGhhdCA9IHRoaXM7CgogICAgICB0aGlzLiRjb250YWluZXIub24oJ21vdXNlZW50ZXInLCB0aGF0LmVsZW1zU2VsZWN0b3IsIGZ1bmN0aW9uKCl7CiAgICAgICAgJCh0aGlzKS5wYXJlbnRzKCcubXMtY29udGFpbmVyJykuZmluZCh0aGF0LmVsZW1zU2VsZWN0b3IpLnJlbW92ZUNsYXNzKCdtcy1ob3ZlcicpOwogICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ21zLWhvdmVyJyk7CiAgICAgIH0pOwoKICAgICAgdGhpcy4kY29udGFpbmVyLm9uKCdtb3VzZWxlYXZlJywgdGhhdC5lbGVtc1NlbGVjdG9yLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgJCh0aGlzKS5wYXJlbnRzKCcubXMtY29udGFpbmVyJykuZmluZCh0aGF0LmVsZW1zU2VsZWN0b3IpLnJlbW92ZUNsYXNzKCdtcy1ob3ZlcicpOwogICAgICB9KTsKICAgIH0sCgogICAgJ3JlZnJlc2gnIDogZnVuY3Rpb24oKSB7CiAgICAgIHRoaXMuZGVzdHJveSgpOwogICAgICB0aGlzLiRlbGVtZW50Lm11bHRpU2VsZWN0KHRoaXMub3B0aW9ucyk7CiAgICB9LAoKICAgICdkZXN0cm95JyA6IGZ1bmN0aW9uKCl7CiAgICAgICQoIiNtcy0iK3RoaXMuJGVsZW1lbnQuYXR0cigiaWQiKSkucmVtb3ZlKCk7CiAgICAgIHRoaXMuJGVsZW1lbnQub2ZmKCdmb2N1cycpOwogICAgICB0aGlzLiRlbGVtZW50LmNzcygncG9zaXRpb24nLCAnJykuY3NzKCdsZWZ0JywgJycpOwogICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZURhdGEoJ211bHRpc2VsZWN0Jyk7CiAgICB9LAoKICAgICdzZWxlY3QnIDogZnVuY3Rpb24odmFsdWUsIG1ldGhvZCl7CiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKXsgdmFsdWUgPSBbdmFsdWVdOyB9CgogICAgICB2YXIgdGhhdCA9IHRoaXMsCiAgICAgICAgICBtcyA9IHRoaXMuJGVsZW1lbnQsCiAgICAgICAgICBtc0lkcyA9ICQubWFwKHZhbHVlLCBmdW5jdGlvbih2YWwpeyByZXR1cm4odGhhdC5zYW5pdGl6ZSh2YWwpKTsgfSksCiAgICAgICAgICBzZWxlY3RhYmxlcyA9IHRoaXMuJHNlbGVjdGFibGVVbC5maW5kKCcjJyArIG1zSWRzLmpvaW4oJy1zZWxlY3RhYmxlLCAjJykrJy1zZWxlY3RhYmxlJykuZmlsdGVyKCc6bm90KC4nK3RoYXQub3B0aW9ucy5kaXNhYmxlZENsYXNzKycpJyksCiAgICAgICAgICBzZWxlY3Rpb25zID0gdGhpcy4kc2VsZWN0aW9uVWwuZmluZCgnIycgKyBtc0lkcy5qb2luKCctc2VsZWN0aW9uLCAjJykgKyAnLXNlbGVjdGlvbicpLmZpbHRlcignOm5vdCguJyt0aGF0Lm9wdGlvbnMuZGlzYWJsZWRDbGFzcysnKScpLAogICAgICAgICAgb3B0aW9ucyA9IG1zLmZpbmQoJ29wdGlvbjpub3QoOmRpc2FibGVkKScpLmZpbHRlcihmdW5jdGlvbigpeyByZXR1cm4oJC5pbkFycmF5KHRoaXMudmFsdWUsIHZhbHVlKSA+IC0xKTsgfSk7CgogICAgICBpZiAobWV0aG9kID09PSAnaW5pdCcpewogICAgICAgIHNlbGVjdGFibGVzID0gdGhpcy4kc2VsZWN0YWJsZVVsLmZpbmQoJyMnICsgbXNJZHMuam9pbignLXNlbGVjdGFibGUsICMnKSsnLXNlbGVjdGFibGUnKSwKICAgICAgICBzZWxlY3Rpb25zID0gdGhpcy4kc2VsZWN0aW9uVWwuZmluZCgnIycgKyBtc0lkcy5qb2luKCctc2VsZWN0aW9uLCAjJykgKyAnLXNlbGVjdGlvbicpOwogICAgICB9CgogICAgICBpZiAoc2VsZWN0YWJsZXMubGVuZ3RoID4gMCl7CiAgICAgICAgc2VsZWN0YWJsZXMuYWRkQ2xhc3MoJ21zLXNlbGVjdGVkJykuaGlkZSgpOwogICAgICAgIHNlbGVjdGlvbnMuYWRkQ2xhc3MoJ21zLXNlbGVjdGVkJykuc2hvdygpOwoKICAgICAgICBvcHRpb25zLnByb3AoJ3NlbGVjdGVkJywgdHJ1ZSk7CgogICAgICAgIHRoYXQuJGNvbnRhaW5lci5maW5kKHRoYXQuZWxlbXNTZWxlY3RvcikucmVtb3ZlQ2xhc3MoJ21zLWhvdmVyJyk7CgogICAgICAgIHZhciBzZWxlY3RhYmxlT3B0Z3JvdXBzID0gdGhhdC4kc2VsZWN0YWJsZVVsLmNoaWxkcmVuKCcubXMtb3B0Z3JvdXAtY29udGFpbmVyJyk7CiAgICAgICAgaWYgKHNlbGVjdGFibGVPcHRncm91cHMubGVuZ3RoID4gMCl7CiAgICAgICAgICBzZWxlY3RhYmxlT3B0Z3JvdXBzLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgICAgdmFyIHNlbGVjdGFibGVzTGkgPSAkKHRoaXMpLmZpbmQoJy5tcy1lbGVtLXNlbGVjdGFibGUnKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGFibGVzTGkubGVuZ3RoID09PSBzZWxlY3RhYmxlc0xpLmZpbHRlcignLm1zLXNlbGVjdGVkJykubGVuZ3RoKXsKICAgICAgICAgICAgICAkKHRoaXMpLmZpbmQoJy5tcy1vcHRncm91cC1sYWJlbCcpLmhpZGUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CgogICAgICAgICAgdmFyIHNlbGVjdGlvbk9wdGdyb3VwcyA9IHRoYXQuJHNlbGVjdGlvblVsLmNoaWxkcmVuKCcubXMtb3B0Z3JvdXAtY29udGFpbmVyJyk7CiAgICAgICAgICBzZWxlY3Rpb25PcHRncm91cHMuZWFjaChmdW5jdGlvbigpewogICAgICAgICAgICB2YXIgc2VsZWN0aW9uc0xpID0gJCh0aGlzKS5maW5kKCcubXMtZWxlbS1zZWxlY3Rpb24nKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGlvbnNMaS5maWx0ZXIoJy5tcy1zZWxlY3RlZCcpLmxlbmd0aCA+IDApewogICAgICAgICAgICAgICQodGhpcykuZmluZCgnLm1zLW9wdGdyb3VwLWxhYmVsJykuc2hvdygpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKHRoYXQub3B0aW9ucy5rZWVwT3JkZXIgJiYgbWV0aG9kICE9PSAnaW5pdCcpewogICAgICAgICAgICB2YXIgc2VsZWN0aW9uTGlMYXN0ID0gdGhhdC4kc2VsZWN0aW9uVWwuZmluZCgnLm1zLXNlbGVjdGVkJyk7CiAgICAgICAgICAgIGlmKChzZWxlY3Rpb25MaUxhc3QubGVuZ3RoID4gMSkgJiYgKHNlbGVjdGlvbkxpTGFzdC5sYXN0KCkuZ2V0KDApICE9IHNlbGVjdGlvbnMuZ2V0KDApKSkgewogICAgICAgICAgICAgIHNlbGVjdGlvbnMuaW5zZXJ0QWZ0ZXIoc2VsZWN0aW9uTGlMYXN0Lmxhc3QoKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG1ldGhvZCAhPT0gJ2luaXQnKXsKICAgICAgICAgIG1zLnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICAgICAgaWYgKHR5cGVvZiB0aGF0Lm9wdGlvbnMuYWZ0ZXJTZWxlY3QgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgdGhhdC5vcHRpb25zLmFmdGVyU2VsZWN0LmNhbGwodGhpcywgdmFsdWUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKCiAgICAnZGVzZWxlY3QnIDogZnVuY3Rpb24odmFsdWUpewogICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyl7IHZhbHVlID0gW3ZhbHVlXTsgfQoKICAgICAgdmFyIHRoYXQgPSB0aGlzLAogICAgICAgICAgbXMgPSB0aGlzLiRlbGVtZW50LAogICAgICAgICAgbXNJZHMgPSAkLm1hcCh2YWx1ZSwgZnVuY3Rpb24odmFsKXsgcmV0dXJuKHRoYXQuc2FuaXRpemUodmFsKSk7IH0pLAogICAgICAgICAgc2VsZWN0YWJsZXMgPSB0aGlzLiRzZWxlY3RhYmxlVWwuZmluZCgnIycgKyBtc0lkcy5qb2luKCctc2VsZWN0YWJsZSwgIycpKyctc2VsZWN0YWJsZScpLAogICAgICAgICAgc2VsZWN0aW9ucyA9IHRoaXMuJHNlbGVjdGlvblVsLmZpbmQoJyMnICsgbXNJZHMuam9pbignLXNlbGVjdGlvbiwgIycpKyctc2VsZWN0aW9uJykuZmlsdGVyKCcubXMtc2VsZWN0ZWQnKS5maWx0ZXIoJzpub3QoLicrdGhhdC5vcHRpb25zLmRpc2FibGVkQ2xhc3MrJyknKSwKICAgICAgICAgIG9wdGlvbnMgPSBtcy5maW5kKCdvcHRpb24nKS5maWx0ZXIoZnVuY3Rpb24oKXsgcmV0dXJuKCQuaW5BcnJheSh0aGlzLnZhbHVlLCB2YWx1ZSkgPiAtMSk7IH0pOwoKICAgICAgaWYgKHNlbGVjdGlvbnMubGVuZ3RoID4gMCl7CiAgICAgICAgc2VsZWN0YWJsZXMucmVtb3ZlQ2xhc3MoJ21zLXNlbGVjdGVkJykuc2hvdygpOwogICAgICAgIHNlbGVjdGlvbnMucmVtb3ZlQ2xhc3MoJ21zLXNlbGVjdGVkJykuaGlkZSgpOwogICAgICAgIG9wdGlvbnMucHJvcCgnc2VsZWN0ZWQnLCBmYWxzZSk7CgogICAgICAgIHRoYXQuJGNvbnRhaW5lci5maW5kKHRoYXQuZWxlbXNTZWxlY3RvcikucmVtb3ZlQ2xhc3MoJ21zLWhvdmVyJyk7CgogICAgICAgIHZhciBzZWxlY3RhYmxlT3B0Z3JvdXBzID0gdGhhdC4kc2VsZWN0YWJsZVVsLmNoaWxkcmVuKCcubXMtb3B0Z3JvdXAtY29udGFpbmVyJyk7CiAgICAgICAgaWYgKHNlbGVjdGFibGVPcHRncm91cHMubGVuZ3RoID4gMCl7CiAgICAgICAgICBzZWxlY3RhYmxlT3B0Z3JvdXBzLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgICAgdmFyIHNlbGVjdGFibGVzTGkgPSAkKHRoaXMpLmZpbmQoJy5tcy1lbGVtLXNlbGVjdGFibGUnKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGFibGVzTGkuZmlsdGVyKCc6bm90KC5tcy1zZWxlY3RlZCknKS5sZW5ndGggPiAwKXsKICAgICAgICAgICAgICAkKHRoaXMpLmZpbmQoJy5tcy1vcHRncm91cC1sYWJlbCcpLnNob3coKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CgogICAgICAgICAgdmFyIHNlbGVjdGlvbk9wdGdyb3VwcyA9IHRoYXQuJHNlbGVjdGlvblVsLmNoaWxkcmVuKCcubXMtb3B0Z3JvdXAtY29udGFpbmVyJyk7CiAgICAgICAgICBzZWxlY3Rpb25PcHRncm91cHMuZWFjaChmdW5jdGlvbigpewogICAgICAgICAgICB2YXIgc2VsZWN0aW9uc0xpID0gJCh0aGlzKS5maW5kKCcubXMtZWxlbS1zZWxlY3Rpb24nKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGlvbnNMaS5maWx0ZXIoJy5tcy1zZWxlY3RlZCcpLmxlbmd0aCA9PT0gMCl7CiAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcubXMtb3B0Z3JvdXAtbGFiZWwnKS5oaWRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBtcy50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICBpZiAodHlwZW9mIHRoYXQub3B0aW9ucy5hZnRlckRlc2VsZWN0ID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICB0aGF0Lm9wdGlvbnMuYWZ0ZXJEZXNlbGVjdC5jYWxsKHRoaXMsIHZhbHVlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCgogICAgJ3NlbGVjdF9hbGwnIDogZnVuY3Rpb24oKXsKICAgICAgdmFyIG1zID0gdGhpcy4kZWxlbWVudCwKICAgICAgICAgIHZhbHVlcyA9IG1zLnZhbCgpOwoKICAgICAgbXMuZmluZCgnb3B0aW9uOm5vdCgiOmRpc2FibGVkIiknKS5wcm9wKCdzZWxlY3RlZCcsIHRydWUpOwogICAgICB0aGlzLiRzZWxlY3RhYmxlVWwuZmluZCgnLm1zLWVsZW0tc2VsZWN0YWJsZScpLmZpbHRlcignOm5vdCguJyt0aGlzLm9wdGlvbnMuZGlzYWJsZWRDbGFzcysnKScpLmFkZENsYXNzKCdtcy1zZWxlY3RlZCcpLmhpZGUoKTsKICAgICAgdGhpcy4kc2VsZWN0aW9uVWwuZmluZCgnLm1zLW9wdGdyb3VwLWxhYmVsJykuc2hvdygpOwogICAgICB0aGlzLiRzZWxlY3RhYmxlVWwuZmluZCgnLm1zLW9wdGdyb3VwLWxhYmVsJykuaGlkZSgpOwogICAgICB0aGlzLiRzZWxlY3Rpb25VbC5maW5kKCcubXMtZWxlbS1zZWxlY3Rpb24nKS5maWx0ZXIoJzpub3QoLicrdGhpcy5vcHRpb25zLmRpc2FibGVkQ2xhc3MrJyknKS5hZGRDbGFzcygnbXMtc2VsZWN0ZWQnKS5zaG93KCk7CiAgICAgIHRoaXMuJHNlbGVjdGlvblVsLmZvY3VzKCk7CiAgICAgIG1zLnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5hZnRlclNlbGVjdCA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgIHZhciBzZWxlY3RlZFZhbHVlcyA9ICQuZ3JlcChtcy52YWwoKSwgZnVuY3Rpb24oaXRlbSl7CiAgICAgICAgICByZXR1cm4gJC5pbkFycmF5KGl0ZW0sIHZhbHVlcykgPCAwOwogICAgICAgIH0pOwogICAgICAgIHRoaXMub3B0aW9ucy5hZnRlclNlbGVjdC5jYWxsKHRoaXMsIHNlbGVjdGVkVmFsdWVzKTsKICAgICAgfQogICAgfSwKCiAgICAnZGVzZWxlY3RfYWxsJyA6IGZ1bmN0aW9uKCl7CiAgICAgIHZhciBtcyA9IHRoaXMuJGVsZW1lbnQsCiAgICAgICAgICB2YWx1ZXMgPSBtcy52YWwoKTsKCiAgICAgIG1zLmZpbmQoJ29wdGlvbicpLnByb3AoJ3NlbGVjdGVkJywgZmFsc2UpOwogICAgICB0aGlzLiRzZWxlY3RhYmxlVWwuZmluZCgnLm1zLWVsZW0tc2VsZWN0YWJsZScpLnJlbW92ZUNsYXNzKCdtcy1zZWxlY3RlZCcpLnNob3coKTsKICAgICAgdGhpcy4kc2VsZWN0aW9uVWwuZmluZCgnLm1zLW9wdGdyb3VwLWxhYmVsJykuaGlkZSgpOwogICAgICB0aGlzLiRzZWxlY3RhYmxlVWwuZmluZCgnLm1zLW9wdGdyb3VwLWxhYmVsJykuc2hvdygpOwogICAgICB0aGlzLiRzZWxlY3Rpb25VbC5maW5kKCcubXMtZWxlbS1zZWxlY3Rpb24nKS5yZW1vdmVDbGFzcygnbXMtc2VsZWN0ZWQnKS5oaWRlKCk7CiAgICAgIHRoaXMuJHNlbGVjdGFibGVVbC5mb2N1cygpOwogICAgICBtcy50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuYWZ0ZXJEZXNlbGVjdCA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgIHRoaXMub3B0aW9ucy5hZnRlckRlc2VsZWN0LmNhbGwodGhpcywgdmFsdWVzKTsKICAgICAgfQogICAgfSwKCiAgICBzYW5pdGl6ZTogZnVuY3Rpb24odmFsdWUpewogICAgICB2YXIgaGFzaCA9IDAsIGksIGNoYXJhY3RlcjsKICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAwKSByZXR1cm4gaGFzaDsKICAgICAgdmFyIGxzID0gMDsKICAgICAgZm9yIChpID0gMCwgbHMgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsczsgaSsrKSB7CiAgICAgICAgY2hhcmFjdGVyICA9IHZhbHVlLmNoYXJDb2RlQXQoaSk7CiAgICAgICAgaGFzaCAgPSAoKGhhc2g8PDUpLWhhc2gpK2NoYXJhY3RlcjsKICAgICAgICBoYXNoIHw9IDA7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlcgogICAgICB9CiAgICAgIHJldHVybiBoYXNoOwogICAgfQogIH07CgogIC8qIE1VTFRJU0VMRUNUIFBMVUdJTiBERUZJTklUSU9OCiAgICogPT09PT09PT09PT09PT09PT09PT09PT0gKi8KCiAgJC5mbi5tdWx0aVNlbGVjdCA9IGZ1bmN0aW9uICgpIHsKICAgIHZhciBvcHRpb24gPSBhcmd1bWVudHNbMF0sCiAgICAgICAgYXJncyA9IGFyZ3VtZW50czsKCiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgdmFyICR0aGlzID0gJCh0aGlzKSwKICAgICAgICAgIGRhdGEgPSAkdGhpcy5kYXRhKCdtdWx0aXNlbGVjdCcpLAogICAgICAgICAgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCAkLmZuLm11bHRpU2VsZWN0LmRlZmF1bHRzLCAkdGhpcy5kYXRhKCksIHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnICYmIG9wdGlvbik7CgogICAgICBpZiAoIWRhdGEpeyAkdGhpcy5kYXRhKCdtdWx0aXNlbGVjdCcsIChkYXRhID0gbmV3IE11bHRpU2VsZWN0KHRoaXMsIG9wdGlvbnMpKSk7IH0KCiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJyl7CiAgICAgICAgZGF0YVtvcHRpb25dKGFyZ3NbMV0pOwogICAgICB9IGVsc2UgewogICAgICAgIGRhdGEuaW5pdCgpOwogICAgICB9CiAgICB9KTsKICB9OwoKICAkLmZuLm11bHRpU2VsZWN0LmRlZmF1bHRzID0gewogICAga2V5U2VsZWN0OiBbMzJdLAogICAgc2VsZWN0YWJsZU9wdGdyb3VwOiBmYWxzZSwKICAgIGRpc2FibGVkQ2xhc3MgOiAnZGlzYWJsZWQnLAogICAgZGJsQ2xpY2sgOiBmYWxzZSwKICAgIGtlZXBPcmRlcjogZmFsc2UsCiAgICBjc3NDbGFzczogJycKICB9OwoKICAkLmZuLm11bHRpU2VsZWN0LkNvbnN0cnVjdG9yID0gTXVsdGlTZWxlY3Q7CgogICQuZm4uaW5zZXJ0QXQgPSBmdW5jdGlvbihpbmRleCwgJHBhcmVudCkgewogICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKICAgICAgaWYgKGluZGV4ID09PSAwKSB7CiAgICAgICAgJHBhcmVudC5wcmVwZW5kKHRoaXMpOwogICAgICB9IGVsc2UgewogICAgICAgICRwYXJlbnQuY2hpbGRyZW4oKS5lcShpbmRleCAtIDEpLmFmdGVyKHRoaXMpOwogICAgICB9CiAgICB9KTsKfTsKCn0od2luZG93LmpRdWVyeSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/js/js.cookie.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGpzLWNvb2tpZSB2My4wLjEgfCBNSVQgKi8KOwooZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkgewogIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDoKICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOgogIChnbG9iYWwgPSBnbG9iYWwgfHwgc2VsZiwgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBjdXJyZW50ID0gZ2xvYmFsLkNvb2tpZXM7CiAgICB2YXIgZXhwb3J0cyA9IGdsb2JhbC5Db29raWVzID0gZmFjdG9yeSgpOwogICAgZXhwb3J0cy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkgeyBnbG9iYWwuQ29va2llcyA9IGN1cnJlbnQ7IHJldHVybiBleHBvcnRzOyB9OwogIH0oKSkpOwp9KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsKCiAgLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovCiAgZnVuY3Rpb24gYXNzaWduICh0YXJnZXQpIHsKICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsKICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdGFyZ2V0CiAgfQogIC8qIGVzbGludC1lbmFibGUgbm8tdmFyICovCgogIC8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqLwogIHZhciBkZWZhdWx0Q29udmVydGVyID0gewogICAgcmVhZDogZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgIGlmICh2YWx1ZVswXSA9PT0gJyInKSB7CiAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgxLCAtMSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoLyglW1xkQS1GXXsyfSkrL2dpLCBkZWNvZGVVUklDb21wb25lbnQpCiAgICB9LAogICAgd3JpdGU6IGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKS5yZXBsYWNlKAogICAgICAgIC8lKDJbMzQ2QkZdfDNbQUMtRl18NDB8NVtCREVdfDYwfDdbQkNEXSkvZywKICAgICAgICBkZWNvZGVVUklDb21wb25lbnQKICAgICAgKQogICAgfQogIH07CiAgLyogZXNsaW50LWVuYWJsZSBuby12YXIgKi8KCiAgLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovCgogIGZ1bmN0aW9uIGluaXQgKGNvbnZlcnRlciwgZGVmYXVsdEF0dHJpYnV0ZXMpIHsKICAgIGZ1bmN0aW9uIHNldCAoa2V5LCB2YWx1ZSwgYXR0cmlidXRlcykgewogICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgewogICAgICAgIHJldHVybgogICAgICB9CgogICAgICBhdHRyaWJ1dGVzID0gYXNzaWduKHt9LCBkZWZhdWx0QXR0cmlidXRlcywgYXR0cmlidXRlcyk7CgogICAgICBpZiAodHlwZW9mIGF0dHJpYnV0ZXMuZXhwaXJlcyA9PT0gJ251bWJlcicpIHsKICAgICAgICBhdHRyaWJ1dGVzLmV4cGlyZXMgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgYXR0cmlidXRlcy5leHBpcmVzICogODY0ZTUpOwogICAgICB9CiAgICAgIGlmIChhdHRyaWJ1dGVzLmV4cGlyZXMpIHsKICAgICAgICBhdHRyaWJ1dGVzLmV4cGlyZXMgPSBhdHRyaWJ1dGVzLmV4cGlyZXMudG9VVENTdHJpbmcoKTsKICAgICAgfQoKICAgICAga2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSkKICAgICAgICAucmVwbGFjZSgvJSgyWzM0NkJdfDVFfDYwfDdDKS9nLCBkZWNvZGVVUklDb21wb25lbnQpCiAgICAgICAgLnJlcGxhY2UoL1soKV0vZywgZXNjYXBlKTsKCiAgICAgIHZhciBzdHJpbmdpZmllZEF0dHJpYnV0ZXMgPSAnJzsKICAgICAgZm9yICh2YXIgYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVzKSB7CiAgICAgICAgaWYgKCFhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdKSB7CiAgICAgICAgICBjb250aW51ZQogICAgICAgIH0KCiAgICAgICAgc3RyaW5naWZpZWRBdHRyaWJ1dGVzICs9ICc7ICcgKyBhdHRyaWJ1dGVOYW1lOwoKICAgICAgICBpZiAoYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXSA9PT0gdHJ1ZSkgewogICAgICAgICAgY29udGludWUKICAgICAgICB9CgogICAgICAgIC8vIENvbnNpZGVycyBSRkMgNjI2NSBzZWN0aW9uIDUuMjoKICAgICAgICAvLyAuLi4KICAgICAgICAvLyAzLiAgSWYgdGhlIHJlbWFpbmluZyB1bnBhcnNlZC1hdHRyaWJ1dGVzIGNvbnRhaW5zIGEgJXgzQiAoIjsiKQogICAgICAgIC8vICAgICBjaGFyYWN0ZXI6CiAgICAgICAgLy8gQ29uc3VtZSB0aGUgY2hhcmFjdGVycyBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyB1cCB0bywKICAgICAgICAvLyBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzQiAoIjsiKSBjaGFyYWN0ZXIuCiAgICAgICAgLy8gLi4uCiAgICAgICAgc3RyaW5naWZpZWRBdHRyaWJ1dGVzICs9ICc9JyArIGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0uc3BsaXQoJzsnKVswXTsKICAgICAgfQoKICAgICAgcmV0dXJuIChkb2N1bWVudC5jb29raWUgPQogICAgICAgIGtleSArICc9JyArIGNvbnZlcnRlci53cml0ZSh2YWx1ZSwga2V5KSArIHN0cmluZ2lmaWVkQXR0cmlidXRlcykKICAgIH0KCiAgICBmdW5jdGlvbiBnZXQgKGtleSkgewogICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyB8fCAoYXJndW1lbnRzLmxlbmd0aCAmJiAha2V5KSkgewogICAgICAgIHJldHVybgogICAgICB9CgogICAgICAvLyBUbyBwcmV2ZW50IHRoZSBmb3IgbG9vcCBpbiB0aGUgZmlyc3QgcGxhY2UgYXNzaWduIGFuIGVtcHR5IGFycmF5CiAgICAgIC8vIGluIGNhc2UgdGhlcmUgYXJlIG5vIGNvb2tpZXMgYXQgYWxsLgogICAgICB2YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZSA/IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOyAnKSA6IFtdOwogICAgICB2YXIgamFyID0ge307CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29va2llcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBwYXJ0cyA9IGNvb2tpZXNbaV0uc3BsaXQoJz0nKTsKICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5zbGljZSgxKS5qb2luKCc9Jyk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICB2YXIgZm91bmRLZXkgPSBkZWNvZGVVUklDb21wb25lbnQocGFydHNbMF0pOwogICAgICAgICAgamFyW2ZvdW5kS2V5XSA9IGNvbnZlcnRlci5yZWFkKHZhbHVlLCBmb3VuZEtleSk7CgogICAgICAgICAgaWYgKGtleSA9PT0gZm91bmRLZXkpIHsKICAgICAgICAgICAgYnJlYWsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlKSB7fQogICAgICB9CgogICAgICByZXR1cm4ga2V5ID8gamFyW2tleV0gOiBqYXIKICAgIH0KCiAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZSgKICAgICAgewogICAgICAgIHNldDogc2V0LAogICAgICAgIGdldDogZ2V0LAogICAgICAgIHJlbW92ZTogZnVuY3Rpb24gKGtleSwgYXR0cmlidXRlcykgewogICAgICAgICAgc2V0KAogICAgICAgICAgICBrZXksCiAgICAgICAgICAgICcnLAogICAgICAgICAgICBhc3NpZ24oe30sIGF0dHJpYnV0ZXMsIHsKICAgICAgICAgICAgICBleHBpcmVzOiAtMQogICAgICAgICAgICB9KQogICAgICAgICAgKTsKICAgICAgICB9LAogICAgICAgIHdpdGhBdHRyaWJ1dGVzOiBmdW5jdGlvbiAoYXR0cmlidXRlcykgewogICAgICAgICAgcmV0dXJuIGluaXQodGhpcy5jb252ZXJ0ZXIsIGFzc2lnbih7fSwgdGhpcy5hdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzKSkKICAgICAgICB9LAogICAgICAgIHdpdGhDb252ZXJ0ZXI6IGZ1bmN0aW9uIChjb252ZXJ0ZXIpIHsKICAgICAgICAgIHJldHVybiBpbml0KGFzc2lnbih7fSwgdGhpcy5jb252ZXJ0ZXIsIGNvbnZlcnRlciksIHRoaXMuYXR0cmlidXRlcykKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBhdHRyaWJ1dGVzOiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKGRlZmF1bHRBdHRyaWJ1dGVzKSB9LAogICAgICAgIGNvbnZlcnRlcjogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZShjb252ZXJ0ZXIpIH0KICAgICAgfQogICAgKQogIH0KCiAgdmFyIGFwaSA9IGluaXQoZGVmYXVsdENvbnZlcnRlciwgeyBwYXRoOiAnLycgfSk7CiAgLyogZXNsaW50LWVuYWJsZSBuby12YXIgKi8KCiAgcmV0dXJuIGFwaTsKCn0pKSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/js/js.cookie.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGpzLWNvb2tpZSB2My4wLjEgfCBNSVQgKi8KIWZ1bmN0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUodCk6KGU9ZXx8c2VsZixmdW5jdGlvbigpe3ZhciBuPWUuQ29va2llcyxvPWUuQ29va2llcz10KCk7by5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuQ29va2llcz1uLG99fSgpKX0odGhpcywoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciBvIGluIG4pZVtvXT1uW29dfXJldHVybiBlfXJldHVybiBmdW5jdGlvbiB0KG4sbyl7ZnVuY3Rpb24gcih0LHIsaSl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCl7Im51bWJlciI9PXR5cGVvZihpPWUoe30sbyxpKSkuZXhwaXJlcyYmKGkuZXhwaXJlcz1uZXcgRGF0ZShEYXRlLm5vdygpKzg2NGU1KmkuZXhwaXJlcykpLGkuZXhwaXJlcyYmKGkuZXhwaXJlcz1pLmV4cGlyZXMudG9VVENTdHJpbmcoKSksdD1lbmNvZGVVUklDb21wb25lbnQodCkucmVwbGFjZSgvJSgyWzM0NkJdfDVFfDYwfDdDKS9nLGRlY29kZVVSSUNvbXBvbmVudCkucmVwbGFjZSgvWygpXS9nLGVzY2FwZSk7dmFyIGM9IiI7Zm9yKHZhciB1IGluIGkpaVt1XSYmKGMrPSI7ICIrdSwhMCE9PWlbdV0mJihjKz0iPSIraVt1XS5zcGxpdCgiOyIpWzBdKSk7cmV0dXJuIGRvY3VtZW50LmNvb2tpZT10KyI9IituLndyaXRlKHIsdCkrY319cmV0dXJuIE9iamVjdC5jcmVhdGUoe3NldDpyLGdldDpmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoIWFyZ3VtZW50cy5sZW5ndGh8fGUpKXtmb3IodmFyIHQ9ZG9jdW1lbnQuY29va2llP2RvY3VtZW50LmNvb2tpZS5zcGxpdCgiOyAiKTpbXSxvPXt9LHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGk9dFtyXS5zcGxpdCgiPSIpLGM9aS5zbGljZSgxKS5qb2luKCI9Iik7dHJ5e3ZhciB1PWRlY29kZVVSSUNvbXBvbmVudChpWzBdKTtpZihvW3VdPW4ucmVhZChjLHUpLGU9PT11KWJyZWFrfWNhdGNoKGUpe319cmV0dXJuIGU/b1tlXTpvfX0scmVtb3ZlOmZ1bmN0aW9uKHQsbil7cih0LCIiLGUoe30sbix7ZXhwaXJlczotMX0pKX0sd2l0aEF0dHJpYnV0ZXM6ZnVuY3Rpb24obil7cmV0dXJuIHQodGhpcy5jb252ZXJ0ZXIsZSh7fSx0aGlzLmF0dHJpYnV0ZXMsbikpfSx3aXRoQ29udmVydGVyOmZ1bmN0aW9uKG4pe3JldHVybiB0KGUoe30sdGhpcy5jb252ZXJ0ZXIsbiksdGhpcy5hdHRyaWJ1dGVzKX19LHthdHRyaWJ1dGVzOnt2YWx1ZTpPYmplY3QuZnJlZXplKG8pfSxjb252ZXJ0ZXI6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSl9KHtyZWFkOmZ1bmN0aW9uKGUpe3JldHVybiciJz09PWVbMF0mJihlPWUuc2xpY2UoMSwtMSkpLGUucmVwbGFjZSgvKCVbXGRBLUZdezJ9KSsvZ2ksZGVjb2RlVVJJQ29tcG9uZW50KX0sd3JpdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lKDJbMzQ2QkZdfDNbQUMtRl18NDB8NVtCREVdfDYwfDdbQkNEXSkvZyxkZWNvZGVVUklDb21wb25lbnQpfX0se3BhdGg6Ii8ifSl9KSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/js/js.functions.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[DQooZnVuY3Rpb24oZ2xvYmFsLCAkLCBqUXVlcnksIENvb2tpZXMsIGhlbHBfZnVuY3Rpb25zKQ0Kew0KICBsZXQgT0UgPSBnbG9iYWwuT0U7DQogIGxldCBtZXNzYWdlc190ZW1wbGF0ZSA9ICc8YXNpZGUgaWQ9ImhlbHBlcl9tZXNzYWdlIiBjbGFzcz0ibWVzc2FnZSBwYWdlbWNvbnRhaW5lciIgcm9sZT0ic3RhdHVzIj48cD57MH08L3A+PC9hc2lkZT4nOw0KICBsZXQgZXJyb3JzX3RlbXBsYXRlID0gJzxhc2lkZSBpZD0iaGVscGVyX2Vycm9yIiBjbGFzcz0ibWVzc2FnZSBwYWdlZXJyb3Jjb250YWluZXIiIHJvbGU9ImFsZXJ0Ij48cD57MH08L3A+PC9hc2lkZT4nOw0KICANCiAgalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpDQogIHsNCiAgICB2YXIgYWN0aXZlX3RhYiA9IENvb2tpZXMuZ2V0KCdzbWFydHlfZXh0X3RhYl9hY3RpdmUnKTsNCiAgICB2YXIgYWN0aXZlX2FjY29yZGlvbl9pdGVtID0gQ29va2llcy5nZXQoJ3NtYXJ0eV9leHRfYWNjX2FjdGl2ZScpOw0KICAgIA0KICAgIC8qIGFjdGl2ZSB0YWJzIGxvZ2ljICovDQogICAgaWYodHlwZW9mIGFjdGl2ZV90YWIgPT09ICJ1bmRlZmluZWQiKQ0KICAgIHsNCiAgICAgIF9zZXRfYWN0aXZlX3RhYignZ2VuZXJhbCcpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgX3NldF9hY3RpdmVfdGFiKGFjdGl2ZV90YWIpOw0KICAgIH0NCiAgDQogICAgJCgnI3BhZ2VfdGFicyA+IGRpdicpDQogICAgICAuZWFjaChmdW5jdGlvbigpDQogICAgICB7DQogICAgICAgICQodGhpcykuY2xpY2soZnVuY3Rpb24oKQ0KICAgICAgICB7DQogICAgICAgICAgQ29va2llcy5zZXQoJ3NtYXJ0eV9leHRfdGFiX2FjdGl2ZScsIHRoaXMuaWQpOw0KICAgICAgICB9KTsNCiAgICAgIH0pOw0KICANCiAgICAvKiAgY29weSB0byBjbGlwYm9hcmQgc3R1ZmYgKi8NCiAgICAkKCIuY2xpY2stdG8tY29weSIpLmNsaWNrKGZ1bmN0aW9uIChlKQ0KICAgIHsNCiAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgIGhlbHBfZnVuY3Rpb25zLmRldGVjdERyYWdPckNsaWNrKHRoaXMpOw0KICAgIH0pOw0KICANCiAgICAvKiB0aGUgYWNjb3JkaW9uIHN0dWZmICovDQogICAgX3NldF9pbmNyZW1lbnRhbF9pZHMoJ2FjY29yZGlvbi1saXN0LWl0ZW0nKTsNCiAgICAkKCcuYWNjb3JkaW9uLWxpc3QgPiAuYWNjb3JkaW9uLWxpc3QtaXRlbSA+IC5hY2NvcmRpb24tbGlzdC1pdGVtLWJvZHknKS5oaWRlKCk7DQogICAgJCgnLmFjY29yZGlvbi1saXN0LWl0ZW0nKQ0KICANCiAgICBpZih0eXBlb2YgYWN0aXZlX2FjY29yZGlvbl9pdGVtICE9PSAidW5kZWZpbmVkIikNCiAgICB7DQogICAgICAkKCcjJyArIGFjdGl2ZV9hY2NvcmRpb25faXRlbSkNCiAgICAgICAgLmFkZENsYXNzKCJhY3RpdmUiKQ0KICAgICAgICAuZmluZCgiLmFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSIpDQogICAgICAgIC5zbGlkZURvd24oKTsNCiAgICB9DQogICAgDQogICAgJCgnLmFsJykuY2xpY2soZnVuY3Rpb24oKQ0KICAgIHsNCiAgICAgIHZhciBjdXJyZW50X2l0ZW0gPSAkKHRoaXMpLmNsb3Nlc3QoIi5hY2NvcmRpb24tbGlzdC1pdGVtIik7DQogICAgICANCiAgICAgIGlmKCQodGhpcykuY2xvc2VzdCgiLmFjY29yZGlvbi1saXN0LWl0ZW0iKS5oYXNDbGFzcygiYWN0aXZlIikpDQogICAgICB7DQogICAgICAgICQodGhpcykuY2xvc2VzdCgiLmFjY29yZGlvbi1saXN0LWl0ZW0iKS5yZW1vdmVDbGFzcygiYWN0aXZlIikuZmluZCgiLmFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSIpLnNsaWRlVXAoKTsNCiAgICAgICAgX3NldF9hY3RpdmVfYWNjb3JkaW9uX2l0ZW0oJ3VuZGVmaW5lZCcpOw0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAkKCIuYWNjb3JkaW9uLWxpc3QgPiAuYWNjb3JkaW9uLWxpc3QtaXRlbS5hY3RpdmUgLmFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSIpLnNsaWRlVXAoKTsNCiAgICAgICAgJCgiLmFjY29yZGlvbi1saXN0ID4gLmFjY29yZGlvbi1saXN0LWl0ZW0uYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpOw0KICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoIi5hY2NvcmRpb24tbGlzdC1pdGVtIikuYWRkQ2xhc3MoImFjdGl2ZSIpLmZpbmQoIi5hY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiKS5zbGlkZURvd24oKTsNCiAgICAgICAgX3NldF9hY3RpdmVfYWNjb3JkaW9uX2l0ZW0oICQoY3VycmVudF9pdGVtKS5hdHRyKCdpZCcpICk7DQogICAgICB9DQogICAgICByZXR1cm4gZmFsc2U7DQogICAgfSk7DQogICAgDQogICAgDQogIH0pOw0KICANCiAgZnVuY3Rpb24gX3NldF9pbmNyZW1lbnRhbF9pZHMoYV9jbGFzcykNCiAgew0KICAgIHZhciBjb3VudCA9IDE7DQogICAgdmFyIHNlbCA9ICcuJyArIGFfY2xhc3M7DQogICAgJChzZWwpLmVhY2goZnVuY3Rpb24oKQ0KICAgIHsNCiAgICAgICQodGhpcykuYXR0cigiaWQiLCBhX2NsYXNzICsgIi0iICsgY291bnQpOw0KICAgICAgY291bnQrKzsNCiAgICB9KTsNCiAgfQ0KICANCiAgZnVuY3Rpb24gX3NldF9hY3RpdmVfYWNjb3JkaW9uX2l0ZW0oaWQpDQogIHsNCiAgICBDb29raWVzLnNldCgnc21hcnR5X2V4dF9hY2NfYWN0aXZlJywgaWQpOw0KICB9DQogIA0KICBmdW5jdGlvbiBfc2V0X2FjdGl2ZV90YWIodGFiX25hbWUpDQogIHsNCiAgICAkKCcjcGFnZV90YWJzID4gZGl2JykNCiAgICAgIC5lYWNoKGZ1bmN0aW9uKCkNCiAgICAgIHsNCiAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7DQogICAgICB9KTsNCiAgICANCiAgICAkKCcjcGFnZV9jb250ZW50ID4gZGl2JykNCiAgICAgIC5lYWNoKGZ1bmN0aW9uKCkNCiAgICAgIHsNCiAgICAgICAgJCh0aGlzKS5oaWRlKCk7DQogICAgICB9KTsNCiAgICANCiAgICAkKCcjJyArIHRhYl9uYW1lKS5hZGRDbGFzcygnYWN0aXZlJyk7DQogICAgJCgnIycgKyB0YWJfbmFtZSArICdfYycpLnNob3coKTsNCiAgICBDb29raWVzLnNldCgnc21hcnR5X2V4dF90YWJfYWN0aXZlJywgdGFiX25hbWUpOw0KICB9DQogIA0KICANCiAgLyoqDQogICAqIENoZWNrcyBpZiBhIHN0cmluZyBlbmRzIHdpdGggYSBzcGVjaWZpZWQgc3VmZml4Lg0KICAgKg0KICAgKiBAcGFyYW0ge3N0cmluZ30gc3VmZml4IC0gVGhlIHN1ZmZpeCB0byBjaGVjay4NCiAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBzcGVjaWZpZWQgc3VmZml4LCBvdGhlcndpc2UgcmV0dXJucyBmYWxzZS4NCiAgICovDQogIFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGggPSBmdW5jdGlvbiAoc3VmZml4KQ0KICB7DQogICAgcmV0dXJuICh0aGlzLnN1YnN0cih0aGlzLmxlbmd0aCAtIHN1ZmZpeC5sZW5ndGgpID09PSBzdWZmaXgpOw0KICB9DQogIA0KICAvKioNCiAgICogQSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhIHN0cmluZyBzdGFydHMgd2l0aCBhIGdpdmVuIHByZWZpeC4NCiAgICoNCiAgICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCAtIFRoZSBwcmVmaXggdG8gY2hlY2sgZm9yLg0KICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgcHJlZml4LCBvdGhlcndpc2UgZmFsc2UuDQogICAqLw0KICBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGggPSBmdW5jdGlvbihwcmVmaXgpDQogIHsNCiAgICByZXR1cm4gKHRoaXMuc3Vic3RyKDAsIHByZWZpeC5sZW5ndGgpID09PSBwcmVmaXgpOw0KICB9DQogIA0KICAvKioNCiAgICogQSBmdW5jdGlvbiB0aGF0IGZvcm1hdHMgYSBzdHJpbmcuDQogICAqIFVzYWdlOg0KICAgKiAnQWRkZWQgezB9IGJ5IHsxfSB0byB5b3VyIGNvbGxlY3Rpb24nLmYodGl0bGUsIGFydGlzdCkNCiAgICogJ1lvdXIgYmFsYW5jZSBpcyB7MH0gVVNEJy5mKDc3LjcpDQogICAqIEB0eXBlIHtmdW5jdGlvbigpOiBTdHJpbmd9DQogICAqLw0KICBTdHJpbmcucHJvdG90eXBlLmZvcm1hdCA9IFN0cmluZy5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7DQogICAgdmFyIHMgPSB0aGlzLA0KICAgICAgICBpID0gYXJndW1lbnRzLmxlbmd0aDsNCiAgICANCiAgICB3aGlsZSAoaS0tKSB7DQogICAgICBzID0gcy5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xceycgKyBpICsgJ1xcfScsICdnbScpLCBhcmd1bWVudHNbaV0pOw0KICAgIH0NCiAgICByZXR1cm4gczsNCiAgfTsNCiAgDQogIC8qKg0KICAgKiB0YXBzIGludG8gdGhlIGNvcmUgZnVuY3Rpb24gdG8gc2hvdyBhbiBlcnJvciB3aGVuIG5lZWRlZA0KICAgKg0KICAgKiBAcGFyYW0gbWVzc2FnZV90ZXh0DQogICAqLw0KICBoZWxwX2Z1bmN0aW9ucy5oZWxwX2Vycm9yX21lc3NhZ2UgPSAgZnVuY3Rpb24gKG1lc3NhZ2VfdGV4dCkNCiAgew0KICAgIGxldCBvdXRwdXQgPSBlcnJvcnNfdGVtcGxhdGUuZm9ybWF0KG1lc3NhZ2VfdGV4dCk7DQogICAgJCgnI2hlbHBlcl9lcnJvcicpLmRldGFjaCgpOw0KICAgICQoJyNvZV9tYWluYXJlYScpLnByZXBlbmQob3V0cHV0KTsNCiAgICAkKCcjaGVscGVyX2Vycm9yJykuaGlkZSgpOw0KICAgIE9FLnZpZXcuc2hvd05vdGlmaWNhdGlvbnMoKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIHRhcHMgaW50byB0aGUgY29yZSBmdW5jdGlvbiB0byBzaG93IGEgbWVzc2FnZSB3aGVuIG5lZWRlZA0KICAgKg0KICAgKiBAcGFyYW0gbWVzc2FnZV90ZXh0DQogICAqLw0KICBoZWxwX2Z1bmN0aW9ucy5oZWxwX21lc3NhZ2UgPSAgZnVuY3Rpb24gKG1lc3NhZ2VfdGV4dCkNCiAgew0KICAgIGxldCBvdXRwdXQgPSBtZXNzYWdlc190ZW1wbGF0ZS5mb3JtYXQobWVzc2FnZV90ZXh0KTsNCiAgICAkKCcjaGVscGVyX21lc3NhZ2UnKS5kZXRhY2goKTsNCiAgICAkKCcjb2VfbWFpbmFyZWEnKS5wcmVwZW5kKG91dHB1dCk7DQogICAgJCgnI2hlbHBlcl9tZXNzYWdlJykuaGlkZSgpOw0KICAgIE9FLnZpZXcuc2hvd05vdGlmaWNhdGlvbnMoKTsNCiAgfQ0KICANCiAgDQogIGhlbHBfZnVuY3Rpb25zLkdldFNlbGVjdGVkVGV4dCA9IGZ1bmN0aW9uKCkNCiAgew0KICAgIGlmKHdpbmRvdy5nZXRTZWxlY3Rpb24pDQogICAgew0KICAgICAgLy8gYWxsIGJyb3dzZXJzLCBleGNlcHQgSUUgYmVmb3JlIHZlcnNpb24gOQ0KICAgICAgdmFyIHJhbmdlID0gd2luZG93LmdldFNlbGVjdGlvbigpOw0KICAgICAgcmV0dXJuIHJhbmdlLnRvU3RyaW5nKCk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICBpZihkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UpDQogICAgICB7DQogICAgICAgIC8vIEludGVybmV0IEV4cGxvcmVyDQogICAgICAgIHZhciByYW5nZSA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpOw0KICAgICAgICByZXR1cm4gcmFuZ2UudGV4dDsNCiAgICAgIH0NCiAgICB9DQogIH0NCiAgLyoqDQogICAqIHdoYXQgaXMgY29waWVkIGRlcGVuZHMgb24gIHdoZXRoZXINCiAgICogd2UgY2xpY2tlZCBhbmQgZHJhZ2dlZCwgb3IganVzdCBjbGlja2VkOg0KICAgKiBkcmFnZ2VkOiBjb3B5IHRoZSBzZWxlY3RlZCB0ZXh0IG9uIG1vdXNlIHVwDQogICAqIGNsaWNrZWQ6IHNlbGVjdCBhbGwgYW5kIGNvcHkgb24gbW91c2UgdXANCiAgICogQHBhcmFtIGVsZW1lbnQNCiAgICovDQogIGhlbHBfZnVuY3Rpb25zLmRldGVjdERyYWdPckNsaWNrID0gZnVuY3Rpb24oZWxlbWVudCkNCiAgew0KICAgIHZhciBpc0RyYWdnaW5nID0gZmFsc2U7DQogICAgdmFyIHN0YXJ0aW5nUG9zID0gW107DQoNCiAgICAkKGVsZW1lbnQpDQogICAgICAubW91c2Vkb3duKGZ1bmN0aW9uKGV2dCkNCiAgICAgIHsNCiAgICAgICAgaXNEcmFnZ2luZyAgPSBmYWxzZTsNCiAgICAgICAgc3RhcnRpbmdQb3MgPSBbZXZ0LnBhZ2VYLCBldnQucGFnZVldOw0KICAgICAgfSkNCiAgICAgIC5tb3VzZW1vdmUoZnVuY3Rpb24oZXZ0KQ0KICAgICAgew0KICAgICAgICBpZiggISggIGV2dC5wYWdlWCA9PT0gc3RhcnRpbmdQb3NbMF0gJiYgZXZ0LnBhZ2VZID09PSBzdGFydGluZ1Bvc1sxXSApICkNCiAgICAgICAgew0KICAgICAgICAgIGlzRHJhZ2dpbmcgPSB0cnVlOw0KICAgICAgICB9DQogICAgICB9KQ0KICAgICAgLm1vdXNldXAoZnVuY3Rpb24oKQ0KICAgICAgew0KICAgICAgICBoZWxwX2Z1bmN0aW9ucy5jb3B5VG9DbGlwYm9hcmQoZWxlbWVudCwgaXNEcmFnZ2luZyk7DQogICAgICAgIGlzRHJhZ2dpbmcgID0gZmFsc2U7DQogICAgICAgIHN0YXJ0aW5nUG9zID0gW107DQogICAgICB9KTsNCiAgfQ0KICANCiAgDQogIGhlbHBfZnVuY3Rpb25zLmNvcHlUb0NsaXBib2FyZCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGRyYWdnaW5nKQ0KIHsNCiAgIHZhciAkdGVtcCA9ICQoIjxpbnB1dD4iKTsNCiAgICQoImJvZHkiKS5hcHBlbmQoJHRlbXApOw0KICAgDQogICBpZighZHJhZ2dpbmcpDQogICB7DQogICAgIC8vaGVscF9mdW5jdGlvbnMuR2V0U2VsZWN0ZWRUZXh0KCk7DQogICAgICR0ZW1wLnZhbCgkKGVsZW1lbnQpLnRleHQoKSkuc2VsZWN0KCk7DQogICB9DQogICANCiAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5Iik7DQogICAkdGVtcC5yZW1vdmUoKTsNCiAgIGhlbHBfZnVuY3Rpb25zLmhlbHBfbWVzc2FnZSgnQ29waWVkIHRvIENsaXBib2FyZCEnKTsNCiB9DQp9KHRoaXMsICQsIGpRdWVyeSwgQ29va2llcywgaGVscF9mdW5jdGlvbnMgPSB3aW5kb3cuaGVscF9mdW5jdGlvbnMgfHwge30pKTs=]]></data>
	</file>
	<file>
	  <filename>/js/lodash.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIEBsaWNlbnNlCiAqIExvZGFzaCBsb2Rhc2guY29tL2xpY2Vuc2UgfCBVbmRlcnNjb3JlLmpzIDEuOC4zIHVuZGVyc2NvcmVqcy5vcmcvTElDRU5TRQogKi8KOyhmdW5jdGlvbigpe2Z1bmN0aW9uIG4obix0LHIpe3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuLmNhbGwodCk7Y2FzZSAxOnJldHVybiBuLmNhbGwodCxyWzBdKTtjYXNlIDI6cmV0dXJuIG4uY2FsbCh0LHJbMF0sclsxXSk7Y2FzZSAzOnJldHVybiBuLmNhbGwodCxyWzBdLHJbMV0sclsyXSl9cmV0dXJuIG4uYXBwbHkodCxyKX1mdW5jdGlvbiB0KG4sdCxyLGUpe2Zvcih2YXIgdT0tMSxpPW51bGw9PW4/MDpuLmxlbmd0aDsrK3U8aTspe3ZhciBvPW5bdV07dChlLG8scihvKSxuKX1yZXR1cm4gZX1mdW5jdGlvbiByKG4sdCl7Zm9yKHZhciByPS0xLGU9bnVsbD09bj8wOm4ubGVuZ3RoOysrcjxlJiZmYWxzZSE9PXQobltyXSxyLG4pOyk7cmV0dXJuIG59ZnVuY3Rpb24gZShuLHQpe2Zvcih2YXIgcj1udWxsPT1uPzA6bi5sZW5ndGg7ci0tJiZmYWxzZSE9PXQobltyXSxyLG4pOyk7cmV0dXJuIG59ZnVuY3Rpb24gdShuLHQpe2Zvcih2YXIgcj0tMSxlPW51bGw9PW4/MDpuLmxlbmd0aDsrK3I8ZTspaWYoIXQobltyXSxyLG4pKXJldHVybiBmYWxzZTsKcmV0dXJuIHRydWV9ZnVuY3Rpb24gaShuLHQpe2Zvcih2YXIgcj0tMSxlPW51bGw9PW4/MDpuLmxlbmd0aCx1PTAsaT1bXTsrK3I8ZTspe3ZhciBvPW5bcl07dChvLHIsbikmJihpW3UrK109byl9cmV0dXJuIGl9ZnVuY3Rpb24gbyhuLHQpe3JldHVybiEobnVsbD09bnx8IW4ubGVuZ3RoKSYmLTE8dihuLHQsMCl9ZnVuY3Rpb24gZihuLHQscil7Zm9yKHZhciBlPS0xLHU9bnVsbD09bj8wOm4ubGVuZ3RoOysrZTx1OylpZihyKHQsbltlXSkpcmV0dXJuIHRydWU7cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIGMobix0KXtmb3IodmFyIHI9LTEsZT1udWxsPT1uPzA6bi5sZW5ndGgsdT1BcnJheShlKTsrK3I8ZTspdVtyXT10KG5bcl0scixuKTtyZXR1cm4gdX1mdW5jdGlvbiBhKG4sdCl7Zm9yKHZhciByPS0xLGU9dC5sZW5ndGgsdT1uLmxlbmd0aDsrK3I8ZTspblt1K3JdPXRbcl07cmV0dXJuIG59ZnVuY3Rpb24gbChuLHQscixlKXt2YXIgdT0tMSxpPW51bGw9PW4/MDpuLmxlbmd0aDtmb3IoZSYmaSYmKHI9blsrK3VdKTsrK3U8aTspcj10KHIsblt1XSx1LG4pOwpyZXR1cm4gcn1mdW5jdGlvbiBzKG4sdCxyLGUpe3ZhciB1PW51bGw9PW4/MDpuLmxlbmd0aDtmb3IoZSYmdSYmKHI9blstLXVdKTt1LS07KXI9dChyLG5bdV0sdSxuKTtyZXR1cm4gcn1mdW5jdGlvbiBoKG4sdCl7Zm9yKHZhciByPS0xLGU9bnVsbD09bj8wOm4ubGVuZ3RoOysrcjxlOylpZih0KG5bcl0scixuKSlyZXR1cm4gdHJ1ZTtyZXR1cm4gZmFsc2V9ZnVuY3Rpb24gcChuLHQscil7dmFyIGU7cmV0dXJuIHIobixmdW5jdGlvbihuLHIsdSl7aWYodChuLHIsdSkpcmV0dXJuIGU9cixmYWxzZX0pLGV9ZnVuY3Rpb24gXyhuLHQscixlKXt2YXIgdT1uLmxlbmd0aDtmb3Iocis9ZT8xOi0xO2U/ci0tOisrcjx1OylpZih0KG5bcl0scixuKSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiB2KG4sdCxyKXtpZih0PT09dCluOnstLXI7Zm9yKHZhciBlPW4ubGVuZ3RoOysrcjxlOylpZihuW3JdPT09dCl7bj1yO2JyZWFrIG59bj0tMX1lbHNlIG49XyhuLGQscik7cmV0dXJuIG59ZnVuY3Rpb24gZyhuLHQscixlKXsKLS1yO2Zvcih2YXIgdT1uLmxlbmd0aDsrK3I8dTspaWYoZShuW3JdLHQpKXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIGQobil7cmV0dXJuIG4hPT1ufWZ1bmN0aW9uIHkobix0KXt2YXIgcj1udWxsPT1uPzA6bi5sZW5ndGg7cmV0dXJuIHI/bShuLHQpL3I6Rn1mdW5jdGlvbiBiKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9UOnRbbl19fWZ1bmN0aW9uIHgobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT1uP1Q6blt0XX19ZnVuY3Rpb24gaihuLHQscixlLHUpe3JldHVybiB1KG4sZnVuY3Rpb24obix1LGkpe3I9ZT8oZT1mYWxzZSxuKTp0KHIsbix1LGkpfSkscn1mdW5jdGlvbiB3KG4sdCl7dmFyIHI9bi5sZW5ndGg7Zm9yKG4uc29ydCh0KTtyLS07KW5bcl09bltyXS5jO3JldHVybiBufWZ1bmN0aW9uIG0obix0KXtmb3IodmFyIHIsZT0tMSx1PW4ubGVuZ3RoOysrZTx1Oyl7dmFyIGk9dChuW2VdKTtpIT09VCYmKHI9cj09PVQ/aTpyK2kpfXJldHVybiByOwp9ZnVuY3Rpb24gQShuLHQpe2Zvcih2YXIgcj0tMSxlPUFycmF5KG4pOysrcjxuOyllW3JdPXQocik7cmV0dXJuIGV9ZnVuY3Rpb24gRShuLHQpe3JldHVybiBjKHQsZnVuY3Rpb24odCl7cmV0dXJuW3Qsblt0XV19KX1mdW5jdGlvbiBrKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbih0KX19ZnVuY3Rpb24gUyhuLHQpe3JldHVybiBjKHQsZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19KX1mdW5jdGlvbiBPKG4sdCl7cmV0dXJuIG4uaGFzKHQpfWZ1bmN0aW9uIEkobix0KXtmb3IodmFyIHI9LTEsZT1uLmxlbmd0aDsrK3I8ZSYmLTE8dih0LG5bcl0sMCk7KTtyZXR1cm4gcn1mdW5jdGlvbiBSKG4sdCl7Zm9yKHZhciByPW4ubGVuZ3RoO3ItLSYmLTE8dih0LG5bcl0sMCk7KTtyZXR1cm4gcn1mdW5jdGlvbiB6KG4pe3JldHVybiJcXCIrVW5bbl19ZnVuY3Rpb24gVyhuKXt2YXIgdD0tMSxyPUFycmF5KG4uc2l6ZSk7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbihuLGUpe3JbKyt0XT1bZSxuXTsKfSkscn1mdW5jdGlvbiBCKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBuKHQocikpfX1mdW5jdGlvbiBMKG4sdCl7Zm9yKHZhciByPS0xLGU9bi5sZW5ndGgsdT0wLGk9W107KytyPGU7KXt2YXIgbz1uW3JdO28hPT10JiYiX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyIhPT1vfHwobltyXT0iX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyIsaVt1KytdPXIpfXJldHVybiBpfWZ1bmN0aW9uIFUobil7dmFyIHQ9LTEscj1BcnJheShuLnNpemUpO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24obil7clsrK3RdPW59KSxyfWZ1bmN0aW9uIEMobil7dmFyIHQ9LTEscj1BcnJheShuLnNpemUpO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24obil7clsrK3RdPVtuLG5dfSkscn1mdW5jdGlvbiBEKG4pe2lmKFJuLnRlc3Qobikpe2Zvcih2YXIgdD1Pbi5sYXN0SW5kZXg9MDtPbi50ZXN0KG4pOykrK3Q7bj10fWVsc2Ugbj1RbihuKTtyZXR1cm4gbn1mdW5jdGlvbiBNKG4pe3JldHVybiBSbi50ZXN0KG4pP24ubWF0Y2goT24pfHxbXTpuLnNwbGl0KCIiKTsKfXZhciBULCQ9MS8wLEY9TmFOLE49W1siYXJ5IiwxMjhdLFsiYmluZCIsMV0sWyJiaW5kS2V5IiwyXSxbImN1cnJ5Iiw4XSxbImN1cnJ5UmlnaHQiLDE2XSxbImZsaXAiLDUxMl0sWyJwYXJ0aWFsIiwzMl0sWyJwYXJ0aWFsUmlnaHQiLDY0XSxbInJlYXJnIiwyNTZdXSxQPS9cYl9fcFwrPScnOy9nLFo9L1xiKF9fcFwrPSknJ1wrL2cscT0vKF9fZVwoLio/XCl8XGJfX3RcKSlcKycnOy9nLFY9LyYoPzphbXB8bHR8Z3R8cXVvdHwjMzkpOy9nLEs9L1smPD4iJ10vZyxHPVJlZ0V4cChWLnNvdXJjZSksSD1SZWdFeHAoSy5zb3VyY2UpLEo9LzwlLShbXHNcU10rPyklPi9nLFk9LzwlKFtcc1xTXSs/KSU+L2csUT0vPCU9KFtcc1xTXSs/KSU+L2csWD0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxubj0vXlx3KiQvLHRuPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLHJuPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxlbj1SZWdFeHAocm4uc291cmNlKSx1bj0vXlxzK3xccyskL2csb249L15ccysvLGZuPS9ccyskLyxjbj0vXHsoPzpcblwvXCogXFt3cmFwcGVkIHdpdGggLitcXSBcKlwvKT9cbj8vLGFuPS9ce1xuXC9cKiBcW3dyYXBwZWQgd2l0aCAoLispXF0gXCovLGxuPS8sPyAmIC8sc249L1teXHgwMC1ceDJmXHgzYS1ceDQwXHg1Yi1ceDYwXHg3Yi1ceDdmXSsvZyxobj0vXFwoXFwpPy9nLHBuPS9cJFx7KFteXFx9XSooPzpcXC5bXlxcfV0qKSopXH0vZyxfbj0vXHcqJC8sdm49L15bLStdMHhbMC05YS1mXSskL2ksZ249L14wYlswMV0rJC9pLGRuPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLHluPS9eMG9bMC03XSskL2ksYm49L14oPzowfFsxLTldXGQqKSQvLHhuPS9bXHhjMC1ceGQ2XHhkOC1ceGY2XHhmOC1ceGZmXHUwMTAwLVx1MDE3Zl0vZyxqbj0vKCReKS8sd249L1snXG5cclx1MjAyOFx1MjAyOVxcXS9nLG1uPSJbXFx1ZmUwZVxcdWZlMGZdPyg/OltcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZdfFxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXSk/KD86XFx1MjAwZCg/OlteXFx1ZDgwMC1cXHVkZmZmXXwoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9fFtcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0pW1xcdWZlMGVcXHVmZTBmXT8oPzpbXFx1MDMwMC1cXHUwMzZmXFx1ZmUyMC1cXHVmZTJmXFx1MjBkMC1cXHUyMGZmXXxcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0pPykqIixBbj0iKD86W1xcdTI3MDAtXFx1MjdiZl18KD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfXxbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdKSIrbW4sRW49Iig/OlteXFx1ZDgwMC1cXHVkZmZmXVtcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZdP3xbXFx1MDMwMC1cXHUwMzZmXFx1ZmUyMC1cXHVmZTJmXFx1MjBkMC1cXHUyMGZmXXwoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9fFtcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl18W1xcdWQ4MDAtXFx1ZGZmZl0pIixrbj1SZWdFeHAoIlsnXHUyMDE5XSIsImciKSxTbj1SZWdFeHAoIltcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZdIiwiZyIpLE9uPVJlZ0V4cCgiXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdKD89XFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdKXwiK0VuK21uLCJnIiksSW49UmVnRXhwKFsiW0EtWlxceGMwLVxceGQ2XFx4ZDgtXFx4ZGVdP1thLXpcXHhkZi1cXHhmNlxceGY4LVxceGZmXSsoPzpbJ1x1MjAxOV0oPzpkfGxsfG18cmV8c3x0fHZlKSk/KD89W1xceGFjXFx4YjFcXHhkN1xceGY3XFx4MDAtXFx4MmZcXHgzYS1cXHg0MFxceDViLVxceDYwXFx4N2ItXFx4YmZcXHUyMDAwLVxcdTIwNmYgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDBdfFtBLVpcXHhjMC1cXHhkNlxceGQ4LVxceGRlXXwkKXwoPzpbQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZV18W15cXHVkODAwLVxcdWRmZmZcXHhhY1xceGIxXFx4ZDdcXHhmN1xceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceGJmXFx1MjAwMC1cXHUyMDZmIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFxkK1xcdTI3MDAtXFx1MjdiZmEtelxceGRmLVxceGY2XFx4ZjgtXFx4ZmZBLVpcXHhjMC1cXHhkNlxceGQ4LVxceGRlXSkrKD86WydcdTIwMTldKD86RHxMTHxNfFJFfFN8VHxWRSkpPyg/PVtcXHhhY1xceGIxXFx4ZDdcXHhmN1xceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceGJmXFx1MjAwMC1cXHUyMDZmIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXXxbQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZV0oPzpbYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZl18W15cXHVkODAwLVxcdWRmZmZcXHhhY1xceGIxXFx4ZDdcXHhmN1xceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceGJmXFx1MjAwMC1cXHUyMDZmIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFxkK1xcdTI3MDAtXFx1MjdiZmEtelxceGRmLVxceGY2XFx4ZjgtXFx4ZmZBLVpcXHhjMC1cXHhkNlxceGQ4LVxceGRlXSl8JCl8W0EtWlxceGMwLVxceGQ2XFx4ZDgtXFx4ZGVdPyg/OlthLXpcXHhkZi1cXHhmNlxceGY4LVxceGZmXXxbXlxcdWQ4MDAtXFx1ZGZmZlxceGFjXFx4YjFcXHhkN1xceGY3XFx4MDAtXFx4MmZcXHgzYS1cXHg0MFxceDViLVxceDYwXFx4N2ItXFx4YmZcXHUyMDAwLVxcdTIwNmYgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDBcXGQrXFx1MjcwMC1cXHUyN2JmYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZkEtWlxceGMwLVxceGQ2XFx4ZDgtXFx4ZGVdKSsoPzpbJ1x1MjAxOV0oPzpkfGxsfG18cmV8c3x0fHZlKSk/fFtBLVpcXHhjMC1cXHhkNlxceGQ4LVxceGRlXSsoPzpbJ1x1MjAxOV0oPzpEfExMfE18UkV8U3xUfFZFKSk/fFxcZCooPzoxU1R8Mk5EfDNSRHwoPyFbMTIzXSlcXGRUSCkoPz1cXGJ8W2Etel9dKXxcXGQqKD86MXN0fDJuZHwzcmR8KD8hWzEyM10pXFxkdGgpKD89XFxifFtBLVpfXSl8XFxkKyIsQW5dLmpvaW4oInwiKSwiZyIpLFJuPVJlZ0V4cCgiW1xcdTIwMGRcXHVkODAwLVxcdWRmZmZcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZcXHVmZTBlXFx1ZmUwZl0iKSx6bj0vW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLyxXbj0iQXJyYXkgQnVmZmVyIERhdGFWaWV3IERhdGUgRXJyb3IgRmxvYXQzMkFycmF5IEZsb2F0NjRBcnJheSBGdW5jdGlvbiBJbnQ4QXJyYXkgSW50MTZBcnJheSBJbnQzMkFycmF5IE1hcCBNYXRoIE9iamVjdCBQcm9taXNlIFJlZ0V4cCBTZXQgU3RyaW5nIFN5bWJvbCBUeXBlRXJyb3IgVWludDhBcnJheSBVaW50OENsYW1wZWRBcnJheSBVaW50MTZBcnJheSBVaW50MzJBcnJheSBXZWFrTWFwIF8gY2xlYXJUaW1lb3V0IGlzRmluaXRlIHBhcnNlSW50IHNldFRpbWVvdXQiLnNwbGl0KCIgIiksQm49e307CkJuWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1CblsiW29iamVjdCBGbG9hdDY0QXJyYXldIl09Qm5bIltvYmplY3QgSW50OEFycmF5XSJdPUJuWyJbb2JqZWN0IEludDE2QXJyYXldIl09Qm5bIltvYmplY3QgSW50MzJBcnJheV0iXT1CblsiW29iamVjdCBVaW50OEFycmF5XSJdPUJuWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPUJuWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPUJuWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPXRydWUsQm5bIltvYmplY3QgQXJndW1lbnRzXSJdPUJuWyJbb2JqZWN0IEFycmF5XSJdPUJuWyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPUJuWyJbb2JqZWN0IEJvb2xlYW5dIl09Qm5bIltvYmplY3QgRGF0YVZpZXddIl09Qm5bIltvYmplY3QgRGF0ZV0iXT1CblsiW29iamVjdCBFcnJvcl0iXT1CblsiW29iamVjdCBGdW5jdGlvbl0iXT1CblsiW29iamVjdCBNYXBdIl09Qm5bIltvYmplY3QgTnVtYmVyXSJdPUJuWyJbb2JqZWN0IE9iamVjdF0iXT1CblsiW29iamVjdCBSZWdFeHBdIl09Qm5bIltvYmplY3QgU2V0XSJdPUJuWyJbb2JqZWN0IFN0cmluZ10iXT1CblsiW29iamVjdCBXZWFrTWFwXSJdPWZhbHNlOwp2YXIgTG49e307TG5bIltvYmplY3QgQXJndW1lbnRzXSJdPUxuWyJbb2JqZWN0IEFycmF5XSJdPUxuWyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPUxuWyJbb2JqZWN0IERhdGFWaWV3XSJdPUxuWyJbb2JqZWN0IEJvb2xlYW5dIl09TG5bIltvYmplY3QgRGF0ZV0iXT1MblsiW29iamVjdCBGbG9hdDMyQXJyYXldIl09TG5bIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPUxuWyJbb2JqZWN0IEludDhBcnJheV0iXT1MblsiW29iamVjdCBJbnQxNkFycmF5XSJdPUxuWyJbb2JqZWN0IEludDMyQXJyYXldIl09TG5bIltvYmplY3QgTWFwXSJdPUxuWyJbb2JqZWN0IE51bWJlcl0iXT1MblsiW29iamVjdCBPYmplY3RdIl09TG5bIltvYmplY3QgUmVnRXhwXSJdPUxuWyJbb2JqZWN0IFNldF0iXT1MblsiW29iamVjdCBTdHJpbmddIl09TG5bIltvYmplY3QgU3ltYm9sXSJdPUxuWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09TG5bIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09TG5bIltvYmplY3QgVWludDE2QXJyYXldIl09TG5bIltvYmplY3QgVWludDMyQXJyYXldIl09dHJ1ZSwKTG5bIltvYmplY3QgRXJyb3JdIl09TG5bIltvYmplY3QgRnVuY3Rpb25dIl09TG5bIltvYmplY3QgV2Vha01hcF0iXT1mYWxzZTt2YXIgVW49eyJcXCI6IlxcIiwiJyI6IiciLCJcbiI6Im4iLCJcciI6InIiLCJcdTIwMjgiOiJ1MjAyOCIsIlx1MjAyOSI6InUyMDI5In0sQ249cGFyc2VGbG9hdCxEbj1wYXJzZUludCxNbj10eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWwsVG49dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZiwkbj1Nbnx8VG58fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksRm49dHlwZW9mIGV4cG9ydHM9PSJvYmplY3QiJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxObj1GbiYmdHlwZW9mIG1vZHVsZT09Im9iamVjdCImJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLFBuPU5uJiZObi5leHBvcnRzPT09Rm4sWm49UG4mJk1uLnByb2Nlc3MscW49ZnVuY3Rpb24oKXsKdHJ5e3ZhciBuPU5uJiZObi5mJiZObi5mKCJ1dGlsIikudHlwZXM7cmV0dXJuIG4/bjpabiYmWm4uYmluZGluZyYmWm4uYmluZGluZygidXRpbCIpfWNhdGNoKG4pe319KCksVm49cW4mJnFuLmlzQXJyYXlCdWZmZXIsS249cW4mJnFuLmlzRGF0ZSxHbj1xbiYmcW4uaXNNYXAsSG49cW4mJnFuLmlzUmVnRXhwLEpuPXFuJiZxbi5pc1NldCxZbj1xbiYmcW4uaXNUeXBlZEFycmF5LFFuPWIoImxlbmd0aCIpLFhuPXgoeyJceGMwIjoiQSIsIlx4YzEiOiJBIiwiXHhjMiI6IkEiLCJceGMzIjoiQSIsIlx4YzQiOiJBIiwiXHhjNSI6IkEiLCJceGUwIjoiYSIsIlx4ZTEiOiJhIiwiXHhlMiI6ImEiLCJceGUzIjoiYSIsIlx4ZTQiOiJhIiwiXHhlNSI6ImEiLCJceGM3IjoiQyIsIlx4ZTciOiJjIiwiXHhkMCI6IkQiLCJceGYwIjoiZCIsIlx4YzgiOiJFIiwiXHhjOSI6IkUiLCJceGNhIjoiRSIsIlx4Y2IiOiJFIiwiXHhlOCI6ImUiLCJceGU5IjoiZSIsIlx4ZWEiOiJlIiwiXHhlYiI6ImUiLCJceGNjIjoiSSIsCiJceGNkIjoiSSIsIlx4Y2UiOiJJIiwiXHhjZiI6IkkiLCJceGVjIjoiaSIsIlx4ZWQiOiJpIiwiXHhlZSI6ImkiLCJceGVmIjoiaSIsIlx4ZDEiOiJOIiwiXHhmMSI6Im4iLCJceGQyIjoiTyIsIlx4ZDMiOiJPIiwiXHhkNCI6Ik8iLCJceGQ1IjoiTyIsIlx4ZDYiOiJPIiwiXHhkOCI6Ik8iLCJceGYyIjoibyIsIlx4ZjMiOiJvIiwiXHhmNCI6Im8iLCJceGY1IjoibyIsIlx4ZjYiOiJvIiwiXHhmOCI6Im8iLCJceGQ5IjoiVSIsIlx4ZGEiOiJVIiwiXHhkYiI6IlUiLCJceGRjIjoiVSIsIlx4ZjkiOiJ1IiwiXHhmYSI6InUiLCJceGZiIjoidSIsIlx4ZmMiOiJ1IiwiXHhkZCI6IlkiLCJceGZkIjoieSIsIlx4ZmYiOiJ5IiwiXHhjNiI6IkFlIiwiXHhlNiI6ImFlIiwiXHhkZSI6IlRoIiwiXHhmZSI6InRoIiwiXHhkZiI6InNzIiwiXHUwMTAwIjoiQSIsIlx1MDEwMiI6IkEiLCJcdTAxMDQiOiJBIiwiXHUwMTAxIjoiYSIsIlx1MDEwMyI6ImEiLCJcdTAxMDUiOiJhIiwiXHUwMTA2IjoiQyIsCiJcdTAxMDgiOiJDIiwiXHUwMTBhIjoiQyIsIlx1MDEwYyI6IkMiLCJcdTAxMDciOiJjIiwiXHUwMTA5IjoiYyIsIlx1MDEwYiI6ImMiLCJcdTAxMGQiOiJjIiwiXHUwMTBlIjoiRCIsIlx1MDExMCI6IkQiLCJcdTAxMGYiOiJkIiwiXHUwMTExIjoiZCIsIlx1MDExMiI6IkUiLCJcdTAxMTQiOiJFIiwiXHUwMTE2IjoiRSIsIlx1MDExOCI6IkUiLCJcdTAxMWEiOiJFIiwiXHUwMTEzIjoiZSIsIlx1MDExNSI6ImUiLCJcdTAxMTciOiJlIiwiXHUwMTE5IjoiZSIsIlx1MDExYiI6ImUiLCJcdTAxMWMiOiJHIiwiXHUwMTFlIjoiRyIsIlx1MDEyMCI6IkciLCJcdTAxMjIiOiJHIiwiXHUwMTFkIjoiZyIsIlx1MDExZiI6ImciLCJcdTAxMjEiOiJnIiwiXHUwMTIzIjoiZyIsIlx1MDEyNCI6IkgiLCJcdTAxMjYiOiJIIiwiXHUwMTI1IjoiaCIsIlx1MDEyNyI6ImgiLCJcdTAxMjgiOiJJIiwiXHUwMTJhIjoiSSIsIlx1MDEyYyI6IkkiLCJcdTAxMmUiOiJJIiwiXHUwMTMwIjoiSSIsIlx1MDEyOSI6ImkiLAoiXHUwMTJiIjoiaSIsIlx1MDEyZCI6ImkiLCJcdTAxMmYiOiJpIiwiXHUwMTMxIjoiaSIsIlx1MDEzNCI6IkoiLCJcdTAxMzUiOiJqIiwiXHUwMTM2IjoiSyIsIlx1MDEzNyI6ImsiLCJcdTAxMzgiOiJrIiwiXHUwMTM5IjoiTCIsIlx1MDEzYiI6IkwiLCJcdTAxM2QiOiJMIiwiXHUwMTNmIjoiTCIsIlx1MDE0MSI6IkwiLCJcdTAxM2EiOiJsIiwiXHUwMTNjIjoibCIsIlx1MDEzZSI6ImwiLCJcdTAxNDAiOiJsIiwiXHUwMTQyIjoibCIsIlx1MDE0MyI6Ik4iLCJcdTAxNDUiOiJOIiwiXHUwMTQ3IjoiTiIsIlx1MDE0YSI6Ik4iLCJcdTAxNDQiOiJuIiwiXHUwMTQ2IjoibiIsIlx1MDE0OCI6Im4iLCJcdTAxNGIiOiJuIiwiXHUwMTRjIjoiTyIsIlx1MDE0ZSI6Ik8iLCJcdTAxNTAiOiJPIiwiXHUwMTRkIjoibyIsIlx1MDE0ZiI6Im8iLCJcdTAxNTEiOiJvIiwiXHUwMTU0IjoiUiIsIlx1MDE1NiI6IlIiLCJcdTAxNTgiOiJSIiwiXHUwMTU1IjoiciIsIlx1MDE1NyI6InIiLCJcdTAxNTkiOiJyIiwKIlx1MDE1YSI6IlMiLCJcdTAxNWMiOiJTIiwiXHUwMTVlIjoiUyIsIlx1MDE2MCI6IlMiLCJcdTAxNWIiOiJzIiwiXHUwMTVkIjoicyIsIlx1MDE1ZiI6InMiLCJcdTAxNjEiOiJzIiwiXHUwMTYyIjoiVCIsIlx1MDE2NCI6IlQiLCJcdTAxNjYiOiJUIiwiXHUwMTYzIjoidCIsIlx1MDE2NSI6InQiLCJcdTAxNjciOiJ0IiwiXHUwMTY4IjoiVSIsIlx1MDE2YSI6IlUiLCJcdTAxNmMiOiJVIiwiXHUwMTZlIjoiVSIsIlx1MDE3MCI6IlUiLCJcdTAxNzIiOiJVIiwiXHUwMTY5IjoidSIsIlx1MDE2YiI6InUiLCJcdTAxNmQiOiJ1IiwiXHUwMTZmIjoidSIsIlx1MDE3MSI6InUiLCJcdTAxNzMiOiJ1IiwiXHUwMTc0IjoiVyIsIlx1MDE3NSI6InciLCJcdTAxNzYiOiJZIiwiXHUwMTc3IjoieSIsIlx1MDE3OCI6IlkiLCJcdTAxNzkiOiJaIiwiXHUwMTdiIjoiWiIsIlx1MDE3ZCI6IloiLCJcdTAxN2EiOiJ6IiwiXHUwMTdjIjoieiIsIlx1MDE3ZSI6InoiLCJcdTAxMzIiOiJJSiIsIlx1MDEzMyI6ImlqIiwKIlx1MDE1MiI6Ik9lIiwiXHUwMTUzIjoib2UiLCJcdTAxNDkiOiInbiIsIlx1MDE3ZiI6InMifSksbnQ9eCh7IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjMzk7In0pLHR0PXgoeyImYW1wOyI6IiYiLCImbHQ7IjoiPCIsIiZndDsiOiI+IiwiJnF1b3Q7IjonIicsIiYjMzk7IjoiJyJ9KSxydD1mdW5jdGlvbiB4KG1uKXtmdW5jdGlvbiBBbihuKXtpZih5dShuKSYmIWZmKG4pJiYhKG4gaW5zdGFuY2VvZiBVbikpe2lmKG4gaW5zdGFuY2VvZiBPbilyZXR1cm4gbjtpZihvaS5jYWxsKG4sIl9fd3JhcHBlZF9fIikpcmV0dXJuIEZlKG4pfXJldHVybiBuZXcgT24obil9ZnVuY3Rpb24gRW4oKXt9ZnVuY3Rpb24gT24obix0KXt0aGlzLl9fd3JhcHBlZF9fPW4sdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fY2hhaW5fXz0hIXQsdGhpcy5fX2luZGV4X189MCx0aGlzLl9fdmFsdWVzX189VH1mdW5jdGlvbiBVbihuKXt0aGlzLl9fd3JhcHBlZF9fPW4sCnRoaXMuX19hY3Rpb25zX189W10sdGhpcy5fX2Rpcl9fPTEsdGhpcy5fX2ZpbHRlcmVkX189ZmFsc2UsdGhpcy5fX2l0ZXJhdGVlc19fPVtdLHRoaXMuX190YWtlQ291bnRfXz00Mjk0OTY3Mjk1LHRoaXMuX192aWV3c19fPVtdfWZ1bmN0aW9uIE1uKG4pe3ZhciB0PS0xLHI9bnVsbD09bj8wOm4ubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PHI7KXt2YXIgZT1uW3RdO3RoaXMuc2V0KGVbMF0sZVsxXSl9fWZ1bmN0aW9uIFRuKG4pe3ZhciB0PS0xLHI9bnVsbD09bj8wOm4ubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PHI7KXt2YXIgZT1uW3RdO3RoaXMuc2V0KGVbMF0sZVsxXSl9fWZ1bmN0aW9uIEZuKG4pe3ZhciB0PS0xLHI9bnVsbD09bj8wOm4ubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PHI7KXt2YXIgZT1uW3RdO3RoaXMuc2V0KGVbMF0sZVsxXSl9fWZ1bmN0aW9uIE5uKG4pe3ZhciB0PS0xLHI9bnVsbD09bj8wOm4ubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyBGbjsrK3Q8cjspdGhpcy5hZGQoblt0XSk7Cn1mdW5jdGlvbiBabihuKXt0aGlzLnNpemU9KHRoaXMuX19kYXRhX189bmV3IFRuKG4pKS5zaXplfWZ1bmN0aW9uIHFuKG4sdCl7dmFyIHIsZT1mZihuKSx1PSFlJiZvZihuKSxpPSFlJiYhdSYmYWYobiksbz0hZSYmIXUmJiFpJiZfZihuKSx1PShlPWV8fHV8fGl8fG8pP0Eobi5sZW5ndGgsbmkpOltdLGY9dS5sZW5ndGg7Zm9yKHIgaW4gbikhdCYmIW9pLmNhbGwobixyKXx8ZSYmKCJsZW5ndGgiPT1yfHxpJiYoIm9mZnNldCI9PXJ8fCJwYXJlbnQiPT1yKXx8byYmKCJidWZmZXIiPT1yfHwiYnl0ZUxlbmd0aCI9PXJ8fCJieXRlT2Zmc2V0Ij09cil8fFNlKHIsZikpfHx1LnB1c2gocik7cmV0dXJuIHV9ZnVuY3Rpb24gUW4obil7dmFyIHQ9bi5sZW5ndGg7cmV0dXJuIHQ/bltpcigwLHQtMSldOlR9ZnVuY3Rpb24gZXQobix0KXtyZXR1cm4gRGUoVXIobikscHQodCwwLG4ubGVuZ3RoKSl9ZnVuY3Rpb24gdXQobil7cmV0dXJuIERlKFVyKG4pKX1mdW5jdGlvbiBpdChuLHQscil7KHI9PT1UfHxsdShuW3RdLHIpKSYmKHIhPT1UfHx0IGluIG4pfHxzdChuLHQscik7Cn1mdW5jdGlvbiBvdChuLHQscil7dmFyIGU9blt0XTtvaS5jYWxsKG4sdCkmJmx1KGUscikmJihyIT09VHx8dCBpbiBuKXx8c3Qobix0LHIpfWZ1bmN0aW9uIGZ0KG4sdCl7Zm9yKHZhciByPW4ubGVuZ3RoO3ItLTspaWYobHUobltyXVswXSx0KSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBjdChuLHQscixlKXtyZXR1cm4gdW8obixmdW5jdGlvbihuLHUsaSl7dChlLG4scihuKSxpKX0pLGV9ZnVuY3Rpb24gYXQobix0KXtyZXR1cm4gbiYmQ3IodCxXdSh0KSxuKX1mdW5jdGlvbiBsdChuLHQpe3JldHVybiBuJiZDcih0LEJ1KHQpLG4pfWZ1bmN0aW9uIHN0KG4sdCxyKXsiX19wcm90b19fIj09dCYmQWk/QWkobix0LHtjb25maWd1cmFibGU6dHJ1ZSxlbnVtZXJhYmxlOnRydWUsdmFsdWU6cix3cml0YWJsZTp0cnVlfSk6blt0XT1yfWZ1bmN0aW9uIGh0KG4sdCl7Zm9yKHZhciByPS0xLGU9dC5sZW5ndGgsdT1LdShlKSxpPW51bGw9PW47KytyPGU7KXVbcl09aT9UOlJ1KG4sdFtyXSk7cmV0dXJuIHU7Cn1mdW5jdGlvbiBwdChuLHQscil7cmV0dXJuIG49PT1uJiYociE9PVQmJihuPW48PXI/bjpyKSx0IT09VCYmKG49bj49dD9uOnQpKSxufWZ1bmN0aW9uIF90KG4sdCxlLHUsaSxvKXt2YXIgZixjPTEmdCxhPTImdCxsPTQmdDtpZihlJiYoZj1pP2Uobix1LGksbyk6ZShuKSksZiE9PVQpcmV0dXJuIGY7aWYoIWR1KG4pKXJldHVybiBuO2lmKHU9ZmYobikpe2lmKGY9bWUobiksIWMpcmV0dXJuIFVyKG4sZil9ZWxzZXt2YXIgcz12byhuKSxoPSJbb2JqZWN0IEZ1bmN0aW9uXSI9PXN8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PXM7aWYoYWYobikpcmV0dXJuIElyKG4sYyk7aWYoIltvYmplY3QgT2JqZWN0XSI9PXN8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT1zfHxoJiYhaSl7aWYoZj1hfHxoP3t9OkFlKG4pLCFjKXJldHVybiBhP01yKG4sbHQoZixuKSk6RHIobixhdChmLG4pKX1lbHNle2lmKCFMbltzXSlyZXR1cm4gaT9uOnt9O2Y9RWUobixzLGMpfX1pZihvfHwobz1uZXcgWm4pLAppPW8uZ2V0KG4pKXJldHVybiBpO28uc2V0KG4sZikscGYobik/bi5mb3JFYWNoKGZ1bmN0aW9uKHIpe2YuYWRkKF90KHIsdCxlLHIsbixvKSl9KTpzZihuKSYmbi5mb3JFYWNoKGZ1bmN0aW9uKHIsdSl7Zi5zZXQodSxfdChyLHQsZSx1LG4sbykpfSk7dmFyIGE9bD9hP3ZlOl9lOmE/QnU6V3UscD11P1Q6YShuKTtyZXR1cm4gcihwfHxuLGZ1bmN0aW9uKHIsdSl7cCYmKHU9cixyPW5bdV0pLG90KGYsdSxfdChyLHQsZSx1LG4sbykpfSksZn1mdW5jdGlvbiB2dChuKXt2YXIgdD1XdShuKTtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGd0KHIsbix0KX19ZnVuY3Rpb24gZ3Qobix0LHIpe3ZhciBlPXIubGVuZ3RoO2lmKG51bGw9PW4pcmV0dXJuIWU7Zm9yKG49UXUobik7ZS0tOyl7dmFyIHU9cltlXSxpPXRbdV0sbz1uW3VdO2lmKG89PT1UJiYhKHUgaW4gbil8fCFpKG8pKXJldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX1mdW5jdGlvbiBkdChuLHQscil7aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IHRpKCJFeHBlY3RlZCBhIGZ1bmN0aW9uIik7CnJldHVybiBibyhmdW5jdGlvbigpe24uYXBwbHkoVCxyKX0sdCl9ZnVuY3Rpb24geXQobix0LHIsZSl7dmFyIHU9LTEsaT1vLGE9dHJ1ZSxsPW4ubGVuZ3RoLHM9W10saD10Lmxlbmd0aDtpZighbClyZXR1cm4gcztyJiYodD1jKHQsayhyKSkpLGU/KGk9ZixhPWZhbHNlKToyMDA8PXQubGVuZ3RoJiYoaT1PLGE9ZmFsc2UsdD1uZXcgTm4odCkpO246Zm9yKDsrK3U8bDspe3ZhciBwPW5bdV0sXz1udWxsPT1yP3A6cihwKSxwPWV8fDAhPT1wP3A6MDtpZihhJiZfPT09Xyl7Zm9yKHZhciB2PWg7di0tOylpZih0W3ZdPT09Xyljb250aW51ZSBuO3MucHVzaChwKX1lbHNlIGkodCxfLGUpfHxzLnB1c2gocCl9cmV0dXJuIHN9ZnVuY3Rpb24gYnQobix0KXt2YXIgcj10cnVlO3JldHVybiB1byhuLGZ1bmN0aW9uKG4sZSx1KXtyZXR1cm4gcj0hIXQobixlLHUpfSkscn1mdW5jdGlvbiB4dChuLHQscil7Zm9yKHZhciBlPS0xLHU9bi5sZW5ndGg7KytlPHU7KXt2YXIgaT1uW2VdLG89dChpKTtpZihudWxsIT1vJiYoZj09PVQ/bz09PW8mJiF3dShvKTpyKG8sZikpKXZhciBmPW8sYz1pOwp9cmV0dXJuIGN9ZnVuY3Rpb24ganQobix0KXt2YXIgcj1bXTtyZXR1cm4gdW8obixmdW5jdGlvbihuLGUsdSl7dChuLGUsdSkmJnIucHVzaChuKX0pLHJ9ZnVuY3Rpb24gd3Qobix0LHIsZSx1KXt2YXIgaT0tMSxvPW4ubGVuZ3RoO2ZvcihyfHwocj1rZSksdXx8KHU9W10pOysraTxvOyl7dmFyIGY9bltpXTswPHQmJnIoZik/MTx0P3d0KGYsdC0xLHIsZSx1KTphKHUsZik6ZXx8KHVbdS5sZW5ndGhdPWYpfXJldHVybiB1fWZ1bmN0aW9uIG10KG4sdCl7cmV0dXJuIG4mJm9vKG4sdCxXdSl9ZnVuY3Rpb24gQXQobix0KXtyZXR1cm4gbiYmZm8obix0LFd1KX1mdW5jdGlvbiBFdChuLHQpe3JldHVybiBpKHQsZnVuY3Rpb24odCl7cmV0dXJuIF91KG5bdF0pfSl9ZnVuY3Rpb24ga3Qobix0KXt0PVNyKHQsbik7Zm9yKHZhciByPTAsZT10Lmxlbmd0aDtudWxsIT1uJiZyPGU7KW49bltNZSh0W3IrK10pXTtyZXR1cm4gciYmcj09ZT9uOlR9ZnVuY3Rpb24gU3Qobix0LHIpe3JldHVybiB0PXQobiksCmZmKG4pP3Q6YSh0LHIobikpfWZ1bmN0aW9uIE90KG4pe2lmKG51bGw9PW4pbj1uPT09VD8iW29iamVjdCBVbmRlZmluZWRdIjoiW29iamVjdCBOdWxsXSI7ZWxzZSBpZihtaSYmbWkgaW4gUXUobikpe3ZhciB0PW9pLmNhbGwobixtaSkscj1uW21pXTt0cnl7blttaV09VDt2YXIgZT10cnVlfWNhdGNoKG4pe312YXIgdT1haS5jYWxsKG4pO2UmJih0P25bbWldPXI6ZGVsZXRlIG5bbWldKSxuPXV9ZWxzZSBuPWFpLmNhbGwobik7cmV0dXJuIG59ZnVuY3Rpb24gSXQobix0KXtyZXR1cm4gbj50fWZ1bmN0aW9uIFJ0KG4sdCl7cmV0dXJuIG51bGwhPW4mJm9pLmNhbGwobix0KX1mdW5jdGlvbiB6dChuLHQpe3JldHVybiBudWxsIT1uJiZ0IGluIFF1KG4pfWZ1bmN0aW9uIFd0KG4sdCxyKXtmb3IodmFyIGU9cj9mOm8sdT1uWzBdLmxlbmd0aCxpPW4ubGVuZ3RoLGE9aSxsPUt1KGkpLHM9MS8wLGg9W107YS0tOyl7dmFyIHA9blthXTthJiZ0JiYocD1jKHAsayh0KSkpLHM9Q2kocC5sZW5ndGgscyksCmxbYV09IXImJih0fHwxMjA8PXUmJjEyMDw9cC5sZW5ndGgpP25ldyBObihhJiZwKTpUfXZhciBwPW5bMF0sXz0tMSx2PWxbMF07bjpmb3IoOysrXzx1JiZoLmxlbmd0aDxzOyl7dmFyIGc9cFtfXSxkPXQ/dChnKTpnLGc9cnx8MCE9PWc/ZzowO2lmKHY/IU8odixkKTohZShoLGQscikpe2ZvcihhPWk7LS1hOyl7dmFyIHk9bFthXTtpZih5PyFPKHksZCk6IWUoblthXSxkLHIpKWNvbnRpbnVlIG59diYmdi5wdXNoKGQpLGgucHVzaChnKX19cmV0dXJuIGh9ZnVuY3Rpb24gQnQobix0LHIpe3ZhciBlPXt9O3JldHVybiBtdChuLGZ1bmN0aW9uKG4sdSxpKXt0KGUscihuKSx1LGkpfSksZX1mdW5jdGlvbiBMdCh0LHIsZSl7cmV0dXJuIHI9U3Iocix0KSx0PTI+ci5sZW5ndGg/dDprdCh0LGhyKHIsMCwtMSkpLHI9bnVsbD09dD90OnRbTWUoVmUocikpXSxudWxsPT1yP1Q6bihyLHQsZSl9ZnVuY3Rpb24gVXQobil7cmV0dXJuIHl1KG4pJiYiW29iamVjdCBBcmd1bWVudHNdIj09T3Qobil9ZnVuY3Rpb24gQ3Qobil7CnJldHVybiB5dShuKSYmIltvYmplY3QgQXJyYXlCdWZmZXJdIj09T3Qobil9ZnVuY3Rpb24gRHQobil7cmV0dXJuIHl1KG4pJiYiW29iamVjdCBEYXRlXSI9PU90KG4pfWZ1bmN0aW9uIE10KG4sdCxyLGUsdSl7aWYobj09PXQpdD10cnVlO2Vsc2UgaWYobnVsbD09bnx8bnVsbD09dHx8IXl1KG4pJiYheXUodCkpdD1uIT09biYmdCE9PXQ7ZWxzZSBuOnt2YXIgaT1mZihuKSxvPWZmKHQpLGY9aT8iW29iamVjdCBBcnJheV0iOnZvKG4pLGM9bz8iW29iamVjdCBBcnJheV0iOnZvKHQpLGY9IltvYmplY3QgQXJndW1lbnRzXSI9PWY/IltvYmplY3QgT2JqZWN0XSI6ZixjPSJbb2JqZWN0IEFyZ3VtZW50c10iPT1jPyJbb2JqZWN0IE9iamVjdF0iOmMsYT0iW29iamVjdCBPYmplY3RdIj09ZixvPSJbb2JqZWN0IE9iamVjdF0iPT1jO2lmKChjPWY9PWMpJiZhZihuKSl7aWYoIWFmKHQpKXt0PWZhbHNlO2JyZWFrIG59aT10cnVlLGE9ZmFsc2V9aWYoYyYmIWEpdXx8KHU9bmV3IFpuKSx0PWl8fF9mKG4pP3NlKG4sdCxyLGUsTXQsdSk6aGUobix0LGYscixlLE10LHUpO2Vsc2V7CmlmKCEoMSZyKSYmKGk9YSYmb2kuY2FsbChuLCJfX3dyYXBwZWRfXyIpLGY9byYmb2kuY2FsbCh0LCJfX3dyYXBwZWRfXyIpLGl8fGYpKXtuPWk/bi52YWx1ZSgpOm4sdD1mP3QudmFsdWUoKTp0LHV8fCh1PW5ldyBabiksdD1NdChuLHQscixlLHUpO2JyZWFrIG59aWYoYyl0OmlmKHV8fCh1PW5ldyBabiksaT0xJnIsZj1fZShuKSxvPWYubGVuZ3RoLGM9X2UodCkubGVuZ3RoLG89PWN8fGkpe2ZvcihhPW87YS0tOyl7dmFyIGw9ZlthXTtpZighKGk/bCBpbiB0Om9pLmNhbGwodCxsKSkpe3Q9ZmFsc2U7YnJlYWsgdH19aWYoKGM9dS5nZXQobikpJiZ1LmdldCh0KSl0PWM9PXQ7ZWxzZXtjPXRydWUsdS5zZXQobix0KSx1LnNldCh0LG4pO2Zvcih2YXIgcz1pOysrYTxvOyl7dmFyIGw9ZlthXSxoPW5bbF0scD10W2xdO2lmKGUpdmFyIF89aT9lKHAsaCxsLHQsbix1KTplKGgscCxsLG4sdCx1KTtpZihfPT09VD9oIT09cCYmIU10KGgscCxyLGUsdSk6IV8pe2M9ZmFsc2U7YnJlYWt9c3x8KHM9ImNvbnN0cnVjdG9yIj09bCk7Cn1jJiYhcyYmKHI9bi5jb25zdHJ1Y3RvcixlPXQuY29uc3RydWN0b3IsciE9ZSYmImNvbnN0cnVjdG9yImluIG4mJiJjb25zdHJ1Y3RvciJpbiB0JiYhKHR5cGVvZiByPT0iZnVuY3Rpb24iJiZyIGluc3RhbmNlb2YgciYmdHlwZW9mIGU9PSJmdW5jdGlvbiImJmUgaW5zdGFuY2VvZiBlKSYmKGM9ZmFsc2UpKSx1LmRlbGV0ZShuKSx1LmRlbGV0ZSh0KSx0PWN9fWVsc2UgdD1mYWxzZTtlbHNlIHQ9ZmFsc2V9fXJldHVybiB0fWZ1bmN0aW9uIFR0KG4pe3JldHVybiB5dShuKSYmIltvYmplY3QgTWFwXSI9PXZvKG4pfWZ1bmN0aW9uICR0KG4sdCxyLGUpe3ZhciB1PXIubGVuZ3RoLGk9dSxvPSFlO2lmKG51bGw9PW4pcmV0dXJuIWk7Zm9yKG49UXUobik7dS0tOyl7dmFyIGY9clt1XTtpZihvJiZmWzJdP2ZbMV0hPT1uW2ZbMF1dOiEoZlswXWluIG4pKXJldHVybiBmYWxzZX1mb3IoOysrdTxpOyl7dmFyIGY9clt1XSxjPWZbMF0sYT1uW2NdLGw9ZlsxXTtpZihvJiZmWzJdKXtpZihhPT09VCYmIShjIGluIG4pKXJldHVybiBmYWxzZTsKfWVsc2V7aWYoZj1uZXcgWm4sZSl2YXIgcz1lKGEsbCxjLG4sdCxmKTtpZihzPT09VD8hTXQobCxhLDMsZSxmKTohcylyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfWZ1bmN0aW9uIEZ0KG4pe3JldHVybiEoIWR1KG4pfHxjaSYmY2kgaW4gbikmJihfdShuKT9oaTpkbikudGVzdChUZShuKSl9ZnVuY3Rpb24gTnQobil7cmV0dXJuIHl1KG4pJiYiW29iamVjdCBSZWdFeHBdIj09T3Qobil9ZnVuY3Rpb24gUHQobil7cmV0dXJuIHl1KG4pJiYiW29iamVjdCBTZXRdIj09dm8obil9ZnVuY3Rpb24gWnQobil7cmV0dXJuIHl1KG4pJiZndShuLmxlbmd0aCkmJiEhQm5bT3QobildfWZ1bmN0aW9uIHF0KG4pe3JldHVybiB0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uOm51bGw9PW4/JHU6dHlwZW9mIG49PSJvYmplY3QiP2ZmKG4pP0p0KG5bMF0sblsxXSk6SHQobik6WnUobil9ZnVuY3Rpb24gVnQobil7aWYoIXplKG4pKXJldHVybiBMaShuKTt2YXIgdCxyPVtdO2Zvcih0IGluIFF1KG4pKW9pLmNhbGwobix0KSYmImNvbnN0cnVjdG9yIiE9dCYmci5wdXNoKHQpOwpyZXR1cm4gcn1mdW5jdGlvbiBLdChuLHQpe3JldHVybiBuPHR9ZnVuY3Rpb24gR3Qobix0KXt2YXIgcj0tMSxlPXN1KG4pP0t1KG4ubGVuZ3RoKTpbXTtyZXR1cm4gdW8obixmdW5jdGlvbihuLHUsaSl7ZVsrK3JdPXQobix1LGkpfSksZX1mdW5jdGlvbiBIdChuKXt2YXIgdD14ZShuKTtyZXR1cm4gMT09dC5sZW5ndGgmJnRbMF1bMl0/V2UodFswXVswXSx0WzBdWzFdKTpmdW5jdGlvbihyKXtyZXR1cm4gcj09PW58fCR0KHIsbix0KX19ZnVuY3Rpb24gSnQobix0KXtyZXR1cm4gSWUobikmJnQ9PT10JiYhZHUodCk/V2UoTWUobiksdCk6ZnVuY3Rpb24ocil7dmFyIGU9UnUocixuKTtyZXR1cm4gZT09PVQmJmU9PT10P3p1KHIsbik6TXQodCxlLDMpfX1mdW5jdGlvbiBZdChuLHQscixlLHUpe24hPT10JiZvbyh0LGZ1bmN0aW9uKGksbyl7aWYodXx8KHU9bmV3IFpuKSxkdShpKSl7dmFyIGY9dSxjPUxlKG4sbyksYT1MZSh0LG8pLGw9Zi5nZXQoYSk7aWYobClpdChuLG8sbCk7ZWxzZXsKdmFyIGw9ZT9lKGMsYSxvKyIiLG4sdCxmKTpULHM9bD09PVQ7aWYocyl7dmFyIGg9ZmYoYSkscD0haCYmYWYoYSksXz0haCYmIXAmJl9mKGEpLGw9YTtofHxwfHxfP2ZmKGMpP2w9YzpodShjKT9sPVVyKGMpOnA/KHM9ZmFsc2UsbD1JcihhLHRydWUpKTpfPyhzPWZhbHNlLGw9enIoYSx0cnVlKSk6bD1bXTp4dShhKXx8b2YoYSk/KGw9YyxvZihjKT9sPU91KGMpOmR1KGMpJiYhX3UoYyl8fChsPUFlKGEpKSk6cz1mYWxzZX1zJiYoZi5zZXQoYSxsKSxZdChsLGEscixlLGYpLGYuZGVsZXRlKGEpKSxpdChuLG8sbCl9fWVsc2UgZj1lP2UoTGUobixvKSxpLG8rIiIsbix0LHUpOlQsZj09PVQmJihmPWkpLGl0KG4sbyxmKX0sQnUpfWZ1bmN0aW9uIFF0KG4sdCl7dmFyIHI9bi5sZW5ndGg7aWYocilyZXR1cm4gdCs9MD50P3I6MCxTZSh0LHIpP25bdF06VH1mdW5jdGlvbiBYdChuLHQscil7dmFyIGU9LTE7cmV0dXJuIHQ9Yyh0Lmxlbmd0aD90OlskdV0sayh5ZSgpKSksbj1HdChuLGZ1bmN0aW9uKG4pe3JldHVybnsKYTpjKHQsZnVuY3Rpb24odCl7cmV0dXJuIHQobil9KSxiOisrZSxjOm59fSksdyhuLGZ1bmN0aW9uKG4sdCl7dmFyIGU7bjp7ZT0tMTtmb3IodmFyIHU9bi5hLGk9dC5hLG89dS5sZW5ndGgsZj1yLmxlbmd0aDsrK2U8bzspe3ZhciBjPVdyKHVbZV0saVtlXSk7aWYoYyl7ZT1lPj1mP2M6YyooImRlc2MiPT1yW2VdPy0xOjEpO2JyZWFrIG59fWU9bi5iLXQuYn1yZXR1cm4gZX0pfWZ1bmN0aW9uIG5yKG4sdCl7cmV0dXJuIHRyKG4sdCxmdW5jdGlvbih0LHIpe3JldHVybiB6dShuLHIpfSl9ZnVuY3Rpb24gdHIobix0LHIpe2Zvcih2YXIgZT0tMSx1PXQubGVuZ3RoLGk9e307KytlPHU7KXt2YXIgbz10W2VdLGY9a3QobixvKTtyKGYsbykmJmxyKGksU3IobyxuKSxmKX1yZXR1cm4gaX1mdW5jdGlvbiBycihuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGt0KHQsbil9fWZ1bmN0aW9uIGVyKG4sdCxyLGUpe3ZhciB1PWU/Zzp2LGk9LTEsbz10Lmxlbmd0aCxmPW47Zm9yKG49PT10JiYodD1Vcih0KSksCnImJihmPWMobixrKHIpKSk7KytpPG87KWZvcih2YXIgYT0wLGw9dFtpXSxsPXI/cihsKTpsOy0xPChhPXUoZixsLGEsZSkpOylmIT09biYmeGkuY2FsbChmLGEsMSkseGkuY2FsbChuLGEsMSk7cmV0dXJuIG59ZnVuY3Rpb24gdXIobix0KXtmb3IodmFyIHI9bj90Lmxlbmd0aDowLGU9ci0xO3ItLTspe3ZhciB1PXRbcl07aWYocj09ZXx8dSE9PWkpe3ZhciBpPXU7U2UodSk/eGkuY2FsbChuLHUsMSk6eHIobix1KX19fWZ1bmN0aW9uIGlyKG4sdCl7cmV0dXJuIG4rSWkoVGkoKSoodC1uKzEpKX1mdW5jdGlvbiBvcihuLHQpe3ZhciByPSIiO2lmKCFufHwxPnR8fDkwMDcxOTkyNTQ3NDA5OTE8dClyZXR1cm4gcjtkbyB0JTImJihyKz1uKSwodD1JaSh0LzIpKSYmKG4rPW4pO3doaWxlKHQpO3JldHVybiByfWZ1bmN0aW9uIGZyKG4sdCl7cmV0dXJuIHhvKEJlKG4sdCwkdSksbisiIil9ZnVuY3Rpb24gY3Iobil7cmV0dXJuIFFuKFV1KG4pKX1mdW5jdGlvbiBhcihuLHQpe3ZhciByPVV1KG4pOwpyZXR1cm4gRGUocixwdCh0LDAsci5sZW5ndGgpKX1mdW5jdGlvbiBscihuLHQscixlKXtpZighZHUobikpcmV0dXJuIG47dD1Tcih0LG4pO2Zvcih2YXIgdT0tMSxpPXQubGVuZ3RoLG89aS0xLGY9bjtudWxsIT1mJiYrK3U8aTspe3ZhciBjPU1lKHRbdV0pLGE9cjtpZih1IT1vKXt2YXIgbD1mW2NdLGE9ZT9lKGwsYyxmKTpUO2E9PT1UJiYoYT1kdShsKT9sOlNlKHRbdSsxXSk/W106e30pfW90KGYsYyxhKSxmPWZbY119cmV0dXJuIG59ZnVuY3Rpb24gc3Iobil7cmV0dXJuIERlKFV1KG4pKX1mdW5jdGlvbiBocihuLHQscil7dmFyIGU9LTEsdT1uLmxlbmd0aDtmb3IoMD50JiYodD0tdD51PzA6dSt0KSxyPXI+dT91OnIsMD5yJiYocis9dSksdT10PnI/MDpyLXQ+Pj4wLHQ+Pj49MCxyPUt1KHUpOysrZTx1OylyW2VdPW5bZSt0XTtyZXR1cm4gcn1mdW5jdGlvbiBwcihuLHQpe3ZhciByO3JldHVybiB1byhuLGZ1bmN0aW9uKG4sZSx1KXtyZXR1cm4gcj10KG4sZSx1KSwhcn0pLCEhcn0KZnVuY3Rpb24gX3Iobix0LHIpe3ZhciBlPTAsdT1udWxsPT1uP2U6bi5sZW5ndGg7aWYodHlwZW9mIHQ9PSJudW1iZXIiJiZ0PT09dCYmMjE0NzQ4MzY0Nz49dSl7Zm9yKDtlPHU7KXt2YXIgaT1lK3U+Pj4xLG89bltpXTtudWxsIT09byYmIXd1KG8pJiYocj9vPD10Om88dCk/ZT1pKzE6dT1pfXJldHVybiB1fXJldHVybiB2cihuLHQsJHUscil9ZnVuY3Rpb24gdnIobix0LHIsZSl7dD1yKHQpO2Zvcih2YXIgdT0wLGk9bnVsbD09bj8wOm4ubGVuZ3RoLG89dCE9PXQsZj1udWxsPT09dCxjPXd1KHQpLGE9dD09PVQ7dTxpOyl7dmFyIGw9SWkoKHUraSkvMikscz1yKG5bbF0pLGg9cyE9PVQscD1udWxsPT09cyxfPXM9PT1zLHY9d3Uocyk7KG8/ZXx8XzphP18mJihlfHxoKTpmP18mJmgmJihlfHwhcCk6Yz9fJiZoJiYhcCYmKGV8fCF2KTpwfHx2PzA6ZT9zPD10OnM8dCk/dT1sKzE6aT1sfXJldHVybiBDaShpLDQyOTQ5NjcyOTQpfWZ1bmN0aW9uIGdyKG4sdCl7Zm9yKHZhciByPS0xLGU9bi5sZW5ndGgsdT0wLGk9W107KytyPGU7KXsKdmFyIG89bltyXSxmPXQ/dChvKTpvO2lmKCFyfHwhbHUoZixjKSl7dmFyIGM9ZjtpW3UrK109MD09PW8/MDpvfX1yZXR1cm4gaX1mdW5jdGlvbiBkcihuKXtyZXR1cm4gdHlwZW9mIG49PSJudW1iZXIiP246d3Uobik/Rjorbn1mdW5jdGlvbiB5cihuKXtpZih0eXBlb2Ygbj09InN0cmluZyIpcmV0dXJuIG47aWYoZmYobikpcmV0dXJuIGMobix5cikrIiI7aWYod3UobikpcmV0dXJuIHJvP3JvLmNhbGwobik6IiI7dmFyIHQ9bisiIjtyZXR1cm4iMCI9PXQmJjEvbj09LSQ/Ii0wIjp0fWZ1bmN0aW9uIGJyKG4sdCxyKXt2YXIgZT0tMSx1PW8saT1uLmxlbmd0aCxjPXRydWUsYT1bXSxsPWE7aWYociljPWZhbHNlLHU9ZjtlbHNlIGlmKDIwMDw9aSl7aWYodT10P251bGw6c28obikpcmV0dXJuIFUodSk7Yz1mYWxzZSx1PU8sbD1uZXcgTm59ZWxzZSBsPXQ/W106YTtuOmZvcig7KytlPGk7KXt2YXIgcz1uW2VdLGg9dD90KHMpOnMscz1yfHwwIT09cz9zOjA7aWYoYyYmaD09PWgpe2Zvcih2YXIgcD1sLmxlbmd0aDtwLS07KWlmKGxbcF09PT1oKWNvbnRpbnVlIG47CnQmJmwucHVzaChoKSxhLnB1c2gocyl9ZWxzZSB1KGwsaCxyKXx8KGwhPT1hJiZsLnB1c2goaCksYS5wdXNoKHMpKX1yZXR1cm4gYX1mdW5jdGlvbiB4cihuLHQpe3JldHVybiB0PVNyKHQsbiksbj0yPnQubGVuZ3RoP246a3Qobixocih0LDAsLTEpKSxudWxsPT1ufHxkZWxldGUgbltNZShWZSh0KSldfWZ1bmN0aW9uIGpyKG4sdCxyLGUpe2Zvcih2YXIgdT1uLmxlbmd0aCxpPWU/dTotMTsoZT9pLS06KytpPHUpJiZ0KG5baV0saSxuKTspO3JldHVybiByP2hyKG4sZT8wOmksZT9pKzE6dSk6aHIobixlP2krMTowLGU/dTppKX1mdW5jdGlvbiB3cihuLHQpe3ZhciByPW47cmV0dXJuIHIgaW5zdGFuY2VvZiBVbiYmKHI9ci52YWx1ZSgpKSxsKHQsZnVuY3Rpb24obix0KXtyZXR1cm4gdC5mdW5jLmFwcGx5KHQudGhpc0FyZyxhKFtuXSx0LmFyZ3MpKX0scil9ZnVuY3Rpb24gbXIobix0LHIpe3ZhciBlPW4ubGVuZ3RoO2lmKDI+ZSlyZXR1cm4gZT9icihuWzBdKTpbXTtmb3IodmFyIHU9LTEsaT1LdShlKTsrK3U8ZTspZm9yKHZhciBvPW5bdV0sZj0tMTsrK2Y8ZTspZiE9dSYmKGlbdV09eXQoaVt1XXx8byxuW2ZdLHQscikpOwpyZXR1cm4gYnIod3QoaSwxKSx0LHIpfWZ1bmN0aW9uIEFyKG4sdCxyKXtmb3IodmFyIGU9LTEsdT1uLmxlbmd0aCxpPXQubGVuZ3RoLG89e307KytlPHU7KXIobyxuW2VdLGU8aT90W2VdOlQpO3JldHVybiBvfWZ1bmN0aW9uIEVyKG4pe3JldHVybiBodShuKT9uOltdfWZ1bmN0aW9uIGtyKG4pe3JldHVybiB0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uOiR1fWZ1bmN0aW9uIFNyKG4sdCl7cmV0dXJuIGZmKG4pP246SWUobix0KT9bbl06am8oSXUobikpfWZ1bmN0aW9uIE9yKG4sdCxyKXt2YXIgZT1uLmxlbmd0aDtyZXR1cm4gcj1yPT09VD9lOnIsIXQmJnI+PWU/bjpocihuLHQscil9ZnVuY3Rpb24gSXIobix0KXtpZih0KXJldHVybiBuLnNsaWNlKCk7dmFyIHI9bi5sZW5ndGgscj1naT9naShyKTpuZXcgbi5jb25zdHJ1Y3RvcihyKTtyZXR1cm4gbi5jb3B5KHIpLHJ9ZnVuY3Rpb24gUnIobil7dmFyIHQ9bmV3IG4uY29uc3RydWN0b3Iobi5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IHZpKHQpLnNldChuZXcgdmkobikpLAp0fWZ1bmN0aW9uIHpyKG4sdCl7cmV0dXJuIG5ldyBuLmNvbnN0cnVjdG9yKHQ/UnIobi5idWZmZXIpOm4uYnVmZmVyLG4uYnl0ZU9mZnNldCxuLmxlbmd0aCl9ZnVuY3Rpb24gV3Iobix0KXtpZihuIT09dCl7dmFyIHI9biE9PVQsZT1udWxsPT09bix1PW49PT1uLGk9d3Uobiksbz10IT09VCxmPW51bGw9PT10LGM9dD09PXQsYT13dSh0KTtpZighZiYmIWEmJiFpJiZuPnR8fGkmJm8mJmMmJiFmJiYhYXx8ZSYmbyYmY3x8IXImJmN8fCF1KXJldHVybiAxO2lmKCFlJiYhaSYmIWEmJm48dHx8YSYmciYmdSYmIWUmJiFpfHxmJiZyJiZ1fHwhbyYmdXx8IWMpcmV0dXJuLTF9cmV0dXJuIDB9ZnVuY3Rpb24gQnIobix0LHIsZSl7dmFyIHU9LTEsaT1uLmxlbmd0aCxvPXIubGVuZ3RoLGY9LTEsYz10Lmxlbmd0aCxhPVVpKGktbywwKSxsPUt1KGMrYSk7Zm9yKGU9IWU7KytmPGM7KWxbZl09dFtmXTtmb3IoOysrdTxvOykoZXx8dTxpKSYmKGxbclt1XV09blt1XSk7Zm9yKDthLS07KWxbZisrXT1uW3UrK107CnJldHVybiBsfWZ1bmN0aW9uIExyKG4sdCxyLGUpe3ZhciB1PS0xLGk9bi5sZW5ndGgsbz0tMSxmPXIubGVuZ3RoLGM9LTEsYT10Lmxlbmd0aCxsPVVpKGktZiwwKSxzPUt1KGwrYSk7Zm9yKGU9IWU7Kyt1PGw7KXNbdV09blt1XTtmb3IobD11OysrYzxhOylzW2wrY109dFtjXTtmb3IoOysrbzxmOykoZXx8dTxpKSYmKHNbbCtyW29dXT1uW3UrK10pO3JldHVybiBzfWZ1bmN0aW9uIFVyKG4sdCl7dmFyIHI9LTEsZT1uLmxlbmd0aDtmb3IodHx8KHQ9S3UoZSkpOysrcjxlOyl0W3JdPW5bcl07cmV0dXJuIHR9ZnVuY3Rpb24gQ3Iobix0LHIsZSl7dmFyIHU9IXI7cnx8KHI9e30pO2Zvcih2YXIgaT0tMSxvPXQubGVuZ3RoOysraTxvOyl7dmFyIGY9dFtpXSxjPWU/ZShyW2ZdLG5bZl0sZixyLG4pOlQ7Yz09PVQmJihjPW5bZl0pLHU/c3QocixmLGMpOm90KHIsZixjKX1yZXR1cm4gcn1mdW5jdGlvbiBEcihuLHQpe3JldHVybiBDcihuLHBvKG4pLHQpfWZ1bmN0aW9uIE1yKG4sdCl7cmV0dXJuIENyKG4sX28obiksdCk7Cn1mdW5jdGlvbiBUcihuLHIpe3JldHVybiBmdW5jdGlvbihlLHUpe3ZhciBpPWZmKGUpP3Q6Y3Qsbz1yP3IoKTp7fTtyZXR1cm4gaShlLG4seWUodSwyKSxvKX19ZnVuY3Rpb24gJHIobil7cmV0dXJuIGZyKGZ1bmN0aW9uKHQscil7dmFyIGU9LTEsdT1yLmxlbmd0aCxpPTE8dT9yW3UtMV06VCxvPTI8dT9yWzJdOlQsaT0zPG4ubGVuZ3RoJiZ0eXBlb2YgaT09ImZ1bmN0aW9uIj8odS0tLGkpOlQ7Zm9yKG8mJk9lKHJbMF0sclsxXSxvKSYmKGk9Mz51P1Q6aSx1PTEpLHQ9UXUodCk7KytlPHU7KShvPXJbZV0pJiZuKHQsbyxlLGkpO3JldHVybiB0fSl9ZnVuY3Rpb24gRnIobix0KXtyZXR1cm4gZnVuY3Rpb24ocixlKXtpZihudWxsPT1yKXJldHVybiByO2lmKCFzdShyKSlyZXR1cm4gbihyLGUpO2Zvcih2YXIgdT1yLmxlbmd0aCxpPXQ/dTotMSxvPVF1KHIpOyh0P2ktLTorK2k8dSkmJmZhbHNlIT09ZShvW2ldLGksbyk7KTtyZXR1cm4gcn19ZnVuY3Rpb24gTnIobil7cmV0dXJuIGZ1bmN0aW9uKHQscixlKXsKdmFyIHU9LTEsaT1RdSh0KTtlPWUodCk7Zm9yKHZhciBvPWUubGVuZ3RoO28tLTspe3ZhciBmPWVbbj9vOisrdV07aWYoZmFsc2U9PT1yKGlbZl0sZixpKSlicmVha31yZXR1cm4gdH19ZnVuY3Rpb24gUHIobix0LHIpe2Z1bmN0aW9uIGUoKXtyZXR1cm4odGhpcyYmdGhpcyE9PSRuJiZ0aGlzIGluc3RhbmNlb2YgZT9pOm4pLmFwcGx5KHU/cjp0aGlzLGFyZ3VtZW50cyl9dmFyIHU9MSZ0LGk9VnIobik7cmV0dXJuIGV9ZnVuY3Rpb24gWnIobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3Q9SXUodCk7dmFyIHI9Um4udGVzdCh0KT9NKHQpOlQsZT1yP3JbMF06dC5jaGFyQXQoMCk7cmV0dXJuIHQ9cj9PcihyLDEpLmpvaW4oIiIpOnQuc2xpY2UoMSksZVtuXSgpK3R9fWZ1bmN0aW9uIHFyKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbChNdShEdSh0KS5yZXBsYWNlKGtuLCIiKSksbiwiIil9fWZ1bmN0aW9uIFZyKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cztzd2l0Y2godC5sZW5ndGgpewpjYXNlIDA6cmV0dXJuIG5ldyBuO2Nhc2UgMTpyZXR1cm4gbmV3IG4odFswXSk7Y2FzZSAyOnJldHVybiBuZXcgbih0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IG4odFswXSx0WzFdLHRbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IG4odFswXSx0WzFdLHRbMl0sdFszXSk7Y2FzZSA1OnJldHVybiBuZXcgbih0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0pO2Nhc2UgNjpyZXR1cm4gbmV3IG4odFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0pO2Nhc2UgNzpyZXR1cm4gbmV3IG4odFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0sdFs2XSl9dmFyIHI9ZW8obi5wcm90b3R5cGUpLHQ9bi5hcHBseShyLHQpO3JldHVybiBkdSh0KT90OnJ9fWZ1bmN0aW9uIEtyKHQscixlKXtmdW5jdGlvbiB1KCl7Zm9yKHZhciBvPWFyZ3VtZW50cy5sZW5ndGgsZj1LdShvKSxjPW8sYT1kZSh1KTtjLS07KWZbY109YXJndW1lbnRzW2NdO3JldHVybiBjPTM+byYmZlswXSE9PWEmJmZbby0xXSE9PWE/W106TChmLGEpLApvLT1jLmxlbmd0aCxvPGU/dWUodCxyLEpyLHUucGxhY2Vob2xkZXIsVCxmLGMsVCxULGUtbyk6bih0aGlzJiZ0aGlzIT09JG4mJnRoaXMgaW5zdGFuY2VvZiB1P2k6dCx0aGlzLGYpfXZhciBpPVZyKHQpO3JldHVybiB1fWZ1bmN0aW9uIEdyKG4pe3JldHVybiBmdW5jdGlvbih0LHIsZSl7dmFyIHU9UXUodCk7aWYoIXN1KHQpKXt2YXIgaT15ZShyLDMpO3Q9V3UodCkscj1mdW5jdGlvbihuKXtyZXR1cm4gaSh1W25dLG4sdSl9fXJldHVybiByPW4odCxyLGUpLC0xPHI/dVtpP3Rbcl06cl06VH19ZnVuY3Rpb24gSHIobil7cmV0dXJuIHBlKGZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLGU9cix1PU9uLnByb3RvdHlwZS50aHJ1O2ZvcihuJiZ0LnJldmVyc2UoKTtlLS07KXt2YXIgaT10W2VdO2lmKHR5cGVvZiBpIT0iZnVuY3Rpb24iKXRocm93IG5ldyB0aSgiRXhwZWN0ZWQgYSBmdW5jdGlvbiIpO2lmKHUmJiFvJiYid3JhcHBlciI9PWdlKGkpKXZhciBvPW5ldyBPbihbXSx0cnVlKX1mb3IoZT1vP2U6cjsrK2U8cjspdmFyIGk9dFtlXSx1PWdlKGkpLGY9IndyYXBwZXIiPT11P2hvKGkpOlQsbz1mJiZSZShmWzBdKSYmNDI0PT1mWzFdJiYhZls0XS5sZW5ndGgmJjE9PWZbOV0/b1tnZShmWzBdKV0uYXBwbHkobyxmWzNdKToxPT1pLmxlbmd0aCYmUmUoaSk/b1t1XSgpOm8udGhydShpKTsKcmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLGU9blswXTtpZihvJiYxPT1uLmxlbmd0aCYmZmYoZSkpcmV0dXJuIG8ucGxhbnQoZSkudmFsdWUoKTtmb3IodmFyIHU9MCxuPXI/dFt1XS5hcHBseSh0aGlzLG4pOmU7Kyt1PHI7KW49dFt1XS5jYWxsKHRoaXMsbik7cmV0dXJuIG59fSl9ZnVuY3Rpb24gSnIobix0LHIsZSx1LGksbyxmLGMsYSl7ZnVuY3Rpb24gbCgpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLHk9S3UoZCksYj1kO2ItLTspeVtiXT1hcmd1bWVudHNbYl07aWYoXyl7dmFyIHgsaj1kZShsKSxiPXkubGVuZ3RoO2Zvcih4PTA7Yi0tOyl5W2JdPT09aiYmKyt4fWlmKGUmJih5PUJyKHksZSx1LF8pKSxpJiYoeT1Mcih5LGksbyxfKSksZC09eCxfJiZkPGEpcmV0dXJuIGo9TCh5LGopLHVlKG4sdCxKcixsLnBsYWNlaG9sZGVyLHIseSxqLGYsYyxhLWQpO2lmKGo9aD9yOnRoaXMsYj1wP2pbbl06bixkPXkubGVuZ3RoLGYpe3g9eS5sZW5ndGg7Zm9yKHZhciB3PUNpKGYubGVuZ3RoLHgpLG09VXIoeSk7dy0tOyl7CnZhciBBPWZbd107eVt3XT1TZShBLHgpP21bQV06VH19ZWxzZSB2JiYxPGQmJnkucmV2ZXJzZSgpO3JldHVybiBzJiZjPGQmJih5Lmxlbmd0aD1jKSx0aGlzJiZ0aGlzIT09JG4mJnRoaXMgaW5zdGFuY2VvZiBsJiYoYj1nfHxWcihiKSksYi5hcHBseShqLHkpfXZhciBzPTEyOCZ0LGg9MSZ0LHA9MiZ0LF89MjQmdCx2PTUxMiZ0LGc9cD9UOlZyKG4pO3JldHVybiBsfWZ1bmN0aW9uIFlyKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKHIsZSl7cmV0dXJuIEJ0KHIsbix0KGUpKX19ZnVuY3Rpb24gUXIobix0KXtyZXR1cm4gZnVuY3Rpb24ocixlKXt2YXIgdTtpZihyPT09VCYmZT09PVQpcmV0dXJuIHQ7aWYociE9PVQmJih1PXIpLGUhPT1UKXtpZih1PT09VClyZXR1cm4gZTt0eXBlb2Ygcj09InN0cmluZyJ8fHR5cGVvZiBlPT0ic3RyaW5nIj8ocj15cihyKSxlPXlyKGUpKToocj1kcihyKSxlPWRyKGUpKSx1PW4ocixlKX1yZXR1cm4gdX19ZnVuY3Rpb24gWHIodCl7cmV0dXJuIHBlKGZ1bmN0aW9uKHIpewpyZXR1cm4gcj1jKHIsayh5ZSgpKSksZnIoZnVuY3Rpb24oZSl7dmFyIHU9dGhpcztyZXR1cm4gdChyLGZ1bmN0aW9uKHQpe3JldHVybiBuKHQsdSxlKX0pfSl9KX1mdW5jdGlvbiBuZShuLHQpe3Q9dD09PVQ/IiAiOnlyKHQpO3ZhciByPXQubGVuZ3RoO3JldHVybiAyPnI/cj9vcih0LG4pOnQ6KHI9b3IodCxPaShuL0QodCkpKSxSbi50ZXN0KHQpP09yKE0ociksMCxuKS5qb2luKCIiKTpyLnNsaWNlKDAsbikpfWZ1bmN0aW9uIHRlKHQscixlLHUpe2Z1bmN0aW9uIGkoKXtmb3IodmFyIHI9LTEsYz1hcmd1bWVudHMubGVuZ3RoLGE9LTEsbD11Lmxlbmd0aCxzPUt1KGwrYyksaD10aGlzJiZ0aGlzIT09JG4mJnRoaXMgaW5zdGFuY2VvZiBpP2Y6dDsrK2E8bDspc1thXT11W2FdO2Zvcig7Yy0tOylzW2ErK109YXJndW1lbnRzWysrcl07cmV0dXJuIG4oaCxvP2U6dGhpcyxzKX12YXIgbz0xJnIsZj1Wcih0KTtyZXR1cm4gaX1mdW5jdGlvbiByZShuKXtyZXR1cm4gZnVuY3Rpb24odCxyLGUpewplJiZ0eXBlb2YgZSE9Im51bWJlciImJk9lKHQscixlKSYmKHI9ZT1UKSx0PUF1KHQpLHI9PT1UPyhyPXQsdD0wKTpyPUF1KHIpLGU9ZT09PVQ/dDxyPzE6LTE6QXUoZSk7dmFyIHU9LTE7cj1VaShPaSgoci10KS8oZXx8MSkpLDApO2Zvcih2YXIgaT1LdShyKTtyLS07KWlbbj9yOisrdV09dCx0Kz1lO3JldHVybiBpfX1mdW5jdGlvbiBlZShuKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciJiZ0eXBlb2Ygcj09InN0cmluZyJ8fCh0PVN1KHQpLHI9U3UocikpLG4odCxyKX19ZnVuY3Rpb24gdWUobix0LHIsZSx1LGksbyxmLGMsYSl7dmFyIGw9OCZ0LHM9bD9vOlQ7bz1sP1Q6bzt2YXIgaD1sP2k6VDtyZXR1cm4gaT1sP1Q6aSx0PSh0fChsPzMyOjY0KSkmfihsPzY0OjMyKSw0JnR8fCh0Jj0tNCksdT1bbix0LHUsaCxzLGksbyxmLGMsYV0scj1yLmFwcGx5KFQsdSksUmUobikmJnlvKHIsdSksci5wbGFjZWhvbGRlcj1lLFVlKHIsbix0KX1mdW5jdGlvbiBpZShuKXsKdmFyIHQ9WXVbbl07cmV0dXJuIGZ1bmN0aW9uKG4scil7aWYobj1TdShuKSwocj1udWxsPT1yPzA6Q2koRXUociksMjkyKSkmJldpKG4pKXt2YXIgZT0oSXUobikrImUiKS5zcGxpdCgiZSIpLGU9dChlWzBdKyJlIisoK2VbMV0rcikpLGU9KEl1KGUpKyJlIikuc3BsaXQoImUiKTtyZXR1cm4rKGVbMF0rImUiKygrZVsxXS1yKSl9cmV0dXJuIHQobil9fWZ1bmN0aW9uIG9lKG4pe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj12byh0KTtyZXR1cm4iW29iamVjdCBNYXBdIj09cj9XKHQpOiJbb2JqZWN0IFNldF0iPT1yP0ModCk6RSh0LG4odCkpfX1mdW5jdGlvbiBmZShuLHQscixlLHUsaSxvLGYpe3ZhciBjPTImdDtpZighYyYmdHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IHRpKCJFeHBlY3RlZCBhIGZ1bmN0aW9uIik7dmFyIGE9ZT9lLmxlbmd0aDowO2lmKGF8fCh0Jj0tOTcsZT11PVQpLG89bz09PVQ/bzpVaShFdShvKSwwKSxmPWY9PT1UP2Y6RXUoZiksYS09dT91Lmxlbmd0aDowLAo2NCZ0KXt2YXIgbD1lLHM9dTtlPXU9VH12YXIgaD1jP1Q6aG8obik7cmV0dXJuIGk9W24sdCxyLGUsdSxsLHMsaSxvLGZdLGgmJihyPWlbMV0sbj1oWzFdLHQ9cnxuLGU9MTI4PT1uJiY4PT1yfHwxMjg9PW4mJjI1Nj09ciYmaVs3XS5sZW5ndGg8PWhbOF18fDM4ND09biYmaFs3XS5sZW5ndGg8PWhbOF0mJjg9PXIsMTMxPnR8fGUpJiYoMSZuJiYoaVsyXT1oWzJdLHR8PTEmcj8wOjQpLChyPWhbM10pJiYoZT1pWzNdLGlbM109ZT9CcihlLHIsaFs0XSk6cixpWzRdPWU/TChpWzNdLCJfX2xvZGFzaF9wbGFjZWhvbGRlcl9fIik6aFs0XSksKHI9aFs1XSkmJihlPWlbNV0saVs1XT1lP0xyKGUscixoWzZdKTpyLGlbNl09ZT9MKGlbNV0sIl9fbG9kYXNoX3BsYWNlaG9sZGVyX18iKTpoWzZdKSwocj1oWzddKSYmKGlbN109ciksMTI4Jm4mJihpWzhdPW51bGw9PWlbOF0/aFs4XTpDaShpWzhdLGhbOF0pKSxudWxsPT1pWzldJiYoaVs5XT1oWzldKSxpWzBdPWhbMF0saVsxXT10KSxuPWlbMF0sCnQ9aVsxXSxyPWlbMl0sZT1pWzNdLHU9aVs0XSxmPWlbOV09aVs5XT09PVQ/Yz8wOm4ubGVuZ3RoOlVpKGlbOV0tYSwwKSwhZiYmMjQmdCYmKHQmPS0yNSksVWUoKGg/Y286eW8pKHQmJjEhPXQ/OD09dHx8MTY9PXQ/S3Iobix0LGYpOjMyIT10JiYzMyE9dHx8dS5sZW5ndGg/SnIuYXBwbHkoVCxpKTp0ZShuLHQscixlKTpQcihuLHQsciksaSksbix0KX1mdW5jdGlvbiBjZShuLHQscixlKXtyZXR1cm4gbj09PVR8fGx1KG4sZWlbcl0pJiYhb2kuY2FsbChlLHIpP3Q6bn1mdW5jdGlvbiBhZShuLHQscixlLHUsaSl7cmV0dXJuIGR1KG4pJiZkdSh0KSYmKGkuc2V0KHQsbiksWXQobix0LFQsYWUsaSksaS5kZWxldGUodCkpLG59ZnVuY3Rpb24gbGUobil7cmV0dXJuIHh1KG4pP1Q6bn1mdW5jdGlvbiBzZShuLHQscixlLHUsaSl7dmFyIG89MSZyLGY9bi5sZW5ndGgsYz10Lmxlbmd0aDtpZihmIT1jJiYhKG8mJmM+ZikpcmV0dXJuIGZhbHNlO2lmKChjPWkuZ2V0KG4pKSYmaS5nZXQodCkpcmV0dXJuIGM9PXQ7CnZhciBjPS0xLGE9dHJ1ZSxsPTImcj9uZXcgTm46VDtmb3IoaS5zZXQobix0KSxpLnNldCh0LG4pOysrYzxmOyl7dmFyIHM9bltjXSxwPXRbY107aWYoZSl2YXIgXz1vP2UocCxzLGMsdCxuLGkpOmUocyxwLGMsbix0LGkpO2lmKF8hPT1UKXtpZihfKWNvbnRpbnVlO2E9ZmFsc2U7YnJlYWt9aWYobCl7aWYoIWgodCxmdW5jdGlvbihuLHQpe2lmKCFPKGwsdCkmJihzPT09bnx8dShzLG4scixlLGkpKSlyZXR1cm4gbC5wdXNoKHQpfSkpe2E9ZmFsc2U7YnJlYWt9fWVsc2UgaWYocyE9PXAmJiF1KHMscCxyLGUsaSkpe2E9ZmFsc2U7YnJlYWt9fXJldHVybiBpLmRlbGV0ZShuKSxpLmRlbGV0ZSh0KSxhfWZ1bmN0aW9uIGhlKG4sdCxyLGUsdSxpLG8pe3N3aXRjaChyKXtjYXNlIltvYmplY3QgRGF0YVZpZXddIjppZihuLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8bi5ieXRlT2Zmc2V0IT10LmJ5dGVPZmZzZXQpYnJlYWs7bj1uLmJ1ZmZlcix0PXQuYnVmZmVyO2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOgppZihuLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IWkobmV3IHZpKG4pLG5ldyB2aSh0KSkpYnJlYWs7cmV0dXJuIHRydWU7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOmNhc2UiW29iamVjdCBOdW1iZXJdIjpyZXR1cm4gbHUoK24sK3QpO2Nhc2UiW29iamVjdCBFcnJvcl0iOnJldHVybiBuLm5hbWU9PXQubmFtZSYmbi5tZXNzYWdlPT10Lm1lc3NhZ2U7Y2FzZSJbb2JqZWN0IFJlZ0V4cF0iOmNhc2UiW29iamVjdCBTdHJpbmddIjpyZXR1cm4gbj09dCsiIjtjYXNlIltvYmplY3QgTWFwXSI6dmFyIGY9VztjYXNlIltvYmplY3QgU2V0XSI6aWYoZnx8KGY9VSksbi5zaXplIT10LnNpemUmJiEoMSZlKSlicmVhaztyZXR1cm4ocj1vLmdldChuKSk/cj09dDooZXw9MixvLnNldChuLHQpLHQ9c2UoZihuKSxmKHQpLGUsdSxpLG8pLG8uZGVsZXRlKG4pLHQpO2Nhc2UiW29iamVjdCBTeW1ib2xdIjppZih0bylyZXR1cm4gdG8uY2FsbChuKT09dG8uY2FsbCh0KX0KcmV0dXJuIGZhbHNlfWZ1bmN0aW9uIHBlKG4pe3JldHVybiB4byhCZShuLFQsWmUpLG4rIiIpfWZ1bmN0aW9uIF9lKG4pe3JldHVybiBTdChuLFd1LHBvKX1mdW5jdGlvbiB2ZShuKXtyZXR1cm4gU3QobixCdSxfbyl9ZnVuY3Rpb24gZ2Uobil7Zm9yKHZhciB0PW4ubmFtZSsiIixyPUdpW3RdLGU9b2kuY2FsbChHaSx0KT9yLmxlbmd0aDowO2UtLTspe3ZhciB1PXJbZV0saT11LmZ1bmM7aWYobnVsbD09aXx8aT09bilyZXR1cm4gdS5uYW1lfXJldHVybiB0fWZ1bmN0aW9uIGRlKG4pe3JldHVybihvaS5jYWxsKEFuLCJwbGFjZWhvbGRlciIpP0FuOm4pLnBsYWNlaG9sZGVyfWZ1bmN0aW9uIHllKCl7dmFyIG49QW4uaXRlcmF0ZWV8fEZ1LG49bj09PUZ1P3F0Om47cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdKTpufWZ1bmN0aW9uIGJlKG4sdCl7dmFyIHI9bi5fX2RhdGFfXyxlPXR5cGVvZiB0O3JldHVybigic3RyaW5nIj09ZXx8Im51bWJlciI9PWV8fCJzeW1ib2wiPT1lfHwiYm9vbGVhbiI9PWU/Il9fcHJvdG9fXyIhPT10Om51bGw9PT10KT9yW3R5cGVvZiB0PT0ic3RyaW5nIj8ic3RyaW5nIjoiaGFzaCJdOnIubWFwOwp9ZnVuY3Rpb24geGUobil7Zm9yKHZhciB0PVd1KG4pLHI9dC5sZW5ndGg7ci0tOyl7dmFyIGU9dFtyXSx1PW5bZV07dFtyXT1bZSx1LHU9PT11JiYhZHUodSldfXJldHVybiB0fWZ1bmN0aW9uIGplKG4sdCl7dmFyIHI9bnVsbD09bj9UOm5bdF07cmV0dXJuIEZ0KHIpP3I6VH1mdW5jdGlvbiB3ZShuLHQscil7dD1Tcih0LG4pO2Zvcih2YXIgZT0tMSx1PXQubGVuZ3RoLGk9ZmFsc2U7KytlPHU7KXt2YXIgbz1NZSh0W2VdKTtpZighKGk9bnVsbCE9biYmcihuLG8pKSlicmVhaztuPW5bb119cmV0dXJuIGl8fCsrZSE9dT9pOih1PW51bGw9PW4/MDpuLmxlbmd0aCwhIXUmJmd1KHUpJiZTZShvLHUpJiYoZmYobil8fG9mKG4pKSl9ZnVuY3Rpb24gbWUobil7dmFyIHQ9bi5sZW5ndGgscj1uZXcgbi5jb25zdHJ1Y3Rvcih0KTtyZXR1cm4gdCYmInN0cmluZyI9PXR5cGVvZiBuWzBdJiZvaS5jYWxsKG4sImluZGV4IikmJihyLmluZGV4PW4uaW5kZXgsci5pbnB1dD1uLmlucHV0KSxyfWZ1bmN0aW9uIEFlKG4pewpyZXR1cm4gdHlwZW9mIG4uY29uc3RydWN0b3IhPSJmdW5jdGlvbiJ8fHplKG4pP3t9OmVvKGRpKG4pKX1mdW5jdGlvbiBFZShuLHQscil7dmFyIGU9bi5jb25zdHJ1Y3Rvcjtzd2l0Y2godCl7Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6cmV0dXJuIFJyKG4pO2Nhc2UiW29iamVjdCBCb29sZWFuXSI6Y2FzZSJbb2JqZWN0IERhdGVdIjpyZXR1cm4gbmV3IGUoK24pO2Nhc2UiW29iamVjdCBEYXRhVmlld10iOnJldHVybiB0PXI/UnIobi5idWZmZXIpOm4uYnVmZmVyLG5ldyBuLmNvbnN0cnVjdG9yKHQsbi5ieXRlT2Zmc2V0LG4uYnl0ZUxlbmd0aCk7Y2FzZSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iOmNhc2UiW29iamVjdCBGbG9hdDY0QXJyYXldIjpjYXNlIltvYmplY3QgSW50OEFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDE2QXJyYXldIjpjYXNlIltvYmplY3QgSW50MzJBcnJheV0iOmNhc2UiW29iamVjdCBVaW50OEFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI6CmNhc2UiW29iamVjdCBVaW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MzJBcnJheV0iOnJldHVybiB6cihuLHIpO2Nhc2UiW29iamVjdCBNYXBdIjpyZXR1cm4gbmV3IGU7Y2FzZSJbb2JqZWN0IE51bWJlcl0iOmNhc2UiW29iamVjdCBTdHJpbmddIjpyZXR1cm4gbmV3IGUobik7Y2FzZSJbb2JqZWN0IFJlZ0V4cF0iOnJldHVybiB0PW5ldyBuLmNvbnN0cnVjdG9yKG4uc291cmNlLF9uLmV4ZWMobikpLHQubGFzdEluZGV4PW4ubGFzdEluZGV4LHQ7Y2FzZSJbb2JqZWN0IFNldF0iOnJldHVybiBuZXcgZTtjYXNlIltvYmplY3QgU3ltYm9sXSI6cmV0dXJuIHRvP1F1KHRvLmNhbGwobikpOnt9fX1mdW5jdGlvbiBrZShuKXtyZXR1cm4gZmYobil8fG9mKG4pfHwhIShqaSYmbiYmbltqaV0pfWZ1bmN0aW9uIFNlKG4sdCl7dmFyIHI9dHlwZW9mIG47cmV0dXJuIHQ9bnVsbD09dD85MDA3MTk5MjU0NzQwOTkxOnQsISF0JiYoIm51bWJlciI9PXJ8fCJzeW1ib2wiIT1yJiZibi50ZXN0KG4pKSYmLTE8biYmMD09biUxJiZuPHQ7Cn1mdW5jdGlvbiBPZShuLHQscil7aWYoIWR1KHIpKXJldHVybiBmYWxzZTt2YXIgZT10eXBlb2YgdDtyZXR1cm4hISgibnVtYmVyIj09ZT9zdShyKSYmU2UodCxyLmxlbmd0aCk6InN0cmluZyI9PWUmJnQgaW4gcikmJmx1KHJbdF0sbil9ZnVuY3Rpb24gSWUobix0KXtpZihmZihuKSlyZXR1cm4gZmFsc2U7dmFyIHI9dHlwZW9mIG47cmV0dXJuISgibnVtYmVyIiE9ciYmInN5bWJvbCIhPXImJiJib29sZWFuIiE9ciYmbnVsbCE9biYmIXd1KG4pKXx8KG5uLnRlc3Qobil8fCFYLnRlc3Qobil8fG51bGwhPXQmJm4gaW4gUXUodCkpfWZ1bmN0aW9uIFJlKG4pe3ZhciB0PWdlKG4pLHI9QW5bdF07cmV0dXJuIHR5cGVvZiByPT0iZnVuY3Rpb24iJiZ0IGluIFVuLnByb3RvdHlwZSYmKG49PT1yfHwodD1obyhyKSwhIXQmJm49PT10WzBdKSl9ZnVuY3Rpb24gemUobil7dmFyIHQ9biYmbi5jb25zdHJ1Y3RvcjtyZXR1cm4gbj09PSh0eXBlb2YgdD09ImZ1bmN0aW9uIiYmdC5wcm90b3R5cGV8fGVpKX1mdW5jdGlvbiBXZShuLHQpewpyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIG51bGwhPXImJihyW25dPT09dCYmKHQhPT1UfHxuIGluIFF1KHIpKSl9fWZ1bmN0aW9uIEJlKHQscixlKXtyZXR1cm4gcj1VaShyPT09VD90Lmxlbmd0aC0xOnIsMCksZnVuY3Rpb24oKXtmb3IodmFyIHU9YXJndW1lbnRzLGk9LTEsbz1VaSh1Lmxlbmd0aC1yLDApLGY9S3Uobyk7KytpPG87KWZbaV09dVtyK2ldO2ZvcihpPS0xLG89S3UocisxKTsrK2k8cjspb1tpXT11W2ldO3JldHVybiBvW3JdPWUoZiksbih0LHRoaXMsbyl9fWZ1bmN0aW9uIExlKG4sdCl7aWYoKCJjb25zdHJ1Y3RvciIhPT10fHwiZnVuY3Rpb24iIT10eXBlb2Ygblt0XSkmJiJfX3Byb3RvX18iIT10KXJldHVybiBuW3RdfWZ1bmN0aW9uIFVlKG4sdCxyKXt2YXIgZT10KyIiO3Q9eG87dmFyIHUsaT0kZTtyZXR1cm4gdT0odT1lLm1hdGNoKGFuKSk/dVsxXS5zcGxpdChsbik6W10scj1pKHUsciksKGk9ci5sZW5ndGgpJiYodT1pLTEsclt1XT0oMTxpPyImICI6IiIpK3JbdV0sCnI9ci5qb2luKDI8aT8iLCAiOiIgIiksZT1lLnJlcGxhY2UoY24sIntcbi8qIFt3cmFwcGVkIHdpdGggIityKyJdICovXG4iKSksdChuLGUpfWZ1bmN0aW9uIENlKG4pe3ZhciB0PTAscj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBlPURpKCksdT0xNi0oZS1yKTtpZihyPWUsMDx1KXtpZig4MDA8PSsrdClyZXR1cm4gYXJndW1lbnRzWzBdfWVsc2UgdD0wO3JldHVybiBuLmFwcGx5KFQsYXJndW1lbnRzKX19ZnVuY3Rpb24gRGUobix0KXt2YXIgcj0tMSxlPW4ubGVuZ3RoLHU9ZS0xO2Zvcih0PXQ9PT1UP2U6dDsrK3I8dDspe3ZhciBlPWlyKHIsdSksaT1uW2VdO25bZV09bltyXSxuW3JdPWl9cmV0dXJuIG4ubGVuZ3RoPXQsbn1mdW5jdGlvbiBNZShuKXtpZih0eXBlb2Ygbj09InN0cmluZyJ8fHd1KG4pKXJldHVybiBuO3ZhciB0PW4rIiI7cmV0dXJuIjAiPT10JiYxL249PS0kPyItMCI6dH1mdW5jdGlvbiBUZShuKXtpZihudWxsIT1uKXt0cnl7cmV0dXJuIGlpLmNhbGwobil9Y2F0Y2gobil7fQpyZXR1cm4gbisiIn1yZXR1cm4iIn1mdW5jdGlvbiAkZShuLHQpe3JldHVybiByKE4sZnVuY3Rpb24ocil7dmFyIGU9Il8uIityWzBdO3QmclsxXSYmIW8obixlKSYmbi5wdXNoKGUpfSksbi5zb3J0KCl9ZnVuY3Rpb24gRmUobil7aWYobiBpbnN0YW5jZW9mIFVuKXJldHVybiBuLmNsb25lKCk7dmFyIHQ9bmV3IE9uKG4uX193cmFwcGVkX18sbi5fX2NoYWluX18pO3JldHVybiB0Ll9fYWN0aW9uc19fPVVyKG4uX19hY3Rpb25zX18pLHQuX19pbmRleF9fPW4uX19pbmRleF9fLHQuX192YWx1ZXNfXz1uLl9fdmFsdWVzX18sdH1mdW5jdGlvbiBOZShuLHQscil7dmFyIGU9bnVsbD09bj8wOm4ubGVuZ3RoO3JldHVybiBlPyhyPW51bGw9PXI/MDpFdShyKSwwPnImJihyPVVpKGUrciwwKSksXyhuLHllKHQsMykscikpOi0xfWZ1bmN0aW9uIFBlKG4sdCxyKXt2YXIgZT1udWxsPT1uPzA6bi5sZW5ndGg7aWYoIWUpcmV0dXJuLTE7dmFyIHU9ZS0xO3JldHVybiByIT09VCYmKHU9RXUociksdT0wPnI/VWkoZSt1LDApOkNpKHUsZS0xKSksCl8obix5ZSh0LDMpLHUsdHJ1ZSl9ZnVuY3Rpb24gWmUobil7cmV0dXJuKG51bGw9PW4/MDpuLmxlbmd0aCk/d3QobiwxKTpbXX1mdW5jdGlvbiBxZShuKXtyZXR1cm4gbiYmbi5sZW5ndGg/blswXTpUfWZ1bmN0aW9uIFZlKG4pe3ZhciB0PW51bGw9PW4/MDpuLmxlbmd0aDtyZXR1cm4gdD9uW3QtMV06VH1mdW5jdGlvbiBLZShuLHQpe3JldHVybiBuJiZuLmxlbmd0aCYmdCYmdC5sZW5ndGg/ZXIobix0KTpufWZ1bmN0aW9uIEdlKG4pe3JldHVybiBudWxsPT1uP246JGkuY2FsbChuKX1mdW5jdGlvbiBIZShuKXtpZighbnx8IW4ubGVuZ3RoKXJldHVybltdO3ZhciB0PTA7cmV0dXJuIG49aShuLGZ1bmN0aW9uKG4pe2lmKGh1KG4pKXJldHVybiB0PVVpKG4ubGVuZ3RoLHQpLHRydWV9KSxBKHQsZnVuY3Rpb24odCl7cmV0dXJuIGMobixiKHQpKX0pfWZ1bmN0aW9uIEplKHQscil7aWYoIXR8fCF0Lmxlbmd0aClyZXR1cm5bXTt2YXIgZT1IZSh0KTtyZXR1cm4gbnVsbD09cj9lOmMoZSxmdW5jdGlvbih0KXsKcmV0dXJuIG4ocixULHQpfSl9ZnVuY3Rpb24gWWUobil7cmV0dXJuIG49QW4obiksbi5fX2NoYWluX189dHJ1ZSxufWZ1bmN0aW9uIFFlKG4sdCl7cmV0dXJuIHQobil9ZnVuY3Rpb24gWGUoKXtyZXR1cm4gdGhpc31mdW5jdGlvbiBudShuLHQpe3JldHVybihmZihuKT9yOnVvKShuLHllKHQsMykpfWZ1bmN0aW9uIHR1KG4sdCl7cmV0dXJuKGZmKG4pP2U6aW8pKG4seWUodCwzKSl9ZnVuY3Rpb24gcnUobix0KXtyZXR1cm4oZmYobik/YzpHdCkobix5ZSh0LDMpKX1mdW5jdGlvbiBldShuLHQscil7cmV0dXJuIHQ9cj9UOnQsdD1uJiZudWxsPT10P24ubGVuZ3RoOnQsZmUobiwxMjgsVCxULFQsVCx0KX1mdW5jdGlvbiB1dShuLHQpe3ZhciByO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyB0aSgiRXhwZWN0ZWQgYSBmdW5jdGlvbiIpO3JldHVybiBuPUV1KG4pLGZ1bmN0aW9uKCl7cmV0dXJuIDA8LS1uJiYocj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksMT49biYmKHQ9VCksCnJ9fWZ1bmN0aW9uIGl1KG4sdCxyKXtyZXR1cm4gdD1yP1Q6dCxuPWZlKG4sOCxULFQsVCxULFQsdCksbi5wbGFjZWhvbGRlcj1pdS5wbGFjZWhvbGRlcixufWZ1bmN0aW9uIG91KG4sdCxyKXtyZXR1cm4gdD1yP1Q6dCxuPWZlKG4sMTYsVCxULFQsVCxULHQpLG4ucGxhY2Vob2xkZXI9b3UucGxhY2Vob2xkZXIsbn1mdW5jdGlvbiBmdShuLHQscil7ZnVuY3Rpb24gZSh0KXt2YXIgcj1jLGU9YTtyZXR1cm4gYz1hPVQsXz10LHM9bi5hcHBseShlLHIpfWZ1bmN0aW9uIHUobil7dmFyIHI9bi1wO3JldHVybiBuLT1fLHA9PT1UfHxyPj10fHwwPnJ8fGcmJm4+PWx9ZnVuY3Rpb24gaSgpe3ZhciBuPUdvKCk7aWYodShuKSlyZXR1cm4gbyhuKTt2YXIgcixlPWJvO3I9bi1fLG49dC0obi1wKSxyPWc/Q2kobixsLXIpOm4saD1lKGkscil9ZnVuY3Rpb24gbyhuKXtyZXR1cm4gaD1ULGQmJmM/ZShuKTooYz1hPVQscyl9ZnVuY3Rpb24gZigpe3ZhciBuPUdvKCkscj11KG4pO2lmKGM9YXJndW1lbnRzLAphPXRoaXMscD1uLHIpe2lmKGg9PT1UKXJldHVybiBfPW49cCxoPWJvKGksdCksdj9lKG4pOnM7aWYoZylyZXR1cm4gbG8oaCksaD1ibyhpLHQpLGUocCl9cmV0dXJuIGg9PT1UJiYoaD1ibyhpLHQpKSxzfXZhciBjLGEsbCxzLGgscCxfPTAsdj1mYWxzZSxnPWZhbHNlLGQ9dHJ1ZTtpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgdGkoIkV4cGVjdGVkIGEgZnVuY3Rpb24iKTtyZXR1cm4gdD1TdSh0KXx8MCxkdShyKSYmKHY9ISFyLmxlYWRpbmcsbD0oZz0ibWF4V2FpdCJpbiByKT9VaShTdShyLm1heFdhaXQpfHwwLHQpOmwsZD0idHJhaWxpbmciaW4gcj8hIXIudHJhaWxpbmc6ZCksZi5jYW5jZWw9ZnVuY3Rpb24oKXtoIT09VCYmbG8oaCksXz0wLGM9cD1hPWg9VH0sZi5mbHVzaD1mdW5jdGlvbigpe3JldHVybiBoPT09VD9zOm8oR28oKSl9LGZ9ZnVuY3Rpb24gY3Uobix0KXtmdW5jdGlvbiByKCl7dmFyIGU9YXJndW1lbnRzLHU9dD90LmFwcGx5KHRoaXMsZSk6ZVswXSxpPXIuY2FjaGU7CnJldHVybiBpLmhhcyh1KT9pLmdldCh1KTooZT1uLmFwcGx5KHRoaXMsZSksci5jYWNoZT1pLnNldCh1LGUpfHxpLGUpfWlmKHR5cGVvZiBuIT0iZnVuY3Rpb24ifHxudWxsIT10JiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgdGkoIkV4cGVjdGVkIGEgZnVuY3Rpb24iKTtyZXR1cm4gci5jYWNoZT1uZXcoY3UuQ2FjaGV8fEZuKSxyfWZ1bmN0aW9uIGF1KG4pe2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyB0aSgiRXhwZWN0ZWQgYSBmdW5jdGlvbiIpO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cztzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4hbi5jYWxsKHRoaXMpO2Nhc2UgMTpyZXR1cm4hbi5jYWxsKHRoaXMsdFswXSk7Y2FzZSAyOnJldHVybiFuLmNhbGwodGhpcyx0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4hbi5jYWxsKHRoaXMsdFswXSx0WzFdLHRbMl0pfXJldHVybiFuLmFwcGx5KHRoaXMsdCl9fWZ1bmN0aW9uIGx1KG4sdCl7cmV0dXJuIG49PT10fHxuIT09biYmdCE9PXQ7Cn1mdW5jdGlvbiBzdShuKXtyZXR1cm4gbnVsbCE9biYmZ3Uobi5sZW5ndGgpJiYhX3Uobil9ZnVuY3Rpb24gaHUobil7cmV0dXJuIHl1KG4pJiZzdShuKX1mdW5jdGlvbiBwdShuKXtpZigheXUobikpcmV0dXJuIGZhbHNlO3ZhciB0PU90KG4pO3JldHVybiJbb2JqZWN0IEVycm9yXSI9PXR8fCJbb2JqZWN0IERPTUV4Y2VwdGlvbl0iPT10fHx0eXBlb2Ygbi5tZXNzYWdlPT0ic3RyaW5nIiYmdHlwZW9mIG4ubmFtZT09InN0cmluZyImJiF4dShuKX1mdW5jdGlvbiBfdShuKXtyZXR1cm4hIWR1KG4pJiYobj1PdChuKSwiW29iamVjdCBGdW5jdGlvbl0iPT1ufHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1ufHwiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PW58fCJbb2JqZWN0IFByb3h5XSI9PW4pfWZ1bmN0aW9uIHZ1KG4pe3JldHVybiB0eXBlb2Ygbj09Im51bWJlciImJm49PUV1KG4pfWZ1bmN0aW9uIGd1KG4pe3JldHVybiB0eXBlb2Ygbj09Im51bWJlciImJi0xPG4mJjA9PW4lMSYmOTAwNzE5OTI1NDc0MDk5MT49bjsKfWZ1bmN0aW9uIGR1KG4pe3ZhciB0PXR5cGVvZiBuO3JldHVybiBudWxsIT1uJiYoIm9iamVjdCI9PXR8fCJmdW5jdGlvbiI9PXQpfWZ1bmN0aW9uIHl1KG4pe3JldHVybiBudWxsIT1uJiZ0eXBlb2Ygbj09Im9iamVjdCJ9ZnVuY3Rpb24gYnUobil7cmV0dXJuIHR5cGVvZiBuPT0ibnVtYmVyInx8eXUobikmJiJbb2JqZWN0IE51bWJlcl0iPT1PdChuKX1mdW5jdGlvbiB4dShuKXtyZXR1cm4hKCF5dShuKXx8IltvYmplY3QgT2JqZWN0XSIhPU90KG4pKSYmKG49ZGkobiksbnVsbD09PW58fChuPW9pLmNhbGwobiwiY29uc3RydWN0b3IiKSYmbi5jb25zdHJ1Y3Rvcix0eXBlb2Ygbj09ImZ1bmN0aW9uIiYmbiBpbnN0YW5jZW9mIG4mJmlpLmNhbGwobik9PWxpKSl9ZnVuY3Rpb24ganUobil7cmV0dXJuIHR5cGVvZiBuPT0ic3RyaW5nInx8IWZmKG4pJiZ5dShuKSYmIltvYmplY3QgU3RyaW5nXSI9PU90KG4pfWZ1bmN0aW9uIHd1KG4pe3JldHVybiB0eXBlb2Ygbj09InN5bWJvbCJ8fHl1KG4pJiYiW29iamVjdCBTeW1ib2xdIj09T3Qobik7Cn1mdW5jdGlvbiBtdShuKXtpZighbilyZXR1cm5bXTtpZihzdShuKSlyZXR1cm4ganUobik/TShuKTpVcihuKTtpZih3aSYmblt3aV0pe249blt3aV0oKTtmb3IodmFyIHQscj1bXTshKHQ9bi5uZXh0KCkpLmRvbmU7KXIucHVzaCh0LnZhbHVlKTtyZXR1cm4gcn1yZXR1cm4gdD12byhuKSwoIltvYmplY3QgTWFwXSI9PXQ/VzoiW29iamVjdCBTZXRdIj09dD9VOlV1KShuKX1mdW5jdGlvbiBBdShuKXtyZXR1cm4gbj8obj1TdShuKSxuPT09JHx8bj09PS0kPzEuNzk3NjkzMTM0ODYyMzE1N2UzMDgqKDA+bj8tMToxKTpuPT09bj9uOjApOjA9PT1uP246MH1mdW5jdGlvbiBFdShuKXtuPUF1KG4pO3ZhciB0PW4lMTtyZXR1cm4gbj09PW4/dD9uLXQ6bjowfWZ1bmN0aW9uIGt1KG4pe3JldHVybiBuP3B0KEV1KG4pLDAsNDI5NDk2NzI5NSk6MH1mdW5jdGlvbiBTdShuKXtpZih0eXBlb2Ygbj09Im51bWJlciIpcmV0dXJuIG47aWYod3UobikpcmV0dXJuIEY7aWYoZHUobikmJihuPXR5cGVvZiBuLnZhbHVlT2Y9PSJmdW5jdGlvbiI/bi52YWx1ZU9mKCk6biwKbj1kdShuKT9uKyIiOm4pLHR5cGVvZiBuIT0ic3RyaW5nIilyZXR1cm4gMD09PW4/bjorbjtuPW4ucmVwbGFjZSh1biwiIik7dmFyIHQ9Z24udGVzdChuKTtyZXR1cm4gdHx8eW4udGVzdChuKT9EbihuLnNsaWNlKDIpLHQ/Mjo4KTp2bi50ZXN0KG4pP0Y6K259ZnVuY3Rpb24gT3Uobil7cmV0dXJuIENyKG4sQnUobikpfWZ1bmN0aW9uIEl1KG4pe3JldHVybiBudWxsPT1uPyIiOnlyKG4pfWZ1bmN0aW9uIFJ1KG4sdCxyKXtyZXR1cm4gbj1udWxsPT1uP1Q6a3Qobix0KSxuPT09VD9yOm59ZnVuY3Rpb24genUobix0KXtyZXR1cm4gbnVsbCE9biYmd2Uobix0LHp0KX1mdW5jdGlvbiBXdShuKXtyZXR1cm4gc3Uobik/cW4obik6VnQobil9ZnVuY3Rpb24gQnUobil7aWYoc3Uobikpbj1xbihuLHRydWUpO2Vsc2UgaWYoZHUobikpe3ZhciB0LHI9emUobiksZT1bXTtmb3IodCBpbiBuKSgiY29uc3RydWN0b3IiIT10fHwhciYmb2kuY2FsbChuLHQpKSYmZS5wdXNoKHQpO249ZX1lbHNle2lmKHQ9W10sCm51bGwhPW4pZm9yKHIgaW4gUXUobikpdC5wdXNoKHIpO249dH1yZXR1cm4gbn1mdW5jdGlvbiBMdShuLHQpe2lmKG51bGw9PW4pcmV0dXJue307dmFyIHI9Yyh2ZShuKSxmdW5jdGlvbihuKXtyZXR1cm5bbl19KTtyZXR1cm4gdD15ZSh0KSx0cihuLHIsZnVuY3Rpb24obixyKXtyZXR1cm4gdChuLHJbMF0pfSl9ZnVuY3Rpb24gVXUobil7cmV0dXJuIG51bGw9PW4/W106UyhuLFd1KG4pKX1mdW5jdGlvbiBDdShuKXtyZXR1cm4gJGYoSXUobikudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gRHUobil7cmV0dXJuKG49SXUobikpJiZuLnJlcGxhY2UoeG4sWG4pLnJlcGxhY2UoU24sIiIpfWZ1bmN0aW9uIE11KG4sdCxyKXtyZXR1cm4gbj1JdShuKSx0PXI/VDp0LHQ9PT1UP3puLnRlc3Qobik/bi5tYXRjaChJbil8fFtdOm4ubWF0Y2goc24pfHxbXTpuLm1hdGNoKHQpfHxbXX1mdW5jdGlvbiBUdShuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gJHUobil7cmV0dXJuIG47Cn1mdW5jdGlvbiBGdShuKXtyZXR1cm4gcXQodHlwZW9mIG49PSJmdW5jdGlvbiI/bjpfdChuLDEpKX1mdW5jdGlvbiBOdShuLHQsZSl7dmFyIHU9V3UodCksaT1FdCh0LHUpO251bGwhPWV8fGR1KHQpJiYoaS5sZW5ndGh8fCF1Lmxlbmd0aCl8fChlPXQsdD1uLG49dGhpcyxpPUV0KHQsV3UodCkpKTt2YXIgbz0hKGR1KGUpJiYiY2hhaW4iaW4gZSYmIWUuY2hhaW4pLGY9X3Uobik7cmV0dXJuIHIoaSxmdW5jdGlvbihyKXt2YXIgZT10W3JdO25bcl09ZSxmJiYobi5wcm90b3R5cGVbcl09ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fY2hhaW5fXztpZihvfHx0KXt2YXIgcj1uKHRoaXMuX193cmFwcGVkX18pO3JldHVybihyLl9fYWN0aW9uc19fPVVyKHRoaXMuX19hY3Rpb25zX18pKS5wdXNoKHtmdW5jOmUsYXJnczphcmd1bWVudHMsdGhpc0FyZzpufSksci5fX2NoYWluX189dCxyfXJldHVybiBlLmFwcGx5KG4sYShbdGhpcy52YWx1ZSgpXSxhcmd1bWVudHMpKX0pfSksbn1mdW5jdGlvbiBQdSgpe30KZnVuY3Rpb24gWnUobil7cmV0dXJuIEllKG4pP2IoTWUobikpOnJyKG4pfWZ1bmN0aW9uIHF1KCl7cmV0dXJuW119ZnVuY3Rpb24gVnUoKXtyZXR1cm4gZmFsc2V9bW49bnVsbD09bW4/JG46cnQuZGVmYXVsdHMoJG4uT2JqZWN0KCksbW4scnQucGljaygkbixXbikpO3ZhciBLdT1tbi5BcnJheSxHdT1tbi5EYXRlLEh1PW1uLkVycm9yLEp1PW1uLkZ1bmN0aW9uLFl1PW1uLk1hdGgsUXU9bW4uT2JqZWN0LFh1PW1uLlJlZ0V4cCxuaT1tbi5TdHJpbmcsdGk9bW4uVHlwZUVycm9yLHJpPUt1LnByb3RvdHlwZSxlaT1RdS5wcm90b3R5cGUsdWk9bW5bIl9fY29yZS1qc19zaGFyZWRfXyJdLGlpPUp1LnByb3RvdHlwZS50b1N0cmluZyxvaT1laS5oYXNPd25Qcm9wZXJ0eSxmaT0wLGNpPWZ1bmN0aW9uKCl7dmFyIG49L1teLl0rJC8uZXhlYyh1aSYmdWkua2V5cyYmdWkua2V5cy5JRV9QUk9UT3x8IiIpO3JldHVybiBuPyJTeW1ib2woc3JjKV8xLiIrbjoiIn0oKSxhaT1laS50b1N0cmluZyxsaT1paS5jYWxsKFF1KSxzaT0kbi5fLGhpPVh1KCJeIitpaS5jYWxsKG9pKS5yZXBsYWNlKHJuLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpLHBpPVBuP21uLkJ1ZmZlcjpULF9pPW1uLlN5bWJvbCx2aT1tbi5VaW50OEFycmF5LGdpPXBpP3BpLmc6VCxkaT1CKFF1LmdldFByb3RvdHlwZU9mLFF1KSx5aT1RdS5jcmVhdGUsYmk9ZWkucHJvcGVydHlJc0VudW1lcmFibGUseGk9cmkuc3BsaWNlLGppPV9pP19pLmlzQ29uY2F0U3ByZWFkYWJsZTpULHdpPV9pP19pLml0ZXJhdG9yOlQsbWk9X2k/X2kudG9TdHJpbmdUYWc6VCxBaT1mdW5jdGlvbigpewp0cnl7dmFyIG49amUoUXUsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIG4oe30sIiIse30pLG59Y2F0Y2gobil7fX0oKSxFaT1tbi5jbGVhclRpbWVvdXQhPT0kbi5jbGVhclRpbWVvdXQmJm1uLmNsZWFyVGltZW91dCxraT1HdSYmR3Uubm93IT09JG4uRGF0ZS5ub3cmJkd1Lm5vdyxTaT1tbi5zZXRUaW1lb3V0IT09JG4uc2V0VGltZW91dCYmbW4uc2V0VGltZW91dCxPaT1ZdS5jZWlsLElpPVl1LmZsb29yLFJpPVF1LmdldE93blByb3BlcnR5U3ltYm9scyx6aT1waT9waS5pc0J1ZmZlcjpULFdpPW1uLmlzRmluaXRlLEJpPXJpLmpvaW4sTGk9QihRdS5rZXlzLFF1KSxVaT1ZdS5tYXgsQ2k9WXUubWluLERpPUd1Lm5vdyxNaT1tbi5wYXJzZUludCxUaT1ZdS5yYW5kb20sJGk9cmkucmV2ZXJzZSxGaT1qZShtbiwiRGF0YVZpZXciKSxOaT1qZShtbiwiTWFwIiksUGk9amUobW4sIlByb21pc2UiKSxaaT1qZShtbiwiU2V0IikscWk9amUobW4sIldlYWtNYXAiKSxWaT1qZShRdSwiY3JlYXRlIiksS2k9cWkmJm5ldyBxaSxHaT17fSxIaT1UZShGaSksSmk9VGUoTmkpLFlpPVRlKFBpKSxRaT1UZShaaSksWGk9VGUocWkpLG5vPV9pP19pLnByb3RvdHlwZTpULHRvPW5vP25vLnZhbHVlT2Y6VCxybz1ubz9uby50b1N0cmluZzpULGVvPWZ1bmN0aW9uKCl7CmZ1bmN0aW9uIG4oKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBkdSh0KT95aT95aSh0KToobi5wcm90b3R5cGU9dCx0PW5ldyBuLG4ucHJvdG90eXBlPVQsdCk6e319fSgpO0FuLnRlbXBsYXRlU2V0dGluZ3M9e2VzY2FwZTpKLGV2YWx1YXRlOlksaW50ZXJwb2xhdGU6USx2YXJpYWJsZToiIixpbXBvcnRzOntfOkFufX0sQW4ucHJvdG90eXBlPUVuLnByb3RvdHlwZSxBbi5wcm90b3R5cGUuY29uc3RydWN0b3I9QW4sT24ucHJvdG90eXBlPWVvKEVuLnByb3RvdHlwZSksT24ucHJvdG90eXBlLmNvbnN0cnVjdG9yPU9uLFVuLnByb3RvdHlwZT1lbyhFbi5wcm90b3R5cGUpLFVuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1VbixNbi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVZpP1ZpKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxNbi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKG4pe3JldHVybiBuPXRoaXMuaGFzKG4pJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tuXSwKdGhpcy5zaXplLT1uPzE6MCxufSxNbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIFZpPyhuPXRbbl0sIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09bj9UOm4pOm9pLmNhbGwodCxuKT90W25dOlR9LE1uLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gVmk/dFtuXSE9PVQ6b2kuY2FsbCh0LG4pfSxNbi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKG4sdCl7dmFyIHI9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhuKT8wOjEscltuXT1WaSYmdD09PVQ/Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iOnQsdGhpc30sVG4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sVG4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihuKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBuPWZ0KHQsbiksISgwPm4pJiYobj09dC5sZW5ndGgtMT90LnBvcCgpOnhpLmNhbGwodCxuLDEpLAotLXRoaXMuc2l6ZSx0cnVlKX0sVG4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihuKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBuPWZ0KHQsbiksMD5uP1Q6dFtuXVsxXX0sVG4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbihuKXtyZXR1cm4tMTxmdCh0aGlzLl9fZGF0YV9fLG4pfSxUbi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKG4sdCl7dmFyIHI9dGhpcy5fX2RhdGFfXyxlPWZ0KHIsbik7cmV0dXJuIDA+ZT8oKyt0aGlzLnNpemUsci5wdXNoKFtuLHRdKSk6cltlXVsxXT10LHRoaXN9LEZuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IE1uLG1hcDpuZXcoTml8fFRuKSxzdHJpbmc6bmV3IE1ufX0sRm4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihuKXtyZXR1cm4gbj1iZSh0aGlzLG4pLmRlbGV0ZShuKSx0aGlzLnNpemUtPW4/MTowLG59LEZuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24obil7cmV0dXJuIGJlKHRoaXMsbikuZ2V0KG4pOwp9LEZuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24obil7cmV0dXJuIGJlKHRoaXMsbikuaGFzKG4pfSxGbi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKG4sdCl7dmFyIHI9YmUodGhpcyxuKSxlPXIuc2l6ZTtyZXR1cm4gci5zZXQobix0KSx0aGlzLnNpemUrPXIuc2l6ZT09ZT8wOjEsdGhpc30sTm4ucHJvdG90eXBlLmFkZD1Obi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQobiwiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIpLHRoaXN9LE5uLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKG4pfSxabi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPW5ldyBUbix0aGlzLnNpemU9MH0sWm4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihuKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBuPXQuZGVsZXRlKG4pLHRoaXMuc2l6ZT10LnNpemUsbn0sWm4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihuKXsKcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KG4pfSxabi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhuKX0sWm4ucHJvdG90eXBlLnNldD1mdW5jdGlvbihuLHQpe3ZhciByPXRoaXMuX19kYXRhX187aWYociBpbnN0YW5jZW9mIFRuKXt2YXIgZT1yLl9fZGF0YV9fO2lmKCFOaXx8MTk5PmUubGVuZ3RoKXJldHVybiBlLnB1c2goW24sdF0pLHRoaXMuc2l6ZT0rK3Iuc2l6ZSx0aGlzO3I9dGhpcy5fX2RhdGFfXz1uZXcgRm4oZSl9cmV0dXJuIHIuc2V0KG4sdCksdGhpcy5zaXplPXIuc2l6ZSx0aGlzfTt2YXIgdW89RnIobXQpLGlvPUZyKEF0LHRydWUpLG9vPU5yKCksZm89TnIodHJ1ZSksY289S2k/ZnVuY3Rpb24obix0KXtyZXR1cm4gS2kuc2V0KG4sdCksbn06JHUsYW89QWk/ZnVuY3Rpb24obix0KXtyZXR1cm4gQWkobiwidG9TdHJpbmciLHtjb25maWd1cmFibGU6dHJ1ZSxlbnVtZXJhYmxlOmZhbHNlLHZhbHVlOlR1KHQpLHdyaXRhYmxlOnRydWV9KX06JHUsbG89RWl8fGZ1bmN0aW9uKG4pewpyZXR1cm4gJG4uY2xlYXJUaW1lb3V0KG4pfSxzbz1aaSYmMS9VKG5ldyBaaShbLC0wXSkpWzFdPT0kP2Z1bmN0aW9uKG4pe3JldHVybiBuZXcgWmkobil9OlB1LGhvPUtpP2Z1bmN0aW9uKG4pe3JldHVybiBLaS5nZXQobil9OlB1LHBvPVJpP2Z1bmN0aW9uKG4pe3JldHVybiBudWxsPT1uP1tdOihuPVF1KG4pLGkoUmkobiksZnVuY3Rpb24odCl7cmV0dXJuIGJpLmNhbGwobix0KX0pKX06cXUsX289Umk/ZnVuY3Rpb24obil7Zm9yKHZhciB0PVtdO247KWEodCxwbyhuKSksbj1kaShuKTtyZXR1cm4gdH06cXUsdm89T3Q7KEZpJiYiW29iamVjdCBEYXRhVmlld10iIT12byhuZXcgRmkobmV3IEFycmF5QnVmZmVyKDEpKSl8fE5pJiYiW29iamVjdCBNYXBdIiE9dm8obmV3IE5pKXx8UGkmJiJbb2JqZWN0IFByb21pc2VdIiE9dm8oUGkucmVzb2x2ZSgpKXx8WmkmJiJbb2JqZWN0IFNldF0iIT12byhuZXcgWmkpfHxxaSYmIltvYmplY3QgV2Vha01hcF0iIT12byhuZXcgcWkpKSYmKHZvPWZ1bmN0aW9uKG4pewp2YXIgdD1PdChuKTtpZihuPShuPSJbb2JqZWN0IE9iamVjdF0iPT10P24uY29uc3RydWN0b3I6VCk/VGUobik6IiIpc3dpdGNoKG4pe2Nhc2UgSGk6cmV0dXJuIltvYmplY3QgRGF0YVZpZXddIjtjYXNlIEppOnJldHVybiJbb2JqZWN0IE1hcF0iO2Nhc2UgWWk6cmV0dXJuIltvYmplY3QgUHJvbWlzZV0iO2Nhc2UgUWk6cmV0dXJuIltvYmplY3QgU2V0XSI7Y2FzZSBYaTpyZXR1cm4iW29iamVjdCBXZWFrTWFwXSJ9cmV0dXJuIHR9KTt2YXIgZ289dWk/X3U6VnUseW89Q2UoY28pLGJvPVNpfHxmdW5jdGlvbihuLHQpe3JldHVybiAkbi5zZXRUaW1lb3V0KG4sdCl9LHhvPUNlKGFvKSxqbz1mdW5jdGlvbihuKXtuPWN1KG4sZnVuY3Rpb24obil7cmV0dXJuIDUwMD09PXQuc2l6ZSYmdC5jbGVhcigpLG59KTt2YXIgdD1uLmNhY2hlO3JldHVybiBufShmdW5jdGlvbihuKXt2YXIgdD1bXTtyZXR1cm4gNDY9PT1uLmNoYXJDb2RlQXQoMCkmJnQucHVzaCgiIiksbi5yZXBsYWNlKHRuLGZ1bmN0aW9uKG4scixlLHUpewp0LnB1c2goZT91LnJlcGxhY2UoaG4sIiQxIik6cnx8bil9KSx0fSksd289ZnIoZnVuY3Rpb24obix0KXtyZXR1cm4gaHUobik/eXQobix3dCh0LDEsaHUsdHJ1ZSkpOltdfSksbW89ZnIoZnVuY3Rpb24obix0KXt2YXIgcj1WZSh0KTtyZXR1cm4gaHUocikmJihyPVQpLGh1KG4pP3l0KG4sd3QodCwxLGh1LHRydWUpLHllKHIsMikpOltdfSksQW89ZnIoZnVuY3Rpb24obix0KXt2YXIgcj1WZSh0KTtyZXR1cm4gaHUocikmJihyPVQpLGh1KG4pP3l0KG4sd3QodCwxLGh1LHRydWUpLFQscik6W119KSxFbz1mcihmdW5jdGlvbihuKXt2YXIgdD1jKG4sRXIpO3JldHVybiB0Lmxlbmd0aCYmdFswXT09PW5bMF0/V3QodCk6W119KSxrbz1mcihmdW5jdGlvbihuKXt2YXIgdD1WZShuKSxyPWMobixFcik7cmV0dXJuIHQ9PT1WZShyKT90PVQ6ci5wb3AoKSxyLmxlbmd0aCYmclswXT09PW5bMF0/V3Qocix5ZSh0LDIpKTpbXX0pLFNvPWZyKGZ1bmN0aW9uKG4pe3ZhciB0PVZlKG4pLHI9YyhuLEVyKTtyZXR1cm4odD10eXBlb2YgdD09ImZ1bmN0aW9uIj90OlQpJiZyLnBvcCgpLApyLmxlbmd0aCYmclswXT09PW5bMF0/V3QocixULHQpOltdfSksT289ZnIoS2UpLElvPXBlKGZ1bmN0aW9uKG4sdCl7dmFyIHI9bnVsbD09bj8wOm4ubGVuZ3RoLGU9aHQobix0KTtyZXR1cm4gdXIobixjKHQsZnVuY3Rpb24obil7cmV0dXJuIFNlKG4scik/K246bn0pLnNvcnQoV3IpKSxlfSksUm89ZnIoZnVuY3Rpb24obil7cmV0dXJuIGJyKHd0KG4sMSxodSx0cnVlKSl9KSx6bz1mcihmdW5jdGlvbihuKXt2YXIgdD1WZShuKTtyZXR1cm4gaHUodCkmJih0PVQpLGJyKHd0KG4sMSxodSx0cnVlKSx5ZSh0LDIpKX0pLFdvPWZyKGZ1bmN0aW9uKG4pe3ZhciB0PVZlKG4pLHQ9dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpUO3JldHVybiBicih3dChuLDEsaHUsdHJ1ZSksVCx0KX0pLEJvPWZyKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGh1KG4pP3l0KG4sdCk6W119KSxMbz1mcihmdW5jdGlvbihuKXtyZXR1cm4gbXIoaShuLGh1KSl9KSxVbz1mcihmdW5jdGlvbihuKXt2YXIgdD1WZShuKTtyZXR1cm4gaHUodCkmJih0PVQpLAptcihpKG4saHUpLHllKHQsMikpfSksQ289ZnIoZnVuY3Rpb24obil7dmFyIHQ9VmUobiksdD10eXBlb2YgdD09ImZ1bmN0aW9uIj90OlQ7cmV0dXJuIG1yKGkobixodSksVCx0KX0pLERvPWZyKEhlKSxNbz1mcihmdW5jdGlvbihuKXt2YXIgdD1uLmxlbmd0aCx0PTE8dD9uW3QtMV06VCx0PXR5cGVvZiB0PT0iZnVuY3Rpb24iPyhuLnBvcCgpLHQpOlQ7cmV0dXJuIEplKG4sdCl9KSxUbz1wZShmdW5jdGlvbihuKXtmdW5jdGlvbiB0KHQpe3JldHVybiBodCh0LG4pfXZhciByPW4ubGVuZ3RoLGU9cj9uWzBdOjAsdT10aGlzLl9fd3JhcHBlZF9fO3JldHVybiEoMTxyfHx0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCkmJnUgaW5zdGFuY2VvZiBVbiYmU2UoZSk/KHU9dS5zbGljZShlLCtlKyhyPzE6MCkpLHUuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpRZSxhcmdzOlt0XSx0aGlzQXJnOlR9KSxuZXcgT24odSx0aGlzLl9fY2hhaW5fXykudGhydShmdW5jdGlvbihuKXtyZXR1cm4gciYmIW4ubGVuZ3RoJiZuLnB1c2goVCksCm59KSk6dGhpcy50aHJ1KHQpfSksJG89VHIoZnVuY3Rpb24obix0LHIpe29pLmNhbGwobixyKT8rK25bcl06c3QobixyLDEpfSksRm89R3IoTmUpLE5vPUdyKFBlKSxQbz1UcihmdW5jdGlvbihuLHQscil7b2kuY2FsbChuLHIpP25bcl0ucHVzaCh0KTpzdChuLHIsW3RdKX0pLFpvPWZyKGZ1bmN0aW9uKHQscixlKXt2YXIgdT0tMSxpPXR5cGVvZiByPT0iZnVuY3Rpb24iLG89c3UodCk/S3UodC5sZW5ndGgpOltdO3JldHVybiB1byh0LGZ1bmN0aW9uKHQpe29bKyt1XT1pP24ocix0LGUpOkx0KHQscixlKX0pLG99KSxxbz1UcihmdW5jdGlvbihuLHQscil7c3QobixyLHQpfSksVm89VHIoZnVuY3Rpb24obix0LHIpe25bcj8wOjFdLnB1c2godCl9LGZ1bmN0aW9uKCl7cmV0dXJuW1tdLFtdXX0pLEtvPWZyKGZ1bmN0aW9uKG4sdCl7aWYobnVsbD09bilyZXR1cm5bXTt2YXIgcj10Lmxlbmd0aDtyZXR1cm4gMTxyJiZPZShuLHRbMF0sdFsxXSk/dD1bXToyPHImJk9lKHRbMF0sdFsxXSx0WzJdKSYmKHQ9W3RbMF1dKSwKWHQobix3dCh0LDEpLFtdKX0pLEdvPWtpfHxmdW5jdGlvbigpe3JldHVybiAkbi5EYXRlLm5vdygpfSxIbz1mcihmdW5jdGlvbihuLHQscil7dmFyIGU9MTtpZihyLmxlbmd0aCl2YXIgdT1MKHIsZGUoSG8pKSxlPTMyfGU7cmV0dXJuIGZlKG4sZSx0LHIsdSl9KSxKbz1mcihmdW5jdGlvbihuLHQscil7dmFyIGU9MztpZihyLmxlbmd0aCl2YXIgdT1MKHIsZGUoSm8pKSxlPTMyfGU7cmV0dXJuIGZlKHQsZSxuLHIsdSl9KSxZbz1mcihmdW5jdGlvbihuLHQpe3JldHVybiBkdChuLDEsdCl9KSxRbz1mcihmdW5jdGlvbihuLHQscil7cmV0dXJuIGR0KG4sU3UodCl8fDAscil9KTtjdS5DYWNoZT1Gbjt2YXIgWG89ZnIoZnVuY3Rpb24odCxyKXtyPTE9PXIubGVuZ3RoJiZmZihyWzBdKT9jKHJbMF0sayh5ZSgpKSk6Yyh3dChyLDEpLGsoeWUoKSkpO3ZhciBlPXIubGVuZ3RoO3JldHVybiBmcihmdW5jdGlvbih1KXtmb3IodmFyIGk9LTEsbz1DaSh1Lmxlbmd0aCxlKTsrK2k8bzspdVtpXT1yW2ldLmNhbGwodGhpcyx1W2ldKTsKcmV0dXJuIG4odCx0aGlzLHUpfSl9KSxuZj1mcihmdW5jdGlvbihuLHQpe3JldHVybiBmZShuLDMyLFQsdCxMKHQsZGUobmYpKSl9KSx0Zj1mcihmdW5jdGlvbihuLHQpe3JldHVybiBmZShuLDY0LFQsdCxMKHQsZGUodGYpKSl9KSxyZj1wZShmdW5jdGlvbihuLHQpe3JldHVybiBmZShuLDI1NixULFQsVCx0KX0pLGVmPWVlKEl0KSx1Zj1lZShmdW5jdGlvbihuLHQpe3JldHVybiBuPj10fSksb2Y9VXQoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9VdDpmdW5jdGlvbihuKXtyZXR1cm4geXUobikmJm9pLmNhbGwobiwiY2FsbGVlIikmJiFiaS5jYWxsKG4sImNhbGxlZSIpfSxmZj1LdS5pc0FycmF5LGNmPVZuP2soVm4pOkN0LGFmPXppfHxWdSxsZj1Lbj9rKEtuKTpEdCxzZj1Hbj9rKEduKTpUdCxoZj1Ibj9rKEhuKTpOdCxwZj1Kbj9rKEpuKTpQdCxfZj1Zbj9rKFluKTpadCx2Zj1lZShLdCksZ2Y9ZWUoZnVuY3Rpb24obix0KXtyZXR1cm4gbjw9dH0pLGRmPSRyKGZ1bmN0aW9uKG4sdCl7CmlmKHplKHQpfHxzdSh0KSlDcih0LFd1KHQpLG4pO2Vsc2UgZm9yKHZhciByIGluIHQpb2kuY2FsbCh0LHIpJiZvdChuLHIsdFtyXSl9KSx5Zj0kcihmdW5jdGlvbihuLHQpe0NyKHQsQnUodCksbil9KSxiZj0kcihmdW5jdGlvbihuLHQscixlKXtDcih0LEJ1KHQpLG4sZSl9KSx4Zj0kcihmdW5jdGlvbihuLHQscixlKXtDcih0LFd1KHQpLG4sZSl9KSxqZj1wZShodCksd2Y9ZnIoZnVuY3Rpb24obix0KXtuPVF1KG4pO3ZhciByPS0xLGU9dC5sZW5ndGgsdT0yPGU/dFsyXTpUO2Zvcih1JiZPZSh0WzBdLHRbMV0sdSkmJihlPTEpOysrcjxlOylmb3IodmFyIHU9dFtyXSxpPUJ1KHUpLG89LTEsZj1pLmxlbmd0aDsrK288Zjspe3ZhciBjPWlbb10sYT1uW2NdOyhhPT09VHx8bHUoYSxlaVtjXSkmJiFvaS5jYWxsKG4sYykpJiYobltjXT11W2NdKX1yZXR1cm4gbn0pLG1mPWZyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnB1c2goVCxhZSksbihPZixULHQpfSksQWY9WXIoZnVuY3Rpb24obix0LHIpewpudWxsIT10JiZ0eXBlb2YgdC50b1N0cmluZyE9ImZ1bmN0aW9uIiYmKHQ9YWkuY2FsbCh0KSksblt0XT1yfSxUdSgkdSkpLEVmPVlyKGZ1bmN0aW9uKG4sdCxyKXtudWxsIT10JiZ0eXBlb2YgdC50b1N0cmluZyE9ImZ1bmN0aW9uIiYmKHQ9YWkuY2FsbCh0KSksb2kuY2FsbChuLHQpP25bdF0ucHVzaChyKTpuW3RdPVtyXX0seWUpLGtmPWZyKEx0KSxTZj0kcihmdW5jdGlvbihuLHQscil7WXQobix0LHIpfSksT2Y9JHIoZnVuY3Rpb24obix0LHIsZSl7WXQobix0LHIsZSl9KSxJZj1wZShmdW5jdGlvbihuLHQpe3ZhciByPXt9O2lmKG51bGw9PW4pcmV0dXJuIHI7dmFyIGU9ZmFsc2U7dD1jKHQsZnVuY3Rpb24odCl7cmV0dXJuIHQ9U3IodCxuKSxlfHwoZT0xPHQubGVuZ3RoKSx0fSksQ3Iobix2ZShuKSxyKSxlJiYocj1fdChyLDcsbGUpKTtmb3IodmFyIHU9dC5sZW5ndGg7dS0tOyl4cihyLHRbdV0pO3JldHVybiByfSksUmY9cGUoZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bj97fTpucihuLHQpOwp9KSx6Zj1vZShXdSksV2Y9b2UoQnUpLEJmPXFyKGZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4gdD10LnRvTG93ZXJDYXNlKCksbisocj9DdSh0KTp0KX0pLExmPXFyKGZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4gbisocj8iLSI6IiIpK3QudG9Mb3dlckNhc2UoKX0pLFVmPXFyKGZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4gbisocj8iICI6IiIpK3QudG9Mb3dlckNhc2UoKX0pLENmPVpyKCJ0b0xvd2VyQ2FzZSIpLERmPXFyKGZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4gbisocj8iXyI6IiIpK3QudG9Mb3dlckNhc2UoKX0pLE1mPXFyKGZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4gbisocj8iICI6IiIpKyRmKHQpfSksVGY9cXIoZnVuY3Rpb24obix0LHIpe3JldHVybiBuKyhyPyIgIjoiIikrdC50b1VwcGVyQ2FzZSgpfSksJGY9WnIoInRvVXBwZXJDYXNlIiksRmY9ZnIoZnVuY3Rpb24odCxyKXt0cnl7cmV0dXJuIG4odCxULHIpfWNhdGNoKG4pe3JldHVybiBwdShuKT9uOm5ldyBIdShuKX19KSxOZj1wZShmdW5jdGlvbihuLHQpewpyZXR1cm4gcih0LGZ1bmN0aW9uKHQpe3Q9TWUodCksc3Qobix0LEhvKG5bdF0sbikpfSksbn0pLFBmPUhyKCksWmY9SHIodHJ1ZSkscWY9ZnIoZnVuY3Rpb24obix0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIEx0KHIsbix0KX19KSxWZj1mcihmdW5jdGlvbihuLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gTHQobixyLHQpfX0pLEtmPVhyKGMpLEdmPVhyKHUpLEhmPVhyKGgpLEpmPXJlKCksWWY9cmUodHJ1ZSksUWY9UXIoZnVuY3Rpb24obix0KXtyZXR1cm4gbit0fSwwKSxYZj1pZSgiY2VpbCIpLG5jPVFyKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4vdH0sMSksdGM9aWUoImZsb29yIikscmM9UXIoZnVuY3Rpb24obix0KXtyZXR1cm4gbip0fSwxKSxlYz1pZSgicm91bmQiKSx1Yz1RcihmdW5jdGlvbihuLHQpe3JldHVybiBuLXR9LDApO3JldHVybiBBbi5hZnRlcj1mdW5jdGlvbihuLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyB0aSgiRXhwZWN0ZWQgYSBmdW5jdGlvbiIpOwpyZXR1cm4gbj1FdShuKSxmdW5jdGlvbigpe2lmKDE+LS1uKXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LEFuLmFyeT1ldSxBbi5hc3NpZ249ZGYsQW4uYXNzaWduSW49eWYsQW4uYXNzaWduSW5XaXRoPWJmLEFuLmFzc2lnbldpdGg9eGYsQW4uYXQ9amYsQW4uYmVmb3JlPXV1LEFuLmJpbmQ9SG8sQW4uYmluZEFsbD1OZixBbi5iaW5kS2V5PUpvLEFuLmNhc3RBcnJheT1mdW5jdGlvbigpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltdO3ZhciBuPWFyZ3VtZW50c1swXTtyZXR1cm4gZmYobik/bjpbbl19LEFuLmNoYWluPVllLEFuLmNodW5rPWZ1bmN0aW9uKG4sdCxyKXtpZih0PShyP09lKG4sdCxyKTp0PT09VCk/MTpVaShFdSh0KSwwKSxyPW51bGw9PW4/MDpuLmxlbmd0aCwhcnx8MT50KXJldHVybltdO2Zvcih2YXIgZT0wLHU9MCxpPUt1KE9pKHIvdCkpO2U8cjspaVt1KytdPWhyKG4sZSxlKz10KTtyZXR1cm4gaX0sQW4uY29tcGFjdD1mdW5jdGlvbihuKXtmb3IodmFyIHQ9LTEscj1udWxsPT1uPzA6bi5sZW5ndGgsZT0wLHU9W107Kyt0PHI7KXsKdmFyIGk9blt0XTtpJiYodVtlKytdPWkpfXJldHVybiB1fSxBbi5jb25jYXQ9ZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO2lmKCFuKXJldHVybltdO2Zvcih2YXIgdD1LdShuLTEpLHI9YXJndW1lbnRzWzBdO24tLTspdFtuLTFdPWFyZ3VtZW50c1tuXTtyZXR1cm4gYShmZihyKT9VcihyKTpbcl0sd3QodCwxKSl9LEFuLmNvbmQ9ZnVuY3Rpb24odCl7dmFyIHI9bnVsbD09dD8wOnQubGVuZ3RoLGU9eWUoKTtyZXR1cm4gdD1yP2ModCxmdW5jdGlvbihuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgblsxXSl0aHJvdyBuZXcgdGkoIkV4cGVjdGVkIGEgZnVuY3Rpb24iKTtyZXR1cm5bZShuWzBdKSxuWzFdXX0pOltdLGZyKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdT0tMTsrK3U8cjspe3ZhciBpPXRbdV07aWYobihpWzBdLHRoaXMsZSkpcmV0dXJuIG4oaVsxXSx0aGlzLGUpfX0pfSxBbi5jb25mb3Jtcz1mdW5jdGlvbihuKXtyZXR1cm4gdnQoX3QobiwxKSl9LEFuLmNvbnN0YW50PVR1LApBbi5jb3VudEJ5PSRvLEFuLmNyZWF0ZT1mdW5jdGlvbihuLHQpe3ZhciByPWVvKG4pO3JldHVybiBudWxsPT10P3I6YXQocix0KX0sQW4uY3Vycnk9aXUsQW4uY3VycnlSaWdodD1vdSxBbi5kZWJvdW5jZT1mdSxBbi5kZWZhdWx0cz13ZixBbi5kZWZhdWx0c0RlZXA9bWYsQW4uZGVmZXI9WW8sQW4uZGVsYXk9UW8sQW4uZGlmZmVyZW5jZT13byxBbi5kaWZmZXJlbmNlQnk9bW8sQW4uZGlmZmVyZW5jZVdpdGg9QW8sQW4uZHJvcD1mdW5jdGlvbihuLHQscil7dmFyIGU9bnVsbD09bj8wOm4ubGVuZ3RoO3JldHVybiBlPyh0PXJ8fHQ9PT1UPzE6RXUodCksaHIobiwwPnQ/MDp0LGUpKTpbXX0sQW4uZHJvcFJpZ2h0PWZ1bmN0aW9uKG4sdCxyKXt2YXIgZT1udWxsPT1uPzA6bi5sZW5ndGg7cmV0dXJuIGU/KHQ9cnx8dD09PVQ/MTpFdSh0KSx0PWUtdCxocihuLDAsMD50PzA6dCkpOltdfSxBbi5kcm9wUmlnaHRXaGlsZT1mdW5jdGlvbihuLHQpe3JldHVybiBuJiZuLmxlbmd0aD9qcihuLHllKHQsMyksdHJ1ZSx0cnVlKTpbXTsKfSxBbi5kcm9wV2hpbGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gbiYmbi5sZW5ndGg/anIobix5ZSh0LDMpLHRydWUpOltdfSxBbi5maWxsPWZ1bmN0aW9uKG4sdCxyLGUpe3ZhciB1PW51bGw9PW4/MDpuLmxlbmd0aDtpZighdSlyZXR1cm5bXTtmb3IociYmdHlwZW9mIHIhPSJudW1iZXIiJiZPZShuLHQscikmJihyPTAsZT11KSx1PW4ubGVuZ3RoLHI9RXUociksMD5yJiYocj0tcj51PzA6dStyKSxlPWU9PT1UfHxlPnU/dTpFdShlKSwwPmUmJihlKz11KSxlPXI+ZT8wOmt1KGUpO3I8ZTspbltyKytdPXQ7cmV0dXJuIG59LEFuLmZpbHRlcj1mdW5jdGlvbihuLHQpe3JldHVybihmZihuKT9pOmp0KShuLHllKHQsMykpfSxBbi5mbGF0TWFwPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHd0KHJ1KG4sdCksMSl9LEFuLmZsYXRNYXBEZWVwPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHd0KHJ1KG4sdCksJCl9LEFuLmZsYXRNYXBEZXB0aD1mdW5jdGlvbihuLHQscil7cmV0dXJuIHI9cj09PVQ/MTpFdShyKSwKd3QocnUobix0KSxyKX0sQW4uZmxhdHRlbj1aZSxBbi5mbGF0dGVuRGVlcD1mdW5jdGlvbihuKXtyZXR1cm4obnVsbD09bj8wOm4ubGVuZ3RoKT93dChuLCQpOltdfSxBbi5mbGF0dGVuRGVwdGg9ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbCE9biYmbi5sZW5ndGg/KHQ9dD09PVQ/MTpFdSh0KSx3dChuLHQpKTpbXX0sQW4uZmxpcD1mdW5jdGlvbihuKXtyZXR1cm4gZmUobiw1MTIpfSxBbi5mbG93PVBmLEFuLmZsb3dSaWdodD1aZixBbi5mcm9tUGFpcnM9ZnVuY3Rpb24obil7Zm9yKHZhciB0PS0xLHI9bnVsbD09bj8wOm4ubGVuZ3RoLGU9e307Kyt0PHI7KXt2YXIgdT1uW3RdO2VbdVswXV09dVsxXX1yZXR1cm4gZX0sQW4uZnVuY3Rpb25zPWZ1bmN0aW9uKG4pe3JldHVybiBudWxsPT1uP1tdOkV0KG4sV3UobikpfSxBbi5mdW5jdGlvbnNJbj1mdW5jdGlvbihuKXtyZXR1cm4gbnVsbD09bj9bXTpFdChuLEJ1KG4pKX0sQW4uZ3JvdXBCeT1QbyxBbi5pbml0aWFsPWZ1bmN0aW9uKG4pewpyZXR1cm4obnVsbD09bj8wOm4ubGVuZ3RoKT9ocihuLDAsLTEpOltdfSxBbi5pbnRlcnNlY3Rpb249RW8sQW4uaW50ZXJzZWN0aW9uQnk9a28sQW4uaW50ZXJzZWN0aW9uV2l0aD1TbyxBbi5pbnZlcnQ9QWYsQW4uaW52ZXJ0Qnk9RWYsQW4uaW52b2tlTWFwPVpvLEFuLml0ZXJhdGVlPUZ1LEFuLmtleUJ5PXFvLEFuLmtleXM9V3UsQW4ua2V5c0luPUJ1LEFuLm1hcD1ydSxBbi5tYXBLZXlzPWZ1bmN0aW9uKG4sdCl7dmFyIHI9e307cmV0dXJuIHQ9eWUodCwzKSxtdChuLGZ1bmN0aW9uKG4sZSx1KXtzdChyLHQobixlLHUpLG4pfSkscn0sQW4ubWFwVmFsdWVzPWZ1bmN0aW9uKG4sdCl7dmFyIHI9e307cmV0dXJuIHQ9eWUodCwzKSxtdChuLGZ1bmN0aW9uKG4sZSx1KXtzdChyLGUsdChuLGUsdSkpfSkscn0sQW4ubWF0Y2hlcz1mdW5jdGlvbihuKXtyZXR1cm4gSHQoX3QobiwxKSl9LEFuLm1hdGNoZXNQcm9wZXJ0eT1mdW5jdGlvbihuLHQpe3JldHVybiBKdChuLF90KHQsMSkpfSxBbi5tZW1vaXplPWN1LApBbi5tZXJnZT1TZixBbi5tZXJnZVdpdGg9T2YsQW4ubWV0aG9kPXFmLEFuLm1ldGhvZE9mPVZmLEFuLm1peGluPU51LEFuLm5lZ2F0ZT1hdSxBbi5udGhBcmc9ZnVuY3Rpb24obil7cmV0dXJuIG49RXUobiksZnIoZnVuY3Rpb24odCl7cmV0dXJuIFF0KHQsbil9KX0sQW4ub21pdD1JZixBbi5vbWl0Qnk9ZnVuY3Rpb24obix0KXtyZXR1cm4gTHUobixhdSh5ZSh0KSkpfSxBbi5vbmNlPWZ1bmN0aW9uKG4pe3JldHVybiB1dSgyLG4pfSxBbi5vcmRlckJ5PWZ1bmN0aW9uKG4sdCxyLGUpe3JldHVybiBudWxsPT1uP1tdOihmZih0KXx8KHQ9bnVsbD09dD9bXTpbdF0pLHI9ZT9UOnIsZmYocil8fChyPW51bGw9PXI/W106W3JdKSxYdChuLHQscikpfSxBbi5vdmVyPUtmLEFuLm92ZXJBcmdzPVhvLEFuLm92ZXJFdmVyeT1HZixBbi5vdmVyU29tZT1IZixBbi5wYXJ0aWFsPW5mLEFuLnBhcnRpYWxSaWdodD10ZixBbi5wYXJ0aXRpb249Vm8sQW4ucGljaz1SZixBbi5waWNrQnk9THUsQW4ucHJvcGVydHk9WnUsCkFuLnByb3BlcnR5T2Y9ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT1uP1Q6a3Qobix0KX19LEFuLnB1bGw9T28sQW4ucHVsbEFsbD1LZSxBbi5wdWxsQWxsQnk9ZnVuY3Rpb24obix0LHIpe3JldHVybiBuJiZuLmxlbmd0aCYmdCYmdC5sZW5ndGg/ZXIobix0LHllKHIsMikpOm59LEFuLnB1bGxBbGxXaXRoPWZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4gbiYmbi5sZW5ndGgmJnQmJnQubGVuZ3RoP2VyKG4sdCxULHIpOm59LEFuLnB1bGxBdD1JbyxBbi5yYW5nZT1KZixBbi5yYW5nZVJpZ2h0PVlmLEFuLnJlYXJnPXJmLEFuLnJlamVjdD1mdW5jdGlvbihuLHQpe3JldHVybihmZihuKT9pOmp0KShuLGF1KHllKHQsMykpKX0sQW4ucmVtb3ZlPWZ1bmN0aW9uKG4sdCl7dmFyIHI9W107aWYoIW58fCFuLmxlbmd0aClyZXR1cm4gcjt2YXIgZT0tMSx1PVtdLGk9bi5sZW5ndGg7Zm9yKHQ9eWUodCwzKTsrK2U8aTspe3ZhciBvPW5bZV07dChvLGUsbikmJihyLnB1c2gobyksCnUucHVzaChlKSl9cmV0dXJuIHVyKG4sdSkscn0sQW4ucmVzdD1mdW5jdGlvbihuLHQpe2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyB0aSgiRXhwZWN0ZWQgYSBmdW5jdGlvbiIpO3JldHVybiB0PXQ9PT1UP3Q6RXUodCksZnIobix0KX0sQW4ucmV2ZXJzZT1HZSxBbi5zYW1wbGVTaXplPWZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4gdD0ocj9PZShuLHQscik6dD09PVQpPzE6RXUodCksKGZmKG4pP2V0OmFyKShuLHQpfSxBbi5zZXQ9ZnVuY3Rpb24obix0LHIpe3JldHVybiBudWxsPT1uP246bHIobix0LHIpfSxBbi5zZXRXaXRoPWZ1bmN0aW9uKG4sdCxyLGUpe3JldHVybiBlPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6VCxudWxsPT1uP246bHIobix0LHIsZSl9LEFuLnNodWZmbGU9ZnVuY3Rpb24obil7cmV0dXJuKGZmKG4pP3V0OnNyKShuKX0sQW4uc2xpY2U9ZnVuY3Rpb24obix0LHIpe3ZhciBlPW51bGw9PW4/MDpuLmxlbmd0aDtyZXR1cm4gZT8ociYmdHlwZW9mIHIhPSJudW1iZXIiJiZPZShuLHQscik/KHQ9MCwKcj1lKToodD1udWxsPT10PzA6RXUodCkscj1yPT09VD9lOkV1KHIpKSxocihuLHQscikpOltdfSxBbi5zb3J0Qnk9S28sQW4uc29ydGVkVW5pcT1mdW5jdGlvbihuKXtyZXR1cm4gbiYmbi5sZW5ndGg/Z3Iobik6W119LEFuLnNvcnRlZFVuaXFCeT1mdW5jdGlvbihuLHQpe3JldHVybiBuJiZuLmxlbmd0aD9ncihuLHllKHQsMikpOltdfSxBbi5zcGxpdD1mdW5jdGlvbihuLHQscil7cmV0dXJuIHImJnR5cGVvZiByIT0ibnVtYmVyIiYmT2Uobix0LHIpJiYodD1yPVQpLHI9cj09PVQ/NDI5NDk2NzI5NTpyPj4+MCxyPyhuPUl1KG4pKSYmKHR5cGVvZiB0PT0ic3RyaW5nInx8bnVsbCE9dCYmIWhmKHQpKSYmKHQ9eXIodCksIXQmJlJuLnRlc3QobikpP09yKE0obiksMCxyKTpuLnNwbGl0KHQscik6W119LEFuLnNwcmVhZD1mdW5jdGlvbih0LHIpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyB0aSgiRXhwZWN0ZWQgYSBmdW5jdGlvbiIpO3JldHVybiByPW51bGw9PXI/MDpVaShFdShyKSwwKSwKZnIoZnVuY3Rpb24oZSl7dmFyIHU9ZVtyXTtyZXR1cm4gZT1PcihlLDAsciksdSYmYShlLHUpLG4odCx0aGlzLGUpfSl9LEFuLnRhaWw9ZnVuY3Rpb24obil7dmFyIHQ9bnVsbD09bj8wOm4ubGVuZ3RoO3JldHVybiB0P2hyKG4sMSx0KTpbXX0sQW4udGFrZT1mdW5jdGlvbihuLHQscil7cmV0dXJuIG4mJm4ubGVuZ3RoPyh0PXJ8fHQ9PT1UPzE6RXUodCksaHIobiwwLDA+dD8wOnQpKTpbXX0sQW4udGFrZVJpZ2h0PWZ1bmN0aW9uKG4sdCxyKXt2YXIgZT1udWxsPT1uPzA6bi5sZW5ndGg7cmV0dXJuIGU/KHQ9cnx8dD09PVQ/MTpFdSh0KSx0PWUtdCxocihuLDA+dD8wOnQsZSkpOltdfSxBbi50YWtlUmlnaHRXaGlsZT1mdW5jdGlvbihuLHQpe3JldHVybiBuJiZuLmxlbmd0aD9qcihuLHllKHQsMyksZmFsc2UsdHJ1ZSk6W119LEFuLnRha2VXaGlsZT1mdW5jdGlvbihuLHQpe3JldHVybiBuJiZuLmxlbmd0aD9qcihuLHllKHQsMykpOltdfSxBbi50YXA9ZnVuY3Rpb24obix0KXtyZXR1cm4gdChuKSwKbn0sQW4udGhyb3R0bGU9ZnVuY3Rpb24obix0LHIpe3ZhciBlPXRydWUsdT10cnVlO2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyB0aSgiRXhwZWN0ZWQgYSBmdW5jdGlvbiIpO3JldHVybiBkdShyKSYmKGU9ImxlYWRpbmciaW4gcj8hIXIubGVhZGluZzplLHU9InRyYWlsaW5nImluIHI/ISFyLnRyYWlsaW5nOnUpLGZ1KG4sdCx7bGVhZGluZzplLG1heFdhaXQ6dCx0cmFpbGluZzp1fSl9LEFuLnRocnU9UWUsQW4udG9BcnJheT1tdSxBbi50b1BhaXJzPXpmLEFuLnRvUGFpcnNJbj1XZixBbi50b1BhdGg9ZnVuY3Rpb24obil7cmV0dXJuIGZmKG4pP2MobixNZSk6d3Uobik/W25dOlVyKGpvKEl1KG4pKSl9LEFuLnRvUGxhaW5PYmplY3Q9T3UsQW4udHJhbnNmb3JtPWZ1bmN0aW9uKG4sdCxlKXt2YXIgdT1mZihuKSxpPXV8fGFmKG4pfHxfZihuKTtpZih0PXllKHQsNCksbnVsbD09ZSl7dmFyIG89biYmbi5jb25zdHJ1Y3RvcjtlPWk/dT9uZXcgbzpbXTpkdShuKSYmX3Uobyk/ZW8oZGkobikpOnt9Owp9cmV0dXJuKGk/cjptdCkobixmdW5jdGlvbihuLHIsdSl7cmV0dXJuIHQoZSxuLHIsdSl9KSxlfSxBbi51bmFyeT1mdW5jdGlvbihuKXtyZXR1cm4gZXUobiwxKX0sQW4udW5pb249Um8sQW4udW5pb25CeT16byxBbi51bmlvbldpdGg9V28sQW4udW5pcT1mdW5jdGlvbihuKXtyZXR1cm4gbiYmbi5sZW5ndGg/YnIobik6W119LEFuLnVuaXFCeT1mdW5jdGlvbihuLHQpe3JldHVybiBuJiZuLmxlbmd0aD9icihuLHllKHQsMikpOltdfSxBbi51bmlxV2l0aD1mdW5jdGlvbihuLHQpe3JldHVybiB0PXR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6VCxuJiZuLmxlbmd0aD9icihuLFQsdCk6W119LEFuLnVuc2V0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGw9PW58fHhyKG4sdCl9LEFuLnVuemlwPUhlLEFuLnVuemlwV2l0aD1KZSxBbi51cGRhdGU9ZnVuY3Rpb24obix0LHIpe3JldHVybiBudWxsPT1uP246bHIobix0LGtyKHIpKGt0KG4sdCkpLHZvaWQgMCl9LEFuLnVwZGF0ZVdpdGg9ZnVuY3Rpb24obix0LHIsZSl7CnJldHVybiBlPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6VCxudWxsIT1uJiYobj1scihuLHQsa3Iocikoa3Qobix0KSksZSkpLG59LEFuLnZhbHVlcz1VdSxBbi52YWx1ZXNJbj1mdW5jdGlvbihuKXtyZXR1cm4gbnVsbD09bj9bXTpTKG4sQnUobikpfSxBbi53aXRob3V0PUJvLEFuLndvcmRzPU11LEFuLndyYXA9ZnVuY3Rpb24obix0KXtyZXR1cm4gbmYoa3IodCksbil9LEFuLnhvcj1MbyxBbi54b3JCeT1VbyxBbi54b3JXaXRoPUNvLEFuLnppcD1EbyxBbi56aXBPYmplY3Q9ZnVuY3Rpb24obix0KXtyZXR1cm4gQXIobnx8W10sdHx8W10sb3QpfSxBbi56aXBPYmplY3REZWVwPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIEFyKG58fFtdLHR8fFtdLGxyKX0sQW4uemlwV2l0aD1NbyxBbi5lbnRyaWVzPXpmLEFuLmVudHJpZXNJbj1XZixBbi5leHRlbmQ9eWYsQW4uZXh0ZW5kV2l0aD1iZixOdShBbixBbiksQW4uYWRkPVFmLEFuLmF0dGVtcHQ9RmYsQW4uY2FtZWxDYXNlPUJmLEFuLmNhcGl0YWxpemU9Q3UsCkFuLmNlaWw9WGYsQW4uY2xhbXA9ZnVuY3Rpb24obix0LHIpe3JldHVybiByPT09VCYmKHI9dCx0PVQpLHIhPT1UJiYocj1TdShyKSxyPXI9PT1yP3I6MCksdCE9PVQmJih0PVN1KHQpLHQ9dD09PXQ/dDowKSxwdChTdShuKSx0LHIpfSxBbi5jbG9uZT1mdW5jdGlvbihuKXtyZXR1cm4gX3Qobiw0KX0sQW4uY2xvbmVEZWVwPWZ1bmN0aW9uKG4pe3JldHVybiBfdChuLDUpfSxBbi5jbG9uZURlZXBXaXRoPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQ9dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpULF90KG4sNSx0KX0sQW4uY2xvbmVXaXRoPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQ9dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpULF90KG4sNCx0KX0sQW4uY29uZm9ybXNUbz1mdW5jdGlvbihuLHQpe3JldHVybiBudWxsPT10fHxndChuLHQsV3UodCkpfSxBbi5kZWJ1cnI9RHUsQW4uZGVmYXVsdFRvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGw9PW58fG4hPT1uP3Q6bn0sQW4uZGl2aWRlPW5jLEFuLmVuZHNXaXRoPWZ1bmN0aW9uKG4sdCxyKXsKbj1JdShuKSx0PXlyKHQpO3ZhciBlPW4ubGVuZ3RoLGU9cj1yPT09VD9lOnB0KEV1KHIpLDAsZSk7cmV0dXJuIHItPXQubGVuZ3RoLDA8PXImJm4uc2xpY2UocixlKT09dH0sQW4uZXE9bHUsQW4uZXNjYXBlPWZ1bmN0aW9uKG4pe3JldHVybihuPUl1KG4pKSYmSC50ZXN0KG4pP24ucmVwbGFjZShLLG50KTpufSxBbi5lc2NhcGVSZWdFeHA9ZnVuY3Rpb24obil7cmV0dXJuKG49SXUobikpJiZlbi50ZXN0KG4pP24ucmVwbGFjZShybiwiXFwkJiIpOm59LEFuLmV2ZXJ5PWZ1bmN0aW9uKG4sdCxyKXt2YXIgZT1mZihuKT91OmJ0O3JldHVybiByJiZPZShuLHQscikmJih0PVQpLGUobix5ZSh0LDMpKX0sQW4uZmluZD1GbyxBbi5maW5kSW5kZXg9TmUsQW4uZmluZEtleT1mdW5jdGlvbihuLHQpe3JldHVybiBwKG4seWUodCwzKSxtdCl9LEFuLmZpbmRMYXN0PU5vLEFuLmZpbmRMYXN0SW5kZXg9UGUsQW4uZmluZExhc3RLZXk9ZnVuY3Rpb24obix0KXtyZXR1cm4gcChuLHllKHQsMyksQXQpOwp9LEFuLmZsb29yPXRjLEFuLmZvckVhY2g9bnUsQW4uZm9yRWFjaFJpZ2h0PXR1LEFuLmZvckluPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGw9PW4/bjpvbyhuLHllKHQsMyksQnUpfSxBbi5mb3JJblJpZ2h0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGw9PW4/bjpmbyhuLHllKHQsMyksQnUpfSxBbi5mb3JPd249ZnVuY3Rpb24obix0KXtyZXR1cm4gbiYmbXQobix5ZSh0LDMpKX0sQW4uZm9yT3duUmlnaHQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gbiYmQXQobix5ZSh0LDMpKX0sQW4uZ2V0PVJ1LEFuLmd0PWVmLEFuLmd0ZT11ZixBbi5oYXM9ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbCE9biYmd2Uobix0LFJ0KX0sQW4uaGFzSW49enUsQW4uaGVhZD1xZSxBbi5pZGVudGl0eT0kdSxBbi5pbmNsdWRlcz1mdW5jdGlvbihuLHQscixlKXtyZXR1cm4gbj1zdShuKT9uOlV1KG4pLHI9ciYmIWU/RXUocik6MCxlPW4ubGVuZ3RoLDA+ciYmKHI9VWkoZStyLDApKSxqdShuKT9yPD1lJiYtMTxuLmluZGV4T2YodCxyKTohIWUmJi0xPHYobix0LHIpOwp9LEFuLmluZGV4T2Y9ZnVuY3Rpb24obix0LHIpe3ZhciBlPW51bGw9PW4/MDpuLmxlbmd0aDtyZXR1cm4gZT8ocj1udWxsPT1yPzA6RXUociksMD5yJiYocj1VaShlK3IsMCkpLHYobix0LHIpKTotMX0sQW4uaW5SYW5nZT1mdW5jdGlvbihuLHQscil7cmV0dXJuIHQ9QXUodCkscj09PVQ/KHI9dCx0PTApOnI9QXUociksbj1TdShuKSxuPj1DaSh0LHIpJiZuPFVpKHQscil9LEFuLmludm9rZT1rZixBbi5pc0FyZ3VtZW50cz1vZixBbi5pc0FycmF5PWZmLEFuLmlzQXJyYXlCdWZmZXI9Y2YsQW4uaXNBcnJheUxpa2U9c3UsQW4uaXNBcnJheUxpa2VPYmplY3Q9aHUsQW4uaXNCb29sZWFuPWZ1bmN0aW9uKG4pe3JldHVybiB0cnVlPT09bnx8ZmFsc2U9PT1ufHx5dShuKSYmIltvYmplY3QgQm9vbGVhbl0iPT1PdChuKX0sQW4uaXNCdWZmZXI9YWYsQW4uaXNEYXRlPWxmLEFuLmlzRWxlbWVudD1mdW5jdGlvbihuKXtyZXR1cm4geXUobikmJjE9PT1uLm5vZGVUeXBlJiYheHUobil9LEFuLmlzRW1wdHk9ZnVuY3Rpb24obil7CmlmKG51bGw9PW4pcmV0dXJuIHRydWU7aWYoc3UobikmJihmZihuKXx8dHlwZW9mIG49PSJzdHJpbmcifHx0eXBlb2Ygbi5zcGxpY2U9PSJmdW5jdGlvbiJ8fGFmKG4pfHxfZihuKXx8b2YobikpKXJldHVybiFuLmxlbmd0aDt2YXIgdD12byhuKTtpZigiW29iamVjdCBNYXBdIj09dHx8IltvYmplY3QgU2V0XSI9PXQpcmV0dXJuIW4uc2l6ZTtpZih6ZShuKSlyZXR1cm4hVnQobikubGVuZ3RoO2Zvcih2YXIgciBpbiBuKWlmKG9pLmNhbGwobixyKSlyZXR1cm4gZmFsc2U7cmV0dXJuIHRydWV9LEFuLmlzRXF1YWw9ZnVuY3Rpb24obix0KXtyZXR1cm4gTXQobix0KX0sQW4uaXNFcXVhbFdpdGg9ZnVuY3Rpb24obix0LHIpe3ZhciBlPShyPXR5cGVvZiByPT0iZnVuY3Rpb24iP3I6VCk/cihuLHQpOlQ7cmV0dXJuIGU9PT1UP010KG4sdCxULHIpOiEhZX0sQW4uaXNFcnJvcj1wdSxBbi5pc0Zpbml0ZT1mdW5jdGlvbihuKXtyZXR1cm4gdHlwZW9mIG49PSJudW1iZXIiJiZXaShuKX0sQW4uaXNGdW5jdGlvbj1fdSwKQW4uaXNJbnRlZ2VyPXZ1LEFuLmlzTGVuZ3RoPWd1LEFuLmlzTWFwPXNmLEFuLmlzTWF0Y2g9ZnVuY3Rpb24obix0KXtyZXR1cm4gbj09PXR8fCR0KG4sdCx4ZSh0KSl9LEFuLmlzTWF0Y2hXaXRoPWZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4gcj10eXBlb2Ygcj09ImZ1bmN0aW9uIj9yOlQsJHQobix0LHhlKHQpLHIpfSxBbi5pc05hTj1mdW5jdGlvbihuKXtyZXR1cm4gYnUobikmJm4hPStufSxBbi5pc05hdGl2ZT1mdW5jdGlvbihuKXtpZihnbyhuKSl0aHJvdyBuZXcgSHUoIlVuc3VwcG9ydGVkIGNvcmUtanMgdXNlLiBUcnkgaHR0cHM6Ly9ucG1zLmlvL3NlYXJjaD9xPXBvbnlmaWxsLiIpO3JldHVybiBGdChuKX0sQW4uaXNOaWw9ZnVuY3Rpb24obil7cmV0dXJuIG51bGw9PW59LEFuLmlzTnVsbD1mdW5jdGlvbihuKXtyZXR1cm4gbnVsbD09PW59LEFuLmlzTnVtYmVyPWJ1LEFuLmlzT2JqZWN0PWR1LEFuLmlzT2JqZWN0TGlrZT15dSxBbi5pc1BsYWluT2JqZWN0PXh1LEFuLmlzUmVnRXhwPWhmLApBbi5pc1NhZmVJbnRlZ2VyPWZ1bmN0aW9uKG4pe3JldHVybiB2dShuKSYmLTkwMDcxOTkyNTQ3NDA5OTE8PW4mJjkwMDcxOTkyNTQ3NDA5OTE+PW59LEFuLmlzU2V0PXBmLEFuLmlzU3RyaW5nPWp1LEFuLmlzU3ltYm9sPXd1LEFuLmlzVHlwZWRBcnJheT1fZixBbi5pc1VuZGVmaW5lZD1mdW5jdGlvbihuKXtyZXR1cm4gbj09PVR9LEFuLmlzV2Vha01hcD1mdW5jdGlvbihuKXtyZXR1cm4geXUobikmJiJbb2JqZWN0IFdlYWtNYXBdIj09dm8obil9LEFuLmlzV2Vha1NldD1mdW5jdGlvbihuKXtyZXR1cm4geXUobikmJiJbb2JqZWN0IFdlYWtTZXRdIj09T3Qobil9LEFuLmpvaW49ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bj8iIjpCaS5jYWxsKG4sdCl9LEFuLmtlYmFiQ2FzZT1MZixBbi5sYXN0PVZlLEFuLmxhc3RJbmRleE9mPWZ1bmN0aW9uKG4sdCxyKXt2YXIgZT1udWxsPT1uPzA6bi5sZW5ndGg7aWYoIWUpcmV0dXJuLTE7dmFyIHU9ZTtpZihyIT09VCYmKHU9RXUociksdT0wPnU/VWkoZSt1LDApOkNpKHUsZS0xKSksCnQ9PT10KXtmb3Iocj11KzE7ci0tJiZuW3JdIT09dDspO249cn1lbHNlIG49XyhuLGQsdSx0cnVlKTtyZXR1cm4gbn0sQW4ubG93ZXJDYXNlPVVmLEFuLmxvd2VyRmlyc3Q9Q2YsQW4ubHQ9dmYsQW4ubHRlPWdmLEFuLm1heD1mdW5jdGlvbihuKXtyZXR1cm4gbiYmbi5sZW5ndGg/eHQobiwkdSxJdCk6VH0sQW4ubWF4Qnk9ZnVuY3Rpb24obix0KXtyZXR1cm4gbiYmbi5sZW5ndGg/eHQobix5ZSh0LDIpLEl0KTpUfSxBbi5tZWFuPWZ1bmN0aW9uKG4pe3JldHVybiB5KG4sJHUpfSxBbi5tZWFuQnk9ZnVuY3Rpb24obix0KXtyZXR1cm4geShuLHllKHQsMikpfSxBbi5taW49ZnVuY3Rpb24obil7cmV0dXJuIG4mJm4ubGVuZ3RoP3h0KG4sJHUsS3QpOlR9LEFuLm1pbkJ5PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4mJm4ubGVuZ3RoP3h0KG4seWUodCwyKSxLdCk6VH0sQW4uc3R1YkFycmF5PXF1LEFuLnN0dWJGYWxzZT1WdSxBbi5zdHViT2JqZWN0PWZ1bmN0aW9uKCl7cmV0dXJue319LEFuLnN0dWJTdHJpbmc9ZnVuY3Rpb24oKXsKcmV0dXJuIiJ9LEFuLnN0dWJUcnVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRydWV9LEFuLm11bHRpcGx5PXJjLEFuLm50aD1mdW5jdGlvbihuLHQpe3JldHVybiBuJiZuLmxlbmd0aD9RdChuLEV1KHQpKTpUfSxBbi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuICRuLl89PT10aGlzJiYoJG4uXz1zaSksdGhpc30sQW4ubm9vcD1QdSxBbi5ub3c9R28sQW4ucGFkPWZ1bmN0aW9uKG4sdCxyKXtuPUl1KG4pO3ZhciBlPSh0PUV1KHQpKT9EKG4pOjA7cmV0dXJuIXR8fGU+PXQ/bjoodD0odC1lKS8yLG5lKElpKHQpLHIpK24rbmUoT2kodCkscikpfSxBbi5wYWRFbmQ9ZnVuY3Rpb24obix0LHIpe249SXUobik7dmFyIGU9KHQ9RXUodCkpP0Qobik6MDtyZXR1cm4gdCYmZTx0P24rbmUodC1lLHIpOm59LEFuLnBhZFN0YXJ0PWZ1bmN0aW9uKG4sdCxyKXtuPUl1KG4pO3ZhciBlPSh0PUV1KHQpKT9EKG4pOjA7cmV0dXJuIHQmJmU8dD9uZSh0LWUscikrbjpufSxBbi5wYXJzZUludD1mdW5jdGlvbihuLHQscil7CnJldHVybiByfHxudWxsPT10P3Q9MDp0JiYodD0rdCksTWkoSXUobikucmVwbGFjZShvbiwiIiksdHx8MCl9LEFuLnJhbmRvbT1mdW5jdGlvbihuLHQscil7aWYociYmdHlwZW9mIHIhPSJib29sZWFuIiYmT2Uobix0LHIpJiYodD1yPVQpLHI9PT1UJiYodHlwZW9mIHQ9PSJib29sZWFuIj8ocj10LHQ9VCk6dHlwZW9mIG49PSJib29sZWFuIiYmKHI9bixuPVQpKSxuPT09VCYmdD09PVQ/KG49MCx0PTEpOihuPUF1KG4pLHQ9PT1UPyh0PW4sbj0wKTp0PUF1KHQpKSxuPnQpe3ZhciBlPW47bj10LHQ9ZX1yZXR1cm4gcnx8biUxfHx0JTE/KHI9VGkoKSxDaShuK3IqKHQtbitDbigiMWUtIisoKHIrIiIpLmxlbmd0aC0xKSkpLHQpKTppcihuLHQpfSxBbi5yZWR1Y2U9ZnVuY3Rpb24obix0LHIpe3ZhciBlPWZmKG4pP2w6aix1PTM+YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gZShuLHllKHQsNCkscix1LHVvKX0sQW4ucmVkdWNlUmlnaHQ9ZnVuY3Rpb24obix0LHIpe3ZhciBlPWZmKG4pP3M6aix1PTM+YXJndW1lbnRzLmxlbmd0aDsKcmV0dXJuIGUobix5ZSh0LDQpLHIsdSxpbyl9LEFuLnJlcGVhdD1mdW5jdGlvbihuLHQscil7cmV0dXJuIHQ9KHI/T2Uobix0LHIpOnQ9PT1UKT8xOkV1KHQpLG9yKEl1KG4pLHQpfSxBbi5yZXBsYWNlPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLHQ9SXUoblswXSk7cmV0dXJuIDM+bi5sZW5ndGg/dDp0LnJlcGxhY2UoblsxXSxuWzJdKX0sQW4ucmVzdWx0PWZ1bmN0aW9uKG4sdCxyKXt0PVNyKHQsbik7dmFyIGU9LTEsdT10Lmxlbmd0aDtmb3IodXx8KHU9MSxuPVQpOysrZTx1Oyl7dmFyIGk9bnVsbD09bj9UOm5bTWUodFtlXSldO2k9PT1UJiYoZT11LGk9ciksbj1fdShpKT9pLmNhbGwobik6aX1yZXR1cm4gbn0sQW4ucm91bmQ9ZWMsQW4ucnVuSW5Db250ZXh0PXgsQW4uc2FtcGxlPWZ1bmN0aW9uKG4pe3JldHVybihmZihuKT9Rbjpjcikobil9LEFuLnNpemU9ZnVuY3Rpb24obil7aWYobnVsbD09bilyZXR1cm4gMDtpZihzdShuKSlyZXR1cm4ganUobik/RChuKTpuLmxlbmd0aDsKdmFyIHQ9dm8obik7cmV0dXJuIltvYmplY3QgTWFwXSI9PXR8fCJbb2JqZWN0IFNldF0iPT10P24uc2l6ZTpWdChuKS5sZW5ndGh9LEFuLnNuYWtlQ2FzZT1EZixBbi5zb21lPWZ1bmN0aW9uKG4sdCxyKXt2YXIgZT1mZihuKT9oOnByO3JldHVybiByJiZPZShuLHQscikmJih0PVQpLGUobix5ZSh0LDMpKX0sQW4uc29ydGVkSW5kZXg9ZnVuY3Rpb24obix0KXtyZXR1cm4gX3Iobix0KX0sQW4uc29ydGVkSW5kZXhCeT1mdW5jdGlvbihuLHQscil7cmV0dXJuIHZyKG4sdCx5ZShyLDIpKX0sQW4uc29ydGVkSW5kZXhPZj1mdW5jdGlvbihuLHQpe3ZhciByPW51bGw9PW4/MDpuLmxlbmd0aDtpZihyKXt2YXIgZT1fcihuLHQpO2lmKGU8ciYmbHUobltlXSx0KSlyZXR1cm4gZX1yZXR1cm4tMX0sQW4uc29ydGVkTGFzdEluZGV4PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIF9yKG4sdCx0cnVlKX0sQW4uc29ydGVkTGFzdEluZGV4Qnk9ZnVuY3Rpb24obix0LHIpe3JldHVybiB2cihuLHQseWUociwyKSx0cnVlKTsKfSxBbi5zb3J0ZWRMYXN0SW5kZXhPZj1mdW5jdGlvbihuLHQpe2lmKG51bGw9PW4/MDpuLmxlbmd0aCl7dmFyIHI9X3Iobix0LHRydWUpLTE7aWYobHUobltyXSx0KSlyZXR1cm4gcn1yZXR1cm4tMX0sQW4uc3RhcnRDYXNlPU1mLEFuLnN0YXJ0c1dpdGg9ZnVuY3Rpb24obix0LHIpe3JldHVybiBuPUl1KG4pLHI9bnVsbD09cj8wOnB0KEV1KHIpLDAsbi5sZW5ndGgpLHQ9eXIodCksbi5zbGljZShyLHIrdC5sZW5ndGgpPT10fSxBbi5zdWJ0cmFjdD11YyxBbi5zdW09ZnVuY3Rpb24obil7cmV0dXJuIG4mJm4ubGVuZ3RoP20obiwkdSk6MH0sQW4uc3VtQnk9ZnVuY3Rpb24obix0KXtyZXR1cm4gbiYmbi5sZW5ndGg/bShuLHllKHQsMikpOjB9LEFuLnRlbXBsYXRlPWZ1bmN0aW9uKG4sdCxyKXt2YXIgZT1Bbi50ZW1wbGF0ZVNldHRpbmdzO3ImJk9lKG4sdCxyKSYmKHQ9VCksbj1JdShuKSx0PWJmKHt9LHQsZSxjZSkscj1iZih7fSx0LmltcG9ydHMsZS5pbXBvcnRzLGNlKTt2YXIgdSxpLG89V3UociksZj1TKHIsbyksYz0wOwpyPXQuaW50ZXJwb2xhdGV8fGpuO3ZhciBhPSJfX3ArPSciO3I9WHUoKHQuZXNjYXBlfHxqbikuc291cmNlKyJ8IityLnNvdXJjZSsifCIrKHI9PT1RP3BuOmpuKS5zb3VyY2UrInwiKyh0LmV2YWx1YXRlfHxqbikuc291cmNlKyJ8JCIsImciKTt2YXIgbD1vaS5jYWxsKHQsInNvdXJjZVVSTCIpPyIvLyMgc291cmNlVVJMPSIrKHQuc291cmNlVVJMKyIiKS5yZXBsYWNlKC9bXHJcbl0vZywiICIpKyJcbiI6IiI7aWYobi5yZXBsYWNlKHIsZnVuY3Rpb24odCxyLGUsbyxmLGwpe3JldHVybiBlfHwoZT1vKSxhKz1uLnNsaWNlKGMsbCkucmVwbGFjZSh3bix6KSxyJiYodT10cnVlLGErPSInK19fZSgiK3IrIikrJyIpLGYmJihpPXRydWUsYSs9Iic7IitmKyI7XG5fX3ArPSciKSxlJiYoYSs9IicrKChfX3Q9KCIrZSsiKSk9PW51bGw/Jyc6X190KSsnIiksYz1sK3QubGVuZ3RoLHR9KSxhKz0iJzsiLCh0PW9pLmNhbGwodCwidmFyaWFibGUiKSYmdC52YXJpYWJsZSl8fChhPSJ3aXRoKG9iail7IithKyJ9IiksCmE9KGk/YS5yZXBsYWNlKFAsIiIpOmEpLnJlcGxhY2UoWiwiJDEiKS5yZXBsYWNlKHEsIiQxOyIpLGE9ImZ1bmN0aW9uKCIrKHR8fCJvYmoiKSsiKXsiKyh0PyIiOiJvYmp8fChvYmo9e30pOyIpKyJ2YXIgX190LF9fcD0nJyIrKHU/IixfX2U9Xy5lc2NhcGUiOiIiKSsoaT8iLF9faj1BcnJheS5wcm90b3R5cGUuam9pbjtmdW5jdGlvbiBwcmludCgpe19fcCs9X19qLmNhbGwoYXJndW1lbnRzLCcnKX0iOiI7IikrYSsicmV0dXJuIF9fcH0iLHQ9RmYoZnVuY3Rpb24oKXtyZXR1cm4gSnUobyxsKyJyZXR1cm4gIithKS5hcHBseShULGYpfSksdC5zb3VyY2U9YSxwdSh0KSl0aHJvdyB0O3JldHVybiB0fSxBbi50aW1lcz1mdW5jdGlvbihuLHQpe2lmKG49RXUobiksMT5ufHw5MDA3MTk5MjU0NzQwOTkxPG4pcmV0dXJuW107dmFyIHI9NDI5NDk2NzI5NSxlPUNpKG4sNDI5NDk2NzI5NSk7Zm9yKHQ9eWUodCksbi09NDI5NDk2NzI5NSxlPUEoZSx0KTsrK3I8bjspdChyKTtyZXR1cm4gZX0sQW4udG9GaW5pdGU9QXUsCkFuLnRvSW50ZWdlcj1FdSxBbi50b0xlbmd0aD1rdSxBbi50b0xvd2VyPWZ1bmN0aW9uKG4pe3JldHVybiBJdShuKS50b0xvd2VyQ2FzZSgpfSxBbi50b051bWJlcj1TdSxBbi50b1NhZmVJbnRlZ2VyPWZ1bmN0aW9uKG4pe3JldHVybiBuP3B0KEV1KG4pLC05MDA3MTk5MjU0NzQwOTkxLDkwMDcxOTkyNTQ3NDA5OTEpOjA9PT1uP246MH0sQW4udG9TdHJpbmc9SXUsQW4udG9VcHBlcj1mdW5jdGlvbihuKXtyZXR1cm4gSXUobikudG9VcHBlckNhc2UoKX0sQW4udHJpbT1mdW5jdGlvbihuLHQscil7cmV0dXJuKG49SXUobikpJiYocnx8dD09PVQpP24ucmVwbGFjZSh1biwiIik6biYmKHQ9eXIodCkpPyhuPU0obikscj1NKHQpLHQ9SShuLHIpLHI9UihuLHIpKzEsT3Iobix0LHIpLmpvaW4oIiIpKTpufSxBbi50cmltRW5kPWZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4obj1JdShuKSkmJihyfHx0PT09VCk/bi5yZXBsYWNlKGZuLCIiKTpuJiYodD15cih0KSk/KG49TShuKSx0PVIobixNKHQpKSsxLApPcihuLDAsdCkuam9pbigiIikpOm59LEFuLnRyaW1TdGFydD1mdW5jdGlvbihuLHQscil7cmV0dXJuKG49SXUobikpJiYocnx8dD09PVQpP24ucmVwbGFjZShvbiwiIik6biYmKHQ9eXIodCkpPyhuPU0obiksdD1JKG4sTSh0KSksT3Iobix0KS5qb2luKCIiKSk6bn0sQW4udHJ1bmNhdGU9ZnVuY3Rpb24obix0KXt2YXIgcj0zMCxlPSIuLi4iO2lmKGR1KHQpKXZhciB1PSJzZXBhcmF0b3IiaW4gdD90LnNlcGFyYXRvcjp1LHI9Imxlbmd0aCJpbiB0P0V1KHQubGVuZ3RoKTpyLGU9Im9taXNzaW9uImluIHQ/eXIodC5vbWlzc2lvbik6ZTtuPUl1KG4pO3ZhciBpPW4ubGVuZ3RoO2lmKFJuLnRlc3QobikpdmFyIG89TShuKSxpPW8ubGVuZ3RoO2lmKHI+PWkpcmV0dXJuIG47aWYoaT1yLUQoZSksMT5pKXJldHVybiBlO2lmKHI9bz9PcihvLDAsaSkuam9pbigiIik6bi5zbGljZSgwLGkpLHU9PT1UKXJldHVybiByK2U7aWYobyYmKGkrPXIubGVuZ3RoLWkpLGhmKHUpKXtpZihuLnNsaWNlKGkpLnNlYXJjaCh1KSl7CnZhciBmPXI7Zm9yKHUuZ2xvYmFsfHwodT1YdSh1LnNvdXJjZSxJdShfbi5leGVjKHUpKSsiZyIpKSx1Lmxhc3RJbmRleD0wO289dS5leGVjKGYpOyl2YXIgYz1vLmluZGV4O3I9ci5zbGljZSgwLGM9PT1UP2k6Yyl9fWVsc2Ugbi5pbmRleE9mKHlyKHUpLGkpIT1pJiYodT1yLmxhc3RJbmRleE9mKHUpLC0xPHUmJihyPXIuc2xpY2UoMCx1KSkpO3JldHVybiByK2V9LEFuLnVuZXNjYXBlPWZ1bmN0aW9uKG4pe3JldHVybihuPUl1KG4pKSYmRy50ZXN0KG4pP24ucmVwbGFjZShWLHR0KTpufSxBbi51bmlxdWVJZD1mdW5jdGlvbihuKXt2YXIgdD0rK2ZpO3JldHVybiBJdShuKSt0fSxBbi51cHBlckNhc2U9VGYsQW4udXBwZXJGaXJzdD0kZixBbi5lYWNoPW51LEFuLmVhY2hSaWdodD10dSxBbi5maXJzdD1xZSxOdShBbixmdW5jdGlvbigpe3ZhciBuPXt9O3JldHVybiBtdChBbixmdW5jdGlvbih0LHIpe29pLmNhbGwoQW4ucHJvdG90eXBlLHIpfHwobltyXT10KX0pLG59KCkse2NoYWluOmZhbHNlCn0pLEFuLlZFUlNJT049IjQuMTcuMTUiLHIoImJpbmQgYmluZEtleSBjdXJyeSBjdXJyeVJpZ2h0IHBhcnRpYWwgcGFydGlhbFJpZ2h0Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKG4pe0FuW25dLnBsYWNlaG9sZGVyPUFufSkscihbImRyb3AiLCJ0YWtlIl0sZnVuY3Rpb24obix0KXtVbi5wcm90b3R5cGVbbl09ZnVuY3Rpb24ocil7cj1yPT09VD8xOlVpKEV1KHIpLDApO3ZhciBlPXRoaXMuX19maWx0ZXJlZF9fJiYhdD9uZXcgVW4odGhpcyk6dGhpcy5jbG9uZSgpO3JldHVybiBlLl9fZmlsdGVyZWRfXz9lLl9fdGFrZUNvdW50X189Q2kocixlLl9fdGFrZUNvdW50X18pOmUuX192aWV3c19fLnB1c2goe3NpemU6Q2kociw0Mjk0OTY3Mjk1KSx0eXBlOm4rKDA+ZS5fX2Rpcl9fPyJSaWdodCI6IiIpfSksZX0sVW4ucHJvdG90eXBlW24rIlJpZ2h0Il09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpW25dKHQpLnJldmVyc2UoKX19KSxyKFsiZmlsdGVyIiwibWFwIiwidGFrZVdoaWxlIl0sZnVuY3Rpb24obix0KXsKdmFyIHI9dCsxLGU9MT09cnx8Mz09cjtVbi5wcm90b3R5cGVbbl09ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5jbG9uZSgpO3JldHVybiB0Ll9faXRlcmF0ZWVzX18ucHVzaCh7aXRlcmF0ZWU6eWUobiwzKSx0eXBlOnJ9KSx0Ll9fZmlsdGVyZWRfXz10Ll9fZmlsdGVyZWRfX3x8ZSx0fX0pLHIoWyJoZWFkIiwibGFzdCJdLGZ1bmN0aW9uKG4sdCl7dmFyIHI9InRha2UiKyh0PyJSaWdodCI6IiIpO1VuLnByb3RvdHlwZVtuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW3JdKDEpLnZhbHVlKClbMF19fSkscihbImluaXRpYWwiLCJ0YWlsIl0sZnVuY3Rpb24obix0KXt2YXIgcj0iZHJvcCIrKHQ/IiI6IlJpZ2h0Iik7VW4ucHJvdG90eXBlW25dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19maWx0ZXJlZF9fP25ldyBVbih0aGlzKTp0aGlzW3JdKDEpfX0pLFVuLnByb3RvdHlwZS5jb21wYWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsdGVyKCR1KX0sVW4ucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24obil7CnJldHVybiB0aGlzLmZpbHRlcihuKS5oZWFkKCl9LFVuLnByb3RvdHlwZS5maW5kTGFzdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5yZXZlcnNlKCkuZmluZChuKX0sVW4ucHJvdG90eXBlLmludm9rZU1hcD1mcihmdW5jdGlvbihuLHQpe3JldHVybiB0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uZXcgVW4odGhpcyk6dGhpcy5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIEx0KHIsbix0KX0pfSksVW4ucHJvdG90eXBlLnJlamVjdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5maWx0ZXIoYXUoeWUobikpKX0sVW4ucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKG4sdCl7bj1FdShuKTt2YXIgcj10aGlzO3JldHVybiByLl9fZmlsdGVyZWRfXyYmKDA8bnx8MD50KT9uZXcgVW4ocik6KDA+bj9yPXIudGFrZVJpZ2h0KC1uKTpuJiYocj1yLmRyb3AobikpLHQhPT1UJiYodD1FdSh0KSxyPTA+dD9yLmRyb3BSaWdodCgtdCk6ci50YWtlKHQtbikpLHIpfSxVbi5wcm90b3R5cGUudGFrZVJpZ2h0V2hpbGU9ZnVuY3Rpb24obil7CnJldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUobikucmV2ZXJzZSgpfSxVbi5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRha2UoNDI5NDk2NzI5NSl9LG10KFVuLnByb3RvdHlwZSxmdW5jdGlvbihuLHQpe3ZhciByPS9eKD86ZmlsdGVyfGZpbmR8bWFwfHJlamVjdCl8V2hpbGUkLy50ZXN0KHQpLGU9L14oPzpoZWFkfGxhc3QpJC8udGVzdCh0KSx1PUFuW2U/InRha2UiKygibGFzdCI9PXQ/IlJpZ2h0IjoiIik6dF0saT1lfHwvXmZpbmQvLnRlc3QodCk7dSYmKEFuLnByb3RvdHlwZVt0XT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQobil7cmV0dXJuIG49dS5hcHBseShBbixhKFtuXSxmKSksZSYmaD9uWzBdOm59dmFyIG89dGhpcy5fX3dyYXBwZWRfXyxmPWU/WzFdOmFyZ3VtZW50cyxjPW8gaW5zdGFuY2VvZiBVbixsPWZbMF0scz1jfHxmZihvKTtzJiZyJiZ0eXBlb2YgbD09ImZ1bmN0aW9uIiYmMSE9bC5sZW5ndGgmJihjPXM9ZmFsc2UpO3ZhciBoPXRoaXMuX19jaGFpbl9fLHA9ISF0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCxsPWkmJiFoLGM9YyYmIXA7CnJldHVybiFpJiZzPyhvPWM/bzpuZXcgVW4odGhpcyksbz1uLmFwcGx5KG8sZiksby5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOlFlLGFyZ3M6W3RdLHRoaXNBcmc6VH0pLG5ldyBPbihvLGgpKTpsJiZjP24uYXBwbHkodGhpcyxmKToobz10aGlzLnRocnUodCksbD9lP28udmFsdWUoKVswXTpvLnZhbHVlKCk6byl9KX0pLHIoInBvcCBwdXNoIHNoaWZ0IHNvcnQgc3BsaWNlIHVuc2hpZnQiLnNwbGl0KCIgIiksZnVuY3Rpb24obil7dmFyIHQ9cmlbbl0scj0vXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3Qobik/InRhcCI6InRocnUiLGU9L14oPzpwb3B8c2hpZnQpJC8udGVzdChuKTtBbi5wcm90b3R5cGVbbl09ZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHM7aWYoZSYmIXRoaXMuX19jaGFpbl9fKXt2YXIgdT10aGlzLnZhbHVlKCk7cmV0dXJuIHQuYXBwbHkoZmYodSk/dTpbXSxuKX1yZXR1cm4gdGhpc1tyXShmdW5jdGlvbihyKXtyZXR1cm4gdC5hcHBseShmZihyKT9yOltdLG4pfSk7Cn19KSxtdChVbi5wcm90b3R5cGUsZnVuY3Rpb24obix0KXt2YXIgcj1Bblt0XTtpZihyKXt2YXIgZT1yLm5hbWUrIiI7b2kuY2FsbChHaSxlKXx8KEdpW2VdPVtdKSxHaVtlXS5wdXNoKHtuYW1lOnQsZnVuYzpyfSl9fSksR2lbSnIoVCwyKS5uYW1lXT1be25hbWU6IndyYXBwZXIiLGZ1bmM6VH1dLFVuLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBuPW5ldyBVbih0aGlzLl9fd3JhcHBlZF9fKTtyZXR1cm4gbi5fX2FjdGlvbnNfXz1Vcih0aGlzLl9fYWN0aW9uc19fKSxuLl9fZGlyX189dGhpcy5fX2Rpcl9fLG4uX19maWx0ZXJlZF9fPXRoaXMuX19maWx0ZXJlZF9fLG4uX19pdGVyYXRlZXNfXz1Vcih0aGlzLl9faXRlcmF0ZWVzX18pLG4uX190YWtlQ291bnRfXz10aGlzLl9fdGFrZUNvdW50X18sbi5fX3ZpZXdzX189VXIodGhpcy5fX3ZpZXdzX18pLG59LFVuLnByb3RvdHlwZS5yZXZlcnNlPWZ1bmN0aW9uKCl7aWYodGhpcy5fX2ZpbHRlcmVkX18pe3ZhciBuPW5ldyBVbih0aGlzKTsKbi5fX2Rpcl9fPS0xLG4uX19maWx0ZXJlZF9fPXRydWV9ZWxzZSBuPXRoaXMuY2xvbmUoKSxuLl9fZGlyX18qPS0xO3JldHVybiBufSxVbi5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24oKXt2YXIgbix0PXRoaXMuX193cmFwcGVkX18udmFsdWUoKSxyPXRoaXMuX19kaXJfXyxlPWZmKHQpLHU9MD5yLGk9ZT90Lmxlbmd0aDowO249aTtmb3IodmFyIG89dGhpcy5fX3ZpZXdzX18sZj0wLGM9LTEsYT1vLmxlbmd0aDsrK2M8YTspe3ZhciBsPW9bY10scz1sLnNpemU7c3dpdGNoKGwudHlwZSl7Y2FzZSJkcm9wIjpmKz1zO2JyZWFrO2Nhc2UiZHJvcFJpZ2h0IjpuLT1zO2JyZWFrO2Nhc2UidGFrZSI6bj1DaShuLGYrcyk7YnJlYWs7Y2FzZSJ0YWtlUmlnaHQiOmY9VWkoZixuLXMpfX1pZihuPXtzdGFydDpmLGVuZDpufSxvPW4uc3RhcnQsZj1uLmVuZCxuPWYtbyxvPXU/ZjpvLTEsZj10aGlzLl9faXRlcmF0ZWVzX18sYz1mLmxlbmd0aCxhPTAsbD1DaShuLHRoaXMuX190YWtlQ291bnRfXyksIWV8fCF1JiZpPT1uJiZsPT1uKXJldHVybiB3cih0LHRoaXMuX19hY3Rpb25zX18pOwplPVtdO246Zm9yKDtuLS0mJmE8bDspe2ZvcihvKz1yLHU9LTEsaT10W29dOysrdTxjOyl7dmFyIGg9Zlt1XSxzPWgudHlwZSxoPSgwLGguaXRlcmF0ZWUpKGkpO2lmKDI9PXMpaT1oO2Vsc2UgaWYoIWgpe2lmKDE9PXMpY29udGludWUgbjticmVhayBufX1lW2ErK109aX1yZXR1cm4gZX0sQW4ucHJvdG90eXBlLmF0PVRvLEFuLnByb3RvdHlwZS5jaGFpbj1mdW5jdGlvbigpe3JldHVybiBZZSh0aGlzKX0sQW4ucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbigpe3JldHVybiBuZXcgT24odGhpcy52YWx1ZSgpLHRoaXMuX19jaGFpbl9fKX0sQW4ucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt0aGlzLl9fdmFsdWVzX189PT1UJiYodGhpcy5fX3ZhbHVlc19fPW11KHRoaXMudmFsdWUoKSkpO3ZhciBuPXRoaXMuX19pbmRleF9fPj10aGlzLl9fdmFsdWVzX18ubGVuZ3RoO3JldHVybntkb25lOm4sdmFsdWU6bj9UOnRoaXMuX192YWx1ZXNfX1t0aGlzLl9faW5kZXhfXysrXX19LEFuLnByb3RvdHlwZS5wbGFudD1mdW5jdGlvbihuKXsKZm9yKHZhciB0LHI9dGhpcztyIGluc3RhbmNlb2YgRW47KXt2YXIgZT1GZShyKTtlLl9faW5kZXhfXz0wLGUuX192YWx1ZXNfXz1ULHQ/dS5fX3dyYXBwZWRfXz1lOnQ9ZTt2YXIgdT1lLHI9ci5fX3dyYXBwZWRfX31yZXR1cm4gdS5fX3dyYXBwZWRfXz1uLHR9LEFuLnByb3RvdHlwZS5yZXZlcnNlPWZ1bmN0aW9uKCl7dmFyIG49dGhpcy5fX3dyYXBwZWRfXztyZXR1cm4gbiBpbnN0YW5jZW9mIFVuPyh0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCYmKG49bmV3IFVuKHRoaXMpKSxuPW4ucmV2ZXJzZSgpLG4uX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpRZSxhcmdzOltHZV0sdGhpc0FyZzpUfSksbmV3IE9uKG4sdGhpcy5fX2NoYWluX18pKTp0aGlzLnRocnUoR2UpfSxBbi5wcm90b3R5cGUudG9KU09OPUFuLnByb3RvdHlwZS52YWx1ZU9mPUFuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3JldHVybiB3cih0aGlzLl9fd3JhcHBlZF9fLHRoaXMuX19hY3Rpb25zX18pfSxBbi5wcm90b3R5cGUuZmlyc3Q9QW4ucHJvdG90eXBlLmhlYWQsCndpJiYoQW4ucHJvdG90eXBlW3dpXT1YZSksQW59KCk7dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmdHlwZW9mIGRlZmluZS5hbWQ9PSJvYmplY3QiJiZkZWZpbmUuYW1kPygkbi5fPXJ0LCBkZWZpbmUoZnVuY3Rpb24oKXtyZXR1cm4gcnR9KSk6Tm4/KChObi5leHBvcnRzPXJ0KS5fPXJ0LEZuLl89cnQpOiRuLl89cnR9KS5jYWxsKHRoaXMpOw==]]></data>
	</file>
	<file>
	  <filename>/js/math.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIG1hdGguanMKICogaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMKICoKICogTWF0aC5qcyBpcyBhbiBleHRlbnNpdmUgbWF0aCBsaWJyYXJ5IGZvciBKYXZhU2NyaXB0IGFuZCBOb2RlLmpzLAogKiBJdCBmZWF0dXJlcyByZWFsIGFuZCBjb21wbGV4IG51bWJlcnMsIHVuaXRzLCBtYXRyaWNlcywgYSBsYXJnZSBzZXQgb2YKICogbWF0aGVtYXRpY2FsIGZ1bmN0aW9ucywgYW5kIGEgZmxleGlibGUgZXhwcmVzc2lvbiBwYXJzZXIuCiAqCiAqIEB2ZXJzaW9uIDYuNi4xCiAqIEBkYXRlICAgIDIwMjAtMDItMjYKICoKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAgSm9zIGRlIEpvbmcgPHdqb3NkZWpvbmdAZ21haWwuY29tPgogKgogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKICogb2YgdGhlIExpY2Vuc2UgYXQKICoKICogaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCiAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCiAqIHRoZSBMaWNlbnNlLgogKi8KIWZ1bmN0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sdCk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMubWF0aD10KCk6ZS5tYXRoPXQoKX0odGhpcyxmdW5jdGlvbigpe3JldHVybiBuPXt9LGkubT1yPVtmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IuZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBufSksci5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxyLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3IoMik7dmFyIGE9cigzKTtmdW5jdGlvbiBuKHIsbixpLGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHQ9T2JqZWN0KGEuaikoZSxuLm1hcChvKSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXtpZighdC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuISgodD1lKSYmIj8iPT09dFswXSk7dmFyIHR9KS5ldmVyeShmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09cltlXX0pKXt2YXIgbj10LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09cltlXX0pO3Rocm93IG5ldyBFcnJvcignQ2Fubm90IGNyZWF0ZSBmdW5jdGlvbiAiJy5jb25jYXQoZSwnIiwgJykrInNvbWUgZGVwZW5kZW5jaWVzIGFyZSBtaXNzaW5nOiAiLmNvbmNhdChuLm1hcChmdW5jdGlvbihlKXtyZXR1cm4nIicuY29uY2F0KGUsJyInKX0pLmpvaW4oIiwgIiksIi4iKSl9fShyLG4sZSksaSh0KX1yZXR1cm4gdC5pc0ZhY3Rvcnk9ITAsdC5mbj1yLHQuZGVwZW5kZW5jaWVzPW4uc2xpY2UoKS5zb3J0KCksZSYmKHQubWV0YT1lKSx0fWZ1bmN0aW9uIGkoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUmJiJzdHJpbmciPT10eXBlb2YgZS5mbiYmQXJyYXkuaXNBcnJheShlLmRlcGVuZGVuY2llcyl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmIj8iPT09ZVswXT9lLnNsaWNlKDEpOmV9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuKG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBpKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX1mdW5jdGlvbiBhKGUpe3JldHVybiBlJiYhMD09PWUuY29uc3RydWN0b3IucHJvdG90eXBlLmlzQmlnTnVtYmVyfHwhMX1mdW5jdGlvbiBvKGUpe3JldHVybiBlJiYib2JqZWN0Ij09PW4oZSkmJiEwPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpLmlzQ29tcGxleHx8ITF9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZSYmIm9iamVjdCI9PT1uKGUpJiYhMD09PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKS5pc0ZyYWN0aW9ufHwhMX1mdW5jdGlvbiB1KGUpe3JldHVybiBlJiYhMD09PWUuY29uc3RydWN0b3IucHJvdG90eXBlLmlzVW5pdHx8ITF9ZnVuY3Rpb24gYyhlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9ci5kKHQsInkiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxyLmQodCwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLHIuZCh0LCJqIixmdW5jdGlvbigpe3JldHVybiBvfSksci5kKHQsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxyLmQodCwiTCIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLHIuZCh0LCJJIixmdW5jdGlvbigpe3JldHVybiBjfSksci5kKHQsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxyLmQodCwidiIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLHIuZCh0LCJpIixmdW5jdGlvbigpe3JldHVybiBwfSksci5kKHQsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxyLmQodCwiSCIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pLHIuZCh0LCJEIixmdW5jdGlvbigpe3JldHVybiBkfSksci5kKHQsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSxyLmQodCwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pLHIuZCh0LCJHIixmdW5jdGlvbigpe3JldHVybiB2fSksci5kKHQsInMiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxyLmQodCwicCIsZnVuY3Rpb24oKXtyZXR1cm4geH0pLHIuZCh0LCJtIixmdW5jdGlvbigpe3JldHVybiB3fSksci5kKHQsIkYiLGZ1bmN0aW9uKCl7cmV0dXJuIE59KSxyLmQodCwieiIsZnVuY3Rpb24oKXtyZXR1cm4gT30pLHIuZCh0LCJ4IixmdW5jdGlvbigpe3JldHVybiBNfSksci5kKHQsIksiLGZ1bmN0aW9uKCl7cmV0dXJuIGp9KSxyLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gRX0pLHIuZCh0LCJjIixmdW5jdGlvbigpe3JldHVybiBTfSksci5kKHQsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIEF9KSxyLmQodCwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gQ30pLHIuZCh0LCJrIixmdW5jdGlvbigpe3JldHVybiBUfSksci5kKHQsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIF99KSxyLmQodCwicSIsZnVuY3Rpb24oKXtyZXR1cm4gSX0pLHIuZCh0LCJyIixmdW5jdGlvbigpe3JldHVybiBxfSksci5kKHQsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ9KSxyLmQodCwidyIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLHIuZCh0LCJBIixmdW5jdGlvbigpe3JldHVybiB6fSksci5kKHQsIkIiLGZ1bmN0aW9uKCl7cmV0dXJuIER9KSxyLmQodCwiQyIsZnVuY3Rpb24oKXtyZXR1cm4gUn0pLHIuZCh0LCJFIixmdW5jdGlvbigpe3JldHVybiBQfSksci5kKHQsIkoiLGZ1bmN0aW9uKCl7cmV0dXJuIEZ9KSxyLmQodCwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gVX0pLHIuZCh0LCJNIixmdW5jdGlvbigpe3JldHVybiBMfSk7dmFyIGY9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBsKGUpe3JldHVybiBlJiYhMD09PWUuY29uc3RydWN0b3IucHJvdG90eXBlLmlzTWF0cml4fHwhMX1mdW5jdGlvbiBwKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfHxsKGUpfWZ1bmN0aW9uIG0oZSl7cmV0dXJuIGUmJmUuaXNEZW5zZU1hdHJpeCYmITA9PT1lLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc01hdHJpeHx8ITF9ZnVuY3Rpb24gaChlKXtyZXR1cm4gZSYmZS5pc1NwYXJzZU1hdHJpeCYmITA9PT1lLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc01hdHJpeHx8ITF9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZSYmITA9PT1lLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc1JhbmdlfHwhMX1mdW5jdGlvbiB5KGUpe3JldHVybiBlJiYhMD09PWUuY29uc3RydWN0b3IucHJvdG90eXBlLmlzSW5kZXh8fCExfWZ1bmN0aW9uIGcoZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZX1mdW5jdGlvbiB2KGUpe3JldHVybiBlJiYhMD09PWUuY29uc3RydWN0b3IucHJvdG90eXBlLmlzUmVzdWx0U2V0fHwhMX1mdW5jdGlvbiBiKGUpe3JldHVybiBlJiYhMD09PWUuY29uc3RydWN0b3IucHJvdG90eXBlLmlzSGVscHx8ITF9ZnVuY3Rpb24geChlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZX1mdW5jdGlvbiB3KGUpe3JldHVybiBlIGluc3RhbmNlb2YgRGF0ZX1mdW5jdGlvbiBOKGUpe3JldHVybiBlIGluc3RhbmNlb2YgUmVnRXhwfWZ1bmN0aW9uIE8oZSl7cmV0dXJuISghZXx8Im9iamVjdCIhPT1uKGUpfHxlLmNvbnN0cnVjdG9yIT09T2JqZWN0fHxvKGUpfHxzKGUpKX1mdW5jdGlvbiBNKGUpe3JldHVybiBudWxsPT09ZX1mdW5jdGlvbiBqKGUpe3JldHVybiB2b2lkIDA9PT1lfWZ1bmN0aW9uIEUoZSl7cmV0dXJuIGUmJiEwPT09ZS5pc0FjY2Vzc29yTm9kZSYmITA9PT1lLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGV8fCExfWZ1bmN0aW9uIFMoZSl7cmV0dXJuIGUmJiEwPT09ZS5pc0FycmF5Tm9kZSYmITA9PT1lLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGV8fCExfWZ1bmN0aW9uIEEoZSl7cmV0dXJuIGUmJiEwPT09ZS5pc0Fzc2lnbm1lbnROb2RlJiYhMD09PWUuY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZXx8ITF9ZnVuY3Rpb24gQyhlKXtyZXR1cm4gZSYmITA9PT1lLmlzQmxvY2tOb2RlJiYhMD09PWUuY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZXx8ITF9ZnVuY3Rpb24gVChlKXtyZXR1cm4gZSYmITA9PT1lLmlzQ29uZGl0aW9uYWxOb2RlJiYhMD09PWUuY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZXx8ITF9ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZSYmITA9PT1lLmlzQ29uc3RhbnROb2RlJiYhMD09PWUuY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZXx8ITF9ZnVuY3Rpb24gSShlKXtyZXR1cm4gZSYmITA9PT1lLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSYmITA9PT1lLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGV8fCExfWZ1bmN0aW9uIHEoZSl7cmV0dXJuIGUmJiEwPT09ZS5pc0Z1bmN0aW9uTm9kZSYmITA9PT1lLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGV8fCExfWZ1bmN0aW9uIEIoZSl7cmV0dXJuIGUmJiEwPT09ZS5pc0luZGV4Tm9kZSYmITA9PT1lLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGV8fCExfWZ1bmN0aW9uIGsoZSl7cmV0dXJuIGUmJiEwPT09ZS5pc05vZGUmJiEwPT09ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlfHwhMX1mdW5jdGlvbiB6KGUpe3JldHVybiBlJiYhMD09PWUuaXNPYmplY3ROb2RlJiYhMD09PWUuY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZXx8ITF9ZnVuY3Rpb24gRChlKXtyZXR1cm4gZSYmITA9PT1lLmlzT3BlcmF0b3JOb2RlJiYhMD09PWUuY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZXx8ITF9ZnVuY3Rpb24gUihlKXtyZXR1cm4gZSYmITA9PT1lLmlzUGFyZW50aGVzaXNOb2RlJiYhMD09PWUuY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZXx8ITF9ZnVuY3Rpb24gUChlKXtyZXR1cm4gZSYmITA9PT1lLmlzUmFuZ2VOb2RlJiYhMD09PWUuY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZXx8ITF9ZnVuY3Rpb24gRihlKXtyZXR1cm4gZSYmITA9PT1lLmlzU3ltYm9sTm9kZSYmITA9PT1lLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGV8fCExfWZ1bmN0aW9uIFUoZSl7cmV0dXJuIGUmJiEwPT09ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNDaGFpbnx8ITF9ZnVuY3Rpb24gTChlKXt2YXIgdD1uKGUpO3JldHVybiJvYmplY3QiPT09dD9udWxsPT09ZT8ibnVsbCI6QXJyYXkuaXNBcnJheShlKT8iQXJyYXkiOmUgaW5zdGFuY2VvZiBEYXRlPyJEYXRlIjplIGluc3RhbmNlb2YgUmVnRXhwPyJSZWdFeHAiOmEoZSk/IkJpZ051bWJlciI6byhlKT8iQ29tcGxleCI6cyhlKT8iRnJhY3Rpb24iOmwoZSk/Ik1hdHJpeCI6dShlKT8iVW5pdCI6eShlKT8iSW5kZXgiOmQoZSk/IlJhbmdlIjp2KGUpPyJSZXN1bHRTZXQiOmsoZSk/ZS50eXBlOlUoZSk/IkNoYWluIjpiKGUpPyJIZWxwIjoiT2JqZWN0IjoiZnVuY3Rpb24iPT09dD8iRnVuY3Rpb24iOnR9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IuZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBzfSksci5kKHQsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxyLmQodCwicyIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLHIuZCh0LCJvIixmdW5jdGlvbigpe3JldHVybiBsfSksci5kKHQsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxyLmQodCwicCIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLHIuZCh0LCJxIixmdW5jdGlvbigpe3JldHVybiBofSksci5kKHQsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KSxyLmQodCwibSIsZnVuY3Rpb24oKXtyZXR1cm4geX0pLHIuZCh0LCJmIixmdW5jdGlvbigpe3JldHVybiBnfSksci5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSxyLmQodCwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gYn0pLHIuZCh0LCJrIixmdW5jdGlvbigpe3JldHVybiB4fSksci5kKHQsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSxyLmQodCwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gTn0pLHIuZCh0LCJoIixmdW5jdGlvbigpe3JldHVybiBPfSksci5kKHQsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIE19KSxyLmQodCwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gan0pLHIuZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBFfSk7dmFyIG49cig0KSxpPXIoMSksYT1yKDUpLHU9cig2KSxvPXIoMTApO2Z1bmN0aW9uIHMoZSl7Zm9yKHZhciB0PVtdO0FycmF5LmlzQXJyYXkoZSk7KXQucHVzaChlLmxlbmd0aCksZT1lWzBdO3JldHVybiB0fWZ1bmN0aW9uIGMoZSx0KXtpZigwPT09dC5sZW5ndGgpe2lmKEFycmF5LmlzQXJyYXkoZSkpdGhyb3cgbmV3IHUuYShlLmxlbmd0aCwwKX1lbHNlIWZ1bmN0aW9uIGUodCxyLG4pe3ZhciBpLGE9dC5sZW5ndGg7aWYoYSE9PXJbbl0pdGhyb3cgbmV3IHUuYShhLHJbbl0pO2lmKG48ci5sZW5ndGgtMSl7dmFyIG89bisxO2ZvcihpPTA7aTxhO2krKyl7dmFyIHM9dFtpXTtpZighQXJyYXkuaXNBcnJheShzKSl0aHJvdyBuZXcgdS5hKHIubGVuZ3RoLTEsci5sZW5ndGgsIjwiKTtlKHRbaV0scixvKX19ZWxzZSBmb3IoaT0wO2k8YTtpKyspaWYoQXJyYXkuaXNBcnJheSh0W2ldKSl0aHJvdyBuZXcgdS5hKHIubGVuZ3RoKzEsci5sZW5ndGgsIj4iKX0oZSx0LDApfWZ1bmN0aW9uIGYoZSx0KXtpZighT2JqZWN0KGkueSkoZSl8fCFPYmplY3Qobi5pKShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbmRleCBtdXN0IGJlIGFuIGludGVnZXIgKHZhbHVlOiAiK2UrIikiKTtpZihlPDB8fCJudW1iZXIiPT10eXBlb2YgdCYmdDw9ZSl0aHJvdyBuZXcgby5hKGUsdCl9ZnVuY3Rpb24gbChlLHQscil7aWYoIUFycmF5LmlzQXJyYXkoZSl8fCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFycmF5IGV4cGVjdGVkIik7aWYoMD09PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiUmVzaXppbmcgdG8gc2NhbGFyIGlzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKCFPYmplY3QoaS55KShlKXx8IU9iamVjdChuLmkpKGUpfHxlPDApdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBzaXplLCBtdXN0IGNvbnRhaW4gcG9zaXRpdmUgaW50ZWdlcnMgKHNpemU6ICIrT2JqZWN0KGEuZCkodCkrIikiKX0pLGZ1bmN0aW9uIGUodCxyLG4saSl7dmFyIGE7dmFyIG87dmFyIHM9dC5sZW5ndGg7dmFyIHU9cltuXTt2YXIgYz1NYXRoLm1pbihzLHUpO3QubGVuZ3RoPXU7aWYobjxyLmxlbmd0aC0xKXt2YXIgZj1uKzE7Zm9yKGE9MDthPGM7YSsrKW89dFthXSxBcnJheS5pc0FycmF5KG8pfHwobz1bb10sdFthXT1vKSxlKG8scixmLGkpO2ZvcihhPWM7YTx1O2ErKylvPVtdLHRbYV09byxlKG8scixmLGkpfWVsc2V7Zm9yKGE9MDthPGM7YSsrKWZvcig7QXJyYXkuaXNBcnJheSh0W2FdKTspdFthXT10W2FdWzBdO2ZvcihhPWM7YTx1O2ErKyl0W2FdPWl9fShlLHQsMCx2b2lkIDAhPT1yP3I6MCksZX1mdW5jdGlvbiBwKHQscil7dmFyIGUsbj1kKHQpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqdH0pfWlmKCFBcnJheS5pc0FycmF5KHQpfHwhQXJyYXkuaXNBcnJheShyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcnJheSBleHBlY3RlZCIpO2lmKDA9PT1yLmxlbmd0aCl0aHJvdyBuZXcgdS5hKDAsaShzKHQpKSwiIT0iKTtmb3IodmFyIGE9MSxvPTA7bzxyLmxlbmd0aDtvKyspYSo9cltvXTtpZihuLmxlbmd0aCE9PWEpdGhyb3cgbmV3IHUuYShpKHIpLGkocyh0KSksIiE9Iik7dHJ5e2U9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbj1lLGk9dC5sZW5ndGgtMTswPGk7aS0tKXt2YXIgYT10W2ldO3I9W107Zm9yKHZhciBvPW4ubGVuZ3RoL2Escz0wO3M8bztzKyspci5wdXNoKG4uc2xpY2UocyphLChzKzEpKmEpKTtuPXJ9cmV0dXJuIG59KG4scil9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIHUuYSl0aHJvdyBuZXcgdS5hKGkociksaShzKHQpKSwiIT0iKTt0aHJvdyBlfXJldHVybiBlfWZ1bmN0aW9uIG0oZSx0KXtmb3IodmFyIHI9dHx8cyhlKTtBcnJheS5pc0FycmF5KGUpJiYxPT09ZS5sZW5ndGg7KWU9ZVswXSxyLnNoaWZ0KCk7Zm9yKHZhciBuPXIubGVuZ3RoOzE9PT1yW24tMV07KW4tLTtyZXR1cm4gbjxyLmxlbmd0aCYmKGU9ZnVuY3Rpb24gZSh0LHIsbil7dmFyIGksYTtpZihuPHIpe3ZhciBvPW4rMTtmb3IoaT0wLGE9dC5sZW5ndGg7aTxhO2krKyl0W2ldPWUodFtpXSxyLG8pfWVsc2UgZm9yKDtBcnJheS5pc0FycmF5KHQpOyl0PXRbMF07cmV0dXJuIHR9KGUsbiwwKSxyLmxlbmd0aD1uKSxlfWZ1bmN0aW9uIGgoZSx0LHIsbil7dmFyIGk9bnx8cyhlKTtpZihyKWZvcih2YXIgYT0wO2E8cjthKyspZT1bZV0saS51bnNoaWZ0KDEpO2ZvcihlPWZ1bmN0aW9uIGUodCxyLG4pe3ZhciBpLGE7aWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIG89bisxO2ZvcihpPTAsYT10Lmxlbmd0aDtpPGE7aSsrKXRbaV09ZSh0W2ldLHIsbyl9ZWxzZSBmb3IodmFyIHM9bjtzPHI7cysrKXQ9W3RdO3JldHVybiB0fShlLHQsMCk7aS5sZW5ndGg8dDspaS5wdXNoKDEpO3JldHVybiBlfWZ1bmN0aW9uIGQoZSl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGU7dmFyIHI9W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbiBlKHQpe0FycmF5LmlzQXJyYXkodCk/dC5mb3JFYWNoKGUpOnIucHVzaCh0KX0pLHJ9ZnVuY3Rpb24geShlLHQpe3JldHVybiBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoZSx0KX1mdW5jdGlvbiBnKGUsdCl7QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlLHQpfWZ1bmN0aW9uIHYoZSx0KXtpZigxIT09cyhlKS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJPbmx5IG9uZSBkaW1lbnNpb25hbCBtYXRyaWNlcyBzdXBwb3J0ZWQiKTtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGUsdCl9ZnVuY3Rpb24gYihlLHQpe2lmKDEhPT1zKGUpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIk9ubHkgb25lIGRpbWVuc2lvbmFsIG1hdHJpY2VzIHN1cHBvcnRlZCIpO3JldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KGUpfSl9ZnVuY3Rpb24geChlLHQpe3JldHVybiBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGUsdCl9ZnVuY3Rpb24gdyhlKXtpZighQXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcnJheSBpbnB1dCBleHBlY3RlZCIpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gZTt2YXIgdD1bXSxyPTA7dFswXT17dmFsdWU6ZVswXSxpZGVudGlmaWVyOjB9O2Zvcih2YXIgbj0xO248ZS5sZW5ndGg7bisrKWVbbl09PT1lW24tMV0/cisrOnI9MCx0LnB1c2goe3ZhbHVlOmVbbl0saWRlbnRpZmllcjpyfSk7cmV0dXJuIHR9ZnVuY3Rpb24gTihlKXtpZighQXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcnJheSBpbnB1dCBleHBlY3RlZCIpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gZTtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7cisrKXQucHVzaChlW3JdLnZhbHVlKTtyZXR1cm4gdH1mdW5jdGlvbiBPKGUsdCl7Zm9yKHZhciByLG49MCxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV0sbz1BcnJheS5pc0FycmF5KGEpO2lmKDA9PT1pJiZvJiYobj1hLmxlbmd0aCksbyYmYS5sZW5ndGghPT1uKXJldHVybjt2YXIgcz1vP08oYSx0KTp0KGEpO2lmKHZvaWQgMD09PXIpcj1zO2Vsc2UgaWYociE9PXMpcmV0dXJuIm1peGVkIn1yZXR1cm4gcn1mdW5jdGlvbiBNKGUpe3JldHVybiBlW2UubGVuZ3RoLTFdfWZ1bmN0aW9uIGooZSl7cmV0dXJuIGUuc2xpY2UoMCxlLmxlbmd0aC0xKX1mdW5jdGlvbiBFKGUsdCl7cmV0dXJuLTEhPT1lLmluZGV4T2YodCl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IuZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBpfSksci5kKHQsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxyLmQodCwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLHIuZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiB1fSksci5kKHQsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxyLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLHIuZCh0LCJoIixmdW5jdGlvbigpe3JldHVybiBsfSksci5kKHQsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxyLmQodCwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLHIuZCh0LCJnIixmdW5jdGlvbigpe3JldHVybiBofSksci5kKHQsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KSxyLmQodCwibCIsZnVuY3Rpb24oKXtyZXR1cm4geX0pO3ZhciBuPXIoMSk7ZnVuY3Rpb24gYShlKXtyZXR1cm4oYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9YShlKTtpZigibnVtYmVyIj09PXR8fCJzdHJpbmciPT09dHx8ImJvb2xlYW4iPT09dHx8bnVsbD09ZSlyZXR1cm4gZTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5jbG9uZSlyZXR1cm4gZS5jbG9uZSgpO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBpKGUpfSk7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKGUudmFsdWVPZigpKTtpZihPYmplY3Qobi5lKShlKSlyZXR1cm4gZTtpZihlIGluc3RhbmNlb2YgUmVnRXhwKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjbG9uZSAiK2UpO3JldHVybiBvKGUsaSl9ZnVuY3Rpb24gbyhlLHQpe3ZhciByPXt9O2Zvcih2YXIgbiBpbiBlKW0oZSxuKSYmKHJbbl09dChlW25dKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gcyhlLHQpe2Zvcih2YXIgciBpbiB0KW0odCxyKSYmKGVbcl09dFtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gdShlLHQpe2lmKEFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmQiKTtmb3IodmFyIHIgaW4gdClpZihtKHQscikpaWYodFtyXSYmdFtyXS5jb25zdHJ1Y3Rvcj09PU9iamVjdCl2b2lkIDA9PT1lW3JdJiYoZVtyXT17fSksZVtyXSYmZVtyXS5jb25zdHJ1Y3Rvcj09PU9iamVjdD91KGVbcl0sdFtyXSk6ZVtyXT10W3JdO2Vsc2V7aWYoQXJyYXkuaXNBcnJheSh0W3JdKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZGVlcEV4dGVuZCIpO2Vbcl09dFtyXX1yZXR1cm4gZX1mdW5jdGlvbiBjKGUsdCl7dmFyIHIsbixpO2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiExO2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MCxpPWUubGVuZ3RoO248aTtuKyspaWYoIWMoZVtuXSx0W25dKSlyZXR1cm4hMTtyZXR1cm4hMH1pZigiZnVuY3Rpb24iPT10eXBlb2YgZSlyZXR1cm4gZT09PXQ7aWYoZSBpbnN0YW5jZW9mIE9iamVjdCl7aWYoQXJyYXkuaXNBcnJheSh0KXx8ISh0IGluc3RhbmNlb2YgT2JqZWN0KSlyZXR1cm4hMTtmb3IociBpbiBlKWlmKCEociBpbiB0JiZjKGVbcl0sdFtyXSkpKXJldHVybiExO2ZvcihyIGluIHQpaWYoIShyIGluIGUmJmMoZVtyXSx0W3JdKSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIGU9PT10fWZ1bmN0aW9uIGYoZSl7dmFyIHQ9e307cmV0dXJuIGZ1bmN0aW9uIGUodCxyKXtmb3IodmFyIG4gaW4gdClpZihtKHQsbikpe3ZhciBpPXRbbl07Im9iamVjdCI9PT1hKGkpJiZudWxsIT09aT9lKGkscik6cltuXT1pfX0oZSx0KSx0fWZ1bmN0aW9uIGwoZSx0LHIpe3ZhciBuLGk9ITA7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkmJihuPXIoKSxpPSExKSxufSxzZXQ6ZnVuY3Rpb24oZSl7bj1lLGk9ITF9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSl9ZnVuY3Rpb24gcChlLHQpe2lmKHQmJiJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gcChlLHQuc3BsaXQoIi4iKSk7dmFyIHI9ZTtpZih0KWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2kgaW4gcnx8KHJbaV09e30pLHI9cltpXX1yZXR1cm4gcn1mdW5jdGlvbiBtKGUsdCl7cmV0dXJuIGUmJk9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9ZnVuY3Rpb24gaChlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuZmFjdG9yeX1mdW5jdGlvbiBkKGUsdCl7Zm9yKHZhciByPXt9LG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxhPWVbaV07dm9pZCAwIT09YSYmKHJbaV09YSl9cmV0dXJuIHJ9ZnVuY3Rpb24geSh0KXtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IuZCh0LCJpIixmdW5jdGlvbigpe3JldHVybiBufSksci5kKHQsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxyLmQodCwibCIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLHIuZCh0LCJqIixmdW5jdGlvbigpe3JldHVybiBzfSksci5kKHQsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxyLmQodCwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLHIuZCh0LCJnIixmdW5jdGlvbigpe3JldHVybiBmfSksci5kKHQsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxyLmQodCwicSIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pLHIuZCh0LCJmIixmdW5jdGlvbigpe3JldHVybiBifSksci5kKHQsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSxyLmQodCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gTn0pLHIuZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBPfSksci5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIE19KSxyLmQodCwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gan0pLHIuZCh0LCJvIixmdW5jdGlvbigpe3JldHVybiBFfSksci5kKHQsInAiLGZ1bmN0aW9uKCl7cmV0dXJuIFN9KTt2YXIgYT1yKDMpLHA9cigxKTtmdW5jdGlvbiBuKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGV8fCEhaXNGaW5pdGUoZSkmJmU9PT1NYXRoLnJvdW5kKGUpfXZhciBpPU1hdGguc2lnbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIDA8ZT8xOmU8MD8tMTowfSxvPU1hdGgubG9nMnx8ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubG9nKGUpL01hdGguTE4yfSxzPU1hdGgubG9nMTB8fGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmxvZyhlKS9NYXRoLkxOMTB9LHU9TWF0aC5sb2cxcHx8ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubG9nKGUrMSl9LGM9TWF0aC5jYnJ0fHxmdW5jdGlvbihlKXtpZigwPT09ZSlyZXR1cm4gZTt2YXIgdCxyPWU8MDtyZXR1cm4gciYmKGU9LWUpLHQ9aXNGaW5pdGUoZSk/KGUvKCh0PU1hdGguZXhwKE1hdGgubG9nKGUpLzMpKSp0KSsyKnQpLzM6ZSxyPy10OnR9LGY9TWF0aC5leHBtMXx8ZnVuY3Rpb24oZSl7cmV0dXJuIDJlLTQ8PWV8fGU8PS0yZS00P01hdGguZXhwKGUpLTE6ZStlKmUvMitlKmUqZS82fTtmdW5jdGlvbiBsKGUsdCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIHQoZSk7aWYoZT09PTEvMClyZXR1cm4iSW5maW5pdHkiO2lmKGU9PT0tMS8wKXJldHVybiItSW5maW5pdHkiO2lmKGlzTmFOKGUpKXJldHVybiJOYU4iO3ZhciByLG49ImF1dG8iO3N3aXRjaCh0JiYodC5ub3RhdGlvbiYmKG49dC5ub3RhdGlvbiksT2JqZWN0KHAueSkodCk/cj10Ok9iamVjdChwLnkpKHQucHJlY2lzaW9uKSYmKHI9dC5wcmVjaXNpb24pKSxuKXtjYXNlImZpeGVkIjpyZXR1cm4gaChlLHIpO2Nhc2UiZXhwb25lbnRpYWwiOnJldHVybiBkKGUscik7Y2FzZSJlbmdpbmVlcmluZyI6cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoaXNOYU4oZSl8fCFpc0Zpbml0ZShlKSlyZXR1cm4gU3RyaW5nKGUpO3ZhciByPWcobShlKSx0KSxuPXIuZXhwb25lbnQsaT1yLmNvZWZmaWNpZW50cyxhPW4lMz09MD9uOm48MD9uLTMtbiUzOm4tbiUzO2lmKE9iamVjdChwLnkpKHQpKWZvcig7dD5pLmxlbmd0aHx8bi1hKzE+aS5sZW5ndGg7KWkucHVzaCgwKTtlbHNlIGZvcih2YXIgbz0wPD1uP246TWF0aC5hYnMoYSk7aS5sZW5ndGgtMTxvOylpLnB1c2goMCk7dmFyIHM9TWF0aC5hYnMobi1hKSx1PTE7Zm9yKDswPHM7KXUrKyxzLS07dmFyIGM9aS5zbGljZSh1KS5qb2luKCIiKSxmPU9iamVjdChwLnkpKHQpJiZjLmxlbmd0aHx8Yy5tYXRjaCgvWzEtOV0vKT8iLiIrYzoiIixsPWkuc2xpY2UoMCx1KS5qb2luKCIiKStmKyJlIisoMDw9bj8iKyI6IiIpK2EudG9TdHJpbmcoKTtyZXR1cm4gci5zaWduK2x9KGUscik7Y2FzZSJhdXRvIjppZighdHx8IXQuZXhwb25lbnRpYWx8fHZvaWQgMD09PXQuZXhwb25lbnRpYWwubG93ZXImJnZvaWQgMD09PXQuZXhwb25lbnRpYWwudXBwZXIpcmV0dXJuIHkoZSxyLHQmJnQpLnJlcGxhY2UoLygoXC5cZCo/KSgwKykpKCR8ZSkvLGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzWzJdLHQ9YXJndW1lbnRzWzRdO3JldHVybiIuIiE9PWU/ZSt0OnR9KTt2YXIgaT1PYmplY3QoYS5pKSh0LGZ1bmN0aW9uKGUpe3JldHVybiBlfSk7cmV0dXJuKGkuZXhwb25lbnRpYWw9dm9pZCAwKSE9PXQuZXhwb25lbnRpYWwubG93ZXImJihpLmxvd2VyRXhwPU1hdGgucm91bmQoTWF0aC5sb2codC5leHBvbmVudGlhbC5sb3dlcikvTWF0aC5MTjEwKSksdm9pZCAwIT09dC5leHBvbmVudGlhbC51cHBlciYmKGkudXBwZXJFeHA9TWF0aC5yb3VuZChNYXRoLmxvZyh0LmV4cG9uZW50aWFsLnVwcGVyKS9NYXRoLkxOMTApKSxjb25zb2xlLndhcm4oIkRlcHJlY2F0aW9uIHdhcm5pbmc6IEZvcm1hdHRpbmcgb3B0aW9ucyBleHBvbmVudGlhbC5sb3dlciBhbmQgZXhwb25lbnRpYWwudXBwZXIgKG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWUpIGFyZSByZXBsYWNlZCB3aXRoIGV4cG9uZW50aWFsLmxvd2VyRXhwIGFuZCBleHBvbmVudGlhbC51cHBlckV4cCAobWluaW11bSBhbmQgbWF4aW11bSBleHBvbmVudCkgc2luY2UgdmVyc2lvbiA0LjAuMC4gUmVwbGFjZSAiK0pTT04uc3RyaW5naWZ5KHQpKyIgd2l0aCAiK0pTT04uc3RyaW5naWZ5KGkpKSx5KGUscixpKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcignVW5rbm93biBub3RhdGlvbiAiJytuKyciLiBDaG9vc2UgImF1dG8iLCAiZXhwb25lbnRpYWwiLCBvciAiZml4ZWQiLicpfX1mdW5jdGlvbiBtKGUpe3ZhciB0PVN0cmluZyhlKS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eMCo/KC0/KShcZCtcLj9cZCopKGUoWystXT9cZCspKT8kLyk7aWYoIXQpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJJbnZhbGlkIG51bWJlciAiK2UpO3ZhciByPXRbMV0sbj10WzJdLGk9cGFyc2VGbG9hdCh0WzRdfHwiMCIpLGE9bi5pbmRleE9mKCIuIik7aSs9LTEhPT1hP2EtMTpuLmxlbmd0aC0xO3ZhciBvPW4ucmVwbGFjZSgiLiIsIiIpLnJlcGxhY2UoL14wKi8sZnVuY3Rpb24oZSl7cmV0dXJuIGktPWUubGVuZ3RoLCIifSkucmVwbGFjZSgvMCokLywiIikuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gcGFyc2VJbnQoZSl9KTtyZXR1cm4gMD09PW8ubGVuZ3RoJiYoby5wdXNoKDApLGkrKykse3NpZ246cixjb2VmZmljaWVudHM6byxleHBvbmVudDppfX1mdW5jdGlvbiBoKGUsdCl7aWYoaXNOYU4oZSl8fCFpc0Zpbml0ZShlKSlyZXR1cm4gU3RyaW5nKGUpO3ZhciByPW0oZSksbj0ibnVtYmVyIj09dHlwZW9mIHQ/ZyhyLHIuZXhwb25lbnQrMSt0KTpyLGk9bi5jb2VmZmljaWVudHMsYT1uLmV4cG9uZW50KzEsbz1hKyh0fHwwKTtyZXR1cm4gaS5sZW5ndGg8byYmKGk9aS5jb25jYXQodihvLWkubGVuZ3RoKSkpLGE8MCYmKGk9digxLWEpLmNvbmNhdChpKSxhPTEpLGE8aS5sZW5ndGgmJmkuc3BsaWNlKGEsMCwwPT09YT8iMC4iOiIuIiksbi5zaWduK2kuam9pbigiIil9ZnVuY3Rpb24gZChlLHQpe2lmKGlzTmFOKGUpfHwhaXNGaW5pdGUoZSkpcmV0dXJuIFN0cmluZyhlKTt2YXIgcj1tKGUpLG49dD9nKHIsdCk6cixpPW4uY29lZmZpY2llbnRzLGE9bi5leHBvbmVudDtpLmxlbmd0aDx0JiYoaT1pLmNvbmNhdCh2KHQtaS5sZW5ndGgpKSk7dmFyIG89aS5zaGlmdCgpO3JldHVybiBuLnNpZ24rbysoMDxpLmxlbmd0aD8iLiIraS5qb2luKCIiKToiIikrImUiKygwPD1hPyIrIjoiIikrYX1mdW5jdGlvbiB5KGUsdCxyKXtpZihpc05hTihlKXx8IWlzRmluaXRlKGUpKXJldHVybiBTdHJpbmcoZSk7dmFyIG49ciYmdm9pZCAwIT09ci5sb3dlckV4cD9yLmxvd2VyRXhwOi0zLGk9ciYmdm9pZCAwIT09ci51cHBlckV4cD9yLnVwcGVyRXhwOjUsYT1tKGUpLG89dD9nKGEsdCk6YTtpZihvLmV4cG9uZW50PG58fG8uZXhwb25lbnQ+PWkpcmV0dXJuIGQoZSx0KTt2YXIgcz1vLmNvZWZmaWNpZW50cyx1PW8uZXhwb25lbnQ7cy5sZW5ndGg8dCYmKHM9cy5jb25jYXQodih0LXMubGVuZ3RoKSkpLHM9cy5jb25jYXQodih1LXMubGVuZ3RoKzErKHMubGVuZ3RoPHQ/dC1zLmxlbmd0aDowKSkpO3ZhciBjPTA8dT91OjA7cmV0dXJuIGM8KHM9digtdSkuY29uY2F0KHMpKS5sZW5ndGgtMSYmcy5zcGxpY2UoYysxLDAsIi4iKSxvLnNpZ24rcy5qb2luKCIiKX1mdW5jdGlvbiBnKGUsdCl7Zm9yKHZhciByPXtzaWduOmUuc2lnbixjb2VmZmljaWVudHM6ZS5jb2VmZmljaWVudHMsZXhwb25lbnQ6ZS5leHBvbmVudH0sbj1yLmNvZWZmaWNpZW50czt0PD0wOyluLnVuc2hpZnQoMCksci5leHBvbmVudCsrLHQrKztpZihuLmxlbmd0aD50JiY1PD1uLnNwbGljZSh0LG4ubGVuZ3RoLXQpWzBdKXt2YXIgaT10LTE7Zm9yKG5baV0rKzsxMD09PW5baV07KW4ucG9wKCksMD09PWkmJihuLnVuc2hpZnQoMCksci5leHBvbmVudCsrLGkrKyksblstLWldKyt9cmV0dXJuIHJ9ZnVuY3Rpb24gdihlKXtmb3IodmFyIHQ9W10scj0wO3I8ZTtyKyspdC5wdXNoKDApO3JldHVybiB0fWZ1bmN0aW9uIGIoZSl7cmV0dXJuIGUudG9FeHBvbmVudGlhbCgpLnJlcGxhY2UoL2UuKiQvLCIiKS5yZXBsYWNlKC9eMFwuPzAqfFwuLywiIikubGVuZ3RofXZhciB4PU51bWJlci5FUFNJTE9OfHwyMjIwNDQ2MDQ5MjUwMzEzZS0zMTtmdW5jdGlvbiB3KGUsdCxyKXtpZihudWxsPT1yKXJldHVybiBlPT09dDtpZihlPT09dClyZXR1cm4hMDtpZihpc05hTihlKXx8aXNOYU4odCkpcmV0dXJuITE7aWYoaXNGaW5pdGUoZSkmJmlzRmluaXRlKHQpKXt2YXIgbj1NYXRoLmFicyhlLXQpO3JldHVybiBuPHh8fG48PU1hdGgubWF4KE1hdGguYWJzKGUpLE1hdGguYWJzKHQpKSpyfXJldHVybiExfXZhciBOPU1hdGguYWNvc2h8fGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmxvZyhNYXRoLnNxcnQoZSplLTEpK2UpfSxPPU1hdGguYXNpbmh8fGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmxvZyhNYXRoLnNxcnQoZSplKzEpK2UpfSxNPU1hdGguYXRhbmh8fGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmxvZygoMStlKS8oMS1lKSkvMn0saj1NYXRoLmNvc2h8fGZ1bmN0aW9uKGUpe3JldHVybihNYXRoLmV4cChlKStNYXRoLmV4cCgtZSkpLzJ9LEU9TWF0aC5zaW5ofHxmdW5jdGlvbihlKXtyZXR1cm4oTWF0aC5leHAoZSktTWF0aC5leHAoLWUpKS8yfSxTPU1hdGgudGFuaHx8ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5leHAoMiplKTtyZXR1cm4odC0xKS8odCsxKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxKSxpPXIoNCksZj1yKDMpO2Z1bmN0aW9uIGwoZSx0KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gdChlKTtpZighZS5pc0Zpbml0ZSgpKXJldHVybiBlLmlzTmFOKCk/Ik5hTiI6ZS5ndCgwKT8iSW5maW5pdHkiOiItSW5maW5pdHkiO3ZhciByLG4saT0iYXV0byI7c3dpdGNoKHZvaWQgMCE9PXQmJih0Lm5vdGF0aW9uJiYoaT10Lm5vdGF0aW9uKSwibnVtYmVyIj09dHlwZW9mIHQ/cj10OnQucHJlY2lzaW9uJiYocj10LnByZWNpc2lvbikpLGkpe2Nhc2UiZml4ZWQiOnJldHVybiBuPXIsZS50b0ZpeGVkKG4pO2Nhc2UiZXhwb25lbnRpYWwiOnJldHVybiBwKGUscik7Y2FzZSJlbmdpbmVlcmluZyI6cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5lLG49ciUzPT0wP3I6cjwwP3ItMy1yJTM6ci1yJTMsaT1lLm11bChNYXRoLnBvdygxMCwtbikpLGE9aS50b1ByZWNpc2lvbih0KTstMSE9PWEuaW5kZXhPZigiZSIpJiYoYT1pLnRvU3RyaW5nKCkpO3JldHVybiBhKyJlIisoMDw9cj8iKyI6IiIpK24udG9TdHJpbmcoKX0oZSxyKTtjYXNlImF1dG8iOmlmKHQmJnQuZXhwb25lbnRpYWwmJih2b2lkIDAhPT10LmV4cG9uZW50aWFsLmxvd2VyfHx2b2lkIDAhPT10LmV4cG9uZW50aWFsLnVwcGVyKSl7dmFyIGE9T2JqZWN0KGYuaSkodCxmdW5jdGlvbihlKXtyZXR1cm4gZX0pO3JldHVybihhLmV4cG9uZW50aWFsPXZvaWQgMCkhPT10LmV4cG9uZW50aWFsLmxvd2VyJiYoYS5sb3dlckV4cD1NYXRoLnJvdW5kKE1hdGgubG9nKHQuZXhwb25lbnRpYWwubG93ZXIpL01hdGguTE4xMCkpLHZvaWQgMCE9PXQuZXhwb25lbnRpYWwudXBwZXImJihhLnVwcGVyRXhwPU1hdGgucm91bmQoTWF0aC5sb2codC5leHBvbmVudGlhbC51cHBlcikvTWF0aC5MTjEwKSksY29uc29sZS53YXJuKCJEZXByZWNhdGlvbiB3YXJuaW5nOiBGb3JtYXR0aW5nIG9wdGlvbnMgZXhwb25lbnRpYWwubG93ZXIgYW5kIGV4cG9uZW50aWFsLnVwcGVyIChtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlKSBhcmUgcmVwbGFjZWQgd2l0aCBleHBvbmVudGlhbC5sb3dlckV4cCBhbmQgZXhwb25lbnRpYWwudXBwZXJFeHAgKG1pbmltdW0gYW5kIG1heGltdW0gZXhwb25lbnQpIHNpbmNlIHZlcnNpb24gNC4wLjAuIFJlcGxhY2UgIitKU09OLnN0cmluZ2lmeSh0KSsiIHdpdGggIitKU09OLnN0cmluZ2lmeShhKSksbChlLGEpfXZhciBvPXQmJnZvaWQgMCE9PXQubG93ZXJFeHA/dC5sb3dlckV4cDotMyxzPXQmJnZvaWQgMCE9PXQudXBwZXJFeHA/dC51cHBlckV4cDo1O2lmKGUuaXNaZXJvKCkpcmV0dXJuIjAiO3ZhciB1PWUudG9TaWduaWZpY2FudERpZ2l0cyhyKSxjPXUuZTtyZXR1cm4obzw9YyYmYzxzP3UudG9GaXhlZCgpOnAoZSxyKSkucmVwbGFjZSgvKChcLlxkKj8pKDArKSkoJHxlKS8sZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHNbMl0sdD1hcmd1bWVudHNbNF07cmV0dXJuIi4iIT09ZT9lK3Q6dH0pO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdVbmtub3duIG5vdGF0aW9uICInK2krJyIuIENob29zZSAiYXV0byIsICJleHBvbmVudGlhbCIsIG9yICJmaXhlZCIuJyl9fWZ1bmN0aW9uIHAoZSx0KXtyZXR1cm4gdm9pZCAwIT09dD9lLnRvRXhwb25lbnRpYWwodC0xKTplLnRvRXhwb25lbnRpYWwoKX1mdW5jdGlvbiBhKGUpe3JldHVybihhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gbyhlLHQpe3ZhciByPWUubGVuZ3RoLXQubGVuZ3RoLG49ZS5sZW5ndGg7cmV0dXJuIGUuc3Vic3RyaW5nKHIsbik9PT10fWZ1bmN0aW9uIHModCxyKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/T2JqZWN0KGkuaCkodCxyKTpPYmplY3Qobi5lKSh0KT9sKHQscik6KGU9dCkmJiJvYmplY3QiPT09YShlKSYmIm51bWJlciI9PXR5cGVvZiBlLnMmJiJudW1iZXIiPT10eXBlb2YgZS5uJiYibnVtYmVyIj09dHlwZW9mIGUuZD9yJiYiZGVjaW1hbCI9PT1yLmZyYWN0aW9uP3QudG9TdHJpbmcoKTp0LnMqdC5uKyIvIit0LmQ6QXJyYXkuaXNBcnJheSh0KT9mdW5jdGlvbiBlKHQscil7e2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgbj0iWyIsaT10Lmxlbmd0aCxhPTA7YTxpO2ErKykwIT09YSYmKG4rPSIsICIpLG4rPWUodFthXSxyKTtyZXR1cm4gbis9Il0ifXJldHVybiBzKHQscil9fSh0LHIpOk9iamVjdChuLkkpKHQpPyciJyt0KyciJzoiZnVuY3Rpb24iPT10eXBlb2YgdD90LnN5bnRheD9TdHJpbmcodC5zeW50YXgpOiJmdW5jdGlvbiI6dCYmIm9iamVjdCI9PT1hKHQpPyJmdW5jdGlvbiI9PXR5cGVvZiB0LmZvcm1hdD90LmZvcm1hdChyKTp0JiZ0LnRvU3RyaW5nKHIpIT09e30udG9TdHJpbmcoKT90LnRvU3RyaW5nKHIpOiJ7IitPYmplY3Qua2V5cyh0KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuJyInK2UrJyI6ICcrcyh0W2VdLHIpfSkuam9pbigiLCAiKSsifSI6U3RyaW5nKHQpO3ZhciBlfWZ1bmN0aW9uIHUoZSl7Zm9yKHZhciB0PVN0cmluZyhlKSxyPSIiLG49MDtuPHQubGVuZ3RoOyl7dmFyIGk9dC5jaGFyQXQobik7IlxcIj09PWk/KHIrPWksbisrLCIiIT09KGk9dC5jaGFyQXQobikpJiYtMSE9PSciXFwvYmZucnR1Jy5pbmRleE9mKGkpfHwocis9IlxcIikscis9aSk6cis9JyInPT09aT8nXFwiJzppLG4rK31yZXR1cm4nIicrcisnIid9ZnVuY3Rpb24gYyhlKXt2YXIgdD1TdHJpbmcoZSk7cmV0dXJuIHQ9dC5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKS5yZXBsYWNlKC8nL2csIiYjMzk7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iil9ZnVuY3Rpb24gbShlLHQpe2lmKCFPYmplY3Qobi5JKShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmV4cGVjdGVkIHR5cGUgb2YgYXJndW1lbnQgaW4gZnVuY3Rpb24gY29tcGFyZVRleHQgKGV4cGVjdGVkOiBzdHJpbmcgb3IgQXJyYXkgb3IgTWF0cml4LCBhY3R1YWw6ICIrT2JqZWN0KG4uTSkoZSkrIiwgaW5kZXg6IDApIik7aWYoIU9iamVjdChuLkkpKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiBjb21wYXJlVGV4dCAoZXhwZWN0ZWQ6IHN0cmluZyBvciBBcnJheSBvciBNYXRyaXgsIGFjdHVhbDogIitPYmplY3Qobi5NKSh0KSsiLCBpbmRleDogMSkiKTtyZXR1cm4gZT09PXQ/MDp0PGU/MTotMX1yLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLHIuZCh0LCJkIixmdW5jdGlvbigpe3JldHVybiBzfSksci5kKHQsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxyLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLHIuZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBtfSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQscil7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3IiKTt0aGlzLmFjdHVhbD1lLHRoaXMuZXhwZWN0ZWQ9dCx0aGlzLnJlbGF0aW9uPXIsdGhpcy5tZXNzYWdlPSJEaW1lbnNpb24gbWlzbWF0Y2ggKCIrKEFycmF5LmlzQXJyYXkoZSk/IlsiK2Uuam9pbigiLCAiKSsiXSI6ZSkrIiAiKyh0aGlzLnJlbGF0aW9ufHwiIT0iKSsiICIrKEFycmF5LmlzQXJyYXkodCk/IlsiK3Quam9pbigiLCAiKSsiXSI6dCkrIikiLHRoaXMuc3RhY2s9KG5ldyBFcnJvcikuc3RhY2t9ci5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG59KSwobi5wcm90b3R5cGU9bmV3IFJhbmdlRXJyb3IpLmNvbnN0cnVjdG9yPVJhbmdlRXJyb3Isbi5wcm90b3R5cGUubmFtZT0iRGltZW5zaW9uRXJyb3IiLG4ucHJvdG90eXBlLmlzRGltZW5zaW9uRXJyb3I9ITB9LCxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IuZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBufSk7dmFyIGEsbj0oYT17fSxmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3ZhciBuLGk9dC5qb2luKCIsICIpO2FbaV18fChhW2ldPSEwLChuPWNvbnNvbGUpLndhcm4uYXBwbHkobixbIldhcm5pbmc6Il0uY29uY2F0KHQpKSl9KX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBvOwovKioKICogQGxpY2Vuc2UgQ29tcGxleC5qcyB2Mi4wLjExIDExLzAyLzIwMTYKICoKICogQ29weXJpZ2h0IChjKSAyMDE2LCBSb2JlcnQgRWlzZWxlIChyb2JlcnRAeGFyZy5vcmcpCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLgogKiovCiFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybi41KihNYXRoLmV4cChlKStNYXRoLmV4cCgtZSkpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuLjUqKE1hdGguZXhwKGUpLU1hdGguZXhwKC1lKSl9ZnVuY3Rpb24gdSgpe3Rocm93IFN5bnRheEVycm9yKCJJbnZhbGlkIFBhcmFtIil9ZnVuY3Rpb24gYyhlLHQpe3ZhciByPU1hdGguYWJzKGUpLG49TWF0aC5hYnModCk7cmV0dXJuIDA9PT1lP01hdGgubG9nKG4pOjA9PT10P01hdGgubG9nKHIpOnI8M2UzJiZuPDNlMz8uNSpNYXRoLmxvZyhlKmUrdCp0KTpNYXRoLmxvZyhlL01hdGguY29zKE1hdGguYXRhbjIodCxlKSkpfXZhciBhPWZ1bmN0aW9uKGUsdCl7dmFyIHI9e3JlOjAsaW06MH07aWYobnVsbD09ZSlyLnJlPXIuaW09MDtlbHNlIGlmKHZvaWQgMCE9PXQpci5yZT1lLHIuaW09dDtlbHNlIHN3aXRjaCh0eXBlb2YgZSl7Y2FzZSJvYmplY3QiOmlmKCJpbSJpbiBlJiYicmUiaW4gZSlyLnJlPWUucmUsci5pbT1lLmltO2Vsc2UgaWYoImFicyJpbiBlJiYiYXJnImluIGUpe2lmKCFOdW1iZXIuaXNGaW5pdGUoZS5hYnMpJiZOdW1iZXIuaXNGaW5pdGUoZS5hcmcpKXJldHVybiBmLklORklOSVRZO3IucmU9ZS5hYnMqTWF0aC5jb3MoZS5hcmcpLHIuaW09ZS5hYnMqTWF0aC5zaW4oZS5hcmcpfWVsc2UgaWYoInIiaW4gZSYmInBoaSJpbiBlKXtpZighTnVtYmVyLmlzRmluaXRlKGUucikmJk51bWJlci5pc0Zpbml0ZShlLnBoaSkpcmV0dXJuIGYuSU5GSU5JVFk7ci5yZT1lLnIqTWF0aC5jb3MoZS5waGkpLHIuaW09ZS5yKk1hdGguc2luKGUucGhpKX1lbHNlIDI9PT1lLmxlbmd0aD8oci5yZT1lWzBdLHIuaW09ZVsxXSk6dSgpO2JyZWFrO2Nhc2Uic3RyaW5nIjpyLmltPXIucmU9MDt2YXIgbj1lLm1hdGNoKC9cZCtcLj9cZCplWystXT9cZCt8XGQrXC4/XGQqfFwuXGQrfC4vZyksaT0xLGE9MDtudWxsPT09biYmdSgpO2Zvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXt2YXIgcz1uW29dOyIgIj09PXN8fCJcdCI9PT1zfHwiXG4iPT09c3x8KCIrIj09PXM/aSsrOiItIj09PXM/YSsrOmk9YT0oImkiPT09c3x8IkkiPT09cz8oaSthPT09MCYmdSgpLCIgIj09PW5bbysxXXx8aXNOYU4obltvKzFdKT9yLmltKz1wYXJzZUZsb2F0KChhJTI/Ii0iOiIiKSsiMSIpOihyLmltKz1wYXJzZUZsb2F0KChhJTI/Ii0iOiIiKStuW28rMV0pLG8rKykpOihpK2EhPT0wJiYhaXNOYU4ocyl8fHUoKSwiaSI9PT1uW28rMV18fCJJIj09PW5bbysxXT8oci5pbSs9cGFyc2VGbG9hdCgoYSUyPyItIjoiIikrcyksbysrKTpyLnJlKz1wYXJzZUZsb2F0KChhJTI/Ii0iOiIiKStzKSksMCkpfTA8aSthJiZ1KCk7YnJlYWs7Y2FzZSJudW1iZXIiOnIuaW09MCxyLnJlPWU7YnJlYWs7ZGVmYXVsdDp1KCl9cmV0dXJuIGlzTmFOKHIucmUpfHxpc05hTihyLmltKSxyfTtmdW5jdGlvbiBmKGUsdCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZikpcmV0dXJuIG5ldyBmKGUsdCk7dmFyIHI9YShlLHQpO3RoaXMucmU9ci5yZSx0aGlzLmltPXIuaW19Zi5wcm90b3R5cGU9e3JlOjAsaW06MCxzaWduOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5hYnMoKTtyZXR1cm4gbmV3IGYodGhpcy5yZS9lLHRoaXMuaW0vZSl9LGFkZDpmdW5jdGlvbihlLHQpe3ZhciByPW5ldyBmKGUsdCk7cmV0dXJuIHRoaXMuaXNJbmZpbml0ZSgpJiZyLmlzSW5maW5pdGUoKT9mLk5BTjp0aGlzLmlzSW5maW5pdGUoKXx8ci5pc0luZmluaXRlKCk/Zi5JTkZJTklUWTpuZXcgZih0aGlzLnJlK3IucmUsdGhpcy5pbStyLmltKX0sc3ViOmZ1bmN0aW9uKGUsdCl7dmFyIHI9bmV3IGYoZSx0KTtyZXR1cm4gdGhpcy5pc0luZmluaXRlKCkmJnIuaXNJbmZpbml0ZSgpP2YuTkFOOnRoaXMuaXNJbmZpbml0ZSgpfHxyLmlzSW5maW5pdGUoKT9mLklORklOSVRZOm5ldyBmKHRoaXMucmUtci5yZSx0aGlzLmltLXIuaW0pfSxtdWw6ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgZihlLHQpO3JldHVybiB0aGlzLmlzSW5maW5pdGUoKSYmci5pc1plcm8oKXx8dGhpcy5pc1plcm8oKSYmci5pc0luZmluaXRlKCk/Zi5OQU46dGhpcy5pc0luZmluaXRlKCl8fHIuaXNJbmZpbml0ZSgpP2YuSU5GSU5JVFk6MD09PXIuaW0mJjA9PT10aGlzLmltP25ldyBmKHRoaXMucmUqci5yZSwwKTpuZXcgZih0aGlzLnJlKnIucmUtdGhpcy5pbSpyLmltLHRoaXMucmUqci5pbSt0aGlzLmltKnIucmUpfSxkaXY6ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgZihlLHQpO2lmKHRoaXMuaXNaZXJvKCkmJnIuaXNaZXJvKCl8fHRoaXMuaXNJbmZpbml0ZSgpJiZyLmlzSW5maW5pdGUoKSlyZXR1cm4gZi5OQU47aWYodGhpcy5pc0luZmluaXRlKCl8fHIuaXNaZXJvKCkpcmV0dXJuIGYuSU5GSU5JVFk7aWYodGhpcy5pc1plcm8oKXx8ci5pc0luZmluaXRlKCkpcmV0dXJuIGYuWkVSTztlPXRoaXMucmUsdD10aGlzLmltO3ZhciBuLGksYT1yLnJlLG89ci5pbTtyZXR1cm4gMD09PW8/bmV3IGYoZS9hLHQvYSk6TWF0aC5hYnMoYSk8TWF0aC5hYnMobyk/bmV3IGYoKGUqKGk9YS9vKSt0KS8obj1hKmkrbyksKHQqaS1lKS9uKTpuZXcgZigoZSt0KihpPW8vYSkpLyhuPW8qaSthKSwodC1lKmkpL24pfSxwb3c6ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgZihlLHQpO2lmKGU9dGhpcy5yZSx0PXRoaXMuaW0sci5pc1plcm8oKSlyZXR1cm4gZi5PTkU7aWYoMD09PXIuaW0pe2lmKDA9PT10JiYwPD1lKXJldHVybiBuZXcgZihNYXRoLnBvdyhlLHIucmUpLDApO2lmKDA9PT1lKXN3aXRjaCgoci5yZSU0KzQpJTQpe2Nhc2UgMDpyZXR1cm4gbmV3IGYoTWF0aC5wb3codCxyLnJlKSwwKTtjYXNlIDE6cmV0dXJuIG5ldyBmKDAsTWF0aC5wb3codCxyLnJlKSk7Y2FzZSAyOnJldHVybiBuZXcgZigtTWF0aC5wb3codCxyLnJlKSwwKTtjYXNlIDM6cmV0dXJuIG5ldyBmKDAsLU1hdGgucG93KHQsci5yZSkpfX1pZigwPT09ZSYmMD09PXQmJjA8ci5yZSYmMDw9ci5pbSlyZXR1cm4gZi5aRVJPO3ZhciBuPU1hdGguYXRhbjIodCxlKSxpPWMoZSx0KTtyZXR1cm4gZT1NYXRoLmV4cChyLnJlKmktci5pbSpuKSx0PXIuaW0qaStyLnJlKm4sbmV3IGYoZSpNYXRoLmNvcyh0KSxlKk1hdGguc2luKHQpKX0sc3FydDpmdW5jdGlvbigpe3ZhciBlLHQscj10aGlzLnJlLG49dGhpcy5pbSxpPXRoaXMuYWJzKCk7aWYoMDw9cil7aWYoMD09PW4pcmV0dXJuIG5ldyBmKE1hdGguc3FydChyKSwwKTtlPS41Kk1hdGguc3FydCgyKihpK3IpKX1lbHNlIGU9TWF0aC5hYnMobikvTWF0aC5zcXJ0KDIqKGktcikpO3JldHVybiB0PXI8PTA/LjUqTWF0aC5zcXJ0KDIqKGktcikpOk1hdGguYWJzKG4pL01hdGguc3FydCgyKihpK3IpKSxuZXcgZihlLG48MD8tdDp0KX0sZXhwOmZ1bmN0aW9uKCl7dmFyIGU9TWF0aC5leHAodGhpcy5yZSk7cmV0dXJuIHRoaXMuaW0sbmV3IGYoZSpNYXRoLmNvcyh0aGlzLmltKSxlKk1hdGguc2luKHRoaXMuaW0pKX0sZXhwbTE6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlLHQ9dGhpcy5pbTtyZXR1cm4gbmV3IGYoTWF0aC5leHBtMShlKSpNYXRoLmNvcyh0KStmdW5jdGlvbihlKXt2YXIgdD1NYXRoLlBJLzQ7aWYoZTwtdHx8dDxlKXJldHVybiBNYXRoLmNvcyhlKS0xO3ZhciByPWUqZTtyZXR1cm4gcioociooMS8yNCtyKigtMS83MjArciooMS80MDMyMCtyKigtMS8zNjI4ODAwK3IqKDEvNDc5MDAxNDYwMCtyKigtMS84NzE3ODI5MTIwMCsxLzIwOTIyNzg5ODg4ZTMqcikpKSkpKS0uNSl9KHQpLE1hdGguZXhwKGUpKk1hdGguc2luKHQpKX0sbG9nOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZSx0PXRoaXMuaW07cmV0dXJuIG5ldyBmKGMoZSx0KSxNYXRoLmF0YW4yKHQsZSkpfSxhYnM6ZnVuY3Rpb24oKXtyZXR1cm4gZT10aGlzLnJlLHQ9dGhpcy5pbSxyPU1hdGguYWJzKGUpLG49TWF0aC5hYnModCkscjwzZTMmJm48M2UzP01hdGguc3FydChyKnIrbipuKToobj1yPG4/KHI9bixlL3QpOnQvZSxyKk1hdGguc3FydCgxK24qbikpO3ZhciBlLHQscixufSxhcmc6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5hdGFuMih0aGlzLmltLHRoaXMucmUpfSxzaW46ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlLHQ9dGhpcy5pbTtyZXR1cm4gbmV3IGYoTWF0aC5zaW4oZSkqbih0KSxNYXRoLmNvcyhlKSppKHQpKX0sY29zOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZSx0PXRoaXMuaW07cmV0dXJuIG5ldyBmKE1hdGguY29zKGUpKm4odCksLU1hdGguc2luKGUpKmkodCkpfSx0YW46ZnVuY3Rpb24oKXt2YXIgZT0yKnRoaXMucmUsdD0yKnRoaXMuaW0scj1NYXRoLmNvcyhlKStuKHQpO3JldHVybiBuZXcgZihNYXRoLnNpbihlKS9yLGkodCkvcil9LGNvdDpmdW5jdGlvbigpe3ZhciBlPTIqdGhpcy5yZSx0PTIqdGhpcy5pbSxyPU1hdGguY29zKGUpLW4odCk7cmV0dXJuIG5ldyBmKC1NYXRoLnNpbihlKS9yLGkodCkvcil9LHNlYzpmdW5jdGlvbigpe3ZhciBlPXRoaXMucmUsdD10aGlzLmltLHI9LjUqbigyKnQpKy41Kk1hdGguY29zKDIqZSk7cmV0dXJuIG5ldyBmKE1hdGguY29zKGUpKm4odCkvcixNYXRoLnNpbihlKSppKHQpL3IpfSxjc2M6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlLHQ9dGhpcy5pbSxyPS41Km4oMip0KS0uNSpNYXRoLmNvcygyKmUpO3JldHVybiBuZXcgZihNYXRoLnNpbihlKSpuKHQpL3IsLU1hdGguY29zKGUpKmkodCkvcil9LGFzaW46ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlLHQ9dGhpcy5pbSxyPW5ldyBmKHQqdC1lKmUrMSwtMiplKnQpLnNxcnQoKSxuPW5ldyBmKHIucmUtdCxyLmltK2UpLmxvZygpO3JldHVybiBuZXcgZihuLmltLC1uLnJlKX0sYWNvczpmdW5jdGlvbigpe3ZhciBlPXRoaXMucmUsdD10aGlzLmltLHI9bmV3IGYodCp0LWUqZSsxLC0yKmUqdCkuc3FydCgpLG49bmV3IGYoci5yZS10LHIuaW0rZSkubG9nKCk7cmV0dXJuIG5ldyBmKE1hdGguUEkvMi1uLmltLG4ucmUpfSxhdGFuOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZSx0PXRoaXMuaW07aWYoMD09PWUpe2lmKDE9PT10KXJldHVybiBuZXcgZigwLDEvMCk7aWYoLTE9PT10KXJldHVybiBuZXcgZigwLC0xLzApfXZhciByPWUqZSsoMS10KSooMS10KSxuPW5ldyBmKCgxLXQqdC1lKmUpL3IsLTIqZS9yKS5sb2coKTtyZXR1cm4gbmV3IGYoLS41Km4uaW0sLjUqbi5yZSl9LGFjb3Q6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlLHQ9dGhpcy5pbTtpZigwPT09dClyZXR1cm4gbmV3IGYoTWF0aC5hdGFuMigxLGUpLDApO3ZhciByPWUqZSt0KnQ7cmV0dXJuIDAhPXI/bmV3IGYoZS9yLC10L3IpLmF0YW4oKTpuZXcgZigwIT09ZT9lLzA6MCwwIT09dD8tdC8wOjApLmF0YW4oKX0sYXNlYzpmdW5jdGlvbigpe3ZhciBlPXRoaXMucmUsdD10aGlzLmltO2lmKDA9PT1lJiYwPT09dClyZXR1cm4gbmV3IGYoMCwxLzApO3ZhciByPWUqZSt0KnQ7cmV0dXJuIDAhPXI/bmV3IGYoZS9yLC10L3IpLmFjb3MoKTpuZXcgZigwIT09ZT9lLzA6MCwwIT09dD8tdC8wOjApLmFjb3MoKX0sYWNzYzpmdW5jdGlvbigpe3ZhciBlPXRoaXMucmUsdD10aGlzLmltO2lmKDA9PT1lJiYwPT09dClyZXR1cm4gbmV3IGYoTWF0aC5QSS8yLDEvMCk7dmFyIHI9ZSplK3QqdDtyZXR1cm4gMCE9cj9uZXcgZihlL3IsLXQvcikuYXNpbigpOm5ldyBmKDAhPT1lP2UvMDowLDAhPT10Py10LzA6MCkuYXNpbigpfSxzaW5oOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZSx0PXRoaXMuaW07cmV0dXJuIG5ldyBmKGkoZSkqTWF0aC5jb3ModCksbihlKSpNYXRoLnNpbih0KSl9LGNvc2g6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlLHQ9dGhpcy5pbTtyZXR1cm4gbmV3IGYobihlKSpNYXRoLmNvcyh0KSxpKGUpKk1hdGguc2luKHQpKX0sdGFuaDpmdW5jdGlvbigpe3ZhciBlPTIqdGhpcy5yZSx0PTIqdGhpcy5pbSxyPW4oZSkrTWF0aC5jb3ModCk7cmV0dXJuIG5ldyBmKGkoZSkvcixNYXRoLnNpbih0KS9yKX0sY290aDpmdW5jdGlvbigpe3ZhciBlPTIqdGhpcy5yZSx0PTIqdGhpcy5pbSxyPW4oZSktTWF0aC5jb3ModCk7cmV0dXJuIG5ldyBmKGkoZSkvciwtTWF0aC5zaW4odCkvcil9LGNzY2g6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlLHQ9dGhpcy5pbSxyPU1hdGguY29zKDIqdCktbigyKmUpO3JldHVybiBuZXcgZigtMippKGUpKk1hdGguY29zKHQpL3IsMipuKGUpKk1hdGguc2luKHQpL3IpfSxzZWNoOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZSx0PXRoaXMuaW0scj1NYXRoLmNvcygyKnQpK24oMiplKTtyZXR1cm4gbmV3IGYoMipuKGUpKk1hdGguY29zKHQpL3IsLTIqaShlKSpNYXRoLnNpbih0KS9yKX0sYXNpbmg6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmltO3RoaXMuaW09LXRoaXMucmUsdGhpcy5yZT1lO3ZhciB0PXRoaXMuYXNpbigpO3JldHVybiB0aGlzLnJlPS10aGlzLmltLHRoaXMuaW09ZSxlPXQucmUsdC5yZT0tdC5pbSx0LmltPWUsdH0sYWNvc2g6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmFjb3MoKTtpZihlLmltPD0wKXt2YXIgdD1lLnJlO2UucmU9LWUuaW0sZS5pbT10fWVsc2V7dD1lLmltO2UuaW09LWUucmUsZS5yZT10fXJldHVybiBlfSxhdGFuaDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucmUsdD10aGlzLmltLHI9MTxlJiYwPT09dCxuPTEtZSxpPTErZSxhPW4qbit0KnQsbz0wIT1hP25ldyBmKChpKm4tdCp0KS9hLCh0Km4raSp0KS9hKTpuZXcgZigtMSE9PWU/ZS8wOjAsMCE9PXQ/dC8wOjApLHM9by5yZTtyZXR1cm4gby5yZT1jKG8ucmUsby5pbSkvMixvLmltPU1hdGguYXRhbjIoby5pbSxzKS8yLHImJihvLmltPS1vLmltKSxvfSxhY290aDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucmUsdD10aGlzLmltO2lmKDA9PT1lJiYwPT09dClyZXR1cm4gbmV3IGYoMCxNYXRoLlBJLzIpO3ZhciByPWUqZSt0KnQ7cmV0dXJuIDAhPXI/bmV3IGYoZS9yLC10L3IpLmF0YW5oKCk6bmV3IGYoMCE9PWU/ZS8wOjAsMCE9PXQ/LXQvMDowKS5hdGFuaCgpfSxhY3NjaDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucmUsdD10aGlzLmltO2lmKDA9PT10KXJldHVybiBuZXcgZigwIT09ZT9NYXRoLmxvZyhlK01hdGguc3FydChlKmUrMSkpOjEvMCwwKTt2YXIgcj1lKmUrdCp0O3JldHVybiAwIT1yP25ldyBmKGUvciwtdC9yKS5hc2luaCgpOm5ldyBmKDAhPT1lP2UvMDowLDAhPT10Py10LzA6MCkuYXNpbmgoKX0sYXNlY2g6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlLHQ9dGhpcy5pbTtpZih0aGlzLmlzWmVybygpKXJldHVybiBmLklORklOSVRZO3ZhciByPWUqZSt0KnQ7cmV0dXJuIDAhPXI/bmV3IGYoZS9yLC10L3IpLmFjb3NoKCk6bmV3IGYoMCE9PWU/ZS8wOjAsMCE9PXQ/LXQvMDowKS5hY29zaCgpfSxpbnZlcnNlOmZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZi5JTkZJTklUWTtpZih0aGlzLmlzSW5maW5pdGUoKSlyZXR1cm4gZi5aRVJPO3ZhciBlPXRoaXMucmUsdD10aGlzLmltLHI9ZSplK3QqdDtyZXR1cm4gbmV3IGYoZS9yLC10L3IpfSxjb25qdWdhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGYodGhpcy5yZSwtdGhpcy5pbSl9LG5lZzpmdW5jdGlvbigpe3JldHVybiBuZXcgZigtdGhpcy5yZSwtdGhpcy5pbSl9LGNlaWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TWF0aC5wb3coMTAsZXx8MCksbmV3IGYoTWF0aC5jZWlsKHRoaXMucmUqZSkvZSxNYXRoLmNlaWwodGhpcy5pbSplKS9lKX0sZmxvb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TWF0aC5wb3coMTAsZXx8MCksbmV3IGYoTWF0aC5mbG9vcih0aGlzLnJlKmUpL2UsTWF0aC5mbG9vcih0aGlzLmltKmUpL2UpfSxyb3VuZDpmdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLnBvdygxMCxlfHwwKSxuZXcgZihNYXRoLnJvdW5kKHRoaXMucmUqZSkvZSxNYXRoLnJvdW5kKHRoaXMuaW0qZSkvZSl9LGVxdWFsczpmdW5jdGlvbihlLHQpe3ZhciByPW5ldyBmKGUsdCk7cmV0dXJuIE1hdGguYWJzKHIucmUtdGhpcy5yZSk8PWYuRVBTSUxPTiYmTWF0aC5hYnMoci5pbS10aGlzLmltKTw9Zi5FUFNJTE9OfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgZih0aGlzLnJlLHRoaXMuaW0pfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPXRoaXMucmUsdD10aGlzLmltLHI9IiI7cmV0dXJuIHRoaXMuaXNOYU4oKT8iTmFOIjp0aGlzLmlzWmVybygpPyIwIjp0aGlzLmlzSW5maW5pdGUoKT8iSW5maW5pdHkiOigwIT09ZSYmKHIrPWUpLDAhPT10JiYoMCE9PWU/cis9dDwwPyIgLSAiOiIgKyAiOnQ8MCYmKHIrPSItIiksMSE9PSh0PU1hdGguYWJzKHQpKSYmKHIrPXQpLHIrPSJpIikscnx8IjAiKX0sdG9WZWN0b3I6ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5yZSx0aGlzLmltXX0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5pbT90aGlzLnJlOm51bGx9LGlzTmFOOmZ1bmN0aW9uKCl7cmV0dXJuIGlzTmFOKHRoaXMucmUpfHxpc05hTih0aGlzLmltKX0saXNaZXJvOmZ1bmN0aW9uKCl7cmV0dXJuISgwIT09dGhpcy5yZSYmLTAhPT10aGlzLnJlfHwwIT09dGhpcy5pbSYmLTAhPT10aGlzLmltKX0saXNGaW5pdGU6ZnVuY3Rpb24oKXtyZXR1cm4gaXNGaW5pdGUodGhpcy5yZSkmJmlzRmluaXRlKHRoaXMuaW0pfSxpc0luZmluaXRlOmZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLmlzTmFOKCl8fHRoaXMuaXNGaW5pdGUoKSl9fSxmLlpFUk89bmV3IGYoMCwwKSxmLk9ORT1uZXcgZigxLDApLGYuST1uZXcgZigwLDEpLGYuUEk9bmV3IGYoTWF0aC5QSSwwKSxmLkU9bmV3IGYoTWF0aC5FLDApLGYuSU5GSU5JVFk9bmV3IGYoMS8wLDEvMCksZi5OQU49bmV3IGYoTmFOLE5hTiksZi5FUFNJTE9OPTFlLTE2LHZvaWQgMD09PShvPWZ1bmN0aW9uKCl7cmV0dXJuIGZ9LmFwcGx5KHQsW10pKXx8KGUuZXhwb3J0cz1vKX0oKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUsdCxyKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIkNvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvciIpO3RoaXMuaW5kZXg9ZSxhcmd1bWVudHMubGVuZ3RoPDM/KHRoaXMubWluPTAsdGhpcy5tYXg9dCk6KHRoaXMubWluPXQsdGhpcy5tYXg9ciksdm9pZCAwIT09dGhpcy5taW4mJnRoaXMuaW5kZXg8dGhpcy5taW4/dGhpcy5tZXNzYWdlPSJJbmRleCBvdXQgb2YgcmFuZ2UgKCIrdGhpcy5pbmRleCsiIDwgIit0aGlzLm1pbisiKSI6dm9pZCAwIT09dGhpcy5tYXgmJnRoaXMuaW5kZXg+PXRoaXMubWF4P3RoaXMubWVzc2FnZT0iSW5kZXggb3V0IG9mIHJhbmdlICgiK3RoaXMuaW5kZXgrIiA+ICIrKHRoaXMubWF4LTEpKyIpIjp0aGlzLm1lc3NhZ2U9IkluZGV4IG91dCBvZiByYW5nZSAoIit0aGlzLmluZGV4KyIpIix0aGlzLnN0YWNrPShuZXcgRXJyb3IpLnN0YWNrfXIuZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBufSksKG4ucHJvdG90eXBlPW5ldyBSYW5nZUVycm9yKS5jb25zdHJ1Y3Rvcj1SYW5nZUVycm9yLG4ucHJvdG90eXBlLm5hbWU9IkluZGV4RXJyb3IiLG4ucHJvdG90eXBlLmlzSW5kZXhFcnJvcj0hMH0sZnVuY3Rpb24ocixpLGUpe3ZhciBhOwovKioKICogQGxpY2Vuc2UgRnJhY3Rpb24uanMgdjQuMC4xMiAwOS8wOS8yMDE1CiAqIGh0dHA6Ly93d3cueGFyZy5vcmcvMjAxNC8wMy9yYXRpb25hbC1udW1iZXJzLWluLWphdmFzY3JpcHQvCiAqCiAqIENvcHlyaWdodCAoYykgMjAxNSwgUm9iZXJ0IEVpc2VsZSAocm9iZXJ0QHhhcmcub3JnKQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICoqLwohZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGQ9e3M6MSxuOjAsZDoxfTtmdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT1FcnJvci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZS5uYW1lPXRoaXMubmFtZT10LHRoaXMuc3RhY2s9ZS5zdGFjayx0aGlzLm1lc3NhZ2U9ZS5tZXNzYWdlfWZ1bmN0aW9uIHIoKXt9cmV0dXJuIHIucHJvdG90eXBlPUVycm9yLnByb3RvdHlwZSxlLnByb3RvdHlwZT1uZXcgcixlfXZhciB5PWYuRGl2aXNpb25CeVplcm89ZSgiRGl2aXNpb25CeVplcm8iKSx0PWYuSW52YWxpZFBhcmFtZXRlcj1lKCJJbnZhbGlkUGFyYW1ldGVyIik7ZnVuY3Rpb24gZyhlLHQpe3JldHVybiBpc05hTihlPXBhcnNlSW50KGUsMTApKSYmdigpLGUqdH1mdW5jdGlvbiB2KCl7dGhyb3cgbmV3IHR9dmFyIG49ZnVuY3Rpb24oZSx0KXt2YXIgcixuPTAsaT0xLGE9MSxvPTAscz0wLHU9MCxjPTEsZj0xLGw9MCxwPTEsbT0xLGg9MTtpZihudWxsIT1lKWlmKHZvaWQgMCE9PXQpYT0obj1lKSooaT10KTtlbHNlIHN3aXRjaCh0eXBlb2YgZSl7Y2FzZSJvYmplY3QiOiJkImluIGUmJiJuImluIGU/KG49ZS5uLGk9ZS5kLCJzImluIGUmJihuKj1lLnMpKTowIGluIGU/KG49ZVswXSwxIGluIGUmJihpPWVbMV0pKTp2KCksYT1uKmk7YnJlYWs7Y2FzZSJudW1iZXIiOmlmKGU8MCYmKGU9LShhPWUpKSxlJTE9PTApbj1lO2Vsc2UgaWYoMDxlKXtmb3IoMTw9ZSYmKGUvPWY9TWF0aC5wb3coMTAsTWF0aC5mbG9vcigxK01hdGgubG9nKGUpL01hdGguTE4xMCkpKTtwPD0xZTcmJmg8PTFlNzspe2lmKGU9PT0ocj0obCttKS8ocCtoKSkpe2k9cCtoPD0xZTc/KG49bCttLHAraCk6cDxoPyhuPW0saCk6KG49bCxwKTticmVha31yPGU/KGwrPW0scCs9aCk6KG0rPWwsaCs9cCksaT0xZTc8cD8obj1tLGgpOihuPWwscCl9bio9Zn1lbHNlKGlzTmFOKGUpfHxpc05hTih0KSkmJihpPW49TmFOKTticmVhaztjYXNlInN0cmluZyI6aWYobnVsbD09PShwPWUubWF0Y2goL1xkK3wuL2cpKSYmdigpLCItIj09PXBbbF0/KGE9LTEsbCsrKToiKyI9PT1wW2xdJiZsKysscC5sZW5ndGg9PT1sKzE/cz1nKHBbbCsrXSxhKToiLiI9PT1wW2wrMV18fCIuIj09PXBbbF0/KCIuIiE9PXBbbF0mJihvPWcocFtsKytdLGEpKSwoKytsKzE9PT1wLmxlbmd0aHx8IigiPT09cFtsKzFdJiYiKSI9PT1wW2wrM118fCInIj09PXBbbCsxXSYmIiciPT09cFtsKzNdKSYmKHM9ZyhwW2xdLGEpLGM9TWF0aC5wb3coMTAscFtsXS5sZW5ndGgpLGwrKyksKCIoIj09PXBbbF0mJiIpIj09PXBbbCsyXXx8IiciPT09cFtsXSYmIiciPT09cFtsKzJdKSYmKHU9ZyhwW2wrMV0sYSksZj1NYXRoLnBvdygxMCxwW2wrMV0ubGVuZ3RoKS0xLGwrPTMpKToiLyI9PT1wW2wrMV18fCI6Ij09PXBbbCsxXT8ocz1nKHBbbF0sYSksYz1nKHBbbCsyXSwxKSxsKz0zKToiLyI9PT1wW2wrM10mJiIgIj09PXBbbCsxXSYmKG89ZyhwW2xdLGEpLHM9ZyhwW2wrMl0sYSksYz1nKHBbbCs0XSwxKSxsKz01KSxwLmxlbmd0aDw9bCl7YT1uPXUrKGk9YypmKSpvK2YqczticmVha31kZWZhdWx0OnYoKX1pZigwPT09aSl0aHJvdyBuZXcgeTtkLnM9YTwwPy0xOjEsZC5uPU1hdGguYWJzKG4pLGQuZD1NYXRoLmFicyhpKX07ZnVuY3Rpb24gdShlLHQscil7Zm9yKHZhciBuPTEsaT1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPTE7MDx0O2U9ZSplJXIsdD4+PTEpMSZ0JiYobj1uKmUlcik7cmV0dXJuIG59KDEwLHIsdCksYT0wO2E8MzAwO2ErKyl7aWYobj09PWkpcmV0dXJuIGE7bj0xMCpuJXQsaT0xMCppJXR9cmV0dXJuIDB9ZnVuY3Rpb24gYyhlLHQpe2lmKCFlKXJldHVybiB0O2lmKCF0KXJldHVybiBlO2Zvcig7Oyl7aWYoIShlJT10KSlyZXR1cm4gdDtpZighKHQlPWUpKXJldHVybiBlfX1mdW5jdGlvbiBmKGUsdCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZikpcmV0dXJuIG5ldyBmKGUsdCk7bihlLHQpLGU9Zi5SRURVQ0U/YyhkLmQsZC5uKToxLHRoaXMucz1kLnMsdGhpcy5uPWQubi9lLHRoaXMuZD1kLmQvZX1mLlJFRFVDRT0xLGYucHJvdG90eXBlPXtzOjEsbjowLGQ6MSxhYnM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGYodGhpcy5uLHRoaXMuZCl9LG5lZzpmdW5jdGlvbigpe3JldHVybiBuZXcgZigtdGhpcy5zKnRoaXMubix0aGlzLmQpfSxhZGQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihlLHQpLG5ldyBmKHRoaXMucyp0aGlzLm4qZC5kK2Qucyp0aGlzLmQqZC5uLHRoaXMuZCpkLmQpfSxzdWI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihlLHQpLG5ldyBmKHRoaXMucyp0aGlzLm4qZC5kLWQucyp0aGlzLmQqZC5uLHRoaXMuZCpkLmQpfSxtdWw6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihlLHQpLG5ldyBmKHRoaXMucypkLnMqdGhpcy5uKmQubix0aGlzLmQqZC5kKX0sZGl2OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oZSx0KSxuZXcgZih0aGlzLnMqZC5zKnRoaXMubipkLmQsdGhpcy5kKmQubil9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmKHRoaXMpfSxtb2Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaXNOYU4odGhpcy5uKXx8aXNOYU4odGhpcy5kKT9uZXcgZihOYU4pOnZvaWQgMD09PWU/bmV3IGYodGhpcy5zKnRoaXMubiV0aGlzLmQsMSk6KG4oZSx0KSwwPT09ZC5uJiYwPT09dGhpcy5kJiZmKDAsMCksbmV3IGYodGhpcy5zKihkLmQqdGhpcy5uKSUoZC5uKnRoaXMuZCksZC5kKnRoaXMuZCkpfSxnY2Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihlLHQpLG5ldyBmKGMoZC5uLHRoaXMubikqYyhkLmQsdGhpcy5kKSxkLmQqdGhpcy5kKX0sbGNtOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oZSx0KSwwPT09ZC5uJiYwPT09dGhpcy5uP25ldyBmOm5ldyBmKGQubip0aGlzLm4sYyhkLm4sdGhpcy5uKSpjKGQuZCx0aGlzLmQpKX0sY2VpbDpmdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLnBvdygxMCxlfHwwKSxpc05hTih0aGlzLm4pfHxpc05hTih0aGlzLmQpP25ldyBmKE5hTik6bmV3IGYoTWF0aC5jZWlsKGUqdGhpcy5zKnRoaXMubi90aGlzLmQpLGUpfSxmbG9vcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLnBvdygxMCxlfHwwKSxpc05hTih0aGlzLm4pfHxpc05hTih0aGlzLmQpP25ldyBmKE5hTik6bmV3IGYoTWF0aC5mbG9vcihlKnRoaXMucyp0aGlzLm4vdGhpcy5kKSxlKX0scm91bmQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TWF0aC5wb3coMTAsZXx8MCksaXNOYU4odGhpcy5uKXx8aXNOYU4odGhpcy5kKT9uZXcgZihOYU4pOm5ldyBmKE1hdGgucm91bmQoZSp0aGlzLnMqdGhpcy5uL3RoaXMuZCksZSl9LGludmVyc2U6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGYodGhpcy5zKnRoaXMuZCx0aGlzLm4pfSxwb3c6ZnVuY3Rpb24oZSl7cmV0dXJuIGU8MD9uZXcgZihNYXRoLnBvdyh0aGlzLnMqdGhpcy5kLC1lKSxNYXRoLnBvdyh0aGlzLm4sLWUpKTpuZXcgZihNYXRoLnBvdyh0aGlzLnMqdGhpcy5uLGUpLE1hdGgucG93KHRoaXMuZCxlKSl9LGVxdWFsczpmdW5jdGlvbihlLHQpe3JldHVybiBuKGUsdCksdGhpcy5zKnRoaXMubipkLmQ9PWQucypkLm4qdGhpcy5kfSxjb21wYXJlOmZ1bmN0aW9uKGUsdCl7bihlLHQpO3ZhciByPXRoaXMucyp0aGlzLm4qZC5kLWQucypkLm4qdGhpcy5kO3JldHVybigwPHIpLShyPDApfSxzaW1wbGlmeTpmdW5jdGlvbihlKXtpZihpc05hTih0aGlzLm4pfHxpc05hTih0aGlzLmQpKXJldHVybiB0aGlzO3ZhciB0PXRoaXMuYWJzKCkudG9Db250aW51ZWQoKTtmdW5jdGlvbiByKGUpe3JldHVybiAxPT09ZS5sZW5ndGg/bmV3IGYoZVswXSk6cihlLnNsaWNlKDEpKS5pbnZlcnNlKCkuYWRkKGVbMF0pfWU9ZXx8LjAwMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9cih0LnNsaWNlKDAsbisxKSk7aWYoaS5zdWIodGhpcy5hYnMoKSkuYWJzKCkudmFsdWVPZigpPGUpcmV0dXJuIGkubXVsKHRoaXMucyl9cmV0dXJuIHRoaXN9LGRpdmlzaWJsZTpmdW5jdGlvbihlLHQpe3JldHVybiBuKGUsdCksISghKGQubip0aGlzLmQpfHx0aGlzLm4qZC5kJShkLm4qdGhpcy5kKSl9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zKnRoaXMubi90aGlzLmR9LHRvRnJhY3Rpb246ZnVuY3Rpb24oZSl7dmFyIHQscj0iIixuPXRoaXMubixpPXRoaXMuZDtyZXR1cm4gdGhpcy5zPDAmJihyKz0iLSIpLDE9PT1pP3IrPW46KGUmJjA8KHQ9TWF0aC5mbG9vcihuL2kpKSYmKHIrPXQscis9IiAiLG4lPWkpLHIrPW4scis9Ii8iLHIrPWkpLHJ9LHRvTGF0ZXg6ZnVuY3Rpb24oZSl7dmFyIHQscj0iIixuPXRoaXMubixpPXRoaXMuZDtyZXR1cm4gdGhpcy5zPDAmJihyKz0iLSIpLDE9PT1pP3IrPW46KGUmJjA8KHQ9TWF0aC5mbG9vcihuL2kpKSYmKHIrPXQsbiU9aSkscis9IlxcZnJhY3siLHIrPW4scis9In17IixyKz1pLHIrPSJ9Iikscn0sdG9Db250aW51ZWQ6ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMubixyPXRoaXMuZCxuPVtdO2lmKGlzTmFOKHRoaXMubil8fGlzTmFOKHRoaXMuZCkpcmV0dXJuIG47Zm9yKDtuLnB1c2goTWF0aC5mbG9vcih0L3IpKSxlPXQlcix0PXIscj1lLDEhPT10Oyk7cmV0dXJuIG59LHRvU3RyaW5nOmZ1bmN0aW9uKGUpe3ZhciB0LHI9dGhpcy5uLG49dGhpcy5kO2lmKGlzTmFOKHIpfHxpc05hTihuKSlyZXR1cm4iTmFOIjtmLlJFRFVDRXx8KHIvPXQ9YyhyLG4pLG4vPXQpLGU9ZXx8MTU7dmFyIGk9ZnVuY3Rpb24oZSl7Zm9yKDtlJTI9PTA7ZS89Mik7Zm9yKDtlJTU9PTA7ZS89NSk7aWYoMT09PWUpcmV0dXJuIDA7Zm9yKHZhciB0PTEwJWUscj0xOzEhPT10O3IrKylpZih0PTEwKnQlZSwyZTM8cilyZXR1cm4gMDtyZXR1cm4gcn0obiksYT11KDAsbixpKSxvPS0xPT09dGhpcy5zPyItIjoiIjtpZihvKz1yL258MCxyJT1uLChyKj0xMCkmJihvKz0iLiIpLGkpe2Zvcih2YXIgcz1hO3MtLTspbys9ci9ufDAsciU9bixyKj0xMDtvKz0iKCI7Zm9yKHM9aTtzLS07KW8rPXIvbnwwLHIlPW4scio9MTA7bys9IikifWVsc2UgZm9yKHM9ZTtyJiZzLS07KW8rPXIvbnwwLHIlPW4scio9MTA7cmV0dXJuIG99fSx2b2lkIDA9PT0oYT1mdW5jdGlvbigpe3JldHVybiBmfS5hcHBseShpLFtdKSl8fChyLmV4cG9ydHM9YSl9KCl9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gdC5pbnNlbnNpdGl2ZSYmKCIiK2UpLnRvTG93ZXJDYXNlKCl8fCIiK2V9dmFyIGksYSxvPS8oXihbK1wtXT8oPzowfFsxLTldXGQqKSg/OlwuXGQqKT8oPzpbZUVdWytcLV0/XGQrKT8pPyR8XjB4WzAtOWEtZl0rJHxcZCspL2dpLHM9LyheWyBdKnxbIF0qJCkvZyx1PS8oXihbXHcgXSssP1tcdyBdKyk/W1x3IF0rLD9bXHcgXStcZCs6XGQrKDpcZCspP1tcdyBdP3xeXGR7MSw0fVtcL1wtXVxkezEsNH1bXC9cLV1cZHsxLDR9fF5cdyssIFx3KyBcZCssIFxkezR9KS8sYz0vXjB4WzAtOWEtZl0rJC9pLGY9L14wLyxsPW4oZSkucmVwbGFjZShzLCIiKXx8IiIscD1uKHIpLnJlcGxhY2UocywiIil8fCIiLG09bC5yZXBsYWNlKG8sIlwwJDFcMCIpLnJlcGxhY2UoL1wwJC8sIiIpLnJlcGxhY2UoL15cMC8sIiIpLnNwbGl0KCJcMCIpLGg9cC5yZXBsYWNlKG8sIlwwJDFcMCIpLnJlcGxhY2UoL1wwJC8sIiIpLnJlcGxhY2UoL15cMC8sIiIpLnNwbGl0KCJcMCIpLGQ9cGFyc2VJbnQobC5tYXRjaChjKSwxNil8fDEhPT1tLmxlbmd0aCYmbC5tYXRjaCh1KSYmRGF0ZS5wYXJzZShsKSx5PXBhcnNlSW50KHAubWF0Y2goYyksMTYpfHxkJiZwLm1hdGNoKHUpJiZEYXRlLnBhcnNlKHApfHxudWxsO2lmKHkpe2lmKGQ8eSlyZXR1cm4tMTtpZih5PGQpcmV0dXJuIDF9Zm9yKHZhciBnPTAsdj1NYXRoLm1heChtLmxlbmd0aCxoLmxlbmd0aCk7Zzx2O2crKyl7aWYoaT0hKG1bZ118fCIiKS5tYXRjaChmKSYmcGFyc2VGbG9hdChtW2ddKXx8bVtnXXx8MCxhPSEoaFtnXXx8IiIpLm1hdGNoKGYpJiZwYXJzZUZsb2F0KGhbZ10pfHxoW2ddfHwwLGlzTmFOKGkpIT09aXNOYU4oYSkpcmV0dXJuIGlzTmFOKGkpPzE6LTE7aWYodHlwZW9mIGkhPXR5cGVvZiBhJiYoaSs9IiIsYSs9IiIpLGk8YSlyZXR1cm4tMTtpZihhPGkpcmV0dXJuIDF9cmV0dXJuIDB9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkoZSx0LHIsbil7aWYoISh0aGlzIGluc3RhbmNlb2YgaSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3IiKTt0aGlzLmZuPWUsdGhpcy5jb3VudD10LHRoaXMubWluPXIsdGhpcy5tYXg9bix0aGlzLm1lc3NhZ2U9Ildyb25nIG51bWJlciBvZiBhcmd1bWVudHMgaW4gZnVuY3Rpb24gIitlKyIgKCIrdCsiIHByb3ZpZGVkLCAiK3IrKG51bGwhPW4/Ii0iK246IiIpKyIgZXhwZWN0ZWQpIix0aGlzLnN0YWNrPShuZXcgRXJyb3IpLnN0YWNrfXIuZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBpfSksKGkucHJvdG90eXBlPW5ldyBFcnJvcikuY29uc3RydWN0b3I9RXJyb3IsaS5wcm90b3R5cGUubmFtZT0iQXJndW1lbnRzRXJyb3IiLGkucHJvdG90eXBlLmlzQXJndW1lbnRzRXJyb3I9ITB9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhO2k9W10sdm9pZCAwPT09KGE9ImZ1bmN0aW9uIj09dHlwZW9mKG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBCKCl7cmV0dXJuIHRydWV9ZnVuY3Rpb24gcmUoKXtyZXR1cm4gZmFsc2V9ZnVuY3Rpb24gbmUoKXtyZXR1cm4gdW5kZWZpbmVkfWZ1bmN0aW9uIGsoKXt2YXIgZT1be25hbWU6Im51bWJlciIsdGVzdDpmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PT0ibnVtYmVyIn19LHtuYW1lOiJzdHJpbmciLHRlc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT09InN0cmluZyJ9fSx7bmFtZToiYm9vbGVhbiIsdGVzdDpmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PT0iYm9vbGVhbiJ9fSx7bmFtZToiRnVuY3Rpb24iLHRlc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT09ImZ1bmN0aW9uIn19LHtuYW1lOiJBcnJheSIsdGVzdDpBcnJheS5pc0FycmF5fSx7bmFtZToiRGF0ZSIsdGVzdDpmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERhdGV9fSx7bmFtZToiUmVnRXhwIix0ZXN0OmZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgUmVnRXhwfX0se25hbWU6Ik9iamVjdCIsdGVzdDpmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PT0ib2JqZWN0IiYmZSE9PW51bGwmJmUuY29uc3RydWN0b3I9PT1PYmplY3R9fSx7bmFtZToibnVsbCIsdGVzdDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PW51bGx9fSx7bmFtZToidW5kZWZpbmVkIix0ZXN0OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09dW5kZWZpbmVkfX1dO3ZhciBuPXtuYW1lOiJhbnkiLHRlc3Q6Qn07dmFyIHQ9W107dmFyIHI9W107dmFyIFU9e3R5cGVzOmUsY29udmVyc2lvbnM6cixpZ25vcmU6dH07ZnVuY3Rpb24gdSh0KXt2YXIgZT1lZShVLnR5cGVzLGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWU9PT10fSk7aWYoZSl7cmV0dXJuIGV9aWYodD09PSJhbnkiKXtyZXR1cm4gbn12YXIgcj1lZShVLnR5cGVzLGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX0pO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gdHlwZSAiJyt0KyciJysocj8nLiBEaWQgeW91IG1lYW4gIicrci5uYW1lKyciPyc6IiIpKX1mdW5jdGlvbiBjKGUpe2lmKGU9PT1uKXtyZXR1cm4gOTk5fXJldHVybiBVLnR5cGVzLmluZGV4T2YoZSl9ZnVuY3Rpb24gcCh0KXt2YXIgZT1lZShVLnR5cGVzLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRlc3QodCl9KTtpZihlKXtyZXR1cm4gZS5uYW1lfXRocm93IG5ldyBUeXBlRXJyb3IoIlZhbHVlIGhhcyB1bmtub3duIHR5cGUuIFZhbHVlOiAiK3QpfWZ1bmN0aW9uIGkoZSx0KXtpZighZS5zaWduYXR1cmVzKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBpcyBubyB0eXBlZC1mdW5jdGlvbiIpfXZhciByO2lmKHR5cGVvZiB0PT09InN0cmluZyIpe3I9dC5zcGxpdCgiLCIpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXtyW25dPXJbbl0udHJpbSgpfX1lbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3I9dH1lbHNle3Rocm93IG5ldyBUeXBlRXJyb3IoIlN0cmluZyBhcnJheSBvciBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgZXhwZWN0ZWQiKX12YXIgaT1yLmpvaW4oIiwiKTt2YXIgYT1lLnNpZ25hdHVyZXNbaV07aWYoYSl7cmV0dXJuIGF9dGhyb3cgbmV3IFR5cGVFcnJvcigiU2lnbmF0dXJlIG5vdCBmb3VuZCAoc2lnbmF0dXJlOiAiKyhlLm5hbWV8fCJ1bm5hbWVkIikrIigiK3Iuam9pbigiLCAiKSsiKSkiKX1mdW5jdGlvbiBhKGUsdCl7dmFyIHI9cChlKTtpZih0PT09cil7cmV0dXJuIGV9Zm9yKHZhciBuPTA7bjxVLmNvbnZlcnNpb25zLmxlbmd0aDtuKyspe3ZhciBpPVUuY29udmVyc2lvbnNbbl07aWYoaS5mcm9tPT09ciYmaS50bz09PXQpe3JldHVybiBpLmNvbnZlcnQoZSl9fXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNvbnZlcnQgZnJvbSAiK3IrIiB0byAiK3QpfWZ1bmN0aW9uIEwoZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZXMubWFwKGwpO3JldHVybihlLnJlc3RQYXJhbT8iLi4uIjoiIikrdC5qb2luKCJ8Iil9KS5qb2luKCIsIil9ZnVuY3Rpb24gbyhlLHIpe3ZhciB0PWUuaW5kZXhPZigiLi4uIik9PT0wO3ZhciBuPSF0P2U6ZS5sZW5ndGg+Mz9lLnNsaWNlKDMpOiJhbnkiO3ZhciBpPW4uc3BsaXQoInwiKS5tYXAoTykuZmlsdGVyKE0pLmZpbHRlcihOKTt2YXIgYT1iKHIsaSk7dmFyIG89aS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9dShlKTtyZXR1cm57bmFtZTplLHR5cGVJbmRleDpjKHQpLHRlc3Q6dC50ZXN0LGNvbnZlcnNpb246bnVsbCxjb252ZXJzaW9uSW5kZXg6LTF9fSk7dmFyIHM9YS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9dShlLmZyb20pO3JldHVybntuYW1lOmUuZnJvbSx0eXBlSW5kZXg6Yyh0KSx0ZXN0OnQudGVzdCxjb252ZXJzaW9uOmUsY29udmVyc2lvbkluZGV4OnIuaW5kZXhPZihlKX19KTtyZXR1cm57dHlwZXM6by5jb25jYXQocykscmVzdFBhcmFtOnR9fWZ1bmN0aW9uIEgoZSx0LGkpe3ZhciByPVtdO2lmKGUudHJpbSgpIT09IiIpe3I9ZS5zcGxpdCgiLCIpLm1hcChPKS5tYXAoZnVuY3Rpb24oZSx0LHIpe3ZhciBuPW8oZSxpKTtpZihuLnJlc3RQYXJhbSYmdCE9PXIubGVuZ3RoLTEpe3Rocm93IG5ldyBTeW50YXhFcnJvcignVW5leHBlY3RlZCByZXN0IHBhcmFtZXRlciAiJytlKyciOiAnKyJvbmx5IGFsbG93ZWQgZm9yIHRoZSBsYXN0IHBhcmFtZXRlciIpfXJldHVybiBufSl9aWYoci5zb21lKGopKXtyZXR1cm4gbnVsbH1yZXR1cm57cGFyYW1zOnIsZm46dH19ZnVuY3Rpb24gJChlKXt2YXIgdD1TKGUpO3JldHVybiB0P3QucmVzdFBhcmFtOmZhbHNlfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGUudHlwZXMuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gZS5jb252ZXJzaW9uIT1udWxsfSl9ZnVuY3Rpb24gRyhlKXtpZighZXx8ZS50eXBlcy5sZW5ndGg9PT0wKXtyZXR1cm4gQn1lbHNlIGlmKGUudHlwZXMubGVuZ3RoPT09MSl7cmV0dXJuIHUoZS50eXBlc1swXS5uYW1lKS50ZXN0fWVsc2UgaWYoZS50eXBlcy5sZW5ndGg9PT0yKXt2YXIgcj11KGUudHlwZXNbMF0ubmFtZSkudGVzdDt2YXIgbj11KGUudHlwZXNbMV0ubmFtZSkudGVzdDtyZXR1cm4gZnVuY3Rpb24gZSh0KXtyZXR1cm4gcih0KXx8bih0KX19ZWxzZXt2YXIgaT1lLnR5cGVzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdShlLm5hbWUpLnRlc3R9KTtyZXR1cm4gZnVuY3Rpb24gZSh0KXtmb3IodmFyIHI9MDtyPGkubGVuZ3RoO3IrKyl7aWYoaVtyXSh0KSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX19fWZ1bmN0aW9uIFooZSl7dmFyIG4scixpO2lmKCQoZSkpe249RShlKS5tYXAoRyk7dmFyIGE9bi5sZW5ndGg7dmFyIG89RyhTKGUpKTt2YXIgcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9YTt0PGUubGVuZ3RoO3QrKyl7aWYoIW8oZVt0XSkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9O3JldHVybiBmdW5jdGlvbiBlKHQpe2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXtpZighbltyXSh0W3JdKSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gcyh0KSYmdC5sZW5ndGg+PWErMX19ZWxzZXtpZihlLmxlbmd0aD09PTApe3JldHVybiBmdW5jdGlvbiBlKHQpe3JldHVybiB0Lmxlbmd0aD09PTB9fWVsc2UgaWYoZS5sZW5ndGg9PT0xKXtyPUcoZVswXSk7cmV0dXJuIGZ1bmN0aW9uIGUodCl7cmV0dXJuIHIodFswXSkmJnQubGVuZ3RoPT09MX19ZWxzZSBpZihlLmxlbmd0aD09PTIpe3I9RyhlWzBdKTtpPUcoZVsxXSk7cmV0dXJuIGZ1bmN0aW9uIGUodCl7cmV0dXJuIHIodFswXSkmJmkodFsxXSkmJnQubGVuZ3RoPT09Mn19ZWxzZXtuPWUubWFwKEcpO3JldHVybiBmdW5jdGlvbiBlKHQpe2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXtpZighbltyXSh0W3JdKSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdC5sZW5ndGg9PT1uLmxlbmd0aH19fX1mdW5jdGlvbiBtKGUsdCl7cmV0dXJuIHQ8ZS5wYXJhbXMubGVuZ3RoP2UucGFyYW1zW3RdOiQoZS5wYXJhbXMpP1MoZS5wYXJhbXMpOm51bGx9ZnVuY3Rpb24gZihlLHQscil7dmFyIG49bShlLHQpO3ZhciBpPW4/cj9uLnR5cGVzLmZpbHRlcihoKTpuLnR5cGVzOltdO3JldHVybiBpLm1hcChsKX1mdW5jdGlvbiBsKGUpe3JldHVybiBlLm5hbWV9ZnVuY3Rpb24gaChlKXtyZXR1cm4gZS5jb252ZXJzaW9uPT09bnVsbHx8ZS5jb252ZXJzaW9uPT09dW5kZWZpbmVkfWZ1bmN0aW9uIGQoZSx0KXt2YXIgcj1fKHRlKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSx0LGZhbHNlKX0pKTtyZXR1cm4gci5pbmRleE9mKCJhbnkiKSE9PS0xP1siYW55Il06cn1mdW5jdGlvbiBWKGUscix0KXt2YXIgbixpO3ZhciBhPWV8fCJ1bm5hbWVkIjt2YXIgbz10O3ZhciBzO2ZvcihzPTA7czxyLmxlbmd0aDtzKyspe3ZhciB1PW8uZmlsdGVyKGZ1bmN0aW9uKGUpe3ZhciB0PUcobShlLHMpKTtyZXR1cm4oczxlLnBhcmFtcy5sZW5ndGh8fCQoZS5wYXJhbXMpKSYmdChyW3NdKX0pO2lmKHUubGVuZ3RoPT09MCl7aT1kKG8scyk7aWYoaS5sZW5ndGg+MCl7dmFyIGM9cChyW3NdKTtuPW5ldyBUeXBlRXJyb3IoIlVuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiAiK2ErIiAoZXhwZWN0ZWQ6ICIraS5qb2luKCIgb3IgIikrIiwgYWN0dWFsOiAiK2MrIiwgaW5kZXg6ICIrcysiKSIpO24uZGF0YT17Y2F0ZWdvcnk6Indyb25nVHlwZSIsZm46YSxpbmRleDpzLGFjdHVhbDpjLGV4cGVjdGVkOml9O3JldHVybiBufX1lbHNle289dX19dmFyIGY9by5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuICQoZS5wYXJhbXMpP0luZmluaXR5OmUucGFyYW1zLmxlbmd0aH0pO2lmKHIubGVuZ3RoPE1hdGgubWluLmFwcGx5KG51bGwsZikpe2k9ZChvLHMpO249bmV3IFR5cGVFcnJvcigiVG9vIGZldyBhcmd1bWVudHMgaW4gZnVuY3Rpb24gIithKyIgKGV4cGVjdGVkOiAiK2kuam9pbigiIG9yICIpKyIsIGluZGV4OiAiK3IubGVuZ3RoKyIpIik7bi5kYXRhPXtjYXRlZ29yeToidG9vRmV3QXJncyIsZm46YSxpbmRleDpyLmxlbmd0aCxleHBlY3RlZDppfTtyZXR1cm4gbn12YXIgbD1NYXRoLm1heC5hcHBseShudWxsLGYpO2lmKHIubGVuZ3RoPmwpe249bmV3IFR5cGVFcnJvcigiVG9vIG1hbnkgYXJndW1lbnRzIGluIGZ1bmN0aW9uICIrYSsiIChleHBlY3RlZDogIitsKyIsIGFjdHVhbDogIityLmxlbmd0aCsiKSIpO24uZGF0YT17Y2F0ZWdvcnk6InRvb01hbnlBcmdzIixmbjphLGluZGV4OnIubGVuZ3RoLGV4cGVjdGVkTGVuZ3RoOmx9O3JldHVybiBufW49bmV3IFR5cGVFcnJvcignQXJndW1lbnRzIG9mIHR5cGUgIicrci5qb2luKCIsICIpKyciIGRvIG5vdCBtYXRjaCBhbnkgb2YgdGhlIGRlZmluZWQgc2lnbmF0dXJlcyBvZiBmdW5jdGlvbiAnK2ErIi4iKTtuLmRhdGE9e2NhdGVnb3J5OiJtaXNtYXRjaCIsYWN0dWFsOnIubWFwKHApfTtyZXR1cm4gbn1mdW5jdGlvbiB5KGUpe3ZhciB0PTk5OTtmb3IodmFyIHI9MDtyPGUudHlwZXMubGVuZ3RoO3IrKyl7aWYoaChlLnR5cGVzW3JdKSl7dD1NYXRoLm1pbih0LGUudHlwZXNbcl0udHlwZUluZGV4KX19cmV0dXJuIHR9ZnVuY3Rpb24gZyhlKXt2YXIgdD05OTk7Zm9yKHZhciByPTA7cjxlLnR5cGVzLmxlbmd0aDtyKyspe2lmKCFoKGUudHlwZXNbcl0pKXt0PU1hdGgubWluKHQsZS50eXBlc1tyXS5jb252ZXJzaW9uSW5kZXgpfX1yZXR1cm4gdH1mdW5jdGlvbiB2KGUsdCl7dmFyIHI7cj1lLnJlc3RQYXJhbS10LnJlc3RQYXJhbTtpZihyIT09MCl7cmV0dXJuIHJ9cj1zKGUpLXModCk7aWYociE9PTApe3JldHVybiByfXI9eShlKS15KHQpO2lmKHIhPT0wKXtyZXR1cm4gcn1yZXR1cm4gZyhlKS1nKHQpfWZ1bmN0aW9uIEooZSx0KXt2YXIgcj1NYXRoLm1pbihlLnBhcmFtcy5sZW5ndGgsdC5wYXJhbXMubGVuZ3RoKTt2YXIgbjt2YXIgaTtpPWUucGFyYW1zLnNvbWUocyktdC5wYXJhbXMuc29tZShzKTtpZihpIT09MCl7cmV0dXJuIGl9Zm9yKG49MDtuPHI7bisrKXtpPXMoZS5wYXJhbXNbbl0pLXModC5wYXJhbXNbbl0pO2lmKGkhPT0wKXtyZXR1cm4gaX19Zm9yKG49MDtuPHI7bisrKXtpPXYoZS5wYXJhbXNbbl0sdC5wYXJhbXNbbl0pO2lmKGkhPT0wKXtyZXR1cm4gaX19cmV0dXJuIGUucGFyYW1zLmxlbmd0aC10LnBhcmFtcy5sZW5ndGh9ZnVuY3Rpb24gYihlLHQpe3ZhciByPXt9O2UuZm9yRWFjaChmdW5jdGlvbihlKXtpZih0LmluZGV4T2YoZS5mcm9tKT09PS0xJiZ0LmluZGV4T2YoZS50bykhPT0tMSYmIXJbZS5mcm9tXSl7cltlLmZyb21dPWV9fSk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gcltlXX0pfWZ1bmN0aW9uIFcoZSxpKXt2YXIgdD1pO2lmKGUuc29tZShzKSl7dmFyIGE9JChlKTt2YXIgbz1lLm1hcCh4KTt0PWZ1bmN0aW9uIGUoKXt2YXIgdD1bXTt2YXIgcj1hP2FyZ3VtZW50cy5sZW5ndGgtMTphcmd1bWVudHMubGVuZ3RoO2Zvcih2YXIgbj0wO248cjtuKyspe3Rbbl09b1tuXShhcmd1bWVudHNbbl0pfWlmKGEpe3Rbcl09YXJndW1lbnRzW3JdLm1hcChvW3JdKX1yZXR1cm4gaS5hcHBseShudWxsLHQpfX12YXIgcj10O2lmKCQoZSkpe3ZhciBuPWUubGVuZ3RoLTE7cj1mdW5jdGlvbiBlKCl7cmV0dXJuIHQuYXBwbHkobnVsbCxBKGFyZ3VtZW50cywwLG4pLmNvbmNhdChbQShhcmd1bWVudHMsbildKSl9fXJldHVybiByfWZ1bmN0aW9uIHgoZSl7dmFyIHIsbixpLGE7dmFyIG89W107dmFyIHM9W107ZS50eXBlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUuY29udmVyc2lvbil7by5wdXNoKHUoZS5jb252ZXJzaW9uLmZyb20pLnRlc3QpO3MucHVzaChlLmNvbnZlcnNpb24uY29udmVydCl9fSk7c3dpdGNoKHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIGZ1bmN0aW9uIGUodCl7cmV0dXJuIHR9O2Nhc2UgMTpyPW9bMF07aT1zWzBdO3JldHVybiBmdW5jdGlvbiBlKHQpe2lmKHIodCkpe3JldHVybiBpKHQpfXJldHVybiB0fTtjYXNlIDI6cj1vWzBdO249b1sxXTtpPXNbMF07YT1zWzFdO3JldHVybiBmdW5jdGlvbiBlKHQpe2lmKHIodCkpe3JldHVybiBpKHQpfWlmKG4odCkpe3JldHVybiBhKHQpfXJldHVybiB0fTtkZWZhdWx0OnJldHVybiBmdW5jdGlvbiBlKHQpe2Zvcih2YXIgcj0wO3I8cy5sZW5ndGg7cisrKXtpZihvW3JdKHQpKXtyZXR1cm4gc1tyXSh0KX19cmV0dXJuIHR9fX1mdW5jdGlvbiBZKGUpe3ZhciByPXt9O2UuZm9yRWFjaChmdW5jdGlvbih0KXtpZighdC5wYXJhbXMuc29tZShzKSl7WCh0LnBhcmFtcyx0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JbTChlKV09dC5mbn0pfX0pO3JldHVybiByfWZ1bmN0aW9uIFgoZSx1KXtmdW5jdGlvbiBjKHIsdCxuKXtpZih0PHIubGVuZ3RoKXt2YXIgZT1yW3RdO3ZhciBpPXU/ZS50eXBlcy5maWx0ZXIoaCk6ZS50eXBlczt2YXIgYTtpZihlLnJlc3RQYXJhbSl7dmFyIG89aS5maWx0ZXIoaCk7YT1vLmxlbmd0aDxpLmxlbmd0aD9bbyxpXTpbaV19ZWxzZXthPWkubWFwKGZ1bmN0aW9uKGUpe3JldHVybltlXX0pfXJldHVybiB0ZShhLGZ1bmN0aW9uKGUpe3JldHVybiBjKHIsdCsxLG4uY29uY2F0KFtlXSkpfSl9ZWxzZXt2YXIgcz1uLm1hcChmdW5jdGlvbihlLHQpe3JldHVybnt0eXBlczplLHJlc3RQYXJhbTp0PT09ci5sZW5ndGgtMSYmJChyKX19KTtyZXR1cm5bc119fXJldHVybiBjKGUsMCxbXSl9ZnVuY3Rpb24gUShlLHQpe3ZhciByPU1hdGgubWF4KGUucGFyYW1zLmxlbmd0aCx0LnBhcmFtcy5sZW5ndGgpO2Zvcih2YXIgbj0wO248cjtuKyspe3ZhciBpPWYoZSxuLHRydWUpO3ZhciBhPWYodCxuLHRydWUpO2lmKCFUKGksYSkpe3JldHVybiBmYWxzZX19dmFyIG89ZS5wYXJhbXMubGVuZ3RoO3ZhciBzPXQucGFyYW1zLmxlbmd0aDt2YXIgdT0kKGUucGFyYW1zKTt2YXIgYz0kKHQucGFyYW1zKTtyZXR1cm4gdT9jP289PT1zOnM+PW86Yz9vPj1zOm89PT1zfWZ1bmN0aW9uIHcocix0KXtpZihPYmplY3Qua2V5cyh0KS5sZW5ndGg9PT0wKXt0aHJvdyBuZXcgU3ludGF4RXJyb3IoIk5vIHNpZ25hdHVyZXMgcHJvdmlkZWQiKX12YXIgbj1bXTtPYmplY3Qua2V5cyh0KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIEgoZSx0W2VdLFUuY29udmVyc2lvbnMpfSkuZmlsdGVyKEspLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9ZWUobixmdW5jdGlvbihlKXtyZXR1cm4gUShlLHQpfSk7aWYoZSl7dGhyb3cgbmV3IFR5cGVFcnJvcignQ29uZmxpY3Rpbmcgc2lnbmF0dXJlcyAiJytMKGUucGFyYW1zKSsnIiBhbmQgIicrTCh0LnBhcmFtcykrJyIuJyl9bi5wdXNoKHQpfSk7dmFyIGk9dGUobixmdW5jdGlvbih0KXt2YXIgZT10P1godC5wYXJhbXMsZmFsc2UpOltdO3JldHVybiBlLm1hcChmdW5jdGlvbihlKXtyZXR1cm57cGFyYW1zOmUsZm46dC5mbn19KX0pLmZpbHRlcihLKTtpLnNvcnQoSik7dmFyIGU9aVswXSYmaVswXS5wYXJhbXMubGVuZ3RoPD0yJiYhJChpWzBdLnBhcmFtcyk7dmFyIGE9aVsxXSYmaVsxXS5wYXJhbXMubGVuZ3RoPD0yJiYhJChpWzFdLnBhcmFtcyk7dmFyIG89aVsyXSYmaVsyXS5wYXJhbXMubGVuZ3RoPD0yJiYhJChpWzJdLnBhcmFtcyk7dmFyIHM9aVszXSYmaVszXS5wYXJhbXMubGVuZ3RoPD0yJiYhJChpWzNdLnBhcmFtcyk7dmFyIHU9aVs0XSYmaVs0XS5wYXJhbXMubGVuZ3RoPD0yJiYhJChpWzRdLnBhcmFtcyk7dmFyIGM9aVs1XSYmaVs1XS5wYXJhbXMubGVuZ3RoPD0yJiYhJChpWzVdLnBhcmFtcyk7dmFyIGY9ZSYmYSYmbyYmcyYmdSYmYzt2YXIgbD1pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gWihlLnBhcmFtcyl9KTt2YXIgcD1lP0coaVswXS5wYXJhbXNbMF0pOnJlO3ZhciBtPWE/RyhpWzFdLnBhcmFtc1swXSk6cmU7dmFyIGg9bz9HKGlbMl0ucGFyYW1zWzBdKTpyZTt2YXIgZD1zP0coaVszXS5wYXJhbXNbMF0pOnJlO3ZhciB5PXU/RyhpWzRdLnBhcmFtc1swXSk6cmU7dmFyIGc9Yz9HKGlbNV0ucGFyYW1zWzBdKTpyZTt2YXIgdj1lP0coaVswXS5wYXJhbXNbMV0pOnJlO3ZhciBiPWE/RyhpWzFdLnBhcmFtc1sxXSk6cmU7dmFyIHg9bz9HKGlbMl0ucGFyYW1zWzFdKTpyZTt2YXIgdz1zP0coaVszXS5wYXJhbXNbMV0pOnJlO3ZhciBOPXU/RyhpWzRdLnBhcmFtc1sxXSk6cmU7dmFyIE89Yz9HKGlbNV0ucGFyYW1zWzFdKTpyZTt2YXIgTT1pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gVyhlLnBhcmFtcyxlLmZuKX0pO3ZhciBqPWU/TVswXTpuZTt2YXIgRT1hP01bMV06bmU7dmFyIFM9bz9NWzJdOm5lO3ZhciBBPXM/TVszXTpuZTt2YXIgQz11P01bNF06bmU7dmFyIFQ9Yz9NWzVdOm5lO3ZhciBfPWU/aVswXS5wYXJhbXMubGVuZ3RoOi0xO3ZhciBJPWE/aVsxXS5wYXJhbXMubGVuZ3RoOi0xO3ZhciBxPW8/aVsyXS5wYXJhbXMubGVuZ3RoOi0xO3ZhciBCPXM/aVszXS5wYXJhbXMubGVuZ3RoOi0xO3ZhciBrPXU/aVs0XS5wYXJhbXMubGVuZ3RoOi0xO3ZhciB6PWM/aVs1XS5wYXJhbXMubGVuZ3RoOi0xO3ZhciBEPWY/NjowO3ZhciBSPWkubGVuZ3RoO3ZhciBQPWZ1bmN0aW9uIGUoKXsidXNlIHN0cmljdCI7Zm9yKHZhciB0PUQ7dDxSO3QrKyl7aWYobFt0XShhcmd1bWVudHMpKXtyZXR1cm4gTVt0XS5hcHBseShudWxsLGFyZ3VtZW50cyl9fXRocm93IFYocixhcmd1bWVudHMsaSl9O3ZhciBGPWZ1bmN0aW9uIGUodCxyKXsidXNlIHN0cmljdCI7aWYoYXJndW1lbnRzLmxlbmd0aD09PV8mJnAodCkmJnYocikpe3JldHVybiBqLmFwcGx5KG51bGwsYXJndW1lbnRzKX1pZihhcmd1bWVudHMubGVuZ3RoPT09SSYmbSh0KSYmYihyKSl7cmV0dXJuIEUuYXBwbHkobnVsbCxhcmd1bWVudHMpfWlmKGFyZ3VtZW50cy5sZW5ndGg9PT1xJiZoKHQpJiZ4KHIpKXtyZXR1cm4gUy5hcHBseShudWxsLGFyZ3VtZW50cyl9aWYoYXJndW1lbnRzLmxlbmd0aD09PUImJmQodCkmJncocikpe3JldHVybiBBLmFwcGx5KG51bGwsYXJndW1lbnRzKX1pZihhcmd1bWVudHMubGVuZ3RoPT09ayYmeSh0KSYmTihyKSl7cmV0dXJuIEMuYXBwbHkobnVsbCxhcmd1bWVudHMpfWlmKGFyZ3VtZW50cy5sZW5ndGg9PT16JiZnKHQpJiZPKHIpKXtyZXR1cm4gVC5hcHBseShudWxsLGFyZ3VtZW50cyl9cmV0dXJuIFAuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIm5hbWUiLHt2YWx1ZTpyfSl9Y2F0Y2goZSl7fUYuc2lnbmF0dXJlcz1ZKGkpO3JldHVybiBGfWZ1bmN0aW9uIE4oZSl7cmV0dXJuIFUuaWdub3JlLmluZGV4T2YoZSk9PT0tMX1mdW5jdGlvbiBPKGUpe3JldHVybiBlLnRyaW0oKX1mdW5jdGlvbiBNKGUpe3JldHVybiEhZX1mdW5jdGlvbiBLKGUpe3JldHVybiBlIT09bnVsbH1mdW5jdGlvbiBqKGUpe3JldHVybiBlLnR5cGVzLmxlbmd0aD09PTB9ZnVuY3Rpb24gRShlKXtyZXR1cm4gZS5zbGljZSgwLGUubGVuZ3RoLTEpfWZ1bmN0aW9uIFMoZSl7cmV0dXJuIGVbZS5sZW5ndGgtMV19ZnVuY3Rpb24gQShlLHQscil7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUsdCxyKX1mdW5jdGlvbiBDKGUsdCl7cmV0dXJuIGUuaW5kZXhPZih0KSE9PS0xfWZ1bmN0aW9uIFQoZSx0KXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7aWYoQyh0LGVbcl0pKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIGVlKGUsdCl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe2lmKHQoZVtyXSkpe3JldHVybiBlW3JdfX1yZXR1cm4gdW5kZWZpbmVkfWZ1bmN0aW9uIF8oZSl7dmFyIHQ9e307Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3RbZVtyXV09dHJ1ZX1yZXR1cm4gT2JqZWN0LmtleXModCl9ZnVuY3Rpb24gdGUoZSx0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxlLm1hcCh0KSl9ZnVuY3Rpb24gSShlKXt2YXIgdD0iIjtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtpZigodHlwZW9mIG4uc2lnbmF0dXJlcz09PSJvYmplY3QifHx0eXBlb2Ygbi5zaWduYXR1cmU9PT0ic3RyaW5nIikmJm4ubmFtZSE9PSIiKXtpZih0PT09IiIpe3Q9bi5uYW1lfWVsc2UgaWYodCE9PW4ubmFtZSl7dmFyIGk9bmV3IEVycm9yKCJGdW5jdGlvbiBuYW1lcyBkbyBub3QgbWF0Y2ggKGV4cGVjdGVkOiAiK3QrIiwgYWN0dWFsOiAiK24ubmFtZSsiKSIpO2kuZGF0YT17YWN0dWFsOm4ubmFtZSxleHBlY3RlZDp0fTt0aHJvdyBpfX19cmV0dXJuIHR9ZnVuY3Rpb24gcShlKXt2YXIgcjt2YXIgbj17fTtmdW5jdGlvbiB0KGUsdCl7aWYobi5oYXNPd25Qcm9wZXJ0eShlKSYmdCE9PW5bZV0pe3I9bmV3IEVycm9yKCdTaWduYXR1cmUgIicrZSsnIiBpcyBkZWZpbmVkIHR3aWNlJyk7ci5kYXRhPXtzaWduYXR1cmU6ZX07dGhyb3cgcn19Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV07aWYodHlwZW9mIGEuc2lnbmF0dXJlcz09PSJvYmplY3QiKXtmb3IodmFyIG8gaW4gYS5zaWduYXR1cmVzKXtpZihhLnNpZ25hdHVyZXMuaGFzT3duUHJvcGVydHkobykpe3QobyxhLnNpZ25hdHVyZXNbb10pO25bb109YS5zaWduYXR1cmVzW29dfX19ZWxzZSBpZih0eXBlb2YgYS5zaWduYXR1cmU9PT0ic3RyaW5nIil7dChhLnNpZ25hdHVyZSxhKTtuW2Euc2lnbmF0dXJlXT1hfWVsc2V7cj1uZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBpcyBubyB0eXBlZC1mdW5jdGlvbiAoaW5kZXg6ICIraSsiKSIpO3IuZGF0YT17aW5kZXg6aX07dGhyb3cgcn19cmV0dXJuIG59VT13KCJ0eXBlZCIseyJzdHJpbmcsIE9iamVjdCI6dyxPYmplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpe2lmKGUuaGFzT3duUHJvcGVydHkocikpe3QucHVzaChlW3JdKX19dmFyIG49SSh0KTtyZXR1cm4gdyhuLGUpfSwiLi4uRnVuY3Rpb24iOmZ1bmN0aW9uKGUpe3JldHVybiB3KEkoZSkscShlKSl9LCJzdHJpbmcsIC4uLkZ1bmN0aW9uIjpmdW5jdGlvbihlLHQpe3JldHVybiB3KGUscSh0KSl9fSk7VS5jcmVhdGU9aztVLnR5cGVzPWU7VS5jb252ZXJzaW9ucz1yO1UuaWdub3JlPXQ7VS5jb252ZXJ0PWE7VS5maW5kPWk7VS5hZGRUeXBlPWZ1bmN0aW9uKGUsdCl7aWYoIWV8fHR5cGVvZiBlLm5hbWUhPT0ic3RyaW5nInx8dHlwZW9mIGUudGVzdCE9PSJmdW5jdGlvbiIpe3Rocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCB3aXRoIHByb3BlcnRpZXMge25hbWU6IHN0cmluZywgdGVzdDogZnVuY3Rpb259IGV4cGVjdGVkIil9aWYodCE9PWZhbHNlKXtmb3IodmFyIHI9MDtyPFUudHlwZXMubGVuZ3RoO3IrKyl7aWYoVS50eXBlc1tyXS5uYW1lPT09Ik9iamVjdCIpe1UudHlwZXMuc3BsaWNlKHIsMCxlKTtyZXR1cm59fX1VLnR5cGVzLnB1c2goZSl9O1UuYWRkQ29udmVyc2lvbj1mdW5jdGlvbihlKXtpZighZXx8dHlwZW9mIGUuZnJvbSE9PSJzdHJpbmcifHx0eXBlb2YgZS50byE9PSJzdHJpbmcifHx0eXBlb2YgZS5jb252ZXJ0IT09ImZ1bmN0aW9uIil7dGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IHdpdGggcHJvcGVydGllcyB7ZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nLCBjb252ZXJ0OiBmdW5jdGlvbn0gZXhwZWN0ZWQiKX1VLmNvbnZlcnNpb25zLnB1c2goZSl9O3JldHVybiBVfXJldHVybiBrKCl9KT9uLmFwcGx5KHQsaSk6bil8fChlLmV4cG9ydHM9YSl9LGZ1bmN0aW9uKG0sZSx0KXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe3ZhciBzPTI1NixpPVtdLGE9dm9pZCAwPT09ZT93aW5kb3c6ZSxvPU1hdGgucG93KHMsNiksdT1NYXRoLnBvdygyLDUyKSxjPTIqdSx0PU1hdGgucmFuZG9tO2Z1bmN0aW9uIGYoZSl7dmFyIHQscj1lLmxlbmd0aCxvPXRoaXMsbj0wLGk9by5pPW8uaj0wLGE9by5TPVtdO2ZvcihyfHwoZT1bcisrXSk7bjxzOylhW25dPW4rKztmb3Iobj0wO248cztuKyspYVtuXT1hW2k9MjU1JmkrZVtuJXJdKyh0PWFbbl0pXSxhW2ldPXQ7KG8uZz1mdW5jdGlvbihlKXtmb3IodmFyIHQscj0wLG49by5pLGk9by5qLGE9by5TO2UtLTspdD1hW249MjU1Jm4rMV0scj1yKnMrYVsyNTUmKGFbbl09YVtpPTI1NSZpK3RdKSsoYVtpXT10KV07cmV0dXJuIG8uaT1uLG8uaj1pLHJ9KShzKX1mdW5jdGlvbiBsKGUsdCl7Zm9yKHZhciByLG49ZSsiIixpPTA7aTxuLmxlbmd0aDspdFsyNTUmaV09MjU1JihyXj0xOSp0WzI1NSZpXSkrbi5jaGFyQ29kZUF0KGkrKyk7cmV0dXJuIHAodCl9ZnVuY3Rpb24gcChlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseSgwLGUpfW0uZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKHQmJiEwPT09dC5nbG9iYWwpcmV0dXJuIHQuZ2xvYmFsPSExLE1hdGgucmFuZG9tPW0uZXhwb3J0cyhlLHQpLHQuZ2xvYmFsPSEwLE1hdGgucmFuZG9tO3ZhciByPVtdLG49KGwoZnVuY3Rpb24gZSh0LHIpe3ZhciBuLGk9W10sYT0odHlwZW9mIHQpWzBdO2lmKHImJiJvIj09YSlmb3IobiBpbiB0KXRyeXtpLnB1c2goZSh0W25dLHItMSkpfWNhdGNoKGUpe31yZXR1cm4gaS5sZW5ndGg/aToicyI9PWE/dDp0KyJcMCJ9KHQmJnQuZW50cm9weXx8ITE/W2UscChpKV06MCBpbiBhcmd1bWVudHM/ZTpmdW5jdGlvbihlKXt0cnl7cmV0dXJuIGEuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhlPW5ldyBVaW50OEFycmF5KHMpKSxwKGUpfWNhdGNoKGUpe3JldHVyblsrbmV3IERhdGUsYSxhLm5hdmlnYXRvciYmYS5uYXZpZ2F0b3IucGx1Z2lucyxhLnNjcmVlbixwKGkpXX19KCksMyksciksbmV3IGYocikpO3JldHVybiBsKHAobi5TKSxpKSxmdW5jdGlvbigpe2Zvcih2YXIgZT1uLmcoNiksdD1vLHI9MDtlPHU7KWU9KGUrcikqcyx0Kj1zLHI9bi5nKDEpO2Zvcig7Yzw9ZTspZS89Mix0Lz0yLHI+Pj49MTtyZXR1cm4oZStyKS90fX0sbS5leHBvcnRzLnJlc2V0R2xvYmFsPWZ1bmN0aW9uKCl7TWF0aC5yYW5kb209dH0sbChNYXRoLnJhbmRvbSgpLGkpfSkuY2FsbCh0aGlzLHQoMjApKX0sZnVuY3Rpb24odCxEZSxSZSl7dmFyIFBlOyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgbCxULG8scz05ZTE1LGQ9MWU5LHk9IjAxMjM0NTY3ODlhYmNkZWYiLG49IjIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMTAxNDg4NjI4NzcyOTc2MDMzMzI3OTAwOTY3NTcyNjA5Njc3MzUyNDgwMjM1OTk3MjA1MDg5NTk4Mjk4MzQxOTY3Nzg0MDQyMjg2MjQ4NjMzNDA5NTI1NDY1MDgyODA2NzU2NjY2Mjg3MzY5MDk4NzgxNjg5NDgyOTA3MjA4MzI1NTU0NjgwODQzNzk5ODk0ODI2MjMzMTk4NTI4MzkzNTA1MzA4OTY1Mzc3NzMyNjI4ODQ2MTYzMzY2MjIyMjg3Njk4MjE5ODg2NzQ2NTQzNjY3NDc0NDA0MjQzMjc0MzY1MTU1MDQ4OTM0MzE0OTM5MzkxNDc5NjE5NDA0NDAwMjIyMTA1MTAxNzE0MTc0ODAwMzY4ODA4NDAxMjY0NzA4MDY4NTU2Nzc0MzIxNjIyODM1NTIyMDExNDgwNDY2MzcxNTY1OTEyMTM3MzQ1MDc0Nzg1Njk0NzY4MzQ2MzYxNjc5MjEwMTgwNjQ0NTA3MDY0ODAwMDI3NzUwMjY4NDkxNjc0NjU1MDU4Njg1NjkzNTY3MzQyMDY3MDU4MTEzNjQyOTIyNDU1NDQwNTc1ODkyNTcyNDIwODI0MTMxNDY5NTY4OTAxNjc1ODk0MDI1Njc3NjMxMTM1NjkxOTI5MjAzMzM3NjU4NzE0MTY2MDIzMDEwNTcwMzA4OTYzNDU3MjA3NTQ0MDM3MDg0NzQ2OTk0MDE2ODI2OTI4MjgwODQ4MTE4NDI4OTMxNDg0ODUyNDk0ODY0NDg3MTkyNzgwOTY3NjI3MTI3NTc3NTM5NzAyNzY2ODYwNTk1MjQ5NjcxNjY3NDE4MzQ4NTcwNDQyMjUwNzE5Nzk2NTAwNDcxNDk1MTA1MDQ5MjIxNDc3NjU2NzYzNjkzODY2Mjk3Njk3OTUyMjExMDcxODI2NDU0OTczNDc3MjY2MjQyNTcwOTQyOTMyMjU4Mjc5ODUwMjU4NTUwOTc4NTI2NTM4MzIwNzYwNjcyNjMxNzE2NDMwOTUwNTk5NTA4NzgwNzUyMzcxMDMzMzEwMTE5Nzg1NzU0NzMzMTU0MTQyMTgwODQyNzU0Mzg2MzU5MTc3ODExNzA1NDMwOTgyNzQ4MjM4NTA0NTY0ODAxOTA5NTYxMDI5OTI5MTgyNDMxODIzNzUyNTM1NzcwOTc1MDUzOTU2NTE4NzY5NzUxMDM3NDk3MDg4ODY5MjE4MDIwNTE4OTMzOTUwNzIzODUzOTIwNTE0NDYzNDE5NzI2NTI4NzI4Njk2NTExMDg2MjU3MTQ5MjE5ODg0OTk3ODc0ODg3Mzc3MTM0NTY4NjIwOTE2NzA1OCIsaT0iMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1MDI4ODQxOTcxNjkzOTkzNzUxMDU4MjA5NzQ5NDQ1OTIzMDc4MTY0MDYyODYyMDg5OTg2MjgwMzQ4MjUzNDIxMTcwNjc5ODIxNDgwODY1MTMyODIzMDY2NDcwOTM4NDQ2MDk1NTA1ODIyMzE3MjUzNTk0MDgxMjg0ODExMTc0NTAyODQxMDI3MDE5Mzg1MjExMDU1NTk2NDQ2MjI5NDg5NTQ5MzAzODE5NjQ0Mjg4MTA5NzU2NjU5MzM0NDYxMjg0NzU2NDgyMzM3ODY3ODMxNjUyNzEyMDE5MDkxNDU2NDg1NjY5MjM0NjAzNDg2MTA0NTQzMjY2NDgyMTMzOTM2MDcyNjAyNDkxNDEyNzM3MjQ1ODcwMDY2MDYzMTU1ODgxNzQ4ODE1MjA5MjA5NjI4MjkyNTQwOTE3MTUzNjQzNjc4OTI1OTAzNjAwMTEzMzA1MzA1NDg4MjA0NjY1MjEzODQxNDY5NTE5NDE1MTE2MDk0MzMwNTcyNzAzNjU3NTk1OTE5NTMwOTIxODYxMTczODE5MzI2MTE3OTMxMDUxMTg1NDgwNzQ0NjIzNzk5NjI3NDk1NjczNTE4ODU3NTI3MjQ4OTEyMjc5MzgxODMwMTE5NDkxMjk4MzM2NzMzNjI0NDA2NTY2NDMwODYwMjEzOTQ5NDYzOTUyMjQ3MzcxOTA3MDIxNzk4NjA5NDM3MDI3NzA1MzkyMTcxNzYyOTMxNzY3NTIzODQ2NzQ4MTg0Njc2Njk0MDUxMzIwMDA1NjgxMjcxNDUyNjM1NjA4Mjc3ODU3NzEzNDI3NTc3ODk2MDkxNzM2MzcxNzg3MjE0Njg0NDA5MDEyMjQ5NTM0MzAxNDY1NDk1ODUzNzEwNTA3OTIyNzk2ODkyNTg5MjM1NDIwMTk5NTYxMTIxMjkwMjE5NjA4NjQwMzQ0MTgxNTk4MTM2Mjk3NzQ3NzEzMDk5NjA1MTg3MDcyMTEzNDk5OTk5OTgzNzI5NzgwNDk5NTEwNTk3MzE3MzI4MTYwOTYzMTg1OTUwMjQ0NTk0NTUzNDY5MDgzMDI2NDI1MjIzMDgyNTMzNDQ2ODUwMzUyNjE5MzExODgxNzEwMTAwMDMxMzc4Mzg3NTI4ODY1ODc1MzMyMDgzODE0MjA2MTcxNzc2NjkxNDczMDM1OTgyNTM0OTA0Mjg3NTU0Njg3MzExNTk1NjI4NjM4ODIzNTM3ODc1OTM3NTE5NTc3ODE4NTc3ODA1MzIxNzEyMjY4MDY2MTMwMDE5Mjc4NzY2MTExOTU5MDkyMTY0MjAxOTg5MzgwOTUyNTcyMDEwNjU0ODU4NjMyNzg5Iix1PXtwcmVjaXNpb246MjAscm91bmRpbmc6NCxtb2R1bG86MSx0b0V4cE5lZzotNyx0b0V4cFBvczoyMSxtaW5FOi1zLG1heEU6cyxjcnlwdG86ITF9LGI9ITAsYz0iW0RlY2ltYWxFcnJvcl0gIixnPWMrIkludmFsaWQgYXJndW1lbnQ6ICIsYT1jKyJQcmVjaXNpb24gbGltaXQgZXhjZWVkZWQiLGY9YysiY3J5cHRvIHVuYXZhaWxhYmxlIixfPU1hdGguZmxvb3Isdj1NYXRoLnBvdyxwPS9eMGIoWzAxXSsoXC5bMDFdKik/fFwuWzAxXSspKHBbKy1dP1xkKyk/JC9pLG09L14weChbMC05YS1mXSsoXC5bMC05YS1mXSopP3xcLlswLTlhLWZdKykocFsrLV0/XGQrKT8kL2ksaD0vXjBvKFswLTddKyhcLlswLTddKik/fFwuWzAtN10rKShwWystXT9cZCspPyQvaSx4PS9eKFxkKyhcLlxkKik/fFwuXGQrKShlWystXT9cZCspPyQvaSxJPTFlNyxxPTcsdz1uLmxlbmd0aC0xLE49aS5sZW5ndGgtMSxPPXtuYW1lOiJbb2JqZWN0IERlY2ltYWxdIn07ZnVuY3Rpb24gTShlKXt2YXIgdCxyLG4saT1lLmxlbmd0aC0xLGE9IiIsbz1lWzBdO2lmKDA8aSl7Zm9yKGErPW8sdD0xO3Q8aTt0Kyspbj1lW3RdKyIiLChyPXEtbi5sZW5ndGgpJiYoYSs9TChyKSksYSs9bjtvPWVbdF0sKHI9cS0obj1vKyIiKS5sZW5ndGgpJiYoYSs9TChyKSl9ZWxzZSBpZigwPT09bylyZXR1cm4iMCI7Zm9yKDtvJTEwPT0wOylvLz0xMDtyZXR1cm4gYStvfWZ1bmN0aW9uIGooZSx0LHIpe2lmKGUhPT1+fmV8fGU8dHx8cjxlKXRocm93IEVycm9yKGcrZSl9ZnVuY3Rpb24gRShlLHQscixuKXt2YXIgaSxhLG87Zm9yKGE9ZVswXTsxMDw9YTthLz0xMCktLXQ7cmV0dXJuLS10PDA/KHQrPXEsaT0wKTooaT1NYXRoLmNlaWwoKHQrMSkvcSksdCU9cSksYT12KDEwLHEtdCksbz1lW2ldJWF8MCxudWxsPT1uP3Q8Mz8oMD09dD9vPW8vMTAwfDA6MT09dCYmKG89by8xMHwwKSxyPDQmJjk5OTk5PT1vfHwzPHImJjQ5OTk5PT1vfHw1ZTQ9PW98fDA9PW8pOihyPDQmJm8rMT09YXx8MzxyJiZvKzE9PWEvMikmJihlW2krMV0vYS8xMDB8MCk9PXYoMTAsdC0yKS0xfHwobz09YS8yfHwwPT1vKSYmMD09KGVbaSsxXS9hLzEwMHwwKTp0PDQ/KDA9PXQ/bz1vLzFlM3wwOjE9PXQ/bz1vLzEwMHwwOjI9PXQmJihvPW8vMTB8MCksKG58fHI8NCkmJjk5OTk9PW98fCFuJiYzPHImJjQ5OTk9PW8pOigobnx8cjw0KSYmbysxPT1hfHwhbiYmMzxyJiZvKzE9PWEvMikmJihlW2krMV0vYS8xZTN8MCk9PXYoMTAsdC0zKS0xfWZ1bmN0aW9uIFMoZSx0LHIpe2Zvcih2YXIgbixpLGE9WzBdLG89MCxzPWUubGVuZ3RoO288czspe2ZvcihpPWEubGVuZ3RoO2ktLTspYVtpXSo9dDtmb3IoYVswXSs9eS5pbmRleE9mKGUuY2hhckF0KG8rKykpLG49MDtuPGEubGVuZ3RoO24rKylhW25dPnItMSYmKHZvaWQgMD09PWFbbisxXSYmKGFbbisxXT0wKSxhW24rMV0rPWFbbl0vcnwwLGFbbl0lPXIpfXJldHVybiBhLnJldmVyc2UoKX1PLmFic29sdXRlVmFsdWU9Ty5hYnM9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtyZXR1cm4gZS5zPDAmJihlLnM9MSksRChlKX0sTy5jZWlsPWZ1bmN0aW9uKCl7cmV0dXJuIEQobmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyksdGhpcy5lKzEsMil9LE8uY29tcGFyZWRUbz1PLmNtcD1mdW5jdGlvbihlKXt2YXIgdCxyLG4saSxhPXRoaXMsbz1hLmQscz0oZT1uZXcgYS5jb25zdHJ1Y3RvcihlKSkuZCx1PWEucyxjPWUucztpZighb3x8IXMpcmV0dXJuIHUmJmM/dSE9PWM/dTpvPT09cz8wOiFvXnU8MD8xOi0xOk5hTjtpZighb1swXXx8IXNbMF0pcmV0dXJuIG9bMF0/dTpzWzBdPy1jOjA7aWYodSE9PWMpcmV0dXJuIHU7aWYoYS5lIT09ZS5lKXJldHVybiBhLmU+ZS5lXnU8MD8xOi0xO2Zvcih0PTAscj0obj1vLmxlbmd0aCk8KGk9cy5sZW5ndGgpP246aTt0PHI7Kyt0KWlmKG9bdF0hPT1zW3RdKXJldHVybiBvW3RdPnNbdF1edTwwPzE6LTE7cmV0dXJuIG49PT1pPzA6aTxuXnU8MD8xOi0xfSxPLmNvc2luZT1PLmNvcz1mdW5jdGlvbigpe3ZhciBlLHQscj10aGlzLG49ci5jb25zdHJ1Y3RvcjtyZXR1cm4gci5kP3IuZFswXT8oZT1uLnByZWNpc2lvbix0PW4ucm91bmRpbmcsbi5wcmVjaXNpb249ZStNYXRoLm1heChyLmUsci5zZCgpKStxLG4ucm91bmRpbmc9MSxyPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpPXQuZC5sZW5ndGg7bj1pPDMyPyhyPU1hdGguY2VpbChpLzMpLCgxL1koNCxyKSkudG9TdHJpbmcoKSk6KHI9MTYsIjIuMzI4MzA2NDM2NTM4Njk2Mjg5MDYyNWUtMTAiKTtlLnByZWNpc2lvbis9cix0PVcoZSwxLHQudGltZXMobiksbmV3IGUoMSkpO2Zvcih2YXIgYT1yO2EtLTspe3ZhciBvPXQudGltZXModCk7dD1vLnRpbWVzKG8pLm1pbnVzKG8pLnRpbWVzKDgpLnBsdXMoMSl9cmV0dXJuIGUucHJlY2lzaW9uLT1yLHR9KG4sWChuLHIpKSxuLnByZWNpc2lvbj1lLG4ucm91bmRpbmc9dCxEKDI9PW98fDM9PW8/ci5uZWcoKTpyLGUsdCwhMCkpOm5ldyBuKDEpOm5ldyBuKE5hTil9LE8uY3ViZVJvb3Q9Ty5jYnJ0PWZ1bmN0aW9uKCl7dmFyIGUsdCxyLG4saSxhLG8scyx1LGMsZj10aGlzLGw9Zi5jb25zdHJ1Y3RvcjtpZighZi5pc0Zpbml0ZSgpfHxmLmlzWmVybygpKXJldHVybiBuZXcgbChmKTtmb3IoYj0hMSwoYT1mLnMqdihmLnMqZiwxLzMpKSYmTWF0aC5hYnMoYSkhPTEvMD9uPW5ldyBsKGEudG9TdHJpbmcoKSk6KHI9TShmLmQpLChhPSgoZT1mLmUpLXIubGVuZ3RoKzEpJTMpJiYocis9MT09YXx8LTI9PWE/IjAiOiIwMCIpLGE9dihyLDEvMyksZT1fKChlKzEpLzMpLShlJTM9PShlPDA/LTE6MikpLChuPW5ldyBsKHI9YT09MS8wPyI1ZSIrZToocj1hLnRvRXhwb25lbnRpYWwoKSkuc2xpY2UoMCxyLmluZGV4T2YoImUiKSsxKStlKSkucz1mLnMpLG89KGU9bC5wcmVjaXNpb24pKzM7OylpZihjPSh1PShzPW4pLnRpbWVzKHMpLnRpbWVzKHMpKS5wbHVzKGYpLG49QShjLnBsdXMoZikudGltZXMocyksYy5wbHVzKHUpLG8rMiwxKSxNKHMuZCkuc2xpY2UoMCxvKT09PShyPU0obi5kKSkuc2xpY2UoMCxvKSl7aWYoIjk5OTkiIT0ocj1yLnNsaWNlKG8tMyxvKzEpKSYmKGl8fCI0OTk5IiE9cikpeytyJiYoK3Iuc2xpY2UoMSl8fCI1IiE9ci5jaGFyQXQoMCkpfHwoRChuLGUrMSwxKSx0PSFuLnRpbWVzKG4pLnRpbWVzKG4pLmVxKGYpKTticmVha31pZighaSYmKEQocyxlKzEsMCkscy50aW1lcyhzKS50aW1lcyhzKS5lcShmKSkpe249czticmVha31vKz00LGk9MX1yZXR1cm4gYj0hMCxEKG4sZSxsLnJvdW5kaW5nLHQpfSxPLmRlY2ltYWxQbGFjZXM9Ty5kcD1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5kLHI9TmFOO2lmKHQpe2lmKHI9KChlPXQubGVuZ3RoLTEpLV8odGhpcy5lL3EpKSpxLGU9dFtlXSlmb3IoO2UlMTA9PTA7ZS89MTApci0tO3I8MCYmKHI9MCl9cmV0dXJuIHJ9LE8uZGl2aWRlZEJ5PU8uZGl2PWZ1bmN0aW9uKGUpe3JldHVybiBBKHRoaXMsbmV3IHRoaXMuY29uc3RydWN0b3IoZSkpfSxPLmRpdmlkZWRUb0ludGVnZXJCeT1PLmRpdlRvSW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY29uc3RydWN0b3I7cmV0dXJuIEQoQSh0aGlzLG5ldyB0KGUpLDAsMSwxKSx0LnByZWNpc2lvbix0LnJvdW5kaW5nKX0sTy5lcXVhbHM9Ty5lcT1mdW5jdGlvbihlKXtyZXR1cm4gMD09PXRoaXMuY21wKGUpfSxPLmZsb29yPWZ1bmN0aW9uKCl7cmV0dXJuIEQobmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyksdGhpcy5lKzEsMyl9LE8uZ3JlYXRlclRoYW49Ty5ndD1mdW5jdGlvbihlKXtyZXR1cm4gMDx0aGlzLmNtcChlKX0sTy5ncmVhdGVyVGhhbk9yRXF1YWxUbz1PLmd0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNtcChlKTtyZXR1cm4gMT09dHx8MD09PXR9LE8uaHlwZXJib2xpY0Nvc2luZT1PLmNvc2g9ZnVuY3Rpb24oKXt2YXIgZSx0LHIsbixpLGE9dGhpcyxvPWEuY29uc3RydWN0b3Iscz1uZXcgbygxKTtpZighYS5pc0Zpbml0ZSgpKXJldHVybiBuZXcgbyhhLnM/MS8wOk5hTik7aWYoYS5pc1plcm8oKSlyZXR1cm4gcztyPW8ucHJlY2lzaW9uLG49by5yb3VuZGluZyxvLnByZWNpc2lvbj1yK01hdGgubWF4KGEuZSxhLnNkKCkpKzQsby5yb3VuZGluZz0xLHQ9KGk9YS5kLmxlbmd0aCk8MzI/KDEvWSg0LGU9TWF0aC5jZWlsKGkvMykpKS50b1N0cmluZygpOihlPTE2LCIyLjMyODMwNjQzNjUzODY5NjI4OTA2MjVlLTEwIiksYT1XKG8sMSxhLnRpbWVzKHQpLG5ldyBvKDEpLCEwKTtmb3IodmFyIHUsYz1lLGY9bmV3IG8oOCk7Yy0tOyl1PWEudGltZXMoYSksYT1zLm1pbnVzKHUudGltZXMoZi5taW51cyh1LnRpbWVzKGYpKSkpO3JldHVybiBEKGEsby5wcmVjaXNpb249cixvLnJvdW5kaW5nPW4sITApfSxPLmh5cGVyYm9saWNTaW5lPU8uc2luaD1mdW5jdGlvbigpe3ZhciBlLHQscixuLGk9dGhpcyxhPWkuY29uc3RydWN0b3I7aWYoIWkuaXNGaW5pdGUoKXx8aS5pc1plcm8oKSlyZXR1cm4gbmV3IGEoaSk7aWYodD1hLnByZWNpc2lvbixyPWEucm91bmRpbmcsYS5wcmVjaXNpb249dCtNYXRoLm1heChpLmUsaS5zZCgpKSs0LGEucm91bmRpbmc9MSwobj1pLmQubGVuZ3RoKTwzKWk9VyhhLDIsaSxpLCEwKTtlbHNle2U9MTY8KGU9MS40Kk1hdGguc3FydChuKSk/MTY6MHxlLGk9VyhhLDIsaT1pLnRpbWVzKDEvWSg1LGUpKSxpLCEwKTtmb3IodmFyIG8scz1uZXcgYSg1KSx1PW5ldyBhKDE2KSxjPW5ldyBhKDIwKTtlLS07KW89aS50aW1lcyhpKSxpPWkudGltZXMocy5wbHVzKG8udGltZXModS50aW1lcyhvKS5wbHVzKGMpKSkpfXJldHVybiBEKGksYS5wcmVjaXNpb249dCxhLnJvdW5kaW5nPXIsITApfSxPLmh5cGVyYm9saWNUYW5nZW50PU8udGFuaD1mdW5jdGlvbigpe3ZhciBlLHQscj10aGlzLG49ci5jb25zdHJ1Y3RvcjtyZXR1cm4gci5pc0Zpbml0ZSgpP3IuaXNaZXJvKCk/bmV3IG4ocik6KGU9bi5wcmVjaXNpb24sdD1uLnJvdW5kaW5nLG4ucHJlY2lzaW9uPWUrNyxuLnJvdW5kaW5nPTEsQShyLnNpbmgoKSxyLmNvc2goKSxuLnByZWNpc2lvbj1lLG4ucm91bmRpbmc9dCkpOm5ldyBuKHIucyl9LE8uaW52ZXJzZUNvc2luZT1PLmFjb3M9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMscj10LmNvbnN0cnVjdG9yLG49dC5hYnMoKS5jbXAoMSksaT1yLnByZWNpc2lvbixhPXIucm91bmRpbmc7cmV0dXJuLTEhPT1uPzA9PT1uP3QuaXNOZWcoKT9GKHIsaSxhKTpuZXcgcigwKTpuZXcgcihOYU4pOnQuaXNaZXJvKCk/RihyLGkrNCxhKS50aW1lcyguNSk6KHIucHJlY2lzaW9uPWkrNixyLnJvdW5kaW5nPTEsdD10LmFzaW4oKSxlPUYocixpKzQsYSkudGltZXMoLjUpLHIucHJlY2lzaW9uPWksci5yb3VuZGluZz1hLGUubWludXModCkpfSxPLmludmVyc2VIeXBlcmJvbGljQ29zaW5lPU8uYWNvc2g9ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcyxuPXIuY29uc3RydWN0b3I7cmV0dXJuIHIubHRlKDEpP25ldyBuKHIuZXEoMSk/MDpOYU4pOnIuaXNGaW5pdGUoKT8oZT1uLnByZWNpc2lvbix0PW4ucm91bmRpbmcsbi5wcmVjaXNpb249ZStNYXRoLm1heChNYXRoLmFicyhyLmUpLHIuc2QoKSkrNCxuLnJvdW5kaW5nPTEsYj0hMSxyPXIudGltZXMocikubWludXMoMSkuc3FydCgpLnBsdXMociksYj0hMCxuLnByZWNpc2lvbj1lLG4ucm91bmRpbmc9dCxyLmxuKCkpOm5ldyBuKHIpfSxPLmludmVyc2VIeXBlcmJvbGljU2luZT1PLmFzaW5oPWZ1bmN0aW9uKCl7dmFyIGUsdCxyPXRoaXMsbj1yLmNvbnN0cnVjdG9yO3JldHVybiFyLmlzRmluaXRlKCl8fHIuaXNaZXJvKCk/bmV3IG4ocik6KGU9bi5wcmVjaXNpb24sdD1uLnJvdW5kaW5nLG4ucHJlY2lzaW9uPWUrMipNYXRoLm1heChNYXRoLmFicyhyLmUpLHIuc2QoKSkrNixuLnJvdW5kaW5nPTEsYj0hMSxyPXIudGltZXMocikucGx1cygxKS5zcXJ0KCkucGx1cyhyKSxiPSEwLG4ucHJlY2lzaW9uPWUsbi5yb3VuZGluZz10LHIubG4oKSl9LE8uaW52ZXJzZUh5cGVyYm9saWNUYW5nZW50PU8uYXRhbmg9ZnVuY3Rpb24oKXt2YXIgZSx0LHIsbixpPXRoaXMsYT1pLmNvbnN0cnVjdG9yO3JldHVybiBpLmlzRmluaXRlKCk/MDw9aS5lP25ldyBhKGkuYWJzKCkuZXEoMSk/aS5zLzA6aS5pc1plcm8oKT9pOk5hTik6KGU9YS5wcmVjaXNpb24sdD1hLnJvdW5kaW5nLG49aS5zZCgpLE1hdGgubWF4KG4sZSk8MiotaS5lLTE/RChuZXcgYShpKSxlLHQsITApOihhLnByZWNpc2lvbj1yPW4taS5lLGk9QShpLnBsdXMoMSksbmV3IGEoMSkubWludXMoaSkscitlLDEpLGEucHJlY2lzaW9uPWUrNCxhLnJvdW5kaW5nPTEsaT1pLmxuKCksYS5wcmVjaXNpb249ZSxhLnJvdW5kaW5nPXQsaS50aW1lcyguNSkpKTpuZXcgYShOYU4pfSxPLmludmVyc2VTaW5lPU8uYXNpbj1mdW5jdGlvbigpe3ZhciBlLHQscixuLGk9dGhpcyxhPWkuY29uc3RydWN0b3I7cmV0dXJuIGkuaXNaZXJvKCk/bmV3IGEoaSk6KHQ9aS5hYnMoKS5jbXAoMSkscj1hLnByZWNpc2lvbixuPWEucm91bmRpbmcsLTEhPT10PzA9PT10PygoZT1GKGEscis0LG4pLnRpbWVzKC41KSkucz1pLnMsZSk6bmV3IGEoTmFOKTooYS5wcmVjaXNpb249cis2LGEucm91bmRpbmc9MSxpPWkuZGl2KG5ldyBhKDEpLm1pbnVzKGkudGltZXMoaSkpLnNxcnQoKS5wbHVzKDEpKS5hdGFuKCksYS5wcmVjaXNpb249cixhLnJvdW5kaW5nPW4saS50aW1lcygyKSkpfSxPLmludmVyc2VUYW5nZW50PU8uYXRhbj1mdW5jdGlvbigpe3ZhciBlLHQscixuLGksYSxvLHMsdSxjPXRoaXMsZj1jLmNvbnN0cnVjdG9yLGw9Zi5wcmVjaXNpb24scD1mLnJvdW5kaW5nO2lmKGMuaXNGaW5pdGUoKSl7aWYoYy5pc1plcm8oKSlyZXR1cm4gbmV3IGYoYyk7aWYoYy5hYnMoKS5lcSgxKSYmbCs0PD1OKXJldHVybihvPUYoZixsKzQscCkudGltZXMoLjI1KSkucz1jLnMsb31lbHNle2lmKCFjLnMpcmV0dXJuIG5ldyBmKE5hTik7aWYobCs0PD1OKXJldHVybihvPUYoZixsKzQscCkudGltZXMoLjUpKS5zPWMucyxvfWZvcihmLnByZWNpc2lvbj1zPWwrMTAsZi5yb3VuZGluZz0xLGU9cj1NYXRoLm1pbigyOCxzL3ErMnwwKTtlOy0tZSljPWMuZGl2KGMudGltZXMoYykucGx1cygxKS5zcXJ0KCkucGx1cygxKSk7Zm9yKGI9ITEsdD1NYXRoLmNlaWwocy9xKSxuPTEsdT1jLnRpbWVzKGMpLG89bmV3IGYoYyksaT1jOy0xIT09ZTspaWYoaT1pLnRpbWVzKHUpLGE9by5taW51cyhpLmRpdihuKz0yKSksaT1pLnRpbWVzKHUpLHZvaWQgMCE9PShvPWEucGx1cyhpLmRpdihuKz0yKSkpLmRbdF0pZm9yKGU9dDtvLmRbZV09PT1hLmRbZV0mJmUtLTspO3JldHVybiByJiYobz1vLnRpbWVzKDI8PHItMSkpLGI9ITAsRChvLGYucHJlY2lzaW9uPWwsZi5yb3VuZGluZz1wLCEwKX0sTy5pc0Zpbml0ZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5kfSxPLmlzSW50ZWdlcj1PLmlzSW50PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmQmJl8odGhpcy5lL3EpPnRoaXMuZC5sZW5ndGgtMn0sTy5pc05hTj1mdW5jdGlvbigpe3JldHVybiF0aGlzLnN9LE8uaXNOZWdhdGl2ZT1PLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuczwwfSxPLmlzUG9zaXRpdmU9Ty5pc1Bvcz1mdW5jdGlvbigpe3JldHVybiAwPHRoaXMuc30sTy5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuZCYmMD09PXRoaXMuZFswXX0sTy5sZXNzVGhhbj1PLmx0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNtcChlKTwwfSxPLmxlc3NUaGFuT3JFcXVhbFRvPU8ubHRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNtcChlKTwxfSxPLmxvZ2FyaXRobT1PLmxvZz1mdW5jdGlvbihlKXt2YXIgdCxyLG4saSxhLG8scyx1LGM9dGhpcyxmPWMuY29uc3RydWN0b3IsbD1mLnByZWNpc2lvbixwPWYucm91bmRpbmc7aWYobnVsbD09ZSllPW5ldyBmKDEwKSx0PSEwO2Vsc2V7aWYocj0oZT1uZXcgZihlKSkuZCxlLnM8MHx8IXJ8fCFyWzBdfHxlLmVxKDEpKXJldHVybiBuZXcgZihOYU4pO3Q9ZS5lcSgxMCl9aWYocj1jLmQsYy5zPDB8fCFyfHwhclswXXx8Yy5lcSgxKSlyZXR1cm4gbmV3IGYociYmIXJbMF0/LTEvMDoxIT1jLnM/TmFOOnI/MDoxLzApO2lmKHQpaWYoMTxyLmxlbmd0aClhPSEwO2Vsc2V7Zm9yKGk9clswXTtpJTEwPT0wOylpLz0xMDthPTEhPT1pfWlmKGI9ITEsbz1aKGMscz1sKzUpLG49dD9QKGYscysxMCk6WihlLHMpLEUoKHU9QShvLG4scywxKSkuZCxpPWwscCkpZG97aWYobz1aKGMscys9MTApLG49dD9QKGYscysxMCk6WihlLHMpLHU9QShvLG4scywxKSwhYSl7K00odS5kKS5zbGljZShpKzEsaSsxNSkrMT09MWUxNCYmKHU9RCh1LGwrMSwwKSk7YnJlYWt9fXdoaWxlKEUodS5kLGkrPTEwLHApKTtyZXR1cm4gYj0hMCxEKHUsbCxwKX0sTy5taW51cz1PLnN1Yj1mdW5jdGlvbihlKXt2YXIgdCxyLG4saSxhLG8scyx1LGMsZixsLHAsbT10aGlzLGg9bS5jb25zdHJ1Y3RvcjtpZihlPW5ldyBoKGUpLCFtLmR8fCFlLmQpcmV0dXJuIG0ucyYmZS5zP20uZD9lLnM9LWUuczplPW5ldyBoKGUuZHx8bS5zIT09ZS5zP206TmFOKTplPW5ldyBoKE5hTiksZTtpZihtLnMhPWUucylyZXR1cm4gZS5zPS1lLnMsbS5wbHVzKGUpO2lmKGM9bS5kLHA9ZS5kLHM9aC5wcmVjaXNpb24sdT1oLnJvdW5kaW5nLCFjWzBdfHwhcFswXSl7aWYocFswXSllLnM9LWUucztlbHNle2lmKCFjWzBdKXJldHVybiBuZXcgaCgzPT09dT8tMDowKTtlPW5ldyBoKG0pfXJldHVybiBiP0QoZSxzLHUpOmV9aWYocj1fKGUuZS9xKSxmPV8obS5lL3EpLGM9Yy5zbGljZSgpLGE9Zi1yKXtmb3Iobz0obD1hPDApPyh0PWMsYT0tYSxwLmxlbmd0aCk6KHQ9cCxyPWYsYy5sZW5ndGgpLChuPU1hdGgubWF4KE1hdGguY2VpbChzL3EpLG8pKzIpPGEmJihhPW4sdC5sZW5ndGg9MSksdC5yZXZlcnNlKCksbj1hO24tLTspdC5wdXNoKDApO3QucmV2ZXJzZSgpfWVsc2V7Zm9yKChsPShuPWMubGVuZ3RoKTwobz1wLmxlbmd0aCkpJiYobz1uKSxuPTA7bjxvO24rKylpZihjW25dIT1wW25dKXtsPWNbbl08cFtuXTticmVha31hPTB9Zm9yKGwmJih0PWMsYz1wLHA9dCxlLnM9LWUucyksbz1jLmxlbmd0aCxuPXAubGVuZ3RoLW87MDxuOy0tbiljW28rK109MDtmb3Iobj1wLmxlbmd0aDthPG47KXtpZihjWy0tbl08cFtuXSl7Zm9yKGk9bjtpJiYwPT09Y1stLWldOyljW2ldPUktMTstLWNbaV0sY1tuXSs9SX1jW25dLT1wW25dfWZvcig7MD09PWNbLS1vXTspYy5wb3AoKTtmb3IoOzA9PT1jWzBdO2Muc2hpZnQoKSktLXI7cmV0dXJuIGNbMF0/KGUuZD1jLGUuZT1SKGMsciksYj9EKGUscyx1KTplKTpuZXcgaCgzPT09dT8tMDowKX0sTy5tb2R1bG89Ty5tb2Q9ZnVuY3Rpb24oZSl7dmFyIHQscj10aGlzLG49ci5jb25zdHJ1Y3RvcjtyZXR1cm4gZT1uZXcgbihlKSwhci5kfHwhZS5zfHxlLmQmJiFlLmRbMF0/bmV3IG4oTmFOKTohZS5kfHxyLmQmJiFyLmRbMF0/RChuZXcgbihyKSxuLnByZWNpc2lvbixuLnJvdW5kaW5nKTooYj0hMSw5PT1uLm1vZHVsbz8odD1BKHIsZS5hYnMoKSwwLDMsMSkpLnMqPWUuczp0PUEocixlLDAsbi5tb2R1bG8sMSksdD10LnRpbWVzKGUpLGI9ITAsci5taW51cyh0KSl9LE8ubmF0dXJhbEV4cG9uZW50aWFsPU8uZXhwPWZ1bmN0aW9uKCl7cmV0dXJuIEcodGhpcyl9LE8ubmF0dXJhbExvZ2FyaXRobT1PLmxuPWZ1bmN0aW9uKCl7cmV0dXJuIFoodGhpcyl9LE8ubmVnYXRlZD1PLm5lZz1mdW5jdGlvbigpe3ZhciBlPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO3JldHVybiBlLnM9LWUucyxEKGUpfSxPLnBsdXM9Ty5hZGQ9ZnVuY3Rpb24oZSl7dmFyIHQscixuLGksYSxvLHMsdSxjLGYsbD10aGlzLHA9bC5jb25zdHJ1Y3RvcjtpZihlPW5ldyBwKGUpLCFsLmR8fCFlLmQpcmV0dXJuIGwucyYmZS5zP2wuZHx8KGU9bmV3IHAoZS5kfHxsLnM9PT1lLnM/bDpOYU4pKTplPW5ldyBwKE5hTiksZTtpZihsLnMhPWUucylyZXR1cm4gZS5zPS1lLnMsbC5taW51cyhlKTtpZihjPWwuZCxmPWUuZCxzPXAucHJlY2lzaW9uLHU9cC5yb3VuZGluZywhY1swXXx8IWZbMF0pcmV0dXJuIGZbMF18fChlPW5ldyBwKGwpKSxiP0QoZSxzLHUpOmU7aWYoYT1fKGwuZS9xKSxuPV8oZS5lL3EpLGM9Yy5zbGljZSgpLGk9YS1uKXtmb3IoKG89KG89aTwwPyhyPWMsaT0taSxmLmxlbmd0aCk6KHI9ZixuPWEsYy5sZW5ndGgpKTwoYT1NYXRoLmNlaWwocy9xKSk/YSsxOm8rMSk8aSYmKGk9byxyLmxlbmd0aD0xKSxyLnJldmVyc2UoKTtpLS07KXIucHVzaCgwKTtyLnJldmVyc2UoKX1mb3IoKG89Yy5sZW5ndGgpLShpPWYubGVuZ3RoKTwwJiYoaT1vLHI9ZixmPWMsYz1yKSx0PTA7aTspdD0oY1stLWldPWNbaV0rZltpXSt0KS9JfDAsY1tpXSU9STtmb3IodCYmKGMudW5zaGlmdCh0KSwrK24pLG89Yy5sZW5ndGg7MD09Y1stLW9dOyljLnBvcCgpO3JldHVybiBlLmQ9YyxlLmU9UihjLG4pLGI/RChlLHMsdSk6ZX0sTy5wcmVjaXNpb249Ty5zZD1mdW5jdGlvbihlKXt2YXIgdDtpZih2b2lkIDAhPT1lJiZlIT09ISFlJiYxIT09ZSYmMCE9PWUpdGhyb3cgRXJyb3IoZytlKTtyZXR1cm4gdGhpcy5kPyh0PVUodGhpcy5kKSxlJiZ0aGlzLmUrMT50JiYodD10aGlzLmUrMSkpOnQ9TmFOLHR9LE8ucm91bmQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnN0cnVjdG9yO3JldHVybiBEKG5ldyBlKHRoaXMpLHRoaXMuZSsxLGUucm91bmRpbmcpfSxPLnNpbmU9Ty5zaW49ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcyxuPXIuY29uc3RydWN0b3I7cmV0dXJuIHIuaXNGaW5pdGUoKT9yLmlzWmVybygpP25ldyBuKHIpOihlPW4ucHJlY2lzaW9uLHQ9bi5yb3VuZGluZyxuLnByZWNpc2lvbj1lK01hdGgubWF4KHIuZSxyLnNkKCkpK3Esbi5yb3VuZGluZz0xLHI9ZnVuY3Rpb24oZSx0KXt2YXIgcixuPXQuZC5sZW5ndGg7aWYobjwzKXJldHVybiBXKGUsMix0LHQpO3I9MTY8KHI9MS40Kk1hdGguc3FydChuKSk/MTY6MHxyLHQ9dC50aW1lcygxL1koNSxyKSksdD1XKGUsMix0LHQpO2Zvcih2YXIgaSxhPW5ldyBlKDUpLG89bmV3IGUoMTYpLHM9bmV3IGUoMjApO3ItLTspaT10LnRpbWVzKHQpLHQ9dC50aW1lcyhhLnBsdXMoaS50aW1lcyhvLnRpbWVzKGkpLm1pbnVzKHMpKSkpO3JldHVybiB0fShuLFgobixyKSksbi5wcmVjaXNpb249ZSxuLnJvdW5kaW5nPXQsRCgyPG8/ci5uZWcoKTpyLGUsdCwhMCkpOm5ldyBuKE5hTil9LE8uc3F1YXJlUm9vdD1PLnNxcnQ9ZnVuY3Rpb24oKXt2YXIgZSx0LHIsbixpLGEsbz10aGlzLHM9by5kLHU9by5lLGM9by5zLGY9by5jb25zdHJ1Y3RvcjtpZigxIT09Y3x8IXN8fCFzWzBdKXJldHVybiBuZXcgZighY3x8YzwwJiYoIXN8fHNbMF0pP05hTjpzP286MS8wKTtmb3IoYj0hMSxuPTA9PShjPU1hdGguc3FydCgrbykpfHxjPT0xLzA/KCgodD1NKHMpKS5sZW5ndGgrdSklMj09MCYmKHQrPSIwIiksYz1NYXRoLnNxcnQodCksdT1fKCh1KzEpLzIpLSh1PDB8fHUlMiksbmV3IGYodD1jPT0xLzA/IjFlIit1Oih0PWMudG9FeHBvbmVudGlhbCgpKS5zbGljZSgwLHQuaW5kZXhPZigiZSIpKzEpK3UpKTpuZXcgZihjLnRvU3RyaW5nKCkpLHI9KHU9Zi5wcmVjaXNpb24pKzM7OylpZihuPShhPW4pLnBsdXMoQShvLGEscisyLDEpKS50aW1lcyguNSksTShhLmQpLnNsaWNlKDAscik9PT0odD1NKG4uZCkpLnNsaWNlKDAscikpe2lmKCI5OTk5IiE9KHQ9dC5zbGljZShyLTMscisxKSkmJihpfHwiNDk5OSIhPXQpKXsrdCYmKCt0LnNsaWNlKDEpfHwiNSIhPXQuY2hhckF0KDApKXx8KEQobix1KzEsMSksZT0hbi50aW1lcyhuKS5lcShvKSk7YnJlYWt9aWYoIWkmJihEKGEsdSsxLDApLGEudGltZXMoYSkuZXEobykpKXtuPWE7YnJlYWt9cis9NCxpPTF9cmV0dXJuIGI9ITAsRChuLHUsZi5yb3VuZGluZyxlKX0sTy50YW5nZW50PU8udGFuPWZ1bmN0aW9uKCl7dmFyIGUsdCxyPXRoaXMsbj1yLmNvbnN0cnVjdG9yO3JldHVybiByLmlzRmluaXRlKCk/ci5pc1plcm8oKT9uZXcgbihyKTooZT1uLnByZWNpc2lvbix0PW4ucm91bmRpbmcsbi5wcmVjaXNpb249ZSsxMCxuLnJvdW5kaW5nPTEsKHI9ci5zaW4oKSkucz0xLHI9QShyLG5ldyBuKDEpLm1pbnVzKHIudGltZXMocikpLnNxcnQoKSxlKzEwLDApLG4ucHJlY2lzaW9uPWUsbi5yb3VuZGluZz10LEQoMj09b3x8ND09bz9yLm5lZygpOnIsZSx0LCEwKSk6bmV3IG4oTmFOKX0sTy50aW1lcz1PLm11bD1mdW5jdGlvbihlKXt2YXIgdCxyLG4saSxhLG8scyx1LGMsZj10aGlzLmNvbnN0cnVjdG9yLGw9dGhpcy5kLHA9KGU9bmV3IGYoZSkpLmQ7aWYoZS5zKj10aGlzLnMsIShsJiZsWzBdJiZwJiZwWzBdKSlyZXR1cm4gbmV3IGYoIWUuc3x8bCYmIWxbMF0mJiFwfHxwJiYhcFswXSYmIWw/TmFOOmwmJnA/MCplLnM6ZS5zLzApO2ZvcihyPV8odGhpcy5lL3EpK18oZS5lL3EpLCh1PWwubGVuZ3RoKTwoYz1wLmxlbmd0aCkmJihhPWwsbD1wLHA9YSxvPXUsdT1jLGM9byksYT1bXSxuPW89dStjO24tLTspYS5wdXNoKDApO2ZvcihuPWM7MDw9LS1uOyl7Zm9yKHQ9MCxpPXUrbjtuPGk7KXM9YVtpXStwW25dKmxbaS1uLTFdK3QsYVtpLS1dPXMlSXwwLHQ9cy9JfDA7YVtpXT0oYVtpXSt0KSVJfDB9Zm9yKDshYVstLW9dOylhLnBvcCgpO3JldHVybiB0PysrcjphLnNoaWZ0KCksZS5kPWEsZS5lPVIoYSxyKSxiP0QoZSxmLnByZWNpc2lvbixmLnJvdW5kaW5nKTplfSxPLnRvQmluYXJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIodGhpcywyLGUsdCl9LE8udG9EZWNpbWFsUGxhY2VzPU8udG9EUD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMsbj1yLmNvbnN0cnVjdG9yO3JldHVybiByPW5ldyBuKHIpLHZvaWQgMD09PWU/cjooaihlLDAsZCksdm9pZCAwPT09dD90PW4ucm91bmRpbmc6aih0LDAsOCksRChyLGUrci5lKzEsdCkpfSxPLnRvRXhwb25lbnRpYWw9ZnVuY3Rpb24oZSx0KXt2YXIgcixuPXRoaXMsaT1uLmNvbnN0cnVjdG9yO3JldHVybiByPXZvaWQgMD09PWU/QyhuLCEwKTooaihlLDAsZCksdm9pZCAwPT09dD90PWkucm91bmRpbmc6aih0LDAsOCksQyhuPUQobmV3IGkobiksZSsxLHQpLCEwLGUrMSkpLG4uaXNOZWcoKSYmIW4uaXNaZXJvKCk/Ii0iK3I6cn0sTy50b0ZpeGVkPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpPXRoaXMsYT1pLmNvbnN0cnVjdG9yO3JldHVybiByPXZvaWQgMD09PWU/QyhpKTooaihlLDAsZCksdm9pZCAwPT09dD90PWEucm91bmRpbmc6aih0LDAsOCksQyhuPUQobmV3IGEoaSksZStpLmUrMSx0KSwhMSxlK24uZSsxKSksaS5pc05lZygpJiYhaS5pc1plcm8oKT8iLSIrcjpyfSxPLnRvRnJhY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQscixuLGksYSxvLHMsdSxjLGYsbCxwLG09dGhpcyxoPW0uZCxkPW0uY29uc3RydWN0b3I7aWYoIWgpcmV0dXJuIG5ldyBkKG0pO2lmKGM9cj1uZXcgZCgxKSxuPXU9bmV3IGQoMCksbz0oYT0odD1uZXcgZChuKSkuZT1VKGgpLW0uZS0xKSVxLHQuZFswXT12KDEwLG88MD9xK286byksbnVsbD09ZSllPTA8YT90OmM7ZWxzZXtpZighKHM9bmV3IGQoZSkpLmlzSW50KCl8fHMubHQoYykpdGhyb3cgRXJyb3IoZytzKTtlPXMuZ3QodCk/MDxhP3Q6YzpzfWZvcihiPSExLHM9bmV3IGQoTShoKSksZj1kLnByZWNpc2lvbixkLnByZWNpc2lvbj1hPWgubGVuZ3RoKnEqMjtsPUEocyx0LDAsMSwxKSwxIT0oaT1yLnBsdXMobC50aW1lcyhuKSkpLmNtcChlKTspcj1uLG49aSxpPWMsYz11LnBsdXMobC50aW1lcyhpKSksdT1pLGk9dCx0PXMubWludXMobC50aW1lcyhpKSkscz1pO3JldHVybiBpPUEoZS5taW51cyhyKSxuLDAsMSwxKSx1PXUucGx1cyhpLnRpbWVzKGMpKSxyPXIucGx1cyhpLnRpbWVzKG4pKSx1LnM9Yy5zPW0ucyxwPUEoYyxuLGEsMSkubWludXMobSkuYWJzKCkuY21wKEEodSxyLGEsMSkubWludXMobSkuYWJzKCkpPDE/W2Msbl06W3Uscl0sZC5wcmVjaXNpb249ZixiPSEwLHB9LE8udG9IZXhhZGVjaW1hbD1PLnRvSGV4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIodGhpcywxNixlLHQpfSxPLnRvTmVhcmVzdD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMsbj1yLmNvbnN0cnVjdG9yO2lmKHI9bmV3IG4ociksbnVsbD09ZSl7aWYoIXIuZClyZXR1cm4gcjtlPW5ldyBuKDEpLHQ9bi5yb3VuZGluZ31lbHNle2lmKGU9bmV3IG4oZSksdm9pZCAwPT09dD90PW4ucm91bmRpbmc6aih0LDAsOCksIXIuZClyZXR1cm4gZS5zP3I6ZTtpZighZS5kKXJldHVybiBlLnMmJihlLnM9ci5zKSxlfXJldHVybiBlLmRbMF0/KGI9ITEscj1BKHIsZSwwLHQsMSkudGltZXMoZSksYj0hMCxEKHIpKTooZS5zPXIucyxyPWUpLHJ9LE8udG9OdW1iZXI9ZnVuY3Rpb24oKXtyZXR1cm4rdGhpc30sTy50b09jdGFsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIodGhpcyw4LGUsdCl9LE8udG9Qb3dlcj1PLnBvdz1mdW5jdGlvbihlKXt2YXIgdCxyLG4saSxhLG8scz10aGlzLHU9cy5jb25zdHJ1Y3RvcixjPSsoZT1uZXcgdShlKSk7aWYoIShzLmQmJmUuZCYmcy5kWzBdJiZlLmRbMF0pKXJldHVybiBuZXcgdSh2KCtzLGMpKTtpZigocz1uZXcgdShzKSkuZXEoMSkpcmV0dXJuIHM7aWYobj11LnByZWNpc2lvbixhPXUucm91bmRpbmcsZS5lcSgxKSlyZXR1cm4gRChzLG4sYSk7aWYoKHQ9XyhlLmUvcSkpPj1lLmQubGVuZ3RoLTEmJihyPWM8MD8tYzpjKTw9OTAwNzE5OTI1NDc0MDk5MSlyZXR1cm4gaT1IKHUscyxyLG4pLGUuczwwP25ldyB1KDEpLmRpdihpKTpEKGksbixhKTtpZigobz1zLnMpPDApe2lmKHQ8ZS5kLmxlbmd0aC0xKXJldHVybiBuZXcgdShOYU4pO2lmKDA9PSgxJmUuZFt0XSkmJihvPTEpLDA9PXMuZSYmMT09cy5kWzBdJiYxPT1zLmQubGVuZ3RoKXJldHVybiBzLnM9byxzfXJldHVybih0PTAhPShyPXYoK3MsYykpJiZpc0Zpbml0ZShyKT9uZXcgdShyKyIiKS5lOl8oYyooTWF0aC5sb2coIjAuIitNKHMuZCkpL01hdGguTE4xMCtzLmUrMSkpKT51Lm1heEUrMXx8dDx1Lm1pbkUtMT9uZXcgdSgwPHQ/by8wOjApOihiPSExLHUucm91bmRpbmc9cy5zPTEscj1NYXRoLm1pbigxMiwodCsiIikubGVuZ3RoKSwoaT1HKGUudGltZXMoWihzLG4rcikpLG4pKS5kJiZFKChpPUQoaSxuKzUsMSkpLmQsbixhKSYmKHQ9bisxMCwrTSgoaT1EKEcoZS50aW1lcyhaKHMsdCtyKSksdCksdCs1LDEpKS5kKS5zbGljZShuKzEsbisxNSkrMT09MWUxNCYmKGk9RChpLG4rMSwwKSkpLGkucz1vLGI9ITAsRChpLG4sdS5yb3VuZGluZz1hKSl9LE8udG9QcmVjaXNpb249ZnVuY3Rpb24oZSx0KXt2YXIgcixuPXRoaXMsaT1uLmNvbnN0cnVjdG9yO3JldHVybiByPXZvaWQgMD09PWU/QyhuLG4uZTw9aS50b0V4cE5lZ3x8bi5lPj1pLnRvRXhwUG9zKTooaihlLDEsZCksdm9pZCAwPT09dD90PWkucm91bmRpbmc6aih0LDAsOCksQyhuPUQobmV3IGkobiksZSx0KSxlPD1uLmV8fG4uZTw9aS50b0V4cE5lZyxlKSksbi5pc05lZygpJiYhbi5pc1plcm8oKT8iLSIrcjpyfSxPLnRvU2lnbmlmaWNhbnREaWdpdHM9Ty50b1NEPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwPT09ZT8oZT1yLnByZWNpc2lvbix0PXIucm91bmRpbmcpOihqKGUsMSxkKSx2b2lkIDA9PT10P3Q9ci5yb3VuZGluZzpqKHQsMCw4KSksRChuZXcgcih0aGlzKSxlLHQpfSxPLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY29uc3RydWN0b3Iscj1DKGUsZS5lPD10LnRvRXhwTmVnfHxlLmU+PXQudG9FeHBQb3MpO3JldHVybiBlLmlzTmVnKCkmJiFlLmlzWmVybygpPyItIityOnJ9LE8udHJ1bmNhdGVkPU8udHJ1bmM9ZnVuY3Rpb24oKXtyZXR1cm4gRChuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKSx0aGlzLmUrMSwxKX0sTy52YWx1ZU9mPU8udG9KU09OPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY29uc3RydWN0b3Iscj1DKGUsZS5lPD10LnRvRXhwTmVnfHxlLmU+PXQudG9FeHBQb3MpO3JldHVybiBlLmlzTmVnKCk/Ii0iK3I6cn07dmFyIEE9ZnVuY3Rpb24oZSx0LHIsbixpLGEpe3ZhciBvLHMsdSxjLGYsbCxwLG0saCxkLHksZyx2LGIseCx3LE4sTyxNLGosRT1lLmNvbnN0cnVjdG9yLFM9ZS5zPT10LnM/MTotMSxBPWUuZCxDPXQuZDtpZighKEEmJkFbMF0mJkMmJkNbMF0pKXJldHVybiBuZXcgRShlLnMmJnQucyYmKEE/IUN8fEFbMF0hPUNbMF06Qyk/QSYmMD09QVswXXx8IUM/MCpTOlMvMDpOYU4pO2ZvcihzPWE/KGY9MSxlLmUtdC5lKTooYT1JLGY9cSxfKGUuZS9mKS1fKHQuZS9mKSksTT1DLmxlbmd0aCxOPUEubGVuZ3RoLGQ9KGg9bmV3IEUoUykpLmQ9W10sdT0wO0NbdV09PShBW3VdfHwwKTt1KyspO2lmKENbdV0+KEFbdV18fDApJiZzLS0sbnVsbD09cj8oYj1yPUUucHJlY2lzaW9uLG49RS5yb3VuZGluZyk6Yj1pP3IrKGUuZS10LmUpKzE6cixiPDApZC5wdXNoKDEpLGw9ITA7ZWxzZXtpZihiPWIvZisyfDAsdT0wLDE9PU0pe2ZvcihDPUNbYz0wXSxiKys7KHU8Tnx8YykmJmItLTt1KyspeD1jKmErKEFbdV18fDApLGRbdV09eC9DfDAsYz14JUN8MDtsPWN8fHU8Tn1lbHNle2ZvcigxPChjPWEvKENbMF0rMSl8MCkmJihDPUIoQyxjLGEpLEE9QihBLGMsYSksTT1DLmxlbmd0aCxOPUEubGVuZ3RoKSx3PU0sZz0oeT1BLnNsaWNlKDAsTSkpLmxlbmd0aDtnPE07KXlbZysrXT0wO2Zvcigoaj1DLnNsaWNlKCkpLnVuc2hpZnQoMCksTz1DWzBdLENbMV0+PWEvMiYmKytPO2M9MCwobz1rKEMseSxNLGcpKTwwPyh2PXlbMF0sTSE9ZyYmKHY9diphKyh5WzFdfHwwKSksMTwoYz12L098MCk/KGE8PWMmJihjPWEtMSksMT09KG89ayhwPUIoQyxjLGEpLHksbT1wLmxlbmd0aCxnPXkubGVuZ3RoKSkmJihjLS0seihwLE08bT9qOkMsbSxhKSkpOigwPT1jJiYobz1jPTEpLHA9Qy5zbGljZSgpKSwobT1wLmxlbmd0aCk8ZyYmcC51bnNoaWZ0KDApLHooeSxwLGcsYSksLTE9PW8mJihvPWsoQyx5LE0sZz15Lmxlbmd0aCkpPDEmJihjKysseih5LE08Zz9qOkMsZyxhKSksZz15Lmxlbmd0aCk6MD09PW8mJihjKysseT1bMF0pLGRbdSsrXT1jLG8mJnlbMF0/eVtnKytdPUFbd118fDA6KHk9W0Fbd11dLGc9MSksKHcrKzxOfHx2b2lkIDAhPT15WzBdKSYmYi0tOyk7bD12b2lkIDAhPT15WzBdfWRbMF18fGQuc2hpZnQoKX1pZigxPT1mKWguZT1zLFQ9bDtlbHNle2Zvcih1PTEsYz1kWzBdOzEwPD1jO2MvPTEwKXUrKztoLmU9dStzKmYtMSxEKGgsaT9yK2guZSsxOnIsbixsKX1yZXR1cm4gaH07ZnVuY3Rpb24gQihlLHQscil7dmFyIG4saT0wLGE9ZS5sZW5ndGg7Zm9yKGU9ZS5zbGljZSgpO2EtLTspbj1lW2FdKnQraSxlW2FdPW4lcnwwLGk9bi9yfDA7cmV0dXJuIGkmJmUudW5zaGlmdChpKSxlfWZ1bmN0aW9uIGsoZSx0LHIsbil7dmFyIGksYTtpZihyIT1uKWE9bjxyPzE6LTE7ZWxzZSBmb3IoaT1hPTA7aTxyO2krKylpZihlW2ldIT10W2ldKXthPWVbaV0+dFtpXT8xOi0xO2JyZWFrfXJldHVybiBhfWZ1bmN0aW9uIHooZSx0LHIsbil7Zm9yKHZhciBpPTA7ci0tOyllW3JdLT1pLGk9ZVtyXTx0W3JdPzE6MCxlW3JdPWkqbitlW3JdLXRbcl07Zm9yKDshZVswXSYmMTxlLmxlbmd0aDspZS5zaGlmdCgpfWZ1bmN0aW9uIEQoZSx0LHIsbil7dmFyIGksYSxvLHMsdSxjLGYsbCxwLG09ZS5jb25zdHJ1Y3RvcjtlOmlmKG51bGwhPXQpe2lmKCEobD1lLmQpKXJldHVybiBlO2ZvcihpPTEscz1sWzBdOzEwPD1zO3MvPTEwKWkrKztpZigoYT10LWkpPDApYSs9cSxvPXQsdT0oZj1sW3A9MF0pL3YoMTAsaS1vLTEpJTEwfDA7ZWxzZSBpZihwPU1hdGguY2VpbCgoYSsxKS9xKSwocz1sLmxlbmd0aCk8PXApe2lmKCFuKWJyZWFrIGU7Zm9yKDtzKys8PXA7KWwucHVzaCgwKTtmPXU9MCxvPShhJT1xKS1xKyhpPTEpfWVsc2V7Zm9yKGY9cz1sW3BdLGk9MTsxMDw9cztzLz0xMClpKys7dT0obz0oYSU9cSktcStpKTwwPzA6Zi92KDEwLGktby0xKSUxMHwwfWlmKG49bnx8dDwwfHx2b2lkIDAhPT1sW3ArMV18fChvPDA/ZjpmJXYoMTAsaS1vLTEpKSxjPXI8ND8odXx8bikmJigwPT1yfHxyPT0oZS5zPDA/MzoyKSk6NTx1fHw1PT11JiYoND09cnx8bnx8Nj09ciYmKDA8YT8wPG8/Zi92KDEwLGktbyk6MDpsW3AtMV0pJTEwJjF8fHI9PShlLnM8MD84OjcpKSx0PDF8fCFsWzBdKXJldHVybiBsLmxlbmd0aD0wLGM/KHQtPWUuZSsxLGxbMF09digxMCwocS10JXEpJXEpLGUuZT0tdHx8MCk6bFswXT1lLmU9MCxlO2lmKDA9PWE/KGwubGVuZ3RoPXAscz0xLHAtLSk6KGwubGVuZ3RoPXArMSxzPXYoMTAscS1hKSxsW3BdPTA8bz8oZi92KDEwLGktbykldigxMCxvKXwwKSpzOjApLGMpZm9yKDs7KXtpZigwPT1wKXtmb3IoYT0xLG89bFswXTsxMDw9bztvLz0xMClhKys7Zm9yKG89bFswXSs9cyxzPTE7MTA8PW87by89MTApcysrO2EhPXMmJihlLmUrKyxsWzBdPT1JJiYobFswXT0xKSk7YnJlYWt9aWYobFtwXSs9cyxsW3BdIT1JKWJyZWFrO2xbcC0tXT0wLHM9MX1mb3IoYT1sLmxlbmd0aDswPT09bFstLWFdOylsLnBvcCgpfXJldHVybiBiJiYoZS5lPm0ubWF4RT8oZS5kPW51bGwsZS5lPU5hTik6ZS5lPG0ubWluRSYmKGUuZT0wLGUuZD1bMF0pKSxlfWZ1bmN0aW9uIEMoZSx0LHIpe2lmKCFlLmlzRmluaXRlKCkpcmV0dXJuIFYoZSk7dmFyIG4saT1lLmUsYT1NKGUuZCksbz1hLmxlbmd0aDtyZXR1cm4gdD8ociYmMDwobj1yLW8pP2E9YS5jaGFyQXQoMCkrIi4iK2Euc2xpY2UoMSkrTChuKToxPG8mJihhPWEuY2hhckF0KDApKyIuIithLnNsaWNlKDEpKSxhPWErKGUuZTwwPyJlIjoiZSsiKStlLmUpOmk8MD8oYT0iMC4iK0woLWktMSkrYSxyJiYwPChuPXItbykmJihhKz1MKG4pKSk6bzw9aT8oYSs9TChpKzEtbyksciYmMDwobj1yLWktMSkmJihhPWErIi4iK0wobikpKTooKG49aSsxKTxvJiYoYT1hLnNsaWNlKDAsbikrIi4iK2Euc2xpY2UobikpLHImJjA8KG49ci1vKSYmKGkrMT09PW8mJihhKz0iLiIpLGErPUwobikpKSxhfWZ1bmN0aW9uIFIoZSx0KXt2YXIgcj1lWzBdO2Zvcih0Kj1xOzEwPD1yO3IvPTEwKXQrKztyZXR1cm4gdH1mdW5jdGlvbiBQKGUsdCxyKXtpZih3PHQpdGhyb3cgYj0hMCxyJiYoZS5wcmVjaXNpb249ciksRXJyb3IoYSk7cmV0dXJuIEQobmV3IGUobiksdCwxLCEwKX1mdW5jdGlvbiBGKGUsdCxyKXtpZihOPHQpdGhyb3cgRXJyb3IoYSk7cmV0dXJuIEQobmV3IGUoaSksdCxyLCEwKX1mdW5jdGlvbiBVKGUpe3ZhciB0PWUubGVuZ3RoLTEscj10KnErMTtpZih0PWVbdF0pe2Zvcig7dCUxMD09MDt0Lz0xMClyLS07Zm9yKHQ9ZVswXTsxMDw9dDt0Lz0xMClyKyt9cmV0dXJuIHJ9ZnVuY3Rpb24gTChlKXtmb3IodmFyIHQ9IiI7ZS0tOyl0Kz0iMCI7cmV0dXJuIHR9ZnVuY3Rpb24gSChlLHQscixuKXt2YXIgaSxhPW5ldyBlKDEpLG89TWF0aC5jZWlsKG4vcSs0KTtmb3IoYj0hMTs7KXtpZihyJTImJlEoKGE9YS50aW1lcyh0KSkuZCxvKSYmKGk9ITApLDA9PT0ocj1fKHIvMikpKXtyPWEuZC5sZW5ndGgtMSxpJiYwPT09YS5kW3JdJiYrK2EuZFtyXTticmVha31RKCh0PXQudGltZXModCkpLmQsbyl9cmV0dXJuIGI9ITAsYX1mdW5jdGlvbiAkKGUpe3JldHVybiAxJmUuZFtlLmQubGVuZ3RoLTFdfWZ1bmN0aW9uIGUoZSx0LHIpe2Zvcih2YXIgbixpPW5ldyBlKHRbMF0pLGE9MDsrK2E8dC5sZW5ndGg7KXtpZighKG49bmV3IGUodFthXSkpLnMpe2k9bjticmVha31pW3JdKG4pJiYoaT1uKX1yZXR1cm4gaX1mdW5jdGlvbiBHKGUsdCl7dmFyIHIsbixpLGEsbyxzLHUsYz0wLGY9MCxsPTAscD1lLmNvbnN0cnVjdG9yLG09cC5yb3VuZGluZyxoPXAucHJlY2lzaW9uO2lmKCFlLmR8fCFlLmRbMF18fDE3PGUuZSlyZXR1cm4gbmV3IHAoZS5kP2UuZFswXT9lLnM8MD8wOjEvMDoxOmUucz9lLnM8MD8wOmU6TmFOKTtmb3IodT1udWxsPT10PyhiPSExLGgpOnQscz1uZXcgcCguMDMxMjUpOy0yPGUuZTspZT1lLnRpbWVzKHMpLGwrPTU7Zm9yKHUrPW49TWF0aC5sb2codigyLGwpKS9NYXRoLkxOMTAqMis1fDAscj1hPW89bmV3IHAoMSkscC5wcmVjaXNpb249dTs7KXtpZihhPUQoYS50aW1lcyhlKSx1LDEpLHI9ci50aW1lcygrK2YpLE0oKHM9by5wbHVzKEEoYSxyLHUsMSkpKS5kKS5zbGljZSgwLHUpPT09TShvLmQpLnNsaWNlKDAsdSkpe2ZvcihpPWw7aS0tOylvPUQoby50aW1lcyhvKSx1LDEpO2lmKG51bGwhPXQpcmV0dXJuIHAucHJlY2lzaW9uPWgsbztpZighKGM8MyYmRShvLmQsdS1uLG0sYykpKXJldHVybiBEKG8scC5wcmVjaXNpb249aCxtLGI9ITApO3AucHJlY2lzaW9uPXUrPTEwLHI9YT1zPW5ldyBwKDEpLGY9MCxjKyt9bz1zfX1mdW5jdGlvbiBaKGUsdCl7dmFyIHIsbixpLGEsbyxzLHUsYyxmLGwscCxtPTEsaD1lLGQ9aC5kLHk9aC5jb25zdHJ1Y3RvcixnPXkucm91bmRpbmcsdj15LnByZWNpc2lvbjtpZihoLnM8MHx8IWR8fCFkWzBdfHwhaC5lJiYxPT1kWzBdJiYxPT1kLmxlbmd0aClyZXR1cm4gbmV3IHkoZCYmIWRbMF0/LTEvMDoxIT1oLnM/TmFOOmQ/MDpoKTtpZihmPW51bGw9PXQ/KGI9ITEsdik6dCx5LnByZWNpc2lvbj1mKz0xMCxuPShyPU0oZCkpLmNoYXJBdCgwKSwhKE1hdGguYWJzKGE9aC5lKTwxNWUxNCkpcmV0dXJuIGM9UCh5LGYrMix2KS50aW1lcyhhKyIiKSxoPVoobmV3IHkobisiLiIrci5zbGljZSgxKSksZi0xMCkucGx1cyhjKSx5LnByZWNpc2lvbj12LG51bGw9PXQ/RChoLHYsZyxiPSEwKTpoO2Zvcig7bjw3JiYxIT1ufHwxPT1uJiYzPHIuY2hhckF0KDEpOyluPShyPU0oKGg9aC50aW1lcyhlKSkuZCkpLmNoYXJBdCgwKSxtKys7Zm9yKGE9aC5lLDE8bj8oaD1uZXcgeSgiMC4iK3IpLGErKyk6aD1uZXcgeShuKyIuIityLnNsaWNlKDEpKSx1PW89aD1BKChsPWgpLm1pbnVzKDEpLGgucGx1cygxKSxmLDEpLHA9RChoLnRpbWVzKGgpLGYsMSksaT0zOzspe2lmKG89RChvLnRpbWVzKHApLGYsMSksTSgoYz11LnBsdXMoQShvLG5ldyB5KGkpLGYsMSkpKS5kKS5zbGljZSgwLGYpPT09TSh1LmQpLnNsaWNlKDAsZikpe2lmKHU9dS50aW1lcygyKSwwIT09YSYmKHU9dS5wbHVzKFAoeSxmKzIsdikudGltZXMoYSsiIikpKSx1PUEodSxuZXcgeShtKSxmLDEpLG51bGwhPXQpcmV0dXJuIHkucHJlY2lzaW9uPXYsdTtpZighRSh1LmQsZi0xMCxnLHMpKXJldHVybiBEKHUseS5wcmVjaXNpb249dixnLGI9ITApO3kucHJlY2lzaW9uPWYrPTEwLGM9bz1oPUEobC5taW51cygxKSxsLnBsdXMoMSksZiwxKSxwPUQoaC50aW1lcyhoKSxmLDEpLGk9cz0xfXU9YyxpKz0yfX1mdW5jdGlvbiBWKGUpe3JldHVybiBTdHJpbmcoZS5zKmUucy8wKX1mdW5jdGlvbiBKKGUsdCl7dmFyIHIsbixpO2ZvcigtMTwocj10LmluZGV4T2YoIi4iKSkmJih0PXQucmVwbGFjZSgiLiIsIiIpKSwwPChuPXQuc2VhcmNoKC9lL2kpKT8ocjwwJiYocj1uKSxyKz0rdC5zbGljZShuKzEpLHQ9dC5zdWJzdHJpbmcoMCxuKSk6cjwwJiYocj10Lmxlbmd0aCksbj0wOzQ4PT09dC5jaGFyQ29kZUF0KG4pO24rKyk7Zm9yKGk9dC5sZW5ndGg7NDg9PT10LmNoYXJDb2RlQXQoaS0xKTstLWkpO2lmKHQ9dC5zbGljZShuLGkpKXtpZihpLT1uLGUuZT1yPXItbi0xLGUuZD1bXSxuPShyKzEpJXEscjwwJiYobis9cSksbjxpKXtmb3IobiYmZS5kLnB1c2goK3Quc2xpY2UoMCxuKSksaS09cTtuPGk7KWUuZC5wdXNoKCt0LnNsaWNlKG4sbis9cSkpO3Q9dC5zbGljZShuKSxuPXEtdC5sZW5ndGh9ZWxzZSBuLT1pO2Zvcig7bi0tOyl0Kz0iMCI7ZS5kLnB1c2goK3QpLGImJihlLmU+ZS5jb25zdHJ1Y3Rvci5tYXhFPyhlLmQ9bnVsbCxlLmU9TmFOKTplLmU8ZS5jb25zdHJ1Y3Rvci5taW5FJiYoZS5lPTAsZS5kPVswXSkpfWVsc2UgZS5lPTAsZS5kPVswXTtyZXR1cm4gZX1mdW5jdGlvbiBXKGUsdCxyLG4saSl7dmFyIGEsbyxzLHUsYz1lLnByZWNpc2lvbixmPU1hdGguY2VpbChjL3EpO2ZvcihiPSExLHU9ci50aW1lcyhyKSxzPW5ldyBlKG4pOzspe2lmKG89QShzLnRpbWVzKHUpLG5ldyBlKHQrKyp0KyspLGMsMSkscz1pP24ucGx1cyhvKTpuLm1pbnVzKG8pLG49QShvLnRpbWVzKHUpLG5ldyBlKHQrKyp0KyspLGMsMSksdm9pZCAwIT09KG89cy5wbHVzKG4pKS5kW2ZdKXtmb3IoYT1mO28uZFthXT09PXMuZFthXSYmYS0tOyk7aWYoLTE9PWEpYnJlYWt9YT1zLHM9bixuPW8sbz1hLDB9cmV0dXJuIGI9ITAsby5kLmxlbmd0aD1mKzEsb31mdW5jdGlvbiBZKGUsdCl7Zm9yKHZhciByPWU7LS10OylyKj1lO3JldHVybiByfWZ1bmN0aW9uIFgoZSx0KXt2YXIgcixuPXQuczwwLGk9RihlLGUucHJlY2lzaW9uLDEpLGE9aS50aW1lcyguNSk7aWYoKHQ9dC5hYnMoKSkubHRlKGEpKXJldHVybiBvPW4/NDoxLHQ7aWYoKHI9dC5kaXZUb0ludChpKSkuaXNaZXJvKCkpbz1uPzM6MjtlbHNle2lmKCh0PXQubWludXMoci50aW1lcyhpKSkpLmx0ZShhKSlyZXR1cm4gbz0kKHIpP24/MjozOm4/NDoxLHQ7bz0kKHIpP24/MTo0Om4/MzoyfXJldHVybiB0Lm1pbnVzKGkpLmFicygpfWZ1bmN0aW9uIHIoZSx0LHIsbil7dmFyIGksYSxvLHMsdSxjLGYsbCxwLG09ZS5jb25zdHJ1Y3RvcixoPXZvaWQgMCE9PXI7aWYoaD8oaihyLDEsZCksdm9pZCAwPT09bj9uPW0ucm91bmRpbmc6aihuLDAsOCkpOihyPW0ucHJlY2lzaW9uLG49bS5yb3VuZGluZyksZS5pc0Zpbml0ZSgpKXtmb3IoaD8oaT0yLDE2PT10P3I9NCpyLTM6OD09dCYmKHI9MypyLTIpKTppPXQsMDw9KG89KGY9QyhlKSkuaW5kZXhPZigiLiIpKSYmKGY9Zi5yZXBsYWNlKCIuIiwiIiksKHA9bmV3IG0oMSkpLmU9Zi5sZW5ndGgtbyxwLmQ9UyhDKHApLDEwLGkpLHAuZT1wLmQubGVuZ3RoKSxhPXU9KGw9UyhmLDEwLGkpKS5sZW5ndGg7MD09bFstLXVdOylsLnBvcCgpO2lmKGxbMF0pe2lmKG88MD9hLS06KChlPW5ldyBtKGUpKS5kPWwsZS5lPWEsbD0oZT1BKGUscCxyLG4sMCxpKSkuZCxhPWUuZSxjPVQpLG89bFtyXSxzPWkvMixjPWN8fHZvaWQgMCE9PWxbcisxXSxjPW48ND8odm9pZCAwIT09b3x8YykmJigwPT09bnx8bj09PShlLnM8MD8zOjIpKTpzPG98fG89PT1zJiYoND09PW58fGN8fDY9PT1uJiYxJmxbci0xXXx8bj09PShlLnM8MD84OjcpKSxsLmxlbmd0aD1yLGMpZm9yKDsrK2xbLS1yXT5pLTE7KWxbcl09MCxyfHwoKythLGwudW5zaGlmdCgxKSk7Zm9yKHU9bC5sZW5ndGg7IWxbdS0xXTstLXUpO2ZvcihvPTAsZj0iIjtvPHU7bysrKWYrPXkuY2hhckF0KGxbb10pO2lmKGgpe2lmKDE8dSlpZigxNj09dHx8OD09dCl7Zm9yKG89MTY9PXQ/NDozLC0tdTt1JW87dSsrKWYrPSIwIjtmb3IodT0obD1TKGYsaSx0KSkubGVuZ3RoOyFsW3UtMV07LS11KTtmb3Iobz0xLGY9IjEuIjtvPHU7bysrKWYrPXkuY2hhckF0KGxbb10pfWVsc2UgZj1mLmNoYXJBdCgwKSsiLiIrZi5zbGljZSgxKTtmPWYrKGE8MD8icCI6InArIikrYX1lbHNlIGlmKGE8MCl7Zm9yKDsrK2E7KWY9IjAiK2Y7Zj0iMC4iK2Z9ZWxzZSBpZigrK2E+dSlmb3IoYS09dTthLS07KWYrPSIwIjtlbHNlIGE8dSYmKGY9Zi5zbGljZSgwLGEpKyIuIitmLnNsaWNlKGEpKX1lbHNlIGY9aD8iMHArMCI6IjAiO2Y9KDE2PT10PyIweCI6Mj09dD8iMGIiOjg9PXQ/IjBvIjoiIikrZn1lbHNlIGY9VihlKTtyZXR1cm4gZS5zPDA/Ii0iK2Y6Zn1mdW5jdGlvbiBRKGUsdCl7cmV0dXJuIGUubGVuZ3RoPnQmJihlLmxlbmd0aD10LDEpfWZ1bmN0aW9uIEsoZSl7cmV0dXJuIG5ldyB0aGlzKGUpLmFicygpfWZ1bmN0aW9uIGVlKGUpe3JldHVybiBuZXcgdGhpcyhlKS5hY29zKCl9ZnVuY3Rpb24gdGUoZSl7cmV0dXJuIG5ldyB0aGlzKGUpLmFjb3NoKCl9ZnVuY3Rpb24gcmUoZSx0KXtyZXR1cm4gbmV3IHRoaXMoZSkucGx1cyh0KX1mdW5jdGlvbiBuZShlKXtyZXR1cm4gbmV3IHRoaXMoZSkuYXNpbigpfWZ1bmN0aW9uIGllKGUpe3JldHVybiBuZXcgdGhpcyhlKS5hc2luaCgpfWZ1bmN0aW9uIGFlKGUpe3JldHVybiBuZXcgdGhpcyhlKS5hdGFuKCl9ZnVuY3Rpb24gb2UoZSl7cmV0dXJuIG5ldyB0aGlzKGUpLmF0YW5oKCl9ZnVuY3Rpb24gc2UoZSx0KXtlPW5ldyB0aGlzKGUpLHQ9bmV3IHRoaXModCk7dmFyIHIsbj10aGlzLnByZWNpc2lvbixpPXRoaXMucm91bmRpbmcsYT1uKzQ7cmV0dXJuIGUucyYmdC5zP2UuZHx8dC5kPyF0LmR8fGUuaXNaZXJvKCk/KHI9dC5zPDA/Rih0aGlzLG4saSk6bmV3IHRoaXMoMCkpLnM9ZS5zOiFlLmR8fHQuaXNaZXJvKCk/KHI9Rih0aGlzLGEsMSkudGltZXMoLjUpKS5zPWUuczpyPXQuczwwPyh0aGlzLnByZWNpc2lvbj1hLHRoaXMucm91bmRpbmc9MSxyPXRoaXMuYXRhbihBKGUsdCxhLDEpKSx0PUYodGhpcyxhLDEpLHRoaXMucHJlY2lzaW9uPW4sdGhpcy5yb3VuZGluZz1pLGUuczwwP3IubWludXModCk6ci5wbHVzKHQpKTp0aGlzLmF0YW4oQShlLHQsYSwxKSk6KHI9Rih0aGlzLGEsMSkudGltZXMoMDx0LnM/LjI1Oi43NSkpLnM9ZS5zOnI9bmV3IHRoaXMoTmFOKSxyfWZ1bmN0aW9uIHVlKGUpe3JldHVybiBuZXcgdGhpcyhlKS5jYnJ0KCl9ZnVuY3Rpb24gY2UoZSl7cmV0dXJuIEQoZT1uZXcgdGhpcyhlKSxlLmUrMSwyKX1mdW5jdGlvbiBmZShlKXtpZighZXx8Im9iamVjdCIhPXR5cGVvZiBlKXRocm93IEVycm9yKGMrIk9iamVjdCBleHBlY3RlZCIpO3ZhciB0LHIsbixpPSEwPT09ZS5kZWZhdWx0cyxhPVsicHJlY2lzaW9uIiwxLGQsInJvdW5kaW5nIiwwLDgsInRvRXhwTmVnIiwtcywwLCJ0b0V4cFBvcyIsMCxzLCJtYXhFIiwwLHMsIm1pbkUiLC1zLDAsIm1vZHVsbyIsMCw5XTtmb3IodD0wO3Q8YS5sZW5ndGg7dCs9MylpZihyPWFbdF0saSYmKHRoaXNbcl09dVtyXSksdm9pZCAwIT09KG49ZVtyXSkpe2lmKCEoXyhuKT09PW4mJmFbdCsxXTw9biYmbjw9YVt0KzJdKSl0aHJvdyBFcnJvcihnK3IrIjogIituKTt0aGlzW3JdPW59aWYocj0iY3J5cHRvIixpJiYodGhpc1tyXT11W3JdKSx2b2lkIDAhPT0obj1lW3JdKSl7aWYoITAhPT1uJiYhMSE9PW4mJjAhPT1uJiYxIT09bil0aHJvdyBFcnJvcihnK3IrIjogIituKTtpZihuKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIGNyeXB0b3x8IWNyeXB0b3x8IWNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJiFjcnlwdG8ucmFuZG9tQnl0ZXMpdGhyb3cgRXJyb3IoZik7dGhpc1tyXT0hMH1lbHNlIHRoaXNbcl09ITF9cmV0dXJuIHRoaXN9ZnVuY3Rpb24gbGUoZSl7cmV0dXJuIG5ldyB0aGlzKGUpLmNvcygpfWZ1bmN0aW9uIHBlKGUpe3JldHVybiBuZXcgdGhpcyhlKS5jb3NoKCl9ZnVuY3Rpb24gbWUoZSx0KXtyZXR1cm4gbmV3IHRoaXMoZSkuZGl2KHQpfWZ1bmN0aW9uIGhlKGUpe3JldHVybiBuZXcgdGhpcyhlKS5leHAoKX1mdW5jdGlvbiBkZShlKXtyZXR1cm4gRChlPW5ldyB0aGlzKGUpLGUuZSsxLDMpfWZ1bmN0aW9uIHllKCl7dmFyIGUsdCxyPW5ldyB0aGlzKDApO2ZvcihiPSExLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7KWlmKCh0PW5ldyB0aGlzKGFyZ3VtZW50c1tlKytdKSkuZClyLmQmJihyPXIucGx1cyh0LnRpbWVzKHQpKSk7ZWxzZXtpZih0LnMpcmV0dXJuIGI9ITAsbmV3IHRoaXMoMS8wKTtyPXR9cmV0dXJuIGI9ITAsci5zcXJ0KCl9ZnVuY3Rpb24gZ2UoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBsfHxlJiYiW29iamVjdCBEZWNpbWFsXSI9PT1lLm5hbWV8fCExfWZ1bmN0aW9uIHZlKGUpe3JldHVybiBuZXcgdGhpcyhlKS5sbigpfWZ1bmN0aW9uIGJlKGUsdCl7cmV0dXJuIG5ldyB0aGlzKGUpLmxvZyh0KX1mdW5jdGlvbiB4ZShlKXtyZXR1cm4gbmV3IHRoaXMoZSkubG9nKDIpfWZ1bmN0aW9uIHdlKGUpe3JldHVybiBuZXcgdGhpcyhlKS5sb2coMTApfWZ1bmN0aW9uIE5lKCl7cmV0dXJuIGUodGhpcyxhcmd1bWVudHMsImx0Iil9ZnVuY3Rpb24gT2UoKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cywiZ3QiKX1mdW5jdGlvbiBNZShlLHQpe3JldHVybiBuZXcgdGhpcyhlKS5tb2QodCl9ZnVuY3Rpb24gamUoZSx0KXtyZXR1cm4gbmV3IHRoaXMoZSkubXVsKHQpfWZ1bmN0aW9uIEVlKGUsdCl7cmV0dXJuIG5ldyB0aGlzKGUpLnBvdyh0KX1mdW5jdGlvbiBTZShlKXt2YXIgdCxyLG4saSxhPTAsbz1uZXcgdGhpcygxKSxzPVtdO2lmKHZvaWQgMD09PWU/ZT10aGlzLnByZWNpc2lvbjpqKGUsMSxkKSxuPU1hdGguY2VpbChlL3EpLHRoaXMuY3J5cHRvKWlmKGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpZm9yKHQ9Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkobikpO2E8bjspNDI5ZTc8PShpPXRbYV0pP3RbYV09Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoMSkpWzBdOnNbYSsrXT1pJTFlNztlbHNle2lmKCFjcnlwdG8ucmFuZG9tQnl0ZXMpdGhyb3cgRXJyb3IoZik7Zm9yKHQ9Y3J5cHRvLnJhbmRvbUJ5dGVzKG4qPTQpO2E8bjspMjE0ZTc8PShpPXRbYV0rKHRbYSsxXTw8OCkrKHRbYSsyXTw8MTYpKygoMTI3JnRbYSszXSk8PDI0KSk/Y3J5cHRvLnJhbmRvbUJ5dGVzKDQpLmNvcHkodCxhKToocy5wdXNoKGklMWU3KSxhKz00KTthPW4vNH1lbHNlIGZvcig7YTxuOylzW2ErK109MWU3Kk1hdGgucmFuZG9tKCl8MDtmb3Iobj1zWy0tYV0sZSU9cSxuJiZlJiYoaT12KDEwLHEtZSksc1thXT0obi9pfDApKmkpOzA9PT1zW2FdO2EtLSlzLnBvcCgpO2lmKGE8MClzPVtyPTBdO2Vsc2V7Zm9yKHI9LTE7MD09PXNbMF07ci09cSlzLnNoaWZ0KCk7Zm9yKG49MSxpPXNbMF07MTA8PWk7aS89MTApbisrO248cSYmKHItPXEtbil9cmV0dXJuIG8uZT1yLG8uZD1zLG99ZnVuY3Rpb24gQWUoZSl7cmV0dXJuIEQoZT1uZXcgdGhpcyhlKSxlLmUrMSx0aGlzLnJvdW5kaW5nKX1mdW5jdGlvbiBDZShlKXtyZXR1cm4oZT1uZXcgdGhpcyhlKSkuZD9lLmRbMF0/ZS5zOjAqZS5zOmUuc3x8TmFOfWZ1bmN0aW9uIFRlKGUpe3JldHVybiBuZXcgdGhpcyhlKS5zaW4oKX1mdW5jdGlvbiBfZShlKXtyZXR1cm4gbmV3IHRoaXMoZSkuc2luaCgpfWZ1bmN0aW9uIEllKGUpe3JldHVybiBuZXcgdGhpcyhlKS5zcXJ0KCl9ZnVuY3Rpb24gcWUoZSx0KXtyZXR1cm4gbmV3IHRoaXMoZSkuc3ViKHQpfWZ1bmN0aW9uIEJlKGUpe3JldHVybiBuZXcgdGhpcyhlKS50YW4oKX1mdW5jdGlvbiBrZShlKXtyZXR1cm4gbmV3IHRoaXMoZSkudGFuaCgpfWZ1bmN0aW9uIHplKGUpe3JldHVybiBEKGU9bmV3IHRoaXMoZSksZS5lKzEsMSl9KGw9ZnVuY3Rpb24gZSh0KXt2YXIgcixuLGk7ZnVuY3Rpb24gYShlKXt2YXIgdCxyLG4saT10aGlzO2lmKCEoaSBpbnN0YW5jZW9mIGEpKXJldHVybiBuZXcgYShlKTtpZihlIGluc3RhbmNlb2YoaS5jb25zdHJ1Y3Rvcj1hKSlyZXR1cm4gaS5zPWUucyx2b2lkKGI/IWUuZHx8ZS5lPmEubWF4RT8oaS5lPU5hTixpLmQ9bnVsbCk6ZS5lPGEubWluRT8oaS5lPTAsaS5kPVswXSk6KGkuZT1lLmUsaS5kPWUuZC5zbGljZSgpKTooaS5lPWUuZSxpLmQ9ZS5kP2UuZC5zbGljZSgpOmUuZCkpO2lmKCJudW1iZXIiPT0obj10eXBlb2YgZSkpe2lmKDA9PT1lKXJldHVybiBpLnM9MS9lPDA/LTE6MSxpLmU9MCx2b2lkKGkuZD1bMF0pO2lmKGU8MD8oZT0tZSxpLnM9LTEpOmkucz0xLGU9PT1+fmUmJmU8MWU3KXtmb3IodD0wLHI9ZTsxMDw9cjtyLz0xMCl0Kys7cmV0dXJuIHZvaWQoYj9hLm1heEU8dD8oaS5lPU5hTixpLmQ9bnVsbCk6dDxhLm1pbkU/KGkuZT0wLGkuZD1bMF0pOihpLmU9dCxpLmQ9W2VdKTooaS5lPXQsaS5kPVtlXSkpfXJldHVybiAwKmUhPTA/KGV8fChpLnM9TmFOKSxpLmU9TmFOLHZvaWQoaS5kPW51bGwpKTpKKGksZS50b1N0cmluZygpKX1pZigic3RyaW5nIiE9bil0aHJvdyBFcnJvcihnK2UpO3JldHVybiA0NT09PShyPWUuY2hhckNvZGVBdCgwKSk/KGU9ZS5zbGljZSgxKSxpLnM9LTEpOig0Mz09PXImJihlPWUuc2xpY2UoMSkpLGkucz0xKSwoeC50ZXN0KGUpP0o6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGksYSxvLHMsdSxjLGY7aWYoIkluZmluaXR5Ij09PXR8fCJOYU4iPT09dClyZXR1cm4rdHx8KGUucz1OYU4pLGUuZT1OYU4sZS5kPW51bGwsZTtpZihtLnRlc3QodCkpcj0xNix0PXQudG9Mb3dlckNhc2UoKTtlbHNlIGlmKHAudGVzdCh0KSlyPTI7ZWxzZXtpZighaC50ZXN0KHQpKXRocm93IEVycm9yKGcrdCk7cj04fWZvcihvPTA8PShhPSh0PTA8KGE9dC5zZWFyY2goL3AvaSkpPyh1PSt0LnNsaWNlKGErMSksdC5zdWJzdHJpbmcoMixhKSk6dC5zbGljZSgyKSkuaW5kZXhPZigiLiIpKSxuPWUuY29uc3RydWN0b3IsbyYmKGE9KHM9KHQ9dC5yZXBsYWNlKCIuIiwiIikpLmxlbmd0aCktYSxpPUgobixuZXcgbihyKSxhLDIqYSkpLGE9Zj0oYz1TKHQscixJKSkubGVuZ3RoLTE7MD09PWNbYV07LS1hKWMucG9wKCk7cmV0dXJuIGE8MD9uZXcgbigwKmUucyk6KGUuZT1SKGMsZiksZS5kPWMsYj0hMSxvJiYoZT1BKGUsaSw0KnMpKSx1JiYoZT1lLnRpbWVzKE1hdGguYWJzKHUpPDU0P3YoMix1KTpsLnBvdygyLHUpKSksYj0hMCxlKX0pKGksZSl9aWYoYS5wcm90b3R5cGU9TyxhLlJPVU5EX1VQPTAsYS5ST1VORF9ET1dOPTEsYS5ST1VORF9DRUlMPTIsYS5ST1VORF9GTE9PUj0zLGEuUk9VTkRfSEFMRl9VUD00LGEuUk9VTkRfSEFMRl9ET1dOPTUsYS5ST1VORF9IQUxGX0VWRU49NixhLlJPVU5EX0hBTEZfQ0VJTD03LGEuUk9VTkRfSEFMRl9GTE9PUj04LGEuRVVDTElEPTksYS5jb25maWc9YS5zZXQ9ZmUsYS5jbG9uZT1lLGEuaXNEZWNpbWFsPWdlLGEuYWJzPUssYS5hY29zPWVlLGEuYWNvc2g9dGUsYS5hZGQ9cmUsYS5hc2luPW5lLGEuYXNpbmg9aWUsYS5hdGFuPWFlLGEuYXRhbmg9b2UsYS5hdGFuMj1zZSxhLmNicnQ9dWUsYS5jZWlsPWNlLGEuY29zPWxlLGEuY29zaD1wZSxhLmRpdj1tZSxhLmV4cD1oZSxhLmZsb29yPWRlLGEuaHlwb3Q9eWUsYS5sbj12ZSxhLmxvZz1iZSxhLmxvZzEwPXdlLGEubG9nMj14ZSxhLm1heD1OZSxhLm1pbj1PZSxhLm1vZD1NZSxhLm11bD1qZSxhLnBvdz1FZSxhLnJhbmRvbT1TZSxhLnJvdW5kPUFlLGEuc2lnbj1DZSxhLnNpbj1UZSxhLnNpbmg9X2UsYS5zcXJ0PUllLGEuc3ViPXFlLGEudGFuPUJlLGEudGFuaD1rZSxhLnRydW5jPXplLHZvaWQgMD09PXQmJih0PXt9KSx0JiYhMCE9PXQuZGVmYXVsdHMpZm9yKGk9WyJwcmVjaXNpb24iLCJyb3VuZGluZyIsInRvRXhwTmVnIiwidG9FeHBQb3MiLCJtYXhFIiwibWluRSIsIm1vZHVsbyIsImNyeXB0byJdLHI9MDtyPGkubGVuZ3RoOyl0Lmhhc093blByb3BlcnR5KG49aVtyKytdKXx8KHRbbl09dGhpc1tuXSk7cmV0dXJuIGEuY29uZmlnKHQpLGF9KHUpKS5kZWZhdWx0PWwuRGVjaW1hbD1sLG49bmV3IGwobiksaT1uZXcgbChpKSx2b2lkIDA9PT0oUGU9ZnVuY3Rpb24oKXtyZXR1cm4gbH0uY2FsbChEZSxSZSxEZSx0KSl8fCh0LmV4cG9ydHM9UGUpfSgpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGwoZSx0KXtyZXR1cm4gcCh7fSxlLHQpfXZhciBwPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9LG09eyJ7IjoiXFx7IiwifSI6IlxcfSIsIlxcIjoiXFx0ZXh0YmFja3NsYXNoe30iLCIjIjoiXFwjIiwkOiJcXCQiLCIlIjoiXFwlIiwiJiI6IlxcJiIsIl4iOiJcXHRleHRhc2NpaWNpcmN1bXt9IixfOiJcXF8iLCJ+IjoiXFx0ZXh0YXNjaWl0aWxkZXt9In0saD17IuKAkyI6IlxcLS0iLCLigJQiOiJcXC0tLSIsIiAiOiJ+IiwiXHQiOiJcXHFxdWFke30iLCJcclxuIjoiXFxuZXdsaW5le30iLCJcbiI6IlxcbmV3bGluZXt9In07ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30scj10LnByZXNlcnZlRm9ybWF0dGluZyxuPXZvaWQgMCE9PXImJnIsaT10LmVzY2FwZU1hcEZuLGE9dm9pZCAwPT09aT9sOmksbz1TdHJpbmcoZSkscz0iIix1PWEocCh7fSxtKSxuP3Aoe30saCk6e30pLGM9T2JqZWN0LmtleXModSksZj1mdW5jdGlvbigpe3ZhciByPSExO2MuZm9yRWFjaChmdW5jdGlvbihlLHQpe3J8fG8ubGVuZ3RoPj1lLmxlbmd0aCYmby5zbGljZSgwLGUubGVuZ3RoKT09PWUmJihzKz11W2NbdF1dLG89by5zbGljZShlLmxlbmd0aCxvLmxlbmd0aCkscj0hMCl9KSxyfHwocys9by5zbGljZSgwLDEpLG89by5zbGljZSgxLG8ubGVuZ3RoKSl9O287KWYoKTtyZXR1cm4gc319LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcigpe31yLnByb3RvdHlwZT17b246ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuZXx8KHRoaXMuZT17fSk7cmV0dXJuKG5bZV18fChuW2VdPVtdKSkucHVzaCh7Zm46dCxjdHg6cn0pLHRoaXN9LG9uY2U6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXM7ZnVuY3Rpb24gaSgpe24ub2ZmKGUsaSksdC5hcHBseShyLGFyZ3VtZW50cyl9cmV0dXJuIGkuXz10LHRoaXMub24oZSxpLHIpfSxlbWl0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxyPSgodGhpcy5lfHwodGhpcy5lPXt9KSlbZV18fFtdKS5zbGljZSgpLG49MCxpPXIubGVuZ3RoO248aTtuKyspcltuXS5mbi5hcHBseShyW25dLmN0eCx0KTtyZXR1cm4gdGhpc30sb2ZmOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5lfHwodGhpcy5lPXt9KSxuPXJbZV0saT1bXTtpZihuJiZ0KWZvcih2YXIgYT0wLG89bi5sZW5ndGg7YTxvO2ErKyluW2FdLmZuIT09dCYmblthXS5mbi5fIT09dCYmaS5wdXNoKG5bYV0pO3JldHVybiBpLmxlbmd0aD9yW2VdPWk6ZGVsZXRlIHJbZV0sdGhpc319LGUuZXhwb3J0cz1yLGUuZXhwb3J0cy5UaW55RW1pdHRlcj1yfSxmdW5jdGlvbihlLHQscil7dmFyIG49cigyMSksaT0oMCxyKDIyKS5jcmVhdGUpKG4pO2UuZXhwb3J0cz1pfSxmdW5jdGlvbihlLHQpe3ZhciByO3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKTt0cnl7cj1yfHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaChlKXsib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKHI9d2luZG93KX1lLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyLnIodCk7dmFyIGllPXIoMSksbj1yKDE0KSxpPXIubihuKSxFPXIoNCkscz1yKDApLG89ZnVuY3Rpb24oKXtyZXR1cm4gbz1pLmEuY3JlYXRlLGkuYX0sYT1bIj9CaWdOdW1iZXIiLCI/Q29tcGxleCIsIj9EZW5zZU1hdHJpeCIsIj9GcmFjdGlvbiJdLHU9T2JqZWN0KHMuYSkoInR5cGVkIixhLGZ1bmN0aW9uKGUpe3ZhciByPWUuQmlnTnVtYmVyLG49ZS5Db21wbGV4LHQ9ZS5EZW5zZU1hdHJpeCxpPWUuRnJhY3Rpb24sYT1vKCk7cmV0dXJuIGEudHlwZXM9W3tuYW1lOiJudW1iZXIiLHRlc3Q6aWUueX0se25hbWU6IkNvbXBsZXgiLHRlc3Q6aWUuan0se25hbWU6IkJpZ051bWJlciIsdGVzdDppZS5lfSx7bmFtZToiRnJhY3Rpb24iLHRlc3Q6aWUub30se25hbWU6IlVuaXQiLHRlc3Q6aWUuTH0se25hbWU6InN0cmluZyIsdGVzdDppZS5JfSx7bmFtZToiQ2hhaW4iLHRlc3Q6aWUuaH0se25hbWU6IkFycmF5Iix0ZXN0OmllLmJ9LHtuYW1lOiJNYXRyaXgiLHRlc3Q6aWUudn0se25hbWU6IkRlbnNlTWF0cml4Iix0ZXN0OmllLm59LHtuYW1lOiJTcGFyc2VNYXRyaXgiLHRlc3Q6aWUuSH0se25hbWU6IlJhbmdlIix0ZXN0OmllLkR9LHtuYW1lOiJJbmRleCIsdGVzdDppZS50fSx7bmFtZToiYm9vbGVhbiIsdGVzdDppZS5nfSx7bmFtZToiUmVzdWx0U2V0Iix0ZXN0OmllLkd9LHtuYW1lOiJIZWxwIix0ZXN0OmllLnN9LHtuYW1lOiJmdW5jdGlvbiIsdGVzdDppZS5wfSx7bmFtZToiRGF0ZSIsdGVzdDppZS5tfSx7bmFtZToiUmVnRXhwIix0ZXN0OmllLkZ9LHtuYW1lOiJudWxsIix0ZXN0OmllLnh9LHtuYW1lOiJ1bmRlZmluZWQiLHRlc3Q6aWUuS30se25hbWU6IkFjY2Vzc29yTm9kZSIsdGVzdDppZS5hfSx7bmFtZToiQXJyYXlOb2RlIix0ZXN0OmllLmN9LHtuYW1lOiJBc3NpZ25tZW50Tm9kZSIsdGVzdDppZS5kfSx7bmFtZToiQmxvY2tOb2RlIix0ZXN0OmllLmZ9LHtuYW1lOiJDb25kaXRpb25hbE5vZGUiLHRlc3Q6aWUua30se25hbWU6IkNvbnN0YW50Tm9kZSIsdGVzdDppZS5sfSx7bmFtZToiRnVuY3Rpb25Ob2RlIix0ZXN0OmllLnJ9LHtuYW1lOiJGdW5jdGlvbkFzc2lnbm1lbnROb2RlIix0ZXN0OmllLnF9LHtuYW1lOiJJbmRleE5vZGUiLHRlc3Q6aWUudX0se25hbWU6Ik5vZGUiLHRlc3Q6aWUud30se25hbWU6Ik9iamVjdE5vZGUiLHRlc3Q6aWUuQX0se25hbWU6Ik9wZXJhdG9yTm9kZSIsdGVzdDppZS5CfSx7bmFtZToiUGFyZW50aGVzaXNOb2RlIix0ZXN0OmllLkN9LHtuYW1lOiJSYW5nZU5vZGUiLHRlc3Q6aWUuRX0se25hbWU6IlN5bWJvbE5vZGUiLHRlc3Q6aWUuSn0se25hbWU6Ik9iamVjdCIsdGVzdDppZS56fV0sYS5jb252ZXJzaW9ucz1be2Zyb206Im51bWJlciIsdG86IkJpZ051bWJlciIsY29udmVydDpmdW5jdGlvbihlKXtpZihyfHxjKGUpLDE1PE9iamVjdChFLmYpKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbXBsaWNpdGx5IGNvbnZlcnQgYSBudW1iZXIgd2l0aCA+MTUgc2lnbmlmaWNhbnQgZGlnaXRzIHRvIEJpZ051bWJlciAodmFsdWU6ICIrZSsiKS4gVXNlIGZ1bmN0aW9uIGJpZ251bWJlcih4KSB0byBjb252ZXJ0IHRvIEJpZ051bWJlci4iKTtyZXR1cm4gbmV3IHIoZSl9fSx7ZnJvbToibnVtYmVyIix0bzoiQ29tcGxleCIsY29udmVydDpmdW5jdGlvbihlKXtyZXR1cm4gbnx8ZihlKSxuZXcgbihlLDApfX0se2Zyb206Im51bWJlciIsdG86InN0cmluZyIsY29udmVydDpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn19LHtmcm9tOiJCaWdOdW1iZXIiLHRvOiJDb21wbGV4Iixjb252ZXJ0OmZ1bmN0aW9uKGUpe3JldHVybiBufHxmKGUpLG5ldyBuKGUudG9OdW1iZXIoKSwwKX19LHtmcm9tOiJGcmFjdGlvbiIsdG86IkJpZ051bWJlciIsY29udmVydDpmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbXBsaWNpdGx5IGNvbnZlcnQgYSBGcmFjdGlvbiB0byBCaWdOdW1iZXIgb3IgdmljZSB2ZXJzYS4gVXNlIGZ1bmN0aW9uIGJpZ251bWJlcih4KSB0byBjb252ZXJ0IHRvIEJpZ051bWJlciBvciBmcmFjdGlvbih4KSB0byBjb252ZXJ0IHRvIEZyYWN0aW9uLiIpfX0se2Zyb206IkZyYWN0aW9uIix0bzoiQ29tcGxleCIsY29udmVydDpmdW5jdGlvbihlKXtyZXR1cm4gbnx8ZihlKSxuZXcgbihlLnZhbHVlT2YoKSwwKX19LHtmcm9tOiJudW1iZXIiLHRvOiJGcmFjdGlvbiIsY29udmVydDpmdW5jdGlvbihlKXtpfHxsKGUpO3ZhciB0PW5ldyBpKGUpO2lmKHQudmFsdWVPZigpIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW1wbGljaXRseSBjb252ZXJ0IGEgbnVtYmVyIHRvIGEgRnJhY3Rpb24gd2hlbiB0aGVyZSB3aWxsIGJlIGEgbG9zcyBvZiBwcmVjaXNpb24gKHZhbHVlOiAiK2UrIikuIFVzZSBmdW5jdGlvbiBmcmFjdGlvbih4KSB0byBjb252ZXJ0IHRvIEZyYWN0aW9uLiIpO3JldHVybiB0fX0se2Zyb206InN0cmluZyIsdG86Im51bWJlciIsY29udmVydDpmdW5jdGlvbihlKXt2YXIgdD1OdW1iZXIoZSk7aWYoaXNOYU4odCkpdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCAiJytlKyciIHRvIGEgbnVtYmVyJyk7cmV0dXJuIHR9fSx7ZnJvbToic3RyaW5nIix0bzoiQmlnTnVtYmVyIixjb252ZXJ0OmZ1bmN0aW9uKHQpe3J8fGModCk7dHJ5e3JldHVybiBuZXcgcih0KX1jYXRjaChlKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0ICInK3QrJyIgdG8gQmlnTnVtYmVyJyl9fX0se2Zyb206InN0cmluZyIsdG86IkZyYWN0aW9uIixjb252ZXJ0OmZ1bmN0aW9uKHQpe2l8fGwodCk7dHJ5e3JldHVybiBuZXcgaSh0KX1jYXRjaChlKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0ICInK3QrJyIgdG8gRnJhY3Rpb24nKX19fSx7ZnJvbToic3RyaW5nIix0bzoiQ29tcGxleCIsY29udmVydDpmdW5jdGlvbih0KXtufHxmKHQpO3RyeXtyZXR1cm4gbmV3IG4odCl9Y2F0Y2goZSl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCAiJyt0KyciIHRvIENvbXBsZXgnKX19fSx7ZnJvbToiYm9vbGVhbiIsdG86Im51bWJlciIsY29udmVydDpmdW5jdGlvbihlKXtyZXR1cm4rZX19LHtmcm9tOiJib29sZWFuIix0bzoiQmlnTnVtYmVyIixjb252ZXJ0OmZ1bmN0aW9uKGUpe3JldHVybiByfHxjKGUpLG5ldyByKCtlKX19LHtmcm9tOiJib29sZWFuIix0bzoiRnJhY3Rpb24iLGNvbnZlcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGl8fGwoZSksbmV3IGkoK2UpfX0se2Zyb206ImJvb2xlYW4iLHRvOiJzdHJpbmciLGNvbnZlcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKX19LHtmcm9tOiJBcnJheSIsdG86Ik1hdHJpeCIsY29udmVydDpmdW5jdGlvbihlKXtyZXR1cm4gdHx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjb252ZXJ0IGFycmF5IGludG8gYSBNYXRyaXg6IG5vIGNsYXNzICdEZW5zZU1hdHJpeCcgcHJvdmlkZWQiKX0oKSxuZXcgdChlKX19LHtmcm9tOiJNYXRyaXgiLHRvOiJBcnJheSIsY29udmVydDpmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZU9mKCl9fV0sYX0pO2Z1bmN0aW9uIGMoZSl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29udmVydCB2YWx1ZSAiLmNvbmNhdChlLCIgaW50byBhIEJpZ051bWJlcjogbm8gY2xhc3MgJ0JpZ051bWJlcicgcHJvdmlkZWQiKSl9ZnVuY3Rpb24gZihlKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHZhbHVlICIuY29uY2F0KGUsIiBpbnRvIGEgQ29tcGxleCBudW1iZXI6IG5vIGNsYXNzICdDb21wbGV4JyBwcm92aWRlZCIpKX1mdW5jdGlvbiBsKGUpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGNvbnZlcnQgdmFsdWUgIi5jb25jYXQoZSwiIGludG8gYSBGcmFjdGlvbiwgbm8gY2xhc3MgJ0ZyYWN0aW9uJyBwcm92aWRlZC4iKSl9dmFyIHA9W10sbT1PYmplY3Qocy5hKSgiUmVzdWx0U2V0IixwLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIkNvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvciIpO3RoaXMuZW50cmllcz1lfHxbXX1yZXR1cm4gdC5wcm90b3R5cGUudHlwZT0iUmVzdWx0U2V0Iix0LnByb3RvdHlwZS5pc1Jlc3VsdFNldD0hMCx0LnByb3RvdHlwZS52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW50cmllc30sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iWyIrdGhpcy5lbnRyaWVzLmpvaW4oIiwgIikrIl0ifSx0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWF0aGpzOiJSZXN1bHRTZXQiLGVudHJpZXM6dGhpcy5lbnRyaWVzfX0sdC5mcm9tSlNPTj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoZS5lbnRyaWVzKX0sdH0se2lzQ2xhc3M6ITB9KSxoPXIoMTYpLGQ9ci5uKGgpLHk9WyI/b24iLCJjb25maWciXSxnPU9iamVjdChzLmEpKCJCaWdOdW1iZXIiLHksZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vbixyPWUuY29uZmlnLG49ZC5hLmNsb25lKHtwcmVjaXNpb246ci5wcmVjaXNpb259KTtyZXR1cm4gbi5wcm90b3R5cGUudHlwZT0iQmlnTnVtYmVyIixuLnByb3RvdHlwZS5pc0JpZ051bWJlcj0hMCxuLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWF0aGpzOiJCaWdOdW1iZXIiLHZhbHVlOnRoaXMudG9TdHJpbmcoKX19LG4uZnJvbUpTT049ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBuKGUudmFsdWUpfSx0JiZ0KCJjb25maWciLGZ1bmN0aW9uKGUsdCl7ZS5wcmVjaXNpb24hPT10LnByZWNpc2lvbiYmbi5jb25maWcoe3ByZWNpc2lvbjplLnByZWNpc2lvbn0pfSksbn0se2lzQ2xhc3M6ITB9KSx2PXIoOSksYj1yLm4odik7ZnVuY3Rpb24geChlKXtyZXR1cm4oeD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfXZhciB3PVtdLE49T2JqZWN0KHMuYSkoIkNvbXBsZXgiLHcsZnVuY3Rpb24oKXtyZXR1cm4gYi5hLnByb3RvdHlwZS50eXBlPSJDb21wbGV4IixiLmEucHJvdG90eXBlLmlzQ29tcGxleD0hMCxiLmEucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnttYXRoanM6IkNvbXBsZXgiLHJlOnRoaXMucmUsaW06dGhpcy5pbX19LGIuYS5wcm90b3R5cGUudG9Qb2xhcj1mdW5jdGlvbigpe3JldHVybntyOnRoaXMuYWJzKCkscGhpOnRoaXMuYXJnKCl9fSxiLmEucHJvdG90eXBlLmZvcm1hdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmltLHI9dGhpcy5yZSxuPU9iamVjdChFLmgpKHRoaXMucmUsZSksaT1PYmplY3QoRS5oKSh0aGlzLmltLGUpLGE9T2JqZWN0KGllLnkpKGUpP2U6ZT9lLnByZWNpc2lvbjpudWxsO2lmKG51bGwhPT1hKXt2YXIgbz1NYXRoLnBvdygxMCwtYSk7TWF0aC5hYnMoci90KTxvJiYocj0wKSxNYXRoLmFicyh0L3IpPG8mJih0PTApfXJldHVybiAwPT09dD9uOjA9PT1yPzE9PT10PyJpIjotMT09PXQ/Ii1pIjppKyJpIjp0PDA/LTE9PT10P24rIiAtIGkiOm4rIiAtICIraS5zdWJzdHJpbmcoMSkrImkiOjE9PT10P24rIiArIGkiOm4rIiArICIraSsiaSJ9LGIuYS5mcm9tUG9sYXI9ZnVuY3Rpb24oZSl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTp2YXIgdD1lO2lmKCJvYmplY3QiPT09eCh0KSlyZXR1cm4gYigpKHQpO3Rocm93IG5ldyBUeXBlRXJyb3IoIklucHV0IGhhcyB0byBiZSBhbiBvYmplY3Qgd2l0aCByIGFuZCBwaGkga2V5cy4iKTtjYXNlIDI6dmFyIHI9ZSxuPWFyZ3VtZW50c1sxXTtpZihPYmplY3QoaWUueSkocikpe2lmKE9iamVjdChpZS5MKShuKSYmbi5oYXNCYXNlKCJBTkdMRSIpJiYobj1uLnRvTnVtYmVyKCJyYWQiKSksT2JqZWN0KGllLnkpKG4pKXJldHVybiBuZXcgYi5hKHtyOnIscGhpOm59KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQaGkgaXMgbm90IGEgbnVtYmVyIG5vciBhbiBhbmdsZSB1bml0LiIpfXRocm93IG5ldyBUeXBlRXJyb3IoIlJhZGl1cyByIGlzIG5vdCBhIG51bWJlci4iKTtkZWZhdWx0OnRocm93IG5ldyBTeW50YXhFcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbiBmdW5jdGlvbiBmcm9tUG9sYXIiKX19LGIuYS5wcm90b3R5cGUudmFsdWVPZj1iLmEucHJvdG90eXBlLnRvU3RyaW5nLGIuYS5mcm9tSlNPTj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGIuYShlKX0sYi5hLmNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5yZT50LnJlPzE6ZS5yZTx0LnJlPy0xOmUuaW0+dC5pbT8xOmUuaW08dC5pbT8tMTowfSxiLmF9LHtpc0NsYXNzOiEwfSksTz1yKDExKSxNPXIubihPKSxqPVtdLFM9T2JqZWN0KHMuYSkoIkZyYWN0aW9uIixqLGZ1bmN0aW9uKCl7cmV0dXJuIE0uYS5wcm90b3R5cGUudHlwZT0iRnJhY3Rpb24iLE0uYS5wcm90b3R5cGUuaXNGcmFjdGlvbj0hMCxNLmEucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnttYXRoanM6IkZyYWN0aW9uIixuOnRoaXMucyp0aGlzLm4sZDp0aGlzLmR9fSxNLmEuZnJvbUpTT049ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBNLmEoZSl9LE0uYX0se2lzQ2xhc3M6ITB9KSxBPVtdLEM9T2JqZWN0KHMuYSkoIlJhbmdlIixBLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbyhlLHQscil7aWYoISh0aGlzIGluc3RhbmNlb2YgbykpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3IiKTt2YXIgbj1udWxsIT1lLGk9bnVsbCE9dCxhPW51bGwhPXI7aWYobilpZihPYmplY3QoaWUuZSkoZSkpZT1lLnRvTnVtYmVyKCk7ZWxzZSBpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyIHN0YXJ0IG11c3QgYmUgYSBudW1iZXIiKTtpZihpKWlmKE9iamVjdChpZS5lKSh0KSl0PXQudG9OdW1iZXIoKTtlbHNlIGlmKCJudW1iZXIiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgZW5kIG11c3QgYmUgYSBudW1iZXIiKTtpZihhKWlmKE9iamVjdChpZS5lKShyKSlyPXIudG9OdW1iZXIoKTtlbHNlIGlmKCJudW1iZXIiIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgc3RlcCBtdXN0IGJlIGEgbnVtYmVyIik7dGhpcy5zdGFydD1uP3BhcnNlRmxvYXQoZSk6MCx0aGlzLmVuZD1pP3BhcnNlRmxvYXQodCk6MCx0aGlzLnN0ZXA9YT9wYXJzZUZsb2F0KHIpOjF9cmV0dXJuIG8ucHJvdG90eXBlLnR5cGU9IlJhbmdlIixvLnByb3RvdHlwZS5pc1JhbmdlPSEwLG8ucGFyc2U9ZnVuY3Rpb24oZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBudWxsO3ZhciB0PWUuc3BsaXQoIjoiKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlRmxvYXQoZSl9KTtpZih0LnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGUpfSkpcmV0dXJuIG51bGw7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDI6cmV0dXJuIG5ldyBvKHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiBuZXcgbyh0WzBdLHRbMl0sdFsxXSk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19LG8ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBvKHRoaXMuc3RhcnQsdGhpcy5lbmQsdGhpcy5zdGVwKX0sby5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3ZhciBlPTAsdD10aGlzLnN0YXJ0LHI9dGhpcy5zdGVwLG49dGhpcy5lbmQtdDtyZXR1cm4gT2JqZWN0KEUubikocik9PT1PYmplY3QoRS5uKShuKT9lPU1hdGguY2VpbChuL3IpOjA9PW4mJihlPTApLGlzTmFOKGUpJiYoZT0wKSxbZV19LG8ucHJvdG90eXBlLm1pbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2l6ZSgpWzBdO3JldHVybiAwPGU/MDx0aGlzLnN0ZXA/dGhpcy5zdGFydDp0aGlzLnN0YXJ0KyhlLTEpKnRoaXMuc3RlcDp2b2lkIDB9LG8ucHJvdG90eXBlLm1heD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2l6ZSgpWzBdO3JldHVybiAwPGU/MDx0aGlzLnN0ZXA/dGhpcy5zdGFydCsoZS0xKSp0aGlzLnN0ZXA6dGhpcy5zdGFydDp2b2lkIDB9LG8ucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdGFydCxyPXRoaXMuc3RlcCxuPXRoaXMuZW5kLGk9MDtpZigwPHIpZm9yKDt0PG47KWUodCxbaV0sdGhpcyksdCs9cixpKys7ZWxzZSBpZihyPDApZm9yKDtuPHQ7KWUodCxbaV0sdGhpcyksdCs9cixpKyt9LG8ucHJvdG90eXBlLm1hcD1mdW5jdGlvbihuKXt2YXIgaT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGUsdCxyKXtpW3RbMF1dPW4oZSx0LHIpfSksaX0sby5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3ZhciByPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oZSx0KXtyW3RbMF1dPWV9KSxyfSxvLnByb3RvdHlwZS52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9BcnJheSgpfSxvLnByb3RvdHlwZS5mb3JtYXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KEUuaCkodGhpcy5zdGFydCxlKTtyZXR1cm4gMSE9PXRoaXMuc3RlcCYmKHQrPSI6IitPYmplY3QoRS5oKSh0aGlzLnN0ZXAsZSkpLHQrPSI6IitPYmplY3QoRS5oKSh0aGlzLmVuZCxlKX0sby5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mb3JtYXQoKX0sby5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue21hdGhqczoiUmFuZ2UiLHN0YXJ0OnRoaXMuc3RhcnQsZW5kOnRoaXMuZW5kLHN0ZXA6dGhpcy5zdGVwfX0sby5mcm9tSlNPTj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IG8oZS5zdGFydCxlLmVuZCxlLnN0ZXApfSxvfSx7aXNDbGFzczohMH0pLFQ9W10sXz1PYmplY3Qocy5hKSgiTWF0cml4IixULGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBTeW50YXhFcnJvcigiQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yIil9cmV0dXJuIGUucHJvdG90eXBlLnR5cGU9Ik1hdHJpeCIsZS5wcm90b3R5cGUuaXNNYXRyaXg9ITAsZS5zdG9yYWdlPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigiTWF0cml4LnN0b3JhZ2UgaXMgZGVwcmVjYXRlZCBzaW5jZSB2Ni4wLjAuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBtYXRoLm1hdHJpeCBpbnN0ZWFkLiIpfSxlLnByb3RvdHlwZS5zdG9yYWdlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaW52b2tlIHN0b3JhZ2Ugb24gYSBNYXRyaXggaW50ZXJmYWNlIil9LGUucHJvdG90eXBlLmRhdGF0eXBlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaW52b2tlIGRhdGF0eXBlIG9uIGEgTWF0cml4IGludGVyZmFjZSIpfSxlLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24oZSx0KXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbnZva2UgY3JlYXRlIG9uIGEgTWF0cml4IGludGVyZmFjZSIpfSxlLnByb3RvdHlwZS5zdWJzZXQ9ZnVuY3Rpb24oZSx0LHIpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGludm9rZSBzdWJzZXQgb24gYSBNYXRyaXggaW50ZXJmYWNlIil9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbnZva2UgZ2V0IG9uIGEgTWF0cml4IGludGVyZmFjZSIpfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0LHIpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGludm9rZSBzZXQgb24gYSBNYXRyaXggaW50ZXJmYWNlIil9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihlLHQpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGludm9rZSByZXNpemUgb24gYSBNYXRyaXggaW50ZXJmYWNlIil9LGUucHJvdG90eXBlLnJlc2hhcGU9ZnVuY3Rpb24oZSx0KXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbnZva2UgcmVzaGFwZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UiKX0sZS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbnZva2UgY2xvbmUgb24gYSBNYXRyaXggaW50ZXJmYWNlIil9LGUucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbnZva2Ugc2l6ZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UiKX0sZS5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKGUsdCl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaW52b2tlIG1hcCBvbiBhIE1hdHJpeCBpbnRlcmZhY2UiKX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbnZva2UgZm9yRWFjaCBvbiBhIE1hdHJpeCBpbnRlcmZhY2UiKX0sZS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGludm9rZSB0b0FycmF5IG9uIGEgTWF0cml4IGludGVyZmFjZSIpfSxlLnByb3RvdHlwZS52YWx1ZU9mPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaW52b2tlIHZhbHVlT2Ygb24gYSBNYXRyaXggaW50ZXJmYWNlIil9LGUucHJvdG90eXBlLmZvcm1hdD1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbnZva2UgZm9ybWF0IG9uIGEgTWF0cml4IGludGVyZmFjZSIpfSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGludm9rZSB0b1N0cmluZyBvbiBhIE1hdHJpeCBpbnRlcmZhY2UiKX0sZX0se2lzQ2xhc3M6ITB9KSxJPXIoMiksSj1yKDUpLGFlPXIoMyksej1yKDYpLHE9WyJNYXRyaXgiXSxCPU9iamVjdChzLmEpKCJEZW5zZU1hdHJpeCIscSxmdW5jdGlvbihlKXt2YXIgdD1lLk1hdHJpeDtmdW5jdGlvbiBtKGUsdCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3IiKTtpZih0JiYhT2JqZWN0KGllLkkpKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkYXRhdHlwZTogIit0KTtpZihPYmplY3QoaWUudikoZSkpIkRlbnNlTWF0cml4Ij09PWUudHlwZT8odGhpcy5fZGF0YT1PYmplY3QoYWUuYSkoZS5fZGF0YSksdGhpcy5fc2l6ZT1PYmplY3QoYWUuYSkoZS5fc2l6ZSkpOih0aGlzLl9kYXRhPWUudG9BcnJheSgpLHRoaXMuX3NpemU9ZS5zaXplKCkpLHRoaXMuX2RhdGF0eXBlPXR8fGUuX2RhdGF0eXBlO2Vsc2UgaWYoZSYmT2JqZWN0KGllLmIpKGUuZGF0YSkmJk9iamVjdChpZS5iKShlLnNpemUpKXRoaXMuX2RhdGE9ZS5kYXRhLHRoaXMuX3NpemU9ZS5zaXplLE9iamVjdChJLnIpKHRoaXMuX2RhdGEsdGhpcy5fc2l6ZSksdGhpcy5fZGF0YXR5cGU9dHx8ZS5kYXRhdHlwZTtlbHNlIGlmKE9iamVjdChpZS5iKShlKSl0aGlzLl9kYXRhPWZ1bmN0aW9uIGUodCl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47cisrKXt2YXIgaT10W3JdO09iamVjdChpZS5iKShpKT90W3JdPWUoaSk6aSYmITA9PT1pLmlzTWF0cml4JiYodFtyXT1lKGkudmFsdWVPZigpKSl9cmV0dXJuIHR9KGUpLHRoaXMuX3NpemU9T2JqZWN0KEkuYSkodGhpcy5fZGF0YSksT2JqZWN0KEkucikodGhpcy5fZGF0YSx0aGlzLl9zaXplKSx0aGlzLl9kYXRhdHlwZT10O2Vsc2V7aWYoZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbnN1cHBvcnRlZCB0eXBlIG9mIGRhdGEgKCIrT2JqZWN0KGllLk0pKGUpKyIpIik7dGhpcy5fZGF0YT1bXSx0aGlzLl9zaXplPVswXSx0aGlzLl9kYXRhdHlwZT10fX1mdW5jdGlvbiBzKGUsdCxyKXtpZigwIT09dC5sZW5ndGgpcmV0dXJuIGUuX3NpemU9dC5zbGljZSgwKSxlLl9kYXRhPU9iamVjdChJLm8pKGUuX2RhdGEsZS5fc2l6ZSxyKSxlO2Zvcih2YXIgbj1lLl9kYXRhO09iamVjdChpZS5iKShuKTspbj1uWzBdO3JldHVybiBufWZ1bmN0aW9uIGwoZSx0LHIpe2Zvcih2YXIgbj1lLl9zaXplLnNsaWNlKDApLGk9ITE7bi5sZW5ndGg8dC5sZW5ndGg7KW4ucHVzaCgwKSxpPSEwO2Zvcih2YXIgYT0wLG89dC5sZW5ndGg7YTxvO2ErKyl0W2FdPm5bYV0mJihuW2FdPXRbYV0saT0hMCk7aSYmcyhlLG4scil9cmV0dXJuKG0ucHJvdG90eXBlPW5ldyB0KS5jcmVhdGVEZW5zZU1hdHJpeD1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgbShlLHQpfSxtLnByb3RvdHlwZS50eXBlPSJEZW5zZU1hdHJpeCIsbS5wcm90b3R5cGUuaXNEZW5zZU1hdHJpeD0hMCxtLnByb3RvdHlwZS5nZXREYXRhVHlwZT1mdW5jdGlvbigpe3JldHVybiBPYmplY3QoSS5oKSh0aGlzLl9kYXRhLGllLk0pfSxtLnByb3RvdHlwZS5zdG9yYWdlPWZ1bmN0aW9uKCl7cmV0dXJuImRlbnNlIn0sbS5wcm90b3R5cGUuZGF0YXR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YXR5cGV9LG0ucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgbShlLHQpfSxtLnByb3RvdHlwZS5zdWJzZXQ9ZnVuY3Rpb24oZSx0LHIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIU9iamVjdChpZS50KSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGluZGV4Iik7e2lmKHQuaXNTY2FsYXIoKSlyZXR1cm4gZS5nZXQodC5taW4oKSk7dmFyIHI9dC5zaXplKCk7aWYoci5sZW5ndGghPT1lLl9zaXplLmxlbmd0aCl0aHJvdyBuZXcgei5hKHIubGVuZ3RoLGUuX3NpemUubGVuZ3RoKTtmb3IodmFyIG49dC5taW4oKSxpPXQubWF4KCksYT0wLG89ZS5fc2l6ZS5sZW5ndGg7YTxvO2ErKylPYmplY3QoSS5zKShuW2FdLGUuX3NpemVbYV0pLE9iamVjdChJLnMpKGlbYV0sZS5fc2l6ZVthXSk7cmV0dXJuIG5ldyBtKGZ1bmN0aW9uIHIobixpLGEsbyl7dmFyIGU9bz09PWEtMTt2YXIgdD1pLmRpbWVuc2lvbihvKTtyZXR1cm4gZT90Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KEkucykoZSxuLmxlbmd0aCksbltlXX0pLnZhbHVlT2YoKTp0Lm1hcChmdW5jdGlvbihlKXtPYmplY3QoSS5zKShlLG4ubGVuZ3RoKTt2YXIgdD1uW2VdO3JldHVybiByKHQsaSxhLG8rMSl9KS52YWx1ZU9mKCl9KGUuX2RhdGEsdCxyLmxlbmd0aCwwKSxlLl9kYXRhdHlwZSl9fSh0aGlzLGUpO2Nhc2UgMjpjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe2lmKCF0fHwhMCE9PXQuaXNJbmRleCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGluZGV4Iik7dmFyIGksYT10LnNpemUoKSxvPXQuaXNTY2FsYXIoKTtPYmplY3QoaWUudikocik/KGk9ci5zaXplKCkscj1yLnZhbHVlT2YoKSk6aT1PYmplY3QoSS5hKShyKTtpZihvKXtpZigwIT09aS5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiU2NhbGFyIGV4cGVjdGVkIik7ZS5zZXQodC5taW4oKSxyLG4pfWVsc2V7aWYoYS5sZW5ndGg8ZS5fc2l6ZS5sZW5ndGgpdGhyb3cgbmV3IHouYShhLmxlbmd0aCxlLl9zaXplLmxlbmd0aCwiPCIpO2lmKGkubGVuZ3RoPGEubGVuZ3RoKXtmb3IodmFyIHM9MCx1PTA7MT09PWFbc10mJjE9PT1pW3NdOylzKys7Zm9yKDsxPT09YVtzXTspdSsrLHMrKztyPU9iamVjdChJLnEpKHIsYS5sZW5ndGgsdSxpKX1pZighT2JqZWN0KGFlLmQpKGEsaSkpdGhyb3cgbmV3IHouYShhLGksIj4iKTt2YXIgYz10Lm1heCgpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZSsxfSk7bChlLGMsbik7dmFyIGY9YS5sZW5ndGg7IWZ1bmN0aW9uIHIobixpLGEsbyxzKXt2YXIgZT1zPT09by0xO3ZhciB0PWkuZGltZW5zaW9uKHMpO2U/dC5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7T2JqZWN0KEkucykoZSksbltlXT1hW3RbMF1dfSk6dC5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7T2JqZWN0KEkucykoZSkscihuW2VdLGksYVt0WzBdXSxvLHMrMSl9KX0oZS5fZGF0YSx0LHIsZiwwKX1yZXR1cm4gZX0odGhpcyxlLHQscik7ZGVmYXVsdDp0aHJvdyBuZXcgU3ludGF4RXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMiKX19LG0ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtpZighT2JqZWN0KGllLmIpKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFycmF5IGV4cGVjdGVkIik7aWYoZS5sZW5ndGghPT10aGlzLl9zaXplLmxlbmd0aCl0aHJvdyBuZXcgei5hKGUubGVuZ3RoLHRoaXMuX3NpemUubGVuZ3RoKTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKylPYmplY3QoSS5zKShlW3RdLHRoaXMuX3NpemVbdF0pO2Zvcih2YXIgcj10aGlzLl9kYXRhLG49MCxpPWUubGVuZ3RoO248aTtuKyspe3ZhciBhPWVbbl07T2JqZWN0KEkucykoYSxyLmxlbmd0aCkscj1yW2FdfXJldHVybiByfSxtLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0LHIpe2lmKCFPYmplY3QoaWUuYikoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJyYXkgZXhwZWN0ZWQiKTtpZihlLmxlbmd0aDx0aGlzLl9zaXplLmxlbmd0aCl0aHJvdyBuZXcgei5hKGUubGVuZ3RoLHRoaXMuX3NpemUubGVuZ3RoLCI8Iik7dmFyIG4saSxhO2wodGhpcyxlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZSsxfSkscik7dmFyIG89dGhpcy5fZGF0YTtmb3Iobj0wLGk9ZS5sZW5ndGgtMTtuPGk7bisrKWE9ZVtuXSxPYmplY3QoSS5zKShhLG8ubGVuZ3RoKSxvPW9bYV07cmV0dXJuIGE9ZVtlLmxlbmd0aC0xXSxPYmplY3QoSS5zKShhLG8ubGVuZ3RoKSxvW2FdPXQsdGhpc30sbS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKGUsdCxyKXtpZighT2JqZWN0KGllLmIpKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFycmF5IGV4cGVjdGVkIik7cmV0dXJuIHMocj90aGlzLmNsb25lKCk6dGhpcyxlLHQpfSxtLnByb3RvdHlwZS5yZXNoYXBlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dD90aGlzLmNsb25lKCk6dGhpcztyZXR1cm4gci5fZGF0YT1PYmplY3QoSS5uKShyLl9kYXRhLGUpLHIuX3NpemU9ZS5zbGljZSgwKSxyfSxtLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgbSh7ZGF0YTpPYmplY3QoYWUuYSkodGhpcy5fZGF0YSksc2l6ZTpPYmplY3QoYWUuYSkodGhpcy5fc2l6ZSksZGF0YXR5cGU6dGhpcy5fZGF0YXR5cGV9KX0sbS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaXplLnNsaWNlKDApfSxtLnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24odCl7dmFyIGk9dGhpcyxlPWZ1bmN0aW9uIHIoZSxuKXtyZXR1cm4gT2JqZWN0KGllLmIpKGUpP2UubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIoZSxuLmNvbmNhdCh0KSl9KTp0KGUsbixpKX0odGhpcy5fZGF0YSxbXSk7cmV0dXJuIG5ldyBtKGUsdm9pZCAwIT09dGhpcy5fZGF0YXR5cGU/T2JqZWN0KEkuaCkoZSxpZS5NKTp2b2lkIDApfSxtLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQpe3ZhciBpPXRoaXM7IWZ1bmN0aW9uIHIoZSxuKXtPYmplY3QoaWUuYikoZSk/ZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7cihlLG4uY29uY2F0KHQpKX0pOnQoZSxuLGkpfSh0aGlzLl9kYXRhLFtdKX0sbS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiBPYmplY3QoYWUuYSkodGhpcy5fZGF0YSl9LG0ucHJvdG90eXBlLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YX0sbS5wcm90b3R5cGUuZm9ybWF0PWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QoSi5kKSh0aGlzLl9kYXRhLGUpfSxtLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBPYmplY3QoSi5kKSh0aGlzLl9kYXRhKX0sbS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue21hdGhqczoiRGVuc2VNYXRyaXgiLGRhdGE6dGhpcy5fZGF0YSxzaXplOnRoaXMuX3NpemUsZGF0YXR5cGU6dGhpcy5fZGF0YXR5cGV9fSxtLnByb3RvdHlwZS5kaWFnb25hbD1mdW5jdGlvbihlKXtpZihlKXtpZihPYmplY3QoaWUuZSkoZSkmJihlPWUudG9OdW1iZXIoKSksIU9iamVjdChpZS55KShlKXx8IU9iamVjdChFLmkpKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBwYXJhbWV0ZXIgayBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyIil9ZWxzZSBlPTA7Zm9yKHZhciB0PTA8ZT9lOjAscj1lPDA/LWU6MCxuPXRoaXMuX3NpemVbMF0saT10aGlzLl9zaXplWzFdLGE9TWF0aC5taW4obi1yLGktdCksbz1bXSxzPTA7czxhO3MrKylvW3NdPXRoaXMuX2RhdGFbcytyXVtzK3RdO3JldHVybiBuZXcgbSh7ZGF0YTpvLHNpemU6W2FdLGRhdGF0eXBlOnRoaXMuX2RhdGF0eXBlfSl9LG0uZGlhZ29uYWw9ZnVuY3Rpb24oZSx0LHIsbil7aWYoIU9iamVjdChpZS5iKShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcnJheSBleHBlY3RlZCwgc2l6ZSBwYXJhbWV0ZXIiKTtpZigyIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJPbmx5IHR3byBkaW1lbnNpb25zIG1hdHJpeCBhcmUgc3VwcG9ydGVkIik7aWYoZT1lLm1hcChmdW5jdGlvbihlKXtpZihPYmplY3QoaWUuZSkoZSkmJihlPWUudG9OdW1iZXIoKSksIU9iamVjdChpZS55KShlKXx8IU9iamVjdChFLmkpKGUpfHxlPDEpdGhyb3cgbmV3IEVycm9yKCJTaXplIHZhbHVlcyBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzIik7cmV0dXJuIGV9KSxyKXtpZihPYmplY3QoaWUuZSkocikmJihyPXIudG9OdW1iZXIoKSksIU9iamVjdChpZS55KShyKXx8IU9iamVjdChFLmkpKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBwYXJhbWV0ZXIgayBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyIil9ZWxzZSByPTA7dmFyIGksYT0wPHI/cjowLG89cjwwPy1yOjAscz1lWzBdLHU9ZVsxXSxjPU1hdGgubWluKHMtbyx1LWEpO2lmKE9iamVjdChpZS5iKSh0KSl7aWYodC5sZW5ndGghPT1jKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZSBhcnJheSBsZW5ndGgiKTtpPWZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfX1lbHNlIGlmKE9iamVjdChpZS52KSh0KSl7dmFyIGY9dC5zaXplKCk7aWYoMSE9PWYubGVuZ3RofHxmWzBdIT09Yyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbWF0cml4IGxlbmd0aCIpO2k9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0KFtlXSl9fWVsc2UgaT1mdW5jdGlvbigpe3JldHVybiB0fTtuPW58fChPYmplY3QoaWUuZSkoaSgwKSk/aSgwKS5tdWwoMCk6MCk7dmFyIGw9W107aWYoMDxlLmxlbmd0aCl7bD1PYmplY3QoSS5vKShsLGUsbik7Zm9yKHZhciBwPTA7cDxjO3ArKylsW3Arb11bcCthXT1pKHApfXJldHVybiBuZXcgbSh7ZGF0YTpsLHNpemU6W3MsdV19KX0sbS5mcm9tSlNPTj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IG0oZSl9LG0ucHJvdG90eXBlLnN3YXBSb3dzPWZ1bmN0aW9uKGUsdCl7aWYoIShPYmplY3QoaWUueSkoZSkmJk9iamVjdChFLmkpKGUpJiZPYmplY3QoaWUueSkodCkmJk9iamVjdChFLmkpKHQpKSl0aHJvdyBuZXcgRXJyb3IoIlJvdyBpbmRleCBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzIik7aWYoMiE9PXRoaXMuX3NpemUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiT25seSB0d28gZGltZW5zaW9uYWwgbWF0cml4IGlzIHN1cHBvcnRlZCIpO3JldHVybiBPYmplY3QoSS5zKShlLHRoaXMuX3NpemVbMF0pLE9iamVjdChJLnMpKHQsdGhpcy5fc2l6ZVswXSksbS5fc3dhcFJvd3MoZSx0LHRoaXMuX2RhdGEpLHRoaXN9LG0uX3N3YXBSb3dzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yW2VdO3JbZV09clt0XSxyW3RdPW59LG19LHtpc0NsYXNzOiEwfSksaz1bInR5cGVkIl0sRD1PYmplY3Qocy5hKSgiY2xvbmUiLGssZnVuY3Rpb24oZSl7cmV0dXJuKDAsZS50eXBlZCkoImNsb25lIix7YW55OmFlLmF9KX0pLFI9cigxMCk7ZnVuY3Rpb24gUChlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKylpZihPYmplY3QoaWUuaSkoZVt0XSkpcmV0dXJuIDF9ZnVuY3Rpb24gRihlLHQpe09iamVjdChpZS52KShlKSYmKGU9ZS52YWx1ZU9mKCkpO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl7dmFyIGk9ZVtyXTtBcnJheS5pc0FycmF5KGkpP0YoaSx0KTp0KGkpfX1mdW5jdGlvbiBvZShlLHQscil7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLm1hcD9lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSx0LHIpfSk6dChlKX1mdW5jdGlvbiBVKGUsdCxyKXt2YXIgbj1BcnJheS5pc0FycmF5KGUpP09iamVjdChJLmEpKGUpOmUuc2l6ZSgpO2lmKHQ8MHx8dD49bi5sZW5ndGgpdGhyb3cgbmV3IFIuYSh0LG4ubGVuZ3RoKTtyZXR1cm4gT2JqZWN0KGllLnYpKGUpP2UuY3JlYXRlKEwoZS52YWx1ZU9mKCksdCxyKSk6TChlLHQscil9ZnVuY3Rpb24gTChlLHQscil7dmFyIG4saSxhLG87aWYodDw9MCl7aWYoQXJyYXkuaXNBcnJheShlWzBdKSl7Zm9yKG89ZnVuY3Rpb24oZSl7dmFyIHQscixuPWUubGVuZ3RoLGk9ZVswXS5sZW5ndGgsYT1bXTtmb3Iocj0wO3I8aTtyKyspe3ZhciBvPVtdO2Zvcih0PTA7dDxuO3QrKylvLnB1c2goZVt0XVtyXSk7YS5wdXNoKG8pfXJldHVybiBhfShlKSxpPVtdLG49MDtuPG8ubGVuZ3RoO24rKylpW25dPUwob1tuXSx0LTEscik7cmV0dXJuIGl9Zm9yKGE9ZVswXSxuPTE7bjxlLmxlbmd0aDtuKyspYT1yKGEsZVtuXSk7cmV0dXJuIGF9Zm9yKGk9W10sbj0wO248ZS5sZW5ndGg7bisrKWlbbl09TChlW25dLHQtMSxyKTtyZXR1cm4gaX1mdW5jdGlvbiBIKGUsdCxyLG4saSxhLG8scyx1LGMsZil7dmFyIGwscCxtLGgsZD1lLl92YWx1ZXMseT1lLl9pbmRleCxnPWUuX3B0cjtpZihuKWZvcihwPWdbdF0sbT1nW3QrMV0sbD1wO2w8bTtsKyspcltoPXlbbF1dIT09YT8ocltoXT1hLG8ucHVzaChoKSxjPyhuW2hdPXU/cyhkW2xdLGYpOnMoZixkW2xdKSxpW2hdPWEpOm5baF09ZFtsXSk6KG5baF09dT9zKGRbbF0sbltoXSk6cyhuW2hdLGRbbF0pLGlbaF09YSk7ZWxzZSBmb3IocD1nW3RdLG09Z1t0KzFdLGw9cDtsPG07bCsrKXJbaD15W2xdXSE9PWE/KHJbaF09YSxvLnB1c2goaCkpOmlbaF09YX12YXIgJD0iaXNJbnRlZ2VyIixHPVsidHlwZWQiXSxaPU9iamVjdChzLmEpKCQsRyxmdW5jdGlvbihlKXt2YXIgdD0oMCxlLnR5cGVkKSgkLHtudW1iZXI6RS5pLEJpZ051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5pc0ludCgpfSxGcmFjdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUuZCYmaXNGaW5pdGUoZS5uKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSx0KX19KTtyZXR1cm4gdH0pLFY9Im51bWJlciI7ZnVuY3Rpb24gVyhlKXtyZXR1cm4gZTwwfWZ1bmN0aW9uIFkoZSl7cmV0dXJuIDA8ZX1mdW5jdGlvbiBYKGUpe3JldHVybiAwPT09ZX1mdW5jdGlvbiBRKGUpe3JldHVybiBOdW1iZXIuaXNOYU4oZSl9US5zaWduYXR1cmU9WC5zaWduYXR1cmU9WS5zaWduYXR1cmU9Vy5zaWduYXR1cmU9Vjt2YXIgSz0iaXNOZWdhdGl2ZSIsZWU9WyJ0eXBlZCJdLHRlPU9iamVjdChzLmEpKEssZWUsZnVuY3Rpb24oZSl7dmFyIHQ9KDAsZS50eXBlZCkoSyx7bnVtYmVyOlcsQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLmlzTmVnKCkmJiFlLmlzWmVybygpJiYhZS5pc05hTigpfSxGcmFjdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gZS5zPDB9LFVuaXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZS52YWx1ZSl9LCJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7cmV0dXJuIG9lKGUsdCl9fSk7cmV0dXJuIHR9KSxyZT0iaXNOdW1lcmljIixuZT1bInR5cGVkIl0sc2U9T2JqZWN0KHMuYSkocmUsbmUsZnVuY3Rpb24oZSl7dmFyIHQ9KDAsZS50eXBlZCkocmUseyJudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4iOmZ1bmN0aW9uKCl7cmV0dXJuITB9LCJDb21wbGV4IHwgVW5pdCB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgfCBOb2RlIjpmdW5jdGlvbigpe3JldHVybiExfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLHQpfX0pO3JldHVybiB0fSksdWU9Imhhc051bWVyaWNWYWx1ZSIsY2U9WyJ0eXBlZCIsImlzTnVtZXJpYyJdLGZlPU9iamVjdChzLmEpKHVlLGNlLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLmlzTnVtZXJpYztyZXR1cm4gdCh1ZSx7c3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiAwPGUudHJpbSgpLmxlbmd0aCYmIWlzTmFOKE51bWJlcihlKSl9LGFueTpmdW5jdGlvbihlKXtyZXR1cm4gcihlKX19KX0pLGxlPSJpc1Bvc2l0aXZlIixwZT1bInR5cGVkIl0sbWU9T2JqZWN0KHMuYSkobGUscGUsZnVuY3Rpb24oZSl7dmFyIHQ9KDAsZS50eXBlZCkobGUse251bWJlcjpZLEJpZ051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4hZS5pc05lZygpJiYhZS5pc1plcm8oKSYmIWUuaXNOYU4oKX0sRnJhY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuIDA8ZS5zJiYwPGUubn0sVW5pdDpmdW5jdGlvbihlKXtyZXR1cm4gdChlLnZhbHVlKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSx0KX19KTtyZXR1cm4gdH0pLGhlPVsidHlwZWQiXSxkZT1PYmplY3Qocy5hKSgiaXNaZXJvIixoZSxmdW5jdGlvbihlKXt2YXIgdD0oMCxlLnR5cGVkKSgiaXNaZXJvIix7bnVtYmVyOlgsQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLmlzWmVybygpfSxDb21wbGV4OmZ1bmN0aW9uKGUpe3JldHVybiAwPT09ZS5yZSYmMD09PWUuaW19LEZyYWN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZS5kJiYwPT09ZS5ufSxVbml0OmZ1bmN0aW9uKGUpe3JldHVybiB0KGUudmFsdWUpfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLHQpfX0pO3JldHVybiB0fSkseWU9WyJ0eXBlZCJdLGdlPU9iamVjdChzLmEpKCJpc05hTiIseWUsZnVuY3Rpb24oZSl7cmV0dXJuKDAsZS50eXBlZCkoImlzTmFOIix7bnVtYmVyOlEsQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLmlzTmFOKCl9LEZyYWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuITF9LENvbXBsZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNOYU4oKX0sVW5pdDpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyLmlzTmFOKGUudmFsdWUpfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLE51bWJlci5pc05hTil9fSl9KSx2ZT1yKDgpLGJlPVsidHlwZWQiXSx4ZT1PYmplY3Qocy5hKSgidHlwZU9mIixiZSxmdW5jdGlvbihlKXtyZXR1cm4oMCxlLnR5cGVkKSgidHlwZU9mIix7YW55OmllLk19KX0pLHdlPU9iamVjdChzLmEpKCJ0eXBlb2YiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7T2JqZWN0KHZlLmEpKCdGdW5jdGlvbiAidHlwZW9mIiBoYXMgYmVlbiByZW5hbWVkIHRvICJ0eXBlT2YiIGluIHY2LjAuMCwgcGxlYXNlIHVzZSB0aGUgbmV3IGZ1bmN0aW9uIGluc3RlYWQuJyk7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07cmV0dXJuIGllLk0uYXBwbHkoaWUuTSx0KX19KTtmdW5jdGlvbiBOZShlLHQscil7aWYobnVsbD09cilyZXR1cm4gZS5lcSh0KTtpZihlLmVxKHQpKXJldHVybiEwO2lmKGUuaXNOYU4oKXx8dC5pc05hTigpKXJldHVybiExO2lmKGUuaXNGaW5pdGUoKSYmdC5pc0Zpbml0ZSgpKXt2YXIgbj1lLm1pbnVzKHQpLmFicygpO2lmKG4uaXNaZXJvKCkpcmV0dXJuITA7dmFyIGk9ZS5jb25zdHJ1Y3Rvci5tYXgoZS5hYnMoKSx0LmFicygpKTtyZXR1cm4gbi5sdGUoaS50aW1lcyhyKSl9cmV0dXJuITF9dmFyIE9lPSJlcXVhbFNjYWxhciIsTWU9WyJ0eXBlZCIsImNvbmZpZyJdLGplPU9iamVjdChzLmEpKE9lLE1lLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQsYT1lLmNvbmZpZyxyPXQoT2UseyJib29sZWFuLCBib29sZWFuIjpmdW5jdGlvbihlLHQpe3JldHVybiBlPT09dH0sIm51bWJlciwgbnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QoRS5tKShlLHQsYS5lcHNpbG9uKX0sIkJpZ051bWJlciwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBlLmVxKHQpfHxOZShlLHQsYS5lcHNpbG9uKX0sIkZyYWN0aW9uLCBGcmFjdGlvbiI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5lcXVhbHModCl9LCJDb21wbGV4LCBDb21wbGV4IjpmdW5jdGlvbihlLHQpe3JldHVybiByPWUsbj10LGk9YS5lcHNpbG9uLE9iamVjdChFLm0pKHIucmUsbi5yZSxpKSYmT2JqZWN0KEUubSkoci5pbSxuLmltLGkpO3ZhciByLG4saX0sIlVuaXQsIFVuaXQiOmZ1bmN0aW9uKGUsdCl7aWYoIWUuZXF1YWxCYXNlKHQpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNvbXBhcmUgdW5pdHMgd2l0aCBkaWZmZXJlbnQgYmFzZSIpO3JldHVybiByKGUudmFsdWUsdC52YWx1ZSl9fSk7cmV0dXJuIHJ9KSxFZT0oT2JqZWN0KHMuYSkoT2UsWyJ0eXBlZCIsImNvbmZpZyJdLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLmNvbmZpZztyZXR1cm4gdChPZSx7Im51bWJlciwgbnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QoRS5tKShlLHQsci5lcHNpbG9uKX19KX0pLFsidHlwZWQiLCJlcXVhbFNjYWxhciIsIk1hdHJpeCJdKSxTZT1PYmplY3Qocy5hKSgiU3BhcnNlTWF0cml4IixFZSxmdW5jdGlvbihlKXt2YXIgTz1lLnR5cGVkLE09ZS5lcXVhbFNjYWxhcix0PWUuTWF0cml4O2Z1bmN0aW9uIGooZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBqKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIkNvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvciIpO2lmKHQmJiFPYmplY3QoaWUuSSkodCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRhdGF0eXBlOiAiK3QpO2lmKE9iamVjdChpZS52KShlKSlyPXRoaXMsaT10LCJTcGFyc2VNYXRyaXgiPT09KG49ZSkudHlwZT8oci5fdmFsdWVzPW4uX3ZhbHVlcz9PYmplY3QoYWUuYSkobi5fdmFsdWVzKTp2b2lkIDAsci5faW5kZXg9T2JqZWN0KGFlLmEpKG4uX2luZGV4KSxyLl9wdHI9T2JqZWN0KGFlLmEpKG4uX3B0ciksci5fc2l6ZT1PYmplY3QoYWUuYSkobi5fc2l6ZSksci5fZGF0YXR5cGU9aXx8bi5fZGF0YXR5cGUpOmEocixuLnZhbHVlT2YoKSxpfHxuLl9kYXRhdHlwZSk7ZWxzZSBpZihlJiZPYmplY3QoaWUuYikoZS5pbmRleCkmJk9iamVjdChpZS5iKShlLnB0cikmJk9iamVjdChpZS5iKShlLnNpemUpKXRoaXMuX3ZhbHVlcz1lLnZhbHVlcyx0aGlzLl9pbmRleD1lLmluZGV4LHRoaXMuX3B0cj1lLnB0cix0aGlzLl9zaXplPWUuc2l6ZSx0aGlzLl9kYXRhdHlwZT10fHxlLmRhdGF0eXBlO2Vsc2UgaWYoT2JqZWN0KGllLmIpKGUpKWEodGhpcyxlLHQpO2Vsc2V7aWYoZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbnN1cHBvcnRlZCB0eXBlIG9mIGRhdGEgKCIrT2JqZWN0KGllLk0pKGUpKyIpIik7dGhpcy5fdmFsdWVzPVtdLHRoaXMuX2luZGV4PVtdLHRoaXMuX3B0cj1bMF0sdGhpcy5fc2l6ZT1bMCwwXSx0aGlzLl9kYXRhdHlwZT10fXZhciByLG4saX1mdW5jdGlvbiBhKGUsdCxyKXtlLl92YWx1ZXM9W10sZS5faW5kZXg9W10sZS5fcHRyPVtdLGUuX2RhdGF0eXBlPXI7dmFyIG49dC5sZW5ndGgsaT0wLGE9TSxvPTA7aWYoT2JqZWN0KGllLkkpKHIpJiYoYT1PLmZpbmQoTSxbcixyXSl8fE0sbz1PLmNvbnZlcnQoMCxyKSksMDxuKXt2YXIgcz0wO2Rve2UuX3B0ci5wdXNoKGUuX2luZGV4Lmxlbmd0aCk7Zm9yKHZhciB1PTA7dTxuO3UrKyl7dmFyIGM9dFt1XTtpZihPYmplY3QoaWUuYikoYykpe2lmKDA9PT1zJiZpPGMubGVuZ3RoJiYoaT1jLmxlbmd0aCksczxjLmxlbmd0aCl7dmFyIGY9Y1tzXTthKGYsbyl8fChlLl92YWx1ZXMucHVzaChmKSxlLl9pbmRleC5wdXNoKHUpKX19ZWxzZSAwPT09cyYmaTwxJiYoaT0xKSxhKGMsbyl8fChlLl92YWx1ZXMucHVzaChjKSxlLl9pbmRleC5wdXNoKHUpKX1zKyt9d2hpbGUoczxpKX1lLl9wdHIucHVzaChlLl9pbmRleC5sZW5ndGgpLGUuX3NpemU9W24saV19ZnVuY3Rpb24gZyhlLHQscixuKXtpZihyLXQ9PTApcmV0dXJuIHI7Zm9yKHZhciBpPXQ7aTxyO2krKylpZihuW2ldPT09ZSlyZXR1cm4gaTtyZXR1cm4gdH1mdW5jdGlvbiB2KGUsdCxyLG4saSxhLG8pe2kuc3BsaWNlKGUsMCxuKSxhLnNwbGljZShlLDAsdCk7Zm9yKHZhciBzPXIrMTtzPG8ubGVuZ3RoO3MrKylvW3NdKyt9ZnVuY3Rpb24gZihlLHQscixuKXt2YXIgaT1ufHwwLGE9TSxvPTA7T2JqZWN0KGllLkkpKGUuX2RhdGF0eXBlKSYmKGE9Ty5maW5kKE0sW2UuX2RhdGF0eXBlLGUuX2RhdGF0eXBlXSl8fE0sbz1PLmNvbnZlcnQoMCxlLl9kYXRhdHlwZSksaT1PLmNvbnZlcnQoaSxlLl9kYXRhdHlwZSkpO3ZhciBzLHUsYyxmPSFhKGksbyksbD1lLl9zaXplWzBdLHA9ZS5fc2l6ZVsxXTtpZihwPHIpe2Zvcih1PXA7dTxyO3UrKylpZihlLl9wdHJbdV09ZS5fdmFsdWVzLmxlbmd0aCxmKWZvcihzPTA7czxsO3MrKyllLl92YWx1ZXMucHVzaChpKSxlLl9pbmRleC5wdXNoKHMpO2UuX3B0cltyXT1lLl92YWx1ZXMubGVuZ3RofWVsc2UgcjxwJiYoZS5fcHRyLnNwbGljZShyKzEscC1yKSxlLl92YWx1ZXMuc3BsaWNlKGUuX3B0cltyXSxlLl92YWx1ZXMubGVuZ3RoKSxlLl9pbmRleC5zcGxpY2UoZS5fcHRyW3JdLGUuX2luZGV4Lmxlbmd0aCkpO2lmKHA9cixsPHQpe2lmKGYpe3ZhciBtPTA7Zm9yKHU9MDt1PHA7dSsrKXtlLl9wdHJbdV09ZS5fcHRyW3VdK20sYz1lLl9wdHJbdSsxXSttO3ZhciBoPTA7Zm9yKHM9bDtzPHQ7cysrLGgrKyllLl92YWx1ZXMuc3BsaWNlKGMraCwwLGkpLGUuX2luZGV4LnNwbGljZShjK2gsMCxzKSxtKyt9ZS5fcHRyW3BdPWUuX3ZhbHVlcy5sZW5ndGh9fWVsc2UgaWYodDxsKXt2YXIgZD0wO2Zvcih1PTA7dTxwO3UrKyl7ZS5fcHRyW3VdPWUuX3B0clt1XS1kO3ZhciB5PWUuX3B0clt1XSxnPWUuX3B0clt1KzFdLWQ7Zm9yKGM9eTtjPGc7YysrKXQtMTwocz1lLl9pbmRleFtjXSkmJihlLl92YWx1ZXMuc3BsaWNlKGMsMSksZS5faW5kZXguc3BsaWNlKGMsMSksZCsrKX1lLl9wdHJbdV09ZS5fdmFsdWVzLmxlbmd0aH1yZXR1cm4gZS5fc2l6ZVswXT10LGUuX3NpemVbMV09cixlfWZ1bmN0aW9uIHIoZSx0LHIsbixpKXt2YXIgYSxvLHM9blswXSx1PW5bMV0sYz1bXTtmb3IoYT0wO2E8czthKyspZm9yKGNbYV09W10sbz0wO288dTtvKyspY1thXVtvXT0wO2ZvcihvPTA7bzx1O28rKylmb3IodmFyIGY9cltvXSxsPXJbbysxXSxwPWY7cDxsO3ArKyljW2E9dFtwXV1bb109ZT9pP09iamVjdChhZS5hKShlW3BdKTplW3BdOjE7cmV0dXJuIGN9cmV0dXJuKGoucHJvdG90eXBlPW5ldyB0KS5jcmVhdGVTcGFyc2VNYXRyaXg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGooZSx0KX0sai5wcm90b3R5cGUudHlwZT0iU3BhcnNlTWF0cml4IixqLnByb3RvdHlwZS5pc1NwYXJzZU1hdHJpeD0hMCxqLnByb3RvdHlwZS5nZXREYXRhVHlwZT1mdW5jdGlvbigpe3JldHVybiBPYmplY3QoSS5oKSh0aGlzLl92YWx1ZXMsaWUuTSl9LGoucHJvdG90eXBlLnN0b3JhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4ic3BhcnNlIn0sai5wcm90b3R5cGUuZGF0YXR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YXR5cGV9LGoucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgaihlLHQpfSxqLnByb3RvdHlwZS5kZW5zaXR5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fc2l6ZVswXSx0PXRoaXMuX3NpemVbMV07cmV0dXJuIDAhPT1lJiYwIT09dD90aGlzLl9pbmRleC5sZW5ndGgvKGUqdCk6MH0sai5wcm90b3R5cGUuc3Vic2V0PWZ1bmN0aW9uKGUsdCxyKXtpZighdGhpcy5fdmFsdWVzKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGludm9rZSBzdWJzZXQgb24gYSBQYXR0ZXJuIG9ubHkgbWF0cml4Iik7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighT2JqZWN0KGllLnQpKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaW5kZXgiKTtpZih0LmlzU2NhbGFyKCkpcmV0dXJuIGUuZ2V0KHQubWluKCkpO3ZhciByLG4saSxhLG89dC5zaXplKCk7aWYoby5sZW5ndGghPT1lLl9zaXplLmxlbmd0aCl0aHJvdyBuZXcgei5hKG8ubGVuZ3RoLGUuX3NpemUubGVuZ3RoKTt2YXIgcz10Lm1pbigpLHU9dC5tYXgoKTtmb3Iocj0wLG49ZS5fc2l6ZS5sZW5ndGg7cjxuO3IrKylPYmplY3QoSS5zKShzW3JdLGUuX3NpemVbcl0pLE9iamVjdChJLnMpKHVbcl0sZS5fc2l6ZVtyXSk7dmFyIGM9ZS5fdmFsdWVzLGY9ZS5faW5kZXgsbD1lLl9wdHIscD10LmRpbWVuc2lvbigwKSxtPXQuZGltZW5zaW9uKDEpLGg9W10sZD1bXTtwLmZvckVhY2goZnVuY3Rpb24oZSx0KXtkW2VdPXRbMF0saFtlXT0hMH0pO3ZhciB5PWM/W106dm9pZCAwLGc9W10sdj1bXTtyZXR1cm4gbS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Zvcih2LnB1c2goZy5sZW5ndGgpLGk9bFtlXSxhPWxbZSsxXTtpPGE7aSsrKXI9ZltpXSwhMD09PWhbcl0mJihnLnB1c2goZFtyXSkseSYmeS5wdXNoKGNbaV0pKX0pLHYucHVzaChnLmxlbmd0aCksbmV3IGooe3ZhbHVlczp5LGluZGV4OmcscHRyOnYsc2l6ZTpvLGRhdGF0eXBlOmUuX2RhdGF0eXBlfSl9KHRoaXMsZSk7Y2FzZSAyOmNhc2UgMzpyZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7aWYoIXR8fCEwIT09dC5pc0luZGV4KXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaW5kZXgiKTt2YXIgaSxhPXQuc2l6ZSgpLG89dC5pc1NjYWxhcigpO09iamVjdChpZS52KShyKT8oaT1yLnNpemUoKSxyPXIudG9BcnJheSgpKTppPU9iamVjdChJLmEpKHIpO2lmKG8pe2lmKDAhPT1pLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTY2FsYXIgZXhwZWN0ZWQiKTtlLnNldCh0Lm1pbigpLHIsbil9ZWxzZXtpZigxIT09YS5sZW5ndGgmJjIhPT1hLmxlbmd0aCl0aHJvdyBuZXcgei5hKGEubGVuZ3RoLGUuX3NpemUubGVuZ3RoLCI8Iik7aWYoaS5sZW5ndGg8YS5sZW5ndGgpe2Zvcih2YXIgcz0wLHU9MDsxPT09YVtzXSYmMT09PWlbc107KXMrKztmb3IoOzE9PT1hW3NdOyl1KysscysrO3I9T2JqZWN0KEkucSkocixhLmxlbmd0aCx1LGkpfWlmKCFPYmplY3QoYWUuZCkoYSxpKSl0aHJvdyBuZXcgei5hKGEsaSwiPiIpO2Zvcih2YXIgYz10Lm1pbigpWzBdLGY9dC5taW4oKVsxXSxsPWlbMF0scD1pWzFdLG09MDttPGw7bSsrKWZvcih2YXIgaD0wO2g8cDtoKyspe3ZhciBkPXJbbV1baF07ZS5zZXQoW20rYyxoK2ZdLGQsbil9fXJldHVybiBlfSh0aGlzLGUsdCxyKTtkZWZhdWx0OnRocm93IG5ldyBTeW50YXhFcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyIpfX0sai5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe2lmKCFPYmplY3QoaWUuYikoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJyYXkgZXhwZWN0ZWQiKTtpZihlLmxlbmd0aCE9PXRoaXMuX3NpemUubGVuZ3RoKXRocm93IG5ldyB6LmEoZS5sZW5ndGgsdGhpcy5fc2l6ZS5sZW5ndGgpO2lmKCF0aGlzLl92YWx1ZXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaW52b2tlIGdldCBvbiBhIFBhdHRlcm4gb25seSBtYXRyaXgiKTt2YXIgdD1lWzBdLHI9ZVsxXTtPYmplY3QoSS5zKSh0LHRoaXMuX3NpemVbMF0pLE9iamVjdChJLnMpKHIsdGhpcy5fc2l6ZVsxXSk7dmFyIG49Zyh0LHRoaXMuX3B0cltyXSx0aGlzLl9wdHJbcisxXSx0aGlzLl9pbmRleCk7cmV0dXJuIG48dGhpcy5fcHRyW3IrMV0mJnRoaXMuX2luZGV4W25dPT09dD90aGlzLl92YWx1ZXNbbl06MH0sai5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCxyKXtpZighT2JqZWN0KGllLmIpKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFycmF5IGV4cGVjdGVkIik7aWYoZS5sZW5ndGghPT10aGlzLl9zaXplLmxlbmd0aCl0aHJvdyBuZXcgei5hKGUubGVuZ3RoLHRoaXMuX3NpemUubGVuZ3RoKTtpZighdGhpcy5fdmFsdWVzKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGludm9rZSBzZXQgb24gYSBQYXR0ZXJuIG9ubHkgbWF0cml4Iik7dmFyIG49ZVswXSxpPWVbMV0sYT10aGlzLl9zaXplWzBdLG89dGhpcy5fc2l6ZVsxXSxzPU0sdT0wO09iamVjdChpZS5JKSh0aGlzLl9kYXRhdHlwZSkmJihzPU8uZmluZChNLFt0aGlzLl9kYXRhdHlwZSx0aGlzLl9kYXRhdHlwZV0pfHxNLHU9Ty5jb252ZXJ0KDAsdGhpcy5fZGF0YXR5cGUpKSwoYS0xPG58fG8tMTxpKSYmKGYodGhpcyxNYXRoLm1heChuKzEsYSksTWF0aC5tYXgoaSsxLG8pLHIpLGE9dGhpcy5fc2l6ZVswXSxvPXRoaXMuX3NpemVbMV0pLE9iamVjdChJLnMpKG4sYSksT2JqZWN0KEkucykoaSxvKTt2YXIgYz1nKG4sdGhpcy5fcHRyW2ldLHRoaXMuX3B0cltpKzFdLHRoaXMuX2luZGV4KTtyZXR1cm4gYzx0aGlzLl9wdHJbaSsxXSYmdGhpcy5faW5kZXhbY109PT1uP3ModCx1KT9mdW5jdGlvbihlLHQscixuLGkpe3Iuc3BsaWNlKGUsMSksbi5zcGxpY2UoZSwxKTtmb3IodmFyIGE9dCsxO2E8aS5sZW5ndGg7YSsrKWlbYV0tLX0oYyxpLHRoaXMuX3ZhbHVlcyx0aGlzLl9pbmRleCx0aGlzLl9wdHIpOnRoaXMuX3ZhbHVlc1tjXT10OnYoYyxuLGksdCx0aGlzLl92YWx1ZXMsdGhpcy5faW5kZXgsdGhpcy5fcHRyKSx0aGlzfSxqLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCxlLHIpe2lmKCFPYmplY3QoaWUuYikodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJyYXkgZXhwZWN0ZWQiKTtpZigyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJPbmx5IHR3byBkaW1lbnNpb25zIG1hdHJpeCBhcmUgc3VwcG9ydGVkIik7cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbihlKXtpZighT2JqZWN0KGllLnkpKGUpfHwhT2JqZWN0KEUuaSkoZSl8fGU8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIHNpemUsIG11c3QgY29udGFpbiBwb3NpdGl2ZSBpbnRlZ2VycyAoc2l6ZTogIitPYmplY3QoSi5kKSh0KSsiKSIpfSksZihyP3RoaXMuY2xvbmUoKTp0aGlzLHRbMF0sdFsxXSxlKX0sai5wcm90b3R5cGUucmVzaGFwZT1mdW5jdGlvbih0LGUpe2lmKCFPYmplY3QoaWUuYikodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJyYXkgZXhwZWN0ZWQiKTtpZigyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJTcGFyc2UgbWF0cmljZXMgY2FuIG9ubHkgYmUgcmVzaGFwZWQgaW4gdHdvIGRpbWVuc2lvbnMiKTtpZih0LmZvckVhY2goZnVuY3Rpb24oZSl7aWYoIU9iamVjdChpZS55KShlKXx8IU9iamVjdChFLmkpKGUpfHxlPDApdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBzaXplLCBtdXN0IGNvbnRhaW4gcG9zaXRpdmUgaW50ZWdlcnMgKHNpemU6ICIrT2JqZWN0KEouZCkodCkrIikiKX0pLHRoaXMuX3NpemVbMF0qdGhpcy5fc2l6ZVsxXSE9dFswXSp0WzFdKXRocm93IG5ldyBFcnJvcigiUmVzaGFwaW5nIHNwYXJzZSBtYXRyaXggd2lsbCByZXN1bHQgaW4gdGhlIHdyb25nIG51bWJlciBvZiBlbGVtZW50cyIpO3ZhciByPWU/dGhpcy5jbG9uZSgpOnRoaXM7aWYodGhpcy5fc2l6ZVswXT09PXRbMF0mJnRoaXMuX3NpemVbMV09PT10WzFdKXJldHVybiByO2Zvcih2YXIgbj1bXSxpPTA7aTxyLl9wdHIubGVuZ3RoO2krKylmb3IodmFyIGE9MDthPHIuX3B0cltpKzFdLXIuX3B0cltpXTthKyspbi5wdXNoKGkpO2Zvcih2YXIgbz1yLl92YWx1ZXMuc2xpY2UoKSxzPXIuX2luZGV4LnNsaWNlKCksdT0wO3U8ci5faW5kZXgubGVuZ3RoO3UrKyl7dmFyIGM9c1t1XSxmPW5bdV0sbD1jKnIuX3NpemVbMV0rZjtuW3VdPWwldFsxXSxzW3VdPU1hdGguZmxvb3IobC90WzFdKX1yLl92YWx1ZXMubGVuZ3RoPTAsci5faW5kZXgubGVuZ3RoPTAsci5fcHRyLmxlbmd0aD10WzFdKzEsci5fc2l6ZT10LnNsaWNlKCk7Zm9yKHZhciBwPTA7cDxyLl9wdHIubGVuZ3RoO3ArKylyLl9wdHJbcF09MDtmb3IodmFyIG09MDttPG8ubGVuZ3RoO20rKyl7dmFyIGg9c1ttXSxkPW5bbV0seT1vW21dO3YoZyhoLHIuX3B0cltkXSxyLl9wdHJbZCsxXSxyLl9pbmRleCksaCxkLHksci5fdmFsdWVzLHIuX2luZGV4LHIuX3B0cil9cmV0dXJuIHJ9LGoucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBqKHt2YWx1ZXM6dGhpcy5fdmFsdWVzP09iamVjdChhZS5hKSh0aGlzLl92YWx1ZXMpOnZvaWQgMCxpbmRleDpPYmplY3QoYWUuYSkodGhpcy5faW5kZXgpLHB0cjpPYmplY3QoYWUuYSkodGhpcy5fcHRyKSxzaXplOk9iamVjdChhZS5hKSh0aGlzLl9zaXplKSxkYXRhdHlwZTp0aGlzLl9kYXRhdHlwZX0pfSxqLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NpemUuc2xpY2UoMCl9LGoucHJvdG90eXBlLm1hcD1mdW5jdGlvbihuLGUpe2lmKCF0aGlzLl92YWx1ZXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaW52b2tlIG1hcCBvbiBhIFBhdHRlcm4gb25seSBtYXRyaXgiKTt2YXIgaT10aGlzO3JldHVybiBmdW5jdGlvbihlLHQscixuLGksYSxvKXt2YXIgcz1bXSx1PVtdLGM9W10sZj1NLGw9MDtPYmplY3QoaWUuSSkoZS5fZGF0YXR5cGUpJiYoZj1PLmZpbmQoTSxbZS5fZGF0YXR5cGUsZS5fZGF0YXR5cGVdKXx8TSxsPU8uY29udmVydCgwLGUuX2RhdGF0eXBlKSk7Zm9yKHZhciBwPWZ1bmN0aW9uKGUsdCxyKXtlPWEoZSx0LHIpLGYoZSxsKXx8KHMucHVzaChlKSx1LnB1c2godCkpfSxtPW47bTw9aTttKyspe2MucHVzaChzLmxlbmd0aCk7dmFyIGg9ZS5fcHRyW21dLGQ9ZS5fcHRyW20rMV07aWYobylmb3IodmFyIHk9aDt5PGQ7eSsrKXt2YXIgZz1lLl9pbmRleFt5XTt0PD1nJiZnPD1yJiZwKGUuX3ZhbHVlc1t5XSxnLXQsbS1uKX1lbHNle2Zvcih2YXIgdj17fSxiPWg7YjxkO2IrKyl7dmFyIHg9ZS5faW5kZXhbYl07dlt4XT1lLl92YWx1ZXNbYl19Zm9yKHZhciB3PXQ7dzw9cjt3Kyspe3ZhciBOPXcgaW4gdj92W3ddOjA7cChOLHctdCxtLW4pfX19cmV0dXJuIGMucHVzaChzLmxlbmd0aCksbmV3IGooe3ZhbHVlczpzLGluZGV4OnUscHRyOmMsc2l6ZTpbci10KzEsaS1uKzFdfSl9KHRoaXMsMCx0aGlzLl9zaXplWzBdLTEsMCx0aGlzLl9zaXplWzFdLTEsZnVuY3Rpb24oZSx0LHIpe3JldHVybiBuKGUsW3Qscl0saSl9LGUpfSxqLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuX3ZhbHVlcyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbnZva2UgZm9yRWFjaCBvbiBhIFBhdHRlcm4gb25seSBtYXRyaXgiKTtmb3IodmFyIHI9dGhpcy5fc2l6ZVswXSxuPXRoaXMuX3NpemVbMV0saT0wO2k8bjtpKyspe3ZhciBhPXRoaXMuX3B0cltpXSxvPXRoaXMuX3B0cltpKzFdO2lmKHQpZm9yKHZhciBzPWE7czxvO3MrKyl7dmFyIHU9dGhpcy5faW5kZXhbc107ZSh0aGlzLl92YWx1ZXNbc10sW3UsaV0sdGhpcyl9ZWxzZXtmb3IodmFyIGM9e30sZj1hO2Y8bztmKyspe2NbdGhpcy5faW5kZXhbZl1dPXRoaXMuX3ZhbHVlc1tmXX1mb3IodmFyIGw9MDtsPHI7bCsrKXtlKGwgaW4gYz9jW2xdOjAsW2wsaV0sdGhpcyl9fX19LGoucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gcih0aGlzLl92YWx1ZXMsdGhpcy5faW5kZXgsdGhpcy5fcHRyLHRoaXMuX3NpemUsITApfSxqLnByb3RvdHlwZS52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fdmFsdWVzLHRoaXMuX2luZGV4LHRoaXMuX3B0cix0aGlzLl9zaXplLCExKX0sai5wcm90b3R5cGUuZm9ybWF0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl9zaXplWzBdLHI9dGhpcy5fc2l6ZVsxXSxuPXRoaXMuZGVuc2l0eSgpLGk9IlNwYXJzZSBNYXRyaXggWyIrT2JqZWN0KEouZCkodCxlKSsiIHggIitPYmplY3QoSi5kKShyLGUpKyJdIGRlbnNpdHk6ICIrT2JqZWN0KEouZCkobixlKSsiXG4iLGE9MDthPHI7YSsrKWZvcih2YXIgbz10aGlzLl9wdHJbYV0scz10aGlzLl9wdHJbYSsxXSx1PW87dTxzO3UrKyl7dmFyIGM9dGhpcy5faW5kZXhbdV07aSs9IlxuICAgICgiK09iamVjdChKLmQpKGMsZSkrIiwgIitPYmplY3QoSi5kKShhLGUpKyIpID09PiAiKyh0aGlzLl92YWx1ZXM/T2JqZWN0KEouZCkodGhpcy5fdmFsdWVzW3VdLGUpOiJYIil9cmV0dXJuIGl9LGoucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChKLmQpKHRoaXMudG9BcnJheSgpKX0sai5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue21hdGhqczoiU3BhcnNlTWF0cml4Iix2YWx1ZXM6dGhpcy5fdmFsdWVzLGluZGV4OnRoaXMuX2luZGV4LHB0cjp0aGlzLl9wdHIsc2l6ZTp0aGlzLl9zaXplLGRhdGF0eXBlOnRoaXMuX2RhdGF0eXBlfX0sai5wcm90b3R5cGUuZGlhZ29uYWw9ZnVuY3Rpb24oZSl7aWYoZSl7aWYoT2JqZWN0KGllLmUpKGUpJiYoZT1lLnRvTnVtYmVyKCkpLCFPYmplY3QoaWUueSkoZSl8fCFPYmplY3QoRS5pKShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgcGFyYW1ldGVyIGsgbXVzdCBiZSBhbiBpbnRlZ2VyIG51bWJlciIpfWVsc2UgZT0wO3ZhciB0PTA8ZT9lOjAscj1lPDA/LWU6MCxuPXRoaXMuX3NpemVbMF0saT10aGlzLl9zaXplWzFdLGE9TWF0aC5taW4obi1yLGktdCksbz1bXSxzPVtdLHU9W107dVswXT0wO2Zvcih2YXIgYz10O2M8aSYmby5sZW5ndGg8YTtjKyspZm9yKHZhciBmPXRoaXMuX3B0cltjXSxsPXRoaXMuX3B0cltjKzFdLHA9ZjtwPGw7cCsrKXt2YXIgbT10aGlzLl9pbmRleFtwXTtpZihtPT09Yy10K3Ipe28ucHVzaCh0aGlzLl92YWx1ZXNbcF0pLHNbby5sZW5ndGgtMV09bS1yO2JyZWFrfX1yZXR1cm4gdS5wdXNoKG8ubGVuZ3RoKSxuZXcgaih7dmFsdWVzOm8saW5kZXg6cyxwdHI6dSxzaXplOlthLDFdfSl9LGouZnJvbUpTT049ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqKGUpfSxqLmRpYWdvbmFsPWZ1bmN0aW9uKGUsdCxyLG4saSl7aWYoIU9iamVjdChpZS5iKShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcnJheSBleHBlY3RlZCwgc2l6ZSBwYXJhbWV0ZXIiKTtpZigyIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJPbmx5IHR3byBkaW1lbnNpb25zIG1hdHJpeCBhcmUgc3VwcG9ydGVkIik7aWYoZT1lLm1hcChmdW5jdGlvbihlKXtpZihPYmplY3QoaWUuZSkoZSkmJihlPWUudG9OdW1iZXIoKSksIU9iamVjdChpZS55KShlKXx8IU9iamVjdChFLmkpKGUpfHxlPDEpdGhyb3cgbmV3IEVycm9yKCJTaXplIHZhbHVlcyBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzIik7cmV0dXJuIGV9KSxyKXtpZihPYmplY3QoaWUuZSkocikmJihyPXIudG9OdW1iZXIoKSksIU9iamVjdChpZS55KShyKXx8IU9iamVjdChFLmkpKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBwYXJhbWV0ZXIgayBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyIil9ZWxzZSByPTA7dmFyIGE9TSxvPTA7T2JqZWN0KGllLkkpKGkpJiYoYT1PLmZpbmQoTSxbaSxpXSl8fE0sbz1PLmNvbnZlcnQoMCxpKSk7dmFyIHMsdT0wPHI/cjowLGM9cjwwPy1yOjAsZj1lWzBdLGw9ZVsxXSxwPU1hdGgubWluKGYtYyxsLXUpO2lmKE9iamVjdChpZS5iKSh0KSl7aWYodC5sZW5ndGghPT1wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZSBhcnJheSBsZW5ndGgiKTtzPWZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfX1lbHNlIGlmKE9iamVjdChpZS52KSh0KSl7dmFyIG09dC5zaXplKCk7aWYoMSE9PW0ubGVuZ3RofHxtWzBdIT09cCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbWF0cml4IGxlbmd0aCIpO3M9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0KFtlXSl9fWVsc2Ugcz1mdW5jdGlvbigpe3JldHVybiB0fTtmb3IodmFyIGg9W10sZD1bXSx5PVtdLGc9MDtnPGw7ZysrKXt5LnB1c2goaC5sZW5ndGgpO3ZhciB2PWctdTtpZigwPD12JiZ2PHApe3ZhciBiPXModik7YShiLG8pfHwoZC5wdXNoKHYrYyksaC5wdXNoKGIpKX19cmV0dXJuIHkucHVzaChoLmxlbmd0aCksbmV3IGooe3ZhbHVlczpoLGluZGV4OmQscHRyOnksc2l6ZTpbZixsXX0pfSxqLnByb3RvdHlwZS5zd2FwUm93cz1mdW5jdGlvbihlLHQpe2lmKCEoT2JqZWN0KGllLnkpKGUpJiZPYmplY3QoRS5pKShlKSYmT2JqZWN0KGllLnkpKHQpJiZPYmplY3QoRS5pKSh0KSkpdGhyb3cgbmV3IEVycm9yKCJSb3cgaW5kZXggbXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VycyIpO2lmKDIhPT10aGlzLl9zaXplLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIk9ubHkgdHdvIGRpbWVuc2lvbmFsIG1hdHJpeCBpcyBzdXBwb3J0ZWQiKTtyZXR1cm4gT2JqZWN0KEkucykoZSx0aGlzLl9zaXplWzBdKSxPYmplY3QoSS5zKSh0LHRoaXMuX3NpemVbMF0pLGouX3N3YXBSb3dzKGUsdCx0aGlzLl9zaXplWzFdLHRoaXMuX3ZhbHVlcyx0aGlzLl9pbmRleCx0aGlzLl9wdHIpLHRoaXN9LGouX2ZvckVhY2hSb3c9ZnVuY3Rpb24oZSx0LHIsbixpKXtmb3IodmFyIGE9bltlXSxvPW5bZSsxXSxzPWE7czxvO3MrKylpKHJbc10sdFtzXSl9LGouX3N3YXBSb3dzPWZ1bmN0aW9uKGUsdCxyLG4saSxhKXtmb3IodmFyIG89MDtvPHI7bysrKXt2YXIgcz1hW29dLHU9YVtvKzFdLGM9ZyhlLHMsdSxpKSxmPWcodCxzLHUsaSk7aWYoYzx1JiZmPHUmJmlbY109PT1lJiZpW2ZdPT09dCl7aWYobil7dmFyIGw9bltjXTtuW2NdPW5bZl0sbltmXT1sfX1lbHNlIGlmKGM8dSYmaVtjXT09PWUmJih1PD1mfHxpW2ZdIT09dCkpe3ZhciBwPW4/bltjXTp2b2lkIDA7aS5zcGxpY2UoZiwwLHQpLG4mJm4uc3BsaWNlKGYsMCxwKSxpLnNwbGljZShmPD1jP2MrMTpjLDEpLG4mJm4uc3BsaWNlKGY8PWM/YysxOmMsMSl9ZWxzZSBpZihmPHUmJmlbZl09PT10JiYodTw9Y3x8aVtjXSE9PWUpKXt2YXIgbT1uP25bZl06dm9pZCAwO2kuc3BsaWNlKGMsMCxlKSxuJiZuLnNwbGljZShjLDAsbSksaS5zcGxpY2UoYzw9Zj9mKzE6ZiwxKSxuJiZuLnNwbGljZShjPD1mP2YrMTpmLDEpfX19LGp9LHtpc0NsYXNzOiEwfSksQWU9WyJ0eXBlZCJdLENlPU9iamVjdChzLmEpKCJudW1iZXIiLEFlLGZ1bmN0aW9uKGUpe3ZhciB0PSgwLGUudHlwZWQpKCJudW1iZXIiLHsiIjpmdW5jdGlvbigpe3JldHVybiAwfSxudW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN0cmluZzpmdW5jdGlvbihlKXtpZigiTmFOIj09PWUpcmV0dXJuIE5hTjt2YXIgdD1OdW1iZXIoZSk7aWYoaXNOYU4odCkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCdTdHJpbmcgIicrZSsnIiBpcyBubyB2YWxpZCBudW1iZXInKTtyZXR1cm4gdH0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRvTnVtYmVyKCl9LEZyYWN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlT2YoKX0sVW5pdDpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU2Vjb25kIGFyZ3VtZW50IHdpdGggdmFsdWVsZXNzIHVuaXQgZXhwZWN0ZWQiKX0sbnVsbDpmdW5jdGlvbigpe3JldHVybiAwfSwiVW5pdCwgc3RyaW5nIHwgVW5pdCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b051bWJlcih0KX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSx0KX19KTtyZXR1cm4gdH0pLFRlPVsidHlwZWQiXSxfZT1PYmplY3Qocy5hKSgic3RyaW5nIixUZSxmdW5jdGlvbihlKXt2YXIgdD0oMCxlLnR5cGVkKSgic3RyaW5nIix7IiI6ZnVuY3Rpb24oKXtyZXR1cm4iIn0sbnVtYmVyOkUuaCxudWxsOmZ1bmN0aW9uKCl7cmV0dXJuIm51bGwifSxib29sZWFuOmZ1bmN0aW9uKGUpe3JldHVybiBlKyIifSxzdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LCJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7cmV0dXJuIG9lKGUsdCl9LGFueTpmdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpfX0pO3JldHVybiB0fSksSWU9ImJvb2xlYW4iLHFlPVsidHlwZWQiXSxCZT1PYmplY3Qocy5hKShJZSxxZSxmdW5jdGlvbihlKXt2YXIgdD0oMCxlLnR5cGVkKShJZSx7IiI6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sYm9vbGVhbjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sbnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiEhZX0sbnVsbDpmdW5jdGlvbigpe3JldHVybiExfSxCaWdOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIWUuaXNaZXJvKCl9LHN0cmluZzpmdW5jdGlvbihlKXt2YXIgdD1lLnRvTG93ZXJDYXNlKCk7aWYoInRydWUiPT09dClyZXR1cm4hMDtpZigiZmFsc2UiPT09dClyZXR1cm4hMTt2YXIgcj1OdW1iZXIoZSk7aWYoIiIhPT1lJiYhaXNOYU4ocikpcmV0dXJuISFyO3Rocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgIicrZSsnIiB0byBhIGJvb2xlYW4nKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSx0KX19KTtyZXR1cm4gdH0pLGtlPVsidHlwZWQiLCJCaWdOdW1iZXIiXSx6ZT1PYmplY3Qocy5hKSgiYmlnbnVtYmVyIixrZSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5CaWdOdW1iZXIsbj10KCJiaWdudW1iZXIiLHsiIjpmdW5jdGlvbigpe3JldHVybiBuZXcgcigwKX0sbnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcihlKyIiKX0sc3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcihlKX0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxGcmFjdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHIoZS5uKS5kaXYoZS5kKS50aW1lcyhlLnMpfSxudWxsOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKDApfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLG4pfX0pO3JldHVybiBufSksRGU9WyJ0eXBlZCIsIkNvbXBsZXgiXSxSZT1PYmplY3Qocy5hKSgiY29tcGxleCIsRGUsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuQ29tcGxleCxuPXQoImNvbXBsZXgiLHsiIjpmdW5jdGlvbigpe3JldHVybiByLlpFUk99LG51bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHIoZSwwKX0sIm51bWJlciwgbnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBuZXcgcihlLHQpfSwiQmlnTnVtYmVyLCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyByKGUudG9OdW1iZXIoKSx0LnRvTnVtYmVyKCkpfSxGcmFjdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHIoZS52YWx1ZU9mKCksMCl9LENvbXBsZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xvbmUoKX0sc3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiByKGUpfSxudWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHIoMCl9LE9iamVjdDpmdW5jdGlvbihlKXtpZigicmUiaW4gZSYmImltImluIGUpcmV0dXJuIG5ldyByKGUucmUsZS5pbSk7aWYoInIiaW4gZSYmInBoaSJpbiBlfHwiYWJzImluIGUmJiJhcmciaW4gZSlyZXR1cm4gbmV3IHIoZSk7dGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIChyZSBhbmQgaW0pIG9yIChyIGFuZCBwaGkpIG9yIChhYnMgYW5kIGFyZykiKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSxuKX19KTtyZXR1cm4gbn0pLFBlPVsidHlwZWQiLCJGcmFjdGlvbiJdLEZlPU9iamVjdChzLmEpKCJmcmFjdGlvbiIsUGUsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuRnJhY3Rpb24sbj10KCJmcmFjdGlvbiIse251bWJlcjpmdW5jdGlvbihlKXtpZighaXNGaW5pdGUoZSl8fGlzTmFOKGUpKXRocm93IG5ldyBFcnJvcihlKyIgY2Fubm90IGJlIHJlcHJlc2VudGVkIGFzIGEgZnJhY3Rpb24iKTtyZXR1cm4gbmV3IHIoZSl9LHN0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHIoZSl9LCJudW1iZXIsIG51bWJlciI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IHIoZSx0KX0sbnVsbDpmdW5jdGlvbigpe3JldHVybiBuZXcgcigwKX0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcihlLnRvU3RyaW5nKCkpfSxGcmFjdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sT2JqZWN0OmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcihlKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSxuKX19KTtyZXR1cm4gbn0pLFVlPVsidHlwZWQiLCJNYXRyaXgiLCJEZW5zZU1hdHJpeCIsIlNwYXJzZU1hdHJpeCJdLExlPU9iamVjdChzLmEpKCJtYXRyaXgiLFVlLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQsbj0oZS5NYXRyaXgsZS5EZW5zZU1hdHJpeCksaT1lLlNwYXJzZU1hdHJpeDtyZXR1cm4gdCgibWF0cml4Iix7IiI6ZnVuY3Rpb24oKXtyZXR1cm4gcihbXSl9LHN0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4gcihbXSxlKX0sInN0cmluZywgc3RyaW5nIjpmdW5jdGlvbihlLHQpe3JldHVybiByKFtdLGUsdCl9LEFycmF5OmZ1bmN0aW9uKGUpe3JldHVybiByKGUpfSxNYXRyaXg6ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSxlLnN0b3JhZ2UoKSl9LCJBcnJheSB8IE1hdHJpeCwgc3RyaW5nIjpyLCJBcnJheSB8IE1hdHJpeCwgc3RyaW5nLCBzdHJpbmciOnJ9KTtmdW5jdGlvbiByKGUsdCxyKXtpZigiZGVuc2UiPT09dHx8ImRlZmF1bHQiPT09dHx8dm9pZCAwPT09dClyZXR1cm4gbmV3IG4oZSxyKTtpZigic3BhcnNlIj09PXQpcmV0dXJuIG5ldyBpKGUscik7dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBtYXRyaXggdHlwZSAiK0pTT04uc3RyaW5naWZ5KHQpKyIuIil9fSksSGU9InNwbGl0VW5pdCIsJGU9WyJ0eXBlZCJdLEdlPU9iamVjdChzLmEpKEhlLCRlLGZ1bmN0aW9uKGUpe3JldHVybigwLGUudHlwZWQpKEhlLHsiVW5pdCwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuc3BsaXRVbml0KHQpfX0pfSksWmU9Im51bWJlciIsVmU9Im51bWJlciwgbnVtYmVyIjtmdW5jdGlvbiBKZShlKXtyZXR1cm4gTWF0aC5hYnMoZSl9ZnVuY3Rpb24gV2UoZSx0KXtyZXR1cm4gZSt0fWZ1bmN0aW9uIFllKGUsdCl7cmV0dXJuIGUqdH1mdW5jdGlvbiBYZShlKXtyZXR1cm4tZX1mdW5jdGlvbiBRZShlKXtyZXR1cm4gZX1mdW5jdGlvbiBLZShlKXtyZXR1cm4gT2JqZWN0KEUuZCkoZSl9ZnVuY3Rpb24gZXQoZSl7cmV0dXJuIE1hdGguY2VpbChlKX1mdW5jdGlvbiB0dChlKXtyZXR1cm4gZSplKmV9ZnVuY3Rpb24gcnQoZSl7cmV0dXJuIE1hdGguZXhwKGUpfWZ1bmN0aW9uIG50KGUpe3JldHVybiBPYmplY3QoRS5nKShlKX1mdW5jdGlvbiBpdChlLHQpe2lmKCFPYmplY3QoRS5pKShlKXx8IU9iamVjdChFLmkpKHQpKXRocm93IG5ldyBFcnJvcigiUGFyYW1ldGVycyBpbiBmdW5jdGlvbiBnY2QgbXVzdCBiZSBpbnRlZ2VyIG51bWJlcnMiKTtmb3IodmFyIHI7MCE9PXQ7KXI9ZSV0LGU9dCx0PXI7cmV0dXJuIGU8MD8tZTplfWZ1bmN0aW9uIGF0KGUsdCl7aWYoIU9iamVjdChFLmkpKGUpfHwhT2JqZWN0KEUuaSkodCkpdGhyb3cgbmV3IEVycm9yKCJQYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIGxjbSBtdXN0IGJlIGludGVnZXIgbnVtYmVycyIpO2lmKDA9PT1lfHwwPT09dClyZXR1cm4gMDtmb3IodmFyIHIsbj1lKnQ7MCE9PXQ7KXQ9ZSUocj10KSxlPXI7cmV0dXJuIE1hdGguYWJzKG4vZSl9ZnVuY3Rpb24gb3QoZSl7cmV0dXJuIE1hdGgubG9nKGUpfWZ1bmN0aW9uIHN0KGUpe3JldHVybiBPYmplY3QoRS5qKShlKX1mdW5jdGlvbiB1dChlKXtyZXR1cm4gT2JqZWN0KEUubCkoZSl9ZnVuY3Rpb24gY3QoZSx0KXtpZigwPHQpcmV0dXJuIGUtdCpNYXRoLmZsb29yKGUvdCk7aWYoMD09PXQpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FsY3VsYXRlIG1vZCBmb3IgYSBuZWdhdGl2ZSBkaXZpc29yIil9ZnVuY3Rpb24gZnQoZSx0KXt2YXIgcj10PDA7aWYociYmKHQ9LXQpLDA9PT10KXRocm93IG5ldyBFcnJvcigiUm9vdCBtdXN0IGJlIG5vbi16ZXJvIik7aWYoZTwwJiZNYXRoLmFicyh0KSUyIT0xKXRocm93IG5ldyBFcnJvcigiUm9vdCBtdXN0IGJlIG9kZCB3aGVuIGEgaXMgbmVnYXRpdmUuIik7aWYoMD09PWUpcmV0dXJuIHI/MS8wOjA7aWYoIWlzRmluaXRlKGUpKXJldHVybiByPzA6ZTt2YXIgbj1NYXRoLnBvdyhNYXRoLmFicyhlKSwxL3QpO3JldHVybiBuPWU8MD8tbjpuLHI/MS9uOm59ZnVuY3Rpb24gbHQoZSl7cmV0dXJuIE9iamVjdChFLm4pKGUpfWZ1bmN0aW9uIHB0KGUpe3JldHVybiBlKmV9ZnVuY3Rpb24gbXQoZSx0KXt2YXIgcixuLGksYT0wLG89MSxzPTEsdT0wO2lmKCFPYmplY3QoRS5pKShlKXx8IU9iamVjdChFLmkpKHQpKXRocm93IG5ldyBFcnJvcigiUGFyYW1ldGVycyBpbiBmdW5jdGlvbiB4Z2NkIG11c3QgYmUgaW50ZWdlciBudW1iZXJzIik7Zm9yKDt0OylpPWUtKG49TWF0aC5mbG9vcihlL3QpKSp0LGE9by1uKihyPWEpLG89cixzPXUtbioocj1zKSx1PXIsZT10LHQ9aTtyZXR1cm4gZTwwP1stZSwtbywtdV06W2UsZT9vOjAsdV19ZnVuY3Rpb24gaHQoZSx0KXtyZXR1cm4gZSplPDEmJnQ9PT0xLzB8fDE8ZSplJiZ0PT09LTEvMD8wOk1hdGgucG93KGUsdCl9ZnVuY3Rpb24gZHQoZSl7dmFyIHQ9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJuIHBhcnNlRmxvYXQoT2JqZWN0KEUucSkoZSx0KSl9SmUuc2lnbmF0dXJlPVplLFllLnNpZ25hdHVyZT1XZS5zaWduYXR1cmU9VmUsbnQuc2lnbmF0dXJlPXJ0LnNpZ25hdHVyZT10dC5zaWduYXR1cmU9ZXQuc2lnbmF0dXJlPUtlLnNpZ25hdHVyZT1RZS5zaWduYXR1cmU9WGUuc2lnbmF0dXJlPVplLGF0LnNpZ25hdHVyZT1pdC5zaWduYXR1cmU9VmUsdXQuc2lnbmF0dXJlPXN0LnNpZ25hdHVyZT1vdC5zaWduYXR1cmU9WmUsZnQuc2lnbmF0dXJlPWN0LnNpZ25hdHVyZT1WZSxwdC5zaWduYXR1cmU9bHQuc2lnbmF0dXJlPVplLGR0LnNpZ25hdHVyZT1odC5zaWduYXR1cmU9bXQuc2lnbmF0dXJlPVZlO3ZhciB5dD0idW5hcnlNaW51cyIsZ3Q9WyJ0eXBlZCJdLHZ0PU9iamVjdChzLmEpKHl0LGd0LGZ1bmN0aW9uKGUpe3ZhciByPSgwLGUudHlwZWQpKHl0LHtudW1iZXI6WGUsQ29tcGxleDpmdW5jdGlvbihlKXtyZXR1cm4gZS5uZWcoKX0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLm5lZygpfSxGcmFjdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gZS5uZWcoKX0sVW5pdDpmdW5jdGlvbihlKXt2YXIgdD1lLmNsb25lKCk7cmV0dXJuIHQudmFsdWU9cihlLnZhbHVlKSx0fSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLHIsITApfX0pO3JldHVybiByfSksYnQ9InVuYXJ5UGx1cyIseHQ9WyJ0eXBlZCIsImNvbmZpZyIsIkJpZ051bWJlciJdLHd0PU9iamVjdChzLmEpKGJ0LHh0LGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLmNvbmZpZyxuPWUuQmlnTnVtYmVyLGk9dChidCx7bnVtYmVyOlFlLENvbXBsZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LEJpZ051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sRnJhY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LFVuaXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xvbmUoKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSxpLCEwKX0sImJvb2xlYW4gfCBzdHJpbmciOmZ1bmN0aW9uKGUpe3JldHVybiJCaWdOdW1iZXIiPT09ci5udW1iZXI/bmV3IG4oK2UpOitlfX0pO3JldHVybiBpfSksTnQ9WyJ0eXBlZCJdLE90PU9iamVjdChzLmEpKCJhYnMiLE50LGZ1bmN0aW9uKGUpe3ZhciB0PSgwLGUudHlwZWQpKCJhYnMiLHtudW1iZXI6SmUsQ29tcGxleDpmdW5jdGlvbihlKXtyZXR1cm4gZS5hYnMoKX0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLmFicygpfSxGcmFjdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gZS5hYnMoKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSx0LCEwKX0sVW5pdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5hYnMoKX19KTtyZXR1cm4gdH0pLE10PVsidHlwZWQiLCJpc0ludGVnZXIiXSxqdD1PYmplY3Qocy5hKSgiYXBwbHkiLE10LGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQsaT1lLmlzSW50ZWdlcjtyZXR1cm4gdCgiYXBwbHkiLHsiQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlciwgZnVuY3Rpb24iOmZ1bmN0aW9uKGUsdCxyKXtpZighaSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnRlZ2VyIG51bWJlciBleHBlY3RlZCBmb3IgZGltZW5zaW9uIik7dmFyIG49QXJyYXkuaXNBcnJheShlKT9PYmplY3QoSS5hKShlKTplLnNpemUoKTtpZih0PDB8fHQ+PW4ubGVuZ3RoKXRocm93IG5ldyBSLmEodCxuLmxlbmd0aCk7cmV0dXJuIE9iamVjdChpZS52KShlKT9lLmNyZWF0ZShFdChlLnZhbHVlT2YoKSx0LHIpKTpFdChlLHQscil9fSl9KTtmdW5jdGlvbiBFdChlLHQscil7dmFyIG4saSxhO2lmKHQ8PTApe2lmKEFycmF5LmlzQXJyYXkoZVswXSkpe2ZvcihhPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbj1lLmxlbmd0aCxpPWVbMF0ubGVuZ3RoLGE9W107Zm9yKHI9MDtyPGk7cisrKXt2YXIgbz1bXTtmb3IodD0wO3Q8bjt0Kyspby5wdXNoKGVbdF1bcl0pO2EucHVzaChvKX1yZXR1cm4gYX0oZSksaT1bXSxuPTA7bjxhLmxlbmd0aDtuKyspaVtuXT1FdChhW25dLHQtMSxyKTtyZXR1cm4gaX1yZXR1cm4gcihlKX1mb3IoaT1bXSxuPTA7bjxlLmxlbmd0aDtuKyspaVtuXT1FdChlW25dLHQtMSxyKTtyZXR1cm4gaX12YXIgU3Q9ImFkZFNjYWxhciIsQXQ9WyJ0eXBlZCJdLEN0PU9iamVjdChzLmEpKFN0LEF0LGZ1bmN0aW9uKGUpe3ZhciBuPSgwLGUudHlwZWQpKFN0LHsibnVtYmVyLCBudW1iZXIiOldlLCJDb21wbGV4LCBDb21wbGV4IjpmdW5jdGlvbihlLHQpe3JldHVybiBlLmFkZCh0KX0sIkJpZ051bWJlciwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBlLnBsdXModCl9LCJGcmFjdGlvbiwgRnJhY3Rpb24iOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuYWRkKHQpfSwiVW5pdCwgVW5pdCI6ZnVuY3Rpb24oZSx0KXtpZihudWxsPT09ZS52YWx1ZXx8dm9pZCAwPT09ZS52YWx1ZSl0aHJvdyBuZXcgRXJyb3IoIlBhcmFtZXRlciB4IGNvbnRhaW5zIGEgdW5pdCB3aXRoIHVuZGVmaW5lZCB2YWx1ZSIpO2lmKG51bGw9PT10LnZhbHVlfHx2b2lkIDA9PT10LnZhbHVlKXRocm93IG5ldyBFcnJvcigiUGFyYW1ldGVyIHkgY29udGFpbnMgYSB1bml0IHdpdGggdW5kZWZpbmVkIHZhbHVlIik7aWYoIWUuZXF1YWxCYXNlKHQpKXRocm93IG5ldyBFcnJvcigiVW5pdHMgZG8gbm90IG1hdGNoIik7dmFyIHI9ZS5jbG9uZSgpO3JldHVybiByLnZhbHVlPW4oci52YWx1ZSx0LnZhbHVlKSxyLmZpeFByZWZpeD0hMSxyfX0pO3JldHVybiBufSksVHQ9WyJjb25maWciLCJ0eXBlZCIsImlzTmVnYXRpdmUiLCJ1bmFyeU1pbnVzIiwibWF0cml4IiwiQ29tcGxleCIsIkJpZ051bWJlciIsIkZyYWN0aW9uIl0sX3Q9T2JqZWN0KHMuYSkoImNicnQiLFR0LGZ1bmN0aW9uKGUpe3ZhciBvPWUuY29uZmlnLHQ9ZS50eXBlZCxhPWUuaXNOZWdhdGl2ZSxzPWUudW5hcnlNaW51cyx1PWUubWF0cml4LGM9ZS5Db21wbGV4LGY9ZS5CaWdOdW1iZXIsbD1lLkZyYWN0aW9uLHI9dCgiY2JydCIse251bWJlcjpLZSxDb21wbGV4OnAsIkNvbXBsZXgsIGJvb2xlYW4iOnAsQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNicnQoKX0sVW5pdDpmdW5jdGlvbihlKXt7aWYoZS52YWx1ZSYmT2JqZWN0KGllLmopKGUudmFsdWUpKXt2YXIgdD1lLmNsb25lKCk7cmV0dXJuIHQudmFsdWU9MSwodD10LnBvdygxLzMpKS52YWx1ZT1wKGUudmFsdWUpLHR9dmFyIHIsbj1hKGUudmFsdWUpO24mJihlLnZhbHVlPXMoZS52YWx1ZSkpLHI9T2JqZWN0KGllLmUpKGUudmFsdWUpP25ldyBmKDEpLmRpdigzKTpPYmplY3QoaWUubykoZS52YWx1ZSk/bmV3IGwoMSwzKToxLzM7dmFyIGk9ZS5wb3cocik7cmV0dXJuIG4mJihpLnZhbHVlPXMoaS52YWx1ZSkpLGl9fSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLHIsITApfX0pO2Z1bmN0aW9uIHAoZSx0KXt2YXIgcj1lLmFyZygpLzMsbj1lLmFicygpLGk9bmV3IGMoS2UobiksMCkubXVsKG5ldyBjKDAscikuZXhwKCkpO2lmKHQpe3ZhciBhPVtpLG5ldyBjKEtlKG4pLDApLm11bChuZXcgYygwLHIrMipNYXRoLlBJLzMpLmV4cCgpKSxuZXcgYyhLZShuKSwwKS5tdWwobmV3IGMoMCxyLTIqTWF0aC5QSS8zKS5leHAoKSldO3JldHVybiJBcnJheSI9PT1vLm1hdHJpeD9hOnUoYSl9cmV0dXJuIGl9cmV0dXJuIHJ9KSxJdD1bInR5cGVkIiwiY29uZmlnIiwicm91bmQiXSxxdD1PYmplY3Qocy5hKSgiY2VpbCIsSXQsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuY29uZmlnLG49ZS5yb3VuZCxpPXQoImNlaWwiLHtudW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuKE9iamVjdChFLm0pKGUsbihlKSxyLmVwc2lsb24pP246ZXQpKGUpfSxDb21wbGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlLmNlaWwoKX0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBOZShlLG4oZSksci5lcHNpbG9uKT9uKGUpOmUuY2VpbCgpfSxGcmFjdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gZS5jZWlsKCl9LCJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7cmV0dXJuIG9lKGUsaSwhMCl9fSk7cmV0dXJuIGl9KSxCdD1bInR5cGVkIl0sa3Q9T2JqZWN0KHMuYSkoImN1YmUiLEJ0LGZ1bmN0aW9uKGUpe3ZhciB0PSgwLGUudHlwZWQpKCJjdWJlIix7bnVtYmVyOnR0LENvbXBsZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubXVsKGUpLm11bChlKX0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRpbWVzKGUpLnRpbWVzKGUpfSxGcmFjdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gZS5wb3coMyl9LCJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7cmV0dXJuIG9lKGUsdCwhMCl9LFVuaXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucG93KDMpfX0pO3JldHVybiB0fSksenQ9WyJ0eXBlZCJdLER0PU9iamVjdChzLmEpKCJleHAiLHp0LGZ1bmN0aW9uKGUpe3ZhciB0PSgwLGUudHlwZWQpKCJleHAiLHtudW1iZXI6cnQsQ29tcGxleDpmdW5jdGlvbihlKXtyZXR1cm4gZS5leHAoKX0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLmV4cCgpfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLHQpfX0pO3JldHVybiB0fSksUnQ9WyJ0eXBlZCIsIkNvbXBsZXgiXSxQdD1PYmplY3Qocy5hKSgiZXhwbTEiLFJ0LGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLkNvbXBsZXgsbj10KCJleHBtMSIse251bWJlcjpudCxDb21wbGV4OmZ1bmN0aW9uKGUpe3ZhciB0PU1hdGguZXhwKGUucmUpO3JldHVybiBuZXcgcih0Kk1hdGguY29zKGUuaW0pLTEsdCpNYXRoLnNpbihlLmltKSl9LEJpZ051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5leHAoKS5taW51cygxKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSxuKX19KTtyZXR1cm4gbn0pLEZ0PVsidHlwZWQiLCJDb21wbGV4IiwiY2VpbCIsImZsb29yIl0sVXQ9T2JqZWN0KHMuYSkoImZpeCIsRnQsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuQ29tcGxleCxuPWUuY2VpbCxpPWUuZmxvb3IsYT10KCJmaXgiLHtudW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuKDA8ZT9pOm4pKGUpfSxDb21wbGV4OmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcigwPGUucmU/TWF0aC5mbG9vcihlLnJlKTpNYXRoLmNlaWwoZS5yZSksMDxlLmltP01hdGguZmxvb3IoZS5pbSk6TWF0aC5jZWlsKGUuaW0pKX0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybihlLmlzTmVnYXRpdmUoKT9uOmkpKGUpfSxGcmFjdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gZS5zPDA/ZS5jZWlsKCk6ZS5mbG9vcigpfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLGEsITApfX0pO3JldHVybiBhfSksTHQ9WyJ0eXBlZCIsImNvbmZpZyIsInJvdW5kIl0sSHQ9T2JqZWN0KHMuYSkoImZsb29yIixMdCxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5jb25maWcsbj1lLnJvdW5kLGk9dCgiZmxvb3IiLHtudW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChFLm0pKGUsbihlKSxyLmVwc2lsb24pP24oZSk6TWF0aC5mbG9vcihlKX0sQ29tcGxleDpmdW5jdGlvbihlKXtyZXR1cm4gZS5mbG9vcigpfSxCaWdOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIE5lKGUsbihlKSxyLmVwc2lsb24pP24oZSk6ZS5mbG9vcigpfSxGcmFjdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gZS5mbG9vcigpfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLGksITApfX0pO3JldHVybiBpfSksJHQ9WyJ0eXBlZCJdLEd0PU9iamVjdChzLmEpKCJhbGdvcml0aG0wMSIsJHQsZnVuY3Rpb24oZSl7dmFyIGo9ZS50eXBlZDtyZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9ZS5fZGF0YSxhPWUuX3NpemUsbz1lLl9kYXRhdHlwZSxzPXQuX3ZhbHVlcyx1PXQuX2luZGV4LGM9dC5fcHRyLGY9dC5fc2l6ZSxsPXQuX2RhdGF0eXBlO2lmKGEubGVuZ3RoIT09Zi5sZW5ndGgpdGhyb3cgbmV3IHouYShhLmxlbmd0aCxmLmxlbmd0aCk7aWYoYVswXSE9PWZbMF18fGFbMV0hPT1mWzFdKXRocm93IG5ldyBSYW5nZUVycm9yKCJEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBBICgiK2ErIikgbXVzdCBtYXRjaCBNYXRyaXggQiAoIitmKyIpIik7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gRGVuc2UgTWF0cml4IGFuZCBQYXR0ZXJuIFNwYXJzZSBNYXRyaXgiKTt2YXIgcCxtLGg9YVswXSxkPWFbMV0seT0ic3RyaW5nIj09dHlwZW9mIG8mJm89PT1sP286dm9pZCAwLGc9eT9qLmZpbmQocixbeSx5XSk6cix2PVtdO2ZvcihwPTA7cDxoO3ArKyl2W3BdPVtdO3ZhciBiPVtdLHg9W107Zm9yKG09MDttPGQ7bSsrKXtmb3IodmFyIHc9bSsxLE49Y1ttXSxPPWNbbSsxXSxNPU47TTxPO00rKyliW3A9dVtNXV09bj9nKHNbTV0saVtwXVttXSk6ZyhpW3BdW21dLHNbTV0pLHhbcF09dztmb3IocD0wO3A8aDtwKyspeFtwXT09PXc/dltwXVttXT1iW3BdOnZbcF1bbV09aVtwXVttXX1yZXR1cm4gZS5jcmVhdGVEZW5zZU1hdHJpeCh7ZGF0YTp2LHNpemU6W2gsZF0sZGF0YXR5cGU6eX0pfX0pLFp0PVsidHlwZWQiLCJlcXVhbFNjYWxhciJdLFZ0PU9iamVjdChzLmEpKCJhbGdvcml0aG0wNCIsWnQsZnVuY3Rpb24oZSl7dmFyIHE9ZS50eXBlZCxCPWUuZXF1YWxTY2FsYXI7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLl92YWx1ZXMsaT1lLl9pbmRleCxhPWUuX3B0cixvPWUuX3NpemUscz1lLl9kYXRhdHlwZSx1PXQuX3ZhbHVlcyxjPXQuX2luZGV4LGY9dC5fcHRyLGw9dC5fc2l6ZSxwPXQuX2RhdGF0eXBlO2lmKG8ubGVuZ3RoIT09bC5sZW5ndGgpdGhyb3cgbmV3IHouYShvLmxlbmd0aCxsLmxlbmd0aCk7aWYob1swXSE9PWxbMF18fG9bMV0hPT1sWzFdKXRocm93IG5ldyBSYW5nZUVycm9yKCJEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBBICgiK28rIikgbXVzdCBtYXRjaCBNYXRyaXggQiAoIitsKyIpIik7dmFyIG0saD1vWzBdLGQ9b1sxXSx5PUIsZz0wLHY9cjsic3RyaW5nIj09dHlwZW9mIHMmJnM9PT1wJiYobT1zLHk9cS5maW5kKEIsW20sbV0pLGc9cS5jb252ZXJ0KDAsbSksdj1xLmZpbmQocixbbSxtXSkpO3ZhciBiLHgsdyxOLE8sTT1uJiZ1P1tdOnZvaWQgMCxqPVtdLEU9W10sUz1uJiZ1P1tdOnZvaWQgMCxBPW4mJnU/W106dm9pZCAwLEM9W10sVD1bXTtmb3IoeD0wO3g8ZDt4Kyspe0VbeF09ai5sZW5ndGg7dmFyIF89eCsxO2ZvcihOPWFbeF0sTz1hW3grMV0sdz1OO3c8Tzt3KyspYj1pW3ddLGoucHVzaChiKSxDW2JdPV8sUyYmKFNbYl09blt3XSk7Zm9yKE49Zlt4XSxPPWZbeCsxXSx3PU47dzxPO3crKylpZihDW2I9Y1t3XV09PT1fKXtpZihTKXt2YXIgST12KFNbYl0sdVt3XSk7eShJLGcpP0NbYl09bnVsbDpTW2JdPUl9fWVsc2Ugai5wdXNoKGIpLFRbYl09XyxBJiYoQVtiXT11W3ddKTtpZihTJiZBKWZvcih3PUVbeF07dzxqLmxlbmd0aDspQ1tiPWpbd11dPT09Xz8oTVt3XT1TW2JdLHcrKyk6VFtiXT09PV8/KE1bd109QVtiXSx3KyspOmouc3BsaWNlKHcsMSl9cmV0dXJuIEVbZF09ai5sZW5ndGgsZS5jcmVhdGVTcGFyc2VNYXRyaXgoe3ZhbHVlczpNLGluZGV4OmoscHRyOkUsc2l6ZTpbaCxkXSxkYXRhdHlwZTptfSl9fSksSnQ9WyJ0eXBlZCIsIkRlbnNlTWF0cml4Il0sV3Q9T2JqZWN0KHMuYSkoImFsZ29yaXRobTEwIixKdCxmdW5jdGlvbihlKXt2YXIgTz1lLnR5cGVkLE09ZS5EZW5zZU1hdHJpeDtyZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9ZS5fdmFsdWVzLGE9ZS5faW5kZXgsbz1lLl9wdHIscz1lLl9zaXplLHU9ZS5fZGF0YXR5cGU7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gUGF0dGVybiBTcGFyc2UgTWF0cml4IGFuZCBTY2FsYXIgdmFsdWUiKTt2YXIgYyxmPXNbMF0sbD1zWzFdLHA9cjsic3RyaW5nIj09dHlwZW9mIHUmJihjPXUsdD1PLmNvbnZlcnQodCxjKSxwPU8uZmluZChyLFtjLGNdKSk7Zm9yKHZhciBtPVtdLGg9W10sZD1bXSx5PTA7eTxsO3krKyl7Zm9yKHZhciBnPXkrMSx2PW9beV0sYj1vW3krMV0seD12O3g8Yjt4Kyspe3ZhciB3PWFbeF07aFt3XT1pW3hdLGRbd109Z31mb3IodmFyIE49MDtOPGY7TisrKTA9PT15JiYobVtOXT1bXSksZFtOXT09PWc/bVtOXVt5XT1uP3AodCxoW05dKTpwKGhbTl0sdCk6bVtOXVt5XT10fXJldHVybiBuZXcgTSh7ZGF0YTptLHNpemU6W2YsbF0sZGF0YXR5cGU6Y30pfX0pLFl0PVsidHlwZWQiXSxYdD1PYmplY3Qocy5hKSgiYWxnb3JpdGhtMTMiLFl0LGZ1bmN0aW9uKGUpe3ZhciBoPWUudHlwZWQ7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXt2YXIgbixpPWUuX2RhdGEsYT1lLl9zaXplLG89ZS5fZGF0YXR5cGUscz10Ll9kYXRhLHU9dC5fc2l6ZSxjPXQuX2RhdGF0eXBlLGY9W107aWYoYS5sZW5ndGghPT11Lmxlbmd0aCl0aHJvdyBuZXcgei5hKGEubGVuZ3RoLHUubGVuZ3RoKTtmb3IodmFyIGw9MDtsPGEubGVuZ3RoO2wrKyl7aWYoYVtsXSE9PXVbbF0pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkRpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCIrYSsiKSBtdXN0IG1hdGNoIE1hdHJpeCBCICgiK3UrIikiKTtmW2xdPWFbbF19dmFyIHA9cjsic3RyaW5nIj09dHlwZW9mIG8mJm89PT1jJiYobj1vLHA9aC5maW5kKHIsW24sbl0pKTt2YXIgbT0wPGYubGVuZ3RoP2Z1bmN0aW9uIGUodCxyLG4saSxhLG8pe3ZhciBzPVtdO2lmKHI9PT1uLmxlbmd0aC0xKWZvcih2YXIgdT0wO3U8aTt1Kyspc1t1XT10KGFbdV0sb1t1XSk7ZWxzZSBmb3IodmFyIGM9MDtjPGk7YysrKXNbY109ZSh0LHIrMSxuLG5bcisxXSxhW2NdLG9bY10pO3JldHVybiBzfShwLDAsZixmWzBdLGkscyk6W107cmV0dXJuIGUuY3JlYXRlRGVuc2VNYXRyaXgoe2RhdGE6bSxzaXplOmYsZGF0YXR5cGU6bn0pfX0pLFF0PVsidHlwZWQiXSxLdD1PYmplY3Qocy5hKSgiYWxnb3JpdGhtMTQiLFF0LGZ1bmN0aW9uKGUpe3ZhciBmPWUudHlwZWQ7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpLGE9ZS5fZGF0YSxvPWUuX3NpemUscz1lLl9kYXRhdHlwZSx1PXI7InN0cmluZyI9PXR5cGVvZiBzJiYoaT1zLHQ9Zi5jb252ZXJ0KHQsaSksdT1mLmZpbmQocixbaSxpXSkpO3ZhciBjPTA8by5sZW5ndGg/ZnVuY3Rpb24gZSh0LHIsbixpLGEsbyxzKXt2YXIgdT1bXTtpZihyPT09bi5sZW5ndGgtMSlmb3IodmFyIGM9MDtjPGk7YysrKXVbY109cz90KG8sYVtjXSk6dChhW2NdLG8pO2Vsc2UgZm9yKHZhciBmPTA7ZjxpO2YrKyl1W2ZdPWUodCxyKzEsbixuW3IrMV0sYVtmXSxvLHMpO3JldHVybiB1fSh1LDAsbyxvWzBdLGEsdCxuKTpbXTtyZXR1cm4gZS5jcmVhdGVEZW5zZU1hdHJpeCh7ZGF0YTpjLHNpemU6T2JqZWN0KGFlLmEpKG8pLGRhdGF0eXBlOml9KX19KSxlcj1bInR5cGVkIiwibWF0cml4IiwiZXF1YWxTY2FsYXIiLCJCaWdOdW1iZXIiLCJEZW5zZU1hdHJpeCJdLHRyPU9iamVjdChzLmEpKCJnY2QiLGVyLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLm1hdHJpeCxuPWUuZXF1YWxTY2FsYXIsaT1lLkJpZ051bWJlcixhPWUuRGVuc2VNYXRyaXgsbz1HdCh7dHlwZWQ6dH0pLHM9VnQoe3R5cGVkOnQsZXF1YWxTY2FsYXI6bn0pLHU9V3Qoe3R5cGVkOnQsRGVuc2VNYXRyaXg6YX0pLGM9WHQoe3R5cGVkOnR9KSxmPUt0KHt0eXBlZDp0fSksbD10KCJnY2QiLHsibnVtYmVyLCBudW1iZXIiOml0LCJCaWdOdW1iZXIsIEJpZ051bWJlciI6ZnVuY3Rpb24oZSx0KXtpZighZS5pc0ludCgpfHwhdC5pc0ludCgpKXRocm93IG5ldyBFcnJvcigiUGFyYW1ldGVycyBpbiBmdW5jdGlvbiBnY2QgbXVzdCBiZSBpbnRlZ2VyIG51bWJlcnMiKTt2YXIgcj1uZXcgaSgwKTtmb3IoOyF0LmlzWmVybygpOyl7dmFyIG49ZS5tb2QodCk7ZT10LHQ9bn1yZXR1cm4gZS5sdChyKT9lLm5lZygpOmV9LCJGcmFjdGlvbiwgRnJhY3Rpb24iOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZ2NkKHQpfSwiU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMoZSx0LGwpfSwiU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyh0LGUsbCwhMCl9LCJEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBvKGUsdCxsLCExKX0sIkRlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhlLHQsbCl9LCJBcnJheSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwocihlKSxyKHQpKS52YWx1ZU9mKCl9LCJBcnJheSwgTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBsKHIoZSksdCl9LCJNYXRyaXgsIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBsKGUscih0KSl9LCJTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlciI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLHQsbCwhMSl9LCJEZW5zZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBmKGUsdCxsLCExKX0sIm51bWJlciB8IEJpZ051bWJlciwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiB1KHQsZSxsLCEwKX0sIm51bWJlciB8IEJpZ051bWJlciwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYodCxlLGwsITApfSwiQXJyYXksIG51bWJlciB8IEJpZ051bWJlciI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihyKGUpLHQsbCwhMSkudmFsdWVPZigpfSwibnVtYmVyIHwgQmlnTnVtYmVyLCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihyKHQpLGUsbCwhMCkudmFsdWVPZigpfSwiQXJyYXkgfCBNYXRyaXggfCBudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyLCAuLi5BcnJheSB8IE1hdHJpeCB8IG51bWJlciB8IEJpZ051bWJlciI6ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj1sKGUsdCksaT0wO2k8ci5sZW5ndGg7aSsrKW49bChuLHJbaV0pO3JldHVybiBufX0pO3JldHVybiBsfSkscnI9WyJ0eXBlZCIsImVxdWFsU2NhbGFyIl0sbnI9T2JqZWN0KHMuYSkoImFsZ29yaXRobTAyIixycixmdW5jdGlvbihlKXt2YXIgUz1lLnR5cGVkLEE9ZS5lcXVhbFNjYWxhcjtyZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9ZS5fZGF0YSxhPWUuX3NpemUsbz1lLl9kYXRhdHlwZSxzPXQuX3ZhbHVlcyx1PXQuX2luZGV4LGM9dC5fcHRyLGY9dC5fc2l6ZSxsPXQuX2RhdGF0eXBlO2lmKGEubGVuZ3RoIT09Zi5sZW5ndGgpdGhyb3cgbmV3IHouYShhLmxlbmd0aCxmLmxlbmd0aCk7aWYoYVswXSE9PWZbMF18fGFbMV0hPT1mWzFdKXRocm93IG5ldyBSYW5nZUVycm9yKCJEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBBICgiK2ErIikgbXVzdCBtYXRjaCBNYXRyaXggQiAoIitmKyIpIik7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gRGVuc2UgTWF0cml4IGFuZCBQYXR0ZXJuIFNwYXJzZSBNYXRyaXgiKTt2YXIgcCxtPWFbMF0saD1hWzFdLGQ9QSx5PTAsZz1yOyJzdHJpbmciPT10eXBlb2YgbyYmbz09PWwmJihwPW8sZD1TLmZpbmQoQSxbcCxwXSkseT1TLmNvbnZlcnQoMCxwKSxnPVMuZmluZChyLFtwLHBdKSk7Zm9yKHZhciB2PVtdLGI9W10seD1bXSx3PTA7dzxoO3crKyl7eFt3XT1iLmxlbmd0aDtmb3IodmFyIE49Y1t3XSxPPWNbdysxXSxNPU47TTxPO00rKyl7dmFyIGo9dVtNXSxFPW4/ZyhzW01dLGlbal1bd10pOmcoaVtqXVt3XSxzW01dKTtkKEUseSl8fChiLnB1c2goaiksdi5wdXNoKEUpKX19cmV0dXJuIHhbaF09Yi5sZW5ndGgsdC5jcmVhdGVTcGFyc2VNYXRyaXgoe3ZhbHVlczp2LGluZGV4OmIscHRyOngsc2l6ZTpbbSxoXSxkYXRhdHlwZTpwfSl9fSksaXI9WyJ0eXBlZCIsImVxdWFsU2NhbGFyIl0sYXI9T2JqZWN0KHMuYSkoImFsZ29yaXRobTA2IixpcixmdW5jdGlvbihlKXt2YXIgUz1lLnR5cGVkLEE9ZS5lcXVhbFNjYWxhcjtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUuX3ZhbHVlcyxpPWUuX3NpemUsYT1lLl9kYXRhdHlwZSxvPXQuX3ZhbHVlcyxzPXQuX3NpemUsdT10Ll9kYXRhdHlwZTtpZihpLmxlbmd0aCE9PXMubGVuZ3RoKXRocm93IG5ldyB6LmEoaS5sZW5ndGgscy5sZW5ndGgpO2lmKGlbMF0hPT1zWzBdfHxpWzFdIT09c1sxXSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoIitpKyIpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCIrcysiKSIpO3ZhciBjLGY9aVswXSxsPWlbMV0scD1BLG09MCxoPXI7InN0cmluZyI9PXR5cGVvZiBhJiZhPT09dSYmKGM9YSxwPVMuZmluZChBLFtjLGNdKSxtPVMuY29udmVydCgwLGMpLGg9Uy5maW5kKHIsW2MsY10pKTtmb3IodmFyIGQ9biYmbz9bXTp2b2lkIDAseT1bXSxnPVtdLHY9ZD9bXTp2b2lkIDAsYj1bXSx4PVtdLHc9MDt3PGw7dysrKXtnW3ddPXkubGVuZ3RoO3ZhciBOPXcrMTtpZihIKGUsdyxiLHYseCxOLHksaCksSCh0LHcsYix2LHgsTix5LGgpLHYpZm9yKHZhciBPPWdbd107Tzx5Lmxlbmd0aDspe3ZhciBNPXlbT107aWYoeFtNXT09PU4pe3ZhciBqPXZbTV07cChqLG0pP3kuc3BsaWNlKE8sMSk6KGQucHVzaChqKSxPKyspfWVsc2UgeS5zcGxpY2UoTywxKX1lbHNlIGZvcih2YXIgRT1nW3ddO0U8eS5sZW5ndGg7KXt4W3lbRV1dIT09Tj95LnNwbGljZShFLDEpOkUrK319cmV0dXJuIGdbbF09eS5sZW5ndGgsZS5jcmVhdGVTcGFyc2VNYXRyaXgoe3ZhbHVlczpkLGluZGV4OnkscHRyOmcsc2l6ZTpbZixsXSxkYXRhdHlwZTpjfSl9fSksb3I9WyJ0eXBlZCIsImVxdWFsU2NhbGFyIl0sc3I9T2JqZWN0KHMuYSkoImFsZ29yaXRobTExIixvcixmdW5jdGlvbihlKXt2YXIgTT1lLnR5cGVkLGo9ZS5lcXVhbFNjYWxhcjtyZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9ZS5fdmFsdWVzLGE9ZS5faW5kZXgsbz1lLl9wdHIscz1lLl9zaXplLHU9ZS5fZGF0YXR5cGU7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gUGF0dGVybiBTcGFyc2UgTWF0cml4IGFuZCBTY2FsYXIgdmFsdWUiKTt2YXIgYyxmPXNbMF0sbD1zWzFdLHA9aixtPTAsaD1yOyJzdHJpbmciPT10eXBlb2YgdSYmKGM9dSxwPU0uZmluZChqLFtjLGNdKSxtPU0uY29udmVydCgwLGMpLHQ9TS5jb252ZXJ0KHQsYyksaD1NLmZpbmQocixbYyxjXSkpO2Zvcih2YXIgZD1bXSx5PVtdLGc9W10sdj0wO3Y8bDt2Kyspe2dbdl09eS5sZW5ndGg7Zm9yKHZhciBiPW9bdl0seD1vW3YrMV0sdz1iO3c8eDt3Kyspe3ZhciBOPWFbd10sTz1uP2godCxpW3ddKTpoKGlbd10sdCk7cChPLG0pfHwoeS5wdXNoKE4pLGQucHVzaChPKSl9fXJldHVybiBnW2xdPXkubGVuZ3RoLGUuY3JlYXRlU3BhcnNlTWF0cml4KHt2YWx1ZXM6ZCxpbmRleDp5LHB0cjpnLHNpemU6W2YsbF0sZGF0YXR5cGU6Y30pfX0pLHVyPVsidHlwZWQiLCJtYXRyaXgiLCJlcXVhbFNjYWxhciJdLGNyPU9iamVjdChzLmEpKCJsY20iLHVyLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLm1hdHJpeCxuPWUuZXF1YWxTY2FsYXIsaT1ucih7dHlwZWQ6dCxlcXVhbFNjYWxhcjpufSksYT1hcih7dHlwZWQ6dCxlcXVhbFNjYWxhcjpufSksbz1zcih7dHlwZWQ6dCxlcXVhbFNjYWxhcjpufSkscz1YdCh7dHlwZWQ6dH0pLHU9S3Qoe3R5cGVkOnR9KSxjPXQoImxjbSIseyJudW1iZXIsIG51bWJlciI6YXQsIkJpZ051bWJlciwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe2lmKCFlLmlzSW50KCl8fCF0LmlzSW50KCkpdGhyb3cgbmV3IEVycm9yKCJQYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIGxjbSBtdXN0IGJlIGludGVnZXIgbnVtYmVycyIpO2lmKGUuaXNaZXJvKCkpcmV0dXJuIGU7aWYodC5pc1plcm8oKSlyZXR1cm4gdDt2YXIgcj1lLnRpbWVzKHQpO2Zvcig7IXQuaXNaZXJvKCk7KXt2YXIgbj10O3Q9ZS5tb2QobiksZT1ufXJldHVybiByLmRpdihlKS5hYnMoKX0sIkZyYWN0aW9uLCBGcmFjdGlvbiI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5sY20odCl9LCJTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQsYyl9LCJTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBpKHQsZSxjLCEwKX0sIkRlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoZSx0LGMsITEpfSwiRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBzKGUsdCxjKX0sIkFycmF5LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhyKGUpLHIodCkpLnZhbHVlT2YoKX0sIkFycmF5LCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMocihlKSx0KX0sIk1hdHJpeCwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMoZSxyKHQpKX0sIlNwYXJzZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBvKGUsdCxjLCExKX0sIkRlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZSx0LGMsITEpfSwibnVtYmVyIHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8odCxlLGMsITApfSwibnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdSh0LGUsYywhMCl9LCJBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiB1KHIoZSksdCxjLCExKS52YWx1ZU9mKCl9LCJudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiB1KHIodCksZSxjLCEwKS52YWx1ZU9mKCl9LCJBcnJheSB8IE1hdHJpeCB8IG51bWJlciB8IEJpZ051bWJlciwgQXJyYXkgfCBNYXRyaXggfCBudW1iZXIgfCBCaWdOdW1iZXIsIC4uLkFycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPWMoZSx0KSxpPTA7aTxyLmxlbmd0aDtpKyspbj1jKG4scltpXSk7cmV0dXJuIG59fSk7cmV0dXJuIGN9KSxmcj1bInR5cGVkIiwiY29uZmlnIiwiQ29tcGxleCJdLGxyPU9iamVjdChzLmEpKCJsb2cxMCIsZnIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuY29uZmlnLG49ZS5Db21wbGV4LGk9dCgibG9nMTAiLHtudW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWV8fHIucHJlZGljdGFibGU/c3QoZSk6bmV3IG4oZSwwKS5sb2coKS5kaXYoTWF0aC5MTjEwKX0sQ29tcGxleDpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG4oZSkubG9nKCkuZGl2KE1hdGguTE4xMCl9LEJpZ051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4hZS5pc05lZ2F0aXZlKCl8fHIucHJlZGljdGFibGU/ZS5sb2coKTpuZXcgbihlLnRvTnVtYmVyKCksMCkubG9nKCkuZGl2KE1hdGguTE4xMCl9LCJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7cmV0dXJuIG9lKGUsaSl9fSk7cmV0dXJuIGl9KSxwcj1bInR5cGVkIiwiY29uZmlnIiwiQ29tcGxleCJdLG1yPU9iamVjdChzLmEpKCJsb2cyIixwcixmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5jb25maWcsbj1lLkNvbXBsZXgsaT10KCJsb2cyIix7bnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiAwPD1lfHxyLnByZWRpY3RhYmxlP3V0KGUpOmEobmV3IG4oZSwwKSl9LENvbXBsZXg6YSxCaWdOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIWUuaXNOZWdhdGl2ZSgpfHxyLnByZWRpY3RhYmxlP2UubG9nKDIpOmEobmV3IG4oZS50b051bWJlcigpLDApKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSxpKX19KTtmdW5jdGlvbiBhKGUpe3ZhciB0PU1hdGguc3FydChlLnJlKmUucmUrZS5pbSplLmltKTtyZXR1cm4gbmV3IG4oTWF0aC5sb2cyP01hdGgubG9nMih0KTpNYXRoLmxvZyh0KS9NYXRoLkxOMixNYXRoLmF0YW4yKGUuaW0sZS5yZSkvTWF0aC5MTjIpfXJldHVybiBpfSksaHI9WyJ0eXBlZCJdLGRyPU9iamVjdChzLmEpKCJhbGdvcml0aG0wMyIsaHIsZnVuY3Rpb24oZSl7dmFyIEE9ZS50eXBlZDtyZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9ZS5fZGF0YSxhPWUuX3NpemUsbz1lLl9kYXRhdHlwZSxzPXQuX3ZhbHVlcyx1PXQuX2luZGV4LGM9dC5fcHRyLGY9dC5fc2l6ZSxsPXQuX2RhdGF0eXBlO2lmKGEubGVuZ3RoIT09Zi5sZW5ndGgpdGhyb3cgbmV3IHouYShhLmxlbmd0aCxmLmxlbmd0aCk7aWYoYVswXSE9PWZbMF18fGFbMV0hPT1mWzFdKXRocm93IG5ldyBSYW5nZUVycm9yKCJEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBBICgiK2ErIikgbXVzdCBtYXRjaCBNYXRyaXggQiAoIitmKyIpIik7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gRGVuc2UgTWF0cml4IGFuZCBQYXR0ZXJuIFNwYXJzZSBNYXRyaXgiKTt2YXIgcCxtPWFbMF0saD1hWzFdLGQ9MCx5PXI7InN0cmluZyI9PXR5cGVvZiBvJiZvPT09bCYmKHA9byxkPUEuY29udmVydCgwLHApLHk9QS5maW5kKHIsW3AscF0pKTtmb3IodmFyIGc9W10sdj0wO3Y8bTt2KyspZ1t2XT1bXTtmb3IodmFyIGI9W10seD1bXSx3PTA7dzxoO3crKyl7Zm9yKHZhciBOPXcrMSxPPWNbd10sTT1jW3crMV0saj1PO2o8TTtqKyspe3ZhciBFPXVbal07YltFXT1uP3koc1tqXSxpW0VdW3ddKTp5KGlbRV1bd10sc1tqXSkseFtFXT1OfWZvcih2YXIgUz0wO1M8bTtTKyspeFtTXT09PU4/Z1tTXVt3XT1iW1NdOmdbU11bd109bj95KGQsaVtTXVt3XSk6eShpW1NdW3ddLGQpfXJldHVybiBlLmNyZWF0ZURlbnNlTWF0cml4KHtkYXRhOmcsc2l6ZTpbbSxoXSxkYXRhdHlwZTpwfSl9fSkseXI9WyJ0eXBlZCIsImVxdWFsU2NhbGFyIl0sZ3I9T2JqZWN0KHMuYSkoImFsZ29yaXRobTA1Iix5cixmdW5jdGlvbihlKXt2YXIgQj1lLnR5cGVkLGs9ZS5lcXVhbFNjYWxhcjtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUuX3ZhbHVlcyxpPWUuX2luZGV4LGE9ZS5fcHRyLG89ZS5fc2l6ZSxzPWUuX2RhdGF0eXBlLHU9dC5fdmFsdWVzLGM9dC5faW5kZXgsZj10Ll9wdHIsbD10Ll9zaXplLHA9dC5fZGF0YXR5cGU7aWYoby5sZW5ndGghPT1sLmxlbmd0aCl0aHJvdyBuZXcgei5hKG8ubGVuZ3RoLGwubGVuZ3RoKTtpZihvWzBdIT09bFswXXx8b1sxXSE9PWxbMV0pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkRpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCIrbysiKSBtdXN0IG1hdGNoIE1hdHJpeCBCICgiK2wrIikiKTt2YXIgbSxoPW9bMF0sZD1vWzFdLHk9ayxnPTAsdj1yOyJzdHJpbmciPT10eXBlb2YgcyYmcz09PXAmJihtPXMseT1CLmZpbmQoayxbbSxtXSksZz1CLmNvbnZlcnQoMCxtKSx2PUIuZmluZChyLFttLG1dKSk7dmFyIGIseCx3LE4sTz1uJiZ1P1tdOnZvaWQgMCxNPVtdLGo9W10sRT1PP1tdOnZvaWQgMCxTPU8/W106dm9pZCAwLEE9W10sQz1bXTtmb3IoeD0wO3g8ZDt4Kyspe2pbeF09TS5sZW5ndGg7dmFyIFQ9eCsxO2Zvcih3PWFbeF0sTj1hW3grMV07dzxOO3crKyliPWlbd10sTS5wdXNoKGIpLEFbYl09VCxFJiYoRVtiXT1uW3ddKTtmb3Iodz1mW3hdLE49Zlt4KzFdO3c8Tjt3KyspQVtiPWNbd11dIT09VCYmTS5wdXNoKGIpLENbYl09VCxTJiYoU1tiXT11W3ddKTtpZihPKWZvcih3PWpbeF07dzxNLmxlbmd0aDspe3ZhciBfPUFbYj1NW3ddXSxJPUNbYl07aWYoXz09PVR8fEk9PT1UKXt2YXIgcT12KF89PT1UP0VbYl06ZyxJPT09VD9TW2JdOmcpO3kocSxnKT9NLnNwbGljZSh3LDEpOihPLnB1c2gocSksdysrKX19fXJldHVybiBqW2RdPU0ubGVuZ3RoLGUuY3JlYXRlU3BhcnNlTWF0cml4KHt2YWx1ZXM6TyxpbmRleDpNLHB0cjpqLHNpemU6W2gsZF0sZGF0YXR5cGU6bX0pfX0pLHZyPVsidHlwZWQiLCJEZW5zZU1hdHJpeCJdLGJyPU9iamVjdChzLmEpKCJhbGdvcml0aG0xMiIsdnIsZnVuY3Rpb24oZSl7dmFyIE89ZS50eXBlZCxNPWUuRGVuc2VNYXRyaXg7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPWUuX3ZhbHVlcyxhPWUuX2luZGV4LG89ZS5fcHRyLHM9ZS5fc2l6ZSx1PWUuX2RhdGF0eXBlO2lmKCFpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHBlcmZvcm0gb3BlcmF0aW9uIG9uIFBhdHRlcm4gU3BhcnNlIE1hdHJpeCBhbmQgU2NhbGFyIHZhbHVlIik7dmFyIGMsZj1zWzBdLGw9c1sxXSxwPXI7InN0cmluZyI9PXR5cGVvZiB1JiYoYz11LHQ9Ty5jb252ZXJ0KHQsYykscD1PLmZpbmQocixbYyxjXSkpO2Zvcih2YXIgbT1bXSxoPVtdLGQ9W10seT0wO3k8bDt5Kyspe2Zvcih2YXIgZz15KzEsdj1vW3ldLGI9b1t5KzFdLHg9djt4PGI7eCsrKXt2YXIgdz1hW3hdO2hbd109aVt4XSxkW3ddPWd9Zm9yKHZhciBOPTA7TjxmO04rKykwPT09eSYmKG1bTl09W10pLGRbTl09PT1nP21bTl1beV09bj9wKHQsaFtOXSk6cChoW05dLHQpOm1bTl1beV09bj9wKHQsMCk6cCgwLHQpfXJldHVybiBuZXcgTSh7ZGF0YTptLHNpemU6W2YsbF0sZGF0YXR5cGU6Y30pfX0pLHhyPVsidHlwZWQiLCJtYXRyaXgiLCJlcXVhbFNjYWxhciIsIkRlbnNlTWF0cml4Il0sd3I9T2JqZWN0KHMuYSkoIm1vZCIseHIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUubWF0cml4LG49ZS5lcXVhbFNjYWxhcixpPWUuRGVuc2VNYXRyaXgsYT1ucih7dHlwZWQ6dCxlcXVhbFNjYWxhcjpufSksbz1kcih7dHlwZWQ6dH0pLHM9Z3Ioe3R5cGVkOnQsZXF1YWxTY2FsYXI6bn0pLHU9c3Ioe3R5cGVkOnQsZXF1YWxTY2FsYXI6bn0pLGM9YnIoe3R5cGVkOnQsRGVuc2VNYXRyaXg6aX0pLGY9WHQoe3R5cGVkOnR9KSxsPUt0KHt0eXBlZDp0fSkscD10KCJtb2QiLHsibnVtYmVyLCBudW1iZXIiOmN0LCJCaWdOdW1iZXIsIEJpZ051bWJlciI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5pc1plcm8oKT9lOmUubW9kKHQpfSwiRnJhY3Rpb24sIEZyYWN0aW9uIjpmdW5jdGlvbihlLHQpe3JldHVybiBlLm1vZCh0KX0sIlNwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBzKGUsdCxwLCExKX0sIlNwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEodCxlLHAsITApfSwiRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhlLHQscCwhMSl9LCJEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYoZSx0LHApfSwiQXJyYXksIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBwKHIoZSkscih0KSkudmFsdWVPZigpfSwiQXJyYXksIE1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChyKGUpLHQpfSwiTWF0cml4LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChlLHIodCkpfSwiU3BhcnNlTWF0cml4LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZSx0LHAsITEpfSwiRGVuc2VNYXRyaXgsIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbChlLHQscCwhMSl9LCJhbnksIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyh0LGUscCwhMCl9LCJhbnksIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBsKHQsZSxwLCEwKX0sIkFycmF5LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwocihlKSx0LHAsITEpLnZhbHVlT2YoKX0sImFueSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwocih0KSxlLHAsITApLnZhbHVlT2YoKX19KTtyZXR1cm4gcH0pLE5yPVsidHlwZWQiXSxPcj1PYmplY3Qocy5hKSgibXVsdGlwbHlTY2FsYXIiLE5yLGZ1bmN0aW9uKGUpe3ZhciBuPSgwLGUudHlwZWQpKCJtdWx0aXBseVNjYWxhciIseyJudW1iZXIsIG51bWJlciI6WWUsIkNvbXBsZXgsIENvbXBsZXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubXVsKHQpfSwiQmlnTnVtYmVyLCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudGltZXModCl9LCJGcmFjdGlvbiwgRnJhY3Rpb24iOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubXVsKHQpfSwibnVtYmVyIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIgfCBDb21wbGV4LCBVbml0IjpmdW5jdGlvbihlLHQpe3ZhciByPXQuY2xvbmUoKTtyZXR1cm4gci52YWx1ZT1udWxsPT09ci52YWx1ZT9yLl9ub3JtYWxpemUoZSk6bihyLnZhbHVlLGUpLHJ9LCJVbml0LCBudW1iZXIgfCBGcmFjdGlvbiB8IEJpZ051bWJlciB8IENvbXBsZXgiOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5jbG9uZSgpO3JldHVybiByLnZhbHVlPW51bGw9PT1yLnZhbHVlP3IuX25vcm1hbGl6ZSh0KTpuKHIudmFsdWUsdCkscn0sIlVuaXQsIFVuaXQiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubXVsdGlwbHkodCl9fSk7cmV0dXJuIG59KSxNcj0ibXVsdGlwbHkiLGpyPVsidHlwZWQiLCJtYXRyaXgiLCJhZGRTY2FsYXIiLCJtdWx0aXBseVNjYWxhciIsImVxdWFsU2NhbGFyIl0sRXI9T2JqZWN0KHMuYSkoTXIsanIsZnVuY3Rpb24oZSl7dmFyIHo9ZS50eXBlZCxuPWUubWF0cml4LEQ9ZS5hZGRTY2FsYXIsUj1lLm11bHRpcGx5U2NhbGFyLEI9ZS5lcXVhbFNjYWxhcixyPXNyKHt0eXBlZDp6LGVxdWFsU2NhbGFyOkJ9KSxpPUt0KHt0eXBlZDp6fSksYT16KE1yLE9iamVjdChhZS5lKSh7IkFycmF5LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtvKE9iamVjdChJLmEpKGUpLE9iamVjdChJLmEpKHQpKTt2YXIgcj1hKG4oZSksbih0KSk7cmV0dXJuIE9iamVjdChpZS52KShyKT9yLnZhbHVlT2YoKTpyfSwiTWF0cml4LCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5zaXplKCksbj10LnNpemUoKTtyZXR1cm4gbyhyLG4pLDE9PT1yLmxlbmd0aD8xPT09bi5sZW5ndGg/ZnVuY3Rpb24oZSx0LHIpe2lmKDA9PT1yKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG11bHRpcGx5IHR3byBlbXB0eSB2ZWN0b3JzIik7dmFyIG4saT1lLl9kYXRhLGE9ZS5fZGF0YXR5cGUsbz10Ll9kYXRhLHM9dC5fZGF0YXR5cGUsdT1ELGM9UjthJiZzJiZhPT09cyYmInN0cmluZyI9PXR5cGVvZiBhJiYobj1hLHU9ei5maW5kKEQsW24sbl0pLGM9ei5maW5kKFIsW24sbl0pKTtmb3IodmFyIGY9YyhpWzBdLG9bMF0pLGw9MTtsPHI7bCsrKWY9dShmLGMoaVtsXSxvW2xdKSk7cmV0dXJuIGZ9KGUsdCxyWzBdKTpmdW5jdGlvbihlLHQpe2lmKCJkZW5zZSI9PT10LnN0b3JhZ2UoKSlyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgcixuPWUuX2RhdGEsaT1lLl9zaXplLGE9ZS5fZGF0YXR5cGUsbz10Ll9kYXRhLHM9dC5fc2l6ZSx1PXQuX2RhdGF0eXBlLGM9aVswXSxmPXNbMV0sbD1ELHA9UjthJiZ1JiZhPT09dSYmInN0cmluZyI9PXR5cGVvZiBhJiYocj1hLGw9ei5maW5kKEQsW3Iscl0pLHA9ei5maW5kKFIsW3Iscl0pKTtmb3IodmFyIG09W10saD0wO2g8ZjtoKyspe2Zvcih2YXIgZD1wKG5bMF0sb1swXVtoXSkseT0xO3k8Yzt5KyspZD1sKGQscChuW3ldLG9beV1baF0pKTttW2hdPWR9cmV0dXJuIGUuY3JlYXRlRGVuc2VNYXRyaXgoe2RhdGE6bSxzaXplOltmXSxkYXRhdHlwZTpyfSl9KGUsdCk7dGhyb3cgbmV3IEVycm9yKCJTdXBwb3J0IGZvciBTcGFyc2VNYXRyaXggbm90IGltcGxlbWVudGVkIil9KGUsdCk6KDE9PT1uLmxlbmd0aD9zOnUpKGUsdCl9LCJNYXRyaXgsIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsbih0KSl9LCJBcnJheSwgTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBhKG4oZSx0LnN0b3JhZ2UoKSksdCl9LCJTcGFyc2VNYXRyaXgsIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcihlLHQsUiwhMSl9LCJEZW5zZU1hdHJpeCwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiBpKGUsdCxSLCExKX0sImFueSwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiByKHQsZSxSLCEwKX0sImFueSwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkodCxlLFIsITApfSwiQXJyYXksIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShuKGUpLHQsUiwhMSkudmFsdWVPZigpfSwiYW55LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShuKHQpLGUsUiwhMCkudmFsdWVPZigpfSwiYW55LCBhbnkiOlIsImFueSwgYW55LCAuLi5hbnkiOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49YShlLHQpLGk9MDtpPHIubGVuZ3RoO2krKyluPWEobixyW2ldKTtyZXR1cm4gbn19LFIuc2lnbmF0dXJlcykpO2Z1bmN0aW9uIG8oZSx0KXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMTpzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTppZihlWzBdIT09dFswXSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRGltZW5zaW9uIG1pc21hdGNoIGluIG11bHRpcGxpY2F0aW9uLiBWZWN0b3JzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGgiKTticmVhaztjYXNlIDI6aWYoZVswXSE9PXRbMF0pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkRpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gVmVjdG9yIGxlbmd0aCAoIitlWzBdKyIpIG11c3QgbWF0Y2ggTWF0cml4IHJvd3MgKCIrdFswXSsiKSIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJDYW4gb25seSBtdWx0aXBseSBhIDEgb3IgMiBkaW1lbnNpb25hbCBtYXRyaXggKE1hdHJpeCBCIGhhcyAiK3QubGVuZ3RoKyIgZGltZW5zaW9ucykiKX1icmVhaztjYXNlIDI6c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6aWYoZVsxXSE9PXRbMF0pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkRpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gTWF0cml4IGNvbHVtbnMgKCIrZVsxXSsiKSBtdXN0IG1hdGNoIFZlY3RvciBsZW5ndGggKCIrdFswXSsiKSIpO2JyZWFrO2Nhc2UgMjppZihlWzFdIT09dFswXSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRGltZW5zaW9uIG1pc21hdGNoIGluIG11bHRpcGxpY2F0aW9uLiBNYXRyaXggQSBjb2x1bW5zICgiK2VbMV0rIikgbXVzdCBtYXRjaCBNYXRyaXggQiByb3dzICgiK3RbMF0rIikiKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQ2FuIG9ubHkgbXVsdGlwbHkgYSAxIG9yIDIgZGltZW5zaW9uYWwgbWF0cml4IChNYXRyaXggQiBoYXMgIit0Lmxlbmd0aCsiIGRpbWVuc2lvbnMpIil9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkNhbiBvbmx5IG11bHRpcGx5IGEgMSBvciAyIGRpbWVuc2lvbmFsIG1hdHJpeCAoTWF0cml4IEEgaGFzICIrZS5sZW5ndGgrIiBkaW1lbnNpb25zKSIpfX12YXIgcz16KCJfbXVsdGlwbHlNYXRyaXhWZWN0b3IiLHsiRGVuc2VNYXRyaXgsIGFueSI6ZnVuY3Rpb24oZSx0KXt2YXIgcixuPWUuX2RhdGEsaT1lLl9zaXplLGE9ZS5fZGF0YXR5cGUsbz10Ll9kYXRhLHM9dC5fZGF0YXR5cGUsdT1pWzBdLGM9aVsxXSxmPUQsbD1SO2EmJnMmJmE9PT1zJiYic3RyaW5nIj09dHlwZW9mIGEmJihyPWEsZj16LmZpbmQoRCxbcixyXSksbD16LmZpbmQoUixbcixyXSkpO2Zvcih2YXIgcD1bXSxtPTA7bTx1O20rKyl7Zm9yKHZhciBoPW5bbV0sZD1sKGhbMF0sb1swXSkseT0xO3k8Yzt5KyspZD1mKGQsbChoW3ldLG9beV0pKTtwW21dPWR9cmV0dXJuIGUuY3JlYXRlRGVuc2VNYXRyaXgoe2RhdGE6cCxzaXplOlt1XSxkYXRhdHlwZTpyfSl9LCJTcGFyc2VNYXRyaXgsIGFueSI6ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLl92YWx1ZXMsbj1lLl9pbmRleCxpPWUuX3B0cixhPWUuX2RhdGF0eXBlO2lmKCFyKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG11bHRpcGx5IFBhdHRlcm4gb25seSBNYXRyaXggdGltZXMgRGVuc2UgTWF0cml4Iik7dmFyIG8scz10Ll9kYXRhLHU9dC5fZGF0YXR5cGUsYz1lLl9zaXplWzBdLGY9dC5fc2l6ZVswXSxsPVtdLHA9W10sbT1bXSxoPUQsZD1SLHk9QixnPTA7YSYmdSYmYT09PXUmJiJzdHJpbmciPT10eXBlb2YgYSYmKG89YSxoPXouZmluZChELFtvLG9dKSxkPXouZmluZChSLFtvLG9dKSx5PXouZmluZChCLFtvLG9dKSxnPXouY29udmVydCgwLG8pKTtmb3IodmFyIHY9W10sYj1bXSx4PW1bMF09MDt4PGY7eCsrKXt2YXIgdz1zW3hdO2lmKCF5KHcsZykpZm9yKHZhciBOPWlbeF0sTz1pW3grMV0sTT1OO008TztNKyspe3ZhciBqPW5bTV07YltqXT92W2pdPWgodltqXSxkKHcscltNXSkpOihiW2pdPSEwLHAucHVzaChqKSx2W2pdPWQodyxyW01dKSl9fWZvcih2YXIgRT1wLmxlbmd0aCxTPTA7UzxFO1MrKyl7dmFyIEE9cFtTXTtsW1NdPXZbQV19cmV0dXJuIG1bMV09cC5sZW5ndGgsZS5jcmVhdGVTcGFyc2VNYXRyaXgoe3ZhbHVlczpsLGluZGV4OnAscHRyOm0sc2l6ZTpbYywxXSxkYXRhdHlwZTpvfSl9fSksdT16KCJfbXVsdGlwbHlNYXRyaXhNYXRyaXgiLHsiRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3ZhciByLG49ZS5fZGF0YSxpPWUuX3NpemUsYT1lLl9kYXRhdHlwZSxvPXQuX2RhdGEscz10Ll9zaXplLHU9dC5fZGF0YXR5cGUsYz1pWzBdLGY9aVsxXSxsPXNbMV0scD1ELG09UjthJiZ1JiZhPT09dSYmInN0cmluZyI9PXR5cGVvZiBhJiYocj1hLHA9ei5maW5kKEQsW3Iscl0pLG09ei5maW5kKFIsW3Iscl0pKTtmb3IodmFyIGg9W10sZD0wO2Q8YztkKyspe3ZhciB5PW5bZF07aFtkXT1bXTtmb3IodmFyIGc9MDtnPGw7ZysrKXtmb3IodmFyIHY9bSh5WzBdLG9bMF1bZ10pLGI9MTtiPGY7YisrKXY9cCh2LG0oeVtiXSxvW2JdW2ddKSk7aFtkXVtnXT12fX1yZXR1cm4gZS5jcmVhdGVEZW5zZU1hdHJpeCh7ZGF0YTpoLHNpemU6W2MsbF0sZGF0YXR5cGU6cn0pfSwiRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLl9kYXRhLG49ZS5fc2l6ZSxpPWUuX2RhdGF0eXBlLGE9dC5fdmFsdWVzLG89dC5faW5kZXgscz10Ll9wdHIsdT10Ll9zaXplLGM9dC5fZGF0YXR5cGU7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbXVsdGlwbHkgRGVuc2UgTWF0cml4IHRpbWVzIFBhdHRlcm4gb25seSBNYXRyaXgiKTt2YXIgZixsPW5bMF0scD11WzFdLG09RCxoPVIsZD1CLHk9MDtpJiZjJiZpPT09YyYmInN0cmluZyI9PXR5cGVvZiBpJiYoZj1pLG09ei5maW5kKEQsW2YsZl0pLGg9ei5maW5kKFIsW2YsZl0pLGQ9ei5maW5kKEIsW2YsZl0pLHk9ei5jb252ZXJ0KDAsZikpO2Zvcih2YXIgZz1bXSx2PVtdLGI9W10seD10LmNyZWF0ZVNwYXJzZU1hdHJpeCh7dmFsdWVzOmcsaW5kZXg6dixwdHI6YixzaXplOltsLHBdLGRhdGF0eXBlOmZ9KSx3PTA7dzxwO3crKyl7Ylt3XT12Lmxlbmd0aDt2YXIgTj1zW3ddLE89c1t3KzFdO2lmKE48Tylmb3IodmFyIE09MCxqPTA7ajxsO2orKyl7Zm9yKHZhciBFPWorMSxTPXZvaWQgMCxBPU47QTxPO0ErKyl7dmFyIEM9b1tBXTtNIT09RT8oUz1oKHJbal1bQ10sYVtBXSksTT1FKTpTPW0oUyxoKHJbal1bQ10sYVtBXSkpfU0hPT1FfHxkKFMseSl8fCh2LnB1c2goaiksZy5wdXNoKFMpKX19cmV0dXJuIGJbcF09di5sZW5ndGgseH0sIlNwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fdmFsdWVzLG49ZS5faW5kZXgsaT1lLl9wdHIsYT1lLl9kYXRhdHlwZTtpZighcil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBtdWx0aXBseSBQYXR0ZXJuIG9ubHkgTWF0cml4IHRpbWVzIERlbnNlIE1hdHJpeCIpO3ZhciBvLHM9dC5fZGF0YSx1PXQuX2RhdGF0eXBlLGM9ZS5fc2l6ZVswXSxmPXQuX3NpemVbMF0sbD10Ll9zaXplWzFdLHA9RCxtPVIsaD1CLGQ9MDthJiZ1JiZhPT09dSYmInN0cmluZyI9PXR5cGVvZiBhJiYobz1hLHA9ei5maW5kKEQsW28sb10pLG09ei5maW5kKFIsW28sb10pLGg9ei5maW5kKEIsW28sb10pLGQ9ei5jb252ZXJ0KDAsbykpO2Zvcih2YXIgeT1bXSxnPVtdLHY9W10sYj1lLmNyZWF0ZVNwYXJzZU1hdHJpeCh7dmFsdWVzOnksaW5kZXg6ZyxwdHI6dixzaXplOltjLGxdLGRhdGF0eXBlOm99KSx4PVtdLHc9W10sTj0wO048bDtOKyspe3ZbTl09Zy5sZW5ndGg7Zm9yKHZhciBPPU4rMSxNPTA7TTxmO00rKyl7dmFyIGo9c1tNXVtOXTtpZighaChqLGQpKWZvcih2YXIgRT1pW01dLFM9aVtNKzFdLEE9RTtBPFM7QSsrKXt2YXIgQz1uW0FdO3dbQ10hPT1PPyh3W0NdPU8sZy5wdXNoKEMpLHhbQ109bShqLHJbQV0pKTp4W0NdPXAoeFtDXSxtKGoscltBXSkpfX1mb3IodmFyIFQ9dltOXSxfPWcubGVuZ3RoLEk9VDtJPF87SSsrKXt2YXIgcT1nW0ldO3lbSV09eFtxXX19cmV0dXJuIHZbbF09Zy5sZW5ndGgsYn0sIlNwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3ZhciByLG49ZS5fdmFsdWVzLGk9ZS5faW5kZXgsYT1lLl9wdHIsbz1lLl9kYXRhdHlwZSxzPXQuX3ZhbHVlcyx1PXQuX2luZGV4LGM9dC5fcHRyLGY9dC5fZGF0YXR5cGUsbD1lLl9zaXplWzBdLHA9dC5fc2l6ZVsxXSxtPW4mJnMsaD1ELGQ9UjtvJiZmJiZvPT09ZiYmInN0cmluZyI9PXR5cGVvZiBvJiYocj1vLGg9ei5maW5kKEQsW3Iscl0pLGQ9ei5maW5kKFIsW3Iscl0pKTtmb3IodmFyIHksZyx2LGIseCx3LE4sTyxNPW0/W106dm9pZCAwLGo9W10sRT1bXSxTPWUuY3JlYXRlU3BhcnNlTWF0cml4KHt2YWx1ZXM6TSxpbmRleDpqLHB0cjpFLHNpemU6W2wscF0sZGF0YXR5cGU6cn0pLEE9bT9bXTp2b2lkIDAsQz1bXSxUPTA7VDxwO1QrKyl7RVtUXT1qLmxlbmd0aDt2YXIgXz1UKzE7Zm9yKHg9Y1tUXSx3PWNbVCsxXSxiPXg7Yjx3O2IrKylpZihPPXVbYl0sbSlmb3IoZz1hW09dLHY9YVtPKzFdLHk9Zzt5PHY7eSsrKU49aVt5XSxDW05dIT09Xz8oQ1tOXT1fLGoucHVzaChOKSxBW05dPWQoc1tiXSxuW3ldKSk6QVtOXT1oKEFbTl0sZChzW2JdLG5beV0pKTtlbHNlIGZvcihnPWFbT10sdj1hW08rMV0seT1nO3k8djt5KyspTj1pW3ldLENbTl0hPT1fJiYoQ1tOXT1fLGoucHVzaChOKSk7aWYobSlmb3IodmFyIEk9RVtUXSxxPWoubGVuZ3RoLEI9STtCPHE7QisrKXt2YXIgaz1qW0JdO01bQl09QVtrXX19cmV0dXJuIEVbcF09ai5sZW5ndGgsU319KTtyZXR1cm4gYX0pLFNyPSJudGhSb290IixBcj1bInR5cGVkIiwibWF0cml4IiwiZXF1YWxTY2FsYXIiLCJCaWdOdW1iZXIiXSxDcj1PYmplY3Qocy5hKShTcixBcixmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5tYXRyaXgsbj1lLmVxdWFsU2NhbGFyLHU9ZS5CaWdOdW1iZXIsaT1HdCh7dHlwZWQ6dH0pLGE9bnIoe3R5cGVkOnQsZXF1YWxTY2FsYXI6bn0pLG89YXIoe3R5cGVkOnQsZXF1YWxTY2FsYXI6bn0pLHM9c3Ioe3R5cGVkOnQsZXF1YWxTY2FsYXI6bn0pLGM9WHQoe3R5cGVkOnR9KSxmPUt0KHt0eXBlZDp0fSksbD0iQ29tcGxleCBudW1iZXIgbm90IHN1cHBvcnRlZCBpbiBmdW5jdGlvbiBudGhSb290LiBVc2UgbnRoUm9vdHMgaW5zdGVhZC4iLHA9dChTcix7bnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBmdChlLDIpfSwibnVtYmVyLCBudW1iZXIiOmZ0LEJpZ051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gbShlLG5ldyB1KDIpKX0sQ29tcGxleDpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihsKX0sIkNvbXBsZXgsIG51bWJlciI6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IobCl9LCJCaWdOdW1iZXIsIEJpZ051bWJlciI6bSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBwKGUsMil9LCJTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtpZigxPT09dC5kZW5zaXR5KCkpcmV0dXJuIG8oZSx0LHApO3Rocm93IG5ldyBFcnJvcigiUm9vdCBtdXN0IGJlIG5vbi16ZXJvIil9LCJTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBhKHQsZSxwLCEwKX0sIkRlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7aWYoMT09PXQuZGVuc2l0eSgpKXJldHVybiBpKGUsdCxwLCExKTt0aHJvdyBuZXcgRXJyb3IoIlJvb3QgbXVzdCBiZSBub24temVybyIpfSwiRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBjKGUsdCxwKX0sIkFycmF5LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChyKGUpLHIodCkpLnZhbHVlT2YoKX0sIkFycmF5LCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAocihlKSx0KX0sIk1hdHJpeCwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAoZSxyKHQpKX0sIlNwYXJzZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBzKGUsdCxwLCExKX0sIkRlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYoZSx0LHAsITEpfSwibnVtYmVyIHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7aWYoMT09PXQuZGVuc2l0eSgpKXJldHVybiBzKHQsZSxwLCEwKTt0aHJvdyBuZXcgRXJyb3IoIlJvb3QgbXVzdCBiZSBub24temVybyIpfSwibnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZih0LGUscCwhMCl9LCJBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBwKHIoZSksdCkudmFsdWVPZigpfSwibnVtYmVyIHwgQmlnTnVtYmVyLCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChlLHIodCkpLnZhbHVlT2YoKX19KTtyZXR1cm4gcDtmdW5jdGlvbiBtKGUsdCl7dmFyIHI9dS5wcmVjaXNpb24sbj11LmNsb25lKHtwcmVjaXNpb246cisyfSksaT1uZXcgdSgwKSxhPW5ldyBuKDEpLG89dC5pc05lZ2F0aXZlKCk7aWYobyYmKHQ9dC5uZWcoKSksdC5pc1plcm8oKSl0aHJvdyBuZXcgRXJyb3IoIlJvb3QgbXVzdCBiZSBub24temVybyIpO2lmKGUuaXNOZWdhdGl2ZSgpJiYhdC5hYnMoKS5tb2QoMikuZXF1YWxzKDEpKXRocm93IG5ldyBFcnJvcigiUm9vdCBtdXN0IGJlIG9kZCB3aGVuIGEgaXMgbmVnYXRpdmUuIik7aWYoZS5pc1plcm8oKSlyZXR1cm4gbz9uZXcgbigxLzApOjA7aWYoIWUuaXNGaW5pdGUoKSlyZXR1cm4gbz9pOmU7dmFyIHM9ZS5hYnMoKS5wb3coYS5kaXYodCkpO3JldHVybiBzPWUuaXNOZWcoKT9zLm5lZygpOnMsbmV3IHUoKG8/YS5kaXYocyk6cykudG9QcmVjaXNpb24ocikpfX0pLFRyPVsidHlwZWQiLCJCaWdOdW1iZXIiLCJGcmFjdGlvbiIsImNvbXBsZXgiXSxfcj1PYmplY3Qocy5hKSgic2lnbiIsVHIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuQmlnTnVtYmVyLG49ZS5jb21wbGV4LGk9ZS5GcmFjdGlvbixhPXQoInNpZ24iLHtudW1iZXI6bHQsQ29tcGxleDpmdW5jdGlvbihlKXtyZXR1cm4gMD09PWUuaW0/bihsdChlLnJlKSk6ZS5zaWduKCl9LEJpZ051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHIoZS5jbXAoMCkpfSxGcmFjdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGkoZS5zLDEpfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLGEsITApfSxVbml0OmZ1bmN0aW9uKGUpe3JldHVybiBhKGUudmFsdWUpfX0pO3JldHVybiBhfSksSXI9WyJjb25maWciLCJ0eXBlZCIsIkNvbXBsZXgiXSxxcj1PYmplY3Qocy5hKSgic3FydCIsSXIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb25maWcscj1lLnR5cGVkLG49ZS5Db21wbGV4LGk9cigic3FydCIse251bWJlcjphLENvbXBsZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3FydCgpfSxCaWdOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIWUuaXNOZWdhdGl2ZSgpfHx0LnByZWRpY3RhYmxlP2Uuc3FydCgpOmEoZS50b051bWJlcigpKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSxpLCEwKX0sVW5pdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wb3coLjUpfX0pO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGlzTmFOKGUpP05hTjowPD1lfHx0LnByZWRpY3RhYmxlP01hdGguc3FydChlKTpuZXcgbihlLDApLnNxcnQoKX1yZXR1cm4gaX0pLEJyPVsidHlwZWQiXSxrcj1PYmplY3Qocy5hKSgic3F1YXJlIixCcixmdW5jdGlvbihlKXt2YXIgdD0oMCxlLnR5cGVkKSgic3F1YXJlIix7bnVtYmVyOnB0LENvbXBsZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubXVsKGUpfSxCaWdOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGltZXMoZSl9LEZyYWN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBlLm11bChlKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSx0LCEwKX0sVW5pdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wb3coMil9fSk7cmV0dXJuIHR9KSx6cj0ic3VidHJhY3QiLERyPVsidHlwZWQiLCJtYXRyaXgiLCJlcXVhbFNjYWxhciIsImFkZFNjYWxhciIsInVuYXJ5TWludXMiLCJEZW5zZU1hdHJpeCJdLFJyPU9iamVjdChzLmEpKHpyLERyLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLm1hdHJpeCxuPWUuZXF1YWxTY2FsYXIsaT1lLmFkZFNjYWxhcixhPWUudW5hcnlNaW51cyxvPWUuRGVuc2VNYXRyaXgscz1HdCh7dHlwZWQ6dH0pLHU9ZHIoe3R5cGVkOnR9KSxjPWdyKHt0eXBlZDp0LGVxdWFsU2NhbGFyOm59KSxmPVd0KHt0eXBlZDp0LERlbnNlTWF0cml4Om99KSxsPVh0KHt0eXBlZDp0fSkscD1LdCh7dHlwZWQ6dH0pLG09dCh6cix7Im51bWJlciwgbnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9LCJDb21wbGV4LCBDb21wbGV4IjpmdW5jdGlvbihlLHQpe3JldHVybiBlLnN1Yih0KX0sIkJpZ051bWJlciwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBlLm1pbnVzKHQpfSwiRnJhY3Rpb24sIEZyYWN0aW9uIjpmdW5jdGlvbihlLHQpe3JldHVybiBlLnN1Yih0KX0sIlVuaXQsIFVuaXQiOmZ1bmN0aW9uKGUsdCl7aWYobnVsbD09PWUudmFsdWUpdGhyb3cgbmV3IEVycm9yKCJQYXJhbWV0ZXIgeCBjb250YWlucyBhIHVuaXQgd2l0aCB1bmRlZmluZWQgdmFsdWUiKTtpZihudWxsPT09dC52YWx1ZSl0aHJvdyBuZXcgRXJyb3IoIlBhcmFtZXRlciB5IGNvbnRhaW5zIGEgdW5pdCB3aXRoIHVuZGVmaW5lZCB2YWx1ZSIpO2lmKCFlLmVxdWFsQmFzZSh0KSl0aHJvdyBuZXcgRXJyb3IoIlVuaXRzIGRvIG5vdCBtYXRjaCIpO3ZhciByPWUuY2xvbmUoKTtyZXR1cm4gci52YWx1ZT1tKHIudmFsdWUsdC52YWx1ZSksci5maXhQcmVmaXg9ITEscn0sIlNwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBQcihlLHQpLGMoZSx0LG0pfSwiU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUHIoZSx0KSx1KHQsZSxtLCEwKX0sIkRlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFByKGUsdCkscyhlLHQsbSwhMSl9LCJEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFByKGUsdCksbChlLHQsbSl9LCJBcnJheSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG0ocihlKSxyKHQpKS52YWx1ZU9mKCl9LCJBcnJheSwgTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBtKHIoZSksdCl9LCJNYXRyaXgsIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBtKGUscih0KSl9LCJTcGFyc2VNYXRyaXgsIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihlLGEodCksaSl9LCJEZW5zZU1hdHJpeCwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiBwKGUsdCxtKX0sImFueSwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBmKHQsZSxtLCEwKX0sImFueSwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAodCxlLG0sITApfSwiQXJyYXksIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChyKGUpLHQsbSwhMSkudmFsdWVPZigpfSwiYW55LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChyKHQpLGUsbSwhMCkudmFsdWVPZigpfX0pO3JldHVybiBtfSk7ZnVuY3Rpb24gUHIoZSx0KXt2YXIgcj1lLnNpemUoKSxuPXQuc2l6ZSgpO2lmKHIubGVuZ3RoIT09bi5sZW5ndGgpdGhyb3cgbmV3IHouYShyLmxlbmd0aCxuLmxlbmd0aCl9dmFyIEZyPVsidHlwZWQiLCJjb25maWciLCJtYXRyaXgiLCJCaWdOdW1iZXIiXSxVcj1PYmplY3Qocy5hKSgieGdjZCIsRnIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxwPWUuY29uZmlnLG09ZS5tYXRyaXgsaD1lLkJpZ051bWJlcjtyZXR1cm4gdCgieGdjZCIseyJudW1iZXIsIG51bWJlciI6ZnVuY3Rpb24oZSx0KXt2YXIgcj1tdChlLHQpO3JldHVybiJBcnJheSI9PT1wLm1hdHJpeD9yOm0ocil9LCJCaWdOdW1iZXIsIEJpZ051bWJlciI6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGksYSxvPW5ldyBoKDApLHM9bmV3IGgoMSksdT1vLGM9cyxmPXMsbD1vO2lmKCFlLmlzSW50KCl8fCF0LmlzSW50KCkpdGhyb3cgbmV3IEVycm9yKCJQYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIHhnY2QgbXVzdCBiZSBpbnRlZ2VyIG51bWJlcnMiKTtmb3IoOyF0LmlzWmVybygpOyluPWUuZGl2KHQpLmZsb29yKCksaT1lLm1vZCh0KSxyPXUsdT1jLm1pbnVzKG4udGltZXModSkpLGM9cixyPWYsZj1sLm1pbnVzKG4udGltZXMoZikpLGw9cixlPXQsdD1pO2E9ZS5sdChvKT9bZS5uZWcoKSxjLm5lZygpLGwubmVnKCldOltlLGUuaXNaZXJvKCk/MDpjLGxdO3JldHVybiJBcnJheSI9PT1wLm1hdHJpeD9hOm0oYSl9fSl9KSxMcj1bInR5cGVkIiwiZXF1YWxTY2FsYXIiXSxIcj1PYmplY3Qocy5hKSgiYWxnb3JpdGhtMDkiLExyLGZ1bmN0aW9uKGUpe3ZhciBJPWUudHlwZWQscT1lLmVxdWFsU2NhbGFyO3JldHVybiBmdW5jdGlvbihlLHQscil7dmFyIG49ZS5fdmFsdWVzLGk9ZS5faW5kZXgsYT1lLl9wdHIsbz1lLl9zaXplLHM9ZS5fZGF0YXR5cGUsdT10Ll92YWx1ZXMsYz10Ll9pbmRleCxmPXQuX3B0cixsPXQuX3NpemUscD10Ll9kYXRhdHlwZTtpZihvLmxlbmd0aCE9PWwubGVuZ3RoKXRocm93IG5ldyB6LmEoby5sZW5ndGgsbC5sZW5ndGgpO2lmKG9bMF0hPT1sWzBdfHxvWzFdIT09bFsxXSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoIitvKyIpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCIrbCsiKSIpO3ZhciBtLGg9b1swXSxkPW9bMV0seT1xLGc9MCx2PXI7InN0cmluZyI9PXR5cGVvZiBzJiZzPT09cCYmKG09cyx5PUkuZmluZChxLFttLG1dKSxnPUkuY29udmVydCgwLG0pLHY9SS5maW5kKHIsW20sbV0pKTt2YXIgYix4LHcsTixPLE09biYmdT9bXTp2b2lkIDAsaj1bXSxFPVtdLFM9TT9bXTp2b2lkIDAsQT1bXTtmb3IoeD0wO3g8ZDt4Kyspe0VbeF09ai5sZW5ndGg7dmFyIEM9eCsxO2lmKFMpZm9yKE49Zlt4XSxPPWZbeCsxXSx3PU47dzxPO3crKylBW2I9Y1t3XV09QyxTW2JdPXVbd107Zm9yKE49YVt4XSxPPWFbeCsxXSx3PU47dzxPO3crKylpZihiPWlbd10sUyl7dmFyIFQ9QVtiXT09PUM/U1tiXTpnLF89dihuW3ddLFQpO3koXyxnKXx8KGoucHVzaChiKSxNLnB1c2goXykpfWVsc2Ugai5wdXNoKGIpfXJldHVybiBFW2RdPWoubGVuZ3RoLGUuY3JlYXRlU3BhcnNlTWF0cml4KHt2YWx1ZXM6TSxpbmRleDpqLHB0cjpFLHNpemU6W2gsZF0sZGF0YXR5cGU6bX0pfX0pLCRyPSJkb3RNdWx0aXBseSIsR3I9WyJ0eXBlZCIsIm1hdHJpeCIsImVxdWFsU2NhbGFyIiwibXVsdGlwbHlTY2FsYXIiXSxacj1PYmplY3Qocy5hKSgkcixHcixmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5tYXRyaXgsbj1lLmVxdWFsU2NhbGFyLGk9ZS5tdWx0aXBseVNjYWxhcixhPW5yKHt0eXBlZDp0LGVxdWFsU2NhbGFyOm59KSxvPUhyKHt0eXBlZDp0LGVxdWFsU2NhbGFyOm59KSxzPXNyKHt0eXBlZDp0LGVxdWFsU2NhbGFyOm59KSx1PVh0KHt0eXBlZDp0fSksYz1LdCh7dHlwZWQ6dH0pLGY9dCgkcix7ImFueSwgYW55IjppLCJTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhlLHQsaSwhMSl9LCJTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBhKHQsZSxpLCEwKX0sIkRlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSx0LGksITEpfSwiRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiB1KGUsdCxpKX0sIkFycmF5LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihyKGUpLHIodCkpLnZhbHVlT2YoKX0sIkFycmF5LCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYocihlKSx0KX0sIk1hdHJpeCwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYoZSxyKHQpKX0sIlNwYXJzZU1hdHJpeCwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiBzKGUsdCxpLCExKX0sIkRlbnNlTWF0cml4LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMoZSx0LGksITEpfSwiYW55LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHModCxlLGksITApfSwiYW55LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyh0LGUsaSwhMCl9LCJBcnJheSwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiBjKHIoZSksdCxpLCExKS52YWx1ZU9mKCl9LCJhbnksIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBjKHIodCksZSxpLCEwKS52YWx1ZU9mKCl9fSk7cmV0dXJuIGZ9KTtmdW5jdGlvbiBWcihlLHQpe2lmKGUuaXNGaW5pdGUoKSYmIWUuaXNJbnRlZ2VyKCl8fHQuaXNGaW5pdGUoKSYmIXQuaXNJbnRlZ2VyKCkpdGhyb3cgbmV3IEVycm9yKCJJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRBbmQiKTt2YXIgcj1lLmNvbnN0cnVjdG9yO2lmKGUuaXNOYU4oKXx8dC5pc05hTigpKXJldHVybiBuZXcgcihOYU4pO2lmKGUuaXNaZXJvKCl8fHQuZXEoLTEpfHxlLmVxKHQpKXJldHVybiBlO2lmKHQuaXNaZXJvKCl8fGUuZXEoLTEpKXJldHVybiB0O2lmKCFlLmlzRmluaXRlKCl8fCF0LmlzRmluaXRlKCkpe2lmKCFlLmlzRmluaXRlKCkmJiF0LmlzRmluaXRlKCkpcmV0dXJuIGUuaXNOZWdhdGl2ZSgpPT09dC5pc05lZ2F0aXZlKCk/ZTpuZXcgcigwKTtpZighZS5pc0Zpbml0ZSgpKXJldHVybiB0LmlzTmVnYXRpdmUoKT9lOmUuaXNOZWdhdGl2ZSgpP25ldyByKDApOnQ7aWYoIXQuaXNGaW5pdGUoKSlyZXR1cm4gZS5pc05lZ2F0aXZlKCk/dDp0LmlzTmVnYXRpdmUoKT9uZXcgcigwKTplfXJldHVybiBZcihlLHQsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSZ0fSl9ZnVuY3Rpb24gSnIoZSl7aWYoZS5pc0Zpbml0ZSgpJiYhZS5pc0ludGVnZXIoKSl0aHJvdyBuZXcgRXJyb3IoIkludGVnZXIgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gYml0Tm90Iik7dmFyIHQ9ZS5jb25zdHJ1Y3RvcixyPXQucHJlY2lzaW9uO3QuY29uZmlnKHtwcmVjaXNpb246MWU5fSk7dmFyIG49ZS5wbHVzKG5ldyB0KDEpKTtyZXR1cm4gbi5zPS1uLnN8fG51bGwsdC5jb25maWcoe3ByZWNpc2lvbjpyfSksbn1mdW5jdGlvbiBXcihlLHQpe2lmKGUuaXNGaW5pdGUoKSYmIWUuaXNJbnRlZ2VyKCl8fHQuaXNGaW5pdGUoKSYmIXQuaXNJbnRlZ2VyKCkpdGhyb3cgbmV3IEVycm9yKCJJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRPciIpO3ZhciByPWUuY29uc3RydWN0b3I7aWYoZS5pc05hTigpfHx0LmlzTmFOKCkpcmV0dXJuIG5ldyByKE5hTik7dmFyIG49bmV3IHIoLTEpO3JldHVybiBlLmlzWmVybygpfHx0LmVxKG4pfHxlLmVxKHQpP3Q6dC5pc1plcm8oKXx8ZS5lcShuKT9lOmUuaXNGaW5pdGUoKSYmdC5pc0Zpbml0ZSgpP1lyKGUsdCxmdW5jdGlvbihlLHQpe3JldHVybiBlfHR9KTohZS5pc0Zpbml0ZSgpJiYhZS5pc05lZ2F0aXZlKCkmJnQuaXNOZWdhdGl2ZSgpfHxlLmlzTmVnYXRpdmUoKSYmIXQuaXNOZWdhdGl2ZSgpJiYhdC5pc0Zpbml0ZSgpP246ZS5pc05lZ2F0aXZlKCkmJnQuaXNOZWdhdGl2ZSgpP2UuaXNGaW5pdGUoKT9lOnQ6ZS5pc0Zpbml0ZSgpP3Q6ZX1mdW5jdGlvbiBZcihlLHQscil7dmFyIG4saSxhLG8scyx1PWUuY29uc3RydWN0b3IsYz0rKGUuczwwKSxmPSsodC5zPDApO2lmKGMpe249WHIoSnIoZSkpO2Zvcih2YXIgbD0wO2w8bi5sZW5ndGg7KytsKW5bbF1ePTF9ZWxzZSBuPVhyKGUpO2lmKGYpe2k9WHIoSnIodCkpO2Zvcih2YXIgcD0wO3A8aS5sZW5ndGg7KytwKWlbcF1ePTF9ZWxzZSBpPVhyKHQpO3M9bi5sZW5ndGg8PWkubGVuZ3RoPyhhPW4sbz1pLGMpOihhPWksbz1uLGYpO3ZhciBtPWEubGVuZ3RoLGg9by5sZW5ndGgsZD0xXnIoYyxmKSx5PW5ldyB1KDFeZCksZz1uZXcgdSgxKSx2PW5ldyB1KDIpLGI9dS5wcmVjaXNpb247Zm9yKHUuY29uZmlnKHtwcmVjaXNpb246MWU5fSk7MDxtOylyKGFbLS1tXSxvWy0taF0pPT09ZCYmKHk9eS5wbHVzKGcpKSxnPWcudGltZXModik7Zm9yKDswPGg7KXIocyxvWy0taF0pPT09ZCYmKHk9eS5wbHVzKGcpKSxnPWcudGltZXModik7cmV0dXJuIHUuY29uZmlnKHtwcmVjaXNpb246Yn0pLDA9PWQmJih5LnM9LXkucykseX1mdW5jdGlvbiBYcihlKXtmb3IodmFyIHQ9ZS5kLHI9dFswXSsiIixuPTE7bjx0Lmxlbmd0aDsrK24pe2Zvcih2YXIgaT10W25dKyIiLGE9Ny1pLmxlbmd0aDthLS07KWk9IjAiK2k7cis9aX1mb3IodmFyIG89ci5sZW5ndGg7IjAiPT09ci5jaGFyQXQobyk7KW8tLTt2YXIgcz1lLmUsdT1yLnNsaWNlKDAsbysxfHwxKSxjPXUubGVuZ3RoO2lmKDA8cylpZigrK3M+Yylmb3Iocy09YztzLS07KXUrPSIwIjtlbHNlIHM8YyYmKHU9dS5zbGljZSgwLHMpKyIuIit1LnNsaWNlKHMpKTtmb3IodmFyIGY9WzBdLGw9MDtsPHUubGVuZ3RoOyl7Zm9yKHZhciBwPWYubGVuZ3RoO3AtLTspZltwXSo9MTA7ZlswXSs9cGFyc2VJbnQodS5jaGFyQXQobCsrKSk7Zm9yKHZhciBtPTA7bTxmLmxlbmd0aDsrK20pMTxmW21dJiYobnVsbCE9PWZbbSsxXSYmdm9pZCAwIT09ZlttKzFdfHwoZlttKzFdPTApLGZbbSsxXSs9ZlttXT4+MSxmW21dJj0xKX1yZXR1cm4gZi5yZXZlcnNlKCl9ZnVuY3Rpb24gUXIoZSx0KXtpZihlLmlzRmluaXRlKCkmJiFlLmlzSW50ZWdlcigpfHx0LmlzRmluaXRlKCkmJiF0LmlzSW50ZWdlcigpKXRocm93IG5ldyBFcnJvcigiSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gYml0WG9yIik7dmFyIHI9ZS5jb25zdHJ1Y3RvcjtpZihlLmlzTmFOKCl8fHQuaXNOYU4oKSlyZXR1cm4gbmV3IHIoTmFOKTtpZihlLmlzWmVybygpKXJldHVybiB0O2lmKHQuaXNaZXJvKCkpcmV0dXJuIGU7aWYoZS5lcSh0KSlyZXR1cm4gbmV3IHIoMCk7dmFyIG49bmV3IHIoLTEpO3JldHVybiBlLmVxKG4pP0pyKHQpOnQuZXEobik/SnIoZSk6ZS5pc0Zpbml0ZSgpJiZ0LmlzRmluaXRlKCk/WXIoZSx0LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVedH0pOmUuaXNGaW5pdGUoKXx8dC5pc0Zpbml0ZSgpP25ldyByKGUuaXNOZWdhdGl2ZSgpPT09dC5pc05lZ2F0aXZlKCk/MS8wOi0xLzApOm59ZnVuY3Rpb24gS3IoZSx0KXtpZihlLmlzRmluaXRlKCkmJiFlLmlzSW50ZWdlcigpfHx0LmlzRmluaXRlKCkmJiF0LmlzSW50ZWdlcigpKXRocm93IG5ldyBFcnJvcigiSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gbGVmdFNoaWZ0Iik7dmFyIHI9ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gZS5pc05hTigpfHx0LmlzTmFOKCl8fHQuaXNOZWdhdGl2ZSgpJiYhdC5pc1plcm8oKT9uZXcgcihOYU4pOmUuaXNaZXJvKCl8fHQuaXNaZXJvKCk/ZTplLmlzRmluaXRlKCl8fHQuaXNGaW5pdGUoKT90Lmx0KDU1KT9lLnRpbWVzKE1hdGgucG93KDIsdC50b051bWJlcigpKSsiIik6ZS50aW1lcyhuZXcgcigyKS5wb3codCkpOm5ldyByKE5hTil9ZnVuY3Rpb24gZW4oZSx0KXtpZihlLmlzRmluaXRlKCkmJiFlLmlzSW50ZWdlcigpfHx0LmlzRmluaXRlKCkmJiF0LmlzSW50ZWdlcigpKXRocm93IG5ldyBFcnJvcigiSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gcmlnaHRBcml0aFNoaWZ0Iik7dmFyIHI9ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gZS5pc05hTigpfHx0LmlzTmFOKCl8fHQuaXNOZWdhdGl2ZSgpJiYhdC5pc1plcm8oKT9uZXcgcihOYU4pOmUuaXNaZXJvKCl8fHQuaXNaZXJvKCk/ZTp0LmlzRmluaXRlKCk/dC5sdCg1NSk/ZS5kaXYoTWF0aC5wb3coMix0LnRvTnVtYmVyKCkpKyIiKS5mbG9vcigpOmUuZGl2KG5ldyByKDIpLnBvdyh0KSkuZmxvb3IoKTplLmlzTmVnYXRpdmUoKT9uZXcgcigtMSk6ZS5pc0Zpbml0ZSgpP25ldyByKDApOm5ldyByKE5hTil9dmFyIHRuPSJudW1iZXIsIG51bWJlciI7ZnVuY3Rpb24gcm4oZSx0KXtpZighT2JqZWN0KEUuaSkoZSl8fCFPYmplY3QoRS5pKSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGJpdEFuZCIpO3JldHVybiBlJnR9ZnVuY3Rpb24gbm4oZSl7aWYoIU9iamVjdChFLmkpKGUpKXRocm93IG5ldyBFcnJvcigiSW50ZWdlciBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXROb3QiKTtyZXR1cm5+ZX1mdW5jdGlvbiBhbihlLHQpe2lmKCFPYmplY3QoRS5pKShlKXx8IU9iamVjdChFLmkpKHQpKXRocm93IG5ldyBFcnJvcigiSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gYml0T3IiKTtyZXR1cm4gZXx0fWZ1bmN0aW9uIG9uKGUsdCl7aWYoIU9iamVjdChFLmkpKGUpfHwhT2JqZWN0KEUuaSkodCkpdGhyb3cgbmV3IEVycm9yKCJJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRYb3IiKTtyZXR1cm4gZV50fWZ1bmN0aW9uIHNuKGUsdCl7aWYoIU9iamVjdChFLmkpKGUpfHwhT2JqZWN0KEUuaSkodCkpdGhyb3cgbmV3IEVycm9yKCJJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBsZWZ0U2hpZnQiKTtyZXR1cm4gZTw8dH1mdW5jdGlvbiB1bihlLHQpe2lmKCFPYmplY3QoRS5pKShlKXx8IU9iamVjdChFLmkpKHQpKXRocm93IG5ldyBFcnJvcigiSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gcmlnaHRBcml0aFNoaWZ0Iik7cmV0dXJuIGU+PnR9ZnVuY3Rpb24gY24oZSx0KXtpZighT2JqZWN0KEUuaSkoZSl8fCFPYmplY3QoRS5pKSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHJpZ2h0TG9nU2hpZnQiKTtyZXR1cm4gZT4+PnR9cm4uc2lnbmF0dXJlPXRuLG5uLnNpZ25hdHVyZT0ibnVtYmVyIixjbi5zaWduYXR1cmU9dW4uc2lnbmF0dXJlPXNuLnNpZ25hdHVyZT1vbi5zaWduYXR1cmU9YW4uc2lnbmF0dXJlPXRuO3ZhciBmbj1bInR5cGVkIiwibWF0cml4IiwiZXF1YWxTY2FsYXIiXSxsbj1PYmplY3Qocy5hKSgiYml0QW5kIixmbixmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5tYXRyaXgsbj1lLmVxdWFsU2NhbGFyLGk9bnIoe3R5cGVkOnQsZXF1YWxTY2FsYXI6bn0pLGE9YXIoe3R5cGVkOnQsZXF1YWxTY2FsYXI6bn0pLG89c3Ioe3R5cGVkOnQsZXF1YWxTY2FsYXI6bn0pLHM9WHQoe3R5cGVkOnR9KSx1PUt0KHt0eXBlZDp0fSksYz10KCJiaXRBbmQiLHsibnVtYmVyLCBudW1iZXIiOnJuLCJCaWdOdW1iZXIsIEJpZ051bWJlciI6VnIsIlNwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCxjLCExKX0sIlNwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkodCxlLGMsITApfSwiRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShlLHQsYywhMSl9LCJEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMoZSx0LGMpfSwiQXJyYXksIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBjKHIoZSkscih0KSkudmFsdWVPZigpfSwiQXJyYXksIE1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhyKGUpLHQpfSwiTWF0cml4LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhlLHIodCkpfSwiU3BhcnNlTWF0cml4LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oZSx0LGMsITEpfSwiRGVuc2VNYXRyaXgsIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLHQsYywhMSl9LCJhbnksIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyh0LGUsYywhMCl9LCJhbnksIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiB1KHQsZSxjLCEwKX0sIkFycmF5LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUocihlKSx0LGMsITEpLnZhbHVlT2YoKX0sImFueSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUocih0KSxlLGMsITApLnZhbHVlT2YoKX19KTtyZXR1cm4gY30pLHBuPVsidHlwZWQiXSxtbj1PYmplY3Qocy5hKSgiYml0Tm90IixwbixmdW5jdGlvbihlKXt2YXIgdD0oMCxlLnR5cGVkKSgiYml0Tm90Iix7bnVtYmVyOm5uLEJpZ051bWJlcjpKciwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLHQpfX0pO3JldHVybiB0fSksaG49WyJ0eXBlZCIsIm1hdHJpeCIsImVxdWFsU2NhbGFyIiwiRGVuc2VNYXRyaXgiXSxkbj1PYmplY3Qocy5hKSgiYml0T3IiLGhuLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLm1hdHJpeCxuPWUuZXF1YWxTY2FsYXIsaT1lLkRlbnNlTWF0cml4LGE9R3Qoe3R5cGVkOnR9KSxvPVZ0KHt0eXBlZDp0LGVxdWFsU2NhbGFyOm59KSxzPVd0KHt0eXBlZDp0LERlbnNlTWF0cml4Oml9KSx1PVh0KHt0eXBlZDp0fSksYz1LdCh7dHlwZWQ6dH0pLGY9dCgiYml0T3IiLHsibnVtYmVyLCBudW1iZXIiOmFuLCJCaWdOdW1iZXIsIEJpZ051bWJlciI6V3IsIlNwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBvKGUsdCxmKX0sIlNwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEodCxlLGYsITApfSwiRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQsZiwhMSl9LCJEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZSx0LGYpfSwiQXJyYXksIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBmKHIoZSkscih0KSkudmFsdWVPZigpfSwiQXJyYXksIE1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihyKGUpLHQpfSwiTWF0cml4LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihlLHIodCkpfSwiU3BhcnNlTWF0cml4LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMoZSx0LGYsITEpfSwiRGVuc2VNYXRyaXgsIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhlLHQsZiwhMSl9LCJhbnksIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyh0LGUsZiwhMCl9LCJhbnksIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBjKHQsZSxmLCEwKX0sIkFycmF5LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMocihlKSx0LGYsITEpLnZhbHVlT2YoKX0sImFueSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMocih0KSxlLGYsITApLnZhbHVlT2YoKX19KTtyZXR1cm4gZn0pLHluPVsidHlwZWQiLCJEZW5zZU1hdHJpeCJdLGduPU9iamVjdChzLmEpKCJhbGdvcml0aG0wNyIseW4sZnVuY3Rpb24oZSl7dmFyIE49ZS50eXBlZCxPPWUuRGVuc2VNYXRyaXg7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLl9zaXplLGk9ZS5fZGF0YXR5cGUsYT10Ll9zaXplLG89dC5fZGF0YXR5cGU7aWYobi5sZW5ndGghPT1hLmxlbmd0aCl0aHJvdyBuZXcgei5hKG4ubGVuZ3RoLGEubGVuZ3RoKTtpZihuWzBdIT09YVswXXx8blsxXSE9PWFbMV0pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkRpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCIrbisiKSBtdXN0IG1hdGNoIE1hdHJpeCBCICgiK2ErIikiKTt2YXIgcyx1LGMsZj1uWzBdLGw9blsxXSxwPTAsbT1yOyJzdHJpbmciPT10eXBlb2YgaSYmaT09PW8mJihzPWkscD1OLmNvbnZlcnQoMCxzKSxtPU4uZmluZChyLFtzLHNdKSk7dmFyIGg9W107Zm9yKHU9MDt1PGY7dSsrKWhbdV09W107dmFyIGQ9W10seT1bXSxnPVtdLHY9W107Zm9yKGM9MDtjPGw7YysrKXt2YXIgYj1jKzE7Zm9yKE0oZSxjLGcsZCxiKSxNKHQsYyx2LHksYiksdT0wO3U8Zjt1Kyspe3ZhciB4PWdbdV09PT1iP2RbdV06cCx3PXZbdV09PT1iP3lbdV06cDtoW3VdW2NdPW0oeCx3KX19cmV0dXJuIG5ldyBPKHtkYXRhOmgsc2l6ZTpbZixsXSxkYXRhdHlwZTpzfSl9O2Z1bmN0aW9uIE0oZSx0LHIsbixpKXtmb3IodmFyIGE9ZS5fdmFsdWVzLG89ZS5faW5kZXgscz1lLl9wdHIsdT1zW3RdLGM9c1t0KzFdO3U8Yzt1Kyspe3ZhciBmPW9bdV07cltmXT1pLG5bZl09YVt1XX19fSksdm49WyJ0eXBlZCIsIm1hdHJpeCIsIkRlbnNlTWF0cml4Il0sYm49T2JqZWN0KHMuYSkoImJpdFhvciIsdm4sZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUubWF0cml4LG49ZS5EZW5zZU1hdHJpeCxpPWRyKHt0eXBlZDp0fSksYT1nbih7dHlwZWQ6dCxEZW5zZU1hdHJpeDpufSksbz1icih7dHlwZWQ6dCxEZW5zZU1hdHJpeDpufSkscz1YdCh7dHlwZWQ6dH0pLHU9S3Qoe3R5cGVkOnR9KSxjPXQoImJpdFhvciIseyJudW1iZXIsIG51bWJlciI6b24sIkJpZ051bWJlciwgQmlnTnVtYmVyIjpRciwiU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSx0LGMpfSwiU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaSh0LGUsYywhMCl9LCJEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBpKGUsdCxjLCExKX0sIkRlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyhlLHQsYyl9LCJBcnJheSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMocihlKSxyKHQpKS52YWx1ZU9mKCl9LCJBcnJheSwgTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBjKHIoZSksdCl9LCJNYXRyaXgsIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBjKGUscih0KSl9LCJTcGFyc2VNYXRyaXgsIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhlLHQsYywhMSl9LCJEZW5zZU1hdHJpeCwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiB1KGUsdCxjLCExKX0sImFueSwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBvKHQsZSxjLCEwKX0sImFueSwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUodCxlLGMsITApfSwiQXJyYXksIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShyKGUpLHQsYywhMSkudmFsdWVPZigpfSwiYW55LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShyKHQpLGUsYywhMCkudmFsdWVPZigpfX0pO3JldHVybiBjfSkseG49WyJ0eXBlZCJdLHduPU9iamVjdChzLmEpKCJhcmciLHhuLGZ1bmN0aW9uKGUpe3ZhciB0PSgwLGUudHlwZWQpKCJhcmciLHtudW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguYXRhbjIoMCxlKX0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbnN0cnVjdG9yLmF0YW4yKDAsZSl9LENvbXBsZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuYXJnKCl9LCJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7cmV0dXJuIG9lKGUsdCl9fSk7cmV0dXJuIHR9KSxObj1bInR5cGVkIl0sT249T2JqZWN0KHMuYSkoImNvbmoiLE5uLGZ1bmN0aW9uKGUpe3ZhciB0PSgwLGUudHlwZWQpKCJjb25qIix7bnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxCaWdOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LENvbXBsZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29uanVnYXRlKCl9LCJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7cmV0dXJuIG9lKGUsdCl9fSk7cmV0dXJuIHR9KSxNbj1bInR5cGVkIl0sam49T2JqZWN0KHMuYSkoImltIixNbixmdW5jdGlvbihlKXt2YXIgdD0oMCxlLnR5cGVkKSgiaW0iLHtudW1iZXI6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLm11bCgwKX0sQ29tcGxleDpmdW5jdGlvbihlKXtyZXR1cm4gZS5pbX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSx0KX19KTtyZXR1cm4gdH0pLEVuPVsidHlwZWQiXSxTbj1PYmplY3Qocy5hKSgicmUiLEVuLGZ1bmN0aW9uKGUpe3ZhciB0PSgwLGUudHlwZWQpKCJyZSIse251bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxDb21wbGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLHQpfX0pO3JldHVybiB0fSksQW49Im51bWJlciwgbnVtYmVyIjtmdW5jdGlvbiBDbihlKXtyZXR1cm4hZX1mdW5jdGlvbiBUbihlLHQpe3JldHVybiEoIWUmJiF0KX1mdW5jdGlvbiBfbihlLHQpe3JldHVybiEhZSE9ISF0fWZ1bmN0aW9uIEluKGUsdCl7cmV0dXJuISghZXx8IXQpfUNuLnNpZ25hdHVyZT0ibnVtYmVyIixJbi5zaWduYXR1cmU9X24uc2lnbmF0dXJlPVRuLnNpZ25hdHVyZT1Bbjt2YXIgcW49WyJ0eXBlZCJdLEJuPU9iamVjdChzLmEpKCJub3QiLHFuLGZ1bmN0aW9uKGUpe3ZhciB0PSgwLGUudHlwZWQpKCJub3QiLHtudW1iZXI6Q24sQ29tcGxleDpmdW5jdGlvbihlKXtyZXR1cm4gMD09PWUucmUmJjA9PT1lLmltfSxCaWdOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNaZXJvKCl8fGUuaXNOYU4oKX0sVW5pdDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWUudmFsdWV8fHQoZS52YWx1ZSl9LCJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7cmV0dXJuIG9lKGUsdCl9fSk7cmV0dXJuIHR9KSxrbj1bInR5cGVkIiwibWF0cml4IiwiZXF1YWxTY2FsYXIiLCJEZW5zZU1hdHJpeCJdLHpuPU9iamVjdChzLmEpKCJvciIsa24sZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUubWF0cml4LG49ZS5lcXVhbFNjYWxhcixpPWUuRGVuc2VNYXRyaXgsYT1kcih7dHlwZWQ6dH0pLG89Z3Ioe3R5cGVkOnQsZXF1YWxTY2FsYXI6bn0pLHM9YnIoe3R5cGVkOnQsRGVuc2VNYXRyaXg6aX0pLHU9WHQoe3R5cGVkOnR9KSxjPUt0KHt0eXBlZDp0fSksZj10KCJvciIseyJudW1iZXIsIG51bWJlciI6VG4sIkNvbXBsZXgsIENvbXBsZXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDAhPT1lLnJlfHwwIT09ZS5pbXx8MCE9PXQucmV8fDAhPT10LmltfSwiQmlnTnVtYmVyLCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIWUuaXNaZXJvKCkmJiFlLmlzTmFOKCl8fCF0LmlzWmVybygpJiYhdC5pc05hTigpfSwiVW5pdCwgVW5pdCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihlLnZhbHVlfHwwLHQudmFsdWV8fDApfSwiU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oZSx0LGYpfSwiU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYSh0LGUsZiwhMCl9LCJEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCxmLCExKX0sIkRlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLHQsZil9LCJBcnJheSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYocihlKSxyKHQpKS52YWx1ZU9mKCl9LCJBcnJheSwgTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBmKHIoZSksdCl9LCJNYXRyaXgsIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBmKGUscih0KSl9LCJTcGFyc2VNYXRyaXgsIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyhlLHQsZiwhMSl9LCJEZW5zZU1hdHJpeCwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiBjKGUsdCxmLCExKX0sImFueSwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBzKHQsZSxmLCEwKX0sImFueSwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGModCxlLGYsITApfSwiQXJyYXksIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhyKGUpLHQsZiwhMSkudmFsdWVPZigpfSwiYW55LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhyKHQpLGUsZiwhMCkudmFsdWVPZigpfX0pO3JldHVybiBmfSksRG49WyJ0eXBlZCIsIm1hdHJpeCIsIkRlbnNlTWF0cml4Il0sUm49T2JqZWN0KHMuYSkoInhvciIsRG4sZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUubWF0cml4LG49ZS5EZW5zZU1hdHJpeCxpPWRyKHt0eXBlZDp0fSksYT1nbih7dHlwZWQ6dCxEZW5zZU1hdHJpeDpufSksbz1icih7dHlwZWQ6dCxEZW5zZU1hdHJpeDpufSkscz1YdCh7dHlwZWQ6dH0pLHU9S3Qoe3R5cGVkOnR9KSxjPXQoInhvciIseyJudW1iZXIsIG51bWJlciI6X24sIkNvbXBsZXgsIENvbXBsZXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAhPT1lLnJlfHwwIT09ZS5pbSkhPSgwIT09dC5yZXx8MCE9PXQuaW0pfSwiQmlnTnVtYmVyLCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuKCFlLmlzWmVybygpJiYhZS5pc05hTigpKSE9KCF0LmlzWmVybygpJiYhdC5pc05hTigpKX0sIlVuaXQsIFVuaXQiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMoZS52YWx1ZXx8MCx0LnZhbHVlfHwwKX0sIlNwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCxjKX0sIlNwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkodCxlLGMsITApfSwiRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShlLHQsYywhMSl9LCJEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMoZSx0LGMpfSwiQXJyYXksIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBjKHIoZSkscih0KSkudmFsdWVPZigpfSwiQXJyYXksIE1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhyKGUpLHQpfSwiTWF0cml4LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhlLHIodCkpfSwiU3BhcnNlTWF0cml4LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oZSx0LGMsITEpfSwiRGVuc2VNYXRyaXgsIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLHQsYywhMSl9LCJhbnksIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyh0LGUsYywhMCl9LCJhbnksIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiB1KHQsZSxjLCEwKX0sIkFycmF5LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUocihlKSx0LGMsITEpLnZhbHVlT2YoKX0sImFueSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUocih0KSxlLGMsITApLnZhbHVlT2YoKX19KTtyZXR1cm4gY30pLFBuPVsidHlwZWQiLCJtYXRyaXgiLCJpc0ludGVnZXIiXSxGbj1PYmplY3Qocy5hKSgiY29uY2F0IixQbixmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLGw9ZS5tYXRyaXgscD1lLmlzSW50ZWdlcjtyZXR1cm4gdCgiY29uY2F0Iix7Ii4uLkFycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyIjpmdW5jdGlvbihlKXt2YXIgdCxyLG49ZS5sZW5ndGgsaT0tMSxhPSExLG89W107Zm9yKHQ9MDt0PG47dCsrKXt2YXIgcz1lW3RdO2lmKE9iamVjdChpZS52KShzKSYmKGE9ITApLE9iamVjdChpZS55KShzKXx8T2JqZWN0KGllLmUpKHMpKXtpZih0IT09bi0xKXRocm93IG5ldyBFcnJvcigiRGltZW5zaW9uIG11c3QgYmUgc3BlY2lmaWVkIGFzIGxhc3QgYXJndW1lbnQiKTtpZihyPWksaT1zLnZhbHVlT2YoKSwhcChpKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnRlZ2VyIG51bWJlciBleHBlY3RlZCBmb3IgZGltZW5zaW9uIik7aWYoaTwwfHwwPHQmJnI8aSl0aHJvdyBuZXcgUi5hKGkscisxKX1lbHNle3ZhciB1PU9iamVjdChhZS5hKShzKS52YWx1ZU9mKCksYz1PYmplY3QoSS5hKSh1KTtpZihvW3RdPXUscj1pLGk9Yy5sZW5ndGgtMSwwPHQmJmkhPT1yKXRocm93IG5ldyB6LmEocisxLGkrMSl9fWlmKDA9PT1vLmxlbmd0aCl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIkF0IGxlYXN0IG9uZSBtYXRyaXggZXhwZWN0ZWQiKTtmb3IodmFyIGY9by5zaGlmdCgpO28ubGVuZ3RoOylmPVVuKGYsby5zaGlmdCgpLGksMCk7cmV0dXJuIGE/bChmKTpmfSwiLi4uc3RyaW5nIjpmdW5jdGlvbihlKXtyZXR1cm4gZS5qb2luKCIiKX19KX0pO2Z1bmN0aW9uIFVuKGUsdCxyLG4pe2lmKG48cil7aWYoZS5sZW5ndGghPT10Lmxlbmd0aCl0aHJvdyBuZXcgei5hKGUubGVuZ3RoLHQubGVuZ3RoKTtmb3IodmFyIGk9W10sYT0wO2E8ZS5sZW5ndGg7YSsrKWlbYV09VW4oZVthXSx0W2FdLHIsbisxKTtyZXR1cm4gaX1yZXR1cm4gZS5jb25jYXQodCl9dmFyIExuPVsidHlwZWQiLCJJbmRleCIsIm1hdHJpeCIsInJhbmdlIl0sSG49T2JqZWN0KHMuYSkoImNvbHVtbiIsTG4sZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxpPWUuSW5kZXgscj1lLm1hdHJpeCxhPWUucmFuZ2U7cmV0dXJuIHQoImNvbHVtbiIseyJNYXRyaXgsIG51bWJlciI6biwiQXJyYXksIG51bWJlciI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihyKE9iamVjdChhZS5hKShlKSksdCkudmFsdWVPZigpfX0pO2Z1bmN0aW9uIG4oZSx0KXtpZigyIT09ZS5zaXplKCkubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiT25seSB0d28gZGltZW5zaW9uYWwgbWF0cml4IGlzIHN1cHBvcnRlZCIpO09iamVjdChJLnMpKHQsZS5zaXplKClbMV0pO3ZhciByPWEoMCxlLnNpemUoKVswXSksbj1uZXcgaShyLHQpO3JldHVybiBlLnN1YnNldChuKX19KSwkbj1bInR5cGVkIiwibWF0cml4Iiwic3VidHJhY3QiLCJtdWx0aXBseSJdLEduPU9iamVjdChzLmEpKCJjcm9zcyIsJG4sZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUubWF0cml4LG89ZS5zdWJ0cmFjdCxzPWUubXVsdGlwbHk7cmV0dXJuIHQoImNyb3NzIix7Ik1hdHJpeCwgTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiByKG4oZS50b0FycmF5KCksdC50b0FycmF5KCkpKX0sIk1hdHJpeCwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIobihlLnRvQXJyYXkoKSx0KSl9LCJBcnJheSwgTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiByKG4oZSx0LnRvQXJyYXkoKSkpfSwiQXJyYXksIEFycmF5IjpufSk7ZnVuY3Rpb24gbihlLHQpe3ZhciByPU1hdGgubWF4KE9iamVjdChJLmEpKGUpLmxlbmd0aCxPYmplY3QoSS5hKSh0KS5sZW5ndGgpO2U9T2JqZWN0KEkucCkoZSksdD1PYmplY3QoSS5wKSh0KTt2YXIgbj1PYmplY3QoSS5hKShlKSxpPU9iamVjdChJLmEpKHQpO2lmKDEhPT1uLmxlbmd0aHx8MSE9PWkubGVuZ3RofHwzIT09blswXXx8MyE9PWlbMF0pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlZlY3RvcnMgd2l0aCBsZW5ndGggMyBleHBlY3RlZCAoU2l6ZSBBID0gWyIrbi5qb2luKCIsICIpKyJdLCBCID0gWyIraS5qb2luKCIsICIpKyJdKSIpO3ZhciBhPVtvKHMoZVsxXSx0WzJdKSxzKGVbMl0sdFsxXSkpLG8ocyhlWzJdLHRbMF0pLHMoZVswXSx0WzJdKSksbyhzKGVbMF0sdFsxXSkscyhlWzFdLHRbMF0pKV07cmV0dXJuIDE8cj9bYV06YX19KSxabj1bInR5cGVkIiwibWF0cml4IiwiRGVuc2VNYXRyaXgiLCJTcGFyc2VNYXRyaXgiXSxWbj1PYmplY3Qocy5hKSgiZGlhZyIsWm4sZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxmPWUubWF0cml4LHU9ZS5EZW5zZU1hdHJpeCxjPWUuU3BhcnNlTWF0cml4O3JldHVybiB0KCJkaWFnIix7QXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSwwLE9iamVjdChJLmEpKGUpLG51bGwpfSwiQXJyYXksIG51bWJlciI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihlLHQsT2JqZWN0KEkuYSkoZSksbnVsbCl9LCJBcnJheSwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBuKGUsdC50b051bWJlcigpLE9iamVjdChJLmEpKGUpLG51bGwpfSwiQXJyYXksIHN0cmluZyI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihlLDAsT2JqZWN0KEkuYSkoZSksdCl9LCJBcnJheSwgbnVtYmVyLCBzdHJpbmciOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbihlLHQsT2JqZWN0KEkuYSkoZSkscil9LCJBcnJheSwgQmlnTnVtYmVyLCBzdHJpbmciOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbihlLHQudG9OdW1iZXIoKSxPYmplY3QoSS5hKShlKSxyKX0sTWF0cml4OmZ1bmN0aW9uKGUpe3JldHVybiBuKGUsMCxlLnNpemUoKSxlLnN0b3JhZ2UoKSl9LCJNYXRyaXgsIG51bWJlciI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihlLHQsZS5zaXplKCksZS5zdG9yYWdlKCkpfSwiTWF0cml4LCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oZSx0LnRvTnVtYmVyKCksZS5zaXplKCksZS5zdG9yYWdlKCkpfSwiTWF0cml4LCBzdHJpbmciOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oZSwwLGUuc2l6ZSgpLHQpfSwiTWF0cml4LCBudW1iZXIsIHN0cmluZyI6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBuKGUsdCxlLnNpemUoKSxyKX0sIk1hdHJpeCwgQmlnTnVtYmVyLCBzdHJpbmciOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbihlLHQudG9OdW1iZXIoKSxlLnNpemUoKSxyKX19KTtmdW5jdGlvbiBuKGUsdCxyLG4pe2lmKCFPYmplY3QoRS5pKSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTZWNvbmQgcGFyYW1ldGVyIGluIGZ1bmN0aW9uIGRpYWcgbXVzdCBiZSBhbiBpbnRlZ2VyIik7dmFyIGk9MDx0P3Q6MCxhPXQ8MD8tdDowO3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihlLHQscixuLGksYSl7dmFyIG89W24raSxuK2FdO2lmKHImJiJzcGFyc2UiIT09ciYmImRlbnNlIiE9PXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBtYXRyaXggdHlwZSAiLmNvbmNhdChyLCciJykpO3ZhciBzPSJzcGFyc2UiPT09cj9jLmRpYWdvbmFsKG8sZSx0KTp1LmRpYWdvbmFsKG8sZSx0KTtyZXR1cm4gbnVsbCE9PXI/czpzLnZhbHVlT2YoKX0oZSx0LG4sclswXSxhLGkpO2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24oZSx0LHIsbixpLGEpe2lmKE9iamVjdChpZS52KShlKSl7dmFyIG89ZS5kaWFnb25hbCh0KTtyZXR1cm4gbnVsbCE9PXI/ciE9PW8uc3RvcmFnZSgpP2YobyxyKTpvOm8udmFsdWVPZigpfWZvcih2YXIgcz1NYXRoLm1pbihuWzBdLWksblsxXS1hKSx1PVtdLGM9MDtjPHM7YysrKXVbY109ZVtjK2ldW2MrYV07cmV0dXJuIG51bGwhPT1yP2YodSk6dX0oZSx0LG4scixhLGkpfXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaXggZm9yIGZ1bmN0aW9uIGRpYWcgbXVzdCBiZSAyIGRpbWVuc2lvbmFsIil9fSksSm49T2JqZWN0KHMuYSkoImV5ZSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uICJleWUiIGlzIHJlbmFtZWQgdG8gImlkZW50aXR5IiBzaW5jZSBtYXRoanMgdmVyc2lvbiA1LjAuMC4gVG8ga2VlcCBleWUgd29ya2luZywgY3JlYXRlIGFuIGFsaWFzIGZvciBpdCB1c2luZyAibWF0aC5pbXBvcnQoe2V5ZTogbWF0aC5pZGVudGl0eX0sIHtvdmVycmlkZTogdHJ1ZX0pIicpfX0pO2Z1bmN0aW9uIFduKGUpe3JldHVybihXbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIFluKGksYSl7cmV0dXJuIGZ1bmN0aW9uIGUoKXsib2JqZWN0IiE9PVduKGUuY2FjaGUpJiYoZS5jYWNoZT17fSk7Zm9yKHZhciB0PVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXRbcl09YXJndW1lbnRzW3JdO3ZhciBuPWE/YSh0KTpKU09OLnN0cmluZ2lmeSh0KTtyZXR1cm4gbiBpbiBlLmNhY2hlfHwoZS5jYWNoZVtuXT1pLmFwcGx5KGksdCkpLGUuY2FjaGVbbl19fWZ1bmN0aW9uIFhuKGUpe3JldHVybiBPYmplY3Qua2V5cyhlLnNpZ25hdHVyZXN8fHt9KS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgcj0odC5tYXRjaCgvLC9nKXx8W10pLmxlbmd0aCsxO3JldHVybiBNYXRoLm1heChlLHIpfSwtMSl9dmFyIFFuPVsidHlwZWQiXSxLbj1PYmplY3Qocy5hKSgiZmlsdGVyIixRbixmdW5jdGlvbihlKXtyZXR1cm4oMCxlLnR5cGVkKSgiZmlsdGVyIix7IkFycmF5LCBmdW5jdGlvbiI6ZWksIk1hdHJpeCwgZnVuY3Rpb24iOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY3JlYXRlKGVpKGUudG9BcnJheSgpLHQpKX0sIkFycmF5LCBSZWdFeHAiOkkuZCwiTWF0cml4LCBSZWdFeHAiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY3JlYXRlKE9iamVjdChJLmQpKGUudG9BcnJheSgpLHQpKX19KX0pO2Z1bmN0aW9uIGVpKGUsbil7dmFyIGk9WG4obik7cmV0dXJuIE9iamVjdChJLmMpKGUsZnVuY3Rpb24oZSx0LHIpe3JldHVybiAxPT09aT9uKGUpOjI9PT1pP24oZSxbdF0pOm4oZSxbdF0scil9KX12YXIgdGk9ImZsYXR0ZW4iLHJpPVsidHlwZWQiLCJtYXRyaXgiXSxuaT1PYmplY3Qocy5hKSh0aSxyaSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5tYXRyaXg7cmV0dXJuIHQodGkse0FycmF5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QoSS5lKShPYmplY3QoYWUuYSkoZSkpfSxNYXRyaXg6ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KEkuZSkoT2JqZWN0KGFlLmEpKGUudG9BcnJheSgpKSk7cmV0dXJuIHIodCl9fSl9KSxpaT0iZm9yRWFjaCIsYWk9WyJ0eXBlZCJdLG9pPU9iamVjdChzLmEpKGlpLGFpLGZ1bmN0aW9uKGUpe3JldHVybigwLGUudHlwZWQpKGlpLHsiQXJyYXksIGZ1bmN0aW9uIjpzaSwiTWF0cml4LCBmdW5jdGlvbiI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5mb3JFYWNoKHQpfX0pfSk7ZnVuY3Rpb24gc2kodCxpKXt2YXIgYT1YbihpKTshZnVuY3Rpb24gcihlLG4pe0FycmF5LmlzQXJyYXkoZSk/T2JqZWN0KEkuZikoZSxmdW5jdGlvbihlLHQpe3IoZSxuLmNvbmNhdCh0KSl9KToxPT09YT9pKGUpOjI9PT1hP2koZSxuKTppKGUsbix0KX0odCxbXSl9dmFyIHVpPSJnZXRNYXRyaXhEYXRhVHlwZSIsY2k9WyJ0eXBlZCJdLGZpPU9iamVjdChzLmEpKHVpLGNpLGZ1bmN0aW9uKGUpe3JldHVybigwLGUudHlwZWQpKHVpLHtBcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KEkuaCkoZSxpZS5NKX0sTWF0cml4OmZ1bmN0aW9uKGUpe3JldHVybiBlLmdldERhdGFUeXBlKCl9fSl9KSxsaT0iaWRlbnRpdHkiLHBpPVsidHlwZWQiLCJjb25maWciLCJtYXRyaXgiLCJCaWdOdW1iZXIiLCJEZW5zZU1hdHJpeCIsIlNwYXJzZU1hdHJpeCJdLG1pPU9iamVjdChzLmEpKGxpLHBpLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLmNvbmZpZyxuPWUubWF0cml4LGY9ZS5CaWdOdW1iZXIsbD1lLkRlbnNlTWF0cml4LHA9ZS5TcGFyc2VNYXRyaXg7cmV0dXJuIHQobGkseyIiOmZ1bmN0aW9uKCl7cmV0dXJuIk1hdHJpeCI9PT1yLm1hdHJpeD9uKFtdKTpbXX0sc3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiBuKGUpfSwibnVtYmVyIHwgQmlnTnVtYmVyIjpmdW5jdGlvbihlKXtyZXR1cm4gYShlLGUsIk1hdHJpeCI9PT1yLm1hdHJpeD8iZGVuc2UiOnZvaWQgMCl9LCJudW1iZXIgfCBCaWdOdW1iZXIsIHN0cmluZyI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLGUsdCl9LCJudW1iZXIgfCBCaWdOdW1iZXIsIG51bWJlciB8IEJpZ051bWJlciI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQsIk1hdHJpeCI9PT1yLm1hdHJpeD8iZGVuc2UiOnZvaWQgMCl9LCJudW1iZXIgfCBCaWdOdW1iZXIsIG51bWJlciB8IEJpZ051bWJlciwgc3RyaW5nIjpmdW5jdGlvbihlLHQscil7cmV0dXJuIGEoZSx0LHIpfSxBcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gaShlKX0sIkFycmF5LCBzdHJpbmciOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoZSx0KX0sTWF0cml4OmZ1bmN0aW9uKGUpe3JldHVybiBpKGUudmFsdWVPZigpLGUuc3RvcmFnZSgpKX0sIk1hdHJpeCwgc3RyaW5nIjpmdW5jdGlvbihlLHQpe3JldHVybiBpKGUudmFsdWVPZigpLHQpfX0pO2Z1bmN0aW9uIGkoZSx0KXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gdD9uKHQpOltdO2Nhc2UgMTpyZXR1cm4gYShlWzBdLGVbMF0sdCk7Y2FzZSAyOnJldHVybiBhKGVbMF0sZVsxXSx0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVmVjdG9yIGNvbnRhaW5pbmcgdHdvIHZhbHVlcyBleHBlY3RlZCIpfX1mdW5jdGlvbiBhKGUsdCxyKXt2YXIgbj1PYmplY3QoaWUuZSkoZSl8fE9iamVjdChpZS5lKSh0KT9mOm51bGw7aWYoT2JqZWN0KGllLmUpKGUpJiYoZT1lLnRvTnVtYmVyKCkpLE9iamVjdChpZS5lKSh0KSYmKHQ9dC50b051bWJlcigpKSwhT2JqZWN0KEUuaSkoZSl8fGU8MSl0aHJvdyBuZXcgRXJyb3IoIlBhcmFtZXRlcnMgaW4gZnVuY3Rpb24gaWRlbnRpdHkgbXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VycyIpO2lmKCFPYmplY3QoRS5pKSh0KXx8dDwxKXRocm93IG5ldyBFcnJvcigiUGFyYW1ldGVycyBpbiBmdW5jdGlvbiBpZGVudGl0eSBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzIik7dmFyIGk9bj9uZXcgZigxKToxLGE9bj9uZXcgbigwKTowLG89W2UsdF07aWYocil7aWYoInNwYXJzZSI9PT1yKXJldHVybiBwLmRpYWdvbmFsKG8saSwwLGEpO2lmKCJkZW5zZSI9PT1yKXJldHVybiBsLmRpYWdvbmFsKG8saSwwLGEpO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gbWF0cml4IHR5cGUgIicuY29uY2F0KHIsJyInKSl9Zm9yKHZhciBzPU9iamVjdChJLm8pKFtdLG8sYSksdT1lPHQ/ZTp0LGM9MDtjPHU7YysrKXNbY11bY109aTtyZXR1cm4gc319KSxoaT1bInR5cGVkIiwibWF0cml4IiwibXVsdGlwbHlTY2FsYXIiXSxkaT1PYmplY3Qocy5hKSgia3JvbiIsaGksZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUubWF0cml4LGE9ZS5tdWx0aXBseVNjYWxhcjtyZXR1cm4gdCgia3JvbiIseyJNYXRyaXgsIE1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcihuKGUudG9BcnJheSgpLHQudG9BcnJheSgpKSl9LCJNYXRyaXgsIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiByKG4oZS50b0FycmF5KCksdCkpfSwiQXJyYXksIE1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcihuKGUsdC50b0FycmF5KCkpKX0sIkFycmF5LCBBcnJheSI6bn0pO2Z1bmN0aW9uIG4oZSxyKXtpZigxPT09T2JqZWN0KEkuYSkoZSkubGVuZ3RoJiYoZT1bZV0pLDE9PT1PYmplY3QoSS5hKShyKS5sZW5ndGgmJihyPVtyXSksMjxPYmplY3QoSS5hKShlKS5sZW5ndGh8fDI8T2JqZWN0KEkuYSkocikubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJWZWN0b3JzIHdpdGggZGltZW5zaW9ucyBncmVhdGVyIHRoZW4gMiBhcmUgbm90IHN1cHBvcnRlZCBleHBlY3RlZCAoU2l6ZSB4ID0gIitKU09OLnN0cmluZ2lmeShlLmxlbmd0aCkrIiwgeSA9ICIrSlNPTi5zdHJpbmdpZnkoci5sZW5ndGgpKyIpIik7dmFyIG49W10saT1bXTtyZXR1cm4gZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBpPVtdLG4ucHVzaChpKSx0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGkucHVzaChhKHQsZSkpfSl9KX0pfSkmJm59fSkseWk9WyJ0eXBlZCJdLGdpPU9iamVjdChzLmEpKCJtYXAiLHlpLGZ1bmN0aW9uKGUpe3JldHVybigwLGUudHlwZWQpKCJtYXAiLHsiQXJyYXksIGZ1bmN0aW9uIjp2aSwiTWF0cml4LCBmdW5jdGlvbiI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5tYXAodCl9fSl9KTtmdW5jdGlvbiB2aSh0LGkpe3ZhciBhPVhuKGkpO3JldHVybiBmdW5jdGlvbiByKGUsbil7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gcihlLG4uY29uY2F0KHQpKX0pOjE9PT1hP2koZSk6Mj09PWE/aShlLG4pOmkoZSxuLHQpfSh0LFtdKX12YXIgYmk9WyJ0eXBlZCIsImNvbmZpZyIsIm1hdHJpeCIsIkJpZ051bWJlciJdLHhpPU9iamVjdChzLmEpKCJvbmVzIixiaSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5jb25maWcsbz1lLm1hdHJpeCxzPWUuQmlnTnVtYmVyO3JldHVybiB0KCJvbmVzIix7IiI6ZnVuY3Rpb24oKXtyZXR1cm4iQXJyYXkiPT09ci5tYXRyaXg/bihbXSk6bihbXSwiZGVmYXVsdCIpfSwiLi4ubnVtYmVyIHwgQmlnTnVtYmVyIHwgc3RyaW5nIjpmdW5jdGlvbihlKXtpZigic3RyaW5nIiE9dHlwZW9mIGVbZS5sZW5ndGgtMV0pcmV0dXJuIkFycmF5Ij09PXIubWF0cml4P24oZSk6bihlLCJkZWZhdWx0Iik7dmFyIHQ9ZS5wb3AoKTtyZXR1cm4gbihlLHQpfSxBcnJheTpuLE1hdHJpeDpmdW5jdGlvbihlKXt2YXIgdD1lLnN0b3JhZ2UoKTtyZXR1cm4gbihlLnZhbHVlT2YoKSx0KX0sIkFycmF5IHwgTWF0cml4LCBzdHJpbmciOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oZS52YWx1ZU9mKCksdCl9fSk7ZnVuY3Rpb24gbihlLHQpe3ZhciBuLHI9KG49ITEsZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCxyKXtPYmplY3QoaWUuZSkoZSkmJihuPSEwLHJbdF09ZS50b051bWJlcigpKX0pLG4pP25ldyBzKDEpOjE7aWYoZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZXx8IU9iamVjdChFLmkpKGUpfHxlPDApdGhyb3cgbmV3IEVycm9yKCJQYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIG9uZXMgbXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VycyIpfSksdCl7dmFyIGk9byh0KTtyZXR1cm4gMDxlLmxlbmd0aD9pLnJlc2l6ZShlLHIpOml9dmFyIGE9W107cmV0dXJuIDA8ZS5sZW5ndGg/T2JqZWN0KEkubykoYSxlLHIpOmF9fSk7ZnVuY3Rpb24gd2koKXt0aHJvdyBuZXcgRXJyb3IoJ05vICJiaWdudW1iZXIiIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZScpfWZ1bmN0aW9uIE5pKCl7dGhyb3cgbmV3IEVycm9yKCdObyAiZnJhY3Rpb24iIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZScpfWZ1bmN0aW9uIE9pKCl7dGhyb3cgbmV3IEVycm9yKCdObyAibWF0cml4IiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUnKX12YXIgTWk9WyJ0eXBlZCIsImNvbmZpZyIsIj9tYXRyaXgiLCI/YmlnbnVtYmVyIiwic21hbGxlciIsInNtYWxsZXJFcSIsImxhcmdlciIsImxhcmdlckVxIl0samk9T2JqZWN0KHMuYSkoInJhbmdlIixNaSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLG49ZS5jb25maWcscj1lLm1hdHJpeCxvPWUuYmlnbnVtYmVyLHM9ZS5zbWFsbGVyLHU9ZS5zbWFsbGVyRXEsYz1lLmxhcmdlcixmPWUubGFyZ2VyRXE7cmV0dXJuIHQoInJhbmdlIix7c3RyaW5nOmEsInN0cmluZywgYm9vbGVhbiI6YSwibnVtYmVyLCBudW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkobChlLHQsMSkpfSwibnVtYmVyLCBudW1iZXIsIG51bWJlciI6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBpKGwoZSx0LHIpKX0sIm51bWJlciwgbnVtYmVyLCBib29sZWFuIjpmdW5jdGlvbihlLHQscil7cmV0dXJuIGkoKHI/cDpsKShlLHQsMSkpfSwibnVtYmVyLCBudW1iZXIsIG51bWJlciwgYm9vbGVhbiI6ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIGkoKG4/cDpsKShlLHQscikpfSwiQmlnTnVtYmVyLCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkobShlLHQsbmV3IGUuY29uc3RydWN0b3IoMSkpKX0sIkJpZ051bWJlciwgQmlnTnVtYmVyLCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gaShtKGUsdCxyKSl9LCJCaWdOdW1iZXIsIEJpZ051bWJlciwgYm9vbGVhbiI6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUuY29uc3RydWN0b3I7cmV0dXJuIGkoKHI/aDptKShlLHQsbmV3IG4oMSkpKX0sIkJpZ051bWJlciwgQmlnTnVtYmVyLCBCaWdOdW1iZXIsIGJvb2xlYW4iOmZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBpKChuP2g6bSkoZSx0LHIpKX19KTtmdW5jdGlvbiBpKGUpe3JldHVybiJNYXRyaXgiPT09bi5tYXRyaXg/cj9yKGUpOk9pKCk6ZX1mdW5jdGlvbiBhKGUsdCl7dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zcGxpdCgiOiIpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyKGUpfSk7aWYodC5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBpc05hTihlKX0pKXJldHVybiBudWxsO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAyOnJldHVybntzdGFydDp0WzBdLGVuZDp0WzFdLHN0ZXA6MX07Y2FzZSAzOnJldHVybntzdGFydDp0WzBdLGVuZDp0WzJdLHN0ZXA6dFsxXX07ZGVmYXVsdDpyZXR1cm4gbnVsbH19KGUpO2lmKCFyKXRocm93IG5ldyBTeW50YXhFcnJvcignU3RyaW5nICInK2UrJyIgaXMgbm8gdmFsaWQgcmFuZ2UnKTtyZXR1cm4iQmlnTnVtYmVyIj09PW4ubnVtYmVyPyh2b2lkIDA9PT1vJiZ3aSgpLGkoKHQ/aDptKShvKHIuc3RhcnQpLG8oci5lbmQpLG8oci5zdGVwKSkpKTppKCh0P3A6bCkoci5zdGFydCxyLmVuZCxyLnN0ZXApKX1mdW5jdGlvbiBsKGUsdCxyKXt2YXIgbj1bXSxpPWU7aWYoMDxyKWZvcig7cyhpLHQpOyluLnB1c2goaSksaSs9cjtlbHNlIGlmKHI8MClmb3IoO2MoaSx0KTspbi5wdXNoKGkpLGkrPXI7cmV0dXJuIG59ZnVuY3Rpb24gcChlLHQscil7dmFyIG49W10saT1lO2lmKDA8cilmb3IoO3UoaSx0KTspbi5wdXNoKGkpLGkrPXI7ZWxzZSBpZihyPDApZm9yKDtmKGksdCk7KW4ucHVzaChpKSxpKz1yO3JldHVybiBufWZ1bmN0aW9uIG0oZSx0LHIpe3ZhciBuPW8oMCksaT1bXSxhPWU7aWYoci5ndChuKSlmb3IoO3MoYSx0KTspaS5wdXNoKGEpLGE9YS5wbHVzKHIpO2Vsc2UgaWYoci5sdChuKSlmb3IoO2MoYSx0KTspaS5wdXNoKGEpLGE9YS5wbHVzKHIpO3JldHVybiBpfWZ1bmN0aW9uIGgoZSx0LHIpe3ZhciBuPW8oMCksaT1bXSxhPWU7aWYoci5ndChuKSlmb3IoO3UoYSx0KTspaS5wdXNoKGEpLGE9YS5wbHVzKHIpO2Vsc2UgaWYoci5sdChuKSlmb3IoO2YoYSx0KTspaS5wdXNoKGEpLGE9YS5wbHVzKHIpO3JldHVybiBpfX0pLEVpPSJyZXNoYXBlIixTaT1bInR5cGVkIiwiaXNJbnRlZ2VyIiwibWF0cml4Il0sQWk9T2JqZWN0KHMuYSkoRWksU2ksZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuaXNJbnRlZ2VyLG49ZS5tYXRyaXg7cmV0dXJuIHQoRWkseyJNYXRyaXgsIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBlLnJlc2hhcGU/ZS5yZXNoYXBlKHQpOm4oT2JqZWN0KEkubikoZS52YWx1ZU9mKCksdCkpfSwiQXJyYXksIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24oZSl7aWYoIXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBzaXplIGZvciBkaW1lbnNpb246ICIrZSl9KSxPYmplY3QoSS5uKShlLHQpfX0pfSksQ2k9cigxMyksVGk9WyJjb25maWciLCJtYXRyaXgiXSxfaT1PYmplY3Qocy5hKSgicmVzaXplIixUaSxmdW5jdGlvbihlKXt2YXIgYT1lLmNvbmZpZyxvPWUubWF0cml4O3JldHVybiBmdW5jdGlvbihlLHQscil7aWYoMiE9PWFyZ3VtZW50cy5sZW5ndGgmJjMhPT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBDaS5hKCJyZXNpemUiLGFyZ3VtZW50cy5sZW5ndGgsMiwzKTtpZihPYmplY3QoaWUudikodCkmJih0PXQudmFsdWVPZigpKSxPYmplY3QoaWUuZSkodFswXSkmJih0PXQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QoaWUuZSkoZSk/ZS50b051bWJlcigpOmV9KSksT2JqZWN0KGllLnYpKGUpKXJldHVybiBlLnJlc2l6ZSh0LHIsITApO2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe2lmKHZvaWQgMCE9PXIpe2lmKCJzdHJpbmciIT10eXBlb2Ygcnx8MSE9PXIubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIlNpbmdsZSBjaGFyYWN0ZXIgZXhwZWN0ZWQgYXMgZGVmYXVsdFZhbHVlIil9ZWxzZSByPSIgIjtpZigxIT09dC5sZW5ndGgpdGhyb3cgbmV3IHouYSh0Lmxlbmd0aCwxKTt2YXIgbj10WzBdO2lmKCJudW1iZXIiIT10eXBlb2Ygbnx8IU9iamVjdChFLmkpKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgc2l6ZSwgbXVzdCBjb250YWluIHBvc2l0aXZlIGludGVnZXJzIChzaXplOiAiK09iamVjdChKLmQpKHQpKyIpIik7e2lmKGUubGVuZ3RoPm4pcmV0dXJuIGUuc3Vic3RyaW5nKDAsbik7aWYoZS5sZW5ndGg8bil7Zm9yKHZhciBpPWUsYT0wLG89bi1lLmxlbmd0aDthPG87YSsrKWkrPXI7cmV0dXJuIGl9cmV0dXJuIGV9fShlLHQscik7dmFyIG49IUFycmF5LmlzQXJyYXkoZSkmJiJBcnJheSIhPT1hLm1hdHJpeDtpZigwPT09dC5sZW5ndGgpe2Zvcig7QXJyYXkuaXNBcnJheShlKTspZT1lWzBdO3JldHVybiBPYmplY3QoYWUuYSkoZSl9QXJyYXkuaXNBcnJheShlKXx8KGU9W2VdKSxlPU9iamVjdChhZS5hKShlKTt2YXIgaT1PYmplY3QoSS5vKShlLHQscik7cmV0dXJuIG4/byhpKTppfX0pLElpPVsidHlwZWQiLCJJbmRleCIsIm1hdHJpeCIsInJhbmdlIl0scWk9T2JqZWN0KHMuYSkoInJvdyIsSWksZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxpPWUuSW5kZXgscj1lLm1hdHJpeCxhPWUucmFuZ2U7cmV0dXJuIHQoInJvdyIseyJNYXRyaXgsIG51bWJlciI6biwiQXJyYXksIG51bWJlciI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihyKE9iamVjdChhZS5hKShlKSksdCkudmFsdWVPZigpfX0pO2Z1bmN0aW9uIG4oZSx0KXtpZigyIT09ZS5zaXplKCkubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiT25seSB0d28gZGltZW5zaW9uYWwgbWF0cml4IGlzIHN1cHBvcnRlZCIpO09iamVjdChJLnMpKHQsZS5zaXplKClbMF0pO3ZhciByPWEoMCxlLnNpemUoKVsxXSksbj1uZXcgaSh0LHIpO3JldHVybiBlLnN1YnNldChuKX19KSxCaT1bInR5cGVkIiwiY29uZmlnIiwiP21hdHJpeCJdLGtpPU9iamVjdChzLmEpKCJzaXplIixCaSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5jb25maWcsbj1lLm1hdHJpeDtyZXR1cm4gdCgic2l6ZSIse01hdHJpeDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jcmVhdGUoZS5zaXplKCkpfSxBcnJheTpJLmEsc3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiJBcnJheSI9PT1yLm1hdHJpeD9bZS5sZW5ndGhdOm4oW2UubGVuZ3RoXSl9LCJudW1iZXIgfCBDb21wbGV4IHwgQmlnTnVtYmVyIHwgVW5pdCB8IGJvb2xlYW4gfCBudWxsIjpmdW5jdGlvbigpe3JldHVybiJBcnJheSI9PT1yLm1hdHJpeD9bXTpuP24oW10pOk9pKCl9fSl9KSx6aT0ic3F1ZWV6ZSIsRGk9WyJ0eXBlZCIsIm1hdHJpeCJdLFJpPU9iamVjdChzLmEpKHppLERpLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLm1hdHJpeDtyZXR1cm4gdCh6aSx7QXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChJLnApKE9iamVjdChhZS5hKShlKSl9LE1hdHJpeDpmdW5jdGlvbihlKXt2YXIgdD1PYmplY3QoSS5wKShlLnRvQXJyYXkoKSk7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/cih0KTp0fSxhbnk6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChhZS5hKShlKX19KX0pO2Z1bmN0aW9uIFBpKGUpe3JldHVybihQaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIEZpKGUsdCl7aWYoJGkoZSkmJkxpKGUsdCkpcmV0dXJuIGVbdF07aWYoImZ1bmN0aW9uIj09dHlwZW9mIGVbdF0mJkhpKGUsdCkpdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWNjZXNzIG1ldGhvZCAiJyt0KyciIGFzIGEgcHJvcGVydHknKTt0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0byBwcm9wZXJ0eSAiJyt0KyciJyl9ZnVuY3Rpb24gVWkoZSx0LHIpe2lmKCRpKGUpJiZMaShlLHQpKXJldHVybiBlW3RdPXI7dGhyb3cgbmV3IEVycm9yKCdObyBhY2Nlc3MgdG8gcHJvcGVydHkgIicrdCsnIicpfWZ1bmN0aW9uIExpKGUsdCl7aWYoZSYmIm9iamVjdCI9PT1QaShlKSl7aWYoT2JqZWN0KGFlLmYpKEdpLHQpKXJldHVybiAxO2lmKCEodCBpbiBPYmplY3QucHJvdG90eXBlfHx0IGluIEZ1bmN0aW9uLnByb3RvdHlwZSkpcmV0dXJuIDF9fWZ1bmN0aW9uIEhpKGUsdCl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIj09dHlwZW9mIGVbdF0mJiEoT2JqZWN0KGFlLmYpKGUsdCkmJk9iamVjdC5nZXRQcm90b3R5cGVPZiYmdCBpbiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpKXtpZihPYmplY3QoYWUuZikoWmksdCkpcmV0dXJuIDE7aWYoISh0IGluIE9iamVjdC5wcm90b3R5cGV8fHQgaW4gRnVuY3Rpb24ucHJvdG90eXBlKSlyZXR1cm4gMX19ZnVuY3Rpb24gJGkoZSl7cmV0dXJuIm9iamVjdCI9PT1QaShlKSYmZSYmZS5jb25zdHJ1Y3Rvcj09PU9iamVjdH12YXIgR2k9e2xlbmd0aDohMCxuYW1lOiEwfSxaaT17dG9TdHJpbmc6ITAsdmFsdWVPZjohMCx0b0xvY2FsZVN0cmluZzohMH0sVmk9WyJ0eXBlZCIsIm1hdHJpeCJdLEppPU9iamVjdChzLmEpKCJzdWJzZXQiLFZpLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQsaT1lLm1hdHJpeDtyZXR1cm4gdCgic3Vic2V0Iix7IkFycmF5LCBJbmRleCI6ZnVuY3Rpb24oZSx0KXt2YXIgcj1pKGUpLnN1YnNldCh0KTtyZXR1cm4gdC5pc1NjYWxhcigpP3I6ci52YWx1ZU9mKCl9LCJNYXRyaXgsIEluZGV4IjpmdW5jdGlvbihlLHQpe3JldHVybiBlLnN1YnNldCh0KX0sIk9iamVjdCwgSW5kZXgiOlhpLCJzdHJpbmcsIEluZGV4IjpXaSwiQXJyYXksIEluZGV4LCBhbnkiOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gaShPYmplY3QoYWUuYSkoZSkpLnN1YnNldCh0LHIsdm9pZCAwKS52YWx1ZU9mKCl9LCJBcnJheSwgSW5kZXgsIGFueSwgYW55IjpmdW5jdGlvbihlLHQscixuKXtyZXR1cm4gaShPYmplY3QoYWUuYSkoZSkpLnN1YnNldCh0LHIsbikudmFsdWVPZigpfSwiTWF0cml4LCBJbmRleCwgYW55IjpmdW5jdGlvbihlLHQscil7cmV0dXJuIGUuY2xvbmUoKS5zdWJzZXQodCxyKX0sIk1hdHJpeCwgSW5kZXgsIGFueSwgYW55IjpmdW5jdGlvbihlLHQscixuKXtyZXR1cm4gZS5jbG9uZSgpLnN1YnNldCh0LHIsbil9LCJzdHJpbmcsIEluZGV4LCBzdHJpbmciOllpLCJzdHJpbmcsIEluZGV4LCBzdHJpbmcsIHN0cmluZyI6WWksIk9iamVjdCwgSW5kZXgsIGFueSI6UWl9KX0pO2Z1bmN0aW9uIFdpKHQsZSl7aWYoIU9iamVjdChpZS50KShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbmRleCBleHBlY3RlZCIpO2lmKDEhPT1lLnNpemUoKS5sZW5ndGgpdGhyb3cgbmV3IHouYShlLnNpemUoKS5sZW5ndGgsMSk7dmFyIHI9dC5sZW5ndGg7T2JqZWN0KEkucykoZS5taW4oKVswXSxyKSxPYmplY3QoSS5zKShlLm1heCgpWzBdLHIpO3ZhciBuPWUuZGltZW5zaW9uKDApLGk9IiI7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbihlKXtpKz10LmNoYXJBdChlKX0pLGl9ZnVuY3Rpb24gWWkoZSx0LHIsbil7aWYoIXR8fCEwIT09dC5pc0luZGV4KXRocm93IG5ldyBUeXBlRXJyb3IoIkluZGV4IGV4cGVjdGVkIik7aWYoMSE9PXQuc2l6ZSgpLmxlbmd0aCl0aHJvdyBuZXcgei5hKHQuc2l6ZSgpLmxlbmd0aCwxKTtpZih2b2lkIDAhPT1uKXtpZigic3RyaW5nIiE9dHlwZW9mIG58fDEhPT1uLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTaW5nbGUgY2hhcmFjdGVyIGV4cGVjdGVkIGFzIGRlZmF1bHRWYWx1ZSIpfWVsc2Ugbj0iICI7dmFyIGk9dC5kaW1lbnNpb24oMCk7aWYoaS5zaXplKClbMF0hPT1yLmxlbmd0aCl0aHJvdyBuZXcgei5hKGkuc2l6ZSgpWzBdLHIubGVuZ3RoKTt2YXIgYT1lLmxlbmd0aDtPYmplY3QoSS5zKSh0Lm1pbigpWzBdKSxPYmplY3QoSS5zKSh0Lm1heCgpWzBdKTtmb3IodmFyIG89W10scz0wO3M8YTtzKyspb1tzXT1lLmNoYXJBdChzKTtpZihpLmZvckVhY2goZnVuY3Rpb24oZSx0KXtvW2VdPXIuY2hhckF0KHRbMF0pfSksby5sZW5ndGg+YSlmb3IodmFyIHU9YS0xLGM9by5sZW5ndGg7dTxjO3UrKylvW3VdfHwob1t1XT1uKTtyZXR1cm4gby5qb2luKCIiKX1mdW5jdGlvbiBYaShlLHQpe2lmKDEhPT10LnNpemUoKS5sZW5ndGgpdGhyb3cgbmV3IHouYSh0LnNpemUoKSwxKTt2YXIgcj10LmRpbWVuc2lvbigwKTtpZigic3RyaW5nIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3RyaW5nIGV4cGVjdGVkIGFzIGluZGV4IHRvIHJldHJpZXZlIGFuIG9iamVjdCBwcm9wZXJ0eSIpO3JldHVybiBGaShlLHIpfWZ1bmN0aW9uIFFpKGUsdCxyKXtpZigxIT09dC5zaXplKCkubGVuZ3RoKXRocm93IG5ldyB6LmEodC5zaXplKCksMSk7dmFyIG49dC5kaW1lbnNpb24oMCk7aWYoInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoIlN0cmluZyBleHBlY3RlZCBhcyBpbmRleCB0byByZXRyaWV2ZSBhbiBvYmplY3QgcHJvcGVydHkiKTt2YXIgaT1PYmplY3QoYWUuYSkoZSk7cmV0dXJuIFVpKGksbixyKSxpfXZhciBLaT1bInR5cGVkIiwibWF0cml4Il0sZWE9T2JqZWN0KHMuYSkoInRyYW5zcG9zZSIsS2ksZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUubWF0cml4LG49dCgidHJhbnNwb3NlIix7QXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIG4ocihlKSkudmFsdWVPZigpfSxNYXRyaXg6ZnVuY3Rpb24oZSl7dmFyIHQscj1lLnNpemUoKTtzd2l0Y2goci5sZW5ndGgpe2Nhc2UgMTp0PWUuY2xvbmUoKTticmVhaztjYXNlIDI6dmFyIG49clswXSxpPXJbMV07aWYoMD09PWkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNhbm5vdCB0cmFuc3Bvc2UgYSAyRCBtYXRyaXggd2l0aCBubyBjb2x1bW5zIChzaXplOiAiK09iamVjdChKLmQpKHIpKyIpIik7c3dpdGNoKGUuc3RvcmFnZSgpKXtjYXNlImRlbnNlIjp0PWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG4saT1lLl9kYXRhLGE9W10sbz0wO288cjtvKyspe249YVtvXT1bXTtmb3IodmFyIHM9MDtzPHQ7cysrKW5bc109T2JqZWN0KGFlLmEpKGlbc11bb10pfXJldHVybiBlLmNyZWF0ZURlbnNlTWF0cml4KHtkYXRhOmEsc2l6ZTpbcix0XSxkYXRhdHlwZTplLl9kYXRhdHlwZX0pfShlLG4saSk7YnJlYWs7Y2FzZSJzcGFyc2UiOnQ9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbixpLGEsbz1lLl92YWx1ZXMscz1lLl9pbmRleCx1PWUuX3B0cixjPW8/W106dm9pZCAwLGY9W10sbD1bXSxwPVtdLG09MDttPHQ7bSsrKXBbbV09MDtmb3Iobj0wLGk9cy5sZW5ndGg7bjxpO24rKylwW3Nbbl1dKys7Zm9yKHZhciBoPTAsZD0wO2Q8dDtkKyspbC5wdXNoKGgpLGgrPXBbZF0scFtkXT1sW2RdO2ZvcihsLnB1c2goaCksYT0wO2E8cjthKyspZm9yKHZhciB5PXVbYV0sZz11W2ErMV0sdj15O3Y8Zzt2Kyspe3ZhciBiPXBbc1t2XV0rKztmW2JdPWEsbyYmKGNbYl09T2JqZWN0KGFlLmEpKG9bdl0pKX1yZXR1cm4gZS5jcmVhdGVTcGFyc2VNYXRyaXgoe3ZhbHVlczpjLGluZGV4OmYscHRyOmwsc2l6ZTpbcix0XSxkYXRhdHlwZTplLl9kYXRhdHlwZX0pfShlLG4saSl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTWF0cml4IG11c3QgYmUgYSB2ZWN0b3Igb3IgdHdvIGRpbWVuc2lvbmFsIChzaXplOiAiK09iamVjdChKLmQpKHRoaXMuX3NpemUpKyIpIil9cmV0dXJuIHR9LGFueTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KGFlLmEpKGUpfX0pO3JldHVybiBufSksdGE9ImN0cmFuc3Bvc2UiLHJhPVsidHlwZWQiLCJ0cmFuc3Bvc2UiLCJjb25qIl0sbmE9T2JqZWN0KHMuYSkodGEscmEsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUudHJhbnNwb3NlLG49ZS5jb25qO3JldHVybiB0KHRhLHthbnk6ZnVuY3Rpb24oZSl7cmV0dXJuIG4ocihlKSl9fSl9KSxpYT1bInR5cGVkIiwiY29uZmlnIiwibWF0cml4IiwiQmlnTnVtYmVyIl0sYWE9T2JqZWN0KHMuYSkoInplcm9zIixpYSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5jb25maWcsbz1lLm1hdHJpeCxzPWUuQmlnTnVtYmVyO3JldHVybiB0KCJ6ZXJvcyIseyIiOmZ1bmN0aW9uKCl7cmV0dXJuIkFycmF5Ij09PXIubWF0cml4P24oW10pOm4oW10sImRlZmF1bHQiKX0sIi4uLm51bWJlciB8IEJpZ051bWJlciB8IHN0cmluZyI6ZnVuY3Rpb24oZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlW2UubGVuZ3RoLTFdKXJldHVybiJBcnJheSI9PT1yLm1hdHJpeD9uKGUpOm4oZSwiZGVmYXVsdCIpO3ZhciB0PWUucG9wKCk7cmV0dXJuIG4oZSx0KX0sQXJyYXk6bixNYXRyaXg6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9yYWdlKCk7cmV0dXJuIG4oZS52YWx1ZU9mKCksdCl9LCJBcnJheSB8IE1hdHJpeCwgc3RyaW5nIjpmdW5jdGlvbihlLHQpe3JldHVybiBuKGUudmFsdWVPZigpLHQpfX0pO2Z1bmN0aW9uIG4oZSx0KXt2YXIgbixyPShuPSExLGUuZm9yRWFjaChmdW5jdGlvbihlLHQscil7T2JqZWN0KGllLmUpKGUpJiYobj0hMCxyW3RdPWUudG9OdW1iZXIoKSl9KSxuKT9uZXcgcygwKTowO2lmKGUuZm9yRWFjaChmdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGV8fCFPYmplY3QoRS5pKShlKXx8ZTwwKXRocm93IG5ldyBFcnJvcigiUGFyYW1ldGVycyBpbiBmdW5jdGlvbiB6ZXJvcyBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzIil9KSx0KXt2YXIgaT1vKHQpO3JldHVybiAwPGUubGVuZ3RoP2kucmVzaXplKGUscik6aX12YXIgYT1bXTtyZXR1cm4gMDxlLmxlbmd0aD9PYmplY3QoSS5vKShhLGUscik6YX19KSxvYT1bInR5cGVkIl0sc2E9T2JqZWN0KHMuYSkoImVyZiIsb2EsZnVuY3Rpb24oZSl7dmFyIHQ9KDAsZS50eXBlZCkoIm5hbWUiLHtudW1iZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5hYnMoZSk7cmV0dXJuIHBhPD10P09iamVjdChFLm4pKGUpOnQ8PXVhP09iamVjdChFLm4pKGUpKmZ1bmN0aW9uKGUpe3ZhciB0LHI9ZSplLG49ZmFbMF1bNF0qcixpPXI7Zm9yKHQ9MDt0PDM7dCs9MSluPShuK2ZhWzBdW3RdKSpyLGk9KGkrbGFbMF1bdF0pKnI7cmV0dXJuIGUqKG4rZmFbMF1bM10pLyhpK2xhWzBdWzNdKX0odCk6dDw9ND9PYmplY3QoRS5uKShlKSooMS1mdW5jdGlvbihlKXt2YXIgdCxyPWZhWzFdWzhdKmUsbj1lO2Zvcih0PTA7dDw3O3QrPTEpcj0ocitmYVsxXVt0XSkqZSxuPShuK2xhWzFdW3RdKSplO3ZhciBpPShyK2ZhWzFdWzddKS8obitsYVsxXVs3XSksYT1wYXJzZUludCgxNiplKS8xNixvPShlLWEpKihlK2EpO3JldHVybiBNYXRoLmV4cCgtYSphKSpNYXRoLmV4cCgtbykqaX0odCkpOk9iamVjdChFLm4pKGUpKigxLWZ1bmN0aW9uKGUpe3ZhciB0LHI9MS8oZSplKSxuPWZhWzJdWzVdKnIsaT1yO2Zvcih0PTA7dDw0O3QrPTEpbj0obitmYVsyXVt0XSkqcixpPShpK2xhWzJdW3RdKSpyO3ZhciBhPXIqKG4rZmFbMl1bNF0pLyhpK2xhWzJdWzRdKTthPShjYS1hKS9lLHI9cGFyc2VJbnQoMTYqZSkvMTY7dmFyIG89KGUtcikqKGUrcik7cmV0dXJuIE1hdGguZXhwKC1yKnIpKk1hdGguZXhwKC1vKSphfSh0KSl9LCJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7cmV0dXJuIG9lKGUsdCl9fSk7cmV0dXJuIHR9KSx1YT0uNDY4NzUsY2E9LjU2NDE4OTU4MzU0Nzc1NjMsZmE9W1szLjE2MTEyMzc0Mzg3MDU2NTUsMTEzLjg2NDE1NDE1MTA1MDE2LDM3Ny40ODUyMzc2ODUzMDIsMzIwOS4zNzc1ODkxMzg0Njk0LC4xODU3Nzc3MDYxODQ2MDMxNV0sWy41NjQxODg0OTY5ODg2NzAxLDguODgzMTQ5Nzk0Mzg4Mzc3LDY2LjExOTE5MDYzNzE0MTYzLDI5OC42MzUxMzgxOTc0MDAxLDg4MS45NTIyMjEyNDE3NjksMTcxMi4wNDc2MTI2MzQwNzA3LDIwNTEuMDc4Mzc3ODI2MDcxNiwxMjMwLjMzOTM1NDc5Nzk5NzIsMi4xNTMxMTUzNTQ3NDQwMzgzZS04XSxbLjMwNTMyNjYzNDk2MTIzMjM2LC4zNjAzNDQ4OTk5NDk4MDQ0NSwuMTI1NzgxNzI2MTExMjI5MjYsLjAxNjA4Mzc4NTE0ODc0MjI3NSwuMDAwNjU4NzQ5MTYxNTI5ODM3OCwuMDE2MzE1Mzg3MTM3MzAyMDk3XV0sbGE9W1syMy42MDEyOTA5NTIzNDQxMjIsMjQ0LjAyNDYzNzkzNDQ0NDE3LDEyODIuNjE2NTI2MDc3MzcyMywyODQ0LjIzNjgzMzQzOTE3MV0sWzE1Ljc0NDkyNjExMDcwOTgzNSwxMTcuNjkzOTUwODkxMzEyNSw1MzcuMTgxMTAxODYyMDA5OSwxNjIxLjM4OTU3NDU2NjY5MDMsMzI5MC43OTkyMzU3MzM0NTk3LDQzNjIuNjE5MDkwMTQzMjQ3LDM0MzkuMzY3Njc0MTQzNzIxNiwxMjMwLjMzOTM1NDgwMzc0OTVdLFsyLjU2ODUyMDE5MjI4OTgyMiwxLjg3Mjk1Mjg0OTkyMzQ2MDQsLjUyNzkwNTEwMjk1MTQyODUsLjA2MDUxODM0MTMxMjQ0MTMyLC4wMDIzMzUyMDQ5NzYyNjg2OTE4XV0scGE9TWF0aC5wb3coMiw1MyksbWE9WyJ0eXBlZCIsImlzTmFOIiwiaXNOdW1lcmljIl0saGE9T2JqZWN0KHMuYSkoIm1vZGUiLG1hLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQsbz1lLmlzTmFOLHM9ZS5pc051bWVyaWM7cmV0dXJuIHQoIm1vZGUiLHsiQXJyYXkgfCBNYXRyaXgiOnIsIi4uLiI6ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSl9fSk7ZnVuY3Rpb24gcihlKXtpZigwPT09KGU9T2JqZWN0KEkuZSkoZS52YWx1ZU9mKCkpKS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FsY3VsYXRlIG1vZGUgb2YgYW4gZW1wdHkgYXJyYXkiKTtmb3IodmFyIHQ9e30scj1bXSxuPTAsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO2lmKHMoYSkmJm8oYSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FsY3VsYXRlIG1vZGUgb2YgYW4gYXJyYXkgY29udGFpbmluZyBOYU4gdmFsdWVzIik7YSBpbiB0fHwodFthXT0wKSx0W2FdKyssdFthXT09PW4/ci5wdXNoKGEpOnRbYV0+biYmKG49dFthXSxyPVthXSl9cmV0dXJuIHJ9fSk7ZnVuY3Rpb24gZGEoZSx0LHIpe3ZhciBuO3JldHVybi0xIT09U3RyaW5nKGUpLmluZGV4T2YoIlVuZXhwZWN0ZWQgdHlwZSIpPyhuPTI8YXJndW1lbnRzLmxlbmd0aD8iICh0eXBlOiAiK09iamVjdChpZS5NKShyKSsiLCB2YWx1ZTogIitKU09OLnN0cmluZ2lmeShyKSsiKSI6IiAodHlwZTogIitlLmRhdGEuYWN0dWFsKyIpIixuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsY3VsYXRlICIrdCsiLCB1bmV4cGVjdGVkIHR5cGUgb2YgYXJndW1lbnQiK24pKTotMSE9PVN0cmluZyhlKS5pbmRleE9mKCJjb21wbGV4IG51bWJlcnMiKT8obj0yPGFyZ3VtZW50cy5sZW5ndGg/IiAodHlwZTogIitPYmplY3QoaWUuTSkocikrIiwgdmFsdWU6ICIrSlNPTi5zdHJpbmdpZnkocikrIikiOiIiLG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxjdWxhdGUgIit0KyIsIG5vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycyIrbikpOmV9dmFyIHlhPVsidHlwZWQiLCJtdWx0aXBseSJdLGdhPU9iamVjdChzLmEpKCJwcm9kIix5YSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLG49ZS5tdWx0aXBseTtyZXR1cm4gdCgicHJvZCIseyJBcnJheSB8IE1hdHJpeCI6ciwiQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlciI6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInByb2QoQSwgZGltKSBpcyBub3QgeWV0IHN1cHBvcnRlZCIpfSwiLi4uIjpmdW5jdGlvbihlKXtyZXR1cm4gcihlKX19KTtmdW5jdGlvbiByKGUpe3ZhciByO2lmKEYoZSxmdW5jdGlvbih0KXt0cnl7cj12b2lkIDA9PT1yP3Q6bihyLHQpfWNhdGNoKGUpe3Rocm93IGRhKGUsInByb2QiLHQpfX0pLHZvaWQgMD09PXIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FsY3VsYXRlIHByb2Qgb2YgYW4gZW1wdHkgYXJyYXkiKTtyZXR1cm4gcn19KSx2YT1bInR5cGVkIl0sYmE9T2JqZWN0KHMuYSkoImZvcm1hdCIsdmEsZnVuY3Rpb24oZSl7cmV0dXJuKDAsZS50eXBlZCkoImZvcm1hdCIse2FueTpKLmQsImFueSwgT2JqZWN0IHwgZnVuY3Rpb24gfCBudW1iZXIiOkouZH0pfSkseGE9WyJ0eXBlZCJdLHdhPU9iamVjdChzLmEpKCJwcmludCIseGEsZnVuY3Rpb24oZSl7cmV0dXJuKDAsZS50eXBlZCkoInByaW50Iix7InN0cmluZywgT2JqZWN0IHwgQXJyYXkiOk5hLCJzdHJpbmcsIE9iamVjdCB8IEFycmF5LCBudW1iZXIgfCBPYmplY3QiOk5hfSl9KTtmdW5jdGlvbiBOYShlLGEsbyl7cmV0dXJuIGUucmVwbGFjZSgvXCQoW1x3Ll0rKS9nLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXQuc3BsaXQoIi4iKSxuPWFbci5zaGlmdCgpXTtyLmxlbmd0aCYmdm9pZCAwIT09bjspe3ZhciBpPXIuc2hpZnQoKTtuPWk/bltpXTpuKyIuIn1yZXR1cm4gdm9pZCAwIT09bj9PYmplY3QoaWUuSSkobik/bjpPYmplY3QoSi5kKShuLG8pOmV9KX12YXIgT2E9WyJ0eXBlZCIsIm1hdHJpeCJdLE1hPU9iamVjdChzLmEpKCJ0byIsT2EsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUubWF0cml4LG49WHQoe3R5cGVkOnR9KSxpPUt0KHt0eXBlZDp0fSksYT10KCJ0byIseyJVbml0LCBVbml0IHwgc3RyaW5nIjpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvKHQpfSwiTWF0cml4LCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oZSx0LGEpfSwiQXJyYXksIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBhKHIoZSkscih0KSkudmFsdWVPZigpfSwiQXJyYXksIE1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShyKGUpLHQpfSwiTWF0cml4LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHIodCkpfSwiTWF0cml4LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoZSx0LGEsITEpfSwiYW55LCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkodCxlLGEsITApfSwiQXJyYXksIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShyKGUpLHQsYSwhMSkudmFsdWVPZigpfSwiYW55LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShyKHQpLGUsYSwhMCkudmFsdWVPZigpfX0pO3JldHVybiBhfSksamE9ImlzUHJpbWUiLEVhPVsidHlwZWQiXSxTYT1PYmplY3Qocy5hKShqYSxFYSxmdW5jdGlvbihlKXt2YXIgdD0oMCxlLnR5cGVkKShqYSx7bnVtYmVyOmZ1bmN0aW9uKGUpe2lmKDAqZSE9MClyZXR1cm4hMTtpZihlPD0zKXJldHVybiAxPGU7aWYoZSUyPT0wfHxlJTM9PTApcmV0dXJuITE7Zm9yKHZhciB0PTU7dCp0PD1lO3QrPTYpaWYoZSV0PT0wfHxlJSh0KzIpPT0wKXJldHVybiExO3JldHVybiEwfSxCaWdOdW1iZXI6ZnVuY3Rpb24oZSl7aWYoMCplLnRvTnVtYmVyKCkhPTApcmV0dXJuITE7aWYoZS5sdGUoMykpcmV0dXJuIGUuZ3QoMSk7aWYoZS5tb2QoMikuZXEoMCl8fGUubW9kKDMpLmVxKDApKXJldHVybiExO2Zvcih2YXIgdD01O2UuZ3RlKHQqdCk7dCs9NilpZihlLm1vZCh0KS5lcSgwKXx8ZS5tb2QodCsyKS5lcSgwKSlyZXR1cm4hMTtyZXR1cm4hMH0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSx0KX19KTtyZXR1cm4gdH0pLEFhPVsibnVtYmVyIiwiP2JpZ251bWJlciIsIj9mcmFjdGlvbiJdLENhPU9iamVjdChzLmEpKCJudW1lcmljIixBYSxmdW5jdGlvbihlKXt2YXIgdD1lLm51bWJlcixyPWUuYmlnbnVtYmVyLG49ZS5mcmFjdGlvbixpPXtzdHJpbmc6ITAsbnVtYmVyOiEwLEJpZ051bWJlcjohMCxGcmFjdGlvbjohMH0sYT17bnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfSxCaWdOdW1iZXI6cj9mdW5jdGlvbihlKXtyZXR1cm4gcihlKX06d2ksRnJhY3Rpb246bj9mdW5jdGlvbihlKXtyZXR1cm4gbihlKX06Tml9O3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciByPU9iamVjdChpZS5NKShlKTtpZighKHIgaW4gaSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgIitlKycgb2YgdHlwZSAiJytyKyciOyB2YWxpZCBpbnB1dCB0eXBlcyBhcmUgJytPYmplY3Qua2V5cyhpKS5qb2luKCIsICIpKTtpZighKHQgaW4gYSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgIitlKycgdG8gdHlwZSAiJyt0KyciOyB2YWxpZCBvdXRwdXQgdHlwZXMgYXJlICcrT2JqZWN0LmtleXMoYSkuam9pbigiLCAiKSk7cmV0dXJuIHQ9PT1yP2U6YVt0XShlKX19KSxUYT0iZGl2aWRlU2NhbGFyIixfYT1bInR5cGVkIiwibnVtZXJpYyJdLElhPU9iamVjdChzLmEpKFRhLF9hLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQsaT1lLm51bWVyaWMsYT10KFRhLHsibnVtYmVyLCBudW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUvdH0sIkNvbXBsZXgsIENvbXBsZXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGl2KHQpfSwiQmlnTnVtYmVyLCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGl2KHQpfSwiRnJhY3Rpb24sIEZyYWN0aW9uIjpmdW5jdGlvbihlLHQpe3JldHVybiBlLmRpdih0KX0sIlVuaXQsIG51bWJlciB8IEZyYWN0aW9uIHwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3ZhciByPWUuY2xvbmUoKSxuPWkoMSxPYmplY3QoaWUuTSkodCkpO3JldHVybiByLnZhbHVlPWEobnVsbD09PXIudmFsdWU/ci5fbm9ybWFsaXplKG4pOnIudmFsdWUsdCkscn0sIm51bWJlciB8IEZyYWN0aW9uIHwgQmlnTnVtYmVyLCBVbml0IjpmdW5jdGlvbihlLHQpe3ZhciByPXQuY2xvbmUoKTtyPXIucG93KC0xKTt2YXIgbj1pKDEsT2JqZWN0KGllLk0pKGUpKTtyZXR1cm4gci52YWx1ZT1hKGUsbnVsbD09PXQudmFsdWU/dC5fbm9ybWFsaXplKG4pOnQudmFsdWUpLHJ9LCJVbml0LCBVbml0IjpmdW5jdGlvbihlLHQpe3JldHVybiBlLmRpdmlkZSh0KX19KTtyZXR1cm4gYX0pLHFhPVsidHlwZWQiLCJjb25maWciLCJpZGVudGl0eSIsIm11bHRpcGx5IiwibWF0cml4IiwiZnJhY3Rpb24iLCJudW1iZXIiLCJDb21wbGV4Il0sQmE9T2JqZWN0KHMuYSkoInBvdyIscWEsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxpPWUuY29uZmlnLGE9ZS5pZGVudGl0eSxvPWUubXVsdGlwbHkscj1lLm1hdHJpeCxzPWUubnVtYmVyLHU9ZS5mcmFjdGlvbixjPWUuQ29tcGxleDtyZXR1cm4gdCgicG93Iix7Im51bWJlciwgbnVtYmVyIjpuLCJDb21wbGV4LCBDb21wbGV4IjpmdW5jdGlvbihlLHQpe3JldHVybiBlLnBvdyh0KX0sIkJpZ051bWJlciwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiB0LmlzSW50ZWdlcigpfHwwPD1lfHxpLnByZWRpY3RhYmxlP2UucG93KHQpOm5ldyBjKGUudG9OdW1iZXIoKSwwKS5wb3codC50b051bWJlcigpLDApfSwiRnJhY3Rpb24sIEZyYWN0aW9uIjpmdW5jdGlvbihlLHQpe2lmKDE9PT10LmQpcmV0dXJuIGUucG93KHQpO2lmKGkucHJlZGljdGFibGUpdGhyb3cgbmV3IEVycm9yKCJGdW5jdGlvbiBwb3cgZG9lcyBub3Qgc3VwcG9ydCBub24taW50ZWdlciBleHBvbmVudHMgZm9yIGZyYWN0aW9ucy4iKTtyZXR1cm4gbihlLnZhbHVlT2YoKSx0LnZhbHVlT2YoKSl9LCJBcnJheSwgbnVtYmVyIjpmLCJBcnJheSwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBmKGUsdC50b051bWJlcigpKX0sIk1hdHJpeCwgbnVtYmVyIjpsLCJNYXRyaXgsIEJpZ051bWJlciI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbChlLHQudG9OdW1iZXIoKSl9LCJVbml0LCBudW1iZXIgfCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucG93KHQpfX0pO2Z1bmN0aW9uIG4oZSx0KXtpZihpLnByZWRpY3RhYmxlJiYhT2JqZWN0KEUuaSkodCkmJmU8MCl0cnl7dmFyIHI9dSh0KSxuPXMocik7aWYoKHQ9PT1ufHxNYXRoLmFicygodC1uKS90KTwxZS0xNCkmJnIuZCUyPT0xKXJldHVybihyLm4lMj09MD8xOi0xKSpNYXRoLnBvdygtZSx0KX1jYXRjaChlKXt9cmV0dXJuIGkucHJlZGljdGFibGUmJihlPC0xJiZ0PT09MS8wfHwtMTxlJiZlPDAmJnQ9PT0tMS8wKT9OYU46T2JqZWN0KEUuaSkodCl8fDA8PWV8fGkucHJlZGljdGFibGU/aHQoZSx0KTplKmU8MSYmdD09PTEvMHx8MTxlKmUmJnQ9PT0tMS8wPzA6bmV3IGMoZSwwKS5wb3codCwwKX1mdW5jdGlvbiBmKGUsdCl7aWYoIU9iamVjdChFLmkpKHQpfHx0PDApdGhyb3cgbmV3IFR5cGVFcnJvcigiRm9yIEFeYiwgYiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAodmFsdWUgaXMgIit0KyIpIik7dmFyIHI9T2JqZWN0KEkuYSkoZSk7aWYoMiE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRm9yIEFeYiwgQSBtdXN0IGJlIDIgZGltZW5zaW9uYWwgKEEgaGFzICIrci5sZW5ndGgrIiBkaW1lbnNpb25zKSIpO2lmKHJbMF0hPT1yWzFdKXRocm93IG5ldyBFcnJvcigiRm9yIEFeYiwgQSBtdXN0IGJlIHNxdWFyZSAoc2l6ZSBpcyAiK3JbMF0rIngiK3JbMV0rIikiKTtmb3IodmFyIG49YShyWzBdKS52YWx1ZU9mKCksaT1lOzE8PXQ7KTE9PSgxJnQpJiYobj1vKGksbikpLHQ+Pj0xLGk9byhpLGkpO3JldHVybiBufWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4gcihmKGUudmFsdWVPZigpLHQpKX19KTtmdW5jdGlvbiBrYSh0LGUpe3ZhciByPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKG49bi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpLHIucHVzaC5hcHBseShyLG4pfXJldHVybiByfWZ1bmN0aW9uIHphKGUsdCxyKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX12YXIgRGE9Ik51bWJlciBvZiBkZWNpbWFscyBpbiBmdW5jdGlvbiByb3VuZCBtdXN0IGJlIGFuIGludGVnZXIiLFJhPSJyb3VuZCIsUGE9WyJ0eXBlZCIsIm1hdHJpeCIsImVxdWFsU2NhbGFyIiwiemVyb3MiLCJCaWdOdW1iZXIiLCJEZW5zZU1hdHJpeCJdLEZhPU9iamVjdChzLmEpKFJhLFBhLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLm1hdHJpeCxuPWUuZXF1YWxTY2FsYXIsaT1lLnplcm9zLGE9ZS5CaWdOdW1iZXIsbz1lLkRlbnNlTWF0cml4LHM9c3Ioe3R5cGVkOnQsZXF1YWxTY2FsYXI6bn0pLHU9YnIoe3R5cGVkOnQsRGVuc2VNYXRyaXg6b30pLGM9S3Qoe3R5cGVkOnR9KSxmPXQoUmEsZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/a2EoT2JqZWN0KHIpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3phKHQsZSxyW2VdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocikpOmthKE9iamVjdChyKSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KX1yZXR1cm4gdH0oe30sVWEse0NvbXBsZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucm91bmQoKX0sIkNvbXBsZXgsIG51bWJlciI6ZnVuY3Rpb24oZSx0KXtpZih0JTEpdGhyb3cgbmV3IFR5cGVFcnJvcihEYSk7cmV0dXJuIGUucm91bmQodCl9LCJDb21wbGV4LCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7aWYoIXQuaXNJbnRlZ2VyKCkpdGhyb3cgbmV3IFR5cGVFcnJvcihEYSk7dmFyIHI9dC50b051bWJlcigpO3JldHVybiBlLnJvdW5kKHIpfSwibnVtYmVyLCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7aWYoIXQuaXNJbnRlZ2VyKCkpdGhyb3cgbmV3IFR5cGVFcnJvcihEYSk7cmV0dXJuIG5ldyBhKGUpLnRvRGVjaW1hbFBsYWNlcyh0LnRvTnVtYmVyKCkpfSxCaWdOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9EZWNpbWFsUGxhY2VzKDApfSwiQmlnTnVtYmVyLCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7aWYoIXQuaXNJbnRlZ2VyKCkpdGhyb3cgbmV3IFR5cGVFcnJvcihEYSk7cmV0dXJuIGUudG9EZWNpbWFsUGxhY2VzKHQudG9OdW1iZXIoKSl9LEZyYWN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJvdW5kKCl9LCJGcmFjdGlvbiwgbnVtYmVyIjpmdW5jdGlvbihlLHQpe2lmKHQlMSl0aHJvdyBuZXcgVHlwZUVycm9yKERhKTtyZXR1cm4gZS5yb3VuZCh0KX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSxmLCEwKX0sIlNwYXJzZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBzKGUsdCxmLCExKX0sIkRlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMoZSx0LGYsITEpfSwibnVtYmVyIHwgQ29tcGxleCB8IEJpZ051bWJlciwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBuKGUsMCk/aSh0LnNpemUoKSx0LnN0b3JhZ2UoKSk6dSh0LGUsZiwhMCl9LCJudW1iZXIgfCBDb21wbGV4IHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihlLDApP2kodC5zaXplKCksdC5zdG9yYWdlKCkpOmModCxlLGYsITApfSwiQXJyYXksIG51bWJlciB8IEJpZ051bWJlciI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhyKGUpLHQsZiwhMSkudmFsdWVPZigpfSwibnVtYmVyIHwgQ29tcGxleCB8IEJpZ051bWJlciwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMocih0KSxlLGYsITApLnZhbHVlT2YoKX19KSk7cmV0dXJuIGZ9KSxVYT17bnVtYmVyOmR0LCJudW1iZXIsIG51bWJlciI6ZnVuY3Rpb24oZSx0KXtpZighT2JqZWN0KEUuaSkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihEYSk7aWYodDwwfHwxNTx0KXRocm93IG5ldyBFcnJvcigiTnVtYmVyIG9mIGRlY2ltYWxzIGluIGZ1bmN0aW9uIHJvdW5kIG11c3QgYmUgaW4gdGUgcmFuZ2Ugb2YgMC0xNSIpO3JldHVybiBkdChlLHQpfX0sTGE9WyJjb25maWciLCJ0eXBlZCIsImRpdmlkZVNjYWxhciIsIkNvbXBsZXgiXSxIYT1PYmplY3Qocy5hKSgibG9nIixMYSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5jb25maWcsbj1lLmRpdmlkZVNjYWxhcixpPWUuQ29tcGxleCxhPXQoImxvZyIse251bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gMDw9ZXx8ci5wcmVkaWN0YWJsZT9vdChlKTpuZXcgaShlLDApLmxvZygpfSxDb21wbGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlLmxvZygpfSxCaWdOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIWUuaXNOZWdhdGl2ZSgpfHxyLnByZWRpY3RhYmxlP2UubG4oKTpuZXcgaShlLnRvTnVtYmVyKCksMCkubG9nKCl9LCJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7cmV0dXJuIG9lKGUsYSl9LCJhbnksIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihhKGUpLGEodCkpfX0pO3JldHVybiBhfSksJGE9WyJ0eXBlZCIsImNvbmZpZyIsImRpdmlkZVNjYWxhciIsImxvZyIsIkNvbXBsZXgiXSxHYT1PYmplY3Qocy5hKSgibG9nMXAiLCRhLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLmNvbmZpZyxuPWUuZGl2aWRlU2NhbGFyLGk9ZS5sb2csYT1lLkNvbXBsZXgsbz10KCJsb2cxcCIse251bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4tMTw9ZXx8ci5wcmVkaWN0YWJsZT9PYmplY3QoRS5rKShlKTpzKG5ldyBhKGUsMCkpfSxDb21wbGV4OnMsQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3ZhciB0PWUucGx1cygxKTtyZXR1cm4hdC5pc05lZ2F0aXZlKCl8fHIucHJlZGljdGFibGU/dC5sbigpOnMobmV3IGEoZS50b051bWJlcigpLDApKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSxvKX0sImFueSwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiBuKG8oZSksaSh0KSl9fSk7ZnVuY3Rpb24gcyhlKXt2YXIgdD1lLnJlKzE7cmV0dXJuIG5ldyBhKE1hdGgubG9nKE1hdGguc3FydCh0KnQrZS5pbSplLmltKSksTWF0aC5hdGFuMihlLmltLHQpKX1yZXR1cm4gb30pLFphPSJudGhSb290cyIsVmE9WyJjb25maWciLCJ0eXBlZCIsImRpdmlkZVNjYWxhciIsIkNvbXBsZXgiXSxKYT1PYmplY3Qocy5hKShaYSxWYSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLGY9KGUuY29uZmlnLGUuZGl2aWRlU2NhbGFyLGUuQ29tcGxleCkscj10KFphLHtDb21wbGV4OmZ1bmN0aW9uKGUpe3JldHVybiBuKGUsMil9LCJDb21wbGV4LCBudW1iZXIiOm59KSxsPVtmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGYoZSwwKX0sZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmKDAsZSl9LGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZigtZSwwKX0sZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBmKDAsLWUpfV07ZnVuY3Rpb24gbihlLHQpe2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoIlJvb3QgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyIpO2lmKDA9PT10KXRocm93IG5ldyBFcnJvcigiUm9vdCBtdXN0IGJlIG5vbi16ZXJvIik7aWYodCUxIT0wKXRocm93IG5ldyBFcnJvcigiUm9vdCBtdXN0IGJlIGFuIGludGVnZXIiKTtpZigwPT09ZXx8MD09PWUuYWJzKCkpcmV0dXJuW25ldyBmKDAsMCldO3ZhciByLG49Im51bWJlciI9PXR5cGVvZiBlOyFuJiYwIT09ZS5yZSYmMCE9PWUuaW18fChyPW4/MiooZTwwKTowPT09ZS5pbT8yKihlLnJlPDApOjIqKGUuaW08MCkrMSk7Zm9yKHZhciBpPWUuYXJnKCksYT1lLmFicygpLG89W10scz1NYXRoLnBvdyhhLDEvdCksdT0wO3U8dDt1Kyspe3ZhciBjPShyKzQqdSkvdDtjIT09TWF0aC5yb3VuZChjKT9vLnB1c2gobmV3IGYoe3I6cyxwaGk6KGkrMipNYXRoLlBJKnUpL3R9KSk6by5wdXNoKGxbYyU0XShzKSl9cmV0dXJuIG99cmV0dXJuIHJ9KSxXYT1bInR5cGVkIiwiZXF1YWxTY2FsYXIiLCJtYXRyaXgiLCJwb3ciLCJEZW5zZU1hdHJpeCJdLFlhPU9iamVjdChzLmEpKCJkb3RQb3ciLFdhLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLmVxdWFsU2NhbGFyLG49ZS5tYXRyaXgsaT1lLnBvdyxhPWUuRGVuc2VNYXRyaXgsbz1kcih7dHlwZWQ6dH0pLHM9Z24oe3R5cGVkOnQsRGVuc2VNYXRyaXg6YX0pLHU9c3Ioe3R5cGVkOnQsZXF1YWxTY2FsYXI6cn0pLGM9YnIoe3R5cGVkOnQsRGVuc2VNYXRyaXg6YX0pLGY9WHQoe3R5cGVkOnR9KSxsPUt0KHt0eXBlZDp0fSkscD10KCJkb3RQb3ciLHsiYW55LCBhbnkiOmksIlNwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBzKGUsdCxpLCExKX0sIlNwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8odCxlLGksITApfSwiRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhlLHQsaSwhMSl9LCJEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYoZSx0LGkpfSwiQXJyYXksIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBwKG4oZSksbih0KSkudmFsdWVPZigpfSwiQXJyYXksIE1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChuKGUpLHQpfSwiTWF0cml4LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChlLG4odCkpfSwiU3BhcnNlTWF0cml4LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZSx0LHAsITEpfSwiRGVuc2VNYXRyaXgsIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbChlLHQscCwhMSl9LCJhbnksIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyh0LGUscCwhMCl9LCJhbnksIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBsKHQsZSxwLCEwKX0sIkFycmF5LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwobihlKSx0LHAsITEpLnZhbHVlT2YoKX0sImFueSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwobih0KSxlLHAsITApLnZhbHVlT2YoKX19KTtyZXR1cm4gcH0pLFhhPSJkb3REaXZpZGUiLFFhPVsidHlwZWQiLCJtYXRyaXgiLCJlcXVhbFNjYWxhciIsImRpdmlkZVNjYWxhciIsIkRlbnNlTWF0cml4Il0sS2E9T2JqZWN0KHMuYSkoWGEsUWEsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUubWF0cml4LG49ZS5lcXVhbFNjYWxhcixpPWUuZGl2aWRlU2NhbGFyLGE9ZS5EZW5zZU1hdHJpeCxvPW5yKHt0eXBlZDp0LGVxdWFsU2NhbGFyOm59KSxzPWRyKHt0eXBlZDp0fSksdT1nbih7dHlwZWQ6dCxEZW5zZU1hdHJpeDphfSksYz1zcih7dHlwZWQ6dCxlcXVhbFNjYWxhcjpufSksZj1icih7dHlwZWQ6dCxEZW5zZU1hdHJpeDphfSksbD1YdCh7dHlwZWQ6dH0pLHA9S3Qoe3R5cGVkOnR9KSxtPXQoWGEseyJhbnksIGFueSI6aSwiU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZSx0LGksITEpfSwiU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyh0LGUsaSwhMCl9LCJEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBzKGUsdCxpLCExKX0sIkRlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbChlLHQsaSl9LCJBcnJheSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG0ocihlKSxyKHQpKS52YWx1ZU9mKCl9LCJBcnJheSwgTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBtKHIoZSksdCl9LCJNYXRyaXgsIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBtKGUscih0KSl9LCJTcGFyc2VNYXRyaXgsIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhlLHQsaSwhMSl9LCJEZW5zZU1hdHJpeCwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiBwKGUsdCxpLCExKX0sImFueSwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBmKHQsZSxpLCEwKX0sImFueSwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAodCxlLGksITApfSwiQXJyYXksIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChyKGUpLHQsaSwhMSkudmFsdWVPZigpfSwiYW55LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChyKHQpLGUsaSwhMCkudmFsdWVPZigpfX0pO3JldHVybiBtfSk7ZnVuY3Rpb24gZW8oZSl7dmFyIGQ9ZS5EZW5zZU1hdHJpeDtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUuc2l6ZSgpO2lmKDIhPT1uLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTWF0cml4IG11c3QgYmUgdHdvIGRpbWVuc2lvbmFsIChzaXplOiAiK09iamVjdChKLmQpKG4pKyIpIik7dmFyIGksYSxvLHM9blswXTtpZihzIT09blsxXSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTWF0cml4IG11c3QgYmUgc3F1YXJlIChzaXplOiAiK09iamVjdChKLmQpKG4pKyIpIik7aWYoT2JqZWN0KGllLnYpKHQpKXt2YXIgdT10LnNpemUoKTtpZigxPT09dS5sZW5ndGgpe2lmKHVbMF0hPT1zKXRocm93IG5ldyBSYW5nZUVycm9yKCJEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4iKTtmb3IoaT1bXSxvPXQuX2RhdGEsYT0wO2E8czthKyspaVthXT1bb1thXV07cmV0dXJuIG5ldyBkKHtkYXRhOmksc2l6ZTpbcywxXSxkYXRhdHlwZTp0Ll9kYXRhdHlwZX0pfWlmKDIhPT11Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggY29sdW1ucyBtdXN0IG1hdGNoIHZlY3RvciBsZW5ndGguIik7aWYodVswXSE9PXN8fDEhPT11WzFdKXRocm93IG5ldyBSYW5nZUVycm9yKCJEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4iKTtpZihPYmplY3QoaWUubikodCkpe2lmKHIpe2ZvcihpPVtdLG89dC5fZGF0YSxhPTA7YTxzO2ErKylpW2FdPVtvW2FdWzBdXTtyZXR1cm4gbmV3IGQoe2RhdGE6aSxzaXplOltzLDFdLGRhdGF0eXBlOnQuX2RhdGF0eXBlfSl9cmV0dXJuIHR9Zm9yKGk9W10sYT0wO2E8czthKyspaVthXT1bMF07Zm9yKHZhciBjPXQuX3ZhbHVlcyxmPXQuX2luZGV4LGw9dC5fcHRyLHA9bFsxXSxtPWxbMF07bTxwO20rKylpW2E9ZlttXV1bMF09Y1ttXTtyZXR1cm4gbmV3IGQoe2RhdGE6aSxzaXplOltzLDFdLGRhdGF0eXBlOnQuX2RhdGF0eXBlfSl9aWYoT2JqZWN0KGllLmIpKHQpKXt2YXIgaD1PYmplY3QoSS5hKSh0KTtpZigxPT09aC5sZW5ndGgpe2lmKGhbMF0hPT1zKXRocm93IG5ldyBSYW5nZUVycm9yKCJEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4iKTtmb3IoaT1bXSxhPTA7YTxzO2ErKylpW2FdPVt0W2FdXTtyZXR1cm4gbmV3IGQoe2RhdGE6aSxzaXplOltzLDFdfSl9aWYoMiE9PWgubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4iKTtpZihoWzBdIT09c3x8MSE9PWhbMV0pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkRpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IGNvbHVtbnMgbXVzdCBtYXRjaCB2ZWN0b3IgbGVuZ3RoLiIpO2ZvcihpPVtdLGE9MDthPHM7YSsrKWlbYV09W3RbYV1bMF1dO3JldHVybiBuZXcgZCh7ZGF0YTppLHNpemU6W3MsMV19KX19fXZhciB0bz1bInR5cGVkIiwibWF0cml4IiwiZGl2aWRlU2NhbGFyIiwibXVsdGlwbHlTY2FsYXIiLCJzdWJ0cmFjdCIsImVxdWFsU2NhbGFyIiwiRGVuc2VNYXRyaXgiXSxybz1PYmplY3Qocy5hKSgibHNvbHZlIix0byxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5tYXRyaXgsdj1lLmRpdmlkZVNjYWxhcixiPWUubXVsdGlwbHlTY2FsYXIseD1lLnN1YnRyYWN0LHc9ZS5lcXVhbFNjYWxhcixOPWUuRGVuc2VNYXRyaXgsTz1lbyh7RGVuc2VNYXRyaXg6Tn0pO3JldHVybiB0KCJsc29sdmUiLHsiU3BhcnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixpPSh0PU8oZSx0LCEwKSkuX2RhdGEsYT1lLl9zaXplWzBdLG89ZS5fc2l6ZVsxXSxzPWUuX3ZhbHVlcyx1PWUuX2luZGV4LGM9ZS5fcHRyLGY9W10sbD0wO2w8bztsKyspe3ZhciBwPWlbbF1bMF18fDA7aWYodyhwLDApKWZbbF09WzBdO2Vsc2V7dmFyIG09MCxoPVtdLGQ9W10seT1jW2wrMV07Zm9yKG49Y1tsXTtuPHk7bisrKShyPXVbbl0pPT09bD9tPXNbbl06bDxyJiYoaC5wdXNoKHNbbl0pLGQucHVzaChyKSk7aWYodyhtLDApKXRocm93IG5ldyBFcnJvcigiTGluZWFyIHN5c3RlbSBjYW5ub3QgYmUgc29sdmVkIHNpbmNlIG1hdHJpeCBpcyBzaW5ndWxhciIpO3ZhciBnPXYocCxtKTtmb3Iobj0wLHk9ZC5sZW5ndGg7bjx5O24rKylyPWRbbl0saVtyXT1beChpW3JdWzBdfHwwLGIoZyxoW25dKSldO2ZbbF09W2ddfX1yZXR1cm4gbmV3IE4oe2RhdGE6ZixzaXplOlthLDFdfSl9KGUsdCl9LCJEZW5zZU1hdHJpeCwgQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oZSx0KX0sIkFycmF5LCBBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihyKGUpLHQpLnZhbHVlT2YoKX19KTtmdW5jdGlvbiBuKGUsdCl7Zm9yKHZhciByPSh0PU8oZSx0LCEwKSkuX2RhdGEsbj1lLl9zaXplWzBdLGk9ZS5fc2l6ZVsxXSxhPVtdLG89ZS5fZGF0YSxzPTA7czxpO3MrKyl7dmFyIHU9cltzXVswXXx8MCxjPXZvaWQgMDtpZih3KHUsMCkpYz0wO2Vsc2V7dmFyIGY9b1tzXVtzXTtpZih3KGYsMCkpdGhyb3cgbmV3IEVycm9yKCJMaW5lYXIgc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQgc2luY2UgbWF0cml4IGlzIHNpbmd1bGFyIik7Yz12KHUsZik7Zm9yKHZhciBsPXMrMTtsPG47bCsrKXJbbF09W3gocltsXVswXXx8MCxiKGMsb1tsXVtzXSkpXX1hW3NdPVtjXX1yZXR1cm4gbmV3IE4oe2RhdGE6YSxzaXplOltuLDFdfSl9fSksbm89WyJ0eXBlZCIsIm1hdHJpeCIsImRpdmlkZVNjYWxhciIsIm11bHRpcGx5U2NhbGFyIiwic3VidHJhY3QiLCJlcXVhbFNjYWxhciIsIkRlbnNlTWF0cml4Il0saW89T2JqZWN0KHMuYSkoInVzb2x2ZSIsbm8sZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUubWF0cml4LGI9ZS5kaXZpZGVTY2FsYXIseD1lLm11bHRpcGx5U2NhbGFyLHc9ZS5zdWJ0cmFjdCxOPWUuZXF1YWxTY2FsYXIsTz1lLkRlbnNlTWF0cml4LE09ZW8oe0RlbnNlTWF0cml4Ok99KTtyZXR1cm4gdCgidXNvbHZlIix7IlNwYXJzZU1hdHJpeCwgQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByLG4saT0odD1NKGUsdCwhMCkpLl9kYXRhLGE9ZS5fc2l6ZVswXSxvPWUuX3NpemVbMV0scz1lLl92YWx1ZXMsdT1lLl9pbmRleCxjPWUuX3B0cixmPVtdLGw9by0xOzA8PWw7bC0tKXt2YXIgcD1pW2xdWzBdfHwwO2lmKE4ocCwwKSlmW2xdPVswXTtlbHNle3ZhciBtPTAsaD1bXSxkPVtdLHk9Y1tsXSxnPWNbbCsxXTtmb3Iobj1nLTE7eTw9bjtuLS0pKHI9dVtuXSk9PT1sP209c1tuXTpyPGwmJihoLnB1c2goc1tuXSksZC5wdXNoKHIpKTtpZihOKG0sMCkpdGhyb3cgbmV3IEVycm9yKCJMaW5lYXIgc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQgc2luY2UgbWF0cml4IGlzIHNpbmd1bGFyIik7dmFyIHY9YihwLG0pO2ZvcihuPTAsZz1kLmxlbmd0aDtuPGc7bisrKXI9ZFtuXSxpW3JdPVt3KGlbcl1bMF0seCh2LGhbbl0pKV07ZltsXT1bdl19fXJldHVybiBuZXcgTyh7ZGF0YTpmLHNpemU6W2EsMV19KX0oZSx0KX0sIkRlbnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbihlLHQpfSwiQXJyYXksIEFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBuKHIoZSksdCkudmFsdWVPZigpfX0pO2Z1bmN0aW9uIG4oZSx0KXtmb3IodmFyIHI9KHQ9TShlLHQsITApKS5fZGF0YSxuPWUuX3NpemVbMF0saT1lLl9zaXplWzFdLGE9W10sbz1lLl9kYXRhLHM9aS0xOzA8PXM7cy0tKXt2YXIgdT1yW3NdWzBdfHwwLGM9dm9pZCAwO2lmKE4odSwwKSljPTA7ZWxzZXt2YXIgZj1vW3NdW3NdO2lmKE4oZiwwKSl0aHJvdyBuZXcgRXJyb3IoIkxpbmVhciBzeXN0ZW0gY2Fubm90IGJlIHNvbHZlZCBzaW5jZSBtYXRyaXggaXMgc2luZ3VsYXIiKTtjPWIodSxmKTtmb3IodmFyIGw9cy0xOzA8PWw7bC0tKXJbbF09W3cocltsXVswXXx8MCx4KGMsb1tsXVtzXSkpXX1hW3NdPVtjXX1yZXR1cm4gbmV3IE8oe2RhdGE6YSxzaXplOltuLDFdfSl9fSksYW89WyJ0eXBlZCIsImVxdWFsU2NhbGFyIl0sb289T2JqZWN0KHMuYSkoImFsZ29yaXRobTA4IixhbyxmdW5jdGlvbihlKXt2YXIgXz1lLnR5cGVkLEk9ZS5lcXVhbFNjYWxhcjtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUuX3ZhbHVlcyxpPWUuX2luZGV4LGE9ZS5fcHRyLG89ZS5fc2l6ZSxzPWUuX2RhdGF0eXBlLHU9dC5fdmFsdWVzLGM9dC5faW5kZXgsZj10Ll9wdHIsbD10Ll9zaXplLHA9dC5fZGF0YXR5cGU7aWYoby5sZW5ndGghPT1sLmxlbmd0aCl0aHJvdyBuZXcgei5hKG8ubGVuZ3RoLGwubGVuZ3RoKTtpZihvWzBdIT09bFswXXx8b1sxXSE9PWxbMV0pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkRpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCIrbysiKSBtdXN0IG1hdGNoIE1hdHJpeCBCICgiK2wrIikiKTtpZighbnx8IXUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gUGF0dGVybiBTcGFyc2UgTWF0cmljZXMiKTt2YXIgbSxoPW9bMF0sZD1vWzFdLHk9SSxnPTAsdj1yOyJzdHJpbmciPT10eXBlb2YgcyYmcz09PXAmJihtPXMseT1fLmZpbmQoSSxbbSxtXSksZz1fLmNvbnZlcnQoMCxtKSx2PV8uZmluZChyLFttLG1dKSk7Zm9yKHZhciBiLHgsdyxOLE89W10sTT1bXSxqPVtdLEU9W10sUz1bXSxBPTA7QTxkO0ErKyl7altBXT1NLmxlbmd0aDt2YXIgQz1BKzE7Zm9yKHg9YVtBXSx3PWFbQSsxXSxiPXg7Yjx3O2IrKylTW049aVtiXV09QyxFW05dPW5bYl0sTS5wdXNoKE4pO2Zvcih4PWZbQV0sdz1mW0ErMV0sYj14O2I8dztiKyspU1tOPWNbYl1dPT09QyYmKEVbTl09dihFW05dLHVbYl0pKTtmb3IoYj1qW0FdO2I8TS5sZW5ndGg7KXt2YXIgVD1FW049TVtiXV07eShULGcpP00uc3BsaWNlKGIsMSk6KE8ucHVzaChUKSxiKyspfX1yZXR1cm4galtkXT1NLmxlbmd0aCxlLmNyZWF0ZVNwYXJzZU1hdHJpeCh7dmFsdWVzOk8saW5kZXg6TSxwdHI6aixzaXplOltoLGRdLGRhdGF0eXBlOm19KX19KSxzbz0ibGVmdFNoaWZ0Iix1bz1bInR5cGVkIiwibWF0cml4IiwiZXF1YWxTY2FsYXIiLCJ6ZXJvcyIsIkRlbnNlTWF0cml4Il0sY289T2JqZWN0KHMuYSkoc28sdW8sZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUubWF0cml4LG49ZS5lcXVhbFNjYWxhcixpPWUuemVyb3MsYT1lLkRlbnNlTWF0cml4LG89R3Qoe3R5cGVkOnR9KSxzPW5yKHt0eXBlZDp0LGVxdWFsU2NhbGFyOm59KSx1PW9vKHt0eXBlZDp0LGVxdWFsU2NhbGFyOm59KSxjPVd0KHt0eXBlZDp0LERlbnNlTWF0cml4OmF9KSxmPXNyKHt0eXBlZDp0LGVxdWFsU2NhbGFyOm59KSxsPVh0KHt0eXBlZDp0fSkscD1LdCh7dHlwZWQ6dH0pLG09dChzbyx7Im51bWJlciwgbnVtYmVyIjpzbiwiQmlnTnVtYmVyLCBCaWdOdW1iZXIiOktyLCJTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLHQsbSwhMSl9LCJTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBzKHQsZSxtLCEwKX0sIkRlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oZSx0LG0sITEpfSwiRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBsKGUsdCxtKX0sIkFycmF5LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbShyKGUpLHIodCkpLnZhbHVlT2YoKX0sIkFycmF5LCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG0ocihlKSx0KX0sIk1hdHJpeCwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG0oZSxyKHQpKX0sIlNwYXJzZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBuKHQsMCk/ZS5jbG9uZSgpOmYoZSx0LG0sITEpfSwiRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlciI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbih0LDApP2UuY2xvbmUoKTpwKGUsdCxtLCExKX0sIm51bWJlciB8IEJpZ051bWJlciwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBuKGUsMCk/aSh0LnNpemUoKSx0LnN0b3JhZ2UoKSk6Yyh0LGUsbSwhMCl9LCJudW1iZXIgfCBCaWdOdW1iZXIsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBuKGUsMCk/aSh0LnNpemUoKSx0LnN0b3JhZ2UoKSk6cCh0LGUsbSwhMCl9LCJBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBtKHIoZSksdCkudmFsdWVPZigpfSwibnVtYmVyIHwgQmlnTnVtYmVyLCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbShlLHIodCkpLnZhbHVlT2YoKX19KTtyZXR1cm4gbX0pLGZvPSJyaWdodEFyaXRoU2hpZnQiLGxvPVsidHlwZWQiLCJtYXRyaXgiLCJlcXVhbFNjYWxhciIsInplcm9zIiwiRGVuc2VNYXRyaXgiXSxwbz1PYmplY3Qocy5hKShmbyxsbyxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5tYXRyaXgsbj1lLmVxdWFsU2NhbGFyLGk9ZS56ZXJvcyxhPWUuRGVuc2VNYXRyaXgsbz1HdCh7dHlwZWQ6dH0pLHM9bnIoe3R5cGVkOnQsZXF1YWxTY2FsYXI6bn0pLHU9b28oe3R5cGVkOnQsZXF1YWxTY2FsYXI6bn0pLGM9V3Qoe3R5cGVkOnQsRGVuc2VNYXRyaXg6YX0pLGY9c3Ioe3R5cGVkOnQsZXF1YWxTY2FsYXI6bn0pLGw9WHQoe3R5cGVkOnR9KSxwPUt0KHt0eXBlZDp0fSksbT10KGZvLHsibnVtYmVyLCBudW1iZXIiOnVuLCJCaWdOdW1iZXIsIEJpZ051bWJlciI6ZW4sIlNwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiB1KGUsdCxtLCExKX0sIlNwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHModCxlLG0sITApfSwiRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhlLHQsbSwhMSl9LCJEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwoZSx0LG0pfSwiQXJyYXksIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBtKHIoZSkscih0KSkudmFsdWVPZigpfSwiQXJyYXksIE1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbShyKGUpLHQpfSwiTWF0cml4LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbShlLHIodCkpfSwiU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4odCwwKT9lLmNsb25lKCk6ZihlLHQsbSwhMSl9LCJEZW5zZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBuKHQsMCk/ZS5jbG9uZSgpOnAoZSx0LG0sITEpfSwibnVtYmVyIHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oZSwwKT9pKHQuc2l6ZSgpLHQuc3RvcmFnZSgpKTpjKHQsZSxtLCEwKX0sIm51bWJlciB8IEJpZ051bWJlciwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oZSwwKT9pKHQuc2l6ZSgpLHQuc3RvcmFnZSgpKTpwKHQsZSxtLCEwKX0sIkFycmF5LCBudW1iZXIgfCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG0ocihlKSx0KS52YWx1ZU9mKCl9LCJudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBtKGUscih0KSkudmFsdWVPZigpfX0pO3JldHVybiBtfSksbW89InJpZ2h0TG9nU2hpZnQiLGhvPVsidHlwZWQiLCJtYXRyaXgiLCJlcXVhbFNjYWxhciIsInplcm9zIiwiRGVuc2VNYXRyaXgiXSx5bz1PYmplY3Qocy5hKShtbyxobyxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5tYXRyaXgsbj1lLmVxdWFsU2NhbGFyLGk9ZS56ZXJvcyxhPWUuRGVuc2VNYXRyaXgsbz1HdCh7dHlwZWQ6dH0pLHM9bnIoe3R5cGVkOnQsZXF1YWxTY2FsYXI6bn0pLHU9b28oe3R5cGVkOnQsZXF1YWxTY2FsYXI6bn0pLGM9V3Qoe3R5cGVkOnQsRGVuc2VNYXRyaXg6YX0pLGY9c3Ioe3R5cGVkOnQsZXF1YWxTY2FsYXI6bn0pLGw9WHQoe3R5cGVkOnR9KSxwPUt0KHt0eXBlZDp0fSksbT10KG1vLHsibnVtYmVyLCBudW1iZXIiOmNuLCJTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLHQsbSwhMSl9LCJTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBzKHQsZSxtLCEwKX0sIkRlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oZSx0LG0sITEpfSwiRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBsKGUsdCxtKX0sIkFycmF5LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbShyKGUpLHIodCkpLnZhbHVlT2YoKX0sIkFycmF5LCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG0ocihlKSx0KX0sIk1hdHJpeCwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG0oZSxyKHQpKX0sIlNwYXJzZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBuKHQsMCk/ZS5jbG9uZSgpOmYoZSx0LG0sITEpfSwiRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlciI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbih0LDApP2UuY2xvbmUoKTpwKGUsdCxtLCExKX0sIm51bWJlciB8IEJpZ051bWJlciwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBuKGUsMCk/aSh0LnNpemUoKSx0LnN0b3JhZ2UoKSk6Yyh0LGUsbSwhMCl9LCJudW1iZXIgfCBCaWdOdW1iZXIsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBuKGUsMCk/aSh0LnNpemUoKSx0LnN0b3JhZ2UoKSk6cCh0LGUsbSwhMCl9LCJBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBtKHIoZSksdCkudmFsdWVPZigpfSwibnVtYmVyIHwgQmlnTnVtYmVyLCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbShlLHIodCkpLnZhbHVlT2YoKX19KTtyZXR1cm4gbX0pLGdvPVsidHlwZWQiLCJtYXRyaXgiLCJlcXVhbFNjYWxhciIsInplcm9zIiwibm90Il0sdm89T2JqZWN0KHMuYSkoImFuZCIsZ28sZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUubWF0cml4LG49ZS5lcXVhbFNjYWxhcixpPWUuemVyb3MsYT1lLm5vdCxvPW5yKHt0eXBlZDp0LGVxdWFsU2NhbGFyOm59KSxzPWFyKHt0eXBlZDp0LGVxdWFsU2NhbGFyOm59KSx1PXNyKHt0eXBlZDp0LGVxdWFsU2NhbGFyOm59KSxjPVh0KHt0eXBlZDp0fSksZj1LdCh7dHlwZWQ6dH0pLGw9dCgiYW5kIix7Im51bWJlciwgbnVtYmVyIjpJbiwiQ29tcGxleCwgQ29tcGxleCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4hKDA9PT1lLnJlJiYwPT09ZS5pbXx8MD09PXQucmUmJjA9PT10LmltKX0sIkJpZ051bWJlciwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiEoZS5pc1plcm8oKXx8dC5pc1plcm8oKXx8ZS5pc05hTigpfHx0LmlzTmFOKCkpfSwiVW5pdCwgVW5pdCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbChlLnZhbHVlfHwwLHQudmFsdWV8fDApfSwiU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMoZSx0LGwsITEpfSwiU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyh0LGUsbCwhMCl9LCJEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBvKGUsdCxsLCExKX0sIkRlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhlLHQsbCl9LCJBcnJheSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwocihlKSxyKHQpKS52YWx1ZU9mKCl9LCJBcnJheSwgTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBsKHIoZSksdCl9LCJNYXRyaXgsIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBsKGUscih0KSl9LCJTcGFyc2VNYXRyaXgsIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYSh0KT9pKGUuc2l6ZSgpLGUuc3RvcmFnZSgpKTp1KGUsdCxsLCExKX0sIkRlbnNlTWF0cml4LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEodCk/aShlLnNpemUoKSxlLnN0b3JhZ2UoKSk6ZihlLHQsbCwhMSl9LCJhbnksIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlKT9pKGUuc2l6ZSgpLGUuc3RvcmFnZSgpKTp1KHQsZSxsLCEwKX0sImFueSwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSk/aShlLnNpemUoKSxlLnN0b3JhZ2UoKSk6Zih0LGUsbCwhMCl9LCJBcnJheSwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiBsKHIoZSksdCkudmFsdWVPZigpfSwiYW55LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbChlLHIodCkpLnZhbHVlT2YoKX19KTtyZXR1cm4gbH0pLGJvPSJjb21wYXJlIix4bz1bInR5cGVkIiwiY29uZmlnIiwibWF0cml4IiwiZXF1YWxTY2FsYXIiLCJCaWdOdW1iZXIiLCJGcmFjdGlvbiIsIkRlbnNlTWF0cml4Il0sd289T2JqZWN0KHMuYSkoYm8seG8sZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuY29uZmlnLG49ZS5lcXVhbFNjYWxhcixpPWUubWF0cml4LGE9ZS5CaWdOdW1iZXIsbz1lLkZyYWN0aW9uLHM9ZS5EZW5zZU1hdHJpeCx1PWRyKHt0eXBlZDp0fSksYz1ncih7dHlwZWQ6dCxlcXVhbFNjYWxhcjpufSksZj1icih7dHlwZWQ6dCxEZW5zZU1hdHJpeDpzfSksbD1YdCh7dHlwZWQ6dH0pLHA9S3Qoe3R5cGVkOnR9KSxtPXQoYm8seyJib29sZWFuLCBib29sZWFuIjpmdW5jdGlvbihlLHQpe3JldHVybiBlPT09dD8wOnQ8ZT8xOi0xfSwibnVtYmVyLCBudW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdChFLm0pKGUsdCxyLmVwc2lsb24pPzA6dDxlPzE6LTF9LCJCaWdOdW1iZXIsIEJpZ051bWJlciI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTmUoZSx0LHIuZXBzaWxvbik/bmV3IGEoMCk6bmV3IGEoZS5jbXAodCkpfSwiRnJhY3Rpb24sIEZyYWN0aW9uIjpmdW5jdGlvbihlLHQpe3JldHVybiBuZXcgbyhlLmNvbXBhcmUodCkpfSwiQ29tcGxleCwgQ29tcGxleCI6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJObyBvcmRlcmluZyByZWxhdGlvbiBpcyBkZWZpbmVkIGZvciBjb21wbGV4IG51bWJlcnMiKX0sIlVuaXQsIFVuaXQiOmZ1bmN0aW9uKGUsdCl7aWYoIWUuZXF1YWxCYXNlKHQpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNvbXBhcmUgdW5pdHMgd2l0aCBkaWZmZXJlbnQgYmFzZSIpO3JldHVybiBtKGUudmFsdWUsdC52YWx1ZSl9LCJTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhlLHQsbSl9LCJTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiB1KHQsZSxtLCEwKX0sIkRlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZSx0LG0sITEpfSwiRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBsKGUsdCxtKX0sIkFycmF5LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbShpKGUpLGkodCkpLnZhbHVlT2YoKX0sIkFycmF5LCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG0oaShlKSx0KX0sIk1hdHJpeCwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG0oZSxpKHQpKX0sIlNwYXJzZU1hdHJpeCwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiBmKGUsdCxtLCExKX0sIkRlbnNlTWF0cml4LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAoZSx0LG0sITEpfSwiYW55LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYodCxlLG0sITApfSwiYW55LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcCh0LGUsbSwhMCl9LCJBcnJheSwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiBwKGkoZSksdCxtLCExKS52YWx1ZU9mKCl9LCJhbnksIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBwKGkodCksZSxtLCEwKS52YWx1ZU9mKCl9fSk7cmV0dXJuIG19KSxObz1yKDEyKSxPbz1yLm4oTm8pLE1vPSJjb21wYXJlTmF0dXJhbCIsam89WyJ0eXBlZCIsImNvbXBhcmUiXSxFbz1PYmplY3Qocy5hKShNbyxqbyxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLGE9ZS5jb21wYXJlLG89YS5zaWduYXR1cmVzWyJib29sZWFuLGJvb2xlYW4iXSxzPXQoTW8seyJhbnksIGFueSI6ZnVuY3Rpb24oZSx0KXt2YXIgcixuPU9iamVjdChpZS5NKShlKSxpPU9iamVjdChpZS5NKSh0KTtpZighKCJudW1iZXIiIT09biYmIkJpZ051bWJlciIhPT1uJiYiRnJhY3Rpb24iIT09bnx8Im51bWJlciIhPT1pJiYiQmlnTnVtYmVyIiE9PWkmJiJGcmFjdGlvbiIhPT1pKSlyZXR1cm4iMCIhPT0ocj1hKGUsdCkpLnRvU3RyaW5nKCk/MDxyPzE6LTE6T28oKShuLGkpO2lmKCJBcnJheSI9PT1ufHwiTWF0cml4Ij09PW58fCJBcnJheSI9PT1pfHwiTWF0cml4Ij09PWkpcmV0dXJuIDAhPT0ocj1mdW5jdGlvbiBlKHQscil7aWYoT2JqZWN0KGllLkgpKHQpJiZPYmplY3QoaWUuSCkocikpcmV0dXJuIHUodC50b0pTT04oKS52YWx1ZXMsci50b0pTT04oKS52YWx1ZXMpO2lmKE9iamVjdChpZS5IKSh0KSlyZXR1cm4gZSh0LnRvQXJyYXkoKSxyKTtpZihPYmplY3QoaWUuSCkocikpcmV0dXJuIGUodCxyLnRvQXJyYXkoKSk7aWYoT2JqZWN0KGllLm4pKHQpKXJldHVybiBlKHQudG9KU09OKCkuZGF0YSxyKTtpZihPYmplY3QoaWUubikocikpcmV0dXJuIGUodCxyLnRvSlNPTigpLmRhdGEpO2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBlKFt0XSxyKTtpZighQXJyYXkuaXNBcnJheShyKSlyZXR1cm4gZSh0LFtyXSk7cmV0dXJuIHUodCxyKX0oZSx0KSk/cjpPbygpKG4saSk7aWYobiE9PWkpcmV0dXJuIE9vKCkobixpKTtpZigiQ29tcGxleCI9PT1uKXJldHVybiBmdW5jdGlvbihlLHQpe2lmKGUucmU+dC5yZSlyZXR1cm4gMTtpZihlLnJlPHQucmUpcmV0dXJuLTE7aWYoZS5pbT50LmltKXJldHVybiAxO2lmKGUuaW08dC5pbSlyZXR1cm4tMTtyZXR1cm4gMH0oZSx0KTtpZigiVW5pdCI9PT1uKXJldHVybiBlLmVxdWFsQmFzZSh0KT9zKGUudmFsdWUsdC52YWx1ZSk6dShlLmZvcm1hdFVuaXRzKCksdC5mb3JtYXRVbml0cygpKTtpZigiYm9vbGVhbiI9PT1uKXJldHVybiBvKGUsdCk7aWYoInN0cmluZyI9PT1uKXJldHVybiBPbygpKGUsdCk7aWYoIk9iamVjdCI9PT1uKXJldHVybiBmdW5jdGlvbihlLHQpe3ZhciByPU9iamVjdC5rZXlzKGUpLG49T2JqZWN0LmtleXModCk7ci5zb3J0KE9vLmEpLG4uc29ydChPby5hKTt2YXIgaT11KHIsbik7aWYoMCE9PWkpcmV0dXJuIGk7Zm9yKHZhciBhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXMoZVtyW2FdXSx0W25bYV1dKTtpZigwIT09bylyZXR1cm4gb31yZXR1cm4gMH0oZSx0KTtpZigibnVsbCI9PT1uKXJldHVybiAwO2lmKCJ1bmRlZmluZWQiPT09bilyZXR1cm4gMDt0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIHZhbHVlICInK24rJyInKX19KTtmdW5jdGlvbiB1KGUsdCl7Zm9yKHZhciByPTAsbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk7cjxuO3IrKyl7dmFyIGk9cyhlW3JdLHRbcl0pO2lmKDAhPT1pKXJldHVybiBpfXJldHVybiBlLmxlbmd0aD50Lmxlbmd0aD8xOmUubGVuZ3RoPHQubGVuZ3RoPy0xOjB9cmV0dXJuIHN9KTt2YXIgU289ImNvbXBhcmVUZXh0IixBbz1bInR5cGVkIiwibWF0cml4Il0sQ289T2JqZWN0KHMuYSkoU28sQW8sZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUubWF0cml4LG49WHQoe3R5cGVkOnR9KSxpPUt0KHt0eXBlZDp0fSksYT10KFNvLHsiYW55LCBhbnkiOkouYSwiRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBuKGUsdCxKLmEpfSwiQXJyYXksIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBhKHIoZSkscih0KSkudmFsdWVPZigpfSwiQXJyYXksIE1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShyKGUpLHQpfSwiTWF0cml4LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHIodCkpfSwiRGVuc2VNYXRyaXgsIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShlLHQsSi5hLCExKX0sImFueSwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkodCxlLEouYSwhMCl9LCJBcnJheSwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiBpKHIoZSksdCxKLmEsITEpLnZhbHVlT2YoKX0sImFueSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkocih0KSxlLEouYSwhMCkudmFsdWVPZigpfX0pO3JldHVybiBhfSksVG89ImVxdWFsIixfbz1bInR5cGVkIiwibWF0cml4IiwiZXF1YWxTY2FsYXIiLCJEZW5zZU1hdHJpeCJdLElvPU9iamVjdChzLmEpKFRvLF9vLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLm1hdHJpeCxuPWUuZXF1YWxTY2FsYXIsaT1lLkRlbnNlTWF0cml4LGE9ZHIoe3R5cGVkOnR9KSxvPWduKHt0eXBlZDp0LERlbnNlTWF0cml4Oml9KSxzPWJyKHt0eXBlZDp0LERlbnNlTWF0cml4Oml9KSx1PVh0KHt0eXBlZDp0fSksYz1LdCh7dHlwZWQ6dH0pLGY9dChUbyx7ImFueSwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT09ZT9udWxsPT09dDpudWxsPT09dD9udWxsPT09ZTp2b2lkIDA9PT1lP3ZvaWQgMD09PXQ6dm9pZCAwPT09dD92b2lkIDA9PT1lOm4oZSx0KX0sIlNwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBvKGUsdCxuKX0sIlNwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEodCxlLG4sITApfSwiRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQsbiwhMSl9LCJEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZSx0LG4pfSwiQXJyYXksIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBmKHIoZSkscih0KSkudmFsdWVPZigpfSwiQXJyYXksIE1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihyKGUpLHQpfSwiTWF0cml4LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihlLHIodCkpfSwiU3BhcnNlTWF0cml4LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMoZSx0LG4sITEpfSwiRGVuc2VNYXRyaXgsIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhlLHQsbiwhMSl9LCJhbnksIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyh0LGUsbiwhMCl9LCJhbnksIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBjKHQsZSxuLCEwKX0sIkFycmF5LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMocihlKSx0LG4sITEpLnZhbHVlT2YoKX0sImFueSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMocih0KSxlLG4sITApLnZhbHVlT2YoKX19KTtyZXR1cm4gZn0pLHFvPShPYmplY3Qocy5hKShUbyxbInR5cGVkIiwiZXF1YWxTY2FsYXIiXSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5lcXVhbFNjYWxhcjtyZXR1cm4gdChUbyx7ImFueSwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT09ZT9udWxsPT09dDpudWxsPT09dD9udWxsPT09ZTp2b2lkIDA9PT1lP3ZvaWQgMD09PXQ6dm9pZCAwPT09dD92b2lkIDA9PT1lOnIoZSx0KX19KX0pLCJlcXVhbFRleHQiKSxCbz1bInR5cGVkIiwiY29tcGFyZVRleHQiLCJpc1plcm8iXSxrbz1PYmplY3Qocy5hKShxbyxCbyxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5jb21wYXJlVGV4dCxuPWUuaXNaZXJvO3JldHVybiB0KHFvLHsiYW55LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4ocihlLHQpKX19KX0pLHpvPSJzbWFsbGVyIixEbz1bInR5cGVkIiwiY29uZmlnIiwibWF0cml4IiwiRGVuc2VNYXRyaXgiXSxSbz1PYmplY3Qocy5hKSh6byxEbyxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5jb25maWcsbj1lLm1hdHJpeCxpPWUuRGVuc2VNYXRyaXgsYT1kcih7dHlwZWQ6dH0pLG89Z24oe3R5cGVkOnQsRGVuc2VNYXRyaXg6aX0pLHM9YnIoe3R5cGVkOnQsRGVuc2VNYXRyaXg6aX0pLHU9WHQoe3R5cGVkOnR9KSxjPUt0KHt0eXBlZDp0fSksZj10KHpvLHsiYm9vbGVhbiwgYm9vbGVhbiI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZTx0fSwibnVtYmVyLCBudW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU8dCYmIU9iamVjdChFLm0pKGUsdCxyLmVwc2lsb24pfSwiQmlnTnVtYmVyLCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubHQodCkmJiFOZShlLHQsci5lcHNpbG9uKX0sIkZyYWN0aW9uLCBGcmFjdGlvbiI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4tMT09PWUuY29tcGFyZSh0KX0sIkNvbXBsZXgsIENvbXBsZXgiOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiTm8gb3JkZXJpbmcgcmVsYXRpb24gaXMgZGVmaW5lZCBmb3IgY29tcGxleCBudW1iZXJzIil9LCJVbml0LCBVbml0IjpmdW5jdGlvbihlLHQpe2lmKCFlLmVxdWFsQmFzZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjb21wYXJlIHVuaXRzIHdpdGggZGlmZmVyZW50IGJhc2UiKTtyZXR1cm4gZihlLnZhbHVlLHQudmFsdWUpfSwiU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oZSx0LGYpfSwiU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYSh0LGUsZiwhMCl9LCJEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCxmLCExKX0sIkRlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLHQsZil9LCJBcnJheSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYobihlKSxuKHQpKS52YWx1ZU9mKCl9LCJBcnJheSwgTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBmKG4oZSksdCl9LCJNYXRyaXgsIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBmKGUsbih0KSl9LCJTcGFyc2VNYXRyaXgsIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyhlLHQsZiwhMSl9LCJEZW5zZU1hdHJpeCwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiBjKGUsdCxmLCExKX0sImFueSwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBzKHQsZSxmLCEwKX0sImFueSwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGModCxlLGYsITApfSwiQXJyYXksIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhuKGUpLHQsZiwhMSkudmFsdWVPZigpfSwiYW55LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhuKHQpLGUsZiwhMCkudmFsdWVPZigpfX0pO3JldHVybiBmfSksUG89InNtYWxsZXJFcSIsRm89WyJ0eXBlZCIsImNvbmZpZyIsIm1hdHJpeCIsIkRlbnNlTWF0cml4Il0sVW89T2JqZWN0KHMuYSkoUG8sRm8sZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuY29uZmlnLG49ZS5tYXRyaXgsaT1lLkRlbnNlTWF0cml4LGE9ZHIoe3R5cGVkOnR9KSxvPWduKHt0eXBlZDp0LERlbnNlTWF0cml4Oml9KSxzPWJyKHt0eXBlZDp0LERlbnNlTWF0cml4Oml9KSx1PVh0KHt0eXBlZDp0fSksYz1LdCh7dHlwZWQ6dH0pLGY9dChQbyx7ImJvb2xlYW4sIGJvb2xlYW4iOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU8PXR9LCJudW1iZXIsIG51bWJlciI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZTw9dHx8T2JqZWN0KEUubSkoZSx0LHIuZXBzaWxvbil9LCJCaWdOdW1iZXIsIEJpZ051bWJlciI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5sdGUodCl8fE5lKGUsdCxyLmVwc2lsb24pfSwiRnJhY3Rpb24sIEZyYWN0aW9uIjpmdW5jdGlvbihlLHQpe3JldHVybiAxIT09ZS5jb21wYXJlKHQpfSwiQ29tcGxleCwgQ29tcGxleCI6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJObyBvcmRlcmluZyByZWxhdGlvbiBpcyBkZWZpbmVkIGZvciBjb21wbGV4IG51bWJlcnMiKX0sIlVuaXQsIFVuaXQiOmZ1bmN0aW9uKGUsdCl7aWYoIWUuZXF1YWxCYXNlKHQpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNvbXBhcmUgdW5pdHMgd2l0aCBkaWZmZXJlbnQgYmFzZSIpO3JldHVybiBmKGUudmFsdWUsdC52YWx1ZSl9LCJTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhlLHQsZil9LCJTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBhKHQsZSxmLCEwKX0sIkRlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSx0LGYsITEpfSwiRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiB1KGUsdCxmKX0sIkFycmF5LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihuKGUpLG4odCkpLnZhbHVlT2YoKX0sIkFycmF5LCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYobihlKSx0KX0sIk1hdHJpeCwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYoZSxuKHQpKX0sIlNwYXJzZU1hdHJpeCwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiBzKGUsdCxmLCExKX0sIkRlbnNlTWF0cml4LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMoZSx0LGYsITEpfSwiYW55LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHModCxlLGYsITApfSwiYW55LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyh0LGUsZiwhMCl9LCJBcnJheSwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiBjKG4oZSksdCxmLCExKS52YWx1ZU9mKCl9LCJhbnksIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBjKG4odCksZSxmLCEwKS52YWx1ZU9mKCl9fSk7cmV0dXJuIGZ9KSxMbz0ibGFyZ2VyIixIbz1bInR5cGVkIiwiY29uZmlnIiwibWF0cml4IiwiRGVuc2VNYXRyaXgiXSwkbz1PYmplY3Qocy5hKShMbyxIbyxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5jb25maWcsbj1lLm1hdHJpeCxpPWUuRGVuc2VNYXRyaXgsYT1kcih7dHlwZWQ6dH0pLG89Z24oe3R5cGVkOnQsRGVuc2VNYXRyaXg6aX0pLHM9YnIoe3R5cGVkOnQsRGVuc2VNYXRyaXg6aX0pLHU9WHQoe3R5cGVkOnR9KSxjPUt0KHt0eXBlZDp0fSksZj10KExvLHsiYm9vbGVhbiwgYm9vbGVhbiI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdDxlfSwibnVtYmVyLCBudW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ8ZSYmIU9iamVjdChFLm0pKGUsdCxyLmVwc2lsb24pfSwiQmlnTnVtYmVyLCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZ3QodCkmJiFOZShlLHQsci5lcHNpbG9uKX0sIkZyYWN0aW9uLCBGcmFjdGlvbiI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMT09PWUuY29tcGFyZSh0KX0sIkNvbXBsZXgsIENvbXBsZXgiOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiTm8gb3JkZXJpbmcgcmVsYXRpb24gaXMgZGVmaW5lZCBmb3IgY29tcGxleCBudW1iZXJzIil9LCJVbml0LCBVbml0IjpmdW5jdGlvbihlLHQpe2lmKCFlLmVxdWFsQmFzZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjb21wYXJlIHVuaXRzIHdpdGggZGlmZmVyZW50IGJhc2UiKTtyZXR1cm4gZihlLnZhbHVlLHQudmFsdWUpfSwiU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oZSx0LGYpfSwiU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYSh0LGUsZiwhMCl9LCJEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCxmLCExKX0sIkRlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLHQsZil9LCJBcnJheSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYobihlKSxuKHQpKS52YWx1ZU9mKCl9LCJBcnJheSwgTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBmKG4oZSksdCl9LCJNYXRyaXgsIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBmKGUsbih0KSl9LCJTcGFyc2VNYXRyaXgsIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyhlLHQsZiwhMSl9LCJEZW5zZU1hdHJpeCwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiBjKGUsdCxmLCExKX0sImFueSwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBzKHQsZSxmLCEwKX0sImFueSwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGModCxlLGYsITApfSwiQXJyYXksIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhuKGUpLHQsZiwhMSkudmFsdWVPZigpfSwiYW55LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhuKHQpLGUsZiwhMCkudmFsdWVPZigpfX0pO3JldHVybiBmfSksR289ImxhcmdlckVxIixabz1bInR5cGVkIiwiY29uZmlnIiwibWF0cml4IiwiRGVuc2VNYXRyaXgiXSxWbz1PYmplY3Qocy5hKShHbyxabyxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5jb25maWcsbj1lLm1hdHJpeCxpPWUuRGVuc2VNYXRyaXgsYT1kcih7dHlwZWQ6dH0pLG89Z24oe3R5cGVkOnQsRGVuc2VNYXRyaXg6aX0pLHM9YnIoe3R5cGVkOnQsRGVuc2VNYXRyaXg6aX0pLHU9WHQoe3R5cGVkOnR9KSxjPUt0KHt0eXBlZDp0fSksZj10KEdvLHsiYm9vbGVhbiwgYm9vbGVhbiI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdDw9ZX0sIm51bWJlciwgbnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiB0PD1lfHxPYmplY3QoRS5tKShlLHQsci5lcHNpbG9uKX0sIkJpZ051bWJlciwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBlLmd0ZSh0KXx8TmUoZSx0LHIuZXBzaWxvbil9LCJGcmFjdGlvbiwgRnJhY3Rpb24iOmZ1bmN0aW9uKGUsdCl7cmV0dXJuLTEhPT1lLmNvbXBhcmUodCl9LCJDb21wbGV4LCBDb21wbGV4IjpmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIk5vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycyIpfSwiVW5pdCwgVW5pdCI6ZnVuY3Rpb24oZSx0KXtpZighZS5lcXVhbEJhc2UodCkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29tcGFyZSB1bml0cyB3aXRoIGRpZmZlcmVudCBiYXNlIik7cmV0dXJuIGYoZS52YWx1ZSx0LnZhbHVlKX0sIlNwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBvKGUsdCxmKX0sIlNwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEodCxlLGYsITApfSwiRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQsZiwhMSl9LCJEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZSx0LGYpfSwiQXJyYXksIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBmKG4oZSksbih0KSkudmFsdWVPZigpfSwiQXJyYXksIE1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihuKGUpLHQpfSwiTWF0cml4LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihlLG4odCkpfSwiU3BhcnNlTWF0cml4LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMoZSx0LGYsITEpfSwiRGVuc2VNYXRyaXgsIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhlLHQsZiwhMSl9LCJhbnksIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyh0LGUsZiwhMCl9LCJhbnksIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBjKHQsZSxmLCEwKX0sIkFycmF5LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMobihlKSx0LGYsITEpLnZhbHVlT2YoKX0sImFueSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMobih0KSxlLGYsITApLnZhbHVlT2YoKX19KTtyZXR1cm4gZn0pLEpvPSJkZWVwRXF1YWwiLFdvPVsidHlwZWQiLCJlcXVhbCJdLFlvPU9iamVjdChzLmEpKEpvLFdvLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQsYT1lLmVxdWFsO3JldHVybiB0KEpvLHsiYW55LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uIGUodCxyKXt7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoQXJyYXkuaXNBcnJheShyKSl7dmFyIG49dC5sZW5ndGg7aWYobiE9PXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgaT0wO2k8bjtpKyspaWYoIWUodFtpXSxyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX1yZXR1cm4hQXJyYXkuaXNBcnJheShyKSYmYSh0LHIpfX0oZS52YWx1ZU9mKCksdC52YWx1ZU9mKCkpfX0pfSksWG89InVuZXF1YWwiLFFvPVsidHlwZWQiLCJjb25maWciLCJlcXVhbFNjYWxhciIsIm1hdHJpeCIsIkRlbnNlTWF0cml4Il0sS289T2JqZWN0KHMuYSkoWG8sUW8sZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPShlLmNvbmZpZyxlLmVxdWFsU2NhbGFyKSxuPWUubWF0cml4LGk9ZS5EZW5zZU1hdHJpeCxhPWRyKHt0eXBlZDp0fSksbz1nbih7dHlwZWQ6dCxEZW5zZU1hdHJpeDppfSkscz1icih7dHlwZWQ6dCxEZW5zZU1hdHJpeDppfSksdT1YdCh7dHlwZWQ6dH0pLGM9S3Qoe3R5cGVkOnR9KSxmPXQoInVuZXF1YWwiLHsiYW55LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PT1lP251bGwhPT10Om51bGw9PT10P251bGwhPT1lOnZvaWQgMD09PWU/dm9pZCAwIT09dDp2b2lkIDA9PT10P3ZvaWQgMCE9PWU6bChlLHQpfSwiU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oZSx0LGwpfSwiU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYSh0LGUsbCwhMCl9LCJEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCxsLCExKX0sIkRlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLHQsbCl9LCJBcnJheSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYobihlKSxuKHQpKS52YWx1ZU9mKCl9LCJBcnJheSwgTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBmKG4oZSksdCl9LCJNYXRyaXgsIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBmKGUsbih0KSl9LCJTcGFyc2VNYXRyaXgsIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyhlLHQsbCwhMSl9LCJEZW5zZU1hdHJpeCwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiBjKGUsdCxsLCExKX0sImFueSwgU3BhcnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBzKHQsZSxsLCEwKX0sImFueSwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGModCxlLGwsITApfSwiQXJyYXksIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhuKGUpLHQsbCwhMSkudmFsdWVPZigpfSwiYW55LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhuKHQpLGUsbCwhMCkudmFsdWVPZigpfX0pO2Z1bmN0aW9uIGwoZSx0KXtyZXR1cm4hcihlLHQpfXJldHVybiBmfSksZXM9KE9iamVjdChzLmEpKFhvLFsidHlwZWQiLCJlcXVhbFNjYWxhciJdLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLmVxdWFsU2NhbGFyO3JldHVybiB0KFhvLHsiYW55LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PT1lP251bGwhPT10Om51bGw9PT10P251bGwhPT1lOnZvaWQgMD09PWU/dm9pZCAwIT09dDp2b2lkIDA9PT10P3ZvaWQgMCE9PWU6IXIoZSx0KX19KX0pLCJwYXJ0aXRpb25TZWxlY3QiKSx0cz1bInR5cGVkIiwiaXNOdW1lcmljIiwiaXNOYU4iLCJjb21wYXJlIl0scnM9T2JqZWN0KHMuYSkoZXMsdHMsZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihlLHQpe3JldHVybi1yKGUsdCl9dmFyIHQ9ZS50eXBlZCxmPWUuaXNOdW1lcmljLGw9ZS5pc05hTixyPWUuY29tcGFyZSxpPXI7cmV0dXJuIHQoZXMseyJBcnJheSB8IE1hdHJpeCwgbnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBhKGUsdCxpKX0sIkFycmF5IHwgTWF0cml4LCBudW1iZXIsIHN0cmluZyI6ZnVuY3Rpb24oZSx0LHIpe2lmKCJhc2MiPT09cilyZXR1cm4gYShlLHQsaSk7aWYoImRlc2MiPT09cilyZXR1cm4gYShlLHQsbik7dGhyb3cgbmV3IEVycm9yKCdDb21wYXJlIHN0cmluZyBtdXN0IGJlICJhc2MiIG9yICJkZXNjIicpfSwiQXJyYXkgfCBNYXRyaXgsIG51bWJlciwgZnVuY3Rpb24iOmF9KTtmdW5jdGlvbiBhKGUsdCxyKXtpZighT2JqZWN0KEUuaSkodCl8fHQ8MCl0aHJvdyBuZXcgRXJyb3IoImsgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIik7aWYoT2JqZWN0KGllLnYpKGUpKXtpZigxPGUuc2l6ZSgpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIk9ubHkgb25lIGRpbWVuc2lvbmFsIG1hdHJpY2VzIHN1cHBvcnRlZCIpO3JldHVybiBvKGUudmFsdWVPZigpLHQscil9aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gbyhlLHQscil9ZnVuY3Rpb24gbyhlLHQscil7aWYodD49ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJrIG91dCBvZiBib3VuZHMiKTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihmKGVbbl0pJiZsKGVbbl0pKXJldHVybiBlW25dO2Zvcih2YXIgaT0wLGE9ZS5sZW5ndGgtMTtpPGE7KXtmb3IodmFyIG89aSxzPWEsdT1lW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSooYS1pKzEpKStpXTtvPHM7KWlmKDA8PXIoZVtvXSx1KSl7dmFyIGM9ZVtzXTtlW3NdPWVbb10sZVtvXT1jLC0tc31lbHNlKytvOzA8cihlW29dLHUpJiYtLW8sdDw9bz9hPW86aT1vKzF9cmV0dXJuIGVbdF19fSksbnM9WyJ0eXBlZCIsIm1hdHJpeCIsImNvbXBhcmUiLCJjb21wYXJlTmF0dXJhbCJdLGlzPU9iamVjdChzLmEpKCJzb3J0IixucyxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCl7cmV0dXJuLWkoZSx0KX12YXIgcj1lLnR5cGVkLG49ZS5tYXRyaXgsaT1lLmNvbXBhcmUsYT1lLmNvbXBhcmVOYXR1cmFsLG89aTtyZXR1cm4gcigic29ydCIse0FycmF5OmZ1bmN0aW9uKGUpe3JldHVybiB1KGUpLGUuc29ydChvKX0sTWF0cml4OmZ1bmN0aW9uKGUpe3JldHVybiBjKGUpLG4oZS50b0FycmF5KCkuc29ydChvKSxlLnN0b3JhZ2UoKSl9LCJBcnJheSwgZnVuY3Rpb24iOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUoZSksZS5zb3J0KHQpfSwiTWF0cml4LCBmdW5jdGlvbiI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhlKSxuKGUudG9BcnJheSgpLnNvcnQodCksZS5zdG9yYWdlKCkpfSwiQXJyYXksIHN0cmluZyI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlKSxlLnNvcnQocyh0KSl9LCJNYXRyaXgsIHN0cmluZyI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhlKSxuKGUudG9BcnJheSgpLnNvcnQocyh0KSksZS5zdG9yYWdlKCkpfX0pO2Z1bmN0aW9uIHMoZSl7aWYoImFzYyI9PT1lKXJldHVybiBvO2lmKCJkZXNjIj09PWUpcmV0dXJuIHQ7aWYoIm5hdHVyYWwiPT09ZSlyZXR1cm4gYTt0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZyAiYXNjIiwgImRlc2MiLCBvciAibmF0dXJhbCIgZXhwZWN0ZWQnKX1mdW5jdGlvbiB1KGUpe2lmKDEhPT1PYmplY3QoSS5hKShlKS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJPbmUgZGltZW5zaW9uYWwgYXJyYXkgZXhwZWN0ZWQiKX1mdW5jdGlvbiBjKGUpe2lmKDEhPT1lLnNpemUoKS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJPbmUgZGltZW5zaW9uYWwgbWF0cml4IGV4cGVjdGVkIil9fSksYXM9WyJ0eXBlZCIsImxhcmdlciJdLG9zPU9iamVjdChzLmEpKCJtYXgiLGFzLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQsbj1lLmxhcmdlcjtyZXR1cm4gdCgibWF4Iix7IkFycmF5IHwgTWF0cml4IjppLCJBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBVKGUsdC52YWx1ZU9mKCkscil9LCIuLi4iOmZ1bmN0aW9uKGUpe2lmKFAoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiU2NhbGFyIHZhbHVlcyBleHBlY3RlZCBpbiBmdW5jdGlvbiBtYXgiKTtyZXR1cm4gaShlKX19KTtmdW5jdGlvbiByKGUsdCl7dHJ5e3JldHVybiBuKGUsdCk/ZTp0fWNhdGNoKGUpe3Rocm93IGRhKGUsIm1heCIsdCl9fWZ1bmN0aW9uIGkoZSl7dmFyIHI7aWYoRihlLGZ1bmN0aW9uKHQpe3RyeXtpc05hTih0KSYmIm51bWJlciI9PXR5cGVvZiB0P3I9TmFOOnZvaWQgMCE9PXImJiFuKHQscil8fChyPXQpfWNhdGNoKGUpe3Rocm93IGRhKGUsIm1heCIsdCl9fSksdm9pZCAwPT09cil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjYWxjdWxhdGUgbWF4IG9mIGFuIGVtcHR5IGFycmF5Iik7cmV0dXJuIHJ9fSksc3M9WyJ0eXBlZCIsInNtYWxsZXIiXSx1cz1PYmplY3Qocy5hKSgibWluIixzcyxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLG49ZS5zbWFsbGVyO3JldHVybiB0KCJtaW4iLHsiQXJyYXkgfCBNYXRyaXgiOmksIkFycmF5IHwgTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFUoZSx0LnZhbHVlT2YoKSxyKX0sIi4uLiI6ZnVuY3Rpb24oZSl7aWYoUChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTY2FsYXIgdmFsdWVzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIG1pbiIpO3JldHVybiBpKGUpfX0pO2Z1bmN0aW9uIHIoZSx0KXt0cnl7cmV0dXJuIG4oZSx0KT9lOnR9Y2F0Y2goZSl7dGhyb3cgZGEoZSwibWluIix0KX19ZnVuY3Rpb24gaShlKXt2YXIgcjtpZihGKGUsZnVuY3Rpb24odCl7dHJ5e2lzTmFOKHQpJiYibnVtYmVyIj09dHlwZW9mIHQ/cj1OYU46dm9pZCAwIT09ciYmIW4odCxyKXx8KHI9dCl9Y2F0Y2goZSl7dGhyb3cgZGEoZSwibWluIix0KX19KSx2b2lkIDA9PT1yKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNhbGN1bGF0ZSBtaW4gb2YgYW4gZW1wdHkgYXJyYXkiKTtyZXR1cm4gcn19KSxjcz1bInNtYWxsZXIiLCJEZW5zZU1hdHJpeCJdLGZzPU9iamVjdChzLmEpKCJJbW11dGFibGVEZW5zZU1hdHJpeCIsY3MsZnVuY3Rpb24oZSl7dmFyIHI9ZS5zbWFsbGVyLG49ZS5EZW5zZU1hdHJpeDtmdW5jdGlvbiBpKGUsdCl7aWYoISh0aGlzIGluc3RhbmNlb2YgaSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3IiKTtpZih0JiYhT2JqZWN0KGllLkkpKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkYXRhdHlwZTogIit0KTtpZihPYmplY3QoaWUudikoZSl8fE9iamVjdChpZS5iKShlKSl7dmFyIHI9bmV3IG4oZSx0KTt0aGlzLl9kYXRhPXIuX2RhdGEsdGhpcy5fc2l6ZT1yLl9zaXplLHRoaXMuX2RhdGF0eXBlPXIuX2RhdGF0eXBlLHRoaXMuX21pbj1udWxsLHRoaXMuX21heD1udWxsfWVsc2UgaWYoZSYmT2JqZWN0KGllLmIpKGUuZGF0YSkmJk9iamVjdChpZS5iKShlLnNpemUpKXRoaXMuX2RhdGE9ZS5kYXRhLHRoaXMuX3NpemU9ZS5zaXplLHRoaXMuX2RhdGF0eXBlPWUuZGF0YXR5cGUsdGhpcy5fbWluPXZvaWQgMCE9PWUubWluP2UubWluOm51bGwsdGhpcy5fbWF4PXZvaWQgMCE9PWUubWF4P2UubWF4Om51bGw7ZWxzZXtpZihlKXRocm93IG5ldyBUeXBlRXJyb3IoIlVuc3VwcG9ydGVkIHR5cGUgb2YgZGF0YSAoIitPYmplY3QoaWUuTSkoZSkrIikiKTt0aGlzLl9kYXRhPVtdLHRoaXMuX3NpemU9WzBdLHRoaXMuX2RhdGF0eXBlPXQsdGhpcy5fbWluPW51bGwsdGhpcy5fbWF4PW51bGx9fXJldHVybihpLnByb3RvdHlwZT1uZXcgbikudHlwZT0iSW1tdXRhYmxlRGVuc2VNYXRyaXgiLGkucHJvdG90eXBlLmlzSW1tdXRhYmxlRGVuc2VNYXRyaXg9ITAsaS5wcm90b3R5cGUuc3Vic2V0PWZ1bmN0aW9uKGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6dmFyIHQ9bi5wcm90b3R5cGUuc3Vic2V0LmNhbGwodGhpcyxlKTtyZXR1cm4gT2JqZWN0KGllLnYpKHQpP25ldyBpKHtkYXRhOnQuX2RhdGEsc2l6ZTp0Ll9zaXplLGRhdGF0eXBlOnQuX2RhdGF0eXBlfSk6dDtjYXNlIDI6Y2FzZSAzOnRocm93IG5ldyBFcnJvcigiQ2Fubm90IGludm9rZSBzZXQgc3Vic2V0IG9uIGFuIEltbXV0YWJsZSBNYXRyaXggaW5zdGFuY2UiKTtkZWZhdWx0OnRocm93IG5ldyBTeW50YXhFcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyIpfX0saS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaW52b2tlIHNldCBvbiBhbiBJbW11dGFibGUgTWF0cml4IGluc3RhbmNlIil9LGkucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGludm9rZSByZXNpemUgb24gYW4gSW1tdXRhYmxlIE1hdHJpeCBpbnN0YW5jZSIpfSxpLnByb3RvdHlwZS5yZXNoYXBlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaW52b2tlIHJlc2hhcGUgb24gYW4gSW1tdXRhYmxlIE1hdHJpeCBpbnN0YW5jZSIpfSxpLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgaSh7ZGF0YTpPYmplY3QoYWUuYSkodGhpcy5fZGF0YSksc2l6ZTpPYmplY3QoYWUuYSkodGhpcy5fc2l6ZSksZGF0YXR5cGU6dGhpcy5fZGF0YXR5cGV9KX0saS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue21hdGhqczoiSW1tdXRhYmxlRGVuc2VNYXRyaXgiLGRhdGE6dGhpcy5fZGF0YSxzaXplOnRoaXMuX3NpemUsZGF0YXR5cGU6dGhpcy5fZGF0YXR5cGV9fSxpLmZyb21KU09OPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaShlKX0saS5wcm90b3R5cGUuc3dhcFJvd3M9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbnZva2Ugc3dhcFJvd3Mgb24gYW4gSW1tdXRhYmxlIE1hdHJpeCBpbnN0YW5jZSIpfSxpLnByb3RvdHlwZS5taW49ZnVuY3Rpb24oKXtpZihudWxsPT09dGhpcy5fbWluKXt2YXIgdD1udWxsO3RoaXMuZm9yRWFjaChmdW5jdGlvbihlKXtudWxsIT09dCYmIXIoZSx0KXx8KHQ9ZSl9KSx0aGlzLl9taW49bnVsbCE9PXQ/dDp2b2lkIDB9cmV0dXJuIHRoaXMuX21pbn0saS5wcm90b3R5cGUubWF4PWZ1bmN0aW9uKCl7aWYobnVsbD09PXRoaXMuX21heCl7dmFyIHQ9bnVsbDt0aGlzLmZvckVhY2goZnVuY3Rpb24oZSl7bnVsbCE9PXQmJiFyKHQsZSl8fCh0PWUpfSksdGhpcy5fbWF4PW51bGwhPT10P3Q6dm9pZCAwfXJldHVybiB0aGlzLl9tYXh9LGl9LHtpc0NsYXNzOiEwfSksbHM9WyJJbW11dGFibGVEZW5zZU1hdHJpeCJdLHBzPU9iamVjdChzLmEpKCJJbmRleCIsbHMsZnVuY3Rpb24oZSl7dmFyIG49ZS5JbW11dGFibGVEZW5zZU1hdHJpeDtmdW5jdGlvbiBvKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG8pKXRocm93IG5ldyBTeW50YXhFcnJvcigiQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yIik7dGhpcy5fZGltZW5zaW9ucz1bXSx0aGlzLl9pc1NjYWxhcj0hMDtmb3IodmFyIHQ9MCxyPWFyZ3VtZW50cy5sZW5ndGg7dDxyO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2lmKE9iamVjdChpZS5EKShuKSl0aGlzLl9kaW1lbnNpb25zLnB1c2gobiksdGhpcy5faXNTY2FsYXI9ITE7ZWxzZSBpZihBcnJheS5pc0FycmF5KG4pfHxPYmplY3QoaWUudikobikpe3ZhciBpPXMobi52YWx1ZU9mKCkpO3RoaXMuX2RpbWVuc2lvbnMucHVzaChpKTt2YXIgYT1pLnNpemUoKTsxPT09YS5sZW5ndGgmJjE9PT1hWzBdfHwodGhpcy5faXNTY2FsYXI9ITEpfWVsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBuKXRoaXMuX2RpbWVuc2lvbnMucHVzaChzKFtuXSkpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoIkRpbWVuc2lvbiBtdXN0IGJlIGFuIEFycmF5LCBNYXRyaXgsIG51bWJlciwgc3RyaW5nLCBvciBSYW5nZSIpO3RoaXMuX2RpbWVuc2lvbnMucHVzaChuKX19fWZ1bmN0aW9uIHMoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7dCsrKWlmKCJudW1iZXIiIT10eXBlb2YgZVt0XXx8IU9iamVjdChFLmkpKGVbdF0pKXRocm93IG5ldyBUeXBlRXJyb3IoIkluZGV4IHBhcmFtZXRlcnMgbXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VyIG51bWJlcnMiKTtyZXR1cm4gbmV3IG4oZSl9cmV0dXJuIG8ucHJvdG90eXBlLnR5cGU9IkluZGV4IixvLnByb3RvdHlwZS5pc0luZGV4PSEwLG8ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IG87cmV0dXJuIGUuX2RpbWVuc2lvbnM9T2JqZWN0KGFlLmEpKHRoaXMuX2RpbWVuc2lvbnMpLGUuX2lzU2NhbGFyPXRoaXMuX2lzU2NhbGFyLGV9LG8uY3JlYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBvO3JldHVybiBvLmFwcGx5KHQsZSksdH0sby5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTAscj10aGlzLl9kaW1lbnNpb25zLmxlbmd0aDt0PHI7dCsrKXt2YXIgbj10aGlzLl9kaW1lbnNpb25zW3RdO2VbdF09InN0cmluZyI9PXR5cGVvZiBuPzE6bi5zaXplKClbMF19cmV0dXJuIGV9LG8ucHJvdG90eXBlLm1heD1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTAscj10aGlzLl9kaW1lbnNpb25zLmxlbmd0aDt0PHI7dCsrKXt2YXIgbj10aGlzLl9kaW1lbnNpb25zW3RdO2VbdF09InN0cmluZyI9PXR5cGVvZiBuP246bi5tYXgoKX1yZXR1cm4gZX0sby5wcm90b3R5cGUubWluPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MCxyPXRoaXMuX2RpbWVuc2lvbnMubGVuZ3RoO3Q8cjt0Kyspe3ZhciBuPXRoaXMuX2RpbWVuc2lvbnNbdF07ZVt0XT0ic3RyaW5nIj09dHlwZW9mIG4/bjpuLm1pbigpfXJldHVybiBlfSxvLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9dGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7dDxyO3QrKyllKHRoaXMuX2RpbWVuc2lvbnNbdF0sdCx0aGlzKX0sby5wcm90b3R5cGUuZGltZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kaW1lbnNpb25zW2VdfHxudWxsfSxvLnByb3RvdHlwZS5pc09iamVjdFByb3BlcnR5PWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLl9kaW1lbnNpb25zLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiB0aGlzLl9kaW1lbnNpb25zWzBdfSxvLnByb3RvdHlwZS5nZXRPYmplY3RQcm9wZXJ0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzT2JqZWN0UHJvcGVydHkoKT90aGlzLl9kaW1lbnNpb25zWzBdOm51bGx9LG8ucHJvdG90eXBlLmlzU2NhbGFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzU2NhbGFyfSxvLnByb3RvdHlwZS52YWx1ZU9mPW8ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wLHI9dGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7dDxyO3QrKyl7dmFyIG49dGhpcy5fZGltZW5zaW9uc1t0XTtlLnB1c2goInN0cmluZyI9PXR5cGVvZiBuP246bi50b0FycmF5KCkpfXJldHVybiBlfSxvLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTAscj10aGlzLl9kaW1lbnNpb25zLmxlbmd0aDt0PHI7dCsrKXt2YXIgbj10aGlzLl9kaW1lbnNpb25zW3RdOyJzdHJpbmciPT10eXBlb2Ygbj9lLnB1c2goSlNPTi5zdHJpbmdpZnkobikpOmUucHVzaChuLnRvU3RyaW5nKCkpfXJldHVybiJbIitlLmpvaW4oIiwgIikrIl0ifSxvLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWF0aGpzOiJJbmRleCIsZGltZW5zaW9uczp0aGlzLl9kaW1lbnNpb25zfX0sby5mcm9tSlNPTj1mdW5jdGlvbihlKXtyZXR1cm4gby5jcmVhdGUoZS5kaW1lbnNpb25zKX0sb30se2lzQ2xhc3M6ITB9KSxtcz1bInNtYWxsZXIiLCJsYXJnZXIiXSxocz1PYmplY3Qocy5hKSgiRmlib25hY2NpSGVhcCIsbXMsZnVuY3Rpb24oZSl7dmFyIGw9ZS5zbWFsbGVyLHA9ZS5sYXJnZXIsbT0xL01hdGgubG9nKCgxK01hdGguc3FydCg1KSkvMik7ZnVuY3Rpb24gdCgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBTeW50YXhFcnJvcigiQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yIik7dGhpcy5fbWluaW11bT1udWxsLHRoaXMuX3NpemU9MH1mdW5jdGlvbiBpKGUsdCxyKXt0LmxlZnQucmlnaHQ9dC5yaWdodCx0LnJpZ2h0LmxlZnQ9dC5sZWZ0LHIuZGVncmVlLS0sci5jaGlsZD09PXQmJihyLmNoaWxkPXQucmlnaHQpLDA9PT1yLmRlZ3JlZSYmKHIuY2hpbGQ9bnVsbCksdC5sZWZ0PWUsdC5yaWdodD1lLnJpZ2h0LCgoZS5yaWdodD10KS5yaWdodC5sZWZ0PXQpLnBhcmVudD1udWxsLHQubWFyaz0hMX10LnByb3RvdHlwZS50eXBlPSJGaWJvbmFjY2lIZWFwIix0LnByb3RvdHlwZS5pc0ZpYm9uYWNjaUhlYXA9ITAsdC5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9e2tleTplLHZhbHVlOnQsZGVncmVlOjB9O2lmKHRoaXMuX21pbmltdW0pe3ZhciBuPXRoaXMuX21pbmltdW07ci5sZWZ0PW4sci5yaWdodD1uLnJpZ2h0LChuLnJpZ2h0PXIpLnJpZ2h0LmxlZnQ9cixsKGUsbi5rZXkpJiYodGhpcy5fbWluaW11bT1yKX1lbHNlKHIubGVmdD1yKS5yaWdodD1yLHRoaXMuX21pbmltdW09cjtyZXR1cm4gdGhpcy5fc2l6ZSsrLHJ9LHQucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2l6ZX0sdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9taW5pbXVtPW51bGwsdGhpcy5fc2l6ZT0wfSx0LnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLl9zaXplfSx0LnByb3RvdHlwZS5leHRyYWN0TWluaW11bT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX21pbmltdW07aWYobnVsbD09PWUpcmV0dXJuIGU7Zm9yKHZhciB0PXRoaXMuX21pbmltdW0scj1lLmRlZ3JlZSxuPWUuY2hpbGQ7MDxyOyl7dmFyIGk9bi5yaWdodDtuLmxlZnQucmlnaHQ9bi5yaWdodCxuLnJpZ2h0LmxlZnQ9bi5sZWZ0LG4ubGVmdD10LG4ucmlnaHQ9dC5yaWdodCwoKHQucmlnaHQ9bikucmlnaHQubGVmdD1uKS5wYXJlbnQ9bnVsbCxuPWksci0tfXJldHVybiBlLmxlZnQucmlnaHQ9ZS5yaWdodCxlLnJpZ2h0LmxlZnQ9ZS5sZWZ0LHQ9ZT09PWUucmlnaHQ/bnVsbDpmdW5jdGlvbihlLHQpe3ZhciByLG49TWF0aC5mbG9vcihNYXRoLmxvZyh0KSptKSsxLGk9bmV3IEFycmF5KG4pLGE9MCxvPWU7aWYobylmb3IoYSsrLG89by5yaWdodDtvIT09ZTspYSsrLG89by5yaWdodDtmb3IoOzA8YTspe2Zvcih2YXIgcz1vLmRlZ3JlZSx1PW8ucmlnaHQ7cj1pW3NdOyl7aWYocChvLmtleSxyLmtleSkpe3ZhciBjPXI7cj1vLG89Y31oKHIsbyksaVtzXT1udWxsLHMrK31pW3NdPW8sbz11LGEtLX1lPW51bGw7Zm9yKHZhciBmPTA7ZjxuO2YrKykocj1pW2ZdKSYmKGU/KHIubGVmdC5yaWdodD1yLnJpZ2h0LHIucmlnaHQubGVmdD1yLmxlZnQsci5sZWZ0PWUsci5yaWdodD1lLnJpZ2h0LChlLnJpZ2h0PXIpLnJpZ2h0LmxlZnQ9cixsKHIua2V5LGUua2V5KSYmKGU9cikpOmU9cik7cmV0dXJuIGV9KHQ9ZS5yaWdodCx0aGlzLl9zaXplKSx0aGlzLl9zaXplLS0sdGhpcy5fbWluaW11bT10LGV9LHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXt0aGlzLl9taW5pbXVtPWZ1bmN0aW9uKGUsdCxyKXt0LmtleT1yO3ZhciBuPXQucGFyZW50O24mJmwodC5rZXksbi5rZXkpJiYoaShlLHQsbiksZnVuY3Rpb24gZSh0LHIpe3ZhciBuPXIucGFyZW50O2lmKCFuKXJldHVybjtyLm1hcms/KGkodCxyLG4pLGUobikpOnIubWFyaz0hMH0oZSxuKSk7bCh0LmtleSxlLmtleSkmJihlPXQpO3JldHVybiBlfSh0aGlzLl9taW5pbXVtLGUsLTEpLHRoaXMuZXh0cmFjdE1pbmltdW0oKX07dmFyIGg9ZnVuY3Rpb24oZSx0KXtlLmxlZnQucmlnaHQ9ZS5yaWdodCxlLnJpZ2h0LmxlZnQ9ZS5sZWZ0LChlLnBhcmVudD10KS5jaGlsZD8oZS5sZWZ0PXQuY2hpbGQsZS5yaWdodD10LmNoaWxkLnJpZ2h0LCh0LmNoaWxkLnJpZ2h0PWUpLnJpZ2h0LmxlZnQ9ZSk6KCh0LmNoaWxkPWUpLnJpZ2h0PWUpLmxlZnQ9ZSx0LmRlZ3JlZSsrLGUubWFyaz0hMX07cmV0dXJuIHR9LHtpc0NsYXNzOiEwfSksZHM9WyJhZGRTY2FsYXIiLCJlcXVhbFNjYWxhciIsIkZpYm9uYWNjaUhlYXAiXSx5cz1PYmplY3Qocy5hKSgiU3BhIixkcyxmdW5jdGlvbihlKXt2YXIgbj1lLmFkZFNjYWxhcixjPWUuZXF1YWxTY2FsYXIsdD1lLkZpYm9uYWNjaUhlYXA7ZnVuY3Rpb24gcigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXRocm93IG5ldyBTeW50YXhFcnJvcigiQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yIik7dGhpcy5fdmFsdWVzPVtdLHRoaXMuX2hlYXA9bmV3IHR9cmV0dXJuIHIucHJvdG90eXBlLnR5cGU9IlNwYSIsci5wcm90b3R5cGUuaXNTcGE9ITAsci5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7aWYodGhpcy5fdmFsdWVzW2VdKXRoaXMuX3ZhbHVlc1tlXS52YWx1ZT10O2Vsc2V7dmFyIHI9dGhpcy5faGVhcC5pbnNlcnQoZSx0KTt0aGlzLl92YWx1ZXNbZV09cn19LHIucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl92YWx1ZXNbZV07cmV0dXJuIHQ/dC52YWx1ZTowfSxyLnByb3RvdHlwZS5hY2N1bXVsYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fdmFsdWVzW2VdO3I/ci52YWx1ZT1uKHIudmFsdWUsdCk6KHI9dGhpcy5faGVhcC5pbnNlcnQoZSx0KSx0aGlzLl92YWx1ZXNbZV09cil9LHIucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuX2hlYXAsaT10aGlzLl92YWx1ZXMsYT1bXSxvPW4uZXh0cmFjdE1pbmltdW0oKTtmb3IobyYmYS5wdXNoKG8pO28mJm8ua2V5PD10OylvLmtleT49ZSYmKGMoby52YWx1ZSwwKXx8cihvLmtleSxvLnZhbHVlLHRoaXMpKSwobz1uLmV4dHJhY3RNaW5pbXVtKCkpJiZhLnB1c2gobyk7Zm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciB1PWFbc107aVsobz1uLmluc2VydCh1LmtleSx1LnZhbHVlKSkua2V5XT1vfX0sci5wcm90b3R5cGUuc3dhcD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX3ZhbHVlc1tlXSxuPXRoaXMuX3ZhbHVlc1t0XTtpZighciYmbilyPXRoaXMuX2hlYXAuaW5zZXJ0KGUsbi52YWx1ZSksdGhpcy5faGVhcC5yZW1vdmUobiksdGhpcy5fdmFsdWVzW2VdPXIsdGhpcy5fdmFsdWVzW3RdPXZvaWQgMDtlbHNlIGlmKHImJiFuKW49dGhpcy5faGVhcC5pbnNlcnQodCxyLnZhbHVlKSx0aGlzLl9oZWFwLnJlbW92ZShyKSx0aGlzLl92YWx1ZXNbdF09bix0aGlzLl92YWx1ZXNbZV09dm9pZCAwO2Vsc2UgaWYociYmbil7dmFyIGk9ci52YWx1ZTtyLnZhbHVlPW4udmFsdWUsbi52YWx1ZT1pfX0scn0se2lzQ2xhc3M6ITB9KSxncz1ZbihmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGUoMSkuZXhwKCl9LHdzKSx2cz1ZbihmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGUoMSkucGx1cyhuZXcgZSg1KS5zcXJ0KCkpLmRpdigyKX0sd3MpLGJzPVluKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFjb3MoLTEpfSx3cykseHM9WW4oZnVuY3Rpb24oZSl7cmV0dXJuIGJzKGUpLnRpbWVzKDIpfSx3cyk7ZnVuY3Rpb24gd3MoZSl7cmV0dXJuIGVbMF0ucHJlY2lzaW9ufWZ1bmN0aW9uIE5zKGUpe3JldHVybihOcz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIE9zKCl7cmV0dXJuKE9zPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIE1zPVsiP29uIiwiY29uZmlnIiwiYWRkU2NhbGFyIiwic3VidHJhY3QiLCJtdWx0aXBseVNjYWxhciIsImRpdmlkZVNjYWxhciIsInBvdyIsImFicyIsImZpeCIsInJvdW5kIiwiZXF1YWwiLCJpc051bWVyaWMiLCJmb3JtYXQiLCJudW1iZXIiLCJDb21wbGV4IiwiQmlnTnVtYmVyIiwiRnJhY3Rpb24iXSxqcz1PYmplY3Qocy5hKSgiVW5pdCIsTXMsZnVuY3Rpb24oZSl7dmFyIHksZyx2LHQ9ZS5vbixiPWUuY29uZmlnLGM9ZS5hZGRTY2FsYXIsZj1lLnN1YnRyYWN0LGw9ZS5tdWx0aXBseVNjYWxhcixwPWUuZGl2aWRlU2NhbGFyLG09ZS5wb3csaD1lLmFicyxkPWUuZml4LHg9ZS5yb3VuZCx3PWUuZXF1YWwsaT1lLmlzTnVtZXJpYyxzPWUuZm9ybWF0LHI9ZS5udW1iZXIsbj1lLkNvbXBsZXgsTj1lLkJpZ051bWJlcixPPWUuRnJhY3Rpb24sYT1yO2Z1bmN0aW9uIE0oZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBNKSl0aHJvdyBuZXcgRXJyb3IoIkNvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvciIpO2lmKG51bGwhPWUmJiFpKGUpJiYhT2JqZWN0KGllLmopKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkZpcnN0IHBhcmFtZXRlciBpbiBVbml0IGNvbnN0cnVjdG9yIG11c3QgYmUgbnVtYmVyLCBCaWdOdW1iZXIsIEZyYWN0aW9uLCBDb21wbGV4LCBvciB1bmRlZmluZWQiKTtpZih2b2lkIDAhPT10JiYoInN0cmluZyIhPXR5cGVvZiB0fHwiIj09PXQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlNlY29uZCBwYXJhbWV0ZXIgaW4gVW5pdCBjb25zdHJ1Y3RvciBtdXN0IGJlIGEgc3RyaW5nIik7aWYodm9pZCAwIT09dCl7dmFyIHI9TS5wYXJzZSh0KTt0aGlzLnVuaXRzPXIudW5pdHMsdGhpcy5kaW1lbnNpb25zPXIuZGltZW5zaW9uc31lbHNle3RoaXMudW5pdHM9W3t1bml0OnoscHJlZml4OkkuTk9ORSxwb3dlcjowfV0sdGhpcy5kaW1lbnNpb25zPVtdO2Zvcih2YXIgbj0wO248cS5sZW5ndGg7bisrKXRoaXMuZGltZW5zaW9uc1tuXT0wfXRoaXMudmFsdWU9bnVsbCE9ZT90aGlzLl9ub3JtYWxpemUoZSk6bnVsbCx0aGlzLmZpeFByZWZpeD0hMSx0aGlzLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbj0hMH1mdW5jdGlvbiBqKCl7Zm9yKDsiICI9PT12fHwiXHQiPT09djspRSgpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIjAiPD1lJiZlPD0iOSJ9ZnVuY3Rpb24gRSgpe2crKyx2PXkuY2hhckF0KGcpfWZ1bmN0aW9uIHUoZSl7Zz1lLHY9eS5jaGFyQXQoZyl9ZnVuY3Rpb24gUygpe3ZhciBlLHQ9IiIscj1nO2lmKCIrIj09PXY/RSgpOiItIj09PXYmJih0Kz12LEUoKSksISgiMCI8PShlPXYpJiZlPD0iOSJ8fCIuIj09PWUpKXJldHVybiB1KHIpLG51bGw7aWYoIi4iPT09dil7aWYodCs9dixFKCksIW8odikpcmV0dXJuIHUociksbnVsbH1lbHNle2Zvcig7byh2KTspdCs9dixFKCk7Ii4iPT09diYmKHQrPXYsRSgpKX1mb3IoO28odik7KXQrPXYsRSgpO2lmKCJFIj09PXZ8fCJlIj09PXYpe3ZhciBuPSIiLGk9ZztpZihuKz12LEUoKSwiKyIhPT12JiYiLSIhPT12fHwobis9dixFKCkpLCFvKHYpKXJldHVybiB1KGkpLHQ7Zm9yKHQrPW47byh2KTspdCs9dixFKCl9cmV0dXJuIHR9ZnVuY3Rpb24gQSgpe2Zvcih2YXIgZT0iIix0PXkuY2hhckNvZGVBdChnKTs0ODw9dCYmdDw9NTd8fDY1PD10JiZ0PD05MHx8OTc8PXQmJnQ8PTEyMjspZSs9dixFKCksdD15LmNoYXJDb2RlQXQoZyk7cmV0dXJuKDY1PD0odD1lLmNoYXJDb2RlQXQoMCkpJiZ0PD05MHx8OTc8PXQmJnQ8PTEyMikmJmV8fG51bGx9ZnVuY3Rpb24gQyhlKXtyZXR1cm4gdj09PWUmJihFKCksZSl9ZnVuY3Rpb24gVChlKXtpZihPYmplY3QoYWUuZikoRCxlKSl7dmFyIHQ9RFtlXTtyZXR1cm57dW5pdDp0LHByZWZpeDp0LnByZWZpeGVzWyIiXX19Zm9yKHZhciByIGluIEQpaWYoT2JqZWN0KGFlLmYpKEQscikmJk9iamVjdChKLmIpKGUscikpe3ZhciBuPURbcl0saT1lLmxlbmd0aC1yLmxlbmd0aCxhPWUuc3Vic3RyaW5nKDAsaSksbz1PYmplY3QoYWUuZikobi5wcmVmaXhlcyxhKT9uLnByZWZpeGVzW2FdOnZvaWQgMDtpZih2b2lkIDAhPT1vKXJldHVybnt1bml0Om4scHJlZml4Om99fXJldHVybiBudWxsfWZ1bmN0aW9uIF8oZSl7cmV0dXJuIGUuZXF1YWxCYXNlKEIuTk9ORSkmJm51bGwhPT1lLnZhbHVlJiYhYi5wcmVkaWN0YWJsZT9lLnZhbHVlOmV9TS5wcm90b3R5cGUudHlwZT0iVW5pdCIsTS5wcm90b3R5cGUuaXNVbml0PSEwLE0ucGFyc2U9ZnVuY3Rpb24oZSx0KXtpZih0PXR8fHt9LGc9LTEsdj0iIiwic3RyaW5nIiE9dHlwZW9mKHk9ZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhcmd1bWVudCBpbiBVbml0LnBhcnNlLCBzdHJpbmcgZXhwZWN0ZWQiKTt2YXIgcj1uZXcgTSxuPTEsaT0hKHIudW5pdHM9W10pO0UoKSxqKCk7dmFyIGE9UygpLG89bnVsbDtpZihhKXtpZigiQmlnTnVtYmVyIj09PWIubnVtYmVyKW89bmV3IE4oYSk7ZWxzZSBpZigiRnJhY3Rpb24iPT09Yi5udW1iZXIpdHJ5e289bmV3IE8oYSl9Y2F0Y2goZSl7bz1wYXJzZUZsb2F0KGEpfWVsc2Ugbz1wYXJzZUZsb2F0KGEpO2ooKSxDKCIqIik/KG49MSxpPSEwKTpDKCIvIikmJihuPS0xLGk9ITApfWZvcih2YXIgcz1bXSx1PTE7Oyl7Zm9yKGooKTsiKCI9PT12OylzLnB1c2gobiksdSo9bixuPTEsRSgpLGooKTt2YXIgYz12b2lkIDA7aWYoIXYpYnJlYWs7dmFyIGY9djtpZihudWxsPT09KGM9QSgpKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1VuZXhwZWN0ZWQgIicrZisnIiBpbiAiJyt5KyciIGF0IGluZGV4ICcrZy50b1N0cmluZygpKTt2YXIgbD1UKGMpO2lmKG51bGw9PT1sKXRocm93IG5ldyBTeW50YXhFcnJvcignVW5pdCAiJytjKyciIG5vdCBmb3VuZC4nKTt2YXIgcD1uKnU7aWYoaigpLEMoIl4iKSl7aigpO3ZhciBtPVMoKTtpZihudWxsPT09bSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0luICInK2UrJyIsICJeIiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyJyk7cCo9bX1yLnVuaXRzLnB1c2goe3VuaXQ6bC51bml0LHByZWZpeDpsLnByZWZpeCxwb3dlcjpwfSk7Zm9yKHZhciBoPTA7aDxxLmxlbmd0aDtoKyspci5kaW1lbnNpb25zW2hdKz0obC51bml0LmRpbWVuc2lvbnNbaF18fDApKnA7Zm9yKGooKTsiKSI9PT12Oyl7aWYoMD09PXMubGVuZ3RoKXRocm93IG5ldyBTeW50YXhFcnJvcignVW5tYXRjaGVkICIpIiBpbiAiJyt5KyciIGF0IGluZGV4ICcrZy50b1N0cmluZygpKTt1Lz1zLnBvcCgpLEUoKSxqKCl9aWYoaT0hMSxDKCIqIik/KG49MSxpPSEwKTpDKCIvIik/KG49LTEsaT0hMCk6bj0xLGwudW5pdC5iYXNlKXt2YXIgZD1sLnVuaXQuYmFzZS5rZXk7Ri5hdXRvW2RdPXt1bml0OmwudW5pdCxwcmVmaXg6bC5wcmVmaXh9fX1pZihqKCksdil0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvdWxkIG5vdCBwYXJzZTogIicrZSsnIicpO2lmKGkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCdUcmFpbGluZyBjaGFyYWN0ZXJzOiAiJytlKyciJyk7aWYoMCE9PXMubGVuZ3RoKXRocm93IG5ldyBTeW50YXhFcnJvcignVW5tYXRjaGVkICIoIiBpbiAiJyt5KyciJyk7aWYoMD09PXIudW5pdHMubGVuZ3RoJiYhdC5hbGxvd05vVW5pdHMpdGhyb3cgbmV3IFN5bnRheEVycm9yKCciJytlKyciIGNvbnRhaW5zIG5vIHVuaXRzJyk7cmV0dXJuIHIudmFsdWU9dm9pZCAwIT09bz9yLl9ub3JtYWxpemUobyk6bnVsbCxyfSxNLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBlPW5ldyBNO2UuZml4UHJlZml4PXRoaXMuZml4UHJlZml4LGUuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uPXRoaXMuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uLGUudmFsdWU9T2JqZWN0KGFlLmEpKHRoaXMudmFsdWUpLGUuZGltZW5zaW9ucz10aGlzLmRpbWVuc2lvbnMuc2xpY2UoMCksZS51bml0cz1bXTtmb3IodmFyIHQ9MDt0PHRoaXMudW5pdHMubGVuZ3RoO3QrKylmb3IodmFyIHIgaW4gZS51bml0c1t0XT17fSx0aGlzLnVuaXRzW3RdKU9iamVjdChhZS5mKSh0aGlzLnVuaXRzW3RdLHIpJiYoZS51bml0c1t0XVtyXT10aGlzLnVuaXRzW3RdW3JdKTtyZXR1cm4gZX0sTS5wcm90b3R5cGUuX2lzRGVyaXZlZD1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy51bml0cy5sZW5ndGgmJigxPHRoaXMudW5pdHMubGVuZ3RofHwxZS0xNTxNYXRoLmFicyh0aGlzLnVuaXRzWzBdLnBvd2VyLTEpKX0sTS5wcm90b3R5cGUuX25vcm1hbGl6ZT1mdW5jdGlvbihlKXt2YXIgdCxyLG4saSxhO2lmKG51bGw9PWV8fDA9PT10aGlzLnVuaXRzLmxlbmd0aClyZXR1cm4gZTtpZih0aGlzLl9pc0Rlcml2ZWQoKSl7dmFyIG89ZTthPU0uX2dldE51bWJlckNvbnZlcnRlcihPYmplY3QoaWUuTSkoZSkpO2Zvcih2YXIgcz0wO3M8dGhpcy51bml0cy5sZW5ndGg7cysrKXQ9YSh0aGlzLnVuaXRzW3NdLnVuaXQudmFsdWUpLGk9YSh0aGlzLnVuaXRzW3NdLnByZWZpeC52YWx1ZSksbj1hKHRoaXMudW5pdHNbc10ucG93ZXIpLG89bChvLG0obCh0LGkpLG4pKTtyZXR1cm4gb31yZXR1cm4gdD0oYT1NLl9nZXROdW1iZXJDb252ZXJ0ZXIoT2JqZWN0KGllLk0pKGUpKSkodGhpcy51bml0c1swXS51bml0LnZhbHVlKSxyPWEodGhpcy51bml0c1swXS51bml0Lm9mZnNldCksaT1hKHRoaXMudW5pdHNbMF0ucHJlZml4LnZhbHVlKSxsKGMoZSxyKSxsKHQsaSkpfSxNLnByb3RvdHlwZS5fZGVub3JtYWxpemU9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGksYSxvO2lmKG51bGw9PWV8fDA9PT10aGlzLnVuaXRzLmxlbmd0aClyZXR1cm4gZTtpZih0aGlzLl9pc0Rlcml2ZWQoKSl7dmFyIHM9ZTtvPU0uX2dldE51bWJlckNvbnZlcnRlcihPYmplY3QoaWUuTSkoZSkpO2Zvcih2YXIgdT0wO3U8dGhpcy51bml0cy5sZW5ndGg7dSsrKXI9byh0aGlzLnVuaXRzW3VdLnVuaXQudmFsdWUpLGE9byh0aGlzLnVuaXRzW3VdLnByZWZpeC52YWx1ZSksaT1vKHRoaXMudW5pdHNbdV0ucG93ZXIpLHM9cChzLG0obChyLGEpLGkpKTtyZXR1cm4gc31yZXR1cm4gcj0obz1NLl9nZXROdW1iZXJDb252ZXJ0ZXIoT2JqZWN0KGllLk0pKGUpKSkodGhpcy51bml0c1swXS51bml0LnZhbHVlKSxhPW8odGhpcy51bml0c1swXS5wcmVmaXgudmFsdWUpLG49byh0aGlzLnVuaXRzWzBdLnVuaXQub2Zmc2V0KSxmKHAocChlLHIpLG51bGw9PXQ/YTp0KSxuKX0sTS5pc1ZhbHVlbGVzc1VuaXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1UKGUpfSxNLnByb3RvdHlwZS5oYXNCYXNlPWZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9QltlXSksIWUpcmV0dXJuITE7Zm9yKHZhciB0PTA7dDxxLmxlbmd0aDt0KyspaWYoMWUtMTI8TWF0aC5hYnMoKHRoaXMuZGltZW5zaW9uc1t0XXx8MCktKGUuZGltZW5zaW9uc1t0XXx8MCkpKXJldHVybiExO3JldHVybiEwfSxNLnByb3RvdHlwZS5lcXVhbEJhc2U9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxxLmxlbmd0aDt0KyspaWYoMWUtMTI8TWF0aC5hYnMoKHRoaXMuZGltZW5zaW9uc1t0XXx8MCktKGUuZGltZW5zaW9uc1t0XXx8MCkpKXJldHVybiExO3JldHVybiEwfSxNLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZXF1YWxCYXNlKGUpJiZ3KHRoaXMudmFsdWUsZS52YWx1ZSl9LE0ucHJvdG90eXBlLm11bHRpcGx5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmNsb25lKCkscj0wO3I8cS5sZW5ndGg7cisrKXQuZGltZW5zaW9uc1tyXT0odGhpcy5kaW1lbnNpb25zW3JdfHwwKSsoZS5kaW1lbnNpb25zW3JdfHwwKTtmb3IodmFyIG49MDtuPGUudW5pdHMubGVuZ3RoO24rKyl7dmFyIGk9e307Zm9yKHZhciBhIGluIGUudW5pdHNbbl0paVthXT1lLnVuaXRzW25dW2FdO3QudW5pdHMucHVzaChpKX1pZihudWxsIT09dGhpcy52YWx1ZXx8bnVsbCE9PWUudmFsdWUpe3ZhciBvPW51bGw9PT10aGlzLnZhbHVlP3RoaXMuX25vcm1hbGl6ZSgxKTp0aGlzLnZhbHVlLHM9bnVsbD09PWUudmFsdWU/ZS5fbm9ybWFsaXplKDEpOmUudmFsdWU7dC52YWx1ZT1sKG8scyl9ZWxzZSB0LnZhbHVlPW51bGw7cmV0dXJuIHQuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uPSExLF8odCl9LE0ucHJvdG90eXBlLmRpdmlkZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jbG9uZSgpLHI9MDtyPHEubGVuZ3RoO3IrKyl0LmRpbWVuc2lvbnNbcl09KHRoaXMuZGltZW5zaW9uc1tyXXx8MCktKGUuZGltZW5zaW9uc1tyXXx8MCk7Zm9yKHZhciBuPTA7bjxlLnVuaXRzLmxlbmd0aDtuKyspe3ZhciBpPXt9O2Zvcih2YXIgYSBpbiBlLnVuaXRzW25dKWlbYV09ZS51bml0c1tuXVthXTtpLnBvd2VyPS1pLnBvd2VyLHQudW5pdHMucHVzaChpKX1pZihudWxsIT09dGhpcy52YWx1ZXx8bnVsbCE9PWUudmFsdWUpe3ZhciBvPW51bGw9PT10aGlzLnZhbHVlP3RoaXMuX25vcm1hbGl6ZSgxKTp0aGlzLnZhbHVlLHM9bnVsbD09PWUudmFsdWU/ZS5fbm9ybWFsaXplKDEpOmUudmFsdWU7dC52YWx1ZT1wKG8scyl9ZWxzZSB0LnZhbHVlPW51bGw7cmV0dXJuIHQuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uPSExLF8odCl9LE0ucHJvdG90eXBlLnBvdz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jbG9uZSgpLHI9MDtyPHEubGVuZ3RoO3IrKyl0LmRpbWVuc2lvbnNbcl09KHRoaXMuZGltZW5zaW9uc1tyXXx8MCkqZTtmb3IodmFyIG49MDtuPHQudW5pdHMubGVuZ3RoO24rKyl0LnVuaXRzW25dLnBvd2VyKj1lO3JldHVybiBudWxsIT09dC52YWx1ZT90LnZhbHVlPW0odC52YWx1ZSxlKTp0LnZhbHVlPW51bGwsdC5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb249ITEsXyh0KX0sTS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jbG9uZSgpO2Zvcih2YXIgdCBpbiBlLnZhbHVlPW51bGwhPT1lLnZhbHVlP2goZS52YWx1ZSk6bnVsbCxlLnVuaXRzKSJWQSIhPT1lLnVuaXRzW3RdLnVuaXQubmFtZSYmIlZBUiIhPT1lLnVuaXRzW3RdLnVuaXQubmFtZXx8KGUudW5pdHNbdF0udW5pdD1ELlcpO3JldHVybiBlfSxNLnByb3RvdHlwZS50bz1mdW5jdGlvbihlKXt2YXIgdCxyPW51bGw9PT10aGlzLnZhbHVlP3RoaXMuX25vcm1hbGl6ZSgxKTp0aGlzLnZhbHVlO2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYodD1NLnBhcnNlKGUpLCF0aGlzLmVxdWFsQmFzZSh0KSl0aHJvdyBuZXcgRXJyb3IoIlVuaXRzIGRvIG5vdCBtYXRjaCAoJyIuY29uY2F0KHQudG9TdHJpbmcoKSwiJyAhPSAnIikuY29uY2F0KHRoaXMudG9TdHJpbmcoKSwiJykiKSk7aWYobnVsbCE9PXQudmFsdWUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29udmVydCB0byBhIHVuaXQgd2l0aCBhIHZhbHVlIik7cmV0dXJuIHQudmFsdWU9T2JqZWN0KGFlLmEpKHIpLHQuZml4UHJlZml4PSEwLHQuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uPSEwLHR9aWYoT2JqZWN0KGllLkwpKGUpKXtpZighdGhpcy5lcXVhbEJhc2UoZSkpdGhyb3cgbmV3IEVycm9yKCJVbml0cyBkbyBub3QgbWF0Y2ggKCciLmNvbmNhdChlLnRvU3RyaW5nKCksIicgIT0gJyIpLmNvbmNhdCh0aGlzLnRvU3RyaW5nKCksIicpIikpO2lmKG51bGwhPT1lLnZhbHVlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNvbnZlcnQgdG8gYSB1bml0IHdpdGggYSB2YWx1ZSIpO3JldHVybih0PWUuY2xvbmUoKSkudmFsdWU9T2JqZWN0KGFlLmEpKHIpLHQuZml4UHJlZml4PSEwLHQuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uPSEwLHR9dGhyb3cgbmV3IEVycm9yKCJTdHJpbmcgb3IgVW5pdCBleHBlY3RlZCBhcyBwYXJhbWV0ZXIiKX0sTS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGEodGhpcy50b051bWVyaWMoZSkpfSxNLnByb3RvdHlwZS50b051bWVyaWM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuKHQ9ZT90aGlzLnRvKGUpOnRoaXMuY2xvbmUoKSkuX2lzRGVyaXZlZCgpP3QuX2Rlbm9ybWFsaXplKHQudmFsdWUpOnQuX2Rlbm9ybWFsaXplKHQudmFsdWUsdC51bml0c1swXS5wcmVmaXgudmFsdWUpfSxNLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZvcm1hdCgpfSxNLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWF0aGpzOiJVbml0Iix2YWx1ZTp0aGlzLl9kZW5vcm1hbGl6ZSh0aGlzLnZhbHVlKSx1bml0OnRoaXMuZm9ybWF0VW5pdHMoKSxmaXhQcmVmaXg6dGhpcy5maXhQcmVmaXh9fSxNLmZyb21KU09OPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBNKGUudmFsdWUsZS51bml0KTtyZXR1cm4gdC5maXhQcmVmaXg9ZS5maXhQcmVmaXh8fCExLHR9LE0ucHJvdG90eXBlLnZhbHVlT2Y9TS5wcm90b3R5cGUudG9TdHJpbmcsTS5wcm90b3R5cGUuc2ltcGxpZnk9ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcy5jbG9uZSgpLG49W107Zm9yKHZhciBpIGluIFUpaWYoci5oYXNCYXNlKEJbaV0pKXtlPWk7YnJlYWt9aWYoIk5PTkUiPT09ZSlyLnVuaXRzPVtdO2Vsc2UgaWYoZSYmT2JqZWN0KGFlLmYpKFUsZSkmJih0PVVbZV0pLHQpci51bml0cz1be3VuaXQ6dC51bml0LHByZWZpeDp0LnByZWZpeCxwb3dlcjoxfV07ZWxzZXtmb3IodmFyIGE9ITEsbz0wO288cS5sZW5ndGg7bysrKXt2YXIgcz1xW29dOzFlLTEyPE1hdGguYWJzKHIuZGltZW5zaW9uc1tvXXx8MCkmJihPYmplY3QoYWUuZikoVSxzKT9uLnB1c2goe3VuaXQ6VVtzXS51bml0LHByZWZpeDpVW3NdLnByZWZpeCxwb3dlcjpyLmRpbWVuc2lvbnNbb118fDB9KTphPSEwKX1uLmxlbmd0aDxyLnVuaXRzLmxlbmd0aCYmIWEmJihyLnVuaXRzPW4pfXJldHVybiByfSxNLnByb3RvdHlwZS50b1NJPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuY2xvbmUoKSx0PVtdLHI9MDtyPHEubGVuZ3RoO3IrKyl7dmFyIG49cVtyXTtpZigxZS0xMjxNYXRoLmFicyhlLmRpbWVuc2lvbnNbcl18fDApKXtpZighT2JqZWN0KGFlLmYpKEYuc2ksbikpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZXhwcmVzcyBjdXN0b20gdW5pdCAiK24rIiBpbiBTSSB1bml0cyIpO3QucHVzaCh7dW5pdDpGLnNpW25dLnVuaXQscHJlZml4OkYuc2lbbl0ucHJlZml4LHBvd2VyOmUuZGltZW5zaW9uc1tyXXx8MH0pfX1yZXR1cm4gZS51bml0cz10LGUuZml4UHJlZml4PSEwLGUuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uPSEwLGV9LE0ucHJvdG90eXBlLmZvcm1hdFVuaXRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPSIiLHQ9IiIscj0wLG49MCxpPTA7aTx0aGlzLnVuaXRzLmxlbmd0aDtpKyspMDx0aGlzLnVuaXRzW2ldLnBvd2VyPyhyKyssZSs9IiAiK3RoaXMudW5pdHNbaV0ucHJlZml4Lm5hbWUrdGhpcy51bml0c1tpXS51bml0Lm5hbWUsMWUtMTU8TWF0aC5hYnModGhpcy51bml0c1tpXS5wb3dlci0xKSYmKGUrPSJeIit0aGlzLnVuaXRzW2ldLnBvd2VyKSk6dGhpcy51bml0c1tpXS5wb3dlcjwwJiZuKys7aWYoMDxuKWZvcih2YXIgYT0wO2E8dGhpcy51bml0cy5sZW5ndGg7YSsrKXRoaXMudW5pdHNbYV0ucG93ZXI8MCYmKDA8cj8odCs9IiAiK3RoaXMudW5pdHNbYV0ucHJlZml4Lm5hbWUrdGhpcy51bml0c1thXS51bml0Lm5hbWUsMWUtMTU8TWF0aC5hYnModGhpcy51bml0c1thXS5wb3dlcisxKSYmKHQrPSJeIistdGhpcy51bml0c1thXS5wb3dlcikpOih0Kz0iICIrdGhpcy51bml0c1thXS5wcmVmaXgubmFtZSt0aGlzLnVuaXRzW2FdLnVuaXQubmFtZSx0Kz0iXiIrdGhpcy51bml0c1thXS5wb3dlcikpO2U9ZS5zdWJzdHIoMSksdD10LnN1YnN0cigxKSwxPHImJjA8biYmKGU9IigiK2UrIikiKSwxPG4mJjA8ciYmKHQ9IigiK3QrIikiKTt2YXIgbz1lO3JldHVybiAwPHImJjA8biYmKG8rPSIgLyAiKSxvKz10fSxNLnByb3RvdHlwZS5mb3JtYXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb258fG51bGw9PT10aGlzLnZhbHVlP3RoaXMuY2xvbmUoKTp0aGlzLnNpbXBsaWZ5KCkscj0hMTtmb3IodmFyIG4gaW4gdm9pZCAwIT09dC52YWx1ZSYmbnVsbCE9PXQudmFsdWUmJk9iamVjdChpZS5qKSh0LnZhbHVlKSYmKHI9TWF0aC5hYnModC52YWx1ZS5yZSk8MWUtMTQpLHQudW5pdHMpdC51bml0c1tuXS51bml0JiYoIlZBIj09PXQudW5pdHNbbl0udW5pdC5uYW1lJiZyP3QudW5pdHNbbl0udW5pdD1ELlZBUjoiVkFSIiE9PXQudW5pdHNbbl0udW5pdC5uYW1lfHxyfHwodC51bml0c1tuXS51bml0PUQuVkEpKTsxIT09dC51bml0cy5sZW5ndGh8fHQuZml4UHJlZml4fHxNYXRoLmFicyh0LnVuaXRzWzBdLnBvd2VyLU1hdGgucm91bmQodC51bml0c1swXS5wb3dlcikpPDFlLTE0JiYodC51bml0c1swXS5wcmVmaXg9dC5fYmVzdFByZWZpeCgpKTt2YXIgaT10Ll9kZW5vcm1hbGl6ZSh0LnZhbHVlKSxhPW51bGwhPT10LnZhbHVlP3MoaSxlfHx7fSk6IiIsbz10LmZvcm1hdFVuaXRzKCk7cmV0dXJuIHQudmFsdWUmJk9iamVjdChpZS5qKSh0LnZhbHVlKSYmKGE9IigiK2ErIikiKSwwPG8ubGVuZ3RoJiYwPGEubGVuZ3RoJiYoYSs9IiAiKSxhKz1vfSxNLnByb3RvdHlwZS5fYmVzdFByZWZpeD1mdW5jdGlvbigpe2lmKDEhPT10aGlzLnVuaXRzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbiBvbmx5IGNvbXB1dGUgdGhlIGJlc3QgcHJlZml4IGZvciBzaW5nbGUgdW5pdHMgd2l0aCBpbnRlZ2VyIHBvd2VycywgbGlrZSBrZywgc14yLCBOXi0xLCBhbmQgc28gZm9ydGghIik7aWYoMWUtMTQ8PU1hdGguYWJzKHRoaXMudW5pdHNbMF0ucG93ZXItTWF0aC5yb3VuZCh0aGlzLnVuaXRzWzBdLnBvd2VyKSkpdGhyb3cgbmV3IEVycm9yKCJDYW4gb25seSBjb21wdXRlIHRoZSBiZXN0IHByZWZpeCBmb3Igc2luZ2xlIHVuaXRzIHdpdGggaW50ZWdlciBwb3dlcnMsIGxpa2Uga2csIHNeMiwgTl4tMSwgYW5kIHNvIGZvcnRoISIpO3ZhciBlPW51bGwhPT10aGlzLnZhbHVlP2godGhpcy52YWx1ZSk6MCx0PWgodGhpcy51bml0c1swXS51bml0LnZhbHVlKSxyPXRoaXMudW5pdHNbMF0ucHJlZml4O2lmKDA9PT1lKXJldHVybiByO3ZhciBuPXRoaXMudW5pdHNbMF0ucG93ZXIsaT1NYXRoLmxvZyhlL01hdGgucG93KHIudmFsdWUqdCxuKSkvTWF0aC5MTjEwLTEuMjtpZigtMi4yMDAwMDE8aSYmaTwxLjgwMDAwMSlyZXR1cm4gcjtpPU1hdGguYWJzKGkpO3ZhciBhPXRoaXMudW5pdHNbMF0udW5pdC5wcmVmaXhlcztmb3IodmFyIG8gaW4gYSlpZihPYmplY3QoYWUuZikoYSxvKSl7dmFyIHM9YVtvXTtpZihzLnNjaWVudGlmaWMpe3ZhciB1PU1hdGguYWJzKE1hdGgubG9nKGUvTWF0aC5wb3cocy52YWx1ZSp0LG4pKS9NYXRoLkxOMTAtMS4yKTsodTxpfHx1PT09aSYmcy5uYW1lLmxlbmd0aDxyLm5hbWUubGVuZ3RoKSYmKHI9cyxpPXUpfX1yZXR1cm4gcn07dmFyIEk9e05PTkU6eyIiOntuYW1lOiIiLHZhbHVlOjEsc2NpZW50aWZpYzohMH19LFNIT1JUOnsiIjp7bmFtZToiIix2YWx1ZToxLHNjaWVudGlmaWM6ITB9LGRhOntuYW1lOiJkYSIsdmFsdWU6MTAsc2NpZW50aWZpYzohKE0ucHJvdG90eXBlLnNwbGl0VW5pdD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jbG9uZSgpLHI9W10sbj0wO248ZS5sZW5ndGgmJih0PXQudG8oZVtuXSksbiE9PWUubGVuZ3RoLTEpO24rKyl7dmFyIGk9dC50b051bWVyaWMoKSxhPXgoaSksbz1uZXcgTSh3KGEsaSk/YTpkKHQudG9OdW1lcmljKCkpLGVbbl0udG9TdHJpbmcoKSk7ci5wdXNoKG8pLHQ9Zih0LG8pfWZvcih2YXIgcz0wLHU9MDt1PHIubGVuZ3RoO3UrKylzPWMocyxyW3VdLnZhbHVlKTtyZXR1cm4gdyhzLHRoaXMudmFsdWUpJiYodC52YWx1ZT0wKSxyLnB1c2godCkscn0pfSxoOntuYW1lOiJoIix2YWx1ZToxMDAsc2NpZW50aWZpYzohMX0sazp7bmFtZToiayIsdmFsdWU6MWUzLHNjaWVudGlmaWM6ITB9LE06e25hbWU6Ik0iLHZhbHVlOjFlNixzY2llbnRpZmljOiEwfSxHOntuYW1lOiJHIix2YWx1ZToxZTksc2NpZW50aWZpYzohMH0sVDp7bmFtZToiVCIsdmFsdWU6MWUxMixzY2llbnRpZmljOiEwfSxQOntuYW1lOiJQIix2YWx1ZToxZTE1LHNjaWVudGlmaWM6ITB9LEU6e25hbWU6IkUiLHZhbHVlOjFlMTgsc2NpZW50aWZpYzohMH0sWjp7bmFtZToiWiIsdmFsdWU6MWUyMSxzY2llbnRpZmljOiEwfSxZOntuYW1lOiJZIix2YWx1ZToxZTI0LHNjaWVudGlmaWM6ITB9LGQ6e25hbWU6ImQiLHZhbHVlOi4xLHNjaWVudGlmaWM6ITF9LGM6e25hbWU6ImMiLHZhbHVlOi4wMSxzY2llbnRpZmljOiExfSxtOntuYW1lOiJtIix2YWx1ZTouMDAxLHNjaWVudGlmaWM6ITB9LHU6e25hbWU6InUiLHZhbHVlOjFlLTYsc2NpZW50aWZpYzohMH0sbjp7bmFtZToibiIsdmFsdWU6MWUtOSxzY2llbnRpZmljOiEwfSxwOntuYW1lOiJwIix2YWx1ZToxZS0xMixzY2llbnRpZmljOiEwfSxmOntuYW1lOiJmIix2YWx1ZToxZS0xNSxzY2llbnRpZmljOiEwfSxhOntuYW1lOiJhIix2YWx1ZToxZS0xOCxzY2llbnRpZmljOiEwfSx6OntuYW1lOiJ6Iix2YWx1ZToxZS0yMSxzY2llbnRpZmljOiEwfSx5OntuYW1lOiJ5Iix2YWx1ZToxZS0yNCxzY2llbnRpZmljOiEwfX0sTE9ORzp7IiI6e25hbWU6IiIsdmFsdWU6MSxzY2llbnRpZmljOiEwfSxkZWNhOntuYW1lOiJkZWNhIix2YWx1ZToxMCxzY2llbnRpZmljOiExfSxoZWN0bzp7bmFtZToiaGVjdG8iLHZhbHVlOjEwMCxzY2llbnRpZmljOiExfSxraWxvOntuYW1lOiJraWxvIix2YWx1ZToxZTMsc2NpZW50aWZpYzohMH0sbWVnYTp7bmFtZToibWVnYSIsdmFsdWU6MWU2LHNjaWVudGlmaWM6ITB9LGdpZ2E6e25hbWU6ImdpZ2EiLHZhbHVlOjFlOSxzY2llbnRpZmljOiEwfSx0ZXJhOntuYW1lOiJ0ZXJhIix2YWx1ZToxZTEyLHNjaWVudGlmaWM6ITB9LHBldGE6e25hbWU6InBldGEiLHZhbHVlOjFlMTUsc2NpZW50aWZpYzohMH0sZXhhOntuYW1lOiJleGEiLHZhbHVlOjFlMTgsc2NpZW50aWZpYzohMH0semV0dGE6e25hbWU6InpldHRhIix2YWx1ZToxZTIxLHNjaWVudGlmaWM6ITB9LHlvdHRhOntuYW1lOiJ5b3R0YSIsdmFsdWU6MWUyNCxzY2llbnRpZmljOiEwfSxkZWNpOntuYW1lOiJkZWNpIix2YWx1ZTouMSxzY2llbnRpZmljOiExfSxjZW50aTp7bmFtZToiY2VudGkiLHZhbHVlOi4wMSxzY2llbnRpZmljOiExfSxtaWxsaTp7bmFtZToibWlsbGkiLHZhbHVlOi4wMDEsc2NpZW50aWZpYzohMH0sbWljcm86e25hbWU6Im1pY3JvIix2YWx1ZToxZS02LHNjaWVudGlmaWM6ITB9LG5hbm86e25hbWU6Im5hbm8iLHZhbHVlOjFlLTksc2NpZW50aWZpYzohMH0scGljbzp7bmFtZToicGljbyIsdmFsdWU6MWUtMTIsc2NpZW50aWZpYzohMH0sZmVtdG86e25hbWU6ImZlbXRvIix2YWx1ZToxZS0xNSxzY2llbnRpZmljOiEwfSxhdHRvOntuYW1lOiJhdHRvIix2YWx1ZToxZS0xOCxzY2llbnRpZmljOiEwfSx6ZXB0bzp7bmFtZToiemVwdG8iLHZhbHVlOjFlLTIxLHNjaWVudGlmaWM6ITB9LHlvY3RvOntuYW1lOiJ5b2N0byIsdmFsdWU6MWUtMjQsc2NpZW50aWZpYzohMH19LFNRVUFSRUQ6eyIiOntuYW1lOiIiLHZhbHVlOjEsc2NpZW50aWZpYzohMH0sZGE6e25hbWU6ImRhIix2YWx1ZToxMDAsc2NpZW50aWZpYzohMX0saDp7bmFtZToiaCIsdmFsdWU6MWU0LHNjaWVudGlmaWM6ITF9LGs6e25hbWU6ImsiLHZhbHVlOjFlNixzY2llbnRpZmljOiEwfSxNOntuYW1lOiJNIix2YWx1ZToxZTEyLHNjaWVudGlmaWM6ITB9LEc6e25hbWU6IkciLHZhbHVlOjFlMTgsc2NpZW50aWZpYzohMH0sVDp7bmFtZToiVCIsdmFsdWU6MWUyNCxzY2llbnRpZmljOiEwfSxQOntuYW1lOiJQIix2YWx1ZToxZTMwLHNjaWVudGlmaWM6ITB9LEU6e25hbWU6IkUiLHZhbHVlOjFlMzYsc2NpZW50aWZpYzohMH0sWjp7bmFtZToiWiIsdmFsdWU6MWU0MixzY2llbnRpZmljOiEwfSxZOntuYW1lOiJZIix2YWx1ZToxZTQ4LHNjaWVudGlmaWM6ITB9LGQ6e25hbWU6ImQiLHZhbHVlOi4wMSxzY2llbnRpZmljOiExfSxjOntuYW1lOiJjIix2YWx1ZToxZS00LHNjaWVudGlmaWM6ITF9LG06e25hbWU6Im0iLHZhbHVlOjFlLTYsc2NpZW50aWZpYzohMH0sdTp7bmFtZToidSIsdmFsdWU6MWUtMTIsc2NpZW50aWZpYzohMH0sbjp7bmFtZToibiIsdmFsdWU6MWUtMTgsc2NpZW50aWZpYzohMH0scDp7bmFtZToicCIsdmFsdWU6MWUtMjQsc2NpZW50aWZpYzohMH0sZjp7bmFtZToiZiIsdmFsdWU6MWUtMzAsc2NpZW50aWZpYzohMH0sYTp7bmFtZToiYSIsdmFsdWU6MWUtMzYsc2NpZW50aWZpYzohMH0sejp7bmFtZToieiIsdmFsdWU6MWUtNDIsc2NpZW50aWZpYzohMH0seTp7bmFtZToieSIsdmFsdWU6MWUtNDgsc2NpZW50aWZpYzohMH19LENVQklDOnsiIjp7bmFtZToiIix2YWx1ZToxLHNjaWVudGlmaWM6ITB9LGRhOntuYW1lOiJkYSIsdmFsdWU6MWUzLHNjaWVudGlmaWM6ITF9LGg6e25hbWU6ImgiLHZhbHVlOjFlNixzY2llbnRpZmljOiExfSxrOntuYW1lOiJrIix2YWx1ZToxZTksc2NpZW50aWZpYzohMH0sTTp7bmFtZToiTSIsdmFsdWU6MWUxOCxzY2llbnRpZmljOiEwfSxHOntuYW1lOiJHIix2YWx1ZToxZTI3LHNjaWVudGlmaWM6ITB9LFQ6e25hbWU6IlQiLHZhbHVlOjFlMzYsc2NpZW50aWZpYzohMH0sUDp7bmFtZToiUCIsdmFsdWU6MWU0NSxzY2llbnRpZmljOiEwfSxFOntuYW1lOiJFIix2YWx1ZToxZTU0LHNjaWVudGlmaWM6ITB9LFo6e25hbWU6IloiLHZhbHVlOjFlNjMsc2NpZW50aWZpYzohMH0sWTp7bmFtZToiWSIsdmFsdWU6MWU3MixzY2llbnRpZmljOiEwfSxkOntuYW1lOiJkIix2YWx1ZTouMDAxLHNjaWVudGlmaWM6ITF9LGM6e25hbWU6ImMiLHZhbHVlOjFlLTYsc2NpZW50aWZpYzohMX0sbTp7bmFtZToibSIsdmFsdWU6MWUtOSxzY2llbnRpZmljOiEwfSx1OntuYW1lOiJ1Iix2YWx1ZToxZS0xOCxzY2llbnRpZmljOiEwfSxuOntuYW1lOiJuIix2YWx1ZToxZS0yNyxzY2llbnRpZmljOiEwfSxwOntuYW1lOiJwIix2YWx1ZToxZS0zNixzY2llbnRpZmljOiEwfSxmOntuYW1lOiJmIix2YWx1ZToxZS00NSxzY2llbnRpZmljOiEwfSxhOntuYW1lOiJhIix2YWx1ZToxZS01NCxzY2llbnRpZmljOiEwfSx6OntuYW1lOiJ6Iix2YWx1ZToxZS02MyxzY2llbnRpZmljOiEwfSx5OntuYW1lOiJ5Iix2YWx1ZToxZS03MixzY2llbnRpZmljOiEwfX0sQklOQVJZX1NIT1JUX1NJOnsiIjp7bmFtZToiIix2YWx1ZToxLHNjaWVudGlmaWM6ITB9LGs6e25hbWU6ImsiLHZhbHVlOjFlMyxzY2llbnRpZmljOiEwfSxNOntuYW1lOiJNIix2YWx1ZToxZTYsc2NpZW50aWZpYzohMH0sRzp7bmFtZToiRyIsdmFsdWU6MWU5LHNjaWVudGlmaWM6ITB9LFQ6e25hbWU6IlQiLHZhbHVlOjFlMTIsc2NpZW50aWZpYzohMH0sUDp7bmFtZToiUCIsdmFsdWU6MWUxNSxzY2llbnRpZmljOiEwfSxFOntuYW1lOiJFIix2YWx1ZToxZTE4LHNjaWVudGlmaWM6ITB9LFo6e25hbWU6IloiLHZhbHVlOjFlMjEsc2NpZW50aWZpYzohMH0sWTp7bmFtZToiWSIsdmFsdWU6MWUyNCxzY2llbnRpZmljOiEwfX0sQklOQVJZX1NIT1JUX0lFQzp7IiI6e25hbWU6IiIsdmFsdWU6MSxzY2llbnRpZmljOiEwfSxLaTp7bmFtZToiS2kiLHZhbHVlOjEwMjQsc2NpZW50aWZpYzohMH0sTWk6e25hbWU6Ik1pIix2YWx1ZTpNYXRoLnBvdygxMDI0LDIpLHNjaWVudGlmaWM6ITB9LEdpOntuYW1lOiJHaSIsdmFsdWU6TWF0aC5wb3coMTAyNCwzKSxzY2llbnRpZmljOiEwfSxUaTp7bmFtZToiVGkiLHZhbHVlOk1hdGgucG93KDEwMjQsNCksc2NpZW50aWZpYzohMH0sUGk6e25hbWU6IlBpIix2YWx1ZTpNYXRoLnBvdygxMDI0LDUpLHNjaWVudGlmaWM6ITB9LEVpOntuYW1lOiJFaSIsdmFsdWU6TWF0aC5wb3coMTAyNCw2KSxzY2llbnRpZmljOiEwfSxaaTp7bmFtZToiWmkiLHZhbHVlOk1hdGgucG93KDEwMjQsNyksc2NpZW50aWZpYzohMH0sWWk6e25hbWU6IllpIix2YWx1ZTpNYXRoLnBvdygxMDI0LDgpLHNjaWVudGlmaWM6ITB9fSxCSU5BUllfTE9OR19TSTp7IiI6e25hbWU6IiIsdmFsdWU6MSxzY2llbnRpZmljOiEwfSxraWxvOntuYW1lOiJraWxvIix2YWx1ZToxZTMsc2NpZW50aWZpYzohMH0sbWVnYTp7bmFtZToibWVnYSIsdmFsdWU6MWU2LHNjaWVudGlmaWM6ITB9LGdpZ2E6e25hbWU6ImdpZ2EiLHZhbHVlOjFlOSxzY2llbnRpZmljOiEwfSx0ZXJhOntuYW1lOiJ0ZXJhIix2YWx1ZToxZTEyLHNjaWVudGlmaWM6ITB9LHBldGE6e25hbWU6InBldGEiLHZhbHVlOjFlMTUsc2NpZW50aWZpYzohMH0sZXhhOntuYW1lOiJleGEiLHZhbHVlOjFlMTgsc2NpZW50aWZpYzohMH0semV0dGE6e25hbWU6InpldHRhIix2YWx1ZToxZTIxLHNjaWVudGlmaWM6ITB9LHlvdHRhOntuYW1lOiJ5b3R0YSIsdmFsdWU6MWUyNCxzY2llbnRpZmljOiEwfX0sQklOQVJZX0xPTkdfSUVDOnsiIjp7bmFtZToiIix2YWx1ZToxLHNjaWVudGlmaWM6ITB9LGtpYmk6e25hbWU6ImtpYmkiLHZhbHVlOjEwMjQsc2NpZW50aWZpYzohMH0sbWViaTp7bmFtZToibWViaSIsdmFsdWU6TWF0aC5wb3coMTAyNCwyKSxzY2llbnRpZmljOiEwfSxnaWJpOntuYW1lOiJnaWJpIix2YWx1ZTpNYXRoLnBvdygxMDI0LDMpLHNjaWVudGlmaWM6ITB9LHRlYmk6e25hbWU6InRlYmkiLHZhbHVlOk1hdGgucG93KDEwMjQsNCksc2NpZW50aWZpYzohMH0scGViaTp7bmFtZToicGViaSIsdmFsdWU6TWF0aC5wb3coMTAyNCw1KSxzY2llbnRpZmljOiEwfSxleGk6e25hbWU6ImV4aSIsdmFsdWU6TWF0aC5wb3coMTAyNCw2KSxzY2llbnRpZmljOiEwfSx6ZWJpOntuYW1lOiJ6ZWJpIix2YWx1ZTpNYXRoLnBvdygxMDI0LDcpLHNjaWVudGlmaWM6ITB9LHlvYmk6e25hbWU6InlvYmkiLHZhbHVlOk1hdGgucG93KDEwMjQsOCksc2NpZW50aWZpYzohMH19LEJUVTp7IiI6e25hbWU6IiIsdmFsdWU6MSxzY2llbnRpZmljOiEwfSxNTTp7bmFtZToiTU0iLHZhbHVlOjFlNixzY2llbnRpZmljOiEwfX19O0kuU0hPUlRMT05HPU9zKHt9LEkuU0hPUlQsSS5MT05HKSxJLkJJTkFSWV9TSE9SVD1Pcyh7fSxJLkJJTkFSWV9TSE9SVF9TSSxJLkJJTkFSWV9TSE9SVF9JRUMpLEkuQklOQVJZX0xPTkc9T3Moe30sSS5CSU5BUllfTE9OR19TSSxJLkJJTkFSWV9MT05HX0lFQyk7dmFyIHE9WyJNQVNTIiwiTEVOR1RIIiwiVElNRSIsIkNVUlJFTlQiLCJURU1QRVJBVFVSRSIsIkxVTUlOT1VTX0lOVEVOU0lUWSIsIkFNT1VOVF9PRl9TVUJTVEFOQ0UiLCJBTkdMRSIsIkJJVCJdLEI9e05PTkU6e2RpbWVuc2lvbnM6WzAsMCwwLDAsMCwwLDAsMCwwXX0sTUFTUzp7ZGltZW5zaW9uczpbMSwwLDAsMCwwLDAsMCwwLDBdfSxMRU5HVEg6e2RpbWVuc2lvbnM6WzAsMSwwLDAsMCwwLDAsMCwwXX0sVElNRTp7ZGltZW5zaW9uczpbMCwwLDEsMCwwLDAsMCwwLDBdfSxDVVJSRU5UOntkaW1lbnNpb25zOlswLDAsMCwxLDAsMCwwLDAsMF19LFRFTVBFUkFUVVJFOntkaW1lbnNpb25zOlswLDAsMCwwLDEsMCwwLDAsMF19LExVTUlOT1VTX0lOVEVOU0lUWTp7ZGltZW5zaW9uczpbMCwwLDAsMCwwLDEsMCwwLDBdfSxBTU9VTlRfT0ZfU1VCU1RBTkNFOntkaW1lbnNpb25zOlswLDAsMCwwLDAsMCwxLDAsMF19LEZPUkNFOntkaW1lbnNpb25zOlsxLDEsLTIsMCwwLDAsMCwwLDBdfSxTVVJGQUNFOntkaW1lbnNpb25zOlswLDIsMCwwLDAsMCwwLDAsMF19LFZPTFVNRTp7ZGltZW5zaW9uczpbMCwzLDAsMCwwLDAsMCwwLDBdfSxFTkVSR1k6e2RpbWVuc2lvbnM6WzEsMiwtMiwwLDAsMCwwLDAsMF19LFBPV0VSOntkaW1lbnNpb25zOlsxLDIsLTMsMCwwLDAsMCwwLDBdfSxQUkVTU1VSRTp7ZGltZW5zaW9uczpbMSwtMSwtMiwwLDAsMCwwLDAsMF19LEVMRUNUUklDX0NIQVJHRTp7ZGltZW5zaW9uczpbMCwwLDEsMSwwLDAsMCwwLDBdfSxFTEVDVFJJQ19DQVBBQ0lUQU5DRTp7ZGltZW5zaW9uczpbLTEsLTIsNCwyLDAsMCwwLDAsMF19LEVMRUNUUklDX1BPVEVOVElBTDp7ZGltZW5zaW9uczpbMSwyLC0zLC0xLDAsMCwwLDAsMF19LEVMRUNUUklDX1JFU0lTVEFOQ0U6e2RpbWVuc2lvbnM6WzEsMiwtMywtMiwwLDAsMCwwLDBdfSxFTEVDVFJJQ19JTkRVQ1RBTkNFOntkaW1lbnNpb25zOlsxLDIsLTIsLTIsMCwwLDAsMCwwXX0sRUxFQ1RSSUNfQ09ORFVDVEFOQ0U6e2RpbWVuc2lvbnM6Wy0xLC0yLDMsMiwwLDAsMCwwLDBdfSxNQUdORVRJQ19GTFVYOntkaW1lbnNpb25zOlsxLDIsLTIsLTEsMCwwLDAsMCwwXX0sTUFHTkVUSUNfRkxVWF9ERU5TSVRZOntkaW1lbnNpb25zOlsxLDAsLTIsLTEsMCwwLDAsMCwwXX0sRlJFUVVFTkNZOntkaW1lbnNpb25zOlswLDAsLTEsMCwwLDAsMCwwLDBdfSxBTkdMRTp7ZGltZW5zaW9uczpbMCwwLDAsMCwwLDAsMCwxLDBdfSxCSVQ6e2RpbWVuc2lvbnM6WzAsMCwwLDAsMCwwLDAsMCwxXX19O2Zvcih2YXIgayBpbiBCKUJba10ua2V5PWs7dmFyIHo9e25hbWU6IiIsYmFzZTp7fSx2YWx1ZToxLG9mZnNldDowLGRpbWVuc2lvbnM6cS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIDB9KX0sRD17bWV0ZXI6e25hbWU6Im1ldGVyIixiYXNlOkIuTEVOR1RILHByZWZpeGVzOkkuTE9ORyx2YWx1ZToxLG9mZnNldDowfSxpbmNoOntuYW1lOiJpbmNoIixiYXNlOkIuTEVOR1RILHByZWZpeGVzOkkuTk9ORSx2YWx1ZTouMDI1NCxvZmZzZXQ6MH0sZm9vdDp7bmFtZToiZm9vdCIsYmFzZTpCLkxFTkdUSCxwcmVmaXhlczpJLk5PTkUsdmFsdWU6LjMwNDgsb2Zmc2V0OjB9LHlhcmQ6e25hbWU6InlhcmQiLGJhc2U6Qi5MRU5HVEgscHJlZml4ZXM6SS5OT05FLHZhbHVlOi45MTQ0LG9mZnNldDowfSxtaWxlOntuYW1lOiJtaWxlIixiYXNlOkIuTEVOR1RILHByZWZpeGVzOkkuTk9ORSx2YWx1ZToxNjA5LjM0NCxvZmZzZXQ6MH0sbGluazp7bmFtZToibGluayIsYmFzZTpCLkxFTkdUSCxwcmVmaXhlczpJLk5PTkUsdmFsdWU6LjIwMTE2OCxvZmZzZXQ6MH0scm9kOntuYW1lOiJyb2QiLGJhc2U6Qi5MRU5HVEgscHJlZml4ZXM6SS5OT05FLHZhbHVlOjUuMDI5MixvZmZzZXQ6MH0sY2hhaW46e25hbWU6ImNoYWluIixiYXNlOkIuTEVOR1RILHByZWZpeGVzOkkuTk9ORSx2YWx1ZToyMC4xMTY4LG9mZnNldDowfSxhbmdzdHJvbTp7bmFtZToiYW5nc3Ryb20iLGJhc2U6Qi5MRU5HVEgscHJlZml4ZXM6SS5OT05FLHZhbHVlOjFlLTEwLG9mZnNldDowfSxtOntuYW1lOiJtIixiYXNlOkIuTEVOR1RILHByZWZpeGVzOkkuU0hPUlQsdmFsdWU6MSxvZmZzZXQ6MH0saW46e25hbWU6ImluIixiYXNlOkIuTEVOR1RILHByZWZpeGVzOkkuTk9ORSx2YWx1ZTouMDI1NCxvZmZzZXQ6MH0sZnQ6e25hbWU6ImZ0IixiYXNlOkIuTEVOR1RILHByZWZpeGVzOkkuTk9ORSx2YWx1ZTouMzA0OCxvZmZzZXQ6MH0seWQ6e25hbWU6InlkIixiYXNlOkIuTEVOR1RILHByZWZpeGVzOkkuTk9ORSx2YWx1ZTouOTE0NCxvZmZzZXQ6MH0sbWk6e25hbWU6Im1pIixiYXNlOkIuTEVOR1RILHByZWZpeGVzOkkuTk9ORSx2YWx1ZToxNjA5LjM0NCxvZmZzZXQ6MH0sbGk6e25hbWU6ImxpIixiYXNlOkIuTEVOR1RILHByZWZpeGVzOkkuTk9ORSx2YWx1ZTouMjAxMTY4LG9mZnNldDowfSxyZDp7bmFtZToicmQiLGJhc2U6Qi5MRU5HVEgscHJlZml4ZXM6SS5OT05FLHZhbHVlOjUuMDI5MjEsb2Zmc2V0OjB9LGNoOntuYW1lOiJjaCIsYmFzZTpCLkxFTkdUSCxwcmVmaXhlczpJLk5PTkUsdmFsdWU6MjAuMTE2OCxvZmZzZXQ6MH0sbWlsOntuYW1lOiJtaWwiLGJhc2U6Qi5MRU5HVEgscHJlZml4ZXM6SS5OT05FLHZhbHVlOjI1NGUtNyxvZmZzZXQ6MH0sbTI6e25hbWU6Im0yIixiYXNlOkIuU1VSRkFDRSxwcmVmaXhlczpJLlNRVUFSRUQsdmFsdWU6MSxvZmZzZXQ6MH0sc3Fpbjp7bmFtZToic3FpbiIsYmFzZTpCLlNVUkZBQ0UscHJlZml4ZXM6SS5OT05FLHZhbHVlOjY0NTE2ZS04LG9mZnNldDowfSxzcWZ0OntuYW1lOiJzcWZ0IixiYXNlOkIuU1VSRkFDRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6LjA5MjkwMzA0LG9mZnNldDowfSxzcXlkOntuYW1lOiJzcXlkIixiYXNlOkIuU1VSRkFDRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6LjgzNjEyNzM2LG9mZnNldDowfSxzcW1pOntuYW1lOiJzcW1pIixiYXNlOkIuU1VSRkFDRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6MjU4OTk4OC4xMTAzMzYsb2Zmc2V0OjB9LHNxcmQ6e25hbWU6InNxcmQiLGJhc2U6Qi5TVVJGQUNFLHByZWZpeGVzOkkuTk9ORSx2YWx1ZToyNS4yOTI5NSxvZmZzZXQ6MH0sc3FjaDp7bmFtZToic3FjaCIsYmFzZTpCLlNVUkZBQ0UscHJlZml4ZXM6SS5OT05FLHZhbHVlOjQwNC42ODczLG9mZnNldDowfSxzcW1pbDp7bmFtZToic3FtaWwiLGJhc2U6Qi5TVVJGQUNFLHByZWZpeGVzOkkuTk9ORSx2YWx1ZTo2LjQ1MTZlLTEwLG9mZnNldDowfSxhY3JlOntuYW1lOiJhY3JlIixiYXNlOkIuU1VSRkFDRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6NDA0Ni44NixvZmZzZXQ6MH0saGVjdGFyZTp7bmFtZToiaGVjdGFyZSIsYmFzZTpCLlNVUkZBQ0UscHJlZml4ZXM6SS5OT05FLHZhbHVlOjFlNCxvZmZzZXQ6MH0sbTM6e25hbWU6Im0zIixiYXNlOkIuVk9MVU1FLHByZWZpeGVzOkkuQ1VCSUMsdmFsdWU6MSxvZmZzZXQ6MH0sTDp7bmFtZToiTCIsYmFzZTpCLlZPTFVNRSxwcmVmaXhlczpJLlNIT1JULHZhbHVlOi4wMDEsb2Zmc2V0OjB9LGw6e25hbWU6ImwiLGJhc2U6Qi5WT0xVTUUscHJlZml4ZXM6SS5TSE9SVCx2YWx1ZTouMDAxLG9mZnNldDowfSxsaXRyZTp7bmFtZToibGl0cmUiLGJhc2U6Qi5WT0xVTUUscHJlZml4ZXM6SS5MT05HLHZhbHVlOi4wMDEsb2Zmc2V0OjB9LGN1aW46e25hbWU6ImN1aW4iLGJhc2U6Qi5WT0xVTUUscHJlZml4ZXM6SS5OT05FLHZhbHVlOjE2Mzg3MDY0ZS0xMixvZmZzZXQ6MH0sY3VmdDp7bmFtZToiY3VmdCIsYmFzZTpCLlZPTFVNRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6LjAyODMxNjg0NjU5MixvZmZzZXQ6MH0sY3V5ZDp7bmFtZToiY3V5ZCIsYmFzZTpCLlZPTFVNRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6Ljc2NDU1NDg1Nzk4NCxvZmZzZXQ6MH0sdGVhc3Bvb246e25hbWU6InRlYXNwb29uIixiYXNlOkIuVk9MVU1FLHByZWZpeGVzOkkuTk9ORSx2YWx1ZTo1ZS02LG9mZnNldDowfSx0YWJsZXNwb29uOntuYW1lOiJ0YWJsZXNwb29uIixiYXNlOkIuVk9MVU1FLHByZWZpeGVzOkkuTk9ORSx2YWx1ZToxNWUtNixvZmZzZXQ6MH0sZHJvcDp7bmFtZToiZHJvcCIsYmFzZTpCLlZPTFVNRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6NWUtOCxvZmZzZXQ6MH0sZ3R0OntuYW1lOiJndHQiLGJhc2U6Qi5WT0xVTUUscHJlZml4ZXM6SS5OT05FLHZhbHVlOjVlLTgsb2Zmc2V0OjB9LG1pbmltOntuYW1lOiJtaW5pbSIsYmFzZTpCLlZPTFVNRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6Ni4xNjExNTJlLTgsb2Zmc2V0OjB9LGZsdWlkZHJhbTp7bmFtZToiZmx1aWRkcmFtIixiYXNlOkIuVk9MVU1FLHByZWZpeGVzOkkuTk9ORSx2YWx1ZTozNjk2NjkxMWUtMTMsb2Zmc2V0OjB9LGZsdWlkb3VuY2U6e25hbWU6ImZsdWlkb3VuY2UiLGJhc2U6Qi5WT0xVTUUscHJlZml4ZXM6SS5OT05FLHZhbHVlOjI5NTczNTNlLTExLG9mZnNldDowfSxnaWxsOntuYW1lOiJnaWxsIixiYXNlOkIuVk9MVU1FLHByZWZpeGVzOkkuTk9ORSx2YWx1ZTouMDAwMTE4Mjk0MSxvZmZzZXQ6MH0sY2M6e25hbWU6ImNjIixiYXNlOkIuVk9MVU1FLHByZWZpeGVzOkkuTk9ORSx2YWx1ZToxZS02LG9mZnNldDowfSxjdXA6e25hbWU6ImN1cCIsYmFzZTpCLlZPTFVNRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6LjAwMDIzNjU4ODIsb2Zmc2V0OjB9LHBpbnQ6e25hbWU6InBpbnQiLGJhc2U6Qi5WT0xVTUUscHJlZml4ZXM6SS5OT05FLHZhbHVlOi4wMDA0NzMxNzY1LG9mZnNldDowfSxxdWFydDp7bmFtZToicXVhcnQiLGJhc2U6Qi5WT0xVTUUscHJlZml4ZXM6SS5OT05FLHZhbHVlOi4wMDA5NDYzNTI5LG9mZnNldDowfSxnYWxsb246e25hbWU6ImdhbGxvbiIsYmFzZTpCLlZPTFVNRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6LjAwMzc4NTQxMixvZmZzZXQ6MH0sYmVlcmJhcnJlbDp7bmFtZToiYmVlcmJhcnJlbCIsYmFzZTpCLlZPTFVNRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6LjExNzM0Nzgsb2Zmc2V0OjB9LG9pbGJhcnJlbDp7bmFtZToib2lsYmFycmVsIixiYXNlOkIuVk9MVU1FLHByZWZpeGVzOkkuTk9ORSx2YWx1ZTouMTU4OTg3MyxvZmZzZXQ6MH0saG9nc2hlYWQ6e25hbWU6ImhvZ3NoZWFkIixiYXNlOkIuVk9MVU1FLHByZWZpeGVzOkkuTk9ORSx2YWx1ZTouMjM4NDgxLG9mZnNldDowfSxmbGRyOntuYW1lOiJmbGRyIixiYXNlOkIuVk9MVU1FLHByZWZpeGVzOkkuTk9ORSx2YWx1ZTozNjk2NjkxMWUtMTMsb2Zmc2V0OjB9LGZsb3o6e25hbWU6ImZsb3oiLGJhc2U6Qi5WT0xVTUUscHJlZml4ZXM6SS5OT05FLHZhbHVlOjI5NTczNTNlLTExLG9mZnNldDowfSxnaTp7bmFtZToiZ2kiLGJhc2U6Qi5WT0xVTUUscHJlZml4ZXM6SS5OT05FLHZhbHVlOi4wMDAxMTgyOTQxLG9mZnNldDowfSxjcDp7bmFtZToiY3AiLGJhc2U6Qi5WT0xVTUUscHJlZml4ZXM6SS5OT05FLHZhbHVlOi4wMDAyMzY1ODgyLG9mZnNldDowfSxwdDp7bmFtZToicHQiLGJhc2U6Qi5WT0xVTUUscHJlZml4ZXM6SS5OT05FLHZhbHVlOi4wMDA0NzMxNzY1LG9mZnNldDowfSxxdDp7bmFtZToicXQiLGJhc2U6Qi5WT0xVTUUscHJlZml4ZXM6SS5OT05FLHZhbHVlOi4wMDA5NDYzNTI5LG9mZnNldDowfSxnYWw6e25hbWU6ImdhbCIsYmFzZTpCLlZPTFVNRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6LjAwMzc4NTQxMixvZmZzZXQ6MH0sYmJsOntuYW1lOiJiYmwiLGJhc2U6Qi5WT0xVTUUscHJlZml4ZXM6SS5OT05FLHZhbHVlOi4xMTczNDc4LG9mZnNldDowfSxvYmw6e25hbWU6Im9ibCIsYmFzZTpCLlZPTFVNRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6LjE1ODk4NzMsb2Zmc2V0OjB9LGc6e25hbWU6ImciLGJhc2U6Qi5NQVNTLHByZWZpeGVzOkkuU0hPUlQsdmFsdWU6LjAwMSxvZmZzZXQ6MH0sZ3JhbTp7bmFtZToiZ3JhbSIsYmFzZTpCLk1BU1MscHJlZml4ZXM6SS5MT05HLHZhbHVlOi4wMDEsb2Zmc2V0OjB9LHRvbjp7bmFtZToidG9uIixiYXNlOkIuTUFTUyxwcmVmaXhlczpJLlNIT1JULHZhbHVlOjkwNy4xODQ3NCxvZmZzZXQ6MH0sdDp7bmFtZToidCIsYmFzZTpCLk1BU1MscHJlZml4ZXM6SS5TSE9SVCx2YWx1ZToxZTMsb2Zmc2V0OjB9LHRvbm5lOntuYW1lOiJ0b25uZSIsYmFzZTpCLk1BU1MscHJlZml4ZXM6SS5MT05HLHZhbHVlOjFlMyxvZmZzZXQ6MH0sZ3JhaW46e25hbWU6ImdyYWluIixiYXNlOkIuTUFTUyxwcmVmaXhlczpJLk5PTkUsdmFsdWU6NjQ3OTg5MWUtMTEsb2Zmc2V0OjB9LGRyYW06e25hbWU6ImRyYW0iLGJhc2U6Qi5NQVNTLHByZWZpeGVzOkkuTk9ORSx2YWx1ZTouMDAxNzcxODQ1MTk1MzEyNSxvZmZzZXQ6MH0sb3VuY2U6e25hbWU6Im91bmNlIixiYXNlOkIuTUFTUyxwcmVmaXhlczpJLk5PTkUsdmFsdWU6LjAyODM0OTUyMzEyNSxvZmZzZXQ6MH0scG91bmRtYXNzOntuYW1lOiJwb3VuZG1hc3MiLGJhc2U6Qi5NQVNTLHByZWZpeGVzOkkuTk9ORSx2YWx1ZTouNDUzNTkyMzcsb2Zmc2V0OjB9LGh1bmRyZWR3ZWlnaHQ6e25hbWU6Imh1bmRyZWR3ZWlnaHQiLGJhc2U6Qi5NQVNTLHByZWZpeGVzOkkuTk9ORSx2YWx1ZTo0NS4zNTkyMzcsb2Zmc2V0OjB9LHN0aWNrOntuYW1lOiJzdGljayIsYmFzZTpCLk1BU1MscHJlZml4ZXM6SS5OT05FLHZhbHVlOi4xMTUsb2Zmc2V0OjB9LHN0b25lOntuYW1lOiJzdG9uZSIsYmFzZTpCLk1BU1MscHJlZml4ZXM6SS5OT05FLHZhbHVlOjYuMzUwMjkzMTgsb2Zmc2V0OjB9LGdyOntuYW1lOiJnciIsYmFzZTpCLk1BU1MscHJlZml4ZXM6SS5OT05FLHZhbHVlOjY0Nzk4OTFlLTExLG9mZnNldDowfSxkcjp7bmFtZToiZHIiLGJhc2U6Qi5NQVNTLHByZWZpeGVzOkkuTk9ORSx2YWx1ZTouMDAxNzcxODQ1MTk1MzEyNSxvZmZzZXQ6MH0sb3o6e25hbWU6Im96IixiYXNlOkIuTUFTUyxwcmVmaXhlczpJLk5PTkUsdmFsdWU6LjAyODM0OTUyMzEyNSxvZmZzZXQ6MH0sbGJtOntuYW1lOiJsYm0iLGJhc2U6Qi5NQVNTLHByZWZpeGVzOkkuTk9ORSx2YWx1ZTouNDUzNTkyMzcsb2Zmc2V0OjB9LGN3dDp7bmFtZToiY3d0IixiYXNlOkIuTUFTUyxwcmVmaXhlczpJLk5PTkUsdmFsdWU6NDUuMzU5MjM3LG9mZnNldDowfSxzOntuYW1lOiJzIixiYXNlOkIuVElNRSxwcmVmaXhlczpJLlNIT1JULHZhbHVlOjEsb2Zmc2V0OjB9LG1pbjp7bmFtZToibWluIixiYXNlOkIuVElNRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6NjAsb2Zmc2V0OjB9LGg6e25hbWU6ImgiLGJhc2U6Qi5USU1FLHByZWZpeGVzOkkuTk9ORSx2YWx1ZTozNjAwLG9mZnNldDowfSxzZWNvbmQ6e25hbWU6InNlY29uZCIsYmFzZTpCLlRJTUUscHJlZml4ZXM6SS5MT05HLHZhbHVlOjEsb2Zmc2V0OjB9LHNlYzp7bmFtZToic2VjIixiYXNlOkIuVElNRSxwcmVmaXhlczpJLkxPTkcsdmFsdWU6MSxvZmZzZXQ6MH0sbWludXRlOntuYW1lOiJtaW51dGUiLGJhc2U6Qi5USU1FLHByZWZpeGVzOkkuTk9ORSx2YWx1ZTo2MCxvZmZzZXQ6MH0saG91cjp7bmFtZToiaG91ciIsYmFzZTpCLlRJTUUscHJlZml4ZXM6SS5OT05FLHZhbHVlOjM2MDAsb2Zmc2V0OjB9LGRheTp7bmFtZToiZGF5IixiYXNlOkIuVElNRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6ODY0MDAsb2Zmc2V0OjB9LHdlZWs6e25hbWU6IndlZWsiLGJhc2U6Qi5USU1FLHByZWZpeGVzOkkuTk9ORSx2YWx1ZTo2MDQ4MDAsb2Zmc2V0OjB9LG1vbnRoOntuYW1lOiJtb250aCIsYmFzZTpCLlRJTUUscHJlZml4ZXM6SS5OT05FLHZhbHVlOjI2Mjk4MDAsb2Zmc2V0OjB9LHllYXI6e25hbWU6InllYXIiLGJhc2U6Qi5USU1FLHByZWZpeGVzOkkuTk9ORSx2YWx1ZTozMTU1NzYwMCxvZmZzZXQ6MH0sZGVjYWRlOntuYW1lOiJkZWNhZGUiLGJhc2U6Qi5USU1FLHByZWZpeGVzOkkuTk9ORSx2YWx1ZTozMTU1NzZlMyxvZmZzZXQ6MH0sY2VudHVyeTp7bmFtZToiY2VudHVyeSIsYmFzZTpCLlRJTUUscHJlZml4ZXM6SS5OT05FLHZhbHVlOjMxNTU3NmU0LG9mZnNldDowfSxtaWxsZW5uaXVtOntuYW1lOiJtaWxsZW5uaXVtIixiYXNlOkIuVElNRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6MzE1NTc2ZTUsb2Zmc2V0OjB9LGhlcnR6OntuYW1lOiJIZXJ0eiIsYmFzZTpCLkZSRVFVRU5DWSxwcmVmaXhlczpJLkxPTkcsdmFsdWU6MSxvZmZzZXQ6MCxyZWNpcHJvY2FsOiEwfSxIejp7bmFtZToiSHoiLGJhc2U6Qi5GUkVRVUVOQ1kscHJlZml4ZXM6SS5TSE9SVCx2YWx1ZToxLG9mZnNldDowLHJlY2lwcm9jYWw6ITB9LHJhZDp7bmFtZToicmFkIixiYXNlOkIuQU5HTEUscHJlZml4ZXM6SS5TSE9SVCx2YWx1ZToxLG9mZnNldDowfSxyYWRpYW46e25hbWU6InJhZGlhbiIsYmFzZTpCLkFOR0xFLHByZWZpeGVzOkkuTE9ORyx2YWx1ZToxLG9mZnNldDowfSxkZWc6e25hbWU6ImRlZyIsYmFzZTpCLkFOR0xFLHByZWZpeGVzOkkuU0hPUlQsdmFsdWU6bnVsbCxvZmZzZXQ6MH0sZGVncmVlOntuYW1lOiJkZWdyZWUiLGJhc2U6Qi5BTkdMRSxwcmVmaXhlczpJLkxPTkcsdmFsdWU6bnVsbCxvZmZzZXQ6MH0sZ3JhZDp7bmFtZToiZ3JhZCIsYmFzZTpCLkFOR0xFLHByZWZpeGVzOkkuU0hPUlQsdmFsdWU6bnVsbCxvZmZzZXQ6MH0sZ3JhZGlhbjp7bmFtZToiZ3JhZGlhbiIsYmFzZTpCLkFOR0xFLHByZWZpeGVzOkkuTE9ORyx2YWx1ZTpudWxsLG9mZnNldDowfSxjeWNsZTp7bmFtZToiY3ljbGUiLGJhc2U6Qi5BTkdMRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6bnVsbCxvZmZzZXQ6MH0sYXJjc2VjOntuYW1lOiJhcmNzZWMiLGJhc2U6Qi5BTkdMRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6bnVsbCxvZmZzZXQ6MH0sYXJjbWluOntuYW1lOiJhcmNtaW4iLGJhc2U6Qi5BTkdMRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6bnVsbCxvZmZzZXQ6MH0sQTp7bmFtZToiQSIsYmFzZTpCLkNVUlJFTlQscHJlZml4ZXM6SS5TSE9SVCx2YWx1ZToxLG9mZnNldDowfSxhbXBlcmU6e25hbWU6ImFtcGVyZSIsYmFzZTpCLkNVUlJFTlQscHJlZml4ZXM6SS5MT05HLHZhbHVlOjEsb2Zmc2V0OjB9LEs6e25hbWU6IksiLGJhc2U6Qi5URU1QRVJBVFVSRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6MSxvZmZzZXQ6MH0sZGVnQzp7bmFtZToiZGVnQyIsYmFzZTpCLlRFTVBFUkFUVVJFLHByZWZpeGVzOkkuTk9ORSx2YWx1ZToxLG9mZnNldDoyNzMuMTV9LGRlZ0Y6e25hbWU6ImRlZ0YiLGJhc2U6Qi5URU1QRVJBVFVSRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6MS8xLjgsb2Zmc2V0OjQ1OS42N30sZGVnUjp7bmFtZToiZGVnUiIsYmFzZTpCLlRFTVBFUkFUVVJFLHByZWZpeGVzOkkuTk9ORSx2YWx1ZToxLzEuOCxvZmZzZXQ6MH0sa2VsdmluOntuYW1lOiJrZWx2aW4iLGJhc2U6Qi5URU1QRVJBVFVSRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6MSxvZmZzZXQ6MH0sY2Vsc2l1czp7bmFtZToiY2Vsc2l1cyIsYmFzZTpCLlRFTVBFUkFUVVJFLHByZWZpeGVzOkkuTk9ORSx2YWx1ZToxLG9mZnNldDoyNzMuMTV9LGZhaHJlbmhlaXQ6e25hbWU6ImZhaHJlbmhlaXQiLGJhc2U6Qi5URU1QRVJBVFVSRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6MS8xLjgsb2Zmc2V0OjQ1OS42N30scmFua2luZTp7bmFtZToicmFua2luZSIsYmFzZTpCLlRFTVBFUkFUVVJFLHByZWZpeGVzOkkuTk9ORSx2YWx1ZToxLzEuOCxvZmZzZXQ6MH0sbW9sOntuYW1lOiJtb2wiLGJhc2U6Qi5BTU9VTlRfT0ZfU1VCU1RBTkNFLHByZWZpeGVzOkkuU0hPUlQsdmFsdWU6MSxvZmZzZXQ6MH0sbW9sZTp7bmFtZToibW9sZSIsYmFzZTpCLkFNT1VOVF9PRl9TVUJTVEFOQ0UscHJlZml4ZXM6SS5MT05HLHZhbHVlOjEsb2Zmc2V0OjB9LGNkOntuYW1lOiJjZCIsYmFzZTpCLkxVTUlOT1VTX0lOVEVOU0lUWSxwcmVmaXhlczpJLlNIT1JULHZhbHVlOjEsb2Zmc2V0OjB9LGNhbmRlbGE6e25hbWU6ImNhbmRlbGEiLGJhc2U6Qi5MVU1JTk9VU19JTlRFTlNJVFkscHJlZml4ZXM6SS5MT05HLHZhbHVlOjEsb2Zmc2V0OjB9LE46e25hbWU6Ik4iLGJhc2U6Qi5GT1JDRSxwcmVmaXhlczpJLlNIT1JULHZhbHVlOjEsb2Zmc2V0OjB9LG5ld3Rvbjp7bmFtZToibmV3dG9uIixiYXNlOkIuRk9SQ0UscHJlZml4ZXM6SS5MT05HLHZhbHVlOjEsb2Zmc2V0OjB9LGR5bjp7bmFtZToiZHluIixiYXNlOkIuRk9SQ0UscHJlZml4ZXM6SS5TSE9SVCx2YWx1ZToxZS01LG9mZnNldDowfSxkeW5lOntuYW1lOiJkeW5lIixiYXNlOkIuRk9SQ0UscHJlZml4ZXM6SS5MT05HLHZhbHVlOjFlLTUsb2Zmc2V0OjB9LGxiZjp7bmFtZToibGJmIixiYXNlOkIuRk9SQ0UscHJlZml4ZXM6SS5OT05FLHZhbHVlOjQuNDQ4MjIxNjE1MjYwNSxvZmZzZXQ6MH0scG91bmRmb3JjZTp7bmFtZToicG91bmRmb3JjZSIsYmFzZTpCLkZPUkNFLHByZWZpeGVzOkkuTk9ORSx2YWx1ZTo0LjQ0ODIyMTYxNTI2MDUsb2Zmc2V0OjB9LGtpcDp7bmFtZToia2lwIixiYXNlOkIuRk9SQ0UscHJlZml4ZXM6SS5MT05HLHZhbHVlOjQ0NDguMjIxNixvZmZzZXQ6MH0sSjp7bmFtZToiSiIsYmFzZTpCLkVORVJHWSxwcmVmaXhlczpJLlNIT1JULHZhbHVlOjEsb2Zmc2V0OjB9LGpvdWxlOntuYW1lOiJqb3VsZSIsYmFzZTpCLkVORVJHWSxwcmVmaXhlczpJLlNIT1JULHZhbHVlOjEsb2Zmc2V0OjB9LGVyZzp7bmFtZToiZXJnIixiYXNlOkIuRU5FUkdZLHByZWZpeGVzOkkuTk9ORSx2YWx1ZToxZS03LG9mZnNldDowfSxXaDp7bmFtZToiV2giLGJhc2U6Qi5FTkVSR1kscHJlZml4ZXM6SS5TSE9SVCx2YWx1ZTozNjAwLG9mZnNldDowfSxCVFU6e25hbWU6IkJUVSIsYmFzZTpCLkVORVJHWSxwcmVmaXhlczpJLkJUVSx2YWx1ZToxMDU1LjA1NTg1MjYyLG9mZnNldDowfSxlVjp7bmFtZToiZVYiLGJhc2U6Qi5FTkVSR1kscHJlZml4ZXM6SS5TSE9SVCx2YWx1ZToxNjAyMTc2NTY1ZS0yOCxvZmZzZXQ6MH0sZWxlY3Ryb252b2x0OntuYW1lOiJlbGVjdHJvbnZvbHQiLGJhc2U6Qi5FTkVSR1kscHJlZml4ZXM6SS5MT05HLHZhbHVlOjE2MDIxNzY1NjVlLTI4LG9mZnNldDowfSxXOntuYW1lOiJXIixiYXNlOkIuUE9XRVIscHJlZml4ZXM6SS5TSE9SVCx2YWx1ZToxLG9mZnNldDowfSx3YXR0OntuYW1lOiJ3YXR0IixiYXNlOkIuUE9XRVIscHJlZml4ZXM6SS5MT05HLHZhbHVlOjEsb2Zmc2V0OjB9LGhwOntuYW1lOiJocCIsYmFzZTpCLlBPV0VSLHByZWZpeGVzOkkuTk9ORSx2YWx1ZTo3NDUuNjk5ODcxNTM4NixvZmZzZXQ6MH0sVkFSOntuYW1lOiJWQVIiLGJhc2U6Qi5QT1dFUixwcmVmaXhlczpJLlNIT1JULHZhbHVlOm4uSSxvZmZzZXQ6MH0sVkE6e25hbWU6IlZBIixiYXNlOkIuUE9XRVIscHJlZml4ZXM6SS5TSE9SVCx2YWx1ZToxLG9mZnNldDowfSxQYTp7bmFtZToiUGEiLGJhc2U6Qi5QUkVTU1VSRSxwcmVmaXhlczpJLlNIT1JULHZhbHVlOjEsb2Zmc2V0OjB9LHBzaTp7bmFtZToicHNpIixiYXNlOkIuUFJFU1NVUkUscHJlZml4ZXM6SS5OT05FLHZhbHVlOjY4OTQuNzU3MjkyNzY0NTksb2Zmc2V0OjB9LGF0bTp7bmFtZToiYXRtIixiYXNlOkIuUFJFU1NVUkUscHJlZml4ZXM6SS5OT05FLHZhbHVlOjEwMTMyNSxvZmZzZXQ6MH0sYmFyOntuYW1lOiJiYXIiLGJhc2U6Qi5QUkVTU1VSRSxwcmVmaXhlczpJLlNIT1JUTE9ORyx2YWx1ZToxZTUsb2Zmc2V0OjB9LHRvcnI6e25hbWU6InRvcnIiLGJhc2U6Qi5QUkVTU1VSRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6MTMzLjMyMixvZmZzZXQ6MH0sbW1IZzp7bmFtZToibW1IZyIsYmFzZTpCLlBSRVNTVVJFLHByZWZpeGVzOkkuTk9ORSx2YWx1ZToxMzMuMzIyLG9mZnNldDowfSxtbUgyTzp7bmFtZToibW1IMk8iLGJhc2U6Qi5QUkVTU1VSRSxwcmVmaXhlczpJLk5PTkUsdmFsdWU6OS44MDY2NSxvZmZzZXQ6MH0sY21IMk86e25hbWU6ImNtSDJPIixiYXNlOkIuUFJFU1NVUkUscHJlZml4ZXM6SS5OT05FLHZhbHVlOjk4LjA2NjUsb2Zmc2V0OjB9LGNvdWxvbWI6e25hbWU6ImNvdWxvbWIiLGJhc2U6Qi5FTEVDVFJJQ19DSEFSR0UscHJlZml4ZXM6SS5MT05HLHZhbHVlOjEsb2Zmc2V0OjB9LEM6e25hbWU6IkMiLGJhc2U6Qi5FTEVDVFJJQ19DSEFSR0UscHJlZml4ZXM6SS5TSE9SVCx2YWx1ZToxLG9mZnNldDowfSxmYXJhZDp7bmFtZToiZmFyYWQiLGJhc2U6Qi5FTEVDVFJJQ19DQVBBQ0lUQU5DRSxwcmVmaXhlczpJLkxPTkcsdmFsdWU6MSxvZmZzZXQ6MH0sRjp7bmFtZToiRiIsYmFzZTpCLkVMRUNUUklDX0NBUEFDSVRBTkNFLHByZWZpeGVzOkkuU0hPUlQsdmFsdWU6MSxvZmZzZXQ6MH0sdm9sdDp7bmFtZToidm9sdCIsYmFzZTpCLkVMRUNUUklDX1BPVEVOVElBTCxwcmVmaXhlczpJLkxPTkcsdmFsdWU6MSxvZmZzZXQ6MH0sVjp7bmFtZToiViIsYmFzZTpCLkVMRUNUUklDX1BPVEVOVElBTCxwcmVmaXhlczpJLlNIT1JULHZhbHVlOjEsb2Zmc2V0OjB9LG9obTp7bmFtZToib2htIixiYXNlOkIuRUxFQ1RSSUNfUkVTSVNUQU5DRSxwcmVmaXhlczpJLlNIT1JUTE9ORyx2YWx1ZToxLG9mZnNldDowfSxoZW5yeTp7bmFtZToiaGVucnkiLGJhc2U6Qi5FTEVDVFJJQ19JTkRVQ1RBTkNFLHByZWZpeGVzOkkuTE9ORyx2YWx1ZToxLG9mZnNldDowfSxIOntuYW1lOiJIIixiYXNlOkIuRUxFQ1RSSUNfSU5EVUNUQU5DRSxwcmVmaXhlczpJLlNIT1JULHZhbHVlOjEsb2Zmc2V0OjB9LHNpZW1lbnM6e25hbWU6InNpZW1lbnMiLGJhc2U6Qi5FTEVDVFJJQ19DT05EVUNUQU5DRSxwcmVmaXhlczpJLkxPTkcsdmFsdWU6MSxvZmZzZXQ6MH0sUzp7bmFtZToiUyIsYmFzZTpCLkVMRUNUUklDX0NPTkRVQ1RBTkNFLHByZWZpeGVzOkkuU0hPUlQsdmFsdWU6MSxvZmZzZXQ6MH0sd2ViZXI6e25hbWU6IndlYmVyIixiYXNlOkIuTUFHTkVUSUNfRkxVWCxwcmVmaXhlczpJLkxPTkcsdmFsdWU6MSxvZmZzZXQ6MH0sV2I6e25hbWU6IldiIixiYXNlOkIuTUFHTkVUSUNfRkxVWCxwcmVmaXhlczpJLlNIT1JULHZhbHVlOjEsb2Zmc2V0OjB9LHRlc2xhOntuYW1lOiJ0ZXNsYSIsYmFzZTpCLk1BR05FVElDX0ZMVVhfREVOU0lUWSxwcmVmaXhlczpJLkxPTkcsdmFsdWU6MSxvZmZzZXQ6MH0sVDp7bmFtZToiVCIsYmFzZTpCLk1BR05FVElDX0ZMVVhfREVOU0lUWSxwcmVmaXhlczpJLlNIT1JULHZhbHVlOjEsb2Zmc2V0OjB9LGI6e25hbWU6ImIiLGJhc2U6Qi5CSVQscHJlZml4ZXM6SS5CSU5BUllfU0hPUlQsdmFsdWU6MSxvZmZzZXQ6MH0sYml0czp7bmFtZToiYml0cyIsYmFzZTpCLkJJVCxwcmVmaXhlczpJLkJJTkFSWV9MT05HLHZhbHVlOjEsb2Zmc2V0OjB9LEI6e25hbWU6IkIiLGJhc2U6Qi5CSVQscHJlZml4ZXM6SS5CSU5BUllfU0hPUlQsdmFsdWU6OCxvZmZzZXQ6MH0sYnl0ZXM6e25hbWU6ImJ5dGVzIixiYXNlOkIuQklULHByZWZpeGVzOkkuQklOQVJZX0xPTkcsdmFsdWU6OCxvZmZzZXQ6MH19LFI9e21ldGVyczoibWV0ZXIiLGluY2hlczoiaW5jaCIsZmVldDoiZm9vdCIseWFyZHM6InlhcmQiLG1pbGVzOiJtaWxlIixsaW5rczoibGluayIscm9kczoicm9kIixjaGFpbnM6ImNoYWluIixhbmdzdHJvbXM6ImFuZ3N0cm9tIixsdDoibCIsbGl0cmVzOiJsaXRyZSIsbGl0ZXI6ImxpdHJlIixsaXRlcnM6ImxpdHJlIix0ZWFzcG9vbnM6InRlYXNwb29uIix0YWJsZXNwb29uczoidGFibGVzcG9vbiIsbWluaW1zOiJtaW5pbSIsZmx1aWRkcmFtczoiZmx1aWRkcmFtIixmbHVpZG91bmNlczoiZmx1aWRvdW5jZSIsZ2lsbHM6ImdpbGwiLGN1cHM6ImN1cCIscGludHM6InBpbnQiLHF1YXJ0czoicXVhcnQiLGdhbGxvbnM6ImdhbGxvbiIsYmVlcmJhcnJlbHM6ImJlZXJiYXJyZWwiLG9pbGJhcnJlbHM6Im9pbGJhcnJlbCIsaG9nc2hlYWRzOiJob2dzaGVhZCIsZ3R0czoiZ3R0IixncmFtczoiZ3JhbSIsdG9uczoidG9uIix0b25uZXM6InRvbm5lIixncmFpbnM6ImdyYWluIixkcmFtczoiZHJhbSIsb3VuY2VzOiJvdW5jZSIscG91bmRtYXNzZXM6InBvdW5kbWFzcyIsaHVuZHJlZHdlaWdodHM6Imh1bmRyZWR3ZWlnaHQiLHN0aWNrczoic3RpY2siLGxiOiJsYm0iLGxiczoibGJtIixraXBzOiJraXAiLGFjcmVzOiJhY3JlIixoZWN0YXJlczoiaGVjdGFyZSIsc3FmZWV0OiJzcWZ0IixzcXlhcmQ6InNxeWQiLHNxbWlsZToic3FtaSIsc3FtaWxlczoic3FtaSIsbW1oZzoibW1IZyIsbW1oMm86Im1tSDJPIixjbWgybzoiY21IMk8iLHNlY29uZHM6InNlY29uZCIsc2Vjczoic2Vjb25kIixtaW51dGVzOiJtaW51dGUiLG1pbnM6Im1pbnV0ZSIsaG91cnM6ImhvdXIiLGhyOiJob3VyIixocnM6ImhvdXIiLGRheXM6ImRheSIsd2Vla3M6IndlZWsiLG1vbnRoczoibW9udGgiLHllYXJzOiJ5ZWFyIixkZWNhZGVzOiJkZWNhZGUiLGNlbnR1cmllczoiY2VudHVyeSIsbWlsbGVubmlhOiJtaWxsZW5uaXVtIixoZXJ0ejoiaGVydHoiLHJhZGlhbnM6InJhZGlhbiIsZGVncmVlczoiZGVncmVlIixncmFkaWFuczoiZ3JhZGlhbiIsY3ljbGVzOiJjeWNsZSIsYXJjc2Vjb25kOiJhcmNzZWMiLGFyY3NlY29uZHM6ImFyY3NlYyIsYXJjbWludXRlOiJhcmNtaW4iLGFyY21pbnV0ZXM6ImFyY21pbiIsQlRVczoiQlRVIix3YXR0czoid2F0dCIsam91bGVzOiJqb3VsZSIsYW1wZXJlczoiYW1wZXJlIixjb3Vsb21iczoiY291bG9tYiIsdm9sdHM6InZvbHQiLG9obXM6Im9obSIsZmFyYWRzOiJmYXJhZCIsd2ViZXJzOiJ3ZWJlciIsdGVzbGFzOiJ0ZXNsYSIsZWxlY3Ryb252b2x0czoiZWxlY3Ryb252b2x0Iixtb2xlczoibW9sZSIsYml0OiJiaXRzIixieXRlOiJieXRlcyJ9O2Z1bmN0aW9uIFAoZSl7aWYoIkJpZ051bWJlciI9PT1lLm51bWJlcil7dmFyIHQ9YnMoTik7RC5yYWQudmFsdWU9bmV3IE4oMSksRC5kZWcudmFsdWU9dC5kaXYoMTgwKSxELmdyYWQudmFsdWU9dC5kaXYoMjAwKSxELmN5Y2xlLnZhbHVlPXQudGltZXMoMiksRC5hcmNzZWMudmFsdWU9dC5kaXYoNjQ4ZTMpLEQuYXJjbWluLnZhbHVlPXQuZGl2KDEwODAwKX1lbHNlIEQucmFkLnZhbHVlPTEsRC5kZWcudmFsdWU9TWF0aC5QSS8xODAsRC5ncmFkLnZhbHVlPU1hdGguUEkvMjAwLEQuY3ljbGUudmFsdWU9MipNYXRoLlBJLEQuYXJjc2VjLnZhbHVlPU1hdGguUEkvNjQ4ZTMsRC5hcmNtaW4udmFsdWU9TWF0aC5QSS8xMDgwMDtELnJhZGlhbi52YWx1ZT1ELnJhZC52YWx1ZSxELmRlZ3JlZS52YWx1ZT1ELmRlZy52YWx1ZSxELmdyYWRpYW4udmFsdWU9RC5ncmFkLnZhbHVlfVAoYiksdCYmdCgiY29uZmlnIixmdW5jdGlvbihlLHQpe2UubnVtYmVyIT09dC5udW1iZXImJlAoZSl9KTt2YXIgRj17c2k6e05PTkU6e3VuaXQ6eixwcmVmaXg6SS5OT05FWyIiXX0sTEVOR1RIOnt1bml0OkQubSxwcmVmaXg6SS5TSE9SVFsiIl19LE1BU1M6e3VuaXQ6RC5nLHByZWZpeDpJLlNIT1JULmt9LFRJTUU6e3VuaXQ6RC5zLHByZWZpeDpJLlNIT1JUWyIiXX0sQ1VSUkVOVDp7dW5pdDpELkEscHJlZml4OkkuU0hPUlRbIiJdfSxURU1QRVJBVFVSRTp7dW5pdDpELksscHJlZml4OkkuU0hPUlRbIiJdfSxMVU1JTk9VU19JTlRFTlNJVFk6e3VuaXQ6RC5jZCxwcmVmaXg6SS5TSE9SVFsiIl19LEFNT1VOVF9PRl9TVUJTVEFOQ0U6e3VuaXQ6RC5tb2wscHJlZml4OkkuU0hPUlRbIiJdfSxBTkdMRTp7dW5pdDpELnJhZCxwcmVmaXg6SS5TSE9SVFsiIl19LEJJVDp7dW5pdDpELmJpdHMscHJlZml4OkkuU0hPUlRbIiJdfSxGT1JDRTp7dW5pdDpELk4scHJlZml4OkkuU0hPUlRbIiJdfSxFTkVSR1k6e3VuaXQ6RC5KLHByZWZpeDpJLlNIT1JUWyIiXX0sUE9XRVI6e3VuaXQ6RC5XLHByZWZpeDpJLlNIT1JUWyIiXX0sUFJFU1NVUkU6e3VuaXQ6RC5QYSxwcmVmaXg6SS5TSE9SVFsiIl19LEVMRUNUUklDX0NIQVJHRTp7dW5pdDpELkMscHJlZml4OkkuU0hPUlRbIiJdfSxFTEVDVFJJQ19DQVBBQ0lUQU5DRTp7dW5pdDpELkYscHJlZml4OkkuU0hPUlRbIiJdfSxFTEVDVFJJQ19QT1RFTlRJQUw6e3VuaXQ6RC5WLHByZWZpeDpJLlNIT1JUWyIiXX0sRUxFQ1RSSUNfUkVTSVNUQU5DRTp7dW5pdDpELm9obSxwcmVmaXg6SS5TSE9SVFsiIl19LEVMRUNUUklDX0lORFVDVEFOQ0U6e3VuaXQ6RC5ILHByZWZpeDpJLlNIT1JUWyIiXX0sRUxFQ1RSSUNfQ09ORFVDVEFOQ0U6e3VuaXQ6RC5TLHByZWZpeDpJLlNIT1JUWyIiXX0sTUFHTkVUSUNfRkxVWDp7dW5pdDpELldiLHByZWZpeDpJLlNIT1JUWyIiXX0sTUFHTkVUSUNfRkxVWF9ERU5TSVRZOnt1bml0OkQuVCxwcmVmaXg6SS5TSE9SVFsiIl19LEZSRVFVRU5DWTp7dW5pdDpELkh6LHByZWZpeDpJLlNIT1JUWyIiXX19fTtGLmNncz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KEYuc2kpKSxGLmNncy5MRU5HVEg9e3VuaXQ6RC5tLHByZWZpeDpJLlNIT1JULmN9LEYuY2dzLk1BU1M9e3VuaXQ6RC5nLHByZWZpeDpJLlNIT1JUWyIiXX0sRi5jZ3MuRk9SQ0U9e3VuaXQ6RC5keW4scHJlZml4OkkuU0hPUlRbIiJdfSxGLmNncy5FTkVSR1k9e3VuaXQ6RC5lcmcscHJlZml4OkkuTk9ORVsiIl19LEYudXM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShGLnNpKSksRi51cy5MRU5HVEg9e3VuaXQ6RC5mdCxwcmVmaXg6SS5OT05FWyIiXX0sRi51cy5NQVNTPXt1bml0OkQubGJtLHByZWZpeDpJLk5PTkVbIiJdfSxGLnVzLlRFTVBFUkFUVVJFPXt1bml0OkQuZGVnRixwcmVmaXg6SS5OT05FWyIiXX0sRi51cy5GT1JDRT17dW5pdDpELmxiZixwcmVmaXg6SS5OT05FWyIiXX0sRi51cy5FTkVSR1k9e3VuaXQ6RC5CVFUscHJlZml4OkkuQlRVWyIiXX0sRi51cy5QT1dFUj17dW5pdDpELmhwLHByZWZpeDpJLk5PTkVbIiJdfSxGLnVzLlBSRVNTVVJFPXt1bml0OkQucHNpLHByZWZpeDpJLk5PTkVbIiJdfSxGLmF1dG89SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShGLnNpKSk7dmFyIFU9Ri5hdXRvO2Zvcih2YXIgTCBpbiBNLnNldFVuaXRTeXN0ZW09ZnVuY3Rpb24oZSl7aWYoIU9iamVjdChhZS5mKShGLGUpKXRocm93IG5ldyBFcnJvcigiVW5pdCBzeXN0ZW0gIitlKyIgZG9lcyBub3QgZXhpc3QuIENob2ljZXMgYXJlOiAiK09iamVjdC5rZXlzKEYpLmpvaW4oIiwgIikpO1U9RltlXX0sTS5nZXRVbml0U3lzdGVtPWZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIEYpaWYoRltlXT09PVUpcmV0dXJuIGV9LE0udHlwZUNvbnZlcnRlcnM9e0JpZ051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE4oZSsiIil9LEZyYWN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTyhlKX0sQ29tcGxleDpmdW5jdGlvbihlKXtyZXR1cm4gZX0sbnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlfX0sTS5fZ2V0TnVtYmVyQ29udmVydGVyPWZ1bmN0aW9uKGUpe2lmKCFNLnR5cGVDb252ZXJ0ZXJzW2VdKXRocm93IG5ldyBUeXBlRXJyb3IoJ1Vuc3VwcG9ydGVkIHR5cGUgIicrZSsnIicpO3JldHVybiBNLnR5cGVDb252ZXJ0ZXJzW2VdfSxEKXt2YXIgSD1EW0xdO0guZGltZW5zaW9ucz1ILmJhc2UuZGltZW5zaW9uc31mb3IodmFyICQgaW4gUilpZihPYmplY3QoYWUuZikoUiwkKSl7dmFyIEc9RFtSWyRdXSxaPXt9O2Zvcih2YXIgViBpbiBHKU9iamVjdChhZS5mKShHLFYpJiYoWltWXT1HW1ZdKTtaLm5hbWU9JCxEWyRdPVp9cmV0dXJuIE0uY3JlYXRlVW5pdD1mdW5jdGlvbihlLHQpe2lmKCJvYmplY3QiIT09TnMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiY3JlYXRlVW5pdCBleHBlY3RzIGZpcnN0IHBhcmFtZXRlciB0byBiZSBvZiB0eXBlICdPYmplY3QnIik7aWYodCYmdC5vdmVycmlkZSlmb3IodmFyIHIgaW4gZSlpZihPYmplY3QoYWUuZikoZSxyKSYmTS5kZWxldGVVbml0KHIpLGVbcl0uYWxpYXNlcylmb3IodmFyIG49MDtuPGVbcl0uYWxpYXNlcy5sZW5ndGg7bisrKU0uZGVsZXRlVW5pdChlW3JdLmFsaWFzZXNbbl0pO3ZhciBpO2Zvcih2YXIgYSBpbiBlKU9iamVjdChhZS5mKShlLGEpJiYoaT1NLmNyZWF0ZVVuaXRTaW5nbGUoYSxlW2FdKSk7cmV0dXJuIGl9LE0uY3JlYXRlVW5pdFNpbmdsZT1mdW5jdGlvbih0LGUscil7aWYobnVsbD09ZSYmKGU9e30pLCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjcmVhdGVVbml0U2luZ2xlIGV4cGVjdHMgZmlyc3QgcGFyYW1ldGVyIHRvIGJlIG9mIHR5cGUgJ3N0cmluZyciKTtpZihPYmplY3QoYWUuZikoRCx0KSl0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjcmVhdGUgdW5pdCAiJyt0KyciOiBhIHVuaXQgd2l0aCB0aGF0IG5hbWUgYWxyZWFkeSBleGlzdHMnKTshZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciByPWUuY2hhckF0KHQpLG49ZnVuY3Rpb24oZSl7cmV0dXJuL15bYS16QS1aXSQvLnRlc3QoZSl9O2lmKDA9PT10JiYhbihyKSl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdW5pdCBuYW1lIChtdXN0IGJlZ2luIHdpdGggYWxwaGEgY2hhcmFjdGVyKTogIicrZSsnIicpO2lmKDA8dCYmIShuKHIpfHwiMCI8PShpPXIpJiZpPD0iOSIpKXRocm93IG5ldyBFcnJvcignSW52YWxpZCB1bml0IG5hbWUgKG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQpOiAiJytlKyciJyl9dmFyIGl9KHQpO3ZhciBuLGksYSxvPW51bGwscz1bXSx1PTA7aWYoZSYmIlVuaXQiPT09ZS50eXBlKW89ZS5jbG9uZSgpO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBlKSIiIT09ZSYmKG49ZSk7ZWxzZXtpZigib2JqZWN0IiE9PU5zKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjcmVhdGUgdW5pdCAiJyt0KyciIGZyb20gIicrZS50b1N0cmluZygpKyciOiBleHBlY3RpbmcgInN0cmluZyIgb3IgIlVuaXQiIG9yICJPYmplY3QiJyk7bj1lLmRlZmluaXRpb24saT1lLnByZWZpeGVzLHU9ZS5vZmZzZXQsYT1lLmJhc2VOYW1lLGUuYWxpYXNlcyYmKHM9ZS5hbGlhc2VzLnZhbHVlT2YoKSl9aWYocylmb3IodmFyIGM9MDtjPHMubGVuZ3RoO2MrKylpZihPYmplY3QoYWUuZikoRCxzW2NdKSl0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjcmVhdGUgYWxpYXMgIicrc1tjXSsnIjogYSB1bml0IHdpdGggdGhhdCBuYW1lIGFscmVhZHkgZXhpc3RzJyk7aWYobiYmInN0cmluZyI9PXR5cGVvZiBuJiYhbyl0cnl7bz1NLnBhcnNlKG4se2FsbG93Tm9Vbml0czohMH0pfWNhdGNoKGUpe3Rocm93IGUubWVzc2FnZT0nQ291bGQgbm90IGNyZWF0ZSB1bml0ICInK3QrJyIgZnJvbSAiJytuKyciOiAnK2UubWVzc2FnZSxlfWVsc2UgbiYmIlVuaXQiPT09bi50eXBlJiYobz1uLmNsb25lKCkpO3M9c3x8W10sdT11fHwwLGk9aSYmaS50b1VwcGVyQ2FzZSYmSVtpLnRvVXBwZXJDYXNlKCldfHxJLk5PTkU7dmFyIGY9e307aWYobyl7dmFyIGw9IShmPXtuYW1lOnQsdmFsdWU6by52YWx1ZSxkaW1lbnNpb25zOm8uZGltZW5zaW9ucy5zbGljZSgwKSxwcmVmaXhlczppLG9mZnNldDp1fSk7Zm9yKHZhciBwIGluIEIpaWYoT2JqZWN0KGFlLmYpKEIscCkpe2Zvcih2YXIgbT0hMCxoPTA7aDxxLmxlbmd0aDtoKyspaWYoMWUtMTI8TWF0aC5hYnMoKGYuZGltZW5zaW9uc1toXXx8MCktKEJbcF0uZGltZW5zaW9uc1toXXx8MCkpKXttPSExO2JyZWFrfWlmKG0pe2w9ITAsZi5iYXNlPUJbcF07YnJlYWt9fWlmKCFsKXthPWF8fHQrIl9TVFVGRiI7dmFyIGQ9e2RpbWVuc2lvbnM6by5kaW1lbnNpb25zLnNsaWNlKDApfTtkLmtleT1hLEJbYV09ZCxVW2FdPXt1bml0OmYscHJlZml4OkkuTk9ORVsiIl19LGYuYmFzZT1CW2FdfX1lbHNle2lmKGE9YXx8dCsiX1NUVUZGIiwwPD1xLmluZGV4T2YoYSkpdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIG5ldyBiYXNlIHVuaXQgIicrdCsnIjogYSBiYXNlIHVuaXQgd2l0aCB0aGF0IG5hbWUgYWxyZWFkeSBleGlzdHMgKGFuZCBjYW5ub3QgYmUgb3ZlcnJpZGRlbiknKTtmb3IodmFyIHkgaW4gcS5wdXNoKGEpLEIpT2JqZWN0KGFlLmYpKEIseSkmJihCW3ldLmRpbWVuc2lvbnNbcS5sZW5ndGgtMV09MCk7Zm9yKHZhciBnPXtkaW1lbnNpb25zOltdfSx2PTA7djxxLmxlbmd0aDt2KyspZy5kaW1lbnNpb25zW3ZdPTA7Zy5kaW1lbnNpb25zW3EubGVuZ3RoLTFdPTEsZy5rZXk9YSxCW2FdPWcsZj17bmFtZTp0LHZhbHVlOjEsZGltZW5zaW9uczpCW2FdLmRpbWVuc2lvbnMuc2xpY2UoMCkscHJlZml4ZXM6aSxvZmZzZXQ6dSxiYXNlOkJbYV19LFVbYV09e3VuaXQ6ZixwcmVmaXg6SS5OT05FWyIiXX19TS5VTklUU1t0XT1mO2Zvcih2YXIgYj0wO2I8cy5sZW5ndGg7YisrKXt2YXIgeD1zW2JdLHc9e307Zm9yKHZhciBOIGluIGYpT2JqZWN0KGFlLmYpKGYsTikmJih3W05dPWZbTl0pO3cubmFtZT14LE0uVU5JVFNbeF09d31yZXR1cm4gbmV3IE0obnVsbCx0KX0sTS5kZWxldGVVbml0PWZ1bmN0aW9uKGUpe2RlbGV0ZSBNLlVOSVRTW2VdfSxNLlBSRUZJWEVTPUksTS5CQVNFX0RJTUVOU0lPTlM9cSxNLkJBU0VfVU5JVFM9QixNLlVOSVRfU1lTVEVNUz1GLE0uVU5JVFM9RCxNfSx7aXNDbGFzczohMH0pLEVzPVsidHlwZWQiLCJVbml0Il0sU3M9T2JqZWN0KHMuYSkoInVuaXQiLEVzLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLlVuaXQsbj10KCJ1bml0Iix7VW5pdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jbG9uZSgpfSxzdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIHIuaXNWYWx1ZWxlc3NVbml0KGUpP25ldyByKG51bGwsZSk6ci5wYXJzZShlLHthbGxvd05vVW5pdHM6ITB9KX0sIm51bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCwgc3RyaW5nIjpmdW5jdGlvbihlLHQpe3JldHVybiBuZXcgcihlLHQpfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLG4pfX0pO3JldHVybiBufSksQXM9WyJ0eXBlZCIsIlNwYXJzZU1hdHJpeCJdLENzPU9iamVjdChzLmEpKCJzcGFyc2UiLEFzLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLlNwYXJzZU1hdHJpeDtyZXR1cm4gdCgic3BhcnNlIix7IiI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIoW10pfSxzdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByKFtdLGUpfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcihlKX0sIkFycmF5IHwgTWF0cml4LCBzdHJpbmciOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyByKGUsdCl9fSl9KSxUcz0iY3JlYXRlVW5pdCIsX3M9WyJ0eXBlZCIsIlVuaXQiXSxJcz1PYmplY3Qocy5hKShUcyxfcyxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLGk9ZS5Vbml0O3JldHVybiB0KFRzLHsiT2JqZWN0LCBPYmplY3QiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkuY3JlYXRlVW5pdChlLHQpfSxPYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY3JlYXRlVW5pdChlLHt9KX0sInN0cmluZywgVW5pdCB8IHN0cmluZyB8IE9iamVjdCwgT2JqZWN0IjpmdW5jdGlvbihlLHQscil7dmFyIG49e307cmV0dXJuIG5bZV09dCxpLmNyZWF0ZVVuaXQobixyKX0sInN0cmluZywgVW5pdCB8IHN0cmluZyB8IE9iamVjdCI6ZnVuY3Rpb24oZSx0KXt2YXIgcj17fTtyZXR1cm4gcltlXT10LGkuY3JlYXRlVW5pdChyLHt9KX0sc3RyaW5nOmZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiB0W2VdPXt9LGkuY3JlYXRlVW5pdCh0LHt9KX19KX0pLHFzPVsidHlwZWQiLCJjb25maWciLCJDb21wbGV4Il0sQnM9T2JqZWN0KHMuYSkoImFjb3MiLHFzLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLmNvbmZpZyxuPWUuQ29tcGxleCxpPXQoImFjb3MiLHtudW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuLTE8PWUmJmU8PTF8fHIucHJlZGljdGFibGU/TWF0aC5hY29zKGUpOm5ldyBuKGUsMCkuYWNvcygpfSxDb21wbGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlLmFjb3MoKX0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLmFjb3MoKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSxpKX19KTtyZXR1cm4gaX0pLGtzPSJudW1iZXIiO2Z1bmN0aW9uIHpzKGUpe3JldHVybiBPYmplY3QoRS5hKShlKX1mdW5jdGlvbiBEcyhlKXtyZXR1cm4gTWF0aC5hdGFuKDEvZSl9ZnVuY3Rpb24gUnMoZSl7cmV0dXJuIGlzRmluaXRlKGUpPyhNYXRoLmxvZygoZSsxKS9lKStNYXRoLmxvZyhlLyhlLTEpKSkvMjowfWZ1bmN0aW9uIFBzKGUpe3JldHVybiBNYXRoLmFzaW4oMS9lKX1mdW5jdGlvbiBGcyhlKXt2YXIgdD0xL2U7cmV0dXJuIE1hdGgubG9nKHQrTWF0aC5zcXJ0KHQqdCsxKSl9ZnVuY3Rpb24gVXMoZSl7cmV0dXJuIE1hdGguYWNvcygxL2UpfWZ1bmN0aW9uIExzKGUpe3ZhciB0PTEvZSxyPU1hdGguc3FydCh0KnQtMSk7cmV0dXJuIE1hdGgubG9nKHIrdCl9ZnVuY3Rpb24gSHMoZSl7cmV0dXJuIE9iamVjdChFLmIpKGUpfWZ1bmN0aW9uICRzKGUpe3JldHVybiBPYmplY3QoRS5jKShlKX1mdW5jdGlvbiBHcyhlKXtyZXR1cm4gMS9NYXRoLnRhbihlKX1mdW5jdGlvbiBacyhlKXt2YXIgdD1NYXRoLmV4cCgyKmUpO3JldHVybih0KzEpLyh0LTEpfWZ1bmN0aW9uIFZzKGUpe3JldHVybiAxL01hdGguc2luKGUpfWZ1bmN0aW9uIEpzKGUpe3JldHVybiAwPT09ZT9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk6TWF0aC5hYnMoMi8oTWF0aC5leHAoZSktTWF0aC5leHAoLWUpKSkqT2JqZWN0KEUubikoZSl9ZnVuY3Rpb24gV3MoZSl7cmV0dXJuIDEvTWF0aC5jb3MoZSl9ZnVuY3Rpb24gWXMoZSl7cmV0dXJuIDIvKE1hdGguZXhwKGUpK01hdGguZXhwKC1lKSl9ZnVuY3Rpb24gWHMoZSl7cmV0dXJuIE9iamVjdChFLm8pKGUpfVhzLnNpZ25hdHVyZT1Zcy5zaWduYXR1cmU9V3Muc2lnbmF0dXJlPUpzLnNpZ25hdHVyZT1Wcy5zaWduYXR1cmU9WnMuc2lnbmF0dXJlPUdzLnNpZ25hdHVyZT0kcy5zaWduYXR1cmU9SHMuc2lnbmF0dXJlPUxzLnNpZ25hdHVyZT1Vcy5zaWduYXR1cmU9RnMuc2lnbmF0dXJlPVBzLnNpZ25hdHVyZT1Scy5zaWduYXR1cmU9RHMuc2lnbmF0dXJlPXpzLnNpZ25hdHVyZT1rczt2YXIgUXM9WyJ0eXBlZCIsImNvbmZpZyIsIkNvbXBsZXgiXSxLcz1PYmplY3Qocy5hKSgiYWNvc2giLFFzLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLmNvbmZpZyxuPWUuQ29tcGxleCxpPXQoImFjb3NoIix7bnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiAxPD1lfHxyLnByZWRpY3RhYmxlP3pzKGUpOmU8PS0xP25ldyBuKE1hdGgubG9nKE1hdGguc3FydChlKmUtMSktZSksTWF0aC5QSSk6bmV3IG4oZSwwKS5hY29zaCgpfSxDb21wbGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlLmFjb3NoKCl9LEJpZ051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5hY29zaCgpfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLGkpfX0pO3JldHVybiBpfSksZXU9WyJ0eXBlZCIsIkJpZ051bWJlciJdLHR1PU9iamVjdChzLmEpKCJhY290IixldSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5CaWdOdW1iZXIsbj10KCJhY290Iix7bnVtYmVyOkRzLENvbXBsZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWNvdCgpfSxCaWdOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByKDEpLmRpdihlKS5hdGFuKCl9LCJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7cmV0dXJuIG9lKGUsbil9fSk7cmV0dXJuIG59KSxydT1bInR5cGVkIiwiY29uZmlnIiwiQ29tcGxleCIsIkJpZ051bWJlciJdLG51PU9iamVjdChzLmEpKCJhY290aCIscnUsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuY29uZmlnLG49ZS5Db21wbGV4LGk9ZS5CaWdOdW1iZXIsYT10KCJhY290aCIse251bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gMTw9ZXx8ZTw9LTF8fHIucHJlZGljdGFibGU/UnMoZSk6bmV3IG4oZSwwKS5hY290aCgpfSxDb21wbGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlLmFjb3RoKCl9LEJpZ051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGkoMSkuZGl2KGUpLmF0YW5oKCl9LCJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7cmV0dXJuIG9lKGUsYSl9fSk7cmV0dXJuIGF9KSxpdT1bInR5cGVkIiwiY29uZmlnIiwiQ29tcGxleCIsIkJpZ051bWJlciJdLGF1PU9iamVjdChzLmEpKCJhY3NjIixpdSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5jb25maWcsbj1lLkNvbXBsZXgsaT1lLkJpZ051bWJlcixhPXQoImFjc2MiLHtudW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU8PS0xfHwxPD1lfHxyLnByZWRpY3RhYmxlP1BzKGUpOm5ldyBuKGUsMCkuYWNzYygpfSxDb21wbGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlLmFjc2MoKX0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaSgxKS5kaXYoZSkuYXNpbigpfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLGEpfX0pO3JldHVybiBhfSksb3U9WyJ0eXBlZCIsIkJpZ051bWJlciJdLHN1PU9iamVjdChzLmEpKCJhY3NjaCIsb3UsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuQmlnTnVtYmVyLG49dCgiYWNzY2giLHtudW1iZXI6RnMsQ29tcGxleDpmdW5jdGlvbihlKXtyZXR1cm4gZS5hY3NjaCgpfSxCaWdOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByKDEpLmRpdihlKS5hc2luaCgpfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLG4pfX0pO3JldHVybiBufSksdXU9WyJ0eXBlZCIsImNvbmZpZyIsIkNvbXBsZXgiLCJCaWdOdW1iZXIiXSxjdT1PYmplY3Qocy5hKSgiYXNlYyIsdXUsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuY29uZmlnLG49ZS5Db21wbGV4LGk9ZS5CaWdOdW1iZXIsYT10KCJhc2VjIix7bnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPD0tMXx8MTw9ZXx8ci5wcmVkaWN0YWJsZT9VcyhlKTpuZXcgbihlLDApLmFzZWMoKX0sQ29tcGxleDpmdW5jdGlvbihlKXtyZXR1cm4gZS5hc2VjKCl9LEJpZ051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGkoMSkuZGl2KGUpLmFjb3MoKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSxhKX19KTtyZXR1cm4gYX0pLGZ1PVsidHlwZWQiLCJjb25maWciLCJDb21wbGV4IiwiQmlnTnVtYmVyIl0sbHU9T2JqZWN0KHMuYSkoImFzZWNoIixmdSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLG49ZS5jb25maWcsaT1lLkNvbXBsZXgscj1lLkJpZ051bWJlcixhPXQoImFzZWNoIix7bnVtYmVyOmZ1bmN0aW9uKGUpe2lmKGU8PTEmJi0xPD1lfHxuLnByZWRpY3RhYmxlKXt2YXIgdD0xL2U7aWYoMDx0fHxuLnByZWRpY3RhYmxlKXJldHVybiBMcyhlKTt2YXIgcj1NYXRoLnNxcnQodCp0LTEpO3JldHVybiBuZXcgaShNYXRoLmxvZyhyLXQpLE1hdGguUEkpfXJldHVybiBuZXcgaShlLDApLmFzZWNoKCl9LENvbXBsZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuYXNlY2goKX0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcigxKS5kaXYoZSkuYWNvc2goKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSxhKX19KTtyZXR1cm4gYX0pLHB1PVsidHlwZWQiLCJjb25maWciLCJDb21wbGV4Il0sbXU9T2JqZWN0KHMuYSkoImFzaW4iLHB1LGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLmNvbmZpZyxuPWUuQ29tcGxleCxpPXQoImFzaW4iLHtudW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuLTE8PWUmJmU8PTF8fHIucHJlZGljdGFibGU/TWF0aC5hc2luKGUpOm5ldyBuKGUsMCkuYXNpbigpfSxDb21wbGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlLmFzaW4oKX0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLmFzaW4oKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSxpLCEwKX19KTtyZXR1cm4gaX0pLGh1PVsidHlwZWQiXSxkdT1PYmplY3Qocy5hKSgiYXNpbmgiLGh1LGZ1bmN0aW9uKGUpe3ZhciB0PSgwLGUudHlwZWQpKCJhc2luaCIse251bWJlcjpIcyxDb21wbGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlLmFzaW5oKCl9LEJpZ051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5hc2luaCgpfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLHQsITApfX0pO3JldHVybiB0fSkseXU9WyJ0eXBlZCJdLGd1PU9iamVjdChzLmEpKCJhdGFuIix5dSxmdW5jdGlvbihlKXt2YXIgdD0oMCxlLnR5cGVkKSgiYXRhbiIse251bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5hdGFuKGUpfSxDb21wbGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlLmF0YW4oKX0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLmF0YW4oKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSx0LCEwKX19KTtyZXR1cm4gdH0pLHZ1PVsidHlwZWQiLCJtYXRyaXgiLCJlcXVhbFNjYWxhciIsIkJpZ051bWJlciIsIkRlbnNlTWF0cml4Il0sYnU9T2JqZWN0KHMuYSkoImF0YW4yIix2dSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5tYXRyaXgsbj1lLmVxdWFsU2NhbGFyLGk9ZS5CaWdOdW1iZXIsYT1lLkRlbnNlTWF0cml4LG89bnIoe3R5cGVkOnQsZXF1YWxTY2FsYXI6bn0pLHM9ZHIoe3R5cGVkOnR9KSx1PUhyKHt0eXBlZDp0LGVxdWFsU2NhbGFyOm59KSxjPXNyKHt0eXBlZDp0LGVxdWFsU2NhbGFyOm59KSxmPWJyKHt0eXBlZDp0LERlbnNlTWF0cml4OmF9KSxsPVh0KHt0eXBlZDp0fSkscD1LdCh7dHlwZWQ6dH0pLG09dCgiYXRhbjIiLHsibnVtYmVyLCBudW1iZXIiOk1hdGguYXRhbjIsIkJpZ051bWJlciwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBpLmF0YW4yKGUsdCl9LCJTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLHQsbSwhMSl9LCJTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBvKHQsZSxtLCEwKX0sIkRlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMoZSx0LG0sITEpfSwiRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBsKGUsdCxtKX0sIkFycmF5LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbShyKGUpLHIodCkpLnZhbHVlT2YoKX0sIkFycmF5LCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG0ocihlKSx0KX0sIk1hdHJpeCwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG0oZSxyKHQpKX0sIlNwYXJzZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBjKGUsdCxtLCExKX0sIkRlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAoZSx0LG0sITEpfSwibnVtYmVyIHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYodCxlLG0sITApfSwibnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcCh0LGUsbSwhMCl9LCJBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBwKHIoZSksdCxtLCExKS52YWx1ZU9mKCl9LCJudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBwKHIodCksZSxtLCEwKS52YWx1ZU9mKCl9fSk7cmV0dXJuIG19KSx4dT1bInR5cGVkIiwiY29uZmlnIiwiQ29tcGxleCJdLHd1PU9iamVjdChzLmEpKCJhdGFuaCIseHUsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuY29uZmlnLG49ZS5Db21wbGV4LGk9dCgiYXRhbmgiLHtudW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU8PTEmJi0xPD1lfHxyLnByZWRpY3RhYmxlPyRzKGUpOm5ldyBuKGUsMCkuYXRhbmgoKX0sQ29tcGxleDpmdW5jdGlvbihlKXtyZXR1cm4gZS5hdGFuaCgpfSxCaWdOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuYXRhbmgoKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSxpLCEwKX19KTtyZXR1cm4gaX0pLE51PVsidHlwZWQiXSxPdT1PYmplY3Qocy5hKSgiY29zIixOdSxmdW5jdGlvbihlKXt2YXIgdD0oMCxlLnR5cGVkKSgiY29zIix7bnVtYmVyOk1hdGguY29zLENvbXBsZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29zKCl9LEJpZ051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3MoKX0sVW5pdDpmdW5jdGlvbihlKXtpZighZS5oYXNCYXNlKGUuY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5pdCBpbiBmdW5jdGlvbiBjb3MgaXMgbm8gYW5nbGUiKTtyZXR1cm4gdChlLnZhbHVlKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSx0KX19KTtyZXR1cm4gdH0pLE11PVsidHlwZWQiXSxqdT1PYmplY3Qocy5hKSgiY29zaCIsTXUsZnVuY3Rpb24oZSl7dmFyIHQ9KDAsZS50eXBlZCkoImNvc2giLHtudW1iZXI6RS5lLENvbXBsZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29zaCgpfSxCaWdOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29zaCgpfSxVbml0OmZ1bmN0aW9uKGUpe2lmKCFlLmhhc0Jhc2UoZS5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbml0IGluIGZ1bmN0aW9uIGNvc2ggaXMgbm8gYW5nbGUiKTtyZXR1cm4gdChlLnZhbHVlKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSx0KX19KTtyZXR1cm4gdH0pLEV1PVsidHlwZWQiLCJCaWdOdW1iZXIiXSxTdT1PYmplY3Qocy5hKSgiY290IixFdSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5CaWdOdW1iZXIsbj10KCJjb3QiLHtudW1iZXI6R3MsQ29tcGxleDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3QoKX0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcigxKS5kaXYoZS50YW4oKSl9LFVuaXQ6ZnVuY3Rpb24oZSl7aWYoIWUuaGFzQmFzZShlLmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVuaXQgaW4gZnVuY3Rpb24gY290IGlzIG5vIGFuZ2xlIik7cmV0dXJuIG4oZS52YWx1ZSl9LCJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7cmV0dXJuIG9lKGUsbil9fSk7cmV0dXJuIG59KSxBdT1bInR5cGVkIiwiQmlnTnVtYmVyIl0sQ3U9T2JqZWN0KHMuYSkoImNvdGgiLEF1LGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLkJpZ051bWJlcixuPXQoImNvdGgiLHtudW1iZXI6WnMsQ29tcGxleDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3RoKCl9LEJpZ051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHIoMSkuZGl2KGUudGFuaCgpKX0sVW5pdDpmdW5jdGlvbihlKXtpZighZS5oYXNCYXNlKGUuY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5pdCBpbiBmdW5jdGlvbiBjb3RoIGlzIG5vIGFuZ2xlIik7cmV0dXJuIG4oZS52YWx1ZSl9LCJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7cmV0dXJuIG9lKGUsbil9fSk7cmV0dXJuIG59KSxUdT1bInR5cGVkIiwiQmlnTnVtYmVyIl0sX3U9T2JqZWN0KHMuYSkoImNzYyIsVHUsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuQmlnTnVtYmVyLG49dCgiY3NjIix7bnVtYmVyOlZzLENvbXBsZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY3NjKCl9LEJpZ051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHIoMSkuZGl2KGUuc2luKCkpfSxVbml0OmZ1bmN0aW9uKGUpe2lmKCFlLmhhc0Jhc2UoZS5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbml0IGluIGZ1bmN0aW9uIGNzYyBpcyBubyBhbmdsZSIpO3JldHVybiBuKGUudmFsdWUpfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLG4pfX0pO3JldHVybiBufSksSXU9WyJ0eXBlZCIsIkJpZ051bWJlciJdLHF1PU9iamVjdChzLmEpKCJjc2NoIixJdSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5CaWdOdW1iZXIsbj10KCJjc2NoIix7bnVtYmVyOkpzLENvbXBsZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY3NjaCgpfSxCaWdOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByKDEpLmRpdihlLnNpbmgoKSl9LFVuaXQ6ZnVuY3Rpb24oZSl7aWYoIWUuaGFzQmFzZShlLmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVuaXQgaW4gZnVuY3Rpb24gY3NjaCBpcyBubyBhbmdsZSIpO3JldHVybiBuKGUudmFsdWUpfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLG4pfX0pO3JldHVybiBufSksQnU9WyJ0eXBlZCIsIkJpZ051bWJlciJdLGt1PU9iamVjdChzLmEpKCJzZWMiLEJ1LGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLkJpZ051bWJlcixuPXQoInNlYyIse251bWJlcjpXcyxDb21wbGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlLnNlYygpfSxCaWdOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByKDEpLmRpdihlLmNvcygpKX0sVW5pdDpmdW5jdGlvbihlKXtpZighZS5oYXNCYXNlKGUuY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5pdCBpbiBmdW5jdGlvbiBzZWMgaXMgbm8gYW5nbGUiKTtyZXR1cm4gbihlLnZhbHVlKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSxuKX19KTtyZXR1cm4gbn0pLHp1PVsidHlwZWQiLCJCaWdOdW1iZXIiXSxEdT1PYmplY3Qocy5hKSgic2VjaCIsenUsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuQmlnTnVtYmVyLG49dCgic2VjaCIse251bWJlcjpZcyxDb21wbGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlLnNlY2goKX0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcigxKS5kaXYoZS5jb3NoKCkpfSxVbml0OmZ1bmN0aW9uKGUpe2lmKCFlLmhhc0Jhc2UoZS5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbml0IGluIGZ1bmN0aW9uIHNlY2ggaXMgbm8gYW5nbGUiKTtyZXR1cm4gbihlLnZhbHVlKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSxuKX19KTtyZXR1cm4gbn0pLFJ1PVsidHlwZWQiXSxQdT1PYmplY3Qocy5hKSgic2luIixSdSxmdW5jdGlvbihlKXt2YXIgdD0oMCxlLnR5cGVkKSgic2luIix7bnVtYmVyOk1hdGguc2luLENvbXBsZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2luKCl9LEJpZ051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5zaW4oKX0sVW5pdDpmdW5jdGlvbihlKXtpZighZS5oYXNCYXNlKGUuY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5pdCBpbiBmdW5jdGlvbiBzaW4gaXMgbm8gYW5nbGUiKTtyZXR1cm4gdChlLnZhbHVlKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSx0LCEwKX19KTtyZXR1cm4gdH0pLEZ1PVsidHlwZWQiXSxVdT1PYmplY3Qocy5hKSgic2luaCIsRnUsZnVuY3Rpb24oZSl7dmFyIHQ9KDAsZS50eXBlZCkoInNpbmgiLHtudW1iZXI6WHMsQ29tcGxleDpmdW5jdGlvbihlKXtyZXR1cm4gZS5zaW5oKCl9LEJpZ051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5zaW5oKCl9LFVuaXQ6ZnVuY3Rpb24oZSl7aWYoIWUuaGFzQmFzZShlLmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVuaXQgaW4gZnVuY3Rpb24gc2luaCBpcyBubyBhbmdsZSIpO3JldHVybiB0KGUudmFsdWUpfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLHQsITApfX0pO3JldHVybiB0fSksTHU9WyJ0eXBlZCJdLEh1PU9iamVjdChzLmEpKCJ0YW4iLEx1LGZ1bmN0aW9uKGUpe3ZhciB0PSgwLGUudHlwZWQpKCJ0YW4iLHtudW1iZXI6TWF0aC50YW4sQ29tcGxleDpmdW5jdGlvbihlKXtyZXR1cm4gZS50YW4oKX0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRhbigpfSxVbml0OmZ1bmN0aW9uKGUpe2lmKCFlLmhhc0Jhc2UoZS5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbml0IGluIGZ1bmN0aW9uIHRhbiBpcyBubyBhbmdsZSIpO3JldHVybiB0KGUudmFsdWUpfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLHQsITApfX0pO3JldHVybiB0fSksJHU9WyJ0eXBlZCJdLEd1PU9iamVjdChzLmEpKCJ0YW5oIiwkdSxmdW5jdGlvbihlKXt2YXIgdD0oMCxlLnR5cGVkKSgidGFuaCIse251bWJlcjpFLnAsQ29tcGxleDpmdW5jdGlvbihlKXtyZXR1cm4gZS50YW5oKCl9LEJpZ051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS50YW5oKCl9LFVuaXQ6ZnVuY3Rpb24oZSl7aWYoIWUuaGFzQmFzZShlLmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVuaXQgaW4gZnVuY3Rpb24gdGFuaCBpcyBubyBhbmdsZSIpO3JldHVybiB0KGUudmFsdWUpfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLHQsITApfX0pO3JldHVybiB0fSksWnU9InNldENhcnRlc2lhbiIsVnU9WyJ0eXBlZCIsInNpemUiLCJzdWJzZXQiLCJjb21wYXJlTmF0dXJhbCIsIkluZGV4IiwiRGVuc2VNYXRyaXgiXSxKdT1PYmplY3Qocy5hKShadSxWdSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHM9ZS5zaXplLHU9ZS5zdWJzZXQsYz1lLmNvbXBhcmVOYXR1cmFsLGY9ZS5JbmRleCxsPWUuRGVuc2VNYXRyaXg7cmV0dXJuIHQoWnUseyJBcnJheSB8IE1hdHJpeCwgQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7dmFyIHI9W107aWYoMCE9PXUocyhlKSxuZXcgZigwKSkmJjAhPT11KHModCksbmV3IGYoMCkpKXt2YXIgbj1PYmplY3QoSS5lKShBcnJheS5pc0FycmF5KGUpP2U6ZS50b0FycmF5KCkpLnNvcnQoYyksaT1PYmplY3QoSS5lKShBcnJheS5pc0FycmF5KHQpP3Q6dC50b0FycmF5KCkpLnNvcnQoYyk7cj1bXTtmb3IodmFyIGE9MDthPG4ubGVuZ3RoO2ErKylmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKylyLnB1c2goW25bYV0saVtvXV0pfXJldHVybiBBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KHQpP3I6bmV3IGwocil9fSl9KSxXdT0ic2V0RGlmZmVyZW5jZSIsWXU9WyJ0eXBlZCIsInNpemUiLCJzdWJzZXQiLCJjb21wYXJlTmF0dXJhbCIsIkluZGV4IiwiRGVuc2VNYXRyaXgiXSxYdT1PYmplY3Qocy5hKShXdSxZdSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHU9ZS5zaXplLGM9ZS5zdWJzZXQsZj1lLmNvbXBhcmVOYXR1cmFsLGw9ZS5JbmRleCxwPWUuRGVuc2VNYXRyaXg7cmV0dXJuIHQoV3UseyJBcnJheSB8IE1hdHJpeCwgQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7dmFyIHI7aWYoMD09PWModShlKSxuZXcgbCgwKSkpcj1bXTtlbHNle2lmKDA9PT1jKHUodCksbmV3IGwoMCkpKXJldHVybiBPYmplY3QoSS5lKShlLnRvQXJyYXkoKSk7dmFyIG4saT1PYmplY3QoSS5pKShPYmplY3QoSS5lKShBcnJheS5pc0FycmF5KGUpP2U6ZS50b0FycmF5KCkpLnNvcnQoZikpLGE9T2JqZWN0KEkuaSkoT2JqZWN0KEkuZSkoQXJyYXkuaXNBcnJheSh0KT90OnQudG9BcnJheSgpKS5zb3J0KGYpKTtyPVtdO2Zvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKXtuPSExO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKWlmKDA9PT1mKGlbb10udmFsdWUsYVtzXS52YWx1ZSkmJmlbb10uaWRlbnRpZmllcj09PWFbc10uaWRlbnRpZmllcil7bj0hMDticmVha31ufHxyLnB1c2goaVtvXSl9fXJldHVybiBBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KHQpP09iamVjdChJLmcpKHIpOm5ldyBwKE9iamVjdChJLmcpKHIpKX19KX0pLFF1PSJzZXREaXN0aW5jdCIsS3U9WyJ0eXBlZCIsInNpemUiLCJzdWJzZXQiLCJjb21wYXJlTmF0dXJhbCIsIkluZGV4IiwiRGVuc2VNYXRyaXgiXSxlYz1PYmplY3Qocy5hKShRdSxLdSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLGk9ZS5zaXplLGE9ZS5zdWJzZXQsbz1lLmNvbXBhcmVOYXR1cmFsLHM9ZS5JbmRleCx1PWUuRGVuc2VNYXRyaXg7cmV0dXJuIHQoUXUseyJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoMD09PWEoaShlKSxuZXcgcygwKSkpdD1bXTtlbHNle3ZhciByPU9iamVjdChJLmUpKEFycmF5LmlzQXJyYXkoZSk/ZTplLnRvQXJyYXkoKSkuc29ydChvKTsodD1bXSkucHVzaChyWzBdKTtmb3IodmFyIG49MTtuPHIubGVuZ3RoO24rKykwIT09byhyW25dLHJbbi0xXSkmJnQucHVzaChyW25dKX1yZXR1cm4gQXJyYXkuaXNBcnJheShlKT90Om5ldyB1KHQpfX0pfSksdGM9InNldEludGVyc2VjdCIscmM9WyJ0eXBlZCIsInNpemUiLCJzdWJzZXQiLCJjb21wYXJlTmF0dXJhbCIsIkluZGV4IiwiRGVuc2VNYXRyaXgiXSxuYz1PYmplY3Qocy5hKSh0YyxyYyxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHM9ZS5zaXplLHU9ZS5zdWJzZXQsYz1lLmNvbXBhcmVOYXR1cmFsLGY9ZS5JbmRleCxsPWUuRGVuc2VNYXRyaXg7cmV0dXJuIHQodGMseyJBcnJheSB8IE1hdHJpeCwgQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7dmFyIHI7aWYoMD09PXUocyhlKSxuZXcgZigwKSl8fDA9PT11KHModCksbmV3IGYoMCkpKXI9W107ZWxzZXt2YXIgbj1PYmplY3QoSS5pKShPYmplY3QoSS5lKShBcnJheS5pc0FycmF5KGUpP2U6ZS50b0FycmF5KCkpLnNvcnQoYykpLGk9T2JqZWN0KEkuaSkoT2JqZWN0KEkuZSkoQXJyYXkuaXNBcnJheSh0KT90OnQudG9BcnJheSgpKS5zb3J0KGMpKTtyPVtdO2Zvcih2YXIgYT0wO2E8bi5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKWlmKDA9PT1jKG5bYV0udmFsdWUsaVtvXS52YWx1ZSkmJm5bYV0uaWRlbnRpZmllcj09PWlbb10uaWRlbnRpZmllcil7ci5wdXNoKG5bYV0pO2JyZWFrfX1yZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmQXJyYXkuaXNBcnJheSh0KT9PYmplY3QoSS5nKShyKTpuZXcgbChPYmplY3QoSS5nKShyKSl9fSl9KSxpYz0ic2V0SXNTdWJzZXQiLGFjPVsidHlwZWQiLCJzaXplIiwic3Vic2V0IiwiY29tcGFyZU5hdHVyYWwiLCJJbmRleCJdLG9jPU9iamVjdChzLmEpKGljLGFjLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscz1lLnNpemUsdT1lLnN1YnNldCxjPWUuY29tcGFyZU5hdHVyYWwsZj1lLkluZGV4O3JldHVybiB0KGljLHsiQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlLHQpe2lmKDA9PT11KHMoZSksbmV3IGYoMCkpKXJldHVybiEwO2lmKDA9PT11KHModCksbmV3IGYoMCkpKXJldHVybiExO2Zvcih2YXIgcixuPU9iamVjdChJLmkpKE9iamVjdChJLmUpKEFycmF5LmlzQXJyYXkoZSk/ZTplLnRvQXJyYXkoKSkuc29ydChjKSksaT1PYmplY3QoSS5pKShPYmplY3QoSS5lKShBcnJheS5pc0FycmF5KHQpP3Q6dC50b0FycmF5KCkpLnNvcnQoYykpLGE9MDthPG4ubGVuZ3RoO2ErKyl7cj0hMTtmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKylpZigwPT09YyhuW2FdLnZhbHVlLGlbb10udmFsdWUpJiZuW2FdLmlkZW50aWZpZXI9PT1pW29dLmlkZW50aWZpZXIpe3I9ITA7YnJlYWt9aWYoITE9PT1yKXJldHVybiExfXJldHVybiEwfX0pfSksc2M9InNldE11bHRpcGxpY2l0eSIsdWM9WyJ0eXBlZCIsInNpemUiLCJzdWJzZXQiLCJjb21wYXJlTmF0dXJhbCIsIkluZGV4Il0sY2M9T2JqZWN0KHMuYSkoc2MsdWMsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxhPWUuc2l6ZSxvPWUuc3Vic2V0LHM9ZS5jb21wYXJlTmF0dXJhbCx1PWUuSW5kZXg7cmV0dXJuIHQoc2MseyJudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXgsIEFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlLHQpe2lmKDA9PT1vKGEodCksbmV3IHUoMCkpKXJldHVybiAwO2Zvcih2YXIgcj1PYmplY3QoSS5lKShBcnJheS5pc0FycmF5KHQpP3Q6dC50b0FycmF5KCkpLG49MCxpPTA7aTxyLmxlbmd0aDtpKyspMD09PXMocltpXSxlKSYmbisrO3JldHVybiBufX0pfSksZmM9InNldFBvd2Vyc2V0IixsYz1bInR5cGVkIiwic2l6ZSIsInN1YnNldCIsImNvbXBhcmVOYXR1cmFsIiwiSW5kZXgiXSxwYz1PYmplY3Qocy5hKShmYyxsYyxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLGk9ZS5zaXplLGE9ZS5zdWJzZXQsbz1lLmNvbXBhcmVOYXR1cmFsLHM9ZS5JbmRleDtyZXR1cm4gdChmYyx7IkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtpZigwPT09YShpKGUpLG5ldyBzKDApKSlyZXR1cm5bXTtmb3IodmFyIHQ9T2JqZWN0KEkuZSkoQXJyYXkuaXNBcnJheShlKT9lOmUudG9BcnJheSgpKS5zb3J0KG8pLHI9W10sbj0wO24udG9TdHJpbmcoMikubGVuZ3RoPD10Lmxlbmd0aDspci5wdXNoKHUodCxuLnRvU3RyaW5nKDIpLnNwbGl0KCIiKS5yZXZlcnNlKCkpKSxuKys7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPWUubGVuZ3RoLTE7MDxyO3ItLSlmb3IodmFyIG49MDtuPHI7bisrKWVbbl0ubGVuZ3RoPmVbbisxXS5sZW5ndGgmJih0PWVbbl0sZVtuXT1lW24rMV0sZVtuKzFdPXQpO3JldHVybiBlfShyKX19KTtmdW5jdGlvbiB1KGUsdCl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKykiMSI9PT10W25dJiZyLnB1c2goZVtuXSk7cmV0dXJuIHJ9fSksbWM9InNldFNpemUiLGhjPVsidHlwZWQiLCJjb21wYXJlTmF0dXJhbCJdLGRjPU9iamVjdChzLmEpKG1jLGhjLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQsYT1lLmNvbXBhcmVOYXR1cmFsO3JldHVybiB0KG1jLHsiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP09iamVjdChJLmUpKGUpLmxlbmd0aDpPYmplY3QoSS5lKShlLnRvQXJyYXkoKSkubGVuZ3RofSwiQXJyYXkgfCBNYXRyaXgsIGJvb2xlYW4iOmZ1bmN0aW9uKGUsdCl7aWYoITE9PT10fHwwPT09ZS5sZW5ndGgpcmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/T2JqZWN0KEkuZSkoZSkubGVuZ3RoOk9iamVjdChJLmUpKGUudG9BcnJheSgpKS5sZW5ndGg7Zm9yKHZhciByPU9iamVjdChJLmUpKEFycmF5LmlzQXJyYXkoZSk/ZTplLnRvQXJyYXkoKSkuc29ydChhKSxuPTEsaT0xO2k8ci5sZW5ndGg7aSsrKTAhPT1hKHJbaV0scltpLTFdKSYmbisrO3JldHVybiBufX0pfSkseWM9InNldFN5bURpZmZlcmVuY2UiLGdjPVsidHlwZWQiLCJzaXplIiwiY29uY2F0Iiwic3Vic2V0Iiwic2V0RGlmZmVyZW5jZSIsIkluZGV4Il0sdmM9T2JqZWN0KHMuYSkoeWMsZ2MsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxpPWUuc2l6ZSxhPWUuY29uY2F0LG89ZS5zdWJzZXQscz1lLnNldERpZmZlcmVuY2UsdT1lLkluZGV4O3JldHVybiB0KHljLHsiQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlLHQpe2lmKDA9PT1vKGkoZSksbmV3IHUoMCkpKXJldHVybiBPYmplY3QoSS5lKSh0KTtpZigwPT09byhpKHQpLG5ldyB1KDApKSlyZXR1cm4gT2JqZWN0KEkuZSkoZSk7dmFyIHI9T2JqZWN0KEkuZSkoZSksbj1PYmplY3QoSS5lKSh0KTtyZXR1cm4gYShzKHIsbikscyhuLHIpKX19KX0pLGJjPSJzZXRVbmlvbiIseGM9WyJ0eXBlZCIsInNpemUiLCJjb25jYXQiLCJzdWJzZXQiLCJzZXRJbnRlcnNlY3QiLCJzZXRTeW1EaWZmZXJlbmNlIiwiSW5kZXgiXSx3Yz1PYmplY3Qocy5hKShiYyx4YyxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLGk9ZS5zaXplLGE9ZS5jb25jYXQsbz1lLnN1YnNldCxzPWUuc2V0SW50ZXJzZWN0LHU9ZS5zZXRTeW1EaWZmZXJlbmNlLGM9ZS5JbmRleDtyZXR1cm4gdChiYyx7IkFycmF5IHwgTWF0cml4LCBBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtpZigwPT09byhpKGUpLG5ldyBjKDApKSlyZXR1cm4gT2JqZWN0KEkuZSkodCk7aWYoMD09PW8oaSh0KSxuZXcgYygwKSkpcmV0dXJuIE9iamVjdChJLmUpKGUpO3ZhciByPU9iamVjdChJLmUpKGUpLG49T2JqZWN0KEkuZSkodCk7cmV0dXJuIGEodShyLG4pLHMocixuKSl9fSl9KSxOYz1bInR5cGVkIiwibWF0cml4IiwiYWRkU2NhbGFyIiwiZXF1YWxTY2FsYXIiLCJEZW5zZU1hdHJpeCIsIlNwYXJzZU1hdHJpeCJdLE9jPU9iamVjdChzLmEpKCJhZGQiLE5jLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLm1hdHJpeCxuPWUuYWRkU2NhbGFyLGk9ZS5lcXVhbFNjYWxhcixhPWUuRGVuc2VNYXRyaXgsbz0oZS5TcGFyc2VNYXRyaXgsR3Qoe3R5cGVkOnR9KSkscz1WdCh7dHlwZWQ6dCxlcXVhbFNjYWxhcjppfSksdT1XdCh7dHlwZWQ6dCxEZW5zZU1hdHJpeDphfSksYz1YdCh7dHlwZWQ6dH0pLGY9S3Qoe3R5cGVkOnR9KSxsPXQoImFkZCIsT2JqZWN0KGFlLmUpKHsiRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBjKGUsdCxuKX0sIkRlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oZSx0LG4sITEpfSwiU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyh0LGUsbiwhMCl9LCJTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyhlLHQsbil9LCJBcnJheSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwocihlKSxyKHQpKS52YWx1ZU9mKCl9LCJBcnJheSwgTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBsKHIoZSksdCl9LCJNYXRyaXgsIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBsKGUscih0KSl9LCJEZW5zZU1hdHJpeCwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiBmKGUsdCxuLCExKX0sIlNwYXJzZU1hdHJpeCwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiB1KGUsdCxuLCExKX0sImFueSwgRGVuc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYodCxlLG4sITApfSwiYW55LCBTcGFyc2VNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUodCxlLG4sITApfSwiQXJyYXksIGFueSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihyKGUpLHQsbiwhMSkudmFsdWVPZigpfSwiYW55LCBBcnJheSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZihyKHQpLGUsbiwhMCkudmFsdWVPZigpfSwiYW55LCBhbnkiOm4sImFueSwgYW55LCAuLi5hbnkiOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49bChlLHQpLGk9MDtpPHIubGVuZ3RoO2krKyluPWwobixyW2ldKTtyZXR1cm4gbn19LG4uc2lnbmF0dXJlcykpO3JldHVybiBsfSksTWM9WyJ0eXBlZCIsImFicyIsImFkZFNjYWxhciIsImRpdmlkZVNjYWxhciIsIm11bHRpcGx5U2NhbGFyIiwic3FydCIsInNtYWxsZXIiLCJpc1Bvc2l0aXZlIl0samM9T2JqZWN0KHMuYSkoImh5cG90IixNYyxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLGE9ZS5hYnMsbz1lLmFkZFNjYWxhcixzPWUuZGl2aWRlU2NhbGFyLHU9ZS5tdWx0aXBseVNjYWxhcixjPWUuc3FydCxmPWUuc21hbGxlcixsPWUuaXNQb3NpdGl2ZSxyPXQoImh5cG90Iix7Ii4uLiBudW1iZXIgfCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9MCxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWEoZVtuXSk7ZihyLGkpPyh0PXUodCx1KHMocixpKSxzKHIsaSkpKSx0PW8odCwxKSxyPWkpOnQ9byh0LGwoaSk/dShzKGkscikscyhpLHIpKTppKX1yZXR1cm4gdShyLGModCkpfSxBcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gci5hcHBseShyLE9iamVjdChJLmUpKGUpKX0sTWF0cml4OmZ1bmN0aW9uKGUpe3JldHVybiByLmFwcGx5KHIsT2JqZWN0KEkuZSkoZS50b0FycmF5KCkpKX19KTtyZXR1cm4gcn0pLEVjPVsidHlwZWQiLCJhYnMiLCJhZGQiLCJwb3ciLCJjb25qIiwic3FydCIsIm11bHRpcGx5IiwiZXF1YWxTY2FsYXIiLCJsYXJnZXIiLCJzbWFsbGVyIiwibWF0cml4Il0sU2M9T2JqZWN0KHMuYSkoIm5vcm0iLEVjLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQsbD1lLmFicyxwPWUuYWRkLG09ZS5wb3csaD1lLmNvbmosZD1lLnNxcnQseT1lLm11bHRpcGx5LGc9ZS5lcXVhbFNjYWxhcix2PWUubGFyZ2VyLGI9ZS5zbWFsbGVyLHI9ZS5tYXRyaXgsbj10KCJub3JtIix7bnVtYmVyOk1hdGguYWJzLENvbXBsZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWJzKCl9LEJpZ051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5hYnMoKX0sYm9vbGVhbjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5hYnMoZSl9LEFycmF5OmZ1bmN0aW9uKGUpe3JldHVybiB4KHIoZSksMil9LE1hdHJpeDpmdW5jdGlvbihlKXtyZXR1cm4geChlLDIpfSwibnVtYmVyIHwgQ29tcGxleCB8IEJpZ051bWJlciB8IGJvb2xlYW4sIG51bWJlciB8IEJpZ051bWJlciB8IHN0cmluZyI6ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSl9LCJBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyIHwgc3RyaW5nIjpmdW5jdGlvbihlLHQpe3JldHVybiB4KHIoZSksdCl9LCJNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlciB8IHN0cmluZyI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geChlLHQpfX0pO2Z1bmN0aW9uIHgoZSx0KXt2YXIgcj1lLnNpemUoKTtpZigxPT09ci5sZW5ndGgpe2lmKHQ9PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl8fCJpbmYiPT09dCl7dmFyIG49MDtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWwoZSk7dih0LG4pJiYobj10KX0sITApLG59dmFyIGk7aWYodD09PU51bWJlci5ORUdBVElWRV9JTkZJTklUWXx8Ii1pbmYiPT09dClyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWwoZSk7aSYmIWIodCxpKXx8KGk9dCl9LCEwKSxpfHwwO2lmKCJmcm8iPT09dClyZXR1cm4geChlLDIpO2lmKCJudW1iZXIiIT10eXBlb2YgdHx8aXNOYU4odCkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBwYXJhbWV0ZXIgdmFsdWUiKTtpZihnKHQsMCkpcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTt2YXIgYT0wO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7YT1wKG0obChlKSx0KSxhKX0sITApLG0oYSwxL3QpfWlmKDI9PT1yLmxlbmd0aCl7aWYoMT09PXQpe3ZhciBvPVtdLHM9MDtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7dmFyIHI9dFsxXSxuPXAob1tyXXx8MCxsKGUpKTt2KG4scykmJihzPW4pLG9bcl09bn0sITApLHN9aWYodD09PU51bWJlci5QT1NJVElWRV9JTkZJTklUWXx8ImluZiI9PT10KXt2YXIgdT1bXSxjPTA7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlLHQpe3ZhciByPXRbMF0sbj1wKHVbcl18fDAsbChlKSk7dihuLGMpJiYoYz1uKSx1W3JdPW59LCEwKSxjfWlmKCJmcm8iPT09dCl7dmFyIGY9MDtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7Zj1wKGYseShlLGgoZSkpKX0pLGwoZChmKSl9aWYoMj09PXQpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBwYXJhbWV0ZXIgdmFsdWUsIG1pc3NpbmcgaW1wbGVtZW50YXRpb24gb2YgbWF0cml4IHNpbmd1bGFyIHZhbHVlIGRlY29tcG9zaXRpb24iKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHBhcmFtZXRlciB2YWx1ZSIpfX1yZXR1cm4gbn0pLEFjPVsidHlwZWQiLCJhZGQiLCJtdWx0aXBseSJdLENjPU9iamVjdChzLmEpKCJkb3QiLEFjLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscz1lLmFkZCx1PWUubXVsdGlwbHk7cmV0dXJuIHQoImRvdCIseyJNYXRyaXgsIE1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcihlLnRvQXJyYXkoKSx0LnRvQXJyYXkoKSl9LCJNYXRyaXgsIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiByKGUudG9BcnJheSgpLHQpfSwiQXJyYXksIE1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcihlLHQudG9BcnJheSgpKX0sIkFycmF5LCBBcnJheSI6cn0pO2Z1bmN0aW9uIHIoZSx0KXt2YXIgcj1PYmplY3QoSS5hKShlKSxuPU9iamVjdChJLmEpKHQpLGk9clswXTtpZigxIT09ci5sZW5ndGh8fDEhPT1uLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVmVjdG9yIGV4cGVjdGVkIik7aWYoclswXSE9PW5bMF0pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlZlY3RvcnMgbXVzdCBoYXZlIGVxdWFsIGxlbmd0aCAoIityWzBdKyIgIT0gIituWzBdKyIpIik7aWYoMD09PWkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNhbm5vdCBjYWxjdWxhdGUgdGhlIGRvdCBwcm9kdWN0IG9mIGVtcHR5IHZlY3RvcnMiKTtmb3IodmFyIGE9MCxvPTA7bzxpO28rKylhPXMoYSx1KGVbb10sdFtvXSkpO3JldHVybiBhfX0pLFRjPVsidHlwZWQiLCJtYXRyaXgiLCJhZGQiXSxfYz1PYmplY3Qocy5hKSgidHJhY2UiLFRjLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLm1hdHJpeCxtPWUuYWRkO3JldHVybiB0KCJ0cmFjZSIse0FycmF5OmZ1bmN0aW9uKGUpe3JldHVybiBuKHIoZSkpfSxTcGFyc2VNYXRyaXg6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fdmFsdWVzLHI9ZS5faW5kZXgsbj1lLl9wdHIsaT1lLl9zaXplLGE9aVswXSxvPWlbMV07aWYoYSE9PW8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpeCBtdXN0IGJlIHNxdWFyZSAoc2l6ZTogIitPYmplY3QoSi5kKShpKSsiKSIpO3ZhciBzPTA7aWYoMDx0Lmxlbmd0aClmb3IodmFyIHU9MDt1PG87dSsrKWZvcih2YXIgYz1uW3VdLGY9blt1KzFdLGw9YztsPGY7bCsrKXt2YXIgcD1yW2xdO2lmKHA9PT11KXtzPW0ocyx0W2xdKTticmVha31pZih1PHApYnJlYWt9cmV0dXJuIHN9LERlbnNlTWF0cml4Om4sYW55OmFlLmF9KTtmdW5jdGlvbiBuKGUpe3ZhciB0PWUuX3NpemUscj1lLl9kYXRhO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmlmKDE9PT10WzBdKXJldHVybiBPYmplY3QoYWUuYSkoclswXSk7dGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpeCBtdXN0IGJlIHNxdWFyZSAoc2l6ZTogIitPYmplY3QoSi5kKSh0KSsiKSIpO2Nhc2UgMjp2YXIgbj10WzBdO2lmKG4hPT10WzFdKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaXggbXVzdCBiZSBzcXVhcmUgKHNpemU6ICIrT2JqZWN0KEouZCkodCkrIikiKTtmb3IodmFyIGk9MCxhPTA7YTxuO2ErKylpPW0oaSxyW2FdW2FdKTtyZXR1cm4gaTtkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaXggbXVzdCBiZSB0d28gZGltZW5zaW9uYWwgKHNpemU6ICIrT2JqZWN0KEouZCkodCkrIikiKX19fSksSWM9WyJ0eXBlZCIsIkluZGV4Il0scWM9T2JqZWN0KHMuYSkoImluZGV4IixJYyxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLG49ZS5JbmRleDtyZXR1cm4gdCgiaW5kZXgiLHsiLi4ubnVtYmVyIHwgc3RyaW5nIHwgQmlnTnVtYmVyIHwgUmFuZ2UgfCBBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChpZS5lKShlKT9lLnRvTnVtYmVyKCk6QXJyYXkuaXNBcnJheShlKXx8T2JqZWN0KGllLnYpKGUpP2UubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QoaWUuZSkoZSk/ZS50b051bWJlcigpOmV9KTplfSkscj1uZXcgbjtyZXR1cm4gbi5hcHBseShyLHQpLHJ9fSl9KSxCYz17ZW5kOiEwfTtmdW5jdGlvbiBrYyhlKXtyZXR1cm4oa2M9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX12YXIgemM9WyJtYXRoV2l0aFRyYW5zZm9ybSJdLERjPU9iamVjdChzLmEpKCJOb2RlIix6YyxmdW5jdGlvbihlKXt2YXIgYT1lLm1hdGhXaXRoVHJhbnNmb3JtO2Z1bmN0aW9uIHQoKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIkNvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvciIpfXJldHVybiB0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb21waWxlKCkuZXZhbHVhdGUoZSl9LHQucHJvdG90eXBlLmV2YWw9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdCh2ZS5hKSgiTWV0aG9kIE5vZGUuZXZhbCBpcyByZW5hbWVkIHRvIE5vZGUuZXZhbHVhdGUuIFBsZWFzZSB1c2UgdGhlIG5ldyBtZXRob2QgbmFtZS4iKSx0aGlzLmV2YWx1YXRlKGUpfSx0LnByb3RvdHlwZS50eXBlPSJOb2RlIix0LnByb3RvdHlwZS5pc05vZGU9ITAsdC5wcm90b3R5cGUuY29tbWVudD0iIix0LnByb3RvdHlwZS5jb21waWxlPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fY29tcGlsZShhLHt9KSxuPXt9LGk9bnVsbDtmdW5jdGlvbiB0KGUpe3ZhciB0PWV8fHt9O3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSlpZihPYmplY3QoYWUuZikoZSx0KSYmdCBpbiBCYyl0aHJvdyBuZXcgRXJyb3IoJ1Njb3BlIGNvbnRhaW5zIGFuIGlsbGVnYWwgc3ltYm9sLCAiJyt0KyciIGlzIGEgcmVzZXJ2ZWQga2V5d29yZCcpfSh0KSxyKHQsbixpKX1yZXR1cm57ZXZhbHVhdGU6dCxldmFsOmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QodmUuYSkoIk1ldGhvZCBldmFsIGlzIHJlbmFtZWQgdG8gZXZhbHVhdGUuIFBsZWFzZSB1c2UgdGhlIG5ldyBtZXRob2QuIiksdChlKX19fSx0LnByb3RvdHlwZS5fY29tcGlsZT1mdW5jdGlvbihlLHQpe3Rocm93IG5ldyBFcnJvcigiTWV0aG9kIF9jb21waWxlIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSB0eXBlICIrdGhpcy50eXBlKX0sdC5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBydW4gZm9yRWFjaCBvbiBhIE5vZGUgaW50ZXJmYWNlIil9LHQucHJvdG90eXBlLm1hcD1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBydW4gbWFwIG9uIGEgTm9kZSBpbnRlcmZhY2UiKX0sdC5wcm90b3R5cGUuX2lmTm9kZT1mdW5jdGlvbihlKXtpZighT2JqZWN0KGllLncpKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbGxiYWNrIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgTm9kZSIpO3JldHVybiBlfSx0LnByb3RvdHlwZS50cmF2ZXJzZT1mdW5jdGlvbihlKXtlKHRoaXMsbnVsbCxudWxsKSxmdW5jdGlvbiBuKGUsaSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUsdCxyKXtpKGUsdCxyKSxuKGUsaSl9KX0odGhpcyxlKX0sdC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbiBlKHQscixuKXt2YXIgaT1hKHQscixuKTtyZXR1cm4gaSE9PXQ/aTp0Lm1hcChlKX0odGhpcyxudWxsLG51bGwpfSx0LnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24obil7dmFyIGk9W107cmV0dXJuIHRoaXMudHJhdmVyc2UoZnVuY3Rpb24oZSx0LHIpe24oZSx0LHIpJiZpLnB1c2goZSl9KSxpfSx0LnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJGdW5jdGlvbiBOb2RlLmZpbmQgaXMgZGVwcmVjYXRlZC4gVXNlIE5vZGUuZmlsdGVyIGluc3RlYWQuIil9LHQucHJvdG90eXBlLm1hdGNoPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJGdW5jdGlvbiBOb2RlLm1hdGNoIGlzIGRlcHJlY2F0ZWQuIFNlZSBmdW5jdGlvbnMgTm9kZS5maWx0ZXIsIE5vZGUudHJhbnNmb3JtLCBOb2RlLnRyYXZlcnNlLiIpfSx0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGNsb25lIGEgTm9kZSBpbnRlcmZhY2UiKX0sdC5wcm90b3R5cGUuY2xvbmVEZWVwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsb25lRGVlcCgpfSl9LHQucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtyZXR1cm4hIWUmJk9iamVjdChhZS5kKSh0aGlzLGUpfSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlKXt2YXIgdDtpZihlJiYib2JqZWN0Ij09PWtjKGUpKXN3aXRjaChrYyhlLmhhbmRsZXIpKXtjYXNlIm9iamVjdCI6Y2FzZSJ1bmRlZmluZWQiOmJyZWFrO2Nhc2UiZnVuY3Rpb24iOnQ9ZS5oYW5kbGVyKHRoaXMsZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qgb3IgZnVuY3Rpb24gZXhwZWN0ZWQgYXMgY2FsbGJhY2siKX1yZXR1cm4gdm9pZCAwIT09dD90OnRoaXMuX3RvU3RyaW5nKGUpfSx0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXJpYWxpemUgb2JqZWN0OiB0b0pTT04gbm90IGltcGxlbWVudGVkIGJ5ICIrdGhpcy50eXBlKX0sdC5wcm90b3R5cGUudG9IVE1MPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKGUmJiJvYmplY3QiPT09a2MoZSkpc3dpdGNoKGtjKGUuaGFuZGxlcikpe2Nhc2Uib2JqZWN0IjpjYXNlInVuZGVmaW5lZCI6YnJlYWs7Y2FzZSJmdW5jdGlvbiI6dD1lLmhhbmRsZXIodGhpcyxlKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBvciBmdW5jdGlvbiBleHBlY3RlZCBhcyBjYWxsYmFjayIpfXJldHVybiB2b2lkIDAhPT10P3Q6dGhpcy50b0hUTUwoZSl9LHQucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3RvU3RyaW5nIG5vdCBpbXBsZW1lbnRlZCBmb3IgIit0aGlzLnR5cGUpfSx0LnByb3RvdHlwZS50b1RleD1mdW5jdGlvbihlKXt2YXIgdDtpZihlJiYib2JqZWN0Ij09PWtjKGUpKXN3aXRjaChrYyhlLmhhbmRsZXIpKXtjYXNlIm9iamVjdCI6Y2FzZSJ1bmRlZmluZWQiOmJyZWFrO2Nhc2UiZnVuY3Rpb24iOnQ9ZS5oYW5kbGVyKHRoaXMsZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qgb3IgZnVuY3Rpb24gZXhwZWN0ZWQgYXMgY2FsbGJhY2siKX1yZXR1cm4gdm9pZCAwIT09dD90OnRoaXMuX3RvVGV4KGUpfSx0LnByb3RvdHlwZS5fdG9UZXg9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJfdG9UZXggbm90IGltcGxlbWVudGVkIGZvciAiK3RoaXMudHlwZSl9LHQucHJvdG90eXBlLmdldElkZW50aWZpZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlfSx0LnByb3RvdHlwZS5nZXRDb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHR9LHtpc0NsYXNzOiEwLGlzTm9kZTohMH0pO2Z1bmN0aW9uIFJjKGUpe3JldHVybiBlJiZlLmlzSW5kZXhFcnJvcj9uZXcgUi5hKGUuaW5kZXgrMSxlLm1pbisxLHZvaWQgMCE9PWUubWF4P2UubWF4KzE6dm9pZCAwKTplfWZ1bmN0aW9uIFBjKGUpe3JldHVybihQYz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIEZjKGUpe3ZhciByPWUuc3Vic2V0O3JldHVybiBmdW5jdGlvbihlLHQpe3RyeXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiByKGUsdCk7aWYoZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuc3Vic2V0KXJldHVybiBlLnN1YnNldCh0KTtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIHIoZSx0KTtpZigib2JqZWN0IiE9PVBjKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhcHBseSBpbmRleDogdW5zdXBwb3J0ZWQgdHlwZSBvZiBvYmplY3QiKTtpZighdC5pc09iamVjdFByb3BlcnR5KCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFwcGx5IGEgbnVtZXJpYyBpbmRleCBhcyBvYmplY3QgcHJvcGVydHkiKTtyZXR1cm4gRmkoZSx0LmdldE9iamVjdFByb3BlcnR5KCkpfWNhdGNoKGUpe3Rocm93IFJjKGUpfX19dmFyIFVjPVsic3Vic2V0IiwiTm9kZSJdLExjPU9iamVjdChzLmEpKCJBY2Nlc3Nvck5vZGUiLFVjLGZ1bmN0aW9uKGUpe3ZhciB0PWUuc3Vic2V0LHI9ZS5Ob2RlLHM9RmMoe3N1YnNldDp0fSk7ZnVuY3Rpb24gbihlLHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBTeW50YXhFcnJvcigiQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yIik7aWYoIU9iamVjdChpZS53KShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgIm9iamVjdCInKTtpZighT2JqZWN0KGllLnUpKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ0luZGV4Tm9kZSBleHBlY3RlZCBmb3IgcGFyYW1ldGVyICJpbmRleCInKTt0aGlzLm9iamVjdD1lfHxudWxsLHRoaXMuaW5kZXg9dCxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibmFtZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZGV4P3RoaXMuaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpP3RoaXMuaW5kZXguZ2V0T2JqZWN0UHJvcGVydHkoKToiIjp0aGlzLm9iamVjdC5uYW1lfHwiIn0uYmluZCh0aGlzKSxzZXQ6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBhc3NpZ24gYSBuZXcgbmFtZSwgbmFtZSBpcyByZWFkLW9ubHkiKX19KX1mdW5jdGlvbiBpKGUpe3JldHVybiEoT2JqZWN0KGllLmEpKGUpfHxPYmplY3QoaWUuYykoZSl8fE9iamVjdChpZS5sKShlKXx8T2JqZWN0KGllLnIpKGUpfHxPYmplY3QoaWUuQSkoZSl8fE9iamVjdChpZS5DKShlKXx8T2JqZWN0KGllLkopKGUpKX1yZXR1cm4obi5wcm90b3R5cGU9bmV3IHIpLnR5cGU9IkFjY2Vzc29yTm9kZSIsbi5wcm90b3R5cGUuaXNBY2Nlc3Nvck5vZGU9ITAsbi5wcm90b3R5cGUuX2NvbXBpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgYT10aGlzLm9iamVjdC5fY29tcGlsZShlLHQpLG89dGhpcy5pbmRleC5fY29tcGlsZShlLHQpO2lmKHRoaXMuaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpKXt2YXIgbj10aGlzLmluZGV4LmdldE9iamVjdFByb3BlcnR5KCk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gRmkoYShlLHQsciksbil9fXJldHVybiBmdW5jdGlvbihlLHQscil7dmFyIG49YShlLHQsciksaT1vKGUsdCxuKTtyZXR1cm4gcyhuLGkpfX0sbi5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXtlKHRoaXMub2JqZWN0LCJvYmplY3QiLHRoaXMpLGUodGhpcy5pbmRleCwiaW5kZXgiLHRoaXMpfSxuLnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBuKHRoaXMuX2lmTm9kZShlKHRoaXMub2JqZWN0LCJvYmplY3QiLHRoaXMpKSx0aGlzLl9pZk5vZGUoZSh0aGlzLmluZGV4LCJpbmRleCIsdGhpcykpKX0sbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy5vYmplY3QsdGhpcy5pbmRleCl9LG4ucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm9iamVjdC50b1N0cmluZyhlKTtyZXR1cm4gaSh0aGlzLm9iamVjdCkmJih0PSIoIit0KyIpIiksdCt0aGlzLmluZGV4LnRvU3RyaW5nKGUpfSxuLnByb3RvdHlwZS50b0hUTUw9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vYmplY3QudG9IVE1MKGUpO3JldHVybiBpKHRoaXMub2JqZWN0KSYmKHQ9JzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPig8L3NwYW4+Jyt0Kyc8c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzIj4pPC9zcGFuPicpLHQrdGhpcy5pbmRleC50b0hUTUwoZSl9LG4ucHJvdG90eXBlLl90b1RleD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm9iamVjdC50b1RleChlKTtyZXR1cm4gaSh0aGlzLm9iamVjdCkmJih0PSJcXGxlZnQoJyArIG9iamVjdCArICdcXHJpZ2h0KSIpLHQrdGhpcy5pbmRleC50b1RleChlKX0sbi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue21hdGhqczoiQWNjZXNzb3JOb2RlIixvYmplY3Q6dGhpcy5vYmplY3QsaW5kZXg6dGhpcy5pbmRleH19LG4uZnJvbUpTT049ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBuKGUub2JqZWN0LGUuaW5kZXgpfSxufSx7aXNDbGFzczohMCxpc05vZGU6ITB9KSxIYz1bIk5vZGUiXSwkYz1PYmplY3Qocy5hKSgiQXJyYXlOb2RlIixIYyxmdW5jdGlvbihlKXt2YXIgdD1lLk5vZGU7ZnVuY3Rpb24gbihlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIkNvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvciIpO2lmKHRoaXMuaXRlbXM9ZXx8W10sIUFycmF5LmlzQXJyYXkodGhpcy5pdGVtcyl8fCF0aGlzLml0ZW1zLmV2ZXJ5KGllLncpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFycmF5IGNvbnRhaW5pbmcgTm9kZXMgZXhwZWN0ZWQiKTtmdW5jdGlvbiB0KCl7dGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eSBgQXJyYXlOb2RlLm5vZGVzYCBpcyBkZXByZWNhdGVkLCB1c2UgYEFycmF5Tm9kZS5pdGVtc2AgaW5zdGVhZCIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJub2RlcyIse2dldDp0LHNldDp0fSl9cmV0dXJuKG4ucHJvdG90eXBlPW5ldyB0KS50eXBlPSJBcnJheU5vZGUiLG4ucHJvdG90eXBlLmlzQXJyYXlOb2RlPSEwLG4ucHJvdG90eXBlLl9jb21waWxlPWZ1bmN0aW9uKHQscil7dmFyIGU9T2JqZWN0KEkubSkodGhpcy5pdGVtcyxmdW5jdGlvbihlKXtyZXR1cm4gZS5fY29tcGlsZSh0LHIpfSk7aWYoIkFycmF5Ij09PXQuY29uZmlnLm1hdHJpeClyZXR1cm4gZnVuY3Rpb24odCxyLG4pe3JldHVybiBPYmplY3QoSS5tKShlLGZ1bmN0aW9uKGUpe3JldHVybiBlKHQscixuKX0pfTt2YXIgaT10Lm1hdHJpeDtyZXR1cm4gZnVuY3Rpb24odCxyLG4pe3JldHVybiBpKE9iamVjdChJLm0pKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGUodCxyLG4pfSkpfX0sbi5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuaXRlbXMubGVuZ3RoO3QrKyl7ZSh0aGlzLml0ZW1zW3RdLCJpdGVtc1siK3QrIl0iLHRoaXMpfX0sbi5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjx0aGlzLml0ZW1zLmxlbmd0aDtyKyspdFtyXT10aGlzLl9pZk5vZGUoZSh0aGlzLml0ZW1zW3JdLCJpdGVtc1siK3IrIl0iLHRoaXMpKTtyZXR1cm4gbmV3IG4odCl9LG4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMuaXRlbXMuc2xpY2UoMCkpfSxuLnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIlsiK3RoaXMuaXRlbXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvU3RyaW5nKHQpfSkuam9pbigiLCAiKSsiXSJ9LG4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnttYXRoanM6IkFycmF5Tm9kZSIsaXRlbXM6dGhpcy5pdGVtc319LG4uZnJvbUpTT049ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBuKGUuaXRlbXMpfSxuLnByb3RvdHlwZS50b0hUTUw9ZnVuY3Rpb24odCl7cmV0dXJuJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtc3F1YXJlLXBhcmVudGhlc2lzIj5bPC9zcGFuPicrdGhpcy5pdGVtcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9IVE1MKHQpfSkuam9pbignPHNwYW4gY2xhc3M9Im1hdGgtc2VwYXJhdG9yIj4sPC9zcGFuPicpKyc8c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXNxdWFyZS1wYXJlbnRoZXNpcyI+XTwvc3Bhbj4nfSxuLnByb3RvdHlwZS5fdG9UZXg9ZnVuY3Rpb24odCl7dmFyIHI9IlxcYmVnaW57Ym1hdHJpeH0iO3JldHVybiB0aGlzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5pdGVtcz9yKz1lLml0ZW1zLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS50b1RleCh0KX0pLmpvaW4oIiYiKTpyKz1lLnRvVGV4KHQpLHIrPSJcXFxcIn0pLHIrPSJcXGVuZHtibWF0cml4fSJ9LG59LHtpc0NsYXNzOiEwLGlzTm9kZTohMH0pO2Z1bmN0aW9uIEdjKGUpe3JldHVybihHYz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfXZhciBaYz1be0Fzc2lnbm1lbnROb2RlOnt9LEZ1bmN0aW9uQXNzaWdubWVudE5vZGU6e319LHtDb25kaXRpb25hbE5vZGU6e2xhdGV4TGVmdFBhcmVuczohMSxsYXRleFJpZ2h0UGFyZW5zOiExLGxhdGV4UGFyZW5zOiExfX0seyJPcGVyYXRvck5vZGU6b3IiOnthc3NvY2lhdGl2aXR5OiJsZWZ0Iixhc3NvY2lhdGl2ZVdpdGg6W119fSx7Ik9wZXJhdG9yTm9kZTp4b3IiOnthc3NvY2lhdGl2aXR5OiJsZWZ0Iixhc3NvY2lhdGl2ZVdpdGg6W119fSx7Ik9wZXJhdG9yTm9kZTphbmQiOnthc3NvY2lhdGl2aXR5OiJsZWZ0Iixhc3NvY2lhdGl2ZVdpdGg6W119fSx7Ik9wZXJhdG9yTm9kZTpiaXRPciI6e2Fzc29jaWF0aXZpdHk6ImxlZnQiLGFzc29jaWF0aXZlV2l0aDpbXX19LHsiT3BlcmF0b3JOb2RlOmJpdFhvciI6e2Fzc29jaWF0aXZpdHk6ImxlZnQiLGFzc29jaWF0aXZlV2l0aDpbXX19LHsiT3BlcmF0b3JOb2RlOmJpdEFuZCI6e2Fzc29jaWF0aXZpdHk6ImxlZnQiLGFzc29jaWF0aXZlV2l0aDpbXX19LHsiT3BlcmF0b3JOb2RlOmVxdWFsIjp7YXNzb2NpYXRpdml0eToibGVmdCIsYXNzb2NpYXRpdmVXaXRoOltdfSwiT3BlcmF0b3JOb2RlOnVuZXF1YWwiOnthc3NvY2lhdGl2aXR5OiJsZWZ0Iixhc3NvY2lhdGl2ZVdpdGg6W119LCJPcGVyYXRvck5vZGU6c21hbGxlciI6e2Fzc29jaWF0aXZpdHk6ImxlZnQiLGFzc29jaWF0aXZlV2l0aDpbXX0sIk9wZXJhdG9yTm9kZTpsYXJnZXIiOnthc3NvY2lhdGl2aXR5OiJsZWZ0Iixhc3NvY2lhdGl2ZVdpdGg6W119LCJPcGVyYXRvck5vZGU6c21hbGxlckVxIjp7YXNzb2NpYXRpdml0eToibGVmdCIsYXNzb2NpYXRpdmVXaXRoOltdfSwiT3BlcmF0b3JOb2RlOmxhcmdlckVxIjp7YXNzb2NpYXRpdml0eToibGVmdCIsYXNzb2NpYXRpdmVXaXRoOltdfSxSZWxhdGlvbmFsTm9kZTp7YXNzb2NpYXRpdml0eToibGVmdCIsYXNzb2NpYXRpdmVXaXRoOltdfX0seyJPcGVyYXRvck5vZGU6bGVmdFNoaWZ0Ijp7YXNzb2NpYXRpdml0eToibGVmdCIsYXNzb2NpYXRpdmVXaXRoOltdfSwiT3BlcmF0b3JOb2RlOnJpZ2h0QXJpdGhTaGlmdCI6e2Fzc29jaWF0aXZpdHk6ImxlZnQiLGFzc29jaWF0aXZlV2l0aDpbXX0sIk9wZXJhdG9yTm9kZTpyaWdodExvZ1NoaWZ0Ijp7YXNzb2NpYXRpdml0eToibGVmdCIsYXNzb2NpYXRpdmVXaXRoOltdfX0seyJPcGVyYXRvck5vZGU6dG8iOnthc3NvY2lhdGl2aXR5OiJsZWZ0Iixhc3NvY2lhdGl2ZVdpdGg6W119fSx7UmFuZ2VOb2RlOnt9fSx7Ik9wZXJhdG9yTm9kZTphZGQiOnthc3NvY2lhdGl2aXR5OiJsZWZ0Iixhc3NvY2lhdGl2ZVdpdGg6WyJPcGVyYXRvck5vZGU6YWRkIiwiT3BlcmF0b3JOb2RlOnN1YnRyYWN0Il19LCJPcGVyYXRvck5vZGU6c3VidHJhY3QiOnthc3NvY2lhdGl2aXR5OiJsZWZ0Iixhc3NvY2lhdGl2ZVdpdGg6W119fSx7Ik9wZXJhdG9yTm9kZTptdWx0aXBseSI6e2Fzc29jaWF0aXZpdHk6ImxlZnQiLGFzc29jaWF0aXZlV2l0aDpbIk9wZXJhdG9yTm9kZTptdWx0aXBseSIsIk9wZXJhdG9yTm9kZTpkaXZpZGUiLCJPcGVyYXRvcjpkb3RNdWx0aXBseSIsIk9wZXJhdG9yOmRvdERpdmlkZSJdfSwiT3BlcmF0b3JOb2RlOmRpdmlkZSI6e2Fzc29jaWF0aXZpdHk6ImxlZnQiLGFzc29jaWF0aXZlV2l0aDpbXSxsYXRleExlZnRQYXJlbnM6ITEsbGF0ZXhSaWdodFBhcmVuczohMSxsYXRleFBhcmVuczohMX0sIk9wZXJhdG9yTm9kZTpkb3RNdWx0aXBseSI6e2Fzc29jaWF0aXZpdHk6ImxlZnQiLGFzc29jaWF0aXZlV2l0aDpbIk9wZXJhdG9yTm9kZTptdWx0aXBseSIsIk9wZXJhdG9yTm9kZTpkaXZpZGUiLCJPcGVyYXRvck5vZGU6ZG90TXVsdGlwbHkiLCJPcGVyYXRvck5vZGU6ZG9EaXZpZGUiXX0sIk9wZXJhdG9yTm9kZTpkb3REaXZpZGUiOnthc3NvY2lhdGl2aXR5OiJsZWZ0Iixhc3NvY2lhdGl2ZVdpdGg6W119LCJPcGVyYXRvck5vZGU6bW9kIjp7YXNzb2NpYXRpdml0eToibGVmdCIsYXNzb2NpYXRpdmVXaXRoOltdfX0seyJPcGVyYXRvck5vZGU6dW5hcnlQbHVzIjp7YXNzb2NpYXRpdml0eToicmlnaHQifSwiT3BlcmF0b3JOb2RlOnVuYXJ5TWludXMiOnthc3NvY2lhdGl2aXR5OiJyaWdodCJ9LCJPcGVyYXRvck5vZGU6Yml0Tm90Ijp7YXNzb2NpYXRpdml0eToicmlnaHQifSwiT3BlcmF0b3JOb2RlOm5vdCI6e2Fzc29jaWF0aXZpdHk6InJpZ2h0In19LHsiT3BlcmF0b3JOb2RlOnBvdyI6e2Fzc29jaWF0aXZpdHk6InJpZ2h0Iixhc3NvY2lhdGl2ZVdpdGg6W10sbGF0ZXhSaWdodFBhcmVuczohMX0sIk9wZXJhdG9yTm9kZTpkb3RQb3ciOnthc3NvY2lhdGl2aXR5OiJyaWdodCIsYXNzb2NpYXRpdmVXaXRoOltdfX0seyJPcGVyYXRvck5vZGU6ZmFjdG9yaWFsIjp7YXNzb2NpYXRpdml0eToibGVmdCJ9fSx7Ik9wZXJhdG9yTm9kZTp0cmFuc3Bvc2UiOnthc3NvY2lhdGl2aXR5OiJsZWZ0In19XTtmdW5jdGlvbiBWYyhlLHQpe3ZhciByPWU7ImtlZXAiIT09dCYmKHI9ZS5nZXRDb250ZW50KCkpO2Zvcih2YXIgbj1yLmdldElkZW50aWZpZXIoKSxpPTA7aTxaYy5sZW5ndGg7aSsrKWlmKG4gaW4gWmNbaV0pcmV0dXJuIGk7cmV0dXJuIG51bGx9ZnVuY3Rpb24gSmMoZSx0KXt2YXIgcj1lOyJrZWVwIiE9PXQmJihyPWUuZ2V0Q29udGVudCgpKTt2YXIgbj1yLmdldElkZW50aWZpZXIoKSxpPVZjKHIsdCk7aWYobnVsbD09PWkpcmV0dXJuIG51bGw7dmFyIGE9WmNbaV1bbl07aWYoT2JqZWN0KGFlLmYpKGEsImFzc29jaWF0aXZpdHkiKSl7aWYoImxlZnQiPT09YS5hc3NvY2lhdGl2aXR5KXJldHVybiJsZWZ0IjtpZigicmlnaHQiPT09YS5hc3NvY2lhdGl2aXR5KXJldHVybiJyaWdodCI7dGhyb3cgRXJyb3IoIiciK24rIicgaGFzIHRoZSBpbnZhbGlkIGFzc29jaWF0aXZpdHkgJyIrYS5hc3NvY2lhdGl2aXR5KyInLiIpfXJldHVybiBudWxsfWZ1bmN0aW9uIFdjKGUsdCxyKXt2YXIgbj0ia2VlcCIhPT1yP2UuZ2V0Q29udGVudCgpOmUsaT0ia2VlcCIhPT1yP2UuZ2V0Q29udGVudCgpOnQsYT1uLmdldElkZW50aWZpZXIoKSxvPWkuZ2V0SWRlbnRpZmllcigpLHM9VmMobixyKTtpZihudWxsPT09cylyZXR1cm4gbnVsbDt2YXIgdT1aY1tzXVthXTtpZihPYmplY3QoYWUuZikodSwiYXNzb2NpYXRpdmVXaXRoIikmJnUuYXNzb2NpYXRpdmVXaXRoIGluc3RhbmNlb2YgQXJyYXkpe2Zvcih2YXIgYz0wO2M8dS5hc3NvY2lhdGl2ZVdpdGgubGVuZ3RoO2MrKylpZih1LmFzc29jaWF0aXZlV2l0aFtjXT09PW8pcmV0dXJuITA7cmV0dXJuITF9cmV0dXJuIG51bGx9dmFyIFljPVsic3Vic2V0IiwiP21hdHJpeCIsIk5vZGUiXSxYYz1PYmplY3Qocy5hKSgiQXNzaWdubWVudE5vZGUiLFljLGZ1bmN0aW9uKGUpe3ZhciB0LG4saSxyPWUuc3Vic2V0LGE9ZS5tYXRyaXgsbz1lLk5vZGUsbT1GYyh7c3Vic2V0OnJ9KSxoPShuPSh0PXtzdWJzZXQ6cixtYXRyaXg6YX0pLnN1YnNldCxpPXQubWF0cml4LGZ1bmN0aW9uKGUsdCxyKXt0cnl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gaShlKS5zdWJzZXQodCxyKS52YWx1ZU9mKCk7aWYoZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuc3Vic2V0KXJldHVybiBlLnN1YnNldCh0LHIpO2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gbihlLHQscik7aWYoIm9iamVjdCIhPT1HYyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYXBwbHkgaW5kZXg6IHVuc3VwcG9ydGVkIHR5cGUgb2Ygb2JqZWN0Iik7aWYoIXQuaXNPYmplY3RQcm9wZXJ0eSgpKXRocm93IFR5cGVFcnJvcigiQ2Fubm90IGFwcGx5IGEgbnVtZXJpYyBpbmRleCBhcyBvYmplY3QgcHJvcGVydHkiKTtyZXR1cm4gVWkoZSx0LmdldE9iamVjdFByb3BlcnR5KCksciksZX1jYXRjaChlKXt0aHJvdyBSYyhlKX19KTtmdW5jdGlvbiBzKGUsdCxyKXtpZighKHRoaXMgaW5zdGFuY2VvZiBzKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIkNvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvciIpO2lmKHRoaXMub2JqZWN0PWUsdGhpcy5pbmRleD1yP3Q6bnVsbCx0aGlzLnZhbHVlPXJ8fHQsIU9iamVjdChpZS5KKShlKSYmIU9iamVjdChpZS5hKShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdTeW1ib2xOb2RlIG9yIEFjY2Vzc29yTm9kZSBleHBlY3RlZCBhcyAib2JqZWN0IicpO2lmKE9iamVjdChpZS5KKShlKSYmImVuZCI9PT1lLm5hbWUpdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYXNzaWduIHRvIHN5bWJvbCAiZW5kIicpO2lmKHRoaXMuaW5kZXgmJiFPYmplY3QoaWUudSkodGhpcy5pbmRleCkpdGhyb3cgbmV3IFR5cGVFcnJvcignSW5kZXhOb2RlIGV4cGVjdGVkIGFzICJpbmRleCInKTtpZighT2JqZWN0KGllLncpKHRoaXMudmFsdWUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQgYXMgInZhbHVlIicpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5kZXg/dGhpcy5pbmRleC5pc09iamVjdFByb3BlcnR5KCk/dGhpcy5pbmRleC5nZXRPYmplY3RQcm9wZXJ0eSgpOiIiOnRoaXMub2JqZWN0Lm5hbWV8fCIifS5iaW5kKHRoaXMpLHNldDpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGFzc2lnbiBhIG5ldyBuYW1lLCBuYW1lIGlzIHJlYWQtb25seSIpfX0pfWZ1bmN0aW9uIHUoZSx0KXt2YXIgcj1WYyhlLHQ9dHx8ImtlZXAiKSxuPVZjKGUudmFsdWUsdCk7cmV0dXJuImFsbCI9PT10fHxudWxsIT09biYmbjw9cn1yZXR1cm4ocy5wcm90b3R5cGU9bmV3IG8pLnR5cGU9IkFzc2lnbm1lbnROb2RlIixzLnByb3RvdHlwZS5pc0Fzc2lnbm1lbnROb2RlPSEwLHMucHJvdG90eXBlLl9jb21waWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG89dGhpcy5vYmplY3QuX2NvbXBpbGUoZSx0KSx1PXRoaXMuaW5kZXg/dGhpcy5pbmRleC5fY29tcGlsZShlLHQpOm51bGwsYz10aGlzLnZhbHVlLl9jb21waWxlKGUsdCkscz10aGlzLm9iamVjdC5uYW1lO2lmKHRoaXMuaW5kZXgpe2lmKHRoaXMuaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpKXt2YXIgYT10aGlzLmluZGV4LmdldE9iamVjdFByb3BlcnR5KCk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1vKGUsdCxyKSxpPWMoZSx0LHIpO3JldHVybiBVaShuLGEsaSl9fWlmKE9iamVjdChpZS5KKSh0aGlzLm9iamVjdCkpcmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1vKGUsdCxyKSxpPWMoZSx0LHIpLGE9dShlLHQsbik7cmV0dXJuIFVpKGUscyxoKG4sYSxpKSksaX07dmFyIGY9dGhpcy5vYmplY3Qub2JqZWN0Ll9jb21waWxlKGUsdCk7aWYodGhpcy5vYmplY3QuaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpKXt2YXIgbD10aGlzLm9iamVjdC5pbmRleC5nZXRPYmplY3RQcm9wZXJ0eSgpO3JldHVybiBmdW5jdGlvbihlLHQscil7dmFyIG49ZihlLHQsciksaT1GaShuLGwpLGE9dShlLHQsaSksbz1jKGUsdCxyKTtyZXR1cm4gVWkobixsLGgoaSxhLG8pKSxvfX12YXIgcD10aGlzLm9iamVjdC5pbmRleC5fY29tcGlsZShlLHQpO3JldHVybiBmdW5jdGlvbihlLHQscil7dmFyIG49ZihlLHQsciksaT1wKGUsdCxuKSxhPW0obixpKSxvPXUoZSx0LGEpLHM9YyhlLHQscik7cmV0dXJuIGgobixpLGgoYSxvLHMpKSxzfX1pZighT2JqZWN0KGllLkopKHRoaXMub2JqZWN0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2xOb2RlIGV4cGVjdGVkIGFzIG9iamVjdCIpO3JldHVybiBmdW5jdGlvbihlLHQscil7cmV0dXJuIFVpKGUscyxjKGUsdCxyKSl9fSxzLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUpe2UodGhpcy5vYmplY3QsIm9iamVjdCIsdGhpcyksdGhpcy5pbmRleCYmZSh0aGlzLmluZGV4LCJpbmRleCIsdGhpcyksZSh0aGlzLnZhbHVlLCJ2YWx1ZSIsdGhpcyl9LHMucHJvdG90eXBlLm1hcD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHModGhpcy5faWZOb2RlKGUodGhpcy5vYmplY3QsIm9iamVjdCIsdGhpcykpLHRoaXMuaW5kZXg/dGhpcy5faWZOb2RlKGUodGhpcy5pbmRleCwiaW5kZXgiLHRoaXMpKTpudWxsLHRoaXMuX2lmTm9kZShlKHRoaXMudmFsdWUsInZhbHVlIix0aGlzKSkpfSxzLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgcyh0aGlzLm9iamVjdCx0aGlzLmluZGV4LHRoaXMudmFsdWUpfSxzLnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vYmplY3QudG9TdHJpbmcoZSkscj10aGlzLmluZGV4P3RoaXMuaW5kZXgudG9TdHJpbmcoZSk6IiIsbj10aGlzLnZhbHVlLnRvU3RyaW5nKGUpO3JldHVybiB1KHRoaXMsZSYmZS5wYXJlbnRoZXNpcykmJihuPSIoIituKyIpIiksdCtyKyIgPSAiK259LHMucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnttYXRoanM6IkFzc2lnbm1lbnROb2RlIixvYmplY3Q6dGhpcy5vYmplY3QsaW5kZXg6dGhpcy5pbmRleCx2YWx1ZTp0aGlzLnZhbHVlfX0scy5mcm9tSlNPTj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHMoZS5vYmplY3QsZS5pbmRleCxlLnZhbHVlKX0scy5wcm90b3R5cGUudG9IVE1MPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub2JqZWN0LnRvSFRNTChlKSxyPXRoaXMuaW5kZXg/dGhpcy5pbmRleC50b0hUTUwoZSk6IiIsbj10aGlzLnZhbHVlLnRvSFRNTChlKTtyZXR1cm4gdSh0aGlzLGUmJmUucGFyZW50aGVzaXMpJiYobj0nPHNwYW4gY2xhc3M9Im1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KDwvc3Bhbj4nK24rJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmFudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPik8L3NwYW4+JyksdCtyKyc8c3BhbiBjbGFzcz0ibWF0aC1vcGVyYXRvciBtYXRoLWFzc2lnbm1lbnQtb3BlcmF0b3IgbWF0aC12YXJpYWJsZS1hc3NpZ25tZW50LW9wZXJhdG9yIG1hdGgtYmluYXJ5LW9wZXJhdG9yIj49PC9zcGFuPicrbn0scy5wcm90b3R5cGUuX3RvVGV4PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub2JqZWN0LnRvVGV4KGUpLHI9dGhpcy5pbmRleD90aGlzLmluZGV4LnRvVGV4KGUpOiIiLG49dGhpcy52YWx1ZS50b1RleChlKTtyZXR1cm4gdSh0aGlzLGUmJmUucGFyZW50aGVzaXMpJiYobj0iXFxsZWZ0KCIuY29uY2F0KG4sIlxccmlnaHQpIikpLHQrcisiOj0iK259LHN9LHtpc0NsYXNzOiEwLGlzTm9kZTohMH0pLFFjPVsiUmVzdWx0U2V0IiwiTm9kZSJdLEtjPU9iamVjdChzLmEpKCJCbG9ja05vZGUiLFFjLGZ1bmN0aW9uKGUpe3ZhciBvPWUuUmVzdWx0U2V0LHQ9ZS5Ob2RlO2Z1bmN0aW9uIGEoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgYSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3IiKTtpZighQXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgRXJyb3IoIkFycmF5IGV4cGVjdGVkIik7dGhpcy5ibG9ja3M9ZS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5ub2RlLHI9IWV8fHZvaWQgMD09PWUudmlzaWJsZXx8ZS52aXNpYmxlO2lmKCFPYmplY3QoaWUudykodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvcGVydHkgIm5vZGUiIG11c3QgYmUgYSBOb2RlJyk7aWYoImJvb2xlYW4iIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9wZXJ0eSAidmlzaWJsZSIgbXVzdCBiZSBhIGJvb2xlYW4nKTtyZXR1cm57bm9kZTp0LHZpc2libGU6cn19KX1yZXR1cm4oYS5wcm90b3R5cGU9bmV3IHQpLnR5cGU9IkJsb2NrTm9kZSIsYS5wcm90b3R5cGUuaXNCbG9ja05vZGU9ITAsYS5wcm90b3R5cGUuX2NvbXBpbGU9ZnVuY3Rpb24odCxyKXt2YXIgZT1PYmplY3QoSS5tKSh0aGlzLmJsb2NrcyxmdW5jdGlvbihlKXtyZXR1cm57ZXZhbHVhdGU6ZS5ub2RlLl9jb21waWxlKHQsciksdmlzaWJsZTplLnZpc2libGV9fSk7cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXt2YXIgYT1bXTtyZXR1cm4gT2JqZWN0KEkuZikoZSxmdW5jdGlvbihlKXt2YXIgdD1lLmV2YWx1YXRlKHIsbixpKTtlLnZpc2libGUmJmEucHVzaCh0KX0pLG5ldyBvKGEpfX0sYS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuYmxvY2tzLmxlbmd0aDt0KyspZSh0aGlzLmJsb2Nrc1t0XS5ub2RlLCJibG9ja3NbIit0KyJdLm5vZGUiLHRoaXMpfSxhLnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPHRoaXMuYmxvY2tzLmxlbmd0aDtyKyspe3ZhciBuPXRoaXMuYmxvY2tzW3JdLGk9dGhpcy5faWZOb2RlKGUobi5ub2RlLCJibG9ja3NbIityKyJdLm5vZGUiLHRoaXMpKTt0W3JdPXtub2RlOmksdmlzaWJsZTpuLnZpc2libGV9fXJldHVybiBuZXcgYSh0KX0sYS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGEodGhpcy5ibG9ja3MubWFwKGZ1bmN0aW9uKGUpe3JldHVybntub2RlOmUubm9kZSx2aXNpYmxlOmUudmlzaWJsZX19KSl9LGEucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5ibG9ja3MubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGUudG9TdHJpbmcodCkrKGUudmlzaWJsZT8iIjoiOyIpfSkuam9pbigiXG4iKX0sYS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue21hdGhqczoiQmxvY2tOb2RlIixibG9ja3M6dGhpcy5ibG9ja3N9fSxhLmZyb21KU09OPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYShlLmJsb2Nrcyl9LGEucHJvdG90eXBlLnRvSFRNTD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5ibG9ja3MubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGUudG9IVE1MKHQpKyhlLnZpc2libGU/IiI6JzxzcGFuIGNsYXNzPSJtYXRoLXNlcGFyYXRvciI+Ozwvc3Bhbj4nKX0pLmpvaW4oJzxzcGFuIGNsYXNzPSJtYXRoLXNlcGFyYXRvciI+PGJyIC8+PC9zcGFuPicpfSxhLnByb3RvdHlwZS5fdG9UZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYmxvY2tzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlLnRvVGV4KHQpKyhlLnZpc2libGU/IiI6IjsiKX0pLmpvaW4oIlxcO1xcO1xuIil9LGF9LHtpc0NsYXNzOiEwLGlzTm9kZTohMH0pLGVmPVsiTm9kZSJdLHRmPU9iamVjdChzLmEpKCJDb25kaXRpb25hbE5vZGUiLGVmLGZ1bmN0aW9uKGUpe3ZhciB0PWUuTm9kZTtmdW5jdGlvbiBuKGUsdCxyKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIkNvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvciIpO2lmKCFPYmplY3QoaWUudykoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyIGNvbmRpdGlvbiBtdXN0IGJlIGEgTm9kZSIpO2lmKCFPYmplY3QoaWUudykodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyIHRydWVFeHByIG11c3QgYmUgYSBOb2RlIik7aWYoIU9iamVjdChpZS53KShyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgZmFsc2VFeHByIG11c3QgYmUgYSBOb2RlIik7dGhpcy5jb25kaXRpb249ZSx0aGlzLnRydWVFeHByPXQsdGhpcy5mYWxzZUV4cHI9cn1yZXR1cm4obi5wcm90b3R5cGU9bmV3IHQpLnR5cGU9IkNvbmRpdGlvbmFsTm9kZSIsbi5wcm90b3R5cGUuaXNDb25kaXRpb25hbE5vZGU9ITAsbi5wcm90b3R5cGUuX2NvbXBpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNvbmRpdGlvbi5fY29tcGlsZShlLHQpLGk9dGhpcy50cnVlRXhwci5fY29tcGlsZShlLHQpLGE9dGhpcy5mYWxzZUV4cHIuX2NvbXBpbGUoZSx0KTtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3JldHVybihmdW5jdGlvbihlKXtpZigibnVtYmVyIj09dHlwZW9mIGV8fCJib29sZWFuIj09dHlwZW9mIGV8fCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZTtpZihlKXtpZihPYmplY3QoaWUuZSkoZSkpcmV0dXJuIWUuaXNaZXJvKCk7aWYoT2JqZWN0KGllLmopKGUpKXJldHVybiBlLnJlfHxlLmltO2lmKE9iamVjdChpZS5MKShlKSlyZXR1cm4gZS52YWx1ZX1pZihudWxsIT1lKXRocm93IG5ldyBUeXBlRXJyb3IoJ1Vuc3VwcG9ydGVkIHR5cGUgb2YgY29uZGl0aW9uICInK09iamVjdChpZS5NKShlKSsnIicpO3JldHVybn0obihlLHQscikpP2k6YSkoZSx0LHIpfX0sbi5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXtlKHRoaXMuY29uZGl0aW9uLCJjb25kaXRpb24iLHRoaXMpLGUodGhpcy50cnVlRXhwciwidHJ1ZUV4cHIiLHRoaXMpLGUodGhpcy5mYWxzZUV4cHIsImZhbHNlRXhwciIsdGhpcyl9LG4ucHJvdG90eXBlLm1hcD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IG4odGhpcy5faWZOb2RlKGUodGhpcy5jb25kaXRpb24sImNvbmRpdGlvbiIsdGhpcykpLHRoaXMuX2lmTm9kZShlKHRoaXMudHJ1ZUV4cHIsInRydWVFeHByIix0aGlzKSksdGhpcy5faWZOb2RlKGUodGhpcy5mYWxzZUV4cHIsImZhbHNlRXhwciIsdGhpcykpKX0sbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy5jb25kaXRpb24sdGhpcy50cnVlRXhwcix0aGlzLmZhbHNlRXhwcil9LG4ucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLnBhcmVudGhlc2lzP2UucGFyZW50aGVzaXM6ImtlZXAiLHI9VmModGhpcyx0KSxuPXRoaXMuY29uZGl0aW9uLnRvU3RyaW5nKGUpLGk9VmModGhpcy5jb25kaXRpb24sdCk7KCJhbGwiPT09dHx8Ik9wZXJhdG9yTm9kZSI9PT10aGlzLmNvbmRpdGlvbi50eXBlfHxudWxsIT09aSYmaTw9cikmJihuPSIoIituKyIpIik7dmFyIGE9dGhpcy50cnVlRXhwci50b1N0cmluZyhlKSxvPVZjKHRoaXMudHJ1ZUV4cHIsdCk7KCJhbGwiPT09dHx8Ik9wZXJhdG9yTm9kZSI9PT10aGlzLnRydWVFeHByLnR5cGV8fG51bGwhPT1vJiZvPD1yKSYmKGE9IigiK2ErIikiKTt2YXIgcz10aGlzLmZhbHNlRXhwci50b1N0cmluZyhlKSx1PVZjKHRoaXMuZmFsc2VFeHByLHQpO3JldHVybigiYWxsIj09PXR8fCJPcGVyYXRvck5vZGUiPT09dGhpcy5mYWxzZUV4cHIudHlwZXx8bnVsbCE9PXUmJnU8PXIpJiYocz0iKCIrcysiKSIpLG4rIiA/ICIrYSsiIDogIitzfSxuLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWF0aGpzOiJDb25kaXRpb25hbE5vZGUiLGNvbmRpdGlvbjp0aGlzLmNvbmRpdGlvbix0cnVlRXhwcjp0aGlzLnRydWVFeHByLGZhbHNlRXhwcjp0aGlzLmZhbHNlRXhwcn19LG4uZnJvbUpTT049ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBuKGUuY29uZGl0aW9uLGUudHJ1ZUV4cHIsZS5mYWxzZUV4cHIpfSxuLnByb3RvdHlwZS50b0hUTUw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5wYXJlbnRoZXNpcz9lLnBhcmVudGhlc2lzOiJrZWVwIixyPVZjKHRoaXMsdCksbj10aGlzLmNvbmRpdGlvbi50b0hUTUwoZSksaT1WYyh0aGlzLmNvbmRpdGlvbix0KTsoImFsbCI9PT10fHwiT3BlcmF0b3JOb2RlIj09PXRoaXMuY29uZGl0aW9uLnR5cGV8fG51bGwhPT1pJiZpPD1yKSYmKG49JzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPig8L3NwYW4+JytuKyc8c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzIj4pPC9zcGFuPicpO3ZhciBhPXRoaXMudHJ1ZUV4cHIudG9IVE1MKGUpLG89VmModGhpcy50cnVlRXhwcix0KTsoImFsbCI9PT10fHwiT3BlcmF0b3JOb2RlIj09PXRoaXMudHJ1ZUV4cHIudHlwZXx8bnVsbCE9PW8mJm88PXIpJiYoYT0nPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KDwvc3Bhbj4nK2ErJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPik8L3NwYW4+Jyk7dmFyIHM9dGhpcy5mYWxzZUV4cHIudG9IVE1MKGUpLHU9VmModGhpcy5mYWxzZUV4cHIsdCk7cmV0dXJuKCJhbGwiPT09dHx8Ik9wZXJhdG9yTm9kZSI9PT10aGlzLmZhbHNlRXhwci50eXBlfHxudWxsIT09dSYmdTw9cikmJihzPSc8c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzIj4oPC9zcGFuPicrcysnPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KTwvc3Bhbj4nKSxuKyc8c3BhbiBjbGFzcz0ibWF0aC1vcGVyYXRvciBtYXRoLWNvbmRpdGlvbmFsLW9wZXJhdG9yIj4/PC9zcGFuPicrYSsnPHNwYW4gY2xhc3M9Im1hdGgtb3BlcmF0b3IgbWF0aC1jb25kaXRpb25hbC1vcGVyYXRvciI+Ojwvc3Bhbj4nK3N9LG4ucHJvdG90eXBlLl90b1RleD1mdW5jdGlvbihlKXtyZXR1cm4iXFxiZWdpbntjYXNlc30geyIrdGhpcy50cnVlRXhwci50b1RleChlKSsifSwgJlxccXVhZHtcXHRleHR7aWYgfVxcOyIrdGhpcy5jb25kaXRpb24udG9UZXgoZSkrIn1cXFxceyIrdGhpcy5mYWxzZUV4cHIudG9UZXgoZSkrIn0sICZcXHF1YWR7XFx0ZXh0e290aGVyd2lzZX19XFxlbmR7Y2FzZXN9In0sbn0se2lzQ2xhc3M6ITAsaXNOb2RlOiEwfSkscmY9cigxNyksbmY9ci5uKHJmKSxhZj17QWxwaGE6IkEiLGFscGhhOiJcXGFscGhhIixCZXRhOiJCIixiZXRhOiJcXGJldGEiLEdhbW1hOiJcXEdhbW1hIixnYW1tYToiXFxnYW1tYSIsRGVsdGE6IlxcRGVsdGEiLGRlbHRhOiJcXGRlbHRhIixFcHNpbG9uOiJFIixlcHNpbG9uOiJcXGVwc2lsb24iLHZhcmVwc2lsb246IlxcdmFyZXBzaWxvbiIsWmV0YToiWiIsemV0YToiXFx6ZXRhIixFdGE6IkgiLGV0YToiXFxldGEiLFRoZXRhOiJcXFRoZXRhIix0aGV0YToiXFx0aGV0YSIsdmFydGhldGE6IlxcdmFydGhldGEiLElvdGE6IkkiLGlvdGE6IlxcaW90YSIsS2FwcGE6IksiLGthcHBhOiJcXGthcHBhIix2YXJrYXBwYToiXFx2YXJrYXBwYSIsTGFtYmRhOiJcXExhbWJkYSIsbGFtYmRhOiJcXGxhbWJkYSIsTXU6Ik0iLG11OiJcXG11IixOdToiTiIsbnU6IlxcbnUiLFhpOiJcXFhpIix4aToiXFx4aSIsT21pY3JvbjoiTyIsb21pY3JvbjoibyIsUGk6IlxcUGkiLHBpOiJcXHBpIix2YXJwaToiXFx2YXJwaSIsUmhvOiJQIixyaG86IlxccmhvIix2YXJyaG86IlxcdmFycmhvIixTaWdtYToiXFxTaWdtYSIsc2lnbWE6Ilxcc2lnbWEiLHZhcnNpZ21hOiJcXHZhcnNpZ21hIixUYXU6IlQiLHRhdToiXFx0YXUiLFVwc2lsb246IlxcVXBzaWxvbiIsdXBzaWxvbjoiXFx1cHNpbG9uIixQaGk6IlxcUGhpIixwaGk6IlxccGhpIix2YXJwaGk6IlxcdmFycGhpIixDaGk6IlgiLGNoaToiXFxjaGkiLFBzaToiXFxQc2kiLHBzaToiXFxwc2kiLE9tZWdhOiJcXE9tZWdhIixvbWVnYToiXFxvbWVnYSIsdHJ1ZToiXFxtYXRocm17VHJ1ZX0iLGZhbHNlOiJcXG1hdGhybXtGYWxzZX0iLGk6ImkiLGluZjoiXFxpbmZ0eSIsSW5mOiJcXGluZnR5IixpbmZpbml0eToiXFxpbmZ0eSIsSW5maW5pdHk6IlxcaW5mdHkiLG9vOiJcXGluZnR5IixsaW06IlxcbGltIix1bmRlZmluZWQ6IlxcbWF0aGJmez99In0sb2Y9e3RyYW5zcG9zZToiXlxcdG9wIixjdHJhbnNwb3NlOiJeSCIsZmFjdG9yaWFsOiIhIixwb3c6Il4iLGRvdFBvdzoiLl5cXHdlZGdlIix1bmFyeVBsdXM6IisiLHVuYXJ5TWludXM6Ii0iLGJpdE5vdDoiXFx+Iixub3Q6IlxcbmVnIixtdWx0aXBseToiXFxjZG90IixkaXZpZGU6IlxcZnJhYyIsZG90TXVsdGlwbHk6Ii5cXGNkb3QiLGRvdERpdmlkZToiLjoiLG1vZDoiXFxtb2QiLGFkZDoiKyIsc3VidHJhY3Q6Ii0iLHRvOiJcXHJpZ2h0YXJyb3ciLGxlZnRTaGlmdDoiPDwiLHJpZ2h0QXJpdGhTaGlmdDoiPj4iLHJpZ2h0TG9nU2hpZnQ6Ij4+PiIsZXF1YWw6Ij0iLHVuZXF1YWw6IlxcbmVxIixzbWFsbGVyOiI8IixsYXJnZXI6Ij4iLHNtYWxsZXJFcToiXFxsZXEiLGxhcmdlckVxOiJcXGdlcSIsYml0QW5kOiJcXCYiLGJpdFhvcjoiXFx1bmRlcmxpbmV7fH0iLGJpdE9yOiJ8IixhbmQ6Ilxcd2VkZ2UiLHhvcjoiXFx2ZWViYXIiLG9yOiJcXHZlZSJ9LHNmPXthYnM6ezE6IlxcbGVmdHwke2FyZ3NbMF19XFxyaWdodHwifSxhZGQ6ezI6IlxcbGVmdCgke2FyZ3NbMF19Ii5jb25jYXQob2YuYWRkLCIke2FyZ3NbMV19XFxyaWdodCkiKX0sY2JydDp7MToiXFxzcXJ0WzNdeyR7YXJnc1swXX19In0sY2VpbDp7MToiXFxsZWZ0XFxsY2VpbCR7YXJnc1swXX1cXHJpZ2h0XFxyY2VpbCJ9LGN1YmU6ezE6IlxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCleMyJ9LGRpdmlkZTp7MjoiXFxmcmFjeyR7YXJnc1swXX19eyR7YXJnc1sxXX19In0sZG90RGl2aWRlOnsyOiJcXGxlZnQoJHthcmdzWzBdfSIuY29uY2F0KG9mLmRvdERpdmlkZSwiJHthcmdzWzFdfVxccmlnaHQpIil9LGRvdE11bHRpcGx5OnsyOiJcXGxlZnQoJHthcmdzWzBdfSIuY29uY2F0KG9mLmRvdE11bHRpcGx5LCIke2FyZ3NbMV19XFxyaWdodCkiKX0sZG90UG93OnsyOiJcXGxlZnQoJHthcmdzWzBdfSIuY29uY2F0KG9mLmRvdFBvdywiJHthcmdzWzFdfVxccmlnaHQpIil9LGV4cDp7MToiXFxleHBcXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpIn0sZXhwbTE6IlxcbGVmdChlIi5jb25jYXQob2YucG93LCJ7JHthcmdzWzBdfX0tMVxccmlnaHQpIiksZml4OnsxOiJcXG1hdGhybXske25hbWV9fVxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkifSxmbG9vcjp7MToiXFxsZWZ0XFxsZmxvb3Ike2FyZ3NbMF19XFxyaWdodFxccmZsb29yIn0sZ2NkOiJcXGdjZFxcbGVmdCgke2FyZ3N9XFxyaWdodCkiLGh5cG90OiJcXGh5cG90XFxsZWZ0KCR7YXJnc31cXHJpZ2h0KSIsbG9nOnsxOiJcXGxuXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KSIsMjoiXFxsb2dfeyR7YXJnc1sxXX19XFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KSJ9LGxvZzEwOnsxOiJcXGxvZ197MTB9XFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KSJ9LGxvZzFwOnsxOiJcXGxuXFxsZWZ0KCR7YXJnc1swXX0rMVxccmlnaHQpIiwyOiJcXGxvZ197JHthcmdzWzFdfX1cXGxlZnQoJHthcmdzWzBdfSsxXFxyaWdodCkifSxsb2cyOiJcXGxvZ197Mn1cXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpIixtb2Q6ezI6IlxcbGVmdCgke2FyZ3NbMF19Ii5jb25jYXQob2YubW9kLCIke2FyZ3NbMV19XFxyaWdodCkiKX0sbXVsdGlwbHk6ezI6IlxcbGVmdCgke2FyZ3NbMF19Ii5jb25jYXQob2YubXVsdGlwbHksIiR7YXJnc1sxXX1cXHJpZ2h0KSIpfSxub3JtOnsxOiJcXGxlZnRcXHwke2FyZ3NbMF19XFxyaWdodFxcfCIsMjp2b2lkIDB9LG50aFJvb3Q6ezI6Ilxcc3FydFske2FyZ3NbMV19XXske2FyZ3NbMF19fSJ9LG50aFJvb3RzOnsyOiJcXHt5IDogJHlee2FyZ3NbMV19ID0geyR7YXJnc1swXX19XFx9In0scG93OnsyOiJcXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpIi5jb25jYXQob2YucG93LCJ7JHthcmdzWzFdfX0iKX0scm91bmQ6ezE6IlxcbGVmdFxcbGZsb29yJHthcmdzWzBdfVxccmlnaHRcXHJjZWlsIiwyOnZvaWQgMH0sc2lnbjp7MToiXFxtYXRocm17JHtuYW1lfX1cXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpIn0sc3FydDp7MToiXFxzcXJ0eyR7YXJnc1swXX19In0sc3F1YXJlOnsxOiJcXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpXjIifSxzdWJ0cmFjdDp7MjoiXFxsZWZ0KCR7YXJnc1swXX0iLmNvbmNhdChvZi5zdWJ0cmFjdCwiJHthcmdzWzFdfVxccmlnaHQpIil9LHVuYXJ5TWludXM6ezE6IiIuY29uY2F0KG9mLnVuYXJ5TWludXMsIlxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkiKX0sdW5hcnlQbHVzOnsxOiIiLmNvbmNhdChvZi51bmFyeVBsdXMsIlxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkiKX0sYml0QW5kOnsyOiJcXGxlZnQoJHthcmdzWzBdfSIuY29uY2F0KG9mLmJpdEFuZCwiJHthcmdzWzFdfVxccmlnaHQpIil9LGJpdE5vdDp7MTpvZi5iaXROb3QrIlxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkifSxiaXRPcjp7MjoiXFxsZWZ0KCR7YXJnc1swXX0iLmNvbmNhdChvZi5iaXRPciwiJHthcmdzWzFdfVxccmlnaHQpIil9LGJpdFhvcjp7MjoiXFxsZWZ0KCR7YXJnc1swXX0iLmNvbmNhdChvZi5iaXRYb3IsIiR7YXJnc1sxXX1cXHJpZ2h0KSIpfSxsZWZ0U2hpZnQ6ezI6IlxcbGVmdCgke2FyZ3NbMF19Ii5jb25jYXQob2YubGVmdFNoaWZ0LCIke2FyZ3NbMV19XFxyaWdodCkiKX0scmlnaHRBcml0aFNoaWZ0OnsyOiJcXGxlZnQoJHthcmdzWzBdfSIuY29uY2F0KG9mLnJpZ2h0QXJpdGhTaGlmdCwiJHthcmdzWzFdfVxccmlnaHQpIil9LHJpZ2h0TG9nU2hpZnQ6ezI6IlxcbGVmdCgke2FyZ3NbMF19Ii5jb25jYXQob2YucmlnaHRMb2dTaGlmdCwiJHthcmdzWzFdfVxccmlnaHQpIil9LGJlbGxOdW1iZXJzOnsxOiJcXG1hdGhybXtCfV97JHthcmdzWzBdfX0ifSxjYXRhbGFuOnsxOiJcXG1hdGhybXtDfV97JHthcmdzWzBdfX0ifSxzdGlybGluZ1MyOnsyOiJcXG1hdGhybXtTfVxcbGVmdCgke2FyZ3N9XFxyaWdodCkifSxhcmc6ezE6IlxcYXJnXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KSJ9LGNvbmo6ezE6IlxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCleKiJ9LGltOnsxOiJcXEltXFxsZWZ0XFxsYnJhY2Uke2FyZ3NbMF19XFxyaWdodFxccmJyYWNlIn0scmU6ezE6IlxcUmVcXGxlZnRcXGxicmFjZSR7YXJnc1swXX1cXHJpZ2h0XFxyYnJhY2UifSxhbmQ6ezI6IlxcbGVmdCgke2FyZ3NbMF19Ii5jb25jYXQob2YuYW5kLCIke2FyZ3NbMV19XFxyaWdodCkiKX0sbm90OnsxOm9mLm5vdCsiXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KSJ9LG9yOnsyOiJcXGxlZnQoJHthcmdzWzBdfSIuY29uY2F0KG9mLm9yLCIke2FyZ3NbMV19XFxyaWdodCkiKX0seG9yOnsyOiJcXGxlZnQoJHthcmdzWzBdfSIuY29uY2F0KG9mLnhvciwiJHthcmdzWzFdfVxccmlnaHQpIil9LGNyb3NzOnsyOiJcXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpXFx0aW1lc1xcbGVmdCgke2FyZ3NbMV19XFxyaWdodCkifSxjdHJhbnNwb3NlOnsxOiJcXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpIi5jb25jYXQob2YuY3RyYW5zcG9zZSl9LGRldDp7MToiXFxkZXRcXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpIn0sZG90OnsyOiJcXGxlZnQoJHthcmdzWzBdfVxcY2RvdCR7YXJnc1sxXX1cXHJpZ2h0KSJ9LGV4cG06ezE6IlxcZXhwXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KSJ9LGludjp7MToiXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KV57LTF9In0sc3FydG06ezE6Inske2FyZ3NbMF19fSIuY29uY2F0KG9mLnBvdywie1xcZnJhY3sxfXsyfX0iKX0sdHJhY2U6ezE6IlxcbWF0aHJte3RyfVxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkifSx0cmFuc3Bvc2U6ezE6IlxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkiLmNvbmNhdChvZi50cmFuc3Bvc2UpfSxjb21iaW5hdGlvbnM6ezI6IlxcYmlub217JHthcmdzWzBdfX17JHthcmdzWzFdfX0ifSxjb21iaW5hdGlvbnNXaXRoUmVwOnsyOiJcXGxlZnQoXFwhXFwhe1xcYmlub217JHthcmdzWzBdfX17JHthcmdzWzFdfX19XFwhXFwhXFxyaWdodCkifSxmYWN0b3JpYWw6ezE6IlxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkiLmNvbmNhdChvZi5mYWN0b3JpYWwpfSxnYW1tYTp7MToiXFxHYW1tYVxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkifSxlcXVhbDp7MjoiXFxsZWZ0KCR7YXJnc1swXX0iLmNvbmNhdChvZi5lcXVhbCwiJHthcmdzWzFdfVxccmlnaHQpIil9LGxhcmdlcjp7MjoiXFxsZWZ0KCR7YXJnc1swXX0iLmNvbmNhdChvZi5sYXJnZXIsIiR7YXJnc1sxXX1cXHJpZ2h0KSIpfSxsYXJnZXJFcTp7MjoiXFxsZWZ0KCR7YXJnc1swXX0iLmNvbmNhdChvZi5sYXJnZXJFcSwiJHthcmdzWzFdfVxccmlnaHQpIil9LHNtYWxsZXI6ezI6IlxcbGVmdCgke2FyZ3NbMF19Ii5jb25jYXQob2Yuc21hbGxlciwiJHthcmdzWzFdfVxccmlnaHQpIil9LHNtYWxsZXJFcTp7MjoiXFxsZWZ0KCR7YXJnc1swXX0iLmNvbmNhdChvZi5zbWFsbGVyRXEsIiR7YXJnc1sxXX1cXHJpZ2h0KSIpfSx1bmVxdWFsOnsyOiJcXGxlZnQoJHthcmdzWzBdfSIuY29uY2F0KG9mLnVuZXF1YWwsIiR7YXJnc1sxXX1cXHJpZ2h0KSIpfSxlcmY6ezE6ImVyZlxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkifSxtYXg6IlxcbWF4XFxsZWZ0KCR7YXJnc31cXHJpZ2h0KSIsbWluOiJcXG1pblxcbGVmdCgke2FyZ3N9XFxyaWdodCkiLHZhcmlhbmNlOiJcXG1hdGhybXtWYXJ9XFxsZWZ0KCR7YXJnc31cXHJpZ2h0KSIsYWNvczp7MToiXFxjb3Neey0xfVxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkifSxhY29zaDp7MToiXFxjb3NoXnstMX1cXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpIn0sYWNvdDp7MToiXFxjb3Reey0xfVxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkifSxhY290aDp7MToiXFxjb3RoXnstMX1cXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpIn0sYWNzYzp7MToiXFxjc2Neey0xfVxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkifSxhY3NjaDp7MToiXFxtYXRocm17Y3NjaH1eey0xfVxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkifSxhc2VjOnsxOiJcXHNlY157LTF9XFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KSJ9LGFzZWNoOnsxOiJcXG1hdGhybXtzZWNofV57LTF9XFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KSJ9LGFzaW46ezE6Ilxcc2luXnstMX1cXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpIn0sYXNpbmg6ezE6Ilxcc2luaF57LTF9XFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KSJ9LGF0YW46ezE6IlxcdGFuXnstMX1cXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpIn0sYXRhbjI6ezI6IlxcbWF0aHJte2F0YW4yfVxcbGVmdCgke2FyZ3N9XFxyaWdodCkifSxhdGFuaDp7MToiXFx0YW5oXnstMX1cXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpIn0sY29zOnsxOiJcXGNvc1xcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkifSxjb3NoOnsxOiJcXGNvc2hcXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpIn0sY290OnsxOiJcXGNvdFxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkifSxjb3RoOnsxOiJcXGNvdGhcXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpIn0sY3NjOnsxOiJcXGNzY1xcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkifSxjc2NoOnsxOiJcXG1hdGhybXtjc2NofVxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkifSxzZWM6ezE6Ilxcc2VjXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KSJ9LHNlY2g6ezE6IlxcbWF0aHJte3NlY2h9XFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KSJ9LHNpbjp7MToiXFxzaW5cXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpIn0sc2luaDp7MToiXFxzaW5oXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KSJ9LHRhbjp7MToiXFx0YW5cXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpIn0sdGFuaDp7MToiXFx0YW5oXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KSJ9LHRvOnsyOiJcXGxlZnQoJHthcmdzWzBdfSIuY29uY2F0KG9mLnRvLCIke2FyZ3NbMV19XFxyaWdodCkiKX0sbnVtZXJpYzpmdW5jdGlvbihlKXtyZXR1cm4gZS5hcmdzWzBdLnRvVGV4KCl9LG51bWJlcjp7MDoiMCIsMToiXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KSIsMjoiXFxsZWZ0KFxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkke2FyZ3NbMV19XFxyaWdodCkifSxzdHJpbmc6ezA6J1xcbWF0aHR0eyIifScsMToiXFxtYXRocm17c3RyaW5nfVxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkifSxiaWdudW1iZXI6ezA6IjAiLDE6IlxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkifSxjb21wbGV4OnswOiIwIiwxOiJcXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpIiwyOiJcXGxlZnQoXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KSsiLmNvbmNhdChhZi5pLCJcXGNkb3RcXGxlZnQoJHthcmdzWzFdfVxccmlnaHQpXFxyaWdodCkiKX0sbWF0cml4OnswOiJcXGJlZ2lue2JtYXRyaXh9XFxlbmR7Ym1hdHJpeH0iLDE6IlxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkiLDI6IlxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkifSxzcGFyc2U6ezA6IlxcYmVnaW57YnNwYXJzZX1cXGVuZHtic3BhcnNlfSIsMToiXFxsZWZ0KCR7YXJnc1swXX1cXHJpZ2h0KSJ9LHVuaXQ6ezE6IlxcbGVmdCgke2FyZ3NbMF19XFxyaWdodCkiLDI6IlxcbGVmdChcXGxlZnQoJHthcmdzWzBdfVxccmlnaHQpJHthcmdzWzFdfVxccmlnaHQpIn19LHVmPXtkZWc6Il5cXGNpcmMifTtmdW5jdGlvbiBjZihlKXtyZXR1cm4gbmYoKShlLHtwcmVzZXJ2ZUZvcm1hdHRpbmc6ITB9KX1mdW5jdGlvbiBmZihlLHQpe3JldHVybih0PXZvaWQgMCE9PXQmJnQpP09iamVjdChhZS5mKSh1ZixlKT91ZltlXToiXFxtYXRocm17IitjZihlKSsifSI6T2JqZWN0KGFlLmYpKGFmLGUpP2FmW2VdOmNmKGUpfXZhciBsZj1bIk5vZGUiXSxwZj1PYmplY3Qocy5hKSgiQ29uc3RhbnROb2RlIixsZixmdW5jdGlvbihlKXt2YXIgdD1lLk5vZGU7ZnVuY3Rpb24gcihlKXtpZighKHRoaXMgaW5zdGFuY2VvZiByKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIkNvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvciIpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBTeW50YXhFcnJvcigibmV3IENvbnN0YW50Tm9kZSh2YWx1ZVN0ciwgdmFsdWVUeXBlKSBpcyBub3Qgc3VwcG9ydGVkIGFueW1vcmUgc2luY2UgbWF0aCB2NC4wLjAuIFVzZSBuZXcgQ29uc3RhbnROb2RlKHZhbHVlKSBpbnN0ZWFkLCB3aGVyZSB2YWx1ZSBpcyBhIG5vbi1zdHJpbmdpZmllZCB2YWx1ZS4iKTt0aGlzLnZhbHVlPWV9cmV0dXJuKHIucHJvdG90eXBlPW5ldyB0KS50eXBlPSJDb25zdGFudE5vZGUiLHIucHJvdG90eXBlLmlzQ29uc3RhbnROb2RlPSEwLHIucHJvdG90eXBlLl9jb21waWxlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy52YWx1ZTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcn19LHIucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7fSxyLnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2xvbmUoKX0sci5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcy52YWx1ZSl9LHIucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KEouZCkodGhpcy52YWx1ZSxlKX0sci5wcm90b3R5cGUudG9IVE1MPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3RvU3RyaW5nKGUpO3N3aXRjaChPYmplY3QoaWUuTSkodGhpcy52YWx1ZSkpe2Nhc2UibnVtYmVyIjpjYXNlIkJpZ051bWJlciI6Y2FzZSJGcmFjdGlvbiI6cmV0dXJuJzxzcGFuIGNsYXNzPSJtYXRoLW51bWJlciI+Jyt0KyI8L3NwYW4+IjtjYXNlInN0cmluZyI6cmV0dXJuJzxzcGFuIGNsYXNzPSJtYXRoLXN0cmluZyI+Jyt0KyI8L3NwYW4+IjtjYXNlImJvb2xlYW4iOnJldHVybic8c3BhbiBjbGFzcz0ibWF0aC1ib29sZWFuIj4nK3QrIjwvc3Bhbj4iO2Nhc2UibnVsbCI6cmV0dXJuJzxzcGFuIGNsYXNzPSJtYXRoLW51bGwtc3ltYm9sIj4nK3QrIjwvc3Bhbj4iO2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4nPHNwYW4gY2xhc3M9Im1hdGgtdW5kZWZpbmVkIj4nK3QrIjwvc3Bhbj4iO2RlZmF1bHQ6cmV0dXJuJzxzcGFuIGNsYXNzPSJtYXRoLXN5bWJvbCI+Jyt0KyI8L3NwYW4+In19LHIucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnttYXRoanM6IkNvbnN0YW50Tm9kZSIsdmFsdWU6dGhpcy52YWx1ZX19LHIuZnJvbUpTT049ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByKGUudmFsdWUpfSxyLnByb3RvdHlwZS5fdG9UZXg9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdG9TdHJpbmcoZSk7c3dpdGNoKE9iamVjdChpZS5NKSh0aGlzLnZhbHVlKSl7Y2FzZSJzdHJpbmciOnJldHVybiJcXG1hdGh0dHsiK2NmKHQpKyJ9IjtjYXNlIm51bWJlciI6Y2FzZSJCaWdOdW1iZXIiOnZhciByPXQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJlIik7cmV0dXJuLTEhPT1yP3Quc3Vic3RyaW5nKDAscikrIlxcY2RvdDEwXnsiK3Quc3Vic3RyaW5nKHIrMSkrIn0iOnQ7Y2FzZSJGcmFjdGlvbiI6cmV0dXJuIHRoaXMudmFsdWUudG9MYXRleCgpO2RlZmF1bHQ6cmV0dXJuIHR9fSxyfSx7aXNDbGFzczohMCxpc05vZGU6ITB9KSxtZj1bInR5cGVkIiwiTm9kZSJdLGhmPU9iamVjdChzLmEpKCJGdW5jdGlvbkFzc2lnbm1lbnROb2RlIixtZixmdW5jdGlvbihlKXt2YXIgZj1lLnR5cGVkLHQ9ZS5Ob2RlO2Z1bmN0aW9uIG4oZSx0LHIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBTeW50YXhFcnJvcigiQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yIik7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1N0cmluZyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyICJuYW1lIicpO2lmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGNvbnRhaW5pbmcgc3RyaW5ncyBvciBvYmplY3RzIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgInBhcmFtcyInKTtpZighT2JqZWN0KGllLncpKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciAiZXhwciInKTtpZihlIGluIEJjKXRocm93IG5ldyBFcnJvcignSWxsZWdhbCBmdW5jdGlvbiBuYW1lLCAiJytlKyciIGlzIGEgcmVzZXJ2ZWQga2V5d29yZCcpO3RoaXMubmFtZT1lLHRoaXMucGFyYW1zPXQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLm5hbWV8fGV9KSx0aGlzLnR5cGVzPXQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLnR5cGV8fCJhbnkifSksdGhpcy5leHByPXJ9ZnVuY3Rpb24gYShlLHQpe3ZhciByPVZjKGUsdCksbj1WYyhlLmV4cHIsdCk7cmV0dXJuImFsbCI9PT10fHxudWxsIT09biYmbjw9cn1yZXR1cm4obi5wcm90b3R5cGU9bmV3IHQpLnR5cGU9IkZ1bmN0aW9uQXNzaWdubWVudE5vZGUiLG4ucHJvdG90eXBlLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZT0hMCxuLnByb3RvdHlwZS5fY29tcGlsZT1mdW5jdGlvbihlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUodCk7T2JqZWN0KEkuZikodGhpcy5wYXJhbXMsZnVuY3Rpb24oZSl7cltlXT0hMH0pO3ZhciBhPXRoaXMuZXhwci5fY29tcGlsZShlLHIpLG89dGhpcy5uYW1lLHM9dGhpcy5wYXJhbXMsdT1PYmplY3QoSS5rKSh0aGlzLnR5cGVzLCIsIiksYz1vKyIoIitPYmplY3QoSS5rKSh0aGlzLnBhcmFtcywiLCAiKSsiKSI7cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXt2YXIgZT17fTtlW3VdPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPU9iamVjdC5jcmVhdGUobiksdD0wO3Q8cy5sZW5ndGg7dCsrKWVbc1t0XV09YXJndW1lbnRzW3RdO3JldHVybiBhKHIsZSxpKX07dmFyIHQ9ZihvLGUpO3JldHVybiB0LnN5bnRheD1jLFVpKHIsbyx0KSx0fX0sbi5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXtlKHRoaXMuZXhwciwiZXhwciIsdGhpcyl9LG4ucHJvdG90eXBlLm1hcD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9pZk5vZGUoZSh0aGlzLmV4cHIsImV4cHIiLHRoaXMpKTtyZXR1cm4gbmV3IG4odGhpcy5uYW1lLHRoaXMucGFyYW1zLnNsaWNlKDApLHQpfSxuLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLm5hbWUsdGhpcy5wYXJhbXMuc2xpY2UoMCksdGhpcy5leHByKX0sbi5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUucGFyZW50aGVzaXM/ZS5wYXJlbnRoZXNpczoia2VlcCIscj10aGlzLmV4cHIudG9TdHJpbmcoZSk7cmV0dXJuIGEodGhpcyx0KSYmKHI9IigiK3IrIikiKSx0aGlzLm5hbWUrIigiK3RoaXMucGFyYW1zLmpvaW4oIiwgIikrIikgPSAiK3J9LG4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciByPXRoaXMudHlwZXM7cmV0dXJue21hdGhqczoiRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSIsbmFtZTp0aGlzLm5hbWUscGFyYW1zOnRoaXMucGFyYW1zLm1hcChmdW5jdGlvbihlLHQpe3JldHVybntuYW1lOmUsdHlwZTpyW3RdfX0pLGV4cHI6dGhpcy5leHByfX0sbi5mcm9tSlNPTj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IG4oZS5uYW1lLGUucGFyYW1zLGUuZXhwcil9LG4ucHJvdG90eXBlLnRvSFRNTD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZSYmZS5wYXJlbnRoZXNpcz9lLnBhcmVudGhlc2lzOiJrZWVwIixyPVtdLG49MDtuPHRoaXMucGFyYW1zLmxlbmd0aDtuKyspci5wdXNoKCc8c3BhbiBjbGFzcz0ibWF0aC1zeW1ib2wgbWF0aC1wYXJhbWV0ZXIiPicrT2JqZWN0KEouYykodGhpcy5wYXJhbXNbbl0pKyI8L3NwYW4+Iik7dmFyIGk9dGhpcy5leHByLnRvSFRNTChlKTtyZXR1cm4gYSh0aGlzLHQpJiYoaT0nPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KDwvc3Bhbj4nK2krJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPik8L3NwYW4+JyksJzxzcGFuIGNsYXNzPSJtYXRoLWZ1bmN0aW9uIj4nK09iamVjdChKLmMpKHRoaXMubmFtZSkrJzwvc3Bhbj48c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzIj4oPC9zcGFuPicrci5qb2luKCc8c3BhbiBjbGFzcz0ibWF0aC1zZXBhcmF0b3IiPiw8L3NwYW4+JykrJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPik8L3NwYW4+PHNwYW4gY2xhc3M9Im1hdGgtb3BlcmF0b3IgbWF0aC1hc3NpZ25tZW50LW9wZXJhdG9yIG1hdGgtdmFyaWFibGUtYXNzaWdubWVudC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciI+PTwvc3Bhbj4nK2l9LG4ucHJvdG90eXBlLl90b1RleD1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLnBhcmVudGhlc2lzP2UucGFyZW50aGVzaXM6ImtlZXAiLHI9dGhpcy5leHByLnRvVGV4KGUpO3JldHVybiBhKHRoaXMsdCkmJihyPSJcXGxlZnQoIi5jb25jYXQociwiXFxyaWdodCkiKSksIlxcbWF0aHJteyIrdGhpcy5uYW1lKyJ9XFxsZWZ0KCIrdGhpcy5wYXJhbXMubWFwKGZmKS5qb2luKCIsIikrIlxccmlnaHQpOj0iK3J9LG59LHtpc0NsYXNzOiEwLGlzTm9kZTohMH0pO2Z1bmN0aW9uIGRmKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxyPW5ldyBBcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspclt0XT1lW3RdO3JldHVybiByfX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfXZhciB5Zj1bIlJhbmdlIiwiTm9kZSIsInNpemUiXSxnZj1PYmplY3Qocy5hKSgiSW5kZXhOb2RlIix5ZixmdW5jdGlvbihlKXt2YXIgbj1lLlJhbmdlLHQ9ZS5Ob2RlLGg9ZS5zaXplO2Z1bmN0aW9uIGkoZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBpKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIkNvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvciIpO2lmKHRoaXMuZGltZW5zaW9ucz1lLHRoaXMuZG90Tm90YXRpb249dHx8ITEsIUFycmF5LmlzQXJyYXkoZSl8fCFlLmV2ZXJ5KGllLncpKXRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGNvbnRhaW5pbmcgTm9kZXMgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciAiZGltZW5zaW9ucyInKTtpZih0aGlzLmRvdE5vdGF0aW9uJiYhdGhpcy5pc09iamVjdFByb3BlcnR5KCkpdGhyb3cgbmV3IEVycm9yKCJkb3ROb3RhdGlvbiBvbmx5IGFwcGxpY2FibGUgZm9yIG9iamVjdCBwcm9wZXJ0aWVzIik7ZnVuY3Rpb24gcigpe3Rocm93IG5ldyBFcnJvcigiUHJvcGVydHkgYEluZGV4Tm9kZS5vYmplY3RgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgSW5kZXhOb2RlLmZuYCBpbnN0ZWFkIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm9iamVjdCIse2dldDpyLHNldDpyfSl9ZnVuY3Rpb24gZChlLHQscil7cmV0dXJuIG5ldyBuKE9iamVjdChpZS5lKShlKT9lLnRvTnVtYmVyKCk6ZSxPYmplY3QoaWUuZSkodCk/dC50b051bWJlcigpOnQsT2JqZWN0KGllLmUpKHIpP3IudG9OdW1iZXIoKTpyKX1yZXR1cm4oaS5wcm90b3R5cGU9bmV3IHQpLnR5cGU9IkluZGV4Tm9kZSIsaS5wcm90b3R5cGUuaXNJbmRleE5vZGU9ITAsaS5wcm90b3R5cGUuX2NvbXBpbGU9ZnVuY3Rpb24ocCxtKXt2YXIgaT1PYmplY3QoSS5tKSh0aGlzLmRpbWVuc2lvbnMsZnVuY3Rpb24oZSxhKXtpZihPYmplY3QoaWUuRSkoZSkpe2lmKGUubmVlZHNFbmQoKSl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShtKTt0LmVuZD0hMDt2YXIgbz1lLnN0YXJ0Ll9jb21waWxlKHAsdCkscz1lLmVuZC5fY29tcGlsZShwLHQpLHU9ZS5zdGVwP2Uuc3RlcC5fY29tcGlsZShwLHQpOmZ1bmN0aW9uKCl7cmV0dXJuIDF9O3JldHVybiBmdW5jdGlvbihlLHQscil7dmFyIG49aChyKS52YWx1ZU9mKCksaT1PYmplY3QuY3JlYXRlKHQpO3JldHVybiBpLmVuZD1uW2FdLGQobyhlLGkscikscyhlLGksciksdShlLGkscikpfX12YXIgbj1lLnN0YXJ0Ll9jb21waWxlKHAsbSksaT1lLmVuZC5fY29tcGlsZShwLG0pLGM9ZS5zdGVwP2Uuc3RlcC5fY29tcGlsZShwLG0pOmZ1bmN0aW9uKCl7cmV0dXJuIDF9O3JldHVybiBmdW5jdGlvbihlLHQscil7cmV0dXJuIGQobihlLHQsciksaShlLHQsciksYyhlLHQscikpfX1pZihPYmplY3QoaWUuSikoZSkmJiJlbmQiPT09ZS5uYW1lKXt2YXIgcj1PYmplY3QuY3JlYXRlKG0pO3IuZW5kPSEwO3ZhciBmPWUuX2NvbXBpbGUocCxyKTtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWgocikudmFsdWVPZigpLGk9T2JqZWN0LmNyZWF0ZSh0KTtyZXR1cm4gaS5lbmQ9blthXSxmKGUsaSxyKX19dmFyIGw9ZS5fY29tcGlsZShwLG0pO3JldHVybiBmdW5jdGlvbihlLHQscil7cmV0dXJuIGwoZSx0LHIpfX0pLGE9RmkocCwiaW5kZXgiKTtyZXR1cm4gZnVuY3Rpb24odCxyLG4pe3ZhciBlPU9iamVjdChJLm0pKGksZnVuY3Rpb24oZSl7cmV0dXJuIGUodCxyLG4pfSk7cmV0dXJuIGEuYXBwbHkodm9pZCAwLGRmKGUpKX19LGkucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDx0aGlzLmRpbWVuc2lvbnMubGVuZ3RoO3QrKyllKHRoaXMuZGltZW5zaW9uc1t0XSwiZGltZW5zaW9uc1siK3QrIl0iLHRoaXMpfSxpLnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPHRoaXMuZGltZW5zaW9ucy5sZW5ndGg7cisrKXRbcl09dGhpcy5faWZOb2RlKGUodGhpcy5kaW1lbnNpb25zW3JdLCJkaW1lbnNpb25zWyIrcisiXSIsdGhpcykpO3JldHVybiBuZXcgaSh0LHRoaXMuZG90Tm90YXRpb24pfSxpLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgaSh0aGlzLmRpbWVuc2lvbnMuc2xpY2UoMCksdGhpcy5kb3ROb3RhdGlvbil9LGkucHJvdG90eXBlLmlzT2JqZWN0UHJvcGVydHk9ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMuZGltZW5zaW9ucy5sZW5ndGgmJk9iamVjdChpZS5sKSh0aGlzLmRpbWVuc2lvbnNbMF0pJiYic3RyaW5nIj09dHlwZW9mIHRoaXMuZGltZW5zaW9uc1swXS52YWx1ZX0saS5wcm90b3R5cGUuZ2V0T2JqZWN0UHJvcGVydHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc09iamVjdFByb3BlcnR5KCk/dGhpcy5kaW1lbnNpb25zWzBdLnZhbHVlOm51bGx9LGkucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kb3ROb3RhdGlvbj8iLiIrdGhpcy5nZXRPYmplY3RQcm9wZXJ0eSgpOiJbIit0aGlzLmRpbWVuc2lvbnMuam9pbigiLCAiKSsiXSJ9LGkucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnttYXRoanM6IkluZGV4Tm9kZSIsZGltZW5zaW9uczp0aGlzLmRpbWVuc2lvbnMsZG90Tm90YXRpb246dGhpcy5kb3ROb3RhdGlvbn19LGkuZnJvbUpTT049ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBpKGUuZGltZW5zaW9ucyxlLmRvdE5vdGF0aW9uKX0saS5wcm90b3R5cGUudG9IVE1MPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjx0aGlzLmRpbWVuc2lvbnMubGVuZ3RoO3IrKyl0W3JdPXRoaXMuZGltZW5zaW9uc1tyXS50b0hUTUwoKTtyZXR1cm4gdGhpcy5kb3ROb3RhdGlvbj8nPHNwYW4gY2xhc3M9Im1hdGgtb3BlcmF0b3IgbWF0aC1hY2Nlc3Nvci1vcGVyYXRvciI+Ljwvc3Bhbj48c3BhbiBjbGFzcz0ibWF0aC1zeW1ib2wgbWF0aC1wcm9wZXJ0eSI+JytPYmplY3QoSi5jKSh0aGlzLmdldE9iamVjdFByb3BlcnR5KCkpKyI8L3NwYW4+IjonPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1zcXVhcmUtcGFyZW50aGVzaXMiPls8L3NwYW4+Jyt0LmpvaW4oJzxzcGFuIGNsYXNzPSJtYXRoLXNlcGFyYXRvciI+LDwvc3Bhbj4nKSsnPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1zcXVhcmUtcGFyZW50aGVzaXMiPl08L3NwYW4+J30saS5wcm90b3R5cGUuX3RvVGV4PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9UZXgodCl9KTtyZXR1cm4gdGhpcy5kb3ROb3RhdGlvbj8iLiIrdGhpcy5nZXRPYmplY3RQcm9wZXJ0eSgpOiJfeyIrZS5qb2luKCIsIikrIn0ifSxpfSx7aXNDbGFzczohMCxpc05vZGU6ITB9KTtmdW5jdGlvbiB2ZihlKXtyZXR1cm4odmY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX12YXIgYmY9WyJOb2RlIl0seGY9T2JqZWN0KHMuYSkoIk9iamVjdE5vZGUiLGJmLGZ1bmN0aW9uKGUpe3ZhciB0PWUuTm9kZTtmdW5jdGlvbiBuKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBTeW50YXhFcnJvcigiQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yIik7aWYodGhpcy5wcm9wZXJ0aWVzPXR8fHt9LHQmJigib2JqZWN0IiE9PXZmKHQpfHwhT2JqZWN0LmtleXModCkuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChpZS53KSh0W2VdKX0pKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgY29udGFpbmluZyBOb2RlcyBleHBlY3RlZCIpfXJldHVybihuLnByb3RvdHlwZT1uZXcgdCkudHlwZT0iT2JqZWN0Tm9kZSIsbi5wcm90b3R5cGUuaXNPYmplY3ROb2RlPSEwLG4ucHJvdG90eXBlLl9jb21waWxlPWZ1bmN0aW9uKGUsdCl7dmFyIGE9e307Zm9yKHZhciByIGluIHRoaXMucHJvcGVydGllcylpZihPYmplY3QoYWUuZikodGhpcy5wcm9wZXJ0aWVzLHIpKXt2YXIgbj1PYmplY3QoSi5lKShyKSxpPUpTT04ucGFyc2Uobik7aWYoIUxpKHRoaXMucHJvcGVydGllcyxpKSl0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0byBwcm9wZXJ0eSAiJytpKyciJyk7YVtpXT10aGlzLnByb3BlcnRpZXNbcl0uX2NvbXBpbGUoZSx0KX1yZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiBhKU9iamVjdChhZS5mKShhLGkpJiYobltpXT1hW2ldKGUsdCxyKSk7cmV0dXJuIG59fSxuLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzLnByb3BlcnRpZXMpT2JqZWN0KGFlLmYpKHRoaXMucHJvcGVydGllcyx0KSYmZSh0aGlzLnByb3BlcnRpZXNbdF0sInByb3BlcnRpZXNbIitPYmplY3QoSi5lKSh0KSsiXSIsdGhpcyl9LG4ucHJvdG90eXBlLm1hcD1mdW5jdGlvbihlKXt2YXIgdD17fTtmb3IodmFyIHIgaW4gdGhpcy5wcm9wZXJ0aWVzKU9iamVjdChhZS5mKSh0aGlzLnByb3BlcnRpZXMscikmJih0W3JdPXRoaXMuX2lmTm9kZShlKHRoaXMucHJvcGVydGllc1tyXSwicHJvcGVydGllc1siK09iamVjdChKLmUpKHIpKyJdIix0aGlzKSkpO3JldHVybiBuZXcgbih0KX0sbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZT17fTtmb3IodmFyIHQgaW4gdGhpcy5wcm9wZXJ0aWVzKU9iamVjdChhZS5mKSh0aGlzLnByb3BlcnRpZXMsdCkmJihlW3RdPXRoaXMucHJvcGVydGllc1t0XSk7cmV0dXJuIG5ldyBuKGUpfSxuLnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIHRoaXMucHJvcGVydGllcylPYmplY3QoYWUuZikodGhpcy5wcm9wZXJ0aWVzLHIpJiZ0LnB1c2goT2JqZWN0KEouZSkocikrIjogIit0aGlzLnByb3BlcnRpZXNbcl0udG9TdHJpbmcoZSkpO3JldHVybiJ7Iit0LmpvaW4oIiwgIikrIn0ifSxuLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWF0aGpzOiJPYmplY3ROb2RlIixwcm9wZXJ0aWVzOnRoaXMucHJvcGVydGllc319LG4uZnJvbUpTT049ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBuKGUucHJvcGVydGllcyl9LG4ucHJvdG90eXBlLnRvSFRNTD1mdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gdGhpcy5wcm9wZXJ0aWVzKU9iamVjdChhZS5mKSh0aGlzLnByb3BlcnRpZXMscikmJnQucHVzaCgnPHNwYW4gY2xhc3M9Im1hdGgtc3ltYm9sIG1hdGgtcHJvcGVydHkiPicrT2JqZWN0KEouYykocikrJzwvc3Bhbj48c3BhbiBjbGFzcz0ibWF0aC1vcGVyYXRvciBtYXRoLWFzc2lnbm1lbnQtb3BlcmF0b3IgbWF0aC1wcm9wZXJ0eS1hc3NpZ25tZW50LW9wZXJhdG9yIG1hdGgtYmluYXJ5LW9wZXJhdG9yIj46PC9zcGFuPicrdGhpcy5wcm9wZXJ0aWVzW3JdLnRvSFRNTChlKSk7cmV0dXJuJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtY3VybHktcGFyZW50aGVzaXMiPns8L3NwYW4+Jyt0LmpvaW4oJzxzcGFuIGNsYXNzPSJtYXRoLXNlcGFyYXRvciI+LDwvc3Bhbj4nKSsnPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1jdXJseS1wYXJlbnRoZXNpcyI+fTwvc3Bhbj4nfSxuLnByb3RvdHlwZS5fdG9UZXg9ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIHRoaXMucHJvcGVydGllcylPYmplY3QoYWUuZikodGhpcy5wcm9wZXJ0aWVzLHIpJiZ0LnB1c2goIlxcbWF0aGJmeyIrcisiOn0gJiAiK3RoaXMucHJvcGVydGllc1tyXS50b1RleChlKSsiXFxcXCIpO3JldHVybiJcXGxlZnRcXHtcXGJlZ2lue2FycmF5fXtsbH0iLmNvbmNhdCh0LmpvaW4oIlxuIiksIlxcZW5ke2FycmF5fVxccmlnaHRcXH0iKX0sbn0se2lzQ2xhc3M6ITAsaXNOb2RlOiEwfSksd2Y9WyJOb2RlIl0sTmY9T2JqZWN0KHMuYSkoIk9wZXJhdG9yTm9kZSIsd2YsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5Ob2RlO2Z1bmN0aW9uIGkoZSx0LHIsbil7aWYoISh0aGlzIGluc3RhbmNlb2YgaSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3IiKTtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgIm9wIicpO2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciAiZm4iJyk7aWYoIUFycmF5LmlzQXJyYXkocil8fCFyLmV2ZXJ5KGllLncpKXRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGNvbnRhaW5pbmcgTm9kZXMgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciAiYXJncyInKTt0aGlzLmltcGxpY2l0PSEwPT09bix0aGlzLm9wPWUsdGhpcy5mbj10LHRoaXMuYXJncz1yfHxbXX1mdW5jdGlvbiBtKGksYSxlLHQscil7dmFyIG4sbz1WYyhpLGEpLHM9SmMoaSxhKTtpZigiYWxsIj09PWF8fDI8dC5sZW5ndGgmJiJPcGVyYXRvck5vZGU6YWRkIiE9PWkuZ2V0SWRlbnRpZmllcigpJiYiT3BlcmF0b3JOb2RlOm11bHRpcGx5IiE9PWkuZ2V0SWRlbnRpZmllcigpKXJldHVybiB0Lm1hcChmdW5jdGlvbihlKXtzd2l0Y2goZS5nZXRDb250ZW50KCkudHlwZSl7Y2FzZSJBcnJheU5vZGUiOmNhc2UiQ29uc3RhbnROb2RlIjpjYXNlIlN5bWJvbE5vZGUiOmNhc2UiUGFyZW50aGVzaXNOb2RlIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX0pO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOm49W107YnJlYWs7Y2FzZSAxOnZhciB1PVZjKHRbMF0sYSk7aWYociYmbnVsbCE9PXUpe3ZhciBjLGY7aWYoZj0ia2VlcCI9PT1hPyhjPXRbMF0uZ2V0SWRlbnRpZmllcigpLGkuZ2V0SWRlbnRpZmllcigpKTooYz10WzBdLmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCksaS5nZXRDb250ZW50KCkuZ2V0SWRlbnRpZmllcigpKSwhMT09PVpjW29dW2ZdLmxhdGV4TGVmdFBhcmVucyl7bj1bITFdO2JyZWFrfWlmKCExPT09WmNbdV1bY10ubGF0ZXhQYXJlbnMpe249WyExXTticmVha319aWYobnVsbD09PXUpe249WyExXTticmVha31pZih1PD1vKXtuPVshMF07YnJlYWt9bj1bITFdO2JyZWFrO2Nhc2UgMjp2YXIgbCxwLG09VmModFswXSxhKSxoPVdjKGksdFswXSxhKTtsPW51bGwhPT1tJiYobT09PW8mJiJyaWdodCI9PT1zJiYhaHx8bTxvKTt2YXIgZCx5LGcsdj1WYyh0WzFdLGEpLGI9V2MoaSx0WzFdLGEpO2lmKHA9bnVsbCE9PXYmJih2PT09byYmImxlZnQiPT09cyYmIWJ8fHY8bykscilnPSJrZWVwIj09PWE/KGQ9aS5nZXRJZGVudGlmaWVyKCkseT1pLmFyZ3NbMF0uZ2V0SWRlbnRpZmllcigpLGkuYXJnc1sxXS5nZXRJZGVudGlmaWVyKCkpOihkPWkuZ2V0Q29udGVudCgpLmdldElkZW50aWZpZXIoKSx5PWkuYXJnc1swXS5nZXRDb250ZW50KCkuZ2V0SWRlbnRpZmllcigpLGkuYXJnc1sxXS5nZXRDb250ZW50KCkuZ2V0SWRlbnRpZmllcigpKSxudWxsIT09bSYmKCExPT09WmNbb11bZF0ubGF0ZXhMZWZ0UGFyZW5zJiYobD0hMSksITE9PT1aY1ttXVt5XS5sYXRleFBhcmVucyYmKGw9ITEpKSxudWxsIT09diYmKCExPT09WmNbb11bZF0ubGF0ZXhSaWdodFBhcmVucyYmKHA9ITEpLCExPT09WmNbdl1bZ10ubGF0ZXhQYXJlbnMmJihwPSExKSk7bj1bbCxwXTticmVhaztkZWZhdWx0OiJPcGVyYXRvck5vZGU6YWRkIiE9PWkuZ2V0SWRlbnRpZmllcigpJiYiT3BlcmF0b3JOb2RlOm11bHRpcGx5IiE9PWkuZ2V0SWRlbnRpZmllcigpfHwobj10Lm1hcChmdW5jdGlvbihlKXt2YXIgdD1WYyhlLGEpLHI9V2MoaSxlLGEpLG49SmMoZSxhKTtyZXR1cm4gbnVsbCE9PXQmJihvPT09dCYmcz09PW4mJiFyfHx0PG8pfSkpfXJldHVybiAyPD10Lmxlbmd0aCYmIk9wZXJhdG9yTm9kZTptdWx0aXBseSI9PT1pLmdldElkZW50aWZpZXIoKSYmaS5pbXBsaWNpdCYmImF1dG8iPT09YSYmImhpZGUiPT09ZSYmKG49dC5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgcj0iUGFyZW50aGVzaXNOb2RlIj09PWUuZ2V0SWRlbnRpZmllcigpO3JldHVybiEoIW5bdF0mJiFyKX0pKSxufXJldHVybihpLnByb3RvdHlwZT1uZXcgdCkudHlwZT0iT3BlcmF0b3JOb2RlIixpLnByb3RvdHlwZS5pc09wZXJhdG9yTm9kZT0hMCxpLnByb3RvdHlwZS5fY29tcGlsZT1mdW5jdGlvbih0LHIpe2lmKCJzdHJpbmciIT10eXBlb2YgdGhpcy5mbnx8IUhpKHQsdGhpcy5mbikpdGhyb3cgdFt0aGlzLmZuXT9uZXcgRXJyb3IoJ05vIGFjY2VzcyB0byBmdW5jdGlvbiAiJyt0aGlzLmZuKyciJyk6bmV3IEVycm9yKCJGdW5jdGlvbiAiK3RoaXMuZm4rJyBtaXNzaW5nIGluIHByb3ZpZGVkIG5hbWVzcGFjZSAibWF0aCInKTt2YXIgaT1GaSh0LHRoaXMuZm4pLGU9T2JqZWN0KEkubSkodGhpcy5hcmdzLGZ1bmN0aW9uKGUpe3JldHVybiBlLl9jb21waWxlKHQscil9KTtpZigxPT09ZS5sZW5ndGgpe3ZhciBuPWVbMF07cmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gaShuKGUsdCxyKSl9fWlmKDIhPT1lLmxlbmd0aClyZXR1cm4gZnVuY3Rpb24odCxyLG4pe3JldHVybiBpLmFwcGx5KG51bGwsT2JqZWN0KEkubSkoZSxmdW5jdGlvbihlKXtyZXR1cm4gZSh0LHIsbil9KSl9O3ZhciBhPWVbMF0sbz1lWzFdO3JldHVybiBmdW5jdGlvbihlLHQscil7cmV0dXJuIGkoYShlLHQsciksbyhlLHQscikpfX0saS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHRoaXMuYXJncy5sZW5ndGg7dCsrKWUodGhpcy5hcmdzW3RdLCJhcmdzWyIrdCsiXSIsdGhpcyl9LGkucHJvdG90eXBlLm1hcD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wO3I8dGhpcy5hcmdzLmxlbmd0aDtyKyspdFtyXT10aGlzLl9pZk5vZGUoZSh0aGlzLmFyZ3Nbcl0sImFyZ3NbIityKyJdIix0aGlzKSk7cmV0dXJuIG5ldyBpKHRoaXMub3AsdGhpcy5mbix0LHRoaXMuaW1wbGljaXQpfSxpLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgaSh0aGlzLm9wLHRoaXMuZm4sdGhpcy5hcmdzLnNsaWNlKDApLHRoaXMuaW1wbGljaXQpfSxpLnByb3RvdHlwZS5pc1VuYXJ5PWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmFyZ3MubGVuZ3RofSxpLnByb3RvdHlwZS5pc0JpbmFyeT1mdW5jdGlvbigpe3JldHVybiAyPT09dGhpcy5hcmdzLmxlbmd0aH0saS5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKHIpe3ZhciBlPXImJnIucGFyZW50aGVzaXM/ci5wYXJlbnRoZXNpczoia2VlcCIsdD1yJiZyLmltcGxpY2l0P3IuaW1wbGljaXQ6ImhpZGUiLG49dGhpcy5hcmdzLGk9bSh0aGlzLGUsdCxuLCExKTtpZigxPT09bi5sZW5ndGgpe3ZhciBhPUpjKHRoaXMsZSksbz1uWzBdLnRvU3RyaW5nKHIpO2lbMF0mJihvPSIoIitvKyIpIik7dmFyIHM9L1thLXpBLVpdKy8udGVzdCh0aGlzLm9wKTtyZXR1cm4icmlnaHQiPT09YT90aGlzLm9wKyhzPyIgIjoiIikrbzoibGVmdCI9PT1hP28rKHM/IiAiOiIiKSt0aGlzLm9wOm8rdGhpcy5vcH1pZigyPT09bi5sZW5ndGgpe3ZhciB1PW5bMF0udG9TdHJpbmcociksYz1uWzFdLnRvU3RyaW5nKHIpO3JldHVybiBpWzBdJiYodT0iKCIrdSsiKSIpLGlbMV0mJihjPSIoIitjKyIpIiksdGhpcy5pbXBsaWNpdCYmIk9wZXJhdG9yTm9kZTptdWx0aXBseSI9PT10aGlzLmdldElkZW50aWZpZXIoKSYmImhpZGUiPT09dD91KyIgIitjOnUrIiAiK3RoaXMub3ArIiAiK2N9aWYoMjxuLmxlbmd0aCYmKCJPcGVyYXRvck5vZGU6YWRkIj09PXRoaXMuZ2V0SWRlbnRpZmllcigpfHwiT3BlcmF0b3JOb2RlOm11bHRpcGx5Ij09PXRoaXMuZ2V0SWRlbnRpZmllcigpKSl7dmFyIGY9bi5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1lLnRvU3RyaW5nKHIpLGlbdF0mJihlPSIoIitlKyIpIiksZX0pO3JldHVybiB0aGlzLmltcGxpY2l0JiYiT3BlcmF0b3JOb2RlOm11bHRpcGx5Ij09PXRoaXMuZ2V0SWRlbnRpZmllcigpJiYiaGlkZSI9PT10P2Yuam9pbigiICIpOmYuam9pbigiICIrdGhpcy5vcCsiICIpfXJldHVybiB0aGlzLmZuKyIoIit0aGlzLmFyZ3Muam9pbigiLCAiKSsiKSJ9LGkucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnttYXRoanM6Ik9wZXJhdG9yTm9kZSIsb3A6dGhpcy5vcCxmbjp0aGlzLmZuLGFyZ3M6dGhpcy5hcmdzLGltcGxpY2l0OnRoaXMuaW1wbGljaXR9fSxpLmZyb21KU09OPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaShlLm9wLGUuZm4sZS5hcmdzLGUuaW1wbGljaXQpfSxpLnByb3RvdHlwZS50b0hUTUw9ZnVuY3Rpb24ocil7dmFyIGU9ciYmci5wYXJlbnRoZXNpcz9yLnBhcmVudGhlc2lzOiJrZWVwIix0PXImJnIuaW1wbGljaXQ/ci5pbXBsaWNpdDoiaGlkZSIsbj10aGlzLmFyZ3MsaT1tKHRoaXMsZSx0LG4sITEpO2lmKDE9PT1uLmxlbmd0aCl7dmFyIGE9SmModGhpcyxlKSxvPW5bMF0udG9IVE1MKHIpO3JldHVybiBpWzBdJiYobz0nPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KDwvc3Bhbj4nK28rJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPik8L3NwYW4+JyksInJpZ2h0Ij09PWE/JzxzcGFuIGNsYXNzPSJtYXRoLW9wZXJhdG9yIG1hdGgtdW5hcnktb3BlcmF0b3IgbWF0aC1sZWZ0aGFuZC11bmFyeS1vcGVyYXRvciI+JytPYmplY3QoSi5jKSh0aGlzLm9wKSsiPC9zcGFuPiIrbzpvKyc8c3BhbiBjbGFzcz0ibWF0aC1vcGVyYXRvciBtYXRoLXVuYXJ5LW9wZXJhdG9yIG1hdGgtcmlnaHRoYW5kLXVuYXJ5LW9wZXJhdG9yIj4nK09iamVjdChKLmMpKHRoaXMub3ApKyI8L3NwYW4+In1pZigyPT09bi5sZW5ndGgpe3ZhciBzPW5bMF0udG9IVE1MKHIpLHU9blsxXS50b0hUTUwocik7cmV0dXJuIGlbMF0mJihzPSc8c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzIj4oPC9zcGFuPicrcysnPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KTwvc3Bhbj4nKSxpWzFdJiYodT0nPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KDwvc3Bhbj4nK3UrJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPik8L3NwYW4+JyksdGhpcy5pbXBsaWNpdCYmIk9wZXJhdG9yTm9kZTptdWx0aXBseSI9PT10aGlzLmdldElkZW50aWZpZXIoKSYmImhpZGUiPT09dD9zKyc8c3BhbiBjbGFzcz0ibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWltcGxpY2l0LWJpbmFyeS1vcGVyYXRvciI+PC9zcGFuPicrdTpzKyc8c3BhbiBjbGFzcz0ibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWV4cGxpY2l0LWJpbmFyeS1vcGVyYXRvciI+JytPYmplY3QoSi5jKSh0aGlzLm9wKSsiPC9zcGFuPiIrdX12YXIgYz1uLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBlPWUudG9IVE1MKHIpLGlbdF0mJihlPSc8c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzIj4oPC9zcGFuPicrZSsnPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KTwvc3Bhbj4nKSxlfSk7cmV0dXJuIDI8bi5sZW5ndGgmJigiT3BlcmF0b3JOb2RlOmFkZCI9PT10aGlzLmdldElkZW50aWZpZXIoKXx8Ik9wZXJhdG9yTm9kZTptdWx0aXBseSI9PT10aGlzLmdldElkZW50aWZpZXIoKSk/dGhpcy5pbXBsaWNpdCYmIk9wZXJhdG9yTm9kZTptdWx0aXBseSI9PT10aGlzLmdldElkZW50aWZpZXIoKSYmImhpZGUiPT09dD9jLmpvaW4oJzxzcGFuIGNsYXNzPSJtYXRoLW9wZXJhdG9yIG1hdGgtYmluYXJ5LW9wZXJhdG9yIG1hdGgtaW1wbGljaXQtYmluYXJ5LW9wZXJhdG9yIj48L3NwYW4+Jyk6Yy5qb2luKCc8c3BhbiBjbGFzcz0ibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWV4cGxpY2l0LWJpbmFyeS1vcGVyYXRvciI+JytPYmplY3QoSi5jKSh0aGlzLm9wKSsiPC9zcGFuPiIpOic8c3BhbiBjbGFzcz0ibWF0aC1mdW5jdGlvbiI+JytPYmplY3QoSi5jKSh0aGlzLmZuKSsnPC9zcGFuPjxzcGFuIGNsYXNzPSJtYXRoLXBhcmFudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPig8L3NwYW4+JytjLmpvaW4oJzxzcGFuIGNsYXNzPSJtYXRoLXNlcGFyYXRvciI+LDwvc3Bhbj4nKSsnPHNwYW4gY2xhc3M9Im1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KTwvc3Bhbj4nfSxpLnByb3RvdHlwZS5fdG9UZXg9ZnVuY3Rpb24ocil7dmFyIGU9ciYmci5wYXJlbnRoZXNpcz9yLnBhcmVudGhlc2lzOiJrZWVwIix0PXImJnIuaW1wbGljaXQ/ci5pbXBsaWNpdDoiaGlkZSIsbj10aGlzLmFyZ3MsaT1tKHRoaXMsZSx0LG4sITApLGE9b2ZbdGhpcy5mbl07aWYoYT12b2lkIDA9PT1hP3RoaXMub3A6YSwxPT09bi5sZW5ndGgpe3ZhciBvPUpjKHRoaXMsZSkscz1uWzBdLnRvVGV4KHIpO3JldHVybiBpWzBdJiYocz0iXFxsZWZ0KCIuY29uY2F0KHMsIlxccmlnaHQpIikpLCJyaWdodCI9PT1vP2ErczpzK2F9aWYoMj09PW4ubGVuZ3RoKXt2YXIgdT1uWzBdLGM9dS50b1RleChyKTtpWzBdJiYoYz0iXFxsZWZ0KCIuY29uY2F0KGMsIlxccmlnaHQpIikpO3ZhciBmLGw9blsxXS50b1RleChyKTtzd2l0Y2goaVsxXSYmKGw9IlxcbGVmdCgiLmNvbmNhdChsLCJcXHJpZ2h0KSIpKSxmPSJrZWVwIj09PWU/dS5nZXRJZGVudGlmaWVyKCk6dS5nZXRDb250ZW50KCkuZ2V0SWRlbnRpZmllcigpLHRoaXMuZ2V0SWRlbnRpZmllcigpKXtjYXNlIk9wZXJhdG9yTm9kZTpkaXZpZGUiOnJldHVybiBhKyJ7IitjKyJ9eyIrbCsifSI7Y2FzZSJPcGVyYXRvck5vZGU6cG93Ijpzd2l0Y2goYz0ieyIrYysifSIsbD0ieyIrbCsifSIsZil7Y2FzZSJDb25kaXRpb25hbE5vZGUiOmNhc2UiT3BlcmF0b3JOb2RlOmRpdmlkZSI6Yz0iXFxsZWZ0KCIuY29uY2F0KGMsIlxccmlnaHQpIil9YnJlYWs7Y2FzZSJPcGVyYXRvck5vZGU6bXVsdGlwbHkiOmlmKHRoaXMuaW1wbGljaXQmJiJoaWRlIj09PXQpcmV0dXJuIGMrIn4iK2x9cmV0dXJuIGMrYStsfWlmKDI8bi5sZW5ndGgmJigiT3BlcmF0b3JOb2RlOmFkZCI9PT10aGlzLmdldElkZW50aWZpZXIoKXx8Ik9wZXJhdG9yTm9kZTptdWx0aXBseSI9PT10aGlzLmdldElkZW50aWZpZXIoKSkpe3ZhciBwPW4ubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9ZS50b1RleChyKSxpW3RdJiYoZT0iXFxsZWZ0KCIuY29uY2F0KGUsIlxccmlnaHQpIikpLGV9KTtyZXR1cm4iT3BlcmF0b3JOb2RlOm11bHRpcGx5Ij09PXRoaXMuZ2V0SWRlbnRpZmllcigpJiZ0aGlzLmltcGxpY2l0P3Auam9pbigifiIpOnAuam9pbihhKX1yZXR1cm4iXFxtYXRocm17Iit0aGlzLmZuKyJ9XFxsZWZ0KCIrbi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9UZXgocil9KS5qb2luKCIsIikrIlxccmlnaHQpIn0saS5wcm90b3R5cGUuZ2V0SWRlbnRpZmllcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnR5cGUrIjoiK3RoaXMuZm59LGl9LHtpc0NsYXNzOiEwLGlzTm9kZTohMH0pLE9mPVsiTm9kZSJdLE1mPU9iamVjdChzLmEpKCJQYXJlbnRoZXNpc05vZGUiLE9mLGZ1bmN0aW9uKGUpe3ZhciB0PWUuTm9kZTtmdW5jdGlvbiByKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXRocm93IG5ldyBTeW50YXhFcnJvcigiQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yIik7aWYoIU9iamVjdChpZS53KShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgImNvbnRlbnQiJyk7dGhpcy5jb250ZW50PWV9cmV0dXJuKHIucHJvdG90eXBlPW5ldyB0KS50eXBlPSJQYXJlbnRoZXNpc05vZGUiLHIucHJvdG90eXBlLmlzUGFyZW50aGVzaXNOb2RlPSEwLHIucHJvdG90eXBlLl9jb21waWxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuY29udGVudC5fY29tcGlsZShlLHQpfSxyLnByb3RvdHlwZS5nZXRDb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGVudC5nZXRDb250ZW50KCl9LHIucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZSl7ZSh0aGlzLmNvbnRlbnQsImNvbnRlbnQiLHRoaXMpfSxyLnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByKGUodGhpcy5jb250ZW50LCJjb250ZW50Iix0aGlzKSl9LHIucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMuY29udGVudCl9LHIucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4hZXx8ZSYmIWUucGFyZW50aGVzaXN8fGUmJiJrZWVwIj09PWUucGFyZW50aGVzaXM/IigiK3RoaXMuY29udGVudC50b1N0cmluZyhlKSsiKSI6dGhpcy5jb250ZW50LnRvU3RyaW5nKGUpfSxyLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWF0aGpzOiJQYXJlbnRoZXNpc05vZGUiLGNvbnRlbnQ6dGhpcy5jb250ZW50fX0sci5mcm9tSlNPTj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHIoZS5jb250ZW50KX0sci5wcm90b3R5cGUudG9IVE1MPWZ1bmN0aW9uKGUpe3JldHVybiFlfHxlJiYhZS5wYXJlbnRoZXNpc3x8ZSYmImtlZXAiPT09ZS5wYXJlbnRoZXNpcz8nPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KDwvc3Bhbj4nK3RoaXMuY29udGVudC50b0hUTUwoZSkrJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPik8L3NwYW4+Jzp0aGlzLmNvbnRlbnQudG9IVE1MKGUpfSxyLnByb3RvdHlwZS5fdG9UZXg9ZnVuY3Rpb24oZSl7cmV0dXJuIWV8fGUmJiFlLnBhcmVudGhlc2lzfHxlJiYia2VlcCI9PT1lLnBhcmVudGhlc2lzPyJcXGxlZnQoIi5jb25jYXQodGhpcy5jb250ZW50LnRvVGV4KGUpLCJcXHJpZ2h0KSIpOnRoaXMuY29udGVudC50b1RleChlKX0scn0se2lzQ2xhc3M6ITAsaXNOb2RlOiEwfSksamY9WyJOb2RlIl0sRWY9T2JqZWN0KHMuYSkoIlJhbmdlTm9kZSIsamYsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5Ob2RlO2Z1bmN0aW9uIG4oZSx0LHIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBTeW50YXhFcnJvcigiQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yIik7aWYoIU9iamVjdChpZS53KShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJOb2RlIGV4cGVjdGVkIik7aWYoIU9iamVjdChpZS53KSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJOb2RlIGV4cGVjdGVkIik7aWYociYmIU9iamVjdChpZS53KShyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJOb2RlIGV4cGVjdGVkIik7aWYoMzxhcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVG9vIG1hbnkgYXJndW1lbnRzIik7dGhpcy5zdGFydD1lLHRoaXMuZW5kPXQsdGhpcy5zdGVwPXJ8fG51bGx9ZnVuY3Rpb24gbyhlLHQpe3ZhciByPVZjKGUsdCksbj17fSxpPVZjKGUuc3RhcnQsdCk7aWYobi5zdGFydD1udWxsIT09aSYmaTw9cnx8ImFsbCI9PT10LGUuc3RlcCl7dmFyIGE9VmMoZS5zdGVwLHQpO24uc3RlcD1udWxsIT09YSYmYTw9cnx8ImFsbCI9PT10fXZhciBvPVZjKGUuZW5kLHQpO3JldHVybiBuLmVuZD1udWxsIT09byYmbzw9cnx8ImFsbCI9PT10LG59cmV0dXJuKG4ucHJvdG90eXBlPW5ldyB0KS50eXBlPSJSYW5nZU5vZGUiLG4ucHJvdG90eXBlLmlzUmFuZ2VOb2RlPSEwLG4ucHJvdG90eXBlLm5lZWRzRW5kPWZ1bmN0aW9uKCl7cmV0dXJuIDA8dGhpcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChpZS5KKShlKSYmImVuZCI9PT1lLm5hbWV9KS5sZW5ndGh9LG4ucHJvdG90eXBlLl9jb21waWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5yYW5nZSxpPXRoaXMuc3RhcnQuX2NvbXBpbGUoZSx0KSxhPXRoaXMuZW5kLl9jb21waWxlKGUsdCk7aWYodGhpcy5zdGVwKXt2YXIgbz10aGlzLnN0ZXAuX2NvbXBpbGUoZSx0KTtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3JldHVybiBuKGkoZSx0LHIpLGEoZSx0LHIpLG8oZSx0LHIpKX19cmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbihpKGUsdCxyKSxhKGUsdCxyKSl9fSxuLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUpe2UodGhpcy5zdGFydCwic3RhcnQiLHRoaXMpLGUodGhpcy5lbmQsImVuZCIsdGhpcyksdGhpcy5zdGVwJiZlKHRoaXMuc3RlcCwic3RlcCIsdGhpcyl9LG4ucHJvdG90eXBlLm1hcD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IG4odGhpcy5faWZOb2RlKGUodGhpcy5zdGFydCwic3RhcnQiLHRoaXMpKSx0aGlzLl9pZk5vZGUoZSh0aGlzLmVuZCwiZW5kIix0aGlzKSksdGhpcy5zdGVwJiZ0aGlzLl9pZk5vZGUoZSh0aGlzLnN0ZXAsInN0ZXAiLHRoaXMpKSl9LG4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMuc3RhcnQsdGhpcy5lbmQsdGhpcy5zdGVwJiZ0aGlzLnN0ZXApfSxuLnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQscj1vKHRoaXMsZSYmZS5wYXJlbnRoZXNpcz9lLnBhcmVudGhlc2lzOiJrZWVwIiksbj10aGlzLnN0YXJ0LnRvU3RyaW5nKGUpO2lmKHIuc3RhcnQmJihuPSIoIituKyIpIiksdD1uLHRoaXMuc3RlcCl7dmFyIGk9dGhpcy5zdGVwLnRvU3RyaW5nKGUpO3Iuc3RlcCYmKGk9IigiK2krIikiKSx0Kz0iOiIraX12YXIgYT10aGlzLmVuZC50b1N0cmluZyhlKTtyZXR1cm4gci5lbmQmJihhPSIoIithKyIpIiksdCs9IjoiK2F9LG4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnttYXRoanM6IlJhbmdlTm9kZSIsc3RhcnQ6dGhpcy5zdGFydCxlbmQ6dGhpcy5lbmQsc3RlcDp0aGlzLnN0ZXB9fSxuLmZyb21KU09OPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbihlLnN0YXJ0LGUuZW5kLGUuc3RlcCl9LG4ucHJvdG90eXBlLnRvSFRNTD1mdW5jdGlvbihlKXt2YXIgdCxyPW8odGhpcyxlJiZlLnBhcmVudGhlc2lzP2UucGFyZW50aGVzaXM6ImtlZXAiKSxuPXRoaXMuc3RhcnQudG9IVE1MKGUpO2lmKHIuc3RhcnQmJihuPSc8c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzIj4oPC9zcGFuPicrbisnPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KTwvc3Bhbj4nKSx0PW4sdGhpcy5zdGVwKXt2YXIgaT10aGlzLnN0ZXAudG9IVE1MKGUpO3Iuc3RlcCYmKGk9JzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPig8L3NwYW4+JytpKyc8c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzIj4pPC9zcGFuPicpLHQrPSc8c3BhbiBjbGFzcz0ibWF0aC1vcGVyYXRvciBtYXRoLXJhbmdlLW9wZXJhdG9yIj46PC9zcGFuPicraX12YXIgYT10aGlzLmVuZC50b0hUTUwoZSk7cmV0dXJuIHIuZW5kJiYoYT0nPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KDwvc3Bhbj4nK2ErJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPik8L3NwYW4+JyksdCs9JzxzcGFuIGNsYXNzPSJtYXRoLW9wZXJhdG9yIG1hdGgtcmFuZ2Utb3BlcmF0b3IiPjo8L3NwYW4+JythfSxuLnByb3RvdHlwZS5fdG9UZXg9ZnVuY3Rpb24oZSl7dmFyIHQ9byh0aGlzLGUmJmUucGFyZW50aGVzaXM/ZS5wYXJlbnRoZXNpczoia2VlcCIpLHI9dGhpcy5zdGFydC50b1RleChlKTtpZih0LnN0YXJ0JiYocj0iXFxsZWZ0KCIuY29uY2F0KHIsIlxccmlnaHQpIikpLHRoaXMuc3RlcCl7dmFyIG49dGhpcy5zdGVwLnRvVGV4KGUpO3Quc3RlcCYmKG49IlxcbGVmdCgiLmNvbmNhdChuLCJcXHJpZ2h0KSIpKSxyKz0iOiIrbn12YXIgaT10aGlzLmVuZC50b1RleChlKTtyZXR1cm4gdC5lbmQmJihpPSJcXGxlZnQoIi5jb25jYXQoaSwiXFxyaWdodCkiKSkscis9IjoiK2l9LG59LHtpc0NsYXNzOiEwLGlzTm9kZTohMH0pLFNmPVsiTm9kZSJdLEFmPU9iamVjdChzLmEpKCJSZWxhdGlvbmFsTm9kZSIsU2YsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5Ob2RlO2Z1bmN0aW9uIGkoZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBpKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIkNvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvciIpO2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciBjb25kaXRpb25hbHMgbXVzdCBiZSBhbiBhcnJheSIpO2lmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciBwYXJhbXMgbXVzdCBiZSBhbiBhcnJheSIpO2lmKGUubGVuZ3RoIT09dC5sZW5ndGgtMSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgcGFyYW1zIG11c3QgY29udGFpbiBleGFjdGx5IG9uZSBtb3JlIGVsZW1lbnQgdGhhbiBwYXJhbWV0ZXIgY29uZGl0aW9uYWxzIik7dGhpcy5jb25kaXRpb25hbHM9ZSx0aGlzLnBhcmFtcz10fXJldHVybihpLnByb3RvdHlwZT1uZXcgdCkudHlwZT0iUmVsYXRpb25hbE5vZGUiLGkucHJvdG90eXBlLmlzUmVsYXRpb25hbE5vZGU9ITAsaS5wcm90b3R5cGUuX2NvbXBpbGU9ZnVuY3Rpb24obyx0KXt2YXIgcz10aGlzLHU9dGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLl9jb21waWxlKG8sdCl9KTtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbixpPXVbMF0oZSx0LHIpLGE9MDthPHMuY29uZGl0aW9uYWxzLmxlbmd0aDthKyspe2lmKG49aSxpPXVbYSsxXShlLHQsciksIUZpKG8scy5jb25kaXRpb25hbHNbYV0pKG4saSkpcmV0dXJuITF9cmV0dXJuITB9fSxpLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7dGhpcy5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbihlLHQpe3JldHVybiByKGUsInBhcmFtc1siK3QrIl0iLG4pfSx0aGlzKX0saS5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBpKHRoaXMuY29uZGl0aW9uYWxzLnNsaWNlKCksdGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4uX2lmTm9kZShyKGUsInBhcmFtc1siK3QrIl0iLG4pKX0sdGhpcykpfSxpLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgaSh0aGlzLmNvbmRpdGlvbmFscyx0aGlzLnBhcmFtcyl9LGkucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbihuKXtmb3IodmFyIGk9biYmbi5wYXJlbnRoZXNpcz9uLnBhcmVudGhlc2lzOiJrZWVwIixhPVZjKHRoaXMsaSksZT10aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgcj1WYyhlLGkpO3JldHVybiJhbGwiPT09aXx8bnVsbCE9PXImJnI8PWE/IigiK2UudG9TdHJpbmcobikrIikiOmUudG9TdHJpbmcobil9KSx0PXtlcXVhbDoiPT0iLHVuZXF1YWw6IiE9IixzbWFsbGVyOiI8IixsYXJnZXI6Ij4iLHNtYWxsZXJFcToiPD0iLGxhcmdlckVxOiI+PSJ9LHI9ZVswXSxvPTA7bzx0aGlzLmNvbmRpdGlvbmFscy5sZW5ndGg7bysrKXIrPSIgIit0W3RoaXMuY29uZGl0aW9uYWxzW29dXSsiICIrZVtvKzFdO3JldHVybiByfSxpLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWF0aGpzOiJSZWxhdGlvbmFsTm9kZSIsY29uZGl0aW9uYWxzOnRoaXMuY29uZGl0aW9uYWxzLHBhcmFtczp0aGlzLnBhcmFtc319LGkuZnJvbUpTT049ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBpKGUuY29uZGl0aW9uYWxzLGUucGFyYW1zKX0saS5wcm90b3R5cGUudG9IVE1MPWZ1bmN0aW9uKG4pe2Zvcih2YXIgaT1uJiZuLnBhcmVudGhlc2lzP24ucGFyZW50aGVzaXM6ImtlZXAiLGE9VmModGhpcyxpKSxlPXRoaXMucGFyYW1zLm1hcChmdW5jdGlvbihlLHQpe3ZhciByPVZjKGUsaSk7cmV0dXJuImFsbCI9PT1pfHxudWxsIT09ciYmcjw9YT8nPHNwYW4gY2xhc3M9Im1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpcyI+KDwvc3Bhbj4nK2UudG9IVE1MKG4pKyc8c3BhbiBjbGFzcz0ibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzIj4pPC9zcGFuPic6ZS50b0hUTUwobil9KSx0PXtlcXVhbDoiPT0iLHVuZXF1YWw6IiE9IixzbWFsbGVyOiI8IixsYXJnZXI6Ij4iLHNtYWxsZXJFcToiPD0iLGxhcmdlckVxOiI+PSJ9LHI9ZVswXSxvPTA7bzx0aGlzLmNvbmRpdGlvbmFscy5sZW5ndGg7bysrKXIrPSc8c3BhbiBjbGFzcz0ibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWV4cGxpY2l0LWJpbmFyeS1vcGVyYXRvciI+JytPYmplY3QoSi5jKSh0W3RoaXMuY29uZGl0aW9uYWxzW29dXSkrIjwvc3Bhbj4iK2VbbysxXTtyZXR1cm4gcn0saS5wcm90b3R5cGUuX3RvVGV4PWZ1bmN0aW9uKG4pe2Zvcih2YXIgaT1uJiZuLnBhcmVudGhlc2lzP24ucGFyZW50aGVzaXM6ImtlZXAiLGE9VmModGhpcyxpKSxlPXRoaXMucGFyYW1zLm1hcChmdW5jdGlvbihlLHQpe3ZhciByPVZjKGUsaSk7cmV0dXJuImFsbCI9PT1pfHxudWxsIT09ciYmcjw9YT8iXFxsZWZ0KCIrZS50b1RleChuKSsiXHJpZ2h0KSI6ZS50b1RleChuKX0pLHQ9ZVswXSxyPTA7cjx0aGlzLmNvbmRpdGlvbmFscy5sZW5ndGg7cisrKXQrPW9mW3RoaXMuY29uZGl0aW9uYWxzW3JdXStlW3IrMV07cmV0dXJuIHR9LGl9LHtpc0NsYXNzOiEwLGlzTm9kZTohMH0pLENmPVsibWF0aCIsIj9Vbml0IiwiTm9kZSJdLFRmPU9iamVjdChzLmEpKCJTeW1ib2xOb2RlIixDZixmdW5jdGlvbihlKXt2YXIgbj1lLm1hdGgsbz1lLlVuaXQsdD1lLk5vZGU7ZnVuY3Rpb24gcyhlKXtyZXR1cm4hIW8mJm8uaXNWYWx1ZWxlc3NVbml0KGUpfWZ1bmN0aW9uIHIoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgcikpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3IiKTtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgIm5hbWUiJyk7dGhpcy5uYW1lPWV9cmV0dXJuKHIucHJvdG90eXBlPW5ldyB0KS50eXBlPSJTeW1ib2xOb2RlIixyLnByb3RvdHlwZS5pc1N5bWJvbE5vZGU9ITAsci5wcm90b3R5cGUuX2NvbXBpbGU9ZnVuY3Rpb24obixlKXt2YXIgaT10aGlzLm5hbWU7aWYoITA9PT1lW2ldKXJldHVybiBmdW5jdGlvbihlLHQscil7cmV0dXJuIHRbaV19O2lmKGkgaW4gbilyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3JldHVybiBGaShpIGluIGU/ZTpuLGkpfTt2YXIgYT1zKGkpO3JldHVybiBmdW5jdGlvbihlLHQscil7cmV0dXJuIGkgaW4gZT9GaShlLGkpOmE/bmV3IG8obnVsbCxpKTpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZGVmaW5lZCBzeW1ib2wgIitlKX0oaSl9fSxyLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUpe30sci5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsb25lKCl9LHIucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMubmFtZSl9LHIucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5uYW1lfSxyLnByb3RvdHlwZS50b0hUTUw9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KEouYykodGhpcy5uYW1lKTtyZXR1cm4idHJ1ZSI9PT10fHwiZmFsc2UiPT09dD8nPHNwYW4gY2xhc3M9Im1hdGgtc3ltYm9sIG1hdGgtYm9vbGVhbiI+Jyt0KyI8L3NwYW4+IjoiaSI9PT10Pyc8c3BhbiBjbGFzcz0ibWF0aC1zeW1ib2wgbWF0aC1pbWFnaW5hcnktc3ltYm9sIj4nK3QrIjwvc3Bhbj4iOiJJbmZpbml0eSI9PT10Pyc8c3BhbiBjbGFzcz0ibWF0aC1zeW1ib2wgbWF0aC1pbmZpbml0eS1zeW1ib2wiPicrdCsiPC9zcGFuPiI6Ik5hTiI9PT10Pyc8c3BhbiBjbGFzcz0ibWF0aC1zeW1ib2wgbWF0aC1uYW4tc3ltYm9sIj4nK3QrIjwvc3Bhbj4iOiJudWxsIj09PXQ/JzxzcGFuIGNsYXNzPSJtYXRoLXN5bWJvbCBtYXRoLW51bGwtc3ltYm9sIj4nK3QrIjwvc3Bhbj4iOiJ1bmRlZmluZWQiPT09dD8nPHNwYW4gY2xhc3M9Im1hdGgtc3ltYm9sIG1hdGgtdW5kZWZpbmVkLXN5bWJvbCI+Jyt0KyI8L3NwYW4+IjonPHNwYW4gY2xhc3M9Im1hdGgtc3ltYm9sIj4nK3QrIjwvc3Bhbj4ifSxyLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWF0aGpzOiJTeW1ib2xOb2RlIixuYW1lOnRoaXMubmFtZX19LHIuZnJvbUpTT049ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByKGUubmFtZSl9LHIucHJvdG90eXBlLl90b1RleD1mdW5jdGlvbihlKXt2YXIgdD0hMTt2b2lkIDA9PT1uW3RoaXMubmFtZV0mJnModGhpcy5uYW1lKSYmKHQ9ITApO3ZhciByPWZmKHRoaXMubmFtZSx0KTtyZXR1cm4iXFwiPT09clswXT9yOiIgIityfSxyfSx7aXNDbGFzczohMCxpc05vZGU6ITB9KTtmdW5jdGlvbiBfZihlKXtyZXR1cm4oX2Y9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBJZigpe3JldHVybihJZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBxZj1bIm1hdGgiLCJOb2RlIiwiU3ltYm9sTm9kZSJdLEJmPU9iamVjdChzLmEpKCJGdW5jdGlvbk5vZGUiLHFmLGZ1bmN0aW9uKGUpe3ZhciBpPWUubWF0aCx0PWUuTm9kZSxuPWUuU3ltYm9sTm9kZTtmdW5jdGlvbiBkKGUsdCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZCkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3IiKTtpZigic3RyaW5nIj09dHlwZW9mIGUmJihlPW5ldyBuKGUpKSwhT2JqZWN0KGllLncpKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQgYXMgcGFyYW1ldGVyICJmbiInKTtpZighQXJyYXkuaXNBcnJheSh0KXx8IXQuZXZlcnkoaWUudykpdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgY29udGFpbmluZyBOb2RlcyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyICJhcmdzIicpO3RoaXMuZm49ZSx0aGlzLmFyZ3M9dHx8W10sT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mbi5uYW1lfHwiIn0uYmluZCh0aGlzKSxzZXQ6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBhc3NpZ24gYSBuZXcgbmFtZSwgbmFtZSBpcyByZWFkLW9ubHkiKX19KTtmdW5jdGlvbiByKCl7dGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eSBgRnVuY3Rpb25Ob2RlLm9iamVjdGAgaXMgZGVwcmVjYXRlZCwgdXNlIGBGdW5jdGlvbk5vZGUuZm5gIGluc3RlYWQiKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywib2JqZWN0Iix7Z2V0OnIsc2V0OnJ9KX0oZC5wcm90b3R5cGU9bmV3IHQpLnR5cGU9IkZ1bmN0aW9uTm9kZSIsZC5wcm90b3R5cGUuaXNGdW5jdGlvbk5vZGU9ITAsZC5wcm90b3R5cGUuX2NvbXBpbGU9ZnVuY3Rpb24oaSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBkKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJObyB2YWxpZCBGdW5jdGlvbk5vZGUiKTt2YXIgYT1PYmplY3QoSS5tKSh0aGlzLmFyZ3MsZnVuY3Rpb24oZSl7cmV0dXJuIGUuX2NvbXBpbGUoaSx0KX0pO2lmKE9iamVjdChpZS5KKSh0aGlzLmZuKSl7dmFyIG89dGhpcy5mbi5uYW1lLHM9byBpbiBpP0ZpKGksbyk6dm9pZCAwO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBzJiYhMD09PXMucmF3QXJncyl7dmFyIHI9dGhpcy5hcmdzO3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybihvIGluIGU/RmkoZSxvKTpzKShyLGksSWYoe30sZSx0KSl9fWlmKDE9PT1hLmxlbmd0aCl7dmFyIG49YVswXTtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3JldHVybihvIGluIGU/RmkoZSxvKTpzKShuKGUsdCxyKSl9fWlmKDIhPT1hLmxlbmd0aClyZXR1cm4gZnVuY3Rpb24odCxyLG4pe3JldHVybihvIGluIHQ/RmkodCxvKTpzKS5hcHBseShudWxsLE9iamVjdChJLm0pKGEsZnVuY3Rpb24oZSl7cmV0dXJuIGUodCxyLG4pfSkpfTt2YXIgdT1hWzBdLGM9YVsxXTtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3JldHVybihvIGluIGU/RmkoZSxvKTpzKSh1KGUsdCxyKSxjKGUsdCxyKSl9fWlmKE9iamVjdChpZS5hKSh0aGlzLmZuKSYmT2JqZWN0KGllLnUpKHRoaXMuZm4uaW5kZXgpJiZ0aGlzLmZuLmluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSl7dmFyIGY9dGhpcy5mbi5vYmplY3QuX2NvbXBpbGUoaSx0KSxsPXRoaXMuZm4uaW5kZXguZ2V0T2JqZWN0UHJvcGVydHkoKSxwPXRoaXMuYXJncztyZXR1cm4gZnVuY3Rpb24odCxyLG4pe3ZhciBlPWYodCxyLG4pO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCFIaShlLHQpKXRocm93IG5ldyBFcnJvcignTm8gYWNjZXNzIHRvIG1ldGhvZCAiJyt0KyciJyl9KGUsbCksZVtsXSYmZVtsXS5yYXdBcmdzP2VbbF0ocCxpLElmKHt9LHQscikpOmVbbF0uYXBwbHkoZSxPYmplY3QoSS5tKShhLGZ1bmN0aW9uKGUpe3JldHVybiBlKHQscixuKX0pKX19dmFyIG09dGhpcy5mbi5fY29tcGlsZShpLHQpLGg9dGhpcy5hcmdzO3JldHVybiBmdW5jdGlvbih0LHIsbil7dmFyIGU9bSh0LHIsbik7cmV0dXJuIGUmJmUucmF3QXJncz9lKGgsaSxJZih7fSx0LHIpKTplLmFwcGx5KGUsT2JqZWN0KEkubSkoYSxmdW5jdGlvbihlKXtyZXR1cm4gZSh0LHIsbil9KSl9fSxkLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUpe2UodGhpcy5mbiwiZm4iLHRoaXMpO2Zvcih2YXIgdD0wO3Q8dGhpcy5hcmdzLmxlbmd0aDt0KyspZSh0aGlzLmFyZ3NbdF0sImFyZ3NbIit0KyJdIix0aGlzKX0sZC5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl9pZk5vZGUoZSh0aGlzLmZuLCJmbiIsdGhpcykpLHI9W10sbj0wO248dGhpcy5hcmdzLmxlbmd0aDtuKyspcltuXT10aGlzLl9pZk5vZGUoZSh0aGlzLmFyZ3Nbbl0sImFyZ3NbIituKyJdIix0aGlzKSk7cmV0dXJuIG5ldyBkKHQscil9LGQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkKHRoaXMuZm4sdGhpcy5hcmdzLnNsaWNlKDApKX07dmFyIGE9ZC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gbyhlLHQscil7Zm9yKHZhciBuLGk9IiIsYT1uZXcgUmVnRXhwKCJcXCQoPzpcXHsoW2Etel9dW2Etel8wLTldKikoPzpcXFsoWzAtOV0rKVxcXSk/XFx9fFxcJCkiLCJpZyIpLG89MDtudWxsIT09KG49YS5leGVjKGUpKTspaWYoaSs9ZS5zdWJzdHJpbmcobyxuLmluZGV4KSxvPW4uaW5kZXgsIiQkIj09PW5bMF0paSs9IiQiLG8rKztlbHNle28rPW5bMF0ubGVuZ3RoO3ZhciBzPXRbblsxXV07aWYoIXMpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJUZW1wbGF0ZTogUHJvcGVydHkgIituWzFdKyIgZG9lcyBub3QgZXhpc3QuIik7aWYodm9pZCAwPT09blsyXSlzd2l0Y2goX2Yocykpe2Nhc2Uic3RyaW5nIjppKz1zO2JyZWFrO2Nhc2Uib2JqZWN0IjppZihPYmplY3QoaWUudykocykpaSs9cy50b1RleChyKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KHMpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRlbXBsYXRlOiAiK25bMV0rIiBoYXMgdG8gYmUgYSBOb2RlLCBTdHJpbmcgb3IgYXJyYXkgb2YgTm9kZXMiKTtpKz1zLm1hcChmdW5jdGlvbihlLHQpe2lmKE9iamVjdChpZS53KShlKSlyZXR1cm4gZS50b1RleChyKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJUZW1wbGF0ZTogIituWzFdKyJbIit0KyJdIGlzIG5vdCBhIE5vZGUuIil9KS5qb2luKCIsIil9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJUZW1wbGF0ZTogIituWzFdKyIgaGFzIHRvIGJlIGEgTm9kZSwgU3RyaW5nIG9yIGFycmF5IG9mIE5vZGVzIil9ZWxzZXtpZighT2JqZWN0KGllLncpKHNbblsyXV0mJnNbblsyXV0pKXRocm93IG5ldyBUeXBlRXJyb3IoIlRlbXBsYXRlOiAiK25bMV0rIlsiK25bMl0rIl0gaXMgbm90IGEgTm9kZS4iKTtpKz1zW25bMl1dLnRvVGV4KHIpfX1yZXR1cm4gaSs9ZS5zbGljZShvKX1kLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlKXt2YXIgdCxyPXRoaXMuZm4udG9TdHJpbmcoZSk7cmV0dXJuIGUmJiJvYmplY3QiPT09X2YoZS5oYW5kbGVyKSYmT2JqZWN0KGFlLmYpKGUuaGFuZGxlcixyKSYmKHQ9ZS5oYW5kbGVyW3JdKHRoaXMsZSkpLHZvaWQgMCE9PXQ/dDphLmNhbGwodGhpcyxlKX0sZC5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYXJncy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9TdHJpbmcodCl9KTtyZXR1cm4oT2JqZWN0KGllLnEpKHRoaXMuZm4pPyIoIit0aGlzLmZuLnRvU3RyaW5nKHQpKyIpIjp0aGlzLmZuLnRvU3RyaW5nKHQpKSsiKCIrZS5qb2luKCIsICIpKyIpIn0sZC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue21hdGhqczoiRnVuY3Rpb25Ob2RlIixmbjp0aGlzLmZuLGFyZ3M6dGhpcy5hcmdzfX0sZC5mcm9tSlNPTj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGQoZS5mbixlLmFyZ3MpfSxkLnByb3RvdHlwZS50b0hUTUw9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5hcmdzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS50b0hUTUwodCl9KTtyZXR1cm4nPHNwYW4gY2xhc3M9Im1hdGgtZnVuY3Rpb24iPicrT2JqZWN0KEouYykodGhpcy5mbikrJzwvc3Bhbj48c3BhbiBjbGFzcz0ibWF0aC1wYXJhbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzIj4oPC9zcGFuPicrZS5qb2luKCc8c3BhbiBjbGFzcz0ibWF0aC1zZXBhcmF0b3IiPiw8L3NwYW4+JykrJzxzcGFuIGNsYXNzPSJtYXRoLXBhcmFudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXMiPik8L3NwYW4+J307dmFyIHI9ZC5wcm90b3R5cGUudG9UZXg7cmV0dXJuIGQucHJvdG90eXBlLnRvVGV4PWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBlJiYib2JqZWN0Ij09PV9mKGUuaGFuZGxlcikmJk9iamVjdChhZS5mKShlLmhhbmRsZXIsdGhpcy5uYW1lKSYmKHQ9ZS5oYW5kbGVyW3RoaXMubmFtZV0odGhpcyxlKSksdm9pZCAwIT09dD90OnIuY2FsbCh0aGlzLGUpfSxkLnByb3RvdHlwZS5fdG9UZXg9ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMuYXJncy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9UZXgodCl9KTtzd2l0Y2goc2ZbdGhpcy5uYW1lXSYmKGU9c2ZbdGhpcy5uYW1lXSksIWlbdGhpcy5uYW1lXXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGlbdGhpcy5uYW1lXS50b1RleCYmIm9iamVjdCIhPT1fZihpW3RoaXMubmFtZV0udG9UZXgpJiYic3RyaW5nIiE9dHlwZW9mIGlbdGhpcy5uYW1lXS50b1RleHx8KGU9aVt0aGlzLm5hbWVdLnRvVGV4KSxfZihlKSl7Y2FzZSJmdW5jdGlvbiI6cj1lKHRoaXMsdCk7YnJlYWs7Y2FzZSJzdHJpbmciOnI9byhlLHRoaXMsdCk7YnJlYWs7Y2FzZSJvYmplY3QiOnN3aXRjaChfZihlW24ubGVuZ3RoXSkpe2Nhc2UiZnVuY3Rpb24iOnI9ZVtuLmxlbmd0aF0odGhpcyx0KTticmVhaztjYXNlInN0cmluZyI6cj1vKGVbbi5sZW5ndGhdLHRoaXMsdCl9fXJldHVybiB2b2lkIDAhPT1yP3I6bygiXFxtYXRocm17JHtuYW1lfX1cXGxlZnQoJHthcmdzfVxccmlnaHQpIix0aGlzLHQpfSxkLnByb3RvdHlwZS5nZXRJZGVudGlmaWVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZSsiOiIrdGhpcy5uYW1lfSxkfSx7aXNDbGFzczohMCxpc05vZGU6ITB9KTtmdW5jdGlvbiBrZigpe3JldHVybihrZj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciB6Zj1bInR5cGVkIiwibnVtZXJpYyIsImNvbmZpZyIsIkFjY2Vzc29yTm9kZSIsIkFycmF5Tm9kZSIsIkFzc2lnbm1lbnROb2RlIiwiQmxvY2tOb2RlIiwiQ29uZGl0aW9uYWxOb2RlIiwiQ29uc3RhbnROb2RlIiwiRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSIsIkZ1bmN0aW9uTm9kZSIsIkluZGV4Tm9kZSIsIk9iamVjdE5vZGUiLCJPcGVyYXRvck5vZGUiLCJQYXJlbnRoZXNpc05vZGUiLCJSYW5nZU5vZGUiLCJSZWxhdGlvbmFsTm9kZSIsIlN5bWJvbE5vZGUiXSxEZj1PYmplY3Qocy5hKSgicGFyc2UiLHpmLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscz1lLm51bWVyaWMsdT1lLmNvbmZpZyxpPWUuQWNjZXNzb3JOb2RlLGM9ZS5BcnJheU5vZGUsbz1lLkFzc2lnbm1lbnROb2RlLGE9ZS5CbG9ja05vZGUsZj1lLkNvbmRpdGlvbmFsTm9kZSxsPWUuQ29uc3RhbnROb2RlLHA9ZS5GdW5jdGlvbkFzc2lnbm1lbnROb2RlLG09ZS5GdW5jdGlvbk5vZGUsaD1lLkluZGV4Tm9kZSxkPWUuT2JqZWN0Tm9kZSx5PWUuT3BlcmF0b3JOb2RlLGc9ZS5QYXJlbnRoZXNpc05vZGUsbj1lLlJhbmdlTm9kZSx2PWUuUmVsYXRpb25hbE5vZGUsYj1lLlN5bWJvbE5vZGUseD10KCJwYXJzZSIse3N0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4gayhlLHt9KX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gcihlLHt9KX0sInN0cmluZywgT2JqZWN0IjpmdW5jdGlvbihlLHQpe3JldHVybiBrKGUsdm9pZCAwIT09dC5ub2Rlcz90Lm5vZGVzOnt9KX0sIkFycmF5IHwgTWF0cml4LCBPYmplY3QiOnJ9KTtmdW5jdGlvbiByKGUpe3ZhciB0PTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxyPXZvaWQgMCE9PXQubm9kZXM/dC5ub2Rlczp7fTtyZXR1cm4gb2UoZSxmdW5jdGlvbihlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3RyaW5nIGV4cGVjdGVkIik7cmV0dXJuIGsoZSxyKX0pfXZhciB3PXtOVUxMOjAsREVMSU1JVEVSOjEsTlVNQkVSOjIsU1lNQk9MOjMsVU5LTk9XTjo0fSxOPXsiLCI6ITAsIigiOiEwLCIpIjohMCwiWyI6ITAsIl0iOiEwLCJ7IjohMCwifSI6ITAsJyInOiEwLCInIjohMCwiOyI6ITAsIisiOiEwLCItIjohMCwiKiI6ITAsIi4qIjohMCwiLyI6ITAsIi4vIjohMCwiJSI6ITAsIl4iOiEwLCIuXiI6ITAsIn4iOiEwLCIhIjohMCwiJiI6ITAsInwiOiEwLCJefCI6ITAsIj0iOiEwLCI6IjohMCwiPyI6ITAsIj09IjohMCwiIT0iOiEwLCI8IjohMCwiPiI6ITAsIjw9IjohMCwiPj0iOiEwLCI8PCI6ITAsIj4+IjohMCwiPj4+IjohMH0sTz17bW9kOiEwLHRvOiEwLGluOiEwLGFuZDohMCx4b3I6ITAsb3I6ITAsbm90OiEwfSxNPXt0cnVlOiEwLGZhbHNlOiExLG51bGw6bnVsbCx1bmRlZmluZWQ6dm9pZCAwfSxqPVsiTmFOIiwiSW5maW5pdHkiXTtmdW5jdGlvbiBFKGUsdCl7cmV0dXJuIGUuZXhwcmVzc2lvbi5zdWJzdHIoZS5pbmRleCx0KX1mdW5jdGlvbiBTKGUpe3JldHVybiBFKGUsMSl9ZnVuY3Rpb24gQShlKXtlLmluZGV4Kyt9ZnVuY3Rpb24gQyhlKXtyZXR1cm4gZS5leHByZXNzaW9uLmNoYXJBdChlLmluZGV4LTEpfWZ1bmN0aW9uIFQoZSl7cmV0dXJuIGUuZXhwcmVzc2lvbi5jaGFyQXQoZS5pbmRleCsxKX1mdW5jdGlvbiBfKGUpe2ZvcihlLnRva2VuVHlwZT13Lk5VTEwsZS50b2tlbj0iIixlLmNvbW1lbnQ9IiI7eC5pc1doaXRlc3BhY2UoUyhlKSxlLm5lc3RpbmdMZXZlbCk7KUEoZSk7aWYoIiMiPT09UyhlKSlmb3IoOyJcbiIhPT1TKGUpJiYiIiE9PVMoZSk7KWUuY29tbWVudCs9UyhlKSxBKGUpO2lmKCIiIT09UyhlKSl7aWYoIlxuIj09PVMoZSkmJiFlLm5lc3RpbmdMZXZlbClyZXR1cm4gZS50b2tlblR5cGU9dy5ERUxJTUlURVIsZS50b2tlbj1TKGUpLHZvaWQgQShlKTt2YXIgdD1TKGUpLHI9RShlLDIpLG49RShlLDMpO2lmKDM9PT1uLmxlbmd0aCYmTltuXSlyZXR1cm4gZS50b2tlblR5cGU9dy5ERUxJTUlURVIsZS50b2tlbj1uLEEoZSksQShlKSx2b2lkIEEoZSk7aWYoMj09PXIubGVuZ3RoJiZOW3JdKXJldHVybiBlLnRva2VuVHlwZT13LkRFTElNSVRFUixlLnRva2VuPXIsQShlKSx2b2lkIEEoZSk7aWYoTlt0XSlyZXR1cm4gZS50b2tlblR5cGU9dy5ERUxJTUlURVIsZS50b2tlbj10LHZvaWQgQShlKTtpZih4LmlzRGlnaXREb3QodCkpe2lmKGUudG9rZW5UeXBlPXcuTlVNQkVSLCIuIj09PVMoZSkpZS50b2tlbis9UyhlKSxBKGUpLHguaXNEaWdpdChTKGUpKXx8KGUudG9rZW5UeXBlPXcuREVMSU1JVEVSKTtlbHNle2Zvcig7eC5pc0RpZ2l0KFMoZSkpOyllLnRva2VuKz1TKGUpLEEoZSk7eC5pc0RlY2ltYWxNYXJrKFMoZSksVChlKSkmJihlLnRva2VuKz1TKGUpLEEoZSkpfWZvcig7eC5pc0RpZ2l0KFMoZSkpOyllLnRva2VuKz1TKGUpLEEoZSk7aWYoIkUiPT09UyhlKXx8ImUiPT09UyhlKSlpZih4LmlzRGlnaXQoVChlKSl8fCItIj09PVQoZSl8fCIrIj09PVQoZSkpe2lmKGUudG9rZW4rPVMoZSksQShlKSwiKyIhPT1TKGUpJiYiLSIhPT1TKGUpfHwoZS50b2tlbis9UyhlKSxBKGUpKSwheC5pc0RpZ2l0KFMoZSkpKXRocm93IHJlKGUsJ0RpZ2l0IGV4cGVjdGVkLCBnb3QgIicrUyhlKSsnIicpO2Zvcig7eC5pc0RpZ2l0KFMoZSkpOyllLnRva2VuKz1TKGUpLEEoZSk7aWYoeC5pc0RlY2ltYWxNYXJrKFMoZSksVChlKSkpdGhyb3cgcmUoZSwnRGlnaXQgZXhwZWN0ZWQsIGdvdCAiJytTKGUpKyciJyl9ZWxzZSBpZigiLiI9PT1UKGUpKXRocm93IEEoZSkscmUoZSwnRGlnaXQgZXhwZWN0ZWQsIGdvdCAiJytTKGUpKyciJyl9ZWxzZXtpZigheC5pc0FscGhhKFMoZSksQyhlKSxUKGUpKSl7Zm9yKGUudG9rZW5UeXBlPXcuVU5LTk9XTjsiIiE9PVMoZSk7KWUudG9rZW4rPVMoZSksQShlKTt0aHJvdyByZShlLCdTeW50YXggZXJyb3IgaW4gcGFydCAiJytlLnRva2VuKyciJyl9Zm9yKDt4LmlzQWxwaGEoUyhlKSxDKGUpLFQoZSkpfHx4LmlzRGlnaXQoUyhlKSk7KWUudG9rZW4rPVMoZSksQShlKTtPYmplY3QoYWUuZikoTyxlLnRva2VuKT9lLnRva2VuVHlwZT13LkRFTElNSVRFUjplLnRva2VuVHlwZT13LlNZTUJPTH19ZWxzZSBlLnRva2VuVHlwZT13LkRFTElNSVRFUn1mdW5jdGlvbiBJKGUpe2Zvcig7XyhlKSwiXG4iPT09ZS50b2tlbjspO31mdW5jdGlvbiBxKGUpe2UubmVzdGluZ0xldmVsKyt9ZnVuY3Rpb24gQihlKXtlLm5lc3RpbmdMZXZlbC0tfWZ1bmN0aW9uIGsoZSx0KXt2YXIgcj17ZXh0cmFOb2Rlczp7fSxleHByZXNzaW9uOiIiLGNvbW1lbnQ6IiIsaW5kZXg6MCx0b2tlbjoiIix0b2tlblR5cGU6dy5OVUxMLG5lc3RpbmdMZXZlbDowLGNvbmRpdGlvbmFsTGV2ZWw6bnVsbH07a2Yocix7ZXhwcmVzc2lvbjplLGV4dHJhTm9kZXM6dH0pLF8ocik7dmFyIG49ZnVuY3Rpb24oZSl7dmFyIHQscixuPVtdOyIiIT09ZS50b2tlbiYmIlxuIiE9PWUudG9rZW4mJiI7IiE9PWUudG9rZW4mJigodD16KGUpKS5jb21tZW50PWUuY29tbWVudCk7Zm9yKDsiXG4iPT09ZS50b2tlbnx8IjsiPT09ZS50b2tlbjspMD09PW4ubGVuZ3RoJiZ0JiYocj0iOyIhPT1lLnRva2VuLG4ucHVzaCh7bm9kZTp0LHZpc2libGU6cn0pKSxfKGUpLCJcbiIhPT1lLnRva2VuJiYiOyIhPT1lLnRva2VuJiYiIiE9PWUudG9rZW4mJigodD16KGUpKS5jb21tZW50PWUuY29tbWVudCxyPSI7IiE9PWUudG9rZW4sbi5wdXNoKHtub2RlOnQsdmlzaWJsZTpyfSkpO3JldHVybiAwPG4ubGVuZ3RoP25ldyBhKG4pOih0fHwoKHQ9bmV3IGwodm9pZCAwKSkuY29tbWVudD1lLmNvbW1lbnQpLHQpfShyKTtpZigiIiE9PXIudG9rZW4pdGhyb3cgci50b2tlblR5cGU9PT13LkRFTElNSVRFUj9uZShyLCJVbmV4cGVjdGVkIG9wZXJhdG9yICIrci50b2tlbik6cmUociwnVW5leHBlY3RlZCBwYXJ0ICInK3IudG9rZW4rJyInKTtyZXR1cm4gbn1mdW5jdGlvbiB6KGUpe3ZhciB0LHIsbixpLGE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9RChlKTtmb3IoOyJvciI9PT1lLnRva2VuOylJKGUpLHQ9bmV3IHkoIm9yIiwib3IiLFt0LEQoZSldKTtyZXR1cm4gdH0oZSk7Zm9yKDsiPyI9PT1lLnRva2VuOyl7dmFyIHI9ZS5jb25kaXRpb25hbExldmVsO2UuY29uZGl0aW9uYWxMZXZlbD1lLm5lc3RpbmdMZXZlbCxJKGUpO3ZhciBuPXQsaT16KGUpO2lmKCI6IiE9PWUudG9rZW4pdGhyb3cgcmUoZSwiRmFsc2UgcGFydCBvZiBjb25kaXRpb25hbCBleHByZXNzaW9uIGV4cGVjdGVkIik7ZS5jb25kaXRpb25hbExldmVsPW51bGwsSShlKTt2YXIgYT16KGUpO3Q9bmV3IGYobixpLGEpLGUuY29uZGl0aW9uYWxMZXZlbD1yfXJldHVybiB0fShlKTtpZigiPSIhPT1lLnRva2VuKXJldHVybiBhO2lmKE9iamVjdChpZS5KKShhKSlyZXR1cm4gdD1hLm5hbWUsSShlKSxuPXooZSksbmV3IG8obmV3IGIodCksbik7aWYoT2JqZWN0KGllLmEpKGEpKXJldHVybiBJKGUpLG49eihlKSxuZXcgbyhhLm9iamVjdCxhLmluZGV4LG4pO2lmKE9iamVjdChpZS5yKShhKSYmT2JqZWN0KGllLkopKGEuZm4pJiYoaT0hMCxyPVtdLHQ9YS5uYW1lLGEuYXJncy5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7T2JqZWN0KGllLkopKGUpP3JbdF09ZS5uYW1lOmk9ITF9KSxpKSlyZXR1cm4gSShlKSxuPXooZSksbmV3IHAodCxyLG4pO3Rocm93IHJlKGUsIkludmFsaWQgbGVmdCBoYW5kIHNpZGUgb2YgYXNzaWdubWVudCBvcGVyYXRvciA9Iil9ZnVuY3Rpb24gRChlKXtmb3IodmFyIHQ9UihlKTsieG9yIj09PWUudG9rZW47KUkoZSksdD1uZXcgeSgieG9yIiwieG9yIixbdCxSKGUpXSk7cmV0dXJuIHR9ZnVuY3Rpb24gUihlKXtmb3IodmFyIHQ9UChlKTsiYW5kIj09PWUudG9rZW47KUkoZSksdD1uZXcgeSgiYW5kIiwiYW5kIixbdCxQKGUpXSk7cmV0dXJuIHR9ZnVuY3Rpb24gUChlKXtmb3IodmFyIHQ9RihlKTsifCI9PT1lLnRva2VuOylJKGUpLHQ9bmV3IHkoInwiLCJiaXRPciIsW3QsRihlKV0pO3JldHVybiB0fWZ1bmN0aW9uIEYoZSl7Zm9yKHZhciB0PVUoZSk7Il58Ij09PWUudG9rZW47KUkoZSksdD1uZXcgeSgiXnwiLCJiaXRYb3IiLFt0LFUoZSldKTtyZXR1cm4gdH1mdW5jdGlvbiBVKGUpe2Zvcih2YXIgdD1MKGUpOyImIj09PWUudG9rZW47KUkoZSksdD1uZXcgeSgiJiIsImJpdEFuZCIsW3QsTChlKV0pO3JldHVybiB0fWZ1bmN0aW9uIEwoZSl7Zm9yKHZhciB0PVtIKGUpXSxyPVtdLG49eyI9PSI6ImVxdWFsIiwiIT0iOiJ1bmVxdWFsIiwiPCI6InNtYWxsZXIiLCI+IjoibGFyZ2VyIiwiPD0iOiJzbWFsbGVyRXEiLCI+PSI6ImxhcmdlckVxIn07T2JqZWN0KGFlLmYpKG4sZS50b2tlbik7KXt2YXIgaT17bmFtZTplLnRva2VuLGZuOm5bZS50b2tlbl19O3IucHVzaChpKSxJKGUpLHQucHVzaChIKGUpKX1yZXR1cm4gMT09PXQubGVuZ3RoP3RbMF06Mj09PXQubGVuZ3RoP25ldyB5KHJbMF0ubmFtZSxyWzBdLmZuLHQpOm5ldyB2KHIubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmZufSksdCl9ZnVuY3Rpb24gSChlKXt2YXIgdCxyLG4saTt0PSQoZSk7Zm9yKHZhciBhPXsiPDwiOiJsZWZ0U2hpZnQiLCI+PiI6InJpZ2h0QXJpdGhTaGlmdCIsIj4+PiI6InJpZ2h0TG9nU2hpZnQifTtPYmplY3QoYWUuZikoYSxlLnRva2VuKTspbj1hW3I9ZS50b2tlbl0sSShlKSxpPVt0LCQoZSldLHQ9bmV3IHkocixuLGkpO3JldHVybiB0fWZ1bmN0aW9uICQoZSl7dmFyIHQscixuLGk7dD1HKGUpO2Zvcih2YXIgYT17dG86InRvIixpbjoidG8ifTtPYmplY3QoYWUuZikoYSxlLnRva2VuKTspbj1hW3I9ZS50b2tlbl0sSShlKSx0PSJpbiI9PT1yJiYiIj09PWUudG9rZW4/bmV3IHkoIioiLCJtdWx0aXBseSIsW3QsbmV3IGIoImluIildLCEwKTooaT1bdCxHKGUpXSxuZXcgeShyLG4saSkpO3JldHVybiB0fWZ1bmN0aW9uIEcoZSl7dmFyIHQscj1bXTtpZih0PSI6Ij09PWUudG9rZW4/bmV3IGwoMSk6WihlKSwiOiI9PT1lLnRva2VuJiZlLmNvbmRpdGlvbmFsTGV2ZWwhPT1lLm5lc3RpbmdMZXZlbCl7Zm9yKHIucHVzaCh0KTsiOiI9PT1lLnRva2VuJiZyLmxlbmd0aDwzOylJKGUpLCIpIj09PWUudG9rZW58fCJdIj09PWUudG9rZW58fCIsIj09PWUudG9rZW58fCIiPT09ZS50b2tlbj9yLnB1c2gobmV3IGIoImVuZCIpKTpyLnB1c2goWihlKSk7dD0zPT09ci5sZW5ndGg/bmV3IG4oclswXSxyWzJdLHJbMV0pOm5ldyBuKHJbMF0sclsxXSl9cmV0dXJuIHR9ZnVuY3Rpb24gWihlKXt2YXIgdCxyLG4saTt0PVYoZSk7Zm9yKHZhciBhPXsiKyI6ImFkZCIsIi0iOiJzdWJ0cmFjdCJ9O09iamVjdChhZS5mKShhLGUudG9rZW4pOyluPWFbcj1lLnRva2VuXSxJKGUpLGk9W3QsVihlKV0sdD1uZXcgeShyLG4saSk7cmV0dXJuIHR9ZnVuY3Rpb24gVihlKXt2YXIgdCxyLG4saTtyPXQ9SihlKTtmb3IodmFyIGE9eyIqIjoibXVsdGlwbHkiLCIuKiI6ImRvdE11bHRpcGx5IiwiLyI6ImRpdmlkZSIsIi4vIjoiZG90RGl2aWRlIiwiJSI6Im1vZCIsbW9kOiJtb2QifTtPYmplY3QoYWUuZikoYSxlLnRva2VuKTspaT1hW249ZS50b2tlbl0sSShlKSxyPUooZSksdD1uZXcgeShuLGksW3Qscl0pO3JldHVybiB0fWZ1bmN0aW9uIEooZSl7dmFyIHQscjtmb3Iocj10PVcoZSk7ZS50b2tlblR5cGU9PT13LlNZTUJPTHx8ImluIj09PWUudG9rZW4mJk9iamVjdChpZS5sKSh0KXx8IShlLnRva2VuVHlwZSE9PXcuTlVNQkVSfHxPYmplY3QoaWUubCkocil8fE9iamVjdChpZS5CKShyKSYmIiEiIT09ci5vcCl8fCIoIj09PWUudG9rZW47KXI9VyhlKSx0PW5ldyB5KCIqIiwibXVsdGlwbHkiLFt0LHJdLCEwKTtyZXR1cm4gdH1mdW5jdGlvbiBXKGUpe2Zvcih2YXIgdD1ZKGUpLHI9dCxuPVtdOyIvIj09PWUudG9rZW4mJk9iamVjdChpZS5sKShyKTspe2lmKG4ucHVzaChrZih7fSxlKSksSShlKSxlLnRva2VuVHlwZSE9PXcuTlVNQkVSKXtrZihlLG4ucG9wKCkpO2JyZWFrfWlmKG4ucHVzaChrZih7fSxlKSksSShlKSxlLnRva2VuVHlwZSE9PXcuU1lNQk9MJiYiKCIhPT1lLnRva2VuKXtuLnBvcCgpLGtmKGUsbi5wb3AoKSk7YnJlYWt9a2YoZSxuLnBvcCgpKSxuLnBvcCgpLHI9WShlKSx0PW5ldyB5KCIvIiwiZGl2aWRlIixbdCxyXSl9cmV0dXJuIHR9ZnVuY3Rpb24gWShlKXt2YXIgdCxyLG4saT17Ii0iOiJ1bmFyeU1pbnVzIiwiKyI6InVuYXJ5UGx1cyIsIn4iOiJiaXROb3QiLG5vdDoibm90In07cmV0dXJuIE9iamVjdChhZS5mKShpLGUudG9rZW4pPyhuPWlbZS50b2tlbl0sdD1lLnRva2VuLEkoZSkscj1bWShlKV0sbmV3IHkodCxuLHIpKTpmdW5jdGlvbihlKXt2YXIgdCxyLG4saTt0PWZ1bmN0aW9uKGUpe3ZhciB0LHIsbjt0PWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2lmKGUudG9rZW5UeXBlPT09dy5TWU1CT0wmJk9iamVjdChhZS5mKShlLmV4dHJhTm9kZXMsZS50b2tlbikpe3ZhciByPWUuZXh0cmFOb2Rlc1tlLnRva2VuXTtpZihfKGUpLCIoIj09PWUudG9rZW4pe2lmKHQ9W10scShlKSxfKGUpLCIpIiE9PWUudG9rZW4pZm9yKHQucHVzaCh6KGUpKTsiLCI9PT1lLnRva2VuOylfKGUpLHQucHVzaCh6KGUpKTtpZigiKSIhPT1lLnRva2VuKXRocm93IHJlKGUsIlBhcmVudGhlc2lzICkgZXhwZWN0ZWQiKTtCKGUpLF8oZSl9cmV0dXJuIG5ldyByKHQpfXJldHVybiBmdW5jdGlvbihlKXt2YXIgdCxyO2lmKGUudG9rZW5UeXBlPT09dy5TWU1CT0x8fGUudG9rZW5UeXBlPT09dy5ERUxJTUlURVImJmUudG9rZW4gaW4gTylyZXR1cm4gcj1lLnRva2VuLF8oZSksdD1PYmplY3QoYWUuZikoTSxyKT9uZXcgbChNW3JdKTotMSE9PWouaW5kZXhPZihyKT9uZXcgbChzKHIsIm51bWJlciIpKTpuZXcgYihyKSx0PVgoZSx0KTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQscjtyZXR1cm4nIichPT1lLnRva2VuP2Z1bmN0aW9uKGUpe3ZhciB0LHI7cmV0dXJuIiciIT09ZS50b2tlbj9mdW5jdGlvbihlKXt2YXIgdCxyLG4saTtpZigiWyIhPT1lLnRva2VuKXJldHVybiBmdW5jdGlvbihlKXtpZigieyIhPT1lLnRva2VuKXJldHVybiBmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gZS50b2tlblR5cGUhPT13Lk5VTUJFUj9mdW5jdGlvbihlKXt2YXIgdDtpZigiKCIhPT1lLnRva2VuKXJldHVybiBmdW5jdGlvbihlKXt0aHJvdyIiPT09ZS50b2tlbj9yZShlLCJVbmV4cGVjdGVkIGVuZCBvZiBleHByZXNzaW9uIik6cmUoZSwiVmFsdWUgZXhwZWN0ZWQiKX0oZSk7aWYocShlKSxfKGUpLHQ9eihlKSwiKSI9PT1lLnRva2VuKXJldHVybiBCKGUpLF8oZSksdD1uZXcgZyh0KSx0PVgoZSx0KTt0aHJvdyByZShlLCJQYXJlbnRoZXNpcyApIGV4cGVjdGVkIil9KGUpOih0PWUudG9rZW4sXyhlKSxuZXcgbChzKHQsdS5udW1iZXIpKSl9KGUpO3ZhciB0O3EoZSk7dmFyIHI9e307ZG97aWYoXyhlKSwifSIhPT1lLnRva2VuKXtpZignIic9PT1lLnRva2VuKXQ9UShlKTtlbHNlIGlmKCInIj09PWUudG9rZW4pdD1LKGUpO2Vsc2V7aWYoZS50b2tlblR5cGUhPT13LlNZTUJPTCl0aHJvdyByZShlLCJTeW1ib2wgb3Igc3RyaW5nIGV4cGVjdGVkIGFzIG9iamVjdCBrZXkiKTt0PWUudG9rZW4sXyhlKX1pZigiOiIhPT1lLnRva2VuKXRocm93IHJlKGUsIkNvbG9uIDogZXhwZWN0ZWQgYWZ0ZXIgb2JqZWN0IGtleSIpO18oZSksclt0XT16KGUpfX13aGlsZSgiLCI9PT1lLnRva2VuKTtpZigifSIhPT1lLnRva2VuKXRocm93IHJlKGUsIkNvbW1hICwgb3IgYnJhY2tldCB9IGV4cGVjdGVkIGFmdGVyIG9iamVjdCB2YWx1ZSIpO0IoZSksXyhlKTt2YXIgbj1uZXcgZChyKTtyZXR1cm4gbj1YKGUsbil9KGUpO2lmKHEoZSksXyhlKSwiXSIhPT1lLnRva2VuKXt2YXIgYT1lZShlKTtpZigiOyI9PT1lLnRva2VuKXtmb3Iobj0xLHI9W2FdOyI7Ij09PWUudG9rZW47KV8oZSkscltuXT1lZShlKSxuKys7aWYoIl0iIT09ZS50b2tlbil0aHJvdyByZShlLCJFbmQgb2YgbWF0cml4IF0gZXhwZWN0ZWQiKTtCKGUpLF8oZSksaT1yWzBdLml0ZW1zLmxlbmd0aDtmb3IodmFyIG89MTtvPG47bysrKWlmKHJbb10uaXRlbXMubGVuZ3RoIT09aSl0aHJvdyBuZShlLCJDb2x1bW4gZGltZW5zaW9ucyBtaXNtYXRjaCAoIityW29dLml0ZW1zLmxlbmd0aCsiICE9PSAiK2krIikiKTt0PW5ldyBjKHIpfWVsc2V7aWYoIl0iIT09ZS50b2tlbil0aHJvdyByZShlLCJFbmQgb2YgbWF0cml4IF0gZXhwZWN0ZWQiKTtCKGUpLF8oZSksdD1hfX1lbHNlIEIoZSksXyhlKSx0PW5ldyBjKFtdKTtyZXR1cm4gWChlLHQpfShlKToocj1LKGUpLHQ9bmV3IGwociksdD1YKGUsdCkpfShlKToocj1RKGUpLHQ9bmV3IGwociksdD1YKGUsdCkpfShlKX0oZSl9KGUpO3ZhciBpPXsiISI6ImZhY3RvcmlhbCIsIiciOiJjdHJhbnNwb3NlIn07Zm9yKDtPYmplY3QoYWUuZikoaSxlLnRva2VuKTspcj1lLnRva2VuLG49aVtyXSxfKGUpLHQ9bmV3IHkocixuLFt0XSksdD1YKGUsdCk7cmV0dXJuIHR9KGUpLCJeIiE9PWUudG9rZW4mJiIuXiIhPT1lLnRva2VufHwocj1lLnRva2VuLG49Il4iPT09cj8icG93IjoiZG90UG93IixJKGUpLGk9W3QsWShlKV0sdD1uZXcgeShyLG4saSkpO3JldHVybiB0fShlKX1mdW5jdGlvbiBYKGUsdCxyKXtmb3IodmFyIG47ISgiKCIhPT1lLnRva2VuJiYiWyIhPT1lLnRva2VuJiYiLiIhPT1lLnRva2VufHxyJiYtMT09PXIuaW5kZXhPZihlLnRva2VuKSk7KWlmKG49W10sIigiPT09ZS50b2tlbil7aWYoIU9iamVjdChpZS5KKSh0KSYmIU9iamVjdChpZS5hKSh0KSlyZXR1cm4gdDtpZihxKGUpLF8oZSksIikiIT09ZS50b2tlbilmb3Iobi5wdXNoKHooZSkpOyIsIj09PWUudG9rZW47KV8oZSksbi5wdXNoKHooZSkpO2lmKCIpIiE9PWUudG9rZW4pdGhyb3cgcmUoZSwiUGFyZW50aGVzaXMgKSBleHBlY3RlZCIpO0IoZSksXyhlKSx0PW5ldyBtKHQsbil9ZWxzZSBpZigiWyI9PT1lLnRva2VuKXtpZihxKGUpLF8oZSksIl0iIT09ZS50b2tlbilmb3Iobi5wdXNoKHooZSkpOyIsIj09PWUudG9rZW47KV8oZSksbi5wdXNoKHooZSkpO2lmKCJdIiE9PWUudG9rZW4pdGhyb3cgcmUoZSwiUGFyZW50aGVzaXMgXSBleHBlY3RlZCIpO0IoZSksXyhlKSx0PW5ldyBpKHQsbmV3IGgobikpfWVsc2V7aWYoXyhlKSxlLnRva2VuVHlwZSE9PXcuU1lNQk9MKXRocm93IHJlKGUsIlByb3BlcnR5IG5hbWUgZXhwZWN0ZWQgYWZ0ZXIgZG90Iik7bi5wdXNoKG5ldyBsKGUudG9rZW4pKSxfKGUpO3Q9bmV3IGkodCxuZXcgaChuLCEwKSl9cmV0dXJuIHR9ZnVuY3Rpb24gUShlKXtmb3IodmFyIHQ9IiI7IiIhPT1TKGUpJiYnIichPT1TKGUpOykiXFwiPT09UyhlKSYmKHQrPVMoZSksQShlKSksdCs9UyhlKSxBKGUpO2lmKF8oZSksJyInIT09ZS50b2tlbil0aHJvdyByZShlLCdFbmQgb2Ygc3RyaW5nICIgZXhwZWN0ZWQnKTtyZXR1cm4gXyhlKSxKU09OLnBhcnNlKCciJyt0KyciJyl9ZnVuY3Rpb24gSyhlKXtmb3IodmFyIHQ9IiI7IiIhPT1TKGUpJiYiJyIhPT1TKGUpOykiXFwiPT09UyhlKSYmKHQrPVMoZSksQShlKSksdCs9UyhlKSxBKGUpO2lmKF8oZSksIiciIT09ZS50b2tlbil0aHJvdyByZShlLCJFbmQgb2Ygc3RyaW5nICcgZXhwZWN0ZWQiKTtyZXR1cm4gXyhlKSxKU09OLnBhcnNlKCciJyt0KyciJyl9ZnVuY3Rpb24gZWUoZSl7Zm9yKHZhciB0PVt6KGUpXSxyPTE7IiwiPT09ZS50b2tlbjspXyhlKSx0W3JdPXooZSkscisrO3JldHVybiBuZXcgYyh0KX1mdW5jdGlvbiB0ZShlKXtyZXR1cm4gZS5pbmRleC1lLnRva2VuLmxlbmd0aCsxfWZ1bmN0aW9uIHJlKGUsdCl7dmFyIHI9dGUoZSksbj1uZXcgU3ludGF4RXJyb3IodCsiIChjaGFyICIrcisiKSIpO3JldHVybiBuLmNoYXI9cixufWZ1bmN0aW9uIG5lKGUsdCl7dmFyIHI9dGUoZSksbj1uZXcgU3ludGF4RXJyb3IodCsiIChjaGFyICIrcisiKSIpO3JldHVybiBuLmNoYXI9cixufXJldHVybiB4LmlzQWxwaGE9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB4LmlzVmFsaWRMYXRpbk9yR3JlZWsoZSl8fHguaXNWYWxpZE1hdGhTeW1ib2woZSxyKXx8eC5pc1ZhbGlkTWF0aFN5bWJvbCh0LGUpfSx4LmlzVmFsaWRMYXRpbk9yR3JlZWs9ZnVuY3Rpb24oZSl7cmV0dXJuL15bYS16QS1aXyRcdTAwQzAtXHUwMkFGXHUwMzcwLVx1MDNGRlx1MjEwMC1cdTIxNEZdJC8udGVzdChlKX0seC5pc1ZhbGlkTWF0aFN5bWJvbD1mdW5jdGlvbihlLHQpe3JldHVybi9eW1x1RDgzNV0kLy50ZXN0KGUpJiYvXltcdURDMDAtXHVERkZGXSQvLnRlc3QodCkmJi9eW15cdURDNTVcdURDOURcdURDQTBcdURDQTFcdURDQTNcdURDQTRcdURDQTdcdURDQThcdURDQURcdURDQkFcdURDQkNcdURDQzRcdUREMDZcdUREMEJcdUREMENcdUREMTVcdUREMURcdUREM0FcdUREM0ZcdURENDVcdURENDctXHVERDQ5XHVERDUxXHVERUE2XHVERUE3XHVERkNDXHVERkNEXSQvLnRlc3QodCl9LHguaXNXaGl0ZXNwYWNlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIiAiPT09ZXx8Ilx0Ij09PWV8fCJcbiI9PT1lJiYwPHR9LHguaXNEZWNpbWFsTWFyaz1mdW5jdGlvbihlLHQpe3JldHVybiIuIj09PWUmJiIvIiE9PXQmJiIqIiE9PXQmJiJeIiE9PXR9LHguaXNEaWdpdERvdD1mdW5jdGlvbihlKXtyZXR1cm4iMCI8PWUmJmU8PSI5Inx8Ii4iPT09ZX0seC5pc0RpZ2l0PWZ1bmN0aW9uKGUpe3JldHVybiIwIjw9ZSYmZTw9IjkifSx4fSksUmY9ImNvbXBpbGUiLFBmPVsidHlwZWQiLCJwYXJzZSJdLEZmPU9iamVjdChzLmEpKFJmLFBmLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLnBhcnNlO3JldHVybiB0KFJmLHtzdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSkuY29tcGlsZSgpfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLGZ1bmN0aW9uKGUpe3JldHVybiByKGUpLmNvbXBpbGUoKX0pfX0pfSksVWY9ImV2YWx1YXRlIixMZj1bInR5cGVkIiwicGFyc2UiXSxIZj1PYmplY3Qocy5hKShVZixMZixmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5wYXJzZTtyZXR1cm4gdChVZix7c3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiByKGUpLmNvbXBpbGUoKS5ldmFsdWF0ZSh7fSl9LCJzdHJpbmcsIE9iamVjdCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcihlKS5jb21waWxlKCkuZXZhbHVhdGUodCl9LCJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIG9lKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSkuY29tcGlsZSgpLmV2YWx1YXRlKHQpfSl9LCJBcnJheSB8IE1hdHJpeCwgT2JqZWN0IjpmdW5jdGlvbihlLHQpe3JldHVybiBvZShlLGZ1bmN0aW9uKGUpe3JldHVybiByKGUpLmNvbXBpbGUoKS5ldmFsdWF0ZSh0KX0pfX0pfSksJGY9T2JqZWN0KHMuYSkoImV2YWwiLFsiZXZhbHVhdGUiXSxmdW5jdGlvbihlKXt2YXIgbj1lLmV2YWx1YXRlO3JldHVybiBmdW5jdGlvbigpe09iamVjdCh2ZS5hKSgnRnVuY3Rpb24gImV2YWwiIGhhcyBiZWVuIHJlbmFtZWQgdG8gImV2YWx1YXRlIiBpbiB2Ni4wLjAsIHBsZWFzZSB1c2UgdGhlIG5ldyBmdW5jdGlvbiBpbnN0ZWFkLicpO2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3JldHVybiBuLmFwcGx5KG4sdCl9fSksR2Y9WyJwYXJzZSJdLFpmPU9iamVjdChzLmEpKCJQYXJzZXIiLEdmLGZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyc2U7ZnVuY3Rpb24gcigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXRocm93IG5ldyBTeW50YXhFcnJvcigiQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yIik7dGhpcy5zY29wZT17fX1yZXR1cm4gci5wcm90b3R5cGUudHlwZT0iUGFyc2VyIixyLnByb3RvdHlwZS5pc1BhcnNlcj0hMCxyLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIlBhcnNlci5wYXJzZSBpcyBkZXByZWNhdGVkLiBVc2UgbWF0aC5wYXJzZSBpbnN0ZWFkLiIpfSxyLnByb3RvdHlwZS5jb21waWxlPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigiUGFyc2VyLmNvbXBpbGUgaXMgZGVwcmVjYXRlZC4gVXNlIG1hdGguY29tcGlsZSBpbnN0ZWFkLiIpfSxyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlKS5jb21waWxlKCkuZXZhbHVhdGUodGhpcy5zY29wZSl9LHIucHJvdG90eXBlLmV2YWw9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdCh2ZS5hKSgiTWV0aG9kIFBhcnNlci5ldmFsIGlzIHJlbmFtZWQgdG8gUGFyc2VyLmV2YWx1YXRlLiBQbGVhc2UgdXNlIHRoZSBuZXcgbWV0aG9kIG5hbWUuIiksdGhpcy5ldmFsdWF0ZShlKX0sci5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBlIGluIHRoaXMuc2NvcGU/RmkodGhpcy5zY29wZSxlKTp2b2lkIDB9LHIucHJvdG90eXBlLmdldEFsbD1mdW5jdGlvbigpe3JldHVybiBPYmplY3QoYWUuZSkoe30sdGhpcy5zY29wZSl9LHIucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBVaSh0aGlzLnNjb3BlLGUsdCl9LHIucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXtkZWxldGUgdGhpcy5zY29wZVtlXX0sci5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5zY29wZSlPYmplY3QoYWUuZikodGhpcy5zY29wZSxlKSYmZGVsZXRlIHRoaXMuc2NvcGVbZV19LHJ9LHtpc0NsYXNzOiEwfSksVmY9WyJ0eXBlZCIsIlBhcnNlciJdLEpmPU9iamVjdChzLmEpKCJwYXJzZXIiLFZmLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLlBhcnNlcjtyZXR1cm4gdCgicGFyc2VyIix7IiI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHJ9fSl9KSxXZj1bInR5cGVkIiwibWF0cml4IiwiYWJzIiwiYWRkU2NhbGFyIiwiZGl2aWRlU2NhbGFyIiwibXVsdGlwbHlTY2FsYXIiLCJzdWJ0cmFjdCIsImxhcmdlciIsImVxdWFsU2NhbGFyIiwidW5hcnlNaW51cyIsIkRlbnNlTWF0cml4IiwiU3BhcnNlTWF0cml4IiwiU3BhIl0sWWY9T2JqZWN0KHMuYSkoImx1cCIsV2YsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUubWF0cml4LFM9ZS5hYnMsTT1lLmFkZFNjYWxhcixBPWUuZGl2aWRlU2NhbGFyLEM9ZS5tdWx0aXBseVNjYWxhcixqPWUuc3VidHJhY3QsVD1lLmxhcmdlcixfPWUuZXF1YWxTY2FsYXIsST1lLnVuYXJ5TWludXMsRT1lLkRlbnNlTWF0cml4LHE9ZS5TcGFyc2VNYXRyaXgsQj1lLlNwYTtyZXR1cm4gdCgibHVwIix7RGVuc2VNYXRyaXg6ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSl9LFNwYXJzZU1hdHJpeDpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGYsbCxwLG09ZS5fc2l6ZVswXSx0PWUuX3NpemVbMV0scj1NYXRoLm1pbihtLHQpLGg9ZS5fdmFsdWVzLGQ9ZS5faW5kZXgseT1lLl9wdHIsZz1bXSx2PVtdLGI9W10seD1bbSxyXSx3PVtdLE49W10sTz1bXSxNPVtyLHRdLGo9W10sRT1bXTtmb3IoZj0wO2Y8bTtmKyspaltmXT1mLEVbZl09ZjtmdW5jdGlvbiBuKCl7dmFyIGk9bmV3IEI7bDxtJiYoYi5wdXNoKGcubGVuZ3RoKSxnLnB1c2goMSksdi5wdXNoKGwpKSxPLnB1c2gody5sZW5ndGgpO3ZhciBlPXlbbF0sdD15W2wrMV07Zm9yKHA9ZTtwPHQ7cCsrKWY9ZFtwXSxpLnNldChqW2ZdLGhbcF0pOzA8bCYmaS5mb3JFYWNoKDAsbC0xLGZ1bmN0aW9uKHIsbil7cS5fZm9yRWFjaFJvdyhyLGcsdixiLGZ1bmN0aW9uKGUsdCl7cjxlJiZpLmFjY3VtdWxhdGUoZSxJKEModCxuKSkpfSl9KTt2YXIgcixuLGEsbyxzPWwsdT1pLmdldChsKSxjPVModSk7aS5mb3JFYWNoKGwrMSxtLTEsZnVuY3Rpb24oZSx0KXt2YXIgcj1TKHQpO1QocixjKSYmKHM9ZSxjPXIsdT10KX0pLGwhPT1zJiYocS5fc3dhcFJvd3MobCxzLHhbMV0sZyx2LGIpLHEuX3N3YXBSb3dzKGwscyxNWzFdLHcsTixPKSxpLnN3YXAobCxzKSxuPXMsYT1FW3I9bF0sbz1FW25dLGpbYV09bixqW29dPXIsRVtyXT1vLEVbbl09YSksaS5mb3JFYWNoKDAsbS0xLGZ1bmN0aW9uKGUsdCl7ZTw9bD8ody5wdXNoKHQpLE4ucHVzaChlKSk6KHQ9QSh0LHUpLF8odCwwKXx8KGcucHVzaCh0KSx2LnB1c2goZSkpKX0pfWZvcihsPTA7bDx0O2wrKyluKCk7cmV0dXJuIE8ucHVzaCh3Lmxlbmd0aCksYi5wdXNoKGcubGVuZ3RoKSx7TDpuZXcgcSh7dmFsdWVzOmcsaW5kZXg6dixwdHI6YixzaXplOnh9KSxVOm5ldyBxKHt2YWx1ZXM6dyxpbmRleDpOLHB0cjpPLHNpemU6TX0pLHA6aix0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJMOiAiK3RoaXMuTC50b1N0cmluZygpKyJcblU6ICIrdGhpcy5VLnRvU3RyaW5nKCkrIlxuUDogIit0aGlzLnB9fX0oZSl9LEFycmF5OmZ1bmN0aW9uKGUpe3ZhciB0PW4ocihlKSk7cmV0dXJue0w6dC5MLnZhbHVlT2YoKSxVOnQuVS52YWx1ZU9mKCkscDp0LnB9fX0pO2Z1bmN0aW9uIG4oZSl7dmFyIHQscixuLGk9ZS5fc2l6ZVswXSxhPWUuX3NpemVbMV0sbz1NYXRoLm1pbihpLGEpLHM9T2JqZWN0KGFlLmEpKGUuX2RhdGEpLHU9W10sYz1baSxvXSxmPVtdLGw9W28sYV0scD1bXTtmb3IodD0wO3Q8aTt0KyspcFt0XT10O2ZvcihyPTA7cjxhO3IrKyl7aWYoMDxyKWZvcih0PTA7dDxpO3QrKyl7dmFyIG09TWF0aC5taW4odCxyKSxoPTA7Zm9yKG49MDtuPG07bisrKWg9TShoLEMoc1t0XVtuXSxzW25dW3JdKSk7c1t0XVtyXT1qKHNbdF1bcl0saCl9dmFyIGQ9cix5PTAsZz0wO2Zvcih0PXI7dDxpO3QrKyl7dmFyIHY9c1t0XVtyXSxiPVModik7VChiLHkpJiYoZD10LHk9YixnPXYpfWlmKHIhPT1kJiYocFtyXT1bcFtkXSxwW2RdPXBbcl1dWzBdLEUuX3N3YXBSb3dzKHIsZCxzKSkscjxpKWZvcih0PXIrMTt0PGk7dCsrKXt2YXIgeD1zW3RdW3JdO18oeCwwKXx8KHNbdF1bcl09QShzW3RdW3JdLGcpKX19Zm9yKHI9MDtyPGE7cisrKWZvcih0PTA7dDxpO3QrKykwPT09ciYmKHQ8YSYmKGZbdF09W10pLHVbdF09W10pLHQ8cj8odDxhJiYoZlt0XVtyXT1zW3RdW3JdKSxyPGkmJih1W3RdW3JdPTApKTp0IT09cj8odDxhJiYoZlt0XVtyXT0wKSxyPGkmJih1W3RdW3JdPXNbdF1bcl0pKToodDxhJiYoZlt0XVtyXT1zW3RdW3JdKSxyPGkmJih1W3RdW3JdPTEpKTt2YXIgdz1uZXcgRSh7ZGF0YTp1LHNpemU6Y30pLE49bmV3IEUoe2RhdGE6ZixzaXplOmx9KSxPPVtdO2Zvcih0PTAsbz1wLmxlbmd0aDt0PG87dCsrKU9bcFt0XV09dDtyZXR1cm57TDp3LFU6TixwOk8sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iTDogIit0aGlzLkwudG9TdHJpbmcoKSsiXG5VOiAiK3RoaXMuVS50b1N0cmluZygpKyJcblA6ICIrdGhpcy5wfX19fSk7ZnVuY3Rpb24gWGYoKXtyZXR1cm4oWGY9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9YXJndW1lbnRzW3RdO2Zvcih2YXIgbiBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pJiYoZVtuXT1yW25dKX1yZXR1cm4gZX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgUWY9WyJ0eXBlZCIsIm1hdHJpeCIsInplcm9zIiwiaWRlbnRpdHkiLCJpc1plcm8iLCJlcXVhbCIsInNpZ24iLCJzcXJ0IiwiY29uaiIsInVuYXJ5TWludXMiLCJhZGRTY2FsYXIiLCJkaXZpZGVTY2FsYXIiLCJtdWx0aXBseVNjYWxhciIsInN1YnRyYWN0IiwiY29tcGxleCJdLEtmPU9iamVjdChzLmEpKCJxciIsUWYsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUubWF0cml4LGI9ZS56ZXJvcyx4PWUuaWRlbnRpdHksdz1lLmlzWmVybyxOPWUuZXF1YWwsTz1lLnNpZ24sTT1lLnNxcnQsaj1lLmNvbmosRT1lLnVuYXJ5TWludXMsUz1lLmFkZFNjYWxhcixBPWUuZGl2aWRlU2NhbGFyLEM9ZS5tdWx0aXBseVNjYWxhcixUPWUuc3VidHJhY3Qsbz1lLmNvbXBsZXg7cmV0dXJuIFhmKHQoInFyIix7RGVuc2VNYXRyaXg6ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSl9LFNwYXJzZU1hdHJpeDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigicXIgbm90IGltcGxlbWVudGVkIGZvciBzcGFyc2UgbWF0cmljZXMgeWV0Iil9KCl9LEFycmF5OmZ1bmN0aW9uKGUpe3ZhciB0PW4ocihlKSk7cmV0dXJue1E6dC5RLnZhbHVlT2YoKSxSOnQuUi52YWx1ZU9mKCl9fX0pLHtfZGVuc2VRUmltcGw6c30pO2Z1bmN0aW9uIHMoZSl7dmFyIHQscixuLGk9ZS5fc2l6ZVswXSxhPWUuX3NpemVbMV0sbz14KFtpXSwiZGVuc2UiKSxzPW8uX2RhdGEsdT1lLmNsb25lKCksYz11Ll9kYXRhLGY9YihbaV0sIiIpO2ZvcihuPTA7bjxNYXRoLm1pbihhLGkpOysrbil7dmFyIGw9Y1tuXVtuXSxwPUUoTihsLDApPzE6TyhsKSksbT1qKHApLGg9MDtmb3IodD1uO3Q8aTt0KyspaD1TKGgsQyhjW3RdW25dLGooY1t0XVtuXSkpKTt2YXIgZD1DKHAsTShoKSk7aWYoIXcoZCkpe3ZhciB5PVQobCxkKTtmb3IodD1uKyhmW25dPTEpO3Q8aTt0KyspZlt0XT1BKGNbdF1bbl0seSk7dmFyIGc9RShqKEEoeSxkKSkpLHY9dm9pZCAwO2ZvcihyPW47cjxhO3IrKyl7Zm9yKHY9MCx0PW47dDxpO3QrKyl2PVModixDKGooZlt0XSksY1t0XVtyXSkpO2Zvcih2PUModixnKSx0PW47dDxpO3QrKyljW3RdW3JdPUMoVChjW3RdW3JdLEMoZlt0XSx2KSksbSl9Zm9yKHQ9MDt0PGk7dCsrKXtmb3Iodj0wLHI9bjtyPGk7cisrKXY9Uyh2LEMoc1t0XVtyXSxmW3JdKSk7Zm9yKHY9Qyh2LGcpLHI9bjtyPGk7KytyKXNbdF1bcl09QShUKHNbdF1bcl0sQyh2LGooZltyXSkpKSxtKX19fXJldHVybntROm8sUjp1LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIlE6ICIrdGhpcy5RLnRvU3RyaW5nKCkrIlxuUjogIit0aGlzLlIudG9TdHJpbmcoKX19fWZ1bmN0aW9uIG4oZSl7dmFyIHQ9cyhlKSxyPXQuUi5fZGF0YTtpZigwPGUuX2RhdGEubGVuZ3RoKWZvcih2YXIgbj0iQ29tcGxleCI9PT1yWzBdWzBdLnR5cGU/bygwKTowLGk9MDtpPHIubGVuZ3RoOysraSlmb3IodmFyIGE9MDthPGkmJmE8KHJbMF18fFtdKS5sZW5ndGg7KythKXJbaV1bYV09bjtyZXR1cm4gdH19KTtmdW5jdGlvbiBlbChlLHQscixuLGksYSxvKXt2YXIgcz0wO2ZvcihyW29dPWU7MDw9czspe3ZhciB1PXJbbytzXSxjPXJbbit1XTstMT09PWM/KHMtLSxhW3QrK109dSk6KHJbbit1XT1yW2krY10scltvKyArK3NdPWMpfXJldHVybiB0fWZ1bmN0aW9uIHRsKGUpe3JldHVybi1lLTJ9dmFyIHJsPVsiYWRkIiwibXVsdGlwbHkiLCJ0cmFuc3Bvc2UiXSxubD1PYmplY3Qocy5hKSgiY3NBbWQiLHJsLGZ1bmN0aW9uKGUpe3ZhciBLPWUuYWRkLGVlPWUubXVsdGlwbHksdGU9ZS50cmFuc3Bvc2U7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoIXR8fGU8PTB8fDM8ZSlyZXR1cm4gbnVsbDt2YXIgcj10Ll9zaXplLG49clswXSxpPXJbMV0sYT0wLG89TWF0aC5tYXgoMTYsMTAqTWF0aC5zcXJ0KGkpKSxzPWZ1bmN0aW9uKGUsdCxyLG4saSl7dmFyIGE9dGUodCk7aWYoMT09PWUmJm49PT1yKXJldHVybiBLKHQsYSk7aWYoMiE9PWUpcmV0dXJuIGVlKGEsdCk7Zm9yKHZhciBvPWEuX2luZGV4LHM9YS5fcHRyLHU9MCxjPTA7YzxyO2MrKyl7dmFyIGY9c1tjXTtpZihzW2NdPXUsIShzW2MrMV0tZj5pKSlmb3IodmFyIGw9c1tjKzFdO2Y8bDtmKyspb1t1KytdPW9bZl19cmV0dXJuIHNbcl09dSx0PXRlKGEpLGVlKGEsdCl9KGUsdCxuLGksbz1NYXRoLm1pbihpLTIsbykpOyFmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPWUuX3ZhbHVlcyxpPWUuX2luZGV4LGE9ZS5fcHRyLG89ZS5fc2l6ZVsxXSxzPTAsdT0wO3U8bzt1Kyspe3ZhciBjPWFbdV07Zm9yKGFbdV09cztjPGFbdSsxXTtjKyspdChpW2NdLHUsbj9uW2NdOjEscikmJihpW3NdPWlbY10sbiYmKG5bc109bltjXSkscysrKX1hW29dPXMsaS5zcGxpY2UocyxpLmxlbmd0aC1zKSxuJiZuLnNwbGljZShzLG4ubGVuZ3RoLXMpfShzLG5lLG51bGwpO2Zvcih2YXIgdSxjLGYsbCxwLG0saCxkLHksZyx2LGIseCx3LE4sTyxNPXMuX2luZGV4LGo9cy5fcHRyLEU9altpXSxTPVtdLEE9W10sQz1pKzEsVD0yKihpKzEpLF89MyooaSsxKSxJPTQqKGkrMSkscT01KihpKzEpLEI9NiooaSsxKSxrPTcqKGkrMSksej1TLEQ9ZnVuY3Rpb24oZSx0LHIsbixpLGEsbyxzLHUsYyxmLGwpe2Zvcih2YXIgcD0wO3A8ZTtwKyspcltuK3BdPXRbcCsxXS10W3BdO2Zvcih2YXIgbT1yW24rZV09MDttPD1lO20rKylyW2krbV09LTEsYVttXT0tMSxyW28rbV09LTEscltzK21dPS0xLHJbdSttXT0xLHJbYyttXT0xLHJbZittXT0wLHJbbCttXT1yW24rbV07dmFyIGg9cmUoMCwwLHIsYyxlKTtyZXR1cm4gcltmK2VdPS0yLHRbZV09LTEscltjK2VdPTAsaH0oaSxqLEEsMCxfLHosVCxrLEMsQixJLHEpLFI9ZnVuY3Rpb24oZSx0LHIsbixpLGEsbyxzLHUsYyxmKXtmb3IodmFyIGw9MCxwPTA7cDxlO3ArKyl7dmFyIG09cltuK3BdO2lmKDA9PT1tKXJbaStwXT0tMixsKyssdFtwXT0tMSxyW2ErcF09MDtlbHNlIGlmKG88bSlyW3MrcF09MCxyW2krcF09LTEsbCsrLHRbcF09dGwoZSkscltzK2VdKys7ZWxzZXt2YXIgaD1yW3UrbV07LTEhPT1oJiYoY1toXT1wKSxyW2YrcF09clt1K21dLHJbdSttXT1wfX1yZXR1cm4gbH0oaSxqLEEscSxJLEIsbyxDLF8seixUKSxQPTA7UjxpOyl7Zm9yKGY9LTE7UDxpJiYtMT09PShmPUFbXytQXSk7UCsrKTstMSE9PUFbVCtmXSYmKHpbQVtUK2ZdXT0tMSksQVtfK1BdPUFbVCtmXTt2YXIgRj1BW0krZl0sVT1BW0MrZl07Uis9VTt2YXIgTD0wO0FbQytmXT0tVTt2YXIgSD1qW2ZdLCQ9MD09PUY/SDpFLEc9JDtmb3IobD0xO2w8PUYrMTtsKyspe2ZvcihkPUY8bD8oaD1ILEFbMCsobT1mKV0tRik6KGg9alttPU1bSCsrXV0sQVswK21dKSxwPTE7cDw9ZDtwKyspKHk9QVtDKyh1PU1baCsrXSldKTw9MHx8KEwrPXksQVtDK3VdPS15LC0xIT09QVtUKyhNW0crK109dSldJiYoeltBW1QrdV1dPXpbdV0pLC0xIT09elt1XT9BW1Qrelt1XV09QVtUK3VdOkFbXytBW3ErdV1dPUFbVCt1XSk7bSE9PWYmJihqW21dPXRsKGYpLEFbQittXT0wKX1mb3IoMCE9PUYmJihFPUcpLEFbcStmXT1MLGpbZl09JCxBWzArZl09Ry0kLEFbSStmXT0tMixEPXJlKEQsYSxBLEIsaSksZz0kO2c8RztnKyspaWYoISgodj1BW0krKHU9TVtnXSldKTw9MCkpe3ZhciBaPUQtKHk9LUFbQyt1XSk7Zm9yKEg9alt1XSxiPWpbdV0rdi0xO0g8PWI7SCsrKUFbQisobT1NW0hdKV0+PUQ/QVtCK21dLT15OjAhPT1BW0IrbV0mJihBW0IrbV09QVtxK21dK1opfWZvcihnPSQ7ZzxHO2crKyl7Zm9yKHg9KGI9alt1PU1bZ11dKStBW0krdV0tMSxPPU49MCxIPXc9YjtIPD14O0grKylpZigwIT09QVtCKyhtPU1bSF0pXSl7dmFyIFY9QVtCK21dLUQ7MDxWPyhPKz1WLE4rPU1bdysrXT1tKTooalttXT10bChmKSxBW0IrbV09MCl9QVtJK3VdPXctYisxO3ZhciBKPXcsVz1iK0FbMCt1XTtmb3IoSD0xK3g7SDxXO0grKyl7dmFyIFk9QVtDKyhjPU1bSF0pXTtZPD0wfHwoTys9WSxOKz1NW3crK109Yyl9MD09PU8/KGpbdV09dGwoZiksTC09eT0tQVtDK3VdLFUrPXksUis9eSxBW0MrdV09MCxBW0krdV09LTEpOihBW3ErdV09TWF0aC5taW4oQVtxK3VdLE8pLE1bd109TVtKXSxNW0pdPU1bYl0sTVtiXT1mLEFbMCt1XT13LWIrMSxOPShOPDA/LU46TiklaSxBW1QrdV09QVtrK05dLHpbQVtrK05dPXVdPU4pfWZvcihBW3ErZl09TCxEPXJlKEQrKGE9TWF0aC5tYXgoYSxMKSksYSxBLEIsaSksZz0kO2c8RztnKyspaWYoISgwPD1BW0MrKHU9TVtnXSldKSlmb3IodT1BW2srKE49elt1XSldLEFbaytOXT0tMTstMSE9PXUmJi0xIT09QVtUK3VdO3U9QVtUK3VdLEQrKyl7Zm9yKGQ9QVswK3VdLHY9QVtJK3VdLEg9alt1XSsxO0g8PWpbdV0rZC0xO0grKylBW0IrTVtIXV09RDt2YXIgWD11O2ZvcihjPUFbVCt1XTstMSE9PWM7KXt2YXIgUT1BWzArY109PT1kJiZBW0krY109PT12O2ZvcihIPWpbY10rMTtRJiZIPD1qW2NdK2QtMTtIKyspQVtCK01bSF1dIT09RCYmKFE9MCk7UT8oaltjXT10bCh1KSxBW0MrdV0rPUFbQytjXSxBW0MrY109MCxBW0krY109LTEsYz1BW1QrY10sQVtUK1hdPWMpOmM9QVtUKyhYPWMpXX19Zm9yKGc9SD0kO2c8RztnKyspKHk9LUFbQysodT1NW2ddKV0pPD0wfHwoQVtDK3VdPXksTz1BW3ErdV0rTC15LC0xIT09QVtfKyhPPU1hdGgubWluKE8saS1SLXkpKV0mJih6W0FbXytPXV09dSksQVtUK3VdPUFbXytPXSx6W3VdPS0xLEFbXytPXT11LFA9TWF0aC5taW4oUCxPKSxBW3ErdV09TyxNW0grK109dSk7QVtDK2ZdPVUsMD09KEFbMCtmXT1ILSQpJiYoaltmXT0tMSxBW0IrZl09MCksMCE9PUYmJihFPUgpfWZvcih1PTA7dTxpO3UrKylqW3VdPXRsKGpbdV0pO2ZvcihjPTA7Yzw9aTtjKyspQVtfK2NdPS0xO2ZvcihjPWk7MDw9YztjLS0pMDxBW0MrY118fChBW1QrY109QVtfK2pbY11dLEFbXytqW2NdXT1jKTtmb3IobT1pOzA8PW07bS0tKUFbQyttXTw9MHx8LTEhPT1qW21dJiYoQVtUK21dPUFbXytqW21dXSxBW18ralttXV09bSk7Zm9yKHU9Zj0wO3U8PWk7dSsrKS0xPT09alt1XSYmKGY9ZWwodSxmLEEsXyxULFMsQikpO3JldHVybiBTLnNwbGljZShTLmxlbmd0aC0xLDEpLFN9O2Z1bmN0aW9uIHJlKGUsdCxyLG4saSl7aWYoZTwyfHxlK3Q8MCl7Zm9yKHZhciBhPTA7YTxpO2ErKykwIT09cltuK2FdJiYocltuK2FdPTEpO2U9Mn1yZXR1cm4gZX1mdW5jdGlvbiBuZShlLHQpe3JldHVybiBlIT09dH19KTtmdW5jdGlvbiBpbChlLHQscixuLGksYSxvKXt2YXIgcyx1LGMsZj0wO2lmKGU8PXR8fHJbbit0XTw9cltpK2VdKXJldHVybi0xO3JbaStlXT1yW24rdF07dmFyIGw9clthK2VdO2lmKHJbYStlXT10LC0xPT09bClmPTEsYz1lO2Vsc2V7Zm9yKGY9MixjPWw7YyE9PXJbbytjXTtjPXJbbytjXSk7Zm9yKHM9bDtzIT09YztzPXUpdT1yW28rc10scltvK3NdPWN9cmV0dXJue2psZWFmOmYscTpjfX12YXIgYWw9WyJ0cmFuc3Bvc2UiXSxvbD1PYmplY3Qocy5hKSgiY3NDb3VudHMiLGFsLGZ1bmN0aW9uKGUpe3ZhciBFPWUudHJhbnNwb3NlO3JldHVybiBmdW5jdGlvbihlLHQscixuKXtpZighZXx8IXR8fCFyKXJldHVybiBudWxsO3ZhciBpLGEsbyxzLHUsYyxmLGw9ZS5fc2l6ZSxwPWxbMF0sbT1sWzFdLGg9NCptKyhuP20rcCsxOjApLGQ9W10seT1tLGc9MiptLHY9MyptLGI9NCptLHg9NSptKzE7Zm9yKG89MDtvPGg7bysrKWRbb109LTE7dmFyIHc9W10sTj1FKGUpLE89Ti5faW5kZXgsTT1OLl9wdHI7Zm9yKG89MDtvPG07bysrKWZvcih3W2E9cltvXV09LTE9PT1kW3YrYV0/MTowOy0xIT09YSYmLTE9PT1kW3YrYV07YT10W2FdKWRbdithXT1vO2lmKG4pe2ZvcihvPTA7bzxtO28rKylkW3Jbb11dPW87Zm9yKGk9MDtpPHA7aSsrKXtmb3Iobz1tLGM9TVtpXSxmPU1baSsxXSx1PWM7dTxmO3UrKylvPU1hdGgubWluKG8sZFtPW3VdXSk7ZFt4K2ldPWRbYitvXSxkW2Irb109aX19Zm9yKGk9MDtpPG07aSsrKWRbMCtpXT1pO2ZvcihvPTA7bzxtO28rKyl7Zm9yKC0xIT09dFthPXJbb11dJiZ3W3RbYV1dLS0scz1uP2RbYitvXTphOy0xIT09cztzPW4/ZFt4K3NdOi0xKWZvcih1PU1bc107dTxNW3MrMV07dSsrKXt2YXIgaj1pbChpPU9bdV0sYSxkLHYseSxnLDApOzE8PWouamxlYWYmJndbYV0rKywyPT09ai5qbGVhZiYmd1tqLnFdLS19LTEhPT10W2FdJiYoZFswK2FdPXRbYV0pfWZvcihhPTA7YTxtO2ErKyktMSE9PXRbYV0mJih3W3RbYV1dKz13W2FdKTtyZXR1cm4gd319KSxzbD1bImFkZCIsIm11bHRpcGx5IiwidHJhbnNwb3NlIl0sdWw9T2JqZWN0KHMuYSkoImNzU3FyIixzbCxmdW5jdGlvbihlKXt2YXIgdD1lLmFkZCxyPWUubXVsdGlwbHksbj1lLnRyYW5zcG9zZSxjPW5sKHthZGQ6dCxtdWx0aXBseTpyLHRyYW5zcG9zZTpufSksZj1vbCh7dHJhbnNwb3NlOm59KTtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGk9dC5fcHRyLGE9dC5fc2l6ZVsxXSxvPXt9O2lmKG8ucT1jKGUsdCksZSYmIW8ucSlyZXR1cm4gbnVsbDtpZihyKXt2YXIgcz1lP2Z1bmN0aW9uKGUsdCxyLG4pe2Zvcih2YXIgaT1lLl92YWx1ZXMsYT1lLl9pbmRleCxvPWUuX3B0cixzPWUuX3NpemUsdT1lLl9kYXRhdHlwZSxjPXNbMF0sZj1zWzFdLGw9biYmZS5fdmFsdWVzP1tdOm51bGwscD1bXSxtPVtdLGg9MCxkPTA7ZDxmO2QrKyl7bVtkXT1oO2Zvcih2YXIgeT1yP3JbZF06ZCxnPW9beV0sdj1vW3krMV0sYj1nO2I8djtiKyspe3ZhciB4PXQ/dFthW2JdXTphW2JdO3BbaF09eCxsJiYobFtoXT1pW2JdKSxoKyt9fXJldHVybiBtW2ZdPWgsZS5jcmVhdGVTcGFyc2VNYXRyaXgoe3ZhbHVlczpsLGluZGV4OnAscHRyOm0sc2l6ZTpbYyxmXSxkYXRhdHlwZTp1fSl9KHQsbnVsbCxvLnEsMCk6dDtvLnBhcmVudD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiBudWxsO3ZhciByLG4saT1lLl9pbmRleCxhPWUuX3B0cixvPWUuX3NpemUscz1vWzBdLHU9b1sxXSxjPVtdLGY9W10sbD11O2lmKHQpZm9yKHI9MDtyPHM7cisrKWZbbCtyXT0tMTtmb3IodmFyIHA9MDtwPHU7cCsrKXtjW3BdPS0xLGZbMCtwXT0tMTtmb3IodmFyIG09YVtwXSxoPWFbcCsxXSxkPW07ZDxoO2QrKyl7dmFyIHk9aVtkXTtmb3Iocj10P2ZbbCt5XTp5Oy0xIT09ciYmcjxwO3I9biluPWZbMCtyXSxmWzArcl09cCwtMT09PW4mJihjW3JdPXApO3QmJihmW2wreV09cCl9fXJldHVybiBjfShzLDEpO3ZhciB1PWZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuIG51bGw7dmFyIHIsbj0wLGk9W10sYT1bXSxvPXQscz0yKnQ7Zm9yKHI9MDtyPHQ7cisrKWFbMCtyXT0tMTtmb3Iocj10LTE7MDw9cjtyLS0pLTEhPT1lW3JdJiYoYVtvK3JdPWFbMCtlW3JdXSxhWzArZVtyXV09cik7Zm9yKHI9MDtyPHQ7cisrKS0xPT09ZVtyXSYmKG49ZWwocixuLGEsMCxvLGkscykpO3JldHVybiBpfShvLnBhcmVudCxhKTtpZihvLmNwPWYocyxvLnBhcmVudCx1LDEpLHMmJm8ucGFyZW50JiZvLmNwJiZmdW5jdGlvbihlLHQpe3ZhciByPWUuX3B0cixuPWUuX2luZGV4LGk9ZS5fc2l6ZSxhPWlbMF0sbz1pWzFdO3QucGludj1bXSx0LmxlZnRtb3N0PVtdO3ZhciBzLHUsYyxmLGwscD10LnBhcmVudCxtPXQucGludixoPXQubGVmdG1vc3QsZD1bXSx5PWEsZz1hK28sdj1hKzIqbztmb3IodT0wO3U8bzt1KyspZFt5K3VdPS0xLGRbZyt1XT0tMSxkW3YrdV09MDtmb3Iocz0wO3M8YTtzKyspaFtzXT0tMTtmb3IodT1vLTE7MDw9dTt1LS0pZm9yKGY9clt1XSxsPXJbdSsxXSxjPWY7YzxsO2MrKyloW25bY11dPXU7Zm9yKHM9YS0xOzA8PXM7cy0tKShtW3NdPS0xKSE9PSh1PWhbc10pJiYoMD09ZFt2K3VdKysmJihkW2crdV09cyksZFswK3NdPWRbeSt1XSxkW3krdV09cyk7Zm9yKHQubG56PTAsdC5tMj1hLHU9MDt1PG87dSsrKWlmKHM9ZFt5K3VdLHQubG56KyssczwwJiYocz10Lm0yKyspLG1bc109dSwhKC0tdlt1XTw9MCkpe3QubG56Kz1kW3YrdV07dmFyIGI9cFt1XTstMSE9PWImJigwPT09ZFt2K2JdJiYoZFtnK2JdPWRbZyt1XSksZFswK2RbZyt1XV09ZFt5K2JdLGRbeStiXT1kWzArc10sZFt2K2JdKz1kW3YrdV0pfWZvcihzPTA7czxhO3MrKyltW3NdPDAmJihtW3NdPXUrKyk7cmV0dXJuIDF9KHMsbykpZm9yKG49by51bno9MDtuPGE7bisrKW8udW56Kz1vLmNwW25dfWVsc2Ugby51bno9NCppW2FdK2Esby5sbno9by51bno7cmV0dXJuIG99fSk7ZnVuY3Rpb24gY2woZSx0KXtyZXR1cm4gZVt0XTwwfWZ1bmN0aW9uIGZsKGUsdCl7ZVt0XT10bChlW3RdKX1mdW5jdGlvbiBsbChlKXtyZXR1cm4gZTwwP3RsKGUpOmV9ZnVuY3Rpb24gcGwoZSx0LHIsbixpKXt2YXIgYSxvLHMsdT10Ll9pbmRleCxjPXQuX3B0cixmPXQuX3NpemVbMV0sbD0wO2ZvcihuWzBdPWU7MDw9bDspe2U9bltsXTt2YXIgcD1pP2lbZV06ZTtjbChjLGUpfHwoZmwoYyxlKSxuW2YrbF09cDwwPzA6bGwoY1twXSkpO3ZhciBtPTE7Zm9yKG89bltmK2xdLHM9cDwwPzA6bGwoY1twKzFdKTtvPHM7bysrKWlmKCFjbChjLGE9dVtvXSkpe25bZitsXT1vLG5bKytsXT1hLG09MDticmVha31tJiYobC0tLG5bLS1yXT1lKX1yZXR1cm4gcn12YXIgbWw9WyJkaXZpZGVTY2FsYXIiLCJtdWx0aXBseSIsInN1YnRyYWN0Il0saGw9T2JqZWN0KHMuYSkoImNzU3Bzb2x2ZSIsbWwsZnVuY3Rpb24oZSl7dmFyIE89ZS5kaXZpZGVTY2FsYXIsTT1lLm11bHRpcGx5LGo9ZS5zdWJ0cmFjdDtyZXR1cm4gZnVuY3Rpb24oZSx0LHIsbixpLGEsbyl7dmFyIHMsdSxjLGYsbD1lLl92YWx1ZXMscD1lLl9pbmRleCxtPWUuX3B0cixoPWUuX3NpemVbMV0sZD10Ll92YWx1ZXMseT10Ll9pbmRleCxnPXQuX3B0cix2PWZ1bmN0aW9uKGUsdCxyLG4saSl7dmFyIGEsbyxzLHU9ZS5fcHRyLGM9ZS5fc2l6ZSxmPXQuX2luZGV4LGw9dC5fcHRyLHA9Y1sxXSxtPXA7Zm9yKG89bFtyXSxzPWxbcisxXSxhPW87YTxzO2ErKyl7dmFyIGg9ZlthXTtjbCh1LGgpfHwobT1wbChoLGUsbSxuLGkpKX1mb3IoYT1tO2E8cDthKyspZmwodSxuW2FdKTtyZXR1cm4gbX0oZSx0LHIsbixhKTtmb3Iocz12O3M8aDtzKyspaVtuW3NdXT0wO2Zvcih1PWdbcl0sYz1nW3IrMV0scz11O3M8YztzKyspaVt5W3NdXT1kW3NdO2Zvcih2YXIgYj12O2I8aDtiKyspe3ZhciB4PW5bYl0sdz1hP2FbeF06eDtpZighKHc8MCkpZm9yKHU9bVt3XSxjPW1bdysxXSxpW3hdPU8oaVt4XSxsW28/dTpjLTFdKSxzPW8/dSsxOnUsZj1vP2M6Yy0xO3M8ZjtzKyspe3ZhciBOPXBbc107aVtOXT1qKGlbTl0sTShsW3NdLGlbeF0pKX19cmV0dXJuIHZ9fSksZGw9WyJhYnMiLCJkaXZpZGVTY2FsYXIiLCJtdWx0aXBseSIsInN1YnRyYWN0IiwibGFyZ2VyIiwibGFyZ2VyRXEiLCJTcGFyc2VNYXRyaXgiXSx5bD1PYmplY3Qocy5hKSgiY3NMdSIsZGwsZnVuY3Rpb24oZSl7dmFyIFM9ZS5hYnMsQT1lLmRpdmlkZVNjYWxhcixDPWUubXVsdGlwbHksdD1lLnN1YnRyYWN0LFQ9ZS5sYXJnZXIsXz1lLmxhcmdlckVxLEk9ZS5TcGFyc2VNYXRyaXgscT1obCh7ZGl2aWRlU2NhbGFyOkEsbXVsdGlwbHk6QyxzdWJ0cmFjdDp0fSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXtpZighZSlyZXR1cm4gbnVsbDt2YXIgbixpPWUuX3NpemVbMV0sYT0xMDAsbz0xMDA7dCYmKG49dC5xLGE9dC5sbnp8fGEsbz10LnVuenx8byk7dmFyIHMsdSxjPVtdLGY9W10sbD1bXSxwPW5ldyBJKHt2YWx1ZXM6YyxpbmRleDpmLHB0cjpsLHNpemU6W2ksaV19KSxtPVtdLGg9W10sZD1bXSx5PW5ldyBJKHt2YWx1ZXM6bSxpbmRleDpoLHB0cjpkLHNpemU6W2ksaV19KSxnPVtdLHY9W10sYj1bXTtmb3Iocz0wO3M8aTtzKyspdltzXT0wLGdbc109LTEsbFtzKzFdPTA7Zm9yKHZhciB4PW89YT0wO3g8aTt4Kyspe2xbeF09YSxkW3hdPW87dmFyIHc9bj9uW3hdOngsTj1xKHAsZSx3LGIsdixnLDEpLE89LTEsTT0tMTtmb3IodT1OO3U8aTt1KyspaWYoZ1tzPWJbdV1dPDApe3ZhciBqPVModltzXSk7VChqLE0pJiYoTT1qLE89cyl9ZWxzZSBoW29dPWdbc10sbVtvKytdPXZbc107aWYoLTE9PT1PfHxNPD0wKXJldHVybiBudWxsO2dbd108MCYmXyhTKHZbd10pLEMoTSxyKSkmJihPPXcpO3ZhciBFPXZbT107Zm9yKGhbb109eCxtW28rK109RSxnW09dPXgsZlthXT1PLGNbYSsrXT0xLHU9Tjt1PGk7dSsrKWdbcz1iW3VdXTwwJiYoZlthXT1zLGNbYSsrXT1BKHZbc10sRSkpLHZbc109MH1mb3IobFtpXT1hLGRbaV09byx1PTA7dTxhO3UrKylmW3VdPWdbZlt1XV07cmV0dXJuIGMuc3BsaWNlKGEsYy5sZW5ndGgtYSksZi5zcGxpY2UoYSxmLmxlbmd0aC1hKSxtLnNwbGljZShvLG0ubGVuZ3RoLW8pLGguc3BsaWNlKG8saC5sZW5ndGgtbykse0w6cCxVOnkscGludjpnfX19KSxnbD1bInR5cGVkIiwiYWJzIiwiYWRkIiwibXVsdGlwbHkiLCJ0cmFuc3Bvc2UiLCJkaXZpZGVTY2FsYXIiLCJzdWJ0cmFjdCIsImxhcmdlciIsImxhcmdlckVxIiwiU3BhcnNlTWF0cml4Il0sdmw9T2JqZWN0KHMuYSkoInNsdSIsZ2wsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuYWJzLG49ZS5hZGQsaT1lLm11bHRpcGx5LGE9ZS50cmFuc3Bvc2Usbz1lLmRpdmlkZVNjYWxhcixzPWUuc3VidHJhY3QsdT1lLmxhcmdlcixjPWUubGFyZ2VyRXEsZj1lLlNwYXJzZU1hdHJpeCxsPXVsKHthZGQ6bixtdWx0aXBseTppLHRyYW5zcG9zZTphfSkscD15bCh7YWJzOnIsZGl2aWRlU2NhbGFyOm8sbXVsdGlwbHk6aSxzdWJ0cmFjdDpzLGxhcmdlcjp1LGxhcmdlckVxOmMsU3BhcnNlTWF0cml4OmZ9KTtyZXR1cm4gdCgic2x1Iix7IlNwYXJzZU1hdHJpeCwgbnVtYmVyLCBudW1iZXIiOmZ1bmN0aW9uKGUsdCxyKXtpZighT2JqZWN0KEUuaSkodCl8fHQ8MHx8Mzx0KXRocm93IG5ldyBFcnJvcigiU3ltYm9saWMgT3JkZXJpbmcgYW5kIEFuYWx5c2lzIG9yZGVyIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXIgaW4gdGhlIGludGVydmFsIFswLCAzXSIpO2lmKHI8MHx8MTxyKXRocm93IG5ldyBFcnJvcigiUGFydGlhbCBwaXZvdGluZyB0aHJlc2hvbGQgbXVzdCBiZSBhIG51bWJlciBmcm9tIDAgdG8gMSIpO3ZhciBuPWwodCxlLCExKSxpPXAoZSxuLHIpO3JldHVybntMOmkuTCxVOmkuVSxwOmkucGludixxOm4ucSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJMOiAiK3RoaXMuTC50b1N0cmluZygpKyJcblU6ICIrdGhpcy5VLnRvU3RyaW5nKCkrIlxucDogIit0aGlzLnAudG9TdHJpbmcoKSsodGhpcy5xPyJcbnE6ICIrdGhpcy5xLnRvU3RyaW5nKCk6IiIpKyJcbiJ9fX19KX0pO2Z1bmN0aW9uIGJsKGUsdCl7dmFyIHIsbj10Lmxlbmd0aCxpPVtdO2lmKGUpZm9yKHI9MDtyPG47cisrKWlbZVtyXV09dFtyXTtlbHNlIGZvcihyPTA7cjxuO3IrKylpW3JdPXRbcl07cmV0dXJuIGl9dmFyIHhsPSJsdXNvbHZlIix3bD1bInR5cGVkIiwibWF0cml4IiwibHVwIiwic2x1IiwidXNvbHZlIiwibHNvbHZlIiwiRGVuc2VNYXRyaXgiXSxObD1PYmplY3Qocy5hKSh4bCx3bCxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLG49ZS5tYXRyaXgsaT1lLmx1cCxhPWUuc2x1LHM9ZS51c29sdmUsdT1lLmxzb2x2ZSxjPWVvKHtEZW5zZU1hdHJpeDplLkRlbnNlTWF0cml4fSk7cmV0dXJuIHQoeGwseyJBcnJheSwgQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7ZT1uKGUpO3ZhciByPWkoZSk7cmV0dXJuIG8oci5MLHIuVSxyLnAsbnVsbCx0KS52YWx1ZU9mKCl9LCJEZW5zZU1hdHJpeCwgQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7dmFyIHI9aShlKTtyZXR1cm4gbyhyLkwsci5VLHIucCxudWxsLHQpfSwiU3BhcnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSx0KXt2YXIgcj1pKGUpO3JldHVybiBvKHIuTCxyLlUsci5wLG51bGwsdCl9LCJTcGFyc2VNYXRyaXgsIEFycmF5IHwgTWF0cml4LCBudW1iZXIsIG51bWJlciI6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9YShlLHIsbik7cmV0dXJuIG8oaS5MLGkuVSxpLnAsaS5xLHQpfSwiT2JqZWN0LCBBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhlLkwsZS5VLGUucCxlLnEsdCl9fSk7ZnVuY3Rpb24gZihlKXtpZihPYmplY3QoaWUudikoZSkpcmV0dXJuIGU7aWYoT2JqZWN0KGllLmIpKGUpKXJldHVybiBuKGUpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgTWF0cml4IExVIGRlY29tcG9zaXRpb24iKX1mdW5jdGlvbiBvKGUsdCxyLG4saSl7ZT1mKGUpLHQ9Zih0KSxpPWMoZSxpLCExKSxyJiYoaS5fZGF0YT1ibChyLGkuX2RhdGEpKTt2YXIgYT11KGUsaSksbz1zKHQsYSk7cmV0dXJuIG4mJihvLl9kYXRhPWJsKG4sby5fZGF0YSkpLG99fSksT2w9WyJwYXJzZSJdLE1sPU9iamVjdChzLmEpKCJIZWxwIixPbCxmdW5jdGlvbihlKXt2YXIgbz1lLnBhcnNlO2Z1bmN0aW9uIG4oZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3IiKTtpZighZSl0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50ICJkb2MiIG1pc3NpbmcnKTt0aGlzLmRvYz1lfXJldHVybiBuLnByb3RvdHlwZS50eXBlPSJIZWxwIixuLnByb3RvdHlwZS5pc0hlbHA9ITAsbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRvY3x8e30sdD0iXG4iO2lmKGUubmFtZSYmKHQrPSJOYW1lOiAiK2UubmFtZSsiXG5cbiIpLGUuY2F0ZWdvcnkmJih0Kz0iQ2F0ZWdvcnk6ICIrZS5jYXRlZ29yeSsiXG5cbiIpLGUuZGVzY3JpcHRpb24mJih0Kz0iRGVzY3JpcHRpb246XG4gICAgIitlLmRlc2NyaXB0aW9uKyJcblxuIiksZS5zeW50YXgmJih0Kz0iU3ludGF4OlxuICAgICIrZS5zeW50YXguam9pbigiXG4gICAgIikrIlxuXG4iKSxlLmV4YW1wbGVzKXt0Kz0iRXhhbXBsZXM6XG4iO2Zvcih2YXIgcj17fSxuPTA7bjxlLmV4YW1wbGVzLmxlbmd0aDtuKyspe3ZhciBpPWUuZXhhbXBsZXNbbl07dCs9IiAgICAiK2krIlxuIjt2YXIgYT12b2lkIDA7dHJ5e2E9byhpKS5jb21waWxlKCkuZXZhbHVhdGUocil9Y2F0Y2goZSl7YT1lfXZvaWQgMD09PWF8fE9iamVjdChpZS5zKShhKXx8KHQrPSIgICAgICAgICIrT2JqZWN0KEouZCkoYSx7cHJlY2lzaW9uOjE0fSkrIlxuIil9dCs9IlxuIn1yZXR1cm4gZS5zZWVhbHNvJiZlLnNlZWFsc28ubGVuZ3RoJiYodCs9IlNlZSBhbHNvOiAiK2Uuc2VlYWxzby5qb2luKCIsICIpKyJcbiIpLHR9LG4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBlPU9iamVjdChhZS5hKSh0aGlzLmRvYyk7cmV0dXJuIGUubWF0aGpzPSJIZWxwIixlfSxuLmZyb21KU09OPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Zvcih2YXIgciBpbiBlKSJtYXRoanMiIT09ciYmKHRbcl09ZVtyXSk7cmV0dXJuIG5ldyBuKHQpfSxuLnByb3RvdHlwZS52YWx1ZU9mPW4ucHJvdG90eXBlLnRvU3RyaW5nLG59LHtpc0NsYXNzOiEwfSksamw9WyI/b24iLCJtYXRoIl0sRWw9T2JqZWN0KHMuYSkoIkNoYWluIixqbCxmdW5jdGlvbihlKXt2YXIgdD1lLm9uLHI9ZS5tYXRoO2Z1bmN0aW9uIG8oZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgbykpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3IiKTtPYmplY3QoaWUuaCkoZSk/dGhpcy52YWx1ZT1lLnZhbHVlOnRoaXMudmFsdWU9ZX1mdW5jdGlvbiBzKGUsdCl7T2JqZWN0KGFlLmgpKG8ucHJvdG90eXBlLGUsZnVuY3Rpb24oKXt2YXIgZT10KCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUpcmV0dXJuIHUoZSl9KX1mdW5jdGlvbiB1KHIpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT1bdGhpcy52YWx1ZV0sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0KzFdPWFyZ3VtZW50c1t0XTtyZXR1cm4gbmV3IG8oci5hcHBseShyLGUpKX19by5wcm90b3R5cGUudHlwZT0iQ2hhaW4iLG8ucHJvdG90eXBlLmlzQ2hhaW49ITAsby5wcm90b3R5cGUuZG9uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfSxvLnByb3RvdHlwZS52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9LG8ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChKLmQpKHRoaXMudmFsdWUpfSxvLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57bWF0aGpzOiJDaGFpbiIsdmFsdWU6dGhpcy52YWx1ZX19LG8uZnJvbUpTT049ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBvKGUudmFsdWUpfSxvLmNyZWF0ZVByb3h5PWZ1bmN0aW9uKHQsZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KWk9dCwiZnVuY3Rpb24iPT10eXBlb2YoYT1lKSYmKG8ucHJvdG90eXBlW2ldPXUoYSkpO2Vsc2V7dmFyIHI9ZnVuY3Rpb24oZSl7T2JqZWN0KGFlLmYpKHQsZSkmJnZvaWQgMD09PWNbZV0mJnMoZSxmdW5jdGlvbigpe3JldHVybiB0W2VdfSl9O2Zvcih2YXIgbiBpbiB0KXIobil9dmFyIGksYX07dmFyIGM9e2V4cHJlc3Npb246ITAsZG9jczohMCx0eXBlOiEwLGNsYXNzZXM6ITAsanNvbjohMCxlcnJvcjohMCxpc0NoYWluOiEwfTtyZXR1cm4gby5jcmVhdGVQcm94eShyKSx0JiZ0KCJpbXBvcnQiLGZ1bmN0aW9uKGUsdCxyKXtyfHxzKGUsdCl9KSxvfSx7aXNDbGFzczohMH0pLFNsPXtuYW1lOiJ0eXBlT2YiLGNhdGVnb3J5OiJVdGlscyIsc3ludGF4OlsidHlwZU9mKHgpIl0sZGVzY3JpcHRpb246IkdldCB0aGUgdHlwZSBvZiBhIHZhcmlhYmxlLiIsZXhhbXBsZXM6WyJ0eXBlT2YoMy41KSIsInR5cGVPZigyIC0gNGkpIiwidHlwZU9mKDQ1IGRlZykiLCd0eXBlT2YoImhlbGxvIHdvcmxkIiknXSxzZWVhbHNvOlsiZ2V0TWF0cml4RGF0YVR5cGUiXX0sQWw9e25hbWU6ImV2YWx1YXRlIixjYXRlZ29yeToiRXhwcmVzc2lvbiIsc3ludGF4OlsiZXZhbHVhdGUoZXhwcmVzc2lvbikiLCJldmFsdWF0ZShbZXhwcjEsIGV4cHIyLCBleHByMywgLi4uXSkiXSxkZXNjcmlwdGlvbjoiRXZhbHVhdGUgYW4gZXhwcmVzc2lvbiBvciBhbiBhcnJheSB3aXRoIGV4cHJlc3Npb25zLiIsZXhhbXBsZXM6WydldmFsdWF0ZSgiMiArIDMiKScsJ2V2YWx1YXRlKCJzcXJ0KCIgKyA0ICsgIikiKSddLHNlZWFsc286W119LENsPXtuYW1lOiJwaSIsY2F0ZWdvcnk6IkNvbnN0YW50cyIsc3ludGF4OlsicGkiXSxkZXNjcmlwdGlvbjoiVGhlIG51bWJlciBwaSBpcyBhIG1hdGhlbWF0aWNhbCBjb25zdGFudCB0aGF0IGlzIHRoZSByYXRpbyBvZiBhIGNpcmNsZSdzIGNpcmN1bWZlcmVuY2UgdG8gaXRzIGRpYW1ldGVyLCBhbmQgaXMgYXBwcm94aW1hdGVseSBlcXVhbCB0byAzLjE0MTU5IixleGFtcGxlczpbInBpIiwic2luKHBpLzIpIl0sc2VlYWxzbzpbInRhdSJdfSxUbD17bmFtZToiZSIsY2F0ZWdvcnk6IkNvbnN0YW50cyIsc3ludGF4OlsiZSJdLGRlc2NyaXB0aW9uOiJFdWxlcidzIG51bWJlciwgdGhlIGJhc2Ugb2YgdGhlIG5hdHVyYWwgbG9nYXJpdGhtLiBBcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDIuNzE4MjgiLGV4YW1wbGVzOlsiZSIsImUgXiAyIiwiZXhwKDIpIiwibG9nKGUpIl0sc2VlYWxzbzpbImV4cCJdfSxfbD17bmFtZToidmFyaWFuY2UiLGNhdGVnb3J5OiJTdGF0aXN0aWNzIixzeW50YXg6WyJ2YXJpYW5jZShhLCBiLCBjLCAuLi4pIiwidmFyaWFuY2UoQSkiLCJ2YXJpYW5jZShBLCBub3JtYWxpemF0aW9uKSJdLGRlc2NyaXB0aW9uOidDb21wdXRlIHRoZSB2YXJpYW5jZSBvZiBhbGwgdmFsdWVzLiBPcHRpb25hbCBwYXJhbWV0ZXIgbm9ybWFsaXphdGlvbiBjYW4gYmUgInVuYmlhc2VkIiAoZGVmYXVsdCksICJ1bmNvcnJlY3RlZCIsIG9yICJiaWFzZWQiLicsZXhhbXBsZXM6WyJ2YXJpYW5jZSgyLCA0LCA2KSIsInZhcmlhbmNlKFsyLCA0LCA2LCA4XSkiLCd2YXJpYW5jZShbMiwgNCwgNiwgOF0sICJ1bmNvcnJlY3RlZCIpJywndmFyaWFuY2UoWzIsIDQsIDYsIDhdLCAiYmlhc2VkIiknLCJ2YXJpYW5jZShbMSwgMiwgMzsgNCwgNSwgNl0pIl0sc2VlYWxzbzpbIm1heCIsIm1lYW4iLCJtaW4iLCJtZWRpYW4iLCJtaW4iLCJwcm9kIiwic3RkIiwic3VtIl19LElsPXtiaWdudW1iZXI6e25hbWU6ImJpZ251bWJlciIsY2F0ZWdvcnk6IkNvbnN0cnVjdGlvbiIsc3ludGF4OlsiYmlnbnVtYmVyKHgpIl0sZGVzY3JpcHRpb246IkNyZWF0ZSBhIGJpZyBudW1iZXIgZnJvbSBhIG51bWJlciBvciBzdHJpbmcuIixleGFtcGxlczpbIjAuMSArIDAuMiIsImJpZ251bWJlcigwLjEpICsgYmlnbnVtYmVyKDAuMikiLCdiaWdudW1iZXIoIjcuMiIpJywnYmlnbnVtYmVyKCI3LjJlNTAwIiknLCJiaWdudW1iZXIoWzAuMSwgMC4yLCAwLjNdKSJdLHNlZWFsc286WyJib29sZWFuIiwiY29tcGxleCIsImZyYWN0aW9uIiwiaW5kZXgiLCJtYXRyaXgiLCJzdHJpbmciLCJ1bml0Il19LGJvb2xlYW46e25hbWU6ImJvb2xlYW4iLGNhdGVnb3J5OiJDb25zdHJ1Y3Rpb24iLHN5bnRheDpbIngiLCJib29sZWFuKHgpIl0sZGVzY3JpcHRpb246IkNvbnZlcnQgYSBzdHJpbmcgb3IgbnVtYmVyIGludG8gYSBib29sZWFuLiIsZXhhbXBsZXM6WyJib29sZWFuKDApIiwiYm9vbGVhbigxKSIsImJvb2xlYW4oMykiLCdib29sZWFuKCJ0cnVlIiknLCdib29sZWFuKCJmYWxzZSIpJywiYm9vbGVhbihbMSwgMCwgMSwgMV0pIl0sc2VlYWxzbzpbImJpZ251bWJlciIsImNvbXBsZXgiLCJpbmRleCIsIm1hdHJpeCIsIm51bWJlciIsInN0cmluZyIsInVuaXQiXX0sY29tcGxleDp7bmFtZToiY29tcGxleCIsY2F0ZWdvcnk6IkNvbnN0cnVjdGlvbiIsc3ludGF4OlsiY29tcGxleCgpIiwiY29tcGxleChyZSwgaW0pIiwiY29tcGxleChzdHJpbmcpIl0sZGVzY3JpcHRpb246IkNyZWF0ZSBhIGNvbXBsZXggbnVtYmVyLiIsZXhhbXBsZXM6WyJjb21wbGV4KCkiLCJjb21wbGV4KDIsIDMpIiwnY29tcGxleCgiNyAtIDJpIiknXSxzZWVhbHNvOlsiYmlnbnVtYmVyIiwiYm9vbGVhbiIsImluZGV4IiwibWF0cml4IiwibnVtYmVyIiwic3RyaW5nIiwidW5pdCJdfSxjcmVhdGVVbml0OntuYW1lOiJjcmVhdGVVbml0IixjYXRlZ29yeToiQ29uc3RydWN0aW9uIixzeW50YXg6WyJjcmVhdGVVbml0KGRlZmluaXRpb25zKSIsImNyZWF0ZVVuaXQobmFtZSwgZGVmaW5pdGlvbikiXSxkZXNjcmlwdGlvbjoiQ3JlYXRlIGEgdXNlci1kZWZpbmVkIHVuaXQgYW5kIHJlZ2lzdGVyIGl0IHdpdGggdGhlIFVuaXQgdHlwZS4iLGV4YW1wbGVzOlsnY3JlYXRlVW5pdCgiZm9vIiknLCdjcmVhdGVVbml0KCJrbm90Iiwge2RlZmluaXRpb246ICIwLjUxNDQ0NDQ0NCBtL3MiLCBhbGlhc2VzOiBbImtub3RzIiwgImt0IiwgImt0cyJdfSknLCdjcmVhdGVVbml0KCJtcGgiLCAiMSBtaWxlL2hvdXIiKSddLHNlZWFsc286WyJ1bml0Iiwic3BsaXRVbml0Il19LGZyYWN0aW9uOntuYW1lOiJmcmFjdGlvbiIsY2F0ZWdvcnk6IkNvbnN0cnVjdGlvbiIsc3ludGF4OlsiZnJhY3Rpb24obnVtKSIsImZyYWN0aW9uKG51bSxkZW4pIl0sZGVzY3JpcHRpb246IkNyZWF0ZSBhIGZyYWN0aW9uIGZyb20gYSBudW1iZXIgb3IgZnJvbSBhIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IuIixleGFtcGxlczpbImZyYWN0aW9uKDAuMTI1KSIsImZyYWN0aW9uKDEsIDMpICsgZnJhY3Rpb24oMiwgNSkiXSxzZWVhbHNvOlsiYmlnbnVtYmVyIiwiYm9vbGVhbiIsImNvbXBsZXgiLCJpbmRleCIsIm1hdHJpeCIsInN0cmluZyIsInVuaXQiXX0saW5kZXg6e25hbWU6ImluZGV4IixjYXRlZ29yeToiQ29uc3RydWN0aW9uIixzeW50YXg6WyJbc3RhcnRdIiwiW3N0YXJ0OmVuZF0iLCJbc3RhcnQ6c3RlcDplbmRdIiwiW3N0YXJ0MSwgc3RhcnQgMiwgLi4uXSIsIltzdGFydDE6ZW5kMSwgc3RhcnQyOmVuZDIsIC4uLl0iLCJbc3RhcnQxOnN0ZXAxOmVuZDEsIHN0YXJ0MjpzdGVwMjplbmQyLCAuLi5dIl0sZGVzY3JpcHRpb246IkNyZWF0ZSBhbiBpbmRleCB0byBnZXQgb3IgcmVwbGFjZSBhIHN1YnNldCBvZiBhIG1hdHJpeCIsZXhhbXBsZXM6WyJbXSIsIlsxLCAyLCAzXSIsIkEgPSBbMSwgMiwgMzsgNCwgNSwgNl0iLCJBWzEsIDpdIiwiQVsxLCAyXSA9IDUwIiwiQVswOjIsIDA6Ml0gPSBvbmVzKDIsIDIpIl0sc2VlYWxzbzpbImJpZ251bWJlciIsImJvb2xlYW4iLCJjb21wbGV4IiwibWF0cml4LCIsIm51bWJlciIsInJhbmdlIiwic3RyaW5nIiwidW5pdCJdfSxtYXRyaXg6e25hbWU6Im1hdHJpeCIsY2F0ZWdvcnk6IkNvbnN0cnVjdGlvbiIsc3ludGF4OlsiW10iLCJbYTEsIGIxLCAuLi47IGEyLCBiMiwgLi4uXSIsIm1hdHJpeCgpIiwnbWF0cml4KCJkZW5zZSIpJywibWF0cml4KFsuLi5dKSJdLGRlc2NyaXB0aW9uOiJDcmVhdGUgYSBtYXRyaXguIixleGFtcGxlczpbIltdIiwiWzEsIDIsIDNdIiwiWzEsIDIsIDM7IDQsIDUsIDZdIiwibWF0cml4KCkiLCJtYXRyaXgoWzMsIDRdKSIsJ21hdHJpeChbMywgNDsgNSwgNl0sICJzcGFyc2UiKScsJ21hdHJpeChbMywgNDsgNSwgNl0sICJzcGFyc2UiLCAibnVtYmVyIiknXSxzZWVhbHNvOlsiYmlnbnVtYmVyIiwiYm9vbGVhbiIsImNvbXBsZXgiLCJpbmRleCIsIm51bWJlciIsInN0cmluZyIsInVuaXQiLCJzcGFyc2UiXX0sbnVtYmVyOntuYW1lOiJudW1iZXIiLGNhdGVnb3J5OiJDb25zdHJ1Y3Rpb24iLHN5bnRheDpbIngiLCJudW1iZXIoeCkiLCJudW1iZXIodW5pdCwgdmFsdWVsZXNzVW5pdCkiXSxkZXNjcmlwdGlvbjoiQ3JlYXRlIGEgbnVtYmVyIG9yIGNvbnZlcnQgYSBzdHJpbmcgb3IgYm9vbGVhbiBpbnRvIGEgbnVtYmVyLiIsZXhhbXBsZXM6WyIyIiwiMmUzIiwiNC4wNSIsIm51bWJlcigyKSIsJ251bWJlcigiNy4yIiknLCJudW1iZXIodHJ1ZSkiLCJudW1iZXIoW3RydWUsIGZhbHNlLCB0cnVlLCB0cnVlXSkiLCdudW1iZXIodW5pdCgiNTJjbSIpLCAibSIpJ10sc2VlYWxzbzpbImJpZ251bWJlciIsImJvb2xlYW4iLCJjb21wbGV4IiwiZnJhY3Rpb24iLCJpbmRleCIsIm1hdHJpeCIsInN0cmluZyIsInVuaXQiXX0sc3BhcnNlOntuYW1lOiJzcGFyc2UiLGNhdGVnb3J5OiJDb25zdHJ1Y3Rpb24iLHN5bnRheDpbInNwYXJzZSgpIiwic3BhcnNlKFthMSwgYjEsIC4uLjsgYTEsIGIyLCAuLi5dKSIsJ3NwYXJzZShbYTEsIGIxLCAuLi47IGExLCBiMiwgLi4uXSwgIm51bWJlciIpJ10sZGVzY3JpcHRpb246IkNyZWF0ZSBhIHNwYXJzZSBtYXRyaXguIixleGFtcGxlczpbInNwYXJzZSgpIiwic3BhcnNlKFszLCA0OyA1LCA2XSkiLCdzcGFyc2UoWzMsIDA7IDUsIDBdLCAibnVtYmVyIiknXSxzZWVhbHNvOlsiYmlnbnVtYmVyIiwiYm9vbGVhbiIsImNvbXBsZXgiLCJpbmRleCIsIm51bWJlciIsInN0cmluZyIsInVuaXQiLCJtYXRyaXgiXX0sc3BsaXRVbml0OntuYW1lOiJzcGxpdFVuaXQiLGNhdGVnb3J5OiJDb25zdHJ1Y3Rpb24iLHN5bnRheDpbInNwbGl0VW5pdCh1bml0OiBVbml0LCBwYXJ0czogVW5pdFtdKSJdLGRlc2NyaXB0aW9uOiJTcGxpdCBhIHVuaXQgaW4gYW4gYXJyYXkgb2YgdW5pdHMgd2hvc2Ugc3VtIGlzIGVxdWFsIHRvIHRoZSBvcmlnaW5hbCB1bml0LiIsZXhhbXBsZXM6WydzcGxpdFVuaXQoMSBtLCBbImZlZXQiLCAiaW5jaCJdKSddLHNlZWFsc286WyJ1bml0IiwiY3JlYXRlVW5pdCJdfSxzdHJpbmc6e25hbWU6InN0cmluZyIsY2F0ZWdvcnk6IkNvbnN0cnVjdGlvbiIsc3ludGF4OlsnInRleHQiJywic3RyaW5nKHgpIl0sZGVzY3JpcHRpb246IkNyZWF0ZSBhIHN0cmluZyBvciBjb252ZXJ0IGEgdmFsdWUgdG8gYSBzdHJpbmciLGV4YW1wbGVzOlsnIkhlbGxvIFdvcmxkISInLCJzdHJpbmcoNC4yKSIsInN0cmluZygzICsgMmkpIl0sc2VlYWxzbzpbImJpZ251bWJlciIsImJvb2xlYW4iLCJjb21wbGV4IiwiaW5kZXgiLCJtYXRyaXgiLCJudW1iZXIiLCJ1bml0Il19LHVuaXQ6e25hbWU6InVuaXQiLGNhdGVnb3J5OiJDb25zdHJ1Y3Rpb24iLHN5bnRheDpbInZhbHVlIHVuaXQiLCJ1bml0KHZhbHVlLCB1bml0KSIsInVuaXQoc3RyaW5nKSJdLGRlc2NyaXB0aW9uOiJDcmVhdGUgYSB1bml0LiIsZXhhbXBsZXM6WyI1LjUgbW0iLCIzIGluY2giLCd1bml0KDcuMSwgImtpbG9ncmFtIiknLCd1bml0KCIyMyBkZWciKSddLHNlZWFsc286WyJiaWdudW1iZXIiLCJib29sZWFuIiwiY29tcGxleCIsImluZGV4IiwibWF0cml4IiwibnVtYmVyIiwic3RyaW5nIl19LGU6VGwsRTpUbCxmYWxzZTp7bmFtZToiZmFsc2UiLGNhdGVnb3J5OiJDb25zdGFudHMiLHN5bnRheDpbImZhbHNlIl0sZGVzY3JpcHRpb246IkJvb2xlYW4gdmFsdWUgZmFsc2UiLGV4YW1wbGVzOlsiZmFsc2UiXSxzZWVhbHNvOlsidHJ1ZSJdfSxpOntuYW1lOiJpIixjYXRlZ29yeToiQ29uc3RhbnRzIixzeW50YXg6WyJpIl0sZGVzY3JpcHRpb246IkltYWdpbmFyeSB1bml0LCBkZWZpbmVkIGFzIGkqaT0tMS4gQSBjb21wbGV4IG51bWJlciBpcyBkZXNjcmliZWQgYXMgYSArIGIqaSwgd2hlcmUgYSBpcyB0aGUgcmVhbCBwYXJ0LCBhbmQgYiBpcyB0aGUgaW1hZ2luYXJ5IHBhcnQuIixleGFtcGxlczpbImkiLCJpICogaSIsInNxcnQoLTEpIl0sc2VlYWxzbzpbXX0sSW5maW5pdHk6e25hbWU6IkluZmluaXR5IixjYXRlZ29yeToiQ29uc3RhbnRzIixzeW50YXg6WyJJbmZpbml0eSJdLGRlc2NyaXB0aW9uOiJJbmZpbml0eSwgYSBudW1iZXIgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gbnVtYmVyIHRoYXQgY2FuIGJlIGhhbmRsZWQgYnkgYSBmbG9hdGluZyBwb2ludCBudW1iZXIuIixleGFtcGxlczpbIkluZmluaXR5IiwiMSAvIDAiXSxzZWVhbHNvOltdfSxMTjI6e25hbWU6IkxOMiIsY2F0ZWdvcnk6IkNvbnN0YW50cyIsc3ludGF4OlsiTE4yIl0sZGVzY3JpcHRpb246IlJldHVybnMgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIDIsIGFwcHJveGltYXRlbHkgZXF1YWwgdG8gMC42OTMiLGV4YW1wbGVzOlsiTE4yIiwibG9nKDIpIl0sc2VlYWxzbzpbXX0sTE4xMDp7bmFtZToiTE4xMCIsY2F0ZWdvcnk6IkNvbnN0YW50cyIsc3ludGF4OlsiTE4xMCJdLGRlc2NyaXB0aW9uOiJSZXR1cm5zIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiAxMCwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAyLjMwMiIsZXhhbXBsZXM6WyJMTjEwIiwibG9nKDEwKSJdLHNlZWFsc286W119LExPRzJFOntuYW1lOiJMT0cyRSIsY2F0ZWdvcnk6IkNvbnN0YW50cyIsc3ludGF4OlsiTE9HMkUiXSxkZXNjcmlwdGlvbjoiUmV0dXJucyB0aGUgYmFzZS0yIGxvZ2FyaXRobSBvZiBFLCBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDEuNDQyIixleGFtcGxlczpbIkxPRzJFIiwibG9nKGUsIDIpIl0sc2VlYWxzbzpbXX0sTE9HMTBFOntuYW1lOiJMT0cxMEUiLGNhdGVnb3J5OiJDb25zdGFudHMiLHN5bnRheDpbIkxPRzEwRSJdLGRlc2NyaXB0aW9uOiJSZXR1cm5zIHRoZSBiYXNlLTEwIGxvZ2FyaXRobSBvZiBFLCBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDAuNDM0IixleGFtcGxlczpbIkxPRzEwRSIsImxvZyhlLCAxMCkiXSxzZWVhbHNvOltdfSxOYU46e25hbWU6Ik5hTiIsY2F0ZWdvcnk6IkNvbnN0YW50cyIsc3ludGF4OlsiTmFOIl0sZGVzY3JpcHRpb246Ik5vdCBhIG51bWJlciIsZXhhbXBsZXM6WyJOYU4iLCIwIC8gMCJdLHNlZWFsc286W119LG51bGw6e25hbWU6Im51bGwiLGNhdGVnb3J5OiJDb25zdGFudHMiLHN5bnRheDpbIm51bGwiXSxkZXNjcmlwdGlvbjoiVmFsdWUgbnVsbCIsZXhhbXBsZXM6WyJudWxsIl0sc2VlYWxzbzpbInRydWUiLCJmYWxzZSJdfSxwaTpDbCxQSTpDbCxwaGk6e25hbWU6InBoaSIsY2F0ZWdvcnk6IkNvbnN0YW50cyIsc3ludGF4OlsicGhpIl0sZGVzY3JpcHRpb246IlBoaSBpcyB0aGUgZ29sZGVuIHJhdGlvLiBUd28gcXVhbnRpdGllcyBhcmUgaW4gdGhlIGdvbGRlbiByYXRpbyBpZiB0aGVpciByYXRpbyBpcyB0aGUgc2FtZSBhcyB0aGUgcmF0aW8gb2YgdGhlaXIgc3VtIHRvIHRoZSBsYXJnZXIgb2YgdGhlIHR3byBxdWFudGl0aWVzLiBQaGkgaXMgZGVmaW5lZCBhcyBgKDEgKyBzcXJ0KDUpKSAvIDJgIGFuZCBpcyBhcHByb3hpbWF0ZWx5IDEuNjE4MDM0Li4uIixleGFtcGxlczpbInBoaSJdLHNlZWFsc286W119LFNRUlQxXzI6e25hbWU6IlNRUlQxXzIiLGNhdGVnb3J5OiJDb25zdGFudHMiLHN5bnRheDpbIlNRUlQxXzIiXSxkZXNjcmlwdGlvbjoiUmV0dXJucyB0aGUgc3F1YXJlIHJvb3Qgb2YgMS8yLCBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDAuNzA3IixleGFtcGxlczpbIlNRUlQxXzIiLCJzcXJ0KDEvMikiXSxzZWVhbHNvOltdfSxTUVJUMjp7bmFtZToiU1FSVDIiLGNhdGVnb3J5OiJDb25zdGFudHMiLHN5bnRheDpbIlNRUlQyIl0sZGVzY3JpcHRpb246IlJldHVybnMgdGhlIHNxdWFyZSByb290IG9mIDIsIGFwcHJveGltYXRlbHkgZXF1YWwgdG8gMS40MTQiLGV4YW1wbGVzOlsiU1FSVDIiLCJzcXJ0KDIpIl0sc2VlYWxzbzpbXX0sdGF1OntuYW1lOiJ0YXUiLGNhdGVnb3J5OiJDb25zdGFudHMiLHN5bnRheDpbInRhdSJdLGRlc2NyaXB0aW9uOiJUYXUgaXMgdGhlIHJhdGlvIGNvbnN0YW50IG9mIGEgY2lyY2xlJ3MgY2lyY3VtZmVyZW5jZSB0byByYWRpdXMsIGVxdWFsIHRvIDIgKiBwaSwgYXBwcm94aW1hdGVseSA2LjI4MzIuIixleGFtcGxlczpbInRhdSIsIjIgKiBwaSJdLHNlZWFsc286WyJwaSJdfSx0cnVlOntuYW1lOiJ0cnVlIixjYXRlZ29yeToiQ29uc3RhbnRzIixzeW50YXg6WyJ0cnVlIl0sZGVzY3JpcHRpb246IkJvb2xlYW4gdmFsdWUgdHJ1ZSIsZXhhbXBsZXM6WyJ0cnVlIl0sc2VlYWxzbzpbImZhbHNlIl19LHZlcnNpb246e25hbWU6InZlcnNpb24iLGNhdGVnb3J5OiJDb25zdGFudHMiLHN5bnRheDpbInZlcnNpb24iXSxkZXNjcmlwdGlvbjoiQSBzdHJpbmcgd2l0aCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgbWF0aC5qcyIsZXhhbXBsZXM6WyJ2ZXJzaW9uIl0sc2VlYWxzbzpbXX0sc3BlZWRPZkxpZ2h0OntkZXNjcmlwdGlvbjoiU3BlZWQgb2YgbGlnaHQgaW4gdmFjdXVtIixleGFtcGxlczpbInNwZWVkT2ZMaWdodCJdfSxncmF2aXRhdGlvbkNvbnN0YW50OntkZXNjcmlwdGlvbjoiTmV3dG9uaWFuIGNvbnN0YW50IG9mIGdyYXZpdGF0aW9uIixleGFtcGxlczpbImdyYXZpdGF0aW9uQ29uc3RhbnQiXX0scGxhbmNrQ29uc3RhbnQ6e2Rlc2NyaXB0aW9uOiJQbGFuY2sgY29uc3RhbnQiLGV4YW1wbGVzOlsicGxhbmNrQ29uc3RhbnQiXX0scmVkdWNlZFBsYW5ja0NvbnN0YW50OntkZXNjcmlwdGlvbjoiUmVkdWNlZCBQbGFuY2sgY29uc3RhbnQiLGV4YW1wbGVzOlsicmVkdWNlZFBsYW5ja0NvbnN0YW50Il19LG1hZ25ldGljQ29uc3RhbnQ6e2Rlc2NyaXB0aW9uOiJNYWduZXRpYyBjb25zdGFudCAodmFjdXVtIHBlcm1lYWJpbGl0eSkiLGV4YW1wbGVzOlsibWFnbmV0aWNDb25zdGFudCJdfSxlbGVjdHJpY0NvbnN0YW50OntkZXNjcmlwdGlvbjoiRWxlY3RyaWMgY29uc3RhbnQgKHZhY3V1bSBwZXJtZWFiaWxpdHkpIixleGFtcGxlczpbImVsZWN0cmljQ29uc3RhbnQiXX0sdmFjdXVtSW1wZWRhbmNlOntkZXNjcmlwdGlvbjoiQ2hhcmFjdGVyaXN0aWMgaW1wZWRhbmNlIG9mIHZhY3V1bSIsZXhhbXBsZXM6WyJ2YWN1dW1JbXBlZGFuY2UiXX0sY291bG9tYjp7ZGVzY3JpcHRpb246IkNvdWxvbWIncyBjb25zdGFudCIsZXhhbXBsZXM6WyJjb3Vsb21iIl19LGVsZW1lbnRhcnlDaGFyZ2U6e2Rlc2NyaXB0aW9uOiJFbGVtZW50YXJ5IGNoYXJnZSIsZXhhbXBsZXM6WyJlbGVtZW50YXJ5Q2hhcmdlIl19LGJvaHJNYWduZXRvbjp7ZGVzY3JpcHRpb246IkJvcmggbWFnbmV0b24iLGV4YW1wbGVzOlsiYm9ock1hZ25ldG9uIl19LGNvbmR1Y3RhbmNlUXVhbnR1bTp7ZGVzY3JpcHRpb246IkNvbmR1Y3RhbmNlIHF1YW50dW0iLGV4YW1wbGVzOlsiY29uZHVjdGFuY2VRdWFudHVtIl19LGludmVyc2VDb25kdWN0YW5jZVF1YW50dW06e2Rlc2NyaXB0aW9uOiJJbnZlcnNlIGNvbmR1Y3RhbmNlIHF1YW50dW0iLGV4YW1wbGVzOlsiaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bSJdfSxtYWduZXRpY0ZsdXhRdWFudHVtOntkZXNjcmlwdGlvbjoiTWFnbmV0aWMgZmx1eCBxdWFudHVtIixleGFtcGxlczpbIm1hZ25ldGljRmx1eFF1YW50dW0iXX0sbnVjbGVhck1hZ25ldG9uOntkZXNjcmlwdGlvbjoiTnVjbGVhciBtYWduZXRvbiIsZXhhbXBsZXM6WyJudWNsZWFyTWFnbmV0b24iXX0sa2xpdHppbmc6e2Rlc2NyaXB0aW9uOiJWb24gS2xpdHppbmcgY29uc3RhbnQiLGV4YW1wbGVzOlsia2xpdHppbmciXX0sYm9oclJhZGl1czp7ZGVzY3JpcHRpb246IkJvcmggcmFkaXVzIixleGFtcGxlczpbImJvaHJSYWRpdXMiXX0sY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXM6e2Rlc2NyaXB0aW9uOiJDbGFzc2ljYWwgZWxlY3Ryb24gcmFkaXVzIixleGFtcGxlczpbImNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzIl19LGVsZWN0cm9uTWFzczp7ZGVzY3JpcHRpb246IkVsZWN0cm9uIG1hc3MiLGV4YW1wbGVzOlsiZWxlY3Ryb25NYXNzIl19LGZlcm1pQ291cGxpbmc6e2Rlc2NyaXB0aW9uOiJGZXJtaSBjb3VwbGluZyBjb25zdGFudCIsZXhhbXBsZXM6WyJmZXJtaUNvdXBsaW5nIl19LGZpbmVTdHJ1Y3R1cmU6e2Rlc2NyaXB0aW9uOiJGaW5lLXN0cnVjdHVyZSBjb25zdGFudCIsZXhhbXBsZXM6WyJmaW5lU3RydWN0dXJlIl19LGhhcnRyZWVFbmVyZ3k6e2Rlc2NyaXB0aW9uOiJIYXJ0cmVlIGVuZXJneSIsZXhhbXBsZXM6WyJoYXJ0cmVlRW5lcmd5Il19LHByb3Rvbk1hc3M6e2Rlc2NyaXB0aW9uOiJQcm90b24gbWFzcyIsZXhhbXBsZXM6WyJwcm90b25NYXNzIl19LGRldXRlcm9uTWFzczp7ZGVzY3JpcHRpb246IkRldXRlcm9uIE1hc3MiLGV4YW1wbGVzOlsiZGV1dGVyb25NYXNzIl19LG5ldXRyb25NYXNzOntkZXNjcmlwdGlvbjoiTmV1dHJvbiBtYXNzIixleGFtcGxlczpbIm5ldXRyb25NYXNzIl19LHF1YW50dW1PZkNpcmN1bGF0aW9uOntkZXNjcmlwdGlvbjoiUXVhbnR1bSBvZiBjaXJjdWxhdGlvbiIsZXhhbXBsZXM6WyJxdWFudHVtT2ZDaXJjdWxhdGlvbiJdfSxyeWRiZXJnOntkZXNjcmlwdGlvbjoiUnlkYmVyZyBjb25zdGFudCIsZXhhbXBsZXM6WyJyeWRiZXJnIl19LHRob21zb25Dcm9zc1NlY3Rpb246e2Rlc2NyaXB0aW9uOiJUaG9tc29uIGNyb3NzIHNlY3Rpb24iLGV4YW1wbGVzOlsidGhvbXNvbkNyb3NzU2VjdGlvbiJdfSx3ZWFrTWl4aW5nQW5nbGU6e2Rlc2NyaXB0aW9uOiJXZWFrIG1peGluZyBhbmdsZSIsZXhhbXBsZXM6WyJ3ZWFrTWl4aW5nQW5nbGUiXX0sZWZpbW92RmFjdG9yOntkZXNjcmlwdGlvbjoiRWZpbW92IGZhY3RvciIsZXhhbXBsZXM6WyJlZmltb3ZGYWN0b3IiXX0sYXRvbWljTWFzczp7ZGVzY3JpcHRpb246IkF0b21pYyBtYXNzIGNvbnN0YW50IixleGFtcGxlczpbImF0b21pY01hc3MiXX0sYXZvZ2Fkcm86e2Rlc2NyaXB0aW9uOiJBdm9nYWRybydzIG51bWJlciIsZXhhbXBsZXM6WyJhdm9nYWRybyJdfSxib2x0em1hbm46e2Rlc2NyaXB0aW9uOiJCb2x0em1hbm4gY29uc3RhbnQiLGV4YW1wbGVzOlsiYm9sdHptYW5uIl19LGZhcmFkYXk6e2Rlc2NyaXB0aW9uOiJGYXJhZGF5IGNvbnN0YW50IixleGFtcGxlczpbImZhcmFkYXkiXX0sZmlyc3RSYWRpYXRpb246e2Rlc2NyaXB0aW9uOiJGaXJzdCByYWRpYXRpb24gY29uc3RhbnQiLGV4YW1wbGVzOlsiZmlyc3RSYWRpYXRpb24iXX0sbG9zY2htaWR0OntkZXNjcmlwdGlvbjoiTG9zY2htaWR0IGNvbnN0YW50IGF0IFQ9MjczLjE1IEsgYW5kIHA9MTAxLjMyNSBrUGEiLGV4YW1wbGVzOlsibG9zY2htaWR0Il19LGdhc0NvbnN0YW50OntkZXNjcmlwdGlvbjoiR2FzIGNvbnN0YW50IixleGFtcGxlczpbImdhc0NvbnN0YW50Il19LG1vbGFyUGxhbmNrQ29uc3RhbnQ6e2Rlc2NyaXB0aW9uOiJNb2xhciBQbGFuY2sgY29uc3RhbnQiLGV4YW1wbGVzOlsibW9sYXJQbGFuY2tDb25zdGFudCJdfSxtb2xhclZvbHVtZTp7ZGVzY3JpcHRpb246Ik1vbGFyIHZvbHVtZSBvZiBhbiBpZGVhbCBnYXMgYXQgVD0yNzMuMTUgSyBhbmQgcD0xMDEuMzI1IGtQYSIsZXhhbXBsZXM6WyJtb2xhclZvbHVtZSJdfSxzYWNrdXJUZXRyb2RlOntkZXNjcmlwdGlvbjoiU2Fja3VyLVRldHJvZGUgY29uc3RhbnQgYXQgVD0xIEsgYW5kIHA9MTAxLjMyNSBrUGEiLGV4YW1wbGVzOlsic2Fja3VyVGV0cm9kZSJdfSxzZWNvbmRSYWRpYXRpb246e2Rlc2NyaXB0aW9uOiJTZWNvbmQgcmFkaWF0aW9uIGNvbnN0YW50IixleGFtcGxlczpbInNlY29uZFJhZGlhdGlvbiJdfSxzdGVmYW5Cb2x0em1hbm46e2Rlc2NyaXB0aW9uOiJTdGVmYW4tQm9sdHptYW5uIGNvbnN0YW50IixleGFtcGxlczpbInN0ZWZhbkJvbHR6bWFubiJdfSx3aWVuRGlzcGxhY2VtZW50OntkZXNjcmlwdGlvbjoiV2llbiBkaXNwbGFjZW1lbnQgbGF3IGNvbnN0YW50IixleGFtcGxlczpbIndpZW5EaXNwbGFjZW1lbnQiXX0sbW9sYXJNYXNzOntkZXNjcmlwdGlvbjoiTW9sYXIgbWFzcyBjb25zdGFudCIsZXhhbXBsZXM6WyJtb2xhck1hc3MiXX0sbW9sYXJNYXNzQzEyOntkZXNjcmlwdGlvbjoiTW9sYXIgbWFzcyBjb25zdGFudCBvZiBjYXJib24tMTIiLGV4YW1wbGVzOlsibW9sYXJNYXNzQzEyIl19LGdyYXZpdHk6e2Rlc2NyaXB0aW9uOiJTdGFuZGFyZCBhY2NlbGVyYXRpb24gb2YgZ3Jhdml0eSAoc3RhbmRhcmQgYWNjZWxlcmF0aW9uIG9mIGZyZWUtZmFsbCBvbiBFYXJ0aCkiLGV4YW1wbGVzOlsiZ3Jhdml0eSJdfSxwbGFuY2tMZW5ndGg6e2Rlc2NyaXB0aW9uOiJQbGFuY2sgbGVuZ3RoIixleGFtcGxlczpbInBsYW5ja0xlbmd0aCJdfSxwbGFuY2tNYXNzOntkZXNjcmlwdGlvbjoiUGxhbmNrIG1hc3MiLGV4YW1wbGVzOlsicGxhbmNrTWFzcyJdfSxwbGFuY2tUaW1lOntkZXNjcmlwdGlvbjoiUGxhbmNrIHRpbWUiLGV4YW1wbGVzOlsicGxhbmNrVGltZSJdfSxwbGFuY2tDaGFyZ2U6e2Rlc2NyaXB0aW9uOiJQbGFuY2sgY2hhcmdlIixleGFtcGxlczpbInBsYW5ja0NoYXJnZSJdfSxwbGFuY2tUZW1wZXJhdHVyZTp7ZGVzY3JpcHRpb246IlBsYW5jayB0ZW1wZXJhdHVyZSIsZXhhbXBsZXM6WyJwbGFuY2tUZW1wZXJhdHVyZSJdfSxkZXJpdmF0aXZlOntuYW1lOiJkZXJpdmF0aXZlIixjYXRlZ29yeToiQWxnZWJyYSIsc3ludGF4OlsiZGVyaXZhdGl2ZShleHByLCB2YXJpYWJsZSkiLCJkZXJpdmF0aXZlKGV4cHIsIHZhcmlhYmxlLCB7c2ltcGxpZnk6IGJvb2xlYW59KSJdLGRlc2NyaXB0aW9uOiJUYWtlcyB0aGUgZGVyaXZhdGl2ZSBvZiBhbiBleHByZXNzaW9uIGV4cHJlc3NlZCBpbiBwYXJzZXIgTm9kZXMuIFRoZSBkZXJpdmF0aXZlIHdpbGwgYmUgdGFrZW4gb3ZlciB0aGUgc3VwcGxpZWQgdmFyaWFibGUgaW4gdGhlIHNlY29uZCBwYXJhbWV0ZXIuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB2YXJpYWJsZXMgaW4gdGhlIGV4cHJlc3Npb24sIGl0IHdpbGwgcmV0dXJuIGEgcGFydGlhbCBkZXJpdmF0aXZlLiIsZXhhbXBsZXM6WydkZXJpdmF0aXZlKCIyeF4zIiwgIngiKScsJ2Rlcml2YXRpdmUoIjJ4XjMiLCAieCIsIHtzaW1wbGlmeTogZmFsc2V9KScsJ2Rlcml2YXRpdmUoIjJ4XjIgKyAzeCArIDQiLCAieCIpJywnZGVyaXZhdGl2ZSgic2luKDJ4KSIsICJ4IiknLCdmID0gcGFyc2UoInheMiArIHgiKScsJ3ggPSBwYXJzZSgieCIpJywiZGYgPSBkZXJpdmF0aXZlKGYsIHgpIiwiZGYuZXZhbHVhdGUoe3g6IDN9KSJdLHNlZWFsc286WyJzaW1wbGlmeSIsInBhcnNlIiwiZXZhbHVhdGUiXX0sbHNvbHZlOntuYW1lOiJsc29sdmUiLGNhdGVnb3J5OiJBbGdlYnJhIixzeW50YXg6WyJ4PWxzb2x2ZShMLCBiKSJdLGRlc2NyaXB0aW9uOiJTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gTCAqIHggPSBiIHdoZXJlIEwgaXMgYW4gW24geCBuXSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeCBhbmQgYiBpcyBhIFtuXSBjb2x1bW4gdmVjdG9yLiIsZXhhbXBsZXM6WyJhID0gWy0yLCAzOyAyLCAxXSIsImIgPSBbMTEsIDldIiwieCA9IGxzb2x2ZShhLCBiKSJdLHNlZWFsc286WyJsdXAiLCJsdXNvbHZlIiwidXNvbHZlIiwibWF0cml4Iiwic3BhcnNlIl19LGx1cDp7bmFtZToibHVwIixjYXRlZ29yeToiQWxnZWJyYSIsc3ludGF4OlsibHVwKG0pIl0sZGVzY3JpcHRpb246IkNhbGN1bGF0ZSB0aGUgTWF0cml4IExVIGRlY29tcG9zaXRpb24gd2l0aCBwYXJ0aWFsIHBpdm90aW5nLiBNYXRyaXggQSBpcyBkZWNvbXBvc2VkIGluIHRocmVlIG1hdHJpY2VzIChMLCBVLCBQKSB3aGVyZSBQICogQSA9IEwgKiBVIixleGFtcGxlczpbImx1cChbWzIsIDFdLCBbMSwgNF1dKSIsImx1cChtYXRyaXgoW1syLCAxXSwgWzEsIDRdXSkpIiwibHVwKHNwYXJzZShbWzIsIDFdLCBbMSwgNF1dKSkiXSxzZWVhbHNvOlsibHVzb2x2ZSIsImxzb2x2ZSIsInVzb2x2ZSIsIm1hdHJpeCIsInNwYXJzZSIsInNsdSIsInFyIl19LGx1c29sdmU6e25hbWU6Imx1c29sdmUiLGNhdGVnb3J5OiJBbGdlYnJhIixzeW50YXg6WyJ4PWx1c29sdmUoQSwgYikiLCJ4PWx1c29sdmUobHUsIGIpIl0sZGVzY3JpcHRpb246IlNvbHZlcyB0aGUgbGluZWFyIHN5c3RlbSBBICogeCA9IGIgd2hlcmUgQSBpcyBhbiBbbiB4IG5dIG1hdHJpeCBhbmQgYiBpcyBhIFtuXSBjb2x1bW4gdmVjdG9yLiIsZXhhbXBsZXM6WyJhID0gWy0yLCAzOyAyLCAxXSIsImIgPSBbMTEsIDldIiwieCA9IGx1c29sdmUoYSwgYikiXSxzZWVhbHNvOlsibHVwIiwic2x1IiwibHNvbHZlIiwidXNvbHZlIiwibWF0cml4Iiwic3BhcnNlIl19LHNpbXBsaWZ5OntuYW1lOiJzaW1wbGlmeSIsY2F0ZWdvcnk6IkFsZ2VicmEiLHN5bnRheDpbInNpbXBsaWZ5KGV4cHIpIiwic2ltcGxpZnkoZXhwciwgcnVsZXMpIl0sZGVzY3JpcHRpb246IlNpbXBsaWZ5IGFuIGV4cHJlc3Npb24gdHJlZS4iLGV4YW1wbGVzOlsnc2ltcGxpZnkoIjMgKyAyIC8gNCIpJywnc2ltcGxpZnkoIjJ4ICsgeCIpJywnZiA9IHBhcnNlKCJ4ICogKHggKyAyICsgeCkiKScsInNpbXBsaWZpZWQgPSBzaW1wbGlmeShmKSIsInNpbXBsaWZpZWQuZXZhbHVhdGUoe3g6IDJ9KSJdLHNlZWFsc286WyJkZXJpdmF0aXZlIiwicGFyc2UiLCJldmFsdWF0ZSJdfSxyYXRpb25hbGl6ZTp7bmFtZToicmF0aW9uYWxpemUiLGNhdGVnb3J5OiJBbGdlYnJhIixzeW50YXg6WyJyYXRpb25hbGl6ZShleHByKSIsInJhdGlvbmFsaXplKGV4cHIsIHNjb3BlKSIsInJhdGlvbmFsaXplKGV4cHIsIHNjb3BlLCBkZXRhaWxlZCkiXSxkZXNjcmlwdGlvbjoiVHJhbnNmb3JtIGEgcmF0aW9uYWxpemFibGUgZXhwcmVzc2lvbiBpbiBhIHJhdGlvbmFsIGZyYWN0aW9uLiBJZiByYXRpb25hbCBmcmFjdGlvbiBpcyBvbmUgdmFyaWFibGUgcG9seW5vbWlhbCB0aGVuIGNvbnZlcnRzIHRoZSBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yIGluIGNhbm9uaWNhbCBmb3JtLCB3aXRoIGRlY3JlYXNpbmcgZXhwb25lbnRzLCByZXR1cm5pbmcgdGhlIGNvZWZmaWNpZW50cyBvZiBudW1lcmF0b3IuIixleGFtcGxlczpbJ3JhdGlvbmFsaXplKCIyeC95IC0geS8oeCsxKSIpJywncmF0aW9uYWxpemUoIjJ4L3kgLSB5Lyh4KzEpIiwgdHJ1ZSknXSxzZWVhbHNvOlsic2ltcGxpZnkiXX0sc2x1OntuYW1lOiJzbHUiLGNhdGVnb3J5OiJBbGdlYnJhIixzeW50YXg6WyJzbHUoQSwgb3JkZXIsIHRocmVzaG9sZCkiXSxkZXNjcmlwdGlvbjoiQ2FsY3VsYXRlIHRoZSBNYXRyaXggTFUgZGVjb21wb3NpdGlvbiB3aXRoIGZ1bGwgcGl2b3RpbmcuIE1hdHJpeCBBIGlzIGRlY29tcG9zZWQgaW4gdHdvIG1hdHJpY2VzIChMLCBVKSBhbmQgdHdvIHBlcm11dGF0aW9uIHZlY3RvcnMgKHBpbnYsIHEpIHdoZXJlIFAgKiBBICogUSA9IEwgKiBVIixleGFtcGxlczpbInNsdShzcGFyc2UoWzQuNSwgMCwgMy4yLCAwOyAzLjEsIDIuOSwgMCwgMC45OyAwLCAxLjcsIDMsIDA7IDMuNSwgMC40LCAwLCAxXSksIDEsIDAuMDAxKSJdLHNlZWFsc286WyJsdXNvbHZlIiwibHNvbHZlIiwidXNvbHZlIiwibWF0cml4Iiwic3BhcnNlIiwibHVwIiwicXIiXX0sdXNvbHZlOntuYW1lOiJ1c29sdmUiLGNhdGVnb3J5OiJBbGdlYnJhIixzeW50YXg6WyJ4PXVzb2x2ZShVLCBiKSJdLGRlc2NyaXB0aW9uOiJTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gVSAqIHggPSBiIHdoZXJlIFUgaXMgYW4gW24geCBuXSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeCBhbmQgYiBpcyBhIFtuXSBjb2x1bW4gdmVjdG9yLiIsZXhhbXBsZXM6WyJ4PXVzb2x2ZShzcGFyc2UoWzEsIDEsIDEsIDE7IDAsIDEsIDEsIDE7IDAsIDAsIDEsIDE7IDAsIDAsIDAsIDFdKSwgWzE7IDI7IDM7IDRdKSJdLHNlZWFsc286WyJsdXAiLCJsdXNvbHZlIiwibHNvbHZlIiwibWF0cml4Iiwic3BhcnNlIl19LHFyOntuYW1lOiJxciIsY2F0ZWdvcnk6IkFsZ2VicmEiLHN5bnRheDpbInFyKEEpIl0sZGVzY3JpcHRpb246IkNhbGN1bGF0ZXMgdGhlIE1hdHJpeCBRUiBkZWNvbXBvc2l0aW9uLiBNYXRyaXggYEFgIGlzIGRlY29tcG9zZWQgaW4gdHdvIG1hdHJpY2VzIChgUWAsIGBSYCkgd2hlcmUgYFFgIGlzIGFuIG9ydGhvZ29uYWwgbWF0cml4IGFuZCBgUmAgaXMgYW4gdXBwZXIgdHJpYW5ndWxhciBtYXRyaXguIixleGFtcGxlczpbInFyKFtbMSwgLTEsICA0XSwgWzEsICA0LCAtMl0sIFsxLCAgNCwgIDJdLCBbMSwgIC0xLCAwXV0pIl0sc2VlYWxzbzpbImx1cCIsInNsdSIsIm1hdHJpeCJdfSxhYnM6e25hbWU6ImFicyIsY2F0ZWdvcnk6IkFyaXRobWV0aWMiLHN5bnRheDpbImFicyh4KSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlIHRoZSBhYnNvbHV0ZSB2YWx1ZS4iLGV4YW1wbGVzOlsiYWJzKDMuNSkiLCJhYnMoLTQuMikiXSxzZWVhbHNvOlsic2lnbiJdfSxhZGQ6e25hbWU6ImFkZCIsY2F0ZWdvcnk6Ik9wZXJhdG9ycyIsc3ludGF4OlsieCArIHkiLCJhZGQoeCwgeSkiXSxkZXNjcmlwdGlvbjoiQWRkIHR3byB2YWx1ZXMuIixleGFtcGxlczpbImEgPSAyLjEgKyAzLjYiLCJhIC0gMy42IiwiMyArIDJpIiwiMyBjbSArIDIgaW5jaCIsJyIyLjMiICsgIjQiJ10sc2VlYWxzbzpbInN1YnRyYWN0Il19LGNicnQ6e25hbWU6ImNicnQiLGNhdGVnb3J5OiJBcml0aG1ldGljIixzeW50YXg6WyJjYnJ0KHgpIiwiY2JydCh4LCBhbGxSb290cykiXSxkZXNjcmlwdGlvbjoiQ29tcHV0ZSB0aGUgY3ViaWMgcm9vdCB2YWx1ZS4gSWYgeCA9IHkgKiB5ICogeSwgdGhlbiB5IGlzIHRoZSBjdWJpYyByb290IG9mIHguIFdoZW4gYHhgIGlzIGEgbnVtYmVyIG9yIGNvbXBsZXggbnVtYmVyLCBhbiBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgYGFsbFJvb3RzYCBjYW4gYmUgcHJvdmlkZWQgdG8gcmV0dXJuIGFsbCB0aHJlZSBjdWJpYyByb290cy4gSWYgbm90IHByb3ZpZGVkLCB0aGUgcHJpbmNpcGFsIHJvb3QgaXMgcmV0dXJuZWQiLGV4YW1wbGVzOlsiY2JydCg2NCkiLCJjdWJlKDQpIiwiY2JydCgtOCkiLCJjYnJ0KDIgKyAzaSkiLCJjYnJ0KDhpKSIsImNicnQoOGksIHRydWUpIiwiY2JydCgyNyBtXjMpIl0sc2VlYWxzbzpbInNxdWFyZSIsInNxcnQiLCJjdWJlIiwibXVsdGlwbHkiXX0sY2VpbDp7bmFtZToiY2VpbCIsY2F0ZWdvcnk6IkFyaXRobWV0aWMiLHN5bnRheDpbImNlaWwoeCkiXSxkZXNjcmlwdGlvbjoiUm91bmQgYSB2YWx1ZSB0b3dhcmRzIHBsdXMgaW5maW5pdHkuIElmIHggaXMgY29tcGxleCwgYm90aCByZWFsIGFuZCBpbWFnaW5hcnkgcGFydCBhcmUgcm91bmRlZCB0b3dhcmRzIHBsdXMgaW5maW5pdHkuIixleGFtcGxlczpbImNlaWwoMy4yKSIsImNlaWwoMy44KSIsImNlaWwoLTQuMikiXSxzZWVhbHNvOlsiZmxvb3IiLCJmaXgiLCJyb3VuZCJdfSxjdWJlOntuYW1lOiJjdWJlIixjYXRlZ29yeToiQXJpdGhtZXRpYyIsc3ludGF4OlsiY3ViZSh4KSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlIHRoZSBjdWJlIG9mIGEgdmFsdWUuIFRoZSBjdWJlIG9mIHggaXMgeCAqIHggKiB4LiIsZXhhbXBsZXM6WyJjdWJlKDIpIiwiMl4zIiwiMiAqIDIgKiAyIl0sc2VlYWxzbzpbIm11bHRpcGx5Iiwic3F1YXJlIiwicG93Il19LGRpdmlkZTp7bmFtZToiZGl2aWRlIixjYXRlZ29yeToiT3BlcmF0b3JzIixzeW50YXg6WyJ4IC8geSIsImRpdmlkZSh4LCB5KSJdLGRlc2NyaXB0aW9uOiJEaXZpZGUgdHdvIHZhbHVlcy4iLGV4YW1wbGVzOlsiYSA9IDIgLyAzIiwiYSAqIDMiLCI0LjUgLyAyIiwiMyArIDQgLyAyIiwiKDMgKyA0KSAvIDIiLCIxOCBrbSAvIDQuNSJdLHNlZWFsc286WyJtdWx0aXBseSJdfSxkb3REaXZpZGU6e25hbWU6ImRvdERpdmlkZSIsY2F0ZWdvcnk6Ik9wZXJhdG9ycyIsc3ludGF4OlsieCAuLyB5IiwiZG90RGl2aWRlKHgsIHkpIl0sZGVzY3JpcHRpb246IkRpdmlkZSB0d28gdmFsdWVzIGVsZW1lbnQgd2lzZS4iLGV4YW1wbGVzOlsiYSA9IFsxLCAyLCAzOyA0LCA1LCA2XSIsImIgPSBbMiwgMSwgMTsgMywgMiwgNV0iLCJhIC4vIGIiXSxzZWVhbHNvOlsibXVsdGlwbHkiLCJkb3RNdWx0aXBseSIsImRpdmlkZSJdfSxkb3RNdWx0aXBseTp7bmFtZToiZG90TXVsdGlwbHkiLGNhdGVnb3J5OiJPcGVyYXRvcnMiLHN5bnRheDpbInggLiogeSIsImRvdE11bHRpcGx5KHgsIHkpIl0sZGVzY3JpcHRpb246Ik11bHRpcGx5IHR3byB2YWx1ZXMgZWxlbWVudCB3aXNlLiIsZXhhbXBsZXM6WyJhID0gWzEsIDIsIDM7IDQsIDUsIDZdIiwiYiA9IFsyLCAxLCAxOyAzLCAyLCA1XSIsImEgLiogYiJdLHNlZWFsc286WyJtdWx0aXBseSIsImRpdmlkZSIsImRvdERpdmlkZSJdfSxkb3RQb3c6e25hbWU6ImRvdFBvdyIsY2F0ZWdvcnk6Ik9wZXJhdG9ycyIsc3ludGF4OlsieCAuXiB5IiwiZG90UG93KHgsIHkpIl0sZGVzY3JpcHRpb246IkNhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSBlbGVtZW50IHdpc2UuIixleGFtcGxlczpbImEgPSBbMSwgMiwgMzsgNCwgNSwgNl0iLCJhIC5eIDIiXSxzZWVhbHNvOlsicG93Il19LGV4cDp7bmFtZToiZXhwIixjYXRlZ29yeToiQXJpdGhtZXRpYyIsc3ludGF4OlsiZXhwKHgpIl0sZGVzY3JpcHRpb246IkNhbGN1bGF0ZSB0aGUgZXhwb25lbnQgb2YgYSB2YWx1ZS4iLGV4YW1wbGVzOlsiZXhwKDEuMykiLCJlIF4gMS4zIiwibG9nKGV4cCgxLjMpKSIsInggPSAyLjQiLCIoZXhwKGkqeCkgPT0gY29zKHgpICsgaSpzaW4oeCkpICAgIyBFdWxlcidzIGZvcm11bGEiXSxzZWVhbHNvOlsiZXhwbSIsImV4cG0xIiwicG93IiwibG9nIl19LGV4cG06e25hbWU6ImV4cG0iLGNhdGVnb3J5OiJBcml0aG1ldGljIixzeW50YXg6WyJleHAoeCkiXSxkZXNjcmlwdGlvbjoiQ29tcHV0ZSB0aGUgbWF0cml4IGV4cG9uZW50aWFsLCBleHBtKEEpID0gZV5BLiBUaGUgbWF0cml4IG11c3QgYmUgc3F1YXJlLiBOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCBleHAoYSksIHdoaWNoIHBlcmZvcm1zIGVsZW1lbnQtd2lzZSBleHBvbmVudGlhdGlvbi4iLGV4YW1wbGVzOlsiZXhwbShbWzAsMl0sWzAsMF1dKSJdLHNlZWFsc286WyJleHAiXX0sZXhwbTE6e25hbWU6ImV4cG0xIixjYXRlZ29yeToiQXJpdGhtZXRpYyIsc3ludGF4OlsiZXhwbTEoeCkiXSxkZXNjcmlwdGlvbjoiQ2FsY3VsYXRlIHRoZSB2YWx1ZSBvZiBzdWJ0cmFjdGluZyAxIGZyb20gdGhlIGV4cG9uZW50aWFsIHZhbHVlLiIsZXhhbXBsZXM6WyJleHBtMSgyKSIsInBvdyhlLCAyKSAtIDEiLCJsb2coZXhwbTEoMikgKyAxKSJdLHNlZWFsc286WyJleHAiLCJwb3ciLCJsb2ciXX0sZml4OntuYW1lOiJmaXgiLGNhdGVnb3J5OiJBcml0aG1ldGljIixzeW50YXg6WyJmaXgoeCkiXSxkZXNjcmlwdGlvbjoiUm91bmQgYSB2YWx1ZSB0b3dhcmRzIHplcm8uIElmIHggaXMgY29tcGxleCwgYm90aCByZWFsIGFuZCBpbWFnaW5hcnkgcGFydCBhcmUgcm91bmRlZCB0b3dhcmRzIHplcm8uIixleGFtcGxlczpbImZpeCgzLjIpIiwiZml4KDMuOCkiLCJmaXgoLTQuMikiLCJmaXgoLTQuOCkiXSxzZWVhbHNvOlsiY2VpbCIsImZsb29yIiwicm91bmQiXX0sZmxvb3I6e25hbWU6ImZsb29yIixjYXRlZ29yeToiQXJpdGhtZXRpYyIsc3ludGF4OlsiZmxvb3IoeCkiXSxkZXNjcmlwdGlvbjoiUm91bmQgYSB2YWx1ZSB0b3dhcmRzIG1pbnVzIGluZmluaXR5LklmIHggaXMgY29tcGxleCwgYm90aCByZWFsIGFuZCBpbWFnaW5hcnkgcGFydCBhcmUgcm91bmRlZCB0b3dhcmRzIG1pbnVzIGluZmluaXR5LiIsZXhhbXBsZXM6WyJmbG9vcigzLjIpIiwiZmxvb3IoMy44KSIsImZsb29yKC00LjIpIl0sc2VlYWxzbzpbImNlaWwiLCJmaXgiLCJyb3VuZCJdfSxnY2Q6e25hbWU6ImdjZCIsY2F0ZWdvcnk6IkFyaXRobWV0aWMiLHN5bnRheDpbImdjZChhLCBiKSIsImdjZChhLCBiLCBjLCAuLi4pIl0sZGVzY3JpcHRpb246IkNvbXB1dGUgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yLiIsZXhhbXBsZXM6WyJnY2QoOCwgMTIpIiwiZ2NkKC00LCA2KSIsImdjZCgyNSwgMTUsIC0xMCkiXSxzZWVhbHNvOlsibGNtIiwieGdjZCJdfSxoeXBvdDp7bmFtZToiaHlwb3QiLGNhdGVnb3J5OiJBcml0aG1ldGljIixzeW50YXg6WyJoeXBvdChhLCBiLCBjLCAuLi4pIiwiaHlwb3QoW2EsIGIsIGMsIC4uLl0pIl0sZGVzY3JpcHRpb246IkNhbGN1bGF0ZSB0aGUgaHlwb3RlbnVzYSBvZiBhIGxpc3Qgd2l0aCB2YWx1ZXMuICIsZXhhbXBsZXM6WyJoeXBvdCgzLCA0KSIsInNxcnQoM14yICsgNF4yKSIsImh5cG90KC0yKSIsImh5cG90KFszLCA0LCA1XSkiXSxzZWVhbHNvOlsiYWJzIiwibm9ybSJdfSxsY206e25hbWU6ImxjbSIsY2F0ZWdvcnk6IkFyaXRobWV0aWMiLHN5bnRheDpbImxjbSh4LCB5KSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUuIixleGFtcGxlczpbImxjbSg0LCA2KSIsImxjbSg2LCAyMSkiLCJsY20oNiwgMjEsIDUpIl0sc2VlYWxzbzpbImdjZCJdfSxsb2c6e25hbWU6ImxvZyIsY2F0ZWdvcnk6IkFyaXRobWV0aWMiLHN5bnRheDpbImxvZyh4KSIsImxvZyh4LCBiYXNlKSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlIHRoZSBsb2dhcml0aG0gb2YgYSB2YWx1ZS4gSWYgbm8gYmFzZSBpcyBwcm92aWRlZCwgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIHggaXMgY2FsY3VsYXRlZC4gSWYgYmFzZSBpZiBwcm92aWRlZCwgdGhlIGxvZ2FyaXRobSBpcyBjYWxjdWxhdGVkIGZvciB0aGUgc3BlY2lmaWVkIGJhc2UuIGxvZyh4LCBiYXNlKSBpcyBkZWZpbmVkIGFzIGxvZyh4KSAvIGxvZyhiYXNlKS4iLGV4YW1wbGVzOlsibG9nKDMuNSkiLCJhID0gbG9nKDIuNCkiLCJleHAoYSkiLCIxMCBeIDQiLCJsb2coMTAwMDAsIDEwKSIsImxvZygxMDAwMCkgLyBsb2coMTApIiwiYiA9IGxvZygxMDI0LCAyKSIsIjIgXiBiIl0sc2VlYWxzbzpbImV4cCIsImxvZzFwIiwibG9nMiIsImxvZzEwIl19LGxvZzI6e25hbWU6ImxvZzIiLGNhdGVnb3J5OiJBcml0aG1ldGljIixzeW50YXg6WyJsb2cyKHgpIl0sZGVzY3JpcHRpb246IkNhbGN1bGF0ZSB0aGUgMi1iYXNlIG9mIGEgdmFsdWUuIFRoaXMgaXMgdGhlIHNhbWUgYXMgY2FsY3VsYXRpbmcgYGxvZyh4LCAyKWAuIixleGFtcGxlczpbImxvZzIoMC4wMzEyNSkiLCJsb2cyKDE2KSIsImxvZzIoMTYpIC8gbG9nMigyKSIsInBvdygyLCA0KSJdLHNlZWFsc286WyJleHAiLCJsb2cxcCIsImxvZyIsImxvZzEwIl19LGxvZzFwOntuYW1lOiJsb2cxcCIsY2F0ZWdvcnk6IkFyaXRobWV0aWMiLHN5bnRheDpbImxvZzFwKHgpIiwibG9nMXAoeCwgYmFzZSkiXSxkZXNjcmlwdGlvbjoiQ2FsY3VsYXRlIHRoZSBsb2dhcml0aG0gb2YgYSBgdmFsdWUrMWAiLGV4YW1wbGVzOlsibG9nMXAoMi41KSIsImV4cChsb2cxcCgxLjQpKSIsInBvdygxMCwgNCkiLCJsb2cxcCg5OTk5LCAxMCkiLCJsb2cxcCg5OTk5KSAvIGxvZygxMCkiXSxzZWVhbHNvOlsiZXhwIiwibG9nIiwibG9nMiIsImxvZzEwIl19LGxvZzEwOntuYW1lOiJsb2cxMCIsY2F0ZWdvcnk6IkFyaXRobWV0aWMiLHN5bnRheDpbImxvZzEwKHgpIl0sZGVzY3JpcHRpb246IkNvbXB1dGUgdGhlIDEwLWJhc2UgbG9nYXJpdGhtIG9mIGEgdmFsdWUuIixleGFtcGxlczpbImxvZzEwKDAuMDAwMDEpIiwibG9nMTAoMTAwMDApIiwiMTAgXiA0IiwibG9nKDEwMDAwKSAvIGxvZygxMCkiLCJsb2coMTAwMDAsIDEwKSJdLHNlZWFsc286WyJleHAiLCJsb2ciXX0sbW9kOntuYW1lOiJtb2QiLGNhdGVnb3J5OiJPcGVyYXRvcnMiLHN5bnRheDpbInggJSB5IiwieCBtb2QgeSIsIm1vZCh4LCB5KSJdLGRlc2NyaXB0aW9uOiJDYWxjdWxhdGVzIHRoZSBtb2R1bHVzLCB0aGUgcmVtYWluZGVyIG9mIGFuIGludGVnZXIgZGl2aXNpb24uIixleGFtcGxlczpbIjcgJSAzIiwiMTEgJSAyIiwiMTAgbW9kIDQiLCJpc09kZCh4KSA9IHggJSAyIiwiaXNPZGQoMikiLCJpc09kZCgzKSJdLHNlZWFsc286WyJkaXZpZGUiXX0sbXVsdGlwbHk6e25hbWU6Im11bHRpcGx5IixjYXRlZ29yeToiT3BlcmF0b3JzIixzeW50YXg6WyJ4ICogeSIsIm11bHRpcGx5KHgsIHkpIl0sZGVzY3JpcHRpb246Im11bHRpcGx5IHR3byB2YWx1ZXMuIixleGFtcGxlczpbImEgPSAyLjEgKiAzLjQiLCJhIC8gMy40IiwiMiAqIDMgKyA0IiwiMiAqICgzICsgNCkiLCIzICogMi4xIGttIl0sc2VlYWxzbzpbImRpdmlkZSJdfSxub3JtOntuYW1lOiJub3JtIixjYXRlZ29yeToiQXJpdGhtZXRpYyIsc3ludGF4Olsibm9ybSh4KSIsIm5vcm0oeCwgcCkiXSxkZXNjcmlwdGlvbjoiQ2FsY3VsYXRlIHRoZSBub3JtIG9mIGEgbnVtYmVyLCB2ZWN0b3Igb3IgbWF0cml4LiIsZXhhbXBsZXM6WyJhYnMoLTMuNSkiLCJub3JtKC0zLjUpIiwibm9ybSgzIC0gNGkpIiwibm9ybShbMSwgMiwgLTNdLCBJbmZpbml0eSkiLCJub3JtKFsxLCAyLCAtM10sIC1JbmZpbml0eSkiLCJub3JtKFszLCA0XSwgMikiLCJub3JtKFtbMSwgMl0sIFszLCA0XV0sIDEpIiwnbm9ybShbWzEsIDJdLCBbMywgNF1dLCAiaW5mIiknLCdub3JtKFtbMSwgMl0sIFszLCA0XV0sICJmcm8iKSddfSxudGhSb290OntuYW1lOiJudGhSb290IixjYXRlZ29yeToiQXJpdGhtZXRpYyIsc3ludGF4OlsibnRoUm9vdChhKSIsIm50aFJvb3QoYSwgcm9vdCkiXSxkZXNjcmlwdGlvbjonQ2FsY3VsYXRlIHRoZSBudGggcm9vdCBvZiBhIHZhbHVlLiBUaGUgcHJpbmNpcGFsIG50aCByb290IG9mIGEgcG9zaXRpdmUgcmVhbCBudW1iZXIgQSwgaXMgdGhlIHBvc2l0aXZlIHJlYWwgc29sdXRpb24gb2YgdGhlIGVxdWF0aW9uICJ4XnJvb3QgPSBBIi4nLGV4YW1wbGVzOlsiNCBeIDMiLCJudGhSb290KDY0LCAzKSIsIm50aFJvb3QoOSwgMikiLCJzcXJ0KDkpIl0sc2VlYWxzbzpbIm50aFJvb3RzIiwicG93Iiwic3FydCJdfSxudGhSb290czp7bmFtZToibnRoUm9vdHMiLGNhdGVnb3J5OiJBcml0aG1ldGljIixzeW50YXg6WyJudGhSb290cyhBKSIsIm50aFJvb3RzKEEsIHJvb3QpIl0sZGVzY3JpcHRpb246J0NhbGN1bGF0ZSB0aGUgbnRoIHJvb3RzIG9mIGEgdmFsdWUuIEFuIG50aCByb290IG9mIGEgcG9zaXRpdmUgcmVhbCBudW1iZXIgQSwgaXMgYSBwb3NpdGl2ZSByZWFsIHNvbHV0aW9uIG9mIHRoZSBlcXVhdGlvbiAieF5yb290ID0gQSIuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSBvZiBjb21wbGV4IHZhbHVlcy4nLGV4YW1wbGVzOlsibnRoUm9vdHMoMSkiLCJudGhSb290cygxLCAzKSJdLHNlZWFsc286WyJzcXJ0IiwicG93IiwibnRoUm9vdCJdfSxwb3c6e25hbWU6InBvdyIsY2F0ZWdvcnk6Ik9wZXJhdG9ycyIsc3ludGF4OlsieCBeIHkiLCJwb3coeCwgeSkiXSxkZXNjcmlwdGlvbjoiQ2FsY3VsYXRlcyB0aGUgcG93ZXIgb2YgeCB0byB5LCB4XnkuIixleGFtcGxlczpbIjJeMyIsIjIqMioyIiwiMSArIGUgXiAocGkgKiBpKSJdLHNlZWFsc286WyJtdWx0aXBseSIsIm50aFJvb3QiLCJudGhSb290cyIsInNxcnQiXX0scm91bmQ6e25hbWU6InJvdW5kIixjYXRlZ29yeToiQXJpdGhtZXRpYyIsc3ludGF4Olsicm91bmQoeCkiLCJyb3VuZCh4LCBuKSJdLGRlc2NyaXB0aW9uOiJyb3VuZCBhIHZhbHVlIHRvd2FyZHMgdGhlIG5lYXJlc3QgaW50ZWdlci5JZiB4IGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyB0aGUgbmVhcmVzdCBpbnRlZ2VyLiBXaGVuIG4gaXMgc3BlY2lmaWVkLCB0aGUgdmFsdWUgaXMgcm91bmRlZCB0byBuIGRlY2ltYWxzLiIsZXhhbXBsZXM6WyJyb3VuZCgzLjIpIiwicm91bmQoMy44KSIsInJvdW5kKC00LjIpIiwicm91bmQoLTQuOCkiLCJyb3VuZChwaSwgMykiLCJyb3VuZCgxMjMuNDU2NzgsIDIpIl0sc2VlYWxzbzpbImNlaWwiLCJmbG9vciIsImZpeCJdfSxzaWduOntuYW1lOiJzaWduIixjYXRlZ29yeToiQXJpdGhtZXRpYyIsc3ludGF4Olsic2lnbih4KSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlIHRoZSBzaWduIG9mIGEgdmFsdWUuIFRoZSBzaWduIG9mIGEgdmFsdWUgeCBpcyAxIHdoZW4geD4xLCAtMSB3aGVuIHg8MCwgYW5kIDAgd2hlbiB4PTAuIixleGFtcGxlczpbInNpZ24oMy41KSIsInNpZ24oLTQuMikiLCJzaWduKDApIl0sc2VlYWxzbzpbImFicyJdfSxzcXJ0OntuYW1lOiJzcXJ0IixjYXRlZ29yeToiQXJpdGhtZXRpYyIsc3ludGF4Olsic3FydCh4KSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlIHRoZSBzcXVhcmUgcm9vdCB2YWx1ZS4gSWYgeCA9IHkgKiB5LCB0aGVuIHkgaXMgdGhlIHNxdWFyZSByb290IG9mIHguIixleGFtcGxlczpbInNxcnQoMjUpIiwiNSAqIDUiLCJzcXJ0KC0xKSJdLHNlZWFsc286WyJzcXVhcmUiLCJzcXJ0bSIsIm11bHRpcGx5IiwibnRoUm9vdCIsIm50aFJvb3RzIiwicG93Il19LHNxcnRtOntuYW1lOiJzcXJ0bSIsY2F0ZWdvcnk6IkFyaXRobWV0aWMiLHN5bnRheDpbInNxcnRtKHgpIl0sZGVzY3JpcHRpb246IkNhbGN1bGF0ZSB0aGUgcHJpbmNpcGFsIHNxdWFyZSByb290IG9mIGEgc3F1YXJlIG1hdHJpeC4gVGhlIHByaW5jaXBhbCBzcXVhcmUgcm9vdCBtYXRyaXggYFhgIG9mIGFub3RoZXIgbWF0cml4IGBBYCBpcyBzdWNoIHRoYXQgYFggKiBYID0gQWAuIixleGFtcGxlczpbInNxcnRtKFtbMSwgMl0sIFszLCA0XV0pIl0sc2VlYWxzbzpbInNxcnQiLCJhYnMiLCJzcXVhcmUiLCJtdWx0aXBseSJdfSxzcXVhcmU6e25hbWU6InNxdWFyZSIsY2F0ZWdvcnk6IkFyaXRobWV0aWMiLHN5bnRheDpbInNxdWFyZSh4KSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlIHRoZSBzcXVhcmUgb2YgYSB2YWx1ZS4gVGhlIHNxdWFyZSBvZiB4IGlzIHggKiB4LiIsZXhhbXBsZXM6WyJzcXVhcmUoMykiLCJzcXJ0KDkpIiwiM14yIiwiMyAqIDMiXSxzZWVhbHNvOlsibXVsdGlwbHkiLCJwb3ciLCJzcXJ0IiwiY3ViZSJdfSxzdWJ0cmFjdDp7bmFtZToic3VidHJhY3QiLGNhdGVnb3J5OiJPcGVyYXRvcnMiLHN5bnRheDpbInggLSB5Iiwic3VidHJhY3QoeCwgeSkiXSxkZXNjcmlwdGlvbjoic3VidHJhY3QgdHdvIHZhbHVlcy4iLGV4YW1wbGVzOlsiYSA9IDUuMyAtIDIiLCJhICsgMiIsIjIvMyAtIDEvNiIsIjIgKiAzIC0gMyIsIjIuMSBrbSAtIDUwMG0iXSxzZWVhbHNvOlsiYWRkIl19LHVuYXJ5TWludXM6e25hbWU6InVuYXJ5TWludXMiLGNhdGVnb3J5OiJPcGVyYXRvcnMiLHN5bnRheDpbIi14IiwidW5hcnlNaW51cyh4KSJdLGRlc2NyaXB0aW9uOiJJbnZlcnNlIHRoZSBzaWduIG9mIGEgdmFsdWUuIENvbnZlcnRzIGJvb2xlYW5zIGFuZCBzdHJpbmdzIHRvIG51bWJlcnMuIixleGFtcGxlczpbIi00LjUiLCItKC01LjYpIiwnLSIyMiInXSxzZWVhbHNvOlsiYWRkIiwic3VidHJhY3QiLCJ1bmFyeVBsdXMiXX0sdW5hcnlQbHVzOntuYW1lOiJ1bmFyeVBsdXMiLGNhdGVnb3J5OiJPcGVyYXRvcnMiLHN5bnRheDpbIit4IiwidW5hcnlQbHVzKHgpIl0sZGVzY3JpcHRpb246IkNvbnZlcnRzIGJvb2xlYW5zIGFuZCBzdHJpbmdzIHRvIG51bWJlcnMuIixleGFtcGxlczpbIit0cnVlIiwnKyIyIiddLHNlZWFsc286WyJhZGQiLCJzdWJ0cmFjdCIsInVuYXJ5TWludXMiXX0seGdjZDp7bmFtZToieGdjZCIsY2F0ZWdvcnk6IkFyaXRobWV0aWMiLHN5bnRheDpbInhnY2QoYSwgYikiXSxkZXNjcmlwdGlvbjoiQ2FsY3VsYXRlIHRoZSBleHRlbmRlZCBncmVhdGVzdCBjb21tb24gZGl2aXNvciBmb3IgdHdvIHZhbHVlcy4gVGhlIHJlc3VsdCBpcyBhbiBhcnJheSBbZCwgeCwgeV0gd2l0aCAzIGVudHJpZXMsIHdoZXJlIGQgaXMgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yLCBhbmQgZCA9IHggKiBhICsgeSAqIGIuIixleGFtcGxlczpbInhnY2QoOCwgMTIpIiwiZ2NkKDgsIDEyKSIsInhnY2QoMzYxNjMsIDIxMTk5KSJdLHNlZWFsc286WyJnY2QiLCJsY20iXX0sYml0QW5kOntuYW1lOiJiaXRBbmQiLGNhdGVnb3J5OiJCaXR3aXNlIixzeW50YXg6WyJ4ICYgeSIsImJpdEFuZCh4LCB5KSJdLGRlc2NyaXB0aW9uOiJCaXR3aXNlIEFORCBvcGVyYXRpb24uIFBlcmZvcm1zIHRoZSBsb2dpY2FsIEFORCBvcGVyYXRpb24gb24gZWFjaCBwYWlyIG9mIHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgb2YgdGhlIHR3byBnaXZlbiB2YWx1ZXMgYnkgbXVsdGlwbHlpbmcgdGhlbS4gSWYgYm90aCBiaXRzIGluIHRoZSBjb21wYXJlZCBwb3NpdGlvbiBhcmUgMSwgdGhlIGJpdCBpbiB0aGUgcmVzdWx0aW5nIGJpbmFyeSByZXByZXNlbnRhdGlvbiBpcyAxLCBvdGhlcndpc2UsIHRoZSByZXN1bHQgaXMgMCIsZXhhbXBsZXM6WyI1ICYgMyIsImJpdEFuZCg1MywgMTMxKSIsIlsxLCAxMiwgMzFdICYgNDIiXSxzZWVhbHNvOlsiYml0Tm90IiwiYml0T3IiLCJiaXRYb3IiLCJsZWZ0U2hpZnQiLCJyaWdodEFyaXRoU2hpZnQiLCJyaWdodExvZ1NoaWZ0Il19LGJpdE5vdDp7bmFtZToiYml0Tm90IixjYXRlZ29yeToiQml0d2lzZSIsc3ludGF4OlsifngiLCJiaXROb3QoeCkiXSxkZXNjcmlwdGlvbjoiQml0d2lzZSBOT1Qgb3BlcmF0aW9uLiBQZXJmb3JtcyBhIGxvZ2ljYWwgbmVnYXRpb24gb24gZWFjaCBiaXQgb2YgdGhlIGdpdmVuIHZhbHVlLiBCaXRzIHRoYXQgYXJlIDAgYmVjb21lIDEsIGFuZCB0aG9zZSB0aGF0IGFyZSAxIGJlY29tZSAwLiIsZXhhbXBsZXM6WyJ+MSIsIn4yIiwiYml0Tm90KFsyLCAtMywgNF0pIl0sc2VlYWxzbzpbImJpdEFuZCIsImJpdE9yIiwiYml0WG9yIiwibGVmdFNoaWZ0IiwicmlnaHRBcml0aFNoaWZ0IiwicmlnaHRMb2dTaGlmdCJdfSxiaXRPcjp7bmFtZToiYml0T3IiLGNhdGVnb3J5OiJCaXR3aXNlIixzeW50YXg6WyJ4IHwgeSIsImJpdE9yKHgsIHkpIl0sZGVzY3JpcHRpb246IkJpdHdpc2UgT1Igb3BlcmF0aW9uLiBQZXJmb3JtcyB0aGUgbG9naWNhbCBpbmNsdXNpdmUgT1Igb3BlcmF0aW9uIG9uIGVhY2ggcGFpciBvZiBjb3JyZXNwb25kaW5nIGJpdHMgb2YgdGhlIHR3byBnaXZlbiB2YWx1ZXMuIFRoZSByZXN1bHQgaW4gZWFjaCBwb3NpdGlvbiBpcyAxIGlmIHRoZSBmaXJzdCBiaXQgaXMgMSBvciB0aGUgc2Vjb25kIGJpdCBpcyAxIG9yIGJvdGggYml0cyBhcmUgMSwgb3RoZXJ3aXNlLCB0aGUgcmVzdWx0IGlzIDAuIixleGFtcGxlczpbIjUgfCAzIiwiYml0T3IoWzEsIDIsIDNdLCA0KSJdLHNlZWFsc286WyJiaXRBbmQiLCJiaXROb3QiLCJiaXRYb3IiLCJsZWZ0U2hpZnQiLCJyaWdodEFyaXRoU2hpZnQiLCJyaWdodExvZ1NoaWZ0Il19LGJpdFhvcjp7bmFtZToiYml0WG9yIixjYXRlZ29yeToiQml0d2lzZSIsc3ludGF4OlsiYml0WG9yKHgsIHkpIl0sZGVzY3JpcHRpb246IkJpdHdpc2UgWE9SIG9wZXJhdGlvbiwgZXhjbHVzaXZlIE9SLiBQZXJmb3JtcyB0aGUgbG9naWNhbCBleGNsdXNpdmUgT1Igb3BlcmF0aW9uIG9uIGVhY2ggcGFpciBvZiBjb3JyZXNwb25kaW5nIGJpdHMgb2YgdGhlIHR3byBnaXZlbiB2YWx1ZXMuIFRoZSByZXN1bHQgaW4gZWFjaCBwb3NpdGlvbiBpcyAxIGlmIG9ubHkgdGhlIGZpcnN0IGJpdCBpcyAxIG9yIG9ubHkgdGhlIHNlY29uZCBiaXQgaXMgMSwgYnV0IHdpbGwgYmUgMCBpZiBib3RoIGFyZSAwIG9yIGJvdGggYXJlIDEuIixleGFtcGxlczpbImJpdE9yKDEsIDIpIiwiYml0WG9yKFsyLCAzLCA0XSwgNCkiXSxzZWVhbHNvOlsiYml0QW5kIiwiYml0Tm90IiwiYml0T3IiLCJsZWZ0U2hpZnQiLCJyaWdodEFyaXRoU2hpZnQiLCJyaWdodExvZ1NoaWZ0Il19LGxlZnRTaGlmdDp7bmFtZToibGVmdFNoaWZ0IixjYXRlZ29yeToiQml0d2lzZSIsc3ludGF4OlsieCA8PCB5IiwibGVmdFNoaWZ0KHgsIHkpIl0sZGVzY3JpcHRpb246IkJpdHdpc2UgbGVmdCBsb2dpY2FsIHNoaWZ0IG9mIGEgdmFsdWUgeCBieSB5IG51bWJlciBvZiBiaXRzLiIsZXhhbXBsZXM6WyI0IDw8IDEiLCI4ID4+IDEiXSxzZWVhbHNvOlsiYml0QW5kIiwiYml0Tm90IiwiYml0T3IiLCJiaXRYb3IiLCJyaWdodEFyaXRoU2hpZnQiLCJyaWdodExvZ1NoaWZ0Il19LHJpZ2h0QXJpdGhTaGlmdDp7bmFtZToicmlnaHRBcml0aFNoaWZ0IixjYXRlZ29yeToiQml0d2lzZSIsc3ludGF4OlsieCA+PiB5IiwicmlnaHRBcml0aFNoaWZ0KHgsIHkpIl0sZGVzY3JpcHRpb246IkJpdHdpc2UgcmlnaHQgYXJpdGhtZXRpYyBzaGlmdCBvZiBhIHZhbHVlIHggYnkgeSBudW1iZXIgb2YgYml0cy4iLGV4YW1wbGVzOlsiOCA+PiAxIiwiNCA8PCAxIiwiLTEyID4+IDIiXSxzZWVhbHNvOlsiYml0QW5kIiwiYml0Tm90IiwiYml0T3IiLCJiaXRYb3IiLCJsZWZ0U2hpZnQiLCJyaWdodExvZ1NoaWZ0Il19LHJpZ2h0TG9nU2hpZnQ6e25hbWU6InJpZ2h0TG9nU2hpZnQiLGNhdGVnb3J5OiJCaXR3aXNlIixzeW50YXg6WyJ4ID4+PiB5IiwicmlnaHRMb2dTaGlmdCh4LCB5KSJdLGRlc2NyaXB0aW9uOiJCaXR3aXNlIHJpZ2h0IGxvZ2ljYWwgc2hpZnQgb2YgYSB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMuIixleGFtcGxlczpbIjggPj4+IDEiLCI0IDw8IDEiLCItMTIgPj4+IDIiXSxzZWVhbHNvOlsiYml0QW5kIiwiYml0Tm90IiwiYml0T3IiLCJiaXRYb3IiLCJsZWZ0U2hpZnQiLCJyaWdodEFyaXRoU2hpZnQiXX0sYmVsbE51bWJlcnM6e25hbWU6ImJlbGxOdW1iZXJzIixjYXRlZ29yeToiQ29tYmluYXRvcmljcyIsc3ludGF4OlsiYmVsbE51bWJlcnMobikiXSxkZXNjcmlwdGlvbjoiVGhlIEJlbGwgTnVtYmVycyBjb3VudCB0aGUgbnVtYmVyIG9mIHBhcnRpdGlvbnMgb2YgYSBzZXQuIEEgcGFydGl0aW9uIGlzIGEgcGFpcndpc2UgZGlzam9pbnQgc3Vic2V0IG9mIFMgd2hvc2UgdW5pb24gaXMgUy4gYGJlbGxOdW1iZXJzYCBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBuID49IDAuIixleGFtcGxlczpbImJlbGxOdW1iZXJzKDMpIiwiYmVsbE51bWJlcnMoOCkiXSxzZWVhbHNvOlsic3RpcmxpbmdTMiJdfSxjYXRhbGFuOntuYW1lOiJjYXRhbGFuIixjYXRlZ29yeToiQ29tYmluYXRvcmljcyIsc3ludGF4OlsiY2F0YWxhbihuKSJdLGRlc2NyaXB0aW9uOiJUaGUgQ2F0YWxhbiBOdW1iZXJzIGVudW1lcmF0ZSBjb21iaW5hdG9yaWFsIHN0cnVjdHVyZXMgb2YgbWFueSBkaWZmZXJlbnQgdHlwZXMuIGNhdGFsYW4gb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy4gVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogbiA+PSAwLiIsZXhhbXBsZXM6WyJjYXRhbGFuKDMpIiwiY2F0YWxhbig4KSJdLHNlZWFsc286WyJiZWxsTnVtYmVycyJdfSxjb21wb3NpdGlvbjp7bmFtZToiY29tcG9zaXRpb24iLGNhdGVnb3J5OiJDb21iaW5hdG9yaWNzIixzeW50YXg6WyJjb21wb3NpdGlvbihuLCBrKSJdLGRlc2NyaXB0aW9uOiJUaGUgY29tcG9zaXRpb24gY291bnRzIG9mIG4gaW50byBrIHBhcnRzLiBjb21wb3NpdGlvbiBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBrIDw9IG4uIixleGFtcGxlczpbImNvbXBvc2l0aW9uKDUsIDMpIl0sc2VlYWxzbzpbImNvbWJpbmF0aW9ucyJdfSxzdGlybGluZ1MyOntuYW1lOiJzdGlybGluZ1MyIixjYXRlZ29yeToiQ29tYmluYXRvcmljcyIsc3ludGF4Olsic3RpcmxpbmdTMihuLCBrKSJdLGRlc2NyaXB0aW9uOiJoZSBTdGlybGluZyBudW1iZXJzIG9mIHRoZSBzZWNvbmQga2luZCwgY291bnRzIHRoZSBudW1iZXIgb2Ygd2F5cyB0byBwYXJ0aXRpb24gYSBzZXQgb2YgbiBsYWJlbGxlZCBvYmplY3RzIGludG8gayBub25lbXB0eSB1bmxhYmVsbGVkIHN1YnNldHMuIGBzdGlybGluZ1MyYCBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBrIDw9IG4uIElmIG4gPSBrIG9yIGsgPSAxLCB0aGVuIHMobixrKSA9IDEuIixleGFtcGxlczpbInN0aXJsaW5nUzIoNSwgMykiXSxzZWVhbHNvOlsiYmVsbE51bWJlcnMiXX0sY29uZmlnOntuYW1lOiJjb25maWciLGNhdGVnb3J5OiJDb3JlIixzeW50YXg6WyJjb25maWcoKSIsImNvbmZpZyhvcHRpb25zKSJdLGRlc2NyaXB0aW9uOiJHZXQgY29uZmlndXJhdGlvbiBvciBjaGFuZ2UgY29uZmlndXJhdGlvbi4iLGV4YW1wbGVzOlsiY29uZmlnKCkiLCIxLzMgKyAxLzQiLCdjb25maWcoe251bWJlcjogIkZyYWN0aW9uIn0pJywiMS8zICsgMS80Il0sc2VlYWxzbzpbXX0saW1wb3J0OntuYW1lOiJpbXBvcnQiLGNhdGVnb3J5OiJDb3JlIixzeW50YXg6WyJpbXBvcnQoZnVuY3Rpb25zKSIsImltcG9ydChmdW5jdGlvbnMsIG9wdGlvbnMpIl0sZGVzY3JpcHRpb246IkltcG9ydCBmdW5jdGlvbnMgb3IgY29uc3RhbnRzIGZyb20gYW4gb2JqZWN0LiIsZXhhbXBsZXM6WyJpbXBvcnQoe215Rm46IGYoeCk9eF4yLCBteUNvbnN0YW50OiAzMiB9KSIsIm15Rm4oMikiLCJteUNvbnN0YW50Il0sc2VlYWxzbzpbXX0sdHlwZWQ6e25hbWU6InR5cGVkIixjYXRlZ29yeToiQ29yZSIsc3ludGF4OlsidHlwZWQoc2lnbmF0dXJlcykiLCJ0eXBlZChuYW1lLCBzaWduYXR1cmVzKSJdLGRlc2NyaXB0aW9uOiJDcmVhdGUgYSB0eXBlZCBmdW5jdGlvbi4iLGV4YW1wbGVzOlsnZG91YmxlID0gdHlwZWQoeyAibnVtYmVyLCBudW1iZXIiOiBmKHgpPXgreCB9KScsImRvdWJsZSgyKSIsJ2RvdWJsZSgiaGVsbG8iKSddLHNlZWFsc286W119LGFyZzp7bmFtZToiYXJnIixjYXRlZ29yeToiQ29tcGxleCIsc3ludGF4OlsiYXJnKHgpIl0sZGVzY3JpcHRpb246IkNvbXB1dGUgdGhlIGFyZ3VtZW50IG9mIGEgY29tcGxleCB2YWx1ZS4gSWYgeCA9IGErYmksIHRoZSBhcmd1bWVudCBpcyBjb21wdXRlZCBhcyBhdGFuMihiLCBhKS4iLGV4YW1wbGVzOlsiYXJnKDIgKyAyaSkiLCJhdGFuMigzLCAyKSIsImFyZygyICsgM2kpIl0sc2VlYWxzbzpbInJlIiwiaW0iLCJjb25qIiwiYWJzIl19LGNvbmo6e25hbWU6ImNvbmoiLGNhdGVnb3J5OiJDb21wbGV4IixzeW50YXg6WyJjb25qKHgpIl0sZGVzY3JpcHRpb246IkNvbXB1dGUgdGhlIGNvbXBsZXggY29uanVnYXRlIG9mIGEgY29tcGxleCB2YWx1ZS4gSWYgeCA9IGErYmksIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBpcyBhLWJpLiIsZXhhbXBsZXM6WyJjb25qKDIgKyAzaSkiLCJjb25qKDIgLSAzaSkiLCJjb25qKC01LjJpKSJdLHNlZWFsc286WyJyZSIsImltIiwiYWJzIiwiYXJnIl19LHJlOntuYW1lOiJyZSIsY2F0ZWdvcnk6IkNvbXBsZXgiLHN5bnRheDpbInJlKHgpIl0sZGVzY3JpcHRpb246IkdldCB0aGUgcmVhbCBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIuIixleGFtcGxlczpbInJlKDIgKyAzaSkiLCJpbSgyICsgM2kpIiwicmUoLTUuMmkpIiwicmUoMi40KSJdLHNlZWFsc286WyJpbSIsImNvbmoiLCJhYnMiLCJhcmciXX0saW06e25hbWU6ImltIixjYXRlZ29yeToiQ29tcGxleCIsc3ludGF4OlsiaW0oeCkiXSxkZXNjcmlwdGlvbjoiR2V0IHRoZSBpbWFnaW5hcnkgcGFydCBvZiBhIGNvbXBsZXggbnVtYmVyLiIsZXhhbXBsZXM6WyJpbSgyICsgM2kpIiwicmUoMiArIDNpKSIsImltKC01LjJpKSIsImltKDIuNCkiXSxzZWVhbHNvOlsicmUiLCJjb25qIiwiYWJzIiwiYXJnIl19LGV2YWx1YXRlOkFsLGV2YWw6QWwsaGVscDp7bmFtZToiaGVscCIsY2F0ZWdvcnk6IkV4cHJlc3Npb24iLHN5bnRheDpbImhlbHAob2JqZWN0KSIsImhlbHAoc3RyaW5nKSJdLGRlc2NyaXB0aW9uOiJEaXNwbGF5IGRvY3VtZW50YXRpb24gb24gYSBmdW5jdGlvbiBvciBkYXRhIHR5cGUuIixleGFtcGxlczpbImhlbHAoc3FydCkiLCdoZWxwKCJjb21wbGV4IiknXSxzZWVhbHNvOltdfSxkaXN0YW5jZTp7bmFtZToiZGlzdGFuY2UiLGNhdGVnb3J5OiJHZW9tZXRyeSIsc3ludGF4OlsiZGlzdGFuY2UoW3gxLCB5MV0sIFt4MiwgeTJdKSIsImRpc3RhbmNlKFtbeDEsIHkxXSwgW3gyLCB5Ml1dKSJdLGRlc2NyaXB0aW9uOiJDYWxjdWxhdGVzIHRoZSBFdWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzLiIsZXhhbXBsZXM6WyJkaXN0YW5jZShbMCwwXSwgWzQsNF0pIiwiZGlzdGFuY2UoW1swLDBdLCBbNCw0XV0pIl0sc2VlYWxzbzpbXX0saW50ZXJzZWN0OntuYW1lOiJpbnRlcnNlY3QiLGNhdGVnb3J5OiJHZW9tZXRyeSIsc3ludGF4OlsiaW50ZXJzZWN0KGV4cHIxLCBleHByMiwgZXhwcjMsIGV4cHI0KSIsImludGVyc2VjdChleHByMSwgZXhwcjIsIGV4cHIzKSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlcyB0aGUgaW50ZXJzZWN0aW9uIHBvaW50IG9mIGxpbmVzIGFuZC9vciBwbGFuZXMuIixleGFtcGxlczpbImludGVyc2VjdChbMCwgMF0sIFsxMCwgMTBdLCBbMTAsIDBdLCBbMCwgMTBdKSIsImludGVyc2VjdChbMSwgMCwgMV0sICBbNCwgLTIsIDJdLCBbMSwgMSwgMSwgNl0pIl0sc2VlYWxzbzpbXX0sYW5kOntuYW1lOiJhbmQiLGNhdGVnb3J5OiJMb2dpY2FsIixzeW50YXg6WyJ4IGFuZCB5IiwiYW5kKHgsIHkpIl0sZGVzY3JpcHRpb246IkxvZ2ljYWwgYW5kLiBUZXN0IHdoZXRoZXIgdHdvIHZhbHVlcyBhcmUgYm90aCBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLiIsZXhhbXBsZXM6WyJ0cnVlIGFuZCBmYWxzZSIsInRydWUgYW5kIHRydWUiLCIyIGFuZCA0Il0sc2VlYWxzbzpbIm5vdCIsIm9yIiwieG9yIl19LG5vdDp7bmFtZToibm90IixjYXRlZ29yeToiTG9naWNhbCIsc3ludGF4Olsibm90IHgiLCJub3QoeCkiXSxkZXNjcmlwdGlvbjoiTG9naWNhbCBub3QuIEZsaXBzIHRoZSBib29sZWFuIHZhbHVlIG9mIGdpdmVuIGFyZ3VtZW50LiIsZXhhbXBsZXM6WyJub3QgdHJ1ZSIsIm5vdCBmYWxzZSIsIm5vdCAyIiwibm90IDAiXSxzZWVhbHNvOlsiYW5kIiwib3IiLCJ4b3IiXX0sb3I6e25hbWU6Im9yIixjYXRlZ29yeToiTG9naWNhbCIsc3ludGF4OlsieCBvciB5Iiwib3IoeCwgeSkiXSxkZXNjcmlwdGlvbjoiTG9naWNhbCBvci4gVGVzdCBpZiBhdCBsZWFzdCBvbmUgdmFsdWUgaXMgZGVmaW5lZCB3aXRoIGEgbm9uemVyby9ub25lbXB0eSB2YWx1ZS4iLGV4YW1wbGVzOlsidHJ1ZSBvciBmYWxzZSIsImZhbHNlIG9yIGZhbHNlIiwiMCBvciA0Il0sc2VlYWxzbzpbIm5vdCIsImFuZCIsInhvciJdfSx4b3I6e25hbWU6InhvciIsY2F0ZWdvcnk6IkxvZ2ljYWwiLHN5bnRheDpbInggeG9yIHkiLCJ4b3IoeCwgeSkiXSxkZXNjcmlwdGlvbjoiTG9naWNhbCBleGNsdXNpdmUgb3IsIHhvci4gVGVzdCB3aGV0aGVyIG9uZSBhbmQgb25seSBvbmUgdmFsdWUgaXMgZGVmaW5lZCB3aXRoIGEgbm9uemVyby9ub25lbXB0eSB2YWx1ZS4iLGV4YW1wbGVzOlsidHJ1ZSB4b3IgZmFsc2UiLCJmYWxzZSB4b3IgZmFsc2UiLCJ0cnVlIHhvciB0cnVlIiwiMCB4b3IgNCJdLHNlZWFsc286WyJub3QiLCJhbmQiLCJvciJdfSxjb25jYXQ6e25hbWU6ImNvbmNhdCIsY2F0ZWdvcnk6Ik1hdHJpeCIsc3ludGF4OlsiY29uY2F0KEEsIEIsIEMsIC4uLikiLCJjb25jYXQoQSwgQiwgQywgLi4uLCBkaW0pIl0sZGVzY3JpcHRpb246IkNvbmNhdGVuYXRlIG1hdHJpY2VzLiBCeSBkZWZhdWx0LCB0aGUgbWF0cmljZXMgYXJlIGNvbmNhdGVuYXRlZCBieSB0aGUgbGFzdCBkaW1lbnNpb24uIFRoZSBkaW1lbnNpb24gb24gd2hpY2ggdG8gY29uY2F0ZW5hdGUgY2FuIGJlIHByb3ZpZGVkIGFzIGxhc3QgYXJndW1lbnQuIixleGFtcGxlczpbIkEgPSBbMSwgMjsgNSwgNl0iLCJCID0gWzMsIDQ7IDcsIDhdIiwiY29uY2F0KEEsIEIpIiwiY29uY2F0KEEsIEIsIDEpIiwiY29uY2F0KEEsIEIsIDIpIl0sc2VlYWxzbzpbImRldCIsImRpYWciLCJpZGVudGl0eSIsImludiIsIm9uZXMiLCJyYW5nZSIsInNpemUiLCJzcXVlZXplIiwic3Vic2V0IiwidHJhY2UiLCJ0cmFuc3Bvc2UiLCJ6ZXJvcyJdfSxjcm9zczp7bmFtZToiY3Jvc3MiLGNhdGVnb3J5OiJNYXRyaXgiLHN5bnRheDpbImNyb3NzKEEsIEIpIl0sZGVzY3JpcHRpb246IkNhbGN1bGF0ZSB0aGUgY3Jvc3MgcHJvZHVjdCBmb3IgdHdvIHZlY3RvcnMgaW4gdGhyZWUgZGltZW5zaW9uYWwgc3BhY2UuIixleGFtcGxlczpbImNyb3NzKFsxLCAxLCAwXSwgIFswLCAxLCAxXSkiLCJjcm9zcyhbMywgLTMsIDFdLCBbNCwgOSwgMl0pIiwiY3Jvc3MoWzIsIDMsIDRdLCAgWzUsIDYsIDddKSJdLHNlZWFsc286WyJtdWx0aXBseSIsImRvdCJdfSxjb2x1bW46e25hbWU6ImNvbHVtbiIsY2F0ZWdvcnk6Ik1hdHJpeCIsc3ludGF4OlsiY29sdW1uKHgsIGluZGV4KSJdLGRlc2NyaXB0aW9uOiJSZXR1cm4gYSBjb2x1bW4gZnJvbSBhIG1hdHJpeCBvciBhcnJheS4iLGV4YW1wbGVzOlsiQSA9IFtbMSwgMl0sIFszLCA0XV0iLCJjb2x1bW4oQSwgMSkiLCJjb2x1bW4oQSwgMikiXSxzZWVhbHNvOlsicm93Il19LGN0cmFuc3Bvc2U6e25hbWU6ImN0cmFuc3Bvc2UiLGNhdGVnb3J5OiJNYXRyaXgiLHN5bnRheDpbIngnIiwiY3RyYW5zcG9zZSh4KSJdLGRlc2NyaXB0aW9uOiJDb21wbGV4IENvbmp1Z2F0ZSBhbmQgVHJhbnNwb3NlIGEgbWF0cml4IixleGFtcGxlczpbImEgPSBbMSwgMiwgMzsgNCwgNSwgNl0iLCJhJyIsImN0cmFuc3Bvc2UoYSkiXSxzZWVhbHNvOlsiY29uY2F0IiwiZGV0IiwiZGlhZyIsImlkZW50aXR5IiwiaW52Iiwib25lcyIsInJhbmdlIiwic2l6ZSIsInNxdWVlemUiLCJzdWJzZXQiLCJ0cmFjZSIsInplcm9zIl19LGRldDp7bmFtZToiZGV0IixjYXRlZ29yeToiTWF0cml4IixzeW50YXg6WyJkZXQoeCkiXSxkZXNjcmlwdGlvbjoiQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdHJpeCIsZXhhbXBsZXM6WyJkZXQoWzEsIDI7IDMsIDRdKSIsImRldChbLTIsIDIsIDM7IC0xLCAxLCAzOyAyLCAwLCAtMV0pIl0sc2VlYWxzbzpbImNvbmNhdCIsImRpYWciLCJpZGVudGl0eSIsImludiIsIm9uZXMiLCJyYW5nZSIsInNpemUiLCJzcXVlZXplIiwic3Vic2V0IiwidHJhY2UiLCJ0cmFuc3Bvc2UiLCJ6ZXJvcyJdfSxkaWFnOntuYW1lOiJkaWFnIixjYXRlZ29yeToiTWF0cml4IixzeW50YXg6WyJkaWFnKHgpIiwiZGlhZyh4LCBrKSJdLGRlc2NyaXB0aW9uOiJDcmVhdGUgYSBkaWFnb25hbCBtYXRyaXggb3IgcmV0cmlldmUgdGhlIGRpYWdvbmFsIG9mIGEgbWF0cml4LiBXaGVuIHggaXMgYSB2ZWN0b3IsIGEgbWF0cml4IHdpdGggdGhlIHZlY3RvciB2YWx1ZXMgb24gdGhlIGRpYWdvbmFsIHdpbGwgYmUgcmV0dXJuZWQuIFdoZW4geCBpcyBhIG1hdHJpeCwgYSB2ZWN0b3Igd2l0aCB0aGUgZGlhZ29uYWwgdmFsdWVzIG9mIHRoZSBtYXRyaXggaXMgcmV0dXJuZWQuIFdoZW4gayBpcyBwcm92aWRlZCwgdGhlIGstdGggZGlhZ29uYWwgd2lsbCBiZSBmaWxsZWQgaW4gb3IgcmV0cmlldmVkLCBpZiBrIGlzIHBvc2l0aXZlLCB0aGUgdmFsdWVzIGFyZSBwbGFjZWQgb24gdGhlIHN1cGVyIGRpYWdvbmFsLiBXaGVuIGsgaXMgbmVnYXRpdmUsIHRoZSB2YWx1ZXMgYXJlIHBsYWNlZCBvbiB0aGUgc3ViIGRpYWdvbmFsLiIsZXhhbXBsZXM6WyJkaWFnKDE6MykiLCJkaWFnKDE6MywgMSkiLCJhID0gWzEsIDIsIDM7IDQsIDUsIDY7IDcsIDgsIDldIiwiZGlhZyhhKSJdLHNlZWFsc286WyJjb25jYXQiLCJkZXQiLCJpZGVudGl0eSIsImludiIsIm9uZXMiLCJyYW5nZSIsInNpemUiLCJzcXVlZXplIiwic3Vic2V0IiwidHJhY2UiLCJ0cmFuc3Bvc2UiLCJ6ZXJvcyJdfSxkb3Q6e25hbWU6ImRvdCIsY2F0ZWdvcnk6Ik1hdHJpeCIsc3ludGF4OlsiZG90KEEsIEIpIiwiQSAqIEIiXSxkZXNjcmlwdGlvbjoiQ2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjdG9ycy4gVGhlIGRvdCBwcm9kdWN0IG9mIEEgPSBbYTEsIGEyLCBhMywgLi4uLCBhbl0gYW5kIEIgPSBbYjEsIGIyLCBiMywgLi4uLCBibl0gaXMgZGVmaW5lZCBhcyBkb3QoQSwgQikgPSBhMSAqIGIxICsgYTIgKiBiMiArIGEzICogYjMgKyAuLi4gKyBhbiAqIGJuIixleGFtcGxlczpbImRvdChbMiwgNCwgMV0sIFsyLCAyLCAzXSkiLCJbMiwgNCwgMV0gKiBbMiwgMiwgM10iXSxzZWVhbHNvOlsibXVsdGlwbHkiLCJjcm9zcyJdfSxnZXRNYXRyaXhEYXRhVHlwZTp7bmFtZToiZ2V0TWF0cml4RGF0YVR5cGUiLGNhdGVnb3J5OiJNYXRyaXgiLHN5bnRheDpbImdldE1hdHJpeERhdGFUeXBlKHgpIl0sZGVzY3JpcHRpb246J0ZpbmQgdGhlIGRhdGEgdHlwZSBvZiBhbGwgZWxlbWVudHMgaW4gYSBtYXRyaXggb3IgYXJyYXksIGZvciBleGFtcGxlICJudW1iZXIiIGlmIGFsbCBpdGVtcyBhcmUgYSBudW1iZXIgYW5kICJDb21wbGV4IiBpZiBhbGwgdmFsdWVzIGFyZSBjb21wbGV4IG51bWJlcnMuIElmIGEgbWF0cml4IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgZGF0YSB0eXBlLCBpdCB3aWxsIHJldHVybiAibWl4ZWQiLicsZXhhbXBsZXM6WyJnZXRNYXRyaXhEYXRhVHlwZShbMSwgMiwgM10pIiwiZ2V0TWF0cml4RGF0YVR5cGUoW1s1IGNtXSwgWzIgaW5jaF1dKSIsJ2dldE1hdHJpeERhdGFUeXBlKFsxLCAidGV4dCJdKScsImdldE1hdHJpeERhdGFUeXBlKFsxLCBiaWdudW1iZXIoNCldKSJdLHNlZWFsc286WyJtYXRyaXgiLCJzcGFyc2UiLCJ0eXBlT2YiXX0saWRlbnRpdHk6e25hbWU6ImlkZW50aXR5IixjYXRlZ29yeToiTWF0cml4IixzeW50YXg6WyJpZGVudGl0eShuKSIsImlkZW50aXR5KG0sIG4pIiwiaWRlbnRpdHkoW20sIG5dKSJdLGRlc2NyaXB0aW9uOiJSZXR1cm5zIHRoZSBpZGVudGl0eSBtYXRyaXggd2l0aCBzaXplIG0tYnktbi4gVGhlIG1hdHJpeCBoYXMgb25lcyBvbiB0aGUgZGlhZ29uYWwgYW5kIHplcm9zIGVsc2V3aGVyZS4iLGV4YW1wbGVzOlsiaWRlbnRpdHkoMykiLCJpZGVudGl0eSgzLCA1KSIsImEgPSBbMSwgMiwgMzsgNCwgNSwgNl0iLCJpZGVudGl0eShzaXplKGEpKSJdLHNlZWFsc286WyJjb25jYXQiLCJkZXQiLCJkaWFnIiwiaW52Iiwib25lcyIsInJhbmdlIiwic2l6ZSIsInNxdWVlemUiLCJzdWJzZXQiLCJ0cmFjZSIsInRyYW5zcG9zZSIsInplcm9zIl19LGZpbHRlcjp7bmFtZToiZmlsdGVyIixjYXRlZ29yeToiTWF0cml4IixzeW50YXg6WyJmaWx0ZXIoeCwgdGVzdCkiXSxkZXNjcmlwdGlvbjoiRmlsdGVyIGl0ZW1zIGluIGEgbWF0cml4LiIsZXhhbXBsZXM6WyJpc1Bvc2l0aXZlKHgpID0geCA+IDAiLCJmaWx0ZXIoWzYsIC0yLCAtMSwgNCwgM10sIGlzUG9zaXRpdmUpIiwiZmlsdGVyKFs2LCAtMiwgMCwgMSwgMF0sIHggIT0gMCkiXSxzZWVhbHNvOlsic29ydCIsIm1hcCIsImZvckVhY2giXX0sZmxhdHRlbjp7bmFtZToiZmxhdHRlbiIsY2F0ZWdvcnk6Ik1hdHJpeCIsc3ludGF4OlsiZmxhdHRlbih4KSJdLGRlc2NyaXB0aW9uOiJGbGF0dGVuIGEgbXVsdGkgZGltZW5zaW9uYWwgbWF0cml4IGludG8gYSBzaW5nbGUgZGltZW5zaW9uYWwgbWF0cml4LiIsZXhhbXBsZXM6WyJhID0gWzEsIDIsIDM7IDQsIDUsIDZdIiwic2l6ZShhKSIsImIgPSBmbGF0dGVuKGEpIiwic2l6ZShiKSJdLHNlZWFsc286WyJjb25jYXQiLCJyZXNpemUiLCJzaXplIiwic3F1ZWV6ZSJdfSxmb3JFYWNoOntuYW1lOiJmb3JFYWNoIixjYXRlZ29yeToiTWF0cml4IixzeW50YXg6WyJmb3JFYWNoKHgsIGNhbGxiYWNrKSJdLGRlc2NyaXB0aW9uOiJJdGVyYXRlcyBvdmVyIGFsbCBlbGVtZW50cyBvZiBhIG1hdHJpeC9hcnJheSwgYW5kIGV4ZWN1dGVzIHRoZSBnaXZlbiBjYWxsYmFjayBmdW5jdGlvbi4iLGV4YW1wbGVzOlsiZm9yRWFjaChbMSwgMiwgM10sIGZ1bmN0aW9uKHZhbCkgeyBjb25zb2xlLmxvZyh2YWwpIH0pIl0sc2VlYWxzbzpbIm1hcCIsInNvcnQiLCJmaWx0ZXIiXX0saW52OntuYW1lOiJpbnYiLGNhdGVnb3J5OiJNYXRyaXgiLHN5bnRheDpbImludih4KSJdLGRlc2NyaXB0aW9uOiJDYWxjdWxhdGUgdGhlIGludmVyc2Ugb2YgYSBtYXRyaXgiLGV4YW1wbGVzOlsiaW52KFsxLCAyOyAzLCA0XSkiLCJpbnYoNCkiLCIxIC8gNCJdLHNlZWFsc286WyJjb25jYXQiLCJkZXQiLCJkaWFnIiwiaWRlbnRpdHkiLCJvbmVzIiwicmFuZ2UiLCJzaXplIiwic3F1ZWV6ZSIsInN1YnNldCIsInRyYWNlIiwidHJhbnNwb3NlIiwiemVyb3MiXX0sZWlnczp7bmFtZToiZWlncyIsY2F0ZWdvcnk6Ik1hdHJpeCIsc3ludGF4OlsiZWlncyh4KSJdLGRlc2NyaXB0aW9uOiJDYWxjdWxhdGUgdGhlIGVpZ2VudmFsdWVzIGFuZCBlaWdlbnZlY3RvcnMgb2YgYSByZWFsIHN5bW1ldHJpYyBtYXRyaXgiLGV4YW1wbGVzOlsiZWlncyhbWzUsIDIuM10sIFsyLjMsIDFdXSkiXSxzZWVhbHNvOlsiaW52Il19LGtyb246e25hbWU6Imtyb24iLGNhdGVnb3J5OiJNYXRyaXgiLHN5bnRheDpbImtyb24oeCwgeSkiXSxkZXNjcmlwdGlvbjoiQ2FsY3VsYXRlcyB0aGUga3JvbmVja2VyIHByb2R1Y3Qgb2YgMiBtYXRyaWNlcyBvciB2ZWN0b3JzLiIsZXhhbXBsZXM6WyJrcm9uKFtbMSwgMF0sIFswLCAxXV0sIFtbMSwgMl0sIFszLCA0XV0pIiwia3JvbihbMSwxXSwgWzIsMyw0XSkiXSxzZWVhbHNvOlsibXVsdGlwbHkiLCJkb3QiLCJjcm9zcyJdfSxtYXA6e25hbWU6Im1hcCIsY2F0ZWdvcnk6Ik1hdHJpeCIsc3ludGF4OlsibWFwKHgsIGNhbGxiYWNrKSJdLGRlc2NyaXB0aW9uOiJDcmVhdGUgYSBuZXcgbWF0cml4IG9yIGFycmF5IHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGV4ZWN1dGVkIG9uIGVhY2ggZW50cnkgb2YgdGhlIG1hdHJpeC9hcnJheS4iLGV4YW1wbGVzOlsibWFwKFsxLCAyLCAzXSwgc3F1YXJlKSJdLHNlZWFsc286WyJmaWx0ZXIiLCJmb3JFYWNoIl19LG9uZXM6e25hbWU6Im9uZXMiLGNhdGVnb3J5OiJNYXRyaXgiLHN5bnRheDpbIm9uZXMobSkiLCJvbmVzKG0sIG4pIiwib25lcyhtLCBuLCBwLCAuLi4pIiwib25lcyhbbV0pIiwib25lcyhbbSwgbl0pIiwib25lcyhbbSwgbiwgcCwgLi4uXSkiXSxkZXNjcmlwdGlvbjoiQ3JlYXRlIGEgbWF0cml4IGNvbnRhaW5pbmcgb25lcy4iLGV4YW1wbGVzOlsib25lcygzKSIsIm9uZXMoMywgNSkiLCJvbmVzKFsyLDNdKSAqIDQuNSIsImEgPSBbMSwgMiwgMzsgNCwgNSwgNl0iLCJvbmVzKHNpemUoYSkpIl0sc2VlYWxzbzpbImNvbmNhdCIsImRldCIsImRpYWciLCJpZGVudGl0eSIsImludiIsInJhbmdlIiwic2l6ZSIsInNxdWVlemUiLCJzdWJzZXQiLCJ0cmFjZSIsInRyYW5zcG9zZSIsInplcm9zIl19LHBhcnRpdGlvblNlbGVjdDp7bmFtZToicGFydGl0aW9uU2VsZWN0IixjYXRlZ29yeToiTWF0cml4IixzeW50YXg6WyJwYXJ0aXRpb25TZWxlY3QoeCwgaykiLCJwYXJ0aXRpb25TZWxlY3QoeCwgaywgY29tcGFyZSkiXSxkZXNjcmlwdGlvbjoiUGFydGl0aW9uLWJhc2VkIHNlbGVjdGlvbiBvZiBhbiBhcnJheSBvciAxRCBtYXRyaXguIFdpbGwgZmluZCB0aGUga3RoIHNtYWxsZXN0IHZhbHVlLCBhbmQgbXV0YXRlcyB0aGUgaW5wdXQgYXJyYXkuIFVzZXMgUXVpY2tzZWxlY3QuIixleGFtcGxlczpbInBhcnRpdGlvblNlbGVjdChbNSwgMTAsIDFdLCAyKSIsJ3BhcnRpdGlvblNlbGVjdChbIkMiLCAiQiIsICJBIiwgIkQiXSwgMSknXSxzZWVhbHNvOlsic29ydCJdfSxyYW5nZTp7bmFtZToicmFuZ2UiLGNhdGVnb3J5OiJUeXBlIixzeW50YXg6WyJzdGFydDplbmQiLCJzdGFydDpzdGVwOmVuZCIsInJhbmdlKHN0YXJ0LCBlbmQpIiwicmFuZ2Uoc3RhcnQsIGVuZCwgc3RlcCkiLCJyYW5nZShzdHJpbmcpIl0sZGVzY3JpcHRpb246IkNyZWF0ZSBhIHJhbmdlLiBMb3dlciBib3VuZCBvZiB0aGUgcmFuZ2UgaXMgaW5jbHVkZWQsIHVwcGVyIGJvdW5kIGlzIGV4Y2x1ZGVkLiIsZXhhbXBsZXM6WyIxOjUiLCIzOi0xOi0zIiwicmFuZ2UoMywgNykiLCJyYW5nZSgwLCAxMiwgMikiLCdyYW5nZSgiNDoxMCIpJywiYSA9IFsxLCAyLCAzLCA0OyA1LCA2LCA3LCA4XSIsImFbMToyLCAxOjJdIl0sc2VlYWxzbzpbImNvbmNhdCIsImRldCIsImRpYWciLCJpZGVudGl0eSIsImludiIsIm9uZXMiLCJzaXplIiwic3F1ZWV6ZSIsInN1YnNldCIsInRyYWNlIiwidHJhbnNwb3NlIiwiemVyb3MiXX0scmVzaXplOntuYW1lOiJyZXNpemUiLGNhdGVnb3J5OiJNYXRyaXgiLHN5bnRheDpbInJlc2l6ZSh4LCBzaXplKSIsInJlc2l6ZSh4LCBzaXplLCBkZWZhdWx0VmFsdWUpIl0sZGVzY3JpcHRpb246IlJlc2l6ZSBhIG1hdHJpeC4iLGV4YW1wbGVzOlsicmVzaXplKFsxLDIsMyw0LDVdLCBbM10pIiwicmVzaXplKFsxLDIsM10sIFs1XSkiLCJyZXNpemUoWzEsMiwzXSwgWzVdLCAtMSkiLCJyZXNpemUoMiwgWzIsIDNdKSIsJ3Jlc2l6ZSgiaGVsbG8iLCBbOF0sICIhIiknXSxzZWVhbHNvOlsic2l6ZSIsInN1YnNldCIsInNxdWVlemUiLCJyZXNoYXBlIl19LHJlc2hhcGU6e25hbWU6InJlc2hhcGUiLGNhdGVnb3J5OiJNYXRyaXgiLHN5bnRheDpbInJlc2hhcGUoeCwgc2l6ZXMpIl0sZGVzY3JpcHRpb246IlJlc2hhcGUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheSB0byBmaXQgdGhlIHNwZWNpZmllZCBkaW1lbnNpb25zLiIsZXhhbXBsZXM6WyJyZXNoYXBlKFsxLCAyLCAzLCA0LCA1LCA2XSwgWzIsIDNdKSIsInJlc2hhcGUoW1sxLCAyXSwgWzMsIDRdXSwgWzEsIDRdKSIsInJlc2hhcGUoW1sxLCAyXSwgWzMsIDRdXSwgWzRdKSJdLHNlZWFsc286WyJzaXplIiwic3F1ZWV6ZSIsInJlc2l6ZSJdfSxyb3c6e25hbWU6InJvdyIsY2F0ZWdvcnk6Ik1hdHJpeCIsc3ludGF4Olsicm93KHgsIGluZGV4KSJdLGRlc2NyaXB0aW9uOiJSZXR1cm4gYSByb3cgZnJvbSBhIG1hdHJpeCBvciBhcnJheS4iLGV4YW1wbGVzOlsiQSA9IFtbMSwgMl0sIFszLCA0XV0iLCJyb3coQSwgMSkiLCJyb3coQSwgMikiXSxzZWVhbHNvOlsiY29sdW1uIl19LHNpemU6e25hbWU6InNpemUiLGNhdGVnb3J5OiJNYXRyaXgiLHN5bnRheDpbInNpemUoeCkiXSxkZXNjcmlwdGlvbjoiQ2FsY3VsYXRlIHRoZSBzaXplIG9mIGEgbWF0cml4LiIsZXhhbXBsZXM6WyJzaXplKDIuMykiLCdzaXplKCJoZWxsbyB3b3JsZCIpJywiYSA9IFsxLCAyOyAzLCA0OyA1LCA2XSIsInNpemUoYSkiLCJzaXplKDE6NikiXSxzZWVhbHNvOlsiY29uY2F0IiwiZGV0IiwiZGlhZyIsImlkZW50aXR5IiwiaW52Iiwib25lcyIsInJhbmdlIiwic3F1ZWV6ZSIsInN1YnNldCIsInRyYWNlIiwidHJhbnNwb3NlIiwiemVyb3MiXX0sc29ydDp7bmFtZToic29ydCIsY2F0ZWdvcnk6Ik1hdHJpeCIsc3ludGF4Olsic29ydCh4KSIsInNvcnQoeCwgY29tcGFyZSkiXSxkZXNjcmlwdGlvbjonU29ydCB0aGUgaXRlbXMgaW4gYSBtYXRyaXguIENvbXBhcmUgY2FuIGJlIGEgc3RyaW5nICJhc2MiLCAiZGVzYyIsICJuYXR1cmFsIiwgb3IgYSBjdXN0b20gc29ydCBmdW5jdGlvbi4nLGV4YW1wbGVzOlsic29ydChbNSwgMTAsIDFdKSIsJ3NvcnQoWyJDIiwgIkIiLCAiQSIsICJEIl0pJywic29ydEJ5TGVuZ3RoKGEsIGIpID0gc2l6ZShhKVsxXSAtIHNpemUoYilbMV0iLCdzb3J0KFsiTGFuZ2RvbiIsICJUb20iLCAiU2FyYSJdLCBzb3J0QnlMZW5ndGgpJywnc29ydChbIjEwIiwgIjEiLCAiMiJdLCAibmF0dXJhbCIpJ10sc2VlYWxzbzpbIm1hcCIsImZpbHRlciIsImZvckVhY2giXX0sc3F1ZWV6ZTp7bmFtZToic3F1ZWV6ZSIsY2F0ZWdvcnk6Ik1hdHJpeCIsc3ludGF4Olsic3F1ZWV6ZSh4KSJdLGRlc2NyaXB0aW9uOiJSZW1vdmUgaW5uZXIgYW5kIG91dGVyIHNpbmdsZXRvbiBkaW1lbnNpb25zIGZyb20gYSBtYXRyaXguIixleGFtcGxlczpbImEgPSB6ZXJvcygzLDIsMSkiLCJzaXplKHNxdWVlemUoYSkpIiwiYiA9IHplcm9zKDEsMSwzKSIsInNpemUoc3F1ZWV6ZShiKSkiXSxzZWVhbHNvOlsiY29uY2F0IiwiZGV0IiwiZGlhZyIsImlkZW50aXR5IiwiaW52Iiwib25lcyIsInJhbmdlIiwic2l6ZSIsInN1YnNldCIsInRyYWNlIiwidHJhbnNwb3NlIiwiemVyb3MiXX0sc3Vic2V0OntuYW1lOiJzdWJzZXQiLGNhdGVnb3J5OiJNYXRyaXgiLHN5bnRheDpbInZhbHVlKGluZGV4KSIsInZhbHVlKGluZGV4KSA9IHJlcGxhY2VtZW50Iiwic3Vic2V0KHZhbHVlLCBbaW5kZXhdKSIsInN1YnNldCh2YWx1ZSwgW2luZGV4XSwgcmVwbGFjZW1lbnQpIl0sZGVzY3JpcHRpb246IkdldCBvciBzZXQgYSBzdWJzZXQgb2YgYSBtYXRyaXggb3Igc3RyaW5nLiBJbmRleGVzIGFyZSBvbmUtYmFzZWQuIEJvdGggdGhlIHJhbmdlcyBsb3dlci1ib3VuZCBhbmQgdXBwZXItYm91bmQgYXJlIGluY2x1ZGVkLiIsZXhhbXBsZXM6WyJkID0gWzEsIDI7IDMsIDRdIiwiZSA9IFtdIiwiZVsxLCAxOjJdID0gWzUsIDZdIiwiZVsyLCA6XSA9IFs3LCA4XSIsImYgPSBkICogZSIsImZbMiwgMV0iLCJmWzosIDFdIl0sc2VlYWxzbzpbImNvbmNhdCIsImRldCIsImRpYWciLCJpZGVudGl0eSIsImludiIsIm9uZXMiLCJyYW5nZSIsInNpemUiLCJzcXVlZXplIiwidHJhY2UiLCJ0cmFuc3Bvc2UiLCJ6ZXJvcyJdfSx0cmFjZTp7bmFtZToidHJhY2UiLGNhdGVnb3J5OiJNYXRyaXgiLHN5bnRheDpbInRyYWNlKEEpIl0sZGVzY3JpcHRpb246IkNhbGN1bGF0ZSB0aGUgdHJhY2Ugb2YgYSBtYXRyaXg6IHRoZSBzdW0gb2YgdGhlIGVsZW1lbnRzIG9uIHRoZSBtYWluIGRpYWdvbmFsIG9mIGEgc3F1YXJlIG1hdHJpeC4iLGV4YW1wbGVzOlsiQSA9IFsxLCAyLCAzOyAtMSwgMiwgMzsgMiwgMCwgM10iLCJ0cmFjZShBKSJdLHNlZWFsc286WyJjb25jYXQiLCJkZXQiLCJkaWFnIiwiaWRlbnRpdHkiLCJpbnYiLCJvbmVzIiwicmFuZ2UiLCJzaXplIiwic3F1ZWV6ZSIsInN1YnNldCIsInRyYW5zcG9zZSIsInplcm9zIl19LHRyYW5zcG9zZTp7bmFtZToidHJhbnNwb3NlIixjYXRlZ29yeToiTWF0cml4IixzeW50YXg6WyJ4JyIsInRyYW5zcG9zZSh4KSJdLGRlc2NyaXB0aW9uOiJUcmFuc3Bvc2UgYSBtYXRyaXgiLGV4YW1wbGVzOlsiYSA9IFsxLCAyLCAzOyA0LCA1LCA2XSIsImEnIiwidHJhbnNwb3NlKGEpIl0sc2VlYWxzbzpbImNvbmNhdCIsImRldCIsImRpYWciLCJpZGVudGl0eSIsImludiIsIm9uZXMiLCJyYW5nZSIsInNpemUiLCJzcXVlZXplIiwic3Vic2V0IiwidHJhY2UiLCJ6ZXJvcyJdfSx6ZXJvczp7bmFtZToiemVyb3MiLGNhdGVnb3J5OiJNYXRyaXgiLHN5bnRheDpbInplcm9zKG0pIiwiemVyb3MobSwgbikiLCJ6ZXJvcyhtLCBuLCBwLCAuLi4pIiwiemVyb3MoW21dKSIsInplcm9zKFttLCBuXSkiLCJ6ZXJvcyhbbSwgbiwgcCwgLi4uXSkiXSxkZXNjcmlwdGlvbjoiQ3JlYXRlIGEgbWF0cml4IGNvbnRhaW5pbmcgemVyb3MuIixleGFtcGxlczpbInplcm9zKDMpIiwiemVyb3MoMywgNSkiLCJhID0gWzEsIDIsIDM7IDQsIDUsIDZdIiwiemVyb3Moc2l6ZShhKSkiXSxzZWVhbHNvOlsiY29uY2F0IiwiZGV0IiwiZGlhZyIsImlkZW50aXR5IiwiaW52Iiwib25lcyIsInJhbmdlIiwic2l6ZSIsInNxdWVlemUiLCJzdWJzZXQiLCJ0cmFjZSIsInRyYW5zcG9zZSJdfSxjb21iaW5hdGlvbnM6e25hbWU6ImNvbWJpbmF0aW9ucyIsY2F0ZWdvcnk6IlByb2JhYmlsaXR5IixzeW50YXg6WyJjb21iaW5hdGlvbnMobiwgaykiXSxkZXNjcmlwdGlvbjoiQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGNvbWJpbmF0aW9ucyBvZiBuIGl0ZW1zIHRha2VuIGsgYXQgYSB0aW1lIixleGFtcGxlczpbImNvbWJpbmF0aW9ucyg3LCA1KSJdLHNlZWFsc286WyJjb21iaW5hdGlvbnNXaXRoUmVwIiwicGVybXV0YXRpb25zIiwiZmFjdG9yaWFsIl19LGNvbWJpbmF0aW9uc1dpdGhSZXA6e25hbWU6ImNvbWJpbmF0aW9uc1dpdGhSZXAiLGNhdGVnb3J5OiJQcm9iYWJpbGl0eSIsc3ludGF4OlsiY29tYmluYXRpb25zV2l0aFJlcChuLCBrKSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlIHRoZSBudW1iZXIgb2YgY29tYmluYXRpb25zIG9mIG4gaXRlbXMgdGFrZW4gayBhdCBhIHRpbWUgd2l0aCByZXBsYWNlbWVudHMuIixleGFtcGxlczpbImNvbWJpbmF0aW9uc1dpdGhSZXAoNywgNSkiXSxzZWVhbHNvOlsiY29tYmluYXRpb25zIiwicGVybXV0YXRpb25zIiwiZmFjdG9yaWFsIl19LGZhY3RvcmlhbDp7bmFtZToiZmFjdG9yaWFsIixjYXRlZ29yeToiUHJvYmFiaWxpdHkiLHN5bnRheDpbIm4hIiwiZmFjdG9yaWFsKG4pIl0sZGVzY3JpcHRpb246IkNvbXB1dGUgdGhlIGZhY3RvcmlhbCBvZiBhIHZhbHVlIixleGFtcGxlczpbIjUhIiwiNSAqIDQgKiAzICogMiAqIDEiLCIzISJdLHNlZWFsc286WyJjb21iaW5hdGlvbnMiLCJjb21iaW5hdGlvbnNXaXRoUmVwIiwicGVybXV0YXRpb25zIiwiZ2FtbWEiXX0sZ2FtbWE6e25hbWU6ImdhbW1hIixjYXRlZ29yeToiUHJvYmFiaWxpdHkiLHN5bnRheDpbImdhbW1hKG4pIl0sZGVzY3JpcHRpb246IkNvbXB1dGUgdGhlIGdhbW1hIGZ1bmN0aW9uLiBGb3Igc21hbGwgdmFsdWVzLCB0aGUgTGFuY3pvcyBhcHByb3hpbWF0aW9uIGlzIHVzZWQsIGFuZCBmb3IgbGFyZ2UgdmFsdWVzIHRoZSBleHRlbmRlZCBTdGlybGluZyBhcHByb3hpbWF0aW9uLiIsZXhhbXBsZXM6WyJnYW1tYSg0KSIsIjMhIiwiZ2FtbWEoMS8yKSIsInNxcnQocGkpIl0sc2VlYWxzbzpbImZhY3RvcmlhbCJdfSxrbGRpdmVyZ2VuY2U6e25hbWU6ImtsZGl2ZXJnZW5jZSIsY2F0ZWdvcnk6IlByb2JhYmlsaXR5IixzeW50YXg6WyJrbGRpdmVyZ2VuY2UoeCwgeSkiXSxkZXNjcmlwdGlvbjoiQ2FsY3VsYXRlIHRoZSBLdWxsYmFjay1MZWlibGVyIChLTCkgZGl2ZXJnZW5jZSAgYmV0d2VlbiB0d28gZGlzdHJpYnV0aW9ucy4iLGV4YW1wbGVzOlsia2xkaXZlcmdlbmNlKFswLjcsMC41LDAuNF0sIFswLjIsMC45LDAuNV0pIl0sc2VlYWxzbzpbXX0sbXVsdGlub21pYWw6e25hbWU6Im11bHRpbm9taWFsIixjYXRlZ29yeToiUHJvYmFiaWxpdHkiLHN5bnRheDpbIm11bHRpbm9taWFsKEEpIl0sZGVzY3JpcHRpb246Ik11bHRpbm9taWFsIENvZWZmaWNpZW50cyBjb21wdXRlIHRoZSBudW1iZXIgb2Ygd2F5cyBvZiBwaWNraW5nIGExLCBhMiwgLi4uLCBhaSB1bm9yZGVyZWQgb3V0Y29tZXMgZnJvbSBgbmAgcG9zc2liaWxpdGllcy4gbXVsdGlub21pYWwgdGFrZXMgb25lIGFycmF5IG9mIGludGVnZXJzIGFzIGFuIGFyZ3VtZW50LiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBldmVyeSBhaSA+IDAuIixleGFtcGxlczpbIm11bHRpbm9taWFsKFsxLCAyLCAxXSkiXSxzZWVhbHNvOlsiY29tYmluYXRpb25zIiwiZmFjdG9yaWFsIl19LHBlcm11dGF0aW9uczp7bmFtZToicGVybXV0YXRpb25zIixjYXRlZ29yeToiUHJvYmFiaWxpdHkiLHN5bnRheDpbInBlcm11dGF0aW9ucyhuKSIsInBlcm11dGF0aW9ucyhuLCBrKSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlIHRoZSBudW1iZXIgb2YgcGVybXV0YXRpb25zIG9mIG4gaXRlbXMgdGFrZW4gayBhdCBhIHRpbWUiLGV4YW1wbGVzOlsicGVybXV0YXRpb25zKDUpIiwicGVybXV0YXRpb25zKDUsIDMpIl0sc2VlYWxzbzpbImNvbWJpbmF0aW9ucyIsImNvbWJpbmF0aW9uc1dpdGhSZXAiLCJmYWN0b3JpYWwiXX0scGlja1JhbmRvbTp7bmFtZToicGlja1JhbmRvbSIsY2F0ZWdvcnk6IlByb2JhYmlsaXR5IixzeW50YXg6WyJwaWNrUmFuZG9tKGFycmF5KSIsInBpY2tSYW5kb20oYXJyYXksIG51bWJlcikiLCJwaWNrUmFuZG9tKGFycmF5LCB3ZWlnaHRzKSIsInBpY2tSYW5kb20oYXJyYXksIG51bWJlciwgd2VpZ2h0cykiLCJwaWNrUmFuZG9tKGFycmF5LCB3ZWlnaHRzLCBudW1iZXIpIl0sZGVzY3JpcHRpb246IlBpY2sgYSByYW5kb20gZW50cnkgZnJvbSBhIGdpdmVuIGFycmF5LiIsZXhhbXBsZXM6WyJwaWNrUmFuZG9tKDA6MTApIiwicGlja1JhbmRvbShbMSwgMywgMSwgNl0pIiwicGlja1JhbmRvbShbMSwgMywgMSwgNl0sIDIpIiwicGlja1JhbmRvbShbMSwgMywgMSwgNl0sIFsyLCAzLCAyLCAxXSkiLCJwaWNrUmFuZG9tKFsxLCAzLCAxLCA2XSwgMiwgWzIsIDMsIDIsIDFdKSIsInBpY2tSYW5kb20oWzEsIDMsIDEsIDZdLCBbMiwgMywgMiwgMV0sIDIpIl0sc2VlYWxzbzpbInJhbmRvbSIsInJhbmRvbUludCJdfSxyYW5kb206e25hbWU6InJhbmRvbSIsY2F0ZWdvcnk6IlByb2JhYmlsaXR5IixzeW50YXg6WyJyYW5kb20oKSIsInJhbmRvbShtYXgpIiwicmFuZG9tKG1pbiwgbWF4KSIsInJhbmRvbShzaXplKSIsInJhbmRvbShzaXplLCBtYXgpIiwicmFuZG9tKHNpemUsIG1pbiwgbWF4KSJdLGRlc2NyaXB0aW9uOiJSZXR1cm4gYSByYW5kb20gbnVtYmVyLiIsZXhhbXBsZXM6WyJyYW5kb20oKSIsInJhbmRvbSgxMCwgMjApIiwicmFuZG9tKFsyLCAzXSkiXSxzZWVhbHNvOlsicGlja1JhbmRvbSIsInJhbmRvbUludCJdfSxyYW5kb21JbnQ6e25hbWU6InJhbmRvbUludCIsY2F0ZWdvcnk6IlByb2JhYmlsaXR5IixzeW50YXg6WyJyYW5kb21JbnQobWF4KSIsInJhbmRvbUludChtaW4sIG1heCkiLCJyYW5kb21JbnQoc2l6ZSkiLCJyYW5kb21JbnQoc2l6ZSwgbWF4KSIsInJhbmRvbUludChzaXplLCBtaW4sIG1heCkiXSxkZXNjcmlwdGlvbjoiUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgbnVtYmVyIixleGFtcGxlczpbInJhbmRvbUludCgxMCwgMjApIiwicmFuZG9tSW50KFsyLCAzXSwgMTApIl0sc2VlYWxzbzpbInBpY2tSYW5kb20iLCJyYW5kb20iXX0sY29tcGFyZTp7bmFtZToiY29tcGFyZSIsY2F0ZWdvcnk6IlJlbGF0aW9uYWwiLHN5bnRheDpbImNvbXBhcmUoeCwgeSkiXSxkZXNjcmlwdGlvbjoiQ29tcGFyZSB0d28gdmFsdWVzLiBSZXR1cm5zIDEgd2hlbiB4ID4geSwgLTEgd2hlbiB4IDwgeSwgYW5kIDAgd2hlbiB4ID09IHkuIixleGFtcGxlczpbImNvbXBhcmUoMiwgMykiLCJjb21wYXJlKDMsIDIpIiwiY29tcGFyZSgyLCAyKSIsImNvbXBhcmUoNWNtLCA0MG1tKSIsImNvbXBhcmUoMiwgWzEsIDIsIDNdKSJdLHNlZWFsc286WyJlcXVhbCIsInVuZXF1YWwiLCJzbWFsbGVyIiwic21hbGxlckVxIiwibGFyZ2VyRXEiLCJjb21wYXJlTmF0dXJhbCIsImNvbXBhcmVUZXh0Il19LGNvbXBhcmVOYXR1cmFsOntuYW1lOiJjb21wYXJlTmF0dXJhbCIsY2F0ZWdvcnk6IlJlbGF0aW9uYWwiLHN5bnRheDpbImNvbXBhcmVOYXR1cmFsKHgsIHkpIl0sZGVzY3JpcHRpb246IkNvbXBhcmUgdHdvIHZhbHVlcyBvZiBhbnkgdHlwZSBpbiBhIGRldGVybWluaXN0aWMsIG5hdHVyYWwgd2F5LiBSZXR1cm5zIDEgd2hlbiB4ID4geSwgLTEgd2hlbiB4IDwgeSwgYW5kIDAgd2hlbiB4ID09IHkuIixleGFtcGxlczpbImNvbXBhcmVOYXR1cmFsKDIsIDMpIiwiY29tcGFyZU5hdHVyYWwoMywgMikiLCJjb21wYXJlTmF0dXJhbCgyLCAyKSIsImNvbXBhcmVOYXR1cmFsKDVjbSwgNDBtbSkiLCdjb21wYXJlTmF0dXJhbCgiMiIsICIxMCIpJywiY29tcGFyZU5hdHVyYWwoMiArIDNpLCAyICsgNGkpIiwiY29tcGFyZU5hdHVyYWwoWzEsIDIsIDRdLCBbMSwgMiwgM10pIiwiY29tcGFyZU5hdHVyYWwoWzEsIDVdLCBbMSwgMiwgM10pIiwiY29tcGFyZU5hdHVyYWwoWzEsIDJdLCBbMSwgMl0pIiwiY29tcGFyZU5hdHVyYWwoe2E6IDJ9LCB7YTogNH0pIl0sc2VlYWxzbzpbImVxdWFsIiwidW5lcXVhbCIsInNtYWxsZXIiLCJzbWFsbGVyRXEiLCJsYXJnZXJFcSIsImNvbXBhcmUiLCJjb21wYXJlVGV4dCJdfSxjb21wYXJlVGV4dDp7bmFtZToiY29tcGFyZVRleHQiLGNhdGVnb3J5OiJSZWxhdGlvbmFsIixzeW50YXg6WyJjb21wYXJlVGV4dCh4LCB5KSJdLGRlc2NyaXB0aW9uOiJDb21wYXJlIHR3byBzdHJpbmdzIGxleGljYWxseS4gQ29tcGFyaXNvbiBpcyBjYXNlIHNlbnNpdGl2ZS4gUmV0dXJucyAxIHdoZW4geCA+IHksIC0xIHdoZW4geCA8IHksIGFuZCAwIHdoZW4geCA9PSB5LiIsZXhhbXBsZXM6Wydjb21wYXJlVGV4dCgiQiIsICJBIiknLCdjb21wYXJlVGV4dCgiQSIsICJCIiknLCdjb21wYXJlVGV4dCgiQSIsICJBIiknLCdjb21wYXJlVGV4dCgiMiIsICIxMCIpJywnY29tcGFyZSgiMiIsICIxMCIpJywiY29tcGFyZSgyLCAxMCkiLCdjb21wYXJlTmF0dXJhbCgiMiIsICIxMCIpJywnY29tcGFyZVRleHQoIkIiLCBbIkEiLCAiQiIsICJDIl0pJ10sc2VlYWxzbzpbImNvbXBhcmUiLCJjb21wYXJlTmF0dXJhbCJdfSxkZWVwRXF1YWw6e25hbWU6ImRlZXBFcXVhbCIsY2F0ZWdvcnk6IlJlbGF0aW9uYWwiLHN5bnRheDpbImRlZXBFcXVhbCh4LCB5KSJdLGRlc2NyaXB0aW9uOiJDaGVjayBlcXVhbGl0eSBvZiB0d28gbWF0cmljZXMgZWxlbWVudCB3aXNlLiBSZXR1cm5zIHRydWUgaWYgdGhlIHNpemUgb2YgYm90aCBtYXRyaWNlcyBpcyBlcXVhbCBhbmQgd2hlbiBhbmQgZWFjaCBvZiB0aGUgZWxlbWVudHMgYXJlIGVxdWFsLiIsZXhhbXBsZXM6WyJkZWVwRXF1YWwoWzEsMyw0XSwgWzEsMyw0XSkiLCJkZWVwRXF1YWwoWzEsMyw0XSwgWzEsM10pIl0sc2VlYWxzbzpbImVxdWFsIiwidW5lcXVhbCIsInNtYWxsZXIiLCJsYXJnZXIiLCJzbWFsbGVyRXEiLCJsYXJnZXJFcSIsImNvbXBhcmUiXX0sZXF1YWw6e25hbWU6ImVxdWFsIixjYXRlZ29yeToiUmVsYXRpb25hbCIsc3ludGF4OlsieCA9PSB5IiwiZXF1YWwoeCwgeSkiXSxkZXNjcmlwdGlvbjoiQ2hlY2sgZXF1YWxpdHkgb2YgdHdvIHZhbHVlcy4gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsLCBhbmQgZmFsc2UgaWYgbm90LiIsZXhhbXBsZXM6WyIyKzIgPT0gMyIsIjIrMiA9PSA0IiwiYSA9IDMuMiIsImIgPSA2LTIuOCIsImEgPT0gYiIsIjUwY20gPT0gMC41bSJdLHNlZWFsc286WyJ1bmVxdWFsIiwic21hbGxlciIsImxhcmdlciIsInNtYWxsZXJFcSIsImxhcmdlckVxIiwiY29tcGFyZSIsImRlZXBFcXVhbCIsImVxdWFsVGV4dCJdfSxlcXVhbFRleHQ6e25hbWU6ImVxdWFsVGV4dCIsY2F0ZWdvcnk6IlJlbGF0aW9uYWwiLHN5bnRheDpbImVxdWFsVGV4dCh4LCB5KSJdLGRlc2NyaXB0aW9uOiJDaGVjayBlcXVhbGl0eSBvZiB0d28gc3RyaW5ncy4gQ29tcGFyaXNvbiBpcyBjYXNlIHNlbnNpdGl2ZS4gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsLCBhbmQgZmFsc2UgaWYgbm90LiIsZXhhbXBsZXM6WydlcXVhbFRleHQoIkhlbGxvIiwgIkhlbGxvIiknLCdlcXVhbFRleHQoImEiLCAiQSIpJywnZXF1YWwoIjJlMyIsICIyMDAwIiknLCdlcXVhbFRleHQoIjJlMyIsICIyMDAwIiknLCdlcXVhbFRleHQoIkIiLCBbIkEiLCAiQiIsICJDIl0pJ10sc2VlYWxzbzpbImNvbXBhcmUiLCJjb21wYXJlTmF0dXJhbCIsImNvbXBhcmVUZXh0IiwiZXF1YWwiXX0sbGFyZ2VyOntuYW1lOiJsYXJnZXIiLGNhdGVnb3J5OiJSZWxhdGlvbmFsIixzeW50YXg6WyJ4ID4geSIsImxhcmdlcih4LCB5KSJdLGRlc2NyaXB0aW9uOiJDaGVjayBpZiB2YWx1ZSB4IGlzIGxhcmdlciB0aGFuIHkuIFJldHVybnMgdHJ1ZSBpZiB4IGlzIGxhcmdlciB0aGFuIHksIGFuZCBmYWxzZSBpZiBub3QuIixleGFtcGxlczpbIjIgPiAzIiwiNSA+IDIqMiIsImEgPSAzLjMiLCJiID0gNi0yLjgiLCIoYSA+IGIpIiwiKGIgPCBhKSIsIjUgY20gPiAyIGluY2giXSxzZWVhbHNvOlsiZXF1YWwiLCJ1bmVxdWFsIiwic21hbGxlciIsInNtYWxsZXJFcSIsImxhcmdlckVxIiwiY29tcGFyZSJdfSxsYXJnZXJFcTp7bmFtZToibGFyZ2VyRXEiLGNhdGVnb3J5OiJSZWxhdGlvbmFsIixzeW50YXg6WyJ4ID49IHkiLCJsYXJnZXJFcSh4LCB5KSJdLGRlc2NyaXB0aW9uOiJDaGVjayBpZiB2YWx1ZSB4IGlzIGxhcmdlciBvciBlcXVhbCB0byB5LiBSZXR1cm5zIHRydWUgaWYgeCBpcyBsYXJnZXIgb3IgZXF1YWwgdG8geSwgYW5kIGZhbHNlIGlmIG5vdC4iLGV4YW1wbGVzOlsiMiA+PSAxKzEiLCIyID4gMSsxIiwiYSA9IDMuMiIsImIgPSA2LTIuOCIsIihhID49IGIpIl0sc2VlYWxzbzpbImVxdWFsIiwidW5lcXVhbCIsInNtYWxsZXJFcSIsInNtYWxsZXIiLCJjb21wYXJlIl19LHNtYWxsZXI6e25hbWU6InNtYWxsZXIiLGNhdGVnb3J5OiJSZWxhdGlvbmFsIixzeW50YXg6WyJ4IDwgeSIsInNtYWxsZXIoeCwgeSkiXSxkZXNjcmlwdGlvbjoiQ2hlY2sgaWYgdmFsdWUgeCBpcyBzbWFsbGVyIHRoYW4gdmFsdWUgeS4gUmV0dXJucyB0cnVlIGlmIHggaXMgc21hbGxlciB0aGFuIHksIGFuZCBmYWxzZSBpZiBub3QuIixleGFtcGxlczpbIjIgPCAzIiwiNSA8IDIqMiIsImEgPSAzLjMiLCJiID0gNi0yLjgiLCIoYSA8IGIpIiwiNSBjbSA8IDIgaW5jaCJdLHNlZWFsc286WyJlcXVhbCIsInVuZXF1YWwiLCJsYXJnZXIiLCJzbWFsbGVyRXEiLCJsYXJnZXJFcSIsImNvbXBhcmUiXX0sc21hbGxlckVxOntuYW1lOiJzbWFsbGVyRXEiLGNhdGVnb3J5OiJSZWxhdGlvbmFsIixzeW50YXg6WyJ4IDw9IHkiLCJzbWFsbGVyRXEoeCwgeSkiXSxkZXNjcmlwdGlvbjoiQ2hlY2sgaWYgdmFsdWUgeCBpcyBzbWFsbGVyIG9yIGVxdWFsIHRvIHZhbHVlIHkuIFJldHVybnMgdHJ1ZSBpZiB4IGlzIHNtYWxsZXIgdGhhbiB5LCBhbmQgZmFsc2UgaWYgbm90LiIsZXhhbXBsZXM6WyIyIDw9IDErMSIsIjIgPCAxKzEiLCJhID0gMy4yIiwiYiA9IDYtMi44IiwiKGEgPD0gYikiXSxzZWVhbHNvOlsiZXF1YWwiLCJ1bmVxdWFsIiwibGFyZ2VyIiwic21hbGxlciIsImxhcmdlckVxIiwiY29tcGFyZSJdfSx1bmVxdWFsOntuYW1lOiJ1bmVxdWFsIixjYXRlZ29yeToiUmVsYXRpb25hbCIsc3ludGF4OlsieCAhPSB5IiwidW5lcXVhbCh4LCB5KSJdLGRlc2NyaXB0aW9uOiJDaGVjayB1bmVxdWFsaXR5IG9mIHR3byB2YWx1ZXMuIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSB1bmVxdWFsLCBhbmQgZmFsc2UgaWYgdGhleSBhcmUgZXF1YWwuIixleGFtcGxlczpbIjIrMiAhPSAzIiwiMisyICE9IDQiLCJhID0gMy4yIiwiYiA9IDYtMi44IiwiYSAhPSBiIiwiNTBjbSAhPSAwLjVtIiwiNSBjbSAhPSAyIGluY2giXSxzZWVhbHNvOlsiZXF1YWwiLCJzbWFsbGVyIiwibGFyZ2VyIiwic21hbGxlckVxIiwibGFyZ2VyRXEiLCJjb21wYXJlIiwiZGVlcEVxdWFsIl19LHNldENhcnRlc2lhbjp7bmFtZToic2V0Q2FydGVzaWFuIixjYXRlZ29yeToiU2V0IixzeW50YXg6WyJzZXRDYXJ0ZXNpYW4oc2V0MSwgc2V0MikiXSxkZXNjcmlwdGlvbjoiQ3JlYXRlIHRoZSBjYXJ0ZXNpYW4gcHJvZHVjdCBvZiB0d28gKG11bHRpKXNldHMuIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uIixleGFtcGxlczpbInNldENhcnRlc2lhbihbMSwgMl0sIFszLCA0XSkiXSxzZWVhbHNvOlsic2V0VW5pb24iLCJzZXRJbnRlcnNlY3QiLCJzZXREaWZmZXJlbmNlIiwic2V0UG93ZXJzZXQiXX0sc2V0RGlmZmVyZW5jZTp7bmFtZToic2V0RGlmZmVyZW5jZSIsY2F0ZWdvcnk6IlNldCIsc3ludGF4Olsic2V0RGlmZmVyZW5jZShzZXQxLCBzZXQyKSJdLGRlc2NyaXB0aW9uOiJDcmVhdGUgdGhlIGRpZmZlcmVuY2Ugb2YgdHdvIChtdWx0aSlzZXRzOiBldmVyeSBlbGVtZW50IG9mIHNldDEsIHRoYXQgaXMgbm90IHRoZSBlbGVtZW50IG9mIHNldDIuIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uIixleGFtcGxlczpbInNldERpZmZlcmVuY2UoWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pIiwic2V0RGlmZmVyZW5jZShbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSJdLHNlZWFsc286WyJzZXRVbmlvbiIsInNldEludGVyc2VjdCIsInNldFN5bURpZmZlcmVuY2UiXX0sc2V0RGlzdGluY3Q6e25hbWU6InNldERpc3RpbmN0IixjYXRlZ29yeToiU2V0IixzeW50YXg6WyJzZXREaXN0aW5jdChzZXQpIl0sZGVzY3JpcHRpb246IkNvbGxlY3QgdGhlIGRpc3RpbmN0IGVsZW1lbnRzIG9mIGEgbXVsdGlzZXQuIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi4iLGV4YW1wbGVzOlsic2V0RGlzdGluY3QoWzEsIDEsIDEsIDIsIDIsIDNdKSJdLHNlZWFsc286WyJzZXRNdWx0aXBsaWNpdHkiXX0sc2V0SW50ZXJzZWN0OntuYW1lOiJzZXRJbnRlcnNlY3QiLGNhdGVnb3J5OiJTZXQiLHN5bnRheDpbInNldEludGVyc2VjdChzZXQxLCBzZXQyKSJdLGRlc2NyaXB0aW9uOiJDcmVhdGUgdGhlIGludGVyc2VjdGlvbiBvZiB0d28gKG11bHRpKXNldHMuIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uIixleGFtcGxlczpbInNldEludGVyc2VjdChbMSwgMiwgMywgNF0sIFszLCA0LCA1LCA2XSkiLCJzZXRJbnRlcnNlY3QoW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSkiXSxzZWVhbHNvOlsic2V0VW5pb24iLCJzZXREaWZmZXJlbmNlIl19LHNldElzU3Vic2V0OntuYW1lOiJzZXRJc1N1YnNldCIsY2F0ZWdvcnk6IlNldCIsc3ludGF4Olsic2V0SXNTdWJzZXQoc2V0MSwgc2V0MikiXSxkZXNjcmlwdGlvbjoiQ2hlY2sgd2hldGhlciBhIChtdWx0aSlzZXQgaXMgYSBzdWJzZXQgb2YgYW5vdGhlciAobXVsdGkpc2V0OiBldmVyeSBlbGVtZW50IG9mIHNldDEgaXMgdGhlIGVsZW1lbnQgb2Ygc2V0Mi4gTXVsdGktZGltZW5zaW9uIGFycmF5cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBzaW5nbGUtZGltZW5zaW9uIGFycmF5cyBiZWZvcmUgdGhlIG9wZXJhdGlvbi4iLGV4YW1wbGVzOlsic2V0SXNTdWJzZXQoWzEsIDJdLCBbMywgNCwgNSwgNl0pIiwic2V0SXNTdWJzZXQoWzMsIDRdLCBbMywgNCwgNSwgNl0pIl0sc2VlYWxzbzpbInNldFVuaW9uIiwic2V0SW50ZXJzZWN0Iiwic2V0RGlmZmVyZW5jZSJdfSxzZXRNdWx0aXBsaWNpdHk6e25hbWU6InNldE11bHRpcGxpY2l0eSIsY2F0ZWdvcnk6IlNldCIsc3ludGF4Olsic2V0TXVsdGlwbGljaXR5KGVsZW1lbnQsIHNldCkiXSxkZXNjcmlwdGlvbjoiQ291bnQgdGhlIG11bHRpcGxpY2l0eSBvZiBhbiBlbGVtZW50IGluIGEgbXVsdGlzZXQuIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi4iLGV4YW1wbGVzOlsic2V0TXVsdGlwbGljaXR5KDEsIFsxLCAyLCAyLCA0XSkiLCJzZXRNdWx0aXBsaWNpdHkoMiwgWzEsIDIsIDIsIDRdKSJdLHNlZWFsc286WyJzZXREaXN0aW5jdCIsInNldFNpemUiXX0sc2V0UG93ZXJzZXQ6e25hbWU6InNldFBvd2Vyc2V0IixjYXRlZ29yeToiU2V0IixzeW50YXg6WyJzZXRQb3dlcnNldChzZXQpIl0sZGVzY3JpcHRpb246IkNyZWF0ZSB0aGUgcG93ZXJzZXQgb2YgYSAobXVsdGkpc2V0OiB0aGUgcG93ZXJzZXQgY29udGFpbnMgdmVyeSBwb3NzaWJsZSBzdWJzZXRzIG9mIGEgKG11bHRpKXNldC4gQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLiIsZXhhbXBsZXM6WyJzZXRQb3dlcnNldChbMSwgMiwgM10pIl0sc2VlYWxzbzpbInNldENhcnRlc2lhbiJdfSxzZXRTaXplOntuYW1lOiJzZXRTaXplIixjYXRlZ29yeToiU2V0IixzeW50YXg6WyJzZXRTaXplKHNldCkiLCJzZXRTaXplKHNldCwgdW5pcXVlKSJdLGRlc2NyaXB0aW9uOidDb3VudCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIGEgKG11bHRpKXNldC4gV2hlbiB0aGUgc2Vjb25kIHBhcmFtZXRlciAidW5pcXVlIiBpcyB0cnVlLCBjb3VudCBvbmx5IHRoZSB1bmlxdWUgdmFsdWVzLiBBIG11bHRpLWRpbWVuc2lvbiBhcnJheSB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHNpbmdsZS1kaW1lbnNpb24gYXJyYXkgYmVmb3JlIHRoZSBvcGVyYXRpb24uJyxleGFtcGxlczpbInNldFNpemUoWzEsIDIsIDIsIDRdKSIsInNldFNpemUoWzEsIDIsIDIsIDRdLCB0cnVlKSJdLHNlZWFsc286WyJzZXRVbmlvbiIsInNldEludGVyc2VjdCIsInNldERpZmZlcmVuY2UiXX0sc2V0U3ltRGlmZmVyZW5jZTp7bmFtZToic2V0U3ltRGlmZmVyZW5jZSIsY2F0ZWdvcnk6IlNldCIsc3ludGF4Olsic2V0U3ltRGlmZmVyZW5jZShzZXQxLCBzZXQyKSJdLGRlc2NyaXB0aW9uOiJDcmVhdGUgdGhlIHN5bW1ldHJpYyBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0cy4gTXVsdGktZGltZW5zaW9uIGFycmF5cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBzaW5nbGUtZGltZW5zaW9uIGFycmF5cyBiZWZvcmUgdGhlIG9wZXJhdGlvbi4iLGV4YW1wbGVzOlsic2V0U3ltRGlmZmVyZW5jZShbMSwgMiwgMywgNF0sIFszLCA0LCA1LCA2XSkiLCJzZXRTeW1EaWZmZXJlbmNlKFtbMSwgMl0sIFszLCA0XV0sIFtbMywgNF0sIFs1LCA2XV0pIl0sc2VlYWxzbzpbInNldFVuaW9uIiwic2V0SW50ZXJzZWN0Iiwic2V0RGlmZmVyZW5jZSJdfSxzZXRVbmlvbjp7bmFtZToic2V0VW5pb24iLGNhdGVnb3J5OiJTZXQiLHN5bnRheDpbInNldFVuaW9uKHNldDEsIHNldDIpIl0sZGVzY3JpcHRpb246IkNyZWF0ZSB0aGUgdW5pb24gb2YgdHdvIChtdWx0aSlzZXRzLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLiIsZXhhbXBsZXM6WyJzZXRVbmlvbihbMSwgMiwgMywgNF0sIFszLCA0LCA1LCA2XSkiLCJzZXRVbmlvbihbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSJdLHNlZWFsc286WyJzZXRJbnRlcnNlY3QiLCJzZXREaWZmZXJlbmNlIl19LGVyZjp7bmFtZToiZXJmIixjYXRlZ29yeToiU3BlY2lhbCIsc3ludGF4OlsiZXJmKHgpIl0sZGVzY3JpcHRpb246IkNvbXB1dGUgdGhlIGVyZiBmdW5jdGlvbiBvZiBhIHZhbHVlIHVzaW5nIGEgcmF0aW9uYWwgQ2hlYnlzaGV2IGFwcHJveGltYXRpb25zIGZvciBkaWZmZXJlbnQgaW50ZXJ2YWxzIG9mIHgiLGV4YW1wbGVzOlsiZXJmKDAuMikiLCJlcmYoLTAuNSkiLCJlcmYoNCkiXSxzZWVhbHNvOltdfSxtYWQ6e25hbWU6Im1hZCIsY2F0ZWdvcnk6IlN0YXRpc3RpY3MiLHN5bnRheDpbIm1hZChhLCBiLCBjLCAuLi4pIiwibWFkKEEpIl0sZGVzY3JpcHRpb246IkNvbXB1dGUgdGhlIG1lZGlhbiBhYnNvbHV0ZSBkZXZpYXRpb24gb2YgYSBtYXRyaXggb3IgYSBsaXN0IHdpdGggdmFsdWVzLiBUaGUgbWVkaWFuIGFic29sdXRlIGRldmlhdGlvbiBpcyBkZWZpbmVkIGFzIHRoZSBtZWRpYW4gb2YgdGhlIGFic29sdXRlIGRldmlhdGlvbnMgZnJvbSB0aGUgbWVkaWFuLiIsZXhhbXBsZXM6WyJtYWQoMTAsIDIwLCAzMCkiLCJtYWQoWzEsIDIsIDNdKSJdLHNlZWFsc286WyJtZWFuIiwibWVkaWFuIiwic3RkIiwiYWJzIl19LG1heDp7bmFtZToibWF4IixjYXRlZ29yeToiU3RhdGlzdGljcyIsc3ludGF4OlsibWF4KGEsIGIsIGMsIC4uLikiLCJtYXgoQSkiLCJtYXgoQSwgZGltKSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGEgbGlzdCBvZiB2YWx1ZXMuIixleGFtcGxlczpbIm1heCgyLCAzLCA0LCAxKSIsIm1heChbMiwgMywgNCwgMV0pIiwibWF4KFsyLCA1OyA0LCAzXSkiLCJtYXgoWzIsIDU7IDQsIDNdLCAxKSIsIm1heChbMiwgNTsgNCwgM10sIDIpIiwibWF4KDIuNywgNy4xLCAtNC41LCAyLjAsIDQuMSkiLCJtaW4oMi43LCA3LjEsIC00LjUsIDIuMCwgNC4xKSJdLHNlZWFsc286WyJtZWFuIiwibWVkaWFuIiwibWluIiwicHJvZCIsInN0ZCIsInN1bSIsInZhcmlhbmNlIl19LG1lYW46e25hbWU6Im1lYW4iLGNhdGVnb3J5OiJTdGF0aXN0aWNzIixzeW50YXg6WyJtZWFuKGEsIGIsIGMsIC4uLikiLCJtZWFuKEEpIiwibWVhbihBLCBkaW0pIl0sZGVzY3JpcHRpb246IkNvbXB1dGUgdGhlIGFyaXRobWV0aWMgbWVhbiBvZiBhIGxpc3Qgb2YgdmFsdWVzLiIsZXhhbXBsZXM6WyJtZWFuKDIsIDMsIDQsIDEpIiwibWVhbihbMiwgMywgNCwgMV0pIiwibWVhbihbMiwgNTsgNCwgM10pIiwibWVhbihbMiwgNTsgNCwgM10sIDEpIiwibWVhbihbMiwgNTsgNCwgM10sIDIpIiwibWVhbihbMS4wLCAyLjcsIDMuMiwgNC4wXSkiXSxzZWVhbHNvOlsibWF4IiwibWVkaWFuIiwibWluIiwicHJvZCIsInN0ZCIsInN1bSIsInZhcmlhbmNlIl19LG1lZGlhbjp7bmFtZToibWVkaWFuIixjYXRlZ29yeToiU3RhdGlzdGljcyIsc3ludGF4OlsibWVkaWFuKGEsIGIsIGMsIC4uLikiLCJtZWRpYW4oQSkiXSxkZXNjcmlwdGlvbjoiQ29tcHV0ZSB0aGUgbWVkaWFuIG9mIGFsbCB2YWx1ZXMuIFRoZSB2YWx1ZXMgYXJlIHNvcnRlZCBhbmQgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC4gSW4gY2FzZSBvZiBhbiBldmVuIG51bWJlciBvZiB2YWx1ZXMsIHRoZSBhdmVyYWdlIG9mIHRoZSB0d28gbWlkZGxlIHZhbHVlcyBpcyByZXR1cm5lZC4iLGV4YW1wbGVzOlsibWVkaWFuKDUsIDIsIDcpIiwibWVkaWFuKFszLCAtMSwgNSwgN10pIl0sc2VlYWxzbzpbIm1heCIsIm1lYW4iLCJtaW4iLCJwcm9kIiwic3RkIiwic3VtIiwidmFyaWFuY2UiLCJxdWFudGlsZVNlcSJdfSxtaW46e25hbWU6Im1pbiIsY2F0ZWdvcnk6IlN0YXRpc3RpY3MiLHN5bnRheDpbIm1pbihhLCBiLCBjLCAuLi4pIiwibWluKEEpIiwibWluKEEsIGRpbSkiXSxkZXNjcmlwdGlvbjoiQ29tcHV0ZSB0aGUgbWluaW11bSB2YWx1ZSBvZiBhIGxpc3Qgb2YgdmFsdWVzLiIsZXhhbXBsZXM6WyJtaW4oMiwgMywgNCwgMSkiLCJtaW4oWzIsIDMsIDQsIDFdKSIsIm1pbihbMiwgNTsgNCwgM10pIiwibWluKFsyLCA1OyA0LCAzXSwgMSkiLCJtaW4oWzIsIDU7IDQsIDNdLCAyKSIsIm1pbigyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpIiwibWF4KDIuNywgNy4xLCAtNC41LCAyLjAsIDQuMSkiXSxzZWVhbHNvOlsibWF4IiwibWVhbiIsIm1lZGlhbiIsInByb2QiLCJzdGQiLCJzdW0iLCJ2YXJpYW5jZSJdfSxtb2RlOntuYW1lOiJtb2RlIixjYXRlZ29yeToiU3RhdGlzdGljcyIsc3ludGF4OlsibW9kZShhLCBiLCBjLCAuLi4pIiwibW9kZShBKSIsIm1vZGUoQSwgYSwgYiwgQiwgYywgLi4uKSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlcyB0aGUgbW9kZSBvZiBhbGwgdmFsdWVzIGFzIGFuIGFycmF5LiBJbiBjYXNlIG1vZGUgYmVpbmcgbW9yZSB0aGFuIG9uZSwgbXVsdGlwbGUgdmFsdWVzIGFyZSByZXR1cm5lZCBpbiBhbiBhcnJheS4iLGV4YW1wbGVzOlsibW9kZSgyLCAxLCA0LCAzLCAxKSIsIm1vZGUoWzEsIDIuNywgMy4yLCA0LCAyLjddKSIsIm1vZGUoMSwgNCwgNiwgMSwgNikiXSxzZWVhbHNvOlsibWF4IiwibWVhbiIsIm1pbiIsIm1lZGlhbiIsInByb2QiLCJzdGQiLCJzdW0iLCJ2YXJpYW5jZSJdfSxwcm9kOntuYW1lOiJwcm9kIixjYXRlZ29yeToiU3RhdGlzdGljcyIsc3ludGF4OlsicHJvZChhLCBiLCBjLCAuLi4pIiwicHJvZChBKSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlIHRoZSBwcm9kdWN0IG9mIGFsbCB2YWx1ZXMuIixleGFtcGxlczpbInByb2QoMiwgMywgNCkiLCJwcm9kKFsyLCAzLCA0XSkiLCJwcm9kKFsyLCA1OyA0LCAzXSkiXSxzZWVhbHNvOlsibWF4IiwibWVhbiIsIm1pbiIsIm1lZGlhbiIsIm1pbiIsInN0ZCIsInN1bSIsInZhcmlhbmNlIl19LHF1YW50aWxlU2VxOntuYW1lOiJxdWFudGlsZVNlcSIsY2F0ZWdvcnk6IlN0YXRpc3RpY3MiLHN5bnRheDpbInF1YW50aWxlU2VxKEEsIHByb2JbLCBzb3J0ZWRdKSIsInF1YW50aWxlU2VxKEEsIFtwcm9iMSwgcHJvYjIsIC4uLl1bLCBzb3J0ZWRdKSIsInF1YW50aWxlU2VxKEEsIE5bLCBzb3J0ZWRdKSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlIHRoZSBwcm9iIG9yZGVyIHF1YW50aWxlIG9mIGEgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy4gVGhlIHNlcXVlbmNlIGlzIHNvcnRlZCBhbmQgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC4gU3VwcG9ydGVkIHR5cGVzIG9mIHNlcXVlbmNlIHZhbHVlcyBhcmU6IE51bWJlciwgQmlnTnVtYmVyLCBVbml0IFN1cHBvcnRlZCB0eXBlcyBvZiBwcm9iYWJsaXR5IGFyZTogTnVtYmVyLCBCaWdOdW1iZXIuIFxuXG5JbiBjYXNlIG9mIGEgKG11bHRpIGRpbWVuc2lvbmFsKSBhcnJheSBvciBtYXRyaXgsIHRoZSBwcm9iIG9yZGVyIHF1YW50aWxlIG9mIGFsbCBlbGVtZW50cyB3aWxsIGJlIGNhbGN1bGF0ZWQuIixleGFtcGxlczpbInF1YW50aWxlU2VxKFszLCAtMSwgNSwgN10sIDAuNSkiLCJxdWFudGlsZVNlcShbMywgLTEsIDUsIDddLCBbMS8zLCAyLzNdKSIsInF1YW50aWxlU2VxKFszLCAtMSwgNSwgN10sIDIpIiwicXVhbnRpbGVTZXEoWy0xLCAzLCA1LCA3XSwgMC41LCB0cnVlKSJdLHNlZWFsc286WyJtZWFuIiwibWVkaWFuIiwibWluIiwibWF4IiwicHJvZCIsInN0ZCIsInN1bSIsInZhcmlhbmNlIl19LHN0ZDp7bmFtZToic3RkIixjYXRlZ29yeToiU3RhdGlzdGljcyIsc3ludGF4Olsic3RkKGEsIGIsIGMsIC4uLikiLCJzdGQoQSkiLCJzdGQoQSwgbm9ybWFsaXphdGlvbikiXSxkZXNjcmlwdGlvbjonQ29tcHV0ZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGFsbCB2YWx1ZXMsIGRlZmluZWQgYXMgc3RkKEEpID0gc3FydCh2YXJpYW5jZShBKSkuIE9wdGlvbmFsIHBhcmFtZXRlciBub3JtYWxpemF0aW9uIGNhbiBiZSAidW5iaWFzZWQiIChkZWZhdWx0KSwgInVuY29ycmVjdGVkIiwgb3IgImJpYXNlZCIuJyxleGFtcGxlczpbInN0ZCgyLCA0LCA2KSIsInN0ZChbMiwgNCwgNiwgOF0pIiwnc3RkKFsyLCA0LCA2LCA4XSwgInVuY29ycmVjdGVkIiknLCdzdGQoWzIsIDQsIDYsIDhdLCAiYmlhc2VkIiknLCJzdGQoWzEsIDIsIDM7IDQsIDUsIDZdKSJdLHNlZWFsc286WyJtYXgiLCJtZWFuIiwibWluIiwibWVkaWFuIiwicHJvZCIsInN1bSIsInZhcmlhbmNlIl19LHN1bTp7bmFtZToic3VtIixjYXRlZ29yeToiU3RhdGlzdGljcyIsc3ludGF4Olsic3VtKGEsIGIsIGMsIC4uLikiLCJzdW0oQSkiXSxkZXNjcmlwdGlvbjoiQ29tcHV0ZSB0aGUgc3VtIG9mIGFsbCB2YWx1ZXMuIixleGFtcGxlczpbInN1bSgyLCAzLCA0LCAxKSIsInN1bShbMiwgMywgNCwgMV0pIiwic3VtKFsyLCA1OyA0LCAzXSkiXSxzZWVhbHNvOlsibWF4IiwibWVhbiIsIm1lZGlhbiIsIm1pbiIsInByb2QiLCJzdGQiLCJzdW0iLCJ2YXJpYW5jZSJdfSx2YXJpYW5jZTpfbCx2YXI6X2wsYWNvczp7bmFtZToiYWNvcyIsY2F0ZWdvcnk6IlRyaWdvbm9tZXRyeSIsc3ludGF4OlsiYWNvcyh4KSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlIHRoZSBpbnZlcnNlIGNvc2luZSBvZiBhIHZhbHVlIGluIHJhZGlhbnMuIixleGFtcGxlczpbImFjb3MoMC41KSIsImFjb3MoY29zKDIuMykpIl0sc2VlYWxzbzpbImNvcyIsImF0YW4iLCJhc2luIl19LGFjb3NoOntuYW1lOiJhY29zaCIsY2F0ZWdvcnk6IlRyaWdvbm9tZXRyeSIsc3ludGF4OlsiYWNvc2goeCkiXSxkZXNjcmlwdGlvbjoiQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2NvcyBvZiBhIHZhbHVlLCBkZWZpbmVkIGFzIGBhY29zaCh4KSA9IGxuKHNxcnQoeF4yIC0gMSkgKyB4KWAuIixleGFtcGxlczpbImFjb3NoKDEuNSkiXSxzZWVhbHNvOlsiY29zaCIsImFzaW5oIiwiYXRhbmgiXX0sYWNvdDp7bmFtZToiYWNvdCIsY2F0ZWdvcnk6IlRyaWdvbm9tZXRyeSIsc3ludGF4OlsiYWNvdCh4KSJdLGRlc2NyaXB0aW9uOiJDYWxjdWxhdGUgdGhlIGludmVyc2UgY290YW5nZW50IG9mIGEgdmFsdWUuIixleGFtcGxlczpbImFjb3QoMC41KSIsImFjb3QoY290KDAuNSkpIiwiYWNvdCgyKSJdLHNlZWFsc286WyJjb3QiLCJhdGFuIl19LGFjb3RoOntuYW1lOiJhY290aCIsY2F0ZWdvcnk6IlRyaWdvbm9tZXRyeSIsc3ludGF4OlsiYWNvdGgoeCkiXSxkZXNjcmlwdGlvbjoiQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2NvdGFuZ2VudCBvZiBhIHZhbHVlLCBkZWZpbmVkIGFzIGBhY290aCh4KSA9IChsbigoeCsxKS94KSArIGxuKHgvKHgtMSkpKSAvIDJgLiIsZXhhbXBsZXM6WyJhY290aCgyKSIsImFjb3RoKDAuNSkiXSxzZWVhbHNvOlsiYWNzY2giLCJhc2VjaCJdfSxhY3NjOntuYW1lOiJhY3NjIixjYXRlZ29yeToiVHJpZ29ub21ldHJ5IixzeW50YXg6WyJhY3NjKHgpIl0sZGVzY3JpcHRpb246IkNhbGN1bGF0ZSB0aGUgaW52ZXJzZSBjb3RhbmdlbnQgb2YgYSB2YWx1ZS4iLGV4YW1wbGVzOlsiYWNzYygyKSIsImFjc2MoY3NjKDAuNSkpIiwiYWNzYygwLjUpIl0sc2VlYWxzbzpbImNzYyIsImFzaW4iLCJhc2VjIl19LGFjc2NoOntuYW1lOiJhY3NjaCIsY2F0ZWdvcnk6IlRyaWdvbm9tZXRyeSIsc3ludGF4OlsiYWNzY2goeCkiXSxkZXNjcmlwdGlvbjoiQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2Nvc2VjYW50IG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGFjc2NoKHgpID0gbG4oMS94ICsgc3FydCgxL3heMiArIDEpKWAuIixleGFtcGxlczpbImFjc2NoKDAuNSkiXSxzZWVhbHNvOlsiYXNlY2giLCJhY290aCJdfSxhc2VjOntuYW1lOiJhc2VjIixjYXRlZ29yeToiVHJpZ29ub21ldHJ5IixzeW50YXg6WyJhc2VjKHgpIl0sZGVzY3JpcHRpb246IkNhbGN1bGF0ZSB0aGUgaW52ZXJzZSBzZWNhbnQgb2YgYSB2YWx1ZS4iLGV4YW1wbGVzOlsiYXNlYygwLjUpIiwiYXNlYyhzZWMoMC41KSkiLCJhc2VjKDIpIl0sc2VlYWxzbzpbImFjb3MiLCJhY290IiwiYWNzYyJdfSxhc2VjaDp7bmFtZToiYXNlY2giLGNhdGVnb3J5OiJUcmlnb25vbWV0cnkiLHN5bnRheDpbImFzZWNoKHgpIl0sZGVzY3JpcHRpb246IkNhbGN1bGF0ZSB0aGUgaW52ZXJzZSBzZWNhbnQgb2YgYSB2YWx1ZS4iLGV4YW1wbGVzOlsiYXNlY2goMC41KSJdLHNlZWFsc286WyJhY3NjaCIsImFjb3RoIl19LGFzaW46e25hbWU6ImFzaW4iLGNhdGVnb3J5OiJUcmlnb25vbWV0cnkiLHN5bnRheDpbImFzaW4oeCkiXSxkZXNjcmlwdGlvbjoiQ29tcHV0ZSB0aGUgaW52ZXJzZSBzaW5lIG9mIGEgdmFsdWUgaW4gcmFkaWFucy4iLGV4YW1wbGVzOlsiYXNpbigwLjUpIiwiYXNpbihzaW4oMC41KSkiXSxzZWVhbHNvOlsic2luIiwiYWNvcyIsImF0YW4iXX0sYXNpbmg6e25hbWU6ImFzaW5oIixjYXRlZ29yeToiVHJpZ29ub21ldHJ5IixzeW50YXg6WyJhc2luaCh4KSJdLGRlc2NyaXB0aW9uOiJDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjc2luZSBvZiBhIHZhbHVlLCBkZWZpbmVkIGFzIGBhc2luaCh4KSA9IGxuKHggKyBzcXJ0KHheMiArIDEpKWAuIixleGFtcGxlczpbImFzaW5oKDAuNSkiXSxzZWVhbHNvOlsiYWNvc2giLCJhdGFuaCJdfSxhdGFuOntuYW1lOiJhdGFuIixjYXRlZ29yeToiVHJpZ29ub21ldHJ5IixzeW50YXg6WyJhdGFuKHgpIl0sZGVzY3JpcHRpb246IkNvbXB1dGUgdGhlIGludmVyc2UgdGFuZ2VudCBvZiBhIHZhbHVlIGluIHJhZGlhbnMuIixleGFtcGxlczpbImF0YW4oMC41KSIsImF0YW4odGFuKDAuNSkpIl0sc2VlYWxzbzpbInRhbiIsImFjb3MiLCJhc2luIl19LGF0YW5oOntuYW1lOiJhdGFuaCIsY2F0ZWdvcnk6IlRyaWdvbm9tZXRyeSIsc3ludGF4OlsiYXRhbmgoeCkiXSxkZXNjcmlwdGlvbjoiQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY3RhbmdlbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgYXRhbmgoeCkgPSBsbigoMSArIHgpLygxIC0geCkpIC8gMmAuIixleGFtcGxlczpbImF0YW5oKDAuNSkiXSxzZWVhbHNvOlsiYWNvc2giLCJhc2luaCJdfSxhdGFuMjp7bmFtZToiYXRhbjIiLGNhdGVnb3J5OiJUcmlnb25vbWV0cnkiLHN5bnRheDpbImF0YW4yKHksIHgpIl0sZGVzY3JpcHRpb246IkNvbXB1dGVzIHRoZSBwcmluY2lwYWwgdmFsdWUgb2YgdGhlIGFyYyB0YW5nZW50IG9mIHkveCBpbiByYWRpYW5zLiIsZXhhbXBsZXM6WyJhdGFuMigyLCAyKSAvIHBpIiwiYW5nbGUgPSA2MCBkZWcgaW4gcmFkIiwieCA9IGNvcyhhbmdsZSkiLCJ5ID0gc2luKGFuZ2xlKSIsImF0YW4yKHksIHgpIl0sc2VlYWxzbzpbInNpbiIsImNvcyIsInRhbiJdfSxjb3M6e25hbWU6ImNvcyIsY2F0ZWdvcnk6IlRyaWdvbm9tZXRyeSIsc3ludGF4OlsiY29zKHgpIl0sZGVzY3JpcHRpb246IkNvbXB1dGUgdGhlIGNvc2luZSBvZiB4IGluIHJhZGlhbnMuIixleGFtcGxlczpbImNvcygyKSIsImNvcyhwaSAvIDQpIF4gMiIsImNvcygxODAgZGVnKSIsImNvcyg2MCBkZWcpIiwic2luKDAuMileMiArIGNvcygwLjIpXjIiXSxzZWVhbHNvOlsiYWNvcyIsInNpbiIsInRhbiJdfSxjb3NoOntuYW1lOiJjb3NoIixjYXRlZ29yeToiVHJpZ29ub21ldHJ5IixzeW50YXg6WyJjb3NoKHgpIl0sZGVzY3JpcHRpb246IkNvbXB1dGUgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIHggaW4gcmFkaWFucy4iLGV4YW1wbGVzOlsiY29zaCgwLjUpIl0sc2VlYWxzbzpbInNpbmgiLCJ0YW5oIiwiY290aCJdfSxjb3Q6e25hbWU6ImNvdCIsY2F0ZWdvcnk6IlRyaWdvbm9tZXRyeSIsc3ludGF4OlsiY290KHgpIl0sZGVzY3JpcHRpb246IkNvbXB1dGUgdGhlIGNvdGFuZ2VudCBvZiB4IGluIHJhZGlhbnMuIERlZmluZWQgYXMgMS90YW4oeCkiLGV4YW1wbGVzOlsiY290KDIpIiwiMSAvIHRhbigyKSJdLHNlZWFsc286WyJzZWMiLCJjc2MiLCJ0YW4iXX0sY290aDp7bmFtZToiY290aCIsY2F0ZWdvcnk6IlRyaWdvbm9tZXRyeSIsc3ludGF4OlsiY290aCh4KSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlIHRoZSBoeXBlcmJvbGljIGNvdGFuZ2VudCBvZiB4IGluIHJhZGlhbnMuIixleGFtcGxlczpbImNvdGgoMikiLCIxIC8gdGFuaCgyKSJdLHNlZWFsc286WyJzZWNoIiwiY3NjaCIsInRhbmgiXX0sY3NjOntuYW1lOiJjc2MiLGNhdGVnb3J5OiJUcmlnb25vbWV0cnkiLHN5bnRheDpbImNzYyh4KSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlIHRoZSBjb3NlY2FudCBvZiB4IGluIHJhZGlhbnMuIERlZmluZWQgYXMgMS9zaW4oeCkiLGV4YW1wbGVzOlsiY3NjKDIpIiwiMSAvIHNpbigyKSJdLHNlZWFsc286WyJzZWMiLCJjb3QiLCJzaW4iXX0sY3NjaDp7bmFtZToiY3NjaCIsY2F0ZWdvcnk6IlRyaWdvbm9tZXRyeSIsc3ludGF4OlsiY3NjaCh4KSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlIHRoZSBoeXBlcmJvbGljIGNvc2VjYW50IG9mIHggaW4gcmFkaWFucy4gRGVmaW5lZCBhcyAxL3NpbmgoeCkiLGV4YW1wbGVzOlsiY3NjaCgyKSIsIjEgLyBzaW5oKDIpIl0sc2VlYWxzbzpbInNlY2giLCJjb3RoIiwic2luaCJdfSxzZWM6e25hbWU6InNlYyIsY2F0ZWdvcnk6IlRyaWdvbm9tZXRyeSIsc3ludGF4Olsic2VjKHgpIl0sZGVzY3JpcHRpb246IkNvbXB1dGUgdGhlIHNlY2FudCBvZiB4IGluIHJhZGlhbnMuIERlZmluZWQgYXMgMS9jb3MoeCkiLGV4YW1wbGVzOlsic2VjKDIpIiwiMSAvIGNvcygyKSJdLHNlZWFsc286WyJjb3QiLCJjc2MiLCJjb3MiXX0sc2VjaDp7bmFtZToic2VjaCIsY2F0ZWdvcnk6IlRyaWdvbm9tZXRyeSIsc3ludGF4Olsic2VjaCh4KSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlIHRoZSBoeXBlcmJvbGljIHNlY2FudCBvZiB4IGluIHJhZGlhbnMuIERlZmluZWQgYXMgMS9jb3NoKHgpIixleGFtcGxlczpbInNlY2goMikiLCIxIC8gY29zaCgyKSJdLHNlZWFsc286WyJjb3RoIiwiY3NjaCIsImNvc2giXX0sc2luOntuYW1lOiJzaW4iLGNhdGVnb3J5OiJUcmlnb25vbWV0cnkiLHN5bnRheDpbInNpbih4KSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlIHRoZSBzaW5lIG9mIHggaW4gcmFkaWFucy4iLGV4YW1wbGVzOlsic2luKDIpIiwic2luKHBpIC8gNCkgXiAyIiwic2luKDkwIGRlZykiLCJzaW4oMzAgZGVnKSIsInNpbigwLjIpXjIgKyBjb3MoMC4yKV4yIl0sc2VlYWxzbzpbImFzaW4iLCJjb3MiLCJ0YW4iXX0sc2luaDp7bmFtZToic2luaCIsY2F0ZWdvcnk6IlRyaWdvbm9tZXRyeSIsc3ludGF4Olsic2luaCh4KSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgeCBpbiByYWRpYW5zLiIsZXhhbXBsZXM6WyJzaW5oKDAuNSkiXSxzZWVhbHNvOlsiY29zaCIsInRhbmgiXX0sdGFuOntuYW1lOiJ0YW4iLGNhdGVnb3J5OiJUcmlnb25vbWV0cnkiLHN5bnRheDpbInRhbih4KSJdLGRlc2NyaXB0aW9uOiJDb21wdXRlIHRoZSB0YW5nZW50IG9mIHggaW4gcmFkaWFucy4iLGV4YW1wbGVzOlsidGFuKDAuNSkiLCJzaW4oMC41KSAvIGNvcygwLjUpIiwidGFuKHBpIC8gNCkiLCJ0YW4oNDUgZGVnKSJdLHNlZWFsc286WyJhdGFuIiwic2luIiwiY29zIl19LHRhbmg6e25hbWU6InRhbmgiLGNhdGVnb3J5OiJUcmlnb25vbWV0cnkiLHN5bnRheDpbInRhbmgoeCkiXSxkZXNjcmlwdGlvbjoiQ29tcHV0ZSB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIHggaW4gcmFkaWFucy4iLGV4YW1wbGVzOlsidGFuaCgwLjUpIiwic2luaCgwLjUpIC8gY29zaCgwLjUpIl0sc2VlYWxzbzpbInNpbmgiLCJjb3NoIl19LHRvOntuYW1lOiJ0byIsY2F0ZWdvcnk6IlVuaXRzIixzeW50YXg6WyJ4IHRvIHVuaXQiLCJ0byh4LCB1bml0KSJdLGRlc2NyaXB0aW9uOiJDaGFuZ2UgdGhlIHVuaXQgb2YgYSB2YWx1ZS4iLGV4YW1wbGVzOlsiNSBpbmNoIHRvIGNtIiwiMy4ya2cgdG8gZyIsIjE2IGJ5dGVzIGluIGJpdHMiXSxzZWVhbHNvOltdfSxjbG9uZTp7bmFtZToiY2xvbmUiLGNhdGVnb3J5OiJVdGlscyIsc3ludGF4OlsiY2xvbmUoeCkiXSxkZXNjcmlwdGlvbjoiQ2xvbmUgYSB2YXJpYWJsZS4gQ3JlYXRlcyBhIGNvcHkgb2YgcHJpbWl0aXZlIHZhcmlhYmxlcyxhbmQgYSBkZWVwIGNvcHkgb2YgbWF0cmljZXMiLGV4YW1wbGVzOlsiY2xvbmUoMy41KSIsImNsb25lKDIgLSA0aSkiLCJjbG9uZSg0NSBkZWcpIiwiY2xvbmUoWzEsIDI7IDMsIDRdKSIsJ2Nsb25lKCJoZWxsbyB3b3JsZCIpJ10sc2VlYWxzbzpbXX0sZm9ybWF0OntuYW1lOiJmb3JtYXQiLGNhdGVnb3J5OiJVdGlscyIsc3ludGF4OlsiZm9ybWF0KHZhbHVlKSIsImZvcm1hdCh2YWx1ZSwgcHJlY2lzaW9uKSJdLGRlc2NyaXB0aW9uOiJGb3JtYXQgYSB2YWx1ZSBvZiBhbnkgdHlwZSBhcyBzdHJpbmcuIixleGFtcGxlczpbImZvcm1hdCgyLjMpIiwiZm9ybWF0KDMgLSA0aSkiLCJmb3JtYXQoW10pIiwiZm9ybWF0KHBpLCAzKSJdLHNlZWFsc286WyJwcmludCJdfSxpc05hTjp7bmFtZToiaXNOYU4iLGNhdGVnb3J5OiJVdGlscyIsc3ludGF4OlsiaXNOYU4oeCkiXSxkZXNjcmlwdGlvbjoiVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgTmFOIChub3QgYSBudW1iZXIpIixleGFtcGxlczpbImlzTmFOKDIpIiwiaXNOYU4oMCAvIDApIiwiaXNOYU4oTmFOKSIsImlzTmFOKEluZmluaXR5KSJdLHNlZWFsc286WyJpc05lZ2F0aXZlIiwiaXNOdW1lcmljIiwiaXNQb3NpdGl2ZSIsImlzWmVybyJdfSxpc0ludGVnZXI6e25hbWU6ImlzSW50ZWdlciIsY2F0ZWdvcnk6IlV0aWxzIixzeW50YXg6WyJpc0ludGVnZXIoeCkiXSxkZXNjcmlwdGlvbjoiVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYW4gaW50ZWdlciBudW1iZXIuIixleGFtcGxlczpbImlzSW50ZWdlcigyKSIsImlzSW50ZWdlcigzLjUpIiwiaXNJbnRlZ2VyKFszLCAwLjUsIC0yXSkiXSxzZWVhbHNvOlsiaXNOZWdhdGl2ZSIsImlzTnVtZXJpYyIsImlzUG9zaXRpdmUiLCJpc1plcm8iXX0saXNOZWdhdGl2ZTp7bmFtZToiaXNOZWdhdGl2ZSIsY2F0ZWdvcnk6IlV0aWxzIixzeW50YXg6WyJpc05lZ2F0aXZlKHgpIl0sZGVzY3JpcHRpb246IlRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIG5lZ2F0aXZlOiBzbWFsbGVyIHRoYW4gemVyby4iLGV4YW1wbGVzOlsiaXNOZWdhdGl2ZSgyKSIsImlzTmVnYXRpdmUoMCkiLCJpc05lZ2F0aXZlKC00KSIsImlzTmVnYXRpdmUoWzMsIDAuNSwgLTJdKSJdLHNlZWFsc286WyJpc0ludGVnZXIiLCJpc051bWVyaWMiLCJpc1Bvc2l0aXZlIiwiaXNaZXJvIl19LGlzTnVtZXJpYzp7bmFtZToiaXNOdW1lcmljIixjYXRlZ29yeToiVXRpbHMiLHN5bnRheDpbImlzTnVtZXJpYyh4KSJdLGRlc2NyaXB0aW9uOiJUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBhIG51bWVyaWMgdmFsdWUuIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhIG51bWJlciwgQmlnTnVtYmVyLCBGcmFjdGlvbiwgb3IgYm9vbGVhbi4iLGV4YW1wbGVzOlsiaXNOdW1lcmljKDIpIiwnaXNOdW1lcmljKCIyIiknLCdoYXNOdW1lcmljVmFsdWUoIjIiKScsImlzTnVtZXJpYygwKSIsImlzTnVtZXJpYyhiaWdudW1iZXIoNTAwKSkiLCJpc051bWVyaWMoZnJhY3Rpb24oMC4xMjUpKSIsImlzTnVtZXJpYygyICsgM2kpIiwnaXNOdW1lcmljKFsyLjMsICJmb28iLCBmYWxzZV0pJ10sc2VlYWxzbzpbImlzSW50ZWdlciIsImlzWmVybyIsImlzTmVnYXRpdmUiLCJpc1Bvc2l0aXZlIiwiaXNOYU4iLCJoYXNOdW1lcmljVmFsdWUiXX0saGFzTnVtZXJpY1ZhbHVlOntuYW1lOiJoYXNOdW1lcmljVmFsdWUiLGNhdGVnb3J5OiJVdGlscyIsc3ludGF4OlsiaGFzTnVtZXJpY1ZhbHVlKHgpIl0sZGVzY3JpcHRpb246IlRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIGFuIG51bWVyaWMgdmFsdWUuIEluIGNhc2Ugb2YgYSBzdHJpbmcsIHRydWUgaXMgcmV0dXJuZWQgaWYgdGhlIHN0cmluZyBjb250YWlucyBhIG51bWVyaWMgdmFsdWUuIixleGFtcGxlczpbImhhc051bWVyaWNWYWx1ZSgyKSIsJ2hhc051bWVyaWNWYWx1ZSgiMiIpJywnaXNOdW1lcmljKCIyIiknLCJoYXNOdW1lcmljVmFsdWUoMCkiLCJoYXNOdW1lcmljVmFsdWUoYmlnbnVtYmVyKDUwMCkpIiwiaGFzTnVtZXJpY1ZhbHVlKGZyYWN0aW9uKDAuMTI1KSkiLCJoYXNOdW1lcmljVmFsdWUoMiArIDNpKSIsJ2hhc051bWVyaWNWYWx1ZShbMi4zLCAiZm9vIiwgZmFsc2VdKSddLHNlZWFsc286WyJpc0ludGVnZXIiLCJpc1plcm8iLCJpc05lZ2F0aXZlIiwiaXNQb3NpdGl2ZSIsImlzTmFOIiwiaXNOdW1lcmljIl19LGlzUG9zaXRpdmU6e25hbWU6ImlzUG9zaXRpdmUiLGNhdGVnb3J5OiJVdGlscyIsc3ludGF4OlsiaXNQb3NpdGl2ZSh4KSJdLGRlc2NyaXB0aW9uOiJUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBwb3NpdGl2ZTogbGFyZ2VyIHRoYW4gemVyby4iLGV4YW1wbGVzOlsiaXNQb3NpdGl2ZSgyKSIsImlzUG9zaXRpdmUoMCkiLCJpc1Bvc2l0aXZlKC00KSIsImlzUG9zaXRpdmUoWzMsIDAuNSwgLTJdKSJdLHNlZWFsc286WyJpc0ludGVnZXIiLCJpc051bWVyaWMiLCJpc05lZ2F0aXZlIiwiaXNaZXJvIl19LGlzUHJpbWU6e25hbWU6ImlzUHJpbWUiLGNhdGVnb3J5OiJVdGlscyIsc3ludGF4OlsiaXNQcmltZSh4KSJdLGRlc2NyaXB0aW9uOiJUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBwcmltZTogaGFzIG5vIGRpdmlzb3JzIG90aGVyIHRoYW4gaXRzZWxmIGFuZCBvbmUuIixleGFtcGxlczpbImlzUHJpbWUoMykiLCJpc1ByaW1lKC0yKSIsImlzUHJpbWUoWzIsIDE3LCAxMDBdKSJdLHNlZWFsc286WyJpc0ludGVnZXIiLCJpc051bWVyaWMiLCJpc05lZ2F0aXZlIiwiaXNaZXJvIl19LGlzWmVybzp7bmFtZToiaXNaZXJvIixjYXRlZ29yeToiVXRpbHMiLHN5bnRheDpbImlzWmVybyh4KSJdLGRlc2NyaXB0aW9uOiJUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyB6ZXJvLiIsZXhhbXBsZXM6WyJpc1plcm8oMikiLCJpc1plcm8oMCkiLCJpc1plcm8oLTQpIiwiaXNaZXJvKFszLCAwLCAtMiwgMF0pIl0sc2VlYWxzbzpbImlzSW50ZWdlciIsImlzTnVtZXJpYyIsImlzTmVnYXRpdmUiLCJpc1Bvc2l0aXZlIl19LHR5cGVPZjpTbCx0eXBlb2Y6U2wsbnVtZXJpYzp7bmFtZToibnVtZXJpYyIsY2F0ZWdvcnk6IlV0aWxzIixzeW50YXg6WyJudW1lcmljKHgpIl0sZGVzY3JpcHRpb246IkNvbnZlcnQgYSBudW1lcmljIGlucHV0IHRvIGEgc3BlY2lmaWMgbnVtZXJpYyB0eXBlOiBudW1iZXIsIEJpZ051bWJlciwgb3IgRnJhY3Rpb24uIixleGFtcGxlczpbJ251bWVyaWMoIjQiKScsJ251bWVyaWMoIjQiLCAibnVtYmVyIiknLCdudW1lcmljKCI0IiwgIkJpZ051bWJlciIpJywnbnVtZXJpYygiNCIsICJGcmFjdGlvbiknLCdudW1lcmljKDQsICJGcmFjdGlvbiIpJywnbnVtZXJpYyhmcmFjdGlvbigyLCA1KSwgIm51bWJlciknXSxzZWVhbHNvOlsibnVtYmVyIiwiZnJhY3Rpb24iLCJiaWdudW1iZXIiLCJzdHJpbmciLCJmb3JtYXQiXX19LHFsPVsidHlwZWQiLCJtYXRoV2l0aFRyYW5zZm9ybSIsIkhlbHAiXSxCbD1PYmplY3Qocy5hKSgiaGVscCIscWwsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxhPWUubWF0aFdpdGhUcmFuc2Zvcm0sbz1lLkhlbHA7cmV0dXJuIHQoImhlbHAiLHthbnk6ZnVuY3Rpb24oZSl7dmFyIHQscj1lO2lmKCJzdHJpbmciIT10eXBlb2YgZSlmb3IodCBpbiBhKWlmKE9iamVjdChhZS5mKShhLHQpJiZlPT09YVt0XSl7cj10O2JyZWFrfXZhciBuPUZpKElsLHIpO2lmKG4pcmV0dXJuIG5ldyBvKG4pO3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiByP3IubmFtZTpyO3Rocm93IG5ldyBFcnJvcignTm8gZG9jdW1lbnRhdGlvbiBmb3VuZCBvbiAiJytpKyciJyl9fSl9KSxrbD1bInR5cGVkIiwiQ2hhaW4iXSx6bD1PYmplY3Qocy5hKSgiY2hhaW4iLGtsLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLkNoYWluO3JldHVybiB0KCJjaGFpbiIseyIiOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByfSxhbnk6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByKGUpfX0pfSksRGw9WyJ0eXBlZCIsIm1hdHJpeCIsInN1YnRyYWN0IiwibXVsdGlwbHkiLCJ1bmFyeU1pbnVzIiwibHVwIl0sUmw9T2JqZWN0KHMuYSkoImRldCIsRGwsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxuPWUubWF0cml4LGY9ZS5zdWJ0cmFjdCxsPWUubXVsdGlwbHkscD1lLnVuYXJ5TWludXMsbT1lLmx1cDtyZXR1cm4gdCgiZGV0Iix7YW55OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QoYWUuYSkoZSl9LCJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7dmFyIHQ7c3dpdGNoKCh0PU9iamVjdChpZS52KShlKT9lLnNpemUoKTpBcnJheS5pc0FycmF5KGUpPyhlPW4oZSkpLnNpemUoKTpbXSkubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIE9iamVjdChhZS5hKShlKTtjYXNlIDE6aWYoMT09PXRbMF0pcmV0dXJuIE9iamVjdChhZS5hKShlLnZhbHVlT2YoKVswXSk7dGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpeCBtdXN0IGJlIHNxdWFyZSAoc2l6ZTogIitPYmplY3QoSi5kKSh0KSsiKSIpO2Nhc2UgMjp2YXIgcj10WzBdO2lmKHI9PT10WzFdKXJldHVybiBmdW5jdGlvbihlLHQpe3tpZigxPT09dClyZXR1cm4gT2JqZWN0KGFlLmEpKGVbMF1bMF0pO2lmKDI9PT10KXJldHVybiBmKGwoZVswXVswXSxlWzFdWzFdKSxsKGVbMV1bMF0sZVswXVsxXSkpO2Zvcih2YXIgcj1tKGUpLG49ci5VWzBdWzBdLGk9MTtpPHQ7aSsrKW49bChuLHIuVVtpXVtpXSk7Zm9yKHZhciBhPTAsbz0wLHM9W107Oyl7Zm9yKDtzW29dOylvKys7aWYodDw9bylicmVhaztmb3IodmFyIHU9byxjPTA7IXNbci5wW3VdXTspc1tyLnBbdV1dPSEwLHU9ci5wW3VdLGMrKztjJTI9PTAmJmErK31yZXR1cm4gYSUyPT0wP246cChuKX19KGUuY2xvbmUoKS52YWx1ZU9mKCkscik7dGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpeCBtdXN0IGJlIHNxdWFyZSAoc2l6ZTogIitPYmplY3QoSi5kKSh0KSsiKSIpO2RlZmF1bHQ6dGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpeCBtdXN0IGJlIHR3byBkaW1lbnNpb25hbCAoc2l6ZTogIitPYmplY3QoSi5kKSh0KSsiKSIpfX19KX0pLFBsPVsidHlwZWQiLCJtYXRyaXgiLCJkaXZpZGVTY2FsYXIiLCJhZGRTY2FsYXIiLCJtdWx0aXBseSIsInVuYXJ5TWludXMiLCJkZXQiLCJpZGVudGl0eSIsImFicyJdLEZsPU9iamVjdChzLmEpKCJpbnYiLFBsLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQsaT1lLm1hdHJpeCx2PWUuZGl2aWRlU2NhbGFyLGI9ZS5hZGRTY2FsYXIseD1lLm11bHRpcGx5LHc9ZS51bmFyeU1pbnVzLE49ZS5kZXQsTz1lLmlkZW50aXR5LE09ZS5hYnM7cmV0dXJuIHQoImludiIseyJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGllLnYpKGUpP2Uuc2l6ZSgpOk9iamVjdChJLmEpKGUpO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmlmKDE9PT10WzBdKXJldHVybiBPYmplY3QoaWUudikoZSk/aShbdigxLGUudmFsdWVPZigpWzBdKV0pOlt2KDEsZVswXSldO3Rocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaXggbXVzdCBiZSBzcXVhcmUgKHNpemU6ICIrT2JqZWN0KEouZCkodCkrIikiKTtjYXNlIDI6dmFyIHI9dFswXSxuPXRbMV07aWYocj09PW4pcmV0dXJuIE9iamVjdChpZS52KShlKT9pKGEoZS52YWx1ZU9mKCkscixuKSxlLnN0b3JhZ2UoKSk6YShlLHIsbik7dGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpeCBtdXN0IGJlIHNxdWFyZSAoc2l6ZTogIitPYmplY3QoSi5kKSh0KSsiKSIpO2RlZmF1bHQ6dGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpeCBtdXN0IGJlIHR3byBkaW1lbnNpb25hbCAoc2l6ZTogIitPYmplY3QoSi5kKSh0KSsiKSIpfX0sYW55OmZ1bmN0aW9uKGUpe3JldHVybiB2KDEsZSl9fSk7ZnVuY3Rpb24gYShlLHQscil7dmFyIG4saSxhLG8scztpZigxPT09dCl7aWYoMD09PShvPWVbMF1bMF0pKXRocm93IEVycm9yKCJDYW5ub3QgY2FsY3VsYXRlIGludmVyc2UsIGRldGVybWluYW50IGlzIHplcm8iKTtyZXR1cm5bW3YoMSxvKV1dfWlmKDI9PT10KXt2YXIgdT1OKGUpO2lmKDA9PT11KXRocm93IEVycm9yKCJDYW5ub3QgY2FsY3VsYXRlIGludmVyc2UsIGRldGVybWluYW50IGlzIHplcm8iKTtyZXR1cm5bW3YoZVsxXVsxXSx1KSx2KHcoZVswXVsxXSksdSldLFt2KHcoZVsxXVswXSksdSksdihlWzBdWzBdLHUpXV19dmFyIGM9ZS5jb25jYXQoKTtmb3Iobj0wO248dDtuKyspY1tuXT1jW25dLmNvbmNhdCgpO2Zvcih2YXIgZj1PKHQpLnZhbHVlT2YoKSxsPTA7bDxyO2wrKyl7dmFyIHA9TShjW2xdW2xdKSxtPWw7Zm9yKG49bCsxO248dDspTShjW25dW2xdKT5wJiYocD1NKGNbbl1bbF0pLG09biksbisrO2lmKDA9PT1wKXRocm93IEVycm9yKCJDYW5ub3QgY2FsY3VsYXRlIGludmVyc2UsIGRldGVybWluYW50IGlzIHplcm8iKTsobj1tKSE9PWwmJihzPWNbbF0sY1tsXT1jW25dLGNbbl09cyxzPWZbbF0sZltsXT1mW25dLGZbbl09cyk7dmFyIGg9Y1tsXSxkPWZbbF07Zm9yKG49MDtuPHQ7bisrKXt2YXIgeT1jW25dLGc9ZltuXTtpZihuIT09bCl7aWYoMCE9PXlbbF0pe2ZvcihhPXYodyh5W2xdKSxoW2xdKSxpPWw7aTxyO2krKyl5W2ldPWIoeVtpXSx4KGEsaFtpXSkpO2ZvcihpPTA7aTxyO2krKylnW2ldPWIoZ1tpXSx4KGEsZFtpXSkpfX1lbHNle2ZvcihhPWhbbF0saT1sO2k8cjtpKyspeVtpXT12KHlbaV0sYSk7Zm9yKGk9MDtpPHI7aSsrKWdbaV09dihnW2ldLGEpfX19cmV0dXJuIGZ9fSksVWw9WyJ0eXBlZCIsIm1hdHJpeCIsImFkZFNjYWxhciIsImVxdWFsIiwic3VidHJhY3QiLCJhYnMiLCJhdGFuIiwiY29zIiwic2luIiwibXVsdGlwbHlTY2FsYXIiLCJpbnYiLCJiaWdudW1iZXIiLCJtdWx0aXBseSIsImFkZCJdLExsPU9iamVjdChzLmEpKCJlaWdzIixVbCxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLGk9ZS5tYXRyaXgseT1lLmFkZFNjYWxhcixnPWUuc3VidHJhY3Qsbz1lLmVxdWFsLHA9ZS5hYnMsYT1lLmF0YW4sdj1lLmNvcyxiPWUuc2luLHg9ZS5tdWx0aXBseVNjYWxhcixzPWUuaW52LHc9ZS5iaWdudW1iZXIsTj1lLm11bHRpcGx5LE89ZS5hZGQ7ZnVuY3Rpb24gdShlLHQpe3ZhciByPWUuZGF0YXR5cGUoKTtpZih2b2lkIDA9PT1yJiYocj1lLmdldERhdGFUeXBlKCkpLCJudW1iZXIiIT09ciYmIkJpZ051bWJlciIhPT1yJiYiRnJhY3Rpb24iIT09cil0aHJvdyJtaXhlZCI9PT1yP25ldyBUeXBlRXJyb3IoIk1peGVkIG1hdHJpeCBlbGVtZW50IHR5cGUgaXMgbm90IHN1cHBvcnRlZCIpOm5ldyBUeXBlRXJyb3IoIk1hdHJpeCBlbGVtZW50IHR5cGUgbm90IHN1cHBvcnRlZCAoIityKyIpIik7aWYoIWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTA7cjx0O3IrKylmb3IodmFyIG49cjtuPHQ7bisrKWlmKCFvKGVbcl1bbl0sZVtuXVtyXSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW5wdXQgbWF0cml4IGlzIG5vdCBzeW1tZXRyaWMiKX0oZS50b0FycmF5KCksdCksIm51bWJlciI9PT1yKXJldHVybiBjKGUudG9BcnJheSgpKTtpZigiRnJhY3Rpb24iIT09cilyZXR1cm4iQmlnTnVtYmVyIj09PXI/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjFlLTEyLG49ZS5sZW5ndGgsaT1wKHIvbiksYT1uZXcgQXJyYXkobiksbz0wO288bjtvKyspYVtvXT1UKG4sMCksYVtvXVtvXT0xO3ZhciBzPUEoZSk7Zm9yKDtwKHNbMV0pPj1wKGkpOyl7dmFyIHU9c1swXVswXSxjPXNbMF1bMV07dD1oKGVbdV1bdV0sZVtjXVtjXSxlW3VdW2NdKSxlPWooZSx0LHUsYyksYT1NKGEsdCx1LGMpLHM9QShlKX1mb3IodmFyIGY9VChuLDApLGw9MDtsPG47bCsrKWZbbF09ZVtsXVtsXTtyZXR1cm4gQyhPYmplY3QoYWUuYSkoZiksT2JqZWN0KGFlLmEpKGEpKX0oZS50b0FycmF5KCkpOnZvaWQgMDtmb3IodmFyIG49ZS50b0FycmF5KCksaT0wO2k8dDtpKyspZm9yKHZhciBhPWk7YTx0O2ErKyluW2ldW2FdPW5baV1bYV0udmFsdWVPZigpLG5bYV1baV09bltpXVthXTtyZXR1cm4gYyhlLnRvQXJyYXkoKSl9ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgcixuPTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09dD90OjFlLTEyLGk9ZS5sZW5ndGgsYT1NYXRoLmFicyhuL2kpLG89bmV3IEFycmF5KGkpLHM9MDtzPGk7cysrKW9bc109VChpLDApLG9bc11bc109MTtmb3IodmFyIHU9UyhlKTtNYXRoLmFicyh1WzFdKT49TWF0aC5hYnMoYSk7KXt2YXIgYz11WzBdWzBdLGY9dVswXVsxXTtlPUUoZSxyPW0oZVtjXVtjXSxlW2ZdW2ZdLGVbY11bZl0pLGMsZiksbz1kKG8scixjLGYpLHU9UyhlKX1mb3IodmFyIGw9VChpLDApLHA9MDtwPGk7cCsrKWxbcF09ZVtwXVtwXTtyZXR1cm4gQyhPYmplY3QoYWUuYSkobCksT2JqZWN0KGFlLmEpKG8pKX1mdW5jdGlvbiBtKGUsdCxyKXt2YXIgbj10LWU7cmV0dXJuIE1hdGguYWJzKG4pPD0xZS0xND9NYXRoLlBJLzQ6LjUqTWF0aC5hdGFuKDIqci8odC1lKSl9ZnVuY3Rpb24gaChlLHQscil7dmFyIG49Zyh0LGUpO3JldHVybiBwKG4pPD0xZS0xND9NYXRoLlBJLzQ6eCguNSxhKE4oMixyLHMobikpKSl9ZnVuY3Rpb24gZChlLHQscixuKXtmb3IodmFyIGk9ZS5sZW5ndGgsYT1NYXRoLmNvcyh0KSxvPU1hdGguc2luKHQpLHM9VChpLDApLHU9VChpLDApLGM9MDtjPGk7YysrKXNbY109YSplW2NdW3JdLW8qZVtjXVtuXSx1W2NdPW8qZVtjXVtyXSthKmVbY11bbl07Zm9yKHZhciBmPTA7ZjxpO2YrKyllW2ZdW3JdPXNbZl0sZVtmXVtuXT11W2ZdO3JldHVybiBlfWZ1bmN0aW9uIE0oZSx0LHIsbil7Zm9yKHZhciBpPWUubGVuZ3RoLGE9dih0KSxvPWIodCkscz1UKGksMCksdT1UKGksMCksYz0wO2M8aTtjKyspc1tjXT1nKHgoYSxlW2NdW3JdKSx4KG8sZVtjXVtuXSkpLHVbY109eSh4KG8sZVtjXVtyXSkseChhLGVbY11bbl0pKTtmb3IodmFyIGY9MDtmPGk7ZisrKWVbZl1bcl09c1tmXSxlW2ZdW25dPXVbZl07cmV0dXJuIGV9ZnVuY3Rpb24gaihlLHQscixuKXtmb3IodmFyIGk9ZS5sZW5ndGgsYT13KHYodCkpLG89dyhiKHQpKSxzPXgoYSxhKSx1PXgobyxvKSxjPVQoaSwwKSxmPVQoaSwwKSxsPU4oMixhLG8sZVtyXVtuXSkscD15KGcoeChzLGVbcl1bcl0pLGwpLHgodSxlW25dW25dKSksbT1PKHgodSxlW3JdW3JdKSxsLHgocyxlW25dW25dKSksaD0wO2g8aTtoKyspY1toXT1nKHgoYSxlW3JdW2hdKSx4KG8sZVtuXVtoXSkpLGZbaF09eSh4KG8sZVtyXVtoXSkseChhLGVbbl1baF0pKTtlW3JdW3JdPXAsZVtuXVtuXT1tLGVbcl1bbl09MDtmb3IodmFyIGQ9ZVtuXVtyXT0wO2Q8aTtkKyspZCE9PXImJmQhPT1uJiYoZVtyXVtkXT1jW2RdLGVbZF1bcl09Y1tkXSxlW25dW2RdPWZbZF0sZVtkXVtuXT1mW2RdKTtyZXR1cm4gZX1mdW5jdGlvbiBFKGUsdCxyLG4pe2Zvcih2YXIgaT1lLmxlbmd0aCxhPU1hdGguY29zKHQpLG89TWF0aC5zaW4odCkscz1hKmEsdT1vKm8sYz1UKGksMCksZj1UKGksMCksbD1zKmVbcl1bcl0tMiphKm8qZVtyXVtuXSt1KmVbbl1bbl0scD11KmVbcl1bcl0rMiphKm8qZVtyXVtuXStzKmVbbl1bbl0sbT0wO208aTttKyspY1ttXT1hKmVbcl1bbV0tbyplW25dW21dLGZbbV09byplW3JdW21dK2EqZVtuXVttXTtlW3JdW3JdPWwsZVtuXVtuXT1wLGVbcl1bbl09MDtmb3IodmFyIGg9ZVtuXVtyXT0wO2g8aTtoKyspaCE9PXImJmghPT1uJiYoZVtyXVtoXT1jW2hdLGVbaF1bcl09Y1toXSxlW25dW2hdPWZbaF0sZVtoXVtuXT1mW2hdKTtyZXR1cm4gZX1mdW5jdGlvbiBTKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPTAsbj1bMCwxXSxpPTA7aTx0O2krKylmb3IodmFyIGE9aSsxO2E8dDthKyspTWF0aC5hYnMocik8TWF0aC5hYnMoZVtpXVthXSkmJihyPU1hdGguYWJzKGVbaV1bYV0pLG49W2ksYV0pO3JldHVybltuLHJdfWZ1bmN0aW9uIEEoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9MCxuPVswLDFdLGk9MDtpPHQ7aSsrKWZvcih2YXIgYT1pKzE7YTx0O2ErKylwKHIpPHAoZVtpXVthXSkmJihyPXAoZVtpXVthXSksbj1baSxhXSk7cmV0dXJuW24scl19ZnVuY3Rpb24gQyhlLHQpe2Zvcih2YXIgcj1lLmxlbmd0aCxuPUFycmF5KHIpLGk9QXJyYXkociksYT0wO2E8cjthKyspaVthXT1BcnJheShyKTtmb3IodmFyIG89MDtvPHI7bysrKXtmb3IodmFyIHM9MCx1PWVbMF0sYz0wO2M8ZS5sZW5ndGg7YysrKWVbY108dSYmKHU9ZVtzPWNdKTtuW29dPWUuc3BsaWNlKHMsMSlbMF07Zm9yKHZhciBmPTA7ZjxyO2YrKylpW2ZdW29dPXRbZl1bc10sdFtmXS5zcGxpY2UocywxKX1yZXR1cm5bT2JqZWN0KGFlLmEpKG4pLE9iamVjdChhZS5hKShpKV19ZnVuY3Rpb24gVChlLHQpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTtuKyspcltuXT10O3JldHVybiByfXJldHVybiB0KCJlaWdzIix7QXJyYXk6ZnVuY3Rpb24oZSl7dmFyIHQ9aShlKSxyPXQuc2l6ZSgpO2lmKDIhPT1yLmxlbmd0aHx8clswXSE9PXJbMV0pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpeCBtdXN0IGJlIHNxdWFyZSAoc2l6ZTogIitPYmplY3QoSi5kKShyKSsiKSIpO3ZhciBuPXUodCxyWzBdKTtyZXR1cm57dmFsdWVzOm5bMF0sdmVjdG9yczpuWzFdfX0sTWF0cml4OmZ1bmN0aW9uKGUpe3ZhciB0PWUuc2l6ZSgpO2lmKDIhPT10Lmxlbmd0aHx8dFswXSE9PXRbMV0pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpeCBtdXN0IGJlIHNxdWFyZSAoc2l6ZTogIitPYmplY3QoSi5kKSh0KSsiKSIpO3ZhciByPXUoZSx0WzBdKTtyZXR1cm57dmFsdWVzOmkoclswXSksdmVjdG9yczppKHJbMV0pfX19KX0pLEhsPVsidHlwZWQiLCJhYnMiLCJhZGQiLCJpZGVudGl0eSIsImludiIsIm11bHRpcGx5Il0sJGw9T2JqZWN0KHMuYSkoImV4cG0iLEhsLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQsZD1lLmFicyx5PWUuYWRkLGc9ZS5pZGVudGl0eSx2PWUuaW52LGI9ZS5tdWx0aXBseTtyZXR1cm4gdCgiZXhwbSIse01hdHJpeDpmdW5jdGlvbihlKXt2YXIgdD1lLnNpemUoKTtpZigyIT09dC5sZW5ndGh8fHRbMF0hPT10WzFdKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaXggbXVzdCBiZSBzcXVhcmUgKHNpemU6ICIrT2JqZWN0KEouZCkodCkrIikiKTtmb3IodmFyIHI9dFswXSxuPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTA7cjwzMDtyKyspZm9yKHZhciBuPTA7bjw9cjtuKyspe3ZhciBpPXItbjtpZih4KGUsbixpKTx0KXJldHVybntxOm4sajppfX10aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGFjY2VwdGFibGUgcGFyYW1ldGVycyB0byBjb21wdXRlIHRoZSBtYXRyaXggZXhwb25lbnRpYWwgKHRyeSBpbmNyZWFzaW5nIG1heFNlYXJjaFNpemUgaW4gZXhwbS5qcykiKX0oZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuc2l6ZSgpWzBdLHI9MCxuPTA7bjx0O24rKyl7Zm9yKHZhciBpPTAsYT0wO2E8dDthKyspaSs9ZChlLmdldChbbixhXSkpO3I9TWF0aC5tYXgoaSxyKX1yZXR1cm4gcn0oZSksMWUtMTUpLGk9bi5xLGE9bi5qLG89YihlLE1hdGgucG93KDIsLWEpKSxzPWcociksdT1nKHIpLGM9MSxmPW8sbD0tMSxwPTE7cDw9aTtwKyspMTxwJiYoZj1iKGYsbyksbD0tbCkscz15KHMsYihjPWMqKGktcCsxKS8oKDIqaS1wKzEpKnApLGYpKSx1PXkodSxiKGMqbCxmKSk7Zm9yKHZhciBtPWIodih1KSxzKSxoPTA7aDxhO2grKyltPWIobSxtKTtyZXR1cm4gT2JqZWN0KGllLkgpKGUpP2UuY3JlYXRlU3BhcnNlTWF0cml4KG0pOm19fSk7ZnVuY3Rpb24geChlLHQscil7Zm9yKHZhciBuPTEsaT0yO2k8PXQ7aSsrKW4qPWk7Zm9yKHZhciBhPW4sbz10KzE7bzw9Mip0O28rKylhKj1vO3ZhciBzPWEqKDIqdCsxKTtyZXR1cm4gOCpNYXRoLnBvdyhlL01hdGgucG93KDIsciksMip0KSpuKm4vKGEqcyl9fSksR2w9WyJ0eXBlZCIsImFicyIsImFkZCIsIm11bHRpcGx5Iiwic3FydCIsInN1YnRyYWN0IiwiaW52Iiwic2l6ZSIsIm1heCIsImlkZW50aXR5Il0sWmw9T2JqZWN0KHMuYSkoInNxcnRtIixHbCxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLG89ZS5hYnMscz1lLmFkZCx1PWUubXVsdGlwbHkscj1lLnNxcnQsYz1lLnN1YnRyYWN0LGY9ZS5pbnYsbD1lLnNpemUscD1lLm1heCxtPWUuaWRlbnRpdHksbj10KCJzcXJ0bSIseyJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGllLnYpKGUpP2Uuc2l6ZSgpOk9iamVjdChJLmEpKGUpO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmlmKDE9PT10WzBdKXJldHVybiByKGUpO3Rocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaXggbXVzdCBiZSBzcXVhcmUgKHNpemU6ICIrT2JqZWN0KEouZCkodCkrIikiKTtjYXNlIDI6aWYodFswXT09PXRbMV0pcmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LHI9MCxuPWUsaT1tKGwoZSkpO2Rve3ZhciBhPW47aWYobj11KC41LHMoYSxmKGkpKSksaT11KC41LHMoaSxmKGEpKSksdD1wKG8oYyhuLGEpKSksZDx0JiYrK3I+aCl0aHJvdyBuZXcgRXJyb3IoImNvbXB1dGluZyBzcXVhcmUgcm9vdCBvZiBtYXRyaXg6IGl0ZXJhdGl2ZSBtZXRob2QgY291bGQgbm90IGNvbnZlcmdlIil9d2hpbGUoZDx0KTtyZXR1cm4gbn0oZSk7dGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpeCBtdXN0IGJlIHNxdWFyZSAoc2l6ZTogIitPYmplY3QoSi5kKSh0KSsiKSIpfX19KSxoPTFlMyxkPTFlLTY7cmV0dXJuIG59KSxWbD1bInR5cGVkIiwibWF0cml4IiwibXVsdGlwbHkiLCJlcXVhbFNjYWxhciIsImRpdmlkZVNjYWxhciIsImludiJdLEpsPU9iamVjdChzLmEpKCJkaXZpZGUiLFZsLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLm1hdHJpeCxuPWUubXVsdGlwbHksaT1lLmVxdWFsU2NhbGFyLGE9ZS5kaXZpZGVTY2FsYXIsbz1lLmludixzPXNyKHt0eXBlZDp0LGVxdWFsU2NhbGFyOml9KSx1PUt0KHt0eXBlZDp0fSk7cmV0dXJuIHQoImRpdmlkZSIsT2JqZWN0KGFlLmUpKHsiQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBuKGUsbyh0KSl9LCJEZW5zZU1hdHJpeCwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiB1KGUsdCxhLCExKX0sIlNwYXJzZU1hdHJpeCwgYW55IjpmdW5jdGlvbihlLHQpe3JldHVybiBzKGUsdCxhLCExKX0sIkFycmF5LCBhbnkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUocihlKSx0LGEsITEpLnZhbHVlT2YoKX0sImFueSwgQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oZSxvKHQpKX19LGEuc2lnbmF0dXJlcykpfSksV2w9ImRpc3RhbmNlIixZbD1bInR5cGVkIiwiYWRkU2NhbGFyIiwic3VidHJhY3QiLCJkaXZpZGVTY2FsYXIiLCJtdWx0aXBseVNjYWxhciIsInVuYXJ5TWludXMiLCJzcXJ0IiwiYWJzIl0sWGw9T2JqZWN0KHMuYSkoV2wsWWwsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxsPWUuYWRkU2NhbGFyLHA9ZS5zdWJ0cmFjdCxtPWUubXVsdGlwbHlTY2FsYXIsaD1lLmRpdmlkZVNjYWxhcixzPWUudW5hcnlNaW51cyxkPWUuc3FydCx1PWUuYWJzO3JldHVybiB0KFdsLHsiQXJyYXksIEFycmF5LCBBcnJheSI6ZnVuY3Rpb24oZSx0LHIpe2lmKDIhPT1lLmxlbmd0aHx8MiE9PXQubGVuZ3RofHwyIT09ci5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBBcmd1bWVudHM6IFRyeSBhZ2FpbiIpO2lmKCFjKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFycmF5IHdpdGggMiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZpcnN0IGFyZ3VtZW50Iik7aWYoIWModCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJyYXkgd2l0aCAyIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3Igc2Vjb25kIGFyZ3VtZW50Iik7aWYoIWMocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJyYXkgd2l0aCAyIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgdGhpcmQgYXJndW1lbnQiKTt2YXIgbj1oKHAoclsxXSxyWzBdKSxwKHRbMV0sdFswXSkpLGk9bShtKG4sbiksdFswXSksYT1zKG0obix0WzBdKSksbz1lWzFdO3JldHVybiBmKGVbMF0sZVsxXSxpLGEsbyl9LCJPYmplY3QsIE9iamVjdCwgT2JqZWN0IjpmdW5jdGlvbihlLHQscil7aWYoMiE9PU9iamVjdC5rZXlzKGUpLmxlbmd0aHx8MiE9PU9iamVjdC5rZXlzKHQpLmxlbmd0aHx8MiE9PU9iamVjdC5rZXlzKHIpLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluIik7aWYoIWMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVmFsdWVzIG9mIHBvaW50WCBhbmQgcG9pbnRZIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMiKTtpZighYyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJWYWx1ZXMgb2YgbGluZU9uZVB0WCBhbmQgbGluZU9uZVB0WSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzIik7aWYoIWMocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVmFsdWVzIG9mIGxpbmVUd29QdFggYW5kIGxpbmVUd29QdFkgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycyIpO2lmKCJwb2ludFgiaW4gZSYmInBvaW50WSJpbiBlJiYibGluZU9uZVB0WCJpbiB0JiYibGluZU9uZVB0WSJpbiB0JiYibGluZVR3b1B0WCJpbiByJiYibGluZVR3b1B0WSJpbiByKXt2YXIgbj1oKHAoci5saW5lVHdvUHRZLHIubGluZVR3b1B0WCkscCh0LmxpbmVPbmVQdFksdC5saW5lT25lUHRYKSksaT1tKG0obixuKSx0LmxpbmVPbmVQdFgpLGE9cyhtKG4sdC5saW5lT25lUHRYKSksbz1lLnBvaW50WDtyZXR1cm4gZihlLnBvaW50WCxlLnBvaW50WSxpLGEsbyl9dGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5IG5hbWVzIGRvIG5vdCBtYXRjaCIpfSwiQXJyYXksIEFycmF5IjpmdW5jdGlvbihlLHQpe2lmKDI9PT1lLmxlbmd0aCYmMz09PXQubGVuZ3RoKXtpZighYyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmaXJzdCBhcmd1bWVudCIpO2lmKCFuKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHNlY29uZCBhcmd1bWVudCIpO3JldHVybiBmKGVbMF0sZVsxXSx0WzBdLHRbMV0sdFsyXSl9aWYoMz09PWUubGVuZ3RoJiY2PT09dC5sZW5ndGgpe2lmKCFuKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZpcnN0IGFyZ3VtZW50Iik7aWYoIWEodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJyYXkgd2l0aCA2IG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3Igc2Vjb25kIGFyZ3VtZW50Iik7cmV0dXJuIHkoZVswXSxlWzFdLGVbMl0sdFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0pfWlmKGUubGVuZ3RoPT09dC5sZW5ndGgmJjA8ZS5sZW5ndGgpe2lmKCFpKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFsbCB2YWx1ZXMgb2YgYW4gYXJyYXkgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycyIpO2lmKCFpKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFsbCB2YWx1ZXMgb2YgYW4gYXJyYXkgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycyIpO3JldHVybiBnKGUsdCl9dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBBcmd1bWVudHM6IFRyeSBhZ2FpbiIpfSwiT2JqZWN0LCBPYmplY3QiOmZ1bmN0aW9uKGUsdCl7aWYoMj09PU9iamVjdC5rZXlzKGUpLmxlbmd0aCYmMz09PU9iamVjdC5rZXlzKHQpLmxlbmd0aCl7aWYoIWMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVmFsdWVzIG9mIHBvaW50WCBhbmQgcG9pbnRZIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMiKTtpZighbih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJWYWx1ZXMgb2YgeENvZWZmTGluZSwgeUNvZWZmTGluZSBhbmQgY29uc3RhbnQgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycyIpO2lmKCJwb2ludFgiaW4gZSYmInBvaW50WSJpbiBlJiYieENvZWZmTGluZSJpbiB0JiYieUNvZWZmTGluZSJpbiB0JiYiY29uc3RhbnQiaW4gdClyZXR1cm4gZihlLnBvaW50WCxlLnBvaW50WSx0LnhDb2VmZkxpbmUsdC55Q29lZmZMaW5lLHQuY29uc3RhbnQpO3Rocm93IG5ldyBUeXBlRXJyb3IoIktleSBuYW1lcyBkbyBub3QgbWF0Y2giKX1pZigzPT09T2JqZWN0LmtleXMoZSkubGVuZ3RoJiY2PT09T2JqZWN0LmtleXModCkubGVuZ3RoKXtpZighbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJWYWx1ZXMgb2YgcG9pbnRYLCBwb2ludFkgYW5kIHBvaW50WiBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzIik7aWYoIWEodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVmFsdWVzIG9mIHgwLCB5MCwgejAsIGEsIGIgYW5kIGMgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycyIpO2lmKCJwb2ludFgiaW4gZSYmInBvaW50WSJpbiBlJiYieDAiaW4gdCYmInkwImluIHQmJiJ6MCJpbiB0JiYiYSJpbiB0JiYiYiJpbiB0JiYiYyJpbiB0KXJldHVybiB5KGUucG9pbnRYLGUucG9pbnRZLGUucG9pbnRaLHQueDAsdC55MCx0LnowLHQuYSx0LmIsdC5jKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJLZXkgbmFtZXMgZG8gbm90IG1hdGNoIil9aWYoMj09PU9iamVjdC5rZXlzKGUpLmxlbmd0aCYmMj09PU9iamVjdC5rZXlzKHQpLmxlbmd0aCl7aWYoIWMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVmFsdWVzIG9mIHBvaW50T25lWCBhbmQgcG9pbnRPbmVZIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMiKTtpZighYyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJWYWx1ZXMgb2YgcG9pbnRUd29YIGFuZCBwb2ludFR3b1kgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycyIpO2lmKCJwb2ludE9uZVgiaW4gZSYmInBvaW50T25lWSJpbiBlJiYicG9pbnRUd29YImluIHQmJiJwb2ludFR3b1kiaW4gdClyZXR1cm4gZyhbZS5wb2ludE9uZVgsZS5wb2ludE9uZVldLFt0LnBvaW50VHdvWCx0LnBvaW50VHdvWV0pO3Rocm93IG5ldyBUeXBlRXJyb3IoIktleSBuYW1lcyBkbyBub3QgbWF0Y2giKX1pZigzIT09T2JqZWN0LmtleXMoZSkubGVuZ3RofHwzIT09T2JqZWN0LmtleXModCkubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgQXJndW1lbnRzOiBUcnkgYWdhaW4iKTtpZighbihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJWYWx1ZXMgb2YgcG9pbnRPbmVYLCBwb2ludE9uZVkgYW5kIHBvaW50T25lWiBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzIik7aWYoIW4odCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVmFsdWVzIG9mIHBvaW50VHdvWCwgcG9pbnRUd29ZIGFuZCBwb2ludFR3b1ogc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycyIpO2lmKCJwb2ludE9uZVgiaW4gZSYmInBvaW50T25lWSJpbiBlJiYicG9pbnRPbmVaImluIGUmJiJwb2ludFR3b1giaW4gdCYmInBvaW50VHdvWSJpbiB0JiYicG9pbnRUd29aImluIHQpcmV0dXJuIGcoW2UucG9pbnRPbmVYLGUucG9pbnRPbmVZLGUucG9pbnRPbmVaXSxbdC5wb2ludFR3b1gsdC5wb2ludFR3b1ksdC5wb2ludFR3b1pdKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJLZXkgbmFtZXMgZG8gbm90IG1hdGNoIil9LEFycmF5OmZ1bmN0aW9uKGUpe2lmKCFmdW5jdGlvbihlKXtpZigyPT09ZVswXS5sZW5ndGgmJnIoZVswXVswXSkmJnIoZVswXVsxXSkpe2lmKGUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gMiE9PWUubGVuZ3RofHwhcihlWzBdKXx8IXIoZVsxXSl9KSlyZXR1cm59ZWxzZXtpZighKDM9PT1lWzBdLmxlbmd0aCYmcihlWzBdWzBdKSYmcihlWzBdWzFdKSYmcihlWzBdWzJdKSkpcmV0dXJuO2lmKGUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gMyE9PWUubGVuZ3RofHwhcihlWzBdKXx8IXIoZVsxXSl8fCFyKGVbMl0pfSkpcmV0dXJufXJldHVybiAxfShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbmNvcnJlY3QgYXJyYXkgZm9ybWF0IGVudGVyZWQgZm9yIHBhaXJ3aXNlIGRpc3RhbmNlIGNhbGN1bGF0aW9uIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPVtdLG49W10saT0wO2k8ZS5sZW5ndGgtMTtpKyspZm9yKHZhciBhPWkrMTthPGUubGVuZ3RoO2ErKykyPT09ZVswXS5sZW5ndGg/KHI9W2VbaV1bMF0sZVtpXVsxXV0sbj1bZVthXVswXSxlW2FdWzFdXSk6Mz09PWVbMF0ubGVuZ3RoJiYocj1bZVtpXVswXSxlW2ldWzFdLGVbaV1bMl1dLG49W2VbYV1bMF0sZVthXVsxXSxlW2FdWzJdXSksdC5wdXNoKGcocixuKSk7cmV0dXJuIHR9KGUpfX0pO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfHxPYmplY3QoaWUuZSkoZSl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZS5jb25zdHJ1Y3RvciE9PUFycmF5JiYoZT1vKGUpKSxyKGVbMF0pJiZyKGVbMV0pfWZ1bmN0aW9uIG4oZSl7cmV0dXJuIGUuY29uc3RydWN0b3IhPT1BcnJheSYmKGU9byhlKSkscihlWzBdKSYmcihlWzFdKSYmcihlWzJdKX1mdW5jdGlvbiBpKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfHwoZT1vKGUpKSxlLmV2ZXJ5KHIpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGUuY29uc3RydWN0b3IhPT1BcnJheSYmKGU9byhlKSkscihlWzBdKSYmcihlWzFdKSYmcihlWzJdKSYmcihlWzNdKSYmcihlWzRdKSYmcihlWzVdKX1mdW5jdGlvbiBvKGUpe2Zvcih2YXIgdD1PYmplY3Qua2V5cyhlKSxyPVtdLG49MDtuPHQubGVuZ3RoO24rKylyLnB1c2goZVt0W25dXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gZihlLHQscixuLGkpe3ZhciBhPXUobChsKG0ocixlKSxtKG4sdCkpLGkpKSxvPWQobChtKHIsciksbShuLG4pKSk7cmV0dXJuIGgoYSxvKX1mdW5jdGlvbiB5KGUsdCxyLG4saSxhLG8scyx1KXt2YXIgYz1bcChtKHAoaSx0KSx1KSxtKHAoYSxyKSxzKSkscChtKHAoYSxyKSxvKSxtKHAobixlKSx1KSkscChtKHAobixlKSxzKSxtKHAoaSx0KSxvKSldO2M9ZChsKGwobShjWzBdLGNbMF0pLG0oY1sxXSxjWzFdKSksbShjWzJdLGNbMl0pKSk7dmFyIGY9ZChsKGwobShvLG8pLG0ocyxzKSksbSh1LHUpKSk7cmV0dXJuIGgoYyxmKX1mdW5jdGlvbiBnKGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49MCxpPTAsYT0wO2E8cjthKyspaT1wKGVbYV0sdFthXSksbj1sKG0oaSxpKSxuKTtyZXR1cm4gZChuKX19KSxRbD1bInR5cGVkIiwiY29uZmlnIiwiYWJzIiwiYWRkIiwiYWRkU2NhbGFyIiwibWF0cml4IiwibXVsdGlwbHkiLCJtdWx0aXBseVNjYWxhciIsImRpdmlkZVNjYWxhciIsInN1YnRyYWN0Iiwic21hbGxlciIsImVxdWFsU2NhbGFyIl0sS2w9T2JqZWN0KHMuYSkoImludGVyc2VjdCIsUWwsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxDPWUuY29uZmlnLFQ9ZS5hYnMsXz1lLmFkZCxJPWUuYWRkU2NhbGFyLGk9ZS5tYXRyaXgscT1lLm11bHRpcGx5LEI9ZS5tdWx0aXBseVNjYWxhcixrPWUuZGl2aWRlU2NhbGFyLHo9ZS5zdWJ0cmFjdCxEPWUuc21hbGxlcixSPWUuZXF1YWxTY2FsYXIsYT10KCJpbnRlcnNlY3QiLHsiQXJyYXksIEFycmF5LCBBcnJheSI6ZnVuY3Rpb24oZSx0LHIpe2lmKCFGKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZpcnN0IGFyZ3VtZW50Iik7aWYoIUYodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3Igc2Vjb25kIGFyZ3VtZW50Iik7aWYoISg0PT09KG49cikubGVuZ3RoJiZNKG5bMF0pJiZNKG5bMV0pJiZNKG5bMl0pJiZNKG5bM10pKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcnJheSB3aXRoIDQgbnVtYmVycyBleHBlY3RlZCBhcyB0aGlyZCBhcmd1bWVudCIpO3ZhciBuLGksYSxvLHMsdSxjLGYsbCxwLG0saCxkLHksZyx2LGIseCx3LE4sTztyZXR1cm4gaT1lWzBdLGE9ZVsxXSxvPWVbMl0scz10WzBdLHU9dFsxXSxjPXRbMl0sZj1yWzBdLGw9clsxXSxwPXJbMl0sbT1yWzNdLGg9QihpLGYpLGQ9QihzLGYpLHk9QihhLGwpLGc9Qih1LGwpLHY9QihvLHApLGI9QihjLHApLHg9ayh6KHooeihtLGgpLHkpLHYpLHooeih6KEkoSShkLGcpLGIpLGgpLHkpLHYpKSx3PUkoaSxCKHgseihzLGkpKSksTj1JKGEsQih4LHoodSxhKSkpLE89SShvLEIoeCx6KGMsbykpKSxbdyxOLE9dfSwiQXJyYXksIEFycmF5LCBBcnJheSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCxyLG4pe2lmKDI9PT1lLmxlbmd0aCl7aWYoIVAoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJyYXkgd2l0aCAyIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgZmlyc3QgYXJndW1lbnQiKTtpZighUCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBzZWNvbmQgYXJndW1lbnQiKTtpZighUChyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciB0aGlyZCBhcmd1bWVudCIpO2lmKCFQKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkFycmF5IHdpdGggMiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZvdXJ0aCBhcmd1bWVudCIpO3JldHVybiBmdW5jdGlvbihlLHQscixuKXt2YXIgaT1lLGE9cixvPXooaSx0KSxzPXooYSxuKSx1PXooQihvWzBdLHNbMV0pLEIoc1swXSxvWzFdKSk7aWYoRChUKHUpLEMuZXBzaWxvbikpcmV0dXJuIG51bGw7dmFyIGM9QihzWzBdLGlbMV0pLGY9QihzWzFdLGlbMF0pLGw9QihzWzBdLGFbMV0pLHA9QihzWzFdLGFbMF0pLG09ayhJKHooeihjLGYpLGwpLHApLHUpO3JldHVybiBfKHEobyxtKSxpKX0oZSx0LHIsbil9aWYoMyE9PWUubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkFycmF5cyB3aXRoIHR3byBvciB0aGVlIGRpbWVuc2lvbmFsIHBvaW50cyBleHBlY3RlZCIpO2lmKCFGKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZpcnN0IGFyZ3VtZW50Iik7aWYoIUYodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3Igc2Vjb25kIGFyZ3VtZW50Iik7aWYoIUYocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgdGhpcmQgYXJndW1lbnQiKTtpZighRihuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcnJheSB3aXRoIDMgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmb3VydGggYXJndW1lbnQiKTtyZXR1cm4gaT1lWzBdLGE9ZVsxXSxvPWVbMl0scz10WzBdLHU9dFsxXSxjPXRbMl0sZj1yWzBdLGw9clsxXSxwPXJbMl0sbT1uWzBdLGg9blsxXSxkPW5bMl0seT1VKGksZixtLGYsYSxsLGgsbCxvLHAsZCxwKSxnPVUobSxmLHMsaSxoLGwsdSxhLGQscCxjLG8pLHY9VShpLGYscyxpLGEsbCx1LGEsbyxwLGMsbyksYj1VKG0sZixtLGYsaCxsLGgsbCxkLHAsZCxwKSx4PVUocyxpLHMsaSx1LGEsdSxhLGMsbyxjLG8pLHc9ayh6KEIoeSxnKSxCKHYsYikpLHooQih4LGIpLEIoZyxnKSkpLE49ayhJKHksQih3LGcpKSxiKSxPPUkoaSxCKHcseihzLGkpKSksTT1JKGEsQih3LHoodSxhKSkpLGo9SShvLEIodyx6KGMsbykpKSxFPUkoZixCKE4seihtLGYpKSksUz1JKGwsQihOLHooaCxsKSkpLEE9SShwLEIoTix6KGQscCkpKSxSKE8sRSkmJlIoTSxTKSYmUihqLEEpP1tPLE0sal06bnVsbDt2YXIgaSxhLG8scyx1LGMsZixsLHAsbSxoLGQseSxnLHYsYix4LHcsTixPLE0saixFLFMsQX0sIk1hdHJpeCwgTWF0cml4LCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gaShhKGUudmFsdWVPZigpLHQudmFsdWVPZigpLHIudmFsdWVPZigpKSl9LCJNYXRyaXgsIE1hdHJpeCwgTWF0cml4LCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBpKGEoZS52YWx1ZU9mKCksdC52YWx1ZU9mKCksci52YWx1ZU9mKCksbi52YWx1ZU9mKCkpKX19KTtmdW5jdGlvbiBNKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZXx8T2JqZWN0KGllLmUpKGUpfWZ1bmN0aW9uIFAoZSl7cmV0dXJuIDI9PT1lLmxlbmd0aCYmTShlWzBdKSYmTShlWzFdKX1mdW5jdGlvbiBGKGUpe3JldHVybiAzPT09ZS5sZW5ndGgmJk0oZVswXSkmJk0oZVsxXSkmJk0oZVsyXSl9ZnVuY3Rpb24gVShlLHQscixuLGksYSxvLHMsdSxjLGYsbCl7dmFyIHA9Qih6KGUsdCkseihyLG4pKSxtPUIoeihpLGEpLHoobyxzKSksaD1CKHoodSxjKSx6KGYsbCkpO3JldHVybiBJKEkocCxtKSxoKX1yZXR1cm4gYX0pLGVwPVsidHlwZWQiLCJjb25maWciLCJhZGQiLCI/YmlnbnVtYmVyIiwiP2ZyYWN0aW9uIl0sdHA9T2JqZWN0KHMuYSkoInN1bSIsZXAsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxuPWUuY29uZmlnLGk9ZS5hZGQsYT1lLmJpZ251bWJlcixvPWUuZnJhY3Rpb247cmV0dXJuIHQoInN1bSIseyJBcnJheSB8IE1hdHJpeCI6ciwiQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlciI6ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIFUoZSx0LGkpfWNhdGNoKGUpe3Rocm93IGRhKGUsInN1bSIpfX0sIi4uLiI6ZnVuY3Rpb24oZSl7aWYoUChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTY2FsYXIgdmFsdWVzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHN1bSIpO3JldHVybiByKGUpfX0pO2Z1bmN0aW9uIHIoZSl7dmFyIHI7aWYoRihlLGZ1bmN0aW9uKHQpe3RyeXtyPXZvaWQgMD09PXI/dDppKHIsdCl9Y2F0Y2goZSl7dGhyb3cgZGEoZSwic3VtIix0KX19KSx2b2lkIDA9PT1yKXN3aXRjaChuLm51bWJlcil7Y2FzZSJudW1iZXIiOnJldHVybiAwO2Nhc2UiQmlnTnVtYmVyIjpyZXR1cm4gYT9hKDApOndpKCk7Y2FzZSJGcmFjdGlvbiI6cmV0dXJuIG8/bygwKTpOaSgpO2RlZmF1bHQ6cmV0dXJuIDB9cmV0dXJuIHJ9fSkscnA9WyJ0eXBlZCIsImFkZCIsImRpdmlkZSJdLG5wPU9iamVjdChzLmEpKCJtZWFuIixycCxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLGk9ZS5hZGQsYT1lLmRpdmlkZTtyZXR1cm4gdCgibWVhbiIseyJBcnJheSB8IE1hdHJpeCI6ciwiQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlciI6ZnVuY3Rpb24oZSx0KXt0cnl7dmFyIHI9VShlLHQsaSksbj1BcnJheS5pc0FycmF5KGUpP09iamVjdChJLmEpKGUpOmUuc2l6ZSgpO3JldHVybiBhKHIsblt0XSl9Y2F0Y2goZSl7dGhyb3cgZGEoZSwibWVhbiIpfX0sIi4uLiI6ZnVuY3Rpb24oZSl7aWYoUChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTY2FsYXIgdmFsdWVzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIG1lYW4iKTtyZXR1cm4gcihlKX19KTtmdW5jdGlvbiByKGUpe3ZhciByLG49MDtpZihGKGUsZnVuY3Rpb24odCl7dHJ5e3I9dm9pZCAwPT09cj90Omkocix0KSxuKyt9Y2F0Y2goZSl7dGhyb3cgZGEoZSwibWVhbiIsdCl9fSksMD09PW4pdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FsY3VsYXRlIHRoZSBtZWFuIG9mIGFuIGVtcHR5IGFycmF5Iik7cmV0dXJuIGEocixuKX19KSxpcD1bInR5cGVkIiwiYWRkIiwiZGl2aWRlIiwiY29tcGFyZSIsInBhcnRpdGlvblNlbGVjdCJdLGFwPU9iamVjdChzLmEpKCJtZWRpYW4iLGlwLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLmFkZCxuPWUuZGl2aWRlLHM9ZS5jb21wYXJlLHU9ZS5wYXJ0aXRpb25TZWxlY3QsaT10KCJtZWRpYW4iLHsiQXJyYXkgfCBNYXRyaXgiOmEsIkFycmF5IHwgTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXIiOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJtZWRpYW4oQSwgZGltKSBpcyBub3QgeWV0IHN1cHBvcnRlZCIpfSwiLi4uIjpmdW5jdGlvbihlKXtpZihQKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlNjYWxhciB2YWx1ZXMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gbWVkaWFuIik7cmV0dXJuIGEoZSl9fSk7ZnVuY3Rpb24gYShlKXt0cnl7dmFyIHQ9KGU9T2JqZWN0KEkuZSkoZS52YWx1ZU9mKCkpKS5sZW5ndGg7aWYoMD09PXQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FsY3VsYXRlIG1lZGlhbiBvZiBhbiBlbXB0eSBhcnJheSIpO2lmKHQlMj09MCl7Zm9yKHZhciByPXQvMi0xLG49dShlLDErciksaT1lW3JdLGE9MDthPHI7KythKTA8cyhlW2FdLGkpJiYoaT1lW2FdKTtyZXR1cm4gZihpLG4pfXZhciBvPXUoZSwodC0xKS8yKTtyZXR1cm4gYyhvKX1jYXRjaChlKXt0aHJvdyBkYShlLCJtZWRpYW4iKX19dmFyIGM9dCh7Im51bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IjpmdW5jdGlvbihlKXtyZXR1cm4gZX19KSxmPXQoeyJudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCwgbnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4ocihlLHQpLDIpfX0pO3JldHVybiBpfSksb3A9WyJ0eXBlZCIsImFicyIsIm1hcCIsIm1lZGlhbiIsInN1YnRyYWN0Il0sc3A9T2JqZWN0KHMuYSkoIm1hZCIsb3AsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuYWJzLG49ZS5tYXAsaT1lLm1lZGlhbixhPWUuc3VidHJhY3Q7cmV0dXJuIHQoIm1hZCIseyJBcnJheSB8IE1hdHJpeCI6bywiLi4uIjpmdW5jdGlvbihlKXtyZXR1cm4gbyhlKX19KTtmdW5jdGlvbiBvKGUpe2lmKDA9PT0oZT1PYmplY3QoSS5lKShlLnZhbHVlT2YoKSkpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjYWxjdWxhdGUgbWVkaWFuIGFic29sdXRlIGRldmlhdGlvbiAobWFkKSBvZiBhbiBlbXB0eSBhcnJheSIpO3RyeXt2YXIgdD1pKGUpO3JldHVybiBpKG4oZSxmdW5jdGlvbihlKXtyZXR1cm4gcihhKGUsdCkpfSkpfWNhdGNoKGUpe3Rocm93IGUgaW5zdGFuY2VvZiBUeXBlRXJyb3ImJi0xIT09ZS5tZXNzYWdlLmluZGV4T2YoIm1lZGlhbiIpP25ldyBUeXBlRXJyb3IoZS5tZXNzYWdlLnJlcGxhY2UoIm1lZGlhbiIsIm1hZCIpKTpkYShlLCJtYWQiKX19fSksdXA9InVuYmlhc2VkIixjcD0idmFyaWFuY2UiLGZwPVsidHlwZWQiLCJhZGQiLCJzdWJ0cmFjdCIsIm11bHRpcGx5IiwiZGl2aWRlIiwiYXBwbHkiLCJpc05hTiJdLGxwPU9iamVjdChzLmEpKGNwLGZwLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQsbz1lLmFkZCxzPWUuc3VidHJhY3QsdT1lLm11bHRpcGx5LGM9ZS5kaXZpZGUsbj1lLmFwcGx5LGY9ZS5pc05hTjtyZXR1cm4gdChjcCx7IkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gaShlLHVwKX0sIkFycmF5IHwgTWF0cml4LCBzdHJpbmciOmksIkFycmF5IHwgTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIoZSx0LHVwKX0sIkFycmF5IHwgTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXIsIHN0cmluZyI6ciwiLi4uIjpmdW5jdGlvbihlKXtyZXR1cm4gaShlLHVwKX19KTtmdW5jdGlvbiBpKGUsdCl7dmFyIHI9MCxuPTA7aWYoMD09PWUubGVuZ3RoKXRocm93IG5ldyBTeW50YXhFcnJvcigiRnVuY3Rpb24gdmFyaWFuY2UgcmVxdWlyZXMgb25lIG9yIG1vcmUgcGFyYW1ldGVycyAoMCBwcm92aWRlZCkiKTtpZihGKGUsZnVuY3Rpb24odCl7dHJ5e3I9byhyLHQpLG4rK31jYXRjaChlKXt0aHJvdyBkYShlLCJ2YXJpYW5jZSIsdCl9fSksMD09PW4pdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FsY3VsYXRlIHZhcmlhbmNlIG9mIGFuIGVtcHR5IGFycmF5Iik7dmFyIGk9YyhyLG4pO2lmKHI9MCxGKGUsZnVuY3Rpb24oZSl7dmFyIHQ9cyhlLGkpO3I9byhyLHUodCx0KSl9KSxmKHIpKXJldHVybiByO3N3aXRjaCh0KXtjYXNlInVuY29ycmVjdGVkIjpyZXR1cm4gYyhyLG4pO2Nhc2UiYmlhc2VkIjpyZXR1cm4gYyhyLG4rMSk7Y2FzZSJ1bmJpYXNlZCI6dmFyIGE9T2JqZWN0KGllLmUpKHIpP3IubXVsKDApOjA7cmV0dXJuIDE9PT1uP2E6YyhyLG4tMSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbm9ybWFsaXphdGlvbiAiJyt0KyciLiBDaG9vc2UgInVuYmlhc2VkIiAoZGVmYXVsdCksICJ1bmNvcnJlY3RlZCIsIG9yICJiaWFzZWQiLicpfX1mdW5jdGlvbiByKGUsdCxyKXt0cnl7aWYoMD09PWUubGVuZ3RoKXRocm93IG5ldyBTeW50YXhFcnJvcigiRnVuY3Rpb24gdmFyaWFuY2UgcmVxdWlyZXMgb25lIG9yIG1vcmUgcGFyYW1ldGVycyAoMCBwcm92aWRlZCkiKTtyZXR1cm4gbihlLHQsZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSxyKX0pfWNhdGNoKGUpe3Rocm93IGRhKGUsInZhcmlhbmNlIil9fX0pLHBwPU9iamVjdChzLmEpKCJ2YXIiLFsidmFyaWFuY2UiXSxmdW5jdGlvbihlKXt2YXIgbj1lLnZhcmlhbmNlO3JldHVybiBmdW5jdGlvbigpe09iamVjdCh2ZS5hKSgnRnVuY3Rpb24gInZhciIgaGFzIGJlZW4gcmVuYW1lZCB0byAidmFyaWFuY2UiIGluIHY2LjAuMCwgcGxlYXNlIHVzZSB0aGUgbmV3IGZ1bmN0aW9uIGluc3RlYWQuJyk7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07cmV0dXJuIG4uYXBwbHkobix0KX19KSxtcD1bInR5cGVkIiwiYWRkIiwibXVsdGlwbHkiLCJwYXJ0aXRpb25TZWxlY3QiLCJjb21wYXJlIl0saHA9T2JqZWN0KHMuYSkoInF1YW50aWxlU2VxIixtcCxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHc9ZS5hZGQsTj1lLm11bHRpcGx5LE89ZS5wYXJ0aXRpb25TZWxlY3QsTT1lLmNvbXBhcmU7ZnVuY3Rpb24gaChlLHQscil7dmFyIG49T2JqZWN0KEkuZSkoZSksaT1uLmxlbmd0aDtpZigwPT09aSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjYWxjdWxhdGUgcXVhbnRpbGUgb2YgYW4gZW1wdHkgc2VxdWVuY2UiKTtpZihPYmplY3QoaWUueSkodCkpe3ZhciBhPXQqKGktMSksbz1hJTE7aWYoMD09byl7dmFyIHM9cj9uW2FdOk8obixhKTtyZXR1cm4gaihzKSxzfXZhciB1LGMsZj1NYXRoLmZsb29yKGEpO2lmKHIpdT1uW2ZdLGM9bltmKzFdO2Vsc2V7Yz1PKG4sZisxKSx1PW5bZl07Zm9yKHZhciBsPTA7bDxmOysrbCkwPE0obltsXSx1KSYmKHU9bltsXSl9cmV0dXJuIGoodSksaihjKSx3KE4odSwxLW8pLE4oYyxvKSl9dmFyIHA9dC50aW1lcyhpLTEpO2lmKHAuaXNJbnRlZ2VyKCkpe3A9cC50b051bWJlcigpO3ZhciBtPXI/bltwXTpPKG4scCk7cmV0dXJuIGoobSksbX12YXIgaCxkLHk9cC5mbG9vcigpLGc9cC5taW51cyh5KSx2PXkudG9OdW1iZXIoKTtpZihyKWg9blt2XSxkPW5bdisxXTtlbHNle2Q9TyhuLHYrMSksaD1uW3ZdO2Zvcih2YXIgYj0wO2I8djsrK2IpMDxNKG5bYl0saCkmJihoPW5bYl0pfWooaCksaihkKTt2YXIgeD1uZXcgZy5jb25zdHJ1Y3RvcigxKTtyZXR1cm4gdyhOKGgseC5taW51cyhnKSksTihkLGcpKX12YXIgaj10KHsibnVtYmVyIHwgQmlnTnVtYmVyIHwgVW5pdCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXt2YXIgbixpLGE7aWYoYXJndW1lbnRzLmxlbmd0aDwyfHwzPGFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJGdW5jdGlvbiBxdWFudGlsZVNlcSByZXF1aXJlcyB0d28gb3IgdGhyZWUgcGFyYW1ldGVycyIpO2lmKE9iamVjdChpZS5pKShlKSl7aWYoImJvb2xlYW4iIT10eXBlb2Yocj1yfHwhMSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5leHBlY3RlZCB0eXBlIG9mIGFyZ3VtZW50IGluIGZ1bmN0aW9uIHF1YW50aWxlU2VxIik7aWYoaT1lLnZhbHVlT2YoKSxPYmplY3QoaWUueSkodCkpe2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoIk4vcHJvYiBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpO2lmKHQ8PTEpcmV0dXJuIGgoaSx0LHIpO2lmKDE8dCl7aWYoIU9iamVjdChFLmkpKHQpKXRocm93IG5ldyBFcnJvcigiTiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIpO3ZhciBvPXQrMTtuPW5ldyBBcnJheSh0KTtmb3IodmFyIHM9MDtzPHQ7KW5bc109aChpLCsrcy9vLHIpO3JldHVybiBufX1pZihPYmplY3QoaWUuZSkodCkpe3ZhciB1PXQuY29uc3RydWN0b3I7aWYodC5pc05lZ2F0aXZlKCkpdGhyb3cgbmV3IEVycm9yKCJOL3Byb2IgbXVzdCBiZSBub24tbmVnYXRpdmUiKTtpZihhPW5ldyB1KDEpLHQubHRlKGEpKXJldHVybiBuZXcgdShoKGksdCxyKSk7aWYodC5ndChhKSl7aWYoIXQuaXNJbnRlZ2VyKCkpdGhyb3cgbmV3IEVycm9yKCJOIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIik7dmFyIGM9dC50b051bWJlcigpO2lmKDQyOTQ5NjcyOTU8Yyl0aHJvdyBuZXcgRXJyb3IoIk4gbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMl4zMi0xLCBhcyB0aGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbiBBcnJheSIpO3ZhciBmPW5ldyB1KGMrMSk7bj1uZXcgQXJyYXkoYyk7Zm9yKHZhciBsPTA7bDxjOyluW2xdPW5ldyB1KGgoaSxuZXcgdSgrK2wpLmRpdihmKSxyKSk7cmV0dXJuIG59fWlmKEFycmF5LmlzQXJyYXkodCkpe249bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IodmFyIHA9MDtwPG4ubGVuZ3RoOysrcCl7dmFyIG09dFtwXTtpZihPYmplY3QoaWUueSkobSkpe2lmKG08MHx8MTxtKXRocm93IG5ldyBFcnJvcigiUHJvYmFiaWxpdHkgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEsIGluY2x1c2l2ZSIpfWVsc2V7aWYoIU9iamVjdChpZS5lKShtKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmV4cGVjdGVkIHR5cGUgb2YgYXJndW1lbnQgaW4gZnVuY3Rpb24gcXVhbnRpbGVTZXEiKTtpZihhPW5ldyBtLmNvbnN0cnVjdG9yKDEpLG0uaXNOZWdhdGl2ZSgpfHxtLmd0KGEpKXRocm93IG5ldyBFcnJvcigiUHJvYmFiaWxpdHkgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEsIGluY2x1c2l2ZSIpfW5bcF09aChpLG0scil9cmV0dXJuIG59dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5leHBlY3RlZCB0eXBlIG9mIGFyZ3VtZW50IGluIGZ1bmN0aW9uIHF1YW50aWxlU2VxIil9dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5leHBlY3RlZCB0eXBlIG9mIGFyZ3VtZW50IGluIGZ1bmN0aW9uIHF1YW50aWxlU2VxIil9fSksZHA9WyJ0eXBlZCIsInNxcnQiLCJ2YXJpYW5jZSJdLHlwPU9iamVjdChzLmEpKCJzdGQiLGRwLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLnNxcnQsbj1lLnZhcmlhbmNlO3JldHVybiB0KCJzdGQiLHsiQXJyYXkgfCBNYXRyaXgiOmksIkFycmF5IHwgTWF0cml4LCBzdHJpbmciOmksIkFycmF5IHwgTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXIiOmksIkFycmF5IHwgTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXIsIHN0cmluZyI6aSwiLi4uIjpmdW5jdGlvbihlKXtyZXR1cm4gaShlKX19KTtmdW5jdGlvbiBpKGUsdCl7aWYoMD09PWUubGVuZ3RoKXRocm93IG5ldyBTeW50YXhFcnJvcigiRnVuY3Rpb24gc3RkIHJlcXVpcmVzIG9uZSBvciBtb3JlIHBhcmFtZXRlcnMgKDAgcHJvdmlkZWQpIik7dHJ5e3JldHVybiByKG4uYXBwbHkobnVsbCxhcmd1bWVudHMpKX1jYXRjaChlKXt0aHJvdyBlIGluc3RhbmNlb2YgVHlwZUVycm9yJiYtMSE9PWUubWVzc2FnZS5pbmRleE9mKCIgdmFyaWFuY2UiKT9uZXcgVHlwZUVycm9yKGUubWVzc2FnZS5yZXBsYWNlKCIgdmFyaWFuY2UiLCIgc3RkIikpOmV9fX0pO2Z1bmN0aW9uIGdwKGUsdCl7aWYodDxlKXJldHVybiAxO2lmKHQ9PT1lKXJldHVybiB0O3ZhciByPXQrZT4+MTtyZXR1cm4gZ3AoZSxyKSpncCgxK3IsdCl9ZnVuY3Rpb24gdnAoZSx0KXtpZighT2JqZWN0KEUuaSkoZSl8fGU8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGNvbWJpbmF0aW9ucyIpO2lmKCFPYmplY3QoRS5pKSh0KXx8dDwwKXRocm93IG5ldyBUeXBlRXJyb3IoIlBvc2l0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gY29tYmluYXRpb25zIik7aWYoZTx0KXRocm93IG5ldyBUeXBlRXJyb3IoImsgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbiIpO3ZhciByPWUtdDtyZXR1cm4gdDxyP2dwKDErcixlKS9ncCgxLHQpOmdwKHQrMSxlKS9ncCgxLHIpfXZwLnNpZ25hdHVyZT0ibnVtYmVyLCBudW1iZXIiO3ZhciBicD0iY29tYmluYXRpb25zIix4cD1bInR5cGVkIl0sd3A9T2JqZWN0KHMuYSkoYnAseHAsZnVuY3Rpb24oZSl7cmV0dXJuKDAsZS50eXBlZCkoYnAseyJudW1iZXIsIG51bWJlciI6dnAsIkJpZ051bWJlciwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe3ZhciByLG4saT1lLmNvbnN0cnVjdG9yLGE9ZS5taW51cyh0KSxvPW5ldyBpKDEpO2lmKCFOcChlKXx8IU5wKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBvc2l0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gY29tYmluYXRpb25zIik7aWYodC5ndChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJrIG11c3QgYmUgbGVzcyB0aGFuIG4gaW4gZnVuY3Rpb24gY29tYmluYXRpb25zIik7aWYocj1vLHQubHQoYSkpZm9yKG49bztuLmx0ZShhKTtuPW4ucGx1cyhvKSlyPXIudGltZXModC5wbHVzKG4pKS5kaXZpZGVkQnkobik7ZWxzZSBmb3Iobj1vO24ubHRlKHQpO249bi5wbHVzKG8pKXI9ci50aW1lcyhhLnBsdXMobikpLmRpdmlkZWRCeShuKTtyZXR1cm4gcn19KX0pO2Z1bmN0aW9uIE5wKGUpe3JldHVybiBlLmlzSW50ZWdlcigpJiZlLmd0ZSgwKX12YXIgT3A9ImNvbWJpbmF0aW9uc1dpdGhSZXAiLE1wPVsidHlwZWQiXSxqcD1PYmplY3Qocy5hKShPcCxNcCxmdW5jdGlvbihlKXtyZXR1cm4oMCxlLnR5cGVkKShPcCx7Im51bWJlciwgbnVtYmVyIjpmdW5jdGlvbihlLHQpe2lmKCFPYmplY3QoRS5pKShlKXx8ZTwwKXRocm93IG5ldyBUeXBlRXJyb3IoIlBvc2l0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gY29tYmluYXRpb25zV2l0aFJlcCIpO2lmKCFPYmplY3QoRS5pKSh0KXx8dDwwKXRocm93IG5ldyBUeXBlRXJyb3IoIlBvc2l0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gY29tYmluYXRpb25zV2l0aFJlcCIpO2lmKGU8MSl0aHJvdyBuZXcgVHlwZUVycm9yKCJrIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG4gKyBrIC0gMSIpO3JldHVybiB0PGUtMT9ncChlLGUrdC0xKS9ncCgxLHQpOmdwKHQrMSxlK3QtMSkvZ3AoMSxlLTEpfSwiQmlnTnVtYmVyLCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpPW5ldyBlLmNvbnN0cnVjdG9yKDEpLGE9ZS5taW51cyhpKTtpZighRXAoZSl8fCFFcCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGNvbWJpbmF0aW9uc1dpdGhSZXAiKTtpZihlLmx0KGkpKXRocm93IG5ldyBUeXBlRXJyb3IoImsgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbiArIGsgLSAxIGluIGZ1bmN0aW9uIGNvbWJpbmF0aW9uc1dpdGhSZXAiKTtpZihyPWksdC5sdChhKSlmb3Iobj1pO24ubHRlKGEpO249bi5wbHVzKGkpKXI9ci50aW1lcyh0LnBsdXMobikpLmRpdmlkZWRCeShuKTtlbHNlIGZvcihuPWk7bi5sdGUodCk7bj1uLnBsdXMoaSkpcj1yLnRpbWVzKGEucGx1cyhuKSkuZGl2aWRlZEJ5KG4pO3JldHVybiByfX0pfSk7ZnVuY3Rpb24gRXAoZSl7cmV0dXJuIGUuaXNJbnRlZ2VyKCkmJmUuZ3RlKDApfWZ1bmN0aW9uIFNwKGUpe3ZhciB0O2lmKE9iamVjdChFLmkpKGUpKXJldHVybiBlPD0wP2lzRmluaXRlKGUpPzEvMDpOYU46MTcxPGU/MS8wOmdwKDEsZS0xKTtpZihlPC41KXJldHVybiBNYXRoLlBJLyhNYXRoLnNpbihNYXRoLlBJKmUpKlNwKDEtZSkpO2lmKDE3MS4zNTw9ZSlyZXR1cm4gMS8wO2lmKDg1PGUpe3ZhciByPWUqZSxuPXIqZSxpPW4qZSxhPWkqZTtyZXR1cm4gTWF0aC5zcXJ0KDIqTWF0aC5QSS9lKSpNYXRoLnBvdyhlL01hdGguRSxlKSooMSsxLygxMiplKSsxLygyODgqciktMTM5Lyg1MTg0MCpuKS01NzEvKDI0ODgzMjAqaSkrMTYzODc5LygyMDkwMTg4ODAqYSkrNTI0NjgxOS8oNzUyNDY3OTY4MDAqYSplKSl9LS1lLHQ9Q3BbMF07Zm9yKHZhciBvPTE7bzxDcC5sZW5ndGg7KytvKXQrPUNwW29dLyhlK28pO3ZhciBzPWUrQXArLjU7cmV0dXJuIE1hdGguc3FydCgyKk1hdGguUEkpKk1hdGgucG93KHMsZSsuNSkqTWF0aC5leHAoLXMpKnR9U3Auc2lnbmF0dXJlPSJudW1iZXIiO3ZhciBBcD00Ljc0MjE4NzUsQ3A9Wy45OTk5OTk5OTk5OTk5OTcxLDU3LjE1NjIzNTY2NTg2MjkyLC01OS41OTc5NjAzNTU0NzU0OSwxNC4xMzYwOTc5NzQ3NDE3NDYsLS40OTE5MTM4MTYwOTc2MjAyLDMzOTk0NjQ5OTg0ODExODllLTIwLDQ2NTIzNjI4OTI3MDQ4NThlLTIwLC05ODM3NDQ3NTMwNDg3OTU2ZS0yMCwuMDAwMTU4MDg4NzAzMjI0OTEyNSwtLjAwMDIxMDI2NDQ0MTcyNDEwNDg4LC4wMDAyMTc0Mzk2MTgxMTUyMTI2NSwtLjAwMDE2NDMxODEwNjUzNjc2MzksODQ0MTgyMjM5ODM4NTI3NWUtMjAsLTI2MTkwODM4NDAxNTgxNDA4ZS0yMSwzNjg5OTE4MjY1OTUzMTYyNWUtMjJdLFRwPVsidHlwZWQiLCJjb25maWciLCJtdWx0aXBseVNjYWxhciIsInBvdyIsIkJpZ051bWJlciIsIkNvbXBsZXgiXSxfcD1PYmplY3Qocy5hKSgiZ2FtbWEiLFRwLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscz1lLmNvbmZpZyxjPWUubXVsdGlwbHlTY2FsYXIsZj1lLnBvdyx1PWUuQmlnTnVtYmVyLGw9ZS5Db21wbGV4LHA9dCgiZ2FtbWEiLHtudW1iZXI6U3AsQ29tcGxleDpmdW5jdGlvbihlKXtpZigwPT09ZS5pbSlyZXR1cm4gcChlLnJlKTtlPW5ldyBsKGUucmUtMSxlLmltKTtmb3IodmFyIHQ9bmV3IGwoQ3BbMF0sMCkscj0xO3I8Q3AubGVuZ3RoOysrcil7dmFyIG49ZS5yZStyLGk9bipuK2UuaW0qZS5pbTswIT1pPyh0LnJlKz1DcFtyXSpuL2ksdC5pbSs9LShDcFtyXSplLmltKS9pKTp0LnJlPUNwW3JdPDA/LTEvMDoxLzB9dmFyIGE9bmV3IGwoZS5yZStBcCsuNSxlLmltKSxvPU1hdGguc3FydCgyKk1hdGguUEkpO2UucmUrPS41O3ZhciBzPWYoYSxlKTswPT09cy5pbT9zLnJlKj1vOigwPT09cy5yZXx8KHMucmUqPW8pLHMuaW0qPW8pO3ZhciB1PU1hdGguZXhwKC1hLnJlKTtyZXR1cm4gYS5yZT11Kk1hdGguY29zKC1hLmltKSxhLmltPXUqTWF0aC5zaW4oLWEuaW0pLGMoYyhzLGEpLHQpfSxCaWdOdW1iZXI6ZnVuY3Rpb24oZSl7aWYoZS5pc0ludGVnZXIoKSlyZXR1cm4gZS5pc05lZ2F0aXZlKCl8fGUuaXNaZXJvKCk/bmV3IHUoMS8wKTpmdW5jdGlvbiBlKHQpe2lmKHQ8OClyZXR1cm4gbmV3IHUoWzEsMSwyLDYsMjQsMTIwLDcyMCw1MDQwXVt0XSk7dmFyIHI9cy5wcmVjaXNpb24rKDB8TWF0aC5sb2codC50b051bWJlcigpKSk7dmFyIG49dS5jbG9uZSh7cHJlY2lzaW9uOnJ9KTtpZih0JTI9PTEpcmV0dXJuIHQudGltZXMoZShuZXcgdSh0LTEpKSk7dmFyIGk9dDt2YXIgYT1uZXcgbih0KTt2YXIgbz10LnRvTnVtYmVyKCk7Zm9yKDsyPGk7KW8rPWktPTIsYT1hLnRpbWVzKG8pO3JldHVybiBuZXcgdShhLnRvUHJlY2lzaW9uKHUucHJlY2lzaW9uKSl9KGUubWludXMoMSkpO2lmKCFlLmlzRmluaXRlKCkpcmV0dXJuIG5ldyB1KGUuaXNOZWdhdGl2ZSgpP05hTjoxLzApO3Rocm93IG5ldyBFcnJvcigiSW50ZWdlciBCaWdOdW1iZXIgZXhwZWN0ZWQiKX0sIkFycmF5IHwgTWF0cml4IjpmdW5jdGlvbihlKXtyZXR1cm4gb2UoZSxwKX19KTtyZXR1cm4gcH0pLElwPSJmYWN0b3JpYWwiLHFwPVsidHlwZWQiLCJnYW1tYSJdLEJwPU9iamVjdChzLmEpKElwLHFwLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLmdhbW1hLG49dChJcCx7bnVtYmVyOmZ1bmN0aW9uKGUpe2lmKGU8MCl0aHJvdyBuZXcgRXJyb3IoIlZhbHVlIG11c3QgYmUgbm9uLW5lZ2F0aXZlIik7cmV0dXJuIHIoZSsxKX0sQmlnTnVtYmVyOmZ1bmN0aW9uKGUpe2lmKGUuaXNOZWdhdGl2ZSgpKXRocm93IG5ldyBFcnJvcigiVmFsdWUgbXVzdCBiZSBub24tbmVnYXRpdmUiKTtyZXR1cm4gcihlLnBsdXMoMSkpfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBvZShlLG4pfX0pO3JldHVybiBufSksa3A9ImtsZGl2ZXJnZW5jZSIsenA9WyJ0eXBlZCIsIm1hdHJpeCIsImRpdmlkZSIsInN1bSIsIm11bHRpcGx5IiwiZG90RGl2aWRlIiwibG9nIiwiaXNOdW1lcmljIl0sRHA9T2JqZWN0KHMuYSkoa3AsenAsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUubWF0cml4LHM9ZS5kaXZpZGUsdT1lLnN1bSxjPWUubXVsdGlwbHksZj1lLmRvdERpdmlkZSxsPWUubG9nLHA9ZS5pc051bWVyaWM7cmV0dXJuIHQoa3AseyJBcnJheSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4ocihlKSxyKHQpKX0sIk1hdHJpeCwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4oZSxyKHQpKX0sIkFycmF5LCBNYXRyaXgiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4ocihlKSx0KX0sIk1hdHJpeCwgTWF0cml4IjpmdW5jdGlvbihlLHQpe3JldHVybiBuKGUsdCl9fSk7ZnVuY3Rpb24gbihlLHQpe3ZhciByPXQuc2l6ZSgpLmxlbmd0aCxuPWUuc2l6ZSgpLmxlbmd0aDtpZigxPHIpdGhyb3cgbmV3IEVycm9yKCJmaXJzdCBvYmplY3QgbXVzdCBiZSBvbmUgZGltZW5zaW9uYWwiKTtpZigxPG4pdGhyb3cgbmV3IEVycm9yKCJzZWNvbmQgb2JqZWN0IG11c3QgYmUgb25lIGRpbWVuc2lvbmFsIik7aWYociE9PW4pdGhyb3cgbmV3IEVycm9yKCJMZW5ndGggb2YgdHdvIHZlY3RvcnMgbXVzdCBiZSBlcXVhbCIpO2lmKDA9PT11KGUpKXRocm93IG5ldyBFcnJvcigiU3VtIG9mIGVsZW1lbnRzIGluIGZpcnN0IG9iamVjdCBtdXN0IGJlIG5vbiB6ZXJvIik7aWYoMD09PXUodCkpdGhyb3cgbmV3IEVycm9yKCJTdW0gb2YgZWxlbWVudHMgaW4gc2Vjb25kIG9iamVjdCBtdXN0IGJlIG5vbiB6ZXJvIik7dmFyIGk9cyhlLHUoZSkpLGE9cyh0LHUodCkpLG89dShjKGksbChmKGksYSkpKSk7cmV0dXJuIHAobyk/bzpOdW1iZXIuTmFOfX0pLFJwPSJtdWx0aW5vbWlhbCIsUHA9WyJ0eXBlZCIsImFkZCIsImRpdmlkZSIsIm11bHRpcGx5IiwiZmFjdG9yaWFsIiwiaXNJbnRlZ2VyIiwiaXNQb3NpdGl2ZSJdLEZwPU9iamVjdChzLmEpKFJwLFBwLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQsbj1lLmFkZCxpPWUuZGl2aWRlLGE9ZS5tdWx0aXBseSxvPWUuZmFjdG9yaWFsLHM9ZS5pc0ludGVnZXIsdT1lLmlzUG9zaXRpdmU7cmV0dXJuIHQoUnAseyJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7dmFyIHQ9MCxyPTE7cmV0dXJuIEYoZSxmdW5jdGlvbihlKXtpZighcyhlKXx8IXUoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBtdWx0aW5vbWlhbCIpO3Q9bih0LGUpLHI9YShyLG8oZSkpfSksaShvKHQpLHIpfX0pfSksVXA9InBlcm11dGF0aW9ucyIsTHA9WyJ0eXBlZCIsImZhY3RvcmlhbCJdLEhwPU9iamVjdChzLmEpKFVwLExwLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLmZhY3RvcmlhbDtyZXR1cm4gdChVcCx7Im51bWJlciB8IEJpZ051bWJlciI6ciwibnVtYmVyLCBudW1iZXIiOmZ1bmN0aW9uKGUsdCl7aWYoIU9iamVjdChFLmkpKGUpfHxlPDApdGhyb3cgbmV3IFR5cGVFcnJvcigiUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBwZXJtdXRhdGlvbnMiKTtpZighT2JqZWN0KEUuaSkodCl8fHQ8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHBlcm11dGF0aW9ucyIpO2lmKGU8dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJzZWNvbmQgYXJndW1lbnQgayBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBmaXJzdCBhcmd1bWVudCBuIik7cmV0dXJuIGdwKGUtdCsxLGUpfSwiQmlnTnVtYmVyLCBCaWdOdW1iZXIiOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbjtpZighJHAoZSl8fCEkcCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHBlcm11dGF0aW9ucyIpO2lmKHQuZ3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigic2Vjb25kIGFyZ3VtZW50IGsgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gZmlyc3QgYXJndW1lbnQgbiIpO2ZvcihyPWUubXVsKDApLmFkZCgxKSxuPWUubWludXModCkucGx1cygxKTtuLmx0ZShlKTtuPW4ucGx1cygxKSlyPXIudGltZXMobik7cmV0dXJuIHJ9fSl9KTtmdW5jdGlvbiAkcChlKXtyZXR1cm4gZS5pc0ludGVnZXIoKSYmZS5ndGUoMCl9dmFyIEdwPXIoMTUpLFpwPXIubihHcCksVnA9WnAoKSgpO2Z1bmN0aW9uIEpwKGUpe3ZhciB0LHI7cmV0dXJuIHQ9bnVsbD09PShyPWUpP1ZwOlpwKCkoU3RyaW5nKHIpKSxmdW5jdGlvbigpe3JldHVybiB0KCl9fXZhciBXcD1bInR5cGVkIiwiY29uZmlnIiwiP29uIl0sWXA9T2JqZWN0KHMuYSkoInBpY2tSYW5kb20iLFdwLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLmNvbmZpZyxuPWUub24sbT1KcChyLnJhbmRvbVNlZWQpO3JldHVybiBuJiZuKCJjb25maWciLGZ1bmN0aW9uKGUsdCl7ZS5yYW5kb21TZWVkIT09dC5yYW5kb21TZWVkJiYobT1KcChlLnJhbmRvbVNlZWQpKX0pLHQoeyJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSl9LCJBcnJheSB8IE1hdHJpeCwgbnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBpKGUsdCx2b2lkIDApfSwiQXJyYXkgfCBNYXRyaXgsIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBpKGUsdm9pZCAwLHQpfSwiQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4LCBudW1iZXIiOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gaShlLHIsdCl9LCJBcnJheSB8IE1hdHJpeCwgbnVtYmVyLCBBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBpKGUsdCxyKX19KTtmdW5jdGlvbiBpKGUsdCxyKXt2YXIgbj12b2lkIDA9PT10O2lmKG4mJih0PTEpLGU9ZS52YWx1ZU9mKCkscj1yJiZyLnZhbHVlT2YoKSwxPE9iamVjdChJLmEpKGUpLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIk9ubHkgb25lIGRpbWVuc2lvbmFsIHZlY3RvcnMgc3VwcG9ydGVkIik7dmFyIGk9MDtpZih2b2lkIDAhPT1yKXtpZihyLmxlbmd0aCE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiV2VpZ2h0cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIHBvc3NpYmxlcyIpO2Zvcih2YXIgYT0wLG89ci5sZW5ndGg7YTxvO2ErKyl7aWYoIU9iamVjdChpZS55KShyW2FdKXx8clthXTwwKXRocm93IG5ldyBFcnJvcigiV2VpZ2h0cyBtdXN0IGJlIGFuIGFycmF5IG9mIHBvc2l0aXZlIG51bWJlcnMiKTtpKz1yW2FdfX12YXIgcz1lLmxlbmd0aDtpZigwPT09cylyZXR1cm5bXTtpZihzPD10KXJldHVybiAxPHQ/ZTplWzBdO2Zvcih2YXIgdSxjPVtdO2MubGVuZ3RoPHQ7KXtpZih2b2lkIDA9PT1yKXU9ZVtNYXRoLmZsb29yKG0oKSpzKV07ZWxzZSBmb3IodmFyIGY9bSgpKmksbD0wLHA9ZS5sZW5ndGg7bDxwO2wrKylpZigoZi09cltsXSk8MCl7dT1lW2xdO2JyZWFrfS0xPT09Yy5pbmRleE9mKHUpJiZjLnB1c2godSl9cmV0dXJuIG4/Y1swXTpjfX0pO2Z1bmN0aW9uIFhwKGUsdCl7dmFyIHI9W107aWYoMTwoZT1lLnNsaWNlKDApKS5sZW5ndGgpZm9yKHZhciBuPTAsaT1lLnNoaWZ0KCk7bjxpO24rKylyLnB1c2goWHAoZSx0KSk7ZWxzZSBmb3IodmFyIGE9MCxvPWUuc2hpZnQoKTthPG87YSsrKXIucHVzaCh0KCkpO3JldHVybiByfXZhciBRcD0icmFuZG9tIixLcD1bInR5cGVkIiwiY29uZmlnIiwiP29uIl0sZW09T2JqZWN0KHMuYSkoUXAsS3AsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuY29uZmlnLG49ZS5vbixpPUpwKHIucmFuZG9tU2VlZCk7cmV0dXJuIG4mJm4oImNvbmZpZyIsZnVuY3Rpb24oZSx0KXtlLnJhbmRvbVNlZWQhPT10LnJhbmRvbVNlZWQmJihpPUpwKGUucmFuZG9tU2VlZCkpfSksdChRcCx7IiI6ZnVuY3Rpb24oKXtyZXR1cm4gbygwLDEpfSxudW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG8oMCxlKX0sIm51bWJlciwgbnVtYmVyIjpmdW5jdGlvbihlLHQpe3JldHVybiBvKGUsdCl9LCJBcnJheSB8IE1hdHJpeCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSwwLDEpfSwiQXJyYXkgfCBNYXRyaXgsIG51bWJlciI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLDAsdCl9LCJBcnJheSB8IE1hdHJpeCwgbnVtYmVyLCBudW1iZXIiOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gYShlLHQscil9fSk7ZnVuY3Rpb24gYShlLHQscil7dmFyIG49WHAoZS52YWx1ZU9mKCksZnVuY3Rpb24oKXtyZXR1cm4gbyh0LHIpfSk7cmV0dXJuIE9iamVjdChpZS52KShlKT9lLmNyZWF0ZShuKTpufWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZStpKCkqKHQtZSl9fSksdG09InJhbmRvbUludCIscm09WyJ0eXBlZCIsImNvbmZpZyIsIj9vbiJdLG5tPU9iamVjdChzLmEpKHRtLHJtLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLmNvbmZpZyxuPWUub24saT1KcChyLnJhbmRvbVNlZWQpO3JldHVybiBuJiZuKCJjb25maWciLGZ1bmN0aW9uKGUsdCl7ZS5yYW5kb21TZWVkIT09dC5yYW5kb21TZWVkJiYoaT1KcChlLnJhbmRvbVNlZWQpKX0pLHQodG0seyIiOmZ1bmN0aW9uKCl7cmV0dXJuIG8oMCwxKX0sbnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBvKDAsZSl9LCJudW1iZXIsIG51bWJlciI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhlLHQpfSwiQXJyYXkgfCBNYXRyaXgiOmZ1bmN0aW9uKGUpe3JldHVybiBhKGUsMCwxKX0sIkFycmF5IHwgTWF0cml4LCBudW1iZXIiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSwwLHQpfSwiQXJyYXkgfCBNYXRyaXgsIG51bWJlciwgbnVtYmVyIjpmdW5jdGlvbihlLHQscil7cmV0dXJuIGEoZSx0LHIpfX0pO2Z1bmN0aW9uIGEoZSx0LHIpe3ZhciBuPVhwKGUudmFsdWVPZigpLGZ1bmN0aW9uKCl7cmV0dXJuIG8odCxyKX0pO3JldHVybiBPYmplY3QoaWUudikoZSk/ZS5jcmVhdGUobik6bn1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIE1hdGguZmxvb3IoZStpKCkqKHQtZSkpfX0pLGltPSJzdGlybGluZ1MyIixhbT1bInR5cGVkIiwiYWRkU2NhbGFyIiwic3VidHJhY3QiLCJtdWx0aXBseVNjYWxhciIsImRpdmlkZVNjYWxhciIsInBvdyIsImZhY3RvcmlhbCIsImNvbWJpbmF0aW9ucyIsImlzTmVnYXRpdmUiLCJpc0ludGVnZXIiLCJsYXJnZXIiXSxvbT1PYmplY3Qocy5hKShpbSxhbSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHU9ZS5hZGRTY2FsYXIsYz1lLnN1YnRyYWN0LGY9ZS5tdWx0aXBseVNjYWxhcixsPWUuZGl2aWRlU2NhbGFyLHA9ZS5wb3csbT1lLmZhY3RvcmlhbCxoPWUuY29tYmluYXRpb25zLGQ9ZS5pc05lZ2F0aXZlLHk9ZS5pc0ludGVnZXIsZz1lLmxhcmdlcjtyZXR1cm4gdChpbSx7Im51bWJlciB8IEJpZ051bWJlciwgbnVtYmVyIHwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe2lmKCF5KGUpfHxkKGUpfHwheSh0KXx8ZCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJOb24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBzdGlybGluZ1MyIik7aWYoZyh0LGUpKXRocm93IG5ldyBUeXBlRXJyb3IoImsgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbiBpbiBmdW5jdGlvbiBzdGlybGluZ1MyIik7Zm9yKHZhciByPW0odCksbj0wLGk9MDtpPD10O2krKyl7dmFyIGE9cCgtMSxjKHQsaSkpLG89aCh0LGkpLHM9cChpLGUpO249dShuLGYoZihvLHMpLGEpKX1yZXR1cm4gbChuLHIpfX0pfSksc209ImJlbGxOdW1iZXJzIix1bT1bInR5cGVkIiwiYWRkU2NhbGFyIiwiaXNOZWdhdGl2ZSIsImlzSW50ZWdlciIsInN0aXJsaW5nUzIiXSxjbT1PYmplY3Qocy5hKShzbSx1bSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLG49ZS5hZGRTY2FsYXIsaT1lLmlzTmVnYXRpdmUsYT1lLmlzSW50ZWdlcixvPWUuc3RpcmxpbmdTMjtyZXR1cm4gdChzbSx7Im51bWJlciB8IEJpZ051bWJlciI6ZnVuY3Rpb24oZSl7aWYoIWEoZSl8fGkoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiTm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gYmVsbE51bWJlcnMiKTtmb3IodmFyIHQ9MCxyPTA7cjw9ZTtyKyspdD1uKHQsbyhlLHIpKTtyZXR1cm4gdH19KX0pLGZtPSJjYXRhbGFuIixsbT1bInR5cGVkIiwiYWRkU2NhbGFyIiwiZGl2aWRlU2NhbGFyIiwibXVsdGlwbHlTY2FsYXIiLCJjb21iaW5hdGlvbnMiLCJpc05lZ2F0aXZlIiwiaXNJbnRlZ2VyIl0scG09T2JqZWN0KHMuYSkoZm0sbG0sZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuYWRkU2NhbGFyLG49ZS5kaXZpZGVTY2FsYXIsaT1lLm11bHRpcGx5U2NhbGFyLGE9ZS5jb21iaW5hdGlvbnMsbz1lLmlzTmVnYXRpdmUscz1lLmlzSW50ZWdlcjtyZXR1cm4gdChmbSx7Im51bWJlciB8IEJpZ051bWJlciI6ZnVuY3Rpb24oZSl7aWYoIXMoZSl8fG8oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiTm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gY2F0YWxhbiIpO3JldHVybiBuKGEoaShlLDIpLGUpLHIoZSwxKSl9fSl9KSxtbT0iY29tcG9zaXRpb24iLGhtPVsidHlwZWQiLCJhZGRTY2FsYXIiLCJjb21iaW5hdGlvbnMiLCJpc05lZ2F0aXZlIiwiaXNQb3NpdGl2ZSIsImlzSW50ZWdlciIsImxhcmdlciJdLGRtPU9iamVjdChzLmEpKG1tLGhtLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLmFkZFNjYWxhcixuPWUuY29tYmluYXRpb25zLGk9ZS5pc1Bvc2l0aXZlLGE9KGUuaXNOZWdhdGl2ZSxlLmlzSW50ZWdlciksbz1lLmxhcmdlcjtyZXR1cm4gdChtbSx7Im51bWJlciB8IEJpZ051bWJlciwgbnVtYmVyIHwgQmlnTnVtYmVyIjpmdW5jdGlvbihlLHQpe2lmKCEoYShlKSYmaShlKSYmYSh0KSYmaSh0KSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21wb3NpdGlvbiIpO2lmKG8odCxlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJrIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG4gaW4gZnVuY3Rpb24gY29tcG9zaXRpb24iKTtyZXR1cm4gbihyKGUsLTEpLHIodCwtMSkpfX0pfSkseW09WyJGdW5jdGlvbk5vZGUiLCJPcGVyYXRvck5vZGUiLCJTeW1ib2xOb2RlIl0sZ209T2JqZWN0KHMuYSkoInNpbXBsaWZ5VXRpbCIseW0sZnVuY3Rpb24oZSl7dmFyIHI9ZS5GdW5jdGlvbk5vZGUsbj1lLk9wZXJhdG9yTm9kZSxpPWUuU3ltYm9sTm9kZSxhPXthZGQ6ITAsbXVsdGlwbHk6ITB9LG89e2FkZDohMCxtdWx0aXBseTohMH07ZnVuY3Rpb24gcyhlLHQpe2lmKCFPYmplY3QoaWUuQikoZSkpcmV0dXJuITE7dmFyIHI9ZS5mbi50b1N0cmluZygpO3JldHVybiB0JiZPYmplY3QoYWUuZikodCxyKSYmT2JqZWN0KGFlLmYpKHRbcl0sImFzc29jaWF0aXZlIik/dFtyXS5hc3NvY2lhdGl2ZTpvW3JdfHwhMX1mdW5jdGlvbiB1KGUpe3ZhciBpLGE9W107cmV0dXJuIHMoZSk/KGk9ZS5vcCxmdW5jdGlvbiBlKHQpe2Zvcih2YXIgcj0wO3I8dC5hcmdzLmxlbmd0aDtyKyspe3ZhciBuPXQuYXJnc1tyXTtPYmplY3QoaWUuQikobikmJmk9PT1uLm9wP2Uobik6YS5wdXNoKG4pfX0oZSksYSk6ZS5hcmdzfWZ1bmN0aW9uIGModCl7cmV0dXJuIE9iamVjdChpZS5CKSh0KT9mdW5jdGlvbihlKXt0cnl7cmV0dXJuIG5ldyBuKHQub3AsdC5mbixlLHQuaW1wbGljaXQpfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLmVycm9yKGUpLFtdfX06ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByKG5ldyBpKHQubmFtZSksZSl9fXJldHVybntjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uOmMsaXNDb21tdXRhdGl2ZTpmdW5jdGlvbihlLHQpe2lmKCFPYmplY3QoaWUuQikoZSkpcmV0dXJuITA7dmFyIHI9ZS5mbi50b1N0cmluZygpO3JldHVybiB0JiZPYmplY3QoYWUuZikodCxyKSYmT2JqZWN0KGFlLmYpKHRbcl0sImNvbW11dGF0aXZlIik/dFtyXS5jb21tdXRhdGl2ZTphW3JdfHwhMX0saXNBc3NvY2lhdGl2ZTpzLGZsYXR0ZW46ZnVuY3Rpb24gZSh0KXtpZighdC5hcmdzfHwwPT09dC5hcmdzLmxlbmd0aClyZXR1cm4gdDt0LmFyZ3M9dSh0KTtmb3IodmFyIHI9MDtyPHQuYXJncy5sZW5ndGg7cisrKWUodC5hcmdzW3JdKX0sYWxsQ2hpbGRyZW46dSx1bmZsYXR0ZW5yOmZ1bmN0aW9uIGUodCl7aWYodC5hcmdzJiYwIT09dC5hcmdzLmxlbmd0aCl7Zm9yKHZhciByPWModCksbj10LmFyZ3MubGVuZ3RoLGk9MDtpPG47aSsrKWUodC5hcmdzW2ldKTtpZigyPG4mJnModCkpe2Zvcih2YXIgYT10LmFyZ3MucG9wKCk7MDx0LmFyZ3MubGVuZ3RoOylhPXIoW3QuYXJncy5wb3AoKSxhXSk7dC5hcmdzPWEuYXJnc319fSx1bmZsYXR0ZW5sOmZ1bmN0aW9uIGUodCl7aWYodC5hcmdzJiYwIT09dC5hcmdzLmxlbmd0aCl7Zm9yKHZhciByPWModCksbj10LmFyZ3MubGVuZ3RoLGk9MDtpPG47aSsrKWUodC5hcmdzW2ldKTtpZigyPG4mJnModCkpe2Zvcih2YXIgYT10LmFyZ3Muc2hpZnQoKTswPHQuYXJncy5sZW5ndGg7KWE9cihbYSx0LmFyZ3Muc2hpZnQoKV0pO3QuYXJncz1hLmFyZ3N9fX19fSksdm09WyJlcXVhbCIsImlzWmVybyIsImFkZCIsInN1YnRyYWN0IiwibXVsdGlwbHkiLCJkaXZpZGUiLCJwb3ciLCJDb25zdGFudE5vZGUiLCJPcGVyYXRvck5vZGUiLCJGdW5jdGlvbk5vZGUiLCJQYXJlbnRoZXNpc05vZGUiXSxibT1PYmplY3Qocy5hKSgic2ltcGxpZnlDb3JlIix2bSxmdW5jdGlvbihlKXt2YXIgZj1lLmVxdWFsLGw9ZS5pc1plcm8scD1lLmFkZCxtPWUuc3VidHJhY3QsaD1lLm11bHRpcGx5LGQ9ZS5kaXZpZGUseT1lLnBvdyxnPWUuQ29uc3RhbnROb2RlLHY9ZS5PcGVyYXRvck5vZGUsYj1lLkZ1bmN0aW9uTm9kZSx4PWUuUGFyZW50aGVzaXNOb2RlLHc9bmV3IGcoMCksTj1uZXcgZygxKTtyZXR1cm4gZnVuY3Rpb24gZSh0KXtpZihPYmplY3QoaWUuQikodCkmJnQuaXNVbmFyeSgpKXt2YXIgcj1lKHQuYXJnc1swXSk7aWYoIisiPT09dC5vcClyZXR1cm4gcjtpZigiLSI9PT10Lm9wKXtpZihPYmplY3QoaWUuQikocikpe2lmKHIuaXNVbmFyeSgpJiYiLSI9PT1yLm9wKXJldHVybiByLmFyZ3NbMF07aWYoci5pc0JpbmFyeSgpJiYic3VidHJhY3QiPT09ci5mbilyZXR1cm4gbmV3IHYoIi0iLCJzdWJ0cmFjdCIsW3IuYXJnc1sxXSxyLmFyZ3NbMF1dKX1yZXR1cm4gbmV3IHYodC5vcCx0LmZuLFtyXSl9fWVsc2UgaWYoT2JqZWN0KGllLkIpKHQpJiZ0LmlzQmluYXJ5KCkpe3ZhciBuPWUodC5hcmdzWzBdKSxpPWUodC5hcmdzWzFdKTtpZigiKyI9PT10Lm9wKXtpZihPYmplY3QoaWUubCkobikpe2lmKGwobi52YWx1ZSkpcmV0dXJuIGk7aWYoT2JqZWN0KGllLmwpKGkpKXJldHVybiBuZXcgZyhwKG4udmFsdWUsaS52YWx1ZSkpfXJldHVybiBPYmplY3QoaWUubCkoaSkmJmwoaS52YWx1ZSk/bjpPYmplY3QoaWUuQikoaSkmJmkuaXNVbmFyeSgpJiYiLSI9PT1pLm9wP25ldyB2KCItIiwic3VidHJhY3QiLFtuLGkuYXJnc1swXV0pOm5ldyB2KHQub3AsdC5mbixpP1tuLGldOltuXSl9aWYoIi0iPT09dC5vcCl7aWYoT2JqZWN0KGllLmwpKG4pJiZpKXtpZihPYmplY3QoaWUubCkoaSkpcmV0dXJuIG5ldyBnKG0obi52YWx1ZSxpLnZhbHVlKSk7aWYobChuLnZhbHVlKSlyZXR1cm4gbmV3IHYoIi0iLCJ1bmFyeU1pbnVzIixbaV0pfWlmKCJzdWJ0cmFjdCI9PT10LmZuKXJldHVybiBPYmplY3QoaWUubCkoaSkmJmwoaS52YWx1ZSk/bjpPYmplY3QoaWUuQikoaSkmJmkuaXNVbmFyeSgpJiYiLSI9PT1pLm9wP2UobmV3IHYoIisiLCJhZGQiLFtuLGkuYXJnc1swXV0pKTpuZXcgdih0Lm9wLHQuZm4sW24saV0pfWVsc2V7aWYoIioiPT09dC5vcCl7aWYoT2JqZWN0KGllLmwpKG4pKXtpZihsKG4udmFsdWUpKXJldHVybiB3O2lmKGYobi52YWx1ZSwxKSlyZXR1cm4gaTtpZihPYmplY3QoaWUubCkoaSkpcmV0dXJuIG5ldyBnKGgobi52YWx1ZSxpLnZhbHVlKSl9aWYoT2JqZWN0KGllLmwpKGkpKXtpZihsKGkudmFsdWUpKXJldHVybiB3O2lmKGYoaS52YWx1ZSwxKSlyZXR1cm4gbjtpZihPYmplY3QoaWUuQikobikmJm4uaXNCaW5hcnkoKSYmbi5vcD09PXQub3Ape3ZhciBhPW4uYXJnc1swXTtpZihPYmplY3QoaWUubCkoYSkpe3ZhciBvPW5ldyBnKGgoYS52YWx1ZSxpLnZhbHVlKSk7cmV0dXJuIG5ldyB2KHQub3AsdC5mbixbbyxuLmFyZ3NbMV1dLHQuaW1wbGljaXQpfX1yZXR1cm4gbmV3IHYodC5vcCx0LmZuLFtpLG5dLHQuaW1wbGljaXQpfXJldHVybiBuZXcgdih0Lm9wLHQuZm4sW24saV0sdC5pbXBsaWNpdCl9aWYoIi8iPT09dC5vcCl7aWYoT2JqZWN0KGllLmwpKG4pKXtpZihsKG4udmFsdWUpKXJldHVybiB3O2lmKE9iamVjdChpZS5sKShpKSYmKGYoaS52YWx1ZSwxKXx8ZihpLnZhbHVlLDIpfHxmKGkudmFsdWUsNCkpKXJldHVybiBuZXcgZyhkKG4udmFsdWUsaS52YWx1ZSkpfXJldHVybiBuZXcgdih0Lm9wLHQuZm4sW24saV0pfWlmKCJeIj09PXQub3Ape2lmKE9iamVjdChpZS5sKShpKSl7aWYobChpLnZhbHVlKSlyZXR1cm4gTjtpZihmKGkudmFsdWUsMSkpcmV0dXJuIG47aWYoT2JqZWN0KGllLmwpKG4pKXJldHVybiBuZXcgZyh5KG4udmFsdWUsaS52YWx1ZSkpO2lmKE9iamVjdChpZS5CKShuKSYmbi5pc0JpbmFyeSgpJiYiXiI9PT1uLm9wKXt2YXIgcz1uLmFyZ3NbMV07aWYoT2JqZWN0KGllLmwpKHMpKXJldHVybiBuZXcgdih0Lm9wLHQuZm4sW24uYXJnc1swXSxuZXcgZyhoKHMudmFsdWUsaS52YWx1ZSkpXSl9fXJldHVybiBuZXcgdih0Lm9wLHQuZm4sW24saV0pfX19ZWxzZXtpZihPYmplY3QoaWUuQykodCkpe3ZhciB1PWUodC5jb250ZW50KTtyZXR1cm4gT2JqZWN0KGllLkMpKHUpfHxPYmplY3QoaWUuSikodSl8fE9iamVjdChpZS5sKSh1KT91Om5ldyB4KHUpfWlmKE9iamVjdChpZS5yKSh0KSl7dmFyIGM9dC5hcmdzLm1hcChlKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChpZS5DKShlKT9lLmNvbnRlbnQ6ZX0pO3JldHVybiBuZXcgYihlKHQuZm4pLGMpfX1yZXR1cm4gdH19KSx4bT1bInR5cGVkIiwiY29uZmlnIiwibWF0aFdpdGhUcmFuc2Zvcm0iLCI/ZnJhY3Rpb24iLCI/YmlnbnVtYmVyIiwiQ29uc3RhbnROb2RlIiwiT3BlcmF0b3JOb2RlIiwiRnVuY3Rpb25Ob2RlIiwiU3ltYm9sTm9kZSJdLHdtPU9iamVjdChzLmEpKCJzaW1wbGlmeUNvbnN0YW50Iix4bSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5jb25maWcscD1lLm1hdGhXaXRoVHJhbnNmb3JtLG49ZS5mcmFjdGlvbixpPWUuYmlnbnVtYmVyLGE9ZS5Db25zdGFudE5vZGUsbz1lLk9wZXJhdG9yTm9kZSxtPWUuRnVuY3Rpb25Ob2RlLHM9ZS5TeW1ib2xOb2RlLHU9Z20oe0Z1bmN0aW9uTm9kZTptLE9wZXJhdG9yTm9kZTpvLFN5bWJvbE5vZGU6c30pLGg9dS5pc0NvbW11dGF0aXZlLGQ9dS5pc0Fzc29jaWF0aXZlLHk9dS5hbGxDaGlsZHJlbixnPXUuY3JlYXRlTWFrZU5vZGVGdW5jdGlvbjtmdW5jdGlvbiB2KHQscixuKXt0cnl7cmV0dXJuIHgocFt0XS5hcHBseShudWxsLHIpLG4pfWNhdGNoKGUpe3JldHVybiByPXIubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QoaWUubykoZSk/ZS52YWx1ZU9mKCk6ZX0pLHgocFt0XS5hcHBseShudWxsLHIpLG4pfX12YXIgYj10KHtGcmFjdGlvbjpmdW5jdGlvbihlKXt2YXIgdCxyPWUucyplLm47dD1yPDA/bmV3IG8oIi0iLCJ1bmFyeU1pbnVzIixbbmV3IGEoLXIpXSk6bmV3IGEocik7cmV0dXJuIDEhPT1lLmQ/bmV3IG8oIi8iLCJkaXZpZGUiLFt0LG5ldyBhKGUuZCldKTp0fSxudW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU8MD9mKG5ldyBhKC1lKSk6bmV3IGEoZSl9LEJpZ051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gZTwwP2YobmV3IGEoLWUpKTpuZXcgYShlKX0sQ29tcGxleDpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGNvbnZlcnQgQ29tcGxleCBudW1iZXIgdG8gTm9kZSIpfX0pO2Z1bmN0aW9uIGMoZSx0KXtpZih0JiYhMSE9PXQuZXhhY3RGcmFjdGlvbnMmJmlzRmluaXRlKGUpJiZuKXt2YXIgcj1uKGUpO2lmKHIudmFsdWVPZigpPT09ZSlyZXR1cm4gcn1yZXR1cm4gZX12YXIgeD10KHsic3RyaW5nLCBPYmplY3QiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIkJpZ051bWJlciI9PT1yLm51bWJlcj8odm9pZCAwPT09aSYmd2koKSxpKGUpKToiRnJhY3Rpb24iPT09ci5udW1iZXI/KHZvaWQgMD09PW4mJk5pKCksbihlKSk6YyhwYXJzZUZsb2F0KGUpLHQpfSwiRnJhY3Rpb24sIE9iamVjdCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LCJCaWdOdW1iZXIsIE9iamVjdCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LCJudW1iZXIsIE9iamVjdCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYyhlLHQpfSwiQ29tcGxleCwgT2JqZWN0IjpmdW5jdGlvbihlLHQpe3JldHVybiAwIT09ZS5pbT9lOmMoZS5yZSx0KX19KTtmdW5jdGlvbiBmKGUpe3JldHVybiBuZXcgbygiLSIsInVuYXJ5TWludXMiLFtlXSl9ZnVuY3Rpb24gdyhyLGUsbixpKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtpZihPYmplY3QoaWUudykoZSl8fE9iamVjdChpZS53KSh0KSlPYmplY3QoaWUudykoZSk/T2JqZWN0KGllLncpKHQpfHwodD1iKHQpKTplPWIoZSk7ZWxzZXt0cnl7cmV0dXJuIHYocixbZSx0XSxpKX1jYXRjaChlKXt9ZT1iKGUpLHQ9Yih0KX1yZXR1cm4gbihbZSx0XSl9KX1yZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgcj1mdW5jdGlvbiB0KGUscil7c3dpdGNoKGUudHlwZSl7Y2FzZSJTeW1ib2xOb2RlIjpyZXR1cm4gZTtjYXNlIkNvbnN0YW50Tm9kZSI6cmV0dXJuIm51bWJlciIhPXR5cGVvZiBlLnZhbHVlJiZpc05hTihlLnZhbHVlKT9lOngoZS52YWx1ZSxyKTtjYXNlIkZ1bmN0aW9uTm9kZSI6aWYocFtlLm5hbWVdJiZwW2UubmFtZV0ucmF3QXJncylyZXR1cm4gZTt2YXIgbj1bImFkZCIsIm11bHRpcGx5Il07aWYoLTE9PT1uLmluZGV4T2YoZS5uYW1lKSl7dmFyIGk9ZS5hcmdzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdChlLHIpfSk7aWYoIWkuc29tZShpZS53KSl0cnl7cmV0dXJuIHYoZS5uYW1lLGkscil9Y2F0Y2goZSl7fXJldHVybiBpPWkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QoaWUudykoZSk/ZTpiKGUpfSksbmV3IG0oZS5uYW1lLGkpfWNhc2UiT3BlcmF0b3JOb2RlIjp2YXIgYSxvLHM9ZS5mbi50b1N0cmluZygpLHU9ZyhlKTtpZihPYmplY3QoaWUuQikoZSkmJmUuaXNVbmFyeSgpKWE9W3QoZS5hcmdzWzBdLHIpXSxvPU9iamVjdChpZS53KShhWzBdKT91KGEpOnYocyxhLHIpO2Vsc2UgaWYoZChlKSlpZihhPShhPXkoZSkpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdChlLHIpfSksaChzKSl7Zm9yKHZhciBjPVtdLGY9W10sbD0wO2w8YS5sZW5ndGg7bCsrKU9iamVjdChpZS53KShhW2xdKT9mLnB1c2goYVtsXSk6Yy5wdXNoKGFbbF0pO289MTxjLmxlbmd0aD8obz13KHMsYyx1LHIpLGYudW5zaGlmdChvKSx3KHMsZix1LHIpKTp3KHMsYSx1LHIpfWVsc2Ugbz13KHMsYSx1LHIpO2Vsc2UgYT1lLmFyZ3MubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUscil9KSxvPXcocyxhLHUscik7cmV0dXJuIG87Y2FzZSJQYXJlbnRoZXNpc05vZGUiOnJldHVybiB0KGUuY29udGVudCxyKTtjYXNlIkFjY2Vzc29yTm9kZSI6Y2FzZSJBcnJheU5vZGUiOmNhc2UiQXNzaWdubWVudE5vZGUiOmNhc2UiQmxvY2tOb2RlIjpjYXNlIkZ1bmN0aW9uQXNzaWdubWVudE5vZGUiOmNhc2UiSW5kZXhOb2RlIjpjYXNlIk9iamVjdE5vZGUiOmNhc2UiUmFuZ2VOb2RlIjpjYXNlIkNvbmRpdGlvbmFsTm9kZSI6ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuaW1wbGVtZW50ZWQgbm9kZSB0eXBlIGluIHNpbXBsaWZ5Q29uc3RhbnQ6ICIuY29uY2F0KGUudHlwZSkpfX0oZSx0KTtyZXR1cm4gT2JqZWN0KGllLncpKHIpP3I6YihyKX19KSxObT1bInBhcnNlIiwiRnVuY3Rpb25Ob2RlIiwiT3BlcmF0b3JOb2RlIiwiUGFyZW50aGVzaXNOb2RlIl0sT209T2JqZWN0KHMuYSkoInJlc29sdmUiLE5tLGZ1bmN0aW9uKGUpe3ZhciBvPWUucGFyc2Uscz1lLkZ1bmN0aW9uTm9kZSx1PWUuT3BlcmF0b3JOb2RlLGM9ZS5QYXJlbnRoZXNpc05vZGU7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyKXtpZighcilyZXR1cm4gZTtpZihPYmplY3QoaWUuSikoZSkpe3ZhciBuPXJbZS5uYW1lXTtpZihPYmplY3QoaWUudykobikpcmV0dXJuIHQobixyKTtpZigibnVtYmVyIj09dHlwZW9mIG4pcmV0dXJuIG8oU3RyaW5nKG4pKX1lbHNle2lmKE9iamVjdChpZS5CKShlKSl7dmFyIGk9ZS5hcmdzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdChlLHIpfSk7cmV0dXJuIG5ldyB1KGUub3AsZS5mbixpLGUuaW1wbGljaXQpfWlmKE9iamVjdChpZS5DKShlKSlyZXR1cm4gbmV3IGModChlLmNvbnRlbnQscikpO2lmKE9iamVjdChpZS5yKShlKSl7dmFyIGE9ZS5hcmdzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdChlLHIpfSk7cmV0dXJuIG5ldyBzKGUubmFtZSxhKX19cmV0dXJuIGV9fSk7ZnVuY3Rpb24gTW0oZSl7cmV0dXJuKE1tPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9dmFyIGptPVsiY29uZmlnIiwidHlwZWQiLCJwYXJzZSIsImFkZCIsInN1YnRyYWN0IiwibXVsdGlwbHkiLCJkaXZpZGUiLCJwb3ciLCJpc1plcm8iLCJlcXVhbCIsIj9mcmFjdGlvbiIsIj9iaWdudW1iZXIiLCJtYXRoV2l0aFRyYW5zZm9ybSIsIkNvbnN0YW50Tm9kZSIsIkZ1bmN0aW9uTm9kZSIsIk9wZXJhdG9yTm9kZSIsIlBhcmVudGhlc2lzTm9kZSIsIlN5bWJvbE5vZGUiXSxFbT1PYmplY3Qocy5hKSgic2ltcGxpZnkiLGptLGZ1bmN0aW9uKGUpe3ZhciB0PWUuY29uZmlnLHI9ZS50eXBlZCxjPWUucGFyc2Usbj1lLmFkZCxpPWUuc3VidHJhY3QsYT1lLm11bHRpcGx5LG89ZS5kaXZpZGUscz1lLnBvdyx1PWUuaXNaZXJvLGw9ZS5lcXVhbCxmPWUuZnJhY3Rpb24scD1lLmJpZ251bWJlcixtPWUubWF0aFdpdGhUcmFuc2Zvcm0saD1lLkNvbnN0YW50Tm9kZSxkPWUuRnVuY3Rpb25Ob2RlLHk9ZS5PcGVyYXRvck5vZGUsZz1lLlBhcmVudGhlc2lzTm9kZSx2PWUuU3ltYm9sTm9kZSxiPXdtKHt0eXBlZDpyLGNvbmZpZzp0LG1hdGhXaXRoVHJhbnNmb3JtOm0sZnJhY3Rpb246ZixiaWdudW1iZXI6cCxDb25zdGFudE5vZGU6aCxPcGVyYXRvck5vZGU6eSxGdW5jdGlvbk5vZGU6ZCxTeW1ib2xOb2RlOnZ9KSx4PWJtKHtlcXVhbDpsLGlzWmVybzp1LGFkZDpuLHN1YnRyYWN0OmksbXVsdGlwbHk6YSxkaXZpZGU6byxwb3c6cyxDb25zdGFudE5vZGU6aCxPcGVyYXRvck5vZGU6eSxGdW5jdGlvbk5vZGU6ZCxQYXJlbnRoZXNpc05vZGU6Z30pLHc9T20oe3BhcnNlOmMsRnVuY3Rpb25Ob2RlOmQsT3BlcmF0b3JOb2RlOnksUGFyZW50aGVzaXNOb2RlOmd9KSxOPWdtKHtGdW5jdGlvbk5vZGU6ZCxPcGVyYXRvck5vZGU6eSxTeW1ib2xOb2RlOnZ9KSxPPU4uaXNDb21tdXRhdGl2ZSxNPU4uaXNBc3NvY2lhdGl2ZSxqPU4uZmxhdHRlbixFPU4udW5mbGF0dGVucixTPU4udW5mbGF0dGVubCxBPU4uY3JlYXRlTWFrZU5vZGVGdW5jdGlvbixDPXIoInNpbXBsaWZ5Iix7c3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiBDKGMoZSksQy5ydWxlcyx7fSx7fSl9LCJzdHJpbmcsIE9iamVjdCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQyhjKGUpLEMucnVsZXMsdCx7fSl9LCJzdHJpbmcsIE9iamVjdCwgT2JqZWN0IjpmdW5jdGlvbihlLHQscil7cmV0dXJuIEMoYyhlKSxDLnJ1bGVzLHQscil9LCJzdHJpbmcsIEFycmF5IjpmdW5jdGlvbihlLHQpe3JldHVybiBDKGMoZSksdCx7fSx7fSl9LCJzdHJpbmcsIEFycmF5LCBPYmplY3QiOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gQyhjKGUpLHQscix7fSl9LCJzdHJpbmcsIEFycmF5LCBPYmplY3QsIE9iamVjdCI6ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIEMoYyhlKSx0LHIsbil9LCJOb2RlLCBPYmplY3QiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEMoZSxDLnJ1bGVzLHQse30pfSwiTm9kZSwgT2JqZWN0LCBPYmplY3QiOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gQyhlLEMucnVsZXMsdCxyKX0sTm9kZTpmdW5jdGlvbihlKXtyZXR1cm4gQyhlLEMucnVsZXMse30se30pfSwiTm9kZSwgQXJyYXkiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEMoZSx0LHt9LHt9KX0sIk5vZGUsIEFycmF5LCBPYmplY3QiOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gQyhlLHQscix7fSl9LCJOb2RlLCBBcnJheSwgT2JqZWN0LCBPYmplY3QiOmZ1bmN0aW9uKGUsdCxyLG4pe3Q9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxpPXZvaWQgMCxhPU1tKG4pO3N3aXRjaChhKXtjYXNlInN0cmluZyI6dmFyIG89bi5zcGxpdCgiLT4iKTtpZigyIT09by5sZW5ndGgpdGhyb3cgU3ludGF4RXJyb3IoIkNvdWxkIG5vdCBwYXJzZSBydWxlOiAiK24pO249e2w6b1swXSxyOm9bMV19O2Nhc2Uib2JqZWN0IjppZihpPXtsOlQoYyhuLmwpKSxyOlQoYyhuLnIpKX0sbi5jb250ZXh0JiYoaS5ldmFsdWF0ZT1uLmNvbnRleHQpLG4uZXZhbHVhdGUmJihpLmV2YWx1YXRlPWMobi5ldmFsdWF0ZSkpLE0oaS5sKSl7dmFyIHM9QShpLmwpLHU9bmV3IHYoIl9wIitJKyspO2kuZXhwYW5kZWQ9e30saS5leHBhbmRlZC5sPXMoW2kubC5jbG9uZSgpLHVdKSxqKGkuZXhwYW5kZWQubCksRShpLmV4cGFuZGVkLmwpLGkuZXhwYW5kZWQucj1zKFtpLnIsdV0pfWJyZWFrO2Nhc2UiZnVuY3Rpb24iOmk9bjticmVhaztkZWZhdWx0OnRocm93IFR5cGVFcnJvcigiVW5zdXBwb3J0ZWQgdHlwZSBvZiBydWxlOiAiK2EpfXQucHVzaChpKX1yZXR1cm4gdH0odCk7Zm9yKHZhciBpPXcoZSxyKSxhPXt9LG89KGk9VChpKSkudG9TdHJpbmcoe3BhcmVudGhlc2lzOiJhbGwifSk7IWFbb107KXthW29dPSEwO2Zvcih2YXIgcz1JPTA7czx0Lmxlbmd0aDtzKyspaT0iZnVuY3Rpb24iPT10eXBlb2YgdFtzXT90W3NdKGksbik6KGooaSkscShpLHRbc10pKSxTKGkpO289aS50b1N0cmluZyh7cGFyZW50aGVzaXM6ImFsbCJ9KX1yZXR1cm4gaX19KTtmdW5jdGlvbiBUKGUpe3JldHVybiBlLnRyYW5zZm9ybShmdW5jdGlvbihlLHQscil7cmV0dXJuIE9iamVjdChpZS5DKShlKT9UKGUuY29udGVudCk6ZX0pfUMuc2ltcGxpZnlDb3JlPXgsQy5yZXNvbHZlPXc7dmFyIF89e3RydWU6ITAsZmFsc2U6ITAsZTohMCxpOiEwLEluZmluaXR5OiEwLExOMjohMCxMTjEwOiEwLExPRzJFOiEwLExPRzEwRTohMCxOYU46ITAscGhpOiEwLHBpOiEwLFNRUlQxXzI6ITAsU1FSVDI6ITAsdGF1OiEwfTtDLnJ1bGVzPVt4LHtsOiJsb2coZSkiLHI6IjEifSx7bDoibi1uMSIscjoibistbjEifSx7bDoiLShjKnYpIixyOiIoLWMpICogdiJ9LHtsOiItdiIscjoiKC0xKSAqIHYifSx7bDoibi9uMV5uMiIscjoibipuMV4tbjIifSx7bDoibi9uMSIscjoibipuMV4tMSJ9LHtsOiIobiBeIG4xKSBeIG4yIixyOiJuIF4gKG4xICogbjIpIn0se2w6Im4qbiIscjoibl4yIn0se2w6Im4gKiBuXm4xIixyOiJuXihuMSsxKSJ9LHtsOiJuXm4xICogbl5uMiIscjoibl4objErbjIpIn0se2w6Im4rbiIscjoiMipuIn0se2w6Im4rLW4iLHI6IjAifSx7bDoibjEqbjIgKyBuMiIscjoiKG4xKzEpKm4yIn0se2w6Im4xKm4zICsgbjIqbjMiLHI6IihuMStuMikqbjMifSx7bDoibjEgKyAtMSAqIChuMiArIG4zKSIscjoibjEgKyAtMSAqIG4yICsgLTEgKiBuMyJ9LGIse2w6IigtbikqbjEiLHI6Ii0obipuMSkifSx7bDoiYyt2IixyOiJ2K2MiLGNvbnRleHQ6e2FkZDp7Y29tbXV0YXRpdmU6ITF9fX0se2w6InYqYyIscjoiYyp2Iixjb250ZXh0OnttdWx0aXBseTp7Y29tbXV0YXRpdmU6ITF9fX0se2w6Im4rLW4xIixyOiJuLW4xIn0se2w6Im4qKG4xXi0xKSIscjoibi9uMSJ9LHtsOiJuKm4xXi1uMiIscjoibi9uMV5uMiJ9LHtsOiJuMV4tMSIscjoiMS9uMSJ9LHtsOiJuKihuMS9uMikiLHI6IihuKm4xKS9uMiJ9LHtsOiJuLShuMStuMikiLHI6Im4tbjEtbjIifSx7bDoiMSpuIixyOiJuIn0se2w6Im4xLyhuMi9uMykiLHI6IihuMSpuMykvbjIifV07dmFyIEk9MDt2YXIgcT1yKCJhcHBseVJ1bGUiLHsiTm9kZSwgT2JqZWN0IjpmdW5jdGlvbihlLHQpe3ZhciByPWU7aWYociBpbnN0YW5jZW9mIHl8fHIgaW5zdGFuY2VvZiBkKXtpZihyLmFyZ3MpZm9yKHZhciBuPTA7bjxyLmFyZ3MubGVuZ3RoO24rKylyLmFyZ3Nbbl09cShyLmFyZ3Nbbl0sdCl9ZWxzZSByIGluc3RhbmNlb2YgZyYmci5jb250ZW50JiYoci5jb250ZW50PXEoci5jb250ZW50LHQpKTt2YXIgaT10LnIsYT16KHQubCxyKVswXTtpZighYSYmdC5leHBhbmRlZCYmKGk9dC5leHBhbmRlZC5yLGE9eih0LmV4cGFuZGVkLmwscilbMF0pLGEpe3ZhciBvPXIuaW1wbGljaXQ7cj1pLmNsb25lKCksbyYmImltcGxpY2l0ImluIGkmJihyLmltcGxpY2l0PSEwKSxyPXIudHJhbnNmb3JtKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzU3ltYm9sTm9kZSYmT2JqZWN0KGFlLmYpKGEucGxhY2Vob2xkZXJzLGUubmFtZSk/YS5wbGFjZWhvbGRlcnNbZS5uYW1lXS5jbG9uZSgpOmV9KX1yZXR1cm4gcn19KTtmdW5jdGlvbiBCKGUsdCl7dmFyIHI9e3BsYWNlaG9sZGVyczp7fX07aWYoIWUucGxhY2Vob2xkZXJzJiYhdC5wbGFjZWhvbGRlcnMpcmV0dXJuIHI7aWYoIWUucGxhY2Vob2xkZXJzKXJldHVybiB0O2lmKCF0LnBsYWNlaG9sZGVycylyZXR1cm4gZTtmb3IodmFyIG4gaW4gZS5wbGFjZWhvbGRlcnMpaWYoci5wbGFjZWhvbGRlcnNbbl09ZS5wbGFjZWhvbGRlcnNbbl0sT2JqZWN0KGFlLmYpKHQucGxhY2Vob2xkZXJzLG4pJiYhRChlLnBsYWNlaG9sZGVyc1tuXSx0LnBsYWNlaG9sZGVyc1tuXSkpcmV0dXJuIG51bGw7Zm9yKHZhciBpIGluIHQucGxhY2Vob2xkZXJzKXIucGxhY2Vob2xkZXJzW2ldPXQucGxhY2Vob2xkZXJzW2ldO3JldHVybiByfWZ1bmN0aW9uIGsoZSx0KXt2YXIgcixuPVtdO2lmKDA9PT1lLmxlbmd0aHx8MD09PXQubGVuZ3RoKXJldHVybiBuO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWZvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKShyPUIoZVtpXSx0W2FdKSkmJm4ucHVzaChyKTtyZXR1cm4gbn1mdW5jdGlvbiB6KGUsdCxyKXt2YXIgbj1be3BsYWNlaG9sZGVyczp7fX1dO2lmKGUgaW5zdGFuY2VvZiB5JiZ0IGluc3RhbmNlb2YgeXx8ZSBpbnN0YW5jZW9mIGQmJnQgaW5zdGFuY2VvZiBkKXtpZihlIGluc3RhbmNlb2YgeSl7aWYoZS5vcCE9PXQub3B8fGUuZm4hPT10LmZuKXJldHVybltdfWVsc2UgaWYoZSBpbnN0YW5jZW9mIGQmJmUubmFtZSE9PXQubmFtZSlyZXR1cm5bXTtpZigoMSE9PXQuYXJncy5sZW5ndGh8fDEhPT1lLmFyZ3MubGVuZ3RoKSYmTSh0KSYmIXIpe2lmKDI8PXQuYXJncy5sZW5ndGgmJjI9PT1lLmFyZ3MubGVuZ3RoKXtmb3IodmFyIGk9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGk9W10sYT1BKGUpO2lmKE8oZSx0KSlmb3IodmFyIG89MDtvPGUuYXJncy5sZW5ndGg7bysrKShuPWUuYXJncy5zbGljZSgwKSkuc3BsaWNlKG8sMSkscj0xPT09bi5sZW5ndGg/blswXTphKG4pLGkucHVzaChhKFtlLmFyZ3Nbb10scl0pKTtlbHNlIHI9MT09PShuPWUuYXJncy5zbGljZSgxKSkubGVuZ3RoP25bMF06YShuKSxpLnB1c2goYShbZS5hcmdzWzBdLHJdKSk7cmV0dXJuIGl9KHQsZS5jb250ZXh0KSxhPVtdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9eihlLGlbb10sITApO2E9YS5jb25jYXQocyl9cmV0dXJuIGF9aWYoMjxlLmFyZ3MubGVuZ3RoKXRocm93IEVycm9yKCJVbmV4cGVjdGVkIG5vbi1iaW5hcnkgYXNzb2NpYXRpdmUgZnVuY3Rpb246ICIrZS50b1N0cmluZygpKTtyZXR1cm5bXX1mb3IodmFyIHU9W10sYz0wO2M8ZS5hcmdzLmxlbmd0aDtjKyspe3ZhciBmPXooZS5hcmdzW2NdLHQuYXJnc1tjXSk7aWYoMD09PWYubGVuZ3RoKXJldHVybltdO3UucHVzaChmKX1uPWZ1bmN0aW9uKGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gZTtmb3IodmFyIHQ9ZS5yZWR1Y2Uoaykscj1bXSxuPXt9LGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9SlNPTi5zdHJpbmdpZnkodFtpXSk7blthXXx8KG5bYV09ITAsci5wdXNoKHRbaV0pKX1yZXR1cm4gcn0odSl9ZWxzZSBpZihlIGluc3RhbmNlb2Ygdil7aWYoMD09PWUubmFtZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJTeW1ib2wgaW4gcnVsZSBoYXMgMCBsZW5ndGguLi4hPyIpO2lmKF9bZS5uYW1lXSl7aWYoZS5uYW1lIT09dC5uYW1lKXJldHVybltdfWVsc2UgaWYoIm4iPT09ZS5uYW1lWzBdfHwiX3AiPT09ZS5uYW1lLnN1YnN0cmluZygwLDIpKW5bMF0ucGxhY2Vob2xkZXJzW2UubmFtZV09dDtlbHNlIGlmKCJ2Ij09PWUubmFtZVswXSl7aWYoT2JqZWN0KGllLmwpKHQpKXJldHVybltdO25bMF0ucGxhY2Vob2xkZXJzW2UubmFtZV09dH1lbHNle2lmKCJjIiE9PWUubmFtZVswXSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3ltYm9sIGluIHJ1bGU6ICIrZS5uYW1lKTtpZighKHQgaW5zdGFuY2VvZiBoKSlyZXR1cm5bXTtuWzBdLnBsYWNlaG9sZGVyc1tlLm5hbWVdPXR9fWVsc2V7aWYoIShlIGluc3RhbmNlb2YgaCkpcmV0dXJuW107aWYoIWwoZS52YWx1ZSx0LnZhbHVlKSlyZXR1cm5bXX1yZXR1cm4gbn1mdW5jdGlvbiBEKGUsdCl7aWYoZSBpbnN0YW5jZW9mIGgmJnQgaW5zdGFuY2VvZiBoKXtpZighbChlLnZhbHVlLHQudmFsdWUpKXJldHVybn1lbHNlIGlmKGUgaW5zdGFuY2VvZiB2JiZ0IGluc3RhbmNlb2Ygdil7aWYoZS5uYW1lIT09dC5uYW1lKXJldHVybn1lbHNle2lmKCEoZSBpbnN0YW5jZW9mIHkmJnQgaW5zdGFuY2VvZiB5fHxlIGluc3RhbmNlb2YgZCYmdCBpbnN0YW5jZW9mIGQpKXJldHVybjtpZihlIGluc3RhbmNlb2YgeSl7aWYoZS5vcCE9PXQub3B8fGUuZm4hPT10LmZuKXJldHVybn1lbHNlIGlmKGUgaW5zdGFuY2VvZiBkJiZlLm5hbWUhPT10Lm5hbWUpcmV0dXJuO2lmKGUuYXJncy5sZW5ndGghPT10LmFyZ3MubGVuZ3RoKXJldHVybjtmb3IodmFyIHI9MDtyPGUuYXJncy5sZW5ndGg7cisrKWlmKCFEKGUuYXJnc1tyXSx0LmFyZ3Nbcl0pKXJldHVybn1yZXR1cm4gMX1yZXR1cm4gQ30pLFNtPVsidHlwZWQiLCJjb25maWciLCJwYXJzZSIsInNpbXBsaWZ5IiwiZXF1YWwiLCJpc1plcm8iLCJudW1lcmljIiwiQ29uc3RhbnROb2RlIiwiRnVuY3Rpb25Ob2RlIiwiT3BlcmF0b3JOb2RlIiwiUGFyZW50aGVzaXNOb2RlIiwiU3ltYm9sTm9kZSJdLEFtPU9iamVjdChzLmEpKCJkZXJpdmF0aXZlIixTbSxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5jb25maWcsbj1lLnBhcnNlLGE9ZS5zaW1wbGlmeSxsPWUuZXF1YWwscD1lLmlzWmVybyxpPWUubnVtZXJpYyxvPWUuQ29uc3RhbnROb2RlLG09ZS5GdW5jdGlvbk5vZGUsaD1lLk9wZXJhdG9yTm9kZSxzPWUuUGFyZW50aGVzaXNOb2RlLGY9ZS5TeW1ib2xOb2RlLHU9dCgiZGVyaXZhdGl2ZSIseyJOb2RlLCBTeW1ib2xOb2RlLCBPYmplY3QiOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj17fTtkKG4sZSx0Lm5hbWUpO3ZhciBpPXkoZSxuKTtyZXR1cm4gci5zaW1wbGlmeT9hKGkpOml9LCJOb2RlLCBTeW1ib2xOb2RlIjpmdW5jdGlvbihlLHQpe3JldHVybiB1KGUsdCx7c2ltcGxpZnk6ITB9KX0sInN0cmluZywgU3ltYm9sTm9kZSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShuKGUpLHQpfSwic3RyaW5nLCBTeW1ib2xOb2RlLCBPYmplY3QiOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdShuKGUpLHQscil9LCJzdHJpbmcsIHN0cmluZyI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShuKGUpLG4odCkpfSwic3RyaW5nLCBzdHJpbmcsIE9iamVjdCI6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB1KG4oZSksbih0KSxyKX0sIk5vZGUsIHN0cmluZyI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLG4odCkpfSwiTm9kZSwgc3RyaW5nLCBPYmplY3QiOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdShlLG4odCkscil9fSk7dS5fc2ltcGxpZnk9ITAsdS50b1RleD1mdW5jdGlvbihlKXtyZXR1cm4gYy5hcHBseShudWxsLGUuYXJncyl9O3ZhciBjPXQoIl9kZXJpdlRleCIseyJOb2RlLCBTeW1ib2xOb2RlIjpmdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QoaWUubCkoZSkmJiJzdHJpbmciPT09T2JqZWN0KGllLk0pKGUudmFsdWUpP2MobihlLnZhbHVlKS50b1N0cmluZygpLHQudG9TdHJpbmcoKSwxKTpjKGUudG9TdHJpbmcoKSx0LnRvU3RyaW5nKCksMSl9LCJOb2RlLCBDb25zdGFudE5vZGUiOmZ1bmN0aW9uKGUsdCl7aWYoInN0cmluZyI9PT1PYmplY3QoaWUuTSkodC52YWx1ZSkpcmV0dXJuIGMoZSxuKHQudmFsdWUpKTt0aHJvdyBuZXcgRXJyb3IoIlRoZSBzZWNvbmQgcGFyYW1ldGVyIHRvICdkZXJpdmF0aXZlJyBpcyBhIG5vbi1zdHJpbmcgY29uc3RhbnQiKX0sIk5vZGUsIFN5bWJvbE5vZGUsIENvbnN0YW50Tm9kZSI6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBjKGUudG9TdHJpbmcoKSx0Lm5hbWUsci52YWx1ZSl9LCJzdHJpbmcsIHN0cmluZywgbnVtYmVyIjpmdW5jdGlvbihlLHQscil7cmV0dXJuKDE9PT1yPyJ7ZFxcb3ZlciBkIit0KyJ9Ijoie2ReeyIrcisifVxcb3ZlciBkIit0KyJeeyIrcisifX0iKSsiXFxsZWZ0WyIuY29uY2F0KGUsIlxccmlnaHRdIil9fSksZD10KCJjb25zdFRhZyIseyJPYmplY3QsIENvbnN0YW50Tm9kZSwgc3RyaW5nIjpmdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPSEwfSwiT2JqZWN0LCBTeW1ib2xOb2RlLCBzdHJpbmciOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdC5uYW1lIT09ciYmKGVbdF09ITApfSwiT2JqZWN0LCBQYXJlbnRoZXNpc05vZGUsIHN0cmluZyI6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBkKGUsdC5jb250ZW50LHIpfSwiT2JqZWN0LCBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLCBzdHJpbmciOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMT09PXQucGFyYW1zLmluZGV4T2Yocik/ZVt0XT0hMDpkKGUsdC5leHByLHIpfSwiT2JqZWN0LCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGUsIHN0cmluZyI6ZnVuY3Rpb24oZSx0LHIpe2lmKDA8dC5hcmdzLmxlbmd0aCl7Zm9yKHZhciBuPWQoZSx0LmFyZ3NbMF0sciksaT0xO2k8dC5hcmdzLmxlbmd0aDsrK2kpbj1kKGUsdC5hcmdzW2ldLHIpJiZuO2lmKG4pcmV0dXJuIGVbdF09ITB9cmV0dXJuITF9fSkseT10KCJfZGVyaXZhdGl2ZSIseyJDb25zdGFudE5vZGUsIE9iamVjdCI6ZnVuY3Rpb24oKXtyZXR1cm4gZygwKX0sIlN5bWJvbE5vZGUsIE9iamVjdCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwIT09dFtlXT9nKDApOmcoMSl9LCJQYXJlbnRoZXNpc05vZGUsIE9iamVjdCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IHMoeShlLmNvbnRlbnQsdCkpfSwiRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSwgT2JqZWN0IjpmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDAhPT10W2VdP2coMCk6eShlLmV4cHIsdCl9LCJGdW5jdGlvbk5vZGUsIE9iamVjdCI6ZnVuY3Rpb24oZSx0KXtpZigxIT09ZS5hcmdzLmxlbmd0aCYmZnVuY3Rpb24oZSl7aWYoKCJsb2ciPT09ZS5uYW1lfHwibnRoUm9vdCI9PT1lLm5hbWV8fCJwb3ciPT09ZS5uYW1lKSYmMj09PWUuYXJncy5sZW5ndGgpcmV0dXJuO2Zvcih2YXIgdD0wO3Q8ZS5hcmdzLmxlbmd0aDsrK3QpZS5hcmdzW3RdPWcoMCk7dGhyb3cgZS5jb21waWxlKCkuZXZhbHVhdGUoKSxuZXcgRXJyb3IoIkV4cGVjdGVkIFR5cGVFcnJvciwgYnV0IG5vbmUgZm91bmQiKX0oZSksdm9pZCAwIT09dFtlXSlyZXR1cm4gZygwKTt2YXIgcixuLGksYSxvPWUuYXJnc1swXSxzPSExLHU9ITE7c3dpdGNoKGUubmFtZSl7Y2FzZSJjYnJ0IjpzPSEwLG49bmV3IGgoIioiLCJtdWx0aXBseSIsW2coMyksbmV3IGgoIl4iLCJwb3ciLFtvLG5ldyBoKCIvIiwiZGl2aWRlIixbZygyKSxnKDMpXSldKV0pO2JyZWFrO2Nhc2Uic3FydCI6Y2FzZSJudGhSb290IjppZigxPT09ZS5hcmdzLmxlbmd0aClzPSEwLG49bmV3IGgoIioiLCJtdWx0aXBseSIsW2coMiksbmV3IG0oInNxcnQiLFtvXSldKTtlbHNlIGlmKDI9PT1lLmFyZ3MubGVuZ3RoKXJldHVybiB0W3I9bmV3IGgoIi8iLCJkaXZpZGUiLFtnKDEpLGUuYXJnc1sxXV0pXT10W2UuYXJnc1sxXV0seShuZXcgaCgiXiIsInBvdyIsW28scl0pLHQpO2JyZWFrO2Nhc2UibG9nMTAiOnI9ZygxMCk7Y2FzZSJsb2ciOmlmKHJ8fDEhPT1lLmFyZ3MubGVuZ3RoKXtpZigxPT09ZS5hcmdzLmxlbmd0aCYmcnx8Mj09PWUuYXJncy5sZW5ndGgmJnZvaWQgMCE9PXRbZS5hcmdzWzFdXSluPW5ldyBoKCIqIiwibXVsdGlwbHkiLFtvLmNsb25lKCksbmV3IG0oImxvZyIsW3J8fGUuYXJnc1sxXV0pXSkscz0hMDtlbHNlIGlmKDI9PT1lLmFyZ3MubGVuZ3RoKXJldHVybiB5KG5ldyBoKCIvIiwiZGl2aWRlIixbbmV3IG0oImxvZyIsW29dKSxuZXcgbSgibG9nIixbZS5hcmdzWzFdXSldKSx0KX1lbHNlIG49by5jbG9uZSgpLHM9ITA7YnJlYWs7Y2FzZSJwb3ciOnJldHVybiB0W3JdPXRbZS5hcmdzWzFdXSx5KG5ldyBoKCJeIiwicG93IixbbyxlLmFyZ3NbMV1dKSx0KTtjYXNlImV4cCI6bj1uZXcgbSgiZXhwIixbby5jbG9uZSgpXSk7YnJlYWs7Y2FzZSJzaW4iOm49bmV3IG0oImNvcyIsW28uY2xvbmUoKV0pO2JyZWFrO2Nhc2UiY29zIjpuPW5ldyBoKCItIiwidW5hcnlNaW51cyIsW25ldyBtKCJzaW4iLFtvLmNsb25lKCldKV0pO2JyZWFrO2Nhc2UidGFuIjpuPW5ldyBoKCJeIiwicG93IixbbmV3IG0oInNlYyIsW28uY2xvbmUoKV0pLGcoMildKTticmVhaztjYXNlInNlYyI6bj1uZXcgaCgiKiIsIm11bHRpcGx5IixbZSxuZXcgbSgidGFuIixbby5jbG9uZSgpXSldKTticmVhaztjYXNlImNzYyI6dT0hMCxuPW5ldyBoKCIqIiwibXVsdGlwbHkiLFtlLG5ldyBtKCJjb3QiLFtvLmNsb25lKCldKV0pO2JyZWFrO2Nhc2UiY290Ijp1PSEwLG49bmV3IGgoIl4iLCJwb3ciLFtuZXcgbSgiY3NjIixbby5jbG9uZSgpXSksZygyKV0pO2JyZWFrO2Nhc2UiYXNpbiI6cz0hMCxuPW5ldyBtKCJzcXJ0IixbbmV3IGgoIi0iLCJzdWJ0cmFjdCIsW2coMSksbmV3IGgoIl4iLCJwb3ciLFtvLmNsb25lKCksZygyKV0pXSldKTticmVhaztjYXNlImFjb3MiOnU9cz0hMCxuPW5ldyBtKCJzcXJ0IixbbmV3IGgoIi0iLCJzdWJ0cmFjdCIsW2coMSksbmV3IGgoIl4iLCJwb3ciLFtvLmNsb25lKCksZygyKV0pXSldKTticmVhaztjYXNlImF0YW4iOnM9ITAsbj1uZXcgaCgiKyIsImFkZCIsW25ldyBoKCJeIiwicG93Iixbby5jbG9uZSgpLGcoMildKSxnKDEpXSk7YnJlYWs7Y2FzZSJhc2VjIjpzPSEwLG49bmV3IGgoIioiLCJtdWx0aXBseSIsW25ldyBtKCJhYnMiLFtvLmNsb25lKCldKSxuZXcgbSgic3FydCIsW25ldyBoKCItIiwic3VidHJhY3QiLFtuZXcgaCgiXiIsInBvdyIsW28uY2xvbmUoKSxnKDIpXSksZygxKV0pXSldKTticmVhaztjYXNlImFjc2MiOnU9cz0hMCxuPW5ldyBoKCIqIiwibXVsdGlwbHkiLFtuZXcgbSgiYWJzIixbby5jbG9uZSgpXSksbmV3IG0oInNxcnQiLFtuZXcgaCgiLSIsInN1YnRyYWN0IixbbmV3IGgoIl4iLCJwb3ciLFtvLmNsb25lKCksZygyKV0pLGcoMSldKV0pXSk7YnJlYWs7Y2FzZSJhY290Ijp1PXM9ITAsbj1uZXcgaCgiKyIsImFkZCIsW25ldyBoKCJeIiwicG93Iixbby5jbG9uZSgpLGcoMildKSxnKDEpXSk7YnJlYWs7Y2FzZSJzaW5oIjpuPW5ldyBtKCJjb3NoIixbby5jbG9uZSgpXSk7YnJlYWs7Y2FzZSJjb3NoIjpuPW5ldyBtKCJzaW5oIixbby5jbG9uZSgpXSk7YnJlYWs7Y2FzZSJ0YW5oIjpuPW5ldyBoKCJeIiwicG93IixbbmV3IG0oInNlY2giLFtvLmNsb25lKCldKSxnKDIpXSk7YnJlYWs7Y2FzZSJzZWNoIjp1PSEwLG49bmV3IGgoIioiLCJtdWx0aXBseSIsW2UsbmV3IG0oInRhbmgiLFtvLmNsb25lKCldKV0pO2JyZWFrO2Nhc2UiY3NjaCI6dT0hMCxuPW5ldyBoKCIqIiwibXVsdGlwbHkiLFtlLG5ldyBtKCJjb3RoIixbby5jbG9uZSgpXSldKTticmVhaztjYXNlImNvdGgiOnU9ITAsbj1uZXcgaCgiXiIsInBvdyIsW25ldyBtKCJjc2NoIixbby5jbG9uZSgpXSksZygyKV0pO2JyZWFrO2Nhc2UiYXNpbmgiOnM9ITAsbj1uZXcgbSgic3FydCIsW25ldyBoKCIrIiwiYWRkIixbbmV3IGgoIl4iLCJwb3ciLFtvLmNsb25lKCksZygyKV0pLGcoMSldKV0pO2JyZWFrO2Nhc2UiYWNvc2giOnM9ITAsbj1uZXcgbSgic3FydCIsW25ldyBoKCItIiwic3VidHJhY3QiLFtuZXcgaCgiXiIsInBvdyIsW28uY2xvbmUoKSxnKDIpXSksZygxKV0pXSk7YnJlYWs7Y2FzZSJhdGFuaCI6cz0hMCxuPW5ldyBoKCItIiwic3VidHJhY3QiLFtnKDEpLG5ldyBoKCJeIiwicG93Iixbby5jbG9uZSgpLGcoMildKV0pO2JyZWFrO2Nhc2UiYXNlY2giOnU9cz0hMCxuPW5ldyBoKCIqIiwibXVsdGlwbHkiLFtvLmNsb25lKCksbmV3IG0oInNxcnQiLFtuZXcgaCgiLSIsInN1YnRyYWN0IixbZygxKSxuZXcgaCgiXiIsInBvdyIsW28uY2xvbmUoKSxnKDIpXSldKV0pXSk7YnJlYWs7Y2FzZSJhY3NjaCI6dT1zPSEwLG49bmV3IGgoIioiLCJtdWx0aXBseSIsW25ldyBtKCJhYnMiLFtvLmNsb25lKCldKSxuZXcgbSgic3FydCIsW25ldyBoKCIrIiwiYWRkIixbbmV3IGgoIl4iLCJwb3ciLFtvLmNsb25lKCksZygyKV0pLGcoMSldKV0pXSk7YnJlYWs7Y2FzZSJhY290aCI6dT1zPSEwLG49bmV3IGgoIi0iLCJzdWJ0cmFjdCIsW2coMSksbmV3IGgoIl4iLCJwb3ciLFtvLmNsb25lKCksZygyKV0pXSk7YnJlYWs7Y2FzZSJhYnMiOm49bmV3IGgoIi8iLCJkaXZpZGUiLFtuZXcgbShuZXcgZigiYWJzIiksW28uY2xvbmUoKV0pLG8uY2xvbmUoKV0pO2JyZWFrO2Nhc2UiZ2FtbWEiOmRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiAiJytlLm5hbWUrJyIgaXMgbm90IHN1cHBvcnRlZCBieSBkZXJpdmF0aXZlLCBvciBhIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgaXMgcGFzc2VkJyl9YT1zPyhpPSIvIiwiZGl2aWRlIik6KGk9IioiLCJtdWx0aXBseSIpO3ZhciBjPXkobyx0KTtyZXR1cm4gdSYmKGM9bmV3IGgoIi0iLCJ1bmFyeU1pbnVzIixbY10pKSxuZXcgaChpLGEsW2Msbl0pfSwiT3BlcmF0b3JOb2RlLCBPYmplY3QiOmZ1bmN0aW9uKGUscil7aWYodm9pZCAwIT09cltlXSlyZXR1cm4gZygwKTtpZigiKyI9PT1lLm9wKXJldHVybiBuZXcgaChlLm9wLGUuZm4sZS5hcmdzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4geShlLHIpfSkpO2lmKCItIj09PWUub3Ape2lmKGUuaXNVbmFyeSgpKXJldHVybiBuZXcgaChlLm9wLGUuZm4sW3koZS5hcmdzWzBdLHIpXSk7aWYoZS5pc0JpbmFyeSgpKXJldHVybiBuZXcgaChlLm9wLGUuZm4sW3koZS5hcmdzWzBdLHIpLHkoZS5hcmdzWzFdLHIpXSl9aWYoIioiPT09ZS5vcCl7dmFyIHQ9ZS5hcmdzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09cltlXX0pO2lmKDA8dC5sZW5ndGgpe3ZhciBuPWUuYXJncy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PXJbZV19KSxpPTE9PT1uLmxlbmd0aD9uWzBdOm5ldyBoKCIqIiwibXVsdGlwbHkiLG4pLGE9dC5jb25jYXQoeShpLHIpKTtyZXR1cm4gbmV3IGgoIioiLCJtdWx0aXBseSIsYSl9cmV0dXJuIG5ldyBoKCIrIiwiYWRkIixlLmFyZ3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaCgiKiIsIm11bHRpcGx5IixlLmFyZ3MubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dD95KGUscik6ZS5jbG9uZSgpfSkpfSkpfWlmKCIvIj09PWUub3AmJmUuaXNCaW5hcnkoKSl7dmFyIG89ZS5hcmdzWzBdLHM9ZS5hcmdzWzFdO3JldHVybiB2b2lkIDAhPT1yW3NdP25ldyBoKCIvIiwiZGl2aWRlIixbeShvLHIpLHNdKTp2b2lkIDAhPT1yW29dP25ldyBoKCIqIiwibXVsdGlwbHkiLFtuZXcgaCgiLSIsInVuYXJ5TWludXMiLFtvXSksbmV3IGgoIi8iLCJkaXZpZGUiLFt5KHMsciksbmV3IGgoIl4iLCJwb3ciLFtzLmNsb25lKCksZygyKV0pXSldKTpuZXcgaCgiLyIsImRpdmlkZSIsW25ldyBoKCItIiwic3VidHJhY3QiLFtuZXcgaCgiKiIsIm11bHRpcGx5IixbeShvLHIpLHMuY2xvbmUoKV0pLG5ldyBoKCIqIiwibXVsdGlwbHkiLFtvLmNsb25lKCkseShzLHIpXSldKSxuZXcgaCgiXiIsInBvdyIsW3MuY2xvbmUoKSxnKDIpXSldKX1pZigiXiI9PT1lLm9wJiZlLmlzQmluYXJ5KCkpe3ZhciB1PWUuYXJnc1swXSxjPWUuYXJnc1sxXTtpZih2b2lkIDAhPT1yW3VdKXJldHVybiBPYmplY3QoaWUubCkodSkmJihwKHUudmFsdWUpfHxsKHUudmFsdWUsMSkpP2coMCk6bmV3IGgoIioiLCJtdWx0aXBseSIsW2UsbmV3IGgoIioiLCJtdWx0aXBseSIsW25ldyBtKCJsb2ciLFt1LmNsb25lKCldKSx5KGMuY2xvbmUoKSxyKV0pXSk7aWYodm9pZCAwPT09cltjXSlyZXR1cm4gbmV3IGgoIioiLCJtdWx0aXBseSIsW25ldyBoKCJeIiwicG93IixbdS5jbG9uZSgpLGMuY2xvbmUoKV0pLG5ldyBoKCIrIiwiYWRkIixbbmV3IGgoIioiLCJtdWx0aXBseSIsW3kodSxyKSxuZXcgaCgiLyIsImRpdmlkZSIsW2MuY2xvbmUoKSx1LmNsb25lKCldKV0pLG5ldyBoKCIqIiwibXVsdGlwbHkiLFt5KGMsciksbmV3IG0oImxvZyIsW3UuY2xvbmUoKV0pXSldKV0pO2lmKE9iamVjdChpZS5sKShjKSl7aWYocChjLnZhbHVlKSlyZXR1cm4gZygwKTtpZihsKGMudmFsdWUsMSkpcmV0dXJuIHkodSxyKX12YXIgZj1uZXcgaCgiXiIsInBvdyIsW3UuY2xvbmUoKSxuZXcgaCgiLSIsInN1YnRyYWN0IixbYyxnKDEpXSldKTtyZXR1cm4gbmV3IGgoIioiLCJtdWx0aXBseSIsW2MuY2xvbmUoKSxuZXcgaCgiKiIsIm11bHRpcGx5IixbeSh1LHIpLGZdKV0pfXRocm93IG5ldyBFcnJvcignT3BlcmF0b3IgIicrZS5vcCsnIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGRlcml2YXRpdmUsIG9yIGEgd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBpcyBwYXNzZWQnKX19KTtmdW5jdGlvbiBnKGUsdCl7cmV0dXJuIG5ldyBvKGkoZSx0fHxyLm51bWJlcikpfXJldHVybiB1fSksQ209InJhdGlvbmFsaXplIixUbT1bImNvbmZpZyIsInR5cGVkIiwiZXF1YWwiLCJpc1plcm8iLCJhZGQiLCJzdWJ0cmFjdCIsIm11bHRpcGx5IiwiZGl2aWRlIiwicG93IiwicGFyc2UiLCJzaW1wbGlmeSIsIj9iaWdudW1iZXIiLCI/ZnJhY3Rpb24iLCJtYXRoV2l0aFRyYW5zZm9ybSIsIkNvbnN0YW50Tm9kZSIsIk9wZXJhdG9yTm9kZSIsIkZ1bmN0aW9uTm9kZSIsIlN5bWJvbE5vZGUiLCJQYXJlbnRoZXNpc05vZGUiXSxfbT1PYmplY3Qocy5hKShDbSxUbSxmdW5jdGlvbihlKXt2YXIgdD1lLmNvbmZpZyxyPWUudHlwZWQsbj1lLmVxdWFsLGk9ZS5pc1plcm8sYT1lLmFkZCxvPWUuc3VidHJhY3Qscz1lLm11bHRpcGx5LHU9ZS5kaXZpZGUsYz1lLnBvdyxmPWUucGFyc2UsZz1lLnNpbXBsaWZ5LGw9ZS5mcmFjdGlvbixwPWUuYmlnbnVtYmVyLG09ZS5tYXRoV2l0aFRyYW5zZm9ybSx2PWUuQ29uc3RhbnROb2RlLGI9ZS5PcGVyYXRvck5vZGUsaD1lLkZ1bmN0aW9uTm9kZSxkPWUuU3ltYm9sTm9kZSx5PWUuUGFyZW50aGVzaXNOb2RlLHg9d20oe3R5cGVkOnIsY29uZmlnOnQsbWF0aFdpdGhUcmFuc2Zvcm06bSxmcmFjdGlvbjpsLGJpZ251bWJlcjpwLENvbnN0YW50Tm9kZTp2LE9wZXJhdG9yTm9kZTpiLEZ1bmN0aW9uTm9kZTpoLFN5bWJvbE5vZGU6ZH0pLHc9Ym0oe2VxdWFsOm4saXNaZXJvOmksYWRkOmEsc3VidHJhY3Q6byxtdWx0aXBseTpzLGRpdmlkZTp1LHBvdzpjLENvbnN0YW50Tm9kZTp2LE9wZXJhdG9yTm9kZTpiLEZ1bmN0aW9uTm9kZTpoLFBhcmVudGhlc2lzTm9kZTp5fSksTj1yKENtLHtzdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIE4oZihlKSx7fSwhMSl9LCJzdHJpbmcsIGJvb2xlYW4iOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIE4oZihlKSx7fSx0KX0sInN0cmluZywgT2JqZWN0IjpmdW5jdGlvbihlLHQpe3JldHVybiBOKGYoZSksdCwhMSl9LCJzdHJpbmcsIE9iamVjdCwgYm9vbGVhbiI6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBOKGYoZSksdCxyKX0sTm9kZTpmdW5jdGlvbihlKXtyZXR1cm4gTihlLHt9LCExKX0sIk5vZGUsIGJvb2xlYW4iOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIE4oZSx7fSx0KX0sIk5vZGUsIE9iamVjdCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTihlLHQsITEpfSwiTm9kZSwgT2JqZWN0LCBib29sZWFuIjpmdW5jdGlvbihlLHQscil7dmFyIG4saSxhLG8scz0oKG89e30pLmZpcnN0UnVsZXM9KG49W3cse2w6Im4rbiIscjoiMipuIn0se2w6Im4rLW4iLHI6IjAifSx4LHtsOiJuKihuMV4tMSkiLHI6Im4vbjEifSx7bDoibipuMV4tbjIiLHI6Im4vbjFebjIifSx7bDoibjFeLTEiLHI6IjEvbjEifSx7bDoibioobjEvbjIpIixyOiIobipuMSkvbjIifSx7bDoiMSpuIixyOiJuIn1dKS5jb25jYXQoaT1be2w6IigtbjEpLygtbjIpIixyOiJuMS9uMiJ9LHtsOiIoLW4xKSooLW4yKSIscjoibjEqbjIifSx7bDoibjEtLW4yIixyOiJuMStuMiJ9LHtsOiJuMS1uMiIscjoibjErKC1uMikifSx7bDoiKG4xK24yKSpuMyIscjoiKG4xKm4zICsgbjIqbjMpIn0se2w6Im4xKihuMituMykiLHI6IihuMSpuMituMSpuMykifSx7bDoiYzEqbiArIGMyKm4iLHI6IihjMStjMikqbiJ9LHtsOiJjMSpuICsgbiIscjoiKGMxKzEpKm4ifSx7bDoiYzEqbiAtIGMyKm4iLHI6IihjMS1jMikqbiJ9LHtsOiJjMSpuIC0gbiIscjoiKGMxLTEpKm4ifSx7bDoidi9jIixyOiIoMS9jKSp2In0se2w6InYvLWMiLHI6Ii0oMS9jKSp2In0se2w6Ii12Ki1jIixyOiJjKnYifSx7bDoiLXYqYyIscjoiLWMqdiJ9LHtsOiJ2Ki1jIixyOiItYyp2In0se2w6InYqYyIscjoiYyp2In0se2w6Ii0oLW4xKm4yKSIscjoiKG4xKm4yKSJ9LHtsOiItKG4xKm4yKSIscjoiKC1uMSpuMikifSx7bDoiLSgtbjErbjIpIixyOiIobjEtbjIpIn0se2w6Ii0objErbjIpIixyOiIoLW4xLW4yKSJ9LHtsOiIobjFebjIpXm4zIixyOiIobjFeKG4yKm4zKSkifSx7bDoiLSgtbjEvbjIpIixyOiIobjEvbjIpIn0se2w6Ii0objEvbjIpIixyOiIoLW4xL24yKSJ9XSxhPVt7bDoiKG4xLyhuMi9uMykpIixyOiIoKG4xKm4zKS9uMikifSx7bDoiKG4xL24yL24zKSIscjoiKG4xLyhuMipuMykpIn1dKSxvLmRpc3RyRGl2UnVsZXM9W3tsOiIobjEvbjIgKyBuMy9uNCkiLHI6IigobjEqbjQgKyBuMypuMikvKG4yKm40KSkifSx7bDoiKG4xL24yICsgbjMpIixyOiIoKG4xICsgbjMqbjIpL24yKSJ9LHtsOiIobjEgKyBuMi9uMykiLHI6IigobjEqbjMgKyBuMikvbjMpIn1dLG8uc3VjRGl2UnVsZXM9YSxvLmZpcnN0UnVsZXNBZ2Fpbj1uLmNvbmNhdChpKSxvLmZpbmFsUnVsZXM9W3cse2w6Im4qLW4iLHI6Ii1uXjIifSx7bDoibipuIixyOiJuXjIifSx4LHtsOiJuKi1uXm4xIixyOiItbl4objErMSkifSx7bDoibipuXm4xIixyOiJuXihuMSsxKSJ9LHtsOiJuXm4xKi1uXm4yIixyOiItbl4objErbjIpIn0se2w6Im5ebjEqbl5uMiIscjoibl4objErbjIpIn0se2w6Im5ebjEqLW4iLHI6Ii1uXihuMSsxKSJ9LHtsOiJuXm4xKm4iLHI6Im5eKG4xKzEpIn0se2w6Im5ebjEvLW4iLHI6Ii1uXihuMS0xKSJ9LHtsOiJuXm4xL24iLHI6Im5eKG4xLTEpIn0se2w6Im4vLW5ebjEiLHI6Ii1uXigxLW4xKSJ9LHtsOiJuL25ebjEiLHI6Im5eKDEtbjEpIn0se2w6Im5ebjEvLW5ebjIiLHI6Im5eKG4xLW4yKSJ9LHtsOiJuXm4xL25ebjIiLHI6Im5eKG4xLW4yKSJ9LHtsOiJuMSsoLW4yKm4zKSIscjoibjEtbjIqbjMifSx7bDoidiooLWMpIixyOiItYyp2In0se2w6Im4xKy1uMiIscjoibjEtbjIifSx7bDoidipjIixyOiJjKnYifSx7bDoiKG4xXm4yKV5uMyIscjoiKG4xXihuMipuMykpIn1dLG8pLHU9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIG89W10saT1nKGUsbix0LHtleGFjdEZyYWN0aW9uczohMX0pLHM9IistKiIrKChyPSEhcik/Ii8iOiIiKTshZnVuY3Rpb24gZSh0KXt2YXIgcj10LnR5cGU7e2lmKCJGdW5jdGlvbk5vZGUiPT09cil0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlzIGFuIHVuc29sdmVkIGZ1bmN0aW9uIGNhbGwiKTtpZigiT3BlcmF0b3JOb2RlIj09PXIpaWYoIl4iPT09dC5vcCl7aWYoIkNvbnN0YW50Tm9kZSIhPT10LmFyZ3NbMV0udHlwZXx8IU9iamVjdChFLmkpKHBhcnNlRmxvYXQodC5hcmdzWzFdLnZhbHVlKSkpdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBpcyBhIG5vbi1pbnRlZ2VyIGV4cG9uZW50Iik7ZSh0LmFyZ3NbMF0pfWVsc2V7aWYoLTE9PT1zLmluZGV4T2YodC5vcCkpdGhyb3cgbmV3IEVycm9yKCJPcGVyYXRvciAiK3Qub3ArIiBpbnZhbGlkIGluIHBvbHlub21pYWwgZXhwcmVzc2lvbiIpO2Zvcih2YXIgbj0wO248dC5hcmdzLmxlbmd0aDtuKyspZSh0LmFyZ3Nbbl0pfWVsc2UgaWYoIlN5bWJvbE5vZGUiPT09cil7dmFyIGk9dC5uYW1lLGE9by5pbmRleE9mKGkpOy0xPT09YSYmby5wdXNoKGkpfWVsc2UgaWYoIlBhcmVudGhlc2lzTm9kZSI9PT1yKWUodC5jb250ZW50KTtlbHNlIGlmKCJDb25zdGFudE5vZGUiIT09cil0aHJvdyBuZXcgRXJyb3IoInR5cGUgIityKyIgaXMgbm90IGFsbG93ZWQgaW4gcG9seW5vbWlhbCBleHByZXNzaW9uIil9fShpKTt2YXIgYT17fTtyZXR1cm4gYS5leHByZXNzaW9uPWksYS52YXJpYWJsZXM9byxhfShlLHQsITAscy5maXJzdFJ1bGVzKSxjPXUudmFyaWFibGVzLmxlbmd0aDtpZihlPXUuZXhwcmVzc2lvbiwxPD1jKXt2YXIgZixsO2U9ZnVuY3Rpb24gZSh0LHIsbil7dmFyIGk9dC50eXBlO3ZhciBhPTE8YXJndW1lbnRzLmxlbmd0aDtpZigiT3BlcmF0b3JOb2RlIj09PWkmJnQuaXNCaW5hcnkoKSl7dmFyIG8scz0hMTtpZigiXiI9PT10Lm9wJiYoIlBhcmVudGhlc2lzTm9kZSIhPT10LmFyZ3NbMF0udHlwZSYmIk9wZXJhdG9yTm9kZSIhPT10LmFyZ3NbMF0udHlwZXx8IkNvbnN0YW50Tm9kZSIhPT10LmFyZ3NbMV0udHlwZXx8KG89cGFyc2VGbG9hdCh0LmFyZ3NbMV0udmFsdWUpLHM9Mjw9byYmT2JqZWN0KEUuaSkobykpKSxzKXtpZigyPG8pe3ZhciB1PXQuYXJnc1swXSxjPW5ldyBiKCJeIiwicG93IixbdC5hcmdzWzBdLmNsb25lRGVlcCgpLG5ldyB2KG8tMSldKTt0PW5ldyBiKCIqIiwibXVsdGlwbHkiLFt1LGNdKX1lbHNlIHQ9bmV3IGIoIioiLCJtdWx0aXBseSIsW3QuYXJnc1swXSx0LmFyZ3NbMF0uY2xvbmVEZWVwKCldKTthJiYoImNvbnRlbnQiPT09bj9yLmNvbnRlbnQ9dDpyLmFyZ3Nbbl09dCl9fWlmKCJQYXJlbnRoZXNpc05vZGUiPT09aSllKHQuY29udGVudCx0LCJjb250ZW50Iik7ZWxzZSBpZigiQ29uc3RhbnROb2RlIiE9PWkmJiJTeW1ib2xOb2RlIiE9PWkpZm9yKHZhciBmPTA7Zjx0LmFyZ3MubGVuZ3RoO2YrKyllKHQuYXJnc1tmXSx0LGYpO2lmKCFhKXJldHVybiB0fShlKTt2YXIgcCxtPSEwLGg9ITE7Zm9yKGU9ZyhlLHMuZmlyc3RSdWxlcyx7fSx7ZXhhY3RGcmFjdGlvbnM6ITF9KTtsPW0/cy5kaXN0ckRpdlJ1bGVzOnMuc3VjRGl2UnVsZXMsbT0hbSwocD0oZT1nKGUsbCkpLnRvU3RyaW5nKCkpIT09ZjspaD0hMCxmPXA7aCYmKGU9ZyhlLHMuZmlyc3RSdWxlc0FnYWluLHt9LHtleGFjdEZyYWN0aW9uczohMX0pKSxlPWcoZSxzLmZpbmFsUnVsZXMse30se2V4YWN0RnJhY3Rpb25zOiExfSl9dmFyIGQ9W10seT17fTtyZXR1cm4iT3BlcmF0b3JOb2RlIj09PWUudHlwZSYmZS5pc0JpbmFyeSgpJiYiLyI9PT1lLm9wPygxPT09YyYmKGUuYXJnc1swXT1PKGUuYXJnc1swXSxkKSxlLmFyZ3NbMV09TyhlLmFyZ3NbMV0pKSxyJiYoeS5udW1lcmF0b3I9ZS5hcmdzWzBdLHkuZGVub21pbmF0b3I9ZS5hcmdzWzFdKSk6KDE9PT1jJiYoZT1PKGUsZCkpLHImJih5Lm51bWVyYXRvcj1lLHkuZGVub21pbmF0b3I9bnVsbCkpLHI/KHkuY29lZmZpY2llbnRzPWQseS52YXJpYWJsZXM9dS52YXJpYWJsZXMseS5leHByZXNzaW9uPWUseSk6ZX19KTtmdW5jdGlvbiBPKGUsdSl7dm9pZCAwPT09dSYmKHU9W10pO3ZhciB0PXtjdGU6MSxvcGVyOiIrIixmaXJlOiIifSxjPXVbMF09MCxmPSIiOyFmdW5jdGlvbiBlKHQscixuKXt2YXIgaT10LnR5cGU7e2lmKCJGdW5jdGlvbk5vZGUiPT09aSl0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlzIGFuIHVuc29sdmVkIGZ1bmN0aW9uIGNhbGwiKTtpZigiT3BlcmF0b3JOb2RlIj09PWkpe2lmKC0xPT09IistKl4iLmluZGV4T2YodC5vcCkpdGhyb3cgbmV3IEVycm9yKCJPcGVyYXRvciAiK3Qub3ArIiBpbnZhbGlkIik7aWYobnVsbCE9PXIpe2lmKCgidW5hcnlNaW51cyI9PT10LmZufHwicG93Ij09PXQuZm4pJiYiYWRkIiE9PXIuZm4mJiJzdWJ0cmFjdCIhPT1yLmZuJiYibXVsdGlwbHkiIT09ci5mbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgIit0Lm9wKyIgcGxhY2luZyIpO2lmKCgic3VidHJhY3QiPT09dC5mbnx8ImFkZCI9PT10LmZufHwibXVsdGlwbHkiPT09dC5mbikmJiJhZGQiIT09ci5mbiYmInN1YnRyYWN0IiE9PXIuZm4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkICIrdC5vcCsiIHBsYWNpbmciKTtpZigoInN1YnRyYWN0Ij09PXQuZm58fCJhZGQiPT09dC5mbnx8InVuYXJ5TWludXMiPT09dC5mbikmJjAhPT1uLm5vRmlsKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCAiK3Qub3ArIiBwbGFjaW5nIil9Il4iIT09dC5vcCYmIioiIT09dC5vcHx8KG4uZmlyZT10Lm9wKTtmb3IodmFyIGE9MDthPHQuYXJncy5sZW5ndGg7YSsrKSJ1bmFyeU1pbnVzIj09PXQuZm4mJihuLm9wZXI9Ii0iKSwiKyIhPT10Lm9wJiYic3VidHJhY3QiIT09dC5mbnx8KG4uZmlyZT0iIixuLmN0ZT0xLG4ub3Blcj0wPT09YT8iKyI6dC5vcCksbi5ub0ZpbD1hLGUodC5hcmdzW2FdLHQsbil9ZWxzZSBpZigiU3ltYm9sTm9kZSI9PT1pKXtpZih0Lm5hbWUhPT1mJiYiIiE9PWYpdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBpcyBtb3JlIHRoYW4gb25lIHZhcmlhYmxlIik7aWYoZj10Lm5hbWUsbnVsbD09PXIpcmV0dXJuIHZvaWQodVsxXT0xKTtpZigiXiI9PT1yLm9wJiYwIT09bi5ub0ZpbCl0aHJvdyBuZXcgRXJyb3IoIkluIHBvd2VyIHRoZSB2YXJpYWJsZSBzaG91bGQgYmUgdGhlIGZpcnN0IHBhcmFtZXRlciIpO2lmKCIqIj09PXIub3AmJjEhPT1uLm5vRmlsKXRocm93IG5ldyBFcnJvcigiSW4gbXVsdGlwbHkgdGhlIHZhcmlhYmxlIHNob3VsZCBiZSB0aGUgc2Vjb25kIHBhcmFtZXRlciIpOyIiIT09bi5maXJlJiYiKiIhPT1uLmZpcmV8fChjPDEmJih1WzFdPTApLHVbMV0rPW4uY3RlKigiKyI9PT1uLm9wZXI/MTotMSksYz1NYXRoLm1heCgxLGMpKX1lbHNle2lmKCJDb25zdGFudE5vZGUiIT09aSl0aHJvdyBuZXcgRXJyb3IoIlR5cGUgIitpKyIgaXMgbm90IGFsbG93ZWQiKTt2YXIgbz1wYXJzZUZsb2F0KHQudmFsdWUpO2lmKG51bGw9PT1yKXJldHVybiB2b2lkKHVbMF09byk7aWYoIl4iPT09ci5vcCl7aWYoMSE9PW4ubm9GaWwpdGhyb3cgbmV3IEVycm9yKCJDb25zdGFudCBjYW5ub3QgYmUgcG93ZXJlZCIpO2lmKCFPYmplY3QoRS5pKShvKXx8bzw9MCl0aHJvdyBuZXcgRXJyb3IoIk5vbi1pbnRlZ2VyIGV4cG9uZW50IGlzIG5vdCBhbGxvd2VkIik7Zm9yKHZhciBzPWMrMTtzPG87cysrKXVbc109MDtyZXR1cm4gYzxvJiYodVtvXT0wKSx1W29dKz1uLmN0ZSooIisiPT09bi5vcGVyPzE6LTEpLHZvaWQoYz1NYXRoLm1heChvLGMpKX1uLmN0ZT1vLCIiPT09bi5maXJlJiYodVswXSs9bi5jdGUqKCIrIj09PW4ub3Blcj8xOi0xKSl9fX0oZSxudWxsLHQpO2Zvcih2YXIgcixuPSEwLGk9Yz11Lmxlbmd0aC0xOzA8PWk7aS0tKWlmKDAhPT11W2ldKXt2YXIgYT1uZXcgdihuP3VbaV06TWF0aC5hYnModVtpXSkpLG89dVtpXTwwPyItIjoiKyI7aWYoMDxpKXt2YXIgcz1uZXcgZChmKTtpZigxPGkpe3ZhciBsPW5ldyB2KGkpO3M9bmV3IGIoIl4iLCJwb3ciLFtzLGxdKX1hPS0xPT09dVtpXSYmbj9uZXcgYigiLSIsInVuYXJ5TWludXMiLFtzXSk6MT09PU1hdGguYWJzKHVbaV0pP3M6bmV3IGIoIioiLCJtdWx0aXBseSIsW2Esc10pfXI9bj9hOiIrIj09bz9uZXcgYigiKyIsImFkZCIsW3IsYV0pOm5ldyBiKCItIiwic3VidHJhY3QiLFtyLGFdKSxuPSExfXJldHVybiBuP25ldyB2KDApOnJ9cmV0dXJuIE59KSxJbT1bImNsYXNzZXMiXSxxbT1PYmplY3Qocy5hKSgicmV2aXZlciIsSW0sZnVuY3Rpb24oZSl7dmFyIG49ZS5jbGFzc2VzO3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciByPW5bdCYmdC5tYXRoanNdO3JldHVybiByJiYiZnVuY3Rpb24iPT10eXBlb2Ygci5mcm9tSlNPTj9yLmZyb21KU09OKHQpOnR9fSksQm09TWF0aC5QSSxrbT0yKk1hdGguUEksem09TWF0aC5FLERtPU9iamVjdChzLmEpKCJ0cnVlIixbXSxmdW5jdGlvbigpe3JldHVybiEwfSksUm09T2JqZWN0KHMuYSkoImZhbHNlIixbXSxmdW5jdGlvbigpe3JldHVybiExfSksUG09T2JqZWN0KHMuYSkoIm51bGwiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9KSxGbT1yaCgiSW5maW5pdHkiLFsiY29uZmlnIiwiP0JpZ051bWJlciJdLGZ1bmN0aW9uKGUpe3ZhciB0PWUuY29uZmlnLHI9ZS5CaWdOdW1iZXI7cmV0dXJuIkJpZ051bWJlciI9PT10Lm51bWJlcj9uZXcgcigxLzApOjEvMH0pLFVtPXJoKCJOYU4iLFsiY29uZmlnIiwiP0JpZ051bWJlciJdLGZ1bmN0aW9uKGUpe3ZhciB0PWUuY29uZmlnLHI9ZS5CaWdOdW1iZXI7cmV0dXJuIkJpZ051bWJlciI9PT10Lm51bWJlcj9uZXcgcihOYU4pOk5hTn0pLExtPXJoKCJwaSIsWyJjb25maWciLCI/QmlnTnVtYmVyIl0sZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb25maWcscj1lLkJpZ051bWJlcjtyZXR1cm4iQmlnTnVtYmVyIj09PXQubnVtYmVyP2JzKHIpOkJtfSksSG09cmgoInRhdSIsWyJjb25maWciLCI/QmlnTnVtYmVyIl0sZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb25maWcscj1lLkJpZ051bWJlcjtyZXR1cm4iQmlnTnVtYmVyIj09PXQubnVtYmVyP3hzKHIpOmttfSksJG09cmgoImUiLFsiY29uZmlnIiwiP0JpZ051bWJlciJdLGZ1bmN0aW9uKGUpe3ZhciB0PWUuY29uZmlnLHI9ZS5CaWdOdW1iZXI7cmV0dXJuIkJpZ051bWJlciI9PT10Lm51bWJlcj9ncyhyKTp6bX0pLEdtPXJoKCJwaGkiLFsiY29uZmlnIiwiP0JpZ051bWJlciJdLGZ1bmN0aW9uKGUpe3ZhciB0PWUuY29uZmlnLHI9ZS5CaWdOdW1iZXI7cmV0dXJuIkJpZ051bWJlciI9PT10Lm51bWJlcj92cyhyKToxLjYxODAzMzk4ODc0OTg5NX0pLFptPXJoKCJMTjIiLFsiY29uZmlnIiwiP0JpZ051bWJlciJdLGZ1bmN0aW9uKGUpe3ZhciB0PWUuY29uZmlnLHI9ZS5CaWdOdW1iZXI7cmV0dXJuIkJpZ051bWJlciI9PT10Lm51bWJlcj9uZXcgcigyKS5sbigpOk1hdGguTE4yfSksVm09cmgoIkxOMTAiLFsiY29uZmlnIiwiP0JpZ051bWJlciJdLGZ1bmN0aW9uKGUpe3ZhciB0PWUuY29uZmlnLHI9ZS5CaWdOdW1iZXI7cmV0dXJuIkJpZ051bWJlciI9PT10Lm51bWJlcj9uZXcgcigxMCkubG4oKTpNYXRoLkxOMTB9KSxKbT1yaCgiTE9HMkUiLFsiY29uZmlnIiwiP0JpZ051bWJlciJdLGZ1bmN0aW9uKGUpe3ZhciB0PWUuY29uZmlnLHI9ZS5CaWdOdW1iZXI7cmV0dXJuIkJpZ051bWJlciI9PT10Lm51bWJlcj9uZXcgcigxKS5kaXYobmV3IHIoMikubG4oKSk6TWF0aC5MT0cyRX0pLFdtPXJoKCJMT0cxMEUiLFsiY29uZmlnIiwiP0JpZ051bWJlciJdLGZ1bmN0aW9uKGUpe3ZhciB0PWUuY29uZmlnLHI9ZS5CaWdOdW1iZXI7cmV0dXJuIkJpZ051bWJlciI9PT10Lm51bWJlcj9uZXcgcigxKS5kaXYobmV3IHIoMTApLmxuKCkpOk1hdGguTE9HMTBFfSksWW09cmgoIlNRUlQxXzIiLFsiY29uZmlnIiwiP0JpZ051bWJlciJdLGZ1bmN0aW9uKGUpe3ZhciB0PWUuY29uZmlnLHI9ZS5CaWdOdW1iZXI7cmV0dXJuIkJpZ051bWJlciI9PT10Lm51bWJlcj9uZXcgcigiMC41Iikuc3FydCgpOk1hdGguU1FSVDFfMn0pLFhtPXJoKCJTUVJUMiIsWyJjb25maWciLCI/QmlnTnVtYmVyIl0sZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb25maWcscj1lLkJpZ051bWJlcjtyZXR1cm4iQmlnTnVtYmVyIj09PXQubnVtYmVyP25ldyByKDIpLnNxcnQoKTpNYXRoLlNRUlQyfSksUW09cmgoImkiLFsiQ29tcGxleCJdLGZ1bmN0aW9uKGUpe3JldHVybiBlLkNvbXBsZXguSX0pLEttPU9iamVjdChzLmEpKCJQSSIsWyJwaSJdLGZ1bmN0aW9uKGUpe3JldHVybiBlLnBpfSksZWg9T2JqZWN0KHMuYSkoIkUiLFsiZSJdLGZ1bmN0aW9uKGUpe3JldHVybiBlLmV9KSx0aD1PYmplY3Qocy5hKSgidmVyc2lvbiIsW10sZnVuY3Rpb24oKXtyZXR1cm4iNi42LjEifSk7ZnVuY3Rpb24gcmgoZSx0LHIpe3JldHVybiBPYmplY3Qocy5hKShlLHQscix7cmVjcmVhdGVPbkNvbmZpZ0NoYW5nZTohMH0pfXZhciBuaD1LaCgic3BlZWRPZkxpZ2h0IiwiMjk5NzkyNDU4IiwibSBzXi0xIiksaWg9S2goImdyYXZpdGF0aW9uQ29uc3RhbnQiLCI2LjY3NDMwZS0xMSIsIm1eMyBrZ14tMSBzXi0yIiksYWg9S2goInBsYW5ja0NvbnN0YW50IiwiNi42MjYwNzAxNWUtMzQiLCJKIHMiKSxvaD1LaCgicmVkdWNlZFBsYW5ja0NvbnN0YW50IiwiMS4wNTQ1NzE4MTc2NDYxNTY1ZS0zNCIsIkogcyIpLHNoPUtoKCJtYWduZXRpY0NvbnN0YW50IiwiMS4yNTY2MzcwNjIxMmUtNiIsIk4gQV4tMiIpLHVoPUtoKCJlbGVjdHJpY0NvbnN0YW50IiwiOC44NTQxODc4MTI4ZS0xMiIsIkYgbV4tMSIpLGNoPUtoKCJ2YWN1dW1JbXBlZGFuY2UiLCIzNzYuNzMwMzEzNjY3Iiwib2htIiksZmg9S2goImNvdWxvbWIiLCI4Ljk4NzU1MTc5MjI2MTE3MWU5IiwiTiBtXjIgQ14tMiIpLGxoPUtoKCJlbGVtZW50YXJ5Q2hhcmdlIiwiMS42MDIxNzY2MzRlLTE5IiwiQyIpLHBoPUtoKCJib2hyTWFnbmV0b24iLCI5LjI3NDAxMDA3ODNlLTI0IiwiSiBUXi0xIiksbWg9S2goImNvbmR1Y3RhbmNlUXVhbnR1bSIsIjcuNzQ4MDkxNzI5ODYzNjQ5ZS01IiwiUyIpLGhoPUtoKCJpbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtIiwiMTI5MDYuNDAzNzI5NjUyMjU3Iiwib2htIiksZGg9S2goIm1hZ25ldGljRmx1eFF1YW50dW0iLCIyLjA2NzgzMzg0ODQ2MTkyOTVlLTE1IiwiV2IiKSx5aD1LaCgibnVjbGVhck1hZ25ldG9uIiwiNS4wNTA3ODM3NDYxZS0yNyIsIkogVF4tMSIpLGdoPUtoKCJrbGl0emluZyIsIjI1ODEyLjgwNzQ1OTMwNDUxMyIsIm9obSIpLHZoPUtoKCJib2hyUmFkaXVzIiwiNS4yOTE3NzIxMDkwM2UtMTEiLCJtIiksYmg9S2goImNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzIiwiMi44MTc5NDAzMjYyZS0xNSIsIm0iKSx4aD1LaCgiZWxlY3Ryb25NYXNzIiwiOS4xMDkzODM3MDE1ZS0zMSIsImtnIiksd2g9S2goImZlcm1pQ291cGxpbmciLCIxLjE2NjM3ODdlLTUiLCJHZVZeLTIiKSxOaD1lZCgiZmluZVN0cnVjdHVyZSIsLjAwNzI5NzM1MjU2OTMpLE9oPUtoKCJoYXJ0cmVlRW5lcmd5IiwiNC4zNTk3NDQ3MjIyMDcxZS0xOCIsIkoiKSxNaD1LaCgicHJvdG9uTWFzcyIsIjEuNjcyNjIxOTIzNjllLTI3Iiwia2ciKSxqaD1LaCgiZGV1dGVyb25NYXNzIiwiMy4zNDM1ODMwOTI2ZS0yNyIsImtnIiksRWg9S2goIm5ldXRyb25NYXNzIiwiMS42NzQ5MjcxNjEzZS0yNyIsImtnIiksU2g9S2goInF1YW50dW1PZkNpcmN1bGF0aW9uIiwiMy42MzY5NDc1NTE2ZS00IiwibV4yIHNeLTEiKSxBaD1LaCgicnlkYmVyZyIsIjEwOTczNzMxLjU2ODE2MCIsIm1eLTEiKSxDaD1LaCgidGhvbXNvbkNyb3NzU2VjdGlvbiIsIjYuNjUyNDU4NzMyMWUtMjkiLCJtXjIiKSxUaD1lZCgid2Vha01peGluZ0FuZ2xlIiwuMjIyOSksX2g9ZWQoImVmaW1vdkZhY3RvciIsMjIuNyksSWg9S2goImF0b21pY01hc3MiLCIxLjY2MDUzOTA2NjYwZS0yNyIsImtnIikscWg9S2goImF2b2dhZHJvIiwiNi4wMjIxNDA3NmUyMyIsIm1vbF4tMSIpLEJoPUtoKCJib2x0em1hbm4iLCIxLjM4MDY0OWUtMjMiLCJKIEteLTEiKSxraD1LaCgiZmFyYWRheSIsIjk2NDg1LjMzMjEyMzMxMDAxIiwiQyBtb2xeLTEiKSx6aD1LaCgiZmlyc3RSYWRpYXRpb24iLCIzLjc0MTc3MTg1MjE5Mjc1NzNlLTE2IiwiVyBtXjIiKSxEaD1LaCgibG9zY2htaWR0IiwiMi42ODY3ODAxMTE3OTg0NDRlMjUiLCJtXi0zIiksUmg9S2goImdhc0NvbnN0YW50IiwiOC4zMTQ0NjI2MTgxNTMyNCIsIkogS14tMSBtb2xeLTEiKSxQaD1LaCgibW9sYXJQbGFuY2tDb25zdGFudCIsIjMuOTkwMzEyNzEyODkzNDMxZS0xMCIsIkogcyBtb2xeLTEiKSxGaD1LaCgibW9sYXJWb2x1bWUiLCIwLjAyMjQxMzk2OTU0NTAxNDEzNyIsIm1eMyBtb2xeLTEiKSxVaD1lZCgic2Fja3VyVGV0cm9kZSIsLTEuMTY0ODcwNTIzNTgpLExoPUtoKCJzZWNvbmRSYWRpYXRpb24iLCIwLjAxNDM4Nzc2ODc3NTAzOTMzNyIsIm0gSyIpLEhoPUtoKCJzdGVmYW5Cb2x0em1hbm4iLCI1LjY3MDM3NDQxOTE4NDQzZS04IiwiVyBtXi0yIEteLTQiKSwkaD1LaCgid2llbkRpc3BsYWNlbWVudCIsIjIuODk3NzcxOTU1ZS0zIiwibSBLIiksR2g9S2goIm1vbGFyTWFzcyIsIjAuOTk5OTk5OTk5NjVlLTMiLCJrZyBtb2xeLTEiKSxaaD1LaCgibW9sYXJNYXNzQzEyIiwiMTEuOTk5OTk5OTk1OGUtMyIsImtnIG1vbF4tMSIpLFZoPUtoKCJncmF2aXR5IiwiOS44MDY2NSIsIm0gc14tMiIpLEpoPUtoKCJwbGFuY2tMZW5ndGgiLCIxLjYxNjI1NWUtMzUiLCJtIiksV2g9S2goInBsYW5ja01hc3MiLCIyLjE3NjQzNWUtOCIsImtnIiksWWg9S2goInBsYW5ja1RpbWUiLCI1LjM5MTI0NWUtNDQiLCJzIiksWGg9S2goInBsYW5ja0NoYXJnZSIsIjEuODc1NTQ2MDM3NzhlLTE4IiwiQyIpLFFoPUtoKCJwbGFuY2tUZW1wZXJhdHVyZSIsIjEuNDE2Nzg1ZSszMiIsIksiKTtmdW5jdGlvbiBLaChlLGEsbyl7cmV0dXJuIE9iamVjdChzLmEpKGUsWyJjb25maWciLCJVbml0IiwiQmlnTnVtYmVyIl0sZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb25maWcscj1lLlVuaXQsbj1lLkJpZ051bWJlcixpPW5ldyByKCJCaWdOdW1iZXIiPT09dC5udW1iZXI/bmV3IG4oYSk6cGFyc2VGbG9hdChhKSxvKTtyZXR1cm4gaS5maXhQcmVmaXg9ITAsaX0pfWZ1bmN0aW9uIGVkKGUsbil7cmV0dXJuIE9iamVjdChzLmEpKGUsWyJjb25maWciLCJCaWdOdW1iZXIiXSxmdW5jdGlvbihlKXt2YXIgdD1lLmNvbmZpZyxyPWUuQmlnTnVtYmVyO3JldHVybiJCaWdOdW1iZXIiPT09dC5udW1iZXI/bmV3IHIobik6bn0pfXZhciB0ZD1bInR5cGVkIiwiaXNJbnRlZ2VyIl0scmQ9T2JqZWN0KHMuYSkoImFwcGx5Iix0ZCxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5pc0ludGVnZXIsbj1qdCh7dHlwZWQ6dCxpc0ludGVnZXI6cn0pO3JldHVybiB0KCJhcHBseSIseyIuLi5hbnkiOmZ1bmN0aW9uKGUpe3ZhciB0PWVbMV07T2JqZWN0KGllLnkpKHQpP2VbMV09dC0xOk9iamVjdChpZS5lKSh0KSYmKGVbMV09dC5taW51cygxKSk7dHJ5e3JldHVybiBuLmFwcGx5KG51bGwsZSl9Y2F0Y2goZSl7dGhyb3cgUmMoZSl9fX0pfSx7aXNUcmFuc2Zvcm1GdW5jdGlvbjohMH0pLG5kPVsidHlwZWQiLCJJbmRleCIsIm1hdHJpeCIsInJhbmdlIl0saWQ9T2JqZWN0KHMuYSkoImNvbHVtbiIsbmQsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuSW5kZXgsbj1lLm1hdHJpeCxpPWUucmFuZ2UsYT1Ibih7dHlwZWQ6dCxJbmRleDpyLG1hdHJpeDpuLHJhbmdlOml9KTtyZXR1cm4gdCgiY29sdW1uIix7Ii4uLmFueSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgtMSxyPWVbdF07T2JqZWN0KGllLnkpKHIpJiYoZVt0XT1yLTEpO3RyeXtyZXR1cm4gYS5hcHBseShudWxsLGUpfWNhdGNoKGUpe3Rocm93IFJjKGUpfX19KX0se2lzVHJhbnNmb3JtRnVuY3Rpb246ITB9KTtmdW5jdGlvbiBhZChlLHQscil7dmFyIG49ZS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChpZS5KKShlKSYmIShlLm5hbWUgaW4gdCkmJiEoZS5uYW1lIGluIHIpfSlbMF07aWYoIW4pdGhyb3cgbmV3IEVycm9yKCdObyB1bmRlZmluZWQgdmFyaWFibGUgZm91bmQgaW4gaW5saW5lIGV4cHJlc3Npb24gIicrZSsnIicpO3ZhciBpPW4ubmFtZSxhPU9iamVjdC5jcmVhdGUociksbz1lLmNvbXBpbGUoKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGFbaV09ZSxvLmV2YWx1YXRlKGEpfX12YXIgb2Q9WyJ0eXBlZCJdLHNkPU9iamVjdChzLmEpKCJmaWx0ZXIiLG9kLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQ7ZnVuY3Rpb24gcihlLHQscil7dmFyIG4saTtyZXR1cm4gZVswXSYmKG49ZVswXS5jb21waWxlKCkuZXZhbHVhdGUocikpLGVbMV0mJihpPU9iamVjdChpZS5KKShlWzFdKXx8T2JqZWN0KGllLnEpKGVbMV0pP2VbMV0uY29tcGlsZSgpLmV2YWx1YXRlKHIpOmFkKGVbMV0sdCxyKSksYShuLGkpfXIucmF3QXJncz0hMDt2YXIgYT10KCJmaWx0ZXIiLHsiQXJyYXksIGZ1bmN0aW9uIjp1ZCwiTWF0cml4LCBmdW5jdGlvbiI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jcmVhdGUodWQoZS50b0FycmF5KCksdCkpfSwiQXJyYXksIFJlZ0V4cCI6SS5kLCJNYXRyaXgsIFJlZ0V4cCI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jcmVhdGUoT2JqZWN0KEkuZCkoZS50b0FycmF5KCksdCkpfX0pO3JldHVybiByfSx7aXNUcmFuc2Zvcm1GdW5jdGlvbjohMH0pO2Z1bmN0aW9uIHVkKGUsbil7dmFyIGk9WG4obik7cmV0dXJuIE9iamVjdChJLmMpKGUsZnVuY3Rpb24oZSx0LHIpe3JldHVybiAxPT09aT9uKGUpOjI9PT1pP24oZSxbdCsxXSk6bihlLFt0KzFdLHIpfSl9dmFyIGNkPVsidHlwZWQiXSxmZD1PYmplY3Qocy5hKSgiZm9yRWFjaCIsY2QsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZDtmdW5jdGlvbiByKGUsdCxyKXt2YXIgbixpO3JldHVybiBlWzBdJiYobj1lWzBdLmNvbXBpbGUoKS5ldmFsdWF0ZShyKSksZVsxXSYmKGk9T2JqZWN0KGllLkopKGVbMV0pfHxPYmplY3QoaWUucSkoZVsxXSk/ZVsxXS5jb21waWxlKCkuZXZhbHVhdGUocik6YWQoZVsxXSx0LHIpKSxhKG4saSl9ci5yYXdBcmdzPSEwO3ZhciBhPXQoImZvckVhY2giLHsiQXJyYXkgfCBNYXRyaXgsIGZ1bmN0aW9uIjpmdW5jdGlvbih0LGkpe3ZhciBhPVhuKGkpOyFmdW5jdGlvbiByKGUsbil7QXJyYXkuaXNBcnJheShlKT9PYmplY3QoSS5mKShlLGZ1bmN0aW9uKGUsdCl7cihlLG4uY29uY2F0KHQrMSkpfSk6MT09PWE/aShlKToyPT09YT9pKGUsbik6aShlLG4sdCl9KHQudmFsdWVPZigpLFtdKX19KTtyZXR1cm4gcn0se2lzVHJhbnNmb3JtRnVuY3Rpb246ITB9KSxsZD1bIkluZGV4Il0scGQ9T2JqZWN0KHMuYSkoImluZGV4IixsZCxmdW5jdGlvbihlKXt2YXIgYT1lLkluZGV4O3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTAscj1hcmd1bWVudHMubGVuZ3RoO3Q8cjt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtpZihPYmplY3QoaWUuRCkobikpbi5zdGFydC0tLG4uZW5kLT0wPG4uc3RlcD8wOjI7ZWxzZSBpZihuJiYhMD09PW4uaXNTZXQpbj1uLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS0xfSk7ZWxzZSBpZihPYmplY3QoaWUuYikobil8fE9iamVjdChpZS52KShuKSluPW4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLTF9KTtlbHNlIGlmKE9iamVjdChpZS55KShuKSluLS07ZWxzZSBpZihPYmplY3QoaWUuZSkobikpbj1uLnRvTnVtYmVyKCktMTtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJEaW1lbnNpb24gbXVzdCBiZSBhbiBBcnJheSwgTWF0cml4LCBudW1iZXIsIHN0cmluZywgb3IgUmFuZ2UiKTtlW3RdPW59dmFyIGk9bmV3IGE7cmV0dXJuIGEuYXBwbHkoaSxlKSxpfX0se2lzVHJhbnNmb3JtRnVuY3Rpb246ITB9KSxtZD1bInR5cGVkIl0saGQ9T2JqZWN0KHMuYSkoIm1hcCIsbWQsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZDtmdW5jdGlvbiByKGUsdCxyKXt2YXIgbixpO3JldHVybiBlWzBdJiYobj1lWzBdLmNvbXBpbGUoKS5ldmFsdWF0ZShyKSksZVsxXSYmKGk9T2JqZWN0KGllLkopKGVbMV0pfHxPYmplY3QoaWUucSkoZVsxXSk/ZVsxXS5jb21waWxlKCkuZXZhbHVhdGUocik6YWQoZVsxXSx0LHIpKSxhKG4saSl9ci5yYXdBcmdzPSEwO3ZhciBhPXQoIm1hcCIseyJBcnJheSwgZnVuY3Rpb24iOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGRkKGUsdCxlKX0sIk1hdHJpeCwgZnVuY3Rpb24iOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY3JlYXRlKGRkKGUudmFsdWVPZigpLHQsZSkpfX0pO3JldHVybiByfSx7aXNUcmFuc2Zvcm1GdW5jdGlvbjohMH0pO2Z1bmN0aW9uIGRkKGUsdCxpKXt2YXIgYT1Ybih0KTtyZXR1cm4gZnVuY3Rpb24gcihlLG4pe3JldHVybiBBcnJheS5pc0FycmF5KGUpP09iamVjdChJLm0pKGUsZnVuY3Rpb24oZSx0KXtyZXR1cm4gcihlLG4uY29uY2F0KHQrMSkpfSk6MT09PWE/dChlKToyPT09YT90KGUsbik6dChlLG4saSl9KGUsW10pfXZhciB5ZD1bInR5cGVkIiwibGFyZ2VyIl0sZ2Q9T2JqZWN0KHMuYSkoIm1heCIseWQsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUubGFyZ2VyLG49b3Moe3R5cGVkOnQsbGFyZ2VyOnJ9KTtyZXR1cm4gdCgibWF4Iix7Ii4uLmFueSI6ZnVuY3Rpb24oZSl7aWYoMj09PWUubGVuZ3RoJiZPYmplY3QoaWUuaSkoZVswXSkpe3ZhciB0PWVbMV07T2JqZWN0KGllLnkpKHQpP2VbMV09dC0xOk9iamVjdChpZS5lKSh0KSYmKGVbMV09dC5taW51cygxKSl9dHJ5e3JldHVybiBuLmFwcGx5KG51bGwsZSl9Y2F0Y2goZSl7dGhyb3cgUmMoZSl9fX0pfSx7aXNUcmFuc2Zvcm1GdW5jdGlvbjohMH0pLHZkPVsidHlwZWQiLCJhZGQiLCJkaXZpZGUiXSxiZD1PYmplY3Qocy5hKSgibWVhbiIsdmQsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuYWRkLG49ZS5kaXZpZGUsaT1ucCh7dHlwZWQ6dCxhZGQ6cixkaXZpZGU6bn0pO3JldHVybiB0KCJtZWFuIix7Ii4uLmFueSI6ZnVuY3Rpb24oZSl7aWYoMj09PWUubGVuZ3RoJiZPYmplY3QoaWUuaSkoZVswXSkpe3ZhciB0PWVbMV07T2JqZWN0KGllLnkpKHQpP2VbMV09dC0xOk9iamVjdChpZS5lKSh0KSYmKGVbMV09dC5taW51cygxKSl9dHJ5e3JldHVybiBpLmFwcGx5KG51bGwsZSl9Y2F0Y2goZSl7dGhyb3cgUmMoZSl9fX0pfSx7aXNUcmFuc2Zvcm1GdW5jdGlvbjohMH0pLHhkPVsidHlwZWQiLCJzbWFsbGVyIl0sd2Q9T2JqZWN0KHMuYSkoIm1pbiIseGQsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuc21hbGxlcixuPXVzKHt0eXBlZDp0LHNtYWxsZXI6cn0pO3JldHVybiB0KCJtaW4iLHsiLi4uYW55IjpmdW5jdGlvbihlKXtpZigyPT09ZS5sZW5ndGgmJk9iamVjdChpZS5pKShlWzBdKSl7dmFyIHQ9ZVsxXTtPYmplY3QoaWUueSkodCk/ZVsxXT10LTE6T2JqZWN0KGllLmUpKHQpJiYoZVsxXT10Lm1pbnVzKDEpKX10cnl7cmV0dXJuIG4uYXBwbHkobnVsbCxlKX1jYXRjaChlKXt0aHJvdyBSYyhlKX19fSl9LHtpc1RyYW5zZm9ybUZ1bmN0aW9uOiEwfSksTmQ9WyJ0eXBlZCIsImNvbmZpZyIsIj9tYXRyaXgiLCI/YmlnbnVtYmVyIiwic21hbGxlciIsInNtYWxsZXJFcSIsImxhcmdlciIsImxhcmdlckVxIl0sT2Q9T2JqZWN0KHMuYSkoInJhbmdlIixOZCxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5jb25maWcsbj1lLm1hdHJpeCxpPWUuYmlnbnVtYmVyLGE9ZS5zbWFsbGVyLG89ZS5zbWFsbGVyRXEscz1lLmxhcmdlcix1PWUubGFyZ2VyRXEsYz1qaSh7dHlwZWQ6dCxjb25maWc6cixtYXRyaXg6bixiaWdudW1iZXI6aSxzbWFsbGVyOmEsc21hbGxlckVxOm8sbGFyZ2VyOnMsbGFyZ2VyRXE6dX0pO3JldHVybiB0KCJyYW5nZSIseyIuLi5hbnkiOmZ1bmN0aW9uKGUpe3JldHVybiJib29sZWFuIiE9dHlwZW9mIGVbZS5sZW5ndGgtMV0mJmUucHVzaCghMCksYy5hcHBseShudWxsLGUpfX0pfSx7aXNUcmFuc2Zvcm1GdW5jdGlvbjohMH0pLE1kPVsidHlwZWQiLCJJbmRleCIsIm1hdHJpeCIsInJhbmdlIl0samQ9T2JqZWN0KHMuYSkoInJvdyIsTWQsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuSW5kZXgsbj1lLm1hdHJpeCxpPWUucmFuZ2UsYT1xaSh7dHlwZWQ6dCxJbmRleDpyLG1hdHJpeDpuLHJhbmdlOml9KTtyZXR1cm4gdCgicm93Iix7Ii4uLmFueSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgtMSxyPWVbdF07T2JqZWN0KGllLnkpKHIpJiYoZVt0XT1yLTEpO3RyeXtyZXR1cm4gYS5hcHBseShudWxsLGUpfWNhdGNoKGUpe3Rocm93IFJjKGUpfX19KX0se2lzVHJhbnNmb3JtRnVuY3Rpb246ITB9KSxFZD1bInR5cGVkIiwibWF0cml4Il0sU2Q9T2JqZWN0KHMuYSkoInN1YnNldCIsRWQsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUubWF0cml4LG49Smkoe3R5cGVkOnQsbWF0cml4OnJ9KTtyZXR1cm4gdCgic3Vic2V0Iix7Ii4uLmFueSI6ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBuLmFwcGx5KG51bGwsZSl9Y2F0Y2goZSl7dGhyb3cgUmMoZSl9fX0pfSx7aXNUcmFuc2Zvcm1GdW5jdGlvbjohMH0pLEFkPVsidHlwZWQiLCJtYXRyaXgiLCJpc0ludGVnZXIiXSxDZD1PYmplY3Qocy5hKSgiY29uY2F0IixBZCxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5tYXRyaXgsbj1lLmlzSW50ZWdlcixpPUZuKHt0eXBlZDp0LG1hdHJpeDpyLGlzSW50ZWdlcjpufSk7cmV0dXJuIHQoImNvbmNhdCIseyIuLi5hbnkiOmZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoLTEscj1lW3RdO09iamVjdChpZS55KShyKT9lW3RdPXItMTpPYmplY3QoaWUuZSkocikmJihlW3RdPXIubWludXMoMSkpO3RyeXtyZXR1cm4gaS5hcHBseShudWxsLGUpfWNhdGNoKGUpe3Rocm93IFJjKGUpfX19KX0se2lzVHJhbnNmb3JtRnVuY3Rpb246ITB9KSxUZD1bInR5cGVkIiwic3FydCIsInZhcmlhbmNlIl0sX2Q9T2JqZWN0KHMuYSkoInN0ZCIsVGQsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlZCxyPWUuc3FydCxuPWUudmFyaWFuY2UsaT15cCh7dHlwZWQ6dCxzcXJ0OnIsdmFyaWFuY2U6bn0pO3JldHVybiB0KCJzdGQiLHsiLi4uYW55IjpmdW5jdGlvbihlKXtpZigyPD1lLmxlbmd0aCYmT2JqZWN0KGllLmkpKGVbMF0pKXt2YXIgdD1lWzFdO09iamVjdChpZS55KSh0KT9lWzFdPXQtMTpPYmplY3QoaWUuZSkodCkmJihlWzFdPXQubWludXMoMSkpfXRyeXtyZXR1cm4gaS5hcHBseShudWxsLGUpfWNhdGNoKGUpe3Rocm93IFJjKGUpfX19KX0se2lzVHJhbnNmb3JtRnVuY3Rpb246ITB9KSxJZD1bInR5cGVkIiwiY29uZmlnIiwiYWRkIiwiP2JpZ251bWJlciIsIj9mcmFjdGlvbiJdLHFkPU9iamVjdChzLmEpKCJzdW0iLElkLGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZWQscj1lLmNvbmZpZyxuPWUuYWRkLGk9ZS5iaWdudW1iZXIsYT1lLmZyYWN0aW9uLG89dHAoe3R5cGVkOnQsY29uZmlnOnIsYWRkOm4sYmlnbnVtYmVyOmksZnJhY3Rpb246YX0pO3JldHVybiB0KCJzdW0iLHsiLi4uYW55IjpmdW5jdGlvbihlKXtpZigyPT09ZS5sZW5ndGgmJk9iamVjdChpZS5pKShlWzBdKSl7dmFyIHQ9ZVsxXTtPYmplY3QoaWUueSkodCk/ZVsxXT10LTE6T2JqZWN0KGllLmUpKHQpJiYoZVsxXT10Lm1pbnVzKDEpKX10cnl7cmV0dXJuIG8uYXBwbHkobnVsbCxlKX1jYXRjaChlKXt0aHJvdyBSYyhlKX19fSl9LHtpc1RyYW5zZm9ybUZ1bmN0aW9uOiEwfSksQmQ9InZhcmlhbmNlIixrZD1bInR5cGVkIiwiYWRkIiwic3VidHJhY3QiLCJtdWx0aXBseSIsImRpdmlkZSIsImFwcGx5IiwiaXNOYU4iXSx6ZD1PYmplY3Qocy5hKShCZCxrZCxmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGVkLHI9ZS5hZGQsbj1lLnN1YnRyYWN0LGk9ZS5tdWx0aXBseSxhPWUuZGl2aWRlLG89ZS5hcHBseSxzPWUuaXNOYU4sdT1scCh7dHlwZWQ6dCxhZGQ6cixzdWJ0cmFjdDpuLG11bHRpcGx5OmksZGl2aWRlOmEsYXBwbHk6byxpc05hTjpzfSk7cmV0dXJuIHQoQmQseyIuLi5hbnkiOmZ1bmN0aW9uKGUpe2lmKDI8PWUubGVuZ3RoJiZPYmplY3QoaWUuaSkoZVswXSkpe3ZhciB0PWVbMV07T2JqZWN0KGllLnkpKHQpP2VbMV09dC0xOk9iamVjdChpZS5lKSh0KSYmKGVbMV09dC5taW51cygxKSl9dHJ5e3JldHVybiB1LmFwcGx5KG51bGwsZSl9Y2F0Y2goZSl7dGhyb3cgUmMoZSl9fX0pfSx7aXNUcmFuc2Zvcm1GdW5jdGlvbjohMH0pO3IuZCh0LCJjcmVhdGVUeXBlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLHIuZCh0LCJjcmVhdGVSZXN1bHRTZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxyLmQodCwiY3JlYXRlQmlnTnVtYmVyQ2xhc3MiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxyLmQodCwiY3JlYXRlQ29tcGxleENsYXNzIixmdW5jdGlvbigpe3JldHVybiBOfSksci5kKHQsImNyZWF0ZUZyYWN0aW9uQ2xhc3MiLGZ1bmN0aW9uKCl7cmV0dXJuIFN9KSxyLmQodCwiY3JlYXRlUmFuZ2VDbGFzcyIsZnVuY3Rpb24oKXtyZXR1cm4gQ30pLHIuZCh0LCJjcmVhdGVNYXRyaXhDbGFzcyIsZnVuY3Rpb24oKXtyZXR1cm4gX30pLHIuZCh0LCJjcmVhdGVEZW5zZU1hdHJpeENsYXNzIixmdW5jdGlvbigpe3JldHVybiBCfSksci5kKHQsImNyZWF0ZUNsb25lIixmdW5jdGlvbigpe3JldHVybiBEfSksci5kKHQsImNyZWF0ZUlzSW50ZWdlciIsZnVuY3Rpb24oKXtyZXR1cm4gWn0pLHIuZCh0LCJjcmVhdGVJc05lZ2F0aXZlIixmdW5jdGlvbigpe3JldHVybiB0ZX0pLHIuZCh0LCJjcmVhdGVJc051bWVyaWMiLGZ1bmN0aW9uKCl7cmV0dXJuIHNlfSksci5kKHQsImNyZWF0ZUhhc051bWVyaWNWYWx1ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZmV9KSxyLmQodCwiY3JlYXRlSXNQb3NpdGl2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gbWV9KSxyLmQodCwiY3JlYXRlSXNaZXJvIixmdW5jdGlvbigpe3JldHVybiBkZX0pLHIuZCh0LCJjcmVhdGVJc05hTiIsZnVuY3Rpb24oKXtyZXR1cm4gZ2V9KSxyLmQodCwiY3JlYXRlVHlwZU9mIixmdW5jdGlvbigpe3JldHVybiB4ZX0pLHIuZCh0LCJjcmVhdGVEZXByZWNhdGVkVHlwZW9mIixmdW5jdGlvbigpe3JldHVybiB3ZX0pLHIuZCh0LCJjcmVhdGVFcXVhbFNjYWxhciIsZnVuY3Rpb24oKXtyZXR1cm4gamV9KSxyLmQodCwiY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3MiLGZ1bmN0aW9uKCl7cmV0dXJuIFNlfSksci5kKHQsImNyZWF0ZU51bWJlciIsZnVuY3Rpb24oKXtyZXR1cm4gQ2V9KSxyLmQodCwiY3JlYXRlU3RyaW5nIixmdW5jdGlvbigpe3JldHVybiBfZX0pLHIuZCh0LCJjcmVhdGVCb29sZWFuIixmdW5jdGlvbigpe3JldHVybiBCZX0pLHIuZCh0LCJjcmVhdGVCaWdudW1iZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHplfSksci5kKHQsImNyZWF0ZUNvbXBsZXgiLGZ1bmN0aW9uKCl7cmV0dXJuIFJlfSksci5kKHQsImNyZWF0ZUZyYWN0aW9uIixmdW5jdGlvbigpe3JldHVybiBGZX0pLHIuZCh0LCJjcmVhdGVNYXRyaXgiLGZ1bmN0aW9uKCl7cmV0dXJuIExlfSksci5kKHQsImNyZWF0ZVNwbGl0VW5pdCIsZnVuY3Rpb24oKXtyZXR1cm4gR2V9KSxyLmQodCwiY3JlYXRlVW5hcnlNaW51cyIsZnVuY3Rpb24oKXtyZXR1cm4gdnR9KSxyLmQodCwiY3JlYXRlVW5hcnlQbHVzIixmdW5jdGlvbigpe3JldHVybiB3dH0pLHIuZCh0LCJjcmVhdGVBYnMiLGZ1bmN0aW9uKCl7cmV0dXJuIE90fSksci5kKHQsImNyZWF0ZUFwcGx5IixmdW5jdGlvbigpe3JldHVybiBqdH0pLHIuZCh0LCJjcmVhdGVBZGRTY2FsYXIiLGZ1bmN0aW9uKCl7cmV0dXJuIEN0fSksci5kKHQsImNyZWF0ZUNicnQiLGZ1bmN0aW9uKCl7cmV0dXJuIF90fSksci5kKHQsImNyZWF0ZUNlaWwiLGZ1bmN0aW9uKCl7cmV0dXJuIHF0fSksci5kKHQsImNyZWF0ZUN1YmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGt0fSksci5kKHQsImNyZWF0ZUV4cCIsZnVuY3Rpb24oKXtyZXR1cm4gRHR9KSxyLmQodCwiY3JlYXRlRXhwbTEiLGZ1bmN0aW9uKCl7cmV0dXJuIFB0fSksci5kKHQsImNyZWF0ZUZpeCIsZnVuY3Rpb24oKXtyZXR1cm4gVXR9KSxyLmQodCwiY3JlYXRlRmxvb3IiLGZ1bmN0aW9uKCl7cmV0dXJuIEh0fSksci5kKHQsImNyZWF0ZUdjZCIsZnVuY3Rpb24oKXtyZXR1cm4gdHJ9KSxyLmQodCwiY3JlYXRlTGNtIixmdW5jdGlvbigpe3JldHVybiBjcn0pLHIuZCh0LCJjcmVhdGVMb2cxMCIsZnVuY3Rpb24oKXtyZXR1cm4gbHJ9KSxyLmQodCwiY3JlYXRlTG9nMiIsZnVuY3Rpb24oKXtyZXR1cm4gbXJ9KSxyLmQodCwiY3JlYXRlTW9kIixmdW5jdGlvbigpe3JldHVybiB3cn0pLHIuZCh0LCJjcmVhdGVNdWx0aXBseVNjYWxhciIsZnVuY3Rpb24oKXtyZXR1cm4gT3J9KSxyLmQodCwiY3JlYXRlTXVsdGlwbHkiLGZ1bmN0aW9uKCl7cmV0dXJuIEVyfSksci5kKHQsImNyZWF0ZU50aFJvb3QiLGZ1bmN0aW9uKCl7cmV0dXJuIENyfSksci5kKHQsImNyZWF0ZVNpZ24iLGZ1bmN0aW9uKCl7cmV0dXJuIF9yfSksci5kKHQsImNyZWF0ZVNxcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIHFyfSksci5kKHQsImNyZWF0ZVNxdWFyZSIsZnVuY3Rpb24oKXtyZXR1cm4ga3J9KSxyLmQodCwiY3JlYXRlU3VidHJhY3QiLGZ1bmN0aW9uKCl7cmV0dXJuIFJyfSksci5kKHQsImNyZWF0ZVhnY2QiLGZ1bmN0aW9uKCl7cmV0dXJuIFVyfSksci5kKHQsImNyZWF0ZURvdE11bHRpcGx5IixmdW5jdGlvbigpe3JldHVybiBacn0pLHIuZCh0LCJjcmVhdGVCaXRBbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGxufSksci5kKHQsImNyZWF0ZUJpdE5vdCIsZnVuY3Rpb24oKXtyZXR1cm4gbW59KSxyLmQodCwiY3JlYXRlQml0T3IiLGZ1bmN0aW9uKCl7cmV0dXJuIGRufSksci5kKHQsImNyZWF0ZUJpdFhvciIsZnVuY3Rpb24oKXtyZXR1cm4gYm59KSxyLmQodCwiY3JlYXRlQXJnIixmdW5jdGlvbigpe3JldHVybiB3bn0pLHIuZCh0LCJjcmVhdGVDb25qIixmdW5jdGlvbigpe3JldHVybiBPbn0pLHIuZCh0LCJjcmVhdGVJbSIsZnVuY3Rpb24oKXtyZXR1cm4gam59KSxyLmQodCwiY3JlYXRlUmUiLGZ1bmN0aW9uKCl7cmV0dXJuIFNufSksci5kKHQsImNyZWF0ZU5vdCIsZnVuY3Rpb24oKXtyZXR1cm4gQm59KSxyLmQodCwiY3JlYXRlT3IiLGZ1bmN0aW9uKCl7cmV0dXJuIHpufSksci5kKHQsImNyZWF0ZVhvciIsZnVuY3Rpb24oKXtyZXR1cm4gUm59KSxyLmQodCwiY3JlYXRlQ29uY2F0IixmdW5jdGlvbigpe3JldHVybiBGbn0pLHIuZCh0LCJjcmVhdGVDb2x1bW4iLGZ1bmN0aW9uKCl7cmV0dXJuIEhufSksci5kKHQsImNyZWF0ZUNyb3NzIixmdW5jdGlvbigpe3JldHVybiBHbn0pLHIuZCh0LCJjcmVhdGVEaWFnIixmdW5jdGlvbigpe3JldHVybiBWbn0pLHIuZCh0LCJjcmVhdGVFeWUiLGZ1bmN0aW9uKCl7cmV0dXJuIEpufSksci5kKHQsImNyZWF0ZUZpbHRlciIsZnVuY3Rpb24oKXtyZXR1cm4gS259KSxyLmQodCwiY3JlYXRlRmxhdHRlbiIsZnVuY3Rpb24oKXtyZXR1cm4gbml9KSxyLmQodCwiY3JlYXRlRm9yRWFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gb2l9KSxyLmQodCwiY3JlYXRlR2V0TWF0cml4RGF0YVR5cGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGZpfSksci5kKHQsImNyZWF0ZUlkZW50aXR5IixmdW5jdGlvbigpe3JldHVybiBtaX0pLHIuZCh0LCJjcmVhdGVLcm9uIixmdW5jdGlvbigpe3JldHVybiBkaX0pLHIuZCh0LCJjcmVhdGVNYXAiLGZ1bmN0aW9uKCl7cmV0dXJuIGdpfSksci5kKHQsImNyZWF0ZU9uZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHhpfSksci5kKHQsImNyZWF0ZVJhbmdlIixmdW5jdGlvbigpe3JldHVybiBqaX0pLHIuZCh0LCJjcmVhdGVSZXNoYXBlIixmdW5jdGlvbigpe3JldHVybiBBaX0pLHIuZCh0LCJjcmVhdGVSZXNpemUiLGZ1bmN0aW9uKCl7cmV0dXJuIF9pfSksci5kKHQsImNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtyZXR1cm4gcWl9KSxyLmQodCwiY3JlYXRlU2l6ZSIsZnVuY3Rpb24oKXtyZXR1cm4ga2l9KSxyLmQodCwiY3JlYXRlU3F1ZWV6ZSIsZnVuY3Rpb24oKXtyZXR1cm4gUml9KSxyLmQodCwiY3JlYXRlU3Vic2V0IixmdW5jdGlvbigpe3JldHVybiBKaX0pLHIuZCh0LCJjcmVhdGVUcmFuc3Bvc2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGVhfSksci5kKHQsImNyZWF0ZUN0cmFuc3Bvc2UiLGZ1bmN0aW9uKCl7cmV0dXJuIG5hfSksci5kKHQsImNyZWF0ZVplcm9zIixmdW5jdGlvbigpe3JldHVybiBhYX0pLHIuZCh0LCJjcmVhdGVFcmYiLGZ1bmN0aW9uKCl7cmV0dXJuIHNhfSksci5kKHQsImNyZWF0ZU1vZGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGhhfSksci5kKHQsImNyZWF0ZVByb2QiLGZ1bmN0aW9uKCl7cmV0dXJuIGdhfSksci5kKHQsImNyZWF0ZUZvcm1hdCIsZnVuY3Rpb24oKXtyZXR1cm4gYmF9KSxyLmQodCwiY3JlYXRlUHJpbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIHdhfSksci5kKHQsImNyZWF0ZVRvIixmdW5jdGlvbigpe3JldHVybiBNYX0pLHIuZCh0LCJjcmVhdGVJc1ByaW1lIixmdW5jdGlvbigpe3JldHVybiBTYX0pLHIuZCh0LCJjcmVhdGVOdW1lcmljIixmdW5jdGlvbigpe3JldHVybiBDYX0pLHIuZCh0LCJjcmVhdGVEaXZpZGVTY2FsYXIiLGZ1bmN0aW9uKCl7cmV0dXJuIElhfSksci5kKHQsImNyZWF0ZVBvdyIsZnVuY3Rpb24oKXtyZXR1cm4gQmF9KSxyLmQodCwiY3JlYXRlUm91bmQiLGZ1bmN0aW9uKCl7cmV0dXJuIEZhfSksci5kKHQsImNyZWF0ZUxvZyIsZnVuY3Rpb24oKXtyZXR1cm4gSGF9KSxyLmQodCwiY3JlYXRlTG9nMXAiLGZ1bmN0aW9uKCl7cmV0dXJuIEdhfSksci5kKHQsImNyZWF0ZU50aFJvb3RzIixmdW5jdGlvbigpe3JldHVybiBKYX0pLHIuZCh0LCJjcmVhdGVEb3RQb3ciLGZ1bmN0aW9uKCl7cmV0dXJuIFlhfSksci5kKHQsImNyZWF0ZURvdERpdmlkZSIsZnVuY3Rpb24oKXtyZXR1cm4gS2F9KSxyLmQodCwiY3JlYXRlTHNvbHZlIixmdW5jdGlvbigpe3JldHVybiByb30pLHIuZCh0LCJjcmVhdGVVc29sdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGlvfSksci5kKHQsImNyZWF0ZUxlZnRTaGlmdCIsZnVuY3Rpb24oKXtyZXR1cm4gY299KSxyLmQodCwiY3JlYXRlUmlnaHRBcml0aFNoaWZ0IixmdW5jdGlvbigpe3JldHVybiBwb30pLHIuZCh0LCJjcmVhdGVSaWdodExvZ1NoaWZ0IixmdW5jdGlvbigpe3JldHVybiB5b30pLHIuZCh0LCJjcmVhdGVBbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIHZvfSksci5kKHQsImNyZWF0ZUNvbXBhcmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHdvfSksci5kKHQsImNyZWF0ZUNvbXBhcmVOYXR1cmFsIixmdW5jdGlvbigpe3JldHVybiBFb30pLHIuZCh0LCJjcmVhdGVDb21wYXJlVGV4dCIsZnVuY3Rpb24oKXtyZXR1cm4gQ299KSxyLmQodCwiY3JlYXRlRXF1YWwiLGZ1bmN0aW9uKCl7cmV0dXJuIElvfSksci5kKHQsImNyZWF0ZUVxdWFsVGV4dCIsZnVuY3Rpb24oKXtyZXR1cm4ga299KSxyLmQodCwiY3JlYXRlU21hbGxlciIsZnVuY3Rpb24oKXtyZXR1cm4gUm99KSxyLmQodCwiY3JlYXRlU21hbGxlckVxIixmdW5jdGlvbigpe3JldHVybiBVb30pLHIuZCh0LCJjcmVhdGVMYXJnZXIiLGZ1bmN0aW9uKCl7cmV0dXJuICRvfSksci5kKHQsImNyZWF0ZUxhcmdlckVxIixmdW5jdGlvbigpe3JldHVybiBWb30pLHIuZCh0LCJjcmVhdGVEZWVwRXF1YWwiLGZ1bmN0aW9uKCl7cmV0dXJuIFlvfSksci5kKHQsImNyZWF0ZVVuZXF1YWwiLGZ1bmN0aW9uKCl7cmV0dXJuIEtvfSksci5kKHQsImNyZWF0ZVBhcnRpdGlvblNlbGVjdCIsZnVuY3Rpb24oKXtyZXR1cm4gcnN9KSxyLmQodCwiY3JlYXRlU29ydCIsZnVuY3Rpb24oKXtyZXR1cm4gaXN9KSxyLmQodCwiY3JlYXRlTWF4IixmdW5jdGlvbigpe3JldHVybiBvc30pLHIuZCh0LCJjcmVhdGVNaW4iLGZ1bmN0aW9uKCl7cmV0dXJuIHVzfSksci5kKHQsImNyZWF0ZUltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MiLGZ1bmN0aW9uKCl7cmV0dXJuIGZzfSksci5kKHQsImNyZWF0ZUluZGV4Q2xhc3MiLGZ1bmN0aW9uKCl7cmV0dXJuIHBzfSksci5kKHQsImNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzcyIsZnVuY3Rpb24oKXtyZXR1cm4gaHN9KSxyLmQodCwiY3JlYXRlU3BhQ2xhc3MiLGZ1bmN0aW9uKCl7cmV0dXJuIHlzfSksci5kKHQsImNyZWF0ZVVuaXRDbGFzcyIsZnVuY3Rpb24oKXtyZXR1cm4ganN9KSxyLmQodCwiY3JlYXRlVW5pdEZ1bmN0aW9uIixmdW5jdGlvbigpe3JldHVybiBTc30pLHIuZCh0LCJjcmVhdGVTcGFyc2UiLGZ1bmN0aW9uKCl7cmV0dXJuIENzfSksci5kKHQsImNyZWF0ZUNyZWF0ZVVuaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIElzfSksci5kKHQsImNyZWF0ZUFjb3MiLGZ1bmN0aW9uKCl7cmV0dXJuIEJzfSksci5kKHQsImNyZWF0ZUFjb3NoIixmdW5jdGlvbigpe3JldHVybiBLc30pLHIuZCh0LCJjcmVhdGVBY290IixmdW5jdGlvbigpe3JldHVybiB0dX0pLHIuZCh0LCJjcmVhdGVBY290aCIsZnVuY3Rpb24oKXtyZXR1cm4gbnV9KSxyLmQodCwiY3JlYXRlQWNzYyIsZnVuY3Rpb24oKXtyZXR1cm4gYXV9KSxyLmQodCwiY3JlYXRlQWNzY2giLGZ1bmN0aW9uKCl7cmV0dXJuIHN1fSksci5kKHQsImNyZWF0ZUFzZWMiLGZ1bmN0aW9uKCl7cmV0dXJuIGN1fSksci5kKHQsImNyZWF0ZUFzZWNoIixmdW5jdGlvbigpe3JldHVybiBsdX0pLHIuZCh0LCJjcmVhdGVBc2luIixmdW5jdGlvbigpe3JldHVybiBtdX0pLHIuZCh0LCJjcmVhdGVBc2luaCIsZnVuY3Rpb24oKXtyZXR1cm4gZHV9KSxyLmQodCwiY3JlYXRlQXRhbiIsZnVuY3Rpb24oKXtyZXR1cm4gZ3V9KSxyLmQodCwiY3JlYXRlQXRhbjIiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ1fSksci5kKHQsImNyZWF0ZUF0YW5oIixmdW5jdGlvbigpe3JldHVybiB3dX0pLHIuZCh0LCJjcmVhdGVDb3MiLGZ1bmN0aW9uKCl7cmV0dXJuIE91fSksci5kKHQsImNyZWF0ZUNvc2giLGZ1bmN0aW9uKCl7cmV0dXJuIGp1fSksci5kKHQsImNyZWF0ZUNvdCIsZnVuY3Rpb24oKXtyZXR1cm4gU3V9KSxyLmQodCwiY3JlYXRlQ290aCIsZnVuY3Rpb24oKXtyZXR1cm4gQ3V9KSxyLmQodCwiY3JlYXRlQ3NjIixmdW5jdGlvbigpe3JldHVybiBfdX0pLHIuZCh0LCJjcmVhdGVDc2NoIixmdW5jdGlvbigpe3JldHVybiBxdX0pLHIuZCh0LCJjcmVhdGVTZWMiLGZ1bmN0aW9uKCl7cmV0dXJuIGt1fSksci5kKHQsImNyZWF0ZVNlY2giLGZ1bmN0aW9uKCl7cmV0dXJuIER1fSksci5kKHQsImNyZWF0ZVNpbiIsZnVuY3Rpb24oKXtyZXR1cm4gUHV9KSxyLmQodCwiY3JlYXRlU2luaCIsZnVuY3Rpb24oKXtyZXR1cm4gVXV9KSxyLmQodCwiY3JlYXRlVGFuIixmdW5jdGlvbigpe3JldHVybiBIdX0pLHIuZCh0LCJjcmVhdGVUYW5oIixmdW5jdGlvbigpe3JldHVybiBHdX0pLHIuZCh0LCJjcmVhdGVTZXRDYXJ0ZXNpYW4iLGZ1bmN0aW9uKCl7cmV0dXJuIEp1fSksci5kKHQsImNyZWF0ZVNldERpZmZlcmVuY2UiLGZ1bmN0aW9uKCl7cmV0dXJuIFh1fSksci5kKHQsImNyZWF0ZVNldERpc3RpbmN0IixmdW5jdGlvbigpe3JldHVybiBlY30pLHIuZCh0LCJjcmVhdGVTZXRJbnRlcnNlY3QiLGZ1bmN0aW9uKCl7cmV0dXJuIG5jfSksci5kKHQsImNyZWF0ZVNldElzU3Vic2V0IixmdW5jdGlvbigpe3JldHVybiBvY30pLHIuZCh0LCJjcmVhdGVTZXRNdWx0aXBsaWNpdHkiLGZ1bmN0aW9uKCl7cmV0dXJuIGNjfSksci5kKHQsImNyZWF0ZVNldFBvd2Vyc2V0IixmdW5jdGlvbigpe3JldHVybiBwY30pLHIuZCh0LCJjcmVhdGVTZXRTaXplIixmdW5jdGlvbigpe3JldHVybiBkY30pLHIuZCh0LCJjcmVhdGVTZXRTeW1EaWZmZXJlbmNlIixmdW5jdGlvbigpe3JldHVybiB2Y30pLHIuZCh0LCJjcmVhdGVTZXRVbmlvbiIsZnVuY3Rpb24oKXtyZXR1cm4gd2N9KSxyLmQodCwiY3JlYXRlQWRkIixmdW5jdGlvbigpe3JldHVybiBPY30pLHIuZCh0LCJjcmVhdGVIeXBvdCIsZnVuY3Rpb24oKXtyZXR1cm4gamN9KSxyLmQodCwiY3JlYXRlTm9ybSIsZnVuY3Rpb24oKXtyZXR1cm4gU2N9KSxyLmQodCwiY3JlYXRlRG90IixmdW5jdGlvbigpe3JldHVybiBDY30pLHIuZCh0LCJjcmVhdGVUcmFjZSIsZnVuY3Rpb24oKXtyZXR1cm4gX2N9KSxyLmQodCwiY3JlYXRlSW5kZXgiLGZ1bmN0aW9uKCl7cmV0dXJuIHFjfSksci5kKHQsImNyZWF0ZU5vZGUiLGZ1bmN0aW9uKCl7cmV0dXJuIERjfSksci5kKHQsImNyZWF0ZUFjY2Vzc29yTm9kZSIsZnVuY3Rpb24oKXtyZXR1cm4gTGN9KSxyLmQodCwiY3JlYXRlQXJyYXlOb2RlIixmdW5jdGlvbigpe3JldHVybiAkY30pLHIuZCh0LCJjcmVhdGVBc3NpZ25tZW50Tm9kZSIsZnVuY3Rpb24oKXtyZXR1cm4gWGN9KSxyLmQodCwiY3JlYXRlQmxvY2tOb2RlIixmdW5jdGlvbigpe3JldHVybiBLY30pLHIuZCh0LCJjcmVhdGVDb25kaXRpb25hbE5vZGUiLGZ1bmN0aW9uKCl7cmV0dXJuIHRmfSksci5kKHQsImNyZWF0ZUNvbnN0YW50Tm9kZSIsZnVuY3Rpb24oKXtyZXR1cm4gcGZ9KSxyLmQodCwiY3JlYXRlRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSIsZnVuY3Rpb24oKXtyZXR1cm4gaGZ9KSxyLmQodCwiY3JlYXRlSW5kZXhOb2RlIixmdW5jdGlvbigpe3JldHVybiBnZn0pLHIuZCh0LCJjcmVhdGVPYmplY3ROb2RlIixmdW5jdGlvbigpe3JldHVybiB4Zn0pLHIuZCh0LCJjcmVhdGVPcGVyYXRvck5vZGUiLGZ1bmN0aW9uKCl7cmV0dXJuIE5mfSksci5kKHQsImNyZWF0ZVBhcmVudGhlc2lzTm9kZSIsZnVuY3Rpb24oKXtyZXR1cm4gTWZ9KSxyLmQodCwiY3JlYXRlUmFuZ2VOb2RlIixmdW5jdGlvbigpe3JldHVybiBFZn0pLHIuZCh0LCJjcmVhdGVSZWxhdGlvbmFsTm9kZSIsZnVuY3Rpb24oKXtyZXR1cm4gQWZ9KSxyLmQodCwiY3JlYXRlU3ltYm9sTm9kZSIsZnVuY3Rpb24oKXtyZXR1cm4gVGZ9KSxyLmQodCwiY3JlYXRlRnVuY3Rpb25Ob2RlIixmdW5jdGlvbigpe3JldHVybiBCZn0pLHIuZCh0LCJjcmVhdGVQYXJzZSIsZnVuY3Rpb24oKXtyZXR1cm4gRGZ9KSxyLmQodCwiY3JlYXRlQ29tcGlsZSIsZnVuY3Rpb24oKXtyZXR1cm4gRmZ9KSxyLmQodCwiY3JlYXRlRXZhbHVhdGUiLGZ1bmN0aW9uKCl7cmV0dXJuIEhmfSksci5kKHQsImNyZWF0ZURlcHJlY2F0ZWRFdmFsIixmdW5jdGlvbigpe3JldHVybiAkZn0pLHIuZCh0LCJjcmVhdGVQYXJzZXJDbGFzcyIsZnVuY3Rpb24oKXtyZXR1cm4gWmZ9KSxyLmQodCwiY3JlYXRlUGFyc2VyIixmdW5jdGlvbigpe3JldHVybiBKZn0pLHIuZCh0LCJjcmVhdGVMdXAiLGZ1bmN0aW9uKCl7cmV0dXJuIFlmfSksci5kKHQsImNyZWF0ZVFyIixmdW5jdGlvbigpe3JldHVybiBLZn0pLHIuZCh0LCJjcmVhdGVTbHUiLGZ1bmN0aW9uKCl7cmV0dXJuIHZsfSksci5kKHQsImNyZWF0ZUx1c29sdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIE5sfSksci5kKHQsImNyZWF0ZUhlbHBDbGFzcyIsZnVuY3Rpb24oKXtyZXR1cm4gTWx9KSxyLmQodCwiY3JlYXRlQ2hhaW5DbGFzcyIsZnVuY3Rpb24oKXtyZXR1cm4gRWx9KSxyLmQodCwiY3JlYXRlSGVscCIsZnVuY3Rpb24oKXtyZXR1cm4gQmx9KSxyLmQodCwiY3JlYXRlQ2hhaW4iLGZ1bmN0aW9uKCl7cmV0dXJuIHpsfSksci5kKHQsImNyZWF0ZURldCIsZnVuY3Rpb24oKXtyZXR1cm4gUmx9KSxyLmQodCwiY3JlYXRlSW52IixmdW5jdGlvbigpe3JldHVybiBGbH0pLHIuZCh0LCJjcmVhdGVFaWdzIixmdW5jdGlvbigpe3JldHVybiBMbH0pLHIuZCh0LCJjcmVhdGVFeHBtIixmdW5jdGlvbigpe3JldHVybiAkbH0pLHIuZCh0LCJjcmVhdGVTcXJ0bSIsZnVuY3Rpb24oKXtyZXR1cm4gWmx9KSxyLmQodCwiY3JlYXRlRGl2aWRlIixmdW5jdGlvbigpe3JldHVybiBKbH0pLHIuZCh0LCJjcmVhdGVEaXN0YW5jZSIsZnVuY3Rpb24oKXtyZXR1cm4gWGx9KSxyLmQodCwiY3JlYXRlSW50ZXJzZWN0IixmdW5jdGlvbigpe3JldHVybiBLbH0pLHIuZCh0LCJjcmVhdGVTdW0iLGZ1bmN0aW9uKCl7cmV0dXJuIHRwfSksci5kKHQsImNyZWF0ZU1lYW4iLGZ1bmN0aW9uKCl7cmV0dXJuIG5wfSksci5kKHQsImNyZWF0ZU1lZGlhbiIsZnVuY3Rpb24oKXtyZXR1cm4gYXB9KSxyLmQodCwiY3JlYXRlTWFkIixmdW5jdGlvbigpe3JldHVybiBzcH0pLHIuZCh0LCJjcmVhdGVWYXJpYW5jZSIsZnVuY3Rpb24oKXtyZXR1cm4gbHB9KSxyLmQodCwiY3JlYXRlRGVwcmVjYXRlZFZhciIsZnVuY3Rpb24oKXtyZXR1cm4gcHB9KSxyLmQodCwiY3JlYXRlUXVhbnRpbGVTZXEiLGZ1bmN0aW9uKCl7cmV0dXJuIGhwfSksci5kKHQsImNyZWF0ZVN0ZCIsZnVuY3Rpb24oKXtyZXR1cm4geXB9KSxyLmQodCwiY3JlYXRlQ29tYmluYXRpb25zIixmdW5jdGlvbigpe3JldHVybiB3cH0pLHIuZCh0LCJjcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwIixmdW5jdGlvbigpe3JldHVybiBqcH0pLHIuZCh0LCJjcmVhdGVHYW1tYSIsZnVuY3Rpb24oKXtyZXR1cm4gX3B9KSxyLmQodCwiY3JlYXRlRmFjdG9yaWFsIixmdW5jdGlvbigpe3JldHVybiBCcH0pLHIuZCh0LCJjcmVhdGVLbGRpdmVyZ2VuY2UiLGZ1bmN0aW9uKCl7cmV0dXJuIERwfSksci5kKHQsImNyZWF0ZU11bHRpbm9taWFsIixmdW5jdGlvbigpe3JldHVybiBGcH0pLHIuZCh0LCJjcmVhdGVQZXJtdXRhdGlvbnMiLGZ1bmN0aW9uKCl7cmV0dXJuIEhwfSksci5kKHQsImNyZWF0ZVBpY2tSYW5kb20iLGZ1bmN0aW9uKCl7cmV0dXJuIFlwfSksci5kKHQsImNyZWF0ZVJhbmRvbSIsZnVuY3Rpb24oKXtyZXR1cm4gZW19KSxyLmQodCwiY3JlYXRlUmFuZG9tSW50IixmdW5jdGlvbigpe3JldHVybiBubX0pLHIuZCh0LCJjcmVhdGVTdGlybGluZ1MyIixmdW5jdGlvbigpe3JldHVybiBvbX0pLHIuZCh0LCJjcmVhdGVCZWxsTnVtYmVycyIsZnVuY3Rpb24oKXtyZXR1cm4gY219KSxyLmQodCwiY3JlYXRlQ2F0YWxhbiIsZnVuY3Rpb24oKXtyZXR1cm4gcG19KSxyLmQodCwiY3JlYXRlQ29tcG9zaXRpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIGRtfSksci5kKHQsImNyZWF0ZVNpbXBsaWZ5IixmdW5jdGlvbigpe3JldHVybiBFbX0pLHIuZCh0LCJjcmVhdGVEZXJpdmF0aXZlIixmdW5jdGlvbigpe3JldHVybiBBbX0pLHIuZCh0LCJjcmVhdGVSYXRpb25hbGl6ZSIsZnVuY3Rpb24oKXtyZXR1cm4gX219KSxyLmQodCwiY3JlYXRlUmV2aXZlciIsZnVuY3Rpb24oKXtyZXR1cm4gcW19KSxyLmQodCwiY3JlYXRlRSIsZnVuY3Rpb24oKXtyZXR1cm4gJG19KSxyLmQodCwiY3JlYXRlVXBwZXJjYXNlRSIsZnVuY3Rpb24oKXtyZXR1cm4gZWh9KSxyLmQodCwiY3JlYXRlRmFsc2UiLGZ1bmN0aW9uKCl7cmV0dXJuIFJtfSksci5kKHQsImNyZWF0ZUkiLGZ1bmN0aW9uKCl7cmV0dXJuIFFtfSksci5kKHQsImNyZWF0ZUluZmluaXR5IixmdW5jdGlvbigpe3JldHVybiBGbX0pLHIuZCh0LCJjcmVhdGVMTjEwIixmdW5jdGlvbigpe3JldHVybiBWbX0pLHIuZCh0LCJjcmVhdGVMTjIiLGZ1bmN0aW9uKCl7cmV0dXJuIFptfSksci5kKHQsImNyZWF0ZUxPRzEwRSIsZnVuY3Rpb24oKXtyZXR1cm4gV219KSxyLmQodCwiY3JlYXRlTE9HMkUiLGZ1bmN0aW9uKCl7cmV0dXJuIEptfSksci5kKHQsImNyZWF0ZU5hTiIsZnVuY3Rpb24oKXtyZXR1cm4gVW19KSxyLmQodCwiY3JlYXRlTnVsbCIsZnVuY3Rpb24oKXtyZXR1cm4gUG19KSxyLmQodCwiY3JlYXRlUGhpIixmdW5jdGlvbigpe3JldHVybiBHbX0pLHIuZCh0LCJjcmVhdGVQaSIsZnVuY3Rpb24oKXtyZXR1cm4gTG19KSxyLmQodCwiY3JlYXRlVXBwZXJjYXNlUGkiLGZ1bmN0aW9uKCl7cmV0dXJuIEttfSksci5kKHQsImNyZWF0ZVNRUlQxXzIiLGZ1bmN0aW9uKCl7cmV0dXJuIFltfSksci5kKHQsImNyZWF0ZVNRUlQyIixmdW5jdGlvbigpe3JldHVybiBYbX0pLHIuZCh0LCJjcmVhdGVUYXUiLGZ1bmN0aW9uKCl7cmV0dXJuIEhtfSksci5kKHQsImNyZWF0ZVRydWUiLGZ1bmN0aW9uKCl7cmV0dXJuIERtfSksci5kKHQsImNyZWF0ZVZlcnNpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIHRofSksci5kKHQsImNyZWF0ZUF0b21pY01hc3MiLGZ1bmN0aW9uKCl7cmV0dXJuIElofSksci5kKHQsImNyZWF0ZUF2b2dhZHJvIixmdW5jdGlvbigpe3JldHVybiBxaH0pLHIuZCh0LCJjcmVhdGVCb2hyTWFnbmV0b24iLGZ1bmN0aW9uKCl7cmV0dXJuIHBofSksci5kKHQsImNyZWF0ZUJvaHJSYWRpdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHZofSksci5kKHQsImNyZWF0ZUJvbHR6bWFubiIsZnVuY3Rpb24oKXtyZXR1cm4gQmh9KSxyLmQodCwiY3JlYXRlQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGJofSksci5kKHQsImNyZWF0ZUNvbmR1Y3RhbmNlUXVhbnR1bSIsZnVuY3Rpb24oKXtyZXR1cm4gbWh9KSxyLmQodCwiY3JlYXRlQ291bG9tYiIsZnVuY3Rpb24oKXtyZXR1cm4gZmh9KSxyLmQodCwiY3JlYXRlRGV1dGVyb25NYXNzIixmdW5jdGlvbigpe3JldHVybiBqaH0pLHIuZCh0LCJjcmVhdGVFZmltb3ZGYWN0b3IiLGZ1bmN0aW9uKCl7cmV0dXJuIF9ofSksci5kKHQsImNyZWF0ZUVsZWN0cmljQ29uc3RhbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIHVofSksci5kKHQsImNyZWF0ZUVsZWN0cm9uTWFzcyIsZnVuY3Rpb24oKXtyZXR1cm4geGh9KSxyLmQodCwiY3JlYXRlRWxlbWVudGFyeUNoYXJnZSIsZnVuY3Rpb24oKXtyZXR1cm4gbGh9KSxyLmQodCwiY3JlYXRlRmFyYWRheSIsZnVuY3Rpb24oKXtyZXR1cm4ga2h9KSxyLmQodCwiY3JlYXRlRmVybWlDb3VwbGluZyIsZnVuY3Rpb24oKXtyZXR1cm4gd2h9KSxyLmQodCwiY3JlYXRlRmluZVN0cnVjdHVyZSIsZnVuY3Rpb24oKXtyZXR1cm4gTmh9KSxyLmQodCwiY3JlYXRlRmlyc3RSYWRpYXRpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIHpofSksci5kKHQsImNyZWF0ZUdhc0NvbnN0YW50IixmdW5jdGlvbigpe3JldHVybiBSaH0pLHIuZCh0LCJjcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50IixmdW5jdGlvbigpe3JldHVybiBpaH0pLHIuZCh0LCJjcmVhdGVHcmF2aXR5IixmdW5jdGlvbigpe3JldHVybiBWaH0pLHIuZCh0LCJjcmVhdGVIYXJ0cmVlRW5lcmd5IixmdW5jdGlvbigpe3JldHVybiBPaH0pLHIuZCh0LCJjcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtIixmdW5jdGlvbigpe3JldHVybiBoaH0pLHIuZCh0LCJjcmVhdGVLbGl0emluZyIsZnVuY3Rpb24oKXtyZXR1cm4gZ2h9KSxyLmQodCwiY3JlYXRlTG9zY2htaWR0IixmdW5jdGlvbigpe3JldHVybiBEaH0pLHIuZCh0LCJjcmVhdGVNYWduZXRpY0NvbnN0YW50IixmdW5jdGlvbigpe3JldHVybiBzaH0pLHIuZCh0LCJjcmVhdGVNYWduZXRpY0ZsdXhRdWFudHVtIixmdW5jdGlvbigpe3JldHVybiBkaH0pLHIuZCh0LCJjcmVhdGVNb2xhck1hc3MiLGZ1bmN0aW9uKCl7cmV0dXJuIEdofSksci5kKHQsImNyZWF0ZU1vbGFyTWFzc0MxMiIsZnVuY3Rpb24oKXtyZXR1cm4gWmh9KSxyLmQodCwiY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudCIsZnVuY3Rpb24oKXtyZXR1cm4gUGh9KSxyLmQodCwiY3JlYXRlTW9sYXJWb2x1bWUiLGZ1bmN0aW9uKCl7cmV0dXJuIEZofSksci5kKHQsImNyZWF0ZU5ldXRyb25NYXNzIixmdW5jdGlvbigpe3JldHVybiBFaH0pLHIuZCh0LCJjcmVhdGVOdWNsZWFyTWFnbmV0b24iLGZ1bmN0aW9uKCl7cmV0dXJuIHlofSksci5kKHQsImNyZWF0ZVBsYW5ja0NoYXJnZSIsZnVuY3Rpb24oKXtyZXR1cm4gWGh9KSxyLmQodCwiY3JlYXRlUGxhbmNrQ29uc3RhbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGFofSksci5kKHQsImNyZWF0ZVBsYW5ja0xlbmd0aCIsZnVuY3Rpb24oKXtyZXR1cm4gSmh9KSxyLmQodCwiY3JlYXRlUGxhbmNrTWFzcyIsZnVuY3Rpb24oKXtyZXR1cm4gV2h9KSxyLmQodCwiY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmUiLGZ1bmN0aW9uKCl7cmV0dXJuIFFofSksci5kKHQsImNyZWF0ZVBsYW5ja1RpbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIFlofSksci5kKHQsImNyZWF0ZVByb3Rvbk1hc3MiLGZ1bmN0aW9uKCl7cmV0dXJuIE1ofSksci5kKHQsImNyZWF0ZVF1YW50dW1PZkNpcmN1bGF0aW9uIixmdW5jdGlvbigpe3JldHVybiBTaH0pLHIuZCh0LCJjcmVhdGVSZWR1Y2VkUGxhbmNrQ29uc3RhbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIG9ofSksci5kKHQsImNyZWF0ZVJ5ZGJlcmciLGZ1bmN0aW9uKCl7cmV0dXJuIEFofSksci5kKHQsImNyZWF0ZVNhY2t1clRldHJvZGUiLGZ1bmN0aW9uKCl7cmV0dXJuIFVofSksci5kKHQsImNyZWF0ZVNlY29uZFJhZGlhdGlvbiIsZnVuY3Rpb24oKXtyZXR1cm4gTGh9KSxyLmQodCwiY3JlYXRlU3BlZWRPZkxpZ2h0IixmdW5jdGlvbigpe3JldHVybiBuaH0pLHIuZCh0LCJjcmVhdGVTdGVmYW5Cb2x0em1hbm4iLGZ1bmN0aW9uKCl7cmV0dXJuIEhofSksci5kKHQsImNyZWF0ZVRob21zb25Dcm9zc1NlY3Rpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIENofSksci5kKHQsImNyZWF0ZVZhY3V1bUltcGVkYW5jZSIsZnVuY3Rpb24oKXtyZXR1cm4gY2h9KSxyLmQodCwiY3JlYXRlV2Vha01peGluZ0FuZ2xlIixmdW5jdGlvbigpe3JldHVybiBUaH0pLHIuZCh0LCJjcmVhdGVXaWVuRGlzcGxhY2VtZW50IixmdW5jdGlvbigpe3JldHVybiAkaH0pLHIuZCh0LCJjcmVhdGVBcHBseVRyYW5zZm9ybSIsZnVuY3Rpb24oKXtyZXR1cm4gcmR9KSxyLmQodCwiY3JlYXRlQ29sdW1uVHJhbnNmb3JtIixmdW5jdGlvbigpe3JldHVybiBpZH0pLHIuZCh0LCJjcmVhdGVGaWx0ZXJUcmFuc2Zvcm0iLGZ1bmN0aW9uKCl7cmV0dXJuIHNkfSksci5kKHQsImNyZWF0ZUZvckVhY2hUcmFuc2Zvcm0iLGZ1bmN0aW9uKCl7cmV0dXJuIGZkfSksci5kKHQsImNyZWF0ZUluZGV4VHJhbnNmb3JtIixmdW5jdGlvbigpe3JldHVybiBwZH0pLHIuZCh0LCJjcmVhdGVNYXBUcmFuc2Zvcm0iLGZ1bmN0aW9uKCl7cmV0dXJuIGhkfSksci5kKHQsImNyZWF0ZU1heFRyYW5zZm9ybSIsZnVuY3Rpb24oKXtyZXR1cm4gZ2R9KSxyLmQodCwiY3JlYXRlTWVhblRyYW5zZm9ybSIsZnVuY3Rpb24oKXtyZXR1cm4gYmR9KSxyLmQodCwiY3JlYXRlTWluVHJhbnNmb3JtIixmdW5jdGlvbigpe3JldHVybiB3ZH0pLHIuZCh0LCJjcmVhdGVSYW5nZVRyYW5zZm9ybSIsZnVuY3Rpb24oKXtyZXR1cm4gT2R9KSxyLmQodCwiY3JlYXRlUm93VHJhbnNmb3JtIixmdW5jdGlvbigpe3JldHVybiBqZH0pLHIuZCh0LCJjcmVhdGVTdWJzZXRUcmFuc2Zvcm0iLGZ1bmN0aW9uKCl7cmV0dXJuIFNkfSksci5kKHQsImNyZWF0ZUNvbmNhdFRyYW5zZm9ybSIsZnVuY3Rpb24oKXtyZXR1cm4gQ2R9KSxyLmQodCwiY3JlYXRlU3RkVHJhbnNmb3JtIixmdW5jdGlvbigpe3JldHVybiBfZH0pLHIuZCh0LCJjcmVhdGVTdW1UcmFuc2Zvcm0iLGZ1bmN0aW9uKCl7cmV0dXJuIHFkfSksci5kKHQsImNyZWF0ZVZhcmlhbmNlVHJhbnNmb3JtIixmdW5jdGlvbigpe3JldHVybiB6ZH0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3Iucih0KTt2YXIgYj1yKDMpLG49cigxOCksbT1yLm4obik7dmFyIHg9cigxKSx3PXIoMCksTj1yKDIpLE89cigxMyksTT1yKDgpO2Z1bmN0aW9uIGooZSl7cmV0dXJuKGo9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBoKHUsYyxmLGwpe2Z1bmN0aW9uIHMoZSx0LHIpe3ZhciBuLGksYSxvO2lmKHIud3JhcCYmImZ1bmN0aW9uIj09dHlwZW9mIHQmJih0PWZ1bmN0aW9uKGkpe2Z1bmN0aW9uIGUoKXtmb3IodmFyIGU9W10sdD0wLHI9YXJndW1lbnRzLmxlbmd0aDt0PHI7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07ZVt0XT1uJiZuLnZhbHVlT2YoKX1yZXR1cm4gaS5hcHBseShmLGUpfWkudHJhbnNmb3JtJiYoZS50cmFuc2Zvcm09aS50cmFuc2Zvcm0pO3JldHVybiBlfSh0KSksImZ1bmN0aW9uIj09dHlwZW9mKG89dCkmJiJzdHJpbmciPT10eXBlb2Ygby5zaWduYXR1cmUmJih0PXUoZSwobj17fSxpPXQuc2lnbmF0dXJlLGE9dCxpIGluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4saSx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5baV09YSxuKSkpLGQoZltlXSkmJmQodCkpcmV0dXJuIHQ9ci5vdmVycmlkZT91KGUsdC5zaWduYXR1cmVzKTp1KGZbZV0sdCksZltlXT10LGRlbGV0ZSBsW2VdLHAoZSx0KSx2b2lkIGYuZW1pdCgiaW1wb3J0IixlLGZ1bmN0aW9uKCl7cmV0dXJuIHR9KTtpZih2b2lkIDA9PT1mW2VdfHxyLm92ZXJyaWRlKXJldHVybiBmW2VdPXQsZGVsZXRlIGxbZV0scChlLHQpLHZvaWQgZi5lbWl0KCJpbXBvcnQiLGUsZnVuY3Rpb24oKXtyZXR1cm4gdH0pO2lmKCFyLnNpbGVudCl0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbXBvcnQgIicrZSsnIjogYWxyZWFkeSBleGlzdHMnKX1mdW5jdGlvbiBwKGUsdCl7dCYmImZ1bmN0aW9uIj09dHlwZW9mIHQudHJhbnNmb3JtPyhmLmV4cHJlc3Npb24udHJhbnNmb3JtW2VdPXQudHJhbnNmb3JtLHIoZSkmJihmLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm1bZV09dC50cmFuc2Zvcm0pKTooZGVsZXRlIGYuZXhwcmVzc2lvbi50cmFuc2Zvcm1bZV0scihlKSYmKGYuZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybVtlXT10KSl9ZnVuY3Rpb24gbShlKXtkZWxldGUgZi5leHByZXNzaW9uLnRyYW5zZm9ybVtlXSxyKGUpP2YuZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybVtlXT1mW2VdOmRlbGV0ZSBmLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm1bZV19ZnVuY3Rpb24gaChyLG4sZSl7dmFyIGk9Mjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1lP2U6ci5mbjtpZihPYmplY3QoTi5iKShpLCIuIikpdGhyb3cgbmV3IEVycm9yKCJGYWN0b3J5IG5hbWUgc2hvdWxkIG5vdCBjb250YWluIGEgbmVzdGVkIHBhdGguIE5hbWU6ICIrSlNPTi5zdHJpbmdpZnkoaSkpO2Z1bmN0aW9uIHQoKXt2YXIgdD17fTtyLmRlcGVuZGVuY2llcy5tYXAody5jKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKE9iamVjdChOLmIpKGUsIi4iKSl0aHJvdyBuZXcgRXJyb3IoIkZhY3RvcnkgZGVwZW5kZW5jeSBzaG91bGQgbm90IGNvbnRhaW4gYSBuZXN0ZWQgcGF0aC4gTmFtZTogIitKU09OLnN0cmluZ2lmeShlKSk7Im1hdGgiPT09ZT90Lm1hdGg9ZjoibWF0aFdpdGhUcmFuc2Zvcm0iPT09ZT90Lm1hdGhXaXRoVHJhbnNmb3JtPWYuZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybToiY2xhc3NlcyI9PT1lP3QuY2xhc3Nlcz1mOnRbZV09ZltlXX0pO3ZhciBlPXIodCk7aWYoZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUudHJhbnNmb3JtKXRocm93IG5ldyBFcnJvcignVHJhbnNmb3JtcyBjYW5ub3QgYmUgYXR0YWNoZWQgdG8gZmFjdG9yeSBmdW5jdGlvbnMuIFBsZWFzZSBjcmVhdGUgYSBzZXBhcmF0ZSBmdW5jdGlvbiBmb3IgaXQgd2l0aCBleHBvcnRzLnBhdGg9ImV4cHJlc3Npb24udHJhbnNmb3JtIicpO2lmKHZvaWQgMD09PXN8fG4ub3ZlcnJpZGUpcmV0dXJuIGU7aWYoZChzKSYmZChlKSlyZXR1cm4gdShzLGUpO2lmKG4uc2lsZW50KXJldHVybiBzO3Rocm93IG5ldyBFcnJvcignQ2Fubm90IGltcG9ydCAiJytpKyciOiBhbHJlYWR5IGV4aXN0cycpfXZhciBhPXYocik/Zi5leHByZXNzaW9uLnRyYW5zZm9ybTpmLG89aSBpbiBmLmV4cHJlc3Npb24udHJhbnNmb3JtLHM9T2JqZWN0KGIuZikoYSxpKT9hW2ldOnZvaWQgMDtyLm1ldGEmJiExPT09ci5tZXRhLmxhenk/YVtpXT10KCk6T2JqZWN0KGIuaCkoYSxpLHQpLHMmJm8/bShpKToodihyKXx8ZyhyKSkmJk9iamVjdChiLmgpKGYuZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybSxpLGZ1bmN0aW9uKCl7cmV0dXJuIGFbaV19KSxsW2ldPXIsZi5lbWl0KCJpbXBvcnQiLGksdCl9ZnVuY3Rpb24gZChlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmIm9iamVjdCI9PT1qKGUuc2lnbmF0dXJlcyl9ZnVuY3Rpb24gcihlKXtyZXR1cm4hT2JqZWN0KGIuZikodCxlKX1mdW5jdGlvbiB5KGUpe3JldHVybiB2b2lkIDA9PT1lLnBhdGgmJiFPYmplY3QoYi5mKSh0LGUubmFtZSl9ZnVuY3Rpb24gZyhlKXtyZXR1cm4hKC0xIT09ZS5mbi5pbmRleE9mKCIuIil8fE9iamVjdChiLmYpKHQsZS5mbil8fGUubWV0YSYmZS5tZXRhLmlzQ2xhc3MpfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIHZvaWQgMCE9PWUmJnZvaWQgMCE9PWUubWV0YSYmITA9PT1lLm1ldGEuaXNUcmFuc2Zvcm1GdW5jdGlvbn12YXIgdD17ZXhwcmVzc2lvbjohMCx0eXBlOiEwLGRvY3M6ITAsZXJyb3I6ITAsanNvbjohMCxjaGFpbjohMH07cmV0dXJuIGZ1bmN0aW9uKGUsbyl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aDtpZigxIT09dCYmMiE9PXQpdGhyb3cgbmV3IE8uYSgiaW1wb3J0Iix0LDEsMik7bz1vfHx7fTt2YXIgcixuPXt9O2Zvcih2YXIgaSBpbiFmdW5jdGlvbiB0KHIsZSxuKXtpZihPYmplY3QoYi5nKShlKSkhZnVuY3Rpb24odCxyKXtpZihPYmplY3QoTS5hKSgiRmFjdG9yaWVzIG9mIHR5cGUgeyBuYW1lLCBmYWN0b3J5IH0gYXJlIGRlcHJlY2F0ZWQgc2luY2UgdjYuIFBsZWFzZSBjcmVhdGUgeW91ciBmYWN0b3J5IGZ1bmN0aW9ucyB1c2luZyB0aGUgbWF0aC5mYWN0b3J5IGZ1bmN0aW9uLiIpLCJzdHJpbmciPT10eXBlb2YgdC5uYW1lKXt2YXIgbj10Lm5hbWUsZT1uIGluIGYuZXhwcmVzc2lvbi50cmFuc2Zvcm0saT10LnBhdGg/T2JqZWN0KGIuaykoZix0LnBhdGgpOmYsYT1PYmplY3QoYi5mKShpLG4pP2lbbl06dm9pZCAwLG89ZnVuY3Rpb24oKXt2YXIgZT1jKHQpO2lmKGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnRyYW5zZm9ybSl0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zZm9ybXMgY2Fubm90IGJlIGF0dGFjaGVkIHRvIGZhY3RvcnkgZnVuY3Rpb25zLiBQbGVhc2UgY3JlYXRlIGEgc2VwYXJhdGUgZnVuY3Rpb24gZm9yIGl0IHdpdGggZXhwb3J0cy5wYXRoPSJleHByZXNzaW9uLnRyYW5zZm9ybSInKTtpZihkKGEpJiZkKGUpKXJldHVybiByLm92ZXJyaWRlfHwoZT11KGEsZSkpLGU7aWYodm9pZCAwPT09YXx8ci5vdmVycmlkZSlyZXR1cm4gZTtpZihyLnNpbGVudClyZXR1cm4gYTt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbXBvcnQgIicrbisnIjogYWxyZWFkeSBleGlzdHMnKX07ITEhPT10Lmxhenk/KE9iamVjdChiLmgpKGksbixvKSxlP20obik6ImV4cHJlc3Npb24udHJhbnNmb3JtIiE9PXQucGF0aCYmIXkodCl8fE9iamVjdChiLmgpKGYuZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybSxuLG8pKTooaVtuXT1vKCksZT9tKG4pOiJleHByZXNzaW9uLnRyYW5zZm9ybSIhPT10LnBhdGgmJiF5KHQpfHwoZi5leHByZXNzaW9uLm1hdGhXaXRoVHJhbnNmb3JtW25dPW8oKSkpO3ZhciBzPXQucGF0aD90LnBhdGgrIi4iK3QubmFtZTp0Lm5hbWU7bFtzXT10LGYuZW1pdCgiaW1wb3J0IixuLG8sdC5wYXRoKX1lbHNlIGModCl9KGUsbyk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKWUuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdChyLGUpfSk7ZWxzZSBpZigib2JqZWN0Ij09PWooZSkpZm9yKHZhciBpIGluIGUpT2JqZWN0KGIuZikoZSxpKSYmdChyLGVbaV0saSk7ZWxzZSBpZihPYmplY3Qody5iKShlKXx8dm9pZCAwIT09bil7dmFyIGE9T2JqZWN0KHcuYikoZSk/dihlKT9lLmZuKyIudHJhbnNmb3JtIjplLmZuOm47aWYoT2JqZWN0KGIuZikocixhKSYmclthXSE9PWUmJiFvLnNpbGVudCl0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbXBvcnQgIicrYSsnIiB0d2ljZScpO3JbYV09ZX1lbHNlIGlmKCFvLnNpbGVudCl0aHJvdyBuZXcgVHlwZUVycm9yKCJGYWN0b3J5LCBPYmplY3QsIG9yIEFycmF5IGV4cGVjdGVkIil9KG4sZSksbilpZihPYmplY3QoYi5mKShuLGkpKXt2YXIgYT1uW2ldO2lmKE9iamVjdCh3LmIpKGEpKWgoYSxvKTtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZihyPWEpfHwibnVtYmVyIj09dHlwZW9mIHJ8fCJzdHJpbmciPT10eXBlb2Ygcnx8ImJvb2xlYW4iPT10eXBlb2Ygcnx8bnVsbD09PXJ8fE9iamVjdCh4LkwpKHIpfHxPYmplY3QoeC5qKShyKXx8T2JqZWN0KHguZSkocil8fE9iamVjdCh4Lm8pKHIpfHxPYmplY3QoeC52KShyKXx8QXJyYXkuaXNBcnJheShyKSlzKGksYSxvKTtlbHNlIGlmKCFvLnNpbGVudCl0aHJvdyBuZXcgVHlwZUVycm9yKCJGYWN0b3J5LCBPYmplY3QsIG9yIEFycmF5IGV4cGVjdGVkIil9fX12YXIgZD17ZXBzaWxvbjoxZS0xMixtYXRyaXg6Ik1hdHJpeCIsbnVtYmVyOiJudW1iZXIiLHByZWNpc2lvbjo2NCxwcmVkaWN0YWJsZTohMSxyYW5kb21TZWVkOm51bGx9LHk9WyJNYXRyaXgiLCJBcnJheSJdLGc9WyJudW1iZXIiLCJCaWdOdW1iZXIiLCJGcmFjdGlvbiJdO2Z1bmN0aW9uIHYoZSx0LHIpe2lmKHZvaWQgMCE9PWVbdF0mJihvPXIscz1lW3RdLC0xPT09by5pbmRleE9mKHMpKSl7dmFyIG49KGk9cixhPWVbdF0saS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKX0pLmluZGV4T2YoYS50b0xvd2VyQ2FzZSgpKSk7LTEhPT1uPyhjb25zb2xlLndhcm4oJ1dhcm5pbmc6IFdyb25nIGNhc2luZyBmb3IgY29uZmlndXJhdGlvbiBvcHRpb24gIicrdCsnIiwgc2hvdWxkIGJlICInK3Jbbl0rJyIgaW5zdGVhZCBvZiAiJytlW3RdKyciLicpLGVbdF09cltuXSk6Y29uc29sZS53YXJuKCdXYXJuaW5nOiBVbmtub3duIHZhbHVlICInK2VbdF0rJyIgZm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uICInK3QrJyIuIEF2YWlsYWJsZSBvcHRpb25zOiAnK3IubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKCIsICIpKyIuIil9dmFyIGksYSxvLHN9dmFyIEU9cig2KSxTPXIoMTApO2Z1bmN0aW9uIEEoKXtyZXR1cm4oQT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEMoZSx0KXt2YXIgYT1BKHt9LGQsdCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIE9iamVjdC5jcmVhdGUpdGhyb3cgbmV3IEVycm9yKCJFUzUgbm90IHN1cHBvcnRlZCBieSB0aGlzIEphdmFTY3JpcHQgZW5naW5lLiBQbGVhc2UgbG9hZCB0aGUgZXM1LXNoaW0gYW5kIGVzNS1zaGFtIGxpYnJhcnkgZm9yIGNvbXBhdGliaWxpdHkuIik7dmFyIHIsbixpLG8scz0ocj17aXNOdW1iZXI6eC55LGlzQ29tcGxleDp4LmosaXNCaWdOdW1iZXI6eC5lLGlzRnJhY3Rpb246eC5vLGlzVW5pdDp4LkwsaXNTdHJpbmc6eC5JLGlzQXJyYXk6eC5iLGlzTWF0cml4Ongudixpc0NvbGxlY3Rpb246eC5pLGlzRGVuc2VNYXRyaXg6eC5uLGlzU3BhcnNlTWF0cml4OnguSCxpc1JhbmdlOnguRCxpc0luZGV4OngudCxpc0Jvb2xlYW46eC5nLGlzUmVzdWx0U2V0OnguRyxpc0hlbHA6eC5zLGlzRnVuY3Rpb246eC5wLGlzRGF0ZTp4Lm0saXNSZWdFeHA6eC5GLGlzT2JqZWN0Ongueixpc051bGw6eC54LGlzVW5kZWZpbmVkOnguSyxpc0FjY2Vzc29yTm9kZTp4LmEsaXNBcnJheU5vZGU6eC5jLGlzQXNzaWdubWVudE5vZGU6eC5kLGlzQmxvY2tOb2RlOnguZixpc0NvbmRpdGlvbmFsTm9kZTp4LmssaXNDb25zdGFudE5vZGU6eC5sLGlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTp4LnEsaXNGdW5jdGlvbk5vZGU6eC5yLGlzSW5kZXhOb2RlOngudSxpc05vZGU6eC53LGlzT2JqZWN0Tm9kZTp4LkEsaXNPcGVyYXRvck5vZGU6eC5CLGlzUGFyZW50aGVzaXNOb2RlOnguQyxpc1JhbmdlTm9kZTp4LkUsaXNTeW1ib2xOb2RlOnguSixpc0NoYWluOnguaH0sbj1uZXcgbS5hLHIub249bi5vbi5iaW5kKG4pLHIub2ZmPW4ub2ZmLmJpbmQobiksci5vbmNlPW4ub25jZS5iaW5kKG4pLHIuZW1pdD1uLmVtaXQuYmluZChuKSxyKTtmdW5jdGlvbiB1KGUpe2lmKGUpe3ZhciB0PU9iamVjdChiLmkpKGksYi5hKTt2KGUsIm1hdHJpeCIseSksdihlLCJudW1iZXIiLGcpLE9iamVjdChiLmIpKGksZSk7dmFyIHI9T2JqZWN0KGIuaSkoaSxiLmEpLG49T2JqZWN0KGIuaSkoZSxiLmEpO3JldHVybiBvKCJjb25maWciLHIsdCxuKSxyfXJldHVybiBPYmplY3QoYi5pKShpLGIuYSl9cy5jb25maWc9KGk9YSxvPXMuZW1pdCx1Lk1BVFJJWF9PUFRJT05TPXksdS5OVU1CRVJfT1BUSU9OUz1nLE9iamVjdC5rZXlzKGQpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHUsZSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGlbZV19LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9KSx1KSxzLmV4cHJlc3Npb249e3RyYW5zZm9ybTp7fSxtYXRoV2l0aFRyYW5zZm9ybTp7Y29uZmlnOnMuY29uZmlnfX07dmFyIGM9W10sZj1bXTt2YXIgbD17fTt2YXIgcD1oKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07cmV0dXJuIHMudHlwZWQuYXBwbHkocy50eXBlZCx0KX0sZnVuY3Rpb24gZSh0KXtpZihPYmplY3Qody5iKSh0KSlyZXR1cm4gdChzKTt2YXIgcj10W09iamVjdC5rZXlzKHQpWzBdXTtpZihPYmplY3Qody5iKShyKSlyZXR1cm4gcihzKTtpZighT2JqZWN0KGIuZykodCkpdGhyb3cgY29uc29sZS53YXJuKCJGYWN0b3J5IG9iamVjdCB3aXRoIHByb3BlcnRpZXMgYHR5cGVgLCBgbmFtZWAsIGFuZCBgZmFjdG9yeWAgZXhwZWN0ZWQiLHQpLG5ldyBFcnJvcigiRmFjdG9yeSBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGB0eXBlYCwgYG5hbWVgLCBhbmQgYGZhY3RvcnlgIGV4cGVjdGVkIik7dmFyIG4saT1jLmluZGV4T2YodCk7cmV0dXJuLTE9PT1pPyhuPSEwPT09dC5tYXRoP3QuZmFjdG9yeShzLnR5cGUsYSxlLHMudHlwZWQscyk6dC5mYWN0b3J5KHMudHlwZSxhLGUscy50eXBlZCksYy5wdXNoKHQpLGYucHVzaChuKSk6bj1mW2ldLG59LHMsbCk7cy5pbXBvcnQ9cCxzLm9uKCJjb25maWciLGZ1bmN0aW9uKCl7T2JqZWN0KGIubCkobCkuZm9yRWFjaChmdW5jdGlvbihlKXtlJiZlLm1ldGEmJmUubWV0YS5yZWNyZWF0ZU9uQ29uZmlnQ2hhbmdlJiZwKGUse292ZXJyaWRlOiEwfSl9KX0pLHMuY3JlYXRlPUMuYmluZChudWxsLGUpLHMuZmFjdG9yeT13LmEscy5pbXBvcnQoT2JqZWN0KGIubCkoT2JqZWN0KGIuYykoZSkpKTtyZXR1cm5bInR5cGUuaXNOdW1iZXIiLCJ0eXBlLmlzQ29tcGxleCIsInR5cGUuaXNCaWdOdW1iZXIiLCJ0eXBlLmlzRnJhY3Rpb24iLCJ0eXBlLmlzVW5pdCIsInR5cGUuaXNTdHJpbmciLCJ0eXBlLmlzQXJyYXkiLCJ0eXBlLmlzTWF0cml4IiwidHlwZS5pc0RlbnNlTWF0cml4IiwidHlwZS5pc1NwYXJzZU1hdHJpeCIsInR5cGUuaXNDb2xsZWN0aW9uIiwidHlwZS5pc1JhbmdlIiwidHlwZS5pc0luZGV4IiwidHlwZS5pc0Jvb2xlYW4iLCJ0eXBlLmlzUmVzdWx0U2V0IiwidHlwZS5pc0hlbHAiLCJ0eXBlLmlzRnVuY3Rpb24iLCJ0eXBlLmlzRGF0ZSIsInR5cGUuaXNSZWdFeHAiLCJ0eXBlLmlzT2JqZWN0IiwidHlwZS5pc051bGwiLCJ0eXBlLmlzVW5kZWZpbmVkIiwidHlwZS5pc0FjY2Vzc29yTm9kZSIsInR5cGUuaXNBcnJheU5vZGUiLCJ0eXBlLmlzQXNzaWdubWVudE5vZGUiLCJ0eXBlLmlzQmxvY2tOb2RlIiwidHlwZS5pc0NvbmRpdGlvbmFsTm9kZSIsInR5cGUuaXNDb25zdGFudE5vZGUiLCJ0eXBlLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSIsInR5cGUuaXNGdW5jdGlvbk5vZGUiLCJ0eXBlLmlzSW5kZXhOb2RlIiwidHlwZS5pc05vZGUiLCJ0eXBlLmlzT2JqZWN0Tm9kZSIsInR5cGUuaXNPcGVyYXRvck5vZGUiLCJ0eXBlLmlzUGFyZW50aGVzaXNOb2RlIiwidHlwZS5pc1JhbmdlTm9kZSIsInR5cGUuaXNTeW1ib2xOb2RlIiwidHlwZS5pc0NoYWluIiwidHlwZS5CaWdOdW1iZXIiLCJ0eXBlLkNoYWluIiwidHlwZS5Db21wbGV4IiwidHlwZS5GcmFjdGlvbiIsInR5cGUuTWF0cml4IiwidHlwZS5EZW5zZU1hdHJpeCIsInR5cGUuU3BhcnNlTWF0cml4IiwidHlwZS5TcGEiLCJ0eXBlLkZpYm9uYWNjaUhlYXAiLCJ0eXBlLkltbXV0YWJsZURlbnNlTWF0cml4IiwidHlwZS5JbmRleCIsInR5cGUuUmFuZ2UiLCJ0eXBlLlJlc3VsdFNldCIsInR5cGUuVW5pdCIsInR5cGUuSGVscCIsInR5cGUuUGFyc2VyIiwiZXhwcmVzc2lvbi5wYXJzZSIsImV4cHJlc3Npb24uUGFyc2VyIiwiZXhwcmVzc2lvbi5ub2RlLkFjY2Vzc29yTm9kZSIsImV4cHJlc3Npb24ubm9kZS5BcnJheU5vZGUiLCJleHByZXNzaW9uLm5vZGUuQXNzaWdubWVudE5vZGUiLCJleHByZXNzaW9uLm5vZGUuQmxvY2tOb2RlIiwiZXhwcmVzc2lvbi5ub2RlLkNvbmRpdGlvbmFsTm9kZSIsImV4cHJlc3Npb24ubm9kZS5Db25zdGFudE5vZGUiLCJleHByZXNzaW9uLm5vZGUuSW5kZXhOb2RlIiwiZXhwcmVzc2lvbi5ub2RlLkZ1bmN0aW9uQXNzaWdubWVudE5vZGUiLCJleHByZXNzaW9uLm5vZGUuRnVuY3Rpb25Ob2RlIiwiZXhwcmVzc2lvbi5ub2RlLk5vZGUiLCJleHByZXNzaW9uLm5vZGUuT2JqZWN0Tm9kZSIsImV4cHJlc3Npb24ubm9kZS5PcGVyYXRvck5vZGUiLCJleHByZXNzaW9uLm5vZGUuUGFyZW50aGVzaXNOb2RlIiwiZXhwcmVzc2lvbi5ub2RlLlJhbmdlTm9kZSIsImV4cHJlc3Npb24ubm9kZS5SZWxhdGlvbmFsTm9kZSIsImV4cHJlc3Npb24ubm9kZS5TeW1ib2xOb2RlIiwianNvbi5yZXZpdmVyIiwiZXJyb3IuQXJndW1lbnRzRXJyb3IiLCJlcnJvci5EaW1lbnNpb25FcnJvciIsImVycm9yLkluZGV4RXJyb3IiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuc3BsaXQoIi4iKSxyPU9iamVjdChOLmopKHQpLG49T2JqZWN0KE4ubCkodCksaT1PYmplY3QoYi5rKShzLHIpO09iamVjdChiLmgpKGksbixmdW5jdGlvbigpe3JldHVybiBPYmplY3QoTS5hKSgibWF0aC4iLmNvbmNhdChlLCIgaXMgbW92ZWQgdG8gbWF0aC4iKS5jb25jYXQobiwiIGluIHY2LjAuMC4gIikrIlBsZWFzZSB1c2UgdGhlIG5ldyBsb2NhdGlvbiBpbnN0ZWFkLiIpLHNbbl19KX0pLE9iamVjdChiLmgpKHMuZXhwcmVzc2lvbiwiZG9jcyIsZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIm1hdGguZXhwcmVzc2lvbi5kb2NzIGhhcyBiZWVuIG1vdmVkLiBQbGVhc2UgaW1wb3J0IHZpYSBcImltcG9ydCB7IGRvY3MgfSBmcm9tICdtYXRoanMnXCIiKX0pLHMuQXJndW1lbnRzRXJyb3I9Ty5hLHMuRGltZW5zaW9uRXJyb3I9RS5hLHMuSW5kZXhFcnJvcj1TLmEsc31yLmQodCwiY3JlYXRlIixmdW5jdGlvbigpe3JldHVybiBDfSl9XSxpLmM9bixpLmQ9ZnVuY3Rpb24oZSx0LHIpe2kubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDpyfSl9LGkucj1mdW5jdGlvbihlKXsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxpLnQ9ZnVuY3Rpb24odCxlKXtpZigxJmUmJih0PWkodCkpLDgmZSlyZXR1cm4gdDtpZig0JmUmJiJvYmplY3QiPT10eXBlb2YgdCYmdCYmdC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciByPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoaS5yKHIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSksMiZlJiYic3RyaW5nIiE9dHlwZW9mIHQpZm9yKHZhciBuIGluIHQpaS5kKHIsbixmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0uYmluZChudWxsLG4pKTtyZXR1cm4gcn0saS5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiBpLmQodCwiYSIsdCksdH0saS5vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxpLnA9IiIsaShpLnM9MTkpO2Z1bmN0aW9uIGkoZSl7aWYobltlXSlyZXR1cm4gbltlXS5leHBvcnRzO3ZhciB0PW5bZV09e2k6ZSxsOiExLGV4cG9ydHM6e319O3JldHVybiByW2VdLmNhbGwodC5leHBvcnRzLHQsdC5leHBvcnRzLGkpLHQubD0hMCx0LmV4cG9ydHN9dmFyIHIsbn0pOwovLyMgc291cmNlTWFwcGluZ1VSTD1tYXRoLm1pbi5tYXA=]]></data>
	</file>
	<file>
	  <filename>/js/riot+compiler.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogUmlvdCB2Ni4xLjIsIEBsaWNlbnNlIE1JVCAqLwooZnVuY3Rpb24oZSx0KXt0eXBlb2YgZXhwb3J0cz09PSJvYmplY3QiJiZ0eXBlb2YgbW9kdWxlIT09InVuZGVmaW5lZCI/bW9kdWxlLmV4cG9ydHM9dChyZXF1aXJlKCJmcyIpLHJlcXVpcmUoInBhdGgiKSk6dHlwZW9mIGRlZmluZT09PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZnMiLCJwYXRoIl0sdCk6KGU9dHlwZW9mIGdsb2JhbFRoaXMhPT0idW5kZWZpbmVkIj9nbG9iYWxUaGlzOmV8fHNlbGYsZS5yaW90PXQoKSl9KSh0aGlzLChmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKGUpe3JldHVybiBlLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIiQxLSQyIikudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiB0KGUpe3JldHVybiBlLnJlcGxhY2UoLy0oXHcpL2csKChlLHQpPT50LnRvVXBwZXJDYXNlKCkpKX1mdW5jdGlvbiByKGUpe3JldHVybiBBcnJheS5mcm9tKGUuYXR0cmlidXRlcykucmVkdWNlKCgoZSxyKT0+e2VbdChyLm5hbWUpXT1yLnZhbHVlO3JldHVybiBlfSkse30pfWZ1bmN0aW9uIHMoZSx0KXtpZihlLmZpcnN0Q2hpbGQpe3QuYXBwZW5kQ2hpbGQoZS5maXJzdENoaWxkKTtzKGUsdCl9fWZ1bmN0aW9uIGkoZSl7bihlLmNoaWxkTm9kZXMpfWZ1bmN0aW9uIG4oZSl7QXJyYXkuZnJvbShlKS5mb3JFYWNoKGEpfWNvbnN0IGE9ZT0+ZSYmZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSk7Y29uc3Qgbz0oZSx0KT0+dCYmdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdCk7Y29uc3QgbD0oZSx0KT0+dCYmdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGUsdCk7Y29uc3QgdT1uZXcgTWFwLGM9U3ltYm9sKCJyaW90LWNvbXBvbmVudCIpLGg9bmV3IFNldCxwPSJpcyIsZj0idmFsdWUiLGQ9Im1vdW50IixtPSJ1cGRhdGUiLHk9InVubW91bnQiLGc9InNob3VsZFVwZGF0ZSIseD0ib25CZWZvcmVNb3VudCIsdj0ib25Nb3VudGVkIixiPSJvbkJlZm9yZVVwZGF0ZSIsRT0ib25VcGRhdGVkIixTPSJvbkJlZm9yZVVubW91bnQiLFQ9Im9uVW5tb3VudGVkIixBPSJwcm9wcyIsdz0ic3RhdGUiLEM9InNsb3RzIixQPSJyb290IixEPVN5bWJvbCgicHVyZSIpLGs9U3ltYm9sKCJpc191cGRhdGluZyIpLE49U3ltYm9sKCJwYXJlbnQiKSxJPVN5bWJvbCgiYXR0cmlidXRlcyIpLEY9U3ltYm9sKCJ0ZW1wbGF0ZSIpO3ZhciBNPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLENPTVBPTkVOVFNfSU1QTEVNRU5UQVRJT05fTUFQOnUsRE9NX0NPTVBPTkVOVF9JTlNUQU5DRV9QUk9QRVJUWTpjLFBMVUdJTlNfU0VUOmgsSVNfRElSRUNUSVZFOnAsVkFMVUVfQVRUUklCVVRFOmYsTU9VTlRfTUVUSE9EX0tFWTpkLFVQREFURV9NRVRIT0RfS0VZOm0sVU5NT1VOVF9NRVRIT0RfS0VZOnksU0hPVUxEX1VQREFURV9LRVk6ZyxPTl9CRUZPUkVfTU9VTlRfS0VZOngsT05fTU9VTlRFRF9LRVk6dixPTl9CRUZPUkVfVVBEQVRFX0tFWTpiLE9OX1VQREFURURfS0VZOkUsT05fQkVGT1JFX1VOTU9VTlRfS0VZOlMsT05fVU5NT1VOVEVEX0tFWTpULFBST1BTX0tFWTpBLFNUQVRFX0tFWTp3LFNMT1RTX0tFWTpDLFJPT1RfS0VZOlAsSVNfUFVSRV9TWU1CT0w6RCxJU19DT01QT05FTlRfVVBEQVRJTkc6ayxQQVJFTlRfS0VZX1NZTUJPTDpOLEFUVFJJQlVURVNfS0VZX1NZTUJPTDpJLFRFTVBMQVRFX0tFWV9TWU1CT0w6Rn0pO2NvbnN0IF89MDtjb25zdCBPPTE7Y29uc3QgTD0yO2NvbnN0IEI9Mztjb25zdCBSPTQ7dmFyIGo9e0VBQ0g6XyxJRjpPLFNJTVBMRTpMLFRBRzpCLFNMT1Q6Un07Y29uc3QgVT0wO2NvbnN0IHo9MTtjb25zdCBWPTI7Y29uc3QgcT0zO3ZhciBHPXtBVFRSSUJVVEU6VSxFVkVOVDp6LFRFWFQ6VixWQUxVRTpxfTtjb25zdCBYPVN5bWJvbCgiaGVhZCIpO2NvbnN0IEo9U3ltYm9sKCJ0YWlsIik7ZnVuY3Rpb24gSCgpe2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpO2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpO2VbWF09dHJ1ZTt0W0pdPXRydWU7cmV0dXJue2hlYWQ6ZSx0YWlsOnR9fWZ1bmN0aW9uIFcoZSl7Y29uc3QgdD1lLmRvbS5jbG9uZU5vZGUodHJ1ZSk7Y29uc3R7aGVhZDpyLHRhaWw6c309SCgpO3JldHVybnthdm9pZERPTUluamVjdGlvbjp0cnVlLGZyYWdtZW50OnQsaGVhZDpyLHRhaWw6cyxjaGlsZHJlbjpbciwuLi5BcnJheS5mcm9tKHQuY2hpbGROb2Rlcyksc119fWZ1bmN0aW9uIEsoZSx0LHIscyl7aWYocz09PXZvaWQgMCl7cz17fX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5hc3NpZ24oe3ZhbHVlOnIsZW51bWVyYWJsZTpmYWxzZSx3cml0YWJsZTpmYWxzZSxjb25maWd1cmFibGU6dHJ1ZX0scykpO3JldHVybiBlfWZ1bmN0aW9uICQoZSx0LHIpe09iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKHQ9PntsZXRbcyxpXT10O0soZSxzLGkscil9KSk7cmV0dXJuIGV9ZnVuY3Rpb24gWShlLHQpe09iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKHQ9PntsZXRbcixzXT10O2lmKCFlW3JdKWVbcl09c30pKTtyZXR1cm4gZX1mdW5jdGlvbiBRKGUsdCl7cmV0dXJuIHR5cGVvZiBlPT09dH1mdW5jdGlvbiBaKGUpe2NvbnN0IHQ9ZS5vd25lclNWR0VsZW1lbnQ7cmV0dXJuISF0fHx0PT09bnVsbH1mdW5jdGlvbiBlZShlKXtyZXR1cm4gZS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PT0idGVtcGxhdGUifWZ1bmN0aW9uIHRlKGUpe3JldHVybiBRKGUsImZ1bmN0aW9uIil9ZnVuY3Rpb24gcmUoZSl7cmV0dXJuIFEoZSwiYm9vbGVhbiIpfWZ1bmN0aW9uIHNlKGUpe3JldHVybiFpZShlKSYmZS5jb25zdHJ1Y3Rvcj09PU9iamVjdH1mdW5jdGlvbiBpZShlKXtyZXR1cm4gZT09PW51bGx8fGU9PT11bmRlZmluZWR9dmFyIG5lPShlLHQscixzKT0+e2NvbnN0IGk9dC5sZW5ndGg7bGV0IG49ZS5sZW5ndGg7bGV0IHU9aTtsZXQgYz0wO2xldCBoPTA7bGV0IHA9bnVsbDt3aGlsZShjPG58fGg8dSl7aWYobj09PWMpe2NvbnN0IGU9dTxpP2g/cih0W2gtMV0sLTApLm5leHRTaWJsaW5nOnIodFt1LWhdLDApOnM7d2hpbGUoaDx1KW8ocih0W2grK10sMSksZSl9ZWxzZSBpZih1PT09aCl7d2hpbGUoYzxuKXtpZighcHx8IXAuaGFzKGVbY10pKWEocihlW2NdLC0xKSk7YysrfX1lbHNlIGlmKGVbY109PT10W2hdKXtjKys7aCsrfWVsc2UgaWYoZVtuLTFdPT09dFt1LTFdKXtuLS07dS0tfWVsc2UgaWYoZVtjXT09PXRbdS0xXSYmdFtoXT09PWVbbi0xXSl7Y29uc3Qgcz1yKGVbLS1uXSwtMSkubmV4dFNpYmxpbmc7byhyKHRbaCsrXSwxKSxyKGVbYysrXSwtMSkubmV4dFNpYmxpbmcpO28ocih0Wy0tdV0sMSkscyk7ZVtuXT10W3VdfWVsc2V7aWYoIXApe3A9bmV3IE1hcDtsZXQgZT1oO3doaWxlKGU8dSlwLnNldCh0W2VdLGUrKyl9aWYocC5oYXMoZVtjXSkpe2NvbnN0IHM9cC5nZXQoZVtjXSk7aWYoaDxzJiZzPHUpe2xldCBpPWM7bGV0IGE9MTt3aGlsZSgrK2k8biYmaTx1JiZwLmdldChlW2ldKT09PXMrYSlhKys7aWYoYT5zLWgpe2NvbnN0IGk9cihlW2NdLDApO3doaWxlKGg8cylvKHIodFtoKytdLDEpLGkpfWVsc2V7bChyKHRbaCsrXSwxKSxyKGVbYysrXSwtMSkpfX1lbHNlIGMrK31lbHNlIGEocihlW2MrK10sLTEpKX19cmV0dXJuIHR9O2NvbnN0IGFlPVN5bWJvbCgidW5tb3VudCIpO2NvbnN0IG9lPXtub2RlczpbXSxtb3VudChlLHQpe3JldHVybiB0aGlzLnVwZGF0ZShlLHQpfSx1cGRhdGUoZSx0KXtjb25zdHtwbGFjZWhvbGRlcjpyLG5vZGVzOnMsY2hpbGRyZW5NYXA6aX09dGhpcztjb25zdCBuPWU9PT1hZT9udWxsOnRoaXMuZXZhbHVhdGUoZSk7Y29uc3QgYT1uP0FycmF5LmZyb20obik6W107Y29uc3R7bmV3Q2hpbGRyZW5NYXA6byxiYXRjaGVzOmwsZnV0dXJlTm9kZXM6dX09aGUoYSxlLHQsdGhpcyk7bmUocyx1LGxlKEFycmF5LmZyb20oaS52YWx1ZXMoKSksdCkscik7bC5mb3JFYWNoKChlPT5lKCkpKTt0aGlzLmNoaWxkcmVuTWFwPW87dGhpcy5ub2Rlcz11O3JldHVybiB0aGlzfSx1bm1vdW50KGUsdCl7dGhpcy51cGRhdGUoYWUsdCk7cmV0dXJuIHRoaXN9fTtmdW5jdGlvbiBsZShlLHQpe3JldHVybihyLHMpPT57aWYoczwwKXtjb25zdCByPWVbZS5sZW5ndGgtMV07aWYocil7Y29uc3R7dGVtcGxhdGU6cyxub2RlczppLGNvbnRleHQ6bn09cjtpLnBvcCgpO2lmKCFpLmxlbmd0aCl7ZS5wb3AoKTtzLnVubW91bnQobix0LG51bGwpfX19cmV0dXJuIHJ9fWZ1bmN0aW9uIHVlKGUsdCl7cmV0dXJuIGU/IWUodCk6ZmFsc2V9ZnVuY3Rpb24gY2UoZSx0KXtsZXR7aXRlbU5hbWU6cixpbmRleE5hbWU6cyxpbmRleDppLGl0ZW06bn09dDtLKGUscixuKTtpZihzKUsoZSxzLGkpO3JldHVybiBlfWZ1bmN0aW9uIGhlKGUsdCxyLHMpe2NvbnN0e2NvbmRpdGlvbjppLHRlbXBsYXRlOm4sY2hpbGRyZW5NYXA6YSxpdGVtTmFtZTpvLGdldEtleTpsLGluZGV4TmFtZTp1LHJvb3Q6Yyxpc1RlbXBsYXRlVGFnOmh9PXM7Y29uc3QgcD1uZXcgTWFwO2NvbnN0IGY9W107Y29uc3QgZD1bXTtlLmZvckVhY2goKChlLHMpPT57Y29uc3QgbT1jZShPYmplY3QuY3JlYXRlKHQpLHtpdGVtTmFtZTpvLGluZGV4TmFtZTp1LGluZGV4OnMsaXRlbTplfSk7Y29uc3QgeT1sP2wobSk6cztjb25zdCBnPWEuZ2V0KHkpO2NvbnN0IHg9W107aWYodWUoaSxtKSl7cmV0dXJufWNvbnN0IHY9IWc7Y29uc3QgYj1nP2cudGVtcGxhdGU6bi5jbG9uZSgpO2NvbnN0IEU9Yi5lbHx8Yy5jbG9uZU5vZGUoKTtjb25zdCBTPWgmJnY/VyhiKTpiLm1ldGE7aWYodil7Zi5wdXNoKCgoKT0+Yi5tb3VudChFLG0scixTKSkpfWVsc2V7Zi5wdXNoKCgoKT0+Yi51cGRhdGUobSxyKSkpfWlmKGgpe3gucHVzaCguLi5TLmNoaWxkcmVuKX1lbHNle3gucHVzaChFKX1hLmRlbGV0ZSh5KTtkLnB1c2goLi4ueCk7cC5zZXQoeSx7bm9kZXM6eCx0ZW1wbGF0ZTpiLGNvbnRleHQ6bSxpbmRleDpzfSl9KSk7cmV0dXJue25ld0NoaWxkcmVuTWFwOnAsYmF0Y2hlczpmLGZ1dHVyZU5vZGVzOmR9fWZ1bmN0aW9uIHBlKGUsdCl7bGV0e2V2YWx1YXRlOnIsY29uZGl0aW9uOnMsaXRlbU5hbWU6aSxpbmRleE5hbWU6bixnZXRLZXk6bCx0ZW1wbGF0ZTp1fT10O2NvbnN0IGM9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpO2NvbnN0IGg9ZS5jbG9uZU5vZGUoKTtvKGMsZSk7YShlKTtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxvZSx7Y2hpbGRyZW5NYXA6bmV3IE1hcCxub2RlOmUscm9vdDpoLGNvbmRpdGlvbjpzLGV2YWx1YXRlOnIsaXNUZW1wbGF0ZVRhZzplZShoKSx0ZW1wbGF0ZTp1LmNyZWF0ZURPTShlKSxnZXRLZXk6bCxpbmRleE5hbWU6bixpdGVtTmFtZTppLHBsYWNlaG9sZGVyOmN9KX1jb25zdCBmZT17bW91bnQoZSx0KXtyZXR1cm4gdGhpcy51cGRhdGUoZSx0KX0sdXBkYXRlKGUsdCl7Y29uc3Qgcj0hIXRoaXMuZXZhbHVhdGUoZSk7Y29uc3Qgcz0hdGhpcy52YWx1ZSYmcjtjb25zdCBpPXRoaXMudmFsdWUmJiFyO2NvbnN0IG49KCk9Pntjb25zdCByPXRoaXMubm9kZS5jbG9uZU5vZGUoKTtvKHIsdGhpcy5wbGFjZWhvbGRlcik7dGhpcy50ZW1wbGF0ZT10aGlzLnRlbXBsYXRlLmNsb25lKCk7dGhpcy50ZW1wbGF0ZS5tb3VudChyLGUsdCl9O3N3aXRjaCh0cnVlKXtjYXNlIHM6bigpO2JyZWFrO2Nhc2UgaTp0aGlzLnVubW91bnQoZSk7YnJlYWs7ZGVmYXVsdDppZihyKXRoaXMudGVtcGxhdGUudXBkYXRlKGUsdCl9dGhpcy52YWx1ZT1yO3JldHVybiB0aGlzfSx1bm1vdW50KGUsdCl7dGhpcy50ZW1wbGF0ZS51bm1vdW50KGUsdCx0cnVlKTtyZXR1cm4gdGhpc319O2Z1bmN0aW9uIGRlKGUsdCl7bGV0e2V2YWx1YXRlOnIsdGVtcGxhdGU6c309dDtjb25zdCBpPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTtvKGksZSk7YShlKTtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxmZSx7bm9kZTplLGV2YWx1YXRlOnIscGxhY2Vob2xkZXI6aSx0ZW1wbGF0ZTpzLmNyZWF0ZURPTShlKX0pfWZ1bmN0aW9uIG1lKGUpe3Rocm93IG5ldyBFcnJvcihlKX1mdW5jdGlvbiB5ZShlKXtjb25zdCB0PW5ldyBNYXA7Y29uc3Qgcj1yPT50LmhhcyhyKT90LmdldChyKTp0LnNldChyLGUuY2FsbCh0aGlzLHIpKSYmdC5nZXQocik7ci5jYWNoZT10O3JldHVybiByfWZ1bmN0aW9uIGdlKGUpe3JldHVybiBlLnJlZHVjZSgoKGUscik9Pntjb25zdHt2YWx1ZTpzLHR5cGU6aX09cjtzd2l0Y2godHJ1ZSl7Y2FzZSFyLm5hbWUmJmk9PT1VOnJldHVybiBPYmplY3QuYXNzaWduKHt9LGUscyk7Y2FzZSBpPT09cTplLnZhbHVlPXIudmFsdWU7YnJlYWs7ZGVmYXVsdDplW3Qoci5uYW1lKV09ci52YWx1ZX1yZXR1cm4gZX0pLHt9KX1jb25zdCB4ZT10eXBlb2YgRWxlbWVudD09PSJ1bmRlZmluZWQiP3t9OkVsZW1lbnQucHJvdG90eXBlO2NvbnN0IHZlPXllKChlPT54ZS5oYXNPd25Qcm9wZXJ0eShlKSkpO2Z1bmN0aW9uIGJlKGUsdCl7T2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgodD0+e2xldFtyLHNdPXQ7cmV0dXJuIEFlKGUse25hbWU6cn0scyl9KSl9ZnVuY3Rpb24gRWUoZSx0LHIpe2NvbnN0IHM9dD9PYmplY3Qua2V5cyh0KTpbXTtPYmplY3Qua2V5cyhyKS5maWx0ZXIoKGU9PiFzLmluY2x1ZGVzKGUpKSkuZm9yRWFjaCgodD0+ZS5yZW1vdmVBdHRyaWJ1dGUodCkpKX1mdW5jdGlvbiBTZShlKXtyZXR1cm4gZT09PXRydWV8fFsic3RyaW5nIiwibnVtYmVyIl0uaW5jbHVkZXModHlwZW9mIGUpfWZ1bmN0aW9uIFRlKGUpe3JldHVybiFlJiZlIT09MH1mdW5jdGlvbiBBZShlLHQscixzKXtsZXR7bmFtZTppfT10O2lmKCFpKXtpZihzKXtFZShlLHIscyl9aWYocil7YmUoZSxyKX1yZXR1cm59aWYoIXZlKGkpJiYocmUocil8fHNlKHIpfHx0ZShyKSkpe2VbaV09cn1pZihUZShyKSl7ZS5yZW1vdmVBdHRyaWJ1dGUoaSl9ZWxzZSBpZihTZShyKSl7ZS5zZXRBdHRyaWJ1dGUoaSx3ZShpLHIpKX19ZnVuY3Rpb24gd2UoZSx0KXtyZXR1cm4gdD09PXRydWU/ZTp0fWNvbnN0IENlPS9eb24vO2NvbnN0IFBlPWU9PkFycmF5LmlzQXJyYXkoZSk/ZTpbZSxmYWxzZV07Y29uc3QgRGU9e2hhbmRsZUV2ZW50KGUpe3RoaXNbZS50eXBlXShlKX19O2NvbnN0IGtlPW5ldyBXZWFrTWFwO2NvbnN0IE5lPWU9Pntjb25zdCB0PU9iamVjdC5jcmVhdGUoRGUpO2tlLnNldChlLHQpO3JldHVybiB0fTtmdW5jdGlvbiBJZShlLHQscil7bGV0e25hbWU6c309dDtjb25zdCBpPXMucmVwbGFjZShDZSwiIik7Y29uc3Qgbj1rZS5nZXQoZSl8fE5lKGUpO2NvbnN0W2Esb109UGUocik7Y29uc3QgbD1uW2ldO2NvbnN0IHU9bCYmIWE7Y29uc3QgYz1hJiYhbDtpZih1KXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoaSxuKX1pZihjKXtlLmFkZEV2ZW50TGlzdGVuZXIoaSxuLG8pfW5baV09YX1mdW5jdGlvbiBGZShlKXtyZXR1cm4gaWUoZSk/IiI6ZX1jb25zdCBNZT0oZSx0KT0+e2NvbnN0IHI9ZS5jaGlsZE5vZGVzW3RdO2lmKHIubm9kZVR5cGU9PT1Ob2RlLkNPTU1FTlRfTk9ERSl7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7ZS5yZXBsYWNlQ2hpbGQodCxyKTtyZXR1cm4gdH1yZXR1cm4gcn07ZnVuY3Rpb24gX2UoZSx0LHIpe2UuZGF0YT1GZShyKX1mdW5jdGlvbiBPZShlLHQscil7ZS52YWx1ZT1GZShyKX12YXIgTGU9e1tVXTpBZSxbel06SWUsW1ZdOl9lLFtxXTpPZX07Y29uc3QgQmU9e21vdW50KGUpe3RoaXMudmFsdWU9dGhpcy5ldmFsdWF0ZShlKTtSZSh0aGlzLHRoaXMudmFsdWUpO3JldHVybiB0aGlzfSx1cGRhdGUoZSl7Y29uc3QgdD10aGlzLmV2YWx1YXRlKGUpO2lmKHRoaXMudmFsdWUhPT10KXtSZSh0aGlzLHQpO3RoaXMudmFsdWU9dH1yZXR1cm4gdGhpc30sdW5tb3VudCgpe2lmKHRoaXMudHlwZT09PXopUmUodGhpcyxudWxsKTtyZXR1cm4gdGhpc319O2Z1bmN0aW9uIFJlKGUsdCl7cmV0dXJuIExlW2UudHlwZV0oZS5ub2RlLGUsdCxlLnZhbHVlKX1mdW5jdGlvbiBqZShlLHQpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LEJlLHQse25vZGU6dC50eXBlPT09Vj9NZShlLHQuY2hpbGROb2RlSW5kZXgpOmV9KX1mdW5jdGlvbiBVZShlLHQscil7cmV0dXJuIHQucmVkdWNlKCgodCxzKT0+T2JqZWN0LmFzc2lnbih7fSx0LHtbc106dD0+ZS5tYXAoKGU9PmVbc10odCkpKSYmcn0pKSx7fSl9ZnVuY3Rpb24gemUoZSx0KXtsZXR7ZXhwcmVzc2lvbnM6cn09dDtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxVZShyLm1hcCgodD0+amUoZSx0KSkpLFsibW91bnQiLCJ1cGRhdGUiLCJ1bm1vdW50Il0pKX1mdW5jdGlvbiBWZShlLHQscil7aWYoIWV8fCFlLmxlbmd0aClyZXR1cm4gcjtjb25zdCBzPWUubWFwKChlPT5PYmplY3QuYXNzaWduKHt9LGUse3ZhbHVlOmUuZXZhbHVhdGUodCl9KSkpO3JldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUocnx8bnVsbCksZ2UocykpfWNvbnN0IHFlPShlLHQpPT5lW05dfHx0O2NvbnN0IEdlPXthdHRyaWJ1dGVzOltdLGdldFRlbXBsYXRlU2NvcGUoZSx0KXtyZXR1cm4gVmUodGhpcy5hdHRyaWJ1dGVzLGUsdCl9LG1vdW50KGUsdCl7Y29uc3Qgcj1lLnNsb3RzP2Uuc2xvdHMuZmluZCgoZT0+e2xldHtpZDp0fT1lO3JldHVybiB0PT09dGhpcy5uYW1lfSkpOmZhbHNlO2NvbnN0e3BhcmVudE5vZGU6c309dGhpcy5ub2RlO2NvbnN0IG49cWUoZSx0KTt0aGlzLnRlbXBsYXRlPXImJmx0KHIuaHRtbCxyLmJpbmRpbmdzKS5jcmVhdGVET00ocyk7aWYodGhpcy50ZW1wbGF0ZSl7aSh0aGlzLm5vZGUpO3RoaXMudGVtcGxhdGUubW91bnQodGhpcy5ub2RlLHRoaXMuZ2V0VGVtcGxhdGVTY29wZShlLG4pLG4pO3RoaXMudGVtcGxhdGUuY2hpbGRyZW49QXJyYXkuZnJvbSh0aGlzLm5vZGUuY2hpbGROb2Rlcyl9WGUodGhpcy5ub2RlKTthKHRoaXMubm9kZSk7cmV0dXJuIHRoaXN9LHVwZGF0ZShlLHQpe2lmKHRoaXMudGVtcGxhdGUpe2NvbnN0IHI9cWUoZSx0KTt0aGlzLnRlbXBsYXRlLnVwZGF0ZSh0aGlzLmdldFRlbXBsYXRlU2NvcGUoZSxyKSxyKX1yZXR1cm4gdGhpc30sdW5tb3VudChlLHQscil7aWYodGhpcy50ZW1wbGF0ZSl7dGhpcy50ZW1wbGF0ZS51bm1vdW50KHRoaXMuZ2V0VGVtcGxhdGVTY29wZShlLHQpLG51bGwscil9cmV0dXJuIHRoaXN9fTtmdW5jdGlvbiBYZShlKXtjb25zdCB0PWUmJmUuZmlyc3RDaGlsZDtpZighdClyZXR1cm47byh0LGUpO1hlKGUpfWZ1bmN0aW9uIEplKGUsdCl7bGV0e25hbWU6cixhdHRyaWJ1dGVzOnN9PXQ7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sR2Use2F0dHJpYnV0ZXM6cyxub2RlOmUsbmFtZTpyfSl9ZnVuY3Rpb24gSGUoZSx0LHIpe2lmKHQ9PT12b2lkIDApe3Q9W119aWYocj09PXZvaWQgMCl7cj1bXX1pZihlKXtyZXR1cm4gZSh7c2xvdHM6dCxhdHRyaWJ1dGVzOnJ9KX1yZXR1cm4gbHQoS2UodCksWy4uLldlKHQpLHtleHByZXNzaW9uczpyLm1hcCgoZT0+T2JqZWN0LmFzc2lnbih7dHlwZTpVfSxlKSkpfV0pfWZ1bmN0aW9uIFdlKGUpe3JldHVybiBlLnJlZHVjZSgoKGUsdCk9PntsZXR7YmluZGluZ3M6cn09dDtyZXR1cm4gZS5jb25jYXQocil9KSxbXSl9ZnVuY3Rpb24gS2UoZSl7cmV0dXJuIGUucmVkdWNlKCgoZSx0KT0+ZSt0Lmh0bWwpLCIiKX1jb25zdCAkZT17bW91bnQoZSl7cmV0dXJuIHRoaXMudXBkYXRlKGUpfSx1cGRhdGUoZSx0KXtjb25zdCByPXRoaXMuZXZhbHVhdGUoZSk7aWYociYmcj09PXRoaXMubmFtZSl7dGhpcy50YWcudXBkYXRlKGUpfWVsc2V7dGhpcy51bm1vdW50KGUsdCx0cnVlKTt0aGlzLm5hbWU9cjt0aGlzLnRhZz1IZSh0aGlzLmdldENvbXBvbmVudChyKSx0aGlzLnNsb3RzLHRoaXMuYXR0cmlidXRlcyk7dGhpcy50YWcubW91bnQodGhpcy5ub2RlLGUpfXJldHVybiB0aGlzfSx1bm1vdW50KGUsdCxyKXtpZih0aGlzLnRhZyl7dGhpcy50YWcudW5tb3VudChyKX1yZXR1cm4gdGhpc319O2Z1bmN0aW9uIFllKGUsdCl7bGV0e2V2YWx1YXRlOnIsZ2V0Q29tcG9uZW50OnMsc2xvdHM6aSxhdHRyaWJ1dGVzOm59PXQ7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sJGUse25vZGU6ZSxldmFsdWF0ZTpyLHNsb3RzOmksYXR0cmlidXRlczpuLGdldENvbXBvbmVudDpzfSl9dmFyIFFlPXtbT106ZGUsW0xdOnplLFtfXTpwZSxbQl06WWUsW1JdOkplfTtmdW5jdGlvbiBaZShlLHQpe3JldHVybiBlLm1hcCgoZT0+ZS50eXBlPT09Vj9PYmplY3QuYXNzaWduKHt9LGUse2NoaWxkTm9kZUluZGV4OmUuY2hpbGROb2RlSW5kZXgrdH0pOmUpKX1mdW5jdGlvbiBldChlLHQscil7Y29uc3R7c2VsZWN0b3I6cyx0eXBlOmkscmVkdW5kYW50QXR0cmlidXRlOm4sZXhwcmVzc2lvbnM6YX09dDtjb25zdCBvPXM/ZS5xdWVyeVNlbGVjdG9yKHMpOmU7aWYobilvLnJlbW92ZUF0dHJpYnV0ZShuKTtjb25zdCBsPWF8fFtdO3JldHVybihRZVtpXXx8UWVbTF0pKG8sT2JqZWN0LmFzc2lnbih7fSx0LHtleHByZXNzaW9uczpyJiYhcz9aZShsLHIpOmx9KSl9ZnVuY3Rpb24gdHQoZSx0KXtjb25zdCByPWVlKHQpP3Q6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyLmlubmVySFRNTD1lO3JldHVybiByLmNvbnRlbnR9ZnVuY3Rpb24gcnQoZSx0KXtjb25zdCByPXQub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKChuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+JHtlfTwvc3ZnPmAsImFwcGxpY2F0aW9uL3htbCIpLmRvY3VtZW50RWxlbWVudCx0cnVlKTtyZXR1cm4gcn1mdW5jdGlvbiBzdChlLHQpe2lmKFooZSkpcmV0dXJuIHJ0KHQsZSk7cmV0dXJuIHR0KHQsZSl9ZnVuY3Rpb24gaXQoZSx0KXtzd2l0Y2godHJ1ZSl7Y2FzZSBaKGUpOnModCxlKTticmVhaztjYXNlIGVlKGUpOmUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodCxlKTticmVhaztkZWZhdWx0OmUuYXBwZW5kQ2hpbGQodCl9fWZ1bmN0aW9uIG50KGUsdCl7cmV0dXJuIHQmJih0eXBlb2YgdD09PSJzdHJpbmciP3N0KGUsdCk6dCl9ZnVuY3Rpb24gYXQoZSx0LHIpe2NvbnN0IHM9QXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpO3JldHVybiBNYXRoLm1heChzLmluZGV4T2YodCkscy5pbmRleE9mKHIuaGVhZCkrMSwwKX1jb25zdCBvdD1PYmplY3QuZnJlZXplKHtjcmVhdGVET00oZSl7dGhpcy5kb209dGhpcy5kb218fG50KGUsdGhpcy5odG1sKXx8ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO3JldHVybiB0aGlzfSxtb3VudChlLHQscixzKXtpZihzPT09dm9pZCAwKXtzPXt9fWlmKCFlKXRocm93IG5ldyBFcnJvcigiUGxlYXNlIHByb3ZpZGUgRE9NIG5vZGUgdG8gbW91bnQgcHJvcGVybHkgeW91ciB0ZW1wbGF0ZSIpO2lmKHRoaXMuZWwpdGhpcy51bm1vdW50KHQpO2NvbnN0e2ZyYWdtZW50OmksY2hpbGRyZW46bixhdm9pZERPTUluamVjdGlvbjphfT1zO2NvbnN0e3BhcmVudE5vZGU6b309bj9uWzBdOmU7Y29uc3QgbD1lZShlKTtjb25zdCB1PWw/YXQobyxlLHMpOm51bGw7dGhpcy5jcmVhdGVET00oZSk7Y29uc3QgYz1pfHx0aGlzLmRvbS5jbG9uZU5vZGUodHJ1ZSk7dGhpcy5lbD1sP286ZTt0aGlzLmNoaWxkcmVuPWw/bnx8QXJyYXkuZnJvbShjLmNoaWxkTm9kZXMpOm51bGw7aWYoIWEmJmMpaXQoZSxjKTt0aGlzLmJpbmRpbmdzPXRoaXMuYmluZGluZ3NEYXRhLm1hcCgoZT0+ZXQodGhpcy5lbCxlLHUpKSk7dGhpcy5iaW5kaW5ncy5mb3JFYWNoKChlPT5lLm1vdW50KHQscikpKTt0aGlzLm1ldGE9cztyZXR1cm4gdGhpc30sdXBkYXRlKGUsdCl7dGhpcy5iaW5kaW5ncy5mb3JFYWNoKChyPT5yLnVwZGF0ZShlLHQpKSk7cmV0dXJuIHRoaXN9LHVubW91bnQoZSx0LHIpe2lmKHI9PT12b2lkIDApe3I9ZmFsc2V9Y29uc3Qgcz10aGlzLmVsO2lmKCFzKXtyZXR1cm4gdGhpc310aGlzLmJpbmRpbmdzLmZvckVhY2goKHM9PnMudW5tb3VudChlLHQscikpKTtzd2l0Y2godHJ1ZSl7Y2FzZSBzW0RdfHxyPT09bnVsbDpicmVhaztjYXNlIEFycmF5LmlzQXJyYXkodGhpcy5jaGlsZHJlbik6bih0aGlzLmNoaWxkcmVuKTticmVhaztjYXNlIXI6aShzKTticmVhaztjYXNlISFyOmEocyk7YnJlYWt9dGhpcy5lbD1udWxsO3JldHVybiB0aGlzfSxjbG9uZSgpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LHRoaXMse21ldGE6e30sZWw6bnVsbH0pfX0pO2Z1bmN0aW9uIGx0KGUsdCl7aWYodD09PXZvaWQgMCl7dD1bXX1yZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxvdCx7aHRtbDplLGJpbmRpbmdzRGF0YTp0fSl9dmFyIHV0PU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLHRlbXBsYXRlOmx0LGNyZWF0ZUJpbmRpbmc6ZXQsY3JlYXRlRXhwcmVzc2lvbjpqZSxiaW5kaW5nVHlwZXM6aixleHByZXNzaW9uVHlwZXM6R30pO2Z1bmN0aW9uIGN0KCl7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gaHQoZSx0KXt0LmZvckVhY2goKHQ9PntlW3RdPWVbdF0uYmluZChlKX0pKTtyZXR1cm4gZX1mdW5jdGlvbiBwdChlKXtyZXR1cm4gdGUoZSk/ZS5wcm90b3R5cGUmJmUucHJvdG90eXBlLmNvbnN0cnVjdG9yP25ldyBlOmUoKTplfWZ1bmN0aW9uIGZ0KGUpe2lmKCFBcnJheS5pc0FycmF5KGUpKXtpZigvXlxbb2JqZWN0IChIVE1MQ29sbGVjdGlvbnxOb2RlTGlzdHxPYmplY3QpXF0kLy50ZXN0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSkmJnR5cGVvZiBlLmxlbmd0aD09PSJudW1iZXIiKXJldHVybiBBcnJheS5mcm9tKGUpO2Vsc2UgcmV0dXJuW2VdfXJldHVybiBlfWZ1bmN0aW9uIGR0KGUsdCl7cmV0dXJuIGZ0KHR5cGVvZiBlPT09InN0cmluZyI/KHR8fGRvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKGUpOmUpfWNvbnN0IG10PWU9PmUubGVuZ3RoPT09MT9lWzBdOmU7ZnVuY3Rpb24geXQoZSx0LHIpe2NvbnN0IHM9dHlwZW9mIHQ9PT0ic3RyaW5nIj9bdF06dDtyZXR1cm4gbXQoZnQoZSkubWFwKChlPT5tdChzLm1hcCgodD0+ZVtyXSh0KSkpKSkpKX1mdW5jdGlvbiBndChlLHQscil7Y29uc3Qgcz10eXBlb2YgdD09PSJvYmplY3QiP3Q6e1t0XTpyfTtjb25zdCBpPU9iamVjdC5rZXlzKHMpO2Z0KGUpLmZvckVhY2goKGU9PntpLmZvckVhY2goKHQ9PmUuc2V0QXR0cmlidXRlKHQsc1t0XSkpKX0pKTtyZXR1cm4gZX1mdW5jdGlvbiB4dChlLHQpe3JldHVybiB5dChlLHQsImdldEF0dHJpYnV0ZSIpfWNvbnN0IHZ0PW5ldyBNYXA7Y29uc3QgYnQ9InN0eWxlW3Jpb3RdIjtjb25zdCBFdD0oZT0+KCk9PntpZihlKXJldHVybiBlO2U9ZHQoYnQpWzBdfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2d0KGUsInR5cGUiLCJ0ZXh0L2NzcyIpO2lmKCFlLnBhcmVudE5vZGUpZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChlKTtyZXR1cm4gZX0pKCk7dmFyIFN0PXtDU1NfQllfTkFNRTp2dCxhZGQoZSx0KXtpZighdnQuaGFzKGUpKXt2dC5zZXQoZSx0KTt0aGlzLmluamVjdCgpfXJldHVybiB0aGlzfSxpbmplY3QoKXtFdCgpLmlubmVySFRNTD1bLi4udnQudmFsdWVzKCldLmpvaW4oIlxuIik7cmV0dXJuIHRoaXN9LHJlbW92ZShlKXtpZih2dC5oYXMoZSkpe3Z0LmRlbGV0ZShlKTt0aGlzLmluamVjdCgpfXJldHVybiB0aGlzfX07ZnVuY3Rpb24gVHQoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkodD4xP3QtMTowKSxzPTE7czx0O3MrKyl7cltzLTFdPWFyZ3VtZW50c1tzXX1yZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxzPW5ldyBBcnJheSh0KSxpPTA7aTx0O2krKyl7c1tpXT1hcmd1bWVudHNbaV19cz1bLi4uciwuLi5zXTtyZXR1cm4gcy5sZW5ndGg8ZS5sZW5ndGg/VHQoZSwuLi5zKTplKC4uLnMpfX1mdW5jdGlvbiBBdChlKXtyZXR1cm4geHQoZSxwKXx8ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCl9Y29uc3Qgd3Q9T2JqZWN0LmZyZWV6ZSh7JChlKXtyZXR1cm4gZHQoZSx0aGlzLnJvb3QpWzBdfSwkJChlKXtyZXR1cm4gZHQoZSx0aGlzLnJvb3QpfX0pO2NvbnN0IEN0PU9iamVjdC5mcmVlemUoe1tkXTpjdCxbbV06Y3QsW3ldOmN0fSk7Y29uc3QgUHQ9T2JqZWN0LmZyZWV6ZSh7W2ddOmN0LFt4XTpjdCxbdl06Y3QsW2JdOmN0LFtFXTpjdCxbU106Y3QsW1RdOmN0fSk7Y29uc3QgRHQ9T2JqZWN0LmFzc2lnbih7fSxDdCx7Y2xvbmU6Y3QsY3JlYXRlRE9NOmN0fSk7Y29uc3Qga3Q9eWUoT3QpO2Z1bmN0aW9uIE50KGUsdCl7aWYodD09PXZvaWQgMCl7dD17fX1yZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxyKGUpLHB0KHQpKX1jb25zdCBJdD0oZSx0KT0+ZVtjXT10O2Z1bmN0aW9uIEZ0KGUpe3JldHVybltkLG0seV0ucmVkdWNlKCgodCxyKT0+e3Rbcl09ZShyKTtyZXR1cm4gdH0pLHt9KX1mdW5jdGlvbiBNdChlLHQpe2NvbnN0IHI9UnQodC5leHBvcnRzP3QuZXhwb3J0cy5jb21wb25lbnRzOnt9KTtyZXR1cm4gZShsdCxHLGosKGU9PntpZihlPT09dC5uYW1lKXJldHVybiBrdCh0KTtyZXR1cm4gcltlXXx8dS5nZXQoZSl9KSl9ZnVuY3Rpb24gX3QoZSx0KXtsZXR7c2xvdHM6cixhdHRyaWJ1dGVzOnMscHJvcHM6aSxjc3M6bix0ZW1wbGF0ZTphfT10O2lmKGEpbWUoIlB1cmUgY29tcG9uZW50cyBjYW4gbm90IGhhdmUgaHRtbCIpO2lmKG4pbWUoIlB1cmUgY29tcG9uZW50cyBkbyBub3QgaGF2ZSBjc3MiKTtjb25zdCBvPVkoZSh7c2xvdHM6cixhdHRyaWJ1dGVzOnMscHJvcHM6aX0pLEN0KTtyZXR1cm4gRnQoKGU9PmZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkodCkscz0wO3M8dDtzKyspe3Jbc109YXJndW1lbnRzW3NdfWlmKGU9PT1kKXtjb25zdFtlXT1yO0soZSxELHRydWUpO0l0KGUsbyl9b1tlXSguLi5yKTtyZXR1cm4gb30pKX1mdW5jdGlvbiBPdChlKXtjb25zdHtjc3M6dCx0ZW1wbGF0ZTpyLGV4cG9ydHM6cyxuYW1lOml9PWU7Y29uc3Qgbj1yP010KHIsZSk6RHQ7cmV0dXJuIGU9PntsZXR7c2xvdHM6YSxhdHRyaWJ1dGVzOm8scHJvcHM6bH09ZTtpZihzJiZzW0RdKXJldHVybiBfdChzLHtzbG90czphLGF0dHJpYnV0ZXM6byxwcm9wczpsLGNzczp0LHRlbXBsYXRlOnJ9KTtjb25zdCB1PXB0KHMpfHx7fTtjb25zdCBjPUx0KHtjc3M6dCx0ZW1wbGF0ZTpuLGNvbXBvbmVudEFQSTp1LG5hbWU6aX0pKHtzbG90czphLGF0dHJpYnV0ZXM6byxwcm9wczpsfSk7cmV0dXJue21vdW50KGUsdCxyKXtyZXR1cm4gYy5tb3VudChlLHIsdCl9LHVwZGF0ZShlLHQpe3JldHVybiBjLnVwZGF0ZSh0LGUpfSx1bm1vdW50KGUpe3JldHVybiBjLnVubW91bnQoZSl9fX19ZnVuY3Rpb24gTHQoZSl7bGV0e2Nzczp0LHRlbXBsYXRlOnIsY29tcG9uZW50QVBJOnMsbmFtZTppfT1lO2lmKHQmJmkpU3QuYWRkKGksdCk7cmV0dXJuIFR0KFZ0KSgkKFkocyxPYmplY3QuYXNzaWduKHt9LFB0LHtbQV06e30sW3ddOnt9fSkpLE9iamVjdC5hc3NpZ24oe1tDXTpudWxsLFtQXTpudWxsfSx3dCx7bmFtZTppLGNzczp0LHRlbXBsYXRlOnJ9KSkpfWZ1bmN0aW9uIEJ0KGUsdCl7aWYodD09PXZvaWQgMCl7dD1bXX1jb25zdCByPXQubWFwKCh0PT5qZShlLHQpKSk7Y29uc3Qgcz17fTtyZXR1cm4gT2JqZWN0LmFzc2lnbihzLE9iamVjdC5hc3NpZ24oe2V4cHJlc3Npb25zOnJ9LEZ0KChlPT50PT57ci5mb3JFYWNoKChyPT5yW2VdKHQpKSk7cmV0dXJuIHN9KSkpKX1mdW5jdGlvbiBSdCh0KXtpZih0PT09dm9pZCAwKXt0PXt9fXJldHVybiBPYmplY3QuZW50cmllcyhwdCh0KSkucmVkdWNlKCgodCxyKT0+e2xldFtzLGldPXI7dFtlKHMpXT1PdChpKTtyZXR1cm4gdH0pLHt9KX1mdW5jdGlvbiBqdChlKXtyZXR1cm5bLi4uaF0ucmVkdWNlKCgoZSx0KT0+dChlKXx8ZSksZSl9ZnVuY3Rpb24gVXQoZSx0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxlLHB0KHQpKX1mdW5jdGlvbiB6dChlLHQpe2lmKEF0KGUpIT09dCl7Z3QoZSxwLHQpfX1mdW5jdGlvbiBWdChlLHQpe2xldHtzbG90czpyLGF0dHJpYnV0ZXM6cyxwcm9wczppfT10O3JldHVybiBodChqdCgkKHNlKGUpP09iamVjdC5jcmVhdGUoZSk6ZSx7bW91bnQodCxuLGEpe2lmKG49PT12b2lkIDApe249e319Syh0LEQsZmFsc2UpO3RoaXNbTl09YTt0aGlzW0ldPUJ0KHQscykubW91bnQoYSk7Syh0aGlzLEEsT2JqZWN0LmZyZWV6ZShPYmplY3QuYXNzaWduKHt9LE50KHQsaSksZ2UodGhpc1tJXS5leHByZXNzaW9ucykpKSk7dGhpc1t3XT1VdCh0aGlzW3ddLG4pO3RoaXNbRl09dGhpcy50ZW1wbGF0ZS5jcmVhdGVET00odCkuY2xvbmUoKTtJdCh0LHRoaXMpO2UubmFtZSYmenQodCxlLm5hbWUpO0sodGhpcyxQLHQpO0sodGhpcyxDLHIpO3RoaXNbeF0odGhpc1tBXSx0aGlzW3ddKTt0aGlzW0ZdLm1vdW50KHQsdGhpcyxhKTt0aGlzW3ZdKHRoaXNbQV0sdGhpc1t3XSk7cmV0dXJuIHRoaXN9LHVwZGF0ZShlLHQpe2lmKGU9PT12b2lkIDApe2U9e319aWYodCl7dGhpc1tOXT10O3RoaXNbSV0udXBkYXRlKHQpfWNvbnN0IHI9Z2UodGhpc1tJXS5leHByZXNzaW9ucyk7aWYodGhpc1tnXShyLHRoaXNbQV0pPT09ZmFsc2UpcmV0dXJuO0sodGhpcyxBLE9iamVjdC5mcmVlemUoT2JqZWN0LmFzc2lnbih7fSx0aGlzW0FdLHIpKSk7dGhpc1t3XT1VdCh0aGlzW3ddLGUpO3RoaXNbYl0odGhpc1tBXSx0aGlzW3ddKTtpZighdGhpc1trXSl7dGhpc1trXT10cnVlO3RoaXNbRl0udXBkYXRlKHRoaXMsdGhpc1tOXSl9dGhpc1tFXSh0aGlzW0FdLHRoaXNbd10pO3RoaXNba109ZmFsc2U7cmV0dXJuIHRoaXN9LHVubW91bnQoZSl7dGhpc1tTXSh0aGlzW0FdLHRoaXNbd10pO3RoaXNbSV0udW5tb3VudCgpO3RoaXNbRl0udW5tb3VudCh0aGlzLHRoaXNbTl0sZT09PW51bGw/bnVsbDohZSk7dGhpc1tUXSh0aGlzW0FdLHRoaXNbd10pO3JldHVybiB0aGlzfX0pKSxPYmplY3Qua2V5cyhlKS5maWx0ZXIoKHQ9PnRlKGVbdF0pKSkpfWZ1bmN0aW9uIHF0KGUsdCxyKXtjb25zdCBzPXJ8fEF0KGUpO2lmKCF1LmhhcyhzKSltZShgVGhlIGNvbXBvbmVudCBuYW1lZCAiJHtzfSIgd2FzIG5ldmVyIHJlZ2lzdGVyZWRgKTtjb25zdCBpPXUuZ2V0KHMpKHtwcm9wczp0fSk7cmV0dXJuIGkubW91bnQoZSl9ZnVuY3Rpb24gR3QoKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxyPTA7cjxlO3IrKyl7dFtyXT1hcmd1bWVudHNbcl19cmV0dXJuIHQucmVkdWNlKCgoZSx0KT0+ZnVuY3Rpb24oKXtyZXR1cm4gZSh0KC4uLmFyZ3VtZW50cykpfSkpfWNvbnN0e0RPTV9DT01QT05FTlRfSU5TVEFOQ0VfUFJPUEVSVFk6WHQsQ09NUE9ORU5UU19JTVBMRU1FTlRBVElPTl9NQVA6SnQsUExVR0lOU19TRVQ6SHR9PU07ZnVuY3Rpb24gV3QoZSx0KXtsZXR7Y3NzOnIsdGVtcGxhdGU6cyxleHBvcnRzOml9PXQ7aWYoSnQuaGFzKGUpKW1lKGBUaGUgY29tcG9uZW50ICIke2V9IiB3YXMgYWxyZWFkeSByZWdpc3RlcmVkYCk7SnQuc2V0KGUsT3Qoe25hbWU6ZSxjc3M6cix0ZW1wbGF0ZTpzLGV4cG9ydHM6aX0pKTtyZXR1cm4gSnR9ZnVuY3Rpb24gS3QoZSl7aWYoIUp0LmhhcyhlKSltZShgVGhlIGNvbXBvbmVudCAiJHtlfSIgd2FzIG5ldmVyIHJlZ2lzdGVyZWRgKTtKdC5kZWxldGUoZSk7U3QucmVtb3ZlKGUpO3JldHVybiBKdH1mdW5jdGlvbiAkdChlLHQscil7cmV0dXJuIGR0KGUpLm1hcCgoZT0+cXQoZSx0LHIpKSl9ZnVuY3Rpb24gWXQoZSx0KXtyZXR1cm4gZHQoZSkubWFwKChlPT57aWYoZVtYdF0pe2VbWHRdLnVubW91bnQodCl9cmV0dXJuIGV9KSl9ZnVuY3Rpb24gUXQoZSl7aWYoIXRlKGUpKW1lKCJQbHVnaW5zIG11c3QgYmUgb2YgdHlwZSBmdW5jdGlvbiIpO2lmKEh0LmhhcyhlKSltZSgiVGhpcyBwbHVnaW4gd2FzIGFscmVhZHkgaW5zdGFsbGVkIik7SHQuYWRkKGUpO3JldHVybiBIdH1mdW5jdGlvbiBadChlKXtpZighSHQuaGFzKGUpKW1lKCJUaGlzIHBsdWdpbiB3YXMgbmV2ZXIgaW5zdGFsbGVkIik7SHQuZGVsZXRlKGUpO3JldHVybiBIdH1mdW5jdGlvbiBlcihlKXtyZXR1cm4gZnVuY3Rpb24odCxyLHMpe2xldHtzbG90czppLGF0dHJpYnV0ZXM6bixwYXJlbnRTY29wZTphfT1zPT09dm9pZCAwP3t9OnM7cmV0dXJuIEd0KChlPT5lLm1vdW50KHQsYSkpLChlPT5lKHtwcm9wczpyLHNsb3RzOmksYXR0cmlidXRlczpufSkpLE90KShlKX19ZnVuY3Rpb24gdHIoZSl7aWYoIXRlKGUpKW1lKCdyaW90LnB1cmUgYWNjZXB0cyBvbmx5IGFyZ3VtZW50cyBvZiB0eXBlICJmdW5jdGlvbiInKTtlW0RdPXRydWU7cmV0dXJuIGV9Y29uc3QgcnI9ZT0+ZTtjb25zdCBzcj0idjYuMS4yIjtjb25zdCBpcj17Y3NzTWFuYWdlcjpTdCxET01CaW5kaW5nczp1dCxjcmVhdGVDb21wb25lbnQ6T3QsZGVmaW5lQ29tcG9uZW50Okx0LGdsb2JhbHM6TX07dmFyIG5yPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLHJlZ2lzdGVyOld0LHVucmVnaXN0ZXI6S3QsbW91bnQ6JHQsdW5tb3VudDpZdCxpbnN0YWxsOlF0LHVuaW5zdGFsbDpadCxjb21wb25lbnQ6ZXIscHVyZTp0cix3aXRoVHlwZXM6cnIsdmVyc2lvbjpzcixfXzppcn0pO3ZhciBhcj10eXBlb2YgZ2xvYmFsVGhpcyE9PSJ1bmRlZmluZWQiP2dsb2JhbFRoaXM6dHlwZW9mIHdpbmRvdyE9PSJ1bmRlZmluZWQiP3dpbmRvdzp0eXBlb2YgZ2xvYmFsIT09InVuZGVmaW5lZCI/Z2xvYmFsOnR5cGVvZiBzZWxmIT09InVuZGVmaW5lZCI/c2VsZjp7fTtmdW5jdGlvbiBvcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiZGVmYXVsdCIpP2VbImRlZmF1bHQiXTplfXZhciBscj17ZXhwb3J0czp7fX07dmFyIHVyPXVuZGVmaW5lZDt2YXIgY3I9dW5kZWZpbmVkO3ZhciBocj11bmRlZmluZWQ7KGZ1bmN0aW9uKGUsdCl7KGZ1bmN0aW9uKGUscil7cih0KX0pKGFyLChmdW5jdGlvbihlKXt2YXIgdD13aW5kb3c7Y29uc3Qgcj0iZXhwb3J0cyI7Y29uc3Qgcz0iY3NzIjtjb25zdCBpPSJ0ZW1wbGF0ZSI7Y29uc3Qgbj0ibmFtZSI7Y29uc3QgYT0icmlvdCI7Y29uc3Qgbz0iUmlvdENvbXBvbmVudFdyYXBwZXIiO2NvbnN0IGw9IlJpb3RDb21wb25lbnQiO2Z1bmN0aW9uIHUoZSl7aWYoZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgcz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixzLmdldD9zOntlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uIHQoKXtyZXR1cm4gZVtyXX19KX0pKTtyZXR1cm4gdH12YXIgYz17fTsKLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgCUNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLgoKICAJUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgCXB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC4KCiAgCVRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICiAgCVJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogIAlBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCiAgCUlORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQogIAlMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgogIAlPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCiAgCVBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgCSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovdmFyIGg9ZnVuY3Rpb24gZSh0LHIpe2g9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIHQpaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikpZVtyXT10W3JdfTtyZXR1cm4gaCh0LHIpfTtmdW5jdGlvbiBwKGUsdCl7aWYodHlwZW9mIHQhPT0iZnVuY3Rpb24iJiZ0IT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKHQpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2goZSx0KTtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfWUucHJvdG90eXBlPXQ9PT1udWxsP09iamVjdC5jcmVhdGUodCk6KHIucHJvdG90eXBlPXQucHJvdG90eXBlLG5ldyByKX12YXIgZj1mdW5jdGlvbiBlKCl7Zj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbiBlKHQpe2Zvcih2YXIgcixzPTEsaT1hcmd1bWVudHMubGVuZ3RoO3M8aTtzKyspe3I9YXJndW1lbnRzW3NdO2Zvcih2YXIgbiBpbiByKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG4pKXRbbl09cltuXX1yZXR1cm4gdH07cmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBkKGUsdCl7dmFyIHI9e307Zm9yKHZhciBzIGluIGUpaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscykmJnQuaW5kZXhPZihzKTwwKXJbc109ZVtzXTtpZihlIT1udWxsJiZ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09PSJmdW5jdGlvbiIpZm9yKHZhciBpPTAscz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2k8cy5sZW5ndGg7aSsrKXtpZih0LmluZGV4T2Yoc1tpXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsc1tpXSkpcltzW2ldXT1lW3NbaV1dfXJldHVybiByfWZ1bmN0aW9uIG0oZSx0LHIscyl7dmFyIGk9YXJndW1lbnRzLmxlbmd0aCxuPWk8Mz90OnM9PT1udWxsP3M9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpOnMsYTtpZih0eXBlb2YgUmVmbGVjdD09PSJvYmplY3QiJiZ0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZT09PSJmdW5jdGlvbiIpbj1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLHMpO2Vsc2UgZm9yKHZhciBvPWUubGVuZ3RoLTE7bz49MDtvLS0paWYoYT1lW29dKW49KGk8Mz9hKG4pOmk+Mz9hKHQscixuKTphKHQscikpfHxuO3JldHVybiBpPjMmJm4mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIsbiksbn1mdW5jdGlvbiB5KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIscyl7dChyLHMsZSl9fWZ1bmN0aW9uIGcoZSx0KXtpZih0eXBlb2YgUmVmbGVjdD09PSJvYmplY3QiJiZ0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YT09PSJmdW5jdGlvbiIpcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoZSx0KX1mdW5jdGlvbiB4KGUsdCxyLHMpe2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiByP2U6bmV3IHIoKGZ1bmN0aW9uKHQpe3QoZSl9KSl9cmV0dXJuIG5ldyhyfHwocj1Qcm9taXNlKSkoKGZ1bmN0aW9uKHIsbil7ZnVuY3Rpb24gYShlKXt0cnl7bChzLm5leHQoZSkpfWNhdGNoKGUpe24oZSl9fWZ1bmN0aW9uIG8oZSl7dHJ5e2woc1sidGhyb3ciXShlKSl9Y2F0Y2goZSl7bihlKX19ZnVuY3Rpb24gbChlKXtlLmRvbmU/cihlLnZhbHVlKTppKGUudmFsdWUpLnRoZW4oYSxvKX1sKChzPXMuYXBwbHkoZSx0fHxbXSkpLm5leHQoKSl9KSl9ZnVuY3Rpb24gdihlLHQpe3ZhciByPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24gZSgpe2lmKG5bMF0mMSl0aHJvdyBuWzFdO3JldHVybiBuWzFdfSx0cnlzOltdLG9wczpbXX0scyxpLG4sYTtyZXR1cm4gYT17bmV4dDpvKDApLHRocm93Om8oMSkscmV0dXJuOm8oMil9LHR5cGVvZiBTeW1ib2w9PT0iZnVuY3Rpb24iJiYoYVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxhO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBsKFtlLHRdKX19ZnVuY3Rpb24gbChhKXtpZihzKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTt3aGlsZShyKXRyeXtpZihzPTEsaSYmKG49YVswXSYyP2lbInJldHVybiJdOmFbMF0/aVsidGhyb3ciXXx8KChuPWlbInJldHVybiJdKSYmbi5jYWxsKGkpLDApOmkubmV4dCkmJiEobj1uLmNhbGwoaSxhWzFdKSkuZG9uZSlyZXR1cm4gbjtpZihpPTAsbilhPVthWzBdJjIsbi52YWx1ZV07c3dpdGNoKGFbMF0pe2Nhc2UgMDpjYXNlIDE6bj1hO2JyZWFrO2Nhc2UgNDpyLmxhYmVsKys7cmV0dXJue3ZhbHVlOmFbMV0sZG9uZTpmYWxzZX07Y2FzZSA1OnIubGFiZWwrKztpPWFbMV07YT1bMF07Y29udGludWU7Y2FzZSA3OmE9ci5vcHMucG9wKCk7ci50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShuPXIudHJ5cyxuPW4ubGVuZ3RoPjAmJm5bbi5sZW5ndGgtMV0pJiYoYVswXT09PTZ8fGFbMF09PT0yKSl7cj0wO2NvbnRpbnVlfWlmKGFbMF09PT0zJiYoIW58fGFbMV0+blswXSYmYVsxXTxuWzNdKSl7ci5sYWJlbD1hWzFdO2JyZWFrfWlmKGFbMF09PT02JiZyLmxhYmVsPG5bMV0pe3IubGFiZWw9blsxXTtuPWE7YnJlYWt9aWYobiYmci5sYWJlbDxuWzJdKXtyLmxhYmVsPW5bMl07ci5vcHMucHVzaChhKTticmVha31pZihuWzJdKXIub3BzLnBvcCgpO3IudHJ5cy5wb3AoKTtjb250aW51ZX1hPXQuY2FsbChlLHIpfWNhdGNoKGUpe2E9WzYsZV07aT0wfWZpbmFsbHl7cz1uPTB9aWYoYVswXSY1KXRocm93IGFbMV07cmV0dXJue3ZhbHVlOmFbMF0/YVsxXTp2b2lkIDAsZG9uZTp0cnVlfX19dmFyIGI9T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQscixzKXtpZihzPT09dW5kZWZpbmVkKXM9cjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxzLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uIGUoKXtyZXR1cm4gdFtyXX19KX06ZnVuY3Rpb24oZSx0LHIscyl7aWYocz09PXVuZGVmaW5lZClzPXI7ZVtzXT10W3JdfTtmdW5jdGlvbiBFKGUsdCl7Zm9yKHZhciByIGluIGUpaWYociE9PSJkZWZhdWx0IiYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpKWIodCxlLHIpfWZ1bmN0aW9uIFMoZSl7dmFyIHQ9dHlwZW9mIFN5bWJvbD09PSJmdW5jdGlvbiImJlN5bWJvbC5pdGVyYXRvcixyPXQmJmVbdF0scz0wO2lmKHIpcmV0dXJuIHIuY2FsbChlKTtpZihlJiZ0eXBlb2YgZS5sZW5ndGg9PT0ibnVtYmVyIilyZXR1cm57bmV4dDpmdW5jdGlvbiB0KCl7aWYoZSYmcz49ZS5sZW5ndGgpZT12b2lkIDA7cmV0dXJue3ZhbHVlOmUmJmVbcysrXSxkb25lOiFlfX19O3Rocm93IG5ldyBUeXBlRXJyb3IodD8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9ZnVuY3Rpb24gVChlLHQpe3ZhciByPXR5cGVvZiBTeW1ib2w9PT0iZnVuY3Rpb24iJiZlW1N5bWJvbC5pdGVyYXRvcl07aWYoIXIpcmV0dXJuIGU7dmFyIHM9ci5jYWxsKGUpLGksbj1bXSxhO3RyeXt3aGlsZSgodD09PXZvaWQgMHx8dC0tID4wKSYmIShpPXMubmV4dCgpKS5kb25lKW4ucHVzaChpLnZhbHVlKX1jYXRjaChlKXthPXtlcnJvcjplfX1maW5hbGx5e3RyeXtpZihpJiYhaS5kb25lJiYocj1zWyJyZXR1cm4iXSkpci5jYWxsKHMpfWZpbmFsbHl7aWYoYSl0aHJvdyBhLmVycm9yfX1yZXR1cm4gbn1mdW5jdGlvbiBBKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWU9ZS5jb25jYXQoVChhcmd1bWVudHNbdF0pKTtyZXR1cm4gZX1mdW5jdGlvbiB3KCl7Zm9yKHZhciBlPTAsdD0wLHI9YXJndW1lbnRzLmxlbmd0aDt0PHI7dCsrKWUrPWFyZ3VtZW50c1t0XS5sZW5ndGg7Zm9yKHZhciBzPUFycmF5KGUpLGk9MCx0PTA7dDxyO3QrKylmb3IodmFyIG49YXJndW1lbnRzW3RdLGE9MCxvPW4ubGVuZ3RoO2E8bzthKyssaSsrKXNbaV09blthXTtyZXR1cm4gc31mdW5jdGlvbiBDKGUsdCxyKXtpZihyfHxhcmd1bWVudHMubGVuZ3RoPT09Milmb3IodmFyIHM9MCxpPXQubGVuZ3RoLG47czxpO3MrKyl7aWYobnx8IShzIGluIHQpKXtpZighbiluPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsMCxzKTtuW3NdPXRbc119fXJldHVybiBlLmNvbmNhdChufHx0KX1mdW5jdGlvbiBQKGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgUD8odGhpcy52PWUsdGhpcyk6bmV3IFAoZSl9ZnVuY3Rpb24gRChlLHQscil7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBzPXIuYXBwbHkoZSx0fHxbXSksaSxuPVtdO3JldHVybiBpPXt9LGEoIm5leHQiKSxhKCJ0aHJvdyIpLGEoInJldHVybiIpLGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGk7ZnVuY3Rpb24gYShlKXtpZihzW2VdKWlbZV09ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLHMpe24ucHVzaChbZSx0LHIsc10pPjF8fG8oZSx0KX0pKX19ZnVuY3Rpb24gbyhlLHQpe3RyeXtsKHNbZV0odCkpfWNhdGNoKGUpe2goblswXVszXSxlKX19ZnVuY3Rpb24gbChlKXtlLnZhbHVlIGluc3RhbmNlb2YgUD9Qcm9taXNlLnJlc29sdmUoZS52YWx1ZS52KS50aGVuKHUsYyk6aChuWzBdWzJdLGUpfWZ1bmN0aW9uIHUoZSl7bygibmV4dCIsZSl9ZnVuY3Rpb24gYyhlKXtvKCJ0aHJvdyIsZSl9ZnVuY3Rpb24gaChlLHQpe2lmKGUodCksbi5zaGlmdCgpLG4ubGVuZ3RoKW8oblswXVswXSxuWzBdWzFdKX19ZnVuY3Rpb24gayhlKXt2YXIgdCxyO3JldHVybiB0PXt9LHMoIm5leHQiKSxzKCJ0aHJvdyIsKGZ1bmN0aW9uKGUpe3Rocm93IGV9KSkscygicmV0dXJuIiksdFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHQ7ZnVuY3Rpb24gcyhzLGkpe3Rbc109ZVtzXT9mdW5jdGlvbih0KXtyZXR1cm4ocj0hcik/e3ZhbHVlOlAoZVtzXSh0KSksZG9uZTpzPT09InJldHVybiJ9Omk/aSh0KTp0fTppfX1mdW5jdGlvbiBOKGUpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgdD1lW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSxyO3JldHVybiB0P3QuY2FsbChlKTooZT10eXBlb2YgUz09PSJmdW5jdGlvbiI/UyhlKTplW1N5bWJvbC5pdGVyYXRvcl0oKSxyPXt9LHMoIm5leHQiKSxzKCJ0aHJvdyIpLHMoInJldHVybiIpLHJbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHIpO2Z1bmN0aW9uIHModCl7clt0XT1lW3RdJiZmdW5jdGlvbihyKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHMsbil7cj1lW3RdKHIpLGkocyxuLHIuZG9uZSxyLnZhbHVlKX0pKX19ZnVuY3Rpb24gaShlLHQscixzKXtQcm9taXNlLnJlc29sdmUocykudGhlbigoZnVuY3Rpb24odCl7ZSh7dmFsdWU6dCxkb25lOnJ9KX0pLHQpfX1mdW5jdGlvbiBJKGUsdCl7aWYoT2JqZWN0LmRlZmluZVByb3BlcnR5KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pfWVsc2V7ZS5yYXc9dH1yZXR1cm4gZX12YXIgRj1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImRlZmF1bHQiLHtlbnVtZXJhYmxlOnRydWUsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2VbImRlZmF1bHQiXT10fTtmdW5jdGlvbiBNKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihlIT1udWxsKWZvcih2YXIgciBpbiBlKWlmKHIhPT0iZGVmYXVsdCImJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpKWIodCxlLHIpO0YodCxlKTtyZXR1cm4gdH1mdW5jdGlvbiBfKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBPKGUsdCxyLHMpe2lmKHI9PT0iYSImJiFzKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlciIpO2lmKHR5cGVvZiB0PT09ImZ1bmN0aW9uIj9lIT09dHx8IXM6IXQuaGFzKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiByPT09Im0iP3M6cj09PSJhIj9zLmNhbGwoZSk6cz9zLnZhbHVlOnQuZ2V0KGUpfWZ1bmN0aW9uIEwoZSx0LHIscyxpKXtpZihzPT09Im0iKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZSIpO2lmKHM9PT0iYSImJiFpKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlciIpO2lmKHR5cGVvZiB0PT09ImZ1bmN0aW9uIj9lIT09dHx8IWk6IXQuaGFzKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuIHM9PT0iYSI/aS5jYWxsKGUscik6aT9pLnZhbHVlPXI6dC5zZXQoZSxyKSxyfXZhciBCPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLF9fZXh0ZW5kczpwLGdldCBfX2Fzc2lnbigpe3JldHVybiBmfSxfX3Jlc3Q6ZCxfX2RlY29yYXRlOm0sX19wYXJhbTp5LF9fbWV0YWRhdGE6ZyxfX2F3YWl0ZXI6eCxfX2dlbmVyYXRvcjp2LF9fY3JlYXRlQmluZGluZzpiLF9fZXhwb3J0U3RhcjpFLF9fdmFsdWVzOlMsX19yZWFkOlQsX19zcHJlYWQ6QSxfX3NwcmVhZEFycmF5czp3LF9fc3ByZWFkQXJyYXk6QyxfX2F3YWl0OlAsX19hc3luY0dlbmVyYXRvcjpELF9fYXN5bmNEZWxlZ2F0b3I6ayxfX2FzeW5jVmFsdWVzOk4sX19tYWtlVGVtcGxhdGVPYmplY3Q6SSxfX2ltcG9ydFN0YXI6TSxfX2ltcG9ydERlZmF1bHQ6XyxfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0Ok8sX19jbGFzc1ByaXZhdGVGaWVsZFNldDpMfSk7dmFyIFI9dShCKTt2YXIgaj17fTt2YXIgVT17ZXhwb3J0czp7fX07dmFyIHo9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KHosIl9fZXNNb2R1bGUiLHt2YWx1ZTp0cnVlfSk7ei5EZWY9dm9pZCAwO3ZhciBWPVI7dmFyIHE9T2JqZWN0LnByb3RvdHlwZTt2YXIgRz1xLnRvU3RyaW5nO3ZhciBYPXEuaGFzT3duUHJvcGVydHk7dmFyIEo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fWUucHJvdG90eXBlLmFzc2VydD1mdW5jdGlvbihlLHQpe2lmKCF0aGlzLmNoZWNrKGUsdCkpe3ZhciByPWVlKGUpO3Rocm93IG5ldyBFcnJvcihyKyIgZG9lcyBub3QgbWF0Y2ggdHlwZSAiK3RoaXMpfXJldHVybiB0cnVlfTtlLnByb3RvdHlwZS5hcnJheU9mPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gbmV3IEgoZSl9O3JldHVybiBlfSgpO3ZhciBIPWZ1bmN0aW9uKGUpe1YuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCh0KXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7ci5lbGVtVHlwZT10O3Iua2luZD0iQXJyYXlUeXBlIjtyZXR1cm4gcn10LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbIit0aGlzLmVsZW1UeXBlKyJdIn07dC5wcm90b3R5cGUuY2hlY2s9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gci5lbGVtVHlwZS5jaGVjayhlLHQpfSkpfTtyZXR1cm4gdH0oSik7dmFyIFc9ZnVuY3Rpb24oZSl7Vi5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHQpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyLnZhbHVlPXQ7ci5raW5kPSJJZGVudGl0eVR5cGUiO3JldHVybiByfXQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFN0cmluZyh0aGlzLnZhbHVlKX07dC5wcm90b3R5cGUuY2hlY2s9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lPT09dGhpcy52YWx1ZTtpZighciYmdHlwZW9mIHQ9PT0iZnVuY3Rpb24iKXt0KHRoaXMsZSl9cmV0dXJuIHJ9O3JldHVybiB0fShKKTt2YXIgSz1mdW5jdGlvbihlKXtWLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQodCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3IuZmllbGRzPXQ7ci5raW5kPSJPYmplY3RUeXBlIjtyZXR1cm4gcn10LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ7ICIrdGhpcy5maWVsZHMuam9pbigiLCAiKSsiIH0ifTt0LnByb3RvdHlwZS5jaGVjaz1mdW5jdGlvbihlLHQpe3JldHVybiBHLmNhbGwoZSk9PT1HLmNhbGwoe30pJiZ0aGlzLmZpZWxkcy5ldmVyeSgoZnVuY3Rpb24ocil7cmV0dXJuIHIudHlwZS5jaGVjayhlW3IubmFtZV0sdCl9KSl9O3JldHVybiB0fShKKTt2YXIgJD1mdW5jdGlvbihlKXtWLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQodCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3IudHlwZXM9dDtyLmtpbmQ9Ik9yVHlwZSI7cmV0dXJuIHJ9dC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlcy5qb2luKCIgfCAiKX07dC5wcm90b3R5cGUuY2hlY2s9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy50eXBlcy5zb21lKChmdW5jdGlvbihyKXtyZXR1cm4gci5jaGVjayhlLHQpfSkpfTtyZXR1cm4gdH0oSik7dmFyIFk9ZnVuY3Rpb24oZSl7Vi5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHQscil7dmFyIHM9ZS5jYWxsKHRoaXMpfHx0aGlzO3MubmFtZT10O3MucHJlZGljYXRlPXI7cy5raW5kPSJQcmVkaWNhdGVUeXBlIjtyZXR1cm4gc310LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWV9O3QucHJvdG90eXBlLmNoZWNrPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5wcmVkaWNhdGUoZSx0KTtpZighciYmdHlwZW9mIHQ9PT0iZnVuY3Rpb24iKXt0KHRoaXMsZSl9cmV0dXJuIHJ9O3JldHVybiB0fShKKTt2YXIgUT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9ZTt0aGlzLnR5cGVOYW1lPXQ7dGhpcy5iYXNlTmFtZXM9W107dGhpcy5vd25GaWVsZHM9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmFsbFN1cGVydHlwZXM9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLnN1cGVydHlwZUxpc3Q9W107dGhpcy5hbGxGaWVsZHM9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmZpZWxkTmFtZXM9W107dGhpcy5maW5hbGl6ZWQ9ZmFsc2U7dGhpcy5idWlsZGFibGU9ZmFsc2U7dGhpcy5idWlsZFBhcmFtcz1bXX1lLnByb3RvdHlwZS5pc1N1cGVydHlwZU9mPWZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBlKXtpZih0aGlzLmZpbmFsaXplZCE9PXRydWV8fHQuZmluYWxpemVkIT09dHJ1ZSl7dGhyb3cgbmV3IEVycm9yKCIiKX1yZXR1cm4gWC5jYWxsKHQuYWxsU3VwZXJ0eXBlcyx0aGlzLnR5cGVOYW1lKX1lbHNle3Rocm93IG5ldyBFcnJvcih0KyIgaXMgbm90IGEgRGVmIil9fTtlLnByb3RvdHlwZS5jaGVja0FsbEZpZWxkcz1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuYWxsRmllbGRzO2lmKHRoaXMuZmluYWxpemVkIT09dHJ1ZSl7dGhyb3cgbmV3IEVycm9yKCIiK3RoaXMudHlwZU5hbWUpfWZ1bmN0aW9uIHMocyl7dmFyIGk9cltzXTt2YXIgbj1pLnR5cGU7dmFyIGE9aS5nZXRWYWx1ZShlKTtyZXR1cm4gbi5jaGVjayhhLHQpfXJldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PT0ib2JqZWN0IiYmT2JqZWN0LmtleXMocikuZXZlcnkocyl9O2UucHJvdG90eXBlLmJhc2VzPWZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7ZVt0XT1hcmd1bWVudHNbdF19dmFyIHI9dGhpcy5iYXNlTmFtZXM7aWYodGhpcy5maW5hbGl6ZWQpe2lmKGUubGVuZ3RoIT09ci5sZW5ndGgpe3Rocm93IG5ldyBFcnJvcigiIil9Zm9yKHZhciBzPTA7czxlLmxlbmd0aDtzKyspe2lmKGVbc10hPT1yW3NdKXt0aHJvdyBuZXcgRXJyb3IoIiIpfX1yZXR1cm4gdGhpc31lLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKHIuaW5kZXhPZihlKTwwKXtyLnB1c2goZSl9fSkpO3JldHVybiB0aGlzfTtyZXR1cm4gZX0oKTt6LkRlZj1RO3ZhciBaPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixzKXt0aGlzLm5hbWU9ZTt0aGlzLnR5cGU9dDt0aGlzLmRlZmF1bHRGbj1yO3RoaXMuaGlkZGVuPSEhc31lLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLm5hbWUpKyI6ICIrdGhpcy50eXBlfTtlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMubmFtZV07aWYodHlwZW9mIHQhPT0idW5kZWZpbmVkIil7cmV0dXJuIHR9aWYodHlwZW9mIHRoaXMuZGVmYXVsdEZuPT09ImZ1bmN0aW9uIil7dD10aGlzLmRlZmF1bHRGbi5jYWxsKGUpfXJldHVybiB0fTtyZXR1cm4gZX0oKTtmdW5jdGlvbiBlZShlKXtpZihBcnJheS5pc0FycmF5KGUpKXtyZXR1cm4iWyIrZS5tYXAoZWUpLmpvaW4oIiwgIikrIl0ifWlmKGUmJnR5cGVvZiBlPT09Im9iamVjdCIpe3JldHVybiJ7ICIrT2JqZWN0LmtleXMoZSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdCsiOiAiK2VbdF19KSkuam9pbigiLCAiKSsiIH0ifXJldHVybiBKU09OLnN0cmluZ2lmeShlKX1mdW5jdGlvbiB0ZShlKXt2YXIgdD17b3I6ZnVuY3Rpb24gZSgpe3ZhciByPVtdO2Zvcih2YXIgcz0wO3M8YXJndW1lbnRzLmxlbmd0aDtzKyspe3Jbc109YXJndW1lbnRzW3NdfXJldHVybiBuZXcgJChyLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZnJvbShlKX0pKSl9LGZyb206ZnVuY3Rpb24gZShpLG4pe2lmKGkgaW5zdGFuY2VvZiBIfHxpIGluc3RhbmNlb2YgV3x8aSBpbnN0YW5jZW9mIEt8fGkgaW5zdGFuY2VvZiAkfHxpIGluc3RhbmNlb2YgWSl7cmV0dXJuIGl9aWYoaSBpbnN0YW5jZW9mIFEpe3JldHVybiBpLnR5cGV9aWYoby5jaGVjayhpKSl7aWYoaS5sZW5ndGghPT0xKXt0aHJvdyBuZXcgRXJyb3IoIm9ubHkgb25lIGVsZW1lbnQgdHlwZSBpcyBwZXJtaXR0ZWQgZm9yIHR5cGVkIGFycmF5cyIpfXJldHVybiBuZXcgSCh0LmZyb20oaVswXSkpfWlmKGwuY2hlY2soaSkpe3JldHVybiBuZXcgSyhPYmplY3Qua2V5cyhpKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWihlLHQuZnJvbShpW2VdLGUpKX0pKSl9aWYodHlwZW9mIGk9PT0iZnVuY3Rpb24iKXt2YXIgYT1yLmluZGV4T2YoaSk7aWYoYT49MCl7cmV0dXJuIHNbYV19aWYodHlwZW9mIG4hPT0ic3RyaW5nIil7dGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIG5hbWUiKX1yZXR1cm4gbmV3IFkobixpKX1yZXR1cm4gbmV3IFcoaSl9LGRlZjpmdW5jdGlvbiBlKHQpe3JldHVybiBYLmNhbGwoeSx0KT95W3RdOnlbdF09bmV3IHgodCl9LGhhc0RlZjpmdW5jdGlvbiBlKHQpe3JldHVybiBYLmNhbGwoeSx0KX19O3ZhciByPVtdO3ZhciBzPVtdO2Z1bmN0aW9uIGkoZSx0KXt2YXIgaT1HLmNhbGwodCk7dmFyIG49bmV3IFkoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIEcuY2FsbChlKT09PWl9KSk7aWYodCYmdHlwZW9mIHQuY29uc3RydWN0b3I9PT0iZnVuY3Rpb24iKXtyLnB1c2godC5jb25zdHJ1Y3Rvcik7cy5wdXNoKG4pfXJldHVybiBufXZhciBuPWkoInN0cmluZyIsInRydXRoeSIpO3ZhciBhPWkoImZ1bmN0aW9uIiwoZnVuY3Rpb24oKXt9KSk7dmFyIG89aSgiYXJyYXkiLFtdKTt2YXIgbD1pKCJvYmplY3QiLHt9KTt2YXIgdT1pKCJSZWdFeHAiLC8uLyk7dmFyIGM9aSgiRGF0ZSIsbmV3IERhdGUpO3ZhciBoPWkoIm51bWJlciIsMyk7dmFyIHA9aSgiYm9vbGVhbiIsdHJ1ZSk7dmFyIGY9aSgibnVsbCIsbnVsbCk7dmFyIGQ9aSgidW5kZWZpbmVkIix1bmRlZmluZWQpO3ZhciBtPXtzdHJpbmc6bixmdW5jdGlvbjphLGFycmF5Om8sb2JqZWN0OmwsUmVnRXhwOnUsRGF0ZTpjLG51bWJlcjpoLGJvb2xlYW46cCxudWxsOmYsdW5kZWZpbmVkOmR9O3ZhciB5PU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gZyhlKXtpZihlJiZ0eXBlb2YgZT09PSJvYmplY3QiKXt2YXIgdD1lLnR5cGU7aWYodHlwZW9mIHQ9PT0ic3RyaW5nIiYmWC5jYWxsKHksdCkpe3ZhciByPXlbdF07aWYoci5maW5hbGl6ZWQpe3JldHVybiByfX19cmV0dXJuIG51bGx9dmFyIHg9ZnVuY3Rpb24oZSl7Vi5fX2V4dGVuZHMocixlKTtmdW5jdGlvbiByKHQpe3ZhciByPWUuY2FsbCh0aGlzLG5ldyBZKHQsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuY2hlY2soZSx0KX0pKSx0KXx8dGhpcztyZXR1cm4gcn1yLnByb3RvdHlwZS5jaGVjaz1mdW5jdGlvbihlLHQpe2lmKHRoaXMuZmluYWxpemVkIT09dHJ1ZSl7dGhyb3cgbmV3IEVycm9yKCJwcmVtYXR1cmVseSBjaGVja2luZyB1bmZpbmFsaXplZCB0eXBlICIrdGhpcy50eXBlTmFtZSl9aWYoZT09PW51bGx8fHR5cGVvZiBlIT09Im9iamVjdCIpe3JldHVybiBmYWxzZX12YXIgcj1nKGUpO2lmKCFyKXtpZih0aGlzLnR5cGVOYW1lPT09IlNvdXJjZUxvY2F0aW9uInx8dGhpcy50eXBlTmFtZT09PSJQb3NpdGlvbiIpe3JldHVybiB0aGlzLmNoZWNrQWxsRmllbGRzKGUsdCl9cmV0dXJuIGZhbHNlfWlmKHQmJnI9PT10aGlzKXtyZXR1cm4gdGhpcy5jaGVja0FsbEZpZWxkcyhlLHQpfWlmKCF0aGlzLmlzU3VwZXJ0eXBlT2Yocikpe3JldHVybiBmYWxzZX1pZighdCl7cmV0dXJuIHRydWV9cmV0dXJuIHIuY2hlY2tBbGxGaWVsZHMoZSx0KSYmdGhpcy5jaGVja0FsbEZpZWxkcyhlLGZhbHNlKX07ci5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3ZhciB0PVtdO2Zvcih2YXIgcj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe3Rbcl09YXJndW1lbnRzW3JdfXRoaXMuYnVpbGRQYXJhbXM9dDtpZih0aGlzLmJ1aWxkYWJsZSl7cmV0dXJuIHRoaXN9dGhpcy5maWVsZCgidHlwZSIsU3RyaW5nLChmdW5jdGlvbigpe3JldHVybiBlLnR5cGVOYW1lfSkpO3RoaXMuYnVpbGRhYmxlPXRydWU7dmFyIHM9ZnVuY3Rpb24gdChyLHMsaSxuKXtpZihYLmNhbGwocixzKSlyZXR1cm47dmFyIGE9ZS5hbGxGaWVsZHM7aWYoIVguY2FsbChhLHMpKXt0aHJvdyBuZXcgRXJyb3IoIiIrcyl9dmFyIG89YVtzXTt2YXIgbD1vLnR5cGU7dmFyIHU7aWYobil7dT1pfWVsc2UgaWYoby5kZWZhdWx0Rm4pe3U9by5kZWZhdWx0Rm4uY2FsbChyKX1lbHNle3ZhciBjPSJubyB2YWx1ZSBvciBkZWZhdWx0IGZ1bmN0aW9uIGdpdmVuIGZvciBmaWVsZCAiK0pTT04uc3RyaW5naWZ5KHMpKyIgb2YgIitlLnR5cGVOYW1lKyIoIitlLmJ1aWxkUGFyYW1zLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGFbZV19KSkuam9pbigiLCAiKSsiKSI7dGhyb3cgbmV3IEVycm9yKGMpfWlmKCFsLmNoZWNrKHUpKXt0aHJvdyBuZXcgRXJyb3IoZWUodSkrIiBkb2VzIG5vdCBtYXRjaCBmaWVsZCAiK28rIiBvZiB0eXBlICIrZS50eXBlTmFtZSl9cltzXT11fTt2YXIgaT1mdW5jdGlvbiB0KCl7dmFyIHI9W107Zm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7cltpXT1hcmd1bWVudHNbaV19dmFyIG49ci5sZW5ndGg7aWYoIWUuZmluYWxpemVkKXt0aHJvdyBuZXcgRXJyb3IoImF0dGVtcHRpbmcgdG8gaW5zdGFudGlhdGUgdW5maW5hbGl6ZWQgdHlwZSAiK2UudHlwZU5hbWUpfXZhciBhPU9iamVjdC5jcmVhdGUoUyk7ZS5idWlsZFBhcmFtcy5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2lmKHQ8bil7cyhhLGUsclt0XSx0cnVlKX1lbHNle3MoYSxlLG51bGwsZmFsc2UpfX0pKTtPYmplY3Qua2V5cyhlLmFsbEZpZWxkcykuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cyhhLGUsbnVsbCxmYWxzZSl9KSk7aWYoYS50eXBlIT09ZS50eXBlTmFtZSl7dGhyb3cgbmV3IEVycm9yKCIiKX1yZXR1cm4gYX07aS5mcm9tPWZ1bmN0aW9uKHQpe2lmKCFlLmZpbmFsaXplZCl7dGhyb3cgbmV3IEVycm9yKCJhdHRlbXB0aW5nIHRvIGluc3RhbnRpYXRlIHVuZmluYWxpemVkIHR5cGUgIitlLnR5cGVOYW1lKX12YXIgcj1PYmplY3QuY3JlYXRlKFMpO09iamVjdC5rZXlzKGUuYWxsRmllbGRzKS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihYLmNhbGwodCxlKSl7cyhyLGUsdFtlXSx0cnVlKX1lbHNle3MocixlLG51bGwsZmFsc2UpfX0pKTtpZihyLnR5cGUhPT1lLnR5cGVOYW1lKXt0aHJvdyBuZXcgRXJyb3IoIiIpfXJldHVybiByfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRSxBKHRoaXMudHlwZU5hbWUpLHtlbnVtZXJhYmxlOnRydWUsdmFsdWU6aX0pO3JldHVybiB0aGlzfTtyLnByb3RvdHlwZS5maWVsZD1mdW5jdGlvbihlLHIscyxpKXtpZih0aGlzLmZpbmFsaXplZCl7Y29uc29sZS5lcnJvcigiSWdub3JpbmcgYXR0ZW1wdCB0byByZWRlZmluZSBmaWVsZCAiK0pTT04uc3RyaW5naWZ5KGUpKyIgb2YgZmluYWxpemVkIHR5cGUgIitKU09OLnN0cmluZ2lmeSh0aGlzLnR5cGVOYW1lKSk7cmV0dXJuIHRoaXN9dGhpcy5vd25GaWVsZHNbZV09bmV3IFooZSx0LmZyb20ocikscyxpKTtyZXR1cm4gdGhpc307ci5wcm90b3R5cGUuZmluYWxpemU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCF0aGlzLmZpbmFsaXplZCl7dmFyIHQ9dGhpcy5hbGxGaWVsZHM7dmFyIHI9dGhpcy5hbGxTdXBlcnR5cGVzO3RoaXMuYmFzZU5hbWVzLmZvckVhY2goKGZ1bmN0aW9uKHMpe3ZhciBpPXlbc107aWYoaSBpbnN0YW5jZW9mIFEpe2kuZmluYWxpemUoKTtNKHQsaS5hbGxGaWVsZHMpO00ocixpLmFsbFN1cGVydHlwZXMpfWVsc2V7dmFyIG49InVua25vd24gc3VwZXJ0eXBlIG5hbWUgIitKU09OLnN0cmluZ2lmeShzKSsiIGZvciBzdWJ0eXBlICIrSlNPTi5zdHJpbmdpZnkoZS50eXBlTmFtZSk7dGhyb3cgbmV3IEVycm9yKG4pfX0pKTtNKHQsdGhpcy5vd25GaWVsZHMpO3JbdGhpcy50eXBlTmFtZV09dGhpczt0aGlzLmZpZWxkTmFtZXMubGVuZ3RoPTA7Zm9yKHZhciBzIGluIHQpe2lmKFguY2FsbCh0LHMpJiYhdFtzXS5oaWRkZW4pe3RoaXMuZmllbGROYW1lcy5wdXNoKHMpfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoQyx0aGlzLnR5cGVOYW1lLHtlbnVtZXJhYmxlOnRydWUsdmFsdWU6dGhpcy50eXBlfSk7dGhpcy5maW5hbGl6ZWQ9dHJ1ZTtGKHRoaXMudHlwZU5hbWUsdGhpcy5zdXBlcnR5cGVMaXN0KTtpZih0aGlzLmJ1aWxkYWJsZSYmdGhpcy5zdXBlcnR5cGVMaXN0Lmxhc3RJbmRleE9mKCJFeHByZXNzaW9uIik+PTApe0kodGhpcy50eXBlTmFtZSl9fX07cmV0dXJuIHJ9KFEpO2Z1bmN0aW9uIHYoZSl7aWYoIVguY2FsbCh5LGUpKXt0aHJvdyBuZXcgRXJyb3IoIiIpfXZhciB0PXlbZV07aWYodC5maW5hbGl6ZWQhPT10cnVlKXt0aHJvdyBuZXcgRXJyb3IoIiIpfXJldHVybiB0LnN1cGVydHlwZUxpc3Quc2xpY2UoMSl9ZnVuY3Rpb24gYihlKXt2YXIgdD17fTt2YXIgcj1PYmplY3Qua2V5cyh5KTt2YXIgcz1yLmxlbmd0aDtmb3IodmFyIGk9MDtpPHM7KytpKXt2YXIgbj1yW2ldO3ZhciBhPXlbbl07aWYoYS5maW5hbGl6ZWQhPT10cnVlKXt0aHJvdyBuZXcgRXJyb3IoIiIrbil9Zm9yKHZhciBvPTA7bzxhLnN1cGVydHlwZUxpc3QubGVuZ3RoOysrbyl7dmFyIGw9YS5zdXBlcnR5cGVMaXN0W29dO2lmKFguY2FsbChlLGwpKXt0W25dPWw7YnJlYWt9fX1yZXR1cm4gdH12YXIgRT1PYmplY3QuY3JlYXRlKG51bGwpO3ZhciBTPXt9O2Z1bmN0aW9uIFQoZSx0KXt2YXIgcj1TW2VdO2lmKGQuY2hlY2sodCkpe2RlbGV0ZSBTW2VdfWVsc2V7YS5hc3NlcnQodCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMsZSx7ZW51bWVyYWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlLHZhbHVlOnR9KX1yZXR1cm4gcn1mdW5jdGlvbiBBKGUpe3JldHVybiBlLnJlcGxhY2UoL15bQS1aXSsvLChmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiIiO2Nhc2UgMTpyZXR1cm4gZS50b0xvd2VyQ2FzZSgpO2RlZmF1bHQ6cmV0dXJuIGUuc2xpY2UoMCx0LTEpLnRvTG93ZXJDYXNlKCkrZS5jaGFyQXQodC0xKX19KSl9ZnVuY3Rpb24gdyhlKXtlPUEoZSk7cmV0dXJuIGUucmVwbGFjZSgvKEV4cHJlc3Npb24pPyQvLCJTdGF0ZW1lbnQiKX12YXIgQz17fTtmdW5jdGlvbiBQKGUpe3ZhciB0PWcoZSk7aWYodCl7cmV0dXJuIHQuZmllbGROYW1lcy5zbGljZSgwKX1pZigidHlwZSJpbiBlKXt0aHJvdyBuZXcgRXJyb3IoImRpZCBub3QgcmVjb2duaXplIG9iamVjdCBvZiB0eXBlICIrSlNPTi5zdHJpbmdpZnkoZS50eXBlKSl9cmV0dXJuIE9iamVjdC5rZXlzKGUpfWZ1bmN0aW9uIEQoZSx0KXt2YXIgcj1nKGUpO2lmKHIpe3ZhciBzPXIuYWxsRmllbGRzW3RdO2lmKHMpe3JldHVybiBzLmdldFZhbHVlKGUpfX1yZXR1cm4gZSYmZVt0XX1mdW5jdGlvbiBrKGUsdCxyKXtQKGUpLmZvckVhY2goKGZ1bmN0aW9uKHIpe3QuY2FsbCh0aGlzLHIsRChlLHIpKX0pLHIpfWZ1bmN0aW9uIE4oZSx0LHIpe3JldHVybiBQKGUpLnNvbWUoKGZ1bmN0aW9uKHIpe3JldHVybiB0LmNhbGwodGhpcyxyLEQoZSxyKSl9KSxyKX1mdW5jdGlvbiBJKGUpe3ZhciB0PXcoZSk7aWYoRVt0XSlyZXR1cm47dmFyIHI9RVtBKGUpXTtpZighcilyZXR1cm47dmFyIHM9ZnVuY3Rpb24gZSgpe3ZhciB0PVtdO2Zvcih2YXIgcz0wO3M8YXJndW1lbnRzLmxlbmd0aDtzKyspe3Rbc109YXJndW1lbnRzW3NdfXJldHVybiBFLmV4cHJlc3Npb25TdGF0ZW1lbnQoci5hcHBseShFLHQpKX07cy5mcm9tPWZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7ZVt0XT1hcmd1bWVudHNbdF19cmV0dXJuIEUuZXhwcmVzc2lvblN0YXRlbWVudChyLmZyb20uYXBwbHkoRSxlKSl9O0VbdF09c31mdW5jdGlvbiBGKGUsdCl7dC5sZW5ndGg9MDt0LnB1c2goZSk7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IodmFyIHM9MDtzPHQubGVuZ3RoOysrcyl7ZT10W3NdO3ZhciBpPXlbZV07aWYoaS5maW5hbGl6ZWQhPT10cnVlKXt0aHJvdyBuZXcgRXJyb3IoIiIpfWlmKFguY2FsbChyLGUpKXtkZWxldGUgdFtyW2VdXX1yW2VdPXM7dC5wdXNoLmFwcGx5KHQsaS5iYXNlTmFtZXMpfWZvcih2YXIgbj0wLGE9bixvPXQubGVuZ3RoO2E8bzsrK2Epe2lmKFguY2FsbCh0LGEpKXt0W24rK109dFthXX19dC5sZW5ndGg9bn1mdW5jdGlvbiBNKGUsdCl7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24ocil7ZVtyXT10W3JdfSkpO3JldHVybiBlfWZ1bmN0aW9uIF8oKXtPYmplY3Qua2V5cyh5KS5mb3JFYWNoKChmdW5jdGlvbihlKXt5W2VdLmZpbmFsaXplKCl9KSl9cmV0dXJue1R5cGU6dCxidWlsdEluVHlwZXM6bSxnZXRTdXBlcnR5cGVOYW1lczp2LGNvbXB1dGVTdXBlcnR5cGVMb29rdXBUYWJsZTpiLGJ1aWxkZXJzOkUsZGVmaW5lTWV0aG9kOlQsZ2V0QnVpbGRlck5hbWU6QSxnZXRTdGF0ZW1lbnRCdWlsZGVyTmFtZTp3LG5hbWVkVHlwZXM6QyxnZXRGaWVsZE5hbWVzOlAsZ2V0RmllbGRWYWx1ZTpELGVhY2hGaWVsZDprLHNvbWVGaWVsZDpOLGZpbmFsaXplOl99fXouZGVmYXVsdD10ZTt2YXIgcmU9e2V4cG9ydHM6e319O3ZhciBzZT17ZXhwb3J0czp7fX07dmFyIGllPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTt2YXIgcj1SO3ZhciBzPXIuX19pbXBvcnREZWZhdWx0KHopO3ZhciBpPU9iamVjdC5wcm90b3R5cGU7dmFyIG49aS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBhKGUpe3ZhciB0PWUudXNlKHMuZGVmYXVsdCk7dmFyIHI9dC5idWlsdEluVHlwZXMuYXJyYXk7dmFyIGk9dC5idWlsdEluVHlwZXMubnVtYmVyO3ZhciBhPWZ1bmN0aW9uIGUodCxyLHMpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGUpKXt0aHJvdyBuZXcgRXJyb3IoIlBhdGggY29uc3RydWN0b3IgY2Fubm90IGJlIGludm9rZWQgd2l0aG91dCAnbmV3JyIpfWlmKHIpe2lmKCEociBpbnN0YW5jZW9mIGUpKXt0aHJvdyBuZXcgRXJyb3IoIiIpfX1lbHNle3I9bnVsbDtzPW51bGx9dGhpcy52YWx1ZT10O3RoaXMucGFyZW50UGF0aD1yO3RoaXMubmFtZT1zO3RoaXMuX19jaGlsZENhY2hlPW51bGx9O3ZhciBvPWEucHJvdG90eXBlO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGUuX19jaGlsZENhY2hlfHwoZS5fX2NoaWxkQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKSl9ZnVuY3Rpb24gdShlLHQpe3ZhciByPWwoZSk7dmFyIHM9ZS5nZXRWYWx1ZVByb3BlcnR5KHQpO3ZhciBpPXJbdF07aWYoIW4uY2FsbChyLHQpfHxpLnZhbHVlIT09cyl7aT1yW3RdPW5ldyBlLmNvbnN0cnVjdG9yKHMsZSx0KX1yZXR1cm4gaX1vLmdldFZhbHVlUHJvcGVydHk9ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdGhpcy52YWx1ZVt0XX07by5nZXQ9ZnVuY3Rpb24gZSgpe3ZhciB0PVtdO2Zvcih2YXIgcj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe3Rbcl09YXJndW1lbnRzW3JdfXZhciBzPXRoaXM7dmFyIGk9dC5sZW5ndGg7Zm9yKHZhciBuPTA7bjxpOysrbil7cz11KHMsdFtuXSl9cmV0dXJuIHN9O28uZWFjaD1mdW5jdGlvbiBlKHQscil7dmFyIHM9W107dmFyIGk9dGhpcy52YWx1ZS5sZW5ndGg7dmFyIGE9MDtmb3IodmFyIGE9MDthPGk7KythKXtpZihuLmNhbGwodGhpcy52YWx1ZSxhKSl7c1thXT10aGlzLmdldChhKX19cj1yfHx0aGlzO2ZvcihhPTA7YTxpOysrYSl7aWYobi5jYWxsKHMsYSkpe3QuY2FsbChyLHNbYV0pfX19O28ubWFwPWZ1bmN0aW9uIGUodCxyKXt2YXIgcz1bXTt0aGlzLmVhY2goKGZ1bmN0aW9uKGUpe3MucHVzaCh0LmNhbGwodGhpcyxlKSl9KSxyKTtyZXR1cm4gc307by5maWx0ZXI9ZnVuY3Rpb24gZSh0LHIpe3ZhciBzPVtdO3RoaXMuZWFjaCgoZnVuY3Rpb24oZSl7aWYodC5jYWxsKHRoaXMsZSkpe3MucHVzaChlKX19KSxyKTtyZXR1cm4gc307ZnVuY3Rpb24gYygpe31mdW5jdGlvbiBoKGUsdCxzLGEpe3IuYXNzZXJ0KGUudmFsdWUpO2lmKHQ9PT0wKXtyZXR1cm4gY312YXIgbz1lLnZhbHVlLmxlbmd0aDtpZihvPDEpe3JldHVybiBjfXZhciB1PWFyZ3VtZW50cy5sZW5ndGg7aWYodT09PTIpe3M9MDthPW99ZWxzZSBpZih1PT09Myl7cz1NYXRoLm1heChzLDApO2E9b31lbHNle3M9TWF0aC5tYXgocywwKTthPU1hdGgubWluKGEsbyl9aS5hc3NlcnQocyk7aS5hc3NlcnQoYSk7dmFyIGg9T2JqZWN0LmNyZWF0ZShudWxsKTt2YXIgcD1sKGUpO2Zvcih2YXIgZj1zO2Y8YTsrK2Ype2lmKG4uY2FsbChlLnZhbHVlLGYpKXt2YXIgZD1lLmdldChmKTtpZihkLm5hbWUhPT1mKXt0aHJvdyBuZXcgRXJyb3IoIiIpfXZhciBtPWYrdDtkLm5hbWU9bTtoW21dPWQ7ZGVsZXRlIHBbZl19fWRlbGV0ZSBwLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gaCl7dmFyIHI9aFt0XTtpZihyLm5hbWUhPT0rdCl7dGhyb3cgbmV3IEVycm9yKCIiKX1wW3RdPXI7ZS52YWx1ZVt0XT1yLnZhbHVlfX19by5zaGlmdD1mdW5jdGlvbiBlKCl7dmFyIHQ9aCh0aGlzLC0xKTt2YXIgcj10aGlzLnZhbHVlLnNoaWZ0KCk7dCgpO3JldHVybiByfTtvLnVuc2hpZnQ9ZnVuY3Rpb24gZSgpe3ZhciB0PVtdO2Zvcih2YXIgcj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe3Rbcl09YXJndW1lbnRzW3JdfXZhciBzPWgodGhpcyx0Lmxlbmd0aCk7dmFyIGk9dGhpcy52YWx1ZS51bnNoaWZ0LmFwcGx5KHRoaXMudmFsdWUsdCk7cygpO3JldHVybiBpfTtvLnB1c2g9ZnVuY3Rpb24gZSgpe3ZhciB0PVtdO2Zvcih2YXIgcz0wO3M8YXJndW1lbnRzLmxlbmd0aDtzKyspe3Rbc109YXJndW1lbnRzW3NdfXIuYXNzZXJ0KHRoaXMudmFsdWUpO2RlbGV0ZSBsKHRoaXMpLmxlbmd0aDtyZXR1cm4gdGhpcy52YWx1ZS5wdXNoLmFwcGx5KHRoaXMudmFsdWUsdCl9O28ucG9wPWZ1bmN0aW9uIGUoKXtyLmFzc2VydCh0aGlzLnZhbHVlKTt2YXIgdD1sKHRoaXMpO2RlbGV0ZSB0W3RoaXMudmFsdWUubGVuZ3RoLTFdO2RlbGV0ZSB0Lmxlbmd0aDtyZXR1cm4gdGhpcy52YWx1ZS5wb3AoKX07by5pbnNlcnRBdD1mdW5jdGlvbiBlKHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg7dmFyIHM9aCh0aGlzLHItMSx0KTtpZihzPT09YyYmcjw9MSl7cmV0dXJuIHRoaXN9dD1NYXRoLm1heCh0LDApO2Zvcih2YXIgaT0xO2k8cjsrK2kpe3RoaXMudmFsdWVbdCtpLTFdPWFyZ3VtZW50c1tpXX1zKCk7cmV0dXJuIHRoaXN9O28uaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uIGUoKXt2YXIgdD1bXTtmb3IodmFyIHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXt0W3JdPWFyZ3VtZW50c1tyXX12YXIgcz10aGlzLnBhcmVudFBhdGg7dmFyIGk9dC5sZW5ndGg7dmFyIG49W3RoaXMubmFtZV07Zm9yKHZhciBhPTA7YTxpOysrYSl7bi5wdXNoKHRbYV0pfXJldHVybiBzLmluc2VydEF0LmFwcGx5KHMsbil9O28uaW5zZXJ0QWZ0ZXI9ZnVuY3Rpb24gZSgpe3ZhciB0PVtdO2Zvcih2YXIgcj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe3Rbcl09YXJndW1lbnRzW3JdfXZhciBzPXRoaXMucGFyZW50UGF0aDt2YXIgaT10Lmxlbmd0aDt2YXIgbj1bdGhpcy5uYW1lKzFdO2Zvcih2YXIgYT0wO2E8aTsrK2Epe24ucHVzaCh0W2FdKX1yZXR1cm4gcy5pbnNlcnRBdC5hcHBseShzLG4pfTtmdW5jdGlvbiBwKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGEpKXt0aHJvdyBuZXcgRXJyb3IoIiIpfXZhciB0PWUucGFyZW50UGF0aDtpZighdCl7cmV0dXJuIGV9dmFyIHM9dC52YWx1ZTt2YXIgaT1sKHQpO2lmKHNbZS5uYW1lXT09PWUudmFsdWUpe2lbZS5uYW1lXT1lfWVsc2UgaWYoci5jaGVjayhzKSl7dmFyIG49cy5pbmRleE9mKGUudmFsdWUpO2lmKG4+PTApe2lbZS5uYW1lPW5dPWV9fWVsc2V7c1tlLm5hbWVdPWUudmFsdWU7aVtlLm5hbWVdPWV9aWYoc1tlLm5hbWVdIT09ZS52YWx1ZSl7dGhyb3cgbmV3IEVycm9yKCIiKX1pZihlLnBhcmVudFBhdGguZ2V0KGUubmFtZSkhPT1lKXt0aHJvdyBuZXcgRXJyb3IoIiIpfXJldHVybiBlfW8ucmVwbGFjZT1mdW5jdGlvbiBlKHQpe3ZhciBzPVtdO3ZhciBpPXRoaXMucGFyZW50UGF0aC52YWx1ZTt2YXIgbj1sKHRoaXMucGFyZW50UGF0aCk7dmFyIGE9YXJndW1lbnRzLmxlbmd0aDtwKHRoaXMpO2lmKHIuY2hlY2soaSkpe3ZhciBvPWkubGVuZ3RoO3ZhciB1PWgodGhpcy5wYXJlbnRQYXRoLGEtMSx0aGlzLm5hbWUrMSk7dmFyIGM9W3RoaXMubmFtZSwxXTtmb3IodmFyIGY9MDtmPGE7KytmKXtjLnB1c2goYXJndW1lbnRzW2ZdKX12YXIgZD1pLnNwbGljZS5hcHBseShpLGMpO2lmKGRbMF0hPT10aGlzLnZhbHVlKXt0aHJvdyBuZXcgRXJyb3IoIiIpfWlmKGkubGVuZ3RoIT09by0xK2Epe3Rocm93IG5ldyBFcnJvcigiIil9dSgpO2lmKGE9PT0wKXtkZWxldGUgdGhpcy52YWx1ZTtkZWxldGUgblt0aGlzLm5hbWVdO3RoaXMuX19jaGlsZENhY2hlPW51bGx9ZWxzZXtpZihpW3RoaXMubmFtZV0hPT10KXt0aHJvdyBuZXcgRXJyb3IoIiIpfWlmKHRoaXMudmFsdWUhPT10KXt0aGlzLnZhbHVlPXQ7dGhpcy5fX2NoaWxkQ2FjaGU9bnVsbH1mb3IoZj0wO2Y8YTsrK2Ype3MucHVzaCh0aGlzLnBhcmVudFBhdGguZ2V0KHRoaXMubmFtZStmKSl9aWYoc1swXSE9PXRoaXMpe3Rocm93IG5ldyBFcnJvcigiIil9fX1lbHNlIGlmKGE9PT0xKXtpZih0aGlzLnZhbHVlIT09dCl7dGhpcy5fX2NoaWxkQ2FjaGU9bnVsbH10aGlzLnZhbHVlPWlbdGhpcy5uYW1lXT10O3MucHVzaCh0aGlzKX1lbHNlIGlmKGE9PT0wKXtkZWxldGUgaVt0aGlzLm5hbWVdO2RlbGV0ZSB0aGlzLnZhbHVlO3RoaXMuX19jaGlsZENhY2hlPW51bGx9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCByZXBsYWNlIHBhdGgiKX1yZXR1cm4gc307cmV0dXJuIGF9dC5kZWZhdWx0PWE7ZS5leHBvcnRzPXRbImRlZmF1bHQiXX0pKGllLGllLmV4cG9ydHMpO3ZhciBuZT17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTp0cnVlfSk7dmFyIHI9Ujt2YXIgcz1yLl9faW1wb3J0RGVmYXVsdCh6KTt2YXIgaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIG4oZSl7dmFyIHQ9ZS51c2Uocy5kZWZhdWx0KTt2YXIgcj10LlR5cGU7dmFyIG49dC5uYW1lZFR5cGVzO3ZhciBhPW4uTm9kZTt2YXIgbz1uLkV4cHJlc3Npb247dmFyIGw9dC5idWlsdEluVHlwZXMuYXJyYXk7dmFyIHU9dC5idWlsZGVyczt2YXIgYz1mdW5jdGlvbiBlKHQscil7aWYoISh0aGlzIGluc3RhbmNlb2YgZSkpe3Rocm93IG5ldyBFcnJvcigiU2NvcGUgY29uc3RydWN0b3IgY2Fubm90IGJlIGludm9rZWQgd2l0aG91dCAnbmV3JyIpfXAuYXNzZXJ0KHQudmFsdWUpO3ZhciBzO2lmKHIpe2lmKCEociBpbnN0YW5jZW9mIGUpKXt0aHJvdyBuZXcgRXJyb3IoIiIpfXM9ci5kZXB0aCsxfWVsc2V7cj1udWxsO3M9MH1PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtwYXRoOnt2YWx1ZTp0fSxub2RlOnt2YWx1ZTp0LnZhbHVlfSxpc0dsb2JhbDp7dmFsdWU6IXIsZW51bWVyYWJsZTp0cnVlfSxkZXB0aDp7dmFsdWU6c30scGFyZW50Ont2YWx1ZTpyfSxiaW5kaW5nczp7dmFsdWU6e319LHR5cGVzOnt2YWx1ZTp7fX19KX07dmFyIGg9W24uUHJvZ3JhbSxuLkZ1bmN0aW9uLG4uQ2F0Y2hDbGF1c2VdO3ZhciBwPXIub3IuYXBwbHkocixoKTtjLmlzRXN0YWJsaXNoZWRCeT1mdW5jdGlvbihlKXtyZXR1cm4gcC5jaGVjayhlKX07dmFyIGY9Yy5wcm90b3R5cGU7Zi5kaWRTY2FuPWZhbHNlO2YuZGVjbGFyZXM9ZnVuY3Rpb24oZSl7dGhpcy5zY2FuKCk7cmV0dXJuIGkuY2FsbCh0aGlzLmJpbmRpbmdzLGUpfTtmLmRlY2xhcmVzVHlwZT1mdW5jdGlvbihlKXt0aGlzLnNjYW4oKTtyZXR1cm4gaS5jYWxsKHRoaXMudHlwZXMsZSl9O2YuZGVjbGFyZVRlbXBvcmFyeT1mdW5jdGlvbihlKXtpZihlKXtpZighL15bYS16JF9dL2kudGVzdChlKSl7dGhyb3cgbmV3IEVycm9yKCIiKX19ZWxzZXtlPSJ0JCJ9ZSs9dGhpcy5kZXB0aC50b1N0cmluZygzNikrIiQiO3RoaXMuc2NhbigpO3ZhciByPTA7d2hpbGUodGhpcy5kZWNsYXJlcyhlK3IpKXsrK3J9dmFyIHM9ZStyO3JldHVybiB0aGlzLmJpbmRpbmdzW3NdPXQuYnVpbGRlcnMuaWRlbnRpZmllcihzKX07Zi5pbmplY3RUZW1wb3Jhcnk9ZnVuY3Rpb24oZSx0KXtlfHwoZT10aGlzLmRlY2xhcmVUZW1wb3JhcnkoKSk7dmFyIHI9dGhpcy5wYXRoLmdldCgiYm9keSIpO2lmKG4uQmxvY2tTdGF0ZW1lbnQuY2hlY2soci52YWx1ZSkpe3I9ci5nZXQoImJvZHkiKX1yLnVuc2hpZnQodS52YXJpYWJsZURlY2xhcmF0aW9uKCJ2YXIiLFt1LnZhcmlhYmxlRGVjbGFyYXRvcihlLHR8fG51bGwpXSkpO3JldHVybiBlfTtmLnNjYW49ZnVuY3Rpb24oZSl7aWYoZXx8IXRoaXMuZGlkU2Nhbil7Zm9yKHZhciB0IGluIHRoaXMuYmluZGluZ3Mpe2RlbGV0ZSB0aGlzLmJpbmRpbmdzW3RdfWQodGhpcy5wYXRoLHRoaXMuYmluZGluZ3MsdGhpcy50eXBlcyk7dGhpcy5kaWRTY2FuPXRydWV9fTtmLmdldEJpbmRpbmdzPWZ1bmN0aW9uKCl7dGhpcy5zY2FuKCk7cmV0dXJuIHRoaXMuYmluZGluZ3N9O2YuZ2V0VHlwZXM9ZnVuY3Rpb24oKXt0aGlzLnNjYW4oKTtyZXR1cm4gdGhpcy50eXBlc307ZnVuY3Rpb24gZChlLHQscil7dmFyIHM9ZS52YWx1ZTtwLmFzc2VydChzKTtpZihuLkNhdGNoQ2xhdXNlLmNoZWNrKHMpKXt2YXIgaT1lLmdldCgicGFyYW0iKTtpZihpLnZhbHVlKXt4KGksdCl9fWVsc2V7bShlLHQscil9fWZ1bmN0aW9uIG0oZSxyLHMpe3ZhciBpPWUudmFsdWU7aWYoZS5wYXJlbnQmJm4uRnVuY3Rpb25FeHByZXNzaW9uLmNoZWNrKGUucGFyZW50Lm5vZGUpJiZlLnBhcmVudC5ub2RlLmlkKXt4KGUucGFyZW50LmdldCgiaWQiKSxyKX1pZighaSk7ZWxzZSBpZihsLmNoZWNrKGkpKXtlLmVhY2goKGZ1bmN0aW9uKGUpe2coZSxyLHMpfSkpfWVsc2UgaWYobi5GdW5jdGlvbi5jaGVjayhpKSl7ZS5nZXQoInBhcmFtcyIpLmVhY2goKGZ1bmN0aW9uKGUpe3goZSxyKX0pKTtnKGUuZ2V0KCJib2R5IikscixzKX1lbHNlIGlmKG4uVHlwZUFsaWFzJiZuLlR5cGVBbGlhcy5jaGVjayhpKXx8bi5JbnRlcmZhY2VEZWNsYXJhdGlvbiYmbi5JbnRlcmZhY2VEZWNsYXJhdGlvbi5jaGVjayhpKXx8bi5UU1R5cGVBbGlhc0RlY2xhcmF0aW9uJiZuLlRTVHlwZUFsaWFzRGVjbGFyYXRpb24uY2hlY2soaSl8fG4uVFNJbnRlcmZhY2VEZWNsYXJhdGlvbiYmbi5UU0ludGVyZmFjZURlY2xhcmF0aW9uLmNoZWNrKGkpKXt2KGUuZ2V0KCJpZCIpLHMpfWVsc2UgaWYobi5WYXJpYWJsZURlY2xhcmF0b3IuY2hlY2soaSkpe3goZS5nZXQoImlkIikscik7ZyhlLmdldCgiaW5pdCIpLHIscyl9ZWxzZSBpZihpLnR5cGU9PT0iSW1wb3J0U3BlY2lmaWVyInx8aS50eXBlPT09IkltcG9ydE5hbWVzcGFjZVNwZWNpZmllciJ8fGkudHlwZT09PSJJbXBvcnREZWZhdWx0U3BlY2lmaWVyIil7eChlLmdldChpLmxvY2FsPyJsb2NhbCI6aS5uYW1lPyJuYW1lIjoiaWQiKSxyKX1lbHNlIGlmKGEuY2hlY2soaSkmJiFvLmNoZWNrKGkpKXt0LmVhY2hGaWVsZChpLChmdW5jdGlvbih0LGkpe3ZhciBuPWUuZ2V0KHQpO2lmKCF5KG4saSkpe3Rocm93IG5ldyBFcnJvcigiIil9ZyhuLHIscyl9KSl9fWZ1bmN0aW9uIHkoZSx0KXtpZihlLnZhbHVlPT09dCl7cmV0dXJuIHRydWV9aWYoQXJyYXkuaXNBcnJheShlLnZhbHVlKSYmZS52YWx1ZS5sZW5ndGg9PT0wJiZBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD09PTApe3JldHVybiB0cnVlfXJldHVybiBmYWxzZX1mdW5jdGlvbiBnKGUsdCxyKXt2YXIgcz1lLnZhbHVlO2lmKCFzfHxvLmNoZWNrKHMpKTtlbHNlIGlmKG4uRnVuY3Rpb25EZWNsYXJhdGlvbi5jaGVjayhzKSYmcy5pZCE9PW51bGwpe3goZS5nZXQoImlkIiksdCl9ZWxzZSBpZihuLkNsYXNzRGVjbGFyYXRpb24mJm4uQ2xhc3NEZWNsYXJhdGlvbi5jaGVjayhzKSl7eChlLmdldCgiaWQiKSx0KX1lbHNlIGlmKHAuY2hlY2socykpe2lmKG4uQ2F0Y2hDbGF1c2UuY2hlY2socykmJm4uSWRlbnRpZmllci5jaGVjayhzLnBhcmFtKSl7dmFyIGE9cy5wYXJhbS5uYW1lO3ZhciBsPWkuY2FsbCh0LGEpO20oZS5nZXQoImJvZHkiKSx0LHIpO2lmKCFsKXtkZWxldGUgdFthXX19fWVsc2V7bShlLHQscil9fWZ1bmN0aW9uIHgoZSx0KXt2YXIgcj1lLnZhbHVlO24uUGF0dGVybi5hc3NlcnQocik7aWYobi5JZGVudGlmaWVyLmNoZWNrKHIpKXtpZihpLmNhbGwodCxyLm5hbWUpKXt0W3IubmFtZV0ucHVzaChlKX1lbHNle3Rbci5uYW1lXT1bZV19fWVsc2UgaWYobi5Bc3NpZ25tZW50UGF0dGVybiYmbi5Bc3NpZ25tZW50UGF0dGVybi5jaGVjayhyKSl7eChlLmdldCgibGVmdCIpLHQpfWVsc2UgaWYobi5PYmplY3RQYXR0ZXJuJiZuLk9iamVjdFBhdHRlcm4uY2hlY2socikpe2UuZ2V0KCJwcm9wZXJ0aWVzIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZS52YWx1ZTtpZihuLlBhdHRlcm4uY2hlY2socikpe3goZSx0KX1lbHNlIGlmKG4uUHJvcGVydHkuY2hlY2socikpe3goZS5nZXQoInZhbHVlIiksdCl9ZWxzZSBpZihuLlNwcmVhZFByb3BlcnR5JiZuLlNwcmVhZFByb3BlcnR5LmNoZWNrKHIpKXt4KGUuZ2V0KCJhcmd1bWVudCIpLHQpfX0pKX1lbHNlIGlmKG4uQXJyYXlQYXR0ZXJuJiZuLkFycmF5UGF0dGVybi5jaGVjayhyKSl7ZS5nZXQoImVsZW1lbnRzIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZS52YWx1ZTtpZihuLlBhdHRlcm4uY2hlY2socikpe3goZSx0KX1lbHNlIGlmKG4uU3ByZWFkRWxlbWVudCYmbi5TcHJlYWRFbGVtZW50LmNoZWNrKHIpKXt4KGUuZ2V0KCJhcmd1bWVudCIpLHQpfX0pKX1lbHNlIGlmKG4uUHJvcGVydHlQYXR0ZXJuJiZuLlByb3BlcnR5UGF0dGVybi5jaGVjayhyKSl7eChlLmdldCgicGF0dGVybiIpLHQpfWVsc2UgaWYobi5TcHJlYWRFbGVtZW50UGF0dGVybiYmbi5TcHJlYWRFbGVtZW50UGF0dGVybi5jaGVjayhyKXx8bi5SZXN0RWxlbWVudCYmbi5SZXN0RWxlbWVudC5jaGVjayhyKXx8bi5TcHJlYWRQcm9wZXJ0eVBhdHRlcm4mJm4uU3ByZWFkUHJvcGVydHlQYXR0ZXJuLmNoZWNrKHIpKXt4KGUuZ2V0KCJhcmd1bWVudCIpLHQpfX1mdW5jdGlvbiB2KGUsdCl7dmFyIHI9ZS52YWx1ZTtuLlBhdHRlcm4uYXNzZXJ0KHIpO2lmKG4uSWRlbnRpZmllci5jaGVjayhyKSl7aWYoaS5jYWxsKHQsci5uYW1lKSl7dFtyLm5hbWVdLnB1c2goZSl9ZWxzZXt0W3IubmFtZV09W2VdfX19Zi5sb29rdXA9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXM7dDt0PXQucGFyZW50KWlmKHQuZGVjbGFyZXMoZSkpYnJlYWs7cmV0dXJuIHR9O2YubG9va3VwVHlwZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpczt0O3Q9dC5wYXJlbnQpaWYodC5kZWNsYXJlc1R5cGUoZSkpYnJlYWs7cmV0dXJuIHR9O2YuZ2V0R2xvYmFsU2NvcGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3doaWxlKCFlLmlzR2xvYmFsKWU9ZS5wYXJlbnQ7cmV0dXJuIGV9O3JldHVybiBjfXQuZGVmYXVsdD1uO2UuZXhwb3J0cz10WyJkZWZhdWx0Il19KShuZSxuZS5leHBvcnRzKTsoZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTt2YXIgcj1SO3ZhciBzPXIuX19pbXBvcnREZWZhdWx0KHopO3ZhciBpPXIuX19pbXBvcnREZWZhdWx0KGllLmV4cG9ydHMpO3ZhciBuPXIuX19pbXBvcnREZWZhdWx0KG5lLmV4cG9ydHMpO2Z1bmN0aW9uIGEoZSl7dmFyIHQ9ZS51c2Uocy5kZWZhdWx0KTt2YXIgcj10Lm5hbWVkVHlwZXM7dmFyIGE9dC5idWlsZGVyczt2YXIgbz10LmJ1aWx0SW5UeXBlcy5udW1iZXI7dmFyIGw9dC5idWlsdEluVHlwZXMuYXJyYXk7dmFyIHU9ZS51c2UoaS5kZWZhdWx0KTt2YXIgYz1lLnVzZShuLmRlZmF1bHQpO3ZhciBoPWZ1bmN0aW9uIGUodCxyLHMpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGUpKXt0aHJvdyBuZXcgRXJyb3IoIk5vZGVQYXRoIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBpbnZva2VkIHdpdGhvdXQgJ25ldyciKX11LmNhbGwodGhpcyx0LHIscyl9O3ZhciBwPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpoLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhwLHtub2RlOntnZXQ6ZnVuY3Rpb24gZSgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJub2RlIix7Y29uZmlndXJhYmxlOnRydWUsdmFsdWU6dGhpcy5fY29tcHV0ZU5vZGUoKX0pO3JldHVybiB0aGlzLm5vZGV9fSxwYXJlbnQ6e2dldDpmdW5jdGlvbiBlKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInBhcmVudCIse2NvbmZpZ3VyYWJsZTp0cnVlLHZhbHVlOnRoaXMuX2NvbXB1dGVQYXJlbnQoKX0pO3JldHVybiB0aGlzLnBhcmVudH19LHNjb3BlOntnZXQ6ZnVuY3Rpb24gZSgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJzY29wZSIse2NvbmZpZ3VyYWJsZTp0cnVlLHZhbHVlOnRoaXMuX2NvbXB1dGVTY29wZSgpfSk7cmV0dXJuIHRoaXMuc2NvcGV9fX0pO3AucmVwbGFjZT1mdW5jdGlvbigpe2RlbGV0ZSB0aGlzLm5vZGU7ZGVsZXRlIHRoaXMucGFyZW50O2RlbGV0ZSB0aGlzLnNjb3BlO3JldHVybiB1LnByb3RvdHlwZS5yZXBsYWNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07cC5wcnVuZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMucGFyZW50O3RoaXMucmVwbGFjZSgpO3JldHVybiBnKGUpfTtwLl9jb21wdXRlTm9kZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMudmFsdWU7aWYoci5Ob2RlLmNoZWNrKGUpKXtyZXR1cm4gZX12YXIgdD10aGlzLnBhcmVudFBhdGg7cmV0dXJuIHQmJnQubm9kZXx8bnVsbH07cC5fY29tcHV0ZVBhcmVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMudmFsdWU7dmFyIHQ9dGhpcy5wYXJlbnRQYXRoO2lmKCFyLk5vZGUuY2hlY2soZSkpe3doaWxlKHQmJiFyLk5vZGUuY2hlY2sodC52YWx1ZSkpe3Q9dC5wYXJlbnRQYXRofWlmKHQpe3Q9dC5wYXJlbnRQYXRofX13aGlsZSh0JiYhci5Ob2RlLmNoZWNrKHQudmFsdWUpKXt0PXQucGFyZW50UGF0aH1yZXR1cm4gdHx8bnVsbH07cC5fY29tcHV0ZVNjb3BlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52YWx1ZTt2YXIgdD10aGlzLnBhcmVudFBhdGg7dmFyIHM9dCYmdC5zY29wZTtpZihyLk5vZGUuY2hlY2soZSkmJmMuaXNFc3RhYmxpc2hlZEJ5KGUpKXtzPW5ldyBjKHRoaXMscyl9cmV0dXJuIHN8fG51bGx9O3AuZ2V0VmFsdWVQcm9wZXJ0eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5nZXRGaWVsZFZhbHVlKHRoaXMudmFsdWUsZSl9O3AubmVlZHNQYXJlbnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wYXJlbnRQYXRoO2lmKCF0KXtyZXR1cm4gZmFsc2V9dmFyIHM9dGhpcy52YWx1ZTtpZighci5FeHByZXNzaW9uLmNoZWNrKHMpKXtyZXR1cm4gZmFsc2V9aWYocy50eXBlPT09IklkZW50aWZpZXIiKXtyZXR1cm4gZmFsc2V9d2hpbGUoIXIuTm9kZS5jaGVjayh0LnZhbHVlKSl7dD10LnBhcmVudFBhdGg7aWYoIXQpe3JldHVybiBmYWxzZX19dmFyIGk9dC52YWx1ZTtzd2l0Y2gocy50eXBlKXtjYXNlIlVuYXJ5RXhwcmVzc2lvbiI6Y2FzZSJTcHJlYWRFbGVtZW50IjpjYXNlIlNwcmVhZFByb3BlcnR5IjpyZXR1cm4gaS50eXBlPT09Ik1lbWJlckV4cHJlc3Npb24iJiZ0aGlzLm5hbWU9PT0ib2JqZWN0IiYmaS5vYmplY3Q9PT1zO2Nhc2UiQmluYXJ5RXhwcmVzc2lvbiI6Y2FzZSJMb2dpY2FsRXhwcmVzc2lvbiI6c3dpdGNoKGkudHlwZSl7Y2FzZSJDYWxsRXhwcmVzc2lvbiI6cmV0dXJuIHRoaXMubmFtZT09PSJjYWxsZWUiJiZpLmNhbGxlZT09PXM7Y2FzZSJVbmFyeUV4cHJlc3Npb24iOmNhc2UiU3ByZWFkRWxlbWVudCI6Y2FzZSJTcHJlYWRQcm9wZXJ0eSI6cmV0dXJuIHRydWU7Y2FzZSJNZW1iZXJFeHByZXNzaW9uIjpyZXR1cm4gdGhpcy5uYW1lPT09Im9iamVjdCImJmkub2JqZWN0PT09cztjYXNlIkJpbmFyeUV4cHJlc3Npb24iOmNhc2UiTG9naWNhbEV4cHJlc3Npb24iOnt2YXIgbj1zO3ZhciBhPWkub3BlcmF0b3I7dmFyIGw9ZFthXTt2YXIgdT1uLm9wZXJhdG9yO3ZhciBjPWRbdV07aWYobD5jKXtyZXR1cm4gdHJ1ZX1pZihsPT09YyYmdGhpcy5uYW1lPT09InJpZ2h0Iil7aWYoaS5yaWdodCE9PW4pe3Rocm93IG5ldyBFcnJvcigiTm9kZXMgbXVzdCBiZSBlcXVhbCIpfXJldHVybiB0cnVlfX1kZWZhdWx0OnJldHVybiBmYWxzZX1jYXNlIlNlcXVlbmNlRXhwcmVzc2lvbiI6c3dpdGNoKGkudHlwZSl7Y2FzZSJGb3JTdGF0ZW1lbnQiOnJldHVybiBmYWxzZTtjYXNlIkV4cHJlc3Npb25TdGF0ZW1lbnQiOnJldHVybiB0aGlzLm5hbWUhPT0iZXhwcmVzc2lvbiI7ZGVmYXVsdDpyZXR1cm4gdHJ1ZX1jYXNlIllpZWxkRXhwcmVzc2lvbiI6c3dpdGNoKGkudHlwZSl7Y2FzZSJCaW5hcnlFeHByZXNzaW9uIjpjYXNlIkxvZ2ljYWxFeHByZXNzaW9uIjpjYXNlIlVuYXJ5RXhwcmVzc2lvbiI6Y2FzZSJTcHJlYWRFbGVtZW50IjpjYXNlIlNwcmVhZFByb3BlcnR5IjpjYXNlIkNhbGxFeHByZXNzaW9uIjpjYXNlIk1lbWJlckV4cHJlc3Npb24iOmNhc2UiTmV3RXhwcmVzc2lvbiI6Y2FzZSJDb25kaXRpb25hbEV4cHJlc3Npb24iOmNhc2UiWWllbGRFeHByZXNzaW9uIjpyZXR1cm4gdHJ1ZTtkZWZhdWx0OnJldHVybiBmYWxzZX1jYXNlIkxpdGVyYWwiOnJldHVybiBpLnR5cGU9PT0iTWVtYmVyRXhwcmVzc2lvbiImJm8uY2hlY2socy52YWx1ZSkmJnRoaXMubmFtZT09PSJvYmplY3QiJiZpLm9iamVjdD09PXM7Y2FzZSJBc3NpZ25tZW50RXhwcmVzc2lvbiI6Y2FzZSJDb25kaXRpb25hbEV4cHJlc3Npb24iOnN3aXRjaChpLnR5cGUpe2Nhc2UiVW5hcnlFeHByZXNzaW9uIjpjYXNlIlNwcmVhZEVsZW1lbnQiOmNhc2UiU3ByZWFkUHJvcGVydHkiOmNhc2UiQmluYXJ5RXhwcmVzc2lvbiI6Y2FzZSJMb2dpY2FsRXhwcmVzc2lvbiI6cmV0dXJuIHRydWU7Y2FzZSJDYWxsRXhwcmVzc2lvbiI6cmV0dXJuIHRoaXMubmFtZT09PSJjYWxsZWUiJiZpLmNhbGxlZT09PXM7Y2FzZSJDb25kaXRpb25hbEV4cHJlc3Npb24iOnJldHVybiB0aGlzLm5hbWU9PT0idGVzdCImJmkudGVzdD09PXM7Y2FzZSJNZW1iZXJFeHByZXNzaW9uIjpyZXR1cm4gdGhpcy5uYW1lPT09Im9iamVjdCImJmkub2JqZWN0PT09cztkZWZhdWx0OnJldHVybiBmYWxzZX1kZWZhdWx0OmlmKGkudHlwZT09PSJOZXdFeHByZXNzaW9uIiYmdGhpcy5uYW1lPT09ImNhbGxlZSImJmkuY2FsbGVlPT09cyl7cmV0dXJuIG0ocyl9fWlmKGUhPT10cnVlJiYhdGhpcy5jYW5CZUZpcnN0SW5TdGF0ZW1lbnQoKSYmdGhpcy5maXJzdEluU3RhdGVtZW50KCkpcmV0dXJuIHRydWU7cmV0dXJuIGZhbHNlfTtmdW5jdGlvbiBmKGUpe3JldHVybiByLkJpbmFyeUV4cHJlc3Npb24uY2hlY2soZSl8fHIuTG9naWNhbEV4cHJlc3Npb24uY2hlY2soZSl9dmFyIGQ9e307W1sifHwiXSxbIiYmIl0sWyJ8Il0sWyJeIl0sWyImIl0sWyI9PSIsIj09PSIsIiE9IiwiIT09Il0sWyI8IiwiPiIsIjw9IiwiPj0iLCJpbiIsImluc3RhbmNlb2YiXSxbIj4+IiwiPDwiLCI+Pj4iXSxbIisiLCItIl0sWyIqIiwiLyIsIiUiXV0uZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2RbZV09dH0pKX0pKTtmdW5jdGlvbiBtKGUpe2lmKHIuQ2FsbEV4cHJlc3Npb24uY2hlY2soZSkpe3JldHVybiB0cnVlfWlmKGwuY2hlY2soZSkpe3JldHVybiBlLnNvbWUobSl9aWYoci5Ob2RlLmNoZWNrKGUpKXtyZXR1cm4gdC5zb21lRmllbGQoZSwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbSh0KX0pKX1yZXR1cm4gZmFsc2V9cC5jYW5CZUZpcnN0SW5TdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm5vZGU7cmV0dXJuIXIuRnVuY3Rpb25FeHByZXNzaW9uLmNoZWNrKGUpJiYhci5PYmplY3RFeHByZXNzaW9uLmNoZWNrKGUpfTtwLmZpcnN0SW5TdGF0ZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4geSh0aGlzKX07ZnVuY3Rpb24geShlKXtmb3IodmFyIHQscztlLnBhcmVudDtlPWUucGFyZW50KXt0PWUubm9kZTtzPWUucGFyZW50Lm5vZGU7aWYoci5CbG9ja1N0YXRlbWVudC5jaGVjayhzKSYmZS5wYXJlbnQubmFtZT09PSJib2R5IiYmZS5uYW1lPT09MCl7aWYocy5ib2R5WzBdIT09dCl7dGhyb3cgbmV3IEVycm9yKCJOb2RlcyBtdXN0IGJlIGVxdWFsIil9cmV0dXJuIHRydWV9aWYoci5FeHByZXNzaW9uU3RhdGVtZW50LmNoZWNrKHMpJiZlLm5hbWU9PT0iZXhwcmVzc2lvbiIpe2lmKHMuZXhwcmVzc2lvbiE9PXQpe3Rocm93IG5ldyBFcnJvcigiTm9kZXMgbXVzdCBiZSBlcXVhbCIpfXJldHVybiB0cnVlfWlmKHIuU2VxdWVuY2VFeHByZXNzaW9uLmNoZWNrKHMpJiZlLnBhcmVudC5uYW1lPT09ImV4cHJlc3Npb25zIiYmZS5uYW1lPT09MCl7aWYocy5leHByZXNzaW9uc1swXSE9PXQpe3Rocm93IG5ldyBFcnJvcigiTm9kZXMgbXVzdCBiZSBlcXVhbCIpfWNvbnRpbnVlfWlmKHIuQ2FsbEV4cHJlc3Npb24uY2hlY2socykmJmUubmFtZT09PSJjYWxsZWUiKXtpZihzLmNhbGxlZSE9PXQpe3Rocm93IG5ldyBFcnJvcigiTm9kZXMgbXVzdCBiZSBlcXVhbCIpfWNvbnRpbnVlfWlmKHIuTWVtYmVyRXhwcmVzc2lvbi5jaGVjayhzKSYmZS5uYW1lPT09Im9iamVjdCIpe2lmKHMub2JqZWN0IT09dCl7dGhyb3cgbmV3IEVycm9yKCJOb2RlcyBtdXN0IGJlIGVxdWFsIil9Y29udGludWV9aWYoci5Db25kaXRpb25hbEV4cHJlc3Npb24uY2hlY2socykmJmUubmFtZT09PSJ0ZXN0Iil7aWYocy50ZXN0IT09dCl7dGhyb3cgbmV3IEVycm9yKCJOb2RlcyBtdXN0IGJlIGVxdWFsIil9Y29udGludWV9aWYoZihzKSYmZS5uYW1lPT09ImxlZnQiKXtpZihzLmxlZnQhPT10KXt0aHJvdyBuZXcgRXJyb3IoIk5vZGVzIG11c3QgYmUgZXF1YWwiKX1jb250aW51ZX1pZihyLlVuYXJ5RXhwcmVzc2lvbi5jaGVjayhzKSYmIXMucHJlZml4JiZlLm5hbWU9PT0iYXJndW1lbnQiKXtpZihzLmFyZ3VtZW50IT09dCl7dGhyb3cgbmV3IEVycm9yKCJOb2RlcyBtdXN0IGJlIGVxdWFsIil9Y29udGludWV9cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfWZ1bmN0aW9uIGcoZSl7aWYoci5WYXJpYWJsZURlY2xhcmF0aW9uLmNoZWNrKGUubm9kZSkpe3ZhciB0PWUuZ2V0KCJkZWNsYXJhdGlvbnMiKS52YWx1ZTtpZighdHx8dC5sZW5ndGg9PT0wKXtyZXR1cm4gZS5wcnVuZSgpfX1lbHNlIGlmKHIuRXhwcmVzc2lvblN0YXRlbWVudC5jaGVjayhlLm5vZGUpKXtpZighZS5nZXQoImV4cHJlc3Npb24iKS52YWx1ZSl7cmV0dXJuIGUucHJ1bmUoKX19ZWxzZSBpZihyLklmU3RhdGVtZW50LmNoZWNrKGUubm9kZSkpe3goZSl9cmV0dXJuIGV9ZnVuY3Rpb24geChlKXt2YXIgdD1lLmdldCgidGVzdCIpLnZhbHVlO3ZhciBzPWUuZ2V0KCJhbHRlcm5hdGUiKS52YWx1ZTt2YXIgaT1lLmdldCgiY29uc2VxdWVudCIpLnZhbHVlO2lmKCFpJiYhcyl7dmFyIG49YS5leHByZXNzaW9uU3RhdGVtZW50KHQpO2UucmVwbGFjZShuKX1lbHNlIGlmKCFpJiZzKXt2YXIgbz1hLnVuYXJ5RXhwcmVzc2lvbigiISIsdCx0cnVlKTtpZihyLlVuYXJ5RXhwcmVzc2lvbi5jaGVjayh0KSYmdC5vcGVyYXRvcj09PSIhIil7bz10LmFyZ3VtZW50fWUuZ2V0KCJ0ZXN0IikucmVwbGFjZShvKTtlLmdldCgiY29uc2VxdWVudCIpLnJlcGxhY2Uocyk7ZS5nZXQoImFsdGVybmF0ZSIpLnJlcGxhY2UoKX19cmV0dXJuIGh9dC5kZWZhdWx0PWE7ZS5leHBvcnRzPXRbImRlZmF1bHQiXX0pKHNlLHNlLmV4cG9ydHMpOyhmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6dHJ1ZX0pO3ZhciByPVI7dmFyIHM9ci5fX2ltcG9ydERlZmF1bHQoeik7dmFyIGk9ci5fX2ltcG9ydERlZmF1bHQoc2UuZXhwb3J0cyk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBhKGUpe3ZhciB0PWUudXNlKHMuZGVmYXVsdCk7dmFyIHI9ZS51c2UoaS5kZWZhdWx0KTt2YXIgYT10LmJ1aWx0SW5UeXBlcy5hcnJheTt2YXIgbz10LmJ1aWx0SW5UeXBlcy5vYmplY3Q7dmFyIGw9dC5idWlsdEluVHlwZXMuZnVuY3Rpb247dmFyIHU7dmFyIGM9ZnVuY3Rpb24gZSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGUpKXt0aHJvdyBuZXcgRXJyb3IoIlBhdGhWaXNpdG9yIGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBpbnZva2VkIHdpdGhvdXQgJ25ldyciKX10aGlzLl9yZXVzYWJsZUNvbnRleHRTdGFjaz1bXTt0aGlzLl9tZXRob2ROYW1lVGFibGU9aCh0aGlzKTt0aGlzLl9zaG91bGRWaXNpdENvbW1lbnRzPW4uY2FsbCh0aGlzLl9tZXRob2ROYW1lVGFibGUsIkJsb2NrIil8fG4uY2FsbCh0aGlzLl9tZXRob2ROYW1lVGFibGUsIkxpbmUiKTt0aGlzLkNvbnRleHQ9bSh0aGlzKTt0aGlzLl92aXNpdGluZz1mYWxzZTt0aGlzLl9jaGFuZ2VSZXBvcnRlZD1mYWxzZX07ZnVuY3Rpb24gaChlKXt2YXIgcj1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgcyBpbiBlKXtpZigvXnZpc2l0W0EtWl0vLnRlc3Qocykpe3Jbcy5zbGljZSgidmlzaXQiLmxlbmd0aCldPXRydWV9fXZhciBpPXQuY29tcHV0ZVN1cGVydHlwZUxvb2t1cFRhYmxlKHIpO3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIGE9T2JqZWN0LmtleXMoaSk7dmFyIG89YS5sZW5ndGg7Zm9yKHZhciB1PTA7dTxvOysrdSl7dmFyIGM9YVt1XTtzPSJ2aXNpdCIraVtjXTtpZihsLmNoZWNrKGVbc10pKXtuW2NdPXN9fXJldHVybiBufWMuZnJvbU1ldGhvZHNPYmplY3Q9ZnVuY3Rpb24gZSh0KXtpZih0IGluc3RhbmNlb2YgYyl7cmV0dXJuIHR9aWYoIW8uY2hlY2sodCkpe3JldHVybiBuZXcgY312YXIgcj1mdW5jdGlvbiBlKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZSkpe3Rocm93IG5ldyBFcnJvcigiVmlzaXRvciBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgaW52b2tlZCB3aXRob3V0ICduZXcnIil9Yy5jYWxsKHRoaXMpfTt2YXIgcz1yLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGYpO3MuY29uc3RydWN0b3I9cjtwKHMsdCk7cChyLGMpO2wuYXNzZXJ0KHIuZnJvbU1ldGhvZHNPYmplY3QpO2wuYXNzZXJ0KHIudmlzaXQpO3JldHVybiBuZXcgcn07ZnVuY3Rpb24gcChlLHQpe2Zvcih2YXIgciBpbiB0KXtpZihuLmNhbGwodCxyKSl7ZVtyXT10W3JdfX1yZXR1cm4gZX1jLnZpc2l0PWZ1bmN0aW9uIGUodCxyKXtyZXR1cm4gYy5mcm9tTWV0aG9kc09iamVjdChyKS52aXNpdCh0KX07dmFyIGY9Yy5wcm90b3R5cGU7Zi52aXNpdD1mdW5jdGlvbigpe2lmKHRoaXMuX3Zpc2l0aW5nKXt0aHJvdyBuZXcgRXJyb3IoIlJlY3Vyc2l2ZWx5IGNhbGxpbmcgdmlzaXRvci52aXNpdChwYXRoKSByZXNldHMgdmlzaXRvciBzdGF0ZS4gIisiVHJ5IHRoaXMudmlzaXQocGF0aCkgb3IgdGhpcy50cmF2ZXJzZShwYXRoKSBpbnN0ZWFkLiIpfXRoaXMuX3Zpc2l0aW5nPXRydWU7dGhpcy5fY2hhbmdlUmVwb3J0ZWQ9ZmFsc2U7dGhpcy5fYWJvcnRSZXF1ZXN0ZWQ9ZmFsc2U7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDt2YXIgdD1uZXcgQXJyYXkoZSk7Zm9yKHZhciBzPTA7czxlOysrcyl7dFtzXT1hcmd1bWVudHNbc119aWYoISh0WzBdaW5zdGFuY2VvZiByKSl7dFswXT1uZXcgcih7cm9vdDp0WzBdfSkuZ2V0KCJyb290Iil9dGhpcy5yZXNldC5hcHBseSh0aGlzLHQpO3ZhciBpO3RyeXt2YXIgbj10aGlzLnZpc2l0V2l0aG91dFJlc2V0KHRbMF0pO2k9dHJ1ZX1maW5hbGx5e3RoaXMuX3Zpc2l0aW5nPWZhbHNlO2lmKCFpJiZ0aGlzLl9hYm9ydFJlcXVlc3RlZCl7cmV0dXJuIHRbMF0udmFsdWV9fXJldHVybiBufTtmLkFib3J0UmVxdWVzdD1mdW5jdGlvbiBlKCl7fTtmLmFib3J0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztlLl9hYm9ydFJlcXVlc3RlZD10cnVlO3ZhciB0PW5ldyBlLkFib3J0UmVxdWVzdDt0LmNhbmNlbD1mdW5jdGlvbigpe2UuX2Fib3J0UmVxdWVzdGVkPWZhbHNlfTt0aHJvdyB0fTtmLnJlc2V0PWZ1bmN0aW9uKGUpe307Zi52aXNpdFdpdGhvdXRSZXNldD1mdW5jdGlvbihlKXtpZih0aGlzIGluc3RhbmNlb2YgdGhpcy5Db250ZXh0KXtyZXR1cm4gdGhpcy52aXNpdG9yLnZpc2l0V2l0aG91dFJlc2V0KGUpfWlmKCEoZSBpbnN0YW5jZW9mIHIpKXt0aHJvdyBuZXcgRXJyb3IoIiIpfXZhciB0PWUudmFsdWU7dmFyIHM9dCYmdHlwZW9mIHQ9PT0ib2JqZWN0IiYmdHlwZW9mIHQudHlwZT09PSJzdHJpbmciJiZ0aGlzLl9tZXRob2ROYW1lVGFibGVbdC50eXBlXTtpZihzKXt2YXIgaT10aGlzLmFjcXVpcmVDb250ZXh0KGUpO3RyeXtyZXR1cm4gaS5pbnZva2VWaXNpdG9yTWV0aG9kKHMpfWZpbmFsbHl7dGhpcy5yZWxlYXNlQ29udGV4dChpKX19ZWxzZXtyZXR1cm4gZChlLHRoaXMpfX07ZnVuY3Rpb24gZChlLHMpe2lmKCEoZSBpbnN0YW5jZW9mIHIpKXt0aHJvdyBuZXcgRXJyb3IoIiIpfWlmKCEocyBpbnN0YW5jZW9mIGMpKXt0aHJvdyBuZXcgRXJyb3IoIiIpfXZhciBpPWUudmFsdWU7aWYoYS5jaGVjayhpKSl7ZS5lYWNoKHMudmlzaXRXaXRob3V0UmVzZXQscyl9ZWxzZSBpZighby5jaGVjayhpKSk7ZWxzZXt2YXIgbD10LmdldEZpZWxkTmFtZXMoaSk7aWYocy5fc2hvdWxkVmlzaXRDb21tZW50cyYmaS5jb21tZW50cyYmbC5pbmRleE9mKCJjb21tZW50cyIpPDApe2wucHVzaCgiY29tbWVudHMiKX12YXIgdT1sLmxlbmd0aDt2YXIgaD1bXTtmb3IodmFyIHA9MDtwPHU7KytwKXt2YXIgZj1sW3BdO2lmKCFuLmNhbGwoaSxmKSl7aVtmXT10LmdldEZpZWxkVmFsdWUoaSxmKX1oLnB1c2goZS5nZXQoZikpfWZvcih2YXIgcD0wO3A8dTsrK3Ape3MudmlzaXRXaXRob3V0UmVzZXQoaFtwXSl9fXJldHVybiBlLnZhbHVlfWYuYWNxdWlyZUNvbnRleHQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5fcmV1c2FibGVDb250ZXh0U3RhY2subGVuZ3RoPT09MCl7cmV0dXJuIG5ldyB0aGlzLkNvbnRleHQoZSl9cmV0dXJuIHRoaXMuX3JldXNhYmxlQ29udGV4dFN0YWNrLnBvcCgpLnJlc2V0KGUpfTtmLnJlbGVhc2VDb250ZXh0PWZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIHRoaXMuQ29udGV4dCkpe3Rocm93IG5ldyBFcnJvcigiIil9dGhpcy5fcmV1c2FibGVDb250ZXh0U3RhY2sucHVzaChlKTtlLmN1cnJlbnRQYXRoPW51bGx9O2YucmVwb3J0Q2hhbmdlZD1mdW5jdGlvbigpe3RoaXMuX2NoYW5nZVJlcG9ydGVkPXRydWV9O2Yud2FzQ2hhbmdlUmVwb3J0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hhbmdlUmVwb3J0ZWR9O2Z1bmN0aW9uIG0oZSl7ZnVuY3Rpb24gdChzKXtpZighKHRoaXMgaW5zdGFuY2VvZiB0KSl7dGhyb3cgbmV3IEVycm9yKCIiKX1pZighKHRoaXMgaW5zdGFuY2VvZiBjKSl7dGhyb3cgbmV3IEVycm9yKCIiKX1pZighKHMgaW5zdGFuY2VvZiByKSl7dGhyb3cgbmV3IEVycm9yKCIiKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywidmlzaXRvciIse3ZhbHVlOmUsd3JpdGFibGU6ZmFsc2UsZW51bWVyYWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTpmYWxzZX0pO3RoaXMuY3VycmVudFBhdGg9czt0aGlzLm5lZWRUb0NhbGxUcmF2ZXJzZT10cnVlO09iamVjdC5zZWFsKHRoaXMpfWlmKCEoZSBpbnN0YW5jZW9mIGMpKXt0aHJvdyBuZXcgRXJyb3IoIiIpfXZhciBzPXQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSk7cy5jb25zdHJ1Y3Rvcj10O3Aocyx5KTtyZXR1cm4gdH12YXIgeT1PYmplY3QuY3JlYXRlKG51bGwpO3kucmVzZXQ9ZnVuY3Rpb24gZSh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiB0aGlzLkNvbnRleHQpKXt0aHJvdyBuZXcgRXJyb3IoIiIpfWlmKCEodCBpbnN0YW5jZW9mIHIpKXt0aHJvdyBuZXcgRXJyb3IoIiIpfXRoaXMuY3VycmVudFBhdGg9dDt0aGlzLm5lZWRUb0NhbGxUcmF2ZXJzZT10cnVlO3JldHVybiB0aGlzfTt5Lmludm9rZVZpc2l0b3JNZXRob2Q9ZnVuY3Rpb24gZSh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiB0aGlzLkNvbnRleHQpKXt0aHJvdyBuZXcgRXJyb3IoIiIpfWlmKCEodGhpcy5jdXJyZW50UGF0aCBpbnN0YW5jZW9mIHIpKXt0aHJvdyBuZXcgRXJyb3IoIiIpfXZhciBzPXRoaXMudmlzaXRvclt0XS5jYWxsKHRoaXMsdGhpcy5jdXJyZW50UGF0aCk7aWYocz09PWZhbHNlKXt0aGlzLm5lZWRUb0NhbGxUcmF2ZXJzZT1mYWxzZX1lbHNlIGlmKHMhPT11KXt0aGlzLmN1cnJlbnRQYXRoPXRoaXMuY3VycmVudFBhdGgucmVwbGFjZShzKVswXTtpZih0aGlzLm5lZWRUb0NhbGxUcmF2ZXJzZSl7dGhpcy50cmF2ZXJzZSh0aGlzLmN1cnJlbnRQYXRoKX19aWYodGhpcy5uZWVkVG9DYWxsVHJhdmVyc2UhPT1mYWxzZSl7dGhyb3cgbmV3IEVycm9yKCJNdXN0IGVpdGhlciBjYWxsIHRoaXMudHJhdmVyc2Ugb3IgcmV0dXJuIGZhbHNlIGluICIrdCl9dmFyIGk9dGhpcy5jdXJyZW50UGF0aDtyZXR1cm4gaSYmaS52YWx1ZX07eS50cmF2ZXJzZT1mdW5jdGlvbiBlKHQscyl7aWYoISh0aGlzIGluc3RhbmNlb2YgdGhpcy5Db250ZXh0KSl7dGhyb3cgbmV3IEVycm9yKCIiKX1pZighKHQgaW5zdGFuY2VvZiByKSl7dGhyb3cgbmV3IEVycm9yKCIiKX1pZighKHRoaXMuY3VycmVudFBhdGggaW5zdGFuY2VvZiByKSl7dGhyb3cgbmV3IEVycm9yKCIiKX10aGlzLm5lZWRUb0NhbGxUcmF2ZXJzZT1mYWxzZTtyZXR1cm4gZCh0LGMuZnJvbU1ldGhvZHNPYmplY3Qoc3x8dGhpcy52aXNpdG9yKSl9O3kudmlzaXQ9ZnVuY3Rpb24gZSh0LHMpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHRoaXMuQ29udGV4dCkpe3Rocm93IG5ldyBFcnJvcigiIil9aWYoISh0IGluc3RhbmNlb2Ygcikpe3Rocm93IG5ldyBFcnJvcigiIil9aWYoISh0aGlzLmN1cnJlbnRQYXRoIGluc3RhbmNlb2Ygcikpe3Rocm93IG5ldyBFcnJvcigiIil9dGhpcy5uZWVkVG9DYWxsVHJhdmVyc2U9ZmFsc2U7cmV0dXJuIGMuZnJvbU1ldGhvZHNPYmplY3Qoc3x8dGhpcy52aXNpdG9yKS52aXNpdFdpdGhvdXRSZXNldCh0KX07eS5yZXBvcnRDaGFuZ2VkPWZ1bmN0aW9uIGUoKXt0aGlzLnZpc2l0b3IucmVwb3J0Q2hhbmdlZCgpfTt5LmFib3J0PWZ1bmN0aW9uIGUoKXt0aGlzLm5lZWRUb0NhbGxUcmF2ZXJzZT1mYWxzZTt0aGlzLnZpc2l0b3IuYWJvcnQoKX07cmV0dXJuIGN9dC5kZWZhdWx0PWE7ZS5leHBvcnRzPXRbImRlZmF1bHQiXX0pKHJlLHJlLmV4cG9ydHMpO3ZhciBhZT17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTp0cnVlfSk7dmFyIHI9Ujt2YXIgcz1yLl9faW1wb3J0RGVmYXVsdCh6KTtmdW5jdGlvbiBpKGUpe3ZhciB0PWUudXNlKHMuZGVmYXVsdCk7dmFyIHI9dC5nZXRGaWVsZE5hbWVzO3ZhciBpPXQuZ2V0RmllbGRWYWx1ZTt2YXIgbj10LmJ1aWx0SW5UeXBlcy5hcnJheTt2YXIgYT10LmJ1aWx0SW5UeXBlcy5vYmplY3Q7dmFyIG89dC5idWlsdEluVHlwZXMuRGF0ZTt2YXIgbD10LmJ1aWx0SW5UeXBlcy5SZWdFeHA7dmFyIHU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBjKGUsdCxyKXtpZihuLmNoZWNrKHIpKXtyLmxlbmd0aD0wfWVsc2V7cj1udWxsfXJldHVybiBwKGUsdCxyKX1jLmFzc2VydD1mdW5jdGlvbihlLHQpe3ZhciByPVtdO2lmKCFjKGUsdCxyKSl7aWYoci5sZW5ndGg9PT0wKXtpZihlIT09dCl7dGhyb3cgbmV3IEVycm9yKCJOb2RlcyBtdXN0IGJlIGVxdWFsIil9fWVsc2V7dGhyb3cgbmV3IEVycm9yKCJOb2RlcyBkaWZmZXIgaW4gdGhlIGZvbGxvd2luZyBwYXRoOiAiK3IubWFwKGgpLmpvaW4oIiIpKX19fTtmdW5jdGlvbiBoKGUpe2lmKC9bXyRhLXpdW18kYS16MC05XSovaS50ZXN0KGUpKXtyZXR1cm4iLiIrZX1yZXR1cm4iWyIrSlNPTi5zdHJpbmdpZnkoZSkrIl0ifWZ1bmN0aW9uIHAoZSx0LHIpe2lmKGU9PT10KXtyZXR1cm4gdHJ1ZX1pZihuLmNoZWNrKGUpKXtyZXR1cm4gZihlLHQscil9aWYoYS5jaGVjayhlKSl7cmV0dXJuIGQoZSx0LHIpfWlmKG8uY2hlY2soZSkpe3JldHVybiBvLmNoZWNrKHQpJiYrZT09PSt0fWlmKGwuY2hlY2soZSkpe3JldHVybiBsLmNoZWNrKHQpJiZlLnNvdXJjZT09PXQuc291cmNlJiZlLmdsb2JhbD09PXQuZ2xvYmFsJiZlLm11bHRpbGluZT09PXQubXVsdGlsaW5lJiZlLmlnbm9yZUNhc2U9PT10Lmlnbm9yZUNhc2V9cmV0dXJuIGU9PXR9ZnVuY3Rpb24gZihlLHQscil7bi5hc3NlcnQoZSk7dmFyIHM9ZS5sZW5ndGg7aWYoIW4uY2hlY2sodCl8fHQubGVuZ3RoIT09cyl7aWYocil7ci5wdXNoKCJsZW5ndGgiKX1yZXR1cm4gZmFsc2V9Zm9yKHZhciBpPTA7aTxzOysraSl7aWYocil7ci5wdXNoKGkpfWlmKGkgaW4gZSE9PWkgaW4gdCl7cmV0dXJuIGZhbHNlfWlmKCFwKGVbaV0sdFtpXSxyKSl7cmV0dXJuIGZhbHNlfWlmKHIpe3ZhciBhPXIucG9wKCk7aWYoYSE9PWkpe3Rocm93IG5ldyBFcnJvcigiIithKX19fXJldHVybiB0cnVlfWZ1bmN0aW9uIGQoZSx0LHMpe2EuYXNzZXJ0KGUpO2lmKCFhLmNoZWNrKHQpKXtyZXR1cm4gZmFsc2V9aWYoZS50eXBlIT09dC50eXBlKXtpZihzKXtzLnB1c2goInR5cGUiKX1yZXR1cm4gZmFsc2V9dmFyIG49cihlKTt2YXIgbz1uLmxlbmd0aDt2YXIgbD1yKHQpO3ZhciBjPWwubGVuZ3RoO2lmKG89PT1jKXtmb3IodmFyIGg9MDtoPG87KytoKXt2YXIgZj1uW2hdO3ZhciBkPWkoZSxmKTt2YXIgbT1pKHQsZik7aWYocyl7cy5wdXNoKGYpfWlmKCFwKGQsbSxzKSl7cmV0dXJuIGZhbHNlfWlmKHMpe3ZhciB5PXMucG9wKCk7aWYoeSE9PWYpe3Rocm93IG5ldyBFcnJvcigiIit5KX19fXJldHVybiB0cnVlfWlmKCFzKXtyZXR1cm4gZmFsc2V9dmFyIGc9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoaD0wO2g8bzsrK2gpe2dbbltoXV09dHJ1ZX1mb3IoaD0wO2g8YzsrK2gpe2Y9bFtoXTtpZighdS5jYWxsKGcsZikpe3MucHVzaChmKTtyZXR1cm4gZmFsc2V9ZGVsZXRlIGdbZl19Zm9yKGYgaW4gZyl7cy5wdXNoKGYpO2JyZWFrfXJldHVybiBmYWxzZX1yZXR1cm4gY310LmRlZmF1bHQ9aTtlLmV4cG9ydHM9dFsiZGVmYXVsdCJdfSkoYWUsYWUuZXhwb3J0cyk7KGZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTp0cnVlfSk7dmFyIHI9Ujt2YXIgcz1yLl9faW1wb3J0RGVmYXVsdCh6KTt2YXIgaT1yLl9faW1wb3J0RGVmYXVsdChyZS5leHBvcnRzKTt2YXIgbj1yLl9faW1wb3J0RGVmYXVsdChhZS5leHBvcnRzKTt2YXIgYT1yLl9faW1wb3J0RGVmYXVsdChpZS5leHBvcnRzKTt2YXIgbz1yLl9faW1wb3J0RGVmYXVsdChzZS5leHBvcnRzKTtmdW5jdGlvbiBsKGUpe3ZhciB0PXUoKTt2YXIgcj10LnVzZShzLmRlZmF1bHQpO2UuZm9yRWFjaCh0LnVzZSk7ci5maW5hbGl6ZSgpO3ZhciBsPXQudXNlKGkuZGVmYXVsdCk7cmV0dXJue1R5cGU6ci5UeXBlLGJ1aWx0SW5UeXBlczpyLmJ1aWx0SW5UeXBlcyxuYW1lZFR5cGVzOnIubmFtZWRUeXBlcyxidWlsZGVyczpyLmJ1aWxkZXJzLGRlZmluZU1ldGhvZDpyLmRlZmluZU1ldGhvZCxnZXRGaWVsZE5hbWVzOnIuZ2V0RmllbGROYW1lcyxnZXRGaWVsZFZhbHVlOnIuZ2V0RmllbGRWYWx1ZSxlYWNoRmllbGQ6ci5lYWNoRmllbGQsc29tZUZpZWxkOnIuc29tZUZpZWxkLGdldFN1cGVydHlwZU5hbWVzOnIuZ2V0U3VwZXJ0eXBlTmFtZXMsZ2V0QnVpbGRlck5hbWU6ci5nZXRCdWlsZGVyTmFtZSxhc3ROb2Rlc0FyZUVxdWl2YWxlbnQ6dC51c2Uobi5kZWZhdWx0KSxmaW5hbGl6ZTpyLmZpbmFsaXplLFBhdGg6dC51c2UoYS5kZWZhdWx0KSxOb2RlUGF0aDp0LnVzZShvLmRlZmF1bHQpLFBhdGhWaXNpdG9yOmwsdXNlOnQudXNlLHZpc2l0OmwudmlzaXR9fXQuZGVmYXVsdD1sO2Z1bmN0aW9uIHUoKXt2YXIgZT1bXTt2YXIgdD1bXTtmdW5jdGlvbiByKHIpe3ZhciBpPWUuaW5kZXhPZihyKTtpZihpPT09LTEpe2k9ZS5sZW5ndGg7ZS5wdXNoKHIpO3RbaV09cihzKX1yZXR1cm4gdFtpXX12YXIgcz17dXNlOnJ9O3JldHVybiBzfWUuZXhwb3J0cz10WyJkZWZhdWx0Il19KShVLFUuZXhwb3J0cyk7dmFyIG9lPXtleHBvcnRzOnt9fTt2YXIgbGU9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KGxlLCJfX2VzTW9kdWxlIix7dmFsdWU6dHJ1ZX0pO2xlLkxvZ2ljYWxPcGVyYXRvcnM9bGUuQXNzaWdubWVudE9wZXJhdG9ycz1sZS5CaW5hcnlPcGVyYXRvcnM9dm9pZCAwO2xlLkJpbmFyeU9wZXJhdG9ycz1bIj09IiwiIT0iLCI9PT0iLCIhPT0iLCI8IiwiPD0iLCI+IiwiPj0iLCI8PCIsIj4+IiwiPj4+IiwiKyIsIi0iLCIqIiwiLyIsIiUiLCImIiwifCIsIl4iLCJpbiIsImluc3RhbmNlb2YiXTtsZS5Bc3NpZ25tZW50T3BlcmF0b3JzPVsiPSIsIis9IiwiLT0iLCIqPSIsIi89IiwiJT0iLCI8PD0iLCI+Pj0iLCI+Pj49IiwifD0iLCJePSIsIiY9Il07bGUuTG9naWNhbE9wZXJhdG9ycz1bInx8IiwiJiYiXTt2YXIgdWU9e2V4cG9ydHM6e319OyhmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6dHJ1ZX0pO3ZhciByPVI7dmFyIHM9ci5fX2ltcG9ydERlZmF1bHQoeik7ZnVuY3Rpb24gaShlKXt2YXIgdD1lLnVzZShzLmRlZmF1bHQpO3ZhciByPXQuVHlwZTt2YXIgaT10LmJ1aWx0SW5UeXBlczt2YXIgbj1pLm51bWJlcjtmdW5jdGlvbiBhKGUpe3JldHVybiByLmZyb20oKGZ1bmN0aW9uKHQpe3JldHVybiBuLmNoZWNrKHQpJiZ0Pj1lfSksbisiID49ICIrZSl9dmFyIG89e251bGw6ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsfSxlbXB0eUFycmF5OmZ1bmN0aW9uIGUoKXtyZXR1cm5bXX0sZmFsc2U6ZnVuY3Rpb24gZSgpe3JldHVybiBmYWxzZX0sdHJ1ZTpmdW5jdGlvbiBlKCl7cmV0dXJuIHRydWV9LHVuZGVmaW5lZDpmdW5jdGlvbiBlKCl7fSwidXNlIHN0cmljdCI6ZnVuY3Rpb24gZSgpe3JldHVybiJ1c2Ugc3RyaWN0In19O3ZhciBsPXIub3IoaS5zdHJpbmcsaS5udW1iZXIsaS5ib29sZWFuLGkubnVsbCxpLnVuZGVmaW5lZCk7dmFyIHU9ci5mcm9tKChmdW5jdGlvbihlKXtpZihlPT09bnVsbClyZXR1cm4gdHJ1ZTt2YXIgdD10eXBlb2YgZTtpZih0PT09Im9iamVjdCJ8fHQ9PT0iZnVuY3Rpb24iKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9KSxsLnRvU3RyaW5nKCkpO3JldHVybntnZXE6YSxkZWZhdWx0czpvLGlzUHJpbWl0aXZlOnV9fXQuZGVmYXVsdD1pO2UuZXhwb3J0cz10WyJkZWZhdWx0Il19KSh1ZSx1ZS5leHBvcnRzKTsoZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTt2YXIgcj1SO3ZhciBzPWxlO3ZhciBpPXIuX19pbXBvcnREZWZhdWx0KHopO3ZhciBuPXIuX19pbXBvcnREZWZhdWx0KHVlLmV4cG9ydHMpO2Z1bmN0aW9uIGEoZSl7dmFyIHQ9ZS51c2UoaS5kZWZhdWx0KTt2YXIgcj10LlR5cGU7dmFyIGE9ci5kZWY7dmFyIG89ci5vcjt2YXIgbD1lLnVzZShuLmRlZmF1bHQpO3ZhciB1PWwuZGVmYXVsdHM7dmFyIGM9bC5nZXE7YSgiUHJpbnRhYmxlIikuZmllbGQoImxvYyIsbyhhKCJTb3VyY2VMb2NhdGlvbiIpLG51bGwpLHVbIm51bGwiXSx0cnVlKTthKCJOb2RlIikuYmFzZXMoIlByaW50YWJsZSIpLmZpZWxkKCJ0eXBlIixTdHJpbmcpLmZpZWxkKCJjb21tZW50cyIsbyhbYSgiQ29tbWVudCIpXSxudWxsKSx1WyJudWxsIl0sdHJ1ZSk7YSgiU291cmNlTG9jYXRpb24iKS5maWVsZCgic3RhcnQiLGEoIlBvc2l0aW9uIikpLmZpZWxkKCJlbmQiLGEoIlBvc2l0aW9uIikpLmZpZWxkKCJzb3VyY2UiLG8oU3RyaW5nLG51bGwpLHVbIm51bGwiXSk7YSgiUG9zaXRpb24iKS5maWVsZCgibGluZSIsYygxKSkuZmllbGQoImNvbHVtbiIsYygwKSk7YSgiRmlsZSIpLmJhc2VzKCJOb2RlIikuYnVpbGQoInByb2dyYW0iLCJuYW1lIikuZmllbGQoInByb2dyYW0iLGEoIlByb2dyYW0iKSkuZmllbGQoIm5hbWUiLG8oU3RyaW5nLG51bGwpLHVbIm51bGwiXSk7YSgiUHJvZ3JhbSIpLmJhc2VzKCJOb2RlIikuYnVpbGQoImJvZHkiKS5maWVsZCgiYm9keSIsW2EoIlN0YXRlbWVudCIpXSk7YSgiRnVuY3Rpb24iKS5iYXNlcygiTm9kZSIpLmZpZWxkKCJpZCIsbyhhKCJJZGVudGlmaWVyIiksbnVsbCksdVsibnVsbCJdKS5maWVsZCgicGFyYW1zIixbYSgiUGF0dGVybiIpXSkuZmllbGQoImJvZHkiLGEoIkJsb2NrU3RhdGVtZW50IikpLmZpZWxkKCJnZW5lcmF0b3IiLEJvb2xlYW4sdVsiZmFsc2UiXSkuZmllbGQoImFzeW5jIixCb29sZWFuLHVbImZhbHNlIl0pO2EoIlN0YXRlbWVudCIpLmJhc2VzKCJOb2RlIik7YSgiRW1wdHlTdGF0ZW1lbnQiKS5iYXNlcygiU3RhdGVtZW50IikuYnVpbGQoKTthKCJCbG9ja1N0YXRlbWVudCIpLmJhc2VzKCJTdGF0ZW1lbnQiKS5idWlsZCgiYm9keSIpLmZpZWxkKCJib2R5IixbYSgiU3RhdGVtZW50IildKTthKCJFeHByZXNzaW9uU3RhdGVtZW50IikuYmFzZXMoIlN0YXRlbWVudCIpLmJ1aWxkKCJleHByZXNzaW9uIikuZmllbGQoImV4cHJlc3Npb24iLGEoIkV4cHJlc3Npb24iKSk7YSgiSWZTdGF0ZW1lbnQiKS5iYXNlcygiU3RhdGVtZW50IikuYnVpbGQoInRlc3QiLCJjb25zZXF1ZW50IiwiYWx0ZXJuYXRlIikuZmllbGQoInRlc3QiLGEoIkV4cHJlc3Npb24iKSkuZmllbGQoImNvbnNlcXVlbnQiLGEoIlN0YXRlbWVudCIpKS5maWVsZCgiYWx0ZXJuYXRlIixvKGEoIlN0YXRlbWVudCIpLG51bGwpLHVbIm51bGwiXSk7YSgiTGFiZWxlZFN0YXRlbWVudCIpLmJhc2VzKCJTdGF0ZW1lbnQiKS5idWlsZCgibGFiZWwiLCJib2R5IikuZmllbGQoImxhYmVsIixhKCJJZGVudGlmaWVyIikpLmZpZWxkKCJib2R5IixhKCJTdGF0ZW1lbnQiKSk7YSgiQnJlYWtTdGF0ZW1lbnQiKS5iYXNlcygiU3RhdGVtZW50IikuYnVpbGQoImxhYmVsIikuZmllbGQoImxhYmVsIixvKGEoIklkZW50aWZpZXIiKSxudWxsKSx1WyJudWxsIl0pO2EoIkNvbnRpbnVlU3RhdGVtZW50IikuYmFzZXMoIlN0YXRlbWVudCIpLmJ1aWxkKCJsYWJlbCIpLmZpZWxkKCJsYWJlbCIsbyhhKCJJZGVudGlmaWVyIiksbnVsbCksdVsibnVsbCJdKTthKCJXaXRoU3RhdGVtZW50IikuYmFzZXMoIlN0YXRlbWVudCIpLmJ1aWxkKCJvYmplY3QiLCJib2R5IikuZmllbGQoIm9iamVjdCIsYSgiRXhwcmVzc2lvbiIpKS5maWVsZCgiYm9keSIsYSgiU3RhdGVtZW50IikpO2EoIlN3aXRjaFN0YXRlbWVudCIpLmJhc2VzKCJTdGF0ZW1lbnQiKS5idWlsZCgiZGlzY3JpbWluYW50IiwiY2FzZXMiLCJsZXhpY2FsIikuZmllbGQoImRpc2NyaW1pbmFudCIsYSgiRXhwcmVzc2lvbiIpKS5maWVsZCgiY2FzZXMiLFthKCJTd2l0Y2hDYXNlIildKS5maWVsZCgibGV4aWNhbCIsQm9vbGVhbix1WyJmYWxzZSJdKTthKCJSZXR1cm5TdGF0ZW1lbnQiKS5iYXNlcygiU3RhdGVtZW50IikuYnVpbGQoImFyZ3VtZW50IikuZmllbGQoImFyZ3VtZW50IixvKGEoIkV4cHJlc3Npb24iKSxudWxsKSk7YSgiVGhyb3dTdGF0ZW1lbnQiKS5iYXNlcygiU3RhdGVtZW50IikuYnVpbGQoImFyZ3VtZW50IikuZmllbGQoImFyZ3VtZW50IixhKCJFeHByZXNzaW9uIikpO2EoIlRyeVN0YXRlbWVudCIpLmJhc2VzKCJTdGF0ZW1lbnQiKS5idWlsZCgiYmxvY2siLCJoYW5kbGVyIiwiZmluYWxpemVyIikuZmllbGQoImJsb2NrIixhKCJCbG9ja1N0YXRlbWVudCIpKS5maWVsZCgiaGFuZGxlciIsbyhhKCJDYXRjaENsYXVzZSIpLG51bGwpLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhbmRsZXJzJiZ0aGlzLmhhbmRsZXJzWzBdfHxudWxsfSkpLmZpZWxkKCJoYW5kbGVycyIsW2EoIkNhdGNoQ2xhdXNlIildLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhbmRsZXI/W3RoaXMuaGFuZGxlcl06W119KSx0cnVlKS5maWVsZCgiZ3VhcmRlZEhhbmRsZXJzIixbYSgiQ2F0Y2hDbGF1c2UiKV0sdS5lbXB0eUFycmF5KS5maWVsZCgiZmluYWxpemVyIixvKGEoIkJsb2NrU3RhdGVtZW50IiksbnVsbCksdVsibnVsbCJdKTthKCJDYXRjaENsYXVzZSIpLmJhc2VzKCJOb2RlIikuYnVpbGQoInBhcmFtIiwiZ3VhcmQiLCJib2R5IikuZmllbGQoInBhcmFtIixhKCJQYXR0ZXJuIikpLmZpZWxkKCJndWFyZCIsbyhhKCJFeHByZXNzaW9uIiksbnVsbCksdVsibnVsbCJdKS5maWVsZCgiYm9keSIsYSgiQmxvY2tTdGF0ZW1lbnQiKSk7YSgiV2hpbGVTdGF0ZW1lbnQiKS5iYXNlcygiU3RhdGVtZW50IikuYnVpbGQoInRlc3QiLCJib2R5IikuZmllbGQoInRlc3QiLGEoIkV4cHJlc3Npb24iKSkuZmllbGQoImJvZHkiLGEoIlN0YXRlbWVudCIpKTthKCJEb1doaWxlU3RhdGVtZW50IikuYmFzZXMoIlN0YXRlbWVudCIpLmJ1aWxkKCJib2R5IiwidGVzdCIpLmZpZWxkKCJib2R5IixhKCJTdGF0ZW1lbnQiKSkuZmllbGQoInRlc3QiLGEoIkV4cHJlc3Npb24iKSk7YSgiRm9yU3RhdGVtZW50IikuYmFzZXMoIlN0YXRlbWVudCIpLmJ1aWxkKCJpbml0IiwidGVzdCIsInVwZGF0ZSIsImJvZHkiKS5maWVsZCgiaW5pdCIsbyhhKCJWYXJpYWJsZURlY2xhcmF0aW9uIiksYSgiRXhwcmVzc2lvbiIpLG51bGwpKS5maWVsZCgidGVzdCIsbyhhKCJFeHByZXNzaW9uIiksbnVsbCkpLmZpZWxkKCJ1cGRhdGUiLG8oYSgiRXhwcmVzc2lvbiIpLG51bGwpKS5maWVsZCgiYm9keSIsYSgiU3RhdGVtZW50IikpO2EoIkZvckluU3RhdGVtZW50IikuYmFzZXMoIlN0YXRlbWVudCIpLmJ1aWxkKCJsZWZ0IiwicmlnaHQiLCJib2R5IikuZmllbGQoImxlZnQiLG8oYSgiVmFyaWFibGVEZWNsYXJhdGlvbiIpLGEoIkV4cHJlc3Npb24iKSkpLmZpZWxkKCJyaWdodCIsYSgiRXhwcmVzc2lvbiIpKS5maWVsZCgiYm9keSIsYSgiU3RhdGVtZW50IikpO2EoIkRlYnVnZ2VyU3RhdGVtZW50IikuYmFzZXMoIlN0YXRlbWVudCIpLmJ1aWxkKCk7YSgiRGVjbGFyYXRpb24iKS5iYXNlcygiU3RhdGVtZW50Iik7YSgiRnVuY3Rpb25EZWNsYXJhdGlvbiIpLmJhc2VzKCJGdW5jdGlvbiIsIkRlY2xhcmF0aW9uIikuYnVpbGQoImlkIiwicGFyYW1zIiwiYm9keSIpLmZpZWxkKCJpZCIsYSgiSWRlbnRpZmllciIpKTthKCJGdW5jdGlvbkV4cHJlc3Npb24iKS5iYXNlcygiRnVuY3Rpb24iLCJFeHByZXNzaW9uIikuYnVpbGQoImlkIiwicGFyYW1zIiwiYm9keSIpO2EoIlZhcmlhYmxlRGVjbGFyYXRpb24iKS5iYXNlcygiRGVjbGFyYXRpb24iKS5idWlsZCgia2luZCIsImRlY2xhcmF0aW9ucyIpLmZpZWxkKCJraW5kIixvKCJ2YXIiLCJsZXQiLCJjb25zdCIpKS5maWVsZCgiZGVjbGFyYXRpb25zIixbYSgiVmFyaWFibGVEZWNsYXJhdG9yIildKTthKCJWYXJpYWJsZURlY2xhcmF0b3IiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJpZCIsImluaXQiKS5maWVsZCgiaWQiLGEoIlBhdHRlcm4iKSkuZmllbGQoImluaXQiLG8oYSgiRXhwcmVzc2lvbiIpLG51bGwpLHVbIm51bGwiXSk7YSgiRXhwcmVzc2lvbiIpLmJhc2VzKCJOb2RlIik7YSgiVGhpc0V4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCk7YSgiQXJyYXlFeHByZXNzaW9uIikuYmFzZXMoIkV4cHJlc3Npb24iKS5idWlsZCgiZWxlbWVudHMiKS5maWVsZCgiZWxlbWVudHMiLFtvKGEoIkV4cHJlc3Npb24iKSxudWxsKV0pO2EoIk9iamVjdEV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJwcm9wZXJ0aWVzIikuZmllbGQoInByb3BlcnRpZXMiLFthKCJQcm9wZXJ0eSIpXSk7YSgiUHJvcGVydHkiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJraW5kIiwia2V5IiwidmFsdWUiKS5maWVsZCgia2luZCIsbygiaW5pdCIsImdldCIsInNldCIpKS5maWVsZCgia2V5IixvKGEoIkxpdGVyYWwiKSxhKCJJZGVudGlmaWVyIikpKS5maWVsZCgidmFsdWUiLGEoIkV4cHJlc3Npb24iKSk7YSgiU2VxdWVuY2VFeHByZXNzaW9uIikuYmFzZXMoIkV4cHJlc3Npb24iKS5idWlsZCgiZXhwcmVzc2lvbnMiKS5maWVsZCgiZXhwcmVzc2lvbnMiLFthKCJFeHByZXNzaW9uIildKTt2YXIgaD1vKCItIiwiKyIsIiEiLCJ+IiwidHlwZW9mIiwidm9pZCIsImRlbGV0ZSIpO2EoIlVuYXJ5RXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoIm9wZXJhdG9yIiwiYXJndW1lbnQiLCJwcmVmaXgiKS5maWVsZCgib3BlcmF0b3IiLGgpLmZpZWxkKCJhcmd1bWVudCIsYSgiRXhwcmVzc2lvbiIpKS5maWVsZCgicHJlZml4IixCb29sZWFuLHVbInRydWUiXSk7dmFyIHA9by5hcHBseSh2b2lkIDAscy5CaW5hcnlPcGVyYXRvcnMpO2EoIkJpbmFyeUV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJvcGVyYXRvciIsImxlZnQiLCJyaWdodCIpLmZpZWxkKCJvcGVyYXRvciIscCkuZmllbGQoImxlZnQiLGEoIkV4cHJlc3Npb24iKSkuZmllbGQoInJpZ2h0IixhKCJFeHByZXNzaW9uIikpO3ZhciBmPW8uYXBwbHkodm9pZCAwLHMuQXNzaWdubWVudE9wZXJhdG9ycyk7YSgiQXNzaWdubWVudEV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJvcGVyYXRvciIsImxlZnQiLCJyaWdodCIpLmZpZWxkKCJvcGVyYXRvciIsZikuZmllbGQoImxlZnQiLG8oYSgiUGF0dGVybiIpLGEoIk1lbWJlckV4cHJlc3Npb24iKSkpLmZpZWxkKCJyaWdodCIsYSgiRXhwcmVzc2lvbiIpKTt2YXIgZD1vKCIrKyIsIi0tIik7YSgiVXBkYXRlRXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoIm9wZXJhdG9yIiwiYXJndW1lbnQiLCJwcmVmaXgiKS5maWVsZCgib3BlcmF0b3IiLGQpLmZpZWxkKCJhcmd1bWVudCIsYSgiRXhwcmVzc2lvbiIpKS5maWVsZCgicHJlZml4IixCb29sZWFuKTt2YXIgbT1vLmFwcGx5KHZvaWQgMCxzLkxvZ2ljYWxPcGVyYXRvcnMpO2EoIkxvZ2ljYWxFeHByZXNzaW9uIikuYmFzZXMoIkV4cHJlc3Npb24iKS5idWlsZCgib3BlcmF0b3IiLCJsZWZ0IiwicmlnaHQiKS5maWVsZCgib3BlcmF0b3IiLG0pLmZpZWxkKCJsZWZ0IixhKCJFeHByZXNzaW9uIikpLmZpZWxkKCJyaWdodCIsYSgiRXhwcmVzc2lvbiIpKTthKCJDb25kaXRpb25hbEV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJ0ZXN0IiwiY29uc2VxdWVudCIsImFsdGVybmF0ZSIpLmZpZWxkKCJ0ZXN0IixhKCJFeHByZXNzaW9uIikpLmZpZWxkKCJjb25zZXF1ZW50IixhKCJFeHByZXNzaW9uIikpLmZpZWxkKCJhbHRlcm5hdGUiLGEoIkV4cHJlc3Npb24iKSk7YSgiTmV3RXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoImNhbGxlZSIsImFyZ3VtZW50cyIpLmZpZWxkKCJjYWxsZWUiLGEoIkV4cHJlc3Npb24iKSkuZmllbGQoImFyZ3VtZW50cyIsW2EoIkV4cHJlc3Npb24iKV0pO2EoIkNhbGxFeHByZXNzaW9uIikuYmFzZXMoIkV4cHJlc3Npb24iKS5idWlsZCgiY2FsbGVlIiwiYXJndW1lbnRzIikuZmllbGQoImNhbGxlZSIsYSgiRXhwcmVzc2lvbiIpKS5maWVsZCgiYXJndW1lbnRzIixbYSgiRXhwcmVzc2lvbiIpXSk7YSgiTWVtYmVyRXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoIm9iamVjdCIsInByb3BlcnR5IiwiY29tcHV0ZWQiKS5maWVsZCgib2JqZWN0IixhKCJFeHByZXNzaW9uIikpLmZpZWxkKCJwcm9wZXJ0eSIsbyhhKCJJZGVudGlmaWVyIiksYSgiRXhwcmVzc2lvbiIpKSkuZmllbGQoImNvbXB1dGVkIixCb29sZWFuLChmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcGVydHkudHlwZTtpZihlPT09IkxpdGVyYWwifHxlPT09Ik1lbWJlckV4cHJlc3Npb24ifHxlPT09IkJpbmFyeUV4cHJlc3Npb24iKXtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9KSk7YSgiUGF0dGVybiIpLmJhc2VzKCJOb2RlIik7YSgiU3dpdGNoQ2FzZSIpLmJhc2VzKCJOb2RlIikuYnVpbGQoInRlc3QiLCJjb25zZXF1ZW50IikuZmllbGQoInRlc3QiLG8oYSgiRXhwcmVzc2lvbiIpLG51bGwpKS5maWVsZCgiY29uc2VxdWVudCIsW2EoIlN0YXRlbWVudCIpXSk7YSgiSWRlbnRpZmllciIpLmJhc2VzKCJFeHByZXNzaW9uIiwiUGF0dGVybiIpLmJ1aWxkKCJuYW1lIikuZmllbGQoIm5hbWUiLFN0cmluZykuZmllbGQoIm9wdGlvbmFsIixCb29sZWFuLHVbImZhbHNlIl0pO2EoIkxpdGVyYWwiKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJ2YWx1ZSIpLmZpZWxkKCJ2YWx1ZSIsbyhTdHJpbmcsQm9vbGVhbixudWxsLE51bWJlcixSZWdFeHApKS5maWVsZCgicmVnZXgiLG8oe3BhdHRlcm46U3RyaW5nLGZsYWdzOlN0cmluZ30sbnVsbCksKGZ1bmN0aW9uKCl7aWYodGhpcy52YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCl7dmFyIGU9IiI7aWYodGhpcy52YWx1ZS5pZ25vcmVDYXNlKWUrPSJpIjtpZih0aGlzLnZhbHVlLm11bHRpbGluZSllKz0ibSI7aWYodGhpcy52YWx1ZS5nbG9iYWwpZSs9ImciO3JldHVybntwYXR0ZXJuOnRoaXMudmFsdWUuc291cmNlLGZsYWdzOmV9fXJldHVybiBudWxsfSkpO2EoIkNvbW1lbnQiKS5iYXNlcygiUHJpbnRhYmxlIikuZmllbGQoInZhbHVlIixTdHJpbmcpLmZpZWxkKCJsZWFkaW5nIixCb29sZWFuLHVbInRydWUiXSkuZmllbGQoInRyYWlsaW5nIixCb29sZWFuLHVbImZhbHNlIl0pfXQuZGVmYXVsdD1hO2UuZXhwb3J0cz10WyJkZWZhdWx0Il19KShvZSxvZS5leHBvcnRzKTt2YXIgY2U9e2V4cG9ydHM6e319OyhmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6dHJ1ZX0pO3ZhciByPVI7dmFyIHM9ci5fX2ltcG9ydERlZmF1bHQob2UuZXhwb3J0cyk7dmFyIGk9ci5fX2ltcG9ydERlZmF1bHQoeik7dmFyIG49ci5fX2ltcG9ydERlZmF1bHQodWUuZXhwb3J0cyk7ZnVuY3Rpb24gYShlKXtlLnVzZShzLmRlZmF1bHQpO3ZhciB0PWUudXNlKGkuZGVmYXVsdCk7dmFyIHI9dC5UeXBlLmRlZjt2YXIgYT10LlR5cGUub3I7dmFyIG89ZS51c2Uobi5kZWZhdWx0KS5kZWZhdWx0cztyKCJGdW5jdGlvbiIpLmZpZWxkKCJnZW5lcmF0b3IiLEJvb2xlYW4sb1siZmFsc2UiXSkuZmllbGQoImV4cHJlc3Npb24iLEJvb2xlYW4sb1siZmFsc2UiXSkuZmllbGQoImRlZmF1bHRzIixbYShyKCJFeHByZXNzaW9uIiksbnVsbCldLG8uZW1wdHlBcnJheSkuZmllbGQoInJlc3QiLGEocigiSWRlbnRpZmllciIpLG51bGwpLG9bIm51bGwiXSk7cigiUmVzdEVsZW1lbnQiKS5iYXNlcygiUGF0dGVybiIpLmJ1aWxkKCJhcmd1bWVudCIpLmZpZWxkKCJhcmd1bWVudCIscigiUGF0dGVybiIpKS5maWVsZCgidHlwZUFubm90YXRpb24iLGEocigiVHlwZUFubm90YXRpb24iKSxyKCJUU1R5cGVBbm5vdGF0aW9uIiksbnVsbCksb1sibnVsbCJdKTtyKCJTcHJlYWRFbGVtZW50UGF0dGVybiIpLmJhc2VzKCJQYXR0ZXJuIikuYnVpbGQoImFyZ3VtZW50IikuZmllbGQoImFyZ3VtZW50IixyKCJQYXR0ZXJuIikpO3IoIkZ1bmN0aW9uRGVjbGFyYXRpb24iKS5idWlsZCgiaWQiLCJwYXJhbXMiLCJib2R5IiwiZ2VuZXJhdG9yIiwiZXhwcmVzc2lvbiIpLmZpZWxkKCJpZCIsYShyKCJJZGVudGlmaWVyIiksbnVsbCkpO3IoIkZ1bmN0aW9uRXhwcmVzc2lvbiIpLmJ1aWxkKCJpZCIsInBhcmFtcyIsImJvZHkiLCJnZW5lcmF0b3IiLCJleHByZXNzaW9uIik7cigiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iKS5iYXNlcygiRnVuY3Rpb24iLCJFeHByZXNzaW9uIikuYnVpbGQoInBhcmFtcyIsImJvZHkiLCJleHByZXNzaW9uIikuZmllbGQoImlkIixudWxsLG9bIm51bGwiXSkuZmllbGQoImJvZHkiLGEocigiQmxvY2tTdGF0ZW1lbnQiKSxyKCJFeHByZXNzaW9uIikpKS5maWVsZCgiZ2VuZXJhdG9yIixmYWxzZSxvWyJmYWxzZSJdKTtyKCJGb3JPZlN0YXRlbWVudCIpLmJhc2VzKCJTdGF0ZW1lbnQiKS5idWlsZCgibGVmdCIsInJpZ2h0IiwiYm9keSIpLmZpZWxkKCJsZWZ0IixhKHIoIlZhcmlhYmxlRGVjbGFyYXRpb24iKSxyKCJQYXR0ZXJuIikpKS5maWVsZCgicmlnaHQiLHIoIkV4cHJlc3Npb24iKSkuZmllbGQoImJvZHkiLHIoIlN0YXRlbWVudCIpKTtyKCJZaWVsZEV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJhcmd1bWVudCIsImRlbGVnYXRlIikuZmllbGQoImFyZ3VtZW50IixhKHIoIkV4cHJlc3Npb24iKSxudWxsKSkuZmllbGQoImRlbGVnYXRlIixCb29sZWFuLG9bImZhbHNlIl0pO3IoIkdlbmVyYXRvckV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJib2R5IiwiYmxvY2tzIiwiZmlsdGVyIikuZmllbGQoImJvZHkiLHIoIkV4cHJlc3Npb24iKSkuZmllbGQoImJsb2NrcyIsW3IoIkNvbXByZWhlbnNpb25CbG9jayIpXSkuZmllbGQoImZpbHRlciIsYShyKCJFeHByZXNzaW9uIiksbnVsbCkpO3IoIkNvbXByZWhlbnNpb25FeHByZXNzaW9uIikuYmFzZXMoIkV4cHJlc3Npb24iKS5idWlsZCgiYm9keSIsImJsb2NrcyIsImZpbHRlciIpLmZpZWxkKCJib2R5IixyKCJFeHByZXNzaW9uIikpLmZpZWxkKCJibG9ja3MiLFtyKCJDb21wcmVoZW5zaW9uQmxvY2siKV0pLmZpZWxkKCJmaWx0ZXIiLGEocigiRXhwcmVzc2lvbiIpLG51bGwpKTtyKCJDb21wcmVoZW5zaW9uQmxvY2siKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJsZWZ0IiwicmlnaHQiLCJlYWNoIikuZmllbGQoImxlZnQiLHIoIlBhdHRlcm4iKSkuZmllbGQoInJpZ2h0IixyKCJFeHByZXNzaW9uIikpLmZpZWxkKCJlYWNoIixCb29sZWFuKTtyKCJQcm9wZXJ0eSIpLmZpZWxkKCJrZXkiLGEocigiTGl0ZXJhbCIpLHIoIklkZW50aWZpZXIiKSxyKCJFeHByZXNzaW9uIikpKS5maWVsZCgidmFsdWUiLGEocigiRXhwcmVzc2lvbiIpLHIoIlBhdHRlcm4iKSkpLmZpZWxkKCJtZXRob2QiLEJvb2xlYW4sb1siZmFsc2UiXSkuZmllbGQoInNob3J0aGFuZCIsQm9vbGVhbixvWyJmYWxzZSJdKS5maWVsZCgiY29tcHV0ZWQiLEJvb2xlYW4sb1siZmFsc2UiXSk7cigiT2JqZWN0UHJvcGVydHkiKS5maWVsZCgic2hvcnRoYW5kIixCb29sZWFuLG9bImZhbHNlIl0pO3IoIlByb3BlcnR5UGF0dGVybiIpLmJhc2VzKCJQYXR0ZXJuIikuYnVpbGQoImtleSIsInBhdHRlcm4iKS5maWVsZCgia2V5IixhKHIoIkxpdGVyYWwiKSxyKCJJZGVudGlmaWVyIikscigiRXhwcmVzc2lvbiIpKSkuZmllbGQoInBhdHRlcm4iLHIoIlBhdHRlcm4iKSkuZmllbGQoImNvbXB1dGVkIixCb29sZWFuLG9bImZhbHNlIl0pO3IoIk9iamVjdFBhdHRlcm4iKS5iYXNlcygiUGF0dGVybiIpLmJ1aWxkKCJwcm9wZXJ0aWVzIikuZmllbGQoInByb3BlcnRpZXMiLFthKHIoIlByb3BlcnR5UGF0dGVybiIpLHIoIlByb3BlcnR5IikpXSk7cigiQXJyYXlQYXR0ZXJuIikuYmFzZXMoIlBhdHRlcm4iKS5idWlsZCgiZWxlbWVudHMiKS5maWVsZCgiZWxlbWVudHMiLFthKHIoIlBhdHRlcm4iKSxudWxsKV0pO3IoIlNwcmVhZEVsZW1lbnQiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJhcmd1bWVudCIpLmZpZWxkKCJhcmd1bWVudCIscigiRXhwcmVzc2lvbiIpKTtyKCJBcnJheUV4cHJlc3Npb24iKS5maWVsZCgiZWxlbWVudHMiLFthKHIoIkV4cHJlc3Npb24iKSxyKCJTcHJlYWRFbGVtZW50IikscigiUmVzdEVsZW1lbnQiKSxudWxsKV0pO3IoIk5ld0V4cHJlc3Npb24iKS5maWVsZCgiYXJndW1lbnRzIixbYShyKCJFeHByZXNzaW9uIikscigiU3ByZWFkRWxlbWVudCIpKV0pO3IoIkNhbGxFeHByZXNzaW9uIikuZmllbGQoImFyZ3VtZW50cyIsW2EocigiRXhwcmVzc2lvbiIpLHIoIlNwcmVhZEVsZW1lbnQiKSldKTtyKCJBc3NpZ25tZW50UGF0dGVybiIpLmJhc2VzKCJQYXR0ZXJuIikuYnVpbGQoImxlZnQiLCJyaWdodCIpLmZpZWxkKCJsZWZ0IixyKCJQYXR0ZXJuIikpLmZpZWxkKCJyaWdodCIscigiRXhwcmVzc2lvbiIpKTtyKCJNZXRob2REZWZpbml0aW9uIikuYmFzZXMoIkRlY2xhcmF0aW9uIikuYnVpbGQoImtpbmQiLCJrZXkiLCJ2YWx1ZSIsInN0YXRpYyIpLmZpZWxkKCJraW5kIixhKCJjb25zdHJ1Y3RvciIsIm1ldGhvZCIsImdldCIsInNldCIpKS5maWVsZCgia2V5IixyKCJFeHByZXNzaW9uIikpLmZpZWxkKCJ2YWx1ZSIscigiRnVuY3Rpb24iKSkuZmllbGQoImNvbXB1dGVkIixCb29sZWFuLG9bImZhbHNlIl0pLmZpZWxkKCJzdGF0aWMiLEJvb2xlYW4sb1siZmFsc2UiXSk7dmFyIGw9YShyKCJNZXRob2REZWZpbml0aW9uIikscigiVmFyaWFibGVEZWNsYXJhdG9yIikscigiQ2xhc3NQcm9wZXJ0eURlZmluaXRpb24iKSxyKCJDbGFzc1Byb3BlcnR5IikpO3IoIkNsYXNzUHJvcGVydHkiKS5iYXNlcygiRGVjbGFyYXRpb24iKS5idWlsZCgia2V5IikuZmllbGQoImtleSIsYShyKCJMaXRlcmFsIikscigiSWRlbnRpZmllciIpLHIoIkV4cHJlc3Npb24iKSkpLmZpZWxkKCJjb21wdXRlZCIsQm9vbGVhbixvWyJmYWxzZSJdKTtyKCJDbGFzc1Byb3BlcnR5RGVmaW5pdGlvbiIpLmJhc2VzKCJEZWNsYXJhdGlvbiIpLmJ1aWxkKCJkZWZpbml0aW9uIikuZmllbGQoImRlZmluaXRpb24iLGwpO3IoIkNsYXNzQm9keSIpLmJhc2VzKCJEZWNsYXJhdGlvbiIpLmJ1aWxkKCJib2R5IikuZmllbGQoImJvZHkiLFtsXSk7cigiQ2xhc3NEZWNsYXJhdGlvbiIpLmJhc2VzKCJEZWNsYXJhdGlvbiIpLmJ1aWxkKCJpZCIsImJvZHkiLCJzdXBlckNsYXNzIikuZmllbGQoImlkIixhKHIoIklkZW50aWZpZXIiKSxudWxsKSkuZmllbGQoImJvZHkiLHIoIkNsYXNzQm9keSIpKS5maWVsZCgic3VwZXJDbGFzcyIsYShyKCJFeHByZXNzaW9uIiksbnVsbCksb1sibnVsbCJdKTtyKCJDbGFzc0V4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJpZCIsImJvZHkiLCJzdXBlckNsYXNzIikuZmllbGQoImlkIixhKHIoIklkZW50aWZpZXIiKSxudWxsKSxvWyJudWxsIl0pLmZpZWxkKCJib2R5IixyKCJDbGFzc0JvZHkiKSkuZmllbGQoInN1cGVyQ2xhc3MiLGEocigiRXhwcmVzc2lvbiIpLG51bGwpLG9bIm51bGwiXSk7cigiU3VwZXIiKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCk7cigiU3BlY2lmaWVyIikuYmFzZXMoIk5vZGUiKTtyKCJNb2R1bGVTcGVjaWZpZXIiKS5iYXNlcygiU3BlY2lmaWVyIikuZmllbGQoImxvY2FsIixhKHIoIklkZW50aWZpZXIiKSxudWxsKSxvWyJudWxsIl0pLmZpZWxkKCJpZCIsYShyKCJJZGVudGlmaWVyIiksbnVsbCksb1sibnVsbCJdKS5maWVsZCgibmFtZSIsYShyKCJJZGVudGlmaWVyIiksbnVsbCksb1sibnVsbCJdKTtyKCJJbXBvcnRTcGVjaWZpZXIiKS5iYXNlcygiTW9kdWxlU3BlY2lmaWVyIikuYnVpbGQoImltcG9ydGVkIiwibG9jYWwiKS5maWVsZCgiaW1wb3J0ZWQiLHIoIklkZW50aWZpZXIiKSk7cigiSW1wb3J0RGVmYXVsdFNwZWNpZmllciIpLmJhc2VzKCJNb2R1bGVTcGVjaWZpZXIiKS5idWlsZCgibG9jYWwiKTtyKCJJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIiKS5iYXNlcygiTW9kdWxlU3BlY2lmaWVyIikuYnVpbGQoImxvY2FsIik7cigiSW1wb3J0RGVjbGFyYXRpb24iKS5iYXNlcygiRGVjbGFyYXRpb24iKS5idWlsZCgic3BlY2lmaWVycyIsInNvdXJjZSIsImltcG9ydEtpbmQiKS5maWVsZCgic3BlY2lmaWVycyIsW2EocigiSW1wb3J0U3BlY2lmaWVyIikscigiSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyIikscigiSW1wb3J0RGVmYXVsdFNwZWNpZmllciIpKV0sby5lbXB0eUFycmF5KS5maWVsZCgic291cmNlIixyKCJMaXRlcmFsIikpLmZpZWxkKCJpbXBvcnRLaW5kIixhKCJ2YWx1ZSIsInR5cGUiKSwoZnVuY3Rpb24oKXtyZXR1cm4idmFsdWUifSkpO3IoIkV4cG9ydE5hbWVkRGVjbGFyYXRpb24iKS5iYXNlcygiRGVjbGFyYXRpb24iKS5idWlsZCgiZGVjbGFyYXRpb24iLCJzcGVjaWZpZXJzIiwic291cmNlIikuZmllbGQoImRlY2xhcmF0aW9uIixhKHIoIkRlY2xhcmF0aW9uIiksbnVsbCkpLmZpZWxkKCJzcGVjaWZpZXJzIixbcigiRXhwb3J0U3BlY2lmaWVyIildLG8uZW1wdHlBcnJheSkuZmllbGQoInNvdXJjZSIsYShyKCJMaXRlcmFsIiksbnVsbCksb1sibnVsbCJdKTtyKCJFeHBvcnRTcGVjaWZpZXIiKS5iYXNlcygiTW9kdWxlU3BlY2lmaWVyIikuYnVpbGQoImxvY2FsIiwiZXhwb3J0ZWQiKS5maWVsZCgiZXhwb3J0ZWQiLHIoIklkZW50aWZpZXIiKSk7cigiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uIikuYmFzZXMoIkRlY2xhcmF0aW9uIikuYnVpbGQoImRlY2xhcmF0aW9uIikuZmllbGQoImRlY2xhcmF0aW9uIixhKHIoIkRlY2xhcmF0aW9uIikscigiRXhwcmVzc2lvbiIpKSk7cigiRXhwb3J0QWxsRGVjbGFyYXRpb24iKS5iYXNlcygiRGVjbGFyYXRpb24iKS5idWlsZCgic291cmNlIikuZmllbGQoInNvdXJjZSIscigiTGl0ZXJhbCIpKTtyKCJUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJ0YWciLCJxdWFzaSIpLmZpZWxkKCJ0YWciLHIoIkV4cHJlc3Npb24iKSkuZmllbGQoInF1YXNpIixyKCJUZW1wbGF0ZUxpdGVyYWwiKSk7cigiVGVtcGxhdGVMaXRlcmFsIikuYmFzZXMoIkV4cHJlc3Npb24iKS5idWlsZCgicXVhc2lzIiwiZXhwcmVzc2lvbnMiKS5maWVsZCgicXVhc2lzIixbcigiVGVtcGxhdGVFbGVtZW50IildKS5maWVsZCgiZXhwcmVzc2lvbnMiLFtyKCJFeHByZXNzaW9uIildKTtyKCJUZW1wbGF0ZUVsZW1lbnQiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJ2YWx1ZSIsInRhaWwiKS5maWVsZCgidmFsdWUiLHtjb29rZWQ6U3RyaW5nLHJhdzpTdHJpbmd9KS5maWVsZCgidGFpbCIsQm9vbGVhbik7cigiTWV0YVByb3BlcnR5IikuYmFzZXMoIkV4cHJlc3Npb24iKS5idWlsZCgibWV0YSIsInByb3BlcnR5IikuZmllbGQoIm1ldGEiLHIoIklkZW50aWZpZXIiKSkuZmllbGQoInByb3BlcnR5IixyKCJJZGVudGlmaWVyIikpfXQuZGVmYXVsdD1hO2UuZXhwb3J0cz10WyJkZWZhdWx0Il19KShjZSxjZS5leHBvcnRzKTt2YXIgaGU9e2V4cG9ydHM6e319OyhmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6dHJ1ZX0pO3ZhciByPVI7dmFyIHM9bGU7dmFyIGk9ci5fX2ltcG9ydERlZmF1bHQoY2UuZXhwb3J0cyk7dmFyIG49ci5fX2ltcG9ydERlZmF1bHQoeik7ZnVuY3Rpb24gYShlKXtlLnVzZShpLmRlZmF1bHQpO3ZhciB0PWUudXNlKG4uZGVmYXVsdCk7dmFyIGE9dC5UeXBlLmRlZjt2YXIgbz10LlR5cGUub3I7dmFyIGw9by5hcHBseSh2b2lkIDAsci5fX3NwcmVhZEFycmF5cyhzLkJpbmFyeU9wZXJhdG9ycyxbIioqIl0pKTthKCJCaW5hcnlFeHByZXNzaW9uIikuZmllbGQoIm9wZXJhdG9yIixsKTt2YXIgdT1vLmFwcGx5KHZvaWQgMCxyLl9fc3ByZWFkQXJyYXlzKHMuQXNzaWdubWVudE9wZXJhdG9ycyxbIioqPSJdKSk7YSgiQXNzaWdubWVudEV4cHJlc3Npb24iKS5maWVsZCgib3BlcmF0b3IiLHUpfXQuZGVmYXVsdD1hO2UuZXhwb3J0cz10WyJkZWZhdWx0Il19KShoZSxoZS5leHBvcnRzKTt2YXIgcGU9e2V4cG9ydHM6e319OyhmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6dHJ1ZX0pO3ZhciByPVI7dmFyIHM9ci5fX2ltcG9ydERlZmF1bHQoaGUuZXhwb3J0cyk7dmFyIGk9ci5fX2ltcG9ydERlZmF1bHQoeik7dmFyIG49ci5fX2ltcG9ydERlZmF1bHQodWUuZXhwb3J0cyk7ZnVuY3Rpb24gYShlKXtlLnVzZShzLmRlZmF1bHQpO3ZhciB0PWUudXNlKGkuZGVmYXVsdCk7dmFyIHI9dC5UeXBlLmRlZjt2YXIgYT1lLnVzZShuLmRlZmF1bHQpLmRlZmF1bHRzO3IoIkZ1bmN0aW9uIikuZmllbGQoImFzeW5jIixCb29sZWFuLGFbImZhbHNlIl0pO3IoIkF3YWl0RXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoImFyZ3VtZW50IikuZmllbGQoImFyZ3VtZW50IixyKCJFeHByZXNzaW9uIikpfXQuZGVmYXVsdD1hO2UuZXhwb3J0cz10WyJkZWZhdWx0Il19KShwZSxwZS5leHBvcnRzKTt2YXIgZmU9e2V4cG9ydHM6e319OyhmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6dHJ1ZX0pO3ZhciByPVI7dmFyIHM9ci5fX2ltcG9ydERlZmF1bHQocGUuZXhwb3J0cyk7dmFyIGk9ci5fX2ltcG9ydERlZmF1bHQoeik7dmFyIG49ci5fX2ltcG9ydERlZmF1bHQodWUuZXhwb3J0cyk7ZnVuY3Rpb24gYShlKXtlLnVzZShzLmRlZmF1bHQpO3ZhciB0PWUudXNlKGkuZGVmYXVsdCk7dmFyIHI9dC5UeXBlLmRlZjt2YXIgYT10LlR5cGUub3I7dmFyIG89ZS51c2Uobi5kZWZhdWx0KS5kZWZhdWx0cztyKCJGb3JPZlN0YXRlbWVudCIpLmZpZWxkKCJhd2FpdCIsQm9vbGVhbixvWyJmYWxzZSJdKTtyKCJTcHJlYWRQcm9wZXJ0eSIpLmJhc2VzKCJOb2RlIikuYnVpbGQoImFyZ3VtZW50IikuZmllbGQoImFyZ3VtZW50IixyKCJFeHByZXNzaW9uIikpO3IoIk9iamVjdEV4cHJlc3Npb24iKS5maWVsZCgicHJvcGVydGllcyIsW2EocigiUHJvcGVydHkiKSxyKCJTcHJlYWRQcm9wZXJ0eSIpLHIoIlNwcmVhZEVsZW1lbnQiKSldKTtyKCJUZW1wbGF0ZUVsZW1lbnQiKS5maWVsZCgidmFsdWUiLHtjb29rZWQ6YShTdHJpbmcsbnVsbCkscmF3OlN0cmluZ30pO3IoIlNwcmVhZFByb3BlcnR5UGF0dGVybiIpLmJhc2VzKCJQYXR0ZXJuIikuYnVpbGQoImFyZ3VtZW50IikuZmllbGQoImFyZ3VtZW50IixyKCJQYXR0ZXJuIikpO3IoIk9iamVjdFBhdHRlcm4iKS5maWVsZCgicHJvcGVydGllcyIsW2EocigiUHJvcGVydHlQYXR0ZXJuIikscigiUHJvcGVydHkiKSxyKCJSZXN0RWxlbWVudCIpLHIoIlNwcmVhZFByb3BlcnR5UGF0dGVybiIpKV0pfXQuZGVmYXVsdD1hO2UuZXhwb3J0cz10WyJkZWZhdWx0Il19KShmZSxmZS5leHBvcnRzKTt2YXIgZGU9e2V4cG9ydHM6e319OyhmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6dHJ1ZX0pO3ZhciByPVI7dmFyIHM9ci5fX2ltcG9ydERlZmF1bHQoZmUuZXhwb3J0cyk7dmFyIGk9ci5fX2ltcG9ydERlZmF1bHQoeik7dmFyIG49ci5fX2ltcG9ydERlZmF1bHQodWUuZXhwb3J0cyk7ZnVuY3Rpb24gYShlKXtlLnVzZShzLmRlZmF1bHQpO3ZhciB0PWUudXNlKGkuZGVmYXVsdCk7dmFyIHI9dC5UeXBlLmRlZjt2YXIgYT10LlR5cGUub3I7dmFyIG89ZS51c2Uobi5kZWZhdWx0KS5kZWZhdWx0cztyKCJDYXRjaENsYXVzZSIpLmZpZWxkKCJwYXJhbSIsYShyKCJQYXR0ZXJuIiksbnVsbCksb1sibnVsbCJdKX10LmRlZmF1bHQ9YTtlLmV4cG9ydHM9dFsiZGVmYXVsdCJdfSkoZGUsZGUuZXhwb3J0cyk7dmFyIG1lPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTt2YXIgcj1SO3ZhciBzPWxlO3ZhciBpPXIuX19pbXBvcnREZWZhdWx0KGRlLmV4cG9ydHMpO3ZhciBuPXIuX19pbXBvcnREZWZhdWx0KHopO3ZhciBhPXIuX19pbXBvcnREZWZhdWx0KHVlLmV4cG9ydHMpO2Z1bmN0aW9uIG8oZSl7ZS51c2UoaS5kZWZhdWx0KTt2YXIgdD1lLnVzZShuLmRlZmF1bHQpO3ZhciBvPXQuVHlwZS5kZWY7dmFyIGw9dC5UeXBlLm9yO3ZhciB1PWUudXNlKGEuZGVmYXVsdCk7dmFyIGM9dS5kZWZhdWx0cztvKCJJbXBvcnRFeHByZXNzaW9uIikuYmFzZXMoIkV4cHJlc3Npb24iKS5idWlsZCgic291cmNlIikuZmllbGQoInNvdXJjZSIsbygiRXhwcmVzc2lvbiIpKTtvKCJFeHBvcnRBbGxEZWNsYXJhdGlvbiIpLmJ1aWxkKCJzb3VyY2UiLCJleHBvcnRlZCIpLmZpZWxkKCJzb3VyY2UiLG8oIkxpdGVyYWwiKSkuZmllbGQoImV4cG9ydGVkIixsKG8oIklkZW50aWZpZXIiKSxudWxsKSk7bygiQ2hhaW5FbGVtZW50IikuYmFzZXMoIk5vZGUiKS5maWVsZCgib3B0aW9uYWwiLEJvb2xlYW4sY1siZmFsc2UiXSk7bygiQ2FsbEV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIsIkNoYWluRWxlbWVudCIpO28oIk1lbWJlckV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIsIkNoYWluRWxlbWVudCIpO28oIkNoYWluRXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoImV4cHJlc3Npb24iKS5maWVsZCgiZXhwcmVzc2lvbiIsbygiQ2hhaW5FbGVtZW50IikpO28oIk9wdGlvbmFsQ2FsbEV4cHJlc3Npb24iKS5iYXNlcygiQ2FsbEV4cHJlc3Npb24iKS5idWlsZCgiY2FsbGVlIiwiYXJndW1lbnRzIiwib3B0aW9uYWwiKS5maWVsZCgib3B0aW9uYWwiLEJvb2xlYW4sY1sidHJ1ZSJdKTtvKCJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24iKS5iYXNlcygiTWVtYmVyRXhwcmVzc2lvbiIpLmJ1aWxkKCJvYmplY3QiLCJwcm9wZXJ0eSIsImNvbXB1dGVkIiwib3B0aW9uYWwiKS5maWVsZCgib3B0aW9uYWwiLEJvb2xlYW4sY1sidHJ1ZSJdKTt2YXIgaD1sLmFwcGx5KHZvaWQgMCxyLl9fc3ByZWFkQXJyYXlzKHMuTG9naWNhbE9wZXJhdG9ycyxbIj8/Il0pKTtvKCJMb2dpY2FsRXhwcmVzc2lvbiIpLmZpZWxkKCJvcGVyYXRvciIsaCl9dC5kZWZhdWx0PW87ZS5leHBvcnRzPXRbImRlZmF1bHQiXX0pKG1lLG1lLmV4cG9ydHMpO3ZhciB5ZT17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTp0cnVlfSk7dmFyIHI9Ujt2YXIgcz1yLl9faW1wb3J0RGVmYXVsdChtZS5leHBvcnRzKTt2YXIgaT1yLl9faW1wb3J0RGVmYXVsdCh6KTt2YXIgbj1yLl9faW1wb3J0RGVmYXVsdCh1ZS5leHBvcnRzKTtmdW5jdGlvbiBhKGUpe2UudXNlKHMuZGVmYXVsdCk7dmFyIHQ9ZS51c2UoaS5kZWZhdWx0KTt2YXIgcj10LlR5cGUuZGVmO3ZhciBhPXQuVHlwZS5vcjt2YXIgbz1lLnVzZShuLmRlZmF1bHQpLmRlZmF1bHRzO3IoIkpTWEF0dHJpYnV0ZSIpLmJhc2VzKCJOb2RlIikuYnVpbGQoIm5hbWUiLCJ2YWx1ZSIpLmZpZWxkKCJuYW1lIixhKHIoIkpTWElkZW50aWZpZXIiKSxyKCJKU1hOYW1lc3BhY2VkTmFtZSIpKSkuZmllbGQoInZhbHVlIixhKHIoIkxpdGVyYWwiKSxyKCJKU1hFeHByZXNzaW9uQ29udGFpbmVyIikscigiSlNYRWxlbWVudCIpLHIoIkpTWEZyYWdtZW50IiksbnVsbCksb1sibnVsbCJdKTtyKCJKU1hJZGVudGlmaWVyIikuYmFzZXMoIklkZW50aWZpZXIiKS5idWlsZCgibmFtZSIpLmZpZWxkKCJuYW1lIixTdHJpbmcpO3IoIkpTWE5hbWVzcGFjZWROYW1lIikuYmFzZXMoIk5vZGUiKS5idWlsZCgibmFtZXNwYWNlIiwibmFtZSIpLmZpZWxkKCJuYW1lc3BhY2UiLHIoIkpTWElkZW50aWZpZXIiKSkuZmllbGQoIm5hbWUiLHIoIkpTWElkZW50aWZpZXIiKSk7cigiSlNYTWVtYmVyRXhwcmVzc2lvbiIpLmJhc2VzKCJNZW1iZXJFeHByZXNzaW9uIikuYnVpbGQoIm9iamVjdCIsInByb3BlcnR5IikuZmllbGQoIm9iamVjdCIsYShyKCJKU1hJZGVudGlmaWVyIikscigiSlNYTWVtYmVyRXhwcmVzc2lvbiIpKSkuZmllbGQoInByb3BlcnR5IixyKCJKU1hJZGVudGlmaWVyIikpLmZpZWxkKCJjb21wdXRlZCIsQm9vbGVhbixvLmZhbHNlKTt2YXIgbD1hKHIoIkpTWElkZW50aWZpZXIiKSxyKCJKU1hOYW1lc3BhY2VkTmFtZSIpLHIoIkpTWE1lbWJlckV4cHJlc3Npb24iKSk7cigiSlNYU3ByZWFkQXR0cmlidXRlIikuYmFzZXMoIk5vZGUiKS5idWlsZCgiYXJndW1lbnQiKS5maWVsZCgiYXJndW1lbnQiLHIoIkV4cHJlc3Npb24iKSk7dmFyIHU9W2EocigiSlNYQXR0cmlidXRlIikscigiSlNYU3ByZWFkQXR0cmlidXRlIikpXTtyKCJKU1hFeHByZXNzaW9uQ29udGFpbmVyIikuYmFzZXMoIkV4cHJlc3Npb24iKS5idWlsZCgiZXhwcmVzc2lvbiIpLmZpZWxkKCJleHByZXNzaW9uIixhKHIoIkV4cHJlc3Npb24iKSxyKCJKU1hFbXB0eUV4cHJlc3Npb24iKSkpO3ZhciBjPVthKHIoIkpTWFRleHQiKSxyKCJKU1hFeHByZXNzaW9uQ29udGFpbmVyIikscigiSlNYU3ByZWFkQ2hpbGQiKSxyKCJKU1hFbGVtZW50IikscigiSlNYRnJhZ21lbnQiKSxyKCJMaXRlcmFsIikpXTtyKCJKU1hFbGVtZW50IikuYmFzZXMoIkV4cHJlc3Npb24iKS5idWlsZCgib3BlbmluZ0VsZW1lbnQiLCJjbG9zaW5nRWxlbWVudCIsImNoaWxkcmVuIikuZmllbGQoIm9wZW5pbmdFbGVtZW50IixyKCJKU1hPcGVuaW5nRWxlbWVudCIpKS5maWVsZCgiY2xvc2luZ0VsZW1lbnQiLGEocigiSlNYQ2xvc2luZ0VsZW1lbnQiKSxudWxsKSxvWyJudWxsIl0pLmZpZWxkKCJjaGlsZHJlbiIsYyxvLmVtcHR5QXJyYXkpLmZpZWxkKCJuYW1lIixsLChmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wZW5pbmdFbGVtZW50Lm5hbWV9KSx0cnVlKS5maWVsZCgic2VsZkNsb3NpbmciLEJvb2xlYW4sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BlbmluZ0VsZW1lbnQuc2VsZkNsb3Npbmd9KSx0cnVlKS5maWVsZCgiYXR0cmlidXRlcyIsdSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGVuaW5nRWxlbWVudC5hdHRyaWJ1dGVzfSksdHJ1ZSk7cigiSlNYT3BlbmluZ0VsZW1lbnQiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJuYW1lIiwiYXR0cmlidXRlcyIsInNlbGZDbG9zaW5nIikuZmllbGQoIm5hbWUiLGwpLmZpZWxkKCJhdHRyaWJ1dGVzIix1LG8uZW1wdHlBcnJheSkuZmllbGQoInNlbGZDbG9zaW5nIixCb29sZWFuLG9bImZhbHNlIl0pO3IoIkpTWENsb3NpbmdFbGVtZW50IikuYmFzZXMoIk5vZGUiKS5idWlsZCgibmFtZSIpLmZpZWxkKCJuYW1lIixsKTtyKCJKU1hGcmFnbWVudCIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoIm9wZW5pbmdGcmFnbWVudCIsImNsb3NpbmdGcmFnbWVudCIsImNoaWxkcmVuIikuZmllbGQoIm9wZW5pbmdGcmFnbWVudCIscigiSlNYT3BlbmluZ0ZyYWdtZW50IikpLmZpZWxkKCJjbG9zaW5nRnJhZ21lbnQiLHIoIkpTWENsb3NpbmdGcmFnbWVudCIpKS5maWVsZCgiY2hpbGRyZW4iLGMsby5lbXB0eUFycmF5KTtyKCJKU1hPcGVuaW5nRnJhZ21lbnQiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCk7cigiSlNYQ2xvc2luZ0ZyYWdtZW50IikuYmFzZXMoIk5vZGUiKS5idWlsZCgpO3IoIkpTWFRleHQiKS5iYXNlcygiTGl0ZXJhbCIpLmJ1aWxkKCJ2YWx1ZSIsInJhdyIpLmZpZWxkKCJ2YWx1ZSIsU3RyaW5nKS5maWVsZCgicmF3IixTdHJpbmcsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9KSk7cigiSlNYRW1wdHlFeHByZXNzaW9uIikuYmFzZXMoIk5vZGUiKS5idWlsZCgpO3IoIkpTWFNwcmVhZENoaWxkIikuYmFzZXMoIk5vZGUiKS5idWlsZCgiZXhwcmVzc2lvbiIpLmZpZWxkKCJleHByZXNzaW9uIixyKCJFeHByZXNzaW9uIikpfXQuZGVmYXVsdD1hO2UuZXhwb3J0cz10WyJkZWZhdWx0Il19KSh5ZSx5ZS5leHBvcnRzKTt2YXIgZ2U9e2V4cG9ydHM6e319O3ZhciB4ZT17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTp0cnVlfSk7dmFyIHI9Ujt2YXIgcz1yLl9faW1wb3J0RGVmYXVsdCh6KTt2YXIgaT1yLl9faW1wb3J0RGVmYXVsdCh1ZS5leHBvcnRzKTt2YXIgbj1yLl9faW1wb3J0RGVmYXVsdChtZS5leHBvcnRzKTtmdW5jdGlvbiBhKGUpe2UudXNlKG4uZGVmYXVsdCk7dmFyIHQ9ZS51c2Uocy5kZWZhdWx0KTt2YXIgcj10LlR5cGU7dmFyIGE9dC5UeXBlLmRlZjt2YXIgbz1yLm9yO3ZhciBsPWUudXNlKGkuZGVmYXVsdCk7dmFyIHU9bC5kZWZhdWx0czthKCJBd2FpdEV4cHJlc3Npb24iKS5idWlsZCgiYXJndW1lbnQiLCJhbGwiKS5maWVsZCgiYXJndW1lbnQiLG8oYSgiRXhwcmVzc2lvbiIpLG51bGwpKS5maWVsZCgiYWxsIixCb29sZWFuLHVbImZhbHNlIl0pO2EoIkRlY29yYXRvciIpLmJhc2VzKCJOb2RlIikuYnVpbGQoImV4cHJlc3Npb24iKS5maWVsZCgiZXhwcmVzc2lvbiIsYSgiRXhwcmVzc2lvbiIpKTthKCJQcm9wZXJ0eSIpLmZpZWxkKCJkZWNvcmF0b3JzIixvKFthKCJEZWNvcmF0b3IiKV0sbnVsbCksdVsibnVsbCJdKTthKCJNZXRob2REZWZpbml0aW9uIikuZmllbGQoImRlY29yYXRvcnMiLG8oW2EoIkRlY29yYXRvciIpXSxudWxsKSx1WyJudWxsIl0pO2EoIlByaXZhdGVOYW1lIikuYmFzZXMoIkV4cHJlc3Npb24iLCJQYXR0ZXJuIikuYnVpbGQoImlkIikuZmllbGQoImlkIixhKCJJZGVudGlmaWVyIikpO2EoIkNsYXNzUHJpdmF0ZVByb3BlcnR5IikuYmFzZXMoIkNsYXNzUHJvcGVydHkiKS5idWlsZCgia2V5IiwidmFsdWUiKS5maWVsZCgia2V5IixhKCJQcml2YXRlTmFtZSIpKS5maWVsZCgidmFsdWUiLG8oYSgiRXhwcmVzc2lvbiIpLG51bGwpLHVbIm51bGwiXSl9dC5kZWZhdWx0PWE7ZS5leHBvcnRzPXRbImRlZmF1bHQiXX0pKHhlLHhlLmV4cG9ydHMpO3ZhciB2ZT17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTp0cnVlfSk7dmFyIHI9Ujt2YXIgcz1yLl9faW1wb3J0RGVmYXVsdCh6KTt2YXIgaT1yLl9faW1wb3J0RGVmYXVsdCh1ZS5leHBvcnRzKTtmdW5jdGlvbiBuKGUpe3ZhciB0PWUudXNlKHMuZGVmYXVsdCk7dmFyIHI9dC5UeXBlLmRlZjt2YXIgbj10LlR5cGUub3I7dmFyIGE9ZS51c2UoaS5kZWZhdWx0KS5kZWZhdWx0czt2YXIgbz1uKHIoIlR5cGVBbm5vdGF0aW9uIikscigiVFNUeXBlQW5ub3RhdGlvbiIpLG51bGwpO3ZhciBsPW4ocigiVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uIikscigiVFNUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24iKSxudWxsKTtyKCJJZGVudGlmaWVyIikuZmllbGQoInR5cGVBbm5vdGF0aW9uIixvLGFbIm51bGwiXSk7cigiT2JqZWN0UGF0dGVybiIpLmZpZWxkKCJ0eXBlQW5ub3RhdGlvbiIsbyxhWyJudWxsIl0pO3IoIkZ1bmN0aW9uIikuZmllbGQoInJldHVyblR5cGUiLG8sYVsibnVsbCJdKS5maWVsZCgidHlwZVBhcmFtZXRlcnMiLGwsYVsibnVsbCJdKTtyKCJDbGFzc1Byb3BlcnR5IikuYnVpbGQoImtleSIsInZhbHVlIiwidHlwZUFubm90YXRpb24iLCJzdGF0aWMiKS5maWVsZCgidmFsdWUiLG4ocigiRXhwcmVzc2lvbiIpLG51bGwpKS5maWVsZCgic3RhdGljIixCb29sZWFuLGFbImZhbHNlIl0pLmZpZWxkKCJ0eXBlQW5ub3RhdGlvbiIsbyxhWyJudWxsIl0pO1siQ2xhc3NEZWNsYXJhdGlvbiIsIkNsYXNzRXhwcmVzc2lvbiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IoZSkuZmllbGQoInR5cGVQYXJhbWV0ZXJzIixsLGFbIm51bGwiXSkuZmllbGQoInN1cGVyVHlwZVBhcmFtZXRlcnMiLG4ocigiVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iKSxyKCJUU1R5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIiksbnVsbCksYVsibnVsbCJdKS5maWVsZCgiaW1wbGVtZW50cyIsbihbcigiQ2xhc3NJbXBsZW1lbnRzIildLFtyKCJUU0V4cHJlc3Npb25XaXRoVHlwZUFyZ3VtZW50cyIpXSksYS5lbXB0eUFycmF5KX0pKX10LmRlZmF1bHQ9bjtlLmV4cG9ydHM9dFsiZGVmYXVsdCJdfSkodmUsdmUuZXhwb3J0cyk7KGZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTp0cnVlfSk7dmFyIHI9Ujt2YXIgcz1yLl9faW1wb3J0RGVmYXVsdCh4ZS5leHBvcnRzKTt2YXIgaT1yLl9faW1wb3J0RGVmYXVsdCh2ZS5leHBvcnRzKTt2YXIgbj1yLl9faW1wb3J0RGVmYXVsdCh6KTt2YXIgYT1yLl9faW1wb3J0RGVmYXVsdCh1ZS5leHBvcnRzKTtmdW5jdGlvbiBvKGUpe2UudXNlKHMuZGVmYXVsdCk7ZS51c2UoaS5kZWZhdWx0KTt2YXIgdD1lLnVzZShuLmRlZmF1bHQpO3ZhciByPXQuVHlwZS5kZWY7dmFyIG89dC5UeXBlLm9yO3ZhciBsPWUudXNlKGEuZGVmYXVsdCkuZGVmYXVsdHM7cigiRmxvdyIpLmJhc2VzKCJOb2RlIik7cigiRmxvd1R5cGUiKS5iYXNlcygiRmxvdyIpO3IoIkFueVR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoKTtyKCJFbXB0eVR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoKTtyKCJNaXhlZFR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoKTtyKCJWb2lkVHlwZUFubm90YXRpb24iKS5iYXNlcygiRmxvd1R5cGUiKS5idWlsZCgpO3IoIlN5bWJvbFR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoKTtyKCJOdW1iZXJUeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCk7cigiQmlnSW50VHlwZUFubm90YXRpb24iKS5iYXNlcygiRmxvd1R5cGUiKS5idWlsZCgpO3IoIk51bWJlckxpdGVyYWxUeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCJ2YWx1ZSIsInJhdyIpLmZpZWxkKCJ2YWx1ZSIsTnVtYmVyKS5maWVsZCgicmF3IixTdHJpbmcpO3IoIk51bWVyaWNMaXRlcmFsVHlwZUFubm90YXRpb24iKS5iYXNlcygiRmxvd1R5cGUiKS5idWlsZCgidmFsdWUiLCJyYXciKS5maWVsZCgidmFsdWUiLE51bWJlcikuZmllbGQoInJhdyIsU3RyaW5nKTtyKCJCaWdJbnRMaXRlcmFsVHlwZUFubm90YXRpb24iKS5iYXNlcygiRmxvd1R5cGUiKS5idWlsZCgidmFsdWUiLCJyYXciKS5maWVsZCgidmFsdWUiLG51bGwpLmZpZWxkKCJyYXciLFN0cmluZyk7cigiU3RyaW5nVHlwZUFubm90YXRpb24iKS5iYXNlcygiRmxvd1R5cGUiKS5idWlsZCgpO3IoIlN0cmluZ0xpdGVyYWxUeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCJ2YWx1ZSIsInJhdyIpLmZpZWxkKCJ2YWx1ZSIsU3RyaW5nKS5maWVsZCgicmF3IixTdHJpbmcpO3IoIkJvb2xlYW5UeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCk7cigiQm9vbGVhbkxpdGVyYWxUeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCJ2YWx1ZSIsInJhdyIpLmZpZWxkKCJ2YWx1ZSIsQm9vbGVhbikuZmllbGQoInJhdyIsU3RyaW5nKTtyKCJUeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJOb2RlIikuYnVpbGQoInR5cGVBbm5vdGF0aW9uIikuZmllbGQoInR5cGVBbm5vdGF0aW9uIixyKCJGbG93VHlwZSIpKTtyKCJOdWxsYWJsZVR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoInR5cGVBbm5vdGF0aW9uIikuZmllbGQoInR5cGVBbm5vdGF0aW9uIixyKCJGbG93VHlwZSIpKTtyKCJOdWxsTGl0ZXJhbFR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoKTtyKCJOdWxsVHlwZUFubm90YXRpb24iKS5iYXNlcygiRmxvd1R5cGUiKS5idWlsZCgpO3IoIlRoaXNUeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCk7cigiRXhpc3RzVHlwZUFubm90YXRpb24iKS5iYXNlcygiRmxvd1R5cGUiKS5idWlsZCgpO3IoIkV4aXN0ZW50aWFsVHlwZVBhcmFtIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoKTtyKCJGdW5jdGlvblR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoInBhcmFtcyIsInJldHVyblR5cGUiLCJyZXN0IiwidHlwZVBhcmFtZXRlcnMiKS5maWVsZCgicGFyYW1zIixbcigiRnVuY3Rpb25UeXBlUGFyYW0iKV0pLmZpZWxkKCJyZXR1cm5UeXBlIixyKCJGbG93VHlwZSIpKS5maWVsZCgicmVzdCIsbyhyKCJGdW5jdGlvblR5cGVQYXJhbSIpLG51bGwpKS5maWVsZCgidHlwZVBhcmFtZXRlcnMiLG8ocigiVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uIiksbnVsbCkpO3IoIkZ1bmN0aW9uVHlwZVBhcmFtIikuYmFzZXMoIk5vZGUiKS5idWlsZCgibmFtZSIsInR5cGVBbm5vdGF0aW9uIiwib3B0aW9uYWwiKS5maWVsZCgibmFtZSIsbyhyKCJJZGVudGlmaWVyIiksbnVsbCkpLmZpZWxkKCJ0eXBlQW5ub3RhdGlvbiIscigiRmxvd1R5cGUiKSkuZmllbGQoIm9wdGlvbmFsIixCb29sZWFuKTtyKCJBcnJheVR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoImVsZW1lbnRUeXBlIikuZmllbGQoImVsZW1lbnRUeXBlIixyKCJGbG93VHlwZSIpKTtyKCJPYmplY3RUeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCJwcm9wZXJ0aWVzIiwiaW5kZXhlcnMiLCJjYWxsUHJvcGVydGllcyIpLmZpZWxkKCJwcm9wZXJ0aWVzIixbbyhyKCJPYmplY3RUeXBlUHJvcGVydHkiKSxyKCJPYmplY3RUeXBlU3ByZWFkUHJvcGVydHkiKSldKS5maWVsZCgiaW5kZXhlcnMiLFtyKCJPYmplY3RUeXBlSW5kZXhlciIpXSxsLmVtcHR5QXJyYXkpLmZpZWxkKCJjYWxsUHJvcGVydGllcyIsW3IoIk9iamVjdFR5cGVDYWxsUHJvcGVydHkiKV0sbC5lbXB0eUFycmF5KS5maWVsZCgiaW5leGFjdCIsbyhCb29sZWFuLHZvaWQgMCksbFsidW5kZWZpbmVkIl0pLmZpZWxkKCJleGFjdCIsQm9vbGVhbixsWyJmYWxzZSJdKS5maWVsZCgiaW50ZXJuYWxTbG90cyIsW3IoIk9iamVjdFR5cGVJbnRlcm5hbFNsb3QiKV0sbC5lbXB0eUFycmF5KTtyKCJWYXJpYW5jZSIpLmJhc2VzKCJOb2RlIikuYnVpbGQoImtpbmQiKS5maWVsZCgia2luZCIsbygicGx1cyIsIm1pbnVzIikpO3ZhciB1PW8ocigiVmFyaWFuY2UiKSwicGx1cyIsIm1pbnVzIixudWxsKTtyKCJPYmplY3RUeXBlUHJvcGVydHkiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJrZXkiLCJ2YWx1ZSIsIm9wdGlvbmFsIikuZmllbGQoImtleSIsbyhyKCJMaXRlcmFsIikscigiSWRlbnRpZmllciIpKSkuZmllbGQoInZhbHVlIixyKCJGbG93VHlwZSIpKS5maWVsZCgib3B0aW9uYWwiLEJvb2xlYW4pLmZpZWxkKCJ2YXJpYW5jZSIsdSxsWyJudWxsIl0pO3IoIk9iamVjdFR5cGVJbmRleGVyIikuYmFzZXMoIk5vZGUiKS5idWlsZCgiaWQiLCJrZXkiLCJ2YWx1ZSIpLmZpZWxkKCJpZCIscigiSWRlbnRpZmllciIpKS5maWVsZCgia2V5IixyKCJGbG93VHlwZSIpKS5maWVsZCgidmFsdWUiLHIoIkZsb3dUeXBlIikpLmZpZWxkKCJ2YXJpYW5jZSIsdSxsWyJudWxsIl0pLmZpZWxkKCJzdGF0aWMiLEJvb2xlYW4sbFsiZmFsc2UiXSk7cigiT2JqZWN0VHlwZUNhbGxQcm9wZXJ0eSIpLmJhc2VzKCJOb2RlIikuYnVpbGQoInZhbHVlIikuZmllbGQoInZhbHVlIixyKCJGdW5jdGlvblR5cGVBbm5vdGF0aW9uIikpLmZpZWxkKCJzdGF0aWMiLEJvb2xlYW4sbFsiZmFsc2UiXSk7cigiUXVhbGlmaWVkVHlwZUlkZW50aWZpZXIiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJxdWFsaWZpY2F0aW9uIiwiaWQiKS5maWVsZCgicXVhbGlmaWNhdGlvbiIsbyhyKCJJZGVudGlmaWVyIikscigiUXVhbGlmaWVkVHlwZUlkZW50aWZpZXIiKSkpLmZpZWxkKCJpZCIscigiSWRlbnRpZmllciIpKTtyKCJHZW5lcmljVHlwZUFubm90YXRpb24iKS5iYXNlcygiRmxvd1R5cGUiKS5idWlsZCgiaWQiLCJ0eXBlUGFyYW1ldGVycyIpLmZpZWxkKCJpZCIsbyhyKCJJZGVudGlmaWVyIikscigiUXVhbGlmaWVkVHlwZUlkZW50aWZpZXIiKSkpLmZpZWxkKCJ0eXBlUGFyYW1ldGVycyIsbyhyKCJUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiIpLG51bGwpKTtyKCJNZW1iZXJUeXBlQW5ub3RhdGlvbiIpLmJhc2VzKCJGbG93VHlwZSIpLmJ1aWxkKCJvYmplY3QiLCJwcm9wZXJ0eSIpLmZpZWxkKCJvYmplY3QiLHIoIklkZW50aWZpZXIiKSkuZmllbGQoInByb3BlcnR5IixvKHIoIk1lbWJlclR5cGVBbm5vdGF0aW9uIikscigiR2VuZXJpY1R5cGVBbm5vdGF0aW9uIikpKTtyKCJVbmlvblR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoInR5cGVzIikuZmllbGQoInR5cGVzIixbcigiRmxvd1R5cGUiKV0pO3IoIkludGVyc2VjdGlvblR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoInR5cGVzIikuZmllbGQoInR5cGVzIixbcigiRmxvd1R5cGUiKV0pO3IoIlR5cGVvZlR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoImFyZ3VtZW50IikuZmllbGQoImFyZ3VtZW50IixyKCJGbG93VHlwZSIpKTtyKCJPYmplY3RUeXBlU3ByZWFkUHJvcGVydHkiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJhcmd1bWVudCIpLmZpZWxkKCJhcmd1bWVudCIscigiRmxvd1R5cGUiKSk7cigiT2JqZWN0VHlwZUludGVybmFsU2xvdCIpLmJhc2VzKCJOb2RlIikuYnVpbGQoImlkIiwidmFsdWUiLCJvcHRpb25hbCIsInN0YXRpYyIsIm1ldGhvZCIpLmZpZWxkKCJpZCIscigiSWRlbnRpZmllciIpKS5maWVsZCgidmFsdWUiLHIoIkZsb3dUeXBlIikpLmZpZWxkKCJvcHRpb25hbCIsQm9vbGVhbikuZmllbGQoInN0YXRpYyIsQm9vbGVhbikuZmllbGQoIm1ldGhvZCIsQm9vbGVhbik7cigiVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uIikuYmFzZXMoIk5vZGUiKS5idWlsZCgicGFyYW1zIikuZmllbGQoInBhcmFtcyIsW3IoIlR5cGVQYXJhbWV0ZXIiKV0pO3IoIlR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIikuYmFzZXMoIk5vZGUiKS5idWlsZCgicGFyYW1zIikuZmllbGQoInBhcmFtcyIsW3IoIkZsb3dUeXBlIildKTtyKCJUeXBlUGFyYW1ldGVyIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoIm5hbWUiLCJ2YXJpYW5jZSIsImJvdW5kIiwiZGVmYXVsdCIpLmZpZWxkKCJuYW1lIixTdHJpbmcpLmZpZWxkKCJ2YXJpYW5jZSIsdSxsWyJudWxsIl0pLmZpZWxkKCJib3VuZCIsbyhyKCJUeXBlQW5ub3RhdGlvbiIpLG51bGwpLGxbIm51bGwiXSkuZmllbGQoImRlZmF1bHQiLG8ocigiRmxvd1R5cGUiKSxudWxsKSxsWyJudWxsIl0pO3IoIkNsYXNzUHJvcGVydHkiKS5maWVsZCgidmFyaWFuY2UiLHUsbFsibnVsbCJdKTtyKCJDbGFzc0ltcGxlbWVudHMiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJpZCIpLmZpZWxkKCJpZCIscigiSWRlbnRpZmllciIpKS5maWVsZCgic3VwZXJDbGFzcyIsbyhyKCJFeHByZXNzaW9uIiksbnVsbCksbFsibnVsbCJdKS5maWVsZCgidHlwZVBhcmFtZXRlcnMiLG8ocigiVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iKSxudWxsKSxsWyJudWxsIl0pO3IoIkludGVyZmFjZVR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoImJvZHkiLCJleHRlbmRzIikuZmllbGQoImJvZHkiLHIoIk9iamVjdFR5cGVBbm5vdGF0aW9uIikpLmZpZWxkKCJleHRlbmRzIixvKFtyKCJJbnRlcmZhY2VFeHRlbmRzIildLG51bGwpLGxbIm51bGwiXSk7cigiSW50ZXJmYWNlRGVjbGFyYXRpb24iKS5iYXNlcygiRGVjbGFyYXRpb24iKS5idWlsZCgiaWQiLCJib2R5IiwiZXh0ZW5kcyIpLmZpZWxkKCJpZCIscigiSWRlbnRpZmllciIpKS5maWVsZCgidHlwZVBhcmFtZXRlcnMiLG8ocigiVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uIiksbnVsbCksbFsibnVsbCJdKS5maWVsZCgiYm9keSIscigiT2JqZWN0VHlwZUFubm90YXRpb24iKSkuZmllbGQoImV4dGVuZHMiLFtyKCJJbnRlcmZhY2VFeHRlbmRzIildKTtyKCJEZWNsYXJlSW50ZXJmYWNlIikuYmFzZXMoIkludGVyZmFjZURlY2xhcmF0aW9uIikuYnVpbGQoImlkIiwiYm9keSIsImV4dGVuZHMiKTtyKCJJbnRlcmZhY2VFeHRlbmRzIikuYmFzZXMoIk5vZGUiKS5idWlsZCgiaWQiKS5maWVsZCgiaWQiLHIoIklkZW50aWZpZXIiKSkuZmllbGQoInR5cGVQYXJhbWV0ZXJzIixvKHIoIlR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIiksbnVsbCksbFsibnVsbCJdKTtyKCJUeXBlQWxpYXMiKS5iYXNlcygiRGVjbGFyYXRpb24iKS5idWlsZCgiaWQiLCJ0eXBlUGFyYW1ldGVycyIsInJpZ2h0IikuZmllbGQoImlkIixyKCJJZGVudGlmaWVyIikpLmZpZWxkKCJ0eXBlUGFyYW1ldGVycyIsbyhyKCJUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24iKSxudWxsKSkuZmllbGQoInJpZ2h0IixyKCJGbG93VHlwZSIpKTtyKCJEZWNsYXJlVHlwZUFsaWFzIikuYmFzZXMoIlR5cGVBbGlhcyIpLmJ1aWxkKCJpZCIsInR5cGVQYXJhbWV0ZXJzIiwicmlnaHQiKTtyKCJPcGFxdWVUeXBlIikuYmFzZXMoIkRlY2xhcmF0aW9uIikuYnVpbGQoImlkIiwidHlwZVBhcmFtZXRlcnMiLCJpbXBsdHlwZSIsInN1cGVydHlwZSIpLmZpZWxkKCJpZCIscigiSWRlbnRpZmllciIpKS5maWVsZCgidHlwZVBhcmFtZXRlcnMiLG8ocigiVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uIiksbnVsbCkpLmZpZWxkKCJpbXBsdHlwZSIscigiRmxvd1R5cGUiKSkuZmllbGQoInN1cGVydHlwZSIsbyhyKCJGbG93VHlwZSIpLG51bGwpKTtyKCJEZWNsYXJlT3BhcXVlVHlwZSIpLmJhc2VzKCJPcGFxdWVUeXBlIikuYnVpbGQoImlkIiwidHlwZVBhcmFtZXRlcnMiLCJzdXBlcnR5cGUiKS5maWVsZCgiaW1wbHR5cGUiLG8ocigiRmxvd1R5cGUiKSxudWxsKSk7cigiVHlwZUNhc3RFeHByZXNzaW9uIikuYmFzZXMoIkV4cHJlc3Npb24iKS5idWlsZCgiZXhwcmVzc2lvbiIsInR5cGVBbm5vdGF0aW9uIikuZmllbGQoImV4cHJlc3Npb24iLHIoIkV4cHJlc3Npb24iKSkuZmllbGQoInR5cGVBbm5vdGF0aW9uIixyKCJUeXBlQW5ub3RhdGlvbiIpKTtyKCJUdXBsZVR5cGVBbm5vdGF0aW9uIikuYmFzZXMoIkZsb3dUeXBlIikuYnVpbGQoInR5cGVzIikuZmllbGQoInR5cGVzIixbcigiRmxvd1R5cGUiKV0pO3IoIkRlY2xhcmVWYXJpYWJsZSIpLmJhc2VzKCJTdGF0ZW1lbnQiKS5idWlsZCgiaWQiKS5maWVsZCgiaWQiLHIoIklkZW50aWZpZXIiKSk7cigiRGVjbGFyZUZ1bmN0aW9uIikuYmFzZXMoIlN0YXRlbWVudCIpLmJ1aWxkKCJpZCIpLmZpZWxkKCJpZCIscigiSWRlbnRpZmllciIpKS5maWVsZCgicHJlZGljYXRlIixvKHIoIkZsb3dQcmVkaWNhdGUiKSxudWxsKSxsWyJudWxsIl0pO3IoIkRlY2xhcmVDbGFzcyIpLmJhc2VzKCJJbnRlcmZhY2VEZWNsYXJhdGlvbiIpLmJ1aWxkKCJpZCIpO3IoIkRlY2xhcmVNb2R1bGUiKS5iYXNlcygiU3RhdGVtZW50IikuYnVpbGQoImlkIiwiYm9keSIpLmZpZWxkKCJpZCIsbyhyKCJJZGVudGlmaWVyIikscigiTGl0ZXJhbCIpKSkuZmllbGQoImJvZHkiLHIoIkJsb2NrU3RhdGVtZW50IikpO3IoIkRlY2xhcmVNb2R1bGVFeHBvcnRzIikuYmFzZXMoIlN0YXRlbWVudCIpLmJ1aWxkKCJ0eXBlQW5ub3RhdGlvbiIpLmZpZWxkKCJ0eXBlQW5ub3RhdGlvbiIscigiVHlwZUFubm90YXRpb24iKSk7cigiRGVjbGFyZUV4cG9ydERlY2xhcmF0aW9uIikuYmFzZXMoIkRlY2xhcmF0aW9uIikuYnVpbGQoImRlZmF1bHQiLCJkZWNsYXJhdGlvbiIsInNwZWNpZmllcnMiLCJzb3VyY2UiKS5maWVsZCgiZGVmYXVsdCIsQm9vbGVhbikuZmllbGQoImRlY2xhcmF0aW9uIixvKHIoIkRlY2xhcmVWYXJpYWJsZSIpLHIoIkRlY2xhcmVGdW5jdGlvbiIpLHIoIkRlY2xhcmVDbGFzcyIpLHIoIkZsb3dUeXBlIikscigiVHlwZUFsaWFzIikscigiRGVjbGFyZU9wYXF1ZVR5cGUiKSxyKCJJbnRlcmZhY2VEZWNsYXJhdGlvbiIpLG51bGwpKS5maWVsZCgic3BlY2lmaWVycyIsW28ocigiRXhwb3J0U3BlY2lmaWVyIikscigiRXhwb3J0QmF0Y2hTcGVjaWZpZXIiKSldLGwuZW1wdHlBcnJheSkuZmllbGQoInNvdXJjZSIsbyhyKCJMaXRlcmFsIiksbnVsbCksbFsibnVsbCJdKTtyKCJEZWNsYXJlRXhwb3J0QWxsRGVjbGFyYXRpb24iKS5iYXNlcygiRGVjbGFyYXRpb24iKS5idWlsZCgic291cmNlIikuZmllbGQoInNvdXJjZSIsbyhyKCJMaXRlcmFsIiksbnVsbCksbFsibnVsbCJdKTtyKCJJbXBvcnREZWNsYXJhdGlvbiIpLmZpZWxkKCJpbXBvcnRLaW5kIixvKCJ2YWx1ZSIsInR5cGUiLCJ0eXBlb2YiKSwoZnVuY3Rpb24oKXtyZXR1cm4idmFsdWUifSkpO3IoIkZsb3dQcmVkaWNhdGUiKS5iYXNlcygiRmxvdyIpO3IoIkluZmVycmVkUHJlZGljYXRlIikuYmFzZXMoIkZsb3dQcmVkaWNhdGUiKS5idWlsZCgpO3IoIkRlY2xhcmVkUHJlZGljYXRlIikuYmFzZXMoIkZsb3dQcmVkaWNhdGUiKS5idWlsZCgidmFsdWUiKS5maWVsZCgidmFsdWUiLHIoIkV4cHJlc3Npb24iKSk7cigiRnVuY3Rpb24iKS5maWVsZCgicHJlZGljYXRlIixvKHIoIkZsb3dQcmVkaWNhdGUiKSxudWxsKSxsWyJudWxsIl0pO3IoIkNhbGxFeHByZXNzaW9uIikuZmllbGQoInR5cGVBcmd1bWVudHMiLG8obnVsbCxyKCJUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiIpKSxsWyJudWxsIl0pO3IoIk5ld0V4cHJlc3Npb24iKS5maWVsZCgidHlwZUFyZ3VtZW50cyIsbyhudWxsLHIoIlR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIikpLGxbIm51bGwiXSk7cigiRW51bURlY2xhcmF0aW9uIikuYmFzZXMoIkRlY2xhcmF0aW9uIikuYnVpbGQoImlkIiwiYm9keSIpLmZpZWxkKCJpZCIscigiSWRlbnRpZmllciIpKS5maWVsZCgiYm9keSIsbyhyKCJFbnVtQm9vbGVhbkJvZHkiKSxyKCJFbnVtTnVtYmVyQm9keSIpLHIoIkVudW1TdHJpbmdCb2R5IikscigiRW51bVN5bWJvbEJvZHkiKSkpO3IoIkVudW1Cb29sZWFuQm9keSIpLmJ1aWxkKCJtZW1iZXJzIiwiZXhwbGljaXRUeXBlIikuZmllbGQoIm1lbWJlcnMiLFtyKCJFbnVtQm9vbGVhbk1lbWJlciIpXSkuZmllbGQoImV4cGxpY2l0VHlwZSIsQm9vbGVhbik7cigiRW51bU51bWJlckJvZHkiKS5idWlsZCgibWVtYmVycyIsImV4cGxpY2l0VHlwZSIpLmZpZWxkKCJtZW1iZXJzIixbcigiRW51bU51bWJlck1lbWJlciIpXSkuZmllbGQoImV4cGxpY2l0VHlwZSIsQm9vbGVhbik7cigiRW51bVN0cmluZ0JvZHkiKS5idWlsZCgibWVtYmVycyIsImV4cGxpY2l0VHlwZSIpLmZpZWxkKCJtZW1iZXJzIixvKFtyKCJFbnVtU3RyaW5nTWVtYmVyIildLFtyKCJFbnVtRGVmYXVsdGVkTWVtYmVyIildKSkuZmllbGQoImV4cGxpY2l0VHlwZSIsQm9vbGVhbik7cigiRW51bVN5bWJvbEJvZHkiKS5idWlsZCgibWVtYmVycyIpLmZpZWxkKCJtZW1iZXJzIixbcigiRW51bURlZmF1bHRlZE1lbWJlciIpXSk7cigiRW51bUJvb2xlYW5NZW1iZXIiKS5idWlsZCgiaWQiLCJpbml0IikuZmllbGQoImlkIixyKCJJZGVudGlmaWVyIikpLmZpZWxkKCJpbml0IixvKHIoIkxpdGVyYWwiKSxCb29sZWFuKSk7cigiRW51bU51bWJlck1lbWJlciIpLmJ1aWxkKCJpZCIsImluaXQiKS5maWVsZCgiaWQiLHIoIklkZW50aWZpZXIiKSkuZmllbGQoImluaXQiLHIoIkxpdGVyYWwiKSk7cigiRW51bVN0cmluZ01lbWJlciIpLmJ1aWxkKCJpZCIsImluaXQiKS5maWVsZCgiaWQiLHIoIklkZW50aWZpZXIiKSkuZmllbGQoImluaXQiLHIoIkxpdGVyYWwiKSk7cigiRW51bURlZmF1bHRlZE1lbWJlciIpLmJ1aWxkKCJpZCIpLmZpZWxkKCJpZCIscigiSWRlbnRpZmllciIpKX10LmRlZmF1bHQ9bztlLmV4cG9ydHM9dFsiZGVmYXVsdCJdfSkoZ2UsZ2UuZXhwb3J0cyk7dmFyIGJlPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTt2YXIgcj1SO3ZhciBzPXIuX19pbXBvcnREZWZhdWx0KG1lLmV4cG9ydHMpO3ZhciBpPXIuX19pbXBvcnREZWZhdWx0KHopO3ZhciBuPXIuX19pbXBvcnREZWZhdWx0KHVlLmV4cG9ydHMpO2Z1bmN0aW9uIGEoZSl7ZS51c2Uocy5kZWZhdWx0KTt2YXIgdD1lLnVzZShpLmRlZmF1bHQpO3ZhciByPWUudXNlKG4uZGVmYXVsdCkuZGVmYXVsdHM7dmFyIGE9dC5UeXBlLmRlZjt2YXIgbz10LlR5cGUub3I7YSgiVmFyaWFibGVEZWNsYXJhdGlvbiIpLmZpZWxkKCJkZWNsYXJhdGlvbnMiLFtvKGEoIlZhcmlhYmxlRGVjbGFyYXRvciIpLGEoIklkZW50aWZpZXIiKSldKTthKCJQcm9wZXJ0eSIpLmZpZWxkKCJ2YWx1ZSIsbyhhKCJFeHByZXNzaW9uIiksYSgiUGF0dGVybiIpKSk7YSgiQXJyYXlQYXR0ZXJuIikuZmllbGQoImVsZW1lbnRzIixbbyhhKCJQYXR0ZXJuIiksYSgiU3ByZWFkRWxlbWVudCIpLG51bGwpXSk7YSgiT2JqZWN0UGF0dGVybiIpLmZpZWxkKCJwcm9wZXJ0aWVzIixbbyhhKCJQcm9wZXJ0eSIpLGEoIlByb3BlcnR5UGF0dGVybiIpLGEoIlNwcmVhZFByb3BlcnR5UGF0dGVybiIpLGEoIlNwcmVhZFByb3BlcnR5IikpXSk7YSgiRXhwb3J0U3BlY2lmaWVyIikuYmFzZXMoIk1vZHVsZVNwZWNpZmllciIpLmJ1aWxkKCJpZCIsIm5hbWUiKTthKCJFeHBvcnRCYXRjaFNwZWNpZmllciIpLmJhc2VzKCJTcGVjaWZpZXIiKS5idWlsZCgpO2EoIkV4cG9ydERlY2xhcmF0aW9uIikuYmFzZXMoIkRlY2xhcmF0aW9uIikuYnVpbGQoImRlZmF1bHQiLCJkZWNsYXJhdGlvbiIsInNwZWNpZmllcnMiLCJzb3VyY2UiKS5maWVsZCgiZGVmYXVsdCIsQm9vbGVhbikuZmllbGQoImRlY2xhcmF0aW9uIixvKGEoIkRlY2xhcmF0aW9uIiksYSgiRXhwcmVzc2lvbiIpLG51bGwpKS5maWVsZCgic3BlY2lmaWVycyIsW28oYSgiRXhwb3J0U3BlY2lmaWVyIiksYSgiRXhwb3J0QmF0Y2hTcGVjaWZpZXIiKSldLHIuZW1wdHlBcnJheSkuZmllbGQoInNvdXJjZSIsbyhhKCJMaXRlcmFsIiksbnVsbCksclsibnVsbCJdKTthKCJCbG9jayIpLmJhc2VzKCJDb21tZW50IikuYnVpbGQoInZhbHVlIiwibGVhZGluZyIsInRyYWlsaW5nIik7YSgiTGluZSIpLmJhc2VzKCJDb21tZW50IikuYnVpbGQoInZhbHVlIiwibGVhZGluZyIsInRyYWlsaW5nIil9dC5kZWZhdWx0PWE7ZS5leHBvcnRzPXRbImRlZmF1bHQiXX0pKGJlLGJlLmV4cG9ydHMpO3ZhciBFZT17ZXhwb3J0czp7fX07dmFyIFNlPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTt2YXIgcj1SO3ZhciBzPXIuX19pbXBvcnREZWZhdWx0KHhlLmV4cG9ydHMpO3ZhciBpPXIuX19pbXBvcnREZWZhdWx0KHopO3ZhciBuPXIuX19pbXBvcnREZWZhdWx0KHVlLmV4cG9ydHMpO2Z1bmN0aW9uIGEoZSl7ZS51c2Uocy5kZWZhdWx0KTt2YXIgdD1lLnVzZShpLmRlZmF1bHQpO3ZhciByPWUudXNlKG4uZGVmYXVsdCkuZGVmYXVsdHM7dmFyIGE9dC5UeXBlLmRlZjt2YXIgbz10LlR5cGUub3I7YSgiTm9vcCIpLmJhc2VzKCJTdGF0ZW1lbnQiKS5idWlsZCgpO2EoIkRvRXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoImJvZHkiKS5maWVsZCgiYm9keSIsW2EoIlN0YXRlbWVudCIpXSk7YSgiQmluZEV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJvYmplY3QiLCJjYWxsZWUiKS5maWVsZCgib2JqZWN0IixvKGEoIkV4cHJlc3Npb24iKSxudWxsKSkuZmllbGQoImNhbGxlZSIsYSgiRXhwcmVzc2lvbiIpKTthKCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiIpLmJhc2VzKCJFeHByZXNzaW9uIikuYnVpbGQoImV4cHJlc3Npb24iKS5maWVsZCgiZXhwcmVzc2lvbiIsYSgiRXhwcmVzc2lvbiIpKTthKCJFeHBvcnROYW1lc3BhY2VTcGVjaWZpZXIiKS5iYXNlcygiU3BlY2lmaWVyIikuYnVpbGQoImV4cG9ydGVkIikuZmllbGQoImV4cG9ydGVkIixhKCJJZGVudGlmaWVyIikpO2EoIkV4cG9ydERlZmF1bHRTcGVjaWZpZXIiKS5iYXNlcygiU3BlY2lmaWVyIikuYnVpbGQoImV4cG9ydGVkIikuZmllbGQoImV4cG9ydGVkIixhKCJJZGVudGlmaWVyIikpO2EoIkNvbW1lbnRCbG9jayIpLmJhc2VzKCJDb21tZW50IikuYnVpbGQoInZhbHVlIiwibGVhZGluZyIsInRyYWlsaW5nIik7YSgiQ29tbWVudExpbmUiKS5iYXNlcygiQ29tbWVudCIpLmJ1aWxkKCJ2YWx1ZSIsImxlYWRpbmciLCJ0cmFpbGluZyIpO2EoIkRpcmVjdGl2ZSIpLmJhc2VzKCJOb2RlIikuYnVpbGQoInZhbHVlIikuZmllbGQoInZhbHVlIixhKCJEaXJlY3RpdmVMaXRlcmFsIikpO2EoIkRpcmVjdGl2ZUxpdGVyYWwiKS5iYXNlcygiTm9kZSIsIkV4cHJlc3Npb24iKS5idWlsZCgidmFsdWUiKS5maWVsZCgidmFsdWUiLFN0cmluZyxyWyJ1c2Ugc3RyaWN0Il0pO2EoIkludGVycHJldGVyRGlyZWN0aXZlIikuYmFzZXMoIk5vZGUiKS5idWlsZCgidmFsdWUiKS5maWVsZCgidmFsdWUiLFN0cmluZyk7YSgiQmxvY2tTdGF0ZW1lbnQiKS5iYXNlcygiU3RhdGVtZW50IikuYnVpbGQoImJvZHkiKS5maWVsZCgiYm9keSIsW2EoIlN0YXRlbWVudCIpXSkuZmllbGQoImRpcmVjdGl2ZXMiLFthKCJEaXJlY3RpdmUiKV0sci5lbXB0eUFycmF5KTthKCJQcm9ncmFtIikuYmFzZXMoIk5vZGUiKS5idWlsZCgiYm9keSIpLmZpZWxkKCJib2R5IixbYSgiU3RhdGVtZW50IildKS5maWVsZCgiZGlyZWN0aXZlcyIsW2EoIkRpcmVjdGl2ZSIpXSxyLmVtcHR5QXJyYXkpLmZpZWxkKCJpbnRlcnByZXRlciIsbyhhKCJJbnRlcnByZXRlckRpcmVjdGl2ZSIpLG51bGwpLHJbIm51bGwiXSk7YSgiU3RyaW5nTGl0ZXJhbCIpLmJhc2VzKCJMaXRlcmFsIikuYnVpbGQoInZhbHVlIikuZmllbGQoInZhbHVlIixTdHJpbmcpO2EoIk51bWVyaWNMaXRlcmFsIikuYmFzZXMoIkxpdGVyYWwiKS5idWlsZCgidmFsdWUiKS5maWVsZCgidmFsdWUiLE51bWJlcikuZmllbGQoInJhdyIsbyhTdHJpbmcsbnVsbCksclsibnVsbCJdKS5maWVsZCgiZXh0cmEiLHtyYXdWYWx1ZTpOdW1iZXIscmF3OlN0cmluZ30sKGZ1bmN0aW9uIGUoKXtyZXR1cm57cmF3VmFsdWU6dGhpcy52YWx1ZSxyYXc6dGhpcy52YWx1ZSsiIn19KSk7YSgiQmlnSW50TGl0ZXJhbCIpLmJhc2VzKCJMaXRlcmFsIikuYnVpbGQoInZhbHVlIikuZmllbGQoInZhbHVlIixvKFN0cmluZyxOdW1iZXIpKS5maWVsZCgiZXh0cmEiLHtyYXdWYWx1ZTpTdHJpbmcscmF3OlN0cmluZ30sKGZ1bmN0aW9uIGUoKXtyZXR1cm57cmF3VmFsdWU6U3RyaW5nKHRoaXMudmFsdWUpLHJhdzp0aGlzLnZhbHVlKyJuIn19KSk7YSgiTnVsbExpdGVyYWwiKS5iYXNlcygiTGl0ZXJhbCIpLmJ1aWxkKCkuZmllbGQoInZhbHVlIixudWxsLHJbIm51bGwiXSk7YSgiQm9vbGVhbkxpdGVyYWwiKS5iYXNlcygiTGl0ZXJhbCIpLmJ1aWxkKCJ2YWx1ZSIpLmZpZWxkKCJ2YWx1ZSIsQm9vbGVhbik7YSgiUmVnRXhwTGl0ZXJhbCIpLmJhc2VzKCJMaXRlcmFsIikuYnVpbGQoInBhdHRlcm4iLCJmbGFncyIpLmZpZWxkKCJwYXR0ZXJuIixTdHJpbmcpLmZpZWxkKCJmbGFncyIsU3RyaW5nKS5maWVsZCgidmFsdWUiLFJlZ0V4cCwoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFJlZ0V4cCh0aGlzLnBhdHRlcm4sdGhpcy5mbGFncyl9KSk7dmFyIGw9byhhKCJQcm9wZXJ0eSIpLGEoIk9iamVjdE1ldGhvZCIpLGEoIk9iamVjdFByb3BlcnR5IiksYSgiU3ByZWFkUHJvcGVydHkiKSxhKCJTcHJlYWRFbGVtZW50IikpO2EoIk9iamVjdEV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCJwcm9wZXJ0aWVzIikuZmllbGQoInByb3BlcnRpZXMiLFtsXSk7YSgiT2JqZWN0TWV0aG9kIikuYmFzZXMoIk5vZGUiLCJGdW5jdGlvbiIpLmJ1aWxkKCJraW5kIiwia2V5IiwicGFyYW1zIiwiYm9keSIsImNvbXB1dGVkIikuZmllbGQoImtpbmQiLG8oIm1ldGhvZCIsImdldCIsInNldCIpKS5maWVsZCgia2V5IixvKGEoIkxpdGVyYWwiKSxhKCJJZGVudGlmaWVyIiksYSgiRXhwcmVzc2lvbiIpKSkuZmllbGQoInBhcmFtcyIsW2EoIlBhdHRlcm4iKV0pLmZpZWxkKCJib2R5IixhKCJCbG9ja1N0YXRlbWVudCIpKS5maWVsZCgiY29tcHV0ZWQiLEJvb2xlYW4sclsiZmFsc2UiXSkuZmllbGQoImdlbmVyYXRvciIsQm9vbGVhbixyWyJmYWxzZSJdKS5maWVsZCgiYXN5bmMiLEJvb2xlYW4sclsiZmFsc2UiXSkuZmllbGQoImFjY2Vzc2liaWxpdHkiLG8oYSgiTGl0ZXJhbCIpLG51bGwpLHJbIm51bGwiXSkuZmllbGQoImRlY29yYXRvcnMiLG8oW2EoIkRlY29yYXRvciIpXSxudWxsKSxyWyJudWxsIl0pO2EoIk9iamVjdFByb3BlcnR5IikuYmFzZXMoIk5vZGUiKS5idWlsZCgia2V5IiwidmFsdWUiKS5maWVsZCgia2V5IixvKGEoIkxpdGVyYWwiKSxhKCJJZGVudGlmaWVyIiksYSgiRXhwcmVzc2lvbiIpKSkuZmllbGQoInZhbHVlIixvKGEoIkV4cHJlc3Npb24iKSxhKCJQYXR0ZXJuIikpKS5maWVsZCgiYWNjZXNzaWJpbGl0eSIsbyhhKCJMaXRlcmFsIiksbnVsbCksclsibnVsbCJdKS5maWVsZCgiY29tcHV0ZWQiLEJvb2xlYW4sclsiZmFsc2UiXSk7dmFyIHU9byhhKCJNZXRob2REZWZpbml0aW9uIiksYSgiVmFyaWFibGVEZWNsYXJhdG9yIiksYSgiQ2xhc3NQcm9wZXJ0eURlZmluaXRpb24iKSxhKCJDbGFzc1Byb3BlcnR5IiksYSgiQ2xhc3NQcml2YXRlUHJvcGVydHkiKSxhKCJDbGFzc01ldGhvZCIpLGEoIkNsYXNzUHJpdmF0ZU1ldGhvZCIpKTthKCJDbGFzc0JvZHkiKS5iYXNlcygiRGVjbGFyYXRpb24iKS5idWlsZCgiYm9keSIpLmZpZWxkKCJib2R5IixbdV0pO2EoIkNsYXNzTWV0aG9kIikuYmFzZXMoIkRlY2xhcmF0aW9uIiwiRnVuY3Rpb24iKS5idWlsZCgia2luZCIsImtleSIsInBhcmFtcyIsImJvZHkiLCJjb21wdXRlZCIsInN0YXRpYyIpLmZpZWxkKCJrZXkiLG8oYSgiTGl0ZXJhbCIpLGEoIklkZW50aWZpZXIiKSxhKCJFeHByZXNzaW9uIikpKTthKCJDbGFzc1ByaXZhdGVNZXRob2QiKS5iYXNlcygiRGVjbGFyYXRpb24iLCJGdW5jdGlvbiIpLmJ1aWxkKCJrZXkiLCJwYXJhbXMiLCJib2R5Iiwia2luZCIsImNvbXB1dGVkIiwic3RhdGljIikuZmllbGQoImtleSIsYSgiUHJpdmF0ZU5hbWUiKSk7WyJDbGFzc01ldGhvZCIsIkNsYXNzUHJpdmF0ZU1ldGhvZCJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2EoZSkuZmllbGQoImtpbmQiLG8oImdldCIsInNldCIsIm1ldGhvZCIsImNvbnN0cnVjdG9yIiksKGZ1bmN0aW9uKCl7cmV0dXJuIm1ldGhvZCJ9KSkuZmllbGQoImJvZHkiLGEoIkJsb2NrU3RhdGVtZW50IikpLmZpZWxkKCJjb21wdXRlZCIsQm9vbGVhbixyWyJmYWxzZSJdKS5maWVsZCgic3RhdGljIixvKEJvb2xlYW4sbnVsbCksclsibnVsbCJdKS5maWVsZCgiYWJzdHJhY3QiLG8oQm9vbGVhbixudWxsKSxyWyJudWxsIl0pLmZpZWxkKCJhY2Nlc3MiLG8oInB1YmxpYyIsInByaXZhdGUiLCJwcm90ZWN0ZWQiLG51bGwpLHJbIm51bGwiXSkuZmllbGQoImFjY2Vzc2liaWxpdHkiLG8oInB1YmxpYyIsInByaXZhdGUiLCJwcm90ZWN0ZWQiLG51bGwpLHJbIm51bGwiXSkuZmllbGQoImRlY29yYXRvcnMiLG8oW2EoIkRlY29yYXRvciIpXSxudWxsKSxyWyJudWxsIl0pLmZpZWxkKCJvcHRpb25hbCIsbyhCb29sZWFuLG51bGwpLHJbIm51bGwiXSl9KSk7dmFyIGM9byhhKCJQcm9wZXJ0eSIpLGEoIlByb3BlcnR5UGF0dGVybiIpLGEoIlNwcmVhZFByb3BlcnR5UGF0dGVybiIpLGEoIlNwcmVhZFByb3BlcnR5IiksYSgiT2JqZWN0UHJvcGVydHkiKSxhKCJSZXN0UHJvcGVydHkiKSk7YSgiT2JqZWN0UGF0dGVybiIpLmJhc2VzKCJQYXR0ZXJuIikuYnVpbGQoInByb3BlcnRpZXMiKS5maWVsZCgicHJvcGVydGllcyIsW2NdKS5maWVsZCgiZGVjb3JhdG9ycyIsbyhbYSgiRGVjb3JhdG9yIildLG51bGwpLHJbIm51bGwiXSk7YSgiU3ByZWFkUHJvcGVydHkiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJhcmd1bWVudCIpLmZpZWxkKCJhcmd1bWVudCIsYSgiRXhwcmVzc2lvbiIpKTthKCJSZXN0UHJvcGVydHkiKS5iYXNlcygiTm9kZSIpLmJ1aWxkKCJhcmd1bWVudCIpLmZpZWxkKCJhcmd1bWVudCIsYSgiRXhwcmVzc2lvbiIpKTthKCJGb3JBd2FpdFN0YXRlbWVudCIpLmJhc2VzKCJTdGF0ZW1lbnQiKS5idWlsZCgibGVmdCIsInJpZ2h0IiwiYm9keSIpLmZpZWxkKCJsZWZ0IixvKGEoIlZhcmlhYmxlRGVjbGFyYXRpb24iKSxhKCJFeHByZXNzaW9uIikpKS5maWVsZCgicmlnaHQiLGEoIkV4cHJlc3Npb24iKSkuZmllbGQoImJvZHkiLGEoIlN0YXRlbWVudCIpKTthKCJJbXBvcnQiKS5iYXNlcygiRXhwcmVzc2lvbiIpLmJ1aWxkKCl9dC5kZWZhdWx0PWE7ZS5leHBvcnRzPXRbImRlZmF1bHQiXX0pKFNlLFNlLmV4cG9ydHMpOyhmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6dHJ1ZX0pO3ZhciByPVI7dmFyIHM9ci5fX2ltcG9ydERlZmF1bHQoU2UuZXhwb3J0cyk7dmFyIGk9ci5fX2ltcG9ydERlZmF1bHQoZ2UuZXhwb3J0cyk7ZnVuY3Rpb24gbihlKXtlLnVzZShzLmRlZmF1bHQpO2UudXNlKGkuZGVmYXVsdCl9dC5kZWZhdWx0PW47ZS5leHBvcnRzPXRbImRlZmF1bHQiXX0pKEVlLEVlLmV4cG9ydHMpO3ZhciBUZT17ZXhwb3J0czp7fX07KGZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTp0cnVlfSk7dmFyIHI9Ujt2YXIgcz1yLl9faW1wb3J0RGVmYXVsdChTZS5leHBvcnRzKTt2YXIgaT1yLl9faW1wb3J0RGVmYXVsdCh2ZS5leHBvcnRzKTt2YXIgbj1yLl9faW1wb3J0RGVmYXVsdCh6KTt2YXIgYT1yLl9faW1wb3J0RGVmYXVsdCh1ZS5leHBvcnRzKTtmdW5jdGlvbiBvKGUpe2UudXNlKHMuZGVmYXVsdCk7ZS51c2UoaS5kZWZhdWx0KTt2YXIgdD1lLnVzZShuLmRlZmF1bHQpO3ZhciByPXQubmFtZWRUeXBlczt2YXIgbz10LlR5cGUuZGVmO3ZhciBsPXQuVHlwZS5vcjt2YXIgdT1lLnVzZShhLmRlZmF1bHQpLmRlZmF1bHRzO3ZhciBjPXQuVHlwZS5mcm9tKChmdW5jdGlvbihlLHQpe2lmKHIuU3RyaW5nTGl0ZXJhbCYmci5TdHJpbmdMaXRlcmFsLmNoZWNrKGUsdCkpe3JldHVybiB0cnVlfWlmKHIuTGl0ZXJhbCYmci5MaXRlcmFsLmNoZWNrKGUsdCkmJnR5cGVvZiBlLnZhbHVlPT09InN0cmluZyIpe3JldHVybiB0cnVlfXJldHVybiBmYWxzZX0pLCJTdHJpbmdMaXRlcmFsIik7bygiVFNUeXBlIikuYmFzZXMoIk5vZGUiKTt2YXIgaD1sKG8oIklkZW50aWZpZXIiKSxvKCJUU1F1YWxpZmllZE5hbWUiKSk7bygiVFNUeXBlUmVmZXJlbmNlIikuYmFzZXMoIlRTVHlwZSIsIlRTSGFzT3B0aW9uYWxUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiIpLmJ1aWxkKCJ0eXBlTmFtZSIsInR5cGVQYXJhbWV0ZXJzIikuZmllbGQoInR5cGVOYW1lIixoKTtvKCJUU0hhc09wdGlvbmFsVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iKS5maWVsZCgidHlwZVBhcmFtZXRlcnMiLGwobygiVFNUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiIpLG51bGwpLHVbIm51bGwiXSk7bygiVFNIYXNPcHRpb25hbFR5cGVQYXJhbWV0ZXJzIikuZmllbGQoInR5cGVQYXJhbWV0ZXJzIixsKG8oIlRTVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uIiksbnVsbCx2b2lkIDApLHVbIm51bGwiXSk7bygiVFNIYXNPcHRpb25hbFR5cGVBbm5vdGF0aW9uIikuZmllbGQoInR5cGVBbm5vdGF0aW9uIixsKG8oIlRTVHlwZUFubm90YXRpb24iKSxudWxsKSx1WyJudWxsIl0pO28oIlRTUXVhbGlmaWVkTmFtZSIpLmJhc2VzKCJOb2RlIikuYnVpbGQoImxlZnQiLCJyaWdodCIpLmZpZWxkKCJsZWZ0IixoKS5maWVsZCgicmlnaHQiLGgpO28oIlRTQXNFeHByZXNzaW9uIikuYmFzZXMoIkV4cHJlc3Npb24iLCJQYXR0ZXJuIikuYnVpbGQoImV4cHJlc3Npb24iLCJ0eXBlQW5ub3RhdGlvbiIpLmZpZWxkKCJleHByZXNzaW9uIixvKCJFeHByZXNzaW9uIikpLmZpZWxkKCJ0eXBlQW5ub3RhdGlvbiIsbygiVFNUeXBlIikpLmZpZWxkKCJleHRyYSIsbCh7cGFyZW50aGVzaXplZDpCb29sZWFufSxudWxsKSx1WyJudWxsIl0pO28oIlRTTm9uTnVsbEV4cHJlc3Npb24iKS5iYXNlcygiRXhwcmVzc2lvbiIsIlBhdHRlcm4iKS5idWlsZCgiZXhwcmVzc2lvbiIpLmZpZWxkKCJleHByZXNzaW9uIixvKCJFeHByZXNzaW9uIikpO1siVFNBbnlLZXl3b3JkIiwiVFNCaWdJbnRLZXl3b3JkIiwiVFNCb29sZWFuS2V5d29yZCIsIlRTTmV2ZXJLZXl3b3JkIiwiVFNOdWxsS2V5d29yZCIsIlRTTnVtYmVyS2V5d29yZCIsIlRTT2JqZWN0S2V5d29yZCIsIlRTU3RyaW5nS2V5d29yZCIsIlRTU3ltYm9sS2V5d29yZCIsIlRTVW5kZWZpbmVkS2V5d29yZCIsIlRTVW5rbm93bktleXdvcmQiLCJUU1ZvaWRLZXl3b3JkIiwiVFNUaGlzVHlwZSJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe28oZSkuYmFzZXMoIlRTVHlwZSIpLmJ1aWxkKCl9KSk7bygiVFNBcnJheVR5cGUiKS5iYXNlcygiVFNUeXBlIikuYnVpbGQoImVsZW1lbnRUeXBlIikuZmllbGQoImVsZW1lbnRUeXBlIixvKCJUU1R5cGUiKSk7bygiVFNMaXRlcmFsVHlwZSIpLmJhc2VzKCJUU1R5cGUiKS5idWlsZCgibGl0ZXJhbCIpLmZpZWxkKCJsaXRlcmFsIixsKG8oIk51bWVyaWNMaXRlcmFsIiksbygiU3RyaW5nTGl0ZXJhbCIpLG8oIkJvb2xlYW5MaXRlcmFsIiksbygiVGVtcGxhdGVMaXRlcmFsIiksbygiVW5hcnlFeHByZXNzaW9uIikpKTtbIlRTVW5pb25UeXBlIiwiVFNJbnRlcnNlY3Rpb25UeXBlIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7byhlKS5iYXNlcygiVFNUeXBlIikuYnVpbGQoInR5cGVzIikuZmllbGQoInR5cGVzIixbbygiVFNUeXBlIildKX0pKTtvKCJUU0NvbmRpdGlvbmFsVHlwZSIpLmJhc2VzKCJUU1R5cGUiKS5idWlsZCgiY2hlY2tUeXBlIiwiZXh0ZW5kc1R5cGUiLCJ0cnVlVHlwZSIsImZhbHNlVHlwZSIpLmZpZWxkKCJjaGVja1R5cGUiLG8oIlRTVHlwZSIpKS5maWVsZCgiZXh0ZW5kc1R5cGUiLG8oIlRTVHlwZSIpKS5maWVsZCgidHJ1ZVR5cGUiLG8oIlRTVHlwZSIpKS5maWVsZCgiZmFsc2VUeXBlIixvKCJUU1R5cGUiKSk7bygiVFNJbmZlclR5cGUiKS5iYXNlcygiVFNUeXBlIikuYnVpbGQoInR5cGVQYXJhbWV0ZXIiKS5maWVsZCgidHlwZVBhcmFtZXRlciIsbygiVFNUeXBlUGFyYW1ldGVyIikpO28oIlRTUGFyZW50aGVzaXplZFR5cGUiKS5iYXNlcygiVFNUeXBlIikuYnVpbGQoInR5cGVBbm5vdGF0aW9uIikuZmllbGQoInR5cGVBbm5vdGF0aW9uIixvKCJUU1R5cGUiKSk7dmFyIHA9W2wobygiSWRlbnRpZmllciIpLG8oIlJlc3RFbGVtZW50IiksbygiQXJyYXlQYXR0ZXJuIiksbygiT2JqZWN0UGF0dGVybiIpKV07WyJUU0Z1bmN0aW9uVHlwZSIsIlRTQ29uc3RydWN0b3JUeXBlIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7byhlKS5iYXNlcygiVFNUeXBlIiwiVFNIYXNPcHRpb25hbFR5cGVQYXJhbWV0ZXJzIiwiVFNIYXNPcHRpb25hbFR5cGVBbm5vdGF0aW9uIikuYnVpbGQoInBhcmFtZXRlcnMiKS5maWVsZCgicGFyYW1ldGVycyIscCl9KSk7bygiVFNEZWNsYXJlRnVuY3Rpb24iKS5iYXNlcygiRGVjbGFyYXRpb24iLCJUU0hhc09wdGlvbmFsVHlwZVBhcmFtZXRlcnMiKS5idWlsZCgiaWQiLCJwYXJhbXMiLCJyZXR1cm5UeXBlIikuZmllbGQoImRlY2xhcmUiLEJvb2xlYW4sdVsiZmFsc2UiXSkuZmllbGQoImFzeW5jIixCb29sZWFuLHVbImZhbHNlIl0pLmZpZWxkKCJnZW5lcmF0b3IiLEJvb2xlYW4sdVsiZmFsc2UiXSkuZmllbGQoImlkIixsKG8oIklkZW50aWZpZXIiKSxudWxsKSx1WyJudWxsIl0pLmZpZWxkKCJwYXJhbXMiLFtvKCJQYXR0ZXJuIildKS5maWVsZCgicmV0dXJuVHlwZSIsbChvKCJUU1R5cGVBbm5vdGF0aW9uIiksbygiTm9vcCIpLG51bGwpLHVbIm51bGwiXSk7bygiVFNEZWNsYXJlTWV0aG9kIikuYmFzZXMoIkRlY2xhcmF0aW9uIiwiVFNIYXNPcHRpb25hbFR5cGVQYXJhbWV0ZXJzIikuYnVpbGQoImtleSIsInBhcmFtcyIsInJldHVyblR5cGUiKS5maWVsZCgiYXN5bmMiLEJvb2xlYW4sdVsiZmFsc2UiXSkuZmllbGQoImdlbmVyYXRvciIsQm9vbGVhbix1WyJmYWxzZSJdKS5maWVsZCgicGFyYW1zIixbbygiUGF0dGVybiIpXSkuZmllbGQoImFic3RyYWN0IixCb29sZWFuLHVbImZhbHNlIl0pLmZpZWxkKCJhY2Nlc3NpYmlsaXR5IixsKCJwdWJsaWMiLCJwcml2YXRlIiwicHJvdGVjdGVkIix2b2lkIDApLHVbInVuZGVmaW5lZCJdKS5maWVsZCgic3RhdGljIixCb29sZWFuLHVbImZhbHNlIl0pLmZpZWxkKCJjb21wdXRlZCIsQm9vbGVhbix1WyJmYWxzZSJdKS5maWVsZCgib3B0aW9uYWwiLEJvb2xlYW4sdVsiZmFsc2UiXSkuZmllbGQoImtleSIsbChvKCJJZGVudGlmaWVyIiksbygiU3RyaW5nTGl0ZXJhbCIpLG8oIk51bWVyaWNMaXRlcmFsIiksbygiRXhwcmVzc2lvbiIpKSkuZmllbGQoImtpbmQiLGwoImdldCIsInNldCIsIm1ldGhvZCIsImNvbnN0cnVjdG9yIiksKGZ1bmN0aW9uIGUoKXtyZXR1cm4ibWV0aG9kIn0pKS5maWVsZCgiYWNjZXNzIixsKCJwdWJsaWMiLCJwcml2YXRlIiwicHJvdGVjdGVkIix2b2lkIDApLHVbInVuZGVmaW5lZCJdKS5maWVsZCgiZGVjb3JhdG9ycyIsbChbbygiRGVjb3JhdG9yIildLG51bGwpLHVbIm51bGwiXSkuZmllbGQoInJldHVyblR5cGUiLGwobygiVFNUeXBlQW5ub3RhdGlvbiIpLG8oIk5vb3AiKSxudWxsKSx1WyJudWxsIl0pO28oIlRTTWFwcGVkVHlwZSIpLmJhc2VzKCJUU1R5cGUiKS5idWlsZCgidHlwZVBhcmFtZXRlciIsInR5cGVBbm5vdGF0aW9uIikuZmllbGQoInJlYWRvbmx5IixsKEJvb2xlYW4sIisiLCItIiksdVsiZmFsc2UiXSkuZmllbGQoInR5cGVQYXJhbWV0ZXIiLG8oIlRTVHlwZVBhcmFtZXRlciIpKS5maWVsZCgib3B0aW9uYWwiLGwoQm9vbGVhbiwiKyIsIi0iKSx1WyJmYWxzZSJdKS5maWVsZCgidHlwZUFubm90YXRpb24iLGwobygiVFNUeXBlIiksbnVsbCksdVsibnVsbCJdKTtvKCJUU1R1cGxlVHlwZSIpLmJhc2VzKCJUU1R5cGUiKS5idWlsZCgiZWxlbWVudFR5cGVzIikuZmllbGQoImVsZW1lbnRUeXBlcyIsW2wobygiVFNUeXBlIiksbygiVFNOYW1lZFR1cGxlTWVtYmVyIikpXSk7bygiVFNOYW1lZFR1cGxlTWVtYmVyIikuYmFzZXMoIlRTVHlwZSIpLmJ1aWxkKCJsYWJlbCIsImVsZW1lbnRUeXBlIiwib3B0aW9uYWwiKS5maWVsZCgibGFiZWwiLG8oIklkZW50aWZpZXIiKSkuZmllbGQoIm9wdGlvbmFsIixCb29sZWFuLHVbImZhbHNlIl0pLmZpZWxkKCJlbGVtZW50VHlwZSIsbygiVFNUeXBlIikpO28oIlRTUmVzdFR5cGUiKS5iYXNlcygiVFNUeXBlIikuYnVpbGQoInR5cGVBbm5vdGF0aW9uIikuZmllbGQoInR5cGVBbm5vdGF0aW9uIixvKCJUU1R5cGUiKSk7bygiVFNPcHRpb25hbFR5cGUiKS5iYXNlcygiVFNUeXBlIikuYnVpbGQoInR5cGVBbm5vdGF0aW9uIikuZmllbGQoInR5cGVBbm5vdGF0aW9uIixvKCJUU1R5cGUiKSk7bygiVFNJbmRleGVkQWNjZXNzVHlwZSIpLmJhc2VzKCJUU1R5cGUiKS5idWlsZCgib2JqZWN0VHlwZSIsImluZGV4VHlwZSIpLmZpZWxkKCJvYmplY3RUeXBlIixvKCJUU1R5cGUiKSkuZmllbGQoImluZGV4VHlwZSIsbygiVFNUeXBlIikpO28oIlRTVHlwZU9wZXJhdG9yIikuYmFzZXMoIlRTVHlwZSIpLmJ1aWxkKCJvcGVyYXRvciIpLmZpZWxkKCJvcGVyYXRvciIsU3RyaW5nKS5maWVsZCgidHlwZUFubm90YXRpb24iLG8oIlRTVHlwZSIpKTtvKCJUU1R5cGVBbm5vdGF0aW9uIikuYmFzZXMoIk5vZGUiKS5idWlsZCgidHlwZUFubm90YXRpb24iKS5maWVsZCgidHlwZUFubm90YXRpb24iLGwobygiVFNUeXBlIiksbygiVFNUeXBlQW5ub3RhdGlvbiIpKSk7bygiVFNJbmRleFNpZ25hdHVyZSIpLmJhc2VzKCJEZWNsYXJhdGlvbiIsIlRTSGFzT3B0aW9uYWxUeXBlQW5ub3RhdGlvbiIpLmJ1aWxkKCJwYXJhbWV0ZXJzIiwidHlwZUFubm90YXRpb24iKS5maWVsZCgicGFyYW1ldGVycyIsW28oIklkZW50aWZpZXIiKV0pLmZpZWxkKCJyZWFkb25seSIsQm9vbGVhbix1WyJmYWxzZSJdKTtvKCJUU1Byb3BlcnR5U2lnbmF0dXJlIikuYmFzZXMoIkRlY2xhcmF0aW9uIiwiVFNIYXNPcHRpb25hbFR5cGVBbm5vdGF0aW9uIikuYnVpbGQoImtleSIsInR5cGVBbm5vdGF0aW9uIiwib3B0aW9uYWwiKS5maWVsZCgia2V5IixvKCJFeHByZXNzaW9uIikpLmZpZWxkKCJjb21wdXRlZCIsQm9vbGVhbix1WyJmYWxzZSJdKS5maWVsZCgicmVhZG9ubHkiLEJvb2xlYW4sdVsiZmFsc2UiXSkuZmllbGQoIm9wdGlvbmFsIixCb29sZWFuLHVbImZhbHNlIl0pLmZpZWxkKCJpbml0aWFsaXplciIsbChvKCJFeHByZXNzaW9uIiksbnVsbCksdVsibnVsbCJdKTtvKCJUU01ldGhvZFNpZ25hdHVyZSIpLmJhc2VzKCJEZWNsYXJhdGlvbiIsIlRTSGFzT3B0aW9uYWxUeXBlUGFyYW1ldGVycyIsIlRTSGFzT3B0aW9uYWxUeXBlQW5ub3RhdGlvbiIpLmJ1aWxkKCJrZXkiLCJwYXJhbWV0ZXJzIiwidHlwZUFubm90YXRpb24iKS5maWVsZCgia2V5IixvKCJFeHByZXNzaW9uIikpLmZpZWxkKCJjb21wdXRlZCIsQm9vbGVhbix1WyJmYWxzZSJdKS5maWVsZCgib3B0aW9uYWwiLEJvb2xlYW4sdVsiZmFsc2UiXSkuZmllbGQoInBhcmFtZXRlcnMiLHApO28oIlRTVHlwZVByZWRpY2F0ZSIpLmJhc2VzKCJUU1R5cGVBbm5vdGF0aW9uIiwiVFNUeXBlIikuYnVpbGQoInBhcmFtZXRlck5hbWUiLCJ0eXBlQW5ub3RhdGlvbiIsImFzc2VydHMiKS5maWVsZCgicGFyYW1ldGVyTmFtZSIsbChvKCJJZGVudGlmaWVyIiksbygiVFNUaGlzVHlwZSIpKSkuZmllbGQoInR5cGVBbm5vdGF0aW9uIixsKG8oIlRTVHlwZUFubm90YXRpb24iKSxudWxsKSx1WyJudWxsIl0pLmZpZWxkKCJhc3NlcnRzIixCb29sZWFuLHVbImZhbHNlIl0pO1siVFNDYWxsU2lnbmF0dXJlRGVjbGFyYXRpb24iLCJUU0NvbnN0cnVjdFNpZ25hdHVyZURlY2xhcmF0aW9uIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7byhlKS5iYXNlcygiRGVjbGFyYXRpb24iLCJUU0hhc09wdGlvbmFsVHlwZVBhcmFtZXRlcnMiLCJUU0hhc09wdGlvbmFsVHlwZUFubm90YXRpb24iKS5idWlsZCgicGFyYW1ldGVycyIsInR5cGVBbm5vdGF0aW9uIikuZmllbGQoInBhcmFtZXRlcnMiLHApfSkpO28oIlRTRW51bU1lbWJlciIpLmJhc2VzKCJOb2RlIikuYnVpbGQoImlkIiwiaW5pdGlhbGl6ZXIiKS5maWVsZCgiaWQiLGwobygiSWRlbnRpZmllciIpLGMpKS5maWVsZCgiaW5pdGlhbGl6ZXIiLGwobygiRXhwcmVzc2lvbiIpLG51bGwpLHVbIm51bGwiXSk7bygiVFNUeXBlUXVlcnkiKS5iYXNlcygiVFNUeXBlIikuYnVpbGQoImV4cHJOYW1lIikuZmllbGQoImV4cHJOYW1lIixsKGgsbygiVFNJbXBvcnRUeXBlIikpKTt2YXIgZj1sKG8oIlRTQ2FsbFNpZ25hdHVyZURlY2xhcmF0aW9uIiksbygiVFNDb25zdHJ1Y3RTaWduYXR1cmVEZWNsYXJhdGlvbiIpLG8oIlRTSW5kZXhTaWduYXR1cmUiKSxvKCJUU01ldGhvZFNpZ25hdHVyZSIpLG8oIlRTUHJvcGVydHlTaWduYXR1cmUiKSk7bygiVFNUeXBlTGl0ZXJhbCIpLmJhc2VzKCJUU1R5cGUiKS5idWlsZCgibWVtYmVycyIpLmZpZWxkKCJtZW1iZXJzIixbZl0pO28oIlRTVHlwZVBhcmFtZXRlciIpLmJhc2VzKCJJZGVudGlmaWVyIikuYnVpbGQoIm5hbWUiLCJjb25zdHJhaW50IiwiZGVmYXVsdCIpLmZpZWxkKCJuYW1lIixTdHJpbmcpLmZpZWxkKCJjb25zdHJhaW50IixsKG8oIlRTVHlwZSIpLHZvaWQgMCksdVsidW5kZWZpbmVkIl0pLmZpZWxkKCJkZWZhdWx0IixsKG8oIlRTVHlwZSIpLHZvaWQgMCksdVsidW5kZWZpbmVkIl0pO28oIlRTVHlwZUFzc2VydGlvbiIpLmJhc2VzKCJFeHByZXNzaW9uIiwiUGF0dGVybiIpLmJ1aWxkKCJ0eXBlQW5ub3RhdGlvbiIsImV4cHJlc3Npb24iKS5maWVsZCgidHlwZUFubm90YXRpb24iLG8oIlRTVHlwZSIpKS5maWVsZCgiZXhwcmVzc2lvbiIsbygiRXhwcmVzc2lvbiIpKS5maWVsZCgiZXh0cmEiLGwoe3BhcmVudGhlc2l6ZWQ6Qm9vbGVhbn0sbnVsbCksdVsibnVsbCJdKTtvKCJUU1R5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbiIpLmJhc2VzKCJEZWNsYXJhdGlvbiIpLmJ1aWxkKCJwYXJhbXMiKS5maWVsZCgicGFyYW1zIixbbygiVFNUeXBlUGFyYW1ldGVyIildKTtvKCJUU1R5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIikuYmFzZXMoIk5vZGUiKS5idWlsZCgicGFyYW1zIikuZmllbGQoInBhcmFtcyIsW28oIlRTVHlwZSIpXSk7bygiVFNFbnVtRGVjbGFyYXRpb24iKS5iYXNlcygiRGVjbGFyYXRpb24iKS5idWlsZCgiaWQiLCJtZW1iZXJzIikuZmllbGQoImlkIixvKCJJZGVudGlmaWVyIikpLmZpZWxkKCJjb25zdCIsQm9vbGVhbix1WyJmYWxzZSJdKS5maWVsZCgiZGVjbGFyZSIsQm9vbGVhbix1WyJmYWxzZSJdKS5maWVsZCgibWVtYmVycyIsW28oIlRTRW51bU1lbWJlciIpXSkuZmllbGQoImluaXRpYWxpemVyIixsKG8oIkV4cHJlc3Npb24iKSxudWxsKSx1WyJudWxsIl0pO28oIlRTVHlwZUFsaWFzRGVjbGFyYXRpb24iKS5iYXNlcygiRGVjbGFyYXRpb24iLCJUU0hhc09wdGlvbmFsVHlwZVBhcmFtZXRlcnMiKS5idWlsZCgiaWQiLCJ0eXBlQW5ub3RhdGlvbiIpLmZpZWxkKCJpZCIsbygiSWRlbnRpZmllciIpKS5maWVsZCgiZGVjbGFyZSIsQm9vbGVhbix1WyJmYWxzZSJdKS5maWVsZCgidHlwZUFubm90YXRpb24iLG8oIlRTVHlwZSIpKTtvKCJUU01vZHVsZUJsb2NrIikuYmFzZXMoIk5vZGUiKS5idWlsZCgiYm9keSIpLmZpZWxkKCJib2R5IixbbygiU3RhdGVtZW50IildKTtvKCJUU01vZHVsZURlY2xhcmF0aW9uIikuYmFzZXMoIkRlY2xhcmF0aW9uIikuYnVpbGQoImlkIiwiYm9keSIpLmZpZWxkKCJpZCIsbChjLGgpKS5maWVsZCgiZGVjbGFyZSIsQm9vbGVhbix1WyJmYWxzZSJdKS5maWVsZCgiZ2xvYmFsIixCb29sZWFuLHVbImZhbHNlIl0pLmZpZWxkKCJib2R5IixsKG8oIlRTTW9kdWxlQmxvY2siKSxvKCJUU01vZHVsZURlY2xhcmF0aW9uIiksbnVsbCksdVsibnVsbCJdKTtvKCJUU0ltcG9ydFR5cGUiKS5iYXNlcygiVFNUeXBlIiwiVFNIYXNPcHRpb25hbFR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIikuYnVpbGQoImFyZ3VtZW50IiwicXVhbGlmaWVyIiwidHlwZVBhcmFtZXRlcnMiKS5maWVsZCgiYXJndW1lbnQiLGMpLmZpZWxkKCJxdWFsaWZpZXIiLGwoaCx2b2lkIDApLHVbInVuZGVmaW5lZCJdKTtvKCJUU0ltcG9ydEVxdWFsc0RlY2xhcmF0aW9uIikuYmFzZXMoIkRlY2xhcmF0aW9uIikuYnVpbGQoImlkIiwibW9kdWxlUmVmZXJlbmNlIikuZmllbGQoImlkIixvKCJJZGVudGlmaWVyIikpLmZpZWxkKCJpc0V4cG9ydCIsQm9vbGVhbix1WyJmYWxzZSJdKS5maWVsZCgibW9kdWxlUmVmZXJlbmNlIixsKGgsbygiVFNFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZSIpKSk7bygiVFNFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZSIpLmJhc2VzKCJEZWNsYXJhdGlvbiIpLmJ1aWxkKCJleHByZXNzaW9uIikuZmllbGQoImV4cHJlc3Npb24iLGMpO28oIlRTRXhwb3J0QXNzaWdubWVudCIpLmJhc2VzKCJTdGF0ZW1lbnQiKS5idWlsZCgiZXhwcmVzc2lvbiIpLmZpZWxkKCJleHByZXNzaW9uIixvKCJFeHByZXNzaW9uIikpO28oIlRTTmFtZXNwYWNlRXhwb3J0RGVjbGFyYXRpb24iKS5iYXNlcygiRGVjbGFyYXRpb24iKS5idWlsZCgiaWQiKS5maWVsZCgiaWQiLG8oIklkZW50aWZpZXIiKSk7bygiVFNJbnRlcmZhY2VCb2R5IikuYmFzZXMoIk5vZGUiKS5idWlsZCgiYm9keSIpLmZpZWxkKCJib2R5IixbZl0pO28oIlRTRXhwcmVzc2lvbldpdGhUeXBlQXJndW1lbnRzIikuYmFzZXMoIlRTVHlwZSIsIlRTSGFzT3B0aW9uYWxUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiIpLmJ1aWxkKCJleHByZXNzaW9uIiwidHlwZVBhcmFtZXRlcnMiKS5maWVsZCgiZXhwcmVzc2lvbiIsaCk7bygiVFNJbnRlcmZhY2VEZWNsYXJhdGlvbiIpLmJhc2VzKCJEZWNsYXJhdGlvbiIsIlRTSGFzT3B0aW9uYWxUeXBlUGFyYW1ldGVycyIpLmJ1aWxkKCJpZCIsImJvZHkiKS5maWVsZCgiaWQiLGgpLmZpZWxkKCJkZWNsYXJlIixCb29sZWFuLHVbImZhbHNlIl0pLmZpZWxkKCJleHRlbmRzIixsKFtvKCJUU0V4cHJlc3Npb25XaXRoVHlwZUFyZ3VtZW50cyIpXSxudWxsKSx1WyJudWxsIl0pLmZpZWxkKCJib2R5IixvKCJUU0ludGVyZmFjZUJvZHkiKSk7bygiVFNQYXJhbWV0ZXJQcm9wZXJ0eSIpLmJhc2VzKCJQYXR0ZXJuIikuYnVpbGQoInBhcmFtZXRlciIpLmZpZWxkKCJhY2Nlc3NpYmlsaXR5IixsKCJwdWJsaWMiLCJwcml2YXRlIiwicHJvdGVjdGVkIix2b2lkIDApLHVbInVuZGVmaW5lZCJdKS5maWVsZCgicmVhZG9ubHkiLEJvb2xlYW4sdVsiZmFsc2UiXSkuZmllbGQoInBhcmFtZXRlciIsbChvKCJJZGVudGlmaWVyIiksbygiQXNzaWdubWVudFBhdHRlcm4iKSkpO28oIkNsYXNzUHJvcGVydHkiKS5maWVsZCgiYWNjZXNzIixsKCJwdWJsaWMiLCJwcml2YXRlIiwicHJvdGVjdGVkIix2b2lkIDApLHVbInVuZGVmaW5lZCJdKTtvKCJDbGFzc0JvZHkiKS5maWVsZCgiYm9keSIsW2wobygiTWV0aG9kRGVmaW5pdGlvbiIpLG8oIlZhcmlhYmxlRGVjbGFyYXRvciIpLG8oIkNsYXNzUHJvcGVydHlEZWZpbml0aW9uIiksbygiQ2xhc3NQcm9wZXJ0eSIpLG8oIkNsYXNzUHJpdmF0ZVByb3BlcnR5IiksbygiQ2xhc3NNZXRob2QiKSxvKCJDbGFzc1ByaXZhdGVNZXRob2QiKSxvKCJUU0RlY2xhcmVNZXRob2QiKSxmKV0pfXQuZGVmYXVsdD1vO2UuZXhwb3J0cz10WyJkZWZhdWx0Il19KShUZSxUZS5leHBvcnRzKTt2YXIgQWU9e307KGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6dHJ1ZX0pO2UubmFtZWRUeXBlcz12b2lkIDA7KGZ1bmN0aW9uKGUpe30pKGUubmFtZWRUeXBlc3x8KGUubmFtZWRUeXBlcz17fSkpfSkoQWUpOyhmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTtlLnZpc2l0PWUudXNlPWUuVHlwZT1lLnNvbWVGaWVsZD1lLlBhdGhWaXNpdG9yPWUuUGF0aD1lLk5vZGVQYXRoPWUubmFtZWRUeXBlcz1lLmdldFN1cGVydHlwZU5hbWVzPWUuZ2V0RmllbGRWYWx1ZT1lLmdldEZpZWxkTmFtZXM9ZS5nZXRCdWlsZGVyTmFtZT1lLmZpbmFsaXplPWUuZWFjaEZpZWxkPWUuZGVmaW5lTWV0aG9kPWUuYnVpbHRJblR5cGVzPWUuYnVpbGRlcnM9ZS5hc3ROb2Rlc0FyZUVxdWl2YWxlbnQ9dm9pZCAwO3ZhciB0PVI7dmFyIHI9dC5fX2ltcG9ydERlZmF1bHQoVS5leHBvcnRzKTt2YXIgcz10Ll9faW1wb3J0RGVmYXVsdChvZS5leHBvcnRzKTt2YXIgaT10Ll9faW1wb3J0RGVmYXVsdChjZS5leHBvcnRzKTt2YXIgbj10Ll9faW1wb3J0RGVmYXVsdChoZS5leHBvcnRzKTt2YXIgYT10Ll9faW1wb3J0RGVmYXVsdChwZS5leHBvcnRzKTt2YXIgbz10Ll9faW1wb3J0RGVmYXVsdChmZS5leHBvcnRzKTt2YXIgbD10Ll9faW1wb3J0RGVmYXVsdChkZS5leHBvcnRzKTt2YXIgdT10Ll9faW1wb3J0RGVmYXVsdChtZS5leHBvcnRzKTt2YXIgYz10Ll9faW1wb3J0RGVmYXVsdCh5ZS5leHBvcnRzKTt2YXIgaD10Ll9faW1wb3J0RGVmYXVsdChnZS5leHBvcnRzKTt2YXIgcD10Ll9faW1wb3J0RGVmYXVsdChiZS5leHBvcnRzKTt2YXIgZj10Ll9faW1wb3J0RGVmYXVsdChFZS5leHBvcnRzKTt2YXIgZD10Ll9faW1wb3J0RGVmYXVsdChUZS5leHBvcnRzKTt2YXIgbT10Ll9faW1wb3J0RGVmYXVsdCh4ZS5leHBvcnRzKTt2YXIgeT1BZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibmFtZWRUeXBlcyIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24gZSgpe3JldHVybiB5Lm5hbWVkVHlwZXN9fSk7dmFyIGc9ci5kZWZhdWx0KFtzLmRlZmF1bHQsaS5kZWZhdWx0LG4uZGVmYXVsdCxhLmRlZmF1bHQsby5kZWZhdWx0LGwuZGVmYXVsdCx1LmRlZmF1bHQsYy5kZWZhdWx0LGguZGVmYXVsdCxwLmRlZmF1bHQsZi5kZWZhdWx0LGQuZGVmYXVsdCxtLmRlZmF1bHRdKSx4PWcuYXN0Tm9kZXNBcmVFcXVpdmFsZW50LHY9Zy5idWlsZGVycyxiPWcuYnVpbHRJblR5cGVzLEU9Zy5kZWZpbmVNZXRob2QsUz1nLmVhY2hGaWVsZCxUPWcuZmluYWxpemUsQT1nLmdldEJ1aWxkZXJOYW1lLHc9Zy5nZXRGaWVsZE5hbWVzLEM9Zy5nZXRGaWVsZFZhbHVlLFA9Zy5nZXRTdXBlcnR5cGVOYW1lcyxEPWcubmFtZWRUeXBlcyxrPWcuTm9kZVBhdGgsTj1nLlBhdGgsST1nLlBhdGhWaXNpdG9yLEY9Zy5zb21lRmllbGQsTT1nLlR5cGUsXz1nLnVzZSxPPWcudmlzaXQ7ZS5hc3ROb2Rlc0FyZUVxdWl2YWxlbnQ9eDtlLmJ1aWxkZXJzPXY7ZS5idWlsdEluVHlwZXM9YjtlLmRlZmluZU1ldGhvZD1FO2UuZWFjaEZpZWxkPVM7ZS5maW5hbGl6ZT1UO2UuZ2V0QnVpbGRlck5hbWU9QTtlLmdldEZpZWxkTmFtZXM9dztlLmdldEZpZWxkVmFsdWU9QztlLmdldFN1cGVydHlwZU5hbWVzPVA7ZS5Ob2RlUGF0aD1rO2UuUGF0aD1OO2UuUGF0aFZpc2l0b3I9STtlLnNvbWVGaWVsZD1GO2UuVHlwZT1NO2UudXNlPV87ZS52aXNpdD1PO09iamVjdC5hc3NpZ24oeS5uYW1lZFR5cGVzLEQpfSkoaik7dmFyIHdlPXt9OwovKiEKICAJICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuCiAgCSAqCiAgCSAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPgogIAkgKiBAbGljZW5zZSAgTUlUCiAgCSAqL2Z1bmN0aW9uIENlKGUpe3JldHVybiBlIT1udWxsJiYoISFlLl9pc0J1ZmZlcnx8UGUoZSl8fERlKGUpKX1mdW5jdGlvbiBQZShlKXtyZXR1cm4hIWUuY29uc3RydWN0b3ImJnR5cGVvZiBlLmNvbnN0cnVjdG9yLmlzQnVmZmVyPT09ImZ1bmN0aW9uIiYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX1mdW5jdGlvbiBEZShlKXtyZXR1cm4gdHlwZW9mIGUucmVhZEZsb2F0TEU9PT0iZnVuY3Rpb24iJiZ0eXBlb2YgZS5zbGljZT09PSJmdW5jdGlvbiImJlBlKGUuc2xpY2UoMCwwKSl9dmFyIGtlPXQucGVyZm9ybWFuY2V8fHt9O2tlLm5vd3x8a2UubW96Tm93fHxrZS5tc05vd3x8a2Uub05vd3x8a2Uud2Via2l0Tm93fHxmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfTt2YXIgTmU7aWYodHlwZW9mIE9iamVjdC5jcmVhdGU9PT0iZnVuY3Rpb24iKXtOZT1mdW5jdGlvbiBlKHQscil7dC5zdXBlcl89cjt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHIucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9fSl9fWVsc2V7TmU9ZnVuY3Rpb24gZSh0LHIpe3Quc3VwZXJfPXI7dmFyIHM9ZnVuY3Rpb24gZSgpe307cy5wcm90b3R5cGU9ci5wcm90b3R5cGU7dC5wcm90b3R5cGU9bmV3IHM7dC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH19dmFyIEllPU5lO2Z1bmN0aW9uIEZlKGUsdCl7dmFyIHI9e3NlZW46W10sc3R5bGl6ZTpfZX07aWYoYXJndW1lbnRzLmxlbmd0aD49MylyLmRlcHRoPWFyZ3VtZW50c1syXTtpZihhcmd1bWVudHMubGVuZ3RoPj00KXIuY29sb3JzPWFyZ3VtZW50c1szXTtpZihxZSh0KSl7ci5zaG93SGlkZGVuPXR9ZWxzZSBpZih0KXt0dChyLHQpfWlmKEhlKHIuc2hvd0hpZGRlbikpci5zaG93SGlkZGVuPWZhbHNlO2lmKEhlKHIuZGVwdGgpKXIuZGVwdGg9MjtpZihIZShyLmNvbG9ycykpci5jb2xvcnM9ZmFsc2U7aWYoSGUoci5jdXN0b21JbnNwZWN0KSlyLmN1c3RvbUluc3BlY3Q9dHJ1ZTtpZihyLmNvbG9ycylyLnN0eWxpemU9TWU7cmV0dXJuIExlKHIsZSxyLmRlcHRoKX1GZS5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19O0ZlLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9O2Z1bmN0aW9uIE1lKGUsdCl7dmFyIHI9RmUuc3R5bGVzW3RdO2lmKHIpe3JldHVybiIbWyIrRmUuY29sb3JzW3JdWzBdKyJtIitlKyIbWyIrRmUuY29sb3JzW3JdWzFdKyJtIn1lbHNle3JldHVybiBlfX1mdW5jdGlvbiBfZShlLHQpe3JldHVybiBlfWZ1bmN0aW9uIE9lKGUpe3ZhciB0PXt9O2UuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXt0W2VdPXRydWV9KSk7cmV0dXJuIHR9ZnVuY3Rpb24gTGUoZSx0LHIpe2lmKGUuY3VzdG9tSW5zcGVjdCYmdCYmUWUodC5pbnNwZWN0KSYmdC5pbnNwZWN0IT09RmUmJiEodC5jb25zdHJ1Y3RvciYmdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGU9PT10KSl7dmFyIHM9dC5pbnNwZWN0KHIsZSk7aWYoIUplKHMpKXtzPUxlKGUscyxyKX1yZXR1cm4gc312YXIgaT1CZShlLHQpO2lmKGkpe3JldHVybiBpfXZhciBuPU9iamVjdC5rZXlzKHQpO3ZhciBhPU9lKG4pO2lmKGUuc2hvd0hpZGRlbil7bj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KX1pZihZZSh0KSYmKG4uaW5kZXhPZigibWVzc2FnZSIpPj0wfHxuLmluZGV4T2YoImRlc2NyaXB0aW9uIik+PTApKXtyZXR1cm4gUmUodCl9aWYobi5sZW5ndGg9PT0wKXtpZihRZSh0KSl7dmFyIG89dC5uYW1lPyI6ICIrdC5uYW1lOiIiO3JldHVybiBlLnN0eWxpemUoIltGdW5jdGlvbiIrbysiXSIsInNwZWNpYWwiKX1pZihXZSh0KSl7cmV0dXJuIGUuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCksInJlZ2V4cCIpfWlmKCRlKHQpKXtyZXR1cm4gZS5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCksImRhdGUiKX1pZihZZSh0KSl7cmV0dXJuIFJlKHQpfX12YXIgbD0iIix1PWZhbHNlLGM9WyJ7IiwifSJdO2lmKFZlKHQpKXt1PXRydWU7Yz1bIlsiLCJdIl19aWYoUWUodCkpe3ZhciBoPXQubmFtZT8iOiAiK3QubmFtZToiIjtsPSIgW0Z1bmN0aW9uIitoKyJdIn1pZihXZSh0KSl7bD0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWlmKCRlKHQpKXtsPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHQpfWlmKFllKHQpKXtsPSIgIitSZSh0KX1pZihuLmxlbmd0aD09PTAmJighdXx8dC5sZW5ndGg9PTApKXtyZXR1cm4gY1swXStsK2NbMV19aWYocjwwKXtpZihXZSh0KSl7cmV0dXJuIGUuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCksInJlZ2V4cCIpfWVsc2V7cmV0dXJuIGUuc3R5bGl6ZSgiW09iamVjdF0iLCJzcGVjaWFsIil9fWUuc2Vlbi5wdXNoKHQpO3ZhciBwO2lmKHUpe3A9amUoZSx0LHIsYSxuKX1lbHNle3A9bi5tYXAoKGZ1bmN0aW9uKHMpe3JldHVybiBVZShlLHQscixhLHMsdSl9KSl9ZS5zZWVuLnBvcCgpO3JldHVybiB6ZShwLGwsYyl9ZnVuY3Rpb24gQmUoZSx0KXtpZihIZSh0KSlyZXR1cm4gZS5zdHlsaXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZihKZSh0KSl7dmFyIHI9IiciK0pTT04uc3RyaW5naWZ5KHQpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIGUuc3R5bGl6ZShyLCJzdHJpbmciKX1pZihYZSh0KSlyZXR1cm4gZS5zdHlsaXplKCIiK3QsIm51bWJlciIpO2lmKHFlKHQpKXJldHVybiBlLnN0eWxpemUoIiIrdCwiYm9vbGVhbiIpO2lmKEdlKHQpKXJldHVybiBlLnN0eWxpemUoIm51bGwiLCJudWxsIil9ZnVuY3Rpb24gUmUoZSl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKyJdIn1mdW5jdGlvbiBqZShlLHQscixzLGkpe3ZhciBuPVtdO2Zvcih2YXIgYT0wLG89dC5sZW5ndGg7YTxvOysrYSl7aWYocnQodCxTdHJpbmcoYSkpKXtuLnB1c2goVWUoZSx0LHIscyxTdHJpbmcoYSksdHJ1ZSkpfWVsc2V7bi5wdXNoKCIiKX19aS5mb3JFYWNoKChmdW5jdGlvbihpKXtpZighaS5tYXRjaCgvXlxkKyQvKSl7bi5wdXNoKFVlKGUsdCxyLHMsaSx0cnVlKSl9fSkpO3JldHVybiBufWZ1bmN0aW9uIFVlKGUsdCxyLHMsaSxuKXt2YXIgYSxvLGw7bD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsaSl8fHt2YWx1ZTp0W2ldfTtpZihsLmdldCl7aWYobC5zZXQpe289ZS5zdHlsaXplKCJbR2V0dGVyL1NldHRlcl0iLCJzcGVjaWFsIil9ZWxzZXtvPWUuc3R5bGl6ZSgiW0dldHRlcl0iLCJzcGVjaWFsIil9fWVsc2V7aWYobC5zZXQpe289ZS5zdHlsaXplKCJbU2V0dGVyXSIsInNwZWNpYWwiKX19aWYoIXJ0KHMsaSkpe2E9IlsiK2krIl0ifWlmKCFvKXtpZihlLnNlZW4uaW5kZXhPZihsLnZhbHVlKTwwKXtpZihHZShyKSl7bz1MZShlLGwudmFsdWUsbnVsbCl9ZWxzZXtvPUxlKGUsbC52YWx1ZSxyLTEpfWlmKG8uaW5kZXhPZigiXG4iKT4tMSl7aWYobil7bz1vLnNwbGl0KCJcbiIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIiAgIitlfSkpLmpvaW4oIlxuIikuc3Vic3RyKDIpfWVsc2V7bz0iXG4iK28uc3BsaXQoIlxuIikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4iICAgIitlfSkpLmpvaW4oIlxuIil9fX1lbHNle289ZS5zdHlsaXplKCJbQ2lyY3VsYXJdIiwic3BlY2lhbCIpfX1pZihIZShhKSl7aWYobiYmaS5tYXRjaCgvXlxkKyQvKSl7cmV0dXJuIG99YT1KU09OLnN0cmluZ2lmeSgiIitpKTtpZihhLm1hdGNoKC9eIihbYS16QS1aX11bYS16QS1aXzAtOV0qKSIkLykpe2E9YS5zdWJzdHIoMSxhLmxlbmd0aC0yKTthPWUuc3R5bGl6ZShhLCJuYW1lIil9ZWxzZXthPWEucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpLnJlcGxhY2UoLyheInwiJCkvZywiJyIpO2E9ZS5zdHlsaXplKGEsInN0cmluZyIpfX1yZXR1cm4gYSsiOiAiK299ZnVuY3Rpb24gemUoZSx0LHIpe3ZhciBzPWUucmVkdWNlKChmdW5jdGlvbihlLHQpe2lmKHQuaW5kZXhPZigiXG4iKT49MCk7cmV0dXJuIGUrdC5yZXBsYWNlKC9cdTAwMWJcW1xkXGQ/bS9nLCIiKS5sZW5ndGgrMX0pLDApO2lmKHM+NjApe3JldHVybiByWzBdKyh0PT09IiI/IiI6dCsiXG4gIikrIiAiK2Uuam9pbigiLFxuICAiKSsiICIrclsxXX1yZXR1cm4gclswXSt0KyIgIitlLmpvaW4oIiwgIikrIiAiK3JbMV19ZnVuY3Rpb24gVmUoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gcWUoZSl7cmV0dXJuIHR5cGVvZiBlPT09ImJvb2xlYW4ifWZ1bmN0aW9uIEdlKGUpe3JldHVybiBlPT09bnVsbH1mdW5jdGlvbiBYZShlKXtyZXR1cm4gdHlwZW9mIGU9PT0ibnVtYmVyIn1mdW5jdGlvbiBKZShlKXtyZXR1cm4gdHlwZW9mIGU9PT0ic3RyaW5nIn1mdW5jdGlvbiBIZShlKXtyZXR1cm4gZT09PXZvaWQgMH1mdW5jdGlvbiBXZShlKXtyZXR1cm4gS2UoZSkmJmV0KGUpPT09IltvYmplY3QgUmVnRXhwXSJ9ZnVuY3Rpb24gS2UoZSl7cmV0dXJuIHR5cGVvZiBlPT09Im9iamVjdCImJmUhPT1udWxsfWZ1bmN0aW9uICRlKGUpe3JldHVybiBLZShlKSYmZXQoZSk9PT0iW29iamVjdCBEYXRlXSJ9ZnVuY3Rpb24gWWUoZSl7cmV0dXJuIEtlKGUpJiYoZXQoZSk9PT0iW29iamVjdCBFcnJvcl0ifHxlIGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIFFlKGUpe3JldHVybiB0eXBlb2YgZT09PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gWmUoZSl7cmV0dXJuIGU9PT1udWxsfHx0eXBlb2YgZT09PSJib29sZWFuInx8dHlwZW9mIGU9PT0ibnVtYmVyInx8dHlwZW9mIGU9PT0ic3RyaW5nInx8dHlwZW9mIGU9PT0ic3ltYm9sInx8dHlwZW9mIGU9PT0idW5kZWZpbmVkIn1mdW5jdGlvbiBldChlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfWZ1bmN0aW9uIHR0KGUsdCl7aWYoIXR8fCFLZSh0KSlyZXR1cm4gZTt2YXIgcj1PYmplY3Qua2V5cyh0KTt2YXIgcz1yLmxlbmd0aDt3aGlsZShzLS0pe2VbcltzXV09dFtyW3NdXX1yZXR1cm4gZX1mdW5jdGlvbiBydChlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX1mdW5jdGlvbiBzdChlLHQpe2lmKGU9PT10KXtyZXR1cm4gMH12YXIgcj1lLmxlbmd0aDt2YXIgcz10Lmxlbmd0aDtmb3IodmFyIGk9MCxuPU1hdGgubWluKHIscyk7aTxuOysraSl7aWYoZVtpXSE9PXRbaV0pe3I9ZVtpXTtzPXRbaV07YnJlYWt9fWlmKHI8cyl7cmV0dXJuLTF9aWYoczxyKXtyZXR1cm4gMX1yZXR1cm4gMH12YXIgaXQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgbnQ9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXtpZihpdC5jYWxsKGUscikpdC5wdXNoKHIpfXJldHVybiB0fTt2YXIgYXQ9QXJyYXkucHJvdG90eXBlLnNsaWNlO3ZhciBvdDtmdW5jdGlvbiBsdCgpe2lmKHR5cGVvZiBvdCE9PSJ1bmRlZmluZWQiKXtyZXR1cm4gb3R9cmV0dXJuIG90PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUoKXt9Lm5hbWU9PT0iZm9vIn0oKX1mdW5jdGlvbiB1dChlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfWZ1bmN0aW9uIGN0KGUpe2lmKENlKGUpKXtyZXR1cm4gZmFsc2V9aWYodHlwZW9mIHQuQXJyYXlCdWZmZXIhPT0iZnVuY3Rpb24iKXtyZXR1cm4gZmFsc2V9aWYodHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldz09PSJmdW5jdGlvbiIpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoZSl9aWYoIWUpe3JldHVybiBmYWxzZX1pZihlIGluc3RhbmNlb2YgRGF0YVZpZXcpe3JldHVybiB0cnVlfWlmKGUuYnVmZmVyJiZlLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9ZnVuY3Rpb24gaHQoZSx0KXtpZighZSl4dChlLHRydWUsdCwiPT0iLHZ0KX12YXIgcHQ9L1xzKmZ1bmN0aW9uXHMrKFteXChcc10qKVxzKi87ZnVuY3Rpb24gZnQoZSl7aWYoIVFlKGUpKXtyZXR1cm59aWYobHQoKSl7cmV0dXJuIGUubmFtZX12YXIgdD1lLnRvU3RyaW5nKCk7dmFyIHI9dC5tYXRjaChwdCk7cmV0dXJuIHImJnJbMV19aHQuQXNzZXJ0aW9uRXJyb3I9ZHQ7ZnVuY3Rpb24gZHQoZSl7dGhpcy5uYW1lPSJBc3NlcnRpb25FcnJvciI7dGhpcy5hY3R1YWw9ZS5hY3R1YWw7dGhpcy5leHBlY3RlZD1lLmV4cGVjdGVkO3RoaXMub3BlcmF0b3I9ZS5vcGVyYXRvcjtpZihlLm1lc3NhZ2Upe3RoaXMubWVzc2FnZT1lLm1lc3NhZ2U7dGhpcy5nZW5lcmF0ZWRNZXNzYWdlPWZhbHNlfWVsc2V7dGhpcy5tZXNzYWdlPWd0KHRoaXMpO3RoaXMuZ2VuZXJhdGVkTWVzc2FnZT10cnVlfXZhciB0PWUuc3RhY2tTdGFydEZ1bmN0aW9ufHx4dDtpZihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSl7RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0KX1lbHNle3ZhciByPW5ldyBFcnJvcjtpZihyLnN0YWNrKXt2YXIgcz1yLnN0YWNrO3ZhciBpPWZ0KHQpO3ZhciBuPXMuaW5kZXhPZigiXG4iK2kpO2lmKG4+PTApe3ZhciBhPXMuaW5kZXhPZigiXG4iLG4rMSk7cz1zLnN1YnN0cmluZyhhKzEpfXRoaXMuc3RhY2s9c319fUllKGR0LEVycm9yKTtmdW5jdGlvbiBtdChlLHQpe2lmKHR5cGVvZiBlPT09InN0cmluZyIpe3JldHVybiBlLmxlbmd0aDx0P2U6ZS5zbGljZSgwLHQpfWVsc2V7cmV0dXJuIGV9fWZ1bmN0aW9uIHl0KGUpe2lmKGx0KCl8fCFRZShlKSl7cmV0dXJuIEZlKGUpfXZhciB0PWZ0KGUpO3ZhciByPXQ/IjogIit0OiIiO3JldHVybiJbRnVuY3Rpb24iK3IrIl0ifWZ1bmN0aW9uIGd0KGUpe3JldHVybiBtdCh5dChlLmFjdHVhbCksMTI4KSsiICIrZS5vcGVyYXRvcisiICIrbXQoeXQoZS5leHBlY3RlZCksMTI4KX1mdW5jdGlvbiB4dChlLHQscixzLGkpe3Rocm93IG5ldyBkdCh7bWVzc2FnZTpyLGFjdHVhbDplLGV4cGVjdGVkOnQsb3BlcmF0b3I6cyxzdGFja1N0YXJ0RnVuY3Rpb246aX0pfWh0LmZhaWw9eHQ7ZnVuY3Rpb24gdnQoZSx0KXtpZighZSl4dChlLHRydWUsdCwiPT0iLHZ0KX1odC5vaz12dDtodC5lcXVhbD1idDtmdW5jdGlvbiBidChlLHQscil7aWYoZSE9dCl4dChlLHQsciwiPT0iLGJ0KX1odC5ub3RFcXVhbD1FdDtmdW5jdGlvbiBFdChlLHQscil7aWYoZT09dCl7eHQoZSx0LHIsIiE9IixFdCl9fWh0LmRlZXBFcXVhbD1TdDtmdW5jdGlvbiBTdChlLHQscil7aWYoIUF0KGUsdCxmYWxzZSkpe3h0KGUsdCxyLCJkZWVwRXF1YWwiLFN0KX19aHQuZGVlcFN0cmljdEVxdWFsPVR0O2Z1bmN0aW9uIFR0KGUsdCxyKXtpZighQXQoZSx0LHRydWUpKXt4dChlLHQsciwiZGVlcFN0cmljdEVxdWFsIixUdCl9fWZ1bmN0aW9uIEF0KGUsdCxyLHMpe2lmKGU9PT10KXtyZXR1cm4gdHJ1ZX1lbHNlIGlmKENlKGUpJiZDZSh0KSl7cmV0dXJuIHN0KGUsdCk9PT0wfWVsc2UgaWYoJGUoZSkmJiRlKHQpKXtyZXR1cm4gZS5nZXRUaW1lKCk9PT10LmdldFRpbWUoKX1lbHNlIGlmKFdlKGUpJiZXZSh0KSl7cmV0dXJuIGUuc291cmNlPT09dC5zb3VyY2UmJmUuZ2xvYmFsPT09dC5nbG9iYWwmJmUubXVsdGlsaW5lPT09dC5tdWx0aWxpbmUmJmUubGFzdEluZGV4PT09dC5sYXN0SW5kZXgmJmUuaWdub3JlQ2FzZT09PXQuaWdub3JlQ2FzZX1lbHNlIGlmKChlPT09bnVsbHx8dHlwZW9mIGUhPT0ib2JqZWN0IikmJih0PT09bnVsbHx8dHlwZW9mIHQhPT0ib2JqZWN0Iikpe3JldHVybiByP2U9PT10OmU9PXR9ZWxzZSBpZihjdChlKSYmY3QodCkmJnV0KGUpPT09dXQodCkmJiEoZSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8ZSBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkpe3JldHVybiBzdChuZXcgVWludDhBcnJheShlLmJ1ZmZlciksbmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpKT09PTB9ZWxzZSBpZihDZShlKSE9PUNlKHQpKXtyZXR1cm4gZmFsc2V9ZWxzZXtzPXN8fHthY3R1YWw6W10sZXhwZWN0ZWQ6W119O3ZhciBpPXMuYWN0dWFsLmluZGV4T2YoZSk7aWYoaSE9PS0xKXtpZihpPT09cy5leHBlY3RlZC5pbmRleE9mKHQpKXtyZXR1cm4gdHJ1ZX19cy5hY3R1YWwucHVzaChlKTtzLmV4cGVjdGVkLnB1c2godCk7cmV0dXJuIEN0KGUsdCxyLHMpfX1mdW5jdGlvbiB3dChlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT0iW29iamVjdCBBcmd1bWVudHNdIn1mdW5jdGlvbiBDdChlLHQscixzKXtpZihlPT09bnVsbHx8ZT09PXVuZGVmaW5lZHx8dD09PW51bGx8fHQ9PT11bmRlZmluZWQpcmV0dXJuIGZhbHNlO2lmKFplKGUpfHxaZSh0KSlyZXR1cm4gZT09PXQ7aWYociYmT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKXJldHVybiBmYWxzZTt2YXIgaT13dChlKTt2YXIgbj13dCh0KTtpZihpJiYhbnx8IWkmJm4pcmV0dXJuIGZhbHNlO2lmKGkpe2U9YXQuY2FsbChlKTt0PWF0LmNhbGwodCk7cmV0dXJuIEF0KGUsdCxyKX12YXIgYT1udChlKTt2YXIgbz1udCh0KTt2YXIgbCx1O2lmKGEubGVuZ3RoIT09by5sZW5ndGgpcmV0dXJuIGZhbHNlO2Euc29ydCgpO28uc29ydCgpO2Zvcih1PWEubGVuZ3RoLTE7dT49MDt1LS0pe2lmKGFbdV0hPT1vW3VdKXJldHVybiBmYWxzZX1mb3IodT1hLmxlbmd0aC0xO3U+PTA7dS0tKXtsPWFbdV07aWYoIUF0KGVbbF0sdFtsXSxyLHMpKXJldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX1odC5ub3REZWVwRXF1YWw9UHQ7ZnVuY3Rpb24gUHQoZSx0LHIpe2lmKEF0KGUsdCxmYWxzZSkpe3h0KGUsdCxyLCJub3REZWVwRXF1YWwiLFB0KX19aHQubm90RGVlcFN0cmljdEVxdWFsPUR0O2Z1bmN0aW9uIER0KGUsdCxyKXtpZihBdChlLHQsdHJ1ZSkpe3h0KGUsdCxyLCJub3REZWVwU3RyaWN0RXF1YWwiLER0KX19aHQuc3RyaWN0RXF1YWw9a3Q7ZnVuY3Rpb24ga3QoZSx0LHIpe2lmKGUhPT10KXt4dChlLHQsciwiPT09IixrdCl9fWh0Lm5vdFN0cmljdEVxdWFsPU50O2Z1bmN0aW9uIE50KGUsdCxyKXtpZihlPT09dCl7eHQoZSx0LHIsIiE9PSIsTnQpfX1mdW5jdGlvbiBJdChlLHQpe2lmKCFlfHwhdCl7cmV0dXJuIGZhbHNlfWlmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT09IltvYmplY3QgUmVnRXhwXSIpe3JldHVybiB0LnRlc3QoZSl9dHJ5e2lmKGUgaW5zdGFuY2VvZiB0KXtyZXR1cm4gdHJ1ZX19Y2F0Y2goZSl7fWlmKEVycm9yLmlzUHJvdG90eXBlT2YodCkpe3JldHVybiBmYWxzZX1yZXR1cm4gdC5jYWxsKHt9LGUpPT09dHJ1ZX1mdW5jdGlvbiBGdChlKXt2YXIgdDt0cnl7ZSgpfWNhdGNoKGUpe3Q9ZX1yZXR1cm4gdH1mdW5jdGlvbiBNdChlLHQscixzKXt2YXIgaTtpZih0eXBlb2YgdCE9PSJmdW5jdGlvbiIpe3Rocm93IG5ldyBUeXBlRXJyb3IoJyJibG9jayIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyl9aWYodHlwZW9mIHI9PT0ic3RyaW5nIil7cz1yO3I9bnVsbH1pPUZ0KHQpO3M9KHImJnIubmFtZT8iICgiK3IubmFtZSsiKS4iOiIuIikrKHM/IiAiK3M6Ii4iKTtpZihlJiYhaSl7eHQoaSxyLCJNaXNzaW5nIGV4cGVjdGVkIGV4Y2VwdGlvbiIrcyl9dmFyIG49dHlwZW9mIHM9PT0ic3RyaW5nIjt2YXIgYT0hZSYmWWUoaSk7dmFyIG89IWUmJmkmJiFyO2lmKGEmJm4mJkl0KGkscil8fG8pe3h0KGksciwiR290IHVud2FudGVkIGV4Y2VwdGlvbiIrcyl9aWYoZSYmaSYmciYmIUl0KGkscil8fCFlJiZpKXt0aHJvdyBpfX1odC50aHJvd3M9X3Q7ZnVuY3Rpb24gX3QoZSx0LHIpe010KHRydWUsZSx0LHIpfWh0LmRvZXNOb3RUaHJvdz1PdDtmdW5jdGlvbiBPdChlLHQscil7TXQoZmFsc2UsZSx0LHIpfWh0LmlmRXJyb3I9THQ7ZnVuY3Rpb24gTHQoZSl7aWYoZSl0aHJvdyBlfXZhciBCdD1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxkZWZhdWx0Omh0LEFzc2VydGlvbkVycm9yOmR0LGZhaWw6eHQsb2s6dnQsYXNzZXJ0OnZ0LGVxdWFsOmJ0LG5vdEVxdWFsOkV0LGRlZXBFcXVhbDpTdCxkZWVwU3RyaWN0RXF1YWw6VHQsbm90RGVlcEVxdWFsOlB0LG5vdERlZXBTdHJpY3RFcXVhbDpEdCxzdHJpY3RFcXVhbDprdCxub3RTdHJpY3RFcXVhbDpOdCx0aHJvd3M6X3QsZG9lc05vdFRocm93Ok90LGlmRXJyb3I6THR9KTt2YXIgUnQ9dShCdCk7dmFyIGp0PXt9O3ZhciBVdD17fTt2YXIgenQ9e307dmFyIFZ0PXt9O3ZhciBxdD17fTt2YXIgR3Q9e307dmFyIFh0PXt9O3ZhciBKdD0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIuc3BsaXQoIiIpO1h0LmVuY29kZT1mdW5jdGlvbihlKXtpZigwPD1lJiZlPEp0Lmxlbmd0aCl7cmV0dXJuIEp0W2VdfXRocm93IG5ldyBUeXBlRXJyb3IoIk11c3QgYmUgYmV0d2VlbiAwIGFuZCA2MzogIitlKX07WHQuZGVjb2RlPWZ1bmN0aW9uKGUpe3ZhciB0PTY1O3ZhciByPTkwO3ZhciBzPTk3O3ZhciBpPTEyMjt2YXIgbj00ODt2YXIgYT01Nzt2YXIgbz00Mzt2YXIgbD00Nzt2YXIgdT0yNjt2YXIgYz01MjtpZih0PD1lJiZlPD1yKXtyZXR1cm4gZS10fWlmKHM8PWUmJmU8PWkpe3JldHVybiBlLXMrdX1pZihuPD1lJiZlPD1hKXtyZXR1cm4gZS1uK2N9aWYoZT09byl7cmV0dXJuIDYyfWlmKGU9PWwpe3JldHVybiA2M31yZXR1cm4tMX07dmFyIEh0PVh0O3ZhciBXdD01O3ZhciBLdD0xPDxXdDt2YXIgJHQ9S3QtMTt2YXIgWXQ9S3Q7ZnVuY3Rpb24gUXQoZSl7cmV0dXJuIGU8MD8oLWU8PDEpKzE6KGU8PDEpKzB9ZnVuY3Rpb24gWnQoZSl7dmFyIHQ9KGUmMSk9PT0xO3ZhciByPWU+PjE7cmV0dXJuIHQ/LXI6cn1HdC5lbmNvZGU9ZnVuY3Rpb24gZSh0KXt2YXIgcj0iIjt2YXIgczt2YXIgaT1RdCh0KTtkb3tzPWkmJHQ7aT4+Pj1XdDtpZihpPjApe3N8PVl0fXIrPUh0LmVuY29kZShzKX13aGlsZShpPjApO3JldHVybiByfTtHdC5kZWNvZGU9ZnVuY3Rpb24gZSh0LHIscyl7dmFyIGk9dC5sZW5ndGg7dmFyIG49MDt2YXIgYT0wO3ZhciBvLGw7ZG97aWYocj49aSl7dGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBtb3JlIGRpZ2l0cyBpbiBiYXNlIDY0IFZMUSB2YWx1ZS4iKX1sPUh0LmRlY29kZSh0LmNoYXJDb2RlQXQocisrKSk7aWYobD09PS0xKXt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYmFzZTY0IGRpZ2l0OiAiK3QuY2hhckF0KHItMSkpfW89ISEobCZZdCk7bCY9JHQ7bj1uKyhsPDxhKTthKz1XdH13aGlsZShvKTtzLnZhbHVlPVp0KG4pO3MucmVzdD1yfTt2YXIgZXI9e307KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSx0LHIpe2lmKHQgaW4gZSl7cmV0dXJuIGVbdF19ZWxzZSBpZihhcmd1bWVudHMubGVuZ3RoPT09Myl7cmV0dXJuIHJ9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoJyInK3QrJyIgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4nKX19ZS5nZXRBcmc9dDt2YXIgcj0vXig/OihbXHcrXC0uXSspOik/XC9cLyg/Oihcdys6XHcrKUApPyhbXHcuLV0qKSg/OjooXGQrKSk/KC4qKSQvO3ZhciBzPS9eZGF0YTouK1wsLiskLztmdW5jdGlvbiBpKGUpe3ZhciB0PWUubWF0Y2gocik7aWYoIXQpe3JldHVybiBudWxsfXJldHVybntzY2hlbWU6dFsxXSxhdXRoOnRbMl0saG9zdDp0WzNdLHBvcnQ6dFs0XSxwYXRoOnRbNV19fWUudXJsUGFyc2U9aTtmdW5jdGlvbiBuKGUpe3ZhciB0PSIiO2lmKGUuc2NoZW1lKXt0Kz1lLnNjaGVtZSsiOiJ9dCs9Ii8vIjtpZihlLmF1dGgpe3QrPWUuYXV0aCsiQCJ9aWYoZS5ob3N0KXt0Kz1lLmhvc3R9aWYoZS5wb3J0KXt0Kz0iOiIrZS5wb3J0fWlmKGUucGF0aCl7dCs9ZS5wYXRofXJldHVybiB0fWUudXJsR2VuZXJhdGU9bjtmdW5jdGlvbiBhKHQpe3ZhciByPXQ7dmFyIHM9aSh0KTtpZihzKXtpZighcy5wYXRoKXtyZXR1cm4gdH1yPXMucGF0aH12YXIgYT1lLmlzQWJzb2x1dGUocik7dmFyIG89ci5zcGxpdCgvXC8rLyk7Zm9yKHZhciBsLHU9MCxjPW8ubGVuZ3RoLTE7Yz49MDtjLS0pe2w9b1tjXTtpZihsPT09Ii4iKXtvLnNwbGljZShjLDEpfWVsc2UgaWYobD09PSIuLiIpe3UrK31lbHNlIGlmKHU+MCl7aWYobD09PSIiKXtvLnNwbGljZShjKzEsdSk7dT0wfWVsc2V7by5zcGxpY2UoYywyKTt1LS19fX1yPW8uam9pbigiLyIpO2lmKHI9PT0iIil7cj1hPyIvIjoiLiJ9aWYocyl7cy5wYXRoPXI7cmV0dXJuIG4ocyl9cmV0dXJuIHJ9ZS5ub3JtYWxpemU9YTtmdW5jdGlvbiBvKGUsdCl7aWYoZT09PSIiKXtlPSIuIn1pZih0PT09IiIpe3Q9Ii4ifXZhciByPWkodCk7dmFyIG89aShlKTtpZihvKXtlPW8ucGF0aHx8Ii8ifWlmKHImJiFyLnNjaGVtZSl7aWYobyl7ci5zY2hlbWU9by5zY2hlbWV9cmV0dXJuIG4ocil9aWYocnx8dC5tYXRjaChzKSl7cmV0dXJuIHR9aWYobyYmIW8uaG9zdCYmIW8ucGF0aCl7by5ob3N0PXQ7cmV0dXJuIG4obyl9dmFyIGw9dC5jaGFyQXQoMCk9PT0iLyI/dDphKGUucmVwbGFjZSgvXC8rJC8sIiIpKyIvIit0KTtpZihvKXtvLnBhdGg9bDtyZXR1cm4gbihvKX1yZXR1cm4gbH1lLmpvaW49bztlLmlzQWJzb2x1dGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckF0KDApPT09Ii8ifHxyLnRlc3QoZSl9O2Z1bmN0aW9uIGwoZSx0KXtpZihlPT09IiIpe2U9Ii4ifWU9ZS5yZXBsYWNlKC9cLyQvLCIiKTt2YXIgcj0wO3doaWxlKHQuaW5kZXhPZihlKyIvIikhPT0wKXt2YXIgcz1lLmxhc3RJbmRleE9mKCIvIik7aWYoczwwKXtyZXR1cm4gdH1lPWUuc2xpY2UoMCxzKTtpZihlLm1hdGNoKC9eKFteXC9dKzpcLyk/XC8qJC8pKXtyZXR1cm4gdH0rK3J9cmV0dXJuIEFycmF5KHIrMSkuam9pbigiLi4vIikrdC5zdWJzdHIoZS5sZW5ndGgrMSl9ZS5yZWxhdGl2ZT1sO3ZhciB1PWZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4hKCJfX3Byb3RvX18iaW4gZSl9KCk7ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZX1mdW5jdGlvbiBoKGUpe2lmKGYoZSkpe3JldHVybiIkIitlfXJldHVybiBlfWUudG9TZXRTdHJpbmc9dT9jOmg7ZnVuY3Rpb24gcChlKXtpZihmKGUpKXtyZXR1cm4gZS5zbGljZSgxKX1yZXR1cm4gZX1lLmZyb21TZXRTdHJpbmc9dT9jOnA7ZnVuY3Rpb24gZihlKXtpZighZSl7cmV0dXJuIGZhbHNlfXZhciB0PWUubGVuZ3RoO2lmKHQ8OSl7cmV0dXJuIGZhbHNlfWlmKGUuY2hhckNvZGVBdCh0LTEpIT09OTV8fGUuY2hhckNvZGVBdCh0LTIpIT09OTV8fGUuY2hhckNvZGVBdCh0LTMpIT09MTExfHxlLmNoYXJDb2RlQXQodC00KSE9PTExNnx8ZS5jaGFyQ29kZUF0KHQtNSkhPT0xMTF8fGUuY2hhckNvZGVBdCh0LTYpIT09MTE0fHxlLmNoYXJDb2RlQXQodC03KSE9PTExMnx8ZS5jaGFyQ29kZUF0KHQtOCkhPT05NXx8ZS5jaGFyQ29kZUF0KHQtOSkhPT05NSl7cmV0dXJuIGZhbHNlfWZvcih2YXIgcj10LTEwO3I+PTA7ci0tKXtpZihlLmNoYXJDb2RlQXQocikhPT0zNil7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX1mdW5jdGlvbiBkKGUsdCxyKXt2YXIgcz15KGUuc291cmNlLHQuc291cmNlKTtpZihzIT09MCl7cmV0dXJuIHN9cz1lLm9yaWdpbmFsTGluZS10Lm9yaWdpbmFsTGluZTtpZihzIT09MCl7cmV0dXJuIHN9cz1lLm9yaWdpbmFsQ29sdW1uLXQub3JpZ2luYWxDb2x1bW47aWYocyE9PTB8fHIpe3JldHVybiBzfXM9ZS5nZW5lcmF0ZWRDb2x1bW4tdC5nZW5lcmF0ZWRDb2x1bW47aWYocyE9PTApe3JldHVybiBzfXM9ZS5nZW5lcmF0ZWRMaW5lLXQuZ2VuZXJhdGVkTGluZTtpZihzIT09MCl7cmV0dXJuIHN9cmV0dXJuIHkoZS5uYW1lLHQubmFtZSl9ZS5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucz1kO2Z1bmN0aW9uIG0oZSx0LHIpe3ZhciBzPWUuZ2VuZXJhdGVkTGluZS10LmdlbmVyYXRlZExpbmU7aWYocyE9PTApe3JldHVybiBzfXM9ZS5nZW5lcmF0ZWRDb2x1bW4tdC5nZW5lcmF0ZWRDb2x1bW47aWYocyE9PTB8fHIpe3JldHVybiBzfXM9eShlLnNvdXJjZSx0LnNvdXJjZSk7aWYocyE9PTApe3JldHVybiBzfXM9ZS5vcmlnaW5hbExpbmUtdC5vcmlnaW5hbExpbmU7aWYocyE9PTApe3JldHVybiBzfXM9ZS5vcmlnaW5hbENvbHVtbi10Lm9yaWdpbmFsQ29sdW1uO2lmKHMhPT0wKXtyZXR1cm4gc31yZXR1cm4geShlLm5hbWUsdC5uYW1lKX1lLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkPW07ZnVuY3Rpb24geShlLHQpe2lmKGU9PT10KXtyZXR1cm4gMH1pZihlPT09bnVsbCl7cmV0dXJuIDF9aWYodD09PW51bGwpe3JldHVybi0xfWlmKGU+dCl7cmV0dXJuIDF9cmV0dXJuLTF9ZnVuY3Rpb24gZyhlLHQpe3ZhciByPWUuZ2VuZXJhdGVkTGluZS10LmdlbmVyYXRlZExpbmU7aWYociE9PTApe3JldHVybiByfXI9ZS5nZW5lcmF0ZWRDb2x1bW4tdC5nZW5lcmF0ZWRDb2x1bW47aWYociE9PTApe3JldHVybiByfXI9eShlLnNvdXJjZSx0LnNvdXJjZSk7aWYociE9PTApe3JldHVybiByfXI9ZS5vcmlnaW5hbExpbmUtdC5vcmlnaW5hbExpbmU7aWYociE9PTApe3JldHVybiByfXI9ZS5vcmlnaW5hbENvbHVtbi10Lm9yaWdpbmFsQ29sdW1uO2lmKHIhPT0wKXtyZXR1cm4gcn1yZXR1cm4geShlLm5hbWUsdC5uYW1lKX1lLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkPWc7ZnVuY3Rpb24geChlKXtyZXR1cm4gSlNPTi5wYXJzZShlLnJlcGxhY2UoL15cKV19J1teXG5dKlxuLywiIikpfWUucGFyc2VTb3VyY2VNYXBJbnB1dD14O2Z1bmN0aW9uIHYoZSx0LHIpe3Q9dHx8IiI7aWYoZSl7aWYoZVtlLmxlbmd0aC0xXSE9PSIvIiYmdFswXSE9PSIvIil7ZSs9Ii8ifXQ9ZSt0fWlmKHIpe3ZhciBzPWkocik7aWYoIXMpe3Rocm93IG5ldyBFcnJvcigic291cmNlTWFwVVJMIGNvdWxkIG5vdCBiZSBwYXJzZWQiKX1pZihzLnBhdGgpe3ZhciBsPXMucGF0aC5sYXN0SW5kZXhPZigiLyIpO2lmKGw+PTApe3MucGF0aD1zLnBhdGguc3Vic3RyaW5nKDAsbCsxKX19dD1vKG4ocyksdCl9cmV0dXJuIGEodCl9ZS5jb21wdXRlU291cmNlVVJMPXZ9KShlcik7dmFyIHRyPXt9O3ZhciBycj1lcjt2YXIgc3I9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgaXI9dHlwZW9mIE1hcCE9PSJ1bmRlZmluZWQiO2Z1bmN0aW9uIG5yKCl7dGhpcy5fYXJyYXk9W107dGhpcy5fc2V0PWlyP25ldyBNYXA6T2JqZWN0LmNyZWF0ZShudWxsKX1uci5mcm9tQXJyYXk9ZnVuY3Rpb24gZSh0LHIpe3ZhciBzPW5ldyBucjtmb3IodmFyIGk9MCxuPXQubGVuZ3RoO2k8bjtpKyspe3MuYWRkKHRbaV0scil9cmV0dXJuIHN9O25yLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uIGUoKXtyZXR1cm4gaXI/dGhpcy5fc2V0LnNpemU6T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5fc2V0KS5sZW5ndGh9O25yLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24gZSh0LHIpe3ZhciBzPWlyP3Q6cnIudG9TZXRTdHJpbmcodCk7dmFyIGk9aXI/dGhpcy5oYXModCk6c3IuY2FsbCh0aGlzLl9zZXQscyk7dmFyIG49dGhpcy5fYXJyYXkubGVuZ3RoO2lmKCFpfHxyKXt0aGlzLl9hcnJheS5wdXNoKHQpfWlmKCFpKXtpZihpcil7dGhpcy5fc2V0LnNldCh0LG4pfWVsc2V7dGhpcy5fc2V0W3NdPW59fX07bnIucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBlKHQpe2lmKGlyKXtyZXR1cm4gdGhpcy5fc2V0Lmhhcyh0KX1lbHNle3ZhciByPXJyLnRvU2V0U3RyaW5nKHQpO3JldHVybiBzci5jYWxsKHRoaXMuX3NldCxyKX19O25yLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uIGUodCl7aWYoaXIpe3ZhciByPXRoaXMuX3NldC5nZXQodCk7aWYocj49MCl7cmV0dXJuIHJ9fWVsc2V7dmFyIHM9cnIudG9TZXRTdHJpbmcodCk7aWYoc3IuY2FsbCh0aGlzLl9zZXQscykpe3JldHVybiB0aGlzLl9zZXRbc119fXRocm93IG5ldyBFcnJvcignIicrdCsnIiBpcyBub3QgaW4gdGhlIHNldC4nKX07bnIucHJvdG90eXBlLmF0PWZ1bmN0aW9uIGUodCl7aWYodD49MCYmdDx0aGlzLl9hcnJheS5sZW5ndGgpe3JldHVybiB0aGlzLl9hcnJheVt0XX10aHJvdyBuZXcgRXJyb3IoIk5vIGVsZW1lbnQgaW5kZXhlZCBieSAiK3QpfTtuci5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbiBlKCl7cmV0dXJuIHRoaXMuX2FycmF5LnNsaWNlKCl9O3RyLkFycmF5U2V0PW5yO3ZhciBhcj17fTt2YXIgb3I9ZXI7ZnVuY3Rpb24gbHIoZSx0KXt2YXIgcj1lLmdlbmVyYXRlZExpbmU7dmFyIHM9dC5nZW5lcmF0ZWRMaW5lO3ZhciBpPWUuZ2VuZXJhdGVkQ29sdW1uO3ZhciBuPXQuZ2VuZXJhdGVkQ29sdW1uO3JldHVybiBzPnJ8fHM9PXImJm4+PWl8fG9yLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKGUsdCk8PTB9ZnVuY3Rpb24gcHIoKXt0aGlzLl9hcnJheT1bXTt0aGlzLl9zb3J0ZWQ9dHJ1ZTt0aGlzLl9sYXN0PXtnZW5lcmF0ZWRMaW5lOi0xLGdlbmVyYXRlZENvbHVtbjowfX1wci5wcm90b3R5cGUudW5zb3J0ZWRGb3JFYWNoPWZ1bmN0aW9uIGUodCxyKXt0aGlzLl9hcnJheS5mb3JFYWNoKHQscil9O3ByLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24gZSh0KXtpZihscih0aGlzLl9sYXN0LHQpKXt0aGlzLl9sYXN0PXQ7dGhpcy5fYXJyYXkucHVzaCh0KX1lbHNle3RoaXMuX3NvcnRlZD1mYWxzZTt0aGlzLl9hcnJheS5wdXNoKHQpfX07cHIucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24gZSgpe2lmKCF0aGlzLl9zb3J0ZWQpe3RoaXMuX2FycmF5LnNvcnQob3IuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQpO3RoaXMuX3NvcnRlZD10cnVlfXJldHVybiB0aGlzLl9hcnJheX07YXIuTWFwcGluZ0xpc3Q9cHI7dmFyIGZyPUd0O3ZhciBkcj1lcjt2YXIgbXI9dHIuQXJyYXlTZXQ7dmFyIHlyPWFyLk1hcHBpbmdMaXN0O2Z1bmN0aW9uIGdyKGUpe2lmKCFlKXtlPXt9fXRoaXMuX2ZpbGU9ZHIuZ2V0QXJnKGUsImZpbGUiLG51bGwpO3RoaXMuX3NvdXJjZVJvb3Q9ZHIuZ2V0QXJnKGUsInNvdXJjZVJvb3QiLG51bGwpO3RoaXMuX3NraXBWYWxpZGF0aW9uPWRyLmdldEFyZyhlLCJza2lwVmFsaWRhdGlvbiIsZmFsc2UpO3RoaXMuX3NvdXJjZXM9bmV3IG1yO3RoaXMuX25hbWVzPW5ldyBtcjt0aGlzLl9tYXBwaW5ncz1uZXcgeXI7dGhpcy5fc291cmNlc0NvbnRlbnRzPW51bGx9Z3IucHJvdG90eXBlLl92ZXJzaW9uPTM7Z3IuZnJvbVNvdXJjZU1hcD1mdW5jdGlvbiBlKHQpe3ZhciByPXQuc291cmNlUm9vdDt2YXIgcz1uZXcgZ3Ioe2ZpbGU6dC5maWxlLHNvdXJjZVJvb3Q6cn0pO3QuZWFjaE1hcHBpbmcoKGZ1bmN0aW9uKGUpe3ZhciB0PXtnZW5lcmF0ZWQ6e2xpbmU6ZS5nZW5lcmF0ZWRMaW5lLGNvbHVtbjplLmdlbmVyYXRlZENvbHVtbn19O2lmKGUuc291cmNlIT1udWxsKXt0LnNvdXJjZT1lLnNvdXJjZTtpZihyIT1udWxsKXt0LnNvdXJjZT1kci5yZWxhdGl2ZShyLHQuc291cmNlKX10Lm9yaWdpbmFsPXtsaW5lOmUub3JpZ2luYWxMaW5lLGNvbHVtbjplLm9yaWdpbmFsQ29sdW1ufTtpZihlLm5hbWUhPW51bGwpe3QubmFtZT1lLm5hbWV9fXMuYWRkTWFwcGluZyh0KX0pKTt0LnNvdXJjZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIGk9ZTtpZihyIT09bnVsbCl7aT1kci5yZWxhdGl2ZShyLGUpfWlmKCFzLl9zb3VyY2VzLmhhcyhpKSl7cy5fc291cmNlcy5hZGQoaSl9dmFyIG49dC5zb3VyY2VDb250ZW50Rm9yKGUpO2lmKG4hPW51bGwpe3Muc2V0U291cmNlQ29udGVudChlLG4pfX0pKTtyZXR1cm4gc307Z3IucHJvdG90eXBlLmFkZE1hcHBpbmc9ZnVuY3Rpb24gZSh0KXt2YXIgcj1kci5nZXRBcmcodCwiZ2VuZXJhdGVkIik7dmFyIHM9ZHIuZ2V0QXJnKHQsIm9yaWdpbmFsIixudWxsKTt2YXIgaT1kci5nZXRBcmcodCwic291cmNlIixudWxsKTt2YXIgbj1kci5nZXRBcmcodCwibmFtZSIsbnVsbCk7aWYoIXRoaXMuX3NraXBWYWxpZGF0aW9uKXt0aGlzLl92YWxpZGF0ZU1hcHBpbmcocixzLGksbil9aWYoaSE9bnVsbCl7aT1TdHJpbmcoaSk7aWYoIXRoaXMuX3NvdXJjZXMuaGFzKGkpKXt0aGlzLl9zb3VyY2VzLmFkZChpKX19aWYobiE9bnVsbCl7bj1TdHJpbmcobik7aWYoIXRoaXMuX25hbWVzLmhhcyhuKSl7dGhpcy5fbmFtZXMuYWRkKG4pfX10aGlzLl9tYXBwaW5ncy5hZGQoe2dlbmVyYXRlZExpbmU6ci5saW5lLGdlbmVyYXRlZENvbHVtbjpyLmNvbHVtbixvcmlnaW5hbExpbmU6cyE9bnVsbCYmcy5saW5lLG9yaWdpbmFsQ29sdW1uOnMhPW51bGwmJnMuY29sdW1uLHNvdXJjZTppLG5hbWU6bn0pfTtnci5wcm90b3R5cGUuc2V0U291cmNlQ29udGVudD1mdW5jdGlvbiBlKHQscil7dmFyIHM9dDtpZih0aGlzLl9zb3VyY2VSb290IT1udWxsKXtzPWRyLnJlbGF0aXZlKHRoaXMuX3NvdXJjZVJvb3Qscyl9aWYociE9bnVsbCl7aWYoIXRoaXMuX3NvdXJjZXNDb250ZW50cyl7dGhpcy5fc291cmNlc0NvbnRlbnRzPU9iamVjdC5jcmVhdGUobnVsbCl9dGhpcy5fc291cmNlc0NvbnRlbnRzW2RyLnRvU2V0U3RyaW5nKHMpXT1yfWVsc2UgaWYodGhpcy5fc291cmNlc0NvbnRlbnRzKXtkZWxldGUgdGhpcy5fc291cmNlc0NvbnRlbnRzW2RyLnRvU2V0U3RyaW5nKHMpXTtpZihPYmplY3Qua2V5cyh0aGlzLl9zb3VyY2VzQ29udGVudHMpLmxlbmd0aD09PTApe3RoaXMuX3NvdXJjZXNDb250ZW50cz1udWxsfX19O2dyLnByb3RvdHlwZS5hcHBseVNvdXJjZU1hcD1mdW5jdGlvbiBlKHQscixzKXt2YXIgaT1yO2lmKHI9PW51bGwpe2lmKHQuZmlsZT09bnVsbCl7dGhyb3cgbmV3IEVycm9yKCJTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLmFwcGx5U291cmNlTWFwIHJlcXVpcmVzIGVpdGhlciBhbiBleHBsaWNpdCBzb3VyY2UgZmlsZSwgIisnb3IgdGhlIHNvdXJjZSBtYXBcJ3MgImZpbGUiIHByb3BlcnR5LiBCb3RoIHdlcmUgb21pdHRlZC4nKX1pPXQuZmlsZX12YXIgbj10aGlzLl9zb3VyY2VSb290O2lmKG4hPW51bGwpe2k9ZHIucmVsYXRpdmUobixpKX12YXIgYT1uZXcgbXI7dmFyIG89bmV3IG1yO3RoaXMuX21hcHBpbmdzLnVuc29ydGVkRm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoZS5zb3VyY2U9PT1pJiZlLm9yaWdpbmFsTGluZSE9bnVsbCl7dmFyIHI9dC5vcmlnaW5hbFBvc2l0aW9uRm9yKHtsaW5lOmUub3JpZ2luYWxMaW5lLGNvbHVtbjplLm9yaWdpbmFsQ29sdW1ufSk7aWYoci5zb3VyY2UhPW51bGwpe2Uuc291cmNlPXIuc291cmNlO2lmKHMhPW51bGwpe2Uuc291cmNlPWRyLmpvaW4ocyxlLnNvdXJjZSl9aWYobiE9bnVsbCl7ZS5zb3VyY2U9ZHIucmVsYXRpdmUobixlLnNvdXJjZSl9ZS5vcmlnaW5hbExpbmU9ci5saW5lO2Uub3JpZ2luYWxDb2x1bW49ci5jb2x1bW47aWYoci5uYW1lIT1udWxsKXtlLm5hbWU9ci5uYW1lfX19dmFyIGw9ZS5zb3VyY2U7aWYobCE9bnVsbCYmIWEuaGFzKGwpKXthLmFkZChsKX12YXIgdT1lLm5hbWU7aWYodSE9bnVsbCYmIW8uaGFzKHUpKXtvLmFkZCh1KX19KSx0aGlzKTt0aGlzLl9zb3VyY2VzPWE7dGhpcy5fbmFtZXM9bzt0LnNvdXJjZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9dC5zb3VyY2VDb250ZW50Rm9yKGUpO2lmKHIhPW51bGwpe2lmKHMhPW51bGwpe2U9ZHIuam9pbihzLGUpfWlmKG4hPW51bGwpe2U9ZHIucmVsYXRpdmUobixlKX10aGlzLnNldFNvdXJjZUNvbnRlbnQoZSxyKX19KSx0aGlzKX07Z3IucHJvdG90eXBlLl92YWxpZGF0ZU1hcHBpbmc9ZnVuY3Rpb24gZSh0LHIscyxpKXtpZihyJiZ0eXBlb2Ygci5saW5lIT09Im51bWJlciImJnR5cGVvZiByLmNvbHVtbiE9PSJudW1iZXIiKXt0aHJvdyBuZXcgRXJyb3IoIm9yaWdpbmFsLmxpbmUgYW5kIG9yaWdpbmFsLmNvbHVtbiBhcmUgbm90IG51bWJlcnMgLS0geW91IHByb2JhYmx5IG1lYW50IHRvIG9taXQgIisidGhlIG9yaWdpbmFsIG1hcHBpbmcgZW50aXJlbHkgYW5kIG9ubHkgbWFwIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24uIElmIHNvLCBwYXNzICIrIm51bGwgZm9yIHRoZSBvcmlnaW5hbCBtYXBwaW5nIGluc3RlYWQgb2YgYW4gb2JqZWN0IHdpdGggZW1wdHkgb3IgbnVsbCB2YWx1ZXMuIil9aWYodCYmImxpbmUiaW4gdCYmImNvbHVtbiJpbiB0JiZ0LmxpbmU+MCYmdC5jb2x1bW4+PTAmJiFyJiYhcyYmIWkpe3JldHVybn1lbHNlIGlmKHQmJiJsaW5lImluIHQmJiJjb2x1bW4iaW4gdCYmciYmImxpbmUiaW4gciYmImNvbHVtbiJpbiByJiZ0LmxpbmU+MCYmdC5jb2x1bW4+PTAmJnIubGluZT4wJiZyLmNvbHVtbj49MCYmcyl7cmV0dXJufWVsc2V7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1hcHBpbmc6ICIrSlNPTi5zdHJpbmdpZnkoe2dlbmVyYXRlZDp0LHNvdXJjZTpzLG9yaWdpbmFsOnIsbmFtZTppfSkpfX07Z3IucHJvdG90eXBlLl9zZXJpYWxpemVNYXBwaW5ncz1mdW5jdGlvbiBlKCl7dmFyIHQ9MDt2YXIgcj0xO3ZhciBzPTA7dmFyIGk9MDt2YXIgbj0wO3ZhciBhPTA7dmFyIG89IiI7dmFyIGw7dmFyIHU7dmFyIGM7dmFyIGg7dmFyIHA9dGhpcy5fbWFwcGluZ3MudG9BcnJheSgpO2Zvcih2YXIgZj0wLGQ9cC5sZW5ndGg7ZjxkO2YrKyl7dT1wW2ZdO2w9IiI7aWYodS5nZW5lcmF0ZWRMaW5lIT09cil7dD0wO3doaWxlKHUuZ2VuZXJhdGVkTGluZSE9PXIpe2wrPSI7IjtyKyt9fWVsc2V7aWYoZj4wKXtpZighZHIuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQodSxwW2YtMV0pKXtjb250aW51ZX1sKz0iLCJ9fWwrPWZyLmVuY29kZSh1LmdlbmVyYXRlZENvbHVtbi10KTt0PXUuZ2VuZXJhdGVkQ29sdW1uO2lmKHUuc291cmNlIT1udWxsKXtoPXRoaXMuX3NvdXJjZXMuaW5kZXhPZih1LnNvdXJjZSk7bCs9ZnIuZW5jb2RlKGgtYSk7YT1oO2wrPWZyLmVuY29kZSh1Lm9yaWdpbmFsTGluZS0xLWkpO2k9dS5vcmlnaW5hbExpbmUtMTtsKz1mci5lbmNvZGUodS5vcmlnaW5hbENvbHVtbi1zKTtzPXUub3JpZ2luYWxDb2x1bW47aWYodS5uYW1lIT1udWxsKXtjPXRoaXMuX25hbWVzLmluZGV4T2YodS5uYW1lKTtsKz1mci5lbmNvZGUoYy1uKTtuPWN9fW8rPWx9cmV0dXJuIG99O2dyLnByb3RvdHlwZS5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudD1mdW5jdGlvbiBlKHQscil7cmV0dXJuIHQubWFwKChmdW5jdGlvbihlKXtpZighdGhpcy5fc291cmNlc0NvbnRlbnRzKXtyZXR1cm4gbnVsbH1pZihyIT1udWxsKXtlPWRyLnJlbGF0aXZlKHIsZSl9dmFyIHQ9ZHIudG9TZXRTdHJpbmcoZSk7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9zb3VyY2VzQ29udGVudHMsdCk/dGhpcy5fc291cmNlc0NvbnRlbnRzW3RdOm51bGx9KSx0aGlzKX07Z3IucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbiBlKCl7dmFyIHQ9e3ZlcnNpb246dGhpcy5fdmVyc2lvbixzb3VyY2VzOnRoaXMuX3NvdXJjZXMudG9BcnJheSgpLG5hbWVzOnRoaXMuX25hbWVzLnRvQXJyYXkoKSxtYXBwaW5nczp0aGlzLl9zZXJpYWxpemVNYXBwaW5ncygpfTtpZih0aGlzLl9maWxlIT1udWxsKXt0LmZpbGU9dGhpcy5fZmlsZX1pZih0aGlzLl9zb3VyY2VSb290IT1udWxsKXt0LnNvdXJjZVJvb3Q9dGhpcy5fc291cmNlUm9vdH1pZih0aGlzLl9zb3VyY2VzQ29udGVudHMpe3Quc291cmNlc0NvbnRlbnQ9dGhpcy5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudCh0LnNvdXJjZXMsdC5zb3VyY2VSb290KX1yZXR1cm4gdH07Z3IucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uIGUoKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy50b0pTT04oKSl9O3F0LlNvdXJjZU1hcEdlbmVyYXRvcj1ncjt2YXIgeHI9e307dmFyIHZyPXt9OyhmdW5jdGlvbihlKXtlLkdSRUFURVNUX0xPV0VSX0JPVU5EPTE7ZS5MRUFTVF9VUFBFUl9CT1VORD0yO2Z1bmN0aW9uIHQocixzLGksbixhLG8pe3ZhciBsPU1hdGguZmxvb3IoKHMtcikvMikrcjt2YXIgdT1hKGksbltsXSx0cnVlKTtpZih1PT09MCl7cmV0dXJuIGx9ZWxzZSBpZih1PjApe2lmKHMtbD4xKXtyZXR1cm4gdChsLHMsaSxuLGEsbyl9aWYobz09ZS5MRUFTVF9VUFBFUl9CT1VORCl7cmV0dXJuIHM8bi5sZW5ndGg/czotMX1lbHNle3JldHVybiBsfX1lbHNle2lmKGwtcj4xKXtyZXR1cm4gdChyLGwsaSxuLGEsbyl9aWYobz09ZS5MRUFTVF9VUFBFUl9CT1VORCl7cmV0dXJuIGx9ZWxzZXtyZXR1cm4gcjwwPy0xOnJ9fX1lLnNlYXJjaD1mdW5jdGlvbiByKHMsaSxuLGEpe2lmKGkubGVuZ3RoPT09MCl7cmV0dXJuLTF9dmFyIG89dCgtMSxpLmxlbmd0aCxzLGksbixhfHxlLkdSRUFURVNUX0xPV0VSX0JPVU5EKTtpZihvPDApe3JldHVybi0xfXdoaWxlKG8tMT49MCl7aWYobihpW29dLGlbby0xXSx0cnVlKSE9PTApe2JyZWFrfS0tb31yZXR1cm4gb319KSh2cik7dmFyIGJyPXt9O2Z1bmN0aW9uIEVyKGUsdCxyKXt2YXIgcz1lW3RdO2VbdF09ZVtyXTtlW3JdPXN9ZnVuY3Rpb24gU3IoZSx0KXtyZXR1cm4gTWF0aC5yb3VuZChlK01hdGgucmFuZG9tKCkqKHQtZSkpfWZ1bmN0aW9uIFRyKGUsdCxyLHMpe2lmKHI8cyl7dmFyIGk9U3IocixzKTt2YXIgbj1yLTE7RXIoZSxpLHMpO3ZhciBhPWVbc107Zm9yKHZhciBvPXI7bzxzO28rKyl7aWYodChlW29dLGEpPD0wKXtuKz0xO0VyKGUsbixvKX19RXIoZSxuKzEsbyk7dmFyIGw9bisxO1RyKGUsdCxyLGwtMSk7VHIoZSx0LGwrMSxzKX19YnIucXVpY2tTb3J0PWZ1bmN0aW9uKGUsdCl7VHIoZSx0LDAsZS5sZW5ndGgtMSl9O3ZhciBBcj1lcjt2YXIgd3I9dnI7dmFyIENyPXRyLkFycmF5U2V0O3ZhciBQcj1HdDt2YXIgRHI9YnIucXVpY2tTb3J0O2Z1bmN0aW9uIGtyKGUsdCl7dmFyIHI9ZTtpZih0eXBlb2YgZT09PSJzdHJpbmciKXtyPUFyLnBhcnNlU291cmNlTWFwSW5wdXQoZSl9cmV0dXJuIHIuc2VjdGlvbnMhPW51bGw/bmV3IEZyKHIsdCk6bmV3IE5yKHIsdCl9a3IuZnJvbVNvdXJjZU1hcD1mdW5jdGlvbihlLHQpe3JldHVybiBOci5mcm9tU291cmNlTWFwKGUsdCl9O2tyLnByb3RvdHlwZS5fdmVyc2lvbj0zO2tyLnByb3RvdHlwZS5fX2dlbmVyYXRlZE1hcHBpbmdzPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KGtyLnByb3RvdHlwZSwiX2dlbmVyYXRlZE1hcHBpbmdzIix7Y29uZmlndXJhYmxlOnRydWUsZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbiBlKCl7aWYoIXRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyl7dGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncyx0aGlzLnNvdXJjZVJvb3QpfXJldHVybiB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3N9fSk7a3IucHJvdG90eXBlLl9fb3JpZ2luYWxNYXBwaW5ncz1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrci5wcm90b3R5cGUsIl9vcmlnaW5hbE1hcHBpbmdzIix7Y29uZmlndXJhYmxlOnRydWUsZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbiBlKCl7aWYoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKXt0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLHRoaXMuc291cmNlUm9vdCl9cmV0dXJuIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzfX0pO2tyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvcj1mdW5jdGlvbiBlKHQscil7dmFyIHM9dC5jaGFyQXQocik7cmV0dXJuIHM9PT0iOyJ8fHM9PT0iLCJ9O2tyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncz1mdW5jdGlvbiBlKHQscil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IF9wYXJzZU1hcHBpbmdzIil9O2tyLkdFTkVSQVRFRF9PUkRFUj0xO2tyLk9SSUdJTkFMX09SREVSPTI7a3IuR1JFQVRFU1RfTE9XRVJfQk9VTkQ9MTtrci5MRUFTVF9VUFBFUl9CT1VORD0yO2tyLnByb3RvdHlwZS5lYWNoTWFwcGluZz1mdW5jdGlvbiBlKHQscixzKXt2YXIgaT1yfHxudWxsO3ZhciBuPXN8fGtyLkdFTkVSQVRFRF9PUkRFUjt2YXIgYTtzd2l0Y2gobil7Y2FzZSBrci5HRU5FUkFURURfT1JERVI6YT10aGlzLl9nZW5lcmF0ZWRNYXBwaW5nczticmVhaztjYXNlIGtyLk9SSUdJTkFMX09SREVSOmE9dGhpcy5fb3JpZ2luYWxNYXBwaW5nczticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uIil9dmFyIG89dGhpcy5zb3VyY2VSb290O2EubWFwKChmdW5jdGlvbihlKXt2YXIgdD1lLnNvdXJjZT09PW51bGw/bnVsbDp0aGlzLl9zb3VyY2VzLmF0KGUuc291cmNlKTt0PUFyLmNvbXB1dGVTb3VyY2VVUkwobyx0LHRoaXMuX3NvdXJjZU1hcFVSTCk7cmV0dXJue3NvdXJjZTp0LGdlbmVyYXRlZExpbmU6ZS5nZW5lcmF0ZWRMaW5lLGdlbmVyYXRlZENvbHVtbjplLmdlbmVyYXRlZENvbHVtbixvcmlnaW5hbExpbmU6ZS5vcmlnaW5hbExpbmUsb3JpZ2luYWxDb2x1bW46ZS5vcmlnaW5hbENvbHVtbixuYW1lOmUubmFtZT09PW51bGw/bnVsbDp0aGlzLl9uYW1lcy5hdChlLm5hbWUpfX0pLHRoaXMpLmZvckVhY2godCxpKX07a3IucHJvdG90eXBlLmFsbEdlbmVyYXRlZFBvc2l0aW9uc0Zvcj1mdW5jdGlvbiBlKHQpe3ZhciByPUFyLmdldEFyZyh0LCJsaW5lIik7dmFyIHM9e3NvdXJjZTpBci5nZXRBcmcodCwic291cmNlIiksb3JpZ2luYWxMaW5lOnIsb3JpZ2luYWxDb2x1bW46QXIuZ2V0QXJnKHQsImNvbHVtbiIsMCl9O3Muc291cmNlPXRoaXMuX2ZpbmRTb3VyY2VJbmRleChzLnNvdXJjZSk7aWYocy5zb3VyY2U8MCl7cmV0dXJuW119dmFyIGk9W107dmFyIG49dGhpcy5fZmluZE1hcHBpbmcocyx0aGlzLl9vcmlnaW5hbE1hcHBpbmdzLCJvcmlnaW5hbExpbmUiLCJvcmlnaW5hbENvbHVtbiIsQXIuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsd3IuTEVBU1RfVVBQRVJfQk9VTkQpO2lmKG4+PTApe3ZhciBhPXRoaXMuX29yaWdpbmFsTWFwcGluZ3Nbbl07aWYodC5jb2x1bW49PT11bmRlZmluZWQpe3ZhciBvPWEub3JpZ2luYWxMaW5lO3doaWxlKGEmJmEub3JpZ2luYWxMaW5lPT09byl7aS5wdXNoKHtsaW5lOkFyLmdldEFyZyhhLCJnZW5lcmF0ZWRMaW5lIixudWxsKSxjb2x1bW46QXIuZ2V0QXJnKGEsImdlbmVyYXRlZENvbHVtbiIsbnVsbCksbGFzdENvbHVtbjpBci5nZXRBcmcoYSwibGFzdEdlbmVyYXRlZENvbHVtbiIsbnVsbCl9KTthPXRoaXMuX29yaWdpbmFsTWFwcGluZ3NbKytuXX19ZWxzZXt2YXIgbD1hLm9yaWdpbmFsQ29sdW1uO3doaWxlKGEmJmEub3JpZ2luYWxMaW5lPT09ciYmYS5vcmlnaW5hbENvbHVtbj09bCl7aS5wdXNoKHtsaW5lOkFyLmdldEFyZyhhLCJnZW5lcmF0ZWRMaW5lIixudWxsKSxjb2x1bW46QXIuZ2V0QXJnKGEsImdlbmVyYXRlZENvbHVtbiIsbnVsbCksbGFzdENvbHVtbjpBci5nZXRBcmcoYSwibGFzdEdlbmVyYXRlZENvbHVtbiIsbnVsbCl9KTthPXRoaXMuX29yaWdpbmFsTWFwcGluZ3NbKytuXX19fXJldHVybiBpfTt4ci5Tb3VyY2VNYXBDb25zdW1lcj1rcjtmdW5jdGlvbiBOcihlLHQpe3ZhciByPWU7aWYodHlwZW9mIGU9PT0ic3RyaW5nIil7cj1Bci5wYXJzZVNvdXJjZU1hcElucHV0KGUpfXZhciBzPUFyLmdldEFyZyhyLCJ2ZXJzaW9uIik7dmFyIGk9QXIuZ2V0QXJnKHIsInNvdXJjZXMiKTt2YXIgbj1Bci5nZXRBcmcociwibmFtZXMiLFtdKTt2YXIgYT1Bci5nZXRBcmcociwic291cmNlUm9vdCIsbnVsbCk7dmFyIG89QXIuZ2V0QXJnKHIsInNvdXJjZXNDb250ZW50IixudWxsKTt2YXIgbD1Bci5nZXRBcmcociwibWFwcGluZ3MiKTt2YXIgdT1Bci5nZXRBcmcociwiZmlsZSIsbnVsbCk7aWYocyE9dGhpcy5fdmVyc2lvbil7dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB2ZXJzaW9uOiAiK3MpfWlmKGEpe2E9QXIubm9ybWFsaXplKGEpfWk9aS5tYXAoU3RyaW5nKS5tYXAoQXIubm9ybWFsaXplKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBhJiZBci5pc0Fic29sdXRlKGEpJiZBci5pc0Fic29sdXRlKGUpP0FyLnJlbGF0aXZlKGEsZSk6ZX0pKTt0aGlzLl9uYW1lcz1Dci5mcm9tQXJyYXkobi5tYXAoU3RyaW5nKSx0cnVlKTt0aGlzLl9zb3VyY2VzPUNyLmZyb21BcnJheShpLHRydWUpO3RoaXMuX2Fic29sdXRlU291cmNlcz10aGlzLl9zb3VyY2VzLnRvQXJyYXkoKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBBci5jb21wdXRlU291cmNlVVJMKGEsZSx0KX0pKTt0aGlzLnNvdXJjZVJvb3Q9YTt0aGlzLnNvdXJjZXNDb250ZW50PW87dGhpcy5fbWFwcGluZ3M9bDt0aGlzLl9zb3VyY2VNYXBVUkw9dDt0aGlzLmZpbGU9dX1Oci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShrci5wcm90b3R5cGUpO05yLnByb3RvdHlwZS5jb25zdW1lcj1rcjtOci5wcm90b3R5cGUuX2ZpbmRTb3VyY2VJbmRleD1mdW5jdGlvbihlKXt2YXIgdD1lO2lmKHRoaXMuc291cmNlUm9vdCE9bnVsbCl7dD1Bci5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsdCl9aWYodGhpcy5fc291cmNlcy5oYXModCkpe3JldHVybiB0aGlzLl9zb3VyY2VzLmluZGV4T2YodCl9dmFyIHI7Zm9yKHI9MDtyPHRoaXMuX2Fic29sdXRlU291cmNlcy5sZW5ndGg7KytyKXtpZih0aGlzLl9hYnNvbHV0ZVNvdXJjZXNbcl09PWUpe3JldHVybiByfX1yZXR1cm4tMX07TnIuZnJvbVNvdXJjZU1hcD1mdW5jdGlvbiBlKHQscil7dmFyIHM9T2JqZWN0LmNyZWF0ZShOci5wcm90b3R5cGUpO3ZhciBpPXMuX25hbWVzPUNyLmZyb21BcnJheSh0Ll9uYW1lcy50b0FycmF5KCksdHJ1ZSk7dmFyIG49cy5fc291cmNlcz1Dci5mcm9tQXJyYXkodC5fc291cmNlcy50b0FycmF5KCksdHJ1ZSk7cy5zb3VyY2VSb290PXQuX3NvdXJjZVJvb3Q7cy5zb3VyY2VzQ29udGVudD10Ll9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KHMuX3NvdXJjZXMudG9BcnJheSgpLHMuc291cmNlUm9vdCk7cy5maWxlPXQuX2ZpbGU7cy5fc291cmNlTWFwVVJMPXI7cy5fYWJzb2x1dGVTb3VyY2VzPXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIEFyLmNvbXB1dGVTb3VyY2VVUkwocy5zb3VyY2VSb290LGUscil9KSk7dmFyIGE9dC5fbWFwcGluZ3MudG9BcnJheSgpLnNsaWNlKCk7dmFyIG89cy5fX2dlbmVyYXRlZE1hcHBpbmdzPVtdO3ZhciBsPXMuX19vcmlnaW5hbE1hcHBpbmdzPVtdO2Zvcih2YXIgdT0wLGM9YS5sZW5ndGg7dTxjO3UrKyl7dmFyIGg9YVt1XTt2YXIgcD1uZXcgSXI7cC5nZW5lcmF0ZWRMaW5lPWguZ2VuZXJhdGVkTGluZTtwLmdlbmVyYXRlZENvbHVtbj1oLmdlbmVyYXRlZENvbHVtbjtpZihoLnNvdXJjZSl7cC5zb3VyY2U9bi5pbmRleE9mKGguc291cmNlKTtwLm9yaWdpbmFsTGluZT1oLm9yaWdpbmFsTGluZTtwLm9yaWdpbmFsQ29sdW1uPWgub3JpZ2luYWxDb2x1bW47aWYoaC5uYW1lKXtwLm5hbWU9aS5pbmRleE9mKGgubmFtZSl9bC5wdXNoKHApfW8ucHVzaChwKX1EcihzLl9fb3JpZ2luYWxNYXBwaW5ncyxBci5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7cmV0dXJuIHN9O05yLnByb3RvdHlwZS5fdmVyc2lvbj0zO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOci5wcm90b3R5cGUsInNvdXJjZXMiLHtnZXQ6ZnVuY3Rpb24gZSgpe3JldHVybiB0aGlzLl9hYnNvbHV0ZVNvdXJjZXMuc2xpY2UoKX19KTtmdW5jdGlvbiBJcigpe3RoaXMuZ2VuZXJhdGVkTGluZT0wO3RoaXMuZ2VuZXJhdGVkQ29sdW1uPTA7dGhpcy5zb3VyY2U9bnVsbDt0aGlzLm9yaWdpbmFsTGluZT1udWxsO3RoaXMub3JpZ2luYWxDb2x1bW49bnVsbDt0aGlzLm5hbWU9bnVsbH1Oci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3M9ZnVuY3Rpb24gZSh0LHIpe3ZhciBzPTE7dmFyIGk9MDt2YXIgbj0wO3ZhciBhPTA7dmFyIG89MDt2YXIgbD0wO3ZhciB1PXQubGVuZ3RoO3ZhciBjPTA7dmFyIGg9e307dmFyIHA9e307dmFyIGY9W107dmFyIGQ9W107dmFyIG0seSxnLHgsdjt3aGlsZShjPHUpe2lmKHQuY2hhckF0KGMpPT09IjsiKXtzKys7YysrO2k9MH1lbHNlIGlmKHQuY2hhckF0KGMpPT09IiwiKXtjKyt9ZWxzZXttPW5ldyBJcjttLmdlbmVyYXRlZExpbmU9cztmb3IoeD1jO3g8dTt4Kyspe2lmKHRoaXMuX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IodCx4KSl7YnJlYWt9fXk9dC5zbGljZShjLHgpO2c9aFt5XTtpZihnKXtjKz15Lmxlbmd0aH1lbHNle2c9W107d2hpbGUoYzx4KXtQci5kZWNvZGUodCxjLHApO3Y9cC52YWx1ZTtjPXAucmVzdDtnLnB1c2godil9aWYoZy5sZW5ndGg9PT0yKXt0aHJvdyBuZXcgRXJyb3IoIkZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uIil9aWYoZy5sZW5ndGg9PT0zKXt0aHJvdyBuZXcgRXJyb3IoIkZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uIil9aFt5XT1nfW0uZ2VuZXJhdGVkQ29sdW1uPWkrZ1swXTtpPW0uZ2VuZXJhdGVkQ29sdW1uO2lmKGcubGVuZ3RoPjEpe20uc291cmNlPW8rZ1sxXTtvKz1nWzFdO20ub3JpZ2luYWxMaW5lPW4rZ1syXTtuPW0ub3JpZ2luYWxMaW5lO20ub3JpZ2luYWxMaW5lKz0xO20ub3JpZ2luYWxDb2x1bW49YStnWzNdO2E9bS5vcmlnaW5hbENvbHVtbjtpZihnLmxlbmd0aD40KXttLm5hbWU9bCtnWzRdO2wrPWdbNF19fWQucHVzaChtKTtpZih0eXBlb2YgbS5vcmlnaW5hbExpbmU9PT0ibnVtYmVyIil7Zi5wdXNoKG0pfX19RHIoZCxBci5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCk7dGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzPWQ7RHIoZixBci5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7dGhpcy5fX29yaWdpbmFsTWFwcGluZ3M9Zn07TnIucHJvdG90eXBlLl9maW5kTWFwcGluZz1mdW5jdGlvbiBlKHQscixzLGksbixhKXtpZih0W3NdPD0wKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAiK3Rbc10pfWlmKHRbaV08MCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAiK3RbaV0pfXJldHVybiB3ci5zZWFyY2godCxyLG4sYSl9O05yLnByb3RvdHlwZS5jb21wdXRlQ29sdW1uU3BhbnM9ZnVuY3Rpb24gZSgpe2Zvcih2YXIgdD0wO3Q8dGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOysrdCl7dmFyIHI9dGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbdF07aWYodCsxPHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aCl7dmFyIHM9dGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbdCsxXTtpZihyLmdlbmVyYXRlZExpbmU9PT1zLmdlbmVyYXRlZExpbmUpe3IubGFzdEdlbmVyYXRlZENvbHVtbj1zLmdlbmVyYXRlZENvbHVtbi0xO2NvbnRpbnVlfX1yLmxhc3RHZW5lcmF0ZWRDb2x1bW49SW5maW5pdHl9fTtOci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvcj1mdW5jdGlvbiBlKHQpe3ZhciByPXtnZW5lcmF0ZWRMaW5lOkFyLmdldEFyZyh0LCJsaW5lIiksZ2VuZXJhdGVkQ29sdW1uOkFyLmdldEFyZyh0LCJjb2x1bW4iKX07dmFyIHM9dGhpcy5fZmluZE1hcHBpbmcocix0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncywiZ2VuZXJhdGVkTGluZSIsImdlbmVyYXRlZENvbHVtbiIsQXIuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQsQXIuZ2V0QXJnKHQsImJpYXMiLGtyLkdSRUFURVNUX0xPV0VSX0JPVU5EKSk7aWYocz49MCl7dmFyIGk9dGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3Nbc107aWYoaS5nZW5lcmF0ZWRMaW5lPT09ci5nZW5lcmF0ZWRMaW5lKXt2YXIgbj1Bci5nZXRBcmcoaSwic291cmNlIixudWxsKTtpZihuIT09bnVsbCl7bj10aGlzLl9zb3VyY2VzLmF0KG4pO249QXIuY29tcHV0ZVNvdXJjZVVSTCh0aGlzLnNvdXJjZVJvb3Qsbix0aGlzLl9zb3VyY2VNYXBVUkwpfXZhciBhPUFyLmdldEFyZyhpLCJuYW1lIixudWxsKTtpZihhIT09bnVsbCl7YT10aGlzLl9uYW1lcy5hdChhKX1yZXR1cm57c291cmNlOm4sbGluZTpBci5nZXRBcmcoaSwib3JpZ2luYWxMaW5lIixudWxsKSxjb2x1bW46QXIuZ2V0QXJnKGksIm9yaWdpbmFsQ29sdW1uIixudWxsKSxuYW1lOmF9fX1yZXR1cm57c291cmNlOm51bGwsbGluZTpudWxsLGNvbHVtbjpudWxsLG5hbWU6bnVsbH19O05yLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcz1mdW5jdGlvbiBlKCl7aWYoIXRoaXMuc291cmNlc0NvbnRlbnQpe3JldHVybiBmYWxzZX1yZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGg+PXRoaXMuX3NvdXJjZXMuc2l6ZSgpJiYhdGhpcy5zb3VyY2VzQ29udGVudC5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZT09bnVsbH0pKX07TnIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3I9ZnVuY3Rpb24gZSh0LHIpe2lmKCF0aGlzLnNvdXJjZXNDb250ZW50KXtyZXR1cm4gbnVsbH12YXIgcz10aGlzLl9maW5kU291cmNlSW5kZXgodCk7aWYocz49MCl7cmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbc119dmFyIGk9dDtpZih0aGlzLnNvdXJjZVJvb3QhPW51bGwpe2k9QXIucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LGkpfXZhciBuO2lmKHRoaXMuc291cmNlUm9vdCE9bnVsbCYmKG49QXIudXJsUGFyc2UodGhpcy5zb3VyY2VSb290KSkpe3ZhciBhPWkucmVwbGFjZSgvXmZpbGU6XC9cLy8sIiIpO2lmKG4uc2NoZW1lPT0iZmlsZSImJnRoaXMuX3NvdXJjZXMuaGFzKGEpKXtyZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoYSldfWlmKCghbi5wYXRofHxuLnBhdGg9PSIvIikmJnRoaXMuX3NvdXJjZXMuaGFzKCIvIitpKSl7cmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKCIvIitpKV19fWlmKHIpe3JldHVybiBudWxsfWVsc2V7dGhyb3cgbmV3IEVycm9yKCciJytpKyciIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpfX07TnIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yPWZ1bmN0aW9uIGUodCl7dmFyIHI9QXIuZ2V0QXJnKHQsInNvdXJjZSIpO3I9dGhpcy5fZmluZFNvdXJjZUluZGV4KHIpO2lmKHI8MCl7cmV0dXJue2xpbmU6bnVsbCxjb2x1bW46bnVsbCxsYXN0Q29sdW1uOm51bGx9fXZhciBzPXtzb3VyY2U6cixvcmlnaW5hbExpbmU6QXIuZ2V0QXJnKHQsImxpbmUiKSxvcmlnaW5hbENvbHVtbjpBci5nZXRBcmcodCwiY29sdW1uIil9O3ZhciBpPXRoaXMuX2ZpbmRNYXBwaW5nKHMsdGhpcy5fb3JpZ2luYWxNYXBwaW5ncywib3JpZ2luYWxMaW5lIiwib3JpZ2luYWxDb2x1bW4iLEFyLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLEFyLmdldEFyZyh0LCJiaWFzIixrci5HUkVBVEVTVF9MT1dFUl9CT1VORCkpO2lmKGk+PTApe3ZhciBuPXRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaV07aWYobi5zb3VyY2U9PT1zLnNvdXJjZSl7cmV0dXJue2xpbmU6QXIuZ2V0QXJnKG4sImdlbmVyYXRlZExpbmUiLG51bGwpLGNvbHVtbjpBci5nZXRBcmcobiwiZ2VuZXJhdGVkQ29sdW1uIixudWxsKSxsYXN0Q29sdW1uOkFyLmdldEFyZyhuLCJsYXN0R2VuZXJhdGVkQ29sdW1uIixudWxsKX19fXJldHVybntsaW5lOm51bGwsY29sdW1uOm51bGwsbGFzdENvbHVtbjpudWxsfX07eHIuQmFzaWNTb3VyY2VNYXBDb25zdW1lcj1OcjtmdW5jdGlvbiBGcihlLHQpe3ZhciByPWU7aWYodHlwZW9mIGU9PT0ic3RyaW5nIil7cj1Bci5wYXJzZVNvdXJjZU1hcElucHV0KGUpfXZhciBzPUFyLmdldEFyZyhyLCJ2ZXJzaW9uIik7dmFyIGk9QXIuZ2V0QXJnKHIsInNlY3Rpb25zIik7aWYocyE9dGhpcy5fdmVyc2lvbil7dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB2ZXJzaW9uOiAiK3MpfXRoaXMuX3NvdXJjZXM9bmV3IENyO3RoaXMuX25hbWVzPW5ldyBDcjt2YXIgbj17bGluZTotMSxjb2x1bW46MH07dGhpcy5fc2VjdGlvbnM9aS5tYXAoKGZ1bmN0aW9uKGUpe2lmKGUudXJsKXt0aHJvdyBuZXcgRXJyb3IoIlN1cHBvcnQgZm9yIHVybCBmaWVsZCBpbiBzZWN0aW9ucyBub3QgaW1wbGVtZW50ZWQuIil9dmFyIHI9QXIuZ2V0QXJnKGUsIm9mZnNldCIpO3ZhciBzPUFyLmdldEFyZyhyLCJsaW5lIik7dmFyIGk9QXIuZ2V0QXJnKHIsImNvbHVtbiIpO2lmKHM8bi5saW5lfHxzPT09bi5saW5lJiZpPG4uY29sdW1uKXt0aHJvdyBuZXcgRXJyb3IoIlNlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4iKX1uPXI7cmV0dXJue2dlbmVyYXRlZE9mZnNldDp7Z2VuZXJhdGVkTGluZTpzKzEsZ2VuZXJhdGVkQ29sdW1uOmkrMX0sY29uc3VtZXI6bmV3IGtyKEFyLmdldEFyZyhlLCJtYXAiKSx0KX19KSl9RnIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoa3IucHJvdG90eXBlKTtGci5wcm90b3R5cGUuY29uc3RydWN0b3I9a3I7RnIucHJvdG90eXBlLl92ZXJzaW9uPTM7T2JqZWN0LmRlZmluZVByb3BlcnR5KEZyLnByb3RvdHlwZSwic291cmNlcyIse2dldDpmdW5jdGlvbiBlKCl7dmFyIHQ9W107Zm9yKHZhciByPTA7cjx0aGlzLl9zZWN0aW9ucy5sZW5ndGg7cisrKXtmb3IodmFyIHM9MDtzPHRoaXMuX3NlY3Rpb25zW3JdLmNvbnN1bWVyLnNvdXJjZXMubGVuZ3RoO3MrKyl7dC5wdXNoKHRoaXMuX3NlY3Rpb25zW3JdLmNvbnN1bWVyLnNvdXJjZXNbc10pfX1yZXR1cm4gdH19KTtGci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvcj1mdW5jdGlvbiBlKHQpe3ZhciByPXtnZW5lcmF0ZWRMaW5lOkFyLmdldEFyZyh0LCJsaW5lIiksZ2VuZXJhdGVkQ29sdW1uOkFyLmdldEFyZyh0LCJjb2x1bW4iKX07dmFyIHM9d3Iuc2VhcmNoKHIsdGhpcy5fc2VjdGlvbnMsKGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5nZW5lcmF0ZWRMaW5lLXQuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmU7aWYocil7cmV0dXJuIHJ9cmV0dXJuIGUuZ2VuZXJhdGVkQ29sdW1uLXQuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbn0pKTt2YXIgaT10aGlzLl9zZWN0aW9uc1tzXTtpZighaSl7cmV0dXJue3NvdXJjZTpudWxsLGxpbmU6bnVsbCxjb2x1bW46bnVsbCxuYW1lOm51bGx9fXJldHVybiBpLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe2xpbmU6ci5nZW5lcmF0ZWRMaW5lLShpLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lLTEpLGNvbHVtbjpyLmdlbmVyYXRlZENvbHVtbi0oaS5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZT09PXIuZ2VuZXJhdGVkTGluZT9pLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4tMTowKSxiaWFzOnQuYmlhc30pfTtGci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXM9ZnVuY3Rpb24gZSgpe3JldHVybiB0aGlzLl9zZWN0aW9ucy5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29uc3VtZXIuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKX0pKX07RnIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3I9ZnVuY3Rpb24gZSh0LHIpe2Zvcih2YXIgcz0wO3M8dGhpcy5fc2VjdGlvbnMubGVuZ3RoO3MrKyl7dmFyIGk9dGhpcy5fc2VjdGlvbnNbc107dmFyIG49aS5jb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHQsdHJ1ZSk7aWYobil7cmV0dXJuIG59fWlmKHIpe3JldHVybiBudWxsfWVsc2V7dGhyb3cgbmV3IEVycm9yKCciJyt0KyciIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpfX07RnIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yPWZ1bmN0aW9uIGUodCl7Zm9yKHZhciByPTA7cjx0aGlzLl9zZWN0aW9ucy5sZW5ndGg7cisrKXt2YXIgcz10aGlzLl9zZWN0aW9uc1tyXTtpZihzLmNvbnN1bWVyLl9maW5kU291cmNlSW5kZXgoQXIuZ2V0QXJnKHQsInNvdXJjZSIpKT09PS0xKXtjb250aW51ZX12YXIgaT1zLmNvbnN1bWVyLmdlbmVyYXRlZFBvc2l0aW9uRm9yKHQpO2lmKGkpe3ZhciBuPXtsaW5lOmkubGluZSsocy5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZS0xKSxjb2x1bW46aS5jb2x1bW4rKHMuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmU9PT1pLmxpbmU/cy5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uLTE6MCl9O3JldHVybiBufX1yZXR1cm57bGluZTpudWxsLGNvbHVtbjpudWxsfX07RnIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzPWZ1bmN0aW9uIGUodCxyKXt0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3M9W107dGhpcy5fX29yaWdpbmFsTWFwcGluZ3M9W107Zm9yKHZhciBzPTA7czx0aGlzLl9zZWN0aW9ucy5sZW5ndGg7cysrKXt2YXIgaT10aGlzLl9zZWN0aW9uc1tzXTt2YXIgbj1pLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncztmb3IodmFyIGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXTt2YXIgbD1pLmNvbnN1bWVyLl9zb3VyY2VzLmF0KG8uc291cmNlKTtsPUFyLmNvbXB1dGVTb3VyY2VVUkwoaS5jb25zdW1lci5zb3VyY2VSb290LGwsdGhpcy5fc291cmNlTWFwVVJMKTt0aGlzLl9zb3VyY2VzLmFkZChsKTtsPXRoaXMuX3NvdXJjZXMuaW5kZXhPZihsKTt2YXIgdT1udWxsO2lmKG8ubmFtZSl7dT1pLmNvbnN1bWVyLl9uYW1lcy5hdChvLm5hbWUpO3RoaXMuX25hbWVzLmFkZCh1KTt1PXRoaXMuX25hbWVzLmluZGV4T2YodSl9dmFyIGM9e3NvdXJjZTpsLGdlbmVyYXRlZExpbmU6by5nZW5lcmF0ZWRMaW5lKyhpLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lLTEpLGdlbmVyYXRlZENvbHVtbjpvLmdlbmVyYXRlZENvbHVtbisoaS5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZT09PW8uZ2VuZXJhdGVkTGluZT9pLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4tMTowKSxvcmlnaW5hbExpbmU6by5vcmlnaW5hbExpbmUsb3JpZ2luYWxDb2x1bW46by5vcmlnaW5hbENvbHVtbixuYW1lOnV9O3RoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKGMpO2lmKHR5cGVvZiBjLm9yaWdpbmFsTGluZT09PSJudW1iZXIiKXt0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncy5wdXNoKGMpfX19RHIodGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLEFyLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtEcih0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyxBci5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyl9O3hyLkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcj1Gcjt2YXIgTXI9e307dmFyIF9yPXF0LlNvdXJjZU1hcEdlbmVyYXRvcjt2YXIgT3I9ZXI7dmFyIExyPS8oXHI/XG4pLzt2YXIgQnI9MTA7dmFyIFJyPSIkJCRpc1NvdXJjZU5vZGUkJCQiO2Z1bmN0aW9uIGpyKGUsdCxyLHMsaSl7dGhpcy5jaGlsZHJlbj1bXTt0aGlzLnNvdXJjZUNvbnRlbnRzPXt9O3RoaXMubGluZT1lPT1udWxsP251bGw6ZTt0aGlzLmNvbHVtbj10PT1udWxsP251bGw6dDt0aGlzLnNvdXJjZT1yPT1udWxsP251bGw6cjt0aGlzLm5hbWU9aT09bnVsbD9udWxsOmk7dGhpc1tScl09dHJ1ZTtpZihzIT1udWxsKXRoaXMuYWRkKHMpfWpyLmZyb21TdHJpbmdXaXRoU291cmNlTWFwPWZ1bmN0aW9uIGUodCxyLHMpe3ZhciBpPW5ldyBqcjt2YXIgbj10LnNwbGl0KExyKTt2YXIgYT0wO3ZhciBvPWZ1bmN0aW9uIGUoKXt2YXIgdD1zKCk7dmFyIHI9cygpfHwiIjtyZXR1cm4gdCtyO2Z1bmN0aW9uIHMoKXtyZXR1cm4gYTxuLmxlbmd0aD9uW2ErK106dW5kZWZpbmVkfX07dmFyIGw9MSx1PTA7dmFyIGM9bnVsbDtyLmVhY2hNYXBwaW5nKChmdW5jdGlvbihlKXtpZihjIT09bnVsbCl7aWYobDxlLmdlbmVyYXRlZExpbmUpe2goYyxvKCkpO2wrKzt1PTB9ZWxzZXt2YXIgdD1uW2FdfHwiIjt2YXIgcj10LnN1YnN0cigwLGUuZ2VuZXJhdGVkQ29sdW1uLXUpO25bYV09dC5zdWJzdHIoZS5nZW5lcmF0ZWRDb2x1bW4tdSk7dT1lLmdlbmVyYXRlZENvbHVtbjtoKGMscik7Yz1lO3JldHVybn19d2hpbGUobDxlLmdlbmVyYXRlZExpbmUpe2kuYWRkKG8oKSk7bCsrfWlmKHU8ZS5nZW5lcmF0ZWRDb2x1bW4pe3ZhciB0PW5bYV18fCIiO2kuYWRkKHQuc3Vic3RyKDAsZS5nZW5lcmF0ZWRDb2x1bW4pKTtuW2FdPXQuc3Vic3RyKGUuZ2VuZXJhdGVkQ29sdW1uKTt1PWUuZ2VuZXJhdGVkQ29sdW1ufWM9ZX0pLHRoaXMpO2lmKGE8bi5sZW5ndGgpe2lmKGMpe2goYyxvKCkpfWkuYWRkKG4uc3BsaWNlKGEpLmpvaW4oIiIpKX1yLnNvdXJjZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ci5zb3VyY2VDb250ZW50Rm9yKGUpO2lmKHQhPW51bGwpe2lmKHMhPW51bGwpe2U9T3Iuam9pbihzLGUpfWkuc2V0U291cmNlQ29udGVudChlLHQpfX0pKTtyZXR1cm4gaTtmdW5jdGlvbiBoKGUsdCl7aWYoZT09PW51bGx8fGUuc291cmNlPT09dW5kZWZpbmVkKXtpLmFkZCh0KX1lbHNle3ZhciByPXM/T3Iuam9pbihzLGUuc291cmNlKTplLnNvdXJjZTtpLmFkZChuZXcganIoZS5vcmlnaW5hbExpbmUsZS5vcmlnaW5hbENvbHVtbixyLHQsZS5uYW1lKSl9fX07anIucHJvdG90eXBlLmFkZD1mdW5jdGlvbiBlKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dGhpcy5hZGQoZSl9KSx0aGlzKX1lbHNlIGlmKHRbUnJdfHx0eXBlb2YgdD09PSJzdHJpbmciKXtpZih0KXt0aGlzLmNoaWxkcmVuLnB1c2godCl9fWVsc2V7dGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBTb3VyY2VOb2RlLCBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIFNvdXJjZU5vZGVzIGFuZCBzdHJpbmdzLiBHb3QgIit0KX1yZXR1cm4gdGhpc307anIucHJvdG90eXBlLnByZXBlbmQ9ZnVuY3Rpb24gZSh0KXtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIHI9dC5sZW5ndGgtMTtyPj0wO3ItLSl7dGhpcy5wcmVwZW5kKHRbcl0pfX1lbHNlIGlmKHRbUnJdfHx0eXBlb2YgdD09PSJzdHJpbmciKXt0aGlzLmNoaWxkcmVuLnVuc2hpZnQodCl9ZWxzZXt0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIFNvdXJjZU5vZGUsIHN0cmluZywgb3IgYW4gYXJyYXkgb2YgU291cmNlTm9kZXMgYW5kIHN0cmluZ3MuIEdvdCAiK3QpfXJldHVybiB0aGlzfTtqci5wcm90b3R5cGUud2Fsaz1mdW5jdGlvbiBlKHQpe3ZhciByO2Zvcih2YXIgcz0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7czxpO3MrKyl7cj10aGlzLmNoaWxkcmVuW3NdO2lmKHJbUnJdKXtyLndhbGsodCl9ZWxzZXtpZihyIT09IiIpe3Qocix7c291cmNlOnRoaXMuc291cmNlLGxpbmU6dGhpcy5saW5lLGNvbHVtbjp0aGlzLmNvbHVtbixuYW1lOnRoaXMubmFtZX0pfX19fTtqci5wcm90b3R5cGUuam9pbj1mdW5jdGlvbiBlKHQpe3ZhciByO3ZhciBzO3ZhciBpPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2lmKGk+MCl7cj1bXTtmb3Iocz0wO3M8aS0xO3MrKyl7ci5wdXNoKHRoaXMuY2hpbGRyZW5bc10pO3IucHVzaCh0KX1yLnB1c2godGhpcy5jaGlsZHJlbltzXSk7dGhpcy5jaGlsZHJlbj1yfXJldHVybiB0aGlzfTtqci5wcm90b3R5cGUucmVwbGFjZVJpZ2h0PWZ1bmN0aW9uIGUodCxyKXt2YXIgcz10aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoLTFdO2lmKHNbUnJdKXtzLnJlcGxhY2VSaWdodCh0LHIpfWVsc2UgaWYodHlwZW9mIHM9PT0ic3RyaW5nIil7dGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aC0xXT1zLnJlcGxhY2UodCxyKX1lbHNle3RoaXMuY2hpbGRyZW4ucHVzaCgiIi5yZXBsYWNlKHQscikpfXJldHVybiB0aGlzfTtqci5wcm90b3R5cGUuc2V0U291cmNlQ29udGVudD1mdW5jdGlvbiBlKHQscil7dGhpcy5zb3VyY2VDb250ZW50c1tPci50b1NldFN0cmluZyh0KV09cn07anIucHJvdG90eXBlLndhbGtTb3VyY2VDb250ZW50cz1mdW5jdGlvbiBlKHQpe2Zvcih2YXIgcj0wLHM9dGhpcy5jaGlsZHJlbi5sZW5ndGg7cjxzO3IrKyl7aWYodGhpcy5jaGlsZHJlbltyXVtScl0pe3RoaXMuY2hpbGRyZW5bcl0ud2Fsa1NvdXJjZUNvbnRlbnRzKHQpfX12YXIgaT1PYmplY3Qua2V5cyh0aGlzLnNvdXJjZUNvbnRlbnRzKTtmb3IodmFyIHI9MCxzPWkubGVuZ3RoO3I8cztyKyspe3QoT3IuZnJvbVNldFN0cmluZyhpW3JdKSx0aGlzLnNvdXJjZUNvbnRlbnRzW2lbcl1dKX19O2pyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbiBlKCl7dmFyIHQ9IiI7dGhpcy53YWxrKChmdW5jdGlvbihlKXt0Kz1lfSkpO3JldHVybiB0fTtqci5wcm90b3R5cGUudG9TdHJpbmdXaXRoU291cmNlTWFwPWZ1bmN0aW9uIGUodCl7dmFyIHI9e2NvZGU6IiIsbGluZToxLGNvbHVtbjowfTt2YXIgcz1uZXcgX3IodCk7dmFyIGk9ZmFsc2U7dmFyIG49bnVsbDt2YXIgYT1udWxsO3ZhciBvPW51bGw7dmFyIGw9bnVsbDt0aGlzLndhbGsoKGZ1bmN0aW9uKGUsdCl7ci5jb2RlKz1lO2lmKHQuc291cmNlIT09bnVsbCYmdC5saW5lIT09bnVsbCYmdC5jb2x1bW4hPT1udWxsKXtpZihuIT09dC5zb3VyY2V8fGEhPT10LmxpbmV8fG8hPT10LmNvbHVtbnx8bCE9PXQubmFtZSl7cy5hZGRNYXBwaW5nKHtzb3VyY2U6dC5zb3VyY2Usb3JpZ2luYWw6e2xpbmU6dC5saW5lLGNvbHVtbjp0LmNvbHVtbn0sZ2VuZXJhdGVkOntsaW5lOnIubGluZSxjb2x1bW46ci5jb2x1bW59LG5hbWU6dC5uYW1lfSl9bj10LnNvdXJjZTthPXQubGluZTtvPXQuY29sdW1uO2w9dC5uYW1lO2k9dHJ1ZX1lbHNlIGlmKGkpe3MuYWRkTWFwcGluZyh7Z2VuZXJhdGVkOntsaW5lOnIubGluZSxjb2x1bW46ci5jb2x1bW59fSk7bj1udWxsO2k9ZmFsc2V9Zm9yKHZhciB1PTAsYz1lLmxlbmd0aDt1PGM7dSsrKXtpZihlLmNoYXJDb2RlQXQodSk9PT1Ccil7ci5saW5lKys7ci5jb2x1bW49MDtpZih1KzE9PT1jKXtuPW51bGw7aT1mYWxzZX1lbHNlIGlmKGkpe3MuYWRkTWFwcGluZyh7c291cmNlOnQuc291cmNlLG9yaWdpbmFsOntsaW5lOnQubGluZSxjb2x1bW46dC5jb2x1bW59LGdlbmVyYXRlZDp7bGluZTpyLmxpbmUsY29sdW1uOnIuY29sdW1ufSxuYW1lOnQubmFtZX0pfX1lbHNle3IuY29sdW1uKyt9fX0pKTt0aGlzLndhbGtTb3VyY2VDb250ZW50cygoZnVuY3Rpb24oZSx0KXtzLnNldFNvdXJjZUNvbnRlbnQoZSx0KX0pKTtyZXR1cm57Y29kZTpyLmNvZGUsbWFwOnN9fTtNci5Tb3VyY2VOb2RlPWpyO1Z0LlNvdXJjZU1hcEdlbmVyYXRvcj1xdC5Tb3VyY2VNYXBHZW5lcmF0b3I7VnQuU291cmNlTWFwQ29uc3VtZXI9eHIuU291cmNlTWFwQ29uc3VtZXI7VnQuU291cmNlTm9kZT1Nci5Tb3VyY2VOb2RlO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh6dCwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTt6dC5pc1RyYWlsaW5nQ29tbWFFbmFibGVkPXp0LmdldFBhcmVudEV4cG9ydERlY2xhcmF0aW9uPXp0LmlzRXhwb3J0RGVjbGFyYXRpb249enQuZml4RmF1bHR5TG9jYXRpb25zPXp0LmdldFRydWVMb2M9WnI9enQuY29tcG9zZVNvdXJjZU1hcHM9enQuY29weVBvcz16dC5jb21wYXJlUG9zPXp0LmdldFVuaW9uT2ZLZXlzPXp0LmdldE9wdGlvbj12b2lkIDA7dmFyIFVyPVI7dmFyIHpyPVVyLl9faW1wb3J0RGVmYXVsdChSdCk7dmFyIFZyPVVyLl9faW1wb3J0U3RhcihqKTt2YXIgcXI9VnIubmFtZWRUeXBlczt2YXIgR3I9VXIuX19pbXBvcnREZWZhdWx0KFZ0KTt2YXIgWHI9R3IuZGVmYXVsdC5Tb3VyY2VNYXBDb25zdW1lcjt2YXIgSnI9R3IuZGVmYXVsdC5Tb3VyY2VNYXBHZW5lcmF0b3I7dmFyIEhyPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gV3IoZSx0LHIpe2lmKGUmJkhyLmNhbGwoZSx0KSl7cmV0dXJuIGVbdF19cmV0dXJuIHJ9enQuZ2V0T3B0aW9uPVdyO2Z1bmN0aW9uIEtyKCl7dmFyIGU9W107Zm9yKHZhciB0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7ZVt0XT1hcmd1bWVudHNbdF19dmFyIHI9e307dmFyIHM9ZS5sZW5ndGg7Zm9yKHZhciBpPTA7aTxzOysraSl7dmFyIG49T2JqZWN0LmtleXMoZVtpXSk7dmFyIGE9bi5sZW5ndGg7Zm9yKHZhciBvPTA7bzxhOysrbyl7cltuW29dXT10cnVlfX1yZXR1cm4gcn16dC5nZXRVbmlvbk9mS2V5cz1LcjtmdW5jdGlvbiAkcihlLHQpe3JldHVybiBlLmxpbmUtdC5saW5lfHxlLmNvbHVtbi10LmNvbHVtbn16dC5jb21wYXJlUG9zPSRyO2Z1bmN0aW9uIFlyKGUpe3JldHVybntsaW5lOmUubGluZSxjb2x1bW46ZS5jb2x1bW59fXp0LmNvcHlQb3M9WXI7ZnVuY3Rpb24gUXIoZSx0KXtpZihlKXtpZighdCl7cmV0dXJuIGV9fWVsc2V7cmV0dXJuIHR8fG51bGx9dmFyIHI9bmV3IFhyKGUpO3ZhciBzPW5ldyBYcih0KTt2YXIgaT1uZXcgSnIoe2ZpbGU6dC5maWxlLHNvdXJjZVJvb3Q6dC5zb3VyY2VSb290fSk7dmFyIG49e307cy5lYWNoTWFwcGluZygoZnVuY3Rpb24oZSl7dmFyIHQ9ci5vcmlnaW5hbFBvc2l0aW9uRm9yKHtsaW5lOmUub3JpZ2luYWxMaW5lLGNvbHVtbjplLm9yaWdpbmFsQ29sdW1ufSk7dmFyIHM9dC5zb3VyY2U7aWYocz09PW51bGwpe3JldHVybn1pLmFkZE1hcHBpbmcoe3NvdXJjZTpzLG9yaWdpbmFsOllyKHQpLGdlbmVyYXRlZDp7bGluZTplLmdlbmVyYXRlZExpbmUsY29sdW1uOmUuZ2VuZXJhdGVkQ29sdW1ufSxuYW1lOmUubmFtZX0pO3ZhciBhPXIuc291cmNlQ29udGVudEZvcihzKTtpZihhJiYhSHIuY2FsbChuLHMpKXtuW3NdPWE7aS5zZXRTb3VyY2VDb250ZW50KHMsYSl9fSkpO3JldHVybiBpLnRvSlNPTigpfXZhciBacj16dC5jb21wb3NlU291cmNlTWFwcz1RcjtmdW5jdGlvbiBlcyhlLHQpe2lmKCFlLmxvYyl7cmV0dXJuIG51bGx9dmFyIHI9e3N0YXJ0OmUubG9jLnN0YXJ0LGVuZDplLmxvYy5lbmR9O2Z1bmN0aW9uIHMoZSl7dHMocixlLmxvYyl9aWYoZS5kZWNsYXJhdGlvbiYmZS5kZWNsYXJhdGlvbi5kZWNvcmF0b3JzJiZucyhlKSl7ZS5kZWNsYXJhdGlvbi5kZWNvcmF0b3JzLmZvckVhY2gocyl9aWYoJHIoci5zdGFydCxyLmVuZCk8MCl7ci5zdGFydD1ZcihyLnN0YXJ0KTt0LnNraXBTcGFjZXMoci5zdGFydCxmYWxzZSx0cnVlKTtpZigkcihyLnN0YXJ0LHIuZW5kKTwwKXtyLmVuZD1ZcihyLmVuZCk7dC5za2lwU3BhY2VzKHIuZW5kLHRydWUsdHJ1ZSl9fWlmKGUuY29tbWVudHMpe2UuY29tbWVudHMuZm9yRWFjaChzKX1yZXR1cm4gcn16dC5nZXRUcnVlTG9jPWVzO2Z1bmN0aW9uIHRzKGUsdCl7aWYoZSYmdCl7aWYoJHIodC5zdGFydCxlLnN0YXJ0KTwwKXtlLnN0YXJ0PXQuc3RhcnR9aWYoJHIoZS5lbmQsdC5lbmQpPDApe2UuZW5kPXQuZW5kfX19ZnVuY3Rpb24gcnMoZSx0KXt2YXIgcj1lLmxvYztpZihyKXtpZihyLnN0YXJ0LmxpbmU8MSl7ci5zdGFydC5saW5lPTF9aWYoci5lbmQubGluZTwxKXtyLmVuZC5saW5lPTF9fWlmKGUudHlwZT09PSJGaWxlIil7ci5zdGFydD10LmZpcnN0UG9zKCk7ci5lbmQ9dC5sYXN0UG9zKCl9c3MoZSx0KTtpcyhlLHQpO2lmKHImJmUuZGVjb3JhdG9ycyl7ZS5kZWNvcmF0b3JzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3RzKHIsZS5sb2MpfSkpfWVsc2UgaWYoZS5kZWNsYXJhdGlvbiYmbnMoZSkpe2UuZGVjbGFyYXRpb24ubG9jPW51bGw7dmFyIHM9ZS5kZWNsYXJhdGlvbi5kZWNvcmF0b3JzO2lmKHMpe3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dHMocixlLmxvYyl9KSl9fWVsc2UgaWYocXIuTWV0aG9kRGVmaW5pdGlvbiYmcXIuTWV0aG9kRGVmaW5pdGlvbi5jaGVjayhlKXx8cXIuUHJvcGVydHkuY2hlY2soZSkmJihlLm1ldGhvZHx8ZS5zaG9ydGhhbmQpKXtlLnZhbHVlLmxvYz1udWxsO2lmKHFyLkZ1bmN0aW9uRXhwcmVzc2lvbi5jaGVjayhlLnZhbHVlKSl7ZS52YWx1ZS5pZD1udWxsfX1lbHNlIGlmKGUudHlwZT09PSJPYmplY3RUeXBlUHJvcGVydHkiKXt2YXIgaT1lLmxvYzt2YXIgbj1pJiZpLmVuZDtpZihuKXtuPVlyKG4pO2lmKHQucHJldlBvcyhuKSYmdC5jaGFyQXQobik9PT0iLCIpe2lmKG49dC5za2lwU3BhY2VzKG4sdHJ1ZSx0cnVlKSl7aS5lbmQ9bn19fX19enQuZml4RmF1bHR5TG9jYXRpb25zPXJzO2Z1bmN0aW9uIHNzKGUsdCl7aWYoZS50eXBlIT09IkZvclN0YXRlbWVudCIpe3JldHVybn1mdW5jdGlvbiByKGUpe3ZhciByPWUmJmUubG9jO3ZhciBzPXImJnIuc3RhcnQ7dmFyIGk9ciYmWXIoci5lbmQpO3doaWxlKHMmJmkmJiRyKHMsaSk8MCl7dC5wcmV2UG9zKGkpO2lmKHQuY2hhckF0KGkpPT09IjsiKXtyLmVuZC5saW5lPWkubGluZTtyLmVuZC5jb2x1bW49aS5jb2x1bW59ZWxzZXticmVha319fXIoZS5pbml0KTtyKGUudGVzdCk7cihlLnVwZGF0ZSl9ZnVuY3Rpb24gaXMoZSx0KXtpZihlLnR5cGUhPT0iVGVtcGxhdGVMaXRlcmFsIil7cmV0dXJufWlmKGUucXVhc2lzLmxlbmd0aD09PTApe3JldHVybn1pZihlLmxvYyl7dmFyIHI9WXIoZS5sb2Muc3RhcnQpO3pyLmRlZmF1bHQuc3RyaWN0RXF1YWwodC5jaGFyQXQociksImAiKTt6ci5kZWZhdWx0Lm9rKHQubmV4dFBvcyhyKSk7dmFyIHM9ZS5xdWFzaXNbMF07aWYoJHIocy5sb2Muc3RhcnQscik8MCl7cy5sb2Muc3RhcnQ9cn12YXIgaT1ZcihlLmxvYy5lbmQpO3pyLmRlZmF1bHQub2sodC5wcmV2UG9zKGkpKTt6ci5kZWZhdWx0LnN0cmljdEVxdWFsKHQuY2hhckF0KGkpLCJgIik7dmFyIG49ZS5xdWFzaXNbZS5xdWFzaXMubGVuZ3RoLTFdO2lmKCRyKGksbi5sb2MuZW5kKTwwKXtuLmxvYy5lbmQ9aX19ZS5leHByZXNzaW9ucy5mb3JFYWNoKChmdW5jdGlvbihyLHMpe3ZhciBpPXQuc2tpcFNwYWNlcyhyLmxvYy5zdGFydCx0cnVlLGZhbHNlKTtpZih0LnByZXZQb3MoaSkmJnQuY2hhckF0KGkpPT09InsiJiZ0LnByZXZQb3MoaSkmJnQuY2hhckF0KGkpPT09IiQiKXt2YXIgbj1lLnF1YXNpc1tzXTtpZigkcihpLG4ubG9jLmVuZCk8MCl7bi5sb2MuZW5kPWl9fXZhciBhPXQuc2tpcFNwYWNlcyhyLmxvYy5lbmQsZmFsc2UsZmFsc2UpO2lmKHQuY2hhckF0KGEpPT09In0iKXt6ci5kZWZhdWx0Lm9rKHQubmV4dFBvcyhhKSk7dmFyIG89ZS5xdWFzaXNbcysxXTtpZigkcihvLmxvYy5zdGFydCxhKTwwKXtvLmxvYy5zdGFydD1hfX19KSl9ZnVuY3Rpb24gbnMoZSl7aWYoZSlzd2l0Y2goZS50eXBlKXtjYXNlIkV4cG9ydERlY2xhcmF0aW9uIjpjYXNlIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiI6Y2FzZSJFeHBvcnREZWZhdWx0U3BlY2lmaWVyIjpjYXNlIkRlY2xhcmVFeHBvcnREZWNsYXJhdGlvbiI6Y2FzZSJFeHBvcnROYW1lZERlY2xhcmF0aW9uIjpjYXNlIkV4cG9ydEFsbERlY2xhcmF0aW9uIjpyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9enQuaXNFeHBvcnREZWNsYXJhdGlvbj1ucztmdW5jdGlvbiBhcyhlKXt2YXIgdD1lLmdldFBhcmVudE5vZGUoKTtpZihlLmdldE5hbWUoKT09PSJkZWNsYXJhdGlvbiImJm5zKHQpKXtyZXR1cm4gdH1yZXR1cm4gbnVsbH16dC5nZXRQYXJlbnRFeHBvcnREZWNsYXJhdGlvbj1hcztmdW5jdGlvbiBvcyhlLHQpe3ZhciByPWUudHJhaWxpbmdDb21tYTtpZih0eXBlb2Ygcj09PSJvYmplY3QiKXtyZXR1cm4hIXJbdF19cmV0dXJuISFyfXp0LmlzVHJhaWxpbmdDb21tYUVuYWJsZWQ9b3M7dmFyIGxzPXtleHBvcnRzOnt9fTsoZnVuY3Rpb24oZSx0KXsoZnVuY3Rpb24gdChyLHMpe2UuZXhwb3J0cz1zKCl9KSh0aGlzLChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiByKHMpe2lmKHRbc10pcmV0dXJuIHRbc10uZXhwb3J0czt2YXIgaT10W3NdPXtleHBvcnRzOnt9LGlkOnMsbG9hZGVkOmZhbHNlfTtlW3NdLmNhbGwoaS5leHBvcnRzLGksaS5leHBvcnRzLHIpO2kubG9hZGVkPXRydWU7cmV0dXJuIGkuZXhwb3J0c31yLm09ZTtyLmM9dDtyLnA9IiI7cmV0dXJuIHIoMCl9KFtmdW5jdGlvbihlLHQscil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTp0cnVlfSk7dmFyIHM9cigxKTt2YXIgaT1yKDMpO3ZhciBuPXIoOCk7dmFyIGE9cigxNSk7ZnVuY3Rpb24gbyhlLHQscil7dmFyIGE9bnVsbDt2YXIgbz1mdW5jdGlvbiBlKHQscyl7aWYocil7cih0LHMpfWlmKGEpe2EudmlzaXQodCxzKX19O3ZhciBsPXR5cGVvZiByPT09ImZ1bmN0aW9uIj9vOm51bGw7dmFyIHU9ZmFsc2U7aWYodCl7dT10eXBlb2YgdC5jb21tZW50PT09ImJvb2xlYW4iJiZ0LmNvbW1lbnQ7dmFyIGM9dHlwZW9mIHQuYXR0YWNoQ29tbWVudD09PSJib29sZWFuIiYmdC5hdHRhY2hDb21tZW50O2lmKHV8fGMpe2E9bmV3IHMuQ29tbWVudEhhbmRsZXI7YS5hdHRhY2g9Yzt0LmNvbW1lbnQ9dHJ1ZTtsPW99fXZhciBoPWZhbHNlO2lmKHQmJnR5cGVvZiB0LnNvdXJjZVR5cGU9PT0ic3RyaW5nIil7aD10LnNvdXJjZVR5cGU9PT0ibW9kdWxlIn12YXIgcDtpZih0JiZ0eXBlb2YgdC5qc3g9PT0iYm9vbGVhbiImJnQuanN4KXtwPW5ldyBpLkpTWFBhcnNlcihlLHQsbCl9ZWxzZXtwPW5ldyBuLlBhcnNlcihlLHQsbCl9dmFyIGY9aD9wLnBhcnNlTW9kdWxlKCk6cC5wYXJzZVNjcmlwdCgpO3ZhciBkPWY7aWYodSYmYSl7ZC5jb21tZW50cz1hLmNvbW1lbnRzfWlmKHAuY29uZmlnLnRva2Vucyl7ZC50b2tlbnM9cC50b2tlbnN9aWYocC5jb25maWcudG9sZXJhbnQpe2QuZXJyb3JzPXAuZXJyb3JIYW5kbGVyLmVycm9yc31yZXR1cm4gZH10LnBhcnNlPW87ZnVuY3Rpb24gbChlLHQscil7dmFyIHM9dHx8e307cy5zb3VyY2VUeXBlPSJtb2R1bGUiO3JldHVybiBvKGUscyxyKX10LnBhcnNlTW9kdWxlPWw7ZnVuY3Rpb24gdShlLHQscil7dmFyIHM9dHx8e307cy5zb3VyY2VUeXBlPSJzY3JpcHQiO3JldHVybiBvKGUscyxyKX10LnBhcnNlU2NyaXB0PXU7ZnVuY3Rpb24gYyhlLHQscil7dmFyIHM9bmV3IGEuVG9rZW5pemVyKGUsdCk7dmFyIGk7aT1bXTt0cnl7d2hpbGUodHJ1ZSl7dmFyIG49cy5nZXROZXh0VG9rZW4oKTtpZighbil7YnJlYWt9aWYocil7bj1yKG4pfWkucHVzaChuKX19Y2F0Y2goZSl7cy5lcnJvckhhbmRsZXIudG9sZXJhdGUoZSl9aWYocy5lcnJvckhhbmRsZXIudG9sZXJhbnQpe2kuZXJyb3JzPXMuZXJyb3JzKCl9cmV0dXJuIGl9dC50b2tlbml6ZT1jO3ZhciBoPXIoMik7dC5TeW50YXg9aC5TeW50YXg7dC52ZXJzaW9uPSI0LjAuMSJ9LGZ1bmN0aW9uKGUsdCxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTt2YXIgcz1yKDIpO3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuYXR0YWNoPWZhbHNlO3RoaXMuY29tbWVudHM9W107dGhpcy5zdGFjaz1bXTt0aGlzLmxlYWRpbmc9W107dGhpcy50cmFpbGluZz1bXX1lLnByb3RvdHlwZS5pbnNlcnRJbm5lckNvbW1lbnRzPWZ1bmN0aW9uKGUsdCl7aWYoZS50eXBlPT09cy5TeW50YXguQmxvY2tTdGF0ZW1lbnQmJmUuYm9keS5sZW5ndGg9PT0wKXt2YXIgcj1bXTtmb3IodmFyIGk9dGhpcy5sZWFkaW5nLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgbj10aGlzLmxlYWRpbmdbaV07aWYodC5lbmQub2Zmc2V0Pj1uLnN0YXJ0KXtyLnVuc2hpZnQobi5jb21tZW50KTt0aGlzLmxlYWRpbmcuc3BsaWNlKGksMSk7dGhpcy50cmFpbGluZy5zcGxpY2UoaSwxKX19aWYoci5sZW5ndGgpe2UuaW5uZXJDb21tZW50cz1yfX19O2UucHJvdG90eXBlLmZpbmRUcmFpbGluZ0NvbW1lbnRzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2lmKHRoaXMudHJhaWxpbmcubGVuZ3RoPjApe2Zvcih2YXIgcj10aGlzLnRyYWlsaW5nLmxlbmd0aC0xO3I+PTA7LS1yKXt2YXIgcz10aGlzLnRyYWlsaW5nW3JdO2lmKHMuc3RhcnQ+PWUuZW5kLm9mZnNldCl7dC51bnNoaWZ0KHMuY29tbWVudCl9fXRoaXMudHJhaWxpbmcubGVuZ3RoPTA7cmV0dXJuIHR9dmFyIGk9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtpZihpJiZpLm5vZGUudHJhaWxpbmdDb21tZW50cyl7dmFyIG49aS5ub2RlLnRyYWlsaW5nQ29tbWVudHNbMF07aWYobiYmbi5yYW5nZVswXT49ZS5lbmQub2Zmc2V0KXt0PWkubm9kZS50cmFpbGluZ0NvbW1lbnRzO2RlbGV0ZSBpLm5vZGUudHJhaWxpbmdDb21tZW50c319cmV0dXJuIHR9O2UucHJvdG90eXBlLmZpbmRMZWFkaW5nQ29tbWVudHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107dmFyIHI7d2hpbGUodGhpcy5zdGFjay5sZW5ndGg+MCl7dmFyIHM9dGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXTtpZihzJiZzLnN0YXJ0Pj1lLnN0YXJ0Lm9mZnNldCl7cj1zLm5vZGU7dGhpcy5zdGFjay5wb3AoKX1lbHNle2JyZWFrfX1pZihyKXt2YXIgaT1yLmxlYWRpbmdDb21tZW50cz9yLmxlYWRpbmdDb21tZW50cy5sZW5ndGg6MDtmb3IodmFyIG49aS0xO24+PTA7LS1uKXt2YXIgYT1yLmxlYWRpbmdDb21tZW50c1tuXTtpZihhLnJhbmdlWzFdPD1lLnN0YXJ0Lm9mZnNldCl7dC51bnNoaWZ0KGEpO3IubGVhZGluZ0NvbW1lbnRzLnNwbGljZShuLDEpfX1pZihyLmxlYWRpbmdDb21tZW50cyYmci5sZWFkaW5nQ29tbWVudHMubGVuZ3RoPT09MCl7ZGVsZXRlIHIubGVhZGluZ0NvbW1lbnRzfXJldHVybiB0fWZvcih2YXIgbj10aGlzLmxlYWRpbmcubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBzPXRoaXMubGVhZGluZ1tuXTtpZihzLnN0YXJ0PD1lLnN0YXJ0Lm9mZnNldCl7dC51bnNoaWZ0KHMuY29tbWVudCk7dGhpcy5sZWFkaW5nLnNwbGljZShuLDEpfX1yZXR1cm4gdH07ZS5wcm90b3R5cGUudmlzaXROb2RlPWZ1bmN0aW9uKGUsdCl7aWYoZS50eXBlPT09cy5TeW50YXguUHJvZ3JhbSYmZS5ib2R5Lmxlbmd0aD4wKXtyZXR1cm59dGhpcy5pbnNlcnRJbm5lckNvbW1lbnRzKGUsdCk7dmFyIHI9dGhpcy5maW5kVHJhaWxpbmdDb21tZW50cyh0KTt2YXIgaT10aGlzLmZpbmRMZWFkaW5nQ29tbWVudHModCk7aWYoaS5sZW5ndGg+MCl7ZS5sZWFkaW5nQ29tbWVudHM9aX1pZihyLmxlbmd0aD4wKXtlLnRyYWlsaW5nQ29tbWVudHM9cn10aGlzLnN0YWNrLnB1c2goe25vZGU6ZSxzdGFydDp0LnN0YXJ0Lm9mZnNldH0pfTtlLnByb3RvdHlwZS52aXNpdENvbW1lbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnR5cGVbMF09PT0iTCI/IkxpbmUiOiJCbG9jayI7dmFyIHM9e3R5cGU6cix2YWx1ZTplLnZhbHVlfTtpZihlLnJhbmdlKXtzLnJhbmdlPWUucmFuZ2V9aWYoZS5sb2Mpe3MubG9jPWUubG9jfXRoaXMuY29tbWVudHMucHVzaChzKTtpZih0aGlzLmF0dGFjaCl7dmFyIGk9e2NvbW1lbnQ6e3R5cGU6cix2YWx1ZTplLnZhbHVlLHJhbmdlOlt0LnN0YXJ0Lm9mZnNldCx0LmVuZC5vZmZzZXRdfSxzdGFydDp0LnN0YXJ0Lm9mZnNldH07aWYoZS5sb2Mpe2kuY29tbWVudC5sb2M9ZS5sb2N9ZS50eXBlPXI7dGhpcy5sZWFkaW5nLnB1c2goaSk7dGhpcy50cmFpbGluZy5wdXNoKGkpfX07ZS5wcm90b3R5cGUudmlzaXQ9ZnVuY3Rpb24oZSx0KXtpZihlLnR5cGU9PT0iTGluZUNvbW1lbnQiKXt0aGlzLnZpc2l0Q29tbWVudChlLHQpfWVsc2UgaWYoZS50eXBlPT09IkJsb2NrQ29tbWVudCIpe3RoaXMudmlzaXRDb21tZW50KGUsdCl9ZWxzZSBpZih0aGlzLmF0dGFjaCl7dGhpcy52aXNpdE5vZGUoZSx0KX19O3JldHVybiBlfSgpO3QuQ29tbWVudEhhbmRsZXI9aX0sZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTt0LlN5bnRheD17QXNzaWdubWVudEV4cHJlc3Npb246IkFzc2lnbm1lbnRFeHByZXNzaW9uIixBc3NpZ25tZW50UGF0dGVybjoiQXNzaWdubWVudFBhdHRlcm4iLEFycmF5RXhwcmVzc2lvbjoiQXJyYXlFeHByZXNzaW9uIixBcnJheVBhdHRlcm46IkFycmF5UGF0dGVybiIsQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IkFycm93RnVuY3Rpb25FeHByZXNzaW9uIixBd2FpdEV4cHJlc3Npb246IkF3YWl0RXhwcmVzc2lvbiIsQmxvY2tTdGF0ZW1lbnQ6IkJsb2NrU3RhdGVtZW50IixCaW5hcnlFeHByZXNzaW9uOiJCaW5hcnlFeHByZXNzaW9uIixCcmVha1N0YXRlbWVudDoiQnJlYWtTdGF0ZW1lbnQiLENhbGxFeHByZXNzaW9uOiJDYWxsRXhwcmVzc2lvbiIsQ2F0Y2hDbGF1c2U6IkNhdGNoQ2xhdXNlIixDbGFzc0JvZHk6IkNsYXNzQm9keSIsQ2xhc3NEZWNsYXJhdGlvbjoiQ2xhc3NEZWNsYXJhdGlvbiIsQ2xhc3NFeHByZXNzaW9uOiJDbGFzc0V4cHJlc3Npb24iLENvbmRpdGlvbmFsRXhwcmVzc2lvbjoiQ29uZGl0aW9uYWxFeHByZXNzaW9uIixDb250aW51ZVN0YXRlbWVudDoiQ29udGludWVTdGF0ZW1lbnQiLERvV2hpbGVTdGF0ZW1lbnQ6IkRvV2hpbGVTdGF0ZW1lbnQiLERlYnVnZ2VyU3RhdGVtZW50OiJEZWJ1Z2dlclN0YXRlbWVudCIsRW1wdHlTdGF0ZW1lbnQ6IkVtcHR5U3RhdGVtZW50IixFeHBvcnRBbGxEZWNsYXJhdGlvbjoiRXhwb3J0QWxsRGVjbGFyYXRpb24iLEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjoiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uIixFeHBvcnROYW1lZERlY2xhcmF0aW9uOiJFeHBvcnROYW1lZERlY2xhcmF0aW9uIixFeHBvcnRTcGVjaWZpZXI6IkV4cG9ydFNwZWNpZmllciIsRXhwcmVzc2lvblN0YXRlbWVudDoiRXhwcmVzc2lvblN0YXRlbWVudCIsRm9yU3RhdGVtZW50OiJGb3JTdGF0ZW1lbnQiLEZvck9mU3RhdGVtZW50OiJGb3JPZlN0YXRlbWVudCIsRm9ySW5TdGF0ZW1lbnQ6IkZvckluU3RhdGVtZW50IixGdW5jdGlvbkRlY2xhcmF0aW9uOiJGdW5jdGlvbkRlY2xhcmF0aW9uIixGdW5jdGlvbkV4cHJlc3Npb246IkZ1bmN0aW9uRXhwcmVzc2lvbiIsSWRlbnRpZmllcjoiSWRlbnRpZmllciIsSWZTdGF0ZW1lbnQ6IklmU3RhdGVtZW50IixJbXBvcnREZWNsYXJhdGlvbjoiSW1wb3J0RGVjbGFyYXRpb24iLEltcG9ydERlZmF1bHRTcGVjaWZpZXI6IkltcG9ydERlZmF1bHRTcGVjaWZpZXIiLEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjoiSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyIixJbXBvcnRTcGVjaWZpZXI6IkltcG9ydFNwZWNpZmllciIsTGl0ZXJhbDoiTGl0ZXJhbCIsTGFiZWxlZFN0YXRlbWVudDoiTGFiZWxlZFN0YXRlbWVudCIsTG9naWNhbEV4cHJlc3Npb246IkxvZ2ljYWxFeHByZXNzaW9uIixNZW1iZXJFeHByZXNzaW9uOiJNZW1iZXJFeHByZXNzaW9uIixNZXRhUHJvcGVydHk6Ik1ldGFQcm9wZXJ0eSIsTWV0aG9kRGVmaW5pdGlvbjoiTWV0aG9kRGVmaW5pdGlvbiIsTmV3RXhwcmVzc2lvbjoiTmV3RXhwcmVzc2lvbiIsT2JqZWN0RXhwcmVzc2lvbjoiT2JqZWN0RXhwcmVzc2lvbiIsT2JqZWN0UGF0dGVybjoiT2JqZWN0UGF0dGVybiIsUHJvZ3JhbToiUHJvZ3JhbSIsUHJvcGVydHk6IlByb3BlcnR5IixSZXN0RWxlbWVudDoiUmVzdEVsZW1lbnQiLFJldHVyblN0YXRlbWVudDoiUmV0dXJuU3RhdGVtZW50IixTZXF1ZW5jZUV4cHJlc3Npb246IlNlcXVlbmNlRXhwcmVzc2lvbiIsU3ByZWFkRWxlbWVudDoiU3ByZWFkRWxlbWVudCIsU3VwZXI6IlN1cGVyIixTd2l0Y2hDYXNlOiJTd2l0Y2hDYXNlIixTd2l0Y2hTdGF0ZW1lbnQ6IlN3aXRjaFN0YXRlbWVudCIsVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiJUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24iLFRlbXBsYXRlRWxlbWVudDoiVGVtcGxhdGVFbGVtZW50IixUZW1wbGF0ZUxpdGVyYWw6IlRlbXBsYXRlTGl0ZXJhbCIsVGhpc0V4cHJlc3Npb246IlRoaXNFeHByZXNzaW9uIixUaHJvd1N0YXRlbWVudDoiVGhyb3dTdGF0ZW1lbnQiLFRyeVN0YXRlbWVudDoiVHJ5U3RhdGVtZW50IixVbmFyeUV4cHJlc3Npb246IlVuYXJ5RXhwcmVzc2lvbiIsVXBkYXRlRXhwcmVzc2lvbjoiVXBkYXRlRXhwcmVzc2lvbiIsVmFyaWFibGVEZWNsYXJhdGlvbjoiVmFyaWFibGVEZWNsYXJhdGlvbiIsVmFyaWFibGVEZWNsYXJhdG9yOiJWYXJpYWJsZURlY2xhcmF0b3IiLFdoaWxlU3RhdGVtZW50OiJXaGlsZVN0YXRlbWVudCIsV2l0aFN0YXRlbWVudDoiV2l0aFN0YXRlbWVudCIsWWllbGRFeHByZXNzaW9uOiJZaWVsZEV4cHJlc3Npb24ifX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBzPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkocikpZVtyXT10W3JdfTtyZXR1cm4gZnVuY3Rpb24odCxyKXtlKHQscik7ZnVuY3Rpb24gcygpe3RoaXMuY29uc3RydWN0b3I9dH10LnByb3RvdHlwZT1yPT09bnVsbD9PYmplY3QuY3JlYXRlKHIpOihzLnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgcyl9fSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6dHJ1ZX0pO3ZhciBpPXIoNCk7dmFyIG49cig1KTt2YXIgYT1yKDYpO3ZhciBvPXIoNyk7dmFyIGw9cig4KTt2YXIgdT1yKDEzKTt2YXIgYz1yKDE0KTt1LlRva2VuTmFtZVsxMDBdPSJKU1hJZGVudGlmaWVyIjt1LlRva2VuTmFtZVsxMDFdPSJKU1hUZXh0IjtmdW5jdGlvbiBoKGUpe3ZhciB0O3N3aXRjaChlLnR5cGUpe2Nhc2UgYS5KU1hTeW50YXguSlNYSWRlbnRpZmllcjp2YXIgcj1lO3Q9ci5uYW1lO2JyZWFrO2Nhc2UgYS5KU1hTeW50YXguSlNYTmFtZXNwYWNlZE5hbWU6dmFyIHM9ZTt0PWgocy5uYW1lc3BhY2UpKyI6IitoKHMubmFtZSk7YnJlYWs7Y2FzZSBhLkpTWFN5bnRheC5KU1hNZW1iZXJFeHByZXNzaW9uOnZhciBpPWU7dD1oKGkub2JqZWN0KSsiLiIraChpLnByb3BlcnR5KTticmVha31yZXR1cm4gdH12YXIgcD1mdW5jdGlvbihlKXtzKHQsZSk7ZnVuY3Rpb24gdCh0LHIscyl7cmV0dXJuIGUuY2FsbCh0aGlzLHQscixzKXx8dGhpc310LnByb3RvdHlwZS5wYXJzZVByaW1hcnlFeHByZXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2goIjwiKT90aGlzLnBhcnNlSlNYUm9vdCgpOmUucHJvdG90eXBlLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24uY2FsbCh0aGlzKX07dC5wcm90b3R5cGUuc3RhcnRKU1g9ZnVuY3Rpb24oKXt0aGlzLnNjYW5uZXIuaW5kZXg9dGhpcy5zdGFydE1hcmtlci5pbmRleDt0aGlzLnNjYW5uZXIubGluZU51bWJlcj10aGlzLnN0YXJ0TWFya2VyLmxpbmU7dGhpcy5zY2FubmVyLmxpbmVTdGFydD10aGlzLnN0YXJ0TWFya2VyLmluZGV4LXRoaXMuc3RhcnRNYXJrZXIuY29sdW1ufTt0LnByb3RvdHlwZS5maW5pc2hKU1g9ZnVuY3Rpb24oKXt0aGlzLm5leHRUb2tlbigpfTt0LnByb3RvdHlwZS5yZWVudGVySlNYPWZ1bmN0aW9uKCl7dGhpcy5zdGFydEpTWCgpO3RoaXMuZXhwZWN0SlNYKCJ9Iik7aWYodGhpcy5jb25maWcudG9rZW5zKXt0aGlzLnRva2Vucy5wb3AoKX19O3QucHJvdG90eXBlLmNyZWF0ZUpTWE5vZGU9ZnVuY3Rpb24oKXt0aGlzLmNvbGxlY3RDb21tZW50cygpO3JldHVybntpbmRleDp0aGlzLnNjYW5uZXIuaW5kZXgsbGluZTp0aGlzLnNjYW5uZXIubGluZU51bWJlcixjb2x1bW46dGhpcy5zY2FubmVyLmluZGV4LXRoaXMuc2Nhbm5lci5saW5lU3RhcnR9fTt0LnByb3RvdHlwZS5jcmVhdGVKU1hDaGlsZE5vZGU9ZnVuY3Rpb24oKXtyZXR1cm57aW5kZXg6dGhpcy5zY2FubmVyLmluZGV4LGxpbmU6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsY29sdW1uOnRoaXMuc2Nhbm5lci5pbmRleC10aGlzLnNjYW5uZXIubGluZVN0YXJ0fX07dC5wcm90b3R5cGUuc2NhblhIVE1MRW50aXR5PWZ1bmN0aW9uKGUpe3ZhciB0PSImIjt2YXIgcj10cnVlO3ZhciBzPWZhbHNlO3ZhciBuPWZhbHNlO3ZhciBhPWZhbHNlO3doaWxlKCF0aGlzLnNjYW5uZXIuZW9mKCkmJnImJiFzKXt2YXIgbz10aGlzLnNjYW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleF07aWYobz09PWUpe2JyZWFrfXM9bz09PSI7Ijt0Kz1vOysrdGhpcy5zY2FubmVyLmluZGV4O2lmKCFzKXtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMjpuPW89PT0iIyI7YnJlYWs7Y2FzZSAzOmlmKG4pe2E9bz09PSJ4IjtyPWF8fGkuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KG8uY2hhckNvZGVBdCgwKSk7bj1uJiYhYX1icmVhaztkZWZhdWx0OnI9ciYmIShuJiYhaS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQoby5jaGFyQ29kZUF0KDApKSk7cj1yJiYhKGEmJiFpLkNoYXJhY3Rlci5pc0hleERpZ2l0KG8uY2hhckNvZGVBdCgwKSkpO2JyZWFrfX19aWYociYmcyYmdC5sZW5ndGg+Mil7dmFyIGw9dC5zdWJzdHIoMSx0Lmxlbmd0aC0yKTtpZihuJiZsLmxlbmd0aD4xKXt0PVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQobC5zdWJzdHIoMSksMTApKX1lbHNlIGlmKGEmJmwubGVuZ3RoPjIpe3Q9U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCgiMCIrbC5zdWJzdHIoMSksMTYpKX1lbHNlIGlmKCFuJiYhYSYmYy5YSFRNTEVudGl0aWVzW2xdKXt0PWMuWEhUTUxFbnRpdGllc1tsXX19cmV0dXJuIHR9O3QucHJvdG90eXBlLmxleEpTWD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Nhbm5lci5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnNjYW5uZXIuaW5kZXgpO2lmKGU9PT02MHx8ZT09PTYyfHxlPT09NDd8fGU9PT01OHx8ZT09PTYxfHxlPT09MTIzfHxlPT09MTI1KXt2YXIgdD10aGlzLnNjYW5uZXIuc291cmNlW3RoaXMuc2Nhbm5lci5pbmRleCsrXTtyZXR1cm57dHlwZTo3LHZhbHVlOnQsbGluZU51bWJlcjp0aGlzLnNjYW5uZXIubGluZU51bWJlcixsaW5lU3RhcnQ6dGhpcy5zY2FubmVyLmxpbmVTdGFydCxzdGFydDp0aGlzLnNjYW5uZXIuaW5kZXgtMSxlbmQ6dGhpcy5zY2FubmVyLmluZGV4fX1pZihlPT09MzR8fGU9PT0zOSl7dmFyIHI9dGhpcy5zY2FubmVyLmluZGV4O3ZhciBzPXRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4KytdO3ZhciBuPSIiO3doaWxlKCF0aGlzLnNjYW5uZXIuZW9mKCkpe3ZhciBhPXRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4KytdO2lmKGE9PT1zKXticmVha31lbHNlIGlmKGE9PT0iJiIpe24rPXRoaXMuc2NhblhIVE1MRW50aXR5KHMpfWVsc2V7bis9YX19cmV0dXJue3R5cGU6OCx2YWx1ZTpuLGxpbmVOdW1iZXI6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMuc2Nhbm5lci5saW5lU3RhcnQsc3RhcnQ6cixlbmQ6dGhpcy5zY2FubmVyLmluZGV4fX1pZihlPT09NDYpe3ZhciBvPXRoaXMuc2Nhbm5lci5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLnNjYW5uZXIuaW5kZXgrMSk7dmFyIGw9dGhpcy5zY2FubmVyLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuc2Nhbm5lci5pbmRleCsyKTt2YXIgdD1vPT09NDYmJmw9PT00Nj8iLi4uIjoiLiI7dmFyIHI9dGhpcy5zY2FubmVyLmluZGV4O3RoaXMuc2Nhbm5lci5pbmRleCs9dC5sZW5ndGg7cmV0dXJue3R5cGU6Nyx2YWx1ZTp0LGxpbmVOdW1iZXI6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMuc2Nhbm5lci5saW5lU3RhcnQsc3RhcnQ6cixlbmQ6dGhpcy5zY2FubmVyLmluZGV4fX1pZihlPT09OTYpe3JldHVybnt0eXBlOjEwLHZhbHVlOiIiLGxpbmVOdW1iZXI6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMuc2Nhbm5lci5saW5lU3RhcnQsc3RhcnQ6dGhpcy5zY2FubmVyLmluZGV4LGVuZDp0aGlzLnNjYW5uZXIuaW5kZXh9fWlmKGkuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KGUpJiZlIT09OTIpe3ZhciByPXRoaXMuc2Nhbm5lci5pbmRleDsrK3RoaXMuc2Nhbm5lci5pbmRleDt3aGlsZSghdGhpcy5zY2FubmVyLmVvZigpKXt2YXIgYT10aGlzLnNjYW5uZXIuc291cmNlLmNoYXJDb2RlQXQodGhpcy5zY2FubmVyLmluZGV4KTtpZihpLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJQYXJ0KGEpJiZhIT09OTIpeysrdGhpcy5zY2FubmVyLmluZGV4fWVsc2UgaWYoYT09PTQ1KXsrK3RoaXMuc2Nhbm5lci5pbmRleH1lbHNle2JyZWFrfX12YXIgdT10aGlzLnNjYW5uZXIuc291cmNlLnNsaWNlKHIsdGhpcy5zY2FubmVyLmluZGV4KTtyZXR1cm57dHlwZToxMDAsdmFsdWU6dSxsaW5lTnVtYmVyOnRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLGxpbmVTdGFydDp0aGlzLnNjYW5uZXIubGluZVN0YXJ0LHN0YXJ0OnIsZW5kOnRoaXMuc2Nhbm5lci5pbmRleH19cmV0dXJuIHRoaXMuc2Nhbm5lci5sZXgoKX07dC5wcm90b3R5cGUubmV4dEpTWFRva2VuPWZ1bmN0aW9uKCl7dGhpcy5jb2xsZWN0Q29tbWVudHMoKTt0aGlzLnN0YXJ0TWFya2VyLmluZGV4PXRoaXMuc2Nhbm5lci5pbmRleDt0aGlzLnN0YXJ0TWFya2VyLmxpbmU9dGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7dGhpcy5zdGFydE1hcmtlci5jb2x1bW49dGhpcy5zY2FubmVyLmluZGV4LXRoaXMuc2Nhbm5lci5saW5lU3RhcnQ7dmFyIGU9dGhpcy5sZXhKU1goKTt0aGlzLmxhc3RNYXJrZXIuaW5kZXg9dGhpcy5zY2FubmVyLmluZGV4O3RoaXMubGFzdE1hcmtlci5saW5lPXRoaXMuc2Nhbm5lci5saW5lTnVtYmVyO3RoaXMubGFzdE1hcmtlci5jb2x1bW49dGhpcy5zY2FubmVyLmluZGV4LXRoaXMuc2Nhbm5lci5saW5lU3RhcnQ7aWYodGhpcy5jb25maWcudG9rZW5zKXt0aGlzLnRva2Vucy5wdXNoKHRoaXMuY29udmVydFRva2VuKGUpKX1yZXR1cm4gZX07dC5wcm90b3R5cGUubmV4dEpTWFRleHQ9ZnVuY3Rpb24oKXt0aGlzLnN0YXJ0TWFya2VyLmluZGV4PXRoaXMuc2Nhbm5lci5pbmRleDt0aGlzLnN0YXJ0TWFya2VyLmxpbmU9dGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7dGhpcy5zdGFydE1hcmtlci5jb2x1bW49dGhpcy5zY2FubmVyLmluZGV4LXRoaXMuc2Nhbm5lci5saW5lU3RhcnQ7dmFyIGU9dGhpcy5zY2FubmVyLmluZGV4O3ZhciB0PSIiO3doaWxlKCF0aGlzLnNjYW5uZXIuZW9mKCkpe3ZhciByPXRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XTtpZihyPT09InsifHxyPT09IjwiKXticmVha30rK3RoaXMuc2Nhbm5lci5pbmRleDt0Kz1yO2lmKGkuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3Ioci5jaGFyQ29kZUF0KDApKSl7Kyt0aGlzLnNjYW5uZXIubGluZU51bWJlcjtpZihyPT09IlxyIiYmdGhpcy5zY2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXhdPT09IlxuIil7Kyt0aGlzLnNjYW5uZXIuaW5kZXh9dGhpcy5zY2FubmVyLmxpbmVTdGFydD10aGlzLnNjYW5uZXIuaW5kZXh9fXRoaXMubGFzdE1hcmtlci5pbmRleD10aGlzLnNjYW5uZXIuaW5kZXg7dGhpcy5sYXN0TWFya2VyLmxpbmU9dGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7dGhpcy5sYXN0TWFya2VyLmNvbHVtbj10aGlzLnNjYW5uZXIuaW5kZXgtdGhpcy5zY2FubmVyLmxpbmVTdGFydDt2YXIgcz17dHlwZToxMDEsdmFsdWU6dCxsaW5lTnVtYmVyOnRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLGxpbmVTdGFydDp0aGlzLnNjYW5uZXIubGluZVN0YXJ0LHN0YXJ0OmUsZW5kOnRoaXMuc2Nhbm5lci5pbmRleH07aWYodC5sZW5ndGg+MCYmdGhpcy5jb25maWcudG9rZW5zKXt0aGlzLnRva2Vucy5wdXNoKHRoaXMuY29udmVydFRva2VuKHMpKX1yZXR1cm4gc307dC5wcm90b3R5cGUucGVla0pTWFRva2VuPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zY2FubmVyLnNhdmVTdGF0ZSgpO3RoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKTt2YXIgdD10aGlzLmxleEpTWCgpO3RoaXMuc2Nhbm5lci5yZXN0b3JlU3RhdGUoZSk7cmV0dXJuIHR9O3QucHJvdG90eXBlLmV4cGVjdEpTWD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm5leHRKU1hUb2tlbigpO2lmKHQudHlwZSE9PTd8fHQudmFsdWUhPT1lKXt0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHQpfX07dC5wcm90b3R5cGUubWF0Y2hKU1g9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wZWVrSlNYVG9rZW4oKTtyZXR1cm4gdC50eXBlPT09NyYmdC52YWx1ZT09PWV9O3QucHJvdG90eXBlLnBhcnNlSlNYSWRlbnRpZmllcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlSlNYTm9kZSgpO3ZhciB0PXRoaXMubmV4dEpTWFRva2VuKCk7aWYodC50eXBlIT09MTAwKXt0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHQpfXJldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IG4uSlNYSWRlbnRpZmllcih0LnZhbHVlKSl9O3QucHJvdG90eXBlLnBhcnNlSlNYRWxlbWVudE5hbWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZUpTWE5vZGUoKTt2YXIgdD10aGlzLnBhcnNlSlNYSWRlbnRpZmllcigpO2lmKHRoaXMubWF0Y2hKU1goIjoiKSl7dmFyIHI9dDt0aGlzLmV4cGVjdEpTWCgiOiIpO3ZhciBzPXRoaXMucGFyc2VKU1hJZGVudGlmaWVyKCk7dD10aGlzLmZpbmFsaXplKGUsbmV3IG4uSlNYTmFtZXNwYWNlZE5hbWUocixzKSl9ZWxzZSBpZih0aGlzLm1hdGNoSlNYKCIuIikpe3doaWxlKHRoaXMubWF0Y2hKU1goIi4iKSl7dmFyIGk9dDt0aGlzLmV4cGVjdEpTWCgiLiIpO3ZhciBhPXRoaXMucGFyc2VKU1hJZGVudGlmaWVyKCk7dD10aGlzLmZpbmFsaXplKGUsbmV3IG4uSlNYTWVtYmVyRXhwcmVzc2lvbihpLGEpKX19cmV0dXJuIHR9O3QucHJvdG90eXBlLnBhcnNlSlNYQXR0cmlidXRlTmFtZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlSlNYTm9kZSgpO3ZhciB0O3ZhciByPXRoaXMucGFyc2VKU1hJZGVudGlmaWVyKCk7aWYodGhpcy5tYXRjaEpTWCgiOiIpKXt2YXIgcz1yO3RoaXMuZXhwZWN0SlNYKCI6Iik7dmFyIGk9dGhpcy5wYXJzZUpTWElkZW50aWZpZXIoKTt0PXRoaXMuZmluYWxpemUoZSxuZXcgbi5KU1hOYW1lc3BhY2VkTmFtZShzLGkpKX1lbHNle3Q9cn1yZXR1cm4gdH07dC5wcm90b3R5cGUucGFyc2VKU1hTdHJpbmdMaXRlcmFsQXR0cmlidXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVKU1hOb2RlKCk7dmFyIHQ9dGhpcy5uZXh0SlNYVG9rZW4oKTtpZih0LnR5cGUhPT04KXt0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHQpfXZhciByPXRoaXMuZ2V0VG9rZW5SYXcodCk7cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgby5MaXRlcmFsKHQudmFsdWUscikpfTt0LnByb3RvdHlwZS5wYXJzZUpTWEV4cHJlc3Npb25BdHRyaWJ1dGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZUpTWE5vZGUoKTt0aGlzLmV4cGVjdEpTWCgieyIpO3RoaXMuZmluaXNoSlNYKCk7aWYodGhpcy5tYXRjaCgifSIpKXt0aGlzLnRvbGVyYXRlRXJyb3IoIkpTWCBhdHRyaWJ1dGVzIG11c3Qgb25seSBiZSBhc3NpZ25lZCBhIG5vbi1lbXB0eSBleHByZXNzaW9uIil9dmFyIHQ9dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7dGhpcy5yZWVudGVySlNYKCk7cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgbi5KU1hFeHByZXNzaW9uQ29udGFpbmVyKHQpKX07dC5wcm90b3R5cGUucGFyc2VKU1hBdHRyaWJ1dGVWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoSlNYKCJ7Iik/dGhpcy5wYXJzZUpTWEV4cHJlc3Npb25BdHRyaWJ1dGUoKTp0aGlzLm1hdGNoSlNYKCI8Iik/dGhpcy5wYXJzZUpTWEVsZW1lbnQoKTp0aGlzLnBhcnNlSlNYU3RyaW5nTGl0ZXJhbEF0dHJpYnV0ZSgpfTt0LnByb3RvdHlwZS5wYXJzZUpTWE5hbWVWYWx1ZUF0dHJpYnV0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlSlNYTm9kZSgpO3ZhciB0PXRoaXMucGFyc2VKU1hBdHRyaWJ1dGVOYW1lKCk7dmFyIHI9bnVsbDtpZih0aGlzLm1hdGNoSlNYKCI9Iikpe3RoaXMuZXhwZWN0SlNYKCI9Iik7cj10aGlzLnBhcnNlSlNYQXR0cmlidXRlVmFsdWUoKX1yZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBuLkpTWEF0dHJpYnV0ZSh0LHIpKX07dC5wcm90b3R5cGUucGFyc2VKU1hTcHJlYWRBdHRyaWJ1dGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZUpTWE5vZGUoKTt0aGlzLmV4cGVjdEpTWCgieyIpO3RoaXMuZXhwZWN0SlNYKCIuLi4iKTt0aGlzLmZpbmlzaEpTWCgpO3ZhciB0PXRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO3RoaXMucmVlbnRlckpTWCgpO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IG4uSlNYU3ByZWFkQXR0cmlidXRlKHQpKX07dC5wcm90b3R5cGUucGFyc2VKU1hBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7dmFyIGU9W107d2hpbGUoIXRoaXMubWF0Y2hKU1goIi8iKSYmIXRoaXMubWF0Y2hKU1goIj4iKSl7dmFyIHQ9dGhpcy5tYXRjaEpTWCgieyIpP3RoaXMucGFyc2VKU1hTcHJlYWRBdHRyaWJ1dGUoKTp0aGlzLnBhcnNlSlNYTmFtZVZhbHVlQXR0cmlidXRlKCk7ZS5wdXNoKHQpfXJldHVybiBlfTt0LnByb3RvdHlwZS5wYXJzZUpTWE9wZW5pbmdFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVKU1hOb2RlKCk7dGhpcy5leHBlY3RKU1goIjwiKTt2YXIgdD10aGlzLnBhcnNlSlNYRWxlbWVudE5hbWUoKTt2YXIgcj10aGlzLnBhcnNlSlNYQXR0cmlidXRlcygpO3ZhciBzPXRoaXMubWF0Y2hKU1goIi8iKTtpZihzKXt0aGlzLmV4cGVjdEpTWCgiLyIpfXRoaXMuZXhwZWN0SlNYKCI+Iik7cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgbi5KU1hPcGVuaW5nRWxlbWVudCh0LHMscikpfTt0LnByb3RvdHlwZS5wYXJzZUpTWEJvdW5kYXJ5RWxlbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlSlNYTm9kZSgpO3RoaXMuZXhwZWN0SlNYKCI8Iik7aWYodGhpcy5tYXRjaEpTWCgiLyIpKXt0aGlzLmV4cGVjdEpTWCgiLyIpO3ZhciB0PXRoaXMucGFyc2VKU1hFbGVtZW50TmFtZSgpO3RoaXMuZXhwZWN0SlNYKCI+Iik7cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgbi5KU1hDbG9zaW5nRWxlbWVudCh0KSl9dmFyIHI9dGhpcy5wYXJzZUpTWEVsZW1lbnROYW1lKCk7dmFyIHM9dGhpcy5wYXJzZUpTWEF0dHJpYnV0ZXMoKTt2YXIgaT10aGlzLm1hdGNoSlNYKCIvIik7aWYoaSl7dGhpcy5leHBlY3RKU1goIi8iKX10aGlzLmV4cGVjdEpTWCgiPiIpO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IG4uSlNYT3BlbmluZ0VsZW1lbnQocixpLHMpKX07dC5wcm90b3R5cGUucGFyc2VKU1hFbXB0eUV4cHJlc3Npb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZUpTWENoaWxkTm9kZSgpO3RoaXMuY29sbGVjdENvbW1lbnRzKCk7dGhpcy5sYXN0TWFya2VyLmluZGV4PXRoaXMuc2Nhbm5lci5pbmRleDt0aGlzLmxhc3RNYXJrZXIubGluZT10aGlzLnNjYW5uZXIubGluZU51bWJlcjt0aGlzLmxhc3RNYXJrZXIuY29sdW1uPXRoaXMuc2Nhbm5lci5pbmRleC10aGlzLnNjYW5uZXIubGluZVN0YXJ0O3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IG4uSlNYRW1wdHlFeHByZXNzaW9uKX07dC5wcm90b3R5cGUucGFyc2VKU1hFeHByZXNzaW9uQ29udGFpbmVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVKU1hOb2RlKCk7dGhpcy5leHBlY3RKU1goInsiKTt2YXIgdDtpZih0aGlzLm1hdGNoSlNYKCJ9Iikpe3Q9dGhpcy5wYXJzZUpTWEVtcHR5RXhwcmVzc2lvbigpO3RoaXMuZXhwZWN0SlNYKCJ9Iil9ZWxzZXt0aGlzLmZpbmlzaEpTWCgpO3Q9dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7dGhpcy5yZWVudGVySlNYKCl9cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgbi5KU1hFeHByZXNzaW9uQ29udGFpbmVyKHQpKX07dC5wcm90b3R5cGUucGFyc2VKU1hDaGlsZHJlbj1mdW5jdGlvbigpe3ZhciBlPVtdO3doaWxlKCF0aGlzLnNjYW5uZXIuZW9mKCkpe3ZhciB0PXRoaXMuY3JlYXRlSlNYQ2hpbGROb2RlKCk7dmFyIHI9dGhpcy5uZXh0SlNYVGV4dCgpO2lmKHIuc3RhcnQ8ci5lbmQpe3ZhciBzPXRoaXMuZ2V0VG9rZW5SYXcocik7dmFyIGk9dGhpcy5maW5hbGl6ZSh0LG5ldyBuLkpTWFRleHQoci52YWx1ZSxzKSk7ZS5wdXNoKGkpfWlmKHRoaXMuc2Nhbm5lci5zb3VyY2VbdGhpcy5zY2FubmVyLmluZGV4XT09PSJ7Iil7dmFyIGE9dGhpcy5wYXJzZUpTWEV4cHJlc3Npb25Db250YWluZXIoKTtlLnB1c2goYSl9ZWxzZXticmVha319cmV0dXJuIGV9O3QucHJvdG90eXBlLnBhcnNlQ29tcGxleEpTWEVsZW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9W107d2hpbGUoIXRoaXMuc2Nhbm5lci5lb2YoKSl7ZS5jaGlsZHJlbj1lLmNoaWxkcmVuLmNvbmNhdCh0aGlzLnBhcnNlSlNYQ2hpbGRyZW4oKSk7dmFyIHI9dGhpcy5jcmVhdGVKU1hDaGlsZE5vZGUoKTt2YXIgcz10aGlzLnBhcnNlSlNYQm91bmRhcnlFbGVtZW50KCk7aWYocy50eXBlPT09YS5KU1hTeW50YXguSlNYT3BlbmluZ0VsZW1lbnQpe3ZhciBpPXM7aWYoaS5zZWxmQ2xvc2luZyl7dmFyIG89dGhpcy5maW5hbGl6ZShyLG5ldyBuLkpTWEVsZW1lbnQoaSxbXSxudWxsKSk7ZS5jaGlsZHJlbi5wdXNoKG8pfWVsc2V7dC5wdXNoKGUpO2U9e25vZGU6cixvcGVuaW5nOmksY2xvc2luZzpudWxsLGNoaWxkcmVuOltdfX19aWYocy50eXBlPT09YS5KU1hTeW50YXguSlNYQ2xvc2luZ0VsZW1lbnQpe2UuY2xvc2luZz1zO3ZhciBsPWgoZS5vcGVuaW5nLm5hbWUpO3ZhciB1PWgoZS5jbG9zaW5nLm5hbWUpO2lmKGwhPT11KXt0aGlzLnRvbGVyYXRlRXJyb3IoIkV4cGVjdGVkIGNvcnJlc3BvbmRpbmcgSlNYIGNsb3NpbmcgdGFnIGZvciAlMCIsbCl9aWYodC5sZW5ndGg+MCl7dmFyIG89dGhpcy5maW5hbGl6ZShlLm5vZGUsbmV3IG4uSlNYRWxlbWVudChlLm9wZW5pbmcsZS5jaGlsZHJlbixlLmNsb3NpbmcpKTtlPXRbdC5sZW5ndGgtMV07ZS5jaGlsZHJlbi5wdXNoKG8pO3QucG9wKCl9ZWxzZXticmVha319fXJldHVybiBlfTt0LnByb3RvdHlwZS5wYXJzZUpTWEVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZUpTWE5vZGUoKTt2YXIgdD10aGlzLnBhcnNlSlNYT3BlbmluZ0VsZW1lbnQoKTt2YXIgcj1bXTt2YXIgcz1udWxsO2lmKCF0LnNlbGZDbG9zaW5nKXt2YXIgaT10aGlzLnBhcnNlQ29tcGxleEpTWEVsZW1lbnQoe25vZGU6ZSxvcGVuaW5nOnQsY2xvc2luZzpzLGNoaWxkcmVuOnJ9KTtyPWkuY2hpbGRyZW47cz1pLmNsb3Npbmd9cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgbi5KU1hFbGVtZW50KHQscixzKSl9O3QucHJvdG90eXBlLnBhcnNlSlNYUm9vdD1mdW5jdGlvbigpe2lmKHRoaXMuY29uZmlnLnRva2Vucyl7dGhpcy50b2tlbnMucG9wKCl9dGhpcy5zdGFydEpTWCgpO3ZhciBlPXRoaXMucGFyc2VKU1hFbGVtZW50KCk7dGhpcy5maW5pc2hKU1goKTtyZXR1cm4gZX07dC5wcm90b3R5cGUuaXNTdGFydE9mRXhwcmVzc2lvbj1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5pc1N0YXJ0T2ZFeHByZXNzaW9uLmNhbGwodGhpcyl8fHRoaXMubWF0Y2goIjwiKX07cmV0dXJuIHR9KGwuUGFyc2VyKTt0LkpTWFBhcnNlcj1wfSxmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6dHJ1ZX0pO3ZhciByPXtOb25Bc2NpaUlkZW50aWZpZXJTdGFydDovW1x4QUFceEI1XHhCQVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1MDM3RFx1MDM3Rlx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTJGXHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1RDAtXHUwNUVBXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQVx1MDdGNFx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOEEwLVx1MDhCNFx1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk4MFx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1MDlCMFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQVx1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1MEFGOVx1MEIwNS1cdTBCMENcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzM5XHUwQzNEXHUwQzU4LVx1MEM1QVx1MEM2MFx1MEM2MVx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDVGLVx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MVx1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNVx1MTNGOC1cdTEzRkRcdTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNkVFLVx1MTZGOFx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDdcdTE3RENcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFFXHUxOTUwLVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUIwLVx1MTlDOVx1MUEwMC1cdTFBMTZcdTFBMjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUxQkFFXHUxQkFGXHUxQkJBLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1MUM3RFx1MUNFOS1cdTFDRUNcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3Rlx1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE4LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyQS1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE2MC1cdTIxODhcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXHUyRDAwLVx1MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNlx1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENFXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyOVx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5Qi1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZENVx1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5RFx1QTZBMC1cdUE2RUZcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3QURcdUE3QjAtXHVBN0I3XHVBN0Y3LVx1QTgwMVx1QTgwMy1cdUE4MDVcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQlx1QThGRFx1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUE5RTAtXHVBOUU0XHVBOUU2LVx1QTlFRlx1QTlGQS1cdUE5RkVcdUFBMDAtXHVBQTI4XHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTdFLVx1QUFBRlx1QUFCMVx1QUFCNVx1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRVx1QUIzMC1cdUFCNUFcdUFCNUMtXHVBQjY1XHVBQjcwLVx1QUJFMlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNlx1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ118XHVEODAwW1x1REMwMC1cdURDMEJcdURDMEQtXHVEQzI2XHVEQzI4LVx1REMzQVx1REMzQ1x1REMzRFx1REMzRi1cdURDNERcdURDNTAtXHVEQzVEXHVEQzgwLVx1RENGQVx1REQ0MC1cdURENzRcdURFODAtXHVERTlDXHVERUEwLVx1REVEMFx1REYwMC1cdURGMUZcdURGMzAtXHVERjRBXHVERjUwLVx1REY3NVx1REY4MC1cdURGOURcdURGQTAtXHVERkMzXHVERkM4LVx1REZDRlx1REZEMS1cdURGRDVdfFx1RDgwMVtcdURDMDAtXHVEQzlEXHVERDAwLVx1REQyN1x1REQzMC1cdURENjNcdURFMDAtXHVERjM2XHVERjQwLVx1REY1NVx1REY2MC1cdURGNjddfFx1RDgwMltcdURDMDAtXHVEQzA1XHVEQzA4XHVEQzBBLVx1REMzNVx1REMzN1x1REMzOFx1REMzQ1x1REMzRi1cdURDNTVcdURDNjAtXHVEQzc2XHVEQzgwLVx1REM5RVx1RENFMC1cdURDRjJcdURDRjRcdURDRjVcdUREMDAtXHVERDE1XHVERDIwLVx1REQzOVx1REQ4MC1cdUREQjdcdUREQkVcdUREQkZcdURFMDBcdURFMTAtXHVERTEzXHVERTE1LVx1REUxN1x1REUxOS1cdURFMzNcdURFNjAtXHVERTdDXHVERTgwLVx1REU5Q1x1REVDMC1cdURFQzdcdURFQzktXHVERUU0XHVERjAwLVx1REYzNVx1REY0MC1cdURGNTVcdURGNjAtXHVERjcyXHVERjgwLVx1REY5MV18XHVEODAzW1x1REMwMC1cdURDNDhcdURDODAtXHVEQ0IyXHVEQ0MwLVx1RENGMl18XHVEODA0W1x1REMwMy1cdURDMzdcdURDODMtXHVEQ0FGXHVEQ0QwLVx1RENFOFx1REQwMy1cdUREMjZcdURENTAtXHVERDcyXHVERDc2XHVERDgzLVx1RERCMlx1RERDMS1cdUREQzRcdUREREFcdURERENcdURFMDAtXHVERTExXHVERTEzLVx1REUyQlx1REU4MC1cdURFODZcdURFODhcdURFOEEtXHVERThEXHVERThGLVx1REU5RFx1REU5Ri1cdURFQThcdURFQjAtXHVERURFXHVERjA1LVx1REYwQ1x1REYwRlx1REYxMFx1REYxMy1cdURGMjhcdURGMkEtXHVERjMwXHVERjMyXHVERjMzXHVERjM1LVx1REYzOVx1REYzRFx1REY1MFx1REY1RC1cdURGNjFdfFx1RDgwNVtcdURDODAtXHVEQ0FGXHVEQ0M0XHVEQ0M1XHVEQ0M3XHVERDgwLVx1RERBRVx1REREOC1cdUREREJcdURFMDAtXHVERTJGXHVERTQ0XHVERTgwLVx1REVBQVx1REYwMC1cdURGMTldfFx1RDgwNltcdURDQTAtXHVEQ0RGXHVEQ0ZGXHVERUMwLVx1REVGOF18XHVEODA4W1x1REMwMC1cdURGOTldfFx1RDgwOVtcdURDMDAtXHVEQzZFXHVEQzgwLVx1REQ0M118W1x1RDgwQ1x1RDg0MC1cdUQ4NjhcdUQ4NkEtXHVEODZDXHVEODZGLVx1RDg3Ml1bXHVEQzAwLVx1REZGRl18XHVEODBEW1x1REMwMC1cdURDMkVdfFx1RDgxMVtcdURDMDAtXHVERTQ2XXxcdUQ4MUFbXHVEQzAwLVx1REUzOFx1REU0MC1cdURFNUVcdURFRDAtXHVERUVEXHVERjAwLVx1REYyRlx1REY0MC1cdURGNDNcdURGNjMtXHVERjc3XHVERjdELVx1REY4Rl18XHVEODFCW1x1REYwMC1cdURGNDRcdURGNTBcdURGOTMtXHVERjlGXXxcdUQ4MkNbXHVEQzAwXHVEQzAxXXxcdUQ4MkZbXHVEQzAwLVx1REM2QVx1REM3MC1cdURDN0NcdURDODAtXHVEQzg4XHVEQzkwLVx1REM5OV18XHVEODM1W1x1REMwMC1cdURDNTRcdURDNTYtXHVEQzlDXHVEQzlFXHVEQzlGXHVEQ0EyXHVEQ0E1XHVEQ0E2XHVEQ0E5LVx1RENBQ1x1RENBRS1cdURDQjlcdURDQkJcdURDQkQtXHVEQ0MzXHVEQ0M1LVx1REQwNVx1REQwNy1cdUREMEFcdUREMEQtXHVERDE0XHVERDE2LVx1REQxQ1x1REQxRS1cdUREMzlcdUREM0ItXHVERDNFXHVERDQwLVx1REQ0NFx1REQ0Nlx1REQ0QS1cdURENTBcdURENTItXHVERUE1XHVERUE4LVx1REVDMFx1REVDMi1cdURFREFcdURFREMtXHVERUZBXHVERUZDLVx1REYxNFx1REYxNi1cdURGMzRcdURGMzYtXHVERjRFXHVERjUwLVx1REY2RVx1REY3MC1cdURGODhcdURGOEEtXHVERkE4XHVERkFBLVx1REZDMlx1REZDNC1cdURGQ0JdfFx1RDgzQVtcdURDMDAtXHVEQ0M0XXxcdUQ4M0JbXHVERTAwLVx1REUwM1x1REUwNS1cdURFMUZcdURFMjFcdURFMjJcdURFMjRcdURFMjdcdURFMjktXHVERTMyXHVERTM0LVx1REUzN1x1REUzOVx1REUzQlx1REU0Mlx1REU0N1x1REU0OVx1REU0Qlx1REU0RC1cdURFNEZcdURFNTFcdURFNTJcdURFNTRcdURFNTdcdURFNTlcdURFNUJcdURFNURcdURFNUZcdURFNjFcdURFNjJcdURFNjRcdURFNjctXHVERTZBXHVERTZDLVx1REU3Mlx1REU3NC1cdURFNzdcdURFNzktXHVERTdDXHVERTdFXHVERTgwLVx1REU4OVx1REU4Qi1cdURFOUJcdURFQTEtXHVERUEzXHVERUE1LVx1REVBOVx1REVBQi1cdURFQkJdfFx1RDg2OVtcdURDMDAtXHVERUQ2XHVERjAwLVx1REZGRl18XHVEODZEW1x1REMwMC1cdURGMzRcdURGNDAtXHVERkZGXXxcdUQ4NkVbXHVEQzAwLVx1REMxRFx1REMyMC1cdURGRkZdfFx1RDg3M1tcdURDMDAtXHVERUExXXxcdUQ4N0VbXHVEQzAwLVx1REUxRF0vLE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6L1tceEFBXHhCNVx4QjdceEJBXHhDMC1ceEQ2XHhEOC1ceEY2XHhGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDMwMC1cdTAzNzRcdTAzNzZcdTAzNzdcdTAzN0EtXHUwMzdEXHUwMzdGXHUwMzg2LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XHUwM0Y3LVx1MDQ4MVx1MDQ4My1cdTA0ODdcdTA0OEEtXHUwNTJGXHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1OTEtXHUwNUJEXHUwNUJGXHUwNUMxXHUwNUMyXHUwNUM0XHUwNUM1XHUwNUM3XHUwNUQwLVx1MDVFQVx1MDVGMC1cdTA1RjJcdTA2MTAtXHUwNjFBXHUwNjIwLVx1MDY2OVx1MDY2RS1cdTA2RDNcdTA2RDUtXHUwNkRDXHUwNkRGLVx1MDZFOFx1MDZFQS1cdTA2RkNcdTA2RkZcdTA3MTAtXHUwNzRBXHUwNzRELVx1MDdCMVx1MDdDMC1cdTA3RjVcdTA3RkFcdTA4MDAtXHUwODJEXHUwODQwLVx1MDg1Qlx1MDhBMC1cdTA4QjRcdTA4RTMtXHUwOTYzXHUwOTY2LVx1MDk2Rlx1MDk3MS1cdTA5ODNcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJDLVx1MDlDNFx1MDlDN1x1MDlDOFx1MDlDQi1cdTA5Q0VcdTA5RDdcdTA5RENcdTA5RERcdTA5REYtXHUwOUUzXHUwOUU2LVx1MDlGMVx1MEEwMS1cdTBBMDNcdTBBMDUtXHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzlcdTBBM0NcdTBBM0UtXHUwQTQyXHUwQTQ3XHUwQTQ4XHUwQTRCLVx1MEE0RFx1MEE1MVx1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNjYtXHUwQTc1XHUwQTgxLVx1MEE4M1x1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJDLVx1MEFDNVx1MEFDNy1cdTBBQzlcdTBBQ0ItXHUwQUNEXHUwQUQwXHUwQUUwLVx1MEFFM1x1MEFFNi1cdTBBRUZcdTBBRjlcdTBCMDEtXHUwQjAzXHUwQjA1LVx1MEIwQ1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzQy1cdTBCNDRcdTBCNDdcdTBCNDhcdTBCNEItXHUwQjREXHUwQjU2XHUwQjU3XHUwQjVDXHUwQjVEXHUwQjVGLVx1MEI2M1x1MEI2Ni1cdTBCNkZcdTBCNzFcdTBCODJcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJCRS1cdTBCQzJcdTBCQzYtXHUwQkM4XHUwQkNBLVx1MEJDRFx1MEJEMFx1MEJEN1x1MEJFNi1cdTBCRUZcdTBDMDAtXHUwQzAzXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzOVx1MEMzRC1cdTBDNDRcdTBDNDYtXHUwQzQ4XHUwQzRBLVx1MEM0RFx1MEM1NVx1MEM1Nlx1MEM1OC1cdTBDNUFcdTBDNjAtXHUwQzYzXHUwQzY2LVx1MEM2Rlx1MEM4MS1cdTBDODNcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXHUwQ0I1LVx1MENCOVx1MENCQy1cdTBDQzRcdTBDQzYtXHUwQ0M4XHUwQ0NBLVx1MENDRFx1MENENVx1MENENlx1MENERVx1MENFMC1cdTBDRTNcdTBDRTYtXHUwQ0VGXHUwQ0YxXHUwQ0YyXHUwRDAxLVx1MEQwM1x1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRC1cdTBENDRcdTBENDYtXHUwRDQ4XHUwRDRBLVx1MEQ0RVx1MEQ1N1x1MEQ1Ri1cdTBENjNcdTBENjYtXHUwRDZGXHUwRDdBLVx1MEQ3Rlx1MEQ4Mlx1MEQ4M1x1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBEQ0FcdTBEQ0YtXHUwREQ0XHUwREQ2XHUwREQ4LVx1MERERlx1MERFNi1cdTBERUZcdTBERjJcdTBERjNcdTBFMDEtXHUwRTNBXHUwRTQwLVx1MEU0RVx1MEU1MC1cdTBFNTlcdTBFODFcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUI5XHUwRUJCLVx1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZcdTBFQzgtXHUwRUNEXHUwRUQwLVx1MEVEOVx1MEVEQy1cdTBFREZcdTBGMDBcdTBGMThcdTBGMTlcdTBGMjAtXHUwRjI5XHUwRjM1XHUwRjM3XHUwRjM5XHUwRjNFLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGNzEtXHUwRjg0XHUwRjg2LVx1MEY5N1x1MEY5OS1cdTBGQkNcdTBGQzZcdTEwMDAtXHUxMDQ5XHUxMDUwLVx1MTA5RFx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzNUQtXHUxMzVGXHUxMzY5LVx1MTM3MVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y1XHUxM0Y4LVx1MTNGRFx1MTQwMS1cdTE2NkNcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkY4XHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTRcdTE3MjAtXHUxNzM0XHUxNzQwLVx1MTc1M1x1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzcyXHUxNzczXHUxNzgwLVx1MTdEM1x1MTdEN1x1MTdEQ1x1MTdERFx1MTdFMC1cdTE3RTlcdTE4MEItXHUxODBEXHUxODEwLVx1MTgxOVx1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUVcdTE5MjAtXHUxOTJCXHUxOTMwLVx1MTkzQlx1MTk0Ni1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlCMC1cdTE5QzlcdTE5RDAtXHUxOURBXHUxQTAwLVx1MUExQlx1MUEyMC1cdTFBNUVcdTFBNjAtXHUxQTdDXHUxQTdGLVx1MUE4OVx1MUE5MC1cdTFBOTlcdTFBQTdcdTFBQjAtXHUxQUJEXHUxQjAwLVx1MUI0Qlx1MUI1MC1cdTFCNTlcdTFCNkItXHUxQjczXHUxQjgwLVx1MUJGM1x1MUMwMC1cdTFDMzdcdTFDNDAtXHUxQzQ5XHUxQzRELVx1MUM3RFx1MUNEMC1cdTFDRDJcdTFDRDQtXHUxQ0Y2XHUxQ0Y4XHUxQ0Y5XHUxRDAwLVx1MURGNVx1MURGQy1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjAwQ1x1MjAwRFx1MjAzRlx1MjA0MFx1MjA1NFx1MjA3MVx1MjA3Rlx1MjA5MC1cdTIwOUNcdTIwRDAtXHUyMERDXHUyMEUxXHUyMEU1LVx1MjBGMFx1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTgtXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTYwLVx1MjE4OFx1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRjNcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ3Ri1cdTJEOTZcdTJEQTAtXHUyREE2XHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkRFMC1cdTJERkZcdTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyRlx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5OS1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZENVx1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MkJcdUE2NDAtXHVBNjZGXHVBNjc0LVx1QTY3RFx1QTY3Ri1cdUE2RjFcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3QURcdUE3QjAtXHVBN0I3XHVBN0Y3LVx1QTgyN1x1QTg0MC1cdUE4NzNcdUE4ODAtXHVBOEM0XHVBOEQwLVx1QThEOVx1QThFMC1cdUE4RjdcdUE4RkJcdUE4RkRcdUE5MDAtXHVBOTJEXHVBOTMwLVx1QTk1M1x1QTk2MC1cdUE5N0NcdUE5ODAtXHVBOUMwXHVBOUNGLVx1QTlEOVx1QTlFMC1cdUE5RkVcdUFBMDAtXHVBQTM2XHVBQTQwLVx1QUE0RFx1QUE1MC1cdUFBNTlcdUFBNjAtXHVBQTc2XHVBQTdBLVx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVGXHVBQUYyLVx1QUFGNlx1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXHVBQjMwLVx1QUI1QVx1QUI1Qy1cdUFCNjVcdUFCNzAtXHVBQkVBXHVBQkVDXHVBQkVEXHVBQkYwLVx1QUJGOVx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMUQtXHVGQjI4XHVGQjJBLVx1RkIzNlx1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkUwMC1cdUZFMEZcdUZFMjAtXHVGRTJGXHVGRTMzXHVGRTM0XHVGRTRELVx1RkU0Rlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXHVGRjEwLVx1RkYxOVx1RkYyMS1cdUZGM0FcdUZGM0ZcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdfFx1RDgwMFtcdURDMDAtXHVEQzBCXHVEQzBELVx1REMyNlx1REMyOC1cdURDM0FcdURDM0NcdURDM0RcdURDM0YtXHVEQzREXHVEQzUwLVx1REM1RFx1REM4MC1cdURDRkFcdURENDAtXHVERDc0XHVEREZEXHVERTgwLVx1REU5Q1x1REVBMC1cdURFRDBcdURFRTBcdURGMDAtXHVERjFGXHVERjMwLVx1REY0QVx1REY1MC1cdURGN0FcdURGODAtXHVERjlEXHVERkEwLVx1REZDM1x1REZDOC1cdURGQ0ZcdURGRDEtXHVERkQ1XXxcdUQ4MDFbXHVEQzAwLVx1REM5RFx1RENBMC1cdURDQTlcdUREMDAtXHVERDI3XHVERDMwLVx1REQ2M1x1REUwMC1cdURGMzZcdURGNDAtXHVERjU1XHVERjYwLVx1REY2N118XHVEODAyW1x1REMwMC1cdURDMDVcdURDMDhcdURDMEEtXHVEQzM1XHVEQzM3XHVEQzM4XHVEQzNDXHVEQzNGLVx1REM1NVx1REM2MC1cdURDNzZcdURDODAtXHVEQzlFXHVEQ0UwLVx1RENGMlx1RENGNFx1RENGNVx1REQwMC1cdUREMTVcdUREMjAtXHVERDM5XHVERDgwLVx1RERCN1x1RERCRVx1RERCRlx1REUwMC1cdURFMDNcdURFMDVcdURFMDZcdURFMEMtXHVERTEzXHVERTE1LVx1REUxN1x1REUxOS1cdURFMzNcdURFMzgtXHVERTNBXHVERTNGXHVERTYwLVx1REU3Q1x1REU4MC1cdURFOUNcdURFQzAtXHVERUM3XHVERUM5LVx1REVFNlx1REYwMC1cdURGMzVcdURGNDAtXHVERjU1XHVERjYwLVx1REY3Mlx1REY4MC1cdURGOTFdfFx1RDgwM1tcdURDMDAtXHVEQzQ4XHVEQzgwLVx1RENCMlx1RENDMC1cdURDRjJdfFx1RDgwNFtcdURDMDAtXHVEQzQ2XHVEQzY2LVx1REM2Rlx1REM3Ri1cdURDQkFcdURDRDAtXHVEQ0U4XHVEQ0YwLVx1RENGOVx1REQwMC1cdUREMzRcdUREMzYtXHVERDNGXHVERDUwLVx1REQ3M1x1REQ3Nlx1REQ4MC1cdUREQzRcdUREQ0EtXHVERENDXHVEREQwLVx1REREQVx1REREQ1x1REUwMC1cdURFMTFcdURFMTMtXHVERTM3XHVERTgwLVx1REU4Nlx1REU4OFx1REU4QS1cdURFOERcdURFOEYtXHVERTlEXHVERTlGLVx1REVBOFx1REVCMC1cdURFRUFcdURFRjAtXHVERUY5XHVERjAwLVx1REYwM1x1REYwNS1cdURGMENcdURGMEZcdURGMTBcdURGMTMtXHVERjI4XHVERjJBLVx1REYzMFx1REYzMlx1REYzM1x1REYzNS1cdURGMzlcdURGM0MtXHVERjQ0XHVERjQ3XHVERjQ4XHVERjRCLVx1REY0RFx1REY1MFx1REY1N1x1REY1RC1cdURGNjNcdURGNjYtXHVERjZDXHVERjcwLVx1REY3NF18XHVEODA1W1x1REM4MC1cdURDQzVcdURDQzdcdURDRDAtXHVEQ0Q5XHVERDgwLVx1RERCNVx1RERCOC1cdUREQzBcdURERDgtXHVEREREXHVERTAwLVx1REU0MFx1REU0NFx1REU1MC1cdURFNTlcdURFODAtXHVERUI3XHVERUMwLVx1REVDOVx1REYwMC1cdURGMTlcdURGMUQtXHVERjJCXHVERjMwLVx1REYzOV18XHVEODA2W1x1RENBMC1cdURDRTlcdURDRkZcdURFQzAtXHVERUY4XXxcdUQ4MDhbXHVEQzAwLVx1REY5OV18XHVEODA5W1x1REMwMC1cdURDNkVcdURDODAtXHVERDQzXXxbXHVEODBDXHVEODQwLVx1RDg2OFx1RDg2QS1cdUQ4NkNcdUQ4NkYtXHVEODcyXVtcdURDMDAtXHVERkZGXXxcdUQ4MERbXHVEQzAwLVx1REMyRV18XHVEODExW1x1REMwMC1cdURFNDZdfFx1RDgxQVtcdURDMDAtXHVERTM4XHVERTQwLVx1REU1RVx1REU2MC1cdURFNjlcdURFRDAtXHVERUVEXHVERUYwLVx1REVGNFx1REYwMC1cdURGMzZcdURGNDAtXHVERjQzXHVERjUwLVx1REY1OVx1REY2My1cdURGNzdcdURGN0QtXHVERjhGXXxcdUQ4MUJbXHVERjAwLVx1REY0NFx1REY1MC1cdURGN0VcdURGOEYtXHVERjlGXXxcdUQ4MkNbXHVEQzAwXHVEQzAxXXxcdUQ4MkZbXHVEQzAwLVx1REM2QVx1REM3MC1cdURDN0NcdURDODAtXHVEQzg4XHVEQzkwLVx1REM5OVx1REM5RFx1REM5RV18XHVEODM0W1x1REQ2NS1cdURENjlcdURENkQtXHVERDcyXHVERDdCLVx1REQ4Mlx1REQ4NS1cdUREOEJcdUREQUEtXHVEREFEXHVERTQyLVx1REU0NF18XHVEODM1W1x1REMwMC1cdURDNTRcdURDNTYtXHVEQzlDXHVEQzlFXHVEQzlGXHVEQ0EyXHVEQ0E1XHVEQ0E2XHVEQ0E5LVx1RENBQ1x1RENBRS1cdURDQjlcdURDQkJcdURDQkQtXHVEQ0MzXHVEQ0M1LVx1REQwNVx1REQwNy1cdUREMEFcdUREMEQtXHVERDE0XHVERDE2LVx1REQxQ1x1REQxRS1cdUREMzlcdUREM0ItXHVERDNFXHVERDQwLVx1REQ0NFx1REQ0Nlx1REQ0QS1cdURENTBcdURENTItXHVERUE1XHVERUE4LVx1REVDMFx1REVDMi1cdURFREFcdURFREMtXHVERUZBXHVERUZDLVx1REYxNFx1REYxNi1cdURGMzRcdURGMzYtXHVERjRFXHVERjUwLVx1REY2RVx1REY3MC1cdURGODhcdURGOEEtXHVERkE4XHVERkFBLVx1REZDMlx1REZDNC1cdURGQ0JcdURGQ0UtXHVERkZGXXxcdUQ4MzZbXHVERTAwLVx1REUzNlx1REUzQi1cdURFNkNcdURFNzVcdURFODRcdURFOUItXHVERTlGXHVERUExLVx1REVBRl18XHVEODNBW1x1REMwMC1cdURDQzRcdURDRDAtXHVEQ0Q2XXxcdUQ4M0JbXHVERTAwLVx1REUwM1x1REUwNS1cdURFMUZcdURFMjFcdURFMjJcdURFMjRcdURFMjdcdURFMjktXHVERTMyXHVERTM0LVx1REUzN1x1REUzOVx1REUzQlx1REU0Mlx1REU0N1x1REU0OVx1REU0Qlx1REU0RC1cdURFNEZcdURFNTFcdURFNTJcdURFNTRcdURFNTdcdURFNTlcdURFNUJcdURFNURcdURFNUZcdURFNjFcdURFNjJcdURFNjRcdURFNjctXHVERTZBXHVERTZDLVx1REU3Mlx1REU3NC1cdURFNzdcdURFNzktXHVERTdDXHVERTdFXHVERTgwLVx1REU4OVx1REU4Qi1cdURFOUJcdURFQTEtXHVERUEzXHVERUE1LVx1REVBOVx1REVBQi1cdURFQkJdfFx1RDg2OVtcdURDMDAtXHVERUQ2XHVERjAwLVx1REZGRl18XHVEODZEW1x1REMwMC1cdURGMzRcdURGNDAtXHVERkZGXXxcdUQ4NkVbXHVEQzAwLVx1REMxRFx1REMyMC1cdURGRkZdfFx1RDg3M1tcdURDMDAtXHVERUExXXxcdUQ4N0VbXHVEQzAwLVx1REUxRF18XHVEQjQwW1x1REQwMC1cdURERUZdL307dC5DaGFyYWN0ZXI9e2Zyb21Db2RlUG9pbnQ6ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdDw2NTUzNj9TdHJpbmcuZnJvbUNoYXJDb2RlKHQpOlN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKHQtNjU1MzY+PjEwKSkrU3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsodC02NTUzNiYxMDIzKSl9LGlzV2hpdGVTcGFjZTpmdW5jdGlvbiBlKHQpe3JldHVybiB0PT09MzJ8fHQ9PT05fHx0PT09MTF8fHQ9PT0xMnx8dD09PTE2MHx8dD49NTc2MCYmWzU3NjAsODE5Miw4MTkzLDgxOTQsODE5NSw4MTk2LDgxOTcsODE5OCw4MTk5LDgyMDAsODIwMSw4MjAyLDgyMzksODI4NywxMjI4OCw2NTI3OV0uaW5kZXhPZih0KT49MH0saXNMaW5lVGVybWluYXRvcjpmdW5jdGlvbiBlKHQpe3JldHVybiB0PT09MTB8fHQ9PT0xM3x8dD09PTgyMzJ8fHQ9PT04MjMzfSxpc0lkZW50aWZpZXJTdGFydDpmdW5jdGlvbiBlKHMpe3JldHVybiBzPT09MzZ8fHM9PT05NXx8cz49NjUmJnM8PTkwfHxzPj05NyYmczw9MTIyfHxzPT09OTJ8fHM+PTEyOCYmci5Ob25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KHQuQ2hhcmFjdGVyLmZyb21Db2RlUG9pbnQocykpfSxpc0lkZW50aWZpZXJQYXJ0OmZ1bmN0aW9uIGUocyl7cmV0dXJuIHM9PT0zNnx8cz09PTk1fHxzPj02NSYmczw9OTB8fHM+PTk3JiZzPD0xMjJ8fHM+PTQ4JiZzPD01N3x8cz09PTkyfHxzPj0xMjgmJnIuTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KHQuQ2hhcmFjdGVyLmZyb21Db2RlUG9pbnQocykpfSxpc0RlY2ltYWxEaWdpdDpmdW5jdGlvbiBlKHQpe3JldHVybiB0Pj00OCYmdDw9NTd9LGlzSGV4RGlnaXQ6ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdD49NDgmJnQ8PTU3fHx0Pj02NSYmdDw9NzB8fHQ+PTk3JiZ0PD0xMDJ9LGlzT2N0YWxEaWdpdDpmdW5jdGlvbiBlKHQpe3JldHVybiB0Pj00OCYmdDw9NTV9fX0sZnVuY3Rpb24oZSx0LHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6dHJ1ZX0pO3ZhciBzPXIoNik7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1zLkpTWFN5bnRheC5KU1hDbG9zaW5nRWxlbWVudDt0aGlzLm5hbWU9ZX1yZXR1cm4gZX0oKTt0LkpTWENsb3NpbmdFbGVtZW50PWk7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyKXt0aGlzLnR5cGU9cy5KU1hTeW50YXguSlNYRWxlbWVudDt0aGlzLm9wZW5pbmdFbGVtZW50PWU7dGhpcy5jaGlsZHJlbj10O3RoaXMuY2xvc2luZ0VsZW1lbnQ9cn1yZXR1cm4gZX0oKTt0LkpTWEVsZW1lbnQ9bjt2YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnR5cGU9cy5KU1hTeW50YXguSlNYRW1wdHlFeHByZXNzaW9ufXJldHVybiBlfSgpO3QuSlNYRW1wdHlFeHByZXNzaW9uPWE7dmFyIG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1zLkpTWFN5bnRheC5KU1hFeHByZXNzaW9uQ29udGFpbmVyO3RoaXMuZXhwcmVzc2lvbj1lfXJldHVybiBlfSgpO3QuSlNYRXhwcmVzc2lvbkNvbnRhaW5lcj1vO3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9cy5KU1hTeW50YXguSlNYSWRlbnRpZmllcjt0aGlzLm5hbWU9ZX1yZXR1cm4gZX0oKTt0LkpTWElkZW50aWZpZXI9bDt2YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9cy5KU1hTeW50YXguSlNYTWVtYmVyRXhwcmVzc2lvbjt0aGlzLm9iamVjdD1lO3RoaXMucHJvcGVydHk9dH1yZXR1cm4gZX0oKTt0LkpTWE1lbWJlckV4cHJlc3Npb249dTt2YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9cy5KU1hTeW50YXguSlNYQXR0cmlidXRlO3RoaXMubmFtZT1lO3RoaXMudmFsdWU9dH1yZXR1cm4gZX0oKTt0LkpTWEF0dHJpYnV0ZT1jO3ZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1zLkpTWFN5bnRheC5KU1hOYW1lc3BhY2VkTmFtZTt0aGlzLm5hbWVzcGFjZT1lO3RoaXMubmFtZT10fXJldHVybiBlfSgpO3QuSlNYTmFtZXNwYWNlZE5hbWU9aDt2YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIpe3RoaXMudHlwZT1zLkpTWFN5bnRheC5KU1hPcGVuaW5nRWxlbWVudDt0aGlzLm5hbWU9ZTt0aGlzLnNlbGZDbG9zaW5nPXQ7dGhpcy5hdHRyaWJ1dGVzPXJ9cmV0dXJuIGV9KCk7dC5KU1hPcGVuaW5nRWxlbWVudD1wO3ZhciBmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9cy5KU1hTeW50YXguSlNYU3ByZWFkQXR0cmlidXRlO3RoaXMuYXJndW1lbnQ9ZX1yZXR1cm4gZX0oKTt0LkpTWFNwcmVhZEF0dHJpYnV0ZT1mO3ZhciBkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1zLkpTWFN5bnRheC5KU1hUZXh0O3RoaXMudmFsdWU9ZTt0aGlzLnJhdz10fXJldHVybiBlfSgpO3QuSlNYVGV4dD1kfSxmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6dHJ1ZX0pO3QuSlNYU3ludGF4PXtKU1hBdHRyaWJ1dGU6IkpTWEF0dHJpYnV0ZSIsSlNYQ2xvc2luZ0VsZW1lbnQ6IkpTWENsb3NpbmdFbGVtZW50IixKU1hFbGVtZW50OiJKU1hFbGVtZW50IixKU1hFbXB0eUV4cHJlc3Npb246IkpTWEVtcHR5RXhwcmVzc2lvbiIsSlNYRXhwcmVzc2lvbkNvbnRhaW5lcjoiSlNYRXhwcmVzc2lvbkNvbnRhaW5lciIsSlNYSWRlbnRpZmllcjoiSlNYSWRlbnRpZmllciIsSlNYTWVtYmVyRXhwcmVzc2lvbjoiSlNYTWVtYmVyRXhwcmVzc2lvbiIsSlNYTmFtZXNwYWNlZE5hbWU6IkpTWE5hbWVzcGFjZWROYW1lIixKU1hPcGVuaW5nRWxlbWVudDoiSlNYT3BlbmluZ0VsZW1lbnQiLEpTWFNwcmVhZEF0dHJpYnV0ZToiSlNYU3ByZWFkQXR0cmlidXRlIixKU1hUZXh0OiJKU1hUZXh0In19LGZ1bmN0aW9uKGUsdCxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTt2YXIgcz1yKDIpO3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9cy5TeW50YXguQXJyYXlFeHByZXNzaW9uO3RoaXMuZWxlbWVudHM9ZX1yZXR1cm4gZX0oKTt0LkFycmF5RXhwcmVzc2lvbj1pO3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9cy5TeW50YXguQXJyYXlQYXR0ZXJuO3RoaXMuZWxlbWVudHM9ZX1yZXR1cm4gZX0oKTt0LkFycmF5UGF0dGVybj1uO3ZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7dGhpcy50eXBlPXMuU3ludGF4LkFycm93RnVuY3Rpb25FeHByZXNzaW9uO3RoaXMuaWQ9bnVsbDt0aGlzLnBhcmFtcz1lO3RoaXMuYm9keT10O3RoaXMuZ2VuZXJhdG9yPWZhbHNlO3RoaXMuZXhwcmVzc2lvbj1yO3RoaXMuYXN5bmM9ZmFsc2V9cmV0dXJuIGV9KCk7dC5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbj1hO3ZhciBvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7dGhpcy50eXBlPXMuU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9uO3RoaXMub3BlcmF0b3I9ZTt0aGlzLmxlZnQ9dDt0aGlzLnJpZ2h0PXJ9cmV0dXJuIGV9KCk7dC5Bc3NpZ25tZW50RXhwcmVzc2lvbj1vO3ZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1zLlN5bnRheC5Bc3NpZ25tZW50UGF0dGVybjt0aGlzLmxlZnQ9ZTt0aGlzLnJpZ2h0PXR9cmV0dXJuIGV9KCk7dC5Bc3NpZ25tZW50UGF0dGVybj1sO3ZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7dGhpcy50eXBlPXMuU3ludGF4LkFycm93RnVuY3Rpb25FeHByZXNzaW9uO3RoaXMuaWQ9bnVsbDt0aGlzLnBhcmFtcz1lO3RoaXMuYm9keT10O3RoaXMuZ2VuZXJhdG9yPWZhbHNlO3RoaXMuZXhwcmVzc2lvbj1yO3RoaXMuYXN5bmM9dHJ1ZX1yZXR1cm4gZX0oKTt0LkFzeW5jQXJyb3dGdW5jdGlvbkV4cHJlc3Npb249dTt2YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIpe3RoaXMudHlwZT1zLlN5bnRheC5GdW5jdGlvbkRlY2xhcmF0aW9uO3RoaXMuaWQ9ZTt0aGlzLnBhcmFtcz10O3RoaXMuYm9keT1yO3RoaXMuZ2VuZXJhdG9yPWZhbHNlO3RoaXMuZXhwcmVzc2lvbj1mYWxzZTt0aGlzLmFzeW5jPXRydWV9cmV0dXJuIGV9KCk7dC5Bc3luY0Z1bmN0aW9uRGVjbGFyYXRpb249Yzt2YXIgaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIpe3RoaXMudHlwZT1zLlN5bnRheC5GdW5jdGlvbkV4cHJlc3Npb247dGhpcy5pZD1lO3RoaXMucGFyYW1zPXQ7dGhpcy5ib2R5PXI7dGhpcy5nZW5lcmF0b3I9ZmFsc2U7dGhpcy5leHByZXNzaW9uPWZhbHNlO3RoaXMuYXN5bmM9dHJ1ZX1yZXR1cm4gZX0oKTt0LkFzeW5jRnVuY3Rpb25FeHByZXNzaW9uPWg7dmFyIHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1zLlN5bnRheC5Bd2FpdEV4cHJlc3Npb247dGhpcy5hcmd1bWVudD1lfXJldHVybiBlfSgpO3QuQXdhaXRFeHByZXNzaW9uPXA7dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyKXt2YXIgaT1lPT09Inx8Inx8ZT09PSImJiI7dGhpcy50eXBlPWk/cy5TeW50YXguTG9naWNhbEV4cHJlc3Npb246cy5TeW50YXguQmluYXJ5RXhwcmVzc2lvbjt0aGlzLm9wZXJhdG9yPWU7dGhpcy5sZWZ0PXQ7dGhpcy5yaWdodD1yfXJldHVybiBlfSgpO3QuQmluYXJ5RXhwcmVzc2lvbj1mO3ZhciBkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9cy5TeW50YXguQmxvY2tTdGF0ZW1lbnQ7dGhpcy5ib2R5PWV9cmV0dXJuIGV9KCk7dC5CbG9ja1N0YXRlbWVudD1kO3ZhciBtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9cy5TeW50YXguQnJlYWtTdGF0ZW1lbnQ7dGhpcy5sYWJlbD1lfXJldHVybiBlfSgpO3QuQnJlYWtTdGF0ZW1lbnQ9bTt2YXIgeT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9cy5TeW50YXguQ2FsbEV4cHJlc3Npb247dGhpcy5jYWxsZWU9ZTt0aGlzLmFyZ3VtZW50cz10fXJldHVybiBlfSgpO3QuQ2FsbEV4cHJlc3Npb249eTt2YXIgZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9cy5TeW50YXguQ2F0Y2hDbGF1c2U7dGhpcy5wYXJhbT1lO3RoaXMuYm9keT10fXJldHVybiBlfSgpO3QuQ2F0Y2hDbGF1c2U9Zzt2YXIgeD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXMuU3ludGF4LkNsYXNzQm9keTt0aGlzLmJvZHk9ZX1yZXR1cm4gZX0oKTt0LkNsYXNzQm9keT14O3ZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7dGhpcy50eXBlPXMuU3ludGF4LkNsYXNzRGVjbGFyYXRpb247dGhpcy5pZD1lO3RoaXMuc3VwZXJDbGFzcz10O3RoaXMuYm9keT1yfXJldHVybiBlfSgpO3QuQ2xhc3NEZWNsYXJhdGlvbj12O3ZhciBiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7dGhpcy50eXBlPXMuU3ludGF4LkNsYXNzRXhwcmVzc2lvbjt0aGlzLmlkPWU7dGhpcy5zdXBlckNsYXNzPXQ7dGhpcy5ib2R5PXJ9cmV0dXJuIGV9KCk7dC5DbGFzc0V4cHJlc3Npb249Yjt2YXIgRT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9cy5TeW50YXguTWVtYmVyRXhwcmVzc2lvbjt0aGlzLmNvbXB1dGVkPXRydWU7dGhpcy5vYmplY3Q9ZTt0aGlzLnByb3BlcnR5PXR9cmV0dXJuIGV9KCk7dC5Db21wdXRlZE1lbWJlckV4cHJlc3Npb249RTt2YXIgUz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIpe3RoaXMudHlwZT1zLlN5bnRheC5Db25kaXRpb25hbEV4cHJlc3Npb247dGhpcy50ZXN0PWU7dGhpcy5jb25zZXF1ZW50PXQ7dGhpcy5hbHRlcm5hdGU9cn1yZXR1cm4gZX0oKTt0LkNvbmRpdGlvbmFsRXhwcmVzc2lvbj1TO3ZhciBUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9cy5TeW50YXguQ29udGludWVTdGF0ZW1lbnQ7dGhpcy5sYWJlbD1lfXJldHVybiBlfSgpO3QuQ29udGludWVTdGF0ZW1lbnQ9VDt2YXIgQT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnR5cGU9cy5TeW50YXguRGVidWdnZXJTdGF0ZW1lbnR9cmV0dXJuIGV9KCk7dC5EZWJ1Z2dlclN0YXRlbWVudD1BO3ZhciB3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1zLlN5bnRheC5FeHByZXNzaW9uU3RhdGVtZW50O3RoaXMuZXhwcmVzc2lvbj1lO3RoaXMuZGlyZWN0aXZlPXR9cmV0dXJuIGV9KCk7dC5EaXJlY3RpdmU9dzt2YXIgQz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9cy5TeW50YXguRG9XaGlsZVN0YXRlbWVudDt0aGlzLmJvZHk9ZTt0aGlzLnRlc3Q9dH1yZXR1cm4gZX0oKTt0LkRvV2hpbGVTdGF0ZW1lbnQ9Qzt2YXIgUD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnR5cGU9cy5TeW50YXguRW1wdHlTdGF0ZW1lbnR9cmV0dXJuIGV9KCk7dC5FbXB0eVN0YXRlbWVudD1QO3ZhciBEPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9cy5TeW50YXguRXhwb3J0QWxsRGVjbGFyYXRpb247dGhpcy5zb3VyY2U9ZX1yZXR1cm4gZX0oKTt0LkV4cG9ydEFsbERlY2xhcmF0aW9uPUQ7dmFyIGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1zLlN5bnRheC5FeHBvcnREZWZhdWx0RGVjbGFyYXRpb247dGhpcy5kZWNsYXJhdGlvbj1lfXJldHVybiBlfSgpO3QuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uPWs7dmFyIE49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyKXt0aGlzLnR5cGU9cy5TeW50YXguRXhwb3J0TmFtZWREZWNsYXJhdGlvbjt0aGlzLmRlY2xhcmF0aW9uPWU7dGhpcy5zcGVjaWZpZXJzPXQ7dGhpcy5zb3VyY2U9cn1yZXR1cm4gZX0oKTt0LkV4cG9ydE5hbWVkRGVjbGFyYXRpb249Tjt2YXIgST1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9cy5TeW50YXguRXhwb3J0U3BlY2lmaWVyO3RoaXMuZXhwb3J0ZWQ9dDt0aGlzLmxvY2FsPWV9cmV0dXJuIGV9KCk7dC5FeHBvcnRTcGVjaWZpZXI9STt2YXIgRj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXMuU3ludGF4LkV4cHJlc3Npb25TdGF0ZW1lbnQ7dGhpcy5leHByZXNzaW9uPWV9cmV0dXJuIGV9KCk7dC5FeHByZXNzaW9uU3RhdGVtZW50PUY7dmFyIE09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyKXt0aGlzLnR5cGU9cy5TeW50YXguRm9ySW5TdGF0ZW1lbnQ7dGhpcy5sZWZ0PWU7dGhpcy5yaWdodD10O3RoaXMuYm9keT1yO3RoaXMuZWFjaD1mYWxzZX1yZXR1cm4gZX0oKTt0LkZvckluU3RhdGVtZW50PU07dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyKXt0aGlzLnR5cGU9cy5TeW50YXguRm9yT2ZTdGF0ZW1lbnQ7dGhpcy5sZWZ0PWU7dGhpcy5yaWdodD10O3RoaXMuYm9keT1yfXJldHVybiBlfSgpO3QuRm9yT2ZTdGF0ZW1lbnQ9Xzt2YXIgTz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIsaSl7dGhpcy50eXBlPXMuU3ludGF4LkZvclN0YXRlbWVudDt0aGlzLmluaXQ9ZTt0aGlzLnRlc3Q9dDt0aGlzLnVwZGF0ZT1yO3RoaXMuYm9keT1pfXJldHVybiBlfSgpO3QuRm9yU3RhdGVtZW50PU87dmFyIEw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLGkpe3RoaXMudHlwZT1zLlN5bnRheC5GdW5jdGlvbkRlY2xhcmF0aW9uO3RoaXMuaWQ9ZTt0aGlzLnBhcmFtcz10O3RoaXMuYm9keT1yO3RoaXMuZ2VuZXJhdG9yPWk7dGhpcy5leHByZXNzaW9uPWZhbHNlO3RoaXMuYXN5bmM9ZmFsc2V9cmV0dXJuIGV9KCk7dC5GdW5jdGlvbkRlY2xhcmF0aW9uPUw7dmFyIEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLGkpe3RoaXMudHlwZT1zLlN5bnRheC5GdW5jdGlvbkV4cHJlc3Npb247dGhpcy5pZD1lO3RoaXMucGFyYW1zPXQ7dGhpcy5ib2R5PXI7dGhpcy5nZW5lcmF0b3I9aTt0aGlzLmV4cHJlc3Npb249ZmFsc2U7dGhpcy5hc3luYz1mYWxzZX1yZXR1cm4gZX0oKTt0LkZ1bmN0aW9uRXhwcmVzc2lvbj1CO3ZhciBSPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9cy5TeW50YXguSWRlbnRpZmllcjt0aGlzLm5hbWU9ZX1yZXR1cm4gZX0oKTt0LklkZW50aWZpZXI9Ujt2YXIgaj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIpe3RoaXMudHlwZT1zLlN5bnRheC5JZlN0YXRlbWVudDt0aGlzLnRlc3Q9ZTt0aGlzLmNvbnNlcXVlbnQ9dDt0aGlzLmFsdGVybmF0ZT1yfXJldHVybiBlfSgpO3QuSWZTdGF0ZW1lbnQ9ajt2YXIgVT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9cy5TeW50YXguSW1wb3J0RGVjbGFyYXRpb247dGhpcy5zcGVjaWZpZXJzPWU7dGhpcy5zb3VyY2U9dH1yZXR1cm4gZX0oKTt0LkltcG9ydERlY2xhcmF0aW9uPVU7dmFyIHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1zLlN5bnRheC5JbXBvcnREZWZhdWx0U3BlY2lmaWVyO3RoaXMubG9jYWw9ZX1yZXR1cm4gZX0oKTt0LkltcG9ydERlZmF1bHRTcGVjaWZpZXI9ejt2YXIgVj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXMuU3ludGF4LkltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjt0aGlzLmxvY2FsPWV9cmV0dXJuIGV9KCk7dC5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI9Vjt2YXIgcT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9cy5TeW50YXguSW1wb3J0U3BlY2lmaWVyO3RoaXMubG9jYWw9ZTt0aGlzLmltcG9ydGVkPXR9cmV0dXJuIGV9KCk7dC5JbXBvcnRTcGVjaWZpZXI9cTt2YXIgRz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9cy5TeW50YXguTGFiZWxlZFN0YXRlbWVudDt0aGlzLmxhYmVsPWU7dGhpcy5ib2R5PXR9cmV0dXJuIGV9KCk7dC5MYWJlbGVkU3RhdGVtZW50PUc7dmFyIFg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXMuU3ludGF4LkxpdGVyYWw7dGhpcy52YWx1ZT1lO3RoaXMucmF3PXR9cmV0dXJuIGV9KCk7dC5MaXRlcmFsPVg7dmFyIEo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXMuU3ludGF4Lk1ldGFQcm9wZXJ0eTt0aGlzLm1ldGE9ZTt0aGlzLnByb3BlcnR5PXR9cmV0dXJuIGV9KCk7dC5NZXRhUHJvcGVydHk9Sjt2YXIgSD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIsaSxuKXt0aGlzLnR5cGU9cy5TeW50YXguTWV0aG9kRGVmaW5pdGlvbjt0aGlzLmtleT1lO3RoaXMuY29tcHV0ZWQ9dDt0aGlzLnZhbHVlPXI7dGhpcy5raW5kPWk7dGhpcy5zdGF0aWM9bn1yZXR1cm4gZX0oKTt0Lk1ldGhvZERlZmluaXRpb249SDt2YXIgVz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXMuU3ludGF4LlByb2dyYW07dGhpcy5ib2R5PWU7dGhpcy5zb3VyY2VUeXBlPSJtb2R1bGUifXJldHVybiBlfSgpO3QuTW9kdWxlPVc7dmFyIEs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXMuU3ludGF4Lk5ld0V4cHJlc3Npb247dGhpcy5jYWxsZWU9ZTt0aGlzLmFyZ3VtZW50cz10fXJldHVybiBlfSgpO3QuTmV3RXhwcmVzc2lvbj1LO3ZhciAkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9cy5TeW50YXguT2JqZWN0RXhwcmVzc2lvbjt0aGlzLnByb3BlcnRpZXM9ZX1yZXR1cm4gZX0oKTt0Lk9iamVjdEV4cHJlc3Npb249JDt2YXIgWT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXMuU3ludGF4Lk9iamVjdFBhdHRlcm47dGhpcy5wcm9wZXJ0aWVzPWV9cmV0dXJuIGV9KCk7dC5PYmplY3RQYXR0ZXJuPVk7dmFyIFE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLGksbixhKXt0aGlzLnR5cGU9cy5TeW50YXguUHJvcGVydHk7dGhpcy5rZXk9dDt0aGlzLmNvbXB1dGVkPXI7dGhpcy52YWx1ZT1pO3RoaXMua2luZD1lO3RoaXMubWV0aG9kPW47dGhpcy5zaG9ydGhhbmQ9YX1yZXR1cm4gZX0oKTt0LlByb3BlcnR5PVE7dmFyIFo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLGkpe3RoaXMudHlwZT1zLlN5bnRheC5MaXRlcmFsO3RoaXMudmFsdWU9ZTt0aGlzLnJhdz10O3RoaXMucmVnZXg9e3BhdHRlcm46cixmbGFnczppfX1yZXR1cm4gZX0oKTt0LlJlZ2V4TGl0ZXJhbD1aO3ZhciBlZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXMuU3ludGF4LlJlc3RFbGVtZW50O3RoaXMuYXJndW1lbnQ9ZX1yZXR1cm4gZX0oKTt0LlJlc3RFbGVtZW50PWVlO3ZhciB0ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50eXBlPXMuU3ludGF4LlJldHVyblN0YXRlbWVudDt0aGlzLmFyZ3VtZW50PWV9cmV0dXJuIGV9KCk7dC5SZXR1cm5TdGF0ZW1lbnQ9dGU7dmFyIHJlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9cy5TeW50YXguUHJvZ3JhbTt0aGlzLmJvZHk9ZTt0aGlzLnNvdXJjZVR5cGU9InNjcmlwdCJ9cmV0dXJuIGV9KCk7dC5TY3JpcHQ9cmU7dmFyIHNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9cy5TeW50YXguU2VxdWVuY2VFeHByZXNzaW9uO3RoaXMuZXhwcmVzc2lvbnM9ZX1yZXR1cm4gZX0oKTt0LlNlcXVlbmNlRXhwcmVzc2lvbj1zZTt2YXIgaWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1zLlN5bnRheC5TcHJlYWRFbGVtZW50O3RoaXMuYXJndW1lbnQ9ZX1yZXR1cm4gZX0oKTt0LlNwcmVhZEVsZW1lbnQ9aWU7dmFyIG5lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1zLlN5bnRheC5NZW1iZXJFeHByZXNzaW9uO3RoaXMuY29tcHV0ZWQ9ZmFsc2U7dGhpcy5vYmplY3Q9ZTt0aGlzLnByb3BlcnR5PXR9cmV0dXJuIGV9KCk7dC5TdGF0aWNNZW1iZXJFeHByZXNzaW9uPW5lO3ZhciBhZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnR5cGU9cy5TeW50YXguU3VwZXJ9cmV0dXJuIGV9KCk7dC5TdXBlcj1hZTt2YXIgb2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXMuU3ludGF4LlN3aXRjaENhc2U7dGhpcy50ZXN0PWU7dGhpcy5jb25zZXF1ZW50PXR9cmV0dXJuIGV9KCk7dC5Td2l0Y2hDYXNlPW9lO3ZhciBsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9cy5TeW50YXguU3dpdGNoU3RhdGVtZW50O3RoaXMuZGlzY3JpbWluYW50PWU7dGhpcy5jYXNlcz10fXJldHVybiBlfSgpO3QuU3dpdGNoU3RhdGVtZW50PWxlO3ZhciB1ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9cy5TeW50YXguVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uO3RoaXMudGFnPWU7dGhpcy5xdWFzaT10fXJldHVybiBlfSgpO3QuVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uPXVlO3ZhciBjZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9cy5TeW50YXguVGVtcGxhdGVFbGVtZW50O3RoaXMudmFsdWU9ZTt0aGlzLnRhaWw9dH1yZXR1cm4gZX0oKTt0LlRlbXBsYXRlRWxlbWVudD1jZTt2YXIgaGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXMuU3ludGF4LlRlbXBsYXRlTGl0ZXJhbDt0aGlzLnF1YXNpcz1lO3RoaXMuZXhwcmVzc2lvbnM9dH1yZXR1cm4gZX0oKTt0LlRlbXBsYXRlTGl0ZXJhbD1oZTt2YXIgcGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50eXBlPXMuU3ludGF4LlRoaXNFeHByZXNzaW9ufXJldHVybiBlfSgpO3QuVGhpc0V4cHJlc3Npb249cGU7dmFyIGZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnR5cGU9cy5TeW50YXguVGhyb3dTdGF0ZW1lbnQ7dGhpcy5hcmd1bWVudD1lfXJldHVybiBlfSgpO3QuVGhyb3dTdGF0ZW1lbnQ9ZmU7dmFyIGRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7dGhpcy50eXBlPXMuU3ludGF4LlRyeVN0YXRlbWVudDt0aGlzLmJsb2NrPWU7dGhpcy5oYW5kbGVyPXQ7dGhpcy5maW5hbGl6ZXI9cn1yZXR1cm4gZX0oKTt0LlRyeVN0YXRlbWVudD1kZTt2YXIgbWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXMuU3ludGF4LlVuYXJ5RXhwcmVzc2lvbjt0aGlzLm9wZXJhdG9yPWU7dGhpcy5hcmd1bWVudD10O3RoaXMucHJlZml4PXRydWV9cmV0dXJuIGV9KCk7dC5VbmFyeUV4cHJlc3Npb249bWU7dmFyIHllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7dGhpcy50eXBlPXMuU3ludGF4LlVwZGF0ZUV4cHJlc3Npb247dGhpcy5vcGVyYXRvcj1lO3RoaXMuYXJndW1lbnQ9dDt0aGlzLnByZWZpeD1yfXJldHVybiBlfSgpO3QuVXBkYXRlRXhwcmVzc2lvbj15ZTt2YXIgZ2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXMuU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRpb247dGhpcy5kZWNsYXJhdGlvbnM9ZTt0aGlzLmtpbmQ9dH1yZXR1cm4gZX0oKTt0LlZhcmlhYmxlRGVjbGFyYXRpb249Z2U7dmFyIHhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1zLlN5bnRheC5WYXJpYWJsZURlY2xhcmF0b3I7dGhpcy5pZD1lO3RoaXMuaW5pdD10fXJldHVybiBlfSgpO3QuVmFyaWFibGVEZWNsYXJhdG9yPXhlO3ZhciB2ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnR5cGU9cy5TeW50YXguV2hpbGVTdGF0ZW1lbnQ7dGhpcy50ZXN0PWU7dGhpcy5ib2R5PXR9cmV0dXJuIGV9KCk7dC5XaGlsZVN0YXRlbWVudD12ZTt2YXIgYmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy50eXBlPXMuU3ludGF4LldpdGhTdGF0ZW1lbnQ7dGhpcy5vYmplY3Q9ZTt0aGlzLmJvZHk9dH1yZXR1cm4gZX0oKTt0LldpdGhTdGF0ZW1lbnQ9YmU7dmFyIEVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMudHlwZT1zLlN5bnRheC5ZaWVsZEV4cHJlc3Npb247dGhpcy5hcmd1bWVudD1lO3RoaXMuZGVsZWdhdGU9dH1yZXR1cm4gZX0oKTt0LllpZWxkRXhwcmVzc2lvbj1FZX0sZnVuY3Rpb24oZSx0LHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6dHJ1ZX0pO3ZhciBzPXIoOSk7dmFyIGk9cigxMCk7dmFyIG49cigxMSk7dmFyIGE9cig3KTt2YXIgbz1yKDEyKTt2YXIgbD1yKDIpO3ZhciB1PXIoMTMpO3ZhciBjPSJBcnJvd1BhcmFtZXRlclBsYWNlSG9sZGVyIjt2YXIgaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIpe2lmKHQ9PT12b2lkIDApe3Q9e319dGhpcy5jb25maWc9e3JhbmdlOnR5cGVvZiB0LnJhbmdlPT09ImJvb2xlYW4iJiZ0LnJhbmdlLGxvYzp0eXBlb2YgdC5sb2M9PT0iYm9vbGVhbiImJnQubG9jLHNvdXJjZTpudWxsLHRva2Vuczp0eXBlb2YgdC50b2tlbnM9PT0iYm9vbGVhbiImJnQudG9rZW5zLGNvbW1lbnQ6dHlwZW9mIHQuY29tbWVudD09PSJib29sZWFuIiYmdC5jb21tZW50LHRvbGVyYW50OnR5cGVvZiB0LnRvbGVyYW50PT09ImJvb2xlYW4iJiZ0LnRvbGVyYW50fTtpZih0aGlzLmNvbmZpZy5sb2MmJnQuc291cmNlJiZ0LnNvdXJjZSE9PW51bGwpe3RoaXMuY29uZmlnLnNvdXJjZT1TdHJpbmcodC5zb3VyY2UpfXRoaXMuZGVsZWdhdGU9cjt0aGlzLmVycm9ySGFuZGxlcj1uZXcgaS5FcnJvckhhbmRsZXI7dGhpcy5lcnJvckhhbmRsZXIudG9sZXJhbnQ9dGhpcy5jb25maWcudG9sZXJhbnQ7dGhpcy5zY2FubmVyPW5ldyBvLlNjYW5uZXIoZSx0aGlzLmVycm9ySGFuZGxlcik7dGhpcy5zY2FubmVyLnRyYWNrQ29tbWVudD10aGlzLmNvbmZpZy5jb21tZW50O3RoaXMub3BlcmF0b3JQcmVjZWRlbmNlPXsiKSI6MCwiOyI6MCwiLCI6MCwiPSI6MCwiXSI6MCwifHwiOjEsIiYmIjoyLCJ8IjozLCJeIjo0LCImIjo1LCI9PSI6NiwiIT0iOjYsIj09PSI6NiwiIT09Ijo2LCI8Ijo3LCI+Ijo3LCI8PSI6NywiPj0iOjcsIjw8Ijo4LCI+PiI6OCwiPj4+Ijo4LCIrIjo5LCItIjo5LCIqIjoxMSwiLyI6MTEsIiUiOjExfTt0aGlzLmxvb2thaGVhZD17dHlwZToyLHZhbHVlOiIiLGxpbmVOdW1iZXI6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsbGluZVN0YXJ0OjAsc3RhcnQ6MCxlbmQ6MH07dGhpcy5oYXNMaW5lVGVybWluYXRvcj1mYWxzZTt0aGlzLmNvbnRleHQ9e2lzTW9kdWxlOmZhbHNlLGF3YWl0OmZhbHNlLGFsbG93SW46dHJ1ZSxhbGxvd1N0cmljdERpcmVjdGl2ZTp0cnVlLGFsbG93WWllbGQ6dHJ1ZSxmaXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I6bnVsbCxpc0Fzc2lnbm1lbnRUYXJnZXQ6ZmFsc2UsaXNCaW5kaW5nRWxlbWVudDpmYWxzZSxpbkZ1bmN0aW9uQm9keTpmYWxzZSxpbkl0ZXJhdGlvbjpmYWxzZSxpblN3aXRjaDpmYWxzZSxsYWJlbFNldDp7fSxzdHJpY3Q6ZmFsc2V9O3RoaXMudG9rZW5zPVtdO3RoaXMuc3RhcnRNYXJrZXI9e2luZGV4OjAsbGluZTp0aGlzLnNjYW5uZXIubGluZU51bWJlcixjb2x1bW46MH07dGhpcy5sYXN0TWFya2VyPXtpbmRleDowLGxpbmU6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsY29sdW1uOjB9O3RoaXMubmV4dFRva2VuKCk7dGhpcy5sYXN0TWFya2VyPXtpbmRleDp0aGlzLnNjYW5uZXIuaW5kZXgsbGluZTp0aGlzLnNjYW5uZXIubGluZU51bWJlcixjb2x1bW46dGhpcy5zY2FubmVyLmluZGV4LXRoaXMuc2Nhbm5lci5saW5lU3RhcnR9fWUucHJvdG90eXBlLnRocm93RXJyb3I9ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl7dFtyLTFdPWFyZ3VtZW50c1tyXX12YXIgaT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7dmFyIG49ZS5yZXBsYWNlKC8lKFxkKS9nLChmdW5jdGlvbihlLHQpe3MuYXNzZXJ0KHQ8aS5sZW5ndGgsIk1lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2UiKTtyZXR1cm4gaVt0XX0pKTt2YXIgYT10aGlzLmxhc3RNYXJrZXIuaW5kZXg7dmFyIG89dGhpcy5sYXN0TWFya2VyLmxpbmU7dmFyIGw9dGhpcy5sYXN0TWFya2VyLmNvbHVtbisxO3Rocm93IHRoaXMuZXJyb3JIYW5kbGVyLmNyZWF0ZUVycm9yKGEsbyxsLG4pfTtlLnByb3RvdHlwZS50b2xlcmF0ZUVycm9yPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgcj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe3Rbci0xXT1hcmd1bWVudHNbcl19dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3ZhciBuPWUucmVwbGFjZSgvJShcZCkvZywoZnVuY3Rpb24oZSx0KXtzLmFzc2VydCh0PGkubGVuZ3RoLCJNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJhbmdlIik7cmV0dXJuIGlbdF19KSk7dmFyIGE9dGhpcy5sYXN0TWFya2VyLmluZGV4O3ZhciBvPXRoaXMuc2Nhbm5lci5saW5lTnVtYmVyO3ZhciBsPXRoaXMubGFzdE1hcmtlci5jb2x1bW4rMTt0aGlzLmVycm9ySGFuZGxlci50b2xlcmF0ZUVycm9yKGEsbyxsLG4pfTtlLnByb3RvdHlwZS51bmV4cGVjdGVkVG9rZW5FcnJvcj1mdW5jdGlvbihlLHQpe3ZhciByPXR8fG4uTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuO3ZhciBzO2lmKGUpe2lmKCF0KXtyPWUudHlwZT09PTI/bi5NZXNzYWdlcy5VbmV4cGVjdGVkRU9TOmUudHlwZT09PTM/bi5NZXNzYWdlcy5VbmV4cGVjdGVkSWRlbnRpZmllcjplLnR5cGU9PT02P24uTWVzc2FnZXMuVW5leHBlY3RlZE51bWJlcjplLnR5cGU9PT04P24uTWVzc2FnZXMuVW5leHBlY3RlZFN0cmluZzplLnR5cGU9PT0xMD9uLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUZW1wbGF0ZTpuLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbjtpZihlLnR5cGU9PT00KXtpZih0aGlzLnNjYW5uZXIuaXNGdXR1cmVSZXNlcnZlZFdvcmQoZS52YWx1ZSkpe3I9bi5NZXNzYWdlcy5VbmV4cGVjdGVkUmVzZXJ2ZWR9ZWxzZSBpZih0aGlzLmNvbnRleHQuc3RyaWN0JiZ0aGlzLnNjYW5uZXIuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGUudmFsdWUpKXtyPW4uTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkfX19cz1lLnZhbHVlfWVsc2V7cz0iSUxMRUdBTCJ9cj1yLnJlcGxhY2UoIiUwIixzKTtpZihlJiZ0eXBlb2YgZS5saW5lTnVtYmVyPT09Im51bWJlciIpe3ZhciBpPWUuc3RhcnQ7dmFyIGE9ZS5saW5lTnVtYmVyO3ZhciBvPXRoaXMubGFzdE1hcmtlci5pbmRleC10aGlzLmxhc3RNYXJrZXIuY29sdW1uO3ZhciBsPWUuc3RhcnQtbysxO3JldHVybiB0aGlzLmVycm9ySGFuZGxlci5jcmVhdGVFcnJvcihpLGEsbCxyKX1lbHNle3ZhciBpPXRoaXMubGFzdE1hcmtlci5pbmRleDt2YXIgYT10aGlzLmxhc3RNYXJrZXIubGluZTt2YXIgbD10aGlzLmxhc3RNYXJrZXIuY29sdW1uKzE7cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLmNyZWF0ZUVycm9yKGksYSxsLHIpfX07ZS5wcm90b3R5cGUudGhyb3dVbmV4cGVjdGVkVG9rZW49ZnVuY3Rpb24oZSx0KXt0aHJvdyB0aGlzLnVuZXhwZWN0ZWRUb2tlbkVycm9yKGUsdCl9O2UucHJvdG90eXBlLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuPWZ1bmN0aW9uKGUsdCl7dGhpcy5lcnJvckhhbmRsZXIudG9sZXJhdGUodGhpcy51bmV4cGVjdGVkVG9rZW5FcnJvcihlLHQpKX07ZS5wcm90b3R5cGUuY29sbGVjdENvbW1lbnRzPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY29uZmlnLmNvbW1lbnQpe3RoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKX1lbHNle3ZhciBlPXRoaXMuc2Nhbm5lci5zY2FuQ29tbWVudHMoKTtpZihlLmxlbmd0aD4wJiZ0aGlzLmRlbGVnYXRlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOysrdCl7dmFyIHI9ZVt0XTt2YXIgcz12b2lkIDA7cz17dHlwZTpyLm11bHRpTGluZT8iQmxvY2tDb21tZW50IjoiTGluZUNvbW1lbnQiLHZhbHVlOnRoaXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2Uoci5zbGljZVswXSxyLnNsaWNlWzFdKX07aWYodGhpcy5jb25maWcucmFuZ2Upe3MucmFuZ2U9ci5yYW5nZX1pZih0aGlzLmNvbmZpZy5sb2Mpe3MubG9jPXIubG9jfXZhciBpPXtzdGFydDp7bGluZTpyLmxvYy5zdGFydC5saW5lLGNvbHVtbjpyLmxvYy5zdGFydC5jb2x1bW4sb2Zmc2V0OnIucmFuZ2VbMF19LGVuZDp7bGluZTpyLmxvYy5lbmQubGluZSxjb2x1bW46ci5sb2MuZW5kLmNvbHVtbixvZmZzZXQ6ci5yYW5nZVsxXX19O3RoaXMuZGVsZWdhdGUocyxpKX19fX07ZS5wcm90b3R5cGUuZ2V0VG9rZW5SYXc9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2UoZS5zdGFydCxlLmVuZCl9O2UucHJvdG90eXBlLmNvbnZlcnRUb2tlbj1mdW5jdGlvbihlKXt2YXIgdD17dHlwZTp1LlRva2VuTmFtZVtlLnR5cGVdLHZhbHVlOnRoaXMuZ2V0VG9rZW5SYXcoZSl9O2lmKHRoaXMuY29uZmlnLnJhbmdlKXt0LnJhbmdlPVtlLnN0YXJ0LGUuZW5kXX1pZih0aGlzLmNvbmZpZy5sb2Mpe3QubG9jPXtzdGFydDp7bGluZTp0aGlzLnN0YXJ0TWFya2VyLmxpbmUsY29sdW1uOnRoaXMuc3RhcnRNYXJrZXIuY29sdW1ufSxlbmQ6e2xpbmU6dGhpcy5zY2FubmVyLmxpbmVOdW1iZXIsY29sdW1uOnRoaXMuc2Nhbm5lci5pbmRleC10aGlzLnNjYW5uZXIubGluZVN0YXJ0fX19aWYoZS50eXBlPT09OSl7dmFyIHI9ZS5wYXR0ZXJuO3ZhciBzPWUuZmxhZ3M7dC5yZWdleD17cGF0dGVybjpyLGZsYWdzOnN9fXJldHVybiB0fTtlLnByb3RvdHlwZS5uZXh0VG9rZW49ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxvb2thaGVhZDt0aGlzLmxhc3RNYXJrZXIuaW5kZXg9dGhpcy5zY2FubmVyLmluZGV4O3RoaXMubGFzdE1hcmtlci5saW5lPXRoaXMuc2Nhbm5lci5saW5lTnVtYmVyO3RoaXMubGFzdE1hcmtlci5jb2x1bW49dGhpcy5zY2FubmVyLmluZGV4LXRoaXMuc2Nhbm5lci5saW5lU3RhcnQ7dGhpcy5jb2xsZWN0Q29tbWVudHMoKTtpZih0aGlzLnNjYW5uZXIuaW5kZXghPT10aGlzLnN0YXJ0TWFya2VyLmluZGV4KXt0aGlzLnN0YXJ0TWFya2VyLmluZGV4PXRoaXMuc2Nhbm5lci5pbmRleDt0aGlzLnN0YXJ0TWFya2VyLmxpbmU9dGhpcy5zY2FubmVyLmxpbmVOdW1iZXI7dGhpcy5zdGFydE1hcmtlci5jb2x1bW49dGhpcy5zY2FubmVyLmluZGV4LXRoaXMuc2Nhbm5lci5saW5lU3RhcnR9dmFyIHQ9dGhpcy5zY2FubmVyLmxleCgpO3RoaXMuaGFzTGluZVRlcm1pbmF0b3I9ZS5saW5lTnVtYmVyIT09dC5saW5lTnVtYmVyO2lmKHQmJnRoaXMuY29udGV4dC5zdHJpY3QmJnQudHlwZT09PTMpe2lmKHRoaXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodC52YWx1ZSkpe3QudHlwZT00fX10aGlzLmxvb2thaGVhZD10O2lmKHRoaXMuY29uZmlnLnRva2VucyYmdC50eXBlIT09Mil7dGhpcy50b2tlbnMucHVzaCh0aGlzLmNvbnZlcnRUb2tlbih0KSl9cmV0dXJuIGV9O2UucHJvdG90eXBlLm5leHRSZWdleFRva2VuPWZ1bmN0aW9uKCl7dGhpcy5jb2xsZWN0Q29tbWVudHMoKTt2YXIgZT10aGlzLnNjYW5uZXIuc2NhblJlZ0V4cCgpO2lmKHRoaXMuY29uZmlnLnRva2Vucyl7dGhpcy50b2tlbnMucG9wKCk7dGhpcy50b2tlbnMucHVzaCh0aGlzLmNvbnZlcnRUb2tlbihlKSl9dGhpcy5sb29rYWhlYWQ9ZTt0aGlzLm5leHRUb2tlbigpO3JldHVybiBlfTtlLnByb3RvdHlwZS5jcmVhdGVOb2RlPWZ1bmN0aW9uKCl7cmV0dXJue2luZGV4OnRoaXMuc3RhcnRNYXJrZXIuaW5kZXgsbGluZTp0aGlzLnN0YXJ0TWFya2VyLmxpbmUsY29sdW1uOnRoaXMuc3RhcnRNYXJrZXIuY29sdW1ufX07ZS5wcm90b3R5cGUuc3RhcnROb2RlPWZ1bmN0aW9uKGUsdCl7aWYodD09PXZvaWQgMCl7dD0wfXZhciByPWUuc3RhcnQtZS5saW5lU3RhcnQ7dmFyIHM9ZS5saW5lTnVtYmVyO2lmKHI8MCl7cis9dDtzLS19cmV0dXJue2luZGV4OmUuc3RhcnQsbGluZTpzLGNvbHVtbjpyfX07ZS5wcm90b3R5cGUuZmluYWxpemU9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLmNvbmZpZy5yYW5nZSl7dC5yYW5nZT1bZS5pbmRleCx0aGlzLmxhc3RNYXJrZXIuaW5kZXhdfWlmKHRoaXMuY29uZmlnLmxvYyl7dC5sb2M9e3N0YXJ0OntsaW5lOmUubGluZSxjb2x1bW46ZS5jb2x1bW59LGVuZDp7bGluZTp0aGlzLmxhc3RNYXJrZXIubGluZSxjb2x1bW46dGhpcy5sYXN0TWFya2VyLmNvbHVtbn19O2lmKHRoaXMuY29uZmlnLnNvdXJjZSl7dC5sb2Muc291cmNlPXRoaXMuY29uZmlnLnNvdXJjZX19aWYodGhpcy5kZWxlZ2F0ZSl7dmFyIHI9e3N0YXJ0OntsaW5lOmUubGluZSxjb2x1bW46ZS5jb2x1bW4sb2Zmc2V0OmUuaW5kZXh9LGVuZDp7bGluZTp0aGlzLmxhc3RNYXJrZXIubGluZSxjb2x1bW46dGhpcy5sYXN0TWFya2VyLmNvbHVtbixvZmZzZXQ6dGhpcy5sYXN0TWFya2VyLmluZGV4fX07dGhpcy5kZWxlZ2F0ZSh0LHIpfXJldHVybiB0fTtlLnByb3RvdHlwZS5leHBlY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5uZXh0VG9rZW4oKTtpZih0LnR5cGUhPT03fHx0LnZhbHVlIT09ZSl7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0KX19O2UucHJvdG90eXBlLmV4cGVjdENvbW1hU2VwYXJhdG9yPWZ1bmN0aW9uKCl7aWYodGhpcy5jb25maWcudG9sZXJhbnQpe3ZhciBlPXRoaXMubG9va2FoZWFkO2lmKGUudHlwZT09PTcmJmUudmFsdWU9PT0iLCIpe3RoaXMubmV4dFRva2VuKCl9ZWxzZSBpZihlLnR5cGU9PT03JiZlLnZhbHVlPT09IjsiKXt0aGlzLm5leHRUb2tlbigpO3RoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oZSl9ZWxzZXt0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGUsbi5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4pfX1lbHNle3RoaXMuZXhwZWN0KCIsIil9fTtlLnByb3RvdHlwZS5leHBlY3RLZXl3b3JkPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubmV4dFRva2VuKCk7aWYodC50eXBlIT09NHx8dC52YWx1ZSE9PWUpe3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odCl9fTtlLnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5sb29rYWhlYWQudHlwZT09PTcmJnRoaXMubG9va2FoZWFkLnZhbHVlPT09ZX07ZS5wcm90b3R5cGUubWF0Y2hLZXl3b3JkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxvb2thaGVhZC50eXBlPT09NCYmdGhpcy5sb29rYWhlYWQudmFsdWU9PT1lfTtlLnByb3RvdHlwZS5tYXRjaENvbnRleHR1YWxLZXl3b3JkPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxvb2thaGVhZC50eXBlPT09MyYmdGhpcy5sb29rYWhlYWQudmFsdWU9PT1lfTtlLnByb3RvdHlwZS5tYXRjaEFzc2lnbj1mdW5jdGlvbigpe2lmKHRoaXMubG9va2FoZWFkLnR5cGUhPT03KXtyZXR1cm4gZmFsc2V9dmFyIGU9dGhpcy5sb29rYWhlYWQudmFsdWU7cmV0dXJuIGU9PT0iPSJ8fGU9PT0iKj0ifHxlPT09IioqPSJ8fGU9PT0iLz0ifHxlPT09IiU9Inx8ZT09PSIrPSJ8fGU9PT0iLT0ifHxlPT09Ijw8PSJ8fGU9PT0iPj49Inx8ZT09PSI+Pj49Inx8ZT09PSImPSJ8fGU9PT0iXj0ifHxlPT09Inw9In07ZS5wcm90b3R5cGUuaXNvbGF0ZUNvdmVyR3JhbW1hcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudDt2YXIgcj10aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0O3ZhciBzPXRoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I7dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9dHJ1ZTt0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PXRydWU7dGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcj1udWxsO3ZhciBpPWUuY2FsbCh0aGlzKTtpZih0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yIT09bnVsbCl7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yKX10aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD10O3RoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9cjt0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yPXM7cmV0dXJuIGl9O2UucHJvdG90eXBlLmluaGVyaXRDb3ZlckdyYW1tYXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ7dmFyIHI9dGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldDt2YXIgcz10aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yO3RoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PXRydWU7dGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD10cnVlO3RoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I9bnVsbDt2YXIgaT1lLmNhbGwodGhpcyk7dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQmJnQ7dGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD10aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0JiZyO3RoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I9c3x8dGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcjtyZXR1cm4gaX07ZS5wcm90b3R5cGUuY29uc3VtZVNlbWljb2xvbj1mdW5jdGlvbigpe2lmKHRoaXMubWF0Y2goIjsiKSl7dGhpcy5uZXh0VG9rZW4oKX1lbHNlIGlmKCF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yKXtpZih0aGlzLmxvb2thaGVhZC50eXBlIT09MiYmIXRoaXMubWF0Y2goIn0iKSl7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCl9dGhpcy5sYXN0TWFya2VyLmluZGV4PXRoaXMuc3RhcnRNYXJrZXIuaW5kZXg7dGhpcy5sYXN0TWFya2VyLmxpbmU9dGhpcy5zdGFydE1hcmtlci5saW5lO3RoaXMubGFzdE1hcmtlci5jb2x1bW49dGhpcy5zdGFydE1hcmtlci5jb2x1bW59fTtlLnByb3RvdHlwZS5wYXJzZVByaW1hcnlFeHByZXNzaW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dmFyIHQ7dmFyIHIscztzd2l0Y2godGhpcy5sb29rYWhlYWQudHlwZSl7Y2FzZSAzOmlmKCh0aGlzLmNvbnRleHQuaXNNb2R1bGV8fHRoaXMuY29udGV4dC5hd2FpdCkmJnRoaXMubG9va2FoZWFkLnZhbHVlPT09ImF3YWl0Iil7dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCl9dD10aGlzLm1hdGNoQXN5bmNGdW5jdGlvbigpP3RoaXMucGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKTp0aGlzLmZpbmFsaXplKGUsbmV3IGEuSWRlbnRpZmllcih0aGlzLm5leHRUb2tlbigpLnZhbHVlKSk7YnJlYWs7Y2FzZSA2OmNhc2UgODppZih0aGlzLmNvbnRleHQuc3RyaWN0JiZ0aGlzLmxvb2thaGVhZC5vY3RhbCl7dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCxuLk1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCl9dGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD1mYWxzZTt0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD1mYWxzZTtyPXRoaXMubmV4dFRva2VuKCk7cz10aGlzLmdldFRva2VuUmF3KHIpO3Q9dGhpcy5maW5hbGl6ZShlLG5ldyBhLkxpdGVyYWwoci52YWx1ZSxzKSk7YnJlYWs7Y2FzZSAxOnRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9ZmFsc2U7dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ZmFsc2U7cj10aGlzLm5leHRUb2tlbigpO3M9dGhpcy5nZXRUb2tlblJhdyhyKTt0PXRoaXMuZmluYWxpemUoZSxuZXcgYS5MaXRlcmFsKHIudmFsdWU9PT0idHJ1ZSIscykpO2JyZWFrO2Nhc2UgNTp0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PWZhbHNlO3RoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PWZhbHNlO3I9dGhpcy5uZXh0VG9rZW4oKTtzPXRoaXMuZ2V0VG9rZW5SYXcocik7dD10aGlzLmZpbmFsaXplKGUsbmV3IGEuTGl0ZXJhbChudWxsLHMpKTticmVhaztjYXNlIDEwOnQ9dGhpcy5wYXJzZVRlbXBsYXRlTGl0ZXJhbCgpO2JyZWFrO2Nhc2UgNzpzd2l0Y2godGhpcy5sb29rYWhlYWQudmFsdWUpe2Nhc2UiKCI6dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ZmFsc2U7dD10aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUdyb3VwRXhwcmVzc2lvbik7YnJlYWs7Y2FzZSJbIjp0PXRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXJyYXlJbml0aWFsaXplcik7YnJlYWs7Y2FzZSJ7Ijp0PXRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlT2JqZWN0SW5pdGlhbGl6ZXIpO2JyZWFrO2Nhc2UiLyI6Y2FzZSIvPSI6dGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD1mYWxzZTt0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD1mYWxzZTt0aGlzLnNjYW5uZXIuaW5kZXg9dGhpcy5zdGFydE1hcmtlci5pbmRleDtyPXRoaXMubmV4dFJlZ2V4VG9rZW4oKTtzPXRoaXMuZ2V0VG9rZW5SYXcocik7dD10aGlzLmZpbmFsaXplKGUsbmV3IGEuUmVnZXhMaXRlcmFsKHIucmVnZXgscyxyLnBhdHRlcm4sci5mbGFncykpO2JyZWFrO2RlZmF1bHQ6dD10aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpfWJyZWFrO2Nhc2UgNDppZighdGhpcy5jb250ZXh0LnN0cmljdCYmdGhpcy5jb250ZXh0LmFsbG93WWllbGQmJnRoaXMubWF0Y2hLZXl3b3JkKCJ5aWVsZCIpKXt0PXRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpfWVsc2UgaWYoIXRoaXMuY29udGV4dC5zdHJpY3QmJnRoaXMubWF0Y2hLZXl3b3JkKCJsZXQiKSl7dD10aGlzLmZpbmFsaXplKGUsbmV3IGEuSWRlbnRpZmllcih0aGlzLm5leHRUb2tlbigpLnZhbHVlKSl9ZWxzZXt0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PWZhbHNlO3RoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PWZhbHNlO2lmKHRoaXMubWF0Y2hLZXl3b3JkKCJmdW5jdGlvbiIpKXt0PXRoaXMucGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKX1lbHNlIGlmKHRoaXMubWF0Y2hLZXl3b3JkKCJ0aGlzIikpe3RoaXMubmV4dFRva2VuKCk7dD10aGlzLmZpbmFsaXplKGUsbmV3IGEuVGhpc0V4cHJlc3Npb24pfWVsc2UgaWYodGhpcy5tYXRjaEtleXdvcmQoImNsYXNzIikpe3Q9dGhpcy5wYXJzZUNsYXNzRXhwcmVzc2lvbigpfWVsc2V7dD10aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpfX1icmVhaztkZWZhdWx0OnQ9dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKX1yZXR1cm4gdH07ZS5wcm90b3R5cGUucGFyc2VTcHJlYWRFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3QoIi4uLiIpO3ZhciB0PXRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuU3ByZWFkRWxlbWVudCh0KSl9O2UucHJvdG90eXBlLnBhcnNlQXJyYXlJbml0aWFsaXplcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3ZhciB0PVtdO3RoaXMuZXhwZWN0KCJbIik7d2hpbGUoIXRoaXMubWF0Y2goIl0iKSl7aWYodGhpcy5tYXRjaCgiLCIpKXt0aGlzLm5leHRUb2tlbigpO3QucHVzaChudWxsKX1lbHNlIGlmKHRoaXMubWF0Y2goIi4uLiIpKXt2YXIgcj10aGlzLnBhcnNlU3ByZWFkRWxlbWVudCgpO2lmKCF0aGlzLm1hdGNoKCJdIikpe3RoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9ZmFsc2U7dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ZmFsc2U7dGhpcy5leHBlY3QoIiwiKX10LnB1c2gocil9ZWxzZXt0LnB1c2godGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpO2lmKCF0aGlzLm1hdGNoKCJdIikpe3RoaXMuZXhwZWN0KCIsIil9fX10aGlzLmV4cGVjdCgiXSIpO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuQXJyYXlFeHByZXNzaW9uKHQpKX07ZS5wcm90b3R5cGUucGFyc2VQcm9wZXJ0eU1ldGhvZD1mdW5jdGlvbihlKXt0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PWZhbHNlO3RoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PWZhbHNlO3ZhciB0PXRoaXMuY29udGV4dC5zdHJpY3Q7dmFyIHI9dGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlO3RoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZT1lLnNpbXBsZTt2YXIgcz10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMpO2lmKHRoaXMuY29udGV4dC5zdHJpY3QmJmUuZmlyc3RSZXN0cmljdGVkKXt0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGUuZmlyc3RSZXN0cmljdGVkLGUubWVzc2FnZSl9aWYodGhpcy5jb250ZXh0LnN0cmljdCYmZS5zdHJpY3RlZCl7dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihlLnN0cmljdGVkLGUubWVzc2FnZSl9dGhpcy5jb250ZXh0LnN0cmljdD10O3RoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZT1yO3JldHVybiBzfTtlLnByb3RvdHlwZS5wYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb249ZnVuY3Rpb24oKXt2YXIgZT1mYWxzZTt2YXIgdD10aGlzLmNyZWF0ZU5vZGUoKTt2YXIgcj10aGlzLmNvbnRleHQuYWxsb3dZaWVsZDt0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD10cnVlO3ZhciBzPXRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKCk7dmFyIGk9dGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kKHMpO3RoaXMuY29udGV4dC5hbGxvd1lpZWxkPXI7cmV0dXJuIHRoaXMuZmluYWxpemUodCxuZXcgYS5GdW5jdGlvbkV4cHJlc3Npb24obnVsbCxzLnBhcmFtcyxpLGUpKX07ZS5wcm90b3R5cGUucGFyc2VQcm9wZXJ0eU1ldGhvZEFzeW5jRnVuY3Rpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt2YXIgdD10aGlzLmNvbnRleHQuYWxsb3dZaWVsZDt2YXIgcj10aGlzLmNvbnRleHQuYXdhaXQ7dGhpcy5jb250ZXh0LmFsbG93WWllbGQ9ZmFsc2U7dGhpcy5jb250ZXh0LmF3YWl0PXRydWU7dmFyIHM9dGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnMoKTt2YXIgaT10aGlzLnBhcnNlUHJvcGVydHlNZXRob2Qocyk7dGhpcy5jb250ZXh0LmFsbG93WWllbGQ9dDt0aGlzLmNvbnRleHQuYXdhaXQ9cjtyZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBhLkFzeW5jRnVuY3Rpb25FeHByZXNzaW9uKG51bGwscy5wYXJhbXMsaSkpfTtlLnByb3RvdHlwZS5wYXJzZU9iamVjdFByb3BlcnR5S2V5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dmFyIHQ9dGhpcy5uZXh0VG9rZW4oKTt2YXIgcjtzd2l0Y2godC50eXBlKXtjYXNlIDg6Y2FzZSA2OmlmKHRoaXMuY29udGV4dC5zdHJpY3QmJnQub2N0YWwpe3RoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odCxuLk1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCl9dmFyIHM9dGhpcy5nZXRUb2tlblJhdyh0KTtyPXRoaXMuZmluYWxpemUoZSxuZXcgYS5MaXRlcmFsKHQudmFsdWUscykpO2JyZWFrO2Nhc2UgMzpjYXNlIDE6Y2FzZSA1OmNhc2UgNDpyPXRoaXMuZmluYWxpemUoZSxuZXcgYS5JZGVudGlmaWVyKHQudmFsdWUpKTticmVhaztjYXNlIDc6aWYodC52YWx1ZT09PSJbIil7cj10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTt0aGlzLmV4cGVjdCgiXSIpfWVsc2V7cj10aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHQpfWJyZWFrO2RlZmF1bHQ6cj10aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHQpfXJldHVybiByfTtlLnByb3RvdHlwZS5pc1Byb3BlcnR5S2V5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudHlwZT09PWwuU3ludGF4LklkZW50aWZpZXImJmUubmFtZT09PXR8fGUudHlwZT09PWwuU3ludGF4LkxpdGVyYWwmJmUudmFsdWU9PT10fTtlLnByb3RvdHlwZS5wYXJzZU9iamVjdFByb3BlcnR5PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3JlYXRlTm9kZSgpO3ZhciByPXRoaXMubG9va2FoZWFkO3ZhciBzO3ZhciBpPW51bGw7dmFyIG89bnVsbDt2YXIgbD1mYWxzZTt2YXIgdT1mYWxzZTt2YXIgYz1mYWxzZTt2YXIgaD1mYWxzZTtpZihyLnR5cGU9PT0zKXt2YXIgcD1yLnZhbHVlO3RoaXMubmV4dFRva2VuKCk7bD10aGlzLm1hdGNoKCJbIik7aD0hdGhpcy5oYXNMaW5lVGVybWluYXRvciYmcD09PSJhc3luYyImJiF0aGlzLm1hdGNoKCI6IikmJiF0aGlzLm1hdGNoKCIoIikmJiF0aGlzLm1hdGNoKCIqIikmJiF0aGlzLm1hdGNoKCIsIik7aT1oP3RoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOnRoaXMuZmluYWxpemUodCxuZXcgYS5JZGVudGlmaWVyKHApKX1lbHNlIGlmKHRoaXMubWF0Y2goIioiKSl7dGhpcy5uZXh0VG9rZW4oKX1lbHNle2w9dGhpcy5tYXRjaCgiWyIpO2k9dGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCl9dmFyIGY9dGhpcy5xdWFsaWZpZWRQcm9wZXJ0eU5hbWUodGhpcy5sb29rYWhlYWQpO2lmKHIudHlwZT09PTMmJiFoJiZyLnZhbHVlPT09ImdldCImJmYpe3M9ImdldCI7bD10aGlzLm1hdGNoKCJbIik7aT10aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTt0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD1mYWxzZTtvPXRoaXMucGFyc2VHZXR0ZXJNZXRob2QoKX1lbHNlIGlmKHIudHlwZT09PTMmJiFoJiZyLnZhbHVlPT09InNldCImJmYpe3M9InNldCI7bD10aGlzLm1hdGNoKCJbIik7aT10aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtvPXRoaXMucGFyc2VTZXR0ZXJNZXRob2QoKX1lbHNlIGlmKHIudHlwZT09PTcmJnIudmFsdWU9PT0iKiImJmYpe3M9ImluaXQiO2w9dGhpcy5tYXRjaCgiWyIpO2k9dGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7bz10aGlzLnBhcnNlR2VuZXJhdG9yTWV0aG9kKCk7dT10cnVlfWVsc2V7aWYoIWkpe3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpfXM9ImluaXQiO2lmKHRoaXMubWF0Y2goIjoiKSYmIWgpe2lmKCFsJiZ0aGlzLmlzUHJvcGVydHlLZXkoaSwiX19wcm90b19fIikpe2lmKGUudmFsdWUpe3RoaXMudG9sZXJhdGVFcnJvcihuLk1lc3NhZ2VzLkR1cGxpY2F0ZVByb3RvUHJvcGVydHkpfWUudmFsdWU9dHJ1ZX10aGlzLm5leHRUb2tlbigpO289dGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbil9ZWxzZSBpZih0aGlzLm1hdGNoKCIoIikpe289aD90aGlzLnBhcnNlUHJvcGVydHlNZXRob2RBc3luY0Z1bmN0aW9uKCk6dGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oKTt1PXRydWV9ZWxzZSBpZihyLnR5cGU9PT0zKXt2YXIgcD10aGlzLmZpbmFsaXplKHQsbmV3IGEuSWRlbnRpZmllcihyLnZhbHVlKSk7aWYodGhpcy5tYXRjaCgiPSIpKXt0aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yPXRoaXMubG9va2FoZWFkO3RoaXMubmV4dFRva2VuKCk7Yz10cnVlO3ZhciBkPXRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO289dGhpcy5maW5hbGl6ZSh0LG5ldyBhLkFzc2lnbm1lbnRQYXR0ZXJuKHAsZCkpfWVsc2V7Yz10cnVlO289cH19ZWxzZXt0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpfX1yZXR1cm4gdGhpcy5maW5hbGl6ZSh0LG5ldyBhLlByb3BlcnR5KHMsaSxsLG8sdSxjKSl9O2UucHJvdG90eXBlLnBhcnNlT2JqZWN0SW5pdGlhbGl6ZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdCgieyIpO3ZhciB0PVtdO3ZhciByPXt2YWx1ZTpmYWxzZX07d2hpbGUoIXRoaXMubWF0Y2goIn0iKSl7dC5wdXNoKHRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eShyKSk7aWYoIXRoaXMubWF0Y2goIn0iKSl7dGhpcy5leHBlY3RDb21tYVNlcGFyYXRvcigpfX10aGlzLmV4cGVjdCgifSIpO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuT2JqZWN0RXhwcmVzc2lvbih0KSl9O2UucHJvdG90eXBlLnBhcnNlVGVtcGxhdGVIZWFkPWZ1bmN0aW9uKCl7cy5hc3NlcnQodGhpcy5sb29rYWhlYWQuaGVhZCwiVGVtcGxhdGUgbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSB0ZW1wbGF0ZSBoZWFkIik7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dmFyIHQ9dGhpcy5uZXh0VG9rZW4oKTt2YXIgcj10LnZhbHVlO3ZhciBpPXQuY29va2VkO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuVGVtcGxhdGVFbGVtZW50KHtyYXc6cixjb29rZWQ6aX0sdC50YWlsKSl9O2UucHJvdG90eXBlLnBhcnNlVGVtcGxhdGVFbGVtZW50PWZ1bmN0aW9uKCl7aWYodGhpcy5sb29rYWhlYWQudHlwZSE9PTEwKXt0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCl9dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dmFyIHQ9dGhpcy5uZXh0VG9rZW4oKTt2YXIgcj10LnZhbHVlO3ZhciBzPXQuY29va2VkO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuVGVtcGxhdGVFbGVtZW50KHtyYXc6cixjb29rZWQ6c30sdC50YWlsKSl9O2UucHJvdG90eXBlLnBhcnNlVGVtcGxhdGVMaXRlcmFsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dmFyIHQ9W107dmFyIHI9W107dmFyIHM9dGhpcy5wYXJzZVRlbXBsYXRlSGVhZCgpO3IucHVzaChzKTt3aGlsZSghcy50YWlsKXt0LnB1c2godGhpcy5wYXJzZUV4cHJlc3Npb24oKSk7cz10aGlzLnBhcnNlVGVtcGxhdGVFbGVtZW50KCk7ci5wdXNoKHMpfXJldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuVGVtcGxhdGVMaXRlcmFsKHIsdCkpfTtlLnByb3RvdHlwZS5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm49ZnVuY3Rpb24oZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSBsLlN5bnRheC5JZGVudGlmaWVyOmNhc2UgbC5TeW50YXguTWVtYmVyRXhwcmVzc2lvbjpjYXNlIGwuU3ludGF4LlJlc3RFbGVtZW50OmNhc2UgbC5TeW50YXguQXNzaWdubWVudFBhdHRlcm46YnJlYWs7Y2FzZSBsLlN5bnRheC5TcHJlYWRFbGVtZW50OmUudHlwZT1sLlN5bnRheC5SZXN0RWxlbWVudDt0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihlLmFyZ3VtZW50KTticmVhaztjYXNlIGwuU3ludGF4LkFycmF5RXhwcmVzc2lvbjplLnR5cGU9bC5TeW50YXguQXJyYXlQYXR0ZXJuO2Zvcih2YXIgdD0wO3Q8ZS5lbGVtZW50cy5sZW5ndGg7dCsrKXtpZihlLmVsZW1lbnRzW3RdIT09bnVsbCl7dGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZS5lbGVtZW50c1t0XSl9fWJyZWFrO2Nhc2UgbC5TeW50YXguT2JqZWN0RXhwcmVzc2lvbjplLnR5cGU9bC5TeW50YXguT2JqZWN0UGF0dGVybjtmb3IodmFyIHQ9MDt0PGUucHJvcGVydGllcy5sZW5ndGg7dCsrKXt0aGlzLnJlaW50ZXJwcmV0RXhwcmVzc2lvbkFzUGF0dGVybihlLnByb3BlcnRpZXNbdF0udmFsdWUpfWJyZWFrO2Nhc2UgbC5TeW50YXguQXNzaWdubWVudEV4cHJlc3Npb246ZS50eXBlPWwuU3ludGF4LkFzc2lnbm1lbnRQYXR0ZXJuO2RlbGV0ZSBlLm9wZXJhdG9yO3RoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGUubGVmdCk7YnJlYWt9fTtlLnByb3RvdHlwZS5wYXJzZUdyb3VwRXhwcmVzc2lvbj1mdW5jdGlvbigpe3ZhciBlO3RoaXMuZXhwZWN0KCIoIik7aWYodGhpcy5tYXRjaCgiKSIpKXt0aGlzLm5leHRUb2tlbigpO2lmKCF0aGlzLm1hdGNoKCI9PiIpKXt0aGlzLmV4cGVjdCgiPT4iKX1lPXt0eXBlOmMscGFyYW1zOltdLGFzeW5jOmZhbHNlfX1lbHNle3ZhciB0PXRoaXMubG9va2FoZWFkO3ZhciByPVtdO2lmKHRoaXMubWF0Y2goIi4uLiIpKXtlPXRoaXMucGFyc2VSZXN0RWxlbWVudChyKTt0aGlzLmV4cGVjdCgiKSIpO2lmKCF0aGlzLm1hdGNoKCI9PiIpKXt0aGlzLmV4cGVjdCgiPT4iKX1lPXt0eXBlOmMscGFyYW1zOltlXSxhc3luYzpmYWxzZX19ZWxzZXt2YXIgcz1mYWxzZTt0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD10cnVlO2U9dGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbik7aWYodGhpcy5tYXRjaCgiLCIpKXt2YXIgaT1bXTt0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PWZhbHNlO2kucHVzaChlKTt3aGlsZSh0aGlzLmxvb2thaGVhZC50eXBlIT09Mil7aWYoIXRoaXMubWF0Y2goIiwiKSl7YnJlYWt9dGhpcy5uZXh0VG9rZW4oKTtpZih0aGlzLm1hdGNoKCIpIikpe3RoaXMubmV4dFRva2VuKCk7Zm9yKHZhciBuPTA7bjxpLmxlbmd0aDtuKyspe3RoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGlbbl0pfXM9dHJ1ZTtlPXt0eXBlOmMscGFyYW1zOmksYXN5bmM6ZmFsc2V9fWVsc2UgaWYodGhpcy5tYXRjaCgiLi4uIikpe2lmKCF0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudCl7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCl9aS5wdXNoKHRoaXMucGFyc2VSZXN0RWxlbWVudChyKSk7dGhpcy5leHBlY3QoIikiKTtpZighdGhpcy5tYXRjaCgiPT4iKSl7dGhpcy5leHBlY3QoIj0+Iil9dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ZmFsc2U7Zm9yKHZhciBuPTA7bjxpLmxlbmd0aDtuKyspe3RoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGlbbl0pfXM9dHJ1ZTtlPXt0eXBlOmMscGFyYW1zOmksYXN5bmM6ZmFsc2V9fWVsc2V7aS5wdXNoKHRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKX1pZihzKXticmVha319aWYoIXMpe2U9dGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZSh0KSxuZXcgYS5TZXF1ZW5jZUV4cHJlc3Npb24oaSkpfX1pZighcyl7dGhpcy5leHBlY3QoIikiKTtpZih0aGlzLm1hdGNoKCI9PiIpKXtpZihlLnR5cGU9PT1sLlN5bnRheC5JZGVudGlmaWVyJiZlLm5hbWU9PT0ieWllbGQiKXtzPXRydWU7ZT17dHlwZTpjLHBhcmFtczpbZV0sYXN5bmM6ZmFsc2V9fWlmKCFzKXtpZighdGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQpe3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpfWlmKGUudHlwZT09PWwuU3ludGF4LlNlcXVlbmNlRXhwcmVzc2lvbil7Zm9yKHZhciBuPTA7bjxlLmV4cHJlc3Npb25zLmxlbmd0aDtuKyspe3RoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGUuZXhwcmVzc2lvbnNbbl0pfX1lbHNle3RoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGUpfXZhciBvPWUudHlwZT09PWwuU3ludGF4LlNlcXVlbmNlRXhwcmVzc2lvbj9lLmV4cHJlc3Npb25zOltlXTtlPXt0eXBlOmMscGFyYW1zOm8sYXN5bmM6ZmFsc2V9fX10aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD1mYWxzZX19fXJldHVybiBlfTtlLnByb3RvdHlwZS5wYXJzZUFyZ3VtZW50cz1mdW5jdGlvbigpe3RoaXMuZXhwZWN0KCIoIik7dmFyIGU9W107aWYoIXRoaXMubWF0Y2goIikiKSl7d2hpbGUodHJ1ZSl7dmFyIHQ9dGhpcy5tYXRjaCgiLi4uIik/dGhpcy5wYXJzZVNwcmVhZEVsZW1lbnQoKTp0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTtlLnB1c2godCk7aWYodGhpcy5tYXRjaCgiKSIpKXticmVha310aGlzLmV4cGVjdENvbW1hU2VwYXJhdG9yKCk7aWYodGhpcy5tYXRjaCgiKSIpKXticmVha319fXRoaXMuZXhwZWN0KCIpIik7cmV0dXJuIGV9O2UucHJvdG90eXBlLmlzSWRlbnRpZmllck5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZT09PTN8fGUudHlwZT09PTR8fGUudHlwZT09PTF8fGUudHlwZT09PTV9O2UucHJvdG90eXBlLnBhcnNlSWRlbnRpZmllck5hbWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt2YXIgdD10aGlzLm5leHRUb2tlbigpO2lmKCF0aGlzLmlzSWRlbnRpZmllck5hbWUodCkpe3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odCl9cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgYS5JZGVudGlmaWVyKHQudmFsdWUpKX07ZS5wcm90b3R5cGUucGFyc2VOZXdFeHByZXNzaW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dmFyIHQ9dGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7cy5hc3NlcnQodC5uYW1lPT09Im5ldyIsIk5ldyBleHByZXNzaW9uIG11c3Qgc3RhcnQgd2l0aCBgbmV3YCIpO3ZhciByO2lmKHRoaXMubWF0Y2goIi4iKSl7dGhpcy5uZXh0VG9rZW4oKTtpZih0aGlzLmxvb2thaGVhZC50eXBlPT09MyYmdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5JiZ0aGlzLmxvb2thaGVhZC52YWx1ZT09PSJ0YXJnZXQiKXt2YXIgaT10aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKTtyPW5ldyBhLk1ldGFQcm9wZXJ0eSh0LGkpfWVsc2V7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCl9fWVsc2V7dmFyIG49dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKTt2YXIgbz10aGlzLm1hdGNoKCIoIik/dGhpcy5wYXJzZUFyZ3VtZW50cygpOltdO3I9bmV3IGEuTmV3RXhwcmVzc2lvbihuLG8pO3RoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9ZmFsc2U7dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ZmFsc2V9cmV0dXJuIHRoaXMuZmluYWxpemUoZSxyKX07ZS5wcm90b3R5cGUucGFyc2VBc3luY0FyZ3VtZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7dGhpcy5jb250ZXh0LmZpcnN0Q292ZXJJbml0aWFsaXplZE5hbWVFcnJvcj1udWxsO3JldHVybiBlfTtlLnByb3RvdHlwZS5wYXJzZUFzeW5jQXJndW1lbnRzPWZ1bmN0aW9uKCl7dGhpcy5leHBlY3QoIigiKTt2YXIgZT1bXTtpZighdGhpcy5tYXRjaCgiKSIpKXt3aGlsZSh0cnVlKXt2YXIgdD10aGlzLm1hdGNoKCIuLi4iKT90aGlzLnBhcnNlU3ByZWFkRWxlbWVudCgpOnRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXN5bmNBcmd1bWVudCk7ZS5wdXNoKHQpO2lmKHRoaXMubWF0Y2goIikiKSl7YnJlYWt9dGhpcy5leHBlY3RDb21tYVNlcGFyYXRvcigpO2lmKHRoaXMubWF0Y2goIikiKSl7YnJlYWt9fX10aGlzLmV4cGVjdCgiKSIpO3JldHVybiBlfTtlLnByb3RvdHlwZS5wYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxvb2thaGVhZDt2YXIgdD10aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoImFzeW5jIik7dmFyIHI9dGhpcy5jb250ZXh0LmFsbG93SW47dGhpcy5jb250ZXh0LmFsbG93SW49dHJ1ZTt2YXIgcztpZih0aGlzLm1hdGNoS2V5d29yZCgic3VwZXIiKSYmdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5KXtzPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMubmV4dFRva2VuKCk7cz10aGlzLmZpbmFsaXplKHMsbmV3IGEuU3VwZXIpO2lmKCF0aGlzLm1hdGNoKCIoIikmJiF0aGlzLm1hdGNoKCIuIikmJiF0aGlzLm1hdGNoKCJbIikpe3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpfX1lbHNle3M9dGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMubWF0Y2hLZXl3b3JkKCJuZXciKT90aGlzLnBhcnNlTmV3RXhwcmVzc2lvbjp0aGlzLnBhcnNlUHJpbWFyeUV4cHJlc3Npb24pfXdoaWxlKHRydWUpe2lmKHRoaXMubWF0Y2goIi4iKSl7dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ZmFsc2U7dGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD10cnVlO3RoaXMuZXhwZWN0KCIuIik7dmFyIGk9dGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7cz10aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKGUpLG5ldyBhLlN0YXRpY01lbWJlckV4cHJlc3Npb24ocyxpKSl9ZWxzZSBpZih0aGlzLm1hdGNoKCIoIikpe3ZhciBuPXQmJmUubGluZU51bWJlcj09PXRoaXMubG9va2FoZWFkLmxpbmVOdW1iZXI7dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ZmFsc2U7dGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD1mYWxzZTt2YXIgbz1uP3RoaXMucGFyc2VBc3luY0FyZ3VtZW50cygpOnRoaXMucGFyc2VBcmd1bWVudHMoKTtzPXRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoZSksbmV3IGEuQ2FsbEV4cHJlc3Npb24ocyxvKSk7aWYobiYmdGhpcy5tYXRjaCgiPT4iKSl7Zm9yKHZhciBsPTA7bDxvLmxlbmd0aDsrK2wpe3RoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKG9bbF0pfXM9e3R5cGU6YyxwYXJhbXM6byxhc3luYzp0cnVlfX19ZWxzZSBpZih0aGlzLm1hdGNoKCJbIikpe3RoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PWZhbHNlO3RoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9dHJ1ZTt0aGlzLmV4cGVjdCgiWyIpO3ZhciBpPXRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwcmVzc2lvbik7dGhpcy5leHBlY3QoIl0iKTtzPXRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoZSksbmV3IGEuQ29tcHV0ZWRNZW1iZXJFeHByZXNzaW9uKHMsaSkpfWVsc2UgaWYodGhpcy5sb29rYWhlYWQudHlwZT09PTEwJiZ0aGlzLmxvb2thaGVhZC5oZWFkKXt2YXIgdT10aGlzLnBhcnNlVGVtcGxhdGVMaXRlcmFsKCk7cz10aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKGUpLG5ldyBhLlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihzLHUpKX1lbHNle2JyZWFrfX10aGlzLmNvbnRleHQuYWxsb3dJbj1yO3JldHVybiBzfTtlLnByb3RvdHlwZS5wYXJzZVN1cGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJzdXBlciIpO2lmKCF0aGlzLm1hdGNoKCJbIikmJiF0aGlzLm1hdGNoKCIuIikpe3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpfXJldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuU3VwZXIpfTtlLnByb3RvdHlwZS5wYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb249ZnVuY3Rpb24oKXtzLmFzc2VydCh0aGlzLmNvbnRleHQuYWxsb3dJbiwiY2FsbGVlIG9mIG5ldyBleHByZXNzaW9uIGFsd2F5cyBhbGxvdyBpbiBrZXl3b3JkLiIpO3ZhciBlPXRoaXMuc3RhcnROb2RlKHRoaXMubG9va2FoZWFkKTt2YXIgdD10aGlzLm1hdGNoS2V5d29yZCgic3VwZXIiKSYmdGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5P3RoaXMucGFyc2VTdXBlcigpOnRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLm1hdGNoS2V5d29yZCgibmV3Iik/dGhpcy5wYXJzZU5ld0V4cHJlc3Npb246dGhpcy5wYXJzZVByaW1hcnlFeHByZXNzaW9uKTt3aGlsZSh0cnVlKXtpZih0aGlzLm1hdGNoKCJbIikpe3RoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PWZhbHNlO3RoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9dHJ1ZTt0aGlzLmV4cGVjdCgiWyIpO3ZhciByPXRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwcmVzc2lvbik7dGhpcy5leHBlY3QoIl0iKTt0PXRoaXMuZmluYWxpemUoZSxuZXcgYS5Db21wdXRlZE1lbWJlckV4cHJlc3Npb24odCxyKSl9ZWxzZSBpZih0aGlzLm1hdGNoKCIuIikpe3RoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PWZhbHNlO3RoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9dHJ1ZTt0aGlzLmV4cGVjdCgiLiIpO3ZhciByPXRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpO3Q9dGhpcy5maW5hbGl6ZShlLG5ldyBhLlN0YXRpY01lbWJlckV4cHJlc3Npb24odCxyKSl9ZWxzZSBpZih0aGlzLmxvb2thaGVhZC50eXBlPT09MTAmJnRoaXMubG9va2FoZWFkLmhlYWQpe3ZhciBpPXRoaXMucGFyc2VUZW1wbGF0ZUxpdGVyYWwoKTt0PXRoaXMuZmluYWxpemUoZSxuZXcgYS5UYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24odCxpKSl9ZWxzZXticmVha319cmV0dXJuIHR9O2UucHJvdG90eXBlLnBhcnNlVXBkYXRlRXhwcmVzc2lvbj1mdW5jdGlvbigpe3ZhciBlO3ZhciB0PXRoaXMubG9va2FoZWFkO2lmKHRoaXMubWF0Y2goIisrIil8fHRoaXMubWF0Y2goIi0tIikpe3ZhciByPXRoaXMuc3RhcnROb2RlKHQpO3ZhciBzPXRoaXMubmV4dFRva2VuKCk7ZT10aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZVVuYXJ5RXhwcmVzc2lvbik7aWYodGhpcy5jb250ZXh0LnN0cmljdCYmZS50eXBlPT09bC5TeW50YXguSWRlbnRpZmllciYmdGhpcy5zY2FubmVyLmlzUmVzdHJpY3RlZFdvcmQoZS5uYW1lKSl7dGhpcy50b2xlcmF0ZUVycm9yKG4uTWVzc2FnZXMuU3RyaWN0TEhTUHJlZml4KX1pZighdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldCl7dGhpcy50b2xlcmF0ZUVycm9yKG4uTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCl9dmFyIGk9dHJ1ZTtlPXRoaXMuZmluYWxpemUocixuZXcgYS5VcGRhdGVFeHByZXNzaW9uKHMudmFsdWUsZSxpKSk7dGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD1mYWxzZTt0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD1mYWxzZX1lbHNle2U9dGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKTtpZighdGhpcy5oYXNMaW5lVGVybWluYXRvciYmdGhpcy5sb29rYWhlYWQudHlwZT09PTcpe2lmKHRoaXMubWF0Y2goIisrIil8fHRoaXMubWF0Y2goIi0tIikpe2lmKHRoaXMuY29udGV4dC5zdHJpY3QmJmUudHlwZT09PWwuU3ludGF4LklkZW50aWZpZXImJnRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKGUubmFtZSkpe3RoaXMudG9sZXJhdGVFcnJvcihuLk1lc3NhZ2VzLlN0cmljdExIU1Bvc3RmaXgpfWlmKCF0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0KXt0aGlzLnRvbGVyYXRlRXJyb3Iobi5NZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KX10aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PWZhbHNlO3RoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PWZhbHNlO3ZhciBvPXRoaXMubmV4dFRva2VuKCkudmFsdWU7dmFyIGk9ZmFsc2U7ZT10aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKHQpLG5ldyBhLlVwZGF0ZUV4cHJlc3Npb24obyxlLGkpKX19fXJldHVybiBlfTtlLnByb3RvdHlwZS5wYXJzZUF3YWl0RXhwcmVzc2lvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMubmV4dFRva2VuKCk7dmFyIHQ9dGhpcy5wYXJzZVVuYXJ5RXhwcmVzc2lvbigpO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuQXdhaXRFeHByZXNzaW9uKHQpKX07ZS5wcm90b3R5cGUucGFyc2VVbmFyeUV4cHJlc3Npb249ZnVuY3Rpb24oKXt2YXIgZTtpZih0aGlzLm1hdGNoKCIrIil8fHRoaXMubWF0Y2goIi0iKXx8dGhpcy5tYXRjaCgifiIpfHx0aGlzLm1hdGNoKCIhIil8fHRoaXMubWF0Y2hLZXl3b3JkKCJkZWxldGUiKXx8dGhpcy5tYXRjaEtleXdvcmQoInZvaWQiKXx8dGhpcy5tYXRjaEtleXdvcmQoInR5cGVvZiIpKXt2YXIgdD10aGlzLnN0YXJ0Tm9kZSh0aGlzLmxvb2thaGVhZCk7dmFyIHI9dGhpcy5uZXh0VG9rZW4oKTtlPXRoaXMuaW5oZXJpdENvdmVyR3JhbW1hcih0aGlzLnBhcnNlVW5hcnlFeHByZXNzaW9uKTtlPXRoaXMuZmluYWxpemUodCxuZXcgYS5VbmFyeUV4cHJlc3Npb24oci52YWx1ZSxlKSk7aWYodGhpcy5jb250ZXh0LnN0cmljdCYmZS5vcGVyYXRvcj09PSJkZWxldGUiJiZlLmFyZ3VtZW50LnR5cGU9PT1sLlN5bnRheC5JZGVudGlmaWVyKXt0aGlzLnRvbGVyYXRlRXJyb3Iobi5NZXNzYWdlcy5TdHJpY3REZWxldGUpfXRoaXMuY29udGV4dC5pc0Fzc2lnbm1lbnRUYXJnZXQ9ZmFsc2U7dGhpcy5jb250ZXh0LmlzQmluZGluZ0VsZW1lbnQ9ZmFsc2V9ZWxzZSBpZih0aGlzLmNvbnRleHQuYXdhaXQmJnRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgiYXdhaXQiKSl7ZT10aGlzLnBhcnNlQXdhaXRFeHByZXNzaW9uKCl9ZWxzZXtlPXRoaXMucGFyc2VVcGRhdGVFeHByZXNzaW9uKCl9cmV0dXJuIGV9O2UucHJvdG90eXBlLnBhcnNlRXhwb25lbnRpYXRpb25FeHByZXNzaW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sb29rYWhlYWQ7dmFyIHQ9dGhpcy5pbmhlcml0Q292ZXJHcmFtbWFyKHRoaXMucGFyc2VVbmFyeUV4cHJlc3Npb24pO2lmKHQudHlwZSE9PWwuU3ludGF4LlVuYXJ5RXhwcmVzc2lvbiYmdGhpcy5tYXRjaCgiKioiKSl7dGhpcy5uZXh0VG9rZW4oKTt0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PWZhbHNlO3RoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PWZhbHNlO3ZhciByPXQ7dmFyIHM9dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VFeHBvbmVudGlhdGlvbkV4cHJlc3Npb24pO3Q9dGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShlKSxuZXcgYS5CaW5hcnlFeHByZXNzaW9uKCIqKiIscixzKSl9cmV0dXJuIHR9O2UucHJvdG90eXBlLmJpbmFyeVByZWNlZGVuY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS52YWx1ZTt2YXIgcjtpZihlLnR5cGU9PT03KXtyPXRoaXMub3BlcmF0b3JQcmVjZWRlbmNlW3RdfHwwfWVsc2UgaWYoZS50eXBlPT09NCl7cj10PT09Imluc3RhbmNlb2YifHx0aGlzLmNvbnRleHQuYWxsb3dJbiYmdD09PSJpbiI/NzowfWVsc2V7cj0wfXJldHVybiByfTtlLnByb3RvdHlwZS5wYXJzZUJpbmFyeUV4cHJlc3Npb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxvb2thaGVhZDt2YXIgdD10aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbik7dmFyIHI9dGhpcy5sb29rYWhlYWQ7dmFyIHM9dGhpcy5iaW5hcnlQcmVjZWRlbmNlKHIpO2lmKHM+MCl7dGhpcy5uZXh0VG9rZW4oKTt0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PWZhbHNlO3RoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PWZhbHNlO3ZhciBpPVtlLHRoaXMubG9va2FoZWFkXTt2YXIgbj10O3ZhciBvPXRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlRXhwb25lbnRpYXRpb25FeHByZXNzaW9uKTt2YXIgbD1bbixyLnZhbHVlLG9dO3ZhciB1PVtzXTt3aGlsZSh0cnVlKXtzPXRoaXMuYmluYXJ5UHJlY2VkZW5jZSh0aGlzLmxvb2thaGVhZCk7aWYoczw9MCl7YnJlYWt9d2hpbGUobC5sZW5ndGg+MiYmczw9dVt1Lmxlbmd0aC0xXSl7bz1sLnBvcCgpO3ZhciBjPWwucG9wKCk7dS5wb3AoKTtuPWwucG9wKCk7aS5wb3AoKTt2YXIgaD10aGlzLnN0YXJ0Tm9kZShpW2kubGVuZ3RoLTFdKTtsLnB1c2godGhpcy5maW5hbGl6ZShoLG5ldyBhLkJpbmFyeUV4cHJlc3Npb24oYyxuLG8pKSl9bC5wdXNoKHRoaXMubmV4dFRva2VuKCkudmFsdWUpO3UucHVzaChzKTtpLnB1c2godGhpcy5sb29rYWhlYWQpO2wucHVzaCh0aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUV4cG9uZW50aWF0aW9uRXhwcmVzc2lvbikpfXZhciBwPWwubGVuZ3RoLTE7dD1sW3BdO3ZhciBmPWkucG9wKCk7d2hpbGUocD4xKXt2YXIgZD1pLnBvcCgpO3ZhciBtPWYmJmYubGluZVN0YXJ0O3ZhciBoPXRoaXMuc3RhcnROb2RlKGQsbSk7dmFyIGM9bFtwLTFdO3Q9dGhpcy5maW5hbGl6ZShoLG5ldyBhLkJpbmFyeUV4cHJlc3Npb24oYyxsW3AtMl0sdCkpO3AtPTI7Zj1kfX1yZXR1cm4gdH07ZS5wcm90b3R5cGUucGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxvb2thaGVhZDt2YXIgdD10aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUJpbmFyeUV4cHJlc3Npb24pO2lmKHRoaXMubWF0Y2goIj8iKSl7dGhpcy5uZXh0VG9rZW4oKTt2YXIgcj10aGlzLmNvbnRleHQuYWxsb3dJbjt0aGlzLmNvbnRleHQuYWxsb3dJbj10cnVlO3ZhciBzPXRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO3RoaXMuY29udGV4dC5hbGxvd0luPXI7dGhpcy5leHBlY3QoIjoiKTt2YXIgaT10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTt0PXRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoZSksbmV3IGEuQ29uZGl0aW9uYWxFeHByZXNzaW9uKHQscyxpKSk7dGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD1mYWxzZTt0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD1mYWxzZX1yZXR1cm4gdH07ZS5wcm90b3R5cGUuY2hlY2tQYXR0ZXJuUGFyYW09ZnVuY3Rpb24oZSx0KXtzd2l0Y2godC50eXBlKXtjYXNlIGwuU3ludGF4LklkZW50aWZpZXI6dGhpcy52YWxpZGF0ZVBhcmFtKGUsdCx0Lm5hbWUpO2JyZWFrO2Nhc2UgbC5TeW50YXguUmVzdEVsZW1lbnQ6dGhpcy5jaGVja1BhdHRlcm5QYXJhbShlLHQuYXJndW1lbnQpO2JyZWFrO2Nhc2UgbC5TeW50YXguQXNzaWdubWVudFBhdHRlcm46dGhpcy5jaGVja1BhdHRlcm5QYXJhbShlLHQubGVmdCk7YnJlYWs7Y2FzZSBsLlN5bnRheC5BcnJheVBhdHRlcm46Zm9yKHZhciByPTA7cjx0LmVsZW1lbnRzLmxlbmd0aDtyKyspe2lmKHQuZWxlbWVudHNbcl0hPT1udWxsKXt0aGlzLmNoZWNrUGF0dGVyblBhcmFtKGUsdC5lbGVtZW50c1tyXSl9fWJyZWFrO2Nhc2UgbC5TeW50YXguT2JqZWN0UGF0dGVybjpmb3IodmFyIHI9MDtyPHQucHJvcGVydGllcy5sZW5ndGg7cisrKXt0aGlzLmNoZWNrUGF0dGVyblBhcmFtKGUsdC5wcm9wZXJ0aWVzW3JdLnZhbHVlKX1icmVha31lLnNpbXBsZT1lLnNpbXBsZSYmdCBpbnN0YW5jZW9mIGEuSWRlbnRpZmllcn07ZS5wcm90b3R5cGUucmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9W2VdO3ZhciByO3ZhciBzPWZhbHNlO3N3aXRjaChlLnR5cGUpe2Nhc2UgbC5TeW50YXguSWRlbnRpZmllcjpicmVhaztjYXNlIGM6dD1lLnBhcmFtcztzPWUuYXN5bmM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yPXtzaW1wbGU6dHJ1ZSxwYXJhbVNldDp7fX07Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDsrK2kpe3ZhciBhPXRbaV07aWYoYS50eXBlPT09bC5TeW50YXguQXNzaWdubWVudFBhdHRlcm4pe2lmKGEucmlnaHQudHlwZT09PWwuU3ludGF4LllpZWxkRXhwcmVzc2lvbil7aWYoYS5yaWdodC5hcmd1bWVudCl7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCl9YS5yaWdodC50eXBlPWwuU3ludGF4LklkZW50aWZpZXI7YS5yaWdodC5uYW1lPSJ5aWVsZCI7ZGVsZXRlIGEucmlnaHQuYXJndW1lbnQ7ZGVsZXRlIGEucmlnaHQuZGVsZWdhdGV9fWVsc2UgaWYocyYmYS50eXBlPT09bC5TeW50YXguSWRlbnRpZmllciYmYS5uYW1lPT09ImF3YWl0Iil7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCl9dGhpcy5jaGVja1BhdHRlcm5QYXJhbShyLGEpO3RbaV09YX1pZih0aGlzLmNvbnRleHQuc3RyaWN0fHwhdGhpcy5jb250ZXh0LmFsbG93WWllbGQpe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7KytpKXt2YXIgYT10W2ldO2lmKGEudHlwZT09PWwuU3ludGF4LllpZWxkRXhwcmVzc2lvbil7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCl9fX1pZihyLm1lc3NhZ2U9PT1uLk1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZSl7dmFyIG89dGhpcy5jb250ZXh0LnN0cmljdD9yLnN0cmljdGVkOnIuZmlyc3RSZXN0cmljdGVkO3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obyxyLm1lc3NhZ2UpfXJldHVybntzaW1wbGU6ci5zaW1wbGUscGFyYW1zOnQsc3RyaWN0ZWQ6ci5zdHJpY3RlZCxmaXJzdFJlc3RyaWN0ZWQ6ci5maXJzdFJlc3RyaWN0ZWQsbWVzc2FnZTpyLm1lc3NhZ2V9fTtlLnByb3RvdHlwZS5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uPWZ1bmN0aW9uKCl7dmFyIGU7aWYoIXRoaXMuY29udGV4dC5hbGxvd1lpZWxkJiZ0aGlzLm1hdGNoS2V5d29yZCgieWllbGQiKSl7ZT10aGlzLnBhcnNlWWllbGRFeHByZXNzaW9uKCl9ZWxzZXt2YXIgdD10aGlzLmxvb2thaGVhZDt2YXIgcj10O2U9dGhpcy5wYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpO2lmKHIudHlwZT09PTMmJnIubGluZU51bWJlcj09PXRoaXMubG9va2FoZWFkLmxpbmVOdW1iZXImJnIudmFsdWU9PT0iYXN5bmMiKXtpZih0aGlzLmxvb2thaGVhZC50eXBlPT09M3x8dGhpcy5tYXRjaEtleXdvcmQoInlpZWxkIikpe3ZhciBzPXRoaXMucGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpO3RoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKHMpO2U9e3R5cGU6YyxwYXJhbXM6W3NdLGFzeW5jOnRydWV9fX1pZihlLnR5cGU9PT1jfHx0aGlzLm1hdGNoKCI9PiIpKXt0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0PWZhbHNlO3RoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PWZhbHNlO3ZhciBpPWUuYXN5bmM7dmFyIG89dGhpcy5yZWludGVycHJldEFzQ292ZXJGb3JtYWxzTGlzdChlKTtpZihvKXtpZih0aGlzLmhhc0xpbmVUZXJtaW5hdG9yKXt0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKX10aGlzLmNvbnRleHQuZmlyc3RDb3ZlckluaXRpYWxpemVkTmFtZUVycm9yPW51bGw7dmFyIHU9dGhpcy5jb250ZXh0LnN0cmljdDt2YXIgaD10aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmU7dGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlPW8uc2ltcGxlO3ZhciBwPXRoaXMuY29udGV4dC5hbGxvd1lpZWxkO3ZhciBmPXRoaXMuY29udGV4dC5hd2FpdDt0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD10cnVlO3RoaXMuY29udGV4dC5hd2FpdD1pO3ZhciBkPXRoaXMuc3RhcnROb2RlKHQpO3RoaXMuZXhwZWN0KCI9PiIpO3ZhciBtPXZvaWQgMDtpZih0aGlzLm1hdGNoKCJ7Iikpe3ZhciB5PXRoaXMuY29udGV4dC5hbGxvd0luO3RoaXMuY29udGV4dC5hbGxvd0luPXRydWU7bT10aGlzLnBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpO3RoaXMuY29udGV4dC5hbGxvd0luPXl9ZWxzZXttPXRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pfXZhciBnPW0udHlwZSE9PWwuU3ludGF4LkJsb2NrU3RhdGVtZW50O2lmKHRoaXMuY29udGV4dC5zdHJpY3QmJm8uZmlyc3RSZXN0cmljdGVkKXt0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKG8uZmlyc3RSZXN0cmljdGVkLG8ubWVzc2FnZSl9aWYodGhpcy5jb250ZXh0LnN0cmljdCYmby5zdHJpY3RlZCl7dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihvLnN0cmljdGVkLG8ubWVzc2FnZSl9ZT1pP3RoaXMuZmluYWxpemUoZCxuZXcgYS5Bc3luY0Fycm93RnVuY3Rpb25FeHByZXNzaW9uKG8ucGFyYW1zLG0sZykpOnRoaXMuZmluYWxpemUoZCxuZXcgYS5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihvLnBhcmFtcyxtLGcpKTt0aGlzLmNvbnRleHQuc3RyaWN0PXU7dGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlPWg7dGhpcy5jb250ZXh0LmFsbG93WWllbGQ9cDt0aGlzLmNvbnRleHQuYXdhaXQ9Zn19ZWxzZXtpZih0aGlzLm1hdGNoQXNzaWduKCkpe2lmKCF0aGlzLmNvbnRleHQuaXNBc3NpZ25tZW50VGFyZ2V0KXt0aGlzLnRvbGVyYXRlRXJyb3Iobi5NZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KX1pZih0aGlzLmNvbnRleHQuc3RyaWN0JiZlLnR5cGU9PT1sLlN5bnRheC5JZGVudGlmaWVyKXt2YXIgeD1lO2lmKHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKHgubmFtZSkpe3RoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4ocixuLk1lc3NhZ2VzLlN0cmljdExIU0Fzc2lnbm1lbnQpfWlmKHRoaXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQoeC5uYW1lKSl7dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihyLG4uTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKX19aWYoIXRoaXMubWF0Y2goIj0iKSl7dGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD1mYWxzZTt0aGlzLmNvbnRleHQuaXNCaW5kaW5nRWxlbWVudD1mYWxzZX1lbHNle3RoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGUpfXI9dGhpcy5uZXh0VG9rZW4oKTt2YXIgdj1yLnZhbHVlO3ZhciBiPXRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pO2U9dGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZSh0KSxuZXcgYS5Bc3NpZ25tZW50RXhwcmVzc2lvbih2LGUsYikpO3RoaXMuY29udGV4dC5maXJzdENvdmVySW5pdGlhbGl6ZWROYW1lRXJyb3I9bnVsbH19fXJldHVybiBlfTtlLnByb3RvdHlwZS5wYXJzZUV4cHJlc3Npb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxvb2thaGVhZDt2YXIgdD10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTtpZih0aGlzLm1hdGNoKCIsIikpe3ZhciByPVtdO3IucHVzaCh0KTt3aGlsZSh0aGlzLmxvb2thaGVhZC50eXBlIT09Mil7aWYoIXRoaXMubWF0Y2goIiwiKSl7YnJlYWt9dGhpcy5uZXh0VG9rZW4oKTtyLnB1c2godGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbikpfXQ9dGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShlKSxuZXcgYS5TZXF1ZW5jZUV4cHJlc3Npb24ocikpfXJldHVybiB0fTtlLnByb3RvdHlwZS5wYXJzZVN0YXRlbWVudExpc3RJdGVtPWZ1bmN0aW9uKCl7dmFyIGU7dGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldD10cnVlO3RoaXMuY29udGV4dC5pc0JpbmRpbmdFbGVtZW50PXRydWU7aWYodGhpcy5sb29rYWhlYWQudHlwZT09PTQpe3N3aXRjaCh0aGlzLmxvb2thaGVhZC52YWx1ZSl7Y2FzZSJleHBvcnQiOmlmKCF0aGlzLmNvbnRleHQuaXNNb2R1bGUpe3RoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQsbi5NZXNzYWdlcy5JbGxlZ2FsRXhwb3J0RGVjbGFyYXRpb24pfWU9dGhpcy5wYXJzZUV4cG9ydERlY2xhcmF0aW9uKCk7YnJlYWs7Y2FzZSJpbXBvcnQiOmlmKCF0aGlzLmNvbnRleHQuaXNNb2R1bGUpe3RoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQsbi5NZXNzYWdlcy5JbGxlZ2FsSW1wb3J0RGVjbGFyYXRpb24pfWU9dGhpcy5wYXJzZUltcG9ydERlY2xhcmF0aW9uKCk7YnJlYWs7Y2FzZSJjb25zdCI6ZT10aGlzLnBhcnNlTGV4aWNhbERlY2xhcmF0aW9uKHtpbkZvcjpmYWxzZX0pO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOmU9dGhpcy5wYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKTticmVhaztjYXNlImNsYXNzIjplPXRoaXMucGFyc2VDbGFzc0RlY2xhcmF0aW9uKCk7YnJlYWs7Y2FzZSJsZXQiOmU9dGhpcy5pc0xleGljYWxEZWNsYXJhdGlvbigpP3RoaXMucGFyc2VMZXhpY2FsRGVjbGFyYXRpb24oe2luRm9yOmZhbHNlfSk6dGhpcy5wYXJzZVN0YXRlbWVudCgpO2JyZWFrO2RlZmF1bHQ6ZT10aGlzLnBhcnNlU3RhdGVtZW50KCk7YnJlYWt9fWVsc2V7ZT10aGlzLnBhcnNlU3RhdGVtZW50KCl9cmV0dXJuIGV9O2UucHJvdG90eXBlLnBhcnNlQmxvY2s9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdCgieyIpO3ZhciB0PVtdO3doaWxlKHRydWUpe2lmKHRoaXMubWF0Y2goIn0iKSl7YnJlYWt9dC5wdXNoKHRoaXMucGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpKX10aGlzLmV4cGVjdCgifSIpO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuQmxvY2tTdGF0ZW1lbnQodCkpfTtlLnByb3RvdHlwZS5wYXJzZUxleGljYWxCaW5kaW5nPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5jcmVhdGVOb2RlKCk7dmFyIHM9W107dmFyIGk9dGhpcy5wYXJzZVBhdHRlcm4ocyxlKTtpZih0aGlzLmNvbnRleHQuc3RyaWN0JiZpLnR5cGU9PT1sLlN5bnRheC5JZGVudGlmaWVyKXtpZih0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChpLm5hbWUpKXt0aGlzLnRvbGVyYXRlRXJyb3Iobi5NZXNzYWdlcy5TdHJpY3RWYXJOYW1lKX19dmFyIG89bnVsbDtpZihlPT09ImNvbnN0Iil7aWYoIXRoaXMubWF0Y2hLZXl3b3JkKCJpbiIpJiYhdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCJvZiIpKXtpZih0aGlzLm1hdGNoKCI9Iikpe3RoaXMubmV4dFRva2VuKCk7bz10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKX1lbHNle3RoaXMudGhyb3dFcnJvcihuLk1lc3NhZ2VzLkRlY2xhcmF0aW9uTWlzc2luZ0luaXRpYWxpemVyLCJjb25zdCIpfX19ZWxzZSBpZighdC5pbkZvciYmaS50eXBlIT09bC5TeW50YXguSWRlbnRpZmllcnx8dGhpcy5tYXRjaCgiPSIpKXt0aGlzLmV4cGVjdCgiPSIpO289dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbil9cmV0dXJuIHRoaXMuZmluYWxpemUocixuZXcgYS5WYXJpYWJsZURlY2xhcmF0b3IoaSxvKSl9O2UucHJvdG90eXBlLnBhcnNlQmluZGluZ0xpc3Q9ZnVuY3Rpb24oZSx0KXt2YXIgcj1bdGhpcy5wYXJzZUxleGljYWxCaW5kaW5nKGUsdCldO3doaWxlKHRoaXMubWF0Y2goIiwiKSl7dGhpcy5uZXh0VG9rZW4oKTtyLnB1c2godGhpcy5wYXJzZUxleGljYWxCaW5kaW5nKGUsdCkpfXJldHVybiByfTtlLnByb3RvdHlwZS5pc0xleGljYWxEZWNsYXJhdGlvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Nhbm5lci5zYXZlU3RhdGUoKTt0aGlzLnNjYW5uZXIuc2NhbkNvbW1lbnRzKCk7dmFyIHQ9dGhpcy5zY2FubmVyLmxleCgpO3RoaXMuc2Nhbm5lci5yZXN0b3JlU3RhdGUoZSk7cmV0dXJuIHQudHlwZT09PTN8fHQudHlwZT09PTcmJnQudmFsdWU9PT0iWyJ8fHQudHlwZT09PTcmJnQudmFsdWU9PT0ieyJ8fHQudHlwZT09PTQmJnQudmFsdWU9PT0ibGV0Inx8dC50eXBlPT09NCYmdC52YWx1ZT09PSJ5aWVsZCJ9O2UucHJvdG90eXBlLnBhcnNlTGV4aWNhbERlY2xhcmF0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3JlYXRlTm9kZSgpO3ZhciByPXRoaXMubmV4dFRva2VuKCkudmFsdWU7cy5hc3NlcnQocj09PSJsZXQifHxyPT09ImNvbnN0IiwiTGV4aWNhbCBkZWNsYXJhdGlvbiBtdXN0IGJlIGVpdGhlciBsZXQgb3IgY29uc3QiKTt2YXIgaT10aGlzLnBhcnNlQmluZGluZ0xpc3QocixlKTt0aGlzLmNvbnN1bWVTZW1pY29sb24oKTtyZXR1cm4gdGhpcy5maW5hbGl6ZSh0LG5ldyBhLlZhcmlhYmxlRGVjbGFyYXRpb24oaSxyKSl9O2UucHJvdG90eXBlLnBhcnNlQmluZGluZ1Jlc3RFbGVtZW50PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3QoIi4uLiIpO3ZhciBzPXRoaXMucGFyc2VQYXR0ZXJuKGUsdCk7cmV0dXJuIHRoaXMuZmluYWxpemUocixuZXcgYS5SZXN0RWxlbWVudChzKSl9O2UucHJvdG90eXBlLnBhcnNlQXJyYXlQYXR0ZXJuPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3QoIlsiKTt2YXIgcz1bXTt3aGlsZSghdGhpcy5tYXRjaCgiXSIpKXtpZih0aGlzLm1hdGNoKCIsIikpe3RoaXMubmV4dFRva2VuKCk7cy5wdXNoKG51bGwpfWVsc2V7aWYodGhpcy5tYXRjaCgiLi4uIikpe3MucHVzaCh0aGlzLnBhcnNlQmluZGluZ1Jlc3RFbGVtZW50KGUsdCkpO2JyZWFrfWVsc2V7cy5wdXNoKHRoaXMucGFyc2VQYXR0ZXJuV2l0aERlZmF1bHQoZSx0KSl9aWYoIXRoaXMubWF0Y2goIl0iKSl7dGhpcy5leHBlY3QoIiwiKX19fXRoaXMuZXhwZWN0KCJdIik7cmV0dXJuIHRoaXMuZmluYWxpemUocixuZXcgYS5BcnJheVBhdHRlcm4ocykpfTtlLnByb3RvdHlwZS5wYXJzZVByb3BlcnR5UGF0dGVybj1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuY3JlYXRlTm9kZSgpO3ZhciBzPWZhbHNlO3ZhciBpPWZhbHNlO3ZhciBuPWZhbHNlO3ZhciBvO3ZhciBsO2lmKHRoaXMubG9va2FoZWFkLnR5cGU9PT0zKXt2YXIgdT10aGlzLmxvb2thaGVhZDtvPXRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTt2YXIgYz10aGlzLmZpbmFsaXplKHIsbmV3IGEuSWRlbnRpZmllcih1LnZhbHVlKSk7aWYodGhpcy5tYXRjaCgiPSIpKXtlLnB1c2godSk7aT10cnVlO3RoaXMubmV4dFRva2VuKCk7dmFyIGg9dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7bD10aGlzLmZpbmFsaXplKHRoaXMuc3RhcnROb2RlKHUpLG5ldyBhLkFzc2lnbm1lbnRQYXR0ZXJuKGMsaCkpfWVsc2UgaWYoIXRoaXMubWF0Y2goIjoiKSl7ZS5wdXNoKHUpO2k9dHJ1ZTtsPWN9ZWxzZXt0aGlzLmV4cGVjdCgiOiIpO2w9dGhpcy5wYXJzZVBhdHRlcm5XaXRoRGVmYXVsdChlLHQpfX1lbHNle3M9dGhpcy5tYXRjaCgiWyIpO289dGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7dGhpcy5leHBlY3QoIjoiKTtsPXRoaXMucGFyc2VQYXR0ZXJuV2l0aERlZmF1bHQoZSx0KX1yZXR1cm4gdGhpcy5maW5hbGl6ZShyLG5ldyBhLlByb3BlcnR5KCJpbml0IixvLHMsbCxuLGkpKX07ZS5wcm90b3R5cGUucGFyc2VPYmplY3RQYXR0ZXJuPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5jcmVhdGVOb2RlKCk7dmFyIHM9W107dGhpcy5leHBlY3QoInsiKTt3aGlsZSghdGhpcy5tYXRjaCgifSIpKXtzLnB1c2godGhpcy5wYXJzZVByb3BlcnR5UGF0dGVybihlLHQpKTtpZighdGhpcy5tYXRjaCgifSIpKXt0aGlzLmV4cGVjdCgiLCIpfX10aGlzLmV4cGVjdCgifSIpO3JldHVybiB0aGlzLmZpbmFsaXplKHIsbmV3IGEuT2JqZWN0UGF0dGVybihzKSl9O2UucHJvdG90eXBlLnBhcnNlUGF0dGVybj1mdW5jdGlvbihlLHQpe3ZhciByO2lmKHRoaXMubWF0Y2goIlsiKSl7cj10aGlzLnBhcnNlQXJyYXlQYXR0ZXJuKGUsdCl9ZWxzZSBpZih0aGlzLm1hdGNoKCJ7Iikpe3I9dGhpcy5wYXJzZU9iamVjdFBhdHRlcm4oZSx0KX1lbHNle2lmKHRoaXMubWF0Y2hLZXl3b3JkKCJsZXQiKSYmKHQ9PT0iY29uc3QifHx0PT09ImxldCIpKXt0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkLG4uTWVzc2FnZXMuTGV0SW5MZXhpY2FsQmluZGluZyl9ZS5wdXNoKHRoaXMubG9va2FoZWFkKTtyPXRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIodCl9cmV0dXJuIHJ9O2UucHJvdG90eXBlLnBhcnNlUGF0dGVybldpdGhEZWZhdWx0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5sb29rYWhlYWQ7dmFyIHM9dGhpcy5wYXJzZVBhdHRlcm4oZSx0KTtpZih0aGlzLm1hdGNoKCI9Iikpe3RoaXMubmV4dFRva2VuKCk7dmFyIGk9dGhpcy5jb250ZXh0LmFsbG93WWllbGQ7dGhpcy5jb250ZXh0LmFsbG93WWllbGQ9dHJ1ZTt2YXIgbj10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTt0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD1pO3M9dGhpcy5maW5hbGl6ZSh0aGlzLnN0YXJ0Tm9kZShyKSxuZXcgYS5Bc3NpZ25tZW50UGF0dGVybihzLG4pKX1yZXR1cm4gc307ZS5wcm90b3R5cGUucGFyc2VWYXJpYWJsZUlkZW50aWZpZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jcmVhdGVOb2RlKCk7dmFyIHI9dGhpcy5uZXh0VG9rZW4oKTtpZihyLnR5cGU9PT00JiZyLnZhbHVlPT09InlpZWxkIil7aWYodGhpcy5jb250ZXh0LnN0cmljdCl7dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihyLG4uTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKX1lbHNlIGlmKCF0aGlzLmNvbnRleHQuYWxsb3dZaWVsZCl7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihyKX19ZWxzZSBpZihyLnR5cGUhPT0zKXtpZih0aGlzLmNvbnRleHQuc3RyaWN0JiZyLnR5cGU9PT00JiZ0aGlzLnNjYW5uZXIuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHIudmFsdWUpKXt0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHIsbi5NZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQpfWVsc2V7aWYodGhpcy5jb250ZXh0LnN0cmljdHx8ci52YWx1ZSE9PSJsZXQifHxlIT09InZhciIpe3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4ocil9fX1lbHNlIGlmKCh0aGlzLmNvbnRleHQuaXNNb2R1bGV8fHRoaXMuY29udGV4dC5hd2FpdCkmJnIudHlwZT09PTMmJnIudmFsdWU9PT0iYXdhaXQiKXt0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHIpfXJldHVybiB0aGlzLmZpbmFsaXplKHQsbmV3IGEuSWRlbnRpZmllcihyLnZhbHVlKSl9O2UucHJvdG90eXBlLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNyZWF0ZU5vZGUoKTt2YXIgcj1bXTt2YXIgcz10aGlzLnBhcnNlUGF0dGVybihyLCJ2YXIiKTtpZih0aGlzLmNvbnRleHQuc3RyaWN0JiZzLnR5cGU9PT1sLlN5bnRheC5JZGVudGlmaWVyKXtpZih0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChzLm5hbWUpKXt0aGlzLnRvbGVyYXRlRXJyb3Iobi5NZXNzYWdlcy5TdHJpY3RWYXJOYW1lKX19dmFyIGk9bnVsbDtpZih0aGlzLm1hdGNoKCI9Iikpe3RoaXMubmV4dFRva2VuKCk7aT10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKX1lbHNlIGlmKHMudHlwZSE9PWwuU3ludGF4LklkZW50aWZpZXImJiFlLmluRm9yKXt0aGlzLmV4cGVjdCgiPSIpfXJldHVybiB0aGlzLmZpbmFsaXplKHQsbmV3IGEuVmFyaWFibGVEZWNsYXJhdG9yKHMsaSkpfTtlLnByb3RvdHlwZS5wYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0PWZ1bmN0aW9uKGUpe3ZhciB0PXtpbkZvcjplLmluRm9yfTt2YXIgcj1bXTtyLnB1c2godGhpcy5wYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24odCkpO3doaWxlKHRoaXMubWF0Y2goIiwiKSl7dGhpcy5uZXh0VG9rZW4oKTtyLnB1c2godGhpcy5wYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24odCkpfXJldHVybiByfTtlLnByb3RvdHlwZS5wYXJzZVZhcmlhYmxlU3RhdGVtZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJ2YXIiKTt2YXIgdD10aGlzLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qoe2luRm9yOmZhbHNlfSk7dGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgYS5WYXJpYWJsZURlY2xhcmF0aW9uKHQsInZhciIpKX07ZS5wcm90b3R5cGUucGFyc2VFbXB0eVN0YXRlbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0KCI7Iik7cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgYS5FbXB0eVN0YXRlbWVudCl9O2UucHJvdG90eXBlLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3ZhciB0PXRoaXMucGFyc2VFeHByZXNzaW9uKCk7dGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgYS5FeHByZXNzaW9uU3RhdGVtZW50KHQpKX07ZS5wcm90b3R5cGUucGFyc2VJZkNsYXVzZT1mdW5jdGlvbigpe2lmKHRoaXMuY29udGV4dC5zdHJpY3QmJnRoaXMubWF0Y2hLZXl3b3JkKCJmdW5jdGlvbiIpKXt0aGlzLnRvbGVyYXRlRXJyb3Iobi5NZXNzYWdlcy5TdHJpY3RGdW5jdGlvbil9cmV0dXJuIHRoaXMucGFyc2VTdGF0ZW1lbnQoKX07ZS5wcm90b3R5cGUucGFyc2VJZlN0YXRlbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3ZhciB0O3ZhciByPW51bGw7dGhpcy5leHBlY3RLZXl3b3JkKCJpZiIpO3RoaXMuZXhwZWN0KCIoIik7dmFyIHM9dGhpcy5wYXJzZUV4cHJlc3Npb24oKTtpZighdGhpcy5tYXRjaCgiKSIpJiZ0aGlzLmNvbmZpZy50b2xlcmFudCl7dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTt0PXRoaXMuZmluYWxpemUodGhpcy5jcmVhdGVOb2RlKCksbmV3IGEuRW1wdHlTdGF0ZW1lbnQpfWVsc2V7dGhpcy5leHBlY3QoIikiKTt0PXRoaXMucGFyc2VJZkNsYXVzZSgpO2lmKHRoaXMubWF0Y2hLZXl3b3JkKCJlbHNlIikpe3RoaXMubmV4dFRva2VuKCk7cj10aGlzLnBhcnNlSWZDbGF1c2UoKX19cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgYS5JZlN0YXRlbWVudChzLHQscikpfTtlLnByb3RvdHlwZS5wYXJzZURvV2hpbGVTdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdEtleXdvcmQoImRvIik7dmFyIHQ9dGhpcy5jb250ZXh0LmluSXRlcmF0aW9uO3RoaXMuY29udGV4dC5pbkl0ZXJhdGlvbj10cnVlO3ZhciByPXRoaXMucGFyc2VTdGF0ZW1lbnQoKTt0aGlzLmNvbnRleHQuaW5JdGVyYXRpb249dDt0aGlzLmV4cGVjdEtleXdvcmQoIndoaWxlIik7dGhpcy5leHBlY3QoIigiKTt2YXIgcz10aGlzLnBhcnNlRXhwcmVzc2lvbigpO2lmKCF0aGlzLm1hdGNoKCIpIikmJnRoaXMuY29uZmlnLnRvbGVyYW50KXt0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpfWVsc2V7dGhpcy5leHBlY3QoIikiKTtpZih0aGlzLm1hdGNoKCI7Iikpe3RoaXMubmV4dFRva2VuKCl9fXJldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuRG9XaGlsZVN0YXRlbWVudChyLHMpKX07ZS5wcm90b3R5cGUucGFyc2VXaGlsZVN0YXRlbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3ZhciB0O3RoaXMuZXhwZWN0S2V5d29yZCgid2hpbGUiKTt0aGlzLmV4cGVjdCgiKCIpO3ZhciByPXRoaXMucGFyc2VFeHByZXNzaW9uKCk7aWYoIXRoaXMubWF0Y2goIikiKSYmdGhpcy5jb25maWcudG9sZXJhbnQpe3RoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSk7dD10aGlzLmZpbmFsaXplKHRoaXMuY3JlYXRlTm9kZSgpLG5ldyBhLkVtcHR5U3RhdGVtZW50KX1lbHNle3RoaXMuZXhwZWN0KCIpIik7dmFyIHM9dGhpcy5jb250ZXh0LmluSXRlcmF0aW9uO3RoaXMuY29udGV4dC5pbkl0ZXJhdGlvbj10cnVlO3Q9dGhpcy5wYXJzZVN0YXRlbWVudCgpO3RoaXMuY29udGV4dC5pbkl0ZXJhdGlvbj1zfXJldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuV2hpbGVTdGF0ZW1lbnQocix0KSl9O2UucHJvdG90eXBlLnBhcnNlRm9yU3RhdGVtZW50PWZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt2YXIgdD1udWxsO3ZhciByPW51bGw7dmFyIHM9dHJ1ZTt2YXIgaSxvO3ZhciB1PXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0S2V5d29yZCgiZm9yIik7dGhpcy5leHBlY3QoIigiKTtpZih0aGlzLm1hdGNoKCI7Iikpe3RoaXMubmV4dFRva2VuKCl9ZWxzZXtpZih0aGlzLm1hdGNoS2V5d29yZCgidmFyIikpe2U9dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5uZXh0VG9rZW4oKTt2YXIgYz10aGlzLmNvbnRleHQuYWxsb3dJbjt0aGlzLmNvbnRleHQuYWxsb3dJbj1mYWxzZTt2YXIgaD10aGlzLnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qoe2luRm9yOnRydWV9KTt0aGlzLmNvbnRleHQuYWxsb3dJbj1jO2lmKGgubGVuZ3RoPT09MSYmdGhpcy5tYXRjaEtleXdvcmQoImluIikpe3ZhciBwPWhbMF07aWYocC5pbml0JiYocC5pZC50eXBlPT09bC5TeW50YXguQXJyYXlQYXR0ZXJufHxwLmlkLnR5cGU9PT1sLlN5bnRheC5PYmplY3RQYXR0ZXJufHx0aGlzLmNvbnRleHQuc3RyaWN0KSl7dGhpcy50b2xlcmF0ZUVycm9yKG4uTWVzc2FnZXMuRm9ySW5PZkxvb3BJbml0aWFsaXplciwiZm9yLWluIil9ZT10aGlzLmZpbmFsaXplKGUsbmV3IGEuVmFyaWFibGVEZWNsYXJhdGlvbihoLCJ2YXIiKSk7dGhpcy5uZXh0VG9rZW4oKTtpPWU7bz10aGlzLnBhcnNlRXhwcmVzc2lvbigpO2U9bnVsbH1lbHNlIGlmKGgubGVuZ3RoPT09MSYmaFswXS5pbml0PT09bnVsbCYmdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCJvZiIpKXtlPXRoaXMuZmluYWxpemUoZSxuZXcgYS5WYXJpYWJsZURlY2xhcmF0aW9uKGgsInZhciIpKTt0aGlzLm5leHRUb2tlbigpO2k9ZTtvPXRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO2U9bnVsbDtzPWZhbHNlfWVsc2V7ZT10aGlzLmZpbmFsaXplKGUsbmV3IGEuVmFyaWFibGVEZWNsYXJhdGlvbihoLCJ2YXIiKSk7dGhpcy5leHBlY3QoIjsiKX19ZWxzZSBpZih0aGlzLm1hdGNoS2V5d29yZCgiY29uc3QiKXx8dGhpcy5tYXRjaEtleXdvcmQoImxldCIpKXtlPXRoaXMuY3JlYXRlTm9kZSgpO3ZhciBmPXRoaXMubmV4dFRva2VuKCkudmFsdWU7aWYoIXRoaXMuY29udGV4dC5zdHJpY3QmJnRoaXMubG9va2FoZWFkLnZhbHVlPT09ImluIil7ZT10aGlzLmZpbmFsaXplKGUsbmV3IGEuSWRlbnRpZmllcihmKSk7dGhpcy5uZXh0VG9rZW4oKTtpPWU7bz10aGlzLnBhcnNlRXhwcmVzc2lvbigpO2U9bnVsbH1lbHNle3ZhciBjPXRoaXMuY29udGV4dC5hbGxvd0luO3RoaXMuY29udGV4dC5hbGxvd0luPWZhbHNlO3ZhciBoPXRoaXMucGFyc2VCaW5kaW5nTGlzdChmLHtpbkZvcjp0cnVlfSk7dGhpcy5jb250ZXh0LmFsbG93SW49YztpZihoLmxlbmd0aD09PTEmJmhbMF0uaW5pdD09PW51bGwmJnRoaXMubWF0Y2hLZXl3b3JkKCJpbiIpKXtlPXRoaXMuZmluYWxpemUoZSxuZXcgYS5WYXJpYWJsZURlY2xhcmF0aW9uKGgsZikpO3RoaXMubmV4dFRva2VuKCk7aT1lO289dGhpcy5wYXJzZUV4cHJlc3Npb24oKTtlPW51bGx9ZWxzZSBpZihoLmxlbmd0aD09PTEmJmhbMF0uaW5pdD09PW51bGwmJnRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgib2YiKSl7ZT10aGlzLmZpbmFsaXplKGUsbmV3IGEuVmFyaWFibGVEZWNsYXJhdGlvbihoLGYpKTt0aGlzLm5leHRUb2tlbigpO2k9ZTtvPXRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO2U9bnVsbDtzPWZhbHNlfWVsc2V7dGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7ZT10aGlzLmZpbmFsaXplKGUsbmV3IGEuVmFyaWFibGVEZWNsYXJhdGlvbihoLGYpKX19fWVsc2V7dmFyIGQ9dGhpcy5sb29rYWhlYWQ7dmFyIGM9dGhpcy5jb250ZXh0LmFsbG93SW47dGhpcy5jb250ZXh0LmFsbG93SW49ZmFsc2U7ZT10aGlzLmluaGVyaXRDb3ZlckdyYW1tYXIodGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKTt0aGlzLmNvbnRleHQuYWxsb3dJbj1jO2lmKHRoaXMubWF0Y2hLZXl3b3JkKCJpbiIpKXtpZighdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldHx8ZS50eXBlPT09bC5TeW50YXguQXNzaWdubWVudEV4cHJlc3Npb24pe3RoaXMudG9sZXJhdGVFcnJvcihuLk1lc3NhZ2VzLkludmFsaWRMSFNJbkZvckluKX10aGlzLm5leHRUb2tlbigpO3RoaXMucmVpbnRlcnByZXRFeHByZXNzaW9uQXNQYXR0ZXJuKGUpO2k9ZTtvPXRoaXMucGFyc2VFeHByZXNzaW9uKCk7ZT1udWxsfWVsc2UgaWYodGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCJvZiIpKXtpZighdGhpcy5jb250ZXh0LmlzQXNzaWdubWVudFRhcmdldHx8ZS50eXBlPT09bC5TeW50YXguQXNzaWdubWVudEV4cHJlc3Npb24pe3RoaXMudG9sZXJhdGVFcnJvcihuLk1lc3NhZ2VzLkludmFsaWRMSFNJbkZvckxvb3ApfXRoaXMubmV4dFRva2VuKCk7dGhpcy5yZWludGVycHJldEV4cHJlc3Npb25Bc1BhdHRlcm4oZSk7aT1lO289dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7ZT1udWxsO3M9ZmFsc2V9ZWxzZXtpZih0aGlzLm1hdGNoKCIsIikpe3ZhciBtPVtlXTt3aGlsZSh0aGlzLm1hdGNoKCIsIikpe3RoaXMubmV4dFRva2VuKCk7bS5wdXNoKHRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24pKX1lPXRoaXMuZmluYWxpemUodGhpcy5zdGFydE5vZGUoZCksbmV3IGEuU2VxdWVuY2VFeHByZXNzaW9uKG0pKX10aGlzLmV4cGVjdCgiOyIpfX19aWYodHlwZW9mIGk9PT0idW5kZWZpbmVkIil7aWYoIXRoaXMubWF0Y2goIjsiKSl7dD10aGlzLnBhcnNlRXhwcmVzc2lvbigpfXRoaXMuZXhwZWN0KCI7Iik7aWYoIXRoaXMubWF0Y2goIikiKSl7cj10aGlzLnBhcnNlRXhwcmVzc2lvbigpfX12YXIgeTtpZighdGhpcy5tYXRjaCgiKSIpJiZ0aGlzLmNvbmZpZy50b2xlcmFudCl7dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLm5leHRUb2tlbigpKTt5PXRoaXMuZmluYWxpemUodGhpcy5jcmVhdGVOb2RlKCksbmV3IGEuRW1wdHlTdGF0ZW1lbnQpfWVsc2V7dGhpcy5leHBlY3QoIikiKTt2YXIgZz10aGlzLmNvbnRleHQuaW5JdGVyYXRpb247dGhpcy5jb250ZXh0LmluSXRlcmF0aW9uPXRydWU7eT10aGlzLmlzb2xhdGVDb3ZlckdyYW1tYXIodGhpcy5wYXJzZVN0YXRlbWVudCk7dGhpcy5jb250ZXh0LmluSXRlcmF0aW9uPWd9cmV0dXJuIHR5cGVvZiBpPT09InVuZGVmaW5lZCI/dGhpcy5maW5hbGl6ZSh1LG5ldyBhLkZvclN0YXRlbWVudChlLHQscix5KSk6cz90aGlzLmZpbmFsaXplKHUsbmV3IGEuRm9ySW5TdGF0ZW1lbnQoaSxvLHkpKTp0aGlzLmZpbmFsaXplKHUsbmV3IGEuRm9yT2ZTdGF0ZW1lbnQoaSxvLHkpKX07ZS5wcm90b3R5cGUucGFyc2VDb250aW51ZVN0YXRlbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0S2V5d29yZCgiY29udGludWUiKTt2YXIgdD1udWxsO2lmKHRoaXMubG9va2FoZWFkLnR5cGU9PT0zJiYhdGhpcy5oYXNMaW5lVGVybWluYXRvcil7dmFyIHI9dGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO3Q9cjt2YXIgcz0iJCIrci5uYW1lO2lmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb250ZXh0LmxhYmVsU2V0LHMpKXt0aGlzLnRocm93RXJyb3Iobi5NZXNzYWdlcy5Vbmtub3duTGFiZWwsci5uYW1lKX19dGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7aWYodD09PW51bGwmJiF0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24pe3RoaXMudGhyb3dFcnJvcihuLk1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSl9cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgYS5Db250aW51ZVN0YXRlbWVudCh0KSl9O2UucHJvdG90eXBlLnBhcnNlQnJlYWtTdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdEtleXdvcmQoImJyZWFrIik7dmFyIHQ9bnVsbDtpZih0aGlzLmxvb2thaGVhZC50eXBlPT09MyYmIXRoaXMuaGFzTGluZVRlcm1pbmF0b3Ipe3ZhciByPXRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTt2YXIgcz0iJCIrci5uYW1lO2lmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb250ZXh0LmxhYmVsU2V0LHMpKXt0aGlzLnRocm93RXJyb3Iobi5NZXNzYWdlcy5Vbmtub3duTGFiZWwsci5uYW1lKX10PXJ9dGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7aWYodD09PW51bGwmJiF0aGlzLmNvbnRleHQuaW5JdGVyYXRpb24mJiF0aGlzLmNvbnRleHQuaW5Td2l0Y2gpe3RoaXMudGhyb3dFcnJvcihuLk1lc3NhZ2VzLklsbGVnYWxCcmVhayl9cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgYS5CcmVha1N0YXRlbWVudCh0KSl9O2UucHJvdG90eXBlLnBhcnNlUmV0dXJuU3RhdGVtZW50PWZ1bmN0aW9uKCl7aWYoIXRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keSl7dGhpcy50b2xlcmF0ZUVycm9yKG4uTWVzc2FnZXMuSWxsZWdhbFJldHVybil9dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJyZXR1cm4iKTt2YXIgdD0hdGhpcy5tYXRjaCgiOyIpJiYhdGhpcy5tYXRjaCgifSIpJiYhdGhpcy5oYXNMaW5lVGVybWluYXRvciYmdGhpcy5sb29rYWhlYWQudHlwZSE9PTJ8fHRoaXMubG9va2FoZWFkLnR5cGU9PT04fHx0aGlzLmxvb2thaGVhZC50eXBlPT09MTA7dmFyIHI9dD90aGlzLnBhcnNlRXhwcmVzc2lvbigpOm51bGw7dGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgYS5SZXR1cm5TdGF0ZW1lbnQocikpfTtlLnByb3RvdHlwZS5wYXJzZVdpdGhTdGF0ZW1lbnQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRleHQuc3RyaWN0KXt0aGlzLnRvbGVyYXRlRXJyb3Iobi5NZXNzYWdlcy5TdHJpY3RNb2RlV2l0aCl9dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dmFyIHQ7dGhpcy5leHBlY3RLZXl3b3JkKCJ3aXRoIik7dGhpcy5leHBlY3QoIigiKTt2YXIgcj10aGlzLnBhcnNlRXhwcmVzc2lvbigpO2lmKCF0aGlzLm1hdGNoKCIpIikmJnRoaXMuY29uZmlnLnRvbGVyYW50KXt0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpO3Q9dGhpcy5maW5hbGl6ZSh0aGlzLmNyZWF0ZU5vZGUoKSxuZXcgYS5FbXB0eVN0YXRlbWVudCl9ZWxzZXt0aGlzLmV4cGVjdCgiKSIpO3Q9dGhpcy5wYXJzZVN0YXRlbWVudCgpfXJldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuV2l0aFN0YXRlbWVudChyLHQpKX07ZS5wcm90b3R5cGUucGFyc2VTd2l0Y2hDYXNlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dmFyIHQ7aWYodGhpcy5tYXRjaEtleXdvcmQoImRlZmF1bHQiKSl7dGhpcy5uZXh0VG9rZW4oKTt0PW51bGx9ZWxzZXt0aGlzLmV4cGVjdEtleXdvcmQoImNhc2UiKTt0PXRoaXMucGFyc2VFeHByZXNzaW9uKCl9dGhpcy5leHBlY3QoIjoiKTt2YXIgcj1bXTt3aGlsZSh0cnVlKXtpZih0aGlzLm1hdGNoKCJ9Iil8fHRoaXMubWF0Y2hLZXl3b3JkKCJkZWZhdWx0Iil8fHRoaXMubWF0Y2hLZXl3b3JkKCJjYXNlIikpe2JyZWFrfXIucHVzaCh0aGlzLnBhcnNlU3RhdGVtZW50TGlzdEl0ZW0oKSl9cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgYS5Td2l0Y2hDYXNlKHQscikpfTtlLnByb3RvdHlwZS5wYXJzZVN3aXRjaFN0YXRlbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0S2V5d29yZCgic3dpdGNoIik7dGhpcy5leHBlY3QoIigiKTt2YXIgdD10aGlzLnBhcnNlRXhwcmVzc2lvbigpO3RoaXMuZXhwZWN0KCIpIik7dmFyIHI9dGhpcy5jb250ZXh0LmluU3dpdGNoO3RoaXMuY29udGV4dC5pblN3aXRjaD10cnVlO3ZhciBzPVtdO3ZhciBpPWZhbHNlO3RoaXMuZXhwZWN0KCJ7Iik7d2hpbGUodHJ1ZSl7aWYodGhpcy5tYXRjaCgifSIpKXticmVha312YXIgbz10aGlzLnBhcnNlU3dpdGNoQ2FzZSgpO2lmKG8udGVzdD09PW51bGwpe2lmKGkpe3RoaXMudGhyb3dFcnJvcihuLk1lc3NhZ2VzLk11bHRpcGxlRGVmYXVsdHNJblN3aXRjaCl9aT10cnVlfXMucHVzaChvKX10aGlzLmV4cGVjdCgifSIpO3RoaXMuY29udGV4dC5pblN3aXRjaD1yO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuU3dpdGNoU3RhdGVtZW50KHQscykpfTtlLnByb3RvdHlwZS5wYXJzZUxhYmVsbGVkU3RhdGVtZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dmFyIHQ9dGhpcy5wYXJzZUV4cHJlc3Npb24oKTt2YXIgcjtpZih0LnR5cGU9PT1sLlN5bnRheC5JZGVudGlmaWVyJiZ0aGlzLm1hdGNoKCI6Iikpe3RoaXMubmV4dFRva2VuKCk7dmFyIHM9dDt2YXIgaT0iJCIrcy5uYW1lO2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNvbnRleHQubGFiZWxTZXQsaSkpe3RoaXMudGhyb3dFcnJvcihuLk1lc3NhZ2VzLlJlZGVjbGFyYXRpb24sIkxhYmVsIixzLm5hbWUpfXRoaXMuY29udGV4dC5sYWJlbFNldFtpXT10cnVlO3ZhciBvPXZvaWQgMDtpZih0aGlzLm1hdGNoS2V5d29yZCgiY2xhc3MiKSl7dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCk7bz10aGlzLnBhcnNlQ2xhc3NEZWNsYXJhdGlvbigpfWVsc2UgaWYodGhpcy5tYXRjaEtleXdvcmQoImZ1bmN0aW9uIikpe3ZhciB1PXRoaXMubG9va2FoZWFkO3ZhciBjPXRoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk7aWYodGhpcy5jb250ZXh0LnN0cmljdCl7dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih1LG4uTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb24pfWVsc2UgaWYoYy5nZW5lcmF0b3Ipe3RoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odSxuLk1lc3NhZ2VzLkdlbmVyYXRvckluTGVnYWN5Q29udGV4dCl9bz1jfWVsc2V7bz10aGlzLnBhcnNlU3RhdGVtZW50KCl9ZGVsZXRlIHRoaXMuY29udGV4dC5sYWJlbFNldFtpXTtyPW5ldyBhLkxhYmVsZWRTdGF0ZW1lbnQocyxvKX1lbHNle3RoaXMuY29uc3VtZVNlbWljb2xvbigpO3I9bmV3IGEuRXhwcmVzc2lvblN0YXRlbWVudCh0KX1yZXR1cm4gdGhpcy5maW5hbGl6ZShlLHIpfTtlLnByb3RvdHlwZS5wYXJzZVRocm93U3RhdGVtZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJ0aHJvdyIpO2lmKHRoaXMuaGFzTGluZVRlcm1pbmF0b3Ipe3RoaXMudGhyb3dFcnJvcihuLk1lc3NhZ2VzLk5ld2xpbmVBZnRlclRocm93KX12YXIgdD10aGlzLnBhcnNlRXhwcmVzc2lvbigpO3RoaXMuY29uc3VtZVNlbWljb2xvbigpO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuVGhyb3dTdGF0ZW1lbnQodCkpfTtlLnByb3RvdHlwZS5wYXJzZUNhdGNoQ2xhdXNlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJjYXRjaCIpO3RoaXMuZXhwZWN0KCIoIik7aWYodGhpcy5tYXRjaCgiKSIpKXt0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKX12YXIgdD1bXTt2YXIgcj10aGlzLnBhcnNlUGF0dGVybih0KTt2YXIgcz17fTtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89IiQiK3RbaV0udmFsdWU7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsbykpe3RoaXMudG9sZXJhdGVFcnJvcihuLk1lc3NhZ2VzLkR1cGxpY2F0ZUJpbmRpbmcsdFtpXS52YWx1ZSl9c1tvXT10cnVlfWlmKHRoaXMuY29udGV4dC5zdHJpY3QmJnIudHlwZT09PWwuU3ludGF4LklkZW50aWZpZXIpe2lmKHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKHIubmFtZSkpe3RoaXMudG9sZXJhdGVFcnJvcihuLk1lc3NhZ2VzLlN0cmljdENhdGNoVmFyaWFibGUpfX10aGlzLmV4cGVjdCgiKSIpO3ZhciB1PXRoaXMucGFyc2VCbG9jaygpO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuQ2F0Y2hDbGF1c2Uocix1KSl9O2UucHJvdG90eXBlLnBhcnNlRmluYWxseUNsYXVzZT1mdW5jdGlvbigpe3RoaXMuZXhwZWN0S2V5d29yZCgiZmluYWxseSIpO3JldHVybiB0aGlzLnBhcnNlQmxvY2soKX07ZS5wcm90b3R5cGUucGFyc2VUcnlTdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdEtleXdvcmQoInRyeSIpO3ZhciB0PXRoaXMucGFyc2VCbG9jaygpO3ZhciByPXRoaXMubWF0Y2hLZXl3b3JkKCJjYXRjaCIpP3RoaXMucGFyc2VDYXRjaENsYXVzZSgpOm51bGw7dmFyIHM9dGhpcy5tYXRjaEtleXdvcmQoImZpbmFsbHkiKT90aGlzLnBhcnNlRmluYWxseUNsYXVzZSgpOm51bGw7aWYoIXImJiFzKXt0aGlzLnRocm93RXJyb3Iobi5NZXNzYWdlcy5Ob0NhdGNoT3JGaW5hbGx5KX1yZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBhLlRyeVN0YXRlbWVudCh0LHIscykpfTtlLnByb3RvdHlwZS5wYXJzZURlYnVnZ2VyU3RhdGVtZW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3RLZXl3b3JkKCJkZWJ1Z2dlciIpO3RoaXMuY29uc3VtZVNlbWljb2xvbigpO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuRGVidWdnZXJTdGF0ZW1lbnQpfTtlLnByb3RvdHlwZS5wYXJzZVN0YXRlbWVudD1mdW5jdGlvbigpe3ZhciBlO3N3aXRjaCh0aGlzLmxvb2thaGVhZC50eXBlKXtjYXNlIDE6Y2FzZSA1OmNhc2UgNjpjYXNlIDg6Y2FzZSAxMDpjYXNlIDk6ZT10aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpO2JyZWFrO2Nhc2UgNzp2YXIgdD10aGlzLmxvb2thaGVhZC52YWx1ZTtpZih0PT09InsiKXtlPXRoaXMucGFyc2VCbG9jaygpfWVsc2UgaWYodD09PSIoIil7ZT10aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpfWVsc2UgaWYodD09PSI7Iil7ZT10aGlzLnBhcnNlRW1wdHlTdGF0ZW1lbnQoKX1lbHNle2U9dGhpcy5wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoKX1icmVhaztjYXNlIDM6ZT10aGlzLm1hdGNoQXN5bmNGdW5jdGlvbigpP3RoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk6dGhpcy5wYXJzZUxhYmVsbGVkU3RhdGVtZW50KCk7YnJlYWs7Y2FzZSA0OnN3aXRjaCh0aGlzLmxvb2thaGVhZC52YWx1ZSl7Y2FzZSJicmVhayI6ZT10aGlzLnBhcnNlQnJlYWtTdGF0ZW1lbnQoKTticmVhaztjYXNlImNvbnRpbnVlIjplPXRoaXMucGFyc2VDb250aW51ZVN0YXRlbWVudCgpO2JyZWFrO2Nhc2UiZGVidWdnZXIiOmU9dGhpcy5wYXJzZURlYnVnZ2VyU3RhdGVtZW50KCk7YnJlYWs7Y2FzZSJkbyI6ZT10aGlzLnBhcnNlRG9XaGlsZVN0YXRlbWVudCgpO2JyZWFrO2Nhc2UiZm9yIjplPXRoaXMucGFyc2VGb3JTdGF0ZW1lbnQoKTticmVhaztjYXNlImZ1bmN0aW9uIjplPXRoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk7YnJlYWs7Y2FzZSJpZiI6ZT10aGlzLnBhcnNlSWZTdGF0ZW1lbnQoKTticmVhaztjYXNlInJldHVybiI6ZT10aGlzLnBhcnNlUmV0dXJuU3RhdGVtZW50KCk7YnJlYWs7Y2FzZSJzd2l0Y2giOmU9dGhpcy5wYXJzZVN3aXRjaFN0YXRlbWVudCgpO2JyZWFrO2Nhc2UidGhyb3ciOmU9dGhpcy5wYXJzZVRocm93U3RhdGVtZW50KCk7YnJlYWs7Y2FzZSJ0cnkiOmU9dGhpcy5wYXJzZVRyeVN0YXRlbWVudCgpO2JyZWFrO2Nhc2UidmFyIjplPXRoaXMucGFyc2VWYXJpYWJsZVN0YXRlbWVudCgpO2JyZWFrO2Nhc2Uid2hpbGUiOmU9dGhpcy5wYXJzZVdoaWxlU3RhdGVtZW50KCk7YnJlYWs7Y2FzZSJ3aXRoIjplPXRoaXMucGFyc2VXaXRoU3RhdGVtZW50KCk7YnJlYWs7ZGVmYXVsdDplPXRoaXMucGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCk7YnJlYWt9YnJlYWs7ZGVmYXVsdDplPXRoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5sb29rYWhlYWQpfXJldHVybiBlfTtlLnByb3RvdHlwZS5wYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdCgieyIpO3ZhciB0PXRoaXMucGFyc2VEaXJlY3RpdmVQcm9sb2d1ZXMoKTt2YXIgcj10aGlzLmNvbnRleHQubGFiZWxTZXQ7dmFyIHM9dGhpcy5jb250ZXh0LmluSXRlcmF0aW9uO3ZhciBpPXRoaXMuY29udGV4dC5pblN3aXRjaDt2YXIgbj10aGlzLmNvbnRleHQuaW5GdW5jdGlvbkJvZHk7dGhpcy5jb250ZXh0LmxhYmVsU2V0PXt9O3RoaXMuY29udGV4dC5pbkl0ZXJhdGlvbj1mYWxzZTt0aGlzLmNvbnRleHQuaW5Td2l0Y2g9ZmFsc2U7dGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5PXRydWU7d2hpbGUodGhpcy5sb29rYWhlYWQudHlwZSE9PTIpe2lmKHRoaXMubWF0Y2goIn0iKSl7YnJlYWt9dC5wdXNoKHRoaXMucGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpKX10aGlzLmV4cGVjdCgifSIpO3RoaXMuY29udGV4dC5sYWJlbFNldD1yO3RoaXMuY29udGV4dC5pbkl0ZXJhdGlvbj1zO3RoaXMuY29udGV4dC5pblN3aXRjaD1pO3RoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keT1uO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuQmxvY2tTdGF0ZW1lbnQodCkpfTtlLnByb3RvdHlwZS52YWxpZGF0ZVBhcmFtPWZ1bmN0aW9uKGUsdCxyKXt2YXIgcz0iJCIrcjtpZih0aGlzLmNvbnRleHQuc3RyaWN0KXtpZih0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChyKSl7ZS5zdHJpY3RlZD10O2UubWVzc2FnZT1uLk1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZX1pZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZS5wYXJhbVNldCxzKSl7ZS5zdHJpY3RlZD10O2UubWVzc2FnZT1uLk1lc3NhZ2VzLlN0cmljdFBhcmFtRHVwZX19ZWxzZSBpZighZS5maXJzdFJlc3RyaWN0ZWQpe2lmKHRoaXMuc2Nhbm5lci5pc1Jlc3RyaWN0ZWRXb3JkKHIpKXtlLmZpcnN0UmVzdHJpY3RlZD10O2UubWVzc2FnZT1uLk1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZX1lbHNlIGlmKHRoaXMuc2Nhbm5lci5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQocikpe2UuZmlyc3RSZXN0cmljdGVkPXQ7ZS5tZXNzYWdlPW4uTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkfWVsc2UgaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUucGFyYW1TZXQscykpe2Uuc3RyaWN0ZWQ9dDtlLm1lc3NhZ2U9bi5NZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGV9fWlmKHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHk9PT0iZnVuY3Rpb24iKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wYXJhbVNldCxzLHt2YWx1ZTp0cnVlLGVudW1lcmFibGU6dHJ1ZSx3cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfSl9ZWxzZXtlLnBhcmFtU2V0W3NdPXRydWV9fTtlLnByb3RvdHlwZS5wYXJzZVJlc3RFbGVtZW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0KCIuLi4iKTt2YXIgcj10aGlzLnBhcnNlUGF0dGVybihlKTtpZih0aGlzLm1hdGNoKCI9Iikpe3RoaXMudGhyb3dFcnJvcihuLk1lc3NhZ2VzLkRlZmF1bHRSZXN0UGFyYW1ldGVyKX1pZighdGhpcy5tYXRjaCgiKSIpKXt0aGlzLnRocm93RXJyb3Iobi5NZXNzYWdlcy5QYXJhbWV0ZXJBZnRlclJlc3RQYXJhbWV0ZXIpfXJldHVybiB0aGlzLmZpbmFsaXplKHQsbmV3IGEuUmVzdEVsZW1lbnQocikpfTtlLnByb3RvdHlwZS5wYXJzZUZvcm1hbFBhcmFtZXRlcj1mdW5jdGlvbihlKXt2YXIgdD1bXTt2YXIgcj10aGlzLm1hdGNoKCIuLi4iKT90aGlzLnBhcnNlUmVzdEVsZW1lbnQodCk6dGhpcy5wYXJzZVBhdHRlcm5XaXRoRGVmYXVsdCh0KTtmb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKyl7dGhpcy52YWxpZGF0ZVBhcmFtKGUsdFtzXSx0W3NdLnZhbHVlKX1lLnNpbXBsZT1lLnNpbXBsZSYmciBpbnN0YW5jZW9mIGEuSWRlbnRpZmllcjtlLnBhcmFtcy5wdXNoKHIpfTtlLnByb3RvdHlwZS5wYXJzZUZvcm1hbFBhcmFtZXRlcnM9ZnVuY3Rpb24oZSl7dmFyIHQ7dD17c2ltcGxlOnRydWUscGFyYW1zOltdLGZpcnN0UmVzdHJpY3RlZDplfTt0aGlzLmV4cGVjdCgiKCIpO2lmKCF0aGlzLm1hdGNoKCIpIikpe3QucGFyYW1TZXQ9e307d2hpbGUodGhpcy5sb29rYWhlYWQudHlwZSE9PTIpe3RoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXIodCk7aWYodGhpcy5tYXRjaCgiKSIpKXticmVha310aGlzLmV4cGVjdCgiLCIpO2lmKHRoaXMubWF0Y2goIikiKSl7YnJlYWt9fX10aGlzLmV4cGVjdCgiKSIpO3JldHVybntzaW1wbGU6dC5zaW1wbGUscGFyYW1zOnQucGFyYW1zLHN0cmljdGVkOnQuc3RyaWN0ZWQsZmlyc3RSZXN0cmljdGVkOnQuZmlyc3RSZXN0cmljdGVkLG1lc3NhZ2U6dC5tZXNzYWdlfX07ZS5wcm90b3R5cGUubWF0Y2hBc3luY0Z1bmN0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCJhc3luYyIpO2lmKGUpe3ZhciB0PXRoaXMuc2Nhbm5lci5zYXZlU3RhdGUoKTt0aGlzLnNjYW5uZXIuc2NhbkNvbW1lbnRzKCk7dmFyIHI9dGhpcy5zY2FubmVyLmxleCgpO3RoaXMuc2Nhbm5lci5yZXN0b3JlU3RhdGUodCk7ZT10LmxpbmVOdW1iZXI9PT1yLmxpbmVOdW1iZXImJnIudHlwZT09PTQmJnIudmFsdWU9PT0iZnVuY3Rpb24ifXJldHVybiBlfTtlLnByb3RvdHlwZS5wYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jcmVhdGVOb2RlKCk7dmFyIHI9dGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCJhc3luYyIpO2lmKHIpe3RoaXMubmV4dFRva2VuKCl9dGhpcy5leHBlY3RLZXl3b3JkKCJmdW5jdGlvbiIpO3ZhciBzPXI/ZmFsc2U6dGhpcy5tYXRjaCgiKiIpO2lmKHMpe3RoaXMubmV4dFRva2VuKCl9dmFyIGk7dmFyIG89bnVsbDt2YXIgbD1udWxsO2lmKCFlfHwhdGhpcy5tYXRjaCgiKCIpKXt2YXIgdT10aGlzLmxvb2thaGVhZDtvPXRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtpZih0aGlzLmNvbnRleHQuc3RyaWN0KXtpZih0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZCh1LnZhbHVlKSl7dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbih1LG4uTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lKX19ZWxzZXtpZih0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZCh1LnZhbHVlKSl7bD11O2k9bi5NZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWV9ZWxzZSBpZih0aGlzLnNjYW5uZXIuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHUudmFsdWUpKXtsPXU7aT1uLk1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZH19fXZhciBjPXRoaXMuY29udGV4dC5hd2FpdDt2YXIgaD10aGlzLmNvbnRleHQuYWxsb3dZaWVsZDt0aGlzLmNvbnRleHQuYXdhaXQ9cjt0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD0hczt2YXIgcD10aGlzLnBhcnNlRm9ybWFsUGFyYW1ldGVycyhsKTt2YXIgZj1wLnBhcmFtczt2YXIgZD1wLnN0cmljdGVkO2w9cC5maXJzdFJlc3RyaWN0ZWQ7aWYocC5tZXNzYWdlKXtpPXAubWVzc2FnZX12YXIgbT10aGlzLmNvbnRleHQuc3RyaWN0O3ZhciB5PXRoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZTt0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmU9cC5zaW1wbGU7dmFyIGc9dGhpcy5wYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTtpZih0aGlzLmNvbnRleHQuc3RyaWN0JiZsKXt0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKGwsaSl9aWYodGhpcy5jb250ZXh0LnN0cmljdCYmZCl7dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihkLGkpfXRoaXMuY29udGV4dC5zdHJpY3Q9bTt0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmU9eTt0aGlzLmNvbnRleHQuYXdhaXQ9Yzt0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD1oO3JldHVybiByP3RoaXMuZmluYWxpemUodCxuZXcgYS5Bc3luY0Z1bmN0aW9uRGVjbGFyYXRpb24obyxmLGcpKTp0aGlzLmZpbmFsaXplKHQsbmV3IGEuRnVuY3Rpb25EZWNsYXJhdGlvbihvLGYsZyxzKSl9O2UucHJvdG90eXBlLnBhcnNlRnVuY3Rpb25FeHByZXNzaW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dmFyIHQ9dGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCJhc3luYyIpO2lmKHQpe3RoaXMubmV4dFRva2VuKCl9dGhpcy5leHBlY3RLZXl3b3JkKCJmdW5jdGlvbiIpO3ZhciByPXQ/ZmFsc2U6dGhpcy5tYXRjaCgiKiIpO2lmKHIpe3RoaXMubmV4dFRva2VuKCl9dmFyIHM7dmFyIGk9bnVsbDt2YXIgbzt2YXIgbD10aGlzLmNvbnRleHQuYXdhaXQ7dmFyIHU9dGhpcy5jb250ZXh0LmFsbG93WWllbGQ7dGhpcy5jb250ZXh0LmF3YWl0PXQ7dGhpcy5jb250ZXh0LmFsbG93WWllbGQ9IXI7aWYoIXRoaXMubWF0Y2goIigiKSl7dmFyIGM9dGhpcy5sb29rYWhlYWQ7aT0hdGhpcy5jb250ZXh0LnN0cmljdCYmIXImJnRoaXMubWF0Y2hLZXl3b3JkKCJ5aWVsZCIpP3RoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpOnRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtpZih0aGlzLmNvbnRleHQuc3RyaWN0KXtpZih0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChjLnZhbHVlKSl7dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbihjLG4uTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lKX19ZWxzZXtpZih0aGlzLnNjYW5uZXIuaXNSZXN0cmljdGVkV29yZChjLnZhbHVlKSl7bz1jO3M9bi5NZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWV9ZWxzZSBpZih0aGlzLnNjYW5uZXIuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGMudmFsdWUpKXtvPWM7cz1uLk1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZH19fXZhciBoPXRoaXMucGFyc2VGb3JtYWxQYXJhbWV0ZXJzKG8pO3ZhciBwPWgucGFyYW1zO3ZhciBmPWguc3RyaWN0ZWQ7bz1oLmZpcnN0UmVzdHJpY3RlZDtpZihoLm1lc3NhZ2Upe3M9aC5tZXNzYWdlfXZhciBkPXRoaXMuY29udGV4dC5zdHJpY3Q7dmFyIG09dGhpcy5jb250ZXh0LmFsbG93U3RyaWN0RGlyZWN0aXZlO3RoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZT1oLnNpbXBsZTt2YXIgeT10aGlzLnBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpO2lmKHRoaXMuY29udGV4dC5zdHJpY3QmJm8pe3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obyxzKX1pZih0aGlzLmNvbnRleHQuc3RyaWN0JiZmKXt0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGYscyl9dGhpcy5jb250ZXh0LnN0cmljdD1kO3RoaXMuY29udGV4dC5hbGxvd1N0cmljdERpcmVjdGl2ZT1tO3RoaXMuY29udGV4dC5hd2FpdD1sO3RoaXMuY29udGV4dC5hbGxvd1lpZWxkPXU7cmV0dXJuIHQ/dGhpcy5maW5hbGl6ZShlLG5ldyBhLkFzeW5jRnVuY3Rpb25FeHByZXNzaW9uKGkscCx5KSk6dGhpcy5maW5hbGl6ZShlLG5ldyBhLkZ1bmN0aW9uRXhwcmVzc2lvbihpLHAseSxyKSl9O2UucHJvdG90eXBlLnBhcnNlRGlyZWN0aXZlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sb29rYWhlYWQ7dmFyIHQ9dGhpcy5jcmVhdGVOb2RlKCk7dmFyIHI9dGhpcy5wYXJzZUV4cHJlc3Npb24oKTt2YXIgcz1yLnR5cGU9PT1sLlN5bnRheC5MaXRlcmFsP3RoaXMuZ2V0VG9rZW5SYXcoZSkuc2xpY2UoMSwtMSk6bnVsbDt0aGlzLmNvbnN1bWVTZW1pY29sb24oKTtyZXR1cm4gdGhpcy5maW5hbGl6ZSh0LHM/bmV3IGEuRGlyZWN0aXZlKHIscyk6bmV3IGEuRXhwcmVzc2lvblN0YXRlbWVudChyKSl9O2UucHJvdG90eXBlLnBhcnNlRGlyZWN0aXZlUHJvbG9ndWVzPWZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt2YXIgdD1bXTt3aGlsZSh0cnVlKXt2YXIgcj10aGlzLmxvb2thaGVhZDtpZihyLnR5cGUhPT04KXticmVha312YXIgcz10aGlzLnBhcnNlRGlyZWN0aXZlKCk7dC5wdXNoKHMpO3ZhciBpPXMuZGlyZWN0aXZlO2lmKHR5cGVvZiBpIT09InN0cmluZyIpe2JyZWFrfWlmKGk9PT0idXNlIHN0cmljdCIpe3RoaXMuY29udGV4dC5zdHJpY3Q9dHJ1ZTtpZihlKXt0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKGUsbi5NZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpfWlmKCF0aGlzLmNvbnRleHQuYWxsb3dTdHJpY3REaXJlY3RpdmUpe3RoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4ocixuLk1lc3NhZ2VzLklsbGVnYWxMYW5ndWFnZU1vZGVEaXJlY3RpdmUpfX1lbHNle2lmKCFlJiZyLm9jdGFsKXtlPXJ9fX1yZXR1cm4gdH07ZS5wcm90b3R5cGUucXVhbGlmaWVkUHJvcGVydHlOYW1lPWZ1bmN0aW9uKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UgMzpjYXNlIDg6Y2FzZSAxOmNhc2UgNTpjYXNlIDY6Y2FzZSA0OnJldHVybiB0cnVlO2Nhc2UgNzpyZXR1cm4gZS52YWx1ZT09PSJbIn1yZXR1cm4gZmFsc2V9O2UucHJvdG90eXBlLnBhcnNlR2V0dGVyTWV0aG9kPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dmFyIHQ9ZmFsc2U7dmFyIHI9dGhpcy5jb250ZXh0LmFsbG93WWllbGQ7dGhpcy5jb250ZXh0LmFsbG93WWllbGQ9IXQ7dmFyIHM9dGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnMoKTtpZihzLnBhcmFtcy5sZW5ndGg+MCl7dGhpcy50b2xlcmF0ZUVycm9yKG4uTWVzc2FnZXMuQmFkR2V0dGVyQXJpdHkpfXZhciBpPXRoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZChzKTt0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD1yO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuRnVuY3Rpb25FeHByZXNzaW9uKG51bGwscy5wYXJhbXMsaSx0KSl9O2UucHJvdG90eXBlLnBhcnNlU2V0dGVyTWV0aG9kPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dmFyIHQ9ZmFsc2U7dmFyIHI9dGhpcy5jb250ZXh0LmFsbG93WWllbGQ7dGhpcy5jb250ZXh0LmFsbG93WWllbGQ9IXQ7dmFyIHM9dGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnMoKTtpZihzLnBhcmFtcy5sZW5ndGghPT0xKXt0aGlzLnRvbGVyYXRlRXJyb3Iobi5NZXNzYWdlcy5CYWRTZXR0ZXJBcml0eSl9ZWxzZSBpZihzLnBhcmFtc1swXWluc3RhbmNlb2YgYS5SZXN0RWxlbWVudCl7dGhpcy50b2xlcmF0ZUVycm9yKG4uTWVzc2FnZXMuQmFkU2V0dGVyUmVzdFBhcmFtZXRlcil9dmFyIGk9dGhpcy5wYXJzZVByb3BlcnR5TWV0aG9kKHMpO3RoaXMuY29udGV4dC5hbGxvd1lpZWxkPXI7cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgYS5GdW5jdGlvbkV4cHJlc3Npb24obnVsbCxzLnBhcmFtcyxpLHQpKX07ZS5wcm90b3R5cGUucGFyc2VHZW5lcmF0b3JNZXRob2Q9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt2YXIgdD10cnVlO3ZhciByPXRoaXMuY29udGV4dC5hbGxvd1lpZWxkO3RoaXMuY29udGV4dC5hbGxvd1lpZWxkPXRydWU7dmFyIHM9dGhpcy5wYXJzZUZvcm1hbFBhcmFtZXRlcnMoKTt0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD1mYWxzZTt2YXIgaT10aGlzLnBhcnNlUHJvcGVydHlNZXRob2Qocyk7dGhpcy5jb250ZXh0LmFsbG93WWllbGQ9cjtyZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBhLkZ1bmN0aW9uRXhwcmVzc2lvbihudWxsLHMucGFyYW1zLGksdCkpfTtlLnByb3RvdHlwZS5pc1N0YXJ0T2ZFeHByZXNzaW9uPWZ1bmN0aW9uKCl7dmFyIGU9dHJ1ZTt2YXIgdD10aGlzLmxvb2thaGVhZC52YWx1ZTtzd2l0Y2godGhpcy5sb29rYWhlYWQudHlwZSl7Y2FzZSA3OmU9dD09PSJbInx8dD09PSIoInx8dD09PSJ7Inx8dD09PSIrInx8dD09PSItInx8dD09PSIhInx8dD09PSJ+Inx8dD09PSIrKyJ8fHQ9PT0iLS0ifHx0PT09Ii8ifHx0PT09Ii89IjticmVhaztjYXNlIDQ6ZT10PT09ImNsYXNzInx8dD09PSJkZWxldGUifHx0PT09ImZ1bmN0aW9uInx8dD09PSJsZXQifHx0PT09Im5ldyJ8fHQ9PT0ic3VwZXIifHx0PT09InRoaXMifHx0PT09InR5cGVvZiJ8fHQ9PT0idm9pZCJ8fHQ9PT0ieWllbGQiO2JyZWFrfXJldHVybiBlfTtlLnByb3RvdHlwZS5wYXJzZVlpZWxkRXhwcmVzc2lvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0S2V5d29yZCgieWllbGQiKTt2YXIgdD1udWxsO3ZhciByPWZhbHNlO2lmKCF0aGlzLmhhc0xpbmVUZXJtaW5hdG9yKXt2YXIgcz10aGlzLmNvbnRleHQuYWxsb3dZaWVsZDt0aGlzLmNvbnRleHQuYWxsb3dZaWVsZD1mYWxzZTtyPXRoaXMubWF0Y2goIioiKTtpZihyKXt0aGlzLm5leHRUb2tlbigpO3Q9dGhpcy5wYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCl9ZWxzZSBpZih0aGlzLmlzU3RhcnRPZkV4cHJlc3Npb24oKSl7dD10aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKX10aGlzLmNvbnRleHQuYWxsb3dZaWVsZD1zfXJldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuWWllbGRFeHByZXNzaW9uKHQscikpfTtlLnByb3RvdHlwZS5wYXJzZUNsYXNzRWxlbWVudD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmxvb2thaGVhZDt2YXIgcj10aGlzLmNyZWF0ZU5vZGUoKTt2YXIgcz0iIjt2YXIgaT1udWxsO3ZhciBvPW51bGw7dmFyIGw9ZmFsc2U7dmFyIHU9ZmFsc2U7dmFyIGM9ZmFsc2U7dmFyIGg9ZmFsc2U7aWYodGhpcy5tYXRjaCgiKiIpKXt0aGlzLm5leHRUb2tlbigpfWVsc2V7bD10aGlzLm1hdGNoKCJbIik7aT10aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTt2YXIgcD1pO2lmKHAubmFtZT09PSJzdGF0aWMiJiYodGhpcy5xdWFsaWZpZWRQcm9wZXJ0eU5hbWUodGhpcy5sb29rYWhlYWQpfHx0aGlzLm1hdGNoKCIqIikpKXt0PXRoaXMubG9va2FoZWFkO2M9dHJ1ZTtsPXRoaXMubWF0Y2goIlsiKTtpZih0aGlzLm1hdGNoKCIqIikpe3RoaXMubmV4dFRva2VuKCl9ZWxzZXtpPXRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpfX1pZih0LnR5cGU9PT0zJiYhdGhpcy5oYXNMaW5lVGVybWluYXRvciYmdC52YWx1ZT09PSJhc3luYyIpe3ZhciBmPXRoaXMubG9va2FoZWFkLnZhbHVlO2lmKGYhPT0iOiImJmYhPT0iKCImJmYhPT0iKiIpe2g9dHJ1ZTt0PXRoaXMubG9va2FoZWFkO2k9dGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7aWYodC50eXBlPT09MyYmdC52YWx1ZT09PSJjb25zdHJ1Y3RvciIpe3RoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4odCxuLk1lc3NhZ2VzLkNvbnN0cnVjdG9ySXNBc3luYyl9fX19dmFyIGQ9dGhpcy5xdWFsaWZpZWRQcm9wZXJ0eU5hbWUodGhpcy5sb29rYWhlYWQpO2lmKHQudHlwZT09PTMpe2lmKHQudmFsdWU9PT0iZ2V0IiYmZCl7cz0iZ2V0IjtsPXRoaXMubWF0Y2goIlsiKTtpPXRoaXMucGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO3RoaXMuY29udGV4dC5hbGxvd1lpZWxkPWZhbHNlO289dGhpcy5wYXJzZUdldHRlck1ldGhvZCgpfWVsc2UgaWYodC52YWx1ZT09PSJzZXQiJiZkKXtzPSJzZXQiO2w9dGhpcy5tYXRjaCgiWyIpO2k9dGhpcy5wYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7bz10aGlzLnBhcnNlU2V0dGVyTWV0aG9kKCl9fWVsc2UgaWYodC50eXBlPT09NyYmdC52YWx1ZT09PSIqIiYmZCl7cz0iaW5pdCI7bD10aGlzLm1hdGNoKCJbIik7aT10aGlzLnBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtvPXRoaXMucGFyc2VHZW5lcmF0b3JNZXRob2QoKTt1PXRydWV9aWYoIXMmJmkmJnRoaXMubWF0Y2goIigiKSl7cz0iaW5pdCI7bz1oP3RoaXMucGFyc2VQcm9wZXJ0eU1ldGhvZEFzeW5jRnVuY3Rpb24oKTp0aGlzLnBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbigpO3U9dHJ1ZX1pZighcyl7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCl9aWYocz09PSJpbml0Iil7cz0ibWV0aG9kIn1pZighbCl7aWYoYyYmdGhpcy5pc1Byb3BlcnR5S2V5KGksInByb3RvdHlwZSIpKXt0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHQsbi5NZXNzYWdlcy5TdGF0aWNQcm90b3R5cGUpfWlmKCFjJiZ0aGlzLmlzUHJvcGVydHlLZXkoaSwiY29uc3RydWN0b3IiKSl7aWYocyE9PSJtZXRob2QifHwhdXx8byYmby5nZW5lcmF0b3Ipe3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odCxuLk1lc3NhZ2VzLkNvbnN0cnVjdG9yU3BlY2lhbE1ldGhvZCl9aWYoZS52YWx1ZSl7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0LG4uTWVzc2FnZXMuRHVwbGljYXRlQ29uc3RydWN0b3IpfWVsc2V7ZS52YWx1ZT10cnVlfXM9ImNvbnN0cnVjdG9yIn19cmV0dXJuIHRoaXMuZmluYWxpemUocixuZXcgYS5NZXRob2REZWZpbml0aW9uKGksbCxvLHMsYykpfTtlLnByb3RvdHlwZS5wYXJzZUNsYXNzRWxlbWVudExpc3Q9ZnVuY3Rpb24oKXt2YXIgZT1bXTt2YXIgdD17dmFsdWU6ZmFsc2V9O3RoaXMuZXhwZWN0KCJ7Iik7d2hpbGUoIXRoaXMubWF0Y2goIn0iKSl7aWYodGhpcy5tYXRjaCgiOyIpKXt0aGlzLm5leHRUb2tlbigpfWVsc2V7ZS5wdXNoKHRoaXMucGFyc2VDbGFzc0VsZW1lbnQodCkpfX10aGlzLmV4cGVjdCgifSIpO3JldHVybiBlfTtlLnByb3RvdHlwZS5wYXJzZUNsYXNzQm9keT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3ZhciB0PXRoaXMucGFyc2VDbGFzc0VsZW1lbnRMaXN0KCk7cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgYS5DbGFzc0JvZHkodCkpfTtlLnByb3RvdHlwZS5wYXJzZUNsYXNzRGVjbGFyYXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jcmVhdGVOb2RlKCk7dmFyIHI9dGhpcy5jb250ZXh0LnN0cmljdDt0aGlzLmNvbnRleHQuc3RyaWN0PXRydWU7dGhpcy5leHBlY3RLZXl3b3JkKCJjbGFzcyIpO3ZhciBzPWUmJnRoaXMubG9va2FoZWFkLnR5cGUhPT0zP251bGw6dGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO3ZhciBpPW51bGw7aWYodGhpcy5tYXRjaEtleXdvcmQoImV4dGVuZHMiKSl7dGhpcy5uZXh0VG9rZW4oKTtpPXRoaXMuaXNvbGF0ZUNvdmVyR3JhbW1hcih0aGlzLnBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCl9dmFyIG49dGhpcy5wYXJzZUNsYXNzQm9keSgpO3RoaXMuY29udGV4dC5zdHJpY3Q9cjtyZXR1cm4gdGhpcy5maW5hbGl6ZSh0LG5ldyBhLkNsYXNzRGVjbGFyYXRpb24ocyxpLG4pKX07ZS5wcm90b3R5cGUucGFyc2VDbGFzc0V4cHJlc3Npb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt2YXIgdD10aGlzLmNvbnRleHQuc3RyaWN0O3RoaXMuY29udGV4dC5zdHJpY3Q9dHJ1ZTt0aGlzLmV4cGVjdEtleXdvcmQoImNsYXNzIik7dmFyIHI9dGhpcy5sb29rYWhlYWQudHlwZT09PTM/dGhpcy5wYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOm51bGw7dmFyIHM9bnVsbDtpZih0aGlzLm1hdGNoS2V5d29yZCgiZXh0ZW5kcyIpKXt0aGlzLm5leHRUb2tlbigpO3M9dGhpcy5pc29sYXRlQ292ZXJHcmFtbWFyKHRoaXMucGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKX12YXIgaT10aGlzLnBhcnNlQ2xhc3NCb2R5KCk7dGhpcy5jb250ZXh0LnN0cmljdD10O3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuQ2xhc3NFeHByZXNzaW9uKHIscyxpKSl9O2UucHJvdG90eXBlLnBhcnNlTW9kdWxlPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LnN0cmljdD10cnVlO3RoaXMuY29udGV4dC5pc01vZHVsZT10cnVlO3RoaXMuc2Nhbm5lci5pc01vZHVsZT10cnVlO3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3ZhciB0PXRoaXMucGFyc2VEaXJlY3RpdmVQcm9sb2d1ZXMoKTt3aGlsZSh0aGlzLmxvb2thaGVhZC50eXBlIT09Mil7dC5wdXNoKHRoaXMucGFyc2VTdGF0ZW1lbnRMaXN0SXRlbSgpKX1yZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBhLk1vZHVsZSh0KSl9O2UucHJvdG90eXBlLnBhcnNlU2NyaXB0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dmFyIHQ9dGhpcy5wYXJzZURpcmVjdGl2ZVByb2xvZ3VlcygpO3doaWxlKHRoaXMubG9va2FoZWFkLnR5cGUhPT0yKXt0LnB1c2godGhpcy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCkpfXJldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuU2NyaXB0KHQpKX07ZS5wcm90b3R5cGUucGFyc2VNb2R1bGVTcGVjaWZpZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTtpZih0aGlzLmxvb2thaGVhZC50eXBlIT09OCl7dGhpcy50aHJvd0Vycm9yKG4uTWVzc2FnZXMuSW52YWxpZE1vZHVsZVNwZWNpZmllcil9dmFyIHQ9dGhpcy5uZXh0VG9rZW4oKTt2YXIgcj10aGlzLmdldFRva2VuUmF3KHQpO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuTGl0ZXJhbCh0LnZhbHVlLHIpKX07ZS5wcm90b3R5cGUucGFyc2VJbXBvcnRTcGVjaWZpZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt2YXIgdDt2YXIgcjtpZih0aGlzLmxvb2thaGVhZC50eXBlPT09Myl7dD10aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7cj10O2lmKHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgiYXMiKSl7dGhpcy5uZXh0VG9rZW4oKTtyPXRoaXMucGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKX19ZWxzZXt0PXRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpO3I9dDtpZih0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoImFzIikpe3RoaXMubmV4dFRva2VuKCk7cj10aGlzLnBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCl9ZWxzZXt0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubmV4dFRva2VuKCkpfX1yZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBhLkltcG9ydFNwZWNpZmllcihyLHQpKX07ZS5wcm90b3R5cGUucGFyc2VOYW1lZEltcG9ydHM9ZnVuY3Rpb24oKXt0aGlzLmV4cGVjdCgieyIpO3ZhciBlPVtdO3doaWxlKCF0aGlzLm1hdGNoKCJ9Iikpe2UucHVzaCh0aGlzLnBhcnNlSW1wb3J0U3BlY2lmaWVyKCkpO2lmKCF0aGlzLm1hdGNoKCJ9Iikpe3RoaXMuZXhwZWN0KCIsIil9fXRoaXMuZXhwZWN0KCJ9Iik7cmV0dXJuIGV9O2UucHJvdG90eXBlLnBhcnNlSW1wb3J0RGVmYXVsdFNwZWNpZmllcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3ZhciB0PXRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSgpO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuSW1wb3J0RGVmYXVsdFNwZWNpZmllcih0KSl9O2UucHJvdG90eXBlLnBhcnNlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dGhpcy5leHBlY3QoIioiKTtpZighdGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCJhcyIpKXt0aGlzLnRocm93RXJyb3Iobi5NZXNzYWdlcy5Ob0FzQWZ0ZXJJbXBvcnROYW1lc3BhY2UpfXRoaXMubmV4dFRva2VuKCk7dmFyIHQ9dGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7cmV0dXJuIHRoaXMuZmluYWxpemUoZSxuZXcgYS5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIodCkpfTtlLnByb3RvdHlwZS5wYXJzZUltcG9ydERlY2xhcmF0aW9uPWZ1bmN0aW9uKCl7aWYodGhpcy5jb250ZXh0LmluRnVuY3Rpb25Cb2R5KXt0aGlzLnRocm93RXJyb3Iobi5NZXNzYWdlcy5JbGxlZ2FsSW1wb3J0RGVjbGFyYXRpb24pfXZhciBlPXRoaXMuY3JlYXRlTm9kZSgpO3RoaXMuZXhwZWN0S2V5d29yZCgiaW1wb3J0Iik7dmFyIHQ7dmFyIHI9W107aWYodGhpcy5sb29rYWhlYWQudHlwZT09PTgpe3Q9dGhpcy5wYXJzZU1vZHVsZVNwZWNpZmllcigpfWVsc2V7aWYodGhpcy5tYXRjaCgieyIpKXtyPXIuY29uY2F0KHRoaXMucGFyc2VOYW1lZEltcG9ydHMoKSl9ZWxzZSBpZih0aGlzLm1hdGNoKCIqIikpe3IucHVzaCh0aGlzLnBhcnNlSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKCkpfWVsc2UgaWYodGhpcy5pc0lkZW50aWZpZXJOYW1lKHRoaXMubG9va2FoZWFkKSYmIXRoaXMubWF0Y2hLZXl3b3JkKCJkZWZhdWx0Iikpe3IucHVzaCh0aGlzLnBhcnNlSW1wb3J0RGVmYXVsdFNwZWNpZmllcigpKTtpZih0aGlzLm1hdGNoKCIsIikpe3RoaXMubmV4dFRva2VuKCk7aWYodGhpcy5tYXRjaCgiKiIpKXtyLnB1c2godGhpcy5wYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcigpKX1lbHNlIGlmKHRoaXMubWF0Y2goInsiKSl7cj1yLmNvbmNhdCh0aGlzLnBhcnNlTmFtZWRJbXBvcnRzKCkpfWVsc2V7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbih0aGlzLmxvb2thaGVhZCl9fX1lbHNle3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4odGhpcy5uZXh0VG9rZW4oKSl9aWYoIXRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgiZnJvbSIpKXt2YXIgcz10aGlzLmxvb2thaGVhZC52YWx1ZT9uLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbjpuLk1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlO3RoaXMudGhyb3dFcnJvcihzLHRoaXMubG9va2FoZWFkLnZhbHVlKX10aGlzLm5leHRUb2tlbigpO3Q9dGhpcy5wYXJzZU1vZHVsZVNwZWNpZmllcigpfXRoaXMuY29uc3VtZVNlbWljb2xvbigpO3JldHVybiB0aGlzLmZpbmFsaXplKGUsbmV3IGEuSW1wb3J0RGVjbGFyYXRpb24ocix0KSl9O2UucHJvdG90eXBlLnBhcnNlRXhwb3J0U3BlY2lmaWVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jcmVhdGVOb2RlKCk7dmFyIHQ9dGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKCk7dmFyIHI9dDtpZih0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoImFzIikpe3RoaXMubmV4dFRva2VuKCk7cj10aGlzLnBhcnNlSWRlbnRpZmllck5hbWUoKX1yZXR1cm4gdGhpcy5maW5hbGl6ZShlLG5ldyBhLkV4cG9ydFNwZWNpZmllcih0LHIpKX07ZS5wcm90b3R5cGUucGFyc2VFeHBvcnREZWNsYXJhdGlvbj1mdW5jdGlvbigpe2lmKHRoaXMuY29udGV4dC5pbkZ1bmN0aW9uQm9keSl7dGhpcy50aHJvd0Vycm9yKG4uTWVzc2FnZXMuSWxsZWdhbEV4cG9ydERlY2xhcmF0aW9uKX12YXIgZT10aGlzLmNyZWF0ZU5vZGUoKTt0aGlzLmV4cGVjdEtleXdvcmQoImV4cG9ydCIpO3ZhciB0O2lmKHRoaXMubWF0Y2hLZXl3b3JkKCJkZWZhdWx0Iikpe3RoaXMubmV4dFRva2VuKCk7aWYodGhpcy5tYXRjaEtleXdvcmQoImZ1bmN0aW9uIikpe3ZhciByPXRoaXMucGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKHRydWUpO3Q9dGhpcy5maW5hbGl6ZShlLG5ldyBhLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihyKSl9ZWxzZSBpZih0aGlzLm1hdGNoS2V5d29yZCgiY2xhc3MiKSl7dmFyIHI9dGhpcy5wYXJzZUNsYXNzRGVjbGFyYXRpb24odHJ1ZSk7dD10aGlzLmZpbmFsaXplKGUsbmV3IGEuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKHIpKX1lbHNlIGlmKHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgiYXN5bmMiKSl7dmFyIHI9dGhpcy5tYXRjaEFzeW5jRnVuY3Rpb24oKT90aGlzLnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbih0cnVlKTp0aGlzLnBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTt0PXRoaXMuZmluYWxpemUoZSxuZXcgYS5FeHBvcnREZWZhdWx0RGVjbGFyYXRpb24ocikpfWVsc2V7aWYodGhpcy5tYXRjaENvbnRleHR1YWxLZXl3b3JkKCJmcm9tIikpe3RoaXMudGhyb3dFcnJvcihuLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbix0aGlzLmxvb2thaGVhZC52YWx1ZSl9dmFyIHI9dGhpcy5tYXRjaCgieyIpP3RoaXMucGFyc2VPYmplY3RJbml0aWFsaXplcigpOnRoaXMubWF0Y2goIlsiKT90aGlzLnBhcnNlQXJyYXlJbml0aWFsaXplcigpOnRoaXMucGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO3RoaXMuY29uc3VtZVNlbWljb2xvbigpO3Q9dGhpcy5maW5hbGl6ZShlLG5ldyBhLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihyKSl9fWVsc2UgaWYodGhpcy5tYXRjaCgiKiIpKXt0aGlzLm5leHRUb2tlbigpO2lmKCF0aGlzLm1hdGNoQ29udGV4dHVhbEtleXdvcmQoImZyb20iKSl7dmFyIHM9dGhpcy5sb29rYWhlYWQudmFsdWU/bi5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW46bi5NZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZTt0aGlzLnRocm93RXJyb3Iocyx0aGlzLmxvb2thaGVhZC52YWx1ZSl9dGhpcy5uZXh0VG9rZW4oKTt2YXIgaT10aGlzLnBhcnNlTW9kdWxlU3BlY2lmaWVyKCk7dGhpcy5jb25zdW1lU2VtaWNvbG9uKCk7dD10aGlzLmZpbmFsaXplKGUsbmV3IGEuRXhwb3J0QWxsRGVjbGFyYXRpb24oaSkpfWVsc2UgaWYodGhpcy5sb29rYWhlYWQudHlwZT09PTQpe3ZhciByPXZvaWQgMDtzd2l0Y2godGhpcy5sb29rYWhlYWQudmFsdWUpe2Nhc2UibGV0IjpjYXNlImNvbnN0IjpyPXRoaXMucGFyc2VMZXhpY2FsRGVjbGFyYXRpb24oe2luRm9yOmZhbHNlfSk7YnJlYWs7Y2FzZSJ2YXIiOmNhc2UiY2xhc3MiOmNhc2UiZnVuY3Rpb24iOnI9dGhpcy5wYXJzZVN0YXRlbWVudExpc3RJdGVtKCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKHRoaXMubG9va2FoZWFkKX10PXRoaXMuZmluYWxpemUoZSxuZXcgYS5FeHBvcnROYW1lZERlY2xhcmF0aW9uKHIsW10sbnVsbCkpfWVsc2UgaWYodGhpcy5tYXRjaEFzeW5jRnVuY3Rpb24oKSl7dmFyIHI9dGhpcy5wYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKTt0PXRoaXMuZmluYWxpemUoZSxuZXcgYS5FeHBvcnROYW1lZERlY2xhcmF0aW9uKHIsW10sbnVsbCkpfWVsc2V7dmFyIG89W107dmFyIGw9bnVsbDt2YXIgdT1mYWxzZTt0aGlzLmV4cGVjdCgieyIpO3doaWxlKCF0aGlzLm1hdGNoKCJ9Iikpe3U9dXx8dGhpcy5tYXRjaEtleXdvcmQoImRlZmF1bHQiKTtvLnB1c2godGhpcy5wYXJzZUV4cG9ydFNwZWNpZmllcigpKTtpZighdGhpcy5tYXRjaCgifSIpKXt0aGlzLmV4cGVjdCgiLCIpfX10aGlzLmV4cGVjdCgifSIpO2lmKHRoaXMubWF0Y2hDb250ZXh0dWFsS2V5d29yZCgiZnJvbSIpKXt0aGlzLm5leHRUb2tlbigpO2w9dGhpcy5wYXJzZU1vZHVsZVNwZWNpZmllcigpO3RoaXMuY29uc3VtZVNlbWljb2xvbigpfWVsc2UgaWYodSl7dmFyIHM9dGhpcy5sb29rYWhlYWQudmFsdWU/bi5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW46bi5NZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZTt0aGlzLnRocm93RXJyb3Iocyx0aGlzLmxvb2thaGVhZC52YWx1ZSl9ZWxzZXt0aGlzLmNvbnN1bWVTZW1pY29sb24oKX10PXRoaXMuZmluYWxpemUoZSxuZXcgYS5FeHBvcnROYW1lZERlY2xhcmF0aW9uKG51bGwsbyxsKSl9cmV0dXJuIHR9O3JldHVybiBlfSgpO3QuUGFyc2VyPWh9LGZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTp0cnVlfSk7ZnVuY3Rpb24gcihlLHQpe2lmKCFlKXt0aHJvdyBuZXcgRXJyb3IoIkFTU0VSVDogIit0KX19dC5hc3NlcnQ9cn0sZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmVycm9ycz1bXTt0aGlzLnRvbGVyYW50PWZhbHNlfWUucHJvdG90eXBlLnJlY29yZEVycm9yPWZ1bmN0aW9uKGUpe3RoaXMuZXJyb3JzLnB1c2goZSl9O2UucHJvdG90eXBlLnRvbGVyYXRlPWZ1bmN0aW9uKGUpe2lmKHRoaXMudG9sZXJhbnQpe3RoaXMucmVjb3JkRXJyb3IoZSl9ZWxzZXt0aHJvdyBlfX07ZS5wcm90b3R5cGUuY29uc3RydWN0RXJyb3I9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgRXJyb3IoZSk7dHJ5e3Rocm93IHJ9Y2F0Y2goZSl7aWYoT2JqZWN0LmNyZWF0ZSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KXtyPU9iamVjdC5jcmVhdGUoZSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsImNvbHVtbiIse3ZhbHVlOnR9KX19cmV0dXJuIHJ9O2UucHJvdG90eXBlLmNyZWF0ZUVycm9yPWZ1bmN0aW9uKGUsdCxyLHMpe3ZhciBpPSJMaW5lICIrdCsiOiAiK3M7dmFyIG49dGhpcy5jb25zdHJ1Y3RFcnJvcihpLHIpO24uaW5kZXg9ZTtuLmxpbmVOdW1iZXI9dDtuLmRlc2NyaXB0aW9uPXM7cmV0dXJuIG59O2UucHJvdG90eXBlLnRocm93RXJyb3I9ZnVuY3Rpb24oZSx0LHIscyl7dGhyb3cgdGhpcy5jcmVhdGVFcnJvcihlLHQscixzKX07ZS5wcm90b3R5cGUudG9sZXJhdGVFcnJvcj1mdW5jdGlvbihlLHQscixzKXt2YXIgaT10aGlzLmNyZWF0ZUVycm9yKGUsdCxyLHMpO2lmKHRoaXMudG9sZXJhbnQpe3RoaXMucmVjb3JkRXJyb3IoaSl9ZWxzZXt0aHJvdyBpfX07cmV0dXJuIGV9KCk7dC5FcnJvckhhbmRsZXI9cn0sZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTt0Lk1lc3NhZ2VzPXtCYWRHZXR0ZXJBcml0eToiR2V0dGVyIG11c3Qgbm90IGhhdmUgYW55IGZvcm1hbCBwYXJhbWV0ZXJzIixCYWRTZXR0ZXJBcml0eToiU2V0dGVyIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBmb3JtYWwgcGFyYW1ldGVyIixCYWRTZXR0ZXJSZXN0UGFyYW1ldGVyOiJTZXR0ZXIgZnVuY3Rpb24gYXJndW1lbnQgbXVzdCBub3QgYmUgYSByZXN0IHBhcmFtZXRlciIsQ29uc3RydWN0b3JJc0FzeW5jOiJDbGFzcyBjb25zdHJ1Y3RvciBtYXkgbm90IGJlIGFuIGFzeW5jIG1ldGhvZCIsQ29uc3RydWN0b3JTcGVjaWFsTWV0aG9kOiJDbGFzcyBjb25zdHJ1Y3RvciBtYXkgbm90IGJlIGFuIGFjY2Vzc29yIixEZWNsYXJhdGlvbk1pc3NpbmdJbml0aWFsaXplcjoiTWlzc2luZyBpbml0aWFsaXplciBpbiAlMCBkZWNsYXJhdGlvbiIsRGVmYXVsdFJlc3RQYXJhbWV0ZXI6IlVuZXhwZWN0ZWQgdG9rZW4gPSIsRHVwbGljYXRlQmluZGluZzoiRHVwbGljYXRlIGJpbmRpbmcgJTAiLER1cGxpY2F0ZUNvbnN0cnVjdG9yOiJBIGNsYXNzIG1heSBvbmx5IGhhdmUgb25lIGNvbnN0cnVjdG9yIixEdXBsaWNhdGVQcm90b1Byb3BlcnR5OiJEdXBsaWNhdGUgX19wcm90b19fIGZpZWxkcyBhcmUgbm90IGFsbG93ZWQgaW4gb2JqZWN0IGxpdGVyYWxzIixGb3JJbk9mTG9vcEluaXRpYWxpemVyOiIlMCBsb29wIHZhcmlhYmxlIGRlY2xhcmF0aW9uIG1heSBub3QgaGF2ZSBhbiBpbml0aWFsaXplciIsR2VuZXJhdG9ySW5MZWdhY3lDb250ZXh0OiJHZW5lcmF0b3IgZGVjbGFyYXRpb25zIGFyZSBub3QgYWxsb3dlZCBpbiBsZWdhY3kgY29udGV4dHMiLElsbGVnYWxCcmVhazoiSWxsZWdhbCBicmVhayBzdGF0ZW1lbnQiLElsbGVnYWxDb250aW51ZToiSWxsZWdhbCBjb250aW51ZSBzdGF0ZW1lbnQiLElsbGVnYWxFeHBvcnREZWNsYXJhdGlvbjoiVW5leHBlY3RlZCB0b2tlbiIsSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uOiJVbmV4cGVjdGVkIHRva2VuIixJbGxlZ2FsTGFuZ3VhZ2VNb2RlRGlyZWN0aXZlOiJJbGxlZ2FsICd1c2Ugc3RyaWN0JyBkaXJlY3RpdmUgaW4gZnVuY3Rpb24gd2l0aCBub24tc2ltcGxlIHBhcmFtZXRlciBsaXN0IixJbGxlZ2FsUmV0dXJuOiJJbGxlZ2FsIHJldHVybiBzdGF0ZW1lbnQiLEludmFsaWRFc2NhcGVkUmVzZXJ2ZWRXb3JkOiJLZXl3b3JkIG11c3Qgbm90IGNvbnRhaW4gZXNjYXBlZCBjaGFyYWN0ZXJzIixJbnZhbGlkSGV4RXNjYXBlU2VxdWVuY2U6IkludmFsaWQgaGV4YWRlY2ltYWwgZXNjYXBlIHNlcXVlbmNlIixJbnZhbGlkTEhTSW5Bc3NpZ25tZW50OiJJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGFzc2lnbm1lbnQiLEludmFsaWRMSFNJbkZvckluOiJJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGZvci1pbiIsSW52YWxpZExIU0luRm9yTG9vcDoiSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3ItbG9vcCIsSW52YWxpZE1vZHVsZVNwZWNpZmllcjoiVW5leHBlY3RlZCB0b2tlbiIsSW52YWxpZFJlZ0V4cDoiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24iLExldEluTGV4aWNhbEJpbmRpbmc6ImxldCBpcyBkaXNhbGxvd2VkIGFzIGEgbGV4aWNhbGx5IGJvdW5kIG5hbWUiLE1pc3NpbmdGcm9tQ2xhdXNlOiJVbmV4cGVjdGVkIHRva2VuIixNdWx0aXBsZURlZmF1bHRzSW5Td2l0Y2g6Ik1vcmUgdGhhbiBvbmUgZGVmYXVsdCBjbGF1c2UgaW4gc3dpdGNoIHN0YXRlbWVudCIsTmV3bGluZUFmdGVyVGhyb3c6IklsbGVnYWwgbmV3bGluZSBhZnRlciB0aHJvdyIsTm9Bc0FmdGVySW1wb3J0TmFtZXNwYWNlOiJVbmV4cGVjdGVkIHRva2VuIixOb0NhdGNoT3JGaW5hbGx5OiJNaXNzaW5nIGNhdGNoIG9yIGZpbmFsbHkgYWZ0ZXIgdHJ5IixQYXJhbWV0ZXJBZnRlclJlc3RQYXJhbWV0ZXI6IlJlc3QgcGFyYW1ldGVyIG11c3QgYmUgbGFzdCBmb3JtYWwgcGFyYW1ldGVyIixSZWRlY2xhcmF0aW9uOiIlMCAnJTEnIGhhcyBhbHJlYWR5IGJlZW4gZGVjbGFyZWQiLFN0YXRpY1Byb3RvdHlwZToiQ2xhc3NlcyBtYXkgbm90IGhhdmUgc3RhdGljIHByb3BlcnR5IG5hbWVkIHByb3RvdHlwZSIsU3RyaWN0Q2F0Y2hWYXJpYWJsZToiQ2F0Y2ggdmFyaWFibGUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZSIsU3RyaWN0RGVsZXRlOiJEZWxldGUgb2YgYW4gdW5xdWFsaWZpZWQgaWRlbnRpZmllciBpbiBzdHJpY3QgbW9kZS4iLFN0cmljdEZ1bmN0aW9uOiJJbiBzdHJpY3QgbW9kZSBjb2RlLCBmdW5jdGlvbnMgY2FuIG9ubHkgYmUgZGVjbGFyZWQgYXQgdG9wIGxldmVsIG9yIGluc2lkZSBhIGJsb2NrIixTdHJpY3RGdW5jdGlvbk5hbWU6IkZ1bmN0aW9uIG5hbWUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZSIsU3RyaWN0TEhTQXNzaWdubWVudDoiQXNzaWdubWVudCB0byBldmFsIG9yIGFyZ3VtZW50cyBpcyBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZSIsU3RyaWN0TEhTUG9zdGZpeDoiUG9zdGZpeCBpbmNyZW1lbnQvZGVjcmVtZW50IG1heSBub3QgaGF2ZSBldmFsIG9yIGFyZ3VtZW50cyBvcGVyYW5kIGluIHN0cmljdCBtb2RlIixTdHJpY3RMSFNQcmVmaXg6IlByZWZpeCBpbmNyZW1lbnQvZGVjcmVtZW50IG1heSBub3QgaGF2ZSBldmFsIG9yIGFyZ3VtZW50cyBvcGVyYW5kIGluIHN0cmljdCBtb2RlIixTdHJpY3RNb2RlV2l0aDoiU3RyaWN0IG1vZGUgY29kZSBtYXkgbm90IGluY2x1ZGUgYSB3aXRoIHN0YXRlbWVudCIsU3RyaWN0T2N0YWxMaXRlcmFsOiJPY3RhbCBsaXRlcmFscyBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUuIixTdHJpY3RQYXJhbUR1cGU6IlN0cmljdCBtb2RlIGZ1bmN0aW9uIG1heSBub3QgaGF2ZSBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzIixTdHJpY3RQYXJhbU5hbWU6IlBhcmFtZXRlciBuYW1lIGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlIixTdHJpY3RSZXNlcnZlZFdvcmQ6IlVzZSBvZiBmdXR1cmUgcmVzZXJ2ZWQgd29yZCBpbiBzdHJpY3QgbW9kZSIsU3RyaWN0VmFyTmFtZToiVmFyaWFibGUgbmFtZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlIixUZW1wbGF0ZU9jdGFsTGl0ZXJhbDoiT2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHRlbXBsYXRlIHN0cmluZ3MuIixVbmV4cGVjdGVkRU9TOiJVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCIsVW5leHBlY3RlZElkZW50aWZpZXI6IlVuZXhwZWN0ZWQgaWRlbnRpZmllciIsVW5leHBlY3RlZE51bWJlcjoiVW5leHBlY3RlZCBudW1iZXIiLFVuZXhwZWN0ZWRSZXNlcnZlZDoiVW5leHBlY3RlZCByZXNlcnZlZCB3b3JkIixVbmV4cGVjdGVkU3RyaW5nOiJVbmV4cGVjdGVkIHN0cmluZyIsVW5leHBlY3RlZFRlbXBsYXRlOiJVbmV4cGVjdGVkIHF1YXNpICUwIixVbmV4cGVjdGVkVG9rZW46IlVuZXhwZWN0ZWQgdG9rZW4gJTAiLFVuZXhwZWN0ZWRUb2tlbklsbGVnYWw6IlVuZXhwZWN0ZWQgdG9rZW4gSUxMRUdBTCIsVW5rbm93bkxhYmVsOiJVbmRlZmluZWQgbGFiZWwgJyUwJyIsVW50ZXJtaW5hdGVkUmVnRXhwOiJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogbWlzc2luZyAvIn19LGZ1bmN0aW9uKGUsdCxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTt2YXIgcz1yKDkpO3ZhciBpPXIoNCk7dmFyIG49cigxMSk7ZnVuY3Rpb24gYShlKXtyZXR1cm4iMDEyMzQ1Njc4OWFiY2RlZiIuaW5kZXhPZihlLnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIjAxMjM0NTY3Ii5pbmRleE9mKGUpfXZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuc291cmNlPWU7dGhpcy5lcnJvckhhbmRsZXI9dDt0aGlzLnRyYWNrQ29tbWVudD1mYWxzZTt0aGlzLmlzTW9kdWxlPWZhbHNlO3RoaXMubGVuZ3RoPWUubGVuZ3RoO3RoaXMuaW5kZXg9MDt0aGlzLmxpbmVOdW1iZXI9ZS5sZW5ndGg+MD8xOjA7dGhpcy5saW5lU3RhcnQ9MDt0aGlzLmN1cmx5U3RhY2s9W119ZS5wcm90b3R5cGUuc2F2ZVN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJue2luZGV4OnRoaXMuaW5kZXgsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMubGluZVN0YXJ0fX07ZS5wcm90b3R5cGUucmVzdG9yZVN0YXRlPWZ1bmN0aW9uKGUpe3RoaXMuaW5kZXg9ZS5pbmRleDt0aGlzLmxpbmVOdW1iZXI9ZS5saW5lTnVtYmVyO3RoaXMubGluZVN0YXJ0PWUubGluZVN0YXJ0fTtlLnByb3RvdHlwZS5lb2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmRleD49dGhpcy5sZW5ndGh9O2UucHJvdG90eXBlLnRocm93VW5leHBlY3RlZFRva2VuPWZ1bmN0aW9uKGUpe2lmKGU9PT12b2lkIDApe2U9bi5NZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW5JbGxlZ2FsfXJldHVybiB0aGlzLmVycm9ySGFuZGxlci50aHJvd0Vycm9yKHRoaXMuaW5kZXgsdGhpcy5saW5lTnVtYmVyLHRoaXMuaW5kZXgtdGhpcy5saW5lU3RhcnQrMSxlKX07ZS5wcm90b3R5cGUudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW49ZnVuY3Rpb24oZSl7aWYoZT09PXZvaWQgMCl7ZT1uLk1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbklsbGVnYWx9dGhpcy5lcnJvckhhbmRsZXIudG9sZXJhdGVFcnJvcih0aGlzLmluZGV4LHRoaXMubGluZU51bWJlcix0aGlzLmluZGV4LXRoaXMubGluZVN0YXJ0KzEsZSl9O2UucHJvdG90eXBlLnNraXBTaW5nbGVMaW5lQ29tbWVudD1mdW5jdGlvbihlKXt2YXIgdD1bXTt2YXIgcixzO2lmKHRoaXMudHJhY2tDb21tZW50KXt0PVtdO3I9dGhpcy5pbmRleC1lO3M9e3N0YXJ0OntsaW5lOnRoaXMubGluZU51bWJlcixjb2x1bW46dGhpcy5pbmRleC10aGlzLmxpbmVTdGFydC1lfSxlbmQ6e319fXdoaWxlKCF0aGlzLmVvZigpKXt2YXIgbj10aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpOysrdGhpcy5pbmRleDtpZihpLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKG4pKXtpZih0aGlzLnRyYWNrQ29tbWVudCl7cy5lbmQ9e2xpbmU6dGhpcy5saW5lTnVtYmVyLGNvbHVtbjp0aGlzLmluZGV4LXRoaXMubGluZVN0YXJ0LTF9O3ZhciBhPXttdWx0aUxpbmU6ZmFsc2Usc2xpY2U6W3IrZSx0aGlzLmluZGV4LTFdLHJhbmdlOltyLHRoaXMuaW5kZXgtMV0sbG9jOnN9O3QucHVzaChhKX1pZihuPT09MTMmJnRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk9PT0xMCl7Kyt0aGlzLmluZGV4fSsrdGhpcy5saW5lTnVtYmVyO3RoaXMubGluZVN0YXJ0PXRoaXMuaW5kZXg7cmV0dXJuIHR9fWlmKHRoaXMudHJhY2tDb21tZW50KXtzLmVuZD17bGluZTp0aGlzLmxpbmVOdW1iZXIsY29sdW1uOnRoaXMuaW5kZXgtdGhpcy5saW5lU3RhcnR9O3ZhciBhPXttdWx0aUxpbmU6ZmFsc2Usc2xpY2U6W3IrZSx0aGlzLmluZGV4XSxyYW5nZTpbcix0aGlzLmluZGV4XSxsb2M6c307dC5wdXNoKGEpfXJldHVybiB0fTtlLnByb3RvdHlwZS5za2lwTXVsdGlMaW5lQ29tbWVudD1mdW5jdGlvbigpe3ZhciBlPVtdO3ZhciB0LHI7aWYodGhpcy50cmFja0NvbW1lbnQpe2U9W107dD10aGlzLmluZGV4LTI7cj17c3RhcnQ6e2xpbmU6dGhpcy5saW5lTnVtYmVyLGNvbHVtbjp0aGlzLmluZGV4LXRoaXMubGluZVN0YXJ0LTJ9LGVuZDp7fX19d2hpbGUoIXRoaXMuZW9mKCkpe3ZhciBzPXRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7aWYoaS5DaGFyYWN0ZXIuaXNMaW5lVGVybWluYXRvcihzKSl7aWYocz09PTEzJiZ0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgrMSk9PT0xMCl7Kyt0aGlzLmluZGV4fSsrdGhpcy5saW5lTnVtYmVyOysrdGhpcy5pbmRleDt0aGlzLmxpbmVTdGFydD10aGlzLmluZGV4fWVsc2UgaWYocz09PTQyKXtpZih0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgrMSk9PT00Nyl7dGhpcy5pbmRleCs9MjtpZih0aGlzLnRyYWNrQ29tbWVudCl7ci5lbmQ9e2xpbmU6dGhpcy5saW5lTnVtYmVyLGNvbHVtbjp0aGlzLmluZGV4LXRoaXMubGluZVN0YXJ0fTt2YXIgbj17bXVsdGlMaW5lOnRydWUsc2xpY2U6W3QrMix0aGlzLmluZGV4LTJdLHJhbmdlOlt0LHRoaXMuaW5kZXhdLGxvYzpyfTtlLnB1c2gobil9cmV0dXJuIGV9Kyt0aGlzLmluZGV4fWVsc2V7Kyt0aGlzLmluZGV4fX1pZih0aGlzLnRyYWNrQ29tbWVudCl7ci5lbmQ9e2xpbmU6dGhpcy5saW5lTnVtYmVyLGNvbHVtbjp0aGlzLmluZGV4LXRoaXMubGluZVN0YXJ0fTt2YXIgbj17bXVsdGlMaW5lOnRydWUsc2xpY2U6W3QrMix0aGlzLmluZGV4XSxyYW5nZTpbdCx0aGlzLmluZGV4XSxsb2M6cn07ZS5wdXNoKG4pfXRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oKTtyZXR1cm4gZX07ZS5wcm90b3R5cGUuc2NhbkNvbW1lbnRzPWZ1bmN0aW9uKCl7dmFyIGU7aWYodGhpcy50cmFja0NvbW1lbnQpe2U9W119dmFyIHQ9dGhpcy5pbmRleD09PTA7d2hpbGUoIXRoaXMuZW9mKCkpe3ZhciByPXRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7aWYoaS5DaGFyYWN0ZXIuaXNXaGl0ZVNwYWNlKHIpKXsrK3RoaXMuaW5kZXh9ZWxzZSBpZihpLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKHIpKXsrK3RoaXMuaW5kZXg7aWYocj09PTEzJiZ0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpPT09MTApeysrdGhpcy5pbmRleH0rK3RoaXMubGluZU51bWJlcjt0aGlzLmxpbmVTdGFydD10aGlzLmluZGV4O3Q9dHJ1ZX1lbHNlIGlmKHI9PT00Nyl7cj10aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgrMSk7aWYocj09PTQ3KXt0aGlzLmluZGV4Kz0yO3ZhciBzPXRoaXMuc2tpcFNpbmdsZUxpbmVDb21tZW50KDIpO2lmKHRoaXMudHJhY2tDb21tZW50KXtlPWUuY29uY2F0KHMpfXQ9dHJ1ZX1lbHNlIGlmKHI9PT00Mil7dGhpcy5pbmRleCs9Mjt2YXIgcz10aGlzLnNraXBNdWx0aUxpbmVDb21tZW50KCk7aWYodGhpcy50cmFja0NvbW1lbnQpe2U9ZS5jb25jYXQocyl9fWVsc2V7YnJlYWt9fWVsc2UgaWYodCYmcj09PTQ1KXtpZih0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgrMSk9PT00NSYmdGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KzIpPT09NjIpe3RoaXMuaW5kZXgrPTM7dmFyIHM9dGhpcy5za2lwU2luZ2xlTGluZUNvbW1lbnQoMyk7aWYodGhpcy50cmFja0NvbW1lbnQpe2U9ZS5jb25jYXQocyl9fWVsc2V7YnJlYWt9fWVsc2UgaWYocj09PTYwJiYhdGhpcy5pc01vZHVsZSl7aWYodGhpcy5zb3VyY2Uuc2xpY2UodGhpcy5pbmRleCsxLHRoaXMuaW5kZXgrNCk9PT0iIS0tIil7dGhpcy5pbmRleCs9NDt2YXIgcz10aGlzLnNraXBTaW5nbGVMaW5lQ29tbWVudCg0KTtpZih0aGlzLnRyYWNrQ29tbWVudCl7ZT1lLmNvbmNhdChzKX19ZWxzZXticmVha319ZWxzZXticmVha319cmV0dXJuIGV9O2UucHJvdG90eXBlLmlzRnV0dXJlUmVzZXJ2ZWRXb3JkPWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlImVudW0iOmNhc2UiZXhwb3J0IjpjYXNlImltcG9ydCI6Y2FzZSJzdXBlciI6cmV0dXJuIHRydWU7ZGVmYXVsdDpyZXR1cm4gZmFsc2V9fTtlLnByb3RvdHlwZS5pc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQ9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UiaW1wbGVtZW50cyI6Y2FzZSJpbnRlcmZhY2UiOmNhc2UicGFja2FnZSI6Y2FzZSJwcml2YXRlIjpjYXNlInByb3RlY3RlZCI6Y2FzZSJwdWJsaWMiOmNhc2Uic3RhdGljIjpjYXNlInlpZWxkIjpjYXNlImxldCI6cmV0dXJuIHRydWU7ZGVmYXVsdDpyZXR1cm4gZmFsc2V9fTtlLnByb3RvdHlwZS5pc1Jlc3RyaWN0ZWRXb3JkPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09ImV2YWwifHxlPT09ImFyZ3VtZW50cyJ9O2UucHJvdG90eXBlLmlzS2V5d29yZD1mdW5jdGlvbihlKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMjpyZXR1cm4gZT09PSJpZiJ8fGU9PT0iaW4ifHxlPT09ImRvIjtjYXNlIDM6cmV0dXJuIGU9PT0idmFyInx8ZT09PSJmb3IifHxlPT09Im5ldyJ8fGU9PT0idHJ5Inx8ZT09PSJsZXQiO2Nhc2UgNDpyZXR1cm4gZT09PSJ0aGlzInx8ZT09PSJlbHNlInx8ZT09PSJjYXNlInx8ZT09PSJ2b2lkInx8ZT09PSJ3aXRoInx8ZT09PSJlbnVtIjtjYXNlIDU6cmV0dXJuIGU9PT0id2hpbGUifHxlPT09ImJyZWFrInx8ZT09PSJjYXRjaCJ8fGU9PT0idGhyb3cifHxlPT09ImNvbnN0Inx8ZT09PSJ5aWVsZCJ8fGU9PT0iY2xhc3MifHxlPT09InN1cGVyIjtjYXNlIDY6cmV0dXJuIGU9PT0icmV0dXJuInx8ZT09PSJ0eXBlb2YifHxlPT09ImRlbGV0ZSJ8fGU9PT0ic3dpdGNoInx8ZT09PSJleHBvcnQifHxlPT09ImltcG9ydCI7Y2FzZSA3OnJldHVybiBlPT09ImRlZmF1bHQifHxlPT09ImZpbmFsbHkifHxlPT09ImV4dGVuZHMiO2Nhc2UgODpyZXR1cm4gZT09PSJmdW5jdGlvbiJ8fGU9PT0iY29udGludWUifHxlPT09ImRlYnVnZ2VyIjtjYXNlIDEwOnJldHVybiBlPT09Imluc3RhbmNlb2YiO2RlZmF1bHQ6cmV0dXJuIGZhbHNlfX07ZS5wcm90b3R5cGUuY29kZVBvaW50QXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zb3VyY2UuY2hhckNvZGVBdChlKTtpZih0Pj01NTI5NiYmdDw9NTYzMTkpe3ZhciByPXRoaXMuc291cmNlLmNoYXJDb2RlQXQoZSsxKTtpZihyPj01NjMyMCYmcjw9NTczNDMpe3ZhciBzPXQ7dD0ocy01NTI5NikqMTAyNCtyLTU2MzIwKzY1NTM2fX1yZXR1cm4gdH07ZS5wcm90b3R5cGUuc2NhbkhleEVzY2FwZT1mdW5jdGlvbihlKXt2YXIgdD1lPT09InUiPzQ6Mjt2YXIgcj0wO2Zvcih2YXIgcz0wO3M8dDsrK3Mpe2lmKCF0aGlzLmVvZigpJiZpLkNoYXJhY3Rlci5pc0hleERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKXtyPXIqMTYrYSh0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdKX1lbHNle3JldHVybiBudWxsfX1yZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShyKX07ZS5wcm90b3R5cGUuc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNvdXJjZVt0aGlzLmluZGV4XTt2YXIgdD0wO2lmKGU9PT0ifSIpe3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKX13aGlsZSghdGhpcy5lb2YoKSl7ZT10aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdO2lmKCFpLkNoYXJhY3Rlci5pc0hleERpZ2l0KGUuY2hhckNvZGVBdCgwKSkpe2JyZWFrfXQ9dCoxNithKGUpfWlmKHQ+MTExNDExMXx8ZSE9PSJ9Iil7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpfXJldHVybiBpLkNoYXJhY3Rlci5mcm9tQ29kZVBvaW50KHQpfTtlLnByb3RvdHlwZS5nZXRJZGVudGlmaWVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5pbmRleCsrO3doaWxlKCF0aGlzLmVvZigpKXt2YXIgdD10aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpO2lmKHQ9PT05Mil7dGhpcy5pbmRleD1lO3JldHVybiB0aGlzLmdldENvbXBsZXhJZGVudGlmaWVyKCl9ZWxzZSBpZih0Pj01NTI5NiYmdDw1NzM0Myl7dGhpcy5pbmRleD1lO3JldHVybiB0aGlzLmdldENvbXBsZXhJZGVudGlmaWVyKCl9aWYoaS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyUGFydCh0KSl7Kyt0aGlzLmluZGV4fWVsc2V7YnJlYWt9fXJldHVybiB0aGlzLnNvdXJjZS5zbGljZShlLHRoaXMuaW5kZXgpfTtlLnByb3RvdHlwZS5nZXRDb21wbGV4SWRlbnRpZmllcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29kZVBvaW50QXQodGhpcy5pbmRleCk7dmFyIHQ9aS5DaGFyYWN0ZXIuZnJvbUNvZGVQb2ludChlKTt0aGlzLmluZGV4Kz10Lmxlbmd0aDt2YXIgcjtpZihlPT09OTIpe2lmKHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkhPT0xMTcpe3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKX0rK3RoaXMuaW5kZXg7aWYodGhpcy5zb3VyY2VbdGhpcy5pbmRleF09PT0ieyIpeysrdGhpcy5pbmRleDtyPXRoaXMuc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUoKX1lbHNle3I9dGhpcy5zY2FuSGV4RXNjYXBlKCJ1Iik7aWYocj09PW51bGx8fHI9PT0iXFwifHwhaS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyU3RhcnQoci5jaGFyQ29kZUF0KDApKSl7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpfX10PXJ9d2hpbGUoIXRoaXMuZW9mKCkpe2U9dGhpcy5jb2RlUG9pbnRBdCh0aGlzLmluZGV4KTtpZighaS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyUGFydChlKSl7YnJlYWt9cj1pLkNoYXJhY3Rlci5mcm9tQ29kZVBvaW50KGUpO3QrPXI7dGhpcy5pbmRleCs9ci5sZW5ndGg7aWYoZT09PTkyKXt0PXQuc3Vic3RyKDAsdC5sZW5ndGgtMSk7aWYodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSE9PTExNyl7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpfSsrdGhpcy5pbmRleDtpZih0aGlzLnNvdXJjZVt0aGlzLmluZGV4XT09PSJ7Iil7Kyt0aGlzLmluZGV4O3I9dGhpcy5zY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpfWVsc2V7cj10aGlzLnNjYW5IZXhFc2NhcGUoInUiKTtpZihyPT09bnVsbHx8cj09PSJcXCJ8fCFpLkNoYXJhY3Rlci5pc0lkZW50aWZpZXJQYXJ0KHIuY2hhckNvZGVBdCgwKSkpe3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKX19dCs9cn19cmV0dXJuIHR9O2UucHJvdG90eXBlLm9jdGFsVG9EZWNpbWFsPWZ1bmN0aW9uKGUpe3ZhciB0PWUhPT0iMCI7dmFyIHI9byhlKTtpZighdGhpcy5lb2YoKSYmaS5DaGFyYWN0ZXIuaXNPY3RhbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKXt0PXRydWU7cj1yKjgrbyh0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdKTtpZigiMDEyMyIuaW5kZXhPZihlKT49MCYmIXRoaXMuZW9mKCkmJmkuQ2hhcmFjdGVyLmlzT2N0YWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSl7cj1yKjgrbyh0aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdKX19cmV0dXJue2NvZGU6cixvY3RhbDp0fX07ZS5wcm90b3R5cGUuc2NhbklkZW50aWZpZXI9ZnVuY3Rpb24oKXt2YXIgZTt2YXIgdD10aGlzLmluZGV4O3ZhciByPXRoaXMuc291cmNlLmNoYXJDb2RlQXQodCk9PT05Mj90aGlzLmdldENvbXBsZXhJZGVudGlmaWVyKCk6dGhpcy5nZXRJZGVudGlmaWVyKCk7aWYoci5sZW5ndGg9PT0xKXtlPTN9ZWxzZSBpZih0aGlzLmlzS2V5d29yZChyKSl7ZT00fWVsc2UgaWYocj09PSJudWxsIil7ZT01fWVsc2UgaWYocj09PSJ0cnVlInx8cj09PSJmYWxzZSIpe2U9MX1lbHNle2U9M31pZihlIT09MyYmdCtyLmxlbmd0aCE9PXRoaXMuaW5kZXgpe3ZhciBzPXRoaXMuaW5kZXg7dGhpcy5pbmRleD10O3RoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4obi5NZXNzYWdlcy5JbnZhbGlkRXNjYXBlZFJlc2VydmVkV29yZCk7dGhpcy5pbmRleD1zfXJldHVybnt0eXBlOmUsdmFsdWU6cixsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixsaW5lU3RhcnQ6dGhpcy5saW5lU3RhcnQsc3RhcnQ6dCxlbmQ6dGhpcy5pbmRleH19O2UucHJvdG90eXBlLnNjYW5QdW5jdHVhdG9yPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5pbmRleDt2YXIgdD10aGlzLnNvdXJjZVt0aGlzLmluZGV4XTtzd2l0Y2godCl7Y2FzZSIoIjpjYXNlInsiOmlmKHQ9PT0ieyIpe3RoaXMuY3VybHlTdGFjay5wdXNoKCJ7Iil9Kyt0aGlzLmluZGV4O2JyZWFrO2Nhc2UiLiI6Kyt0aGlzLmluZGV4O2lmKHRoaXMuc291cmNlW3RoaXMuaW5kZXhdPT09Ii4iJiZ0aGlzLnNvdXJjZVt0aGlzLmluZGV4KzFdPT09Ii4iKXt0aGlzLmluZGV4Kz0yO3Q9Ii4uLiJ9YnJlYWs7Y2FzZSJ9IjorK3RoaXMuaW5kZXg7dGhpcy5jdXJseVN0YWNrLnBvcCgpO2JyZWFrO2Nhc2UiKSI6Y2FzZSI7IjpjYXNlIiwiOmNhc2UiWyI6Y2FzZSJdIjpjYXNlIjoiOmNhc2UiPyI6Y2FzZSJ+IjorK3RoaXMuaW5kZXg7YnJlYWs7ZGVmYXVsdDp0PXRoaXMuc291cmNlLnN1YnN0cih0aGlzLmluZGV4LDQpO2lmKHQ9PT0iPj4+PSIpe3RoaXMuaW5kZXgrPTR9ZWxzZXt0PXQuc3Vic3RyKDAsMyk7aWYodD09PSI9PT0ifHx0PT09IiE9PSJ8fHQ9PT0iPj4+Inx8dD09PSI8PD0ifHx0PT09Ij4+PSJ8fHQ9PT0iKio9Iil7dGhpcy5pbmRleCs9M31lbHNle3Q9dC5zdWJzdHIoMCwyKTtpZih0PT09IiYmInx8dD09PSJ8fCJ8fHQ9PT0iPT0ifHx0PT09IiE9Inx8dD09PSIrPSJ8fHQ9PT0iLT0ifHx0PT09Iio9Inx8dD09PSIvPSJ8fHQ9PT0iKysifHx0PT09Ii0tInx8dD09PSI8PCJ8fHQ9PT0iPj4ifHx0PT09IiY9Inx8dD09PSJ8PSJ8fHQ9PT0iXj0ifHx0PT09IiU9Inx8dD09PSI8PSJ8fHQ9PT0iPj0ifHx0PT09Ij0+Inx8dD09PSIqKiIpe3RoaXMuaW5kZXgrPTJ9ZWxzZXt0PXRoaXMuc291cmNlW3RoaXMuaW5kZXhdO2lmKCI8Pj0hKy0qJSZ8Xi8iLmluZGV4T2YodCk+PTApeysrdGhpcy5pbmRleH19fX19aWYodGhpcy5pbmRleD09PWUpe3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKX1yZXR1cm57dHlwZTo3LHZhbHVlOnQsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMubGluZVN0YXJ0LHN0YXJ0OmUsZW5kOnRoaXMuaW5kZXh9fTtlLnByb3RvdHlwZS5zY2FuSGV4TGl0ZXJhbD1mdW5jdGlvbihlKXt2YXIgdD0iIjt3aGlsZSghdGhpcy5lb2YoKSl7aWYoIWkuQ2hhcmFjdGVyLmlzSGV4RGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpe2JyZWFrfXQrPXRoaXMuc291cmNlW3RoaXMuaW5kZXgrK119aWYodC5sZW5ndGg9PT0wKXt0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCl9aWYoaS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyU3RhcnQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpe3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4oKX1yZXR1cm57dHlwZTo2LHZhbHVlOnBhcnNlSW50KCIweCIrdCwxNiksbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMubGluZVN0YXJ0LHN0YXJ0OmUsZW5kOnRoaXMuaW5kZXh9fTtlLnByb3RvdHlwZS5zY2FuQmluYXJ5TGl0ZXJhbD1mdW5jdGlvbihlKXt2YXIgdD0iIjt2YXIgcjt3aGlsZSghdGhpcy5lb2YoKSl7cj10aGlzLnNvdXJjZVt0aGlzLmluZGV4XTtpZihyIT09IjAiJiZyIT09IjEiKXticmVha310Kz10aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdfWlmKHQubGVuZ3RoPT09MCl7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpfWlmKCF0aGlzLmVvZigpKXtyPXRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7aWYoaS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyU3RhcnQocil8fGkuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHIpKXt0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCl9fXJldHVybnt0eXBlOjYsdmFsdWU6cGFyc2VJbnQodCwyKSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixsaW5lU3RhcnQ6dGhpcy5saW5lU3RhcnQsc3RhcnQ6ZSxlbmQ6dGhpcy5pbmRleH19O2UucHJvdG90eXBlLnNjYW5PY3RhbExpdGVyYWw9ZnVuY3Rpb24oZSx0KXt2YXIgcj0iIjt2YXIgcz1mYWxzZTtpZihpLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQoZS5jaGFyQ29kZUF0KDApKSl7cz10cnVlO3I9IjAiK3RoaXMuc291cmNlW3RoaXMuaW5kZXgrK119ZWxzZXsrK3RoaXMuaW5kZXh9d2hpbGUoIXRoaXMuZW9mKCkpe2lmKCFpLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQodGhpcy5zb3VyY2UuY2hhckNvZGVBdCh0aGlzLmluZGV4KSkpe2JyZWFrfXIrPXRoaXMuc291cmNlW3RoaXMuaW5kZXgrK119aWYoIXMmJnIubGVuZ3RoPT09MCl7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpfWlmKGkuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpfHxpLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSl7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpfXJldHVybnt0eXBlOjYsdmFsdWU6cGFyc2VJbnQociw4KSxvY3RhbDpzLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGxpbmVTdGFydDp0aGlzLmxpbmVTdGFydCxzdGFydDp0LGVuZDp0aGlzLmluZGV4fX07ZS5wcm90b3R5cGUuaXNJbXBsaWNpdE9jdGFsTGl0ZXJhbD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmluZGV4KzE7ZTx0aGlzLmxlbmd0aDsrK2Upe3ZhciB0PXRoaXMuc291cmNlW2VdO2lmKHQ9PT0iOCJ8fHQ9PT0iOSIpe3JldHVybiBmYWxzZX1pZighaS5DaGFyYWN0ZXIuaXNPY3RhbERpZ2l0KHQuY2hhckNvZGVBdCgwKSkpe3JldHVybiB0cnVlfX1yZXR1cm4gdHJ1ZX07ZS5wcm90b3R5cGUuc2Nhbk51bWVyaWNMaXRlcmFsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5pbmRleDt2YXIgdD10aGlzLnNvdXJjZVtlXTtzLmFzc2VydChpLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0LmNoYXJDb2RlQXQoMCkpfHx0PT09Ii4iLCJOdW1lcmljIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgZGVjaW1hbCBkaWdpdCBvciBhIGRlY2ltYWwgcG9pbnQiKTt2YXIgcj0iIjtpZih0IT09Ii4iKXtyPXRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107dD10aGlzLnNvdXJjZVt0aGlzLmluZGV4XTtpZihyPT09IjAiKXtpZih0PT09IngifHx0PT09IlgiKXsrK3RoaXMuaW5kZXg7cmV0dXJuIHRoaXMuc2NhbkhleExpdGVyYWwoZSl9aWYodD09PSJiInx8dD09PSJCIil7Kyt0aGlzLmluZGV4O3JldHVybiB0aGlzLnNjYW5CaW5hcnlMaXRlcmFsKGUpfWlmKHQ9PT0ibyJ8fHQ9PT0iTyIpe3JldHVybiB0aGlzLnNjYW5PY3RhbExpdGVyYWwodCxlKX1pZih0JiZpLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQodC5jaGFyQ29kZUF0KDApKSl7aWYodGhpcy5pc0ltcGxpY2l0T2N0YWxMaXRlcmFsKCkpe3JldHVybiB0aGlzLnNjYW5PY3RhbExpdGVyYWwodCxlKX19fXdoaWxlKGkuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKXtyKz10aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdfXQ9dGhpcy5zb3VyY2VbdGhpcy5pbmRleF19aWYodD09PSIuIil7cis9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTt3aGlsZShpLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSl7cis9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXX10PXRoaXMuc291cmNlW3RoaXMuaW5kZXhdfWlmKHQ9PT0iZSJ8fHQ9PT0iRSIpe3IrPXRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107dD10aGlzLnNvdXJjZVt0aGlzLmluZGV4XTtpZih0PT09IisifHx0PT09Ii0iKXtyKz10aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdfWlmKGkuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKXt3aGlsZShpLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSl7cis9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXX19ZWxzZXt0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCl9fWlmKGkuQ2hhcmFjdGVyLmlzSWRlbnRpZmllclN0YXJ0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCkpKXt0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCl9cmV0dXJue3R5cGU6Nix2YWx1ZTpwYXJzZUZsb2F0KHIpLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGxpbmVTdGFydDp0aGlzLmxpbmVTdGFydCxzdGFydDplLGVuZDp0aGlzLmluZGV4fX07ZS5wcm90b3R5cGUuc2NhblN0cmluZ0xpdGVyYWw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmluZGV4O3ZhciB0PXRoaXMuc291cmNlW2VdO3MuYXNzZXJ0KHQ9PT0iJyJ8fHQ9PT0nIicsIlN0cmluZyBsaXRlcmFsIG11c3Qgc3RhcnRzIHdpdGggYSBxdW90ZSIpOysrdGhpcy5pbmRleDt2YXIgcj1mYWxzZTt2YXIgYT0iIjt3aGlsZSghdGhpcy5lb2YoKSl7dmFyIG89dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTtpZihvPT09dCl7dD0iIjticmVha31lbHNlIGlmKG89PT0iXFwiKXtvPXRoaXMuc291cmNlW3RoaXMuaW5kZXgrK107aWYoIW98fCFpLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKG8uY2hhckNvZGVBdCgwKSkpe3N3aXRjaChvKXtjYXNlInUiOmlmKHRoaXMuc291cmNlW3RoaXMuaW5kZXhdPT09InsiKXsrK3RoaXMuaW5kZXg7YSs9dGhpcy5zY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpfWVsc2V7dmFyIGw9dGhpcy5zY2FuSGV4RXNjYXBlKG8pO2lmKGw9PT1udWxsKXt0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCl9YSs9bH1icmVhaztjYXNlIngiOnZhciB1PXRoaXMuc2NhbkhleEVzY2FwZShvKTtpZih1PT09bnVsbCl7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihuLk1lc3NhZ2VzLkludmFsaWRIZXhFc2NhcGVTZXF1ZW5jZSl9YSs9dTticmVhaztjYXNlIm4iOmErPSJcbiI7YnJlYWs7Y2FzZSJyIjphKz0iXHIiO2JyZWFrO2Nhc2UidCI6YSs9Ilx0IjticmVhaztjYXNlImIiOmErPSJcYiI7YnJlYWs7Y2FzZSJmIjphKz0iXGYiO2JyZWFrO2Nhc2UidiI6YSs9Ilx2IjticmVhaztjYXNlIjgiOmNhc2UiOSI6YSs9bzt0aGlzLnRvbGVyYXRlVW5leHBlY3RlZFRva2VuKCk7YnJlYWs7ZGVmYXVsdDppZihvJiZpLkNoYXJhY3Rlci5pc09jdGFsRGlnaXQoby5jaGFyQ29kZUF0KDApKSl7dmFyIGM9dGhpcy5vY3RhbFRvRGVjaW1hbChvKTtyPWMub2N0YWx8fHI7YSs9U3RyaW5nLmZyb21DaGFyQ29kZShjLmNvZGUpfWVsc2V7YSs9b31icmVha319ZWxzZXsrK3RoaXMubGluZU51bWJlcjtpZihvPT09IlxyIiYmdGhpcy5zb3VyY2VbdGhpcy5pbmRleF09PT0iXG4iKXsrK3RoaXMuaW5kZXh9dGhpcy5saW5lU3RhcnQ9dGhpcy5pbmRleH19ZWxzZSBpZihpLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKG8uY2hhckNvZGVBdCgwKSkpe2JyZWFrfWVsc2V7YSs9b319aWYodCE9PSIiKXt0aGlzLmluZGV4PWU7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbigpfXJldHVybnt0eXBlOjgsdmFsdWU6YSxvY3RhbDpyLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGxpbmVTdGFydDp0aGlzLmxpbmVTdGFydCxzdGFydDplLGVuZDp0aGlzLmluZGV4fX07ZS5wcm90b3R5cGUuc2NhblRlbXBsYXRlPWZ1bmN0aW9uKCl7dmFyIGU9IiI7dmFyIHQ9ZmFsc2U7dmFyIHI9dGhpcy5pbmRleDt2YXIgcz10aGlzLnNvdXJjZVtyXT09PSJgIjt2YXIgYT1mYWxzZTt2YXIgbz0yOysrdGhpcy5pbmRleDt3aGlsZSghdGhpcy5lb2YoKSl7dmFyIGw9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTtpZihsPT09ImAiKXtvPTE7YT10cnVlO3Q9dHJ1ZTticmVha31lbHNlIGlmKGw9PT0iJCIpe2lmKHRoaXMuc291cmNlW3RoaXMuaW5kZXhdPT09InsiKXt0aGlzLmN1cmx5U3RhY2sucHVzaCgiJHsiKTsrK3RoaXMuaW5kZXg7dD10cnVlO2JyZWFrfWUrPWx9ZWxzZSBpZihsPT09IlxcIil7bD10aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdO2lmKCFpLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGwuY2hhckNvZGVBdCgwKSkpe3N3aXRjaChsKXtjYXNlIm4iOmUrPSJcbiI7YnJlYWs7Y2FzZSJyIjplKz0iXHIiO2JyZWFrO2Nhc2UidCI6ZSs9Ilx0IjticmVhaztjYXNlInUiOmlmKHRoaXMuc291cmNlW3RoaXMuaW5kZXhdPT09InsiKXsrK3RoaXMuaW5kZXg7ZSs9dGhpcy5zY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpfWVsc2V7dmFyIHU9dGhpcy5pbmRleDt2YXIgYz10aGlzLnNjYW5IZXhFc2NhcGUobCk7aWYoYyE9PW51bGwpe2UrPWN9ZWxzZXt0aGlzLmluZGV4PXU7ZSs9bH19YnJlYWs7Y2FzZSJ4Ijp2YXIgaD10aGlzLnNjYW5IZXhFc2NhcGUobCk7aWYoaD09PW51bGwpe3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obi5NZXNzYWdlcy5JbnZhbGlkSGV4RXNjYXBlU2VxdWVuY2UpfWUrPWg7YnJlYWs7Y2FzZSJiIjplKz0iXGIiO2JyZWFrO2Nhc2UiZiI6ZSs9IlxmIjticmVhaztjYXNlInYiOmUrPSJcdiI7YnJlYWs7ZGVmYXVsdDppZihsPT09IjAiKXtpZihpLkNoYXJhY3Rlci5pc0RlY2ltYWxEaWdpdCh0aGlzLnNvdXJjZS5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpKSl7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihuLk1lc3NhZ2VzLlRlbXBsYXRlT2N0YWxMaXRlcmFsKX1lKz0iXDAifWVsc2UgaWYoaS5DaGFyYWN0ZXIuaXNPY3RhbERpZ2l0KGwuY2hhckNvZGVBdCgwKSkpe3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obi5NZXNzYWdlcy5UZW1wbGF0ZU9jdGFsTGl0ZXJhbCl9ZWxzZXtlKz1sfWJyZWFrfX1lbHNleysrdGhpcy5saW5lTnVtYmVyO2lmKGw9PT0iXHIiJiZ0aGlzLnNvdXJjZVt0aGlzLmluZGV4XT09PSJcbiIpeysrdGhpcy5pbmRleH10aGlzLmxpbmVTdGFydD10aGlzLmluZGV4fX1lbHNlIGlmKGkuQ2hhcmFjdGVyLmlzTGluZVRlcm1pbmF0b3IobC5jaGFyQ29kZUF0KDApKSl7Kyt0aGlzLmxpbmVOdW1iZXI7aWYobD09PSJcciImJnRoaXMuc291cmNlW3RoaXMuaW5kZXhdPT09IlxuIil7Kyt0aGlzLmluZGV4fXRoaXMubGluZVN0YXJ0PXRoaXMuaW5kZXg7ZSs9IlxuIn1lbHNle2UrPWx9fWlmKCF0KXt0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKCl9aWYoIXMpe3RoaXMuY3VybHlTdGFjay5wb3AoKX1yZXR1cm57dHlwZToxMCx2YWx1ZTp0aGlzLnNvdXJjZS5zbGljZShyKzEsdGhpcy5pbmRleC1vKSxjb29rZWQ6ZSxoZWFkOnMsdGFpbDphLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGxpbmVTdGFydDp0aGlzLmxpbmVTdGFydCxzdGFydDpyLGVuZDp0aGlzLmluZGV4fX07ZS5wcm90b3R5cGUudGVzdFJlZ0V4cD1mdW5jdGlvbihlLHQpe3ZhciByPSLvv78iO3ZhciBzPWU7dmFyIGk9dGhpcztpZih0LmluZGV4T2YoInUiKT49MCl7cz1zLnJlcGxhY2UoL1xcdVx7KFswLTlhLWZBLUZdKylcfXxcXHUoW2EtZkEtRjAtOV17NH0pL2csKGZ1bmN0aW9uKGUsdCxzKXt2YXIgYT1wYXJzZUludCh0fHxzLDE2KTtpZihhPjExMTQxMTEpe2kudGhyb3dVbmV4cGVjdGVkVG9rZW4obi5NZXNzYWdlcy5JbnZhbGlkUmVnRXhwKX1pZihhPD02NTUzNSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoYSl9cmV0dXJuIHJ9KSkucmVwbGFjZSgvW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2cscil9dHJ5e1JlZ0V4cChzKX1jYXRjaChlKXt0aGlzLnRocm93VW5leHBlY3RlZFRva2VuKG4uTWVzc2FnZXMuSW52YWxpZFJlZ0V4cCl9dHJ5e3JldHVybiBuZXcgUmVnRXhwKGUsdCl9Y2F0Y2goZSl7cmV0dXJuIG51bGx9fTtlLnByb3RvdHlwZS5zY2FuUmVnRXhwQm9keT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc291cmNlW3RoaXMuaW5kZXhdO3MuYXNzZXJ0KGU9PT0iLyIsIlJlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIHNsYXNoIik7dmFyIHQ9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTt2YXIgcj1mYWxzZTt2YXIgYT1mYWxzZTt3aGlsZSghdGhpcy5lb2YoKSl7ZT10aGlzLnNvdXJjZVt0aGlzLmluZGV4KytdO3QrPWU7aWYoZT09PSJcXCIpe2U9dGhpcy5zb3VyY2VbdGhpcy5pbmRleCsrXTtpZihpLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGUuY2hhckNvZGVBdCgwKSkpe3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obi5NZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApfXQrPWV9ZWxzZSBpZihpLkNoYXJhY3Rlci5pc0xpbmVUZXJtaW5hdG9yKGUuY2hhckNvZGVBdCgwKSkpe3RoaXMudGhyb3dVbmV4cGVjdGVkVG9rZW4obi5NZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApfWVsc2UgaWYocil7aWYoZT09PSJdIil7cj1mYWxzZX19ZWxzZXtpZihlPT09Ii8iKXthPXRydWU7YnJlYWt9ZWxzZSBpZihlPT09IlsiKXtyPXRydWV9fX1pZighYSl7dGhpcy50aHJvd1VuZXhwZWN0ZWRUb2tlbihuLk1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCl9cmV0dXJuIHQuc3Vic3RyKDEsdC5sZW5ndGgtMil9O2UucHJvdG90eXBlLnNjYW5SZWdFeHBGbGFncz1mdW5jdGlvbigpe3ZhciBlPSIiO3ZhciB0PSIiO3doaWxlKCF0aGlzLmVvZigpKXt2YXIgcj10aGlzLnNvdXJjZVt0aGlzLmluZGV4XTtpZighaS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyUGFydChyLmNoYXJDb2RlQXQoMCkpKXticmVha30rK3RoaXMuaW5kZXg7aWYocj09PSJcXCImJiF0aGlzLmVvZigpKXtyPXRoaXMuc291cmNlW3RoaXMuaW5kZXhdO2lmKHI9PT0idSIpeysrdGhpcy5pbmRleDt2YXIgcz10aGlzLmluZGV4O3ZhciBuPXRoaXMuc2NhbkhleEVzY2FwZSgidSIpO2lmKG4hPT1udWxsKXt0Kz1uO2ZvcihlKz0iXFx1IjtzPHRoaXMuaW5kZXg7KytzKXtlKz10aGlzLnNvdXJjZVtzXX19ZWxzZXt0aGlzLmluZGV4PXM7dCs9InUiO2UrPSJcXHUifXRoaXMudG9sZXJhdGVVbmV4cGVjdGVkVG9rZW4oKX1lbHNle2UrPSJcXCI7dGhpcy50b2xlcmF0ZVVuZXhwZWN0ZWRUb2tlbigpfX1lbHNle3QrPXI7ZSs9cn19cmV0dXJuIHR9O2UucHJvdG90eXBlLnNjYW5SZWdFeHA9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmluZGV4O3ZhciB0PXRoaXMuc2NhblJlZ0V4cEJvZHkoKTt2YXIgcj10aGlzLnNjYW5SZWdFeHBGbGFncygpO3ZhciBzPXRoaXMudGVzdFJlZ0V4cCh0LHIpO3JldHVybnt0eXBlOjksdmFsdWU6IiIscGF0dGVybjp0LGZsYWdzOnIscmVnZXg6cyxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixsaW5lU3RhcnQ6dGhpcy5saW5lU3RhcnQsc3RhcnQ6ZSxlbmQ6dGhpcy5pbmRleH19O2UucHJvdG90eXBlLmxleD1mdW5jdGlvbigpe2lmKHRoaXMuZW9mKCkpe3JldHVybnt0eXBlOjIsdmFsdWU6IiIsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsbGluZVN0YXJ0OnRoaXMubGluZVN0YXJ0LHN0YXJ0OnRoaXMuaW5kZXgsZW5kOnRoaXMuaW5kZXh9fXZhciBlPXRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCk7aWYoaS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyU3RhcnQoZSkpe3JldHVybiB0aGlzLnNjYW5JZGVudGlmaWVyKCl9aWYoZT09PTQwfHxlPT09NDF8fGU9PT01OSl7cmV0dXJuIHRoaXMuc2NhblB1bmN0dWF0b3IoKX1pZihlPT09Mzl8fGU9PT0zNCl7cmV0dXJuIHRoaXMuc2NhblN0cmluZ0xpdGVyYWwoKX1pZihlPT09NDYpe2lmKGkuQ2hhcmFjdGVyLmlzRGVjaW1hbERpZ2l0KHRoaXMuc291cmNlLmNoYXJDb2RlQXQodGhpcy5pbmRleCsxKSkpe3JldHVybiB0aGlzLnNjYW5OdW1lcmljTGl0ZXJhbCgpfXJldHVybiB0aGlzLnNjYW5QdW5jdHVhdG9yKCl9aWYoaS5DaGFyYWN0ZXIuaXNEZWNpbWFsRGlnaXQoZSkpe3JldHVybiB0aGlzLnNjYW5OdW1lcmljTGl0ZXJhbCgpfWlmKGU9PT05Nnx8ZT09PTEyNSYmdGhpcy5jdXJseVN0YWNrW3RoaXMuY3VybHlTdGFjay5sZW5ndGgtMV09PT0iJHsiKXtyZXR1cm4gdGhpcy5zY2FuVGVtcGxhdGUoKX1pZihlPj01NTI5NiYmZTw1NzM0Myl7aWYoaS5DaGFyYWN0ZXIuaXNJZGVudGlmaWVyU3RhcnQodGhpcy5jb2RlUG9pbnRBdCh0aGlzLmluZGV4KSkpe3JldHVybiB0aGlzLnNjYW5JZGVudGlmaWVyKCl9fXJldHVybiB0aGlzLnNjYW5QdW5jdHVhdG9yKCl9O3JldHVybiBlfSgpO3QuU2Nhbm5lcj1sfSxmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6dHJ1ZX0pO3QuVG9rZW5OYW1lPXt9O3QuVG9rZW5OYW1lWzFdPSJCb29sZWFuIjt0LlRva2VuTmFtZVsyXT0iPGVuZD4iO3QuVG9rZW5OYW1lWzNdPSJJZGVudGlmaWVyIjt0LlRva2VuTmFtZVs0XT0iS2V5d29yZCI7dC5Ub2tlbk5hbWVbNV09Ik51bGwiO3QuVG9rZW5OYW1lWzZdPSJOdW1lcmljIjt0LlRva2VuTmFtZVs3XT0iUHVuY3R1YXRvciI7dC5Ub2tlbk5hbWVbOF09IlN0cmluZyI7dC5Ub2tlbk5hbWVbOV09IlJlZ3VsYXJFeHByZXNzaW9uIjt0LlRva2VuTmFtZVsxMF09IlRlbXBsYXRlIn0sZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTt0LlhIVE1MRW50aXRpZXM9e3F1b3Q6JyInLGFtcDoiJiIsYXBvczoiJyIsZ3Q6Ij4iLG5ic3A6IsKgIixpZXhjbDoiwqEiLGNlbnQ6IsKiIixwb3VuZDoiwqMiLGN1cnJlbjoiwqQiLHllbjoiwqUiLGJydmJhcjoiwqYiLHNlY3Q6IsKnIix1bWw6IsKoIixjb3B5OiLCqSIsb3JkZjoiwqoiLGxhcXVvOiLCqyIsbm90OiLCrCIsc2h5OiLCrSIscmVnOiLCriIsbWFjcjoiwq8iLGRlZzoiwrAiLHBsdXNtbjoiwrEiLHN1cDI6IsKyIixzdXAzOiLCsyIsYWN1dGU6IsK0IixtaWNybzoiwrUiLHBhcmE6IsK2IixtaWRkb3Q6IsK3IixjZWRpbDoiwrgiLHN1cDE6IsK5IixvcmRtOiLCuiIscmFxdW86IsK7IixmcmFjMTQ6IsK8IixmcmFjMTI6IsK9IixmcmFjMzQ6IsK+IixpcXVlc3Q6IsK/IixBZ3JhdmU6IsOAIixBYWN1dGU6IsOBIixBY2lyYzoiw4IiLEF0aWxkZToiw4MiLEF1bWw6IsOEIixBcmluZzoiw4UiLEFFbGlnOiLDhiIsQ2NlZGlsOiLDhyIsRWdyYXZlOiLDiCIsRWFjdXRlOiLDiSIsRWNpcmM6IsOKIixFdW1sOiLDiyIsSWdyYXZlOiLDjCIsSWFjdXRlOiLDjSIsSWNpcmM6IsOOIixJdW1sOiLDjyIsRVRIOiLDkCIsTnRpbGRlOiLDkSIsT2dyYXZlOiLDkiIsT2FjdXRlOiLDkyIsT2NpcmM6IsOUIixPdGlsZGU6IsOVIixPdW1sOiLDliIsdGltZXM6IsOXIixPc2xhc2g6IsOYIixVZ3JhdmU6IsOZIixVYWN1dGU6IsOaIixVY2lyYzoiw5siLFV1bWw6IsOcIixZYWN1dGU6IsOdIixUSE9STjoiw54iLHN6bGlnOiLDnyIsYWdyYXZlOiLDoCIsYWFjdXRlOiLDoSIsYWNpcmM6IsOiIixhdGlsZGU6IsOjIixhdW1sOiLDpCIsYXJpbmc6IsOlIixhZWxpZzoiw6YiLGNjZWRpbDoiw6ciLGVncmF2ZToiw6giLGVhY3V0ZToiw6kiLGVjaXJjOiLDqiIsZXVtbDoiw6siLGlncmF2ZToiw6wiLGlhY3V0ZToiw60iLGljaXJjOiLDriIsaXVtbDoiw68iLGV0aDoiw7AiLG50aWxkZToiw7EiLG9ncmF2ZToiw7IiLG9hY3V0ZToiw7MiLG9jaXJjOiLDtCIsb3RpbGRlOiLDtSIsb3VtbDoiw7YiLGRpdmlkZToiw7ciLG9zbGFzaDoiw7giLHVncmF2ZToiw7kiLHVhY3V0ZToiw7oiLHVjaXJjOiLDuyIsdXVtbDoiw7wiLHlhY3V0ZToiw70iLHRob3JuOiLDviIseXVtbDoiw78iLE9FbGlnOiLFkiIsb2VsaWc6IsWTIixTY2Fyb246IsWgIixzY2Fyb246IsWhIixZdW1sOiLFuCIsZm5vZjoixpIiLGNpcmM6IsuGIix0aWxkZToiy5wiLEFscGhhOiLOkSIsQmV0YToizpIiLEdhbW1hOiLOkyIsRGVsdGE6Is6UIixFcHNpbG9uOiLOlSIsWmV0YToizpYiLEV0YToizpciLFRoZXRhOiLOmCIsSW90YToizpkiLEthcHBhOiLOmiIsTGFtYmRhOiLOmyIsTXU6Is6cIixOdToizp0iLFhpOiLOniIsT21pY3Jvbjoizp8iLFBpOiLOoCIsUmhvOiLOoSIsU2lnbWE6Is6jIixUYXU6Is6kIixVcHNpbG9uOiLOpSIsUGhpOiLOpiIsQ2hpOiLOpyIsUHNpOiLOqCIsT21lZ2E6Is6pIixhbHBoYToizrEiLGJldGE6Is6yIixnYW1tYToizrMiLGRlbHRhOiLOtCIsZXBzaWxvbjoizrUiLHpldGE6Is62IixldGE6Is63Iix0aGV0YToizrgiLGlvdGE6Is65IixrYXBwYToizroiLGxhbWJkYToizrsiLG11OiLOvCIsbnU6Is69Iix4aToizr4iLG9taWNyb246Is6/IixwaToiz4AiLHJobzoiz4EiLHNpZ21hZjoiz4IiLHNpZ21hOiLPgyIsdGF1OiLPhCIsdXBzaWxvbjoiz4UiLHBoaToiz4YiLGNoaToiz4ciLHBzaToiz4giLG9tZWdhOiLPiSIsdGhldGFzeW06Is+RIix1cHNpaDoiz5IiLHBpdjoiz5YiLGVuc3A6IuKAgiIsZW1zcDoi4oCDIix0aGluc3A6IuKAiSIsenduajoi4oCMIix6d2o6IuKAjSIsbHJtOiLigI4iLHJsbToi4oCPIixuZGFzaDoi4oCTIixtZGFzaDoi4oCUIixsc3F1bzoi4oCYIixyc3F1bzoi4oCZIixzYnF1bzoi4oCaIixsZHF1bzoi4oCcIixyZHF1bzoi4oCdIixiZHF1bzoi4oCeIixkYWdnZXI6IuKAoCIsRGFnZ2VyOiLigKEiLGJ1bGw6IuKAoiIsaGVsbGlwOiLigKYiLHBlcm1pbDoi4oCwIixwcmltZToi4oCyIixQcmltZToi4oCzIixsc2FxdW86IuKAuSIscnNhcXVvOiLigLoiLG9saW5lOiLigL4iLGZyYXNsOiLigYQiLGV1cm86IuKCrCIsaW1hZ2U6IuKEkSIsd2VpZXJwOiLihJgiLHJlYWw6IuKEnCIsdHJhZGU6IuKEoiIsYWxlZnN5bToi4oS1IixsYXJyOiLihpAiLHVhcnI6IuKGkSIscmFycjoi4oaSIixkYXJyOiLihpMiLGhhcnI6IuKGlCIsY3JhcnI6IuKGtSIsbEFycjoi4oeQIix1QXJyOiLih5EiLHJBcnI6IuKHkiIsZEFycjoi4oeTIixoQXJyOiLih5QiLGZvcmFsbDoi4oiAIixwYXJ0OiLiiIIiLGV4aXN0OiLiiIMiLGVtcHR5OiLiiIUiLG5hYmxhOiLiiIciLGlzaW46IuKIiCIsbm90aW46IuKIiSIsbmk6IuKIiyIscHJvZDoi4oiPIixzdW06IuKIkSIsbWludXM6IuKIkiIsbG93YXN0OiLiiJciLHJhZGljOiLiiJoiLHByb3A6IuKInSIsaW5maW46IuKIniIsYW5nOiLiiKAiLGFuZDoi4oinIixvcjoi4oioIixjYXA6IuKIqSIsY3VwOiLiiKoiLGludDoi4oirIix0aGVyZTQ6IuKItCIsc2ltOiLiiLwiLGNvbmc6IuKJhSIsYXN5bXA6IuKJiCIsbmU6IuKJoCIsZXF1aXY6IuKJoSIsbGU6IuKJpCIsZ2U6IuKJpSIsc3ViOiLiioIiLHN1cDoi4oqDIixuc3ViOiLiioQiLHN1YmU6IuKKhiIsc3VwZToi4oqHIixvcGx1czoi4oqVIixvdGltZXM6IuKKlyIscGVycDoi4oqlIixzZG90OiLii4UiLGxjZWlsOiLijIgiLHJjZWlsOiLijIkiLGxmbG9vcjoi4oyKIixyZmxvb3I6IuKMiyIsbG96OiLil4oiLHNwYWRlczoi4pmgIixjbHViczoi4pmjIixoZWFydHM6IuKZpSIsZGlhbXM6IuKZpiIsbGFuZzoi4p+oIixyYW5nOiLin6kifX0sZnVuY3Rpb24oZSx0LHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6dHJ1ZX0pO3ZhciBzPXIoMTApO3ZhciBpPXIoMTIpO3ZhciBuPXIoMTMpO3ZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMudmFsdWVzPVtdO3RoaXMuY3VybHk9dGhpcy5wYXJlbj0tMX1lLnByb3RvdHlwZS5iZWZvcmVGdW5jdGlvbkV4cHJlc3Npb249ZnVuY3Rpb24oZSl7cmV0dXJuWyIoIiwieyIsIlsiLCJpbiIsInR5cGVvZiIsImluc3RhbmNlb2YiLCJuZXciLCJyZXR1cm4iLCJjYXNlIiwiZGVsZXRlIiwidGhyb3ciLCJ2b2lkIiwiPSIsIis9IiwiLT0iLCIqPSIsIioqPSIsIi89IiwiJT0iLCI8PD0iLCI+Pj0iLCI+Pj49IiwiJj0iLCJ8PSIsIl49IiwiLCIsIisiLCItIiwiKiIsIioqIiwiLyIsIiUiLCIrKyIsIi0tIiwiPDwiLCI+PiIsIj4+PiIsIiYiLCJ8IiwiXiIsIiEiLCJ+IiwiJiYiLCJ8fCIsIj8iLCI6IiwiPT09IiwiPT0iLCI+PSIsIjw9IiwiPCIsIj4iLCIhPSIsIiE9PSJdLmluZGV4T2YoZSk+PTB9O2UucHJvdG90eXBlLmlzUmVnZXhTdGFydD1mdW5jdGlvbigpe3ZhciBlPXRoaXMudmFsdWVzW3RoaXMudmFsdWVzLmxlbmd0aC0xXTt2YXIgdD1lIT09bnVsbDtzd2l0Y2goZSl7Y2FzZSJ0aGlzIjpjYXNlIl0iOnQ9ZmFsc2U7YnJlYWs7Y2FzZSIpIjp2YXIgcj10aGlzLnZhbHVlc1t0aGlzLnBhcmVuLTFdO3Q9cj09PSJpZiJ8fHI9PT0id2hpbGUifHxyPT09ImZvciJ8fHI9PT0id2l0aCI7YnJlYWs7Y2FzZSJ9Ijp0PWZhbHNlO2lmKHRoaXMudmFsdWVzW3RoaXMuY3VybHktM109PT0iZnVuY3Rpb24iKXt2YXIgcz10aGlzLnZhbHVlc1t0aGlzLmN1cmx5LTRdO3Q9cz8hdGhpcy5iZWZvcmVGdW5jdGlvbkV4cHJlc3Npb24ocyk6ZmFsc2V9ZWxzZSBpZih0aGlzLnZhbHVlc1t0aGlzLmN1cmx5LTRdPT09ImZ1bmN0aW9uIil7dmFyIHM9dGhpcy52YWx1ZXNbdGhpcy5jdXJseS01XTt0PXM/IXRoaXMuYmVmb3JlRnVuY3Rpb25FeHByZXNzaW9uKHMpOnRydWV9YnJlYWt9cmV0dXJuIHR9O2UucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSl7aWYoZS50eXBlPT09N3x8ZS50eXBlPT09NCl7aWYoZS52YWx1ZT09PSJ7Iil7dGhpcy5jdXJseT10aGlzLnZhbHVlcy5sZW5ndGh9ZWxzZSBpZihlLnZhbHVlPT09IigiKXt0aGlzLnBhcmVuPXRoaXMudmFsdWVzLmxlbmd0aH10aGlzLnZhbHVlcy5wdXNoKGUudmFsdWUpfWVsc2V7dGhpcy52YWx1ZXMucHVzaChudWxsKX19O3JldHVybiBlfSgpO3ZhciBvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuZXJyb3JIYW5kbGVyPW5ldyBzLkVycm9ySGFuZGxlcjt0aGlzLmVycm9ySGFuZGxlci50b2xlcmFudD10P3R5cGVvZiB0LnRvbGVyYW50PT09ImJvb2xlYW4iJiZ0LnRvbGVyYW50OmZhbHNlO3RoaXMuc2Nhbm5lcj1uZXcgaS5TY2FubmVyKGUsdGhpcy5lcnJvckhhbmRsZXIpO3RoaXMuc2Nhbm5lci50cmFja0NvbW1lbnQ9dD90eXBlb2YgdC5jb21tZW50PT09ImJvb2xlYW4iJiZ0LmNvbW1lbnQ6ZmFsc2U7dGhpcy50cmFja1JhbmdlPXQ/dHlwZW9mIHQucmFuZ2U9PT0iYm9vbGVhbiImJnQucmFuZ2U6ZmFsc2U7dGhpcy50cmFja0xvYz10P3R5cGVvZiB0LmxvYz09PSJib29sZWFuIiYmdC5sb2M6ZmFsc2U7dGhpcy5idWZmZXI9W107dGhpcy5yZWFkZXI9bmV3IGF9ZS5wcm90b3R5cGUuZXJyb3JzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLmVycm9yc307ZS5wcm90b3R5cGUuZ2V0TmV4dFRva2VuPWZ1bmN0aW9uKCl7aWYodGhpcy5idWZmZXIubGVuZ3RoPT09MCl7dmFyIGU9dGhpcy5zY2FubmVyLnNjYW5Db21tZW50cygpO2lmKHRoaXMuc2Nhbm5lci50cmFja0NvbW1lbnQpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7Kyt0KXt2YXIgcj1lW3RdO3ZhciBzPXRoaXMuc2Nhbm5lci5zb3VyY2Uuc2xpY2Uoci5zbGljZVswXSxyLnNsaWNlWzFdKTt2YXIgaT17dHlwZTpyLm11bHRpTGluZT8iQmxvY2tDb21tZW50IjoiTGluZUNvbW1lbnQiLHZhbHVlOnN9O2lmKHRoaXMudHJhY2tSYW5nZSl7aS5yYW5nZT1yLnJhbmdlfWlmKHRoaXMudHJhY2tMb2Mpe2kubG9jPXIubG9jfXRoaXMuYnVmZmVyLnB1c2goaSl9fWlmKCF0aGlzLnNjYW5uZXIuZW9mKCkpe3ZhciBhPXZvaWQgMDtpZih0aGlzLnRyYWNrTG9jKXthPXtzdGFydDp7bGluZTp0aGlzLnNjYW5uZXIubGluZU51bWJlcixjb2x1bW46dGhpcy5zY2FubmVyLmluZGV4LXRoaXMuc2Nhbm5lci5saW5lU3RhcnR9LGVuZDp7fX19dmFyIG89dGhpcy5zY2FubmVyLnNvdXJjZVt0aGlzLnNjYW5uZXIuaW5kZXhdPT09Ii8iJiZ0aGlzLnJlYWRlci5pc1JlZ2V4U3RhcnQoKTt2YXIgbD1vP3RoaXMuc2Nhbm5lci5zY2FuUmVnRXhwKCk6dGhpcy5zY2FubmVyLmxleCgpO3RoaXMucmVhZGVyLnB1c2gobCk7dmFyIHU9e3R5cGU6bi5Ub2tlbk5hbWVbbC50eXBlXSx2YWx1ZTp0aGlzLnNjYW5uZXIuc291cmNlLnNsaWNlKGwuc3RhcnQsbC5lbmQpfTtpZih0aGlzLnRyYWNrUmFuZ2Upe3UucmFuZ2U9W2wuc3RhcnQsbC5lbmRdfWlmKHRoaXMudHJhY2tMb2Mpe2EuZW5kPXtsaW5lOnRoaXMuc2Nhbm5lci5saW5lTnVtYmVyLGNvbHVtbjp0aGlzLnNjYW5uZXIuaW5kZXgtdGhpcy5zY2FubmVyLmxpbmVTdGFydH07dS5sb2M9YX1pZihsLnR5cGU9PT05KXt2YXIgYz1sLnBhdHRlcm47dmFyIGg9bC5mbGFnczt1LnJlZ2V4PXtwYXR0ZXJuOmMsZmxhZ3M6aH19dGhpcy5idWZmZXIucHVzaCh1KX19cmV0dXJuIHRoaXMuYnVmZmVyLnNoaWZ0KCl9O3JldHVybiBlfSgpO3QuVG9rZW5pemVyPW99XSl9KSl9KShscyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFV0LCJfX2VzTW9kdWxlIix7dmFsdWU6dHJ1ZX0pO1V0LnBhcnNlPXZvaWQgMDt2YXIgdXM9enQ7ZnVuY3Rpb24gY3MoZSx0KXt2YXIgcj1bXTt2YXIgcz1scy5leHBvcnRzLnBhcnNlKGUse2xvYzp0cnVlLGxvY2F0aW9uczp0cnVlLGNvbW1lbnQ6dHJ1ZSxvbkNvbW1lbnQ6cixyYW5nZTp1cy5nZXRPcHRpb24odCwicmFuZ2UiLGZhbHNlKSx0b2xlcmFudDp1cy5nZXRPcHRpb24odCwidG9sZXJhbnQiLHRydWUpLHRva2Vuczp0cnVlLGpzeDp1cy5nZXRPcHRpb24odCwianN4IixmYWxzZSl9KTtpZighQXJyYXkuaXNBcnJheShzLmNvbW1lbnRzKSl7cy5jb21tZW50cz1yfXJldHVybiBzfVV0LnBhcnNlPWNzO3ZhciBocztmdW5jdGlvbiBwcygpe2lmKHR5cGVvZiBocz09PSJ1bmRlZmluZWQiKXt2YXIgZT1uZXcgQXJyYXlCdWZmZXIoMik7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZSk7dmFyIHI9bmV3IFVpbnQxNkFycmF5KGUpO3RbMF09MTt0WzFdPTI7aWYoclswXT09PTI1OCl7aHM9IkJFIn1lbHNlIGlmKHJbMF09PT01MTMpe2hzPSJMRSJ9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBmaWd1cmUgb3V0IGVuZGlhbmVzcyIpfX1yZXR1cm4gaHN9ZnVuY3Rpb24gZnMoKXtpZih0eXBlb2YgdC5sb2NhdGlvbiE9PSJ1bmRlZmluZWQiKXtyZXR1cm4gdC5sb2NhdGlvbi5ob3N0bmFtZX1lbHNlIHJldHVybiIifWZ1bmN0aW9uIGRzKCl7cmV0dXJuW119ZnVuY3Rpb24gbXMoKXtyZXR1cm4gMH1mdW5jdGlvbiB5cygpe3JldHVybiBOdW1iZXIuTUFYX1ZBTFVFfWZ1bmN0aW9uIGdzKCl7cmV0dXJuIE51bWJlci5NQVhfVkFMVUV9ZnVuY3Rpb24geHMoKXtyZXR1cm5bXX1mdW5jdGlvbiB2cygpe3JldHVybiJCcm93c2VyIn1mdW5jdGlvbiBicygpe2lmKHR5cGVvZiB0Lm5hdmlnYXRvciE9PSJ1bmRlZmluZWQiKXtyZXR1cm4gdC5uYXZpZ2F0b3IuYXBwVmVyc2lvbn1yZXR1cm4iIn1mdW5jdGlvbiBFcygpe31mdW5jdGlvbiBTcygpe31mdW5jdGlvbiBUcygpe3JldHVybiJqYXZhc2NyaXB0In1mdW5jdGlvbiBBcygpe3JldHVybiJicm93c2VyIn1mdW5jdGlvbiB3cygpe3JldHVybiIvdG1wIn12YXIgQ3M9d3M7dmFyIFBzPSJcbiI7dmFyIERzPXtFT0w6UHMsdG1wZGlyOkNzLHRtcERpcjp3cyxuZXR3b3JrSW50ZXJmYWNlczpFcyxnZXROZXR3b3JrSW50ZXJmYWNlczpTcyxyZWxlYXNlOmJzLHR5cGU6dnMsY3B1czp4cyx0b3RhbG1lbTpncyxmcmVlbWVtOnlzLHVwdGltZTptcyxsb2FkYXZnOmRzLGhvc3RuYW1lOmZzLGVuZGlhbm5lc3M6cHN9O3ZhciBrcz1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxlbmRpYW5uZXNzOnBzLGhvc3RuYW1lOmZzLGxvYWRhdmc6ZHMsdXB0aW1lOm1zLGZyZWVtZW06eXMsdG90YWxtZW06Z3MsY3B1czp4cyx0eXBlOnZzLHJlbGVhc2U6YnMsbmV0d29ya0ludGVyZmFjZXM6RXMsZ2V0TmV0d29ya0ludGVyZmFjZXM6U3MsYXJjaDpUcyxwbGF0Zm9ybTpBcyx0bXBEaXI6d3MsdG1wZGlyOkNzLEVPTDpQcyxkZWZhdWx0OkRzfSk7dmFyIE5zPXUoa3MpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqdCwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTtqdC5ub3JtYWxpemU9dm9pZCAwO3ZhciBJcz17cGFyc2VyOlV0LHRhYldpZHRoOjQsdXNlVGFiczpmYWxzZSxyZXVzZVdoaXRlc3BhY2U6dHJ1ZSxsaW5lVGVybWluYXRvcjpOcy5FT0x8fCJcbiIsd3JhcENvbHVtbjo3NCxzb3VyY2VGaWxlTmFtZTpudWxsLHNvdXJjZU1hcE5hbWU6bnVsbCxzb3VyY2VSb290Om51bGwsaW5wdXRTb3VyY2VNYXA6bnVsbCxyYW5nZTpmYWxzZSx0b2xlcmFudDp0cnVlLHF1b3RlOm51bGwsdHJhaWxpbmdDb21tYTpmYWxzZSxhcnJheUJyYWNrZXRTcGFjaW5nOmZhbHNlLG9iamVjdEN1cmx5U3BhY2luZzp0cnVlLGFycm93UGFyZW5zQWx3YXlzOmZhbHNlLGZsb3dPYmplY3RDb21tYXM6dHJ1ZSx0b2tlbnM6dHJ1ZX07dmFyIEZzPUlzLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIE1zKGUpe3ZhciB0PWV8fElzO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIEZzLmNhbGwodCxlKT90W2VdOklzW2VdfXJldHVybnt0YWJXaWR0aDorcigidGFiV2lkdGgiKSx1c2VUYWJzOiEhcigidXNlVGFicyIpLHJldXNlV2hpdGVzcGFjZTohIXIoInJldXNlV2hpdGVzcGFjZSIpLGxpbmVUZXJtaW5hdG9yOnIoImxpbmVUZXJtaW5hdG9yIiksd3JhcENvbHVtbjpNYXRoLm1heChyKCJ3cmFwQ29sdW1uIiksMCksc291cmNlRmlsZU5hbWU6cigic291cmNlRmlsZU5hbWUiKSxzb3VyY2VNYXBOYW1lOnIoInNvdXJjZU1hcE5hbWUiKSxzb3VyY2VSb290OnIoInNvdXJjZVJvb3QiKSxpbnB1dFNvdXJjZU1hcDpyKCJpbnB1dFNvdXJjZU1hcCIpLHBhcnNlcjpyKCJlc3ByaW1hIil8fHIoInBhcnNlciIpLHJhbmdlOnIoInJhbmdlIiksdG9sZXJhbnQ6cigidG9sZXJhbnQiKSxxdW90ZTpyKCJxdW90ZSIpLHRyYWlsaW5nQ29tbWE6cigidHJhaWxpbmdDb21tYSIpLGFycmF5QnJhY2tldFNwYWNpbmc6cigiYXJyYXlCcmFja2V0U3BhY2luZyIpLG9iamVjdEN1cmx5U3BhY2luZzpyKCJvYmplY3RDdXJseVNwYWNpbmciKSxhcnJvd1BhcmVuc0Fsd2F5czpyKCJhcnJvd1BhcmVuc0Fsd2F5cyIpLGZsb3dPYmplY3RDb21tYXM6cigiZmxvd09iamVjdENvbW1hcyIpLHRva2VuczohIXIoInRva2VucyIpfX1qdC5ub3JtYWxpemU9TXM7dmFyIF9zPXt9O3ZhciBPcz17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoT3MsIl9fZXNNb2R1bGUiLHt2YWx1ZTp0cnVlfSk7dmFyIExzPVI7dmFyIEJzPUxzLl9faW1wb3J0RGVmYXVsdChSdCk7dmFyIFJzPXp0O3ZhciBqcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIpe2lmKHI9PT12b2lkIDApe3I9dH10aGlzLnNvdXJjZUxpbmVzPWU7dGhpcy5zb3VyY2VMb2M9dDt0aGlzLnRhcmdldExvYz1yfWUucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHQscixzKXtpZihzPT09dm9pZCAwKXtzPXQubGFzdFBvcygpfXZhciBpPXRoaXMuc291cmNlTGluZXM7dmFyIG49dGhpcy5zb3VyY2VMb2M7dmFyIGE9dGhpcy50YXJnZXRMb2M7ZnVuY3Rpb24gbyhlKXt2YXIgbz1uW2VdO3ZhciBsPWFbZV07dmFyIHU9cjtpZihlPT09ImVuZCIpe3U9c31lbHNle0JzLmRlZmF1bHQuc3RyaWN0RXF1YWwoZSwic3RhcnQiKX1yZXR1cm4gVnMoaSxvLHQsbCx1KX1pZihScy5jb21wYXJlUG9zKHIsYS5zdGFydCk8PTApe2lmKFJzLmNvbXBhcmVQb3MoYS5lbmQscyk8PTApe2E9e3N0YXJ0OnpzKGEuc3RhcnQsci5saW5lLHIuY29sdW1uKSxlbmQ6enMoYS5lbmQsci5saW5lLHIuY29sdW1uKX19ZWxzZSBpZihScy5jb21wYXJlUG9zKHMsYS5zdGFydCk8PTApe3JldHVybiBudWxsfWVsc2V7bj17c3RhcnQ6bi5zdGFydCxlbmQ6bygiZW5kIil9O2E9e3N0YXJ0OnpzKGEuc3RhcnQsci5saW5lLHIuY29sdW1uKSxlbmQ6enMocyxyLmxpbmUsci5jb2x1bW4pfX19ZWxzZXtpZihScy5jb21wYXJlUG9zKGEuZW5kLHIpPD0wKXtyZXR1cm4gbnVsbH1pZihScy5jb21wYXJlUG9zKGEuZW5kLHMpPD0wKXtuPXtzdGFydDpvKCJzdGFydCIpLGVuZDpuLmVuZH07YT17c3RhcnQ6e2xpbmU6MSxjb2x1bW46MH0sZW5kOnpzKGEuZW5kLHIubGluZSxyLmNvbHVtbil9fWVsc2V7bj17c3RhcnQ6bygic3RhcnQiKSxlbmQ6bygiZW5kIil9O2E9e3N0YXJ0OntsaW5lOjEsY29sdW1uOjB9LGVuZDp6cyhzLHIubGluZSxyLmNvbHVtbil9fX1yZXR1cm4gbmV3IGUodGhpcy5zb3VyY2VMaW5lcyxuLGEpfTtlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxyKXtyZXR1cm4gbmV3IGUodGhpcy5zb3VyY2VMaW5lcyx0aGlzLnNvdXJjZUxvYyx7c3RhcnQ6VXModGhpcy50YXJnZXRMb2Muc3RhcnQsdCxyKSxlbmQ6VXModGhpcy50YXJnZXRMb2MuZW5kLHQscil9KX07ZS5wcm90b3R5cGUuc3VidHJhY3Q9ZnVuY3Rpb24odCxyKXtyZXR1cm4gbmV3IGUodGhpcy5zb3VyY2VMaW5lcyx0aGlzLnNvdXJjZUxvYyx7c3RhcnQ6enModGhpcy50YXJnZXRMb2Muc3RhcnQsdCxyKSxlbmQ6enModGhpcy50YXJnZXRMb2MuZW5kLHQscil9KX07ZS5wcm90b3R5cGUuaW5kZW50PWZ1bmN0aW9uKHQscixzKXtpZihyPT09dm9pZCAwKXtyPWZhbHNlfWlmKHM9PT12b2lkIDApe3M9ZmFsc2V9aWYodD09PTApe3JldHVybiB0aGlzfXZhciBpPXRoaXMudGFyZ2V0TG9jO3ZhciBuPWkuc3RhcnQubGluZTt2YXIgYT1pLmVuZC5saW5lO2lmKHImJm49PT0xJiZhPT09MSl7cmV0dXJuIHRoaXN9aT17c3RhcnQ6aS5zdGFydCxlbmQ6aS5lbmR9O2lmKCFyfHxuPjEpe3ZhciBvPWkuc3RhcnQuY29sdW1uK3Q7aS5zdGFydD17bGluZTpuLGNvbHVtbjpzP01hdGgubWF4KDAsbyk6b319aWYoIXJ8fGE+MSl7dmFyIGw9aS5lbmQuY29sdW1uK3Q7aS5lbmQ9e2xpbmU6YSxjb2x1bW46cz9NYXRoLm1heCgwLGwpOmx9fXJldHVybiBuZXcgZSh0aGlzLnNvdXJjZUxpbmVzLHRoaXMuc291cmNlTG9jLGkpfTtyZXR1cm4gZX0oKTtPcy5kZWZhdWx0PWpzO2Z1bmN0aW9uIFVzKGUsdCxyKXtyZXR1cm57bGluZTplLmxpbmUrdC0xLGNvbHVtbjplLmxpbmU9PT0xP2UuY29sdW1uK3I6ZS5jb2x1bW59fWZ1bmN0aW9uIHpzKGUsdCxyKXtyZXR1cm57bGluZTplLmxpbmUtdCsxLGNvbHVtbjplLmxpbmU9PT10P2UuY29sdW1uLXI6ZS5jb2x1bW59fWZ1bmN0aW9uIFZzKGUsdCxyLHMsaSl7dmFyIG49UnMuY29tcGFyZVBvcyhzLGkpO2lmKG49PT0wKXtyZXR1cm4gdH12YXIgYSxvO2lmKG48MCl7YT1lLnNraXBTcGFjZXModCl8fGUubGFzdFBvcygpO289ci5za2lwU3BhY2VzKHMpfHxyLmxhc3RQb3MoKTt2YXIgbD1pLmxpbmUtby5saW5lO2EubGluZSs9bDtvLmxpbmUrPWw7aWYobD4wKXthLmNvbHVtbj0wO28uY29sdW1uPTB9ZWxzZXtCcy5kZWZhdWx0LnN0cmljdEVxdWFsKGwsMCl9d2hpbGUoUnMuY29tcGFyZVBvcyhvLGkpPDAmJnIubmV4dFBvcyhvLHRydWUpKXtCcy5kZWZhdWx0Lm9rKGUubmV4dFBvcyhhLHRydWUpKTtCcy5kZWZhdWx0LnN0cmljdEVxdWFsKGUuY2hhckF0KGEpLHIuY2hhckF0KG8pKX19ZWxzZXthPWUuc2tpcFNwYWNlcyh0LHRydWUpfHxlLmZpcnN0UG9zKCk7bz1yLnNraXBTcGFjZXMocyx0cnVlKXx8ci5maXJzdFBvcygpO3ZhciBsPWkubGluZS1vLmxpbmU7YS5saW5lKz1sO28ubGluZSs9bDtpZihsPDApe2EuY29sdW1uPWUuZ2V0TGluZUxlbmd0aChhLmxpbmUpO28uY29sdW1uPXIuZ2V0TGluZUxlbmd0aChvLmxpbmUpfWVsc2V7QnMuZGVmYXVsdC5zdHJpY3RFcXVhbChsLDApfXdoaWxlKFJzLmNvbXBhcmVQb3MoaSxvKTwwJiZyLnByZXZQb3Mobyx0cnVlKSl7QnMuZGVmYXVsdC5vayhlLnByZXZQb3MoYSx0cnVlKSk7QnMuZGVmYXVsdC5zdHJpY3RFcXVhbChlLmNoYXJBdChhKSxyLmNoYXJBdChvKSl9fXJldHVybiBhfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShfcywiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTtfcy5jb25jYXQ9X3MuZnJvbVN0cmluZz1fcy5jb3VudFNwYWNlcz1fcy5MaW5lcz12b2lkIDA7dmFyIHFzPVI7dmFyIEdzPXFzLl9faW1wb3J0RGVmYXVsdChSdCk7dmFyIFhzPXFzLl9faW1wb3J0RGVmYXVsdChWdCk7dmFyIEpzPWp0O3ZhciBIcz16dDt2YXIgV3M9cXMuX19pbXBvcnREZWZhdWx0KE9zKTt2YXIgS3M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7aWYodD09PXZvaWQgMCl7dD1udWxsfXRoaXMuaW5mb3M9ZTt0aGlzLm1hcHBpbmdzPVtdO3RoaXMuY2FjaGVkU291cmNlTWFwPW51bGw7dGhpcy5jYWNoZWRUYWJXaWR0aD12b2lkIDA7R3MuZGVmYXVsdC5vayhlLmxlbmd0aD4wKTt0aGlzLmxlbmd0aD1lLmxlbmd0aDt0aGlzLm5hbWU9dHx8bnVsbDtpZih0aGlzLm5hbWUpe3RoaXMubWFwcGluZ3MucHVzaChuZXcgV3MuZGVmYXVsdCh0aGlzLHtzdGFydDp0aGlzLmZpcnN0UG9zKCksZW5kOnRoaXMubGFzdFBvcygpfSkpfX1lLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zbGljZVN0cmluZyh0aGlzLmZpcnN0UG9zKCksdGhpcy5sYXN0UG9zKCksZSl9O2UucHJvdG90eXBlLmdldFNvdXJjZU1hcD1mdW5jdGlvbihlLHQpe2lmKCFlKXtyZXR1cm4gbnVsbH12YXIgcj10aGlzO2Z1bmN0aW9uIHMocil7cj1yfHx7fTtyLmZpbGU9ZTtpZih0KXtyLnNvdXJjZVJvb3Q9dH1yZXR1cm4gcn1pZihyLmNhY2hlZFNvdXJjZU1hcCl7cmV0dXJuIHMoci5jYWNoZWRTb3VyY2VNYXAudG9KU09OKCkpfXZhciBpPW5ldyBYcy5kZWZhdWx0LlNvdXJjZU1hcEdlbmVyYXRvcihzKCkpO3ZhciBuPXt9O3IubWFwcGluZ3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zb3VyY2VMaW5lcy5za2lwU3BhY2VzKGUuc291cmNlTG9jLnN0YXJ0KXx8ZS5zb3VyY2VMaW5lcy5sYXN0UG9zKCk7dmFyIHM9ci5za2lwU3BhY2VzKGUudGFyZ2V0TG9jLnN0YXJ0KXx8ci5sYXN0UG9zKCk7d2hpbGUoSHMuY29tcGFyZVBvcyh0LGUuc291cmNlTG9jLmVuZCk8MCYmSHMuY29tcGFyZVBvcyhzLGUudGFyZ2V0TG9jLmVuZCk8MCl7dmFyIGE9ZS5zb3VyY2VMaW5lcy5jaGFyQXQodCk7dmFyIG89ci5jaGFyQXQocyk7R3MuZGVmYXVsdC5zdHJpY3RFcXVhbChhLG8pO3ZhciBsPWUuc291cmNlTGluZXMubmFtZTtpLmFkZE1hcHBpbmcoe3NvdXJjZTpsLG9yaWdpbmFsOntsaW5lOnQubGluZSxjb2x1bW46dC5jb2x1bW59LGdlbmVyYXRlZDp7bGluZTpzLmxpbmUsY29sdW1uOnMuY29sdW1ufX0pO2lmKCFZcy5jYWxsKG4sbCkpe3ZhciB1PWUuc291cmNlTGluZXMudG9TdHJpbmcoKTtpLnNldFNvdXJjZUNvbnRlbnQobCx1KTtuW2xdPXV9ci5uZXh0UG9zKHMsdHJ1ZSk7ZS5zb3VyY2VMaW5lcy5uZXh0UG9zKHQsdHJ1ZSl9fSkpO3IuY2FjaGVkU291cmNlTWFwPWk7cmV0dXJuIGkudG9KU09OKCl9O2UucHJvdG90eXBlLmJvb3RzdHJhcENoYXJBdD1mdW5jdGlvbihlKXtHcy5kZWZhdWx0LnN0cmljdEVxdWFsKHR5cGVvZiBlLCJvYmplY3QiKTtHcy5kZWZhdWx0LnN0cmljdEVxdWFsKHR5cGVvZiBlLmxpbmUsIm51bWJlciIpO0dzLmRlZmF1bHQuc3RyaWN0RXF1YWwodHlwZW9mIGUuY29sdW1uLCJudW1iZXIiKTt2YXIgdD1lLmxpbmUscj1lLmNvbHVtbixzPXRoaXMudG9TdHJpbmcoKS5zcGxpdCh0aSksaT1zW3QtMV07aWYodHlwZW9mIGk9PT0idW5kZWZpbmVkIilyZXR1cm4iIjtpZihyPT09aS5sZW5ndGgmJnQ8cy5sZW5ndGgpcmV0dXJuIlxuIjtpZihyPj1pLmxlbmd0aClyZXR1cm4iIjtyZXR1cm4gaS5jaGFyQXQocil9O2UucHJvdG90eXBlLmNoYXJBdD1mdW5jdGlvbihlKXtHcy5kZWZhdWx0LnN0cmljdEVxdWFsKHR5cGVvZiBlLCJvYmplY3QiKTtHcy5kZWZhdWx0LnN0cmljdEVxdWFsKHR5cGVvZiBlLmxpbmUsIm51bWJlciIpO0dzLmRlZmF1bHQuc3RyaWN0RXF1YWwodHlwZW9mIGUuY29sdW1uLCJudW1iZXIiKTt2YXIgdD1lLmxpbmUscj1lLmNvbHVtbixzPXRoaXMsaT1zLmluZm9zLG49aVt0LTFdLGE9cjtpZih0eXBlb2Ygbj09PSJ1bmRlZmluZWQifHxhPDApcmV0dXJuIiI7dmFyIG89dGhpcy5nZXRJbmRlbnRBdCh0KTtpZihhPG8pcmV0dXJuIiAiO2ErPW4uc2xpY2VTdGFydC1vO2lmKGE9PT1uLnNsaWNlRW5kJiZ0PHRoaXMubGVuZ3RoKXJldHVybiJcbiI7aWYoYT49bi5zbGljZUVuZClyZXR1cm4iIjtyZXR1cm4gbi5saW5lLmNoYXJBdChhKX07ZS5wcm90b3R5cGUuc3RyaXBNYXJnaW49ZnVuY3Rpb24odCxyKXtpZih0PT09MClyZXR1cm4gdGhpcztHcy5kZWZhdWx0Lm9rKHQ+MCwibmVnYXRpdmUgbWFyZ2luOiAiK3QpO2lmKHImJnRoaXMubGVuZ3RoPT09MSlyZXR1cm4gdGhpczt2YXIgcz1uZXcgZSh0aGlzLmluZm9zLm1hcCgoZnVuY3Rpb24oZSxzKXtpZihlLmxpbmUmJihzPjB8fCFyKSl7ZT1xcy5fX2Fzc2lnbihxcy5fX2Fzc2lnbih7fSxlKSx7aW5kZW50Ok1hdGgubWF4KDAsZS5pbmRlbnQtdCl9KX1yZXR1cm4gZX0pKSk7aWYodGhpcy5tYXBwaW5ncy5sZW5ndGg+MCl7dmFyIGk9cy5tYXBwaW5ncztHcy5kZWZhdWx0LnN0cmljdEVxdWFsKGkubGVuZ3RoLDApO3RoaXMubWFwcGluZ3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aS5wdXNoKGUuaW5kZW50KHQscix0cnVlKSl9KSl9cmV0dXJuIHN9O2UucHJvdG90eXBlLmluZGVudD1mdW5jdGlvbih0KXtpZih0PT09MCl7cmV0dXJuIHRoaXN9dmFyIHI9bmV3IGUodGhpcy5pbmZvcy5tYXAoKGZ1bmN0aW9uKGUpe2lmKGUubGluZSYmIWUubG9ja2VkKXtlPXFzLl9fYXNzaWduKHFzLl9fYXNzaWduKHt9LGUpLHtpbmRlbnQ6ZS5pbmRlbnQrdH0pfXJldHVybiBlfSkpKTtpZih0aGlzLm1hcHBpbmdzLmxlbmd0aD4wKXt2YXIgcz1yLm1hcHBpbmdzO0dzLmRlZmF1bHQuc3RyaWN0RXF1YWwocy5sZW5ndGgsMCk7dGhpcy5tYXBwaW5ncy5mb3JFYWNoKChmdW5jdGlvbihlKXtzLnB1c2goZS5pbmRlbnQodCkpfSkpfXJldHVybiByfTtlLnByb3RvdHlwZS5pbmRlbnRUYWlsPWZ1bmN0aW9uKHQpe2lmKHQ9PT0wKXtyZXR1cm4gdGhpc31pZih0aGlzLmxlbmd0aDwyKXtyZXR1cm4gdGhpc312YXIgcj1uZXcgZSh0aGlzLmluZm9zLm1hcCgoZnVuY3Rpb24oZSxyKXtpZihyPjAmJmUubGluZSYmIWUubG9ja2VkKXtlPXFzLl9fYXNzaWduKHFzLl9fYXNzaWduKHt9LGUpLHtpbmRlbnQ6ZS5pbmRlbnQrdH0pfXJldHVybiBlfSkpKTtpZih0aGlzLm1hcHBpbmdzLmxlbmd0aD4wKXt2YXIgcz1yLm1hcHBpbmdzO0dzLmRlZmF1bHQuc3RyaWN0RXF1YWwocy5sZW5ndGgsMCk7dGhpcy5tYXBwaW5ncy5mb3JFYWNoKChmdW5jdGlvbihlKXtzLnB1c2goZS5pbmRlbnQodCx0cnVlKSl9KSl9cmV0dXJuIHJ9O2UucHJvdG90eXBlLmxvY2tJbmRlbnRUYWlsPWZ1bmN0aW9uKCl7aWYodGhpcy5sZW5ndGg8Mil7cmV0dXJuIHRoaXN9cmV0dXJuIG5ldyBlKHRoaXMuaW5mb3MubWFwKChmdW5jdGlvbihlLHQpe3JldHVybiBxcy5fX2Fzc2lnbihxcy5fX2Fzc2lnbih7fSxlKSx7bG9ja2VkOnQ+MH0pfSkpKX07ZS5wcm90b3R5cGUuZ2V0SW5kZW50QXQ9ZnVuY3Rpb24oZSl7R3MuZGVmYXVsdC5vayhlPj0xLCJubyBsaW5lICIrZSsiIChsaW5lIG51bWJlcnMgc3RhcnQgZnJvbSAxKSIpO3JldHVybiBNYXRoLm1heCh0aGlzLmluZm9zW2UtMV0uaW5kZW50LDApfTtlLnByb3RvdHlwZS5ndWVzc1RhYldpZHRoPWZ1bmN0aW9uKCl7aWYodHlwZW9mIHRoaXMuY2FjaGVkVGFiV2lkdGg9PT0ibnVtYmVyIil7cmV0dXJuIHRoaXMuY2FjaGVkVGFiV2lkdGh9dmFyIGU9W107dmFyIHQ9MDtmb3IodmFyIHI9MSxzPXRoaXMubGVuZ3RoO3I8PXM7KytyKXt2YXIgaT10aGlzLmluZm9zW3ItMV07dmFyIG49aS5saW5lLnNsaWNlKGkuc2xpY2VTdGFydCxpLnNsaWNlRW5kKTtpZihzaShuKSl7Y29udGludWV9dmFyIGE9TWF0aC5hYnMoaS5pbmRlbnQtdCk7ZVthXT1+fmVbYV0rMTt0PWkuaW5kZW50fXZhciBvPS0xO3ZhciBsPTI7Zm9yKHZhciB1PTE7dTxlLmxlbmd0aDt1Kz0xKXtpZihZcy5jYWxsKGUsdSkmJmVbdV0+byl7bz1lW3VdO2w9dX19cmV0dXJuIHRoaXMuY2FjaGVkVGFiV2lkdGg9bH07ZS5wcm90b3R5cGUuc3RhcnRzV2l0aENvbW1lbnQ9ZnVuY3Rpb24oKXtpZih0aGlzLmluZm9zLmxlbmd0aD09PTApe3JldHVybiBmYWxzZX12YXIgZT10aGlzLmluZm9zWzBdLHQ9ZS5zbGljZVN0YXJ0LHI9ZS5zbGljZUVuZCxzPWUubGluZS5zbGljZSh0LHIpLnRyaW0oKTtyZXR1cm4gcy5sZW5ndGg9PT0wfHxzLnNsaWNlKDAsMik9PT0iLy8ifHxzLnNsaWNlKDAsMik9PT0iLyoifTtlLnByb3RvdHlwZS5pc09ubHlXaGl0ZXNwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHNpKHRoaXMudG9TdHJpbmcoKSl9O2UucHJvdG90eXBlLmlzUHJlY2VkZWRPbmx5QnlXaGl0ZXNwYWNlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaW5mb3NbZS5saW5lLTFdO3ZhciByPU1hdGgubWF4KHQuaW5kZW50LDApO3ZhciBzPWUuY29sdW1uLXI7aWYoczw9MCl7cmV0dXJuIHRydWV9dmFyIGk9dC5zbGljZVN0YXJ0O3ZhciBuPU1hdGgubWluKGkrcyx0LnNsaWNlRW5kKTt2YXIgYT10LmxpbmUuc2xpY2UoaSxuKTtyZXR1cm4gc2koYSl9O2UucHJvdG90eXBlLmdldExpbmVMZW5ndGg9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbmZvc1tlLTFdO3JldHVybiB0aGlzLmdldEluZGVudEF0KGUpK3Quc2xpY2VFbmQtdC5zbGljZVN0YXJ0fTtlLnByb3RvdHlwZS5uZXh0UG9zPWZ1bmN0aW9uKGUsdCl7aWYodD09PXZvaWQgMCl7dD1mYWxzZX12YXIgcj1NYXRoLm1heChlLmxpbmUsMCkscz1NYXRoLm1heChlLmNvbHVtbiwwKTtpZihzPHRoaXMuZ2V0TGluZUxlbmd0aChyKSl7ZS5jb2x1bW4rPTE7cmV0dXJuIHQ/ISF0aGlzLnNraXBTcGFjZXMoZSxmYWxzZSx0cnVlKTp0cnVlfWlmKHI8dGhpcy5sZW5ndGgpe2UubGluZSs9MTtlLmNvbHVtbj0wO3JldHVybiB0PyEhdGhpcy5za2lwU3BhY2VzKGUsZmFsc2UsdHJ1ZSk6dHJ1ZX1yZXR1cm4gZmFsc2V9O2UucHJvdG90eXBlLnByZXZQb3M9ZnVuY3Rpb24oZSx0KXtpZih0PT09dm9pZCAwKXt0PWZhbHNlfXZhciByPWUubGluZSxzPWUuY29sdW1uO2lmKHM8MSl7ci09MTtpZihyPDEpcmV0dXJuIGZhbHNlO3M9dGhpcy5nZXRMaW5lTGVuZ3RoKHIpfWVsc2V7cz1NYXRoLm1pbihzLTEsdGhpcy5nZXRMaW5lTGVuZ3RoKHIpKX1lLmxpbmU9cjtlLmNvbHVtbj1zO3JldHVybiB0PyEhdGhpcy5za2lwU3BhY2VzKGUsdHJ1ZSx0cnVlKTp0cnVlfTtlLnByb3RvdHlwZS5maXJzdFBvcz1mdW5jdGlvbigpe3JldHVybntsaW5lOjEsY29sdW1uOjB9fTtlLnByb3RvdHlwZS5sYXN0UG9zPWZ1bmN0aW9uKCl7cmV0dXJue2xpbmU6dGhpcy5sZW5ndGgsY29sdW1uOnRoaXMuZ2V0TGluZUxlbmd0aCh0aGlzLmxlbmd0aCl9fTtlLnByb3RvdHlwZS5za2lwU3BhY2VzPWZ1bmN0aW9uKGUsdCxyKXtpZih0PT09dm9pZCAwKXt0PWZhbHNlfWlmKHI9PT12b2lkIDApe3I9ZmFsc2V9aWYoZSl7ZT1yP2U6e2xpbmU6ZS5saW5lLGNvbHVtbjplLmNvbHVtbn19ZWxzZSBpZih0KXtlPXRoaXMubGFzdFBvcygpfWVsc2V7ZT10aGlzLmZpcnN0UG9zKCl9aWYodCl7d2hpbGUodGhpcy5wcmV2UG9zKGUpKXtpZighc2kodGhpcy5jaGFyQXQoZSkpJiZ0aGlzLm5leHRQb3MoZSkpe3JldHVybiBlfX1yZXR1cm4gbnVsbH1lbHNle3doaWxlKHNpKHRoaXMuY2hhckF0KGUpKSl7aWYoIXRoaXMubmV4dFBvcyhlKSl7cmV0dXJuIG51bGx9fXJldHVybiBlfX07ZS5wcm90b3R5cGUudHJpbUxlZnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNraXBTcGFjZXModGhpcy5maXJzdFBvcygpLGZhbHNlLHRydWUpO3JldHVybiBlP3RoaXMuc2xpY2UoZSk6YWl9O2UucHJvdG90eXBlLnRyaW1SaWdodD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc2tpcFNwYWNlcyh0aGlzLmxhc3RQb3MoKSx0cnVlLHRydWUpO3JldHVybiBlP3RoaXMuc2xpY2UodGhpcy5maXJzdFBvcygpLGUpOmFpfTtlLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5za2lwU3BhY2VzKHRoaXMuZmlyc3RQb3MoKSxmYWxzZSx0cnVlKTtpZihlPT09bnVsbCl7cmV0dXJuIGFpfXZhciB0PXRoaXMuc2tpcFNwYWNlcyh0aGlzLmxhc3RQb3MoKSx0cnVlLHRydWUpO2lmKHQ9PT1udWxsKXtyZXR1cm4gYWl9cmV0dXJuIHRoaXMuc2xpY2UoZSx0KX07ZS5wcm90b3R5cGUuZWFjaFBvcz1mdW5jdGlvbihlLHQscil7aWYodD09PXZvaWQgMCl7dD10aGlzLmZpcnN0UG9zKCl9aWYocj09PXZvaWQgMCl7cj1mYWxzZX12YXIgcz10aGlzLmZpcnN0UG9zKCk7aWYodCl7cy5saW5lPXQubGluZSxzLmNvbHVtbj10LmNvbHVtbn1pZihyJiYhdGhpcy5za2lwU3BhY2VzKHMsZmFsc2UsdHJ1ZSkpe3JldHVybn1kb3tlLmNhbGwodGhpcyxzKX13aGlsZSh0aGlzLm5leHRQb3MocyxyKSl9O2UucHJvdG90eXBlLmJvb3RzdHJhcFNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy50b1N0cmluZygpLnNwbGl0KHRpKS5zbGljZShlLmxpbmUtMSx0LmxpbmUpO2lmKHIubGVuZ3RoPjApe3IucHVzaChyLnBvcCgpLnNsaWNlKDAsdC5jb2x1bW4pKTtyWzBdPXJbMF0uc2xpY2UoZS5jb2x1bW4pfXJldHVybiByaShyLmpvaW4oIlxuIikpfTtlLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbih0LHIpe2lmKCFyKXtpZighdCl7cmV0dXJuIHRoaXN9cj10aGlzLmxhc3RQb3MoKX1pZighdCl7dGhyb3cgbmV3IEVycm9yKCJjYW5ub3Qgc2xpY2Ugd2l0aCBlbmQgYnV0IG5vdCBzdGFydCIpfXZhciBzPXRoaXMuaW5mb3Muc2xpY2UodC5saW5lLTEsci5saW5lKTtpZih0LmxpbmU9PT1yLmxpbmUpe3NbMF09aWkoc1swXSx0LmNvbHVtbixyLmNvbHVtbil9ZWxzZXtHcy5kZWZhdWx0Lm9rKHQubGluZTxyLmxpbmUpO3NbMF09aWkoc1swXSx0LmNvbHVtbik7cy5wdXNoKGlpKHMucG9wKCksMCxyLmNvbHVtbikpfXZhciBpPW5ldyBlKHMpO2lmKHRoaXMubWFwcGluZ3MubGVuZ3RoPjApe3ZhciBuPWkubWFwcGluZ3M7R3MuZGVmYXVsdC5zdHJpY3RFcXVhbChuLmxlbmd0aCwwKTt0aGlzLm1hcHBpbmdzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBzPWUuc2xpY2UodGhpcyx0LHIpO2lmKHMpe24ucHVzaChzKX19KSx0aGlzKX1yZXR1cm4gaX07ZS5wcm90b3R5cGUuYm9vdHN0cmFwU2xpY2VTdHJpbmc9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLnNsaWNlKGUsdCkudG9TdHJpbmcocil9O2UucHJvdG90eXBlLnNsaWNlU3RyaW5nPWZ1bmN0aW9uKGUsdCxyKXtpZihlPT09dm9pZCAwKXtlPXRoaXMuZmlyc3RQb3MoKX1pZih0PT09dm9pZCAwKXt0PXRoaXMubGFzdFBvcygpfXZhciBzPUpzLm5vcm1hbGl6ZShyKSxpPXMudGFiV2lkdGgsbj1zLnVzZVRhYnMsYT1zLnJldXNlV2hpdGVzcGFjZSxvPXMubGluZVRlcm1pbmF0b3I7dmFyIGw9W107Zm9yKHZhciB1PWUubGluZTt1PD10LmxpbmU7Kyt1KXt2YXIgYz10aGlzLmluZm9zW3UtMV07aWYodT09PWUubGluZSl7aWYodT09PXQubGluZSl7Yz1paShjLGUuY29sdW1uLHQuY29sdW1uKX1lbHNle2M9aWkoYyxlLmNvbHVtbil9fWVsc2UgaWYodT09PXQubGluZSl7Yz1paShjLDAsdC5jb2x1bW4pfXZhciBoPU1hdGgubWF4KGMuaW5kZW50LDApO3ZhciBwPWMubGluZS5zbGljZSgwLGMuc2xpY2VTdGFydCk7aWYoYSYmc2kocCkmJlpzKHAsaSk9PT1oKXtsLnB1c2goYy5saW5lLnNsaWNlKDAsYy5zbGljZUVuZCkpO2NvbnRpbnVlfXZhciBmPTA7dmFyIGQ9aDtpZihuKXtmPU1hdGguZmxvb3IoaC9pKTtkLT1mKml9dmFyIG09IiI7aWYoZj4wKXttKz1uZXcgQXJyYXkoZisxKS5qb2luKCJcdCIpfWlmKGQ+MCl7bSs9bmV3IEFycmF5KGQrMSkuam9pbigiICIpfW0rPWMubGluZS5zbGljZShjLnNsaWNlU3RhcnQsYy5zbGljZUVuZCk7bC5wdXNoKG0pfXJldHVybiBsLmpvaW4obyl9O2UucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg8MiYmdGhpcy5nZXRMaW5lTGVuZ3RoKDEpPDF9O2UucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24odCl7dmFyIHI9dGhpczt2YXIgcz1bXTt2YXIgaT1bXTt2YXIgbjtmdW5jdGlvbiBhKGUpe2lmKGU9PT1udWxsKXtyZXR1cm59aWYobil7dmFyIHQ9ZS5pbmZvc1swXTt2YXIgcj1uZXcgQXJyYXkodC5pbmRlbnQrMSkuam9pbigiICIpO3ZhciBhPXMubGVuZ3RoO3ZhciBvPU1hdGgubWF4KG4uaW5kZW50LDApK24uc2xpY2VFbmQtbi5zbGljZVN0YXJ0O24ubGluZT1uLmxpbmUuc2xpY2UoMCxuLnNsaWNlRW5kKStyK3QubGluZS5zbGljZSh0LnNsaWNlU3RhcnQsdC5zbGljZUVuZCk7bi5sb2NrZWQ9bi5sb2NrZWR8fHQubG9ja2VkO24uc2xpY2VFbmQ9bi5saW5lLmxlbmd0aDtpZihlLm1hcHBpbmdzLmxlbmd0aD4wKXtlLm1hcHBpbmdzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2kucHVzaChlLmFkZChhLG8pKX0pKX19ZWxzZSBpZihlLm1hcHBpbmdzLmxlbmd0aD4wKXtpLnB1c2guYXBwbHkoaSxlLm1hcHBpbmdzKX1lLmluZm9zLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7aWYoIW58fHQ+MCl7bj1xcy5fX2Fzc2lnbih7fSxlKTtzLnB1c2gobil9fSkpfWZ1bmN0aW9uIG8oZSx0KXtpZih0PjApYShyKTthKGUpfXQubWFwKChmdW5jdGlvbihlKXt2YXIgdD1yaShlKTtpZih0LmlzRW1wdHkoKSlyZXR1cm4gbnVsbDtyZXR1cm4gdH0pKS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2lmKHIuaXNFbXB0eSgpKXthKGUpfWVsc2V7byhlLHQpfX0pKTtpZihzLmxlbmd0aDwxKXJldHVybiBhaTt2YXIgbD1uZXcgZShzKTtsLm1hcHBpbmdzPWk7cmV0dXJuIGx9O2UucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe2VbdF09YXJndW1lbnRzW3RdfXZhciByPVt0aGlzXTtyLnB1c2guYXBwbHkocixlKTtHcy5kZWZhdWx0LnN0cmljdEVxdWFsKHIubGVuZ3RoLGUubGVuZ3RoKzEpO3JldHVybiBhaS5qb2luKHIpfTtyZXR1cm4gZX0oKTtfcy5MaW5lcz1Lczt2YXIgJHM9e307dmFyIFlzPSRzLmhhc093blByb3BlcnR5O3ZhciBRcz0xMDtmdW5jdGlvbiBacyhlLHQpe3ZhciByPTA7dmFyIHM9ZS5sZW5ndGg7Zm9yKHZhciBpPTA7aTxzOysraSl7c3dpdGNoKGUuY2hhckNvZGVBdChpKSl7Y2FzZSA5OntHcy5kZWZhdWx0LnN0cmljdEVxdWFsKHR5cGVvZiB0LCJudW1iZXIiKTtHcy5kZWZhdWx0Lm9rKHQ+MCk7dmFyIG49TWF0aC5jZWlsKHIvdCkqdDtpZihuPT09cil7cis9dH1lbHNle3I9bn1icmVha31jYXNlIDExOmNhc2UgMTI6Y2FzZSAxMzpjYXNlIDY1Mjc5OmJyZWFrO2Nhc2UgMzI6ZGVmYXVsdDpyKz0xO2JyZWFrfX1yZXR1cm4gcn1fcy5jb3VudFNwYWNlcz1aczt2YXIgZWk9L15ccyovO3ZhciB0aT0vXHUwMDBEXHUwMDBBfFx1MDAwRCg/IVx1MDAwQSl8XHUwMDBBfFx1MjAyOHxcdTIwMjkvO2Z1bmN0aW9uIHJpKGUsdCl7aWYoZSBpbnN0YW5jZW9mIEtzKXJldHVybiBlO2UrPSIiO3ZhciByPXQmJnQudGFiV2lkdGg7dmFyIHM9ZS5pbmRleE9mKCJcdCIpPDA7dmFyIGk9IXQmJnMmJmUubGVuZ3RoPD1RcztHcy5kZWZhdWx0Lm9rKHJ8fHMsIk5vIHRhYiB3aWR0aCBzcGVjaWZpZWQgYnV0IGVuY291bnRlcmVkIHRhYnMgaW4gc3RyaW5nXG4iK2UpO2lmKGkmJllzLmNhbGwoJHMsZSkpcmV0dXJuICRzW2VdO3ZhciBuPW5ldyBLcyhlLnNwbGl0KHRpKS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0PWVpLmV4ZWMoZSlbMF07cmV0dXJue2xpbmU6ZSxpbmRlbnQ6WnModCxyKSxsb2NrZWQ6ZmFsc2Usc2xpY2VTdGFydDp0Lmxlbmd0aCxzbGljZUVuZDplLmxlbmd0aH19KSksSnMubm9ybWFsaXplKHQpLnNvdXJjZUZpbGVOYW1lKTtpZihpKSRzW2VdPW47cmV0dXJuIG59X3MuZnJvbVN0cmluZz1yaTtmdW5jdGlvbiBzaShlKXtyZXR1cm4hL1xTLy50ZXN0KGUpfWZ1bmN0aW9uIGlpKGUsdCxyKXt2YXIgcz1lLnNsaWNlU3RhcnQ7dmFyIGk9ZS5zbGljZUVuZDt2YXIgbj1NYXRoLm1heChlLmluZGVudCwwKTt2YXIgYT1uK2ktcztpZih0eXBlb2Ygcj09PSJ1bmRlZmluZWQiKXtyPWF9dD1NYXRoLm1heCh0LDApO3I9TWF0aC5taW4ocixhKTtyPU1hdGgubWF4KHIsdCk7aWYocjxuKXtuPXI7aT1zfWVsc2V7aS09YS1yfWE9cjthLT10O2lmKHQ8bil7bi09dH1lbHNle3QtPW47bj0wO3MrPXR9R3MuZGVmYXVsdC5vayhuPj0wKTtHcy5kZWZhdWx0Lm9rKHM8PWkpO0dzLmRlZmF1bHQuc3RyaWN0RXF1YWwoYSxuK2ktcyk7aWYoZS5pbmRlbnQ9PT1uJiZlLnNsaWNlU3RhcnQ9PT1zJiZlLnNsaWNlRW5kPT09aSl7cmV0dXJuIGV9cmV0dXJue2xpbmU6ZS5saW5lLGluZGVudDpuLGxvY2tlZDpmYWxzZSxzbGljZVN0YXJ0OnMsc2xpY2VFbmQ6aX19ZnVuY3Rpb24gbmkoZSl7cmV0dXJuIGFpLmpvaW4oZSl9X3MuY29uY2F0PW5pO3ZhciBhaT1yaSgiIik7dmFyIG9pPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShvaSwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTtvaS5wcmludENvbW1lbnRzPW9pLmF0dGFjaD12b2lkIDA7dmFyIGxpPVI7dmFyIHVpPWxpLl9faW1wb3J0RGVmYXVsdChSdCk7dmFyIGNpPWxpLl9faW1wb3J0U3RhcihqKTt2YXIgaGk9Y2kubmFtZWRUeXBlczt2YXIgcGk9Y2kuYnVpbHRJblR5cGVzLmFycmF5O3ZhciBmaT1jaS5idWlsdEluVHlwZXMub2JqZWN0O3ZhciBkaT1fczt2YXIgbWk9enQ7dmFyIHlpPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGdpKGUsdCxyKXtpZighZSl7cmV0dXJuIHJ9bWkuZml4RmF1bHR5TG9jYXRpb25zKGUsdCk7aWYocil7aWYoaGkuTm9kZS5jaGVjayhlKSYmaGkuU291cmNlTG9jYXRpb24uY2hlY2soZS5sb2MpKXt2YXIgcz1yLmxlbmd0aC0xO2Zvcig7cz49MDstLXMpe3ZhciBpPXJbc107aWYoaSYmaS5sb2MmJm1pLmNvbXBhcmVQb3MoaS5sb2MuZW5kLGUubG9jLnN0YXJ0KTw9MCl7YnJlYWt9fXIuc3BsaWNlKHMrMSwwLGUpO3JldHVybiByfX1lbHNle3ZhciBuPXlpLmdldChlKTtpZihuKXtyZXR1cm4gbn19dmFyIGE7aWYocGkuY2hlY2soZSkpe2E9T2JqZWN0LmtleXMoZSl9ZWxzZSBpZihmaS5jaGVjayhlKSl7YT1jaS5nZXRGaWVsZE5hbWVzKGUpfWVsc2V7cmV0dXJuIHJ9aWYoIXIpe3lpLnNldChlLHI9W10pfWZvcih2YXIgcz0wLG89YS5sZW5ndGg7czxvOysrcyl7Z2koZVthW3NdXSx0LHIpfXJldHVybiByfWZ1bmN0aW9uIHhpKGUsdCxyKXt2YXIgcz1naShlLHIpO3ZhciBpPTA7dmFyIG49cyYmcy5sZW5ndGg7dmFyIGE7dmFyIG87d2hpbGUodHlwZW9mIG49PT0ibnVtYmVyIiYmaTxuKXt2YXIgbD1pK24+PjE7dmFyIHU9c1tsXTtpZihtaS5jb21wYXJlUG9zKHUubG9jLnN0YXJ0LHQubG9jLnN0YXJ0KTw9MCYmbWkuY29tcGFyZVBvcyh0LmxvYy5lbmQsdS5sb2MuZW5kKTw9MCl7eGkodC5lbmNsb3NpbmdOb2RlPXUsdCxyKTtyZXR1cm59aWYobWkuY29tcGFyZVBvcyh1LmxvYy5lbmQsdC5sb2Muc3RhcnQpPD0wKXthPXU7aT1sKzE7Y29udGludWV9aWYobWkuY29tcGFyZVBvcyh0LmxvYy5lbmQsdS5sb2Muc3RhcnQpPD0wKXtvPXU7bj1sO2NvbnRpbnVlfXRocm93IG5ldyBFcnJvcigiQ29tbWVudCBsb2NhdGlvbiBvdmVybGFwcyB3aXRoIG5vZGUgbG9jYXRpb24iKX1pZihhKXt0LnByZWNlZGluZ05vZGU9YX1pZihvKXt0LmZvbGxvd2luZ05vZGU9b319ZnVuY3Rpb24gdmkoZSx0LHIpe2lmKCFwaS5jaGVjayhlKSl7cmV0dXJufXZhciBzPVtdO2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5sb2MubGluZXM9cjt4aSh0LGUscik7dmFyIGk9ZS5wcmVjZWRpbmdOb2RlO3ZhciBuPWUuZW5jbG9zaW5nTm9kZTt2YXIgYT1lLmZvbGxvd2luZ05vZGU7aWYoaSYmYSl7dmFyIG89cy5sZW5ndGg7aWYobz4wKXt2YXIgbD1zW28tMV07dWkuZGVmYXVsdC5zdHJpY3RFcXVhbChsLnByZWNlZGluZ05vZGU9PT1lLnByZWNlZGluZ05vZGUsbC5mb2xsb3dpbmdOb2RlPT09ZS5mb2xsb3dpbmdOb2RlKTtpZihsLmZvbGxvd2luZ05vZGUhPT1lLmZvbGxvd2luZ05vZGUpe2JpKHMscil9fXMucHVzaChlKX1lbHNlIGlmKGkpe2JpKHMscik7QWkoaSxlKX1lbHNlIGlmKGEpe2JpKHMscik7U2koYSxlKX1lbHNlIGlmKG4pe2JpKHMscik7VGkobixlKX1lbHNle3Rocm93IG5ldyBFcnJvcigiQVNUIGNvbnRhaW5zIG5vIG5vZGVzIGF0IGFsbD8iKX19KSk7YmkocyxyKTtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2RlbGV0ZSBlLnByZWNlZGluZ05vZGU7ZGVsZXRlIGUuZW5jbG9zaW5nTm9kZTtkZWxldGUgZS5mb2xsb3dpbmdOb2RlfSkpfW9pLmF0dGFjaD12aTtmdW5jdGlvbiBiaShlLHQpe3ZhciByPWUubGVuZ3RoO2lmKHI9PT0wKXtyZXR1cm59dmFyIHM9ZVswXS5wcmVjZWRpbmdOb2RlO3ZhciBpPWVbMF0uZm9sbG93aW5nTm9kZTt2YXIgbj1pLmxvYy5zdGFydDt2YXIgYT1yO3ZhciBvO2Zvcig7YT4wOy0tYSl7bz1lW2EtMV07dWkuZGVmYXVsdC5zdHJpY3RFcXVhbChvLnByZWNlZGluZ05vZGUscyk7dWkuZGVmYXVsdC5zdHJpY3RFcXVhbChvLmZvbGxvd2luZ05vZGUsaSk7dmFyIGw9dC5zbGljZVN0cmluZyhvLmxvYy5lbmQsbik7aWYoL1xTLy50ZXN0KGwpKXticmVha31uPW8ubG9jLnN0YXJ0fXdoaWxlKGE8PXImJihvPWVbYV0pJiYoby50eXBlPT09IkxpbmUifHxvLnR5cGU9PT0iQ29tbWVudExpbmUiKSYmby5sb2Muc3RhcnQuY29sdW1uPmkubG9jLnN0YXJ0LmNvbHVtbil7KythfWUuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtpZih0PGEpe0FpKHMsZSl9ZWxzZXtTaShpLGUpfX0pKTtlLmxlbmd0aD0wfWZ1bmN0aW9uIEVpKGUsdCl7dmFyIHI9ZS5jb21tZW50c3x8KGUuY29tbWVudHM9W10pO3IucHVzaCh0KX1mdW5jdGlvbiBTaShlLHQpe3QubGVhZGluZz10cnVlO3QudHJhaWxpbmc9ZmFsc2U7RWkoZSx0KX1mdW5jdGlvbiBUaShlLHQpe3QubGVhZGluZz1mYWxzZTt0LnRyYWlsaW5nPWZhbHNlO0VpKGUsdCl9ZnVuY3Rpb24gQWkoZSx0KXt0LmxlYWRpbmc9ZmFsc2U7dC50cmFpbGluZz10cnVlO0VpKGUsdCl9ZnVuY3Rpb24gd2koZSx0KXt2YXIgcj1lLmdldFZhbHVlKCk7aGkuQ29tbWVudC5hc3NlcnQocik7dmFyIHM9ci5sb2M7dmFyIGk9cyYmcy5saW5lczt2YXIgbj1bdChlKV07aWYoci50cmFpbGluZyl7bi5wdXNoKCJcbiIpfWVsc2UgaWYoaSBpbnN0YW5jZW9mIGRpLkxpbmVzKXt2YXIgYT1pLnNsaWNlKHMuZW5kLGkuc2tpcFNwYWNlcyhzLmVuZCl8fGkubGFzdFBvcygpKTtpZihhLmxlbmd0aD09PTEpe24ucHVzaChhKX1lbHNle24ucHVzaChuZXcgQXJyYXkoYS5sZW5ndGgpLmpvaW4oIlxuIikpfX1lbHNle24ucHVzaCgiXG4iKX1yZXR1cm4gZGkuY29uY2F0KG4pfWZ1bmN0aW9uIENpKGUsdCl7dmFyIHI9ZS5nZXRWYWx1ZShlKTtoaS5Db21tZW50LmFzc2VydChyKTt2YXIgcz1yLmxvYzt2YXIgaT1zJiZzLmxpbmVzO3ZhciBuPVtdO2lmKGkgaW5zdGFuY2VvZiBkaS5MaW5lcyl7dmFyIGE9aS5za2lwU3BhY2VzKHMuc3RhcnQsdHJ1ZSl8fGkuZmlyc3RQb3MoKTt2YXIgbz1pLnNsaWNlKGEscy5zdGFydCk7aWYoby5sZW5ndGg9PT0xKXtuLnB1c2gobyl9ZWxzZXtuLnB1c2gobmV3IEFycmF5KG8ubGVuZ3RoKS5qb2luKCJcbiIpKX19bi5wdXNoKHQoZSkpO3JldHVybiBkaS5jb25jYXQobil9ZnVuY3Rpb24gUGkoZSx0KXt2YXIgcj1lLmdldFZhbHVlKCk7dmFyIHM9dChlKTt2YXIgaT1oaS5Ob2RlLmNoZWNrKHIpJiZjaS5nZXRGaWVsZFZhbHVlKHIsImNvbW1lbnRzIik7aWYoIWl8fGkubGVuZ3RoPT09MCl7cmV0dXJuIHN9dmFyIG49W107dmFyIGE9W3NdO2UuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHM9ZS5nZXRWYWx1ZSgpO3ZhciBpPWNpLmdldEZpZWxkVmFsdWUocywibGVhZGluZyIpO3ZhciBvPWNpLmdldEZpZWxkVmFsdWUocywidHJhaWxpbmciKTtpZihpfHxvJiYhKGhpLlN0YXRlbWVudC5jaGVjayhyKXx8cy50eXBlPT09IkJsb2NrInx8cy50eXBlPT09IkNvbW1lbnRCbG9jayIpKXtuLnB1c2god2koZSx0KSl9ZWxzZSBpZihvKXthLnB1c2goQ2koZSx0KSl9fSksImNvbW1lbnRzIik7bi5wdXNoLmFwcGx5KG4sYSk7cmV0dXJuIGRpLmNvbmNhdChuKX1vaS5wcmludENvbW1lbnRzPVBpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3ZSwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTt3ZS5wYXJzZT12b2lkIDA7dmFyIERpPVI7dmFyIGtpPURpLl9faW1wb3J0RGVmYXVsdChSdCk7dmFyIE5pPURpLl9faW1wb3J0U3RhcihqKTt2YXIgSWk9TmkuYnVpbGRlcnM7dmFyIEZpPU5pLmJ1aWx0SW5UeXBlcy5vYmplY3Q7dmFyIE1pPU5pLmJ1aWx0SW5UeXBlcy5hcnJheTt2YXIgX2k9anQ7dmFyIE9pPV9zO3ZhciBMaT1vaTt2YXIgQmk9RGkuX19pbXBvcnRTdGFyKHp0KTtmdW5jdGlvbiBSaShlLHQpe3Q9X2kubm9ybWFsaXplKHQpO3ZhciByPU9pLmZyb21TdHJpbmcoZSx0KTt2YXIgcz1yLnRvU3RyaW5nKHt0YWJXaWR0aDp0LnRhYldpZHRoLHJldXNlV2hpdGVzcGFjZTpmYWxzZSx1c2VUYWJzOmZhbHNlfSk7dmFyIGk9W107dmFyIG49dC5wYXJzZXIucGFyc2Uocyx7anN4OnRydWUsbG9jOnRydWUsbG9jYXRpb25zOnRydWUscmFuZ2U6dC5yYW5nZSxjb21tZW50OnRydWUsb25Db21tZW50OmksdG9sZXJhbnQ6QmkuZ2V0T3B0aW9uKHQsInRvbGVyYW50Iix0cnVlKSxlY21hVmVyc2lvbjo2LHNvdXJjZVR5cGU6QmkuZ2V0T3B0aW9uKHQsInNvdXJjZVR5cGUiLCJtb2R1bGUiKX0pO3ZhciBhPUFycmF5LmlzQXJyYXkobi50b2tlbnMpP24udG9rZW5zOmxzLmV4cG9ydHMudG9rZW5pemUocyx7bG9jOnRydWV9KTtkZWxldGUgbi50b2tlbnM7YS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZih0eXBlb2YgZS52YWx1ZSE9PSJzdHJpbmciKXtlLnZhbHVlPXIuc2xpY2VTdHJpbmcoZS5sb2Muc3RhcnQsZS5sb2MuZW5kKX19KSk7aWYoQXJyYXkuaXNBcnJheShuLmNvbW1lbnRzKSl7aT1uLmNvbW1lbnRzO2RlbGV0ZSBuLmNvbW1lbnRzfWlmKG4ubG9jKXtCaS5maXhGYXVsdHlMb2NhdGlvbnMobixyKX1lbHNle24ubG9jPXtzdGFydDpyLmZpcnN0UG9zKCksZW5kOnIubGFzdFBvcygpfX1uLmxvYy5saW5lcz1yO24ubG9jLmluZGVudD0wO3ZhciBvO3ZhciBsO2lmKG4udHlwZT09PSJQcm9ncmFtIil7bD1uO289SWkuZmlsZShuLHQuc291cmNlRmlsZU5hbWV8fG51bGwpO28ubG9jPXtzdGFydDpyLmZpcnN0UG9zKCksZW5kOnIubGFzdFBvcygpLGxpbmVzOnIsaW5kZW50OjB9fWVsc2UgaWYobi50eXBlPT09IkZpbGUiKXtvPW47bD1vLnByb2dyYW19aWYodC50b2tlbnMpe28udG9rZW5zPWF9dmFyIHU9QmkuZ2V0VHJ1ZUxvYyh7dHlwZTpsLnR5cGUsbG9jOmwubG9jLGJvZHk6W10sY29tbWVudHM6aX0scik7bC5sb2Muc3RhcnQ9dS5zdGFydDtsLmxvYy5lbmQ9dS5lbmQ7TGkuYXR0YWNoKGksbC5ib2R5Lmxlbmd0aD9vLnByb2dyYW06byxyKTtyZXR1cm4gbmV3IGppKHIsYSkuY29weShvKX13ZS5wYXJzZT1SaTt2YXIgamk9ZnVuY3Rpb24gZSh0LHIpe2tpLmRlZmF1bHQub2sodGhpcyBpbnN0YW5jZW9mIGUpO3RoaXMubGluZXM9dDt0aGlzLnRva2Vucz1yO3RoaXMuc3RhcnRUb2tlbkluZGV4PTA7dGhpcy5lbmRUb2tlbkluZGV4PXIubGVuZ3RoO3RoaXMuaW5kZW50PTA7dGhpcy5zZWVuPW5ldyBNYXB9O3ZhciBVaT1qaS5wcm90b3R5cGU7VWkuY29weT1mdW5jdGlvbihlKXtpZih0aGlzLnNlZW4uaGFzKGUpKXtyZXR1cm4gdGhpcy5zZWVuLmdldChlKX1pZihNaS5jaGVjayhlKSl7dmFyIHQ9bmV3IEFycmF5KGUubGVuZ3RoKTt0aGlzLnNlZW4uc2V0KGUsdCk7ZS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3Rbcl09dGhpcy5jb3B5KGUpfSksdGhpcyk7cmV0dXJuIHR9aWYoIUZpLmNoZWNrKGUpKXtyZXR1cm4gZX1CaS5maXhGYXVsdHlMb2NhdGlvbnMoZSx0aGlzLmxpbmVzKTt2YXIgcj1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSx7b3JpZ2luYWw6e3ZhbHVlOmUsY29uZmlndXJhYmxlOmZhbHNlLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZX19KTt0aGlzLnNlZW4uc2V0KGUscik7dmFyIHM9ZS5sb2M7dmFyIGk9dGhpcy5pbmRlbnQ7dmFyIG49aTt2YXIgYT10aGlzLnN0YXJ0VG9rZW5JbmRleDt2YXIgbz10aGlzLmVuZFRva2VuSW5kZXg7aWYocyl7aWYoZS50eXBlPT09IkJsb2NrInx8ZS50eXBlPT09IkxpbmUifHxlLnR5cGU9PT0iQ29tbWVudEJsb2NrInx8ZS50eXBlPT09IkNvbW1lbnRMaW5lInx8dGhpcy5saW5lcy5pc1ByZWNlZGVkT25seUJ5V2hpdGVzcGFjZShzLnN0YXJ0KSl7bj10aGlzLmluZGVudD1zLnN0YXJ0LmNvbHVtbn1zLmxpbmVzPXRoaXMubGluZXM7cy50b2tlbnM9dGhpcy50b2tlbnM7cy5pbmRlbnQ9bjt0aGlzLmZpbmRUb2tlblJhbmdlKHMpfXZhciBsPU9iamVjdC5rZXlzKGUpO3ZhciB1PWwubGVuZ3RoO2Zvcih2YXIgYz0wO2M8dTsrK2Mpe3ZhciBoPWxbY107aWYoaD09PSJsb2MiKXtyW2hdPWVbaF19ZWxzZSBpZihoPT09InRva2VucyImJmUudHlwZT09PSJGaWxlIil7cltoXT1lW2hdfWVsc2V7cltoXT10aGlzLmNvcHkoZVtoXSl9fXRoaXMuaW5kZW50PWk7dGhpcy5zdGFydFRva2VuSW5kZXg9YTt0aGlzLmVuZFRva2VuSW5kZXg9bztyZXR1cm4gcn07VWkuZmluZFRva2VuUmFuZ2U9ZnVuY3Rpb24oZSl7d2hpbGUodGhpcy5zdGFydFRva2VuSW5kZXg+MCl7dmFyIHQ9ZS50b2tlbnNbdGhpcy5zdGFydFRva2VuSW5kZXhdO2lmKEJpLmNvbXBhcmVQb3MoZS5zdGFydCx0LmxvYy5zdGFydCk8MCl7LS10aGlzLnN0YXJ0VG9rZW5JbmRleH1lbHNlIGJyZWFrfXdoaWxlKHRoaXMuZW5kVG9rZW5JbmRleDxlLnRva2Vucy5sZW5ndGgpe3ZhciB0PWUudG9rZW5zW3RoaXMuZW5kVG9rZW5JbmRleF07aWYoQmkuY29tcGFyZVBvcyh0LmxvYy5lbmQsZS5lbmQpPDApeysrdGhpcy5lbmRUb2tlbkluZGV4fWVsc2UgYnJlYWt9d2hpbGUodGhpcy5zdGFydFRva2VuSW5kZXg8dGhpcy5lbmRUb2tlbkluZGV4KXt2YXIgdD1lLnRva2Vuc1t0aGlzLnN0YXJ0VG9rZW5JbmRleF07aWYoQmkuY29tcGFyZVBvcyh0LmxvYy5zdGFydCxlLnN0YXJ0KTwwKXsrK3RoaXMuc3RhcnRUb2tlbkluZGV4fWVsc2UgYnJlYWt9ZS5zdGFydC50b2tlbj10aGlzLnN0YXJ0VG9rZW5JbmRleDt3aGlsZSh0aGlzLmVuZFRva2VuSW5kZXg+dGhpcy5zdGFydFRva2VuSW5kZXgpe3ZhciB0PWUudG9rZW5zW3RoaXMuZW5kVG9rZW5JbmRleC0xXTtpZihCaS5jb21wYXJlUG9zKGUuZW5kLHQubG9jLmVuZCk8MCl7LS10aGlzLmVuZFRva2VuSW5kZXh9ZWxzZSBicmVha31lLmVuZC50b2tlbj10aGlzLmVuZFRva2VuSW5kZXh9O3ZhciB6aT17fTt2YXIgVmk9e307dmFyIHFpPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxaSwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTt2YXIgR2k9Ujt2YXIgWGk9R2kuX19pbXBvcnREZWZhdWx0KFJ0KTt2YXIgSmk9R2kuX19pbXBvcnRTdGFyKGopO3ZhciBIaT1HaS5fX2ltcG9ydFN0YXIoenQpO3ZhciBXaT1KaS5uYW1lZFR5cGVzO3ZhciBLaT1KaS5idWlsdEluVHlwZXMuYXJyYXk7dmFyICRpPUppLmJ1aWx0SW5UeXBlcy5udW1iZXI7dmFyIFlpPXt9O1tbInx8Il0sWyImJiJdLFsifCJdLFsiXiJdLFsiJiJdLFsiPT0iLCI9PT0iLCIhPSIsIiE9PSJdLFsiPCIsIj4iLCI8PSIsIj49IiwiaW4iLCJpbnN0YW5jZW9mIl0sWyI+PiIsIjw8IiwiPj4+Il0sWyIrIiwiLSJdLFsiKiIsIi8iLCIlIl0sWyIqKiJdXS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7WWlbZV09dH0pKX0pKTt2YXIgUWk9ZnVuY3Rpb24gZSh0KXtYaS5kZWZhdWx0Lm9rKHRoaXMgaW5zdGFuY2VvZiBlKTt0aGlzLnN0YWNrPVt0XX07dmFyIFppPVFpLnByb3RvdHlwZTtRaS5mcm9tPWZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBRaSl7cmV0dXJuIGUuY29weSgpfWlmKGUgaW5zdGFuY2VvZiBKaS5Ob2RlUGF0aCl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShRaS5wcm90b3R5cGUpO3ZhciByPVtlLnZhbHVlXTtmb3IodmFyIHM9dm9pZCAwO3M9ZS5wYXJlbnRQYXRoO2U9cylyLnB1c2goZS5uYW1lLHMudmFsdWUpO3Quc3RhY2s9ci5yZXZlcnNlKCk7cmV0dXJuIHR9cmV0dXJuIG5ldyBRaShlKX07WmkuY29weT1mdW5jdGlvbiBlKCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShRaS5wcm90b3R5cGUpO2Uuc3RhY2s9dGhpcy5zdGFjay5zbGljZSgwKTtyZXR1cm4gZX07WmkuZ2V0TmFtZT1mdW5jdGlvbiBlKCl7dmFyIHQ9dGhpcy5zdGFjazt2YXIgcj10Lmxlbmd0aDtpZihyPjEpe3JldHVybiB0W3ItMl19cmV0dXJuIG51bGx9O1ppLmdldFZhbHVlPWZ1bmN0aW9uIGUoKXt2YXIgdD10aGlzLnN0YWNrO3JldHVybiB0W3QubGVuZ3RoLTFdfTtaaS52YWx1ZUlzRHVwbGljYXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGFjazt2YXIgdD1lLmxlbmd0aC0xO3JldHVybiBlLmxhc3RJbmRleE9mKGVbdF0sdC0xKT49MH07ZnVuY3Rpb24gZW4oZSx0KXt2YXIgcj1lLnN0YWNrO2Zvcih2YXIgcz1yLmxlbmd0aC0xO3M+PTA7cy09Mil7dmFyIGk9cltzXTtpZihXaS5Ob2RlLmNoZWNrKGkpJiYtLXQ8MCl7cmV0dXJuIGl9fXJldHVybiBudWxsfVppLmdldE5vZGU9ZnVuY3Rpb24gZSh0KXtpZih0PT09dm9pZCAwKXt0PTB9cmV0dXJuIGVuKHRoaXMsfn50KX07WmkuZ2V0UGFyZW50Tm9kZT1mdW5jdGlvbiBlKHQpe2lmKHQ9PT12b2lkIDApe3Q9MH1yZXR1cm4gZW4odGhpcyx+fnQrMSl9O1ppLmdldFJvb3RWYWx1ZT1mdW5jdGlvbiBlKCl7dmFyIHQ9dGhpcy5zdGFjaztpZih0Lmxlbmd0aCUyPT09MCl7cmV0dXJuIHRbMV19cmV0dXJuIHRbMF19O1ppLmNhbGw9ZnVuY3Rpb24gZSh0KXt2YXIgcj10aGlzLnN0YWNrO3ZhciBzPXIubGVuZ3RoO3ZhciBpPXJbcy0xXTt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO2Zvcih2YXIgYT0xO2E8bjsrK2Epe3ZhciBvPWFyZ3VtZW50c1thXTtpPWlbb107ci5wdXNoKG8saSl9dmFyIGw9dCh0aGlzKTtyLmxlbmd0aD1zO3JldHVybiBsfTtaaS5lYWNoPWZ1bmN0aW9uIGUodCl7dmFyIHI9dGhpcy5zdGFjazt2YXIgcz1yLmxlbmd0aDt2YXIgaT1yW3MtMV07dmFyIG49YXJndW1lbnRzLmxlbmd0aDtmb3IodmFyIGE9MTthPG47KythKXt2YXIgbz1hcmd1bWVudHNbYV07aT1pW29dO3IucHVzaChvLGkpfWZvcih2YXIgYT0wO2E8aS5sZW5ndGg7KythKXtpZihhIGluIGkpe3IucHVzaChhLGlbYV0pO3QodGhpcyk7ci5sZW5ndGgtPTJ9fXIubGVuZ3RoPXN9O1ppLm1hcD1mdW5jdGlvbiBlKHQpe3ZhciByPXRoaXMuc3RhY2s7dmFyIHM9ci5sZW5ndGg7dmFyIGk9cltzLTFdO3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7Zm9yKHZhciBhPTE7YTxuOysrYSl7dmFyIG89YXJndW1lbnRzW2FdO2k9aVtvXTtyLnB1c2gobyxpKX12YXIgbD1uZXcgQXJyYXkoaS5sZW5ndGgpO2Zvcih2YXIgYT0wO2E8aS5sZW5ndGg7KythKXtpZihhIGluIGkpe3IucHVzaChhLGlbYV0pO2xbYV09dCh0aGlzLGEpO3IubGVuZ3RoLT0yfX1yLmxlbmd0aD1zO3JldHVybiBsfTtaaS5oYXNQYXJlbnM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldE5vZGUoKTt2YXIgdD10aGlzLmdldFByZXZUb2tlbihlKTtpZighdCl7cmV0dXJuIGZhbHNlfXZhciByPXRoaXMuZ2V0TmV4dFRva2VuKGUpO2lmKCFyKXtyZXR1cm4gZmFsc2V9aWYodC52YWx1ZT09PSIoIil7aWYoci52YWx1ZT09PSIpIil7cmV0dXJuIHRydWV9dmFyIHM9IXRoaXMuY2FuQmVGaXJzdEluU3RhdGVtZW50KCkmJnRoaXMuZmlyc3RJblN0YXRlbWVudCgpJiYhdGhpcy5uZWVkc1BhcmVucyh0cnVlKTtpZihzKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfTtaaS5nZXRQcmV2VG9rZW49ZnVuY3Rpb24oZSl7ZT1lfHx0aGlzLmdldE5vZGUoKTt2YXIgdD1lJiZlLmxvYzt2YXIgcj10JiZ0LnRva2VucztpZihyJiZ0LnN0YXJ0LnRva2VuPjApe3ZhciBzPXJbdC5zdGFydC50b2tlbi0xXTtpZihzKXt2YXIgaT10aGlzLmdldFJvb3RWYWx1ZSgpLmxvYztpZihIaS5jb21wYXJlUG9zKGkuc3RhcnQscy5sb2Muc3RhcnQpPD0wKXtyZXR1cm4gc319fXJldHVybiBudWxsfTtaaS5nZXROZXh0VG9rZW49ZnVuY3Rpb24oZSl7ZT1lfHx0aGlzLmdldE5vZGUoKTt2YXIgdD1lJiZlLmxvYzt2YXIgcj10JiZ0LnRva2VucztpZihyJiZ0LmVuZC50b2tlbjxyLmxlbmd0aCl7dmFyIHM9clt0LmVuZC50b2tlbl07aWYocyl7dmFyIGk9dGhpcy5nZXRSb290VmFsdWUoKS5sb2M7aWYoSGkuY29tcGFyZVBvcyhzLmxvYy5lbmQsaS5lbmQpPD0wKXtyZXR1cm4gc319fXJldHVybiBudWxsfTtaaS5uZWVkc1BhcmVucz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldE5vZGUoKTtpZih0LnR5cGU9PT0iQXNzaWdubWVudEV4cHJlc3Npb24iJiZ0LmxlZnQudHlwZT09PSJPYmplY3RQYXR0ZXJuIil7cmV0dXJuIHRydWV9dmFyIHI9dGhpcy5nZXRQYXJlbnROb2RlKCk7aWYoIXIpe3JldHVybiBmYWxzZX12YXIgcz10aGlzLmdldE5hbWUoKTtpZih0aGlzLmdldFZhbHVlKCkhPT10KXtyZXR1cm4gZmFsc2V9aWYoV2kuU3RhdGVtZW50LmNoZWNrKHQpKXtyZXR1cm4gZmFsc2V9aWYodC50eXBlPT09IklkZW50aWZpZXIiKXtyZXR1cm4gZmFsc2V9aWYoci50eXBlPT09IlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uInx8dC5leHRyYSYmdC5leHRyYS5wYXJlbnRoZXNpemVkKXtyZXR1cm4gZmFsc2V9c3dpdGNoKHQudHlwZSl7Y2FzZSJVbmFyeUV4cHJlc3Npb24iOmNhc2UiU3ByZWFkRWxlbWVudCI6Y2FzZSJTcHJlYWRQcm9wZXJ0eSI6cmV0dXJuIHIudHlwZT09PSJNZW1iZXJFeHByZXNzaW9uIiYmcz09PSJvYmplY3QiJiZyLm9iamVjdD09PXQ7Y2FzZSJCaW5hcnlFeHByZXNzaW9uIjpjYXNlIkxvZ2ljYWxFeHByZXNzaW9uIjpzd2l0Y2goci50eXBlKXtjYXNlIkNhbGxFeHByZXNzaW9uIjpyZXR1cm4gcz09PSJjYWxsZWUiJiZyLmNhbGxlZT09PXQ7Y2FzZSJVbmFyeUV4cHJlc3Npb24iOmNhc2UiU3ByZWFkRWxlbWVudCI6Y2FzZSJTcHJlYWRQcm9wZXJ0eSI6cmV0dXJuIHRydWU7Y2FzZSJNZW1iZXJFeHByZXNzaW9uIjpyZXR1cm4gcz09PSJvYmplY3QiJiZyLm9iamVjdD09PXQ7Y2FzZSJCaW5hcnlFeHByZXNzaW9uIjpjYXNlIkxvZ2ljYWxFeHByZXNzaW9uIjp7dmFyIGk9ci5vcGVyYXRvcjt2YXIgbj1ZaVtpXTt2YXIgYT10Lm9wZXJhdG9yO3ZhciBvPVlpW2FdO2lmKG4+byl7cmV0dXJuIHRydWV9aWYobj09PW8mJnM9PT0icmlnaHQiKXtYaS5kZWZhdWx0LnN0cmljdEVxdWFsKHIucmlnaHQsdCk7cmV0dXJuIHRydWV9YnJlYWt9ZGVmYXVsdDpyZXR1cm4gZmFsc2V9YnJlYWs7Y2FzZSJTZXF1ZW5jZUV4cHJlc3Npb24iOnN3aXRjaChyLnR5cGUpe2Nhc2UiUmV0dXJuU3RhdGVtZW50IjpyZXR1cm4gZmFsc2U7Y2FzZSJGb3JTdGF0ZW1lbnQiOnJldHVybiBmYWxzZTtjYXNlIkV4cHJlc3Npb25TdGF0ZW1lbnQiOnJldHVybiBzIT09ImV4cHJlc3Npb24iO2RlZmF1bHQ6cmV0dXJuIHRydWV9Y2FzZSJJbnRlcnNlY3Rpb25UeXBlQW5ub3RhdGlvbiI6Y2FzZSJVbmlvblR5cGVBbm5vdGF0aW9uIjpyZXR1cm4gci50eXBlPT09Ik51bGxhYmxlVHlwZUFubm90YXRpb24iO2Nhc2UiTGl0ZXJhbCI6cmV0dXJuIHIudHlwZT09PSJNZW1iZXJFeHByZXNzaW9uIiYmJGkuY2hlY2sodC52YWx1ZSkmJnM9PT0ib2JqZWN0IiYmci5vYmplY3Q9PT10O2Nhc2UiTnVtZXJpY0xpdGVyYWwiOnJldHVybiByLnR5cGU9PT0iTWVtYmVyRXhwcmVzc2lvbiImJnM9PT0ib2JqZWN0IiYmci5vYmplY3Q9PT10O2Nhc2UiWWllbGRFeHByZXNzaW9uIjpjYXNlIkF3YWl0RXhwcmVzc2lvbiI6Y2FzZSJBc3NpZ25tZW50RXhwcmVzc2lvbiI6Y2FzZSJDb25kaXRpb25hbEV4cHJlc3Npb24iOnN3aXRjaChyLnR5cGUpe2Nhc2UiVW5hcnlFeHByZXNzaW9uIjpjYXNlIlNwcmVhZEVsZW1lbnQiOmNhc2UiU3ByZWFkUHJvcGVydHkiOmNhc2UiQmluYXJ5RXhwcmVzc2lvbiI6Y2FzZSJMb2dpY2FsRXhwcmVzc2lvbiI6cmV0dXJuIHRydWU7Y2FzZSJDYWxsRXhwcmVzc2lvbiI6Y2FzZSJOZXdFeHByZXNzaW9uIjpyZXR1cm4gcz09PSJjYWxsZWUiJiZyLmNhbGxlZT09PXQ7Y2FzZSJDb25kaXRpb25hbEV4cHJlc3Npb24iOnJldHVybiBzPT09InRlc3QiJiZyLnRlc3Q9PT10O2Nhc2UiTWVtYmVyRXhwcmVzc2lvbiI6cmV0dXJuIHM9PT0ib2JqZWN0IiYmci5vYmplY3Q9PT10O2RlZmF1bHQ6cmV0dXJuIGZhbHNlfWNhc2UiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iOmlmKFdpLkNhbGxFeHByZXNzaW9uLmNoZWNrKHIpJiZzPT09ImNhbGxlZSImJnIuY2FsbGVlPT09dCl7cmV0dXJuIHRydWV9aWYoV2kuTWVtYmVyRXhwcmVzc2lvbi5jaGVjayhyKSYmcz09PSJvYmplY3QiJiZyLm9iamVjdD09PXQpe3JldHVybiB0cnVlfWlmKFdpLlRTQXNFeHByZXNzaW9uJiZXaS5UU0FzRXhwcmVzc2lvbi5jaGVjayhyKSYmcz09PSJleHByZXNzaW9uIiYmci5leHByZXNzaW9uPT09dCl7cmV0dXJuIHRydWV9cmV0dXJuIHRuKHIpO2Nhc2UiT2JqZWN0RXhwcmVzc2lvbiI6aWYoci50eXBlPT09IkFycm93RnVuY3Rpb25FeHByZXNzaW9uIiYmcz09PSJib2R5IiYmci5ib2R5PT09dCl7cmV0dXJuIHRydWV9YnJlYWs7Y2FzZSJUU0FzRXhwcmVzc2lvbiI6aWYoci50eXBlPT09IkFycm93RnVuY3Rpb25FeHByZXNzaW9uIiYmcz09PSJib2R5IiYmci5ib2R5PT09dCYmdC5leHByZXNzaW9uLnR5cGU9PT0iT2JqZWN0RXhwcmVzc2lvbiIpe3JldHVybiB0cnVlfWJyZWFrO2Nhc2UiQ2FsbEV4cHJlc3Npb24iOmlmKHM9PT0iZGVjbGFyYXRpb24iJiZXaS5FeHBvcnREZWZhdWx0RGVjbGFyYXRpb24uY2hlY2socikmJldpLkZ1bmN0aW9uRXhwcmVzc2lvbi5jaGVjayh0LmNhbGxlZSkpe3JldHVybiB0cnVlfX1pZihyLnR5cGU9PT0iTmV3RXhwcmVzc2lvbiImJnM9PT0iY2FsbGVlIiYmci5jYWxsZWU9PT10KXtyZXR1cm4gcm4odCl9aWYoZSE9PXRydWUmJiF0aGlzLmNhbkJlRmlyc3RJblN0YXRlbWVudCgpJiZ0aGlzLmZpcnN0SW5TdGF0ZW1lbnQoKSl7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfTtmdW5jdGlvbiB0bihlKXtyZXR1cm4gV2kuQmluYXJ5RXhwcmVzc2lvbi5jaGVjayhlKXx8V2kuTG9naWNhbEV4cHJlc3Npb24uY2hlY2soZSl9ZnVuY3Rpb24gcm4oZSl7aWYoV2kuQ2FsbEV4cHJlc3Npb24uY2hlY2soZSkpe3JldHVybiB0cnVlfWlmKEtpLmNoZWNrKGUpKXtyZXR1cm4gZS5zb21lKHJuKX1pZihXaS5Ob2RlLmNoZWNrKGUpKXtyZXR1cm4gSmkuc29tZUZpZWxkKGUsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHJuKHQpfSkpfXJldHVybiBmYWxzZX1aaS5jYW5CZUZpcnN0SW5TdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldE5vZGUoKTtpZihXaS5GdW5jdGlvbkV4cHJlc3Npb24uY2hlY2soZSkpe3JldHVybiBmYWxzZX1pZihXaS5PYmplY3RFeHByZXNzaW9uLmNoZWNrKGUpKXtyZXR1cm4gZmFsc2V9aWYoV2kuQ2xhc3NFeHByZXNzaW9uLmNoZWNrKGUpKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9O1ppLmZpcnN0SW5TdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YWNrO3ZhciB0LHI7dmFyIHMsaTtmb3IodmFyIG49ZS5sZW5ndGgtMTtuPj0wO24tPTIpe2lmKFdpLk5vZGUuY2hlY2soZVtuXSkpe3M9dDtpPXI7dD1lW24tMV07cj1lW25dfWlmKCFyfHwhaSl7Y29udGludWV9aWYoV2kuQmxvY2tTdGF0ZW1lbnQuY2hlY2socikmJnQ9PT0iYm9keSImJnM9PT0wKXtYaS5kZWZhdWx0LnN0cmljdEVxdWFsKHIuYm9keVswXSxpKTtyZXR1cm4gdHJ1ZX1pZihXaS5FeHByZXNzaW9uU3RhdGVtZW50LmNoZWNrKHIpJiZzPT09ImV4cHJlc3Npb24iKXtYaS5kZWZhdWx0LnN0cmljdEVxdWFsKHIuZXhwcmVzc2lvbixpKTtyZXR1cm4gdHJ1ZX1pZihXaS5Bc3NpZ25tZW50RXhwcmVzc2lvbi5jaGVjayhyKSYmcz09PSJsZWZ0Iil7WGkuZGVmYXVsdC5zdHJpY3RFcXVhbChyLmxlZnQsaSk7cmV0dXJuIHRydWV9aWYoV2kuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24uY2hlY2socikmJnM9PT0iYm9keSIpe1hpLmRlZmF1bHQuc3RyaWN0RXF1YWwoci5ib2R5LGkpO3JldHVybiB0cnVlfWlmKFdpLlNlcXVlbmNlRXhwcmVzc2lvbi5jaGVjayhyKSYmdD09PSJleHByZXNzaW9ucyImJnM9PT0wKXtYaS5kZWZhdWx0LnN0cmljdEVxdWFsKHIuZXhwcmVzc2lvbnNbMF0saSk7Y29udGludWV9aWYoV2kuQ2FsbEV4cHJlc3Npb24uY2hlY2socikmJnM9PT0iY2FsbGVlIil7WGkuZGVmYXVsdC5zdHJpY3RFcXVhbChyLmNhbGxlZSxpKTtjb250aW51ZX1pZihXaS5NZW1iZXJFeHByZXNzaW9uLmNoZWNrKHIpJiZzPT09Im9iamVjdCIpe1hpLmRlZmF1bHQuc3RyaWN0RXF1YWwoci5vYmplY3QsaSk7Y29udGludWV9aWYoV2kuQ29uZGl0aW9uYWxFeHByZXNzaW9uLmNoZWNrKHIpJiZzPT09InRlc3QiKXtYaS5kZWZhdWx0LnN0cmljdEVxdWFsKHIudGVzdCxpKTtjb250aW51ZX1pZih0bihyKSYmcz09PSJsZWZ0Iil7WGkuZGVmYXVsdC5zdHJpY3RFcXVhbChyLmxlZnQsaSk7Y29udGludWV9aWYoV2kuVW5hcnlFeHByZXNzaW9uLmNoZWNrKHIpJiYhci5wcmVmaXgmJnM9PT0iYXJndW1lbnQiKXtYaS5kZWZhdWx0LnN0cmljdEVxdWFsKHIuYXJndW1lbnQsaSk7Y29udGludWV9cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfTtxaS5kZWZhdWx0PVFpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShWaSwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTtWaS5nZXRSZXByaW50ZXI9VmkuUGF0Y2hlcj12b2lkIDA7dmFyIHNuPVI7dmFyIG5uPXNuLl9faW1wb3J0RGVmYXVsdChSdCk7dmFyIGFuPXNuLl9faW1wb3J0U3Rhcihfcyk7dmFyIG9uPXNuLl9faW1wb3J0U3RhcihqKTt2YXIgbG49b24ubmFtZWRUeXBlcy5QcmludGFibGU7dmFyIHVuPW9uLm5hbWVkVHlwZXMuRXhwcmVzc2lvbjt2YXIgY249b24ubmFtZWRUeXBlcy5SZXR1cm5TdGF0ZW1lbnQ7dmFyIGhuPW9uLm5hbWVkVHlwZXMuU291cmNlTG9jYXRpb247dmFyIHBuPXp0O3ZhciBmbj1zbi5fX2ltcG9ydERlZmF1bHQocWkpO3ZhciBkbj1vbi5idWlsdEluVHlwZXMub2JqZWN0O3ZhciBtbj1vbi5idWlsdEluVHlwZXMuYXJyYXk7dmFyIHluPW9uLmJ1aWx0SW5UeXBlcy5zdHJpbmc7dmFyIGduPS9bMC05YS16XyRdL2k7dmFyIHhuPWZ1bmN0aW9uIGUodCl7bm4uZGVmYXVsdC5vayh0aGlzIGluc3RhbmNlb2YgZSk7bm4uZGVmYXVsdC5vayh0IGluc3RhbmNlb2YgYW4uTGluZXMpO3ZhciByPXRoaXMscz1bXTtyLnJlcGxhY2U9ZnVuY3Rpb24oZSx0KXtpZih5bi5jaGVjayh0KSl0PWFuLmZyb21TdHJpbmcodCk7cy5wdXNoKHtsaW5lczp0LHN0YXJ0OmUuc3RhcnQsZW5kOmUuZW5kfSl9O3IuZ2V0PWZ1bmN0aW9uKGUpe2U9ZXx8e3N0YXJ0OntsaW5lOjEsY29sdW1uOjB9LGVuZDp7bGluZTp0Lmxlbmd0aCxjb2x1bW46dC5nZXRMaW5lTGVuZ3RoKHQubGVuZ3RoKX19O3ZhciByPWUuc3RhcnQsaT1bXTtmdW5jdGlvbiBuKGUscil7bm4uZGVmYXVsdC5vayhwbi5jb21wYXJlUG9zKGUscik8PTApO2kucHVzaCh0LnNsaWNlKGUscikpfXMuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gcG4uY29tcGFyZVBvcyhlLnN0YXJ0LHQuc3RhcnQpfSkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKHBuLmNvbXBhcmVQb3MocixlLnN0YXJ0KT4wKTtlbHNle24ocixlLnN0YXJ0KTtpLnB1c2goZS5saW5lcyk7cj1lLmVuZH19KSk7bihyLGUuZW5kKTtyZXR1cm4gYW4uY29uY2F0KGkpfX07VmkuUGF0Y2hlcj14bjt2YXIgdm49eG4ucHJvdG90eXBlO3ZuLnRyeVRvUmVwcmludENvbW1lbnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgcz10aGlzO2lmKCFlLmNvbW1lbnRzJiYhdC5jb21tZW50cyl7cmV0dXJuIHRydWV9dmFyIGk9Zm4uZGVmYXVsdC5mcm9tKGUpO3ZhciBuPWZuLmRlZmF1bHQuZnJvbSh0KTtpLnN0YWNrLnB1c2goImNvbW1lbnRzIixibihlKSk7bi5zdGFjay5wdXNoKCJjb21tZW50cyIsYm4odCkpO3ZhciBhPVtdO3ZhciBvPUNuKGksbixhKTtpZihvJiZhLmxlbmd0aD4wKXthLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUub2xkUGF0aC5nZXRWYWx1ZSgpO25uLmRlZmF1bHQub2sodC5sZWFkaW5nfHx0LnRyYWlsaW5nKTtzLnJlcGxhY2UodC5sb2MscihlLm5ld1BhdGgpLmluZGVudFRhaWwodC5sb2MuaW5kZW50KSl9KSl9cmV0dXJuIG99O2Z1bmN0aW9uIGJuKGUpe3ZhciB0PVtdO2lmKGUuY29tbWVudHMmJmUuY29tbWVudHMubGVuZ3RoPjApe2UuY29tbWVudHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoZS5sZWFkaW5nfHxlLnRyYWlsaW5nKXt0LnB1c2goZSl9fSkpfXJldHVybiB0fXZuLmRlbGV0ZUNvbW1lbnRzPWZ1bmN0aW9uKGUpe2lmKCFlLmNvbW1lbnRzKXtyZXR1cm59dmFyIHQ9dGhpcztlLmNvbW1lbnRzLmZvckVhY2goKGZ1bmN0aW9uKHIpe2lmKHIubGVhZGluZyl7dC5yZXBsYWNlKHtzdGFydDpyLmxvYy5zdGFydCxlbmQ6ZS5sb2MubGluZXMuc2tpcFNwYWNlcyhyLmxvYy5lbmQsZmFsc2UsZmFsc2UpfSwiIil9ZWxzZSBpZihyLnRyYWlsaW5nKXt0LnJlcGxhY2Uoe3N0YXJ0OmUubG9jLmxpbmVzLnNraXBTcGFjZXMoci5sb2Muc3RhcnQsdHJ1ZSxmYWxzZSksZW5kOnIubG9jLmVuZH0sIiIpfX0pKX07ZnVuY3Rpb24gRW4oZSl7bm4uZGVmYXVsdC5vayhlIGluc3RhbmNlb2YgZm4uZGVmYXVsdCk7dmFyIHQ9ZS5nZXRWYWx1ZSgpO2lmKCFsbi5jaGVjayh0KSlyZXR1cm47dmFyIHI9dC5vcmlnaW5hbDt2YXIgcz1yJiZyLmxvYzt2YXIgaT1zJiZzLmxpbmVzO3ZhciBuPVtdO2lmKCFpfHwhQW4oZSxuKSlyZXR1cm47cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBhPW5ldyB4bihpKTtuLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPWUubmV3UGF0aC5nZXRWYWx1ZSgpO3ZhciBzPWUub2xkUGF0aC5nZXRWYWx1ZSgpO2huLmFzc2VydChzLmxvYyx0cnVlKTt2YXIgbj0hYS50cnlUb1JlcHJpbnRDb21tZW50cyhyLHMsdCk7aWYobil7YS5kZWxldGVDb21tZW50cyhzKX12YXIgbz10KGUubmV3UGF0aCx7aW5jbHVkZUNvbW1lbnRzOm4sYXZvaWRSb290UGFyZW5zOnMudHlwZT09PXIudHlwZSYmZS5vbGRQYXRoLmhhc1BhcmVucygpfSkuaW5kZW50VGFpbChzLmxvYy5pbmRlbnQpO3ZhciBsPVNuKGkscy5sb2Msbyk7dmFyIHU9VG4oaSxzLmxvYyxvKTtpZihsfHx1KXt2YXIgYz1bXTtsJiZjLnB1c2goIiAiKTtjLnB1c2gobyk7dSYmYy5wdXNoKCIgIik7bz1hbi5jb25jYXQoYyl9YS5yZXBsYWNlKHMubG9jLG8pfSkpO3ZhciBvPWEuZ2V0KHMpLmluZGVudFRhaWwoLXIubG9jLmluZGVudCk7aWYoZS5uZWVkc1BhcmVucygpKXtyZXR1cm4gYW4uY29uY2F0KFsiKCIsbywiKSJdKX1yZXR1cm4gb319VmkuZ2V0UmVwcmludGVyPUVuO2Z1bmN0aW9uIFNuKGUsdCxyKXt2YXIgcz1wbi5jb3B5UG9zKHQuc3RhcnQpO3ZhciBpPWUucHJldlBvcyhzKSYmZS5jaGFyQXQocyk7dmFyIG49ci5jaGFyQXQoci5maXJzdFBvcygpKTtyZXR1cm4gaSYmZ24udGVzdChpKSYmbiYmZ24udGVzdChuKX1mdW5jdGlvbiBUbihlLHQscil7dmFyIHM9ZS5jaGFyQXQodC5lbmQpO3ZhciBpPXIubGFzdFBvcygpO3ZhciBuPXIucHJldlBvcyhpKSYmci5jaGFyQXQoaSk7cmV0dXJuIG4mJmduLnRlc3QobikmJnMmJmduLnRlc3Qocyl9ZnVuY3Rpb24gQW4oZSx0KXt2YXIgcj1lLmdldFZhbHVlKCk7bG4uYXNzZXJ0KHIpO3ZhciBzPXIub3JpZ2luYWw7bG4uYXNzZXJ0KHMpO25uLmRlZmF1bHQuZGVlcEVxdWFsKHQsW10pO2lmKHIudHlwZSE9PXMudHlwZSl7cmV0dXJuIGZhbHNlfXZhciBpPW5ldyBmbi5kZWZhdWx0KHMpO3ZhciBuPURuKGUsaSx0KTtpZighbil7dC5sZW5ndGg9MH1yZXR1cm4gbn1mdW5jdGlvbiB3bihlLHQscil7dmFyIHM9ZS5nZXRWYWx1ZSgpO3ZhciBpPXQuZ2V0VmFsdWUoKTtpZihzPT09aSlyZXR1cm4gdHJ1ZTtpZihtbi5jaGVjayhzKSlyZXR1cm4gQ24oZSx0LHIpO2lmKGRuLmNoZWNrKHMpKXJldHVybiBQbihlLHQscik7cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIENuKGUsdCxyKXt2YXIgcz1lLmdldFZhbHVlKCk7dmFyIGk9dC5nZXRWYWx1ZSgpO2lmKHM9PT1pfHxlLnZhbHVlSXNEdXBsaWNhdGUoKXx8dC52YWx1ZUlzRHVwbGljYXRlKCkpe3JldHVybiB0cnVlfW1uLmFzc2VydChzKTt2YXIgbj1zLmxlbmd0aDtpZighKG1uLmNoZWNrKGkpJiZpLmxlbmd0aD09PW4pKXJldHVybiBmYWxzZTtmb3IodmFyIGE9MDthPG47KythKXtlLnN0YWNrLnB1c2goYSxzW2FdKTt0LnN0YWNrLnB1c2goYSxpW2FdKTt2YXIgbz13bihlLHQscik7ZS5zdGFjay5sZW5ndGgtPTI7dC5zdGFjay5sZW5ndGgtPTI7aWYoIW8pe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9ZnVuY3Rpb24gUG4oZSx0LHIpe3ZhciBzPWUuZ2V0VmFsdWUoKTtkbi5hc3NlcnQocyk7aWYocy5vcmlnaW5hbD09PW51bGwpe3JldHVybiBmYWxzZX12YXIgaT10LmdldFZhbHVlKCk7aWYoIWRuLmNoZWNrKGkpKXJldHVybiBmYWxzZTtpZihzPT09aXx8ZS52YWx1ZUlzRHVwbGljYXRlKCl8fHQudmFsdWVJc0R1cGxpY2F0ZSgpKXtyZXR1cm4gdHJ1ZX1pZihsbi5jaGVjayhzKSl7aWYoIWxuLmNoZWNrKGkpKXtyZXR1cm4gZmFsc2V9dmFyIG49ZS5nZXRQYXJlbnROb2RlKCk7dmFyIGE9dC5nZXRQYXJlbnROb2RlKCk7aWYoYSE9PW51bGwmJmEudHlwZT09PSJGdW5jdGlvblR5cGVBbm5vdGF0aW9uIiYmbiE9PW51bGwmJm4udHlwZT09PSJGdW5jdGlvblR5cGVBbm5vdGF0aW9uIil7dmFyIG89YS5wYXJhbXMubGVuZ3RoIT09MXx8ISFhLnBhcmFtc1swXS5uYW1lO3ZhciBsPW4ucGFyYW1zLmxlbmd0aCE9PTF8fCEhbi5wYXJhbXNbMF0ubmFtZTtpZighbyYmbCl7cmV0dXJuIGZhbHNlfX1pZihzLnR5cGU9PT1pLnR5cGUpe3ZhciB1PVtdO2lmKERuKGUsdCx1KSl7ci5wdXNoLmFwcGx5KHIsdSl9ZWxzZSBpZihpLmxvYyl7ci5wdXNoKHtvbGRQYXRoOnQuY29weSgpLG5ld1BhdGg6ZS5jb3B5KCl9KX1lbHNle3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX1pZih1bi5jaGVjayhzKSYmdW4uY2hlY2soaSkmJmkubG9jKXtyLnB1c2goe29sZFBhdGg6dC5jb3B5KCksbmV3UGF0aDplLmNvcHkoKX0pO3JldHVybiB0cnVlfXJldHVybiBmYWxzZX1yZXR1cm4gRG4oZSx0LHIpfWZ1bmN0aW9uIERuKGUsdCxyKXt2YXIgcz1lLmdldFZhbHVlKCk7dmFyIGk9dC5nZXRWYWx1ZSgpO2RuLmFzc2VydChzKTtkbi5hc3NlcnQoaSk7aWYocy5vcmlnaW5hbD09PW51bGwpe3JldHVybiBmYWxzZX1pZihlLm5lZWRzUGFyZW5zKCkmJiF0Lmhhc1BhcmVucygpKXtyZXR1cm4gZmFsc2V9dmFyIG49cG4uZ2V0VW5pb25PZktleXMoaSxzKTtpZihpLnR5cGU9PT0iRmlsZSJ8fHMudHlwZT09PSJGaWxlIil7ZGVsZXRlIG4udG9rZW5zfWRlbGV0ZSBuLmxvYzt2YXIgYT1yLmxlbmd0aDtmb3IodmFyIG8gaW4gbil7aWYoby5jaGFyQXQoMCk9PT0iXyIpe2NvbnRpbnVlfWUuc3RhY2sucHVzaChvLG9uLmdldEZpZWxkVmFsdWUocyxvKSk7dC5zdGFjay5wdXNoKG8sb24uZ2V0RmllbGRWYWx1ZShpLG8pKTt2YXIgbD13bihlLHQscik7ZS5zdGFjay5sZW5ndGgtPTI7dC5zdGFjay5sZW5ndGgtPTI7aWYoIWwpe3JldHVybiBmYWxzZX19aWYoY24uY2hlY2soZS5nZXROb2RlKCkpJiZyLmxlbmd0aD5hKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9T2JqZWN0LmRlZmluZVByb3BlcnR5KHppLCJfX2VzTW9kdWxlIix7dmFsdWU6dHJ1ZX0pO3ppLlByaW50ZXI9dm9pZCAwO3ZhciBrbj1SO3ZhciBObj1rbi5fX2ltcG9ydERlZmF1bHQoUnQpO3ZhciBJbj1vaTt2YXIgRm49X3M7dmFyIE1uPWp0O3ZhciBfbj1WaTt2YXIgT249a24uX19pbXBvcnRTdGFyKGopO3ZhciBMbj1Pbi5uYW1lZFR5cGVzO3ZhciBCbj1Pbi5idWlsdEluVHlwZXMuc3RyaW5nO3ZhciBSbj1Pbi5idWlsdEluVHlwZXMub2JqZWN0O3ZhciBqbj1rbi5fX2ltcG9ydERlZmF1bHQocWkpO3ZhciBVbj1rbi5fX2ltcG9ydFN0YXIoenQpO3ZhciB6bj1mdW5jdGlvbiBlKHQscil7Tm4uZGVmYXVsdC5vayh0aGlzIGluc3RhbmNlb2YgZSk7Qm4uYXNzZXJ0KHQpO3RoaXMuY29kZT10O2lmKHIpe1JuLmFzc2VydChyKTt0aGlzLm1hcD1yfX07dmFyIFZuPXpuLnByb3RvdHlwZTt2YXIgcW49ZmFsc2U7Vm4udG9TdHJpbmc9ZnVuY3Rpb24oKXtpZighcW4pe2NvbnNvbGUud2FybigiRGVwcmVjYXRpb24gd2FybmluZzogcmVjYXN0LnByaW50IG5vdyByZXR1cm5zIGFuIG9iamVjdCB3aXRoICIrImEgLmNvZGUgcHJvcGVydHkuIFlvdSBhcHBlYXIgdG8gYmUgdHJlYXRpbmcgdGhlIG9iamVjdCBhcyBhICIrInN0cmluZywgd2hpY2ggbWlnaHQgc3RpbGwgd29yayBidXQgaXMgc3Ryb25nbHkgZGlzY291cmFnZWQuIik7cW49dHJ1ZX1yZXR1cm4gdGhpcy5jb2RlfTt2YXIgR249bmV3IHpuKCIiKTt2YXIgWG49ZnVuY3Rpb24gZSh0KXtObi5kZWZhdWx0Lm9rKHRoaXMgaW5zdGFuY2VvZiBlKTt2YXIgcj10JiZ0LnRhYldpZHRoO3Q9TW4ubm9ybWFsaXplKHQpO3Quc291cmNlRmlsZU5hbWU9bnVsbDtmdW5jdGlvbiBzKGUsdCl7ZT1PYmplY3QuYXNzaWduKHt9LGUsdCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpKHQsZSl9fWZ1bmN0aW9uIGkoZSxuKXtObi5kZWZhdWx0Lm9rKGUgaW5zdGFuY2VvZiBqbi5kZWZhdWx0KTtuPW58fHt9O2lmKG4uaW5jbHVkZUNvbW1lbnRzKXtyZXR1cm4gSW4ucHJpbnRDb21tZW50cyhlLHMobix7aW5jbHVkZUNvbW1lbnRzOmZhbHNlfSkpfXZhciBhPXQudGFiV2lkdGg7aWYoIXIpe3ZhciBvPWUuZ2V0Tm9kZSgpLmxvYztpZihvJiZvLmxpbmVzJiZvLmxpbmVzLmd1ZXNzVGFiV2lkdGgpe3QudGFiV2lkdGg9by5saW5lcy5ndWVzc1RhYldpZHRoKCl9fXZhciBsPV9uLmdldFJlcHJpbnRlcihlKTt2YXIgdT1sP2woaSk6Sm4oZSx0LG4scyhuLHtpbmNsdWRlQ29tbWVudHM6dHJ1ZSxhdm9pZFJvb3RQYXJlbnM6ZmFsc2V9KSk7dC50YWJXaWR0aD1hO3JldHVybiB1fXRoaXMucHJpbnQ9ZnVuY3Rpb24oZSl7aWYoIWUpe3JldHVybiBHbn12YXIgcj1pKGpuLmRlZmF1bHQuZnJvbShlKSx7aW5jbHVkZUNvbW1lbnRzOnRydWUsYXZvaWRSb290UGFyZW5zOmZhbHNlfSk7cmV0dXJuIG5ldyB6bihyLnRvU3RyaW5nKHQpLFVuLmNvbXBvc2VTb3VyY2VNYXBzKHQuaW5wdXRTb3VyY2VNYXAsci5nZXRTb3VyY2VNYXAodC5zb3VyY2VNYXBOYW1lLHQuc291cmNlUm9vdCkpKX07dGhpcy5wcmludEdlbmVyaWNhbGx5PWZ1bmN0aW9uKGUpe2lmKCFlKXtyZXR1cm4gR259ZnVuY3Rpb24gcihlKXtyZXR1cm4gSW4ucHJpbnRDb21tZW50cyhlLChmdW5jdGlvbihlKXtyZXR1cm4gSm4oZSx0LHtpbmNsdWRlQ29tbWVudHM6dHJ1ZSxhdm9pZFJvb3RQYXJlbnM6ZmFsc2V9LHIpfSkpfXZhciBzPWpuLmRlZmF1bHQuZnJvbShlKTt2YXIgaT10LnJldXNlV2hpdGVzcGFjZTt0LnJldXNlV2hpdGVzcGFjZT1mYWxzZTt2YXIgbj1uZXcgem4ocihzKS50b1N0cmluZyh0KSk7dC5yZXVzZVdoaXRlc3BhY2U9aTtyZXR1cm4gbn19O3ppLlByaW50ZXI9WG47ZnVuY3Rpb24gSm4oZSx0LHIscyl7Tm4uZGVmYXVsdC5vayhlIGluc3RhbmNlb2Ygam4uZGVmYXVsdCk7dmFyIGk9ZS5nZXRWYWx1ZSgpO3ZhciBuPVtdO3ZhciBhPUhuKGUsdCxzKTtpZighaXx8YS5pc0VtcHR5KCkpe3JldHVybiBhfXZhciBvPWkuZXh0cmE/aS5leHRyYS5wYXJlbnRoZXNpemVkOmZhbHNlO3ZhciBsPVduKGUscyk7aWYobC5pc0VtcHR5KCkpe2lmKCFyLmF2b2lkUm9vdFBhcmVucyl7bz1vfHxlLm5lZWRzUGFyZW5zKCl9fWVsc2V7bi5wdXNoKGwpfWlmKG8pe24udW5zaGlmdCgiKCIpfW4ucHVzaChhKTtpZihvKXtuLnB1c2goIikiKX1yZXR1cm4gRm4uY29uY2F0KG4pfWZ1bmN0aW9uIEhuKGUsdCxyKXt2YXIgcz1lLmdldFZhbHVlKCk7aWYoIXMpe3JldHVybiBGbi5mcm9tU3RyaW5nKCIiKX1pZih0eXBlb2Ygcz09PSJzdHJpbmciKXtyZXR1cm4gRm4uZnJvbVN0cmluZyhzLHQpfUxuLlByaW50YWJsZS5hc3NlcnQocyk7dmFyIGk9W107c3dpdGNoKHMudHlwZSl7Y2FzZSJGaWxlIjpyZXR1cm4gZS5jYWxsKHIsInByb2dyYW0iKTtjYXNlIlByb2dyYW0iOmlmKHMuZGlyZWN0aXZlcyl7ZS5lYWNoKChmdW5jdGlvbihlKXtpLnB1c2gocihlKSwiO1xuIil9KSwiZGlyZWN0aXZlcyIpfWlmKHMuaW50ZXJwcmV0ZXIpe2kucHVzaChlLmNhbGwociwiaW50ZXJwcmV0ZXIiKSl9aS5wdXNoKGUuY2FsbCgoZnVuY3Rpb24oZSl7cmV0dXJuIEtuKGUsdCxyKX0pLCJib2R5IikpO3JldHVybiBGbi5jb25jYXQoaSk7Y2FzZSJOb29wIjpjYXNlIkVtcHR5U3RhdGVtZW50IjpyZXR1cm4gRm4uZnJvbVN0cmluZygiIik7Y2FzZSJFeHByZXNzaW9uU3RhdGVtZW50IjpyZXR1cm4gRm4uY29uY2F0KFtlLmNhbGwociwiZXhwcmVzc2lvbiIpLCI7Il0pO2Nhc2UiUGFyZW50aGVzaXplZEV4cHJlc3Npb24iOnJldHVybiBGbi5jb25jYXQoWyIoIixlLmNhbGwociwiZXhwcmVzc2lvbiIpLCIpIl0pO2Nhc2UiQmluYXJ5RXhwcmVzc2lvbiI6Y2FzZSJMb2dpY2FsRXhwcmVzc2lvbiI6Y2FzZSJBc3NpZ25tZW50RXhwcmVzc2lvbiI6cmV0dXJuIEZuLmZyb21TdHJpbmcoIiAiKS5qb2luKFtlLmNhbGwociwibGVmdCIpLHMub3BlcmF0b3IsZS5jYWxsKHIsInJpZ2h0IildKTtjYXNlIkFzc2lnbm1lbnRQYXR0ZXJuIjpyZXR1cm4gRm4uY29uY2F0KFtlLmNhbGwociwibGVmdCIpLCIgPSAiLGUuY2FsbChyLCJyaWdodCIpXSk7Y2FzZSJNZW1iZXJFeHByZXNzaW9uIjpjYXNlIk9wdGlvbmFsTWVtYmVyRXhwcmVzc2lvbiI6e2kucHVzaChlLmNhbGwociwib2JqZWN0IikpO3ZhciBuPWUuY2FsbChyLCJwcm9wZXJ0eSIpO3ZhciBhPU9uLmdldEZpZWxkVmFsdWUocywib3B0aW9uYWwiKTtpZihzLmNvbXB1dGVkKXtpLnB1c2goYT8iPy5bIjoiWyIsbiwiXSIpfWVsc2V7aS5wdXNoKGE/Ij8uIjoiLiIsbil9cmV0dXJuIEZuLmNvbmNhdChpKX1jYXNlIkNoYWluRXhwcmVzc2lvbiI6cmV0dXJuIGUuY2FsbChyLCJleHByZXNzaW9uIik7Y2FzZSJNZXRhUHJvcGVydHkiOnJldHVybiBGbi5jb25jYXQoW2UuY2FsbChyLCJtZXRhIiksIi4iLGUuY2FsbChyLCJwcm9wZXJ0eSIpXSk7Y2FzZSJCaW5kRXhwcmVzc2lvbiI6aWYocy5vYmplY3Qpe2kucHVzaChlLmNhbGwociwib2JqZWN0IikpfWkucHVzaCgiOjoiLGUuY2FsbChyLCJjYWxsZWUiKSk7cmV0dXJuIEZuLmNvbmNhdChpKTtjYXNlIlBhdGgiOnJldHVybiBGbi5mcm9tU3RyaW5nKCIuIikuam9pbihzLmJvZHkpO2Nhc2UiSWRlbnRpZmllciI6cmV0dXJuIEZuLmNvbmNhdChbRm4uZnJvbVN0cmluZyhzLm5hbWUsdCkscy5vcHRpb25hbD8iPyI6IiIsZS5jYWxsKHIsInR5cGVBbm5vdGF0aW9uIildKTtjYXNlIlNwcmVhZEVsZW1lbnQiOmNhc2UiU3ByZWFkRWxlbWVudFBhdHRlcm4iOmNhc2UiUmVzdFByb3BlcnR5IjpjYXNlIlNwcmVhZFByb3BlcnR5IjpjYXNlIlNwcmVhZFByb3BlcnR5UGF0dGVybiI6Y2FzZSJPYmplY3RUeXBlU3ByZWFkUHJvcGVydHkiOmNhc2UiUmVzdEVsZW1lbnQiOnJldHVybiBGbi5jb25jYXQoWyIuLi4iLGUuY2FsbChyLCJhcmd1bWVudCIpLGUuY2FsbChyLCJ0eXBlQW5ub3RhdGlvbiIpXSk7Y2FzZSJGdW5jdGlvbkRlY2xhcmF0aW9uIjpjYXNlIkZ1bmN0aW9uRXhwcmVzc2lvbiI6Y2FzZSJUU0RlY2xhcmVGdW5jdGlvbiI6aWYocy5kZWNsYXJlKXtpLnB1c2goImRlY2xhcmUgIil9aWYocy5hc3luYyl7aS5wdXNoKCJhc3luYyAiKX1pLnB1c2goImZ1bmN0aW9uIik7aWYocy5nZW5lcmF0b3IpaS5wdXNoKCIqIik7aWYocy5pZCl7aS5wdXNoKCIgIixlLmNhbGwociwiaWQiKSxlLmNhbGwociwidHlwZVBhcmFtZXRlcnMiKSl9ZWxzZXtpZihzLnR5cGVQYXJhbWV0ZXJzKXtpLnB1c2goZS5jYWxsKHIsInR5cGVQYXJhbWV0ZXJzIikpfX1pLnB1c2goIigiLFpuKGUsdCxyKSwiKSIsZS5jYWxsKHIsInJldHVyblR5cGUiKSk7aWYocy5ib2R5KXtpLnB1c2goIiAiLGUuY2FsbChyLCJib2R5IikpfXJldHVybiBGbi5jb25jYXQoaSk7Y2FzZSJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiI6aWYocy5hc3luYyl7aS5wdXNoKCJhc3luYyAiKX1pZihzLnR5cGVQYXJhbWV0ZXJzKXtpLnB1c2goZS5jYWxsKHIsInR5cGVQYXJhbWV0ZXJzIikpfWlmKCF0LmFycm93UGFyZW5zQWx3YXlzJiZzLnBhcmFtcy5sZW5ndGg9PT0xJiYhcy5yZXN0JiZzLnBhcmFtc1swXS50eXBlPT09IklkZW50aWZpZXIiJiYhcy5wYXJhbXNbMF0udHlwZUFubm90YXRpb24mJiFzLnJldHVyblR5cGUpe2kucHVzaChlLmNhbGwociwicGFyYW1zIiwwKSl9ZWxzZXtpLnB1c2goIigiLFpuKGUsdCxyKSwiKSIsZS5jYWxsKHIsInJldHVyblR5cGUiKSl9aS5wdXNoKCIgPT4gIixlLmNhbGwociwiYm9keSIpKTtyZXR1cm4gRm4uY29uY2F0KGkpO2Nhc2UiTWV0aG9kRGVmaW5pdGlvbiI6cmV0dXJuIFluKGUsdCxyKTtjYXNlIllpZWxkRXhwcmVzc2lvbiI6aS5wdXNoKCJ5aWVsZCIpO2lmKHMuZGVsZWdhdGUpaS5wdXNoKCIqIik7aWYocy5hcmd1bWVudClpLnB1c2goIiAiLGUuY2FsbChyLCJhcmd1bWVudCIpKTtyZXR1cm4gRm4uY29uY2F0KGkpO2Nhc2UiQXdhaXRFeHByZXNzaW9uIjppLnB1c2goImF3YWl0Iik7aWYocy5hbGwpaS5wdXNoKCIqIik7aWYocy5hcmd1bWVudClpLnB1c2goIiAiLGUuY2FsbChyLCJhcmd1bWVudCIpKTtyZXR1cm4gRm4uY29uY2F0KGkpO2Nhc2UiTW9kdWxlRGVjbGFyYXRpb24iOmkucHVzaCgibW9kdWxlIixlLmNhbGwociwiaWQiKSk7aWYocy5zb3VyY2Upe05uLmRlZmF1bHQub2soIXMuYm9keSk7aS5wdXNoKCJmcm9tIixlLmNhbGwociwic291cmNlIikpfWVsc2V7aS5wdXNoKGUuY2FsbChyLCJib2R5IikpfXJldHVybiBGbi5mcm9tU3RyaW5nKCIgIikuam9pbihpKTtjYXNlIkltcG9ydFNwZWNpZmllciI6aWYocy5pbXBvcnRLaW5kJiZzLmltcG9ydEtpbmQhPT0idmFsdWUiKXtpLnB1c2gocy5pbXBvcnRLaW5kKyIgIil9aWYocy5pbXBvcnRlZCl7aS5wdXNoKGUuY2FsbChyLCJpbXBvcnRlZCIpKTtpZihzLmxvY2FsJiZzLmxvY2FsLm5hbWUhPT1zLmltcG9ydGVkLm5hbWUpe2kucHVzaCgiIGFzICIsZS5jYWxsKHIsImxvY2FsIikpfX1lbHNlIGlmKHMuaWQpe2kucHVzaChlLmNhbGwociwiaWQiKSk7aWYocy5uYW1lKXtpLnB1c2goIiBhcyAiLGUuY2FsbChyLCJuYW1lIikpfX1yZXR1cm4gRm4uY29uY2F0KGkpO2Nhc2UiRXhwb3J0U3BlY2lmaWVyIjppZihzLmxvY2FsKXtpLnB1c2goZS5jYWxsKHIsImxvY2FsIikpO2lmKHMuZXhwb3J0ZWQmJnMuZXhwb3J0ZWQubmFtZSE9PXMubG9jYWwubmFtZSl7aS5wdXNoKCIgYXMgIixlLmNhbGwociwiZXhwb3J0ZWQiKSl9fWVsc2UgaWYocy5pZCl7aS5wdXNoKGUuY2FsbChyLCJpZCIpKTtpZihzLm5hbWUpe2kucHVzaCgiIGFzICIsZS5jYWxsKHIsIm5hbWUiKSl9fXJldHVybiBGbi5jb25jYXQoaSk7Y2FzZSJFeHBvcnRCYXRjaFNwZWNpZmllciI6cmV0dXJuIEZuLmZyb21TdHJpbmcoIioiKTtjYXNlIkltcG9ydE5hbWVzcGFjZVNwZWNpZmllciI6aS5wdXNoKCIqIGFzICIpO2lmKHMubG9jYWwpe2kucHVzaChlLmNhbGwociwibG9jYWwiKSl9ZWxzZSBpZihzLmlkKXtpLnB1c2goZS5jYWxsKHIsImlkIikpfXJldHVybiBGbi5jb25jYXQoaSk7Y2FzZSJJbXBvcnREZWZhdWx0U3BlY2lmaWVyIjppZihzLmxvY2FsKXtyZXR1cm4gZS5jYWxsKHIsImxvY2FsIil9cmV0dXJuIGUuY2FsbChyLCJpZCIpO2Nhc2UiVFNFeHBvcnRBc3NpZ25tZW50IjpyZXR1cm4gRm4uY29uY2F0KFsiZXhwb3J0ID0gIixlLmNhbGwociwiZXhwcmVzc2lvbiIpXSk7Y2FzZSJFeHBvcnREZWNsYXJhdGlvbiI6Y2FzZSJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24iOmNhc2UiRXhwb3J0TmFtZWREZWNsYXJhdGlvbiI6cmV0dXJuIGVhKGUsdCxyKTtjYXNlIkV4cG9ydEFsbERlY2xhcmF0aW9uIjppLnB1c2goImV4cG9ydCAqIik7aWYocy5leHBvcnRlZCl7aS5wdXNoKCIgYXMgIixlLmNhbGwociwiZXhwb3J0ZWQiKSl9aS5wdXNoKCIgZnJvbSAiLGUuY2FsbChyLCJzb3VyY2UiKSwiOyIpO3JldHVybiBGbi5jb25jYXQoaSk7Y2FzZSJUU05hbWVzcGFjZUV4cG9ydERlY2xhcmF0aW9uIjppLnB1c2goImV4cG9ydCBhcyBuYW1lc3BhY2UgIixlLmNhbGwociwiaWQiKSk7cmV0dXJuIGxhKEZuLmNvbmNhdChpKSk7Y2FzZSJFeHBvcnROYW1lc3BhY2VTcGVjaWZpZXIiOnJldHVybiBGbi5jb25jYXQoWyIqIGFzICIsZS5jYWxsKHIsImV4cG9ydGVkIildKTtjYXNlIkV4cG9ydERlZmF1bHRTcGVjaWZpZXIiOnJldHVybiBlLmNhbGwociwiZXhwb3J0ZWQiKTtjYXNlIkltcG9ydCI6cmV0dXJuIEZuLmZyb21TdHJpbmcoImltcG9ydCIsdCk7Y2FzZSJJbXBvcnRFeHByZXNzaW9uIjpyZXR1cm4gRm4uY29uY2F0KFsiaW1wb3J0KCIsZS5jYWxsKHIsInNvdXJjZSIpLCIpIl0pO2Nhc2UiSW1wb3J0RGVjbGFyYXRpb24iOntpLnB1c2goImltcG9ydCAiKTtpZihzLmltcG9ydEtpbmQmJnMuaW1wb3J0S2luZCE9PSJ2YWx1ZSIpe2kucHVzaChzLmltcG9ydEtpbmQrIiAiKX1pZihzLnNwZWNpZmllcnMmJnMuc3BlY2lmaWVycy5sZW5ndGg+MCl7dmFyIG89W107dmFyIGw9W107ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmdldFZhbHVlKCk7aWYodC50eXBlPT09IkltcG9ydFNwZWNpZmllciIpe2wucHVzaChyKGUpKX1lbHNlIGlmKHQudHlwZT09PSJJbXBvcnREZWZhdWx0U3BlY2lmaWVyInx8dC50eXBlPT09IkltcG9ydE5hbWVzcGFjZVNwZWNpZmllciIpe28ucHVzaChyKGUpKX19KSwic3BlY2lmaWVycyIpO28uZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtpZih0PjApe2kucHVzaCgiLCAiKX1pLnB1c2goZSl9KSk7aWYobC5sZW5ndGg+MCl7dmFyIHU9Rm4uZnJvbVN0cmluZygiLCAiKS5qb2luKGwpO2lmKHUuZ2V0TGluZUxlbmd0aCgxKT50LndyYXBDb2x1bW4pe3U9Rm4uY29uY2F0KFtGbi5mcm9tU3RyaW5nKCIsXG4iKS5qb2luKGwpLmluZGVudCh0LnRhYldpZHRoKSwiLCJdKX1pZihvLmxlbmd0aD4wKXtpLnB1c2goIiwgIil9aWYodS5sZW5ndGg+MSl7aS5wdXNoKCJ7XG4iLHUsIlxufSIpfWVsc2UgaWYodC5vYmplY3RDdXJseVNwYWNpbmcpe2kucHVzaCgieyAiLHUsIiB9Iil9ZWxzZXtpLnB1c2goInsiLHUsIn0iKX19aS5wdXNoKCIgZnJvbSAiKX1pLnB1c2goZS5jYWxsKHIsInNvdXJjZSIpLCI7Iik7cmV0dXJuIEZuLmNvbmNhdChpKX1jYXNlIkJsb2NrU3RhdGVtZW50Ijp7dmFyIGM9ZS5jYWxsKChmdW5jdGlvbihlKXtyZXR1cm4gS24oZSx0LHIpfSksImJvZHkiKTtpZihjLmlzRW1wdHkoKSl7aWYoIXMuZGlyZWN0aXZlc3x8cy5kaXJlY3RpdmVzLmxlbmd0aD09PTApe3JldHVybiBGbi5mcm9tU3RyaW5nKCJ7fSIpfX1pLnB1c2goIntcbiIpO2lmKHMuZGlyZWN0aXZlcyl7ZS5lYWNoKChmdW5jdGlvbihlKXtpLnB1c2gobGEocihlKS5pbmRlbnQodC50YWJXaWR0aCkpLHMuZGlyZWN0aXZlcy5sZW5ndGg+MXx8IWMuaXNFbXB0eSgpPyJcbiI6IiIpfSksImRpcmVjdGl2ZXMiKX1pLnB1c2goYy5pbmRlbnQodC50YWJXaWR0aCkpO2kucHVzaCgiXG59Iik7cmV0dXJuIEZuLmNvbmNhdChpKX1jYXNlIlJldHVyblN0YXRlbWVudCI6e2kucHVzaCgicmV0dXJuIik7aWYocy5hcmd1bWVudCl7dmFyIGg9ZS5jYWxsKHIsImFyZ3VtZW50Iik7aWYoaC5zdGFydHNXaXRoQ29tbWVudCgpfHxoLmxlbmd0aD4xJiZMbi5KU1hFbGVtZW50JiZMbi5KU1hFbGVtZW50LmNoZWNrKHMuYXJndW1lbnQpKXtpLnB1c2goIiAoXG4iLGguaW5kZW50KHQudGFiV2lkdGgpLCJcbikiKX1lbHNle2kucHVzaCgiICIsaCl9fWkucHVzaCgiOyIpO3JldHVybiBGbi5jb25jYXQoaSl9Y2FzZSJDYWxsRXhwcmVzc2lvbiI6Y2FzZSJPcHRpb25hbENhbGxFeHByZXNzaW9uIjppLnB1c2goZS5jYWxsKHIsImNhbGxlZSIpKTtpZihzLnR5cGVQYXJhbWV0ZXJzKXtpLnB1c2goZS5jYWxsKHIsInR5cGVQYXJhbWV0ZXJzIikpfWlmKHMudHlwZUFyZ3VtZW50cyl7aS5wdXNoKGUuY2FsbChyLCJ0eXBlQXJndW1lbnRzIikpfWlmKE9uLmdldEZpZWxkVmFsdWUocywib3B0aW9uYWwiKSl7aS5wdXNoKCI/LiIpfWkucHVzaChRbihlLHQscikpO3JldHVybiBGbi5jb25jYXQoaSk7Y2FzZSJPYmplY3RFeHByZXNzaW9uIjpjYXNlIk9iamVjdFBhdHRlcm4iOmNhc2UiT2JqZWN0VHlwZUFubm90YXRpb24iOnt2YXIgcD1zLnR5cGU9PT0iT2JqZWN0VHlwZUFubm90YXRpb24iO3ZhciBmPXQuZmxvd09iamVjdENvbW1hcz8iLCI6cD8iOyI6IiwiO3ZhciBkPVtdO3ZhciBtPWZhbHNlO2lmKHApe2QucHVzaCgiaW5kZXhlcnMiLCJjYWxsUHJvcGVydGllcyIpO2lmKHMuaW50ZXJuYWxTbG90cyE9bnVsbCl7ZC5wdXNoKCJpbnRlcm5hbFNsb3RzIil9fWQucHVzaCgicHJvcGVydGllcyIpO3ZhciB5PTA7ZC5mb3JFYWNoKChmdW5jdGlvbihlKXt5Kz1zW2VdLmxlbmd0aH0pKTt2YXIgZz1wJiZ5PT09MXx8eT09PTA7dmFyIHg9cy5leGFjdD8ie3wiOiJ7Ijt2YXIgdj1zLmV4YWN0PyJ8fSI6In0iO2kucHVzaChnP3g6eCsiXG4iKTt2YXIgYj1pLmxlbmd0aC0xO3ZhciBFPTA7ZC5mb3JFYWNoKChmdW5jdGlvbihzKXtlLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciBzPXIoZSk7aWYoIWcpe3M9cy5pbmRlbnQodC50YWJXaWR0aCl9dmFyIG49IXAmJnMubGVuZ3RoPjE7aWYobiYmbSl7aS5wdXNoKCJcbiIpfWkucHVzaChzKTtpZihFPHktMSl7aS5wdXNoKGYrKG4/IlxuXG4iOiJcbiIpKTttPSFufWVsc2UgaWYoeSE9PTEmJnApe2kucHVzaChmKX1lbHNlIGlmKCFnJiZVbi5pc1RyYWlsaW5nQ29tbWFFbmFibGVkKHQsIm9iamVjdHMiKSYmZS5nZXRWYWx1ZSgpLnR5cGUhPT0iUmVzdEVsZW1lbnQiKXtpLnB1c2goZil9RSsrfSkscyl9KSk7aWYocy5pbmV4YWN0KXt2YXIgUz1Gbi5mcm9tU3RyaW5nKCIuLi4iLHQpO2lmKGcpe2lmKHk+MCl7aS5wdXNoKGYsIiAiKX1pLnB1c2goUyl9ZWxzZXtpLnB1c2goIlxuIixTLmluZGVudCh0LnRhYldpZHRoKSl9fWkucHVzaChnP3Y6IlxuIit2KTtpZihFIT09MCYmZyYmdC5vYmplY3RDdXJseVNwYWNpbmcpe2lbYl09eCsiICI7aVtpLmxlbmd0aC0xXT0iICIrdn1pZihzLnR5cGVBbm5vdGF0aW9uKXtpLnB1c2goZS5jYWxsKHIsInR5cGVBbm5vdGF0aW9uIikpfXJldHVybiBGbi5jb25jYXQoaSl9Y2FzZSJQcm9wZXJ0eVBhdHRlcm4iOnJldHVybiBGbi5jb25jYXQoW2UuY2FsbChyLCJrZXkiKSwiOiAiLGUuY2FsbChyLCJwYXR0ZXJuIildKTtjYXNlIk9iamVjdFByb3BlcnR5IjpjYXNlIlByb3BlcnR5Ijp7aWYocy5tZXRob2R8fHMua2luZD09PSJnZXQifHxzLmtpbmQ9PT0ic2V0Iil7cmV0dXJuIFluKGUsdCxyKX1pZihzLnNob3J0aGFuZCYmcy52YWx1ZS50eXBlPT09IkFzc2lnbm1lbnRQYXR0ZXJuIil7cmV0dXJuIGUuY2FsbChyLCJ2YWx1ZSIpfXZhciBUPWUuY2FsbChyLCJrZXkiKTtpZihzLmNvbXB1dGVkKXtpLnB1c2goIlsiLFQsIl0iKX1lbHNle2kucHVzaChUKX1pZighcy5zaG9ydGhhbmR8fHMua2V5Lm5hbWUhPT1zLnZhbHVlLm5hbWUpe2kucHVzaCgiOiAiLGUuY2FsbChyLCJ2YWx1ZSIpKX1yZXR1cm4gRm4uY29uY2F0KGkpfWNhc2UiQ2xhc3NNZXRob2QiOmNhc2UiT2JqZWN0TWV0aG9kIjpjYXNlIkNsYXNzUHJpdmF0ZU1ldGhvZCI6Y2FzZSJUU0RlY2xhcmVNZXRob2QiOnJldHVybiBZbihlLHQscik7Y2FzZSJQcml2YXRlTmFtZSI6cmV0dXJuIEZuLmNvbmNhdChbIiMiLGUuY2FsbChyLCJpZCIpXSk7Y2FzZSJEZWNvcmF0b3IiOnJldHVybiBGbi5jb25jYXQoWyJAIixlLmNhbGwociwiZXhwcmVzc2lvbiIpXSk7Y2FzZSJBcnJheUV4cHJlc3Npb24iOmNhc2UiQXJyYXlQYXR0ZXJuIjp7dmFyIEE9cy5lbGVtZW50czt2YXIgdz1BLmxlbmd0aDt2YXIgQz1lLm1hcChyLCJlbGVtZW50cyIpO3ZhciBQPUZuLmZyb21TdHJpbmcoIiwgIikuam9pbihDKTt2YXIgRD1QLmdldExpbmVMZW5ndGgoMSk8PXQud3JhcENvbHVtbjtpZihEKXtpZih0LmFycmF5QnJhY2tldFNwYWNpbmcpe2kucHVzaCgiWyAiKX1lbHNle2kucHVzaCgiWyIpfX1lbHNle2kucHVzaCgiW1xuIil9ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1lLmdldE5hbWUoKTt2YXIgcz1lLmdldFZhbHVlKCk7aWYoIXMpe2kucHVzaCgiLCIpfWVsc2V7dmFyIG49Q1tyXTtpZihEKXtpZihyPjApaS5wdXNoKCIgIil9ZWxzZXtuPW4uaW5kZW50KHQudGFiV2lkdGgpfWkucHVzaChuKTtpZihyPHctMXx8IUQmJlVuLmlzVHJhaWxpbmdDb21tYUVuYWJsZWQodCwiYXJyYXlzIikpaS5wdXNoKCIsIik7aWYoIUQpaS5wdXNoKCJcbiIpfX0pLCJlbGVtZW50cyIpO2lmKEQmJnQuYXJyYXlCcmFja2V0U3BhY2luZyl7aS5wdXNoKCIgXSIpfWVsc2V7aS5wdXNoKCJdIil9aWYocy50eXBlQW5ub3RhdGlvbil7aS5wdXNoKGUuY2FsbChyLCJ0eXBlQW5ub3RhdGlvbiIpKX1yZXR1cm4gRm4uY29uY2F0KGkpfWNhc2UiU2VxdWVuY2VFeHByZXNzaW9uIjpyZXR1cm4gRm4uZnJvbVN0cmluZygiLCAiKS5qb2luKGUubWFwKHIsImV4cHJlc3Npb25zIikpO2Nhc2UiVGhpc0V4cHJlc3Npb24iOnJldHVybiBGbi5mcm9tU3RyaW5nKCJ0aGlzIik7Y2FzZSJTdXBlciI6cmV0dXJuIEZuLmZyb21TdHJpbmcoInN1cGVyIik7Y2FzZSJOdWxsTGl0ZXJhbCI6cmV0dXJuIEZuLmZyb21TdHJpbmcoIm51bGwiKTtjYXNlIlJlZ0V4cExpdGVyYWwiOnJldHVybiBGbi5mcm9tU3RyaW5nKHMuZXh0cmEucmF3KTtjYXNlIkJpZ0ludExpdGVyYWwiOnJldHVybiBGbi5mcm9tU3RyaW5nKHMudmFsdWUrIm4iKTtjYXNlIk51bWVyaWNMaXRlcmFsIjppZihzLmV4dHJhJiZ0eXBlb2Ygcy5leHRyYS5yYXc9PT0ic3RyaW5nIiYmTnVtYmVyKHMuZXh0cmEucmF3KT09PXMudmFsdWUpe3JldHVybiBGbi5mcm9tU3RyaW5nKHMuZXh0cmEucmF3LHQpfXJldHVybiBGbi5mcm9tU3RyaW5nKHMudmFsdWUsdCk7Y2FzZSJCb29sZWFuTGl0ZXJhbCI6Y2FzZSJTdHJpbmdMaXRlcmFsIjpjYXNlIkxpdGVyYWwiOmlmKHR5cGVvZiBzLnZhbHVlPT09Im51bWJlciImJnR5cGVvZiBzLnJhdz09PSJzdHJpbmciJiZOdW1iZXIocy5yYXcpPT09cy52YWx1ZSl7cmV0dXJuIEZuLmZyb21TdHJpbmcocy5yYXcsdCl9aWYodHlwZW9mIHMudmFsdWUhPT0ic3RyaW5nIil7cmV0dXJuIEZuLmZyb21TdHJpbmcocy52YWx1ZSx0KX1yZXR1cm4gRm4uZnJvbVN0cmluZyhvYShzLnZhbHVlLHQpLHQpO2Nhc2UiRGlyZWN0aXZlIjpyZXR1cm4gZS5jYWxsKHIsInZhbHVlIik7Y2FzZSJEaXJlY3RpdmVMaXRlcmFsIjpyZXR1cm4gRm4uZnJvbVN0cmluZyhvYShzLnZhbHVlLHQpKTtjYXNlIkludGVycHJldGVyRGlyZWN0aXZlIjpyZXR1cm4gRm4uZnJvbVN0cmluZygiIyEiK3MudmFsdWUrIlxuIix0KTtjYXNlIk1vZHVsZVNwZWNpZmllciI6aWYocy5sb2NhbCl7dGhyb3cgbmV3IEVycm9yKCJUaGUgRVNUcmVlIE1vZHVsZVNwZWNpZmllciB0eXBlIHNob3VsZCBiZSBhYnN0cmFjdCIpfXJldHVybiBGbi5mcm9tU3RyaW5nKG9hKHMudmFsdWUsdCksdCk7Y2FzZSJVbmFyeUV4cHJlc3Npb24iOmkucHVzaChzLm9wZXJhdG9yKTtpZigvW2Etel0kLy50ZXN0KHMub3BlcmF0b3IpKWkucHVzaCgiICIpO2kucHVzaChlLmNhbGwociwiYXJndW1lbnQiKSk7cmV0dXJuIEZuLmNvbmNhdChpKTtjYXNlIlVwZGF0ZUV4cHJlc3Npb24iOmkucHVzaChlLmNhbGwociwiYXJndW1lbnQiKSxzLm9wZXJhdG9yKTtpZihzLnByZWZpeClpLnJldmVyc2UoKTtyZXR1cm4gRm4uY29uY2F0KGkpO2Nhc2UiQ29uZGl0aW9uYWxFeHByZXNzaW9uIjpyZXR1cm4gRm4uY29uY2F0KFtlLmNhbGwociwidGVzdCIpLCIgPyAiLGUuY2FsbChyLCJjb25zZXF1ZW50IiksIiA6ICIsZS5jYWxsKHIsImFsdGVybmF0ZSIpXSk7Y2FzZSJOZXdFeHByZXNzaW9uIjp7aS5wdXNoKCJuZXcgIixlLmNhbGwociwiY2FsbGVlIikpO2lmKHMudHlwZVBhcmFtZXRlcnMpe2kucHVzaChlLmNhbGwociwidHlwZVBhcmFtZXRlcnMiKSl9aWYocy50eXBlQXJndW1lbnRzKXtpLnB1c2goZS5jYWxsKHIsInR5cGVBcmd1bWVudHMiKSl9dmFyIGs9cy5hcmd1bWVudHM7aWYoayl7aS5wdXNoKFFuKGUsdCxyKSl9cmV0dXJuIEZuLmNvbmNhdChpKX1jYXNlIlZhcmlhYmxlRGVjbGFyYXRpb24iOntpZihzLmRlY2xhcmUpe2kucHVzaCgiZGVjbGFyZSAiKX1pLnB1c2gocy5raW5kLCIgIik7dmFyIE49MDt2YXIgST1lLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHQ9cihlKTtOPU1hdGgubWF4KHQubGVuZ3RoLE4pO3JldHVybiB0fSksImRlY2xhcmF0aW9ucyIpO2lmKE49PT0xKXtpLnB1c2goRm4uZnJvbVN0cmluZygiLCAiKS5qb2luKEkpKX1lbHNlIGlmKEkubGVuZ3RoPjEpe2kucHVzaChGbi5mcm9tU3RyaW5nKCIsXG4iKS5qb2luKEkpLmluZGVudFRhaWwocy5raW5kLmxlbmd0aCsxKSl9ZWxzZXtpLnB1c2goSVswXSl9dmFyIEY9ZS5nZXRQYXJlbnROb2RlKCk7aWYoIUxuLkZvclN0YXRlbWVudC5jaGVjayhGKSYmIUxuLkZvckluU3RhdGVtZW50LmNoZWNrKEYpJiYhKExuLkZvck9mU3RhdGVtZW50JiZMbi5Gb3JPZlN0YXRlbWVudC5jaGVjayhGKSkmJiEoTG4uRm9yQXdhaXRTdGF0ZW1lbnQmJkxuLkZvckF3YWl0U3RhdGVtZW50LmNoZWNrKEYpKSl7aS5wdXNoKCI7Iil9cmV0dXJuIEZuLmNvbmNhdChpKX1jYXNlIlZhcmlhYmxlRGVjbGFyYXRvciI6cmV0dXJuIHMuaW5pdD9Gbi5mcm9tU3RyaW5nKCIgPSAiKS5qb2luKFtlLmNhbGwociwiaWQiKSxlLmNhbGwociwiaW5pdCIpXSk6ZS5jYWxsKHIsImlkIik7Y2FzZSJXaXRoU3RhdGVtZW50IjpyZXR1cm4gRm4uY29uY2F0KFsid2l0aCAoIixlLmNhbGwociwib2JqZWN0IiksIikgIixlLmNhbGwociwiYm9keSIpXSk7Y2FzZSJJZlN0YXRlbWVudCI6e3ZhciBNPXNhKGUuY2FsbChyLCJjb25zZXF1ZW50IiksdCk7aS5wdXNoKCJpZiAoIixlLmNhbGwociwidGVzdCIpLCIpIixNKTtpZihzLmFsdGVybmF0ZSlpLnB1c2gobmEoTSk/IiBlbHNlIjoiXG5lbHNlIixzYShlLmNhbGwociwiYWx0ZXJuYXRlIiksdCkpO3JldHVybiBGbi5jb25jYXQoaSl9Y2FzZSJGb3JTdGF0ZW1lbnQiOnt2YXIgXz1lLmNhbGwociwiaW5pdCIpO3ZhciBPPV8ubGVuZ3RoPjE/IjtcbiI6IjsgIjt2YXIgTD0iZm9yICgiO3ZhciBCPUZuLmZyb21TdHJpbmcoTykuam9pbihbXyxlLmNhbGwociwidGVzdCIpLGUuY2FsbChyLCJ1cGRhdGUiKV0pLmluZGVudFRhaWwoTC5sZW5ndGgpO3ZhciBSPUZuLmNvbmNhdChbTCxCLCIpIl0pO3ZhciBqPXNhKGUuY2FsbChyLCJib2R5IiksdCk7aS5wdXNoKFIpO2lmKFIubGVuZ3RoPjEpe2kucHVzaCgiXG4iKTtqPWoudHJpbUxlZnQoKX1pLnB1c2goaik7cmV0dXJuIEZuLmNvbmNhdChpKX1jYXNlIldoaWxlU3RhdGVtZW50IjpyZXR1cm4gRm4uY29uY2F0KFsid2hpbGUgKCIsZS5jYWxsKHIsInRlc3QiKSwiKSIsc2EoZS5jYWxsKHIsImJvZHkiKSx0KV0pO2Nhc2UiRm9ySW5TdGF0ZW1lbnQiOnJldHVybiBGbi5jb25jYXQoW3MuZWFjaD8iZm9yIGVhY2ggKCI6ImZvciAoIixlLmNhbGwociwibGVmdCIpLCIgaW4gIixlLmNhbGwociwicmlnaHQiKSwiKSIsc2EoZS5jYWxsKHIsImJvZHkiKSx0KV0pO2Nhc2UiRm9yT2ZTdGF0ZW1lbnQiOmNhc2UiRm9yQXdhaXRTdGF0ZW1lbnQiOmkucHVzaCgiZm9yICIpO2lmKHMuYXdhaXR8fHMudHlwZT09PSJGb3JBd2FpdFN0YXRlbWVudCIpe2kucHVzaCgiYXdhaXQgIil9aS5wdXNoKCIoIixlLmNhbGwociwibGVmdCIpLCIgb2YgIixlLmNhbGwociwicmlnaHQiKSwiKSIsc2EoZS5jYWxsKHIsImJvZHkiKSx0KSk7cmV0dXJuIEZuLmNvbmNhdChpKTtjYXNlIkRvV2hpbGVTdGF0ZW1lbnQiOnt2YXIgVT1Gbi5jb25jYXQoWyJkbyIsc2EoZS5jYWxsKHIsImJvZHkiKSx0KV0pO2kucHVzaChVKTtpZihuYShVKSlpLnB1c2goIiB3aGlsZSIpO2Vsc2UgaS5wdXNoKCJcbndoaWxlIik7aS5wdXNoKCIgKCIsZS5jYWxsKHIsInRlc3QiKSwiKTsiKTtyZXR1cm4gRm4uY29uY2F0KGkpfWNhc2UiRG9FeHByZXNzaW9uIjp7dmFyIHo9ZS5jYWxsKChmdW5jdGlvbihlKXtyZXR1cm4gS24oZSx0LHIpfSksImJvZHkiKTtyZXR1cm4gRm4uY29uY2F0KFsiZG8ge1xuIix6LmluZGVudCh0LnRhYldpZHRoKSwiXG59Il0pfWNhc2UiQnJlYWtTdGF0ZW1lbnQiOmkucHVzaCgiYnJlYWsiKTtpZihzLmxhYmVsKWkucHVzaCgiICIsZS5jYWxsKHIsImxhYmVsIikpO2kucHVzaCgiOyIpO3JldHVybiBGbi5jb25jYXQoaSk7Y2FzZSJDb250aW51ZVN0YXRlbWVudCI6aS5wdXNoKCJjb250aW51ZSIpO2lmKHMubGFiZWwpaS5wdXNoKCIgIixlLmNhbGwociwibGFiZWwiKSk7aS5wdXNoKCI7Iik7cmV0dXJuIEZuLmNvbmNhdChpKTtjYXNlIkxhYmVsZWRTdGF0ZW1lbnQiOnJldHVybiBGbi5jb25jYXQoW2UuY2FsbChyLCJsYWJlbCIpLCI6XG4iLGUuY2FsbChyLCJib2R5IildKTtjYXNlIlRyeVN0YXRlbWVudCI6aS5wdXNoKCJ0cnkgIixlLmNhbGwociwiYmxvY2siKSk7aWYocy5oYW5kbGVyKXtpLnB1c2goIiAiLGUuY2FsbChyLCJoYW5kbGVyIikpfWVsc2UgaWYocy5oYW5kbGVycyl7ZS5lYWNoKChmdW5jdGlvbihlKXtpLnB1c2goIiAiLHIoZSkpfSksImhhbmRsZXJzIil9aWYocy5maW5hbGl6ZXIpe2kucHVzaCgiIGZpbmFsbHkgIixlLmNhbGwociwiZmluYWxpemVyIikpfXJldHVybiBGbi5jb25jYXQoaSk7Y2FzZSJDYXRjaENsYXVzZSI6aS5wdXNoKCJjYXRjaCAiKTtpZihzLnBhcmFtKXtpLnB1c2goIigiLGUuY2FsbChyLCJwYXJhbSIpKX1pZihzLmd1YXJkKXtpLnB1c2goIiBpZiAiLGUuY2FsbChyLCJndWFyZCIpKX1pZihzLnBhcmFtKXtpLnB1c2goIikgIil9aS5wdXNoKGUuY2FsbChyLCJib2R5IikpO3JldHVybiBGbi5jb25jYXQoaSk7Y2FzZSJUaHJvd1N0YXRlbWVudCI6cmV0dXJuIEZuLmNvbmNhdChbInRocm93ICIsZS5jYWxsKHIsImFyZ3VtZW50IiksIjsiXSk7Y2FzZSJTd2l0Y2hTdGF0ZW1lbnQiOnJldHVybiBGbi5jb25jYXQoWyJzd2l0Y2ggKCIsZS5jYWxsKHIsImRpc2NyaW1pbmFudCIpLCIpIHtcbiIsRm4uZnJvbVN0cmluZygiXG4iKS5qb2luKGUubWFwKHIsImNhc2VzIikpLCJcbn0iXSk7Y2FzZSJTd2l0Y2hDYXNlIjppZihzLnRlc3QpaS5wdXNoKCJjYXNlICIsZS5jYWxsKHIsInRlc3QiKSwiOiIpO2Vsc2UgaS5wdXNoKCJkZWZhdWx0OiIpO2lmKHMuY29uc2VxdWVudC5sZW5ndGg+MCl7aS5wdXNoKCJcbiIsZS5jYWxsKChmdW5jdGlvbihlKXtyZXR1cm4gS24oZSx0LHIpfSksImNvbnNlcXVlbnQiKS5pbmRlbnQodC50YWJXaWR0aCkpfXJldHVybiBGbi5jb25jYXQoaSk7Y2FzZSJEZWJ1Z2dlclN0YXRlbWVudCI6cmV0dXJuIEZuLmZyb21TdHJpbmcoImRlYnVnZ2VyOyIpO2Nhc2UiSlNYQXR0cmlidXRlIjppLnB1c2goZS5jYWxsKHIsIm5hbWUiKSk7aWYocy52YWx1ZSlpLnB1c2goIj0iLGUuY2FsbChyLCJ2YWx1ZSIpKTtyZXR1cm4gRm4uY29uY2F0KGkpO2Nhc2UiSlNYSWRlbnRpZmllciI6cmV0dXJuIEZuLmZyb21TdHJpbmcocy5uYW1lLHQpO2Nhc2UiSlNYTmFtZXNwYWNlZE5hbWUiOnJldHVybiBGbi5mcm9tU3RyaW5nKCI6Iikuam9pbihbZS5jYWxsKHIsIm5hbWVzcGFjZSIpLGUuY2FsbChyLCJuYW1lIildKTtjYXNlIkpTWE1lbWJlckV4cHJlc3Npb24iOnJldHVybiBGbi5mcm9tU3RyaW5nKCIuIikuam9pbihbZS5jYWxsKHIsIm9iamVjdCIpLGUuY2FsbChyLCJwcm9wZXJ0eSIpXSk7Y2FzZSJKU1hTcHJlYWRBdHRyaWJ1dGUiOnJldHVybiBGbi5jb25jYXQoWyJ7Li4uIixlLmNhbGwociwiYXJndW1lbnQiKSwifSJdKTtjYXNlIkpTWFNwcmVhZENoaWxkIjpyZXR1cm4gRm4uY29uY2F0KFsiey4uLiIsZS5jYWxsKHIsImV4cHJlc3Npb24iKSwifSJdKTtjYXNlIkpTWEV4cHJlc3Npb25Db250YWluZXIiOnJldHVybiBGbi5jb25jYXQoWyJ7IixlLmNhbGwociwiZXhwcmVzc2lvbiIpLCJ9Il0pO2Nhc2UiSlNYRWxlbWVudCI6Y2FzZSJKU1hGcmFnbWVudCI6e3ZhciBWPSJvcGVuaW5nIisocy50eXBlPT09IkpTWEVsZW1lbnQiPyJFbGVtZW50IjoiRnJhZ21lbnQiKTt2YXIgcT0iY2xvc2luZyIrKHMudHlwZT09PSJKU1hFbGVtZW50Ij8iRWxlbWVudCI6IkZyYWdtZW50Iik7dmFyIEc9ZS5jYWxsKHIsVik7aWYoc1tWXS5zZWxmQ2xvc2luZyl7Tm4uZGVmYXVsdC5vayghc1txXSwidW5leHBlY3RlZCAiK3ErIiBlbGVtZW50IGluIHNlbGYtY2xvc2luZyAiK3MudHlwZSk7cmV0dXJuIEd9dmFyIFg9Rm4uY29uY2F0KGUubWFwKChmdW5jdGlvbihlKXt2YXIgdD1lLmdldFZhbHVlKCk7aWYoTG4uTGl0ZXJhbC5jaGVjayh0KSYmdHlwZW9mIHQudmFsdWU9PT0ic3RyaW5nIil7aWYoL1xTLy50ZXN0KHQudmFsdWUpKXtyZXR1cm4gdC52YWx1ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9ZWxzZSBpZigvXG4vLnRlc3QodC52YWx1ZSkpe3JldHVybiJcbiJ9fXJldHVybiByKGUpfSksImNoaWxkcmVuIikpLmluZGVudFRhaWwodC50YWJXaWR0aCk7dmFyIEo9ZS5jYWxsKHIscSk7cmV0dXJuIEZuLmNvbmNhdChbRyxYLEpdKX1jYXNlIkpTWE9wZW5pbmdFbGVtZW50Ijp7aS5wdXNoKCI8IixlLmNhbGwociwibmFtZSIpKTt2YXIgSD1bXTtlLmVhY2goKGZ1bmN0aW9uKGUpe0gucHVzaCgiICIscihlKSl9KSwiYXR0cmlidXRlcyIpO3ZhciBXPUZuLmNvbmNhdChIKTt2YXIgSz1XLmxlbmd0aD4xfHxXLmdldExpbmVMZW5ndGgoMSk+dC53cmFwQ29sdW1uO2lmKEspe0guZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtpZihlPT09IiAiKXtObi5kZWZhdWx0LnN0cmljdEVxdWFsKHQlMiwwKTtIW3RdPSJcbiJ9fSkpO1c9Rm4uY29uY2F0KEgpLmluZGVudFRhaWwodC50YWJXaWR0aCl9aS5wdXNoKFcscy5zZWxmQ2xvc2luZz8iIC8+IjoiPiIpO3JldHVybiBGbi5jb25jYXQoaSl9Y2FzZSJKU1hDbG9zaW5nRWxlbWVudCI6cmV0dXJuIEZuLmNvbmNhdChbIjwvIixlLmNhbGwociwibmFtZSIpLCI+Il0pO2Nhc2UiSlNYT3BlbmluZ0ZyYWdtZW50IjpyZXR1cm4gRm4uZnJvbVN0cmluZygiPD4iKTtjYXNlIkpTWENsb3NpbmdGcmFnbWVudCI6cmV0dXJuIEZuLmZyb21TdHJpbmcoIjwvPiIpO2Nhc2UiSlNYVGV4dCI6cmV0dXJuIEZuLmZyb21TdHJpbmcocy52YWx1ZSx0KTtjYXNlIkpTWEVtcHR5RXhwcmVzc2lvbiI6cmV0dXJuIEZuLmZyb21TdHJpbmcoIiIpO2Nhc2UiVHlwZUFubm90YXRlZElkZW50aWZpZXIiOnJldHVybiBGbi5jb25jYXQoW2UuY2FsbChyLCJhbm5vdGF0aW9uIiksIiAiLGUuY2FsbChyLCJpZGVudGlmaWVyIildKTtjYXNlIkNsYXNzQm9keSI6aWYocy5ib2R5Lmxlbmd0aD09PTApe3JldHVybiBGbi5mcm9tU3RyaW5nKCJ7fSIpfXJldHVybiBGbi5jb25jYXQoWyJ7XG4iLGUuY2FsbCgoZnVuY3Rpb24oZSl7cmV0dXJuIEtuKGUsdCxyKX0pLCJib2R5IikuaW5kZW50KHQudGFiV2lkdGgpLCJcbn0iXSk7Y2FzZSJDbGFzc1Byb3BlcnR5RGVmaW5pdGlvbiI6aS5wdXNoKCJzdGF0aWMgIixlLmNhbGwociwiZGVmaW5pdGlvbiIpKTtpZighTG4uTWV0aG9kRGVmaW5pdGlvbi5jaGVjayhzLmRlZmluaXRpb24pKWkucHVzaCgiOyIpO3JldHVybiBGbi5jb25jYXQoaSk7Y2FzZSJDbGFzc1Byb3BlcnR5Ijp7aWYocy5kZWNsYXJlKXtpLnB1c2goImRlY2xhcmUgIil9dmFyICQ9cy5hY2Nlc3NpYmlsaXR5fHxzLmFjY2VzcztpZih0eXBlb2YgJD09PSJzdHJpbmciKXtpLnB1c2goJCwiICIpfWlmKHMuc3RhdGljKXtpLnB1c2goInN0YXRpYyAiKX1pZihzLmFic3RyYWN0KXtpLnB1c2goImFic3RyYWN0ICIpfWlmKHMucmVhZG9ubHkpe2kucHVzaCgicmVhZG9ubHkgIil9dmFyIFQ9ZS5jYWxsKHIsImtleSIpO2lmKHMuY29tcHV0ZWQpe1Q9Rm4uY29uY2F0KFsiWyIsVCwiXSJdKX1pZihzLnZhcmlhbmNlKXtUPUZuLmNvbmNhdChbcmEoZSxyKSxUXSl9aS5wdXNoKFQpO2lmKHMub3B0aW9uYWwpe2kucHVzaCgiPyIpfWlmKHMudHlwZUFubm90YXRpb24pe2kucHVzaChlLmNhbGwociwidHlwZUFubm90YXRpb24iKSl9aWYocy52YWx1ZSl7aS5wdXNoKCIgPSAiLGUuY2FsbChyLCJ2YWx1ZSIpKX1pLnB1c2goIjsiKTtyZXR1cm4gRm4uY29uY2F0KGkpfWNhc2UiQ2xhc3NQcml2YXRlUHJvcGVydHkiOmlmKHMuc3RhdGljKXtpLnB1c2goInN0YXRpYyAiKX1pLnB1c2goZS5jYWxsKHIsImtleSIpKTtpZihzLnR5cGVBbm5vdGF0aW9uKXtpLnB1c2goZS5jYWxsKHIsInR5cGVBbm5vdGF0aW9uIikpfWlmKHMudmFsdWUpe2kucHVzaCgiID0gIixlLmNhbGwociwidmFsdWUiKSl9aS5wdXNoKCI7Iik7cmV0dXJuIEZuLmNvbmNhdChpKTtjYXNlIkNsYXNzRGVjbGFyYXRpb24iOmNhc2UiQ2xhc3NFeHByZXNzaW9uIjppZihzLmRlY2xhcmUpe2kucHVzaCgiZGVjbGFyZSAiKX1pZihzLmFic3RyYWN0KXtpLnB1c2goImFic3RyYWN0ICIpfWkucHVzaCgiY2xhc3MiKTtpZihzLmlkKXtpLnB1c2goIiAiLGUuY2FsbChyLCJpZCIpKX1pZihzLnR5cGVQYXJhbWV0ZXJzKXtpLnB1c2goZS5jYWxsKHIsInR5cGVQYXJhbWV0ZXJzIikpfWlmKHMuc3VwZXJDbGFzcyl7aS5wdXNoKCIgZXh0ZW5kcyAiLGUuY2FsbChyLCJzdXBlckNsYXNzIiksZS5jYWxsKHIsInN1cGVyVHlwZVBhcmFtZXRlcnMiKSl9aWYoc1siaW1wbGVtZW50cyJdJiZzWyJpbXBsZW1lbnRzIl0ubGVuZ3RoPjApe2kucHVzaCgiIGltcGxlbWVudHMgIixGbi5mcm9tU3RyaW5nKCIsICIpLmpvaW4oZS5tYXAociwiaW1wbGVtZW50cyIpKSl9aS5wdXNoKCIgIixlLmNhbGwociwiYm9keSIpKTtyZXR1cm4gRm4uY29uY2F0KGkpO2Nhc2UiVGVtcGxhdGVFbGVtZW50IjpyZXR1cm4gRm4uZnJvbVN0cmluZyhzLnZhbHVlLnJhdyx0KS5sb2NrSW5kZW50VGFpbCgpO2Nhc2UiVGVtcGxhdGVMaXRlcmFsIjp7dmFyIFk9ZS5tYXAociwiZXhwcmVzc2lvbnMiKTtpLnB1c2goImAiKTtlLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0TmFtZSgpO2kucHVzaChyKGUpKTtpZih0PFkubGVuZ3RoKXtpLnB1c2goIiR7IixZW3RdLCJ9Iil9fSksInF1YXNpcyIpO2kucHVzaCgiYCIpO3JldHVybiBGbi5jb25jYXQoaSkubG9ja0luZGVudFRhaWwoKX1jYXNlIlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbiI6cmV0dXJuIEZuLmNvbmNhdChbZS5jYWxsKHIsInRhZyIpLGUuY2FsbChyLCJxdWFzaSIpXSk7Y2FzZSJOb2RlIjpjYXNlIlByaW50YWJsZSI6Y2FzZSJTb3VyY2VMb2NhdGlvbiI6Y2FzZSJQb3NpdGlvbiI6Y2FzZSJTdGF0ZW1lbnQiOmNhc2UiRnVuY3Rpb24iOmNhc2UiUGF0dGVybiI6Y2FzZSJFeHByZXNzaW9uIjpjYXNlIkRlY2xhcmF0aW9uIjpjYXNlIlNwZWNpZmllciI6Y2FzZSJOYW1lZFNwZWNpZmllciI6Y2FzZSJDb21tZW50IjpjYXNlIkZsb3ciOmNhc2UiRmxvd1R5cGUiOmNhc2UiRmxvd1ByZWRpY2F0ZSI6Y2FzZSJNZW1iZXJUeXBlQW5ub3RhdGlvbiI6Y2FzZSJUeXBlIjpjYXNlIlRTSGFzT3B0aW9uYWxUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiI6Y2FzZSJUU0hhc09wdGlvbmFsVHlwZVBhcmFtZXRlcnMiOmNhc2UiVFNIYXNPcHRpb25hbFR5cGVBbm5vdGF0aW9uIjpjYXNlIkNoYWluRWxlbWVudCI6dGhyb3cgbmV3IEVycm9yKCJ1bnByaW50YWJsZSB0eXBlOiAiK0pTT04uc3RyaW5naWZ5KHMudHlwZSkpO2Nhc2UiQ29tbWVudEJsb2NrIjpjYXNlIkJsb2NrIjpyZXR1cm4gRm4uY29uY2F0KFsiLyoiLEZuLmZyb21TdHJpbmcocy52YWx1ZSx0KSwiKi8iXSk7Y2FzZSJDb21tZW50TGluZSI6Y2FzZSJMaW5lIjpyZXR1cm4gRm4uY29uY2F0KFsiLy8iLEZuLmZyb21TdHJpbmcocy52YWx1ZSx0KV0pO2Nhc2UiVHlwZUFubm90YXRpb24iOmlmKHMudHlwZUFubm90YXRpb24pe2lmKHMudHlwZUFubm90YXRpb24udHlwZSE9PSJGdW5jdGlvblR5cGVBbm5vdGF0aW9uIil7aS5wdXNoKCI6ICIpfWkucHVzaChlLmNhbGwociwidHlwZUFubm90YXRpb24iKSk7cmV0dXJuIEZuLmNvbmNhdChpKX1yZXR1cm4gRm4uZnJvbVN0cmluZygiIik7Y2FzZSJFeGlzdGVudGlhbFR5cGVQYXJhbSI6Y2FzZSJFeGlzdHNUeXBlQW5ub3RhdGlvbiI6cmV0dXJuIEZuLmZyb21TdHJpbmcoIioiLHQpO2Nhc2UiRW1wdHlUeXBlQW5ub3RhdGlvbiI6cmV0dXJuIEZuLmZyb21TdHJpbmcoImVtcHR5Iix0KTtjYXNlIkFueVR5cGVBbm5vdGF0aW9uIjpyZXR1cm4gRm4uZnJvbVN0cmluZygiYW55Iix0KTtjYXNlIk1peGVkVHlwZUFubm90YXRpb24iOnJldHVybiBGbi5mcm9tU3RyaW5nKCJtaXhlZCIsdCk7Y2FzZSJBcnJheVR5cGVBbm5vdGF0aW9uIjpyZXR1cm4gRm4uY29uY2F0KFtlLmNhbGwociwiZWxlbWVudFR5cGUiKSwiW10iXSk7Y2FzZSJUdXBsZVR5cGVBbm5vdGF0aW9uIjp7dmFyIFE9ZS5tYXAociwidHlwZXMiKTt2YXIgUD1Gbi5mcm9tU3RyaW5nKCIsICIpLmpvaW4oUSk7dmFyIFo9UC5nZXRMaW5lTGVuZ3RoKDEpPD10LndyYXBDb2x1bW47aWYoWil7aWYodC5hcnJheUJyYWNrZXRTcGFjaW5nKXtpLnB1c2goIlsgIil9ZWxzZXtpLnB1c2goIlsiKX19ZWxzZXtpLnB1c2goIltcbiIpfWUuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZS5nZXROYW1lKCk7dmFyIG49ZS5nZXRWYWx1ZSgpO2lmKCFuKXtpLnB1c2goIiwiKX1lbHNle3ZhciBhPVFbcl07aWYoWil7aWYocj4wKWkucHVzaCgiICIpfWVsc2V7YT1hLmluZGVudCh0LnRhYldpZHRoKX1pLnB1c2goYSk7aWYocjxzLnR5cGVzLmxlbmd0aC0xfHwhWiYmVW4uaXNUcmFpbGluZ0NvbW1hRW5hYmxlZCh0LCJhcnJheXMiKSlpLnB1c2goIiwiKTtpZighWilpLnB1c2goIlxuIil9fSksInR5cGVzIik7aWYoWiYmdC5hcnJheUJyYWNrZXRTcGFjaW5nKXtpLnB1c2goIiBdIil9ZWxzZXtpLnB1c2goIl0iKX1yZXR1cm4gRm4uY29uY2F0KGkpfWNhc2UiQm9vbGVhblR5cGVBbm5vdGF0aW9uIjpyZXR1cm4gRm4uZnJvbVN0cmluZygiYm9vbGVhbiIsdCk7Y2FzZSJCb29sZWFuTGl0ZXJhbFR5cGVBbm5vdGF0aW9uIjpObi5kZWZhdWx0LnN0cmljdEVxdWFsKHR5cGVvZiBzLnZhbHVlLCJib29sZWFuIik7cmV0dXJuIEZuLmZyb21TdHJpbmcoIiIrcy52YWx1ZSx0KTtjYXNlIkludGVyZmFjZVR5cGVBbm5vdGF0aW9uIjppLnB1c2goImludGVyZmFjZSIpO2lmKHMuZXh0ZW5kcyYmcy5leHRlbmRzLmxlbmd0aD4wKXtpLnB1c2goIiBleHRlbmRzICIsRm4uZnJvbVN0cmluZygiLCAiKS5qb2luKGUubWFwKHIsImV4dGVuZHMiKSkpfWkucHVzaCgiICIsZS5jYWxsKHIsImJvZHkiKSk7cmV0dXJuIEZuLmNvbmNhdChpKTtjYXNlIkRlY2xhcmVDbGFzcyI6cmV0dXJuIHRhKGUsWyJjbGFzcyAiLGUuY2FsbChyLCJpZCIpLCIgIixlLmNhbGwociwiYm9keSIpXSk7Y2FzZSJEZWNsYXJlRnVuY3Rpb24iOnJldHVybiB0YShlLFsiZnVuY3Rpb24gIixlLmNhbGwociwiaWQiKSwiOyJdKTtjYXNlIkRlY2xhcmVNb2R1bGUiOnJldHVybiB0YShlLFsibW9kdWxlICIsZS5jYWxsKHIsImlkIiksIiAiLGUuY2FsbChyLCJib2R5IildKTtjYXNlIkRlY2xhcmVNb2R1bGVFeHBvcnRzIjpyZXR1cm4gdGEoZSxbIm1vZHVsZS5leHBvcnRzIixlLmNhbGwociwidHlwZUFubm90YXRpb24iKV0pO2Nhc2UiRGVjbGFyZVZhcmlhYmxlIjpyZXR1cm4gdGEoZSxbInZhciAiLGUuY2FsbChyLCJpZCIpLCI7Il0pO2Nhc2UiRGVjbGFyZUV4cG9ydERlY2xhcmF0aW9uIjpjYXNlIkRlY2xhcmVFeHBvcnRBbGxEZWNsYXJhdGlvbiI6cmV0dXJuIEZuLmNvbmNhdChbImRlY2xhcmUgIixlYShlLHQscildKTtjYXNlIkVudW1EZWNsYXJhdGlvbiI6cmV0dXJuIEZuLmNvbmNhdChbImVudW0gIixlLmNhbGwociwiaWQiKSxlLmNhbGwociwiYm9keSIpXSk7Y2FzZSJFbnVtQm9vbGVhbkJvZHkiOmNhc2UiRW51bU51bWJlckJvZHkiOmNhc2UiRW51bVN0cmluZ0JvZHkiOmNhc2UiRW51bVN5bWJvbEJvZHkiOntpZihzLnR5cGU9PT0iRW51bVN5bWJvbEJvZHkifHxzLmV4cGxpY2l0VHlwZSl7aS5wdXNoKCIgb2YgIixzLnR5cGUuc2xpY2UoNCwtNCkudG9Mb3dlckNhc2UoKSl9aS5wdXNoKCIge1xuIixGbi5mcm9tU3RyaW5nKCJcbiIpLmpvaW4oZS5tYXAociwibWVtYmVycyIpKS5pbmRlbnQodC50YWJXaWR0aCksIlxufSIpO3JldHVybiBGbi5jb25jYXQoaSl9Y2FzZSJFbnVtRGVmYXVsdGVkTWVtYmVyIjpyZXR1cm4gRm4uY29uY2F0KFtlLmNhbGwociwiaWQiKSwiLCJdKTtjYXNlIkVudW1Cb29sZWFuTWVtYmVyIjpjYXNlIkVudW1OdW1iZXJNZW1iZXIiOmNhc2UiRW51bVN0cmluZ01lbWJlciI6cmV0dXJuIEZuLmNvbmNhdChbZS5jYWxsKHIsImlkIiksIiA9ICIsZS5jYWxsKHIsImluaXQiKSwiLCJdKTtjYXNlIkluZmVycmVkUHJlZGljYXRlIjpyZXR1cm4gRm4uZnJvbVN0cmluZygiJWNoZWNrcyIsdCk7Y2FzZSJEZWNsYXJlZFByZWRpY2F0ZSI6cmV0dXJuIEZuLmNvbmNhdChbIiVjaGVja3MoIixlLmNhbGwociwidmFsdWUiKSwiKSJdKTtjYXNlIkZ1bmN0aW9uVHlwZUFubm90YXRpb24iOnt2YXIgZWU9ZS5nZXRQYXJlbnROb2RlKDApO3ZhciB0ZT0hKExuLk9iamVjdFR5cGVDYWxsUHJvcGVydHkuY2hlY2soZWUpfHxMbi5PYmplY3RUeXBlSW50ZXJuYWxTbG90LmNoZWNrKGVlKSYmZWUubWV0aG9kfHxMbi5EZWNsYXJlRnVuY3Rpb24uY2hlY2soZS5nZXRQYXJlbnROb2RlKDIpKSk7dmFyIHJlPXRlJiYhTG4uRnVuY3Rpb25UeXBlUGFyYW0uY2hlY2soZWUpJiYhTG4uVHlwZUFsaWFzLmNoZWNrKGVlKTtpZihyZSl7aS5wdXNoKCI6ICIpfXZhciBzZT0hIXMudHlwZVBhcmFtZXRlcnM7dmFyIGllPXNlfHxzLnBhcmFtcy5sZW5ndGghPT0xfHxzLnBhcmFtc1swXS5uYW1lO2kucHVzaChzZT9lLmNhbGwociwidHlwZVBhcmFtZXRlcnMiKToiIixpZT8iKCI6IiIsWm4oZSx0LHIpLGllPyIpIjoiIik7aWYocy5yZXR1cm5UeXBlKXtpLnB1c2godGU/IiA9PiAiOiI6ICIsZS5jYWxsKHIsInJldHVyblR5cGUiKSl9cmV0dXJuIEZuLmNvbmNhdChpKX1jYXNlIkZ1bmN0aW9uVHlwZVBhcmFtIjp7dmFyIG5lPWUuY2FsbChyLCJuYW1lIik7aS5wdXNoKG5lKTtpZihzLm9wdGlvbmFsKXtpLnB1c2goIj8iKX1pZihuZS5pbmZvc1swXS5saW5lKXtpLnB1c2goIjogIil9aS5wdXNoKGUuY2FsbChyLCJ0eXBlQW5ub3RhdGlvbiIpKTtyZXR1cm4gRm4uY29uY2F0KGkpfWNhc2UiR2VuZXJpY1R5cGVBbm5vdGF0aW9uIjpyZXR1cm4gRm4uY29uY2F0KFtlLmNhbGwociwiaWQiKSxlLmNhbGwociwidHlwZVBhcmFtZXRlcnMiKV0pO2Nhc2UiRGVjbGFyZUludGVyZmFjZSI6aS5wdXNoKCJkZWNsYXJlICIpO2Nhc2UiSW50ZXJmYWNlRGVjbGFyYXRpb24iOmNhc2UiVFNJbnRlcmZhY2VEZWNsYXJhdGlvbiI6aWYocy5kZWNsYXJlKXtpLnB1c2goImRlY2xhcmUgIil9aS5wdXNoKCJpbnRlcmZhY2UgIixlLmNhbGwociwiaWQiKSxlLmNhbGwociwidHlwZVBhcmFtZXRlcnMiKSwiICIpO2lmKHNbImV4dGVuZHMiXSYmc1siZXh0ZW5kcyJdLmxlbmd0aD4wKXtpLnB1c2goImV4dGVuZHMgIixGbi5mcm9tU3RyaW5nKCIsICIpLmpvaW4oZS5tYXAociwiZXh0ZW5kcyIpKSwiICIpfWlmKHMuYm9keSl7aS5wdXNoKGUuY2FsbChyLCJib2R5IikpfXJldHVybiBGbi5jb25jYXQoaSk7Y2FzZSJDbGFzc0ltcGxlbWVudHMiOmNhc2UiSW50ZXJmYWNlRXh0ZW5kcyI6cmV0dXJuIEZuLmNvbmNhdChbZS5jYWxsKHIsImlkIiksZS5jYWxsKHIsInR5cGVQYXJhbWV0ZXJzIildKTtjYXNlIkludGVyc2VjdGlvblR5cGVBbm5vdGF0aW9uIjpyZXR1cm4gRm4uZnJvbVN0cmluZygiICYgIikuam9pbihlLm1hcChyLCJ0eXBlcyIpKTtjYXNlIk51bGxhYmxlVHlwZUFubm90YXRpb24iOnJldHVybiBGbi5jb25jYXQoWyI/IixlLmNhbGwociwidHlwZUFubm90YXRpb24iKV0pO2Nhc2UiTnVsbExpdGVyYWxUeXBlQW5ub3RhdGlvbiI6cmV0dXJuIEZuLmZyb21TdHJpbmcoIm51bGwiLHQpO2Nhc2UiVGhpc1R5cGVBbm5vdGF0aW9uIjpyZXR1cm4gRm4uZnJvbVN0cmluZygidGhpcyIsdCk7Y2FzZSJOdW1iZXJUeXBlQW5ub3RhdGlvbiI6cmV0dXJuIEZuLmZyb21TdHJpbmcoIm51bWJlciIsdCk7Y2FzZSJPYmplY3RUeXBlQ2FsbFByb3BlcnR5IjpyZXR1cm4gZS5jYWxsKHIsInZhbHVlIik7Y2FzZSJPYmplY3RUeXBlSW5kZXhlciI6aWYocy5zdGF0aWMpe2kucHVzaCgic3RhdGljICIpfWkucHVzaChyYShlLHIpLCJbIik7aWYocy5pZCl7aS5wdXNoKGUuY2FsbChyLCJpZCIpLCI6ICIpfWkucHVzaChlLmNhbGwociwia2V5IiksIl06ICIsZS5jYWxsKHIsInZhbHVlIikpO3JldHVybiBGbi5jb25jYXQoaSk7Y2FzZSJPYmplY3RUeXBlUHJvcGVydHkiOnJldHVybiBGbi5jb25jYXQoW3JhKGUsciksZS5jYWxsKHIsImtleSIpLHMub3B0aW9uYWw/Ij8iOiIiLCI6ICIsZS5jYWxsKHIsInZhbHVlIildKTtjYXNlIk9iamVjdFR5cGVJbnRlcm5hbFNsb3QiOnJldHVybiBGbi5jb25jYXQoW3Muc3RhdGljPyJzdGF0aWMgIjoiIiwiW1siLGUuY2FsbChyLCJpZCIpLCJdXSIscy5vcHRpb25hbD8iPyI6IiIscy52YWx1ZS50eXBlIT09IkZ1bmN0aW9uVHlwZUFubm90YXRpb24iPyI6ICI6IiIsZS5jYWxsKHIsInZhbHVlIildKTtjYXNlIlF1YWxpZmllZFR5cGVJZGVudGlmaWVyIjpyZXR1cm4gRm4uY29uY2F0KFtlLmNhbGwociwicXVhbGlmaWNhdGlvbiIpLCIuIixlLmNhbGwociwiaWQiKV0pO2Nhc2UiU3RyaW5nTGl0ZXJhbFR5cGVBbm5vdGF0aW9uIjpyZXR1cm4gRm4uZnJvbVN0cmluZyhvYShzLnZhbHVlLHQpLHQpO2Nhc2UiTnVtYmVyTGl0ZXJhbFR5cGVBbm5vdGF0aW9uIjpjYXNlIk51bWVyaWNMaXRlcmFsVHlwZUFubm90YXRpb24iOk5uLmRlZmF1bHQuc3RyaWN0RXF1YWwodHlwZW9mIHMudmFsdWUsIm51bWJlciIpO3JldHVybiBGbi5mcm9tU3RyaW5nKEpTT04uc3RyaW5naWZ5KHMudmFsdWUpLHQpO2Nhc2UiQmlnSW50TGl0ZXJhbFR5cGVBbm5vdGF0aW9uIjpyZXR1cm4gRm4uZnJvbVN0cmluZyhzLnJhdyx0KTtjYXNlIlN0cmluZ1R5cGVBbm5vdGF0aW9uIjpyZXR1cm4gRm4uZnJvbVN0cmluZygic3RyaW5nIix0KTtjYXNlIkRlY2xhcmVUeXBlQWxpYXMiOmkucHVzaCgiZGVjbGFyZSAiKTtjYXNlIlR5cGVBbGlhcyI6cmV0dXJuIEZuLmNvbmNhdChbInR5cGUgIixlLmNhbGwociwiaWQiKSxlLmNhbGwociwidHlwZVBhcmFtZXRlcnMiKSwiID0gIixlLmNhbGwociwicmlnaHQiKSwiOyJdKTtjYXNlIkRlY2xhcmVPcGFxdWVUeXBlIjppLnB1c2goImRlY2xhcmUgIik7Y2FzZSJPcGFxdWVUeXBlIjppLnB1c2goIm9wYXF1ZSB0eXBlICIsZS5jYWxsKHIsImlkIiksZS5jYWxsKHIsInR5cGVQYXJhbWV0ZXJzIikpO2lmKHNbInN1cGVydHlwZSJdKXtpLnB1c2goIjogIixlLmNhbGwociwic3VwZXJ0eXBlIikpfWlmKHNbImltcGx0eXBlIl0pe2kucHVzaCgiID0gIixlLmNhbGwociwiaW1wbHR5cGUiKSl9aS5wdXNoKCI7Iik7cmV0dXJuIEZuLmNvbmNhdChpKTtjYXNlIlR5cGVDYXN0RXhwcmVzc2lvbiI6cmV0dXJuIEZuLmNvbmNhdChbIigiLGUuY2FsbChyLCJleHByZXNzaW9uIiksZS5jYWxsKHIsInR5cGVBbm5vdGF0aW9uIiksIikiXSk7Y2FzZSJUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24iOmNhc2UiVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iOnJldHVybiBGbi5jb25jYXQoWyI8IixGbi5mcm9tU3RyaW5nKCIsICIpLmpvaW4oZS5tYXAociwicGFyYW1zIikpLCI+Il0pO2Nhc2UiVmFyaWFuY2UiOmlmKHMua2luZD09PSJwbHVzIil7cmV0dXJuIEZuLmZyb21TdHJpbmcoIisiKX1pZihzLmtpbmQ9PT0ibWludXMiKXtyZXR1cm4gRm4uZnJvbVN0cmluZygiLSIpfXJldHVybiBGbi5mcm9tU3RyaW5nKCIiKTtjYXNlIlR5cGVQYXJhbWV0ZXIiOmlmKHMudmFyaWFuY2Upe2kucHVzaChyYShlLHIpKX1pLnB1c2goZS5jYWxsKHIsIm5hbWUiKSk7aWYocy5ib3VuZCl7aS5wdXNoKGUuY2FsbChyLCJib3VuZCIpKX1pZihzWyJkZWZhdWx0Il0pe2kucHVzaCgiPSIsZS5jYWxsKHIsImRlZmF1bHQiKSl9cmV0dXJuIEZuLmNvbmNhdChpKTtjYXNlIlR5cGVvZlR5cGVBbm5vdGF0aW9uIjpyZXR1cm4gRm4uY29uY2F0KFtGbi5mcm9tU3RyaW5nKCJ0eXBlb2YgIix0KSxlLmNhbGwociwiYXJndW1lbnQiKV0pO2Nhc2UiVW5pb25UeXBlQW5ub3RhdGlvbiI6cmV0dXJuIEZuLmZyb21TdHJpbmcoIiB8ICIpLmpvaW4oZS5tYXAociwidHlwZXMiKSk7Y2FzZSJWb2lkVHlwZUFubm90YXRpb24iOnJldHVybiBGbi5mcm9tU3RyaW5nKCJ2b2lkIix0KTtjYXNlIk51bGxUeXBlQW5ub3RhdGlvbiI6cmV0dXJuIEZuLmZyb21TdHJpbmcoIm51bGwiLHQpO2Nhc2UiU3ltYm9sVHlwZUFubm90YXRpb24iOnJldHVybiBGbi5mcm9tU3RyaW5nKCJzeW1ib2wiLHQpO2Nhc2UiQmlnSW50VHlwZUFubm90YXRpb24iOnJldHVybiBGbi5mcm9tU3RyaW5nKCJiaWdpbnQiLHQpO2Nhc2UiVFNUeXBlIjp0aHJvdyBuZXcgRXJyb3IoInVucHJpbnRhYmxlIHR5cGU6ICIrSlNPTi5zdHJpbmdpZnkocy50eXBlKSk7Y2FzZSJUU051bWJlcktleXdvcmQiOnJldHVybiBGbi5mcm9tU3RyaW5nKCJudW1iZXIiLHQpO2Nhc2UiVFNCaWdJbnRLZXl3b3JkIjpyZXR1cm4gRm4uZnJvbVN0cmluZygiYmlnaW50Iix0KTtjYXNlIlRTT2JqZWN0S2V5d29yZCI6cmV0dXJuIEZuLmZyb21TdHJpbmcoIm9iamVjdCIsdCk7Y2FzZSJUU0Jvb2xlYW5LZXl3b3JkIjpyZXR1cm4gRm4uZnJvbVN0cmluZygiYm9vbGVhbiIsdCk7Y2FzZSJUU1N0cmluZ0tleXdvcmQiOnJldHVybiBGbi5mcm9tU3RyaW5nKCJzdHJpbmciLHQpO2Nhc2UiVFNTeW1ib2xLZXl3b3JkIjpyZXR1cm4gRm4uZnJvbVN0cmluZygic3ltYm9sIix0KTtjYXNlIlRTQW55S2V5d29yZCI6cmV0dXJuIEZuLmZyb21TdHJpbmcoImFueSIsdCk7Y2FzZSJUU1ZvaWRLZXl3b3JkIjpyZXR1cm4gRm4uZnJvbVN0cmluZygidm9pZCIsdCk7Y2FzZSJUU1RoaXNUeXBlIjpyZXR1cm4gRm4uZnJvbVN0cmluZygidGhpcyIsdCk7Y2FzZSJUU051bGxLZXl3b3JkIjpyZXR1cm4gRm4uZnJvbVN0cmluZygibnVsbCIsdCk7Y2FzZSJUU1VuZGVmaW5lZEtleXdvcmQiOnJldHVybiBGbi5mcm9tU3RyaW5nKCJ1bmRlZmluZWQiLHQpO2Nhc2UiVFNVbmtub3duS2V5d29yZCI6cmV0dXJuIEZuLmZyb21TdHJpbmcoInVua25vd24iLHQpO2Nhc2UiVFNOZXZlcktleXdvcmQiOnJldHVybiBGbi5mcm9tU3RyaW5nKCJuZXZlciIsdCk7Y2FzZSJUU0FycmF5VHlwZSI6cmV0dXJuIEZuLmNvbmNhdChbZS5jYWxsKHIsImVsZW1lbnRUeXBlIiksIltdIl0pO2Nhc2UiVFNMaXRlcmFsVHlwZSI6cmV0dXJuIGUuY2FsbChyLCJsaXRlcmFsIik7Y2FzZSJUU1VuaW9uVHlwZSI6cmV0dXJuIEZuLmZyb21TdHJpbmcoIiB8ICIpLmpvaW4oZS5tYXAociwidHlwZXMiKSk7Y2FzZSJUU0ludGVyc2VjdGlvblR5cGUiOnJldHVybiBGbi5mcm9tU3RyaW5nKCIgJiAiKS5qb2luKGUubWFwKHIsInR5cGVzIikpO2Nhc2UiVFNDb25kaXRpb25hbFR5cGUiOmkucHVzaChlLmNhbGwociwiY2hlY2tUeXBlIiksIiBleHRlbmRzICIsZS5jYWxsKHIsImV4dGVuZHNUeXBlIiksIiA/ICIsZS5jYWxsKHIsInRydWVUeXBlIiksIiA6ICIsZS5jYWxsKHIsImZhbHNlVHlwZSIpKTtyZXR1cm4gRm4uY29uY2F0KGkpO2Nhc2UiVFNJbmZlclR5cGUiOmkucHVzaCgiaW5mZXIgIixlLmNhbGwociwidHlwZVBhcmFtZXRlciIpKTtyZXR1cm4gRm4uY29uY2F0KGkpO2Nhc2UiVFNQYXJlbnRoZXNpemVkVHlwZSI6cmV0dXJuIEZuLmNvbmNhdChbIigiLGUuY2FsbChyLCJ0eXBlQW5ub3RhdGlvbiIpLCIpIl0pO2Nhc2UiVFNGdW5jdGlvblR5cGUiOnJldHVybiBGbi5jb25jYXQoW2UuY2FsbChyLCJ0eXBlUGFyYW1ldGVycyIpLCIoIixabihlLHQsciksIikgPT4gIixlLmNhbGwociwidHlwZUFubm90YXRpb24iLCJ0eXBlQW5ub3RhdGlvbiIpXSk7Y2FzZSJUU0NvbnN0cnVjdG9yVHlwZSI6cmV0dXJuIEZuLmNvbmNhdChbIm5ldyAiLGUuY2FsbChyLCJ0eXBlUGFyYW1ldGVycyIpLCIoIixabihlLHQsciksIikgPT4gIixlLmNhbGwociwidHlwZUFubm90YXRpb24iLCJ0eXBlQW5ub3RhdGlvbiIpXSk7Y2FzZSJUU01hcHBlZFR5cGUiOntpLnB1c2gocy5yZWFkb25seT8icmVhZG9ubHkgIjoiIiwiWyIsZS5jYWxsKHIsInR5cGVQYXJhbWV0ZXIiKSwiXSIscy5vcHRpb25hbD8iPyI6IiIpO2lmKHMudHlwZUFubm90YXRpb24pe2kucHVzaCgiOiAiLGUuY2FsbChyLCJ0eXBlQW5ub3RhdGlvbiIpLCI7Iil9cmV0dXJuIEZuLmNvbmNhdChbIntcbiIsRm4uY29uY2F0KGkpLmluZGVudCh0LnRhYldpZHRoKSwiXG59Il0pfWNhc2UiVFNUdXBsZVR5cGUiOnJldHVybiBGbi5jb25jYXQoWyJbIixGbi5mcm9tU3RyaW5nKCIsICIpLmpvaW4oZS5tYXAociwiZWxlbWVudFR5cGVzIikpLCJdIl0pO2Nhc2UiVFNOYW1lZFR1cGxlTWVtYmVyIjppLnB1c2goZS5jYWxsKHIsImxhYmVsIikpO2lmKHMub3B0aW9uYWwpe2kucHVzaCgiPyIpfWkucHVzaCgiOiAiLGUuY2FsbChyLCJlbGVtZW50VHlwZSIpKTtyZXR1cm4gRm4uY29uY2F0KGkpO2Nhc2UiVFNSZXN0VHlwZSI6cmV0dXJuIEZuLmNvbmNhdChbIi4uLiIsZS5jYWxsKHIsInR5cGVBbm5vdGF0aW9uIildKTtjYXNlIlRTT3B0aW9uYWxUeXBlIjpyZXR1cm4gRm4uY29uY2F0KFtlLmNhbGwociwidHlwZUFubm90YXRpb24iKSwiPyJdKTtjYXNlIlRTSW5kZXhlZEFjY2Vzc1R5cGUiOnJldHVybiBGbi5jb25jYXQoW2UuY2FsbChyLCJvYmplY3RUeXBlIiksIlsiLGUuY2FsbChyLCJpbmRleFR5cGUiKSwiXSJdKTtjYXNlIlRTVHlwZU9wZXJhdG9yIjpyZXR1cm4gRm4uY29uY2F0KFtlLmNhbGwociwib3BlcmF0b3IiKSwiICIsZS5jYWxsKHIsInR5cGVBbm5vdGF0aW9uIildKTtjYXNlIlRTVHlwZUxpdGVyYWwiOnt2YXIgYWU9Rm4uZnJvbVN0cmluZygiLFxuIikuam9pbihlLm1hcChyLCJtZW1iZXJzIikpO2lmKGFlLmlzRW1wdHkoKSl7cmV0dXJuIEZuLmZyb21TdHJpbmcoInt9Iix0KX1pLnB1c2goIntcbiIsYWUuaW5kZW50KHQudGFiV2lkdGgpLCJcbn0iKTtyZXR1cm4gRm4uY29uY2F0KGkpfWNhc2UiVFNFbnVtTWVtYmVyIjppLnB1c2goZS5jYWxsKHIsImlkIikpO2lmKHMuaW5pdGlhbGl6ZXIpe2kucHVzaCgiID0gIixlLmNhbGwociwiaW5pdGlhbGl6ZXIiKSl9cmV0dXJuIEZuLmNvbmNhdChpKTtjYXNlIlRTVHlwZVF1ZXJ5IjpyZXR1cm4gRm4uY29uY2F0KFsidHlwZW9mICIsZS5jYWxsKHIsImV4cHJOYW1lIildKTtjYXNlIlRTUGFyYW1ldGVyUHJvcGVydHkiOmlmKHMuYWNjZXNzaWJpbGl0eSl7aS5wdXNoKHMuYWNjZXNzaWJpbGl0eSwiICIpfWlmKHMuZXhwb3J0KXtpLnB1c2goImV4cG9ydCAiKX1pZihzLnN0YXRpYyl7aS5wdXNoKCJzdGF0aWMgIil9aWYocy5yZWFkb25seSl7aS5wdXNoKCJyZWFkb25seSAiKX1pLnB1c2goZS5jYWxsKHIsInBhcmFtZXRlciIpKTtyZXR1cm4gRm4uY29uY2F0KGkpO2Nhc2UiVFNUeXBlUmVmZXJlbmNlIjpyZXR1cm4gRm4uY29uY2F0KFtlLmNhbGwociwidHlwZU5hbWUiKSxlLmNhbGwociwidHlwZVBhcmFtZXRlcnMiKV0pO2Nhc2UiVFNRdWFsaWZpZWROYW1lIjpyZXR1cm4gRm4uY29uY2F0KFtlLmNhbGwociwibGVmdCIpLCIuIixlLmNhbGwociwicmlnaHQiKV0pO2Nhc2UiVFNBc0V4cHJlc3Npb24iOnt2YXIgb2U9ZS5jYWxsKHIsImV4cHJlc3Npb24iKTtpLnB1c2gob2UsRm4uZnJvbVN0cmluZygiIGFzICIpLGUuY2FsbChyLCJ0eXBlQW5ub3RhdGlvbiIpKTtyZXR1cm4gRm4uY29uY2F0KGkpfWNhc2UiVFNOb25OdWxsRXhwcmVzc2lvbiI6cmV0dXJuIEZuLmNvbmNhdChbZS5jYWxsKHIsImV4cHJlc3Npb24iKSwiISJdKTtjYXNlIlRTVHlwZUFubm90YXRpb24iOnJldHVybiBGbi5jb25jYXQoWyI6ICIsZS5jYWxsKHIsInR5cGVBbm5vdGF0aW9uIildKTtjYXNlIlRTSW5kZXhTaWduYXR1cmUiOnJldHVybiBGbi5jb25jYXQoW3MucmVhZG9ubHk/InJlYWRvbmx5ICI6IiIsIlsiLGUubWFwKHIsInBhcmFtZXRlcnMiKSwiXSIsZS5jYWxsKHIsInR5cGVBbm5vdGF0aW9uIildKTtjYXNlIlRTUHJvcGVydHlTaWduYXR1cmUiOmkucHVzaChyYShlLHIpLHMucmVhZG9ubHk/InJlYWRvbmx5ICI6IiIpO2lmKHMuY29tcHV0ZWQpe2kucHVzaCgiWyIsZS5jYWxsKHIsImtleSIpLCJdIil9ZWxzZXtpLnB1c2goZS5jYWxsKHIsImtleSIpKX1pLnB1c2gocy5vcHRpb25hbD8iPyI6IiIsZS5jYWxsKHIsInR5cGVBbm5vdGF0aW9uIikpO3JldHVybiBGbi5jb25jYXQoaSk7Y2FzZSJUU01ldGhvZFNpZ25hdHVyZSI6aWYocy5jb21wdXRlZCl7aS5wdXNoKCJbIixlLmNhbGwociwia2V5IiksIl0iKX1lbHNle2kucHVzaChlLmNhbGwociwia2V5IikpfWlmKHMub3B0aW9uYWwpe2kucHVzaCgiPyIpfWkucHVzaChlLmNhbGwociwidHlwZVBhcmFtZXRlcnMiKSwiKCIsWm4oZSx0LHIpLCIpIixlLmNhbGwociwidHlwZUFubm90YXRpb24iKSk7cmV0dXJuIEZuLmNvbmNhdChpKTtjYXNlIlRTVHlwZVByZWRpY2F0ZSI6aWYocy5hc3NlcnRzKXtpLnB1c2goImFzc2VydHMgIil9aS5wdXNoKGUuY2FsbChyLCJwYXJhbWV0ZXJOYW1lIikpO2lmKHMudHlwZUFubm90YXRpb24pe2kucHVzaCgiIGlzICIsZS5jYWxsKHIsInR5cGVBbm5vdGF0aW9uIiwidHlwZUFubm90YXRpb24iKSl9cmV0dXJuIEZuLmNvbmNhdChpKTtjYXNlIlRTQ2FsbFNpZ25hdHVyZURlY2xhcmF0aW9uIjpyZXR1cm4gRm4uY29uY2F0KFtlLmNhbGwociwidHlwZVBhcmFtZXRlcnMiKSwiKCIsWm4oZSx0LHIpLCIpIixlLmNhbGwociwidHlwZUFubm90YXRpb24iKV0pO2Nhc2UiVFNDb25zdHJ1Y3RTaWduYXR1cmVEZWNsYXJhdGlvbiI6aWYocy50eXBlUGFyYW1ldGVycyl7aS5wdXNoKCJuZXciLGUuY2FsbChyLCJ0eXBlUGFyYW1ldGVycyIpKX1lbHNle2kucHVzaCgibmV3ICIpfWkucHVzaCgiKCIsWm4oZSx0LHIpLCIpIixlLmNhbGwociwidHlwZUFubm90YXRpb24iKSk7cmV0dXJuIEZuLmNvbmNhdChpKTtjYXNlIlRTVHlwZUFsaWFzRGVjbGFyYXRpb24iOnJldHVybiBGbi5jb25jYXQoW3MuZGVjbGFyZT8iZGVjbGFyZSAiOiIiLCJ0eXBlICIsZS5jYWxsKHIsImlkIiksZS5jYWxsKHIsInR5cGVQYXJhbWV0ZXJzIiksIiA9ICIsZS5jYWxsKHIsInR5cGVBbm5vdGF0aW9uIiksIjsiXSk7Y2FzZSJUU1R5cGVQYXJhbWV0ZXIiOntpLnB1c2goZS5jYWxsKHIsIm5hbWUiKSk7dmFyIGVlPWUuZ2V0UGFyZW50Tm9kZSgwKTt2YXIgbGU9TG4uVFNNYXBwZWRUeXBlLmNoZWNrKGVlKTtpZihzLmNvbnN0cmFpbnQpe2kucHVzaChsZT8iIGluICI6IiBleHRlbmRzICIsZS5jYWxsKHIsImNvbnN0cmFpbnQiKSl9aWYoc1siZGVmYXVsdCJdKXtpLnB1c2goIiA9ICIsZS5jYWxsKHIsImRlZmF1bHQiKSl9cmV0dXJuIEZuLmNvbmNhdChpKX1jYXNlIlRTVHlwZUFzc2VydGlvbiI6e2kucHVzaCgiPCIsZS5jYWxsKHIsInR5cGVBbm5vdGF0aW9uIiksIj4gIixlLmNhbGwociwiZXhwcmVzc2lvbiIpKTtyZXR1cm4gRm4uY29uY2F0KGkpfWNhc2UiVFNUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24iOmNhc2UiVFNUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiI6cmV0dXJuIEZuLmNvbmNhdChbIjwiLEZuLmZyb21TdHJpbmcoIiwgIikuam9pbihlLm1hcChyLCJwYXJhbXMiKSksIj4iXSk7Y2FzZSJUU0VudW1EZWNsYXJhdGlvbiI6e2kucHVzaChzLmRlY2xhcmU/ImRlY2xhcmUgIjoiIixzLmNvbnN0PyJjb25zdCAiOiIiLCJlbnVtICIsZS5jYWxsKHIsImlkIikpO3ZhciBhZT1Gbi5mcm9tU3RyaW5nKCIsXG4iKS5qb2luKGUubWFwKHIsIm1lbWJlcnMiKSk7aWYoYWUuaXNFbXB0eSgpKXtpLnB1c2goIiB7fSIpfWVsc2V7aS5wdXNoKCIge1xuIixhZS5pbmRlbnQodC50YWJXaWR0aCksIlxufSIpfXJldHVybiBGbi5jb25jYXQoaSl9Y2FzZSJUU0V4cHJlc3Npb25XaXRoVHlwZUFyZ3VtZW50cyI6cmV0dXJuIEZuLmNvbmNhdChbZS5jYWxsKHIsImV4cHJlc3Npb24iKSxlLmNhbGwociwidHlwZVBhcmFtZXRlcnMiKV0pO2Nhc2UiVFNJbnRlcmZhY2VCb2R5Ijp7dmFyIHU9Rm4uZnJvbVN0cmluZygiO1xuIikuam9pbihlLm1hcChyLCJib2R5IikpO2lmKHUuaXNFbXB0eSgpKXtyZXR1cm4gRm4uZnJvbVN0cmluZygie30iLHQpfXJldHVybiBGbi5jb25jYXQoWyJ7XG4iLHUuaW5kZW50KHQudGFiV2lkdGgpLCI7IiwiXG59Il0pfWNhc2UiVFNJbXBvcnRUeXBlIjppLnB1c2goImltcG9ydCgiLGUuY2FsbChyLCJhcmd1bWVudCIpLCIpIik7aWYocy5xdWFsaWZpZXIpe2kucHVzaCgiLiIsZS5jYWxsKHIsInF1YWxpZmllciIpKX1pZihzLnR5cGVQYXJhbWV0ZXJzKXtpLnB1c2goZS5jYWxsKHIsInR5cGVQYXJhbWV0ZXJzIikpfXJldHVybiBGbi5jb25jYXQoaSk7Y2FzZSJUU0ltcG9ydEVxdWFsc0RlY2xhcmF0aW9uIjppZihzLmlzRXhwb3J0KXtpLnB1c2goImV4cG9ydCAiKX1pLnB1c2goImltcG9ydCAiLGUuY2FsbChyLCJpZCIpLCIgPSAiLGUuY2FsbChyLCJtb2R1bGVSZWZlcmVuY2UiKSk7cmV0dXJuIGxhKEZuLmNvbmNhdChpKSk7Y2FzZSJUU0V4dGVybmFsTW9kdWxlUmVmZXJlbmNlIjpyZXR1cm4gRm4uY29uY2F0KFsicmVxdWlyZSgiLGUuY2FsbChyLCJleHByZXNzaW9uIiksIikiXSk7Y2FzZSJUU01vZHVsZURlY2xhcmF0aW9uIjp7dmFyIGVlPWUuZ2V0UGFyZW50Tm9kZSgpO2lmKGVlLnR5cGU9PT0iVFNNb2R1bGVEZWNsYXJhdGlvbiIpe2kucHVzaCgiLiIpfWVsc2V7aWYocy5kZWNsYXJlKXtpLnB1c2goImRlY2xhcmUgIil9aWYoIXMuZ2xvYmFsKXt2YXIgdWU9cy5pZC50eXBlPT09IlN0cmluZ0xpdGVyYWwifHxzLmlkLnR5cGU9PT0iTGl0ZXJhbCImJnR5cGVvZiBzLmlkLnZhbHVlPT09InN0cmluZyI7aWYodWUpe2kucHVzaCgibW9kdWxlICIpfWVsc2UgaWYocy5sb2MmJnMubG9jLmxpbmVzJiZzLmlkLmxvYyl7dmFyIGNlPXMubG9jLmxpbmVzLnNsaWNlU3RyaW5nKHMubG9jLnN0YXJ0LHMuaWQubG9jLnN0YXJ0KTtpZihjZS5pbmRleE9mKCJtb2R1bGUiKT49MCl7aS5wdXNoKCJtb2R1bGUgIil9ZWxzZXtpLnB1c2goIm5hbWVzcGFjZSAiKX19ZWxzZXtpLnB1c2goIm5hbWVzcGFjZSAiKX19fWkucHVzaChlLmNhbGwociwiaWQiKSk7aWYocy5ib2R5JiZzLmJvZHkudHlwZT09PSJUU01vZHVsZURlY2xhcmF0aW9uIil7aS5wdXNoKGUuY2FsbChyLCJib2R5IikpfWVsc2UgaWYocy5ib2R5KXt2YXIgaGU9ZS5jYWxsKHIsImJvZHkiKTtpZihoZS5pc0VtcHR5KCkpe2kucHVzaCgiIHt9Iil9ZWxzZXtpLnB1c2goIiB7XG4iLGhlLmluZGVudCh0LnRhYldpZHRoKSwiXG59Iil9fXJldHVybiBGbi5jb25jYXQoaSl9Y2FzZSJUU01vZHVsZUJsb2NrIjpyZXR1cm4gZS5jYWxsKChmdW5jdGlvbihlKXtyZXR1cm4gS24oZSx0LHIpfSksImJvZHkiKTtjYXNlIkNsYXNzSGVyaXRhZ2UiOmNhc2UiQ29tcHJlaGVuc2lvbkJsb2NrIjpjYXNlIkNvbXByZWhlbnNpb25FeHByZXNzaW9uIjpjYXNlIkdsb2IiOmNhc2UiR2VuZXJhdG9yRXhwcmVzc2lvbiI6Y2FzZSJMZXRTdGF0ZW1lbnQiOmNhc2UiTGV0RXhwcmVzc2lvbiI6Y2FzZSJHcmFwaEV4cHJlc3Npb24iOmNhc2UiR3JhcGhJbmRleEV4cHJlc3Npb24iOmNhc2UiWE1MRGVmYXVsdERlY2xhcmF0aW9uIjpjYXNlIlhNTEFueU5hbWUiOmNhc2UiWE1MUXVhbGlmaWVkSWRlbnRpZmllciI6Y2FzZSJYTUxGdW5jdGlvblF1YWxpZmllZElkZW50aWZpZXIiOmNhc2UiWE1MQXR0cmlidXRlU2VsZWN0b3IiOmNhc2UiWE1MRmlsdGVyRXhwcmVzc2lvbiI6Y2FzZSJYTUwiOmNhc2UiWE1MRWxlbWVudCI6Y2FzZSJYTUxMaXN0IjpjYXNlIlhNTEVzY2FwZSI6Y2FzZSJYTUxUZXh0IjpjYXNlIlhNTFN0YXJ0VGFnIjpjYXNlIlhNTEVuZFRhZyI6Y2FzZSJYTUxQb2ludFRhZyI6Y2FzZSJYTUxOYW1lIjpjYXNlIlhNTEF0dHJpYnV0ZSI6Y2FzZSJYTUxDZGF0YSI6Y2FzZSJYTUxDb21tZW50IjpjYXNlIlhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiI6ZGVmYXVsdDpkZWJ1Z2dlcjt0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitKU09OLnN0cmluZ2lmeShzLnR5cGUpKX19ZnVuY3Rpb24gV24oZSx0KXt2YXIgcj1bXTt2YXIgcz1lLmdldFZhbHVlKCk7aWYocy5kZWNvcmF0b3JzJiZzLmRlY29yYXRvcnMubGVuZ3RoPjAmJiFVbi5nZXRQYXJlbnRFeHBvcnREZWNsYXJhdGlvbihlKSl7ZS5lYWNoKChmdW5jdGlvbihlKXtyLnB1c2godChlKSwiXG4iKX0pLCJkZWNvcmF0b3JzIil9ZWxzZSBpZihVbi5pc0V4cG9ydERlY2xhcmF0aW9uKHMpJiZzLmRlY2xhcmF0aW9uJiZzLmRlY2xhcmF0aW9uLmRlY29yYXRvcnMpe2UuZWFjaCgoZnVuY3Rpb24oZSl7ci5wdXNoKHQoZSksIlxuIil9KSwiZGVjbGFyYXRpb24iLCJkZWNvcmF0b3JzIil9cmV0dXJuIEZuLmNvbmNhdChyKX1mdW5jdGlvbiBLbihlLHQscil7dmFyIHM9W107dmFyIGk9ZmFsc2U7dmFyIG49ZmFsc2U7ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmdldFZhbHVlKCk7aWYoIXQpe3JldHVybn1pZih0LnR5cGU9PT0iRW1wdHlTdGF0ZW1lbnQiJiYhKHQuY29tbWVudHMmJnQuY29tbWVudHMubGVuZ3RoPjApKXtyZXR1cm59aWYoTG4uQ29tbWVudC5jaGVjayh0KSl7aT10cnVlfWVsc2UgaWYoTG4uU3RhdGVtZW50LmNoZWNrKHQpKXtuPXRydWV9ZWxzZXtCbi5hc3NlcnQodCl9cy5wdXNoKHtub2RlOnQscHJpbnRlZDpyKGUpfSl9KSk7aWYoaSl7Tm4uZGVmYXVsdC5zdHJpY3RFcXVhbChuLGZhbHNlLCJDb21tZW50cyBtYXkgYXBwZWFyIGFzIHN0YXRlbWVudHMgaW4gb3RoZXJ3aXNlIGVtcHR5IHN0YXRlbWVudCAiKyJsaXN0cywgYnV0IG1heSBub3QgY29leGlzdCB3aXRoIG5vbi1Db21tZW50IG5vZGVzLiIpfXZhciBhPW51bGw7dmFyIG89cy5sZW5ndGg7dmFyIGw9W107cy5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3ZhciBzPWUucHJpbnRlZDt2YXIgaT1lLm5vZGU7dmFyIG49cy5sZW5ndGg+MTt2YXIgdT1yPjA7dmFyIGM9cjxvLTE7dmFyIGg7dmFyIHA7dmFyIGY9aSYmaS5sb2MmJmkubG9jLmxpbmVzO3ZhciBkPWYmJnQucmV1c2VXaGl0ZXNwYWNlJiZVbi5nZXRUcnVlTG9jKGksZik7aWYodSl7aWYoZCl7dmFyIG09Zi5za2lwU3BhY2VzKGQuc3RhcnQsdHJ1ZSk7dmFyIHk9bT9tLmxpbmU6MTt2YXIgZz1kLnN0YXJ0LmxpbmUteTtoPUFycmF5KGcrMSkuam9pbigiXG4iKX1lbHNle2g9bj8iXG5cbiI6IlxuIn19ZWxzZXtoPSIifWlmKGMpe2lmKGQpe3ZhciB4PWYuc2tpcFNwYWNlcyhkLmVuZCk7dmFyIHY9eD94LmxpbmU6Zi5sZW5ndGg7dmFyIGI9di1kLmVuZC5saW5lO3A9QXJyYXkoYisxKS5qb2luKCJcbiIpfWVsc2V7cD1uPyJcblxuIjoiXG4ifX1lbHNle3A9IiJ9bC5wdXNoKCRuKGEsaCkscyk7aWYoYyl7YT1wfWVsc2UgaWYocCl7bC5wdXNoKHApfX0pKTtyZXR1cm4gRm4uY29uY2F0KGwpfWZ1bmN0aW9uICRuKGUsdCl7aWYoIWUmJiF0KXtyZXR1cm4gRm4uZnJvbVN0cmluZygiIil9aWYoIWUpe3JldHVybiBGbi5mcm9tU3RyaW5nKHQpfWlmKCF0KXtyZXR1cm4gRm4uZnJvbVN0cmluZyhlKX12YXIgcj1Gbi5mcm9tU3RyaW5nKGUpO3ZhciBzPUZuLmZyb21TdHJpbmcodCk7aWYocy5sZW5ndGg+ci5sZW5ndGgpe3JldHVybiBzfXJldHVybiByfWZ1bmN0aW9uIFluKGUsdCxyKXt2YXIgcz1lLmdldE5vZGUoKTt2YXIgaT1zLmtpbmQ7dmFyIG49W107dmFyIGE9cy52YWx1ZTtpZighTG4uRnVuY3Rpb25FeHByZXNzaW9uLmNoZWNrKGEpKXthPXN9dmFyIG89cy5hY2Nlc3NpYmlsaXR5fHxzLmFjY2VzcztpZih0eXBlb2Ygbz09PSJzdHJpbmciKXtuLnB1c2gobywiICIpfWlmKHMuc3RhdGljKXtuLnB1c2goInN0YXRpYyAiKX1pZihzLmFic3RyYWN0KXtuLnB1c2goImFic3RyYWN0ICIpfWlmKHMucmVhZG9ubHkpe24ucHVzaCgicmVhZG9ubHkgIil9aWYoYS5hc3luYyl7bi5wdXNoKCJhc3luYyAiKX1pZihhLmdlbmVyYXRvcil7bi5wdXNoKCIqIil9aWYoaT09PSJnZXQifHxpPT09InNldCIpe24ucHVzaChpLCIgIil9dmFyIGw9ZS5jYWxsKHIsImtleSIpO2lmKHMuY29tcHV0ZWQpe2w9Rm4uY29uY2F0KFsiWyIsbCwiXSJdKX1uLnB1c2gobCk7aWYocy5vcHRpb25hbCl7bi5wdXNoKCI/Iil9aWYocz09PWEpe24ucHVzaChlLmNhbGwociwidHlwZVBhcmFtZXRlcnMiKSwiKCIsWm4oZSx0LHIpLCIpIixlLmNhbGwociwicmV0dXJuVHlwZSIpKTtpZihzLmJvZHkpe24ucHVzaCgiICIsZS5jYWxsKHIsImJvZHkiKSl9ZWxzZXtuLnB1c2goIjsiKX19ZWxzZXtuLnB1c2goZS5jYWxsKHIsInZhbHVlIiwidHlwZVBhcmFtZXRlcnMiKSwiKCIsZS5jYWxsKChmdW5jdGlvbihlKXtyZXR1cm4gWm4oZSx0LHIpfSksInZhbHVlIiksIikiLGUuY2FsbChyLCJ2YWx1ZSIsInJldHVyblR5cGUiKSk7aWYoYS5ib2R5KXtuLnB1c2goIiAiLGUuY2FsbChyLCJ2YWx1ZSIsImJvZHkiKSl9ZWxzZXtuLnB1c2goIjsiKX19cmV0dXJuIEZuLmNvbmNhdChuKX1mdW5jdGlvbiBRbihlLHQscil7dmFyIHM9ZS5tYXAociwiYXJndW1lbnRzIik7dmFyIGk9VW4uaXNUcmFpbGluZ0NvbW1hRW5hYmxlZCh0LCJwYXJhbWV0ZXJzIik7dmFyIG49Rm4uZnJvbVN0cmluZygiLCAiKS5qb2luKHMpO2lmKG4uZ2V0TGluZUxlbmd0aCgxKT50LndyYXBDb2x1bW4pe249Rm4uZnJvbVN0cmluZygiLFxuIikuam9pbihzKTtyZXR1cm4gRm4uY29uY2F0KFsiKFxuIixuLmluZGVudCh0LnRhYldpZHRoKSxpPyIsXG4pIjoiXG4pIl0pfXJldHVybiBGbi5jb25jYXQoWyIoIixuLCIpIl0pfWZ1bmN0aW9uIFpuKGUsdCxyKXt2YXIgcz1lLmdldFZhbHVlKCk7dmFyIGk7dmFyIG49W107aWYocy5wYXJhbXMpe2k9cy5wYXJhbXM7bj1lLm1hcChyLCJwYXJhbXMiKX1lbHNlIGlmKHMucGFyYW1ldGVycyl7aT1zLnBhcmFtZXRlcnM7bj1lLm1hcChyLCJwYXJhbWV0ZXJzIil9aWYocy5kZWZhdWx0cyl7ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmdldE5hbWUoKTt2YXIgcz1uW3RdO2lmKHMmJmUuZ2V0VmFsdWUoKSl7blt0XT1Gbi5jb25jYXQoW3MsIiA9ICIscihlKV0pfX0pLCJkZWZhdWx0cyIpfWlmKHMucmVzdCl7bi5wdXNoKEZuLmNvbmNhdChbIi4uLiIsZS5jYWxsKHIsInJlc3QiKV0pKX12YXIgYT1Gbi5mcm9tU3RyaW5nKCIsICIpLmpvaW4obik7aWYoYS5sZW5ndGg+MXx8YS5nZXRMaW5lTGVuZ3RoKDEpPnQud3JhcENvbHVtbil7YT1Gbi5mcm9tU3RyaW5nKCIsXG4iKS5qb2luKG4pO2lmKFVuLmlzVHJhaWxpbmdDb21tYUVuYWJsZWQodCwicGFyYW1ldGVycyIpJiYhcy5yZXN0JiZpW2kubGVuZ3RoLTFdLnR5cGUhPT0iUmVzdEVsZW1lbnQiKXthPUZuLmNvbmNhdChbYSwiLFxuIl0pfWVsc2V7YT1Gbi5jb25jYXQoW2EsIlxuIl0pfXJldHVybiBGbi5jb25jYXQoWyJcbiIsYS5pbmRlbnQodC50YWJXaWR0aCldKX1yZXR1cm4gYX1mdW5jdGlvbiBlYShlLHQscil7dmFyIHM9ZS5nZXRWYWx1ZSgpO3ZhciBpPVsiZXhwb3J0ICJdO2lmKHMuZXhwb3J0S2luZCYmcy5leHBvcnRLaW5kPT09InR5cGUiKXtpZighcy5kZWNsYXJhdGlvbil7aS5wdXNoKCJ0eXBlICIpfX12YXIgbj10Lm9iamVjdEN1cmx5U3BhY2luZztMbi5EZWNsYXJhdGlvbi5hc3NlcnQocyk7aWYoc1siZGVmYXVsdCJdfHxzLnR5cGU9PT0iRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uIil7aS5wdXNoKCJkZWZhdWx0ICIpfWlmKHMuZGVjbGFyYXRpb24pe2kucHVzaChlLmNhbGwociwiZGVjbGFyYXRpb24iKSl9ZWxzZSBpZihzLnNwZWNpZmllcnMpe2lmKHMuc3BlY2lmaWVycy5sZW5ndGg9PT0xJiZzLnNwZWNpZmllcnNbMF0udHlwZT09PSJFeHBvcnRCYXRjaFNwZWNpZmllciIpe2kucHVzaCgiKiIpfWVsc2UgaWYocy5zcGVjaWZpZXJzLmxlbmd0aD09PTApe2kucHVzaCgie30iKX1lbHNlIGlmKHMuc3BlY2lmaWVyc1swXS50eXBlPT09IkV4cG9ydERlZmF1bHRTcGVjaWZpZXIiKXt2YXIgYT1bXTt2YXIgbz1bXTtlLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0VmFsdWUoKTtpZih0LnR5cGU9PT0iRXhwb3J0RGVmYXVsdFNwZWNpZmllciIpe2EucHVzaChyKGUpKX1lbHNle28ucHVzaChyKGUpKX19KSwic3BlY2lmaWVycyIpO2EuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtpZih0PjApe2kucHVzaCgiLCAiKX1pLnB1c2goZSl9KSk7aWYoby5sZW5ndGg+MCl7dmFyIGw9Rm4uZnJvbVN0cmluZygiLCAiKS5qb2luKG8pO2lmKGwuZ2V0TGluZUxlbmd0aCgxKT50LndyYXBDb2x1bW4pe2w9Rm4uY29uY2F0KFtGbi5mcm9tU3RyaW5nKCIsXG4iKS5qb2luKG8pLmluZGVudCh0LnRhYldpZHRoKSwiLCJdKX1pZihhLmxlbmd0aD4wKXtpLnB1c2goIiwgIil9aWYobC5sZW5ndGg+MSl7aS5wdXNoKCJ7XG4iLGwsIlxufSIpfWVsc2UgaWYodC5vYmplY3RDdXJseVNwYWNpbmcpe2kucHVzaCgieyAiLGwsIiB9Iil9ZWxzZXtpLnB1c2goInsiLGwsIn0iKX19fWVsc2V7aS5wdXNoKG4/InsgIjoieyIsRm4uZnJvbVN0cmluZygiLCAiKS5qb2luKGUubWFwKHIsInNwZWNpZmllcnMiKSksbj8iIH0iOiJ9Iil9aWYocy5zb3VyY2Upe2kucHVzaCgiIGZyb20gIixlLmNhbGwociwic291cmNlIikpfX12YXIgdT1Gbi5jb25jYXQoaSk7aWYoaWEodSkhPT0iOyImJiEocy5kZWNsYXJhdGlvbiYmKHMuZGVjbGFyYXRpb24udHlwZT09PSJGdW5jdGlvbkRlY2xhcmF0aW9uInx8cy5kZWNsYXJhdGlvbi50eXBlPT09IkNsYXNzRGVjbGFyYXRpb24ifHxzLmRlY2xhcmF0aW9uLnR5cGU9PT0iVFNNb2R1bGVEZWNsYXJhdGlvbiJ8fHMuZGVjbGFyYXRpb24udHlwZT09PSJUU0ludGVyZmFjZURlY2xhcmF0aW9uInx8cy5kZWNsYXJhdGlvbi50eXBlPT09IlRTRW51bURlY2xhcmF0aW9uIikpKXt1PUZuLmNvbmNhdChbdSwiOyJdKX1yZXR1cm4gdX1mdW5jdGlvbiB0YShlLHQpe3ZhciByPVVuLmdldFBhcmVudEV4cG9ydERlY2xhcmF0aW9uKGUpO2lmKHIpe05uLmRlZmF1bHQuc3RyaWN0RXF1YWwoci50eXBlLCJEZWNsYXJlRXhwb3J0RGVjbGFyYXRpb24iKX1lbHNle3QudW5zaGlmdCgiZGVjbGFyZSAiKX1yZXR1cm4gRm4uY29uY2F0KHQpfWZ1bmN0aW9uIHJhKGUsdCl7cmV0dXJuIGUuY2FsbCgoZnVuY3Rpb24oZSl7dmFyIHI9ZS5nZXRWYWx1ZSgpO2lmKHIpe2lmKHI9PT0icGx1cyIpe3JldHVybiBGbi5mcm9tU3RyaW5nKCIrIil9aWYocj09PSJtaW51cyIpe3JldHVybiBGbi5mcm9tU3RyaW5nKCItIil9cmV0dXJuIHQoZSl9cmV0dXJuIEZuLmZyb21TdHJpbmcoIiIpfSksInZhcmlhbmNlIil9ZnVuY3Rpb24gc2EoZSx0KXtpZihlLmxlbmd0aD4xKXJldHVybiBGbi5jb25jYXQoWyIgIixlXSk7cmV0dXJuIEZuLmNvbmNhdChbIlxuIixsYShlKS5pbmRlbnQodC50YWJXaWR0aCldKX1mdW5jdGlvbiBpYShlKXt2YXIgdD1lLmxhc3RQb3MoKTtkb3t2YXIgcj1lLmNoYXJBdCh0KTtpZigvXFMvLnRlc3QocikpcmV0dXJuIHJ9d2hpbGUoZS5wcmV2UG9zKHQpKX1mdW5jdGlvbiBuYShlKXtyZXR1cm4gaWEoZSk9PT0ifSJ9ZnVuY3Rpb24gYWEoZSl7cmV0dXJuIGUucmVwbGFjZSgvWyciXS9nLChmdW5jdGlvbihlKXtyZXR1cm4gZT09PSciJz8iJyI6JyInfSkpfWZ1bmN0aW9uIG9hKGUsdCl7Qm4uYXNzZXJ0KGUpO3N3aXRjaCh0LnF1b3RlKXtjYXNlImF1dG8iOnt2YXIgcj1KU09OLnN0cmluZ2lmeShlKTt2YXIgcz1hYShKU09OLnN0cmluZ2lmeShhYShlKSkpO3JldHVybiByLmxlbmd0aD5zLmxlbmd0aD9zOnJ9Y2FzZSJzaW5nbGUiOnJldHVybiBhYShKU09OLnN0cmluZ2lmeShhYShlKSkpO2Nhc2UiZG91YmxlIjpkZWZhdWx0OnJldHVybiBKU09OLnN0cmluZ2lmeShlKX19ZnVuY3Rpb24gbGEoZSl7dmFyIHQ9aWEoZSk7aWYoIXR8fCJcbn07Ii5pbmRleE9mKHQpPDApcmV0dXJuIEZuLmNvbmNhdChbZSwiOyJdKTtyZXR1cm4gZX0oZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTp0cnVlfSk7ZS5ydW49ZS5wcmV0dHlQcmludD1lLnByaW50PWUudHlwZXM9ZS5wYXJzZT12b2lkIDA7dmFyIHQ9Ujt2YXIgcj10Ll9faW1wb3J0RGVmYXVsdCh1cik7dmFyIHM9dC5fX2ltcG9ydFN0YXIoaik7ZS50eXBlcz1zO3ZhciBpPXdlO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJwYXJzZSIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24gZSgpe3JldHVybiBpLnBhcnNlfX0pO3ZhciBuPXppO3ZhciBhPWo7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInZpc2l0Iix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbiBlKCl7cmV0dXJuIGEudmlzaXR9fSk7ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBuZXcgbi5QcmludGVyKHQpLnByaW50KGUpfWUucHJpbnQ9bztmdW5jdGlvbiBsKGUsdCl7cmV0dXJuIG5ldyBuLlByaW50ZXIodCkucHJpbnRHZW5lcmljYWxseShlKX1lLnByZXR0eVByaW50PWw7ZnVuY3Rpb24gdShlLHQpe3JldHVybiBjKHByb2Nlc3MuYXJndlsyXSxlLHQpfWUucnVuPXU7ZnVuY3Rpb24gYyhlLHQscyl7ci5kZWZhdWx0LnJlYWRGaWxlKGUsInV0Zi04IiwoZnVuY3Rpb24oZSxyKXtpZihlKXtjb25zb2xlLmVycm9yKGUpO3JldHVybn1wKHIsdCxzKX0pKX1mdW5jdGlvbiBoKGUpe3Byb2Nlc3Muc3Rkb3V0LndyaXRlKGUpfWZ1bmN0aW9uIHAoZSx0LHIpe3ZhciBzPXImJnIud3JpdGViYWNrfHxoO3QoaS5wYXJzZShlLHIpLChmdW5jdGlvbihlKXtzKG8oZSxyKS5jb2RlKX0pKX19KShjKTtjb25zdCB1YT1jLnR5cGVzO2NvbnN0IGNhPWMudHlwZXMuYnVpbGRlcnM7Y29uc3QgaGE9Yy50eXBlcy5uYW1lZFR5cGVzO2Z1bmN0aW9uIHBhKCl7cmV0dXJuIGNhLmxpdGVyYWwobnVsbCl9ZnVuY3Rpb24gZmEoZSx0KXtjb25zdCByPWNhLnByb3BlcnR5KCJpbml0IixjYS5pZGVudGlmaWVyKGUpLHQsZmFsc2UpO3Iuc2hvO3JldHVybiByfWZ1bmN0aW9uIGRhKGUpe2lmKGUmJmUudG9KU09OKXJldHVybiBlLnRvSlNPTigpO3JldHVybiBlfWZ1bmN0aW9uIG1hKGUpe3JldHVybiF5YShlKSYmZS5jb25zdHJ1Y3Rvcj09PU9iamVjdH1mdW5jdGlvbiB5YShlKXtyZXR1cm4gZT09PW51bGx8fGU9PT11bmRlZmluZWR9ZnVuY3Rpb24gZ2EoKXtyZXR1cm4gdHlwZW9mIHByb2Nlc3MhPT0idW5kZWZpbmVkIn1mdW5jdGlvbiB4YShlLHQpe2lmKGdhKCkmJmUmJnQmJnQubWFwcGluZ3Mpe3JldHVybiBacihkYShlKSxkYSh0KSl9ZWxzZSBpZihnYSgpJiZlKXtyZXR1cm4gZGEoZSl9cmV0dXJue319dmFyIHZhPXt9O3ZhciBiYT17fTt2YXIgRWE9e307Y29uc3QgU2E9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLnNwbGl0KCIiKTtFYS5lbmNvZGU9ZnVuY3Rpb24oZSl7aWYoMDw9ZSYmZTxTYS5sZW5ndGgpe3JldHVybiBTYVtlXX10aHJvdyBuZXcgVHlwZUVycm9yKCJNdXN0IGJlIGJldHdlZW4gMCBhbmQgNjM6ICIrZSl9O2NvbnN0IFRhPUVhO2NvbnN0IEFhPTU7Y29uc3Qgd2E9MTw8QWE7Y29uc3QgQ2E9d2EtMTtjb25zdCBQYT13YTtmdW5jdGlvbiBEYShlKXtyZXR1cm4gZTwwPygtZTw8MSkrMTooZTw8MSkrMH1iYS5lbmNvZGU9ZnVuY3Rpb24gZSh0KXtsZXQgcj0iIjtsZXQgcztsZXQgaT1EYSh0KTtkb3tzPWkmQ2E7aT4+Pj1BYTtpZihpPjApe3N8PVBhfXIrPVRhLmVuY29kZShzKX13aGlsZShpPjApO3JldHVybiByfTt2YXIga2E9e307KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSx0LHIpe2lmKHQgaW4gZSl7cmV0dXJuIGVbdF19ZWxzZSBpZihhcmd1bWVudHMubGVuZ3RoPT09Myl7cmV0dXJuIHJ9dGhyb3cgbmV3IEVycm9yKCciJyt0KyciIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuJyl9ZS5nZXRBcmc9dDtjb25zdCByPS9eKD86KFtcdytcLS5dKyk6KT9cL1wvKD86KFx3KzpcdyspQCk/KFtcdy4tXSopKD86OihcZCspKT8oLiopJC87Y29uc3Qgcz0vXmRhdGE6LitcLC4rJC87ZnVuY3Rpb24gaShlKXtjb25zdCB0PWUubWF0Y2gocik7aWYoIXQpe3JldHVybiBudWxsfXJldHVybntzY2hlbWU6dFsxXSxhdXRoOnRbMl0saG9zdDp0WzNdLHBvcnQ6dFs0XSxwYXRoOnRbNV19fWUudXJsUGFyc2U9aTtmdW5jdGlvbiBuKGUpe2xldCB0PSIiO2lmKGUuc2NoZW1lKXt0Kz1lLnNjaGVtZSsiOiJ9dCs9Ii8vIjtpZihlLmF1dGgpe3QrPWUuYXV0aCsiQCJ9aWYoZS5ob3N0KXt0Kz1lLmhvc3R9aWYoZS5wb3J0KXt0Kz0iOiIrZS5wb3J0fWlmKGUucGF0aCl7dCs9ZS5wYXRofXJldHVybiB0fWUudXJsR2VuZXJhdGU9bjtjb25zdCBhPTMyO2Z1bmN0aW9uIG8oZSl7Y29uc3QgdD1bXTtyZXR1cm4gZnVuY3Rpb24ocil7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2lmKHRbZV0uaW5wdXQ9PT1yKXtjb25zdCByPXRbMF07dFswXT10W2VdO3RbZV09cjtyZXR1cm4gdFswXS5yZXN1bHR9fWNvbnN0IHM9ZShyKTt0LnVuc2hpZnQoe2lucHV0OnIscmVzdWx0OnN9KTtpZih0Lmxlbmd0aD5hKXt0LnBvcCgpfXJldHVybiBzfX1jb25zdCBsPW8oKGZ1bmN0aW9uIHQocil7bGV0IHM9cjtjb25zdCBhPWkocik7aWYoYSl7aWYoIWEucGF0aCl7cmV0dXJuIHJ9cz1hLnBhdGh9Y29uc3Qgbz1lLmlzQWJzb2x1dGUocyk7Y29uc3QgbD1bXTtsZXQgdT0wO2xldCBjPTA7d2hpbGUodHJ1ZSl7dT1jO2M9cy5pbmRleE9mKCIvIix1KTtpZihjPT09LTEpe2wucHVzaChzLnNsaWNlKHUpKTticmVha31lbHNle2wucHVzaChzLnNsaWNlKHUsYykpO3doaWxlKGM8cy5sZW5ndGgmJnNbY109PT0iLyIpe2MrK319fWxldCBoPTA7Zm9yKGM9bC5sZW5ndGgtMTtjPj0wO2MtLSl7Y29uc3QgZT1sW2NdO2lmKGU9PT0iLiIpe2wuc3BsaWNlKGMsMSl9ZWxzZSBpZihlPT09Ii4uIil7aCsrfWVsc2UgaWYoaD4wKXtpZihlPT09IiIpe2wuc3BsaWNlKGMrMSxoKTtoPTB9ZWxzZXtsLnNwbGljZShjLDIpO2gtLX19fXM9bC5qb2luKCIvIik7aWYocz09PSIiKXtzPW8/Ii8iOiIuIn1pZihhKXthLnBhdGg9cztyZXR1cm4gbihhKX1yZXR1cm4gc30pKTtlLm5vcm1hbGl6ZT1sO2Z1bmN0aW9uIHUoZSx0KXtpZihlPT09IiIpe2U9Ii4ifWlmKHQ9PT0iIil7dD0iLiJ9Y29uc3Qgcj1pKHQpO2NvbnN0IGE9aShlKTtpZihhKXtlPWEucGF0aHx8Ii8ifWlmKHImJiFyLnNjaGVtZSl7aWYoYSl7ci5zY2hlbWU9YS5zY2hlbWV9cmV0dXJuIG4ocil9aWYocnx8dC5tYXRjaChzKSl7cmV0dXJuIHR9aWYoYSYmIWEuaG9zdCYmIWEucGF0aCl7YS5ob3N0PXQ7cmV0dXJuIG4oYSl9Y29uc3Qgbz10LmNoYXJBdCgwKT09PSIvIj90OmwoZS5yZXBsYWNlKC9cLyskLywiIikrIi8iK3QpO2lmKGEpe2EucGF0aD1vO3JldHVybiBuKGEpfXJldHVybiBvfWUuam9pbj11O2UuaXNBYnNvbHV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5jaGFyQXQoMCk9PT0iLyJ8fHIudGVzdChlKX07ZnVuY3Rpb24gYyhlLHQpe2lmKGU9PT0iIil7ZT0iLiJ9ZT1lLnJlcGxhY2UoL1wvJC8sIiIpO2xldCByPTA7d2hpbGUodC5pbmRleE9mKGUrIi8iKSE9PTApe2NvbnN0IHM9ZS5sYXN0SW5kZXhPZigiLyIpO2lmKHM8MCl7cmV0dXJuIHR9ZT1lLnNsaWNlKDAscyk7aWYoZS5tYXRjaCgvXihbXlwvXSs6XC8pP1wvKiQvKSl7cmV0dXJuIHR9KytyfXJldHVybiBBcnJheShyKzEpLmpvaW4oIi4uLyIpK3Quc3Vic3RyKGUubGVuZ3RoKzEpfWUucmVsYXRpdmU9Yztjb25zdCBoPWZ1bmN0aW9uKCl7Y29uc3QgZT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiEoIl9fcHJvdG9fXyJpbiBlKX0oKTtmdW5jdGlvbiBwKGUpe3JldHVybiBlfWZ1bmN0aW9uIGYoZSl7aWYobShlKSl7cmV0dXJuIiQiK2V9cmV0dXJuIGV9ZS50b1NldFN0cmluZz1oP3A6ZjtmdW5jdGlvbiBkKGUpe2lmKG0oZSkpe3JldHVybiBlLnNsaWNlKDEpfXJldHVybiBlfWUuZnJvbVNldFN0cmluZz1oP3A6ZDtmdW5jdGlvbiBtKGUpe2lmKCFlKXtyZXR1cm4gZmFsc2V9Y29uc3QgdD1lLmxlbmd0aDtpZih0PDkpe3JldHVybiBmYWxzZX1pZihlLmNoYXJDb2RlQXQodC0xKSE9PTk1fHxlLmNoYXJDb2RlQXQodC0yKSE9PTk1fHxlLmNoYXJDb2RlQXQodC0zKSE9PTExMXx8ZS5jaGFyQ29kZUF0KHQtNCkhPT0xMTZ8fGUuY2hhckNvZGVBdCh0LTUpIT09MTExfHxlLmNoYXJDb2RlQXQodC02KSE9PTExNHx8ZS5jaGFyQ29kZUF0KHQtNykhPT0xMTJ8fGUuY2hhckNvZGVBdCh0LTgpIT09OTV8fGUuY2hhckNvZGVBdCh0LTkpIT09OTUpe3JldHVybiBmYWxzZX1mb3IobGV0IHI9dC0xMDtyPj0wO3ItLSl7aWYoZS5jaGFyQ29kZUF0KHIpIT09MzYpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9ZnVuY3Rpb24geShlLHQscil7bGV0IHM9eChlLnNvdXJjZSx0LnNvdXJjZSk7aWYocyE9PTApe3JldHVybiBzfXM9ZS5vcmlnaW5hbExpbmUtdC5vcmlnaW5hbExpbmU7aWYocyE9PTApe3JldHVybiBzfXM9ZS5vcmlnaW5hbENvbHVtbi10Lm9yaWdpbmFsQ29sdW1uO2lmKHMhPT0wfHxyKXtyZXR1cm4gc31zPWUuZ2VuZXJhdGVkQ29sdW1uLXQuZ2VuZXJhdGVkQ29sdW1uO2lmKHMhPT0wKXtyZXR1cm4gc31zPWUuZ2VuZXJhdGVkTGluZS10LmdlbmVyYXRlZExpbmU7aWYocyE9PTApe3JldHVybiBzfXJldHVybiB4KGUubmFtZSx0Lm5hbWUpfWUuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM9eTtmdW5jdGlvbiBnKGUsdCxyKXtsZXQgcz1lLmdlbmVyYXRlZExpbmUtdC5nZW5lcmF0ZWRMaW5lO2lmKHMhPT0wKXtyZXR1cm4gc31zPWUuZ2VuZXJhdGVkQ29sdW1uLXQuZ2VuZXJhdGVkQ29sdW1uO2lmKHMhPT0wfHxyKXtyZXR1cm4gc31zPXgoZS5zb3VyY2UsdC5zb3VyY2UpO2lmKHMhPT0wKXtyZXR1cm4gc31zPWUub3JpZ2luYWxMaW5lLXQub3JpZ2luYWxMaW5lO2lmKHMhPT0wKXtyZXR1cm4gc31zPWUub3JpZ2luYWxDb2x1bW4tdC5vcmlnaW5hbENvbHVtbjtpZihzIT09MCl7cmV0dXJuIHN9cmV0dXJuIHgoZS5uYW1lLHQubmFtZSl9ZS5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZD1nO2Z1bmN0aW9uIHgoZSx0KXtpZihlPT09dCl7cmV0dXJuIDB9aWYoZT09PW51bGwpe3JldHVybiAxfWlmKHQ9PT1udWxsKXtyZXR1cm4tMX1pZihlPnQpe3JldHVybiAxfXJldHVybi0xfWZ1bmN0aW9uIHYoZSx0KXtsZXQgcj1lLmdlbmVyYXRlZExpbmUtdC5nZW5lcmF0ZWRMaW5lO2lmKHIhPT0wKXtyZXR1cm4gcn1yPWUuZ2VuZXJhdGVkQ29sdW1uLXQuZ2VuZXJhdGVkQ29sdW1uO2lmKHIhPT0wKXtyZXR1cm4gcn1yPXgoZS5zb3VyY2UsdC5zb3VyY2UpO2lmKHIhPT0wKXtyZXR1cm4gcn1yPWUub3JpZ2luYWxMaW5lLXQub3JpZ2luYWxMaW5lO2lmKHIhPT0wKXtyZXR1cm4gcn1yPWUub3JpZ2luYWxDb2x1bW4tdC5vcmlnaW5hbENvbHVtbjtpZihyIT09MCl7cmV0dXJuIHJ9cmV0dXJuIHgoZS5uYW1lLHQubmFtZSl9ZS5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZD12O2Z1bmN0aW9uIGIoZSl7cmV0dXJuIEpTT04ucGFyc2UoZS5yZXBsYWNlKC9eXCldfSdbXlxuXSpcbi8sIiIpKX1lLnBhcnNlU291cmNlTWFwSW5wdXQ9YjtmdW5jdGlvbiBFKGUsdCxyKXt0PXR8fCIiO2lmKGUpe2lmKGVbZS5sZW5ndGgtMV0hPT0iLyImJnRbMF0hPT0iLyIpe2UrPSIvIn10PWUrdH1pZihyKXtjb25zdCBlPWkocik7aWYoIWUpe3Rocm93IG5ldyBFcnJvcigic291cmNlTWFwVVJMIGNvdWxkIG5vdCBiZSBwYXJzZWQiKX1pZihlLnBhdGgpe2NvbnN0IHQ9ZS5wYXRoLmxhc3RJbmRleE9mKCIvIik7aWYodD49MCl7ZS5wYXRoPWUucGF0aC5zdWJzdHJpbmcoMCx0KzEpfX10PXUobihlKSx0KX1yZXR1cm4gbCh0KX1lLmNvbXB1dGVTb3VyY2VVUkw9RX0pKGthKTt2YXIgTmE9e307Y2xhc3MgSWF7Y29uc3RydWN0b3IoKXt0aGlzLl9hcnJheT1bXTt0aGlzLl9zZXQ9bmV3IE1hcH1zdGF0aWMgZnJvbUFycmF5KGUsdCl7Y29uc3Qgcj1uZXcgSWE7Zm9yKGxldCBzPTAsaT1lLmxlbmd0aDtzPGk7cysrKXtyLmFkZChlW3NdLHQpfXJldHVybiByfXNpemUoKXtyZXR1cm4gdGhpcy5fc2V0LnNpemV9YWRkKGUsdCl7Y29uc3Qgcj10aGlzLmhhcyhlKTtjb25zdCBzPXRoaXMuX2FycmF5Lmxlbmd0aDtpZighcnx8dCl7dGhpcy5fYXJyYXkucHVzaChlKX1pZighcil7dGhpcy5fc2V0LnNldChlLHMpfX1oYXMoZSl7cmV0dXJuIHRoaXMuX3NldC5oYXMoZSl9aW5kZXhPZihlKXtjb25zdCB0PXRoaXMuX3NldC5nZXQoZSk7aWYodD49MCl7cmV0dXJuIHR9dGhyb3cgbmV3IEVycm9yKCciJytlKyciIGlzIG5vdCBpbiB0aGUgc2V0LicpfWF0KGUpe2lmKGU+PTAmJmU8dGhpcy5fYXJyYXkubGVuZ3RoKXtyZXR1cm4gdGhpcy5fYXJyYXlbZV19dGhyb3cgbmV3IEVycm9yKCJObyBlbGVtZW50IGluZGV4ZWQgYnkgIitlKX10b0FycmF5KCl7cmV0dXJuIHRoaXMuX2FycmF5LnNsaWNlKCl9fU5hLkFycmF5U2V0PUlhO3ZhciBGYT17fTtjb25zdCBNYT1rYTtmdW5jdGlvbiBfYShlLHQpe2NvbnN0IHI9ZS5nZW5lcmF0ZWRMaW5lO2NvbnN0IHM9dC5nZW5lcmF0ZWRMaW5lO2NvbnN0IGk9ZS5nZW5lcmF0ZWRDb2x1bW47Y29uc3Qgbj10LmdlbmVyYXRlZENvbHVtbjtyZXR1cm4gcz5yfHxzPT1yJiZuPj1pfHxNYS5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChlLHQpPD0wfWNsYXNzIE9he2NvbnN0cnVjdG9yKCl7dGhpcy5fYXJyYXk9W107dGhpcy5fc29ydGVkPXRydWU7dGhpcy5fbGFzdD17Z2VuZXJhdGVkTGluZTotMSxnZW5lcmF0ZWRDb2x1bW46MH19dW5zb3J0ZWRGb3JFYWNoKGUsdCl7dGhpcy5fYXJyYXkuZm9yRWFjaChlLHQpfWFkZChlKXtpZihfYSh0aGlzLl9sYXN0LGUpKXt0aGlzLl9sYXN0PWU7dGhpcy5fYXJyYXkucHVzaChlKX1lbHNle3RoaXMuX3NvcnRlZD1mYWxzZTt0aGlzLl9hcnJheS5wdXNoKGUpfX10b0FycmF5KCl7aWYoIXRoaXMuX3NvcnRlZCl7dGhpcy5fYXJyYXkuc29ydChNYS5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCk7dGhpcy5fc29ydGVkPXRydWV9cmV0dXJuIHRoaXMuX2FycmF5fX1GYS5NYXBwaW5nTGlzdD1PYTtjb25zdCBMYT1iYTtjb25zdCBCYT1rYTtjb25zdCBSYT1OYS5BcnJheVNldDtjb25zdCBqYT1GYS5NYXBwaW5nTGlzdDtjbGFzcyBVYXtjb25zdHJ1Y3RvcihlKXtpZighZSl7ZT17fX10aGlzLl9maWxlPUJhLmdldEFyZyhlLCJmaWxlIixudWxsKTt0aGlzLl9zb3VyY2VSb290PUJhLmdldEFyZyhlLCJzb3VyY2VSb290IixudWxsKTt0aGlzLl9za2lwVmFsaWRhdGlvbj1CYS5nZXRBcmcoZSwic2tpcFZhbGlkYXRpb24iLGZhbHNlKTt0aGlzLl9zb3VyY2VzPW5ldyBSYTt0aGlzLl9uYW1lcz1uZXcgUmE7dGhpcy5fbWFwcGluZ3M9bmV3IGphO3RoaXMuX3NvdXJjZXNDb250ZW50cz1udWxsfXN0YXRpYyBmcm9tU291cmNlTWFwKGUpe2NvbnN0IHQ9ZS5zb3VyY2VSb290O2NvbnN0IHI9bmV3IFVhKHtmaWxlOmUuZmlsZSxzb3VyY2VSb290OnR9KTtlLmVhY2hNYXBwaW5nKChmdW5jdGlvbihlKXtjb25zdCBzPXtnZW5lcmF0ZWQ6e2xpbmU6ZS5nZW5lcmF0ZWRMaW5lLGNvbHVtbjplLmdlbmVyYXRlZENvbHVtbn19O2lmKGUuc291cmNlIT1udWxsKXtzLnNvdXJjZT1lLnNvdXJjZTtpZih0IT1udWxsKXtzLnNvdXJjZT1CYS5yZWxhdGl2ZSh0LHMuc291cmNlKX1zLm9yaWdpbmFsPXtsaW5lOmUub3JpZ2luYWxMaW5lLGNvbHVtbjplLm9yaWdpbmFsQ29sdW1ufTtpZihlLm5hbWUhPW51bGwpe3MubmFtZT1lLm5hbWV9fXIuYWRkTWFwcGluZyhzKX0pKTtlLnNvdXJjZXMuZm9yRWFjaCgoZnVuY3Rpb24ocyl7bGV0IGk9cztpZih0IT09bnVsbCl7aT1CYS5yZWxhdGl2ZSh0LHMpfWlmKCFyLl9zb3VyY2VzLmhhcyhpKSl7ci5fc291cmNlcy5hZGQoaSl9Y29uc3Qgbj1lLnNvdXJjZUNvbnRlbnRGb3Iocyk7aWYobiE9bnVsbCl7ci5zZXRTb3VyY2VDb250ZW50KHMsbil9fSkpO3JldHVybiByfWFkZE1hcHBpbmcoZSl7Y29uc3QgdD1CYS5nZXRBcmcoZSwiZ2VuZXJhdGVkIik7Y29uc3Qgcj1CYS5nZXRBcmcoZSwib3JpZ2luYWwiLG51bGwpO2xldCBzPUJhLmdldEFyZyhlLCJzb3VyY2UiLG51bGwpO2xldCBpPUJhLmdldEFyZyhlLCJuYW1lIixudWxsKTtpZighdGhpcy5fc2tpcFZhbGlkYXRpb24pe3RoaXMuX3ZhbGlkYXRlTWFwcGluZyh0LHIscyxpKX1pZihzIT1udWxsKXtzPVN0cmluZyhzKTtpZighdGhpcy5fc291cmNlcy5oYXMocykpe3RoaXMuX3NvdXJjZXMuYWRkKHMpfX1pZihpIT1udWxsKXtpPVN0cmluZyhpKTtpZighdGhpcy5fbmFtZXMuaGFzKGkpKXt0aGlzLl9uYW1lcy5hZGQoaSl9fXRoaXMuX21hcHBpbmdzLmFkZCh7Z2VuZXJhdGVkTGluZTp0LmxpbmUsZ2VuZXJhdGVkQ29sdW1uOnQuY29sdW1uLG9yaWdpbmFsTGluZTpyIT1udWxsJiZyLmxpbmUsb3JpZ2luYWxDb2x1bW46ciE9bnVsbCYmci5jb2x1bW4sc291cmNlOnMsbmFtZTppfSl9c2V0U291cmNlQ29udGVudChlLHQpe2xldCByPWU7aWYodGhpcy5fc291cmNlUm9vdCE9bnVsbCl7cj1CYS5yZWxhdGl2ZSh0aGlzLl9zb3VyY2VSb290LHIpfWlmKHQhPW51bGwpe2lmKCF0aGlzLl9zb3VyY2VzQ29udGVudHMpe3RoaXMuX3NvdXJjZXNDb250ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpfXRoaXMuX3NvdXJjZXNDb250ZW50c1tCYS50b1NldFN0cmluZyhyKV09dH1lbHNlIGlmKHRoaXMuX3NvdXJjZXNDb250ZW50cyl7ZGVsZXRlIHRoaXMuX3NvdXJjZXNDb250ZW50c1tCYS50b1NldFN0cmluZyhyKV07aWYoT2JqZWN0LmtleXModGhpcy5fc291cmNlc0NvbnRlbnRzKS5sZW5ndGg9PT0wKXt0aGlzLl9zb3VyY2VzQ29udGVudHM9bnVsbH19fWFwcGx5U291cmNlTWFwKGUsdCxyKXtsZXQgcz10O2lmKHQ9PW51bGwpe2lmKGUuZmlsZT09bnVsbCl7dGhyb3cgbmV3IEVycm9yKCJTb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLmFwcGx5U291cmNlTWFwIHJlcXVpcmVzIGVpdGhlciBhbiBleHBsaWNpdCBzb3VyY2UgZmlsZSwgIisnb3IgdGhlIHNvdXJjZSBtYXBcJ3MgImZpbGUiIHByb3BlcnR5LiBCb3RoIHdlcmUgb21pdHRlZC4nKX1zPWUuZmlsZX1jb25zdCBpPXRoaXMuX3NvdXJjZVJvb3Q7aWYoaSE9bnVsbCl7cz1CYS5yZWxhdGl2ZShpLHMpfWNvbnN0IG49dGhpcy5fbWFwcGluZ3MudG9BcnJheSgpLmxlbmd0aD4wP25ldyBSYTp0aGlzLl9zb3VyY2VzO2NvbnN0IGE9bmV3IFJhO3RoaXMuX21hcHBpbmdzLnVuc29ydGVkRm9yRWFjaCgoZnVuY3Rpb24odCl7aWYodC5zb3VyY2U9PT1zJiZ0Lm9yaWdpbmFsTGluZSE9bnVsbCl7Y29uc3Qgcz1lLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe2xpbmU6dC5vcmlnaW5hbExpbmUsY29sdW1uOnQub3JpZ2luYWxDb2x1bW59KTtpZihzLnNvdXJjZSE9bnVsbCl7dC5zb3VyY2U9cy5zb3VyY2U7aWYociE9bnVsbCl7dC5zb3VyY2U9QmEuam9pbihyLHQuc291cmNlKX1pZihpIT1udWxsKXt0LnNvdXJjZT1CYS5yZWxhdGl2ZShpLHQuc291cmNlKX10Lm9yaWdpbmFsTGluZT1zLmxpbmU7dC5vcmlnaW5hbENvbHVtbj1zLmNvbHVtbjtpZihzLm5hbWUhPW51bGwpe3QubmFtZT1zLm5hbWV9fX1jb25zdCBvPXQuc291cmNlO2lmKG8hPW51bGwmJiFuLmhhcyhvKSl7bi5hZGQobyl9Y29uc3QgbD10Lm5hbWU7aWYobCE9bnVsbCYmIWEuaGFzKGwpKXthLmFkZChsKX19KSx0aGlzKTt0aGlzLl9zb3VyY2VzPW47dGhpcy5fbmFtZXM9YTtlLnNvdXJjZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7Y29uc3Qgcz1lLnNvdXJjZUNvbnRlbnRGb3IodCk7aWYocyE9bnVsbCl7aWYociE9bnVsbCl7dD1CYS5qb2luKHIsdCl9aWYoaSE9bnVsbCl7dD1CYS5yZWxhdGl2ZShpLHQpfXRoaXMuc2V0U291cmNlQ29udGVudCh0LHMpfX0pLHRoaXMpfV92YWxpZGF0ZU1hcHBpbmcoZSx0LHIscyl7aWYodCYmdHlwZW9mIHQubGluZSE9PSJudW1iZXIiJiZ0eXBlb2YgdC5jb2x1bW4hPT0ibnVtYmVyIil7dGhyb3cgbmV3IEVycm9yKCJvcmlnaW5hbC5saW5lIGFuZCBvcmlnaW5hbC5jb2x1bW4gYXJlIG5vdCBudW1iZXJzIC0tIHlvdSBwcm9iYWJseSBtZWFudCB0byBvbWl0ICIrInRoZSBvcmlnaW5hbCBtYXBwaW5nIGVudGlyZWx5IGFuZCBvbmx5IG1hcCB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9uLiBJZiBzbywgcGFzcyAiKyJudWxsIGZvciB0aGUgb3JpZ2luYWwgbWFwcGluZyBpbnN0ZWFkIG9mIGFuIG9iamVjdCB3aXRoIGVtcHR5IG9yIG51bGwgdmFsdWVzLiIpfWlmKGUmJiJsaW5lImluIGUmJiJjb2x1bW4iaW4gZSYmZS5saW5lPjAmJmUuY29sdW1uPj0wJiYhdCYmIXImJiFzKTtlbHNlIGlmKGUmJiJsaW5lImluIGUmJiJjb2x1bW4iaW4gZSYmdCYmImxpbmUiaW4gdCYmImNvbHVtbiJpbiB0JiZlLmxpbmU+MCYmZS5jb2x1bW4+PTAmJnQubGluZT4wJiZ0LmNvbHVtbj49MCYmcik7ZWxzZXt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbWFwcGluZzogIitKU09OLnN0cmluZ2lmeSh7Z2VuZXJhdGVkOmUsc291cmNlOnIsb3JpZ2luYWw6dCxuYW1lOnN9KSl9fV9zZXJpYWxpemVNYXBwaW5ncygpe2xldCBlPTA7bGV0IHQ9MTtsZXQgcj0wO2xldCBzPTA7bGV0IGk9MDtsZXQgbj0wO2xldCBhPSIiO2xldCBvO2xldCBsO2xldCB1O2xldCBjO2NvbnN0IGg9dGhpcy5fbWFwcGluZ3MudG9BcnJheSgpO2ZvcihsZXQgcD0wLGY9aC5sZW5ndGg7cDxmO3ArKyl7bD1oW3BdO289IiI7aWYobC5nZW5lcmF0ZWRMaW5lIT09dCl7ZT0wO3doaWxlKGwuZ2VuZXJhdGVkTGluZSE9PXQpe28rPSI7Ijt0Kyt9fWVsc2UgaWYocD4wKXtpZighQmEuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobCxoW3AtMV0pKXtjb250aW51ZX1vKz0iLCJ9bys9TGEuZW5jb2RlKGwuZ2VuZXJhdGVkQ29sdW1uLWUpO2U9bC5nZW5lcmF0ZWRDb2x1bW47aWYobC5zb3VyY2UhPW51bGwpe2M9dGhpcy5fc291cmNlcy5pbmRleE9mKGwuc291cmNlKTtvKz1MYS5lbmNvZGUoYy1uKTtuPWM7bys9TGEuZW5jb2RlKGwub3JpZ2luYWxMaW5lLTEtcyk7cz1sLm9yaWdpbmFsTGluZS0xO28rPUxhLmVuY29kZShsLm9yaWdpbmFsQ29sdW1uLXIpO3I9bC5vcmlnaW5hbENvbHVtbjtpZihsLm5hbWUhPW51bGwpe3U9dGhpcy5fbmFtZXMuaW5kZXhPZihsLm5hbWUpO28rPUxhLmVuY29kZSh1LWkpO2k9dX19YSs9b31yZXR1cm4gYX1fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChlLHQpe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7aWYoIXRoaXMuX3NvdXJjZXNDb250ZW50cyl7cmV0dXJuIG51bGx9aWYodCE9bnVsbCl7ZT1CYS5yZWxhdGl2ZSh0LGUpfWNvbnN0IHI9QmEudG9TZXRTdHJpbmcoZSk7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9zb3VyY2VzQ29udGVudHMscik/dGhpcy5fc291cmNlc0NvbnRlbnRzW3JdOm51bGx9KSx0aGlzKX10b0pTT04oKXtjb25zdCBlPXt2ZXJzaW9uOnRoaXMuX3ZlcnNpb24sc291cmNlczp0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKSxuYW1lczp0aGlzLl9uYW1lcy50b0FycmF5KCksbWFwcGluZ3M6dGhpcy5fc2VyaWFsaXplTWFwcGluZ3MoKX07aWYodGhpcy5fZmlsZSE9bnVsbCl7ZS5maWxlPXRoaXMuX2ZpbGV9aWYodGhpcy5fc291cmNlUm9vdCE9bnVsbCl7ZS5zb3VyY2VSb290PXRoaXMuX3NvdXJjZVJvb3R9aWYodGhpcy5fc291cmNlc0NvbnRlbnRzKXtlLnNvdXJjZXNDb250ZW50PXRoaXMuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQoZS5zb3VyY2VzLGUuc291cmNlUm9vdCl9cmV0dXJuIGV9dG9TdHJpbmcoKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy50b0pTT04oKSl9fVVhLnByb3RvdHlwZS5fdmVyc2lvbj0zO3ZhLlNvdXJjZU1hcEdlbmVyYXRvcj1VYTt2YXIgemE9e307KGZ1bmN0aW9uKGUpe2UuR1JFQVRFU1RfTE9XRVJfQk9VTkQ9MTtlLkxFQVNUX1VQUEVSX0JPVU5EPTI7ZnVuY3Rpb24gdChyLHMsaSxuLGEsbyl7Y29uc3QgbD1NYXRoLmZsb29yKChzLXIpLzIpK3I7Y29uc3QgdT1hKGksbltsXSx0cnVlKTtpZih1PT09MCl7cmV0dXJuIGx9ZWxzZSBpZih1PjApe2lmKHMtbD4xKXtyZXR1cm4gdChsLHMsaSxuLGEsbyl9aWYobz09ZS5MRUFTVF9VUFBFUl9CT1VORCl7cmV0dXJuIHM8bi5sZW5ndGg/czotMX1yZXR1cm4gbH1pZihsLXI+MSl7cmV0dXJuIHQocixsLGksbixhLG8pfWlmKG89PWUuTEVBU1RfVVBQRVJfQk9VTkQpe3JldHVybiBsfXJldHVybiByPDA/LTE6cn1lLnNlYXJjaD1mdW5jdGlvbiByKHMsaSxuLGEpe2lmKGkubGVuZ3RoPT09MCl7cmV0dXJuLTF9bGV0IG89dCgtMSxpLmxlbmd0aCxzLGksbixhfHxlLkdSRUFURVNUX0xPV0VSX0JPVU5EKTtpZihvPDApe3JldHVybi0xfXdoaWxlKG8tMT49MCl7aWYobihpW29dLGlbby0xXSx0cnVlKSE9PTApe2JyZWFrfS0tb31yZXR1cm4gb319KSh6YSk7dmFyIFZhPXtleHBvcnRzOnt9fTtpZih0eXBlb2YgZmV0Y2g9PT0iZnVuY3Rpb24iKXtsZXQgZT1udWxsO1ZhLmV4cG9ydHM9ZnVuY3Rpb24gdCgpe2lmKHR5cGVvZiBlIT09InN0cmluZyIpe3Rocm93IG5ldyBFcnJvcigiWW91IG11c3QgcHJvdmlkZSB0aGUgVVJMIG9mIGxpYi9tYXBwaW5ncy53YXNtIGJ5IGNhbGxpbmcgIisiU291cmNlTWFwQ29uc3VtZXIuaW5pdGlhbGl6ZSh7ICdsaWIvbWFwcGluZ3Mud2FzbSc6IC4uLiB9KSAiKyJiZWZvcmUgdXNpbmcgU291cmNlTWFwQ29uc3VtZXIiKX1yZXR1cm4gZmV0Y2goZSkudGhlbigoZT0+ZS5hcnJheUJ1ZmZlcigpKSl9O1ZhLmV4cG9ydHMuaW5pdGlhbGl6ZT10PT5lPXR9ZWxzZXtjb25zdCBlPXVyO2NvbnN0IHQ9Y3I7VmEuZXhwb3J0cz1mdW5jdGlvbiByKCl7cmV0dXJuIG5ldyBQcm9taXNlKCgocixzKT0+e2NvbnN0IGk9dC5qb2luKF9fZGlybmFtZSwibWFwcGluZ3Mud2FzbSIpO2UucmVhZEZpbGUoaSxudWxsLCgoZSx0KT0+e2lmKGUpe3MoZSk7cmV0dXJufXIodC5idWZmZXIpfSkpfSkpfTtWYS5leHBvcnRzLmluaXRpYWxpemU9ZT0+e2NvbnNvbGUuZGVidWcoIlNvdXJjZU1hcENvbnN1bWVyLmluaXRpYWxpemUgaXMgYSBuby1vcCB3aGVuIHJ1bm5pbmcgaW4gbm9kZS5qcyIpfX1jb25zdCBxYT1WYS5leHBvcnRzO2Z1bmN0aW9uIEdhKCl7dGhpcy5nZW5lcmF0ZWRMaW5lPTA7dGhpcy5nZW5lcmF0ZWRDb2x1bW49MDt0aGlzLmxhc3RHZW5lcmF0ZWRDb2x1bW49bnVsbDt0aGlzLnNvdXJjZT1udWxsO3RoaXMub3JpZ2luYWxMaW5lPW51bGw7dGhpcy5vcmlnaW5hbENvbHVtbj1udWxsO3RoaXMubmFtZT1udWxsfWxldCBYYT1udWxsO3ZhciBKYT1mdW5jdGlvbiBlKCl7aWYoWGEpe3JldHVybiBYYX1jb25zdCB0PVtdO1hhPXFhKCkudGhlbigoZT0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoZSx7ZW52OnttYXBwaW5nX2NhbGxiYWNrKGUscixzLGksbixhLG8sbCx1LGMpe2NvbnN0IGg9bmV3IEdhO2guZ2VuZXJhdGVkTGluZT1lKzE7aC5nZW5lcmF0ZWRDb2x1bW49cjtpZihzKXtoLmxhc3RHZW5lcmF0ZWRDb2x1bW49aS0xfWlmKG4pe2guc291cmNlPWE7aC5vcmlnaW5hbExpbmU9bysxO2gub3JpZ2luYWxDb2x1bW49bDtpZih1KXtoLm5hbWU9Y319dFt0Lmxlbmd0aC0xXShoKX0sc3RhcnRfYWxsX2dlbmVyYXRlZF9sb2NhdGlvbnNfZm9yKCl7Y29uc29sZS50aW1lKCJhbGxfZ2VuZXJhdGVkX2xvY2F0aW9uc19mb3IiKX0sZW5kX2FsbF9nZW5lcmF0ZWRfbG9jYXRpb25zX2Zvcigpe2NvbnNvbGUudGltZUVuZCgiYWxsX2dlbmVyYXRlZF9sb2NhdGlvbnNfZm9yIil9LHN0YXJ0X2NvbXB1dGVfY29sdW1uX3NwYW5zKCl7Y29uc29sZS50aW1lKCJjb21wdXRlX2NvbHVtbl9zcGFucyIpfSxlbmRfY29tcHV0ZV9jb2x1bW5fc3BhbnMoKXtjb25zb2xlLnRpbWVFbmQoImNvbXB1dGVfY29sdW1uX3NwYW5zIil9LHN0YXJ0X2dlbmVyYXRlZF9sb2NhdGlvbl9mb3IoKXtjb25zb2xlLnRpbWUoImdlbmVyYXRlZF9sb2NhdGlvbl9mb3IiKX0sZW5kX2dlbmVyYXRlZF9sb2NhdGlvbl9mb3IoKXtjb25zb2xlLnRpbWVFbmQoImdlbmVyYXRlZF9sb2NhdGlvbl9mb3IiKX0sc3RhcnRfb3JpZ2luYWxfbG9jYXRpb25fZm9yKCl7Y29uc29sZS50aW1lKCJvcmlnaW5hbF9sb2NhdGlvbl9mb3IiKX0sZW5kX29yaWdpbmFsX2xvY2F0aW9uX2Zvcigpe2NvbnNvbGUudGltZUVuZCgib3JpZ2luYWxfbG9jYXRpb25fZm9yIil9LHN0YXJ0X3BhcnNlX21hcHBpbmdzKCl7Y29uc29sZS50aW1lKCJwYXJzZV9tYXBwaW5ncyIpfSxlbmRfcGFyc2VfbWFwcGluZ3MoKXtjb25zb2xlLnRpbWVFbmQoInBhcnNlX21hcHBpbmdzIil9LHN0YXJ0X3NvcnRfYnlfZ2VuZXJhdGVkX2xvY2F0aW9uKCl7Y29uc29sZS50aW1lKCJzb3J0X2J5X2dlbmVyYXRlZF9sb2NhdGlvbiIpfSxlbmRfc29ydF9ieV9nZW5lcmF0ZWRfbG9jYXRpb24oKXtjb25zb2xlLnRpbWVFbmQoInNvcnRfYnlfZ2VuZXJhdGVkX2xvY2F0aW9uIil9LHN0YXJ0X3NvcnRfYnlfb3JpZ2luYWxfbG9jYXRpb24oKXtjb25zb2xlLnRpbWUoInNvcnRfYnlfb3JpZ2luYWxfbG9jYXRpb24iKX0sZW5kX3NvcnRfYnlfb3JpZ2luYWxfbG9jYXRpb24oKXtjb25zb2xlLnRpbWVFbmQoInNvcnRfYnlfb3JpZ2luYWxfbG9jYXRpb24iKX19fSkpKS50aGVuKChlPT4oe2V4cG9ydHM6ZS5pbnN0YW5jZS5leHBvcnRzLHdpdGhNYXBwaW5nQ2FsbGJhY2s6KGUscik9Pnt0LnB1c2goZSk7dHJ5e3IoKX1maW5hbGx5e3QucG9wKCl9fX0pKSkudGhlbihudWxsLChlPT57WGE9bnVsbDt0aHJvdyBlfSkpO3JldHVybiBYYX07Y29uc3QgSGE9a2E7Y29uc3QgV2E9emE7Y29uc3QgS2E9TmEuQXJyYXlTZXQ7Y29uc3QgJGE9VmEuZXhwb3J0cztjb25zdCBZYT1KYTtjb25zdCBRYT1TeW1ib2woInNtY0ludGVybmFsIik7Y2xhc3MgWmF7Y29uc3RydWN0b3IoZSx0KXtpZihlPT1RYSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzKX1yZXR1cm4gcm8oZSx0KX1zdGF0aWMgaW5pdGlhbGl6ZShlKXskYS5pbml0aWFsaXplKGVbImxpYi9tYXBwaW5ncy53YXNtIl0pfXN0YXRpYyBmcm9tU291cmNlTWFwKGUsdCl7cmV0dXJuIHNvKGUsdCl9c3RhdGljIHdpdGgoZSx0LHIpe2xldCBzPW51bGw7Y29uc3QgaT1uZXcgWmEoZSx0KTtyZXR1cm4gaS50aGVuKChlPT57cz1lO3JldHVybiByKGUpfSkpLnRoZW4oKGU9PntpZihzKXtzLmRlc3Ryb3koKX1yZXR1cm4gZX0pLChlPT57aWYocyl7cy5kZXN0cm95KCl9dGhyb3cgZX0pKX1fcGFyc2VNYXBwaW5ncyhlLHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5ncyIpfWVhY2hNYXBwaW5nKGUsdCxyKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgZWFjaE1hcHBpbmciKX1hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoZSl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IGFsbEdlbmVyYXRlZFBvc2l0aW9uc0ZvciIpfWRlc3Ryb3koKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgZGVzdHJveSIpfX1aYS5wcm90b3R5cGUuX3ZlcnNpb249MztaYS5HRU5FUkFURURfT1JERVI9MTtaYS5PUklHSU5BTF9PUkRFUj0yO1phLkdSRUFURVNUX0xPV0VSX0JPVU5EPTE7WmEuTEVBU1RfVVBQRVJfQk9VTkQ9MjtjbGFzcyBlbyBleHRlbmRzIFphe2NvbnN0cnVjdG9yKGUsdCl7cmV0dXJuIHN1cGVyKFFhKS50aGVuKChyPT57bGV0IHM9ZTtpZih0eXBlb2YgZT09PSJzdHJpbmciKXtzPUhhLnBhcnNlU291cmNlTWFwSW5wdXQoZSl9Y29uc3QgaT1IYS5nZXRBcmcocywidmVyc2lvbiIpO2xldCBuPUhhLmdldEFyZyhzLCJzb3VyY2VzIik7Y29uc3QgYT1IYS5nZXRBcmcocywibmFtZXMiLFtdKTtsZXQgbz1IYS5nZXRBcmcocywic291cmNlUm9vdCIsbnVsbCk7Y29uc3QgbD1IYS5nZXRBcmcocywic291cmNlc0NvbnRlbnQiLG51bGwpO2NvbnN0IHU9SGEuZ2V0QXJnKHMsIm1hcHBpbmdzIik7Y29uc3QgYz1IYS5nZXRBcmcocywiZmlsZSIsbnVsbCk7aWYoaSE9ci5fdmVyc2lvbil7dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB2ZXJzaW9uOiAiK2kpfWlmKG8pe289SGEubm9ybWFsaXplKG8pfW49bi5tYXAoU3RyaW5nKS5tYXAoSGEubm9ybWFsaXplKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBvJiZIYS5pc0Fic29sdXRlKG8pJiZIYS5pc0Fic29sdXRlKGUpP0hhLnJlbGF0aXZlKG8sZSk6ZX0pKTtyLl9uYW1lcz1LYS5mcm9tQXJyYXkoYS5tYXAoU3RyaW5nKSx0cnVlKTtyLl9zb3VyY2VzPUthLmZyb21BcnJheShuLHRydWUpO3IuX2Fic29sdXRlU291cmNlcz1yLl9zb3VyY2VzLnRvQXJyYXkoKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBIYS5jb21wdXRlU291cmNlVVJMKG8sZSx0KX0pKTtyLnNvdXJjZVJvb3Q9bztyLnNvdXJjZXNDb250ZW50PWw7ci5fbWFwcGluZ3M9dTtyLl9zb3VyY2VNYXBVUkw9dDtyLmZpbGU9YztyLl9jb21wdXRlZENvbHVtblNwYW5zPWZhbHNlO3IuX21hcHBpbmdzUHRyPTA7ci5fd2FzbT1udWxsO3JldHVybiBZYSgpLnRoZW4oKGU9PntyLl93YXNtPWU7cmV0dXJuIHJ9KSl9KSl9X2ZpbmRTb3VyY2VJbmRleChlKXtsZXQgdD1lO2lmKHRoaXMuc291cmNlUm9vdCE9bnVsbCl7dD1IYS5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsdCl9aWYodGhpcy5fc291cmNlcy5oYXModCkpe3JldHVybiB0aGlzLl9zb3VyY2VzLmluZGV4T2YodCl9Zm9yKGxldCB0PTA7dDx0aGlzLl9hYnNvbHV0ZVNvdXJjZXMubGVuZ3RoOysrdCl7aWYodGhpcy5fYWJzb2x1dGVTb3VyY2VzW3RdPT1lKXtyZXR1cm4gdH19cmV0dXJuLTF9c3RhdGljIGZyb21Tb3VyY2VNYXAoZSx0KXtyZXR1cm4gbmV3IGVvKGUudG9TdHJpbmcoKSl9Z2V0IHNvdXJjZXMoKXtyZXR1cm4gdGhpcy5fYWJzb2x1dGVTb3VyY2VzLnNsaWNlKCl9X2dldE1hcHBpbmdzUHRyKCl7aWYodGhpcy5fbWFwcGluZ3NQdHI9PT0wKXt0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLHRoaXMuc291cmNlUm9vdCl9cmV0dXJuIHRoaXMuX21hcHBpbmdzUHRyfV9wYXJzZU1hcHBpbmdzKGUsdCl7Y29uc3Qgcj1lLmxlbmd0aDtjb25zdCBzPXRoaXMuX3dhc20uZXhwb3J0cy5hbGxvY2F0ZV9tYXBwaW5ncyhyKTtjb25zdCBpPW5ldyBVaW50OEFycmF5KHRoaXMuX3dhc20uZXhwb3J0cy5tZW1vcnkuYnVmZmVyLHMscik7Zm9yKGxldCB0PTA7dDxyO3QrKyl7aVt0XT1lLmNoYXJDb2RlQXQodCl9Y29uc3Qgbj10aGlzLl93YXNtLmV4cG9ydHMucGFyc2VfbWFwcGluZ3Mocyk7aWYoIW4pe2NvbnN0IGU9dGhpcy5fd2FzbS5leHBvcnRzLmdldF9sYXN0X2Vycm9yKCk7bGV0IHQ9YEVycm9yIHBhcnNpbmcgbWFwcGluZ3MgKGNvZGUgJHtlfSk6IGA7c3dpdGNoKGUpe2Nhc2UgMTp0Kz0idGhlIG1hcHBpbmdzIGNvbnRhaW5lZCBhIG5lZ2F0aXZlIGxpbmUsIGNvbHVtbiwgc291cmNlIGluZGV4LCBvciBuYW1lIGluZGV4IjticmVhaztjYXNlIDI6dCs9InRoZSBtYXBwaW5ncyBjb250YWluZWQgYSBudW1iZXIgbGFyZ2VyIHRoYW4gMioqMzIiO2JyZWFrO2Nhc2UgMzp0Kz0icmVhY2hlZCBFT0Ygd2hpbGUgaW4gdGhlIG1pZGRsZSBvZiBwYXJzaW5nIGEgVkxRIjticmVhaztjYXNlIDQ6dCs9ImludmFsaWQgYmFzZSA2NCBjaGFyYWN0ZXIgd2hpbGUgcGFyc2luZyBhIFZMUSI7YnJlYWs7ZGVmYXVsdDp0Kz0idW5rbm93biBlcnJvciBjb2RlIjticmVha310aHJvdyBuZXcgRXJyb3IodCl9dGhpcy5fbWFwcGluZ3NQdHI9bn1lYWNoTWFwcGluZyhlLHQscil7Y29uc3Qgcz10fHxudWxsO2NvbnN0IGk9cnx8WmEuR0VORVJBVEVEX09SREVSO2NvbnN0IG49dGhpcy5zb3VyY2VSb290O3RoaXMuX3dhc20ud2l0aE1hcHBpbmdDYWxsYmFjaygodD0+e2lmKHQuc291cmNlIT09bnVsbCl7dC5zb3VyY2U9dGhpcy5fc291cmNlcy5hdCh0LnNvdXJjZSk7dC5zb3VyY2U9SGEuY29tcHV0ZVNvdXJjZVVSTChuLHQuc291cmNlLHRoaXMuX3NvdXJjZU1hcFVSTCk7aWYodC5uYW1lIT09bnVsbCl7dC5uYW1lPXRoaXMuX25hbWVzLmF0KHQubmFtZSl9fWUuY2FsbChzLHQpfSksKCgpPT57c3dpdGNoKGkpe2Nhc2UgWmEuR0VORVJBVEVEX09SREVSOnRoaXMuX3dhc20uZXhwb3J0cy5ieV9nZW5lcmF0ZWRfbG9jYXRpb24odGhpcy5fZ2V0TWFwcGluZ3NQdHIoKSk7YnJlYWs7Y2FzZSBaYS5PUklHSU5BTF9PUkRFUjp0aGlzLl93YXNtLmV4cG9ydHMuYnlfb3JpZ2luYWxfbG9jYXRpb24odGhpcy5fZ2V0TWFwcGluZ3NQdHIoKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gb3JkZXIgb2YgaXRlcmF0aW9uLiIpfX0pKX1hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoZSl7bGV0IHQ9SGEuZ2V0QXJnKGUsInNvdXJjZSIpO2NvbnN0IHI9SGEuZ2V0QXJnKGUsImxpbmUiKTtjb25zdCBzPWUuY29sdW1ufHwwO3Q9dGhpcy5fZmluZFNvdXJjZUluZGV4KHQpO2lmKHQ8MCl7cmV0dXJuW119aWYocjwxKXt0aHJvdyBuZXcgRXJyb3IoIkxpbmUgbnVtYmVycyBtdXN0IGJlID49IDEiKX1pZihzPDApe3Rocm93IG5ldyBFcnJvcigiQ29sdW1uIG51bWJlcnMgbXVzdCBiZSA+PSAwIil9Y29uc3QgaT1bXTt0aGlzLl93YXNtLndpdGhNYXBwaW5nQ2FsbGJhY2soKGU9PntsZXQgdD1lLmxhc3RHZW5lcmF0ZWRDb2x1bW47aWYodGhpcy5fY29tcHV0ZWRDb2x1bW5TcGFucyYmdD09PW51bGwpe3Q9SW5maW5pdHl9aS5wdXNoKHtsaW5lOmUuZ2VuZXJhdGVkTGluZSxjb2x1bW46ZS5nZW5lcmF0ZWRDb2x1bW4sbGFzdENvbHVtbjp0fSl9KSwoKCk9Pnt0aGlzLl93YXNtLmV4cG9ydHMuYWxsX2dlbmVyYXRlZF9sb2NhdGlvbnNfZm9yKHRoaXMuX2dldE1hcHBpbmdzUHRyKCksdCxyLTEsImNvbHVtbiJpbiBlLHMpfSkpO3JldHVybiBpfWRlc3Ryb3koKXtpZih0aGlzLl9tYXBwaW5nc1B0ciE9PTApe3RoaXMuX3dhc20uZXhwb3J0cy5mcmVlX21hcHBpbmdzKHRoaXMuX21hcHBpbmdzUHRyKTt0aGlzLl9tYXBwaW5nc1B0cj0wfX1jb21wdXRlQ29sdW1uU3BhbnMoKXtpZih0aGlzLl9jb21wdXRlZENvbHVtblNwYW5zKXtyZXR1cm59dGhpcy5fd2FzbS5leHBvcnRzLmNvbXB1dGVfY29sdW1uX3NwYW5zKHRoaXMuX2dldE1hcHBpbmdzUHRyKCkpO3RoaXMuX2NvbXB1dGVkQ29sdW1uU3BhbnM9dHJ1ZX1vcmlnaW5hbFBvc2l0aW9uRm9yKGUpe2NvbnN0IHQ9e2dlbmVyYXRlZExpbmU6SGEuZ2V0QXJnKGUsImxpbmUiKSxnZW5lcmF0ZWRDb2x1bW46SGEuZ2V0QXJnKGUsImNvbHVtbiIpfTtpZih0LmdlbmVyYXRlZExpbmU8MSl7dGhyb3cgbmV3IEVycm9yKCJMaW5lIG51bWJlcnMgbXVzdCBiZSA+PSAxIil9aWYodC5nZW5lcmF0ZWRDb2x1bW48MCl7dGhyb3cgbmV3IEVycm9yKCJDb2x1bW4gbnVtYmVycyBtdXN0IGJlID49IDAiKX1sZXQgcj1IYS5nZXRBcmcoZSwiYmlhcyIsWmEuR1JFQVRFU1RfTE9XRVJfQk9VTkQpO2lmKHI9PW51bGwpe3I9WmEuR1JFQVRFU1RfTE9XRVJfQk9VTkR9bGV0IHM7dGhpcy5fd2FzbS53aXRoTWFwcGluZ0NhbGxiYWNrKChlPT5zPWUpLCgoKT0+e3RoaXMuX3dhc20uZXhwb3J0cy5vcmlnaW5hbF9sb2NhdGlvbl9mb3IodGhpcy5fZ2V0TWFwcGluZ3NQdHIoKSx0LmdlbmVyYXRlZExpbmUtMSx0LmdlbmVyYXRlZENvbHVtbixyKX0pKTtpZihzKXtpZihzLmdlbmVyYXRlZExpbmU9PT10LmdlbmVyYXRlZExpbmUpe2xldCBlPUhhLmdldEFyZyhzLCJzb3VyY2UiLG51bGwpO2lmKGUhPT1udWxsKXtlPXRoaXMuX3NvdXJjZXMuYXQoZSk7ZT1IYS5jb21wdXRlU291cmNlVVJMKHRoaXMuc291cmNlUm9vdCxlLHRoaXMuX3NvdXJjZU1hcFVSTCl9bGV0IHQ9SGEuZ2V0QXJnKHMsIm5hbWUiLG51bGwpO2lmKHQhPT1udWxsKXt0PXRoaXMuX25hbWVzLmF0KHQpfXJldHVybntzb3VyY2U6ZSxsaW5lOkhhLmdldEFyZyhzLCJvcmlnaW5hbExpbmUiLG51bGwpLGNvbHVtbjpIYS5nZXRBcmcocywib3JpZ2luYWxDb2x1bW4iLG51bGwpLG5hbWU6dH19fXJldHVybntzb3VyY2U6bnVsbCxsaW5lOm51bGwsY29sdW1uOm51bGwsbmFtZTpudWxsfX1oYXNDb250ZW50c09mQWxsU291cmNlcygpe2lmKCF0aGlzLnNvdXJjZXNDb250ZW50KXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnQubGVuZ3RoPj10aGlzLl9zb3VyY2VzLnNpemUoKSYmIXRoaXMuc291cmNlc0NvbnRlbnQuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGx9KSl9c291cmNlQ29udGVudEZvcihlLHQpe2lmKCF0aGlzLnNvdXJjZXNDb250ZW50KXtyZXR1cm4gbnVsbH1jb25zdCByPXRoaXMuX2ZpbmRTb3VyY2VJbmRleChlKTtpZihyPj0wKXtyZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFtyXX1sZXQgcz1lO2lmKHRoaXMuc291cmNlUm9vdCE9bnVsbCl7cz1IYS5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3Qscyl9bGV0IGk7aWYodGhpcy5zb3VyY2VSb290IT1udWxsJiYoaT1IYS51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSl7Y29uc3QgZT1zLnJlcGxhY2UoL15maWxlOlwvXC8vLCIiKTtpZihpLnNjaGVtZT09ImZpbGUiJiZ0aGlzLl9zb3VyY2VzLmhhcyhlKSl7cmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGUpXX1pZigoIWkucGF0aHx8aS5wYXRoPT0iLyIpJiZ0aGlzLl9zb3VyY2VzLmhhcygiLyIrcykpe3JldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZigiLyIrcyldfX1pZih0KXtyZXR1cm4gbnVsbH10aHJvdyBuZXcgRXJyb3IoJyInK3MrJyIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyl9Z2VuZXJhdGVkUG9zaXRpb25Gb3IoZSl7bGV0IHQ9SGEuZ2V0QXJnKGUsInNvdXJjZSIpO3Q9dGhpcy5fZmluZFNvdXJjZUluZGV4KHQpO2lmKHQ8MCl7cmV0dXJue2xpbmU6bnVsbCxjb2x1bW46bnVsbCxsYXN0Q29sdW1uOm51bGx9fWNvbnN0IHI9e3NvdXJjZTp0LG9yaWdpbmFsTGluZTpIYS5nZXRBcmcoZSwibGluZSIpLG9yaWdpbmFsQ29sdW1uOkhhLmdldEFyZyhlLCJjb2x1bW4iKX07aWYoci5vcmlnaW5hbExpbmU8MSl7dGhyb3cgbmV3IEVycm9yKCJMaW5lIG51bWJlcnMgbXVzdCBiZSA+PSAxIil9aWYoci5vcmlnaW5hbENvbHVtbjwwKXt0aHJvdyBuZXcgRXJyb3IoIkNvbHVtbiBudW1iZXJzIG11c3QgYmUgPj0gMCIpfWxldCBzPUhhLmdldEFyZyhlLCJiaWFzIixaYS5HUkVBVEVTVF9MT1dFUl9CT1VORCk7aWYocz09bnVsbCl7cz1aYS5HUkVBVEVTVF9MT1dFUl9CT1VORH1sZXQgaTt0aGlzLl93YXNtLndpdGhNYXBwaW5nQ2FsbGJhY2soKGU9Pmk9ZSksKCgpPT57dGhpcy5fd2FzbS5leHBvcnRzLmdlbmVyYXRlZF9sb2NhdGlvbl9mb3IodGhpcy5fZ2V0TWFwcGluZ3NQdHIoKSxyLnNvdXJjZSxyLm9yaWdpbmFsTGluZS0xLHIub3JpZ2luYWxDb2x1bW4scyl9KSk7aWYoaSl7aWYoaS5zb3VyY2U9PT1yLnNvdXJjZSl7bGV0IGU9aS5sYXN0R2VuZXJhdGVkQ29sdW1uO2lmKHRoaXMuX2NvbXB1dGVkQ29sdW1uU3BhbnMmJmU9PT1udWxsKXtlPUluZmluaXR5fXJldHVybntsaW5lOkhhLmdldEFyZyhpLCJnZW5lcmF0ZWRMaW5lIixudWxsKSxjb2x1bW46SGEuZ2V0QXJnKGksImdlbmVyYXRlZENvbHVtbiIsbnVsbCksbGFzdENvbHVtbjplfX19cmV0dXJue2xpbmU6bnVsbCxjb2x1bW46bnVsbCxsYXN0Q29sdW1uOm51bGx9fX1lby5wcm90b3R5cGUuY29uc3VtZXI9WmE7Y2xhc3MgdG8gZXh0ZW5kcyBaYXtjb25zdHJ1Y3RvcihlLHQpe3JldHVybiBzdXBlcihRYSkudGhlbigocj0+e2xldCBzPWU7aWYodHlwZW9mIGU9PT0ic3RyaW5nIil7cz1IYS5wYXJzZVNvdXJjZU1hcElucHV0KGUpfWNvbnN0IGk9SGEuZ2V0QXJnKHMsInZlcnNpb24iKTtjb25zdCBuPUhhLmdldEFyZyhzLCJzZWN0aW9ucyIpO2lmKGkhPXIuX3ZlcnNpb24pe3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdmVyc2lvbjogIitpKX1yLl9zb3VyY2VzPW5ldyBLYTtyLl9uYW1lcz1uZXcgS2E7ci5fX2dlbmVyYXRlZE1hcHBpbmdzPW51bGw7ci5fX29yaWdpbmFsTWFwcGluZ3M9bnVsbDtyLl9fZ2VuZXJhdGVkTWFwcGluZ3NVbnNvcnRlZD1udWxsO3IuX19vcmlnaW5hbE1hcHBpbmdzVW5zb3J0ZWQ9bnVsbDtsZXQgYT17bGluZTotMSxjb2x1bW46MH07cmV0dXJuIFByb21pc2UuYWxsKG4ubWFwKChlPT57aWYoZS51cmwpe3Rocm93IG5ldyBFcnJvcigiU3VwcG9ydCBmb3IgdXJsIGZpZWxkIGluIHNlY3Rpb25zIG5vdCBpbXBsZW1lbnRlZC4iKX1jb25zdCByPUhhLmdldEFyZyhlLCJvZmZzZXQiKTtjb25zdCBzPUhhLmdldEFyZyhyLCJsaW5lIik7Y29uc3QgaT1IYS5nZXRBcmcociwiY29sdW1uIik7aWYoczxhLmxpbmV8fHM9PT1hLmxpbmUmJmk8YS5jb2x1bW4pe3Rocm93IG5ldyBFcnJvcigiU2VjdGlvbiBvZmZzZXRzIG11c3QgYmUgb3JkZXJlZCBhbmQgbm9uLW92ZXJsYXBwaW5nLiIpfWE9cjtjb25zdCBuPW5ldyBaYShIYS5nZXRBcmcoZSwibWFwIiksdCk7cmV0dXJuIG4udGhlbigoZT0+KHtnZW5lcmF0ZWRPZmZzZXQ6e2dlbmVyYXRlZExpbmU6cysxLGdlbmVyYXRlZENvbHVtbjppKzF9LGNvbnN1bWVyOmV9KSkpfSkpKS50aGVuKChlPT57ci5fc2VjdGlvbnM9ZTtyZXR1cm4gcn0pKX0pKX1nZXQgX2dlbmVyYXRlZE1hcHBpbmdzKCl7aWYoIXRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyl7dGhpcy5fc29ydEdlbmVyYXRlZE1hcHBpbmdzKCl9cmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc31nZXQgX29yaWdpbmFsTWFwcGluZ3MoKXtpZighdGhpcy5fX29yaWdpbmFsTWFwcGluZ3Mpe3RoaXMuX3NvcnRPcmlnaW5hbE1hcHBpbmdzKCl9cmV0dXJuIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzfWdldCBfZ2VuZXJhdGVkTWFwcGluZ3NVbnNvcnRlZCgpe2lmKCF0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NVbnNvcnRlZCl7dGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncyx0aGlzLnNvdXJjZVJvb3QpfXJldHVybiB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NVbnNvcnRlZH1nZXQgX29yaWdpbmFsTWFwcGluZ3NVbnNvcnRlZCgpe2lmKCF0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc1Vuc29ydGVkKXt0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLHRoaXMuc291cmNlUm9vdCl9cmV0dXJuIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzVW5zb3J0ZWR9X3NvcnRHZW5lcmF0ZWRNYXBwaW5ncygpe2NvbnN0IGU9dGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NVbnNvcnRlZDtlLnNvcnQoSGEuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO3RoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncz1lfV9zb3J0T3JpZ2luYWxNYXBwaW5ncygpe2NvbnN0IGU9dGhpcy5fb3JpZ2luYWxNYXBwaW5nc1Vuc29ydGVkO2Uuc29ydChIYS5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7dGhpcy5fX29yaWdpbmFsTWFwcGluZ3M9ZX1nZXQgc291cmNlcygpe2NvbnN0IGU9W107Zm9yKGxldCB0PTA7dDx0aGlzLl9zZWN0aW9ucy5sZW5ndGg7dCsrKXtmb3IobGV0IHI9MDtyPHRoaXMuX3NlY3Rpb25zW3RdLmNvbnN1bWVyLnNvdXJjZXMubGVuZ3RoO3IrKyl7ZS5wdXNoKHRoaXMuX3NlY3Rpb25zW3RdLmNvbnN1bWVyLnNvdXJjZXNbcl0pfX1yZXR1cm4gZX1vcmlnaW5hbFBvc2l0aW9uRm9yKGUpe2NvbnN0IHQ9e2dlbmVyYXRlZExpbmU6SGEuZ2V0QXJnKGUsImxpbmUiKSxnZW5lcmF0ZWRDb2x1bW46SGEuZ2V0QXJnKGUsImNvbHVtbiIpfTtjb25zdCByPVdhLnNlYXJjaCh0LHRoaXMuX3NlY3Rpb25zLChmdW5jdGlvbihlLHQpe2NvbnN0IHI9ZS5nZW5lcmF0ZWRMaW5lLXQuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmU7aWYocil7cmV0dXJuIHJ9cmV0dXJuIGUuZ2VuZXJhdGVkQ29sdW1uLXQuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbn0pKTtjb25zdCBzPXRoaXMuX3NlY3Rpb25zW3JdO2lmKCFzKXtyZXR1cm57c291cmNlOm51bGwsbGluZTpudWxsLGNvbHVtbjpudWxsLG5hbWU6bnVsbH19cmV0dXJuIHMuY29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7bGluZTp0LmdlbmVyYXRlZExpbmUtKHMuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUtMSksY29sdW1uOnQuZ2VuZXJhdGVkQ29sdW1uLShzLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lPT09dC5nZW5lcmF0ZWRMaW5lP3MuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbi0xOjApLGJpYXM6ZS5iaWFzfSl9aGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKXtyZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbnN1bWVyLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCl9KSl9c291cmNlQ29udGVudEZvcihlLHQpe2ZvcihsZXQgdD0wO3Q8dGhpcy5fc2VjdGlvbnMubGVuZ3RoO3QrKyl7Y29uc3Qgcj10aGlzLl9zZWN0aW9uc1t0XTtjb25zdCBzPXIuY29uc3VtZXIuc291cmNlQ29udGVudEZvcihlLHRydWUpO2lmKHMpe3JldHVybiBzfX1pZih0KXtyZXR1cm4gbnVsbH10aHJvdyBuZXcgRXJyb3IoJyInK2UrJyIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyl9Z2VuZXJhdGVkUG9zaXRpb25Gb3IoZSl7Zm9yKGxldCB0PTA7dDx0aGlzLl9zZWN0aW9ucy5sZW5ndGg7dCsrKXtjb25zdCByPXRoaXMuX3NlY3Rpb25zW3RdO2lmKHIuY29uc3VtZXIuX2ZpbmRTb3VyY2VJbmRleChIYS5nZXRBcmcoZSwic291cmNlIikpPT09LTEpe2NvbnRpbnVlfWNvbnN0IHM9ci5jb25zdW1lci5nZW5lcmF0ZWRQb3NpdGlvbkZvcihlKTtpZihzKXtjb25zdCBlPXtsaW5lOnMubGluZSsoci5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZS0xKSxjb2x1bW46cy5jb2x1bW4rKHIuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmU9PT1zLmxpbmU/ci5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uLTE6MCl9O3JldHVybiBlfX1yZXR1cm57bGluZTpudWxsLGNvbHVtbjpudWxsfX1fcGFyc2VNYXBwaW5ncyhlLHQpe2NvbnN0IHI9dGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzVW5zb3J0ZWQ9W107Y29uc3Qgcz10aGlzLl9fb3JpZ2luYWxNYXBwaW5nc1Vuc29ydGVkPVtdO2ZvcihsZXQgZT0wO2U8dGhpcy5fc2VjdGlvbnMubGVuZ3RoO2UrKyl7Y29uc3QgdD10aGlzLl9zZWN0aW9uc1tlXTtjb25zdCBpPVtdO3QuY29uc3VtZXIuZWFjaE1hcHBpbmcoKGU9PmkucHVzaChlKSkpO2ZvcihsZXQgZT0wO2U8aS5sZW5ndGg7ZSsrKXtjb25zdCBuPWlbZV07bGV0IGE9SGEuY29tcHV0ZVNvdXJjZVVSTCh0LmNvbnN1bWVyLnNvdXJjZVJvb3QsbnVsbCx0aGlzLl9zb3VyY2VNYXBVUkwpO3RoaXMuX3NvdXJjZXMuYWRkKGEpO2E9dGhpcy5fc291cmNlcy5pbmRleE9mKGEpO2xldCBvPW51bGw7aWYobi5uYW1lKXt0aGlzLl9uYW1lcy5hZGQobi5uYW1lKTtvPXRoaXMuX25hbWVzLmluZGV4T2Yobi5uYW1lKX1jb25zdCBsPXtzb3VyY2U6YSxnZW5lcmF0ZWRMaW5lOm4uZ2VuZXJhdGVkTGluZSsodC5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZS0xKSxnZW5lcmF0ZWRDb2x1bW46bi5nZW5lcmF0ZWRDb2x1bW4rKHQuZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmU9PT1uLmdlbmVyYXRlZExpbmU/dC5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uLTE6MCksb3JpZ2luYWxMaW5lOm4ub3JpZ2luYWxMaW5lLG9yaWdpbmFsQ29sdW1uOm4ub3JpZ2luYWxDb2x1bW4sbmFtZTpvfTtyLnB1c2gobCk7aWYodHlwZW9mIGwub3JpZ2luYWxMaW5lPT09Im51bWJlciIpe3MucHVzaChsKX19fX1lYWNoTWFwcGluZyhlLHQscil7Y29uc3Qgcz10fHxudWxsO2NvbnN0IGk9cnx8WmEuR0VORVJBVEVEX09SREVSO2xldCBuO3N3aXRjaChpKXtjYXNlIFphLkdFTkVSQVRFRF9PUkRFUjpuPXRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzO2JyZWFrO2Nhc2UgWmEuT1JJR0lOQUxfT1JERVI6bj10aGlzLl9vcmlnaW5hbE1hcHBpbmdzO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG9yZGVyIG9mIGl0ZXJhdGlvbi4iKX1jb25zdCBhPXRoaXMuc291cmNlUm9vdDtuLm1hcCgoZnVuY3Rpb24oZSl7bGV0IHQ9bnVsbDtpZihlLnNvdXJjZSE9PW51bGwpe3Q9dGhpcy5fc291cmNlcy5hdChlLnNvdXJjZSk7dD1IYS5jb21wdXRlU291cmNlVVJMKGEsdCx0aGlzLl9zb3VyY2VNYXBVUkwpfXJldHVybntzb3VyY2U6dCxnZW5lcmF0ZWRMaW5lOmUuZ2VuZXJhdGVkTGluZSxnZW5lcmF0ZWRDb2x1bW46ZS5nZW5lcmF0ZWRDb2x1bW4sb3JpZ2luYWxMaW5lOmUub3JpZ2luYWxMaW5lLG9yaWdpbmFsQ29sdW1uOmUub3JpZ2luYWxDb2x1bW4sbmFtZTplLm5hbWU9PT1udWxsP251bGw6dGhpcy5fbmFtZXMuYXQoZS5uYW1lKX19KSx0aGlzKS5mb3JFYWNoKGUscyl9X2ZpbmRNYXBwaW5nKGUsdCxyLHMsaSxuKXtpZihlW3JdPD0wKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAiK2Vbcl0pfWlmKGVbc108MCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAiK2Vbc10pfXJldHVybiBXYS5zZWFyY2goZSx0LGksbil9YWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yKGUpe2NvbnN0IHQ9SGEuZ2V0QXJnKGUsImxpbmUiKTtjb25zdCByPXtzb3VyY2U6SGEuZ2V0QXJnKGUsInNvdXJjZSIpLG9yaWdpbmFsTGluZTp0LG9yaWdpbmFsQ29sdW1uOkhhLmdldEFyZyhlLCJjb2x1bW4iLDApfTtyLnNvdXJjZT10aGlzLl9maW5kU291cmNlSW5kZXgoci5zb3VyY2UpO2lmKHIuc291cmNlPDApe3JldHVybltdfWlmKHIub3JpZ2luYWxMaW5lPDEpe3Rocm93IG5ldyBFcnJvcigiTGluZSBudW1iZXJzIG11c3QgYmUgPj0gMSIpfWlmKHIub3JpZ2luYWxDb2x1bW48MCl7dGhyb3cgbmV3IEVycm9yKCJDb2x1bW4gbnVtYmVycyBtdXN0IGJlID49IDAiKX1jb25zdCBzPVtdO2xldCBpPXRoaXMuX2ZpbmRNYXBwaW5nKHIsdGhpcy5fb3JpZ2luYWxNYXBwaW5ncywib3JpZ2luYWxMaW5lIiwib3JpZ2luYWxDb2x1bW4iLEhhLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFdhLkxFQVNUX1VQUEVSX0JPVU5EKTtpZihpPj0wKXtsZXQgcj10aGlzLl9vcmlnaW5hbE1hcHBpbmdzW2ldO2lmKGUuY29sdW1uPT09dW5kZWZpbmVkKXtjb25zdCBlPXIub3JpZ2luYWxMaW5lO3doaWxlKHImJnIub3JpZ2luYWxMaW5lPT09ZSl7bGV0IGU9ci5sYXN0R2VuZXJhdGVkQ29sdW1uO2lmKHRoaXMuX2NvbXB1dGVkQ29sdW1uU3BhbnMmJmU9PT1udWxsKXtlPUluZmluaXR5fXMucHVzaCh7bGluZTpIYS5nZXRBcmcociwiZ2VuZXJhdGVkTGluZSIsbnVsbCksY29sdW1uOkhhLmdldEFyZyhyLCJnZW5lcmF0ZWRDb2x1bW4iLG51bGwpLGxhc3RDb2x1bW46ZX0pO3I9dGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2ldfX1lbHNle2NvbnN0IGU9ci5vcmlnaW5hbENvbHVtbjt3aGlsZShyJiZyLm9yaWdpbmFsTGluZT09PXQmJnIub3JpZ2luYWxDb2x1bW49PWUpe2xldCBlPXIubGFzdEdlbmVyYXRlZENvbHVtbjtpZih0aGlzLl9jb21wdXRlZENvbHVtblNwYW5zJiZlPT09bnVsbCl7ZT1JbmZpbml0eX1zLnB1c2goe2xpbmU6SGEuZ2V0QXJnKHIsImdlbmVyYXRlZExpbmUiLG51bGwpLGNvbHVtbjpIYS5nZXRBcmcociwiZ2VuZXJhdGVkQ29sdW1uIixudWxsKSxsYXN0Q29sdW1uOmV9KTtyPXRoaXMuX29yaWdpbmFsTWFwcGluZ3NbKytpXX19fXJldHVybiBzfWRlc3Ryb3koKXtmb3IobGV0IGU9MDtlPHRoaXMuX3NlY3Rpb25zLmxlbmd0aDtlKyspe3RoaXMuX3NlY3Rpb25zW2VdLmNvbnN1bWVyLmRlc3Ryb3koKX19fWZ1bmN0aW9uIHJvKGUsdCl7bGV0IHI9ZTtpZih0eXBlb2YgZT09PSJzdHJpbmciKXtyPUhhLnBhcnNlU291cmNlTWFwSW5wdXQoZSl9Y29uc3Qgcz1yLnNlY3Rpb25zIT1udWxsP25ldyB0byhyLHQpOm5ldyBlbyhyLHQpO3JldHVybiBQcm9taXNlLnJlc29sdmUocyl9ZnVuY3Rpb24gc28oZSx0KXtyZXR1cm4gZW8uZnJvbVNvdXJjZU1hcChlLHQpfXZhciBpbz12YS5Tb3VyY2VNYXBHZW5lcmF0b3I7ZnVuY3Rpb24gbm8oZSl7cmV0dXJuIG5ldyBpbyhlKX1jb25zdCBhbz1PYmplY3QuZnJlZXplKHtjb2RlOiIiLGFzdDpbXSxtZXRhOnt9LG1hcDpudWxsfSk7ZnVuY3Rpb24gb28oZSx0KXtjb25zdCByPU9iamVjdC5hc3NpZ24oe30sYW8sZSx7bWV0YTp0fSk7aWYoIXIubWFwJiZ0JiZ0Lm9wdGlvbnMmJnQub3B0aW9ucy5maWxlKXJldHVybiBPYmplY3QuYXNzaWduKHt9LHIse21hcDpubyh7ZmlsZTp0Lm9wdGlvbnMuZmlsZX0pfSk7cmV0dXJuIHJ9ZnVuY3Rpb24gbG8oZSx0LHIpe2NvbnN0IHM9ZT9lKHIsdCk6e2NvZGU6cn07cmV0dXJuIG9vKHMsdCl9ZnVuY3Rpb24gdW8oZSl7dGhyb3cgbmV3IEVycm9yKGUpfWNvbnN0IGNvPW5ldyBTZXQ7ZnVuY3Rpb24gaG8oZSl7aWYoY28uaGFzKGUpKXt1byhgVGhpcyBwb3N0cHJvY2Vzc29yICIke2UubmFtZXx8ZS50b1N0cmluZygpfSIgd2FzIGFscmVhZHkgcmVnaXN0ZXJlZGApfWNvLmFkZChlKTtyZXR1cm4gY299ZnVuY3Rpb24gcG8oZSx0KXtyZXR1cm4gQXJyYXkuZnJvbShjbykucmVkdWNlKChmdW5jdGlvbihlLHIpe2NvbnN0e2NvZGU6cyxtYXA6aX09ZTtjb25zdCBuPXIocyx0KTtyZXR1cm57Y29kZTpuLmNvZGUsbWFwOnhhKGksbi5tYXApfX0pLG9vKGUsdCkpfWNvbnN0IGZvPU9iamVjdC5mcmVlemUoe2phdmFzY3JpcHQ6bmV3IE1hcCxjc3M6bmV3IE1hcCx0ZW1wbGF0ZToobmV3IE1hcCkuc2V0KCJkZWZhdWx0IiwoZT0+KHtjb2RlOmV9KSkpfSk7ZnVuY3Rpb24gbW8oZSl7dW8oYE5vIHByZXByb2Nlc3NvciBvZiB0eXBlICIke2V9IiB3YXMgZm91bmQsIHBsZWFzZSBtYWtlIHN1cmUgdG8gdXNlIG9uZSBvZiB0aGVzZTogJ2phdmFzY3JpcHQnLCAnY3NzJyBvciAndGVtcGxhdGUnYCl9ZnVuY3Rpb24geW8oZSl7dW8oYE5vIHByZXByb2Nlc3NvciBuYW1lZCAiJHtlfSIgd2FzIGZvdW5kLCBhcmUgeW91IHN1cmUgeW91IGhhdmUgcmVnaXN0ZXJlZCBpdD8nYCl9ZnVuY3Rpb24gZ28oZSx0LHIpe2lmKCFlKXVvKCJQbGVhc2UgZGVmaW5lIHRoZSB0eXBlIG9mIHByZXByb2Nlc3NvciB5b3Ugd2FudCB0byByZWdpc3RlciAnamF2YXNjcmlwdCcsICdjc3MnIG9yICd0ZW1wbGF0ZSciKTtpZighdCl1bygiUGxlYXNlIGRlZmluZSBhIG5hbWUgZm9yIHlvdXIgcHJlcHJvY2Vzc29yIik7aWYoIXIpdW8oIlBsZWFzZSBwcm92aWRlIGEgcHJlcHJvY2Vzc29yIGZ1bmN0aW9uIik7aWYoIWZvW2VdKW1vKGUpO2lmKGZvW2VdLmhhcyh0KSl1byhgVGhlIHByZXByb2Nlc3NvciAke3R9IHdhcyBhbHJlYWR5IHJlZ2lzdGVyZWQgYmVmb3JlYCk7Zm9bZV0uc2V0KHQscik7cmV0dXJuIGZvfWZ1bmN0aW9uIHhvKGUsdCxyLHMpe2lmKCFmb1tlXSltbyhlKTtpZighZm9bZV0uaGFzKHQpKXlvKHQpO3JldHVybiBsbyhmb1tlXS5nZXQodCkscixzKX1mdW5jdGlvbiB2bygpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXt0W3JdPWFyZ3VtZW50c1tyXX1yZXR1cm4gdC5yZWR1Y2UoKChlLHQpPT5mdW5jdGlvbigpe3JldHVybiBlKHQoLi4uYXJndW1lbnRzKSl9KSl9LyohIGh0dHBzOi8vbXRocy5iZS9jc3Nlc2MgdjMuMC4wIGJ5IEBtYXRoaWFzICovdmFyIGJvPXt9O3ZhciBFbz1iby5oYXNPd25Qcm9wZXJ0eTt2YXIgU289ZnVuY3Rpb24gZSh0LHIpe2lmKCF0KXtyZXR1cm4gcn12YXIgcz17fTtmb3IodmFyIGkgaW4gcil7c1tpXT1Fby5jYWxsKHQsaSk/dFtpXTpyW2ldfXJldHVybiBzfTt2YXIgVG89L1sgLSxcLlwvOi1AXFstXF5gXHstfl0vO3ZhciBBbz0vWyAtLFwuXC86LUBcW1xdXF5gXHstfl0vO3ZhciB3bz0vKF58XFwrKT8oXFxbQS1GMC05XXsxLDZ9KVx4MjAoPyFbYS1mQS1GMC05XHgyMF0pL2c7dmFyIENvPWZ1bmN0aW9uIGUodCxyKXtyPVNvKHIsZS5vcHRpb25zKTtpZihyLnF1b3RlcyE9InNpbmdsZSImJnIucXVvdGVzIT0iZG91YmxlIil7ci5xdW90ZXM9InNpbmdsZSJ9dmFyIHM9ci5xdW90ZXM9PSJkb3VibGUiPyciJzoiJyI7dmFyIGk9ci5pc0lkZW50aWZpZXI7dmFyIG49dC5jaGFyQXQoMCk7dmFyIGE9IiI7dmFyIG89MDt2YXIgbD10Lmxlbmd0aDt3aGlsZShvPGwpe3ZhciB1PXQuY2hhckF0KG8rKyk7dmFyIGM9dS5jaGFyQ29kZUF0KCk7dmFyIGg9dm9pZCAwO2lmKGM8MzJ8fGM+MTI2KXtpZihjPj01NTI5NiYmYzw9NTYzMTkmJm88bCl7dmFyIHA9dC5jaGFyQ29kZUF0KG8rKyk7aWYoKHAmNjQ1MTIpPT01NjMyMCl7Yz0oKGMmMTAyMyk8PDEwKSsocCYxMDIzKSs2NTUzNn1lbHNle28tLX19aD0iXFwiK2MudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkrIiAifWVsc2V7aWYoci5lc2NhcGVFdmVyeXRoaW5nKXtpZihUby50ZXN0KHUpKXtoPSJcXCIrdX1lbHNle2g9IlxcIitjLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyIgIn19ZWxzZSBpZigvW1x0XG5cZlxyXHgwQl0vLnRlc3QodSkpe2g9IlxcIitjLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyIgIn1lbHNlIGlmKHU9PSJcXCJ8fCFpJiYodT09JyInJiZzPT11fHx1PT0iJyImJnM9PXUpfHxpJiZBby50ZXN0KHUpKXtoPSJcXCIrdX1lbHNle2g9dX19YSs9aH1pZihpKXtpZigvXi1bLVxkXS8udGVzdChhKSl7YT0iXFwtIithLnNsaWNlKDEpfWVsc2UgaWYoL1xkLy50ZXN0KG4pKXthPSJcXDMiK24rIiAiK2Euc2xpY2UoMSl9fWE9YS5yZXBsYWNlKHdvLChmdW5jdGlvbihlLHQscil7aWYodCYmdC5sZW5ndGglMil7cmV0dXJuIGV9cmV0dXJuKHR8fCIiKStyfSkpO2lmKCFpJiZyLndyYXApe3JldHVybiBzK2Erc31yZXR1cm4gYX07Q28ub3B0aW9ucz17ZXNjYXBlRXZlcnl0aGluZzpmYWxzZSxpc0lkZW50aWZpZXI6ZmFsc2UscXVvdGVzOiJzaW5nbGUiLHdyYXA6ZmFsc2V9O0NvLnZlcnNpb249IjMuMC4wIjt2YXIgUG89Q287Y29uc3QgRG89InR5cGUiO2Z1bmN0aW9uIGtvKGUpe2NvbnN0IHQ9ZS5hdHRyaWJ1dGVzP2UuYXR0cmlidXRlcy5maW5kKChlPT5lLm5hbWU9PT1EbykpOm51bGw7cmV0dXJuIHQ/Tm8odC52YWx1ZSk6bnVsbH1mdW5jdGlvbiBObyhlKXtyZXR1cm4gZS5yZXBsYWNlKCJ0ZXh0LyIsIiIpfWZ1bmN0aW9uIElvKGUsdCxyLHMpe2NvbnN0IGk9cy50ZXh0O3JldHVybiB0P3hvKGUsdCxyLGkpOntjb2RlOml9fWNvbnN0IEZvPS9cL1wqW14qXSpcKisoPzpbXiovXVteKl0qXCorKSpcLy9nO2NvbnN0IE1vPS8iW14iXG5cXF0qKD86XFxbXFNcc11bXiJcblxcXSopKiJ8J1teJ1xuXFxdKig/OlxcW1xTXHNdW14nXG5cXF0qKSonLy5zb3VyY2U7Y29uc3QgX289UmVnRXhwKGAoW3t9XXxeKVs7IF0qKCg/OlteQCA7e31dW157fV0qKT9bXkAgO3t9Ol0gPykoPz17KXwke01vfWAsImciKTtmdW5jdGlvbiBPbyhlLHQpe2NvbnN0IHI9Ijpob3N0Ijtjb25zdCBzPVsiZnJvbSIsInRvIl07cmV0dXJuIHQucmVwbGFjZShfbywoZnVuY3Rpb24odCxpLG4pe2lmKCFuKXJldHVybiB0O249bi5yZXBsYWNlKC9bXixdKy9nLChmdW5jdGlvbih0KXtjb25zdCBpPXQudHJpbSgpO2lmKGkuaW5kZXhPZihlKT09PTApe3JldHVybiB0fWlmKCFpfHxzLmluZGV4T2YoaSk+LTF8fGkuc2xpY2UoLTEpPT09IiUiKXtyZXR1cm4gdH1pZihpLmluZGV4T2Yocik8MCl7cmV0dXJuYCR7ZX0gJHtpfSxbaXM9IiR7ZX0iXSAke2l9YH1lbHNle3JldHVybmAke2kucmVwbGFjZShyLGUpfSwke2kucmVwbGFjZShyLGBbaXM9IiR7ZX0iXWApfWB9fSkpO3JldHVybiBpP2Ake2l9ICR7bn1gOm59KSl9ZnVuY3Rpb24gTG8oZSl7cmV0dXJuIGUucmVwbGFjZShGbywiIikucmVwbGFjZSgvXHMrL2csIiAiKS50cmltKCl9Y29uc3QgQm89ZT0+ZS5yZXBsYWNlKC9cXC9nLCJcXFxcIik7Y29uc3QgUm89ZT0+Qm8oUG8oZSx7aXNJZGVudGlmaWVyOnRydWV9KSk7ZnVuY3Rpb24gam8oZSx0LHIsaSl7Y29uc3Qgbj1rbyhlKTtjb25zdHtvcHRpb25zOmF9PXI7Y29uc3Qgbz1JbygiY3NzIixuLHIsZS50ZXh0KTtjb25zdCBsPUxvKG8uY29kZSk7Y29uc3QgdT1SbyhyLnRhZ05hbWUpO2NvbnN0IGM9KGEuc2NvcGVkQ3NzP09vKHUsQm8obCkpOkJvKGwpKS50cmltKCk7dWEudmlzaXQoaSx7dmlzaXRQcm9wZXJ0eShlKXtpZihlLnZhbHVlLmtleS5uYW1lPT09cyl7ZS52YWx1ZS52YWx1ZT1jYS50ZW1wbGF0ZUxpdGVyYWwoW2NhLnRlbXBsYXRlRWxlbWVudCh7cmF3OmMsY29va2VkOiIifSxmYWxzZSldLFtdKTtyZXR1cm4gZmFsc2V9dGhpcy50cmF2ZXJzZShlKX19KTtyZXR1cm4gaX1mdW5jdGlvbiBVbyhlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheSh0PjE/dC0xOjApLHM9MTtzPHQ7cysrKXtyW3MtMV09YXJndW1lbnRzW3NdfXJldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLHM9bmV3IEFycmF5KHQpLGk9MDtpPHQ7aSsrKXtzW2ldPWFyZ3VtZW50c1tpXX1zPVsuLi5yLC4uLnNdO3JldHVybiBzLmxlbmd0aDxlLmxlbmd0aD9VbyhlLC4uLnMpOmUoLi4ucyl9fXZhciB6bz17fTt2YXIgVm89e307dmFyIHFvPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxbywiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTt2YXIgR289enQ7ZnVuY3Rpb24gWG8oZSl7cmV0dXJue3NvdXJjZVR5cGU6R28uZ2V0T3B0aW9uKGUsInNvdXJjZVR5cGUiLCJtb2R1bGUiKSxzdHJpY3RNb2RlOkdvLmdldE9wdGlvbihlLCJzdHJpY3RNb2RlIixmYWxzZSksYWxsb3dJbXBvcnRFeHBvcnRFdmVyeXdoZXJlOnRydWUsYWxsb3dSZXR1cm5PdXRzaWRlRnVuY3Rpb246dHJ1ZSxzdGFydExpbmU6MSx0b2tlbnM6dHJ1ZSxwbHVnaW5zOlsiYXN5bmNHZW5lcmF0b3JzIiwiYmlnSW50IiwiY2xhc3NQcml2YXRlTWV0aG9kcyIsImNsYXNzUHJpdmF0ZVByb3BlcnRpZXMiLCJjbGFzc1Byb3BlcnRpZXMiLCJkZWNvcmF0b3JzLWxlZ2FjeSIsImRvRXhwcmVzc2lvbnMiLCJkeW5hbWljSW1wb3J0IiwiZXhwb3J0RGVmYXVsdEZyb20iLCJleHBvcnRFeHRlbnNpb25zIiwiZXhwb3J0TmFtZXNwYWNlRnJvbSIsImZ1bmN0aW9uQmluZCIsImZ1bmN0aW9uU2VudCIsImltcG9ydE1ldGEiLCJudWxsaXNoQ29hbGVzY2luZ09wZXJhdG9yIiwibnVtZXJpY1NlcGFyYXRvciIsIm9iamVjdFJlc3RTcHJlYWQiLCJvcHRpb25hbENhdGNoQmluZGluZyIsIm9wdGlvbmFsQ2hhaW5pbmciLFsicGlwZWxpbmVPcGVyYXRvciIse3Byb3Bvc2FsOiJtaW5pbWFsIn1dLCJ0aHJvd0V4cHJlc3Npb25zIl19fXFvLmRlZmF1bHQ9WG87dmFyIEpvPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShKbywiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTtjb25zdCBIbz0vXHJcbj98W1xuXHUyMDI4XHUyMDI5XS87Y29uc3QgV289bmV3IFJlZ0V4cChIby5zb3VyY2UsImciKTtmdW5jdGlvbiBLbyhlKXtzd2l0Y2goZSl7Y2FzZSAxMDpjYXNlIDEzOmNhc2UgODIzMjpjYXNlIDgyMzM6cmV0dXJuIHRydWU7ZGVmYXVsdDpyZXR1cm4gZmFsc2V9fWNvbnN0ICRvPS8oPzpcc3xcL1wvLip8XC9cKlteXSo/XCpcLykqL2c7Y29uc3QgWW89Lyg/OlteXFNcblxyXHUyMDI4XHUyMDI5XXxcL1wvLip8XC9cKi4qP1wqXC8pKi95O2NvbnN0IFFvPW5ldyBSZWdFeHAoIig/PSgiK1lvLnNvdXJjZSsiKSlcXDEiKy8oPz1bXG5cclx1MjAyOFx1MjAyOV18XC9cKig/IS4qP1wqXC8pfCQpLy5zb3VyY2UsInkiKTtmdW5jdGlvbiBabyhlKXtzd2l0Y2goZSl7Y2FzZSA5OmNhc2UgMTE6Y2FzZSAxMjpjYXNlIDMyOmNhc2UgMTYwOmNhc2UgNTc2MDpjYXNlIDgxOTI6Y2FzZSA4MTkzOmNhc2UgODE5NDpjYXNlIDgxOTU6Y2FzZSA4MTk2OmNhc2UgODE5NzpjYXNlIDgxOTg6Y2FzZSA4MTk5OmNhc2UgODIwMDpjYXNlIDgyMDE6Y2FzZSA4MjAyOmNhc2UgODIzOTpjYXNlIDgyODc6Y2FzZSAxMjI4ODpjYXNlIDY1Mjc5OnJldHVybiB0cnVlO2RlZmF1bHQ6cmV0dXJuIGZhbHNlfX1jbGFzcyBlbHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMubGluZT12b2lkIDA7dGhpcy5jb2x1bW49dm9pZCAwO3RoaXMubGluZT1lO3RoaXMuY29sdW1uPXR9fWNsYXNzIHRse2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5zdGFydD12b2lkIDA7dGhpcy5lbmQ9dm9pZCAwO3RoaXMuZmlsZW5hbWU9dm9pZCAwO3RoaXMuaWRlbnRpZmllck5hbWU9dm9pZCAwO3RoaXMuc3RhcnQ9ZTt0aGlzLmVuZD10fX1mdW5jdGlvbiBybChlLHQpe2xldCByPTE7bGV0IHM9MDtsZXQgaTtXby5sYXN0SW5kZXg9MDt3aGlsZSgoaT1Xby5leGVjKGUpKSYmaS5pbmRleDx0KXtyKys7cz1Xby5sYXN0SW5kZXh9cmV0dXJuIG5ldyBlbChyLHQtcyl9Y2xhc3Mgc2x7Y29uc3RydWN0b3IoKXt0aGlzLnNhd1VuYW1iaWd1b3VzRVNNPWZhbHNlO3RoaXMuYW1iaWd1b3VzU2NyaXB0RGlmZmVyZW50QXN0PWZhbHNlfWhhc1BsdWdpbihlKXtyZXR1cm4gdGhpcy5wbHVnaW5zLmhhcyhlKX1nZXRQbHVnaW5PcHRpb24oZSx0KXtpZih0aGlzLmhhc1BsdWdpbihlKSlyZXR1cm4gdGhpcy5wbHVnaW5zLmdldChlKVt0XX19ZnVuY3Rpb24gaWwoZSx0KXtpZihlLnRyYWlsaW5nQ29tbWVudHM9PT11bmRlZmluZWQpe2UudHJhaWxpbmdDb21tZW50cz10fWVsc2V7ZS50cmFpbGluZ0NvbW1lbnRzLnVuc2hpZnQoLi4udCl9fWZ1bmN0aW9uIG5sKGUsdCl7aWYoZS5sZWFkaW5nQ29tbWVudHM9PT11bmRlZmluZWQpe2UubGVhZGluZ0NvbW1lbnRzPXR9ZWxzZXtlLmxlYWRpbmdDb21tZW50cy51bnNoaWZ0KC4uLnQpfX1mdW5jdGlvbiBhbChlLHQpe2lmKGUuaW5uZXJDb21tZW50cz09PXVuZGVmaW5lZCl7ZS5pbm5lckNvbW1lbnRzPXR9ZWxzZXtlLmlubmVyQ29tbWVudHMudW5zaGlmdCguLi50KX19ZnVuY3Rpb24gb2woZSx0LHIpe2xldCBzPW51bGw7bGV0IGk9dC5sZW5ndGg7d2hpbGUocz09PW51bGwmJmk+MCl7cz10Wy0taV19aWYocz09PW51bGx8fHMuc3RhcnQ+ci5zdGFydCl7YWwoZSxyLmNvbW1lbnRzKX1lbHNle2lsKHMsci5jb21tZW50cyl9fWNsYXNzIGxsIGV4dGVuZHMgc2x7YWRkQ29tbWVudChlKXtpZih0aGlzLmZpbGVuYW1lKWUubG9jLmZpbGVuYW1lPXRoaXMuZmlsZW5hbWU7dGhpcy5zdGF0ZS5jb21tZW50cy5wdXNoKGUpfXByb2Nlc3NDb21tZW50KGUpe2NvbnN0e2NvbW1lbnRTdGFjazp0fT10aGlzLnN0YXRlO2NvbnN0IHI9dC5sZW5ndGg7aWYocj09PTApcmV0dXJuO2xldCBzPXItMTtjb25zdCBpPXRbc107aWYoaS5zdGFydD09PWUuZW5kKXtpLmxlYWRpbmdOb2RlPWU7cy0tfWNvbnN0e3N0YXJ0Om59PWU7Zm9yKDtzPj0wO3MtLSl7Y29uc3Qgcj10W3NdO2NvbnN0IGk9ci5lbmQ7aWYoaT5uKXtyLmNvbnRhaW5pbmdOb2RlPWU7dGhpcy5maW5hbGl6ZUNvbW1lbnQocik7dC5zcGxpY2UocywxKX1lbHNle2lmKGk9PT1uKXtyLnRyYWlsaW5nTm9kZT1lfWJyZWFrfX19ZmluYWxpemVDb21tZW50KGUpe2NvbnN0e2NvbW1lbnRzOnR9PWU7aWYoZS5sZWFkaW5nTm9kZSE9PW51bGx8fGUudHJhaWxpbmdOb2RlIT09bnVsbCl7aWYoZS5sZWFkaW5nTm9kZSE9PW51bGwpe2lsKGUubGVhZGluZ05vZGUsdCl9aWYoZS50cmFpbGluZ05vZGUhPT1udWxsKXtubChlLnRyYWlsaW5nTm9kZSx0KX19ZWxzZXtjb25zdHtjb250YWluaW5nTm9kZTpyLHN0YXJ0OnN9PWU7aWYodGhpcy5pbnB1dC5jaGFyQ29kZUF0KHMtMSk9PT00NCl7c3dpdGNoKHIudHlwZSl7Y2FzZSJPYmplY3RFeHByZXNzaW9uIjpjYXNlIk9iamVjdFBhdHRlcm4iOmNhc2UiUmVjb3JkRXhwcmVzc2lvbiI6b2wocixyLnByb3BlcnRpZXMsZSk7YnJlYWs7Y2FzZSJDYWxsRXhwcmVzc2lvbiI6Y2FzZSJPcHRpb25hbENhbGxFeHByZXNzaW9uIjpvbChyLHIuYXJndW1lbnRzLGUpO2JyZWFrO2Nhc2UiRnVuY3Rpb25EZWNsYXJhdGlvbiI6Y2FzZSJGdW5jdGlvbkV4cHJlc3Npb24iOmNhc2UiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iOmNhc2UiT2JqZWN0TWV0aG9kIjpjYXNlIkNsYXNzTWV0aG9kIjpjYXNlIkNsYXNzUHJpdmF0ZU1ldGhvZCI6b2wocixyLnBhcmFtcyxlKTticmVhaztjYXNlIkFycmF5RXhwcmVzc2lvbiI6Y2FzZSJBcnJheVBhdHRlcm4iOmNhc2UiVHVwbGVFeHByZXNzaW9uIjpvbChyLHIuZWxlbWVudHMsZSk7YnJlYWs7Y2FzZSJFeHBvcnROYW1lZERlY2xhcmF0aW9uIjpjYXNlIkltcG9ydERlY2xhcmF0aW9uIjpvbChyLHIuc3BlY2lmaWVycyxlKTticmVhaztkZWZhdWx0OnthbChyLHQpfX19ZWxzZXthbChyLHQpfX19ZmluYWxpemVSZW1haW5pbmdDb21tZW50cygpe2NvbnN0e2NvbW1lbnRTdGFjazplfT10aGlzLnN0YXRlO2ZvcihsZXQgdD1lLmxlbmd0aC0xO3Q+PTA7dC0tKXt0aGlzLmZpbmFsaXplQ29tbWVudChlW3RdKX10aGlzLnN0YXRlLmNvbW1lbnRTdGFjaz1bXX1yZXNldFByZXZpb3VzTm9kZVRyYWlsaW5nQ29tbWVudHMoZSl7Y29uc3R7Y29tbWVudFN0YWNrOnR9PXRoaXMuc3RhdGU7Y29uc3R7bGVuZ3RoOnJ9PXQ7aWYocj09PTApcmV0dXJuO2NvbnN0IHM9dFtyLTFdO2lmKHMubGVhZGluZ05vZGU9PT1lKXtzLmxlYWRpbmdOb2RlPW51bGx9fXRha2VTdXJyb3VuZGluZ0NvbW1lbnRzKGUsdCxyKXtjb25zdHtjb21tZW50U3RhY2s6c309dGhpcy5zdGF0ZTtjb25zdCBpPXMubGVuZ3RoO2lmKGk9PT0wKXJldHVybjtsZXQgbj1pLTE7Zm9yKDtuPj0wO24tLSl7Y29uc3QgaT1zW25dO2NvbnN0IGE9aS5lbmQ7Y29uc3Qgbz1pLnN0YXJ0O2lmKG89PT1yKXtpLmxlYWRpbmdOb2RlPWV9ZWxzZSBpZihhPT09dCl7aS50cmFpbGluZ05vZGU9ZX1lbHNlIGlmKGE8dCl7YnJlYWt9fX19Y29uc3QgdWw9T2JqZWN0LmZyZWV6ZSh7U3ludGF4RXJyb3I6IkJBQkVMX1BBUlNFUl9TWU5UQVhfRVJST1IiLFNvdXJjZVR5cGVNb2R1bGVFcnJvcjoiQkFCRUxfUEFSU0VSX1NPVVJDRVRZUEVfTU9EVUxFX1JFUVVJUkVEIn0pO2NvbnN0IGNsPWZsKHtBY2Nlc3NvcklzR2VuZXJhdG9yOiJBICUwdGVyIGNhbm5vdCBiZSBhIGdlbmVyYXRvci4iLEFyZ3VtZW50c0luQ2xhc3M6Iidhcmd1bWVudHMnIGlzIG9ubHkgYWxsb3dlZCBpbiBmdW5jdGlvbnMgYW5kIGNsYXNzIG1ldGhvZHMuIixBc3luY0Z1bmN0aW9uSW5TaW5nbGVTdGF0ZW1lbnRDb250ZXh0OiJBc3luYyBmdW5jdGlvbnMgY2FuIG9ubHkgYmUgZGVjbGFyZWQgYXQgdGhlIHRvcCBsZXZlbCBvciBpbnNpZGUgYSBibG9jay4iLEF3YWl0QmluZGluZ0lkZW50aWZpZXI6IkNhbiBub3QgdXNlICdhd2FpdCcgYXMgaWRlbnRpZmllciBpbnNpZGUgYW4gYXN5bmMgZnVuY3Rpb24uIixBd2FpdEJpbmRpbmdJZGVudGlmaWVySW5TdGF0aWNCbG9jazoiQ2FuIG5vdCB1c2UgJ2F3YWl0JyBhcyBpZGVudGlmaWVyIGluc2lkZSBhIHN0YXRpYyBibG9jay4iLEF3YWl0RXhwcmVzc2lvbkZvcm1hbFBhcmFtZXRlcjoiJ2F3YWl0JyBpcyBub3QgYWxsb3dlZCBpbiBhc3luYyBmdW5jdGlvbiBwYXJhbWV0ZXJzLiIsQXdhaXROb3RJbkFzeW5jQ29udGV4dDoiJ2F3YWl0JyBpcyBvbmx5IGFsbG93ZWQgd2l0aGluIGFzeW5jIGZ1bmN0aW9ucyBhbmQgYXQgdGhlIHRvcCBsZXZlbHMgb2YgbW9kdWxlcy4iLEF3YWl0Tm90SW5Bc3luY0Z1bmN0aW9uOiInYXdhaXQnIGlzIG9ubHkgYWxsb3dlZCB3aXRoaW4gYXN5bmMgZnVuY3Rpb25zLiIsQmFkR2V0dGVyQXJpdHk6IkEgJ2dldCcgYWNjZXNvciBtdXN0IG5vdCBoYXZlIGFueSBmb3JtYWwgcGFyYW1ldGVycy4iLEJhZFNldHRlckFyaXR5OiJBICdzZXQnIGFjY2Vzb3IgbXVzdCBoYXZlIGV4YWN0bHkgb25lIGZvcm1hbCBwYXJhbWV0ZXIuIixCYWRTZXR0ZXJSZXN0UGFyYW1ldGVyOiJBICdzZXQnIGFjY2Vzb3IgZnVuY3Rpb24gYXJndW1lbnQgbXVzdCBub3QgYmUgYSByZXN0IHBhcmFtZXRlci4iLENvbnN0cnVjdG9yQ2xhc3NGaWVsZDoiQ2xhc3NlcyBtYXkgbm90IGhhdmUgYSBmaWVsZCBuYW1lZCAnY29uc3RydWN0b3InLiIsQ29uc3RydWN0b3JDbGFzc1ByaXZhdGVGaWVsZDoiQ2xhc3NlcyBtYXkgbm90IGhhdmUgYSBwcml2YXRlIGZpZWxkIG5hbWVkICcjY29uc3RydWN0b3InLiIsQ29uc3RydWN0b3JJc0FjY2Vzc29yOiJDbGFzcyBjb25zdHJ1Y3RvciBtYXkgbm90IGJlIGFuIGFjY2Vzc29yLiIsQ29uc3RydWN0b3JJc0FzeW5jOiJDb25zdHJ1Y3RvciBjYW4ndCBiZSBhbiBhc3luYyBmdW5jdGlvbi4iLENvbnN0cnVjdG9ySXNHZW5lcmF0b3I6IkNvbnN0cnVjdG9yIGNhbid0IGJlIGEgZ2VuZXJhdG9yLiIsRGVjbGFyYXRpb25NaXNzaW5nSW5pdGlhbGl6ZXI6IiclMCcgcmVxdWlyZSBhbiBpbml0aWFsaXphdGlvbiB2YWx1ZS4iLERlY29yYXRvckJlZm9yZUV4cG9ydDoiRGVjb3JhdG9ycyBtdXN0IGJlIHBsYWNlZCAqYmVmb3JlKiB0aGUgJ2V4cG9ydCcga2V5d29yZC4gWW91IGNhbiBzZXQgdGhlICdkZWNvcmF0b3JzQmVmb3JlRXhwb3J0JyBvcHRpb24gdG8gZmFsc2UgdG8gdXNlIHRoZSAnZXhwb3J0IEBkZWNvcmF0b3IgY2xhc3Mge30nIHN5bnRheC4iLERlY29yYXRvckNvbnN0cnVjdG9yOiJEZWNvcmF0b3JzIGNhbid0IGJlIHVzZWQgd2l0aCBhIGNvbnN0cnVjdG9yLiBEaWQgeW91IG1lYW4gJ0BkZWMgY2xhc3MgeyAuLi4gfSc/IixEZWNvcmF0b3JFeHBvcnRDbGFzczoiVXNpbmcgdGhlIGV4cG9ydCBrZXl3b3JkIGJldHdlZW4gYSBkZWNvcmF0b3IgYW5kIGEgY2xhc3MgaXMgbm90IGFsbG93ZWQuIFBsZWFzZSB1c2UgYGV4cG9ydCBAZGVjIGNsYXNzYCBpbnN0ZWFkLiIsRGVjb3JhdG9yU2VtaWNvbG9uOiJEZWNvcmF0b3JzIG11c3Qgbm90IGJlIGZvbGxvd2VkIGJ5IGEgc2VtaWNvbG9uLiIsRGVjb3JhdG9yU3RhdGljQmxvY2s6IkRlY29yYXRvcnMgY2FuJ3QgYmUgdXNlZCB3aXRoIGEgc3RhdGljIGJsb2NrLiIsRGVsZXRlUHJpdmF0ZUZpZWxkOiJEZWxldGluZyBhIHByaXZhdGUgZmllbGQgaXMgbm90IGFsbG93ZWQuIixEZXN0cnVjdHVyZU5hbWVkSW1wb3J0OiJFUzIwMTUgbmFtZWQgaW1wb3J0cyBkbyBub3QgZGVzdHJ1Y3R1cmUuIFVzZSBhbm90aGVyIHN0YXRlbWVudCBmb3IgZGVzdHJ1Y3R1cmluZyBhZnRlciB0aGUgaW1wb3J0LiIsRHVwbGljYXRlQ29uc3RydWN0b3I6IkR1cGxpY2F0ZSBjb25zdHJ1Y3RvciBpbiB0aGUgc2FtZSBjbGFzcy4iLER1cGxpY2F0ZURlZmF1bHRFeHBvcnQ6Ik9ubHkgb25lIGRlZmF1bHQgZXhwb3J0IGFsbG93ZWQgcGVyIG1vZHVsZS4iLER1cGxpY2F0ZUV4cG9ydDoiYCUwYCBoYXMgYWxyZWFkeSBiZWVuIGV4cG9ydGVkLiBFeHBvcnRlZCBpZGVudGlmaWVycyBtdXN0IGJlIHVuaXF1ZS4iLER1cGxpY2F0ZVByb3RvOiJSZWRlZmluaXRpb24gb2YgX19wcm90b19fIHByb3BlcnR5LiIsRHVwbGljYXRlUmVnRXhwRmxhZ3M6IkR1cGxpY2F0ZSByZWd1bGFyIGV4cHJlc3Npb24gZmxhZy4iLEVsZW1lbnRBZnRlclJlc3Q6IlJlc3QgZWxlbWVudCBtdXN0IGJlIGxhc3QgZWxlbWVudC4iLEVzY2FwZWRDaGFyTm90QW5JZGVudGlmaWVyOiJJbnZhbGlkIFVuaWNvZGUgZXNjYXBlLiIsRXhwb3J0QmluZGluZ0lzU3RyaW5nOiJBIHN0cmluZyBsaXRlcmFsIGNhbm5vdCBiZSB1c2VkIGFzIGFuIGV4cG9ydGVkIGJpbmRpbmcgd2l0aG91dCBgZnJvbWAuXG4tIERpZCB5b3UgbWVhbiBgZXhwb3J0IHsgJyUwJyBhcyAnJTEnIH0gZnJvbSAnc29tZS1tb2R1bGUnYD8iLEV4cG9ydERlZmF1bHRGcm9tQXNJZGVudGlmaWVyOiInZnJvbScgaXMgbm90IGFsbG93ZWQgYXMgYW4gaWRlbnRpZmllciBhZnRlciAnZXhwb3J0IGRlZmF1bHQnLiIsRm9ySW5PZkxvb3BJbml0aWFsaXplcjoiJyUwJyBsb29wIHZhcmlhYmxlIGRlY2xhcmF0aW9uIG1heSBub3QgaGF2ZSBhbiBpbml0aWFsaXplci4iLEZvck9mQXN5bmM6IlRoZSBsZWZ0LWhhbmQgc2lkZSBvZiBhIGZvci1vZiBsb29wIG1heSBub3QgYmUgJ2FzeW5jJy4iLEZvck9mTGV0OiJUaGUgbGVmdC1oYW5kIHNpZGUgb2YgYSBmb3Itb2YgbG9vcCBtYXkgbm90IHN0YXJ0IHdpdGggJ2xldCcuIixHZW5lcmF0b3JJblNpbmdsZVN0YXRlbWVudENvbnRleHQ6IkdlbmVyYXRvcnMgY2FuIG9ubHkgYmUgZGVjbGFyZWQgYXQgdGhlIHRvcCBsZXZlbCBvciBpbnNpZGUgYSBibG9jay4iLElsbGVnYWxCcmVha0NvbnRpbnVlOiJVbnN5bnRhY3RpYyAlMC4iLElsbGVnYWxMYW5ndWFnZU1vZGVEaXJlY3RpdmU6IklsbGVnYWwgJ3VzZSBzdHJpY3QnIGRpcmVjdGl2ZSBpbiBmdW5jdGlvbiB3aXRoIG5vbi1zaW1wbGUgcGFyYW1ldGVyIGxpc3QuIixJbGxlZ2FsUmV0dXJuOiIncmV0dXJuJyBvdXRzaWRlIG9mIGZ1bmN0aW9uLiIsSW1wb3J0QmluZGluZ0lzU3RyaW5nOidBIHN0cmluZyBsaXRlcmFsIGNhbm5vdCBiZSB1c2VkIGFzIGFuIGltcG9ydGVkIGJpbmRpbmcuXG4tIERpZCB5b3UgbWVhbiBgaW1wb3J0IHsgIiUwIiBhcyBmb28gfWA/JyxJbXBvcnRDYWxsQXJndW1lbnRUcmFpbGluZ0NvbW1hOiJUcmFpbGluZyBjb21tYSBpcyBkaXNhbGxvd2VkIGluc2lkZSBpbXBvcnQoLi4uKSBhcmd1bWVudHMuIixJbXBvcnRDYWxsQXJpdHk6ImBpbXBvcnQoKWAgcmVxdWlyZXMgZXhhY3RseSAlMC4iLEltcG9ydENhbGxOb3ROZXdFeHByZXNzaW9uOiJDYW5ub3QgdXNlIG5ldyB3aXRoIGltcG9ydCguLi4pLiIsSW1wb3J0Q2FsbFNwcmVhZEFyZ3VtZW50OiJgLi4uYCBpcyBub3QgYWxsb3dlZCBpbiBgaW1wb3J0KClgLiIsSW52YWxpZEJpZ0ludExpdGVyYWw6IkludmFsaWQgQmlnSW50TGl0ZXJhbC4iLEludmFsaWRDb2RlUG9pbnQ6IkNvZGUgcG9pbnQgb3V0IG9mIGJvdW5kcy4iLEludmFsaWREZWNpbWFsOiJJbnZhbGlkIGRlY2ltYWwuIixJbnZhbGlkRGlnaXQ6IkV4cGVjdGVkIG51bWJlciBpbiByYWRpeCAlMC4iLEludmFsaWRFc2NhcGVTZXF1ZW5jZToiQmFkIGNoYXJhY3RlciBlc2NhcGUgc2VxdWVuY2UuIixJbnZhbGlkRXNjYXBlU2VxdWVuY2VUZW1wbGF0ZToiSW52YWxpZCBlc2NhcGUgc2VxdWVuY2UgaW4gdGVtcGxhdGUuIixJbnZhbGlkRXNjYXBlZFJlc2VydmVkV29yZDoiRXNjYXBlIHNlcXVlbmNlIGluIGtleXdvcmQgJTAuIixJbnZhbGlkSWRlbnRpZmllcjoiSW52YWxpZCBpZGVudGlmaWVyICUwLiIsSW52YWxpZExoczoiSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiAlMC4iLEludmFsaWRMaHNCaW5kaW5nOiJCaW5kaW5nIGludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gJTAuIixJbnZhbGlkTnVtYmVyOiJJbnZhbGlkIG51bWJlci4iLEludmFsaWRPck1pc3NpbmdFeHBvbmVudDoiRmxvYXRpbmctcG9pbnQgbnVtYmVycyByZXF1aXJlIGEgdmFsaWQgZXhwb25lbnQgYWZ0ZXIgdGhlICdlJy4iLEludmFsaWRPclVuZXhwZWN0ZWRUb2tlbjoiVW5leHBlY3RlZCBjaGFyYWN0ZXIgJyUwJy4iLEludmFsaWRQYXJlbnRoZXNpemVkQXNzaWdubWVudDoiSW52YWxpZCBwYXJlbnRoZXNpemVkIGFzc2lnbm1lbnQgcGF0dGVybi4iLEludmFsaWRQcml2YXRlRmllbGRSZXNvbHV0aW9uOiJQcml2YXRlIG5hbWUgIyUwIGlzIG5vdCBkZWZpbmVkLiIsSW52YWxpZFByb3BlcnR5QmluZGluZ1BhdHRlcm46IkJpbmRpbmcgbWVtYmVyIGV4cHJlc3Npb24uIixJbnZhbGlkUmVjb3JkUHJvcGVydHk6Ik9ubHkgcHJvcGVydGllcyBhbmQgc3ByZWFkIGVsZW1lbnRzIGFyZSBhbGxvd2VkIGluIHJlY29yZCBkZWZpbml0aW9ucy4iLEludmFsaWRSZXN0QXNzaWdubWVudFBhdHRlcm46IkludmFsaWQgcmVzdCBvcGVyYXRvcidzIGFyZ3VtZW50LiIsTGFiZWxSZWRlY2xhcmF0aW9uOiJMYWJlbCAnJTAnIGlzIGFscmVhZHkgZGVjbGFyZWQuIixMZXRJbkxleGljYWxCaW5kaW5nOiInbGV0JyBpcyBub3QgYWxsb3dlZCB0byBiZSB1c2VkIGFzIGEgbmFtZSBpbiAnbGV0JyBvciAnY29uc3QnIGRlY2xhcmF0aW9ucy4iLExpbmVUZXJtaW5hdG9yQmVmb3JlQXJyb3c6Ik5vIGxpbmUgYnJlYWsgaXMgYWxsb3dlZCBiZWZvcmUgJz0+Jy4iLE1hbGZvcm1lZFJlZ0V4cEZsYWdzOiJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFnLiIsTWlzc2luZ0NsYXNzTmFtZToiQSBjbGFzcyBuYW1lIGlzIHJlcXVpcmVkLiIsTWlzc2luZ0VxSW5Bc3NpZ25tZW50OiJPbmx5ICc9JyBvcGVyYXRvciBjYW4gYmUgdXNlZCBmb3Igc3BlY2lmeWluZyBkZWZhdWx0IHZhbHVlLiIsTWlzc2luZ1NlbWljb2xvbjoiTWlzc2luZyBzZW1pY29sb24uIixNaXNzaW5nVW5pY29kZUVzY2FwZToiRXhwZWN0aW5nIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlIFxcdVhYWFguIixNaXhpbmdDb2FsZXNjZVdpdGhMb2dpY2FsOiJOdWxsaXNoIGNvYWxlc2Npbmcgb3BlcmF0b3IoPz8pIHJlcXVpcmVzIHBhcmVucyB3aGVuIG1peGluZyB3aXRoIGxvZ2ljYWwgb3BlcmF0b3JzLiIsTW9kdWxlQXR0cmlidXRlRGlmZmVyZW50RnJvbVR5cGU6IlRoZSBvbmx5IGFjY2VwdGVkIG1vZHVsZSBhdHRyaWJ1dGUgaXMgYHR5cGVgLiIsTW9kdWxlQXR0cmlidXRlSW52YWxpZFZhbHVlOiJPbmx5IHN0cmluZyBsaXRlcmFscyBhcmUgYWxsb3dlZCBhcyBtb2R1bGUgYXR0cmlidXRlIHZhbHVlcy4iLE1vZHVsZUF0dHJpYnV0ZXNXaXRoRHVwbGljYXRlS2V5czonRHVwbGljYXRlIGtleSAiJTAiIGlzIG5vdCBhbGxvd2VkIGluIG1vZHVsZSBhdHRyaWJ1dGVzLicsTW9kdWxlRXhwb3J0TmFtZUhhc0xvbmVTdXJyb2dhdGU6IkFuIGV4cG9ydCBuYW1lIGNhbm5vdCBpbmNsdWRlIGEgbG9uZSBzdXJyb2dhdGUsIGZvdW5kICdcXHUlMCcuIixNb2R1bGVFeHBvcnRVbmRlZmluZWQ6IkV4cG9ydCAnJTAnIGlzIG5vdCBkZWZpbmVkLiIsTXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoOiJNdWx0aXBsZSBkZWZhdWx0IGNsYXVzZXMuIixOZXdsaW5lQWZ0ZXJUaHJvdzoiSWxsZWdhbCBuZXdsaW5lIGFmdGVyIHRocm93LiIsTm9DYXRjaE9yRmluYWxseToiTWlzc2luZyBjYXRjaCBvciBmaW5hbGx5IGNsYXVzZS4iLE51bWJlcklkZW50aWZpZXI6IklkZW50aWZpZXIgZGlyZWN0bHkgYWZ0ZXIgbnVtYmVyLiIsTnVtZXJpY1NlcGFyYXRvckluRXNjYXBlU2VxdWVuY2U6Ik51bWVyaWMgc2VwYXJhdG9ycyBhcmUgbm90IGFsbG93ZWQgaW5zaWRlIHVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlcyBvciBoZXggZXNjYXBlIHNlcXVlbmNlcy4iLE9ic29sZXRlQXdhaXRTdGFyOiInYXdhaXQqJyBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGFzeW5jIGZ1bmN0aW9ucyBwcm9wb3NhbC4gVXNlIFByb21pc2UuYWxsKCkgaW5zdGVhZC4iLE9wdGlvbmFsQ2hhaW5pbmdOb05ldzoiQ29uc3RydWN0b3JzIGluL2FmdGVyIGFuIE9wdGlvbmFsIENoYWluIGFyZSBub3QgYWxsb3dlZC4iLE9wdGlvbmFsQ2hhaW5pbmdOb1RlbXBsYXRlOiJUYWdnZWQgVGVtcGxhdGUgTGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIG9wdGlvbmFsQ2hhaW4uIixPdmVycmlkZU9uQ29uc3RydWN0b3I6IidvdmVycmlkZScgbW9kaWZpZXIgY2Fubm90IGFwcGVhciBvbiBhIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uLiIsUGFyYW1EdXBlOiJBcmd1bWVudCBuYW1lIGNsYXNoLiIsUGF0dGVybkhhc0FjY2Vzc29yOiJPYmplY3QgcGF0dGVybiBjYW4ndCBjb250YWluIGdldHRlciBvciBzZXR0ZXIuIixQYXR0ZXJuSGFzTWV0aG9kOiJPYmplY3QgcGF0dGVybiBjYW4ndCBjb250YWluIG1ldGhvZHMuIixQaXBlQm9keUlzVGlnaHRlcjoiVW5leHBlY3RlZCAlMCBhZnRlciBwaXBlbGluZSBib2R5OyBhbnkgJTAgZXhwcmVzc2lvbiBhY3RpbmcgYXMgSGFjay1zdHlsZSBwaXBlIGJvZHkgbXVzdCBiZSBwYXJlbnRoZXNpemVkIGR1ZSB0byBpdHMgbG9vc2Ugb3BlcmF0b3IgcHJlY2VkZW5jZS4iLFBpcGVUb3BpY1JlcXVpcmVzSGFja1BpcGVzOidUb3BpYyByZWZlcmVuY2UgaXMgdXNlZCwgYnV0IHRoZSBwaXBlbGluZU9wZXJhdG9yIHBsdWdpbiB3YXMgbm90IHBhc3NlZCBhICJwcm9wb3NhbCI6ICJoYWNrIiBvciAic21hcnQiIG9wdGlvbi4nLFBpcGVUb3BpY1VuYm91bmQ6IlRvcGljIHJlZmVyZW5jZSBpcyB1bmJvdW5kOyBpdCBtdXN0IGJlIGluc2lkZSBhIHBpcGUgYm9keS4iLFBpcGVUb3BpY1VuY29uZmlndXJlZFRva2VuOidJbnZhbGlkIHRvcGljIHRva2VuICUwLiBJbiBvcmRlciB0byB1c2UgJTAgYXMgYSB0b3BpYyByZWZlcmVuY2UsIHRoZSBwaXBlbGluZU9wZXJhdG9yIHBsdWdpbiBtdXN0IGJlIGNvbmZpZ3VyZWQgd2l0aCB7ICJwcm9wb3NhbCI6ICJoYWNrIiwgInRvcGljVG9rZW4iOiAiJTAiIH0uJyxQaXBlVG9waWNVbnVzZWQ6IkhhY2stc3R5bGUgcGlwZSBib2R5IGRvZXMgbm90IGNvbnRhaW4gYSB0b3BpYyByZWZlcmVuY2U7IEhhY2stc3R5bGUgcGlwZXMgbXVzdCB1c2UgdG9waWMgYXQgbGVhc3Qgb25jZS4iLFBpcGVVbnBhcmVudGhlc2l6ZWRCb2R5OiJIYWNrLXN0eWxlIHBpcGUgYm9keSBjYW5ub3QgYmUgYW4gdW5wYXJlbnRoZXNpemVkICUwIGV4cHJlc3Npb247IHBsZWFzZSB3cmFwIGl0IGluIHBhcmVudGhlc2VzLiIsUGlwZWxpbmVCb2R5Tm9BcnJvdzonVW5leHBlY3RlZCBhcnJvdyAiPT4iIGFmdGVyIHBpcGVsaW5lIGJvZHk7IGFycm93IGZ1bmN0aW9uIGluIHBpcGVsaW5lIGJvZHkgbXVzdCBiZSBwYXJlbnRoZXNpemVkLicsUGlwZWxpbmVCb2R5U2VxdWVuY2VFeHByZXNzaW9uOiJQaXBlbGluZSBib2R5IG1heSBub3QgYmUgYSBjb21tYS1zZXBhcmF0ZWQgc2VxdWVuY2UgZXhwcmVzc2lvbi4iLFBpcGVsaW5lSGVhZFNlcXVlbmNlRXhwcmVzc2lvbjoiUGlwZWxpbmUgaGVhZCBzaG91bGQgbm90IGJlIGEgY29tbWEtc2VwYXJhdGVkIHNlcXVlbmNlIGV4cHJlc3Npb24uIixQaXBlbGluZVRvcGljVW51c2VkOiJQaXBlbGluZSBpcyBpbiB0b3BpYyBzdHlsZSBidXQgZG9lcyBub3QgdXNlIHRvcGljIHJlZmVyZW5jZS4iLFByaW1hcnlUb3BpY05vdEFsbG93ZWQ6IlRvcGljIHJlZmVyZW5jZSB3YXMgdXNlZCBpbiBhIGxleGljYWwgY29udGV4dCB3aXRob3V0IHRvcGljIGJpbmRpbmcuIixQcmltYXJ5VG9waWNSZXF1aXJlc1NtYXJ0UGlwZWxpbmU6J1RvcGljIHJlZmVyZW5jZSBpcyB1c2VkLCBidXQgdGhlIHBpcGVsaW5lT3BlcmF0b3IgcGx1Z2luIHdhcyBub3QgcGFzc2VkIGEgInByb3Bvc2FsIjogImhhY2siIG9yICJzbWFydCIgb3B0aW9uLicsUHJpdmF0ZUluRXhwZWN0ZWRJbjoiUHJpdmF0ZSBuYW1lcyBhcmUgb25seSBhbGxvd2VkIGluIHByb3BlcnR5IGFjY2Vzc2VzIChgb2JqLiMlMGApIG9yIGluIGBpbmAgZXhwcmVzc2lvbnMgKGAjJTAgaW4gb2JqYCkuIixQcml2YXRlTmFtZVJlZGVjbGFyYXRpb246IkR1cGxpY2F0ZSBwcml2YXRlIG5hbWUgIyUwLiIsUmVjb3JkRXhwcmVzc2lvbkJhckluY29ycmVjdEVuZFN5bnRheFR5cGU6IlJlY29yZCBleHByZXNzaW9ucyBlbmRpbmcgd2l0aCAnfH0nIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiB0aGUgJ3N5bnRheFR5cGUnIG9wdGlvbiBvZiB0aGUgJ3JlY29yZEFuZFR1cGxlJyBwbHVnaW4gaXMgc2V0IHRvICdiYXInLiIsUmVjb3JkRXhwcmVzc2lvbkJhckluY29ycmVjdFN0YXJ0U3ludGF4VHlwZToiUmVjb3JkIGV4cHJlc3Npb25zIHN0YXJ0aW5nIHdpdGggJ3t8JyBhcmUgb25seSBhbGxvd2VkIHdoZW4gdGhlICdzeW50YXhUeXBlJyBvcHRpb24gb2YgdGhlICdyZWNvcmRBbmRUdXBsZScgcGx1Z2luIGlzIHNldCB0byAnYmFyJy4iLFJlY29yZEV4cHJlc3Npb25IYXNoSW5jb3JyZWN0U3RhcnRTeW50YXhUeXBlOiJSZWNvcmQgZXhwcmVzc2lvbnMgc3RhcnRpbmcgd2l0aCAnI3snIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiB0aGUgJ3N5bnRheFR5cGUnIG9wdGlvbiBvZiB0aGUgJ3JlY29yZEFuZFR1cGxlJyBwbHVnaW4gaXMgc2V0IHRvICdoYXNoJy4iLFJlY29yZE5vUHJvdG86IidfX3Byb3RvX18nIGlzIG5vdCBhbGxvd2VkIGluIFJlY29yZCBleHByZXNzaW9ucy4iLFJlc3RUcmFpbGluZ0NvbW1hOiJVbmV4cGVjdGVkIHRyYWlsaW5nIGNvbW1hIGFmdGVyIHJlc3QgZWxlbWVudC4iLFNsb3BweUZ1bmN0aW9uOiJJbiBub24tc3RyaWN0IG1vZGUgY29kZSwgZnVuY3Rpb25zIGNhbiBvbmx5IGJlIGRlY2xhcmVkIGF0IHRvcCBsZXZlbCwgaW5zaWRlIGEgYmxvY2ssIG9yIGFzIHRoZSBib2R5IG9mIGFuIGlmIHN0YXRlbWVudC4iLFN0YXRpY1Byb3RvdHlwZToiQ2xhc3NlcyBtYXkgbm90IGhhdmUgc3RhdGljIHByb3BlcnR5IG5hbWVkIHByb3RvdHlwZS4iLFN0cmljdERlbGV0ZToiRGVsZXRpbmcgbG9jYWwgdmFyaWFibGUgaW4gc3RyaWN0IG1vZGUuIixTdHJpY3RFdmFsQXJndW1lbnRzOiJBc3NpZ25pbmcgdG8gJyUwJyBpbiBzdHJpY3QgbW9kZS4iLFN0cmljdEV2YWxBcmd1bWVudHNCaW5kaW5nOiJCaW5kaW5nICclMCcgaW4gc3RyaWN0IG1vZGUuIixTdHJpY3RGdW5jdGlvbjoiSW4gc3RyaWN0IG1vZGUgY29kZSwgZnVuY3Rpb25zIGNhbiBvbmx5IGJlIGRlY2xhcmVkIGF0IHRvcCBsZXZlbCBvciBpbnNpZGUgYSBibG9jay4iLFN0cmljdE51bWVyaWNFc2NhcGU6IlRoZSBvbmx5IHZhbGlkIG51bWVyaWMgZXNjYXBlIGluIHN0cmljdCBtb2RlIGlzICdcXDAnLiIsU3RyaWN0T2N0YWxMaXRlcmFsOiJMZWdhY3kgb2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlLiIsU3RyaWN0V2l0aDoiJ3dpdGgnIGluIHN0cmljdCBtb2RlLiIsU3VwZXJOb3RBbGxvd2VkOiJgc3VwZXIoKWAgaXMgb25seSB2YWxpZCBpbnNpZGUgYSBjbGFzcyBjb25zdHJ1Y3RvciBvZiBhIHN1YmNsYXNzLiBNYXliZSBhIHR5cG8gaW4gdGhlIG1ldGhvZCBuYW1lICgnY29uc3RydWN0b3InKSBvciBub3QgZXh0ZW5kaW5nIGFub3RoZXIgY2xhc3M/IixTdXBlclByaXZhdGVGaWVsZDoiUHJpdmF0ZSBmaWVsZHMgY2FuJ3QgYmUgYWNjZXNzZWQgb24gc3VwZXIuIixUcmFpbGluZ0RlY29yYXRvcjoiRGVjb3JhdG9ycyBtdXN0IGJlIGF0dGFjaGVkIHRvIGEgY2xhc3MgZWxlbWVudC4iLFR1cGxlRXhwcmVzc2lvbkJhckluY29ycmVjdEVuZFN5bnRheFR5cGU6IlR1cGxlIGV4cHJlc3Npb25zIGVuZGluZyB3aXRoICd8XScgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIHRoZSAnc3ludGF4VHlwZScgb3B0aW9uIG9mIHRoZSAncmVjb3JkQW5kVHVwbGUnIHBsdWdpbiBpcyBzZXQgdG8gJ2JhcicuIixUdXBsZUV4cHJlc3Npb25CYXJJbmNvcnJlY3RTdGFydFN5bnRheFR5cGU6IlR1cGxlIGV4cHJlc3Npb25zIHN0YXJ0aW5nIHdpdGggJ1t8JyBhcmUgb25seSBhbGxvd2VkIHdoZW4gdGhlICdzeW50YXhUeXBlJyBvcHRpb24gb2YgdGhlICdyZWNvcmRBbmRUdXBsZScgcGx1Z2luIGlzIHNldCB0byAnYmFyJy4iLFR1cGxlRXhwcmVzc2lvbkhhc2hJbmNvcnJlY3RTdGFydFN5bnRheFR5cGU6IlR1cGxlIGV4cHJlc3Npb25zIHN0YXJ0aW5nIHdpdGggJyNbJyBhcmUgb25seSBhbGxvd2VkIHdoZW4gdGhlICdzeW50YXhUeXBlJyBvcHRpb24gb2YgdGhlICdyZWNvcmRBbmRUdXBsZScgcGx1Z2luIGlzIHNldCB0byAnaGFzaCcuIixVbmV4cGVjdGVkQXJndW1lbnRQbGFjZWhvbGRlcjoiVW5leHBlY3RlZCBhcmd1bWVudCBwbGFjZWhvbGRlci4iLFVuZXhwZWN0ZWRBd2FpdEFmdGVyUGlwZWxpbmVCb2R5OidVbmV4cGVjdGVkICJhd2FpdCIgYWZ0ZXIgcGlwZWxpbmUgYm9keTsgYXdhaXQgbXVzdCBoYXZlIHBhcmVudGhlc2VzIGluIG1pbmltYWwgcHJvcG9zYWwuJyxVbmV4cGVjdGVkRGlnaXRBZnRlckhhc2g6IlVuZXhwZWN0ZWQgZGlnaXQgYWZ0ZXIgaGFzaCB0b2tlbi4iLFVuZXhwZWN0ZWRJbXBvcnRFeHBvcnQ6IidpbXBvcnQnIGFuZCAnZXhwb3J0JyBtYXkgb25seSBhcHBlYXIgYXQgdGhlIHRvcCBsZXZlbC4iLFVuZXhwZWN0ZWRLZXl3b3JkOiJVbmV4cGVjdGVkIGtleXdvcmQgJyUwJy4iLFVuZXhwZWN0ZWRMZWFkaW5nRGVjb3JhdG9yOiJMZWFkaW5nIGRlY29yYXRvcnMgbXVzdCBiZSBhdHRhY2hlZCB0byBhIGNsYXNzIGRlY2xhcmF0aW9uLiIsVW5leHBlY3RlZExleGljYWxEZWNsYXJhdGlvbjoiTGV4aWNhbCBkZWNsYXJhdGlvbiBjYW5ub3QgYXBwZWFyIGluIGEgc2luZ2xlLXN0YXRlbWVudCBjb250ZXh0LiIsVW5leHBlY3RlZE5ld1RhcmdldDoiYG5ldy50YXJnZXRgIGNhbiBvbmx5IGJlIHVzZWQgaW4gZnVuY3Rpb25zIG9yIGNsYXNzIHByb3BlcnRpZXMuIixVbmV4cGVjdGVkTnVtZXJpY1NlcGFyYXRvcjoiQSBudW1lcmljIHNlcGFyYXRvciBpcyBvbmx5IGFsbG93ZWQgYmV0d2VlbiB0d28gZGlnaXRzLiIsVW5leHBlY3RlZFByaXZhdGVGaWVsZDoiUHJpdmF0ZSBuYW1lcyBjYW4gb25seSBiZSB1c2VkIGFzIHRoZSBuYW1lIG9mIGEgY2xhc3MgZWxlbWVudCAoaS5lLiBjbGFzcyBDIHsgI3AgPSA0MjsgI20oKSB7fSB9IClcbiBvciBhIHByb3BlcnR5IG9mIG1lbWJlciBleHByZXNzaW9uIChpLmUuIHRoaXMuI3ApLiIsVW5leHBlY3RlZFJlc2VydmVkV29yZDoiVW5leHBlY3RlZCByZXNlcnZlZCB3b3JkICclMCcuIixVbmV4cGVjdGVkU3VwZXI6IidzdXBlcicgaXMgb25seSBhbGxvd2VkIGluIG9iamVjdCBtZXRob2RzIGFuZCBjbGFzc2VzLiIsVW5leHBlY3RlZFRva2VuOiJVbmV4cGVjdGVkIHRva2VuICclMCcuIixVbmV4cGVjdGVkVG9rZW5VbmFyeUV4cG9uZW50aWF0aW9uOiJJbGxlZ2FsIGV4cHJlc3Npb24uIFdyYXAgbGVmdCBoYW5kIHNpZGUgb3IgZW50aXJlIGV4cG9uZW50aWF0aW9uIGluIHBhcmVudGhlc2VzLiIsVW5zdXBwb3J0ZWRCaW5kOiJCaW5kaW5nIHNob3VsZCBiZSBwZXJmb3JtZWQgb24gb2JqZWN0IHByb3BlcnR5LiIsVW5zdXBwb3J0ZWREZWNvcmF0b3JFeHBvcnQ6IkEgZGVjb3JhdGVkIGV4cG9ydCBtdXN0IGV4cG9ydCBhIGNsYXNzIGRlY2xhcmF0aW9uLiIsVW5zdXBwb3J0ZWREZWZhdWx0RXhwb3J0OiJPbmx5IGV4cHJlc3Npb25zLCBmdW5jdGlvbnMgb3IgY2xhc3NlcyBhcmUgYWxsb3dlZCBhcyB0aGUgYGRlZmF1bHRgIGV4cG9ydC4iLFVuc3VwcG9ydGVkSW1wb3J0OiJgaW1wb3J0YCBjYW4gb25seSBiZSB1c2VkIGluIGBpbXBvcnQoKWAgb3IgYGltcG9ydC5tZXRhYC4iLFVuc3VwcG9ydGVkTWV0YVByb3BlcnR5OiJUaGUgb25seSB2YWxpZCBtZXRhIHByb3BlcnR5IGZvciAlMCBpcyAlMC4lMS4iLFVuc3VwcG9ydGVkUGFyYW1ldGVyRGVjb3JhdG9yOiJEZWNvcmF0b3JzIGNhbm5vdCBiZSB1c2VkIHRvIGRlY29yYXRlIHBhcmFtZXRlcnMuIixVbnN1cHBvcnRlZFByb3BlcnR5RGVjb3JhdG9yOiJEZWNvcmF0b3JzIGNhbm5vdCBiZSB1c2VkIHRvIGRlY29yYXRlIG9iamVjdCBsaXRlcmFsIHByb3BlcnRpZXMuIixVbnN1cHBvcnRlZFN1cGVyOiInc3VwZXInIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBmdW5jdGlvbiBjYWxscyAoaS5lLiBzdXBlcigpKSBvciBpbiBwcm9wZXJ0eSBhY2Nlc3NlcyAoaS5lLiBzdXBlci5wcm9wIG9yIHN1cGVyW3Byb3BdKS4iLFVudGVybWluYXRlZENvbW1lbnQ6IlVudGVybWluYXRlZCBjb21tZW50LiIsVW50ZXJtaW5hdGVkUmVnRXhwOiJVbnRlcm1pbmF0ZWQgcmVndWxhciBleHByZXNzaW9uLiIsVW50ZXJtaW5hdGVkU3RyaW5nOiJVbnRlcm1pbmF0ZWQgc3RyaW5nIGNvbnN0YW50LiIsVW50ZXJtaW5hdGVkVGVtcGxhdGU6IlVudGVybWluYXRlZCB0ZW1wbGF0ZS4iLFZhclJlZGVjbGFyYXRpb246IklkZW50aWZpZXIgJyUwJyBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkLiIsWWllbGRCaW5kaW5nSWRlbnRpZmllcjoiQ2FuIG5vdCB1c2UgJ3lpZWxkJyBhcyBpZGVudGlmaWVyIGluc2lkZSBhIGdlbmVyYXRvci4iLFlpZWxkSW5QYXJhbWV0ZXI6IllpZWxkIGV4cHJlc3Npb24gaXMgbm90IGFsbG93ZWQgaW4gZm9ybWFsIHBhcmFtZXRlcnMuIixaZXJvRGlnaXROdW1lcmljU2VwYXJhdG9yOiJOdW1lcmljIHNlcGFyYXRvciBjYW4gbm90IGJlIHVzZWQgYWZ0ZXIgbGVhZGluZyAwLiJ9LHVsLlN5bnRheEVycm9yKTtjb25zdCBobD1mbCh7SW1wb3J0TWV0YU91dHNpZGVNb2R1bGU6YGltcG9ydC5tZXRhIG1heSBhcHBlYXIgb25seSB3aXRoICdzb3VyY2VUeXBlOiAibW9kdWxlIidgLEltcG9ydE91dHNpZGVNb2R1bGU6YCdpbXBvcnQnIGFuZCAnZXhwb3J0JyBtYXkgYXBwZWFyIG9ubHkgd2l0aCAnc291cmNlVHlwZTogIm1vZHVsZSInYH0sdWwuU291cmNlVHlwZU1vZHVsZUVycm9yKTtmdW5jdGlvbiBwbChlLHQpe3tpZih0PT09ImZsb3ciJiZlPT09IlBhdHRlcm5Jc09wdGlvbmFsIil7cmV0dXJuIk9wdGlvbmFsQmluZGluZ1BhdHRlcm4ifX1yZXR1cm4gZX1mdW5jdGlvbiBmbChlLHQscil7Y29uc3Qgcz17fTtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChpPT57c1tpXT1PYmplY3QuZnJlZXplKHtjb2RlOnQscmVhc29uQ29kZTpwbChpLHIpLHRlbXBsYXRlOmVbaV19KX0pKTtyZXR1cm4gT2JqZWN0LmZyZWV6ZShzKX1jbGFzcyBkbCBleHRlbmRzIGxse2dldExvY2F0aW9uRm9yUG9zaXRpb24oZSl7bGV0IHQ7aWYoZT09PXRoaXMuc3RhdGUuc3RhcnQpdD10aGlzLnN0YXRlLnN0YXJ0TG9jO2Vsc2UgaWYoZT09PXRoaXMuc3RhdGUubGFzdFRva1N0YXJ0KXQ9dGhpcy5zdGF0ZS5sYXN0VG9rU3RhcnRMb2M7ZWxzZSBpZihlPT09dGhpcy5zdGF0ZS5lbmQpdD10aGlzLnN0YXRlLmVuZExvYztlbHNlIGlmKGU9PT10aGlzLnN0YXRlLmxhc3RUb2tFbmQpdD10aGlzLnN0YXRlLmxhc3RUb2tFbmRMb2M7ZWxzZSB0PXJsKHRoaXMuaW5wdXQsZSk7cmV0dXJuIHR9cmFpc2UoZSx0KXtsZXR7Y29kZTpyLHJlYXNvbkNvZGU6cyx0ZW1wbGF0ZTppfT10O2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KG4+Mj9uLTI6MCksbz0yO288bjtvKyspe2Fbby0yXT1hcmd1bWVudHNbb119cmV0dXJuIHRoaXMucmFpc2VXaXRoRGF0YShlLHtjb2RlOnIscmVhc29uQ29kZTpzfSxpLC4uLmEpfXJhaXNlT3ZlcndyaXRlKGUsdCl7bGV0e2NvZGU6cix0ZW1wbGF0ZTpzfT10O2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KGk+Mj9pLTI6MCksYT0yO2E8aTthKyspe25bYS0yXT1hcmd1bWVudHNbYV19Y29uc3Qgbz10aGlzLmdldExvY2F0aW9uRm9yUG9zaXRpb24oZSk7Y29uc3QgbD1zLnJlcGxhY2UoLyUoXGQrKS9nLCgoZSx0KT0+blt0XSkpK2AgKCR7by5saW5lfToke28uY29sdW1ufSlgO2lmKHRoaXMub3B0aW9ucy5lcnJvclJlY292ZXJ5KXtjb25zdCB0PXRoaXMuc3RhdGUuZXJyb3JzO2ZvcihsZXQgcj10Lmxlbmd0aC0xO3I+PTA7ci0tKXtjb25zdCBzPXRbcl07aWYocy5wb3M9PT1lKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihzLHttZXNzYWdlOmx9KX1lbHNlIGlmKHMucG9zPGUpe2JyZWFrfX19cmV0dXJuIHRoaXMuX3JhaXNlKHtjb2RlOnIsbG9jOm8scG9zOmV9LGwpfXJhaXNlV2l0aERhdGEoZSx0LHIpe2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KHM+Mz9zLTM6MCksbj0zO248cztuKyspe2lbbi0zXT1hcmd1bWVudHNbbl19Y29uc3QgYT10aGlzLmdldExvY2F0aW9uRm9yUG9zaXRpb24oZSk7Y29uc3Qgbz1yLnJlcGxhY2UoLyUoXGQrKS9nLCgoZSx0KT0+aVt0XSkpK2AgKCR7YS5saW5lfToke2EuY29sdW1ufSlgO3JldHVybiB0aGlzLl9yYWlzZShPYmplY3QuYXNzaWduKHtsb2M6YSxwb3M6ZX0sdCksbyl9X3JhaXNlKGUsdCl7Y29uc3Qgcj1uZXcgU3ludGF4RXJyb3IodCk7T2JqZWN0LmFzc2lnbihyLGUpO2lmKHRoaXMub3B0aW9ucy5lcnJvclJlY292ZXJ5KXtpZighdGhpcy5pc0xvb2thaGVhZCl0aGlzLnN0YXRlLmVycm9ycy5wdXNoKHIpO3JldHVybiByfWVsc2V7dGhyb3cgcn19fXZhciBtbD1lPT5jbGFzcyBleHRlbmRzIGV7cGFyc2VSZWdFeHBMaXRlcmFsKGUpe2xldHtwYXR0ZXJuOnQsZmxhZ3M6cn09ZTtsZXQgcz1udWxsO3RyeXtzPW5ldyBSZWdFeHAodCxyKX1jYXRjaChlKXt9Y29uc3QgaT10aGlzLmVzdHJlZVBhcnNlTGl0ZXJhbChzKTtpLnJlZ2V4PXtwYXR0ZXJuOnQsZmxhZ3M6cn07cmV0dXJuIGl9cGFyc2VCaWdJbnRMaXRlcmFsKGUpe2xldCB0O3RyeXt0PUJpZ0ludChlKX1jYXRjaChlKXt0PW51bGx9Y29uc3Qgcj10aGlzLmVzdHJlZVBhcnNlTGl0ZXJhbCh0KTtyLmJpZ2ludD1TdHJpbmcoci52YWx1ZXx8ZSk7cmV0dXJuIHJ9cGFyc2VEZWNpbWFsTGl0ZXJhbChlKXtjb25zdCB0PW51bGw7Y29uc3Qgcj10aGlzLmVzdHJlZVBhcnNlTGl0ZXJhbCh0KTtyLmRlY2ltYWw9U3RyaW5nKHIudmFsdWV8fGUpO3JldHVybiByfWVzdHJlZVBhcnNlTGl0ZXJhbChlKXtyZXR1cm4gdGhpcy5wYXJzZUxpdGVyYWwoZSwiTGl0ZXJhbCIpfXBhcnNlU3RyaW5nTGl0ZXJhbChlKXtyZXR1cm4gdGhpcy5lc3RyZWVQYXJzZUxpdGVyYWwoZSl9cGFyc2VOdW1lcmljTGl0ZXJhbChlKXtyZXR1cm4gdGhpcy5lc3RyZWVQYXJzZUxpdGVyYWwoZSl9cGFyc2VOdWxsTGl0ZXJhbCgpe3JldHVybiB0aGlzLmVzdHJlZVBhcnNlTGl0ZXJhbChudWxsKX1wYXJzZUJvb2xlYW5MaXRlcmFsKGUpe3JldHVybiB0aGlzLmVzdHJlZVBhcnNlTGl0ZXJhbChlKX1kaXJlY3RpdmVUb1N0bXQoZSl7Y29uc3QgdD1lLnZhbHVlO2NvbnN0IHI9dGhpcy5zdGFydE5vZGVBdChlLnN0YXJ0LGUubG9jLnN0YXJ0KTtjb25zdCBzPXRoaXMuc3RhcnROb2RlQXQodC5zdGFydCx0LmxvYy5zdGFydCk7cy52YWx1ZT10LmV4dHJhLmV4cHJlc3Npb25WYWx1ZTtzLnJhdz10LmV4dHJhLnJhdztyLmV4cHJlc3Npb249dGhpcy5maW5pc2hOb2RlQXQocywiTGl0ZXJhbCIsdC5lbmQsdC5sb2MuZW5kKTtyLmRpcmVjdGl2ZT10LmV4dHJhLnJhdy5zbGljZSgxLC0xKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlQXQociwiRXhwcmVzc2lvblN0YXRlbWVudCIsZS5lbmQsZS5sb2MuZW5kKX1pbml0RnVuY3Rpb24oZSx0KXtzdXBlci5pbml0RnVuY3Rpb24oZSx0KTtlLmV4cHJlc3Npb249ZmFsc2V9Y2hlY2tEZWNsYXJhdGlvbihlKXtpZihlIT1udWxsJiZ0aGlzLmlzT2JqZWN0UHJvcGVydHkoZSkpe3RoaXMuY2hlY2tEZWNsYXJhdGlvbihlLnZhbHVlKX1lbHNle3N1cGVyLmNoZWNrRGVjbGFyYXRpb24oZSl9fWdldE9iamVjdE9yQ2xhc3NNZXRob2RQYXJhbXMoZSl7cmV0dXJuIGUudmFsdWUucGFyYW1zfWlzVmFsaWREaXJlY3RpdmUoZSl7dmFyIHQ7cmV0dXJuIGUudHlwZT09PSJFeHByZXNzaW9uU3RhdGVtZW50IiYmZS5leHByZXNzaW9uLnR5cGU9PT0iTGl0ZXJhbCImJnR5cGVvZiBlLmV4cHJlc3Npb24udmFsdWU9PT0ic3RyaW5nIiYmISgodD1lLmV4cHJlc3Npb24uZXh0cmEpIT1udWxsJiZ0LnBhcmVudGhlc2l6ZWQpfXBhcnNlQmxvY2tCb2R5KGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KHQ+MT90LTE6MCkscz0xO3M8dDtzKyspe3Jbcy0xXT1hcmd1bWVudHNbc119c3VwZXIucGFyc2VCbG9ja0JvZHkoZSwuLi5yKTtjb25zdCBpPWUuZGlyZWN0aXZlcy5tYXAoKGU9PnRoaXMuZGlyZWN0aXZlVG9TdG10KGUpKSk7ZS5ib2R5PWkuY29uY2F0KGUuYm9keSk7ZGVsZXRlIGUuZGlyZWN0aXZlc31wdXNoQ2xhc3NNZXRob2QoZSx0LHIscyxpLG4pe3RoaXMucGFyc2VNZXRob2QodCxyLHMsaSxuLCJDbGFzc01ldGhvZCIsdHJ1ZSk7aWYodC50eXBlUGFyYW1ldGVycyl7dC52YWx1ZS50eXBlUGFyYW1ldGVycz10LnR5cGVQYXJhbWV0ZXJzO2RlbGV0ZSB0LnR5cGVQYXJhbWV0ZXJzfWUuYm9keS5wdXNoKHQpfXBhcnNlUHJpdmF0ZU5hbWUoKXtjb25zdCBlPXN1cGVyLnBhcnNlUHJpdmF0ZU5hbWUoKTt7aWYoIXRoaXMuZ2V0UGx1Z2luT3B0aW9uKCJlc3RyZWUiLCJjbGFzc0ZlYXR1cmVzIikpe3JldHVybiBlfX1yZXR1cm4gdGhpcy5jb252ZXJ0UHJpdmF0ZU5hbWVUb1ByaXZhdGVJZGVudGlmaWVyKGUpfWNvbnZlcnRQcml2YXRlTmFtZVRvUHJpdmF0ZUlkZW50aWZpZXIoZSl7Y29uc3QgdD1zdXBlci5nZXRQcml2YXRlTmFtZVNWKGUpO2U9ZTtkZWxldGUgZS5pZDtlLm5hbWU9dDtlLnR5cGU9IlByaXZhdGVJZGVudGlmaWVyIjtyZXR1cm4gZX1pc1ByaXZhdGVOYW1lKGUpe3tpZighdGhpcy5nZXRQbHVnaW5PcHRpb24oImVzdHJlZSIsImNsYXNzRmVhdHVyZXMiKSl7cmV0dXJuIHN1cGVyLmlzUHJpdmF0ZU5hbWUoZSl9fXJldHVybiBlLnR5cGU9PT0iUHJpdmF0ZUlkZW50aWZpZXIifWdldFByaXZhdGVOYW1lU1YoZSl7e2lmKCF0aGlzLmdldFBsdWdpbk9wdGlvbigiZXN0cmVlIiwiY2xhc3NGZWF0dXJlcyIpKXtyZXR1cm4gc3VwZXIuZ2V0UHJpdmF0ZU5hbWVTVihlKX19cmV0dXJuIGUubmFtZX1wYXJzZUxpdGVyYWwoZSx0KXtjb25zdCByPXN1cGVyLnBhcnNlTGl0ZXJhbChlLHQpO3IucmF3PXIuZXh0cmEucmF3O2RlbGV0ZSByLmV4dHJhO3JldHVybiByfXBhcnNlRnVuY3Rpb25Cb2R5KGUsdCxyKXtpZihyPT09dm9pZCAwKXtyPWZhbHNlfXN1cGVyLnBhcnNlRnVuY3Rpb25Cb2R5KGUsdCxyKTtlLmV4cHJlc3Npb249ZS5ib2R5LnR5cGUhPT0iQmxvY2tTdGF0ZW1lbnQifXBhcnNlTWV0aG9kKGUsdCxyLHMsaSxuLGEpe2lmKGE9PT12b2lkIDApe2E9ZmFsc2V9bGV0IG89dGhpcy5zdGFydE5vZGUoKTtvLmtpbmQ9ZS5raW5kO289c3VwZXIucGFyc2VNZXRob2Qobyx0LHIscyxpLG4sYSk7by50eXBlPSJGdW5jdGlvbkV4cHJlc3Npb24iO2RlbGV0ZSBvLmtpbmQ7ZS52YWx1ZT1vO2lmKG49PT0iQ2xhc3NQcml2YXRlTWV0aG9kIil7ZS5jb21wdXRlZD1mYWxzZX1uPSJNZXRob2REZWZpbml0aW9uIjtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsbil9cGFyc2VDbGFzc1Byb3BlcnR5KCl7Y29uc3QgZT1zdXBlci5wYXJzZUNsYXNzUHJvcGVydHkoLi4uYXJndW1lbnRzKTt7aWYoIXRoaXMuZ2V0UGx1Z2luT3B0aW9uKCJlc3RyZWUiLCJjbGFzc0ZlYXR1cmVzIikpe3JldHVybiBlfX1lLnR5cGU9IlByb3BlcnR5RGVmaW5pdGlvbiI7cmV0dXJuIGV9cGFyc2VDbGFzc1ByaXZhdGVQcm9wZXJ0eSgpe2NvbnN0IGU9c3VwZXIucGFyc2VDbGFzc1ByaXZhdGVQcm9wZXJ0eSguLi5hcmd1bWVudHMpO3tpZighdGhpcy5nZXRQbHVnaW5PcHRpb24oImVzdHJlZSIsImNsYXNzRmVhdHVyZXMiKSl7cmV0dXJuIGV9fWUudHlwZT0iUHJvcGVydHlEZWZpbml0aW9uIjtlLmNvbXB1dGVkPWZhbHNlO3JldHVybiBlfXBhcnNlT2JqZWN0TWV0aG9kKGUsdCxyLHMsaSl7Y29uc3Qgbj1zdXBlci5wYXJzZU9iamVjdE1ldGhvZChlLHQscixzLGkpO2lmKG4pe24udHlwZT0iUHJvcGVydHkiO2lmKG4ua2luZD09PSJtZXRob2QiKW4ua2luZD0iaW5pdCI7bi5zaG9ydGhhbmQ9ZmFsc2V9cmV0dXJuIG59cGFyc2VPYmplY3RQcm9wZXJ0eShlLHQscixzLGkpe2NvbnN0IG49c3VwZXIucGFyc2VPYmplY3RQcm9wZXJ0eShlLHQscixzLGkpO2lmKG4pe24ua2luZD0iaW5pdCI7bi50eXBlPSJQcm9wZXJ0eSJ9cmV0dXJuIG59aXNBc3NpZ25hYmxlKGUsdCl7aWYoZSE9bnVsbCYmdGhpcy5pc09iamVjdFByb3BlcnR5KGUpKXtyZXR1cm4gdGhpcy5pc0Fzc2lnbmFibGUoZS52YWx1ZSx0KX1yZXR1cm4gc3VwZXIuaXNBc3NpZ25hYmxlKGUsdCl9dG9Bc3NpZ25hYmxlKGUsdCl7aWYodD09PXZvaWQgMCl7dD1mYWxzZX1pZihlIT1udWxsJiZ0aGlzLmlzT2JqZWN0UHJvcGVydHkoZSkpe3RoaXMudG9Bc3NpZ25hYmxlKGUudmFsdWUsdCk7cmV0dXJuIGV9cmV0dXJuIHN1cGVyLnRvQXNzaWduYWJsZShlLHQpfXRvQXNzaWduYWJsZU9iamVjdEV4cHJlc3Npb25Qcm9wKGUpe2lmKGUua2luZD09PSJnZXQifHxlLmtpbmQ9PT0ic2V0Iil7dGhpcy5yYWlzZShlLmtleS5zdGFydCxjbC5QYXR0ZXJuSGFzQWNjZXNzb3IpfWVsc2UgaWYoZS5tZXRob2Qpe3RoaXMucmFpc2UoZS5rZXkuc3RhcnQsY2wuUGF0dGVybkhhc01ldGhvZCl9ZWxzZXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheSh0PjE/dC0xOjApLHM9MTtzPHQ7cysrKXtyW3MtMV09YXJndW1lbnRzW3NdfXN1cGVyLnRvQXNzaWduYWJsZU9iamVjdEV4cHJlc3Npb25Qcm9wKGUsLi4ucil9fWZpbmlzaENhbGxFeHByZXNzaW9uKGUsdCl7c3VwZXIuZmluaXNoQ2FsbEV4cHJlc3Npb24oZSx0KTtpZihlLmNhbGxlZS50eXBlPT09IkltcG9ydCIpe2UudHlwZT0iSW1wb3J0RXhwcmVzc2lvbiI7ZS5zb3VyY2U9ZS5hcmd1bWVudHNbMF07aWYodGhpcy5oYXNQbHVnaW4oImltcG9ydEFzc2VydGlvbnMiKSl7dmFyIHI7ZS5hdHRyaWJ1dGVzPShyPWUuYXJndW1lbnRzWzFdKSE9bnVsbD9yOm51bGx9ZGVsZXRlIGUuYXJndW1lbnRzO2RlbGV0ZSBlLmNhbGxlZX1yZXR1cm4gZX10b1JlZmVyZW5jZWRBcmd1bWVudHMoZSl7aWYoZS50eXBlPT09IkltcG9ydEV4cHJlc3Npb24iKXtyZXR1cm59c3VwZXIudG9SZWZlcmVuY2VkQXJndW1lbnRzKGUpfXBhcnNlRXhwb3J0KGUpe3N1cGVyLnBhcnNlRXhwb3J0KGUpO3N3aXRjaChlLnR5cGUpe2Nhc2UiRXhwb3J0QWxsRGVjbGFyYXRpb24iOmUuZXhwb3J0ZWQ9bnVsbDticmVhaztjYXNlIkV4cG9ydE5hbWVkRGVjbGFyYXRpb24iOmlmKGUuc3BlY2lmaWVycy5sZW5ndGg9PT0xJiZlLnNwZWNpZmllcnNbMF0udHlwZT09PSJFeHBvcnROYW1lc3BhY2VTcGVjaWZpZXIiKXtlLnR5cGU9IkV4cG9ydEFsbERlY2xhcmF0aW9uIjtlLmV4cG9ydGVkPWUuc3BlY2lmaWVyc1swXS5leHBvcnRlZDtkZWxldGUgZS5zcGVjaWZpZXJzfWJyZWFrfXJldHVybiBlfXBhcnNlU3Vic2NyaXB0KGUsdCxyLHMsaSl7Y29uc3Qgbj1zdXBlci5wYXJzZVN1YnNjcmlwdChlLHQscixzLGkpO2lmKGkub3B0aW9uYWxDaGFpbk1lbWJlcil7aWYobi50eXBlPT09Ik9wdGlvbmFsTWVtYmVyRXhwcmVzc2lvbiJ8fG4udHlwZT09PSJPcHRpb25hbENhbGxFeHByZXNzaW9uIil7bi50eXBlPW4udHlwZS5zdWJzdHJpbmcoOCl9aWYoaS5zdG9wKXtjb25zdCBlPXRoaXMuc3RhcnROb2RlQXROb2RlKG4pO2UuZXhwcmVzc2lvbj1uO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiQ2hhaW5FeHByZXNzaW9uIil9fWVsc2UgaWYobi50eXBlPT09Ik1lbWJlckV4cHJlc3Npb24ifHxuLnR5cGU9PT0iQ2FsbEV4cHJlc3Npb24iKXtuLm9wdGlvbmFsPWZhbHNlfXJldHVybiBufWhhc1Byb3BlcnR5QXNQcml2YXRlTmFtZShlKXtpZihlLnR5cGU9PT0iQ2hhaW5FeHByZXNzaW9uIil7ZT1lLmV4cHJlc3Npb259cmV0dXJuIHN1cGVyLmhhc1Byb3BlcnR5QXNQcml2YXRlTmFtZShlKX1pc09wdGlvbmFsQ2hhaW4oZSl7cmV0dXJuIGUudHlwZT09PSJDaGFpbkV4cHJlc3Npb24ifWlzT2JqZWN0UHJvcGVydHkoZSl7cmV0dXJuIGUudHlwZT09PSJQcm9wZXJ0eSImJmUua2luZD09PSJpbml0IiYmIWUubWV0aG9kfWlzT2JqZWN0TWV0aG9kKGUpe3JldHVybiBlLm1ldGhvZHx8ZS5raW5kPT09ImdldCJ8fGUua2luZD09PSJzZXQifX07Y2xhc3MgeWx7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnRva2VuPXZvaWQgMDt0aGlzLnByZXNlcnZlU3BhY2U9dm9pZCAwO3RoaXMudG9rZW49ZTt0aGlzLnByZXNlcnZlU3BhY2U9ISF0fX1jb25zdCBnbD17YnJhY2U6bmV3IHlsKCJ7IiksdGVtcGxhdGU6bmV3IHlsKCJgIix0cnVlKX07Y29uc3QgeGw9dHJ1ZTtjb25zdCB2bD10cnVlO2NvbnN0IGJsPXRydWU7Y29uc3QgRWw9dHJ1ZTtjb25zdCBTbD10cnVlO2NvbnN0IFRsPXRydWU7Y2xhc3MgQWx7Y29uc3RydWN0b3IoZSx0KXtpZih0PT09dm9pZCAwKXt0PXt9fXRoaXMubGFiZWw9dm9pZCAwO3RoaXMua2V5d29yZD12b2lkIDA7dGhpcy5iZWZvcmVFeHByPXZvaWQgMDt0aGlzLnN0YXJ0c0V4cHI9dm9pZCAwO3RoaXMucmlnaHRBc3NvY2lhdGl2ZT12b2lkIDA7dGhpcy5pc0xvb3A9dm9pZCAwO3RoaXMuaXNBc3NpZ249dm9pZCAwO3RoaXMucHJlZml4PXZvaWQgMDt0aGlzLnBvc3RmaXg9dm9pZCAwO3RoaXMuYmlub3A9dm9pZCAwO3RoaXMubGFiZWw9ZTt0aGlzLmtleXdvcmQ9dC5rZXl3b3JkO3RoaXMuYmVmb3JlRXhwcj0hIXQuYmVmb3JlRXhwcjt0aGlzLnN0YXJ0c0V4cHI9ISF0LnN0YXJ0c0V4cHI7dGhpcy5yaWdodEFzc29jaWF0aXZlPSEhdC5yaWdodEFzc29jaWF0aXZlO3RoaXMuaXNMb29wPSEhdC5pc0xvb3A7dGhpcy5pc0Fzc2lnbj0hIXQuaXNBc3NpZ247dGhpcy5wcmVmaXg9ISF0LnByZWZpeDt0aGlzLnBvc3RmaXg9ISF0LnBvc3RmaXg7dGhpcy5iaW5vcD10LmJpbm9wIT1udWxsP3QuYmlub3A6bnVsbDt7dGhpcy51cGRhdGVDb250ZXh0PW51bGx9fX1jb25zdCB3bD1uZXcgTWFwO2Z1bmN0aW9uIENsKGUsdCl7aWYodD09PXZvaWQgMCl7dD17fX10LmtleXdvcmQ9ZTtjb25zdCByPU9sKGUsdCk7d2wuc2V0KGUscik7cmV0dXJuIHJ9ZnVuY3Rpb24gUGwoZSx0KXtyZXR1cm4gT2woZSx7YmVmb3JlRXhwcjp4bCxiaW5vcDp0fSl9bGV0IERsPS0xO2NvbnN0IGtsPVtdO2NvbnN0IE5sPVtdO2NvbnN0IElsPVtdO2NvbnN0IEZsPVtdO2NvbnN0IE1sPVtdO2NvbnN0IF9sPVtdO2Z1bmN0aW9uIE9sKGUsdCl7aWYodD09PXZvaWQgMCl7dD17fX12YXIgcixzLGksbjsrK0RsO05sLnB1c2goZSk7SWwucHVzaCgocj10LmJpbm9wKSE9bnVsbD9yOi0xKTtGbC5wdXNoKChzPXQuYmVmb3JlRXhwcikhPW51bGw/czpmYWxzZSk7TWwucHVzaCgoaT10LnN0YXJ0c0V4cHIpIT1udWxsP2k6ZmFsc2UpO19sLnB1c2goKG49dC5wcmVmaXgpIT1udWxsP246ZmFsc2UpO2tsLnB1c2gobmV3IEFsKGUsdCkpO3JldHVybiBEbH1mdW5jdGlvbiBMbChlLHQpe2lmKHQ9PT12b2lkIDApe3Q9e319dmFyIHIscyxpLG47KytEbDt3bC5zZXQoZSxEbCk7TmwucHVzaChlKTtJbC5wdXNoKChyPXQuYmlub3ApIT1udWxsP3I6LTEpO0ZsLnB1c2goKHM9dC5iZWZvcmVFeHByKSE9bnVsbD9zOmZhbHNlKTtNbC5wdXNoKChpPXQuc3RhcnRzRXhwcikhPW51bGw/aTpmYWxzZSk7X2wucHVzaCgobj10LnByZWZpeCkhPW51bGw/bjpmYWxzZSk7a2wucHVzaChuZXcgQWwoIm5hbWUiLHQpKTtyZXR1cm4gRGx9Y29uc3QgQmw9e2JyYWNrZXRMOk9sKCJbIix7YmVmb3JlRXhwcjp4bCxzdGFydHNFeHByOnZsfSksYnJhY2tldEhhc2hMOk9sKCIjWyIse2JlZm9yZUV4cHI6eGwsc3RhcnRzRXhwcjp2bH0pLGJyYWNrZXRCYXJMOk9sKCJbfCIse2JlZm9yZUV4cHI6eGwsc3RhcnRzRXhwcjp2bH0pLGJyYWNrZXRSOk9sKCJdIiksYnJhY2tldEJhclI6T2woInxdIiksYnJhY2VMOk9sKCJ7Iix7YmVmb3JlRXhwcjp4bCxzdGFydHNFeHByOnZsfSksYnJhY2VCYXJMOk9sKCJ7fCIse2JlZm9yZUV4cHI6eGwsc3RhcnRzRXhwcjp2bH0pLGJyYWNlSGFzaEw6T2woIiN7Iix7YmVmb3JlRXhwcjp4bCxzdGFydHNFeHByOnZsfSksYnJhY2VSOk9sKCJ9Iix7YmVmb3JlRXhwcjp4bH0pLGJyYWNlQmFyUjpPbCgifH0iKSxwYXJlbkw6T2woIigiLHtiZWZvcmVFeHByOnhsLHN0YXJ0c0V4cHI6dmx9KSxwYXJlblI6T2woIikiKSxjb21tYTpPbCgiLCIse2JlZm9yZUV4cHI6eGx9KSxzZW1pOk9sKCI7Iix7YmVmb3JlRXhwcjp4bH0pLGNvbG9uOk9sKCI6Iix7YmVmb3JlRXhwcjp4bH0pLGRvdWJsZUNvbG9uOk9sKCI6OiIse2JlZm9yZUV4cHI6eGx9KSxkb3Q6T2woIi4iKSxxdWVzdGlvbjpPbCgiPyIse2JlZm9yZUV4cHI6eGx9KSxxdWVzdGlvbkRvdDpPbCgiPy4iKSxhcnJvdzpPbCgiPT4iLHtiZWZvcmVFeHByOnhsfSksdGVtcGxhdGU6T2woInRlbXBsYXRlIiksZWxsaXBzaXM6T2woIi4uLiIse2JlZm9yZUV4cHI6eGx9KSxiYWNrUXVvdGU6T2woImAiLHtzdGFydHNFeHByOnZsfSksZG9sbGFyQnJhY2VMOk9sKCIkeyIse2JlZm9yZUV4cHI6eGwsc3RhcnRzRXhwcjp2bH0pLGF0Ok9sKCJAIiksaGFzaDpPbCgiIyIse3N0YXJ0c0V4cHI6dmx9KSxpbnRlcnByZXRlckRpcmVjdGl2ZTpPbCgiIyEuLi4iKSxlcTpPbCgiPSIse2JlZm9yZUV4cHI6eGwsaXNBc3NpZ246RWx9KSxhc3NpZ246T2woIl89Iix7YmVmb3JlRXhwcjp4bCxpc0Fzc2lnbjpFbH0pLHNsYXNoQXNzaWduOk9sKCJfPSIse2JlZm9yZUV4cHI6eGwsaXNBc3NpZ246RWx9KSx4b3JBc3NpZ246T2woIl89Iix7YmVmb3JlRXhwcjp4bCxpc0Fzc2lnbjpFbH0pLG1vZHVsb0Fzc2lnbjpPbCgiXz0iLHtiZWZvcmVFeHByOnhsLGlzQXNzaWduOkVsfSksaW5jRGVjOk9sKCIrKy8tLSIse3ByZWZpeDpTbCxwb3N0Zml4OlRsLHN0YXJ0c0V4cHI6dmx9KSxiYW5nOk9sKCIhIix7YmVmb3JlRXhwcjp4bCxwcmVmaXg6U2wsc3RhcnRzRXhwcjp2bH0pLHRpbGRlOk9sKCJ+Iix7YmVmb3JlRXhwcjp4bCxwcmVmaXg6U2wsc3RhcnRzRXhwcjp2bH0pLHBpcGVsaW5lOlBsKCJ8PiIsMCksbnVsbGlzaENvYWxlc2Npbmc6UGwoIj8/IiwxKSxsb2dpY2FsT1I6UGwoInx8IiwxKSxsb2dpY2FsQU5EOlBsKCImJiIsMiksYml0d2lzZU9SOlBsKCJ8IiwzKSxiaXR3aXNlWE9SOlBsKCJeIiw0KSxiaXR3aXNlQU5EOlBsKCImIiw1KSxlcXVhbGl0eTpQbCgiPT0vIT0vPT09LyE9PSIsNiksbHQ6UGwoIjwvPi88PS8+PSIsNyksZ3Q6UGwoIjwvPi88PS8+PSIsNykscmVsYXRpb25hbDpQbCgiPC8+Lzw9Lz49Iiw3KSxiaXRTaGlmdDpQbCgiPDwvPj4vPj4+Iiw4KSxwbHVzTWluOk9sKCIrLy0iLHtiZWZvcmVFeHByOnhsLGJpbm9wOjkscHJlZml4OlNsLHN0YXJ0c0V4cHI6dmx9KSxtb2R1bG86T2woIiUiLHtiaW5vcDoxMCxzdGFydHNFeHByOnZsfSksc3RhcjpPbCgiKiIse2Jpbm9wOjEwfSksc2xhc2g6UGwoIi8iLDEwKSxleHBvbmVudDpPbCgiKioiLHtiZWZvcmVFeHByOnhsLGJpbm9wOjExLHJpZ2h0QXNzb2NpYXRpdmU6dHJ1ZX0pLF9pbjpDbCgiaW4iLHtiZWZvcmVFeHByOnhsLGJpbm9wOjd9KSxfaW5zdGFuY2VvZjpDbCgiaW5zdGFuY2VvZiIse2JlZm9yZUV4cHI6eGwsYmlub3A6N30pLF9icmVhazpDbCgiYnJlYWsiKSxfY2FzZTpDbCgiY2FzZSIse2JlZm9yZUV4cHI6eGx9KSxfY2F0Y2g6Q2woImNhdGNoIiksX2NvbnRpbnVlOkNsKCJjb250aW51ZSIpLF9kZWJ1Z2dlcjpDbCgiZGVidWdnZXIiKSxfZGVmYXVsdDpDbCgiZGVmYXVsdCIse2JlZm9yZUV4cHI6eGx9KSxfZWxzZTpDbCgiZWxzZSIse2JlZm9yZUV4cHI6eGx9KSxfZmluYWxseTpDbCgiZmluYWxseSIpLF9mdW5jdGlvbjpDbCgiZnVuY3Rpb24iLHtzdGFydHNFeHByOnZsfSksX2lmOkNsKCJpZiIpLF9yZXR1cm46Q2woInJldHVybiIse2JlZm9yZUV4cHI6eGx9KSxfc3dpdGNoOkNsKCJzd2l0Y2giKSxfdGhyb3c6Q2woInRocm93Iix7YmVmb3JlRXhwcjp4bCxwcmVmaXg6U2wsc3RhcnRzRXhwcjp2bH0pLF90cnk6Q2woInRyeSIpLF92YXI6Q2woInZhciIpLF9jb25zdDpDbCgiY29uc3QiKSxfd2l0aDpDbCgid2l0aCIpLF9uZXc6Q2woIm5ldyIse2JlZm9yZUV4cHI6eGwsc3RhcnRzRXhwcjp2bH0pLF90aGlzOkNsKCJ0aGlzIix7c3RhcnRzRXhwcjp2bH0pLF9zdXBlcjpDbCgic3VwZXIiLHtzdGFydHNFeHByOnZsfSksX2NsYXNzOkNsKCJjbGFzcyIse3N0YXJ0c0V4cHI6dmx9KSxfZXh0ZW5kczpDbCgiZXh0ZW5kcyIse2JlZm9yZUV4cHI6eGx9KSxfZXhwb3J0OkNsKCJleHBvcnQiKSxfaW1wb3J0OkNsKCJpbXBvcnQiLHtzdGFydHNFeHByOnZsfSksX251bGw6Q2woIm51bGwiLHtzdGFydHNFeHByOnZsfSksX3RydWU6Q2woInRydWUiLHtzdGFydHNFeHByOnZsfSksX2ZhbHNlOkNsKCJmYWxzZSIse3N0YXJ0c0V4cHI6dmx9KSxfdHlwZW9mOkNsKCJ0eXBlb2YiLHtiZWZvcmVFeHByOnhsLHByZWZpeDpTbCxzdGFydHNFeHByOnZsfSksX3ZvaWQ6Q2woInZvaWQiLHtiZWZvcmVFeHByOnhsLHByZWZpeDpTbCxzdGFydHNFeHByOnZsfSksX2RlbGV0ZTpDbCgiZGVsZXRlIix7YmVmb3JlRXhwcjp4bCxwcmVmaXg6U2wsc3RhcnRzRXhwcjp2bH0pLF9kbzpDbCgiZG8iLHtpc0xvb3A6YmwsYmVmb3JlRXhwcjp4bH0pLF9mb3I6Q2woImZvciIse2lzTG9vcDpibH0pLF93aGlsZTpDbCgid2hpbGUiLHtpc0xvb3A6Ymx9KSxfYXM6TGwoImFzIix7c3RhcnRzRXhwcjp2bH0pLF9hc3NlcnQ6TGwoImFzc2VydCIse3N0YXJ0c0V4cHI6dmx9KSxfYXN5bmM6TGwoImFzeW5jIix7c3RhcnRzRXhwcjp2bH0pLF9hd2FpdDpMbCgiYXdhaXQiLHtzdGFydHNFeHByOnZsfSksX2Zyb206TGwoImZyb20iLHtzdGFydHNFeHByOnZsfSksX2dldDpMbCgiZ2V0Iix7c3RhcnRzRXhwcjp2bH0pLF9sZXQ6TGwoImxldCIse3N0YXJ0c0V4cHI6dmx9KSxfbWV0YTpMbCgibWV0YSIse3N0YXJ0c0V4cHI6dmx9KSxfb2Y6TGwoIm9mIix7c3RhcnRzRXhwcjp2bH0pLF9zZW50OkxsKCJzZW50Iix7c3RhcnRzRXhwcjp2bH0pLF9zZXQ6TGwoInNldCIse3N0YXJ0c0V4cHI6dmx9KSxfc3RhdGljOkxsKCJzdGF0aWMiLHtzdGFydHNFeHByOnZsfSksX3lpZWxkOkxsKCJ5aWVsZCIse3N0YXJ0c0V4cHI6dmx9KSxfYXNzZXJ0czpMbCgiYXNzZXJ0cyIse3N0YXJ0c0V4cHI6dmx9KSxfY2hlY2tzOkxsKCJjaGVja3MiLHtzdGFydHNFeHByOnZsfSksX2V4cG9ydHM6TGwoImV4cG9ydHMiLHtzdGFydHNFeHByOnZsfSksX2dsb2JhbDpMbCgiZ2xvYmFsIix7c3RhcnRzRXhwcjp2bH0pLF9pbXBsZW1lbnRzOkxsKCJpbXBsZW1lbnRzIix7c3RhcnRzRXhwcjp2bH0pLF9pbnRyaW5zaWM6TGwoImludHJpbnNpYyIse3N0YXJ0c0V4cHI6dmx9KSxfaW5mZXI6TGwoImluZmVyIix7c3RhcnRzRXhwcjp2bH0pLF9pczpMbCgiaXMiLHtzdGFydHNFeHByOnZsfSksX21peGluczpMbCgibWl4aW5zIix7c3RhcnRzRXhwcjp2bH0pLF9wcm90bzpMbCgicHJvdG8iLHtzdGFydHNFeHByOnZsfSksX3JlcXVpcmU6TGwoInJlcXVpcmUiLHtzdGFydHNFeHByOnZsfSksX2tleW9mOkxsKCJrZXlvZiIse3N0YXJ0c0V4cHI6dmx9KSxfcmVhZG9ubHk6TGwoInJlYWRvbmx5Iix7c3RhcnRzRXhwcjp2bH0pLF91bmlxdWU6TGwoInVuaXF1ZSIse3N0YXJ0c0V4cHI6dmx9KSxfYWJzdHJhY3Q6TGwoImFic3RyYWN0Iix7c3RhcnRzRXhwcjp2bH0pLF9kZWNsYXJlOkxsKCJkZWNsYXJlIix7c3RhcnRzRXhwcjp2bH0pLF9lbnVtOkxsKCJlbnVtIix7c3RhcnRzRXhwcjp2bH0pLF9tb2R1bGU6TGwoIm1vZHVsZSIse3N0YXJ0c0V4cHI6dmx9KSxfbmFtZXNwYWNlOkxsKCJuYW1lc3BhY2UiLHtzdGFydHNFeHByOnZsfSksX2ludGVyZmFjZTpMbCgiaW50ZXJmYWNlIix7c3RhcnRzRXhwcjp2bH0pLF90eXBlOkxsKCJ0eXBlIix7c3RhcnRzRXhwcjp2bH0pLF9vcGFxdWU6TGwoIm9wYXF1ZSIse3N0YXJ0c0V4cHI6dmx9KSxuYW1lOk9sKCJuYW1lIix7c3RhcnRzRXhwcjp2bH0pLHN0cmluZzpPbCgic3RyaW5nIix7c3RhcnRzRXhwcjp2bH0pLG51bTpPbCgibnVtIix7c3RhcnRzRXhwcjp2bH0pLGJpZ2ludDpPbCgiYmlnaW50Iix7c3RhcnRzRXhwcjp2bH0pLGRlY2ltYWw6T2woImRlY2ltYWwiLHtzdGFydHNFeHByOnZsfSkscmVnZXhwOk9sKCJyZWdleHAiLHtzdGFydHNFeHByOnZsfSkscHJpdmF0ZU5hbWU6T2woIiNuYW1lIix7c3RhcnRzRXhwcjp2bH0pLGVvZjpPbCgiZW9mIiksanN4TmFtZTpPbCgianN4TmFtZSIpLGpzeFRleHQ6T2woImpzeFRleHQiLHtiZWZvcmVFeHByOnRydWV9KSxqc3hUYWdTdGFydDpPbCgianN4VGFnU3RhcnQiLHtzdGFydHNFeHByOnRydWV9KSxqc3hUYWdFbmQ6T2woImpzeFRhZ0VuZCIpLHBsYWNlaG9sZGVyOk9sKCIlJSIse3N0YXJ0c0V4cHI6dHJ1ZX0pfTtmdW5jdGlvbiBSbChlKXtyZXR1cm4gZT49ODcmJmU8PTEyMn1mdW5jdGlvbiBqbChlKXtyZXR1cm4gZTw9ODZ9ZnVuY3Rpb24gVWwoZSl7cmV0dXJuIGU+PTUyJiZlPD0xMjJ9ZnVuY3Rpb24gemwoZSl7cmV0dXJuIGU+PTUyJiZlPD0xMjZ9ZnVuY3Rpb24gVmwoZSl7cmV0dXJuIEZsW2VdfWZ1bmN0aW9uIHFsKGUpe3JldHVybiBNbFtlXX1mdW5jdGlvbiBHbChlKXtyZXR1cm4gZT49MjcmJmU8PTMxfWZ1bmN0aW9uIFhsKGUpe3JldHVybiBlPj0xMTkmJmU8PTEyMX1mdW5jdGlvbiBKbChlKXtyZXR1cm4gZT49ODQmJmU8PTg2fWZ1bmN0aW9uIEhsKGUpe3JldHVybiBlPj01MiYmZTw9ODZ9ZnVuY3Rpb24gV2woZSl7cmV0dXJuIGU+PTM1JiZlPD01M31mdW5jdGlvbiBLbChlKXtyZXR1cm4gZT09PTMyfWZ1bmN0aW9uICRsKGUpe3JldHVybiBfbFtlXX1mdW5jdGlvbiBZbChlKXtyZXR1cm4gZT49MTExJiZlPD0xMTN9ZnVuY3Rpb24gUWwoZSl7cmV0dXJuIGU+PTExNCYmZTw9MTIwfWZ1bmN0aW9uIFpsKGUpe3JldHVybiBObFtlXX1mdW5jdGlvbiBldShlKXtyZXR1cm4gSWxbZV19ZnVuY3Rpb24gdHUoZSl7cmV0dXJuIGU9PT01MX1mdW5jdGlvbiBydShlKXtyZXR1cm4ga2xbZV19ZnVuY3Rpb24gc3UoZSl7cmV0dXJuIHR5cGVvZiBlPT09Im51bWJlciJ9e2tsWzhdLnVwZGF0ZUNvbnRleHQ9ZT0+e2UucG9wKCl9O2tsWzVdLnVwZGF0ZUNvbnRleHQ9a2xbN10udXBkYXRlQ29udGV4dD1rbFsyM10udXBkYXRlQ29udGV4dD1lPT57ZS5wdXNoKGdsLmJyYWNlKX07a2xbMjJdLnVwZGF0ZUNvbnRleHQ9ZT0+e2lmKGVbZS5sZW5ndGgtMV09PT1nbC50ZW1wbGF0ZSl7ZS5wb3AoKX1lbHNle2UucHVzaChnbC50ZW1wbGF0ZSl9fTtrbFsxMzJdLnVwZGF0ZUNvbnRleHQ9ZT0+e2UucHVzaChnbC5qX2V4cHIsZ2wual9vVGFnKX19bGV0IGl1PSLCqsK1wrrDgC3DlsOYLcO2w7gty4HLhi3LkcugLcuky6zLrs2wLc20zbbNt826Lc29zb/Ohs6ILc6KzozOji3Ooc6jLc+1z7ct0oHSii3Ur9SxLdWW1ZnVoC3WiNeQLdeq168t17LYoC3Zitmu2a/ZsS3bk9uV26Xbptuu26/bui3bvNu/3JDcki3cr92NLd6l3rHfii3fqt+037XfuuCggC3goJXgoJrgoKTgoKjgoYAt4KGY4KGgLeChquChsC3goofgookt4KKO4KKgLeCjieCkhC3gpLngpL3gpZDgpZgt4KWh4KWxLeCmgOCmhS3gpozgpo/gppDgppMt4Kao4KaqLeCmsOCmsuCmti3gprngpr3gp47gp5zgp53gp58t4Keh4Kew4Kex4Ke84KiFLeCoiuCoj+CokOCoky3gqKjgqKot4Kiw4Kiy4Kiz4Ki14Ki24Ki44Ki54KmZLeCpnOCpnuCpsi3gqbTgqoUt4KqN4KqPLeCqkeCqky3gqqjgqqot4Kqw4Kqy4Kqz4Kq1LeCqueCqveCrkOCroOCroeCrueCshS3grIzgrI/grJDgrJMt4Kyo4KyqLeCssOCssuCss+CstS3grLngrL3grZzgrZ3grZ8t4K2h4K2x4K6D4K6FLeCuiuCuji3grpDgrpIt4K6V4K6Z4K6a4K6c4K6e4K6f4K6j4K6k4K6oLeCuquCuri3grrngr5DgsIUt4LCM4LCOLeCwkOCwki3gsKjgsKot4LC54LC94LGYLeCxmuCxneCxoOCxoeCygOCyhS3gsozgso4t4LKQ4LKSLeCyqOCyqi3gsrPgsrUt4LK54LK94LOd4LOe4LOg4LOh4LOx4LOy4LSELeC0jOC0ji3gtJDgtJIt4LS64LS94LWO4LWULeC1luC1ny3gtaHgtbot4LW/4LaFLeC2luC2mi3gtrHgtrMt4La74La94LeALeC3huC4gS3guLDguLLguLPguYAt4LmG4LqB4LqC4LqE4LqGLeC6iuC6jC3guqPguqXguqct4Lqw4Lqy4Lqz4Lq94LuALeC7hOC7huC7nC3gu5/gvIDgvYAt4L2H4L2JLeC9rOC+iC3gvozhgIAt4YCq4YC/4YGQLeGBleGBmi3hgZ3hgaHhgaXhgabhga4t4YGw4YG1LeGCgeGCjuGCoC3hg4Xhg4fhg43hg5At4YO64YO8LeGJiOGJii3hiY3hiZAt4YmW4YmY4YmaLeGJneGJoC3hiojhioot4YqN4YqQLeGKsOGKsi3hirXhirgt4Yq+4YuA4YuCLeGLheGLiC3hi5bhi5gt4YyQ4YySLeGMleGMmC3hjZrhjoAt4Y6P4Y6gLeGPteGPuC3hj73hkIEt4Zms4ZmvLeGZv+GagS3hmprhmqAt4Zuq4ZuuLeGbuOGcgC3hnJHhnJ8t4Zyx4Z2ALeGdkeGdoC3hnazhna4t4Z2w4Z6ALeGes+Gfl+GfnOGgoC3hobjhooAt4aKo4aKq4aKwLeGjteGkgC3hpJ7hpZAt4aWt4aWwLeGltOGmgC3hpqvhprAt4aeJ4aiALeGoluGooC3hqZThqqfhrIUt4ayz4a2FLeGtjOGugy3hrqDhrq7hrq/hrrot4a+l4bCALeGwo+GxjS3hsY/hsZot4bG94bKALeGyiOGykC3hsrrhsr0t4bK/4bOpLeGzrOGzri3hs7Phs7Xhs7bhs7rhtIAt4ba/4biALeG8leG8mC3hvJ3hvKAt4b2F4b2ILeG9jeG9kC3hvZfhvZnhvZvhvZ3hvZ8t4b294b6ALeG+tOG+ti3hvrzhvr7hv4It4b+E4b+GLeG/jOG/kC3hv5Phv5Yt4b+b4b+gLeG/rOG/si3hv7Thv7Yt4b+84oGx4oG/4oKQLeKCnOKEguKEh+KEii3ihJPihJXihJgt4oSd4oSk4oSm4oSo4oSqLeKEueKEvC3ihL/ihYUt4oWJ4oWO4oWgLeKGiOKwgC3is6Tis6st4rOu4rOy4rOz4rSALeK0peK0p+K0reK0sC3itafita/itoAt4raW4ragLeK2puK2qC3itq7itrAt4ra24ra4LeK2vuK3gC3it4bit4gt4reO4reQLeK3luK3mC3it57jgIUt44CH44ChLeOAqeOAsS3jgLXjgLgt44C844GBLeOCluOCmy3jgp/jgqEt44O644O8LeODv+OEhS3jhK/jhLEt44aO44agLeOGv+OHsC3jh7/jkIAt5La/5LiALeqSjOqTkC3qk73qlIAt6piM6piQLeqYn+qYquqYq+qZgC3qma7qmb8t6pqd6pqgLeqbr+qcly3qnJ/qnKIt6p6I6p6LLeqfiuqfkOqfkeqfk+qflS3qn5nqn7It6qCB6qCDLeqgheqghy3qoIrqoIwt6qCi6qGALeqhs+qigi3qorPqo7It6qO36qO76qO96qO+6qSKLeqkpeqksC3qpYbqpaAt6qW86qaELeqmsuqnj+qnoC3qp6Tqp6Yt6qev6qe6LeqnvuqogC3qqKjqqYAt6qmC6qmELeqpi+qpoC3qqbbqqbrqqb4t6qqv6qqx6qq16qq26qq5LeqqveqrgOqrguqrmy3qq53qq6At6quq6quyLeqrtOqsgS3qrIbqrIkt6qyO6qyRLeqsluqsoC3qrKbqrKgt6qyu6qywLeqtmuqtnC3qranqrbAt6q+i6rCALe2eo+2esC3tn4btn4st7Z+776SALe+pre+psC3vq5nvrIAt76yG76yTLe+sl++sne+sny3vrKjvrKot76y276y4Le+svO+svu+tgO+tge+tg++thO+thi3vrrHvr5Mt77S977WQLe+2j++2ki3vt4fvt7At77e777mwLe+5tO+5ti3vu7zvvKEt77y6772BLe+9mu+9pi3vvr7vv4It77+H77+KLe+/j++/ki3vv5fvv5ot77+cIjtsZXQgbnU9IuKAjOKAjcK3zIAtza/Oh9KDLdKH1pEt1r3Wv9eB14LXhNeF14fYkC3YmtmLLdmp2bDbli3bnNufLduk26fbqNuqLdut27At27nckdywLd2K3qYt3rDfgC3fid+rLd+z373goJYt4KCZ4KCbLeCgo+CgpS3goKfgoKkt4KCt4KGZLeChm+CimC3gop/go4ot4KOh4KOjLeCkg+Ckui3gpLzgpL4t4KWP4KWRLeCll+ClouClo+Clpi3gpa/gpoEt4KaD4Ka84Ka+LeCnhOCnh+CniOCniy3gp43gp5fgp6Lgp6Pgp6Yt4Kev4Ke+4KiBLeCog+CovOCovi3gqYLgqYfgqYjgqYst4KmN4KmR4KmmLeCpseCpteCqgS3gqoPgqrzgqr4t4KuF4KuHLeCrieCriy3gq43gq6Lgq6Pgq6Yt4Kuv4Ku6LeCrv+CsgS3grIPgrLzgrL4t4K2E4K2H4K2I4K2LLeCtjeCtlS3grZfgraLgraPgraYt4K2v4K6C4K6+LeCvguCvhi3gr4jgr4ot4K+N4K+X4K+mLeCvr+CwgC3gsITgsLzgsL4t4LGE4LGGLeCxiOCxii3gsY3gsZXgsZbgsaLgsaPgsaYt4LGv4LKBLeCyg+CyvOCyvi3gs4Tgs4Yt4LOI4LOKLeCzjeCzleCzluCzouCzo+Czpi3gs6/gtIAt4LSD4LS74LS84LS+LeC1hOC1hi3gtYjgtYot4LWN4LWX4LWi4LWj4LWmLeC1r+C2gS3gtoPgt4rgt48t4LeU4LeW4LeYLeC3n+C3pi3gt6/gt7Lgt7PguLHguLQt4Li64LmHLeC5juC5kC3guZngurHgurQt4Lq84LuILeC7jeC7kC3gu5ngvJjgvJngvKAt4Lyp4Ly14Ly34Ly54Ly+4Ly/4L2xLeC+hOC+huC+h+C+jS3gvpfgvpkt4L684L+G4YCrLeGAvuGBgC3hgYnhgZYt4YGZ4YGeLeGBoOGBoi3hgaThgact4YGt4YGxLeGBtOGCgi3hgo3hgo8t4YKd4Y2dLeGNn+GNqS3hjbHhnJIt4ZyV4ZyyLeGctOGdkuGdk+GdsuGds+GetC3hn5Phn53hn6At4Z+p4aCLLeGgjeGgjy3hoJnhoqnhpKAt4aSr4aSwLeGku+Glhi3hpY/hp5At4aea4aiXLeGom+GplS3hqZ7hqaAt4am84am/LeGqieGqkC3hqpnhqrAt4aq94aq/LeGrjuGsgC3hrIThrLQt4a2E4a2QLeGtmeGtqy3hrbPhroAt4a6C4a6hLeGureGusC3hrrnhr6Yt4a+z4bCkLeGwt+GxgC3hsYnhsZAt4bGZ4bOQLeGzkuGzlC3hs6jhs63hs7Ths7ct4bO54beALeG3v+KAv+KBgOKBlOKDkC3ig5zig6Hig6Ut4oOw4rOvLeKzseK1v+K3oC3it7/jgKot44Cv44KZ44Ka6pigLeqYqeqZr+qZtC3qmb3qmp7qmp/qm7Dqm7HqoILqoIbqoIvqoKMt6qCn6qCs6qKA6qKB6qK0LeqjheqjkC3qo5nqo6At6qOx6qO/Leqkieqkpi3qpK3qpYct6qWT6qaALeqmg+qmsy3qp4Dqp5At6qeZ6qel6qewLeqnueqoqS3qqLbqqYPqqYzqqY3qqZAt6qmZ6qm7LeqpveqqsOqqsi3qqrTqqrfqqrjqqr7qqr/qq4Hqq6st6quv6qu16qu26q+jLeqvquqvrOqvreqvsC3qr7nvrJ7vuIAt77iP77igLe+4r++4s++4tO+5jS3vuY/vvJAt77yZ77y/Ijtjb25zdCBhdT1uZXcgUmVnRXhwKCJbIitpdSsiXSIpO2NvbnN0IG91PW5ldyBSZWdFeHAoIlsiK2l1K251KyJdIik7aXU9bnU9bnVsbDtjb25zdCBsdT1bMCwxMSwyLDI1LDIsMTgsMiwxLDIsMTQsMywxMywzNSwxMjIsNzAsNTIsMjY4LDI4LDQsNDgsNDgsMzEsMTQsMjksNiwzNywxMSwyOSwzLDM1LDUsNywyLDQsNDMsMTU3LDE5LDM1LDUsMzUsNSwzOSw5LDUxLDEzLDEwLDIsMTQsMiw2LDIsMSwyLDEwLDIsMTQsMiw2LDIsMSw2OCwzMTAsMTAsMjEsMTEsNywyNSw1LDIsNDEsMiw4LDcwLDUsMywwLDIsNDMsMiwxLDQsMCwzLDIyLDExLDIyLDEwLDMwLDY2LDE4LDIsMSwxMSwyMSwxMSwyNSw3MSw1NSw3LDEsNjUsMCwxNiwzLDIsMiwyLDI4LDQzLDI4LDQsMjgsMzYsNywyLDI3LDI4LDUzLDExLDIxLDExLDE4LDE0LDE3LDExMSw3Miw1Niw1MCwxNCw1MCwxNCwzNSwzNDksNDEsNywxLDc5LDI4LDExLDAsOSwyMSw0MywxNyw0NywyMCwyOCwyMiwxMyw1Miw1OCwxLDMsMCwxNCw0NCwzMywyNCwyNywzNSwzMCwwLDMsMCw5LDM0LDQsMCwxMyw0NywxNSwzLDIyLDAsMiwwLDM2LDE3LDIsMjQsODUsNiwyLDAsMiwzLDIsMTQsMiw5LDgsNDYsMzksNywzLDEsMywyMSwyLDYsMiwxLDIsNCw0LDAsMTksMCwxMyw0LDE1OSw1MiwxOSwzLDIxLDIsMzEsNDcsMjEsMSwyLDAsMTg1LDQ2LDQyLDMsMzcsNDcsMjEsMCw2MCw0MiwxNCwwLDcyLDI2LDM4LDYsMTg2LDQzLDExNyw2MywzMiw3LDMsMCwzLDcsMiwxLDIsMjMsMTYsMCwyLDAsOTUsNywzLDM4LDE3LDAsMiwwLDI5LDAsMTEsMzksOCwwLDIyLDAsMTIsNDUsMjAsMCwxOSw3MiwyNjQsOCwyLDM2LDE4LDAsNTAsMjksMTEzLDYsMiwxLDIsMzcsMjIsMCwyNiw1LDIsMSwyLDMxLDE1LDAsMzI4LDE4LDE5MCwwLDgwLDkyMSwxMDMsMTEwLDE4LDE5NSwyNjM3LDk2LDE2LDEwNzAsNDA1MCw1ODIsODYzNCw1NjgsOCwzMCwxOCw3OCwxOCwyOSwxOSw0NywxNywzLDMyLDIwLDYsMTgsNjg5LDYzLDEyOSw3NCw2LDAsNjcsMTIsNjUsMSwyLDAsMjksNjEzNSw5LDEyMzcsNDMsOCw4OTM2LDMsMiw2LDIsMSwyLDI5MCw0NiwyLDE4LDMsOSwzOTUsMjMwOSwxMDYsNiwxMiw0LDgsOCw5LDU5OTEsODQsMiw3MCwyLDEsMywwLDMsMSwzLDMsMiwxMSwyLDAsMiw2LDIsNjQsMiwzLDMsNywyLDYsMiwyNywyLDMsMiw0LDIsMCw0LDYsMiwzMzksMywyNCwyLDI0LDIsMzAsMiwyNCwyLDMwLDIsMjQsMiwzMCwyLDI0LDIsMzAsMiwyNCwyLDcsMTg0NSwzMCw0ODIsNDQsMTEsNiwxNywwLDMyMiwyOSwxOSw0MywxMjY5LDYsMiwzLDIsMSwyLDE0LDIsMTk2LDYwLDY3LDgsMCwxMjA1LDMsMiwyNiwyLDEsMiwwLDMsMCwyLDksMiwzLDIsMCwyLDAsNywwLDUsMCwyLDAsMiwwLDIsMiwyLDEsMiwwLDMsMCwyLDAsMiwwLDIsMCwyLDAsMiwxLDIsMCwzLDMsMiw2LDIsMywyLDMsMiwwLDIsOSwyLDE2LDYsMiwyLDQsMiwxNiw0NDIxLDQyNzE5LDMzLDQxNTIsOCwyMjEsMyw1NzYxLDE1LDc0NzIsMzEwNCw1NDEsMTUwNyw0OTM4XTtjb25zdCB1dT1bNTA5LDAsMjI3LDAsMTUwLDQsMjk0LDksMTM2OCwyLDIsMSw2LDMsNDEsMiw1LDAsMTY2LDEsNTc0LDMsOSw5LDM3MCwxLDE1NCwxMCw1MCwzLDEyMywyLDU0LDE0LDMyLDEwLDMsMSwxMSwzLDQ2LDEwLDgsMCw0Niw5LDcsMiwzNywxMywyLDksNiwxLDQ1LDAsMTMsMiw0OSwxMyw5LDMsMiwxMSw4MywxMSw3LDAsMTYxLDExLDYsOSw3LDMsNTYsMSwyLDYsMywxLDMsMiwxMCwwLDExLDEsMyw2LDQsNCwxOTMsMTcsMTAsOSw1LDAsODIsMTksMTMsOSwyMTQsNiwzLDgsMjgsMSw4MywxNiwxNiw5LDgyLDEyLDksOSw4NCwxNCw1LDksMjQzLDE0LDE2Niw5LDcxLDUsMiwxLDMsMywyLDAsMiwxLDEzLDksMTIwLDYsMyw2LDQsMCwyOSw5LDQxLDYsMiwzLDksMCwxMCwxMCw0NywxNSw0MDYsNywyLDcsMTcsOSw1NywyMSwyLDEzLDEyMyw1LDQsMCwyLDEsMiw2LDIsMCw5LDksNDksNCwyLDEsMiw0LDksOSwzMzAsMywxOTMwNiw5LDg3LDksMzksNCw2MCw2LDI2LDksMTAxNCwwLDIsNTQsOCwzLDgyLDAsMTIsMSwxOTYyOCwxLDQ3MDYsNDUsMywyMiw1NDMsNCw0LDUsOSw3LDMsNiwzMSwzLDE0OSwyLDE0MTgsNDksNTEzLDU0LDUsNDksOSwwLDE1LDAsMjMsNCwyLDE0LDEzNjEsNiwyLDE2LDMsNiwyLDEsMiw0LDI2Miw2LDEwLDksMzU3LDAsNjIsMTMsMTQ5NSw2LDExMCw2LDYsOSw0NzU5LDksNzg3NzE5LDIzOV07ZnVuY3Rpb24gY3UoZSx0KXtsZXQgcj02NTUzNjtmb3IobGV0IHM9MCxpPXQubGVuZ3RoO3M8aTtzKz0yKXtyKz10W3NdO2lmKHI+ZSlyZXR1cm4gZmFsc2U7cis9dFtzKzFdO2lmKHI+PWUpcmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIGh1KGUpe2lmKGU8NjUpcmV0dXJuIGU9PT0zNjtpZihlPD05MClyZXR1cm4gdHJ1ZTtpZihlPDk3KXJldHVybiBlPT09OTU7aWYoZTw9MTIyKXJldHVybiB0cnVlO2lmKGU8PTY1NTM1KXtyZXR1cm4gZT49MTcwJiZhdS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpfXJldHVybiBjdShlLGx1KX1mdW5jdGlvbiBwdShlKXtpZihlPDQ4KXJldHVybiBlPT09MzY7aWYoZTw1OClyZXR1cm4gdHJ1ZTtpZihlPDY1KXJldHVybiBmYWxzZTtpZihlPD05MClyZXR1cm4gdHJ1ZTtpZihlPDk3KXJldHVybiBlPT09OTU7aWYoZTw9MTIyKXJldHVybiB0cnVlO2lmKGU8PTY1NTM1KXtyZXR1cm4gZT49MTcwJiZvdS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpfXJldHVybiBjdShlLGx1KXx8Y3UoZSx1dSl9Y29uc3QgZnU9e2tleXdvcmQ6WyJicmVhayIsImNhc2UiLCJjYXRjaCIsImNvbnRpbnVlIiwiZGVidWdnZXIiLCJkZWZhdWx0IiwiZG8iLCJlbHNlIiwiZmluYWxseSIsImZvciIsImZ1bmN0aW9uIiwiaWYiLCJyZXR1cm4iLCJzd2l0Y2giLCJ0aHJvdyIsInRyeSIsInZhciIsImNvbnN0Iiwid2hpbGUiLCJ3aXRoIiwibmV3IiwidGhpcyIsInN1cGVyIiwiY2xhc3MiLCJleHRlbmRzIiwiZXhwb3J0IiwiaW1wb3J0IiwibnVsbCIsInRydWUiLCJmYWxzZSIsImluIiwiaW5zdGFuY2VvZiIsInR5cGVvZiIsInZvaWQiLCJkZWxldGUiXSxzdHJpY3Q6WyJpbXBsZW1lbnRzIiwiaW50ZXJmYWNlIiwibGV0IiwicGFja2FnZSIsInByaXZhdGUiLCJwcm90ZWN0ZWQiLCJwdWJsaWMiLCJzdGF0aWMiLCJ5aWVsZCJdLHN0cmljdEJpbmQ6WyJldmFsIiwiYXJndW1lbnRzIl19O2NvbnN0IGR1PW5ldyBTZXQoZnUua2V5d29yZCk7Y29uc3QgbXU9bmV3IFNldChmdS5zdHJpY3QpO2NvbnN0IHl1PW5ldyBTZXQoZnUuc3RyaWN0QmluZCk7ZnVuY3Rpb24gZ3UoZSx0KXtyZXR1cm4gdCYmZT09PSJhd2FpdCJ8fGU9PT0iZW51bSJ9ZnVuY3Rpb24geHUoZSx0KXtyZXR1cm4gZ3UoZSx0KXx8bXUuaGFzKGUpfWZ1bmN0aW9uIHZ1KGUpe3JldHVybiB5dS5oYXMoZSl9ZnVuY3Rpb24gYnUoZSx0KXtyZXR1cm4geHUoZSx0KXx8dnUoZSl9ZnVuY3Rpb24gRXUoZSl7cmV0dXJuIGR1LmhhcyhlKX1mdW5jdGlvbiBTdShlLHQpe3JldHVybiBlPT09NjQmJnQ9PT02NH1jb25zdCBUdT1uZXcgU2V0KFsiYnJlYWsiLCJjYXNlIiwiY2F0Y2giLCJjb250aW51ZSIsImRlYnVnZ2VyIiwiZGVmYXVsdCIsImRvIiwiZWxzZSIsImZpbmFsbHkiLCJmb3IiLCJmdW5jdGlvbiIsImlmIiwicmV0dXJuIiwic3dpdGNoIiwidGhyb3ciLCJ0cnkiLCJ2YXIiLCJjb25zdCIsIndoaWxlIiwid2l0aCIsIm5ldyIsInRoaXMiLCJzdXBlciIsImNsYXNzIiwiZXh0ZW5kcyIsImV4cG9ydCIsImltcG9ydCIsIm51bGwiLCJ0cnVlIiwiZmFsc2UiLCJpbiIsImluc3RhbmNlb2YiLCJ0eXBlb2YiLCJ2b2lkIiwiZGVsZXRlIiwiaW1wbGVtZW50cyIsImludGVyZmFjZSIsImxldCIsInBhY2thZ2UiLCJwcml2YXRlIiwicHJvdGVjdGVkIiwicHVibGljIiwic3RhdGljIiwieWllbGQiLCJldmFsIiwiYXJndW1lbnRzIiwiZW51bSIsImF3YWl0Il0pO2Z1bmN0aW9uIEF1KGUpe3JldHVybiBUdS5oYXMoZSl9Y29uc3Qgd3U9MCxDdT0xLFB1PTIsRHU9NCxrdT04LE51PTE2LEl1PTMyLEZ1PTY0LE11PTEyOCxfdT0yNTYsT3U9Q3V8UHV8X3U7Y29uc3QgTHU9MSxCdT0yLFJ1PTQsanU9OCxVdT0xNix6dT02NCxWdT0xMjgscXU9MjU2LEd1PTUxMixYdT0xMDI0LEp1PTIwNDg7Y29uc3QgSHU9THV8QnV8anV8VnUsV3U9THV8MHxqdXwwLEt1PUx1fDB8UnV8MCwkdT1MdXwwfFV1fDAsWXU9MHxCdXwwfFZ1LFF1PTB8QnV8MHwwLFp1PUx1fEJ1fGp1fHF1LGVjPTB8MHwwfFh1LHRjPTB8MHwwfHp1LHJjPUx1fDB8MHx6dSxzYz1adXxHdSxpYz0wfDB8MHxYdSxuYz1KdTtjb25zdCBhYz00LG9jPTIsbGM9MSx1Yz1vY3xsYztjb25zdCBjYz1vY3xhYyxoYz1sY3xhYyxwYz1vYyxmYz1sYyxkYz0wO2NsYXNzIG1je2NvbnN0cnVjdG9yKGUpe3RoaXMudmFyPW5ldyBTZXQ7dGhpcy5sZXhpY2FsPW5ldyBTZXQ7dGhpcy5mdW5jdGlvbnM9bmV3IFNldDt0aGlzLmZsYWdzPWV9fWNsYXNzIHlje2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5zY29wZVN0YWNrPVtdO3RoaXMudW5kZWZpbmVkRXhwb3J0cz1uZXcgTWFwO3RoaXMudW5kZWZpbmVkUHJpdmF0ZU5hbWVzPW5ldyBNYXA7dGhpcy5yYWlzZT1lO3RoaXMuaW5Nb2R1bGU9dH1nZXQgaW5GdW5jdGlvbigpe3JldHVybih0aGlzLmN1cnJlbnRWYXJTY29wZUZsYWdzKCkmUHUpPjB9Z2V0IGFsbG93U3VwZXIoKXtyZXR1cm4odGhpcy5jdXJyZW50VGhpc1Njb3BlRmxhZ3MoKSZOdSk+MH1nZXQgYWxsb3dEaXJlY3RTdXBlcigpe3JldHVybih0aGlzLmN1cnJlbnRUaGlzU2NvcGVGbGFncygpJkl1KT4wfWdldCBpbkNsYXNzKCl7cmV0dXJuKHRoaXMuY3VycmVudFRoaXNTY29wZUZsYWdzKCkmRnUpPjB9Z2V0IGluQ2xhc3NBbmROb3RJbk5vbkFycm93RnVuY3Rpb24oKXtjb25zdCBlPXRoaXMuY3VycmVudFRoaXNTY29wZUZsYWdzKCk7cmV0dXJuKGUmRnUpPjAmJihlJlB1KT09PTB9Z2V0IGluU3RhdGljQmxvY2soKXtmb3IobGV0IGU9dGhpcy5zY29wZVN0YWNrLmxlbmd0aC0xOztlLS0pe2NvbnN0e2ZsYWdzOnR9PXRoaXMuc2NvcGVTdGFja1tlXTtpZih0Jk11KXtyZXR1cm4gdHJ1ZX1pZih0JihPdXxGdSkpe3JldHVybiBmYWxzZX19fWdldCBpbk5vbkFycm93RnVuY3Rpb24oKXtyZXR1cm4odGhpcy5jdXJyZW50VGhpc1Njb3BlRmxhZ3MoKSZQdSk+MH1nZXQgdHJlYXRGdW5jdGlvbnNBc1Zhcigpe3JldHVybiB0aGlzLnRyZWF0RnVuY3Rpb25zQXNWYXJJblNjb3BlKHRoaXMuY3VycmVudFNjb3BlKCkpfWNyZWF0ZVNjb3BlKGUpe3JldHVybiBuZXcgbWMoZSl9ZW50ZXIoZSl7dGhpcy5zY29wZVN0YWNrLnB1c2godGhpcy5jcmVhdGVTY29wZShlKSl9ZXhpdCgpe3RoaXMuc2NvcGVTdGFjay5wb3AoKX10cmVhdEZ1bmN0aW9uc0FzVmFySW5TY29wZShlKXtyZXR1cm4hIShlLmZsYWdzJlB1fHwhdGhpcy5pbk1vZHVsZSYmZS5mbGFncyZDdSl9ZGVjbGFyZU5hbWUoZSx0LHIpe2xldCBzPXRoaXMuY3VycmVudFNjb3BlKCk7aWYodCZqdXx8dCZVdSl7dGhpcy5jaGVja1JlZGVjbGFyYXRpb25JblNjb3BlKHMsZSx0LHIpO2lmKHQmVXUpe3MuZnVuY3Rpb25zLmFkZChlKX1lbHNle3MubGV4aWNhbC5hZGQoZSl9aWYodCZqdSl7dGhpcy5tYXliZUV4cG9ydERlZmluZWQocyxlKX19ZWxzZSBpZih0JlJ1KXtmb3IobGV0IGk9dGhpcy5zY29wZVN0YWNrLmxlbmd0aC0xO2k+PTA7LS1pKXtzPXRoaXMuc2NvcGVTdGFja1tpXTt0aGlzLmNoZWNrUmVkZWNsYXJhdGlvbkluU2NvcGUocyxlLHQscik7cy52YXIuYWRkKGUpO3RoaXMubWF5YmVFeHBvcnREZWZpbmVkKHMsZSk7aWYocy5mbGFncyZPdSlicmVha319aWYodGhpcy5pbk1vZHVsZSYmcy5mbGFncyZDdSl7dGhpcy51bmRlZmluZWRFeHBvcnRzLmRlbGV0ZShlKX19bWF5YmVFeHBvcnREZWZpbmVkKGUsdCl7aWYodGhpcy5pbk1vZHVsZSYmZS5mbGFncyZDdSl7dGhpcy51bmRlZmluZWRFeHBvcnRzLmRlbGV0ZSh0KX19Y2hlY2tSZWRlY2xhcmF0aW9uSW5TY29wZShlLHQscixzKXtpZih0aGlzLmlzUmVkZWNsYXJlZEluU2NvcGUoZSx0LHIpKXt0aGlzLnJhaXNlKHMsY2wuVmFyUmVkZWNsYXJhdGlvbix0KX19aXNSZWRlY2xhcmVkSW5TY29wZShlLHQscil7aWYoIShyJkx1KSlyZXR1cm4gZmFsc2U7aWYociZqdSl7cmV0dXJuIGUubGV4aWNhbC5oYXModCl8fGUuZnVuY3Rpb25zLmhhcyh0KXx8ZS52YXIuaGFzKHQpfWlmKHImVXUpe3JldHVybiBlLmxleGljYWwuaGFzKHQpfHwhdGhpcy50cmVhdEZ1bmN0aW9uc0FzVmFySW5TY29wZShlKSYmZS52YXIuaGFzKHQpfXJldHVybiBlLmxleGljYWwuaGFzKHQpJiYhKGUuZmxhZ3Mma3UmJmUubGV4aWNhbC52YWx1ZXMoKS5uZXh0KCkudmFsdWU9PT10KXx8IXRoaXMudHJlYXRGdW5jdGlvbnNBc1ZhckluU2NvcGUoZSkmJmUuZnVuY3Rpb25zLmhhcyh0KX1jaGVja0xvY2FsRXhwb3J0KGUpe2NvbnN0e25hbWU6dH09ZTtjb25zdCByPXRoaXMuc2NvcGVTdGFja1swXTtpZighci5sZXhpY2FsLmhhcyh0KSYmIXIudmFyLmhhcyh0KSYmIXIuZnVuY3Rpb25zLmhhcyh0KSl7dGhpcy51bmRlZmluZWRFeHBvcnRzLnNldCh0LGUuc3RhcnQpfX1jdXJyZW50U2NvcGUoKXtyZXR1cm4gdGhpcy5zY29wZVN0YWNrW3RoaXMuc2NvcGVTdGFjay5sZW5ndGgtMV19Y3VycmVudFZhclNjb3BlRmxhZ3MoKXtmb3IobGV0IGU9dGhpcy5zY29wZVN0YWNrLmxlbmd0aC0xOztlLS0pe2NvbnN0e2ZsYWdzOnR9PXRoaXMuc2NvcGVTdGFja1tlXTtpZih0Jk91KXtyZXR1cm4gdH19fWN1cnJlbnRUaGlzU2NvcGVGbGFncygpe2ZvcihsZXQgZT10aGlzLnNjb3BlU3RhY2subGVuZ3RoLTE7O2UtLSl7Y29uc3R7ZmxhZ3M6dH09dGhpcy5zY29wZVN0YWNrW2VdO2lmKHQmKE91fEZ1KSYmISh0JkR1KSl7cmV0dXJuIHR9fX19Y2xhc3MgZ2MgZXh0ZW5kcyBtY3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7dGhpcy5kZWNsYXJlRnVuY3Rpb25zPW5ldyBTZXR9fWNsYXNzIHhjIGV4dGVuZHMgeWN7Y3JlYXRlU2NvcGUoZSl7cmV0dXJuIG5ldyBnYyhlKX1kZWNsYXJlTmFtZShlLHQscil7Y29uc3Qgcz10aGlzLmN1cnJlbnRTY29wZSgpO2lmKHQmSnUpe3RoaXMuY2hlY2tSZWRlY2xhcmF0aW9uSW5TY29wZShzLGUsdCxyKTt0aGlzLm1heWJlRXhwb3J0RGVmaW5lZChzLGUpO3MuZGVjbGFyZUZ1bmN0aW9ucy5hZGQoZSk7cmV0dXJufXN1cGVyLmRlY2xhcmVOYW1lKC4uLmFyZ3VtZW50cyl9aXNSZWRlY2xhcmVkSW5TY29wZShlLHQscil7aWYoc3VwZXIuaXNSZWRlY2xhcmVkSW5TY29wZSguLi5hcmd1bWVudHMpKXJldHVybiB0cnVlO2lmKHImSnUpe3JldHVybiFlLmRlY2xhcmVGdW5jdGlvbnMuaGFzKHQpJiYoZS5sZXhpY2FsLmhhcyh0KXx8ZS5mdW5jdGlvbnMuaGFzKHQpKX1yZXR1cm4gZmFsc2V9Y2hlY2tMb2NhbEV4cG9ydChlKXtpZighdGhpcy5zY29wZVN0YWNrWzBdLmRlY2xhcmVGdW5jdGlvbnMuaGFzKGUubmFtZSkpe3N1cGVyLmNoZWNrTG9jYWxFeHBvcnQoZSl9fX1jbGFzcyB2Y3tjb25zdHJ1Y3Rvcigpe3RoaXMuc3RyaWN0PXZvaWQgMDt0aGlzLmN1ckxpbmU9dm9pZCAwO3RoaXMubGluZVN0YXJ0PXZvaWQgMDt0aGlzLnN0YXJ0TG9jPXZvaWQgMDt0aGlzLmVuZExvYz12b2lkIDA7dGhpcy5lcnJvcnM9W107dGhpcy5wb3RlbnRpYWxBcnJvd0F0PS0xO3RoaXMubm9BcnJvd0F0PVtdO3RoaXMubm9BcnJvd1BhcmFtc0NvbnZlcnNpb25BdD1bXTt0aGlzLm1heWJlSW5BcnJvd1BhcmFtZXRlcnM9ZmFsc2U7dGhpcy5pblR5cGU9ZmFsc2U7dGhpcy5ub0Fub25GdW5jdGlvblR5cGU9ZmFsc2U7dGhpcy5oYXNGbG93Q29tbWVudD1mYWxzZTt0aGlzLmlzQW1iaWVudENvbnRleHQ9ZmFsc2U7dGhpcy5pbkFic3RyYWN0Q2xhc3M9ZmFsc2U7dGhpcy50b3BpY0NvbnRleHQ9e21heE51bU9mUmVzb2x2YWJsZVRvcGljczowLG1heFRvcGljSW5kZXg6bnVsbH07dGhpcy5zb2xvQXdhaXQ9ZmFsc2U7dGhpcy5pbkZTaGFycFBpcGVsaW5lRGlyZWN0Qm9keT1mYWxzZTt0aGlzLmxhYmVscz1bXTt0aGlzLmRlY29yYXRvclN0YWNrPVtbXV07dGhpcy5jb21tZW50cz1bXTt0aGlzLmNvbW1lbnRTdGFjaz1bXTt0aGlzLnBvcz0wO3RoaXMudHlwZT0xMjk7dGhpcy52YWx1ZT1udWxsO3RoaXMuc3RhcnQ9MDt0aGlzLmVuZD0wO3RoaXMubGFzdFRva0VuZExvYz1udWxsO3RoaXMubGFzdFRva1N0YXJ0TG9jPW51bGw7dGhpcy5sYXN0VG9rU3RhcnQ9MDt0aGlzLmxhc3RUb2tFbmQ9MDt0aGlzLmNvbnRleHQ9W2dsLmJyYWNlXTt0aGlzLmNhblN0YXJ0SlNYRWxlbWVudD10cnVlO3RoaXMuY29udGFpbnNFc2M9ZmFsc2U7dGhpcy5zdHJpY3RFcnJvcnM9bmV3IE1hcDt0aGlzLnRva2Vuc0xlbmd0aD0wfWluaXQoZSl7bGV0e3N0cmljdE1vZGU6dCxzb3VyY2VUeXBlOnIsc3RhcnRMaW5lOnMsc3RhcnRDb2x1bW46aX09ZTt0aGlzLnN0cmljdD10PT09ZmFsc2U/ZmFsc2U6dD09PXRydWU/dHJ1ZTpyPT09Im1vZHVsZSI7dGhpcy5jdXJMaW5lPXM7dGhpcy5saW5lU3RhcnQ9LWk7dGhpcy5zdGFydExvYz10aGlzLmVuZExvYz1uZXcgZWwocyxpKX1jdXJQb3NpdGlvbigpe3JldHVybiBuZXcgZWwodGhpcy5jdXJMaW5lLHRoaXMucG9zLXRoaXMubGluZVN0YXJ0KX1jbG9uZShlKXtjb25zdCB0PW5ldyB2Yztjb25zdCByPU9iamVjdC5rZXlzKHRoaXMpO2ZvcihsZXQgcz0wLGk9ci5sZW5ndGg7czxpO3MrKyl7Y29uc3QgaT1yW3NdO2xldCBuPXRoaXNbaV07aWYoIWUmJkFycmF5LmlzQXJyYXkobikpe249bi5zbGljZSgpfXRbaV09bn1yZXR1cm4gdH19dmFyIGJjPWZ1bmN0aW9uIGUodCl7cmV0dXJuIHQ+PTQ4JiZ0PD01N307Y29uc3QgRWM9bmV3IFNldChbMTAzLDEwOSwxMTUsMTA1LDEyMSwxMTcsMTAwXSk7Y29uc3QgU2M9e2RlY0Jpbk9jdDpbNDYsNjYsNjksNzksOTUsOTgsMTAxLDExMV0saGV4Ols0Niw4OCw5NSwxMjBdfTtjb25zdCBUYz17fTtUYy5iaW49WzQ4LDQ5XTtUYy5vY3Q9Wy4uLlRjLmJpbiw1MCw1MSw1Miw1Myw1NCw1NV07VGMuZGVjPVsuLi5UYy5vY3QsNTYsNTddO1RjLmhleD1bLi4uVGMuZGVjLDY1LDY2LDY3LDY4LDY5LDcwLDk3LDk4LDk5LDEwMCwxMDEsMTAyXTtjbGFzcyBBY3tjb25zdHJ1Y3RvcihlKXt0aGlzLnR5cGU9ZS50eXBlO3RoaXMudmFsdWU9ZS52YWx1ZTt0aGlzLnN0YXJ0PWUuc3RhcnQ7dGhpcy5lbmQ9ZS5lbmQ7dGhpcy5sb2M9bmV3IHRsKGUuc3RhcnRMb2MsZS5lbmRMb2MpfX1jbGFzcyB3YyBleHRlbmRzIGRse2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKTt0aGlzLmlzTG9va2FoZWFkPXZvaWQgMDt0aGlzLnRva2Vucz1bXTt0aGlzLnN0YXRlPW5ldyB2Yzt0aGlzLnN0YXRlLmluaXQoZSk7dGhpcy5pbnB1dD10O3RoaXMubGVuZ3RoPXQubGVuZ3RoO3RoaXMuaXNMb29rYWhlYWQ9ZmFsc2V9cHVzaFRva2VuKGUpe3RoaXMudG9rZW5zLmxlbmd0aD10aGlzLnN0YXRlLnRva2Vuc0xlbmd0aDt0aGlzLnRva2Vucy5wdXNoKGUpOysrdGhpcy5zdGF0ZS50b2tlbnNMZW5ndGh9bmV4dCgpe3RoaXMuY2hlY2tLZXl3b3JkRXNjYXBlcygpO2lmKHRoaXMub3B0aW9ucy50b2tlbnMpe3RoaXMucHVzaFRva2VuKG5ldyBBYyh0aGlzLnN0YXRlKSl9dGhpcy5zdGF0ZS5sYXN0VG9rRW5kPXRoaXMuc3RhdGUuZW5kO3RoaXMuc3RhdGUubGFzdFRva1N0YXJ0PXRoaXMuc3RhdGUuc3RhcnQ7dGhpcy5zdGF0ZS5sYXN0VG9rRW5kTG9jPXRoaXMuc3RhdGUuZW5kTG9jO3RoaXMuc3RhdGUubGFzdFRva1N0YXJ0TG9jPXRoaXMuc3RhdGUuc3RhcnRMb2M7dGhpcy5uZXh0VG9rZW4oKX1lYXQoZSl7aWYodGhpcy5tYXRjaChlKSl7dGhpcy5uZXh0KCk7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fW1hdGNoKGUpe3JldHVybiB0aGlzLnN0YXRlLnR5cGU9PT1lfWNyZWF0ZUxvb2thaGVhZFN0YXRlKGUpe3JldHVybntwb3M6ZS5wb3MsdmFsdWU6bnVsbCx0eXBlOmUudHlwZSxzdGFydDplLnN0YXJ0LGVuZDplLmVuZCxsYXN0VG9rRW5kOmUuZW5kLGNvbnRleHQ6W3RoaXMuY3VyQ29udGV4dCgpXSxpblR5cGU6ZS5pblR5cGV9fWxvb2thaGVhZCgpe2NvbnN0IGU9dGhpcy5zdGF0ZTt0aGlzLnN0YXRlPXRoaXMuY3JlYXRlTG9va2FoZWFkU3RhdGUoZSk7dGhpcy5pc0xvb2thaGVhZD10cnVlO3RoaXMubmV4dFRva2VuKCk7dGhpcy5pc0xvb2thaGVhZD1mYWxzZTtjb25zdCB0PXRoaXMuc3RhdGU7dGhpcy5zdGF0ZT1lO3JldHVybiB0fW5leHRUb2tlblN0YXJ0KCl7cmV0dXJuIHRoaXMubmV4dFRva2VuU3RhcnRTaW5jZSh0aGlzLnN0YXRlLnBvcyl9bmV4dFRva2VuU3RhcnRTaW5jZShlKXskby5sYXN0SW5kZXg9ZTtyZXR1cm4gJG8udGVzdCh0aGlzLmlucHV0KT8kby5sYXN0SW5kZXg6ZX1sb29rYWhlYWRDaGFyQ29kZSgpe3JldHVybiB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5uZXh0VG9rZW5TdGFydCgpKX1jb2RlUG9pbnRBdFBvcyhlKXtsZXQgdD10aGlzLmlucHV0LmNoYXJDb2RlQXQoZSk7aWYoKHQmNjQ1MTIpPT09NTUyOTYmJisrZTx0aGlzLmlucHV0Lmxlbmd0aCl7Y29uc3Qgcj10aGlzLmlucHV0LmNoYXJDb2RlQXQoZSk7aWYoKHImNjQ1MTIpPT09NTYzMjApe3Q9NjU1MzYrKCh0JjEwMjMpPDwxMCkrKHImMTAyMyl9fXJldHVybiB0fXNldFN0cmljdChlKXt0aGlzLnN0YXRlLnN0cmljdD1lO2lmKGUpe3RoaXMuc3RhdGUuc3RyaWN0RXJyb3JzLmZvckVhY2goKChlLHQpPT50aGlzLnJhaXNlKHQsZSkpKTt0aGlzLnN0YXRlLnN0cmljdEVycm9ycy5jbGVhcigpfX1jdXJDb250ZXh0KCl7cmV0dXJuIHRoaXMuc3RhdGUuY29udGV4dFt0aGlzLnN0YXRlLmNvbnRleHQubGVuZ3RoLTFdfW5leHRUb2tlbigpe2NvbnN0IGU9dGhpcy5jdXJDb250ZXh0KCk7aWYoIWUucHJlc2VydmVTcGFjZSl0aGlzLnNraXBTcGFjZSgpO3RoaXMuc3RhdGUuc3RhcnQ9dGhpcy5zdGF0ZS5wb3M7aWYoIXRoaXMuaXNMb29rYWhlYWQpdGhpcy5zdGF0ZS5zdGFydExvYz10aGlzLnN0YXRlLmN1clBvc2l0aW9uKCk7aWYodGhpcy5zdGF0ZS5wb3M+PXRoaXMubGVuZ3RoKXt0aGlzLmZpbmlzaFRva2VuKDEyOSk7cmV0dXJufWlmKGU9PT1nbC50ZW1wbGF0ZSl7dGhpcy5yZWFkVG1wbFRva2VuKCl9ZWxzZXt0aGlzLmdldFRva2VuRnJvbUNvZGUodGhpcy5jb2RlUG9pbnRBdFBvcyh0aGlzLnN0YXRlLnBvcykpfX1za2lwQmxvY2tDb21tZW50KCl7bGV0IGU7aWYoIXRoaXMuaXNMb29rYWhlYWQpZT10aGlzLnN0YXRlLmN1clBvc2l0aW9uKCk7Y29uc3QgdD10aGlzLnN0YXRlLnBvcztjb25zdCByPXRoaXMuaW5wdXQuaW5kZXhPZigiKi8iLHQrMik7aWYocj09PS0xKXRocm93IHRoaXMucmFpc2UodCxjbC5VbnRlcm1pbmF0ZWRDb21tZW50KTt0aGlzLnN0YXRlLnBvcz1yKzI7V28ubGFzdEluZGV4PXQrMjt3aGlsZShXby50ZXN0KHRoaXMuaW5wdXQpJiZXby5sYXN0SW5kZXg8PXIpeysrdGhpcy5zdGF0ZS5jdXJMaW5lO3RoaXMuc3RhdGUubGluZVN0YXJ0PVdvLmxhc3RJbmRleH1pZih0aGlzLmlzTG9va2FoZWFkKXJldHVybjtjb25zdCBzPXt0eXBlOiJDb21tZW50QmxvY2siLHZhbHVlOnRoaXMuaW5wdXQuc2xpY2UodCsyLHIpLHN0YXJ0OnQsZW5kOnIrMixsb2M6bmV3IHRsKGUsdGhpcy5zdGF0ZS5jdXJQb3NpdGlvbigpKX07aWYodGhpcy5vcHRpb25zLnRva2Vucyl0aGlzLnB1c2hUb2tlbihzKTtyZXR1cm4gc31za2lwTGluZUNvbW1lbnQoZSl7Y29uc3QgdD10aGlzLnN0YXRlLnBvcztsZXQgcjtpZighdGhpcy5pc0xvb2thaGVhZClyPXRoaXMuc3RhdGUuY3VyUG9zaXRpb24oKTtsZXQgcz10aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MrPWUpO2lmKHRoaXMuc3RhdGUucG9zPHRoaXMubGVuZ3RoKXt3aGlsZSghS28ocykmJisrdGhpcy5zdGF0ZS5wb3M8dGhpcy5sZW5ndGgpe3M9dGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zKX19aWYodGhpcy5pc0xvb2thaGVhZClyZXR1cm47Y29uc3QgaT10aGlzLnN0YXRlLnBvcztjb25zdCBuPXRoaXMuaW5wdXQuc2xpY2UodCtlLGkpO2NvbnN0IGE9e3R5cGU6IkNvbW1lbnRMaW5lIix2YWx1ZTpuLHN0YXJ0OnQsZW5kOmksbG9jOm5ldyB0bChyLHRoaXMuc3RhdGUuY3VyUG9zaXRpb24oKSl9O2lmKHRoaXMub3B0aW9ucy50b2tlbnMpdGhpcy5wdXNoVG9rZW4oYSk7cmV0dXJuIGF9c2tpcFNwYWNlKCl7Y29uc3QgZT10aGlzLnN0YXRlLnBvcztjb25zdCB0PVtdO2U6d2hpbGUodGhpcy5zdGF0ZS5wb3M8dGhpcy5sZW5ndGgpe2NvbnN0IHI9dGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zKTtzd2l0Y2gocil7Y2FzZSAzMjpjYXNlIDE2MDpjYXNlIDk6Kyt0aGlzLnN0YXRlLnBvczticmVhaztjYXNlIDEzOmlmKHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcysxKT09PTEwKXsrK3RoaXMuc3RhdGUucG9zfWNhc2UgMTA6Y2FzZSA4MjMyOmNhc2UgODIzMzorK3RoaXMuc3RhdGUucG9zOysrdGhpcy5zdGF0ZS5jdXJMaW5lO3RoaXMuc3RhdGUubGluZVN0YXJ0PXRoaXMuc3RhdGUucG9zO2JyZWFrO2Nhc2UgNDc6c3dpdGNoKHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcysxKSl7Y2FzZSA0Mjp7Y29uc3QgZT10aGlzLnNraXBCbG9ja0NvbW1lbnQoKTtpZihlIT09dW5kZWZpbmVkKXt0aGlzLmFkZENvbW1lbnQoZSk7aWYodGhpcy5vcHRpb25zLmF0dGFjaENvbW1lbnQpdC5wdXNoKGUpfWJyZWFrfWNhc2UgNDc6e2NvbnN0IGU9dGhpcy5za2lwTGluZUNvbW1lbnQoMik7aWYoZSE9PXVuZGVmaW5lZCl7dGhpcy5hZGRDb21tZW50KGUpO2lmKHRoaXMub3B0aW9ucy5hdHRhY2hDb21tZW50KXQucHVzaChlKX1icmVha31kZWZhdWx0OmJyZWFrIGV9YnJlYWs7ZGVmYXVsdDppZihabyhyKSl7Kyt0aGlzLnN0YXRlLnBvc31lbHNlIGlmKHI9PT00NSYmIXRoaXMuaW5Nb2R1bGUpe2NvbnN0IHI9dGhpcy5zdGF0ZS5wb3M7aWYodGhpcy5pbnB1dC5jaGFyQ29kZUF0KHIrMSk9PT00NSYmdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHIrMik9PT02MiYmKGU9PT0wfHx0aGlzLnN0YXRlLmxpbmVTdGFydD5lKSl7Y29uc3QgZT10aGlzLnNraXBMaW5lQ29tbWVudCgzKTtpZihlIT09dW5kZWZpbmVkKXt0aGlzLmFkZENvbW1lbnQoZSk7aWYodGhpcy5vcHRpb25zLmF0dGFjaENvbW1lbnQpdC5wdXNoKGUpfX1lbHNle2JyZWFrIGV9fWVsc2UgaWYocj09PTYwJiYhdGhpcy5pbk1vZHVsZSl7Y29uc3QgZT10aGlzLnN0YXRlLnBvcztpZih0aGlzLmlucHV0LmNoYXJDb2RlQXQoZSsxKT09PTMzJiZ0aGlzLmlucHV0LmNoYXJDb2RlQXQoZSsyKT09PTQ1JiZ0aGlzLmlucHV0LmNoYXJDb2RlQXQoZSszKT09PTQ1KXtjb25zdCBlPXRoaXMuc2tpcExpbmVDb21tZW50KDQpO2lmKGUhPT11bmRlZmluZWQpe3RoaXMuYWRkQ29tbWVudChlKTtpZih0aGlzLm9wdGlvbnMuYXR0YWNoQ29tbWVudCl0LnB1c2goZSl9fWVsc2V7YnJlYWsgZX19ZWxzZXticmVhayBlfX19aWYodC5sZW5ndGg+MCl7Y29uc3Qgcj10aGlzLnN0YXRlLnBvcztjb25zdCBzPXtzdGFydDplLGVuZDpyLGNvbW1lbnRzOnQsbGVhZGluZ05vZGU6bnVsbCx0cmFpbGluZ05vZGU6bnVsbCxjb250YWluaW5nTm9kZTpudWxsfTt0aGlzLnN0YXRlLmNvbW1lbnRTdGFjay5wdXNoKHMpfX1maW5pc2hUb2tlbihlLHQpe3RoaXMuc3RhdGUuZW5kPXRoaXMuc3RhdGUucG9zO2NvbnN0IHI9dGhpcy5zdGF0ZS50eXBlO3RoaXMuc3RhdGUudHlwZT1lO3RoaXMuc3RhdGUudmFsdWU9dDtpZighdGhpcy5pc0xvb2thaGVhZCl7dGhpcy5zdGF0ZS5lbmRMb2M9dGhpcy5zdGF0ZS5jdXJQb3NpdGlvbigpO3RoaXMudXBkYXRlQ29udGV4dChyKX19cmVwbGFjZVRva2VuKGUpe3RoaXMuc3RhdGUudHlwZT1lO3RoaXMudXBkYXRlQ29udGV4dCgpfXJlYWRUb2tlbl9udW1iZXJTaWduKCl7aWYodGhpcy5zdGF0ZS5wb3M9PT0wJiZ0aGlzLnJlYWRUb2tlbl9pbnRlcnByZXRlcigpKXtyZXR1cm59Y29uc3QgZT10aGlzLnN0YXRlLnBvcysxO2NvbnN0IHQ9dGhpcy5jb2RlUG9pbnRBdFBvcyhlKTtpZih0Pj00OCYmdDw9NTcpe3Rocm93IHRoaXMucmFpc2UodGhpcy5zdGF0ZS5wb3MsY2wuVW5leHBlY3RlZERpZ2l0QWZ0ZXJIYXNoKX1pZih0PT09MTIzfHx0PT09OTEmJnRoaXMuaGFzUGx1Z2luKCJyZWNvcmRBbmRUdXBsZSIpKXt0aGlzLmV4cGVjdFBsdWdpbigicmVjb3JkQW5kVHVwbGUiKTtpZih0aGlzLmdldFBsdWdpbk9wdGlvbigicmVjb3JkQW5kVHVwbGUiLCJzeW50YXhUeXBlIikhPT0iaGFzaCIpe3Rocm93IHRoaXMucmFpc2UodGhpcy5zdGF0ZS5wb3MsdD09PTEyMz9jbC5SZWNvcmRFeHByZXNzaW9uSGFzaEluY29ycmVjdFN0YXJ0U3ludGF4VHlwZTpjbC5UdXBsZUV4cHJlc3Npb25IYXNoSW5jb3JyZWN0U3RhcnRTeW50YXhUeXBlKX10aGlzLnN0YXRlLnBvcys9MjtpZih0PT09MTIzKXt0aGlzLmZpbmlzaFRva2VuKDcpfWVsc2V7dGhpcy5maW5pc2hUb2tlbigxKX19ZWxzZSBpZihodSh0KSl7Kyt0aGlzLnN0YXRlLnBvczt0aGlzLmZpbmlzaFRva2VuKDEyOCx0aGlzLnJlYWRXb3JkMSh0KSl9ZWxzZSBpZih0PT09OTIpeysrdGhpcy5zdGF0ZS5wb3M7dGhpcy5maW5pc2hUb2tlbigxMjgsdGhpcy5yZWFkV29yZDEoKSl9ZWxzZXt0aGlzLmZpbmlzaE9wKDI1LDEpfX1yZWFkVG9rZW5fZG90KCl7Y29uc3QgZT10aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MrMSk7aWYoZT49NDgmJmU8PTU3KXt0aGlzLnJlYWROdW1iZXIodHJ1ZSk7cmV0dXJufWlmKGU9PT00NiYmdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zKzIpPT09NDYpe3RoaXMuc3RhdGUucG9zKz0zO3RoaXMuZmluaXNoVG9rZW4oMjEpfWVsc2V7Kyt0aGlzLnN0YXRlLnBvczt0aGlzLmZpbmlzaFRva2VuKDE2KX19cmVhZFRva2VuX3NsYXNoKCl7Y29uc3QgZT10aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MrMSk7aWYoZT09PTYxKXt0aGlzLmZpbmlzaE9wKDI5LDIpfWVsc2V7dGhpcy5maW5pc2hPcCg1MCwxKX19cmVhZFRva2VuX2ludGVycHJldGVyKCl7aWYodGhpcy5zdGF0ZS5wb3MhPT0wfHx0aGlzLmxlbmd0aDwyKXJldHVybiBmYWxzZTtsZXQgZT10aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MrMSk7aWYoZSE9PTMzKXJldHVybiBmYWxzZTtjb25zdCB0PXRoaXMuc3RhdGUucG9zO3RoaXMuc3RhdGUucG9zKz0xO3doaWxlKCFLbyhlKSYmKyt0aGlzLnN0YXRlLnBvczx0aGlzLmxlbmd0aCl7ZT10aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MpfWNvbnN0IHI9dGhpcy5pbnB1dC5zbGljZSh0KzIsdGhpcy5zdGF0ZS5wb3MpO3RoaXMuZmluaXNoVG9rZW4oMjYscik7cmV0dXJuIHRydWV9cmVhZFRva2VuX211bHRfbW9kdWxvKGUpe2xldCB0PWU9PT00Mj80OTo0ODtsZXQgcj0xO2xldCBzPXRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcysxKTtpZihlPT09NDImJnM9PT00Mil7cisrO3M9dGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zKzIpO3Q9NTF9aWYocz09PTYxJiYhdGhpcy5zdGF0ZS5pblR5cGUpe3IrKzt0PWU9PT0zNz8zMToyOH10aGlzLmZpbmlzaE9wKHQscil9cmVhZFRva2VuX3BpcGVfYW1wKGUpe2NvbnN0IHQ9dGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zKzEpO2lmKHQ9PT1lKXtpZih0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MrMik9PT02MSl7dGhpcy5maW5pc2hPcCgyOCwzKX1lbHNle3RoaXMuZmluaXNoT3AoZT09PTEyND8zNzozOCwyKX1yZXR1cm59aWYoZT09PTEyNCl7aWYodD09PTYyKXt0aGlzLmZpbmlzaE9wKDM1LDIpO3JldHVybn1pZih0aGlzLmhhc1BsdWdpbigicmVjb3JkQW5kVHVwbGUiKSYmdD09PTEyNSl7aWYodGhpcy5nZXRQbHVnaW5PcHRpb24oInJlY29yZEFuZFR1cGxlIiwic3ludGF4VHlwZSIpIT09ImJhciIpe3Rocm93IHRoaXMucmFpc2UodGhpcy5zdGF0ZS5wb3MsY2wuUmVjb3JkRXhwcmVzc2lvbkJhckluY29ycmVjdEVuZFN5bnRheFR5cGUpfXRoaXMuc3RhdGUucG9zKz0yO3RoaXMuZmluaXNoVG9rZW4oOSk7cmV0dXJufWlmKHRoaXMuaGFzUGx1Z2luKCJyZWNvcmRBbmRUdXBsZSIpJiZ0PT09OTMpe2lmKHRoaXMuZ2V0UGx1Z2luT3B0aW9uKCJyZWNvcmRBbmRUdXBsZSIsInN5bnRheFR5cGUiKSE9PSJiYXIiKXt0aHJvdyB0aGlzLnJhaXNlKHRoaXMuc3RhdGUucG9zLGNsLlR1cGxlRXhwcmVzc2lvbkJhckluY29ycmVjdEVuZFN5bnRheFR5cGUpfXRoaXMuc3RhdGUucG9zKz0yO3RoaXMuZmluaXNoVG9rZW4oNCk7cmV0dXJufX1pZih0PT09NjEpe3RoaXMuZmluaXNoT3AoMjgsMik7cmV0dXJufXRoaXMuZmluaXNoT3AoZT09PTEyND8zOTo0MSwxKX1yZWFkVG9rZW5fY2FyZXQoKXtjb25zdCBlPXRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcysxKTtpZihlPT09NjEmJiF0aGlzLnN0YXRlLmluVHlwZSl7dGhpcy5maW5pc2hPcCgzMCwyKX1lbHNle3RoaXMuZmluaXNoT3AoNDAsMSl9fXJlYWRUb2tlbl9wbHVzX21pbihlKXtjb25zdCB0PXRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcysxKTtpZih0PT09ZSl7dGhpcy5maW5pc2hPcCgzMiwyKTtyZXR1cm59aWYodD09PTYxKXt0aGlzLmZpbmlzaE9wKDI4LDIpfWVsc2V7dGhpcy5maW5pc2hPcCg0NywxKX19cmVhZFRva2VuX2x0KCl7Y29uc3R7cG9zOmV9PXRoaXMuc3RhdGU7Y29uc3QgdD10aGlzLmlucHV0LmNoYXJDb2RlQXQoZSsxKTtpZih0PT09NjApe2lmKHRoaXMuaW5wdXQuY2hhckNvZGVBdChlKzIpPT09NjEpe3RoaXMuZmluaXNoT3AoMjgsMyk7cmV0dXJufXRoaXMuZmluaXNoT3AoNDYsMik7cmV0dXJufWlmKHQ9PT02MSl7dGhpcy5maW5pc2hPcCg0NSwyKTtyZXR1cm59dGhpcy5maW5pc2hPcCg0MywxKX1yZWFkVG9rZW5fZ3QoKXtjb25zdHtwb3M6ZX09dGhpcy5zdGF0ZTtjb25zdCB0PXRoaXMuaW5wdXQuY2hhckNvZGVBdChlKzEpO2lmKHQ9PT02Mil7Y29uc3QgdD10aGlzLmlucHV0LmNoYXJDb2RlQXQoZSsyKT09PTYyPzM6MjtpZih0aGlzLmlucHV0LmNoYXJDb2RlQXQoZSt0KT09PTYxKXt0aGlzLmZpbmlzaE9wKDI4LHQrMSk7cmV0dXJufXRoaXMuZmluaXNoT3AoNDYsdCk7cmV0dXJufWlmKHQ9PT02MSl7dGhpcy5maW5pc2hPcCg0NSwyKTtyZXR1cm59dGhpcy5maW5pc2hPcCg0NCwxKX1yZWFkVG9rZW5fZXFfZXhjbChlKXtjb25zdCB0PXRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcysxKTtpZih0PT09NjEpe3RoaXMuZmluaXNoT3AoNDIsdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zKzIpPT09NjE/MzoyKTtyZXR1cm59aWYoZT09PTYxJiZ0PT09NjIpe3RoaXMuc3RhdGUucG9zKz0yO3RoaXMuZmluaXNoVG9rZW4oMTkpO3JldHVybn10aGlzLmZpbmlzaE9wKGU9PT02MT8yNzozMywxKX1yZWFkVG9rZW5fcXVlc3Rpb24oKXtjb25zdCBlPXRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcysxKTtjb25zdCB0PXRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcysyKTtpZihlPT09NjMpe2lmKHQ9PT02MSl7dGhpcy5maW5pc2hPcCgyOCwzKX1lbHNle3RoaXMuZmluaXNoT3AoMzYsMil9fWVsc2UgaWYoZT09PTQ2JiYhKHQ+PTQ4JiZ0PD01Nykpe3RoaXMuc3RhdGUucG9zKz0yO3RoaXMuZmluaXNoVG9rZW4oMTgpfWVsc2V7Kyt0aGlzLnN0YXRlLnBvczt0aGlzLmZpbmlzaFRva2VuKDE3KX19Z2V0VG9rZW5Gcm9tQ29kZShlKXtzd2l0Y2goZSl7Y2FzZSA0Njp0aGlzLnJlYWRUb2tlbl9kb3QoKTtyZXR1cm47Y2FzZSA0MDorK3RoaXMuc3RhdGUucG9zO3RoaXMuZmluaXNoVG9rZW4oMTApO3JldHVybjtjYXNlIDQxOisrdGhpcy5zdGF0ZS5wb3M7dGhpcy5maW5pc2hUb2tlbigxMSk7cmV0dXJuO2Nhc2UgNTk6Kyt0aGlzLnN0YXRlLnBvczt0aGlzLmZpbmlzaFRva2VuKDEzKTtyZXR1cm47Y2FzZSA0NDorK3RoaXMuc3RhdGUucG9zO3RoaXMuZmluaXNoVG9rZW4oMTIpO3JldHVybjtjYXNlIDkxOmlmKHRoaXMuaGFzUGx1Z2luKCJyZWNvcmRBbmRUdXBsZSIpJiZ0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MrMSk9PT0xMjQpe2lmKHRoaXMuZ2V0UGx1Z2luT3B0aW9uKCJyZWNvcmRBbmRUdXBsZSIsInN5bnRheFR5cGUiKSE9PSJiYXIiKXt0aHJvdyB0aGlzLnJhaXNlKHRoaXMuc3RhdGUucG9zLGNsLlR1cGxlRXhwcmVzc2lvbkJhckluY29ycmVjdFN0YXJ0U3ludGF4VHlwZSl9dGhpcy5zdGF0ZS5wb3MrPTI7dGhpcy5maW5pc2hUb2tlbigyKX1lbHNleysrdGhpcy5zdGF0ZS5wb3M7dGhpcy5maW5pc2hUb2tlbigwKX1yZXR1cm47Y2FzZSA5MzorK3RoaXMuc3RhdGUucG9zO3RoaXMuZmluaXNoVG9rZW4oMyk7cmV0dXJuO2Nhc2UgMTIzOmlmKHRoaXMuaGFzUGx1Z2luKCJyZWNvcmRBbmRUdXBsZSIpJiZ0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MrMSk9PT0xMjQpe2lmKHRoaXMuZ2V0UGx1Z2luT3B0aW9uKCJyZWNvcmRBbmRUdXBsZSIsInN5bnRheFR5cGUiKSE9PSJiYXIiKXt0aHJvdyB0aGlzLnJhaXNlKHRoaXMuc3RhdGUucG9zLGNsLlJlY29yZEV4cHJlc3Npb25CYXJJbmNvcnJlY3RTdGFydFN5bnRheFR5cGUpfXRoaXMuc3RhdGUucG9zKz0yO3RoaXMuZmluaXNoVG9rZW4oNil9ZWxzZXsrK3RoaXMuc3RhdGUucG9zO3RoaXMuZmluaXNoVG9rZW4oNSl9cmV0dXJuO2Nhc2UgMTI1OisrdGhpcy5zdGF0ZS5wb3M7dGhpcy5maW5pc2hUb2tlbig4KTtyZXR1cm47Y2FzZSA1ODppZih0aGlzLmhhc1BsdWdpbigiZnVuY3Rpb25CaW5kIikmJnRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcysxKT09PTU4KXt0aGlzLmZpbmlzaE9wKDE1LDIpfWVsc2V7Kyt0aGlzLnN0YXRlLnBvczt0aGlzLmZpbmlzaFRva2VuKDE0KX1yZXR1cm47Y2FzZSA2Mzp0aGlzLnJlYWRUb2tlbl9xdWVzdGlvbigpO3JldHVybjtjYXNlIDk2OisrdGhpcy5zdGF0ZS5wb3M7dGhpcy5maW5pc2hUb2tlbigyMik7cmV0dXJuO2Nhc2UgNDg6e2NvbnN0IGU9dGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zKzEpO2lmKGU9PT0xMjB8fGU9PT04OCl7dGhpcy5yZWFkUmFkaXhOdW1iZXIoMTYpO3JldHVybn1pZihlPT09MTExfHxlPT09Nzkpe3RoaXMucmVhZFJhZGl4TnVtYmVyKDgpO3JldHVybn1pZihlPT09OTh8fGU9PT02Nil7dGhpcy5yZWFkUmFkaXhOdW1iZXIoMik7cmV0dXJufX1jYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1Nzp0aGlzLnJlYWROdW1iZXIoZmFsc2UpO3JldHVybjtjYXNlIDM0OmNhc2UgMzk6dGhpcy5yZWFkU3RyaW5nKGUpO3JldHVybjtjYXNlIDQ3OnRoaXMucmVhZFRva2VuX3NsYXNoKCk7cmV0dXJuO2Nhc2UgMzc6Y2FzZSA0Mjp0aGlzLnJlYWRUb2tlbl9tdWx0X21vZHVsbyhlKTtyZXR1cm47Y2FzZSAxMjQ6Y2FzZSAzODp0aGlzLnJlYWRUb2tlbl9waXBlX2FtcChlKTtyZXR1cm47Y2FzZSA5NDp0aGlzLnJlYWRUb2tlbl9jYXJldCgpO3JldHVybjtjYXNlIDQzOmNhc2UgNDU6dGhpcy5yZWFkVG9rZW5fcGx1c19taW4oZSk7cmV0dXJuO2Nhc2UgNjA6dGhpcy5yZWFkVG9rZW5fbHQoKTtyZXR1cm47Y2FzZSA2Mjp0aGlzLnJlYWRUb2tlbl9ndCgpO3JldHVybjtjYXNlIDYxOmNhc2UgMzM6dGhpcy5yZWFkVG9rZW5fZXFfZXhjbChlKTtyZXR1cm47Y2FzZSAxMjY6dGhpcy5maW5pc2hPcCgzNCwxKTtyZXR1cm47Y2FzZSA2NDorK3RoaXMuc3RhdGUucG9zO3RoaXMuZmluaXNoVG9rZW4oMjQpO3JldHVybjtjYXNlIDM1OnRoaXMucmVhZFRva2VuX251bWJlclNpZ24oKTtyZXR1cm47Y2FzZSA5Mjp0aGlzLnJlYWRXb3JkKCk7cmV0dXJuO2RlZmF1bHQ6aWYoaHUoZSkpe3RoaXMucmVhZFdvcmQoZSk7cmV0dXJufX10aHJvdyB0aGlzLnJhaXNlKHRoaXMuc3RhdGUucG9zLGNsLkludmFsaWRPclVuZXhwZWN0ZWRUb2tlbixTdHJpbmcuZnJvbUNvZGVQb2ludChlKSl9ZmluaXNoT3AoZSx0KXtjb25zdCByPXRoaXMuaW5wdXQuc2xpY2UodGhpcy5zdGF0ZS5wb3MsdGhpcy5zdGF0ZS5wb3MrdCk7dGhpcy5zdGF0ZS5wb3MrPXQ7dGhpcy5maW5pc2hUb2tlbihlLHIpfXJlYWRSZWdleHAoKXtjb25zdCBlPXRoaXMuc3RhdGUuc3RhcnQrMTtsZXQgdCxyO2xldHtwb3M6c309dGhpcy5zdGF0ZTtmb3IoOzsrK3Mpe2lmKHM+PXRoaXMubGVuZ3RoKXt0aHJvdyB0aGlzLnJhaXNlKGUsY2wuVW50ZXJtaW5hdGVkUmVnRXhwKX1jb25zdCBpPXRoaXMuaW5wdXQuY2hhckNvZGVBdChzKTtpZihLbyhpKSl7dGhyb3cgdGhpcy5yYWlzZShlLGNsLlVudGVybWluYXRlZFJlZ0V4cCl9aWYodCl7dD1mYWxzZX1lbHNle2lmKGk9PT05MSl7cj10cnVlfWVsc2UgaWYoaT09PTkzJiZyKXtyPWZhbHNlfWVsc2UgaWYoaT09PTQ3JiYhcil7YnJlYWt9dD1pPT09OTJ9fWNvbnN0IGk9dGhpcy5pbnB1dC5zbGljZShlLHMpOysrcztsZXQgbj0iIjt3aGlsZShzPHRoaXMubGVuZ3RoKXtjb25zdCBlPXRoaXMuY29kZVBvaW50QXRQb3Mocyk7Y29uc3QgdD1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpO2lmKEVjLmhhcyhlKSl7aWYobi5pbmNsdWRlcyh0KSl7dGhpcy5yYWlzZShzKzEsY2wuRHVwbGljYXRlUmVnRXhwRmxhZ3MpfX1lbHNlIGlmKHB1KGUpfHxlPT09OTIpe3RoaXMucmFpc2UocysxLGNsLk1hbGZvcm1lZFJlZ0V4cEZsYWdzKX1lbHNle2JyZWFrfSsrcztuKz10fXRoaXMuc3RhdGUucG9zPXM7dGhpcy5maW5pc2hUb2tlbigxMjcse3BhdHRlcm46aSxmbGFnczpufSl9cmVhZEludChlLHQscixzKXtpZihzPT09dm9pZCAwKXtzPXRydWV9Y29uc3QgaT10aGlzLnN0YXRlLnBvcztjb25zdCBuPWU9PT0xNj9TYy5oZXg6U2MuZGVjQmluT2N0O2NvbnN0IGE9ZT09PTE2P1RjLmhleDplPT09MTA/VGMuZGVjOmU9PT04P1RjLm9jdDpUYy5iaW47bGV0IG89ZmFsc2U7bGV0IGw9MDtmb3IobGV0IGk9MCx1PXQ9PW51bGw/SW5maW5pdHk6dDtpPHU7KytpKXtjb25zdCB0PXRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcyk7bGV0IHU7aWYodD09PTk1KXtjb25zdCBlPXRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcy0xKTtjb25zdCB0PXRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcysxKTtpZihhLmluZGV4T2YodCk9PT0tMSl7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLnBvcyxjbC5VbmV4cGVjdGVkTnVtZXJpY1NlcGFyYXRvcil9ZWxzZSBpZihuLmluZGV4T2YoZSk+LTF8fG4uaW5kZXhPZih0KT4tMXx8TnVtYmVyLmlzTmFOKHQpKXt0aGlzLnJhaXNlKHRoaXMuc3RhdGUucG9zLGNsLlVuZXhwZWN0ZWROdW1lcmljU2VwYXJhdG9yKX1pZighcyl7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLnBvcyxjbC5OdW1lcmljU2VwYXJhdG9ySW5Fc2NhcGVTZXF1ZW5jZSl9Kyt0aGlzLnN0YXRlLnBvcztjb250aW51ZX1pZih0Pj05Nyl7dT10LTk3KzEwfWVsc2UgaWYodD49NjUpe3U9dC02NSsxMH1lbHNlIGlmKGJjKHQpKXt1PXQtNDh9ZWxzZXt1PUluZmluaXR5fWlmKHU+PWUpe2lmKHRoaXMub3B0aW9ucy5lcnJvclJlY292ZXJ5JiZ1PD05KXt1PTA7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLnN0YXJ0K2krMixjbC5JbnZhbGlkRGlnaXQsZSl9ZWxzZSBpZihyKXt1PTA7bz10cnVlfWVsc2V7YnJlYWt9fSsrdGhpcy5zdGF0ZS5wb3M7bD1sKmUrdX1pZih0aGlzLnN0YXRlLnBvcz09PWl8fHQhPW51bGwmJnRoaXMuc3RhdGUucG9zLWkhPT10fHxvKXtyZXR1cm4gbnVsbH1yZXR1cm4gbH1yZWFkUmFkaXhOdW1iZXIoZSl7Y29uc3QgdD10aGlzLnN0YXRlLnBvcztsZXQgcj1mYWxzZTt0aGlzLnN0YXRlLnBvcys9Mjtjb25zdCBzPXRoaXMucmVhZEludChlKTtpZihzPT1udWxsKXt0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQrMixjbC5JbnZhbGlkRGlnaXQsZSl9Y29uc3QgaT10aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MpO2lmKGk9PT0xMTApeysrdGhpcy5zdGF0ZS5wb3M7cj10cnVlfWVsc2UgaWYoaT09PTEwOSl7dGhyb3cgdGhpcy5yYWlzZSh0LGNsLkludmFsaWREZWNpbWFsKX1pZihodSh0aGlzLmNvZGVQb2ludEF0UG9zKHRoaXMuc3RhdGUucG9zKSkpe3Rocm93IHRoaXMucmFpc2UodGhpcy5zdGF0ZS5wb3MsY2wuTnVtYmVySWRlbnRpZmllcil9aWYocil7Y29uc3QgZT10aGlzLmlucHV0LnNsaWNlKHQsdGhpcy5zdGF0ZS5wb3MpLnJlcGxhY2UoL1tfbl0vZywiIik7dGhpcy5maW5pc2hUb2tlbigxMjUsZSk7cmV0dXJufXRoaXMuZmluaXNoVG9rZW4oMTI0LHMpfXJlYWROdW1iZXIoZSl7Y29uc3QgdD10aGlzLnN0YXRlLnBvcztsZXQgcj1mYWxzZTtsZXQgcz1mYWxzZTtsZXQgaT1mYWxzZTtsZXQgbj1mYWxzZTtsZXQgYT1mYWxzZTtpZighZSYmdGhpcy5yZWFkSW50KDEwKT09PW51bGwpe3RoaXMucmFpc2UodCxjbC5JbnZhbGlkTnVtYmVyKX1jb25zdCBvPXRoaXMuc3RhdGUucG9zLXQ+PTImJnRoaXMuaW5wdXQuY2hhckNvZGVBdCh0KT09PTQ4O2lmKG8pe2NvbnN0IGU9dGhpcy5pbnB1dC5zbGljZSh0LHRoaXMuc3RhdGUucG9zKTt0aGlzLnJlY29yZFN0cmljdE1vZGVFcnJvcnModCxjbC5TdHJpY3RPY3RhbExpdGVyYWwpO2lmKCF0aGlzLnN0YXRlLnN0cmljdCl7Y29uc3Qgcj1lLmluZGV4T2YoIl8iKTtpZihyPjApe3RoaXMucmFpc2Uocit0LGNsLlplcm9EaWdpdE51bWVyaWNTZXBhcmF0b3IpfX1hPW8mJiEvWzg5XS8udGVzdChlKX1sZXQgbD10aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MpO2lmKGw9PT00NiYmIWEpeysrdGhpcy5zdGF0ZS5wb3M7dGhpcy5yZWFkSW50KDEwKTtyPXRydWU7bD10aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MpfWlmKChsPT09Njl8fGw9PT0xMDEpJiYhYSl7bD10aGlzLmlucHV0LmNoYXJDb2RlQXQoKyt0aGlzLnN0YXRlLnBvcyk7aWYobD09PTQzfHxsPT09NDUpeysrdGhpcy5zdGF0ZS5wb3N9aWYodGhpcy5yZWFkSW50KDEwKT09PW51bGwpe3RoaXMucmFpc2UodCxjbC5JbnZhbGlkT3JNaXNzaW5nRXhwb25lbnQpfXI9dHJ1ZTtuPXRydWU7bD10aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MpfWlmKGw9PT0xMTApe2lmKHJ8fG8pe3RoaXMucmFpc2UodCxjbC5JbnZhbGlkQmlnSW50TGl0ZXJhbCl9Kyt0aGlzLnN0YXRlLnBvcztzPXRydWV9aWYobD09PTEwOSl7dGhpcy5leHBlY3RQbHVnaW4oImRlY2ltYWwiLHRoaXMuc3RhdGUucG9zKTtpZihufHxvKXt0aGlzLnJhaXNlKHQsY2wuSW52YWxpZERlY2ltYWwpfSsrdGhpcy5zdGF0ZS5wb3M7aT10cnVlfWlmKGh1KHRoaXMuY29kZVBvaW50QXRQb3ModGhpcy5zdGF0ZS5wb3MpKSl7dGhyb3cgdGhpcy5yYWlzZSh0aGlzLnN0YXRlLnBvcyxjbC5OdW1iZXJJZGVudGlmaWVyKX1jb25zdCB1PXRoaXMuaW5wdXQuc2xpY2UodCx0aGlzLnN0YXRlLnBvcykucmVwbGFjZSgvW19tbl0vZywiIik7aWYocyl7dGhpcy5maW5pc2hUb2tlbigxMjUsdSk7cmV0dXJufWlmKGkpe3RoaXMuZmluaXNoVG9rZW4oMTI2LHUpO3JldHVybn1jb25zdCBjPWE/cGFyc2VJbnQodSw4KTpwYXJzZUZsb2F0KHUpO3RoaXMuZmluaXNoVG9rZW4oMTI0LGMpfXJlYWRDb2RlUG9pbnQoZSl7Y29uc3QgdD10aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MpO2xldCByO2lmKHQ9PT0xMjMpe2NvbnN0IHQ9Kyt0aGlzLnN0YXRlLnBvcztyPXRoaXMucmVhZEhleENoYXIodGhpcy5pbnB1dC5pbmRleE9mKCJ9Iix0aGlzLnN0YXRlLnBvcyktdGhpcy5zdGF0ZS5wb3MsdHJ1ZSxlKTsrK3RoaXMuc3RhdGUucG9zO2lmKHIhPT1udWxsJiZyPjExMTQxMTEpe2lmKGUpe3RoaXMucmFpc2UodCxjbC5JbnZhbGlkQ29kZVBvaW50KX1lbHNle3JldHVybiBudWxsfX19ZWxzZXtyPXRoaXMucmVhZEhleENoYXIoNCxmYWxzZSxlKX1yZXR1cm4gcn1yZWFkU3RyaW5nKGUpe2xldCB0PSIiLHI9Kyt0aGlzLnN0YXRlLnBvcztmb3IoOzspe2lmKHRoaXMuc3RhdGUucG9zPj10aGlzLmxlbmd0aCl7dGhyb3cgdGhpcy5yYWlzZSh0aGlzLnN0YXRlLnN0YXJ0LGNsLlVudGVybWluYXRlZFN0cmluZyl9Y29uc3Qgcz10aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MpO2lmKHM9PT1lKWJyZWFrO2lmKHM9PT05Mil7dCs9dGhpcy5pbnB1dC5zbGljZShyLHRoaXMuc3RhdGUucG9zKTt0Kz10aGlzLnJlYWRFc2NhcGVkQ2hhcihmYWxzZSk7cj10aGlzLnN0YXRlLnBvc31lbHNlIGlmKHM9PT04MjMyfHxzPT09ODIzMyl7Kyt0aGlzLnN0YXRlLnBvczsrK3RoaXMuc3RhdGUuY3VyTGluZTt0aGlzLnN0YXRlLmxpbmVTdGFydD10aGlzLnN0YXRlLnBvc31lbHNlIGlmKEtvKHMpKXt0aHJvdyB0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsY2wuVW50ZXJtaW5hdGVkU3RyaW5nKX1lbHNleysrdGhpcy5zdGF0ZS5wb3N9fXQrPXRoaXMuaW5wdXQuc2xpY2Uocix0aGlzLnN0YXRlLnBvcysrKTt0aGlzLmZpbmlzaFRva2VuKDEyMyx0KX1yZWFkVG1wbFRva2VuKCl7bGV0IGU9IiIsdD10aGlzLnN0YXRlLnBvcyxyPWZhbHNlO2Zvcig7Oyl7aWYodGhpcy5zdGF0ZS5wb3M+PXRoaXMubGVuZ3RoKXt0aHJvdyB0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsY2wuVW50ZXJtaW5hdGVkVGVtcGxhdGUpfWNvbnN0IHM9dGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zKTtpZihzPT09OTZ8fHM9PT0zNiYmdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zKzEpPT09MTIzKXtpZih0aGlzLnN0YXRlLnBvcz09PXRoaXMuc3RhdGUuc3RhcnQmJnRoaXMubWF0Y2goMjApKXtpZihzPT09MzYpe3RoaXMuc3RhdGUucG9zKz0yO3RoaXMuZmluaXNoVG9rZW4oMjMpO3JldHVybn1lbHNleysrdGhpcy5zdGF0ZS5wb3M7dGhpcy5maW5pc2hUb2tlbigyMik7cmV0dXJufX1lKz10aGlzLmlucHV0LnNsaWNlKHQsdGhpcy5zdGF0ZS5wb3MpO3RoaXMuZmluaXNoVG9rZW4oMjAscj9udWxsOmUpO3JldHVybn1pZihzPT09OTIpe2UrPXRoaXMuaW5wdXQuc2xpY2UodCx0aGlzLnN0YXRlLnBvcyk7Y29uc3Qgcz10aGlzLnJlYWRFc2NhcGVkQ2hhcih0cnVlKTtpZihzPT09bnVsbCl7cj10cnVlfWVsc2V7ZSs9c310PXRoaXMuc3RhdGUucG9zfWVsc2UgaWYoS28ocykpe2UrPXRoaXMuaW5wdXQuc2xpY2UodCx0aGlzLnN0YXRlLnBvcyk7Kyt0aGlzLnN0YXRlLnBvcztzd2l0Y2gocyl7Y2FzZSAxMzppZih0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MpPT09MTApeysrdGhpcy5zdGF0ZS5wb3N9Y2FzZSAxMDplKz0iXG4iO2JyZWFrO2RlZmF1bHQ6ZSs9U3RyaW5nLmZyb21DaGFyQ29kZShzKTticmVha30rK3RoaXMuc3RhdGUuY3VyTGluZTt0aGlzLnN0YXRlLmxpbmVTdGFydD10aGlzLnN0YXRlLnBvczt0PXRoaXMuc3RhdGUucG9zfWVsc2V7Kyt0aGlzLnN0YXRlLnBvc319fXJlY29yZFN0cmljdE1vZGVFcnJvcnMoZSx0KXtpZih0aGlzLnN0YXRlLnN0cmljdCYmIXRoaXMuc3RhdGUuc3RyaWN0RXJyb3JzLmhhcyhlKSl7dGhpcy5yYWlzZShlLHQpfWVsc2V7dGhpcy5zdGF0ZS5zdHJpY3RFcnJvcnMuc2V0KGUsdCl9fXJlYWRFc2NhcGVkQ2hhcihlKXtjb25zdCB0PSFlO2NvbnN0IHI9dGhpcy5pbnB1dC5jaGFyQ29kZUF0KCsrdGhpcy5zdGF0ZS5wb3MpOysrdGhpcy5zdGF0ZS5wb3M7c3dpdGNoKHIpe2Nhc2UgMTEwOnJldHVybiJcbiI7Y2FzZSAxMTQ6cmV0dXJuIlxyIjtjYXNlIDEyMDp7Y29uc3QgZT10aGlzLnJlYWRIZXhDaGFyKDIsZmFsc2UsdCk7cmV0dXJuIGU9PT1udWxsP251bGw6U3RyaW5nLmZyb21DaGFyQ29kZShlKX1jYXNlIDExNzp7Y29uc3QgZT10aGlzLnJlYWRDb2RlUG9pbnQodCk7cmV0dXJuIGU9PT1udWxsP251bGw6U3RyaW5nLmZyb21Db2RlUG9pbnQoZSl9Y2FzZSAxMTY6cmV0dXJuIlx0IjtjYXNlIDk4OnJldHVybiJcYiI7Y2FzZSAxMTg6cmV0dXJuIlx2IjtjYXNlIDEwMjpyZXR1cm4iXGYiO2Nhc2UgMTM6aWYodGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zKT09PTEwKXsrK3RoaXMuc3RhdGUucG9zfWNhc2UgMTA6dGhpcy5zdGF0ZS5saW5lU3RhcnQ9dGhpcy5zdGF0ZS5wb3M7Kyt0aGlzLnN0YXRlLmN1ckxpbmU7Y2FzZSA4MjMyOmNhc2UgODIzMzpyZXR1cm4iIjtjYXNlIDU2OmNhc2UgNTc6aWYoZSl7cmV0dXJuIG51bGx9ZWxzZXt0aGlzLnJlY29yZFN0cmljdE1vZGVFcnJvcnModGhpcy5zdGF0ZS5wb3MtMSxjbC5TdHJpY3ROdW1lcmljRXNjYXBlKX1kZWZhdWx0OmlmKHI+PTQ4JiZyPD01NSl7Y29uc3QgdD10aGlzLnN0YXRlLnBvcy0xO2NvbnN0IHI9dGhpcy5pbnB1dC5zdWJzdHIodGhpcy5zdGF0ZS5wb3MtMSwzKS5tYXRjaCgvXlswLTddKy8pO2xldCBzPXJbMF07bGV0IGk9cGFyc2VJbnQocyw4KTtpZihpPjI1NSl7cz1zLnNsaWNlKDAsLTEpO2k9cGFyc2VJbnQocyw4KX10aGlzLnN0YXRlLnBvcys9cy5sZW5ndGgtMTtjb25zdCBuPXRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcyk7aWYocyE9PSIwInx8bj09PTU2fHxuPT09NTcpe2lmKGUpe3JldHVybiBudWxsfWVsc2V7dGhpcy5yZWNvcmRTdHJpY3RNb2RlRXJyb3JzKHQsY2wuU3RyaWN0TnVtZXJpY0VzY2FwZSl9fXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpfXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHIpfX1yZWFkSGV4Q2hhcihlLHQscil7Y29uc3Qgcz10aGlzLnN0YXRlLnBvcztjb25zdCBpPXRoaXMucmVhZEludCgxNixlLHQsZmFsc2UpO2lmKGk9PT1udWxsKXtpZihyKXt0aGlzLnJhaXNlKHMsY2wuSW52YWxpZEVzY2FwZVNlcXVlbmNlKX1lbHNle3RoaXMuc3RhdGUucG9zPXMtMX19cmV0dXJuIGl9cmVhZFdvcmQxKGUpe3RoaXMuc3RhdGUuY29udGFpbnNFc2M9ZmFsc2U7bGV0IHQ9IiI7Y29uc3Qgcj10aGlzLnN0YXRlLnBvcztsZXQgcz10aGlzLnN0YXRlLnBvcztpZihlIT09dW5kZWZpbmVkKXt0aGlzLnN0YXRlLnBvcys9ZTw9NjU1MzU/MToyfXdoaWxlKHRoaXMuc3RhdGUucG9zPHRoaXMubGVuZ3RoKXtjb25zdCBlPXRoaXMuY29kZVBvaW50QXRQb3ModGhpcy5zdGF0ZS5wb3MpO2lmKHB1KGUpKXt0aGlzLnN0YXRlLnBvcys9ZTw9NjU1MzU/MToyfWVsc2UgaWYoZT09PTkyKXt0aGlzLnN0YXRlLmNvbnRhaW5zRXNjPXRydWU7dCs9dGhpcy5pbnB1dC5zbGljZShzLHRoaXMuc3RhdGUucG9zKTtjb25zdCBlPXRoaXMuc3RhdGUucG9zO2NvbnN0IGk9dGhpcy5zdGF0ZS5wb3M9PT1yP2h1OnB1O2lmKHRoaXMuaW5wdXQuY2hhckNvZGVBdCgrK3RoaXMuc3RhdGUucG9zKSE9PTExNyl7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLnBvcyxjbC5NaXNzaW5nVW5pY29kZUVzY2FwZSk7cz10aGlzLnN0YXRlLnBvcy0xO2NvbnRpbnVlfSsrdGhpcy5zdGF0ZS5wb3M7Y29uc3Qgbj10aGlzLnJlYWRDb2RlUG9pbnQodHJ1ZSk7aWYobiE9PW51bGwpe2lmKCFpKG4pKXt0aGlzLnJhaXNlKGUsY2wuRXNjYXBlZENoYXJOb3RBbklkZW50aWZpZXIpfXQrPVN0cmluZy5mcm9tQ29kZVBvaW50KG4pfXM9dGhpcy5zdGF0ZS5wb3N9ZWxzZXticmVha319cmV0dXJuIHQrdGhpcy5pbnB1dC5zbGljZShzLHRoaXMuc3RhdGUucG9zKX1yZWFkV29yZChlKXtjb25zdCB0PXRoaXMucmVhZFdvcmQxKGUpO2NvbnN0IHI9d2wuZ2V0KHQpO2lmKHIhPT11bmRlZmluZWQpe3RoaXMuZmluaXNoVG9rZW4ocixabChyKSl9ZWxzZXt0aGlzLmZpbmlzaFRva2VuKDEyMix0KX19Y2hlY2tLZXl3b3JkRXNjYXBlcygpe2NvbnN0e3R5cGU6ZX09dGhpcy5zdGF0ZTtpZihIbChlKSYmdGhpcy5zdGF0ZS5jb250YWluc0VzYyl7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLnN0YXJ0LGNsLkludmFsaWRFc2NhcGVkUmVzZXJ2ZWRXb3JkLFpsKGUpKX19dXBkYXRlQ29udGV4dChlKXtjb25zdHtjb250ZXh0OnQsdHlwZTpyfT10aGlzLnN0YXRlO3N3aXRjaChyKXtjYXNlIDg6dC5wb3AoKTticmVhaztjYXNlIDU6Y2FzZSA3OmNhc2UgMjM6dC5wdXNoKGdsLmJyYWNlKTticmVhaztjYXNlIDIyOmlmKHRbdC5sZW5ndGgtMV09PT1nbC50ZW1wbGF0ZSl7dC5wb3AoKX1lbHNle3QucHVzaChnbC50ZW1wbGF0ZSl9YnJlYWt9fX1jbGFzcyBDY3tjb25zdHJ1Y3Rvcigpe3RoaXMucHJpdmF0ZU5hbWVzPW5ldyBTZXQ7dGhpcy5sb25lQWNjZXNzb3JzPW5ldyBNYXA7dGhpcy51bmRlZmluZWRQcml2YXRlTmFtZXM9bmV3IE1hcH19Y2xhc3MgUGN7Y29uc3RydWN0b3IoZSl7dGhpcy5zdGFjaz1bXTt0aGlzLnVuZGVmaW5lZFByaXZhdGVOYW1lcz1uZXcgTWFwO3RoaXMucmFpc2U9ZX1jdXJyZW50KCl7cmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtMV19ZW50ZXIoKXt0aGlzLnN0YWNrLnB1c2gobmV3IENjKX1leGl0KCl7Y29uc3QgZT10aGlzLnN0YWNrLnBvcCgpO2NvbnN0IHQ9dGhpcy5jdXJyZW50KCk7Zm9yKGNvbnN0W3Isc11vZiBBcnJheS5mcm9tKGUudW5kZWZpbmVkUHJpdmF0ZU5hbWVzKSl7aWYodCl7aWYoIXQudW5kZWZpbmVkUHJpdmF0ZU5hbWVzLmhhcyhyKSl7dC51bmRlZmluZWRQcml2YXRlTmFtZXMuc2V0KHIscyl9fWVsc2V7dGhpcy5yYWlzZShzLGNsLkludmFsaWRQcml2YXRlRmllbGRSZXNvbHV0aW9uLHIpfX19ZGVjbGFyZVByaXZhdGVOYW1lKGUsdCxyKXtjb25zdCBzPXRoaXMuY3VycmVudCgpO2xldCBpPXMucHJpdmF0ZU5hbWVzLmhhcyhlKTtpZih0JnVjKXtjb25zdCByPWkmJnMubG9uZUFjY2Vzc29ycy5nZXQoZSk7aWYocil7Y29uc3Qgbj1yJmFjO2NvbnN0IGE9dCZhYztjb25zdCBvPXImdWM7Y29uc3QgbD10JnVjO2k9bz09PWx8fG4hPT1hO2lmKCFpKXMubG9uZUFjY2Vzc29ycy5kZWxldGUoZSl9ZWxzZSBpZighaSl7cy5sb25lQWNjZXNzb3JzLnNldChlLHQpfX1pZihpKXt0aGlzLnJhaXNlKHIsY2wuUHJpdmF0ZU5hbWVSZWRlY2xhcmF0aW9uLGUpfXMucHJpdmF0ZU5hbWVzLmFkZChlKTtzLnVuZGVmaW5lZFByaXZhdGVOYW1lcy5kZWxldGUoZSl9dXNlUHJpdmF0ZU5hbWUoZSx0KXtsZXQgcjtmb3IociBvZiB0aGlzLnN0YWNrKXtpZihyLnByaXZhdGVOYW1lcy5oYXMoZSkpcmV0dXJufWlmKHIpe3IudW5kZWZpbmVkUHJpdmF0ZU5hbWVzLnNldChlLHQpfWVsc2V7dGhpcy5yYWlzZSh0LGNsLkludmFsaWRQcml2YXRlRmllbGRSZXNvbHV0aW9uLGUpfX19Y29uc3QgRGM9MCxrYz0xLE5jPTIsSWM9MztjbGFzcyBGY3tjb25zdHJ1Y3RvcihlKXtpZihlPT09dm9pZCAwKXtlPURjfXRoaXMudHlwZT12b2lkIDA7dGhpcy50eXBlPWV9Y2FuQmVBcnJvd1BhcmFtZXRlckRlY2xhcmF0aW9uKCl7cmV0dXJuIHRoaXMudHlwZT09PU5jfHx0aGlzLnR5cGU9PT1rY31pc0NlcnRhaW5seVBhcmFtZXRlckRlY2xhcmF0aW9uKCl7cmV0dXJuIHRoaXMudHlwZT09PUljfX1jbGFzcyBNYyBleHRlbmRzIEZje2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZXJyb3JzPW5ldyBNYXB9cmVjb3JkRGVjbGFyYXRpb25FcnJvcihlLHQpe3RoaXMuZXJyb3JzLnNldChlLHQpfWNsZWFyRGVjbGFyYXRpb25FcnJvcihlKXt0aGlzLmVycm9ycy5kZWxldGUoZSl9aXRlcmF0ZUVycm9ycyhlKXt0aGlzLmVycm9ycy5mb3JFYWNoKGUpfX1jbGFzcyBfY3tjb25zdHJ1Y3RvcihlKXt0aGlzLnN0YWNrPVtuZXcgRmNdO3RoaXMucmFpc2U9ZX1lbnRlcihlKXt0aGlzLnN0YWNrLnB1c2goZSl9ZXhpdCgpe3RoaXMuc3RhY2sucG9wKCl9cmVjb3JkUGFyYW1ldGVySW5pdGlhbGl6ZXJFcnJvcihlLHQpe2NvbnN0e3N0YWNrOnJ9PXRoaXM7bGV0IHM9ci5sZW5ndGgtMTtsZXQgaT1yW3NdO3doaWxlKCFpLmlzQ2VydGFpbmx5UGFyYW1ldGVyRGVjbGFyYXRpb24oKSl7aWYoaS5jYW5CZUFycm93UGFyYW1ldGVyRGVjbGFyYXRpb24oKSl7aS5yZWNvcmREZWNsYXJhdGlvbkVycm9yKGUsdCl9ZWxzZXtyZXR1cm59aT1yWy0tc119dGhpcy5yYWlzZShlLHQpfXJlY29yZFBhcmVudGhlc2l6ZWRJZGVudGlmaWVyRXJyb3IoZSx0KXtjb25zdHtzdGFjazpyfT10aGlzO2NvbnN0IHM9cltyLmxlbmd0aC0xXTtpZihzLmlzQ2VydGFpbmx5UGFyYW1ldGVyRGVjbGFyYXRpb24oKSl7dGhpcy5yYWlzZShlLHQpfWVsc2UgaWYocy5jYW5CZUFycm93UGFyYW1ldGVyRGVjbGFyYXRpb24oKSl7cy5yZWNvcmREZWNsYXJhdGlvbkVycm9yKGUsdCl9ZWxzZXtyZXR1cm59fXJlY29yZEFzeW5jQXJyb3dQYXJhbWV0ZXJzRXJyb3IoZSx0KXtjb25zdHtzdGFjazpyfT10aGlzO2xldCBzPXIubGVuZ3RoLTE7bGV0IGk9cltzXTt3aGlsZShpLmNhbkJlQXJyb3dQYXJhbWV0ZXJEZWNsYXJhdGlvbigpKXtpZihpLnR5cGU9PT1OYyl7aS5yZWNvcmREZWNsYXJhdGlvbkVycm9yKGUsdCl9aT1yWy0tc119fXZhbGlkYXRlQXNQYXR0ZXJuKCl7Y29uc3R7c3RhY2s6ZX09dGhpcztjb25zdCB0PWVbZS5sZW5ndGgtMV07aWYoIXQuY2FuQmVBcnJvd1BhcmFtZXRlckRlY2xhcmF0aW9uKCkpcmV0dXJuO3QuaXRlcmF0ZUVycm9ycygoKHQscik9Pnt0aGlzLnJhaXNlKHIsdCk7bGV0IHM9ZS5sZW5ndGgtMjtsZXQgaT1lW3NdO3doaWxlKGkuY2FuQmVBcnJvd1BhcmFtZXRlckRlY2xhcmF0aW9uKCkpe2kuY2xlYXJEZWNsYXJhdGlvbkVycm9yKHIpO2k9ZVstLXNdfX0pKX19ZnVuY3Rpb24gT2MoKXtyZXR1cm4gbmV3IEZjKEljKX1mdW5jdGlvbiBMYygpe3JldHVybiBuZXcgTWMoa2MpfWZ1bmN0aW9uIEJjKCl7cmV0dXJuIG5ldyBNYyhOYyl9ZnVuY3Rpb24gUmMoKXtyZXR1cm4gbmV3IEZjfWNvbnN0IGpjPTAsVWM9MSx6Yz0yLFZjPTQscWM9ODtjbGFzcyBHY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhY2tzPVtdfWVudGVyKGUpe3RoaXMuc3RhY2tzLnB1c2goZSl9ZXhpdCgpe3RoaXMuc3RhY2tzLnBvcCgpfWN1cnJlbnRGbGFncygpe3JldHVybiB0aGlzLnN0YWNrc1t0aGlzLnN0YWNrcy5sZW5ndGgtMV19Z2V0IGhhc0F3YWl0KCl7cmV0dXJuKHRoaXMuY3VycmVudEZsYWdzKCkmemMpPjB9Z2V0IGhhc1lpZWxkKCl7cmV0dXJuKHRoaXMuY3VycmVudEZsYWdzKCkmVWMpPjB9Z2V0IGhhc1JldHVybigpe3JldHVybih0aGlzLmN1cnJlbnRGbGFncygpJlZjKT4wfWdldCBoYXNJbigpe3JldHVybih0aGlzLmN1cnJlbnRGbGFncygpJnFjKT4wfX1mdW5jdGlvbiBYYyhlLHQpe3JldHVybihlP3pjOjApfCh0P1VjOjApfWNsYXNzIEpjIGV4dGVuZHMgd2N7YWRkRXh0cmEoZSx0LHIpe2lmKCFlKXJldHVybjtjb25zdCBzPWUuZXh0cmE9ZS5leHRyYXx8e307c1t0XT1yfWlzQ29udGV4dHVhbChlKXtyZXR1cm4gdGhpcy5zdGF0ZS50eXBlPT09ZSYmIXRoaXMuc3RhdGUuY29udGFpbnNFc2N9aXNVbnBhcnNlZENvbnRleHR1YWwoZSx0KXtjb25zdCByPWUrdC5sZW5ndGg7aWYodGhpcy5pbnB1dC5zbGljZShlLHIpPT09dCl7Y29uc3QgZT10aGlzLmlucHV0LmNoYXJDb2RlQXQocik7cmV0dXJuIShwdShlKXx8KGUmNjQ1MTIpPT09NTUyOTYpfXJldHVybiBmYWxzZX1pc0xvb2thaGVhZENvbnRleHR1YWwoZSl7Y29uc3QgdD10aGlzLm5leHRUb2tlblN0YXJ0KCk7cmV0dXJuIHRoaXMuaXNVbnBhcnNlZENvbnRleHR1YWwodCxlKX1lYXRDb250ZXh0dWFsKGUpe2lmKHRoaXMuaXNDb250ZXh0dWFsKGUpKXt0aGlzLm5leHQoKTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9ZXhwZWN0Q29udGV4dHVhbChlLHQpe2lmKCF0aGlzLmVhdENvbnRleHR1YWwoZSkpdGhpcy51bmV4cGVjdGVkKG51bGwsdCl9Y2FuSW5zZXJ0U2VtaWNvbG9uKCl7cmV0dXJuIHRoaXMubWF0Y2goMTI5KXx8dGhpcy5tYXRjaCg4KXx8dGhpcy5oYXNQcmVjZWRpbmdMaW5lQnJlYWsoKX1oYXNQcmVjZWRpbmdMaW5lQnJlYWsoKXtyZXR1cm4gSG8udGVzdCh0aGlzLmlucHV0LnNsaWNlKHRoaXMuc3RhdGUubGFzdFRva0VuZCx0aGlzLnN0YXRlLnN0YXJ0KSl9aGFzRm9sbG93aW5nTGluZUJyZWFrKCl7UW8ubGFzdEluZGV4PXRoaXMuc3RhdGUuZW5kO3JldHVybiBRby50ZXN0KHRoaXMuaW5wdXQpfWlzTGluZVRlcm1pbmF0b3IoKXtyZXR1cm4gdGhpcy5lYXQoMTMpfHx0aGlzLmNhbkluc2VydFNlbWljb2xvbigpfXNlbWljb2xvbihlKXtpZihlPT09dm9pZCAwKXtlPXRydWV9aWYoZT90aGlzLmlzTGluZVRlcm1pbmF0b3IoKTp0aGlzLmVhdCgxMykpcmV0dXJuO3RoaXMucmFpc2UodGhpcy5zdGF0ZS5sYXN0VG9rRW5kLGNsLk1pc3NpbmdTZW1pY29sb24pfWV4cGVjdChlLHQpe3RoaXMuZWF0KGUpfHx0aGlzLnVuZXhwZWN0ZWQodCxlKX1hc3NlcnROb1NwYWNlKGUpe2lmKGU9PT12b2lkIDApe2U9IlVuZXhwZWN0ZWQgc3BhY2UuIn1pZih0aGlzLnN0YXRlLnN0YXJ0PnRoaXMuc3RhdGUubGFzdFRva0VuZCl7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLmxhc3RUb2tFbmQse2NvZGU6dWwuU3ludGF4RXJyb3IscmVhc29uQ29kZToiVW5leHBlY3RlZFNwYWNlIix0ZW1wbGF0ZTplfSl9fXVuZXhwZWN0ZWQoZSx0KXtpZih0PT09dm9pZCAwKXt0PXtjb2RlOnVsLlN5bnRheEVycm9yLHJlYXNvbkNvZGU6IlVuZXhwZWN0ZWRUb2tlbiIsdGVtcGxhdGU6IlVuZXhwZWN0ZWQgdG9rZW4ifX1pZihzdSh0KSl7dD17Y29kZTp1bC5TeW50YXhFcnJvcixyZWFzb25Db2RlOiJVbmV4cGVjdGVkVG9rZW4iLHRlbXBsYXRlOmBVbmV4cGVjdGVkIHRva2VuLCBleHBlY3RlZCAiJHtabCh0KX0iYH19dGhyb3cgdGhpcy5yYWlzZShlIT1udWxsP2U6dGhpcy5zdGF0ZS5zdGFydCx0KX1leHBlY3RQbHVnaW4oZSx0KXtpZighdGhpcy5oYXNQbHVnaW4oZSkpe3Rocm93IHRoaXMucmFpc2VXaXRoRGF0YSh0IT1udWxsP3Q6dGhpcy5zdGF0ZS5zdGFydCx7bWlzc2luZ1BsdWdpbjpbZV19LGBUaGlzIGV4cGVyaW1lbnRhbCBzeW50YXggcmVxdWlyZXMgZW5hYmxpbmcgdGhlIHBhcnNlciBwbHVnaW46ICcke2V9J2ApfXJldHVybiB0cnVlfWV4cGVjdE9uZVBsdWdpbihlLHQpe2lmKCFlLnNvbWUoKGU9PnRoaXMuaGFzUGx1Z2luKGUpKSkpe3Rocm93IHRoaXMucmFpc2VXaXRoRGF0YSh0IT1udWxsP3Q6dGhpcy5zdGF0ZS5zdGFydCx7bWlzc2luZ1BsdWdpbjplfSxgVGhpcyBleHBlcmltZW50YWwgc3ludGF4IHJlcXVpcmVzIGVuYWJsaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIHBhcnNlciBwbHVnaW4ocyk6ICcke2Uuam9pbigiLCAiKX0nYCl9fXRyeVBhcnNlKGUsdCl7aWYodD09PXZvaWQgMCl7dD10aGlzLnN0YXRlLmNsb25lKCl9Y29uc3Qgcj17bm9kZTpudWxsfTt0cnl7Y29uc3Qgcz1lKChmdW5jdGlvbihlKXtpZihlPT09dm9pZCAwKXtlPW51bGx9ci5ub2RlPWU7dGhyb3cgcn0pKTtpZih0aGlzLnN0YXRlLmVycm9ycy5sZW5ndGg+dC5lcnJvcnMubGVuZ3RoKXtjb25zdCBlPXRoaXMuc3RhdGU7dGhpcy5zdGF0ZT10O3RoaXMuc3RhdGUudG9rZW5zTGVuZ3RoPWUudG9rZW5zTGVuZ3RoO3JldHVybntub2RlOnMsZXJyb3I6ZS5lcnJvcnNbdC5lcnJvcnMubGVuZ3RoXSx0aHJvd246ZmFsc2UsYWJvcnRlZDpmYWxzZSxmYWlsU3RhdGU6ZX19cmV0dXJue25vZGU6cyxlcnJvcjpudWxsLHRocm93bjpmYWxzZSxhYm9ydGVkOmZhbHNlLGZhaWxTdGF0ZTpudWxsfX1jYXRjaChlKXtjb25zdCBzPXRoaXMuc3RhdGU7dGhpcy5zdGF0ZT10O2lmKGUgaW5zdGFuY2VvZiBTeW50YXhFcnJvcil7cmV0dXJue25vZGU6bnVsbCxlcnJvcjplLHRocm93bjp0cnVlLGFib3J0ZWQ6ZmFsc2UsZmFpbFN0YXRlOnN9fWlmKGU9PT1yKXtyZXR1cm57bm9kZTpyLm5vZGUsZXJyb3I6bnVsbCx0aHJvd246ZmFsc2UsYWJvcnRlZDp0cnVlLGZhaWxTdGF0ZTpzfX10aHJvdyBlfX1jaGVja0V4cHJlc3Npb25FcnJvcnMoZSx0KXtpZighZSlyZXR1cm4gZmFsc2U7Y29uc3R7c2hvcnRoYW5kQXNzaWduOnIsZG91YmxlUHJvdG86cyxvcHRpb25hbFBhcmFtZXRlcnM6aX09ZTtjb25zdCBuPXIrcytpPi0zO2lmKCF0KXtyZXR1cm4gbn1lbHNlIGlmKG4pe2lmKHI+PTApe3RoaXMudW5leHBlY3RlZChyKX1pZihzPj0wKXt0aGlzLnJhaXNlKHMsY2wuRHVwbGljYXRlUHJvdG8pfWlmKGk+PTApe3RoaXMudW5leHBlY3RlZChpKX19fWlzTGl0ZXJhbFByb3BlcnR5TmFtZSgpe3JldHVybiB6bCh0aGlzLnN0YXRlLnR5cGUpfWlzUHJpdmF0ZU5hbWUoZSl7cmV0dXJuIGUudHlwZT09PSJQcml2YXRlTmFtZSJ9Z2V0UHJpdmF0ZU5hbWVTVihlKXtyZXR1cm4gZS5pZC5uYW1lfWhhc1Byb3BlcnR5QXNQcml2YXRlTmFtZShlKXtyZXR1cm4oZS50eXBlPT09Ik1lbWJlckV4cHJlc3Npb24ifHxlLnR5cGU9PT0iT3B0aW9uYWxNZW1iZXJFeHByZXNzaW9uIikmJnRoaXMuaXNQcml2YXRlTmFtZShlLnByb3BlcnR5KX1pc09wdGlvbmFsQ2hhaW4oZSl7cmV0dXJuIGUudHlwZT09PSJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24ifHxlLnR5cGU9PT0iT3B0aW9uYWxDYWxsRXhwcmVzc2lvbiJ9aXNPYmplY3RQcm9wZXJ0eShlKXtyZXR1cm4gZS50eXBlPT09Ik9iamVjdFByb3BlcnR5In1pc09iamVjdE1ldGhvZChlKXtyZXR1cm4gZS50eXBlPT09Ik9iamVjdE1ldGhvZCJ9aW5pdGlhbGl6ZVNjb3BlcyhlKXtpZihlPT09dm9pZCAwKXtlPXRoaXMub3B0aW9ucy5zb3VyY2VUeXBlPT09Im1vZHVsZSJ9Y29uc3QgdD10aGlzLnN0YXRlLmxhYmVsczt0aGlzLnN0YXRlLmxhYmVscz1bXTtjb25zdCByPXRoaXMuZXhwb3J0ZWRJZGVudGlmaWVyczt0aGlzLmV4cG9ydGVkSWRlbnRpZmllcnM9bmV3IFNldDtjb25zdCBzPXRoaXMuaW5Nb2R1bGU7dGhpcy5pbk1vZHVsZT1lO2NvbnN0IGk9dGhpcy5zY29wZTtjb25zdCBuPXRoaXMuZ2V0U2NvcGVIYW5kbGVyKCk7dGhpcy5zY29wZT1uZXcgbih0aGlzLnJhaXNlLmJpbmQodGhpcyksdGhpcy5pbk1vZHVsZSk7Y29uc3QgYT10aGlzLnByb2RQYXJhbTt0aGlzLnByb2RQYXJhbT1uZXcgR2M7Y29uc3Qgbz10aGlzLmNsYXNzU2NvcGU7dGhpcy5jbGFzc1Njb3BlPW5ldyBQYyh0aGlzLnJhaXNlLmJpbmQodGhpcykpO2NvbnN0IGw9dGhpcy5leHByZXNzaW9uU2NvcGU7dGhpcy5leHByZXNzaW9uU2NvcGU9bmV3IF9jKHRoaXMucmFpc2UuYmluZCh0aGlzKSk7cmV0dXJuKCk9Pnt0aGlzLnN0YXRlLmxhYmVscz10O3RoaXMuZXhwb3J0ZWRJZGVudGlmaWVycz1yO3RoaXMuaW5Nb2R1bGU9czt0aGlzLnNjb3BlPWk7dGhpcy5wcm9kUGFyYW09YTt0aGlzLmNsYXNzU2NvcGU9bzt0aGlzLmV4cHJlc3Npb25TY29wZT1sfX1lbnRlckluaXRpYWxTY29wZXMoKXtsZXQgZT1qYztpZih0aGlzLmluTW9kdWxlKXtlfD16Y310aGlzLnNjb3BlLmVudGVyKEN1KTt0aGlzLnByb2RQYXJhbS5lbnRlcihlKX19Y2xhc3MgSGN7Y29uc3RydWN0b3IoKXt0aGlzLnNob3J0aGFuZEFzc2lnbj0tMTt0aGlzLmRvdWJsZVByb3RvPS0xO3RoaXMub3B0aW9uYWxQYXJhbWV0ZXJzPS0xfX1jbGFzcyBXY3tjb25zdHJ1Y3RvcihlLHQscil7dGhpcy50eXBlPSIiO3RoaXMuc3RhcnQ9dDt0aGlzLmVuZD0wO3RoaXMubG9jPW5ldyB0bChyKTtpZihlIT1udWxsJiZlLm9wdGlvbnMucmFuZ2VzKXRoaXMucmFuZ2U9W3QsMF07aWYoZSE9bnVsbCYmZS5maWxlbmFtZSl0aGlzLmxvYy5maWxlbmFtZT1lLmZpbGVuYW1lfX1jb25zdCBLYz1XYy5wcm90b3R5cGU7e0tjLl9fY2xvbmU9ZnVuY3Rpb24oKXtjb25zdCBlPW5ldyBXYztjb25zdCB0PU9iamVjdC5rZXlzKHRoaXMpO2ZvcihsZXQgcj0wLHM9dC5sZW5ndGg7cjxzO3IrKyl7Y29uc3Qgcz10W3JdO2lmKHMhPT0ibGVhZGluZ0NvbW1lbnRzIiYmcyE9PSJ0cmFpbGluZ0NvbW1lbnRzIiYmcyE9PSJpbm5lckNvbW1lbnRzIil7ZVtzXT10aGlzW3NdfX1yZXR1cm4gZX19ZnVuY3Rpb24gJGMoZSl7cmV0dXJuIFljKGUpfWZ1bmN0aW9uIFljKGUpe2NvbnN0e3R5cGU6dCxzdGFydDpyLGVuZDpzLGxvYzppLHJhbmdlOm4sZXh0cmE6YSxuYW1lOm99PWU7Y29uc3QgbD1PYmplY3QuY3JlYXRlKEtjKTtsLnR5cGU9dDtsLnN0YXJ0PXI7bC5lbmQ9cztsLmxvYz1pO2wucmFuZ2U9bjtsLmV4dHJhPWE7bC5uYW1lPW87aWYodD09PSJQbGFjZWhvbGRlciIpe2wuZXhwZWN0ZWROb2RlPWUuZXhwZWN0ZWROb2RlfXJldHVybiBsfWZ1bmN0aW9uIFFjKGUpe2NvbnN0e3R5cGU6dCxzdGFydDpyLGVuZDpzLGxvYzppLHJhbmdlOm4sZXh0cmE6YX09ZTtpZih0PT09IlBsYWNlaG9sZGVyIil7cmV0dXJuICRjKGUpfWNvbnN0IG89T2JqZWN0LmNyZWF0ZShLYyk7by50eXBlPSJTdHJpbmdMaXRlcmFsIjtvLnN0YXJ0PXI7by5lbmQ9cztvLmxvYz1pO28ucmFuZ2U9bjtvLmV4dHJhPWE7by52YWx1ZT1lLnZhbHVlO3JldHVybiBvfWNsYXNzIFpjIGV4dGVuZHMgSmN7c3RhcnROb2RlKCl7cmV0dXJuIG5ldyBXYyh0aGlzLHRoaXMuc3RhdGUuc3RhcnQsdGhpcy5zdGF0ZS5zdGFydExvYyl9c3RhcnROb2RlQXQoZSx0KXtyZXR1cm4gbmV3IFdjKHRoaXMsZSx0KX1zdGFydE5vZGVBdE5vZGUoZSl7cmV0dXJuIHRoaXMuc3RhcnROb2RlQXQoZS5zdGFydCxlLmxvYy5zdGFydCl9ZmluaXNoTm9kZShlLHQpe3JldHVybiB0aGlzLmZpbmlzaE5vZGVBdChlLHQsdGhpcy5zdGF0ZS5sYXN0VG9rRW5kLHRoaXMuc3RhdGUubGFzdFRva0VuZExvYyl9ZmluaXNoTm9kZUF0KGUsdCxyLHMpe2UudHlwZT10O2UuZW5kPXI7ZS5sb2MuZW5kPXM7aWYodGhpcy5vcHRpb25zLnJhbmdlcyllLnJhbmdlWzFdPXI7aWYodGhpcy5vcHRpb25zLmF0dGFjaENvbW1lbnQpdGhpcy5wcm9jZXNzQ29tbWVudChlKTtyZXR1cm4gZX1yZXNldFN0YXJ0TG9jYXRpb24oZSx0LHIpe2Uuc3RhcnQ9dDtlLmxvYy5zdGFydD1yO2lmKHRoaXMub3B0aW9ucy5yYW5nZXMpZS5yYW5nZVswXT10fXJlc2V0RW5kTG9jYXRpb24oZSx0LHIpe2lmKHQ9PT12b2lkIDApe3Q9dGhpcy5zdGF0ZS5sYXN0VG9rRW5kfWlmKHI9PT12b2lkIDApe3I9dGhpcy5zdGF0ZS5sYXN0VG9rRW5kTG9jfWUuZW5kPXQ7ZS5sb2MuZW5kPXI7aWYodGhpcy5vcHRpb25zLnJhbmdlcyllLnJhbmdlWzFdPXR9cmVzZXRTdGFydExvY2F0aW9uRnJvbU5vZGUoZSx0KXt0aGlzLnJlc2V0U3RhcnRMb2NhdGlvbihlLHQuc3RhcnQsdC5sb2Muc3RhcnQpfX1jb25zdCBlaD1uZXcgU2V0KFsiXyIsImFueSIsImJvb2wiLCJib29sZWFuIiwiZW1wdHkiLCJleHRlbmRzIiwiZmFsc2UiLCJpbnRlcmZhY2UiLCJtaXhlZCIsIm51bGwiLCJudW1iZXIiLCJzdGF0aWMiLCJzdHJpbmciLCJ0cnVlIiwidHlwZW9mIiwidm9pZCJdKTtjb25zdCB0aD1mbCh7QW1iaWd1b3VzQ29uZGl0aW9uYWxBcnJvdzoiQW1iaWd1b3VzIGV4cHJlc3Npb246IHdyYXAgdGhlIGFycm93IGZ1bmN0aW9ucyBpbiBwYXJlbnRoZXNlcyB0byBkaXNhbWJpZ3VhdGUuIixBbWJpZ3VvdXNEZWNsYXJlTW9kdWxlS2luZDoiRm91bmQgYm90aCBgZGVjbGFyZSBtb2R1bGUuZXhwb3J0c2AgYW5kIGBkZWNsYXJlIGV4cG9ydGAgaW4gdGhlIHNhbWUgbW9kdWxlLiBNb2R1bGVzIGNhbiBvbmx5IGhhdmUgMSBzaW5jZSB0aGV5IGFyZSBlaXRoZXIgYW4gRVMgbW9kdWxlIG9yIHRoZXkgYXJlIGEgQ29tbW9uSlMgbW9kdWxlLiIsQXNzaWduUmVzZXJ2ZWRUeXBlOiJDYW5ub3Qgb3ZlcndyaXRlIHJlc2VydmVkIHR5cGUgJTAuIixEZWNsYXJlQ2xhc3NFbGVtZW50OiJUaGUgYGRlY2xhcmVgIG1vZGlmaWVyIGNhbiBvbmx5IGFwcGVhciBvbiBjbGFzcyBmaWVsZHMuIixEZWNsYXJlQ2xhc3NGaWVsZEluaXRpYWxpemVyOiJJbml0aWFsaXplcnMgYXJlIG5vdCBhbGxvd2VkIGluIGZpZWxkcyB3aXRoIHRoZSBgZGVjbGFyZWAgbW9kaWZpZXIuIixEdXBsaWNhdGVEZWNsYXJlTW9kdWxlRXhwb3J0czoiRHVwbGljYXRlIGBkZWNsYXJlIG1vZHVsZS5leHBvcnRzYCBzdGF0ZW1lbnQuIixFbnVtQm9vbGVhbk1lbWJlck5vdEluaXRpYWxpemVkOiJCb29sZWFuIGVudW0gbWVtYmVycyBuZWVkIHRvIGJlIGluaXRpYWxpemVkLiBVc2UgZWl0aGVyIGAlMCA9IHRydWUsYCBvciBgJTAgPSBmYWxzZSxgIGluIGVudW0gYCUxYC4iLEVudW1EdXBsaWNhdGVNZW1iZXJOYW1lOiJFbnVtIG1lbWJlciBuYW1lcyBuZWVkIHRvIGJlIHVuaXF1ZSwgYnV0IHRoZSBuYW1lIGAlMGAgaGFzIGFscmVhZHkgYmVlbiB1c2VkIGJlZm9yZSBpbiBlbnVtIGAlMWAuIixFbnVtSW5jb25zaXN0ZW50TWVtYmVyVmFsdWVzOiJFbnVtIGAlMGAgaGFzIGluY29uc2lzdGVudCBtZW1iZXIgaW5pdGlhbGl6ZXJzLiBFaXRoZXIgdXNlIG5vIGluaXRpYWxpemVycywgb3IgY29uc2lzdGVudGx5IHVzZSBsaXRlcmFscyAoZWl0aGVyIGJvb2xlYW5zLCBudW1iZXJzLCBvciBzdHJpbmdzKSBmb3IgYWxsIG1lbWJlciBpbml0aWFsaXplcnMuIixFbnVtSW52YWxpZEV4cGxpY2l0VHlwZToiRW51bSB0eXBlIGAlMWAgaXMgbm90IHZhbGlkLiBVc2Ugb25lIG9mIGBib29sZWFuYCwgYG51bWJlcmAsIGBzdHJpbmdgLCBvciBgc3ltYm9sYCBpbiBlbnVtIGAlMGAuIixFbnVtSW52YWxpZEV4cGxpY2l0VHlwZVVua25vd25TdXBwbGllZDoiU3VwcGxpZWQgZW51bSB0eXBlIGlzIG5vdCB2YWxpZC4gVXNlIG9uZSBvZiBgYm9vbGVhbmAsIGBudW1iZXJgLCBgc3RyaW5nYCwgb3IgYHN5bWJvbGAgaW4gZW51bSBgJTBgLiIsRW51bUludmFsaWRNZW1iZXJJbml0aWFsaXplclByaW1hcnlUeXBlOiJFbnVtIGAlMGAgaGFzIHR5cGUgYCUyYCwgc28gdGhlIGluaXRpYWxpemVyIG9mIGAlMWAgbmVlZHMgdG8gYmUgYSAlMiBsaXRlcmFsLiIsRW51bUludmFsaWRNZW1iZXJJbml0aWFsaXplclN5bWJvbFR5cGU6IlN5bWJvbCBlbnVtIG1lbWJlcnMgY2Fubm90IGJlIGluaXRpYWxpemVkLiBVc2UgYCUxLGAgaW4gZW51bSBgJTBgLiIsRW51bUludmFsaWRNZW1iZXJJbml0aWFsaXplclVua25vd25UeXBlOiJUaGUgZW51bSBtZW1iZXIgaW5pdGlhbGl6ZXIgZm9yIGAlMWAgbmVlZHMgdG8gYmUgYSBsaXRlcmFsIChlaXRoZXIgYSBib29sZWFuLCBudW1iZXIsIG9yIHN0cmluZykgaW4gZW51bSBgJTBgLiIsRW51bUludmFsaWRNZW1iZXJOYW1lOiJFbnVtIG1lbWJlciBuYW1lcyBjYW5ub3Qgc3RhcnQgd2l0aCBsb3dlcmNhc2UgJ2EnIHRocm91Z2ggJ3onLiBJbnN0ZWFkIG9mIHVzaW5nIGAlMGAsIGNvbnNpZGVyIHVzaW5nIGAlMWAsIGluIGVudW0gYCUyYC4iLEVudW1OdW1iZXJNZW1iZXJOb3RJbml0aWFsaXplZDoiTnVtYmVyIGVudW0gbWVtYmVycyBuZWVkIHRvIGJlIGluaXRpYWxpemVkLCBlLmcuIGAlMSA9IDFgIGluIGVudW0gYCUwYC4iLEVudW1TdHJpbmdNZW1iZXJJbmNvbnNpc3RlbnRseUluaXRhaWxpemVkOiJTdHJpbmcgZW51bSBtZW1iZXJzIG5lZWQgdG8gY29uc2lzdGVudGx5IGVpdGhlciBhbGwgdXNlIGluaXRpYWxpemVycywgb3IgdXNlIG5vIGluaXRpYWxpemVycywgaW4gZW51bSBgJTBgLiIsR2V0dGVyTWF5Tm90SGF2ZVRoaXNQYXJhbToiQSBnZXR0ZXIgY2Fubm90IGhhdmUgYSBgdGhpc2AgcGFyYW1ldGVyLiIsSW1wb3J0VHlwZVNob3J0aGFuZE9ubHlJblB1cmVJbXBvcnQ6IlRoZSBgdHlwZWAgYW5kIGB0eXBlb2ZgIGtleXdvcmRzIG9uIG5hbWVkIGltcG9ydHMgY2FuIG9ubHkgYmUgdXNlZCBvbiByZWd1bGFyIGBpbXBvcnRgIHN0YXRlbWVudHMuIEl0IGNhbm5vdCBiZSB1c2VkIHdpdGggYGltcG9ydCB0eXBlYCBvciBgaW1wb3J0IHR5cGVvZmAgc3RhdGVtZW50cy4iLEluZXhhY3RJbnNpZGVFeGFjdDoiRXhwbGljaXQgaW5leGFjdCBzeW50YXggY2Fubm90IGFwcGVhciBpbnNpZGUgYW4gZXhwbGljaXQgZXhhY3Qgb2JqZWN0IHR5cGUuIixJbmV4YWN0SW5zaWRlTm9uT2JqZWN0OiJFeHBsaWNpdCBpbmV4YWN0IHN5bnRheCBjYW5ub3QgYXBwZWFyIGluIGNsYXNzIG9yIGludGVyZmFjZSBkZWZpbml0aW9ucy4iLEluZXhhY3RWYXJpYW5jZToiRXhwbGljaXQgaW5leGFjdCBzeW50YXggY2Fubm90IGhhdmUgdmFyaWFuY2UuIixJbnZhbGlkTm9uVHlwZUltcG9ydEluRGVjbGFyZU1vZHVsZToiSW1wb3J0cyB3aXRoaW4gYSBgZGVjbGFyZSBtb2R1bGVgIGJvZHkgbXVzdCBhbHdheXMgYmUgYGltcG9ydCB0eXBlYCBvciBgaW1wb3J0IHR5cGVvZmAuIixNaXNzaW5nVHlwZVBhcmFtRGVmYXVsdDoiVHlwZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24gbmVlZHMgYSBkZWZhdWx0LCBzaW5jZSBhIHByZWNlZGluZyB0eXBlIHBhcmFtZXRlciBkZWNsYXJhdGlvbiBoYXMgYSBkZWZhdWx0LiIsTmVzdGVkRGVjbGFyZU1vZHVsZToiYGRlY2xhcmUgbW9kdWxlYCBjYW5ub3QgYmUgdXNlZCBpbnNpZGUgYW5vdGhlciBgZGVjbGFyZSBtb2R1bGVgLiIsTmVzdGVkRmxvd0NvbW1lbnQ6IkNhbm5vdCBoYXZlIGEgZmxvdyBjb21tZW50IGluc2lkZSBhbm90aGVyIGZsb3cgY29tbWVudC4iLFBhdHRlcm5Jc09wdGlvbmFsOiJBIGJpbmRpbmcgcGF0dGVybiBwYXJhbWV0ZXIgY2Fubm90IGJlIG9wdGlvbmFsIGluIGFuIGltcGxlbWVudGF0aW9uIHNpZ25hdHVyZS4iLFNldHRlck1heU5vdEhhdmVUaGlzUGFyYW06IkEgc2V0dGVyIGNhbm5vdCBoYXZlIGEgYHRoaXNgIHBhcmFtZXRlci4iLFNwcmVhZFZhcmlhbmNlOiJTcHJlYWQgcHJvcGVydGllcyBjYW5ub3QgaGF2ZSB2YXJpYW5jZS4iLFRoaXNQYXJhbUFubm90YXRpb25SZXF1aXJlZDoiQSB0eXBlIGFubm90YXRpb24gaXMgcmVxdWlyZWQgZm9yIHRoZSBgdGhpc2AgcGFyYW1ldGVyLiIsVGhpc1BhcmFtQmFubmVkSW5Db25zdHJ1Y3RvcjoiQ29uc3RydWN0b3JzIGNhbm5vdCBoYXZlIGEgYHRoaXNgIHBhcmFtZXRlcjsgY29uc3RydWN0b3JzIGRvbid0IGJpbmQgYHRoaXNgIGxpa2Ugb3RoZXIgZnVuY3Rpb25zLiIsVGhpc1BhcmFtTWF5Tm90QmVPcHRpb25hbDoiVGhlIGB0aGlzYCBwYXJhbWV0ZXIgY2Fubm90IGJlIG9wdGlvbmFsLiIsVGhpc1BhcmFtTXVzdEJlRmlyc3Q6IlRoZSBgdGhpc2AgcGFyYW1ldGVyIG11c3QgYmUgdGhlIGZpcnN0IGZ1bmN0aW9uIHBhcmFtZXRlci4iLFRoaXNQYXJhbU5vRGVmYXVsdDoiVGhlIGB0aGlzYCBwYXJhbWV0ZXIgbWF5IG5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZS4iLFR5cGVCZWZvcmVJbml0aWFsaXplcjoiVHlwZSBhbm5vdGF0aW9ucyBtdXN0IGNvbWUgYmVmb3JlIGRlZmF1bHQgYXNzaWdubWVudHMsIGUuZy4gaW5zdGVhZCBvZiBgYWdlID0gMjU6IG51bWJlcmAgdXNlIGBhZ2U6IG51bWJlciA9IDI1YC4iLFR5cGVDYXN0SW5QYXR0ZXJuOiJUaGUgdHlwZSBjYXN0IGV4cHJlc3Npb24gaXMgZXhwZWN0ZWQgdG8gYmUgd3JhcHBlZCB3aXRoIHBhcmVudGhlc2lzLiIsVW5leHBlY3RlZEV4cGxpY2l0SW5leGFjdEluT2JqZWN0OiJFeHBsaWNpdCBpbmV4YWN0IHN5bnRheCBtdXN0IGFwcGVhciBhdCB0aGUgZW5kIG9mIGFuIGluZXhhY3Qgb2JqZWN0LiIsVW5leHBlY3RlZFJlc2VydmVkVHlwZToiVW5leHBlY3RlZCByZXNlcnZlZCB0eXBlICUwLiIsVW5leHBlY3RlZFJlc2VydmVkVW5kZXJzY29yZToiYF9gIGlzIG9ubHkgYWxsb3dlZCBhcyBhIHR5cGUgYXJndW1lbnQgdG8gY2FsbCBvciBuZXcuIixVbmV4cGVjdGVkU3BhY2VCZXR3ZWVuTW9kdWxvQ2hlY2tzOiJTcGFjZXMgYmV0d2VlbiBgJWAgYW5kIGBjaGVja3NgIGFyZSBub3QgYWxsb3dlZCBoZXJlLiIsVW5leHBlY3RlZFNwcmVhZFR5cGU6IlNwcmVhZCBvcGVyYXRvciBjYW5ub3QgYXBwZWFyIGluIGNsYXNzIG9yIGludGVyZmFjZSBkZWZpbml0aW9ucy4iLFVuZXhwZWN0ZWRTdWJ0cmFjdGlvbk9wZXJhbmQ6J1VuZXhwZWN0ZWQgdG9rZW4sIGV4cGVjdGVkICJudW1iZXIiIG9yICJiaWdpbnQiLicsVW5leHBlY3RlZFRva2VuQWZ0ZXJUeXBlUGFyYW1ldGVyOiJFeHBlY3RlZCBhbiBhcnJvdyBmdW5jdGlvbiBhZnRlciB0aGlzIHR5cGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9uLiIsVW5leHBlY3RlZFR5cGVQYXJhbWV0ZXJCZWZvcmVBc3luY0Fycm93RnVuY3Rpb246IlR5cGUgcGFyYW1ldGVycyBtdXN0IGNvbWUgYWZ0ZXIgdGhlIGFzeW5jIGtleXdvcmQsIGUuZy4gaW5zdGVhZCBvZiBgPFQ+IGFzeW5jICgpID0+IHt9YCwgdXNlIGBhc3luYyA8VD4oKSA9PiB7fWAuIixVbnN1cHBvcnRlZERlY2xhcmVFeHBvcnRLaW5kOiJgZGVjbGFyZSBleHBvcnQgJTBgIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBgJTFgIGluc3RlYWQuIixVbnN1cHBvcnRlZFN0YXRlbWVudEluRGVjbGFyZU1vZHVsZToiT25seSBkZWNsYXJlcyBhbmQgdHlwZSBpbXBvcnRzIGFyZSBhbGxvd2VkIGluc2lkZSBkZWNsYXJlIG1vZHVsZS4iLFVudGVybWluYXRlZEZsb3dDb21tZW50OiJVbnRlcm1pbmF0ZWQgZmxvdy1jb21tZW50LiJ9LHVsLlN5bnRheEVycm9yLCJmbG93Iik7ZnVuY3Rpb24gcmgoZSl7cmV0dXJuIGUudHlwZT09PSJEZWNsYXJlRXhwb3J0QWxsRGVjbGFyYXRpb24ifHxlLnR5cGU9PT0iRGVjbGFyZUV4cG9ydERlY2xhcmF0aW9uIiYmKCFlLmRlY2xhcmF0aW9ufHxlLmRlY2xhcmF0aW9uLnR5cGUhPT0iVHlwZUFsaWFzIiYmZS5kZWNsYXJhdGlvbi50eXBlIT09IkludGVyZmFjZURlY2xhcmF0aW9uIil9ZnVuY3Rpb24gc2goZSl7cmV0dXJuIGUuaW1wb3J0S2luZD09PSJ0eXBlInx8ZS5pbXBvcnRLaW5kPT09InR5cGVvZiJ9ZnVuY3Rpb24gaWgoZSl7cmV0dXJuIFVsKGUpJiZlIT09OTF9Y29uc3Qgbmg9e2NvbnN0OiJkZWNsYXJlIGV4cG9ydCB2YXIiLGxldDoiZGVjbGFyZSBleHBvcnQgdmFyIix0eXBlOiJleHBvcnQgdHlwZSIsaW50ZXJmYWNlOiJleHBvcnQgaW50ZXJmYWNlIn07ZnVuY3Rpb24gYWgoZSx0KXtjb25zdCByPVtdO2NvbnN0IHM9W107Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspeyh0KGVbaV0saSxlKT9yOnMpLnB1c2goZVtpXSl9cmV0dXJuW3Isc119Y29uc3Qgb2g9L1wqP1xzKkAoKD86bm8pP2Zsb3cpXGIvO3ZhciBsaD1lPT5jbGFzcyBleHRlbmRzIGV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpO3RoaXMuZmxvd1ByYWdtYT11bmRlZmluZWR9Z2V0U2NvcGVIYW5kbGVyKCl7cmV0dXJuIHhjfXNob3VsZFBhcnNlVHlwZXMoKXtyZXR1cm4gdGhpcy5nZXRQbHVnaW5PcHRpb24oImZsb3ciLCJhbGwiKXx8dGhpcy5mbG93UHJhZ21hPT09ImZsb3cifXNob3VsZFBhcnNlRW51bXMoKXtyZXR1cm4hIXRoaXMuZ2V0UGx1Z2luT3B0aW9uKCJmbG93IiwiZW51bXMiKX1maW5pc2hUb2tlbihlLHQpe2lmKGUhPT0xMjMmJmUhPT0xMyYmZSE9PTI2KXtpZih0aGlzLmZsb3dQcmFnbWE9PT11bmRlZmluZWQpe3RoaXMuZmxvd1ByYWdtYT1udWxsfX1yZXR1cm4gc3VwZXIuZmluaXNoVG9rZW4oZSx0KX1hZGRDb21tZW50KGUpe2lmKHRoaXMuZmxvd1ByYWdtYT09PXVuZGVmaW5lZCl7Y29uc3QgdD1vaC5leGVjKGUudmFsdWUpO2lmKCF0KTtlbHNlIGlmKHRbMV09PT0iZmxvdyIpe3RoaXMuZmxvd1ByYWdtYT0iZmxvdyJ9ZWxzZSBpZih0WzFdPT09Im5vZmxvdyIpe3RoaXMuZmxvd1ByYWdtYT0ibm9mbG93In1lbHNle3Rocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBmbG93IHByYWdtYSIpfX1yZXR1cm4gc3VwZXIuYWRkQ29tbWVudChlKX1mbG93UGFyc2VUeXBlSW5pdGlhbGlzZXIoZSl7Y29uc3QgdD10aGlzLnN0YXRlLmluVHlwZTt0aGlzLnN0YXRlLmluVHlwZT10cnVlO3RoaXMuZXhwZWN0KGV8fDE0KTtjb25zdCByPXRoaXMuZmxvd1BhcnNlVHlwZSgpO3RoaXMuc3RhdGUuaW5UeXBlPXQ7cmV0dXJuIHJ9Zmxvd1BhcnNlUHJlZGljYXRlKCl7Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO2NvbnN0IHQ9dGhpcy5zdGF0ZS5zdGFydDt0aGlzLm5leHQoKTt0aGlzLmV4cGVjdENvbnRleHR1YWwoMTAxKTtpZih0aGlzLnN0YXRlLmxhc3RUb2tTdGFydD50KzEpe3RoaXMucmFpc2UodCx0aC5VbmV4cGVjdGVkU3BhY2VCZXR3ZWVuTW9kdWxvQ2hlY2tzKX1pZih0aGlzLmVhdCgxMCkpe2UudmFsdWU9dGhpcy5wYXJzZUV4cHJlc3Npb24oKTt0aGlzLmV4cGVjdCgxMSk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJEZWNsYXJlZFByZWRpY2F0ZSIpfWVsc2V7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJJbmZlcnJlZFByZWRpY2F0ZSIpfX1mbG93UGFyc2VUeXBlQW5kUHJlZGljYXRlSW5pdGlhbGlzZXIoKXtjb25zdCBlPXRoaXMuc3RhdGUuaW5UeXBlO3RoaXMuc3RhdGUuaW5UeXBlPXRydWU7dGhpcy5leHBlY3QoMTQpO2xldCB0PW51bGw7bGV0IHI9bnVsbDtpZih0aGlzLm1hdGNoKDQ4KSl7dGhpcy5zdGF0ZS5pblR5cGU9ZTtyPXRoaXMuZmxvd1BhcnNlUHJlZGljYXRlKCl9ZWxzZXt0PXRoaXMuZmxvd1BhcnNlVHlwZSgpO3RoaXMuc3RhdGUuaW5UeXBlPWU7aWYodGhpcy5tYXRjaCg0OCkpe3I9dGhpcy5mbG93UGFyc2VQcmVkaWNhdGUoKX19cmV0dXJuW3Qscl19Zmxvd1BhcnNlRGVjbGFyZUNsYXNzKGUpe3RoaXMubmV4dCgpO3RoaXMuZmxvd1BhcnNlSW50ZXJmYWNlaXNoKGUsdHJ1ZSk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJEZWNsYXJlQ2xhc3MiKX1mbG93UGFyc2VEZWNsYXJlRnVuY3Rpb24oZSl7dGhpcy5uZXh0KCk7Y29uc3QgdD1lLmlkPXRoaXMucGFyc2VJZGVudGlmaWVyKCk7Y29uc3Qgcj10aGlzLnN0YXJ0Tm9kZSgpO2NvbnN0IHM9dGhpcy5zdGFydE5vZGUoKTtpZih0aGlzLm1hdGNoKDQzKSl7ci50eXBlUGFyYW1ldGVycz10aGlzLmZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbigpfWVsc2V7ci50eXBlUGFyYW1ldGVycz1udWxsfXRoaXMuZXhwZWN0KDEwKTtjb25zdCBpPXRoaXMuZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW1zKCk7ci5wYXJhbXM9aS5wYXJhbXM7ci5yZXN0PWkucmVzdDtyLnRoaXM9aS5fdGhpczt0aGlzLmV4cGVjdCgxMSk7W3IucmV0dXJuVHlwZSxlLnByZWRpY2F0ZV09dGhpcy5mbG93UGFyc2VUeXBlQW5kUHJlZGljYXRlSW5pdGlhbGlzZXIoKTtzLnR5cGVBbm5vdGF0aW9uPXRoaXMuZmluaXNoTm9kZShyLCJGdW5jdGlvblR5cGVBbm5vdGF0aW9uIik7dC50eXBlQW5ub3RhdGlvbj10aGlzLmZpbmlzaE5vZGUocywiVHlwZUFubm90YXRpb24iKTt0aGlzLnJlc2V0RW5kTG9jYXRpb24odCk7dGhpcy5zZW1pY29sb24oKTt0aGlzLnNjb3BlLmRlY2xhcmVOYW1lKGUuaWQubmFtZSxuYyxlLmlkLnN0YXJ0KTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIkRlY2xhcmVGdW5jdGlvbiIpfWZsb3dQYXJzZURlY2xhcmUoZSx0KXtpZih0aGlzLm1hdGNoKDc0KSl7cmV0dXJuIHRoaXMuZmxvd1BhcnNlRGVjbGFyZUNsYXNzKGUpfWVsc2UgaWYodGhpcy5tYXRjaCg2Mikpe3JldHVybiB0aGlzLmZsb3dQYXJzZURlY2xhcmVGdW5jdGlvbihlKX1lbHNlIGlmKHRoaXMubWF0Y2goNjgpKXtyZXR1cm4gdGhpcy5mbG93UGFyc2VEZWNsYXJlVmFyaWFibGUoZSl9ZWxzZSBpZih0aGlzLmVhdENvbnRleHR1YWwoMTE3KSl7aWYodGhpcy5tYXRjaCgxNikpe3JldHVybiB0aGlzLmZsb3dQYXJzZURlY2xhcmVNb2R1bGVFeHBvcnRzKGUpfWVsc2V7aWYodCl7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLmxhc3RUb2tTdGFydCx0aC5OZXN0ZWREZWNsYXJlTW9kdWxlKX1yZXR1cm4gdGhpcy5mbG93UGFyc2VEZWNsYXJlTW9kdWxlKGUpfX1lbHNlIGlmKHRoaXMuaXNDb250ZXh0dWFsKDEyMCkpe3JldHVybiB0aGlzLmZsb3dQYXJzZURlY2xhcmVUeXBlQWxpYXMoZSl9ZWxzZSBpZih0aGlzLmlzQ29udGV4dHVhbCgxMjEpKXtyZXR1cm4gdGhpcy5mbG93UGFyc2VEZWNsYXJlT3BhcXVlVHlwZShlKX1lbHNlIGlmKHRoaXMuaXNDb250ZXh0dWFsKDExOSkpe3JldHVybiB0aGlzLmZsb3dQYXJzZURlY2xhcmVJbnRlcmZhY2UoZSl9ZWxzZSBpZih0aGlzLm1hdGNoKDc2KSl7cmV0dXJuIHRoaXMuZmxvd1BhcnNlRGVjbGFyZUV4cG9ydERlY2xhcmF0aW9uKGUsdCl9ZWxzZXt0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKX19Zmxvd1BhcnNlRGVjbGFyZVZhcmlhYmxlKGUpe3RoaXMubmV4dCgpO2UuaWQ9dGhpcy5mbG93UGFyc2VUeXBlQW5ub3RhdGFibGVJZGVudGlmaWVyKHRydWUpO3RoaXMuc2NvcGUuZGVjbGFyZU5hbWUoZS5pZC5uYW1lLEt1LGUuaWQuc3RhcnQpO3RoaXMuc2VtaWNvbG9uKCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJEZWNsYXJlVmFyaWFibGUiKX1mbG93UGFyc2VEZWNsYXJlTW9kdWxlKGUpe3RoaXMuc2NvcGUuZW50ZXIod3UpO2lmKHRoaXMubWF0Y2goMTIzKSl7ZS5pZD10aGlzLnBhcnNlRXhwckF0b20oKX1lbHNle2UuaWQ9dGhpcy5wYXJzZUlkZW50aWZpZXIoKX1jb25zdCB0PWUuYm9keT10aGlzLnN0YXJ0Tm9kZSgpO2NvbnN0IHI9dC5ib2R5PVtdO3RoaXMuZXhwZWN0KDUpO3doaWxlKCF0aGlzLm1hdGNoKDgpKXtsZXQgZT10aGlzLnN0YXJ0Tm9kZSgpO2lmKHRoaXMubWF0Y2goNzcpKXt0aGlzLm5leHQoKTtpZighdGhpcy5pc0NvbnRleHR1YWwoMTIwKSYmIXRoaXMubWF0Y2goODEpKXt0aGlzLnJhaXNlKHRoaXMuc3RhdGUubGFzdFRva1N0YXJ0LHRoLkludmFsaWROb25UeXBlSW1wb3J0SW5EZWNsYXJlTW9kdWxlKX10aGlzLnBhcnNlSW1wb3J0KGUpfWVsc2V7dGhpcy5leHBlY3RDb250ZXh0dWFsKDExNSx0aC5VbnN1cHBvcnRlZFN0YXRlbWVudEluRGVjbGFyZU1vZHVsZSk7ZT10aGlzLmZsb3dQYXJzZURlY2xhcmUoZSx0cnVlKX1yLnB1c2goZSl9dGhpcy5zY29wZS5leGl0KCk7dGhpcy5leHBlY3QoOCk7dGhpcy5maW5pc2hOb2RlKHQsIkJsb2NrU3RhdGVtZW50Iik7bGV0IHM9bnVsbDtsZXQgaT1mYWxzZTtyLmZvckVhY2goKGU9PntpZihyaChlKSl7aWYocz09PSJDb21tb25KUyIpe3RoaXMucmFpc2UoZS5zdGFydCx0aC5BbWJpZ3VvdXNEZWNsYXJlTW9kdWxlS2luZCl9cz0iRVMifWVsc2UgaWYoZS50eXBlPT09IkRlY2xhcmVNb2R1bGVFeHBvcnRzIil7aWYoaSl7dGhpcy5yYWlzZShlLnN0YXJ0LHRoLkR1cGxpY2F0ZURlY2xhcmVNb2R1bGVFeHBvcnRzKX1pZihzPT09IkVTIil7dGhpcy5yYWlzZShlLnN0YXJ0LHRoLkFtYmlndW91c0RlY2xhcmVNb2R1bGVLaW5kKX1zPSJDb21tb25KUyI7aT10cnVlfX0pKTtlLmtpbmQ9c3x8IkNvbW1vbkpTIjtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIkRlY2xhcmVNb2R1bGUiKX1mbG93UGFyc2VEZWNsYXJlRXhwb3J0RGVjbGFyYXRpb24oZSx0KXt0aGlzLmV4cGVjdCg3Nik7aWYodGhpcy5lYXQoNTkpKXtpZih0aGlzLm1hdGNoKDYyKXx8dGhpcy5tYXRjaCg3NCkpe2UuZGVjbGFyYXRpb249dGhpcy5mbG93UGFyc2VEZWNsYXJlKHRoaXMuc3RhcnROb2RlKCkpfWVsc2V7ZS5kZWNsYXJhdGlvbj10aGlzLmZsb3dQYXJzZVR5cGUoKTt0aGlzLnNlbWljb2xvbigpfWUuZGVmYXVsdD10cnVlO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiRGVjbGFyZUV4cG9ydERlY2xhcmF0aW9uIil9ZWxzZXtpZih0aGlzLm1hdGNoKDY5KXx8dGhpcy5pc0xldCgpfHwodGhpcy5pc0NvbnRleHR1YWwoMTIwKXx8dGhpcy5pc0NvbnRleHR1YWwoMTE5KSkmJiF0KXtjb25zdCBlPXRoaXMuc3RhdGUudmFsdWU7Y29uc3QgdD1uaFtlXTt0aHJvdyB0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsdGguVW5zdXBwb3J0ZWREZWNsYXJlRXhwb3J0S2luZCxlLHQpfWlmKHRoaXMubWF0Y2goNjgpfHx0aGlzLm1hdGNoKDYyKXx8dGhpcy5tYXRjaCg3NCl8fHRoaXMuaXNDb250ZXh0dWFsKDEyMSkpe2UuZGVjbGFyYXRpb249dGhpcy5mbG93UGFyc2VEZWNsYXJlKHRoaXMuc3RhcnROb2RlKCkpO2UuZGVmYXVsdD1mYWxzZTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIkRlY2xhcmVFeHBvcnREZWNsYXJhdGlvbiIpfWVsc2UgaWYodGhpcy5tYXRjaCg0OSl8fHRoaXMubWF0Y2goNSl8fHRoaXMuaXNDb250ZXh0dWFsKDExOSl8fHRoaXMuaXNDb250ZXh0dWFsKDEyMCl8fHRoaXMuaXNDb250ZXh0dWFsKDEyMSkpe2U9dGhpcy5wYXJzZUV4cG9ydChlKTtpZihlLnR5cGU9PT0iRXhwb3J0TmFtZWREZWNsYXJhdGlvbiIpe2UudHlwZT0iRXhwb3J0RGVjbGFyYXRpb24iO2UuZGVmYXVsdD1mYWxzZTtkZWxldGUgZS5leHBvcnRLaW5kfWUudHlwZT0iRGVjbGFyZSIrZS50eXBlO3JldHVybiBlfX10aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKX1mbG93UGFyc2VEZWNsYXJlTW9kdWxlRXhwb3J0cyhlKXt0aGlzLm5leHQoKTt0aGlzLmV4cGVjdENvbnRleHR1YWwoMTAyKTtlLnR5cGVBbm5vdGF0aW9uPXRoaXMuZmxvd1BhcnNlVHlwZUFubm90YXRpb24oKTt0aGlzLnNlbWljb2xvbigpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiRGVjbGFyZU1vZHVsZUV4cG9ydHMiKX1mbG93UGFyc2VEZWNsYXJlVHlwZUFsaWFzKGUpe3RoaXMubmV4dCgpO3RoaXMuZmxvd1BhcnNlVHlwZUFsaWFzKGUpO2UudHlwZT0iRGVjbGFyZVR5cGVBbGlhcyI7cmV0dXJuIGV9Zmxvd1BhcnNlRGVjbGFyZU9wYXF1ZVR5cGUoZSl7dGhpcy5uZXh0KCk7dGhpcy5mbG93UGFyc2VPcGFxdWVUeXBlKGUsdHJ1ZSk7ZS50eXBlPSJEZWNsYXJlT3BhcXVlVHlwZSI7cmV0dXJuIGV9Zmxvd1BhcnNlRGVjbGFyZUludGVyZmFjZShlKXt0aGlzLm5leHQoKTt0aGlzLmZsb3dQYXJzZUludGVyZmFjZWlzaChlKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIkRlY2xhcmVJbnRlcmZhY2UiKX1mbG93UGFyc2VJbnRlcmZhY2Vpc2goZSx0KXtpZih0PT09dm9pZCAwKXt0PWZhbHNlfWUuaWQ9dGhpcy5mbG93UGFyc2VSZXN0cmljdGVkSWRlbnRpZmllcighdCx0cnVlKTt0aGlzLnNjb3BlLmRlY2xhcmVOYW1lKGUuaWQubmFtZSx0PyR1Old1LGUuaWQuc3RhcnQpO2lmKHRoaXMubWF0Y2goNDMpKXtlLnR5cGVQYXJhbWV0ZXJzPXRoaXMuZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCl9ZWxzZXtlLnR5cGVQYXJhbWV0ZXJzPW51bGx9ZS5leHRlbmRzPVtdO2UuaW1wbGVtZW50cz1bXTtlLm1peGlucz1bXTtpZih0aGlzLmVhdCg3NSkpe2Rve2UuZXh0ZW5kcy5wdXNoKHRoaXMuZmxvd1BhcnNlSW50ZXJmYWNlRXh0ZW5kcygpKX13aGlsZSghdCYmdGhpcy5lYXQoMTIpKX1pZih0aGlzLmlzQ29udGV4dHVhbCgxMDgpKXt0aGlzLm5leHQoKTtkb3tlLm1peGlucy5wdXNoKHRoaXMuZmxvd1BhcnNlSW50ZXJmYWNlRXh0ZW5kcygpKX13aGlsZSh0aGlzLmVhdCgxMikpfWlmKHRoaXMuaXNDb250ZXh0dWFsKDEwNCkpe3RoaXMubmV4dCgpO2Rve2UuaW1wbGVtZW50cy5wdXNoKHRoaXMuZmxvd1BhcnNlSW50ZXJmYWNlRXh0ZW5kcygpKX13aGlsZSh0aGlzLmVhdCgxMikpfWUuYm9keT10aGlzLmZsb3dQYXJzZU9iamVjdFR5cGUoe2FsbG93U3RhdGljOnQsYWxsb3dFeGFjdDpmYWxzZSxhbGxvd1NwcmVhZDpmYWxzZSxhbGxvd1Byb3RvOnQsYWxsb3dJbmV4YWN0OmZhbHNlfSl9Zmxvd1BhcnNlSW50ZXJmYWNlRXh0ZW5kcygpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTtlLmlkPXRoaXMuZmxvd1BhcnNlUXVhbGlmaWVkVHlwZUlkZW50aWZpZXIoKTtpZih0aGlzLm1hdGNoKDQzKSl7ZS50eXBlUGFyYW1ldGVycz10aGlzLmZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uKCl9ZWxzZXtlLnR5cGVQYXJhbWV0ZXJzPW51bGx9cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJJbnRlcmZhY2VFeHRlbmRzIil9Zmxvd1BhcnNlSW50ZXJmYWNlKGUpe3RoaXMuZmxvd1BhcnNlSW50ZXJmYWNlaXNoKGUpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiSW50ZXJmYWNlRGVjbGFyYXRpb24iKX1jaGVja05vdFVuZGVyc2NvcmUoZSl7aWYoZT09PSJfIil7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLnN0YXJ0LHRoLlVuZXhwZWN0ZWRSZXNlcnZlZFVuZGVyc2NvcmUpfX1jaGVja1Jlc2VydmVkVHlwZShlLHQscil7aWYoIWVoLmhhcyhlKSlyZXR1cm47dGhpcy5yYWlzZSh0LHI/dGguQXNzaWduUmVzZXJ2ZWRUeXBlOnRoLlVuZXhwZWN0ZWRSZXNlcnZlZFR5cGUsZSl9Zmxvd1BhcnNlUmVzdHJpY3RlZElkZW50aWZpZXIoZSx0KXt0aGlzLmNoZWNrUmVzZXJ2ZWRUeXBlKHRoaXMuc3RhdGUudmFsdWUsdGhpcy5zdGF0ZS5zdGFydCx0KTtyZXR1cm4gdGhpcy5wYXJzZUlkZW50aWZpZXIoZSl9Zmxvd1BhcnNlVHlwZUFsaWFzKGUpe2UuaWQ9dGhpcy5mbG93UGFyc2VSZXN0cmljdGVkSWRlbnRpZmllcihmYWxzZSx0cnVlKTt0aGlzLnNjb3BlLmRlY2xhcmVOYW1lKGUuaWQubmFtZSxXdSxlLmlkLnN0YXJ0KTtpZih0aGlzLm1hdGNoKDQzKSl7ZS50eXBlUGFyYW1ldGVycz10aGlzLmZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbigpfWVsc2V7ZS50eXBlUGFyYW1ldGVycz1udWxsfWUucmlnaHQ9dGhpcy5mbG93UGFyc2VUeXBlSW5pdGlhbGlzZXIoMjcpO3RoaXMuc2VtaWNvbG9uKCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJUeXBlQWxpYXMiKX1mbG93UGFyc2VPcGFxdWVUeXBlKGUsdCl7dGhpcy5leHBlY3RDb250ZXh0dWFsKDEyMCk7ZS5pZD10aGlzLmZsb3dQYXJzZVJlc3RyaWN0ZWRJZGVudGlmaWVyKHRydWUsdHJ1ZSk7dGhpcy5zY29wZS5kZWNsYXJlTmFtZShlLmlkLm5hbWUsV3UsZS5pZC5zdGFydCk7aWYodGhpcy5tYXRjaCg0Mykpe2UudHlwZVBhcmFtZXRlcnM9dGhpcy5mbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKX1lbHNle2UudHlwZVBhcmFtZXRlcnM9bnVsbH1lLnN1cGVydHlwZT1udWxsO2lmKHRoaXMubWF0Y2goMTQpKXtlLnN1cGVydHlwZT10aGlzLmZsb3dQYXJzZVR5cGVJbml0aWFsaXNlcigxNCl9ZS5pbXBsdHlwZT1udWxsO2lmKCF0KXtlLmltcGx0eXBlPXRoaXMuZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKDI3KX10aGlzLnNlbWljb2xvbigpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiT3BhcXVlVHlwZSIpfWZsb3dQYXJzZVR5cGVQYXJhbWV0ZXIoZSl7aWYoZT09PXZvaWQgMCl7ZT1mYWxzZX1jb25zdCB0PXRoaXMuc3RhdGUuc3RhcnQ7Y29uc3Qgcj10aGlzLnN0YXJ0Tm9kZSgpO2NvbnN0IHM9dGhpcy5mbG93UGFyc2VWYXJpYW5jZSgpO2NvbnN0IGk9dGhpcy5mbG93UGFyc2VUeXBlQW5ub3RhdGFibGVJZGVudGlmaWVyKCk7ci5uYW1lPWkubmFtZTtyLnZhcmlhbmNlPXM7ci5ib3VuZD1pLnR5cGVBbm5vdGF0aW9uO2lmKHRoaXMubWF0Y2goMjcpKXt0aGlzLmVhdCgyNyk7ci5kZWZhdWx0PXRoaXMuZmxvd1BhcnNlVHlwZSgpfWVsc2V7aWYoZSl7dGhpcy5yYWlzZSh0LHRoLk1pc3NpbmdUeXBlUGFyYW1EZWZhdWx0KX19cmV0dXJuIHRoaXMuZmluaXNoTm9kZShyLCJUeXBlUGFyYW1ldGVyIil9Zmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCl7Y29uc3QgZT10aGlzLnN0YXRlLmluVHlwZTtjb25zdCB0PXRoaXMuc3RhcnROb2RlKCk7dC5wYXJhbXM9W107dGhpcy5zdGF0ZS5pblR5cGU9dHJ1ZTtpZih0aGlzLm1hdGNoKDQzKXx8dGhpcy5tYXRjaCgxMzIpKXt0aGlzLm5leHQoKX1lbHNle3RoaXMudW5leHBlY3RlZCgpfWxldCByPWZhbHNlO2Rve2NvbnN0IGU9dGhpcy5mbG93UGFyc2VUeXBlUGFyYW1ldGVyKHIpO3QucGFyYW1zLnB1c2goZSk7aWYoZS5kZWZhdWx0KXtyPXRydWV9aWYoIXRoaXMubWF0Y2goNDQpKXt0aGlzLmV4cGVjdCgxMil9fXdoaWxlKCF0aGlzLm1hdGNoKDQ0KSk7dGhpcy5leHBlY3QoNDQpO3RoaXMuc3RhdGUuaW5UeXBlPWU7cmV0dXJuIHRoaXMuZmluaXNoTm9kZSh0LCJUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24iKX1mbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbigpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTtjb25zdCB0PXRoaXMuc3RhdGUuaW5UeXBlO2UucGFyYW1zPVtdO3RoaXMuc3RhdGUuaW5UeXBlPXRydWU7dGhpcy5leHBlY3QoNDMpO2NvbnN0IHI9dGhpcy5zdGF0ZS5ub0Fub25GdW5jdGlvblR5cGU7dGhpcy5zdGF0ZS5ub0Fub25GdW5jdGlvblR5cGU9ZmFsc2U7d2hpbGUoIXRoaXMubWF0Y2goNDQpKXtlLnBhcmFtcy5wdXNoKHRoaXMuZmxvd1BhcnNlVHlwZSgpKTtpZighdGhpcy5tYXRjaCg0NCkpe3RoaXMuZXhwZWN0KDEyKX19dGhpcy5zdGF0ZS5ub0Fub25GdW5jdGlvblR5cGU9cjt0aGlzLmV4cGVjdCg0NCk7dGhpcy5zdGF0ZS5pblR5cGU9dDtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIlR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uIil9Zmxvd1BhcnNlVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb25DYWxsT3JOZXcoKXtjb25zdCBlPXRoaXMuc3RhcnROb2RlKCk7Y29uc3QgdD10aGlzLnN0YXRlLmluVHlwZTtlLnBhcmFtcz1bXTt0aGlzLnN0YXRlLmluVHlwZT10cnVlO3RoaXMuZXhwZWN0KDQzKTt3aGlsZSghdGhpcy5tYXRjaCg0NCkpe2UucGFyYW1zLnB1c2godGhpcy5mbG93UGFyc2VUeXBlT3JJbXBsaWNpdEluc3RhbnRpYXRpb24oKSk7aWYoIXRoaXMubWF0Y2goNDQpKXt0aGlzLmV4cGVjdCgxMil9fXRoaXMuZXhwZWN0KDQ0KTt0aGlzLnN0YXRlLmluVHlwZT10O3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24iKX1mbG93UGFyc2VJbnRlcmZhY2VUeXBlKCl7Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO3RoaXMuZXhwZWN0Q29udGV4dHVhbCgxMTkpO2UuZXh0ZW5kcz1bXTtpZih0aGlzLmVhdCg3NSkpe2Rve2UuZXh0ZW5kcy5wdXNoKHRoaXMuZmxvd1BhcnNlSW50ZXJmYWNlRXh0ZW5kcygpKX13aGlsZSh0aGlzLmVhdCgxMikpfWUuYm9keT10aGlzLmZsb3dQYXJzZU9iamVjdFR5cGUoe2FsbG93U3RhdGljOmZhbHNlLGFsbG93RXhhY3Q6ZmFsc2UsYWxsb3dTcHJlYWQ6ZmFsc2UsYWxsb3dQcm90bzpmYWxzZSxhbGxvd0luZXhhY3Q6ZmFsc2V9KTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIkludGVyZmFjZVR5cGVBbm5vdGF0aW9uIil9Zmxvd1BhcnNlT2JqZWN0UHJvcGVydHlLZXkoKXtyZXR1cm4gdGhpcy5tYXRjaCgxMjQpfHx0aGlzLm1hdGNoKDEyMyk/dGhpcy5wYXJzZUV4cHJBdG9tKCk6dGhpcy5wYXJzZUlkZW50aWZpZXIodHJ1ZSl9Zmxvd1BhcnNlT2JqZWN0VHlwZUluZGV4ZXIoZSx0LHIpe2Uuc3RhdGljPXQ7aWYodGhpcy5sb29rYWhlYWQoKS50eXBlPT09MTQpe2UuaWQ9dGhpcy5mbG93UGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO2Uua2V5PXRoaXMuZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKCl9ZWxzZXtlLmlkPW51bGw7ZS5rZXk9dGhpcy5mbG93UGFyc2VUeXBlKCl9dGhpcy5leHBlY3QoMyk7ZS52YWx1ZT10aGlzLmZsb3dQYXJzZVR5cGVJbml0aWFsaXNlcigpO2UudmFyaWFuY2U9cjtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIk9iamVjdFR5cGVJbmRleGVyIil9Zmxvd1BhcnNlT2JqZWN0VHlwZUludGVybmFsU2xvdChlLHQpe2Uuc3RhdGljPXQ7ZS5pZD10aGlzLmZsb3dQYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7dGhpcy5leHBlY3QoMyk7dGhpcy5leHBlY3QoMyk7aWYodGhpcy5tYXRjaCg0Myl8fHRoaXMubWF0Y2goMTApKXtlLm1ldGhvZD10cnVlO2Uub3B0aW9uYWw9ZmFsc2U7ZS52YWx1ZT10aGlzLmZsb3dQYXJzZU9iamVjdFR5cGVNZXRob2Rpc2godGhpcy5zdGFydE5vZGVBdChlLnN0YXJ0LGUubG9jLnN0YXJ0KSl9ZWxzZXtlLm1ldGhvZD1mYWxzZTtpZih0aGlzLmVhdCgxNykpe2Uub3B0aW9uYWw9dHJ1ZX1lLnZhbHVlPXRoaXMuZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKCl9cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJPYmplY3RUeXBlSW50ZXJuYWxTbG90Iil9Zmxvd1BhcnNlT2JqZWN0VHlwZU1ldGhvZGlzaChlKXtlLnBhcmFtcz1bXTtlLnJlc3Q9bnVsbDtlLnR5cGVQYXJhbWV0ZXJzPW51bGw7ZS50aGlzPW51bGw7aWYodGhpcy5tYXRjaCg0Mykpe2UudHlwZVBhcmFtZXRlcnM9dGhpcy5mbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKX10aGlzLmV4cGVjdCgxMCk7aWYodGhpcy5tYXRjaCg3Mikpe2UudGhpcz10aGlzLmZsb3dQYXJzZUZ1bmN0aW9uVHlwZVBhcmFtKHRydWUpO2UudGhpcy5uYW1lPW51bGw7aWYoIXRoaXMubWF0Y2goMTEpKXt0aGlzLmV4cGVjdCgxMil9fXdoaWxlKCF0aGlzLm1hdGNoKDExKSYmIXRoaXMubWF0Y2goMjEpKXtlLnBhcmFtcy5wdXNoKHRoaXMuZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW0oZmFsc2UpKTtpZighdGhpcy5tYXRjaCgxMSkpe3RoaXMuZXhwZWN0KDEyKX19aWYodGhpcy5lYXQoMjEpKXtlLnJlc3Q9dGhpcy5mbG93UGFyc2VGdW5jdGlvblR5cGVQYXJhbShmYWxzZSl9dGhpcy5leHBlY3QoMTEpO2UucmV0dXJuVHlwZT10aGlzLmZsb3dQYXJzZVR5cGVJbml0aWFsaXNlcigpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiRnVuY3Rpb25UeXBlQW5ub3RhdGlvbiIpfWZsb3dQYXJzZU9iamVjdFR5cGVDYWxsUHJvcGVydHkoZSx0KXtjb25zdCByPXRoaXMuc3RhcnROb2RlKCk7ZS5zdGF0aWM9dDtlLnZhbHVlPXRoaXMuZmxvd1BhcnNlT2JqZWN0VHlwZU1ldGhvZGlzaChyKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIk9iamVjdFR5cGVDYWxsUHJvcGVydHkiKX1mbG93UGFyc2VPYmplY3RUeXBlKGUpe2xldHthbGxvd1N0YXRpYzp0LGFsbG93RXhhY3Q6cixhbGxvd1NwcmVhZDpzLGFsbG93UHJvdG86aSxhbGxvd0luZXhhY3Q6bn09ZTtjb25zdCBhPXRoaXMuc3RhdGUuaW5UeXBlO3RoaXMuc3RhdGUuaW5UeXBlPXRydWU7Y29uc3Qgbz10aGlzLnN0YXJ0Tm9kZSgpO28uY2FsbFByb3BlcnRpZXM9W107by5wcm9wZXJ0aWVzPVtdO28uaW5kZXhlcnM9W107by5pbnRlcm5hbFNsb3RzPVtdO2xldCBsO2xldCB1O2xldCBjPWZhbHNlO2lmKHImJnRoaXMubWF0Y2goNikpe3RoaXMuZXhwZWN0KDYpO2w9OTt1PXRydWV9ZWxzZXt0aGlzLmV4cGVjdCg1KTtsPTg7dT1mYWxzZX1vLmV4YWN0PXU7d2hpbGUoIXRoaXMubWF0Y2gobCkpe2xldCBlPWZhbHNlO2xldCByPW51bGw7bGV0IGE9bnVsbDtjb25zdCBsPXRoaXMuc3RhcnROb2RlKCk7aWYoaSYmdGhpcy5pc0NvbnRleHR1YWwoMTA5KSl7Y29uc3QgZT10aGlzLmxvb2thaGVhZCgpO2lmKGUudHlwZSE9PTE0JiZlLnR5cGUhPT0xNyl7dGhpcy5uZXh0KCk7cj10aGlzLnN0YXRlLnN0YXJ0O3Q9ZmFsc2V9fWlmKHQmJnRoaXMuaXNDb250ZXh0dWFsKDk4KSl7Y29uc3QgdD10aGlzLmxvb2thaGVhZCgpO2lmKHQudHlwZSE9PTE0JiZ0LnR5cGUhPT0xNyl7dGhpcy5uZXh0KCk7ZT10cnVlfX1jb25zdCBoPXRoaXMuZmxvd1BhcnNlVmFyaWFuY2UoKTtpZih0aGlzLmVhdCgwKSl7aWYociE9bnVsbCl7dGhpcy51bmV4cGVjdGVkKHIpfWlmKHRoaXMuZWF0KDApKXtpZihoKXt0aGlzLnVuZXhwZWN0ZWQoaC5zdGFydCl9by5pbnRlcm5hbFNsb3RzLnB1c2godGhpcy5mbG93UGFyc2VPYmplY3RUeXBlSW50ZXJuYWxTbG90KGwsZSkpfWVsc2V7by5pbmRleGVycy5wdXNoKHRoaXMuZmxvd1BhcnNlT2JqZWN0VHlwZUluZGV4ZXIobCxlLGgpKX19ZWxzZSBpZih0aGlzLm1hdGNoKDEwKXx8dGhpcy5tYXRjaCg0Mykpe2lmKHIhPW51bGwpe3RoaXMudW5leHBlY3RlZChyKX1pZihoKXt0aGlzLnVuZXhwZWN0ZWQoaC5zdGFydCl9by5jYWxsUHJvcGVydGllcy5wdXNoKHRoaXMuZmxvd1BhcnNlT2JqZWN0VHlwZUNhbGxQcm9wZXJ0eShsLGUpKX1lbHNle2xldCB0PSJpbml0IjtpZih0aGlzLmlzQ29udGV4dHVhbCg5Mil8fHRoaXMuaXNDb250ZXh0dWFsKDk3KSl7Y29uc3QgZT10aGlzLmxvb2thaGVhZCgpO2lmKHpsKGUudHlwZSkpe3Q9dGhpcy5zdGF0ZS52YWx1ZTt0aGlzLm5leHQoKX19Y29uc3QgaT10aGlzLmZsb3dQYXJzZU9iamVjdFR5cGVQcm9wZXJ0eShsLGUscixoLHQscyxuIT1udWxsP246IXUpO2lmKGk9PT1udWxsKXtjPXRydWU7YT10aGlzLnN0YXRlLmxhc3RUb2tTdGFydH1lbHNle28ucHJvcGVydGllcy5wdXNoKGkpfX10aGlzLmZsb3dPYmplY3RUeXBlU2VtaWNvbG9uKCk7aWYoYSYmIXRoaXMubWF0Y2goOCkmJiF0aGlzLm1hdGNoKDkpKXt0aGlzLnJhaXNlKGEsdGguVW5leHBlY3RlZEV4cGxpY2l0SW5leGFjdEluT2JqZWN0KX19dGhpcy5leHBlY3QobCk7aWYocyl7by5pbmV4YWN0PWN9Y29uc3QgaD10aGlzLmZpbmlzaE5vZGUobywiT2JqZWN0VHlwZUFubm90YXRpb24iKTt0aGlzLnN0YXRlLmluVHlwZT1hO3JldHVybiBofWZsb3dQYXJzZU9iamVjdFR5cGVQcm9wZXJ0eShlLHQscixzLGksbixhKXtpZih0aGlzLmVhdCgyMSkpe2NvbnN0IHQ9dGhpcy5tYXRjaCgxMil8fHRoaXMubWF0Y2goMTMpfHx0aGlzLm1hdGNoKDgpfHx0aGlzLm1hdGNoKDkpO2lmKHQpe2lmKCFuKXt0aGlzLnJhaXNlKHRoaXMuc3RhdGUubGFzdFRva1N0YXJ0LHRoLkluZXhhY3RJbnNpZGVOb25PYmplY3QpfWVsc2UgaWYoIWEpe3RoaXMucmFpc2UodGhpcy5zdGF0ZS5sYXN0VG9rU3RhcnQsdGguSW5leGFjdEluc2lkZUV4YWN0KX1pZihzKXt0aGlzLnJhaXNlKHMuc3RhcnQsdGguSW5leGFjdFZhcmlhbmNlKX1yZXR1cm4gbnVsbH1pZighbil7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLmxhc3RUb2tTdGFydCx0aC5VbmV4cGVjdGVkU3ByZWFkVHlwZSl9aWYociE9bnVsbCl7dGhpcy51bmV4cGVjdGVkKHIpfWlmKHMpe3RoaXMucmFpc2Uocy5zdGFydCx0aC5TcHJlYWRWYXJpYW5jZSl9ZS5hcmd1bWVudD10aGlzLmZsb3dQYXJzZVR5cGUoKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIk9iamVjdFR5cGVTcHJlYWRQcm9wZXJ0eSIpfWVsc2V7ZS5rZXk9dGhpcy5mbG93UGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO2Uuc3RhdGljPXQ7ZS5wcm90bz1yIT1udWxsO2Uua2luZD1pO2xldCBhPWZhbHNlO2lmKHRoaXMubWF0Y2goNDMpfHx0aGlzLm1hdGNoKDEwKSl7ZS5tZXRob2Q9dHJ1ZTtpZihyIT1udWxsKXt0aGlzLnVuZXhwZWN0ZWQocil9aWYocyl7dGhpcy51bmV4cGVjdGVkKHMuc3RhcnQpfWUudmFsdWU9dGhpcy5mbG93UGFyc2VPYmplY3RUeXBlTWV0aG9kaXNoKHRoaXMuc3RhcnROb2RlQXQoZS5zdGFydCxlLmxvYy5zdGFydCkpO2lmKGk9PT0iZ2V0Inx8aT09PSJzZXQiKXt0aGlzLmZsb3dDaGVja0dldHRlclNldHRlclBhcmFtcyhlKX1pZighbiYmZS5rZXkubmFtZT09PSJjb25zdHJ1Y3RvciImJmUudmFsdWUudGhpcyl7dGhpcy5yYWlzZShlLnZhbHVlLnRoaXMuc3RhcnQsdGguVGhpc1BhcmFtQmFubmVkSW5Db25zdHJ1Y3Rvcil9fWVsc2V7aWYoaSE9PSJpbml0Iil0aGlzLnVuZXhwZWN0ZWQoKTtlLm1ldGhvZD1mYWxzZTtpZih0aGlzLmVhdCgxNykpe2E9dHJ1ZX1lLnZhbHVlPXRoaXMuZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKCk7ZS52YXJpYW5jZT1zfWUub3B0aW9uYWw9YTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIk9iamVjdFR5cGVQcm9wZXJ0eSIpfX1mbG93Q2hlY2tHZXR0ZXJTZXR0ZXJQYXJhbXMoZSl7Y29uc3QgdD1lLmtpbmQ9PT0iZ2V0Ij8wOjE7Y29uc3Qgcj1lLnN0YXJ0O2NvbnN0IHM9ZS52YWx1ZS5wYXJhbXMubGVuZ3RoKyhlLnZhbHVlLnJlc3Q/MTowKTtpZihlLnZhbHVlLnRoaXMpe3RoaXMucmFpc2UoZS52YWx1ZS50aGlzLnN0YXJ0LGUua2luZD09PSJnZXQiP3RoLkdldHRlck1heU5vdEhhdmVUaGlzUGFyYW06dGguU2V0dGVyTWF5Tm90SGF2ZVRoaXNQYXJhbSl9aWYocyE9PXQpe2lmKGUua2luZD09PSJnZXQiKXt0aGlzLnJhaXNlKHIsY2wuQmFkR2V0dGVyQXJpdHkpfWVsc2V7dGhpcy5yYWlzZShyLGNsLkJhZFNldHRlckFyaXR5KX19aWYoZS5raW5kPT09InNldCImJmUudmFsdWUucmVzdCl7dGhpcy5yYWlzZShyLGNsLkJhZFNldHRlclJlc3RQYXJhbWV0ZXIpfX1mbG93T2JqZWN0VHlwZVNlbWljb2xvbigpe2lmKCF0aGlzLmVhdCgxMykmJiF0aGlzLmVhdCgxMikmJiF0aGlzLm1hdGNoKDgpJiYhdGhpcy5tYXRjaCg5KSl7dGhpcy51bmV4cGVjdGVkKCl9fWZsb3dQYXJzZVF1YWxpZmllZFR5cGVJZGVudGlmaWVyKGUsdCxyKXtlPWV8fHRoaXMuc3RhdGUuc3RhcnQ7dD10fHx0aGlzLnN0YXRlLnN0YXJ0TG9jO2xldCBzPXJ8fHRoaXMuZmxvd1BhcnNlUmVzdHJpY3RlZElkZW50aWZpZXIodHJ1ZSk7d2hpbGUodGhpcy5lYXQoMTYpKXtjb25zdCByPXRoaXMuc3RhcnROb2RlQXQoZSx0KTtyLnF1YWxpZmljYXRpb249cztyLmlkPXRoaXMuZmxvd1BhcnNlUmVzdHJpY3RlZElkZW50aWZpZXIodHJ1ZSk7cz10aGlzLmZpbmlzaE5vZGUociwiUXVhbGlmaWVkVHlwZUlkZW50aWZpZXIiKX1yZXR1cm4gc31mbG93UGFyc2VHZW5lcmljVHlwZShlLHQscil7Y29uc3Qgcz10aGlzLnN0YXJ0Tm9kZUF0KGUsdCk7cy50eXBlUGFyYW1ldGVycz1udWxsO3MuaWQ9dGhpcy5mbG93UGFyc2VRdWFsaWZpZWRUeXBlSWRlbnRpZmllcihlLHQscik7aWYodGhpcy5tYXRjaCg0Mykpe3MudHlwZVBhcmFtZXRlcnM9dGhpcy5mbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbigpfXJldHVybiB0aGlzLmZpbmlzaE5vZGUocywiR2VuZXJpY1R5cGVBbm5vdGF0aW9uIil9Zmxvd1BhcnNlVHlwZW9mVHlwZSgpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTt0aGlzLmV4cGVjdCg4MSk7ZS5hcmd1bWVudD10aGlzLmZsb3dQYXJzZVByaW1hcnlUeXBlKCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJUeXBlb2ZUeXBlQW5ub3RhdGlvbiIpfWZsb3dQYXJzZVR1cGxlVHlwZSgpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTtlLnR5cGVzPVtdO3RoaXMuZXhwZWN0KDApO3doaWxlKHRoaXMuc3RhdGUucG9zPHRoaXMubGVuZ3RoJiYhdGhpcy5tYXRjaCgzKSl7ZS50eXBlcy5wdXNoKHRoaXMuZmxvd1BhcnNlVHlwZSgpKTtpZih0aGlzLm1hdGNoKDMpKWJyZWFrO3RoaXMuZXhwZWN0KDEyKX10aGlzLmV4cGVjdCgzKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIlR1cGxlVHlwZUFubm90YXRpb24iKX1mbG93UGFyc2VGdW5jdGlvblR5cGVQYXJhbShlKXtsZXQgdD1udWxsO2xldCByPWZhbHNlO2xldCBzPW51bGw7Y29uc3QgaT10aGlzLnN0YXJ0Tm9kZSgpO2NvbnN0IG49dGhpcy5sb29rYWhlYWQoKTtjb25zdCBhPXRoaXMuc3RhdGUudHlwZT09PTcyO2lmKG4udHlwZT09PTE0fHxuLnR5cGU9PT0xNyl7aWYoYSYmIWUpe3RoaXMucmFpc2UoaS5zdGFydCx0aC5UaGlzUGFyYW1NdXN0QmVGaXJzdCl9dD10aGlzLnBhcnNlSWRlbnRpZmllcihhKTtpZih0aGlzLmVhdCgxNykpe3I9dHJ1ZTtpZihhKXt0aGlzLnJhaXNlKGkuc3RhcnQsdGguVGhpc1BhcmFtTWF5Tm90QmVPcHRpb25hbCl9fXM9dGhpcy5mbG93UGFyc2VUeXBlSW5pdGlhbGlzZXIoKX1lbHNle3M9dGhpcy5mbG93UGFyc2VUeXBlKCl9aS5uYW1lPXQ7aS5vcHRpb25hbD1yO2kudHlwZUFubm90YXRpb249cztyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGksIkZ1bmN0aW9uVHlwZVBhcmFtIil9cmVpbnRlcnByZXRUeXBlQXNGdW5jdGlvblR5cGVQYXJhbShlKXtjb25zdCB0PXRoaXMuc3RhcnROb2RlQXQoZS5zdGFydCxlLmxvYy5zdGFydCk7dC5uYW1lPW51bGw7dC5vcHRpb25hbD1mYWxzZTt0LnR5cGVBbm5vdGF0aW9uPWU7cmV0dXJuIHRoaXMuZmluaXNoTm9kZSh0LCJGdW5jdGlvblR5cGVQYXJhbSIpfWZsb3dQYXJzZUZ1bmN0aW9uVHlwZVBhcmFtcyhlKXtpZihlPT09dm9pZCAwKXtlPVtdfWxldCB0PW51bGw7bGV0IHI9bnVsbDtpZih0aGlzLm1hdGNoKDcyKSl7cj10aGlzLmZsb3dQYXJzZUZ1bmN0aW9uVHlwZVBhcmFtKHRydWUpO3IubmFtZT1udWxsO2lmKCF0aGlzLm1hdGNoKDExKSl7dGhpcy5leHBlY3QoMTIpfX13aGlsZSghdGhpcy5tYXRjaCgxMSkmJiF0aGlzLm1hdGNoKDIxKSl7ZS5wdXNoKHRoaXMuZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW0oZmFsc2UpKTtpZighdGhpcy5tYXRjaCgxMSkpe3RoaXMuZXhwZWN0KDEyKX19aWYodGhpcy5lYXQoMjEpKXt0PXRoaXMuZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW0oZmFsc2UpfXJldHVybntwYXJhbXM6ZSxyZXN0OnQsX3RoaXM6cn19Zmxvd0lkZW50VG9UeXBlQW5ub3RhdGlvbihlLHQscixzKXtzd2l0Y2gocy5uYW1lKXtjYXNlImFueSI6cmV0dXJuIHRoaXMuZmluaXNoTm9kZShyLCJBbnlUeXBlQW5ub3RhdGlvbiIpO2Nhc2UiYm9vbCI6Y2FzZSJib29sZWFuIjpyZXR1cm4gdGhpcy5maW5pc2hOb2RlKHIsIkJvb2xlYW5UeXBlQW5ub3RhdGlvbiIpO2Nhc2UibWl4ZWQiOnJldHVybiB0aGlzLmZpbmlzaE5vZGUociwiTWl4ZWRUeXBlQW5ub3RhdGlvbiIpO2Nhc2UiZW1wdHkiOnJldHVybiB0aGlzLmZpbmlzaE5vZGUociwiRW1wdHlUeXBlQW5ub3RhdGlvbiIpO2Nhc2UibnVtYmVyIjpyZXR1cm4gdGhpcy5maW5pc2hOb2RlKHIsIk51bWJlclR5cGVBbm5vdGF0aW9uIik7Y2FzZSJzdHJpbmciOnJldHVybiB0aGlzLmZpbmlzaE5vZGUociwiU3RyaW5nVHlwZUFubm90YXRpb24iKTtjYXNlInN5bWJvbCI6cmV0dXJuIHRoaXMuZmluaXNoTm9kZShyLCJTeW1ib2xUeXBlQW5ub3RhdGlvbiIpO2RlZmF1bHQ6dGhpcy5jaGVja05vdFVuZGVyc2NvcmUocy5uYW1lKTtyZXR1cm4gdGhpcy5mbG93UGFyc2VHZW5lcmljVHlwZShlLHQscyl9fWZsb3dQYXJzZVByaW1hcnlUeXBlKCl7Y29uc3QgZT10aGlzLnN0YXRlLnN0YXJ0O2NvbnN0IHQ9dGhpcy5zdGF0ZS5zdGFydExvYztjb25zdCByPXRoaXMuc3RhcnROb2RlKCk7bGV0IHM7bGV0IGk7bGV0IG49ZmFsc2U7Y29uc3QgYT10aGlzLnN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZTtzd2l0Y2godGhpcy5zdGF0ZS50eXBlKXtjYXNlIDU6cmV0dXJuIHRoaXMuZmxvd1BhcnNlT2JqZWN0VHlwZSh7YWxsb3dTdGF0aWM6ZmFsc2UsYWxsb3dFeGFjdDpmYWxzZSxhbGxvd1NwcmVhZDp0cnVlLGFsbG93UHJvdG86ZmFsc2UsYWxsb3dJbmV4YWN0OnRydWV9KTtjYXNlIDY6cmV0dXJuIHRoaXMuZmxvd1BhcnNlT2JqZWN0VHlwZSh7YWxsb3dTdGF0aWM6ZmFsc2UsYWxsb3dFeGFjdDp0cnVlLGFsbG93U3ByZWFkOnRydWUsYWxsb3dQcm90bzpmYWxzZSxhbGxvd0luZXhhY3Q6ZmFsc2V9KTtjYXNlIDA6dGhpcy5zdGF0ZS5ub0Fub25GdW5jdGlvblR5cGU9ZmFsc2U7aT10aGlzLmZsb3dQYXJzZVR1cGxlVHlwZSgpO3RoaXMuc3RhdGUubm9Bbm9uRnVuY3Rpb25UeXBlPWE7cmV0dXJuIGk7Y2FzZSA0MzpyLnR5cGVQYXJhbWV0ZXJzPXRoaXMuZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCk7dGhpcy5leHBlY3QoMTApO3M9dGhpcy5mbG93UGFyc2VGdW5jdGlvblR5cGVQYXJhbXMoKTtyLnBhcmFtcz1zLnBhcmFtcztyLnJlc3Q9cy5yZXN0O3IudGhpcz1zLl90aGlzO3RoaXMuZXhwZWN0KDExKTt0aGlzLmV4cGVjdCgxOSk7ci5yZXR1cm5UeXBlPXRoaXMuZmxvd1BhcnNlVHlwZSgpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUociwiRnVuY3Rpb25UeXBlQW5ub3RhdGlvbiIpO2Nhc2UgMTA6dGhpcy5uZXh0KCk7aWYoIXRoaXMubWF0Y2goMTEpJiYhdGhpcy5tYXRjaCgyMSkpe2lmKFJsKHRoaXMuc3RhdGUudHlwZSl8fHRoaXMubWF0Y2goNzIpKXtjb25zdCBlPXRoaXMubG9va2FoZWFkKCkudHlwZTtuPWUhPT0xNyYmZSE9PTE0fWVsc2V7bj10cnVlfX1pZihuKXt0aGlzLnN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZT1mYWxzZTtpPXRoaXMuZmxvd1BhcnNlVHlwZSgpO3RoaXMuc3RhdGUubm9Bbm9uRnVuY3Rpb25UeXBlPWE7aWYodGhpcy5zdGF0ZS5ub0Fub25GdW5jdGlvblR5cGV8fCEodGhpcy5tYXRjaCgxMil8fHRoaXMubWF0Y2goMTEpJiZ0aGlzLmxvb2thaGVhZCgpLnR5cGU9PT0xOSkpe3RoaXMuZXhwZWN0KDExKTtyZXR1cm4gaX1lbHNle3RoaXMuZWF0KDEyKX19aWYoaSl7cz10aGlzLmZsb3dQYXJzZUZ1bmN0aW9uVHlwZVBhcmFtcyhbdGhpcy5yZWludGVycHJldFR5cGVBc0Z1bmN0aW9uVHlwZVBhcmFtKGkpXSl9ZWxzZXtzPXRoaXMuZmxvd1BhcnNlRnVuY3Rpb25UeXBlUGFyYW1zKCl9ci5wYXJhbXM9cy5wYXJhbXM7ci5yZXN0PXMucmVzdDtyLnRoaXM9cy5fdGhpczt0aGlzLmV4cGVjdCgxMSk7dGhpcy5leHBlY3QoMTkpO3IucmV0dXJuVHlwZT10aGlzLmZsb3dQYXJzZVR5cGUoKTtyLnR5cGVQYXJhbWV0ZXJzPW51bGw7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShyLCJGdW5jdGlvblR5cGVBbm5vdGF0aW9uIik7Y2FzZSAxMjM6cmV0dXJuIHRoaXMucGFyc2VMaXRlcmFsKHRoaXMuc3RhdGUudmFsdWUsIlN0cmluZ0xpdGVyYWxUeXBlQW5ub3RhdGlvbiIpO2Nhc2UgNzk6Y2FzZSA4MDpyLnZhbHVlPXRoaXMubWF0Y2goNzkpO3RoaXMubmV4dCgpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUociwiQm9vbGVhbkxpdGVyYWxUeXBlQW5ub3RhdGlvbiIpO2Nhc2UgNDc6aWYodGhpcy5zdGF0ZS52YWx1ZT09PSItIil7dGhpcy5uZXh0KCk7aWYodGhpcy5tYXRjaCgxMjQpKXtyZXR1cm4gdGhpcy5wYXJzZUxpdGVyYWxBdE5vZGUoLXRoaXMuc3RhdGUudmFsdWUsIk51bWJlckxpdGVyYWxUeXBlQW5ub3RhdGlvbiIscil9aWYodGhpcy5tYXRjaCgxMjUpKXtyZXR1cm4gdGhpcy5wYXJzZUxpdGVyYWxBdE5vZGUoLXRoaXMuc3RhdGUudmFsdWUsIkJpZ0ludExpdGVyYWxUeXBlQW5ub3RhdGlvbiIscil9dGhyb3cgdGhpcy5yYWlzZSh0aGlzLnN0YXRlLnN0YXJ0LHRoLlVuZXhwZWN0ZWRTdWJ0cmFjdGlvbk9wZXJhbmQpfXRocm93IHRoaXMudW5leHBlY3RlZCgpO2Nhc2UgMTI0OnJldHVybiB0aGlzLnBhcnNlTGl0ZXJhbCh0aGlzLnN0YXRlLnZhbHVlLCJOdW1iZXJMaXRlcmFsVHlwZUFubm90YXRpb24iKTtjYXNlIDEyNTpyZXR1cm4gdGhpcy5wYXJzZUxpdGVyYWwodGhpcy5zdGF0ZS52YWx1ZSwiQmlnSW50TGl0ZXJhbFR5cGVBbm5vdGF0aW9uIik7Y2FzZSA4Mjp0aGlzLm5leHQoKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKHIsIlZvaWRUeXBlQW5ub3RhdGlvbiIpO2Nhc2UgNzg6dGhpcy5uZXh0KCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShyLCJOdWxsTGl0ZXJhbFR5cGVBbm5vdGF0aW9uIik7Y2FzZSA3Mjp0aGlzLm5leHQoKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKHIsIlRoaXNUeXBlQW5ub3RhdGlvbiIpO2Nhc2UgNDk6dGhpcy5uZXh0KCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShyLCJFeGlzdHNUeXBlQW5ub3RhdGlvbiIpO2Nhc2UgODE6cmV0dXJuIHRoaXMuZmxvd1BhcnNlVHlwZW9mVHlwZSgpO2RlZmF1bHQ6aWYoSGwodGhpcy5zdGF0ZS50eXBlKSl7Y29uc3QgZT1abCh0aGlzLnN0YXRlLnR5cGUpO3RoaXMubmV4dCgpO3JldHVybiBzdXBlci5jcmVhdGVJZGVudGlmaWVyKHIsZSl9ZWxzZSBpZihSbCh0aGlzLnN0YXRlLnR5cGUpKXtpZih0aGlzLmlzQ29udGV4dHVhbCgxMTkpKXtyZXR1cm4gdGhpcy5mbG93UGFyc2VJbnRlcmZhY2VUeXBlKCl9cmV0dXJuIHRoaXMuZmxvd0lkZW50VG9UeXBlQW5ub3RhdGlvbihlLHQscix0aGlzLnBhcnNlSWRlbnRpZmllcigpKX19dGhyb3cgdGhpcy51bmV4cGVjdGVkKCl9Zmxvd1BhcnNlUG9zdGZpeFR5cGUoKXtjb25zdCBlPXRoaXMuc3RhdGUuc3RhcnQ7Y29uc3QgdD10aGlzLnN0YXRlLnN0YXJ0TG9jO2xldCByPXRoaXMuZmxvd1BhcnNlUHJpbWFyeVR5cGUoKTtsZXQgcz1mYWxzZTt3aGlsZSgodGhpcy5tYXRjaCgwKXx8dGhpcy5tYXRjaCgxOCkpJiYhdGhpcy5jYW5JbnNlcnRTZW1pY29sb24oKSl7Y29uc3QgaT10aGlzLnN0YXJ0Tm9kZUF0KGUsdCk7Y29uc3Qgbj10aGlzLmVhdCgxOCk7cz1zfHxuO3RoaXMuZXhwZWN0KDApO2lmKCFuJiZ0aGlzLm1hdGNoKDMpKXtpLmVsZW1lbnRUeXBlPXI7dGhpcy5uZXh0KCk7cj10aGlzLmZpbmlzaE5vZGUoaSwiQXJyYXlUeXBlQW5ub3RhdGlvbiIpfWVsc2V7aS5vYmplY3RUeXBlPXI7aS5pbmRleFR5cGU9dGhpcy5mbG93UGFyc2VUeXBlKCk7dGhpcy5leHBlY3QoMyk7aWYocyl7aS5vcHRpb25hbD1uO3I9dGhpcy5maW5pc2hOb2RlKGksIk9wdGlvbmFsSW5kZXhlZEFjY2Vzc1R5cGUiKX1lbHNle3I9dGhpcy5maW5pc2hOb2RlKGksIkluZGV4ZWRBY2Nlc3NUeXBlIil9fX1yZXR1cm4gcn1mbG93UGFyc2VQcmVmaXhUeXBlKCl7Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO2lmKHRoaXMuZWF0KDE3KSl7ZS50eXBlQW5ub3RhdGlvbj10aGlzLmZsb3dQYXJzZVByZWZpeFR5cGUoKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIk51bGxhYmxlVHlwZUFubm90YXRpb24iKX1lbHNle3JldHVybiB0aGlzLmZsb3dQYXJzZVBvc3RmaXhUeXBlKCl9fWZsb3dQYXJzZUFub25GdW5jdGlvbldpdGhvdXRQYXJlbnMoKXtjb25zdCBlPXRoaXMuZmxvd1BhcnNlUHJlZml4VHlwZSgpO2lmKCF0aGlzLnN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZSYmdGhpcy5lYXQoMTkpKXtjb25zdCB0PXRoaXMuc3RhcnROb2RlQXQoZS5zdGFydCxlLmxvYy5zdGFydCk7dC5wYXJhbXM9W3RoaXMucmVpbnRlcnByZXRUeXBlQXNGdW5jdGlvblR5cGVQYXJhbShlKV07dC5yZXN0PW51bGw7dC50aGlzPW51bGw7dC5yZXR1cm5UeXBlPXRoaXMuZmxvd1BhcnNlVHlwZSgpO3QudHlwZVBhcmFtZXRlcnM9bnVsbDtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKHQsIkZ1bmN0aW9uVHlwZUFubm90YXRpb24iKX1yZXR1cm4gZX1mbG93UGFyc2VJbnRlcnNlY3Rpb25UeXBlKCl7Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO3RoaXMuZWF0KDQxKTtjb25zdCB0PXRoaXMuZmxvd1BhcnNlQW5vbkZ1bmN0aW9uV2l0aG91dFBhcmVucygpO2UudHlwZXM9W3RdO3doaWxlKHRoaXMuZWF0KDQxKSl7ZS50eXBlcy5wdXNoKHRoaXMuZmxvd1BhcnNlQW5vbkZ1bmN0aW9uV2l0aG91dFBhcmVucygpKX1yZXR1cm4gZS50eXBlcy5sZW5ndGg9PT0xP3Q6dGhpcy5maW5pc2hOb2RlKGUsIkludGVyc2VjdGlvblR5cGVBbm5vdGF0aW9uIil9Zmxvd1BhcnNlVW5pb25UeXBlKCl7Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO3RoaXMuZWF0KDM5KTtjb25zdCB0PXRoaXMuZmxvd1BhcnNlSW50ZXJzZWN0aW9uVHlwZSgpO2UudHlwZXM9W3RdO3doaWxlKHRoaXMuZWF0KDM5KSl7ZS50eXBlcy5wdXNoKHRoaXMuZmxvd1BhcnNlSW50ZXJzZWN0aW9uVHlwZSgpKX1yZXR1cm4gZS50eXBlcy5sZW5ndGg9PT0xP3Q6dGhpcy5maW5pc2hOb2RlKGUsIlVuaW9uVHlwZUFubm90YXRpb24iKX1mbG93UGFyc2VUeXBlKCl7Y29uc3QgZT10aGlzLnN0YXRlLmluVHlwZTt0aGlzLnN0YXRlLmluVHlwZT10cnVlO2NvbnN0IHQ9dGhpcy5mbG93UGFyc2VVbmlvblR5cGUoKTt0aGlzLnN0YXRlLmluVHlwZT1lO3JldHVybiB0fWZsb3dQYXJzZVR5cGVPckltcGxpY2l0SW5zdGFudGlhdGlvbigpe2lmKHRoaXMuc3RhdGUudHlwZT09PTEyMiYmdGhpcy5zdGF0ZS52YWx1ZT09PSJfIil7Y29uc3QgZT10aGlzLnN0YXRlLnN0YXJ0O2NvbnN0IHQ9dGhpcy5zdGF0ZS5zdGFydExvYztjb25zdCByPXRoaXMucGFyc2VJZGVudGlmaWVyKCk7cmV0dXJuIHRoaXMuZmxvd1BhcnNlR2VuZXJpY1R5cGUoZSx0LHIpfWVsc2V7cmV0dXJuIHRoaXMuZmxvd1BhcnNlVHlwZSgpfX1mbG93UGFyc2VUeXBlQW5ub3RhdGlvbigpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTtlLnR5cGVBbm5vdGF0aW9uPXRoaXMuZmxvd1BhcnNlVHlwZUluaXRpYWxpc2VyKCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJUeXBlQW5ub3RhdGlvbiIpfWZsb3dQYXJzZVR5cGVBbm5vdGF0YWJsZUlkZW50aWZpZXIoZSl7Y29uc3QgdD1lP3RoaXMucGFyc2VJZGVudGlmaWVyKCk6dGhpcy5mbG93UGFyc2VSZXN0cmljdGVkSWRlbnRpZmllcigpO2lmKHRoaXMubWF0Y2goMTQpKXt0LnR5cGVBbm5vdGF0aW9uPXRoaXMuZmxvd1BhcnNlVHlwZUFubm90YXRpb24oKTt0aGlzLnJlc2V0RW5kTG9jYXRpb24odCl9cmV0dXJuIHR9dHlwZUNhc3RUb1BhcmFtZXRlcihlKXtlLmV4cHJlc3Npb24udHlwZUFubm90YXRpb249ZS50eXBlQW5ub3RhdGlvbjt0aGlzLnJlc2V0RW5kTG9jYXRpb24oZS5leHByZXNzaW9uLGUudHlwZUFubm90YXRpb24uZW5kLGUudHlwZUFubm90YXRpb24ubG9jLmVuZCk7cmV0dXJuIGUuZXhwcmVzc2lvbn1mbG93UGFyc2VWYXJpYW5jZSgpe2xldCBlPW51bGw7aWYodGhpcy5tYXRjaCg0Nykpe2U9dGhpcy5zdGFydE5vZGUoKTtpZih0aGlzLnN0YXRlLnZhbHVlPT09IisiKXtlLmtpbmQ9InBsdXMifWVsc2V7ZS5raW5kPSJtaW51cyJ9dGhpcy5uZXh0KCk7dGhpcy5maW5pc2hOb2RlKGUsIlZhcmlhbmNlIil9cmV0dXJuIGV9cGFyc2VGdW5jdGlvbkJvZHkoZSx0LHIpe2lmKHI9PT12b2lkIDApe3I9ZmFsc2V9aWYodCl7cmV0dXJuIHRoaXMuZm9yd2FyZE5vQXJyb3dQYXJhbXNDb252ZXJzaW9uQXQoZSwoKCk9PnN1cGVyLnBhcnNlRnVuY3Rpb25Cb2R5KGUsdHJ1ZSxyKSkpfXJldHVybiBzdXBlci5wYXJzZUZ1bmN0aW9uQm9keShlLGZhbHNlLHIpfXBhcnNlRnVuY3Rpb25Cb2R5QW5kRmluaXNoKGUsdCxyKXtpZihyPT09dm9pZCAwKXtyPWZhbHNlfWlmKHRoaXMubWF0Y2goMTQpKXtjb25zdCB0PXRoaXMuc3RhcnROb2RlKCk7W3QudHlwZUFubm90YXRpb24sZS5wcmVkaWNhdGVdPXRoaXMuZmxvd1BhcnNlVHlwZUFuZFByZWRpY2F0ZUluaXRpYWxpc2VyKCk7ZS5yZXR1cm5UeXBlPXQudHlwZUFubm90YXRpb24/dGhpcy5maW5pc2hOb2RlKHQsIlR5cGVBbm5vdGF0aW9uIik6bnVsbH1zdXBlci5wYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaChlLHQscil9cGFyc2VTdGF0ZW1lbnQoZSx0KXtpZih0aGlzLnN0YXRlLnN0cmljdCYmdGhpcy5pc0NvbnRleHR1YWwoMTE5KSl7Y29uc3QgZT10aGlzLmxvb2thaGVhZCgpO2lmKFVsKGUudHlwZSkpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTt0aGlzLm5leHQoKTtyZXR1cm4gdGhpcy5mbG93UGFyc2VJbnRlcmZhY2UoZSl9fWVsc2UgaWYodGhpcy5zaG91bGRQYXJzZUVudW1zKCkmJnRoaXMuaXNDb250ZXh0dWFsKDExNikpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTt0aGlzLm5leHQoKTtyZXR1cm4gdGhpcy5mbG93UGFyc2VFbnVtRGVjbGFyYXRpb24oZSl9Y29uc3Qgcj1zdXBlci5wYXJzZVN0YXRlbWVudChlLHQpO2lmKHRoaXMuZmxvd1ByYWdtYT09PXVuZGVmaW5lZCYmIXRoaXMuaXNWYWxpZERpcmVjdGl2ZShyKSl7dGhpcy5mbG93UHJhZ21hPW51bGx9cmV0dXJuIHJ9cGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KGUsdCl7aWYodC50eXBlPT09IklkZW50aWZpZXIiKXtpZih0Lm5hbWU9PT0iZGVjbGFyZSIpe2lmKHRoaXMubWF0Y2goNzQpfHxSbCh0aGlzLnN0YXRlLnR5cGUpfHx0aGlzLm1hdGNoKDYyKXx8dGhpcy5tYXRjaCg2OCl8fHRoaXMubWF0Y2goNzYpKXtyZXR1cm4gdGhpcy5mbG93UGFyc2VEZWNsYXJlKGUpfX1lbHNlIGlmKFJsKHRoaXMuc3RhdGUudHlwZSkpe2lmKHQubmFtZT09PSJpbnRlcmZhY2UiKXtyZXR1cm4gdGhpcy5mbG93UGFyc2VJbnRlcmZhY2UoZSl9ZWxzZSBpZih0Lm5hbWU9PT0idHlwZSIpe3JldHVybiB0aGlzLmZsb3dQYXJzZVR5cGVBbGlhcyhlKX1lbHNlIGlmKHQubmFtZT09PSJvcGFxdWUiKXtyZXR1cm4gdGhpcy5mbG93UGFyc2VPcGFxdWVUeXBlKGUsZmFsc2UpfX19cmV0dXJuIHN1cGVyLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudChlLHQpfXNob3VsZFBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKXtjb25zdHt0eXBlOmV9PXRoaXMuc3RhdGU7aWYoWGwoZSl8fHRoaXMuc2hvdWxkUGFyc2VFbnVtcygpJiZlPT09MTE2KXtyZXR1cm4hdGhpcy5zdGF0ZS5jb250YWluc0VzY31yZXR1cm4gc3VwZXIuc2hvdWxkUGFyc2VFeHBvcnREZWNsYXJhdGlvbigpfWlzRXhwb3J0RGVmYXVsdFNwZWNpZmllcigpe2NvbnN0e3R5cGU6ZX09dGhpcy5zdGF0ZTtpZihYbChlKXx8dGhpcy5zaG91bGRQYXJzZUVudW1zKCkmJmU9PT0xMTYpe3JldHVybiB0aGlzLnN0YXRlLmNvbnRhaW5zRXNjfXJldHVybiBzdXBlci5pc0V4cG9ydERlZmF1bHRTcGVjaWZpZXIoKX1wYXJzZUV4cG9ydERlZmF1bHRFeHByZXNzaW9uKCl7aWYodGhpcy5zaG91bGRQYXJzZUVudW1zKCkmJnRoaXMuaXNDb250ZXh0dWFsKDExNikpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTt0aGlzLm5leHQoKTtyZXR1cm4gdGhpcy5mbG93UGFyc2VFbnVtRGVjbGFyYXRpb24oZSl9cmV0dXJuIHN1cGVyLnBhcnNlRXhwb3J0RGVmYXVsdEV4cHJlc3Npb24oKX1wYXJzZUNvbmRpdGlvbmFsKGUsdCxyLHMpe2lmKCF0aGlzLm1hdGNoKDE3KSlyZXR1cm4gZTtpZih0aGlzLnN0YXRlLm1heWJlSW5BcnJvd1BhcmFtZXRlcnMpe2NvbnN0IHQ9dGhpcy5sb29rYWhlYWRDaGFyQ29kZSgpO2lmKHQ9PT00NHx8dD09PTYxfHx0PT09NTh8fHQ9PT00MSl7dGhpcy5zZXRPcHRpb25hbFBhcmFtZXRlcnNFcnJvcihzKTtyZXR1cm4gZX19dGhpcy5leHBlY3QoMTcpO2NvbnN0IGk9dGhpcy5zdGF0ZS5jbG9uZSgpO2NvbnN0IG49dGhpcy5zdGF0ZS5ub0Fycm93QXQ7Y29uc3QgYT10aGlzLnN0YXJ0Tm9kZUF0KHQscik7bGV0e2NvbnNlcXVlbnQ6byxmYWlsZWQ6bH09dGhpcy50cnlQYXJzZUNvbmRpdGlvbmFsQ29uc2VxdWVudCgpO2xldFt1LGNdPXRoaXMuZ2V0QXJyb3dMaWtlRXhwcmVzc2lvbnMobyk7aWYobHx8Yy5sZW5ndGg+MCl7Y29uc3QgZT1bLi4ubl07aWYoYy5sZW5ndGg+MCl7dGhpcy5zdGF0ZT1pO3RoaXMuc3RhdGUubm9BcnJvd0F0PWU7Zm9yKGxldCB0PTA7dDxjLmxlbmd0aDt0Kyspe2UucHVzaChjW3RdLnN0YXJ0KX0oe2NvbnNlcXVlbnQ6byxmYWlsZWQ6bH09dGhpcy50cnlQYXJzZUNvbmRpdGlvbmFsQ29uc2VxdWVudCgpKTtbdSxjXT10aGlzLmdldEFycm93TGlrZUV4cHJlc3Npb25zKG8pfWlmKGwmJnUubGVuZ3RoPjEpe3RoaXMucmFpc2UoaS5zdGFydCx0aC5BbWJpZ3VvdXNDb25kaXRpb25hbEFycm93KX1pZihsJiZ1Lmxlbmd0aD09PTEpe3RoaXMuc3RhdGU9aTtlLnB1c2godVswXS5zdGFydCk7dGhpcy5zdGF0ZS5ub0Fycm93QXQ9ZTsoe2NvbnNlcXVlbnQ6byxmYWlsZWQ6bH09dGhpcy50cnlQYXJzZUNvbmRpdGlvbmFsQ29uc2VxdWVudCgpKX19dGhpcy5nZXRBcnJvd0xpa2VFeHByZXNzaW9ucyhvLHRydWUpO3RoaXMuc3RhdGUubm9BcnJvd0F0PW47dGhpcy5leHBlY3QoMTQpO2EudGVzdD1lO2EuY29uc2VxdWVudD1vO2EuYWx0ZXJuYXRlPXRoaXMuZm9yd2FyZE5vQXJyb3dQYXJhbXNDb252ZXJzaW9uQXQoYSwoKCk9PnRoaXMucGFyc2VNYXliZUFzc2lnbih1bmRlZmluZWQsdW5kZWZpbmVkKSkpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoYSwiQ29uZGl0aW9uYWxFeHByZXNzaW9uIil9dHJ5UGFyc2VDb25kaXRpb25hbENvbnNlcXVlbnQoKXt0aGlzLnN0YXRlLm5vQXJyb3dQYXJhbXNDb252ZXJzaW9uQXQucHVzaCh0aGlzLnN0YXRlLnN0YXJ0KTtjb25zdCBlPXRoaXMucGFyc2VNYXliZUFzc2lnbkFsbG93SW4oKTtjb25zdCB0PSF0aGlzLm1hdGNoKDE0KTt0aGlzLnN0YXRlLm5vQXJyb3dQYXJhbXNDb252ZXJzaW9uQXQucG9wKCk7cmV0dXJue2NvbnNlcXVlbnQ6ZSxmYWlsZWQ6dH19Z2V0QXJyb3dMaWtlRXhwcmVzc2lvbnMoZSx0KXtjb25zdCByPVtlXTtjb25zdCBzPVtdO3doaWxlKHIubGVuZ3RoIT09MCl7Y29uc3QgZT1yLnBvcCgpO2lmKGUudHlwZT09PSJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiIpe2lmKGUudHlwZVBhcmFtZXRlcnN8fCFlLnJldHVyblR5cGUpe3RoaXMuZmluaXNoQXJyb3dWYWxpZGF0aW9uKGUpfWVsc2V7cy5wdXNoKGUpfXIucHVzaChlLmJvZHkpfWVsc2UgaWYoZS50eXBlPT09IkNvbmRpdGlvbmFsRXhwcmVzc2lvbiIpe3IucHVzaChlLmNvbnNlcXVlbnQpO3IucHVzaChlLmFsdGVybmF0ZSl9fWlmKHQpe3MuZm9yRWFjaCgoZT0+dGhpcy5maW5pc2hBcnJvd1ZhbGlkYXRpb24oZSkpKTtyZXR1cm5bcyxbXV19cmV0dXJuIGFoKHMsKGU9PmUucGFyYW1zLmV2ZXJ5KChlPT50aGlzLmlzQXNzaWduYWJsZShlLHRydWUpKSkpKX1maW5pc2hBcnJvd1ZhbGlkYXRpb24oZSl7dmFyIHQ7dGhpcy50b0Fzc2lnbmFibGVMaXN0KGUucGFyYW1zLCh0PWUuZXh0cmEpPT1udWxsP3ZvaWQgMDp0LnRyYWlsaW5nQ29tbWEsZmFsc2UpO3RoaXMuc2NvcGUuZW50ZXIoUHV8RHUpO3N1cGVyLmNoZWNrUGFyYW1zKGUsZmFsc2UsdHJ1ZSk7dGhpcy5zY29wZS5leGl0KCl9Zm9yd2FyZE5vQXJyb3dQYXJhbXNDb252ZXJzaW9uQXQoZSx0KXtsZXQgcjtpZih0aGlzLnN0YXRlLm5vQXJyb3dQYXJhbXNDb252ZXJzaW9uQXQuaW5kZXhPZihlLnN0YXJ0KSE9PS0xKXt0aGlzLnN0YXRlLm5vQXJyb3dQYXJhbXNDb252ZXJzaW9uQXQucHVzaCh0aGlzLnN0YXRlLnN0YXJ0KTtyPXQoKTt0aGlzLnN0YXRlLm5vQXJyb3dQYXJhbXNDb252ZXJzaW9uQXQucG9wKCl9ZWxzZXtyPXQoKX1yZXR1cm4gcn1wYXJzZVBhcmVuSXRlbShlLHQscil7ZT1zdXBlci5wYXJzZVBhcmVuSXRlbShlLHQscik7aWYodGhpcy5lYXQoMTcpKXtlLm9wdGlvbmFsPXRydWU7dGhpcy5yZXNldEVuZExvY2F0aW9uKGUpfWlmKHRoaXMubWF0Y2goMTQpKXtjb25zdCBzPXRoaXMuc3RhcnROb2RlQXQodCxyKTtzLmV4cHJlc3Npb249ZTtzLnR5cGVBbm5vdGF0aW9uPXRoaXMuZmxvd1BhcnNlVHlwZUFubm90YXRpb24oKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKHMsIlR5cGVDYXN0RXhwcmVzc2lvbiIpfXJldHVybiBlfWFzc2VydE1vZHVsZU5vZGVBbGxvd2VkKGUpe2lmKGUudHlwZT09PSJJbXBvcnREZWNsYXJhdGlvbiImJihlLmltcG9ydEtpbmQ9PT0idHlwZSJ8fGUuaW1wb3J0S2luZD09PSJ0eXBlb2YiKXx8ZS50eXBlPT09IkV4cG9ydE5hbWVkRGVjbGFyYXRpb24iJiZlLmV4cG9ydEtpbmQ9PT0idHlwZSJ8fGUudHlwZT09PSJFeHBvcnRBbGxEZWNsYXJhdGlvbiImJmUuZXhwb3J0S2luZD09PSJ0eXBlIil7cmV0dXJufXN1cGVyLmFzc2VydE1vZHVsZU5vZGVBbGxvd2VkKGUpfXBhcnNlRXhwb3J0KGUpe2NvbnN0IHQ9c3VwZXIucGFyc2VFeHBvcnQoZSk7aWYodC50eXBlPT09IkV4cG9ydE5hbWVkRGVjbGFyYXRpb24ifHx0LnR5cGU9PT0iRXhwb3J0QWxsRGVjbGFyYXRpb24iKXt0LmV4cG9ydEtpbmQ9dC5leHBvcnRLaW5kfHwidmFsdWUifXJldHVybiB0fXBhcnNlRXhwb3J0RGVjbGFyYXRpb24oZSl7aWYodGhpcy5pc0NvbnRleHR1YWwoMTIwKSl7ZS5leHBvcnRLaW5kPSJ0eXBlIjtjb25zdCB0PXRoaXMuc3RhcnROb2RlKCk7dGhpcy5uZXh0KCk7aWYodGhpcy5tYXRjaCg1KSl7ZS5zcGVjaWZpZXJzPXRoaXMucGFyc2VFeHBvcnRTcGVjaWZpZXJzKHRydWUpO3RoaXMucGFyc2VFeHBvcnRGcm9tKGUpO3JldHVybiBudWxsfWVsc2V7cmV0dXJuIHRoaXMuZmxvd1BhcnNlVHlwZUFsaWFzKHQpfX1lbHNlIGlmKHRoaXMuaXNDb250ZXh0dWFsKDEyMSkpe2UuZXhwb3J0S2luZD0idHlwZSI7Y29uc3QgdD10aGlzLnN0YXJ0Tm9kZSgpO3RoaXMubmV4dCgpO3JldHVybiB0aGlzLmZsb3dQYXJzZU9wYXF1ZVR5cGUodCxmYWxzZSl9ZWxzZSBpZih0aGlzLmlzQ29udGV4dHVhbCgxMTkpKXtlLmV4cG9ydEtpbmQ9InR5cGUiO2NvbnN0IHQ9dGhpcy5zdGFydE5vZGUoKTt0aGlzLm5leHQoKTtyZXR1cm4gdGhpcy5mbG93UGFyc2VJbnRlcmZhY2UodCl9ZWxzZSBpZih0aGlzLnNob3VsZFBhcnNlRW51bXMoKSYmdGhpcy5pc0NvbnRleHR1YWwoMTE2KSl7ZS5leHBvcnRLaW5kPSJ2YWx1ZSI7Y29uc3QgdD10aGlzLnN0YXJ0Tm9kZSgpO3RoaXMubmV4dCgpO3JldHVybiB0aGlzLmZsb3dQYXJzZUVudW1EZWNsYXJhdGlvbih0KX1lbHNle3JldHVybiBzdXBlci5wYXJzZUV4cG9ydERlY2xhcmF0aW9uKGUpfX1lYXRFeHBvcnRTdGFyKGUpe2lmKHN1cGVyLmVhdEV4cG9ydFN0YXIoLi4uYXJndW1lbnRzKSlyZXR1cm4gdHJ1ZTtpZih0aGlzLmlzQ29udGV4dHVhbCgxMjApJiZ0aGlzLmxvb2thaGVhZCgpLnR5cGU9PT00OSl7ZS5leHBvcnRLaW5kPSJ0eXBlIjt0aGlzLm5leHQoKTt0aGlzLm5leHQoKTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9bWF5YmVQYXJzZUV4cG9ydE5hbWVzcGFjZVNwZWNpZmllcihlKXtjb25zdCB0PXRoaXMuc3RhdGUuc3RhcnQ7Y29uc3Qgcj1zdXBlci5tYXliZVBhcnNlRXhwb3J0TmFtZXNwYWNlU3BlY2lmaWVyKGUpO2lmKHImJmUuZXhwb3J0S2luZD09PSJ0eXBlIil7dGhpcy51bmV4cGVjdGVkKHQpfXJldHVybiByfXBhcnNlQ2xhc3NJZChlLHQscil7c3VwZXIucGFyc2VDbGFzc0lkKGUsdCxyKTtpZih0aGlzLm1hdGNoKDQzKSl7ZS50eXBlUGFyYW1ldGVycz10aGlzLmZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbigpfX1wYXJzZUNsYXNzTWVtYmVyKGUsdCxyKXtjb25zdCBzPXRoaXMuc3RhdGUuc3RhcnQ7aWYodGhpcy5pc0NvbnRleHR1YWwoMTE1KSl7aWYodGhpcy5wYXJzZUNsYXNzTWVtYmVyRnJvbU1vZGlmaWVyKGUsdCkpe3JldHVybn10LmRlY2xhcmU9dHJ1ZX1zdXBlci5wYXJzZUNsYXNzTWVtYmVyKGUsdCxyKTtpZih0LmRlY2xhcmUpe2lmKHQudHlwZSE9PSJDbGFzc1Byb3BlcnR5IiYmdC50eXBlIT09IkNsYXNzUHJpdmF0ZVByb3BlcnR5IiYmdC50eXBlIT09IlByb3BlcnR5RGVmaW5pdGlvbiIpe3RoaXMucmFpc2Uocyx0aC5EZWNsYXJlQ2xhc3NFbGVtZW50KX1lbHNlIGlmKHQudmFsdWUpe3RoaXMucmFpc2UodC52YWx1ZS5zdGFydCx0aC5EZWNsYXJlQ2xhc3NGaWVsZEluaXRpYWxpemVyKX19fWlzSXRlcmF0b3IoZSl7cmV0dXJuIGU9PT0iaXRlcmF0b3IifHxlPT09ImFzeW5jSXRlcmF0b3IifXJlYWRJdGVyYXRvcigpe2NvbnN0IGU9c3VwZXIucmVhZFdvcmQxKCk7Y29uc3QgdD0iQEAiK2U7aWYoIXRoaXMuaXNJdGVyYXRvcihlKXx8IXRoaXMuc3RhdGUuaW5UeXBlKXt0aGlzLnJhaXNlKHRoaXMuc3RhdGUucG9zLGNsLkludmFsaWRJZGVudGlmaWVyLHQpfXRoaXMuZmluaXNoVG9rZW4oMTIyLHQpfWdldFRva2VuRnJvbUNvZGUoZSl7Y29uc3QgdD10aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MrMSk7aWYoZT09PTEyMyYmdD09PTEyNCl7cmV0dXJuIHRoaXMuZmluaXNoT3AoNiwyKX1lbHNlIGlmKHRoaXMuc3RhdGUuaW5UeXBlJiYoZT09PTYyfHxlPT09NjApKXtyZXR1cm4gdGhpcy5maW5pc2hPcChlPT09NjI/NDQ6NDMsMSl9ZWxzZSBpZih0aGlzLnN0YXRlLmluVHlwZSYmZT09PTYzKXtpZih0PT09NDYpe3JldHVybiB0aGlzLmZpbmlzaE9wKDE4LDIpfXJldHVybiB0aGlzLmZpbmlzaE9wKDE3LDEpfWVsc2UgaWYoU3UoZSx0KSl7dGhpcy5zdGF0ZS5wb3MrPTI7cmV0dXJuIHRoaXMucmVhZEl0ZXJhdG9yKCl9ZWxzZXtyZXR1cm4gc3VwZXIuZ2V0VG9rZW5Gcm9tQ29kZShlKX19aXNBc3NpZ25hYmxlKGUsdCl7aWYoZS50eXBlPT09IlR5cGVDYXN0RXhwcmVzc2lvbiIpe3JldHVybiB0aGlzLmlzQXNzaWduYWJsZShlLmV4cHJlc3Npb24sdCl9ZWxzZXtyZXR1cm4gc3VwZXIuaXNBc3NpZ25hYmxlKGUsdCl9fXRvQXNzaWduYWJsZShlLHQpe2lmKHQ9PT12b2lkIDApe3Q9ZmFsc2V9aWYoZS50eXBlPT09IlR5cGVDYXN0RXhwcmVzc2lvbiIpe3JldHVybiBzdXBlci50b0Fzc2lnbmFibGUodGhpcy50eXBlQ2FzdFRvUGFyYW1ldGVyKGUpLHQpfWVsc2V7cmV0dXJuIHN1cGVyLnRvQXNzaWduYWJsZShlLHQpfX10b0Fzc2lnbmFibGVMaXN0KGUsdCxyKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7Y29uc3Qgcj1lW3RdO2lmKChyPT1udWxsP3ZvaWQgMDpyLnR5cGUpPT09IlR5cGVDYXN0RXhwcmVzc2lvbiIpe2VbdF09dGhpcy50eXBlQ2FzdFRvUGFyYW1ldGVyKHIpfX1yZXR1cm4gc3VwZXIudG9Bc3NpZ25hYmxlTGlzdChlLHQscil9dG9SZWZlcmVuY2VkTGlzdChlLHQpe2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgcjtjb25zdCBpPWVbc107aWYoaSYmaS50eXBlPT09IlR5cGVDYXN0RXhwcmVzc2lvbiImJiEoKHI9aS5leHRyYSkhPW51bGwmJnIucGFyZW50aGVzaXplZCkmJihlLmxlbmd0aD4xfHwhdCkpe3RoaXMucmFpc2UoaS50eXBlQW5ub3RhdGlvbi5zdGFydCx0aC5UeXBlQ2FzdEluUGF0dGVybil9fXJldHVybiBlfXBhcnNlQXJyYXlMaWtlKGUsdCxyLHMpe2NvbnN0IGk9c3VwZXIucGFyc2VBcnJheUxpa2UoZSx0LHIscyk7aWYodCYmIXRoaXMuc3RhdGUubWF5YmVJbkFycm93UGFyYW1ldGVycyl7dGhpcy50b1JlZmVyZW5jZWRMaXN0KGkuZWxlbWVudHMpfXJldHVybiBpfWNoZWNrTFZhbChlKXtpZihlLnR5cGUhPT0iVHlwZUNhc3RFeHByZXNzaW9uIil7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkodD4xP3QtMTowKSxzPTE7czx0O3MrKyl7cltzLTFdPWFyZ3VtZW50c1tzXX1yZXR1cm4gc3VwZXIuY2hlY2tMVmFsKGUsLi4ucil9fXBhcnNlQ2xhc3NQcm9wZXJ0eShlKXtpZih0aGlzLm1hdGNoKDE0KSl7ZS50eXBlQW5ub3RhdGlvbj10aGlzLmZsb3dQYXJzZVR5cGVBbm5vdGF0aW9uKCl9cmV0dXJuIHN1cGVyLnBhcnNlQ2xhc3NQcm9wZXJ0eShlKX1wYXJzZUNsYXNzUHJpdmF0ZVByb3BlcnR5KGUpe2lmKHRoaXMubWF0Y2goMTQpKXtlLnR5cGVBbm5vdGF0aW9uPXRoaXMuZmxvd1BhcnNlVHlwZUFubm90YXRpb24oKX1yZXR1cm4gc3VwZXIucGFyc2VDbGFzc1ByaXZhdGVQcm9wZXJ0eShlKX1pc0NsYXNzTWV0aG9kKCl7cmV0dXJuIHRoaXMubWF0Y2goNDMpfHxzdXBlci5pc0NsYXNzTWV0aG9kKCl9aXNDbGFzc1Byb3BlcnR5KCl7cmV0dXJuIHRoaXMubWF0Y2goMTQpfHxzdXBlci5pc0NsYXNzUHJvcGVydHkoKX1pc05vbnN0YXRpY0NvbnN0cnVjdG9yKGUpe3JldHVybiF0aGlzLm1hdGNoKDE0KSYmc3VwZXIuaXNOb25zdGF0aWNDb25zdHJ1Y3RvcihlKX1wdXNoQ2xhc3NNZXRob2QoZSx0LHIscyxpLG4pe2lmKHQudmFyaWFuY2Upe3RoaXMudW5leHBlY3RlZCh0LnZhcmlhbmNlLnN0YXJ0KX1kZWxldGUgdC52YXJpYW5jZTtpZih0aGlzLm1hdGNoKDQzKSl7dC50eXBlUGFyYW1ldGVycz10aGlzLmZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJEZWNsYXJhdGlvbigpfXN1cGVyLnB1c2hDbGFzc01ldGhvZChlLHQscixzLGksbik7aWYodC5wYXJhbXMmJmkpe2NvbnN0IGU9dC5wYXJhbXM7aWYoZS5sZW5ndGg+MCYmdGhpcy5pc1RoaXNQYXJhbShlWzBdKSl7dGhpcy5yYWlzZSh0LnN0YXJ0LHRoLlRoaXNQYXJhbUJhbm5lZEluQ29uc3RydWN0b3IpfX1lbHNlIGlmKHQudHlwZT09PSJNZXRob2REZWZpbml0aW9uIiYmaSYmdC52YWx1ZS5wYXJhbXMpe2NvbnN0IGU9dC52YWx1ZS5wYXJhbXM7aWYoZS5sZW5ndGg+MCYmdGhpcy5pc1RoaXNQYXJhbShlWzBdKSl7dGhpcy5yYWlzZSh0LnN0YXJ0LHRoLlRoaXNQYXJhbUJhbm5lZEluQ29uc3RydWN0b3IpfX19cHVzaENsYXNzUHJpdmF0ZU1ldGhvZChlLHQscixzKXtpZih0LnZhcmlhbmNlKXt0aGlzLnVuZXhwZWN0ZWQodC52YXJpYW5jZS5zdGFydCl9ZGVsZXRlIHQudmFyaWFuY2U7aWYodGhpcy5tYXRjaCg0Mykpe3QudHlwZVBhcmFtZXRlcnM9dGhpcy5mbG93UGFyc2VUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24oKX1zdXBlci5wdXNoQ2xhc3NQcml2YXRlTWV0aG9kKGUsdCxyLHMpfXBhcnNlQ2xhc3NTdXBlcihlKXtzdXBlci5wYXJzZUNsYXNzU3VwZXIoZSk7aWYoZS5zdXBlckNsYXNzJiZ0aGlzLm1hdGNoKDQzKSl7ZS5zdXBlclR5cGVQYXJhbWV0ZXJzPXRoaXMuZmxvd1BhcnNlVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24oKX1pZih0aGlzLmlzQ29udGV4dHVhbCgxMDQpKXt0aGlzLm5leHQoKTtjb25zdCB0PWUuaW1wbGVtZW50cz1bXTtkb3tjb25zdCBlPXRoaXMuc3RhcnROb2RlKCk7ZS5pZD10aGlzLmZsb3dQYXJzZVJlc3RyaWN0ZWRJZGVudGlmaWVyKHRydWUpO2lmKHRoaXMubWF0Y2goNDMpKXtlLnR5cGVQYXJhbWV0ZXJzPXRoaXMuZmxvd1BhcnNlVHlwZVBhcmFtZXRlckluc3RhbnRpYXRpb24oKX1lbHNle2UudHlwZVBhcmFtZXRlcnM9bnVsbH10LnB1c2godGhpcy5maW5pc2hOb2RlKGUsIkNsYXNzSW1wbGVtZW50cyIpKX13aGlsZSh0aGlzLmVhdCgxMikpfX1jaGVja0dldHRlclNldHRlclBhcmFtcyhlKXtzdXBlci5jaGVja0dldHRlclNldHRlclBhcmFtcyhlKTtjb25zdCB0PXRoaXMuZ2V0T2JqZWN0T3JDbGFzc01ldGhvZFBhcmFtcyhlKTtpZih0Lmxlbmd0aD4wKXtjb25zdCByPXRbMF07aWYodGhpcy5pc1RoaXNQYXJhbShyKSYmZS5raW5kPT09ImdldCIpe3RoaXMucmFpc2Uoci5zdGFydCx0aC5HZXR0ZXJNYXlOb3RIYXZlVGhpc1BhcmFtKX1lbHNlIGlmKHRoaXMuaXNUaGlzUGFyYW0ocikpe3RoaXMucmFpc2Uoci5zdGFydCx0aC5TZXR0ZXJNYXlOb3RIYXZlVGhpc1BhcmFtKX19fXBhcnNlUHJvcGVydHlOYW1lUHJlZml4T3BlcmF0b3IoZSl7ZS52YXJpYW5jZT10aGlzLmZsb3dQYXJzZVZhcmlhbmNlKCl9cGFyc2VPYmpQcm9wVmFsdWUoZSx0LHIscyxpLG4sYSxvKXtpZihlLnZhcmlhbmNlKXt0aGlzLnVuZXhwZWN0ZWQoZS52YXJpYW5jZS5zdGFydCl9ZGVsZXRlIGUudmFyaWFuY2U7bGV0IGw7aWYodGhpcy5tYXRjaCg0MykmJiFhKXtsPXRoaXMuZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCk7aWYoIXRoaXMubWF0Y2goMTApKXRoaXMudW5leHBlY3RlZCgpfXN1cGVyLnBhcnNlT2JqUHJvcFZhbHVlKGUsdCxyLHMsaSxuLGEsbyk7aWYobCl7KGUudmFsdWV8fGUpLnR5cGVQYXJhbWV0ZXJzPWx9fXBhcnNlQXNzaWduYWJsZUxpc3RJdGVtVHlwZXMoZSl7aWYodGhpcy5lYXQoMTcpKXtpZihlLnR5cGUhPT0iSWRlbnRpZmllciIpe3RoaXMucmFpc2UoZS5zdGFydCx0aC5QYXR0ZXJuSXNPcHRpb25hbCl9aWYodGhpcy5pc1RoaXNQYXJhbShlKSl7dGhpcy5yYWlzZShlLnN0YXJ0LHRoLlRoaXNQYXJhbU1heU5vdEJlT3B0aW9uYWwpfWUub3B0aW9uYWw9dHJ1ZX1pZih0aGlzLm1hdGNoKDE0KSl7ZS50eXBlQW5ub3RhdGlvbj10aGlzLmZsb3dQYXJzZVR5cGVBbm5vdGF0aW9uKCl9ZWxzZSBpZih0aGlzLmlzVGhpc1BhcmFtKGUpKXt0aGlzLnJhaXNlKGUuc3RhcnQsdGguVGhpc1BhcmFtQW5ub3RhdGlvblJlcXVpcmVkKX1pZih0aGlzLm1hdGNoKDI3KSYmdGhpcy5pc1RoaXNQYXJhbShlKSl7dGhpcy5yYWlzZShlLnN0YXJ0LHRoLlRoaXNQYXJhbU5vRGVmYXVsdCl9dGhpcy5yZXNldEVuZExvY2F0aW9uKGUpO3JldHVybiBlfXBhcnNlTWF5YmVEZWZhdWx0KGUsdCxyKXtjb25zdCBzPXN1cGVyLnBhcnNlTWF5YmVEZWZhdWx0KGUsdCxyKTtpZihzLnR5cGU9PT0iQXNzaWdubWVudFBhdHRlcm4iJiZzLnR5cGVBbm5vdGF0aW9uJiZzLnJpZ2h0LnN0YXJ0PHMudHlwZUFubm90YXRpb24uc3RhcnQpe3RoaXMucmFpc2Uocy50eXBlQW5ub3RhdGlvbi5zdGFydCx0aC5UeXBlQmVmb3JlSW5pdGlhbGl6ZXIpfXJldHVybiBzfXNob3VsZFBhcnNlRGVmYXVsdEltcG9ydChlKXtpZighc2goZSkpe3JldHVybiBzdXBlci5zaG91bGRQYXJzZURlZmF1bHRJbXBvcnQoZSl9cmV0dXJuIGloKHRoaXMuc3RhdGUudHlwZSl9cGFyc2VJbXBvcnRTcGVjaWZpZXJMb2NhbChlLHQscixzKXt0LmxvY2FsPXNoKGUpP3RoaXMuZmxvd1BhcnNlUmVzdHJpY3RlZElkZW50aWZpZXIodHJ1ZSx0cnVlKTp0aGlzLnBhcnNlSWRlbnRpZmllcigpO3RoaXMuY2hlY2tMVmFsKHQubG9jYWwscyxXdSk7ZS5zcGVjaWZpZXJzLnB1c2godGhpcy5maW5pc2hOb2RlKHQscikpfW1heWJlUGFyc2VEZWZhdWx0SW1wb3J0U3BlY2lmaWVyKGUpe2UuaW1wb3J0S2luZD0idmFsdWUiO2xldCB0PW51bGw7aWYodGhpcy5tYXRjaCg4MSkpe3Q9InR5cGVvZiJ9ZWxzZSBpZih0aGlzLmlzQ29udGV4dHVhbCgxMjApKXt0PSJ0eXBlIn1pZih0KXtjb25zdCByPXRoaXMubG9va2FoZWFkKCk7Y29uc3R7dHlwZTpzfT1yO2lmKHQ9PT0idHlwZSImJnM9PT00OSl7dGhpcy51bmV4cGVjdGVkKHIuc3RhcnQpfWlmKGloKHMpfHxzPT09NXx8cz09PTQ5KXt0aGlzLm5leHQoKTtlLmltcG9ydEtpbmQ9dH19cmV0dXJuIHN1cGVyLm1heWJlUGFyc2VEZWZhdWx0SW1wb3J0U3BlY2lmaWVyKGUpfXBhcnNlSW1wb3J0U3BlY2lmaWVyKGUsdCxyLHMpe2NvbnN0IGk9ZS5pbXBvcnRlZDtsZXQgbj1udWxsO2lmKGkudHlwZT09PSJJZGVudGlmaWVyIil7aWYoaS5uYW1lPT09InR5cGUiKXtuPSJ0eXBlIn1lbHNlIGlmKGkubmFtZT09PSJ0eXBlb2YiKXtuPSJ0eXBlb2YifX1sZXQgYT1mYWxzZTtpZih0aGlzLmlzQ29udGV4dHVhbCg4NykmJiF0aGlzLmlzTG9va2FoZWFkQ29udGV4dHVhbCgiYXMiKSl7Y29uc3QgdD10aGlzLnBhcnNlSWRlbnRpZmllcih0cnVlKTtpZihuIT09bnVsbCYmIVVsKHRoaXMuc3RhdGUudHlwZSkpe2UuaW1wb3J0ZWQ9dDtlLmltcG9ydEtpbmQ9bjtlLmxvY2FsPVljKHQpfWVsc2V7ZS5pbXBvcnRlZD1pO2UuaW1wb3J0S2luZD1udWxsO2UubG9jYWw9dGhpcy5wYXJzZUlkZW50aWZpZXIoKX19ZWxzZXtpZihuIT09bnVsbCYmVWwodGhpcy5zdGF0ZS50eXBlKSl7ZS5pbXBvcnRlZD10aGlzLnBhcnNlSWRlbnRpZmllcih0cnVlKTtlLmltcG9ydEtpbmQ9bn1lbHNle2lmKHQpe3Rocm93IHRoaXMucmFpc2UoZS5zdGFydCxjbC5JbXBvcnRCaW5kaW5nSXNTdHJpbmcsaS52YWx1ZSl9ZS5pbXBvcnRlZD1pO2UuaW1wb3J0S2luZD1udWxsfWlmKHRoaXMuZWF0Q29udGV4dHVhbCg4Nykpe2UubG9jYWw9dGhpcy5wYXJzZUlkZW50aWZpZXIoKX1lbHNle2E9dHJ1ZTtlLmxvY2FsPVljKGUuaW1wb3J0ZWQpfX1jb25zdCBvPXNoKGUpO2lmKHImJm8pe3RoaXMucmFpc2UoZS5zdGFydCx0aC5JbXBvcnRUeXBlU2hvcnRoYW5kT25seUluUHVyZUltcG9ydCl9aWYocnx8byl7dGhpcy5jaGVja1Jlc2VydmVkVHlwZShlLmxvY2FsLm5hbWUsZS5sb2NhbC5zdGFydCx0cnVlKX1pZihhJiYhciYmIW8pe3RoaXMuY2hlY2tSZXNlcnZlZFdvcmQoZS5sb2NhbC5uYW1lLGUuc3RhcnQsdHJ1ZSx0cnVlKX10aGlzLmNoZWNrTFZhbChlLmxvY2FsLCJpbXBvcnQgc3BlY2lmaWVyIixXdSk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJJbXBvcnRTcGVjaWZpZXIiKX1wYXJzZUJpbmRpbmdBdG9tKCl7c3dpdGNoKHRoaXMuc3RhdGUudHlwZSl7Y2FzZSA3MjpyZXR1cm4gdGhpcy5wYXJzZUlkZW50aWZpZXIodHJ1ZSk7ZGVmYXVsdDpyZXR1cm4gc3VwZXIucGFyc2VCaW5kaW5nQXRvbSgpfX1wYXJzZUZ1bmN0aW9uUGFyYW1zKGUsdCl7Y29uc3Qgcj1lLmtpbmQ7aWYociE9PSJnZXQiJiZyIT09InNldCImJnRoaXMubWF0Y2goNDMpKXtlLnR5cGVQYXJhbWV0ZXJzPXRoaXMuZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCl9c3VwZXIucGFyc2VGdW5jdGlvblBhcmFtcyhlLHQpfXBhcnNlVmFySWQoZSx0KXtzdXBlci5wYXJzZVZhcklkKGUsdCk7aWYodGhpcy5tYXRjaCgxNCkpe2UuaWQudHlwZUFubm90YXRpb249dGhpcy5mbG93UGFyc2VUeXBlQW5ub3RhdGlvbigpO3RoaXMucmVzZXRFbmRMb2NhdGlvbihlLmlkKX19cGFyc2VBc3luY0Fycm93RnJvbUNhbGxFeHByZXNzaW9uKGUsdCl7aWYodGhpcy5tYXRjaCgxNCkpe2NvbnN0IHQ9dGhpcy5zdGF0ZS5ub0Fub25GdW5jdGlvblR5cGU7dGhpcy5zdGF0ZS5ub0Fub25GdW5jdGlvblR5cGU9dHJ1ZTtlLnJldHVyblR5cGU9dGhpcy5mbG93UGFyc2VUeXBlQW5ub3RhdGlvbigpO3RoaXMuc3RhdGUubm9Bbm9uRnVuY3Rpb25UeXBlPXR9cmV0dXJuIHN1cGVyLnBhcnNlQXN5bmNBcnJvd0Zyb21DYWxsRXhwcmVzc2lvbihlLHQpfXNob3VsZFBhcnNlQXN5bmNBcnJvdygpe3JldHVybiB0aGlzLm1hdGNoKDE0KXx8c3VwZXIuc2hvdWxkUGFyc2VBc3luY0Fycm93KCl9cGFyc2VNYXliZUFzc2lnbihlLHQpe3ZhciByO2xldCBzPW51bGw7bGV0IGk7aWYodGhpcy5oYXNQbHVnaW4oImpzeCIpJiYodGhpcy5tYXRjaCgxMzIpfHx0aGlzLm1hdGNoKDQzKSkpe3M9dGhpcy5zdGF0ZS5jbG9uZSgpO2k9dGhpcy50cnlQYXJzZSgoKCk9PnN1cGVyLnBhcnNlTWF5YmVBc3NpZ24oZSx0KSkscyk7aWYoIWkuZXJyb3IpcmV0dXJuIGkubm9kZTtjb25zdHtjb250ZXh0OnJ9PXRoaXMuc3RhdGU7Y29uc3Qgbj1yW3IubGVuZ3RoLTFdO2lmKG49PT1nbC5qX29UYWcpe3IubGVuZ3RoLT0yfWVsc2UgaWYobj09PWdsLmpfZXhwcil7ci5sZW5ndGgtPTF9fWlmKChyPWkpIT1udWxsJiZyLmVycm9yfHx0aGlzLm1hdGNoKDQzKSl7dmFyIG4sYTtzPXN8fHRoaXMuc3RhdGUuY2xvbmUoKTtsZXQgcjtjb25zdCBvPXRoaXMudHJ5UGFyc2UoKHM9Pnt2YXIgaTtyPXRoaXMuZmxvd1BhcnNlVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uKCk7Y29uc3Qgbj10aGlzLmZvcndhcmROb0Fycm93UGFyYW1zQ29udmVyc2lvbkF0KHIsKCgpPT57Y29uc3Qgcz1zdXBlci5wYXJzZU1heWJlQXNzaWduKGUsdCk7dGhpcy5yZXNldFN0YXJ0TG9jYXRpb25Gcm9tTm9kZShzLHIpO3JldHVybiBzfSkpO2lmKChpPW4uZXh0cmEpIT1udWxsJiZpLnBhcmVudGhlc2l6ZWQpcygpO2NvbnN0IGE9dGhpcy5tYXliZVVud3JhcFR5cGVDYXN0RXhwcmVzc2lvbihuKTtpZihhLnR5cGUhPT0iQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iKXMoKTthLnR5cGVQYXJhbWV0ZXJzPXI7dGhpcy5yZXNldFN0YXJ0TG9jYXRpb25Gcm9tTm9kZShhLHIpO3JldHVybiBufSkscyk7bGV0IGw9bnVsbDtpZihvLm5vZGUmJnRoaXMubWF5YmVVbndyYXBUeXBlQ2FzdEV4cHJlc3Npb24oby5ub2RlKS50eXBlPT09IkFycm93RnVuY3Rpb25FeHByZXNzaW9uIil7aWYoIW8uZXJyb3ImJiFvLmFib3J0ZWQpe2lmKG8ubm9kZS5hc3luYyl7dGhpcy5yYWlzZShyLnN0YXJ0LHRoLlVuZXhwZWN0ZWRUeXBlUGFyYW1ldGVyQmVmb3JlQXN5bmNBcnJvd0Z1bmN0aW9uKX1yZXR1cm4gby5ub2RlfWw9by5ub2RlfWlmKChuPWkpIT1udWxsJiZuLm5vZGUpe3RoaXMuc3RhdGU9aS5mYWlsU3RhdGU7cmV0dXJuIGkubm9kZX1pZihsKXt0aGlzLnN0YXRlPW8uZmFpbFN0YXRlO3JldHVybiBsfWlmKChhPWkpIT1udWxsJiZhLnRocm93bil0aHJvdyBpLmVycm9yO2lmKG8udGhyb3duKXRocm93IG8uZXJyb3I7dGhyb3cgdGhpcy5yYWlzZShyLnN0YXJ0LHRoLlVuZXhwZWN0ZWRUb2tlbkFmdGVyVHlwZVBhcmFtZXRlcil9cmV0dXJuIHN1cGVyLnBhcnNlTWF5YmVBc3NpZ24oZSx0KX1wYXJzZUFycm93KGUpe2lmKHRoaXMubWF0Y2goMTQpKXtjb25zdCB0PXRoaXMudHJ5UGFyc2UoKCgpPT57Y29uc3QgdD10aGlzLnN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZTt0aGlzLnN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZT10cnVlO2NvbnN0IHI9dGhpcy5zdGFydE5vZGUoKTtbci50eXBlQW5ub3RhdGlvbixlLnByZWRpY2F0ZV09dGhpcy5mbG93UGFyc2VUeXBlQW5kUHJlZGljYXRlSW5pdGlhbGlzZXIoKTt0aGlzLnN0YXRlLm5vQW5vbkZ1bmN0aW9uVHlwZT10O2lmKHRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkpdGhpcy51bmV4cGVjdGVkKCk7aWYoIXRoaXMubWF0Y2goMTkpKXRoaXMudW5leHBlY3RlZCgpO3JldHVybiByfSkpO2lmKHQudGhyb3duKXJldHVybiBudWxsO2lmKHQuZXJyb3IpdGhpcy5zdGF0ZT10LmZhaWxTdGF0ZTtlLnJldHVyblR5cGU9dC5ub2RlLnR5cGVBbm5vdGF0aW9uP3RoaXMuZmluaXNoTm9kZSh0Lm5vZGUsIlR5cGVBbm5vdGF0aW9uIik6bnVsbH1yZXR1cm4gc3VwZXIucGFyc2VBcnJvdyhlKX1zaG91bGRQYXJzZUFycm93KGUpe3JldHVybiB0aGlzLm1hdGNoKDE0KXx8c3VwZXIuc2hvdWxkUGFyc2VBcnJvdyhlKX1zZXRBcnJvd0Z1bmN0aW9uUGFyYW1ldGVycyhlLHQpe2lmKHRoaXMuc3RhdGUubm9BcnJvd1BhcmFtc0NvbnZlcnNpb25BdC5pbmRleE9mKGUuc3RhcnQpIT09LTEpe2UucGFyYW1zPXR9ZWxzZXtzdXBlci5zZXRBcnJvd0Z1bmN0aW9uUGFyYW1ldGVycyhlLHQpfX1jaGVja1BhcmFtcyhlLHQscil7aWYociYmdGhpcy5zdGF0ZS5ub0Fycm93UGFyYW1zQ29udmVyc2lvbkF0LmluZGV4T2YoZS5zdGFydCkhPT0tMSl7cmV0dXJufWZvcihsZXQgdD0wO3Q8ZS5wYXJhbXMubGVuZ3RoO3QrKyl7aWYodGhpcy5pc1RoaXNQYXJhbShlLnBhcmFtc1t0XSkmJnQ+MCl7dGhpcy5yYWlzZShlLnBhcmFtc1t0XS5zdGFydCx0aC5UaGlzUGFyYW1NdXN0QmVGaXJzdCl9fXJldHVybiBzdXBlci5jaGVja1BhcmFtcyguLi5hcmd1bWVudHMpfXBhcnNlUGFyZW5BbmREaXN0aW5ndWlzaEV4cHJlc3Npb24oZSl7cmV0dXJuIHN1cGVyLnBhcnNlUGFyZW5BbmREaXN0aW5ndWlzaEV4cHJlc3Npb24oZSYmdGhpcy5zdGF0ZS5ub0Fycm93QXQuaW5kZXhPZih0aGlzLnN0YXRlLnN0YXJ0KT09PS0xKX1wYXJzZVN1YnNjcmlwdHMoZSx0LHIscyl7aWYoZS50eXBlPT09IklkZW50aWZpZXIiJiZlLm5hbWU9PT0iYXN5bmMiJiZ0aGlzLnN0YXRlLm5vQXJyb3dBdC5pbmRleE9mKHQpIT09LTEpe3RoaXMubmV4dCgpO2NvbnN0IHM9dGhpcy5zdGFydE5vZGVBdCh0LHIpO3MuY2FsbGVlPWU7cy5hcmd1bWVudHM9dGhpcy5wYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzKDExLGZhbHNlKTtlPXRoaXMuZmluaXNoTm9kZShzLCJDYWxsRXhwcmVzc2lvbiIpfWVsc2UgaWYoZS50eXBlPT09IklkZW50aWZpZXIiJiZlLm5hbWU9PT0iYXN5bmMiJiZ0aGlzLm1hdGNoKDQzKSl7Y29uc3QgaT10aGlzLnN0YXRlLmNsb25lKCk7Y29uc3Qgbj10aGlzLnRyeVBhcnNlKChlPT50aGlzLnBhcnNlQXN5bmNBcnJvd1dpdGhUeXBlUGFyYW1ldGVycyh0LHIpfHxlKCkpLGkpO2lmKCFuLmVycm9yJiYhbi5hYm9ydGVkKXJldHVybiBuLm5vZGU7Y29uc3QgYT10aGlzLnRyeVBhcnNlKCgoKT0+c3VwZXIucGFyc2VTdWJzY3JpcHRzKGUsdCxyLHMpKSxpKTtpZihhLm5vZGUmJiFhLmVycm9yKXJldHVybiBhLm5vZGU7aWYobi5ub2RlKXt0aGlzLnN0YXRlPW4uZmFpbFN0YXRlO3JldHVybiBuLm5vZGV9aWYoYS5ub2RlKXt0aGlzLnN0YXRlPWEuZmFpbFN0YXRlO3JldHVybiBhLm5vZGV9dGhyb3cgbi5lcnJvcnx8YS5lcnJvcn1yZXR1cm4gc3VwZXIucGFyc2VTdWJzY3JpcHRzKGUsdCxyLHMpfXBhcnNlU3Vic2NyaXB0KGUsdCxyLHMsaSl7aWYodGhpcy5tYXRjaCgxOCkmJnRoaXMuaXNMb29rYWhlYWRUb2tlbl9sdCgpKXtpLm9wdGlvbmFsQ2hhaW5NZW1iZXI9dHJ1ZTtpZihzKXtpLnN0b3A9dHJ1ZTtyZXR1cm4gZX10aGlzLm5leHQoKTtjb25zdCBuPXRoaXMuc3RhcnROb2RlQXQodCxyKTtuLmNhbGxlZT1lO24udHlwZUFyZ3VtZW50cz10aGlzLmZsb3dQYXJzZVR5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uKCk7dGhpcy5leHBlY3QoMTApO24uYXJndW1lbnRzPXRoaXMucGFyc2VDYWxsRXhwcmVzc2lvbkFyZ3VtZW50cygxMSxmYWxzZSk7bi5vcHRpb25hbD10cnVlO3JldHVybiB0aGlzLmZpbmlzaENhbGxFeHByZXNzaW9uKG4sdHJ1ZSl9ZWxzZSBpZighcyYmdGhpcy5zaG91bGRQYXJzZVR5cGVzKCkmJnRoaXMubWF0Y2goNDMpKXtjb25zdCBzPXRoaXMuc3RhcnROb2RlQXQodCxyKTtzLmNhbGxlZT1lO2NvbnN0IG49dGhpcy50cnlQYXJzZSgoKCk9PntzLnR5cGVBcmd1bWVudHM9dGhpcy5mbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbkNhbGxPck5ldygpO3RoaXMuZXhwZWN0KDEwKTtzLmFyZ3VtZW50cz10aGlzLnBhcnNlQ2FsbEV4cHJlc3Npb25Bcmd1bWVudHMoMTEsZmFsc2UpO2lmKGkub3B0aW9uYWxDaGFpbk1lbWJlcilzLm9wdGlvbmFsPWZhbHNlO3JldHVybiB0aGlzLmZpbmlzaENhbGxFeHByZXNzaW9uKHMsaS5vcHRpb25hbENoYWluTWVtYmVyKX0pKTtpZihuLm5vZGUpe2lmKG4uZXJyb3IpdGhpcy5zdGF0ZT1uLmZhaWxTdGF0ZTtyZXR1cm4gbi5ub2RlfX1yZXR1cm4gc3VwZXIucGFyc2VTdWJzY3JpcHQoZSx0LHIscyxpKX1wYXJzZU5ld0FyZ3VtZW50cyhlKXtsZXQgdD1udWxsO2lmKHRoaXMuc2hvdWxkUGFyc2VUeXBlcygpJiZ0aGlzLm1hdGNoKDQzKSl7dD10aGlzLnRyeVBhcnNlKCgoKT0+dGhpcy5mbG93UGFyc2VUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbkNhbGxPck5ldygpKSkubm9kZX1lLnR5cGVBcmd1bWVudHM9dDtzdXBlci5wYXJzZU5ld0FyZ3VtZW50cyhlKX1wYXJzZUFzeW5jQXJyb3dXaXRoVHlwZVBhcmFtZXRlcnMoZSx0KXtjb25zdCByPXRoaXMuc3RhcnROb2RlQXQoZSx0KTt0aGlzLnBhcnNlRnVuY3Rpb25QYXJhbXMocik7aWYoIXRoaXMucGFyc2VBcnJvdyhyKSlyZXR1cm47cmV0dXJuIHRoaXMucGFyc2VBcnJvd0V4cHJlc3Npb24ocix1bmRlZmluZWQsdHJ1ZSl9cmVhZFRva2VuX211bHRfbW9kdWxvKGUpe2NvbnN0IHQ9dGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zKzEpO2lmKGU9PT00MiYmdD09PTQ3JiZ0aGlzLnN0YXRlLmhhc0Zsb3dDb21tZW50KXt0aGlzLnN0YXRlLmhhc0Zsb3dDb21tZW50PWZhbHNlO3RoaXMuc3RhdGUucG9zKz0yO3RoaXMubmV4dFRva2VuKCk7cmV0dXJufXN1cGVyLnJlYWRUb2tlbl9tdWx0X21vZHVsbyhlKX1yZWFkVG9rZW5fcGlwZV9hbXAoZSl7Y29uc3QgdD10aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MrMSk7aWYoZT09PTEyNCYmdD09PTEyNSl7dGhpcy5maW5pc2hPcCg5LDIpO3JldHVybn1zdXBlci5yZWFkVG9rZW5fcGlwZV9hbXAoZSl9cGFyc2VUb3BMZXZlbChlLHQpe2NvbnN0IHI9c3VwZXIucGFyc2VUb3BMZXZlbChlLHQpO2lmKHRoaXMuc3RhdGUuaGFzRmxvd0NvbW1lbnQpe3RoaXMucmFpc2UodGhpcy5zdGF0ZS5wb3MsdGguVW50ZXJtaW5hdGVkRmxvd0NvbW1lbnQpfXJldHVybiByfXNraXBCbG9ja0NvbW1lbnQoKXtpZih0aGlzLmhhc1BsdWdpbigiZmxvd0NvbW1lbnRzIikmJnRoaXMuc2tpcEZsb3dDb21tZW50KCkpe2lmKHRoaXMuc3RhdGUuaGFzRmxvd0NvbW1lbnQpe3RoaXMudW5leHBlY3RlZChudWxsLHRoLk5lc3RlZEZsb3dDb21tZW50KX10aGlzLmhhc0Zsb3dDb21tZW50Q29tcGxldGlvbigpO3RoaXMuc3RhdGUucG9zKz10aGlzLnNraXBGbG93Q29tbWVudCgpO3RoaXMuc3RhdGUuaGFzRmxvd0NvbW1lbnQ9dHJ1ZTtyZXR1cm59aWYodGhpcy5zdGF0ZS5oYXNGbG93Q29tbWVudCl7Y29uc3QgZT10aGlzLmlucHV0LmluZGV4T2YoIiotLyIsdGhpcy5zdGF0ZS5wb3MrPTIpO2lmKGU9PT0tMSl7dGhyb3cgdGhpcy5yYWlzZSh0aGlzLnN0YXRlLnBvcy0yLGNsLlVudGVybWluYXRlZENvbW1lbnQpfXRoaXMuc3RhdGUucG9zPWUrMztyZXR1cm59cmV0dXJuIHN1cGVyLnNraXBCbG9ja0NvbW1lbnQoKX1za2lwRmxvd0NvbW1lbnQoKXtjb25zdHtwb3M6ZX09dGhpcy5zdGF0ZTtsZXQgdD0yO3doaWxlKFszMiw5XS5pbmNsdWRlcyh0aGlzLmlucHV0LmNoYXJDb2RlQXQoZSt0KSkpe3QrK31jb25zdCByPXRoaXMuaW5wdXQuY2hhckNvZGVBdCh0K2UpO2NvbnN0IHM9dGhpcy5pbnB1dC5jaGFyQ29kZUF0KHQrZSsxKTtpZihyPT09NTgmJnM9PT01OCl7cmV0dXJuIHQrMn1pZih0aGlzLmlucHV0LnNsaWNlKHQrZSx0K2UrMTIpPT09ImZsb3ctaW5jbHVkZSIpe3JldHVybiB0KzEyfWlmKHI9PT01OCYmcyE9PTU4KXtyZXR1cm4gdH1yZXR1cm4gZmFsc2V9aGFzRmxvd0NvbW1lbnRDb21wbGV0aW9uKCl7Y29uc3QgZT10aGlzLmlucHV0LmluZGV4T2YoIiovIix0aGlzLnN0YXRlLnBvcyk7aWYoZT09PS0xKXt0aHJvdyB0aGlzLnJhaXNlKHRoaXMuc3RhdGUucG9zLGNsLlVudGVybWluYXRlZENvbW1lbnQpfX1mbG93RW51bUVycm9yQm9vbGVhbk1lbWJlck5vdEluaXRpYWxpemVkKGUsdCl7bGV0e2VudW1OYW1lOnIsbWVtYmVyTmFtZTpzfT10O3RoaXMucmFpc2UoZSx0aC5FbnVtQm9vbGVhbk1lbWJlck5vdEluaXRpYWxpemVkLHMscil9Zmxvd0VudW1FcnJvckludmFsaWRNZW1iZXJOYW1lKGUsdCl7bGV0e2VudW1OYW1lOnIsbWVtYmVyTmFtZTpzfT10O2NvbnN0IGk9c1swXS50b1VwcGVyQ2FzZSgpK3Muc2xpY2UoMSk7dGhpcy5yYWlzZShlLHRoLkVudW1JbnZhbGlkTWVtYmVyTmFtZSxzLGkscil9Zmxvd0VudW1FcnJvckR1cGxpY2F0ZU1lbWJlck5hbWUoZSx0KXtsZXR7ZW51bU5hbWU6cixtZW1iZXJOYW1lOnN9PXQ7dGhpcy5yYWlzZShlLHRoLkVudW1EdXBsaWNhdGVNZW1iZXJOYW1lLHMscil9Zmxvd0VudW1FcnJvckluY29uc2lzdGVudE1lbWJlclZhbHVlcyhlLHQpe2xldHtlbnVtTmFtZTpyfT10O3RoaXMucmFpc2UoZSx0aC5FbnVtSW5jb25zaXN0ZW50TWVtYmVyVmFsdWVzLHIpfWZsb3dFbnVtRXJyb3JJbnZhbGlkRXhwbGljaXRUeXBlKGUsdCl7bGV0e2VudW1OYW1lOnIsc3VwcGxpZWRUeXBlOnN9PXQ7cmV0dXJuIHRoaXMucmFpc2UoZSxzPT09bnVsbD90aC5FbnVtSW52YWxpZEV4cGxpY2l0VHlwZVVua25vd25TdXBwbGllZDp0aC5FbnVtSW52YWxpZEV4cGxpY2l0VHlwZSxyLHMpfWZsb3dFbnVtRXJyb3JJbnZhbGlkTWVtYmVySW5pdGlhbGl6ZXIoZSx0KXtsZXR7ZW51bU5hbWU6cixleHBsaWNpdFR5cGU6cyxtZW1iZXJOYW1lOml9PXQ7bGV0IG49bnVsbDtzd2l0Y2gocyl7Y2FzZSJib29sZWFuIjpjYXNlIm51bWJlciI6Y2FzZSJzdHJpbmciOm49dGguRW51bUludmFsaWRNZW1iZXJJbml0aWFsaXplclByaW1hcnlUeXBlO2JyZWFrO2Nhc2Uic3ltYm9sIjpuPXRoLkVudW1JbnZhbGlkTWVtYmVySW5pdGlhbGl6ZXJTeW1ib2xUeXBlO2JyZWFrO2RlZmF1bHQ6bj10aC5FbnVtSW52YWxpZE1lbWJlckluaXRpYWxpemVyVW5rbm93blR5cGV9cmV0dXJuIHRoaXMucmFpc2UoZSxuLHIsaSxzKX1mbG93RW51bUVycm9yTnVtYmVyTWVtYmVyTm90SW5pdGlhbGl6ZWQoZSx0KXtsZXR7ZW51bU5hbWU6cixtZW1iZXJOYW1lOnN9PXQ7dGhpcy5yYWlzZShlLHRoLkVudW1OdW1iZXJNZW1iZXJOb3RJbml0aWFsaXplZCxyLHMpfWZsb3dFbnVtRXJyb3JTdHJpbmdNZW1iZXJJbmNvbnNpc3RlbnRseUluaXRhaWxpemVkKGUsdCl7bGV0e2VudW1OYW1lOnJ9PXQ7dGhpcy5yYWlzZShlLHRoLkVudW1TdHJpbmdNZW1iZXJJbmNvbnNpc3RlbnRseUluaXRhaWxpemVkLHIpfWZsb3dFbnVtTWVtYmVySW5pdCgpe2NvbnN0IGU9dGhpcy5zdGF0ZS5zdGFydDtjb25zdCB0PSgpPT50aGlzLm1hdGNoKDEyKXx8dGhpcy5tYXRjaCg4KTtzd2l0Y2godGhpcy5zdGF0ZS50eXBlKXtjYXNlIDEyNDp7Y29uc3Qgcj10aGlzLnBhcnNlTnVtZXJpY0xpdGVyYWwodGhpcy5zdGF0ZS52YWx1ZSk7aWYodCgpKXtyZXR1cm57dHlwZToibnVtYmVyIixwb3M6ci5zdGFydCx2YWx1ZTpyfX1yZXR1cm57dHlwZToiaW52YWxpZCIscG9zOmV9fWNhc2UgMTIzOntjb25zdCByPXRoaXMucGFyc2VTdHJpbmdMaXRlcmFsKHRoaXMuc3RhdGUudmFsdWUpO2lmKHQoKSl7cmV0dXJue3R5cGU6InN0cmluZyIscG9zOnIuc3RhcnQsdmFsdWU6cn19cmV0dXJue3R5cGU6ImludmFsaWQiLHBvczplfX1jYXNlIDc5OmNhc2UgODA6e2NvbnN0IHI9dGhpcy5wYXJzZUJvb2xlYW5MaXRlcmFsKHRoaXMubWF0Y2goNzkpKTtpZih0KCkpe3JldHVybnt0eXBlOiJib29sZWFuIixwb3M6ci5zdGFydCx2YWx1ZTpyfX1yZXR1cm57dHlwZToiaW52YWxpZCIscG9zOmV9fWRlZmF1bHQ6cmV0dXJue3R5cGU6ImludmFsaWQiLHBvczplfX19Zmxvd0VudW1NZW1iZXJSYXcoKXtjb25zdCBlPXRoaXMuc3RhdGUuc3RhcnQ7Y29uc3QgdD10aGlzLnBhcnNlSWRlbnRpZmllcih0cnVlKTtjb25zdCByPXRoaXMuZWF0KDI3KT90aGlzLmZsb3dFbnVtTWVtYmVySW5pdCgpOnt0eXBlOiJub25lIixwb3M6ZX07cmV0dXJue2lkOnQsaW5pdDpyfX1mbG93RW51bUNoZWNrRXhwbGljaXRUeXBlTWlzbWF0Y2goZSx0LHIpe2NvbnN0e2V4cGxpY2l0VHlwZTpzfT10O2lmKHM9PT1udWxsKXtyZXR1cm59aWYocyE9PXIpe3RoaXMuZmxvd0VudW1FcnJvckludmFsaWRNZW1iZXJJbml0aWFsaXplcihlLHQpfX1mbG93RW51bU1lbWJlcnMoZSl7bGV0e2VudW1OYW1lOnQsZXhwbGljaXRUeXBlOnJ9PWU7Y29uc3Qgcz1uZXcgU2V0O2NvbnN0IGk9e2Jvb2xlYW5NZW1iZXJzOltdLG51bWJlck1lbWJlcnM6W10sc3RyaW5nTWVtYmVyczpbXSxkZWZhdWx0ZWRNZW1iZXJzOltdfTtsZXQgbj1mYWxzZTt3aGlsZSghdGhpcy5tYXRjaCg4KSl7aWYodGhpcy5lYXQoMjEpKXtuPXRydWU7YnJlYWt9Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO2NvbnN0e2lkOmEsaW5pdDpvfT10aGlzLmZsb3dFbnVtTWVtYmVyUmF3KCk7Y29uc3QgbD1hLm5hbWU7aWYobD09PSIiKXtjb250aW51ZX1pZigvXlthLXpdLy50ZXN0KGwpKXt0aGlzLmZsb3dFbnVtRXJyb3JJbnZhbGlkTWVtYmVyTmFtZShhLnN0YXJ0LHtlbnVtTmFtZTp0LG1lbWJlck5hbWU6bH0pfWlmKHMuaGFzKGwpKXt0aGlzLmZsb3dFbnVtRXJyb3JEdXBsaWNhdGVNZW1iZXJOYW1lKGEuc3RhcnQse2VudW1OYW1lOnQsbWVtYmVyTmFtZTpsfSl9cy5hZGQobCk7Y29uc3QgdT17ZW51bU5hbWU6dCxleHBsaWNpdFR5cGU6cixtZW1iZXJOYW1lOmx9O2UuaWQ9YTtzd2l0Y2goby50eXBlKXtjYXNlImJvb2xlYW4iOnt0aGlzLmZsb3dFbnVtQ2hlY2tFeHBsaWNpdFR5cGVNaXNtYXRjaChvLnBvcyx1LCJib29sZWFuIik7ZS5pbml0PW8udmFsdWU7aS5ib29sZWFuTWVtYmVycy5wdXNoKHRoaXMuZmluaXNoTm9kZShlLCJFbnVtQm9vbGVhbk1lbWJlciIpKTticmVha31jYXNlIm51bWJlciI6e3RoaXMuZmxvd0VudW1DaGVja0V4cGxpY2l0VHlwZU1pc21hdGNoKG8ucG9zLHUsIm51bWJlciIpO2UuaW5pdD1vLnZhbHVlO2kubnVtYmVyTWVtYmVycy5wdXNoKHRoaXMuZmluaXNoTm9kZShlLCJFbnVtTnVtYmVyTWVtYmVyIikpO2JyZWFrfWNhc2Uic3RyaW5nIjp7dGhpcy5mbG93RW51bUNoZWNrRXhwbGljaXRUeXBlTWlzbWF0Y2goby5wb3MsdSwic3RyaW5nIik7ZS5pbml0PW8udmFsdWU7aS5zdHJpbmdNZW1iZXJzLnB1c2godGhpcy5maW5pc2hOb2RlKGUsIkVudW1TdHJpbmdNZW1iZXIiKSk7YnJlYWt9Y2FzZSJpbnZhbGlkIjp7dGhyb3cgdGhpcy5mbG93RW51bUVycm9ySW52YWxpZE1lbWJlckluaXRpYWxpemVyKG8ucG9zLHUpfWNhc2Uibm9uZSI6e3N3aXRjaChyKXtjYXNlImJvb2xlYW4iOnRoaXMuZmxvd0VudW1FcnJvckJvb2xlYW5NZW1iZXJOb3RJbml0aWFsaXplZChvLnBvcyx1KTticmVhaztjYXNlIm51bWJlciI6dGhpcy5mbG93RW51bUVycm9yTnVtYmVyTWVtYmVyTm90SW5pdGlhbGl6ZWQoby5wb3MsdSk7YnJlYWs7ZGVmYXVsdDppLmRlZmF1bHRlZE1lbWJlcnMucHVzaCh0aGlzLmZpbmlzaE5vZGUoZSwiRW51bURlZmF1bHRlZE1lbWJlciIpKX19fWlmKCF0aGlzLm1hdGNoKDgpKXt0aGlzLmV4cGVjdCgxMil9fXJldHVybnttZW1iZXJzOmksaGFzVW5rbm93bk1lbWJlcnM6bn19Zmxvd0VudW1TdHJpbmdNZW1iZXJzKGUsdCxyKXtsZXR7ZW51bU5hbWU6c309cjtpZihlLmxlbmd0aD09PTApe3JldHVybiB0fWVsc2UgaWYodC5sZW5ndGg9PT0wKXtyZXR1cm4gZX1lbHNlIGlmKHQubGVuZ3RoPmUubGVuZ3RoKXtmb3IoY29uc3QgdCBvZiBlKXt0aGlzLmZsb3dFbnVtRXJyb3JTdHJpbmdNZW1iZXJJbmNvbnNpc3RlbnRseUluaXRhaWxpemVkKHQuc3RhcnQse2VudW1OYW1lOnN9KX1yZXR1cm4gdH1lbHNle2Zvcihjb25zdCBlIG9mIHQpe3RoaXMuZmxvd0VudW1FcnJvclN0cmluZ01lbWJlckluY29uc2lzdGVudGx5SW5pdGFpbGl6ZWQoZS5zdGFydCx7ZW51bU5hbWU6c30pfXJldHVybiBlfX1mbG93RW51bVBhcnNlRXhwbGljaXRUeXBlKGUpe2xldHtlbnVtTmFtZTp0fT1lO2lmKHRoaXMuZWF0Q29udGV4dHVhbCg5NSkpe2lmKCFSbCh0aGlzLnN0YXRlLnR5cGUpKXt0aHJvdyB0aGlzLmZsb3dFbnVtRXJyb3JJbnZhbGlkRXhwbGljaXRUeXBlKHRoaXMuc3RhdGUuc3RhcnQse2VudW1OYW1lOnQsc3VwcGxpZWRUeXBlOm51bGx9KX1jb25zdHt2YWx1ZTplfT10aGlzLnN0YXRlO3RoaXMubmV4dCgpO2lmKGUhPT0iYm9vbGVhbiImJmUhPT0ibnVtYmVyIiYmZSE9PSJzdHJpbmciJiZlIT09InN5bWJvbCIpe3RoaXMuZmxvd0VudW1FcnJvckludmFsaWRFeHBsaWNpdFR5cGUodGhpcy5zdGF0ZS5zdGFydCx7ZW51bU5hbWU6dCxzdXBwbGllZFR5cGU6ZX0pfXJldHVybiBlfXJldHVybiBudWxsfWZsb3dFbnVtQm9keShlLHQpe2xldHtlbnVtTmFtZTpyLG5hbWVMb2M6c309dDtjb25zdCBpPXRoaXMuZmxvd0VudW1QYXJzZUV4cGxpY2l0VHlwZSh7ZW51bU5hbWU6cn0pO3RoaXMuZXhwZWN0KDUpO2NvbnN0e21lbWJlcnM6bixoYXNVbmtub3duTWVtYmVyczphfT10aGlzLmZsb3dFbnVtTWVtYmVycyh7ZW51bU5hbWU6cixleHBsaWNpdFR5cGU6aX0pO2UuaGFzVW5rbm93bk1lbWJlcnM9YTtzd2l0Y2goaSl7Y2FzZSJib29sZWFuIjplLmV4cGxpY2l0VHlwZT10cnVlO2UubWVtYmVycz1uLmJvb2xlYW5NZW1iZXJzO3RoaXMuZXhwZWN0KDgpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiRW51bUJvb2xlYW5Cb2R5Iik7Y2FzZSJudW1iZXIiOmUuZXhwbGljaXRUeXBlPXRydWU7ZS5tZW1iZXJzPW4ubnVtYmVyTWVtYmVyczt0aGlzLmV4cGVjdCg4KTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIkVudW1OdW1iZXJCb2R5Iik7Y2FzZSJzdHJpbmciOmUuZXhwbGljaXRUeXBlPXRydWU7ZS5tZW1iZXJzPXRoaXMuZmxvd0VudW1TdHJpbmdNZW1iZXJzKG4uc3RyaW5nTWVtYmVycyxuLmRlZmF1bHRlZE1lbWJlcnMse2VudW1OYW1lOnJ9KTt0aGlzLmV4cGVjdCg4KTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIkVudW1TdHJpbmdCb2R5Iik7Y2FzZSJzeW1ib2wiOmUubWVtYmVycz1uLmRlZmF1bHRlZE1lbWJlcnM7dGhpcy5leHBlY3QoOCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJFbnVtU3ltYm9sQm9keSIpO2RlZmF1bHQ6e2NvbnN0IHQ9KCk9PntlLm1lbWJlcnM9W107dGhpcy5leHBlY3QoOCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJFbnVtU3RyaW5nQm9keSIpfTtlLmV4cGxpY2l0VHlwZT1mYWxzZTtjb25zdCBpPW4uYm9vbGVhbk1lbWJlcnMubGVuZ3RoO2NvbnN0IGE9bi5udW1iZXJNZW1iZXJzLmxlbmd0aDtjb25zdCBvPW4uc3RyaW5nTWVtYmVycy5sZW5ndGg7Y29uc3QgbD1uLmRlZmF1bHRlZE1lbWJlcnMubGVuZ3RoO2lmKCFpJiYhYSYmIW8mJiFsKXtyZXR1cm4gdCgpfWVsc2UgaWYoIWkmJiFhKXtlLm1lbWJlcnM9dGhpcy5mbG93RW51bVN0cmluZ01lbWJlcnMobi5zdHJpbmdNZW1iZXJzLG4uZGVmYXVsdGVkTWVtYmVycyx7ZW51bU5hbWU6cn0pO3RoaXMuZXhwZWN0KDgpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiRW51bVN0cmluZ0JvZHkiKX1lbHNlIGlmKCFhJiYhbyYmaT49bCl7Zm9yKGNvbnN0IGUgb2Ygbi5kZWZhdWx0ZWRNZW1iZXJzKXt0aGlzLmZsb3dFbnVtRXJyb3JCb29sZWFuTWVtYmVyTm90SW5pdGlhbGl6ZWQoZS5zdGFydCx7ZW51bU5hbWU6cixtZW1iZXJOYW1lOmUuaWQubmFtZX0pfWUubWVtYmVycz1uLmJvb2xlYW5NZW1iZXJzO3RoaXMuZXhwZWN0KDgpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiRW51bUJvb2xlYW5Cb2R5Iil9ZWxzZSBpZighaSYmIW8mJmE+PWwpe2Zvcihjb25zdCBlIG9mIG4uZGVmYXVsdGVkTWVtYmVycyl7dGhpcy5mbG93RW51bUVycm9yTnVtYmVyTWVtYmVyTm90SW5pdGlhbGl6ZWQoZS5zdGFydCx7ZW51bU5hbWU6cixtZW1iZXJOYW1lOmUuaWQubmFtZX0pfWUubWVtYmVycz1uLm51bWJlck1lbWJlcnM7dGhpcy5leHBlY3QoOCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJFbnVtTnVtYmVyQm9keSIpfWVsc2V7dGhpcy5mbG93RW51bUVycm9ySW5jb25zaXN0ZW50TWVtYmVyVmFsdWVzKHMse2VudW1OYW1lOnJ9KTtyZXR1cm4gdCgpfX19fWZsb3dQYXJzZUVudW1EZWNsYXJhdGlvbihlKXtjb25zdCB0PXRoaXMucGFyc2VJZGVudGlmaWVyKCk7ZS5pZD10O2UuYm9keT10aGlzLmZsb3dFbnVtQm9keSh0aGlzLnN0YXJ0Tm9kZSgpLHtlbnVtTmFtZTp0Lm5hbWUsbmFtZUxvYzp0LnN0YXJ0fSk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJFbnVtRGVjbGFyYXRpb24iKX1pc0xvb2thaGVhZFRva2VuX2x0KCl7Y29uc3QgZT10aGlzLm5leHRUb2tlblN0YXJ0KCk7aWYodGhpcy5pbnB1dC5jaGFyQ29kZUF0KGUpPT09NjApe2NvbnN0IHQ9dGhpcy5pbnB1dC5jaGFyQ29kZUF0KGUrMSk7cmV0dXJuIHQhPT02MCYmdCE9PTYxfXJldHVybiBmYWxzZX1tYXliZVVud3JhcFR5cGVDYXN0RXhwcmVzc2lvbihlKXtyZXR1cm4gZS50eXBlPT09IlR5cGVDYXN0RXhwcmVzc2lvbiI/ZS5leHByZXNzaW9uOmV9fTtjb25zdCB1aD17cXVvdDonIicsYW1wOiImIixhcG9zOiInIixsdDoiPCIsZ3Q6Ij4iLG5ic3A6IsKgIixpZXhjbDoiwqEiLGNlbnQ6IsKiIixwb3VuZDoiwqMiLGN1cnJlbjoiwqQiLHllbjoiwqUiLGJydmJhcjoiwqYiLHNlY3Q6IsKnIix1bWw6IsKoIixjb3B5OiLCqSIsb3JkZjoiwqoiLGxhcXVvOiLCqyIsbm90OiLCrCIsc2h5OiLCrSIscmVnOiLCriIsbWFjcjoiwq8iLGRlZzoiwrAiLHBsdXNtbjoiwrEiLHN1cDI6IsKyIixzdXAzOiLCsyIsYWN1dGU6IsK0IixtaWNybzoiwrUiLHBhcmE6IsK2IixtaWRkb3Q6IsK3IixjZWRpbDoiwrgiLHN1cDE6IsK5IixvcmRtOiLCuiIscmFxdW86IsK7IixmcmFjMTQ6IsK8IixmcmFjMTI6IsK9IixmcmFjMzQ6IsK+IixpcXVlc3Q6IsK/IixBZ3JhdmU6IsOAIixBYWN1dGU6IsOBIixBY2lyYzoiw4IiLEF0aWxkZToiw4MiLEF1bWw6IsOEIixBcmluZzoiw4UiLEFFbGlnOiLDhiIsQ2NlZGlsOiLDhyIsRWdyYXZlOiLDiCIsRWFjdXRlOiLDiSIsRWNpcmM6IsOKIixFdW1sOiLDiyIsSWdyYXZlOiLDjCIsSWFjdXRlOiLDjSIsSWNpcmM6IsOOIixJdW1sOiLDjyIsRVRIOiLDkCIsTnRpbGRlOiLDkSIsT2dyYXZlOiLDkiIsT2FjdXRlOiLDkyIsT2NpcmM6IsOUIixPdGlsZGU6IsOVIixPdW1sOiLDliIsdGltZXM6IsOXIixPc2xhc2g6IsOYIixVZ3JhdmU6IsOZIixVYWN1dGU6IsOaIixVY2lyYzoiw5siLFV1bWw6IsOcIixZYWN1dGU6IsOdIixUSE9STjoiw54iLHN6bGlnOiLDnyIsYWdyYXZlOiLDoCIsYWFjdXRlOiLDoSIsYWNpcmM6IsOiIixhdGlsZGU6IsOjIixhdW1sOiLDpCIsYXJpbmc6IsOlIixhZWxpZzoiw6YiLGNjZWRpbDoiw6ciLGVncmF2ZToiw6giLGVhY3V0ZToiw6kiLGVjaXJjOiLDqiIsZXVtbDoiw6siLGlncmF2ZToiw6wiLGlhY3V0ZToiw60iLGljaXJjOiLDriIsaXVtbDoiw68iLGV0aDoiw7AiLG50aWxkZToiw7EiLG9ncmF2ZToiw7IiLG9hY3V0ZToiw7MiLG9jaXJjOiLDtCIsb3RpbGRlOiLDtSIsb3VtbDoiw7YiLGRpdmlkZToiw7ciLG9zbGFzaDoiw7giLHVncmF2ZToiw7kiLHVhY3V0ZToiw7oiLHVjaXJjOiLDuyIsdXVtbDoiw7wiLHlhY3V0ZToiw70iLHRob3JuOiLDviIseXVtbDoiw78iLE9FbGlnOiLFkiIsb2VsaWc6IsWTIixTY2Fyb246IsWgIixzY2Fyb246IsWhIixZdW1sOiLFuCIsZm5vZjoixpIiLGNpcmM6IsuGIix0aWxkZToiy5wiLEFscGhhOiLOkSIsQmV0YToizpIiLEdhbW1hOiLOkyIsRGVsdGE6Is6UIixFcHNpbG9uOiLOlSIsWmV0YToizpYiLEV0YToizpciLFRoZXRhOiLOmCIsSW90YToizpkiLEthcHBhOiLOmiIsTGFtYmRhOiLOmyIsTXU6Is6cIixOdToizp0iLFhpOiLOniIsT21pY3Jvbjoizp8iLFBpOiLOoCIsUmhvOiLOoSIsU2lnbWE6Is6jIixUYXU6Is6kIixVcHNpbG9uOiLOpSIsUGhpOiLOpiIsQ2hpOiLOpyIsUHNpOiLOqCIsT21lZ2E6Is6pIixhbHBoYToizrEiLGJldGE6Is6yIixnYW1tYToizrMiLGRlbHRhOiLOtCIsZXBzaWxvbjoizrUiLHpldGE6Is62IixldGE6Is63Iix0aGV0YToizrgiLGlvdGE6Is65IixrYXBwYToizroiLGxhbWJkYToizrsiLG11OiLOvCIsbnU6Is69Iix4aToizr4iLG9taWNyb246Is6/IixwaToiz4AiLHJobzoiz4EiLHNpZ21hZjoiz4IiLHNpZ21hOiLPgyIsdGF1OiLPhCIsdXBzaWxvbjoiz4UiLHBoaToiz4YiLGNoaToiz4ciLHBzaToiz4giLG9tZWdhOiLPiSIsdGhldGFzeW06Is+RIix1cHNpaDoiz5IiLHBpdjoiz5YiLGVuc3A6IuKAgiIsZW1zcDoi4oCDIix0aGluc3A6IuKAiSIsenduajoi4oCMIix6d2o6IuKAjSIsbHJtOiLigI4iLHJsbToi4oCPIixuZGFzaDoi4oCTIixtZGFzaDoi4oCUIixsc3F1bzoi4oCYIixyc3F1bzoi4oCZIixzYnF1bzoi4oCaIixsZHF1bzoi4oCcIixyZHF1bzoi4oCdIixiZHF1bzoi4oCeIixkYWdnZXI6IuKAoCIsRGFnZ2VyOiLigKEiLGJ1bGw6IuKAoiIsaGVsbGlwOiLigKYiLHBlcm1pbDoi4oCwIixwcmltZToi4oCyIixQcmltZToi4oCzIixsc2FxdW86IuKAuSIscnNhcXVvOiLigLoiLG9saW5lOiLigL4iLGZyYXNsOiLigYQiLGV1cm86IuKCrCIsaW1hZ2U6IuKEkSIsd2VpZXJwOiLihJgiLHJlYWw6IuKEnCIsdHJhZGU6IuKEoiIsYWxlZnN5bToi4oS1IixsYXJyOiLihpAiLHVhcnI6IuKGkSIscmFycjoi4oaSIixkYXJyOiLihpMiLGhhcnI6IuKGlCIsY3JhcnI6IuKGtSIsbEFycjoi4oeQIix1QXJyOiLih5EiLHJBcnI6IuKHkiIsZEFycjoi4oeTIixoQXJyOiLih5QiLGZvcmFsbDoi4oiAIixwYXJ0OiLiiIIiLGV4aXN0OiLiiIMiLGVtcHR5OiLiiIUiLG5hYmxhOiLiiIciLGlzaW46IuKIiCIsbm90aW46IuKIiSIsbmk6IuKIiyIscHJvZDoi4oiPIixzdW06IuKIkSIsbWludXM6IuKIkiIsbG93YXN0OiLiiJciLHJhZGljOiLiiJoiLHByb3A6IuKInSIsaW5maW46IuKIniIsYW5nOiLiiKAiLGFuZDoi4oinIixvcjoi4oioIixjYXA6IuKIqSIsY3VwOiLiiKoiLGludDoi4oirIix0aGVyZTQ6IuKItCIsc2ltOiLiiLwiLGNvbmc6IuKJhSIsYXN5bXA6IuKJiCIsbmU6IuKJoCIsZXF1aXY6IuKJoSIsbGU6IuKJpCIsZ2U6IuKJpSIsc3ViOiLiioIiLHN1cDoi4oqDIixuc3ViOiLiioQiLHN1YmU6IuKKhiIsc3VwZToi4oqHIixvcGx1czoi4oqVIixvdGltZXM6IuKKlyIscGVycDoi4oqlIixzZG90OiLii4UiLGxjZWlsOiLijIgiLHJjZWlsOiLijIkiLGxmbG9vcjoi4oyKIixyZmxvb3I6IuKMiyIsbGFuZzoi4oypIixyYW5nOiLijKoiLGxvejoi4peKIixzcGFkZXM6IuKZoCIsY2x1YnM6IuKZoyIsaGVhcnRzOiLimaUiLGRpYW1zOiLimaYifTtjb25zdCBjaD0vXltcZGEtZkEtRl0rJC87Y29uc3QgaGg9L15cZCskLztjb25zdCBwaD1mbCh7QXR0cmlidXRlSXNFbXB0eToiSlNYIGF0dHJpYnV0ZXMgbXVzdCBvbmx5IGJlIGFzc2lnbmVkIGEgbm9uLWVtcHR5IGV4cHJlc3Npb24uIixNaXNzaW5nQ2xvc2luZ1RhZ0VsZW1lbnQ6IkV4cGVjdGVkIGNvcnJlc3BvbmRpbmcgSlNYIGNsb3NpbmcgdGFnIGZvciA8JTA+LiIsTWlzc2luZ0Nsb3NpbmdUYWdGcmFnbWVudDoiRXhwZWN0ZWQgY29ycmVzcG9uZGluZyBKU1ggY2xvc2luZyB0YWcgZm9yIDw+LiIsVW5leHBlY3RlZFNlcXVlbmNlRXhwcmVzc2lvbjoiU2VxdWVuY2UgZXhwcmVzc2lvbnMgY2Fubm90IGJlIGRpcmVjdGx5IG5lc3RlZCBpbnNpZGUgSlNYLiBEaWQgeW91IG1lYW4gdG8gd3JhcCBpdCBpbiBwYXJlbnRoZXNlcyAoLi4uKT8iLFVuc3VwcG9ydGVkSnN4VmFsdWU6IkpTWCB2YWx1ZSBzaG91bGQgYmUgZWl0aGVyIGFuIGV4cHJlc3Npb24gb3IgYSBxdW90ZWQgSlNYIHRleHQuIixVbnRlcm1pbmF0ZWRKc3hDb250ZW50OiJVbnRlcm1pbmF0ZWQgSlNYIGNvbnRlbnRzLiIsVW53cmFwcGVkQWRqYWNlbnRKU1hFbGVtZW50czoiQWRqYWNlbnQgSlNYIGVsZW1lbnRzIG11c3QgYmUgd3JhcHBlZCBpbiBhbiBlbmNsb3NpbmcgdGFnLiBEaWQgeW91IHdhbnQgYSBKU1ggZnJhZ21lbnQgPD4uLi48Lz4/In0sdWwuU3ludGF4RXJyb3IsImpzeCIpO2dsLmpfb1RhZz1uZXcgeWwoIjx0YWciKTtnbC5qX2NUYWc9bmV3IHlsKCI8L3RhZyIpO2dsLmpfZXhwcj1uZXcgeWwoIjx0YWc+Li4uPC90YWc+Iix0cnVlKTtmdW5jdGlvbiBmaChlKXtyZXR1cm4gZT9lLnR5cGU9PT0iSlNYT3BlbmluZ0ZyYWdtZW50Inx8ZS50eXBlPT09IkpTWENsb3NpbmdGcmFnbWVudCI6ZmFsc2V9ZnVuY3Rpb24gZGgoZSl7aWYoZS50eXBlPT09IkpTWElkZW50aWZpZXIiKXtyZXR1cm4gZS5uYW1lfWlmKGUudHlwZT09PSJKU1hOYW1lc3BhY2VkTmFtZSIpe3JldHVybiBlLm5hbWVzcGFjZS5uYW1lKyI6IitlLm5hbWUubmFtZX1pZihlLnR5cGU9PT0iSlNYTWVtYmVyRXhwcmVzc2lvbiIpe3JldHVybiBkaChlLm9iamVjdCkrIi4iK2RoKGUucHJvcGVydHkpfXRocm93IG5ldyBFcnJvcigiTm9kZSBoYWQgdW5leHBlY3RlZCB0eXBlOiAiK2UudHlwZSl9dmFyIG1oPWU9PmNsYXNzIGV4dGVuZHMgZXtqc3hSZWFkVG9rZW4oKXtsZXQgZT0iIjtsZXQgdD10aGlzLnN0YXRlLnBvcztmb3IoOzspe2lmKHRoaXMuc3RhdGUucG9zPj10aGlzLmxlbmd0aCl7dGhyb3cgdGhpcy5yYWlzZSh0aGlzLnN0YXRlLnN0YXJ0LHBoLlVudGVybWluYXRlZEpzeENvbnRlbnQpfWNvbnN0IHI9dGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zKTtzd2l0Y2gocil7Y2FzZSA2MDpjYXNlIDEyMzppZih0aGlzLnN0YXRlLnBvcz09PXRoaXMuc3RhdGUuc3RhcnQpe2lmKHI9PT02MCYmdGhpcy5zdGF0ZS5jYW5TdGFydEpTWEVsZW1lbnQpeysrdGhpcy5zdGF0ZS5wb3M7cmV0dXJuIHRoaXMuZmluaXNoVG9rZW4oMTMyKX1yZXR1cm4gc3VwZXIuZ2V0VG9rZW5Gcm9tQ29kZShyKX1lKz10aGlzLmlucHV0LnNsaWNlKHQsdGhpcy5zdGF0ZS5wb3MpO3JldHVybiB0aGlzLmZpbmlzaFRva2VuKDEzMSxlKTtjYXNlIDM4OmUrPXRoaXMuaW5wdXQuc2xpY2UodCx0aGlzLnN0YXRlLnBvcyk7ZSs9dGhpcy5qc3hSZWFkRW50aXR5KCk7dD10aGlzLnN0YXRlLnBvczticmVhaztjYXNlIDYyOmNhc2UgMTI1OmRlZmF1bHQ6aWYoS28ocikpe2UrPXRoaXMuaW5wdXQuc2xpY2UodCx0aGlzLnN0YXRlLnBvcyk7ZSs9dGhpcy5qc3hSZWFkTmV3TGluZSh0cnVlKTt0PXRoaXMuc3RhdGUucG9zfWVsc2V7Kyt0aGlzLnN0YXRlLnBvc319fX1qc3hSZWFkTmV3TGluZShlKXtjb25zdCB0PXRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcyk7bGV0IHI7Kyt0aGlzLnN0YXRlLnBvcztpZih0PT09MTMmJnRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcyk9PT0xMCl7Kyt0aGlzLnN0YXRlLnBvcztyPWU/IlxuIjoiXHJcbiJ9ZWxzZXtyPVN0cmluZy5mcm9tQ2hhckNvZGUodCl9Kyt0aGlzLnN0YXRlLmN1ckxpbmU7dGhpcy5zdGF0ZS5saW5lU3RhcnQ9dGhpcy5zdGF0ZS5wb3M7cmV0dXJuIHJ9anN4UmVhZFN0cmluZyhlKXtsZXQgdD0iIjtsZXQgcj0rK3RoaXMuc3RhdGUucG9zO2Zvcig7Oyl7aWYodGhpcy5zdGF0ZS5wb3M+PXRoaXMubGVuZ3RoKXt0aHJvdyB0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsY2wuVW50ZXJtaW5hdGVkU3RyaW5nKX1jb25zdCBzPXRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnN0YXRlLnBvcyk7aWYocz09PWUpYnJlYWs7aWYocz09PTM4KXt0Kz10aGlzLmlucHV0LnNsaWNlKHIsdGhpcy5zdGF0ZS5wb3MpO3QrPXRoaXMuanN4UmVhZEVudGl0eSgpO3I9dGhpcy5zdGF0ZS5wb3N9ZWxzZSBpZihLbyhzKSl7dCs9dGhpcy5pbnB1dC5zbGljZShyLHRoaXMuc3RhdGUucG9zKTt0Kz10aGlzLmpzeFJlYWROZXdMaW5lKGZhbHNlKTtyPXRoaXMuc3RhdGUucG9zfWVsc2V7Kyt0aGlzLnN0YXRlLnBvc319dCs9dGhpcy5pbnB1dC5zbGljZShyLHRoaXMuc3RhdGUucG9zKyspO3JldHVybiB0aGlzLmZpbmlzaFRva2VuKDEyMyx0KX1qc3hSZWFkRW50aXR5KCl7bGV0IGU9IiI7bGV0IHQ9MDtsZXQgcjtsZXQgcz10aGlzLmlucHV0W3RoaXMuc3RhdGUucG9zXTtjb25zdCBpPSsrdGhpcy5zdGF0ZS5wb3M7d2hpbGUodGhpcy5zdGF0ZS5wb3M8dGhpcy5sZW5ndGgmJnQrKzwxMCl7cz10aGlzLmlucHV0W3RoaXMuc3RhdGUucG9zKytdO2lmKHM9PT0iOyIpe2lmKGVbMF09PT0iIyIpe2lmKGVbMV09PT0ieCIpe2U9ZS5zdWJzdHIoMik7aWYoY2gudGVzdChlKSl7cj1TdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludChlLDE2KSl9fWVsc2V7ZT1lLnN1YnN0cigxKTtpZihoaC50ZXN0KGUpKXtyPVN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KGUsMTApKX19fWVsc2V7cj11aFtlXX1icmVha31lKz1zfWlmKCFyKXt0aGlzLnN0YXRlLnBvcz1pO3JldHVybiImIn1yZXR1cm4gcn1qc3hSZWFkV29yZCgpe2xldCBlO2NvbnN0IHQ9dGhpcy5zdGF0ZS5wb3M7ZG97ZT10aGlzLmlucHV0LmNoYXJDb2RlQXQoKyt0aGlzLnN0YXRlLnBvcyl9d2hpbGUocHUoZSl8fGU9PT00NSk7cmV0dXJuIHRoaXMuZmluaXNoVG9rZW4oMTMwLHRoaXMuaW5wdXQuc2xpY2UodCx0aGlzLnN0YXRlLnBvcykpfWpzeFBhcnNlSWRlbnRpZmllcigpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTtpZih0aGlzLm1hdGNoKDEzMCkpe2UubmFtZT10aGlzLnN0YXRlLnZhbHVlfWVsc2UgaWYoSGwodGhpcy5zdGF0ZS50eXBlKSl7ZS5uYW1lPVpsKHRoaXMuc3RhdGUudHlwZSl9ZWxzZXt0aGlzLnVuZXhwZWN0ZWQoKX10aGlzLm5leHQoKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIkpTWElkZW50aWZpZXIiKX1qc3hQYXJzZU5hbWVzcGFjZWROYW1lKCl7Y29uc3QgZT10aGlzLnN0YXRlLnN0YXJ0O2NvbnN0IHQ9dGhpcy5zdGF0ZS5zdGFydExvYztjb25zdCByPXRoaXMuanN4UGFyc2VJZGVudGlmaWVyKCk7aWYoIXRoaXMuZWF0KDE0KSlyZXR1cm4gcjtjb25zdCBzPXRoaXMuc3RhcnROb2RlQXQoZSx0KTtzLm5hbWVzcGFjZT1yO3MubmFtZT10aGlzLmpzeFBhcnNlSWRlbnRpZmllcigpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUocywiSlNYTmFtZXNwYWNlZE5hbWUiKX1qc3hQYXJzZUVsZW1lbnROYW1lKCl7Y29uc3QgZT10aGlzLnN0YXRlLnN0YXJ0O2NvbnN0IHQ9dGhpcy5zdGF0ZS5zdGFydExvYztsZXQgcj10aGlzLmpzeFBhcnNlTmFtZXNwYWNlZE5hbWUoKTtpZihyLnR5cGU9PT0iSlNYTmFtZXNwYWNlZE5hbWUiKXtyZXR1cm4gcn13aGlsZSh0aGlzLmVhdCgxNikpe2NvbnN0IHM9dGhpcy5zdGFydE5vZGVBdChlLHQpO3Mub2JqZWN0PXI7cy5wcm9wZXJ0eT10aGlzLmpzeFBhcnNlSWRlbnRpZmllcigpO3I9dGhpcy5maW5pc2hOb2RlKHMsIkpTWE1lbWJlckV4cHJlc3Npb24iKX1yZXR1cm4gcn1qc3hQYXJzZUF0dHJpYnV0ZVZhbHVlKCl7bGV0IGU7c3dpdGNoKHRoaXMuc3RhdGUudHlwZSl7Y2FzZSA1OmU9dGhpcy5zdGFydE5vZGUoKTt0aGlzLm5leHQoKTtlPXRoaXMuanN4UGFyc2VFeHByZXNzaW9uQ29udGFpbmVyKGUpO2lmKGUuZXhwcmVzc2lvbi50eXBlPT09IkpTWEVtcHR5RXhwcmVzc2lvbiIpe3RoaXMucmFpc2UoZS5zdGFydCxwaC5BdHRyaWJ1dGVJc0VtcHR5KX1yZXR1cm4gZTtjYXNlIDEzMjpjYXNlIDEyMzpyZXR1cm4gdGhpcy5wYXJzZUV4cHJBdG9tKCk7ZGVmYXVsdDp0aHJvdyB0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQscGguVW5zdXBwb3J0ZWRKc3hWYWx1ZSl9fWpzeFBhcnNlRW1wdHlFeHByZXNzaW9uKCl7Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZUF0KHRoaXMuc3RhdGUubGFzdFRva0VuZCx0aGlzLnN0YXRlLmxhc3RUb2tFbmRMb2MpO3JldHVybiB0aGlzLmZpbmlzaE5vZGVBdChlLCJKU1hFbXB0eUV4cHJlc3Npb24iLHRoaXMuc3RhdGUuc3RhcnQsdGhpcy5zdGF0ZS5zdGFydExvYyl9anN4UGFyc2VTcHJlYWRDaGlsZChlKXt0aGlzLm5leHQoKTtlLmV4cHJlc3Npb249dGhpcy5wYXJzZUV4cHJlc3Npb24oKTt0aGlzLmV4cGVjdCg4KTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIkpTWFNwcmVhZENoaWxkIil9anN4UGFyc2VFeHByZXNzaW9uQ29udGFpbmVyKGUpe2lmKHRoaXMubWF0Y2goOCkpe2UuZXhwcmVzc2lvbj10aGlzLmpzeFBhcnNlRW1wdHlFeHByZXNzaW9uKCl9ZWxzZXtjb25zdCB0PXRoaXMucGFyc2VFeHByZXNzaW9uKCk7ZS5leHByZXNzaW9uPXR9dGhpcy5leHBlY3QoOCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJKU1hFeHByZXNzaW9uQ29udGFpbmVyIil9anN4UGFyc2VBdHRyaWJ1dGUoKXtjb25zdCBlPXRoaXMuc3RhcnROb2RlKCk7aWYodGhpcy5lYXQoNSkpe3RoaXMuZXhwZWN0KDIxKTtlLmFyZ3VtZW50PXRoaXMucGFyc2VNYXliZUFzc2lnbkFsbG93SW4oKTt0aGlzLmV4cGVjdCg4KTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIkpTWFNwcmVhZEF0dHJpYnV0ZSIpfWUubmFtZT10aGlzLmpzeFBhcnNlTmFtZXNwYWNlZE5hbWUoKTtlLnZhbHVlPXRoaXMuZWF0KDI3KT90aGlzLmpzeFBhcnNlQXR0cmlidXRlVmFsdWUoKTpudWxsO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiSlNYQXR0cmlidXRlIil9anN4UGFyc2VPcGVuaW5nRWxlbWVudEF0KGUsdCl7Y29uc3Qgcj10aGlzLnN0YXJ0Tm9kZUF0KGUsdCk7aWYodGhpcy5tYXRjaCgxMzMpKXt0aGlzLmV4cGVjdCgxMzMpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUociwiSlNYT3BlbmluZ0ZyYWdtZW50Iil9ci5uYW1lPXRoaXMuanN4UGFyc2VFbGVtZW50TmFtZSgpO3JldHVybiB0aGlzLmpzeFBhcnNlT3BlbmluZ0VsZW1lbnRBZnRlck5hbWUocil9anN4UGFyc2VPcGVuaW5nRWxlbWVudEFmdGVyTmFtZShlKXtjb25zdCB0PVtdO3doaWxlKCF0aGlzLm1hdGNoKDUwKSYmIXRoaXMubWF0Y2goMTMzKSl7dC5wdXNoKHRoaXMuanN4UGFyc2VBdHRyaWJ1dGUoKSl9ZS5hdHRyaWJ1dGVzPXQ7ZS5zZWxmQ2xvc2luZz10aGlzLmVhdCg1MCk7dGhpcy5leHBlY3QoMTMzKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIkpTWE9wZW5pbmdFbGVtZW50Iil9anN4UGFyc2VDbG9zaW5nRWxlbWVudEF0KGUsdCl7Y29uc3Qgcj10aGlzLnN0YXJ0Tm9kZUF0KGUsdCk7aWYodGhpcy5tYXRjaCgxMzMpKXt0aGlzLmV4cGVjdCgxMzMpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUociwiSlNYQ2xvc2luZ0ZyYWdtZW50Iil9ci5uYW1lPXRoaXMuanN4UGFyc2VFbGVtZW50TmFtZSgpO3RoaXMuZXhwZWN0KDEzMyk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShyLCJKU1hDbG9zaW5nRWxlbWVudCIpfWpzeFBhcnNlRWxlbWVudEF0KGUsdCl7Y29uc3Qgcj10aGlzLnN0YXJ0Tm9kZUF0KGUsdCk7Y29uc3Qgcz1bXTtjb25zdCBpPXRoaXMuanN4UGFyc2VPcGVuaW5nRWxlbWVudEF0KGUsdCk7bGV0IG49bnVsbDtpZighaS5zZWxmQ2xvc2luZyl7ZTpmb3IoOzspe3N3aXRjaCh0aGlzLnN0YXRlLnR5cGUpe2Nhc2UgMTMyOmU9dGhpcy5zdGF0ZS5zdGFydDt0PXRoaXMuc3RhdGUuc3RhcnRMb2M7dGhpcy5uZXh0KCk7aWYodGhpcy5lYXQoNTApKXtuPXRoaXMuanN4UGFyc2VDbG9zaW5nRWxlbWVudEF0KGUsdCk7YnJlYWsgZX1zLnB1c2godGhpcy5qc3hQYXJzZUVsZW1lbnRBdChlLHQpKTticmVhaztjYXNlIDEzMTpzLnB1c2godGhpcy5wYXJzZUV4cHJBdG9tKCkpO2JyZWFrO2Nhc2UgNTp7Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO3RoaXMubmV4dCgpO2lmKHRoaXMubWF0Y2goMjEpKXtzLnB1c2godGhpcy5qc3hQYXJzZVNwcmVhZENoaWxkKGUpKX1lbHNle3MucHVzaCh0aGlzLmpzeFBhcnNlRXhwcmVzc2lvbkNvbnRhaW5lcihlKSl9YnJlYWt9ZGVmYXVsdDp0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKX19aWYoZmgoaSkmJiFmaChuKSl7dGhpcy5yYWlzZShuLnN0YXJ0LHBoLk1pc3NpbmdDbG9zaW5nVGFnRnJhZ21lbnQpfWVsc2UgaWYoIWZoKGkpJiZmaChuKSl7dGhpcy5yYWlzZShuLnN0YXJ0LHBoLk1pc3NpbmdDbG9zaW5nVGFnRWxlbWVudCxkaChpLm5hbWUpKX1lbHNlIGlmKCFmaChpKSYmIWZoKG4pKXtpZihkaChuLm5hbWUpIT09ZGgoaS5uYW1lKSl7dGhpcy5yYWlzZShuLnN0YXJ0LHBoLk1pc3NpbmdDbG9zaW5nVGFnRWxlbWVudCxkaChpLm5hbWUpKX19fWlmKGZoKGkpKXtyLm9wZW5pbmdGcmFnbWVudD1pO3IuY2xvc2luZ0ZyYWdtZW50PW59ZWxzZXtyLm9wZW5pbmdFbGVtZW50PWk7ci5jbG9zaW5nRWxlbWVudD1ufXIuY2hpbGRyZW49cztpZih0aGlzLm1hdGNoKDQzKSl7dGhyb3cgdGhpcy5yYWlzZSh0aGlzLnN0YXRlLnN0YXJ0LHBoLlVud3JhcHBlZEFkamFjZW50SlNYRWxlbWVudHMpfXJldHVybiBmaChpKT90aGlzLmZpbmlzaE5vZGUociwiSlNYRnJhZ21lbnQiKTp0aGlzLmZpbmlzaE5vZGUociwiSlNYRWxlbWVudCIpfWpzeFBhcnNlRWxlbWVudCgpe2NvbnN0IGU9dGhpcy5zdGF0ZS5zdGFydDtjb25zdCB0PXRoaXMuc3RhdGUuc3RhcnRMb2M7dGhpcy5uZXh0KCk7cmV0dXJuIHRoaXMuanN4UGFyc2VFbGVtZW50QXQoZSx0KX1wYXJzZUV4cHJBdG9tKGUpe2lmKHRoaXMubWF0Y2goMTMxKSl7cmV0dXJuIHRoaXMucGFyc2VMaXRlcmFsKHRoaXMuc3RhdGUudmFsdWUsIkpTWFRleHQiKX1lbHNlIGlmKHRoaXMubWF0Y2goMTMyKSl7cmV0dXJuIHRoaXMuanN4UGFyc2VFbGVtZW50KCl9ZWxzZSBpZih0aGlzLm1hdGNoKDQzKSYmdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zKSE9PTMzKXt0aGlzLnJlcGxhY2VUb2tlbigxMzIpO3JldHVybiB0aGlzLmpzeFBhcnNlRWxlbWVudCgpfWVsc2V7cmV0dXJuIHN1cGVyLnBhcnNlRXhwckF0b20oZSl9fWdldFRva2VuRnJvbUNvZGUoZSl7Y29uc3QgdD10aGlzLmN1ckNvbnRleHQoKTtpZih0PT09Z2wual9leHByKXtyZXR1cm4gdGhpcy5qc3hSZWFkVG9rZW4oKX1pZih0PT09Z2wual9vVGFnfHx0PT09Z2wual9jVGFnKXtpZihodShlKSl7cmV0dXJuIHRoaXMuanN4UmVhZFdvcmQoKX1pZihlPT09NjIpeysrdGhpcy5zdGF0ZS5wb3M7cmV0dXJuIHRoaXMuZmluaXNoVG9rZW4oMTMzKX1pZigoZT09PTM0fHxlPT09MzkpJiZ0PT09Z2wual9vVGFnKXtyZXR1cm4gdGhpcy5qc3hSZWFkU3RyaW5nKGUpfX1pZihlPT09NjAmJnRoaXMuc3RhdGUuY2FuU3RhcnRKU1hFbGVtZW50JiZ0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5zdGF0ZS5wb3MrMSkhPT0zMyl7Kyt0aGlzLnN0YXRlLnBvcztyZXR1cm4gdGhpcy5maW5pc2hUb2tlbigxMzIpfXJldHVybiBzdXBlci5nZXRUb2tlbkZyb21Db2RlKGUpfXVwZGF0ZUNvbnRleHQoZSl7c3VwZXIudXBkYXRlQ29udGV4dChlKTtjb25zdHtjb250ZXh0OnQsdHlwZTpyfT10aGlzLnN0YXRlO2lmKHI9PT01MCYmZT09PTEzMil7dC5zcGxpY2UoLTIsMixnbC5qX2NUYWcpO3RoaXMuc3RhdGUuY2FuU3RhcnRKU1hFbGVtZW50PWZhbHNlfWVsc2UgaWYocj09PTEzMil7dC5wdXNoKGdsLmpfZXhwcixnbC5qX29UYWcpfWVsc2UgaWYocj09PTEzMyl7Y29uc3Qgcj10LnBvcCgpO2lmKHI9PT1nbC5qX29UYWcmJmU9PT01MHx8cj09PWdsLmpfY1RhZyl7dC5wb3AoKTt0aGlzLnN0YXRlLmNhblN0YXJ0SlNYRWxlbWVudD10W3QubGVuZ3RoLTFdPT09Z2wual9leHByfWVsc2V7dGhpcy5zdGF0ZS5jYW5TdGFydEpTWEVsZW1lbnQ9dHJ1ZX19ZWxzZXt0aGlzLnN0YXRlLmNhblN0YXJ0SlNYRWxlbWVudD1WbChyKX19fTtjbGFzcyB5aCBleHRlbmRzIG1je2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTt0aGlzLnR5cGVzPW5ldyBTZXQ7dGhpcy5lbnVtcz1uZXcgU2V0O3RoaXMuY29uc3RFbnVtcz1uZXcgU2V0O3RoaXMuY2xhc3Nlcz1uZXcgU2V0O3RoaXMuZXhwb3J0T25seUJpbmRpbmdzPW5ldyBTZXR9fWNsYXNzIGdoIGV4dGVuZHMgeWN7Y3JlYXRlU2NvcGUoZSl7cmV0dXJuIG5ldyB5aChlKX1kZWNsYXJlTmFtZShlLHQscil7Y29uc3Qgcz10aGlzLmN1cnJlbnRTY29wZSgpO2lmKHQmWHUpe3RoaXMubWF5YmVFeHBvcnREZWZpbmVkKHMsZSk7cy5leHBvcnRPbmx5QmluZGluZ3MuYWRkKGUpO3JldHVybn1zdXBlci5kZWNsYXJlTmFtZSguLi5hcmd1bWVudHMpO2lmKHQmQnUpe2lmKCEodCZMdSkpe3RoaXMuY2hlY2tSZWRlY2xhcmF0aW9uSW5TY29wZShzLGUsdCxyKTt0aGlzLm1heWJlRXhwb3J0RGVmaW5lZChzLGUpfXMudHlwZXMuYWRkKGUpfWlmKHQmcXUpcy5lbnVtcy5hZGQoZSk7aWYodCZHdSlzLmNvbnN0RW51bXMuYWRkKGUpO2lmKHQmVnUpcy5jbGFzc2VzLmFkZChlKX1pc1JlZGVjbGFyZWRJblNjb3BlKGUsdCxyKXtpZihlLmVudW1zLmhhcyh0KSl7aWYociZxdSl7Y29uc3Qgcz0hIShyJkd1KTtjb25zdCBpPWUuY29uc3RFbnVtcy5oYXModCk7cmV0dXJuIHMhPT1pfXJldHVybiB0cnVlfWlmKHImVnUmJmUuY2xhc3Nlcy5oYXModCkpe2lmKGUubGV4aWNhbC5oYXModCkpe3JldHVybiEhKHImTHUpfWVsc2V7cmV0dXJuIGZhbHNlfX1pZihyJkJ1JiZlLnR5cGVzLmhhcyh0KSl7cmV0dXJuIHRydWV9cmV0dXJuIHN1cGVyLmlzUmVkZWNsYXJlZEluU2NvcGUoLi4uYXJndW1lbnRzKX1jaGVja0xvY2FsRXhwb3J0KGUpe2NvbnN0IHQ9dGhpcy5zY29wZVN0YWNrWzBdO2NvbnN0e25hbWU6cn09ZTtpZighdC50eXBlcy5oYXMocikmJiF0LmV4cG9ydE9ubHlCaW5kaW5ncy5oYXMocikpe3N1cGVyLmNoZWNrTG9jYWxFeHBvcnQoZSl9fX1mdW5jdGlvbiB4aChlKXtpZihlPT1udWxsKXt0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgJHtlfSB2YWx1ZS5gKX1yZXR1cm4gZX1mdW5jdGlvbiB2aChlKXtpZighZSl7dGhyb3cgbmV3IEVycm9yKCJBc3NlcnQgZmFpbCIpfX1jb25zdCBiaD1mbCh7QWJzdHJhY3RNZXRob2RIYXNJbXBsZW1lbnRhdGlvbjoiTWV0aG9kICclMCcgY2Fubm90IGhhdmUgYW4gaW1wbGVtZW50YXRpb24gYmVjYXVzZSBpdCBpcyBtYXJrZWQgYWJzdHJhY3QuIixBYnN0cmFjdFByb3BlcnR5SGFzSW5pdGlhbGl6ZXI6IlByb3BlcnR5ICclMCcgY2Fubm90IGhhdmUgYW4gaW5pdGlhbGl6ZXIgYmVjYXVzZSBpdCBpcyBtYXJrZWQgYWJzdHJhY3QuIixBY2Nlc29yQ2Fubm90RGVjbGFyZVRoaXNQYXJhbWV0ZXI6IidnZXQnIGFuZCAnc2V0JyBhY2Nlc3NvcnMgY2Fubm90IGRlY2xhcmUgJ3RoaXMnIHBhcmFtZXRlcnMuIixBY2Nlc29yQ2Fubm90SGF2ZVR5cGVQYXJhbWV0ZXJzOiJBbiBhY2Nlc3NvciBjYW5ub3QgaGF2ZSB0eXBlIHBhcmFtZXRlcnMuIixDbGFzc01ldGhvZEhhc0RlY2xhcmU6IkNsYXNzIG1ldGhvZHMgY2Fubm90IGhhdmUgdGhlICdkZWNsYXJlJyBtb2RpZmllci4iLENsYXNzTWV0aG9kSGFzUmVhZG9ubHk6IkNsYXNzIG1ldGhvZHMgY2Fubm90IGhhdmUgdGhlICdyZWFkb25seScgbW9kaWZpZXIuIixDb25zdHJ1Y3Rvckhhc1R5cGVQYXJhbWV0ZXJzOiJUeXBlIHBhcmFtZXRlcnMgY2Fubm90IGFwcGVhciBvbiBhIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uLiIsRGVjbGFyZUFjY2Vzc29yOiInZGVjbGFyZScgaXMgbm90IGFsbG93ZWQgaW4gJTB0ZXJzLiIsRGVjbGFyZUNsYXNzRmllbGRIYXNJbml0aWFsaXplcjoiSW5pdGlhbGl6ZXJzIGFyZSBub3QgYWxsb3dlZCBpbiBhbWJpZW50IGNvbnRleHRzLiIsRGVjbGFyZUZ1bmN0aW9uSGFzSW1wbGVtZW50YXRpb246IkFuIGltcGxlbWVudGF0aW9uIGNhbm5vdCBiZSBkZWNsYXJlZCBpbiBhbWJpZW50IGNvbnRleHRzLiIsRHVwbGljYXRlQWNjZXNzaWJpbGl0eU1vZGlmaWVyOiJBY2Nlc3NpYmlsaXR5IG1vZGlmaWVyIGFscmVhZHkgc2Vlbi4iLER1cGxpY2F0ZU1vZGlmaWVyOiJEdXBsaWNhdGUgbW9kaWZpZXI6ICclMCcuIixFbXB0eUhlcml0YWdlQ2xhdXNlVHlwZToiJyUwJyBsaXN0IGNhbm5vdCBiZSBlbXB0eS4iLEVtcHR5VHlwZUFyZ3VtZW50czoiVHlwZSBhcmd1bWVudCBsaXN0IGNhbm5vdCBiZSBlbXB0eS4iLEVtcHR5VHlwZVBhcmFtZXRlcnM6IlR5cGUgcGFyYW1ldGVyIGxpc3QgY2Fubm90IGJlIGVtcHR5LiIsRXhwZWN0ZWRBbWJpZW50QWZ0ZXJFeHBvcnREZWNsYXJlOiInZXhwb3J0IGRlY2xhcmUnIG11c3QgYmUgZm9sbG93ZWQgYnkgYW4gYW1iaWVudCBkZWNsYXJhdGlvbi4iLEltcG9ydEFsaWFzSGFzSW1wb3J0VHlwZToiQW4gaW1wb3J0IGFsaWFzIGNhbiBub3QgdXNlICdpbXBvcnQgdHlwZScuIixJbmNvbXBhdGlibGVNb2RpZmllcnM6IiclMCcgbW9kaWZpZXIgY2Fubm90IGJlIHVzZWQgd2l0aCAnJTEnIG1vZGlmaWVyLiIsSW5kZXhTaWduYXR1cmVIYXNBYnN0cmFjdDoiSW5kZXggc2lnbmF0dXJlcyBjYW5ub3QgaGF2ZSB0aGUgJ2Fic3RyYWN0JyBtb2RpZmllci4iLEluZGV4U2lnbmF0dXJlSGFzQWNjZXNzaWJpbGl0eToiSW5kZXggc2lnbmF0dXJlcyBjYW5ub3QgaGF2ZSBhbiBhY2Nlc3NpYmlsaXR5IG1vZGlmaWVyICgnJTAnKS4iLEluZGV4U2lnbmF0dXJlSGFzRGVjbGFyZToiSW5kZXggc2lnbmF0dXJlcyBjYW5ub3QgaGF2ZSB0aGUgJ2RlY2xhcmUnIG1vZGlmaWVyLiIsSW5kZXhTaWduYXR1cmVIYXNPdmVycmlkZToiJ292ZXJyaWRlJyBtb2RpZmllciBjYW5ub3QgYXBwZWFyIG9uIGFuIGluZGV4IHNpZ25hdHVyZS4iLEluZGV4U2lnbmF0dXJlSGFzU3RhdGljOiJJbmRleCBzaWduYXR1cmVzIGNhbm5vdCBoYXZlIHRoZSAnc3RhdGljJyBtb2RpZmllci4iLEludmFsaWRNb2RpZmllck9uVHlwZU1lbWJlcjoiJyUwJyBtb2RpZmllciBjYW5ub3QgYXBwZWFyIG9uIGEgdHlwZSBtZW1iZXIuIixJbnZhbGlkTW9kaWZpZXJzT3JkZXI6IiclMCcgbW9kaWZpZXIgbXVzdCBwcmVjZWRlICclMScgbW9kaWZpZXIuIixJbnZhbGlkVHVwbGVNZW1iZXJMYWJlbDoiVHVwbGUgbWVtYmVycyBtdXN0IGJlIGxhYmVsZWQgd2l0aCBhIHNpbXBsZSBpZGVudGlmaWVyLiIsTWlzc2luZ0ludGVyZmFjZU5hbWU6IidpbnRlcmZhY2UnIGRlY2xhcmF0aW9ucyBtdXN0IGJlIGZvbGxvd2VkIGJ5IGFuIGlkZW50aWZpZXIuIixNaXhlZExhYmVsZWRBbmRVbmxhYmVsZWRFbGVtZW50czoiVHVwbGUgbWVtYmVycyBtdXN0IGFsbCBoYXZlIG5hbWVzIG9yIGFsbCBub3QgaGF2ZSBuYW1lcy4iLE5vbkFic3RyYWN0Q2xhc3NIYXNBYnN0cmFjdE1ldGhvZDoiQWJzdHJhY3QgbWV0aG9kcyBjYW4gb25seSBhcHBlYXIgd2l0aGluIGFuIGFic3RyYWN0IGNsYXNzLiIsTm9uQ2xhc3NNZXRob2RQcm9wZXJ0eUhhc0Fic3RyYWN0TW9kaWZlcjoiJ2Fic3RyYWN0JyBtb2RpZmllciBjYW4gb25seSBhcHBlYXIgb24gYSBjbGFzcywgbWV0aG9kLCBvciBwcm9wZXJ0eSBkZWNsYXJhdGlvbi4iLE9wdGlvbmFsVHlwZUJlZm9yZVJlcXVpcmVkOiJBIHJlcXVpcmVkIGVsZW1lbnQgY2Fubm90IGZvbGxvdyBhbiBvcHRpb25hbCBlbGVtZW50LiIsT3ZlcnJpZGVOb3RJblN1YkNsYXNzOiJUaGlzIG1lbWJlciBjYW5ub3QgaGF2ZSBhbiAnb3ZlcnJpZGUnIG1vZGlmaWVyIGJlY2F1c2UgaXRzIGNvbnRhaW5pbmcgY2xhc3MgZG9lcyBub3QgZXh0ZW5kIGFub3RoZXIgY2xhc3MuIixQYXR0ZXJuSXNPcHRpb25hbDoiQSBiaW5kaW5nIHBhdHRlcm4gcGFyYW1ldGVyIGNhbm5vdCBiZSBvcHRpb25hbCBpbiBhbiBpbXBsZW1lbnRhdGlvbiBzaWduYXR1cmUuIixQcml2YXRlRWxlbWVudEhhc0Fic3RyYWN0OiJQcml2YXRlIGVsZW1lbnRzIGNhbm5vdCBoYXZlIHRoZSAnYWJzdHJhY3QnIG1vZGlmaWVyLiIsUHJpdmF0ZUVsZW1lbnRIYXNBY2Nlc3NpYmlsaXR5OiJQcml2YXRlIGVsZW1lbnRzIGNhbm5vdCBoYXZlIGFuIGFjY2Vzc2liaWxpdHkgbW9kaWZpZXIgKCclMCcpLiIsUmVhZG9ubHlGb3JNZXRob2RTaWduYXR1cmU6IidyZWFkb25seScgbW9kaWZpZXIgY2FuIG9ubHkgYXBwZWFyIG9uIGEgcHJvcGVydHkgZGVjbGFyYXRpb24gb3IgaW5kZXggc2lnbmF0dXJlLiIsUmVzZXJ2ZWRBcnJvd1R5cGVQYXJhbToiVGhpcyBzeW50YXggaXMgcmVzZXJ2ZWQgaW4gZmlsZXMgd2l0aCB0aGUgLm10cyBvciAuY3RzIGV4dGVuc2lvbi4gQWRkIGEgdHJhaWxpbmcgY29tbWEsIGFzIGluIGA8VCw+KCkgPT4gLi4uYC4iLFJlc2VydmVkVHlwZUFzc2VydGlvbjoiVGhpcyBzeW50YXggaXMgcmVzZXJ2ZWQgaW4gZmlsZXMgd2l0aCB0aGUgLm10cyBvciAuY3RzIGV4dGVuc2lvbi4gVXNlIGFuIGBhc2AgZXhwcmVzc2lvbiBpbnN0ZWFkLiIsU2V0QWNjZXNvckNhbm5vdEhhdmVPcHRpb25hbFBhcmFtZXRlcjoiQSAnc2V0JyBhY2Nlc3NvciBjYW5ub3QgaGF2ZSBhbiBvcHRpb25hbCBwYXJhbWV0ZXIuIixTZXRBY2Nlc29yQ2Fubm90SGF2ZVJlc3RQYXJhbWV0ZXI6IkEgJ3NldCcgYWNjZXNzb3IgY2Fubm90IGhhdmUgcmVzdCBwYXJhbWV0ZXIuIixTZXRBY2Nlc29yQ2Fubm90SGF2ZVJldHVyblR5cGU6IkEgJ3NldCcgYWNjZXNzb3IgY2Fubm90IGhhdmUgYSByZXR1cm4gdHlwZSBhbm5vdGF0aW9uLiIsU3RhdGljQmxvY2tDYW5ub3RIYXZlTW9kaWZpZXI6IlN0YXRpYyBjbGFzcyBibG9ja3MgY2Fubm90IGhhdmUgYW55IG1vZGlmaWVyLiIsVHlwZUFubm90YXRpb25BZnRlckFzc2lnbjoiVHlwZSBhbm5vdGF0aW9ucyBtdXN0IGNvbWUgYmVmb3JlIGRlZmF1bHQgYXNzaWdubWVudHMsIGUuZy4gaW5zdGVhZCBvZiBgYWdlID0gMjU6IG51bWJlcmAgdXNlIGBhZ2U6IG51bWJlciA9IDI1YC4iLFR5cGVJbXBvcnRDYW5ub3RTcGVjaWZ5RGVmYXVsdEFuZE5hbWVkOiJBIHR5cGUtb25seSBpbXBvcnQgY2FuIHNwZWNpZnkgYSBkZWZhdWx0IGltcG9ydCBvciBuYW1lZCBiaW5kaW5ncywgYnV0IG5vdCBib3RoLiIsVHlwZU1vZGlmaWVySXNVc2VkSW5UeXBlRXhwb3J0czoiVGhlICd0eXBlJyBtb2RpZmllciBjYW5ub3QgYmUgdXNlZCBvbiBhIG5hbWVkIGV4cG9ydCB3aGVuICdleHBvcnQgdHlwZScgaXMgdXNlZCBvbiBpdHMgZXhwb3J0IHN0YXRlbWVudC4iLFR5cGVNb2RpZmllcklzVXNlZEluVHlwZUltcG9ydHM6IlRoZSAndHlwZScgbW9kaWZpZXIgY2Fubm90IGJlIHVzZWQgb24gYSBuYW1lZCBpbXBvcnQgd2hlbiAnaW1wb3J0IHR5cGUnIGlzIHVzZWQgb24gaXRzIGltcG9ydCBzdGF0ZW1lbnQuIixVbmV4cGVjdGVkUGFyYW1ldGVyTW9kaWZpZXI6IkEgcGFyYW1ldGVyIHByb3BlcnR5IGlzIG9ubHkgYWxsb3dlZCBpbiBhIGNvbnN0cnVjdG9yIGltcGxlbWVudGF0aW9uLiIsVW5leHBlY3RlZFJlYWRvbmx5OiIncmVhZG9ubHknIHR5cGUgbW9kaWZpZXIgaXMgb25seSBwZXJtaXR0ZWQgb24gYXJyYXkgYW5kIHR1cGxlIGxpdGVyYWwgdHlwZXMuIixVbmV4cGVjdGVkVHlwZUFubm90YXRpb246IkRpZCBub3QgZXhwZWN0IGEgdHlwZSBhbm5vdGF0aW9uIGhlcmUuIixVbmV4cGVjdGVkVHlwZUNhc3RJblBhcmFtZXRlcjoiVW5leHBlY3RlZCB0eXBlIGNhc3QgaW4gcGFyYW1ldGVyIHBvc2l0aW9uLiIsVW5zdXBwb3J0ZWRJbXBvcnRUeXBlQXJndW1lbnQ6IkFyZ3VtZW50IGluIGEgdHlwZSBpbXBvcnQgbXVzdCBiZSBhIHN0cmluZyBsaXRlcmFsLiIsVW5zdXBwb3J0ZWRQYXJhbWV0ZXJQcm9wZXJ0eUtpbmQ6IkEgcGFyYW1ldGVyIHByb3BlcnR5IG1heSBub3QgYmUgZGVjbGFyZWQgdXNpbmcgYSBiaW5kaW5nIHBhdHRlcm4uIixVbnN1cHBvcnRlZFNpZ25hdHVyZVBhcmFtZXRlcktpbmQ6Ik5hbWUgaW4gYSBzaWduYXR1cmUgbXVzdCBiZSBhbiBJZGVudGlmaWVyLCBPYmplY3RQYXR0ZXJuIG9yIEFycmF5UGF0dGVybiwgaW5zdGVhZCBnb3QgJTAuIn0sdWwuU3ludGF4RXJyb3IsInR5cGVzY3JpcHQiKTtmdW5jdGlvbiBFaChlKXtzd2l0Y2goZSl7Y2FzZSJhbnkiOnJldHVybiJUU0FueUtleXdvcmQiO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIlRTQm9vbGVhbktleXdvcmQiO2Nhc2UiYmlnaW50IjpyZXR1cm4iVFNCaWdJbnRLZXl3b3JkIjtjYXNlIm5ldmVyIjpyZXR1cm4iVFNOZXZlcktleXdvcmQiO2Nhc2UibnVtYmVyIjpyZXR1cm4iVFNOdW1iZXJLZXl3b3JkIjtjYXNlIm9iamVjdCI6cmV0dXJuIlRTT2JqZWN0S2V5d29yZCI7Y2FzZSJzdHJpbmciOnJldHVybiJUU1N0cmluZ0tleXdvcmQiO2Nhc2Uic3ltYm9sIjpyZXR1cm4iVFNTeW1ib2xLZXl3b3JkIjtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIlRTVW5kZWZpbmVkS2V5d29yZCI7Y2FzZSJ1bmtub3duIjpyZXR1cm4iVFNVbmtub3duS2V5d29yZCI7ZGVmYXVsdDpyZXR1cm4gdW5kZWZpbmVkfX1mdW5jdGlvbiBTaChlKXtyZXR1cm4gZT09PSJwcml2YXRlInx8ZT09PSJwdWJsaWMifHxlPT09InByb3RlY3RlZCJ9dmFyIFRoPWU9PmNsYXNzIGV4dGVuZHMgZXtnZXRTY29wZUhhbmRsZXIoKXtyZXR1cm4gZ2h9dHNJc0lkZW50aWZpZXIoKXtyZXR1cm4gUmwodGhpcy5zdGF0ZS50eXBlKX10c1Rva2VuQ2FuRm9sbG93TW9kaWZpZXIoKXtyZXR1cm4odGhpcy5tYXRjaCgwKXx8dGhpcy5tYXRjaCg1KXx8dGhpcy5tYXRjaCg0OSl8fHRoaXMubWF0Y2goMjEpfHx0aGlzLm1hdGNoKDEyOCl8fHRoaXMuaXNMaXRlcmFsUHJvcGVydHlOYW1lKCkpJiYhdGhpcy5oYXNQcmVjZWRpbmdMaW5lQnJlYWsoKX10c05leHRUb2tlbkNhbkZvbGxvd01vZGlmaWVyKCl7dGhpcy5uZXh0KCk7cmV0dXJuIHRoaXMudHNUb2tlbkNhbkZvbGxvd01vZGlmaWVyKCl9dHNQYXJzZU1vZGlmaWVyKGUsdCl7aWYoIVJsKHRoaXMuc3RhdGUudHlwZSkpe3JldHVybiB1bmRlZmluZWR9Y29uc3Qgcj10aGlzLnN0YXRlLnZhbHVlO2lmKGUuaW5kZXhPZihyKSE9PS0xKXtpZih0JiZ0aGlzLnRzSXNTdGFydE9mU3RhdGljQmxvY2tzKCkpe3JldHVybiB1bmRlZmluZWR9aWYodGhpcy50c1RyeVBhcnNlKHRoaXMudHNOZXh0VG9rZW5DYW5Gb2xsb3dNb2RpZmllci5iaW5kKHRoaXMpKSl7cmV0dXJuIHJ9fXJldHVybiB1bmRlZmluZWR9dHNQYXJzZU1vZGlmaWVycyhlLHQscixzLGkpe2NvbnN0IG49KHQscixzLGkpPT57aWYocj09PXMmJmVbaV0pe3RoaXMucmFpc2UodCxiaC5JbnZhbGlkTW9kaWZpZXJzT3JkZXIscyxpKX19O2NvbnN0IGE9KHQscixzLGkpPT57aWYoZVtzXSYmcj09PWl8fGVbaV0mJnI9PT1zKXt0aGlzLnJhaXNlKHQsYmguSW5jb21wYXRpYmxlTW9kaWZpZXJzLHMsaSl9fTtmb3IoOzspe2NvbnN0IG89dGhpcy5zdGF0ZS5zdGFydDtjb25zdCBsPXRoaXMudHNQYXJzZU1vZGlmaWVyKHQuY29uY2F0KHIhPW51bGw/cjpbXSksaSk7aWYoIWwpYnJlYWs7aWYoU2gobCkpe2lmKGUuYWNjZXNzaWJpbGl0eSl7dGhpcy5yYWlzZShvLGJoLkR1cGxpY2F0ZUFjY2Vzc2liaWxpdHlNb2RpZmllcil9ZWxzZXtuKG8sbCxsLCJvdmVycmlkZSIpO24obyxsLGwsInN0YXRpYyIpO24obyxsLGwsInJlYWRvbmx5Iik7ZS5hY2Nlc3NpYmlsaXR5PWx9fWVsc2V7aWYoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoZSxsKSl7dGhpcy5yYWlzZShvLGJoLkR1cGxpY2F0ZU1vZGlmaWVyLGwpfWVsc2V7bihvLGwsInN0YXRpYyIsInJlYWRvbmx5Iik7bihvLGwsInN0YXRpYyIsIm92ZXJyaWRlIik7bihvLGwsIm92ZXJyaWRlIiwicmVhZG9ubHkiKTtuKG8sbCwiYWJzdHJhY3QiLCJvdmVycmlkZSIpO2EobyxsLCJkZWNsYXJlIiwib3ZlcnJpZGUiKTthKG8sbCwic3RhdGljIiwiYWJzdHJhY3QiKX1lW2xdPXRydWV9aWYociE9bnVsbCYmci5pbmNsdWRlcyhsKSl7dGhpcy5yYWlzZShvLHMsbCl9fX10c0lzTGlzdFRlcm1pbmF0b3IoZSl7c3dpdGNoKGUpe2Nhc2UiRW51bU1lbWJlcnMiOmNhc2UiVHlwZU1lbWJlcnMiOnJldHVybiB0aGlzLm1hdGNoKDgpO2Nhc2UiSGVyaXRhZ2VDbGF1c2VFbGVtZW50IjpyZXR1cm4gdGhpcy5tYXRjaCg1KTtjYXNlIlR1cGxlRWxlbWVudFR5cGVzIjpyZXR1cm4gdGhpcy5tYXRjaCgzKTtjYXNlIlR5cGVQYXJhbWV0ZXJzT3JBcmd1bWVudHMiOnJldHVybiB0aGlzLm1hdGNoKDQ0KX10aHJvdyBuZXcgRXJyb3IoIlVucmVhY2hhYmxlIil9dHNQYXJzZUxpc3QoZSx0KXtjb25zdCByPVtdO3doaWxlKCF0aGlzLnRzSXNMaXN0VGVybWluYXRvcihlKSl7ci5wdXNoKHQoKSl9cmV0dXJuIHJ9dHNQYXJzZURlbGltaXRlZExpc3QoZSx0LHIpe3JldHVybiB4aCh0aGlzLnRzUGFyc2VEZWxpbWl0ZWRMaXN0V29ya2VyKGUsdCx0cnVlLHIpKX10c1BhcnNlRGVsaW1pdGVkTGlzdFdvcmtlcihlLHQscixzKXtjb25zdCBpPVtdO2xldCBuPS0xO2Zvcig7Oyl7aWYodGhpcy50c0lzTGlzdFRlcm1pbmF0b3IoZSkpe2JyZWFrfW49LTE7Y29uc3Qgcz10KCk7aWYocz09bnVsbCl7cmV0dXJuIHVuZGVmaW5lZH1pLnB1c2gocyk7aWYodGhpcy5lYXQoMTIpKXtuPXRoaXMuc3RhdGUubGFzdFRva1N0YXJ0O2NvbnRpbnVlfWlmKHRoaXMudHNJc0xpc3RUZXJtaW5hdG9yKGUpKXticmVha31pZihyKXt0aGlzLmV4cGVjdCgxMil9cmV0dXJuIHVuZGVmaW5lZH1pZihzKXtzLnZhbHVlPW59cmV0dXJuIGl9dHNQYXJzZUJyYWNrZXRlZExpc3QoZSx0LHIscyxpKXtpZighcyl7aWYocil7dGhpcy5leHBlY3QoMCl9ZWxzZXt0aGlzLmV4cGVjdCg0Myl9fWNvbnN0IG49dGhpcy50c1BhcnNlRGVsaW1pdGVkTGlzdChlLHQsaSk7aWYocil7dGhpcy5leHBlY3QoMyl9ZWxzZXt0aGlzLmV4cGVjdCg0NCl9cmV0dXJuIG59dHNQYXJzZUltcG9ydFR5cGUoKXtjb25zdCBlPXRoaXMuc3RhcnROb2RlKCk7dGhpcy5leHBlY3QoNzcpO3RoaXMuZXhwZWN0KDEwKTtpZighdGhpcy5tYXRjaCgxMjMpKXt0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsYmguVW5zdXBwb3J0ZWRJbXBvcnRUeXBlQXJndW1lbnQpfWUuYXJndW1lbnQ9dGhpcy5wYXJzZUV4cHJBdG9tKCk7dGhpcy5leHBlY3QoMTEpO2lmKHRoaXMuZWF0KDE2KSl7ZS5xdWFsaWZpZXI9dGhpcy50c1BhcnNlRW50aXR5TmFtZSh0cnVlKX1pZih0aGlzLm1hdGNoKDQzKSl7ZS50eXBlUGFyYW1ldGVycz10aGlzLnRzUGFyc2VUeXBlQXJndW1lbnRzKCl9cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJUU0ltcG9ydFR5cGUiKX10c1BhcnNlRW50aXR5TmFtZShlKXtsZXQgdD10aGlzLnBhcnNlSWRlbnRpZmllcigpO3doaWxlKHRoaXMuZWF0KDE2KSl7Y29uc3Qgcj10aGlzLnN0YXJ0Tm9kZUF0Tm9kZSh0KTtyLmxlZnQ9dDtyLnJpZ2h0PXRoaXMucGFyc2VJZGVudGlmaWVyKGUpO3Q9dGhpcy5maW5pc2hOb2RlKHIsIlRTUXVhbGlmaWVkTmFtZSIpfXJldHVybiB0fXRzUGFyc2VUeXBlUmVmZXJlbmNlKCl7Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO2UudHlwZU5hbWU9dGhpcy50c1BhcnNlRW50aXR5TmFtZShmYWxzZSk7aWYoIXRoaXMuaGFzUHJlY2VkaW5nTGluZUJyZWFrKCkmJnRoaXMubWF0Y2goNDMpKXtlLnR5cGVQYXJhbWV0ZXJzPXRoaXMudHNQYXJzZVR5cGVBcmd1bWVudHMoKX1yZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIlRTVHlwZVJlZmVyZW5jZSIpfXRzUGFyc2VUaGlzVHlwZVByZWRpY2F0ZShlKXt0aGlzLm5leHQoKTtjb25zdCB0PXRoaXMuc3RhcnROb2RlQXROb2RlKGUpO3QucGFyYW1ldGVyTmFtZT1lO3QudHlwZUFubm90YXRpb249dGhpcy50c1BhcnNlVHlwZUFubm90YXRpb24oZmFsc2UpO3QuYXNzZXJ0cz1mYWxzZTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKHQsIlRTVHlwZVByZWRpY2F0ZSIpfXRzUGFyc2VUaGlzVHlwZU5vZGUoKXtjb25zdCBlPXRoaXMuc3RhcnROb2RlKCk7dGhpcy5uZXh0KCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJUU1RoaXNUeXBlIil9dHNQYXJzZVR5cGVRdWVyeSgpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTt0aGlzLmV4cGVjdCg4MSk7aWYodGhpcy5tYXRjaCg3Nykpe2UuZXhwck5hbWU9dGhpcy50c1BhcnNlSW1wb3J0VHlwZSgpfWVsc2V7ZS5leHByTmFtZT10aGlzLnRzUGFyc2VFbnRpdHlOYW1lKHRydWUpfXJldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiVFNUeXBlUXVlcnkiKX10c1BhcnNlVHlwZVBhcmFtZXRlcigpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTtlLm5hbWU9dGhpcy50c1BhcnNlVHlwZVBhcmFtZXRlck5hbWUoKTtlLmNvbnN0cmFpbnQ9dGhpcy50c0VhdFRoZW5QYXJzZVR5cGUoNzUpO2UuZGVmYXVsdD10aGlzLnRzRWF0VGhlblBhcnNlVHlwZSgyNyk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJUU1R5cGVQYXJhbWV0ZXIiKX10c1RyeVBhcnNlVHlwZVBhcmFtZXRlcnMoKXtpZih0aGlzLm1hdGNoKDQzKSl7cmV0dXJuIHRoaXMudHNQYXJzZVR5cGVQYXJhbWV0ZXJzKCl9fXRzUGFyc2VUeXBlUGFyYW1ldGVycygpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTtpZih0aGlzLm1hdGNoKDQzKXx8dGhpcy5tYXRjaCgxMzIpKXt0aGlzLm5leHQoKX1lbHNle3RoaXMudW5leHBlY3RlZCgpfWNvbnN0IHQ9e3ZhbHVlOi0xfTtlLnBhcmFtcz10aGlzLnRzUGFyc2VCcmFja2V0ZWRMaXN0KCJUeXBlUGFyYW1ldGVyc09yQXJndW1lbnRzIix0aGlzLnRzUGFyc2VUeXBlUGFyYW1ldGVyLmJpbmQodGhpcyksZmFsc2UsdHJ1ZSx0KTtpZihlLnBhcmFtcy5sZW5ndGg9PT0wKXt0aGlzLnJhaXNlKGUuc3RhcnQsYmguRW1wdHlUeXBlUGFyYW1ldGVycyl9aWYodC52YWx1ZSE9PS0xKXt0aGlzLmFkZEV4dHJhKGUsInRyYWlsaW5nQ29tbWEiLHQudmFsdWUpfXJldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiVFNUeXBlUGFyYW1ldGVyRGVjbGFyYXRpb24iKX10c1RyeU5leHRQYXJzZUNvbnN0YW50Q29udGV4dCgpe2lmKHRoaXMubG9va2FoZWFkKCkudHlwZT09PTY5KXt0aGlzLm5leHQoKTtyZXR1cm4gdGhpcy50c1BhcnNlVHlwZVJlZmVyZW5jZSgpfXJldHVybiBudWxsfXRzRmlsbFNpZ25hdHVyZShlLHQpe2NvbnN0IHI9ZT09PTE5O3QudHlwZVBhcmFtZXRlcnM9dGhpcy50c1RyeVBhcnNlVHlwZVBhcmFtZXRlcnMoKTt0aGlzLmV4cGVjdCgxMCk7dC5wYXJhbWV0ZXJzPXRoaXMudHNQYXJzZUJpbmRpbmdMaXN0Rm9yU2lnbmF0dXJlKCk7aWYocil7dC50eXBlQW5ub3RhdGlvbj10aGlzLnRzUGFyc2VUeXBlT3JUeXBlUHJlZGljYXRlQW5ub3RhdGlvbihlKX1lbHNlIGlmKHRoaXMubWF0Y2goZSkpe3QudHlwZUFubm90YXRpb249dGhpcy50c1BhcnNlVHlwZU9yVHlwZVByZWRpY2F0ZUFubm90YXRpb24oZSl9fXRzUGFyc2VCaW5kaW5nTGlzdEZvclNpZ25hdHVyZSgpe3JldHVybiB0aGlzLnBhcnNlQmluZGluZ0xpc3QoMTEsNDEpLm1hcCgoZT0+e2lmKGUudHlwZSE9PSJJZGVudGlmaWVyIiYmZS50eXBlIT09IlJlc3RFbGVtZW50IiYmZS50eXBlIT09Ik9iamVjdFBhdHRlcm4iJiZlLnR5cGUhPT0iQXJyYXlQYXR0ZXJuIil7dGhpcy5yYWlzZShlLnN0YXJ0LGJoLlVuc3VwcG9ydGVkU2lnbmF0dXJlUGFyYW1ldGVyS2luZCxlLnR5cGUpfXJldHVybiBlfSkpfXRzUGFyc2VUeXBlTWVtYmVyU2VtaWNvbG9uKCl7aWYoIXRoaXMuZWF0KDEyKSYmIXRoaXMuaXNMaW5lVGVybWluYXRvcigpKXt0aGlzLmV4cGVjdCgxMyl9fXRzUGFyc2VTaWduYXR1cmVNZW1iZXIoZSx0KXt0aGlzLnRzRmlsbFNpZ25hdHVyZSgxNCx0KTt0aGlzLnRzUGFyc2VUeXBlTWVtYmVyU2VtaWNvbG9uKCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZSh0LGUpfXRzSXNVbmFtYmlndW91c2x5SW5kZXhTaWduYXR1cmUoKXt0aGlzLm5leHQoKTtpZihSbCh0aGlzLnN0YXRlLnR5cGUpKXt0aGlzLm5leHQoKTtyZXR1cm4gdGhpcy5tYXRjaCgxNCl9cmV0dXJuIGZhbHNlfXRzVHJ5UGFyc2VJbmRleFNpZ25hdHVyZShlKXtpZighKHRoaXMubWF0Y2goMCkmJnRoaXMudHNMb29rQWhlYWQodGhpcy50c0lzVW5hbWJpZ3VvdXNseUluZGV4U2lnbmF0dXJlLmJpbmQodGhpcykpKSl7cmV0dXJuIHVuZGVmaW5lZH10aGlzLmV4cGVjdCgwKTtjb25zdCB0PXRoaXMucGFyc2VJZGVudGlmaWVyKCk7dC50eXBlQW5ub3RhdGlvbj10aGlzLnRzUGFyc2VUeXBlQW5ub3RhdGlvbigpO3RoaXMucmVzZXRFbmRMb2NhdGlvbih0KTt0aGlzLmV4cGVjdCgzKTtlLnBhcmFtZXRlcnM9W3RdO2NvbnN0IHI9dGhpcy50c1RyeVBhcnNlVHlwZUFubm90YXRpb24oKTtpZihyKWUudHlwZUFubm90YXRpb249cjt0aGlzLnRzUGFyc2VUeXBlTWVtYmVyU2VtaWNvbG9uKCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJUU0luZGV4U2lnbmF0dXJlIil9dHNQYXJzZVByb3BlcnR5T3JNZXRob2RTaWduYXR1cmUoZSx0KXtpZih0aGlzLmVhdCgxNykpZS5vcHRpb25hbD10cnVlO2NvbnN0IHI9ZTtpZih0aGlzLm1hdGNoKDEwKXx8dGhpcy5tYXRjaCg0Mykpe2lmKHQpe3RoaXMucmFpc2UoZS5zdGFydCxiaC5SZWFkb25seUZvck1ldGhvZFNpZ25hdHVyZSl9Y29uc3Qgcz1yO2lmKHMua2luZCYmdGhpcy5tYXRjaCg0Mykpe3RoaXMucmFpc2UodGhpcy5zdGF0ZS5wb3MsYmguQWNjZXNvckNhbm5vdEhhdmVUeXBlUGFyYW1ldGVycyl9dGhpcy50c0ZpbGxTaWduYXR1cmUoMTQscyk7dGhpcy50c1BhcnNlVHlwZU1lbWJlclNlbWljb2xvbigpO2lmKHMua2luZD09PSJnZXQiKXtpZihzLnBhcmFtZXRlcnMubGVuZ3RoPjApe3RoaXMucmFpc2UodGhpcy5zdGF0ZS5wb3MsY2wuQmFkR2V0dGVyQXJpdHkpO2lmKHRoaXMuaXNUaGlzUGFyYW0ocy5wYXJhbWV0ZXJzWzBdKSl7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLnBvcyxiaC5BY2Nlc29yQ2Fubm90RGVjbGFyZVRoaXNQYXJhbWV0ZXIpfX19ZWxzZSBpZihzLmtpbmQ9PT0ic2V0Iil7aWYocy5wYXJhbWV0ZXJzLmxlbmd0aCE9PTEpe3RoaXMucmFpc2UodGhpcy5zdGF0ZS5wb3MsY2wuQmFkU2V0dGVyQXJpdHkpfWVsc2V7Y29uc3QgZT1zLnBhcmFtZXRlcnNbMF07aWYodGhpcy5pc1RoaXNQYXJhbShlKSl7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLnBvcyxiaC5BY2Nlc29yQ2Fubm90RGVjbGFyZVRoaXNQYXJhbWV0ZXIpfWlmKGUudHlwZT09PSJJZGVudGlmaWVyIiYmZS5vcHRpb25hbCl7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLnBvcyxiaC5TZXRBY2Nlc29yQ2Fubm90SGF2ZU9wdGlvbmFsUGFyYW1ldGVyKX1pZihlLnR5cGU9PT0iUmVzdEVsZW1lbnQiKXt0aGlzLnJhaXNlKHRoaXMuc3RhdGUucG9zLGJoLlNldEFjY2Vzb3JDYW5ub3RIYXZlUmVzdFBhcmFtZXRlcil9fWlmKHMudHlwZUFubm90YXRpb24pe3RoaXMucmFpc2Uocy50eXBlQW5ub3RhdGlvbi5zdGFydCxiaC5TZXRBY2Nlc29yQ2Fubm90SGF2ZVJldHVyblR5cGUpfX1lbHNle3Mua2luZD0ibWV0aG9kIn1yZXR1cm4gdGhpcy5maW5pc2hOb2RlKHMsIlRTTWV0aG9kU2lnbmF0dXJlIil9ZWxzZXtjb25zdCBlPXI7aWYodCllLnJlYWRvbmx5PXRydWU7Y29uc3Qgcz10aGlzLnRzVHJ5UGFyc2VUeXBlQW5ub3RhdGlvbigpO2lmKHMpZS50eXBlQW5ub3RhdGlvbj1zO3RoaXMudHNQYXJzZVR5cGVNZW1iZXJTZW1pY29sb24oKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIlRTUHJvcGVydHlTaWduYXR1cmUiKX19dHNQYXJzZVR5cGVNZW1iZXIoKXtjb25zdCBlPXRoaXMuc3RhcnROb2RlKCk7aWYodGhpcy5tYXRjaCgxMCl8fHRoaXMubWF0Y2goNDMpKXtyZXR1cm4gdGhpcy50c1BhcnNlU2lnbmF0dXJlTWVtYmVyKCJUU0NhbGxTaWduYXR1cmVEZWNsYXJhdGlvbiIsZSl9aWYodGhpcy5tYXRjaCg3MSkpe2NvbnN0IHQ9dGhpcy5zdGFydE5vZGUoKTt0aGlzLm5leHQoKTtpZih0aGlzLm1hdGNoKDEwKXx8dGhpcy5tYXRjaCg0Mykpe3JldHVybiB0aGlzLnRzUGFyc2VTaWduYXR1cmVNZW1iZXIoIlRTQ29uc3RydWN0U2lnbmF0dXJlRGVjbGFyYXRpb24iLGUpfWVsc2V7ZS5rZXk9dGhpcy5jcmVhdGVJZGVudGlmaWVyKHQsIm5ldyIpO3JldHVybiB0aGlzLnRzUGFyc2VQcm9wZXJ0eU9yTWV0aG9kU2lnbmF0dXJlKGUsZmFsc2UpfX10aGlzLnRzUGFyc2VNb2RpZmllcnMoZSxbInJlYWRvbmx5Il0sWyJkZWNsYXJlIiwiYWJzdHJhY3QiLCJwcml2YXRlIiwicHJvdGVjdGVkIiwicHVibGljIiwic3RhdGljIiwib3ZlcnJpZGUiXSxiaC5JbnZhbGlkTW9kaWZpZXJPblR5cGVNZW1iZXIpO2NvbnN0IHQ9dGhpcy50c1RyeVBhcnNlSW5kZXhTaWduYXR1cmUoZSk7aWYodCl7cmV0dXJuIHR9dGhpcy5wYXJzZVByb3BlcnR5TmFtZShlKTtpZighZS5jb21wdXRlZCYmZS5rZXkudHlwZT09PSJJZGVudGlmaWVyIiYmKGUua2V5Lm5hbWU9PT0iZ2V0Inx8ZS5rZXkubmFtZT09PSJzZXQiKSYmdGhpcy50c1Rva2VuQ2FuRm9sbG93TW9kaWZpZXIoKSl7ZS5raW5kPWUua2V5Lm5hbWU7dGhpcy5wYXJzZVByb3BlcnR5TmFtZShlKX1yZXR1cm4gdGhpcy50c1BhcnNlUHJvcGVydHlPck1ldGhvZFNpZ25hdHVyZShlLCEhZS5yZWFkb25seSl9dHNQYXJzZVR5cGVMaXRlcmFsKCl7Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO2UubWVtYmVycz10aGlzLnRzUGFyc2VPYmplY3RUeXBlTWVtYmVycygpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiVFNUeXBlTGl0ZXJhbCIpfXRzUGFyc2VPYmplY3RUeXBlTWVtYmVycygpe3RoaXMuZXhwZWN0KDUpO2NvbnN0IGU9dGhpcy50c1BhcnNlTGlzdCgiVHlwZU1lbWJlcnMiLHRoaXMudHNQYXJzZVR5cGVNZW1iZXIuYmluZCh0aGlzKSk7dGhpcy5leHBlY3QoOCk7cmV0dXJuIGV9dHNJc1N0YXJ0T2ZNYXBwZWRUeXBlKCl7dGhpcy5uZXh0KCk7aWYodGhpcy5lYXQoNDcpKXtyZXR1cm4gdGhpcy5pc0NvbnRleHR1YWwoMTEyKX1pZih0aGlzLmlzQ29udGV4dHVhbCgxMTIpKXt0aGlzLm5leHQoKX1pZighdGhpcy5tYXRjaCgwKSl7cmV0dXJuIGZhbHNlfXRoaXMubmV4dCgpO2lmKCF0aGlzLnRzSXNJZGVudGlmaWVyKCkpe3JldHVybiBmYWxzZX10aGlzLm5leHQoKTtyZXR1cm4gdGhpcy5tYXRjaCg1Mil9dHNQYXJzZU1hcHBlZFR5cGVQYXJhbWV0ZXIoKXtjb25zdCBlPXRoaXMuc3RhcnROb2RlKCk7ZS5uYW1lPXRoaXMudHNQYXJzZVR5cGVQYXJhbWV0ZXJOYW1lKCk7ZS5jb25zdHJhaW50PXRoaXMudHNFeHBlY3RUaGVuUGFyc2VUeXBlKDUyKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIlRTVHlwZVBhcmFtZXRlciIpfXRzUGFyc2VNYXBwZWRUeXBlKCl7Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO3RoaXMuZXhwZWN0KDUpO2lmKHRoaXMubWF0Y2goNDcpKXtlLnJlYWRvbmx5PXRoaXMuc3RhdGUudmFsdWU7dGhpcy5uZXh0KCk7dGhpcy5leHBlY3RDb250ZXh0dWFsKDExMil9ZWxzZSBpZih0aGlzLmVhdENvbnRleHR1YWwoMTEyKSl7ZS5yZWFkb25seT10cnVlfXRoaXMuZXhwZWN0KDApO2UudHlwZVBhcmFtZXRlcj10aGlzLnRzUGFyc2VNYXBwZWRUeXBlUGFyYW1ldGVyKCk7ZS5uYW1lVHlwZT10aGlzLmVhdENvbnRleHR1YWwoODcpP3RoaXMudHNQYXJzZVR5cGUoKTpudWxsO3RoaXMuZXhwZWN0KDMpO2lmKHRoaXMubWF0Y2goNDcpKXtlLm9wdGlvbmFsPXRoaXMuc3RhdGUudmFsdWU7dGhpcy5uZXh0KCk7dGhpcy5leHBlY3QoMTcpfWVsc2UgaWYodGhpcy5lYXQoMTcpKXtlLm9wdGlvbmFsPXRydWV9ZS50eXBlQW5ub3RhdGlvbj10aGlzLnRzVHJ5UGFyc2VUeXBlKCk7dGhpcy5zZW1pY29sb24oKTt0aGlzLmV4cGVjdCg4KTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIlRTTWFwcGVkVHlwZSIpfXRzUGFyc2VUdXBsZVR5cGUoKXtjb25zdCBlPXRoaXMuc3RhcnROb2RlKCk7ZS5lbGVtZW50VHlwZXM9dGhpcy50c1BhcnNlQnJhY2tldGVkTGlzdCgiVHVwbGVFbGVtZW50VHlwZXMiLHRoaXMudHNQYXJzZVR1cGxlRWxlbWVudFR5cGUuYmluZCh0aGlzKSx0cnVlLGZhbHNlKTtsZXQgdD1mYWxzZTtsZXQgcj1udWxsO2UuZWxlbWVudFR5cGVzLmZvckVhY2goKGU9Pnt2YXIgcztsZXR7dHlwZTppfT1lO2lmKHQmJmkhPT0iVFNSZXN0VHlwZSImJmkhPT0iVFNPcHRpb25hbFR5cGUiJiYhKGk9PT0iVFNOYW1lZFR1cGxlTWVtYmVyIiYmZS5vcHRpb25hbCkpe3RoaXMucmFpc2UoZS5zdGFydCxiaC5PcHRpb25hbFR5cGVCZWZvcmVSZXF1aXJlZCl9dD10fHxpPT09IlRTTmFtZWRUdXBsZU1lbWJlciImJmUub3B0aW9uYWx8fGk9PT0iVFNPcHRpb25hbFR5cGUiO2lmKGk9PT0iVFNSZXN0VHlwZSIpe2U9ZS50eXBlQW5ub3RhdGlvbjtpPWUudHlwZX1jb25zdCBuPWk9PT0iVFNOYW1lZFR1cGxlTWVtYmVyIjtyPShzPXIpIT1udWxsP3M6bjtpZihyIT09bil7dGhpcy5yYWlzZShlLnN0YXJ0LGJoLk1peGVkTGFiZWxlZEFuZFVubGFiZWxlZEVsZW1lbnRzKX19KSk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJUU1R1cGxlVHlwZSIpfXRzUGFyc2VUdXBsZUVsZW1lbnRUeXBlKCl7Y29uc3R7c3RhcnQ6ZSxzdGFydExvYzp0fT10aGlzLnN0YXRlO2NvbnN0IHI9dGhpcy5lYXQoMjEpO2xldCBzPXRoaXMudHNQYXJzZVR5cGUoKTtjb25zdCBpPXRoaXMuZWF0KDE3KTtjb25zdCBuPXRoaXMuZWF0KDE0KTtpZihuKXtjb25zdCBlPXRoaXMuc3RhcnROb2RlQXROb2RlKHMpO2Uub3B0aW9uYWw9aTtpZihzLnR5cGU9PT0iVFNUeXBlUmVmZXJlbmNlIiYmIXMudHlwZVBhcmFtZXRlcnMmJnMudHlwZU5hbWUudHlwZT09PSJJZGVudGlmaWVyIil7ZS5sYWJlbD1zLnR5cGVOYW1lfWVsc2V7dGhpcy5yYWlzZShzLnN0YXJ0LGJoLkludmFsaWRUdXBsZU1lbWJlckxhYmVsKTtlLmxhYmVsPXN9ZS5lbGVtZW50VHlwZT10aGlzLnRzUGFyc2VUeXBlKCk7cz10aGlzLmZpbmlzaE5vZGUoZSwiVFNOYW1lZFR1cGxlTWVtYmVyIil9ZWxzZSBpZihpKXtjb25zdCBlPXRoaXMuc3RhcnROb2RlQXROb2RlKHMpO2UudHlwZUFubm90YXRpb249cztzPXRoaXMuZmluaXNoTm9kZShlLCJUU09wdGlvbmFsVHlwZSIpfWlmKHIpe2NvbnN0IHI9dGhpcy5zdGFydE5vZGVBdChlLHQpO3IudHlwZUFubm90YXRpb249cztzPXRoaXMuZmluaXNoTm9kZShyLCJUU1Jlc3RUeXBlIil9cmV0dXJuIHN9dHNQYXJzZVBhcmVudGhlc2l6ZWRUeXBlKCl7Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO3RoaXMuZXhwZWN0KDEwKTtlLnR5cGVBbm5vdGF0aW9uPXRoaXMudHNQYXJzZVR5cGUoKTt0aGlzLmV4cGVjdCgxMSk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJUU1BhcmVudGhlc2l6ZWRUeXBlIil9dHNQYXJzZUZ1bmN0aW9uT3JDb25zdHJ1Y3RvclR5cGUoZSx0KXtjb25zdCByPXRoaXMuc3RhcnROb2RlKCk7aWYoZT09PSJUU0NvbnN0cnVjdG9yVHlwZSIpe3IuYWJzdHJhY3Q9ISF0O2lmKHQpdGhpcy5uZXh0KCk7dGhpcy5uZXh0KCl9dGhpcy50c0ZpbGxTaWduYXR1cmUoMTkscik7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShyLGUpfXRzUGFyc2VMaXRlcmFsVHlwZU5vZGUoKXtjb25zdCBlPXRoaXMuc3RhcnROb2RlKCk7ZS5saXRlcmFsPSgoKT0+e3N3aXRjaCh0aGlzLnN0YXRlLnR5cGUpe2Nhc2UgMTI0OmNhc2UgMTI1OmNhc2UgMTIzOmNhc2UgNzk6Y2FzZSA4MDpyZXR1cm4gdGhpcy5wYXJzZUV4cHJBdG9tKCk7ZGVmYXVsdDp0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKX19KSgpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiVFNMaXRlcmFsVHlwZSIpfXRzUGFyc2VUZW1wbGF0ZUxpdGVyYWxUeXBlKCl7Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO2UubGl0ZXJhbD10aGlzLnBhcnNlVGVtcGxhdGUoZmFsc2UpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiVFNMaXRlcmFsVHlwZSIpfXBhcnNlVGVtcGxhdGVTdWJzdGl0dXRpb24oKXtpZih0aGlzLnN0YXRlLmluVHlwZSlyZXR1cm4gdGhpcy50c1BhcnNlVHlwZSgpO3JldHVybiBzdXBlci5wYXJzZVRlbXBsYXRlU3Vic3RpdHV0aW9uKCl9dHNQYXJzZVRoaXNUeXBlT3JUaGlzVHlwZVByZWRpY2F0ZSgpe2NvbnN0IGU9dGhpcy50c1BhcnNlVGhpc1R5cGVOb2RlKCk7aWYodGhpcy5pc0NvbnRleHR1YWwoMTA3KSYmIXRoaXMuaGFzUHJlY2VkaW5nTGluZUJyZWFrKCkpe3JldHVybiB0aGlzLnRzUGFyc2VUaGlzVHlwZVByZWRpY2F0ZShlKX1lbHNle3JldHVybiBlfX10c1BhcnNlTm9uQXJyYXlUeXBlKCl7c3dpdGNoKHRoaXMuc3RhdGUudHlwZSl7Y2FzZSAxMjM6Y2FzZSAxMjQ6Y2FzZSAxMjU6Y2FzZSA3OTpjYXNlIDgwOnJldHVybiB0aGlzLnRzUGFyc2VMaXRlcmFsVHlwZU5vZGUoKTtjYXNlIDQ3OmlmKHRoaXMuc3RhdGUudmFsdWU9PT0iLSIpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTtjb25zdCB0PXRoaXMubG9va2FoZWFkKCk7aWYodC50eXBlIT09MTI0JiZ0LnR5cGUhPT0xMjUpe3Rocm93IHRoaXMudW5leHBlY3RlZCgpfWUubGl0ZXJhbD10aGlzLnBhcnNlTWF5YmVVbmFyeSgpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiVFNMaXRlcmFsVHlwZSIpfWJyZWFrO2Nhc2UgNzI6cmV0dXJuIHRoaXMudHNQYXJzZVRoaXNUeXBlT3JUaGlzVHlwZVByZWRpY2F0ZSgpO2Nhc2UgODE6cmV0dXJuIHRoaXMudHNQYXJzZVR5cGVRdWVyeSgpO2Nhc2UgNzc6cmV0dXJuIHRoaXMudHNQYXJzZUltcG9ydFR5cGUoKTtjYXNlIDU6cmV0dXJuIHRoaXMudHNMb29rQWhlYWQodGhpcy50c0lzU3RhcnRPZk1hcHBlZFR5cGUuYmluZCh0aGlzKSk/dGhpcy50c1BhcnNlTWFwcGVkVHlwZSgpOnRoaXMudHNQYXJzZVR5cGVMaXRlcmFsKCk7Y2FzZSAwOnJldHVybiB0aGlzLnRzUGFyc2VUdXBsZVR5cGUoKTtjYXNlIDEwOnJldHVybiB0aGlzLnRzUGFyc2VQYXJlbnRoZXNpemVkVHlwZSgpO2Nhc2UgMjI6cmV0dXJuIHRoaXMudHNQYXJzZVRlbXBsYXRlTGl0ZXJhbFR5cGUoKTtkZWZhdWx0Ontjb25zdHt0eXBlOmV9PXRoaXMuc3RhdGU7aWYoUmwoZSl8fGU9PT04Mnx8ZT09PTc4KXtjb25zdCB0PWU9PT04Mj8iVFNWb2lkS2V5d29yZCI6ZT09PTc4PyJUU051bGxLZXl3b3JkIjpFaCh0aGlzLnN0YXRlLnZhbHVlKTtpZih0IT09dW5kZWZpbmVkJiZ0aGlzLmxvb2thaGVhZENoYXJDb2RlKCkhPT00Nil7Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO3RoaXMubmV4dCgpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSx0KX1yZXR1cm4gdGhpcy50c1BhcnNlVHlwZVJlZmVyZW5jZSgpfX19dGhyb3cgdGhpcy51bmV4cGVjdGVkKCl9dHNQYXJzZUFycmF5VHlwZU9ySGlnaGVyKCl7bGV0IGU9dGhpcy50c1BhcnNlTm9uQXJyYXlUeXBlKCk7d2hpbGUoIXRoaXMuaGFzUHJlY2VkaW5nTGluZUJyZWFrKCkmJnRoaXMuZWF0KDApKXtpZih0aGlzLm1hdGNoKDMpKXtjb25zdCB0PXRoaXMuc3RhcnROb2RlQXROb2RlKGUpO3QuZWxlbWVudFR5cGU9ZTt0aGlzLmV4cGVjdCgzKTtlPXRoaXMuZmluaXNoTm9kZSh0LCJUU0FycmF5VHlwZSIpfWVsc2V7Y29uc3QgdD10aGlzLnN0YXJ0Tm9kZUF0Tm9kZShlKTt0Lm9iamVjdFR5cGU9ZTt0LmluZGV4VHlwZT10aGlzLnRzUGFyc2VUeXBlKCk7dGhpcy5leHBlY3QoMyk7ZT10aGlzLmZpbmlzaE5vZGUodCwiVFNJbmRleGVkQWNjZXNzVHlwZSIpfX1yZXR1cm4gZX10c1BhcnNlVHlwZU9wZXJhdG9yKCl7Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO2NvbnN0IHQ9dGhpcy5zdGF0ZS52YWx1ZTt0aGlzLm5leHQoKTtlLm9wZXJhdG9yPXQ7ZS50eXBlQW5ub3RhdGlvbj10aGlzLnRzUGFyc2VUeXBlT3BlcmF0b3JPckhpZ2hlcigpO2lmKHQ9PT0icmVhZG9ubHkiKXt0aGlzLnRzQ2hlY2tUeXBlQW5ub3RhdGlvbkZvclJlYWRPbmx5KGUpfXJldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiVFNUeXBlT3BlcmF0b3IiKX10c0NoZWNrVHlwZUFubm90YXRpb25Gb3JSZWFkT25seShlKXtzd2l0Y2goZS50eXBlQW5ub3RhdGlvbi50eXBlKXtjYXNlIlRTVHVwbGVUeXBlIjpjYXNlIlRTQXJyYXlUeXBlIjpyZXR1cm47ZGVmYXVsdDp0aGlzLnJhaXNlKGUuc3RhcnQsYmguVW5leHBlY3RlZFJlYWRvbmx5KX19dHNQYXJzZUluZmVyVHlwZSgpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTt0aGlzLmV4cGVjdENvbnRleHR1YWwoMTA2KTtjb25zdCB0PXRoaXMuc3RhcnROb2RlKCk7dC5uYW1lPXRoaXMudHNQYXJzZVR5cGVQYXJhbWV0ZXJOYW1lKCk7ZS50eXBlUGFyYW1ldGVyPXRoaXMuZmluaXNoTm9kZSh0LCJUU1R5cGVQYXJhbWV0ZXIiKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIlRTSW5mZXJUeXBlIil9dHNQYXJzZVR5cGVPcGVyYXRvck9ySGlnaGVyKCl7Y29uc3QgZT1ZbCh0aGlzLnN0YXRlLnR5cGUpJiYhdGhpcy5zdGF0ZS5jb250YWluc0VzYztyZXR1cm4gZT90aGlzLnRzUGFyc2VUeXBlT3BlcmF0b3IoKTp0aGlzLmlzQ29udGV4dHVhbCgxMDYpP3RoaXMudHNQYXJzZUluZmVyVHlwZSgpOnRoaXMudHNQYXJzZUFycmF5VHlwZU9ySGlnaGVyKCl9dHNQYXJzZVVuaW9uT3JJbnRlcnNlY3Rpb25UeXBlKGUsdCxyKXtjb25zdCBzPXRoaXMuc3RhcnROb2RlKCk7Y29uc3QgaT10aGlzLmVhdChyKTtjb25zdCBuPVtdO2Rve24ucHVzaCh0KCkpfXdoaWxlKHRoaXMuZWF0KHIpKTtpZihuLmxlbmd0aD09PTEmJiFpKXtyZXR1cm4gblswXX1zLnR5cGVzPW47cmV0dXJuIHRoaXMuZmluaXNoTm9kZShzLGUpfXRzUGFyc2VJbnRlcnNlY3Rpb25UeXBlT3JIaWdoZXIoKXtyZXR1cm4gdGhpcy50c1BhcnNlVW5pb25PckludGVyc2VjdGlvblR5cGUoIlRTSW50ZXJzZWN0aW9uVHlwZSIsdGhpcy50c1BhcnNlVHlwZU9wZXJhdG9yT3JIaWdoZXIuYmluZCh0aGlzKSw0MSl9dHNQYXJzZVVuaW9uVHlwZU9ySGlnaGVyKCl7cmV0dXJuIHRoaXMudHNQYXJzZVVuaW9uT3JJbnRlcnNlY3Rpb25UeXBlKCJUU1VuaW9uVHlwZSIsdGhpcy50c1BhcnNlSW50ZXJzZWN0aW9uVHlwZU9ySGlnaGVyLmJpbmQodGhpcyksMzkpfXRzSXNTdGFydE9mRnVuY3Rpb25UeXBlKCl7aWYodGhpcy5tYXRjaCg0Mykpe3JldHVybiB0cnVlfXJldHVybiB0aGlzLm1hdGNoKDEwKSYmdGhpcy50c0xvb2tBaGVhZCh0aGlzLnRzSXNVbmFtYmlndW91c2x5U3RhcnRPZkZ1bmN0aW9uVHlwZS5iaW5kKHRoaXMpKX10c1NraXBQYXJhbWV0ZXJTdGFydCgpe2lmKFJsKHRoaXMuc3RhdGUudHlwZSl8fHRoaXMubWF0Y2goNzIpKXt0aGlzLm5leHQoKTtyZXR1cm4gdHJ1ZX1pZih0aGlzLm1hdGNoKDUpKXtsZXQgZT0xO3RoaXMubmV4dCgpO3doaWxlKGU+MCl7aWYodGhpcy5tYXRjaCg1KSl7KytlfWVsc2UgaWYodGhpcy5tYXRjaCg4KSl7LS1lfXRoaXMubmV4dCgpfXJldHVybiB0cnVlfWlmKHRoaXMubWF0Y2goMCkpe2xldCBlPTE7dGhpcy5uZXh0KCk7d2hpbGUoZT4wKXtpZih0aGlzLm1hdGNoKDApKXsrK2V9ZWxzZSBpZih0aGlzLm1hdGNoKDMpKXstLWV9dGhpcy5uZXh0KCl9cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfXRzSXNVbmFtYmlndW91c2x5U3RhcnRPZkZ1bmN0aW9uVHlwZSgpe3RoaXMubmV4dCgpO2lmKHRoaXMubWF0Y2goMTEpfHx0aGlzLm1hdGNoKDIxKSl7cmV0dXJuIHRydWV9aWYodGhpcy50c1NraXBQYXJhbWV0ZXJTdGFydCgpKXtpZih0aGlzLm1hdGNoKDE0KXx8dGhpcy5tYXRjaCgxMil8fHRoaXMubWF0Y2goMTcpfHx0aGlzLm1hdGNoKDI3KSl7cmV0dXJuIHRydWV9aWYodGhpcy5tYXRjaCgxMSkpe3RoaXMubmV4dCgpO2lmKHRoaXMubWF0Y2goMTkpKXtyZXR1cm4gdHJ1ZX19fXJldHVybiBmYWxzZX10c1BhcnNlVHlwZU9yVHlwZVByZWRpY2F0ZUFubm90YXRpb24oZSl7cmV0dXJuIHRoaXMudHNJblR5cGUoKCgpPT57Y29uc3QgdD10aGlzLnN0YXJ0Tm9kZSgpO3RoaXMuZXhwZWN0KGUpO2NvbnN0IHI9dGhpcy5zdGFydE5vZGUoKTtjb25zdCBzPSEhdGhpcy50c1RyeVBhcnNlKHRoaXMudHNQYXJzZVR5cGVQcmVkaWNhdGVBc3NlcnRzLmJpbmQodGhpcykpO2lmKHMmJnRoaXMubWF0Y2goNzIpKXtsZXQgZT10aGlzLnRzUGFyc2VUaGlzVHlwZU9yVGhpc1R5cGVQcmVkaWNhdGUoKTtpZihlLnR5cGU9PT0iVFNUaGlzVHlwZSIpe3IucGFyYW1ldGVyTmFtZT1lO3IuYXNzZXJ0cz10cnVlO3IudHlwZUFubm90YXRpb249bnVsbDtlPXRoaXMuZmluaXNoTm9kZShyLCJUU1R5cGVQcmVkaWNhdGUiKX1lbHNle3RoaXMucmVzZXRTdGFydExvY2F0aW9uRnJvbU5vZGUoZSxyKTtlLmFzc2VydHM9dHJ1ZX10LnR5cGVBbm5vdGF0aW9uPWU7cmV0dXJuIHRoaXMuZmluaXNoTm9kZSh0LCJUU1R5cGVBbm5vdGF0aW9uIil9Y29uc3QgaT10aGlzLnRzSXNJZGVudGlmaWVyKCkmJnRoaXMudHNUcnlQYXJzZSh0aGlzLnRzUGFyc2VUeXBlUHJlZGljYXRlUHJlZml4LmJpbmQodGhpcykpO2lmKCFpKXtpZighcyl7cmV0dXJuIHRoaXMudHNQYXJzZVR5cGVBbm5vdGF0aW9uKGZhbHNlLHQpfXIucGFyYW1ldGVyTmFtZT10aGlzLnBhcnNlSWRlbnRpZmllcigpO3IuYXNzZXJ0cz1zO3IudHlwZUFubm90YXRpb249bnVsbDt0LnR5cGVBbm5vdGF0aW9uPXRoaXMuZmluaXNoTm9kZShyLCJUU1R5cGVQcmVkaWNhdGUiKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKHQsIlRTVHlwZUFubm90YXRpb24iKX1jb25zdCBuPXRoaXMudHNQYXJzZVR5cGVBbm5vdGF0aW9uKGZhbHNlKTtyLnBhcmFtZXRlck5hbWU9aTtyLnR5cGVBbm5vdGF0aW9uPW47ci5hc3NlcnRzPXM7dC50eXBlQW5ub3RhdGlvbj10aGlzLmZpbmlzaE5vZGUociwiVFNUeXBlUHJlZGljYXRlIik7cmV0dXJuIHRoaXMuZmluaXNoTm9kZSh0LCJUU1R5cGVBbm5vdGF0aW9uIil9KSl9dHNUcnlQYXJzZVR5cGVPclR5cGVQcmVkaWNhdGVBbm5vdGF0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2goMTQpP3RoaXMudHNQYXJzZVR5cGVPclR5cGVQcmVkaWNhdGVBbm5vdGF0aW9uKDE0KTp1bmRlZmluZWR9dHNUcnlQYXJzZVR5cGVBbm5vdGF0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2goMTQpP3RoaXMudHNQYXJzZVR5cGVBbm5vdGF0aW9uKCk6dW5kZWZpbmVkfXRzVHJ5UGFyc2VUeXBlKCl7cmV0dXJuIHRoaXMudHNFYXRUaGVuUGFyc2VUeXBlKDE0KX10c1BhcnNlVHlwZVByZWRpY2F0ZVByZWZpeCgpe2NvbnN0IGU9dGhpcy5wYXJzZUlkZW50aWZpZXIoKTtpZih0aGlzLmlzQ29udGV4dHVhbCgxMDcpJiYhdGhpcy5oYXNQcmVjZWRpbmdMaW5lQnJlYWsoKSl7dGhpcy5uZXh0KCk7cmV0dXJuIGV9fXRzUGFyc2VUeXBlUHJlZGljYXRlQXNzZXJ0cygpe2lmKHRoaXMuc3RhdGUudHlwZSE9PTEwMCl7cmV0dXJuIGZhbHNlfWNvbnN0IGU9dGhpcy5zdGF0ZS5jb250YWluc0VzYzt0aGlzLm5leHQoKTtpZighUmwodGhpcy5zdGF0ZS50eXBlKSYmIXRoaXMubWF0Y2goNzIpKXtyZXR1cm4gZmFsc2V9aWYoZSl7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLmxhc3RUb2tTdGFydCxjbC5JbnZhbGlkRXNjYXBlZFJlc2VydmVkV29yZCwiYXNzZXJ0cyIpfXJldHVybiB0cnVlfXRzUGFyc2VUeXBlQW5ub3RhdGlvbihlLHQpe2lmKGU9PT12b2lkIDApe2U9dHJ1ZX1pZih0PT09dm9pZCAwKXt0PXRoaXMuc3RhcnROb2RlKCl9dGhpcy50c0luVHlwZSgoKCk9PntpZihlKXRoaXMuZXhwZWN0KDE0KTt0LnR5cGVBbm5vdGF0aW9uPXRoaXMudHNQYXJzZVR5cGUoKX0pKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKHQsIlRTVHlwZUFubm90YXRpb24iKX10c1BhcnNlVHlwZSgpe3ZoKHRoaXMuc3RhdGUuaW5UeXBlKTtjb25zdCBlPXRoaXMudHNQYXJzZU5vbkNvbmRpdGlvbmFsVHlwZSgpO2lmKHRoaXMuaGFzUHJlY2VkaW5nTGluZUJyZWFrKCl8fCF0aGlzLmVhdCg3NSkpe3JldHVybiBlfWNvbnN0IHQ9dGhpcy5zdGFydE5vZGVBdE5vZGUoZSk7dC5jaGVja1R5cGU9ZTt0LmV4dGVuZHNUeXBlPXRoaXMudHNQYXJzZU5vbkNvbmRpdGlvbmFsVHlwZSgpO3RoaXMuZXhwZWN0KDE3KTt0LnRydWVUeXBlPXRoaXMudHNQYXJzZVR5cGUoKTt0aGlzLmV4cGVjdCgxNCk7dC5mYWxzZVR5cGU9dGhpcy50c1BhcnNlVHlwZSgpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUodCwiVFNDb25kaXRpb25hbFR5cGUiKX1pc0Fic3RyYWN0Q29uc3RydWN0b3JTaWduYXR1cmUoKXtyZXR1cm4gdGhpcy5pc0NvbnRleHR1YWwoMTE0KSYmdGhpcy5sb29rYWhlYWQoKS50eXBlPT09NzF9dHNQYXJzZU5vbkNvbmRpdGlvbmFsVHlwZSgpe2lmKHRoaXMudHNJc1N0YXJ0T2ZGdW5jdGlvblR5cGUoKSl7cmV0dXJuIHRoaXMudHNQYXJzZUZ1bmN0aW9uT3JDb25zdHJ1Y3RvclR5cGUoIlRTRnVuY3Rpb25UeXBlIil9aWYodGhpcy5tYXRjaCg3MSkpe3JldHVybiB0aGlzLnRzUGFyc2VGdW5jdGlvbk9yQ29uc3RydWN0b3JUeXBlKCJUU0NvbnN0cnVjdG9yVHlwZSIpfWVsc2UgaWYodGhpcy5pc0Fic3RyYWN0Q29uc3RydWN0b3JTaWduYXR1cmUoKSl7cmV0dXJuIHRoaXMudHNQYXJzZUZ1bmN0aW9uT3JDb25zdHJ1Y3RvclR5cGUoIlRTQ29uc3RydWN0b3JUeXBlIix0cnVlKX1yZXR1cm4gdGhpcy50c1BhcnNlVW5pb25UeXBlT3JIaWdoZXIoKX10c1BhcnNlVHlwZUFzc2VydGlvbigpe2lmKHRoaXMuZ2V0UGx1Z2luT3B0aW9uKCJ0eXBlc2NyaXB0IiwiZGlzYWxsb3dBbWJpZ3VvdXNKU1hMaWtlIikpe3RoaXMucmFpc2UodGhpcy5zdGF0ZS5zdGFydCxiaC5SZXNlcnZlZFR5cGVBc3NlcnRpb24pfWNvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTtjb25zdCB0PXRoaXMudHNUcnlOZXh0UGFyc2VDb25zdGFudENvbnRleHQoKTtlLnR5cGVBbm5vdGF0aW9uPXR8fHRoaXMudHNOZXh0VGhlblBhcnNlVHlwZSgpO3RoaXMuZXhwZWN0KDQ0KTtlLmV4cHJlc3Npb249dGhpcy5wYXJzZU1heWJlVW5hcnkoKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIlRTVHlwZUFzc2VydGlvbiIpfXRzUGFyc2VIZXJpdGFnZUNsYXVzZShlKXtjb25zdCB0PXRoaXMuc3RhdGUuc3RhcnQ7Y29uc3Qgcj10aGlzLnRzUGFyc2VEZWxpbWl0ZWRMaXN0KCJIZXJpdGFnZUNsYXVzZUVsZW1lbnQiLHRoaXMudHNQYXJzZUV4cHJlc3Npb25XaXRoVHlwZUFyZ3VtZW50cy5iaW5kKHRoaXMpKTtpZighci5sZW5ndGgpe3RoaXMucmFpc2UodCxiaC5FbXB0eUhlcml0YWdlQ2xhdXNlVHlwZSxlKX1yZXR1cm4gcn10c1BhcnNlRXhwcmVzc2lvbldpdGhUeXBlQXJndW1lbnRzKCl7Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO2UuZXhwcmVzc2lvbj10aGlzLnRzUGFyc2VFbnRpdHlOYW1lKGZhbHNlKTtpZih0aGlzLm1hdGNoKDQzKSl7ZS50eXBlUGFyYW1ldGVycz10aGlzLnRzUGFyc2VUeXBlQXJndW1lbnRzKCl9cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJUU0V4cHJlc3Npb25XaXRoVHlwZUFyZ3VtZW50cyIpfXRzUGFyc2VJbnRlcmZhY2VEZWNsYXJhdGlvbihlKXtpZihSbCh0aGlzLnN0YXRlLnR5cGUpKXtlLmlkPXRoaXMucGFyc2VJZGVudGlmaWVyKCk7dGhpcy5jaGVja0xWYWwoZS5pZCwidHlwZXNjcmlwdCBpbnRlcmZhY2UgZGVjbGFyYXRpb24iLFl1KX1lbHNle2UuaWQ9bnVsbDt0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsYmguTWlzc2luZ0ludGVyZmFjZU5hbWUpfWUudHlwZVBhcmFtZXRlcnM9dGhpcy50c1RyeVBhcnNlVHlwZVBhcmFtZXRlcnMoKTtpZih0aGlzLmVhdCg3NSkpe2UuZXh0ZW5kcz10aGlzLnRzUGFyc2VIZXJpdGFnZUNsYXVzZSgiZXh0ZW5kcyIpfWNvbnN0IHQ9dGhpcy5zdGFydE5vZGUoKTt0LmJvZHk9dGhpcy50c0luVHlwZSh0aGlzLnRzUGFyc2VPYmplY3RUeXBlTWVtYmVycy5iaW5kKHRoaXMpKTtlLmJvZHk9dGhpcy5maW5pc2hOb2RlKHQsIlRTSW50ZXJmYWNlQm9keSIpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiVFNJbnRlcmZhY2VEZWNsYXJhdGlvbiIpfXRzUGFyc2VUeXBlQWxpYXNEZWNsYXJhdGlvbihlKXtlLmlkPXRoaXMucGFyc2VJZGVudGlmaWVyKCk7dGhpcy5jaGVja0xWYWwoZS5pZCwidHlwZXNjcmlwdCB0eXBlIGFsaWFzIixRdSk7ZS50eXBlUGFyYW1ldGVycz10aGlzLnRzVHJ5UGFyc2VUeXBlUGFyYW1ldGVycygpO2UudHlwZUFubm90YXRpb249dGhpcy50c0luVHlwZSgoKCk9Pnt0aGlzLmV4cGVjdCgyNyk7aWYodGhpcy5pc0NvbnRleHR1YWwoMTA1KSYmdGhpcy5sb29rYWhlYWQoKS50eXBlIT09MTYpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTt0aGlzLm5leHQoKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIlRTSW50cmluc2ljS2V5d29yZCIpfXJldHVybiB0aGlzLnRzUGFyc2VUeXBlKCl9KSk7dGhpcy5zZW1pY29sb24oKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIlRTVHlwZUFsaWFzRGVjbGFyYXRpb24iKX10c0luTm9Db250ZXh0KGUpe2NvbnN0IHQ9dGhpcy5zdGF0ZS5jb250ZXh0O3RoaXMuc3RhdGUuY29udGV4dD1bdFswXV07dHJ5e3JldHVybiBlKCl9ZmluYWxseXt0aGlzLnN0YXRlLmNvbnRleHQ9dH19dHNJblR5cGUoZSl7Y29uc3QgdD10aGlzLnN0YXRlLmluVHlwZTt0aGlzLnN0YXRlLmluVHlwZT10cnVlO3RyeXtyZXR1cm4gZSgpfWZpbmFsbHl7dGhpcy5zdGF0ZS5pblR5cGU9dH19dHNFYXRUaGVuUGFyc2VUeXBlKGUpe3JldHVybiF0aGlzLm1hdGNoKGUpP3VuZGVmaW5lZDp0aGlzLnRzTmV4dFRoZW5QYXJzZVR5cGUoKX10c0V4cGVjdFRoZW5QYXJzZVR5cGUoZSl7cmV0dXJuIHRoaXMudHNEb1RoZW5QYXJzZVR5cGUoKCgpPT50aGlzLmV4cGVjdChlKSkpfXRzTmV4dFRoZW5QYXJzZVR5cGUoKXtyZXR1cm4gdGhpcy50c0RvVGhlblBhcnNlVHlwZSgoKCk9PnRoaXMubmV4dCgpKSl9dHNEb1RoZW5QYXJzZVR5cGUoZSl7cmV0dXJuIHRoaXMudHNJblR5cGUoKCgpPT57ZSgpO3JldHVybiB0aGlzLnRzUGFyc2VUeXBlKCl9KSl9dHNQYXJzZUVudW1NZW1iZXIoKXtjb25zdCBlPXRoaXMuc3RhcnROb2RlKCk7ZS5pZD10aGlzLm1hdGNoKDEyMyk/dGhpcy5wYXJzZUV4cHJBdG9tKCk6dGhpcy5wYXJzZUlkZW50aWZpZXIodHJ1ZSk7aWYodGhpcy5lYXQoMjcpKXtlLmluaXRpYWxpemVyPXRoaXMucGFyc2VNYXliZUFzc2lnbkFsbG93SW4oKX1yZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIlRTRW51bU1lbWJlciIpfXRzUGFyc2VFbnVtRGVjbGFyYXRpb24oZSx0KXtpZih0KWUuY29uc3Q9dHJ1ZTtlLmlkPXRoaXMucGFyc2VJZGVudGlmaWVyKCk7dGhpcy5jaGVja0xWYWwoZS5pZCwidHlwZXNjcmlwdCBlbnVtIGRlY2xhcmF0aW9uIix0P3NjOlp1KTt0aGlzLmV4cGVjdCg1KTtlLm1lbWJlcnM9dGhpcy50c1BhcnNlRGVsaW1pdGVkTGlzdCgiRW51bU1lbWJlcnMiLHRoaXMudHNQYXJzZUVudW1NZW1iZXIuYmluZCh0aGlzKSk7dGhpcy5leHBlY3QoOCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJUU0VudW1EZWNsYXJhdGlvbiIpfXRzUGFyc2VNb2R1bGVCbG9jaygpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTt0aGlzLnNjb3BlLmVudGVyKHd1KTt0aGlzLmV4cGVjdCg1KTt0aGlzLnBhcnNlQmxvY2tPck1vZHVsZUJsb2NrQm9keShlLmJvZHk9W10sdW5kZWZpbmVkLHRydWUsOCk7dGhpcy5zY29wZS5leGl0KCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJUU01vZHVsZUJsb2NrIil9dHNQYXJzZU1vZHVsZU9yTmFtZXNwYWNlRGVjbGFyYXRpb24oZSx0KXtpZih0PT09dm9pZCAwKXt0PWZhbHNlfWUuaWQ9dGhpcy5wYXJzZUlkZW50aWZpZXIoKTtpZighdCl7dGhpcy5jaGVja0xWYWwoZS5pZCwibW9kdWxlIG9yIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiIsaWMpfWlmKHRoaXMuZWF0KDE2KSl7Y29uc3QgdD10aGlzLnN0YXJ0Tm9kZSgpO3RoaXMudHNQYXJzZU1vZHVsZU9yTmFtZXNwYWNlRGVjbGFyYXRpb24odCx0cnVlKTtlLmJvZHk9dH1lbHNle3RoaXMuc2NvcGUuZW50ZXIoX3UpO3RoaXMucHJvZFBhcmFtLmVudGVyKGpjKTtlLmJvZHk9dGhpcy50c1BhcnNlTW9kdWxlQmxvY2soKTt0aGlzLnByb2RQYXJhbS5leGl0KCk7dGhpcy5zY29wZS5leGl0KCl9cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJUU01vZHVsZURlY2xhcmF0aW9uIil9dHNQYXJzZUFtYmllbnRFeHRlcm5hbE1vZHVsZURlY2xhcmF0aW9uKGUpe2lmKHRoaXMuaXNDb250ZXh0dWFsKDEwMykpe2UuZ2xvYmFsPXRydWU7ZS5pZD10aGlzLnBhcnNlSWRlbnRpZmllcigpfWVsc2UgaWYodGhpcy5tYXRjaCgxMjMpKXtlLmlkPXRoaXMucGFyc2VFeHByQXRvbSgpfWVsc2V7dGhpcy51bmV4cGVjdGVkKCl9aWYodGhpcy5tYXRjaCg1KSl7dGhpcy5zY29wZS5lbnRlcihfdSk7dGhpcy5wcm9kUGFyYW0uZW50ZXIoamMpO2UuYm9keT10aGlzLnRzUGFyc2VNb2R1bGVCbG9jaygpO3RoaXMucHJvZFBhcmFtLmV4aXQoKTt0aGlzLnNjb3BlLmV4aXQoKX1lbHNle3RoaXMuc2VtaWNvbG9uKCl9cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJUU01vZHVsZURlY2xhcmF0aW9uIil9dHNQYXJzZUltcG9ydEVxdWFsc0RlY2xhcmF0aW9uKGUsdCl7ZS5pc0V4cG9ydD10fHxmYWxzZTtlLmlkPXRoaXMucGFyc2VJZGVudGlmaWVyKCk7dGhpcy5jaGVja0xWYWwoZS5pZCwiaW1wb3J0IGVxdWFscyBkZWNsYXJhdGlvbiIsV3UpO3RoaXMuZXhwZWN0KDI3KTtjb25zdCByPXRoaXMudHNQYXJzZU1vZHVsZVJlZmVyZW5jZSgpO2lmKGUuaW1wb3J0S2luZD09PSJ0eXBlIiYmci50eXBlIT09IlRTRXh0ZXJuYWxNb2R1bGVSZWZlcmVuY2UiKXt0aGlzLnJhaXNlKHIuc3RhcnQsYmguSW1wb3J0QWxpYXNIYXNJbXBvcnRUeXBlKX1lLm1vZHVsZVJlZmVyZW5jZT1yO3RoaXMuc2VtaWNvbG9uKCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJUU0ltcG9ydEVxdWFsc0RlY2xhcmF0aW9uIil9dHNJc0V4dGVybmFsTW9kdWxlUmVmZXJlbmNlKCl7cmV0dXJuIHRoaXMuaXNDb250ZXh0dWFsKDExMCkmJnRoaXMubG9va2FoZWFkQ2hhckNvZGUoKT09PTQwfXRzUGFyc2VNb2R1bGVSZWZlcmVuY2UoKXtyZXR1cm4gdGhpcy50c0lzRXh0ZXJuYWxNb2R1bGVSZWZlcmVuY2UoKT90aGlzLnRzUGFyc2VFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZSgpOnRoaXMudHNQYXJzZUVudGl0eU5hbWUoZmFsc2UpfXRzUGFyc2VFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZSgpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTt0aGlzLmV4cGVjdENvbnRleHR1YWwoMTEwKTt0aGlzLmV4cGVjdCgxMCk7aWYoIXRoaXMubWF0Y2goMTIzKSl7dGhyb3cgdGhpcy51bmV4cGVjdGVkKCl9ZS5leHByZXNzaW9uPXRoaXMucGFyc2VFeHByQXRvbSgpO3RoaXMuZXhwZWN0KDExKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIlRTRXh0ZXJuYWxNb2R1bGVSZWZlcmVuY2UiKX10c0xvb2tBaGVhZChlKXtjb25zdCB0PXRoaXMuc3RhdGUuY2xvbmUoKTtjb25zdCByPWUoKTt0aGlzLnN0YXRlPXQ7cmV0dXJuIHJ9dHNUcnlQYXJzZUFuZENhdGNoKGUpe2NvbnN0IHQ9dGhpcy50cnlQYXJzZSgodD0+ZSgpfHx0KCkpKTtpZih0LmFib3J0ZWR8fCF0Lm5vZGUpcmV0dXJuIHVuZGVmaW5lZDtpZih0LmVycm9yKXRoaXMuc3RhdGU9dC5mYWlsU3RhdGU7cmV0dXJuIHQubm9kZX10c1RyeVBhcnNlKGUpe2NvbnN0IHQ9dGhpcy5zdGF0ZS5jbG9uZSgpO2NvbnN0IHI9ZSgpO2lmKHIhPT11bmRlZmluZWQmJnIhPT1mYWxzZSl7cmV0dXJuIHJ9ZWxzZXt0aGlzLnN0YXRlPXQ7cmV0dXJuIHVuZGVmaW5lZH19dHNUcnlQYXJzZURlY2xhcmUoZSl7aWYodGhpcy5pc0xpbmVUZXJtaW5hdG9yKCkpe3JldHVybn1sZXQgdD10aGlzLnN0YXRlLnR5cGU7bGV0IHI7aWYodGhpcy5pc0NvbnRleHR1YWwoOTMpKXt0PTY4O3I9ImxldCJ9cmV0dXJuIHRoaXMudHNJbkFtYmllbnRDb250ZXh0KCgoKT0+e3N3aXRjaCh0KXtjYXNlIDYyOmUuZGVjbGFyZT10cnVlO3JldHVybiB0aGlzLnBhcnNlRnVuY3Rpb25TdGF0ZW1lbnQoZSxmYWxzZSx0cnVlKTtjYXNlIDc0OmUuZGVjbGFyZT10cnVlO3JldHVybiB0aGlzLnBhcnNlQ2xhc3MoZSx0cnVlLGZhbHNlKTtjYXNlIDY5OmlmKHRoaXMubWF0Y2goNjkpJiZ0aGlzLmlzTG9va2FoZWFkQ29udGV4dHVhbCgiZW51bSIpKXt0aGlzLmV4cGVjdCg2OSk7dGhpcy5leHBlY3RDb250ZXh0dWFsKDExNik7cmV0dXJuIHRoaXMudHNQYXJzZUVudW1EZWNsYXJhdGlvbihlLHRydWUpfWNhc2UgNjg6cj1yfHx0aGlzLnN0YXRlLnZhbHVlO3JldHVybiB0aGlzLnBhcnNlVmFyU3RhdGVtZW50KGUscik7Y2FzZSAxMDM6cmV0dXJuIHRoaXMudHNQYXJzZUFtYmllbnRFeHRlcm5hbE1vZHVsZURlY2xhcmF0aW9uKGUpO2RlZmF1bHQ6e2lmKFJsKHQpKXtyZXR1cm4gdGhpcy50c1BhcnNlRGVjbGFyYXRpb24oZSx0aGlzLnN0YXRlLnZhbHVlLHRydWUpfX19fSkpfXRzVHJ5UGFyc2VFeHBvcnREZWNsYXJhdGlvbigpe3JldHVybiB0aGlzLnRzUGFyc2VEZWNsYXJhdGlvbih0aGlzLnN0YXJ0Tm9kZSgpLHRoaXMuc3RhdGUudmFsdWUsdHJ1ZSl9dHNQYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoZSx0KXtzd2l0Y2godC5uYW1lKXtjYXNlImRlY2xhcmUiOntjb25zdCB0PXRoaXMudHNUcnlQYXJzZURlY2xhcmUoZSk7aWYodCl7dC5kZWNsYXJlPXRydWU7cmV0dXJuIHR9YnJlYWt9Y2FzZSJnbG9iYWwiOmlmKHRoaXMubWF0Y2goNSkpe3RoaXMuc2NvcGUuZW50ZXIoX3UpO3RoaXMucHJvZFBhcmFtLmVudGVyKGpjKTtjb25zdCByPWU7ci5nbG9iYWw9dHJ1ZTtyLmlkPXQ7ci5ib2R5PXRoaXMudHNQYXJzZU1vZHVsZUJsb2NrKCk7dGhpcy5zY29wZS5leGl0KCk7dGhpcy5wcm9kUGFyYW0uZXhpdCgpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUociwiVFNNb2R1bGVEZWNsYXJhdGlvbiIpfWJyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMudHNQYXJzZURlY2xhcmF0aW9uKGUsdC5uYW1lLGZhbHNlKX19dHNQYXJzZURlY2xhcmF0aW9uKGUsdCxyKXtzd2l0Y2godCl7Y2FzZSJhYnN0cmFjdCI6aWYodGhpcy50c0NoZWNrTGluZVRlcm1pbmF0b3IocikmJih0aGlzLm1hdGNoKDc0KXx8UmwodGhpcy5zdGF0ZS50eXBlKSkpe3JldHVybiB0aGlzLnRzUGFyc2VBYnN0cmFjdERlY2xhcmF0aW9uKGUpfWJyZWFrO2Nhc2UiZW51bSI6aWYocnx8UmwodGhpcy5zdGF0ZS50eXBlKSl7aWYocil0aGlzLm5leHQoKTtyZXR1cm4gdGhpcy50c1BhcnNlRW51bURlY2xhcmF0aW9uKGUsZmFsc2UpfWJyZWFrO2Nhc2UiaW50ZXJmYWNlIjppZih0aGlzLnRzQ2hlY2tMaW5lVGVybWluYXRvcihyKSYmUmwodGhpcy5zdGF0ZS50eXBlKSl7cmV0dXJuIHRoaXMudHNQYXJzZUludGVyZmFjZURlY2xhcmF0aW9uKGUpfWJyZWFrO2Nhc2UibW9kdWxlIjppZih0aGlzLnRzQ2hlY2tMaW5lVGVybWluYXRvcihyKSl7aWYodGhpcy5tYXRjaCgxMjMpKXtyZXR1cm4gdGhpcy50c1BhcnNlQW1iaWVudEV4dGVybmFsTW9kdWxlRGVjbGFyYXRpb24oZSl9ZWxzZSBpZihSbCh0aGlzLnN0YXRlLnR5cGUpKXtyZXR1cm4gdGhpcy50c1BhcnNlTW9kdWxlT3JOYW1lc3BhY2VEZWNsYXJhdGlvbihlKX19YnJlYWs7Y2FzZSJuYW1lc3BhY2UiOmlmKHRoaXMudHNDaGVja0xpbmVUZXJtaW5hdG9yKHIpJiZSbCh0aGlzLnN0YXRlLnR5cGUpKXtyZXR1cm4gdGhpcy50c1BhcnNlTW9kdWxlT3JOYW1lc3BhY2VEZWNsYXJhdGlvbihlKX1icmVhaztjYXNlInR5cGUiOmlmKHRoaXMudHNDaGVja0xpbmVUZXJtaW5hdG9yKHIpJiZSbCh0aGlzLnN0YXRlLnR5cGUpKXtyZXR1cm4gdGhpcy50c1BhcnNlVHlwZUFsaWFzRGVjbGFyYXRpb24oZSl9YnJlYWt9fXRzQ2hlY2tMaW5lVGVybWluYXRvcihlKXtpZihlKXtpZih0aGlzLmhhc0ZvbGxvd2luZ0xpbmVCcmVhaygpKXJldHVybiBmYWxzZTt0aGlzLm5leHQoKTtyZXR1cm4gdHJ1ZX1yZXR1cm4hdGhpcy5pc0xpbmVUZXJtaW5hdG9yKCl9dHNUcnlQYXJzZUdlbmVyaWNBc3luY0Fycm93RnVuY3Rpb24oZSx0KXtpZighdGhpcy5tYXRjaCg0Mykpe3JldHVybiB1bmRlZmluZWR9Y29uc3Qgcj10aGlzLnN0YXRlLm1heWJlSW5BcnJvd1BhcmFtZXRlcnM7dGhpcy5zdGF0ZS5tYXliZUluQXJyb3dQYXJhbWV0ZXJzPXRydWU7Y29uc3Qgcz10aGlzLnRzVHJ5UGFyc2VBbmRDYXRjaCgoKCk9Pntjb25zdCByPXRoaXMuc3RhcnROb2RlQXQoZSx0KTtyLnR5cGVQYXJhbWV0ZXJzPXRoaXMudHNQYXJzZVR5cGVQYXJhbWV0ZXJzKCk7c3VwZXIucGFyc2VGdW5jdGlvblBhcmFtcyhyKTtyLnJldHVyblR5cGU9dGhpcy50c1RyeVBhcnNlVHlwZU9yVHlwZVByZWRpY2F0ZUFubm90YXRpb24oKTt0aGlzLmV4cGVjdCgxOSk7cmV0dXJuIHJ9KSk7dGhpcy5zdGF0ZS5tYXliZUluQXJyb3dQYXJhbWV0ZXJzPXI7aWYoIXMpe3JldHVybiB1bmRlZmluZWR9cmV0dXJuIHRoaXMucGFyc2VBcnJvd0V4cHJlc3Npb24ocyxudWxsLHRydWUpfXRzUGFyc2VUeXBlQXJndW1lbnRzKCl7Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO2UucGFyYW1zPXRoaXMudHNJblR5cGUoKCgpPT50aGlzLnRzSW5Ob0NvbnRleHQoKCgpPT57dGhpcy5leHBlY3QoNDMpO3JldHVybiB0aGlzLnRzUGFyc2VEZWxpbWl0ZWRMaXN0KCJUeXBlUGFyYW1ldGVyc09yQXJndW1lbnRzIix0aGlzLnRzUGFyc2VUeXBlLmJpbmQodGhpcykpfSkpKSk7aWYoZS5wYXJhbXMubGVuZ3RoPT09MCl7dGhpcy5yYWlzZShlLnN0YXJ0LGJoLkVtcHR5VHlwZUFyZ3VtZW50cyl9dGhpcy5leHBlY3QoNDQpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiVFNUeXBlUGFyYW1ldGVySW5zdGFudGlhdGlvbiIpfXRzSXNEZWNsYXJhdGlvblN0YXJ0KCl7cmV0dXJuIFFsKHRoaXMuc3RhdGUudHlwZSl9aXNFeHBvcnREZWZhdWx0U3BlY2lmaWVyKCl7aWYodGhpcy50c0lzRGVjbGFyYXRpb25TdGFydCgpKXJldHVybiBmYWxzZTtyZXR1cm4gc3VwZXIuaXNFeHBvcnREZWZhdWx0U3BlY2lmaWVyKCl9cGFyc2VBc3NpZ25hYmxlTGlzdEl0ZW0oZSx0KXtjb25zdCByPXRoaXMuc3RhdGUuc3RhcnQ7Y29uc3Qgcz10aGlzLnN0YXRlLnN0YXJ0TG9jO2xldCBpO2xldCBuPWZhbHNlO2xldCBhPWZhbHNlO2lmKGUhPT11bmRlZmluZWQpe2NvbnN0IHQ9e307dGhpcy50c1BhcnNlTW9kaWZpZXJzKHQsWyJwdWJsaWMiLCJwcml2YXRlIiwicHJvdGVjdGVkIiwib3ZlcnJpZGUiLCJyZWFkb25seSJdKTtpPXQuYWNjZXNzaWJpbGl0eTthPXQub3ZlcnJpZGU7bj10LnJlYWRvbmx5O2lmKGU9PT1mYWxzZSYmKGl8fG58fGEpKXt0aGlzLnJhaXNlKHIsYmguVW5leHBlY3RlZFBhcmFtZXRlck1vZGlmaWVyKX19Y29uc3Qgbz10aGlzLnBhcnNlTWF5YmVEZWZhdWx0KCk7dGhpcy5wYXJzZUFzc2lnbmFibGVMaXN0SXRlbVR5cGVzKG8pO2NvbnN0IGw9dGhpcy5wYXJzZU1heWJlRGVmYXVsdChvLnN0YXJ0LG8ubG9jLnN0YXJ0LG8pO2lmKGl8fG58fGEpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGVBdChyLHMpO2lmKHQubGVuZ3RoKXtlLmRlY29yYXRvcnM9dH1pZihpKWUuYWNjZXNzaWJpbGl0eT1pO2lmKG4pZS5yZWFkb25seT1uO2lmKGEpZS5vdmVycmlkZT1hO2lmKGwudHlwZSE9PSJJZGVudGlmaWVyIiYmbC50eXBlIT09IkFzc2lnbm1lbnRQYXR0ZXJuIil7dGhpcy5yYWlzZShlLnN0YXJ0LGJoLlVuc3VwcG9ydGVkUGFyYW1ldGVyUHJvcGVydHlLaW5kKX1lLnBhcmFtZXRlcj1sO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiVFNQYXJhbWV0ZXJQcm9wZXJ0eSIpfWlmKHQubGVuZ3RoKXtvLmRlY29yYXRvcnM9dH1yZXR1cm4gbH1wYXJzZUZ1bmN0aW9uQm9keUFuZEZpbmlzaChlLHQscil7aWYocj09PXZvaWQgMCl7cj1mYWxzZX1pZih0aGlzLm1hdGNoKDE0KSl7ZS5yZXR1cm5UeXBlPXRoaXMudHNQYXJzZVR5cGVPclR5cGVQcmVkaWNhdGVBbm5vdGF0aW9uKDE0KX1jb25zdCBzPXQ9PT0iRnVuY3Rpb25EZWNsYXJhdGlvbiI/IlRTRGVjbGFyZUZ1bmN0aW9uIjp0PT09IkNsYXNzTWV0aG9kInx8dD09PSJDbGFzc1ByaXZhdGVNZXRob2QiPyJUU0RlY2xhcmVNZXRob2QiOnVuZGVmaW5lZDtpZihzJiYhdGhpcy5tYXRjaCg1KSYmdGhpcy5pc0xpbmVUZXJtaW5hdG9yKCkpe3RoaXMuZmluaXNoTm9kZShlLHMpO3JldHVybn1pZihzPT09IlRTRGVjbGFyZUZ1bmN0aW9uIiYmdGhpcy5zdGF0ZS5pc0FtYmllbnRDb250ZXh0KXt0aGlzLnJhaXNlKGUuc3RhcnQsYmguRGVjbGFyZUZ1bmN0aW9uSGFzSW1wbGVtZW50YXRpb24pO2lmKGUuZGVjbGFyZSl7c3VwZXIucGFyc2VGdW5jdGlvbkJvZHlBbmRGaW5pc2goZSxzLHIpO3JldHVybn19c3VwZXIucGFyc2VGdW5jdGlvbkJvZHlBbmRGaW5pc2goZSx0LHIpfXJlZ2lzdGVyRnVuY3Rpb25TdGF0ZW1lbnRJZChlKXtpZighZS5ib2R5JiZlLmlkKXt0aGlzLmNoZWNrTFZhbChlLmlkLCJmdW5jdGlvbiBuYW1lIixlYyl9ZWxzZXtzdXBlci5yZWdpc3RlckZ1bmN0aW9uU3RhdGVtZW50SWQoLi4uYXJndW1lbnRzKX19dHNDaGVja0ZvckludmFsaWRUeXBlQ2FzdHMoZSl7ZS5mb3JFYWNoKChlPT57aWYoKGU9PW51bGw/dm9pZCAwOmUudHlwZSk9PT0iVFNUeXBlQ2FzdEV4cHJlc3Npb24iKXt0aGlzLnJhaXNlKGUudHlwZUFubm90YXRpb24uc3RhcnQsYmguVW5leHBlY3RlZFR5cGVBbm5vdGF0aW9uKX19KSl9dG9SZWZlcmVuY2VkTGlzdChlLHQpe3RoaXMudHNDaGVja0ZvckludmFsaWRUeXBlQ2FzdHMoZSk7cmV0dXJuIGV9cGFyc2VBcnJheUxpa2UoKXtjb25zdCBlPXN1cGVyLnBhcnNlQXJyYXlMaWtlKC4uLmFyZ3VtZW50cyk7aWYoZS50eXBlPT09IkFycmF5RXhwcmVzc2lvbiIpe3RoaXMudHNDaGVja0ZvckludmFsaWRUeXBlQ2FzdHMoZS5lbGVtZW50cyl9cmV0dXJuIGV9cGFyc2VTdWJzY3JpcHQoZSx0LHIscyxpKXtpZighdGhpcy5oYXNQcmVjZWRpbmdMaW5lQnJlYWsoKSYmdGhpcy5tYXRjaCgzMykpe3RoaXMuc3RhdGUuY2FuU3RhcnRKU1hFbGVtZW50PWZhbHNlO3RoaXMubmV4dCgpO2NvbnN0IHM9dGhpcy5zdGFydE5vZGVBdCh0LHIpO3MuZXhwcmVzc2lvbj1lO3JldHVybiB0aGlzLmZpbmlzaE5vZGUocywiVFNOb25OdWxsRXhwcmVzc2lvbiIpfWxldCBuPWZhbHNlO2lmKHRoaXMubWF0Y2goMTgpJiZ0aGlzLmxvb2thaGVhZENoYXJDb2RlKCk9PT02MCl7aWYocyl7aS5zdG9wPXRydWU7cmV0dXJuIGV9aS5vcHRpb25hbENoYWluTWVtYmVyPW49dHJ1ZTt0aGlzLm5leHQoKX1pZih0aGlzLm1hdGNoKDQzKSl7bGV0IGE7Y29uc3Qgbz10aGlzLnRzVHJ5UGFyc2VBbmRDYXRjaCgoKCk9PntpZighcyYmdGhpcy5hdFBvc3NpYmxlQXN5bmNBcnJvdyhlKSl7Y29uc3QgZT10aGlzLnRzVHJ5UGFyc2VHZW5lcmljQXN5bmNBcnJvd0Z1bmN0aW9uKHQscik7aWYoZSl7cmV0dXJuIGV9fWNvbnN0IG89dGhpcy5zdGFydE5vZGVBdCh0LHIpO28uY2FsbGVlPWU7Y29uc3QgbD10aGlzLnRzUGFyc2VUeXBlQXJndW1lbnRzKCk7aWYobCl7aWYobiYmIXRoaXMubWF0Y2goMTApKXthPXRoaXMuc3RhdGUucG9zO3RoaXMudW5leHBlY3RlZCgpfWlmKCFzJiZ0aGlzLmVhdCgxMCkpe28uYXJndW1lbnRzPXRoaXMucGFyc2VDYWxsRXhwcmVzc2lvbkFyZ3VtZW50cygxMSxmYWxzZSk7dGhpcy50c0NoZWNrRm9ySW52YWxpZFR5cGVDYXN0cyhvLmFyZ3VtZW50cyk7by50eXBlUGFyYW1ldGVycz1sO2lmKGkub3B0aW9uYWxDaGFpbk1lbWJlcil7by5vcHRpb25hbD1ufXJldHVybiB0aGlzLmZpbmlzaENhbGxFeHByZXNzaW9uKG8saS5vcHRpb25hbENoYWluTWVtYmVyKX1lbHNlIGlmKHRoaXMubWF0Y2goMjIpKXtjb25zdCBzPXRoaXMucGFyc2VUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24oZSx0LHIsaSk7cy50eXBlUGFyYW1ldGVycz1sO3JldHVybiBzfX10aGlzLnVuZXhwZWN0ZWQoKX0pKTtpZihhKXt0aGlzLnVuZXhwZWN0ZWQoYSwxMCl9aWYobylyZXR1cm4gb31yZXR1cm4gc3VwZXIucGFyc2VTdWJzY3JpcHQoZSx0LHIscyxpKX1wYXJzZU5ld0FyZ3VtZW50cyhlKXtpZih0aGlzLm1hdGNoKDQzKSl7Y29uc3QgdD10aGlzLnRzVHJ5UGFyc2VBbmRDYXRjaCgoKCk9Pntjb25zdCBlPXRoaXMudHNQYXJzZVR5cGVBcmd1bWVudHMoKTtpZighdGhpcy5tYXRjaCgxMCkpdGhpcy51bmV4cGVjdGVkKCk7cmV0dXJuIGV9KSk7aWYodCl7ZS50eXBlUGFyYW1ldGVycz10fX1zdXBlci5wYXJzZU5ld0FyZ3VtZW50cyhlKX1wYXJzZUV4cHJPcChlLHQscixzKXtpZihldSg1Mik+cyYmIXRoaXMuaGFzUHJlY2VkaW5nTGluZUJyZWFrKCkmJnRoaXMuaXNDb250ZXh0dWFsKDg3KSl7Y29uc3QgaT10aGlzLnN0YXJ0Tm9kZUF0KHQscik7aS5leHByZXNzaW9uPWU7Y29uc3Qgbj10aGlzLnRzVHJ5TmV4dFBhcnNlQ29uc3RhbnRDb250ZXh0KCk7aWYobil7aS50eXBlQW5ub3RhdGlvbj1ufWVsc2V7aS50eXBlQW5ub3RhdGlvbj10aGlzLnRzTmV4dFRoZW5QYXJzZVR5cGUoKX10aGlzLmZpbmlzaE5vZGUoaSwiVFNBc0V4cHJlc3Npb24iKTt0aGlzLnJlU2Nhbl9sdF9ndCgpO3JldHVybiB0aGlzLnBhcnNlRXhwck9wKGksdCxyLHMpfXJldHVybiBzdXBlci5wYXJzZUV4cHJPcChlLHQscixzKX1jaGVja1Jlc2VydmVkV29yZChlLHQscixzKXt9Y2hlY2tEdXBsaWNhdGVFeHBvcnRzKCl7fXBhcnNlSW1wb3J0KGUpe2UuaW1wb3J0S2luZD0idmFsdWUiO2lmKFJsKHRoaXMuc3RhdGUudHlwZSl8fHRoaXMubWF0Y2goNDkpfHx0aGlzLm1hdGNoKDUpKXtsZXQgdD10aGlzLmxvb2thaGVhZCgpO2lmKHRoaXMuaXNDb250ZXh0dWFsKDEyMCkmJnQudHlwZSE9PTEyJiZ0LnR5cGUhPT05MSYmdC50eXBlIT09Mjcpe2UuaW1wb3J0S2luZD0idHlwZSI7dGhpcy5uZXh0KCk7dD10aGlzLmxvb2thaGVhZCgpfWlmKFJsKHRoaXMuc3RhdGUudHlwZSkmJnQudHlwZT09PTI3KXtyZXR1cm4gdGhpcy50c1BhcnNlSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24oZSl9fWNvbnN0IHQ9c3VwZXIucGFyc2VJbXBvcnQoZSk7aWYodC5pbXBvcnRLaW5kPT09InR5cGUiJiZ0LnNwZWNpZmllcnMubGVuZ3RoPjEmJnQuc3BlY2lmaWVyc1swXS50eXBlPT09IkltcG9ydERlZmF1bHRTcGVjaWZpZXIiKXt0aGlzLnJhaXNlKHQuc3RhcnQsYmguVHlwZUltcG9ydENhbm5vdFNwZWNpZnlEZWZhdWx0QW5kTmFtZWQpfXJldHVybiB0fXBhcnNlRXhwb3J0KGUpe2lmKHRoaXMubWF0Y2goNzcpKXt0aGlzLm5leHQoKTtpZih0aGlzLmlzQ29udGV4dHVhbCgxMjApJiZ0aGlzLmxvb2thaGVhZENoYXJDb2RlKCkhPT02MSl7ZS5pbXBvcnRLaW5kPSJ0eXBlIjt0aGlzLm5leHQoKX1lbHNle2UuaW1wb3J0S2luZD0idmFsdWUifXJldHVybiB0aGlzLnRzUGFyc2VJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbihlLHRydWUpfWVsc2UgaWYodGhpcy5lYXQoMjcpKXtjb25zdCB0PWU7dC5leHByZXNzaW9uPXRoaXMucGFyc2VFeHByZXNzaW9uKCk7dGhpcy5zZW1pY29sb24oKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKHQsIlRTRXhwb3J0QXNzaWdubWVudCIpfWVsc2UgaWYodGhpcy5lYXRDb250ZXh0dWFsKDg3KSl7Y29uc3QgdD1lO3RoaXMuZXhwZWN0Q29udGV4dHVhbCgxMTgpO3QuaWQ9dGhpcy5wYXJzZUlkZW50aWZpZXIoKTt0aGlzLnNlbWljb2xvbigpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUodCwiVFNOYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbiIpfWVsc2V7aWYodGhpcy5pc0NvbnRleHR1YWwoMTIwKSYmdGhpcy5sb29rYWhlYWQoKS50eXBlPT09NSl7dGhpcy5uZXh0KCk7ZS5leHBvcnRLaW5kPSJ0eXBlIn1lbHNle2UuZXhwb3J0S2luZD0idmFsdWUifXJldHVybiBzdXBlci5wYXJzZUV4cG9ydChlKX19aXNBYnN0cmFjdENsYXNzKCl7cmV0dXJuIHRoaXMuaXNDb250ZXh0dWFsKDExNCkmJnRoaXMubG9va2FoZWFkKCkudHlwZT09PTc0fXBhcnNlRXhwb3J0RGVmYXVsdEV4cHJlc3Npb24oKXtpZih0aGlzLmlzQWJzdHJhY3RDbGFzcygpKXtjb25zdCBlPXRoaXMuc3RhcnROb2RlKCk7dGhpcy5uZXh0KCk7ZS5hYnN0cmFjdD10cnVlO3RoaXMucGFyc2VDbGFzcyhlLHRydWUsdHJ1ZSk7cmV0dXJuIGV9aWYodGhpcy5tYXRjaCgxMTkpKXtjb25zdCBlPXRoaXMuc3RhcnROb2RlKCk7dGhpcy5uZXh0KCk7Y29uc3QgdD10aGlzLnRzUGFyc2VJbnRlcmZhY2VEZWNsYXJhdGlvbihlKTtpZih0KXJldHVybiB0fXJldHVybiBzdXBlci5wYXJzZUV4cG9ydERlZmF1bHRFeHByZXNzaW9uKCl9cGFyc2VTdGF0ZW1lbnRDb250ZW50KGUsdCl7aWYodGhpcy5zdGF0ZS50eXBlPT09Njkpe2NvbnN0IGU9dGhpcy5sb29rYWhlYWQoKTtpZihlLnR5cGU9PT0xMTYpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTt0aGlzLm5leHQoKTt0aGlzLmV4cGVjdENvbnRleHR1YWwoMTE2KTtyZXR1cm4gdGhpcy50c1BhcnNlRW51bURlY2xhcmF0aW9uKGUsdHJ1ZSl9fXJldHVybiBzdXBlci5wYXJzZVN0YXRlbWVudENvbnRlbnQoZSx0KX1wYXJzZUFjY2Vzc01vZGlmaWVyKCl7cmV0dXJuIHRoaXMudHNQYXJzZU1vZGlmaWVyKFsicHVibGljIiwicHJvdGVjdGVkIiwicHJpdmF0ZSJdKX10c0hhc1NvbWVNb2RpZmllcnMoZSx0KXtyZXR1cm4gdC5zb21lKCh0PT57aWYoU2godCkpe3JldHVybiBlLmFjY2Vzc2liaWxpdHk9PT10fXJldHVybiEhZVt0XX0pKX10c0lzU3RhcnRPZlN0YXRpY0Jsb2Nrcygpe3JldHVybiB0aGlzLmlzQ29udGV4dHVhbCg5OCkmJnRoaXMubG9va2FoZWFkQ2hhckNvZGUoKT09PTEyM31wYXJzZUNsYXNzTWVtYmVyKGUsdCxyKXtjb25zdCBzPVsiZGVjbGFyZSIsInByaXZhdGUiLCJwdWJsaWMiLCJwcm90ZWN0ZWQiLCJvdmVycmlkZSIsImFic3RyYWN0IiwicmVhZG9ubHkiLCJzdGF0aWMiXTt0aGlzLnRzUGFyc2VNb2RpZmllcnModCxzLHVuZGVmaW5lZCx1bmRlZmluZWQsdHJ1ZSk7Y29uc3QgaT0oKT0+e2lmKHRoaXMudHNJc1N0YXJ0T2ZTdGF0aWNCbG9ja3MoKSl7dGhpcy5uZXh0KCk7dGhpcy5uZXh0KCk7aWYodGhpcy50c0hhc1NvbWVNb2RpZmllcnModCxzKSl7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLnBvcyxiaC5TdGF0aWNCbG9ja0Nhbm5vdEhhdmVNb2RpZmllcil9dGhpcy5wYXJzZUNsYXNzU3RhdGljQmxvY2soZSx0KX1lbHNle3RoaXMucGFyc2VDbGFzc01lbWJlcldpdGhJc1N0YXRpYyhlLHQsciwhIXQuc3RhdGljKX19O2lmKHQuZGVjbGFyZSl7dGhpcy50c0luQW1iaWVudENvbnRleHQoaSl9ZWxzZXtpKCl9fXBhcnNlQ2xhc3NNZW1iZXJXaXRoSXNTdGF0aWMoZSx0LHIscyl7Y29uc3QgaT10aGlzLnRzVHJ5UGFyc2VJbmRleFNpZ25hdHVyZSh0KTtpZihpKXtlLmJvZHkucHVzaChpKTtpZih0LmFic3RyYWN0KXt0aGlzLnJhaXNlKHQuc3RhcnQsYmguSW5kZXhTaWduYXR1cmVIYXNBYnN0cmFjdCl9aWYodC5hY2Nlc3NpYmlsaXR5KXt0aGlzLnJhaXNlKHQuc3RhcnQsYmguSW5kZXhTaWduYXR1cmVIYXNBY2Nlc3NpYmlsaXR5LHQuYWNjZXNzaWJpbGl0eSl9aWYodC5kZWNsYXJlKXt0aGlzLnJhaXNlKHQuc3RhcnQsYmguSW5kZXhTaWduYXR1cmVIYXNEZWNsYXJlKX1pZih0Lm92ZXJyaWRlKXt0aGlzLnJhaXNlKHQuc3RhcnQsYmguSW5kZXhTaWduYXR1cmVIYXNPdmVycmlkZSl9cmV0dXJufWlmKCF0aGlzLnN0YXRlLmluQWJzdHJhY3RDbGFzcyYmdC5hYnN0cmFjdCl7dGhpcy5yYWlzZSh0LnN0YXJ0LGJoLk5vbkFic3RyYWN0Q2xhc3NIYXNBYnN0cmFjdE1ldGhvZCl9aWYodC5vdmVycmlkZSl7aWYoIXIuaGFkU3VwZXJDbGFzcyl7dGhpcy5yYWlzZSh0LnN0YXJ0LGJoLk92ZXJyaWRlTm90SW5TdWJDbGFzcyl9fXN1cGVyLnBhcnNlQ2xhc3NNZW1iZXJXaXRoSXNTdGF0aWMoZSx0LHIscyl9cGFyc2VQb3N0TWVtYmVyTmFtZU1vZGlmaWVycyhlKXtjb25zdCB0PXRoaXMuZWF0KDE3KTtpZih0KWUub3B0aW9uYWw9dHJ1ZTtpZihlLnJlYWRvbmx5JiZ0aGlzLm1hdGNoKDEwKSl7dGhpcy5yYWlzZShlLnN0YXJ0LGJoLkNsYXNzTWV0aG9kSGFzUmVhZG9ubHkpfWlmKGUuZGVjbGFyZSYmdGhpcy5tYXRjaCgxMCkpe3RoaXMucmFpc2UoZS5zdGFydCxiaC5DbGFzc01ldGhvZEhhc0RlY2xhcmUpfX1wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoZSx0KXtjb25zdCByPXQudHlwZT09PSJJZGVudGlmaWVyIj90aGlzLnRzUGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KGUsdCk6dW5kZWZpbmVkO3JldHVybiByfHxzdXBlci5wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoZSx0KX1zaG91bGRQYXJzZUV4cG9ydERlY2xhcmF0aW9uKCl7aWYodGhpcy50c0lzRGVjbGFyYXRpb25TdGFydCgpKXJldHVybiB0cnVlO3JldHVybiBzdXBlci5zaG91bGRQYXJzZUV4cG9ydERlY2xhcmF0aW9uKCl9cGFyc2VDb25kaXRpb25hbChlLHQscixzKXtpZighdGhpcy5zdGF0ZS5tYXliZUluQXJyb3dQYXJhbWV0ZXJzfHwhdGhpcy5tYXRjaCgxNykpe3JldHVybiBzdXBlci5wYXJzZUNvbmRpdGlvbmFsKGUsdCxyLHMpfWNvbnN0IGk9dGhpcy50cnlQYXJzZSgoKCk9PnN1cGVyLnBhcnNlQ29uZGl0aW9uYWwoZSx0LHIpKSk7aWYoIWkubm9kZSl7aWYoaS5lcnJvcil7c3VwZXIuc2V0T3B0aW9uYWxQYXJhbWV0ZXJzRXJyb3IocyxpLmVycm9yKX1yZXR1cm4gZX1pZihpLmVycm9yKXRoaXMuc3RhdGU9aS5mYWlsU3RhdGU7cmV0dXJuIGkubm9kZX1wYXJzZVBhcmVuSXRlbShlLHQscil7ZT1zdXBlci5wYXJzZVBhcmVuSXRlbShlLHQscik7aWYodGhpcy5lYXQoMTcpKXtlLm9wdGlvbmFsPXRydWU7dGhpcy5yZXNldEVuZExvY2F0aW9uKGUpfWlmKHRoaXMubWF0Y2goMTQpKXtjb25zdCBzPXRoaXMuc3RhcnROb2RlQXQodCxyKTtzLmV4cHJlc3Npb249ZTtzLnR5cGVBbm5vdGF0aW9uPXRoaXMudHNQYXJzZVR5cGVBbm5vdGF0aW9uKCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShzLCJUU1R5cGVDYXN0RXhwcmVzc2lvbiIpfXJldHVybiBlfXBhcnNlRXhwb3J0RGVjbGFyYXRpb24oZSl7Y29uc3QgdD10aGlzLnN0YXRlLnN0YXJ0O2NvbnN0IHI9dGhpcy5zdGF0ZS5zdGFydExvYztjb25zdCBzPXRoaXMuZWF0Q29udGV4dHVhbCgxMTUpO2lmKHMmJih0aGlzLmlzQ29udGV4dHVhbCgxMTUpfHwhdGhpcy5zaG91bGRQYXJzZUV4cG9ydERlY2xhcmF0aW9uKCkpKXt0aHJvdyB0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsYmguRXhwZWN0ZWRBbWJpZW50QWZ0ZXJFeHBvcnREZWNsYXJlKX1sZXQgaTtpZihSbCh0aGlzLnN0YXRlLnR5cGUpKXtpPXRoaXMudHNUcnlQYXJzZUV4cG9ydERlY2xhcmF0aW9uKCl9aWYoIWkpe2k9c3VwZXIucGFyc2VFeHBvcnREZWNsYXJhdGlvbihlKX1pZihpJiYoaS50eXBlPT09IlRTSW50ZXJmYWNlRGVjbGFyYXRpb24ifHxpLnR5cGU9PT0iVFNUeXBlQWxpYXNEZWNsYXJhdGlvbiJ8fHMpKXtlLmV4cG9ydEtpbmQ9InR5cGUifWlmKGkmJnMpe3RoaXMucmVzZXRTdGFydExvY2F0aW9uKGksdCxyKTtpLmRlY2xhcmU9dHJ1ZX1yZXR1cm4gaX1wYXJzZUNsYXNzSWQoZSx0LHIpe2lmKCghdHx8cikmJnRoaXMuaXNDb250ZXh0dWFsKDEwNCkpe3JldHVybn1zdXBlci5wYXJzZUNsYXNzSWQoZSx0LHIsZS5kZWNsYXJlP2VjOkh1KTtjb25zdCBzPXRoaXMudHNUcnlQYXJzZVR5cGVQYXJhbWV0ZXJzKCk7aWYocyllLnR5cGVQYXJhbWV0ZXJzPXN9cGFyc2VDbGFzc1Byb3BlcnR5QW5ub3RhdGlvbihlKXtpZighZS5vcHRpb25hbCYmdGhpcy5lYXQoMzMpKXtlLmRlZmluaXRlPXRydWV9Y29uc3QgdD10aGlzLnRzVHJ5UGFyc2VUeXBlQW5ub3RhdGlvbigpO2lmKHQpZS50eXBlQW5ub3RhdGlvbj10fXBhcnNlQ2xhc3NQcm9wZXJ0eShlKXt0aGlzLnBhcnNlQ2xhc3NQcm9wZXJ0eUFubm90YXRpb24oZSk7aWYodGhpcy5zdGF0ZS5pc0FtYmllbnRDb250ZXh0JiZ0aGlzLm1hdGNoKDI3KSl7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLnN0YXJ0LGJoLkRlY2xhcmVDbGFzc0ZpZWxkSGFzSW5pdGlhbGl6ZXIpfWlmKGUuYWJzdHJhY3QmJnRoaXMubWF0Y2goMjcpKXtjb25zdHtrZXk6dH09ZTt0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsYmguQWJzdHJhY3RQcm9wZXJ0eUhhc0luaXRpYWxpemVyLHQudHlwZT09PSJJZGVudGlmaWVyIiYmIWUuY29tcHV0ZWQ/dC5uYW1lOmBbJHt0aGlzLmlucHV0LnNsaWNlKHQuc3RhcnQsdC5lbmQpfV1gKX1yZXR1cm4gc3VwZXIucGFyc2VDbGFzc1Byb3BlcnR5KGUpfXBhcnNlQ2xhc3NQcml2YXRlUHJvcGVydHkoZSl7aWYoZS5hYnN0cmFjdCl7dGhpcy5yYWlzZShlLnN0YXJ0LGJoLlByaXZhdGVFbGVtZW50SGFzQWJzdHJhY3QpfWlmKGUuYWNjZXNzaWJpbGl0eSl7dGhpcy5yYWlzZShlLnN0YXJ0LGJoLlByaXZhdGVFbGVtZW50SGFzQWNjZXNzaWJpbGl0eSxlLmFjY2Vzc2liaWxpdHkpfXRoaXMucGFyc2VDbGFzc1Byb3BlcnR5QW5ub3RhdGlvbihlKTtyZXR1cm4gc3VwZXIucGFyc2VDbGFzc1ByaXZhdGVQcm9wZXJ0eShlKX1wdXNoQ2xhc3NNZXRob2QoZSx0LHIscyxpLG4pe2NvbnN0IGE9dGhpcy50c1RyeVBhcnNlVHlwZVBhcmFtZXRlcnMoKTtpZihhJiZpKXt0aGlzLnJhaXNlKGEuc3RhcnQsYmguQ29uc3RydWN0b3JIYXNUeXBlUGFyYW1ldGVycyl9aWYodC5kZWNsYXJlJiYodC5raW5kPT09ImdldCJ8fHQua2luZD09PSJzZXQiKSl7dGhpcy5yYWlzZSh0LnN0YXJ0LGJoLkRlY2xhcmVBY2Nlc3Nvcix0LmtpbmQpfWlmKGEpdC50eXBlUGFyYW1ldGVycz1hO3N1cGVyLnB1c2hDbGFzc01ldGhvZChlLHQscixzLGksbil9cHVzaENsYXNzUHJpdmF0ZU1ldGhvZChlLHQscixzKXtjb25zdCBpPXRoaXMudHNUcnlQYXJzZVR5cGVQYXJhbWV0ZXJzKCk7aWYoaSl0LnR5cGVQYXJhbWV0ZXJzPWk7c3VwZXIucHVzaENsYXNzUHJpdmF0ZU1ldGhvZChlLHQscixzKX1kZWNsYXJlQ2xhc3NQcml2YXRlTWV0aG9kSW5TY29wZShlLHQpe2lmKGUudHlwZT09PSJUU0RlY2xhcmVNZXRob2QiKXJldHVybjtpZihlLnR5cGU9PT0iTWV0aG9kRGVmaW5pdGlvbiImJiFlLnZhbHVlLmJvZHkpcmV0dXJuO3N1cGVyLmRlY2xhcmVDbGFzc1ByaXZhdGVNZXRob2RJblNjb3BlKGUsdCl9cGFyc2VDbGFzc1N1cGVyKGUpe3N1cGVyLnBhcnNlQ2xhc3NTdXBlcihlKTtpZihlLnN1cGVyQ2xhc3MmJnRoaXMubWF0Y2goNDMpKXtlLnN1cGVyVHlwZVBhcmFtZXRlcnM9dGhpcy50c1BhcnNlVHlwZUFyZ3VtZW50cygpfWlmKHRoaXMuZWF0Q29udGV4dHVhbCgxMDQpKXtlLmltcGxlbWVudHM9dGhpcy50c1BhcnNlSGVyaXRhZ2VDbGF1c2UoImltcGxlbWVudHMiKX19cGFyc2VPYmpQcm9wVmFsdWUoZSl7Y29uc3QgdD10aGlzLnRzVHJ5UGFyc2VUeXBlUGFyYW1ldGVycygpO2lmKHQpZS50eXBlUGFyYW1ldGVycz10O2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLHM9bmV3IEFycmF5KHI+MT9yLTE6MCksaT0xO2k8cjtpKyspe3NbaS0xXT1hcmd1bWVudHNbaV19c3VwZXIucGFyc2VPYmpQcm9wVmFsdWUoZSwuLi5zKX1wYXJzZUZ1bmN0aW9uUGFyYW1zKGUsdCl7Y29uc3Qgcj10aGlzLnRzVHJ5UGFyc2VUeXBlUGFyYW1ldGVycygpO2lmKHIpZS50eXBlUGFyYW1ldGVycz1yO3N1cGVyLnBhcnNlRnVuY3Rpb25QYXJhbXMoZSx0KX1wYXJzZVZhcklkKGUsdCl7c3VwZXIucGFyc2VWYXJJZChlLHQpO2lmKGUuaWQudHlwZT09PSJJZGVudGlmaWVyIiYmdGhpcy5lYXQoMzMpKXtlLmRlZmluaXRlPXRydWV9Y29uc3Qgcj10aGlzLnRzVHJ5UGFyc2VUeXBlQW5ub3RhdGlvbigpO2lmKHIpe2UuaWQudHlwZUFubm90YXRpb249cjt0aGlzLnJlc2V0RW5kTG9jYXRpb24oZS5pZCl9fXBhcnNlQXN5bmNBcnJvd0Zyb21DYWxsRXhwcmVzc2lvbihlLHQpe2lmKHRoaXMubWF0Y2goMTQpKXtlLnJldHVyblR5cGU9dGhpcy50c1BhcnNlVHlwZUFubm90YXRpb24oKX1yZXR1cm4gc3VwZXIucGFyc2VBc3luY0Fycm93RnJvbUNhbGxFeHByZXNzaW9uKGUsdCl9cGFyc2VNYXliZUFzc2lnbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXt0W3JdPWFyZ3VtZW50c1tyXX12YXIgcyxpLG4sYSxvLGwsdTtsZXQgYztsZXQgaDtsZXQgcDtpZih0aGlzLmhhc1BsdWdpbigianN4IikmJih0aGlzLm1hdGNoKDEzMil8fHRoaXMubWF0Y2goNDMpKSl7Yz10aGlzLnN0YXRlLmNsb25lKCk7aD10aGlzLnRyeVBhcnNlKCgoKT0+c3VwZXIucGFyc2VNYXliZUFzc2lnbiguLi50KSksYyk7aWYoIWguZXJyb3IpcmV0dXJuIGgubm9kZTtjb25zdHtjb250ZXh0OmV9PXRoaXMuc3RhdGU7aWYoZVtlLmxlbmd0aC0xXT09PWdsLmpfb1RhZyl7ZS5sZW5ndGgtPTJ9ZWxzZSBpZihlW2UubGVuZ3RoLTFdPT09Z2wual9leHByKXtlLmxlbmd0aC09MX19aWYoISgocz1oKSE9bnVsbCYmcy5lcnJvcikmJiF0aGlzLm1hdGNoKDQzKSl7cmV0dXJuIHN1cGVyLnBhcnNlTWF5YmVBc3NpZ24oLi4udCl9bGV0IGY7Yz1jfHx0aGlzLnN0YXRlLmNsb25lKCk7Y29uc3QgZD10aGlzLnRyeVBhcnNlKChlPT57dmFyIHIscztmPXRoaXMudHNQYXJzZVR5cGVQYXJhbWV0ZXJzKCk7Y29uc3QgaT1zdXBlci5wYXJzZU1heWJlQXNzaWduKC4uLnQpO2lmKGkudHlwZSE9PSJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiJ8fChyPWkuZXh0cmEpIT1udWxsJiZyLnBhcmVudGhlc2l6ZWQpe2UoKX1pZigoKHM9Zik9PW51bGw/dm9pZCAwOnMucGFyYW1zLmxlbmd0aCkhPT0wKXt0aGlzLnJlc2V0U3RhcnRMb2NhdGlvbkZyb21Ob2RlKGksZil9aS50eXBlUGFyYW1ldGVycz1mO3JldHVybiBpfSksYyk7aWYoIWQuZXJyb3ImJiFkLmFib3J0ZWQpe2lmKGYpdGhpcy5yZXBvcnRSZXNlcnZlZEFycm93VHlwZVBhcmFtKGYpO3JldHVybiBkLm5vZGV9aWYoIWgpe3ZoKCF0aGlzLmhhc1BsdWdpbigianN4IikpO3A9dGhpcy50cnlQYXJzZSgoKCk9PnN1cGVyLnBhcnNlTWF5YmVBc3NpZ24oLi4udCkpLGMpO2lmKCFwLmVycm9yKXJldHVybiBwLm5vZGV9aWYoKGk9aCkhPW51bGwmJmkubm9kZSl7dGhpcy5zdGF0ZT1oLmZhaWxTdGF0ZTtyZXR1cm4gaC5ub2RlfWlmKGQubm9kZSl7dGhpcy5zdGF0ZT1kLmZhaWxTdGF0ZTtpZihmKXRoaXMucmVwb3J0UmVzZXJ2ZWRBcnJvd1R5cGVQYXJhbShmKTtyZXR1cm4gZC5ub2RlfWlmKChuPXApIT1udWxsJiZuLm5vZGUpe3RoaXMuc3RhdGU9cC5mYWlsU3RhdGU7cmV0dXJuIHAubm9kZX1pZigoYT1oKSE9bnVsbCYmYS50aHJvd24pdGhyb3cgaC5lcnJvcjtpZihkLnRocm93bil0aHJvdyBkLmVycm9yO2lmKChvPXApIT1udWxsJiZvLnRocm93bil0aHJvdyBwLmVycm9yO3Rocm93KChsPWgpPT1udWxsP3ZvaWQgMDpsLmVycm9yKXx8ZC5lcnJvcnx8KCh1PXApPT1udWxsP3ZvaWQgMDp1LmVycm9yKX1yZXBvcnRSZXNlcnZlZEFycm93VHlwZVBhcmFtKGUpe3ZhciB0O2lmKGUucGFyYW1zLmxlbmd0aD09PTEmJiEoKHQ9ZS5leHRyYSkhPW51bGwmJnQudHJhaWxpbmdDb21tYSkmJnRoaXMuZ2V0UGx1Z2luT3B0aW9uKCJ0eXBlc2NyaXB0IiwiZGlzYWxsb3dBbWJpZ3VvdXNKU1hMaWtlIikpe3RoaXMucmFpc2UoZS5zdGFydCxiaC5SZXNlcnZlZEFycm93VHlwZVBhcmFtKX19cGFyc2VNYXliZVVuYXJ5KGUpe2lmKCF0aGlzLmhhc1BsdWdpbigianN4IikmJnRoaXMubWF0Y2goNDMpKXtyZXR1cm4gdGhpcy50c1BhcnNlVHlwZUFzc2VydGlvbigpfWVsc2V7cmV0dXJuIHN1cGVyLnBhcnNlTWF5YmVVbmFyeShlKX19cGFyc2VBcnJvdyhlKXtpZih0aGlzLm1hdGNoKDE0KSl7Y29uc3QgdD10aGlzLnRyeVBhcnNlKChlPT57Y29uc3QgdD10aGlzLnRzUGFyc2VUeXBlT3JUeXBlUHJlZGljYXRlQW5ub3RhdGlvbigxNCk7aWYodGhpcy5jYW5JbnNlcnRTZW1pY29sb24oKXx8IXRoaXMubWF0Y2goMTkpKWUoKTtyZXR1cm4gdH0pKTtpZih0LmFib3J0ZWQpcmV0dXJuO2lmKCF0LnRocm93bil7aWYodC5lcnJvcil0aGlzLnN0YXRlPXQuZmFpbFN0YXRlO2UucmV0dXJuVHlwZT10Lm5vZGV9fXJldHVybiBzdXBlci5wYXJzZUFycm93KGUpfXBhcnNlQXNzaWduYWJsZUxpc3RJdGVtVHlwZXMoZSl7aWYodGhpcy5lYXQoMTcpKXtpZihlLnR5cGUhPT0iSWRlbnRpZmllciImJiF0aGlzLnN0YXRlLmlzQW1iaWVudENvbnRleHQmJiF0aGlzLnN0YXRlLmluVHlwZSl7dGhpcy5yYWlzZShlLnN0YXJ0LGJoLlBhdHRlcm5Jc09wdGlvbmFsKX1lLm9wdGlvbmFsPXRydWV9Y29uc3QgdD10aGlzLnRzVHJ5UGFyc2VUeXBlQW5ub3RhdGlvbigpO2lmKHQpZS50eXBlQW5ub3RhdGlvbj10O3RoaXMucmVzZXRFbmRMb2NhdGlvbihlKTtyZXR1cm4gZX1pc0Fzc2lnbmFibGUoZSx0KXtzd2l0Y2goZS50eXBlKXtjYXNlIlRTVHlwZUNhc3RFeHByZXNzaW9uIjpyZXR1cm4gdGhpcy5pc0Fzc2lnbmFibGUoZS5leHByZXNzaW9uLHQpO2Nhc2UiVFNQYXJhbWV0ZXJQcm9wZXJ0eSI6cmV0dXJuIHRydWU7ZGVmYXVsdDpyZXR1cm4gc3VwZXIuaXNBc3NpZ25hYmxlKGUsdCl9fXRvQXNzaWduYWJsZShlLHQpe2lmKHQ9PT12b2lkIDApe3Q9ZmFsc2V9c3dpdGNoKGUudHlwZSl7Y2FzZSJUU1R5cGVDYXN0RXhwcmVzc2lvbiI6cmV0dXJuIHN1cGVyLnRvQXNzaWduYWJsZSh0aGlzLnR5cGVDYXN0VG9QYXJhbWV0ZXIoZSksdCk7Y2FzZSJUU1BhcmFtZXRlclByb3BlcnR5IjpyZXR1cm4gc3VwZXIudG9Bc3NpZ25hYmxlKGUsdCk7Y2FzZSJQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiI6cmV0dXJuIHRoaXMudG9Bc3NpZ25hYmxlUGFyZW50aGVzaXplZEV4cHJlc3Npb24oZSx0KTtjYXNlIlRTQXNFeHByZXNzaW9uIjpjYXNlIlRTTm9uTnVsbEV4cHJlc3Npb24iOmNhc2UiVFNUeXBlQXNzZXJ0aW9uIjplLmV4cHJlc3Npb249dGhpcy50b0Fzc2lnbmFibGUoZS5leHByZXNzaW9uLHQpO3JldHVybiBlO2RlZmF1bHQ6cmV0dXJuIHN1cGVyLnRvQXNzaWduYWJsZShlLHQpfX10b0Fzc2lnbmFibGVQYXJlbnRoZXNpemVkRXhwcmVzc2lvbihlLHQpe3N3aXRjaChlLmV4cHJlc3Npb24udHlwZSl7Y2FzZSJUU0FzRXhwcmVzc2lvbiI6Y2FzZSJUU05vbk51bGxFeHByZXNzaW9uIjpjYXNlIlRTVHlwZUFzc2VydGlvbiI6Y2FzZSJQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiI6ZS5leHByZXNzaW9uPXRoaXMudG9Bc3NpZ25hYmxlKGUuZXhwcmVzc2lvbix0KTtyZXR1cm4gZTtkZWZhdWx0OnJldHVybiBzdXBlci50b0Fzc2lnbmFibGUoZSx0KX19Y2hlY2tMVmFsKGUsdCl7dmFyIHI7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkocz4yP3MtMjowKSxuPTI7bjxzO24rKyl7aVtuLTJdPWFyZ3VtZW50c1tuXX1zd2l0Y2goZS50eXBlKXtjYXNlIlRTVHlwZUNhc3RFeHByZXNzaW9uIjpyZXR1cm47Y2FzZSJUU1BhcmFtZXRlclByb3BlcnR5Ijp0aGlzLmNoZWNrTFZhbChlLnBhcmFtZXRlciwicGFyYW1ldGVyIHByb3BlcnR5IiwuLi5pKTtyZXR1cm47Y2FzZSJUU0FzRXhwcmVzc2lvbiI6Y2FzZSJUU1R5cGVBc3NlcnRpb24iOmlmKCFpWzBdJiZ0IT09InBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbiImJiEoKHI9ZS5leHRyYSkhPW51bGwmJnIucGFyZW50aGVzaXplZCkpe3RoaXMucmFpc2UoZS5zdGFydCxjbC5JbnZhbGlkTGhzLHQpO2JyZWFrfXRoaXMuY2hlY2tMVmFsKGUuZXhwcmVzc2lvbiwicGFyZW50aGVzaXplZCBleHByZXNzaW9uIiwuLi5pKTtyZXR1cm47Y2FzZSJUU05vbk51bGxFeHByZXNzaW9uIjp0aGlzLmNoZWNrTFZhbChlLmV4cHJlc3Npb24sdCwuLi5pKTtyZXR1cm47ZGVmYXVsdDpzdXBlci5jaGVja0xWYWwoZSx0LC4uLmkpO3JldHVybn19cGFyc2VCaW5kaW5nQXRvbSgpe3N3aXRjaCh0aGlzLnN0YXRlLnR5cGUpe2Nhc2UgNzI6cmV0dXJuIHRoaXMucGFyc2VJZGVudGlmaWVyKHRydWUpO2RlZmF1bHQ6cmV0dXJuIHN1cGVyLnBhcnNlQmluZGluZ0F0b20oKX19cGFyc2VNYXliZURlY29yYXRvckFyZ3VtZW50cyhlKXtpZih0aGlzLm1hdGNoKDQzKSl7Y29uc3QgdD10aGlzLnRzUGFyc2VUeXBlQXJndW1lbnRzKCk7aWYodGhpcy5tYXRjaCgxMCkpe2NvbnN0IHI9c3VwZXIucGFyc2VNYXliZURlY29yYXRvckFyZ3VtZW50cyhlKTtyLnR5cGVQYXJhbWV0ZXJzPXQ7cmV0dXJuIHJ9dGhpcy51bmV4cGVjdGVkKHRoaXMuc3RhdGUuc3RhcnQsMTApfXJldHVybiBzdXBlci5wYXJzZU1heWJlRGVjb3JhdG9yQXJndW1lbnRzKGUpfWNoZWNrQ29tbWFBZnRlclJlc3QoZSl7aWYodGhpcy5zdGF0ZS5pc0FtYmllbnRDb250ZXh0JiZ0aGlzLm1hdGNoKDEyKSYmdGhpcy5sb29rYWhlYWRDaGFyQ29kZSgpPT09ZSl7dGhpcy5uZXh0KCl9ZWxzZXtzdXBlci5jaGVja0NvbW1hQWZ0ZXJSZXN0KGUpfX1pc0NsYXNzTWV0aG9kKCl7cmV0dXJuIHRoaXMubWF0Y2goNDMpfHxzdXBlci5pc0NsYXNzTWV0aG9kKCl9aXNDbGFzc1Byb3BlcnR5KCl7cmV0dXJuIHRoaXMubWF0Y2goMzMpfHx0aGlzLm1hdGNoKDE0KXx8c3VwZXIuaXNDbGFzc1Byb3BlcnR5KCl9cGFyc2VNYXliZURlZmF1bHQoKXtjb25zdCBlPXN1cGVyLnBhcnNlTWF5YmVEZWZhdWx0KC4uLmFyZ3VtZW50cyk7aWYoZS50eXBlPT09IkFzc2lnbm1lbnRQYXR0ZXJuIiYmZS50eXBlQW5ub3RhdGlvbiYmZS5yaWdodC5zdGFydDxlLnR5cGVBbm5vdGF0aW9uLnN0YXJ0KXt0aGlzLnJhaXNlKGUudHlwZUFubm90YXRpb24uc3RhcnQsYmguVHlwZUFubm90YXRpb25BZnRlckFzc2lnbil9cmV0dXJuIGV9Z2V0VG9rZW5Gcm9tQ29kZShlKXtpZih0aGlzLnN0YXRlLmluVHlwZSl7aWYoZT09PTYyKXtyZXR1cm4gdGhpcy5maW5pc2hPcCg0NCwxKX1pZihlPT09NjApe3JldHVybiB0aGlzLmZpbmlzaE9wKDQzLDEpfX1yZXR1cm4gc3VwZXIuZ2V0VG9rZW5Gcm9tQ29kZShlKX1yZVNjYW5fbHRfZ3QoKXtjb25zdHt0eXBlOmV9PXRoaXMuc3RhdGU7aWYoZT09PTQzKXt0aGlzLnN0YXRlLnBvcy09MTt0aGlzLnJlYWRUb2tlbl9sdCgpfWVsc2UgaWYoZT09PTQ0KXt0aGlzLnN0YXRlLnBvcy09MTt0aGlzLnJlYWRUb2tlbl9ndCgpfX10b0Fzc2lnbmFibGVMaXN0KGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtjb25zdCByPWVbdF07aWYoIXIpY29udGludWU7c3dpdGNoKHIudHlwZSl7Y2FzZSJUU1R5cGVDYXN0RXhwcmVzc2lvbiI6ZVt0XT10aGlzLnR5cGVDYXN0VG9QYXJhbWV0ZXIocik7YnJlYWs7Y2FzZSJUU0FzRXhwcmVzc2lvbiI6Y2FzZSJUU1R5cGVBc3NlcnRpb24iOmlmKCF0aGlzLnN0YXRlLm1heWJlSW5BcnJvd1BhcmFtZXRlcnMpe2VbdF09dGhpcy50eXBlQ2FzdFRvUGFyYW1ldGVyKHIpfWVsc2V7dGhpcy5yYWlzZShyLnN0YXJ0LGJoLlVuZXhwZWN0ZWRUeXBlQ2FzdEluUGFyYW1ldGVyKX1icmVha319cmV0dXJuIHN1cGVyLnRvQXNzaWduYWJsZUxpc3QoLi4uYXJndW1lbnRzKX10eXBlQ2FzdFRvUGFyYW1ldGVyKGUpe2UuZXhwcmVzc2lvbi50eXBlQW5ub3RhdGlvbj1lLnR5cGVBbm5vdGF0aW9uO3RoaXMucmVzZXRFbmRMb2NhdGlvbihlLmV4cHJlc3Npb24sZS50eXBlQW5ub3RhdGlvbi5lbmQsZS50eXBlQW5ub3RhdGlvbi5sb2MuZW5kKTtyZXR1cm4gZS5leHByZXNzaW9ufXNob3VsZFBhcnNlQXJyb3coZSl7aWYodGhpcy5tYXRjaCgxNCkpe3JldHVybiBlLmV2ZXJ5KChlPT50aGlzLmlzQXNzaWduYWJsZShlLHRydWUpKSl9cmV0dXJuIHN1cGVyLnNob3VsZFBhcnNlQXJyb3coZSl9c2hvdWxkUGFyc2VBc3luY0Fycm93KCl7cmV0dXJuIHRoaXMubWF0Y2goMTQpfHxzdXBlci5zaG91bGRQYXJzZUFzeW5jQXJyb3coKX1jYW5IYXZlTGVhZGluZ0RlY29yYXRvcigpe3JldHVybiBzdXBlci5jYW5IYXZlTGVhZGluZ0RlY29yYXRvcigpfHx0aGlzLmlzQWJzdHJhY3RDbGFzcygpfWpzeFBhcnNlT3BlbmluZ0VsZW1lbnRBZnRlck5hbWUoZSl7aWYodGhpcy5tYXRjaCg0Mykpe2NvbnN0IHQ9dGhpcy50c1RyeVBhcnNlQW5kQ2F0Y2goKCgpPT50aGlzLnRzUGFyc2VUeXBlQXJndW1lbnRzKCkpKTtpZih0KWUudHlwZVBhcmFtZXRlcnM9dH1yZXR1cm4gc3VwZXIuanN4UGFyc2VPcGVuaW5nRWxlbWVudEFmdGVyTmFtZShlKX1nZXRHZXR0ZXJTZXR0ZXJFeHBlY3RlZFBhcmFtQ291bnQoZSl7Y29uc3QgdD1zdXBlci5nZXRHZXR0ZXJTZXR0ZXJFeHBlY3RlZFBhcmFtQ291bnQoZSk7Y29uc3Qgcj10aGlzLmdldE9iamVjdE9yQ2xhc3NNZXRob2RQYXJhbXMoZSk7Y29uc3Qgcz1yWzBdO2NvbnN0IGk9cyYmdGhpcy5pc1RoaXNQYXJhbShzKTtyZXR1cm4gaT90KzE6dH1wYXJzZUNhdGNoQ2xhdXNlUGFyYW0oKXtjb25zdCBlPXN1cGVyLnBhcnNlQ2F0Y2hDbGF1c2VQYXJhbSgpO2NvbnN0IHQ9dGhpcy50c1RyeVBhcnNlVHlwZUFubm90YXRpb24oKTtpZih0KXtlLnR5cGVBbm5vdGF0aW9uPXQ7dGhpcy5yZXNldEVuZExvY2F0aW9uKGUpfXJldHVybiBlfXRzSW5BbWJpZW50Q29udGV4dChlKXtjb25zdCB0PXRoaXMuc3RhdGUuaXNBbWJpZW50Q29udGV4dDt0aGlzLnN0YXRlLmlzQW1iaWVudENvbnRleHQ9dHJ1ZTt0cnl7cmV0dXJuIGUoKX1maW5hbGx5e3RoaXMuc3RhdGUuaXNBbWJpZW50Q29udGV4dD10fX1wYXJzZUNsYXNzKGUpe2NvbnN0IHQ9dGhpcy5zdGF0ZS5pbkFic3RyYWN0Q2xhc3M7dGhpcy5zdGF0ZS5pbkFic3RyYWN0Q2xhc3M9ISFlLmFic3RyYWN0O3RyeXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxzPW5ldyBBcnJheShyPjE/ci0xOjApLGk9MTtpPHI7aSsrKXtzW2ktMV09YXJndW1lbnRzW2ldfXJldHVybiBzdXBlci5wYXJzZUNsYXNzKGUsLi4ucyl9ZmluYWxseXt0aGlzLnN0YXRlLmluQWJzdHJhY3RDbGFzcz10fX10c1BhcnNlQWJzdHJhY3REZWNsYXJhdGlvbihlKXtpZih0aGlzLm1hdGNoKDc0KSl7ZS5hYnN0cmFjdD10cnVlO3JldHVybiB0aGlzLnBhcnNlQ2xhc3MoZSx0cnVlLGZhbHNlKX1lbHNlIGlmKHRoaXMuaXNDb250ZXh0dWFsKDExOSkpe2lmKCF0aGlzLmhhc0ZvbGxvd2luZ0xpbmVCcmVhaygpKXtlLmFic3RyYWN0PXRydWU7dGhpcy5yYWlzZShlLnN0YXJ0LGJoLk5vbkNsYXNzTWV0aG9kUHJvcGVydHlIYXNBYnN0cmFjdE1vZGlmZXIpO3RoaXMubmV4dCgpO3JldHVybiB0aGlzLnRzUGFyc2VJbnRlcmZhY2VEZWNsYXJhdGlvbihlKX19ZWxzZXt0aGlzLnVuZXhwZWN0ZWQobnVsbCw3NCl9fXBhcnNlTWV0aG9kKCl7Y29uc3QgZT1zdXBlci5wYXJzZU1ldGhvZCguLi5hcmd1bWVudHMpO2lmKGUuYWJzdHJhY3Qpe2NvbnN0IHQ9dGhpcy5oYXNQbHVnaW4oImVzdHJlZSIpPyEhZS52YWx1ZS5ib2R5OiEhZS5ib2R5O2lmKHQpe2NvbnN0e2tleTp0fT1lO3RoaXMucmFpc2UoZS5zdGFydCxiaC5BYnN0cmFjdE1ldGhvZEhhc0ltcGxlbWVudGF0aW9uLHQudHlwZT09PSJJZGVudGlmaWVyIiYmIWUuY29tcHV0ZWQ/dC5uYW1lOmBbJHt0aGlzLmlucHV0LnNsaWNlKHQuc3RhcnQsdC5lbmQpfV1gKX19cmV0dXJuIGV9dHNQYXJzZVR5cGVQYXJhbWV0ZXJOYW1lKCl7Y29uc3QgZT10aGlzLnBhcnNlSWRlbnRpZmllcigpO3JldHVybiBlLm5hbWV9c2hvdWxkUGFyc2VBc0FtYmllbnRDb250ZXh0KCl7cmV0dXJuISF0aGlzLmdldFBsdWdpbk9wdGlvbigidHlwZXNjcmlwdCIsImR0cyIpfXBhcnNlKCl7aWYodGhpcy5zaG91bGRQYXJzZUFzQW1iaWVudENvbnRleHQoKSl7dGhpcy5zdGF0ZS5pc0FtYmllbnRDb250ZXh0PXRydWV9cmV0dXJuIHN1cGVyLnBhcnNlKCl9Z2V0RXhwcmVzc2lvbigpe2lmKHRoaXMuc2hvdWxkUGFyc2VBc0FtYmllbnRDb250ZXh0KCkpe3RoaXMuc3RhdGUuaXNBbWJpZW50Q29udGV4dD10cnVlfXJldHVybiBzdXBlci5nZXRFeHByZXNzaW9uKCl9cGFyc2VFeHBvcnRTcGVjaWZpZXIoZSx0LHIscyl7aWYoIXQmJnMpe3RoaXMucGFyc2VUeXBlT25seUltcG9ydEV4cG9ydFNwZWNpZmllcihlLGZhbHNlLHIpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiRXhwb3J0U3BlY2lmaWVyIil9ZS5leHBvcnRLaW5kPSJ2YWx1ZSI7cmV0dXJuIHN1cGVyLnBhcnNlRXhwb3J0U3BlY2lmaWVyKGUsdCxyLHMpfXBhcnNlSW1wb3J0U3BlY2lmaWVyKGUsdCxyLHMpe2lmKCF0JiZzKXt0aGlzLnBhcnNlVHlwZU9ubHlJbXBvcnRFeHBvcnRTcGVjaWZpZXIoZSx0cnVlLHIpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiSW1wb3J0U3BlY2lmaWVyIil9ZS5pbXBvcnRLaW5kPSJ2YWx1ZSI7cmV0dXJuIHN1cGVyLnBhcnNlSW1wb3J0U3BlY2lmaWVyKGUsdCxyLHMpfXBhcnNlVHlwZU9ubHlJbXBvcnRFeHBvcnRTcGVjaWZpZXIoZSx0LHIpe2NvbnN0IHM9dD8iaW1wb3J0ZWQiOiJsb2NhbCI7Y29uc3QgaT10PyJsb2NhbCI6ImV4cG9ydGVkIjtsZXQgbj1lW3NdO2xldCBhO2xldCBvPWZhbHNlO2xldCBsPXRydWU7Y29uc3QgdT1uLnN0YXJ0O2lmKHRoaXMuaXNDb250ZXh0dWFsKDg3KSl7Y29uc3QgZT10aGlzLnBhcnNlSWRlbnRpZmllcigpO2lmKHRoaXMuaXNDb250ZXh0dWFsKDg3KSl7Y29uc3QgdD10aGlzLnBhcnNlSWRlbnRpZmllcigpO2lmKFVsKHRoaXMuc3RhdGUudHlwZSkpe289dHJ1ZTtuPWU7YT10aGlzLnBhcnNlSWRlbnRpZmllcigpO2w9ZmFsc2V9ZWxzZXthPXQ7bD1mYWxzZX19ZWxzZSBpZihVbCh0aGlzLnN0YXRlLnR5cGUpKXtsPWZhbHNlO2E9dGhpcy5wYXJzZUlkZW50aWZpZXIoKX1lbHNle289dHJ1ZTtuPWV9fWVsc2UgaWYoVWwodGhpcy5zdGF0ZS50eXBlKSl7bz10cnVlO249dGhpcy5wYXJzZUlkZW50aWZpZXIoKX1pZihvJiZyKXt0aGlzLnJhaXNlKHUsdD9iaC5UeXBlTW9kaWZpZXJJc1VzZWRJblR5cGVJbXBvcnRzOmJoLlR5cGVNb2RpZmllcklzVXNlZEluVHlwZUV4cG9ydHMpfWVbc109bjtlW2ldPWE7Y29uc3QgYz10PyJpbXBvcnRLaW5kIjoiZXhwb3J0S2luZCI7ZVtjXT1vPyJ0eXBlIjoidmFsdWUiO2lmKGwmJnRoaXMuZWF0Q29udGV4dHVhbCg4Nykpe2VbaV09dD90aGlzLnBhcnNlSWRlbnRpZmllcigpOnRoaXMucGFyc2VNb2R1bGVFeHBvcnROYW1lKCl9aWYoIWVbaV0pe2VbaV09WWMoZVtzXSl9aWYodCl7dGhpcy5jaGVja0xWYWwoZVtpXSwiaW1wb3J0IHNwZWNpZmllciIsV3UpfX19O2NvbnN0IEFoPWZsKHtDbGFzc05hbWVJc1JlcXVpcmVkOiJBIGNsYXNzIG5hbWUgaXMgcmVxdWlyZWQuIn0sdWwuU3ludGF4RXJyb3IpO3ZhciB3aD1lPT5jbGFzcyBleHRlbmRzIGV7cGFyc2VQbGFjZWhvbGRlcihlKXtpZih0aGlzLm1hdGNoKDEzNCkpe2NvbnN0IHQ9dGhpcy5zdGFydE5vZGUoKTt0aGlzLm5leHQoKTt0aGlzLmFzc2VydE5vU3BhY2UoIlVuZXhwZWN0ZWQgc3BhY2UgaW4gcGxhY2Vob2xkZXIuIik7dC5uYW1lPXN1cGVyLnBhcnNlSWRlbnRpZmllcih0cnVlKTt0aGlzLmFzc2VydE5vU3BhY2UoIlVuZXhwZWN0ZWQgc3BhY2UgaW4gcGxhY2Vob2xkZXIuIik7dGhpcy5leHBlY3QoMTM0KTtyZXR1cm4gdGhpcy5maW5pc2hQbGFjZWhvbGRlcih0LGUpfX1maW5pc2hQbGFjZWhvbGRlcihlLHQpe2NvbnN0IHI9ISEoZS5leHBlY3RlZE5vZGUmJmUudHlwZT09PSJQbGFjZWhvbGRlciIpO2UuZXhwZWN0ZWROb2RlPXQ7cmV0dXJuIHI/ZTp0aGlzLmZpbmlzaE5vZGUoZSwiUGxhY2Vob2xkZXIiKX1nZXRUb2tlbkZyb21Db2RlKGUpe2lmKGU9PT0zNyYmdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuc3RhdGUucG9zKzEpPT09Mzcpe3JldHVybiB0aGlzLmZpbmlzaE9wKDEzNCwyKX1yZXR1cm4gc3VwZXIuZ2V0VG9rZW5Gcm9tQ29kZSguLi5hcmd1bWVudHMpfXBhcnNlRXhwckF0b20oKXtyZXR1cm4gdGhpcy5wYXJzZVBsYWNlaG9sZGVyKCJFeHByZXNzaW9uIil8fHN1cGVyLnBhcnNlRXhwckF0b20oLi4uYXJndW1lbnRzKX1wYXJzZUlkZW50aWZpZXIoKXtyZXR1cm4gdGhpcy5wYXJzZVBsYWNlaG9sZGVyKCJJZGVudGlmaWVyIil8fHN1cGVyLnBhcnNlSWRlbnRpZmllciguLi5hcmd1bWVudHMpfWNoZWNrUmVzZXJ2ZWRXb3JkKGUpe2lmKGUhPT11bmRlZmluZWQpc3VwZXIuY2hlY2tSZXNlcnZlZFdvcmQoLi4uYXJndW1lbnRzKX1wYXJzZUJpbmRpbmdBdG9tKCl7cmV0dXJuIHRoaXMucGFyc2VQbGFjZWhvbGRlcigiUGF0dGVybiIpfHxzdXBlci5wYXJzZUJpbmRpbmdBdG9tKC4uLmFyZ3VtZW50cyl9Y2hlY2tMVmFsKGUpe2lmKGUudHlwZSE9PSJQbGFjZWhvbGRlciIpc3VwZXIuY2hlY2tMVmFsKC4uLmFyZ3VtZW50cyl9dG9Bc3NpZ25hYmxlKGUpe2lmKGUmJmUudHlwZT09PSJQbGFjZWhvbGRlciImJmUuZXhwZWN0ZWROb2RlPT09IkV4cHJlc3Npb24iKXtlLmV4cGVjdGVkTm9kZT0iUGF0dGVybiI7cmV0dXJuIGV9cmV0dXJuIHN1cGVyLnRvQXNzaWduYWJsZSguLi5hcmd1bWVudHMpfWlzTGV0KGUpe2lmKHN1cGVyLmlzTGV0KGUpKXtyZXR1cm4gdHJ1ZX1pZighdGhpcy5pc0NvbnRleHR1YWwoOTMpKXtyZXR1cm4gZmFsc2V9aWYoZSlyZXR1cm4gZmFsc2U7Y29uc3QgdD10aGlzLmxvb2thaGVhZCgpO2lmKHQudHlwZT09PTEzNCl7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfXZlcmlmeUJyZWFrQ29udGludWUoZSl7aWYoZS5sYWJlbCYmZS5sYWJlbC50eXBlPT09IlBsYWNlaG9sZGVyIilyZXR1cm47c3VwZXIudmVyaWZ5QnJlYWtDb250aW51ZSguLi5hcmd1bWVudHMpfXBhcnNlRXhwcmVzc2lvblN0YXRlbWVudChlLHQpe2lmKHQudHlwZSE9PSJQbGFjZWhvbGRlciJ8fHQuZXh0cmEmJnQuZXh0cmEucGFyZW50aGVzaXplZCl7cmV0dXJuIHN1cGVyLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCguLi5hcmd1bWVudHMpfWlmKHRoaXMubWF0Y2goMTQpKXtjb25zdCByPWU7ci5sYWJlbD10aGlzLmZpbmlzaFBsYWNlaG9sZGVyKHQsIklkZW50aWZpZXIiKTt0aGlzLm5leHQoKTtyLmJvZHk9dGhpcy5wYXJzZVN0YXRlbWVudCgibGFiZWwiKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKHIsIkxhYmVsZWRTdGF0ZW1lbnQiKX10aGlzLnNlbWljb2xvbigpO2UubmFtZT10Lm5hbWU7cmV0dXJuIHRoaXMuZmluaXNoUGxhY2Vob2xkZXIoZSwiU3RhdGVtZW50Iil9cGFyc2VCbG9jaygpe3JldHVybiB0aGlzLnBhcnNlUGxhY2Vob2xkZXIoIkJsb2NrU3RhdGVtZW50Iil8fHN1cGVyLnBhcnNlQmxvY2soLi4uYXJndW1lbnRzKX1wYXJzZUZ1bmN0aW9uSWQoKXtyZXR1cm4gdGhpcy5wYXJzZVBsYWNlaG9sZGVyKCJJZGVudGlmaWVyIil8fHN1cGVyLnBhcnNlRnVuY3Rpb25JZCguLi5hcmd1bWVudHMpfXBhcnNlQ2xhc3MoZSx0LHIpe2NvbnN0IHM9dD8iQ2xhc3NEZWNsYXJhdGlvbiI6IkNsYXNzRXhwcmVzc2lvbiI7dGhpcy5uZXh0KCk7dGhpcy50YWtlRGVjb3JhdG9ycyhlKTtjb25zdCBpPXRoaXMuc3RhdGUuc3RyaWN0O2NvbnN0IG49dGhpcy5wYXJzZVBsYWNlaG9sZGVyKCJJZGVudGlmaWVyIik7aWYobil7aWYodGhpcy5tYXRjaCg3NSl8fHRoaXMubWF0Y2goMTM0KXx8dGhpcy5tYXRjaCg1KSl7ZS5pZD1ufWVsc2UgaWYocnx8IXQpe2UuaWQ9bnVsbDtlLmJvZHk9dGhpcy5maW5pc2hQbGFjZWhvbGRlcihuLCJDbGFzc0JvZHkiKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUscyl9ZWxzZXt0aGlzLnVuZXhwZWN0ZWQobnVsbCxBaC5DbGFzc05hbWVJc1JlcXVpcmVkKX19ZWxzZXt0aGlzLnBhcnNlQ2xhc3NJZChlLHQscil9dGhpcy5wYXJzZUNsYXNzU3VwZXIoZSk7ZS5ib2R5PXRoaXMucGFyc2VQbGFjZWhvbGRlcigiQ2xhc3NCb2R5Iil8fHRoaXMucGFyc2VDbGFzc0JvZHkoISFlLnN1cGVyQ2xhc3MsaSk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLHMpfXBhcnNlRXhwb3J0KGUpe2NvbnN0IHQ9dGhpcy5wYXJzZVBsYWNlaG9sZGVyKCJJZGVudGlmaWVyIik7aWYoIXQpcmV0dXJuIHN1cGVyLnBhcnNlRXhwb3J0KC4uLmFyZ3VtZW50cyk7aWYoIXRoaXMuaXNDb250ZXh0dWFsKDkxKSYmIXRoaXMubWF0Y2goMTIpKXtlLnNwZWNpZmllcnM9W107ZS5zb3VyY2U9bnVsbDtlLmRlY2xhcmF0aW9uPXRoaXMuZmluaXNoUGxhY2Vob2xkZXIodCwiRGVjbGFyYXRpb24iKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIkV4cG9ydE5hbWVkRGVjbGFyYXRpb24iKX10aGlzLmV4cGVjdFBsdWdpbigiZXhwb3J0RGVmYXVsdEZyb20iKTtjb25zdCByPXRoaXMuc3RhcnROb2RlKCk7ci5leHBvcnRlZD10O2Uuc3BlY2lmaWVycz1bdGhpcy5maW5pc2hOb2RlKHIsIkV4cG9ydERlZmF1bHRTcGVjaWZpZXIiKV07cmV0dXJuIHN1cGVyLnBhcnNlRXhwb3J0KGUpfWlzRXhwb3J0RGVmYXVsdFNwZWNpZmllcigpe2lmKHRoaXMubWF0Y2goNTkpKXtjb25zdCBlPXRoaXMubmV4dFRva2VuU3RhcnQoKTtpZih0aGlzLmlzVW5wYXJzZWRDb250ZXh0dWFsKGUsImZyb20iKSl7aWYodGhpcy5pbnB1dC5zdGFydHNXaXRoKFpsKDEzNCksdGhpcy5uZXh0VG9rZW5TdGFydFNpbmNlKGUrNCkpKXtyZXR1cm4gdHJ1ZX19fXJldHVybiBzdXBlci5pc0V4cG9ydERlZmF1bHRTcGVjaWZpZXIoKX1tYXliZVBhcnNlRXhwb3J0RGVmYXVsdFNwZWNpZmllcihlKXtpZihlLnNwZWNpZmllcnMmJmUuc3BlY2lmaWVycy5sZW5ndGg+MCl7cmV0dXJuIHRydWV9cmV0dXJuIHN1cGVyLm1heWJlUGFyc2VFeHBvcnREZWZhdWx0U3BlY2lmaWVyKC4uLmFyZ3VtZW50cyl9Y2hlY2tFeHBvcnQoZSl7Y29uc3R7c3BlY2lmaWVyczp0fT1lO2lmKHQhPW51bGwmJnQubGVuZ3RoKXtlLnNwZWNpZmllcnM9dC5maWx0ZXIoKGU9PmUuZXhwb3J0ZWQudHlwZT09PSJQbGFjZWhvbGRlciIpKX1zdXBlci5jaGVja0V4cG9ydChlKTtlLnNwZWNpZmllcnM9dH1wYXJzZUltcG9ydChlKXtjb25zdCB0PXRoaXMucGFyc2VQbGFjZWhvbGRlcigiSWRlbnRpZmllciIpO2lmKCF0KXJldHVybiBzdXBlci5wYXJzZUltcG9ydCguLi5hcmd1bWVudHMpO2Uuc3BlY2lmaWVycz1bXTtpZighdGhpcy5pc0NvbnRleHR1YWwoOTEpJiYhdGhpcy5tYXRjaCgxMikpe2Uuc291cmNlPXRoaXMuZmluaXNoUGxhY2Vob2xkZXIodCwiU3RyaW5nTGl0ZXJhbCIpO3RoaXMuc2VtaWNvbG9uKCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJJbXBvcnREZWNsYXJhdGlvbiIpfWNvbnN0IHI9dGhpcy5zdGFydE5vZGVBdE5vZGUodCk7ci5sb2NhbD10O3RoaXMuZmluaXNoTm9kZShyLCJJbXBvcnREZWZhdWx0U3BlY2lmaWVyIik7ZS5zcGVjaWZpZXJzLnB1c2gocik7aWYodGhpcy5lYXQoMTIpKXtjb25zdCB0PXRoaXMubWF5YmVQYXJzZVN0YXJJbXBvcnRTcGVjaWZpZXIoZSk7aWYoIXQpdGhpcy5wYXJzZU5hbWVkSW1wb3J0U3BlY2lmaWVycyhlKX10aGlzLmV4cGVjdENvbnRleHR1YWwoOTEpO2Uuc291cmNlPXRoaXMucGFyc2VJbXBvcnRTb3VyY2UoKTt0aGlzLnNlbWljb2xvbigpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiSW1wb3J0RGVjbGFyYXRpb24iKX1wYXJzZUltcG9ydFNvdXJjZSgpe3JldHVybiB0aGlzLnBhcnNlUGxhY2Vob2xkZXIoIlN0cmluZ0xpdGVyYWwiKXx8c3VwZXIucGFyc2VJbXBvcnRTb3VyY2UoLi4uYXJndW1lbnRzKX19O3ZhciBDaD1lPT5jbGFzcyBleHRlbmRzIGV7cGFyc2VWOEludHJpbnNpYygpe2lmKHRoaXMubWF0Y2goNDgpKXtjb25zdCBlPXRoaXMuc3RhdGUuc3RhcnQ7Y29uc3QgdD10aGlzLnN0YXJ0Tm9kZSgpO3RoaXMubmV4dCgpO2lmKFJsKHRoaXMuc3RhdGUudHlwZSkpe2NvbnN0IGU9dGhpcy5wYXJzZUlkZW50aWZpZXJOYW1lKHRoaXMuc3RhdGUuc3RhcnQpO2NvbnN0IHI9dGhpcy5jcmVhdGVJZGVudGlmaWVyKHQsZSk7ci50eXBlPSJWOEludHJpbnNpY0lkZW50aWZpZXIiO2lmKHRoaXMubWF0Y2goMTApKXtyZXR1cm4gcn19dGhpcy51bmV4cGVjdGVkKGUpfX1wYXJzZUV4cHJBdG9tKCl7cmV0dXJuIHRoaXMucGFyc2VWOEludHJpbnNpYygpfHxzdXBlci5wYXJzZUV4cHJBdG9tKC4uLmFyZ3VtZW50cyl9fTtmdW5jdGlvbiBQaChlLHQpe3JldHVybiBlLnNvbWUoKGU9PntpZihBcnJheS5pc0FycmF5KGUpKXtyZXR1cm4gZVswXT09PXR9ZWxzZXtyZXR1cm4gZT09PXR9fSkpfWZ1bmN0aW9uIERoKGUsdCxyKXtjb25zdCBzPWUuZmluZCgoZT0+e2lmKEFycmF5LmlzQXJyYXkoZSkpe3JldHVybiBlWzBdPT09dH1lbHNle3JldHVybiBlPT09dH19KSk7aWYocyYmQXJyYXkuaXNBcnJheShzKSl7cmV0dXJuIHNbMV1bcl19cmV0dXJuIG51bGx9Y29uc3Qga2g9WyJtaW5pbWFsIiwiZnNoYXJwIiwiaGFjayIsInNtYXJ0Il07Y29uc3QgTmg9WyJeIiwiJSIsIiMiXTtjb25zdCBJaD1bImhhc2giLCJiYXIiXTtmdW5jdGlvbiBGaChlKXtpZihQaChlLCJkZWNvcmF0b3JzIikpe2lmKFBoKGUsImRlY29yYXRvcnMtbGVnYWN5Iikpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IHVzZSB0aGUgZGVjb3JhdG9ycyBhbmQgZGVjb3JhdG9ycy1sZWdhY3kgcGx1Z2luIHRvZ2V0aGVyIil9Y29uc3QgdD1EaChlLCJkZWNvcmF0b3JzIiwiZGVjb3JhdG9yc0JlZm9yZUV4cG9ydCIpO2lmKHQ9PW51bGwpe3Rocm93IG5ldyBFcnJvcigiVGhlICdkZWNvcmF0b3JzJyBwbHVnaW4gcmVxdWlyZXMgYSAnZGVjb3JhdG9yc0JlZm9yZUV4cG9ydCcgb3B0aW9uLCIrIiB3aG9zZSB2YWx1ZSBtdXN0IGJlIGEgYm9vbGVhbi4gSWYgeW91IGFyZSBtaWdyYXRpbmcgZnJvbSIrIiBCYWJ5bG9uL0JhYmVsIDYgb3Igd2FudCB0byB1c2UgdGhlIG9sZCBkZWNvcmF0b3JzIHByb3Bvc2FsLCB5b3UiKyIgc2hvdWxkIHVzZSB0aGUgJ2RlY29yYXRvcnMtbGVnYWN5JyBwbHVnaW4gaW5zdGVhZCBvZiAnZGVjb3JhdG9ycycuIil9ZWxzZSBpZih0eXBlb2YgdCE9PSJib29sZWFuIil7dGhyb3cgbmV3IEVycm9yKCInZGVjb3JhdG9yc0JlZm9yZUV4cG9ydCcgbXVzdCBiZSBhIGJvb2xlYW4uIil9fWlmKFBoKGUsImZsb3ciKSYmUGgoZSwidHlwZXNjcmlwdCIpKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjb21iaW5lIGZsb3cgYW5kIHR5cGVzY3JpcHQgcGx1Z2lucy4iKX1pZihQaChlLCJwbGFjZWhvbGRlcnMiKSYmUGgoZSwidjhpbnRyaW5zaWMiKSl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29tYmluZSBwbGFjZWhvbGRlcnMgYW5kIHY4aW50cmluc2ljIHBsdWdpbnMuIil9aWYoUGgoZSwicGlwZWxpbmVPcGVyYXRvciIpKXtjb25zdCB0PURoKGUsInBpcGVsaW5lT3BlcmF0b3IiLCJwcm9wb3NhbCIpO2lmKCFraC5pbmNsdWRlcyh0KSl7Y29uc3QgZT1raC5tYXAoKGU9PmAiJHtlfSJgKSkuam9pbigiLCAiKTt0aHJvdyBuZXcgRXJyb3IoYCJwaXBlbGluZU9wZXJhdG9yIiByZXF1aXJlcyAicHJvcG9zYWwiIG9wdGlvbiB3aG9zZSB2YWx1ZSBtdXN0IGJlIG9uZSBvZjogJHtlfS5gKX1jb25zdCByPVBoKGUsInJlY29yZEFuZFR1cGxlIikmJkRoKGUsInJlY29yZEFuZFR1cGxlIiwic3ludGF4VHlwZSIpPT09Imhhc2giO2lmKHQ9PT0iaGFjayIpe2lmKFBoKGUsInBsYWNlaG9sZGVycyIpKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjb21iaW5lIHBsYWNlaG9sZGVycyBwbHVnaW4gYW5kIEhhY2stc3R5bGUgcGlwZXMuIil9aWYoUGgoZSwidjhpbnRyaW5zaWMiKSl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29tYmluZSB2OGludHJpbnNpYyBwbHVnaW4gYW5kIEhhY2stc3R5bGUgcGlwZXMuIil9Y29uc3QgdD1EaChlLCJwaXBlbGluZU9wZXJhdG9yIiwidG9waWNUb2tlbiIpO2lmKCFOaC5pbmNsdWRlcyh0KSl7Y29uc3QgZT1OaC5tYXAoKGU9PmAiJHtlfSJgKSkuam9pbigiLCAiKTt0aHJvdyBuZXcgRXJyb3IoYCJwaXBlbGluZU9wZXJhdG9yIiBpbiAicHJvcG9zYWwiOiAiaGFjayIgbW9kZSBhbHNvIHJlcXVpcmVzIGEgInRvcGljVG9rZW4iIG9wdGlvbiB3aG9zZSB2YWx1ZSBtdXN0IGJlIG9uZSBvZjogJHtlfS5gKX1pZih0PT09IiMiJiZyKXt0aHJvdyBuZXcgRXJyb3IoJ1BsdWdpbiBjb25mbGljdCBiZXR3ZWVuIGBbInBpcGVsaW5lT3BlcmF0b3IiLCB7IHByb3Bvc2FsOiAiaGFjayIsIHRvcGljVG9rZW46ICIjIiB9XWAgYW5kIGBbInJlY29yZEFuZHR1cGxlIiwgeyBzeW50YXhUeXBlOiAiaGFzaCJ9XWAuJyl9fWVsc2UgaWYodD09PSJzbWFydCImJnIpe3Rocm93IG5ldyBFcnJvcignUGx1Z2luIGNvbmZsaWN0IGJldHdlZW4gYFsicGlwZWxpbmVPcGVyYXRvciIsIHsgcHJvcG9zYWw6ICJzbWFydCIgfV1gIGFuZCBgWyJyZWNvcmRBbmR0dXBsZSIsIHsgc3ludGF4VHlwZTogImhhc2gifV1gLicpfX1pZihQaChlLCJtb2R1bGVBdHRyaWJ1dGVzIikpe3tpZihQaChlLCJpbXBvcnRBc3NlcnRpb25zIikpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGNvbWJpbmUgaW1wb3J0QXNzZXJ0aW9ucyBhbmQgbW9kdWxlQXR0cmlidXRlcyBwbHVnaW5zLiIpfWNvbnN0IHQ9RGgoZSwibW9kdWxlQXR0cmlidXRlcyIsInZlcnNpb24iKTtpZih0IT09Im1heS0yMDIwIil7dGhyb3cgbmV3IEVycm9yKCJUaGUgJ21vZHVsZUF0dHJpYnV0ZXMnIHBsdWdpbiByZXF1aXJlcyBhICd2ZXJzaW9uJyBvcHRpb24sIisiIHJlcHJlc2VudGluZyB0aGUgbGFzdCBwcm9wb3NhbCB1cGRhdGUuIEN1cnJlbnRseSwgdGhlIisiIG9ubHkgc3VwcG9ydGVkIHZhbHVlIGlzICdtYXktMjAyMCcuIil9fX1pZihQaChlLCJyZWNvcmRBbmRUdXBsZSIpJiYhSWguaW5jbHVkZXMoRGgoZSwicmVjb3JkQW5kVHVwbGUiLCJzeW50YXhUeXBlIikpKXt0aHJvdyBuZXcgRXJyb3IoIidyZWNvcmRBbmRUdXBsZScgcmVxdWlyZXMgJ3N5bnRheFR5cGUnIG9wdGlvbiB3aG9zZSB2YWx1ZSBzaG91bGQgYmUgb25lIG9mOiAiK0loLm1hcCgoZT0+YCcke2V9J2ApKS5qb2luKCIsICIpKX1pZihQaChlLCJhc3luY0RvRXhwcmVzc2lvbnMiKSYmIVBoKGUsImRvRXhwcmVzc2lvbnMiKSl7Y29uc3QgZT1uZXcgRXJyb3IoIidhc3luY0RvRXhwcmVzc2lvbnMnIHJlcXVpcmVzICdkb0V4cHJlc3Npb25zJywgcGxlYXNlIGFkZCAnZG9FeHByZXNzaW9ucycgdG8gcGFyc2VyIHBsdWdpbnMuIik7ZS5taXNzaW5nUGx1Z2lucz0iZG9FeHByZXNzaW9ucyI7dGhyb3cgZX19Y29uc3QgTWg9e2VzdHJlZTptbCxqc3g6bWgsZmxvdzpsaCx0eXBlc2NyaXB0OlRoLHY4aW50cmluc2ljOkNoLHBsYWNlaG9sZGVyczp3aH07Y29uc3QgX2g9T2JqZWN0LmtleXMoTWgpO2NvbnN0IE9oPXtzb3VyY2VUeXBlOiJzY3JpcHQiLHNvdXJjZUZpbGVuYW1lOnVuZGVmaW5lZCxzdGFydENvbHVtbjowLHN0YXJ0TGluZToxLGFsbG93QXdhaXRPdXRzaWRlRnVuY3Rpb246ZmFsc2UsYWxsb3dSZXR1cm5PdXRzaWRlRnVuY3Rpb246ZmFsc2UsYWxsb3dJbXBvcnRFeHBvcnRFdmVyeXdoZXJlOmZhbHNlLGFsbG93U3VwZXJPdXRzaWRlTWV0aG9kOmZhbHNlLGFsbG93VW5kZWNsYXJlZEV4cG9ydHM6ZmFsc2UscGx1Z2luczpbXSxzdHJpY3RNb2RlOm51bGwscmFuZ2VzOmZhbHNlLHRva2VuczpmYWxzZSxjcmVhdGVQYXJlbnRoZXNpemVkRXhwcmVzc2lvbnM6ZmFsc2UsZXJyb3JSZWNvdmVyeTpmYWxzZSxhdHRhY2hDb21tZW50OnRydWV9O2Z1bmN0aW9uIExoKGUpe2NvbnN0IHQ9e307Zm9yKGNvbnN0IHIgb2YgT2JqZWN0LmtleXMoT2gpKXt0W3JdPWUmJmVbcl0hPW51bGw/ZVtyXTpPaFtyXX1yZXR1cm4gdH1jb25zdCBCaD1lPT5lLnR5cGU9PT0iUGFyZW50aGVzaXplZEV4cHJlc3Npb24iP0JoKGUuZXhwcmVzc2lvbik6ZTtjbGFzcyBSaCBleHRlbmRzIFpje3RvQXNzaWduYWJsZShlLHQpe2lmKHQ9PT12b2lkIDApe3Q9ZmFsc2V9dmFyIHIscztsZXQgaT11bmRlZmluZWQ7aWYoZS50eXBlPT09IlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uInx8KHI9ZS5leHRyYSkhPW51bGwmJnIucGFyZW50aGVzaXplZCl7aT1CaChlKTtpZih0KXtpZihpLnR5cGU9PT0iSWRlbnRpZmllciIpe3RoaXMuZXhwcmVzc2lvblNjb3BlLnJlY29yZFBhcmVudGhlc2l6ZWRJZGVudGlmaWVyRXJyb3IoZS5zdGFydCxjbC5JbnZhbGlkUGFyZW50aGVzaXplZEFzc2lnbm1lbnQpfWVsc2UgaWYoaS50eXBlIT09Ik1lbWJlckV4cHJlc3Npb24iKXt0aGlzLnJhaXNlKGUuc3RhcnQsY2wuSW52YWxpZFBhcmVudGhlc2l6ZWRBc3NpZ25tZW50KX19ZWxzZXt0aGlzLnJhaXNlKGUuc3RhcnQsY2wuSW52YWxpZFBhcmVudGhlc2l6ZWRBc3NpZ25tZW50KX19c3dpdGNoKGUudHlwZSl7Y2FzZSJJZGVudGlmaWVyIjpjYXNlIk9iamVjdFBhdHRlcm4iOmNhc2UiQXJyYXlQYXR0ZXJuIjpjYXNlIkFzc2lnbm1lbnRQYXR0ZXJuIjpjYXNlIlJlc3RFbGVtZW50IjpicmVhaztjYXNlIk9iamVjdEV4cHJlc3Npb24iOmUudHlwZT0iT2JqZWN0UGF0dGVybiI7Zm9yKGxldCByPTAscz1lLnByb3BlcnRpZXMubGVuZ3RoLGk9cy0xO3I8cztyKyspe3ZhciBuO2NvbnN0IHM9ZS5wcm9wZXJ0aWVzW3JdO2NvbnN0IGE9cj09PWk7dGhpcy50b0Fzc2lnbmFibGVPYmplY3RFeHByZXNzaW9uUHJvcChzLGEsdCk7aWYoYSYmcy50eXBlPT09IlJlc3RFbGVtZW50IiYmKG49ZS5leHRyYSkhPW51bGwmJm4udHJhaWxpbmdDb21tYSl7dGhpcy5yYWlzZVJlc3ROb3RMYXN0KGUuZXh0cmEudHJhaWxpbmdDb21tYSl9fWJyZWFrO2Nhc2UiT2JqZWN0UHJvcGVydHkiOnRoaXMudG9Bc3NpZ25hYmxlKGUudmFsdWUsdCk7YnJlYWs7Y2FzZSJTcHJlYWRFbGVtZW50Ijp7dGhpcy5jaGVja1RvUmVzdENvbnZlcnNpb24oZSk7ZS50eXBlPSJSZXN0RWxlbWVudCI7Y29uc3Qgcj1lLmFyZ3VtZW50O3RoaXMudG9Bc3NpZ25hYmxlKHIsdCk7YnJlYWt9Y2FzZSJBcnJheUV4cHJlc3Npb24iOmUudHlwZT0iQXJyYXlQYXR0ZXJuIjt0aGlzLnRvQXNzaWduYWJsZUxpc3QoZS5lbGVtZW50cywocz1lLmV4dHJhKT09bnVsbD92b2lkIDA6cy50cmFpbGluZ0NvbW1hLHQpO2JyZWFrO2Nhc2UiQXNzaWdubWVudEV4cHJlc3Npb24iOmlmKGUub3BlcmF0b3IhPT0iPSIpe3RoaXMucmFpc2UoZS5sZWZ0LmVuZCxjbC5NaXNzaW5nRXFJbkFzc2lnbm1lbnQpfWUudHlwZT0iQXNzaWdubWVudFBhdHRlcm4iO2RlbGV0ZSBlLm9wZXJhdG9yO3RoaXMudG9Bc3NpZ25hYmxlKGUubGVmdCx0KTticmVhaztjYXNlIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uIjp0aGlzLnRvQXNzaWduYWJsZShpLHQpO2JyZWFrfXJldHVybiBlfXRvQXNzaWduYWJsZU9iamVjdEV4cHJlc3Npb25Qcm9wKGUsdCxyKXtpZihlLnR5cGU9PT0iT2JqZWN0TWV0aG9kIil7Y29uc3QgdD1lLmtpbmQ9PT0iZ2V0Inx8ZS5raW5kPT09InNldCI/Y2wuUGF0dGVybkhhc0FjY2Vzc29yOmNsLlBhdHRlcm5IYXNNZXRob2Q7dGhpcy5yYWlzZShlLmtleS5zdGFydCx0KX1lbHNlIGlmKGUudHlwZT09PSJTcHJlYWRFbGVtZW50IiYmIXQpe3RoaXMucmFpc2VSZXN0Tm90TGFzdChlLnN0YXJ0KX1lbHNle3RoaXMudG9Bc3NpZ25hYmxlKGUscil9fXRvQXNzaWduYWJsZUxpc3QoZSx0LHIpe2xldCBzPWUubGVuZ3RoO2lmKHMpe2NvbnN0IGk9ZVtzLTFdO2lmKChpPT1udWxsP3ZvaWQgMDppLnR5cGUpPT09IlJlc3RFbGVtZW50Iil7LS1zfWVsc2UgaWYoKGk9PW51bGw/dm9pZCAwOmkudHlwZSk9PT0iU3ByZWFkRWxlbWVudCIpe2kudHlwZT0iUmVzdEVsZW1lbnQiO2xldCBlPWkuYXJndW1lbnQ7dGhpcy50b0Fzc2lnbmFibGUoZSxyKTtlPUJoKGUpO2lmKGUudHlwZSE9PSJJZGVudGlmaWVyIiYmZS50eXBlIT09Ik1lbWJlckV4cHJlc3Npb24iJiZlLnR5cGUhPT0iQXJyYXlQYXR0ZXJuIiYmZS50eXBlIT09Ik9iamVjdFBhdHRlcm4iKXt0aGlzLnVuZXhwZWN0ZWQoZS5zdGFydCl9aWYodCl7dGhpcy5yYWlzZVRyYWlsaW5nQ29tbWFBZnRlclJlc3QodCl9LS1zfX1mb3IobGV0IHQ9MDt0PHM7dCsrKXtjb25zdCBzPWVbdF07aWYocyl7dGhpcy50b0Fzc2lnbmFibGUocyxyKTtpZihzLnR5cGU9PT0iUmVzdEVsZW1lbnQiKXt0aGlzLnJhaXNlUmVzdE5vdExhc3Qocy5zdGFydCl9fX1yZXR1cm4gZX1pc0Fzc2lnbmFibGUoZSx0KXtzd2l0Y2goZS50eXBlKXtjYXNlIklkZW50aWZpZXIiOmNhc2UiT2JqZWN0UGF0dGVybiI6Y2FzZSJBcnJheVBhdHRlcm4iOmNhc2UiQXNzaWdubWVudFBhdHRlcm4iOmNhc2UiUmVzdEVsZW1lbnQiOnJldHVybiB0cnVlO2Nhc2UiT2JqZWN0RXhwcmVzc2lvbiI6e2NvbnN0IHQ9ZS5wcm9wZXJ0aWVzLmxlbmd0aC0xO3JldHVybiBlLnByb3BlcnRpZXMuZXZlcnkoKChlLHIpPT5lLnR5cGUhPT0iT2JqZWN0TWV0aG9kIiYmKHI9PT10fHxlLnR5cGUhPT0iU3ByZWFkRWxlbWVudCIpJiZ0aGlzLmlzQXNzaWduYWJsZShlKSkpfWNhc2UiT2JqZWN0UHJvcGVydHkiOnJldHVybiB0aGlzLmlzQXNzaWduYWJsZShlLnZhbHVlKTtjYXNlIlNwcmVhZEVsZW1lbnQiOnJldHVybiB0aGlzLmlzQXNzaWduYWJsZShlLmFyZ3VtZW50KTtjYXNlIkFycmF5RXhwcmVzc2lvbiI6cmV0dXJuIGUuZWxlbWVudHMuZXZlcnkoKGU9PmU9PT1udWxsfHx0aGlzLmlzQXNzaWduYWJsZShlKSkpO2Nhc2UiQXNzaWdubWVudEV4cHJlc3Npb24iOnJldHVybiBlLm9wZXJhdG9yPT09Ij0iO2Nhc2UiUGFyZW50aGVzaXplZEV4cHJlc3Npb24iOnJldHVybiB0aGlzLmlzQXNzaWduYWJsZShlLmV4cHJlc3Npb24pO2Nhc2UiTWVtYmVyRXhwcmVzc2lvbiI6Y2FzZSJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24iOnJldHVybiF0O2RlZmF1bHQ6cmV0dXJuIGZhbHNlfX10b1JlZmVyZW5jZWRMaXN0KGUsdCl7cmV0dXJuIGV9dG9SZWZlcmVuY2VkTGlzdERlZXAoZSx0KXt0aGlzLnRvUmVmZXJlbmNlZExpc3QoZSx0KTtmb3IoY29uc3QgdCBvZiBlKXtpZigodD09bnVsbD92b2lkIDA6dC50eXBlKT09PSJBcnJheUV4cHJlc3Npb24iKXt0aGlzLnRvUmVmZXJlbmNlZExpc3REZWVwKHQuZWxlbWVudHMpfX19cGFyc2VTcHJlYWQoZSx0KXtjb25zdCByPXRoaXMuc3RhcnROb2RlKCk7dGhpcy5uZXh0KCk7ci5hcmd1bWVudD10aGlzLnBhcnNlTWF5YmVBc3NpZ25BbGxvd0luKGUsdW5kZWZpbmVkLHQpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUociwiU3ByZWFkRWxlbWVudCIpfXBhcnNlUmVzdEJpbmRpbmcoKXtjb25zdCBlPXRoaXMuc3RhcnROb2RlKCk7dGhpcy5uZXh0KCk7ZS5hcmd1bWVudD10aGlzLnBhcnNlQmluZGluZ0F0b20oKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIlJlc3RFbGVtZW50Iil9cGFyc2VCaW5kaW5nQXRvbSgpe3N3aXRjaCh0aGlzLnN0YXRlLnR5cGUpe2Nhc2UgMDp7Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO3RoaXMubmV4dCgpO2UuZWxlbWVudHM9dGhpcy5wYXJzZUJpbmRpbmdMaXN0KDMsOTMsdHJ1ZSk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJBcnJheVBhdHRlcm4iKX1jYXNlIDU6cmV0dXJuIHRoaXMucGFyc2VPYmplY3RMaWtlKDgsdHJ1ZSl9cmV0dXJuIHRoaXMucGFyc2VJZGVudGlmaWVyKCl9cGFyc2VCaW5kaW5nTGlzdChlLHQscixzKXtjb25zdCBpPVtdO2xldCBuPXRydWU7d2hpbGUoIXRoaXMuZWF0KGUpKXtpZihuKXtuPWZhbHNlfWVsc2V7dGhpcy5leHBlY3QoMTIpfWlmKHImJnRoaXMubWF0Y2goMTIpKXtpLnB1c2gobnVsbCl9ZWxzZSBpZih0aGlzLmVhdChlKSl7YnJlYWt9ZWxzZSBpZih0aGlzLm1hdGNoKDIxKSl7aS5wdXNoKHRoaXMucGFyc2VBc3NpZ25hYmxlTGlzdEl0ZW1UeXBlcyh0aGlzLnBhcnNlUmVzdEJpbmRpbmcoKSkpO3RoaXMuY2hlY2tDb21tYUFmdGVyUmVzdCh0KTt0aGlzLmV4cGVjdChlKTticmVha31lbHNle2NvbnN0IGU9W107aWYodGhpcy5tYXRjaCgyNCkmJnRoaXMuaGFzUGx1Z2luKCJkZWNvcmF0b3JzIikpe3RoaXMucmFpc2UodGhpcy5zdGF0ZS5zdGFydCxjbC5VbnN1cHBvcnRlZFBhcmFtZXRlckRlY29yYXRvcil9d2hpbGUodGhpcy5tYXRjaCgyNCkpe2UucHVzaCh0aGlzLnBhcnNlRGVjb3JhdG9yKCkpfWkucHVzaCh0aGlzLnBhcnNlQXNzaWduYWJsZUxpc3RJdGVtKHMsZSkpfX1yZXR1cm4gaX1wYXJzZUJpbmRpbmdSZXN0UHJvcGVydHkoZSl7dGhpcy5uZXh0KCk7ZS5hcmd1bWVudD10aGlzLnBhcnNlSWRlbnRpZmllcigpO3RoaXMuY2hlY2tDb21tYUFmdGVyUmVzdCgxMjUpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiUmVzdEVsZW1lbnQiKX1wYXJzZUJpbmRpbmdQcm9wZXJ0eSgpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTtjb25zdHt0eXBlOnQsc3RhcnQ6cixzdGFydExvYzpzfT10aGlzLnN0YXRlO2lmKHQ9PT0yMSl7cmV0dXJuIHRoaXMucGFyc2VCaW5kaW5nUmVzdFByb3BlcnR5KGUpfWVsc2V7dGhpcy5wYXJzZVByb3BlcnR5TmFtZShlKX1lLm1ldGhvZD1mYWxzZTt0aGlzLnBhcnNlT2JqUHJvcFZhbHVlKGUscixzLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UpO3JldHVybiBlfXBhcnNlQXNzaWduYWJsZUxpc3RJdGVtKGUsdCl7Y29uc3Qgcj10aGlzLnBhcnNlTWF5YmVEZWZhdWx0KCk7dGhpcy5wYXJzZUFzc2lnbmFibGVMaXN0SXRlbVR5cGVzKHIpO2NvbnN0IHM9dGhpcy5wYXJzZU1heWJlRGVmYXVsdChyLnN0YXJ0LHIubG9jLnN0YXJ0LHIpO2lmKHQubGVuZ3RoKXtyLmRlY29yYXRvcnM9dH1yZXR1cm4gc31wYXJzZUFzc2lnbmFibGVMaXN0SXRlbVR5cGVzKGUpe3JldHVybiBlfXBhcnNlTWF5YmVEZWZhdWx0KGUsdCxyKXt2YXIgcyxpLG47dD0ocz10KSE9bnVsbD9zOnRoaXMuc3RhdGUuc3RhcnRMb2M7ZT0oaT1lKSE9bnVsbD9pOnRoaXMuc3RhdGUuc3RhcnQ7cj0obj1yKSE9bnVsbD9uOnRoaXMucGFyc2VCaW5kaW5nQXRvbSgpO2lmKCF0aGlzLmVhdCgyNykpcmV0dXJuIHI7Y29uc3QgYT10aGlzLnN0YXJ0Tm9kZUF0KGUsdCk7YS5sZWZ0PXI7YS5yaWdodD10aGlzLnBhcnNlTWF5YmVBc3NpZ25BbGxvd0luKCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShhLCJBc3NpZ25tZW50UGF0dGVybiIpfWNoZWNrTFZhbChlLHQscixzLGksbil7aWYocj09PXZvaWQgMCl7cj10Y31pZihuPT09dm9pZCAwKXtuPWZhbHNlfXN3aXRjaChlLnR5cGUpe2Nhc2UiSWRlbnRpZmllciI6e2NvbnN0e25hbWU6dH09ZTtpZih0aGlzLnN0YXRlLnN0cmljdCYmKG4/YnUodCx0aGlzLmluTW9kdWxlKTp2dSh0KSkpe3RoaXMucmFpc2UoZS5zdGFydCxyPT09dGM/Y2wuU3RyaWN0RXZhbEFyZ3VtZW50czpjbC5TdHJpY3RFdmFsQXJndW1lbnRzQmluZGluZyx0KX1pZihzKXtpZihzLmhhcyh0KSl7dGhpcy5yYWlzZShlLnN0YXJ0LGNsLlBhcmFtRHVwZSl9ZWxzZXtzLmFkZCh0KX19aWYoaSYmdD09PSJsZXQiKXt0aGlzLnJhaXNlKGUuc3RhcnQsY2wuTGV0SW5MZXhpY2FsQmluZGluZyl9aWYoIShyJnRjKSl7dGhpcy5zY29wZS5kZWNsYXJlTmFtZSh0LHIsZS5zdGFydCl9YnJlYWt9Y2FzZSJNZW1iZXJFeHByZXNzaW9uIjppZihyIT09dGMpe3RoaXMucmFpc2UoZS5zdGFydCxjbC5JbnZhbGlkUHJvcGVydHlCaW5kaW5nUGF0dGVybil9YnJlYWs7Y2FzZSJPYmplY3RQYXR0ZXJuIjpmb3IobGV0IHQgb2YgZS5wcm9wZXJ0aWVzKXtpZih0aGlzLmlzT2JqZWN0UHJvcGVydHkodCkpdD10LnZhbHVlO2Vsc2UgaWYodGhpcy5pc09iamVjdE1ldGhvZCh0KSljb250aW51ZTt0aGlzLmNoZWNrTFZhbCh0LCJvYmplY3QgZGVzdHJ1Y3R1cmluZyBwYXR0ZXJuIixyLHMsaSl9YnJlYWs7Y2FzZSJBcnJheVBhdHRlcm4iOmZvcihjb25zdCB0IG9mIGUuZWxlbWVudHMpe2lmKHQpe3RoaXMuY2hlY2tMVmFsKHQsImFycmF5IGRlc3RydWN0dXJpbmcgcGF0dGVybiIscixzLGkpfX1icmVhaztjYXNlIkFzc2lnbm1lbnRQYXR0ZXJuIjp0aGlzLmNoZWNrTFZhbChlLmxlZnQsImFzc2lnbm1lbnQgcGF0dGVybiIscixzKTticmVhaztjYXNlIlJlc3RFbGVtZW50Ijp0aGlzLmNoZWNrTFZhbChlLmFyZ3VtZW50LCJyZXN0IGVsZW1lbnQiLHIscyk7YnJlYWs7Y2FzZSJQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiI6dGhpcy5jaGVja0xWYWwoZS5leHByZXNzaW9uLCJwYXJlbnRoZXNpemVkIGV4cHJlc3Npb24iLHIscyk7YnJlYWs7ZGVmYXVsdDp7dGhpcy5yYWlzZShlLnN0YXJ0LHI9PT10Yz9jbC5JbnZhbGlkTGhzOmNsLkludmFsaWRMaHNCaW5kaW5nLHQpfX19Y2hlY2tUb1Jlc3RDb252ZXJzaW9uKGUpe2lmKGUuYXJndW1lbnQudHlwZSE9PSJJZGVudGlmaWVyIiYmZS5hcmd1bWVudC50eXBlIT09Ik1lbWJlckV4cHJlc3Npb24iKXt0aGlzLnJhaXNlKGUuYXJndW1lbnQuc3RhcnQsY2wuSW52YWxpZFJlc3RBc3NpZ25tZW50UGF0dGVybil9fWNoZWNrQ29tbWFBZnRlclJlc3QoZSl7aWYodGhpcy5tYXRjaCgxMikpe2lmKHRoaXMubG9va2FoZWFkQ2hhckNvZGUoKT09PWUpe3RoaXMucmFpc2VUcmFpbGluZ0NvbW1hQWZ0ZXJSZXN0KHRoaXMuc3RhdGUuc3RhcnQpfWVsc2V7dGhpcy5yYWlzZVJlc3ROb3RMYXN0KHRoaXMuc3RhdGUuc3RhcnQpfX19cmFpc2VSZXN0Tm90TGFzdChlKXt0aHJvdyB0aGlzLnJhaXNlKGUsY2wuRWxlbWVudEFmdGVyUmVzdCl9cmFpc2VUcmFpbGluZ0NvbW1hQWZ0ZXJSZXN0KGUpe3RoaXMucmFpc2UoZSxjbC5SZXN0VHJhaWxpbmdDb21tYSl9fWNvbnN0IGpoPW5ldyBNYXAoW1siQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iLCJhcnJvdyBmdW5jdGlvbiJdLFsiQXNzaWdubWVudEV4cHJlc3Npb24iLCJhc3NpZ25tZW50Il0sWyJDb25kaXRpb25hbEV4cHJlc3Npb24iLCJjb25kaXRpb25hbCJdLFsiWWllbGRFeHByZXNzaW9uIiwieWllbGQiXV0pO2NsYXNzIFVoIGV4dGVuZHMgUmh7Y2hlY2tQcm90byhlLHQscixzKXtpZihlLnR5cGU9PT0iU3ByZWFkRWxlbWVudCJ8fHRoaXMuaXNPYmplY3RNZXRob2QoZSl8fGUuY29tcHV0ZWR8fGUuc2hvcnRoYW5kKXtyZXR1cm59Y29uc3QgaT1lLmtleTtjb25zdCBuPWkudHlwZT09PSJJZGVudGlmaWVyIj9pLm5hbWU6aS52YWx1ZTtpZihuPT09Il9fcHJvdG9fXyIpe2lmKHQpe3RoaXMucmFpc2UoaS5zdGFydCxjbC5SZWNvcmROb1Byb3RvKTtyZXR1cm59aWYoci51c2VkKXtpZihzKXtpZihzLmRvdWJsZVByb3RvPT09LTEpe3MuZG91YmxlUHJvdG89aS5zdGFydH19ZWxzZXt0aGlzLnJhaXNlKGkuc3RhcnQsY2wuRHVwbGljYXRlUHJvdG8pfX1yLnVzZWQ9dHJ1ZX19c2hvdWxkRXhpdERlc2NlbmRpbmcoZSx0KXtyZXR1cm4gZS50eXBlPT09IkFycm93RnVuY3Rpb25FeHByZXNzaW9uIiYmZS5zdGFydD09PXR9Z2V0RXhwcmVzc2lvbigpe3RoaXMuZW50ZXJJbml0aWFsU2NvcGVzKCk7dGhpcy5uZXh0VG9rZW4oKTtjb25zdCBlPXRoaXMucGFyc2VFeHByZXNzaW9uKCk7aWYoIXRoaXMubWF0Y2goMTI5KSl7dGhpcy51bmV4cGVjdGVkKCl9dGhpcy5maW5hbGl6ZVJlbWFpbmluZ0NvbW1lbnRzKCk7ZS5jb21tZW50cz10aGlzLnN0YXRlLmNvbW1lbnRzO2UuZXJyb3JzPXRoaXMuc3RhdGUuZXJyb3JzO2lmKHRoaXMub3B0aW9ucy50b2tlbnMpe2UudG9rZW5zPXRoaXMudG9rZW5zfXJldHVybiBlfXBhcnNlRXhwcmVzc2lvbihlLHQpe2lmKGUpe3JldHVybiB0aGlzLmRpc2FsbG93SW5BbmQoKCgpPT50aGlzLnBhcnNlRXhwcmVzc2lvbkJhc2UodCkpKX1yZXR1cm4gdGhpcy5hbGxvd0luQW5kKCgoKT0+dGhpcy5wYXJzZUV4cHJlc3Npb25CYXNlKHQpKSl9cGFyc2VFeHByZXNzaW9uQmFzZShlKXtjb25zdCB0PXRoaXMuc3RhdGUuc3RhcnQ7Y29uc3Qgcj10aGlzLnN0YXRlLnN0YXJ0TG9jO2NvbnN0IHM9dGhpcy5wYXJzZU1heWJlQXNzaWduKGUpO2lmKHRoaXMubWF0Y2goMTIpKXtjb25zdCBpPXRoaXMuc3RhcnROb2RlQXQodCxyKTtpLmV4cHJlc3Npb25zPVtzXTt3aGlsZSh0aGlzLmVhdCgxMikpe2kuZXhwcmVzc2lvbnMucHVzaCh0aGlzLnBhcnNlTWF5YmVBc3NpZ24oZSkpfXRoaXMudG9SZWZlcmVuY2VkTGlzdChpLmV4cHJlc3Npb25zKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGksIlNlcXVlbmNlRXhwcmVzc2lvbiIpfXJldHVybiBzfXBhcnNlTWF5YmVBc3NpZ25EaXNhbGxvd0luKGUsdCl7cmV0dXJuIHRoaXMuZGlzYWxsb3dJbkFuZCgoKCk9PnRoaXMucGFyc2VNYXliZUFzc2lnbihlLHQpKSl9cGFyc2VNYXliZUFzc2lnbkFsbG93SW4oZSx0KXtyZXR1cm4gdGhpcy5hbGxvd0luQW5kKCgoKT0+dGhpcy5wYXJzZU1heWJlQXNzaWduKGUsdCkpKX1zZXRPcHRpb25hbFBhcmFtZXRlcnNFcnJvcihlLHQpe3ZhciByO2Uub3B0aW9uYWxQYXJhbWV0ZXJzPShyPXQ9PW51bGw/dm9pZCAwOnQucG9zKSE9bnVsbD9yOnRoaXMuc3RhdGUuc3RhcnR9cGFyc2VNYXliZUFzc2lnbihlLHQpe2NvbnN0IHI9dGhpcy5zdGF0ZS5zdGFydDtjb25zdCBzPXRoaXMuc3RhdGUuc3RhcnRMb2M7aWYodGhpcy5pc0NvbnRleHR1YWwoOTkpKXtpZih0aGlzLnByb2RQYXJhbS5oYXNZaWVsZCl7bGV0IGU9dGhpcy5wYXJzZVlpZWxkKCk7aWYodCl7ZT10LmNhbGwodGhpcyxlLHIscyl9cmV0dXJuIGV9fWxldCBpO2lmKGUpe2k9ZmFsc2V9ZWxzZXtlPW5ldyBIYztpPXRydWV9Y29uc3R7dHlwZTpufT10aGlzLnN0YXRlO2lmKG49PT0xMHx8Umwobikpe3RoaXMuc3RhdGUucG90ZW50aWFsQXJyb3dBdD10aGlzLnN0YXRlLnN0YXJ0fWxldCBhPXRoaXMucGFyc2VNYXliZUNvbmRpdGlvbmFsKGUpO2lmKHQpe2E9dC5jYWxsKHRoaXMsYSxyLHMpfWlmKEdsKHRoaXMuc3RhdGUudHlwZSkpe2NvbnN0IHQ9dGhpcy5zdGFydE5vZGVBdChyLHMpO2NvbnN0IGk9dGhpcy5zdGF0ZS52YWx1ZTt0Lm9wZXJhdG9yPWk7aWYodGhpcy5tYXRjaCgyNykpe3QubGVmdD10aGlzLnRvQXNzaWduYWJsZShhLHRydWUpO2lmKGUuZG91YmxlUHJvdG8+PXIpe2UuZG91YmxlUHJvdG89LTF9aWYoZS5zaG9ydGhhbmRBc3NpZ24+PXIpe2Uuc2hvcnRoYW5kQXNzaWduPS0xfX1lbHNle3QubGVmdD1hfXRoaXMuY2hlY2tMVmFsKGEsImFzc2lnbm1lbnQgZXhwcmVzc2lvbiIpO3RoaXMubmV4dCgpO3QucmlnaHQ9dGhpcy5wYXJzZU1heWJlQXNzaWduKCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZSh0LCJBc3NpZ25tZW50RXhwcmVzc2lvbiIpfWVsc2UgaWYoaSl7dGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMoZSx0cnVlKX1yZXR1cm4gYX1wYXJzZU1heWJlQ29uZGl0aW9uYWwoZSl7Y29uc3QgdD10aGlzLnN0YXRlLnN0YXJ0O2NvbnN0IHI9dGhpcy5zdGF0ZS5zdGFydExvYztjb25zdCBzPXRoaXMuc3RhdGUucG90ZW50aWFsQXJyb3dBdDtjb25zdCBpPXRoaXMucGFyc2VFeHByT3BzKGUpO2lmKHRoaXMuc2hvdWxkRXhpdERlc2NlbmRpbmcoaSxzKSl7cmV0dXJuIGl9cmV0dXJuIHRoaXMucGFyc2VDb25kaXRpb25hbChpLHQscixlKX1wYXJzZUNvbmRpdGlvbmFsKGUsdCxyLHMpe2lmKHRoaXMuZWF0KDE3KSl7Y29uc3Qgcz10aGlzLnN0YXJ0Tm9kZUF0KHQscik7cy50ZXN0PWU7cy5jb25zZXF1ZW50PXRoaXMucGFyc2VNYXliZUFzc2lnbkFsbG93SW4oKTt0aGlzLmV4cGVjdCgxNCk7cy5hbHRlcm5hdGU9dGhpcy5wYXJzZU1heWJlQXNzaWduKCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShzLCJDb25kaXRpb25hbEV4cHJlc3Npb24iKX1yZXR1cm4gZX1wYXJzZU1heWJlVW5hcnlPclByaXZhdGUoZSl7cmV0dXJuIHRoaXMubWF0Y2goMTI4KT90aGlzLnBhcnNlUHJpdmF0ZU5hbWUoKTp0aGlzLnBhcnNlTWF5YmVVbmFyeShlKX1wYXJzZUV4cHJPcHMoZSl7Y29uc3QgdD10aGlzLnN0YXRlLnN0YXJ0O2NvbnN0IHI9dGhpcy5zdGF0ZS5zdGFydExvYztjb25zdCBzPXRoaXMuc3RhdGUucG90ZW50aWFsQXJyb3dBdDtjb25zdCBpPXRoaXMucGFyc2VNYXliZVVuYXJ5T3JQcml2YXRlKGUpO2lmKHRoaXMuc2hvdWxkRXhpdERlc2NlbmRpbmcoaSxzKSl7cmV0dXJuIGl9cmV0dXJuIHRoaXMucGFyc2VFeHByT3AoaSx0LHIsLTEpfXBhcnNlRXhwck9wKGUsdCxyLHMpe2lmKHRoaXMuaXNQcml2YXRlTmFtZShlKSl7Y29uc3QgdD10aGlzLmdldFByaXZhdGVOYW1lU1YoZSk7Y29uc3R7c3RhcnQ6cn09ZTtpZihzPj1ldSg1Mil8fCF0aGlzLnByb2RQYXJhbS5oYXNJbnx8IXRoaXMubWF0Y2goNTIpKXt0aGlzLnJhaXNlKHIsY2wuUHJpdmF0ZUluRXhwZWN0ZWRJbix0KX10aGlzLmNsYXNzU2NvcGUudXNlUHJpdmF0ZU5hbWUodCxyKX1jb25zdCBpPXRoaXMuc3RhdGUudHlwZTtpZihXbChpKSYmKHRoaXMucHJvZFBhcmFtLmhhc0lufHwhdGhpcy5tYXRjaCg1MikpKXtsZXQgbj1ldShpKTtpZihuPnMpe2lmKGk9PT0zNSl7dGhpcy5leHBlY3RQbHVnaW4oInBpcGVsaW5lT3BlcmF0b3IiKTtpZih0aGlzLnN0YXRlLmluRlNoYXJwUGlwZWxpbmVEaXJlY3RCb2R5KXtyZXR1cm4gZX10aGlzLmNoZWNrUGlwZWxpbmVBdEluZml4T3BlcmF0b3IoZSx0KX1jb25zdCBhPXRoaXMuc3RhcnROb2RlQXQodCxyKTthLmxlZnQ9ZTthLm9wZXJhdG9yPXRoaXMuc3RhdGUudmFsdWU7Y29uc3Qgbz1pPT09Mzd8fGk9PT0zODtjb25zdCBsPWk9PT0zNjtpZihsKXtuPWV1KDM4KX10aGlzLm5leHQoKTtpZihpPT09MzUmJnRoaXMuZ2V0UGx1Z2luT3B0aW9uKCJwaXBlbGluZU9wZXJhdG9yIiwicHJvcG9zYWwiKT09PSJtaW5pbWFsIil7aWYodGhpcy5zdGF0ZS50eXBlPT09OTAmJnRoaXMucHJvZFBhcmFtLmhhc0F3YWl0KXt0aHJvdyB0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsY2wuVW5leHBlY3RlZEF3YWl0QWZ0ZXJQaXBlbGluZUJvZHkpfX1hLnJpZ2h0PXRoaXMucGFyc2VFeHByT3BSaWdodEV4cHIoaSxuKTt0aGlzLmZpbmlzaE5vZGUoYSxvfHxsPyJMb2dpY2FsRXhwcmVzc2lvbiI6IkJpbmFyeUV4cHJlc3Npb24iKTtjb25zdCB1PXRoaXMuc3RhdGUudHlwZTtpZihsJiYodT09PTM3fHx1PT09MzgpfHxvJiZ1PT09MzYpe3Rocm93IHRoaXMucmFpc2UodGhpcy5zdGF0ZS5zdGFydCxjbC5NaXhpbmdDb2FsZXNjZVdpdGhMb2dpY2FsKX1yZXR1cm4gdGhpcy5wYXJzZUV4cHJPcChhLHQscixzKX19cmV0dXJuIGV9cGFyc2VFeHByT3BSaWdodEV4cHIoZSx0KXtjb25zdCByPXRoaXMuc3RhdGUuc3RhcnQ7Y29uc3Qgcz10aGlzLnN0YXRlLnN0YXJ0TG9jO3N3aXRjaChlKXtjYXNlIDM1OnN3aXRjaCh0aGlzLmdldFBsdWdpbk9wdGlvbigicGlwZWxpbmVPcGVyYXRvciIsInByb3Bvc2FsIikpe2Nhc2UiaGFjayI6cmV0dXJuIHRoaXMud2l0aFRvcGljQmluZGluZ0NvbnRleHQoKCgpPT50aGlzLnBhcnNlSGFja1BpcGVCb2R5KCkpKTtjYXNlInNtYXJ0IjpyZXR1cm4gdGhpcy53aXRoVG9waWNCaW5kaW5nQ29udGV4dCgoKCk9PntpZih0aGlzLnByb2RQYXJhbS5oYXNZaWVsZCYmdGhpcy5pc0NvbnRleHR1YWwoOTkpKXt0aHJvdyB0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsY2wuUGlwZUJvZHlJc1RpZ2h0ZXIsdGhpcy5zdGF0ZS52YWx1ZSl9cmV0dXJuIHRoaXMucGFyc2VTbWFydFBpcGVsaW5lQm9keUluU3R5bGUodGhpcy5wYXJzZUV4cHJPcEJhc2VSaWdodEV4cHIoZSx0KSxyLHMpfSkpO2Nhc2UiZnNoYXJwIjpyZXR1cm4gdGhpcy53aXRoU29sb0F3YWl0UGVybWl0dGluZ0NvbnRleHQoKCgpPT50aGlzLnBhcnNlRlNoYXJwUGlwZWxpbmVCb2R5KHQpKSl9ZGVmYXVsdDpyZXR1cm4gdGhpcy5wYXJzZUV4cHJPcEJhc2VSaWdodEV4cHIoZSx0KX19cGFyc2VFeHByT3BCYXNlUmlnaHRFeHByKGUsdCl7Y29uc3Qgcj10aGlzLnN0YXRlLnN0YXJ0O2NvbnN0IHM9dGhpcy5zdGF0ZS5zdGFydExvYztyZXR1cm4gdGhpcy5wYXJzZUV4cHJPcCh0aGlzLnBhcnNlTWF5YmVVbmFyeU9yUHJpdmF0ZSgpLHIscyx0dShlKT90LTE6dCl9cGFyc2VIYWNrUGlwZUJvZHkoKXt2YXIgZTtjb25zdHtzdGFydDp0fT10aGlzLnN0YXRlO2NvbnN0IHI9dGhpcy5wYXJzZU1heWJlQXNzaWduKCk7aWYoamguaGFzKHIudHlwZSkmJiEoKGU9ci5leHRyYSkhPW51bGwmJmUucGFyZW50aGVzaXplZCkpe3RoaXMucmFpc2UodCxjbC5QaXBlVW5wYXJlbnRoZXNpemVkQm9keSxqaC5nZXQoci50eXBlKSl9aWYoIXRoaXMudG9waWNSZWZlcmVuY2VXYXNVc2VkSW5DdXJyZW50Q29udGV4dCgpKXt0aGlzLnJhaXNlKHQsY2wuUGlwZVRvcGljVW51c2VkKX1yZXR1cm4gcn1jaGVja0V4cG9uZW50aWFsQWZ0ZXJVbmFyeShlKXtpZih0aGlzLm1hdGNoKDUxKSl7dGhpcy5yYWlzZShlLmFyZ3VtZW50LnN0YXJ0LGNsLlVuZXhwZWN0ZWRUb2tlblVuYXJ5RXhwb25lbnRpYXRpb24pfX1wYXJzZU1heWJlVW5hcnkoZSx0KXtjb25zdCByPXRoaXMuc3RhdGUuc3RhcnQ7Y29uc3Qgcz10aGlzLnN0YXRlLnN0YXJ0TG9jO2NvbnN0IGk9dGhpcy5pc0NvbnRleHR1YWwoOTApO2lmKGkmJnRoaXMuaXNBd2FpdEFsbG93ZWQoKSl7dGhpcy5uZXh0KCk7Y29uc3QgZT10aGlzLnBhcnNlQXdhaXQocixzKTtpZighdCl0aGlzLmNoZWNrRXhwb25lbnRpYWxBZnRlclVuYXJ5KGUpO3JldHVybiBlfWNvbnN0IG49dGhpcy5tYXRjaCgzMik7Y29uc3QgYT10aGlzLnN0YXJ0Tm9kZSgpO2lmKCRsKHRoaXMuc3RhdGUudHlwZSkpe2Eub3BlcmF0b3I9dGhpcy5zdGF0ZS52YWx1ZTthLnByZWZpeD10cnVlO2lmKHRoaXMubWF0Y2goNjYpKXt0aGlzLmV4cGVjdFBsdWdpbigidGhyb3dFeHByZXNzaW9ucyIpfWNvbnN0IHI9dGhpcy5tYXRjaCg4Myk7dGhpcy5uZXh0KCk7YS5hcmd1bWVudD10aGlzLnBhcnNlTWF5YmVVbmFyeShudWxsLHRydWUpO3RoaXMuY2hlY2tFeHByZXNzaW9uRXJyb3JzKGUsdHJ1ZSk7aWYodGhpcy5zdGF0ZS5zdHJpY3QmJnIpe2NvbnN0IGU9YS5hcmd1bWVudDtpZihlLnR5cGU9PT0iSWRlbnRpZmllciIpe3RoaXMucmFpc2UoYS5zdGFydCxjbC5TdHJpY3REZWxldGUpfWVsc2UgaWYodGhpcy5oYXNQcm9wZXJ0eUFzUHJpdmF0ZU5hbWUoZSkpe3RoaXMucmFpc2UoYS5zdGFydCxjbC5EZWxldGVQcml2YXRlRmllbGQpfX1pZighbil7aWYoIXQpdGhpcy5jaGVja0V4cG9uZW50aWFsQWZ0ZXJVbmFyeShhKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGEsIlVuYXJ5RXhwcmVzc2lvbiIpfX1jb25zdCBvPXRoaXMucGFyc2VVcGRhdGUoYSxuLGUpO2lmKGkpe2NvbnN0e3R5cGU6ZX09dGhpcy5zdGF0ZTtjb25zdCB0PXRoaXMuaGFzUGx1Z2luKCJ2OGludHJpbnNpYyIpP3FsKGUpOnFsKGUpJiYhdGhpcy5tYXRjaCg0OCk7aWYodCYmIXRoaXMuaXNBbWJpZ3VvdXNBd2FpdCgpKXt0aGlzLnJhaXNlT3ZlcndyaXRlKHIsY2wuQXdhaXROb3RJbkFzeW5jQ29udGV4dCk7cmV0dXJuIHRoaXMucGFyc2VBd2FpdChyLHMpfX1yZXR1cm4gb31wYXJzZVVwZGF0ZShlLHQscil7aWYodCl7dGhpcy5jaGVja0xWYWwoZS5hcmd1bWVudCwicHJlZml4IG9wZXJhdGlvbiIpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiVXBkYXRlRXhwcmVzc2lvbiIpfWNvbnN0IHM9dGhpcy5zdGF0ZS5zdGFydDtjb25zdCBpPXRoaXMuc3RhdGUuc3RhcnRMb2M7bGV0IG49dGhpcy5wYXJzZUV4cHJTdWJzY3JpcHRzKHIpO2lmKHRoaXMuY2hlY2tFeHByZXNzaW9uRXJyb3JzKHIsZmFsc2UpKXJldHVybiBuO3doaWxlKEtsKHRoaXMuc3RhdGUudHlwZSkmJiF0aGlzLmNhbkluc2VydFNlbWljb2xvbigpKXtjb25zdCBlPXRoaXMuc3RhcnROb2RlQXQocyxpKTtlLm9wZXJhdG9yPXRoaXMuc3RhdGUudmFsdWU7ZS5wcmVmaXg9ZmFsc2U7ZS5hcmd1bWVudD1uO3RoaXMuY2hlY2tMVmFsKG4sInBvc3RmaXggb3BlcmF0aW9uIik7dGhpcy5uZXh0KCk7bj10aGlzLmZpbmlzaE5vZGUoZSwiVXBkYXRlRXhwcmVzc2lvbiIpfXJldHVybiBufXBhcnNlRXhwclN1YnNjcmlwdHMoZSl7Y29uc3QgdD10aGlzLnN0YXRlLnN0YXJ0O2NvbnN0IHI9dGhpcy5zdGF0ZS5zdGFydExvYztjb25zdCBzPXRoaXMuc3RhdGUucG90ZW50aWFsQXJyb3dBdDtjb25zdCBpPXRoaXMucGFyc2VFeHByQXRvbShlKTtpZih0aGlzLnNob3VsZEV4aXREZXNjZW5kaW5nKGkscykpe3JldHVybiBpfXJldHVybiB0aGlzLnBhcnNlU3Vic2NyaXB0cyhpLHQscil9cGFyc2VTdWJzY3JpcHRzKGUsdCxyLHMpe2NvbnN0IGk9e29wdGlvbmFsQ2hhaW5NZW1iZXI6ZmFsc2UsbWF5YmVBc3luY0Fycm93OnRoaXMuYXRQb3NzaWJsZUFzeW5jQXJyb3coZSksc3RvcDpmYWxzZX07ZG97ZT10aGlzLnBhcnNlU3Vic2NyaXB0KGUsdCxyLHMsaSk7aS5tYXliZUFzeW5jQXJyb3c9ZmFsc2V9d2hpbGUoIWkuc3RvcCk7cmV0dXJuIGV9cGFyc2VTdWJzY3JpcHQoZSx0LHIscyxpKXtpZighcyYmdGhpcy5lYXQoMTUpKXtyZXR1cm4gdGhpcy5wYXJzZUJpbmQoZSx0LHIscyxpKX1lbHNlIGlmKHRoaXMubWF0Y2goMjIpKXtyZXR1cm4gdGhpcy5wYXJzZVRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihlLHQscixpKX1sZXQgbj1mYWxzZTtpZih0aGlzLm1hdGNoKDE4KSl7aWYocyYmdGhpcy5sb29rYWhlYWRDaGFyQ29kZSgpPT09NDApe2kuc3RvcD10cnVlO3JldHVybiBlfWkub3B0aW9uYWxDaGFpbk1lbWJlcj1uPXRydWU7dGhpcy5uZXh0KCl9aWYoIXMmJnRoaXMubWF0Y2goMTApKXtyZXR1cm4gdGhpcy5wYXJzZUNvdmVyQ2FsbEFuZEFzeW5jQXJyb3dIZWFkKGUsdCxyLGksbil9ZWxzZXtjb25zdCBzPXRoaXMuZWF0KDApO2lmKHN8fG58fHRoaXMuZWF0KDE2KSl7cmV0dXJuIHRoaXMucGFyc2VNZW1iZXIoZSx0LHIsaSxzLG4pfWVsc2V7aS5zdG9wPXRydWU7cmV0dXJuIGV9fX1wYXJzZU1lbWJlcihlLHQscixzLGksbil7Y29uc3QgYT10aGlzLnN0YXJ0Tm9kZUF0KHQscik7YS5vYmplY3Q9ZTthLmNvbXB1dGVkPWk7Y29uc3Qgbz0haSYmdGhpcy5tYXRjaCgxMjgpJiZ0aGlzLnN0YXRlLnZhbHVlO2NvbnN0IGw9aT90aGlzLnBhcnNlRXhwcmVzc2lvbigpOm8/dGhpcy5wYXJzZVByaXZhdGVOYW1lKCk6dGhpcy5wYXJzZUlkZW50aWZpZXIodHJ1ZSk7aWYobyE9PWZhbHNlKXtpZihhLm9iamVjdC50eXBlPT09IlN1cGVyIil7dGhpcy5yYWlzZSh0LGNsLlN1cGVyUHJpdmF0ZUZpZWxkKX10aGlzLmNsYXNzU2NvcGUudXNlUHJpdmF0ZU5hbWUobyxsLnN0YXJ0KX1hLnByb3BlcnR5PWw7aWYoaSl7dGhpcy5leHBlY3QoMyl9aWYocy5vcHRpb25hbENoYWluTWVtYmVyKXthLm9wdGlvbmFsPW47cmV0dXJuIHRoaXMuZmluaXNoTm9kZShhLCJPcHRpb25hbE1lbWJlckV4cHJlc3Npb24iKX1lbHNle3JldHVybiB0aGlzLmZpbmlzaE5vZGUoYSwiTWVtYmVyRXhwcmVzc2lvbiIpfX1wYXJzZUJpbmQoZSx0LHIscyxpKXtjb25zdCBuPXRoaXMuc3RhcnROb2RlQXQodCxyKTtuLm9iamVjdD1lO24uY2FsbGVlPXRoaXMucGFyc2VOb0NhbGxFeHByKCk7aS5zdG9wPXRydWU7cmV0dXJuIHRoaXMucGFyc2VTdWJzY3JpcHRzKHRoaXMuZmluaXNoTm9kZShuLCJCaW5kRXhwcmVzc2lvbiIpLHQscixzKX1wYXJzZUNvdmVyQ2FsbEFuZEFzeW5jQXJyb3dIZWFkKGUsdCxyLHMsaSl7Y29uc3Qgbj10aGlzLnN0YXRlLm1heWJlSW5BcnJvd1BhcmFtZXRlcnM7bGV0IGE9bnVsbDt0aGlzLnN0YXRlLm1heWJlSW5BcnJvd1BhcmFtZXRlcnM9dHJ1ZTt0aGlzLm5leHQoKTtsZXQgbz10aGlzLnN0YXJ0Tm9kZUF0KHQscik7by5jYWxsZWU9ZTtpZihzLm1heWJlQXN5bmNBcnJvdyl7dGhpcy5leHByZXNzaW9uU2NvcGUuZW50ZXIoQmMoKSk7YT1uZXcgSGN9aWYocy5vcHRpb25hbENoYWluTWVtYmVyKXtvLm9wdGlvbmFsPWl9aWYoaSl7by5hcmd1bWVudHM9dGhpcy5wYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzKDExKX1lbHNle28uYXJndW1lbnRzPXRoaXMucGFyc2VDYWxsRXhwcmVzc2lvbkFyZ3VtZW50cygxMSxlLnR5cGU9PT0iSW1wb3J0IixlLnR5cGUhPT0iU3VwZXIiLG8sYSl9dGhpcy5maW5pc2hDYWxsRXhwcmVzc2lvbihvLHMub3B0aW9uYWxDaGFpbk1lbWJlcik7aWYocy5tYXliZUFzeW5jQXJyb3cmJnRoaXMuc2hvdWxkUGFyc2VBc3luY0Fycm93KCkmJiFpKXtzLnN0b3A9dHJ1ZTt0aGlzLmV4cHJlc3Npb25TY29wZS52YWxpZGF0ZUFzUGF0dGVybigpO3RoaXMuZXhwcmVzc2lvblNjb3BlLmV4aXQoKTtvPXRoaXMucGFyc2VBc3luY0Fycm93RnJvbUNhbGxFeHByZXNzaW9uKHRoaXMuc3RhcnROb2RlQXQodCxyKSxvKX1lbHNle2lmKHMubWF5YmVBc3luY0Fycm93KXt0aGlzLmNoZWNrRXhwcmVzc2lvbkVycm9ycyhhLHRydWUpO3RoaXMuZXhwcmVzc2lvblNjb3BlLmV4aXQoKX10aGlzLnRvUmVmZXJlbmNlZEFyZ3VtZW50cyhvKX10aGlzLnN0YXRlLm1heWJlSW5BcnJvd1BhcmFtZXRlcnM9bjtyZXR1cm4gb310b1JlZmVyZW5jZWRBcmd1bWVudHMoZSx0KXt0aGlzLnRvUmVmZXJlbmNlZExpc3REZWVwKGUuYXJndW1lbnRzLHQpfXBhcnNlVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uKGUsdCxyLHMpe2NvbnN0IGk9dGhpcy5zdGFydE5vZGVBdCh0LHIpO2kudGFnPWU7aS5xdWFzaT10aGlzLnBhcnNlVGVtcGxhdGUodHJ1ZSk7aWYocy5vcHRpb25hbENoYWluTWVtYmVyKXt0aGlzLnJhaXNlKHQsY2wuT3B0aW9uYWxDaGFpbmluZ05vVGVtcGxhdGUpfXJldHVybiB0aGlzLmZpbmlzaE5vZGUoaSwiVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uIil9YXRQb3NzaWJsZUFzeW5jQXJyb3coZSl7cmV0dXJuIGUudHlwZT09PSJJZGVudGlmaWVyIiYmZS5uYW1lPT09ImFzeW5jIiYmdGhpcy5zdGF0ZS5sYXN0VG9rRW5kPT09ZS5lbmQmJiF0aGlzLmNhbkluc2VydFNlbWljb2xvbigpJiZlLmVuZC1lLnN0YXJ0PT09NSYmZS5zdGFydD09PXRoaXMuc3RhdGUucG90ZW50aWFsQXJyb3dBdH1maW5pc2hDYWxsRXhwcmVzc2lvbihlLHQpe2lmKGUuY2FsbGVlLnR5cGU9PT0iSW1wb3J0Iil7aWYoZS5hcmd1bWVudHMubGVuZ3RoPT09Mil7e2lmKCF0aGlzLmhhc1BsdWdpbigibW9kdWxlQXR0cmlidXRlcyIpKXt0aGlzLmV4cGVjdFBsdWdpbigiaW1wb3J0QXNzZXJ0aW9ucyIpfX19aWYoZS5hcmd1bWVudHMubGVuZ3RoPT09MHx8ZS5hcmd1bWVudHMubGVuZ3RoPjIpe3RoaXMucmFpc2UoZS5zdGFydCxjbC5JbXBvcnRDYWxsQXJpdHksdGhpcy5oYXNQbHVnaW4oImltcG9ydEFzc2VydGlvbnMiKXx8dGhpcy5oYXNQbHVnaW4oIm1vZHVsZUF0dHJpYnV0ZXMiKT8ib25lIG9yIHR3byBhcmd1bWVudHMiOiJvbmUgYXJndW1lbnQiKX1lbHNle2Zvcihjb25zdCB0IG9mIGUuYXJndW1lbnRzKXtpZih0LnR5cGU9PT0iU3ByZWFkRWxlbWVudCIpe3RoaXMucmFpc2UodC5zdGFydCxjbC5JbXBvcnRDYWxsU3ByZWFkQXJndW1lbnQpfX19fXJldHVybiB0aGlzLmZpbmlzaE5vZGUoZSx0PyJPcHRpb25hbENhbGxFeHByZXNzaW9uIjoiQ2FsbEV4cHJlc3Npb24iKX1wYXJzZUNhbGxFeHByZXNzaW9uQXJndW1lbnRzKGUsdCxyLHMsaSl7Y29uc3Qgbj1bXTtsZXQgYT10cnVlO2NvbnN0IG89dGhpcy5zdGF0ZS5pbkZTaGFycFBpcGVsaW5lRGlyZWN0Qm9keTt0aGlzLnN0YXRlLmluRlNoYXJwUGlwZWxpbmVEaXJlY3RCb2R5PWZhbHNlO3doaWxlKCF0aGlzLmVhdChlKSl7aWYoYSl7YT1mYWxzZX1lbHNle3RoaXMuZXhwZWN0KDEyKTtpZih0aGlzLm1hdGNoKGUpKXtpZih0JiYhdGhpcy5oYXNQbHVnaW4oImltcG9ydEFzc2VydGlvbnMiKSYmIXRoaXMuaGFzUGx1Z2luKCJtb2R1bGVBdHRyaWJ1dGVzIikpe3RoaXMucmFpc2UodGhpcy5zdGF0ZS5sYXN0VG9rU3RhcnQsY2wuSW1wb3J0Q2FsbEFyZ3VtZW50VHJhaWxpbmdDb21tYSl9aWYocyl7dGhpcy5hZGRFeHRyYShzLCJ0cmFpbGluZ0NvbW1hIix0aGlzLnN0YXRlLmxhc3RUb2tTdGFydCl9dGhpcy5uZXh0KCk7YnJlYWt9fW4ucHVzaCh0aGlzLnBhcnNlRXhwckxpc3RJdGVtKGZhbHNlLGkscikpfXRoaXMuc3RhdGUuaW5GU2hhcnBQaXBlbGluZURpcmVjdEJvZHk9bztyZXR1cm4gbn1zaG91bGRQYXJzZUFzeW5jQXJyb3coKXtyZXR1cm4gdGhpcy5tYXRjaCgxOSkmJiF0aGlzLmNhbkluc2VydFNlbWljb2xvbigpfXBhcnNlQXN5bmNBcnJvd0Zyb21DYWxsRXhwcmVzc2lvbihlLHQpe3ZhciByO3RoaXMucmVzZXRQcmV2aW91c05vZGVUcmFpbGluZ0NvbW1lbnRzKHQpO3RoaXMuZXhwZWN0KDE5KTt0aGlzLnBhcnNlQXJyb3dFeHByZXNzaW9uKGUsdC5hcmd1bWVudHMsdHJ1ZSwocj10LmV4dHJhKT09bnVsbD92b2lkIDA6ci50cmFpbGluZ0NvbW1hKTtpZih0LmlubmVyQ29tbWVudHMpe2FsKGUsdC5pbm5lckNvbW1lbnRzKX1pZih0LmNhbGxlZS50cmFpbGluZ0NvbW1lbnRzKXthbChlLHQuY2FsbGVlLnRyYWlsaW5nQ29tbWVudHMpfXJldHVybiBlfXBhcnNlTm9DYWxsRXhwcigpe2NvbnN0IGU9dGhpcy5zdGF0ZS5zdGFydDtjb25zdCB0PXRoaXMuc3RhdGUuc3RhcnRMb2M7cmV0dXJuIHRoaXMucGFyc2VTdWJzY3JpcHRzKHRoaXMucGFyc2VFeHByQXRvbSgpLGUsdCx0cnVlKX1wYXJzZUV4cHJBdG9tKGUpe2xldCB0O2NvbnN0e3R5cGU6cn09dGhpcy5zdGF0ZTtzd2l0Y2gocil7Y2FzZSA3MzpyZXR1cm4gdGhpcy5wYXJzZVN1cGVyKCk7Y2FzZSA3Nzp0PXRoaXMuc3RhcnROb2RlKCk7dGhpcy5uZXh0KCk7aWYodGhpcy5tYXRjaCgxNikpe3JldHVybiB0aGlzLnBhcnNlSW1wb3J0TWV0YVByb3BlcnR5KHQpfWlmKCF0aGlzLm1hdGNoKDEwKSl7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLmxhc3RUb2tTdGFydCxjbC5VbnN1cHBvcnRlZEltcG9ydCl9cmV0dXJuIHRoaXMuZmluaXNoTm9kZSh0LCJJbXBvcnQiKTtjYXNlIDcyOnQ9dGhpcy5zdGFydE5vZGUoKTt0aGlzLm5leHQoKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKHQsIlRoaXNFeHByZXNzaW9uIik7Y2FzZSA4NDp7cmV0dXJuIHRoaXMucGFyc2VEbyh0aGlzLnN0YXJ0Tm9kZSgpLGZhbHNlKX1jYXNlIDUwOmNhc2UgMjk6e3RoaXMucmVhZFJlZ2V4cCgpO3JldHVybiB0aGlzLnBhcnNlUmVnRXhwTGl0ZXJhbCh0aGlzLnN0YXRlLnZhbHVlKX1jYXNlIDEyNDpyZXR1cm4gdGhpcy5wYXJzZU51bWVyaWNMaXRlcmFsKHRoaXMuc3RhdGUudmFsdWUpO2Nhc2UgMTI1OnJldHVybiB0aGlzLnBhcnNlQmlnSW50TGl0ZXJhbCh0aGlzLnN0YXRlLnZhbHVlKTtjYXNlIDEyNjpyZXR1cm4gdGhpcy5wYXJzZURlY2ltYWxMaXRlcmFsKHRoaXMuc3RhdGUudmFsdWUpO2Nhc2UgMTIzOnJldHVybiB0aGlzLnBhcnNlU3RyaW5nTGl0ZXJhbCh0aGlzLnN0YXRlLnZhbHVlKTtjYXNlIDc4OnJldHVybiB0aGlzLnBhcnNlTnVsbExpdGVyYWwoKTtjYXNlIDc5OnJldHVybiB0aGlzLnBhcnNlQm9vbGVhbkxpdGVyYWwodHJ1ZSk7Y2FzZSA4MDpyZXR1cm4gdGhpcy5wYXJzZUJvb2xlYW5MaXRlcmFsKGZhbHNlKTtjYXNlIDEwOntjb25zdCBlPXRoaXMuc3RhdGUucG90ZW50aWFsQXJyb3dBdD09PXRoaXMuc3RhdGUuc3RhcnQ7cmV0dXJuIHRoaXMucGFyc2VQYXJlbkFuZERpc3Rpbmd1aXNoRXhwcmVzc2lvbihlKX1jYXNlIDI6Y2FzZSAxOntyZXR1cm4gdGhpcy5wYXJzZUFycmF5TGlrZSh0aGlzLnN0YXRlLnR5cGU9PT0yPzQ6MyxmYWxzZSx0cnVlKX1jYXNlIDA6e3JldHVybiB0aGlzLnBhcnNlQXJyYXlMaWtlKDMsdHJ1ZSxmYWxzZSxlKX1jYXNlIDY6Y2FzZSA3OntyZXR1cm4gdGhpcy5wYXJzZU9iamVjdExpa2UodGhpcy5zdGF0ZS50eXBlPT09Nj85OjgsZmFsc2UsdHJ1ZSl9Y2FzZSA1OntyZXR1cm4gdGhpcy5wYXJzZU9iamVjdExpa2UoOCxmYWxzZSxmYWxzZSxlKX1jYXNlIDYyOnJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb25PckZ1bmN0aW9uU2VudCgpO2Nhc2UgMjQ6dGhpcy5wYXJzZURlY29yYXRvcnMoKTtjYXNlIDc0OnQ9dGhpcy5zdGFydE5vZGUoKTt0aGlzLnRha2VEZWNvcmF0b3JzKHQpO3JldHVybiB0aGlzLnBhcnNlQ2xhc3ModCxmYWxzZSk7Y2FzZSA3MTpyZXR1cm4gdGhpcy5wYXJzZU5ld09yTmV3VGFyZ2V0KCk7Y2FzZSAyMjpyZXR1cm4gdGhpcy5wYXJzZVRlbXBsYXRlKGZhbHNlKTtjYXNlIDE1Ont0PXRoaXMuc3RhcnROb2RlKCk7dGhpcy5uZXh0KCk7dC5vYmplY3Q9bnVsbDtjb25zdCBlPXQuY2FsbGVlPXRoaXMucGFyc2VOb0NhbGxFeHByKCk7aWYoZS50eXBlPT09Ik1lbWJlckV4cHJlc3Npb24iKXtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKHQsIkJpbmRFeHByZXNzaW9uIil9ZWxzZXt0aHJvdyB0aGlzLnJhaXNlKGUuc3RhcnQsY2wuVW5zdXBwb3J0ZWRCaW5kKX19Y2FzZSAxMjg6e3RoaXMucmFpc2UodGhpcy5zdGF0ZS5zdGFydCxjbC5Qcml2YXRlSW5FeHBlY3RlZEluLHRoaXMuc3RhdGUudmFsdWUpO3JldHVybiB0aGlzLnBhcnNlUHJpdmF0ZU5hbWUoKX1jYXNlIDMxOntyZXR1cm4gdGhpcy5wYXJzZVRvcGljUmVmZXJlbmNlVGhlbkVxdWFsc1NpZ24oNDgsIiUiKX1jYXNlIDMwOntyZXR1cm4gdGhpcy5wYXJzZVRvcGljUmVmZXJlbmNlVGhlbkVxdWFsc1NpZ24oNDAsIl4iKX1jYXNlIDQwOmNhc2UgNDg6Y2FzZSAyNTp7Y29uc3QgZT10aGlzLmdldFBsdWdpbk9wdGlvbigicGlwZWxpbmVPcGVyYXRvciIsInByb3Bvc2FsIik7aWYoZSl7cmV0dXJuIHRoaXMucGFyc2VUb3BpY1JlZmVyZW5jZShlKX1lbHNle3Rocm93IHRoaXMudW5leHBlY3RlZCgpfX1jYXNlIDQzOntjb25zdCBlPXRoaXMuaW5wdXQuY29kZVBvaW50QXQodGhpcy5uZXh0VG9rZW5TdGFydCgpKTtpZihodShlKXx8ZT09PTYyKXt0aGlzLmV4cGVjdE9uZVBsdWdpbihbImpzeCIsImZsb3ciLCJ0eXBlc2NyaXB0Il0pO2JyZWFrfWVsc2V7dGhyb3cgdGhpcy51bmV4cGVjdGVkKCl9fWRlZmF1bHQ6aWYoUmwocikpe2lmKHRoaXMuaXNDb250ZXh0dWFsKDExNykmJnRoaXMubG9va2FoZWFkQ2hhckNvZGUoKT09PTEyMyYmIXRoaXMuaGFzRm9sbG93aW5nTGluZUJyZWFrKCkpe3JldHVybiB0aGlzLnBhcnNlTW9kdWxlRXhwcmVzc2lvbigpfWNvbnN0IGU9dGhpcy5zdGF0ZS5wb3RlbnRpYWxBcnJvd0F0PT09dGhpcy5zdGF0ZS5zdGFydDtjb25zdCB0PXRoaXMuc3RhdGUuY29udGFpbnNFc2M7Y29uc3Qgcj10aGlzLnBhcnNlSWRlbnRpZmllcigpO2lmKCF0JiZyLm5hbWU9PT0iYXN5bmMiJiYhdGhpcy5jYW5JbnNlcnRTZW1pY29sb24oKSl7Y29uc3R7dHlwZTplfT10aGlzLnN0YXRlO2lmKGU9PT02Mil7dGhpcy5yZXNldFByZXZpb3VzTm9kZVRyYWlsaW5nQ29tbWVudHMocik7dGhpcy5uZXh0KCk7cmV0dXJuIHRoaXMucGFyc2VGdW5jdGlvbih0aGlzLnN0YXJ0Tm9kZUF0Tm9kZShyKSx1bmRlZmluZWQsdHJ1ZSl9ZWxzZSBpZihSbChlKSl7aWYodGhpcy5sb29rYWhlYWRDaGFyQ29kZSgpPT09NjEpe3JldHVybiB0aGlzLnBhcnNlQXN5bmNBcnJvd1VuYXJ5RnVuY3Rpb24odGhpcy5zdGFydE5vZGVBdE5vZGUocikpfWVsc2V7cmV0dXJuIHJ9fWVsc2UgaWYoZT09PTg0KXt0aGlzLnJlc2V0UHJldmlvdXNOb2RlVHJhaWxpbmdDb21tZW50cyhyKTtyZXR1cm4gdGhpcy5wYXJzZURvKHRoaXMuc3RhcnROb2RlQXROb2RlKHIpLHRydWUpfX1pZihlJiZ0aGlzLm1hdGNoKDE5KSYmIXRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkpe3RoaXMubmV4dCgpO3JldHVybiB0aGlzLnBhcnNlQXJyb3dFeHByZXNzaW9uKHRoaXMuc3RhcnROb2RlQXROb2RlKHIpLFtyXSxmYWxzZSl9cmV0dXJuIHJ9ZWxzZXt0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKX19fXBhcnNlVG9waWNSZWZlcmVuY2VUaGVuRXF1YWxzU2lnbihlLHQpe2NvbnN0IHI9dGhpcy5nZXRQbHVnaW5PcHRpb24oInBpcGVsaW5lT3BlcmF0b3IiLCJwcm9wb3NhbCIpO2lmKHIpe3RoaXMuc3RhdGUudHlwZT1lO3RoaXMuc3RhdGUudmFsdWU9dDt0aGlzLnN0YXRlLnBvcy0tO3RoaXMuc3RhdGUuZW5kLS07dGhpcy5zdGF0ZS5lbmRMb2MuY29sdW1uLS07cmV0dXJuIHRoaXMucGFyc2VUb3BpY1JlZmVyZW5jZShyKX1lbHNle3Rocm93IHRoaXMudW5leHBlY3RlZCgpfX1wYXJzZVRvcGljUmVmZXJlbmNlKGUpe2NvbnN0IHQ9dGhpcy5zdGFydE5vZGUoKTtjb25zdCByPXRoaXMuc3RhdGUuc3RhcnQ7Y29uc3Qgcz10aGlzLnN0YXRlLnR5cGU7dGhpcy5uZXh0KCk7cmV0dXJuIHRoaXMuZmluaXNoVG9waWNSZWZlcmVuY2UodCxyLGUscyl9ZmluaXNoVG9waWNSZWZlcmVuY2UoZSx0LHIscyl7aWYodGhpcy50ZXN0VG9waWNSZWZlcmVuY2VDb25maWd1cmF0aW9uKHIsdCxzKSl7bGV0IHM7aWYocj09PSJzbWFydCIpe3M9IlBpcGVsaW5lUHJpbWFyeVRvcGljUmVmZXJlbmNlIn1lbHNle3M9IlRvcGljUmVmZXJlbmNlIn1pZighdGhpcy50b3BpY1JlZmVyZW5jZUlzQWxsb3dlZEluQ3VycmVudENvbnRleHQoKSl7aWYocj09PSJzbWFydCIpe3RoaXMucmFpc2UodCxjbC5QcmltYXJ5VG9waWNOb3RBbGxvd2VkKX1lbHNle3RoaXMucmFpc2UodCxjbC5QaXBlVG9waWNVbmJvdW5kKX19dGhpcy5yZWdpc3RlclRvcGljUmVmZXJlbmNlKCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLHMpfWVsc2V7dGhyb3cgdGhpcy5yYWlzZSh0LGNsLlBpcGVUb3BpY1VuY29uZmlndXJlZFRva2VuLFpsKHMpKX19dGVzdFRvcGljUmVmZXJlbmNlQ29uZmlndXJhdGlvbihlLHQscil7c3dpdGNoKGUpe2Nhc2UiaGFjayI6e2NvbnN0IGU9dGhpcy5nZXRQbHVnaW5PcHRpb24oInBpcGVsaW5lT3BlcmF0b3IiLCJ0b3BpY1Rva2VuIik7cmV0dXJuIFpsKHIpPT09ZX1jYXNlInNtYXJ0IjpyZXR1cm4gcj09PTI1O2RlZmF1bHQ6dGhyb3cgdGhpcy5yYWlzZSh0LGNsLlBpcGVUb3BpY1JlcXVpcmVzSGFja1BpcGVzKX19cGFyc2VBc3luY0Fycm93VW5hcnlGdW5jdGlvbihlKXt0aGlzLnByb2RQYXJhbS5lbnRlcihYYyh0cnVlLHRoaXMucHJvZFBhcmFtLmhhc1lpZWxkKSk7Y29uc3QgdD1bdGhpcy5wYXJzZUlkZW50aWZpZXIoKV07dGhpcy5wcm9kUGFyYW0uZXhpdCgpO2lmKHRoaXMuaGFzUHJlY2VkaW5nTGluZUJyZWFrKCkpe3RoaXMucmFpc2UodGhpcy5zdGF0ZS5wb3MsY2wuTGluZVRlcm1pbmF0b3JCZWZvcmVBcnJvdyl9dGhpcy5leHBlY3QoMTkpO3RoaXMucGFyc2VBcnJvd0V4cHJlc3Npb24oZSx0LHRydWUpO3JldHVybiBlfXBhcnNlRG8oZSx0KXt0aGlzLmV4cGVjdFBsdWdpbigiZG9FeHByZXNzaW9ucyIpO2lmKHQpe3RoaXMuZXhwZWN0UGx1Z2luKCJhc3luY0RvRXhwcmVzc2lvbnMiKX1lLmFzeW5jPXQ7dGhpcy5uZXh0KCk7Y29uc3Qgcj10aGlzLnN0YXRlLmxhYmVsczt0aGlzLnN0YXRlLmxhYmVscz1bXTtpZih0KXt0aGlzLnByb2RQYXJhbS5lbnRlcih6Yyk7ZS5ib2R5PXRoaXMucGFyc2VCbG9jaygpO3RoaXMucHJvZFBhcmFtLmV4aXQoKX1lbHNle2UuYm9keT10aGlzLnBhcnNlQmxvY2soKX10aGlzLnN0YXRlLmxhYmVscz1yO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiRG9FeHByZXNzaW9uIil9cGFyc2VTdXBlcigpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTt0aGlzLm5leHQoKTtpZih0aGlzLm1hdGNoKDEwKSYmIXRoaXMuc2NvcGUuYWxsb3dEaXJlY3RTdXBlciYmIXRoaXMub3B0aW9ucy5hbGxvd1N1cGVyT3V0c2lkZU1ldGhvZCl7dGhpcy5yYWlzZShlLnN0YXJ0LGNsLlN1cGVyTm90QWxsb3dlZCl9ZWxzZSBpZighdGhpcy5zY29wZS5hbGxvd1N1cGVyJiYhdGhpcy5vcHRpb25zLmFsbG93U3VwZXJPdXRzaWRlTWV0aG9kKXt0aGlzLnJhaXNlKGUuc3RhcnQsY2wuVW5leHBlY3RlZFN1cGVyKX1pZighdGhpcy5tYXRjaCgxMCkmJiF0aGlzLm1hdGNoKDApJiYhdGhpcy5tYXRjaCgxNikpe3RoaXMucmFpc2UoZS5zdGFydCxjbC5VbnN1cHBvcnRlZFN1cGVyKX1yZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIlN1cGVyIil9cGFyc2VQcml2YXRlTmFtZSgpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTtjb25zdCB0PXRoaXMuc3RhcnROb2RlQXQodGhpcy5zdGF0ZS5zdGFydCsxLG5ldyBlbCh0aGlzLnN0YXRlLmN1ckxpbmUsdGhpcy5zdGF0ZS5zdGFydCsxLXRoaXMuc3RhdGUubGluZVN0YXJ0KSk7Y29uc3Qgcj10aGlzLnN0YXRlLnZhbHVlO3RoaXMubmV4dCgpO2UuaWQ9dGhpcy5jcmVhdGVJZGVudGlmaWVyKHQscik7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJQcml2YXRlTmFtZSIpfXBhcnNlRnVuY3Rpb25PckZ1bmN0aW9uU2VudCgpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTt0aGlzLm5leHQoKTtpZih0aGlzLnByb2RQYXJhbS5oYXNZaWVsZCYmdGhpcy5tYXRjaCgxNikpe2NvbnN0IHQ9dGhpcy5jcmVhdGVJZGVudGlmaWVyKHRoaXMuc3RhcnROb2RlQXROb2RlKGUpLCJmdW5jdGlvbiIpO3RoaXMubmV4dCgpO2lmKHRoaXMubWF0Y2goOTYpKXt0aGlzLmV4cGVjdFBsdWdpbigiZnVuY3Rpb25TZW50Iil9ZWxzZSBpZighdGhpcy5oYXNQbHVnaW4oImZ1bmN0aW9uU2VudCIpKXt0aGlzLnVuZXhwZWN0ZWQoKX1yZXR1cm4gdGhpcy5wYXJzZU1ldGFQcm9wZXJ0eShlLHQsInNlbnQiKX1yZXR1cm4gdGhpcy5wYXJzZUZ1bmN0aW9uKGUpfXBhcnNlTWV0YVByb3BlcnR5KGUsdCxyKXtlLm1ldGE9dDtjb25zdCBzPXRoaXMuc3RhdGUuY29udGFpbnNFc2M7ZS5wcm9wZXJ0eT10aGlzLnBhcnNlSWRlbnRpZmllcih0cnVlKTtpZihlLnByb3BlcnR5Lm5hbWUhPT1yfHxzKXt0aGlzLnJhaXNlKGUucHJvcGVydHkuc3RhcnQsY2wuVW5zdXBwb3J0ZWRNZXRhUHJvcGVydHksdC5uYW1lLHIpfXJldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiTWV0YVByb3BlcnR5Iil9cGFyc2VJbXBvcnRNZXRhUHJvcGVydHkoZSl7Y29uc3QgdD10aGlzLmNyZWF0ZUlkZW50aWZpZXIodGhpcy5zdGFydE5vZGVBdE5vZGUoZSksImltcG9ydCIpO3RoaXMubmV4dCgpO2lmKHRoaXMuaXNDb250ZXh0dWFsKDk0KSl7aWYoIXRoaXMuaW5Nb2R1bGUpe3RoaXMucmFpc2UodC5zdGFydCxobC5JbXBvcnRNZXRhT3V0c2lkZU1vZHVsZSl9dGhpcy5zYXdVbmFtYmlndW91c0VTTT10cnVlfXJldHVybiB0aGlzLnBhcnNlTWV0YVByb3BlcnR5KGUsdCwibWV0YSIpfXBhcnNlTGl0ZXJhbEF0Tm9kZShlLHQscil7dGhpcy5hZGRFeHRyYShyLCJyYXdWYWx1ZSIsZSk7dGhpcy5hZGRFeHRyYShyLCJyYXciLHRoaXMuaW5wdXQuc2xpY2Uoci5zdGFydCx0aGlzLnN0YXRlLmVuZCkpO3IudmFsdWU9ZTt0aGlzLm5leHQoKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKHIsdCl9cGFyc2VMaXRlcmFsKGUsdCl7Y29uc3Qgcj10aGlzLnN0YXJ0Tm9kZSgpO3JldHVybiB0aGlzLnBhcnNlTGl0ZXJhbEF0Tm9kZShlLHQscil9cGFyc2VTdHJpbmdMaXRlcmFsKGUpe3JldHVybiB0aGlzLnBhcnNlTGl0ZXJhbChlLCJTdHJpbmdMaXRlcmFsIil9cGFyc2VOdW1lcmljTGl0ZXJhbChlKXtyZXR1cm4gdGhpcy5wYXJzZUxpdGVyYWwoZSwiTnVtZXJpY0xpdGVyYWwiKX1wYXJzZUJpZ0ludExpdGVyYWwoZSl7cmV0dXJuIHRoaXMucGFyc2VMaXRlcmFsKGUsIkJpZ0ludExpdGVyYWwiKX1wYXJzZURlY2ltYWxMaXRlcmFsKGUpe3JldHVybiB0aGlzLnBhcnNlTGl0ZXJhbChlLCJEZWNpbWFsTGl0ZXJhbCIpfXBhcnNlUmVnRXhwTGl0ZXJhbChlKXtjb25zdCB0PXRoaXMucGFyc2VMaXRlcmFsKGUudmFsdWUsIlJlZ0V4cExpdGVyYWwiKTt0LnBhdHRlcm49ZS5wYXR0ZXJuO3QuZmxhZ3M9ZS5mbGFncztyZXR1cm4gdH1wYXJzZUJvb2xlYW5MaXRlcmFsKGUpe2NvbnN0IHQ9dGhpcy5zdGFydE5vZGUoKTt0LnZhbHVlPWU7dGhpcy5uZXh0KCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZSh0LCJCb29sZWFuTGl0ZXJhbCIpfXBhcnNlTnVsbExpdGVyYWwoKXtjb25zdCBlPXRoaXMuc3RhcnROb2RlKCk7dGhpcy5uZXh0KCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJOdWxsTGl0ZXJhbCIpfXBhcnNlUGFyZW5BbmREaXN0aW5ndWlzaEV4cHJlc3Npb24oZSl7Y29uc3QgdD10aGlzLnN0YXRlLnN0YXJ0O2NvbnN0IHI9dGhpcy5zdGF0ZS5zdGFydExvYztsZXQgczt0aGlzLm5leHQoKTt0aGlzLmV4cHJlc3Npb25TY29wZS5lbnRlcihMYygpKTtjb25zdCBpPXRoaXMuc3RhdGUubWF5YmVJbkFycm93UGFyYW1ldGVycztjb25zdCBuPXRoaXMuc3RhdGUuaW5GU2hhcnBQaXBlbGluZURpcmVjdEJvZHk7dGhpcy5zdGF0ZS5tYXliZUluQXJyb3dQYXJhbWV0ZXJzPXRydWU7dGhpcy5zdGF0ZS5pbkZTaGFycFBpcGVsaW5lRGlyZWN0Qm9keT1mYWxzZTtjb25zdCBhPXRoaXMuc3RhdGUuc3RhcnQ7Y29uc3Qgbz10aGlzLnN0YXRlLnN0YXJ0TG9jO2NvbnN0IGw9W107Y29uc3QgdT1uZXcgSGM7bGV0IGM9dHJ1ZTtsZXQgaDtsZXQgcDt3aGlsZSghdGhpcy5tYXRjaCgxMSkpe2lmKGMpe2M9ZmFsc2V9ZWxzZXt0aGlzLmV4cGVjdCgxMix1Lm9wdGlvbmFsUGFyYW1ldGVycz09PS0xP251bGw6dS5vcHRpb25hbFBhcmFtZXRlcnMpO2lmKHRoaXMubWF0Y2goMTEpKXtwPXRoaXMuc3RhdGUuc3RhcnQ7YnJlYWt9fWlmKHRoaXMubWF0Y2goMjEpKXtjb25zdCBlPXRoaXMuc3RhdGUuc3RhcnQ7Y29uc3QgdD10aGlzLnN0YXRlLnN0YXJ0TG9jO2g9dGhpcy5zdGF0ZS5zdGFydDtsLnB1c2godGhpcy5wYXJzZVBhcmVuSXRlbSh0aGlzLnBhcnNlUmVzdEJpbmRpbmcoKSxlLHQpKTt0aGlzLmNoZWNrQ29tbWFBZnRlclJlc3QoNDEpO2JyZWFrfWVsc2V7bC5wdXNoKHRoaXMucGFyc2VNYXliZUFzc2lnbkFsbG93SW4odSx0aGlzLnBhcnNlUGFyZW5JdGVtKSl9fWNvbnN0IGY9dGhpcy5zdGF0ZS5sYXN0VG9rRW5kO2NvbnN0IGQ9dGhpcy5zdGF0ZS5sYXN0VG9rRW5kTG9jO3RoaXMuZXhwZWN0KDExKTt0aGlzLnN0YXRlLm1heWJlSW5BcnJvd1BhcmFtZXRlcnM9aTt0aGlzLnN0YXRlLmluRlNoYXJwUGlwZWxpbmVEaXJlY3RCb2R5PW47bGV0IG09dGhpcy5zdGFydE5vZGVBdCh0LHIpO2lmKGUmJnRoaXMuc2hvdWxkUGFyc2VBcnJvdyhsKSYmKG09dGhpcy5wYXJzZUFycm93KG0pKSl7dGhpcy5leHByZXNzaW9uU2NvcGUudmFsaWRhdGVBc1BhdHRlcm4oKTt0aGlzLmV4cHJlc3Npb25TY29wZS5leGl0KCk7dGhpcy5wYXJzZUFycm93RXhwcmVzc2lvbihtLGwsZmFsc2UpO3JldHVybiBtfXRoaXMuZXhwcmVzc2lvblNjb3BlLmV4aXQoKTtpZighbC5sZW5ndGgpe3RoaXMudW5leHBlY3RlZCh0aGlzLnN0YXRlLmxhc3RUb2tTdGFydCl9aWYocCl0aGlzLnVuZXhwZWN0ZWQocCk7aWYoaCl0aGlzLnVuZXhwZWN0ZWQoaCk7dGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnModSx0cnVlKTt0aGlzLnRvUmVmZXJlbmNlZExpc3REZWVwKGwsdHJ1ZSk7aWYobC5sZW5ndGg+MSl7cz10aGlzLnN0YXJ0Tm9kZUF0KGEsbyk7cy5leHByZXNzaW9ucz1sO3RoaXMuZmluaXNoTm9kZShzLCJTZXF1ZW5jZUV4cHJlc3Npb24iKTt0aGlzLnJlc2V0RW5kTG9jYXRpb24ocyxmLGQpfWVsc2V7cz1sWzBdfWlmKCF0aGlzLm9wdGlvbnMuY3JlYXRlUGFyZW50aGVzaXplZEV4cHJlc3Npb25zKXt0aGlzLmFkZEV4dHJhKHMsInBhcmVudGhlc2l6ZWQiLHRydWUpO3RoaXMuYWRkRXh0cmEocywicGFyZW5TdGFydCIsdCk7dGhpcy50YWtlU3Vycm91bmRpbmdDb21tZW50cyhzLHQsdGhpcy5zdGF0ZS5sYXN0VG9rRW5kKTtyZXR1cm4gc31jb25zdCB5PXRoaXMuc3RhcnROb2RlQXQodCxyKTt5LmV4cHJlc3Npb249czt0aGlzLmZpbmlzaE5vZGUoeSwiUGFyZW50aGVzaXplZEV4cHJlc3Npb24iKTtyZXR1cm4geX1zaG91bGRQYXJzZUFycm93KGUpe3JldHVybiF0aGlzLmNhbkluc2VydFNlbWljb2xvbigpfXBhcnNlQXJyb3coZSl7aWYodGhpcy5lYXQoMTkpKXtyZXR1cm4gZX19cGFyc2VQYXJlbkl0ZW0oZSx0LHIpe3JldHVybiBlfXBhcnNlTmV3T3JOZXdUYXJnZXQoKXtjb25zdCBlPXRoaXMuc3RhcnROb2RlKCk7dGhpcy5uZXh0KCk7aWYodGhpcy5tYXRjaCgxNikpe2NvbnN0IHQ9dGhpcy5jcmVhdGVJZGVudGlmaWVyKHRoaXMuc3RhcnROb2RlQXROb2RlKGUpLCJuZXciKTt0aGlzLm5leHQoKTtjb25zdCByPXRoaXMucGFyc2VNZXRhUHJvcGVydHkoZSx0LCJ0YXJnZXQiKTtpZighdGhpcy5zY29wZS5pbk5vbkFycm93RnVuY3Rpb24mJiF0aGlzLnNjb3BlLmluQ2xhc3Mpe3RoaXMucmFpc2Uoci5zdGFydCxjbC5VbmV4cGVjdGVkTmV3VGFyZ2V0KX1yZXR1cm4gcn1yZXR1cm4gdGhpcy5wYXJzZU5ldyhlKX1wYXJzZU5ldyhlKXtlLmNhbGxlZT10aGlzLnBhcnNlTm9DYWxsRXhwcigpO2lmKGUuY2FsbGVlLnR5cGU9PT0iSW1wb3J0Iil7dGhpcy5yYWlzZShlLmNhbGxlZS5zdGFydCxjbC5JbXBvcnRDYWxsTm90TmV3RXhwcmVzc2lvbil9ZWxzZSBpZih0aGlzLmlzT3B0aW9uYWxDaGFpbihlLmNhbGxlZSkpe3RoaXMucmFpc2UodGhpcy5zdGF0ZS5sYXN0VG9rRW5kLGNsLk9wdGlvbmFsQ2hhaW5pbmdOb05ldyl9ZWxzZSBpZih0aGlzLmVhdCgxOCkpe3RoaXMucmFpc2UodGhpcy5zdGF0ZS5zdGFydCxjbC5PcHRpb25hbENoYWluaW5nTm9OZXcpfXRoaXMucGFyc2VOZXdBcmd1bWVudHMoZSk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJOZXdFeHByZXNzaW9uIil9cGFyc2VOZXdBcmd1bWVudHMoZSl7aWYodGhpcy5lYXQoMTApKXtjb25zdCB0PXRoaXMucGFyc2VFeHByTGlzdCgxMSk7dGhpcy50b1JlZmVyZW5jZWRMaXN0KHQpO2UuYXJndW1lbnRzPXR9ZWxzZXtlLmFyZ3VtZW50cz1bXX19cGFyc2VUZW1wbGF0ZUVsZW1lbnQoZSl7Y29uc3QgdD10aGlzLnN0YXJ0Tm9kZSgpO2lmKHRoaXMuc3RhdGUudmFsdWU9PT1udWxsKXtpZighZSl7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLnN0YXJ0KzEsY2wuSW52YWxpZEVzY2FwZVNlcXVlbmNlVGVtcGxhdGUpfX10LnZhbHVlPXtyYXc6dGhpcy5pbnB1dC5zbGljZSh0aGlzLnN0YXRlLnN0YXJ0LHRoaXMuc3RhdGUuZW5kKS5yZXBsYWNlKC9cclxuPy9nLCJcbiIpLGNvb2tlZDp0aGlzLnN0YXRlLnZhbHVlfTt0aGlzLm5leHQoKTt0LnRhaWw9dGhpcy5tYXRjaCgyMik7cmV0dXJuIHRoaXMuZmluaXNoTm9kZSh0LCJUZW1wbGF0ZUVsZW1lbnQiKX1wYXJzZVRlbXBsYXRlKGUpe2NvbnN0IHQ9dGhpcy5zdGFydE5vZGUoKTt0aGlzLm5leHQoKTt0LmV4cHJlc3Npb25zPVtdO2xldCByPXRoaXMucGFyc2VUZW1wbGF0ZUVsZW1lbnQoZSk7dC5xdWFzaXM9W3JdO3doaWxlKCFyLnRhaWwpe3RoaXMuZXhwZWN0KDIzKTt0LmV4cHJlc3Npb25zLnB1c2godGhpcy5wYXJzZVRlbXBsYXRlU3Vic3RpdHV0aW9uKCkpO3RoaXMuZXhwZWN0KDgpO3QucXVhc2lzLnB1c2gocj10aGlzLnBhcnNlVGVtcGxhdGVFbGVtZW50KGUpKX10aGlzLm5leHQoKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKHQsIlRlbXBsYXRlTGl0ZXJhbCIpfXBhcnNlVGVtcGxhdGVTdWJzdGl0dXRpb24oKXtyZXR1cm4gdGhpcy5wYXJzZUV4cHJlc3Npb24oKX1wYXJzZU9iamVjdExpa2UoZSx0LHIscyl7aWYocil7dGhpcy5leHBlY3RQbHVnaW4oInJlY29yZEFuZFR1cGxlIil9Y29uc3QgaT10aGlzLnN0YXRlLmluRlNoYXJwUGlwZWxpbmVEaXJlY3RCb2R5O3RoaXMuc3RhdGUuaW5GU2hhcnBQaXBlbGluZURpcmVjdEJvZHk9ZmFsc2U7Y29uc3Qgbj1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBhPXRydWU7Y29uc3Qgbz10aGlzLnN0YXJ0Tm9kZSgpO28ucHJvcGVydGllcz1bXTt0aGlzLm5leHQoKTt3aGlsZSghdGhpcy5tYXRjaChlKSl7aWYoYSl7YT1mYWxzZX1lbHNle3RoaXMuZXhwZWN0KDEyKTtpZih0aGlzLm1hdGNoKGUpKXt0aGlzLmFkZEV4dHJhKG8sInRyYWlsaW5nQ29tbWEiLHRoaXMuc3RhdGUubGFzdFRva1N0YXJ0KTticmVha319bGV0IGk7aWYodCl7aT10aGlzLnBhcnNlQmluZGluZ1Byb3BlcnR5KCl9ZWxzZXtpPXRoaXMucGFyc2VQcm9wZXJ0eURlZmluaXRpb24ocyk7dGhpcy5jaGVja1Byb3RvKGkscixuLHMpfWlmKHImJiF0aGlzLmlzT2JqZWN0UHJvcGVydHkoaSkmJmkudHlwZSE9PSJTcHJlYWRFbGVtZW50Iil7dGhpcy5yYWlzZShpLnN0YXJ0LGNsLkludmFsaWRSZWNvcmRQcm9wZXJ0eSl9aWYoaS5zaG9ydGhhbmQpe3RoaXMuYWRkRXh0cmEoaSwic2hvcnRoYW5kIix0cnVlKX1vLnByb3BlcnRpZXMucHVzaChpKX10aGlzLm5leHQoKTt0aGlzLnN0YXRlLmluRlNoYXJwUGlwZWxpbmVEaXJlY3RCb2R5PWk7bGV0IGw9Ik9iamVjdEV4cHJlc3Npb24iO2lmKHQpe2w9Ik9iamVjdFBhdHRlcm4ifWVsc2UgaWYocil7bD0iUmVjb3JkRXhwcmVzc2lvbiJ9cmV0dXJuIHRoaXMuZmluaXNoTm9kZShvLGwpfW1heWJlQXN5bmNPckFjY2Vzc29yUHJvcChlKXtyZXR1cm4hZS5jb21wdXRlZCYmZS5rZXkudHlwZT09PSJJZGVudGlmaWVyIiYmKHRoaXMuaXNMaXRlcmFsUHJvcGVydHlOYW1lKCl8fHRoaXMubWF0Y2goMCl8fHRoaXMubWF0Y2goNDkpKX1wYXJzZVByb3BlcnR5RGVmaW5pdGlvbihlKXtsZXQgdD1bXTtpZih0aGlzLm1hdGNoKDI0KSl7aWYodGhpcy5oYXNQbHVnaW4oImRlY29yYXRvcnMiKSl7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLnN0YXJ0LGNsLlVuc3VwcG9ydGVkUHJvcGVydHlEZWNvcmF0b3IpfXdoaWxlKHRoaXMubWF0Y2goMjQpKXt0LnB1c2godGhpcy5wYXJzZURlY29yYXRvcigpKX19Y29uc3Qgcj10aGlzLnN0YXJ0Tm9kZSgpO2xldCBzPWZhbHNlO2xldCBpPWZhbHNlO2xldCBuO2xldCBhO2lmKHRoaXMubWF0Y2goMjEpKXtpZih0Lmxlbmd0aCl0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5wYXJzZVNwcmVhZCgpfWlmKHQubGVuZ3RoKXtyLmRlY29yYXRvcnM9dDt0PVtdfXIubWV0aG9kPWZhbHNlO2lmKGUpe249dGhpcy5zdGF0ZS5zdGFydDthPXRoaXMuc3RhdGUuc3RhcnRMb2N9bGV0IG89dGhpcy5lYXQoNDkpO3RoaXMucGFyc2VQcm9wZXJ0eU5hbWVQcmVmaXhPcGVyYXRvcihyKTtjb25zdCBsPXRoaXMuc3RhdGUuY29udGFpbnNFc2M7Y29uc3QgdT10aGlzLnBhcnNlUHJvcGVydHlOYW1lKHIpO2lmKCFvJiYhbCYmdGhpcy5tYXliZUFzeW5jT3JBY2Nlc3NvclByb3Aocikpe2NvbnN0IGU9dS5uYW1lO2lmKGU9PT0iYXN5bmMiJiYhdGhpcy5oYXNQcmVjZWRpbmdMaW5lQnJlYWsoKSl7cz10cnVlO3RoaXMucmVzZXRQcmV2aW91c05vZGVUcmFpbGluZ0NvbW1lbnRzKHUpO289dGhpcy5lYXQoNDkpO3RoaXMucGFyc2VQcm9wZXJ0eU5hbWUocil9aWYoZT09PSJnZXQifHxlPT09InNldCIpe2k9dHJ1ZTt0aGlzLnJlc2V0UHJldmlvdXNOb2RlVHJhaWxpbmdDb21tZW50cyh1KTtyLmtpbmQ9ZTtpZih0aGlzLm1hdGNoKDQ5KSl7bz10cnVlO3RoaXMucmFpc2UodGhpcy5zdGF0ZS5wb3MsY2wuQWNjZXNzb3JJc0dlbmVyYXRvcixlKTt0aGlzLm5leHQoKX10aGlzLnBhcnNlUHJvcGVydHlOYW1lKHIpfX10aGlzLnBhcnNlT2JqUHJvcFZhbHVlKHIsbixhLG8scyxmYWxzZSxpLGUpO3JldHVybiByfWdldEdldHRlclNldHRlckV4cGVjdGVkUGFyYW1Db3VudChlKXtyZXR1cm4gZS5raW5kPT09ImdldCI/MDoxfWdldE9iamVjdE9yQ2xhc3NNZXRob2RQYXJhbXMoZSl7cmV0dXJuIGUucGFyYW1zfWNoZWNrR2V0dGVyU2V0dGVyUGFyYW1zKGUpe3ZhciB0O2NvbnN0IHI9dGhpcy5nZXRHZXR0ZXJTZXR0ZXJFeHBlY3RlZFBhcmFtQ291bnQoZSk7Y29uc3Qgcz10aGlzLmdldE9iamVjdE9yQ2xhc3NNZXRob2RQYXJhbXMoZSk7Y29uc3QgaT1lLnN0YXJ0O2lmKHMubGVuZ3RoIT09cil7aWYoZS5raW5kPT09ImdldCIpe3RoaXMucmFpc2UoaSxjbC5CYWRHZXR0ZXJBcml0eSl9ZWxzZXt0aGlzLnJhaXNlKGksY2wuQmFkU2V0dGVyQXJpdHkpfX1pZihlLmtpbmQ9PT0ic2V0IiYmKCh0PXNbcy5sZW5ndGgtMV0pPT1udWxsP3ZvaWQgMDp0LnR5cGUpPT09IlJlc3RFbGVtZW50Iil7dGhpcy5yYWlzZShpLGNsLkJhZFNldHRlclJlc3RQYXJhbWV0ZXIpfX1wYXJzZU9iamVjdE1ldGhvZChlLHQscixzLGkpe2lmKGkpe3RoaXMucGFyc2VNZXRob2QoZSx0LGZhbHNlLGZhbHNlLGZhbHNlLCJPYmplY3RNZXRob2QiKTt0aGlzLmNoZWNrR2V0dGVyU2V0dGVyUGFyYW1zKGUpO3JldHVybiBlfWlmKHJ8fHR8fHRoaXMubWF0Y2goMTApKXtpZihzKXRoaXMudW5leHBlY3RlZCgpO2Uua2luZD0ibWV0aG9kIjtlLm1ldGhvZD10cnVlO3JldHVybiB0aGlzLnBhcnNlTWV0aG9kKGUsdCxyLGZhbHNlLGZhbHNlLCJPYmplY3RNZXRob2QiKX19cGFyc2VPYmplY3RQcm9wZXJ0eShlLHQscixzLGkpe2Uuc2hvcnRoYW5kPWZhbHNlO2lmKHRoaXMuZWF0KDE0KSl7ZS52YWx1ZT1zP3RoaXMucGFyc2VNYXliZURlZmF1bHQodGhpcy5zdGF0ZS5zdGFydCx0aGlzLnN0YXRlLnN0YXJ0TG9jKTp0aGlzLnBhcnNlTWF5YmVBc3NpZ25BbGxvd0luKGkpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiT2JqZWN0UHJvcGVydHkiKX1pZighZS5jb21wdXRlZCYmZS5rZXkudHlwZT09PSJJZGVudGlmaWVyIil7dGhpcy5jaGVja1Jlc2VydmVkV29yZChlLmtleS5uYW1lLGUua2V5LnN0YXJ0LHRydWUsZmFsc2UpO2lmKHMpe2UudmFsdWU9dGhpcy5wYXJzZU1heWJlRGVmYXVsdCh0LHIsWWMoZS5rZXkpKX1lbHNlIGlmKHRoaXMubWF0Y2goMjcpJiZpKXtpZihpLnNob3J0aGFuZEFzc2lnbj09PS0xKXtpLnNob3J0aGFuZEFzc2lnbj10aGlzLnN0YXRlLnN0YXJ0fWUudmFsdWU9dGhpcy5wYXJzZU1heWJlRGVmYXVsdCh0LHIsWWMoZS5rZXkpKX1lbHNle2UudmFsdWU9WWMoZS5rZXkpfWUuc2hvcnRoYW5kPXRydWU7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJPYmplY3RQcm9wZXJ0eSIpfX1wYXJzZU9ialByb3BWYWx1ZShlLHQscixzLGksbixhLG8pe2NvbnN0IGw9dGhpcy5wYXJzZU9iamVjdE1ldGhvZChlLHMsaSxuLGEpfHx0aGlzLnBhcnNlT2JqZWN0UHJvcGVydHkoZSx0LHIsbixvKTtpZighbCl0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gbH1wYXJzZVByb3BlcnR5TmFtZShlKXtpZih0aGlzLmVhdCgwKSl7ZS5jb21wdXRlZD10cnVlO2Uua2V5PXRoaXMucGFyc2VNYXliZUFzc2lnbkFsbG93SW4oKTt0aGlzLmV4cGVjdCgzKX1lbHNle2NvbnN0e3R5cGU6dCx2YWx1ZTpyfT10aGlzLnN0YXRlO2xldCBzO2lmKFVsKHQpKXtzPXRoaXMucGFyc2VJZGVudGlmaWVyKHRydWUpfWVsc2V7c3dpdGNoKHQpe2Nhc2UgMTI0OnM9dGhpcy5wYXJzZU51bWVyaWNMaXRlcmFsKHIpO2JyZWFrO2Nhc2UgMTIzOnM9dGhpcy5wYXJzZVN0cmluZ0xpdGVyYWwocik7YnJlYWs7Y2FzZSAxMjU6cz10aGlzLnBhcnNlQmlnSW50TGl0ZXJhbChyKTticmVhaztjYXNlIDEyNjpzPXRoaXMucGFyc2VEZWNpbWFsTGl0ZXJhbChyKTticmVhaztjYXNlIDEyODp7Y29uc3QgZT10aGlzLnN0YXRlLnN0YXJ0KzE7dGhpcy5yYWlzZShlLGNsLlVuZXhwZWN0ZWRQcml2YXRlRmllbGQpO3M9dGhpcy5wYXJzZVByaXZhdGVOYW1lKCk7YnJlYWt9ZGVmYXVsdDp0aHJvdyB0aGlzLnVuZXhwZWN0ZWQoKX19ZS5rZXk9cztpZih0IT09MTI4KXtlLmNvbXB1dGVkPWZhbHNlfX1yZXR1cm4gZS5rZXl9aW5pdEZ1bmN0aW9uKGUsdCl7ZS5pZD1udWxsO2UuZ2VuZXJhdG9yPWZhbHNlO2UuYXN5bmM9ISF0fXBhcnNlTWV0aG9kKGUsdCxyLHMsaSxuLGEpe2lmKGE9PT12b2lkIDApe2E9ZmFsc2V9dGhpcy5pbml0RnVuY3Rpb24oZSxyKTtlLmdlbmVyYXRvcj0hIXQ7Y29uc3Qgbz1zO3RoaXMuc2NvcGUuZW50ZXIoUHV8TnV8KGE/RnU6MCl8KGk/SXU6MCkpO3RoaXMucHJvZFBhcmFtLmVudGVyKFhjKHIsZS5nZW5lcmF0b3IpKTt0aGlzLnBhcnNlRnVuY3Rpb25QYXJhbXMoZSxvKTt0aGlzLnBhcnNlRnVuY3Rpb25Cb2R5QW5kRmluaXNoKGUsbix0cnVlKTt0aGlzLnByb2RQYXJhbS5leGl0KCk7dGhpcy5zY29wZS5leGl0KCk7cmV0dXJuIGV9cGFyc2VBcnJheUxpa2UoZSx0LHIscyl7aWYocil7dGhpcy5leHBlY3RQbHVnaW4oInJlY29yZEFuZFR1cGxlIil9Y29uc3QgaT10aGlzLnN0YXRlLmluRlNoYXJwUGlwZWxpbmVEaXJlY3RCb2R5O3RoaXMuc3RhdGUuaW5GU2hhcnBQaXBlbGluZURpcmVjdEJvZHk9ZmFsc2U7Y29uc3Qgbj10aGlzLnN0YXJ0Tm9kZSgpO3RoaXMubmV4dCgpO24uZWxlbWVudHM9dGhpcy5wYXJzZUV4cHJMaXN0KGUsIXIscyxuKTt0aGlzLnN0YXRlLmluRlNoYXJwUGlwZWxpbmVEaXJlY3RCb2R5PWk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShuLHI/IlR1cGxlRXhwcmVzc2lvbiI6IkFycmF5RXhwcmVzc2lvbiIpfXBhcnNlQXJyb3dFeHByZXNzaW9uKGUsdCxyLHMpe3RoaXMuc2NvcGUuZW50ZXIoUHV8RHUpO2xldCBpPVhjKHIsZmFsc2UpO2lmKCF0aGlzLm1hdGNoKDApJiZ0aGlzLnByb2RQYXJhbS5oYXNJbil7aXw9cWN9dGhpcy5wcm9kUGFyYW0uZW50ZXIoaSk7dGhpcy5pbml0RnVuY3Rpb24oZSxyKTtjb25zdCBuPXRoaXMuc3RhdGUubWF5YmVJbkFycm93UGFyYW1ldGVycztpZih0KXt0aGlzLnN0YXRlLm1heWJlSW5BcnJvd1BhcmFtZXRlcnM9dHJ1ZTt0aGlzLnNldEFycm93RnVuY3Rpb25QYXJhbWV0ZXJzKGUsdCxzKX10aGlzLnN0YXRlLm1heWJlSW5BcnJvd1BhcmFtZXRlcnM9ZmFsc2U7dGhpcy5wYXJzZUZ1bmN0aW9uQm9keShlLHRydWUpO3RoaXMucHJvZFBhcmFtLmV4aXQoKTt0aGlzLnNjb3BlLmV4aXQoKTt0aGlzLnN0YXRlLm1heWJlSW5BcnJvd1BhcmFtZXRlcnM9bjtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIkFycm93RnVuY3Rpb25FeHByZXNzaW9uIil9c2V0QXJyb3dGdW5jdGlvblBhcmFtZXRlcnMoZSx0LHIpe2UucGFyYW1zPXRoaXMudG9Bc3NpZ25hYmxlTGlzdCh0LHIsZmFsc2UpfXBhcnNlRnVuY3Rpb25Cb2R5QW5kRmluaXNoKGUsdCxyKXtpZihyPT09dm9pZCAwKXtyPWZhbHNlfXRoaXMucGFyc2VGdW5jdGlvbkJvZHkoZSxmYWxzZSxyKTt0aGlzLmZpbmlzaE5vZGUoZSx0KX1wYXJzZUZ1bmN0aW9uQm9keShlLHQscil7aWYocj09PXZvaWQgMCl7cj1mYWxzZX1jb25zdCBzPXQmJiF0aGlzLm1hdGNoKDUpO3RoaXMuZXhwcmVzc2lvblNjb3BlLmVudGVyKFJjKCkpO2lmKHMpe2UuYm9keT10aGlzLnBhcnNlTWF5YmVBc3NpZ24oKTt0aGlzLmNoZWNrUGFyYW1zKGUsZmFsc2UsdCxmYWxzZSl9ZWxzZXtjb25zdCBzPXRoaXMuc3RhdGUuc3RyaWN0O2NvbnN0IGk9dGhpcy5zdGF0ZS5sYWJlbHM7dGhpcy5zdGF0ZS5sYWJlbHM9W107dGhpcy5wcm9kUGFyYW0uZW50ZXIodGhpcy5wcm9kUGFyYW0uY3VycmVudEZsYWdzKCl8VmMpO2UuYm9keT10aGlzLnBhcnNlQmxvY2sodHJ1ZSxmYWxzZSwoaT0+e2NvbnN0IG49IXRoaXMuaXNTaW1wbGVQYXJhbUxpc3QoZS5wYXJhbXMpO2lmKGkmJm4pe2NvbnN0IHQ9KGUua2luZD09PSJtZXRob2QifHxlLmtpbmQ9PT0iY29uc3RydWN0b3IiKSYmISFlLmtleT9lLmtleS5lbmQ6ZS5zdGFydDt0aGlzLnJhaXNlKHQsY2wuSWxsZWdhbExhbmd1YWdlTW9kZURpcmVjdGl2ZSl9Y29uc3QgYT0hcyYmdGhpcy5zdGF0ZS5zdHJpY3Q7dGhpcy5jaGVja1BhcmFtcyhlLCF0aGlzLnN0YXRlLnN0cmljdCYmIXQmJiFyJiYhbix0LGEpO2lmKHRoaXMuc3RhdGUuc3RyaWN0JiZlLmlkKXt0aGlzLmNoZWNrTFZhbChlLmlkLCJmdW5jdGlvbiBuYW1lIixyYyx1bmRlZmluZWQsdW5kZWZpbmVkLGEpfX0pKTt0aGlzLnByb2RQYXJhbS5leGl0KCk7dGhpcy5zdGF0ZS5sYWJlbHM9aX10aGlzLmV4cHJlc3Npb25TY29wZS5leGl0KCl9aXNTaW1wbGVQYXJhbUxpc3QoZSl7Zm9yKGxldCB0PTAscj1lLmxlbmd0aDt0PHI7dCsrKXtpZihlW3RdLnR5cGUhPT0iSWRlbnRpZmllciIpcmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfWNoZWNrUGFyYW1zKGUsdCxyLHMpe2lmKHM9PT12b2lkIDApe3M9dHJ1ZX1jb25zdCBpPW5ldyBTZXQ7Zm9yKGNvbnN0IHIgb2YgZS5wYXJhbXMpe3RoaXMuY2hlY2tMVmFsKHIsImZ1bmN0aW9uIHBhcmFtZXRlciBsaXN0IixLdSx0P251bGw6aSx1bmRlZmluZWQscyl9fXBhcnNlRXhwckxpc3QoZSx0LHIscyl7Y29uc3QgaT1bXTtsZXQgbj10cnVlO3doaWxlKCF0aGlzLmVhdChlKSl7aWYobil7bj1mYWxzZX1lbHNle3RoaXMuZXhwZWN0KDEyKTtpZih0aGlzLm1hdGNoKGUpKXtpZihzKXt0aGlzLmFkZEV4dHJhKHMsInRyYWlsaW5nQ29tbWEiLHRoaXMuc3RhdGUubGFzdFRva1N0YXJ0KX10aGlzLm5leHQoKTticmVha319aS5wdXNoKHRoaXMucGFyc2VFeHByTGlzdEl0ZW0odCxyKSl9cmV0dXJuIGl9cGFyc2VFeHByTGlzdEl0ZW0oZSx0LHIpe2xldCBzO2lmKHRoaXMubWF0Y2goMTIpKXtpZighZSl7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLnBvcyxjbC5VbmV4cGVjdGVkVG9rZW4sIiwiKX1zPW51bGx9ZWxzZSBpZih0aGlzLm1hdGNoKDIxKSl7Y29uc3QgZT10aGlzLnN0YXRlLnN0YXJ0O2NvbnN0IHI9dGhpcy5zdGF0ZS5zdGFydExvYztzPXRoaXMucGFyc2VQYXJlbkl0ZW0odGhpcy5wYXJzZVNwcmVhZCh0KSxlLHIpfWVsc2UgaWYodGhpcy5tYXRjaCgxNykpe3RoaXMuZXhwZWN0UGx1Z2luKCJwYXJ0aWFsQXBwbGljYXRpb24iKTtpZighcil7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLnN0YXJ0LGNsLlVuZXhwZWN0ZWRBcmd1bWVudFBsYWNlaG9sZGVyKX1jb25zdCBlPXRoaXMuc3RhcnROb2RlKCk7dGhpcy5uZXh0KCk7cz10aGlzLmZpbmlzaE5vZGUoZSwiQXJndW1lbnRQbGFjZWhvbGRlciIpfWVsc2V7cz10aGlzLnBhcnNlTWF5YmVBc3NpZ25BbGxvd0luKHQsdGhpcy5wYXJzZVBhcmVuSXRlbSl9cmV0dXJuIHN9cGFyc2VJZGVudGlmaWVyKGUpe2NvbnN0IHQ9dGhpcy5zdGFydE5vZGUoKTtjb25zdCByPXRoaXMucGFyc2VJZGVudGlmaWVyTmFtZSh0LnN0YXJ0LGUpO3JldHVybiB0aGlzLmNyZWF0ZUlkZW50aWZpZXIodCxyKX1jcmVhdGVJZGVudGlmaWVyKGUsdCl7ZS5uYW1lPXQ7ZS5sb2MuaWRlbnRpZmllck5hbWU9dDtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIklkZW50aWZpZXIiKX1wYXJzZUlkZW50aWZpZXJOYW1lKGUsdCl7bGV0IHI7Y29uc3R7c3RhcnQ6cyx0eXBlOml9PXRoaXMuc3RhdGU7aWYoVWwoaSkpe3I9dGhpcy5zdGF0ZS52YWx1ZX1lbHNle3Rocm93IHRoaXMudW5leHBlY3RlZCgpfWNvbnN0IG49amwoaSk7aWYodCl7aWYobil7dGhpcy5yZXBsYWNlVG9rZW4oMTIyKX19ZWxzZXt0aGlzLmNoZWNrUmVzZXJ2ZWRXb3JkKHIscyxuLGZhbHNlKX10aGlzLm5leHQoKTtyZXR1cm4gcn1jaGVja1Jlc2VydmVkV29yZChlLHQscixzKXtpZihlLmxlbmd0aD4xMCl7cmV0dXJufWlmKCFBdShlKSl7cmV0dXJufWlmKGU9PT0ieWllbGQiKXtpZih0aGlzLnByb2RQYXJhbS5oYXNZaWVsZCl7dGhpcy5yYWlzZSh0LGNsLllpZWxkQmluZGluZ0lkZW50aWZpZXIpO3JldHVybn19ZWxzZSBpZihlPT09ImF3YWl0Iil7aWYodGhpcy5wcm9kUGFyYW0uaGFzQXdhaXQpe3RoaXMucmFpc2UodCxjbC5Bd2FpdEJpbmRpbmdJZGVudGlmaWVyKTtyZXR1cm59ZWxzZSBpZih0aGlzLnNjb3BlLmluU3RhdGljQmxvY2spe3RoaXMucmFpc2UodCxjbC5Bd2FpdEJpbmRpbmdJZGVudGlmaWVySW5TdGF0aWNCbG9jayk7cmV0dXJufWVsc2V7dGhpcy5leHByZXNzaW9uU2NvcGUucmVjb3JkQXN5bmNBcnJvd1BhcmFtZXRlcnNFcnJvcih0LGNsLkF3YWl0QmluZGluZ0lkZW50aWZpZXIpfX1lbHNlIGlmKGU9PT0iYXJndW1lbnRzIil7aWYodGhpcy5zY29wZS5pbkNsYXNzQW5kTm90SW5Ob25BcnJvd0Z1bmN0aW9uKXt0aGlzLnJhaXNlKHQsY2wuQXJndW1lbnRzSW5DbGFzcyk7cmV0dXJufX1pZihyJiZFdShlKSl7dGhpcy5yYWlzZSh0LGNsLlVuZXhwZWN0ZWRLZXl3b3JkLGUpO3JldHVybn1jb25zdCBpPSF0aGlzLnN0YXRlLnN0cmljdD9ndTpzP2J1Onh1O2lmKGkoZSx0aGlzLmluTW9kdWxlKSl7dGhpcy5yYWlzZSh0LGNsLlVuZXhwZWN0ZWRSZXNlcnZlZFdvcmQsZSl9fWlzQXdhaXRBbGxvd2VkKCl7aWYodGhpcy5wcm9kUGFyYW0uaGFzQXdhaXQpcmV0dXJuIHRydWU7aWYodGhpcy5vcHRpb25zLmFsbG93QXdhaXRPdXRzaWRlRnVuY3Rpb24mJiF0aGlzLnNjb3BlLmluRnVuY3Rpb24pe3JldHVybiB0cnVlfXJldHVybiBmYWxzZX1wYXJzZUF3YWl0KGUsdCl7Y29uc3Qgcj10aGlzLnN0YXJ0Tm9kZUF0KGUsdCk7dGhpcy5leHByZXNzaW9uU2NvcGUucmVjb3JkUGFyYW1ldGVySW5pdGlhbGl6ZXJFcnJvcihyLnN0YXJ0LGNsLkF3YWl0RXhwcmVzc2lvbkZvcm1hbFBhcmFtZXRlcik7aWYodGhpcy5lYXQoNDkpKXt0aGlzLnJhaXNlKHIuc3RhcnQsY2wuT2Jzb2xldGVBd2FpdFN0YXIpfWlmKCF0aGlzLnNjb3BlLmluRnVuY3Rpb24mJiF0aGlzLm9wdGlvbnMuYWxsb3dBd2FpdE91dHNpZGVGdW5jdGlvbil7aWYodGhpcy5pc0FtYmlndW91c0F3YWl0KCkpe3RoaXMuYW1iaWd1b3VzU2NyaXB0RGlmZmVyZW50QXN0PXRydWV9ZWxzZXt0aGlzLnNhd1VuYW1iaWd1b3VzRVNNPXRydWV9fWlmKCF0aGlzLnN0YXRlLnNvbG9Bd2FpdCl7ci5hcmd1bWVudD10aGlzLnBhcnNlTWF5YmVVbmFyeShudWxsLHRydWUpfXJldHVybiB0aGlzLmZpbmlzaE5vZGUociwiQXdhaXRFeHByZXNzaW9uIil9aXNBbWJpZ3VvdXNBd2FpdCgpe3JldHVybiB0aGlzLmhhc1ByZWNlZGluZ0xpbmVCcmVhaygpfHx0aGlzLm1hdGNoKDQ3KXx8dGhpcy5tYXRjaCgxMCl8fHRoaXMubWF0Y2goMCl8fHRoaXMubWF0Y2goMjIpfHx0aGlzLm1hdGNoKDEyNyl8fHRoaXMubWF0Y2goNTApfHx0aGlzLmhhc1BsdWdpbigidjhpbnRyaW5zaWMiKSYmdGhpcy5tYXRjaCg0OCl9cGFyc2VZaWVsZCgpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTt0aGlzLmV4cHJlc3Npb25TY29wZS5yZWNvcmRQYXJhbWV0ZXJJbml0aWFsaXplckVycm9yKGUuc3RhcnQsY2wuWWllbGRJblBhcmFtZXRlcik7dGhpcy5uZXh0KCk7bGV0IHQ9ZmFsc2U7bGV0IHI9bnVsbDtpZighdGhpcy5oYXNQcmVjZWRpbmdMaW5lQnJlYWsoKSl7dD10aGlzLmVhdCg0OSk7c3dpdGNoKHRoaXMuc3RhdGUudHlwZSl7Y2FzZSAxMzpjYXNlIDEyOTpjYXNlIDg6Y2FzZSAxMTpjYXNlIDM6Y2FzZSA5OmNhc2UgMTQ6Y2FzZSAxMjppZighdClicmVhaztkZWZhdWx0OnI9dGhpcy5wYXJzZU1heWJlQXNzaWduKCl9fWUuZGVsZWdhdGU9dDtlLmFyZ3VtZW50PXI7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJZaWVsZEV4cHJlc3Npb24iKX1jaGVja1BpcGVsaW5lQXRJbmZpeE9wZXJhdG9yKGUsdCl7aWYodGhpcy5nZXRQbHVnaW5PcHRpb24oInBpcGVsaW5lT3BlcmF0b3IiLCJwcm9wb3NhbCIpPT09InNtYXJ0Iil7aWYoZS50eXBlPT09IlNlcXVlbmNlRXhwcmVzc2lvbiIpe3RoaXMucmFpc2UodCxjbC5QaXBlbGluZUhlYWRTZXF1ZW5jZUV4cHJlc3Npb24pfX19Y2hlY2tIYWNrUGlwZUJvZHlFYXJseUVycm9ycyhlKXtpZighdGhpcy50b3BpY1JlZmVyZW5jZVdhc1VzZWRJbkN1cnJlbnRDb250ZXh0KCkpe3RoaXMucmFpc2UoZSxjbC5QaXBlVG9waWNVbnVzZWQpfX1wYXJzZVNtYXJ0UGlwZWxpbmVCb2R5SW5TdHlsZShlLHQscil7Y29uc3Qgcz10aGlzLnN0YXJ0Tm9kZUF0KHQscik7aWYodGhpcy5pc1NpbXBsZVJlZmVyZW5jZShlKSl7cy5jYWxsZWU9ZTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKHMsIlBpcGVsaW5lQmFyZUZ1bmN0aW9uIil9ZWxzZXt0aGlzLmNoZWNrU21hcnRQaXBlVG9waWNCb2R5RWFybHlFcnJvcnModCk7cy5leHByZXNzaW9uPWU7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShzLCJQaXBlbGluZVRvcGljRXhwcmVzc2lvbiIpfX1pc1NpbXBsZVJlZmVyZW5jZShlKXtzd2l0Y2goZS50eXBlKXtjYXNlIk1lbWJlckV4cHJlc3Npb24iOnJldHVybiFlLmNvbXB1dGVkJiZ0aGlzLmlzU2ltcGxlUmVmZXJlbmNlKGUub2JqZWN0KTtjYXNlIklkZW50aWZpZXIiOnJldHVybiB0cnVlO2RlZmF1bHQ6cmV0dXJuIGZhbHNlfX1jaGVja1NtYXJ0UGlwZVRvcGljQm9keUVhcmx5RXJyb3JzKGUpe2lmKHRoaXMubWF0Y2goMTkpKXt0aHJvdyB0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsY2wuUGlwZWxpbmVCb2R5Tm9BcnJvdyl9ZWxzZSBpZighdGhpcy50b3BpY1JlZmVyZW5jZVdhc1VzZWRJbkN1cnJlbnRDb250ZXh0KCkpe3RoaXMucmFpc2UoZSxjbC5QaXBlbGluZVRvcGljVW51c2VkKX19d2l0aFRvcGljQmluZGluZ0NvbnRleHQoZSl7Y29uc3QgdD10aGlzLnN0YXRlLnRvcGljQ29udGV4dDt0aGlzLnN0YXRlLnRvcGljQ29udGV4dD17bWF4TnVtT2ZSZXNvbHZhYmxlVG9waWNzOjEsbWF4VG9waWNJbmRleDpudWxsfTt0cnl7cmV0dXJuIGUoKX1maW5hbGx5e3RoaXMuc3RhdGUudG9waWNDb250ZXh0PXR9fXdpdGhTbWFydE1peFRvcGljRm9yYmlkZGluZ0NvbnRleHQoZSl7Y29uc3QgdD10aGlzLmdldFBsdWdpbk9wdGlvbigicGlwZWxpbmVPcGVyYXRvciIsInByb3Bvc2FsIik7aWYodD09PSJzbWFydCIpe2NvbnN0IHQ9dGhpcy5zdGF0ZS50b3BpY0NvbnRleHQ7dGhpcy5zdGF0ZS50b3BpY0NvbnRleHQ9e21heE51bU9mUmVzb2x2YWJsZVRvcGljczowLG1heFRvcGljSW5kZXg6bnVsbH07dHJ5e3JldHVybiBlKCl9ZmluYWxseXt0aGlzLnN0YXRlLnRvcGljQ29udGV4dD10fX1lbHNle3JldHVybiBlKCl9fXdpdGhTb2xvQXdhaXRQZXJtaXR0aW5nQ29udGV4dChlKXtjb25zdCB0PXRoaXMuc3RhdGUuc29sb0F3YWl0O3RoaXMuc3RhdGUuc29sb0F3YWl0PXRydWU7dHJ5e3JldHVybiBlKCl9ZmluYWxseXt0aGlzLnN0YXRlLnNvbG9Bd2FpdD10fX1hbGxvd0luQW5kKGUpe2NvbnN0IHQ9dGhpcy5wcm9kUGFyYW0uY3VycmVudEZsYWdzKCk7Y29uc3Qgcj1xYyZ+dDtpZihyKXt0aGlzLnByb2RQYXJhbS5lbnRlcih0fHFjKTt0cnl7cmV0dXJuIGUoKX1maW5hbGx5e3RoaXMucHJvZFBhcmFtLmV4aXQoKX19cmV0dXJuIGUoKX1kaXNhbGxvd0luQW5kKGUpe2NvbnN0IHQ9dGhpcy5wcm9kUGFyYW0uY3VycmVudEZsYWdzKCk7Y29uc3Qgcj1xYyZ0O2lmKHIpe3RoaXMucHJvZFBhcmFtLmVudGVyKHQmfnFjKTt0cnl7cmV0dXJuIGUoKX1maW5hbGx5e3RoaXMucHJvZFBhcmFtLmV4aXQoKX19cmV0dXJuIGUoKX1yZWdpc3RlclRvcGljUmVmZXJlbmNlKCl7dGhpcy5zdGF0ZS50b3BpY0NvbnRleHQubWF4VG9waWNJbmRleD0wfXRvcGljUmVmZXJlbmNlSXNBbGxvd2VkSW5DdXJyZW50Q29udGV4dCgpe3JldHVybiB0aGlzLnN0YXRlLnRvcGljQ29udGV4dC5tYXhOdW1PZlJlc29sdmFibGVUb3BpY3M+PTF9dG9waWNSZWZlcmVuY2VXYXNVc2VkSW5DdXJyZW50Q29udGV4dCgpe3JldHVybiB0aGlzLnN0YXRlLnRvcGljQ29udGV4dC5tYXhUb3BpY0luZGV4IT1udWxsJiZ0aGlzLnN0YXRlLnRvcGljQ29udGV4dC5tYXhUb3BpY0luZGV4Pj0wfXBhcnNlRlNoYXJwUGlwZWxpbmVCb2R5KGUpe2NvbnN0IHQ9dGhpcy5zdGF0ZS5zdGFydDtjb25zdCByPXRoaXMuc3RhdGUuc3RhcnRMb2M7dGhpcy5zdGF0ZS5wb3RlbnRpYWxBcnJvd0F0PXRoaXMuc3RhdGUuc3RhcnQ7Y29uc3Qgcz10aGlzLnN0YXRlLmluRlNoYXJwUGlwZWxpbmVEaXJlY3RCb2R5O3RoaXMuc3RhdGUuaW5GU2hhcnBQaXBlbGluZURpcmVjdEJvZHk9dHJ1ZTtjb25zdCBpPXRoaXMucGFyc2VFeHByT3AodGhpcy5wYXJzZU1heWJlVW5hcnlPclByaXZhdGUoKSx0LHIsZSk7dGhpcy5zdGF0ZS5pbkZTaGFycFBpcGVsaW5lRGlyZWN0Qm9keT1zO3JldHVybiBpfXBhcnNlTW9kdWxlRXhwcmVzc2lvbigpe3RoaXMuZXhwZWN0UGx1Z2luKCJtb2R1bGVCbG9ja3MiKTtjb25zdCBlPXRoaXMuc3RhcnROb2RlKCk7dGhpcy5uZXh0KCk7dGhpcy5lYXQoNSk7Y29uc3QgdD10aGlzLmluaXRpYWxpemVTY29wZXModHJ1ZSk7dGhpcy5lbnRlckluaXRpYWxTY29wZXMoKTtjb25zdCByPXRoaXMuc3RhcnROb2RlKCk7dHJ5e2UuYm9keT10aGlzLnBhcnNlUHJvZ3JhbShyLDgsIm1vZHVsZSIpfWZpbmFsbHl7dCgpfXRoaXMuZWF0KDgpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiTW9kdWxlRXhwcmVzc2lvbiIpfXBhcnNlUHJvcGVydHlOYW1lUHJlZml4T3BlcmF0b3IoZSl7fX1jb25zdCB6aD17a2luZDoibG9vcCJ9LFZoPXtraW5kOiJzd2l0Y2gifTtjb25zdCBxaD0wLEdoPTEsWGg9MixKaD00O2NvbnN0IEhoPS9bXHVEODAwLVx1REZGRl0vdTtjb25zdCBXaD0vaW4oPzpzdGFuY2VvZik/L3k7ZnVuY3Rpb24gS2goZSl7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2NvbnN0IHI9ZVt0XTtjb25zdHt0eXBlOnN9PXI7aWYocz09PTEyOCl7e2NvbnN0e2xvYzpzLHN0YXJ0OmksdmFsdWU6bixlbmQ6YX09cjtjb25zdCBvPWkrMTtjb25zdCBsPW5ldyBlbChzLnN0YXJ0LmxpbmUscy5zdGFydC5jb2x1bW4rMSk7ZS5zcGxpY2UodCwxLG5ldyBBYyh7dHlwZTpydSgyNSksdmFsdWU6IiMiLHN0YXJ0OmksZW5kOm8sc3RhcnRMb2M6cy5zdGFydCxlbmRMb2M6bH0pLG5ldyBBYyh7dHlwZTpydSgxMjIpLHZhbHVlOm4sc3RhcnQ6byxlbmQ6YSxzdGFydExvYzpsLGVuZExvYzpzLmVuZH0pKTt0Kys7Y29udGludWV9fWlmKHR5cGVvZiBzPT09Im51bWJlciIpe3IudHlwZT1ydShzKX19cmV0dXJuIGV9Y2xhc3MgJGggZXh0ZW5kcyBVaHtwYXJzZVRvcExldmVsKGUsdCl7ZS5wcm9ncmFtPXRoaXMucGFyc2VQcm9ncmFtKHQpO2UuY29tbWVudHM9dGhpcy5zdGF0ZS5jb21tZW50cztpZih0aGlzLm9wdGlvbnMudG9rZW5zKWUudG9rZW5zPUtoKHRoaXMudG9rZW5zKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIkZpbGUiKX1wYXJzZVByb2dyYW0oZSx0LHIpe2lmKHQ9PT12b2lkIDApe3Q9MTI5fWlmKHI9PT12b2lkIDApe3I9dGhpcy5vcHRpb25zLnNvdXJjZVR5cGV9ZS5zb3VyY2VUeXBlPXI7ZS5pbnRlcnByZXRlcj10aGlzLnBhcnNlSW50ZXJwcmV0ZXJEaXJlY3RpdmUoKTt0aGlzLnBhcnNlQmxvY2tCb2R5KGUsdHJ1ZSx0cnVlLHQpO2lmKHRoaXMuaW5Nb2R1bGUmJiF0aGlzLm9wdGlvbnMuYWxsb3dVbmRlY2xhcmVkRXhwb3J0cyYmdGhpcy5zY29wZS51bmRlZmluZWRFeHBvcnRzLnNpemU+MCl7Zm9yKGNvbnN0W2Vdb2YgQXJyYXkuZnJvbSh0aGlzLnNjb3BlLnVuZGVmaW5lZEV4cG9ydHMpKXtjb25zdCB0PXRoaXMuc2NvcGUudW5kZWZpbmVkRXhwb3J0cy5nZXQoZSk7dGhpcy5yYWlzZSh0LGNsLk1vZHVsZUV4cG9ydFVuZGVmaW5lZCxlKX19cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJQcm9ncmFtIil9c3RtdFRvRGlyZWN0aXZlKGUpe2NvbnN0IHQ9ZTt0LnR5cGU9IkRpcmVjdGl2ZSI7dC52YWx1ZT10LmV4cHJlc3Npb247ZGVsZXRlIHQuZXhwcmVzc2lvbjtjb25zdCByPXQudmFsdWU7Y29uc3Qgcz1yLnZhbHVlO2NvbnN0IGk9dGhpcy5pbnB1dC5zbGljZShyLnN0YXJ0LHIuZW5kKTtjb25zdCBuPXIudmFsdWU9aS5zbGljZSgxLC0xKTt0aGlzLmFkZEV4dHJhKHIsInJhdyIsaSk7dGhpcy5hZGRFeHRyYShyLCJyYXdWYWx1ZSIsbik7dGhpcy5hZGRFeHRyYShyLCJleHByZXNzaW9uVmFsdWUiLHMpO3IudHlwZT0iRGlyZWN0aXZlTGl0ZXJhbCI7cmV0dXJuIHR9cGFyc2VJbnRlcnByZXRlckRpcmVjdGl2ZSgpe2lmKCF0aGlzLm1hdGNoKDI2KSl7cmV0dXJuIG51bGx9Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO2UudmFsdWU9dGhpcy5zdGF0ZS52YWx1ZTt0aGlzLm5leHQoKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIkludGVycHJldGVyRGlyZWN0aXZlIil9aXNMZXQoZSl7aWYoIXRoaXMuaXNDb250ZXh0dWFsKDkzKSl7cmV0dXJuIGZhbHNlfXJldHVybiB0aGlzLmlzTGV0S2V5d29yZChlKX1pc0xldEtleXdvcmQoZSl7Y29uc3QgdD10aGlzLm5leHRUb2tlblN0YXJ0KCk7Y29uc3Qgcj10aGlzLmNvZGVQb2ludEF0UG9zKHQpO2lmKHI9PT05Mnx8cj09PTkxKXtyZXR1cm4gdHJ1ZX1pZihlKXJldHVybiBmYWxzZTtpZihyPT09MTIzKXJldHVybiB0cnVlO2lmKGh1KHIpKXtXaC5sYXN0SW5kZXg9dDtpZihXaC50ZXN0KHRoaXMuaW5wdXQpKXtjb25zdCBlPXRoaXMuY29kZVBvaW50QXRQb3MoV2gubGFzdEluZGV4KTtpZighcHUoZSkmJmUhPT05Mil7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9cGFyc2VTdGF0ZW1lbnQoZSx0KXtpZih0aGlzLm1hdGNoKDI0KSl7dGhpcy5wYXJzZURlY29yYXRvcnModHJ1ZSl9cmV0dXJuIHRoaXMucGFyc2VTdGF0ZW1lbnRDb250ZW50KGUsdCl9cGFyc2VTdGF0ZW1lbnRDb250ZW50KGUsdCl7bGV0IHI9dGhpcy5zdGF0ZS50eXBlO2NvbnN0IHM9dGhpcy5zdGFydE5vZGUoKTtsZXQgaTtpZih0aGlzLmlzTGV0KGUpKXtyPTY4O2k9ImxldCJ9c3dpdGNoKHIpe2Nhc2UgNTQ6cmV0dXJuIHRoaXMucGFyc2VCcmVha0NvbnRpbnVlU3RhdGVtZW50KHMsdHJ1ZSk7Y2FzZSA1NzpyZXR1cm4gdGhpcy5wYXJzZUJyZWFrQ29udGludWVTdGF0ZW1lbnQocyxmYWxzZSk7Y2FzZSA1ODpyZXR1cm4gdGhpcy5wYXJzZURlYnVnZ2VyU3RhdGVtZW50KHMpO2Nhc2UgODQ6cmV0dXJuIHRoaXMucGFyc2VEb1N0YXRlbWVudChzKTtjYXNlIDg1OnJldHVybiB0aGlzLnBhcnNlRm9yU3RhdGVtZW50KHMpO2Nhc2UgNjI6aWYodGhpcy5sb29rYWhlYWRDaGFyQ29kZSgpPT09NDYpYnJlYWs7aWYoZSl7aWYodGhpcy5zdGF0ZS5zdHJpY3Qpe3RoaXMucmFpc2UodGhpcy5zdGF0ZS5zdGFydCxjbC5TdHJpY3RGdW5jdGlvbil9ZWxzZSBpZihlIT09ImlmIiYmZSE9PSJsYWJlbCIpe3RoaXMucmFpc2UodGhpcy5zdGF0ZS5zdGFydCxjbC5TbG9wcHlGdW5jdGlvbil9fXJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb25TdGF0ZW1lbnQocyxmYWxzZSwhZSk7Y2FzZSA3NDppZihlKXRoaXMudW5leHBlY3RlZCgpO3JldHVybiB0aGlzLnBhcnNlQ2xhc3Mocyx0cnVlKTtjYXNlIDYzOnJldHVybiB0aGlzLnBhcnNlSWZTdGF0ZW1lbnQocyk7Y2FzZSA2NDpyZXR1cm4gdGhpcy5wYXJzZVJldHVyblN0YXRlbWVudChzKTtjYXNlIDY1OnJldHVybiB0aGlzLnBhcnNlU3dpdGNoU3RhdGVtZW50KHMpO2Nhc2UgNjY6cmV0dXJuIHRoaXMucGFyc2VUaHJvd1N0YXRlbWVudChzKTtjYXNlIDY3OnJldHVybiB0aGlzLnBhcnNlVHJ5U3RhdGVtZW50KHMpO2Nhc2UgNjk6Y2FzZSA2ODppPWl8fHRoaXMuc3RhdGUudmFsdWU7aWYoZSYmaSE9PSJ2YXIiKXt0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsY2wuVW5leHBlY3RlZExleGljYWxEZWNsYXJhdGlvbil9cmV0dXJuIHRoaXMucGFyc2VWYXJTdGF0ZW1lbnQocyxpKTtjYXNlIDg2OnJldHVybiB0aGlzLnBhcnNlV2hpbGVTdGF0ZW1lbnQocyk7Y2FzZSA3MDpyZXR1cm4gdGhpcy5wYXJzZVdpdGhTdGF0ZW1lbnQocyk7Y2FzZSA1OnJldHVybiB0aGlzLnBhcnNlQmxvY2soKTtjYXNlIDEzOnJldHVybiB0aGlzLnBhcnNlRW1wdHlTdGF0ZW1lbnQocyk7Y2FzZSA3Nzp7Y29uc3QgZT10aGlzLmxvb2thaGVhZENoYXJDb2RlKCk7aWYoZT09PTQwfHxlPT09NDYpe2JyZWFrfX1jYXNlIDc2OntpZighdGhpcy5vcHRpb25zLmFsbG93SW1wb3J0RXhwb3J0RXZlcnl3aGVyZSYmIXQpe3RoaXMucmFpc2UodGhpcy5zdGF0ZS5zdGFydCxjbC5VbmV4cGVjdGVkSW1wb3J0RXhwb3J0KX10aGlzLm5leHQoKTtsZXQgZTtpZihyPT09Nzcpe2U9dGhpcy5wYXJzZUltcG9ydChzKTtpZihlLnR5cGU9PT0iSW1wb3J0RGVjbGFyYXRpb24iJiYoIWUuaW1wb3J0S2luZHx8ZS5pbXBvcnRLaW5kPT09InZhbHVlIikpe3RoaXMuc2F3VW5hbWJpZ3VvdXNFU009dHJ1ZX19ZWxzZXtlPXRoaXMucGFyc2VFeHBvcnQocyk7aWYoZS50eXBlPT09IkV4cG9ydE5hbWVkRGVjbGFyYXRpb24iJiYoIWUuZXhwb3J0S2luZHx8ZS5leHBvcnRLaW5kPT09InZhbHVlIil8fGUudHlwZT09PSJFeHBvcnRBbGxEZWNsYXJhdGlvbiImJighZS5leHBvcnRLaW5kfHxlLmV4cG9ydEtpbmQ9PT0idmFsdWUiKXx8ZS50eXBlPT09IkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbiIpe3RoaXMuc2F3VW5hbWJpZ3VvdXNFU009dHJ1ZX19dGhpcy5hc3NlcnRNb2R1bGVOb2RlQWxsb3dlZChzKTtyZXR1cm4gZX1kZWZhdWx0OntpZih0aGlzLmlzQXN5bmNGdW5jdGlvbigpKXtpZihlKXt0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsY2wuQXN5bmNGdW5jdGlvbkluU2luZ2xlU3RhdGVtZW50Q29udGV4dCl9dGhpcy5uZXh0KCk7cmV0dXJuIHRoaXMucGFyc2VGdW5jdGlvblN0YXRlbWVudChzLHRydWUsIWUpfX19Y29uc3Qgbj10aGlzLnN0YXRlLnZhbHVlO2NvbnN0IGE9dGhpcy5wYXJzZUV4cHJlc3Npb24oKTtpZihSbChyKSYmYS50eXBlPT09IklkZW50aWZpZXIiJiZ0aGlzLmVhdCgxNCkpe3JldHVybiB0aGlzLnBhcnNlTGFiZWxlZFN0YXRlbWVudChzLG4sYSxlKX1lbHNle3JldHVybiB0aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudChzLGEpfX1hc3NlcnRNb2R1bGVOb2RlQWxsb3dlZChlKXtpZighdGhpcy5vcHRpb25zLmFsbG93SW1wb3J0RXhwb3J0RXZlcnl3aGVyZSYmIXRoaXMuaW5Nb2R1bGUpe3RoaXMucmFpc2UoZS5zdGFydCxobC5JbXBvcnRPdXRzaWRlTW9kdWxlKX19dGFrZURlY29yYXRvcnMoZSl7Y29uc3QgdD10aGlzLnN0YXRlLmRlY29yYXRvclN0YWNrW3RoaXMuc3RhdGUuZGVjb3JhdG9yU3RhY2subGVuZ3RoLTFdO2lmKHQubGVuZ3RoKXtlLmRlY29yYXRvcnM9dDt0aGlzLnJlc2V0U3RhcnRMb2NhdGlvbkZyb21Ob2RlKGUsdFswXSk7dGhpcy5zdGF0ZS5kZWNvcmF0b3JTdGFja1t0aGlzLnN0YXRlLmRlY29yYXRvclN0YWNrLmxlbmd0aC0xXT1bXX19Y2FuSGF2ZUxlYWRpbmdEZWNvcmF0b3IoKXtyZXR1cm4gdGhpcy5tYXRjaCg3NCl9cGFyc2VEZWNvcmF0b3JzKGUpe2NvbnN0IHQ9dGhpcy5zdGF0ZS5kZWNvcmF0b3JTdGFja1t0aGlzLnN0YXRlLmRlY29yYXRvclN0YWNrLmxlbmd0aC0xXTt3aGlsZSh0aGlzLm1hdGNoKDI0KSl7Y29uc3QgZT10aGlzLnBhcnNlRGVjb3JhdG9yKCk7dC5wdXNoKGUpfWlmKHRoaXMubWF0Y2goNzYpKXtpZighZSl7dGhpcy51bmV4cGVjdGVkKCl9aWYodGhpcy5oYXNQbHVnaW4oImRlY29yYXRvcnMiKSYmIXRoaXMuZ2V0UGx1Z2luT3B0aW9uKCJkZWNvcmF0b3JzIiwiZGVjb3JhdG9yc0JlZm9yZUV4cG9ydCIpKXt0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsY2wuRGVjb3JhdG9yRXhwb3J0Q2xhc3MpfX1lbHNlIGlmKCF0aGlzLmNhbkhhdmVMZWFkaW5nRGVjb3JhdG9yKCkpe3Rocm93IHRoaXMucmFpc2UodGhpcy5zdGF0ZS5zdGFydCxjbC5VbmV4cGVjdGVkTGVhZGluZ0RlY29yYXRvcil9fXBhcnNlRGVjb3JhdG9yKCl7dGhpcy5leHBlY3RPbmVQbHVnaW4oWyJkZWNvcmF0b3JzLWxlZ2FjeSIsImRlY29yYXRvcnMiXSk7Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO3RoaXMubmV4dCgpO2lmKHRoaXMuaGFzUGx1Z2luKCJkZWNvcmF0b3JzIikpe3RoaXMuc3RhdGUuZGVjb3JhdG9yU3RhY2sucHVzaChbXSk7Y29uc3QgdD10aGlzLnN0YXRlLnN0YXJ0O2NvbnN0IHI9dGhpcy5zdGF0ZS5zdGFydExvYztsZXQgcztpZih0aGlzLmVhdCgxMCkpe3M9dGhpcy5wYXJzZUV4cHJlc3Npb24oKTt0aGlzLmV4cGVjdCgxMSl9ZWxzZXtzPXRoaXMucGFyc2VJZGVudGlmaWVyKGZhbHNlKTt3aGlsZSh0aGlzLmVhdCgxNikpe2NvbnN0IGU9dGhpcy5zdGFydE5vZGVBdCh0LHIpO2Uub2JqZWN0PXM7ZS5wcm9wZXJ0eT10aGlzLnBhcnNlSWRlbnRpZmllcih0cnVlKTtlLmNvbXB1dGVkPWZhbHNlO3M9dGhpcy5maW5pc2hOb2RlKGUsIk1lbWJlckV4cHJlc3Npb24iKX19ZS5leHByZXNzaW9uPXRoaXMucGFyc2VNYXliZURlY29yYXRvckFyZ3VtZW50cyhzKTt0aGlzLnN0YXRlLmRlY29yYXRvclN0YWNrLnBvcCgpfWVsc2V7ZS5leHByZXNzaW9uPXRoaXMucGFyc2VFeHByU3Vic2NyaXB0cygpfXJldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiRGVjb3JhdG9yIil9cGFyc2VNYXliZURlY29yYXRvckFyZ3VtZW50cyhlKXtpZih0aGlzLmVhdCgxMCkpe2NvbnN0IHQ9dGhpcy5zdGFydE5vZGVBdE5vZGUoZSk7dC5jYWxsZWU9ZTt0LmFyZ3VtZW50cz10aGlzLnBhcnNlQ2FsbEV4cHJlc3Npb25Bcmd1bWVudHMoMTEsZmFsc2UpO3RoaXMudG9SZWZlcmVuY2VkTGlzdCh0LmFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZSh0LCJDYWxsRXhwcmVzc2lvbiIpfXJldHVybiBlfXBhcnNlQnJlYWtDb250aW51ZVN0YXRlbWVudChlLHQpe3RoaXMubmV4dCgpO2lmKHRoaXMuaXNMaW5lVGVybWluYXRvcigpKXtlLmxhYmVsPW51bGx9ZWxzZXtlLmxhYmVsPXRoaXMucGFyc2VJZGVudGlmaWVyKCk7dGhpcy5zZW1pY29sb24oKX10aGlzLnZlcmlmeUJyZWFrQ29udGludWUoZSx0KTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsdD8iQnJlYWtTdGF0ZW1lbnQiOiJDb250aW51ZVN0YXRlbWVudCIpfXZlcmlmeUJyZWFrQ29udGludWUoZSx0KXtsZXQgcjtmb3Iocj0wO3I8dGhpcy5zdGF0ZS5sYWJlbHMubGVuZ3RoOysrcil7Y29uc3Qgcz10aGlzLnN0YXRlLmxhYmVsc1tyXTtpZihlLmxhYmVsPT1udWxsfHxzLm5hbWU9PT1lLmxhYmVsLm5hbWUpe2lmKHMua2luZCE9bnVsbCYmKHR8fHMua2luZD09PSJsb29wIikpYnJlYWs7aWYoZS5sYWJlbCYmdClicmVha319aWYocj09PXRoaXMuc3RhdGUubGFiZWxzLmxlbmd0aCl7dGhpcy5yYWlzZShlLnN0YXJ0LGNsLklsbGVnYWxCcmVha0NvbnRpbnVlLHQ/ImJyZWFrIjoiY29udGludWUiKX19cGFyc2VEZWJ1Z2dlclN0YXRlbWVudChlKXt0aGlzLm5leHQoKTt0aGlzLnNlbWljb2xvbigpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiRGVidWdnZXJTdGF0ZW1lbnQiKX1wYXJzZUhlYWRlckV4cHJlc3Npb24oKXt0aGlzLmV4cGVjdCgxMCk7Y29uc3QgZT10aGlzLnBhcnNlRXhwcmVzc2lvbigpO3RoaXMuZXhwZWN0KDExKTtyZXR1cm4gZX1wYXJzZURvU3RhdGVtZW50KGUpe3RoaXMubmV4dCgpO3RoaXMuc3RhdGUubGFiZWxzLnB1c2goemgpO2UuYm9keT10aGlzLndpdGhTbWFydE1peFRvcGljRm9yYmlkZGluZ0NvbnRleHQoKCgpPT50aGlzLnBhcnNlU3RhdGVtZW50KCJkbyIpKSk7dGhpcy5zdGF0ZS5sYWJlbHMucG9wKCk7dGhpcy5leHBlY3QoODYpO2UudGVzdD10aGlzLnBhcnNlSGVhZGVyRXhwcmVzc2lvbigpO3RoaXMuZWF0KDEzKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIkRvV2hpbGVTdGF0ZW1lbnQiKX1wYXJzZUZvclN0YXRlbWVudChlKXt0aGlzLm5leHQoKTt0aGlzLnN0YXRlLmxhYmVscy5wdXNoKHpoKTtsZXQgdD0tMTtpZih0aGlzLmlzQXdhaXRBbGxvd2VkKCkmJnRoaXMuZWF0Q29udGV4dHVhbCg5MCkpe3Q9dGhpcy5zdGF0ZS5sYXN0VG9rU3RhcnR9dGhpcy5zY29wZS5lbnRlcih3dSk7dGhpcy5leHBlY3QoMTApO2lmKHRoaXMubWF0Y2goMTMpKXtpZih0Pi0xKXt0aGlzLnVuZXhwZWN0ZWQodCl9cmV0dXJuIHRoaXMucGFyc2VGb3IoZSxudWxsKX1jb25zdCByPXRoaXMuaXNDb250ZXh0dWFsKDkzKTtjb25zdCBzPXImJnRoaXMuaXNMZXRLZXl3b3JkKCk7aWYodGhpcy5tYXRjaCg2OCl8fHRoaXMubWF0Y2goNjkpfHxzKXtjb25zdCByPXRoaXMuc3RhcnROb2RlKCk7Y29uc3QgaT1zPyJsZXQiOnRoaXMuc3RhdGUudmFsdWU7dGhpcy5uZXh0KCk7dGhpcy5wYXJzZVZhcihyLHRydWUsaSk7dGhpcy5maW5pc2hOb2RlKHIsIlZhcmlhYmxlRGVjbGFyYXRpb24iKTtpZigodGhpcy5tYXRjaCg1Mil8fHRoaXMuaXNDb250ZXh0dWFsKDk1KSkmJnIuZGVjbGFyYXRpb25zLmxlbmd0aD09PTEpe3JldHVybiB0aGlzLnBhcnNlRm9ySW4oZSxyLHQpfWlmKHQ+LTEpe3RoaXMudW5leHBlY3RlZCh0KX1yZXR1cm4gdGhpcy5wYXJzZUZvcihlLHIpfWNvbnN0IGk9dGhpcy5pc0NvbnRleHR1YWwoODkpO2NvbnN0IG49bmV3IEhjO2NvbnN0IGE9dGhpcy5wYXJzZUV4cHJlc3Npb24odHJ1ZSxuKTtjb25zdCBvPXRoaXMuaXNDb250ZXh0dWFsKDk1KTtpZihvKXtpZihyKXt0aGlzLnJhaXNlKGEuc3RhcnQsY2wuRm9yT2ZMZXQpfWVsc2UgaWYodD09PS0xJiZpJiZhLnR5cGU9PT0iSWRlbnRpZmllciIpe3RoaXMucmFpc2UoYS5zdGFydCxjbC5Gb3JPZkFzeW5jKX19aWYob3x8dGhpcy5tYXRjaCg1Mikpe3RoaXMudG9Bc3NpZ25hYmxlKGEsdHJ1ZSk7Y29uc3Qgcj1vPyJmb3Itb2Ygc3RhdGVtZW50IjoiZm9yLWluIHN0YXRlbWVudCI7dGhpcy5jaGVja0xWYWwoYSxyKTtyZXR1cm4gdGhpcy5wYXJzZUZvckluKGUsYSx0KX1lbHNle3RoaXMuY2hlY2tFeHByZXNzaW9uRXJyb3JzKG4sdHJ1ZSl9aWYodD4tMSl7dGhpcy51bmV4cGVjdGVkKHQpfXJldHVybiB0aGlzLnBhcnNlRm9yKGUsYSl9cGFyc2VGdW5jdGlvblN0YXRlbWVudChlLHQscil7dGhpcy5uZXh0KCk7cmV0dXJuIHRoaXMucGFyc2VGdW5jdGlvbihlLEdofChyPzA6WGgpLHQpfXBhcnNlSWZTdGF0ZW1lbnQoZSl7dGhpcy5uZXh0KCk7ZS50ZXN0PXRoaXMucGFyc2VIZWFkZXJFeHByZXNzaW9uKCk7ZS5jb25zZXF1ZW50PXRoaXMucGFyc2VTdGF0ZW1lbnQoImlmIik7ZS5hbHRlcm5hdGU9dGhpcy5lYXQoNjApP3RoaXMucGFyc2VTdGF0ZW1lbnQoImlmIik6bnVsbDtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIklmU3RhdGVtZW50Iil9cGFyc2VSZXR1cm5TdGF0ZW1lbnQoZSl7aWYoIXRoaXMucHJvZFBhcmFtLmhhc1JldHVybiYmIXRoaXMub3B0aW9ucy5hbGxvd1JldHVybk91dHNpZGVGdW5jdGlvbil7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLnN0YXJ0LGNsLklsbGVnYWxSZXR1cm4pfXRoaXMubmV4dCgpO2lmKHRoaXMuaXNMaW5lVGVybWluYXRvcigpKXtlLmFyZ3VtZW50PW51bGx9ZWxzZXtlLmFyZ3VtZW50PXRoaXMucGFyc2VFeHByZXNzaW9uKCk7dGhpcy5zZW1pY29sb24oKX1yZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIlJldHVyblN0YXRlbWVudCIpfXBhcnNlU3dpdGNoU3RhdGVtZW50KGUpe3RoaXMubmV4dCgpO2UuZGlzY3JpbWluYW50PXRoaXMucGFyc2VIZWFkZXJFeHByZXNzaW9uKCk7Y29uc3QgdD1lLmNhc2VzPVtdO3RoaXMuZXhwZWN0KDUpO3RoaXMuc3RhdGUubGFiZWxzLnB1c2goVmgpO3RoaXMuc2NvcGUuZW50ZXIod3UpO2xldCByO2ZvcihsZXQgZTshdGhpcy5tYXRjaCg4KTspe2lmKHRoaXMubWF0Y2goNTUpfHx0aGlzLm1hdGNoKDU5KSl7Y29uc3Qgcz10aGlzLm1hdGNoKDU1KTtpZihyKXRoaXMuZmluaXNoTm9kZShyLCJTd2l0Y2hDYXNlIik7dC5wdXNoKHI9dGhpcy5zdGFydE5vZGUoKSk7ci5jb25zZXF1ZW50PVtdO3RoaXMubmV4dCgpO2lmKHMpe3IudGVzdD10aGlzLnBhcnNlRXhwcmVzc2lvbigpfWVsc2V7aWYoZSl7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLmxhc3RUb2tTdGFydCxjbC5NdWx0aXBsZURlZmF1bHRzSW5Td2l0Y2gpfWU9dHJ1ZTtyLnRlc3Q9bnVsbH10aGlzLmV4cGVjdCgxNCl9ZWxzZXtpZihyKXtyLmNvbnNlcXVlbnQucHVzaCh0aGlzLnBhcnNlU3RhdGVtZW50KG51bGwpKX1lbHNle3RoaXMudW5leHBlY3RlZCgpfX19dGhpcy5zY29wZS5leGl0KCk7aWYocil0aGlzLmZpbmlzaE5vZGUociwiU3dpdGNoQ2FzZSIpO3RoaXMubmV4dCgpO3RoaXMuc3RhdGUubGFiZWxzLnBvcCgpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiU3dpdGNoU3RhdGVtZW50Iil9cGFyc2VUaHJvd1N0YXRlbWVudChlKXt0aGlzLm5leHQoKTtpZih0aGlzLmhhc1ByZWNlZGluZ0xpbmVCcmVhaygpKXt0aGlzLnJhaXNlKHRoaXMuc3RhdGUubGFzdFRva0VuZCxjbC5OZXdsaW5lQWZ0ZXJUaHJvdyl9ZS5hcmd1bWVudD10aGlzLnBhcnNlRXhwcmVzc2lvbigpO3RoaXMuc2VtaWNvbG9uKCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJUaHJvd1N0YXRlbWVudCIpfXBhcnNlQ2F0Y2hDbGF1c2VQYXJhbSgpe2NvbnN0IGU9dGhpcy5wYXJzZUJpbmRpbmdBdG9tKCk7Y29uc3QgdD1lLnR5cGU9PT0iSWRlbnRpZmllciI7dGhpcy5zY29wZS5lbnRlcih0P2t1OjApO3RoaXMuY2hlY2tMVmFsKGUsImNhdGNoIGNsYXVzZSIsV3UpO3JldHVybiBlfXBhcnNlVHJ5U3RhdGVtZW50KGUpe3RoaXMubmV4dCgpO2UuYmxvY2s9dGhpcy5wYXJzZUJsb2NrKCk7ZS5oYW5kbGVyPW51bGw7aWYodGhpcy5tYXRjaCg1Nikpe2NvbnN0IHQ9dGhpcy5zdGFydE5vZGUoKTt0aGlzLm5leHQoKTtpZih0aGlzLm1hdGNoKDEwKSl7dGhpcy5leHBlY3QoMTApO3QucGFyYW09dGhpcy5wYXJzZUNhdGNoQ2xhdXNlUGFyYW0oKTt0aGlzLmV4cGVjdCgxMSl9ZWxzZXt0LnBhcmFtPW51bGw7dGhpcy5zY29wZS5lbnRlcih3dSl9dC5ib2R5PXRoaXMud2l0aFNtYXJ0TWl4VG9waWNGb3JiaWRkaW5nQ29udGV4dCgoKCk9PnRoaXMucGFyc2VCbG9jayhmYWxzZSxmYWxzZSkpKTt0aGlzLnNjb3BlLmV4aXQoKTtlLmhhbmRsZXI9dGhpcy5maW5pc2hOb2RlKHQsIkNhdGNoQ2xhdXNlIil9ZS5maW5hbGl6ZXI9dGhpcy5lYXQoNjEpP3RoaXMucGFyc2VCbG9jaygpOm51bGw7aWYoIWUuaGFuZGxlciYmIWUuZmluYWxpemVyKXt0aGlzLnJhaXNlKGUuc3RhcnQsY2wuTm9DYXRjaE9yRmluYWxseSl9cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJUcnlTdGF0ZW1lbnQiKX1wYXJzZVZhclN0YXRlbWVudChlLHQpe3RoaXMubmV4dCgpO3RoaXMucGFyc2VWYXIoZSxmYWxzZSx0KTt0aGlzLnNlbWljb2xvbigpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiVmFyaWFibGVEZWNsYXJhdGlvbiIpfXBhcnNlV2hpbGVTdGF0ZW1lbnQoZSl7dGhpcy5uZXh0KCk7ZS50ZXN0PXRoaXMucGFyc2VIZWFkZXJFeHByZXNzaW9uKCk7dGhpcy5zdGF0ZS5sYWJlbHMucHVzaCh6aCk7ZS5ib2R5PXRoaXMud2l0aFNtYXJ0TWl4VG9waWNGb3JiaWRkaW5nQ29udGV4dCgoKCk9PnRoaXMucGFyc2VTdGF0ZW1lbnQoIndoaWxlIikpKTt0aGlzLnN0YXRlLmxhYmVscy5wb3AoKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIldoaWxlU3RhdGVtZW50Iil9cGFyc2VXaXRoU3RhdGVtZW50KGUpe2lmKHRoaXMuc3RhdGUuc3RyaWN0KXt0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsY2wuU3RyaWN0V2l0aCl9dGhpcy5uZXh0KCk7ZS5vYmplY3Q9dGhpcy5wYXJzZUhlYWRlckV4cHJlc3Npb24oKTtlLmJvZHk9dGhpcy53aXRoU21hcnRNaXhUb3BpY0ZvcmJpZGRpbmdDb250ZXh0KCgoKT0+dGhpcy5wYXJzZVN0YXRlbWVudCgid2l0aCIpKSk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJXaXRoU3RhdGVtZW50Iil9cGFyc2VFbXB0eVN0YXRlbWVudChlKXt0aGlzLm5leHQoKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIkVtcHR5U3RhdGVtZW50Iil9cGFyc2VMYWJlbGVkU3RhdGVtZW50KGUsdCxyLHMpe2Zvcihjb25zdCBlIG9mIHRoaXMuc3RhdGUubGFiZWxzKXtpZihlLm5hbWU9PT10KXt0aGlzLnJhaXNlKHIuc3RhcnQsY2wuTGFiZWxSZWRlY2xhcmF0aW9uLHQpfX1jb25zdCBpPUpsKHRoaXMuc3RhdGUudHlwZSk/Imxvb3AiOnRoaXMubWF0Y2goNjUpPyJzd2l0Y2giOm51bGw7Zm9yKGxldCB0PXRoaXMuc3RhdGUubGFiZWxzLmxlbmd0aC0xO3Q+PTA7dC0tKXtjb25zdCByPXRoaXMuc3RhdGUubGFiZWxzW3RdO2lmKHIuc3RhdGVtZW50U3RhcnQ9PT1lLnN0YXJ0KXtyLnN0YXRlbWVudFN0YXJ0PXRoaXMuc3RhdGUuc3RhcnQ7ci5raW5kPWl9ZWxzZXticmVha319dGhpcy5zdGF0ZS5sYWJlbHMucHVzaCh7bmFtZTp0LGtpbmQ6aSxzdGF0ZW1lbnRTdGFydDp0aGlzLnN0YXRlLnN0YXJ0fSk7ZS5ib2R5PXRoaXMucGFyc2VTdGF0ZW1lbnQocz9zLmluZGV4T2YoImxhYmVsIik9PT0tMT9zKyJsYWJlbCI6czoibGFiZWwiKTt0aGlzLnN0YXRlLmxhYmVscy5wb3AoKTtlLmxhYmVsPXI7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJMYWJlbGVkU3RhdGVtZW50Iil9cGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KGUsdCl7ZS5leHByZXNzaW9uPXQ7dGhpcy5zZW1pY29sb24oKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIkV4cHJlc3Npb25TdGF0ZW1lbnQiKX1wYXJzZUJsb2NrKGUsdCxyKXtpZihlPT09dm9pZCAwKXtlPWZhbHNlfWlmKHQ9PT12b2lkIDApe3Q9dHJ1ZX1jb25zdCBzPXRoaXMuc3RhcnROb2RlKCk7aWYoZSl7dGhpcy5zdGF0ZS5zdHJpY3RFcnJvcnMuY2xlYXIoKX10aGlzLmV4cGVjdCg1KTtpZih0KXt0aGlzLnNjb3BlLmVudGVyKHd1KX10aGlzLnBhcnNlQmxvY2tCb2R5KHMsZSxmYWxzZSw4LHIpO2lmKHQpe3RoaXMuc2NvcGUuZXhpdCgpfXJldHVybiB0aGlzLmZpbmlzaE5vZGUocywiQmxvY2tTdGF0ZW1lbnQiKX1pc1ZhbGlkRGlyZWN0aXZlKGUpe3JldHVybiBlLnR5cGU9PT0iRXhwcmVzc2lvblN0YXRlbWVudCImJmUuZXhwcmVzc2lvbi50eXBlPT09IlN0cmluZ0xpdGVyYWwiJiYhZS5leHByZXNzaW9uLmV4dHJhLnBhcmVudGhlc2l6ZWR9cGFyc2VCbG9ja0JvZHkoZSx0LHIscyxpKXtjb25zdCBuPWUuYm9keT1bXTtjb25zdCBhPWUuZGlyZWN0aXZlcz1bXTt0aGlzLnBhcnNlQmxvY2tPck1vZHVsZUJsb2NrQm9keShuLHQ/YTp1bmRlZmluZWQscixzLGkpfXBhcnNlQmxvY2tPck1vZHVsZUJsb2NrQm9keShlLHQscixzLGkpe2NvbnN0IG49dGhpcy5zdGF0ZS5zdHJpY3Q7bGV0IGE9ZmFsc2U7bGV0IG89ZmFsc2U7d2hpbGUoIXRoaXMubWF0Y2gocykpe2NvbnN0IHM9dGhpcy5wYXJzZVN0YXRlbWVudChudWxsLHIpO2lmKHQmJiFvKXtpZih0aGlzLmlzVmFsaWREaXJlY3RpdmUocykpe2NvbnN0IGU9dGhpcy5zdG10VG9EaXJlY3RpdmUocyk7dC5wdXNoKGUpO2lmKCFhJiZlLnZhbHVlLnZhbHVlPT09InVzZSBzdHJpY3QiKXthPXRydWU7dGhpcy5zZXRTdHJpY3QodHJ1ZSl9Y29udGludWV9bz10cnVlO3RoaXMuc3RhdGUuc3RyaWN0RXJyb3JzLmNsZWFyKCl9ZS5wdXNoKHMpfWlmKGkpe2kuY2FsbCh0aGlzLGEpfWlmKCFuKXt0aGlzLnNldFN0cmljdChmYWxzZSl9dGhpcy5uZXh0KCl9cGFyc2VGb3IoZSx0KXtlLmluaXQ9dDt0aGlzLnNlbWljb2xvbihmYWxzZSk7ZS50ZXN0PXRoaXMubWF0Y2goMTMpP251bGw6dGhpcy5wYXJzZUV4cHJlc3Npb24oKTt0aGlzLnNlbWljb2xvbihmYWxzZSk7ZS51cGRhdGU9dGhpcy5tYXRjaCgxMSk/bnVsbDp0aGlzLnBhcnNlRXhwcmVzc2lvbigpO3RoaXMuZXhwZWN0KDExKTtlLmJvZHk9dGhpcy53aXRoU21hcnRNaXhUb3BpY0ZvcmJpZGRpbmdDb250ZXh0KCgoKT0+dGhpcy5wYXJzZVN0YXRlbWVudCgiZm9yIikpKTt0aGlzLnNjb3BlLmV4aXQoKTt0aGlzLnN0YXRlLmxhYmVscy5wb3AoKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIkZvclN0YXRlbWVudCIpfXBhcnNlRm9ySW4oZSx0LHIpe2NvbnN0IHM9dGhpcy5tYXRjaCg1Mik7dGhpcy5uZXh0KCk7aWYocyl7aWYocj4tMSl0aGlzLnVuZXhwZWN0ZWQocil9ZWxzZXtlLmF3YWl0PXI+LTF9aWYodC50eXBlPT09IlZhcmlhYmxlRGVjbGFyYXRpb24iJiZ0LmRlY2xhcmF0aW9uc1swXS5pbml0IT1udWxsJiYoIXN8fHRoaXMuc3RhdGUuc3RyaWN0fHx0LmtpbmQhPT0idmFyInx8dC5kZWNsYXJhdGlvbnNbMF0uaWQudHlwZSE9PSJJZGVudGlmaWVyIikpe3RoaXMucmFpc2UodC5zdGFydCxjbC5Gb3JJbk9mTG9vcEluaXRpYWxpemVyLHM/ImZvci1pbiI6ImZvci1vZiIpfWVsc2UgaWYodC50eXBlPT09IkFzc2lnbm1lbnRQYXR0ZXJuIil7dGhpcy5yYWlzZSh0LnN0YXJ0LGNsLkludmFsaWRMaHMsImZvci1sb29wIil9ZS5sZWZ0PXQ7ZS5yaWdodD1zP3RoaXMucGFyc2VFeHByZXNzaW9uKCk6dGhpcy5wYXJzZU1heWJlQXNzaWduQWxsb3dJbigpO3RoaXMuZXhwZWN0KDExKTtlLmJvZHk9dGhpcy53aXRoU21hcnRNaXhUb3BpY0ZvcmJpZGRpbmdDb250ZXh0KCgoKT0+dGhpcy5wYXJzZVN0YXRlbWVudCgiZm9yIikpKTt0aGlzLnNjb3BlLmV4aXQoKTt0aGlzLnN0YXRlLmxhYmVscy5wb3AoKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUscz8iRm9ySW5TdGF0ZW1lbnQiOiJGb3JPZlN0YXRlbWVudCIpfXBhcnNlVmFyKGUsdCxyKXtjb25zdCBzPWUuZGVjbGFyYXRpb25zPVtdO2NvbnN0IGk9dGhpcy5oYXNQbHVnaW4oInR5cGVzY3JpcHQiKTtlLmtpbmQ9cjtmb3IoOzspe2NvbnN0IGU9dGhpcy5zdGFydE5vZGUoKTt0aGlzLnBhcnNlVmFySWQoZSxyKTtpZih0aGlzLmVhdCgyNykpe2UuaW5pdD10P3RoaXMucGFyc2VNYXliZUFzc2lnbkRpc2FsbG93SW4oKTp0aGlzLnBhcnNlTWF5YmVBc3NpZ25BbGxvd0luKCl9ZWxzZXtpZihyPT09ImNvbnN0IiYmISh0aGlzLm1hdGNoKDUyKXx8dGhpcy5pc0NvbnRleHR1YWwoOTUpKSl7aWYoIWkpe3RoaXMucmFpc2UodGhpcy5zdGF0ZS5sYXN0VG9rRW5kLGNsLkRlY2xhcmF0aW9uTWlzc2luZ0luaXRpYWxpemVyLCJDb25zdCBkZWNsYXJhdGlvbnMiKX19ZWxzZSBpZihlLmlkLnR5cGUhPT0iSWRlbnRpZmllciImJiEodCYmKHRoaXMubWF0Y2goNTIpfHx0aGlzLmlzQ29udGV4dHVhbCg5NSkpKSl7dGhpcy5yYWlzZSh0aGlzLnN0YXRlLmxhc3RUb2tFbmQsY2wuRGVjbGFyYXRpb25NaXNzaW5nSW5pdGlhbGl6ZXIsIkNvbXBsZXggYmluZGluZyBwYXR0ZXJucyIpfWUuaW5pdD1udWxsfXMucHVzaCh0aGlzLmZpbmlzaE5vZGUoZSwiVmFyaWFibGVEZWNsYXJhdG9yIikpO2lmKCF0aGlzLmVhdCgxMikpYnJlYWt9cmV0dXJuIGV9cGFyc2VWYXJJZChlLHQpe2UuaWQ9dGhpcy5wYXJzZUJpbmRpbmdBdG9tKCk7dGhpcy5jaGVja0xWYWwoZS5pZCwidmFyaWFibGUgZGVjbGFyYXRpb24iLHQ9PT0idmFyIj9LdTpXdSx1bmRlZmluZWQsdCE9PSJ2YXIiKX1wYXJzZUZ1bmN0aW9uKGUsdCxyKXtpZih0PT09dm9pZCAwKXt0PXFofWlmKHI9PT12b2lkIDApe3I9ZmFsc2V9Y29uc3Qgcz10JkdoO2NvbnN0IGk9dCZYaDtjb25zdCBuPSEhcyYmISh0JkpoKTt0aGlzLmluaXRGdW5jdGlvbihlLHIpO2lmKHRoaXMubWF0Y2goNDkpJiZpKXt0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsY2wuR2VuZXJhdG9ySW5TaW5nbGVTdGF0ZW1lbnRDb250ZXh0KX1lLmdlbmVyYXRvcj10aGlzLmVhdCg0OSk7aWYocyl7ZS5pZD10aGlzLnBhcnNlRnVuY3Rpb25JZChuKX1jb25zdCBhPXRoaXMuc3RhdGUubWF5YmVJbkFycm93UGFyYW1ldGVyczt0aGlzLnN0YXRlLm1heWJlSW5BcnJvd1BhcmFtZXRlcnM9ZmFsc2U7dGhpcy5zY29wZS5lbnRlcihQdSk7dGhpcy5wcm9kUGFyYW0uZW50ZXIoWGMocixlLmdlbmVyYXRvcikpO2lmKCFzKXtlLmlkPXRoaXMucGFyc2VGdW5jdGlvbklkKCl9dGhpcy5wYXJzZUZ1bmN0aW9uUGFyYW1zKGUsZmFsc2UpO3RoaXMud2l0aFNtYXJ0TWl4VG9waWNGb3JiaWRkaW5nQ29udGV4dCgoKCk9Pnt0aGlzLnBhcnNlRnVuY3Rpb25Cb2R5QW5kRmluaXNoKGUscz8iRnVuY3Rpb25EZWNsYXJhdGlvbiI6IkZ1bmN0aW9uRXhwcmVzc2lvbiIpfSkpO3RoaXMucHJvZFBhcmFtLmV4aXQoKTt0aGlzLnNjb3BlLmV4aXQoKTtpZihzJiYhaSl7dGhpcy5yZWdpc3RlckZ1bmN0aW9uU3RhdGVtZW50SWQoZSl9dGhpcy5zdGF0ZS5tYXliZUluQXJyb3dQYXJhbWV0ZXJzPWE7cmV0dXJuIGV9cGFyc2VGdW5jdGlvbklkKGUpe3JldHVybiBlfHxSbCh0aGlzLnN0YXRlLnR5cGUpP3RoaXMucGFyc2VJZGVudGlmaWVyKCk6bnVsbH1wYXJzZUZ1bmN0aW9uUGFyYW1zKGUsdCl7dGhpcy5leHBlY3QoMTApO3RoaXMuZXhwcmVzc2lvblNjb3BlLmVudGVyKE9jKCkpO2UucGFyYW1zPXRoaXMucGFyc2VCaW5kaW5nTGlzdCgxMSw0MSxmYWxzZSx0KTt0aGlzLmV4cHJlc3Npb25TY29wZS5leGl0KCl9cmVnaXN0ZXJGdW5jdGlvblN0YXRlbWVudElkKGUpe2lmKCFlLmlkKXJldHVybjt0aGlzLnNjb3BlLmRlY2xhcmVOYW1lKGUuaWQubmFtZSx0aGlzLnN0YXRlLnN0cmljdHx8ZS5nZW5lcmF0b3J8fGUuYXN5bmM/dGhpcy5zY29wZS50cmVhdEZ1bmN0aW9uc0FzVmFyP0t1Old1OiR1LGUuaWQuc3RhcnQpfXBhcnNlQ2xhc3MoZSx0LHIpe3RoaXMubmV4dCgpO3RoaXMudGFrZURlY29yYXRvcnMoZSk7Y29uc3Qgcz10aGlzLnN0YXRlLnN0cmljdDt0aGlzLnN0YXRlLnN0cmljdD10cnVlO3RoaXMucGFyc2VDbGFzc0lkKGUsdCxyKTt0aGlzLnBhcnNlQ2xhc3NTdXBlcihlKTtlLmJvZHk9dGhpcy5wYXJzZUNsYXNzQm9keSghIWUuc3VwZXJDbGFzcyxzKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsdD8iQ2xhc3NEZWNsYXJhdGlvbiI6IkNsYXNzRXhwcmVzc2lvbiIpfWlzQ2xhc3NQcm9wZXJ0eSgpe3JldHVybiB0aGlzLm1hdGNoKDI3KXx8dGhpcy5tYXRjaCgxMyl8fHRoaXMubWF0Y2goOCl9aXNDbGFzc01ldGhvZCgpe3JldHVybiB0aGlzLm1hdGNoKDEwKX1pc05vbnN0YXRpY0NvbnN0cnVjdG9yKGUpe3JldHVybiFlLmNvbXB1dGVkJiYhZS5zdGF0aWMmJihlLmtleS5uYW1lPT09ImNvbnN0cnVjdG9yInx8ZS5rZXkudmFsdWU9PT0iY29uc3RydWN0b3IiKX1wYXJzZUNsYXNzQm9keShlLHQpe3RoaXMuY2xhc3NTY29wZS5lbnRlcigpO2NvbnN0IHI9e2hhZENvbnN0cnVjdG9yOmZhbHNlLGhhZFN1cGVyQ2xhc3M6ZX07bGV0IHM9W107Y29uc3QgaT10aGlzLnN0YXJ0Tm9kZSgpO2kuYm9keT1bXTt0aGlzLmV4cGVjdCg1KTt0aGlzLndpdGhTbWFydE1peFRvcGljRm9yYmlkZGluZ0NvbnRleHQoKCgpPT57d2hpbGUoIXRoaXMubWF0Y2goOCkpe2lmKHRoaXMuZWF0KDEzKSl7aWYocy5sZW5ndGg+MCl7dGhyb3cgdGhpcy5yYWlzZSh0aGlzLnN0YXRlLmxhc3RUb2tFbmQsY2wuRGVjb3JhdG9yU2VtaWNvbG9uKX1jb250aW51ZX1pZih0aGlzLm1hdGNoKDI0KSl7cy5wdXNoKHRoaXMucGFyc2VEZWNvcmF0b3IoKSk7Y29udGludWV9Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO2lmKHMubGVuZ3RoKXtlLmRlY29yYXRvcnM9czt0aGlzLnJlc2V0U3RhcnRMb2NhdGlvbkZyb21Ob2RlKGUsc1swXSk7cz1bXX10aGlzLnBhcnNlQ2xhc3NNZW1iZXIoaSxlLHIpO2lmKGUua2luZD09PSJjb25zdHJ1Y3RvciImJmUuZGVjb3JhdG9ycyYmZS5kZWNvcmF0b3JzLmxlbmd0aD4wKXt0aGlzLnJhaXNlKGUuc3RhcnQsY2wuRGVjb3JhdG9yQ29uc3RydWN0b3IpfX19KSk7dGhpcy5zdGF0ZS5zdHJpY3Q9dDt0aGlzLm5leHQoKTtpZihzLmxlbmd0aCl7dGhyb3cgdGhpcy5yYWlzZSh0aGlzLnN0YXRlLnN0YXJ0LGNsLlRyYWlsaW5nRGVjb3JhdG9yKX10aGlzLmNsYXNzU2NvcGUuZXhpdCgpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoaSwiQ2xhc3NCb2R5Iil9cGFyc2VDbGFzc01lbWJlckZyb21Nb2RpZmllcihlLHQpe2NvbnN0IHI9dGhpcy5wYXJzZUlkZW50aWZpZXIodHJ1ZSk7aWYodGhpcy5pc0NsYXNzTWV0aG9kKCkpe2NvbnN0IHM9dDtzLmtpbmQ9Im1ldGhvZCI7cy5jb21wdXRlZD1mYWxzZTtzLmtleT1yO3Muc3RhdGljPWZhbHNlO3RoaXMucHVzaENsYXNzTWV0aG9kKGUscyxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSk7cmV0dXJuIHRydWV9ZWxzZSBpZih0aGlzLmlzQ2xhc3NQcm9wZXJ0eSgpKXtjb25zdCBzPXQ7cy5jb21wdXRlZD1mYWxzZTtzLmtleT1yO3Muc3RhdGljPWZhbHNlO2UuYm9keS5wdXNoKHRoaXMucGFyc2VDbGFzc1Byb3BlcnR5KHMpKTtyZXR1cm4gdHJ1ZX10aGlzLnJlc2V0UHJldmlvdXNOb2RlVHJhaWxpbmdDb21tZW50cyhyKTtyZXR1cm4gZmFsc2V9cGFyc2VDbGFzc01lbWJlcihlLHQscil7Y29uc3Qgcz10aGlzLmlzQ29udGV4dHVhbCg5OCk7aWYocyl7aWYodGhpcy5wYXJzZUNsYXNzTWVtYmVyRnJvbU1vZGlmaWVyKGUsdCkpe3JldHVybn1pZih0aGlzLmVhdCg1KSl7dGhpcy5wYXJzZUNsYXNzU3RhdGljQmxvY2soZSx0KTtyZXR1cm59fXRoaXMucGFyc2VDbGFzc01lbWJlcldpdGhJc1N0YXRpYyhlLHQscixzKX1wYXJzZUNsYXNzTWVtYmVyV2l0aElzU3RhdGljKGUsdCxyLHMpe2NvbnN0IGk9dDtjb25zdCBuPXQ7Y29uc3QgYT10O2NvbnN0IG89dDtjb25zdCBsPWk7Y29uc3QgdT1pO3Quc3RhdGljPXM7dGhpcy5wYXJzZVByb3BlcnR5TmFtZVByZWZpeE9wZXJhdG9yKHQpO2lmKHRoaXMuZWF0KDQ5KSl7bC5raW5kPSJtZXRob2QiO2NvbnN0IHQ9dGhpcy5tYXRjaCgxMjgpO3RoaXMucGFyc2VDbGFzc0VsZW1lbnROYW1lKGwpO2lmKHQpe3RoaXMucHVzaENsYXNzUHJpdmF0ZU1ldGhvZChlLG4sdHJ1ZSxmYWxzZSk7cmV0dXJufWlmKHRoaXMuaXNOb25zdGF0aWNDb25zdHJ1Y3RvcihpKSl7dGhpcy5yYWlzZShpLmtleS5zdGFydCxjbC5Db25zdHJ1Y3RvcklzR2VuZXJhdG9yKX10aGlzLnB1c2hDbGFzc01ldGhvZChlLGksdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSk7cmV0dXJufWNvbnN0IGM9UmwodGhpcy5zdGF0ZS50eXBlKSYmIXRoaXMuc3RhdGUuY29udGFpbnNFc2M7Y29uc3QgaD10aGlzLm1hdGNoKDEyOCk7Y29uc3QgcD10aGlzLnBhcnNlQ2xhc3NFbGVtZW50TmFtZSh0KTtjb25zdCBmPXRoaXMuc3RhdGUuc3RhcnQ7dGhpcy5wYXJzZVBvc3RNZW1iZXJOYW1lTW9kaWZpZXJzKHUpO2lmKHRoaXMuaXNDbGFzc01ldGhvZCgpKXtsLmtpbmQ9Im1ldGhvZCI7aWYoaCl7dGhpcy5wdXNoQ2xhc3NQcml2YXRlTWV0aG9kKGUsbixmYWxzZSxmYWxzZSk7cmV0dXJufWNvbnN0IHM9dGhpcy5pc05vbnN0YXRpY0NvbnN0cnVjdG9yKGkpO2xldCBhPWZhbHNlO2lmKHMpe2kua2luZD0iY29uc3RydWN0b3IiO2lmKHIuaGFkQ29uc3RydWN0b3ImJiF0aGlzLmhhc1BsdWdpbigidHlwZXNjcmlwdCIpKXt0aGlzLnJhaXNlKHAuc3RhcnQsY2wuRHVwbGljYXRlQ29uc3RydWN0b3IpfWlmKHMmJnRoaXMuaGFzUGx1Z2luKCJ0eXBlc2NyaXB0IikmJnQub3ZlcnJpZGUpe3RoaXMucmFpc2UocC5zdGFydCxjbC5PdmVycmlkZU9uQ29uc3RydWN0b3IpfXIuaGFkQ29uc3RydWN0b3I9dHJ1ZTthPXIuaGFkU3VwZXJDbGFzc310aGlzLnB1c2hDbGFzc01ldGhvZChlLGksZmFsc2UsZmFsc2UscyxhKX1lbHNlIGlmKHRoaXMuaXNDbGFzc1Byb3BlcnR5KCkpe2lmKGgpe3RoaXMucHVzaENsYXNzUHJpdmF0ZVByb3BlcnR5KGUsbyl9ZWxzZXt0aGlzLnB1c2hDbGFzc1Byb3BlcnR5KGUsYSl9fWVsc2UgaWYoYyYmcC5uYW1lPT09ImFzeW5jIiYmIXRoaXMuaXNMaW5lVGVybWluYXRvcigpKXt0aGlzLnJlc2V0UHJldmlvdXNOb2RlVHJhaWxpbmdDb21tZW50cyhwKTtjb25zdCB0PXRoaXMuZWF0KDQ5KTtpZih1Lm9wdGlvbmFsKXt0aGlzLnVuZXhwZWN0ZWQoZil9bC5raW5kPSJtZXRob2QiO2NvbnN0IHI9dGhpcy5tYXRjaCgxMjgpO3RoaXMucGFyc2VDbGFzc0VsZW1lbnROYW1lKGwpO3RoaXMucGFyc2VQb3N0TWVtYmVyTmFtZU1vZGlmaWVycyh1KTtpZihyKXt0aGlzLnB1c2hDbGFzc1ByaXZhdGVNZXRob2QoZSxuLHQsdHJ1ZSl9ZWxzZXtpZih0aGlzLmlzTm9uc3RhdGljQ29uc3RydWN0b3IoaSkpe3RoaXMucmFpc2UoaS5rZXkuc3RhcnQsY2wuQ29uc3RydWN0b3JJc0FzeW5jKX10aGlzLnB1c2hDbGFzc01ldGhvZChlLGksdCx0cnVlLGZhbHNlLGZhbHNlKX19ZWxzZSBpZihjJiYocC5uYW1lPT09ImdldCJ8fHAubmFtZT09PSJzZXQiKSYmISh0aGlzLm1hdGNoKDQ5KSYmdGhpcy5pc0xpbmVUZXJtaW5hdG9yKCkpKXt0aGlzLnJlc2V0UHJldmlvdXNOb2RlVHJhaWxpbmdDb21tZW50cyhwKTtsLmtpbmQ9cC5uYW1lO2NvbnN0IHQ9dGhpcy5tYXRjaCgxMjgpO3RoaXMucGFyc2VDbGFzc0VsZW1lbnROYW1lKGkpO2lmKHQpe3RoaXMucHVzaENsYXNzUHJpdmF0ZU1ldGhvZChlLG4sZmFsc2UsZmFsc2UpfWVsc2V7aWYodGhpcy5pc05vbnN0YXRpY0NvbnN0cnVjdG9yKGkpKXt0aGlzLnJhaXNlKGkua2V5LnN0YXJ0LGNsLkNvbnN0cnVjdG9ySXNBY2Nlc3Nvcil9dGhpcy5wdXNoQ2xhc3NNZXRob2QoZSxpLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlKX10aGlzLmNoZWNrR2V0dGVyU2V0dGVyUGFyYW1zKGkpfWVsc2UgaWYodGhpcy5pc0xpbmVUZXJtaW5hdG9yKCkpe2lmKGgpe3RoaXMucHVzaENsYXNzUHJpdmF0ZVByb3BlcnR5KGUsbyl9ZWxzZXt0aGlzLnB1c2hDbGFzc1Byb3BlcnR5KGUsYSl9fWVsc2V7dGhpcy51bmV4cGVjdGVkKCl9fXBhcnNlQ2xhc3NFbGVtZW50TmFtZShlKXtjb25zdHt0eXBlOnQsdmFsdWU6cixzdGFydDpzfT10aGlzLnN0YXRlO2lmKCh0PT09MTIyfHx0PT09MTIzKSYmZS5zdGF0aWMmJnI9PT0icHJvdG90eXBlIil7dGhpcy5yYWlzZShzLGNsLlN0YXRpY1Byb3RvdHlwZSl9aWYodD09PTEyOCl7aWYocj09PSJjb25zdHJ1Y3RvciIpe3RoaXMucmFpc2UocyxjbC5Db25zdHJ1Y3RvckNsYXNzUHJpdmF0ZUZpZWxkKX1jb25zdCB0PXRoaXMucGFyc2VQcml2YXRlTmFtZSgpO2Uua2V5PXQ7cmV0dXJuIHR9cmV0dXJuIHRoaXMucGFyc2VQcm9wZXJ0eU5hbWUoZSl9cGFyc2VDbGFzc1N0YXRpY0Jsb2NrKGUsdCl7dmFyIHI7dGhpcy5zY29wZS5lbnRlcihGdXxNdXxOdSk7Y29uc3Qgcz10aGlzLnN0YXRlLmxhYmVsczt0aGlzLnN0YXRlLmxhYmVscz1bXTt0aGlzLnByb2RQYXJhbS5lbnRlcihqYyk7Y29uc3QgaT10LmJvZHk9W107dGhpcy5wYXJzZUJsb2NrT3JNb2R1bGVCbG9ja0JvZHkoaSx1bmRlZmluZWQsZmFsc2UsOCk7dGhpcy5wcm9kUGFyYW0uZXhpdCgpO3RoaXMuc2NvcGUuZXhpdCgpO3RoaXMuc3RhdGUubGFiZWxzPXM7ZS5ib2R5LnB1c2godGhpcy5maW5pc2hOb2RlKHQsIlN0YXRpY0Jsb2NrIikpO2lmKChyPXQuZGVjb3JhdG9ycykhPW51bGwmJnIubGVuZ3RoKXt0aGlzLnJhaXNlKHQuc3RhcnQsY2wuRGVjb3JhdG9yU3RhdGljQmxvY2spfX1wdXNoQ2xhc3NQcm9wZXJ0eShlLHQpe2lmKCF0LmNvbXB1dGVkJiYodC5rZXkubmFtZT09PSJjb25zdHJ1Y3RvciJ8fHQua2V5LnZhbHVlPT09ImNvbnN0cnVjdG9yIikpe3RoaXMucmFpc2UodC5rZXkuc3RhcnQsY2wuQ29uc3RydWN0b3JDbGFzc0ZpZWxkKX1lLmJvZHkucHVzaCh0aGlzLnBhcnNlQ2xhc3NQcm9wZXJ0eSh0KSl9cHVzaENsYXNzUHJpdmF0ZVByb3BlcnR5KGUsdCl7Y29uc3Qgcj10aGlzLnBhcnNlQ2xhc3NQcml2YXRlUHJvcGVydHkodCk7ZS5ib2R5LnB1c2gocik7dGhpcy5jbGFzc1Njb3BlLmRlY2xhcmVQcml2YXRlTmFtZSh0aGlzLmdldFByaXZhdGVOYW1lU1Yoci5rZXkpLGRjLHIua2V5LnN0YXJ0KX1wdXNoQ2xhc3NNZXRob2QoZSx0LHIscyxpLG4pe2UuYm9keS5wdXNoKHRoaXMucGFyc2VNZXRob2QodCxyLHMsaSxuLCJDbGFzc01ldGhvZCIsdHJ1ZSkpfXB1c2hDbGFzc1ByaXZhdGVNZXRob2QoZSx0LHIscyl7Y29uc3QgaT10aGlzLnBhcnNlTWV0aG9kKHQscixzLGZhbHNlLGZhbHNlLCJDbGFzc1ByaXZhdGVNZXRob2QiLHRydWUpO2UuYm9keS5wdXNoKGkpO2NvbnN0IG49aS5raW5kPT09ImdldCI/aS5zdGF0aWM/Y2M6cGM6aS5raW5kPT09InNldCI/aS5zdGF0aWM/aGM6ZmM6ZGM7dGhpcy5kZWNsYXJlQ2xhc3NQcml2YXRlTWV0aG9kSW5TY29wZShpLG4pfWRlY2xhcmVDbGFzc1ByaXZhdGVNZXRob2RJblNjb3BlKGUsdCl7dGhpcy5jbGFzc1Njb3BlLmRlY2xhcmVQcml2YXRlTmFtZSh0aGlzLmdldFByaXZhdGVOYW1lU1YoZS5rZXkpLHQsZS5rZXkuc3RhcnQpfXBhcnNlUG9zdE1lbWJlck5hbWVNb2RpZmllcnMoZSl7fXBhcnNlQ2xhc3NQcml2YXRlUHJvcGVydHkoZSl7dGhpcy5wYXJzZUluaXRpYWxpemVyKGUpO3RoaXMuc2VtaWNvbG9uKCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJDbGFzc1ByaXZhdGVQcm9wZXJ0eSIpfXBhcnNlQ2xhc3NQcm9wZXJ0eShlKXt0aGlzLnBhcnNlSW5pdGlhbGl6ZXIoZSk7dGhpcy5zZW1pY29sb24oKTtyZXR1cm4gdGhpcy5maW5pc2hOb2RlKGUsIkNsYXNzUHJvcGVydHkiKX1wYXJzZUluaXRpYWxpemVyKGUpe3RoaXMuc2NvcGUuZW50ZXIoRnV8TnUpO3RoaXMuZXhwcmVzc2lvblNjb3BlLmVudGVyKFJjKCkpO3RoaXMucHJvZFBhcmFtLmVudGVyKGpjKTtlLnZhbHVlPXRoaXMuZWF0KDI3KT90aGlzLnBhcnNlTWF5YmVBc3NpZ25BbGxvd0luKCk6bnVsbDt0aGlzLmV4cHJlc3Npb25TY29wZS5leGl0KCk7dGhpcy5wcm9kUGFyYW0uZXhpdCgpO3RoaXMuc2NvcGUuZXhpdCgpfXBhcnNlQ2xhc3NJZChlLHQscixzKXtpZihzPT09dm9pZCAwKXtzPUh1fWlmKFJsKHRoaXMuc3RhdGUudHlwZSkpe2UuaWQ9dGhpcy5wYXJzZUlkZW50aWZpZXIoKTtpZih0KXt0aGlzLmNoZWNrTFZhbChlLmlkLCJjbGFzcyBuYW1lIixzKX19ZWxzZXtpZihyfHwhdCl7ZS5pZD1udWxsfWVsc2V7dGhpcy51bmV4cGVjdGVkKG51bGwsY2wuTWlzc2luZ0NsYXNzTmFtZSl9fX1wYXJzZUNsYXNzU3VwZXIoZSl7ZS5zdXBlckNsYXNzPXRoaXMuZWF0KDc1KT90aGlzLnBhcnNlRXhwclN1YnNjcmlwdHMoKTpudWxsfXBhcnNlRXhwb3J0KGUpe2NvbnN0IHQ9dGhpcy5tYXliZVBhcnNlRXhwb3J0RGVmYXVsdFNwZWNpZmllcihlKTtjb25zdCByPSF0fHx0aGlzLmVhdCgxMik7Y29uc3Qgcz1yJiZ0aGlzLmVhdEV4cG9ydFN0YXIoZSk7Y29uc3QgaT1zJiZ0aGlzLm1heWJlUGFyc2VFeHBvcnROYW1lc3BhY2VTcGVjaWZpZXIoZSk7Y29uc3Qgbj1yJiYoIWl8fHRoaXMuZWF0KDEyKSk7Y29uc3QgYT10fHxzO2lmKHMmJiFpKXtpZih0KXRoaXMudW5leHBlY3RlZCgpO3RoaXMucGFyc2VFeHBvcnRGcm9tKGUsdHJ1ZSk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJFeHBvcnRBbGxEZWNsYXJhdGlvbiIpfWNvbnN0IG89dGhpcy5tYXliZVBhcnNlRXhwb3J0TmFtZWRTcGVjaWZpZXJzKGUpO2lmKHQmJnImJiFzJiYhb3x8aSYmbiYmIW8pe3Rocm93IHRoaXMudW5leHBlY3RlZChudWxsLDUpfWxldCBsO2lmKGF8fG8pe2w9ZmFsc2U7dGhpcy5wYXJzZUV4cG9ydEZyb20oZSxhKX1lbHNle2w9dGhpcy5tYXliZVBhcnNlRXhwb3J0RGVjbGFyYXRpb24oZSl9aWYoYXx8b3x8bCl7dGhpcy5jaGVja0V4cG9ydChlLHRydWUsZmFsc2UsISFlLnNvdXJjZSk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJFeHBvcnROYW1lZERlY2xhcmF0aW9uIil9aWYodGhpcy5lYXQoNTkpKXtlLmRlY2xhcmF0aW9uPXRoaXMucGFyc2VFeHBvcnREZWZhdWx0RXhwcmVzc2lvbigpO3RoaXMuY2hlY2tFeHBvcnQoZSx0cnVlLHRydWUpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uIil9dGhyb3cgdGhpcy51bmV4cGVjdGVkKG51bGwsNSl9ZWF0RXhwb3J0U3RhcihlKXtyZXR1cm4gdGhpcy5lYXQoNDkpfW1heWJlUGFyc2VFeHBvcnREZWZhdWx0U3BlY2lmaWVyKGUpe2lmKHRoaXMuaXNFeHBvcnREZWZhdWx0U3BlY2lmaWVyKCkpe3RoaXMuZXhwZWN0UGx1Z2luKCJleHBvcnREZWZhdWx0RnJvbSIpO2NvbnN0IHQ9dGhpcy5zdGFydE5vZGUoKTt0LmV4cG9ydGVkPXRoaXMucGFyc2VJZGVudGlmaWVyKHRydWUpO2Uuc3BlY2lmaWVycz1bdGhpcy5maW5pc2hOb2RlKHQsIkV4cG9ydERlZmF1bHRTcGVjaWZpZXIiKV07cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfW1heWJlUGFyc2VFeHBvcnROYW1lc3BhY2VTcGVjaWZpZXIoZSl7aWYodGhpcy5pc0NvbnRleHR1YWwoODcpKXtpZighZS5zcGVjaWZpZXJzKWUuc3BlY2lmaWVycz1bXTtjb25zdCB0PXRoaXMuc3RhcnROb2RlQXQodGhpcy5zdGF0ZS5sYXN0VG9rU3RhcnQsdGhpcy5zdGF0ZS5sYXN0VG9rU3RhcnRMb2MpO3RoaXMubmV4dCgpO3QuZXhwb3J0ZWQ9dGhpcy5wYXJzZU1vZHVsZUV4cG9ydE5hbWUoKTtlLnNwZWNpZmllcnMucHVzaCh0aGlzLmZpbmlzaE5vZGUodCwiRXhwb3J0TmFtZXNwYWNlU3BlY2lmaWVyIikpO3JldHVybiB0cnVlfXJldHVybiBmYWxzZX1tYXliZVBhcnNlRXhwb3J0TmFtZWRTcGVjaWZpZXJzKGUpe2lmKHRoaXMubWF0Y2goNSkpe2lmKCFlLnNwZWNpZmllcnMpZS5zcGVjaWZpZXJzPVtdO2NvbnN0IHQ9ZS5leHBvcnRLaW5kPT09InR5cGUiO2Uuc3BlY2lmaWVycy5wdXNoKC4uLnRoaXMucGFyc2VFeHBvcnRTcGVjaWZpZXJzKHQpKTtlLnNvdXJjZT1udWxsO2UuZGVjbGFyYXRpb249bnVsbDtpZih0aGlzLmhhc1BsdWdpbigiaW1wb3J0QXNzZXJ0aW9ucyIpKXtlLmFzc2VydGlvbnM9W119cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfW1heWJlUGFyc2VFeHBvcnREZWNsYXJhdGlvbihlKXtpZih0aGlzLnNob3VsZFBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKSl7ZS5zcGVjaWZpZXJzPVtdO2Uuc291cmNlPW51bGw7aWYodGhpcy5oYXNQbHVnaW4oImltcG9ydEFzc2VydGlvbnMiKSl7ZS5hc3NlcnRpb25zPVtdfWUuZGVjbGFyYXRpb249dGhpcy5wYXJzZUV4cG9ydERlY2xhcmF0aW9uKGUpO3JldHVybiB0cnVlfXJldHVybiBmYWxzZX1pc0FzeW5jRnVuY3Rpb24oKXtpZighdGhpcy5pc0NvbnRleHR1YWwoODkpKXJldHVybiBmYWxzZTtjb25zdCBlPXRoaXMubmV4dFRva2VuU3RhcnQoKTtyZXR1cm4hSG8udGVzdCh0aGlzLmlucHV0LnNsaWNlKHRoaXMuc3RhdGUucG9zLGUpKSYmdGhpcy5pc1VucGFyc2VkQ29udGV4dHVhbChlLCJmdW5jdGlvbiIpfXBhcnNlRXhwb3J0RGVmYXVsdEV4cHJlc3Npb24oKXtjb25zdCBlPXRoaXMuc3RhcnROb2RlKCk7Y29uc3QgdD10aGlzLmlzQXN5bmNGdW5jdGlvbigpO2lmKHRoaXMubWF0Y2goNjIpfHx0KXt0aGlzLm5leHQoKTtpZih0KXt0aGlzLm5leHQoKX1yZXR1cm4gdGhpcy5wYXJzZUZ1bmN0aW9uKGUsR2h8SmgsdCl9ZWxzZSBpZih0aGlzLm1hdGNoKDc0KSl7cmV0dXJuIHRoaXMucGFyc2VDbGFzcyhlLHRydWUsdHJ1ZSl9ZWxzZSBpZih0aGlzLm1hdGNoKDI0KSl7aWYodGhpcy5oYXNQbHVnaW4oImRlY29yYXRvcnMiKSYmdGhpcy5nZXRQbHVnaW5PcHRpb24oImRlY29yYXRvcnMiLCJkZWNvcmF0b3JzQmVmb3JlRXhwb3J0Iikpe3RoaXMucmFpc2UodGhpcy5zdGF0ZS5zdGFydCxjbC5EZWNvcmF0b3JCZWZvcmVFeHBvcnQpfXRoaXMucGFyc2VEZWNvcmF0b3JzKGZhbHNlKTtyZXR1cm4gdGhpcy5wYXJzZUNsYXNzKGUsdHJ1ZSx0cnVlKX1lbHNlIGlmKHRoaXMubWF0Y2goNjkpfHx0aGlzLm1hdGNoKDY4KXx8dGhpcy5pc0xldCgpKXt0aHJvdyB0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsY2wuVW5zdXBwb3J0ZWREZWZhdWx0RXhwb3J0KX1lbHNle2NvbnN0IGU9dGhpcy5wYXJzZU1heWJlQXNzaWduQWxsb3dJbigpO3RoaXMuc2VtaWNvbG9uKCk7cmV0dXJuIGV9fXBhcnNlRXhwb3J0RGVjbGFyYXRpb24oZSl7cmV0dXJuIHRoaXMucGFyc2VTdGF0ZW1lbnQobnVsbCl9aXNFeHBvcnREZWZhdWx0U3BlY2lmaWVyKCl7Y29uc3R7dHlwZTplfT10aGlzLnN0YXRlO2lmKFJsKGUpKXtpZihlPT09ODkmJiF0aGlzLnN0YXRlLmNvbnRhaW5zRXNjfHxlPT09OTMpe3JldHVybiBmYWxzZX1pZigoZT09PTEyMHx8ZT09PTExOSkmJiF0aGlzLnN0YXRlLmNvbnRhaW5zRXNjKXtjb25zdHt0eXBlOmV9PXRoaXMubG9va2FoZWFkKCk7aWYoUmwoZSkmJmUhPT05MXx8ZT09PTUpe3RoaXMuZXhwZWN0T25lUGx1Z2luKFsiZmxvdyIsInR5cGVzY3JpcHQiXSk7cmV0dXJuIGZhbHNlfX19ZWxzZSBpZighdGhpcy5tYXRjaCg1OSkpe3JldHVybiBmYWxzZX1jb25zdCB0PXRoaXMubmV4dFRva2VuU3RhcnQoKTtjb25zdCByPXRoaXMuaXNVbnBhcnNlZENvbnRleHR1YWwodCwiZnJvbSIpO2lmKHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0KT09PTQ0fHxSbCh0aGlzLnN0YXRlLnR5cGUpJiZyKXtyZXR1cm4gdHJ1ZX1pZih0aGlzLm1hdGNoKDU5KSYmcil7Y29uc3QgZT10aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5uZXh0VG9rZW5TdGFydFNpbmNlKHQrNCkpO3JldHVybiBlPT09MzR8fGU9PT0zOX1yZXR1cm4gZmFsc2V9cGFyc2VFeHBvcnRGcm9tKGUsdCl7aWYodGhpcy5lYXRDb250ZXh0dWFsKDkxKSl7ZS5zb3VyY2U9dGhpcy5wYXJzZUltcG9ydFNvdXJjZSgpO3RoaXMuY2hlY2tFeHBvcnQoZSk7Y29uc3QgdD10aGlzLm1heWJlUGFyc2VJbXBvcnRBc3NlcnRpb25zKCk7aWYodCl7ZS5hc3NlcnRpb25zPXR9fWVsc2UgaWYodCl7dGhpcy51bmV4cGVjdGVkKCl9dGhpcy5zZW1pY29sb24oKX1zaG91bGRQYXJzZUV4cG9ydERlY2xhcmF0aW9uKCl7Y29uc3R7dHlwZTplfT10aGlzLnN0YXRlO2lmKGU9PT0yNCl7dGhpcy5leHBlY3RPbmVQbHVnaW4oWyJkZWNvcmF0b3JzIiwiZGVjb3JhdG9ycy1sZWdhY3kiXSk7aWYodGhpcy5oYXNQbHVnaW4oImRlY29yYXRvcnMiKSl7aWYodGhpcy5nZXRQbHVnaW5PcHRpb24oImRlY29yYXRvcnMiLCJkZWNvcmF0b3JzQmVmb3JlRXhwb3J0Iikpe3RoaXMudW5leHBlY3RlZCh0aGlzLnN0YXRlLnN0YXJ0LGNsLkRlY29yYXRvckJlZm9yZUV4cG9ydCl9ZWxzZXtyZXR1cm4gdHJ1ZX19fXJldHVybiBlPT09Njh8fGU9PT02OXx8ZT09PTYyfHxlPT09NzR8fHRoaXMuaXNMZXQoKXx8dGhpcy5pc0FzeW5jRnVuY3Rpb24oKX1jaGVja0V4cG9ydChlLHQscixzKXtpZih0KXtpZihyKXt0aGlzLmNoZWNrRHVwbGljYXRlRXhwb3J0cyhlLCJkZWZhdWx0Iik7aWYodGhpcy5oYXNQbHVnaW4oImV4cG9ydERlZmF1bHRGcm9tIikpe3ZhciBpO2NvbnN0IHQ9ZS5kZWNsYXJhdGlvbjtpZih0LnR5cGU9PT0iSWRlbnRpZmllciImJnQubmFtZT09PSJmcm9tIiYmdC5lbmQtdC5zdGFydD09PTQmJiEoKGk9dC5leHRyYSkhPW51bGwmJmkucGFyZW50aGVzaXplZCkpe3RoaXMucmFpc2UodC5zdGFydCxjbC5FeHBvcnREZWZhdWx0RnJvbUFzSWRlbnRpZmllcil9fX1lbHNlIGlmKGUuc3BlY2lmaWVycyYmZS5zcGVjaWZpZXJzLmxlbmd0aCl7Zm9yKGNvbnN0IHQgb2YgZS5zcGVjaWZpZXJzKXtjb25zdHtleHBvcnRlZDplfT10O2NvbnN0IHI9ZS50eXBlPT09IklkZW50aWZpZXIiP2UubmFtZTplLnZhbHVlO3RoaXMuY2hlY2tEdXBsaWNhdGVFeHBvcnRzKHQscik7aWYoIXMmJnQubG9jYWwpe2NvbnN0e2xvY2FsOmV9PXQ7aWYoZS50eXBlIT09IklkZW50aWZpZXIiKXt0aGlzLnJhaXNlKHQuc3RhcnQsY2wuRXhwb3J0QmluZGluZ0lzU3RyaW5nLGUudmFsdWUscil9ZWxzZXt0aGlzLmNoZWNrUmVzZXJ2ZWRXb3JkKGUubmFtZSxlLnN0YXJ0LHRydWUsZmFsc2UpO3RoaXMuc2NvcGUuY2hlY2tMb2NhbEV4cG9ydChlKX19fX1lbHNlIGlmKGUuZGVjbGFyYXRpb24pe2lmKGUuZGVjbGFyYXRpb24udHlwZT09PSJGdW5jdGlvbkRlY2xhcmF0aW9uInx8ZS5kZWNsYXJhdGlvbi50eXBlPT09IkNsYXNzRGVjbGFyYXRpb24iKXtjb25zdCB0PWUuZGVjbGFyYXRpb24uaWQ7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJBc3NlcnRpb24gZmFpbHVyZSIpO3RoaXMuY2hlY2tEdXBsaWNhdGVFeHBvcnRzKGUsdC5uYW1lKX1lbHNlIGlmKGUuZGVjbGFyYXRpb24udHlwZT09PSJWYXJpYWJsZURlY2xhcmF0aW9uIil7Zm9yKGNvbnN0IHQgb2YgZS5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMpe3RoaXMuY2hlY2tEZWNsYXJhdGlvbih0LmlkKX19fX1jb25zdCBuPXRoaXMuc3RhdGUuZGVjb3JhdG9yU3RhY2tbdGhpcy5zdGF0ZS5kZWNvcmF0b3JTdGFjay5sZW5ndGgtMV07aWYobi5sZW5ndGgpe3Rocm93IHRoaXMucmFpc2UoZS5zdGFydCxjbC5VbnN1cHBvcnRlZERlY29yYXRvckV4cG9ydCl9fWNoZWNrRGVjbGFyYXRpb24oZSl7aWYoZS50eXBlPT09IklkZW50aWZpZXIiKXt0aGlzLmNoZWNrRHVwbGljYXRlRXhwb3J0cyhlLGUubmFtZSl9ZWxzZSBpZihlLnR5cGU9PT0iT2JqZWN0UGF0dGVybiIpe2Zvcihjb25zdCB0IG9mIGUucHJvcGVydGllcyl7dGhpcy5jaGVja0RlY2xhcmF0aW9uKHQpfX1lbHNlIGlmKGUudHlwZT09PSJBcnJheVBhdHRlcm4iKXtmb3IoY29uc3QgdCBvZiBlLmVsZW1lbnRzKXtpZih0KXt0aGlzLmNoZWNrRGVjbGFyYXRpb24odCl9fX1lbHNlIGlmKGUudHlwZT09PSJPYmplY3RQcm9wZXJ0eSIpe3RoaXMuY2hlY2tEZWNsYXJhdGlvbihlLnZhbHVlKX1lbHNlIGlmKGUudHlwZT09PSJSZXN0RWxlbWVudCIpe3RoaXMuY2hlY2tEZWNsYXJhdGlvbihlLmFyZ3VtZW50KX1lbHNlIGlmKGUudHlwZT09PSJBc3NpZ25tZW50UGF0dGVybiIpe3RoaXMuY2hlY2tEZWNsYXJhdGlvbihlLmxlZnQpfX1jaGVja0R1cGxpY2F0ZUV4cG9ydHMoZSx0KXtpZih0aGlzLmV4cG9ydGVkSWRlbnRpZmllcnMuaGFzKHQpKXt0aGlzLnJhaXNlKGUuc3RhcnQsdD09PSJkZWZhdWx0Ij9jbC5EdXBsaWNhdGVEZWZhdWx0RXhwb3J0OmNsLkR1cGxpY2F0ZUV4cG9ydCx0KX10aGlzLmV4cG9ydGVkSWRlbnRpZmllcnMuYWRkKHQpfXBhcnNlRXhwb3J0U3BlY2lmaWVycyhlKXtjb25zdCB0PVtdO2xldCByPXRydWU7dGhpcy5leHBlY3QoNSk7d2hpbGUoIXRoaXMuZWF0KDgpKXtpZihyKXtyPWZhbHNlfWVsc2V7dGhpcy5leHBlY3QoMTIpO2lmKHRoaXMuZWF0KDgpKWJyZWFrfWNvbnN0IHM9dGhpcy5pc0NvbnRleHR1YWwoMTIwKTtjb25zdCBpPXRoaXMubWF0Y2goMTIzKTtjb25zdCBuPXRoaXMuc3RhcnROb2RlKCk7bi5sb2NhbD10aGlzLnBhcnNlTW9kdWxlRXhwb3J0TmFtZSgpO3QucHVzaCh0aGlzLnBhcnNlRXhwb3J0U3BlY2lmaWVyKG4saSxlLHMpKX1yZXR1cm4gdH1wYXJzZUV4cG9ydFNwZWNpZmllcihlLHQscixzKXtpZih0aGlzLmVhdENvbnRleHR1YWwoODcpKXtlLmV4cG9ydGVkPXRoaXMucGFyc2VNb2R1bGVFeHBvcnROYW1lKCl9ZWxzZSBpZih0KXtlLmV4cG9ydGVkPVFjKGUubG9jYWwpfWVsc2UgaWYoIWUuZXhwb3J0ZWQpe2UuZXhwb3J0ZWQ9WWMoZS5sb2NhbCl9cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJFeHBvcnRTcGVjaWZpZXIiKX1wYXJzZU1vZHVsZUV4cG9ydE5hbWUoKXtpZih0aGlzLm1hdGNoKDEyMykpe2NvbnN0IGU9dGhpcy5wYXJzZVN0cmluZ0xpdGVyYWwodGhpcy5zdGF0ZS52YWx1ZSk7Y29uc3QgdD1lLnZhbHVlLm1hdGNoKEhoKTtpZih0KXt0aGlzLnJhaXNlKGUuc3RhcnQsY2wuTW9kdWxlRXhwb3J0TmFtZUhhc0xvbmVTdXJyb2dhdGUsdFswXS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSl9cmV0dXJuIGV9cmV0dXJuIHRoaXMucGFyc2VJZGVudGlmaWVyKHRydWUpfXBhcnNlSW1wb3J0KGUpe2Uuc3BlY2lmaWVycz1bXTtpZighdGhpcy5tYXRjaCgxMjMpKXtjb25zdCB0PXRoaXMubWF5YmVQYXJzZURlZmF1bHRJbXBvcnRTcGVjaWZpZXIoZSk7Y29uc3Qgcj0hdHx8dGhpcy5lYXQoMTIpO2NvbnN0IHM9ciYmdGhpcy5tYXliZVBhcnNlU3RhckltcG9ydFNwZWNpZmllcihlKTtpZihyJiYhcyl0aGlzLnBhcnNlTmFtZWRJbXBvcnRTcGVjaWZpZXJzKGUpO3RoaXMuZXhwZWN0Q29udGV4dHVhbCg5MSl9ZS5zb3VyY2U9dGhpcy5wYXJzZUltcG9ydFNvdXJjZSgpO2NvbnN0IHQ9dGhpcy5tYXliZVBhcnNlSW1wb3J0QXNzZXJ0aW9ucygpO2lmKHQpe2UuYXNzZXJ0aW9ucz10fWVsc2V7Y29uc3QgdD10aGlzLm1heWJlUGFyc2VNb2R1bGVBdHRyaWJ1dGVzKCk7aWYodCl7ZS5hdHRyaWJ1dGVzPXR9fXRoaXMuc2VtaWNvbG9uKCk7cmV0dXJuIHRoaXMuZmluaXNoTm9kZShlLCJJbXBvcnREZWNsYXJhdGlvbiIpfXBhcnNlSW1wb3J0U291cmNlKCl7aWYoIXRoaXMubWF0Y2goMTIzKSl0aGlzLnVuZXhwZWN0ZWQoKTtyZXR1cm4gdGhpcy5wYXJzZUV4cHJBdG9tKCl9c2hvdWxkUGFyc2VEZWZhdWx0SW1wb3J0KGUpe3JldHVybiBSbCh0aGlzLnN0YXRlLnR5cGUpfXBhcnNlSW1wb3J0U3BlY2lmaWVyTG9jYWwoZSx0LHIscyl7dC5sb2NhbD10aGlzLnBhcnNlSWRlbnRpZmllcigpO3RoaXMuY2hlY2tMVmFsKHQubG9jYWwscyxXdSk7ZS5zcGVjaWZpZXJzLnB1c2godGhpcy5maW5pc2hOb2RlKHQscikpfXBhcnNlQXNzZXJ0RW50cmllcygpe2NvbnN0IGU9W107Y29uc3QgdD1uZXcgU2V0O2Rve2lmKHRoaXMubWF0Y2goOCkpe2JyZWFrfWNvbnN0IHI9dGhpcy5zdGFydE5vZGUoKTtjb25zdCBzPXRoaXMuc3RhdGUudmFsdWU7aWYodC5oYXMocykpe3RoaXMucmFpc2UodGhpcy5zdGF0ZS5zdGFydCxjbC5Nb2R1bGVBdHRyaWJ1dGVzV2l0aER1cGxpY2F0ZUtleXMscyl9dC5hZGQocyk7aWYodGhpcy5tYXRjaCgxMjMpKXtyLmtleT10aGlzLnBhcnNlU3RyaW5nTGl0ZXJhbChzKX1lbHNle3Iua2V5PXRoaXMucGFyc2VJZGVudGlmaWVyKHRydWUpfXRoaXMuZXhwZWN0KDE0KTtpZighdGhpcy5tYXRjaCgxMjMpKXt0aHJvdyB0aGlzLnVuZXhwZWN0ZWQodGhpcy5zdGF0ZS5zdGFydCxjbC5Nb2R1bGVBdHRyaWJ1dGVJbnZhbGlkVmFsdWUpfXIudmFsdWU9dGhpcy5wYXJzZVN0cmluZ0xpdGVyYWwodGhpcy5zdGF0ZS52YWx1ZSk7dGhpcy5maW5pc2hOb2RlKHIsIkltcG9ydEF0dHJpYnV0ZSIpO2UucHVzaChyKX13aGlsZSh0aGlzLmVhdCgxMikpO3JldHVybiBlfW1heWJlUGFyc2VNb2R1bGVBdHRyaWJ1dGVzKCl7aWYodGhpcy5tYXRjaCg3MCkmJiF0aGlzLmhhc1ByZWNlZGluZ0xpbmVCcmVhaygpKXt0aGlzLmV4cGVjdFBsdWdpbigibW9kdWxlQXR0cmlidXRlcyIpO3RoaXMubmV4dCgpfWVsc2V7aWYodGhpcy5oYXNQbHVnaW4oIm1vZHVsZUF0dHJpYnV0ZXMiKSlyZXR1cm5bXTtyZXR1cm4gbnVsbH1jb25zdCBlPVtdO2NvbnN0IHQ9bmV3IFNldDtkb3tjb25zdCByPXRoaXMuc3RhcnROb2RlKCk7ci5rZXk9dGhpcy5wYXJzZUlkZW50aWZpZXIodHJ1ZSk7aWYoci5rZXkubmFtZSE9PSJ0eXBlIil7dGhpcy5yYWlzZShyLmtleS5zdGFydCxjbC5Nb2R1bGVBdHRyaWJ1dGVEaWZmZXJlbnRGcm9tVHlwZSxyLmtleS5uYW1lKX1pZih0LmhhcyhyLmtleS5uYW1lKSl7dGhpcy5yYWlzZShyLmtleS5zdGFydCxjbC5Nb2R1bGVBdHRyaWJ1dGVzV2l0aER1cGxpY2F0ZUtleXMsci5rZXkubmFtZSl9dC5hZGQoci5rZXkubmFtZSk7dGhpcy5leHBlY3QoMTQpO2lmKCF0aGlzLm1hdGNoKDEyMykpe3Rocm93IHRoaXMudW5leHBlY3RlZCh0aGlzLnN0YXRlLnN0YXJ0LGNsLk1vZHVsZUF0dHJpYnV0ZUludmFsaWRWYWx1ZSl9ci52YWx1ZT10aGlzLnBhcnNlU3RyaW5nTGl0ZXJhbCh0aGlzLnN0YXRlLnZhbHVlKTt0aGlzLmZpbmlzaE5vZGUociwiSW1wb3J0QXR0cmlidXRlIik7ZS5wdXNoKHIpfXdoaWxlKHRoaXMuZWF0KDEyKSk7cmV0dXJuIGV9bWF5YmVQYXJzZUltcG9ydEFzc2VydGlvbnMoKXtpZih0aGlzLmlzQ29udGV4dHVhbCg4OCkmJiF0aGlzLmhhc1ByZWNlZGluZ0xpbmVCcmVhaygpKXt0aGlzLmV4cGVjdFBsdWdpbigiaW1wb3J0QXNzZXJ0aW9ucyIpO3RoaXMubmV4dCgpfWVsc2V7aWYodGhpcy5oYXNQbHVnaW4oImltcG9ydEFzc2VydGlvbnMiKSlyZXR1cm5bXTtyZXR1cm4gbnVsbH10aGlzLmVhdCg1KTtjb25zdCBlPXRoaXMucGFyc2VBc3NlcnRFbnRyaWVzKCk7dGhpcy5lYXQoOCk7cmV0dXJuIGV9bWF5YmVQYXJzZURlZmF1bHRJbXBvcnRTcGVjaWZpZXIoZSl7aWYodGhpcy5zaG91bGRQYXJzZURlZmF1bHRJbXBvcnQoZSkpe3RoaXMucGFyc2VJbXBvcnRTcGVjaWZpZXJMb2NhbChlLHRoaXMuc3RhcnROb2RlKCksIkltcG9ydERlZmF1bHRTcGVjaWZpZXIiLCJkZWZhdWx0IGltcG9ydCBzcGVjaWZpZXIiKTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9bWF5YmVQYXJzZVN0YXJJbXBvcnRTcGVjaWZpZXIoZSl7aWYodGhpcy5tYXRjaCg0OSkpe2NvbnN0IHQ9dGhpcy5zdGFydE5vZGUoKTt0aGlzLm5leHQoKTt0aGlzLmV4cGVjdENvbnRleHR1YWwoODcpO3RoaXMucGFyc2VJbXBvcnRTcGVjaWZpZXJMb2NhbChlLHQsIkltcG9ydE5hbWVzcGFjZVNwZWNpZmllciIsImltcG9ydCBuYW1lc3BhY2Ugc3BlY2lmaWVyIik7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfXBhcnNlTmFtZWRJbXBvcnRTcGVjaWZpZXJzKGUpe2xldCB0PXRydWU7dGhpcy5leHBlY3QoNSk7d2hpbGUoIXRoaXMuZWF0KDgpKXtpZih0KXt0PWZhbHNlfWVsc2V7aWYodGhpcy5lYXQoMTQpKXt0aHJvdyB0aGlzLnJhaXNlKHRoaXMuc3RhdGUuc3RhcnQsY2wuRGVzdHJ1Y3R1cmVOYW1lZEltcG9ydCl9dGhpcy5leHBlY3QoMTIpO2lmKHRoaXMuZWF0KDgpKWJyZWFrfWNvbnN0IHI9dGhpcy5zdGFydE5vZGUoKTtjb25zdCBzPXRoaXMubWF0Y2goMTIzKTtjb25zdCBpPXRoaXMuaXNDb250ZXh0dWFsKDEyMCk7ci5pbXBvcnRlZD10aGlzLnBhcnNlTW9kdWxlRXhwb3J0TmFtZSgpO2NvbnN0IG49dGhpcy5wYXJzZUltcG9ydFNwZWNpZmllcihyLHMsZS5pbXBvcnRLaW5kPT09InR5cGUifHxlLmltcG9ydEtpbmQ9PT0idHlwZW9mIixpKTtlLnNwZWNpZmllcnMucHVzaChuKX19cGFyc2VJbXBvcnRTcGVjaWZpZXIoZSx0LHIscyl7aWYodGhpcy5lYXRDb250ZXh0dWFsKDg3KSl7ZS5sb2NhbD10aGlzLnBhcnNlSWRlbnRpZmllcigpfWVsc2V7Y29uc3R7aW1wb3J0ZWQ6cn09ZTtpZih0KXt0aHJvdyB0aGlzLnJhaXNlKGUuc3RhcnQsY2wuSW1wb3J0QmluZGluZ0lzU3RyaW5nLHIudmFsdWUpfXRoaXMuY2hlY2tSZXNlcnZlZFdvcmQoci5uYW1lLGUuc3RhcnQsdHJ1ZSx0cnVlKTtpZighZS5sb2NhbCl7ZS5sb2NhbD1ZYyhyKX19dGhpcy5jaGVja0xWYWwoZS5sb2NhbCwiaW1wb3J0IHNwZWNpZmllciIsV3UpO3JldHVybiB0aGlzLmZpbmlzaE5vZGUoZSwiSW1wb3J0U3BlY2lmaWVyIil9aXNUaGlzUGFyYW0oZSl7cmV0dXJuIGUudHlwZT09PSJJZGVudGlmaWVyIiYmZS5uYW1lPT09InRoaXMifX1jbGFzcyBZaCBleHRlbmRzICRoe2NvbnN0cnVjdG9yKGUsdCl7ZT1MaChlKTtzdXBlcihlLHQpO3RoaXMub3B0aW9ucz1lO3RoaXMuaW5pdGlhbGl6ZVNjb3BlcygpO3RoaXMucGx1Z2lucz1RaCh0aGlzLm9wdGlvbnMucGx1Z2lucyk7dGhpcy5maWxlbmFtZT1lLnNvdXJjZUZpbGVuYW1lfWdldFNjb3BlSGFuZGxlcigpe3JldHVybiB5Y31wYXJzZSgpe3RoaXMuZW50ZXJJbml0aWFsU2NvcGVzKCk7Y29uc3QgZT10aGlzLnN0YXJ0Tm9kZSgpO2NvbnN0IHQ9dGhpcy5zdGFydE5vZGUoKTt0aGlzLm5leHRUb2tlbigpO2UuZXJyb3JzPW51bGw7dGhpcy5wYXJzZVRvcExldmVsKGUsdCk7ZS5lcnJvcnM9dGhpcy5zdGF0ZS5lcnJvcnM7cmV0dXJuIGV9fWZ1bmN0aW9uIFFoKGUpe2NvbnN0IHQ9bmV3IE1hcDtmb3IoY29uc3QgciBvZiBlKXtjb25zdFtlLHNdPUFycmF5LmlzQXJyYXkocik/cjpbcix7fV07aWYoIXQuaGFzKGUpKXQuc2V0KGUsc3x8e30pfXJldHVybiB0fWZ1bmN0aW9uIFpoKGUsdCl7dmFyIHI7aWYoKChyPXQpPT1udWxsP3ZvaWQgMDpyLnNvdXJjZVR5cGUpPT09InVuYW1iaWd1b3VzIil7dD1PYmplY3QuYXNzaWduKHt9LHQpO3RyeXt0LnNvdXJjZVR5cGU9Im1vZHVsZSI7Y29uc3Qgcj1zcCh0LGUpO2NvbnN0IHM9ci5wYXJzZSgpO2lmKHIuc2F3VW5hbWJpZ3VvdXNFU00pe3JldHVybiBzfWlmKHIuYW1iaWd1b3VzU2NyaXB0RGlmZmVyZW50QXN0KXt0cnl7dC5zb3VyY2VUeXBlPSJzY3JpcHQiO3JldHVybiBzcCh0LGUpLnBhcnNlKCl9Y2F0Y2goZSl7fX1lbHNle3MucHJvZ3JhbS5zb3VyY2VUeXBlPSJzY3JpcHQifXJldHVybiBzfWNhdGNoKHIpe3RyeXt0LnNvdXJjZVR5cGU9InNjcmlwdCI7cmV0dXJuIHNwKHQsZSkucGFyc2UoKX1jYXRjaChlKXt9dGhyb3cgcn19ZWxzZXtyZXR1cm4gc3AodCxlKS5wYXJzZSgpfX1mdW5jdGlvbiBlcChlLHQpe2NvbnN0IHI9c3AodCxlKTtpZihyLm9wdGlvbnMuc3RyaWN0TW9kZSl7ci5zdGF0ZS5zdHJpY3Q9dHJ1ZX1yZXR1cm4gci5nZXRFeHByZXNzaW9uKCl9ZnVuY3Rpb24gdHAoZSl7Y29uc3QgdD17fTtmb3IoY29uc3QgciBvZiBPYmplY3Qua2V5cyhlKSl7dFtyXT1ydShlW3JdKX1yZXR1cm4gdH1jb25zdCBycD10cChCbCk7ZnVuY3Rpb24gc3AoZSx0KXtsZXQgcj1ZaDtpZihlIT1udWxsJiZlLnBsdWdpbnMpe0ZoKGUucGx1Z2lucyk7cj1ucChlLnBsdWdpbnMpfXJldHVybiBuZXcgcihlLHQpfWNvbnN0IGlwPXt9O2Z1bmN0aW9uIG5wKGUpe2NvbnN0IHQ9X2guZmlsdGVyKCh0PT5QaChlLHQpKSk7Y29uc3Qgcj10LmpvaW4oIi8iKTtsZXQgcz1pcFtyXTtpZighcyl7cz1ZaDtmb3IoY29uc3QgZSBvZiB0KXtzPU1oW2VdKHMpfWlwW3JdPXN9cmV0dXJuIHN9Sm8ucGFyc2U9Wmg7Sm8ucGFyc2VFeHByZXNzaW9uPWVwO0pvLnRva1R5cGVzPXJwOyhmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTtlLnBhcnNlPWUucGFyc2VyPXZvaWQgMDt2YXIgdD1SO3ZhciByPXQuX19pbXBvcnREZWZhdWx0KHFvKTtlLnBhcnNlcj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gSm99Y2F0Y2goZSl7cmV0dXJuIGhyfX0oKTtmdW5jdGlvbiBzKHQscyl7dmFyIGk9ci5kZWZhdWx0KHMpO2kucGx1Z2lucy5wdXNoKCJqc3giLCJmbG93Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKHQsaSl9ZS5wYXJzZT1zfSkoVm8pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh6bywiX19lc01vZHVsZSIse3ZhbHVlOnRydWV9KTt2YXIgYXA9em8ucGFyc2U9dm9pZCAwO3ZhciBvcD1SO3ZhciBscD1Wbzt2YXIgdXA9b3AuX19pbXBvcnREZWZhdWx0KHFvKTtmdW5jdGlvbiBjcChlLHQpe3ZhciByPXVwLmRlZmF1bHQodCk7ci5wbHVnaW5zLnB1c2goInR5cGVzY3JpcHQiKTtyZXR1cm4gbHAucGFyc2VyLnBhcnNlKGUscil9YXA9em8ucGFyc2U9Y3A7ZnVuY3Rpb24gaHAoZSx0KXtyZXR1cm4gYy5wcmludChlLE9iamVjdC5hc3NpZ24oe30sdCx7cGFyc2VyOntwYXJzZTphcH0sdGFiV2lkdGg6Mix3cmFwQ29sdW1uOjAscXVvdGU6InNpbmdsZSJ9KSl9ZnVuY3Rpb24gcHAoZSx0LHIpe2NvbnN0IHM9ZT9bdC5zdWJzdHIoMCxlLnN0YXJ0KSx0LnN1YnN0cihlLmVuZCx0Lmxlbmd0aCldLmpvaW4oIiIpLnRyaW0oKToiIjtpZihzKXt0cnl7Y29uc3R7dGVtcGxhdGU6ZSxqYXZhc2NyaXB0OnQsY3NzOml9PXIocykub3V0cHV0O3JldHVybltlLHQsaV0uc29tZShtYSl9Y2F0Y2goZSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gZmFsc2V9ZnVuY3Rpb24gZnAoZSl7cmV0dXJuIWV8fCFlLmxlbmd0aH1mdW5jdGlvbiBkcChlKXtyZXR1cm4hZXx8ZnAoZS5tYXBwaW5ncyl9dmFyIG1wPXtBZ2dyZWdhdGVFcnJvcjpmYWxzZSxBcnJheTpmYWxzZSxBcnJheUJ1ZmZlcjpmYWxzZSxBdG9taWNzOmZhbHNlLEJpZ0ludDpmYWxzZSxCaWdJbnQ2NEFycmF5OmZhbHNlLEJpZ1VpbnQ2NEFycmF5OmZhbHNlLEJvb2xlYW46ZmFsc2UsY29uc3RydWN0b3I6ZmFsc2UsRGF0YVZpZXc6ZmFsc2UsRGF0ZTpmYWxzZSxkZWNvZGVVUkk6ZmFsc2UsZGVjb2RlVVJJQ29tcG9uZW50OmZhbHNlLGVuY29kZVVSSTpmYWxzZSxlbmNvZGVVUklDb21wb25lbnQ6ZmFsc2UsRXJyb3I6ZmFsc2UsZXNjYXBlOmZhbHNlLGV2YWw6ZmFsc2UsRXZhbEVycm9yOmZhbHNlLEZpbmFsaXphdGlvblJlZ2lzdHJ5OmZhbHNlLEZsb2F0MzJBcnJheTpmYWxzZSxGbG9hdDY0QXJyYXk6ZmFsc2UsRnVuY3Rpb246ZmFsc2UsZ2xvYmFsVGhpczpmYWxzZSxoYXNPd25Qcm9wZXJ0eTpmYWxzZSxJbmZpbml0eTpmYWxzZSxJbnQxNkFycmF5OmZhbHNlLEludDMyQXJyYXk6ZmFsc2UsSW50OEFycmF5OmZhbHNlLGlzRmluaXRlOmZhbHNlLGlzTmFOOmZhbHNlLGlzUHJvdG90eXBlT2Y6ZmFsc2UsSlNPTjpmYWxzZSxNYXA6ZmFsc2UsTWF0aDpmYWxzZSxOYU46ZmFsc2UsTnVtYmVyOmZhbHNlLE9iamVjdDpmYWxzZSxwYXJzZUZsb2F0OmZhbHNlLHBhcnNlSW50OmZhbHNlLFByb21pc2U6ZmFsc2UscHJvcGVydHlJc0VudW1lcmFibGU6ZmFsc2UsUHJveHk6ZmFsc2UsUmFuZ2VFcnJvcjpmYWxzZSxSZWZlcmVuY2VFcnJvcjpmYWxzZSxSZWZsZWN0OmZhbHNlLFJlZ0V4cDpmYWxzZSxTZXQ6ZmFsc2UsU2hhcmVkQXJyYXlCdWZmZXI6ZmFsc2UsU3RyaW5nOmZhbHNlLFN5bWJvbDpmYWxzZSxTeW50YXhFcnJvcjpmYWxzZSx0b0xvY2FsZVN0cmluZzpmYWxzZSx0b1N0cmluZzpmYWxzZSxUeXBlRXJyb3I6ZmFsc2UsVWludDE2QXJyYXk6ZmFsc2UsVWludDMyQXJyYXk6ZmFsc2UsVWludDhBcnJheTpmYWxzZSxVaW50OENsYW1wZWRBcnJheTpmYWxzZSx1bmRlZmluZWQ6ZmFsc2UsdW5lc2NhcGU6ZmFsc2UsVVJJRXJyb3I6ZmFsc2UsdmFsdWVPZjpmYWxzZSxXZWFrTWFwOmZhbHNlLFdlYWtSZWY6ZmFsc2UsV2Vha1NldDpmYWxzZX07dmFyIHlwPXtBcnJheTpmYWxzZSxCb29sZWFuOmZhbHNlLGNvbnN0cnVjdG9yOmZhbHNlLERhdGU6ZmFsc2UsZGVjb2RlVVJJOmZhbHNlLGRlY29kZVVSSUNvbXBvbmVudDpmYWxzZSxlbmNvZGVVUkk6ZmFsc2UsZW5jb2RlVVJJQ29tcG9uZW50OmZhbHNlLEVycm9yOmZhbHNlLGVzY2FwZTpmYWxzZSxldmFsOmZhbHNlLEV2YWxFcnJvcjpmYWxzZSxGdW5jdGlvbjpmYWxzZSxoYXNPd25Qcm9wZXJ0eTpmYWxzZSxJbmZpbml0eTpmYWxzZSxpc0Zpbml0ZTpmYWxzZSxpc05hTjpmYWxzZSxpc1Byb3RvdHlwZU9mOmZhbHNlLEpTT046ZmFsc2UsTWF0aDpmYWxzZSxOYU46ZmFsc2UsTnVtYmVyOmZhbHNlLE9iamVjdDpmYWxzZSxwYXJzZUZsb2F0OmZhbHNlLHBhcnNlSW50OmZhbHNlLHByb3BlcnR5SXNFbnVtZXJhYmxlOmZhbHNlLFJhbmdlRXJyb3I6ZmFsc2UsUmVmZXJlbmNlRXJyb3I6ZmFsc2UsUmVnRXhwOmZhbHNlLFN0cmluZzpmYWxzZSxTeW50YXhFcnJvcjpmYWxzZSx0b0xvY2FsZVN0cmluZzpmYWxzZSx0b1N0cmluZzpmYWxzZSxUeXBlRXJyb3I6ZmFsc2UsdW5kZWZpbmVkOmZhbHNlLHVuZXNjYXBlOmZhbHNlLFVSSUVycm9yOmZhbHNlLHZhbHVlT2Y6ZmFsc2V9O3ZhciBncD17QXJyYXk6ZmFsc2UsQXJyYXlCdWZmZXI6ZmFsc2UsQm9vbGVhbjpmYWxzZSxjb25zdHJ1Y3RvcjpmYWxzZSxEYXRhVmlldzpmYWxzZSxEYXRlOmZhbHNlLGRlY29kZVVSSTpmYWxzZSxkZWNvZGVVUklDb21wb25lbnQ6ZmFsc2UsZW5jb2RlVVJJOmZhbHNlLGVuY29kZVVSSUNvbXBvbmVudDpmYWxzZSxFcnJvcjpmYWxzZSxlc2NhcGU6ZmFsc2UsZXZhbDpmYWxzZSxFdmFsRXJyb3I6ZmFsc2UsRmxvYXQzMkFycmF5OmZhbHNlLEZsb2F0NjRBcnJheTpmYWxzZSxGdW5jdGlvbjpmYWxzZSxoYXNPd25Qcm9wZXJ0eTpmYWxzZSxJbmZpbml0eTpmYWxzZSxJbnQxNkFycmF5OmZhbHNlLEludDMyQXJyYXk6ZmFsc2UsSW50OEFycmF5OmZhbHNlLGlzRmluaXRlOmZhbHNlLGlzTmFOOmZhbHNlLGlzUHJvdG90eXBlT2Y6ZmFsc2UsSlNPTjpmYWxzZSxNYXA6ZmFsc2UsTWF0aDpmYWxzZSxOYU46ZmFsc2UsTnVtYmVyOmZhbHNlLE9iamVjdDpmYWxzZSxwYXJzZUZsb2F0OmZhbHNlLHBhcnNlSW50OmZhbHNlLFByb21pc2U6ZmFsc2UscHJvcGVydHlJc0VudW1lcmFibGU6ZmFsc2UsUHJveHk6ZmFsc2UsUmFuZ2VFcnJvcjpmYWxzZSxSZWZlcmVuY2VFcnJvcjpmYWxzZSxSZWZsZWN0OmZhbHNlLFJlZ0V4cDpmYWxzZSxTZXQ6ZmFsc2UsU3RyaW5nOmZhbHNlLFN5bWJvbDpmYWxzZSxTeW50YXhFcnJvcjpmYWxzZSx0b0xvY2FsZVN0cmluZzpmYWxzZSx0b1N0cmluZzpmYWxzZSxUeXBlRXJyb3I6ZmFsc2UsVWludDE2QXJyYXk6ZmFsc2UsVWludDMyQXJyYXk6ZmFsc2UsVWludDhBcnJheTpmYWxzZSxVaW50OENsYW1wZWRBcnJheTpmYWxzZSx1bmRlZmluZWQ6ZmFsc2UsdW5lc2NhcGU6ZmFsc2UsVVJJRXJyb3I6ZmFsc2UsdmFsdWVPZjpmYWxzZSxXZWFrTWFwOmZhbHNlLFdlYWtTZXQ6ZmFsc2V9O3ZhciB4cD17QXJyYXk6ZmFsc2UsQXJyYXlCdWZmZXI6ZmFsc2UsQXRvbWljczpmYWxzZSxCb29sZWFuOmZhbHNlLGNvbnN0cnVjdG9yOmZhbHNlLERhdGFWaWV3OmZhbHNlLERhdGU6ZmFsc2UsZGVjb2RlVVJJOmZhbHNlLGRlY29kZVVSSUNvbXBvbmVudDpmYWxzZSxlbmNvZGVVUkk6ZmFsc2UsZW5jb2RlVVJJQ29tcG9uZW50OmZhbHNlLEVycm9yOmZhbHNlLGVzY2FwZTpmYWxzZSxldmFsOmZhbHNlLEV2YWxFcnJvcjpmYWxzZSxGbG9hdDMyQXJyYXk6ZmFsc2UsRmxvYXQ2NEFycmF5OmZhbHNlLEZ1bmN0aW9uOmZhbHNlLGhhc093blByb3BlcnR5OmZhbHNlLEluZmluaXR5OmZhbHNlLEludDE2QXJyYXk6ZmFsc2UsSW50MzJBcnJheTpmYWxzZSxJbnQ4QXJyYXk6ZmFsc2UsaXNGaW5pdGU6ZmFsc2UsaXNOYU46ZmFsc2UsaXNQcm90b3R5cGVPZjpmYWxzZSxKU09OOmZhbHNlLE1hcDpmYWxzZSxNYXRoOmZhbHNlLE5hTjpmYWxzZSxOdW1iZXI6ZmFsc2UsT2JqZWN0OmZhbHNlLHBhcnNlRmxvYXQ6ZmFsc2UscGFyc2VJbnQ6ZmFsc2UsUHJvbWlzZTpmYWxzZSxwcm9wZXJ0eUlzRW51bWVyYWJsZTpmYWxzZSxQcm94eTpmYWxzZSxSYW5nZUVycm9yOmZhbHNlLFJlZmVyZW5jZUVycm9yOmZhbHNlLFJlZmxlY3Q6ZmFsc2UsUmVnRXhwOmZhbHNlLFNldDpmYWxzZSxTaGFyZWRBcnJheUJ1ZmZlcjpmYWxzZSxTdHJpbmc6ZmFsc2UsU3ltYm9sOmZhbHNlLFN5bnRheEVycm9yOmZhbHNlLHRvTG9jYWxlU3RyaW5nOmZhbHNlLHRvU3RyaW5nOmZhbHNlLFR5cGVFcnJvcjpmYWxzZSxVaW50MTZBcnJheTpmYWxzZSxVaW50MzJBcnJheTpmYWxzZSxVaW50OEFycmF5OmZhbHNlLFVpbnQ4Q2xhbXBlZEFycmF5OmZhbHNlLHVuZGVmaW5lZDpmYWxzZSx1bmVzY2FwZTpmYWxzZSxVUklFcnJvcjpmYWxzZSx2YWx1ZU9mOmZhbHNlLFdlYWtNYXA6ZmFsc2UsV2Vha1NldDpmYWxzZX07dmFyIHZwPXtBcnJheTpmYWxzZSxBcnJheUJ1ZmZlcjpmYWxzZSxBdG9taWNzOmZhbHNlLEJpZ0ludDpmYWxzZSxCaWdJbnQ2NEFycmF5OmZhbHNlLEJpZ1VpbnQ2NEFycmF5OmZhbHNlLEJvb2xlYW46ZmFsc2UsY29uc3RydWN0b3I6ZmFsc2UsRGF0YVZpZXc6ZmFsc2UsRGF0ZTpmYWxzZSxkZWNvZGVVUkk6ZmFsc2UsZGVjb2RlVVJJQ29tcG9uZW50OmZhbHNlLGVuY29kZVVSSTpmYWxzZSxlbmNvZGVVUklDb21wb25lbnQ6ZmFsc2UsRXJyb3I6ZmFsc2UsZXNjYXBlOmZhbHNlLGV2YWw6ZmFsc2UsRXZhbEVycm9yOmZhbHNlLEZsb2F0MzJBcnJheTpmYWxzZSxGbG9hdDY0QXJyYXk6ZmFsc2UsRnVuY3Rpb246ZmFsc2UsZ2xvYmFsVGhpczpmYWxzZSxoYXNPd25Qcm9wZXJ0eTpmYWxzZSxJbmZpbml0eTpmYWxzZSxJbnQxNkFycmF5OmZhbHNlLEludDMyQXJyYXk6ZmFsc2UsSW50OEFycmF5OmZhbHNlLGlzRmluaXRlOmZhbHNlLGlzTmFOOmZhbHNlLGlzUHJvdG90eXBlT2Y6ZmFsc2UsSlNPTjpmYWxzZSxNYXA6ZmFsc2UsTWF0aDpmYWxzZSxOYU46ZmFsc2UsTnVtYmVyOmZhbHNlLE9iamVjdDpmYWxzZSxwYXJzZUZsb2F0OmZhbHNlLHBhcnNlSW50OmZhbHNlLFByb21pc2U6ZmFsc2UscHJvcGVydHlJc0VudW1lcmFibGU6ZmFsc2UsUHJveHk6ZmFsc2UsUmFuZ2VFcnJvcjpmYWxzZSxSZWZlcmVuY2VFcnJvcjpmYWxzZSxSZWZsZWN0OmZhbHNlLFJlZ0V4cDpmYWxzZSxTZXQ6ZmFsc2UsU2hhcmVkQXJyYXlCdWZmZXI6ZmFsc2UsU3RyaW5nOmZhbHNlLFN5bWJvbDpmYWxzZSxTeW50YXhFcnJvcjpmYWxzZSx0b0xvY2FsZVN0cmluZzpmYWxzZSx0b1N0cmluZzpmYWxzZSxUeXBlRXJyb3I6ZmFsc2UsVWludDE2QXJyYXk6ZmFsc2UsVWludDMyQXJyYXk6ZmFsc2UsVWludDhBcnJheTpmYWxzZSxVaW50OENsYW1wZWRBcnJheTpmYWxzZSx1bmRlZmluZWQ6ZmFsc2UsdW5lc2NhcGU6ZmFsc2UsVVJJRXJyb3I6ZmFsc2UsdmFsdWVPZjpmYWxzZSxXZWFrTWFwOmZhbHNlLFdlYWtTZXQ6ZmFsc2V9O3ZhciBicD17QWdncmVnYXRlRXJyb3I6ZmFsc2UsQXJyYXk6ZmFsc2UsQXJyYXlCdWZmZXI6ZmFsc2UsQXRvbWljczpmYWxzZSxCaWdJbnQ6ZmFsc2UsQmlnSW50NjRBcnJheTpmYWxzZSxCaWdVaW50NjRBcnJheTpmYWxzZSxCb29sZWFuOmZhbHNlLGNvbnN0cnVjdG9yOmZhbHNlLERhdGFWaWV3OmZhbHNlLERhdGU6ZmFsc2UsZGVjb2RlVVJJOmZhbHNlLGRlY29kZVVSSUNvbXBvbmVudDpmYWxzZSxlbmNvZGVVUkk6ZmFsc2UsZW5jb2RlVVJJQ29tcG9uZW50OmZhbHNlLEVycm9yOmZhbHNlLGVzY2FwZTpmYWxzZSxldmFsOmZhbHNlLEV2YWxFcnJvcjpmYWxzZSxGaW5hbGl6YXRpb25SZWdpc3RyeTpmYWxzZSxGbG9hdDMyQXJyYXk6ZmFsc2UsRmxvYXQ2NEFycmF5OmZhbHNlLEZ1bmN0aW9uOmZhbHNlLGdsb2JhbFRoaXM6ZmFsc2UsaGFzT3duUHJvcGVydHk6ZmFsc2UsSW5maW5pdHk6ZmFsc2UsSW50MTZBcnJheTpmYWxzZSxJbnQzMkFycmF5OmZhbHNlLEludDhBcnJheTpmYWxzZSxpc0Zpbml0ZTpmYWxzZSxpc05hTjpmYWxzZSxpc1Byb3RvdHlwZU9mOmZhbHNlLEpTT046ZmFsc2UsTWFwOmZhbHNlLE1hdGg6ZmFsc2UsTmFOOmZhbHNlLE51bWJlcjpmYWxzZSxPYmplY3Q6ZmFsc2UscGFyc2VGbG9hdDpmYWxzZSxwYXJzZUludDpmYWxzZSxQcm9taXNlOmZhbHNlLHByb3BlcnR5SXNFbnVtZXJhYmxlOmZhbHNlLFByb3h5OmZhbHNlLFJhbmdlRXJyb3I6ZmFsc2UsUmVmZXJlbmNlRXJyb3I6ZmFsc2UsUmVmbGVjdDpmYWxzZSxSZWdFeHA6ZmFsc2UsU2V0OmZhbHNlLFNoYXJlZEFycmF5QnVmZmVyOmZhbHNlLFN0cmluZzpmYWxzZSxTeW1ib2w6ZmFsc2UsU3ludGF4RXJyb3I6ZmFsc2UsdG9Mb2NhbGVTdHJpbmc6ZmFsc2UsdG9TdHJpbmc6ZmFsc2UsVHlwZUVycm9yOmZhbHNlLFVpbnQxNkFycmF5OmZhbHNlLFVpbnQzMkFycmF5OmZhbHNlLFVpbnQ4QXJyYXk6ZmFsc2UsVWludDhDbGFtcGVkQXJyYXk6ZmFsc2UsdW5kZWZpbmVkOmZhbHNlLHVuZXNjYXBlOmZhbHNlLFVSSUVycm9yOmZhbHNlLHZhbHVlT2Y6ZmFsc2UsV2Vha01hcDpmYWxzZSxXZWFrUmVmOmZhbHNlLFdlYWtTZXQ6ZmFsc2V9O3ZhciBFcD17QWJvcnRDb250cm9sbGVyOmZhbHNlLEFib3J0U2lnbmFsOmZhbHNlLGFkZEV2ZW50TGlzdGVuZXI6ZmFsc2UsYWxlcnQ6ZmFsc2UsQW5hbHlzZXJOb2RlOmZhbHNlLEFuaW1hdGlvbjpmYWxzZSxBbmltYXRpb25FZmZlY3RSZWFkT25seTpmYWxzZSxBbmltYXRpb25FZmZlY3RUaW1pbmc6ZmFsc2UsQW5pbWF0aW9uRWZmZWN0VGltaW5nUmVhZE9ubHk6ZmFsc2UsQW5pbWF0aW9uRXZlbnQ6ZmFsc2UsQW5pbWF0aW9uUGxheWJhY2tFdmVudDpmYWxzZSxBbmltYXRpb25UaW1lbGluZTpmYWxzZSxhcHBsaWNhdGlvbkNhY2hlOmZhbHNlLEFwcGxpY2F0aW9uQ2FjaGU6ZmFsc2UsQXBwbGljYXRpb25DYWNoZUVycm9yRXZlbnQ6ZmFsc2UsYXRvYjpmYWxzZSxBdHRyOmZhbHNlLEF1ZGlvOmZhbHNlLEF1ZGlvQnVmZmVyOmZhbHNlLEF1ZGlvQnVmZmVyU291cmNlTm9kZTpmYWxzZSxBdWRpb0NvbnRleHQ6ZmFsc2UsQXVkaW9EZXN0aW5hdGlvbk5vZGU6ZmFsc2UsQXVkaW9MaXN0ZW5lcjpmYWxzZSxBdWRpb05vZGU6ZmFsc2UsQXVkaW9QYXJhbTpmYWxzZSxBdWRpb1Byb2Nlc3NpbmdFdmVudDpmYWxzZSxBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGU6ZmFsc2UsIkF1ZGlvV29ya2xldEdsb2JhbFNjb3BlICI6ZmFsc2UsQXVkaW9Xb3JrbGV0Tm9kZTpmYWxzZSxBdWRpb1dvcmtsZXRQcm9jZXNzb3I6ZmFsc2UsQmFyUHJvcDpmYWxzZSxCYXNlQXVkaW9Db250ZXh0OmZhbHNlLEJhdHRlcnlNYW5hZ2VyOmZhbHNlLEJlZm9yZVVubG9hZEV2ZW50OmZhbHNlLEJpcXVhZEZpbHRlck5vZGU6ZmFsc2UsQmxvYjpmYWxzZSxCbG9iRXZlbnQ6ZmFsc2UsYmx1cjpmYWxzZSxCcm9hZGNhc3RDaGFubmVsOmZhbHNlLGJ0b2E6ZmFsc2UsQnVkZ2V0U2VydmljZTpmYWxzZSxCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5OmZhbHNlLENhY2hlOmZhbHNlLGNhY2hlczpmYWxzZSxDYWNoZVN0b3JhZ2U6ZmFsc2UsY2FuY2VsQW5pbWF0aW9uRnJhbWU6ZmFsc2UsY2FuY2VsSWRsZUNhbGxiYWNrOmZhbHNlLENhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrOmZhbHNlLENhbnZhc0dyYWRpZW50OmZhbHNlLENhbnZhc1BhdHRlcm46ZmFsc2UsQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOmZhbHNlLENoYW5uZWxNZXJnZXJOb2RlOmZhbHNlLENoYW5uZWxTcGxpdHRlck5vZGU6ZmFsc2UsQ2hhcmFjdGVyRGF0YTpmYWxzZSxjbGVhckludGVydmFsOmZhbHNlLGNsZWFyVGltZW91dDpmYWxzZSxjbGllbnRJbmZvcm1hdGlvbjpmYWxzZSxDbGlwYm9hcmRFdmVudDpmYWxzZSxjbG9zZTpmYWxzZSxjbG9zZWQ6ZmFsc2UsQ2xvc2VFdmVudDpmYWxzZSxDb21tZW50OmZhbHNlLENvbXBvc2l0aW9uRXZlbnQ6ZmFsc2UsY29uZmlybTpmYWxzZSxjb25zb2xlOmZhbHNlLENvbnN0YW50U291cmNlTm9kZTpmYWxzZSxDb252b2x2ZXJOb2RlOmZhbHNlLENvdW50UXVldWluZ1N0cmF0ZWd5OmZhbHNlLGNyZWF0ZUltYWdlQml0bWFwOmZhbHNlLENyZWRlbnRpYWw6ZmFsc2UsQ3JlZGVudGlhbHNDb250YWluZXI6ZmFsc2UsY3J5cHRvOmZhbHNlLENyeXB0bzpmYWxzZSxDcnlwdG9LZXk6ZmFsc2UsQ1NTOmZhbHNlLENTU0NvbmRpdGlvblJ1bGU6ZmFsc2UsQ1NTRm9udEZhY2VSdWxlOmZhbHNlLENTU0dyb3VwaW5nUnVsZTpmYWxzZSxDU1NJbXBvcnRSdWxlOmZhbHNlLENTU0tleWZyYW1lUnVsZTpmYWxzZSxDU1NLZXlmcmFtZXNSdWxlOmZhbHNlLENTU01hdHJpeENvbXBvbmVudDpmYWxzZSxDU1NNZWRpYVJ1bGU6ZmFsc2UsQ1NTTmFtZXNwYWNlUnVsZTpmYWxzZSxDU1NQYWdlUnVsZTpmYWxzZSxDU1NQZXJzcGVjdGl2ZTpmYWxzZSxDU1NSb3RhdGU6ZmFsc2UsQ1NTUnVsZTpmYWxzZSxDU1NSdWxlTGlzdDpmYWxzZSxDU1NTY2FsZTpmYWxzZSxDU1NTa2V3OmZhbHNlLENTU1NrZXdYOmZhbHNlLENTU1NrZXdZOmZhbHNlLENTU1N0eWxlRGVjbGFyYXRpb246ZmFsc2UsQ1NTU3R5bGVSdWxlOmZhbHNlLENTU1N0eWxlU2hlZXQ6ZmFsc2UsQ1NTU3VwcG9ydHNSdWxlOmZhbHNlLENTU1RyYW5zZm9ybVZhbHVlOmZhbHNlLENTU1RyYW5zbGF0ZTpmYWxzZSxDdXN0b21FbGVtZW50UmVnaXN0cnk6ZmFsc2UsY3VzdG9tRWxlbWVudHM6ZmFsc2UsQ3VzdG9tRXZlbnQ6ZmFsc2UsRGF0YVRyYW5zZmVyOmZhbHNlLERhdGFUcmFuc2Zlckl0ZW06ZmFsc2UsRGF0YVRyYW5zZmVySXRlbUxpc3Q6ZmFsc2UsZGVmYXVsdHN0YXR1czpmYWxzZSxkZWZhdWx0U3RhdHVzOmZhbHNlLERlbGF5Tm9kZTpmYWxzZSxEZXZpY2VNb3Rpb25FdmVudDpmYWxzZSxEZXZpY2VPcmllbnRhdGlvbkV2ZW50OmZhbHNlLGRldmljZVBpeGVsUmF0aW86ZmFsc2UsZGlzcGF0Y2hFdmVudDpmYWxzZSxkb2N1bWVudDpmYWxzZSxEb2N1bWVudDpmYWxzZSxEb2N1bWVudEZyYWdtZW50OmZhbHNlLERvY3VtZW50VHlwZTpmYWxzZSxET01FcnJvcjpmYWxzZSxET01FeGNlcHRpb246ZmFsc2UsRE9NSW1wbGVtZW50YXRpb246ZmFsc2UsRE9NTWF0cml4OmZhbHNlLERPTU1hdHJpeFJlYWRPbmx5OmZhbHNlLERPTVBhcnNlcjpmYWxzZSxET01Qb2ludDpmYWxzZSxET01Qb2ludFJlYWRPbmx5OmZhbHNlLERPTVF1YWQ6ZmFsc2UsRE9NUmVjdDpmYWxzZSxET01SZWN0TGlzdDpmYWxzZSxET01SZWN0UmVhZE9ubHk6ZmFsc2UsRE9NU3RyaW5nTGlzdDpmYWxzZSxET01TdHJpbmdNYXA6ZmFsc2UsRE9NVG9rZW5MaXN0OmZhbHNlLERyYWdFdmVudDpmYWxzZSxEeW5hbWljc0NvbXByZXNzb3JOb2RlOmZhbHNlLEVsZW1lbnQ6ZmFsc2UsRXJyb3JFdmVudDpmYWxzZSxldmVudDpmYWxzZSxFdmVudDpmYWxzZSxFdmVudFNvdXJjZTpmYWxzZSxFdmVudFRhcmdldDpmYWxzZSxleHRlcm5hbDpmYWxzZSxmZXRjaDpmYWxzZSxGaWxlOmZhbHNlLEZpbGVMaXN0OmZhbHNlLEZpbGVSZWFkZXI6ZmFsc2UsZmluZDpmYWxzZSxmb2N1czpmYWxzZSxGb2N1c0V2ZW50OmZhbHNlLEZvbnRGYWNlOmZhbHNlLEZvbnRGYWNlU2V0TG9hZEV2ZW50OmZhbHNlLEZvcm1EYXRhOmZhbHNlLGZyYW1lRWxlbWVudDpmYWxzZSxmcmFtZXM6ZmFsc2UsR2Fpbk5vZGU6ZmFsc2UsR2FtZXBhZDpmYWxzZSxHYW1lcGFkQnV0dG9uOmZhbHNlLEdhbWVwYWRFdmVudDpmYWxzZSxnZXRDb21wdXRlZFN0eWxlOmZhbHNlLGdldFNlbGVjdGlvbjpmYWxzZSxIYXNoQ2hhbmdlRXZlbnQ6ZmFsc2UsSGVhZGVyczpmYWxzZSxoaXN0b3J5OmZhbHNlLEhpc3Rvcnk6ZmFsc2UsSFRNTEFsbENvbGxlY3Rpb246ZmFsc2UsSFRNTEFuY2hvckVsZW1lbnQ6ZmFsc2UsSFRNTEFyZWFFbGVtZW50OmZhbHNlLEhUTUxBdWRpb0VsZW1lbnQ6ZmFsc2UsSFRNTEJhc2VFbGVtZW50OmZhbHNlLEhUTUxCb2R5RWxlbWVudDpmYWxzZSxIVE1MQlJFbGVtZW50OmZhbHNlLEhUTUxCdXR0b25FbGVtZW50OmZhbHNlLEhUTUxDYW52YXNFbGVtZW50OmZhbHNlLEhUTUxDb2xsZWN0aW9uOmZhbHNlLEhUTUxDb250ZW50RWxlbWVudDpmYWxzZSxIVE1MRGF0YUVsZW1lbnQ6ZmFsc2UsSFRNTERhdGFMaXN0RWxlbWVudDpmYWxzZSxIVE1MRGV0YWlsc0VsZW1lbnQ6ZmFsc2UsSFRNTERpYWxvZ0VsZW1lbnQ6ZmFsc2UsSFRNTERpcmVjdG9yeUVsZW1lbnQ6ZmFsc2UsSFRNTERpdkVsZW1lbnQ6ZmFsc2UsSFRNTERMaXN0RWxlbWVudDpmYWxzZSxIVE1MRG9jdW1lbnQ6ZmFsc2UsSFRNTEVsZW1lbnQ6ZmFsc2UsSFRNTEVtYmVkRWxlbWVudDpmYWxzZSxIVE1MRmllbGRTZXRFbGVtZW50OmZhbHNlLEhUTUxGb250RWxlbWVudDpmYWxzZSxIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjpmYWxzZSxIVE1MRm9ybUVsZW1lbnQ6ZmFsc2UsSFRNTEZyYW1lRWxlbWVudDpmYWxzZSxIVE1MRnJhbWVTZXRFbGVtZW50OmZhbHNlLEhUTUxIZWFkRWxlbWVudDpmYWxzZSxIVE1MSGVhZGluZ0VsZW1lbnQ6ZmFsc2UsSFRNTEhSRWxlbWVudDpmYWxzZSxIVE1MSHRtbEVsZW1lbnQ6ZmFsc2UsSFRNTElGcmFtZUVsZW1lbnQ6ZmFsc2UsSFRNTEltYWdlRWxlbWVudDpmYWxzZSxIVE1MSW5wdXRFbGVtZW50OmZhbHNlLEhUTUxMYWJlbEVsZW1lbnQ6ZmFsc2UsSFRNTExlZ2VuZEVsZW1lbnQ6ZmFsc2UsSFRNTExJRWxlbWVudDpmYWxzZSxIVE1MTGlua0VsZW1lbnQ6ZmFsc2UsSFRNTE1hcEVsZW1lbnQ6ZmFsc2UsSFRNTE1hcnF1ZWVFbGVtZW50OmZhbHNlLEhUTUxNZWRpYUVsZW1lbnQ6ZmFsc2UsSFRNTE1lbnVFbGVtZW50OmZhbHNlLEhUTUxNZXRhRWxlbWVudDpmYWxzZSxIVE1MTWV0ZXJFbGVtZW50OmZhbHNlLEhUTUxNb2RFbGVtZW50OmZhbHNlLEhUTUxPYmplY3RFbGVtZW50OmZhbHNlLEhUTUxPTGlzdEVsZW1lbnQ6ZmFsc2UsSFRNTE9wdEdyb3VwRWxlbWVudDpmYWxzZSxIVE1MT3B0aW9uRWxlbWVudDpmYWxzZSxIVE1MT3B0aW9uc0NvbGxlY3Rpb246ZmFsc2UsSFRNTE91dHB1dEVsZW1lbnQ6ZmFsc2UsSFRNTFBhcmFncmFwaEVsZW1lbnQ6ZmFsc2UsSFRNTFBhcmFtRWxlbWVudDpmYWxzZSxIVE1MUGljdHVyZUVsZW1lbnQ6ZmFsc2UsSFRNTFByZUVsZW1lbnQ6ZmFsc2UsSFRNTFByb2dyZXNzRWxlbWVudDpmYWxzZSxIVE1MUXVvdGVFbGVtZW50OmZhbHNlLEhUTUxTY3JpcHRFbGVtZW50OmZhbHNlLEhUTUxTZWxlY3RFbGVtZW50OmZhbHNlLEhUTUxTaGFkb3dFbGVtZW50OmZhbHNlLEhUTUxTbG90RWxlbWVudDpmYWxzZSxIVE1MU291cmNlRWxlbWVudDpmYWxzZSxIVE1MU3BhbkVsZW1lbnQ6ZmFsc2UsSFRNTFN0eWxlRWxlbWVudDpmYWxzZSxIVE1MVGFibGVDYXB0aW9uRWxlbWVudDpmYWxzZSxIVE1MVGFibGVDZWxsRWxlbWVudDpmYWxzZSxIVE1MVGFibGVDb2xFbGVtZW50OmZhbHNlLEhUTUxUYWJsZUVsZW1lbnQ6ZmFsc2UsSFRNTFRhYmxlUm93RWxlbWVudDpmYWxzZSxIVE1MVGFibGVTZWN0aW9uRWxlbWVudDpmYWxzZSxIVE1MVGVtcGxhdGVFbGVtZW50OmZhbHNlLEhUTUxUZXh0QXJlYUVsZW1lbnQ6ZmFsc2UsSFRNTFRpbWVFbGVtZW50OmZhbHNlLEhUTUxUaXRsZUVsZW1lbnQ6ZmFsc2UsSFRNTFRyYWNrRWxlbWVudDpmYWxzZSxIVE1MVUxpc3RFbGVtZW50OmZhbHNlLEhUTUxVbmtub3duRWxlbWVudDpmYWxzZSxIVE1MVmlkZW9FbGVtZW50OmZhbHNlLElEQkN1cnNvcjpmYWxzZSxJREJDdXJzb3JXaXRoVmFsdWU6ZmFsc2UsSURCRGF0YWJhc2U6ZmFsc2UsSURCRmFjdG9yeTpmYWxzZSxJREJJbmRleDpmYWxzZSxJREJLZXlSYW5nZTpmYWxzZSxJREJPYmplY3RTdG9yZTpmYWxzZSxJREJPcGVuREJSZXF1ZXN0OmZhbHNlLElEQlJlcXVlc3Q6ZmFsc2UsSURCVHJhbnNhY3Rpb246ZmFsc2UsSURCVmVyc2lvbkNoYW5nZUV2ZW50OmZhbHNlLElkbGVEZWFkbGluZTpmYWxzZSxJSVJGaWx0ZXJOb2RlOmZhbHNlLEltYWdlOmZhbHNlLEltYWdlQml0bWFwOmZhbHNlLEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDpmYWxzZSxJbWFnZUNhcHR1cmU6ZmFsc2UsSW1hZ2VEYXRhOmZhbHNlLGluZGV4ZWREQjpmYWxzZSxpbm5lckhlaWdodDpmYWxzZSxpbm5lcldpZHRoOmZhbHNlLElucHV0RXZlbnQ6ZmFsc2UsSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6ZmFsc2UsSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeTpmYWxzZSxJbnRsOmZhbHNlLGlzU2VjdXJlQ29udGV4dDpmYWxzZSxLZXlib2FyZEV2ZW50OmZhbHNlLEtleWZyYW1lRWZmZWN0OmZhbHNlLEtleWZyYW1lRWZmZWN0UmVhZE9ubHk6ZmFsc2UsbGVuZ3RoOmZhbHNlLGxvY2FsU3RvcmFnZTpmYWxzZSxsb2NhdGlvbjp0cnVlLExvY2F0aW9uOmZhbHNlLGxvY2F0aW9uYmFyOmZhbHNlLG1hdGNoTWVkaWE6ZmFsc2UsTWVkaWFEZXZpY2VJbmZvOmZhbHNlLE1lZGlhRGV2aWNlczpmYWxzZSxNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6ZmFsc2UsTWVkaWFFbmNyeXB0ZWRFdmVudDpmYWxzZSxNZWRpYUVycm9yOmZhbHNlLE1lZGlhS2V5TWVzc2FnZUV2ZW50OmZhbHNlLE1lZGlhS2V5U2Vzc2lvbjpmYWxzZSxNZWRpYUtleVN0YXR1c01hcDpmYWxzZSxNZWRpYUtleVN5c3RlbUFjY2VzczpmYWxzZSxNZWRpYUxpc3Q6ZmFsc2UsTWVkaWFRdWVyeUxpc3Q6ZmFsc2UsTWVkaWFRdWVyeUxpc3RFdmVudDpmYWxzZSxNZWRpYVJlY29yZGVyOmZhbHNlLE1lZGlhU2V0dGluZ3NSYW5nZTpmYWxzZSxNZWRpYVNvdXJjZTpmYWxzZSxNZWRpYVN0cmVhbTpmYWxzZSxNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlOmZhbHNlLE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2VOb2RlOmZhbHNlLE1lZGlhU3RyZWFtRXZlbnQ6ZmFsc2UsTWVkaWFTdHJlYW1UcmFjazpmYWxzZSxNZWRpYVN0cmVhbVRyYWNrRXZlbnQ6ZmFsc2UsbWVudWJhcjpmYWxzZSxNZXNzYWdlQ2hhbm5lbDpmYWxzZSxNZXNzYWdlRXZlbnQ6ZmFsc2UsTWVzc2FnZVBvcnQ6ZmFsc2UsTUlESUFjY2VzczpmYWxzZSxNSURJQ29ubmVjdGlvbkV2ZW50OmZhbHNlLE1JRElJbnB1dDpmYWxzZSxNSURJSW5wdXRNYXA6ZmFsc2UsTUlESU1lc3NhZ2VFdmVudDpmYWxzZSxNSURJT3V0cHV0OmZhbHNlLE1JRElPdXRwdXRNYXA6ZmFsc2UsTUlESVBvcnQ6ZmFsc2UsTWltZVR5cGU6ZmFsc2UsTWltZVR5cGVBcnJheTpmYWxzZSxNb3VzZUV2ZW50OmZhbHNlLG1vdmVCeTpmYWxzZSxtb3ZlVG86ZmFsc2UsTXV0YXRpb25FdmVudDpmYWxzZSxNdXRhdGlvbk9ic2VydmVyOmZhbHNlLE11dGF0aW9uUmVjb3JkOmZhbHNlLG5hbWU6ZmFsc2UsTmFtZWROb2RlTWFwOmZhbHNlLE5hdmlnYXRpb25QcmVsb2FkTWFuYWdlcjpmYWxzZSxuYXZpZ2F0b3I6ZmFsc2UsTmF2aWdhdG9yOmZhbHNlLE5ldHdvcmtJbmZvcm1hdGlvbjpmYWxzZSxOb2RlOmZhbHNlLE5vZGVGaWx0ZXI6ZmFsc2UsTm9kZUl0ZXJhdG9yOmZhbHNlLE5vZGVMaXN0OmZhbHNlLE5vdGlmaWNhdGlvbjpmYWxzZSxPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6ZmFsc2UsT2ZmbGluZUF1ZGlvQ29udGV4dDpmYWxzZSxvZmZzY3JlZW5CdWZmZXJpbmc6ZmFsc2UsT2Zmc2NyZWVuQ2FudmFzOnRydWUsT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOmZhbHNlLG9uYWJvcnQ6dHJ1ZSxvbmFmdGVycHJpbnQ6dHJ1ZSxvbmFuaW1hdGlvbmVuZDp0cnVlLG9uYW5pbWF0aW9uaXRlcmF0aW9uOnRydWUsb25hbmltYXRpb25zdGFydDp0cnVlLG9uYXBwaW5zdGFsbGVkOnRydWUsb25hdXhjbGljazp0cnVlLG9uYmVmb3JlaW5zdGFsbHByb21wdDp0cnVlLG9uYmVmb3JlcHJpbnQ6dHJ1ZSxvbmJlZm9yZXVubG9hZDp0cnVlLG9uYmx1cjp0cnVlLG9uY2FuY2VsOnRydWUsb25jYW5wbGF5OnRydWUsb25jYW5wbGF5dGhyb3VnaDp0cnVlLG9uY2hhbmdlOnRydWUsb25jbGljazp0cnVlLG9uY2xvc2U6dHJ1ZSxvbmNvbnRleHRtZW51OnRydWUsb25jdWVjaGFuZ2U6dHJ1ZSxvbmRibGNsaWNrOnRydWUsb25kZXZpY2Vtb3Rpb246dHJ1ZSxvbmRldmljZW9yaWVudGF0aW9uOnRydWUsb25kZXZpY2VvcmllbnRhdGlvbmFic29sdXRlOnRydWUsb25kcmFnOnRydWUsb25kcmFnZW5kOnRydWUsb25kcmFnZW50ZXI6dHJ1ZSxvbmRyYWdsZWF2ZTp0cnVlLG9uZHJhZ292ZXI6dHJ1ZSxvbmRyYWdzdGFydDp0cnVlLG9uZHJvcDp0cnVlLG9uZHVyYXRpb25jaGFuZ2U6dHJ1ZSxvbmVtcHRpZWQ6dHJ1ZSxvbmVuZGVkOnRydWUsb25lcnJvcjp0cnVlLG9uZm9jdXM6dHJ1ZSxvbmdvdHBvaW50ZXJjYXB0dXJlOnRydWUsb25oYXNoY2hhbmdlOnRydWUsb25pbnB1dDp0cnVlLG9uaW52YWxpZDp0cnVlLG9ua2V5ZG93bjp0cnVlLG9ua2V5cHJlc3M6dHJ1ZSxvbmtleXVwOnRydWUsb25sYW5ndWFnZWNoYW5nZTp0cnVlLG9ubG9hZDp0cnVlLG9ubG9hZGVkZGF0YTp0cnVlLG9ubG9hZGVkbWV0YWRhdGE6dHJ1ZSxvbmxvYWRzdGFydDp0cnVlLG9ubG9zdHBvaW50ZXJjYXB0dXJlOnRydWUsb25tZXNzYWdlOnRydWUsb25tZXNzYWdlZXJyb3I6dHJ1ZSxvbm1vdXNlZG93bjp0cnVlLG9ubW91c2VlbnRlcjp0cnVlLG9ubW91c2VsZWF2ZTp0cnVlLG9ubW91c2Vtb3ZlOnRydWUsb25tb3VzZW91dDp0cnVlLG9ubW91c2VvdmVyOnRydWUsb25tb3VzZXVwOnRydWUsb25tb3VzZXdoZWVsOnRydWUsb25vZmZsaW5lOnRydWUsb25vbmxpbmU6dHJ1ZSxvbnBhZ2VoaWRlOnRydWUsb25wYWdlc2hvdzp0cnVlLG9ucGF1c2U6dHJ1ZSxvbnBsYXk6dHJ1ZSxvbnBsYXlpbmc6dHJ1ZSxvbnBvaW50ZXJjYW5jZWw6dHJ1ZSxvbnBvaW50ZXJkb3duOnRydWUsb25wb2ludGVyZW50ZXI6dHJ1ZSxvbnBvaW50ZXJsZWF2ZTp0cnVlLG9ucG9pbnRlcm1vdmU6dHJ1ZSxvbnBvaW50ZXJvdXQ6dHJ1ZSxvbnBvaW50ZXJvdmVyOnRydWUsb25wb2ludGVydXA6dHJ1ZSxvbnBvcHN0YXRlOnRydWUsb25wcm9ncmVzczp0cnVlLG9ucmF0ZWNoYW5nZTp0cnVlLG9ucmVqZWN0aW9uaGFuZGxlZDp0cnVlLG9ucmVzZXQ6dHJ1ZSxvbnJlc2l6ZTp0cnVlLG9uc2Nyb2xsOnRydWUsb25zZWFyY2g6dHJ1ZSxvbnNlZWtlZDp0cnVlLG9uc2Vla2luZzp0cnVlLG9uc2VsZWN0OnRydWUsb25zdGFsbGVkOnRydWUsb25zdG9yYWdlOnRydWUsb25zdWJtaXQ6dHJ1ZSxvbnN1c3BlbmQ6dHJ1ZSxvbnRpbWV1cGRhdGU6dHJ1ZSxvbnRvZ2dsZTp0cnVlLG9udHJhbnNpdGlvbmVuZDp0cnVlLG9udW5oYW5kbGVkcmVqZWN0aW9uOnRydWUsb251bmxvYWQ6dHJ1ZSxvbnZvbHVtZWNoYW5nZTp0cnVlLG9ud2FpdGluZzp0cnVlLG9ud2hlZWw6dHJ1ZSxvcGVuOmZhbHNlLG9wZW5EYXRhYmFzZTpmYWxzZSxvcGVuZXI6ZmFsc2UsT3B0aW9uOmZhbHNlLG9yaWdpbjpmYWxzZSxPc2NpbGxhdG9yTm9kZTpmYWxzZSxvdXRlckhlaWdodDpmYWxzZSxvdXRlcldpZHRoOmZhbHNlLE92ZXJjb25zdHJhaW5lZEVycm9yOmZhbHNlLFBhZ2VUcmFuc2l0aW9uRXZlbnQ6ZmFsc2UscGFnZVhPZmZzZXQ6ZmFsc2UscGFnZVlPZmZzZXQ6ZmFsc2UsUGFubmVyTm9kZTpmYWxzZSxwYXJlbnQ6ZmFsc2UsUGF0aDJEOmZhbHNlLFBheW1lbnRBZGRyZXNzOmZhbHNlLFBheW1lbnRSZXF1ZXN0OmZhbHNlLFBheW1lbnRSZXF1ZXN0VXBkYXRlRXZlbnQ6ZmFsc2UsUGF5bWVudFJlc3BvbnNlOmZhbHNlLHBlcmZvcm1hbmNlOmZhbHNlLFBlcmZvcm1hbmNlOmZhbHNlLFBlcmZvcm1hbmNlRW50cnk6ZmFsc2UsUGVyZm9ybWFuY2VMb25nVGFza1RpbWluZzpmYWxzZSxQZXJmb3JtYW5jZU1hcms6ZmFsc2UsUGVyZm9ybWFuY2VNZWFzdXJlOmZhbHNlLFBlcmZvcm1hbmNlTmF2aWdhdGlvbjpmYWxzZSxQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmc6ZmFsc2UsUGVyZm9ybWFuY2VPYnNlcnZlcjpmYWxzZSxQZXJmb3JtYW5jZU9ic2VydmVyRW50cnlMaXN0OmZhbHNlLFBlcmZvcm1hbmNlUGFpbnRUaW1pbmc6ZmFsc2UsUGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZzpmYWxzZSxQZXJmb3JtYW5jZVRpbWluZzpmYWxzZSxQZXJpb2RpY1dhdmU6ZmFsc2UsUGVybWlzc2lvbnM6ZmFsc2UsUGVybWlzc2lvblN0YXR1czpmYWxzZSxwZXJzb25hbGJhcjpmYWxzZSxQaG90b0NhcGFiaWxpdGllczpmYWxzZSxQbHVnaW46ZmFsc2UsUGx1Z2luQXJyYXk6ZmFsc2UsUG9pbnRlckV2ZW50OmZhbHNlLFBvcFN0YXRlRXZlbnQ6ZmFsc2UscG9zdE1lc3NhZ2U6ZmFsc2UsUHJlc2VudGF0aW9uOmZhbHNlLFByZXNlbnRhdGlvbkF2YWlsYWJpbGl0eTpmYWxzZSxQcmVzZW50YXRpb25Db25uZWN0aW9uOmZhbHNlLFByZXNlbnRhdGlvbkNvbm5lY3Rpb25BdmFpbGFibGVFdmVudDpmYWxzZSxQcmVzZW50YXRpb25Db25uZWN0aW9uQ2xvc2VFdmVudDpmYWxzZSxQcmVzZW50YXRpb25Db25uZWN0aW9uTGlzdDpmYWxzZSxQcmVzZW50YXRpb25SZWNlaXZlcjpmYWxzZSxQcmVzZW50YXRpb25SZXF1ZXN0OmZhbHNlLHByaW50OmZhbHNlLFByb2Nlc3NpbmdJbnN0cnVjdGlvbjpmYWxzZSxQcm9ncmVzc0V2ZW50OmZhbHNlLFByb21pc2VSZWplY3Rpb25FdmVudDpmYWxzZSxwcm9tcHQ6ZmFsc2UsUHVzaE1hbmFnZXI6ZmFsc2UsUHVzaFN1YnNjcmlwdGlvbjpmYWxzZSxQdXNoU3Vic2NyaXB0aW9uT3B0aW9uczpmYWxzZSxxdWV1ZU1pY3JvdGFzazpmYWxzZSxSYWRpb05vZGVMaXN0OmZhbHNlLFJhbmdlOmZhbHNlLFJlYWRhYmxlU3RyZWFtOmZhbHNlLHJlZ2lzdGVyUHJvY2Vzc29yOmZhbHNlLFJlbW90ZVBsYXliYWNrOmZhbHNlLHJlbW92ZUV2ZW50TGlzdGVuZXI6ZmFsc2UsUmVxdWVzdDpmYWxzZSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWU6ZmFsc2UscmVxdWVzdElkbGVDYWxsYmFjazpmYWxzZSxyZXNpemVCeTpmYWxzZSxSZXNpemVPYnNlcnZlcjpmYWxzZSxSZXNpemVPYnNlcnZlckVudHJ5OmZhbHNlLHJlc2l6ZVRvOmZhbHNlLFJlc3BvbnNlOmZhbHNlLFJUQ0NlcnRpZmljYXRlOmZhbHNlLFJUQ0RhdGFDaGFubmVsOmZhbHNlLFJUQ0RhdGFDaGFubmVsRXZlbnQ6ZmFsc2UsUlRDRHRsc1RyYW5zcG9ydDpmYWxzZSxSVENJY2VDYW5kaWRhdGU6ZmFsc2UsUlRDSWNlR2F0aGVyZXI6ZmFsc2UsUlRDSWNlVHJhbnNwb3J0OmZhbHNlLFJUQ1BlZXJDb25uZWN0aW9uOmZhbHNlLFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQ6ZmFsc2UsUlRDUnRwQ29udHJpYnV0aW5nU291cmNlOmZhbHNlLFJUQ1J0cFJlY2VpdmVyOmZhbHNlLFJUQ1J0cFNlbmRlcjpmYWxzZSxSVENTY3RwVHJhbnNwb3J0OmZhbHNlLFJUQ1Nlc3Npb25EZXNjcmlwdGlvbjpmYWxzZSxSVENTdGF0c1JlcG9ydDpmYWxzZSxSVENUcmFja0V2ZW50OmZhbHNlLHNjcmVlbjpmYWxzZSxTY3JlZW46ZmFsc2Usc2NyZWVuTGVmdDpmYWxzZSxTY3JlZW5PcmllbnRhdGlvbjpmYWxzZSxzY3JlZW5Ub3A6ZmFsc2Usc2NyZWVuWDpmYWxzZSxzY3JlZW5ZOmZhbHNlLFNjcmlwdFByb2Nlc3Nvck5vZGU6ZmFsc2Usc2Nyb2xsOmZhbHNlLHNjcm9sbGJhcnM6ZmFsc2Usc2Nyb2xsQnk6ZmFsc2Usc2Nyb2xsVG86ZmFsc2Usc2Nyb2xsWDpmYWxzZSxzY3JvbGxZOmZhbHNlLFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQ6ZmFsc2UsU2VsZWN0aW9uOmZhbHNlLHNlbGY6ZmFsc2UsU2VydmljZVdvcmtlcjpmYWxzZSxTZXJ2aWNlV29ya2VyQ29udGFpbmVyOmZhbHNlLFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb246ZmFsc2Usc2Vzc2lvblN0b3JhZ2U6ZmFsc2Usc2V0SW50ZXJ2YWw6ZmFsc2Usc2V0VGltZW91dDpmYWxzZSxTaGFkb3dSb290OmZhbHNlLFNoYXJlZFdvcmtlcjpmYWxzZSxTb3VyY2VCdWZmZXI6ZmFsc2UsU291cmNlQnVmZmVyTGlzdDpmYWxzZSxzcGVlY2hTeW50aGVzaXM6ZmFsc2UsU3BlZWNoU3ludGhlc2lzRXZlbnQ6ZmFsc2UsU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOmZhbHNlLFN0YXRpY1JhbmdlOmZhbHNlLHN0YXR1czpmYWxzZSxzdGF0dXNiYXI6ZmFsc2UsU3RlcmVvUGFubmVyTm9kZTpmYWxzZSxzdG9wOmZhbHNlLFN0b3JhZ2U6ZmFsc2UsU3RvcmFnZUV2ZW50OmZhbHNlLFN0b3JhZ2VNYW5hZ2VyOmZhbHNlLHN0eWxlTWVkaWE6ZmFsc2UsU3R5bGVTaGVldDpmYWxzZSxTdHlsZVNoZWV0TGlzdDpmYWxzZSxTdWJ0bGVDcnlwdG86ZmFsc2UsU1ZHQUVsZW1lbnQ6ZmFsc2UsU1ZHQW5nbGU6ZmFsc2UsU1ZHQW5pbWF0ZWRBbmdsZTpmYWxzZSxTVkdBbmltYXRlZEJvb2xlYW46ZmFsc2UsU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjpmYWxzZSxTVkdBbmltYXRlZEludGVnZXI6ZmFsc2UsU1ZHQW5pbWF0ZWRMZW5ndGg6ZmFsc2UsU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0OmZhbHNlLFNWR0FuaW1hdGVkTnVtYmVyOmZhbHNlLFNWR0FuaW1hdGVkTnVtYmVyTGlzdDpmYWxzZSxTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW86ZmFsc2UsU1ZHQW5pbWF0ZWRSZWN0OmZhbHNlLFNWR0FuaW1hdGVkU3RyaW5nOmZhbHNlLFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdDpmYWxzZSxTVkdBbmltYXRlRWxlbWVudDpmYWxzZSxTVkdBbmltYXRlTW90aW9uRWxlbWVudDpmYWxzZSxTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDpmYWxzZSxTVkdBbmltYXRpb25FbGVtZW50OmZhbHNlLFNWR0NpcmNsZUVsZW1lbnQ6ZmFsc2UsU1ZHQ2xpcFBhdGhFbGVtZW50OmZhbHNlLFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OmZhbHNlLFNWR0RlZnNFbGVtZW50OmZhbHNlLFNWR0Rlc2NFbGVtZW50OmZhbHNlLFNWR0Rpc2NhcmRFbGVtZW50OmZhbHNlLFNWR0VsZW1lbnQ6ZmFsc2UsU1ZHRWxsaXBzZUVsZW1lbnQ6ZmFsc2UsU1ZHRkVCbGVuZEVsZW1lbnQ6ZmFsc2UsU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6ZmFsc2UsU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6ZmFsc2UsU1ZHRkVDb21wb3NpdGVFbGVtZW50OmZhbHNlLFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OmZhbHNlLFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDpmYWxzZSxTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6ZmFsc2UsU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OmZhbHNlLFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6ZmFsc2UsU1ZHRkVGbG9vZEVsZW1lbnQ6ZmFsc2UsU1ZHRkVGdW5jQUVsZW1lbnQ6ZmFsc2UsU1ZHRkVGdW5jQkVsZW1lbnQ6ZmFsc2UsU1ZHRkVGdW5jR0VsZW1lbnQ6ZmFsc2UsU1ZHRkVGdW5jUkVsZW1lbnQ6ZmFsc2UsU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OmZhbHNlLFNWR0ZFSW1hZ2VFbGVtZW50OmZhbHNlLFNWR0ZFTWVyZ2VFbGVtZW50OmZhbHNlLFNWR0ZFTWVyZ2VOb2RlRWxlbWVudDpmYWxzZSxTVkdGRU1vcnBob2xvZ3lFbGVtZW50OmZhbHNlLFNWR0ZFT2Zmc2V0RWxlbWVudDpmYWxzZSxTVkdGRVBvaW50TGlnaHRFbGVtZW50OmZhbHNlLFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6ZmFsc2UsU1ZHRkVTcG90TGlnaHRFbGVtZW50OmZhbHNlLFNWR0ZFVGlsZUVsZW1lbnQ6ZmFsc2UsU1ZHRkVUdXJidWxlbmNlRWxlbWVudDpmYWxzZSxTVkdGaWx0ZXJFbGVtZW50OmZhbHNlLFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50OmZhbHNlLFNWR0dFbGVtZW50OmZhbHNlLFNWR0dlb21ldHJ5RWxlbWVudDpmYWxzZSxTVkdHcmFkaWVudEVsZW1lbnQ6ZmFsc2UsU1ZHR3JhcGhpY3NFbGVtZW50OmZhbHNlLFNWR0ltYWdlRWxlbWVudDpmYWxzZSxTVkdMZW5ndGg6ZmFsc2UsU1ZHTGVuZ3RoTGlzdDpmYWxzZSxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6ZmFsc2UsU1ZHTGluZUVsZW1lbnQ6ZmFsc2UsU1ZHTWFya2VyRWxlbWVudDpmYWxzZSxTVkdNYXNrRWxlbWVudDpmYWxzZSxTVkdNYXRyaXg6ZmFsc2UsU1ZHTWV0YWRhdGFFbGVtZW50OmZhbHNlLFNWR01QYXRoRWxlbWVudDpmYWxzZSxTVkdOdW1iZXI6ZmFsc2UsU1ZHTnVtYmVyTGlzdDpmYWxzZSxTVkdQYXRoRWxlbWVudDpmYWxzZSxTVkdQYXR0ZXJuRWxlbWVudDpmYWxzZSxTVkdQb2ludDpmYWxzZSxTVkdQb2ludExpc3Q6ZmFsc2UsU1ZHUG9seWdvbkVsZW1lbnQ6ZmFsc2UsU1ZHUG9seWxpbmVFbGVtZW50OmZhbHNlLFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86ZmFsc2UsU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OmZhbHNlLFNWR1JlY3Q6ZmFsc2UsU1ZHUmVjdEVsZW1lbnQ6ZmFsc2UsU1ZHU2NyaXB0RWxlbWVudDpmYWxzZSxTVkdTZXRFbGVtZW50OmZhbHNlLFNWR1N0b3BFbGVtZW50OmZhbHNlLFNWR1N0cmluZ0xpc3Q6ZmFsc2UsU1ZHU3R5bGVFbGVtZW50OmZhbHNlLFNWR1NWR0VsZW1lbnQ6ZmFsc2UsU1ZHU3dpdGNoRWxlbWVudDpmYWxzZSxTVkdTeW1ib2xFbGVtZW50OmZhbHNlLFNWR1RleHRDb250ZW50RWxlbWVudDpmYWxzZSxTVkdUZXh0RWxlbWVudDpmYWxzZSxTVkdUZXh0UGF0aEVsZW1lbnQ6ZmFsc2UsU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDpmYWxzZSxTVkdUaXRsZUVsZW1lbnQ6ZmFsc2UsU1ZHVHJhbnNmb3JtOmZhbHNlLFNWR1RyYW5zZm9ybUxpc3Q6ZmFsc2UsU1ZHVFNwYW5FbGVtZW50OmZhbHNlLFNWR1VuaXRUeXBlczpmYWxzZSxTVkdVc2VFbGVtZW50OmZhbHNlLFNWR1ZpZXdFbGVtZW50OmZhbHNlLFRhc2tBdHRyaWJ1dGlvblRpbWluZzpmYWxzZSxUZXh0OmZhbHNlLFRleHREZWNvZGVyOmZhbHNlLFRleHRFbmNvZGVyOmZhbHNlLFRleHRFdmVudDpmYWxzZSxUZXh0TWV0cmljczpmYWxzZSxUZXh0VHJhY2s6ZmFsc2UsVGV4dFRyYWNrQ3VlOmZhbHNlLFRleHRUcmFja0N1ZUxpc3Q6ZmFsc2UsVGV4dFRyYWNrTGlzdDpmYWxzZSxUaW1lUmFuZ2VzOmZhbHNlLHRvb2xiYXI6ZmFsc2UsdG9wOmZhbHNlLFRvdWNoOmZhbHNlLFRvdWNoRXZlbnQ6ZmFsc2UsVG91Y2hMaXN0OmZhbHNlLFRyYWNrRXZlbnQ6ZmFsc2UsVHJhbnNpdGlvbkV2ZW50OmZhbHNlLFRyZWVXYWxrZXI6ZmFsc2UsVUlFdmVudDpmYWxzZSxVUkw6ZmFsc2UsVVJMU2VhcmNoUGFyYW1zOmZhbHNlLFZhbGlkaXR5U3RhdGU6ZmFsc2UsdmlzdWFsVmlld3BvcnQ6ZmFsc2UsVmlzdWFsVmlld3BvcnQ6ZmFsc2UsVlRUQ3VlOmZhbHNlLFdhdmVTaGFwZXJOb2RlOmZhbHNlLFdlYkFzc2VtYmx5OmZhbHNlLFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6ZmFsc2UsV2ViR0xBY3RpdmVJbmZvOmZhbHNlLFdlYkdMQnVmZmVyOmZhbHNlLFdlYkdMQ29udGV4dEV2ZW50OmZhbHNlLFdlYkdMRnJhbWVidWZmZXI6ZmFsc2UsV2ViR0xQcm9ncmFtOmZhbHNlLFdlYkdMUXVlcnk6ZmFsc2UsV2ViR0xSZW5kZXJidWZmZXI6ZmFsc2UsV2ViR0xSZW5kZXJpbmdDb250ZXh0OmZhbHNlLFdlYkdMU2FtcGxlcjpmYWxzZSxXZWJHTFNoYWRlcjpmYWxzZSxXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDpmYWxzZSxXZWJHTFN5bmM6ZmFsc2UsV2ViR0xUZXh0dXJlOmZhbHNlLFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s6ZmFsc2UsV2ViR0xVbmlmb3JtTG9jYXRpb246ZmFsc2UsV2ViR0xWZXJ0ZXhBcnJheU9iamVjdDpmYWxzZSxXZWJTb2NrZXQ6ZmFsc2UsV2hlZWxFdmVudDpmYWxzZSx3aW5kb3c6ZmFsc2UsV2luZG93OmZhbHNlLFdvcmtlcjpmYWxzZSxXcml0YWJsZVN0cmVhbTpmYWxzZSxYTUxEb2N1bWVudDpmYWxzZSxYTUxIdHRwUmVxdWVzdDpmYWxzZSxYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0OmZhbHNlLFhNTEh0dHBSZXF1ZXN0VXBsb2FkOmZhbHNlLFhNTFNlcmlhbGl6ZXI6ZmFsc2UsWFBhdGhFdmFsdWF0b3I6ZmFsc2UsWFBhdGhFeHByZXNzaW9uOmZhbHNlLFhQYXRoUmVzdWx0OmZhbHNlLFhTTFRQcm9jZXNzb3I6ZmFsc2V9O3ZhciBTcD17YWRkRXZlbnRMaXN0ZW5lcjpmYWxzZSxhcHBsaWNhdGlvbkNhY2hlOmZhbHNlLGF0b2I6ZmFsc2UsQmxvYjpmYWxzZSxCcm9hZGNhc3RDaGFubmVsOmZhbHNlLGJ0b2E6ZmFsc2UsQ2FjaGU6ZmFsc2UsY2FjaGVzOmZhbHNlLGNsZWFySW50ZXJ2YWw6ZmFsc2UsY2xlYXJUaW1lb3V0OmZhbHNlLGNsb3NlOnRydWUsY29uc29sZTpmYWxzZSxmZXRjaDpmYWxzZSxGaWxlUmVhZGVyU3luYzpmYWxzZSxGb3JtRGF0YTpmYWxzZSxIZWFkZXJzOmZhbHNlLElEQkN1cnNvcjpmYWxzZSxJREJDdXJzb3JXaXRoVmFsdWU6ZmFsc2UsSURCRGF0YWJhc2U6ZmFsc2UsSURCRmFjdG9yeTpmYWxzZSxJREJJbmRleDpmYWxzZSxJREJLZXlSYW5nZTpmYWxzZSxJREJPYmplY3RTdG9yZTpmYWxzZSxJREJPcGVuREJSZXF1ZXN0OmZhbHNlLElEQlJlcXVlc3Q6ZmFsc2UsSURCVHJhbnNhY3Rpb246ZmFsc2UsSURCVmVyc2lvbkNoYW5nZUV2ZW50OmZhbHNlLEltYWdlRGF0YTpmYWxzZSxpbXBvcnRTY3JpcHRzOnRydWUsaW5kZXhlZERCOmZhbHNlLGxvY2F0aW9uOmZhbHNlLE1lc3NhZ2VDaGFubmVsOmZhbHNlLE1lc3NhZ2VQb3J0OmZhbHNlLG5hbWU6ZmFsc2UsbmF2aWdhdG9yOmZhbHNlLE5vdGlmaWNhdGlvbjpmYWxzZSxvbmNsb3NlOnRydWUsb25jb25uZWN0OnRydWUsb25lcnJvcjp0cnVlLG9ubGFuZ3VhZ2VjaGFuZ2U6dHJ1ZSxvbm1lc3NhZ2U6dHJ1ZSxvbm9mZmxpbmU6dHJ1ZSxvbm9ubGluZTp0cnVlLG9ucmVqZWN0aW9uaGFuZGxlZDp0cnVlLG9udW5oYW5kbGVkcmVqZWN0aW9uOnRydWUscGVyZm9ybWFuY2U6ZmFsc2UsUGVyZm9ybWFuY2U6ZmFsc2UsUGVyZm9ybWFuY2VFbnRyeTpmYWxzZSxQZXJmb3JtYW5jZU1hcms6ZmFsc2UsUGVyZm9ybWFuY2VNZWFzdXJlOmZhbHNlLFBlcmZvcm1hbmNlTmF2aWdhdGlvbjpmYWxzZSxQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nOmZhbHNlLFBlcmZvcm1hbmNlVGltaW5nOmZhbHNlLHBvc3RNZXNzYWdlOnRydWUsUHJvbWlzZTpmYWxzZSxxdWV1ZU1pY3JvdGFzazpmYWxzZSxyZW1vdmVFdmVudExpc3RlbmVyOmZhbHNlLFJlcXVlc3Q6ZmFsc2UsUmVzcG9uc2U6ZmFsc2Usc2VsZjp0cnVlLFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb246ZmFsc2Usc2V0SW50ZXJ2YWw6ZmFsc2Usc2V0VGltZW91dDpmYWxzZSxUZXh0RGVjb2RlcjpmYWxzZSxUZXh0RW5jb2RlcjpmYWxzZSxVUkw6ZmFsc2UsVVJMU2VhcmNoUGFyYW1zOmZhbHNlLFdlYlNvY2tldDpmYWxzZSxXb3JrZXI6ZmFsc2UsV29ya2VyR2xvYmFsU2NvcGU6ZmFsc2UsWE1MSHR0cFJlcXVlc3Q6ZmFsc2V9O3ZhciBUcD17X19kaXJuYW1lOmZhbHNlLF9fZmlsZW5hbWU6ZmFsc2UsQWJvcnRDb250cm9sbGVyOmZhbHNlLEFib3J0U2lnbmFsOmZhbHNlLGF0b2I6ZmFsc2UsYnRvYTpmYWxzZSxCdWZmZXI6ZmFsc2UsY2xlYXJJbW1lZGlhdGU6ZmFsc2UsY2xlYXJJbnRlcnZhbDpmYWxzZSxjbGVhclRpbWVvdXQ6ZmFsc2UsY29uc29sZTpmYWxzZSxET01FeGNlcHRpb246ZmFsc2UsRXZlbnQ6ZmFsc2UsRXZlbnRUYXJnZXQ6ZmFsc2UsZXhwb3J0czp0cnVlLGdsb2JhbDpmYWxzZSxJbnRsOmZhbHNlLE1lc3NhZ2VDaGFubmVsOmZhbHNlLE1lc3NhZ2VFdmVudDpmYWxzZSxNZXNzYWdlUG9ydDpmYWxzZSxtb2R1bGU6ZmFsc2UscGVyZm9ybWFuY2U6ZmFsc2UscHJvY2VzczpmYWxzZSxxdWV1ZU1pY3JvdGFzazpmYWxzZSxyZXF1aXJlOmZhbHNlLHNldEltbWVkaWF0ZTpmYWxzZSxzZXRJbnRlcnZhbDpmYWxzZSxzZXRUaW1lb3V0OmZhbHNlLHN0cnVjdHVyZWRDbG9uZTpmYWxzZSxUZXh0RGVjb2RlcjpmYWxzZSxUZXh0RW5jb2RlcjpmYWxzZSxVUkw6ZmFsc2UsVVJMU2VhcmNoUGFyYW1zOmZhbHNlfTt2YXIgQXA9e0Fib3J0Q29udHJvbGxlcjpmYWxzZSxBYm9ydFNpZ25hbDpmYWxzZSxhdG9iOmZhbHNlLGJ0b2E6ZmFsc2UsQnVmZmVyOmZhbHNlLGNsZWFySW1tZWRpYXRlOmZhbHNlLGNsZWFySW50ZXJ2YWw6ZmFsc2UsY2xlYXJUaW1lb3V0OmZhbHNlLGNvbnNvbGU6ZmFsc2UsRE9NRXhjZXB0aW9uOmZhbHNlLEV2ZW50OmZhbHNlLEV2ZW50VGFyZ2V0OmZhbHNlLGdsb2JhbDpmYWxzZSxJbnRsOmZhbHNlLE1lc3NhZ2VDaGFubmVsOmZhbHNlLE1lc3NhZ2VFdmVudDpmYWxzZSxNZXNzYWdlUG9ydDpmYWxzZSxwZXJmb3JtYW5jZTpmYWxzZSxwcm9jZXNzOmZhbHNlLHF1ZXVlTWljcm90YXNrOmZhbHNlLHNldEltbWVkaWF0ZTpmYWxzZSxzZXRJbnRlcnZhbDpmYWxzZSxzZXRUaW1lb3V0OmZhbHNlLHN0cnVjdHVyZWRDbG9uZTpmYWxzZSxUZXh0RGVjb2RlcjpmYWxzZSxUZXh0RW5jb2RlcjpmYWxzZSxVUkw6ZmFsc2UsVVJMU2VhcmNoUGFyYW1zOmZhbHNlfTt2YXIgd3A9e2V4cG9ydHM6dHJ1ZSxnbG9iYWw6ZmFsc2UsbW9kdWxlOmZhbHNlLHJlcXVpcmU6ZmFsc2V9O3ZhciBDcD17ZGVmaW5lOmZhbHNlLHJlcXVpcmU6ZmFsc2V9O3ZhciBQcD17YWZ0ZXI6ZmFsc2UsYWZ0ZXJFYWNoOmZhbHNlLGJlZm9yZTpmYWxzZSxiZWZvcmVFYWNoOmZhbHNlLGNvbnRleHQ6ZmFsc2UsZGVzY3JpYmU6ZmFsc2UsaXQ6ZmFsc2UsbW9jaGE6ZmFsc2UscnVuOmZhbHNlLHNldHVwOmZhbHNlLHNwZWNpZnk6ZmFsc2Usc3VpdGU6ZmFsc2Usc3VpdGVTZXR1cDpmYWxzZSxzdWl0ZVRlYXJkb3duOmZhbHNlLHRlYXJkb3duOmZhbHNlLHRlc3Q6ZmFsc2UseGNvbnRleHQ6ZmFsc2UseGRlc2NyaWJlOmZhbHNlLHhpdDpmYWxzZSx4c3BlY2lmeTpmYWxzZX07dmFyIERwPXthZnRlckFsbDpmYWxzZSxhZnRlckVhY2g6ZmFsc2UsYmVmb3JlQWxsOmZhbHNlLGJlZm9yZUVhY2g6ZmFsc2UsZGVzY3JpYmU6ZmFsc2UsZXhwZWN0OmZhbHNlLGV4cGVjdEFzeW5jOmZhbHNlLGZhaWw6ZmFsc2UsZmRlc2NyaWJlOmZhbHNlLGZpdDpmYWxzZSxpdDpmYWxzZSxqYXNtaW5lOmZhbHNlLHBlbmRpbmc6ZmFsc2UscnVuczpmYWxzZSxzcHlPbjpmYWxzZSxzcHlPbkFsbEZ1bmN0aW9uczpmYWxzZSxzcHlPblByb3BlcnR5OmZhbHNlLHdhaXRzOmZhbHNlLHdhaXRzRm9yOmZhbHNlLHhkZXNjcmliZTpmYWxzZSx4aXQ6ZmFsc2V9O3ZhciBrcD17YWZ0ZXJBbGw6ZmFsc2UsYWZ0ZXJFYWNoOmZhbHNlLGJlZm9yZUFsbDpmYWxzZSxiZWZvcmVFYWNoOmZhbHNlLGRlc2NyaWJlOmZhbHNlLGV4cGVjdDpmYWxzZSxmZGVzY3JpYmU6ZmFsc2UsZml0OmZhbHNlLGl0OmZhbHNlLGplc3Q6ZmFsc2UscGl0OmZhbHNlLHJlcXVpcmU6ZmFsc2UsdGVzdDpmYWxzZSx4ZGVzY3JpYmU6ZmFsc2UseGl0OmZhbHNlLHh0ZXN0OmZhbHNlfTt2YXIgTnA9e2FzeW5jVGVzdDpmYWxzZSxkZWVwRXF1YWw6ZmFsc2UsZXF1YWw6ZmFsc2UsZXhwZWN0OmZhbHNlLG1vZHVsZTpmYWxzZSxub3REZWVwRXF1YWw6ZmFsc2Usbm90RXF1YWw6ZmFsc2Usbm90T2s6ZmFsc2Usbm90UHJvcEVxdWFsOmZhbHNlLG5vdFN0cmljdEVxdWFsOmZhbHNlLG9rOmZhbHNlLHByb3BFcXVhbDpmYWxzZSxRVW5pdDpmYWxzZSxyYWlzZXM6ZmFsc2Usc3RhcnQ6ZmFsc2Usc3RvcDpmYWxzZSxzdHJpY3RFcXVhbDpmYWxzZSx0ZXN0OmZhbHNlLHRocm93czpmYWxzZX07dmFyIElwPXtjb25zb2xlOnRydWUsZXhwb3J0czp0cnVlLHBoYW50b206dHJ1ZSxyZXF1aXJlOnRydWUsV2ViUGFnZTp0cnVlfTt2YXIgRnA9e2VtaXQ6ZmFsc2UsZXhwb3J0czpmYWxzZSxnZXRSb3c6ZmFsc2UsbG9nOmZhbHNlLG1vZHVsZTpmYWxzZSxwcm92aWRlczpmYWxzZSxyZXF1aXJlOmZhbHNlLHJlc3BvbmQ6ZmFsc2Usc2VuZDpmYWxzZSxzdGFydDpmYWxzZSxzdW06ZmFsc2V9O3ZhciBNcD17ZGVmaW5lQ2xhc3M6ZmFsc2UsZGVzZXJpYWxpemU6ZmFsc2UsZ2M6ZmFsc2UsaGVscDpmYWxzZSxpbXBvcnRDbGFzczpmYWxzZSxpbXBvcnRQYWNrYWdlOmZhbHNlLGphdmE6ZmFsc2UsbG9hZDpmYWxzZSxsb2FkQ2xhc3M6ZmFsc2UsUGFja2FnZXM6ZmFsc2UscHJpbnQ6ZmFsc2UscXVpdDpmYWxzZSxyZWFkRmlsZTpmYWxzZSxyZWFkVXJsOmZhbHNlLHJ1bkNvbW1hbmQ6ZmFsc2Usc2VhbDpmYWxzZSxzZXJpYWxpemU6ZmFsc2Usc3Bhd246ZmFsc2Usc3luYzpmYWxzZSx0b2ludDMyOmZhbHNlLHZlcnNpb246ZmFsc2V9O3ZhciBfcD17X19ESVJfXzpmYWxzZSxfX0ZJTEVfXzpmYWxzZSxfX0xJTkVfXzpmYWxzZSxjb206ZmFsc2UsZWR1OmZhbHNlLGV4aXQ6ZmFsc2UsamF2YTpmYWxzZSxKYXZhOmZhbHNlLGphdmFmeDpmYWxzZSxKYXZhSW1wb3J0ZXI6ZmFsc2UsamF2YXg6ZmFsc2UsSlNBZGFwdGVyOmZhbHNlLGxvYWQ6ZmFsc2UsbG9hZFdpdGhOZXdHbG9iYWw6ZmFsc2Usb3JnOmZhbHNlLFBhY2thZ2VzOmZhbHNlLHByaW50OmZhbHNlLHF1aXQ6ZmFsc2V9O3ZhciBPcD17QWN0aXZlWE9iamVjdDpmYWxzZSxDb2xsZWN0R2FyYmFnZTpmYWxzZSxEZWJ1ZzpmYWxzZSxFbnVtZXJhdG9yOmZhbHNlLEdldE9iamVjdDpmYWxzZSxSdW50aW1lT2JqZWN0OmZhbHNlLFNjcmlwdEVuZ2luZTpmYWxzZSxTY3JpcHRFbmdpbmVCdWlsZFZlcnNpb246ZmFsc2UsU2NyaXB0RW5naW5lTWFqb3JWZXJzaW9uOmZhbHNlLFNjcmlwdEVuZ2luZU1pbm9yVmVyc2lvbjpmYWxzZSxWQkFycmF5OmZhbHNlLFdTY3JpcHQ6ZmFsc2UsV1NIOmZhbHNlfTt2YXIgTHA9eyQ6ZmFsc2UsalF1ZXJ5OmZhbHNlfTt2YXIgQnA9e1lBSE9POmZhbHNlLFlBSE9PX2NvbmZpZzpmYWxzZSxZVUk6ZmFsc2UsWVVJX2NvbmZpZzpmYWxzZX07dmFyIFJwPXtjYXQ6ZmFsc2UsY2Q6ZmFsc2UsY2htb2Q6ZmFsc2UsY29uZmlnOmZhbHNlLGNwOmZhbHNlLGRpcnM6ZmFsc2UsZWNobzpmYWxzZSxlbnY6ZmFsc2UsZXJyb3I6ZmFsc2UsZXhlYzpmYWxzZSxleGl0OmZhbHNlLGZpbmQ6ZmFsc2UsZ3JlcDpmYWxzZSxsbjpmYWxzZSxsczpmYWxzZSxta2RpcjpmYWxzZSxtdjpmYWxzZSxwb3BkOmZhbHNlLHB1c2hkOmZhbHNlLHB3ZDpmYWxzZSxybTpmYWxzZSxzZWQ6ZmFsc2Usc2V0OmZhbHNlLHRhcmdldDpmYWxzZSx0ZW1wZGlyOmZhbHNlLHRlc3Q6ZmFsc2UsdG91Y2g6ZmFsc2Usd2hpY2g6ZmFsc2V9O3ZhciBqcD17JDpmYWxzZSwkJDpmYWxzZSwkQTpmYWxzZSwkYnJlYWs6ZmFsc2UsJGNvbnRpbnVlOmZhbHNlLCRGOmZhbHNlLCRIOmZhbHNlLCRSOmZhbHNlLCR3OmZhbHNlLEFic3RyYWN0OmZhbHNlLEFqYXg6ZmFsc2UsQXV0b2NvbXBsZXRlcjpmYWxzZSxCdWlsZGVyOmZhbHNlLENsYXNzOmZhbHNlLENvbnRyb2w6ZmFsc2UsRHJhZ2dhYmxlOmZhbHNlLERyYWdnYWJsZXM6ZmFsc2UsRHJvcHBhYmxlczpmYWxzZSxFZmZlY3Q6ZmFsc2UsRWxlbWVudDpmYWxzZSxFbnVtZXJhYmxlOmZhbHNlLEV2ZW50OmZhbHNlLEZpZWxkOmZhbHNlLEZvcm06ZmFsc2UsSGFzaDpmYWxzZSxJbnNlcnRpb246ZmFsc2UsT2JqZWN0UmFuZ2U6ZmFsc2UsUGVyaW9kaWNhbEV4ZWN1dGVyOmZhbHNlLFBvc2l0aW9uOmZhbHNlLFByb3RvdHlwZTpmYWxzZSxTY3JpcHRhY3Vsb3VzOmZhbHNlLFNlbGVjdG9yOmZhbHNlLFNvcnRhYmxlOmZhbHNlLFNvcnRhYmxlT2JzZXJ2ZXI6ZmFsc2UsU291bmQ6ZmFsc2UsVGVtcGxhdGU6ZmFsc2UsVG9nZ2xlOmZhbHNlLFRyeTpmYWxzZX07dmFyIFVwPXskOmZhbHNlLEFjY291bnRzOmZhbHNlLEFjY291bnRzQ2xpZW50OmZhbHNlLEFjY291bnRzQ29tbW9uOmZhbHNlLEFjY291bnRzU2VydmVyOmZhbHNlLEFwcDpmYWxzZSxBc3NldHM6ZmFsc2UsQmxhemU6ZmFsc2UsY2hlY2s6ZmFsc2UsQ29yZG92YTpmYWxzZSxERFA6ZmFsc2UsRERQUmF0ZUxpbWl0ZXI6ZmFsc2UsRERQU2VydmVyOmZhbHNlLERlcHM6ZmFsc2UsRUpTT046ZmFsc2UsRW1haWw6ZmFsc2UsSFRUUDpmYWxzZSxMb2c6ZmFsc2UsTWF0Y2g6ZmFsc2UsTWV0ZW9yOmZhbHNlLE1vbmdvOmZhbHNlLE1vbmdvSW50ZXJuYWxzOmZhbHNlLE5wbTpmYWxzZSxQYWNrYWdlOmZhbHNlLFBsdWdpbjpmYWxzZSxwcm9jZXNzOmZhbHNlLFJhbmRvbTpmYWxzZSxSZWFjdGl2ZURpY3Q6ZmFsc2UsUmVhY3RpdmVWYXI6ZmFsc2UsUm91dGVyOmZhbHNlLFNlcnZpY2VDb25maWd1cmF0aW9uOmZhbHNlLFNlc3Npb246ZmFsc2Usc2hhcmU6ZmFsc2UsU3BhY2ViYXJzOmZhbHNlLFRlbXBsYXRlOmZhbHNlLFRpbnl0ZXN0OmZhbHNlLFRyYWNrZXI6ZmFsc2UsVUk6ZmFsc2UsVXRpbHM6ZmFsc2UsV2ViQXBwOmZhbHNlLFdlYkFwcEludGVybmFsczpmYWxzZX07dmFyIHpwPXtfaXNXaW5kb3dzOmZhbHNlLF9yYW5kOmZhbHNlLEJ1bGtXcml0ZVJlc3VsdDpmYWxzZSxjYXQ6ZmFsc2UsY2Q6ZmFsc2UsY29ubmVjdDpmYWxzZSxkYjpmYWxzZSxnZXRIb3N0TmFtZTpmYWxzZSxnZXRNZW1JbmZvOmZhbHNlLGhvc3RuYW1lOmZhbHNlLElTT0RhdGU6ZmFsc2UsbGlzdEZpbGVzOmZhbHNlLGxvYWQ6ZmFsc2UsbHM6ZmFsc2UsbWQ1c3VtRmlsZTpmYWxzZSxta2RpcjpmYWxzZSxNb25nbzpmYWxzZSxOdW1iZXJJbnQ6ZmFsc2UsTnVtYmVyTG9uZzpmYWxzZSxPYmplY3RJZDpmYWxzZSxQbGFuQ2FjaGU6ZmFsc2UscHJpbnQ6ZmFsc2UscHJpbnRqc29uOmZhbHNlLHB3ZDpmYWxzZSxxdWl0OmZhbHNlLHJlbW92ZUZpbGU6ZmFsc2UscnM6ZmFsc2Usc2g6ZmFsc2UsVVVJRDpmYWxzZSx2ZXJzaW9uOmZhbHNlLFdyaXRlUmVzdWx0OmZhbHNlfTt2YXIgVnA9eyQ6ZmFsc2UsQXBwbGljYXRpb246ZmFsc2UsQXV0b21hdGlvbjpmYWxzZSxjb25zb2xlOmZhbHNlLGRlbGF5OmZhbHNlLExpYnJhcnk6ZmFsc2UsT2JqQzpmYWxzZSxPYmplY3RTcGVjaWZpZXI6ZmFsc2UsUGF0aDpmYWxzZSxQcm9ncmVzczpmYWxzZSxSZWY6ZmFsc2V9O3ZhciBxcD17YWRkRXZlbnRMaXN0ZW5lcjpmYWxzZSxhcHBsaWNhdGlvbkNhY2hlOmZhbHNlLGF0b2I6ZmFsc2UsQmxvYjpmYWxzZSxCcm9hZGNhc3RDaGFubmVsOmZhbHNlLGJ0b2E6ZmFsc2UsQ2FjaGU6ZmFsc2UsY2FjaGVzOmZhbHNlLENhY2hlU3RvcmFnZTpmYWxzZSxjbGVhckludGVydmFsOmZhbHNlLGNsZWFyVGltZW91dDpmYWxzZSxDbGllbnQ6ZmFsc2UsY2xpZW50czpmYWxzZSxDbGllbnRzOmZhbHNlLGNsb3NlOnRydWUsY29uc29sZTpmYWxzZSxFeHRlbmRhYmxlRXZlbnQ6ZmFsc2UsRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudDpmYWxzZSxmZXRjaDpmYWxzZSxGZXRjaEV2ZW50OmZhbHNlLEZpbGVSZWFkZXJTeW5jOmZhbHNlLEZvcm1EYXRhOmZhbHNlLEhlYWRlcnM6ZmFsc2UsSURCQ3Vyc29yOmZhbHNlLElEQkN1cnNvcldpdGhWYWx1ZTpmYWxzZSxJREJEYXRhYmFzZTpmYWxzZSxJREJGYWN0b3J5OmZhbHNlLElEQkluZGV4OmZhbHNlLElEQktleVJhbmdlOmZhbHNlLElEQk9iamVjdFN0b3JlOmZhbHNlLElEQk9wZW5EQlJlcXVlc3Q6ZmFsc2UsSURCUmVxdWVzdDpmYWxzZSxJREJUcmFuc2FjdGlvbjpmYWxzZSxJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6ZmFsc2UsSW1hZ2VEYXRhOmZhbHNlLGltcG9ydFNjcmlwdHM6ZmFsc2UsaW5kZXhlZERCOmZhbHNlLGxvY2F0aW9uOmZhbHNlLE1lc3NhZ2VDaGFubmVsOmZhbHNlLE1lc3NhZ2VQb3J0OmZhbHNlLG5hbWU6ZmFsc2UsbmF2aWdhdG9yOmZhbHNlLE5vdGlmaWNhdGlvbjpmYWxzZSxvbmNsb3NlOnRydWUsb25jb25uZWN0OnRydWUsb25lcnJvcjp0cnVlLG9uZmV0Y2g6dHJ1ZSxvbmluc3RhbGw6dHJ1ZSxvbmxhbmd1YWdlY2hhbmdlOnRydWUsb25tZXNzYWdlOnRydWUsb25tZXNzYWdlZXJyb3I6dHJ1ZSxvbm5vdGlmaWNhdGlvbmNsaWNrOnRydWUsb25ub3RpZmljYXRpb25jbG9zZTp0cnVlLG9ub2ZmbGluZTp0cnVlLG9ub25saW5lOnRydWUsb25wdXNoOnRydWUsb25wdXNoc3Vic2NyaXB0aW9uY2hhbmdlOnRydWUsb25yZWplY3Rpb25oYW5kbGVkOnRydWUsb25zeW5jOnRydWUsb251bmhhbmRsZWRyZWplY3Rpb246dHJ1ZSxwZXJmb3JtYW5jZTpmYWxzZSxQZXJmb3JtYW5jZTpmYWxzZSxQZXJmb3JtYW5jZUVudHJ5OmZhbHNlLFBlcmZvcm1hbmNlTWFyazpmYWxzZSxQZXJmb3JtYW5jZU1lYXN1cmU6ZmFsc2UsUGVyZm9ybWFuY2VOYXZpZ2F0aW9uOmZhbHNlLFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmc6ZmFsc2UsUGVyZm9ybWFuY2VUaW1pbmc6ZmFsc2UscG9zdE1lc3NhZ2U6dHJ1ZSxQcm9taXNlOmZhbHNlLHF1ZXVlTWljcm90YXNrOmZhbHNlLHJlZ2lzdHJhdGlvbjpmYWxzZSxyZW1vdmVFdmVudExpc3RlbmVyOmZhbHNlLFJlcXVlc3Q6ZmFsc2UsUmVzcG9uc2U6ZmFsc2Usc2VsZjpmYWxzZSxTZXJ2aWNlV29ya2VyOmZhbHNlLFNlcnZpY2VXb3JrZXJDb250YWluZXI6ZmFsc2UsU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOmZhbHNlLFNlcnZpY2VXb3JrZXJNZXNzYWdlRXZlbnQ6ZmFsc2UsU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbjpmYWxzZSxzZXRJbnRlcnZhbDpmYWxzZSxzZXRUaW1lb3V0OmZhbHNlLHNraXBXYWl0aW5nOmZhbHNlLFRleHREZWNvZGVyOmZhbHNlLFRleHRFbmNvZGVyOmZhbHNlLFVSTDpmYWxzZSxVUkxTZWFyY2hQYXJhbXM6ZmFsc2UsV2ViU29ja2V0OmZhbHNlLFdpbmRvd0NsaWVudDpmYWxzZSxXb3JrZXI6ZmFsc2UsV29ya2VyR2xvYmFsU2NvcGU6ZmFsc2UsWE1MSHR0cFJlcXVlc3Q6ZmFsc2V9O3ZhciBHcD17YWR2YW5jZUNsb2NrOmZhbHNlLGF0b206ZmFsc2UsZmFrZUNsZWFySW50ZXJ2YWw6ZmFsc2UsZmFrZUNsZWFyVGltZW91dDpmYWxzZSxmYWtlU2V0SW50ZXJ2YWw6ZmFsc2UsZmFrZVNldFRpbWVvdXQ6ZmFsc2UscmVzZXRUaW1lb3V0czpmYWxzZSx3YWl0c0ZvclByb21pc2U6ZmFsc2V9O3ZhciBYcD17YW5kVGhlbjpmYWxzZSxjbGljazpmYWxzZSxjdXJyZW50UGF0aDpmYWxzZSxjdXJyZW50Um91dGVOYW1lOmZhbHNlLGN1cnJlbnRVUkw6ZmFsc2UsZmlsbEluOmZhbHNlLGZpbmQ6ZmFsc2UsZmluZEFsbDpmYWxzZSxmaW5kV2l0aEFzc2VydDpmYWxzZSxrZXlFdmVudDpmYWxzZSxwYXVzZVRlc3Q6ZmFsc2UscmVzdW1lVGVzdDpmYWxzZSx0cmlnZ2VyRXZlbnQ6ZmFsc2UsdmlzaXQ6ZmFsc2Usd2FpdDpmYWxzZX07dmFyIEpwPXskOmZhbHNlLCQkOmZhbHNlLGJyb3dzZXI6ZmFsc2UsYnk6ZmFsc2UsQnk6ZmFsc2UsRGFydE9iamVjdDpmYWxzZSxlbGVtZW50OmZhbHNlLHByb3RyYWN0b3I6ZmFsc2V9O3ZhciBIcD17YnJvd3NlcjpmYWxzZSxjaHJvbWU6ZmFsc2Usb3ByOmZhbHNlfTt2YXIgV3A9e2Nsb25lSW50bzpmYWxzZSxjcmVhdGVPYmplY3RJbjpmYWxzZSxleHBvcnRGdW5jdGlvbjpmYWxzZSxHTTpmYWxzZSxHTV9hZGRFbGVtZW50OmZhbHNlLEdNX2FkZFN0eWxlOmZhbHNlLEdNX2FkZFZhbHVlQ2hhbmdlTGlzdGVuZXI6ZmFsc2UsR01fZGVsZXRlVmFsdWU6ZmFsc2UsR01fZG93bmxvYWQ6ZmFsc2UsR01fZ2V0UmVzb3VyY2VUZXh0OmZhbHNlLEdNX2dldFJlc291cmNlVVJMOmZhbHNlLEdNX2dldFRhYjpmYWxzZSxHTV9nZXRUYWJzOmZhbHNlLEdNX2dldFZhbHVlOmZhbHNlLEdNX2luZm86ZmFsc2UsR01fbGlzdFZhbHVlczpmYWxzZSxHTV9sb2c6ZmFsc2UsR01fbm90aWZpY2F0aW9uOmZhbHNlLEdNX29wZW5JblRhYjpmYWxzZSxHTV9yZWdpc3Rlck1lbnVDb21tYW5kOmZhbHNlLEdNX3JlbW92ZVZhbHVlQ2hhbmdlTGlzdGVuZXI6ZmFsc2UsR01fc2F2ZVRhYjpmYWxzZSxHTV9zZXRDbGlwYm9hcmQ6ZmFsc2UsR01fc2V0VmFsdWU6ZmFsc2UsR01fdW5yZWdpc3Rlck1lbnVDb21tYW5kOmZhbHNlLEdNX3htbGh0dHBSZXF1ZXN0OmZhbHNlLHVuc2FmZVdpbmRvdzpmYWxzZX07dmFyIEtwPXskOmZhbHNlLCRfOmZhbHNlLCQkOmZhbHNlLCQwOmZhbHNlLCQxOmZhbHNlLCQyOmZhbHNlLCQzOmZhbHNlLCQ0OmZhbHNlLCR4OmZhbHNlLGNocm9tZTpmYWxzZSxjbGVhcjpmYWxzZSxjb3B5OmZhbHNlLGRlYnVnOmZhbHNlLGRpcjpmYWxzZSxkaXJ4bWw6ZmFsc2UsZ2V0RXZlbnRMaXN0ZW5lcnM6ZmFsc2UsaW5zcGVjdDpmYWxzZSxrZXlzOmZhbHNlLG1vbml0b3I6ZmFsc2UsbW9uaXRvckV2ZW50czpmYWxzZSxwcm9maWxlOmZhbHNlLHByb2ZpbGVFbmQ6ZmFsc2UscXVlcnlPYmplY3RzOmZhbHNlLHRhYmxlOmZhbHNlLHVuZGVidWc6ZmFsc2UsdW5tb25pdG9yOmZhbHNlLHVubW9uaXRvckV2ZW50czpmYWxzZSx2YWx1ZXM6ZmFsc2V9O3ZhciAkcD17YnVpbHRpbjptcCxlczU6eXAsZXMyMDE1OmdwLGVzMjAxNzp4cCxlczIwMjA6dnAsZXMyMDIxOmJwLGJyb3dzZXI6RXAsd29ya2VyOlNwLG5vZGU6VHAsbm9kZUJ1aWx0aW46QXAsY29tbW9uanM6d3AsYW1kOkNwLG1vY2hhOlBwLGphc21pbmU6RHAsamVzdDprcCxxdW5pdDpOcCxwaGFudG9tanM6SXAsY291Y2g6RnAscmhpbm86TXAsbmFzaG9ybjpfcCx3c2g6T3AsanF1ZXJ5OkxwLHl1aTpCcCxzaGVsbGpzOlJwLHByb3RvdHlwZWpzOmpwLG1ldGVvcjpVcCxtb25nbzp6cCxhcHBsZXNjcmlwdDpWcCxzZXJ2aWNld29ya2VyOnFwLGF0b210ZXN0OkdwLGVtYmVydGVzdDpYcCxwcm90cmFjdG9yOkpwLCJzaGFyZWQtbm9kZS1icm93c2VyIjp7QWJvcnRDb250cm9sbGVyOmZhbHNlLEFib3J0U2lnbmFsOmZhbHNlLGF0b2I6ZmFsc2UsYnRvYTpmYWxzZSxjbGVhckludGVydmFsOmZhbHNlLGNsZWFyVGltZW91dDpmYWxzZSxjb25zb2xlOmZhbHNlLERPTUV4Y2VwdGlvbjpmYWxzZSxFdmVudDpmYWxzZSxFdmVudFRhcmdldDpmYWxzZSxJbnRsOmZhbHNlLE1lc3NhZ2VDaGFubmVsOmZhbHNlLE1lc3NhZ2VFdmVudDpmYWxzZSxNZXNzYWdlUG9ydDpmYWxzZSxwZXJmb3JtYW5jZTpmYWxzZSxxdWV1ZU1pY3JvdGFzazpmYWxzZSxzZXRJbnRlcnZhbDpmYWxzZSxzZXRUaW1lb3V0OmZhbHNlLFRleHREZWNvZGVyOmZhbHNlLFRleHRFbmNvZGVyOmZhbHNlLFVSTDpmYWxzZSxVUkxTZWFyY2hQYXJhbXM6ZmFsc2V9LHdlYmV4dGVuc2lvbnM6SHAsZ3JlYXNlbW9ua2V5OldwLGRldnRvb2xzOktwfTt2YXIgWXA9JHA7Y29uc3QgUXA9WyJ3aW5kb3ciLCJkb2N1bWVudCIsImNvbnNvbGUiXTtjb25zdCBacD1PYmplY3Qua2V5cyhZcC5idWlsdGluKTtjb25zdCBlZj1lPT5oYS5JZGVudGlmaWVyLmNoZWNrKGUpO2NvbnN0IHRmPWU9PmhhLkxpdGVyYWwuY2hlY2soZSk7Y29uc3QgcmY9ZT0+aGEuRXhwcmVzc2lvblN0YXRlbWVudC5jaGVjayhlKTtjb25zdCBzZj1lPT5oYS5UaGlzRXhwcmVzc2lvbi5jaGVjayhlKTtjb25zdCBuZj1lPT5oYS5PYmplY3RFeHByZXNzaW9uLmNoZWNrKGUpO2NvbnN0IGFmPWU9PnJmKGUpJiZjZihlLmV4cHJlc3Npb24ubGVmdCkmJnNmKGUuZXhwcmVzc2lvbi5sZWZ0Lm9iamVjdCk7Y29uc3Qgb2Y9ZT0+aGEuTmV3RXhwcmVzc2lvbi5jaGVjayhlKTtjb25zdCBsZj1lPT5oYS5TZXF1ZW5jZUV4cHJlc3Npb24uY2hlY2soZSk7Y29uc3QgdWY9ZT0+aGEuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uLmNoZWNrKGUpO2NvbnN0IGNmPWU9PmhhLk1lbWJlckV4cHJlc3Npb24uY2hlY2soZSk7Y29uc3QgaGY9ZT0+aGEuSW1wb3J0RGVjbGFyYXRpb24uY2hlY2soZSk7Y29uc3QgcGY9ZT0+aGEuVFNUeXBlQWxpYXNEZWNsYXJhdGlvbi5jaGVjayhlKTtjb25zdCBmZj1lPT5oYS5UU0ludGVyZmFjZURlY2xhcmF0aW9uLmNoZWNrKGUpO2NvbnN0IGRmPWU9PmhhLkV4cG9ydE5hbWVkRGVjbGFyYXRpb24uY2hlY2soZSk7Y29uc3QgbWY9ZT0+e2xldHtuYW1lOnR9PWU7cmV0dXJuIFFwLmluY2x1ZGVzKHQpfTtjb25zdCB5Zj1lPT57bGV0e25hbWU6dH09ZTtyZXR1cm4gWnAuaW5jbHVkZXModCl9O2NvbnN0IGdmPWU9PmUmJmUucmF3O2Z1bmN0aW9uIHhmKGUpe3JldHVybiBlLmZpbmQodWYpfWZ1bmN0aW9uIHZmKGUpe3JldHVybiBlLmZpbHRlcihoZil9ZnVuY3Rpb24gYmYoZSl7cmV0dXJuIGUuZmlsdGVyKGRmKX1mdW5jdGlvbiBFZihlKXtyZXR1cm4gZS5maWx0ZXIoKGU9PiFoZihlKSkpfWZ1bmN0aW9uIFNmKGUpe3JldHVybiBlLmZpbHRlcigoZT0+IWRmKGUpfHx1ZihlKSkpfWZ1bmN0aW9uIFRmKGUpe2NvbnN0IHQ9ZS5maWx0ZXIoZGYpLm1hcCgoZT0+ZS5kZWNsYXJhdGlvbikpO2NvbnN0IHI9dC5maWx0ZXIocGYpO2NvbnN0IHM9dC5maWx0ZXIoZmYpO2NvbnN0IGk9ZT0+e2xldHt0eXBlTmFtZTp0fT1lO3JldHVybiB0JiZ0Lm5hbWU/dC5uYW1lPT09bDpmYWxzZX07Y29uc3Qgbj1lPT57bGV0e2V4cHJlc3Npb246dH09ZTtyZXR1cm4gdC5uYW1lPT09bH07cmV0dXJuIHIuZmluZCgoZT0+ZS50eXBlQW5ub3RhdGlvbi50eXBlcyYmZS50eXBlQW5ub3RhdGlvbi50eXBlcy5zb21lKGkpfHxpKGUudHlwZUFubm90YXRpb24pKSl8fHMuZmluZCgoZT0+ZS5leHRlbmRzJiZlLmV4dGVuZHMuc29tZShuKSkpfWZ1bmN0aW9uIEFmKGUsdCl7Y29uc3Qgcj1QZihlKTtjb25zdCBzPWNhLmltcG9ydFNwZWNpZmllcihjYS5pZGVudGlmaWVyKG8pKTtjb25zdCBpPXQuaWQubmFtZTtjb25zdCBuPXZmKHIpLmZpbmQoKGU9PmUuc291cmNlLnZhbHVlPT09YSkpO2NvbnN0IGw9ci5maW5kKHVmKTtjb25zdCB1PWwuZGVjbGFyYXRpb247aWYobil7bi5zcGVjaWZpZXJzLnB1c2gocyl9ZWxzZXtyLnVuc2hpZnQoMCxjYS5pbXBvcnREZWNsYXJhdGlvbihbc10sY2Euc3RyaW5nTGl0ZXJhbChhKSkpfWwuZGVjbGFyYXRpb249Y2EudHNBc0V4cHJlc3Npb24odSxjYS50c1R5cGVSZWZlcmVuY2UoY2EuaWRlbnRpZmllcihvKSxjYS50c1R5cGVQYXJhbWV0ZXJJbnN0YW50aWF0aW9uKFtjYS50c1R5cGVSZWZlcmVuY2UoY2EuaWRlbnRpZmllcihpKSldKSkpO3JldHVybiBlfWZ1bmN0aW9uIHdmKGUpe3JldHVybiBjYS5leHBvcnREZWZhdWx0RGVjbGFyYXRpb24oY2EuZnVuY3Rpb25EZWNsYXJhdGlvbihjYS5pZGVudGlmaWVyKHIpLFtdLGNhLmJsb2NrU3RhdGVtZW50KFsuLi52byhFZixTZikoZSksY2EucmV0dXJuU3RhdGVtZW50KGNhLnRoaXNFeHByZXNzaW9uKCkpXSkpKX1mdW5jdGlvbiBDZihlKXtyZXR1cm4gZS5maWx0ZXIoKGU9PiF1ZihlKSYmIWFmKGUpKSl9ZnVuY3Rpb24gUGYoZSl7cmV0dXJuIGUuYm9keXx8ZS5wcm9ncmFtLmJvZHl9ZnVuY3Rpb24gRGYoZSx0KXt1YS52aXNpdChlLHt2aXNpdFByb3BlcnR5KGUpe2lmKGUudmFsdWUua2V5Lm5hbWU9PT1yKXtlLnZhbHVlLnZhbHVlPXQuZGVjbGFyYXRpb247cmV0dXJuIGZhbHNlfXRoaXMudHJhdmVyc2UoZSl9fSk7cmV0dXJuIGV9Y29uc3Qga2Y9L1xyXG4/fFxuL2c7ZnVuY3Rpb24gTmYoZSl7cmV0dXJuIGUuc3BsaXQoa2YpfWZ1bmN0aW9uIElmKGUsdCl7Y29uc3Qgcj1OZihlLnNsaWNlKDAsdCkpO3JldHVybntsaW5lOnIubGVuZ3RoLGNvbHVtbjpyW3IubGVuZ3RoLTFdLmxlbmd0aH19ZnVuY3Rpb24gRmYoZSx0LHIpe2NvbnN0e2NvbHVtbjpzLGxpbmU6aX09SWYodCxyLnN0YXJ0KTtyZXR1cm5gJHsiXG4iLnJlcGVhdChpLTEpfSR7IiAiLnJlcGVhdChzKzEpfSR7ZX1gfWZ1bmN0aW9uIE1mKGUsdCl7cmV0dXJuIGMucGFyc2UoZSxPYmplY3QuYXNzaWduKHtwYXJzZXI6e3BhcnNlOmFwfX0sdCkpfWZ1bmN0aW9uIF9mKGUsdCxyLHMpe2NvbnN0IGk9a28oZSk7Y29uc3Qgbj1GZihlLnRleHQudGV4dCx0LGUpO2NvbnN0e29wdGlvbnM6YX09cjtjb25zdCBvPUlvKCJqYXZhc2NyaXB0IixpLHIsT2JqZWN0LmFzc2lnbih7fSxlLHt0ZXh0Om59KSk7Y29uc3QgbD1kYShvLm1hcCk7Y29uc3QgdT1NZihvLmNvZGUse3NvdXJjZUZpbGVOYW1lOmEuZmlsZSxpbnB1dFNvdXJjZU1hcDpkcChsKT9udWxsOmx9KTtjb25zdCBjPVBmKHUpO2NvbnN0IGg9eGYoYyk7Y29uc3QgcD15YShoKTtjb25zdCBmPVBmKHMpO2NvbnN0IGQ9VGYoYyk7aWYoaCYmYy5zb21lKGFmKSl0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW5cdCB1c2UgImV4cG9ydCBkZWZhdWx0IHt9IiBhbmQgcm9vdCB0aGlzIHN0YXRlbWVudHMgaW4gdGhlIHNhbWUgY29tcG9uZW50Jyk7Zi51bnNoaWZ0KC4uLnA/Wy4uLnZmKGMpLC4uLmJmKGMpXTpDZihjKSk7aWYocClEZihzLHdmKGMpKTtpZihoKURmKHMsaCk7cmV0dXJuIGQ/QWYocyxkKTpzfWNvbnN0IE9mPSJqYXZhc2NyaXB0Ijtjb25zdCBMZj0iY3NzIjtjb25zdCBCZj0idGVtcGxhdGUiO2NvbnN0IFJmPSJzY3JpcHQiO2NvbnN0IGpmPSJzdHlsZSI7Y29uc3QgVWY9InRleHRhcmVhIjtjb25zdCB6Zj0iaXNSYXciO2NvbnN0IFZmPSJpc1NlbGZDbG9zaW5nIjtjb25zdCBxZj0iaXNWb2lkIjtjb25zdCBHZj0iaXNCb29sZWFuIjtjb25zdCBYZj0iaXNDdXN0b20iO2NvbnN0IEpmPSJpc1NwcmVhZCI7dmFyIEhmPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEpBVkFTQ1JJUFRfT1VUUFVUX05BTUU6T2YsQ1NTX09VVFBVVF9OQU1FOkxmLFRFTVBMQVRFX09VVFBVVF9OQU1FOkJmLEpBVkFTQ1JJUFRfVEFHOlJmLFNUWUxFX1RBRzpqZixURVhUQVJFQV9UQUc6VWYsSVNfUkFXOnpmLElTX1NFTEZfQ0xPU0lORzpWZixJU19WT0lEOnFmLElTX0JPT0xFQU46R2YsSVNfQ1VTVE9NOlhmLElTX1NQUkVBRDpKZn0pO2NvbnN0IFdmPTE7Y29uc3QgS2Y9Mjtjb25zdCAkZj0zO2NvbnN0IFlmPTQ7Y29uc3QgUWY9ODtjb25zdCBaZj05O2NvbnN0IGVkPTEwO2NvbnN0IHRkPTExO3ZhciByZD1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxUQUc6V2YsQVRUUjpLZixURVhUOiRmLENEQVRBOllmLENPTU1FTlQ6UWYsRE9DVU1FTlQ6WmYsRE9DVFlQRTplZCxET0NVTUVOVF9GUkFHTUVOVDp0ZH0pO2NvbnN0IHNkPSJSb290IHRhZyBub3QgZm91bmQuIjtjb25zdCBpZD0iVW5jbG9zZWQgRVM2IHRlbXBsYXRlIGxpdGVyYWwuIjtjb25zdCBuZD0iVW5leHBlY3RlZCBlbmQgb2YgZmlsZS4iO2NvbnN0IGFkPSJVbmNsb3NlZCBjb21tZW50LiI7Y29uc3Qgb2Q9J1VuY2xvc2VkICIlMSIgYmxvY2suJztjb25zdCBsZD0nTXVsdGlwbGUgaW5saW5lICI8JTE+IiB0YWdzIGFyZSBub3Qgc3VwcG9ydGVkLic7Y29uc3QgdWQ9IlVuZXhwZWN0ZWQgY2hhcmFjdGVyICUxLiI7Y29uc3QgY2Q9IlVuY2xvc2VkIGV4cHJlc3Npb24uIjtjb25zdCBoZD0vXig/OlwvW2EtekEtWl18W2EtekEtWl1bXlxzPi9dPykvO2NvbnN0IHBkPS8oXC8/W15ccz4vXSspXHMqKD4pPy9nO2NvbnN0IGZkPS8oXFNbXj4vPVxzXSopKD86XHMqPVxzKihbXj4vXSk/KT8vZztjb25zdCBkZD0vXC5cLlwuLztjb25zdCBtZD17c2NyaXB0Oi88XC9zY3JpcHRccyo+L2dpLHN0eWxlOi88XC9zdHlsZVxzKj4vZ2ksdGV4dGFyZWE6LzxcL3RleHRhcmVhXHMqPi9naX07Y29uc3QgeWQ9L15cLz8oPzpwcmV8dGV4dGFyZWEpJC87ZnVuY3Rpb24gZ2QoZSx0KXtpZihlPT09dm9pZCAwKXtlPVtdfWUucHVzaCh0KTtyZXR1cm4gZX1mdW5jdGlvbiB4ZChlLHQscil7ZS5sYXN0SW5kZXg9dDtyZXR1cm4gZS5leGVjKHIpfXZhciB2ZD1lPT5lLnJlcGxhY2UoLyg/PVstW1xdKCl7XiorPy4kfFxcXSkvZywiXFwiKTtmdW5jdGlvbiBiZChlLHQscil7aWYoIXIpe3I9ZS5sZW5ndGh9Y29uc3Qgcz0oZS5zbGljZSgwLHIpLm1hdGNoKC9cclxuP3xcbi9nKXx8IiIpLmxlbmd0aCsxO2xldCBpPTA7d2hpbGUoLS1yPj0wJiYhL1tcclxuXS8udGVzdChlW3JdKSl7KytpfXJldHVybmBbJHtzfSwke2l9XTogJHt0fWB9Y29uc3QgRWQ9ImAiO2Z1bmN0aW9uIFNkKGUsdCxyKXtjb25zdCBzPS9bYCRcXF0vZztsZXQgaTt3aGlsZShzLmxhc3RJbmRleD10LHMuZXhlYyhlKSl7dD1zLmxhc3RJbmRleDtpPWVbdC0xXTtpZihpPT09ImAiKXtyZXR1cm4gdH1pZihpPT09IiQiJiZlW3QrK109PT0ieyIpe3IucHVzaChFZCwifSIpO3JldHVybiB0fX10aHJvdyBiZChlLGlkLHQpfWZ1bmN0aW9uIFRkKGUsdCxyKXtjb25zdCBzPWJkKGUsdCxyKTt0aHJvdyBuZXcgRXJyb3Iocyl9Y29uc3QgQWQ9Ilt7KCw7Oj89fCYhXn4+JSovIjtjb25zdCB3ZD1gJHtBZH0rLWA7Y29uc3QgQ2Q9WyJjYXNlIiwiZGVmYXVsdCIsImRvIiwiZWxzZSIsImluIiwiaW5zdGFuY2VvZiIsInByZWZpeCIsInJldHVybiIsInR5cGVvZiIsInZvaWQiLCJ5aWVsZCJdO2NvbnN0IFBkPUNkLnJlZHVjZSgoKGUsdCk9PmUrdC5zbGljZSgtMSkpLCIiKTtjb25zdCBEZD0vXlwvKD89W14qPi9dKVteWy9cXF0qKD86KD86XFwufFxbKD86XFwufFteXF1cXF0qKSpcXSlbXltcXC9dKikqP1wvW2dpbXV5XSovO2NvbnN0IGtkPS9bJFx3XS87Y29uc3QgTmQ9Ly4qL2c7ZnVuY3Rpb24gSWQoZSx0KXt3aGlsZSgtLXQ+PTAmJi9ccy8udGVzdChlW3RdKSk7cmV0dXJuIHR9ZnVuY3Rpb24gRmQoZSx0KXtsZXQgcj1OZC5sYXN0SW5kZXg9dCsrO2NvbnN0IHM9KE5kLmV4ZWMoZSl8fCIgIilbMF0ubWF0Y2goRGQpO2lmKHMpe2NvbnN0IGk9citzWzBdLmxlbmd0aDtyPUlkKGUscik7bGV0IG49ZVtyXTtpZihyPDB8fEFkLmluY2x1ZGVzKG4pKXtyZXR1cm4gaX1pZihuPT09Ii4iKXtpZihlW3ItMV09PT0iLiIpe3Q9aX19ZWxzZXtpZihuPT09IisifHxuPT09Ii0iKXtpZihlWy0tcl0hPT1ufHwocj1JZChlLHIpKTwwfHx3ZC5pbmNsdWRlcyhuPWVbcl0pKXtyZXR1cm4gaX19aWYoUGQuaW5jbHVkZXMobikpe2NvbnN0IHM9cisxO3doaWxlKC0tcj49MCYma2QudGVzdChlW3JdKSk7aWYoQ2QuaW5jbHVkZXMoZS5zbGljZShyKzEscykpKXt0PWl9fX19cmV0dXJuIHR9Y29uc3QgTWQ9LydbXidcblxyXFxdKig/OlxcKD86XHJcbj98W1xTXHNdKVteJ1xuXHJcXF0qKSonLy5zb3VyY2U7Y29uc3QgX2Q9YCR7TWR9fCR7TWQucmVwbGFjZSgvJy9nLCciJyl9YDtjb25zdCBPZD17fTtmdW5jdGlvbiBMZChlKXtsZXQgdD1PZFtlXTtpZighdCl7bGV0IHI9dmQoZSk7aWYoZS5sZW5ndGg+MSl7cj1gJHtyfXxbYH1lbHNle3I9L1t7fVtcXSgpXS8udGVzdChlKT8iWyI6YFske3J9YH1PZFtlXT10PW5ldyBSZWdFeHAoYCR7X2R9fCR7cn1cYC9cXHt9W1xcXSgpXWAsImciKX1yZXR1cm4gdH1mdW5jdGlvbiBCZChlLHQscixzKXtsZXQgaT0wO3N3aXRjaCh0KXtjYXNlIlsiOmNhc2UiKCI6Y2FzZSJ7IjplLnB1c2godD09PSJbIj8iXSI6dD09PSIoIj8iKSI6In0iKTticmVhaztjYXNlIikiOmNhc2UiXSI6Y2FzZSJ9IjppZih0IT09ZS5wb3AoKSl7VGQocyx1ZC5yZXBsYWNlKCIlMSIsdCksaSl9aWYodD09PSJ9IiYmZVtlLmxlbmd0aC0xXT09PUVkKXt0PWUucG9wKCl9aT1yKzE7YnJlYWs7Y2FzZSIvIjppPUZkKHMscil9cmV0dXJue2NoYXI6dCxpbmRleDppfX1mdW5jdGlvbiBSZChlLHQscil7Y29uc3RbcyxpXT1yO2NvbnN0IG49dCtzLmxlbmd0aDtjb25zdCBhPVtdO2NvbnN0IG89TGQoaSk7by5sYXN0SW5kZXg9bjtsZXQgbDtsZXQgdTt3aGlsZSh1PW8uZXhlYyhlKSl7Y29uc3Qgcj11LmluZGV4O2NvbnN0IHM9dVswXTtsPW8ubGFzdEluZGV4O2lmKHM9PT1pJiYhYS5sZW5ndGgpe3JldHVybnt0ZXh0OmUuc2xpY2UobixyKSxzdGFydDp0LGVuZDpsfX1jb25zdHtjaGFyOmMsaW5kZXg6aH09QmQoYSxzWzBdLHIsZSk7bD1ofHxsO28ubGFzdEluZGV4PWM9PT1FZD9TZChlLGwsYSk6bH1pZihhLmxlbmd0aCl7VGQoZSxjZCxsKX19ZnVuY3Rpb24gamQoZSl7Y29uc3QgdD1lLmxhc3Q7ZS5sYXN0PW51bGw7aWYodCYmZS5yb290KXtlLmJ1aWxkZXIucHVzaCh0KX19ZnVuY3Rpb24gVWQoZSx0LHIpe3JldHVybiBlLnNsaWNlKHQscil9ZnVuY3Rpb24gemQoZSx0LHIscyl7aWYocz09PXZvaWQgMCl7cz17fX1jb25zdCBpPVVkKGUuZGF0YSx0LHIpO2NvbnN0IG49cy5leHByZXNzaW9ucztjb25zdCBhPXMudW5lc2NhcGU7bGV0IG89ZS5sYXN0O2UucG9zPXI7aWYobyYmby50eXBlPT09JGYpe28udGV4dCs9aTtvLmVuZD1yfWVsc2V7amQoZSk7ZS5sYXN0PW89e3R5cGU6JGYsdGV4dDppLHN0YXJ0OnQsZW5kOnJ9fWlmKG4mJm4ubGVuZ3RoKXtvLmV4cHJlc3Npb25zPShvLmV4cHJlc3Npb25zfHxbXSkuY29uY2F0KG4pfWlmKGEpe28udW5lc2NhcGU9YX1yZXR1cm4gJGZ9ZnVuY3Rpb24gVmQoZSx0LHIscyl7Y29uc3QgaT1HZChlLHIpO2kubGFzdEluZGV4PXM7Y29uc3R7dW5lc2NhcGU6bixleHByZXNzaW9uczphLGVuZDpvfT1xZChlLGkpO2lmKHQpe2lmKG4pe3QudW5lc2NhcGU9bn1pZihhLmxlbmd0aCl7dC5leHByZXNzaW9ucz1hfX1lbHNle3pkKGUscyxvLHtleHByZXNzaW9uczphLHVuZXNjYXBlOm59KX1yZXR1cm4gb31mdW5jdGlvbiBxZChlLHQpe2NvbnN0e2RhdGE6cixvcHRpb25zOnN9PWU7Y29uc3R7YnJhY2tldHM6aX09cztjb25zdCBuPVtdO2xldCBhLG8sbDt3aGlsZSgobD10LmV4ZWMocikpJiYhbFsxXSl7bz1sLmluZGV4O2lmKHJbby0xXT09PSJcXCIpe2E9bFswXX1lbHNle2NvbnN0IGU9UmQocixvLGkpO2lmKGUpe24ucHVzaChlKTt0Lmxhc3RJbmRleD1lLmVuZH19fWlmKCFsKXtUZChyLG5kLG8pfXJldHVybnt1bmVzY2FwZTphLGV4cHJlc3Npb25zOm4sZW5kOmwuaW5kZXh9fWZ1bmN0aW9uIEdkKGUsdCl7Y29uc3R7YnJhY2tldHM6cn09ZS5vcHRpb25zO2NvbnN0IHM9ZS5yZWdleENhY2hlW3RdO2lmKHMpcmV0dXJuIHM7Y29uc3QgaT12ZChyWzBdKTtPYmplY3QuYXNzaWduKGUucmVnZXhDYWNoZSx7W3RdOm5ldyBSZWdFeHAoYCgke3R9KXwke2l9YCwiZyIpfSk7cmV0dXJuIGUucmVnZXhDYWNoZVt0XX1jb25zdCBYZD1lPT5lLmZpbHRlcigoKGUsdCxyKT0+ci5pbmRleE9mKGUpPT09dCkpO2NvbnN0IEpkPVsiY2lyY2xlIiwiZWxsaXBzZSIsImxpbmUiLCJwYXRoIiwicG9seWdvbiIsInBvbHlsaW5lIiwicmVjdCIsInN0b3AiLCJ1c2UiXTtjb25zdCBIZD1bImJ1dHRvbiIsImRhdGEiLCJpbnB1dCIsInNlbGVjdCIsImxpIiwibWV0ZXIiLCJvcHRpb24iLCJvdXRwdXQiLCJwcm9ncmVzcyIsInRleHRhcmVhIiwicGFyYW0iXTtjb25zdCBXZD1YZChbImEiLCJhbHRHbHlwaCIsImFsdEdseXBoRGVmIiwiYWx0R2x5cGhJdGVtIiwiYW5pbWF0ZSIsImFuaW1hdGVDb2xvciIsImFuaW1hdGVNb3Rpb24iLCJhbmltYXRlVHJhbnNmb3JtIiwiYW5pbWF0aW9uIiwiYXVkaW8iLCJjYW52YXMiLCJjbGlwUGF0aCIsImNvbG9yLXByb2ZpbGUiLCJjdXJzb3IiLCJkZWZzIiwiZGVzYyIsImRpc2NhcmQiLCJmZUJsZW5kIiwiZmVDb2xvck1hdHJpeCIsImZlQ29tcG9uZW50VHJhbnNmZXIiLCJmZUNvbXBvc2l0ZSIsImZlQ29udm9sdmVNYXRyaXgiLCJmZURpZmZ1c2VMaWdodGluZyIsImZlRGlzcGxhY2VtZW50TWFwIiwiZmVEaXN0YW50TGlnaHQiLCJmZURyb3BTaGFkb3ciLCJmZUZsb29kIiwiZmVGdW5jQSIsImZlRnVuY0IiLCJmZUZ1bmNHIiwiZmVGdW5jUiIsImZlR2F1c3NpYW5CbHVyIiwiZmVJbWFnZSIsImZlTWVyZ2UiLCJmZU1lcmdlTm9kZSIsImZlTW9ycGhvbG9neSIsImZlT2Zmc2V0IiwiZmVQb2ludExpZ2h0IiwiZmVTcGVjdWxhckxpZ2h0aW5nIiwiZmVTcG90TGlnaHQiLCJmZVRpbGUiLCJmZVR1cmJ1bGVuY2UiLCJmaWx0ZXIiLCJmb250IiwiZm9udC1mYWNlIiwiZm9udC1mYWNlLWZvcm1hdCIsImZvbnQtZmFjZS1uYW1lIiwiZm9udC1mYWNlLXNyYyIsImZvbnQtZmFjZS11cmkiLCJmb3JlaWduT2JqZWN0IiwiZyIsImdseXBoIiwiZ2x5cGhSZWYiLCJoYW5kbGVyIiwiaGF0Y2giLCJoYXRjaHBhdGgiLCJoa2VybiIsImlmcmFtZSIsImltYWdlIiwibGluZWFyR3JhZGllbnQiLCJsaXN0ZW5lciIsIm1hcmtlciIsIm1hc2siLCJtZXNoIiwibWVzaGdyYWRpZW50IiwibWVzaHBhdGNoIiwibWVzaHJvdyIsIm1ldGFkYXRhIiwibWlzc2luZy1nbHlwaCIsIm1wYXRoIiwicGF0dGVybiIsInByZWZldGNoIiwicmFkaWFsR3JhZGllbnQiLCJzY3JpcHQiLCJzZXQiLCJzb2xpZENvbG9yIiwic29saWRjb2xvciIsInN0eWxlIiwic3ZnIiwic3dpdGNoIiwic3ltYm9sIiwidGJyZWFrIiwidGV4dCIsInRleHRBcmVhIiwidGV4dFBhdGgiLCJ0aXRsZSIsInRyZWYiLCJ0c3BhbiIsInVua25vd24iLCJ2aWRlbyIsInZpZXciLCJ2a2VybiJdLmNvbmNhdChKZCkpLnNvcnQoKTtjb25zdCBLZD1bImFyZWEiLCJiYXNlIiwiYnIiLCJjb2wiLCJlbWJlZCIsImhyIiwiaW1nIiwiaW5wdXQiLCJrZXlnZW4iLCJsaW5rIiwibWVudWl0ZW0iLCJtZXRhIiwicGFyYW0iLCJzb3VyY2UiLCJ0cmFjayIsIndiciJdO2NvbnN0ICRkPVhkKFsiYSIsImFiYnIiLCJhZGRyZXNzIiwiYXJ0aWNsZSIsImFzaWRlIiwiYXVkaW8iLCJiIiwiYmRpIiwiYmRvIiwiYmxvY2txdW90ZSIsImJvZHkiLCJjYW52YXMiLCJjYXB0aW9uIiwiY2l0ZSIsImNvZGUiLCJjb2xncm91cCIsImRhdGFsaXN0IiwiZGQiLCJkZWwiLCJkZXRhaWxzIiwiZGZuIiwiZGlhbG9nIiwiZGl2IiwiZGwiLCJkdCIsImVtIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWQiLCJoZWFkZXIiLCJoZ3JvdXAiLCJodG1sIiwiaSIsImlmcmFtZSIsImlucyIsImtiZCIsImxhYmVsIiwibGVnZW5kIiwibWFpbiIsIm1hcCIsIm1hcmsiLCJtYXRoIiwibWVudSIsIm5hdiIsIm5vc2NyaXB0Iiwib2JqZWN0Iiwib2wiLCJvcHRncm91cCIsInAiLCJwaWN0dXJlIiwicHJlIiwicSIsInJiIiwicnAiLCJydCIsInJ0YyIsInJ1YnkiLCJzIiwic2FtcCIsInNjcmlwdCIsInNlY3Rpb24iLCJzZWxlY3QiLCJzbG90Iiwic21hbGwiLCJzcGFuIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwic3ZnIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGVtcGxhdGUiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0aW1lIiwidGl0bGUiLCJ0ciIsInUiLCJ1bCIsInZhciIsInZpZGVvIl0uY29uY2F0KEtkKS5jb25jYXQoSGQpKS5zb3J0KCk7Y29uc3QgWWQ9WyJkaXNhYmxlZCIsInZpc2libGUiLCJjaGVja2VkIiwicmVhZG9ubHkiLCJyZXF1aXJlZCIsImFsbG93ZnVsbHNjcmVlbiIsImF1dG9mb2N1cyIsImF1dG9wbGF5IiwiY29tcGFjdCIsImNvbnRyb2xzIiwiZGVmYXVsdCIsImZvcm1ub3ZhbGlkYXRlIiwiaGlkZGVuIiwiaXNtYXAiLCJpdGVtc2NvcGUiLCJsb29wIiwibXVsdGlwbGUiLCJtdXRlZCIsIm5vcmVzaXplIiwibm9zaGFkZSIsIm5vdmFsaWRhdGUiLCJub3dyYXAiLCJvcGVuIiwicmV2ZXJzZWQiLCJzZWFtbGVzcyIsInNlbGVjdGVkIiwic29ydGFibGUiLCJ0cnVlc3BlZWQiLCJ0eXBlbXVzdG1hdGNoIl07ZnVuY3Rpb24gUWQoZSl7cmV0dXJuIGUuam9pbigifCIpfWZ1bmN0aW9uIFpkKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspe3Rbcl09YXJndW1lbnRzW3JdfXJldHVybiBuZXcgUmVnRXhwKGBeLz8oPzoke1FkKHQubWFwKFFkKSl9KSRgLCJpIil9Y29uc3QgZW09WmQoJGQpO2NvbnN0IHRtPVpkKFdkKTtjb25zdCBybT1aZChLZCk7Y29uc3Qgc209WmQoSmQpO2NvbnN0IGltPVpkKEhkKTtjb25zdCBubT1aZChZZCk7ZnVuY3Rpb24gYW0oZSl7cmV0dXJuW3JtLHNtXS5zb21lKCh0PT50LnRlc3QoZSkpKX1mdW5jdGlvbiBvbShlKXtyZXR1cm5bZW0sdG1dLmV2ZXJ5KCh0PT4hdC50ZXN0KGUpKSl9ZnVuY3Rpb24gbG0oZSl7cmV0dXJuIGltLnRlc3QoZSl9ZnVuY3Rpb24gdW0oZSl7cmV0dXJuIG5tLnRlc3QoZSl9ZnVuY3Rpb24gY20oZSl7Y29uc3QgdD1uZXcgV2Vha01hcDtyZXR1cm4gZnVuY3Rpb24oKXtpZih0Lmhhcyhhcmd1bWVudHMubGVuZ3RoPD0wP3VuZGVmaW5lZDphcmd1bWVudHNbMF0pKXJldHVybiB0LmdldChhcmd1bWVudHMubGVuZ3RoPD0wP3VuZGVmaW5lZDphcmd1bWVudHNbMF0pO2NvbnN0IHI9ZSguLi5hcmd1bWVudHMpO3Quc2V0KGFyZ3VtZW50cy5sZW5ndGg8PTA/dW5kZWZpbmVkOmFyZ3VtZW50c1swXSxyKTtyZXR1cm4gcn19Y29uc3QgaG09Y20oKGU9PlJlZ0V4cChgKCR7ZVswXX1bXiR7ZVsxXX1dKj8ke2VbMV19KWAsImciKSkpO2NvbnN0IHBtPWU9PmRkLnRlc3QoZSk7Y29uc3QgZm09KGUsdCk9PmVbMF09PT10WzBdO2NvbnN0IGRtPShlLHQpPT5WZChlLHQsIls+L1xcc10iLHQuc3RhcnQpO2Z1bmN0aW9uIG1tKGUpe2NvbnN0e2RhdGE6dCxsYXN0OnIscG9zOnMscm9vdDppfT1lO2NvbnN0IG49cjtjb25zdCBhPS9cUy9nO2NvbnN0IG89eGQoYSxzLHQpO3N3aXRjaCh0cnVlKXtjYXNlIW86ZS5wb3M9dC5sZW5ndGg7YnJlYWs7Y2FzZSBvWzBdPT09Ij4iOmUucG9zPW4uZW5kPWEubGFzdEluZGV4O2lmKG5bVmZdKXtlLnNjcnlsZT1udWxsO2lmKGkmJmkubmFtZT09PW4ubmFtZSl7ZS5jb3VudC0tfX1yZXR1cm4gJGY7Y2FzZSBvWzBdPT09Ii8iOmUucG9zPWEubGFzdEluZGV4O25bVmZdPXRydWU7YnJlYWs7ZGVmYXVsdDpkZWxldGUgbltWZl07eW0oZSxvLmluZGV4LG4pfXJldHVybiBLZn1mdW5jdGlvbiB5bShlLHQscil7Y29uc3R7ZGF0YTpzfT1lO2NvbnN0IGk9aG0oZS5vcHRpb25zLmJyYWNrZXRzKTtjb25zdCBuPWZkO2NvbnN0IGE9bi5sYXN0SW5kZXg9aS5sYXN0SW5kZXg9dDtjb25zdCBvPW4uZXhlYyhzKTtjb25zdCBsPWZtKG9bMV0sZS5vcHRpb25zLmJyYWNrZXRzKTtjb25zdCB1PWw/W251bGwsaS5leGVjKHMpWzFdLG51bGxdOm87aWYodSl7Y29uc3QgdD1uLmxhc3RJbmRleDtjb25zdCBzPWJtKGUsdSxhLHQsbCk7ZS5wb3M9ci5lbmQ9cy5lbmQ7ci5hdHRyaWJ1dGVzPWdkKHIuYXR0cmlidXRlcyxzKX19ZnVuY3Rpb24gZ20oZSx0LHIpe2NvbnN0e2RhdGE6c309ZTtsZXR7ZW5kOml9PXQ7aWYodW0odC5uYW1lKSl7dFtHZl09dHJ1ZX1pZihyKXtsZXQgbj1pO2lmKHIhPT0nIicmJnIhPT0iJyIpe3I9IiI7bi0tfWk9VmQoZSx0LHJ8fCJbPi9cXHNdIixuKTtyZXR1cm4gT2JqZWN0LmFzc2lnbih0LHt2YWx1ZTpVZChzLG4saSksdmFsdWVTdGFydDpuLGVuZDpyPysraTppfSl9cmV0dXJuIHR9ZnVuY3Rpb24geG0oZSx0KXtjb25zdCByPWRtKGUsdCk7cmV0dXJue1tKZl06dHJ1ZSxzdGFydDp0LnN0YXJ0LGV4cHJlc3Npb25zOnQuZXhwcmVzc2lvbnMubWFwKChlPT5PYmplY3QuYXNzaWduKGUse3RleHQ6ZS50ZXh0LnJlcGxhY2UoZGQsIiIpLnRyaW0oKX0pKSksZW5kOnJ9fWZ1bmN0aW9uIHZtKGUsdCl7Y29uc3Qgcj1kbShlLHQpO3JldHVybntzdGFydDp0LnN0YXJ0LG5hbWU6dC5leHByZXNzaW9uc1swXS50ZXh0LnRyaW0oKSxleHByZXNzaW9uczp0LmV4cHJlc3Npb25zLGVuZDpyfX1mdW5jdGlvbiBibShlLHQscixzLGkpe2NvbnN0IG49e25hbWU6dFsxXSx2YWx1ZToiIixzdGFydDpyLGVuZDpzfTtjb25zdCBhPXRbMl07c3dpdGNoKHRydWUpe2Nhc2UgcG0obi5uYW1lKTpyZXR1cm4geG0oZSxuKTtjYXNlIGk9PT10cnVlOnJldHVybiB2bShlLG4pO2RlZmF1bHQ6cmV0dXJuIGdtKGUsbixhKX19ZnVuY3Rpb24gRW0oZSx0LHIpe2NvbnN0IHM9cisyO2NvbnN0IGk9dC5zdWJzdHIocywyKT09PSItLSI7Y29uc3Qgbj1pPyItLVx4M2UiOiI+Ijtjb25zdCBhPXQuaW5kZXhPZihuLHMpO2lmKGE8MCl7VGQodCxhZCxyKX1TbShlLHIsYStuLmxlbmd0aCx0LnN1YnN0cmluZyhyLGErbi5sZW5ndGgpKTtyZXR1cm4gJGZ9ZnVuY3Rpb24gU20oZSx0LHIscyl7ZS5wb3M9cjtpZihlLm9wdGlvbnMuY29tbWVudHM9PT10cnVlKXtqZChlKTtlLmxhc3Q9e3R5cGU6UWYsc3RhcnQ6dCxlbmQ6cix0ZXh0OnN9fX1mdW5jdGlvbiBUbShlLHQscixzKXtjb25zdCBpPWUucm9vdDtjb25zdCBuPXt0eXBlOldmLG5hbWU6dCxzdGFydDpyLGVuZDpzfTtpZihvbSh0KSl7bltYZl09dHJ1ZX1pZihhbSh0KSl7bltxZl09dHJ1ZX1lLnBvcz1zO2lmKGkpe2lmKHQ9PT1pLm5hbWUpe2UuY291bnQrK31lbHNlIGlmKHQ9PT1pLmNsb3NlKXtlLmNvdW50LS19amQoZSl9ZWxzZXtlLnJvb3Q9e25hbWU6bi5uYW1lLGNsb3NlOmAvJHt0fWB9O2UuY291bnQ9MX1lLmxhc3Q9bn1mdW5jdGlvbiBBbShlKXtjb25zdHtwb3M6dCxkYXRhOnJ9PWU7Y29uc3Qgcz10LTE7Y29uc3QgaT1yLnN1YnN0cih0LDIpO3N3aXRjaCh0cnVlKXtjYXNlIGlbMF09PT0iISI6cmV0dXJuIEVtKGUscixzKTtjYXNlIGhkLnRlc3QoaSk6cmV0dXJuIHdtKGUscyk7ZGVmYXVsdDpyZXR1cm4gemQoZSxzLHQpfX1mdW5jdGlvbiB3bShlLHQpe2NvbnN0e2RhdGE6cixwb3M6c309ZTtjb25zdCBpPXBkO2NvbnN0IG49eGQoaSxzLHIpO2NvbnN0IGE9aS5sYXN0SW5kZXg7Y29uc3Qgbz1uWzFdLnRvTG93ZXJDYXNlKCk7aWYobyBpbiBtZCl7ZS5zY3J5bGU9b31UbShlLG8sdCxhKTtpZighblsyXSl7cmV0dXJuIEtmfXJldHVybiAkZn1mdW5jdGlvbiBDbShlKXtjb25zdHtwb3M6dCxkYXRhOnIsc2NyeWxlOnN9PWU7c3dpdGNoKHRydWUpe2Nhc2UgdHlwZW9mIHM9PT0ic3RyaW5nIjp7Y29uc3QgaT1zO2NvbnN0IG49bWRbaV07Y29uc3QgYT14ZChuLHQscik7aWYoIWEpe1RkKHIsb2QucmVwbGFjZSgiJTEiLGkpLHQtMSl9Y29uc3Qgbz1hLmluZGV4O2NvbnN0IGw9bi5sYXN0SW5kZXg7ZS5zY3J5bGU9bnVsbDtpZihvPnQpe1BtKGUsaSxhKX1UbShlLGAvJHtpfWAsbyxsKTticmVha31jYXNlIHJbdF09PT0iPCI6ZS5wb3MrKztyZXR1cm4gV2Y7ZGVmYXVsdDpWZChlLG51bGwsIjwiLHQpfXJldHVybiAkZn1mdW5jdGlvbiBQbShlLHQscil7Y29uc3R7cG9zOnN9PWU7Y29uc3QgaT1yLmluZGV4O2lmKHQ9PT1VZil7VmQoZSxudWxsLHJbMF0scyl9ZWxzZXt6ZChlLHMsaSl9fWZ1bmN0aW9uIERtKGUpe3JldHVybiBlLnJlcGxhY2UoL1xyL2csIlxcciIpLnJlcGxhY2UoL1xuL2csIlxcbiIpfWNvbnN0IGttPWU9PihlLmF0dHJpYnV0ZXN8fFtdKS5zb21lKChlPT5lLm5hbWU9PT0ic3JjIikpO2Z1bmN0aW9uIE5tKGUpe3JldHVybiBlLnJlcGxhY2UoL1xcL2csIlxcXFwiKX1mdW5jdGlvbiBJbShlKXtyZXR1cm4gZS5yZXBsYWNlKC9ccysvZywiICIpfWNvbnN0IEZtPU9iamVjdC5zZWFsKHtnZXQoKXtjb25zdCBlPXRoaXMuc3RvcmU7cmV0dXJue1tCZl06ZS5yb290Lm5vZGVzWzBdLFtMZl06ZVtqZl0sW09mXTplW1JmXX19LHB1c2goZSl7Y29uc3QgdD10aGlzLnN0b3JlO3N3aXRjaChlLnR5cGUpe2Nhc2UgUWY6dGhpcy5wdXNoQ29tbWVudCh0LGUpO2JyZWFrO2Nhc2UgJGY6dGhpcy5wdXNoVGV4dCh0LGUpO2JyZWFrO2Nhc2UgV2Y6e2NvbnN0IHI9ZS5uYW1lO2NvbnN0IHM9Ii8iO2NvbnN0W2ldPXI7aWYoaT09PXMmJiFlLmlzVm9pZCl7dGhpcy5jbG9zZVRhZyh0LGUscil9ZWxzZSBpZihpIT09cyl7dGhpcy5vcGVuVGFnKHQsZSl9YnJlYWt9fX0scHVzaENvbW1lbnQoZSx0KXtjb25zdCByPWUubGFzdDtyLm5vZGVzLnB1c2godCl9LGNsb3NlVGFnKGUsdCl7Y29uc3Qgcj1lLnNjcnlsZXx8ZS5sYXN0O3IuZW5kPXQuZW5kO2lmKGUucm9vdC5ub2Rlc1swXSllLnJvb3Qubm9kZXNbMF0uZW5kPXQuZW5kO2lmKGUuc2NyeWxlKXtlLnNjcnlsZT1udWxsfWVsc2V7ZS5sYXN0PWUuc3RhY2sucG9wKCl9fSxvcGVuVGFnKGUsdCl7Y29uc3Qgcj10Lm5hbWU7Y29uc3Qgcz10LmF0dHJpYnV0ZXM7Y29uc3QgaT1SZj09PXImJiFrbSh0KXx8cj09PWpmO2lmKGkpe2lmKGVbcl0pe1RkKHRoaXMuc3RvcmUuZGF0YSxsZC5yZXBsYWNlKCIlMSIsciksdC5zdGFydCl9ZVtyXT10O2Uuc2NyeWxlPWVbcl19ZWxzZXtjb25zdCBzPWUubGFzdDtjb25zdCBpPXQ7cy5ub2Rlcy5wdXNoKGkpO2lmKHNbemZdfHx5ZC50ZXN0KHIpKXt0W3pmXT10cnVlfWlmKCF0W1ZmXSYmIXRbcWZdKXtlLnN0YWNrLnB1c2gocyk7aS5ub2Rlcz1bXTtlLmxhc3Q9aX19aWYocyl7dGhpcy5hdHRycyhzKX19LGF0dHJzKGUpe2UuZm9yRWFjaCgoZT0+e2lmKGUudmFsdWUpe3RoaXMuc3BsaXQoZSxlLnZhbHVlLGUudmFsdWVTdGFydCx0cnVlKX19KSl9LHB1c2hUZXh0KGUsdCl7Y29uc3Qgcj10LnRleHQ7Y29uc3Qgcz0hL1xTLy50ZXN0KHIpO2NvbnN0IGk9ZS5zY3J5bGU7aWYoIWkpe2NvbnN0IGk9ZS5sYXN0O2NvbnN0IG49dGhpcy5jb21wYWN0JiYhaVt6Zl07aWYobiYmcyl7cmV0dXJufXRoaXMuc3BsaXQodCxyLHQuc3RhcnQsbik7aS5ub2Rlcy5wdXNoKHQpfWVsc2UgaWYoIXMpe2kudGV4dD10fX0sc3BsaXQoZSx0LHIscyl7Y29uc3QgaT1lLmV4cHJlc3Npb25zO2NvbnN0IG49W107aWYoaSl7bGV0IGE9MDtpLmZvckVhY2goKGk9Pntjb25zdCBvPXQuc2xpY2UoYSxpLnN0YXJ0LXIpO2NvbnN0IGw9aS50ZXh0O24ucHVzaCh0aGlzLnNhbml0aXNlKGUsbyxzKSxEbShObShsKS50cmltKCkpKTthPWkuZW5kLXJ9KSk7aWYoYTxlLmVuZCl7bi5wdXNoKHRoaXMuc2FuaXRpc2UoZSx0LnNsaWNlKGEpLHMpKX19ZWxzZXtuWzBdPXRoaXMuc2FuaXRpc2UoZSx0LHMpfWUucGFydHM9bi5maWx0ZXIoKGU9PmUpKX0sc2FuaXRpc2UoZSx0LHIpe2xldCBzPWUudW5lc2NhcGU7aWYocyl7bGV0IGU9MDtzPWBcXCR7c31gO3doaWxlKChlPXQuaW5kZXhPZihzLGUpKSE9PS0xKXt0PXQuc3Vic3RyKDAsZSkrdC5zdWJzdHIoZSsxKTtlKyt9fXQ9Tm0odCk7cmV0dXJuIHI/SW0odCk6RG0odCl9fSk7ZnVuY3Rpb24gTW0oZSx0KXtjb25zdCByPXt0eXBlOldmLG5hbWU6IiIsc3RhcnQ6MCxlbmQ6MCxub2RlczpbXX07cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShGbSkse2NvbXBhY3Q6dC5jb21wYWN0IT09ZmFsc2Usc3RvcmU6e2xhc3Q6cixzdGFjazpbXSxzY3J5bGU6bnVsbCxyb290OnIsc3R5bGU6bnVsbCxzY3JpcHQ6bnVsbCxkYXRhOmV9fSl9ZnVuY3Rpb24gX20oZSx0KXtjb25zdCByPVVvKE9tKShlLHR8fE1tKTtyZXR1cm57cGFyc2U6ZT0+TG0ocihlKSl9fWZ1bmN0aW9uIE9tKGUsdCxyKXtjb25zdCBzPU9iamVjdC5hc3NpZ24oe2JyYWNrZXRzOlsieyIsIn0iXX0sZSk7cmV0dXJue29wdGlvbnM6cyxyZWdleENhY2hlOnt9LHBvczowLGNvdW50Oi0xLHJvb3Q6bnVsbCxsYXN0Om51bGwsc2NyeWxlOm51bGwsYnVpbGRlcjp0KHIscyksZGF0YTpyfX1mdW5jdGlvbiBMbShlKXtjb25zdHtkYXRhOnR9PWU7Qm0oZSk7amQoZSk7aWYoZS5jb3VudCl7VGQodCxlLmNvdW50PjA/bmQ6c2QsZS5wb3MpfXJldHVybntkYXRhOnQsb3V0cHV0OmUuYnVpbGRlci5nZXQoKX19ZnVuY3Rpb24gQm0oZSx0KXtjb25zdHtkYXRhOnJ9PWU7Y29uc3Qgcz1yLmxlbmd0aDtpZihlLnBvczxzJiZlLmNvdW50KXtCbShlLFJtKGUsdCkpfX1mdW5jdGlvbiBSbShlLHQpe3N3aXRjaCh0KXtjYXNlIFdmOnJldHVybiBBbShlKTtjYXNlIEtmOnJldHVybiBtbShlKTtkZWZhdWx0OnJldHVybiBDbShlKX19Y29uc3Qgam09SGY7Y29uc3QgVW09cmQ7Y29uc3Qgem09ImJpbmRpbmdUeXBlcyI7Y29uc3QgVm09IkVBQ0giO2NvbnN0IHFtPSJJRiI7Y29uc3QgR209IlRBRyI7Y29uc3QgWG09IlNMT1QiO2NvbnN0IEptPSJleHByZXNzaW9uVHlwZXMiO2NvbnN0IEhtPSJBVFRSSUJVVEUiO2NvbnN0IFdtPSJWQUxVRSI7Y29uc3QgS209IlRFWFQiO2NvbnN0ICRtPSJFVkVOVCI7Y29uc3QgWW09InRlbXBsYXRlIjtjb25zdCBRbT0iX3Njb3BlIjtjb25zdCBabT0iZ2V0Q29tcG9uZW50Ijtjb25zdCBleT0ic2VsZWN0b3IiO2NvbnN0IHR5PSJnZXRDb21wb25lbnQiO2NvbnN0IHJ5PSJ0ZW1wbGF0ZSI7Y29uc3Qgc3k9InR5cGUiO2NvbnN0IGl5PSJyZWR1bmRhbnRBdHRyaWJ1dGUiO2NvbnN0IG55PSJjb25kaXRpb24iO2NvbnN0IGF5PSJpdGVtTmFtZSI7Y29uc3Qgb3k9ImdldEtleSI7Y29uc3QgbHk9ImluZGV4TmFtZSI7Y29uc3QgdXk9ImV2YWx1YXRlIjtjb25zdCBjeT0ibmFtZSI7Y29uc3QgaHk9InNsb3RzIjtjb25zdCBweT0iZXhwcmVzc2lvbnMiO2NvbnN0IGZ5PSJjaGlsZE5vZGVJbmRleCI7Y29uc3QgZHk9ImJpbmRpbmdzIjtjb25zdCBteT0iaWQiO2NvbnN0IHl5PSJodG1sIjtjb25zdCBneT0iYXR0cmlidXRlcyI7Y29uc3QgeHk9ImlmIjtjb25zdCB2eT0iZWFjaCI7Y29uc3QgYnk9ImtleSI7Y29uc3QgRXk9InNsb3QiO2NvbnN0IFN5PSJuYW1lIjtjb25zdCBUeT0iaXMiO2NvbnN0IEF5PSJkZWZhdWx0Ijtjb25zdCB3eT0iICI7Y29uc3QgQ3k9ImV4cHIiO2NvbnN0IFB5PSJzbG90Ijtjb25zdCBEeT0icHJvZ3Jlc3MiO2NvbnN0IGt5PSJ0ZW1wbGF0ZSI7am0uSVNfUkFXO2NvbnN0IE55PWptLklTX1ZPSUQ7Y29uc3QgSXk9am0uSVNfQ1VTVE9NO2NvbnN0IEZ5PWptLklTX0JPT0xFQU47Y29uc3QgTXk9am0uSVNfU1BSRUFEO2Z1bmN0aW9uIF95KGUpe3JldHVyblskeSxzZyxyZyxSeSxqeV0uZXZlcnkoKHQ9PiF0KGUpKSl9ZnVuY3Rpb24gT3koZSl7cmV0dXJuIEh5KGUpJiYheWEodGcoRXksZSkpJiYhWnkoZSkmJiFReShlKX1mdW5jdGlvbiBMeShlKXtsZXR7c2NvcGU6dCxub2RlOnJ9PWU7aWYoci5vYmplY3Qpe3JldHVybiBMeSh7bm9kZTpyLm9iamVjdCxzY29wZTp0fSl9cmV0dXJuIEJvb2xlYW4oZ2Yocil8fHlmKHIpfHxtZihyKXx8b2Yocil8fEJ5KHQscikpfWZ1bmN0aW9uIEJ5KGUsdCl7Y29uc3Qgcj1mdW5jdGlvbiByKHMpe2lmKHM9PT12b2lkIDApe3M9ZmFsc2V9dWEudmlzaXQodCx7dmlzaXRJZGVudGlmaWVyKHQpe2lmKGUubG9va3VwKGNTKHQubm9kZSkpKXtzPXRydWV9dGhpcy5hYm9ydCgpfX0pO3JldHVybiBzfTtyZXR1cm4gcigpfWZ1bmN0aW9uIFJ5KGUpe3JldHVybiEhKGVbSXldfHxlZyhlKSl9ZnVuY3Rpb24gankoZSl7cmV0dXJuIGUubmFtZT09PVB5fWZ1bmN0aW9uIFV5KGUpe3JldHVybiEhZVtOeV19ZnVuY3Rpb24genkoZSl7cmV0dXJuIGUudHlwZT09PVVtLlRBR31mdW5jdGlvbiBWeShlKXtyZXR1cm4gZS50eXBlPT09VW0uVEVYVH1mdW5jdGlvbiBxeShlKXtyZXR1cm4gZS5pc1Jvb3R9ZnVuY3Rpb24gR3koZSl7cmV0dXJuIGVbTXldfWZ1bmN0aW9uIFh5KGUpe3JldHVybiBlLm5hbWU9PT0idmFsdWUifWZ1bmN0aW9uIEp5KGUpe3JldHVybiBlLm5hbWU9PT1EeX1mdW5jdGlvbiBIeShlKXtyZXR1cm4gZS5uYW1lPT09a3l9Y29uc3QgV3k9KCgpPT57Y29uc3QgZT0vXm9uLztyZXR1cm4gdD0+ZS50ZXN0KHQubmFtZSl9KSgpO2Z1bmN0aW9uIEt5KGUpe3JldHVybiBlLnRyaW0oKS5pbmRleE9mKCI8ISIpPT09MH1mdW5jdGlvbiAkeShlKXtyZXR1cm4hIShlLmV4cHJlc3Npb25zfHxMUyhlKS5zb21lKChlPT4keShlKSkpfHxlLm5vZGVzJiZlLm5vZGVzLnNvbWUoKGU9PlZ5KGUpJiYkeShlKSkpKX1mdW5jdGlvbiBZeShlKXtyZXR1cm5bc2cscmcsUnldLnNvbWUoKHQ9PnQoZSkpKX1jb25zdCBReT12byhCb29sZWFuLHJnKTtjb25zdCBaeT12byhCb29sZWFuLHNnKTtjb25zdCBlZz12byhCb29sZWFuLG5nKTt2byhCb29sZWFuLGlnKTtmdW5jdGlvbiB0ZyhlLHQpe3JldHVybiB0LmF0dHJpYnV0ZXMmJnQuYXR0cmlidXRlcy5maW5kKCh0PT5jUyh0KT09PWUpKX1mdW5jdGlvbiByZyhlKXtyZXR1cm4gdGcoeHksZSl9ZnVuY3Rpb24gc2coZSl7cmV0dXJuIHRnKHZ5LGUpfWZ1bmN0aW9uIGlnKGUpe3JldHVybiB0ZyhieSxlKX1mdW5jdGlvbiBuZyhlKXtyZXR1cm4gdGcoVHksZSl9ZnVuY3Rpb24gYWcoZSl7cmV0dXJuIExTKGUpLmZpbHRlcigoZT0+ISR5KGUpKSl9ZnVuY3Rpb24gb2coZSl7cmV0dXJuIExTKGUpLmZpbHRlcigkeSl9ZnVuY3Rpb24gbGcoZSx0LHIpe3JldHVybiBjYS5vYmplY3RFeHByZXNzaW9uKFtmYShzeSxjYS5tZW1iZXJFeHByZXNzaW9uKGNhLmlkZW50aWZpZXIoSm0pLGNhLmlkZW50aWZpZXIoSG0pLGZhbHNlKSksZmEoY3ksR3koZSk/cGEoKTpjYS5saXRlcmFsKGUubmFtZSkpLGZhKHV5LEpTKGUsdCxyKSldKX1mdW5jdGlvbiB1ZyhlLHQscil7cmV0dXJuIGNhLm9iamVjdEV4cHJlc3Npb24oW2ZhKHN5LGNhLm1lbWJlckV4cHJlc3Npb24oY2EuaWRlbnRpZmllcihKbSksY2EuaWRlbnRpZmllcigkbSksZmFsc2UpKSxmYShjeSxjYS5saXRlcmFsKGUubmFtZSkpLGZhKHV5LEpTKGUsdCxyKSldKX12YXIgY2c9JyInO3ZhciBoZz0iJiI7dmFyIHBnPSInIjt2YXIgZmc9IjwiO3ZhciBkZz0iPiI7dmFyIG1nPSLCoCI7dmFyIHlnPSLCoSI7dmFyIGdnPSLCoiI7dmFyIHhnPSLCoyI7dmFyIHZnPSLCpCI7dmFyIGJnPSLCpSI7dmFyIEVnPSLCpiI7dmFyIFNnPSLCpyI7dmFyIFRnPSLCqCI7dmFyIEFnPSLCqSI7dmFyIHdnPSLCqiI7dmFyIENnPSLCqyI7dmFyIFBnPSLCrCI7dmFyIERnPSLCrSI7dmFyIGtnPSLCriI7dmFyIE5nPSLCryI7dmFyIElnPSLCsCI7dmFyIEZnPSLCsSI7dmFyIE1nPSLCsiI7dmFyIF9nPSLCsyI7dmFyIE9nPSLCtCI7dmFyIExnPSLCtSI7dmFyIEJnPSLCtiI7dmFyIFJnPSLCtyI7dmFyIGpnPSLCuCI7dmFyIFVnPSLCuSI7dmFyIHpnPSLCuiI7dmFyIFZnPSLCuyI7dmFyIHFnPSLCvCI7dmFyIEdnPSLCvSI7dmFyIFhnPSLCviI7dmFyIEpnPSLCvyI7dmFyIEhnPSLDgCI7dmFyIFdnPSLDgSI7dmFyIEtnPSLDgiI7dmFyICRnPSLDgyI7dmFyIFlnPSLDhCI7dmFyIFFnPSLDhSI7dmFyIFpnPSLDhiI7dmFyIGV4PSLDhyI7dmFyIHR4PSLDiCI7dmFyIHJ4PSLDiSI7dmFyIHN4PSLDiiI7dmFyIGl4PSLDiyI7dmFyIG54PSLDjCI7dmFyIGF4PSLDjSI7dmFyIG94PSLDjiI7dmFyIGx4PSLDjyI7dmFyIHV4PSLDkCI7dmFyIGN4PSLDkSI7dmFyIGh4PSLDkiI7dmFyIHB4PSLDkyI7dmFyIGZ4PSLDlCI7dmFyIGR4PSLDlSI7dmFyIG14PSLDliI7dmFyIHl4PSLDlyI7dmFyIGd4PSLDmCI7dmFyIHh4PSLDmSI7dmFyIHZ4PSLDmiI7dmFyIGJ4PSLDmyI7dmFyIEV4PSLDnCI7dmFyIFN4PSLDnSI7dmFyIFR4PSLDniI7dmFyIEF4PSLDnyI7dmFyIHd4PSLDoCI7dmFyIEN4PSLDoSI7dmFyIFB4PSLDoiI7dmFyIER4PSLDoyI7dmFyIGt4PSLDpCI7dmFyIE54PSLDpSI7dmFyIEl4PSLDpiI7dmFyIEZ4PSLDpyI7dmFyIE14PSLDqCI7dmFyIF94PSLDqSI7dmFyIE94PSLDqiI7dmFyIEx4PSLDqyI7dmFyIEJ4PSLDrCI7dmFyIFJ4PSLDrSI7dmFyIGp4PSLDriI7dmFyIFV4PSLDryI7dmFyIHp4PSLDsCI7dmFyIFZ4PSLDsSI7dmFyIHF4PSLDsiI7dmFyIEd4PSLDsyI7dmFyIFh4PSLDtCI7dmFyIEp4PSLDtSI7dmFyIEh4PSLDtiI7dmFyIFd4PSLDtyI7dmFyIEt4PSLDuCI7dmFyICR4PSLDuSI7dmFyIFl4PSLDuiI7dmFyIFF4PSLDuyI7dmFyIFp4PSLDvCI7dmFyIGV2PSLDvSI7dmFyIHR2PSLDviI7dmFyIHJ2PSLDvyI7dmFyIHN2PSLFkiI7dmFyIGl2PSLFkyI7dmFyIG52PSLFoCI7dmFyIGF2PSLFoSI7dmFyIG92PSLFuCI7dmFyIGx2PSLGkiI7dmFyIHV2PSLLhiI7dmFyIGN2PSLLnCI7dmFyIGh2PSLOkSI7dmFyIHB2PSLOkiI7dmFyIGZ2PSLOkyI7dmFyIGR2PSLOlCI7dmFyIG12PSLOlSI7dmFyIHl2PSLOliI7dmFyIGd2PSLOlyI7dmFyIHh2PSLOmCI7dmFyIHZ2PSLOmSI7dmFyIGJ2PSLOmiI7dmFyIEV2PSLOmyI7dmFyIFN2PSLOnCI7dmFyIFR2PSLOnSI7dmFyIEF2PSLOniI7dmFyIHd2PSLOnyI7dmFyIEN2PSLOoCI7dmFyIFB2PSLOoSI7dmFyIER2PSLOoyI7dmFyIGt2PSLOpCI7dmFyIE52PSLOpSI7dmFyIEl2PSLOpiI7dmFyIEZ2PSLOpyI7dmFyIE12PSLOqCI7dmFyIF92PSLOqSI7dmFyIE92PSLOsSI7dmFyIEx2PSLOsiI7dmFyIEJ2PSLOsyI7dmFyIFJ2PSLOtCI7dmFyIGp2PSLOtSI7dmFyIFV2PSLOtiI7dmFyIHp2PSLOtyI7dmFyIFZ2PSLOuCI7dmFyIHF2PSLOuSI7dmFyIEd2PSLOuiI7dmFyIFh2PSLOuyI7dmFyIEp2PSLOvCI7dmFyIEh2PSLOvSI7dmFyIFd2PSLOviI7dmFyIEt2PSLOvyI7dmFyICR2PSLPgCI7dmFyIFl2PSLPgSI7dmFyIFF2PSLPgiI7dmFyIFp2PSLPgyI7dmFyIGViPSLPhCI7dmFyIHRiPSLPhSI7dmFyIHJiPSLPhiI7dmFyIHNiPSLPhyI7dmFyIGliPSLPiCI7dmFyIG5iPSLPiSI7dmFyIGFiPSLPkSI7dmFyIG9iPSLPkiI7dmFyIGxiPSLPliI7dmFyIHViPSLigIIiO3ZhciBjYj0i4oCDIjt2YXIgaGI9IuKAiSI7dmFyIHBiPSLigIwiO3ZhciBmYj0i4oCNIjt2YXIgZGI9IuKAjiI7dmFyIG1iPSLigI8iO3ZhciB5Yj0i4oCTIjt2YXIgZ2I9IuKAlCI7dmFyIHhiPSLigJgiO3ZhciB2Yj0i4oCZIjt2YXIgYmI9IuKAmiI7dmFyIEViPSLigJwiO3ZhciBTYj0i4oCdIjt2YXIgVGI9IuKAniI7dmFyIEFiPSLigKAiO3ZhciB3Yj0i4oChIjt2YXIgQ2I9IuKAoiI7dmFyIFBiPSLigKYiO3ZhciBEYj0i4oCwIjt2YXIga2I9IuKAsiI7dmFyIE5iPSLigLMiO3ZhciBJYj0i4oC5Ijt2YXIgRmI9IuKAuiI7dmFyIE1iPSLigL4iO3ZhciBfYj0i4oGEIjt2YXIgT2I9IuKCrCI7dmFyIExiPSLihJEiO3ZhciBCYj0i4oSYIjt2YXIgUmI9IuKEnCI7dmFyIGpiPSLihKIiO3ZhciBVYj0i4oS1Ijt2YXIgemI9IuKGkCI7dmFyIFZiPSLihpEiO3ZhciBxYj0i4oaSIjt2YXIgR2I9IuKGkyI7dmFyIFhiPSLihpQiO3ZhciBKYj0i4oa1Ijt2YXIgSGI9IuKHkCI7dmFyIFdiPSLih5EiO3ZhciBLYj0i4oeSIjt2YXIgJGI9IuKHkyI7dmFyIFliPSLih5QiO3ZhciBRYj0i4oiAIjt2YXIgWmI9IuKIgiI7dmFyIGVFPSLiiIMiO3ZhciB0RT0i4oiFIjt2YXIgckU9IuKIhyI7dmFyIHNFPSLiiIgiO3ZhciBpRT0i4oiJIjt2YXIgbkU9IuKIiyI7dmFyIGFFPSLiiI8iO3ZhciBvRT0i4oiRIjt2YXIgbEU9IuKIkiI7dmFyIHVFPSLiiJciO3ZhciBjRT0i4oiaIjt2YXIgaEU9IuKInSI7dmFyIHBFPSLiiJ4iO3ZhciBmRT0i4oigIjt2YXIgZEU9IuKIpyI7dmFyIG1FPSLiiKgiO3ZhciB5RT0i4oipIjt2YXIgZ0U9IuKIqiI7dmFyIHhFPSLiiKsiO3ZhciB2RT0i4oi0Ijt2YXIgYkU9IuKIvCI7dmFyIEVFPSLiiYUiO3ZhciBTRT0i4omIIjt2YXIgVEU9IuKJoCI7dmFyIEFFPSLiiaEiO3ZhciB3RT0i4omkIjt2YXIgQ0U9IuKJpSI7dmFyIFBFPSLiioIiO3ZhciBERT0i4oqDIjt2YXIga0U9IuKKhCI7dmFyIE5FPSLiioYiO3ZhciBJRT0i4oqHIjt2YXIgRkU9IuKKlSI7dmFyIE1FPSLiipciO3ZhciBfRT0i4oqlIjt2YXIgT0U9IuKLhSI7dmFyIExFPSLijIgiO3ZhciBCRT0i4oyJIjt2YXIgUkU9IuKMiiI7dmFyIGpFPSLijIsiO3ZhciBVRT0i4oypIjt2YXIgekU9IuKMqiI7dmFyIFZFPSLil4oiO3ZhciBxRT0i4pmgIjt2YXIgR0U9IuKZoyI7dmFyIFhFPSLimaUiO3ZhciBKRT0i4pmmIjt2YXIgSEU9e3F1b3Q6Y2csYW1wOmhnLGFwb3M6cGcsbHQ6ZmcsZ3Q6ZGcsbmJzcDptZyxpZXhjbDp5ZyxjZW50OmdnLHBvdW5kOnhnLGN1cnJlbjp2Zyx5ZW46YmcsYnJ2YmFyOkVnLHNlY3Q6U2csdW1sOlRnLGNvcHk6QWcsb3JkZjp3ZyxsYXF1bzpDZyxub3Q6UGcsc2h5OkRnLHJlZzprZyxtYWNyOk5nLGRlZzpJZyxwbHVzbW46Rmcsc3VwMjpNZyxzdXAzOl9nLGFjdXRlOk9nLG1pY3JvOkxnLHBhcmE6QmcsbWlkZG90OlJnLGNlZGlsOmpnLHN1cDE6VWcsb3JkbTp6ZyxyYXF1bzpWZyxmcmFjMTQ6cWcsZnJhYzEyOkdnLGZyYWMzNDpYZyxpcXVlc3Q6SmcsQWdyYXZlOkhnLEFhY3V0ZTpXZyxBY2lyYzpLZyxBdGlsZGU6JGcsQXVtbDpZZyxBcmluZzpRZyxBRWxpZzpaZyxDY2VkaWw6ZXgsRWdyYXZlOnR4LEVhY3V0ZTpyeCxFY2lyYzpzeCxFdW1sOml4LElncmF2ZTpueCxJYWN1dGU6YXgsSWNpcmM6b3gsSXVtbDpseCxFVEg6dXgsTnRpbGRlOmN4LE9ncmF2ZTpoeCxPYWN1dGU6cHgsT2NpcmM6ZngsT3RpbGRlOmR4LE91bWw6bXgsdGltZXM6eXgsT3NsYXNoOmd4LFVncmF2ZTp4eCxVYWN1dGU6dngsVWNpcmM6YngsVXVtbDpFeCxZYWN1dGU6U3gsVEhPUk46VHgsc3psaWc6QXgsYWdyYXZlOnd4LGFhY3V0ZTpDeCxhY2lyYzpQeCxhdGlsZGU6RHgsYXVtbDpreCxhcmluZzpOeCxhZWxpZzpJeCxjY2VkaWw6RngsZWdyYXZlOk14LGVhY3V0ZTpfeCxlY2lyYzpPeCxldW1sOkx4LGlncmF2ZTpCeCxpYWN1dGU6UngsaWNpcmM6angsaXVtbDpVeCxldGg6engsbnRpbGRlOlZ4LG9ncmF2ZTpxeCxvYWN1dGU6R3gsb2NpcmM6WHgsb3RpbGRlOkp4LG91bWw6SHgsZGl2aWRlOld4LG9zbGFzaDpLeCx1Z3JhdmU6JHgsdWFjdXRlOll4LHVjaXJjOlF4LHV1bWw6WngseWFjdXRlOmV2LHRob3JuOnR2LHl1bWw6cnYsT0VsaWc6c3Ysb2VsaWc6aXYsU2Nhcm9uOm52LHNjYXJvbjphdixZdW1sOm92LGZub2Y6bHYsY2lyYzp1dix0aWxkZTpjdixBbHBoYTpodixCZXRhOnB2LEdhbW1hOmZ2LERlbHRhOmR2LEVwc2lsb246bXYsWmV0YTp5dixFdGE6Z3YsVGhldGE6eHYsSW90YTp2dixLYXBwYTpidixMYW1iZGE6RXYsTXU6U3YsTnU6VHYsWGk6QXYsT21pY3Jvbjp3dixQaTpDdixSaG86UHYsU2lnbWE6RHYsVGF1Omt2LFVwc2lsb246TnYsUGhpOkl2LENoaTpGdixQc2k6TXYsT21lZ2E6X3YsYWxwaGE6T3YsYmV0YTpMdixnYW1tYTpCdixkZWx0YTpSdixlcHNpbG9uOmp2LHpldGE6VXYsZXRhOnp2LHRoZXRhOlZ2LGlvdGE6cXYsa2FwcGE6R3YsbGFtYmRhOlh2LG11Okp2LG51Okh2LHhpOld2LG9taWNyb246S3YscGk6JHYscmhvOll2LHNpZ21hZjpRdixzaWdtYTpadix0YXU6ZWIsdXBzaWxvbjp0YixwaGk6cmIsY2hpOnNiLHBzaTppYixvbWVnYTpuYix0aGV0YXN5bTphYix1cHNpaDpvYixwaXY6bGIsZW5zcDp1YixlbXNwOmNiLHRoaW5zcDpoYix6d25qOnBiLHp3ajpmYixscm06ZGIscmxtOm1iLG5kYXNoOnliLG1kYXNoOmdiLGxzcXVvOnhiLHJzcXVvOnZiLHNicXVvOmJiLGxkcXVvOkViLHJkcXVvOlNiLGJkcXVvOlRiLGRhZ2dlcjpBYixEYWdnZXI6d2IsYnVsbDpDYixoZWxsaXA6UGIscGVybWlsOkRiLHByaW1lOmtiLFByaW1lOk5iLGxzYXF1bzpJYixyc2FxdW86RmIsb2xpbmU6TWIsZnJhc2w6X2IsZXVybzpPYixpbWFnZTpMYix3ZWllcnA6QmIscmVhbDpSYix0cmFkZTpqYixhbGVmc3ltOlViLGxhcnI6emIsdWFycjpWYixyYXJyOnFiLGRhcnI6R2IsaGFycjpYYixjcmFycjpKYixsQXJyOkhiLHVBcnI6V2IsckFycjpLYixkQXJyOiRiLGhBcnI6WWIsZm9yYWxsOlFiLHBhcnQ6WmIsZXhpc3Q6ZUUsZW1wdHk6dEUsbmFibGE6ckUsaXNpbjpzRSxub3RpbjppRSxuaTpuRSxwcm9kOmFFLHN1bTpvRSxtaW51czpsRSxsb3dhc3Q6dUUscmFkaWM6Y0UscHJvcDpoRSxpbmZpbjpwRSxhbmc6ZkUsYW5kOmRFLG9yOm1FLGNhcDp5RSxjdXA6Z0UsaW50OnhFLHRoZXJlNDp2RSxzaW06YkUsY29uZzpFRSxhc3ltcDpTRSxuZTpURSxlcXVpdjpBRSxsZTp3RSxnZTpDRSxzdWI6UEUsc3VwOkRFLG5zdWI6a0Usc3ViZTpORSxzdXBlOklFLG9wbHVzOkZFLG90aW1lczpNRSxwZXJwOl9FLHNkb3Q6T0UsbGNlaWw6TEUscmNlaWw6QkUsbGZsb29yOlJFLHJmbG9vcjpqRSxsYW5nOlVFLHJhbmc6ekUsbG96OlZFLHNwYWRlczpxRSxjbHViczpHRSxoZWFydHM6WEUsZGlhbXM6SkV9O2NvbnN0IFdFPS8mKFxTKyk7L2c7Y29uc3QgS0U9L15bXGRhLWZBLUZdKyQvO2NvbnN0ICRFPS9eXGQrJC87ZnVuY3Rpb24gWUUoZSl7Y29uc3QgdD1lLnN1YnN0cigyKTtyZXR1cm4gS0UudGVzdCh0KT9TdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludCh0LDE2KSk6ZX1mdW5jdGlvbiBRRShlKXtjb25zdCB0PWUuc3Vic3RyKDEpO3JldHVybiAkRS50ZXN0KHQpP1N0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KHQsMTApKTplfWZ1bmN0aW9uIFpFKGUpe3JldHVybiBlLnJlcGxhY2UoV0UsKChlLHQpPT57Y29uc3RbcixzXT10O2lmKHI9PT0iIyIpe3JldHVybiBzPT09IngiP1lFKHQpOlFFKHQpfWVsc2V7cmV0dXJuIEhFW3RdfHx0fX0pKX1mdW5jdGlvbiBlUyhlKXtyZXR1cm4oZS50cmltRW5kfHxlLnRyaW1SaWdodCkuYXBwbHkoZSl9ZnVuY3Rpb24gdFMoZSl7cmV0dXJuKGUudHJpbVN0YXJ0fHxlLnRyaW1MZWZ0KS5hcHBseShlKX1mdW5jdGlvbiByUyhlLHQpe3JldHVybiBlLnJlcGxhY2UoUmVnRXhwKGBcXFxcJHt0fWAsImdtIiksdCl9ZnVuY3Rpb24gc1MoZSx0KXtyZXR1cm4gZS5leHByZXNzaW9ucy5yZWR1Y2UoKChyLHMsaSk9Pntjb25zdCBuPWk/ZS5leHByZXNzaW9uc1tpLTFdLmVuZDplLnN0YXJ0O2NvbnN0IGE9WkUodC5zdWJzdHJpbmcobixzLnN0YXJ0KSk7ci5wdXNoKGk9PT0wP3RTKGEpOmEpO2lmKGk9PT1lLmV4cHJlc3Npb25zLmxlbmd0aC0xKXIucHVzaChaRShlUyh0LnN1YnN0cmluZyhzLmVuZCxlLmVuZCkpKSk7cmV0dXJuIHJ9KSxbXSkuZmlsdGVyKChlPT4hS3koZSkpKS5tYXAoKHQ9PmUudW5lc2NhcGU/clModCxlLnVuZXNjYXBlKTp0KSl9ZnVuY3Rpb24gaVMoZSx0LHIpe2lmKGUucGFydHMubGVuZ3RoPT09MSlyZXR1cm4gVFMoZS5leHByZXNzaW9uc1swXSx0LHIpO2NvbnN0IHM9c1MoZSxyKTtjb25zdCBpPXMucmVkdWNlKCgocyxpLG4pPT57Y29uc3QgYT1lLmV4cHJlc3Npb25zW25dO3JldHVyblsuLi5zLGNhLmxpdGVyYWwoaSksYT9UUyhhLHQscik6cGEoKV19KSxbXSkuZmlsdGVyKChlPT4hdGYoZSl8fGUudmFsdWUpKTtyZXR1cm4gVlMoaSl9ZnVuY3Rpb24gblMoZSx0LHIscyl7cmV0dXJuIGNhLm9iamVjdEV4cHJlc3Npb24oW2ZhKHN5LGNhLm1lbWJlckV4cHJlc3Npb24oY2EuaWRlbnRpZmllcihKbSksY2EuaWRlbnRpZmllcihLbSksZmFsc2UpKSxmYShmeSxjYS5saXRlcmFsKHMpKSxmYSh1eSxFUyhpUyhlLHQscikpKV0pfWZ1bmN0aW9uIGFTKGUsdCxyKXtyZXR1cm4gY2Eub2JqZWN0RXhwcmVzc2lvbihbZmEoc3ksY2EubWVtYmVyRXhwcmVzc2lvbihjYS5pZGVudGlmaWVyKEptKSxjYS5pZGVudGlmaWVyKFdtKSxmYWxzZSkpLGZhKHV5LEpTKGUsdCxyKSldKX1mdW5jdGlvbiBvUyhlLHQscixzLGkpe3N3aXRjaCh0cnVlKXtjYXNlIFZ5KGUpOnJldHVybiBuUyhlLHQscixzKTtjYXNlIFh5KGUpJiZsbShpLm5hbWUpJiYhSnkoaSk6cmV0dXJuIGFTKGUsdCxyKTtjYXNlIFd5KGUpOnJldHVybiB1ZyhlLHQscik7ZGVmYXVsdDpyZXR1cm4gbGcoZSx0LHIpfX1mdW5jdGlvbiBsUyhlLHQscil7cmV0dXJuIG9nKGUpLm1hcCgocz0+b1Mocyx0LHIsMCxlKSkpfWNvbnN0IHVTPWNhLmlkZW50aWZpZXIoUW0pO2NvbnN0IGNTPWU9PmUmJmUubmFtZT9lLm5hbWU6ZTtmdW5jdGlvbiBoUyhlLHQpe2UucmVwbGFjZShjYS5tZW1iZXJFeHByZXNzaW9uKHVTLHQsZmFsc2UpKX1mdW5jdGlvbiBwUyhlKXtpZighTHkoZSkpe2hTKGUsZS5ub2RlKTtyZXR1cm4gZmFsc2V9dGhpcy50cmF2ZXJzZShlKX1mdW5jdGlvbiBmUyhlKXtjb25zdCB0PSgpPT50aGlzLnRyYXZlcnNlKGUuZ2V0KCJvYmplY3QiKSk7Y29uc3Qgcj1lLm5vZGUub2JqZWN0O3N3aXRjaCh0cnVlKXtjYXNlIEx5KGUpOmlmKHIuYXJndW1lbnRzJiZyLmFyZ3VtZW50cy5sZW5ndGgpe3QoKX1icmVhaztjYXNlIWUudmFsdWUuY29tcHV0ZWQmJmVmKHIpOmhTKGUsZS5ub2RlKTticmVhaztkZWZhdWx0OnRoaXMudHJhdmVyc2UoZSl9cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIGRTKGUpe2NvbnN0IHQ9ZS5ub2RlLnZhbHVlO2NvbnN0IHI9ZS5ub2RlLnNob3J0aGFuZDtpZihlZih0KXx8Y2YodCl8fHIpe2lmKHIpZS5ub2RlLnNob3J0aGFuZD1mYWxzZTtwUy5jYWxsKHRoaXMsZS5nZXQoInZhbHVlIikpfWVsc2V7dGhpcy50cmF2ZXJzZShlLmdldCgidmFsdWUiKSl9cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIG1TKGUpe2UucmVwbGFjZSh1Uyk7dGhpcy50cmF2ZXJzZShlKX1mdW5jdGlvbiB5UyhlKXtjb25zdCB0PWUucGFyZW50LnZhbHVlO2lmKCFjZih0KXx8dC5jb21wdXRlZCl7cFMuY2FsbCh0aGlzLGUpfXJldHVybiBmYWxzZX1mdW5jdGlvbiBnUyhlKXtjb25zdCB0PSgpPT5mYWxzZTt1YS52aXNpdChlLHt2aXNpdElkZW50aWZpZXI6eVMsdmlzaXRNZW1iZXJFeHByZXNzaW9uOmZTLHZpc2l0T2JqZWN0UHJvcGVydHk6ZFMsdmlzaXRUaGlzRXhwcmVzc2lvbjptUyx2aXNpdENsYXNzRXhwcmVzc2lvbjp0fSk7cmV0dXJuIGV9ZnVuY3Rpb24geFMoZSx0LHIpe2NvbnN0IHM9dD9GZihlLnRleHQscixlKTplLnRleHQ7cmV0dXJuIE1mKGAoJHtzfSlgLHtzb3VyY2VGaWxlTmFtZTp0fSl9ZnVuY3Rpb24gdlMoZSl7cmV0dXJuIGZhKHJ5LGU/d1MoLi4uZSk6cGEoKSl9ZnVuY3Rpb24gYlMoZSl7cmV0dXJuIGUuZXhwcmVzc2lvbnM/ZS5leHByZXNzaW9uc1swXTpPYmplY3QuYXNzaWduKHt9LGUse3RleHQ6ZS52YWx1ZX0pfWZ1bmN0aW9uIEVTKGUpe2NvbnN0IHQ9Y2EuYXJyb3dGdW5jdGlvbkV4cHJlc3Npb24oW3VTXSxlKTtpZihuZihlKSl7ZS5leHRyYT17cGFyZW50aGVzaXplZDp0cnVlfX1yZXR1cm4gdH1mdW5jdGlvbiBTUyhlLHQscil7cmV0dXJuIHZvKEVTLFRTKShlLHQscil9ZnVuY3Rpb24gVFMoZSx0LHIpe3JldHVybiB2byhBUyxnUyx4UykoZSx0LHIpfWZ1bmN0aW9uIEFTKGUpe2NvbnN0IHQ9ZS5wcm9ncmFtLmJvZHk7cmV0dXJuIHRbMF0/dFswXS5leHByZXNzaW9uOnR9ZnVuY3Rpb24gd1MoZSx0KXtyZXR1cm4gY2EuY2FsbEV4cHJlc3Npb24oY2EuaWRlbnRpZmllcihZbSksW2U/Y2EubGl0ZXJhbChlKTpwYSgpLHQ/Y2EuYXJyYXlFeHByZXNzaW9uKHQpOnBhKCldKX1jb25zdCBDUz1lPT5gWyR7ZX1dYDtmdW5jdGlvbiBQUyhlKXtyZXR1cm4gZT9bZmEoaXksY2EubGl0ZXJhbChlKSksZmEoZXksdm8oY2EubGl0ZXJhbCxDUykoZSkpXTpbXX1mdW5jdGlvbiBEUyhlLHQpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LGUse2F0dHJpYnV0ZXM6a1MoTFMoZSksdCl9KX1mdW5jdGlvbiBrUyhlLHQpe2lmKHQpcmV0dXJuIGUuZmlsdGVyKChlPT5lLm5hbWUhPT10KSk7cmV0dXJuIGV9ZnVuY3Rpb24gTlMoZSl7cmV0dXJuIExTKGUpLmZpbHRlcigoZT0+IVt4eSx2eSxieSxFeSxUeV0uaW5jbHVkZXMoZS5uYW1lKSkpfWZ1bmN0aW9uIElTKGUpe3JldHVybntub2RlczpPUyhlKSxpc1Jvb3Q6dHJ1ZX19ZnVuY3Rpb24gRlMoZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sSVMoZSkse2F0dHJpYnV0ZXM6dm8oX1MsTlMpKGUpfSl9ZnVuY3Rpb24gTVMoZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sSVMoZSkse2F0dHJpYnV0ZXM6TlMoZSl9KX1mdW5jdGlvbiBfUyhlKXtyZXR1cm4gZS5tYXAoKGU9PntpZihlLmV4cHJlc3Npb25zKXJldHVybiBlO3JldHVybiBPYmplY3QuYXNzaWduKHt9LGUse2V4cHJlc3Npb25zOlt7c3RhcnQ6ZS52YWx1ZVN0YXJ0LGVuZDplLmVuZCx0ZXh0OmAnJHtlLnZhbHVlfHxlLm5hbWV9J2B9XX0pfSkpfWZ1bmN0aW9uIE9TKGUpe3JldHVybiBlJiZlLm5vZGVzP2Uubm9kZXM6W119ZnVuY3Rpb24gTFMoZSl7cmV0dXJuIGUuYXR0cmlidXRlcz9lLmF0dHJpYnV0ZXM6W119ZnVuY3Rpb24gQlMoZSx0LHIpe2NvbnN0IHM9bmcoZSk7Y29uc3QgaT1lPT5gJyR7ZX0nYDtpZihzKXtyZXR1cm4gcy5leHByZXNzaW9ucz9FUyhxUyhzLHQscikpOlNTKE9iamVjdC5hc3NpZ24oe30scyx7dGV4dDppKHMudmFsdWUpfSksdCxyKX1yZXR1cm4gU1MoT2JqZWN0LmFzc2lnbih7fSxlLHt0ZXh0OmkoY1MoZSkpfSksdCxyKX1mdW5jdGlvbiBSUyhlKXtyZXR1cm4gYWcoZSkubWFwKChlPT5lW0Z5XXx8IWUudmFsdWU/ZS5uYW1lOmAke2UubmFtZX09IiR7alMoZSwidmFsdWUiKS52YWx1ZX0iYCkpLmpvaW4oIiAiKX1mdW5jdGlvbiBqUyhlLHQpe2lmKGUudW5lc2NhcGUpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LGUse1t0XTpyUyhlW3RdLGUudW5lc2NhcGUpfSl9cmV0dXJuIGV9ZnVuY3Rpb24gVVMoZSl7Y29uc3QgdD1SUyhlKTtzd2l0Y2godHJ1ZSl7Y2FzZSB6eShlKTpyZXR1cm5gPCR7ZS5uYW1lfSR7dD9gICR7dH1gOiIifSR7VXkoZSk/Ii8iOiIifT5gO2Nhc2UgVnkoZSk6cmV0dXJuICR5KGUpP3d5OmpTKGUsInRleHQiKS50ZXh0O2RlZmF1bHQ6cmV0dXJuIGUudGV4dHx8IiJ9fWZ1bmN0aW9uIHpTKGUpe3JldHVybiBlLm5hbWU/YDwvJHtlLm5hbWV9PmA6IiJ9ZnVuY3Rpb24gVlMoZSl7cmV0dXJuIGNhLmNhbGxFeHByZXNzaW9uKGNhLm1lbWJlckV4cHJlc3Npb24oY2EuYXJyYXlFeHByZXNzaW9uKGUpLGNhLmlkZW50aWZpZXIoImpvaW4iKSxmYWxzZSksW2NhLmxpdGVyYWwoIiIpXSl9ZnVuY3Rpb24gcVMoZSx0LHIpe2lmKCFlLnBhcnRzfHxlLnBhcnRzLmxlbmd0aD09PTEpe3JldHVybiBUUyhlLmV4cHJlc3Npb25zWzBdLHQscil9Y29uc3Qgcz1bLi4uZS5wYXJ0cy5yZWR1Y2UoKChzLGkpPT57Y29uc3Qgbj1lLmV4cHJlc3Npb25zLmZpbmQoKGU9PmUudGV4dC50cmltKCk9PT1pKSk7cmV0dXJuWy4uLnMsbj9UUyhuLHQscik6Y2EubGl0ZXJhbChaRShpKSldfSksW10pXS5maWx0ZXIoKGU9PiF0ZihlKXx8ZS52YWx1ZSkpO3JldHVybiBWUyhzKX1jb25zdCBHUz1mdW5jdGlvbiBlKHQpe2lmKHQ9PT12b2lkIDApe3Q9MH1yZXR1cm4oKT0+YCR7Q3l9JHt0Kyt9YH0oKTtmdW5jdGlvbiBYUyhlLHQscixzKXtyZXR1cm4gY2EuYXJyYXlFeHByZXNzaW9uKFsuLi52bygodD0+dC5tYXAoKHQ9Pm9TKHQscixzLDAsZSkpKSksKGU9PmUuZmlsdGVyKCR5KSksKGU9PmtTKGUsdCkpLE5TKShlKV0pfWZ1bmN0aW9uIEpTKGUsdCxyKXtyZXR1cm4gJHkoZSk/RVMocVMoZSx0LHIpKTpjYS5hcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihbXSxjYS5saXRlcmFsKGUudmFsdWV8fHRydWUpKX1mdW5jdGlvbiBIUyhlKXtyZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlKSl9Y29uc3QgV1M9ZT0+bGYoZS5sZWZ0KT9lLmxlZnQuZXhwcmVzc2lvbnNbMF06ZS5sZWZ0O2NvbnN0IEtTPWU9PmxmKGUubGVmdCk/ZS5sZWZ0LmV4cHJlc3Npb25zWzFdOm51bGw7Y29uc3QgJFM9ZT0+ZS5yaWdodDtjb25zdCBZUz12byhjYS5saXRlcmFsLGNTKTtjb25zdCBRUz1lPT5mYShheSx2byhZUyxXUykoZSkpO2NvbnN0IFpTPWU9PmZhKGx5LHZvKFlTLEtTKShlKSk7Y29uc3QgZVQ9KGUsdCxyLHMpPT5mYSh1eSx2bygoZT0+U1MoZSxyLHMpKSwoZT0+T2JqZWN0LmFzc2lnbih7fSx0LHt0ZXh0OmhwKGUpLmNvZGV9KSksJFMpKGUpKTtmdW5jdGlvbiB0VChlLHQscil7Y29uc3Qgcz14UyhlLHQscik7Y29uc3QgaT1zLnByb2dyYW0uYm9keTtjb25zdCBuPWlbMF07aWYoIXJmKG4pKXt1byhgVGhlIGVhY2ggZGlyZWN0aXZlcyBzdXBwb3J0ZWQgc2hvdWxkIGJlIG9mIHR5cGUgIkV4cHJlc3Npb25TdGF0ZW1lbnQiLHlvdSBoYXZlIHByb3ZpZGVkIGEgIiR7bi50eXBlfSJgKX1jb25zdHtleHByZXNzaW9uOmF9PW47cmV0dXJuW1FTKGEpLFpTKGEpLGVUKGEsZSx0LHIpXX1mdW5jdGlvbiByVChlLHQscixzKXtjb25zdFtpLG4sYV09W3JnLHNnLGlnXS5tYXAoKHQ9PnQoZSkpKTtjb25zdCBvPWU9PmU/U1MoYlMoZSkscixzKTpwYSgpO3JldHVybiBjYS5vYmplY3RFeHByZXNzaW9uKFtmYShzeSxjYS5tZW1iZXJFeHByZXNzaW9uKGNhLmlkZW50aWZpZXIoem0pLGNhLmlkZW50aWZpZXIoVm0pLGZhbHNlKSksZmEob3ksbyhhKSksZmEobnksbyhpKSksdlMoZ1QoZSxyLHMsdCkpLC4uLlBTKHQpLC4uLnZvKHRULGJTKShuKV0pfWZ1bmN0aW9uIHNUKGUsdCxyLHMpe2NvbnN0IGk9cmcoZSk7cmV0dXJuIGNhLm9iamVjdEV4cHJlc3Npb24oW2ZhKHN5LGNhLm1lbWJlckV4cHJlc3Npb24oY2EuaWRlbnRpZmllcih6bSksY2EuaWRlbnRpZmllcihxbSksZmFsc2UpKSxmYSh1eSxTUyhpLmV4cHJlc3Npb25zWzBdLHIscykpLC4uLlBTKHQpLHZTKGdUKGUscixzLHQpKV0pfWZ1bmN0aW9uIGlUKGUsdCxyKXtjb25zdCBzPU9TKGUpO3JldHVybiBzLmZpbHRlcihWeSkuZmlsdGVyKCR5KS5tYXAoKGk9Pm9TKGksdCxyLHMuaW5kZXhPZihpKSxlKSkpfWZ1bmN0aW9uIG5UKGUsdCxyLHMpe3JldHVybiBjYS5vYmplY3RFeHByZXNzaW9uKFsuLi5PeShlKXx8cXkoZSk/W106UFModCksZmEocHksY2EuYXJyYXlFeHByZXNzaW9uKFsuLi5pVChlLHIscyksLi4ubFMoZSxyLHMpXSkpXSl9ZnVuY3Rpb24gYVQoZSx0LHIscyl7Y29uc3QgaT10ZyhTeSxlKTtjb25zdCBuPWk/aS52YWx1ZTpBeTtyZXR1cm4gY2Eub2JqZWN0RXhwcmVzc2lvbihbZmEoc3ksY2EubWVtYmVyRXhwcmVzc2lvbihjYS5pZGVudGlmaWVyKHptKSxjYS5pZGVudGlmaWVyKFhtKSxmYWxzZSkpLGZhKGd5LFhTKE9iamVjdC5hc3NpZ24oe30sZSx7YXR0cmlidXRlczpMUyhlKS5maWx0ZXIoKGU9PmNTKGUpIT09U3kpKX0pLHQscixzKSksZmEoY3ksY2EubGl0ZXJhbChuKSksLi4uUFModCldKX1mdW5jdGlvbiBvVChlKXtyZXR1cm4gT1MoZSkucmVkdWNlKCgoZSx0KT0+e2NvbnN0IHI9Y1QodCk7aWYocil7ZVtyLnZhbHVlXT10fWVsc2V7ZS5kZWZhdWx0PU1TKHtub2RlczpbLi4uT1MoZS5kZWZhdWx0KSx0XX0pfXJldHVybiBlfSkse2RlZmF1bHQ6bnVsbH0pfWZ1bmN0aW9uIGxUKGUsdCxyLHMpe2NvbnN0IGk9T2JqZWN0LmFzc2lnbih7fSx0LHthdHRyaWJ1dGVzOkxTKHQpfSk7Y29uc3RbbixhXT14VChpLHIscyk7cmV0dXJuIGNhLm9iamVjdEV4cHJlc3Npb24oW2ZhKG15LGNhLmxpdGVyYWwoZSkpLGZhKHl5LGNhLmxpdGVyYWwobikpLGZhKGR5LGNhLmFycmF5RXhwcmVzc2lvbihhKSldKX1mdW5jdGlvbiB1VChlLHQscil7cmV0dXJuIGNhLmFycmF5RXhwcmVzc2lvbihbLi4udm8oKGU9PmUubWFwKChlPT57bGV0W3MsaV09ZTtyZXR1cm4gbFQocyxpLHQscil9KSkpLChlPT5lLmZpbHRlcigoZT0+e2xldFssdF09ZTtyZXR1cm4gdH0pKSksT2JqZWN0LmVudHJpZXMsb1QpKGUpXSl9ZnVuY3Rpb24gY1QoZSl7cmV0dXJuIExTKGUpLmZpbmQoKGU9PmUubmFtZT09PUV5KSl9ZnVuY3Rpb24gaFQoZSx0LHIscyl7cmV0dXJuIGNhLm9iamVjdEV4cHJlc3Npb24oW2ZhKHN5LGNhLm1lbWJlckV4cHJlc3Npb24oY2EuaWRlbnRpZmllcih6bSksY2EuaWRlbnRpZmllcihHbSksZmFsc2UpKSxmYSh0eSxjYS5pZGVudGlmaWVyKFptKSksZmEodXksQlMoZSxyLHMpKSxmYShoeSx1VChlLHIscykpLGZhKGd5LFhTKGUsdCxyLHMpKSwuLi5QUyh0KV0pfWNvbnN0IHBUPU9iamVjdC5mcmVlemUoe2h0bWw6W10sYmluZGluZ3M6W10scGFyZW50Om51bGx9KTtmdW5jdGlvbiBmVChlLHQpe2lmKCF0KXJldHVybiBlO3JldHVybiBPYmplY3QuYXNzaWduKHt9LGUse2F0dHJpYnV0ZXM6W3tuYW1lOnQsdmFsdWU6dH0sLi4uTFMoZSldfSl9ZnVuY3Rpb24gZFQoZSx0LHIscyl7c3dpdGNoKHRydWUpe2Nhc2UgVnkoZSk6cmV0dXJuW1VTKGUpLFtdXTtkZWZhdWx0OnJldHVybiBtVChlLHQscil9fWZ1bmN0aW9uIG1UKGUsdCxyKXtjb25zdCBzPXF5KGUpP251bGw6R1MoKTtjb25zdCBpPWZUKGUscyk7Y29uc3Qgbj1VUyhpKTtzd2l0Y2godHJ1ZSl7Y2FzZSBaeShpKTpyZXR1cm5bbixbclQoaSxzLHQscildXTtjYXNlIFF5KGkpOnJldHVybltuLFtzVChpLHMsdCxyKV1dO2Nhc2UgUnkoaSk6cmV0dXJuW24sW2hUKGkscyx0LHIpXV07Y2FzZSBqeShpKTpyZXR1cm5bbixbYVQoaSxzKV1dO2RlZmF1bHQ6cmV0dXJuW24sW25UKGkscyx0LHIpXV19fWZ1bmN0aW9uIHlUKGUsdCxyLHMpe2lmKF95KGUpKXJldHVybltVUyhlKSxbXV07cmV0dXJuIGRUKGUsdCxyKX1mdW5jdGlvbiBnVChlLHQscixzKXtjb25zdCBpPVJ5KGUpO2NvbnN0IG49RFMoZSxzKTtyZXR1cm4gaT9bbnVsbCxbaFQobixudWxsLHQscildXTp4VChNUyhuKSx0LHIpfWZ1bmN0aW9uIHhUKGUsdCxyLHMpe2lmKCFlKXVvKCJTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHlvdXIgdGFnIERPTSBwYXJzaW5nLCB5b3VyIHRhZyB0ZW1wbGF0ZSBjYW4ndCBiZSBjcmVhdGVkIik7Y29uc3RbaSxuXT15VChlLHQscik7Y29uc3QgYT1PUyhlKTtjb25zdCBvPU95KGUpPT09ZmFsc2U7Y29uc3QgbD1PYmplY3QuYXNzaWduKHt9LEhTKHBUKSxzKTtvJiZsLmh0bWwucHVzaCguLi5pKTtsLmJpbmRpbmdzLnB1c2goLi4ubik7aWYoYS5sZW5ndGgmJiFZeShlKSl7YS5mb3JFYWNoKChzPT54VChzLHQscixPYmplY3QuYXNzaWduKHtwYXJlbnQ6ZX0sbCkpKSl9aWYobyYmenkoZSkmJiFVeShlKSl7bC5odG1sLnB1c2goelMoZSkpfXJldHVybltsLmh0bWwuam9pbigiIiksbC5iaW5kaW5nc119Y29uc3QgdlQ9W1ltLEptLHptLFptXS5tYXAoY2EuaWRlbnRpZmllcik7ZnVuY3Rpb24gYlQoZSx0LHIpe3JldHVybiB3UyguLi54VChGUyhlKSx0LHIpKX1mdW5jdGlvbiBFVChlLHQscixzKXt1YS52aXNpdChlLHt2aXNpdFByb3BlcnR5KGUpe2lmKGUudmFsdWUua2V5Lm5hbWU9PT1pKXtlLnZhbHVlLnZhbHVlPWNhLmFycm93RnVuY3Rpb25FeHByZXNzaW9uKHZULGJUKHMsdCxyKSk7cmV0dXJuIGZhbHNlfXRoaXMudHJhdmVyc2UoZSl9fSk7cmV0dXJuIGV9ZnVuY3Rpb24gU1QoZSx0LHIscyl7Y29uc3R7b3B0aW9uczppfT1yO3JldHVybiBFVChzLGkuZmlsZSx0LGUpfWNvbnN0IFRUPXt0ZW1wbGF0ZToiZGVmYXVsdCIsZmlsZToiW3Vua25vd24tc291cmNlLWZpbGVdIixzY29wZWRDc3M6dHJ1ZX07ZnVuY3Rpb24gQVQoZSl7bGV0e3RhZ05hbWU6dH09ZTtyZXR1cm4gY2EucHJvZ3JhbShbY2EuZXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGNhLm9iamVjdEV4cHJlc3Npb24oW2ZhKHMscGEoKSksZmEocixwYSgpKSxmYShpLHBhKCkpLGZhKG4sY2EubGl0ZXJhbCh0KSldKSldKX1mdW5jdGlvbiB3VChlKXtjb25zdCB0PWRhKGUpO3JldHVybiBkcCh0KT9udWxsOnR9ZnVuY3Rpb24gQ1QoZSx0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxlLHtzb3VyY2VzQ29udGVudDpbdF19KX1mdW5jdGlvbiBQVChlLHQpe3JldHVybnt0YWdOYW1lOm51bGwsZnJhZ21lbnRzOm51bGwsb3B0aW9uczpPYmplY3QuYXNzaWduKHt9LFRULHQpLHNvdXJjZTplfX1mdW5jdGlvbiBEVChlLHQpe2lmKHQ9PT12b2lkIDApe3Q9e319Y29uc3Qgcj1QVChlLHQpO2NvbnN0e29wdGlvbnM6c309cjtjb25zdHtjb2RlOmksbWFwOm59PXhvKCJ0ZW1wbGF0ZSIscy50ZW1wbGF0ZSxyLGUpO2NvbnN0e3BhcnNlOmF9PV9tKHMpO2NvbnN0e3RlbXBsYXRlOm8sY3NzOmwsamF2YXNjcmlwdDp1fT1hKGkpLm91dHB1dDtpZihwcChvfHxsfHx1LGksYSkpe3Rocm93IG5ldyBFcnJvcigiTXVsdGlwbGUgSFRNTCByb290IG5vZGVzIGFyZSBub3Qgc3VwcG9ydGVkIil9T2JqZWN0LmFzc2lnbihyLHt0YWdOYW1lOm8ubmFtZSxmcmFnbWVudHM6e3RlbXBsYXRlOm8sY3NzOmwsamF2YXNjcmlwdDp1fX0pO3JldHVybiB2bygoZT0+T2JqZWN0LmFzc2lnbih7fSxlLHttZXRhOnJ9KSksKGU9PnBvKGUscikpLCh0PT5PYmplY3QuYXNzaWduKHt9LHQse21hcDpDVCh0Lm1hcCxlKX0pKSwoZT0+ci5hc3Q9ZSYmaHAoZSx7c291cmNlTWFwTmFtZTpgJHtzLmZpbGV9Lm1hcGAsaW5wdXRTb3VyY2VNYXA6d1Qobil9KSksa1QoU1QsbyxpLHIpLGtUKF9mLHUsaSxyKSxrVChqbyxsLGkscikpKEFUKHIpKX1mdW5jdGlvbiBrVChlLHQscixzKXtjb25zdCBpPXQmJih0LnRleHR8fCFmcCh0Lm5vZGVzKXx8IWZwKHQuYXR0cmlidXRlcykpO3JldHVybiBpP1VvKGUpKHQscixzKTplPT5lfWNvbnN0IE5UPWdvO2NvbnN0IElUPWhvO2UuY29tcGlsZT1EVDtlLmNyZWF0ZUluaXRpYWxJbnB1dD1BVDtlLnJlZ2lzdGVyUG9zdHByb2Nlc3Nvcj1JVDtlLnJlZ2lzdGVyUHJlcHJvY2Vzc29yPU5UO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6dHJ1ZX0pfSkpfSkobHIsbHIuZXhwb3J0cyk7dmFyIHByPW9yKGxyLmV4cG9ydHMpO2NvbnN0IGZyPSJfX3Jpb3RfcmVnaXN0cnlfXyI7d2luZG93W2ZyXT17fTtmdW5jdGlvbiBkcihlLHQpe2NvbnN0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7Y29uc3Qgcz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7aWYodClyLnRleHQ9YCR7ZX1cbi8vIyBzb3VyY2VVUkw9JHt0fS5qc2A7cy5hcHBlbmRDaGlsZChyKTtzLnJlbW92ZUNoaWxkKHIpfWZ1bmN0aW9uIG1yKGUpe3JldHVybmAoZnVuY3Rpb24gKGdsb2JhbCl7JHtlfX0pKHRoaXMpYC5yZXBsYWNlKCJleHBvcnQgZGVmYXVsdCIsInJldHVybiIpfWZ1bmN0aW9uIHlyKGUsdCxyKXtkcihgd2luZG93LiR7ZnJ9Wycke3R9J10gPSAke21yKGUpfWAscik7V3QodCx3aW5kb3dbZnJdW3RdKX1mdW5jdGlvbiBncihlLHQpe3JldHVybiBwci5jb21waWxlKGUsdCl9YXN5bmMgZnVuY3Rpb24geHIoZSx0KXtjb25zdCByPWF3YWl0IGZldGNoKGUpO2NvbnN0IHM9YXdhaXQgci50ZXh0KCk7cmV0dXJuIHByLmNvbXBpbGUocyxPYmplY3QuYXNzaWduKHtmaWxlOmV9LHQpKX1hc3luYyBmdW5jdGlvbiB2cihlKXtjb25zdCB0PWR0KCdzY3JpcHRbdHlwZT0icmlvdCJdJyk7Y29uc3Qgcj10Lm1hcCgoZT0+eHQoZSwic3JjIil8fHh0KGUsImRhdGEtc3JjIikpKTtjb25zdCBzPWF3YWl0IFByb21pc2UuYWxsKHIubWFwKCh0PT54cih0LGUpKSkpO3MuZm9yRWFjaCgoKGUsdCk9PntsZXR7Y29kZTpzLG1ldGE6aX09ZTtjb25zdCBuPXJbdF07Y29uc3R7dGFnTmFtZTphfT1pO3lyKHMsYSxuKX0pKX12YXIgYnI9T2JqZWN0LmFzc2lnbih7fSxucix7Y29tcGlsZTp2cixpbmplY3Q6eXIsY29tcGlsZUZyb21Vcmw6eHIsY29tcGlsZUZyb21TdHJpbmc6Z3IsY29tcGlsZXI6cHJ9KTtyZXR1cm4gYnJ9KSk7]]></data>
	</file>
	<file>
	  <filename>/js/riot.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogUmlvdCB2OS4xLjgsIEBsaWNlbnNlIE1JVCAqLwooZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkgewogIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOgogIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOgogIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGZhY3RvcnkoZ2xvYmFsLnJpb3QgPSB7fSkpOwp9KSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnOwoKICBjb25zdCBFQUNIID0gMDsKICBjb25zdCBJRiA9IDE7CiAgY29uc3QgU0lNUExFID0gMjsKICBjb25zdCBUQUcgPSAzOwogIGNvbnN0IFNMT1QgPSA0OwoKICBjb25zdCBiaW5kaW5nVHlwZXMgPSB7CiAgICBFQUNILAogICAgSUYsCiAgICBTSU1QTEUsCiAgICBUQUcsCiAgICBTTE9ULAogIH07CgogIC8qKgogICAqIFF1aWNrIHR5cGUgY2hlY2tpbmcKICAgKiBAcGFyYW0gICB7Kn0gZWxlbWVudCAtIGFueXRoaW5nCiAgICogQHBhcmFtICAge3N0cmluZ30gdHlwZSAtIHR5cGUgZGVmaW5pdGlvbgogICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSB0eXBlIGNvcnJlc3BvbmRzCiAgICovCiAgZnVuY3Rpb24gY2hlY2tUeXBlKGVsZW1lbnQsIHR5cGUpIHsKICAgIHJldHVybiB0eXBlb2YgZWxlbWVudCA9PT0gdHlwZQogIH0KCiAgLyoqCiAgICogQ2hlY2sgaWYgYW4gZWxlbWVudCBpcyBwYXJ0IG9mIGFuIHN2ZwogICAqIEBwYXJhbSAgIHtIVE1MRWxlbWVudH0gIGVsIC0gZWxlbWVudCB0byBjaGVjawogICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHdlIGFyZSBpbiBhbiBzdmcgY29udGV4dAogICAqLwogIGZ1bmN0aW9uIGlzU3ZnKGVsKSB7CiAgICBjb25zdCBvd25lciA9IGVsLm93bmVyU1ZHRWxlbWVudDsKCiAgICByZXR1cm4gISFvd25lciB8fCBvd25lciA9PT0gbnVsbAogIH0KCiAgLyoqCiAgICogQ2hlY2sgaWYgYW4gZWxlbWVudCBpcyBhIHRlbXBsYXRlIHRhZwogICAqIEBwYXJhbSAgIHtIVE1MRWxlbWVudH0gIGVsIC0gZWxlbWVudCB0byBjaGVjawogICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIGl0J3MgYSA8dGVtcGxhdGU+CiAgICovCiAgZnVuY3Rpb24gaXNUZW1wbGF0ZShlbCkgewogICAgcmV0dXJuIGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3RlbXBsYXRlJwogIH0KCiAgLyoqCiAgICogQ2hlY2sgdGhhdCB3aWxsIGJlIHBhc3NlZCBpZiBpdHMgYXJndW1lbnQgaXMgYSBmdW5jdGlvbgogICAqIEBwYXJhbSAgIHsqfSB2YWx1ZSAtIHZhbHVlIHRvIGNoZWNrCiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBmdW5jdGlvbgogICAqLwogIGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHsKICAgIHJldHVybiBjaGVja1R5cGUodmFsdWUsICdmdW5jdGlvbicpCiAgfQoKICAvKioKICAgKiBDaGVjayBpZiBhIHZhbHVlIGlzIGEgQm9vbGVhbgogICAqIEBwYXJhbSAgIHsqfSAgdmFsdWUgLSBhbnl0aGluZwogICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIG9ubHkgZm9yIHRoZSB2YWx1ZSBpcyBhIGJvb2xlYW4KICAgKi8KICBmdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHsKICAgIHJldHVybiBjaGVja1R5cGUodmFsdWUsICdib29sZWFuJykKICB9CgogIC8qKgogICAqIENoZWNrIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0CiAgICogQHBhcmFtICAgeyp9ICB2YWx1ZSAtIGFueXRoaW5nCiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgb25seSBmb3IgdGhlIHZhbHVlIGlzIGFuIG9iamVjdAogICAqLwogIGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7CiAgICByZXR1cm4gIWlzTmlsKHZhbHVlKSAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0CiAgfQoKICAvKioKICAgKiBDaGVjayBpZiBhIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkCiAgICogQHBhcmFtICAgeyp9ICB2YWx1ZSAtIGFueXRoaW5nCiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgb25seSBmb3IgdGhlICd1bmRlZmluZWQnIGFuZCAnbnVsbCcgdHlwZXMKICAgKi8KICBmdW5jdGlvbiBpc05pbCh2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQKICB9CgogIC8vIFJpb3QuanMgY29uc3RhbnRzIHRoYXQgY2FuIGJlIHVzZWQgYWNyb3NzIG1vcmUgbW9kdWxlcwoKICBjb25zdCBDT01QT05FTlRTX0lNUExFTUVOVEFUSU9OX01BUCA9IG5ldyBNYXAoKSwKICAgIERPTV9DT01QT05FTlRfSU5TVEFOQ0VfUFJPUEVSVFkgPSBTeW1ib2woJ3Jpb3QtY29tcG9uZW50JyksCiAgICBQTFVHSU5TX1NFVCA9IG5ldyBTZXQoKSwKICAgIElTX0RJUkVDVElWRSA9ICdpcycsCiAgICBNT1VOVF9NRVRIT0RfS0VZID0gJ21vdW50JywKICAgIFVQREFURV9NRVRIT0RfS0VZID0gJ3VwZGF0ZScsCiAgICBVTk1PVU5UX01FVEhPRF9LRVkgPSAndW5tb3VudCcsCiAgICBTSE9VTERfVVBEQVRFX0tFWSA9ICdzaG91bGRVcGRhdGUnLAogICAgT05fQkVGT1JFX01PVU5UX0tFWSA9ICdvbkJlZm9yZU1vdW50JywKICAgIE9OX01PVU5URURfS0VZID0gJ29uTW91bnRlZCcsCiAgICBPTl9CRUZPUkVfVVBEQVRFX0tFWSA9ICdvbkJlZm9yZVVwZGF0ZScsCiAgICBPTl9VUERBVEVEX0tFWSA9ICdvblVwZGF0ZWQnLAogICAgT05fQkVGT1JFX1VOTU9VTlRfS0VZID0gJ29uQmVmb3JlVW5tb3VudCcsCiAgICBPTl9VTk1PVU5URURfS0VZID0gJ29uVW5tb3VudGVkJywKICAgIFBST1BTX0tFWSA9ICdwcm9wcycsCiAgICBTVEFURV9LRVkgPSAnc3RhdGUnLAogICAgU0xPVFNfS0VZID0gJ3Nsb3RzJywKICAgIFJPT1RfS0VZID0gJ3Jvb3QnLAogICAgSVNfUFVSRV9TWU1CT0wgPSBTeW1ib2woJ3B1cmUnKSwKICAgIElTX0NPTVBPTkVOVF9VUERBVElORyA9IFN5bWJvbCgnaXNfdXBkYXRpbmcnKSwKICAgIFBBUkVOVF9LRVlfU1lNQk9MID0gU3ltYm9sKCdwYXJlbnQnKSwKICAgIEFUVFJJQlVURVNfS0VZX1NZTUJPTCA9IFN5bWJvbCgnYXR0cmlidXRlcycpLAogICAgVEVNUExBVEVfS0VZX1NZTUJPTCA9IFN5bWJvbCgndGVtcGxhdGUnKTsKCiAgLyoqCiAgICogQ29udmVydCBhIHN0cmluZyBmcm9tIGNhbWVsIGNhc2UgdG8gZGFzaC1jYXNlCiAgICogQHBhcmFtICAge3N0cmluZ30gc3RyaW5nIC0gcHJvYmFibHkgYSBjb21wb25lbnQgdGFnIG5hbWUKICAgKiBAcmV0dXJucyB7c3RyaW5nfSBjb21wb25lbnQgbmFtZSBub3JtYWxpemVkCiAgICovCiAgZnVuY3Rpb24gY2FtZWxUb0Rhc2hDYXNlKHN0cmluZykgewogICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEtJDInKS50b0xvd2VyQ2FzZSgpCiAgfQoKICAvKioKICAgKiBDb252ZXJ0IGEgc3RyaW5nIGNvbnRhaW5pbmcgZGFzaGVzIHRvIGNhbWVsIGNhc2UKICAgKiBAcGFyYW0gICB7c3RyaW5nfSBzdHJpbmcgLSBpbnB1dCBzdHJpbmcKICAgKiBAcmV0dXJucyB7c3RyaW5nfSBteS1zdHJpbmcgLT4gbXlTdHJpbmcKICAgKi8KICBmdW5jdGlvbiBkYXNoVG9DYW1lbENhc2Uoc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLy0oXHcpL2csIChfLCBjKSA9PiBjLnRvVXBwZXJDYXNlKCkpCiAgfQoKICAvKioKICAgKiBHZXQgYWxsIHRoZSBlbGVtZW50IGF0dHJpYnV0ZXMgYXMgb2JqZWN0CiAgICogQHBhcmFtICAge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gRE9NIG5vZGUgd2Ugd2FudCB0byBwYXJzZQogICAqIEByZXR1cm5zIHtPYmplY3R9IGFsbCB0aGUgYXR0cmlidXRlcyBmb3VuZCBhcyBhIGtleSB2YWx1ZSBwYWlycwogICAqLwogIGZ1bmN0aW9uIERPTWF0dHJpYnV0ZXNUb09iamVjdChlbGVtZW50KSB7CiAgICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50LmF0dHJpYnV0ZXMpLnJlZHVjZSgoYWNjLCBhdHRyaWJ1dGUpID0+IHsKICAgICAgYWNjW2Rhc2hUb0NhbWVsQ2FzZShhdHRyaWJ1dGUubmFtZSldID0gYXR0cmlidXRlLnZhbHVlOwogICAgICByZXR1cm4gYWNjCiAgICB9LCB7fSkKICB9CgogIC8qKgogICAqIE1vdmUgYWxsIHRoZSBjaGlsZCBub2RlcyBmcm9tIGEgc291cmNlIHRhZyB0byBhbm90aGVyCiAgICogQHBhcmFtICAge0hUTUxFbGVtZW50fSBzb3VyY2UgLSBzb3VyY2Ugbm9kZQogICAqIEBwYXJhbSAgIHtIVE1MRWxlbWVudH0gdGFyZ2V0IC0gdGFyZ2V0IG5vZGUKICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfSBpdCdzIGEgdm9pZCBtZXRob2Qgwq9cXyjjg4QpXy/CrwogICAqLwoKICAvLyBJZ25vcmUgdGhpcyBoZWxwZXIgYmVjYXVzZSBpdCdzIG5lZWRlZCBvbmx5IGZvciBzdmcgdGFncwogIGZ1bmN0aW9uIG1vdmVDaGlsZHJlbihzb3VyY2UsIHRhcmdldCkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZwL25vLWxvb3BzCiAgICB3aGlsZSAoc291cmNlLmZpcnN0Q2hpbGQpIHRhcmdldC5hcHBlbmRDaGlsZChzb3VyY2UuZmlyc3RDaGlsZCk7CiAgfQoKICAvKioKICAgKiBSZW1vdmUgdGhlIGNoaWxkIG5vZGVzIGZyb20gYW55IERPTSBub2RlCiAgICogQHBhcmFtICAge0hUTUxFbGVtZW50fSBub2RlIC0gdGFyZ2V0IG5vZGUKICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAqLwogIGZ1bmN0aW9uIGNsZWFuTm9kZShub2RlKSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnAvbm8tbG9vcHMKICAgIHdoaWxlIChub2RlLmZpcnN0Q2hpbGQpIG5vZGUucmVtb3ZlQ2hpbGQobm9kZS5maXJzdENoaWxkKTsKICB9CgogIC8qKgogICAqIENsZWFyIG11bHRpcGxlIGNoaWxkcmVuIGluIGEgbm9kZQogICAqIEBwYXJhbSAgIHtIVE1MRWxlbWVudFtdfSBjaGlsZHJlbiAtIGRpcmVjdCBjaGlsZHJlbiBub2RlcwogICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICovCiAgZnVuY3Rpb24gY2xlYXJDaGlsZHJlbihjaGlsZHJlbikgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZwL25vLWxvb3BzLGZwL25vLWxldAogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgcmVtb3ZlQ2hpbGQoY2hpbGRyZW5baV0pOwogIH0KCiAgLyoqCiAgICogUmVtb3ZlIGEgbm9kZQogICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9bm9kZSAtIG5vZGUgdG8gcmVtb3ZlCiAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgKi8KICBjb25zdCByZW1vdmVDaGlsZCA9IChub2RlKSA9PiBub2RlLnJlbW92ZSgpOwoKICAvKioKICAgKiBJbnNlcnQgYmVmb3JlIGEgbm9kZQogICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5ld05vZGUgLSBub2RlIHRvIGluc2VydAogICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZk5vZGUgLSByZWYgY2hpbGQKICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAqLwogIGNvbnN0IGluc2VydEJlZm9yZSA9IChuZXdOb2RlLCByZWZOb2RlKSA9PgogICAgcmVmTm9kZSAmJgogICAgcmVmTm9kZS5wYXJlbnROb2RlICYmCiAgICByZWZOb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHJlZk5vZGUpOwoKICAvKioKICAgKiBSZXBsYWNlIGEgbm9kZQogICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5ld05vZGUgLSBuZXcgbm9kZSB0byBhZGQgdG8gdGhlIERPTQogICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlcGxhY2VkIC0gbm9kZSB0byByZXBsYWNlCiAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgKi8KICBjb25zdCByZXBsYWNlQ2hpbGQgPSAobmV3Tm9kZSwgcmVwbGFjZWQpID0+CiAgICByZXBsYWNlZCAmJgogICAgcmVwbGFjZWQucGFyZW50Tm9kZSAmJgogICAgcmVwbGFjZWQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3Tm9kZSwgcmVwbGFjZWQpOwoKICBjb25zdCBBVFRSSUJVVEUgPSAwOwogIGNvbnN0IEVWRU5UID0gMTsKICBjb25zdCBURVhUID0gMjsKICBjb25zdCBWQUxVRSA9IDM7CgogIGNvbnN0IGV4cHJlc3Npb25UeXBlcyA9IHsKICAgIEFUVFJJQlVURSwKICAgIEVWRU5ULAogICAgVEVYVCwKICAgIFZBTFVFLAogIH07CgogIC8vIGRvZXMgc2ltcGx5IG5vdGhpbmcKICBmdW5jdGlvbiBub29wKCkgewogICAgcmV0dXJuIHRoaXMKICB9CgogIC8qKgogICAqIEF1dG9iaW5kIHRoZSBtZXRob2RzIG9mIGEgc291cmNlIG9iamVjdCB0byBpdHNlbGYKICAgKiBAcGFyYW0gICB7T2JqZWN0fSBzb3VyY2UgLSBwcm9iYWJseSBhIHJpb3QgdGFnIGluc3RhbmNlCiAgICogQHBhcmFtICAge0FycmF5PHN0cmluZz59IG1ldGhvZHMgLSBsaXN0IG9mIHRoZSBtZXRob2RzIHRvIGF1dG9iaW5kCiAgICogQHJldHVybnMge09iamVjdH0gdGhlIG9yaWdpbmFsIG9iamVjdCByZWNlaXZlZAogICAqLwogIGZ1bmN0aW9uIGF1dG9iaW5kTWV0aG9kcyhzb3VyY2UsIG1ldGhvZHMpIHsKICAgIG1ldGhvZHMuZm9yRWFjaCgobWV0aG9kKSA9PiB7CiAgICAgIHNvdXJjZVttZXRob2RdID0gc291cmNlW21ldGhvZF0uYmluZChzb3VyY2UpOwogICAgfSk7CgogICAgcmV0dXJuIHNvdXJjZQogIH0KCiAgLyoqCiAgICogQ2FsbCB0aGUgZmlyc3QgYXJndW1lbnQgcmVjZWl2ZWQgb25seSBpZiBpdCdzIGEgZnVuY3Rpb24gb3RoZXJ3aXNlIHJldHVybiBpdCBhcyBpdCBpcwogICAqIEBwYXJhbSAgIHsqfSBzb3VyY2UgLSBhbnl0aGluZwogICAqIEByZXR1cm5zIHsqfSBhbnl0aGluZwogICAqLwogIGZ1bmN0aW9uIGNhbGxPckFzc2lnbihzb3VyY2UpIHsKICAgIHJldHVybiBpc0Z1bmN0aW9uKHNvdXJjZSkKICAgICAgPyBzb3VyY2UucHJvdG90eXBlICYmIHNvdXJjZS5wcm90b3R5cGUuY29uc3RydWN0b3IKICAgICAgICA/IG5ldyBzb3VyY2UoKQogICAgICAgIDogc291cmNlKCkKICAgICAgOiBzb3VyY2UKICB9CgogIC8qKgogICAqIFRocm93IGFuIGVycm9yIHdpdGggYSBkZXNjcmlwdGl2ZSBtZXNzYWdlCiAgICogQHBhcmFtICAgeyBzdHJpbmcgfSBtZXNzYWdlIC0gZXJyb3IgbWVzc2FnZQogICAqIEBwYXJhbSAgIHsgc3RyaW5nIH0gY2F1c2UgLSBvcHRpb25hbCBlcnJvciBjYXVzZSBvYmplY3QKICAgKiBAcmV0dXJucyB7IHVuZGVmaW5lZCB9IGhvcHBsYS4uLiBhdCB0aGlzIHBvaW50IHRoZSBwcm9ncmFtIHNob3VsZCBzdG9wIHdvcmtpbmcKICAgKi8KICBmdW5jdGlvbiBwYW5pYyhtZXNzYWdlLCBjYXVzZSkgewogICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UsIHsgY2F1c2UgfSkKICB9CiAgLyoqCiAgICogUmV0dXJucyB0aGUgbWVtb2l6ZWQgKGNhY2hlZCkgZnVuY3Rpb24uCiAgICogLy8gYm9ycm93ZWQgZnJvbSBodHRwczovL3d3dy4zMHNlY29uZHNvZmNvZGUub3JnL2pzL3MvbWVtb2l6ZQogICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gZnVuY3Rpb24gdG8gbWVtb2l6ZQogICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gbWVtb2l6ZSBmdW5jdGlvbgogICAqLwogIGZ1bmN0aW9uIG1lbW9pemUoZm4pIHsKICAgIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpOwogICAgY29uc3QgY2FjaGVkID0gKHZhbCkgPT4gewogICAgICByZXR1cm4gY2FjaGUuaGFzKHZhbCkKICAgICAgICA/IGNhY2hlLmdldCh2YWwpCiAgICAgICAgOiBjYWNoZS5zZXQodmFsLCBmbi5jYWxsKHRoaXMsIHZhbCkpICYmIGNhY2hlLmdldCh2YWwpCiAgICB9OwogICAgY2FjaGVkLmNhY2hlID0gY2FjaGU7CiAgICByZXR1cm4gY2FjaGVkCiAgfQoKICAvKioKICAgKiBFdmFsdWF0ZSBhIGxpc3Qgb2YgYXR0cmlidXRlIGV4cHJlc3Npb25zCiAgICogQHBhcmFtICAge0FycmF5fSBhdHRyaWJ1dGVzIC0gYXR0cmlidXRlIGV4cHJlc3Npb25zIGdlbmVyYXRlZCBieSB0aGUgcmlvdCBjb21waWxlcgogICAqIEByZXR1cm5zIHtPYmplY3R9IGtleSB2YWx1ZSBwYWlycyB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGNvbXB1dGF0aW9uCiAgICovCiAgZnVuY3Rpb24gZXZhbHVhdGVBdHRyaWJ1dGVFeHByZXNzaW9ucyhhdHRyaWJ1dGVzKSB7CiAgICByZXR1cm4gYXR0cmlidXRlcy5yZWR1Y2UoKGFjYywgYXR0cmlidXRlKSA9PiB7CiAgICAgIGNvbnN0IHsgdmFsdWUsIHR5cGUgfSA9IGF0dHJpYnV0ZTsKCiAgICAgIHN3aXRjaCAodHJ1ZSkgewogICAgICAgIC8vIHNwcmVhZCBhdHRyaWJ1dGUKICAgICAgICBjYXNlICFhdHRyaWJ1dGUubmFtZSAmJiB0eXBlID09PSBBVFRSSUJVVEU6CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAuLi5hY2MsCiAgICAgICAgICAgIC4uLnZhbHVlLAogICAgICAgICAgfQogICAgICAgIC8vIHZhbHVlIGF0dHJpYnV0ZQogICAgICAgIGNhc2UgdHlwZSA9PT0gVkFMVUU6CiAgICAgICAgICBhY2MudmFsdWUgPSBhdHRyaWJ1dGUudmFsdWU7CiAgICAgICAgICBicmVhawogICAgICAgIC8vIG5vcm1hbCBhdHRyaWJ1dGVzCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGFjY1tkYXNoVG9DYW1lbENhc2UoYXR0cmlidXRlLm5hbWUpXSA9IGF0dHJpYnV0ZS52YWx1ZTsKICAgICAgfQoKICAgICAgcmV0dXJuIGFjYwogICAgfSwge30pCiAgfQoKICAvKioKICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2V0IGFuIGltbXV0YWJsZSBwcm9wZXJ0eQogICAqIEBwYXJhbSAgIHtPYmplY3R9IHNvdXJjZSAtIG9iamVjdCB3aGVyZSB0aGUgbmV3IHByb3BlcnR5IHdpbGwgYmUgc2V0CiAgICogQHBhcmFtICAge3N0cmluZ30ga2V5IC0gb2JqZWN0IGtleSB3aGVyZSB0aGUgbmV3IHByb3BlcnR5IHdpbGwgYmUgc3RvcmVkCiAgICogQHBhcmFtICAgeyp9IHZhbHVlIC0gdmFsdWUgb2YgdGhlIG5ldyBwcm9wZXJ0eQogICAqIEBwYXJhbSAgIHtPYmplY3R9IG9wdGlvbnMgLSBzZXQgdGhlIHByb3BlcnR5IG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgb3B0aW9ucwogICAqIEByZXR1cm5zIHtPYmplY3R9IC0gdGhlIG9yaWdpbmFsIG9iamVjdCBtb2RpZmllZAogICAqLwogIGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHNvdXJjZSwga2V5LCB2YWx1ZSwgb3B0aW9ucyA9IHt9KSB7CiAgICAvKiBlc2xpbnQtZGlzYWJsZSBmcC9uby1tdXRhdGluZy1tZXRob2RzICovCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc291cmNlLCBrZXksIHsKICAgICAgdmFsdWUsCiAgICAgIGVudW1lcmFibGU6IGZhbHNlLAogICAgICB3cml0YWJsZTogZmFsc2UsCiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgLi4ub3B0aW9ucywKICAgIH0pOwogICAgLyogZXNsaW50LWVuYWJsZSBmcC9uby1tdXRhdGluZy1tZXRob2RzICovCgogICAgcmV0dXJuIHNvdXJjZQogIH0KCiAgLyoqCiAgICogRGVmaW5lIG11bHRpcGxlIHByb3BlcnRpZXMgb24gYSB0YXJnZXQgb2JqZWN0CiAgICogQHBhcmFtICAge09iamVjdH0gc291cmNlIC0gb2JqZWN0IHdoZXJlIHRoZSBuZXcgcHJvcGVydGllcyB3aWxsIGJlIHNldAogICAqIEBwYXJhbSAgIHtPYmplY3R9IHByb3BlcnRpZXMgLSBvYmplY3QgY29udGFpbmluZyBhcyBrZXkgcGFpciB0aGUga2V5ICsgdmFsdWUgcHJvcGVydGllcwogICAqIEBwYXJhbSAgIHtPYmplY3R9IG9wdGlvbnMgLSBzZXQgdGhlIHByb3BlcnR5IG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgb3B0aW9ucwogICAqIEByZXR1cm5zIHtPYmplY3R9IHRoZSBvcmlnaW5hbCBvYmplY3QgbW9kaWZpZWQKICAgKi8KICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHNvdXJjZSwgcHJvcGVydGllcywgb3B0aW9ucykgewogICAgT2JqZWN0LmVudHJpZXMocHJvcGVydGllcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7CiAgICAgIGRlZmluZVByb3BlcnR5KHNvdXJjZSwga2V5LCB2YWx1ZSwgb3B0aW9ucyk7CiAgICB9KTsKCiAgICByZXR1cm4gc291cmNlCiAgfQoKICAvKioKICAgKiBEZWZpbmUgZGVmYXVsdCBwcm9wZXJ0aWVzIGlmIHRoZXkgZG9uJ3QgZXhpc3Qgb24gdGhlIHNvdXJjZSBvYmplY3QKICAgKiBAcGFyYW0gICB7T2JqZWN0fSBzb3VyY2UgLSBvYmplY3QgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIGRlZmF1bHQgcHJvcGVydGllcwogICAqIEBwYXJhbSAgIHtPYmplY3R9IGRlZmF1bHRzIC0gb2JqZWN0IGNvbnRhaW5pbmcgYWRkaXRpb25hbCBvcHRpb25hbCBrZXlzCiAgICogQHJldHVybnMge09iamVjdH0gdGhlIG9yaWdpbmFsIG9iamVjdCByZWNlaXZlZCBlbmhhbmNlZAogICAqLwogIGZ1bmN0aW9uIGRlZmluZURlZmF1bHRzKHNvdXJjZSwgZGVmYXVsdHMpIHsKICAgIE9iamVjdC5lbnRyaWVzKGRlZmF1bHRzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHsKICAgICAgaWYgKCFzb3VyY2Vba2V5XSkgc291cmNlW2tleV0gPSB2YWx1ZTsKICAgIH0pOwoKICAgIHJldHVybiBzb3VyY2UKICB9CgogIC8qKgogICAqIEdlbmVyYXRlIGEgbmV3IG9iamVjdCBwaWNraW5nIG9ubHkgdGhlIHByb3BlcnRpZXMgZnJvbSBhIGdpdmVuIGFycmF5CiAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSAtIHRhcmdldCBvYmplY3QKICAgKiBAcGFyYW0ge0FycmF5fSBrZXlzIC0gbGlzdCBvZiBrZXlzIHRoYXQgd2Ugd2FudCB0byBjb3B5IG92ZXIgdG8gdGhlIG5ldyBvYmplY3QKICAgKiBAcmV0dXJuIHtPYmplY3R9IGEgbmV3IG9iamVjdCBjb25haW5pbmcgb25seSB0aGUga2V5cyB0aGF0IHdlIGhhdmUgcGlja2VkIGZyb20gdGhlIGtleXMgYXJyYXkgbGlzdAogICAqLwogIGZ1bmN0aW9uIHBpY2soc291cmNlLCBrZXlzKSB7CiAgICByZXR1cm4gaXNPYmplY3Qoc291cmNlKQogICAgICA/IE9iamVjdC5mcm9tRW50cmllcyhrZXlzLm1hcCgoa2V5KSA9PiBba2V5LCBzb3VyY2Vba2V5XV0pKQogICAgICA6IHNvdXJjZQogIH0KCiAgLy8gQ29tcG9uZW50cyB3aXRob3V0IHRlbXBsYXRlIHVzZSBhIG1vY2tlZCB0ZW1wbGF0ZSBpbnRlcmZhY2Ugd2l0aCBzb21lIGJhc2ljIGZ1bmN0aW9uYWxpdGllcyB0bwogIC8vIGd1YXJhbnRlZSBjb25zaXN0ZW50IHJlbmRlcmluZyBiZWhhdmlvdXIgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yaW90L3Jpb3QvaXNzdWVzLzI5ODQKICBjb25zdCBNT0NLRURfVEVNUExBVEVfSU5URVJGQUNFID0gewogICAgW01PVU5UX01FVEhPRF9LRVldKGVsKSB7CiAgICAgIHRoaXMuZWwgPSBlbDsKICAgIH0sCiAgICBbVVBEQVRFX01FVEhPRF9LRVldOiBub29wLAogICAgW1VOTU9VTlRfTUVUSE9EX0tFWV0oXywgX18sIG11c3RSZW1vdmVSb290ID0gZmFsc2UpIHsKICAgICAgaWYgKG11c3RSZW1vdmVSb290KSByZW1vdmVDaGlsZCh0aGlzLmVsKTsKICAgICAgZWxzZSBpZiAoIW11c3RSZW1vdmVSb290KSBjbGVhbk5vZGUodGhpcy5lbCk7CiAgICB9LAogICAgY2xvbmU6IG5vb3AsCiAgICBjcmVhdGVET006IG5vb3AsCiAgfTsKCiAgY29uc3QgSEVBRF9TWU1CT0wgPSBTeW1ib2woKTsKICBjb25zdCBUQUlMX1NZTUJPTCA9IFN5bWJvbCgpOwoKICAvKioKICAgKiBDcmVhdGUgdGhlIDx0ZW1wbGF0ZT4gZnJhZ21lbnRzIHRleHQgbm9kZXMKICAgKiBAcmV0dXJuIHtPYmplY3R9IHt7aGVhZDogVGV4dCwgdGFpbDogVGV4dH19CiAgICovCiAgZnVuY3Rpb24gY3JlYXRlSGVhZFRhaWxQbGFjZWhvbGRlcnMoKSB7CiAgICBjb25zdCBoZWFkID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpOwogICAgY29uc3QgdGFpbCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTsKCiAgICBoZWFkW0hFQURfU1lNQk9MXSA9IHRydWU7CiAgICB0YWlsW1RBSUxfU1lNQk9MXSA9IHRydWU7CgogICAgcmV0dXJuIHsgaGVhZCwgdGFpbCB9CiAgfQoKICAvKioKICAgKiBDcmVhdGUgdGhlIHRlbXBsYXRlIG1ldGEgb2JqZWN0IGluIGNhc2Ugb2YgPHRlbXBsYXRlPiBmcmFnbWVudHMKICAgKiBAcGFyYW0gICB7VGVtcGxhdGVDaHVua30gY29tcG9uZW50VGVtcGxhdGUgLSB0ZW1wbGF0ZSBjaHVuayBvYmplY3QKICAgKiBAcmV0dXJucyB7T2JqZWN0fSB0aGUgbWV0YSBwcm9wZXJ0eSB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBtb3VudCBmdW5jdGlvbiBvZiB0aGUgVGVtcGxhdGVDaHVuawogICAqLwogIGZ1bmN0aW9uIGNyZWF0ZVRlbXBsYXRlTWV0YShjb21wb25lbnRUZW1wbGF0ZSkgewogICAgY29uc3QgZnJhZ21lbnQgPSBjb21wb25lbnRUZW1wbGF0ZS5kb20uY2xvbmVOb2RlKHRydWUpOwogICAgY29uc3QgeyBoZWFkLCB0YWlsIH0gPSBjcmVhdGVIZWFkVGFpbFBsYWNlaG9sZGVycygpOwoKICAgIHJldHVybiB7CiAgICAgIGF2b2lkRE9NSW5qZWN0aW9uOiB0cnVlLAogICAgICBmcmFnbWVudCwKICAgICAgaGVhZCwKICAgICAgdGFpbCwKICAgICAgY2hpbGRyZW46IFtoZWFkLCAuLi5BcnJheS5mcm9tKGZyYWdtZW50LmNoaWxkTm9kZXMpLCB0YWlsXSwKICAgIH0KICB9CgogIC8qIGM4IGlnbm9yZSBzdGFydCAqLwogIC8qKgogICAqIElTQyBMaWNlbnNlCiAgICoKICAgKiBDb3B5cmlnaHQgKGMpIDIwMjAsIEFuZHJlYSBHaWFtbWFyY2hpLCBAV2ViUmVmbGVjdGlvbgogICAqCiAgICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQogICAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCiAgICoKICAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAogICAqIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogICAqIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKICAgKiBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KICAgKiBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRQogICAqIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKICAgKiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICAqLwoKICAvLyBmb3JrIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJSZWZsZWN0aW9uL3Vkb21kaWZmIHZlcnNpb24gMS4xLjAKICAvLyBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL1dlYlJlZmxlY3Rpb24vdWRvbWRpZmYvcHVsbC8yCiAgLyogZXNsaW50LWRpc2FibGUgKi8KCiAgLyoqCiAgICogQHBhcmFtIHtOb2RlW119IGEgVGhlIGxpc3Qgb2YgY3VycmVudC9saXZlIGNoaWxkcmVuCiAgICogQHBhcmFtIHtOb2RlW119IGIgVGhlIGxpc3Qgb2YgZnV0dXJlIGNoaWxkcmVuCiAgICogQHBhcmFtIHsoZW50cnk6IE5vZGUsIGFjdGlvbjogbnVtYmVyKSA9PiBOb2RlfSBnZXQKICAgKiBUaGUgY2FsbGJhY2sgaW52b2tlZCBwZXIgZWFjaCBlbnRyeSByZWxhdGVkIERPTSBvcGVyYXRpb24uCiAgICogQHBhcmFtIHtOb2RlfSBbYmVmb3JlXSBUaGUgb3B0aW9uYWwgbm9kZSB1c2VkIGFzIGFuY2hvciB0byBpbnNlcnQgYmVmb3JlLgogICAqIEByZXR1cm5zIHtOb2RlW119IFRoZSBzYW1lIGxpc3Qgb2YgZnV0dXJlIGNoaWxkcmVuLgogICAqLwogIGNvbnN0IHVkb21kaWZmID0gKGEsIGIsIGdldCwgYmVmb3JlKSA9PiB7CiAgICBjb25zdCBiTGVuZ3RoID0gYi5sZW5ndGg7CiAgICBsZXQgYUVuZCA9IGEubGVuZ3RoOwogICAgbGV0IGJFbmQgPSBiTGVuZ3RoOwogICAgbGV0IGFTdGFydCA9IDA7CiAgICBsZXQgYlN0YXJ0ID0gMDsKICAgIGxldCBtYXAgPSBudWxsOwogICAgd2hpbGUgKGFTdGFydCA8IGFFbmQgfHwgYlN0YXJ0IDwgYkVuZCkgewogICAgICAvLyBhcHBlbmQgaGVhZCwgdGFpbCwgb3Igbm9kZXMgaW4gYmV0d2VlbjogZmFzdCBwYXRoCiAgICAgIGlmIChhRW5kID09PSBhU3RhcnQpIHsKICAgICAgICAvLyB3ZSBjb3VsZCBiZSBpbiBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgcmVzdCBvZiBub2RlcyB0aGF0CiAgICAgICAgLy8gbmVlZCB0byBiZSBhZGRlZCBhcmUgbm90IGF0IHRoZSBlbmQsIGFuZCBpbiBzdWNoIGNhc2UKICAgICAgICAvLyB0aGUgbm9kZSB0byBgaW5zZXJ0QmVmb3JlYCwgaWYgdGhlIGluZGV4IGlzIG1vcmUgdGhhbiAwCiAgICAgICAgLy8gbXVzdCBiZSByZXRyaWV2ZWQsIG90aGVyd2lzZSBpdCdzIGdvbm5hIGJlIHRoZSBmaXJzdCBpdGVtLgogICAgICAgIGNvbnN0IG5vZGUgPQogICAgICAgICAgYkVuZCA8IGJMZW5ndGgKICAgICAgICAgICAgPyBiU3RhcnQKICAgICAgICAgICAgICA/IGdldChiW2JTdGFydCAtIDFdLCAtMCkubmV4dFNpYmxpbmcKICAgICAgICAgICAgICA6IGdldChiW2JFbmQgLSBiU3RhcnRdLCAwKQogICAgICAgICAgICA6IGJlZm9yZTsKICAgICAgICB3aGlsZSAoYlN0YXJ0IDwgYkVuZCkgaW5zZXJ0QmVmb3JlKGdldChiW2JTdGFydCsrXSwgMSksIG5vZGUpOwogICAgICB9CiAgICAgIC8vIHJlbW92ZSBoZWFkIG9yIHRhaWw6IGZhc3QgcGF0aAogICAgICBlbHNlIGlmIChiRW5kID09PSBiU3RhcnQpIHsKICAgICAgICB3aGlsZSAoYVN0YXJ0IDwgYUVuZCkgewogICAgICAgICAgLy8gcmVtb3ZlIHRoZSBub2RlIG9ubHkgaWYgaXQncyB1bmtub3duIG9yIG5vdCBsaXZlCiAgICAgICAgICBpZiAoIW1hcCB8fCAhbWFwLmhhcyhhW2FTdGFydF0pKSByZW1vdmVDaGlsZChnZXQoYVthU3RhcnRdLCAtMSkpOwogICAgICAgICAgYVN0YXJ0Kys7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIHNhbWUgbm9kZTogZmFzdCBwYXRoCiAgICAgIGVsc2UgaWYgKGFbYVN0YXJ0XSA9PT0gYltiU3RhcnRdKSB7CiAgICAgICAgYVN0YXJ0Kys7CiAgICAgICAgYlN0YXJ0Kys7CiAgICAgIH0KICAgICAgLy8gc2FtZSB0YWlsOiBmYXN0IHBhdGgKICAgICAgZWxzZSBpZiAoYVthRW5kIC0gMV0gPT09IGJbYkVuZCAtIDFdKSB7CiAgICAgICAgYUVuZC0tOwogICAgICAgIGJFbmQtLTsKICAgICAgfQogICAgICAvLyBUaGUgb25jZSBoZXJlIHNpbmdsZSBsYXN0IHN3YXAgImZhc3QgcGF0aCIgaGFzIGJlZW4gcmVtb3ZlZCBpbiB2MS4xLjAKICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1dlYlJlZmxlY3Rpb24vdWRvbWRpZmYvYmxvYi9zaW5nbGUtZmluYWwtc3dhcC9lc20vaW5kZXguanMjTDY5LUw4NQogICAgICAvLyByZXZlcnNlIHN3YXA6IGFsc28gZmFzdCBwYXRoCiAgICAgIGVsc2UgaWYgKGFbYVN0YXJ0XSA9PT0gYltiRW5kIC0gMV0gJiYgYltiU3RhcnRdID09PSBhW2FFbmQgLSAxXSkgewogICAgICAgIC8vIHRoaXMgaXMgYSAic2hyaW5rIiBvcGVyYXRpb24gdGhhdCBjb3VsZCBoYXBwZW4gaW4gdGhlc2UgY2FzZXM6CiAgICAgICAgLy8gWzEsIDIsIDMsIDQsIDVdCiAgICAgICAgLy8gWzEsIDQsIDMsIDIsIDVdCiAgICAgICAgLy8gb3IgYXN5bW1ldHJpYyB0b28KICAgICAgICAvLyBbMSwgMiwgMywgNCwgNV0KICAgICAgICAvLyBbMSwgMiwgMywgNSwgNiwgNF0KICAgICAgICBjb25zdCBub2RlID0gZ2V0KGFbLS1hRW5kXSwgLTEpLm5leHRTaWJsaW5nOwogICAgICAgIGluc2VydEJlZm9yZShnZXQoYltiU3RhcnQrK10sIDEpLCBnZXQoYVthU3RhcnQrK10sIC0xKS5uZXh0U2libGluZyk7CiAgICAgICAgaW5zZXJ0QmVmb3JlKGdldChiWy0tYkVuZF0sIDEpLCBub2RlKTsKICAgICAgICAvLyBtYXJrIHRoZSBmdXR1cmUgaW5kZXggYXMgaWRlbnRpY2FsICh5ZWFoLCBpdCdzIGRpcnR5LCBidXQgY2hlYXAg8J+RjSkKICAgICAgICAvLyBUaGUgbWFpbiByZWFzb24gdG8gZG8gdGhpcywgaXMgdGhhdCB3aGVuIGFbYUVuZF0gd2lsbCBiZSByZWFjaGVkLAogICAgICAgIC8vIHRoZSBsb29wIHdpbGwgbGlrZWx5IGJlIG9uIHRoZSBmYXN0IHBhdGgsIGFzIGlkZW50aWNhbCB0byBiW2JFbmRdLgogICAgICAgIC8vIEluIHRoZSBiZXN0IGNhc2Ugc2NlbmFyaW8sIHRoZSBuZXh0IGxvb3Agd2lsbCBza2lwIHRoZSB0YWlsLAogICAgICAgIC8vIGJ1dCBpbiB0aGUgd29yc3Qgb25lLCB0aGlzIG5vZGUgd2lsbCBiZSBjb25zaWRlcmVkIGFzIGFscmVhZHkKICAgICAgICAvLyBwcm9jZXNzZWQsIGJhaWxpbmcgb3V0IHByZXR0eSBxdWlja2x5IGZyb20gdGhlIG1hcCBpbmRleCBjaGVjawogICAgICAgIGFbYUVuZF0gPSBiW2JFbmRdOwogICAgICB9CiAgICAgIC8vIG1hcCBiYXNlZCBmYWxsYmFjaywgInNsb3ciIHBhdGgKICAgICAgZWxzZSB7CiAgICAgICAgLy8gdGhlIG1hcCByZXF1aXJlcyBhbiBPKGJFbmQgLSBiU3RhcnQpIG9wZXJhdGlvbiBvbmNlCiAgICAgICAgLy8gdG8gc3RvcmUgYWxsIGZ1dHVyZSBub2RlcyBpbmRleGVzIGZvciBsYXRlciBwdXJwb3Nlcy4KICAgICAgICAvLyBJbiB0aGUgd29yc3QgY2FzZSBzY2VuYXJpbywgdGhpcyBpcyBhIGZ1bGwgTyhOKSBjb3N0LAogICAgICAgIC8vIGFuZCBzdWNoIHNjZW5hcmlvIGhhcHBlbnMgYXQgbGVhc3Qgd2hlbiBhbGwgbm9kZXMgYXJlIGRpZmZlcmVudCwKICAgICAgICAvLyBidXQgYWxzbyBpZiBib3RoIGZpcnN0IGFuZCBsYXN0IGl0ZW1zIG9mIHRoZSBsaXN0cyBhcmUgZGlmZmVyZW50CiAgICAgICAgaWYgKCFtYXApIHsKICAgICAgICAgIG1hcCA9IG5ldyBNYXAoKTsKICAgICAgICAgIGxldCBpID0gYlN0YXJ0OwogICAgICAgICAgd2hpbGUgKGkgPCBiRW5kKSBtYXAuc2V0KGJbaV0sIGkrKyk7CiAgICAgICAgfQogICAgICAgIC8vIGlmIGl0J3MgYSBmdXR1cmUgbm9kZSwgaGVuY2UgaXQgbmVlZHMgc29tZSBoYW5kbGluZwogICAgICAgIGlmIChtYXAuaGFzKGFbYVN0YXJ0XSkpIHsKICAgICAgICAgIC8vIGdyYWIgdGhlIGluZGV4IG9mIHN1Y2ggbm9kZSwgJ2NhdXNlIGl0IG1pZ2h0IGhhdmUgYmVlbiBwcm9jZXNzZWQKICAgICAgICAgIGNvbnN0IGluZGV4ID0gbWFwLmdldChhW2FTdGFydF0pOwogICAgICAgICAgLy8gaWYgaXQncyBub3QgYWxyZWFkeSBwcm9jZXNzZWQsIGxvb2sgb24gZGVtYW5kIGZvciB0aGUgbmV4dCBMQ1MKICAgICAgICAgIGlmIChiU3RhcnQgPCBpbmRleCAmJiBpbmRleCA8IGJFbmQpIHsKICAgICAgICAgICAgbGV0IGkgPSBhU3RhcnQ7CiAgICAgICAgICAgIC8vIGNvdW50cyB0aGUgYW1vdW50IG9mIG5vZGVzIHRoYXQgYXJlIHRoZSBzYW1lIGluIHRoZSBmdXR1cmUKICAgICAgICAgICAgbGV0IHNlcXVlbmNlID0gMTsKICAgICAgICAgICAgd2hpbGUgKCsraSA8IGFFbmQgJiYgaSA8IGJFbmQgJiYgbWFwLmdldChhW2ldKSA9PT0gaW5kZXggKyBzZXF1ZW5jZSkKICAgICAgICAgICAgICBzZXF1ZW5jZSsrOwogICAgICAgICAgICAvLyBlZmZvcnQgZGVjaXNpb24gaGVyZTogaWYgdGhlIHNlcXVlbmNlIGlzIGxvbmdlciB0aGFuIHJlcGxhY2VzCiAgICAgICAgICAgIC8vIG5lZWRlZCB0byByZWFjaCBzdWNoIHNlcXVlbmNlLCB3aGljaCB3b3VsZCBicmluZ3MgYWdhaW4gdGhpcyBsb29wCiAgICAgICAgICAgIC8vIHRvIHRoZSBmYXN0IHBhdGgsIHByZXBlbmQgdGhlIGRpZmZlcmVuY2UgYmVmb3JlIGEgc2VxdWVuY2UsCiAgICAgICAgICAgIC8vIGFuZCBtb3ZlIG9ubHkgdGhlIGZ1dHVyZSBsaXN0IGluZGV4IGZvcndhcmQsIHNvIHRoYXQgYVN0YXJ0CiAgICAgICAgICAgIC8vIGFuZCBiU3RhcnQgd2lsbCBiZSBhbGlnbmVkIGFnYWluLCBoZW5jZSBvbiB0aGUgZmFzdCBwYXRoLgogICAgICAgICAgICAvLyBBbiBleGFtcGxlIGNvbnNpZGVyaW5nIGFTdGFydCBhbmQgYlN0YXJ0IGFyZSBib3RoIDA6CiAgICAgICAgICAgIC8vIGE6IFsxLCAyLCAzLCA0XQogICAgICAgICAgICAvLyBiOiBbNywgMSwgMiwgMywgNl0KICAgICAgICAgICAgLy8gdGhpcyB3b3VsZCBwbGFjZSA3IGJlZm9yZSAxIGFuZCwgZnJvbSB0aGF0IHRpbWUgb24sIDEsIDIsIGFuZCAzCiAgICAgICAgICAgIC8vIHdpbGwgYmUgcHJvY2Vzc2VkIGF0IHplcm8gY29zdAogICAgICAgICAgICBpZiAoc2VxdWVuY2UgPiBpbmRleCAtIGJTdGFydCkgewogICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBnZXQoYVthU3RhcnRdLCAwKTsKICAgICAgICAgICAgICB3aGlsZSAoYlN0YXJ0IDwgaW5kZXgpIGluc2VydEJlZm9yZShnZXQoYltiU3RhcnQrK10sIDEpLCBub2RlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBpZiB0aGUgZWZmb3J0IHdhc24ndCBnb29kIGVub3VnaCwgZmFsbGJhY2sgdG8gYSByZXBsYWNlLAogICAgICAgICAgICAvLyBtb3ZpbmcgYm90aCBzb3VyY2UgYW5kIHRhcmdldCBpbmRleGVzIGZvcndhcmQsIGhvcGluZyB0aGF0IHNvbWUKICAgICAgICAgICAgLy8gc2ltaWxhciBub2RlIHdpbGwgYmUgZm91bmQgbGF0ZXIgb24sIHRvIGdvIGJhY2sgdG8gdGhlIGZhc3QgcGF0aAogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICByZXBsYWNlQ2hpbGQoZ2V0KGJbYlN0YXJ0KytdLCAxKSwgZ2V0KGFbYVN0YXJ0KytdLCAtMSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICAvLyBvdGhlcndpc2UgbW92ZSB0aGUgc291cmNlIGZvcndhcmQsICdjYXVzZSB0aGVyZSdzIG5vdGhpbmcgdG8gZG8KICAgICAgICAgIGVsc2UgYVN0YXJ0Kys7CiAgICAgICAgfQogICAgICAgIC8vIHRoaXMgbm9kZSBoYXMgbm8gbWVhbmluZyBpbiB0aGUgZnV0dXJlIGxpc3QsIHNvIGl0J3MgbW9yZSB0aGFuIHNhZmUKICAgICAgICAvLyB0byByZW1vdmUgaXQsIGFuZCBjaGVjayB0aGUgbmV4dCBsaXZlIG5vZGUgb3V0IGluc3RlYWQsIG1lYW5pbmcKICAgICAgICAvLyB0aGF0IG9ubHkgdGhlIGxpdmUgbGlzdCBpbmRleCBzaG91bGQgYmUgZm9yd2FyZGVkCiAgICAgICAgZWxzZSByZW1vdmVDaGlsZChnZXQoYVthU3RhcnQrK10sIC0xKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBiCiAgfTsKCiAgY29uc3QgVU5NT1VOVF9TQ09QRSA9IFN5bWJvbCgndW5tb3VudCcpOwoKICBjb25zdCBFYWNoQmluZGluZyA9IHsKICAgIC8vIGR5bmFtaWMgYmluZGluZyBwcm9wZXJ0aWVzCiAgICAvLyBjaGlsZHJlbk1hcDogbnVsbCwKICAgIC8vIG5vZGU6IG51bGwsCiAgICAvLyByb290OiBudWxsLAogICAgLy8gY29uZGl0aW9uOiBudWxsLAogICAgLy8gZXZhbHVhdGU6IG51bGwsCiAgICAvLyB0ZW1wbGF0ZTogbnVsbCwKICAgIC8vIGlzVGVtcGxhdGVUYWc6IGZhbHNlLAogICAgbm9kZXM6IFtdLAogICAgLy8gZ2V0S2V5OiBudWxsLAogICAgLy8gaW5kZXhOYW1lOiBudWxsLAogICAgLy8gaXRlbU5hbWU6IG51bGwsCiAgICAvLyBhZnRlclBsYWNlaG9sZGVyOiBudWxsLAogICAgLy8gcGxhY2Vob2xkZXI6IG51bGwsCgogICAgLy8gQVBJIG1ldGhvZHMKICAgIG1vdW50KHNjb3BlLCBwYXJlbnRTY29wZSkgewogICAgICByZXR1cm4gdGhpcy51cGRhdGUoc2NvcGUsIHBhcmVudFNjb3BlKQogICAgfSwKICAgIHVwZGF0ZShzY29wZSwgcGFyZW50U2NvcGUpIHsKICAgICAgY29uc3QgeyBwbGFjZWhvbGRlciwgbm9kZXMsIGNoaWxkcmVuTWFwIH0gPSB0aGlzOwogICAgICBjb25zdCBjb2xsZWN0aW9uID0gc2NvcGUgPT09IFVOTU9VTlRfU0NPUEUgPyBudWxsIDogdGhpcy5ldmFsdWF0ZShzY29wZSk7CiAgICAgIGNvbnN0IGl0ZW1zID0gY29sbGVjdGlvbiA/IEFycmF5LmZyb20oY29sbGVjdGlvbikgOiBbXTsKCiAgICAgIC8vIHByZXBhcmUgdGhlIGRpZmZpbmcKICAgICAgY29uc3QgeyBuZXdDaGlsZHJlbk1hcCwgYmF0Y2hlcywgZnV0dXJlTm9kZXMgfSA9IGNyZWF0ZVBhdGNoKAogICAgICAgIGl0ZW1zLAogICAgICAgIHNjb3BlLAogICAgICAgIHBhcmVudFNjb3BlLAogICAgICAgIHRoaXMsCiAgICAgICk7CgogICAgICAvLyBwYXRjaCB0aGUgRE9NIG9ubHkgaWYgdGhlcmUgYXJlIG5ldyBub2RlcwogICAgICB1ZG9tZGlmZigKICAgICAgICBub2RlcywKICAgICAgICBmdXR1cmVOb2RlcywKICAgICAgICBwYXRjaChBcnJheS5mcm9tKGNoaWxkcmVuTWFwLnZhbHVlcygpKSwgcGFyZW50U2NvcGUpLAogICAgICAgIHBsYWNlaG9sZGVyLAogICAgICApOwoKICAgICAgLy8gdHJpZ2dlciB0aGUgbW91bnRzIGFuZCB0aGUgdXBkYXRlcwogICAgICBiYXRjaGVzLmZvckVhY2goKGZuKSA9PiBmbigpKTsKCiAgICAgIC8vIHVwZGF0ZSB0aGUgY2hpbGRyZW4gbWFwCiAgICAgIHRoaXMuY2hpbGRyZW5NYXAgPSBuZXdDaGlsZHJlbk1hcDsKICAgICAgdGhpcy5ub2RlcyA9IGZ1dHVyZU5vZGVzOwoKICAgICAgcmV0dXJuIHRoaXMKICAgIH0sCiAgICB1bm1vdW50KHNjb3BlLCBwYXJlbnRTY29wZSkgewogICAgICB0aGlzLnVwZGF0ZShVTk1PVU5UX1NDT1BFLCBwYXJlbnRTY29wZSk7CgogICAgICByZXR1cm4gdGhpcwogICAgfSwKICB9OwoKICAvKioKICAgKiBQYXRjaCB0aGUgRE9NIHdoaWxlIGRpZmZpbmcKICAgKiBAcGFyYW0gICB7YW55W119IHJlZHVuZGFudCAtIGxpc3Qgb2YgYWxsIHRoZSBjaGlsZHJlbiAodGVtcGxhdGUsIG5vZGVzLCBjb250ZXh0KSBhZGRlZCB2aWEgZWFjaAogICAqIEBwYXJhbSAgIHsqfSBwYXJlbnRTY29wZSAtIHNjb3BlIG9mIHRoZSBwYXJlbnQgdGVtcGxhdGUKICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IHBhdGNoIGZ1bmN0aW9uIHVzZWQgYnkgZG9tZGlmZgogICAqLwogIGZ1bmN0aW9uIHBhdGNoKHJlZHVuZGFudCwgcGFyZW50U2NvcGUpIHsKICAgIHJldHVybiAoaXRlbSwgaW5mbykgPT4gewogICAgICBpZiAoaW5mbyA8IDApIHsKICAgICAgICAvLyBnZXQgdGhlIGxhc3QgZWxlbWVudCBhZGRlZCB0byB0aGUgY2hpbGRyZW5NYXAgc2F2ZWQgcHJldmlvdXNseQogICAgICAgIGNvbnN0IGVsZW1lbnQgPSByZWR1bmRhbnRbcmVkdW5kYW50Lmxlbmd0aCAtIDFdOwoKICAgICAgICBpZiAoZWxlbWVudCkgewogICAgICAgICAgLy8gZ2V0IHRoZSBub2RlcyBhbmQgdGhlIHRlbXBsYXRlIGluIHN0b3JlZCBpbiB0aGUgbGFzdCBjaGlsZCBvZiB0aGUgY2hpbGRyZW5NYXAKICAgICAgICAgIGNvbnN0IHsgdGVtcGxhdGUsIG5vZGVzLCBjb250ZXh0IH0gPSBlbGVtZW50OwogICAgICAgICAgLy8gcmVtb3ZlIHRoZSBsYXN0IG5vZGUgKG5vdGljZSA8dGVtcGxhdGU+IHRhZ3MgbWlnaHQgaGF2ZSBtb3JlIGNoaWxkcmVuIG5vZGVzKQogICAgICAgICAgbm9kZXMucG9wKCk7CgogICAgICAgICAgLy8gbm90aWNlIHRoYXQgd2UgcGFzcyBudWxsIGFzIGxhc3QgYXJndW1lbnQgYmVjYXVzZQogICAgICAgICAgLy8gdGhlIHJvb3Qgbm9kZSBhbmQgaXRzIGNoaWxkcmVuIHdpbGwgYmUgcmVtb3ZlZCBieSBkb21kaWZmCiAgICAgICAgICBpZiAoIW5vZGVzLmxlbmd0aCkgewogICAgICAgICAgICAvLyB3ZSBoYXZlIGNsZWFyZWQgYWxsIHRoZSBjaGlsZHJlbiBub2RlcyBhbmQgd2UgY2FuIHVubW91bnQgdGhpcyB0ZW1wbGF0ZQogICAgICAgICAgICByZWR1bmRhbnQucG9wKCk7CiAgICAgICAgICAgIHRlbXBsYXRlLnVubW91bnQoY29udGV4dCwgcGFyZW50U2NvcGUsIG51bGwpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIGl0ZW0KICAgIH0KICB9CgogIC8qKgogICAqIENoZWNrIHdoZXRoZXIgYSB0ZW1wbGF0ZSBtdXN0IGJlIGZpbHRlcmVkIGZyb20gYSBsb29wCiAgICogQHBhcmFtICAge0Z1bmN0aW9ufSBjb25kaXRpb24gLSBmaWx0ZXIgZnVuY3Rpb24KICAgKiBAcGFyYW0gICB7T2JqZWN0fSBjb250ZXh0IC0gYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBmaWx0ZXIgZnVuY3Rpb24KICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGlzIGl0ZW0gc2hvdWxkIGJlIHNraXBwZWQKICAgKi8KICBmdW5jdGlvbiBtdXN0RmlsdGVySXRlbShjb25kaXRpb24sIGNvbnRleHQpIHsKICAgIHJldHVybiBjb25kaXRpb24gPyAhY29uZGl0aW9uKGNvbnRleHQpIDogZmFsc2UKICB9CgogIC8qKgogICAqIEV4dGVuZCB0aGUgc2NvcGUgb2YgdGhlIGxvb3BlZCB0ZW1wbGF0ZQogICAqIEBwYXJhbSAgIHtPYmplY3R9IHNjb3BlIC0gY3VycmVudCB0ZW1wbGF0ZSBzY29wZQogICAqIEBwYXJhbSAgIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zCiAgICogQHBhcmFtICAge3N0cmluZ30gb3B0aW9ucy5pdGVtTmFtZSAtIGtleSB0byBpZGVudGlmeSB0aGUgbG9vcGVkIGl0ZW0gaW4gdGhlIG5ldyBjb250ZXh0CiAgICogQHBhcmFtICAge3N0cmluZ30gb3B0aW9ucy5pbmRleE5hbWUgLSBrZXkgdG8gaWRlbnRpZnkgdGhlIGluZGV4IG9mIHRoZSBsb29wZWQgaXRlbQogICAqIEBwYXJhbSAgIHtudW1iZXJ9IG9wdGlvbnMuaW5kZXggLSBjdXJyZW50IGluZGV4CiAgICogQHBhcmFtICAgeyp9IG9wdGlvbnMuaXRlbSAtIGNvbGxlY3Rpb24gaXRlbSBsb29wZWQKICAgKiBAcmV0dXJucyB7T2JqZWN0fSBlbmhhbmNlZCBzY29wZSBvYmplY3QKICAgKi8KICBmdW5jdGlvbiBleHRlbmRTY29wZShzY29wZSwgeyBpdGVtTmFtZSwgaW5kZXhOYW1lLCBpbmRleCwgaXRlbSB9KSB7CiAgICBkZWZpbmVQcm9wZXJ0eShzY29wZSwgaXRlbU5hbWUsIGl0ZW0pOwogICAgaWYgKGluZGV4TmFtZSkgZGVmaW5lUHJvcGVydHkoc2NvcGUsIGluZGV4TmFtZSwgaW5kZXgpOwoKICAgIHJldHVybiBzY29wZQogIH0KCiAgLyoqCiAgICogTG9vcCB0aGUgY3VycmVudCB0ZW1wbGF0ZSBpdGVtcwogICAqIEBwYXJhbSAgIHtBcnJheX0gaXRlbXMgLSBleHByZXNzaW9uIGNvbGxlY3Rpb24gdmFsdWUKICAgKiBAcGFyYW0gICB7Kn0gc2NvcGUgLSB0ZW1wbGF0ZSBzY29wZQogICAqIEBwYXJhbSAgIHsqfSBwYXJlbnRTY29wZSAtIHNjb3BlIG9mIHRoZSBwYXJlbnQgdGVtcGxhdGUKICAgKiBAcGFyYW0gICB7RWFjaEJpbmRpbmd9IGJpbmRpbmcgLSBlYWNoIGJpbmRpbmcgb2JqZWN0IGluc3RhbmNlCiAgICogQHJldHVybnMge09iamVjdH0gZGF0YQogICAqIEByZXR1cm5zIHtNYXB9IGRhdGEubmV3Q2hpbGRyZW5NYXAgLSBhIE1hcCBjb250YWluaW5nIHRoZSBuZXcgY2hpbGRyZW4gdGVtcGxhdGUgc3RydWN0dXJlCiAgICogQHJldHVybnMge0FycmF5fSBkYXRhLmJhdGNoZXMgLSBhcnJheSBjb250YWluaW5nIHRoZSB0ZW1wbGF0ZSBsaWZlY3ljbGUgZnVuY3Rpb25zIHRvIHRyaWdnZXIKICAgKiBAcmV0dXJucyB7QXJyYXl9IGRhdGEuZnV0dXJlTm9kZXMgLSBhcnJheSBjb250YWluaW5nIHRoZSBub2RlcyB3ZSBuZWVkIHRvIGRpZmYKICAgKi8KICBmdW5jdGlvbiBjcmVhdGVQYXRjaChpdGVtcywgc2NvcGUsIHBhcmVudFNjb3BlLCBiaW5kaW5nKSB7CiAgICBjb25zdCB7CiAgICAgIGNvbmRpdGlvbiwKICAgICAgdGVtcGxhdGUsCiAgICAgIGNoaWxkcmVuTWFwLAogICAgICBpdGVtTmFtZSwKICAgICAgZ2V0S2V5LAogICAgICBpbmRleE5hbWUsCiAgICAgIHJvb3QsCiAgICAgIGlzVGVtcGxhdGVUYWcsCiAgICB9ID0gYmluZGluZzsKICAgIGNvbnN0IG5ld0NoaWxkcmVuTWFwID0gbmV3IE1hcCgpOwogICAgY29uc3QgYmF0Y2hlcyA9IFtdOwogICAgY29uc3QgZnV0dXJlTm9kZXMgPSBbXTsKCiAgICBpdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4gewogICAgICBjb25zdCBjb250ZXh0ID0gZXh0ZW5kU2NvcGUoT2JqZWN0LmNyZWF0ZShzY29wZSksIHsKICAgICAgICBpdGVtTmFtZSwKICAgICAgICBpbmRleE5hbWUsCiAgICAgICAgaW5kZXgsCiAgICAgICAgaXRlbSwKICAgICAgfSk7CiAgICAgIGNvbnN0IGtleSA9IGdldEtleSA/IGdldEtleShjb250ZXh0KSA6IGluZGV4OwogICAgICBjb25zdCBvbGRJdGVtID0gY2hpbGRyZW5NYXAuZ2V0KGtleSk7CiAgICAgIGNvbnN0IG5vZGVzID0gW107CgogICAgICBpZiAobXVzdEZpbHRlckl0ZW0oY29uZGl0aW9uLCBjb250ZXh0KSkgewogICAgICAgIHJldHVybgogICAgICB9CgogICAgICBjb25zdCBtdXN0TW91bnQgPSAhb2xkSXRlbTsKICAgICAgY29uc3QgY29tcG9uZW50VGVtcGxhdGUgPSBvbGRJdGVtID8gb2xkSXRlbS50ZW1wbGF0ZSA6IHRlbXBsYXRlLmNsb25lKCk7CiAgICAgIGNvbnN0IGVsID0gY29tcG9uZW50VGVtcGxhdGUuZWwgfHwgcm9vdC5jbG9uZU5vZGUoKTsKICAgICAgY29uc3QgbWV0YSA9CiAgICAgICAgaXNUZW1wbGF0ZVRhZyAmJiBtdXN0TW91bnQKICAgICAgICAgID8gY3JlYXRlVGVtcGxhdGVNZXRhKGNvbXBvbmVudFRlbXBsYXRlKQogICAgICAgICAgOiBjb21wb25lbnRUZW1wbGF0ZS5tZXRhOwoKICAgICAgaWYgKG11c3RNb3VudCkgewogICAgICAgIGJhdGNoZXMucHVzaCgoKSA9PgogICAgICAgICAgY29tcG9uZW50VGVtcGxhdGUubW91bnQoZWwsIGNvbnRleHQsIHBhcmVudFNjb3BlLCBtZXRhKSwKICAgICAgICApOwogICAgICB9IGVsc2UgewogICAgICAgIGJhdGNoZXMucHVzaCgoKSA9PiBjb21wb25lbnRUZW1wbGF0ZS51cGRhdGUoY29udGV4dCwgcGFyZW50U2NvcGUpKTsKICAgICAgfQoKICAgICAgLy8gY3JlYXRlIHRoZSBjb2xsZWN0aW9uIG9mIG5vZGVzIHRvIHVwZGF0ZSBvciB0byBhZGQKICAgICAgLy8gaW4gY2FzZSBvZiB0ZW1wbGF0ZSB0YWdzIHdlIG5lZWQgdG8gYWRkIGFsbCBpdHMgY2hpbGRyZW4gbm9kZXMKICAgICAgaWYgKGlzVGVtcGxhdGVUYWcpIHsKICAgICAgICBub2Rlcy5wdXNoKC4uLm1ldGEuY2hpbGRyZW4pOwogICAgICB9IGVsc2UgewogICAgICAgIG5vZGVzLnB1c2goZWwpOwogICAgICB9CgogICAgICAvLyBkZWxldGUgdGhlIG9sZCBpdGVtIGZyb20gdGhlIGNoaWxkcmVuIG1hcAogICAgICBjaGlsZHJlbk1hcC5kZWxldGUoa2V5KTsKICAgICAgZnV0dXJlTm9kZXMucHVzaCguLi5ub2Rlcyk7CgogICAgICAvLyB1cGRhdGUgdGhlIGNoaWxkcmVuIG1hcAogICAgICBuZXdDaGlsZHJlbk1hcC5zZXQoa2V5LCB7CiAgICAgICAgbm9kZXMsCiAgICAgICAgdGVtcGxhdGU6IGNvbXBvbmVudFRlbXBsYXRlLAogICAgICAgIGNvbnRleHQsCiAgICAgICAgaW5kZXgsCiAgICAgIH0pOwogICAgfSk7CgogICAgcmV0dXJuIHsKICAgICAgbmV3Q2hpbGRyZW5NYXAsCiAgICAgIGJhdGNoZXMsCiAgICAgIGZ1dHVyZU5vZGVzLAogICAgfQogIH0KCiAgZnVuY3Rpb24gY3JlYXRlJDYoCiAgICBub2RlLAogICAgeyBldmFsdWF0ZSwgY29uZGl0aW9uLCBpdGVtTmFtZSwgaW5kZXhOYW1lLCBnZXRLZXksIHRlbXBsYXRlIH0sCiAgKSB7CiAgICBjb25zdCBwbGFjZWhvbGRlciA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTsKICAgIGNvbnN0IHJvb3QgPSBub2RlLmNsb25lTm9kZSgpOwoKICAgIGluc2VydEJlZm9yZShwbGFjZWhvbGRlciwgbm9kZSk7CiAgICByZW1vdmVDaGlsZChub2RlKTsKCiAgICByZXR1cm4gewogICAgICAuLi5FYWNoQmluZGluZywKICAgICAgY2hpbGRyZW5NYXA6IG5ldyBNYXAoKSwKICAgICAgbm9kZSwKICAgICAgcm9vdCwKICAgICAgY29uZGl0aW9uLAogICAgICBldmFsdWF0ZSwKICAgICAgaXNUZW1wbGF0ZVRhZzogaXNUZW1wbGF0ZShyb290KSwKICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlLmNyZWF0ZURPTShub2RlKSwKICAgICAgZ2V0S2V5LAogICAgICBpbmRleE5hbWUsCiAgICAgIGl0ZW1OYW1lLAogICAgICBwbGFjZWhvbGRlciwKICAgIH0KICB9CgogIC8qKgogICAqIEJpbmRpbmcgcmVzcG9uc2libGUgZm9yIHRoZSBgaWZgIGRpcmVjdGl2ZQogICAqLwogIGNvbnN0IElmQmluZGluZyA9IHsKICAgIC8vIGR5bmFtaWMgYmluZGluZyBwcm9wZXJ0aWVzCiAgICAvLyBub2RlOiBudWxsLAogICAgLy8gZXZhbHVhdGU6IG51bGwsCiAgICAvLyBpc1RlbXBsYXRlVGFnOiBmYWxzZSwKICAgIC8vIHBsYWNlaG9sZGVyOiBudWxsLAogICAgLy8gdGVtcGxhdGU6IG51bGwsCgogICAgLy8gQVBJIG1ldGhvZHMKICAgIG1vdW50KHNjb3BlLCBwYXJlbnRTY29wZSkgewogICAgICByZXR1cm4gdGhpcy51cGRhdGUoc2NvcGUsIHBhcmVudFNjb3BlKQogICAgfSwKICAgIHVwZGF0ZShzY29wZSwgcGFyZW50U2NvcGUpIHsKICAgICAgY29uc3QgdmFsdWUgPSAhIXRoaXMuZXZhbHVhdGUoc2NvcGUpOwogICAgICBjb25zdCBtdXN0TW91bnQgPSAhdGhpcy52YWx1ZSAmJiB2YWx1ZTsKICAgICAgY29uc3QgbXVzdFVubW91bnQgPSB0aGlzLnZhbHVlICYmICF2YWx1ZTsKICAgICAgY29uc3QgbW91bnQgPSAoKSA9PiB7CiAgICAgICAgY29uc3QgcHJpc3RpbmUgPSB0aGlzLm5vZGUuY2xvbmVOb2RlKCk7CgogICAgICAgIGluc2VydEJlZm9yZShwcmlzdGluZSwgdGhpcy5wbGFjZWhvbGRlcik7CiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGUuY2xvbmUoKTsKICAgICAgICB0aGlzLnRlbXBsYXRlLm1vdW50KHByaXN0aW5lLCBzY29wZSwgcGFyZW50U2NvcGUpOwogICAgICB9OwoKICAgICAgc3dpdGNoICh0cnVlKSB7CiAgICAgICAgY2FzZSBtdXN0TW91bnQ6CiAgICAgICAgICBtb3VudCgpOwogICAgICAgICAgYnJlYWsKICAgICAgICBjYXNlIG11c3RVbm1vdW50OgogICAgICAgICAgdGhpcy51bm1vdW50KHNjb3BlKTsKICAgICAgICAgIGJyZWFrCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGlmICh2YWx1ZSkgdGhpcy50ZW1wbGF0ZS51cGRhdGUoc2NvcGUsIHBhcmVudFNjb3BlKTsKICAgICAgfQoKICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwoKICAgICAgcmV0dXJuIHRoaXMKICAgIH0sCiAgICB1bm1vdW50KHNjb3BlLCBwYXJlbnRTY29wZSkgewogICAgICB0aGlzLnRlbXBsYXRlLnVubW91bnQoc2NvcGUsIHBhcmVudFNjb3BlLCB0cnVlKTsKCiAgICAgIHJldHVybiB0aGlzCiAgICB9LAogIH07CgogIGZ1bmN0aW9uIGNyZWF0ZSQ1KG5vZGUsIHsgZXZhbHVhdGUsIHRlbXBsYXRlIH0pIHsKICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpOwoKICAgIGluc2VydEJlZm9yZShwbGFjZWhvbGRlciwgbm9kZSk7CiAgICByZW1vdmVDaGlsZChub2RlKTsKCiAgICByZXR1cm4gewogICAgICAuLi5JZkJpbmRpbmcsCiAgICAgIG5vZGUsCiAgICAgIGV2YWx1YXRlLAogICAgICBwbGFjZWhvbGRlciwKICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlLmNyZWF0ZURPTShub2RlKSwKICAgIH0KICB9CgogIC8qIGM4IGlnbm9yZSBuZXh0ICovCiAgY29uc3QgRWxlbWVudFByb3RvID0gdHlwZW9mIEVsZW1lbnQgPT09ICd1bmRlZmluZWQnID8ge30gOiBFbGVtZW50LnByb3RvdHlwZTsKICBjb25zdCBpc05hdGl2ZUh0bWxQcm9wZXJ0eSA9IG1lbW9pemUoCiAgICAobmFtZSkgPT4gRWxlbWVudFByb3RvLmhhc093blByb3BlcnR5KG5hbWUpLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lCiAgKTsKCiAgLyoqCiAgICogQWRkIGFsbCB0aGUgYXR0cmlidXRlcyBwcm92aWRlZAogICAqIEBwYXJhbSAgIHtIVE1MRWxlbWVudH0gbm9kZSAtIHRhcmdldCBub2RlCiAgICogQHBhcmFtICAge09iamVjdH0gYXR0cmlidXRlcyAtIG9iamVjdCBjb250YWluaW5nIHRoZSBhdHRyaWJ1dGVzIG5hbWVzIGFuZCB2YWx1ZXMKICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfSBzb3JyeSBpdCdzIGEgdm9pZCBmdW5jdGlvbiA6KAogICAqLwogIGZ1bmN0aW9uIHNldEFsbEF0dHJpYnV0ZXMobm9kZSwgYXR0cmlidXRlcykgewogICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaCgobmFtZSkgPT4KICAgICAgYXR0cmlidXRlRXhwcmVzc2lvbihub2RlLCB7IG5hbWUgfSwgYXR0cmlidXRlc1tuYW1lXSksCiAgICApOwogIH0KCiAgLyoqCiAgICogUmVtb3ZlIGFsbCB0aGUgYXR0cmlidXRlcyBwcm92aWRlZAogICAqIEBwYXJhbSAgIHtIVE1MRWxlbWVudH0gbm9kZSAtIHRhcmdldCBub2RlCiAgICogQHBhcmFtICAge09iamVjdH0gbmV3QXR0cmlidXRlcyAtIG9iamVjdCBjb250YWluaW5nIGFsbCB0aGUgbmV3IGF0dHJpYnV0ZSBuYW1lcwogICAqIEBwYXJhbSAgIHtPYmplY3R9IG9sZEF0dHJpYnV0ZXMgLSBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG9sZCBhdHRyaWJ1dGUgbmFtZXMKICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfSBzb3JyeSBpdCdzIGEgdm9pZCBmdW5jdGlvbiA6KAogICAqLwogIGZ1bmN0aW9uIHJlbW92ZUFsbEF0dHJpYnV0ZXMobm9kZSwgbmV3QXR0cmlidXRlcywgb2xkQXR0cmlidXRlcykgewogICAgY29uc3QgbmV3S2V5cyA9IG5ld0F0dHJpYnV0ZXMgPyBPYmplY3Qua2V5cyhuZXdBdHRyaWJ1dGVzKSA6IFtdOwoKICAgIE9iamVjdC5rZXlzKG9sZEF0dHJpYnV0ZXMpCiAgICAgIC5maWx0ZXIoKG5hbWUpID0+ICFuZXdLZXlzLmluY2x1ZGVzKG5hbWUpKQogICAgICAuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiBub2RlLnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpKTsKICB9CgogIC8qKgogICAqIENoZWNrIHdoZXRoZXIgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBjYW4gYmUgcmVuZGVyZWQKICAgKiBAcGFyYW0geyp9IHZhbHVlIC0gZXhwcmVzc2lvbiB2YWx1ZQogICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHdlIGNhbiByZW5kZXIgdGhpcyBhdHRyaWJ1dGUgdmFsdWUKICAgKi8KICBmdW5jdGlvbiBjYW5SZW5kZXJBdHRyaWJ1dGUodmFsdWUpIHsKICAgIHJldHVybiBbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbiddLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSkKICB9CgogIC8qKgogICAqIENoZWNrIHdoZXRoZXIgdGhlIGF0dHJpYnV0ZSBzaG91bGQgYmUgcmVtb3ZlZAogICAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBleHByZXNzaW9uIHZhbHVlCiAgICogQHBhcmFtICAge2Jvb2xlYW59IGlzQm9vbGVhbiAtIGZsYWcgdG8gaGFuZGxlIGJvb2xlYW4gYXR0cmlidXRlcwogICAqIEByZXR1cm5zIHtib29sZWFufSBib29sZWFuIC0gdHJ1ZSBpZiB0aGUgYXR0cmlidXRlIGNhbiBiZSByZW1vdmVkfQogICAqLwogIGZ1bmN0aW9uIHNob3VsZFJlbW92ZUF0dHJpYnV0ZSh2YWx1ZSwgaXNCb29sZWFuKSB7CiAgICAvLyBib29sZWFuIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIHJlbW92ZWQgaWYgdGhlIHZhbHVlIGlzIGZhbHN5CiAgICBpZiAoaXNCb29sZWFuKSByZXR1cm4gIXZhbHVlICYmIHZhbHVlICE9PSAwCiAgICAvLyBvdGhlcndpc2Ugd2UgY2FuIHRyeSB0byByZW5kZXIgaXQKICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHZhbHVlID09PSBudWxsCiAgfQoKICAvKioKICAgKiBUaGlzIG1ldGhvZHMgaGFuZGxlcyB0aGUgRE9NIGF0dHJpYnV0ZXMgdXBkYXRlcwogICAqIEBwYXJhbSAgIHtIVE1MRWxlbWVudH0gbm9kZSAtIHRhcmdldCBub2RlCiAgICogQHBhcmFtICAge09iamVjdH0gZXhwcmVzc2lvbiAtIGV4cHJlc3Npb24gb2JqZWN0CiAgICogQHBhcmFtICAge3N0cmluZ30gZXhwcmVzc2lvbi5uYW1lIC0gYXR0cmlidXRlIG5hbWUKICAgKiBAcGFyYW0gICB7Ym9vbGVhbn0gZXhwcmVzc2lvbi5pc0Jvb2xlYW4gLSBmbGFnIHRvIGhhbmRsZSBib29sZWFuIGF0dHJpYnV0ZXMKICAgKiBAcGFyYW0gICB7Kn0gdmFsdWUgLSBuZXcgZXhwcmVzc2lvbiB2YWx1ZQogICAqIEBwYXJhbSAgIHsqfSBvbGRWYWx1ZSAtIHRoZSBvbGQgZXhwcmVzc2lvbiBjYWNoZWQgdmFsdWUKICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAqLwogIGZ1bmN0aW9uIGF0dHJpYnV0ZUV4cHJlc3Npb24oCiAgICBub2RlLAogICAgeyBuYW1lLCBpc0Jvb2xlYW46IGlzQm9vbGVhbiQxIH0sCiAgICB2YWx1ZSwKICAgIG9sZFZhbHVlLAogICkgewogICAgLy8gaXMgaXQgYSBzcHJlYWQgb3BlcmF0b3I/IHsuLi5hdHRyaWJ1dGVzfQogICAgaWYgKCFuYW1lKSB7CiAgICAgIGlmIChvbGRWYWx1ZSkgewogICAgICAgIC8vIHJlbW92ZSBhbGwgdGhlIG9sZCBhdHRyaWJ1dGVzCiAgICAgICAgcmVtb3ZlQWxsQXR0cmlidXRlcyhub2RlLCB2YWx1ZSwgb2xkVmFsdWUpOwogICAgICB9CgogICAgICAvLyBpcyB0aGUgdmFsdWUgc3RpbGwgdHJ1dGh5PwogICAgICBpZiAodmFsdWUpIHsKICAgICAgICBzZXRBbGxBdHRyaWJ1dGVzKG5vZGUsIHZhbHVlKTsKICAgICAgfQoKICAgICAgcmV0dXJuCiAgICB9CgogICAgLy8gc3RvcmUgdGhlIGF0dHJpYnV0ZSBvbiB0aGUgbm9kZSB0byBtYWtlIGl0IGNvbXBhdGlibGUgd2l0aCBuYXRpdmUgY3VzdG9tIGVsZW1lbnRzCiAgICBpZiAoCiAgICAgICFpc05hdGl2ZUh0bWxQcm9wZXJ0eShuYW1lKSAmJgogICAgICAoaXNCb29sZWFuKHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkgfHwgaXNGdW5jdGlvbih2YWx1ZSkpCiAgICApIHsKICAgICAgbm9kZVtuYW1lXSA9IHZhbHVlOwogICAgfQoKICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUodmFsdWUsIGlzQm9vbGVhbiQxKSkgewogICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTsKICAgIH0gZWxzZSBpZiAoY2FuUmVuZGVyQXR0cmlidXRlKHZhbHVlKSkgewogICAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCBub3JtYWxpemVWYWx1ZShuYW1lLCB2YWx1ZSwgaXNCb29sZWFuJDEpKTsKICAgIH0KICB9CgogIC8qKgogICAqIEdldCB0aGUgdmFsdWUgYXMgc3RyaW5nCiAgICogQHBhcmFtICAge3N0cmluZ30gbmFtZSAtIGF0dHJpYnV0ZSBuYW1lCiAgICogQHBhcmFtICAgeyp9IHZhbHVlIC0gdXNlciBpbnB1dCB2YWx1ZQogICAqIEBwYXJhbSAgIHtib29sZWFufSBpc0Jvb2xlYW4gLSBib29sZWFuIGF0dHJpYnV0ZXMgZmxhZwogICAqIEByZXR1cm5zIHtzdHJpbmd9IGlucHV0IHZhbHVlIGFzIHN0cmluZwogICAqLwogIGZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKG5hbWUsIHZhbHVlLCBpc0Jvb2xlYW4pIHsKICAgIC8vIGJlIHN1cmUgdGhhdCBleHByZXNzaW9ucyBsaWtlIHNlbGVjdGVkPXsgdHJ1ZSB9IHdpbGwgYWx3YXlzIGJlIHJlbmRlcmVkIGFzIHNlbGVjdGVkPSdzZWxlY3RlZCcKICAgIC8vIGZpeCBodHRwczovL2dpdGh1Yi5jb20vcmlvdC9yaW90L2lzc3Vlcy8yOTc1CiAgICByZXR1cm4gdmFsdWUgPT09IHRydWUgJiYgaXNCb29sZWFuID8gbmFtZSA6IHZhbHVlCiAgfQoKICBjb25zdCBSRV9FVkVOVFNfUFJFRklYID0gL15vbi87CgogIGNvbnN0IGdldENhbGxiYWNrQW5kT3B0aW9ucyA9ICh2YWx1ZSkgPT4KICAgIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWUsIGZhbHNlXTsKCiAgLy8gc2VlIGFsc28gaHR0cHM6Ly9tZWRpdW0uY29tL0BXZWJSZWZsZWN0aW9uL2RvbS1oYW5kbGVldmVudC1hLWNyb3NzLXBsYXRmb3JtLXN0YW5kYXJkLXNpbmNlLXllYXItMjAwMC01YmYxNzI4N2ZkMzgKICBjb25zdCBFdmVudExpc3RlbmVyID0gewogICAgaGFuZGxlRXZlbnQoZXZlbnQpIHsKICAgICAgdGhpc1tldmVudC50eXBlXShldmVudCk7CiAgICB9LAogIH07CiAgY29uc3QgTGlzdGVuZXJzV2Vha01hcCA9IG5ldyBXZWFrTWFwKCk7CgogIGNvbnN0IGNyZWF0ZUxpc3RlbmVyID0gKG5vZGUpID0+IHsKICAgIGNvbnN0IGxpc3RlbmVyID0gT2JqZWN0LmNyZWF0ZShFdmVudExpc3RlbmVyKTsKICAgIExpc3RlbmVyc1dlYWtNYXAuc2V0KG5vZGUsIGxpc3RlbmVyKTsKICAgIHJldHVybiBsaXN0ZW5lcgogIH07CgogIC8qKgogICAqIFNldCBhIG5ldyBldmVudCBsaXN0ZW5lcgogICAqIEBwYXJhbSAgIHtIVE1MRWxlbWVudH0gbm9kZSAtIHRhcmdldCBub2RlCiAgICogQHBhcmFtICAge09iamVjdH0gZXhwcmVzc2lvbiAtIGV4cHJlc3Npb24gb2JqZWN0CiAgICogQHBhcmFtICAge3N0cmluZ30gZXhwcmVzc2lvbi5uYW1lIC0gZXZlbnQgbmFtZQogICAqIEBwYXJhbSAgIHsqfSB2YWx1ZSAtIG5ldyBleHByZXNzaW9uIHZhbHVlCiAgICogQHJldHVybnMge3ZhbHVlfSB0aGUgY2FsbGJhY2sganVzdCByZWNlaXZlZAogICAqLwogIGZ1bmN0aW9uIGV2ZW50RXhwcmVzc2lvbihub2RlLCB7IG5hbWUgfSwgdmFsdWUpIHsKICAgIGNvbnN0IG5vcm1hbGl6ZWRFdmVudE5hbWUgPSBuYW1lLnJlcGxhY2UoUkVfRVZFTlRTX1BSRUZJWCwgJycpOwogICAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IExpc3RlbmVyc1dlYWtNYXAuZ2V0KG5vZGUpIHx8IGNyZWF0ZUxpc3RlbmVyKG5vZGUpOwogICAgY29uc3QgW2NhbGxiYWNrLCBvcHRpb25zXSA9IGdldENhbGxiYWNrQW5kT3B0aW9ucyh2YWx1ZSk7CiAgICBjb25zdCBoYW5kbGVyID0gZXZlbnRMaXN0ZW5lcltub3JtYWxpemVkRXZlbnROYW1lXTsKICAgIGNvbnN0IG11c3RSZW1vdmVFdmVudCA9IGhhbmRsZXIgJiYgIWNhbGxiYWNrOwogICAgY29uc3QgbXVzdEFkZEV2ZW50ID0gY2FsbGJhY2sgJiYgIWhhbmRsZXI7CgogICAgaWYgKG11c3RSZW1vdmVFdmVudCkgewogICAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIobm9ybWFsaXplZEV2ZW50TmFtZSwgZXZlbnRMaXN0ZW5lcik7CiAgICB9CgogICAgaWYgKG11c3RBZGRFdmVudCkgewogICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIobm9ybWFsaXplZEV2ZW50TmFtZSwgZXZlbnRMaXN0ZW5lciwgb3B0aW9ucyk7CiAgICB9CgogICAgZXZlbnRMaXN0ZW5lcltub3JtYWxpemVkRXZlbnROYW1lXSA9IGNhbGxiYWNrOwogIH0KCiAgLyoqCiAgICogTm9ybWFsaXplIHRoZSB1c2VyIHZhbHVlIGluIG9yZGVyIHRvIHJlbmRlciBhIGVtcHR5IHN0cmluZyBpbiBjYXNlIG9mIGZhbHN5IHZhbHVlcwogICAqIEBwYXJhbSAgIHsqfSB2YWx1ZSAtIHVzZXIgaW5wdXQgdmFsdWUKICAgKiBAcmV0dXJucyB7c3RyaW5nfSBob3BlZnVsbHkgYSBzdHJpbmcKICAgKi8KICBmdW5jdGlvbiBub3JtYWxpemVTdHJpbmdWYWx1ZSh2YWx1ZSkgewogICAgcmV0dXJuIGlzTmlsKHZhbHVlKSA/ICcnIDogdmFsdWUKICB9CgogIC8qKgogICAqIEdldCB0aGUgdGhlIHRhcmdldCB0ZXh0IG5vZGUgdG8gdXBkYXRlIG9yIGNyZWF0ZSBvbmUgZnJvbSBvZiBhIGNvbW1lbnQgbm9kZQogICAqIEBwYXJhbSAgIHtIVE1MRWxlbWVudH0gbm9kZSAtIGFueSBodG1sIGVsZW1lbnQgY29udGFpbmluZyBjaGlsZE5vZGVzCiAgICogQHBhcmFtICAge251bWJlcn0gY2hpbGROb2RlSW5kZXggLSBpbmRleCBvZiB0aGUgdGV4dCBub2RlIGluIHRoZSBjaGlsZE5vZGVzIGxpc3QKICAgKiBAcmV0dXJucyB7VGV4dH0gdGhlIHRleHQgbm9kZSB0byB1cGRhdGUKICAgKi8KICBjb25zdCBnZXRUZXh0Tm9kZSA9IChub2RlLCBjaGlsZE5vZGVJbmRleCkgPT4gewogICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlc1tjaGlsZE5vZGVJbmRleF0KICB9OwoKICAvKioKICAgKiBUaGlzIG1ldGhvZHMgaGFuZGxlcyBhIHNpbXBsZSB0ZXh0IGV4cHJlc3Npb24gdXBkYXRlCiAgICogQHBhcmFtICAge0hUTUxFbGVtZW50fSBub2RlIC0gdGFyZ2V0IG5vZGUKICAgKiBAcGFyYW0gICB7T2JqZWN0fSBkYXRhIC0gZXhwcmVzc2lvbiBvYmplY3QKICAgKiBAcGFyYW0gICB7Kn0gdmFsdWUgLSBuZXcgZXhwcmVzc2lvbiB2YWx1ZQogICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICovCiAgZnVuY3Rpb24gdGV4dEV4cHJlc3Npb24obm9kZSwgZGF0YSwgdmFsdWUpIHsKICAgIG5vZGUuZGF0YSA9IG5vcm1hbGl6ZVN0cmluZ1ZhbHVlKHZhbHVlKTsKICB9CgogIC8qKgogICAqIFRoaXMgbWV0aG9kcyBoYW5kbGVzIHRoZSBpbnB1dCBmaWVsZHMgdmFsdWUgdXBkYXRlcwogICAqIEBwYXJhbSAgIHtIVE1MRWxlbWVudH0gbm9kZSAtIHRhcmdldCBub2RlCiAgICogQHBhcmFtICAge09iamVjdH0gZXhwcmVzc2lvbiAtIGV4cHJlc3Npb24gb2JqZWN0CiAgICogQHBhcmFtICAgeyp9IHZhbHVlIC0gbmV3IGV4cHJlc3Npb24gdmFsdWUKICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAqLwogIGZ1bmN0aW9uIHZhbHVlRXhwcmVzc2lvbihub2RlLCBleHByZXNzaW9uLCB2YWx1ZSkgewogICAgbm9kZS52YWx1ZSA9IG5vcm1hbGl6ZVN0cmluZ1ZhbHVlKHZhbHVlKTsKICB9CgogIGNvbnN0IGV4cHJlc3Npb25zID0gewogICAgW0FUVFJJQlVURV06IGF0dHJpYnV0ZUV4cHJlc3Npb24sCiAgICBbRVZFTlRdOiBldmVudEV4cHJlc3Npb24sCiAgICBbVEVYVF06IHRleHRFeHByZXNzaW9uLAogICAgW1ZBTFVFXTogdmFsdWVFeHByZXNzaW9uLAogIH07CgogIGNvbnN0IEV4cHJlc3Npb24gPSB7CiAgICAvLyBTdGF0aWMgcHJvcHMKICAgIC8vIG5vZGU6IG51bGwsCiAgICAvLyB2YWx1ZTogbnVsbCwKCiAgICAvLyBBUEkgbWV0aG9kcwogICAgLyoqCiAgICAgKiBNb3VudCB0aGUgZXhwcmVzc2lvbiBldmFsdWF0aW5nIGl0cyBpbml0aWFsIHZhbHVlCiAgICAgKiBAcGFyYW0gICB7Kn0gc2NvcGUgLSBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUgaXRzIGN1cnJlbnQgdmFsdWVzCiAgICAgKiBAcmV0dXJucyB7RXhwcmVzc2lvbn0gc2VsZgogICAgICovCiAgICBtb3VudChzY29wZSkgewogICAgICAvLyBob3BlZnVsbHkgYSBwdXJlIGZ1bmN0aW9uCiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmV2YWx1YXRlKHNjb3BlKTsKCiAgICAgIC8vIElPKCkgRE9NIHVwZGF0ZXMKICAgICAgYXBwbHkodGhpcywgdGhpcy52YWx1ZSk7CgogICAgICByZXR1cm4gdGhpcwogICAgfSwKICAgIC8qKgogICAgICogVXBkYXRlIHRoZSBleHByZXNzaW9uIGlmIGl0cyB2YWx1ZSBjaGFuZ2VkCiAgICAgKiBAcGFyYW0gICB7Kn0gc2NvcGUgLSBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUgaXRzIGN1cnJlbnQgdmFsdWVzCiAgICAgKiBAcmV0dXJucyB7RXhwcmVzc2lvbn0gc2VsZgogICAgICovCiAgICB1cGRhdGUoc2NvcGUpIHsKICAgICAgLy8gcHVyZSBmdW5jdGlvbgogICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZXZhbHVhdGUoc2NvcGUpOwoKICAgICAgaWYgKHRoaXMudmFsdWUgIT09IHZhbHVlKSB7CiAgICAgICAgLy8gSU8oKSBET00gdXBkYXRlcwogICAgICAgIGFwcGx5KHRoaXMsIHZhbHVlKTsKICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzCiAgICB9LAogICAgLyoqCiAgICAgKiBFeHByZXNzaW9uIHRlYXJkb3duIG1ldGhvZAogICAgICogQHJldHVybnMge0V4cHJlc3Npb259IHNlbGYKICAgICAqLwogICAgdW5tb3VudCgpIHsKICAgICAgLy8gdW5tb3VudCBvbmx5IHRoZSBldmVudCBoYW5kbGluZyBleHByZXNzaW9ucwogICAgICBpZiAodGhpcy50eXBlID09PSBFVkVOVCkgYXBwbHkodGhpcywgbnVsbCk7CgogICAgICByZXR1cm4gdGhpcwogICAgfSwKICB9OwoKICAvKioKICAgKiBJTygpIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgRE9NIHVwZGF0ZXMKICAgKiBAcGFyYW0ge0V4cHJlc3Npb259IGV4cHJlc3Npb24gLSBleHByZXNzaW9uIG9iamVjdAogICAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBjdXJyZW50IGV4cHJlc3Npb24gdmFsdWUKICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAqLwogIGZ1bmN0aW9uIGFwcGx5KGV4cHJlc3Npb24sIHZhbHVlKSB7CiAgICByZXR1cm4gZXhwcmVzc2lvbnNbZXhwcmVzc2lvbi50eXBlXSgKICAgICAgZXhwcmVzc2lvbi5ub2RlLAogICAgICBleHByZXNzaW9uLAogICAgICB2YWx1ZSwKICAgICAgZXhwcmVzc2lvbi52YWx1ZSwKICAgICkKICB9CgogIGZ1bmN0aW9uIGNyZWF0ZSQ0KG5vZGUsIGRhdGEpIHsKICAgIHJldHVybiB7CiAgICAgIC4uLkV4cHJlc3Npb24sCiAgICAgIC4uLmRhdGEsCiAgICAgIG5vZGU6IGRhdGEudHlwZSA9PT0gVEVYVCA/IGdldFRleHROb2RlKG5vZGUsIGRhdGEuY2hpbGROb2RlSW5kZXgpIDogbm9kZSwKICAgIH0KICB9CgogIC8qKgogICAqIENyZWF0ZSBhIGZsYXQgb2JqZWN0IGhhdmluZyBhcyBrZXlzIGEgbGlzdCBvZiBtZXRob2RzIHRoYXQgaWYgZGlzcGF0Y2hlZCB3aWxsIHByb3BhZ2F0ZQogICAqIG9uIHRoZSB3aG9sZSBjb2xsZWN0aW9uCiAgICogQHBhcmFtICAge0FycmF5fSBjb2xsZWN0aW9uIC0gY29sbGVjdGlvbiB0byBpdGVyYXRlCiAgICogQHBhcmFtICAge0FycmF5PHN0cmluZz59IG1ldGhvZHMgLSBtZXRob2RzIHRvIGV4ZWN1dGUgb24gZWFjaCBpdGVtIG9mIHRoZSBjb2xsZWN0aW9uCiAgICogQHBhcmFtICAgeyp9IGNvbnRleHQgLSBjb250ZXh0IHJldHVybmVkIGJ5IHRoZSBuZXcgbWV0aG9kcyBjcmVhdGVkCiAgICogQHJldHVybnMge09iamVjdH0gYSBuZXcgb2JqZWN0IHRvIHNpbXBsaWZ5IHRoZSB0aGUgbmVzdGVkIG1ldGhvZHMgZGlzcGF0Y2hpbmcKICAgKi8KICBmdW5jdGlvbiBmbGF0dGVuQ29sbGVjdGlvbk1ldGhvZHMoY29sbGVjdGlvbiwgbWV0aG9kcywgY29udGV4dCkgewogICAgcmV0dXJuIG1ldGhvZHMucmVkdWNlKChhY2MsIG1ldGhvZCkgPT4gewogICAgICByZXR1cm4gewogICAgICAgIC4uLmFjYywKICAgICAgICBbbWV0aG9kXTogKHNjb3BlKSA9PiB7CiAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbi5tYXAoKGl0ZW0pID0+IGl0ZW1bbWV0aG9kXShzY29wZSkpICYmIGNvbnRleHQKICAgICAgICB9LAogICAgICB9CiAgICB9LCB7fSkKICB9CgogIGZ1bmN0aW9uIGNyZWF0ZSQzKG5vZGUsIHsgZXhwcmVzc2lvbnMgfSkgewogICAgcmV0dXJuIGZsYXR0ZW5Db2xsZWN0aW9uTWV0aG9kcygKICAgICAgZXhwcmVzc2lvbnMubWFwKChleHByZXNzaW9uKSA9PiBjcmVhdGUkNChub2RlLCBleHByZXNzaW9uKSksCiAgICAgIFsnbW91bnQnLCAndXBkYXRlJywgJ3VubW91bnQnXSwKICAgICkKICB9CgogIGZ1bmN0aW9uIGV4dGVuZFBhcmVudFNjb3BlKGF0dHJpYnV0ZXMsIHNjb3BlLCBwYXJlbnRTY29wZSkgewogICAgaWYgKCFhdHRyaWJ1dGVzIHx8ICFhdHRyaWJ1dGVzLmxlbmd0aCkgcmV0dXJuIHBhcmVudFNjb3BlCgogICAgY29uc3QgZXhwcmVzc2lvbnMgPSBhdHRyaWJ1dGVzLm1hcCgoYXR0cikgPT4gKHsKICAgICAgLi4uYXR0ciwKICAgICAgdmFsdWU6IGF0dHIuZXZhbHVhdGUoc2NvcGUpLAogICAgfSkpOwoKICAgIHJldHVybiBPYmplY3QuYXNzaWduKAogICAgICBPYmplY3QuY3JlYXRlKHBhcmVudFNjb3BlIHx8IG51bGwpLAogICAgICBldmFsdWF0ZUF0dHJpYnV0ZUV4cHJlc3Npb25zKGV4cHJlc3Npb25zKSwKICAgICkKICB9CgogIC8vIHRoaXMgZnVuY3Rpb24gaXMgb25seSBtZWFudCB0byBmaXggYW4gZWRnZSBjYXNlCiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Jpb3QvcmlvdC9pc3N1ZXMvMjg0MgogIGNvbnN0IGdldFJlYWxQYXJlbnQgPSAoc2NvcGUsIHBhcmVudFNjb3BlKSA9PgogICAgc2NvcGVbUEFSRU5UX0tFWV9TWU1CT0xdIHx8IHBhcmVudFNjb3BlOwoKICBjb25zdCBTbG90QmluZGluZyA9IHsKICAgIC8vIGR5bmFtaWMgYmluZGluZyBwcm9wZXJ0aWVzCiAgICAvLyBub2RlOiBudWxsLAogICAgLy8gbmFtZTogbnVsbCwKICAgIGF0dHJpYnV0ZXM6IFtdLAogICAgLy8gdGVtcGxhdGU6IG51bGwsCgogICAgZ2V0VGVtcGxhdGVTY29wZShzY29wZSwgcGFyZW50U2NvcGUpIHsKICAgICAgcmV0dXJuIGV4dGVuZFBhcmVudFNjb3BlKHRoaXMuYXR0cmlidXRlcywgc2NvcGUsIHBhcmVudFNjb3BlKQogICAgfSwKCiAgICAvLyBBUEkgbWV0aG9kcwogICAgbW91bnQoc2NvcGUsIHBhcmVudFNjb3BlKSB7CiAgICAgIGNvbnN0IHRlbXBsYXRlRGF0YSA9IHNjb3BlLnNsb3RzCiAgICAgICAgPyBzY29wZS5zbG90cy5maW5kKCh7IGlkIH0pID0+IGlkID09PSB0aGlzLm5hbWUpCiAgICAgICAgOiBmYWxzZTsKICAgICAgY29uc3QgeyBwYXJlbnROb2RlIH0gPSB0aGlzLm5vZGU7CiAgICAgIGNvbnN0IHJlYWxQYXJlbnQgPSBnZXRSZWFsUGFyZW50KHNjb3BlLCBwYXJlbnRTY29wZSk7CgogICAgICB0aGlzLnRlbXBsYXRlID0KICAgICAgICB0ZW1wbGF0ZURhdGEgJiYKICAgICAgICBjcmVhdGUodGVtcGxhdGVEYXRhLmh0bWwsIHRlbXBsYXRlRGF0YS5iaW5kaW5ncykuY3JlYXRlRE9NKHBhcmVudE5vZGUpOwoKICAgICAgaWYgKHRoaXMudGVtcGxhdGUpIHsKICAgICAgICBjbGVhbk5vZGUodGhpcy5ub2RlKTsKICAgICAgICB0aGlzLnRlbXBsYXRlLm1vdW50KAogICAgICAgICAgdGhpcy5ub2RlLAogICAgICAgICAgdGhpcy5nZXRUZW1wbGF0ZVNjb3BlKHNjb3BlLCByZWFsUGFyZW50KSwKICAgICAgICAgIHJlYWxQYXJlbnQsCiAgICAgICAgKTsKICAgICAgICB0aGlzLnRlbXBsYXRlLmNoaWxkcmVuID0gQXJyYXkuZnJvbSh0aGlzLm5vZGUuY2hpbGROb2Rlcyk7CiAgICAgIH0KCiAgICAgIG1vdmVTbG90SW5uZXJDb250ZW50KHRoaXMubm9kZSk7CiAgICAgIHJlbW92ZUNoaWxkKHRoaXMubm9kZSk7CgogICAgICByZXR1cm4gdGhpcwogICAgfSwKICAgIHVwZGF0ZShzY29wZSwgcGFyZW50U2NvcGUpIHsKICAgICAgaWYgKHRoaXMudGVtcGxhdGUpIHsKICAgICAgICBjb25zdCByZWFsUGFyZW50ID0gZ2V0UmVhbFBhcmVudChzY29wZSwgcGFyZW50U2NvcGUpOwogICAgICAgIHRoaXMudGVtcGxhdGUudXBkYXRlKHRoaXMuZ2V0VGVtcGxhdGVTY29wZShzY29wZSwgcmVhbFBhcmVudCksIHJlYWxQYXJlbnQpOwogICAgICB9CgogICAgICByZXR1cm4gdGhpcwogICAgfSwKICAgIHVubW91bnQoc2NvcGUsIHBhcmVudFNjb3BlLCBtdXN0UmVtb3ZlUm9vdCkgewogICAgICBpZiAodGhpcy50ZW1wbGF0ZSkgewogICAgICAgIHRoaXMudGVtcGxhdGUudW5tb3VudCgKICAgICAgICAgIHRoaXMuZ2V0VGVtcGxhdGVTY29wZShzY29wZSwgcGFyZW50U2NvcGUpLAogICAgICAgICAgbnVsbCwKICAgICAgICAgIG11c3RSZW1vdmVSb290LAogICAgICAgICk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzCiAgICB9LAogIH07CgogIC8qKgogICAqIE1vdmUgdGhlIGlubmVyIGNvbnRlbnQgb2YgdGhlIHNsb3RzIG91dHNpZGUgb2YgdGhlbQogICAqIEBwYXJhbSAgIHtIVE1MRWxlbWVudH0gc2xvdCAtIHNsb3Qgbm9kZQogICAqIEByZXR1cm5zIHt1bmRlZmluZWR9IGl0J3MgYSB2b2lkIG1ldGhvZCDCr1xfKOODhClfL8KvCiAgICovCiAgZnVuY3Rpb24gbW92ZVNsb3RJbm5lckNvbnRlbnQoc2xvdCkgewogICAgY29uc3QgY2hpbGQgPSBzbG90ICYmIHNsb3QuZmlyc3RDaGlsZDsKCiAgICBpZiAoIWNoaWxkKSByZXR1cm4KCiAgICBpbnNlcnRCZWZvcmUoY2hpbGQsIHNsb3QpOwogICAgbW92ZVNsb3RJbm5lckNvbnRlbnQoc2xvdCk7CiAgfQoKICAvKioKICAgKiBDcmVhdGUgYSBzaW5nbGUgc2xvdCBiaW5kaW5nCiAgICogQHBhcmFtICAge0hUTUxFbGVtZW50fSBub2RlIC0gc2xvdCBub2RlCiAgICogQHBhcmFtICAge3N0cmluZ30gbmFtZSAtIHNsb3QgaWQKICAgKiBAcGFyYW0gICB7QXR0cmlidXRlRXhwcmVzc2lvbkRhdGFbXX0gYXR0cmlidXRlcyAtIHNsb3QgYXR0cmlidXRlcwogICAqIEByZXR1cm5zIHtPYmplY3R9IFNsb3QgYmluZGluZyBvYmplY3QKICAgKi8KICBmdW5jdGlvbiBjcmVhdGVTbG90KG5vZGUsIHsgbmFtZSwgYXR0cmlidXRlcyB9KSB7CiAgICByZXR1cm4gewogICAgICAuLi5TbG90QmluZGluZywKICAgICAgYXR0cmlidXRlcywKICAgICAgbm9kZSwKICAgICAgbmFtZSwKICAgIH0KICB9CgogIC8qKgogICAqIENyZWF0ZSBhIG5ldyB0YWcgb2JqZWN0IGlmIGl0IHdhcyByZWdpc3RlcmVkIGJlZm9yZSwgb3RoZXJ3aXNlIGZhbGxiYWNrIHRvIHRoZSBzaW1wbGUKICAgKiB0ZW1wbGF0ZSBjaHVuawogICAqIEBwYXJhbSAgIHtGdW5jdGlvbn0gY29tcG9uZW50IC0gY29tcG9uZW50IGZhY3RvcnkgZnVuY3Rpb24KICAgKiBAcGFyYW0gICB7QXJyYXk8T2JqZWN0Pn0gc2xvdHMgLSBhcnJheSBjb250YWluaW5nIHRoZSBzbG90cyBtYXJrdXAKICAgKiBAcGFyYW0gICB7QXJyYXl9IGF0dHJpYnV0ZXMgLSBkeW5hbWljIGF0dHJpYnV0ZXMgdGhhdCB3aWxsIGJlIHJlY2VpdmVkIGJ5IHRoZSB0YWcgZWxlbWVudAogICAqIEByZXR1cm5zIHtUYWdJbXBsZW1lbnRhdGlvbnxUZW1wbGF0ZUNodW5rfSBhIHRhZyBpbXBsZW1lbnRhdGlvbiBvciBhIHRlbXBsYXRlIGNodW5rIGFzIGZhbGxiYWNrCiAgICovCiAgZnVuY3Rpb24gZ2V0VGFnKGNvbXBvbmVudCwgc2xvdHMgPSBbXSwgYXR0cmlidXRlcyA9IFtdKSB7CiAgICAvLyBpZiB0aGlzIHRhZyB3YXMgcmVnaXN0ZXJlZCBiZWZvcmUgd2Ugd2lsbCByZXR1cm4gaXRzIGltcGxlbWVudGF0aW9uCiAgICBpZiAoY29tcG9uZW50KSB7CiAgICAgIHJldHVybiBjb21wb25lbnQoeyBzbG90cywgYXR0cmlidXRlcyB9KQogICAgfQoKICAgIC8vIG90aGVyd2lzZSB3ZSByZXR1cm4gYSB0ZW1wbGF0ZSBjaHVuawogICAgcmV0dXJuIGNyZWF0ZShzbG90c1RvTWFya3VwKHNsb3RzKSwgWwogICAgICAuLi5zbG90QmluZGluZ3Moc2xvdHMpLAogICAgICB7CiAgICAgICAgLy8gdGhlIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgYXMgYmluZGluZwogICAgICAgIC8vIGlmIHdlIGZhbGxiYWNrIHRvIGEgbm9ybWFsIHRlbXBsYXRlIGNodW5rCiAgICAgICAgZXhwcmVzc2lvbnM6IGF0dHJpYnV0ZXMubWFwKChhdHRyKSA9PiB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICB0eXBlOiBBVFRSSUJVVEUsCiAgICAgICAgICAgIC4uLmF0dHIsCiAgICAgICAgICB9CiAgICAgICAgfSksCiAgICAgIH0sCiAgICBdKQogIH0KCiAgLyoqCiAgICogTWVyZ2UgYWxsIHRoZSBzbG90cyBiaW5kaW5ncyBpbnRvIGEgc2luZ2xlIGFycmF5CiAgICogQHBhcmFtICAge0FycmF5PE9iamVjdD59IHNsb3RzIC0gc2xvdHMgY29sbGVjdGlvbgogICAqIEByZXR1cm5zIHtBcnJheTxCaW5kaW5ncz59IGZsYXR0ZW4gYmluZGluZ3MgYXJyYXkKICAgKi8KICBmdW5jdGlvbiBzbG90QmluZGluZ3Moc2xvdHMpIHsKICAgIHJldHVybiBzbG90cy5yZWR1Y2UoKGFjYywgeyBiaW5kaW5ncyB9KSA9PiBhY2MuY29uY2F0KGJpbmRpbmdzKSwgW10pCiAgfQoKICAvKioKICAgKiBNZXJnZSBhbGwgdGhlIHNsb3RzIHRvZ2V0aGVyIGluIGEgc2luZ2xlIG1hcmt1cCBzdHJpbmcKICAgKiBAcGFyYW0gICB7QXJyYXk8T2JqZWN0Pn0gc2xvdHMgLSBzbG90cyBjb2xsZWN0aW9uCiAgICogQHJldHVybnMge3N0cmluZ30gbWFya3VwIG9mIGFsbCB0aGUgc2xvdHMgaW4gYSBzaW5nbGUgc3RyaW5nCiAgICovCiAgZnVuY3Rpb24gc2xvdHNUb01hcmt1cChzbG90cykgewogICAgcmV0dXJuIHNsb3RzLnJlZHVjZSgoYWNjLCBzbG90KSA9PiB7CiAgICAgIHJldHVybiBhY2MgKyBzbG90Lmh0bWwKICAgIH0sICcnKQogIH0KCiAgY29uc3QgVGFnQmluZGluZyA9IHsKICAgIC8vIGR5bmFtaWMgYmluZGluZyBwcm9wZXJ0aWVzCiAgICAvLyBub2RlOiBudWxsLAogICAgLy8gZXZhbHVhdGU6IG51bGwsCiAgICAvLyBuYW1lOiBudWxsLAogICAgLy8gc2xvdHM6IG51bGwsCiAgICAvLyB0YWc6IG51bGwsCiAgICAvLyBhdHRyaWJ1dGVzOiBudWxsLAogICAgLy8gZ2V0Q29tcG9uZW50OiBudWxsLAoKICAgIG1vdW50KHNjb3BlKSB7CiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShzY29wZSkKICAgIH0sCiAgICB1cGRhdGUoc2NvcGUsIHBhcmVudFNjb3BlKSB7CiAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmV2YWx1YXRlKHNjb3BlKTsKCiAgICAgIC8vIHNpbXBsZSB1cGRhdGUKICAgICAgaWYgKG5hbWUgJiYgbmFtZSA9PT0gdGhpcy5uYW1lKSB7CiAgICAgICAgdGhpcy50YWcudXBkYXRlKHNjb3BlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyB1bm1vdW50IHRoZSBvbGQgdGFnIGlmIGl0IGV4aXN0cwogICAgICAgIHRoaXMudW5tb3VudChzY29wZSwgcGFyZW50U2NvcGUsIHRydWUpOwoKICAgICAgICAvLyBtb3VudCB0aGUgbmV3IHRhZwogICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgICAgdGhpcy50YWcgPSBnZXRUYWcodGhpcy5nZXRDb21wb25lbnQobmFtZSksIHRoaXMuc2xvdHMsIHRoaXMuYXR0cmlidXRlcyk7CiAgICAgICAgdGhpcy50YWcubW91bnQodGhpcy5ub2RlLCBzY29wZSk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzCiAgICB9LAogICAgdW5tb3VudChzY29wZSwgcGFyZW50U2NvcGUsIGtlZXBSb290VGFnKSB7CiAgICAgIGlmICh0aGlzLnRhZykgewogICAgICAgIC8vIGtlZXAgdGhlIHJvb3QgdGFnCiAgICAgICAgdGhpcy50YWcudW5tb3VudChrZWVwUm9vdFRhZyk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzCiAgICB9LAogIH07CgogIGZ1bmN0aW9uIGNyZWF0ZSQyKAogICAgbm9kZSwKICAgIHsgZXZhbHVhdGUsIGdldENvbXBvbmVudCwgc2xvdHMsIGF0dHJpYnV0ZXMgfSwKICApIHsKICAgIHJldHVybiB7CiAgICAgIC4uLlRhZ0JpbmRpbmcsCiAgICAgIG5vZGUsCiAgICAgIGV2YWx1YXRlLAogICAgICBzbG90cywKICAgICAgYXR0cmlidXRlcywKICAgICAgZ2V0Q29tcG9uZW50LAogICAgfQogIH0KCiAgY29uc3QgYmluZGluZ3MgPSB7CiAgICBbSUZdOiBjcmVhdGUkNSwKICAgIFtTSU1QTEVdOiBjcmVhdGUkMywKICAgIFtFQUNIXTogY3JlYXRlJDYsCiAgICBbVEFHXTogY3JlYXRlJDIsCiAgICBbU0xPVF06IGNyZWF0ZVNsb3QsCiAgfTsKCiAgLyoqCiAgICogVGV4dCBleHByZXNzaW9ucyBpbiBhIHRlbXBsYXRlIHRhZyB3aWxsIGdldCBjaGlsZE5vZGVJbmRleCB2YWx1ZSBub3JtYWxpemVkCiAgICogZGVwZW5kaW5nIG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgPHRlbXBsYXRlPiB0YWcgb2Zmc2V0CiAgICogQHBhcmFtICAge0V4cHJlc3Npb25bXX0gZXhwcmVzc2lvbnMgLSByaW90IGV4cHJlc3Npb25zIGFycmF5CiAgICogQHBhcmFtICAge251bWJlcn0gdGV4dEV4cHJlc3Npb25zT2Zmc2V0IC0gb2Zmc2V0IG9mIHRoZSA8dGVtcGxhdGU+IHRhZwogICAqIEByZXR1cm5zIHtFeHByZXNzaW9uW119IGV4cHJlc3Npb25zIGNvbnRhaW5pbmcgdGhlIHRleHQgZXhwcmVzc2lvbnMgbm9ybWFsaXplZAogICAqLwogIGZ1bmN0aW9uIGZpeFRleHRFeHByZXNzaW9uc09mZnNldChleHByZXNzaW9ucywgdGV4dEV4cHJlc3Npb25zT2Zmc2V0KSB7CiAgICByZXR1cm4gZXhwcmVzc2lvbnMubWFwKChlKSA9PgogICAgICBlLnR5cGUgPT09IFRFWFQKICAgICAgICA/IHsKICAgICAgICAgICAgLi4uZSwKICAgICAgICAgICAgY2hpbGROb2RlSW5kZXg6IGUuY2hpbGROb2RlSW5kZXggKyB0ZXh0RXhwcmVzc2lvbnNPZmZzZXQsCiAgICAgICAgICB9CiAgICAgICAgOiBlLAogICAgKQogIH0KCiAgLyoqCiAgICogQmluZCBhIG5ldyBleHByZXNzaW9uIG9iamVjdCB0byBhIERPTSBub2RlCiAgICogQHBhcmFtICAge0hUTUxFbGVtZW50fSByb290IC0gRE9NIG5vZGUgd2hlcmUgdG8gYmluZCB0aGUgZXhwcmVzc2lvbgogICAqIEBwYXJhbSAgIHtUYWdCaW5kaW5nRGF0YX0gYmluZGluZyAtIGJpbmRpbmcgZGF0YQogICAqIEBwYXJhbSAgIHtudW1iZXJ8bnVsbH0gdGVtcGxhdGVUYWdPZmZzZXQgLSBpZiBpdCdzIGRlZmluZWQgd2UgbmVlZCB0byBmaXggdGhlIHRleHQgZXhwcmVzc2lvbnMgY2hpbGROb2RlSW5kZXggb2Zmc2V0CiAgICogQHJldHVybnMge0JpbmRpbmd9IEJpbmRpbmcgb2JqZWN0CiAgICovCiAgZnVuY3Rpb24gY3JlYXRlJDEocm9vdCwgYmluZGluZywgdGVtcGxhdGVUYWdPZmZzZXQpIHsKICAgIGNvbnN0IHsgc2VsZWN0b3IsIHR5cGUsIHJlZHVuZGFudEF0dHJpYnV0ZSwgZXhwcmVzc2lvbnMgfSA9IGJpbmRpbmc7CiAgICAvLyBmaW5kIHRoZSBub2RlIHRvIGFwcGx5IHRoZSBiaW5kaW5ncwogICAgY29uc3Qgbm9kZSA9IHNlbGVjdG9yID8gcm9vdC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSA6IHJvb3Q7CgogICAgLy8gcmVtb3ZlIGV2ZW50dWFsbHkgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIGNyZWF0ZWQgb25seSB0byBzZWxlY3QgdGhpcyBub2RlCiAgICBpZiAocmVkdW5kYW50QXR0cmlidXRlKSBub2RlLnJlbW92ZUF0dHJpYnV0ZShyZWR1bmRhbnRBdHRyaWJ1dGUpOwogICAgY29uc3QgYmluZGluZ0V4cHJlc3Npb25zID0gZXhwcmVzc2lvbnMgfHwgW107CgogICAgLy8gaW5pdCB0aGUgYmluZGluZwogICAgcmV0dXJuIChiaW5kaW5nc1t0eXBlXSB8fCBiaW5kaW5nc1tTSU1QTEVdKShub2RlLCB7CiAgICAgIC4uLmJpbmRpbmcsCiAgICAgIGV4cHJlc3Npb25zOgogICAgICAgIHRlbXBsYXRlVGFnT2Zmc2V0ICYmICFzZWxlY3RvcgogICAgICAgICAgPyBmaXhUZXh0RXhwcmVzc2lvbnNPZmZzZXQoYmluZGluZ0V4cHJlc3Npb25zLCB0ZW1wbGF0ZVRhZ09mZnNldCkKICAgICAgICAgIDogYmluZGluZ0V4cHJlc3Npb25zLAogICAgfSkKICB9CgogIC8vIGluIHRoaXMgY2FzZSBhIHNpbXBsZSBpbm5lckhUTUwgaXMgZW5vdWdoCiAgZnVuY3Rpb24gY3JlYXRlSFRNTFRyZWUoaHRtbCwgcm9vdCkgewogICAgY29uc3QgdGVtcGxhdGUgPSBpc1RlbXBsYXRlKHJvb3QpID8gcm9vdCA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7CiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBodG1sOwogICAgcmV0dXJuIHRlbXBsYXRlLmNvbnRlbnQKICB9CgogIC8vIGZvciBzdmcgbm9kZXMgd2UgbmVlZCBhIGJpdCBtb3JlIHdvcmsKICAvKiBjOCBpZ25vcmUgc3RhcnQgKi8KICBmdW5jdGlvbiBjcmVhdGVTVkdUcmVlKGh0bWwsIGNvbnRhaW5lcikgewogICAgLy8gY3JlYXRlIHRoZSBTVkdOb2RlCiAgICBjb25zdCBzdmdOb2RlID0gY29udGFpbmVyLm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZSgKICAgICAgbmV3IHdpbmRvdy5ET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoCiAgICAgICAgYDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4ke2h0bWx9PC9zdmc+YCwKICAgICAgICAnYXBwbGljYXRpb24veG1sJywKICAgICAgKS5kb2N1bWVudEVsZW1lbnQsCiAgICAgIHRydWUsCiAgICApOwoKICAgIHJldHVybiBzdmdOb2RlCiAgfQogIC8qIGM4IGlnbm9yZSBlbmQgKi8KCiAgLyoqCiAgICogQ3JlYXRlIHRoZSBET00gdGhhdCB3aWxsIGJlIGluamVjdGVkCiAgICogQHBhcmFtIHtPYmplY3R9IHJvb3QgLSBET00gbm9kZSB0byBmaW5kIG91dCB0aGUgY29udGV4dCB3aGVyZSB0aGUgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkCiAgICogQHBhcmFtICAge3N0cmluZ30gaHRtbCAtIERPTSB0byBjcmVhdGUgYXMgc3RyaW5nCiAgICogQHJldHVybnMge0hUTUxEb2N1bWVudEZyYWdtZW50fEhUTUxFbGVtZW50fSBhIG5ldyBodG1sIGZyYWdtZW50CiAgICovCiAgZnVuY3Rpb24gY3JlYXRlRE9NVHJlZShyb290LCBodG1sKSB7CiAgICAvKiBjOCBpZ25vcmUgbmV4dCAqLwogICAgaWYgKGlzU3ZnKHJvb3QpKSByZXR1cm4gY3JlYXRlU1ZHVHJlZShodG1sLCByb290KQoKICAgIHJldHVybiBjcmVhdGVIVE1MVHJlZShodG1sLCByb290KQogIH0KCiAgLyoqCiAgICogSW5qZWN0IHRoZSBET00gdHJlZSBpbnRvIGEgdGFyZ2V0IG5vZGUKICAgKiBAcGFyYW0gICB7SFRNTEVsZW1lbnR9IGVsIC0gdGFyZ2V0IGVsZW1lbnQKICAgKiBAcGFyYW0gICB7RG9jdW1lbnRGcmFnbWVudHxTVkdFbGVtZW50fSBkb20gLSBkb20gdHJlZSB0byBpbmplY3QKICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAqLwogIGZ1bmN0aW9uIGluamVjdERPTShlbCwgZG9tKSB7CiAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgY2FzZSBpc1N2ZyhlbCk6CiAgICAgICAgbW92ZUNoaWxkcmVuKGRvbSwgZWwpOwogICAgICAgIGJyZWFrCiAgICAgIGNhc2UgaXNUZW1wbGF0ZShlbCk6CiAgICAgICAgZWwucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZG9tLCBlbCk7CiAgICAgICAgYnJlYWsKICAgICAgZGVmYXVsdDoKICAgICAgICBlbC5hcHBlbmRDaGlsZChkb20pOwogICAgfQogIH0KCiAgLyoqCiAgICogQ3JlYXRlIHRoZSBUZW1wbGF0ZSBET00gc2tlbGV0b24KICAgKiBAcGFyYW0gICB7SFRNTEVsZW1lbnR9IGVsIC0gcm9vdCBub2RlIHdoZXJlIHRoZSBET00gd2lsbCBiZSBpbmplY3RlZAogICAqIEBwYXJhbSAgIHtzdHJpbmd8SFRNTEVsZW1lbnR9IGh0bWwgLSBIVE1MIG1hcmt1cCBvciBIVE1MRWxlbWVudCB0aGF0IHdpbGwgYmUgaW5qZWN0ZWQgaW50byB0aGUgcm9vdCBub2RlCiAgICogQHJldHVybnMgez9Eb2N1bWVudEZyYWdtZW50fSBmcmFnbWVudCB0aGF0IHdpbGwgYmUgaW5qZWN0ZWQgaW50byB0aGUgcm9vdCBub2RlCiAgICovCiAgZnVuY3Rpb24gY3JlYXRlVGVtcGxhdGVET00oZWwsIGh0bWwpIHsKICAgIHJldHVybiBodG1sICYmICh0eXBlb2YgaHRtbCA9PT0gJ3N0cmluZycgPyBjcmVhdGVET01UcmVlKGVsLCBodG1sKSA6IGh0bWwpCiAgfQoKICAvKioKICAgKiBHZXQgdGhlIG9mZnNldCBvZiB0aGUgPHRlbXBsYXRlPiB0YWcKICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwYXJlbnROb2RlIC0gdGVtcGxhdGUgdGFnIHBhcmVudCBub2RlCiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWwgLSB0aGUgdGVtcGxhdGUgdGFnIHdlIHdhbnQgdG8gcmVuZGVyCiAgICogQHBhcmFtICAge09iamVjdH0gbWV0YSAtIG1ldGEgcHJvcGVydGllcyBuZWVkZWQgdG8gaGFuZGxlIHRoZSA8dGVtcGxhdGU+IHRhZ3MgaW4gbG9vcHMKICAgKiBAcmV0dXJucyB7bnVtYmVyfSBvZmZzZXQgb2YgdGhlIDx0ZW1wbGF0ZT4gdGFnIGNhbGN1bGF0ZWQgZnJvbSBpdHMgc2libGluZ3MgRE9NIG5vZGVzCiAgICovCiAgZnVuY3Rpb24gZ2V0VGVtcGxhdGVUYWdPZmZzZXQocGFyZW50Tm9kZSwgZWwsIG1ldGEpIHsKICAgIGNvbnN0IHNpYmxpbmdzID0gQXJyYXkuZnJvbShwYXJlbnROb2RlLmNoaWxkTm9kZXMpOwoKICAgIHJldHVybiBNYXRoLm1heChzaWJsaW5ncy5pbmRleE9mKGVsKSwgc2libGluZ3MuaW5kZXhPZihtZXRhLmhlYWQpICsgMSwgMCkKICB9CgogIC8qKgogICAqIFRlbXBsYXRlIENodW5rIG1vZGVsCiAgICogQHR5cGUge09iamVjdH0KICAgKi8KICBjb25zdCBUZW1wbGF0ZUNodW5rID0gewogICAgLy8gU3RhdGljIHByb3BzCiAgICAvLyBiaW5kaW5nczogbnVsbCwKICAgIC8vIGJpbmRpbmdzRGF0YTogbnVsbCwKICAgIC8vIGh0bWw6IG51bGwsCiAgICAvLyBpc1RlbXBsYXRlVGFnOiBmYWxzZSwKICAgIC8vIGZyYWdtZW50OiBudWxsLAogICAgLy8gY2hpbGRyZW46IG51bGwsCiAgICAvLyBkb206IG51bGwsCiAgICAvLyBlbDogbnVsbCwKCiAgICAvKioKICAgICAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgRE9NIHN0cnVjdHVyZSB0aGF0IHdpbGwgYmUgY2xvbmVkIG9uIGVhY2ggbW91bnQKICAgICAqIEBwYXJhbSAgIHtIVE1MRWxlbWVudH0gZWwgLSB0aGUgcm9vdCBub2RlCiAgICAgKiBAcmV0dXJucyB7VGVtcGxhdGVDaHVua30gc2VsZgogICAgICovCiAgICBjcmVhdGVET00oZWwpIHsKICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhlIERPTSBnZXRzIGNyZWF0ZWQgYmVmb3JlIGNsb25pbmcgdGhlIHRlbXBsYXRlCiAgICAgIHRoaXMuZG9tID0KICAgICAgICB0aGlzLmRvbSB8fAogICAgICAgIGNyZWF0ZVRlbXBsYXRlRE9NKGVsLCB0aGlzLmh0bWwpIHx8CiAgICAgICAgZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwoKICAgICAgcmV0dXJuIHRoaXMKICAgIH0sCgogICAgLy8gQVBJIG1ldGhvZHMKICAgIC8qKgogICAgICogQXR0YWNoIHRoZSB0ZW1wbGF0ZSB0byBhIERPTSBub2RlCiAgICAgKiBAcGFyYW0gICB7SFRNTEVsZW1lbnR9IGVsIC0gdGFyZ2V0IERPTSBub2RlCiAgICAgKiBAcGFyYW0gICB7Kn0gc2NvcGUgLSB0ZW1wbGF0ZSBkYXRhCiAgICAgKiBAcGFyYW0gICB7Kn0gcGFyZW50U2NvcGUgLSBzY29wZSBvZiB0aGUgcGFyZW50IHRlbXBsYXRlIHRhZwogICAgICogQHBhcmFtICAge09iamVjdH0gbWV0YSAtIG1ldGEgcHJvcGVydGllcyBuZWVkZWQgdG8gaGFuZGxlIHRoZSA8dGVtcGxhdGU+IHRhZ3MgaW4gbG9vcHMKICAgICAqIEByZXR1cm5zIHtUZW1wbGF0ZUNodW5rfSBzZWxmCiAgICAgKi8KICAgIG1vdW50KGVsLCBzY29wZSwgcGFyZW50U2NvcGUsIG1ldGEgPSB7fSkgewogICAgICBpZiAoIWVsKSBwYW5pYygnUGxlYXNlIHByb3ZpZGUgRE9NIG5vZGUgdG8gbW91bnQgcHJvcGVybHkgeW91ciB0ZW1wbGF0ZScpOwoKICAgICAgaWYgKHRoaXMuZWwpIHRoaXMudW5tb3VudChzY29wZSk7CgogICAgICAvLyA8dGVtcGxhdGU+IHRhZ3MgcmVxdWlyZSBhIGJpdCBtb3JlIHdvcmsKICAgICAgLy8gdGhlIHRlbXBsYXRlIGZyYWdtZW50IG1pZ2h0IGJlIGFscmVhZHkgY3JlYXRlZCB2aWEgbWV0YSBvdXRzaWRlIG9mIHRoaXMgY2FsbAogICAgICBjb25zdCB7IGZyYWdtZW50LCBjaGlsZHJlbiwgYXZvaWRET01JbmplY3Rpb24gfSA9IG1ldGE7CiAgICAgIC8vIDx0ZW1wbGF0ZT4gYmluZGluZ3Mgb2YgY291cnNlIGNhbiBub3QgaGF2ZSBhIHJvb3QgZWxlbWVudAogICAgICAvLyBzbyB3ZSBjaGVjayB0aGUgcGFyZW50IG5vZGUgdG8gc2V0IHRoZSBxdWVyeSBzZWxlY3RvciBiaW5kaW5ncwogICAgICBjb25zdCB7IHBhcmVudE5vZGUgfSA9IGNoaWxkcmVuID8gY2hpbGRyZW5bMF0gOiBlbDsKICAgICAgY29uc3QgaXNUZW1wbGF0ZVRhZyA9IGlzVGVtcGxhdGUoZWwpOwogICAgICBjb25zdCB0ZW1wbGF0ZVRhZ09mZnNldCA9IGlzVGVtcGxhdGVUYWcKICAgICAgICA/IGdldFRlbXBsYXRlVGFnT2Zmc2V0KHBhcmVudE5vZGUsIGVsLCBtZXRhKQogICAgICAgIDogbnVsbDsKCiAgICAgIC8vIGNyZWF0ZSB0aGUgRE9NIGlmIGl0IHdhc24ndCBjcmVhdGVkIGJlZm9yZQogICAgICB0aGlzLmNyZWF0ZURPTShlbCk7CgogICAgICAvLyBjcmVhdGUgdGhlIERPTSBvZiB0aGlzIHRlbXBsYXRlIGNsb25pbmcgdGhlIG9yaWdpbmFsIERPTSBzdHJ1Y3R1cmUgc3RvcmVkIGluIHRoaXMgaW5zdGFuY2UKICAgICAgLy8gbm90aWNlIHRoYXQgaWYgYSBkb2N1bWVudEZyYWdtZW50IHdhcyBwYXNzZWQgKHZpYSBtZXRhKSB3ZSB3aWxsIHVzZSBpdCBpbnN0ZWFkCiAgICAgIGNvbnN0IGNsb25lTm9kZSA9IGZyYWdtZW50IHx8IHRoaXMuZG9tLmNsb25lTm9kZSh0cnVlKTsKCiAgICAgIC8vIHN0b3JlIHJvb3Qgbm9kZQogICAgICAvLyBub3RpY2UgdGhhdCBmb3IgdGVtcGxhdGUgdGFncyB0aGUgcm9vdCBub3RlIHdpbGwgYmUgdGhlIHBhcmVudCB0YWcKICAgICAgdGhpcy5lbCA9IGlzVGVtcGxhdGVUYWcgPyBwYXJlbnROb2RlIDogZWw7CgogICAgICAvLyBjcmVhdGUgdGhlIGNoaWxkcmVuIGFycmF5IG9ubHkgZm9yIHRoZSA8dGVtcGxhdGU+IGZyYWdtZW50cwogICAgICB0aGlzLmNoaWxkcmVuID0gaXNUZW1wbGF0ZVRhZwogICAgICAgID8gY2hpbGRyZW4gfHwgQXJyYXkuZnJvbShjbG9uZU5vZGUuY2hpbGROb2RlcykKICAgICAgICA6IG51bGw7CgogICAgICAvLyBpbmplY3QgdGhlIERPTSBpbnRvIHRoZSBlbCBvbmx5IGlmIGEgZnJhZ21lbnQgaXMgYXZhaWxhYmxlCiAgICAgIGlmICghYXZvaWRET01JbmplY3Rpb24gJiYgY2xvbmVOb2RlKSBpbmplY3RET00oZWwsIGNsb25lTm9kZSk7CgogICAgICAvLyBjcmVhdGUgdGhlIGJpbmRpbmdzCiAgICAgIHRoaXMuYmluZGluZ3MgPSB0aGlzLmJpbmRpbmdzRGF0YS5tYXAoKGJpbmRpbmcpID0+CiAgICAgICAgY3JlYXRlJDEodGhpcy5lbCwgYmluZGluZywgdGVtcGxhdGVUYWdPZmZzZXQpLAogICAgICApOwogICAgICB0aGlzLmJpbmRpbmdzLmZvckVhY2goKGIpID0+IGIubW91bnQoc2NvcGUsIHBhcmVudFNjb3BlKSk7CgogICAgICAvLyBzdG9yZSB0aGUgdGVtcGxhdGUgbWV0YSBwcm9wZXJ0aWVzCiAgICAgIHRoaXMubWV0YSA9IG1ldGE7CgogICAgICByZXR1cm4gdGhpcwogICAgfSwKCiAgICAvKioKICAgICAqIFVwZGF0ZSB0aGUgdGVtcGxhdGUgd2l0aCBmcmVzaCBkYXRhCiAgICAgKiBAcGFyYW0gICB7Kn0gc2NvcGUgLSB0ZW1wbGF0ZSBkYXRhCiAgICAgKiBAcGFyYW0gICB7Kn0gcGFyZW50U2NvcGUgLSBzY29wZSBvZiB0aGUgcGFyZW50IHRlbXBsYXRlIHRhZwogICAgICogQHJldHVybnMge1RlbXBsYXRlQ2h1bmt9IHNlbGYKICAgICAqLwogICAgdXBkYXRlKHNjb3BlLCBwYXJlbnRTY29wZSkgewogICAgICB0aGlzLmJpbmRpbmdzLmZvckVhY2goKGIpID0+IGIudXBkYXRlKHNjb3BlLCBwYXJlbnRTY29wZSkpOwoKICAgICAgcmV0dXJuIHRoaXMKICAgIH0sCgogICAgLyoqCiAgICAgKiBSZW1vdmUgdGhlIHRlbXBsYXRlIGZyb20gdGhlIG5vZGUgd2hlcmUgaXQgd2FzIGluaXRpYWxseSBtb3VudGVkCiAgICAgKiBAcGFyYW0gICB7Kn0gc2NvcGUgLSB0ZW1wbGF0ZSBkYXRhCiAgICAgKiBAcGFyYW0gICB7Kn0gcGFyZW50U2NvcGUgLSBzY29wZSBvZiB0aGUgcGFyZW50IHRlbXBsYXRlIHRhZwogICAgICogQHBhcmFtICAge2Jvb2xlYW58bnVsbH0gbXVzdFJlbW92ZVJvb3QgLSBpZiB0cnVlIHJlbW92ZSB0aGUgcm9vdCBlbGVtZW50LAogICAgICogaWYgZmFsc2Ugb3IgdW5kZWZpbmVkIGNsZWFuIHRoZSByb290IHRhZyBjb250ZW50LCBpZiBudWxsIGRvbid0IHRvdWNoIHRoZSBET00KICAgICAqIEByZXR1cm5zIHtUZW1wbGF0ZUNodW5rfSBzZWxmCiAgICAgKi8KICAgIHVubW91bnQoc2NvcGUsIHBhcmVudFNjb3BlLCBtdXN0UmVtb3ZlUm9vdCA9IGZhbHNlKSB7CiAgICAgIGNvbnN0IGVsID0gdGhpcy5lbDsKCiAgICAgIGlmICghZWwpIHsKICAgICAgICByZXR1cm4gdGhpcwogICAgICB9CgogICAgICB0aGlzLmJpbmRpbmdzLmZvckVhY2goKGIpID0+IGIudW5tb3VudChzY29wZSwgcGFyZW50U2NvcGUsIG11c3RSZW1vdmVSb290KSk7CgogICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAvLyBwdXJlIGNvbXBvbmVudHMgc2hvdWxkIGhhbmRsZSB0aGUgRE9NIHVubW91bnQgdXBkYXRlcyBieSB0aGVtc2VsdmVzCiAgICAgICAgLy8gZm9yIG11c3RSZW1vdmVSb290ID09PSBudWxsIGRvbid0IHRvdWNoIHRoZSBET00KICAgICAgICBjYXNlIGVsW0lTX1BVUkVfU1lNQk9MXSB8fCBtdXN0UmVtb3ZlUm9vdCA9PT0gbnVsbDoKICAgICAgICAgIGJyZWFrCgogICAgICAgIC8vIGlmIGNoaWxkcmVuIGFyZSBkZWNsYXJlZCwgY2xlYXIgdGhlbQogICAgICAgIC8vIGFwcGxpY2FibGUgZm9yIDx0ZW1wbGF0ZT4gYW5kIDxzbG90Lz4gYmluZGluZ3MKICAgICAgICBjYXNlIEFycmF5LmlzQXJyYXkodGhpcy5jaGlsZHJlbik6CiAgICAgICAgICBjbGVhckNoaWxkcmVuKHRoaXMuY2hpbGRyZW4pOwogICAgICAgICAgYnJlYWsKCiAgICAgICAgLy8gY2xlYW4gdGhlIG5vZGUgY2hpbGRyZW4gb25seQogICAgICAgIGNhc2UgIW11c3RSZW1vdmVSb290OgogICAgICAgICAgY2xlYW5Ob2RlKGVsKTsKICAgICAgICAgIGJyZWFrCgogICAgICAgIC8vIHJlbW92ZSB0aGUgcm9vdCBub2RlIG9ubHkgaWYgdGhlIG11c3RSZW1vdmVSb290IGlzIHRydWx5CiAgICAgICAgY2FzZSAhIW11c3RSZW1vdmVSb290OgogICAgICAgICAgcmVtb3ZlQ2hpbGQoZWwpOwogICAgICAgICAgYnJlYWsKICAgICAgfQoKICAgICAgdGhpcy5lbCA9IG51bGw7CgogICAgICByZXR1cm4gdGhpcwogICAgfSwKCiAgICAvKioKICAgICAqIENsb25lIHRoZSB0ZW1wbGF0ZSBjaHVuawogICAgICogQHJldHVybnMge1RlbXBsYXRlQ2h1bmt9IGEgY2xvbmUgb2YgdGhpcyBvYmplY3QgcmVzZXR0aW5nIHRoZSB0aGlzLmVsIHByb3BlcnR5CiAgICAgKi8KICAgIGNsb25lKCkgewogICAgICByZXR1cm4gewogICAgICAgIC4uLnRoaXMsCiAgICAgICAgbWV0YToge30sCiAgICAgICAgZWw6IG51bGwsCiAgICAgIH0KICAgIH0sCiAgfTsKCiAgLyoqCiAgICogQ3JlYXRlIGEgdGVtcGxhdGUgY2h1bmsgd2lyaW5nIGFsc28gdGhlIGJpbmRpbmdzCiAgICogQHBhcmFtICAge3N0cmluZ3xIVE1MRWxlbWVudH0gaHRtbCAtIHRlbXBsYXRlIHN0cmluZwogICAqIEBwYXJhbSAgIHtCaW5kaW5nRGF0YVtdfSBiaW5kaW5ncyAtIGJpbmRpbmdzIGNvbGxlY3Rpb24KICAgKiBAcmV0dXJucyB7VGVtcGxhdGVDaHVua30gYSBuZXcgVGVtcGxhdGVDaHVuayBjb3B5CiAgICovCiAgZnVuY3Rpb24gY3JlYXRlKGh0bWwsIGJpbmRpbmdzID0gW10pIHsKICAgIHJldHVybiB7CiAgICAgIC4uLlRlbXBsYXRlQ2h1bmssCiAgICAgIGh0bWwsCiAgICAgIGJpbmRpbmdzRGF0YTogYmluZGluZ3MsCiAgICB9CiAgfQoKICAvKioKICAgKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgY29tcG9uZW50IHRlbXBsYXRlcyBvbmx5IG9uY2UKICAgKiBAcGFyYW0gICB7RnVuY3Rpb259IHRlbXBsYXRlIC0gY29tcG9uZW50IHRlbXBsYXRlIGNyZWF0aW9uIGZ1bmN0aW9uCiAgICogQHBhcmFtICAge1Jpb3RDb21wb25lbnRXcmFwcGVyfSBjb21wb25lbnRXcmFwcGVyIC0gcmlvdCBjb21waWxlciBnZW5lcmF0ZWQgb2JqZWN0CiAgICogQHBhcmFtICAge0Z1bmN0aW9ufSBnZXRDaGlsZENvbXBvbmVudCAtIGdldHRlciBmdW5jdGlvbiB0byByZXR1cm4gdGhlIGNoaWxkcmVuIGNvbXBvbmVudHMKICAgKiBAcmV0dXJucyB7VGVtcGxhdGVDaHVua30gdGVtcGxhdGUgY2h1bmsgb2JqZWN0CiAgICovCiAgZnVuY3Rpb24gY29tcG9uZW50VGVtcGxhdGVGYWN0b3J5KAogICAgdGVtcGxhdGUsCiAgICBjb21wb25lbnRXcmFwcGVyLAogICAgZ2V0Q2hpbGRDb21wb25lbnQsCiAgKSB7CiAgICByZXR1cm4gdGVtcGxhdGUoCiAgICAgIGNyZWF0ZSwKICAgICAgZXhwcmVzc2lvblR5cGVzLAogICAgICBiaW5kaW5nVHlwZXMsCiAgICAgIGdldENoaWxkQ29tcG9uZW50LAogICAgKQogIH0KCiAgY29uc3QgUFVSRV9DT01QT05FTlRfQVBJID0gT2JqZWN0LmZyZWV6ZSh7CiAgICBbTU9VTlRfTUVUSE9EX0tFWV06IG5vb3AsCiAgICBbVVBEQVRFX01FVEhPRF9LRVldOiBub29wLAogICAgW1VOTU9VTlRfTUVUSE9EX0tFWV06IG5vb3AsCiAgfSk7CgogIC8qKgogICAqIEJpbmQgYSBET00gbm9kZSB0byBpdHMgY29tcG9uZW50IG9iamVjdAogICAqIEBwYXJhbSAgIHtIVE1MRWxlbWVudH0gbm9kZSAtIGh0bWwgbm9kZSBtb3VudGVkCiAgICogQHBhcmFtICAge09iamVjdH0gY29tcG9uZW50IC0gUmlvdC5qcyBjb21wb25lbnQgb2JqZWN0CiAgICogQHJldHVybnMge09iamVjdH0gdGhlIGNvbXBvbmVudCBvYmplY3QgcmVjZWl2ZWQgYXMgc2Vjb25kIGFyZ3VtZW50CiAgICovCiAgY29uc3QgYmluZERPTU5vZGVUb0NvbXBvbmVudEluc3RhbmNlID0gKG5vZGUsIGNvbXBvbmVudCkgPT4KICAgIChub2RlW0RPTV9DT01QT05FTlRfSU5TVEFOQ0VfUFJPUEVSVFldID0gY29tcG9uZW50KTsKCiAgLyoqCiAgICogV3JhcCB0aGUgUmlvdC5qcyBjb3JlIEFQSSBtZXRob2RzIHVzaW5nIGEgbWFwcGluZyBmdW5jdGlvbgogICAqIEBwYXJhbSAgIHtGdW5jdGlvbn0gbWFwRnVuY3Rpb24gLSBsaWZ0aW5nIGZ1bmN0aW9uCiAgICogQHJldHVybnMge09iamVjdH0gYW4gb2JqZWN0IGhhdmluZyB0aGUgeyBtb3VudCwgdXBkYXRlLCB1bm1vdW50IH0gZnVuY3Rpb25zCiAgICovCiAgZnVuY3Rpb24gY3JlYXRlQ29yZUFQSU1ldGhvZHMobWFwRnVuY3Rpb24pIHsKICAgIHJldHVybiBbTU9VTlRfTUVUSE9EX0tFWSwgVVBEQVRFX01FVEhPRF9LRVksIFVOTU9VTlRfTUVUSE9EX0tFWV0ucmVkdWNlKAogICAgICAoYWNjLCBtZXRob2QpID0+IHsKICAgICAgICBhY2NbbWV0aG9kXSA9IG1hcEZ1bmN0aW9uKG1ldGhvZCk7CgogICAgICAgIHJldHVybiBhY2MKICAgICAgfSwKICAgICAge30sCiAgICApCiAgfQoKICAvKioKICAgKiBDcmVhdGUgYSBwdXJlIGNvbXBvbmVudAogICAqIEBwYXJhbSAgIHtGdW5jdGlvbn0gcHVyZUZhY3RvcnlGdW5jdGlvbiAtIHB1cmUgY29tcG9uZW50IGZhY3RvcnkgZnVuY3Rpb24KICAgKiBAcGFyYW0gICB7QXJyYXl9IG9wdGlvbnMuc2xvdHMgLSBjb21wb25lbnQgc2xvdHMKICAgKiBAcGFyYW0gICB7QXJyYXl9IG9wdGlvbnMuYXR0cmlidXRlcyAtIGNvbXBvbmVudCBhdHRyaWJ1dGVzCiAgICogQHBhcmFtICAge0FycmF5fSBvcHRpb25zLnRlbXBsYXRlIC0gdGVtcGxhdGUgZmFjdG9yeSBmdW5jdGlvbgogICAqIEBwYXJhbSAgIHtBcnJheX0gb3B0aW9ucy50ZW1wbGF0ZSAtIHRlbXBsYXRlIGZhY3RvcnkgZnVuY3Rpb24KICAgKiBAcGFyYW0gICB7YW55fSBvcHRpb25zLnByb3BzIC0gaW5pdGlhbCBjb21wb25lbnQgcHJvcGVydGllcwogICAqIEByZXR1cm5zIHtPYmplY3R9IHB1cmUgY29tcG9uZW50IG9iamVjdAogICAqLwogIGZ1bmN0aW9uIGNyZWF0ZVB1cmVDb21wb25lbnQoCiAgICBwdXJlRmFjdG9yeUZ1bmN0aW9uLAogICAgeyBzbG90cywgYXR0cmlidXRlcywgcHJvcHMsIGNzcywgdGVtcGxhdGUgfSwKICApIHsKICAgIGlmICh0ZW1wbGF0ZSkgcGFuaWMoJ1B1cmUgY29tcG9uZW50cyBjYW4gbm90IGhhdmUgaHRtbCcpOwogICAgaWYgKGNzcykgcGFuaWMoJ1B1cmUgY29tcG9uZW50cyBkbyBub3QgaGF2ZSBjc3MnKTsKCiAgICBjb25zdCBjb21wb25lbnQgPSBkZWZpbmVEZWZhdWx0cygKICAgICAgcHVyZUZhY3RvcnlGdW5jdGlvbih7IHNsb3RzLCBhdHRyaWJ1dGVzLCBwcm9wcyB9KSwKICAgICAgUFVSRV9DT01QT05FTlRfQVBJLAogICAgKTsKCiAgICByZXR1cm4gY3JlYXRlQ29yZUFQSU1ldGhvZHMoKG1ldGhvZCkgPT4gKC4uLmFyZ3MpID0+IHsKICAgICAgLy8gaW50ZXJjZXB0IHRoZSBtb3VudCBjYWxscyB0byBiaW5kIHRoZSBET00gbm9kZSB0byB0aGUgcHVyZSBvYmplY3QgY3JlYXRlZAogICAgICAvLyBzZWUgYWxzbyBodHRwczovL2dpdGh1Yi5jb20vcmlvdC9yaW90L2lzc3Vlcy8yODA2CiAgICAgIGlmIChtZXRob2QgPT09IE1PVU5UX01FVEhPRF9LRVkpIHsKICAgICAgICBjb25zdCBbZWxlbWVudF0gPSBhcmdzOwogICAgICAgIC8vIG1hcmsgdGhpcyBub2RlIGFzIHB1cmUgZWxlbWVudAogICAgICAgIGRlZmluZVByb3BlcnR5KGVsZW1lbnQsIElTX1BVUkVfU1lNQk9MLCB0cnVlKTsKICAgICAgICBiaW5kRE9NTm9kZVRvQ29tcG9uZW50SW5zdGFuY2UoZWxlbWVudCwgY29tcG9uZW50KTsKICAgICAgfQoKICAgICAgY29tcG9uZW50W21ldGhvZF0oLi4uYXJncyk7CgogICAgICByZXR1cm4gY29tcG9uZW50CiAgICB9KQogIH0KCiAgLyoqCiAgICogQ29udmVydHMgYW55IERPTSBub2RlL3MgdG8gYSBsb29wYWJsZSBhcnJheQogICAqIEBwYXJhbSAgIHsgSFRNTEVsZW1lbnR8Tm9kZUxpc3QgfSBlbHMgLSBzaW5nbGUgaHRtbCBlbGVtZW50IG9yIGEgbm9kZSBsaXN0CiAgICogQHJldHVybnMgeyBBcnJheSB9IGFsd2F5cyBhIGxvb3BhYmxlIG9iamVjdAogICAqLwogIGZ1bmN0aW9uIGRvbVRvQXJyYXkoZWxzKSB7CiAgICAvLyBjYW4gdGhpcyBvYmplY3QgYmUgYWxyZWFkeSBsb29wZWQ/CiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZWxzKSkgewogICAgICAvLyBpcyBpdCBhIG5vZGUgbGlzdD8KICAgICAgaWYgKAogICAgICAgIC9eXFtvYmplY3QgKEhUTUxDb2xsZWN0aW9ufE5vZGVMaXN0fE9iamVjdClcXSQvCiAgICAgICAgICAudGVzdChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZWxzKSkKICAgICAgICAgICYmIHR5cGVvZiBlbHMubGVuZ3RoID09PSAnbnVtYmVyJwogICAgICApCiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZWxzKQogICAgICBlbHNlCiAgICAgICAgLy8gaWYgaXQncyBhIHNpbmdsZSBub2RlCiAgICAgICAgLy8gaXQgd2lsbCBiZSByZXR1cm5lZCBhcyAiYXJyYXkiIHdpdGggb25lIHNpbmdsZSBlbnRyeQogICAgICAgIHJldHVybiBbZWxzXQogICAgfQogICAgLy8gdGhpcyBvYmplY3QgY291bGQgYmUgbG9vcGVkIG91dCBvZiB0aGUgYm94CiAgICByZXR1cm4gZWxzCiAgfQoKICAvKioKICAgKiBTaW1wbGUgaGVscGVyIHRvIGZpbmQgRE9NIG5vZGVzIHJldHVybmluZyB0aGVtIGFzIGFycmF5IGxpa2UgbG9vcGFibGUgb2JqZWN0CiAgICogQHBhcmFtICAgeyBzdHJpbmd8RE9NTm9kZUxpc3QgfSBzZWxlY3RvciAtIGVpdGhlciB0aGUgcXVlcnkgb3IgdGhlIERPTSBub2RlcyB0byBhcnJhaWZ5CiAgICogQHBhcmFtICAgeyBIVE1MRWxlbWVudCB9ICAgICAgICBzY29wZSAgICAgIC0gY29udGV4dCBkZWZpbmluZyB3aGVyZSB0aGUgcXVlcnkgd2lsbCBzZWFyY2ggZm9yIHRoZSBET00gbm9kZXMKICAgKiBAcmV0dXJucyB7IEFycmF5IH0gRE9NIG5vZGVzIGZvdW5kIGFzIGFycmF5CiAgICovCiAgZnVuY3Rpb24gJChzZWxlY3Rvciwgc2NvcGUpIHsKICAgIHJldHVybiBkb21Ub0FycmF5KHR5cGVvZiBzZWxlY3RvciA9PT0gJ3N0cmluZycgPwogICAgICAoc2NvcGUgfHwgZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpIDoKICAgICAgc2VsZWN0b3IKICAgICkKICB9CgogIGNvbnN0IENPTVBPTkVOVF9ET01fU0VMRUNUT1JTID0gT2JqZWN0LmZyZWV6ZSh7CiAgICAvLyBjb21wb25lbnQgaGVscGVycwogICAgJChzZWxlY3RvcikgewogICAgICByZXR1cm4gJChzZWxlY3RvciwgdGhpcy5yb290KVswXQogICAgfSwKICAgICQkKHNlbGVjdG9yKSB7CiAgICAgIHJldHVybiAkKHNlbGVjdG9yLCB0aGlzLnJvb3QpCiAgICB9LAogIH0pOwoKICBjb25zdCBDT01QT05FTlRfTElGRUNZQ0xFX01FVEhPRFMgPSBPYmplY3QuZnJlZXplKHsKICAgIFtTSE9VTERfVVBEQVRFX0tFWV06IG5vb3AsCiAgICBbT05fQkVGT1JFX01PVU5UX0tFWV06IG5vb3AsCiAgICBbT05fTU9VTlRFRF9LRVldOiBub29wLAogICAgW09OX0JFRk9SRV9VUERBVEVfS0VZXTogbm9vcCwKICAgIFtPTl9VUERBVEVEX0tFWV06IG5vb3AsCiAgICBbT05fQkVGT1JFX1VOTU9VTlRfS0VZXTogbm9vcCwKICAgIFtPTl9VTk1PVU5URURfS0VZXTogbm9vcCwKICB9KTsKCiAgLyoqCiAgICogTm9ybWFsaXplIHRoZSByZXR1cm4gdmFsdWVzLCBpbiBjYXNlIG9mIGEgc2luZ2xlIHZhbHVlIHdlIGF2b2lkIHRvIHJldHVybiBhbiBhcnJheQogICAqIEBwYXJhbSAgIHsgQXJyYXkgfSB2YWx1ZXMgLSBsaXN0IG9mIHZhbHVlcyB3ZSB3YW50IHRvIHJldHVybgogICAqIEByZXR1cm5zIHsgQXJyYXl8c3RyaW5nfGJvb2xlYW4gfSBlaXRoZXIgdGhlIHdob2xlIGxpc3Qgb2YgdmFsdWVzIG9yIHRoZSBzaW5nbGUgb25lIGZvdW5kCiAgICogQHByaXZhdGUKICAgKi8KICBjb25zdCBub3JtYWxpemUgPSB2YWx1ZXMgPT4gdmFsdWVzLmxlbmd0aCA9PT0gMSA/IHZhbHVlc1swXSA6IHZhbHVlczsKCiAgLyoqCiAgICogUGFyc2UgYWxsIHRoZSBub2RlcyByZWNlaXZlZCB0byBnZXQvcmVtb3ZlL2NoZWNrIHRoZWlyIGF0dHJpYnV0ZXMKICAgKiBAcGFyYW0gICB7IEhUTUxFbGVtZW50fE5vZGVMaXN0fEFycmF5IH0gZWxzICAgIC0gRE9NIG5vZGUvcyB0byBwYXJzZQogICAqIEBwYXJhbSAgIHsgc3RyaW5nfEFycmF5IH0gICAgICAgICAgICAgICBuYW1lICAgLSBuYW1lIG9yIGxpc3Qgb2YgYXR0cmlidXRlcwogICAqIEBwYXJhbSAgIHsgc3RyaW5nIH0gICAgICAgICAgICAgICAgICAgICBtZXRob2QgLSBtZXRob2QgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcGFyc2UgdGhlIGF0dHJpYnV0ZXMKICAgKiBAcmV0dXJucyB7IEFycmF5fHN0cmluZyB9IHJlc3VsdCBvZiB0aGUgcGFyc2luZyBpbiBhIGxpc3Qgb3IgYSBzaW5nbGUgdmFsdWUKICAgKiBAcHJpdmF0ZQogICAqLwogIGZ1bmN0aW9uIHBhcnNlTm9kZXMoZWxzLCBuYW1lLCBtZXRob2QpIHsKICAgIGNvbnN0IG5hbWVzID0gdHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnID8gW25hbWVdIDogbmFtZTsKICAgIHJldHVybiBub3JtYWxpemUoZG9tVG9BcnJheShlbHMpLm1hcChlbCA9PiB7CiAgICAgIHJldHVybiBub3JtYWxpemUobmFtZXMubWFwKG4gPT4gZWxbbWV0aG9kXShuKSkpCiAgICB9KSkKICB9CgogIC8qKgogICAqIFNldCBhbnkgYXR0cmlidXRlIG9uIGEgc2luZ2xlIG9yIGEgbGlzdCBvZiBET00gbm9kZXMKICAgKiBAcGFyYW0gICB7IEhUTUxFbGVtZW50fE5vZGVMaXN0fEFycmF5IH0gZWxzICAgLSBET00gbm9kZS9zIHRvIHBhcnNlCiAgICogQHBhcmFtICAgeyBzdHJpbmd8T2JqZWN0IH0gICAgICAgICAgICAgIG5hbWUgIC0gZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gc2V0CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBsaXN0IG9mIHByb3BlcnRpZXMgYXMgb2JqZWN0IGtleSAtIHZhbHVlCiAgICogQHBhcmFtICAgeyBzdHJpbmcgfSAgICAgICAgICAgICAgICAgICAgIHZhbHVlIC0gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIChvcHRpb25hbCkKICAgKiBAcmV0dXJucyB7IEhUTUxFbGVtZW50fE5vZGVMaXN0fEFycmF5IH0gdGhlIG9yaWdpbmFsIGFycmF5IG9mIGVsZW1lbnRzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uCiAgICoKICAgKiBAZXhhbXBsZQogICAqCiAgICogaW1wb3J0IHsgc2V0IH0gZnJvbSAnYmlhbmNvLmF0dHInCiAgICoKICAgKiBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKQogICAqCiAgICogc2V0KGltZywgJ3dpZHRoJywgMTAwKQogICAqCiAgICogLy8gb3IgYWxzbwogICAqIHNldChpbWcsIHsKICAgKiAgIHdpZHRoOiAzMDAsCiAgICogICBoZWlnaHQ6IDMwMAogICAqIH0pCiAgICoKICAgKi8KICBmdW5jdGlvbiBzZXQoZWxzLCBuYW1lLCB2YWx1ZSkgewogICAgY29uc3QgYXR0cnMgPSB0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcgPyBuYW1lIDogeyBbbmFtZV06IHZhbHVlIH07CiAgICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGF0dHJzKTsKCiAgICBkb21Ub0FycmF5KGVscykuZm9yRWFjaChlbCA9PiB7CiAgICAgIHByb3BzLmZvckVhY2gocHJvcCA9PiBlbC5zZXRBdHRyaWJ1dGUocHJvcCwgYXR0cnNbcHJvcF0pKTsKICAgIH0pOwogICAgcmV0dXJuIGVscwogIH0KCiAgLyoqCiAgICogR2V0IGFueSBhdHRyaWJ1dGUgZnJvbSBhIHNpbmdsZSBvciBhIGxpc3Qgb2YgRE9NIG5vZGVzCiAgICogQHBhcmFtICAgeyBIVE1MRWxlbWVudHxOb2RlTGlzdHxBcnJheSB9IGVscyAgIC0gRE9NIG5vZGUvcyB0byBwYXJzZQogICAqIEBwYXJhbSAgIHsgc3RyaW5nfEFycmF5IH0gICAgICAgICAgICAgICBuYW1lICAtIG5hbWUgb3IgbGlzdCBvZiBhdHRyaWJ1dGVzIHRvIGdldAogICAqIEByZXR1cm5zIHsgQXJyYXl8c3RyaW5nIH0gbGlzdCBvZiB0aGUgYXR0cmlidXRlcyBmb3VuZAogICAqCiAgICogQGV4YW1wbGUKICAgKgogICAqIGltcG9ydCB7IGdldCB9IGZyb20gJ2JpYW5jby5hdHRyJwogICAqCiAgICogY29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJykKICAgKgogICAqIGdldChpbWcsICd3aWR0aCcpIC8vID0+ICcyMDAnCiAgICoKICAgKiAvLyBvciBhbHNvCiAgICogZ2V0KGltZywgWyd3aWR0aCcsICdoZWlnaHQnXSkgLy8gPT4gWycyMDAnLCAnMzAwJ10KICAgKgogICAqIC8vIG9yIGFsc28KICAgKiBnZXQoW2ltZzEsIGltZzJdLCBbJ3dpZHRoJywgJ2hlaWdodCddKSAvLyA9PiBbWycyMDAnLCAnMzAwJ10sIFsnNTAwJywgJzIwMCddXQogICAqLwogIGZ1bmN0aW9uIGdldChlbHMsIG5hbWUpIHsKICAgIHJldHVybiBwYXJzZU5vZGVzKGVscywgbmFtZSwgJ2dldEF0dHJpYnV0ZScpCiAgfQoKICBjb25zdCBDU1NfQllfTkFNRSA9IG5ldyBNYXAoKTsKICBjb25zdCBTVFlMRV9OT0RFX1NFTEVDVE9SID0gJ3N0eWxlW3Jpb3RdJzsKCiAgLy8gbWVtb2l6ZWQgY3VycmllZCBmdW5jdGlvbgogIGNvbnN0IGdldFN0eWxlTm9kZSA9ICgoc3R5bGUpID0+IHsKICAgIHJldHVybiAoKSA9PiB7CiAgICAgIC8vIGxhenkgZXZhbHVhdGlvbjoKICAgICAgLy8gaWYgdGhpcyBmdW5jdGlvbiB3YXMgYWxyZWFkeSBjYWxsZWQgYmVmb3JlCiAgICAgIC8vIHdlIHJldHVybiBpdHMgY2FjaGVkIHJlc3VsdAogICAgICBpZiAoc3R5bGUpIHJldHVybiBzdHlsZQoKICAgICAgLy8gY3JlYXRlIGEgbmV3IHN0eWxlIGVsZW1lbnQgb3IgdXNlIGFuIGV4aXN0aW5nIG9uZQogICAgICAvLyBhbmQgY2FjaGUgaXQgaW50ZXJuYWxseQogICAgICBzdHlsZSA9ICQoU1RZTEVfTk9ERV9TRUxFQ1RPUilbMF0gfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKICAgICAgc2V0KHN0eWxlLCAndHlwZScsICd0ZXh0L2NzcycpOwoKICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KICAgICAgaWYgKCFzdHlsZS5wYXJlbnROb2RlKSBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTsKCiAgICAgIHJldHVybiBzdHlsZQogICAgfQogIH0pKCk7CgogIC8qKgogICAqIE9iamVjdCB0aGF0IHdpbGwgYmUgdXNlZCB0byBpbmplY3QgYW5kIG1hbmFnZSB0aGUgY3NzIG9mIGV2ZXJ5IHRhZyBpbnN0YW5jZQogICAqLwogIGNvbnN0IGNzc01hbmFnZXIgPSB7CiAgICBDU1NfQllfTkFNRSwKICAgIC8qKgogICAgICogU2F2ZSBhIHRhZyBzdHlsZSB0byBiZSBsYXRlciBpbmplY3RlZCBpbnRvIERPTQogICAgICogQHBhcmFtIHsgc3RyaW5nIH0gbmFtZSAtIGlmIGl0J3MgcGFzc2VkIHdlIHdpbGwgbWFwIHRoZSBjc3MgdG8gYSB0YWduYW1lCiAgICAgKiBAcGFyYW0geyBzdHJpbmcgfSBjc3MgLSBjc3Mgc3RyaW5nCiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBzZWxmCiAgICAgKi8KICAgIGFkZChuYW1lLCBjc3MpIHsKICAgICAgaWYgKCFDU1NfQllfTkFNRS5oYXMobmFtZSkpIHsKICAgICAgICBDU1NfQllfTkFNRS5zZXQobmFtZSwgY3NzKTsKICAgICAgICB0aGlzLmluamVjdCgpOwogICAgICB9CgogICAgICByZXR1cm4gdGhpcwogICAgfSwKICAgIC8qKgogICAgICogSW5qZWN0IGFsbCBwcmV2aW91c2x5IHNhdmVkIHRhZyBzdHlsZXMgaW50byBET00KICAgICAqIGlubmVySFRNTCBzZWVtcyBzbG93OiBodHRwOi8vanNwZXJmLmNvbS9yaW90LWluc2VydC1zdHlsZQogICAgICogQHJldHVybnMge09iamVjdH0gc2VsZgogICAgICovCiAgICBpbmplY3QoKSB7CiAgICAgIGdldFN0eWxlTm9kZSgpLmlubmVySFRNTCA9IFsuLi5DU1NfQllfTkFNRS52YWx1ZXMoKV0uam9pbignXG4nKTsKICAgICAgcmV0dXJuIHRoaXMKICAgIH0sCgogICAgLyoqCiAgICAgKiBSZW1vdmUgYSB0YWcgc3R5bGUgZnJvbSB0aGUgRE9NCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBhIHJlZ2lzdGVyZWQgdGFnbmFtZQogICAgICogQHJldHVybnMge09iamVjdH0gc2VsZgogICAgICovCiAgICByZW1vdmUobmFtZSkgewogICAgICBpZiAoQ1NTX0JZX05BTUUuaGFzKG5hbWUpKSB7CiAgICAgICAgQ1NTX0JZX05BTUUuZGVsZXRlKG5hbWUpOwogICAgICAgIHRoaXMuaW5qZWN0KCk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzCiAgICB9LAogIH07CgogIC8qKgogICAqIEZ1bmN0aW9uIHRvIGN1cnJ5IGFueSBqYXZhc2NyaXB0IG1ldGhvZAogICAqIEBwYXJhbSAgIHtGdW5jdGlvbn0gIGZuIC0gdGhlIHRhcmdldCBmdW5jdGlvbiB3ZSB3YW50IHRvIGN1cnJ5CiAgICogQHBhcmFtICAgey4uLlthcmdzXX0gYWNjIC0gaW5pdGlhbCBhcmd1bWVudHMKICAgKiBAcmV0dXJucyB7RnVuY3Rpb258Kn0gaXQgd2lsbCByZXR1cm4gYSBmdW5jdGlvbiB1bnRpbCB0aGUgdGFyZ2V0IGZ1bmN0aW9uCiAgICogICAgICAgICAgICAgICAgICAgICAgIHdpbGwgcmVjZWl2ZSBhbGwgb2YgaXRzIGFyZ3VtZW50cwogICAqLwogIGZ1bmN0aW9uIGN1cnJ5KGZuLCAuLi5hY2MpIHsKICAgIHJldHVybiAoLi4uYXJncykgPT4gewogICAgICBhcmdzID0gWy4uLmFjYywgLi4uYXJnc107CgogICAgICByZXR1cm4gYXJncy5sZW5ndGggPCBmbi5sZW5ndGggPwogICAgICAgIGN1cnJ5KGZuLCAuLi5hcmdzKSA6CiAgICAgICAgZm4oLi4uYXJncykKICAgIH0KICB9CgogIC8qKgogICAqIEdldCB0aGUgdGFnIG5hbWUgb2YgYW55IERPTSBub2RlCiAgICogQHBhcmFtICAge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gRE9NIG5vZGUgd2Ugd2FudCB0byBpbnNwZWN0CiAgICogQHJldHVybnMge3N0cmluZ30gbmFtZSB0byBpZGVudGlmeSB0aGlzIGRvbSBub2RlIGluIHJpb3QKICAgKi8KICBmdW5jdGlvbiBnZXROYW1lKGVsZW1lbnQpIHsKICAgIHJldHVybiBnZXQoZWxlbWVudCwgSVNfRElSRUNUSVZFKSB8fCBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKQogIH0KCiAgLyoqCiAgICogQWRkIGV2ZW50dWFsbHkgdGhlICJpcyIgYXR0cmlidXRlIHRvIGxpbmsgdGhpcyBET00gbm9kZSB0byBpdHMgY3NzCiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIHRhcmdldCByb290IG5vZGUKICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIG5hbWUgb2YgdGhlIGNvbXBvbmVudCBtb3VudGVkCiAgICogQHJldHVybnMge3VuZGVmaW5lZH0gaXQncyBhIHZvaWQgZnVuY3Rpb24KICAgKi8KCiAgZnVuY3Rpb24gYWRkQ3NzSG9vayhlbGVtZW50LCBuYW1lKSB7CiAgICBpZiAoZ2V0TmFtZShlbGVtZW50KSAhPT0gbmFtZSkgewogICAgICBzZXQoZWxlbWVudCwgSVNfRElSRUNUSVZFLCBuYW1lKTsKICAgIH0KICB9CgogIC8qKgogICAqIENvbXB1dGUgdGhlIGNvbXBvbmVudCBjdXJyZW50IHN0YXRlIG1lcmdpbmcgaXQgd2l0aCBpdHMgcHJldmlvdXMgc3RhdGUKICAgKiBAcGFyYW0gICB7T2JqZWN0fSBvbGRTdGF0ZSAtIHByZXZpb3VzIHN0YXRlIG9iamVjdAogICAqIEBwYXJhbSAgIHtPYmplY3R9IG5ld1N0YXRlIC0gbmV3IHN0YXRlIGdpdmVuIHRvIHRoZSBgdXBkYXRlYCBjYWxsCiAgICogQHJldHVybnMge09iamVjdH0gbmV3IG9iamVjdCBzdGF0ZQogICAqLwogIGZ1bmN0aW9uIGNvbXB1dGVDb21wb25lbnRTdGF0ZShvbGRTdGF0ZSwgbmV3U3RhdGUpIHsKICAgIHJldHVybiB7CiAgICAgIC4uLm9sZFN0YXRlLAogICAgICAuLi5jYWxsT3JBc3NpZ24obmV3U3RhdGUpLAogICAgfQogIH0KCiAgLyoqCiAgICogRXZhbHVhdGUgdGhlIGNvbXBvbmVudCBwcm9wZXJ0aWVzIGVpdGhlciBmcm9tIGl0cyByZWFsIGF0dHJpYnV0ZXMgb3IgZnJvbSBpdHMgaW5pdGlhbCB1c2VyIHByb3BlcnRpZXMKICAgKiBAcGFyYW0gICB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBjb21wb25lbnQgcm9vdAogICAqIEBwYXJhbSAgIHtPYmplY3R9ICBpbml0aWFsUHJvcHMgLSBpbml0aWFsIHByb3BzCiAgICogQHJldHVybnMge09iamVjdH0gY29tcG9uZW50IHByb3BzIGtleSB2YWx1ZSBwYWlycwogICAqLwogIGZ1bmN0aW9uIGNvbXB1dGVJbml0aWFsUHJvcHMoZWxlbWVudCwgaW5pdGlhbFByb3BzID0ge30pIHsKICAgIHJldHVybiB7CiAgICAgIC4uLkRPTWF0dHJpYnV0ZXNUb09iamVjdChlbGVtZW50KSwKICAgICAgLi4uY2FsbE9yQXNzaWduKGluaXRpYWxQcm9wcyksCiAgICB9CiAgfQoKICAvKioKICAgKiBDcmVhdGUgdGhlIGJpbmRpbmdzIHRvIHVwZGF0ZSB0aGUgY29tcG9uZW50IGF0dHJpYnV0ZXMKICAgKiBAcGFyYW0gICB7SFRNTEVsZW1lbnR9IG5vZGUgLSBub2RlIHdoZXJlIHdlIHdpbGwgYmluZCB0aGUgZXhwcmVzc2lvbnMKICAgKiBAcGFyYW0gICB7QXJyYXl9IGF0dHJpYnV0ZXMgLSBsaXN0IG9mIGF0dHJpYnV0ZSBiaW5kaW5ncwogICAqIEByZXR1cm5zIHtUZW1wbGF0ZUNodW5rfSAtIHRlbXBsYXRlIGJpbmRpbmdzIG9iamVjdAogICAqLwogIGZ1bmN0aW9uIGNyZWF0ZUF0dHJpYnV0ZUJpbmRpbmdzKG5vZGUsIGF0dHJpYnV0ZXMgPSBbXSkgewogICAgY29uc3QgZXhwcmVzc2lvbnMgPSBhdHRyaWJ1dGVzLm1hcCgoYSkgPT4gY3JlYXRlJDQobm9kZSwgYSkpOwogICAgY29uc3QgYmluZGluZyA9IHt9OwoKICAgIHJldHVybiBPYmplY3QuYXNzaWduKGJpbmRpbmcsIHsKICAgICAgZXhwcmVzc2lvbnMsCiAgICAgIC4uLmNyZWF0ZUNvcmVBUElNZXRob2RzKChtZXRob2QpID0+IChzY29wZSkgPT4gewogICAgICAgIGV4cHJlc3Npb25zLmZvckVhY2goKGUpID0+IGVbbWV0aG9kXShzY29wZSkpOwoKICAgICAgICByZXR1cm4gYmluZGluZwogICAgICB9KSwKICAgIH0pCiAgfQoKICAvKioKICAgKiBSdW4gdGhlIGNvbXBvbmVudCBpbnN0YW5jZSB0aHJvdWdoIGFsbCB0aGUgcGx1Z2lucyBzZXQgYnkgdGhlIHVzZXIKICAgKiBAcGFyYW0gICB7T2JqZWN0fSBjb21wb25lbnQgLSBjb21wb25lbnQgaW5zdGFuY2UKICAgKiBAcmV0dXJucyB7T2JqZWN0fSB0aGUgY29tcG9uZW50IGVuaGFuY2VkIGJ5IHRoZSBwbHVnaW5zCiAgICovCiAgZnVuY3Rpb24gcnVuUGx1Z2lucyhjb21wb25lbnQpIHsKICAgIHJldHVybiBbLi4uUExVR0lOU19TRVRdLnJlZHVjZSgoYywgZm4pID0+IGZuKGMpIHx8IGMsIGNvbXBvbmVudCkKICB9CgogIC8qKgogICAqIEdldCB0aGUgY29tcHV0ZWQgYXR0cmlidXRlIG5hbWVzIGZyb20gdGhlIHRlbXBsYXRlIGluc3RhbmNlCiAgICogU2luY2UgdGhlc2UgYXR0cmlidXRlcyB3aWxsIG5vdCBjaGFuZ2Ugd2UgbWVtb2l6ZSB0aGUgcmVzdWx0IG9mIHRoaXMgY29tcHV0YXRpb24KICAgKiBAcGFyYW0ge1RlbXBsYXRlQ2h1bmt9IHRlbXBsYXRlIC0gdGVtcGxhdGUgaW5zdGFuY2UKICAgKiBAcmV0dXJuIHtbXX0gbGlzdCBvZiBhdHRyaWJ1dGUgbmFtZXMgdGhhdCB3aWxsIGJlIGNvbXB1dGVkIGJ5IHRoZSB0ZW1wbGF0ZSBleHByZXNzaW9ucwogICAqLwogIGNvbnN0IGdldFJvb3RDb21wdXRlZEF0dHJpYnV0ZU5hbWVzID0gbWVtb2l6ZSgodGVtcGxhdGUpID0+IHsKICAgIGNvbnN0IGZpcnN0QmluZGluZyA9IHRlbXBsYXRlPy5iaW5kaW5nc0RhdGE/LlswXTsKCiAgICAvLyBpZiB0aGUgZmlyc3QgYmluZGluZyBoYXMgdGhlIHNlbGVjdG9yIGF0dHJpYnV0ZSBpdCBtZWFucyB0aGF0IGl0IGRvZXNuJ3QgYmVsb25nIHRvIHRoZSByb290IG5vZGUKICAgIGlmIChmaXJzdEJpbmRpbmc/LnNlbGVjdG9yKSByZXR1cm4gW10KCiAgICByZXR1cm4gKAogICAgICBmaXJzdEJpbmRpbmc/LmV4cHJlc3Npb25zPy5yZWR1Y2UoCiAgICAgICAgKGFjYywgeyBuYW1lLCB0eXBlIH0pID0+CiAgICAgICAgICB0eXBlID09PSBleHByZXNzaW9uVHlwZXMuQVRUUklCVVRFID8gYWNjLmNvbmNhdChbbmFtZV0pIDogYWNjLAogICAgICAgIFtdLAogICAgICApID8/IFtdCiAgICApCiAgfSk7CgogIC8qKgogICAqIENvbXBvbmVudCBjcmVhdGlvbiBmYWN0b3J5IGZ1bmN0aW9uIHRoYXQgd2lsbCBlbmhhbmNlIHRoZSB1c2VyIHByb3ZpZGVkIEFQSQogICAqIEBwYXJhbSAgIHtPYmplY3R9IGNvbXBvbmVudCAtIGEgY29tcG9uZW50IGltcGxlbWVudGF0aW9uIHByZXZpb3VzbHkgZGVmaW5lZAogICAqIEBwYXJhbSAgIHtBcnJheX0gb3B0aW9ucy5zbG90cyAtIGNvbXBvbmVudCBzbG90cyBnZW5lcmF0ZWQgdmlhIHJpb3QgY29tcGlsZXIKICAgKiBAcGFyYW0gICB7QXJyYXl9IG9wdGlvbnMuYXR0cmlidXRlcyAtIGF0dHJpYnV0ZSBleHByZXNzaW9ucyBnZW5lcmF0ZWQgdmlhIHJpb3QgY29tcGlsZXIKICAgKiBAcmV0dXJucyB7UmlvdC5Db21wb25lbnR9IGEgcmlvdCBjb21wb25lbnQgaW5zdGFuY2UKICAgKi8KICBmdW5jdGlvbiBtYW5hZ2VDb21wb25lbnRMaWZlY3ljbGUoCiAgICBjb21wb25lbnQsCiAgICB7IHNsb3RzLCBhdHRyaWJ1dGVzLCBwcm9wcyB9LAogICkgewogICAgcmV0dXJuIGF1dG9iaW5kTWV0aG9kcygKICAgICAgcnVuUGx1Z2lucygKICAgICAgICBkZWZpbmVQcm9wZXJ0aWVzKAogICAgICAgICAgaXNPYmplY3QoY29tcG9uZW50KSA/IE9iamVjdC5jcmVhdGUoY29tcG9uZW50KSA6IGNvbXBvbmVudCwKICAgICAgICAgIHsKICAgICAgICAgICAgbW91bnQoZWxlbWVudCwgc3RhdGUgPSB7fSwgcGFyZW50U2NvcGUpIHsKICAgICAgICAgICAgICAvLyBhbnkgZWxlbWVudCBtb3VudGVkIHBhc3NpbmcgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIGNhbid0IGJlIGEgcHVyZSBjb21wb25lbnQKICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eShlbGVtZW50LCBJU19QVVJFX1NZTUJPTCwgZmFsc2UpOwogICAgICAgICAgICAgIHRoaXNbUEFSRU5UX0tFWV9TWU1CT0xdID0gcGFyZW50U2NvcGU7CiAgICAgICAgICAgICAgdGhpc1tBVFRSSUJVVEVTX0tFWV9TWU1CT0xdID0gY3JlYXRlQXR0cmlidXRlQmluZGluZ3MoCiAgICAgICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICAgICAgYXR0cmlidXRlcywKICAgICAgICAgICAgICApLm1vdW50KHBhcmVudFNjb3BlKTsKCiAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkoCiAgICAgICAgICAgICAgICB0aGlzLAogICAgICAgICAgICAgICAgUFJPUFNfS0VZLAogICAgICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZSh7CiAgICAgICAgICAgICAgICAgIC4uLmNvbXB1dGVJbml0aWFsUHJvcHMoZWxlbWVudCwgcHJvcHMpLAogICAgICAgICAgICAgICAgICAuLi5ldmFsdWF0ZUF0dHJpYnV0ZUV4cHJlc3Npb25zKAogICAgICAgICAgICAgICAgICAgIHRoaXNbQVRUUklCVVRFU19LRVlfU1lNQk9MXS5leHByZXNzaW9ucywKICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgIHRoaXNbU1RBVEVfS0VZXSA9IGNvbXB1dGVDb21wb25lbnRTdGF0ZSh0aGlzW1NUQVRFX0tFWV0sIHN0YXRlKTsKICAgICAgICAgICAgICB0aGlzW1RFTVBMQVRFX0tFWV9TWU1CT0xdID0gdGhpcy50ZW1wbGF0ZS5jcmVhdGVET00oZWxlbWVudCkuY2xvbmUoKTsKCiAgICAgICAgICAgICAgLy8gbGluayB0aGlzIG9iamVjdCB0byB0aGUgRE9NIG5vZGUKICAgICAgICAgICAgICBiaW5kRE9NTm9kZVRvQ29tcG9uZW50SW5zdGFuY2UoZWxlbWVudCwgdGhpcyk7CiAgICAgICAgICAgICAgLy8gYWRkIGV2ZW50dWFsbHkgdGhlICdpcycgYXR0cmlidXRlCiAgICAgICAgICAgICAgY29tcG9uZW50Lm5hbWUgJiYgYWRkQ3NzSG9vayhlbGVtZW50LCBjb21wb25lbnQubmFtZSk7CgogICAgICAgICAgICAgIC8vIGRlZmluZSB0aGUgcm9vdCBlbGVtZW50CiAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkodGhpcywgUk9PVF9LRVksIGVsZW1lbnQpOwogICAgICAgICAgICAgIC8vIGRlZmluZSB0aGUgc2xvdHMgYXJyYXkKICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBTTE9UU19LRVksIHNsb3RzKTsKCiAgICAgICAgICAgICAgLy8gYmVmb3JlIG1vdW50IGxpZmVjeWNsZSBldmVudAogICAgICAgICAgICAgIHRoaXNbT05fQkVGT1JFX01PVU5UX0tFWV0odGhpc1tQUk9QU19LRVldLCB0aGlzW1NUQVRFX0tFWV0pOwogICAgICAgICAgICAgIC8vIG1vdW50IHRoZSB0ZW1wbGF0ZQogICAgICAgICAgICAgIHRoaXNbVEVNUExBVEVfS0VZX1NZTUJPTF0ubW91bnQoZWxlbWVudCwgdGhpcywgcGFyZW50U2NvcGUpOwogICAgICAgICAgICAgIHRoaXNbT05fTU9VTlRFRF9LRVldKHRoaXNbUFJPUFNfS0VZXSwgdGhpc1tTVEFURV9LRVldKTsKCiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdXBkYXRlKHN0YXRlID0ge30sIHBhcmVudFNjb3BlKSB7CiAgICAgICAgICAgICAgaWYgKHBhcmVudFNjb3BlKSB7CiAgICAgICAgICAgICAgICB0aGlzW1BBUkVOVF9LRVlfU1lNQk9MXSA9IHBhcmVudFNjb3BlOwogICAgICAgICAgICAgICAgdGhpc1tBVFRSSUJVVEVTX0tFWV9TWU1CT0xdLnVwZGF0ZShwYXJlbnRTY29wZSk7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAvLyBnZXQgdGhlIGF0dHJpYnV0ZSBuYW1lcyB0aGF0IGRvbid0IGJlbG9uZyB0byB0aGUgdGhlIHByb3BzIG9iamVjdAogICAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBhdm9pZCByZWN1cnNpdmUgcHJvcHMgcmVuZGVyaW5nIGh0dHBzOi8vZ2l0aHViLmNvbS9yaW90L3Jpb3QvaXNzdWVzLzI5OTQKICAgICAgICAgICAgICBjb25zdCBjb21wdXRlZEF0dHJpYnV0ZU5hbWVzID0gZ2V0Um9vdENvbXB1dGVkQXR0cmlidXRlTmFtZXMoCiAgICAgICAgICAgICAgICB0aGlzW1RFTVBMQVRFX0tFWV9TWU1CT0xdLAogICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgLy8gZmlsdGVyIG91dCB0aGUgY29tcHV0ZWQgYXR0cmlidXRlcyBmcm9tIHRoZSByb290IG5vZGUKICAgICAgICAgICAgICBjb25zdCBzdGF0aWNSb290QXR0cmlidXRlcyA9IEFycmF5LmZyb20oCiAgICAgICAgICAgICAgICB0aGlzW1JPT1RfS0VZXS5hdHRyaWJ1dGVzLAogICAgICAgICAgICAgICkuZmlsdGVyKCh7IG5hbWUgfSkgPT4gIWNvbXB1dGVkQXR0cmlidXRlTmFtZXMuaW5jbHVkZXMobmFtZSkpOwoKICAgICAgICAgICAgICAvLyBldmFsdWF0ZSB0aGUgdmFsdWUgb2YgdGhlIHN0YXRpYyBkb20gYXR0cmlidXRlcwogICAgICAgICAgICAgIGNvbnN0IGRvbU5vZGVBdHRyaWJ1dGVzID0gRE9NYXR0cmlidXRlc1RvT2JqZWN0KHsKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHN0YXRpY1Jvb3RBdHRyaWJ1dGVzLAogICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAvLyBBdm9pZCBhZGRpbmcgdGhlIHJpb3QgImlzIiBkaXJlY3RpdmVzIHRvIHRoZSBjb21wb25lbnQgcHJvcHMKICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMKICAgICAgICAgICAgICBjb25zdCB7IFtJU19ESVJFQ1RJVkVdOiBfLCAuLi5uZXdQcm9wcyB9ID0gewogICAgICAgICAgICAgICAgLi4uZG9tTm9kZUF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAuLi5ldmFsdWF0ZUF0dHJpYnV0ZUV4cHJlc3Npb25zKAogICAgICAgICAgICAgICAgICB0aGlzW0FUVFJJQlVURVNfS0VZX1NZTUJPTF0uZXhwcmVzc2lvbnMsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgaWYgKHRoaXNbU0hPVUxEX1VQREFURV9LRVldKG5ld1Byb3BzLCB0aGlzW1BST1BTX0tFWV0pID09PSBmYWxzZSkKICAgICAgICAgICAgICAgIHJldHVybgoKICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSgKICAgICAgICAgICAgICAgIHRoaXMsCiAgICAgICAgICAgICAgICBQUk9QU19LRVksCiAgICAgICAgICAgICAgICBPYmplY3QuZnJlZXplKHsKICAgICAgICAgICAgICAgICAgLy8gb25seSByb290IGNvbXBvbmVudHMgd2lsbCBtZXJnZSB0aGVpciBpbml0aWFsIHByb3BzIHdpdGggdGhlIG5ldyBvbmVzCiAgICAgICAgICAgICAgICAgIC8vIGNoaWxkcmVuIGNvbXBvbmVudHMgd2lsbCBqdXN0IGdldCB0aGVtIG92ZXJyaWRkZW4gc2VlIGFsc28gaHR0cHM6Ly9naXRodWIuY29tL3Jpb3QvcmlvdC9pc3N1ZXMvMjk3OAogICAgICAgICAgICAgICAgICAuLi4ocGFyZW50U2NvcGUKICAgICAgICAgICAgICAgICAgICA/IHBpY2sodGhpc1tQUk9QU19LRVldLCBjb21wdXRlZEF0dHJpYnV0ZU5hbWVzKQogICAgICAgICAgICAgICAgICAgIDogdGhpc1tQUk9QU19LRVldKSwKICAgICAgICAgICAgICAgICAgLi4ubmV3UHJvcHMsCiAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICB0aGlzW1NUQVRFX0tFWV0gPSBjb21wdXRlQ29tcG9uZW50U3RhdGUodGhpc1tTVEFURV9LRVldLCBzdGF0ZSk7CgogICAgICAgICAgICAgIHRoaXNbT05fQkVGT1JFX1VQREFURV9LRVldKHRoaXNbUFJPUFNfS0VZXSwgdGhpc1tTVEFURV9LRVldKTsKCiAgICAgICAgICAgICAgLy8gYXZvaWRpbmcgcmVjdXJzaXZlIHVwZGF0ZXMKICAgICAgICAgICAgICAvLyBzZWUgYWxzbyBodHRwczovL2dpdGh1Yi5jb20vcmlvdC9yaW90L2lzc3Vlcy8yODk1CiAgICAgICAgICAgICAgaWYgKCF0aGlzW0lTX0NPTVBPTkVOVF9VUERBVElOR10pIHsKICAgICAgICAgICAgICAgIHRoaXNbSVNfQ09NUE9ORU5UX1VQREFUSU5HXSA9IHRydWU7CiAgICAgICAgICAgICAgICB0aGlzW1RFTVBMQVRFX0tFWV9TWU1CT0xdLnVwZGF0ZSh0aGlzLCB0aGlzW1BBUkVOVF9LRVlfU1lNQk9MXSk7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICB0aGlzW09OX1VQREFURURfS0VZXSh0aGlzW1BST1BTX0tFWV0sIHRoaXNbU1RBVEVfS0VZXSk7CiAgICAgICAgICAgICAgdGhpc1tJU19DT01QT05FTlRfVVBEQVRJTkddID0gZmFsc2U7CgogICAgICAgICAgICAgIHJldHVybiB0aGlzCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHVubW91bnQocHJlc2VydmVSb290KSB7CiAgICAgICAgICAgICAgdGhpc1tPTl9CRUZPUkVfVU5NT1VOVF9LRVldKHRoaXNbUFJPUFNfS0VZXSwgdGhpc1tTVEFURV9LRVldKTsKICAgICAgICAgICAgICB0aGlzW0FUVFJJQlVURVNfS0VZX1NZTUJPTF0udW5tb3VudCgpOwogICAgICAgICAgICAgIC8vIGlmIHRoZSBwcmVzZXJ2ZVJvb3QgaXMgbnVsbCB0aGUgdGVtcGxhdGUgaHRtbCB3aWxsIGJlIGxlZnQgdW50b3VjaGVkCiAgICAgICAgICAgICAgLy8gaW4gdGhhdCBjYXNlIHRoZSBET00gY2xlYW51cCB3aWxsIGhhcHBlbiBkaWZmZXJlbnRseSBmcm9tIGEgcGFyZW50IG5vZGUKICAgICAgICAgICAgICB0aGlzW1RFTVBMQVRFX0tFWV9TWU1CT0xdLnVubW91bnQoCiAgICAgICAgICAgICAgICB0aGlzLAogICAgICAgICAgICAgICAgdGhpc1tQQVJFTlRfS0VZX1NZTUJPTF0sCiAgICAgICAgICAgICAgICBwcmVzZXJ2ZVJvb3QgPT09IG51bGwgPyBudWxsIDogIXByZXNlcnZlUm9vdCwKICAgICAgICAgICAgICApOwogICAgICAgICAgICAgIHRoaXNbT05fVU5NT1VOVEVEX0tFWV0odGhpc1tQUk9QU19LRVldLCB0aGlzW1NUQVRFX0tFWV0pOwoKICAgICAgICAgICAgICByZXR1cm4gdGhpcwogICAgICAgICAgICB9LAogICAgICAgICAgfSwKICAgICAgICApLAogICAgICApLAogICAgICBPYmplY3Qua2V5cyhjb21wb25lbnQpLmZpbHRlcigocHJvcCkgPT4gaXNGdW5jdGlvbihjb21wb25lbnRbcHJvcF0pKSwKICAgICkKICB9CgogIC8qKgogICAqIENvbXBvbmVudCBkZWZpbml0aW9uIGZ1bmN0aW9uCiAgICogQHBhcmFtICAge09iamVjdH0gaW1wbGVtZW50YXRpb24gLSB0aGUgY29tcG9uZW50IGltcGxlbWVudGF0aW9uIHdpbGwgYmUgZ2VuZXJhdGVkIHZpYSBjb21waWxlcgogICAqIEBwYXJhbSAgIHtPYmplY3R9IGNvbXBvbmVudCAtIHRoZSBjb21wb25lbnQgaW5pdGlhbCBwcm9wZXJ0aWVzCiAgICogQHJldHVybnMge09iamVjdH0gYSBuZXcgY29tcG9uZW50IGltcGxlbWVudGF0aW9uIG9iamVjdAogICAqLwogIGZ1bmN0aW9uIGluc3RhbnRpYXRlQ29tcG9uZW50KHsgY3NzLCB0ZW1wbGF0ZSwgY29tcG9uZW50QVBJLCBuYW1lIH0pIHsKICAgIC8vIGFkZCB0aGUgY29tcG9uZW50IGNzcyBpbnRvIHRoZSBET00KICAgIGlmIChjc3MgJiYgbmFtZSkgY3NzTWFuYWdlci5hZGQobmFtZSwgY3NzKTsKCiAgICByZXR1cm4gY3VycnkobWFuYWdlQ29tcG9uZW50TGlmZWN5Y2xlKSgKICAgICAgZGVmaW5lUHJvcGVydGllcygKICAgICAgICAvLyBzZXQgdGhlIGNvbXBvbmVudCBkZWZhdWx0cyB3aXRob3V0IG92ZXJyaWRpbmcgdGhlIG9yaWdpbmFsIGNvbXBvbmVudCBBUEkKICAgICAgICBkZWZpbmVEZWZhdWx0cyhjb21wb25lbnRBUEksIHsKICAgICAgICAgIC4uLkNPTVBPTkVOVF9MSUZFQ1lDTEVfTUVUSE9EUywKICAgICAgICAgIFtQUk9QU19LRVldOiB7fSwKICAgICAgICAgIFtTVEFURV9LRVldOiB7fSwKICAgICAgICB9KSwKICAgICAgICB7CiAgICAgICAgICAvLyBkZWZpbmVkIGR1cmluZyB0aGUgY29tcG9uZW50IGNyZWF0aW9uCiAgICAgICAgICBbU0xPVFNfS0VZXTogbnVsbCwKICAgICAgICAgIFtST09UX0tFWV06IG51bGwsCiAgICAgICAgICAvLyB0aGVzZSBwcm9wZXJ0aWVzIHNob3VsZCBub3QgYmUgb3ZlcnJpZGVuCiAgICAgICAgICAuLi5DT01QT05FTlRfRE9NX1NFTEVDVE9SUywKICAgICAgICAgIG5hbWUsCiAgICAgICAgICBjc3MsCiAgICAgICAgICB0ZW1wbGF0ZSwKICAgICAgICB9LAogICAgICApLAogICAgKQogIH0KCiAgLyoqCiAgICogQ3JlYXRlIHRoZSBzdWJjb21wb25lbnRzIHRoYXQgY2FuIGJlIGluY2x1ZGVkIGluc2lkZSBhIHRhZyBpbiBydW50aW1lCiAgICogQHBhcmFtICAge09iamVjdH0gY29tcG9uZW50cyAtIGNvbXBvbmVudHMgaW1wb3J0ZWQgaW4gcnVudGltZQogICAqIEByZXR1cm5zIHtPYmplY3R9IGFsbCB0aGUgY29tcG9uZW50cyB0cmFuc2Zvcm1lZCBpbnRvIFJpb3QuQ29tcG9uZW50IGZhY3RvcnkgZnVuY3Rpb25zCiAgICovCiAgZnVuY3Rpb24gY3JlYXRlQ2hpbGRyZW5Db21wb25lbnRzT2JqZWN0KGNvbXBvbmVudHMgPSB7fSkgewogICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGNhbGxPckFzc2lnbihjb21wb25lbnRzKSkucmVkdWNlKAogICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHsKICAgICAgICBhY2NbY2FtZWxUb0Rhc2hDYXNlKGtleSldID0gY3JlYXRlQ29tcG9uZW50RnJvbVdyYXBwZXIodmFsdWUpOwogICAgICAgIHJldHVybiBhY2MKICAgICAgfSwKICAgICAge30sCiAgICApCiAgfQoKICAvKioKICAgKiBDcmVhdGUgdGhlIGdldHRlciBmdW5jdGlvbiB0byByZW5kZXIgdGhlIGNoaWxkIGNvbXBvbmVudHMKICAgKiBAcGFyYW0gICB7UmlvdENvbXBvbmVudFdyYXBwZXJ9IGNvbXBvbmVudFdyYXBwZXIgLSByaW90IGNvbXBpbGVyIGdlbmVyYXRlZCBvYmplY3QKICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IGZ1bmN0aW9uIHJldHVybmluZyB0aGUgY29tcG9uZW50IGZhY3RvcnkgZnVuY3Rpb24KICAgKi8KICBjb25zdCBjcmVhdGVDaGlsZENvbXBvbmVudEdldHRlciA9IChjb21wb25lbnRXcmFwcGVyKSA9PiB7CiAgICBjb25zdCBjaGlsZHJlbkNvbXBvbmVudHMgPSBjcmVhdGVDaGlsZHJlbkNvbXBvbmVudHNPYmplY3QoCiAgICAgIGNvbXBvbmVudFdyYXBwZXIuZXhwb3J0cyA/IGNvbXBvbmVudFdyYXBwZXIuZXhwb3J0cy5jb21wb25lbnRzIDoge30sCiAgICApOwoKICAgIHJldHVybiAobmFtZSkgPT4gewogICAgICAvLyBpbXByb3ZlIHN1cHBvcnQgZm9yIHJlY3Vyc2l2ZSBjb21wb25lbnRzCiAgICAgIGlmIChuYW1lID09PSBjb21wb25lbnRXcmFwcGVyLm5hbWUpCiAgICAgICAgcmV0dXJuIG1lbW9pemVkQ3JlYXRlQ29tcG9uZW50RnJvbVdyYXBwZXIoY29tcG9uZW50V3JhcHBlcikKICAgICAgLy8gcmV0dXJuIHRoZSByZWdpc3RlcmVkIGNvbXBvbmVudHMKICAgICAgcmV0dXJuIGNoaWxkcmVuQ29tcG9uZW50c1tuYW1lXSB8fCBDT01QT05FTlRTX0lNUExFTUVOVEFUSU9OX01BUC5nZXQobmFtZSkKICAgIH0KICB9OwoKICAvKioKICAgKiBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gZm9yIHRoZSByZWN1cnNpdmUgY29tcG9uZW50cwogICAqIEBwYXJhbSAge1Jpb3RDb21wb25lbnRXcmFwcGVyfSBjb21wb25lbnRXcmFwcGVyIC0gcmlvdCBjb21waWxlciBnZW5lcmF0ZWQgb2JqZWN0CiAgICogQHJldHVybnMge09iamVjdH0gY29tcG9uZW50IGxpa2UgaW50ZXJmYWNlCiAgICovCiAgY29uc3QgbWVtb2l6ZWRDcmVhdGVDb21wb25lbnRGcm9tV3JhcHBlciA9IG1lbW9pemUoY3JlYXRlQ29tcG9uZW50RnJvbVdyYXBwZXIpOwoKICAvKioKICAgKiBDcmVhdGUgdGhlIGNvbXBvbmVudCBpbnRlcmZhY2UgbmVlZGVkIGZvciB0aGUgQHJpb3Rqcy9kb20tYmluZGluZ3MgdGFnIGJpbmRpbmdzCiAgICogQHBhcmFtICAge1Jpb3RDb21wb25lbnRXcmFwcGVyfSBjb21wb25lbnRXcmFwcGVyIC0gcmlvdCBjb21waWxlciBnZW5lcmF0ZWQgb2JqZWN0CiAgICogQHBhcmFtICAge3N0cmluZ30gY29tcG9uZW50V3JhcHBlci5jc3MgLSBjb21wb25lbnQgY3NzCiAgICogQHBhcmFtICAge0Z1bmN0aW9ufSBjb21wb25lbnRXcmFwcGVyLnRlbXBsYXRlIC0gZnVuY3Rpb24gdGhhdCB3aWxsIHJldHVybiB0aGUgZG9tLWJpbmRpbmdzIHRlbXBsYXRlIGZ1bmN0aW9uCiAgICogQHBhcmFtICAge09iamVjdH0gY29tcG9uZW50V3JhcHBlci5leHBvcnRzIC0gY29tcG9uZW50IGludGVyZmFjZQogICAqIEBwYXJhbSAgIHtzdHJpbmd9IGNvbXBvbmVudFdyYXBwZXIubmFtZSAtIGNvbXBvbmVudCBuYW1lCiAgICogQHJldHVybnMge09iamVjdH0gY29tcG9uZW50IGxpa2UgaW50ZXJmYWNlCiAgICovCiAgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50RnJvbVdyYXBwZXIoY29tcG9uZW50V3JhcHBlcikgewogICAgY29uc3QgeyBjc3MsIHRlbXBsYXRlLCBleHBvcnRzLCBuYW1lIH0gPSBjb21wb25lbnRXcmFwcGVyOwogICAgY29uc3QgdGVtcGxhdGVGbiA9IHRlbXBsYXRlCiAgICAgID8gY29tcG9uZW50VGVtcGxhdGVGYWN0b3J5KAogICAgICAgICAgdGVtcGxhdGUsCiAgICAgICAgICBjb21wb25lbnRXcmFwcGVyLAogICAgICAgICAgY3JlYXRlQ2hpbGRDb21wb25lbnRHZXR0ZXIoY29tcG9uZW50V3JhcHBlciksCiAgICAgICAgKQogICAgICA6IE1PQ0tFRF9URU1QTEFURV9JTlRFUkZBQ0U7CgogICAgcmV0dXJuICh7IHNsb3RzLCBhdHRyaWJ1dGVzLCBwcm9wcyB9KSA9PiB7CiAgICAgIC8vIHB1cmUgY29tcG9uZW50cyByZW5kZXJpbmcgd2lsbCBiZSBtYW5hZ2VkIGJ5IHRoZSBlbmQgdXNlcgogICAgICBpZiAoZXhwb3J0cyAmJiBleHBvcnRzW0lTX1BVUkVfU1lNQk9MXSkKICAgICAgICByZXR1cm4gY3JlYXRlUHVyZUNvbXBvbmVudChleHBvcnRzLCB7CiAgICAgICAgICBzbG90cywKICAgICAgICAgIGF0dHJpYnV0ZXMsCiAgICAgICAgICBwcm9wcywKICAgICAgICAgIGNzcywKICAgICAgICAgIHRlbXBsYXRlLAogICAgICAgIH0pCgogICAgICBjb25zdCBjb21wb25lbnRBUEkgPSBjYWxsT3JBc3NpZ24oZXhwb3J0cykgfHwge307CgogICAgICBjb25zdCBjb21wb25lbnQgPSBpbnN0YW50aWF0ZUNvbXBvbmVudCh7CiAgICAgICAgY3NzLAogICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZUZuLAogICAgICAgIGNvbXBvbmVudEFQSSwKICAgICAgICBuYW1lLAogICAgICB9KSh7IHNsb3RzLCBhdHRyaWJ1dGVzLCBwcm9wcyB9KTsKCiAgICAgIC8vIG5vdGljZSB0aGF0IGZvciB0aGUgY29tcG9uZW50cyBjcmVhdGVkIHZpYSB0YWcgYmluZGluZwogICAgICAvLyB3ZSBuZWVkIHRvIGludmVydCB0aGUgbW91bnQgKHN0YXRlL3BhcmVudFNjb3BlKSBhcmd1bWVudHMKICAgICAgLy8gdGhlIHRlbXBsYXRlIGJpbmRpbmdzIHdpbGwgb25seSBmb3J3YXJkIHRoZSBwYXJlbnRTY29wZSB1cGRhdGVzCiAgICAgIC8vIGFuZCBuZXZlciBkZWFsIHdpdGggdGhlIGNvbXBvbmVudCBzdGF0ZQogICAgICByZXR1cm4gewogICAgICAgIG1vdW50KGVsZW1lbnQsIHBhcmVudFNjb3BlLCBzdGF0ZSkgewogICAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5tb3VudChlbGVtZW50LCBzdGF0ZSwgcGFyZW50U2NvcGUpCiAgICAgICAgfSwKICAgICAgICB1cGRhdGUocGFyZW50U2NvcGUsIHN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gY29tcG9uZW50LnVwZGF0ZShzdGF0ZSwgcGFyZW50U2NvcGUpCiAgICAgICAgfSwKICAgICAgICB1bm1vdW50KHByZXNlcnZlUm9vdCkgewogICAgICAgICAgcmV0dXJuIGNvbXBvbmVudC51bm1vdW50KHByZXNlcnZlUm9vdCkKICAgICAgICB9LAogICAgICB9CiAgICB9CiAgfQoKICAvKioKICAgKiBSZWdpc3RlciBhIGN1c3RvbSB0YWcgYnkgbmFtZQogICAqIEBwYXJhbSAgIHtzdHJpbmd9IG5hbWUgLSBjb21wb25lbnQgbmFtZQogICAqIEBwYXJhbSAgIHtPYmplY3R9IGltcGxlbWVudGF0aW9uIC0gdGFnIGltcGxlbWVudGF0aW9uCiAgICogQHJldHVybnMge01hcH0gbWFwIGNvbnRhaW5pbmcgYWxsIHRoZSBjb21wb25lbnRzIGltcGxlbWVudGF0aW9ucwogICAqLwogIGZ1bmN0aW9uIHJlZ2lzdGVyKG5hbWUsIHsgY3NzLCB0ZW1wbGF0ZSwgZXhwb3J0cyB9KSB7CiAgICBpZiAoQ09NUE9ORU5UU19JTVBMRU1FTlRBVElPTl9NQVAuaGFzKG5hbWUpKQogICAgICBwYW5pYyhgVGhlIGNvbXBvbmVudCAiJHtuYW1lfSIgd2FzIGFscmVhZHkgcmVnaXN0ZXJlZGApOwoKICAgIENPTVBPTkVOVFNfSU1QTEVNRU5UQVRJT05fTUFQLnNldCgKICAgICAgbmFtZSwKICAgICAgY3JlYXRlQ29tcG9uZW50RnJvbVdyYXBwZXIoeyBuYW1lLCBjc3MsIHRlbXBsYXRlLCBleHBvcnRzIH0pLAogICAgKTsKCiAgICByZXR1cm4gQ09NUE9ORU5UU19JTVBMRU1FTlRBVElPTl9NQVAKICB9CgogIC8qKgogICAqIFVucmVnaXN0ZXIgYSByaW90IHdlYiBjb21wb25lbnQKICAgKiBAcGFyYW0gICB7c3RyaW5nfSBuYW1lIC0gY29tcG9uZW50IG5hbWUKICAgKiBAcmV0dXJucyB7TWFwfSBtYXAgY29udGFpbmluZyBhbGwgdGhlIGNvbXBvbmVudHMgaW1wbGVtZW50YXRpb25zCiAgICovCiAgZnVuY3Rpb24gdW5yZWdpc3RlcihuYW1lKSB7CiAgICBpZiAoIUNPTVBPTkVOVFNfSU1QTEVNRU5UQVRJT05fTUFQLmhhcyhuYW1lKSkKICAgICAgcGFuaWMoYFRoZSBjb21wb25lbnQgIiR7bmFtZX0iIHdhcyBuZXZlciByZWdpc3RlcmVkYCk7CgogICAgQ09NUE9ORU5UU19JTVBMRU1FTlRBVElPTl9NQVAuZGVsZXRlKG5hbWUpOwogICAgY3NzTWFuYWdlci5yZW1vdmUobmFtZSk7CgogICAgcmV0dXJuIENPTVBPTkVOVFNfSU1QTEVNRU5UQVRJT05fTUFQCiAgfQoKICAvKioKICAgKiBDb21wb25lbnQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gc3RhcnRpbmcgZnJvbSBhIERPTSBub2RlCiAgICogQHBhcmFtICAge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gZWxlbWVudCB0byB1cGdyYWRlCiAgICogQHBhcmFtICAge09iamVjdH0gaW5pdGlhbFByb3BzIC0gaW5pdGlhbCBjb21wb25lbnQgcHJvcGVydGllcwogICAqIEBwYXJhbSAgIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgLSBjb21wb25lbnQgaWQKICAgKiBAcGFyYW0gICB7QXJyYXl9IHNsb3RzIC0gY29tcG9uZW50IHNsb3RzCiAgICogQHJldHVybnMge09iamVjdH0gYSBuZXcgY29tcG9uZW50IGluc3RhbmNlIGJvdW5kIHRvIGEgRE9NIG5vZGUKICAgKi8KICBmdW5jdGlvbiBtb3VudENvbXBvbmVudChlbGVtZW50LCBpbml0aWFsUHJvcHMsIGNvbXBvbmVudE5hbWUsIHNsb3RzKSB7CiAgICBjb25zdCBuYW1lID0gY29tcG9uZW50TmFtZSB8fCBnZXROYW1lKGVsZW1lbnQpOwogICAgaWYgKCFDT01QT05FTlRTX0lNUExFTUVOVEFUSU9OX01BUC5oYXMobmFtZSkpCiAgICAgIHBhbmljKGBUaGUgY29tcG9uZW50IG5hbWVkICIke25hbWV9IiB3YXMgbmV2ZXIgcmVnaXN0ZXJlZGApOwoKICAgIGNvbnN0IGNvbXBvbmVudCA9IENPTVBPTkVOVFNfSU1QTEVNRU5UQVRJT05fTUFQLmdldChuYW1lKSh7CiAgICAgIHByb3BzOiBpbml0aWFsUHJvcHMsCiAgICAgIHNsb3RzLAogICAgfSk7CgogICAgcmV0dXJuIGNvbXBvbmVudC5tb3VudChlbGVtZW50KQogIH0KCiAgLyoqCiAgICogTW91bnRpbmcgZnVuY3Rpb24gdGhhdCB3aWxsIHdvcmsgb25seSBmb3IgdGhlIGNvbXBvbmVudHMgdGhhdCB3ZXJlIGdsb2JhbGx5IHJlZ2lzdGVyZWQKICAgKiBAcGFyYW0gICB7c3RyaW5nfEhUTUxFbGVtZW50fSBzZWxlY3RvciAtIHF1ZXJ5IGZvciB0aGUgc2VsZWN0aW9uIG9yIGEgRE9NIGVsZW1lbnQKICAgKiBAcGFyYW0gICB7T2JqZWN0fSBpbml0aWFsUHJvcHMgLSB0aGUgaW5pdGlhbCBjb21wb25lbnQgcHJvcGVydGllcwogICAqIEBwYXJhbSAgIHtzdHJpbmd9IG5hbWUgLSBvcHRpb25hbCBjb21wb25lbnQgbmFtZQogICAqIEByZXR1cm5zIHtBcnJheX0gbGlzdCBvZiByaW90IGNvbXBvbmVudHMKICAgKi8KICBmdW5jdGlvbiBtb3VudChzZWxlY3RvciwgaW5pdGlhbFByb3BzLCBuYW1lKSB7CiAgICByZXR1cm4gJChzZWxlY3RvcikubWFwKChlbGVtZW50KSA9PgogICAgICBtb3VudENvbXBvbmVudChlbGVtZW50LCBpbml0aWFsUHJvcHMsIG5hbWUpLAogICAgKQogIH0KCiAgLyoqCiAgICogU3dlZXQgdW5tb3VudGluZyBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBET00gbm9kZSBtb3VudGVkIG1hbnVhbGx5IGJ5IHRoZSB1c2VyCiAgICogQHBhcmFtICAge3N0cmluZ3xIVE1MRWxlbWVudH0gc2VsZWN0b3IgLSBxdWVyeSBmb3IgdGhlIHNlbGVjdGlvbiBvciBhIERPTSBlbGVtZW50CiAgICogQHBhcmFtICAge2Jvb2xlYW58bnVsbH0ga2VlcFJvb3RFbGVtZW50IC0gaWYgdHJ1ZSBrZWVwIHRoZSByb290IGVsZW1lbnQKICAgKiBAcmV0dXJucyB7QXJyYXl9IGxpc3Qgb2Ygbm9kZXMgdW5tb3VudGVkCiAgICovCiAgZnVuY3Rpb24gdW5tb3VudChzZWxlY3Rvciwga2VlcFJvb3RFbGVtZW50KSB7CiAgICByZXR1cm4gJChzZWxlY3RvcikubWFwKChlbGVtZW50KSA9PiB7CiAgICAgIGlmIChlbGVtZW50W0RPTV9DT01QT05FTlRfSU5TVEFOQ0VfUFJPUEVSVFldKSB7CiAgICAgICAgZWxlbWVudFtET01fQ09NUE9ORU5UX0lOU1RBTkNFX1BST1BFUlRZXS51bm1vdW50KGtlZXBSb290RWxlbWVudCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGVsZW1lbnQKICAgIH0pCiAgfQoKICAvKioKICAgKiBEZWZpbmUgYSByaW90IHBsdWdpbgogICAqIEBwYXJhbSAgIHtGdW5jdGlvbn0gcGx1Z2luIC0gZnVuY3Rpb24gdGhhdCB3aWxsIHJlY2VpdmUgYWxsIHRoZSBjb21wb25lbnRzIGNyZWF0ZWQKICAgKiBAcmV0dXJucyB7U2V0fSB0aGUgc2V0IGNvbnRhaW5pbmcgYWxsIHRoZSBwbHVnaW5zIGluc3RhbGxlZAogICAqLwogIGZ1bmN0aW9uIGluc3RhbGwocGx1Z2luKSB7CiAgICBpZiAoIWlzRnVuY3Rpb24ocGx1Z2luKSkgcGFuaWMoJ1BsdWdpbnMgbXVzdCBiZSBvZiB0eXBlIGZ1bmN0aW9uJyk7CiAgICBpZiAoUExVR0lOU19TRVQuaGFzKHBsdWdpbikpIHBhbmljKCdUaGlzIHBsdWdpbiB3YXMgYWxyZWFkeSBpbnN0YWxsZWQnKTsKCiAgICBQTFVHSU5TX1NFVC5hZGQocGx1Z2luKTsKCiAgICByZXR1cm4gUExVR0lOU19TRVQKICB9CgogIC8qKgogICAqIFVuaW5zdGFsbCBhIHJpb3QgcGx1Z2luCiAgICogQHBhcmFtICAge0Z1bmN0aW9ufSBwbHVnaW4gLSBwbHVnaW4gcHJldmlvdXNseSBpbnN0YWxsZWQKICAgKiBAcmV0dXJucyB7U2V0fSB0aGUgc2V0IGNvbnRhaW5pbmcgYWxsIHRoZSBwbHVnaW5zIGluc3RhbGxlZAogICAqLwogIGZ1bmN0aW9uIHVuaW5zdGFsbChwbHVnaW4pIHsKICAgIGlmICghUExVR0lOU19TRVQuaGFzKHBsdWdpbikpIHBhbmljKCdUaGlzIHBsdWdpbiB3YXMgbmV2ZXIgaW5zdGFsbGVkJyk7CgogICAgUExVR0lOU19TRVQuZGVsZXRlKHBsdWdpbik7CgogICAgcmV0dXJuIFBMVUdJTlNfU0VUCiAgfQoKICAvKioKICAgKiBTaW1pbGFyIHRvIGNvbXBvc2UgYnV0IHBlcmZvcm1zIGZyb20gbGVmdC10by1yaWdodCBmdW5jdGlvbiBjb21wb3NpdGlvbi48YnIvPgogICAqIHtAbGluayBodHRwczovLzMwc2Vjb25kc29mY29kZS5vcmcvZnVuY3Rpb24jY29tcG9zZXJpZ2h0IHNlZSBhbHNvfQogICAqIEBwYXJhbSAgIHsuLi5bZnVuY3Rpb25dfSBmbnMpIC0gbGlzdCBvZiB1bmFyeSBmdW5jdGlvbgogICAqIEByZXR1cm5zIHsqfSByZXN1bHQgb2YgdGhlIGNvbXB1dGF0aW9uCiAgICovCgogIC8qKgogICAqIFBlcmZvcm1zIHJpZ2h0LXRvLWxlZnQgZnVuY3Rpb24gY29tcG9zaXRpb24uPGJyLz4KICAgKiBVc2UgQXJyYXkucHJvdG90eXBlLnJlZHVjZSgpIHRvIHBlcmZvcm0gcmlnaHQtdG8tbGVmdCBmdW5jdGlvbiBjb21wb3NpdGlvbi48YnIvPgogICAqIFRoZSBsYXN0IChyaWdodG1vc3QpIGZ1bmN0aW9uIGNhbiBhY2NlcHQgb25lIG9yIG1vcmUgYXJndW1lbnRzOyB0aGUgcmVtYWluaW5nIGZ1bmN0aW9ucyBtdXN0IGJlIHVuYXJ5Ljxici8+CiAgICoge0BsaW5rIGh0dHBzOi8vMzBzZWNvbmRzb2Zjb2RlLm9yZy9mdW5jdGlvbiNjb21wb3NlIG9yaWdpbmFsIHNvdXJjZSBjb2RlfQogICAqIEBwYXJhbSAgIHsuLi5bZnVuY3Rpb25dfSBmbnMpIC0gbGlzdCBvZiB1bmFyeSBmdW5jdGlvbgogICAqIEByZXR1cm5zIHsqfSByZXN1bHQgb2YgdGhlIGNvbXB1dGF0aW9uCiAgICovCiAgZnVuY3Rpb24gY29tcG9zZSguLi5mbnMpIHsKICAgIHJldHVybiBmbnMucmVkdWNlKChmLCBnKSA9PiAoLi4uYXJncykgPT4gZihnKC4uLmFyZ3MpKSkKICB9CgogIC8qKgogICAqIEhlbHBlciBtZXRob2QgdG8gY3JlYXRlIGNvbXBvbmVudCB3aXRob3V0IHJlbHlpbmcgb24gdGhlIHJlZ2lzdGVyZWQgb25lcwogICAqIEBwYXJhbSAgIHtPYmplY3R9IGltcGxlbWVudGF0aW9uIC0gY29tcG9uZW50IGltcGxlbWVudGF0aW9uCiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBmdW5jdGlvbiB0aGF0IHdpbGwgYWxsb3cgeW91IHRvIG1vdW50IGEgcmlvdCBjb21wb25lbnQgb24gYSBET00gbm9kZQogICAqLwogIGZ1bmN0aW9uIGNvbXBvbmVudChpbXBsZW1lbnRhdGlvbikgewogICAgcmV0dXJuIChlbCwgcHJvcHMsIHsgc2xvdHMsIGF0dHJpYnV0ZXMsIHBhcmVudFNjb3BlIH0gPSB7fSkgPT4KICAgICAgY29tcG9zZSgKICAgICAgICAoYykgPT4gYy5tb3VudChlbCwgcGFyZW50U2NvcGUpLAogICAgICAgIChjKSA9PiBjKHsgcHJvcHMsIHNsb3RzLCBhdHRyaWJ1dGVzIH0pLAogICAgICAgIGNyZWF0ZUNvbXBvbmVudEZyb21XcmFwcGVyLAogICAgICApKGltcGxlbWVudGF0aW9uKQogIH0KCiAgLyoqCiAgICogTGlmdCBhIHJpb3QgY29tcG9uZW50IEludGVyZmFjZSBpbnRvIGEgcHVyZSByaW90IG9iamVjdAogICAqIEBwYXJhbSAgIHtGdW5jdGlvbn0gZnVuYyAtIFJpb3RQdXJlQ29tcG9uZW50IGZhY3RvcnkgZnVuY3Rpb24KICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IHRoZSBsaWZ0ZWQgb3JpZ2luYWwgZnVuY3Rpb24gcmVjZWl2ZWQgYXMgYXJndW1lbnQKICAgKi8KICBmdW5jdGlvbiBwdXJlKGZ1bmMpIHsKICAgIGlmICghaXNGdW5jdGlvbihmdW5jKSkKICAgICAgcGFuaWMoJ3Jpb3QucHVyZSBhY2NlcHRzIG9ubHkgYXJndW1lbnRzIG9mIHR5cGUgImZ1bmN0aW9uIicpOwogICAgZnVuY1tJU19QVVJFX1NZTUJPTF0gPSB0cnVlOwogICAgcmV0dXJuIGZ1bmMKICB9CgogIC8qKgogICAqIG5vLW9wIGZ1bmN0aW9uIG5lZWRlZCB0byBhZGQgdGhlIHByb3BlciB0eXBlcyB0byB5b3VyIGNvbXBvbmVudCB2aWEgdHlwZXNjcmlwdAogICAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fSBjb21wb25lbnQgLSBjb21wb25lbnQgZGVmYXVsdCBleHBvcnQKICAgKiBAcmV0dXJucyB7RnVuY3Rpb258T2JqZWN0fSByZXR1cm5zIGV4YWN0bHkgd2hhdCBpdCBoYXMgcmVjZWl2ZWQKICAgKi8KICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLwogIGNvbnN0IHdpdGhUeXBlcyA9IChjb21wb25lbnQpID0+IGNvbXBvbmVudDsKCiAgLyoqIEB0eXBlIHtzdHJpbmd9IGN1cnJlbnQgcmlvdCB2ZXJzaW9uICovCiAgY29uc3QgdmVyc2lvbiA9ICd2OS4xLjgnOwoKICAvLyBleHBvc2Ugc29tZSBpbnRlcm5hbCBzdHVmZiB0aGF0IG1pZ2h0IGJlIHVzZWQgZnJvbSBleHRlcm5hbCB0b29scwogIGNvbnN0IF9fID0gewogICAgY3NzTWFuYWdlciwKICAgIERPTUJpbmRpbmdzOiB7CiAgICAgIHRlbXBsYXRlOiBjcmVhdGUsCiAgICAgIGNyZWF0ZUJpbmRpbmc6IGNyZWF0ZSQxLAogICAgICBjcmVhdGVFeHByZXNzaW9uOiBjcmVhdGUkNCwKICAgICAgYmluZGluZ1R5cGVzLAogICAgICBleHByZXNzaW9uVHlwZXMsCiAgICB9LAogICAgZ2xvYmFsczogewogICAgICBQUk9QU19LRVksCiAgICAgIFNUQVRFX0tFWSwKICAgICAgSVNfQ09NUE9ORU5UX1VQREFUSU5HLAogICAgICBBVFRSSUJVVEVTX0tFWV9TWU1CT0wsCiAgICAgIENPTVBPTkVOVFNfSU1QTEVNRU5UQVRJT05fTUFQLAogICAgICBQTFVHSU5TX1NFVCwKICAgICAgRE9NX0NPTVBPTkVOVF9JTlNUQU5DRV9QUk9QRVJUWSwKICAgICAgUEFSRU5UX0tFWV9TWU1CT0wsCiAgICB9LAogIH07CgogIGV4cG9ydHMuX18gPSBfXzsKICBleHBvcnRzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKICBleHBvcnRzLmluc3RhbGwgPSBpbnN0YWxsOwogIGV4cG9ydHMubW91bnQgPSBtb3VudDsKICBleHBvcnRzLnB1cmUgPSBwdXJlOwogIGV4cG9ydHMucmVnaXN0ZXIgPSByZWdpc3RlcjsKICBleHBvcnRzLnVuaW5zdGFsbCA9IHVuaW5zdGFsbDsKICBleHBvcnRzLnVubW91bnQgPSB1bm1vdW50OwogIGV4cG9ydHMudW5yZWdpc3RlciA9IHVucmVnaXN0ZXI7CiAgZXhwb3J0cy52ZXJzaW9uID0gdmVyc2lvbjsKICBleHBvcnRzLndpdGhUeXBlcyA9IHdpdGhUeXBlczsKCn0pKTsK]]></data>
	</file>
	<file>
	  <filename>/js/riot.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[dmFyIHQsZTt0PXRoaXMsZT1mdW5jdGlvbih0KXsidXNlIHN0cmljdCI7Y29uc3QgZT0wLG49MSxyPTIsbz0zLHM9NCxpPXtFQUNIOjAsSUY6MSxTSU1QTEU6MixUQUc6MyxTTE9UOjR9O2Z1bmN0aW9uIHUodCxlKXtyZXR1cm4gdHlwZW9mIHQ9PT1lfWZ1bmN0aW9uIGEodCl7Y29uc3QgZT10Lm93bmVyU1ZHRWxlbWVudDtyZXR1cm4hIWV8fG51bGw9PT1lfWZ1bmN0aW9uIGModCl7cmV0dXJuInRlbXBsYXRlIj09PXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIHUodCwiZnVuY3Rpb24iKX1mdW5jdGlvbiBoKHQpe3JldHVybiFkKHQpJiZ0LmNvbnN0cnVjdG9yPT09T2JqZWN0fWZ1bmN0aW9uIGQodCl7cmV0dXJuIG51bGw9PXR9Y29uc3QgbT1uZXcgTWFwLHA9U3ltYm9sKCksZj1uZXcgU2V0LGI9ImlzIixnPSJtb3VudCIseT0idXBkYXRlIix2PSJ1bm1vdW50IixOPSJzaG91bGRVcGRhdGUiLE89Im9uQmVmb3JlTW91bnQiLEU9Im9uTW91bnRlZCIsVD0ib25CZWZvcmVVcGRhdGUiLHg9Im9uVXBkYXRlZCIsTT0ib25CZWZvcmVVbm1vdW50IixBPSJvblVubW91bnRlZCIsUz0icHJvcHMiLGo9InN0YXRlIix3PSJzbG90cyIsQz0icm9vdCIsST1TeW1ib2woKSxQPVN5bWJvbCgpLEQ9U3ltYm9sKCksXz1TeW1ib2woKSxMPVN5bWJvbCgpO2Z1bmN0aW9uIGsodCl7cmV0dXJuIHQucmVwbGFjZSgvLShcdykvZywoKHQsZSk9PmUudG9VcHBlckNhc2UoKSkpfWZ1bmN0aW9uIEIodCl7cmV0dXJuIEFycmF5LmZyb20odC5hdHRyaWJ1dGVzKS5yZWR1Y2UoKCh0LGUpPT4odFtrKGUubmFtZSldPWUudmFsdWUsdCkpLHt9KX1mdW5jdGlvbiBVKHQpe2Zvcig7dC5maXJzdENoaWxkOyl0LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCl9Y29uc3QgWT10PT50LnJlbW92ZSgpLEs9KHQsZSk9PmUmJmUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LGUpLFI9MCwkPTEsej0yLEc9MyxIPXtBVFRSSUJVVEU6UixFVkVOVDoxLFRFWFQ6eixWQUxVRTpHfTtmdW5jdGlvbiBGKCl7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gVih0KXtyZXR1cm4gbCh0KT90LnByb3RvdHlwZSYmdC5wcm90b3R5cGUuY29uc3RydWN0b3I/bmV3IHQ6dCgpOnR9ZnVuY3Rpb24gcSh0KXtjb25zdCBlPW5ldyBNYXAsbj1uPT4oZS5oYXMobil8fGUuc2V0KG4sdC5jYWxsKHRoaXMsbikpKSYmZS5nZXQobik7cmV0dXJuIG4uY2FjaGU9ZSxufWZ1bmN0aW9uIFcodCl7cmV0dXJuIHQucmVkdWNlKCgodCxlKT0+e2NvbnN0e3ZhbHVlOm4sdHlwZTpyfT1lO3N3aXRjaCghMCl7Y2FzZSFlLm5hbWUmJnI9PT1SOnJldHVybnsuLi50LC4uLm59O2Nhc2Ugcj09PUc6dC52YWx1ZT1lLnZhbHVlO2JyZWFrO2RlZmF1bHQ6dFtrKGUubmFtZSldPWUudmFsdWV9cmV0dXJuIHR9KSx7fSl9ZnVuY3Rpb24gWCh0LGUsbixyPXt9KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6bixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCwuLi5yfSksdH1mdW5jdGlvbiBaKHQsZSxuKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZm9yRWFjaCgoKFtlLHJdKT0+e1godCxlLHIsbil9KSksdH1mdW5jdGlvbiBKKHQsZSl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZvckVhY2goKChbZSxuXSk9Pnt0W2VdfHwodFtlXT1uKX0pKSx0fWNvbnN0IFE9e1tnXSh0KXt0aGlzLmVsPXR9LFt5XTpGLFt2XSh0LGUsbj0hMSl7bj9ZKHRoaXMuZWwpOm58fFUodGhpcy5lbCl9LGNsb25lOkYsY3JlYXRlRE9NOkZ9LHR0PVN5bWJvbCgpLGV0PVN5bWJvbCgpLG50PVN5bWJvbCgpLHJ0PXtub2RlczpbXSxtb3VudCh0LGUpe3JldHVybiB0aGlzLnVwZGF0ZSh0LGUpfSx1cGRhdGUodCxlKXtjb25zdHtwbGFjZWhvbGRlcjpuLG5vZGVzOnIsY2hpbGRyZW5NYXA6b309dGhpcyxzPXQ9PT1udD9udWxsOnRoaXMuZXZhbHVhdGUodCksaT1zP0FycmF5LmZyb20ocyk6W10se25ld0NoaWxkcmVuTWFwOnUsYmF0Y2hlczphLGZ1dHVyZU5vZGVzOmN9PWZ1bmN0aW9uKHQsZSxuLHIpe2NvbnN0e2NvbmRpdGlvbjpvLHRlbXBsYXRlOnMsY2hpbGRyZW5NYXA6aSxpdGVtTmFtZTp1LGdldEtleTphLGluZGV4TmFtZTpjLHJvb3Q6bCxpc1RlbXBsYXRlVGFnOmh9PXIsZD1uZXcgTWFwLG09W10scD1bXTtyZXR1cm4gdC5mb3JFYWNoKCgodCxyKT0+e2NvbnN0IGY9ZnVuY3Rpb24odCx7aXRlbU5hbWU6ZSxpbmRleE5hbWU6bixpbmRleDpyLGl0ZW06b30pe3JldHVybiBYKHQsZSxvKSxuJiZYKHQsbixyKSx0fShPYmplY3QuY3JlYXRlKGUpLHtpdGVtTmFtZTp1LGluZGV4TmFtZTpjLGluZGV4OnIsaXRlbTp0fSksYj1hP2EoZik6cixnPWkuZ2V0KGIpLHk9W107aWYoZnVuY3Rpb24odCxlKXtyZXR1cm4hIXQmJiF0KGUpfShvLGYpKXJldHVybjtjb25zdCB2PSFnLE49Zz9nLnRlbXBsYXRlOnMuY2xvbmUoKSxPPU4uZWx8fGwuY2xvbmVOb2RlKCksRT1oJiZ2P2Z1bmN0aW9uKHQpe2NvbnN0IGU9dC5kb20uY2xvbmVOb2RlKCEwKSx7aGVhZDpuLHRhaWw6cn09ZnVuY3Rpb24oKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSxlPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTtyZXR1cm4gdFt0dF09ITAsZVtldF09ITAse2hlYWQ6dCx0YWlsOmV9fSgpO3JldHVybnthdm9pZERPTUluamVjdGlvbjohMCxmcmFnbWVudDplLGhlYWQ6bix0YWlsOnIsY2hpbGRyZW46W24sLi4uQXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLHJdfX0oTik6Ti5tZXRhO3Y/bS5wdXNoKCgoKT0+Ti5tb3VudChPLGYsbixFKSkpOm0ucHVzaCgoKCk9Pk4udXBkYXRlKGYsbikpKSxoP3kucHVzaCguLi5FLmNoaWxkcmVuKTp5LnB1c2goTyksaS5kZWxldGUoYikscC5wdXNoKC4uLnkpLGQuc2V0KGIse25vZGVzOnksdGVtcGxhdGU6Tixjb250ZXh0OmYsaW5kZXg6cn0pfSkpLHtuZXdDaGlsZHJlbk1hcDpkLGJhdGNoZXM6bSxmdXR1cmVOb2RlczpwfX0oaSx0LGUsdGhpcyk7cmV0dXJuKCh0LGUsbixyKT0+e2NvbnN0IG89ZS5sZW5ndGg7bGV0IHM9dC5sZW5ndGgsaT1vLHU9MCxhPTAsYz1udWxsO2Zvcig7dTxzfHxhPGk7KWlmKHM9PT11KXtjb25zdCB0PWk8bz9hP24oZVthLTFdLC0wKS5uZXh0U2libGluZzpuKGVbaS1hXSwwKTpyO2Zvcig7YTxpOylLKG4oZVthKytdLDEpLHQpfWVsc2UgaWYoaT09PWEpZm9yKDt1PHM7KWMmJmMuaGFzKHRbdV0pfHxZKG4odFt1XSwtMSkpLHUrKztlbHNlIGlmKHRbdV09PT1lW2FdKXUrKyxhKys7ZWxzZSBpZih0W3MtMV09PT1lW2ktMV0pcy0tLGktLTtlbHNlIGlmKHRbdV09PT1lW2ktMV0mJmVbYV09PT10W3MtMV0pe2NvbnN0IHI9bih0Wy0tc10sLTEpLm5leHRTaWJsaW5nO0sobihlW2ErK10sMSksbih0W3UrK10sLTEpLm5leHRTaWJsaW5nKSxLKG4oZVstLWldLDEpLHIpLHRbc109ZVtpXX1lbHNle2lmKCFjKXtjPW5ldyBNYXA7bGV0IHQ9YTtmb3IoO3Q8aTspYy5zZXQoZVt0XSx0KyspfWlmKGMuaGFzKHRbdV0pKXtjb25zdCByPWMuZ2V0KHRbdV0pO2lmKGE8ciYmcjxpKXtsZXQgbz11LGQ9MTtmb3IoOysrbzxzJiZvPGkmJmMuZ2V0KHRbb10pPT09citkOylkKys7aWYoZD5yLWEpe2NvbnN0IG89bih0W3VdLDApO2Zvcig7YTxyOylLKG4oZVthKytdLDEpLG8pfWVsc2UgbD1uKGVbYSsrXSwxKSwoaD1uKHRbdSsrXSwtMSkpJiZoLnBhcmVudE5vZGUmJmgucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobCxoKX1lbHNlIHUrK31lbHNlIFkobih0W3UrK10sLTEpKX12YXIgbCxofSkocixjLGZ1bmN0aW9uKHQsZSl7cmV0dXJuKG4scik9PntpZihyPDApe2NvbnN0IG49dFt0Lmxlbmd0aC0xXTtpZihuKXtjb25zdHt0ZW1wbGF0ZTpyLG5vZGVzOm8sY29udGV4dDpzfT1uO28ucG9wKCksby5sZW5ndGh8fCh0LnBvcCgpLHIudW5tb3VudChzLGUsbnVsbCkpfX1yZXR1cm4gbn19KEFycmF5LmZyb20oby52YWx1ZXMoKSksZSksbiksYS5mb3JFYWNoKCh0PT50KCkpKSx0aGlzLmNoaWxkcmVuTWFwPXUsdGhpcy5ub2Rlcz1jLHRoaXN9LHVubW91bnQodCxlKXtyZXR1cm4gdGhpcy51cGRhdGUobnQsZSksdGhpc319LG90PXttb3VudCh0LGUpe3JldHVybiB0aGlzLnVwZGF0ZSh0LGUpfSx1cGRhdGUodCxlKXtjb25zdCBuPSEhdGhpcy5ldmFsdWF0ZSh0KSxyPSF0aGlzLnZhbHVlJiZuLG89dGhpcy52YWx1ZSYmIW4scz0oKT0+e2NvbnN0IG49dGhpcy5ub2RlLmNsb25lTm9kZSgpO0sobix0aGlzLnBsYWNlaG9sZGVyKSx0aGlzLnRlbXBsYXRlPXRoaXMudGVtcGxhdGUuY2xvbmUoKSx0aGlzLnRlbXBsYXRlLm1vdW50KG4sdCxlKX07c3dpdGNoKCEwKXtjYXNlIHI6cygpO2JyZWFrO2Nhc2Ugbzp0aGlzLnVubW91bnQodCk7YnJlYWs7ZGVmYXVsdDpuJiZ0aGlzLnRlbXBsYXRlLnVwZGF0ZSh0LGUpfXJldHVybiB0aGlzLnZhbHVlPW4sdGhpc30sdW5tb3VudCh0LGUpe3JldHVybiB0aGlzLnRlbXBsYXRlLnVubW91bnQodCxlLCEwKSx0aGlzfX0sc3Q9InVuZGVmaW5lZCI9PXR5cGVvZiBFbGVtZW50P3t9OkVsZW1lbnQucHJvdG90eXBlLGl0PXEoKHQ9PnN0Lmhhc093blByb3BlcnR5KHQpKSksdXQ9L15vbi8sYXQ9e2hhbmRsZUV2ZW50KHQpe3RoaXNbdC50eXBlXSh0KX19LGN0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGx0KHQpe3JldHVybiBkKHQpPyIiOnR9Y29uc3QgaHQ9KHQsZSk9PnQuY2hpbGROb2Rlc1tlXSxkdD17W1JdOmZ1bmN0aW9uIHQoZSx7bmFtZTpuLGlzQm9vbGVhbjpyfSxvLHMpe2lmKCFuKXJldHVybiBzJiZmdW5jdGlvbih0LGUsbil7Y29uc3Qgcj1lP09iamVjdC5rZXlzKGUpOltdO09iamVjdC5rZXlzKG4pLmZpbHRlcigodD0+IXIuaW5jbHVkZXModCkpKS5mb3JFYWNoKChlPT50LnJlbW92ZUF0dHJpYnV0ZShlKSkpfShlLG8scyksdm9pZChvJiZmdW5jdGlvbihlLG4pe09iamVjdC5rZXlzKG4pLmZvckVhY2goKHI9PnQoZSx7bmFtZTpyfSxuW3JdKSkpfShlLG8pKTshaXQobikmJihmdW5jdGlvbih0KXtyZXR1cm4gdSh0LCJib29sZWFuIil9KG8pfHxoKG8pfHxsKG8pKSYmKGVbbl09byksZnVuY3Rpb24odCxlKXtyZXR1cm4gZT8hdCYmMCE9PXQ6bnVsbD09dH0obyxyKT9lLnJlbW92ZUF0dHJpYnV0ZShuKTpmdW5jdGlvbih0KXtyZXR1cm5bInN0cmluZyIsIm51bWJlciIsImJvb2xlYW4iXS5pbmNsdWRlcyh0eXBlb2YgdCl9KG8pJiZlLnNldEF0dHJpYnV0ZShuLGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4hMD09PWUmJm4/dDplfShuLG8scikpfSxbJF06ZnVuY3Rpb24odCx7bmFtZTplfSxuKXtjb25zdCByPWUucmVwbGFjZSh1dCwiIiksbz1jdC5nZXQodCl8fCh0PT57Y29uc3QgZT1PYmplY3QuY3JlYXRlKGF0KTtyZXR1cm4gY3Quc2V0KHQsZSksZX0pKHQpLFtzLGldPSh0PT5BcnJheS5pc0FycmF5KHQpP3Q6W3QsITFdKShuKSx1PW9bcl0sYT1zJiYhdTt1JiYhcyYmdC5yZW1vdmVFdmVudExpc3RlbmVyKHIsbyksYSYmdC5hZGRFdmVudExpc3RlbmVyKHIsbyxpKSxvW3JdPXN9LFt6XTpmdW5jdGlvbih0LGUsbil7dC5kYXRhPWx0KG4pfSxbR106ZnVuY3Rpb24odCxlLG4pe3QudmFsdWU9bHQobil9fSxtdD17bW91bnQodCl7cmV0dXJuIHRoaXMudmFsdWU9dGhpcy5ldmFsdWF0ZSh0KSxwdCh0aGlzLHRoaXMudmFsdWUpLHRoaXN9LHVwZGF0ZSh0KXtjb25zdCBlPXRoaXMuZXZhbHVhdGUodCk7cmV0dXJuIHRoaXMudmFsdWUhPT1lJiYocHQodGhpcyxlKSx0aGlzLnZhbHVlPWUpLHRoaXN9LHVubW91bnQoKXtyZXR1cm4gMT09PXRoaXMudHlwZSYmcHQodGhpcyxudWxsKSx0aGlzfX07ZnVuY3Rpb24gcHQodCxlKXtyZXR1cm4gZHRbdC50eXBlXSh0Lm5vZGUsdCxlLHQudmFsdWUpfWZ1bmN0aW9uIGZ0KHQsZSl7cmV0dXJuey4uLm10LC4uLmUsbm9kZTplLnR5cGU9PT16P2h0KHQsZS5jaGlsZE5vZGVJbmRleCk6dH19Y29uc3QgYnQ9KHQsZSk9PnRbRF18fGUsZ3Q9e2F0dHJpYnV0ZXM6W10sZ2V0VGVtcGxhdGVTY29wZSh0LGUpe3JldHVybiBmdW5jdGlvbih0LGUsbil7aWYoIXR8fCF0Lmxlbmd0aClyZXR1cm4gbjtjb25zdCByPXQubWFwKCh0PT4oey4uLnQsdmFsdWU6dC5ldmFsdWF0ZShlKX0pKSk7cmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShufHxudWxsKSxXKHIpKX0odGhpcy5hdHRyaWJ1dGVzLHQsZSl9LG1vdW50KHQsZSl7Y29uc3Qgbj0hIXQuc2xvdHMmJnQuc2xvdHMuZmluZCgoKHtpZDp0fSk9PnQ9PT10aGlzLm5hbWUpKSx7cGFyZW50Tm9kZTpyfT10aGlzLm5vZGUsbz1idCh0LGUpO3JldHVybiB0aGlzLnRlbXBsYXRlPW4mJk10KG4uaHRtbCxuLmJpbmRpbmdzKS5jcmVhdGVET00ociksdGhpcy50ZW1wbGF0ZSYmKFUodGhpcy5ub2RlKSx0aGlzLnRlbXBsYXRlLm1vdW50KHRoaXMubm9kZSx0aGlzLmdldFRlbXBsYXRlU2NvcGUodCxvKSxvKSx0aGlzLnRlbXBsYXRlLmNoaWxkcmVuPUFycmF5LmZyb20odGhpcy5ub2RlLmNoaWxkTm9kZXMpKSx5dCh0aGlzLm5vZGUpLFkodGhpcy5ub2RlKSx0aGlzfSx1cGRhdGUodCxlKXtpZih0aGlzLnRlbXBsYXRlKXtjb25zdCBuPWJ0KHQsZSk7dGhpcy50ZW1wbGF0ZS51cGRhdGUodGhpcy5nZXRUZW1wbGF0ZVNjb3BlKHQsbiksbil9cmV0dXJuIHRoaXN9LHVubW91bnQodCxlLG4pe3JldHVybiB0aGlzLnRlbXBsYXRlJiZ0aGlzLnRlbXBsYXRlLnVubW91bnQodGhpcy5nZXRUZW1wbGF0ZVNjb3BlKHQsZSksbnVsbCxuKSx0aGlzfX07ZnVuY3Rpb24geXQodCl7Y29uc3QgZT10JiZ0LmZpcnN0Q2hpbGQ7ZSYmKEsoZSx0KSx5dCh0KSl9ZnVuY3Rpb24gdnQodCl7cmV0dXJuIHQucmVkdWNlKCgodCx7YmluZGluZ3M6ZX0pPT50LmNvbmNhdChlKSksW10pfWNvbnN0IE50PXttb3VudCh0KXtyZXR1cm4gdGhpcy51cGRhdGUodCl9LHVwZGF0ZSh0LGUpe2NvbnN0IG49dGhpcy5ldmFsdWF0ZSh0KTtyZXR1cm4gbiYmbj09PXRoaXMubmFtZT90aGlzLnRhZy51cGRhdGUodCk6KHRoaXMudW5tb3VudCh0LGUsITApLHRoaXMubmFtZT1uLHRoaXMudGFnPWZ1bmN0aW9uKHQsZT1bXSxuPVtdKXtyZXR1cm4gdD90KHtzbG90czplLGF0dHJpYnV0ZXM6bn0pOk10KGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZSgoKHQsZSk9PnQrZS5odG1sKSwiIil9KGUpLFsuLi52dChlKSx7ZXhwcmVzc2lvbnM6bi5tYXAoKHQ9Pih7dHlwZTpSLC4uLnR9KSkpfV0pfSh0aGlzLmdldENvbXBvbmVudChuKSx0aGlzLnNsb3RzLHRoaXMuYXR0cmlidXRlcyksdGhpcy50YWcubW91bnQodGhpcy5ub2RlLHQpKSx0aGlzfSx1bm1vdW50KHQsZSxuKXtyZXR1cm4gdGhpcy50YWcmJnRoaXMudGFnLnVubW91bnQobiksdGhpc319LE90PXtbbl06ZnVuY3Rpb24odCx7ZXZhbHVhdGU6ZSx0ZW1wbGF0ZTpufSl7Y29uc3Qgcj1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7cmV0dXJuIEsocix0KSxZKHQpLHsuLi5vdCxub2RlOnQsZXZhbHVhdGU6ZSxwbGFjZWhvbGRlcjpyLHRlbXBsYXRlOm4uY3JlYXRlRE9NKHQpfX0sW3JdOmZ1bmN0aW9uKHQse2V4cHJlc3Npb25zOmV9KXtyZXR1cm4gbj1lLm1hcCgoZT0+ZnQodCxlKSkpLFsibW91bnQiLCJ1cGRhdGUiLCJ1bm1vdW50Il0ucmVkdWNlKCgodCxlKT0+KHsuLi50LFtlXTp0PT5uLm1hcCgobj0+bltlXSh0KSkpJiZ2b2lkIDB9KSkse30pO3ZhciBufSxbZV06ZnVuY3Rpb24odCx7ZXZhbHVhdGU6ZSxjb25kaXRpb246bixpdGVtTmFtZTpyLGluZGV4TmFtZTpvLGdldEtleTpzLHRlbXBsYXRlOml9KXtjb25zdCB1PWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSxhPXQuY2xvbmVOb2RlKCk7cmV0dXJuIEsodSx0KSxZKHQpLHsuLi5ydCxjaGlsZHJlbk1hcDpuZXcgTWFwLG5vZGU6dCxyb290OmEsY29uZGl0aW9uOm4sZXZhbHVhdGU6ZSxpc1RlbXBsYXRlVGFnOmMoYSksdGVtcGxhdGU6aS5jcmVhdGVET00odCksZ2V0S2V5OnMsaW5kZXhOYW1lOm8saXRlbU5hbWU6cixwbGFjZWhvbGRlcjp1fX0sW29dOmZ1bmN0aW9uKHQse2V2YWx1YXRlOmUsZ2V0Q29tcG9uZW50Om4sc2xvdHM6cixhdHRyaWJ1dGVzOm99KXtyZXR1cm57Li4uTnQsbm9kZTp0LGV2YWx1YXRlOmUsc2xvdHM6cixhdHRyaWJ1dGVzOm8sZ2V0Q29tcG9uZW50Om59fSxbc106ZnVuY3Rpb24odCx7bmFtZTplLGF0dHJpYnV0ZXM6bn0pe3JldHVybnsuLi5ndCxhdHRyaWJ1dGVzOm4sbm9kZTp0LG5hbWU6ZX19fTtmdW5jdGlvbiBFdCh0LGUpe3JldHVybiB0Lm1hcCgodD0+dC50eXBlPT09ej97Li4udCxjaGlsZE5vZGVJbmRleDp0LmNoaWxkTm9kZUluZGV4K2V9OnQpKX1mdW5jdGlvbiBUdCh0LGUsbil7Y29uc3R7c2VsZWN0b3I6cix0eXBlOm8scmVkdW5kYW50QXR0cmlidXRlOnMsZXhwcmVzc2lvbnM6aX09ZSx1PXI/dC5xdWVyeVNlbGVjdG9yKHIpOnQ7cyYmdS5yZW1vdmVBdHRyaWJ1dGUocyk7Y29uc3QgYT1pfHxbXTtyZXR1cm4oT3Rbb118fE90WzJdKSh1LHsuLi5lLGV4cHJlc3Npb25zOm4mJiFyP0V0KGEsbik6YX0pfWNvbnN0IHh0PXtjcmVhdGVET00odCl7cmV0dXJuIHRoaXMuZG9tPXRoaXMuZG9tfHxmdW5jdGlvbih0LGUpe3JldHVybiBlJiYoInN0cmluZyI9PXR5cGVvZiBlP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGEodCk/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5vd25lckRvY3VtZW50LmltcG9ydE5vZGUoKG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoYDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4ke3R9PC9zdmc+YCwiYXBwbGljYXRpb24veG1sIikuZG9jdW1lbnRFbGVtZW50LCEwKX0oZSx0KTpmdW5jdGlvbih0LGUpe2NvbnN0IG49YyhlKT9lOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIG4uaW5uZXJIVE1MPXQsbi5jb250ZW50fShlLHQpfSh0LGUpOmUpfSh0LHRoaXMuaHRtbCl8fGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSx0aGlzfSxtb3VudCh0LGUsbixyPXt9KXt0aGlzLmVsJiZ0aGlzLnVubW91bnQoZSk7Y29uc3R7ZnJhZ21lbnQ6byxjaGlsZHJlbjpzLGF2b2lkRE9NSW5qZWN0aW9uOml9PXIse3BhcmVudE5vZGU6dX09cz9zWzBdOnQsbD1jKHQpLGg9bD9mdW5jdGlvbih0LGUsbil7Y29uc3Qgcj1BcnJheS5mcm9tKHQuY2hpbGROb2Rlcyk7cmV0dXJuIE1hdGgubWF4KHIuaW5kZXhPZihlKSxyLmluZGV4T2Yobi5oZWFkKSsxLDApfSh1LHQscik6bnVsbDt0aGlzLmNyZWF0ZURPTSh0KTtjb25zdCBkPW98fHRoaXMuZG9tLmNsb25lTm9kZSghMCk7cmV0dXJuIHRoaXMuZWw9bD91OnQsdGhpcy5jaGlsZHJlbj1sP3N8fEFycmF5LmZyb20oZC5jaGlsZE5vZGVzKTpudWxsLCFpJiZkJiZmdW5jdGlvbih0LGUpe3N3aXRjaCghMCl7Y2FzZSBhKHQpOiFmdW5jdGlvbih0LGUpe2Zvcig7dC5maXJzdENoaWxkOyllLmFwcGVuZENoaWxkKHQuZmlyc3RDaGlsZCl9KGUsdCk7YnJlYWs7Y2FzZSBjKHQpOnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZSx0KTticmVhaztkZWZhdWx0OnQuYXBwZW5kQ2hpbGQoZSl9fSh0LGQpLHRoaXMuYmluZGluZ3M9dGhpcy5iaW5kaW5nc0RhdGEubWFwKCh0PT5UdCh0aGlzLmVsLHQsaCkpKSx0aGlzLmJpbmRpbmdzLmZvckVhY2goKHQ9PnQubW91bnQoZSxuKSkpLHRoaXMubWV0YT1yLHRoaXN9LHVwZGF0ZSh0LGUpe3JldHVybiB0aGlzLmJpbmRpbmdzLmZvckVhY2goKG49Pm4udXBkYXRlKHQsZSkpKSx0aGlzfSx1bm1vdW50KHQsZSxuPSExKXtjb25zdCByPXRoaXMuZWw7aWYoIXIpcmV0dXJuIHRoaXM7c3dpdGNoKHRoaXMuYmluZGluZ3MuZm9yRWFjaCgocj0+ci51bm1vdW50KHQsZSxuKSkpLCEwKXtjYXNlIHJbSV18fG51bGw9PT1uOmJyZWFrO2Nhc2UgQXJyYXkuaXNBcnJheSh0aGlzLmNoaWxkcmVuKTohZnVuY3Rpb24odCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspWSh0W2VdKX0odGhpcy5jaGlsZHJlbik7YnJlYWs7Y2FzZSFuOlUocik7YnJlYWs7Y2FzZSEhbjpZKHIpfXJldHVybiB0aGlzLmVsPW51bGwsdGhpc30sY2xvbmUoKXtyZXR1cm57Li4udGhpcyxtZXRhOnt9LGVsOm51bGx9fX07ZnVuY3Rpb24gTXQodCxlPVtdKXtyZXR1cm57Li4ueHQsaHRtbDp0LGJpbmRpbmdzRGF0YTplfX1jb25zdCBBdD1PYmplY3QuZnJlZXplKHtbZ106RixbeV06Rixbdl06Rn0pLFN0PSh0LGUpPT50W3BdPWU7ZnVuY3Rpb24ganQodCl7cmV0dXJuW2cseSx2XS5yZWR1Y2UoKChlLG4pPT4oZVtuXT10KG4pLGUpKSx7fSl9ZnVuY3Rpb24gd3QodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dDovXlxbb2JqZWN0IChIVE1MQ29sbGVjdGlvbnxOb2RlTGlzdHxPYmplY3QpXF0kLy50ZXN0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSkmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGg/QXJyYXkuZnJvbSh0KTpbdF19ZnVuY3Rpb24gQ3QodCxlKXtyZXR1cm4gd3QoInN0cmluZyI9PXR5cGVvZiB0PyhlfHxkb2N1bWVudCkucXVlcnlTZWxlY3RvckFsbCh0KTp0KX1jb25zdCBJdD1PYmplY3QuZnJlZXplKHskKHQpe3JldHVybiBDdCh0LHRoaXMucm9vdClbMF19LCQkKHQpe3JldHVybiBDdCh0LHRoaXMucm9vdCl9fSksUHQ9T2JqZWN0LmZyZWV6ZSh7W05dOkYsW09dOkYsW0VdOkYsW1RdOkYsW3hdOkYsW01dOkYsW0FdOkZ9KSxEdD10PT4xPT09dC5sZW5ndGg/dFswXTp0O2Z1bmN0aW9uIF90KHQsZSxuKXtjb25zdCByPSJvYmplY3QiPT10eXBlb2YgZT9lOntbZV06bn0sbz1PYmplY3Qua2V5cyhyKTtyZXR1cm4gd3QodCkuZm9yRWFjaCgodD0+e28uZm9yRWFjaCgoZT0+dC5zZXRBdHRyaWJ1dGUoZSxyW2VdKSkpfSkpLHR9Y29uc3QgTHQ9bmV3IE1hcDt2YXIga3Q7Y29uc3QgQnQ9e0NTU19CWV9OQU1FOkx0LGFkZCh0LGUpe3JldHVybiBMdC5oYXModCl8fChMdC5zZXQodCxlKSx0aGlzLmluamVjdCgpKSx0aGlzfSxpbmplY3QoKXtyZXR1cm4oa3R8fChfdChrdD1DdCgic3R5bGVbcmlvdF0iKVswXXx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSwidHlwZSIsInRleHQvY3NzIiksa3QucGFyZW50Tm9kZXx8ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChrdCksa3QpKS5pbm5lckhUTUw9Wy4uLkx0LnZhbHVlcygpXS5qb2luKCJcbiIpLHRoaXN9LHJlbW92ZSh0KXtyZXR1cm4gTHQuaGFzKHQpJiYoTHQuZGVsZXRlKHQpLHRoaXMuaW5qZWN0KCkpLHRoaXN9fTtmdW5jdGlvbiBVdCh0LC4uLmUpe3JldHVybiguLi5uKT0+KG49Wy4uLmUsLi4ubl0pLmxlbmd0aDx0Lmxlbmd0aD9VdCh0LC4uLm4pOnQoLi4ubil9ZnVuY3Rpb24gWXQodCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtjb25zdCByPSJzdHJpbmciPT10eXBlb2YgZT9bZV06ZTtyZXR1cm4gRHQod3QodCkubWFwKCh0PT5EdChyLm1hcCgoZT0+dC5nZXRBdHRyaWJ1dGUoZSkpKSkpKSl9KHQsYil8fHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIEt0KHQsZSl7cmV0dXJuey4uLnQsLi4uVihlKX19ZnVuY3Rpb24gUnQodCxlPXt9KXtyZXR1cm57Li4uQih0KSwuLi5WKGUpfX1jb25zdCAkdD1xKCh0PT57Y29uc3QgZT10Py5iaW5kaW5nc0RhdGE/LlswXTtyZXR1cm4gZT8uc2VsZWN0b3I/W106ZT8uZXhwcmVzc2lvbnM/LnJlZHVjZSgoKHQse25hbWU6ZSx0eXBlOm59KT0+bj09PUguQVRUUklCVVRFP3QuY29uY2F0KFtlXSk6dCksW10pPz9bXX0pKTtmdW5jdGlvbiB6dCh0LHtzbG90czplLGF0dHJpYnV0ZXM6bixwcm9wczpyfSl7cmV0dXJuIG89ZnVuY3Rpb24odCl7cmV0dXJuWy4uLmZdLnJlZHVjZSgoKHQsZSk9PmUodCl8fHQpLHQpfShaKGgodCk/T2JqZWN0LmNyZWF0ZSh0KTp0LHttb3VudChvLHM9e30saSl7cmV0dXJuIFgobyxJLCExKSx0aGlzW0RdPWksdGhpc1tfXT1mdW5jdGlvbih0LGU9W10pe2NvbnN0IG49ZS5tYXAoKGU9PmZ0KHQsZSkpKSxyPXt9O3JldHVybiBPYmplY3QuYXNzaWduKHIse2V4cHJlc3Npb25zOm4sLi4uanQoKHQ9PmU9PihuLmZvckVhY2goKG49Pm5bdF0oZSkpKSxyKSkpfSl9KG8sbikubW91bnQoaSksWCh0aGlzLFMsT2JqZWN0LmZyZWV6ZSh7Li4uUnQobyxyKSwuLi5XKHRoaXNbX10uZXhwcmVzc2lvbnMpfSkpLHRoaXNbal09S3QodGhpc1tqXSxzKSx0aGlzW0xdPXRoaXMudGVtcGxhdGUuY3JlYXRlRE9NKG8pLmNsb25lKCksU3Qobyx0aGlzKSx0Lm5hbWUmJmZ1bmN0aW9uKHQsZSl7WXQodCkhPT1lJiZfdCh0LGIsZSl9KG8sdC5uYW1lKSxYKHRoaXMsQyxvKSxYKHRoaXMsdyxlKSx0aGlzW09dKHRoaXNbU10sdGhpc1tqXSksdGhpc1tMXS5tb3VudChvLHRoaXMsaSksdGhpc1tFXSh0aGlzW1NdLHRoaXNbal0pLHRoaXN9LHVwZGF0ZSh0PXt9LGUpe2UmJih0aGlzW0RdPWUsdGhpc1tfXS51cGRhdGUoZSkpO2NvbnN0IG49JHQodGhpc1tMXSkscj1CKHthdHRyaWJ1dGVzOkFycmF5LmZyb20odGhpc1tDXS5hdHRyaWJ1dGVzKS5maWx0ZXIoKCh7bmFtZTp0fSk9PiFuLmluY2x1ZGVzKHQpKSl9KSx7W2JdOm8sLi4uc309ey4uLnIsLi4uVyh0aGlzW19dLmV4cHJlc3Npb25zKX07dmFyIGksdTtpZighMSE9PXRoaXNbTl0ocyx0aGlzW1NdKSlyZXR1cm4gWCh0aGlzLFMsT2JqZWN0LmZyZWV6ZSh7Li4uZT8oaT10aGlzW1NdLHU9bixoKGkpP09iamVjdC5mcm9tRW50cmllcyh1Lm1hcCgodD0+W3QsaVt0XV0pKSk6aSk6dGhpc1tTXSwuLi5zfSkpLHRoaXNbal09S3QodGhpc1tqXSx0KSx0aGlzW1RdKHRoaXNbU10sdGhpc1tqXSksdGhpc1tQXXx8KHRoaXNbUF09ITAsdGhpc1tMXS51cGRhdGUodGhpcyx0aGlzW0RdKSksdGhpc1t4XSh0aGlzW1NdLHRoaXNbal0pLHRoaXNbUF09ITEsdGhpc30sdW5tb3VudCh0KXtyZXR1cm4gdGhpc1tNXSh0aGlzW1NdLHRoaXNbal0pLHRoaXNbX10udW5tb3VudCgpLHRoaXNbTF0udW5tb3VudCh0aGlzLHRoaXNbRF0sbnVsbD09PXQ/bnVsbDohdCksdGhpc1tBXSh0aGlzW1NdLHRoaXNbal0pLHRoaXN9fSkpLE9iamVjdC5rZXlzKHQpLmZpbHRlcigoZT0+bCh0W2VdKSkpLmZvckVhY2goKHQ9PntvW3RdPW9bdF0uYmluZChvKX0pKSxvO3ZhciBvfWZ1bmN0aW9uIEd0KHtjc3M6dCx0ZW1wbGF0ZTplLGNvbXBvbmVudEFQSTpuLG5hbWU6cn0pe3JldHVybiB0JiZyJiZCdC5hZGQocix0KSxVdCh6dCkoWihKKG4sey4uLlB0LFtTXTp7fSxbal06e319KSx7W3ddOm51bGwsW0NdOm51bGwsLi4uSXQsbmFtZTpyLGNzczp0LHRlbXBsYXRlOmV9KSl9Y29uc3QgSHQ9cShGdCk7ZnVuY3Rpb24gRnQodCl7Y29uc3R7Y3NzOmUsdGVtcGxhdGU6bixleHBvcnRzOnIsbmFtZTpvfT10LHM9bj9mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQoTXQsSCxpLG4pfShuLDAsKHQ9Pntjb25zdCBlPWZ1bmN0aW9uKHQ9e30pe3JldHVybiBPYmplY3QuZW50cmllcyhWKHQpKS5yZWR1Y2UoKCh0LFtlLG5dKT0+e3ZhciByO3JldHVybiB0WyhyPWUsci5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCkpXT1GdChuKSx0fSkse30pfSh0LmV4cG9ydHM/dC5leHBvcnRzLmNvbXBvbmVudHM6e30pO3JldHVybiBuPT5uPT09dC5uYW1lP0h0KHQpOmVbbl18fG0uZ2V0KG4pfSkodCkpOlE7cmV0dXJuKHtzbG90czp0LGF0dHJpYnV0ZXM6aSxwcm9wczp1fSk9PntpZihyJiZyW0ldKXJldHVybiBmdW5jdGlvbih0LHtzbG90czplLGF0dHJpYnV0ZXM6bixwcm9wczpyLGNzczpvLHRlbXBsYXRlOnN9KXtjb25zdCBpPUoodCh7c2xvdHM6ZSxhdHRyaWJ1dGVzOm4scHJvcHM6cn0pLEF0KTtyZXR1cm4ganQoKHQ9PiguLi5lKT0+e2lmKHQ9PT1nKXtjb25zdFt0XT1lO1godCxJLCEwKSxTdCh0LGkpfXJldHVybiBpW3RdKC4uLmUpLGl9KSl9KHIse3Nsb3RzOnQsYXR0cmlidXRlczppLHByb3BzOnUsY3NzOmUsdGVtcGxhdGU6bn0pO2NvbnN0IGE9VihyKXx8e30sYz1HdCh7Y3NzOmUsdGVtcGxhdGU6cyxjb21wb25lbnRBUEk6YSxuYW1lOm99KSh7c2xvdHM6dCxhdHRyaWJ1dGVzOmkscHJvcHM6dX0pO3JldHVybnttb3VudDoodCxlLG4pPT5jLm1vdW50KHQsbixlKSx1cGRhdGU6KHQsZSk9PmMudXBkYXRlKGUsdCksdW5tb3VudDp0PT5jLnVubW91bnQodCl9fX1jb25zdCBWdD17Y3NzTWFuYWdlcjpCdCxET01CaW5kaW5nczp7dGVtcGxhdGU6TXQsY3JlYXRlQmluZGluZzpUdCxjcmVhdGVFeHByZXNzaW9uOmZ0LGJpbmRpbmdUeXBlczppLGV4cHJlc3Npb25UeXBlczpIfSxnbG9iYWxzOntQUk9QU19LRVk6UyxTVEFURV9LRVk6aixJU19DT01QT05FTlRfVVBEQVRJTkc6UCxBVFRSSUJVVEVTX0tFWV9TWU1CT0w6XyxDT01QT05FTlRTX0lNUExFTUVOVEFUSU9OX01BUDptLFBMVUdJTlNfU0VUOmYsRE9NX0NPTVBPTkVOVF9JTlNUQU5DRV9QUk9QRVJUWTpwLFBBUkVOVF9LRVlfU1lNQk9MOkR9fTt0Ll9fPVZ0LHQuY29tcG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybihlLG4se3Nsb3RzOnIsYXR0cmlidXRlczpvLHBhcmVudFNjb3BlOnN9PXt9KT0+ZnVuY3Rpb24oLi4udCl7cmV0dXJuIHQucmVkdWNlKCgodCxlKT0+KC4uLm4pPT50KGUoLi4ubikpKSl9KCh0PT50Lm1vdW50KGUscykpLCh0PT50KHtwcm9wczpuLHNsb3RzOnIsYXR0cmlidXRlczpvfSkpLEZ0KSh0KX0sdC5pbnN0YWxsPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQpLGYuaGFzKHQpLGYuYWRkKHQpLGZ9LHQubW91bnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBDdCh0KS5tYXAoKHQ9PmZ1bmN0aW9uKHQsZSxuLHIpe2NvbnN0IG89bnx8WXQodCk7cmV0dXJuIG0uaGFzKG8pLG0uZ2V0KG8pKHtwcm9wczplLHNsb3RzOnZvaWQgMH0pLm1vdW50KHQpfSh0LGUsbikpKX0sdC5wdXJlPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQpLHRbSV09ITAsdH0sdC5yZWdpc3Rlcj1mdW5jdGlvbih0LHtjc3M6ZSx0ZW1wbGF0ZTpuLGV4cG9ydHM6cn0pe3JldHVybiBtLmhhcyh0KSxtLnNldCh0LEZ0KHtuYW1lOnQsY3NzOmUsdGVtcGxhdGU6bixleHBvcnRzOnJ9KSksbX0sdC51bmluc3RhbGw9ZnVuY3Rpb24odCl7cmV0dXJuIGYuaGFzKHQpLGYuZGVsZXRlKHQpLGZ9LHQudW5tb3VudD1mdW5jdGlvbih0LGUpe3JldHVybiBDdCh0KS5tYXAoKHQ9Pih0W3BdJiZ0W3BdLnVubW91bnQoZSksdCkpKX0sdC51bnJlZ2lzdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBtLmhhcyh0KSxtLmRlbGV0ZSh0KSxCdC5yZW1vdmUodCksbX0sdC52ZXJzaW9uPSJ2OS4xLjgiLHQud2l0aFR5cGVzPXQ9PnR9LCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGU/ZShleHBvcnRzKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiXSxlKTplKCh0PSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnR8fHNlbGYpLnJpb3Q9e30pOw==]]></data>
	</file>
	<file>
	  <filename>/js/smart.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKIGpTbWFydCBKYXZhc2NyaXB0IHRlbXBsYXRlIGVuZ2luZSwgYSBwb3J0IG9mIFNtYXJ0eSBQSFAgdG8gSmF2YXNjcmlwdAoKIGh0dHBzOi8vZ2l0aHViLmNvbS9taXJvc2huaWtvdi9qc21hcnQKCiBDb3B5cmlnaHQgMjAxNiwgTWF4IE1pcm9zaG5pa292IDxtaXJvc2huaWtvdiBhdCBnbWFpbCBkb3QgY29tPiAKCiBqU21hcnQgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiovCihmdW5jdGlvbigpe2Z1bmN0aW9uIEgoYSxjKXtmb3IodmFyIGI9MTtiPGFyZ3VtZW50cy5sZW5ndGg7KytiKWZvcih2YXIgZCBpbiBhcmd1bWVudHNbYl0pYVtkXT1hcmd1bWVudHNbYl1bZF07cmV0dXJuIGF9ZnVuY3Rpb24gTChhKXt2YXIgYz0wLGI7Zm9yKGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiZjKys7cmV0dXJuIGN9ZnVuY3Rpb24gSShhLGMpe2lmKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKXJldHVybiBhLmluZGV4T2YoYyk7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDsrK2IpaWYoYVtiXT09PWMpcmV0dXJuIGI7cmV0dXJuLTF9ZnVuY3Rpb24gUShhKXtyZXR1cm4gYS5yZXBsYWNlKC9cXHQvLCJcdCIpLnJlcGxhY2UoL1xcbi8sIlxuIikucmVwbGFjZSgvXFwoWyciXFxdKS9nLCIkMSIpfWZ1bmN0aW9uIEYoYSl7cmV0dXJuIFEoYS5yZXBsYWNlKC9eWyciXSguKilbJyJdJC8sIiQxIikpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX1mdW5jdGlvbiBDKGEsYyl7Zm9yKHZhciBiPQowLGQ9MCxlPWgucHJvdG90eXBlLmxlZnRfZGVsaW1pdGVyLGY9aC5wcm90b3R5cGUucmlnaHRfZGVsaW1pdGVyLGc9aC5wcm90b3R5cGUuYXV0b19saXRlcmFsLG09L15ccyooLispXHMqJC9pLG09YT9SZWdFeHAoIl5cXHMqKCIrYSsiKVxccyokIiwiaSIpOm0sbD0wO2w8Yy5sZW5ndGg7KytsKWlmKGMuc3Vic3RyKGwsZS5sZW5ndGgpPT1lKWcmJmwrMTxjLmxlbmd0aCYmYy5zdWJzdHIobCsxLDEpLm1hdGNoKC9ccy8pfHwoYnx8KGM9Yy5zbGljZShsKSxkKz1wYXJzZUludChsKSxsPTApLCsrYik7ZWxzZSBpZihjLnN1YnN0cihsLGYubGVuZ3RoKT09ZiYmIShnJiYwPD1sLTEmJmMuc3Vic3RyKGwtMSwxKS5tYXRjaCgvXHMvKSkpe2lmKCEtLWIpe3ZhciBrPWMuc2xpY2UoZS5sZW5ndGgsbCkucmVwbGFjZSgvW1xyXG5dL2csIiAiKS5tYXRjaChtKTtpZihrKXJldHVybiBrLmluZGV4PWQsa1swXT1jLnNsaWNlKDAsbCtmLmxlbmd0aCksa30wPmImJihiPTApfXJldHVybiBudWxsfWZ1bmN0aW9uIFIoYSwKYyxiKXt2YXIgZD0iIixlPW51bGwsZj1udWxsLGc9MDtkb3tlJiYoZys9ZVswXS5sZW5ndGgpO2U9QyhhLGIpO2lmKCFlKXRocm93IEVycm9yKCJVbmNsb3NlZCB7IitjKyJ9Iik7ZCs9Yi5zbGljZSgwLGUuaW5kZXgpO2crPWUuaW5kZXg7Yj1iLnNsaWNlKGUuaW5kZXgrZVswXS5sZW5ndGgpOyhmPUMoYyxkKSkmJihkPWQuc2xpY2UoZi5pbmRleCtmWzBdLmxlbmd0aCkpfXdoaWxlKGYpO2UuaW5kZXg9ZztyZXR1cm4gZX1mdW5jdGlvbiBNKGEsYyxiLGQpe2Zvcih2YXIgZT0wLGY9QyhiLGQpO2Y7Zj1DKGIsZCkpe3ZhciBnPUMoYSxkKTtpZighZ3x8Zy5pbmRleD5mLmluZGV4KXJldHVybiBmLmluZGV4Kz1lLGY7ZD1kLnNsaWNlKGcuaW5kZXgrZ1swXS5sZW5ndGgpO2UrPWcuaW5kZXgrZ1swXS5sZW5ndGg7Zj1SKGMsYSxkKTtkPWQuc2xpY2UoZi5pbmRleCtmWzBdLmxlbmd0aCk7ZSs9Zi5pbmRleCtmWzBdLmxlbmd0aH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBTKGEsYyl7aWYoInN0cmluZyI9PQp0eXBlb2YgYSl3aXRoKHtfX2NvZGU6YX0pd2l0aChKKXdpdGgoYyl0cnl7cmV0dXJuIGV2YWwoX19jb2RlKX1jYXRjaChiKXt0aHJvdyBFcnJvcihiLm1lc3NhZ2UrIiBpbiBcbiIrYSk7fXJldHVybiBhfWZ1bmN0aW9uIHkoYSxjLGIpe2EubWF0Y2goL1xbXF0kLyk/YlthLnJlcGxhY2UoL1xbXF0kLywiIildLnB1c2goYyk6YlthXT1jfWZ1bmN0aW9uIHIoYSxjKXtmb3IodmFyIGI9QygiIixhKTtiO2I9QygiIixhKSl7Yi5pbmRleCYmeChhLnNsaWNlKDAsYi5pbmRleCksYyk7YT1hLnNsaWNlKGIuaW5kZXgrYlswXS5sZW5ndGgpO3ZhciBkPWJbMV0ubWF0Y2goL15ccyooXHcrKSguKikkLyk7aWYoZCl7dmFyIGU9ZFsxXSxkPTI8ZC5sZW5ndGg/ZFsyXS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik6IiI7aWYoZSBpbiBHKXt2YXIgZj1HW2VdLGQ9KCJwYXJzZVBhcmFtcyJpbiBmP2YucGFyc2VQYXJhbXM6QSkoZCk7ImJsb2NrIj09Zi50eXBlPyhhPWEucmVwbGFjZSgvXlxuLywiIiksCmI9UigiLyIrZSxlKyIgK1tefV0qIixhKSxmLnBhcnNlKGQsYyxhLnNsaWNlKDAsYi5pbmRleCkpLGE9YS5zbGljZShiLmluZGV4K2JbMF0ubGVuZ3RoKSk6KGYucGFyc2UoZCxjKSwiZXh0ZW5kcyI9PWUmJihjPVtdKSk7YT1hLnJlcGxhY2UoL15cbi8sIiIpfWVsc2UgaWYoZSBpbiBCKXtpZihiPUJbZV0sImJsb2NrIj09Yi50eXBlPyhiPVIoIi8iK2UsZSsiICtbXn1dKiIsYSksZD1BKGQpLGY9YS5zbGljZSgwLGIuaW5kZXgpLGMucHVzaCh7dHlwZToicGx1Z2luIixuYW1lOmUscGFyYW1zOmQsc3ViVHJlZTpyKGYsW10pfSksYT1hLnNsaWNlKGIuaW5kZXgrYlswXS5sZW5ndGgpKToiZnVuY3Rpb24iPT1iLnR5cGUmJihiPUEoZCksYy5wdXNoKHt0eXBlOiJwbHVnaW4iLG5hbWU6ZSxwYXJhbXM6Yn0pKSwiYXBwZW5kIj09ZXx8ImFzc2lnbiI9PWV8fCJjYXB0dXJlIj09ZXx8ImV2YWwiPT1lfHwiaW5jbHVkZSI9PWUpYT1hLnJlcGxhY2UoL15cbi8sIiIpfWVsc2UgRy5leHByZXNzaW9uLnBhcnNlKGJbMV0sCmMpfWVsc2UgZT1HLmV4cHJlc3Npb24ucGFyc2UoYlsxXSxjKSwiYnVpbGQtaW4iPT1lLnR5cGUmJiJvcGVyYXRvciI9PWUubmFtZSYmIj0iPT1lLm9wJiYoYT1hLnJlcGxhY2UoL15cbi8sIiIpKX1hJiZ4KGEsYyk7cmV0dXJuIGN9ZnVuY3Rpb24geChhLGMpe2lmKHgucGFyc2VFbWJlZGRlZFZhcnMpZm9yKHZhciBiPS8oWyRdW1x3QF0rKXxgKFteYF0qKWAvLGQ9YS5tYXRjaChiKTtkO2Q9YS5tYXRjaChiKSljLnB1c2goe3R5cGU6InRleHQiLGRhdGE6YS5zbGljZSgwLGQuaW5kZXgpfSksYy5wdXNoKEsoZFsxXT9kWzFdOmRbMl0pLnRyZWUpLGE9YS5zbGljZShkLmluZGV4K2RbMF0ubGVuZ3RoKTtjLnB1c2goe3R5cGU6InRleHQiLGRhdGE6YX0pO3JldHVybiBjfWZ1bmN0aW9uIFooYSxjLGIpe2MuX19wYXJzZWQubmFtZT14KGEsW10pWzBdO2IucHVzaCh7dHlwZToicGx1Z2luIixuYW1lOiJfX2Z1bmMiLHBhcmFtczpjfSk7cmV0dXJuIGJ9ZnVuY3Rpb24gdChhLGMsYixkKXtkLnB1c2goe3R5cGU6ImJ1aWxkLWluIiwKbmFtZToib3BlcmF0b3IiLG9wOmEsb3B0eXBlOmMscHJlY2VkZW5jZTpiLHBhcmFtczp7fX0pfWZ1bmN0aW9uIFQoYSxjLGIpe3ZhciBkPWMudG9rZW47Yj1be3R5cGU6InRleHQiLGRhdGE6Yi5yZXBsYWNlKC9eKFx3KylAKGtleXxpbmRleHxpdGVyYXRpb258Zmlyc3R8bGFzdHxzaG93fHRvdGFsKS9naSwiJDFfXyQyIil9XTtmb3IodmFyIGU9L14oPzpcLnxccyotPlxzKnxcW1xzKikvLGY9YS5tYXRjaChlKTtmO2Y9YS5tYXRjaChlKSl7Yy50b2tlbis9ZlswXTthPWEuc2xpY2UoZlswXS5sZW5ndGgpO3ZhciBnPXt2YWx1ZToiIix0cmVlOltdfTtpZihmWzBdLm1hdGNoKC9cWy8pKXtpZihnPUsoYSkpYy50b2tlbis9Zy52YWx1ZSxiLnB1c2goZy50cmVlKSxhPWEuc2xpY2UoZy52YWx1ZS5sZW5ndGgpO2lmKGY9YS5tYXRjaCgvXHMqXF0vKSljLnRva2VuKz1mWzBdLGE9YS5zbGljZShmWzBdLmxlbmd0aCl9ZWxzZXtmPXYuc3RvcDt2LnN0b3A9ITA7aWYoVShhLGcpKXtjLnRva2VuKz0KZy52YWx1ZTt2YXIgbT1nLnRyZWVbMF07InBsdWdpbiI9PW0udHlwZSYmIl9fZnVuYyI9PW0ubmFtZSYmKG0uaGFzT3duZXI9ITApO2IucHVzaChtKTthPWEuc2xpY2UoZy52YWx1ZS5sZW5ndGgpfWVsc2UgZz0hMTt2LnN0b3A9Zn1nfHxiLnB1c2goe3R5cGU6InRleHQiLGRhdGE6IiJ9KX1jLnRyZWUucHVzaCh7dHlwZToidmFyIixwYXJ0czpifSk7Yy52YWx1ZSs9Yy50b2tlbi5zdWJzdHIoZC5sZW5ndGgpO1YoYy50b2tlbik7cmV0dXJuIGF9ZnVuY3Rpb24gVihhKXt9ZnVuY3Rpb24gdihhLGMpe2lmKCF2LnN0b3Ape3ZhciBiPWEubWF0Y2goL15cfChcdyspLyk7aWYoYil7Yy52YWx1ZSs9YlswXTt2YXIgZD0iZGVmYXVsdCI9PWJbMV0/Il9fZGVmYXVsdFZhbHVlIjoiX18iK2JbMV07YT1hLnNsaWNlKGJbMF0ubGVuZ3RoKS5yZXBsYWNlKC9eXHMrLywiIik7di5zdG9wPSEwO2Zvcih2YXIgYj1bXSxlPWEubWF0Y2goL15ccyo6XHMqLyk7ZTtlPWEubWF0Y2goL15ccyo6XHMqLykpYy52YWx1ZSs9CmEuc2xpY2UoMCxlWzBdLmxlbmd0aCksYT1hLnNsaWNlKGVbMF0ubGVuZ3RoKSxlPXt2YWx1ZToiIix0cmVlOltdfSxVKGEsZSk/KGMudmFsdWUrPWUudmFsdWUsYi5wdXNoKGUudHJlZVswXSksYT1hLnNsaWNlKGUudmFsdWUubGVuZ3RoKSk6eCgiIixiKTt2LnN0b3A9ITE7Yi51bnNoaWZ0KGMudHJlZS5wb3AoKSk7Yy50cmVlLnB1c2goWihkLHtfX3BhcnNlZDpifSxbXSlbMF0pO3YoYSxjKX19fWZ1bmN0aW9uIFUoYSxjKXtpZighYSlyZXR1cm4hMTtpZihhLnN1YnN0cigwLGgucHJvdG90eXBlLmxlZnRfZGVsaW1pdGVyLmxlbmd0aCk9PWgucHJvdG90eXBlLmxlZnRfZGVsaW1pdGVyKXt2YXIgYj1DKCIiLGEpO2lmKGIpcmV0dXJuIGMudG9rZW49YlswXSxjLnZhbHVlKz1iWzBdLHIoYlswXSxjLnRyZWUpLHYoYS5zbGljZShjLnZhbHVlLmxlbmd0aCksYyksITB9Zm9yKGI9MDtiPE4ubGVuZ3RoOysrYilpZihhLm1hdGNoKE5bYl0ucmUpKXJldHVybiBjLnRva2VuPVJlZ0V4cC5sYXN0TWF0Y2gsCmMudmFsdWUrPVJlZ0V4cC5sYXN0TWF0Y2gsTltiXS5wYXJzZShjLGEuc2xpY2UoYy50b2tlbi5sZW5ndGgpKSwhMDtyZXR1cm4hMX1mdW5jdGlvbiAkKGEsYyxiKXt2YXIgZD1jW2FdO2lmKCJvcGVyYXRvciI9PWQubmFtZSYmZC5wcmVjZWRlbmNlPT1iJiYhZC5wYXJhbXMuX19wYXJzZWQpe2lmKCJiaW5hcnkiPT1kLm9wdHlwZSlyZXR1cm4gZC5wYXJhbXMuX19wYXJzZWQ9W2NbYS0xXSxjW2ErMV1dLGMuc3BsaWNlKGEtMSwzLGQpLCEwO2lmKCJwb3N0LXVuYXJ5Ij09ZC5vcHR5cGUpcmV0dXJuIGQucGFyYW1zLl9fcGFyc2VkPVtjW2EtMV1dLGMuc3BsaWNlKGEtMSwyLGQpLCEwO2QucGFyYW1zLl9fcGFyc2VkPVtjW2ErMV1dO2Muc3BsaWNlKGEsMixkKX1yZXR1cm4hMX1mdW5jdGlvbiBhYShhKXtmb3IodmFyIGM9MCxjPTA7YzxhLmxlbmd0aDsrK2MpYVtjXWluc3RhbmNlb2YgQXJyYXkmJihhW2NdPWFhKGFbY10pKTtmb3IodmFyIGI9MTsxND5iOysrYilpZigyPT1ifHwxMD09Yilmb3IoYz0KYS5sZW5ndGg7MDxjOy0tYyljLT0kKGMtMSxhLGIpO2Vsc2UgZm9yKGM9MDtjPGEubGVuZ3RoOysrYyljLT0kKGMsYSxiKTtyZXR1cm4gYVswXX1mdW5jdGlvbiBLKGEpe2Zvcih2YXIgYz17dmFsdWU6IiIsdHJlZTpbXX07VShhLnNsaWNlKGMudmFsdWUubGVuZ3RoKSxjKTspO2lmKCFjLnRyZWUubGVuZ3RoKXJldHVybiExO2MudHJlZT1hYShjLnRyZWUpO3JldHVybiBjfWZ1bmN0aW9uIEEoYSxjLGIpe3ZhciBkPWEucmVwbGFjZSgvXG4vZywiICIpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKSxlPVtdO2UuX19wYXJzZWQ9W107YT0iIjtpZighZClyZXR1cm4gZTtjfHwoYz0vXlxzKy8sYj0vXihcdyspXHMqPVxzKi8pO2Zvcig7ZDspe3ZhciBmPW51bGw7aWYoYil7dmFyIGc9ZC5tYXRjaChiKTtnJiYoZj1GKGdbMV0pLGErPWQuc2xpY2UoMCxnWzBdLmxlbmd0aCksZD1kLnNsaWNlKGdbMF0ubGVuZ3RoKSl9Zz1LKGQpO2lmKCFnKWJyZWFrO2Y/KGVbZl09Zy52YWx1ZSxlLl9fcGFyc2VkW2ZdPQpnLnRyZWUpOihlLnB1c2goZy52YWx1ZSksZS5fX3BhcnNlZC5wdXNoKGcudHJlZSkpO2ErPWQuc2xpY2UoMCxnLnZhbHVlLmxlbmd0aCk7ZD1kLnNsaWNlKGcudmFsdWUubGVuZ3RoKTtpZihmPWQubWF0Y2goYykpYSs9ZC5zbGljZSgwLGZbMF0ubGVuZ3RoKSxkPWQuc2xpY2UoZlswXS5sZW5ndGgpO2Vsc2UgYnJlYWt9ZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBhfTtyZXR1cm4gZX1mdW5jdGlvbiB6KGEsYyl7dmFyIGI9W10sZDtmb3IoZCBpbiBhLl9fcGFyc2VkKWlmKGEuX19wYXJzZWQuaGFzT3duUHJvcGVydHkoZCkpe3ZhciBlPXEoW2EuX19wYXJzZWRbZF1dLGMpOyJzdHJpbmciPT10eXBlb2YgZSYmZS5tYXRjaCgvXlsxLTldXGR7MCwxNH0kLykmJiFpc05hTihlKSYmKGU9cGFyc2VJbnQoZSwxMCkpO2JbZF09ZX1iLl9fZ2V0PWZ1bmN0aW9uKGEsYyxkKXtpZihhIGluIGImJiJ1bmRlZmluZWQiIT10eXBlb2YgYlthXSYmImZ1bmN0aW9uIiE9dHlwZW9mIGJbYV0pcmV0dXJuIGJbYV07CmlmKCJ1bmRlZmluZWQiIT10eXBlb2YgZCYmInVuZGVmaW5lZCIhPXR5cGVvZiBiW2RdKXJldHVybiBiW2RdO2lmKG51bGw9PT1jKXRocm93IEVycm9yKCJUaGUgcmVxdWlyZWQgYXR0cmlidXRlICciK2ErIicgaXMgbWlzc2luZyIpO3JldHVybiBjfTtyZXR1cm4gYn1mdW5jdGlvbiBEKGEsYyxiKXtmb3IodmFyIGQ9YyxlPSIiLGY9MDtmPGEucGFydHMubGVuZ3RoOysrZil7dmFyIGc9YS5wYXJ0c1tmXTtpZigicGx1Z2luIj09Zy50eXBlJiYiX19mdW5jIj09Zy5uYW1lJiZnLmhhc093bmVyKWMuX19vd25lcj1kLGQ9cShbYS5wYXJ0c1tmXV0sYyksZGVsZXRlIGMuX19vd25lcjtlbHNle2U9cShbZ10sYyk7ZSBpbiBjLnNtYXJ0eS5zZWN0aW9uJiYidGV4dCI9PWcudHlwZSYmInNtYXJ0eSIhPXEoW2EucGFydHNbMF1dLGMpJiYoZT1jLnNtYXJ0eS5zZWN0aW9uW2VdLmluZGV4KTshZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBiJiZkIGluc3RhbmNlb2YgQXJyYXkmJihlPWQubGVuZ3RoKTsKInVuZGVmaW5lZCIhPXR5cGVvZiBiJiZmPT1hLnBhcnRzLmxlbmd0aC0xJiYoZFtlXT1iKTtpZighKCJvYmplY3QiPT10eXBlb2YgZCYmbnVsbCE9PWQmJmUgaW4gZCkpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgYilyZXR1cm4gYjtkW2VdPXt9fWQ9ZFtlXX19cmV0dXJuIGR9ZnVuY3Rpb24gcShhLGMpe2Zvcih2YXIgYj0iIixkPTA7ZDxhLmxlbmd0aDsrK2Qpe3ZhciBlPSIiLGY9YVtkXTtpZigidGV4dCI9PWYudHlwZSllPWYuZGF0YTtlbHNlIGlmKCJ2YXIiPT1mLnR5cGUpZT1EKGYsYyk7ZWxzZSBpZigiYnVpbGQtaW4iPT1mLnR5cGUpZT1HW2YubmFtZV0ucHJvY2VzcyhmLGMpO2Vsc2UgaWYoInBsdWdpbiI9PWYudHlwZSl7dmFyIGc9QltmLm5hbWVdO2lmKCJibG9jayI9PWcudHlwZSl7dmFyIG09e3ZhbHVlOiEwfTtmb3IoZy5wcm9jZXNzKHooZi5wYXJhbXMsYyksIiIsYyxtKTttLnZhbHVlOyltLnZhbHVlPSExLGUrPWcucHJvY2Vzcyh6KGYucGFyYW1zLGMpLHEoZi5zdWJUcmVlLApjKSxjLG0pfWVsc2UiZnVuY3Rpb24iPT1nLnR5cGUmJihlPWcucHJvY2Vzcyh6KGYucGFyYW1zLGMpLGMpKX0iYm9vbGVhbiI9PXR5cGVvZiBlJiYoZT1lPyIxIjoiIik7aWYoMT09YS5sZW5ndGgpcmV0dXJuIGU7Yis9bnVsbCE9PWU/ZToiIjtpZihjLnNtYXJ0eVsiY29udGludWUiXXx8Yy5zbWFydHlbImJyZWFrIl0pYnJlYWt9cmV0dXJuIGJ9ZnVuY3Rpb24gYmEoYSxjLGIpe2lmKCFiJiZhIGluIFcpYy5sZW5ndGg9MCxIKGMsV1thXSk7ZWxzZXt2YXIgZD1oLnByb3RvdHlwZS5nZXRUZW1wbGF0ZShhKTtpZigic3RyaW5nIiE9dHlwZW9mIGQpdGhyb3cgRXJyb3IoIk5vIHRlbXBsYXRlIGZvciAiK2EpO3IoTyhoLnByb3RvdHlwZS5maWx0ZXJzX2dsb2JhbC5wcmUsY2EoZC5yZXBsYWNlKC9cclxuL2csIlxuIikpKSxjKTtifHwoV1thXT1jKX1yZXR1cm4gY31mdW5jdGlvbiBjYShhKXtmb3IodmFyIGM9IiIsYj1SZWdFeHAoaC5wcm90b3R5cGUubGVmdF9kZWxpbWl0ZXIrIlxcKiIpLApkPVJlZ0V4cCgiXFwqIitoLnByb3RvdHlwZS5yaWdodF9kZWxpbWl0ZXIpLGU9YS5tYXRjaChiKTtlO2U9YS5tYXRjaChiKSl7Yys9YS5zbGljZSgwLGUuaW5kZXgpO2E9YS5zbGljZShlLmluZGV4K2VbMF0ubGVuZ3RoKTtlPWEubWF0Y2goZCk7aWYoIWUpdGhyb3cgRXJyb3IoIlVuY2xvc2VkICIraC5sZWZ0X2RlbGltaXRlcisiKiIpO2E9YS5zbGljZShlLmluZGV4K2VbMF0ubGVuZ3RoKX1yZXR1cm4gYythfWZ1bmN0aW9uIE8oYSxjKXtmb3IodmFyIGI9MDtiPGEubGVuZ3RoOysrYiljPWFbYl0oYyk7cmV0dXJuIGN9dmFyIEc9e2V4cHJlc3Npb246e3BhcnNlOmZ1bmN0aW9uKGEsYyl7dmFyIGI9SyhhKTtjLnB1c2goe3R5cGU6ImJ1aWxkLWluIixuYW1lOiJleHByZXNzaW9uIixleHByZXNzaW9uOmIudHJlZSxwYXJhbXM6QShhLnNsaWNlKGIudmFsdWUubGVuZ3RoKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIikpfSk7cmV0dXJuIGIudHJlZX0scHJvY2VzczpmdW5jdGlvbihhLGMpe3ZhciBiPQp6KGEucGFyYW1zLGMpLGQ9cShbYS5leHByZXNzaW9uXSxjKTtpZigwPkkoYiwibm9maWx0ZXIiKSl7Zm9yKGI9MDtiPGRlZmF1bHRfbW9kaWZpZXJzLmxlbmd0aDsrK2Ipe3ZhciBlPWRlZmF1bHRfbW9kaWZpZXJzW2JdO2UucGFyYW1zLl9fcGFyc2VkWzBdPXt0eXBlOiJ0ZXh0IixkYXRhOmR9O2Q9cShbZV0sYyl9ZXNjYXBlX2h0bWwmJihkPUouX19lc2NhcGUoZCkpO2Q9Tyh2YXJGaWx0ZXJzLGQpO1AubGVuZ3RoJiYoX190PWZ1bmN0aW9uKCl7cmV0dXJuIGR9LGQ9cShQLGMpKX1yZXR1cm4gZH19LG9wZXJhdG9yOntwcm9jZXNzOmZ1bmN0aW9uKGEsYyl7dmFyIGI9eihhLnBhcmFtcyxjKSxkPWJbMF07aWYoImJpbmFyeSI9PWEub3B0eXBlKXtiPWJbMV07aWYoIj0iPT1hLm9wKXJldHVybiBEKGEucGFyYW1zLl9fcGFyc2VkWzBdLGMsYiksIiI7aWYoYS5vcC5tYXRjaCgvKFwrPXwtPXxcKj18XC89fCU9KS8pKXtkPUQoYS5wYXJhbXMuX19wYXJzZWRbMF0sYyk7c3dpdGNoKGEub3Ape2Nhc2UgIis9IjpkKz0KYjticmVhaztjYXNlICItPSI6ZC09YjticmVhaztjYXNlICIqPSI6ZCo9YjticmVhaztjYXNlICIvPSI6ZC89YjticmVhaztjYXNlICIlPSI6ZCU9Yn1yZXR1cm4gRChhLnBhcmFtcy5fX3BhcnNlZFswXSxjLGQpfWlmKGEub3AubWF0Y2goL2Rpdi8pKXJldHVybiJkaXYiIT1hLm9wXjA9PWQlYjtpZihhLm9wLm1hdGNoKC9ldmVuLykpcmV0dXJuImV2ZW4iIT1hLm9wXjA9PWQvYiUyO2lmKGEub3AubWF0Y2goL3hvci8pKXJldHVybihkfHxiKSYmIShkJiZiKTtzd2l0Y2goYS5vcCl7Y2FzZSAiPT0iOnJldHVybiBkPT1iO2Nhc2UgIiE9IjpyZXR1cm4gZCE9YjtjYXNlICIrIjpyZXR1cm4gZCtiO2Nhc2UgIi0iOnJldHVybiBkLWI7Y2FzZSAiKiI6cmV0dXJuIGQqYjtjYXNlICIvIjpyZXR1cm4gZC9iO2Nhc2UgIiUiOnJldHVybiBkJWI7Y2FzZSAiJiYiOnJldHVybiBkJiZiO2Nhc2UgInx8IjpyZXR1cm4gZHx8YjtjYXNlICI8IjpyZXR1cm4gZDxiO2Nhc2UgIjw9IjpyZXR1cm4gZDw9CmI7Y2FzZSAiPiI6cmV0dXJuIGQ+YjtjYXNlICI+PSI6cmV0dXJuIGQ+PWI7Y2FzZSAiPT09IjpyZXR1cm4gZD09PWI7Y2FzZSAiIT09IjpyZXR1cm4gZCE9PWJ9fWVsc2V7aWYoIiEiPT1hLm9wKXJldHVybiBkIGluc3RhbmNlb2YgQXJyYXk/IWQubGVuZ3RoOiJvYmplY3QiPT10eXBlb2YgZD8hTChkKToiMCI9PT1kPyEwOiFkOyhiPSJ2YXIiPT1hLnBhcmFtcy5fX3BhcnNlZFswXS50eXBlKSYmKGQ9RChhLnBhcmFtcy5fX3BhcnNlZFswXSxjKSk7dmFyIGU9ZDtpZigicHJlLXVuYXJ5Ij09YS5vcHR5cGUpe3N3aXRjaChhLm9wKXtjYXNlICItIjplPS1kO2JyZWFrO2Nhc2UgIisrIjplPSsrZDticmVhaztjYXNlICItLSI6ZT0tLWR9YiYmRChhLnBhcmFtcy5fX3BhcnNlZFswXSxjLGQpfWVsc2V7c3dpdGNoKGEub3Ape2Nhc2UgIisrIjpkKys7YnJlYWs7Y2FzZSAiLS0iOmQtLX1EKGEucGFyYW1zLl9fcGFyc2VkWzBdLGMsZCl9cmV0dXJuIGV9fX0sc2VjdGlvbjp7dHlwZToiYmxvY2siLApwYXJzZTpmdW5jdGlvbihhLGMsYil7dmFyIGQ9W10sZT1bXTtjLnB1c2goe3R5cGU6ImJ1aWxkLWluIixuYW1lOiJzZWN0aW9uIixwYXJhbXM6YSxzdWJUcmVlOmQsc3ViVHJlZUVsc2U6ZX0pOyhhPU0oInNlY3Rpb24gW159XSsiLCIvc2VjdGlvbiIsInNlY3Rpb25lbHNlIixiKSk/KHIoYi5zbGljZSgwLGEuaW5kZXgpLGQpLHIoYi5zbGljZShhLmluZGV4K2FbMF0ubGVuZ3RoKS5yZXBsYWNlKC9eW1xyXG5dLywiIiksZSkpOnIoYixkKX0scHJvY2VzczpmdW5jdGlvbihhLGMpe3ZhciBiPXooYS5wYXJhbXMsYyksZD17fTtjLnNtYXJ0eS5zZWN0aW9uW2IuX19nZXQoIm5hbWUiLG51bGwsMCldPWQ7dmFyIGU9Yi5fX2dldCgic2hvdyIsITApO2Quc2hvdz1lO2lmKCFlKXJldHVybiBxKGEuc3ViVHJlZUVsc2UsYyk7dmFyIGU9cGFyc2VJbnQoYi5fX2dldCgic3RhcnQiLDApKSxmPWIubG9vcCBpbnN0YW5jZW9mIE9iamVjdD9MKGIubG9vcCk6aXNOYU4oYi5sb29wKT8wOnBhcnNlSW50KGIubG9vcCksCmc9cGFyc2VJbnQoYi5fX2dldCgic3RlcCIsMSkpLGI9cGFyc2VJbnQoYi5fX2dldCgibWF4IikpO2lzTmFOKGIpJiYoYj1OdW1iZXIuTUFYX1ZBTFVFKTswPmU/KGUrPWYsMD5lJiYoZT0wKSk6ZT49ZiYmKGU9Zj9mLTE6MCk7Zm9yKHZhciBtPTAsbD1lOzA8PWwmJmw8ZiYmbTxiO2wrPWcsKyttKTtkLnRvdGFsPW07ZC5sb29wPW07Zm9yKHZhciBtPTAsaz0iIixsPWU7MDw9bCYmbDxmJiZtPGImJiFjLnNtYXJ0eVsiYnJlYWsiXTtsKz1nLCsrbSlkLmZpcnN0PWw9PWUsZC5sYXN0PTA+bCtnfHxsK2c+PWYsZC5pbmRleD1sLGQuaW5kZXhfcHJldj1sLWcsZC5pbmRleF9uZXh0PWwrZyxkLml0ZXJhdGlvbj1kLnJvd251bT1tKzEsays9cShhLnN1YlRyZWUsYyksYy5zbWFydHlbImNvbnRpbnVlIl09ITE7Yy5zbWFydHlbImJyZWFrIl09ITE7cmV0dXJuIG0/azpxKGEuc3ViVHJlZUVsc2UsYyl9fSxzZXRmaWx0ZXI6e3R5cGU6ImJsb2NrIixwYXJzZVBhcmFtczpmdW5jdGlvbihhKXtyZXR1cm5bSygiX190KCl8IisKYSkudHJlZV19LHBhcnNlOmZ1bmN0aW9uKGEsYyxiKXtjLnB1c2goe3R5cGU6ImJ1aWxkLWluIixuYW1lOiJzZXRmaWx0ZXIiLHBhcmFtczphLHN1YlRyZWU6cihiLFtdKX0pfSxwcm9jZXNzOmZ1bmN0aW9uKGEsYyl7UD1hLnBhcmFtczt2YXIgYj1xKGEuc3ViVHJlZSxjKTtQPVtdO3JldHVybiBifX0sImZvciI6e3R5cGU6ImJsb2NrIixwYXJzZVBhcmFtczpmdW5jdGlvbihhKXt2YXIgYz1hLm1hdGNoKC9eXHMqXCQoXHcrKVxzKj1ccyooW15cc10rKVxzKnRvXHMqKFteXHNdKylccyooPzpzdGVwXHMqKFteXHNdKykpP1xzKiguKikkLyk7aWYoIWMpdGhyb3cgRXJyb3IoIkludmFsaWQge2Zvcn0gcGFyYW1ldGVyczogIithKTtyZXR1cm4gQSgidmFyTmFtZT0nIitjWzFdKyInIGZyb209IitjWzJdKyIgdG89IitjWzNdKyIgc3RlcD0iKyhjWzRdP2NbNF06IjEiKSsiICIrY1s1XSl9LHBhcnNlOmZ1bmN0aW9uKGEsYyxiKXt2YXIgZD1bXSxlPVtdO2MucHVzaCh7dHlwZToiYnVpbGQtaW4iLApuYW1lOiJmb3IiLHBhcmFtczphLHN1YlRyZWU6ZCxzdWJUcmVlRWxzZTplfSk7KGE9TSgiZm9yXFxzW159XSsiLCIvZm9yIiwiZm9yZWxzZSIsYikpPyhyKGIuc2xpY2UoMCxhLmluZGV4KSxkKSxyKGIuc2xpY2UoYS5pbmRleCthWzBdLmxlbmd0aCksZSkpOnIoYixkKX0scHJvY2VzczpmdW5jdGlvbihhLGMpe3ZhciBiPXooYS5wYXJhbXMsYyksZD1wYXJzZUludChiLl9fZ2V0KCJmcm9tIikpLGU9cGFyc2VJbnQoYi5fX2dldCgidG8iKSksZj1wYXJzZUludChiLl9fZ2V0KCJzdGVwIikpO2lzTmFOKGYpJiYoZj0xKTt2YXIgZz1wYXJzZUludChiLl9fZ2V0KCJtYXgiKSk7aXNOYU4oZykmJihnPU51bWJlci5NQVhfVkFMVUUpO2Zvcih2YXIgbT0wLGw9IiIsZD1NYXRoLm1pbihNYXRoLmNlaWwoKCgwPGY/ZS1kOmQtZSkrMSkvTWF0aC5hYnMoZikpLGcpLGU9cGFyc2VJbnQoYi5mcm9tKTttPGQmJiFjLnNtYXJ0eVsiYnJlYWsiXTtlKz1mLCsrbSljW2IudmFyTmFtZV09ZSxsKz1xKGEuc3ViVHJlZSwKYyksYy5zbWFydHlbImNvbnRpbnVlIl09ITE7Yy5zbWFydHlbImJyZWFrIl09ITE7bXx8KGw9cShhLnN1YlRyZWVFbHNlLGMpKTtyZXR1cm4gbH19LCJpZiI6e3R5cGU6ImJsb2NrIixwYXJzZTpmdW5jdGlvbihhLGMsYil7dmFyIGQ9W10sZT1bXTtjLnB1c2goe3R5cGU6ImJ1aWxkLWluIixuYW1lOiJpZiIscGFyYW1zOmEsc3ViVHJlZUlmOmQsc3ViVHJlZUVsc2U6ZX0pOyhhPU0oImlmXFxzK1tefV0rIiwiL2lmIiwiZWxzZVtefV0qIixiKSk/KHIoYi5zbGljZSgwLGEuaW5kZXgpLGQpLGI9Yi5zbGljZShhLmluZGV4K2FbMF0ubGVuZ3RoKSwoZD1hWzFdLm1hdGNoKC9eZWxzZVxzKmlmKC4qKS8pKT9HWyJpZiJdLnBhcnNlKEEoZFsxXSksZSxiLnJlcGxhY2UoL15cbi8sIiIpKTpyKGIucmVwbGFjZSgvXlxuLywiIiksZSkpOnIoYixkKX0scHJvY2VzczpmdW5jdGlvbihhLGMpe3ZhciBiPXooYS5wYXJhbXMsYylbMF07cmV0dXJuIWJ8fGIgaW5zdGFuY2VvZiBBcnJheSYmIWIubGVuZ3RofHwKYiBpbnN0YW5jZW9mIE9iamVjdCYmIUwoYik/cShhLnN1YlRyZWVFbHNlLGMpOnEoYS5zdWJUcmVlSWYsYyl9fSxmb3JlYWNoOnt0eXBlOiJibG9jayIscGFyc2VQYXJhbXM6ZnVuY3Rpb24oYSl7dmFyIGM9YS5tYXRjaCgvXlxzKihbJF0uKylccyphc1xzKlskXShcdyspXHMqKD0+XHMqWyRdKFx3KykpP1xzKiQvaSk7YyYmKGE9ImZyb209IitjWzFdKyIgaXRlbT0iKyhjWzRdfHxjWzJdKSxjWzRdJiYoYSs9IiBrZXk9IitjWzJdKSk7cmV0dXJuIEEoYSl9LHBhcnNlOmZ1bmN0aW9uKGEsYyxiKXt2YXIgZD1bXSxlPVtdO2MucHVzaCh7dHlwZToiYnVpbGQtaW4iLG5hbWU6ImZvcmVhY2giLHBhcmFtczphLHN1YlRyZWU6ZCxzdWJUcmVlRWxzZTplfSk7KGE9TSgiZm9yZWFjaFxcc1tefV0rIiwiL2ZvcmVhY2giLCJmb3JlYWNoZWxzZSIsYikpPyhyKGIuc2xpY2UoMCxhLmluZGV4KSxkKSxyKGIuc2xpY2UoYS5pbmRleCthWzBdLmxlbmd0aCkucmVwbGFjZSgvXltcclxuXS8sIiIpLGUpKToKcihiLGQpfSxwcm9jZXNzOmZ1bmN0aW9uKGEsYyl7dmFyIGI9eihhLnBhcmFtcyxjKSxkPWIuZnJvbTsidW5kZWZpbmVkIj09dHlwZW9mIGQmJihkPVtdKTsib2JqZWN0IiE9dHlwZW9mIGQmJihkPVtkXSk7dmFyIGU9TChkKTtjW2IuaXRlbSsiX190b3RhbCJdPWU7Im5hbWUiaW4gYiYmKGMuc21hcnR5LmZvcmVhY2hbYi5uYW1lXT17fSxjLnNtYXJ0eS5mb3JlYWNoW2IubmFtZV0udG90YWw9ZSk7dmFyIGY9IiIsZz0wLG07Zm9yKG0gaW4gZClpZihkLmhhc093blByb3BlcnR5KG0pKXtpZihjLnNtYXJ0eVsiYnJlYWsiXSlicmVhaztjW2IuaXRlbSsiX19rZXkiXT1pc05hTihtKT9tOnBhcnNlSW50KG0pOyJrZXkiaW4gYiYmKGNbYi5rZXldPWNbYi5pdGVtKyJfX2tleSJdKTtjW2IuaXRlbV09ZFttXTtjW2IuaXRlbSsiX19pbmRleCJdPXBhcnNlSW50KGcpO2NbYi5pdGVtKyJfX2l0ZXJhdGlvbiJdPXBhcnNlSW50KGcrMSk7Y1tiLml0ZW0rIl9fZmlyc3QiXT0wPT09ZztjW2IuaXRlbSsKIl9fbGFzdCJdPWc9PWUtMTsibmFtZSJpbiBiJiYoYy5zbWFydHkuZm9yZWFjaFtiLm5hbWVdLmluZGV4PXBhcnNlSW50KGcpLGMuc21hcnR5LmZvcmVhY2hbYi5uYW1lXS5pdGVyYXRpb249cGFyc2VJbnQoZysxKSxjLnNtYXJ0eS5mb3JlYWNoW2IubmFtZV0uZmlyc3Q9MD09PWc/MToiIixjLnNtYXJ0eS5mb3JlYWNoW2IubmFtZV0ubGFzdD1nPT1lLTE/MToiIik7KytnO2YrPXEoYS5zdWJUcmVlLGMpO2Muc21hcnR5WyJjb250aW51ZSJdPSExfWMuc21hcnR5WyJicmVhayJdPSExO2NbYi5pdGVtKyJfX3Nob3ciXT0wPGc7Yi5uYW1lJiYoYy5zbWFydHkuZm9yZWFjaFtiLm5hbWVdLnNob3c9MDxnPzE6IiIpO3JldHVybiAwPGc/ZjpxKGEuc3ViVHJlZUVsc2UsYyl9fSwiZnVuY3Rpb24iOnt0eXBlOiJibG9jayIscGFyc2U6ZnVuY3Rpb24oYSxjLGIpe2M9W107QltGKGEubmFtZT9hLm5hbWU6YVswXSldPXt0eXBlOiJmdW5jdGlvbiIsc3ViVHJlZTpjLGRlZmF1dFBhcmFtczphLHByb2Nlc3M6ZnVuY3Rpb24oYSwKYil7dmFyIGM9eih0aGlzLmRlZmF1dFBhcmFtcyxiKTtkZWxldGUgYy5uYW1lO3JldHVybiBxKHRoaXMuc3ViVHJlZSxIKHt9LGIsYyxhKSl9fTtyKGIsYyl9fSxwaHA6e3R5cGU6ImJsb2NrIixwYXJzZTpmdW5jdGlvbihhLGMsYil7fX0sImV4dGVuZHMiOnt0eXBlOiJmdW5jdGlvbiIscGFyc2U6ZnVuY3Rpb24oYSxjKXtjLnNwbGljZSgwLGMubGVuZ3RoKTtiYShGKGEuZmlsZT9hLmZpbGU6YVswXSksYyl9fSxibG9jazp7dHlwZToiYmxvY2siLHBhcnNlOmZ1bmN0aW9uKGEsYyxiKXtjLnB1c2goe3R5cGU6ImJ1aWxkLWluIixuYW1lOiJibG9jayIscGFyYW1zOmF9KTthLmFwcGVuZD0wPD1JKGEsImFwcGVuZCIpO2EucHJlcGVuZD0wPD1JKGEsInByZXBlbmQiKTthLmhpZGU9MDw9SShhLCJoaWRlIik7YS5oYXNDaGlsZD1hLmhhc1BhcmVudD0hMTtWPWZ1bmN0aW9uKGIpe2IubWF0Y2goL15ccypbJF1zbWFydHkuYmxvY2suY2hpbGRccyokLykmJihhLmhhc0NoaWxkPSEwKTtiLm1hdGNoKC9eXHMqWyRdc21hcnR5LmJsb2NrLnBhcmVudFxzKiQvKSYmCihhLmhhc1BhcmVudD0hMCl9O2M9cihiLFtdKTtWPWZ1bmN0aW9uKGEpe307Yj1GKGEubmFtZT9hLm5hbWU6YVswXSk7YiBpbiBFfHwoRVtiXT1bXSk7RVtiXS5wdXNoKHt0cmVlOmMscGFyYW1zOmF9KX0scHJvY2VzczpmdW5jdGlvbihhLGMpe2Muc21hcnR5LmJsb2NrLnBhcmVudD1jLnNtYXJ0eS5ibG9jay5jaGlsZD0iIjt2YXIgYj1GKGEucGFyYW1zLm5hbWU/YS5wYXJhbXMubmFtZTphLnBhcmFtc1swXSk7dGhpcy5wcm9jZXNzQmxvY2tzKEVbYl0sRVtiXS5sZW5ndGgtMSxjKTtyZXR1cm4gYy5zbWFydHkuYmxvY2suY2hpbGR9LHByb2Nlc3NCbG9ja3M6ZnVuY3Rpb24oYSxjLGIpe2lmKCFjJiZhW2NdLnBhcmFtcy5oaWRlKWIuc21hcnR5LmJsb2NrLmNoaWxkPSIiO2Vsc2UgZm9yKHZhciBkPSEwLGU9ITE7MDw9YzstLWMpe2lmKGFbY10ucGFyYW1zLmhhc1BhcmVudCl7dmFyIGY9Yi5zbWFydHkuYmxvY2suY2hpbGQ7Yi5zbWFydHkuYmxvY2suY2hpbGQ9IiI7dGhpcy5wcm9jZXNzQmxvY2tzKGEsCmMtMSxiKTtiLnNtYXJ0eS5ibG9jay5wYXJlbnQ9Yi5zbWFydHkuYmxvY2suY2hpbGQ7Yi5zbWFydHkuYmxvY2suY2hpbGQ9Zn12YXIgZj1iLnNtYXJ0eS5ibG9jay5jaGlsZCxnPXEoYVtjXS50cmVlLGIpO2Iuc21hcnR5LmJsb2NrLmNoaWxkPWY7YVtjXS5wYXJhbXMuaGFzQ2hpbGQ/Yi5zbWFydHkuYmxvY2suY2hpbGQ9ZzpkP2Iuc21hcnR5LmJsb2NrLmNoaWxkPWcrYi5zbWFydHkuYmxvY2suY2hpbGQ6ZSYmKGIuc21hcnR5LmJsb2NrLmNoaWxkKz1nKTtkPWFbY10ucGFyYW1zLmFwcGVuZDtlPWFbY10ucGFyYW1zLnByZXBlbmR9fX0sc3RyaXA6e3R5cGU6ImJsb2NrIixwYXJzZTpmdW5jdGlvbihhLGMsYil7cihiLnJlcGxhY2UoL1sgXHRdKltcclxuXStbIFx0XSovZywiIiksYyl9fSxsaXRlcmFsOnt0eXBlOiJibG9jayIscGFyc2U6ZnVuY3Rpb24oYSxjLGIpe3goYixjKX19LGxkZWxpbTp7dHlwZToiZnVuY3Rpb24iLHBhcnNlOmZ1bmN0aW9uKGEsYyl7eChoLnByb3RvdHlwZS5sZWZ0X2RlbGltaXRlciwKYyl9fSxyZGVsaW06e3R5cGU6ImZ1bmN0aW9uIixwYXJzZTpmdW5jdGlvbihhLGMpe3goaC5wcm90b3R5cGUucmlnaHRfZGVsaW1pdGVyLGMpfX0sIndoaWxlIjp7dHlwZToiYmxvY2siLHBhcnNlOmZ1bmN0aW9uKGEsYyxiKXtjLnB1c2goe3R5cGU6ImJ1aWxkLWluIixuYW1lOiJ3aGlsZSIscGFyYW1zOmEsc3ViVHJlZTpyKGIsW10pfSl9LHByb2Nlc3M6ZnVuY3Rpb24oYSxjKXtmb3IodmFyIGI9IiI7eihhLnBhcmFtcyxjKVswXSYmIWMuc21hcnR5WyJicmVhayJdOyliKz1xKGEuc3ViVHJlZSxjKSxjLnNtYXJ0eVsiY29udGludWUiXT0hMTtjLnNtYXJ0eVsiYnJlYWsiXT0hMTtyZXR1cm4gYn19fSxCPXt9LEo9e30sVz17fSxFPW51bGwsWD1udWxsLFA9W10sTj1be3JlOi9eXCQoW1x3QF0rKS8scGFyc2U6ZnVuY3Rpb24oYSxjKXt2KFQoYyxhLFJlZ0V4cC4kMSksYSl9fSx7cmU6L14odHJ1ZXxmYWxzZSkvaSxwYXJzZTpmdW5jdGlvbihhLGMpe3goYS50b2tlbi5tYXRjaCgvdHJ1ZS9pKT8KIjEiOiIiLGEudHJlZSl9fSx7cmU6L14nKFteJ1xcXSooPzpcXC5bXidcXF0qKSopJy8scGFyc2U6ZnVuY3Rpb24oYSxjKXt4KFEoUmVnRXhwLiQxKSxhLnRyZWUpO3YoYyxhKX19LHtyZTovXiIoW14iXFxdKig/OlxcLlteIlxcXSopKikiLyxwYXJzZTpmdW5jdGlvbihhLGMpe3ZhciBiPVEoUmVnRXhwLiQxKSxkPWIubWF0Y2goTlswXS5yZSk7aWYoZCl7dmFyIGU9e3Rva2VuOmRbMF0sdHJlZTpbXX07VChiLGUsZFsxXSk7aWYoZS50b2tlbi5sZW5ndGg9PWIubGVuZ3RoKXthLnRyZWUucHVzaChlLnRyZWVbMF0pO3JldHVybn19eC5wYXJzZUVtYmVkZGVkVmFycz0hMDthLnRyZWUucHVzaCh7dHlwZToicGx1Z2luIixuYW1lOiJfX3F1b3RlZCIscGFyYW1zOntfX3BhcnNlZDpyKGIsW10pfX0pO3gucGFyc2VFbWJlZGRlZFZhcnM9ITE7dihjLGEpfX0se3JlOi9eKFx3KylccypbKF0oWyldPykvLHBhcnNlOmZ1bmN0aW9uKGEsYyl7dmFyIGI9UmVnRXhwLiQxLGQ9QShSZWdFeHAuJDI/CiIiOmMsL15ccyosXHMqLyk7WihiLGQsYS50cmVlKTthLnZhbHVlKz1kLnRvU3RyaW5nKCk7dihjLnNsaWNlKGQudG9TdHJpbmcoKS5sZW5ndGgpLGEpfX0se3JlOi9eXHMqXChccyovLHBhcnNlOmZ1bmN0aW9uKGEsYyl7dmFyIGI9W107YS50cmVlLnB1c2goYik7Yi5wYXJlbnQ9YS50cmVlO2EudHJlZT1ifX0se3JlOi9eXHMqXClccyovLHBhcnNlOmZ1bmN0aW9uKGEsYyl7YS50cmVlLnBhcmVudCYmKGEudHJlZT1hLnRyZWUucGFyZW50KX19LHtyZTovXlxzKihcK1wrfC0tKVxzKi8scGFyc2U6ZnVuY3Rpb24oYSxjKXthLnRyZWUubGVuZ3RoJiYidmFyIj09YS50cmVlW2EudHJlZS5sZW5ndGgtMV0udHlwZT90KFJlZ0V4cC4kMSwicG9zdC11bmFyeSIsMSxhLnRyZWUpOnQoUmVnRXhwLiQxLCJwcmUtdW5hcnkiLDEsYS50cmVlKX19LHtyZTovXlxzKig9PT18IT09fD09fCE9KVxzKi8scGFyc2U6ZnVuY3Rpb24oYSxjKXt0KFJlZ0V4cC4kMSwiYmluYXJ5Iiw2LGEudHJlZSl9fSx7cmU6L15ccysoZXF8bmV8bmVxKVxzKy9pLApwYXJzZTpmdW5jdGlvbihhLGMpe3ZhciBiPVJlZ0V4cC4kMS5yZXBsYWNlKC9uZShxKT8vLCIhPSIpLnJlcGxhY2UoL2VxLywiPT0iKTt0KGIsImJpbmFyeSIsNixhLnRyZWUpfX0se3JlOi9eXHMqIVxzKi8scGFyc2U6ZnVuY3Rpb24oYSxjKXt0KCIhIiwicHJlLXVuYXJ5IiwyLGEudHJlZSl9fSx7cmU6L15ccytub3RccysvaSxwYXJzZTpmdW5jdGlvbihhLGMpe3QoIiEiLCJwcmUtdW5hcnkiLDIsYS50cmVlKX19LHtyZTovXlxzKig9fFwrPXwtPXxcKj18XC89fCU9KVxzKi8scGFyc2U6ZnVuY3Rpb24oYSxjKXt0KFJlZ0V4cC4kMSwiYmluYXJ5IiwxMCxhLnRyZWUpfX0se3JlOi9eXHMqKFwqfFwvfCUpXHMqLyxwYXJzZTpmdW5jdGlvbihhLGMpe3QoUmVnRXhwLiQxLCJiaW5hcnkiLDMsYS50cmVlKX19LHtyZTovXlxzK21vZFxzKy9pLHBhcnNlOmZ1bmN0aW9uKGEsYyl7dCgiJSIsImJpbmFyeSIsMyxhLnRyZWUpfX0se3JlOi9eXHMqKFwrfC0pXHMqLyxwYXJzZTpmdW5jdGlvbihhLApjKXthLnRyZWUubGVuZ3RoJiYib3BlcmF0b3IiIT1hLnRyZWVbYS50cmVlLmxlbmd0aC0xXS5uYW1lP3QoUmVnRXhwLiQxLCJiaW5hcnkiLDQsYS50cmVlKTp0KFJlZ0V4cC4kMSwicHJlLXVuYXJ5Iiw0LGEudHJlZSl9fSx7cmU6L15ccyooPD18Pj18PD58PHw+KVxzKi8scGFyc2U6ZnVuY3Rpb24oYSxjKXt0KFJlZ0V4cC4kMS5yZXBsYWNlKC88Pi8sIiE9IiksImJpbmFyeSIsNSxhLnRyZWUpfX0se3JlOi9eXHMrKGx0fGx0ZXxsZXxndHxndGV8Z2UpXHMrL2kscGFyc2U6ZnVuY3Rpb24oYSxjKXt2YXIgYj1SZWdFeHAuJDEucmVwbGFjZSgvbHQvLCI8IikucmVwbGFjZSgvbCh0KT9lLywiPD0iKS5yZXBsYWNlKC9ndC8sIj4iKS5yZXBsYWNlKC9nKHQpP2UvLCI+PSIpO3QoYiwiYmluYXJ5Iiw1LGEudHJlZSl9fSx7cmU6L15ccysoaXNccysobm90XHMrKT9kaXZccytieSlccysvaSxwYXJzZTpmdW5jdGlvbihhLGMpe3QoUmVnRXhwLiQyPyJkaXZfbm90IjoiZGl2IiwiYmluYXJ5IiwKNyxhLnRyZWUpfX0se3JlOi9eXHMraXNccysobm90XHMrKT8oZXZlbnxvZGQpKFxzK2J5XHMrKT9ccyovaSxwYXJzZTpmdW5jdGlvbihhLGMpe3QoUmVnRXhwLiQxPyJvZGQiPT1SZWdFeHAuJDI/ImV2ZW4iOiJldmVuX25vdCI6Im9kZCI9PVJlZ0V4cC4kMj8iZXZlbl9ub3QiOiJldmVuIiwiYmluYXJ5Iiw3LGEudHJlZSk7UmVnRXhwLiQzfHx4KCIxIixhLnRyZWUpfX0se3JlOi9eXHMqKCYmKVxzKi8scGFyc2U6ZnVuY3Rpb24oYSxjKXt0KFJlZ0V4cC4kMSwiYmluYXJ5Iiw4LGEudHJlZSl9fSx7cmU6L15ccyooXHxcfClccyovLHBhcnNlOmZ1bmN0aW9uKGEsYyl7dChSZWdFeHAuJDEsImJpbmFyeSIsOSxhLnRyZWUpfX0se3JlOi9eXHMrYW5kXHMrL2kscGFyc2U6ZnVuY3Rpb24oYSxjKXt0KCImJiIsImJpbmFyeSIsMTEsYS50cmVlKX19LHtyZTovXlxzK3hvclxzKy9pLHBhcnNlOmZ1bmN0aW9uKGEsYyl7dCgieG9yIiwiYmluYXJ5IiwxMixhLnRyZWUpfX0se3JlOi9eXHMrb3JccysvaSwKcGFyc2U6ZnVuY3Rpb24oYSxjKXt0KCJ8fCIsImJpbmFyeSIsMTMsYS50cmVlKX19LHtyZTovXiMoXHcrKSMvLHBhcnNlOmZ1bmN0aW9uKGEsYyl7dmFyIGI9e3Rva2VuOiIkc21hcnR5Iix0cmVlOltdfTtUKCIuY29uZmlnLiIrUmVnRXhwLiQxLGIsInNtYXJ0eSIpO2EudHJlZS5wdXNoKGIudHJlZVswXSk7dihjLGEpfX0se3JlOi9eXHMqXFtccyovLHBhcnNlOmZ1bmN0aW9uKGEsYyl7dmFyIGI9QShjLC9eXHMqLFxzKi8sL14oJ1teJ1xcXSooPzpcXC5bXidcXF0qKSonfCJbXiJcXF0qKD86XFwuW14iXFxdKikqInxcdyspXHMqPT5ccyovKTthLnRyZWUucHVzaCh7dHlwZToicGx1Z2luIixuYW1lOiJfX2FycmF5IixwYXJhbXM6Yn0pO2EudmFsdWUrPWIudG9TdHJpbmcoKTtpZihiPWMuc2xpY2UoYi50b1N0cmluZygpLmxlbmd0aCkubWF0Y2goL1xzKlxdLykpYS52YWx1ZSs9YlswXX19LHtyZTovXltcZC5dKy8scGFyc2U6ZnVuY3Rpb24oYSxjKXt4KGEudG9rZW4sYS50cmVlKTt2KGMsCmEpfX0se3JlOi9eXHcrLyxwYXJzZTpmdW5jdGlvbihhLGMpe3goYS50b2tlbixhLnRyZWUpO3YoYyxhKX19XSxoPWZ1bmN0aW9uKGEpe3RoaXMudHJlZT1bXTt0aGlzLnRyZWUuYmxvY2tzPXt9O3RoaXMuc2NyaXB0cz17fTt0aGlzLmRlZmF1bHRfbW9kaWZpZXJzPVtdO3RoaXMuZmlsdGVycz17dmFyaWFibGU6W10scG9zdDpbXX07dGhpcy5zbWFydHk9e3NtYXJ0eTp7YmxvY2s6e30sImJyZWFrIjohMSxjYXB0dXJlOnt9LCJjb250aW51ZSI6ITEsY291bnRlcjp7fSxjeWNsZTp7fSxmb3JlYWNoOnt9LHNlY3Rpb246e30sbm93Ok1hdGguZmxvb3IoKG5ldyBEYXRlKS5nZXRUaW1lKCkvMUUzKSwiY29uc3QiOnt9LGNvbmZpZzp7fSxjdXJyZW50X2RpcjoiLyIsdGVtcGxhdGU6IiIsbGRlbGltOmgucHJvdG90eXBlLmxlZnRfZGVsaW1pdGVyLHJkZWxpbTpoLnByb3RvdHlwZS5yaWdodF9kZWxpbWl0ZXIsdmVyc2lvbjoiMy4yIn19O0U9dGhpcy50cmVlLmJsb2NrcztyKE8oaC5wcm90b3R5cGUuZmlsdGVyc19nbG9iYWwucHJlLApjYSgobmV3IFN0cmluZyhhP2E6IiIpKS5yZXBsYWNlKC9cclxuL2csIlxuIikpKSx0aGlzLnRyZWUpfTtoLnByb3RvdHlwZS5mZXRjaD1mdW5jdGlvbihhKXtFPXRoaXMudHJlZS5ibG9ja3M7WD10aGlzLnNjcmlwdHM7ZXNjYXBlX2h0bWw9dGhpcy5lc2NhcGVfaHRtbDtkZWZhdWx0X21vZGlmaWVycz1oLnByb3RvdHlwZS5kZWZhdWx0X21vZGlmaWVyc19nbG9iYWwuY29uY2F0KHRoaXMuZGVmYXVsdF9tb2RpZmllcnMpO3RoaXMuZGF0YT1IKCJvYmplY3QiPT10eXBlb2YgYT9hOnt9LHRoaXMuc21hcnR5KTt2YXJGaWx0ZXJzPWgucHJvdG90eXBlLmZpbHRlcnNfZ2xvYmFsLnZhcmlhYmxlLmNvbmNhdCh0aGlzLmZpbHRlcnMudmFyaWFibGUpO2E9cSh0aGlzLnRyZWUsdGhpcy5kYXRhKTtoLnByb3RvdHlwZS5kZWJ1Z2dpbmcmJkIuZGVidWcucHJvY2VzcyhbXSx0aGlzLmRhdGEpO3JldHVybiBPKGgucHJvdG90eXBlLmZpbHRlcnNfZ2xvYmFsLnBvc3QuY29uY2F0KHRoaXMuZmlsdGVycy5wb3N0KSwKYSl9O2gucHJvdG90eXBlLmVzY2FwZV9odG1sPSExO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luPWZ1bmN0aW9uKGEsYyxiKXsibW9kaWZpZXIiPT1hP0pbIl9fIitjXT1iOkJbY109e3R5cGU6YSxwcm9jZXNzOmJ9fTtoLnByb3RvdHlwZS5yZWdpc3RlckZpbHRlcj1mdW5jdGlvbihhLGMpeyh0aGlzLnRyZWU/dGhpcy5maWx0ZXJzOmgucHJvdG90eXBlLmZpbHRlcnNfZ2xvYmFsKVsib3V0cHV0Ij09YT8icG9zdCI6YV0ucHVzaChjKX07aC5wcm90b3R5cGUuZmlsdGVyc19nbG9iYWw9e3ByZTpbXSx2YXJpYWJsZTpbXSxwb3N0OltdfTtoLnByb3RvdHlwZS5jb25maWdMb2FkPWZ1bmN0aW9uKGEsYyxiKXtiPWI/Yjp0aGlzLmRhdGE7YT1hLnJlcGxhY2UoL1xyXG4vZywiXG4iKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik7Zm9yKHZhciBkPS9eXHMqKD86XFsoW15cXV0rKVxdfCg/OihcdyspWyBcdF0qPVsgXHRdKigiIiJ8J1teJ1xcXG5dKig/OlxcLlteJ1xcXG5dKikqJ3wiW14iXFxcbl0qKD86XFwuW14iXFxcbl0qKSoifFteXG5dKikpKS9tLAplPSIiLGY9YS5tYXRjaChkKTtmO2Y9YS5tYXRjaChkKSl7YT1hLnNsaWNlKGYuaW5kZXgrZlswXS5sZW5ndGgpO2lmKGZbMV0pZT1mWzFdO2Vsc2UgaWYoKCFlfHxlPT1jKSYmIi4iIT1lLnN1YnN0cigwLDEpKWlmKCciIiInPT1mWzNdKXt2YXIgZz1hLm1hdGNoKC8iIiIvKTtnJiYoYi5zbWFydHkuY29uZmlnW2ZbMl1dPWEuc2xpY2UoMCxnLmluZGV4KSxhPWEuc2xpY2UoZy5pbmRleCtnWzBdLmxlbmd0aCkpfWVsc2UgYi5zbWFydHkuY29uZmlnW2ZbMl1dPUYoZlszXSk7aWYoZj1hLm1hdGNoKC9cbisvKSlhPWEuc2xpY2UoZi5pbmRleCtmWzBdLmxlbmd0aCk7ZWxzZSBicmVha319O2gucHJvdG90eXBlLmNsZWFyQ29uZmlnPWZ1bmN0aW9uKGEpe2E/ZGVsZXRlIHRoaXMuZGF0YS5zbWFydHkuY29uZmlnW2FdOnRoaXMuZGF0YS5zbWFydHkuY29uZmlnPXt9fTtoLnByb3RvdHlwZS5hZGREZWZhdWx0TW9kaWZpZXI9ZnVuY3Rpb24oYSl7YSBpbnN0YW5jZW9mIEFycmF5fHwoYT1bYV0pOwpmb3IodmFyIGM9MDtjPGEubGVuZ3RoOysrYyl7dmFyIGI9e3ZhbHVlOiIiLHRyZWU6WzBdfTt2KCJ8IithW2NdLGIpOyh0aGlzLnRyZWU/dGhpcy5kZWZhdWx0X21vZGlmaWVyczp0aGlzLmRlZmF1bHRfbW9kaWZpZXJzX2dsb2JhbCkucHVzaChiLnRyZWVbMF0pfX07aC5wcm90b3R5cGUuZGVmYXVsdF9tb2RpZmllcnNfZ2xvYmFsPVtdO2gucHJvdG90eXBlLmdldFRlbXBsYXRlPWZ1bmN0aW9uKGEpe3Rocm93IEVycm9yKCJObyB0ZW1wbGF0ZSBmb3IgIithKTt9O2gucHJvdG90eXBlLmdldEZpbGU9ZnVuY3Rpb24oYSl7dGhyb3cgRXJyb3IoIk5vIGZpbGUgZm9yICIrYSk7fTtoLnByb3RvdHlwZS5nZXRKYXZhc2NyaXB0PWZ1bmN0aW9uKGEpe3Rocm93IEVycm9yKCJObyBKYXZhc2NyaXB0IGZvciAiK2EpO307aC5wcm90b3R5cGUuZ2V0Q29uZmlnPWZ1bmN0aW9uKGEpe3Rocm93IEVycm9yKCJObyBjb25maWcgZm9yICIrYSk7fTtoLnByb3RvdHlwZS5hdXRvX2xpdGVyYWw9ITA7aC5wcm90b3R5cGUubGVmdF9kZWxpbWl0ZXI9CiJ7IjtoLnByb3RvdHlwZS5yaWdodF9kZWxpbWl0ZXI9In0iO2gucHJvdG90eXBlLmRlYnVnZ2luZz0hMTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJfX2FycmF5IixmdW5jdGlvbihhLGMpe3ZhciBiPVtdLGQ7Zm9yKGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiZhW2RdJiYiZnVuY3Rpb24iIT10eXBlb2YgYVtkXSYmKGJbZF09YVtkXSk7cmV0dXJuIGJ9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJfX2Z1bmMiLGZ1bmN0aW9uKGEsYyl7Zm9yKHZhciBiPVtdLGQ9e30sZT0wO2U8YS5sZW5ndGg7KytlKWIucHVzaChhLm5hbWUrIl9fcCIrZSksZFthLm5hbWUrIl9fcCIrZV09YVtlXTtyZXR1cm4gUygoIl9fb3duZXIiaW4gYyYmYS5uYW1lIGluIGMuX19vd25lcj8iX19vd25lci4iK2EubmFtZTphLm5hbWUpKyIoIitiLmpvaW4oIiwiKSsiKSIsSCh7fSxjLGQpKX0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsCiJfX3F1b3RlZCIsZnVuY3Rpb24oYSxjKXtyZXR1cm4gYS5qb2luKCIiKX0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsImJyZWFrIixmdW5jdGlvbihhLGMpe2Muc21hcnR5WyJicmVhayJdPSEwO3JldHVybiIifSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImZ1bmN0aW9uIiwiY29udGludWUiLGZ1bmN0aW9uKGEsYyl7Yy5zbWFydHlbImNvbnRpbnVlIl09ITA7cmV0dXJuIiJ9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJjYWxsIixmdW5jdGlvbihhLGMpe3ZhciBiPWEuX19nZXQoIm5hbWUiLG51bGwsMCk7ZGVsZXRlIGEubmFtZTt2YXIgZD1hLl9fZ2V0KCJhc3NpZ24iLCExKTtkZWxldGUgYS5hc3NpZ247Yj1CW2JdLnByb2Nlc3MoYSxjKTtyZXR1cm4gZD8oeShkLGIsYyksIiIpOmJ9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJhcHBlbmQiLGZ1bmN0aW9uKGEsYyl7dmFyIGI9YS5fX2dldCgidmFyIiwKbnVsbCwwKTtiIGluIGMmJmNbYl1pbnN0YW5jZW9mIEFycmF5fHwoY1tiXT1bXSk7dmFyIGQ9YS5fX2dldCgiaW5kZXgiLCExKSxlPWEuX19nZXQoInZhbHVlIixudWxsLDEpOyExPT09ZD9jW2JdLnB1c2goZSk6Y1tiXVtkXT1lO3JldHVybiIifSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImZ1bmN0aW9uIiwiYXNzaWduIixmdW5jdGlvbihhLGMpe3koYS5fX2dldCgidmFyIixudWxsLDApLGEuX19nZXQoInZhbHVlIixudWxsLDEpLGMpO3JldHVybiIifSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImJsb2NrIiwiY2FwdHVyZSIsZnVuY3Rpb24oYSxjLGIsZCl7YyYmKGM9Yy5yZXBsYWNlKC9eXG4vLCIiKSxiLnNtYXJ0eS5jYXB0dXJlW2EuX19nZXQoIm5hbWUiLCJkZWZhdWx0IiwwKV09YywiYXNzaWduImluIGEmJnkoYS5hc3NpZ24sYyxiKSwoYT1hLl9fZ2V0KCJhcHBlbmQiLCExKSkmJihhIGluIGI/YlthXWluc3RhbmNlb2YgQXJyYXkmJmJbYV0ucHVzaChjKTpiW2FdPQpbY10pKTtyZXR1cm4iIn0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsImV2YWwiLGZ1bmN0aW9uKGEsYyl7dmFyIGI9W107cihhLl9fZ2V0KCJ2YXIiLCIiLDApLGIpO2I9cShiLGMpO3JldHVybiJhc3NpZ24iaW4gYT8oeShhLmFzc2lnbixiLGMpLCIiKTpifSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImZ1bmN0aW9uIiwiaW5jbHVkZSIsZnVuY3Rpb24oYSxjKXt2YXIgYj1hLl9fZ2V0KCJmaWxlIixudWxsLDApLGQ9SCh7fSxjLGEpO2Quc21hcnR5LnRlbXBsYXRlPWI7Yj1xKGJhKGIsW10sMDw9SShhLCJub2NhY2hlIikpLGQpO3JldHVybiJhc3NpZ24iaW4gYT8oeShhLmFzc2lnbixiLGMpLCIiKTpifSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImJsb2NrIiwibm9jYWNoZSIsZnVuY3Rpb24oYSxjLGIsZCl7cmV0dXJuIGN9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiYmxvY2siLCJqYXZhc2NyaXB0IixmdW5jdGlvbihhLGMsYiwKZCl7Yi4kdGhpcz1iO1MoYyxiKTtkZWxldGUgYi4kdGhpcztyZXR1cm4iIn0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsImNvbmZpZ19sb2FkIixmdW5jdGlvbihhLGMpe2gucHJvdG90eXBlLmNvbmZpZ0xvYWQoaC5wcm90b3R5cGUuZ2V0Q29uZmlnKGEuX19nZXQoImZpbGUiLG51bGwsMCkpLGEuX19nZXQoInNlY3Rpb24iLCIiLDEpLGMpO3JldHVybiIifSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oIm1vZGlmaWVyIiwiZGVmYXVsdFZhbHVlIixmdW5jdGlvbihhLGMpe3JldHVybiBhJiYibnVsbCIhPWEmJiJ1bmRlZmluZWQiIT1hP2E6Yz9jOiIifSk7dmFyIG49e3dpbmRvdzoib2JqZWN0Ij09dHlwZW9mIHdpbmRvdz93aW5kb3c6e2RvY3VtZW50Ont9fX07KGZ1bmN0aW9uKGEsYyl7ImZ1bmN0aW9uIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGMpOiJvYmplY3QiPT09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHM/Cm1vZHVsZS5leHBvcnRzPWMoKTphLmpTbWFydD1jKCl9KSh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJjb3VudGVyIixmdW5jdGlvbihhLGMpe3ZhciBiPWEuX19nZXQoIm5hbWUiLCJkZWZhdWx0Iik7aWYoYiBpbiBjLnNtYXJ0eS5jb3VudGVyKXt2YXIgZD1jLnNtYXJ0eS5jb3VudGVyW2JdOyJzdGFydCJpbiBhP2QudmFsdWU9cGFyc2VJbnQoYS5zdGFydCk6KGQudmFsdWU9cGFyc2VJbnQoZC52YWx1ZSksZC5za2lwPXBhcnNlSW50KGQuc2tpcCksZC52YWx1ZT0iZG93biI9PWQuZGlyZWN0aW9uP2QudmFsdWUtZC5za2lwOmQudmFsdWUrZC5za2lwKTtkLnNraXA9YS5fX2dldCgic2tpcCIsZC5za2lwKTtkLmRpcmVjdGlvbj1hLl9fZ2V0KCJkaXJlY3Rpb24iLGQuZGlyZWN0aW9uKTtkLmFzc2lnbj1hLl9fZ2V0KCJhc3NpZ24iLGQuYXNzaWduKX1lbHNlIGMuc21hcnR5LmNvdW50ZXJbYl09e3ZhbHVlOnBhcnNlSW50KGEuX19nZXQoInN0YXJ0IiwKMSkpLHNraXA6cGFyc2VJbnQoYS5fX2dldCgic2tpcCIsMSkpLGRpcmVjdGlvbjphLl9fZ2V0KCJkaXJlY3Rpb24iLCJ1cCIpLGFzc2lnbjphLl9fZ2V0KCJhc3NpZ24iLCExKX07cmV0dXJuIGMuc21hcnR5LmNvdW50ZXJbYl0uYXNzaWduPyhjW2Muc21hcnR5LmNvdW50ZXJbYl0uYXNzaWduXT1jLnNtYXJ0eS5jb3VudGVyW2JdLnZhbHVlLCIiKTphLl9fZ2V0KCJwcmludCIsITApP2Muc21hcnR5LmNvdW50ZXJbYl0udmFsdWU6IiJ9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJjeWNsZSIsZnVuY3Rpb24oYSxjKXt2YXIgYj1hLl9fZ2V0KCJuYW1lIiwiZGVmYXVsdCIpLGQ9YS5fX2dldCgicmVzZXQiLCExKTtiIGluIGMuc21hcnR5LmN5Y2xlfHwoYy5zbWFydHkuY3ljbGVbYl09e2FycjpbIiJdLGRlbGltaXRlcjphLl9fZ2V0KCJkZWxpbWl0ZXIiLCIsIiksaW5kZXg6MH0sZD0hMCk7YS5fX2dldCgiZGVsaW1pdGVyIiwhMSkmJihjLnNtYXJ0eS5jeWNsZVtiXS5kZWxpbWl0ZXI9CmEuZGVsaW1pdGVyKTt2YXIgZT1hLl9fZ2V0KCJ2YWx1ZXMiLCExKTtpZihlKXt2YXIgZj1bXTtpZihlIGluc3RhbmNlb2YgT2JqZWN0KWZvcihubSBpbiBlKWYucHVzaChlW25tXSk7ZWxzZSBmPWUuc3BsaXQoYy5zbWFydHkuY3ljbGVbYl0uZGVsaW1pdGVyKTtpZihmLmxlbmd0aCE9Yy5zbWFydHkuY3ljbGVbYl0uYXJyLmxlbmd0aHx8ZlswXSE9Yy5zbWFydHkuY3ljbGVbYl0uYXJyWzBdKWMuc21hcnR5LmN5Y2xlW2JdLmFycj1mLGMuc21hcnR5LmN5Y2xlW2JdLmluZGV4PTAsZD0hMH1hLl9fZ2V0KCJhZHZhbmNlIiwidHJ1ZSIpJiYoYy5zbWFydHkuY3ljbGVbYl0uaW5kZXgrPTEpO2lmKGMuc21hcnR5LmN5Y2xlW2JdLmluZGV4Pj1jLnNtYXJ0eS5jeWNsZVtiXS5hcnIubGVuZ3RofHxkKWMuc21hcnR5LmN5Y2xlW2JdLmluZGV4PTA7cmV0dXJuIGEuX19nZXQoImFzc2lnbiIsITEpPyh5KGEuYXNzaWduLGMuc21hcnR5LmN5Y2xlW2JdLmFycltjLnNtYXJ0eS5jeWNsZVtiXS5pbmRleF0sCmMpLCIiKTphLl9fZ2V0KCJwcmludCIsITApP2Muc21hcnR5LmN5Y2xlW2JdLmFycltjLnNtYXJ0eS5jeWNsZVtiXS5pbmRleF06IiJ9KTtoLnByb3RvdHlwZS5wcmludF9yPWZ1bmN0aW9uKGEsYyl7aWYoYSBpbnN0YW5jZW9mIE9iamVjdCl7dmFyIGI9KGEgaW5zdGFuY2VvZiBBcnJheT8iQXJyYXlbIithLmxlbmd0aCsiXSI6Ik9iamVjdCIpKyI8YnI+IixkO2ZvcihkIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShkKSYmKGIrPWMrIiZuYnNwOyZuYnNwOzxzdHJvbmc+IitkKyI8L3N0cm9uZz4gOiAiK2gucHJvdG90eXBlLnByaW50X3IoYVtkXSxjKyImbmJzcDsmbmJzcDsmbmJzcDsiKSsiPGJyPiIpO3JldHVybiBifXJldHVybiBhfTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJkZWJ1ZyIsZnVuY3Rpb24oYSxjKXsidW5kZWZpbmVkIiE9dHlwZW9mIGRiZ1duZCYmZGJnV25kLmNsb3NlKCk7ZGJnV25kPXdpbmRvdy5vcGVuKCIiLCIiLCJ3aWR0aD02ODAsaGVpZ2h0PTYwMCxyZXNpemFibGUsc2Nyb2xsYmFycz15ZXMiKTsKdmFyIGI9IiIsZD0wLGU7Zm9yKGUgaW4gYyliKz0iPHRyIGNsYXNzPSIrKCsrZCUyPyJvZGQiOiJldmVuIikrIj48dGQ+PHN0cm9uZz4iK2UrIjwvc3Ryb25nPjwvdGQ+PHRkPiIraC5wcm90b3R5cGUucHJpbnRfcihjW2VdLCIiKSsiPC90ZD48L3RyPiI7ZGJnV25kLmRvY3VtZW50LndyaXRlKCIgICAgICAgICAgICA8aHRtbCB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcgeG1sOmxhbmc9J2VuJz4gICAgICAgICAgICA8aGVhZD4gXHQgICAgICAgICAgICA8dGl0bGU+alNtYXJ0IERlYnVnIENvbnNvbGU8L3RpdGxlPiAgICAgICAgICAgICAgIDxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+ICAgICAgICAgICAgICAgICAgdGFibGUge3dpZHRoOiAxMDAlO30gICAgICAgICAgICAgICAgICB0ZCB7dmVydGljYWwtYWxpZ246dG9wO3dpZHRoOiA1MCU7fSAgICAgICAgICAgICAgICAgIC5ldmVuIHRkIHtiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO30gICAgICAgICAgICAgICA8L3N0eWxlPiAgICAgICAgICAgIDwvaGVhZD4gICAgICAgICAgICA8Ym9keT4gICAgICAgICAgICAgICA8aDE+alNtYXJ0IERlYnVnIENvbnNvbGU8L2gxPiAgICAgICAgICAgICAgIDxoMj5hc3NpZ25lZCB0ZW1wbGF0ZSB2YXJpYWJsZXM8L2gyPiAgICAgICAgICAgICAgIDx0YWJsZT4iKwpiKyI8L3RhYmxlPiAgICAgICAgICAgIDwvYm9keT4gICAgICAgICAgICA8L2h0bWw+ICAgICAgICAgIik7cmV0dXJuIiJ9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJmZXRjaCIsZnVuY3Rpb24oYSxjKXt2YXIgYj1oLnByb3RvdHlwZS5nZXRGaWxlKGEuX19nZXQoImZpbGUiLG51bGwsMCkpO3JldHVybiJhc3NpZ24iaW4gYT8oeShhLmFzc2lnbixiLGMpLCIiKTpifSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImZ1bmN0aW9uIiwiaW5zZXJ0IixmdW5jdGlvbihhLGMpe3ZhciBiPXt9LGQ7Zm9yKGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiZpc05hTihkKSYmYVtkXSYmInN0cmluZyI9PXR5cGVvZiBhW2RdJiYibmFtZSIhPWQmJiJhc3NpZ24iIT1kJiYic2NyaXB0IiE9ZCYmKGJbZF09YVtkXSk7ZD0iaW5zZXJ0XyI7InNjcmlwdCJpbiBhJiYoZXZhbChoLnByb3RvdHlwZS5nZXRKYXZhc2NyaXB0KGEuc2NyaXB0KSksZD0ic21hcnR5X2luc2VydF8iKTsKYj1ldmFsKGQrYS5fX2dldCgibmFtZSIsbnVsbCwwKSkoYixjKTtyZXR1cm4iYXNzaWduImluIGE/KHkoYS5hc3NpZ24sYixjKSwiIik6Yn0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsImh0bWxfY2hlY2tib3hlcyIsZnVuY3Rpb24oYSxjKXt2YXIgYj1hLl9fZ2V0KCJ0eXBlIiwiY2hlY2tib3giKSxkPWEuX19nZXQoIm5hbWUiLGIpOyJjaGVja2JveCI9PWImJihkKz0iW10iKTt2YXIgZT1hLl9fZ2V0KCJ2YWx1ZXMiLGEub3B0aW9ucyksZj1hLl9fZ2V0KCJvcHRpb25zIixbXSksZz0ib3B0aW9ucyJpbiBhLG07aWYoIWcpZm9yKG0gaW4gYS5vdXRwdXQpZi5wdXNoKGEub3V0cHV0W21dKTt2YXIgbD1hLl9fZ2V0KCJzZWxlY3RlZCIsITEpLGs9YS5fX2dldCgic2VwYXJhdG9yIiwiIiksaD1Cb29sZWFuKGEuX19nZXQoImxhYmVscyIsITApKSxwPVtdLFk9MCx3PSIiO2ZvcihtIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShtKSYmKHc9aD8iPGxhYmVsPiI6IiIsCncrPSc8aW5wdXQgdHlwZT0iJytiKyciIG5hbWU9IicrZCsnIiB2YWx1ZT0iJysoZz9tOmVbbV0pKyciICcsbD09KGc/bTplW21dKSYmKHcrPSdjaGVja2VkPSJjaGVja2VkIiAnKSx3Kz0iLz4iK2ZbZz9tOlkrK10sdys9aD8iPC9sYWJlbD4iOiIiLHcrPWsscC5wdXNoKHcpKTtyZXR1cm4iYXNzaWduImluIGE/KHkoYS5hc3NpZ24scCxjKSwiIik6cC5qb2luKCJcbiIpfSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImZ1bmN0aW9uIiwiaHRtbF9pbWFnZSIsZnVuY3Rpb24oYSxjKXt2YXIgYj1hLl9fZ2V0KCJmaWxlIixudWxsKSxkPWEuX19nZXQoIndpZHRoIiwhMSksZT1hLl9fZ2V0KCJoZWlnaHQiLCExKSxmPWEuX19nZXQoImFsdCIsIiIpLGc9YS5fX2dldCgiaHJlZiIsITEpLG09e2ZpbGU6MSx3aWR0aDoxLGhlaWdodDoxLGFsdDoxLGhyZWY6MSxiYXNlZGlyOjEscGF0aF9wcmVmaXg6MX0sYj0nPGltZyBzcmM9IicrYS5fX2dldCgicGF0aF9wcmVmaXgiLCIiKStiKyciIGFsdD0iJysKZisnIicrKGQ/JyB3aWR0aD0iJytkKyciJzoiIikrKGU/JyBoZWlnaHQ9IicrZSsnIic6IiIpLGw7Zm9yKGwgaW4gYSlhLmhhc093blByb3BlcnR5KGwpJiYic3RyaW5nIj09dHlwZW9mIGFbbF0mJihsIGluIG18fChiKz0iICIrbCsnPSInK2FbbF0rJyInKSk7Yis9IiAvPiI7cmV0dXJuIGc/JzxhIGhyZWY9IicrZysnIj4nK2IrIjwvYT4iOmJ9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiZnVuY3Rpb24iLCJodG1sX29wdGlvbnMiLGZ1bmN0aW9uKGEsYyl7dmFyIGI9YS5fX2dldCgidmFsdWVzIixhLm9wdGlvbnMpLGQ9YS5fX2dldCgib3B0aW9ucyIsW10pLGU9Im9wdGlvbnMiaW4gYSxmO2lmKCFlKWZvcihmIGluIGEub3V0cHV0KWQucHVzaChhLm91dHB1dFtmXSk7dmFyIGc9YS5fX2dldCgic2VsZWN0ZWQiLCExKTshZ3x8ZyBpbnN0YW5jZW9mIEFycmF5fHwoZz1bZ10pO3ZhciBtPVtdLGw9IiIsaz0wO2ZvcihmIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShmKSl7bD0nPG9wdGlvbiB2YWx1ZT0iJysKKGU/ZjpiW2ZdKSsnIic7aWYoZylmb3Ioaz0wO2s8Zy5sZW5ndGg7KytrKWlmKGdba109PShlP2Y6YltmXSkpe2wrPScgc2VsZWN0ZWQ9InNlbGVjdGVkIic7YnJlYWt9bCs9Ij4iK2RbZT9mOmsrK10rIjwvb3B0aW9uPiI7bS5wdXNoKGwpfWI9YS5fX2dldCgibmFtZSIsITEpO3JldHVybihiPyc8c2VsZWN0IG5hbWU9IicrYisnIj5cbicrbS5qb2luKCJcbiIpKyJcbjwvc2VsZWN0PiI6bS5qb2luKCJcbiIpKSsiXG4ifSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImZ1bmN0aW9uIiwiaHRtbF9yYWRpb3MiLGZ1bmN0aW9uKGEsYyl7YS50eXBlPSJyYWRpbyI7cmV0dXJuIEIuaHRtbF9jaGVja2JveGVzLnByb2Nlc3MoYSxjKX0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsImh0bWxfc2VsZWN0X2RhdGUiLGZ1bmN0aW9uKGEsYyl7dmFyIGI9YS5fX2dldCgicHJlZml4IiwiRGF0ZV8iKSxkPSJKYW51YXJ5IEZlYnJ1YXJ5IE1hcmNoIEFwcmlsIE1heSBKdW5lIEp1bHkgQXVndXN0IFNlcHRlbWJlciBPY3RvYmVyIE5vdmVtYmVyIERlY2VtYmVyIi5zcGxpdCgiICIpLAplO2U9IiIrKCc8c2VsZWN0IG5hbWU9IicrYisnTW9udGgiPlxuJyk7Zm9yKHZhciBmPTAsZj0wO2Y8ZC5sZW5ndGg7KytmKWUrPSc8b3B0aW9uIHZhbHVlPSInK2YrJyI+JytkW2ZdKyI8L29wdGlvbj5cbiI7ZT1lKyI8L3NlbGVjdD5cbiIrKCc8c2VsZWN0IG5hbWU9IicrYisnRGF5Ij5cbicpO2ZvcihmPTA7MzE+ZjsrK2YpZSs9JzxvcHRpb24gdmFsdWU9IicrZisnIj4nK2YrIjwvb3B0aW9uPlxuIjtyZXR1cm4gZSs9Ijwvc2VsZWN0PlxuIn0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsImh0bWxfdGFibGUiLGZ1bmN0aW9uKGEsYyl7dmFyIGI9W10sZDtpZihhLmxvb3AgaW5zdGFuY2VvZiBBcnJheSliPWEubG9vcDtlbHNlIGZvcihkIGluIGEubG9vcClhLmxvb3AuaGFzT3duUHJvcGVydHkoZCkmJmIucHVzaChhLmxvb3BbZF0pO3ZhciBlPWEuX19nZXQoInJvd3MiLCExKSxmPWEuX19nZXQoImNvbHMiLCExKTtmfHwoZj1lP01hdGguY2VpbChiLmxlbmd0aC8KZSk6Myk7dmFyIGc9W107aWYoaXNOYU4oZikpe2lmKCJvYmplY3QiPT10eXBlb2YgZilmb3IoZCBpbiBmKWYuaGFzT3duUHJvcGVydHkoZCkmJmcucHVzaChmW2RdKTtlbHNlIGc9Zi5zcGxpdCgvXHMqLFxzKi8pO2Y9Zy5sZW5ndGh9dmFyIGU9ZT9lOk1hdGguY2VpbChiLmxlbmd0aC9mKSxtPWEuX19nZXQoImlubmVyIiwiY29scyIpO2Q9YS5fX2dldCgiY2FwdGlvbiIsIiIpO3ZhciBsPWEuX19nZXQoInRhYmxlX2F0dHIiLCdib3JkZXI9IjEiJyksaz1hLl9fZ2V0KCJ0aF9hdHRyIiwhMSk7ayYmIm9iamVjdCIhPXR5cGVvZiBrJiYoaz1ba10pO3ZhciBoPWEuX19nZXQoInRyX2F0dHIiLCExKTtoJiYib2JqZWN0IiE9dHlwZW9mIGgmJihoPVtoXSk7dmFyIHA9YS5fX2dldCgidGRfYXR0ciIsITEpO3AmJiJvYmplY3QiIT10eXBlb2YgcCYmKHA9W3BdKTtmb3IodmFyIFk9YS5fX2dldCgidHJhaWxwYWQiLCImbmJzcDsiKSx3PWEuX19nZXQoImhkaXIiLCJyaWdodCIpLG49YS5fX2dldCgidmRpciIsCiJkb3duIikscT0iIixyPTA7cjxlOysrcil7Zm9yKHZhciBxPXErKCI8dHIiKyhoPyIgIitoW3IlaC5sZW5ndGhdOiIiKSsiPlxuIiksdD0wO3Q8ZjsrK3QpdmFyIHY9ImNvbHMiPT1tPygiZG93biI9PW4/cjplLTEtcikqZisoInJpZ2h0Ij09dz90OmYtMS10KTooInJpZ2h0Ij09dz90OmYtMS10KSplKygiZG93biI9PW4/cjplLTEtcikscT1xKygiPHRkIisocD8iICIrcFt0JXAubGVuZ3RoXToiIikrIj4iKyh2PGIubGVuZ3RoP2Jbdl06WSkrIjwvdGQ+XG4iKTtxKz0iPC90cj5cbiJ9Yj0iIjtpZihnLmxlbmd0aCl7Yj0iXG48dGhlYWQ+PHRyPiI7Zm9yKGU9MDtlPGcubGVuZ3RoOysrZSliKz0iXG48dGgiKyhrPyIgIitrW2Ulay5sZW5ndGhdOiIiKSsiPiIrZ1sicmlnaHQiPT13P2U6Zy5sZW5ndGgtMS1lXSsiPC90aD4iO2IrPSJcbjwvdHI+PC90aGVhZD4ifXJldHVybiI8dGFibGUgIitsKyI+IisoZD8iXG48Y2FwdGlvbj4iK2QrIjwvY2FwdGlvbj4iOiIiKStiKyJcbjx0Ym9keT5cbiIrCnErIjwvdGJvZHk+XG48L3RhYmxlPlxuIn0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsImluY2x1ZGVfamF2YXNjcmlwdCIsZnVuY3Rpb24oYSxjKXt2YXIgYj1hLl9fZ2V0KCJmaWxlIixudWxsLDApO2lmKGEuX19nZXQoIm9uY2UiLCEwKSYmYiBpbiBYKXJldHVybiIiO1hbYl09ITA7Yj1TKGgucHJvdG90eXBlLmdldEphdmFzY3JpcHQoYikseyR0aGlzOmN9KTtyZXR1cm4iYXNzaWduImluIGE/KHkoYS5hc3NpZ24sYixjKSwiIik6Yn0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJmdW5jdGlvbiIsImluY2x1ZGVfcGhwIixmdW5jdGlvbihhLGMpe3JldHVybiBCLmluY2x1ZGVfamF2YXNjcmlwdC5wcm9jZXNzKGEsYyl9KTtuLnJhd3VybGVuY29kZT1mdW5jdGlvbihhKXthPShhKyIiKS50b1N0cmluZygpO3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoYSkucmVwbGFjZSgvIS9nLCIlMjEiKS5yZXBsYWNlKC8nL2csIiUyNyIpLnJlcGxhY2UoL1woL2csCiIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKS5yZXBsYWNlKC9cKi9nLCIlMkEiKX07bi5iaW4yaGV4PWZ1bmN0aW9uKGEpe3ZhciBjLGIsZD0iIixlO2ErPSIiO2M9MDtmb3IoYj1hLmxlbmd0aDtjPGI7YysrKWU9YS5jaGFyQ29kZUF0KGMpLnRvU3RyaW5nKDE2KSxkKz0yPmUubGVuZ3RoPyIwIitlOmU7cmV0dXJuIGR9O24ub3JkPWZ1bmN0aW9uKGEpe3ZhciBjPWErIiI7YT1jLmNoYXJDb2RlQXQoMCk7aWYoNTUyOTY8PWEmJjU2MzE5Pj1hKXtpZigxPT09Yy5sZW5ndGgpcmV0dXJuIGE7Yz1jLmNoYXJDb2RlQXQoMSk7cmV0dXJuIDEwMjQqKGEtNTUyOTYpKyhjLTU2MzIwKSs2NTUzNn1yZXR1cm4gYX07aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImZ1bmN0aW9uIiwibWFpbHRvIixmdW5jdGlvbihhLGMpe3ZhciBiPWEuX19nZXQoImFkZHJlc3MiLG51bGwpLGQ9YS5fX2dldCgiZW5jb2RlIiwibm9uZSIpLGU9YS5fX2dldCgidGV4dCIsYiksZj1uLnJhd3VybGVuY29kZShhLl9fZ2V0KCJjYyIsCiIiKSkucmVwbGFjZSgiJTQwIiwiQCIpLGc9bi5yYXd1cmxlbmNvZGUoYS5fX2dldCgiYmNjIiwiIikpLnJlcGxhY2UoIiU0MCIsIkAiKSxoPW4ucmF3dXJsZW5jb2RlKGEuX19nZXQoImZvbGxvd3VwdG8iLCIiKSkucmVwbGFjZSgiJTQwIiwiQCIpLGw9bi5yYXd1cmxlbmNvZGUoYS5fX2dldCgic3ViamVjdCIsIiIpKSxrPW4ucmF3dXJsZW5jb2RlKGEuX19nZXQoIm5ld3Nncm91cHMiLCIiKSksdT1hLl9fZ2V0KCJleHRyYSIsIiIpLGI9YisoZj8iP2NjPSIrZjoiIikrKGc/KGY/IiYiOiI/IikrImJjYz0iK2c6IiIpLGI9YisobD8oZnx8Zz8iJiI6Ij8iKSsic3ViamVjdD0iK2w6IiIpLGI9Yisoaz8oZnx8Z3x8bD8iJiI6Ij8iKSsibmV3c2dyb3Vwcz0iK2s6IiIpLGI9YisoaD8oZnx8Z3x8bHx8az8iJiI6Ij8iKSsiZm9sbG93dXB0bz0iK2g6IiIpO3M9JzxhIGhyZWY9Im1haWx0bzonK2IrJyIgJyt1KyI+IitlKyI8L2E+IjtpZigiamF2YXNjcmlwdCI9PWQpe3M9ImRvY3VtZW50LndyaXRlKCciKwpzKyInKTsiO2U9IiI7Zm9yKGQ9MDtkPHMubGVuZ3RoOysrZCllKz0iJSIrbi5iaW4yaGV4KHMuc3Vic3RyKGQsMSkpO3JldHVybic8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ZXZhbCh1bmVzY2FwZShcJycrZSsiJykpXHgzYy9zY3JpcHQ+In1pZigiamF2YXNjcmlwdF9jaGFyY29kZSI9PWQpe2U9W107Zm9yKGQ9MDtkPHMubGVuZ3RoOysrZCllLnB1c2gobi5vcmQocy5zdWJzdHIoZCwxKSkpO3JldHVybic8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPlxuXHgzYyEtLVxue2RvY3VtZW50LndyaXRlKFN0cmluZy5mcm9tQ2hhckNvZGUoJytlLmpvaW4oIiwiKSsiKSl9XG4vLy0tXHgzZVxuXHgzYy9zY3JpcHQ+XG4ifWlmKCJoZXgiPT1kKXtpZihiLm1hdGNoKC9eLitcPy4rJC8pKXRocm93IEVycm9yKCJtYWlsdG86IGhleCBlbmNvZGluZyBkb2VzIG5vdCB3b3JrIHdpdGggZXh0cmEgYXR0cmlidXRlcy4gVHJ5IGphdmFzY3JpcHQuIik7CmY9IiI7Zm9yKGQ9MDtkPGIubGVuZ3RoOysrZClmPWIuc3Vic3RyKGQsMSkubWF0Y2goL1x3Lyk/ZisoIiUiK24uYmluMmhleChiLnN1YnN0cihkLDEpKSk6ZitiLnN1YnN0cihkLDEpO2I9IiI7Zm9yKGQ9MDtkPGUubGVuZ3RoOysrZCliKz0iJiN4IituLmJpbjJoZXgoZS5zdWJzdHIoZCwxKSkrIjsiO3JldHVybic8YSBocmVmPSImIzEwOTsmIzk3OyYjMTA1OyYjMTA4OyYjMTE2OyYjMTExOyYjNTg7JytmKyciICcrdSsiPiIrYisiPC9hPiJ9cmV0dXJuIHN9KTtuLnNwcmludGY9ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHMsYz0wLGI9ZnVuY3Rpb24oYSxiLGMsZCl7Y3x8KGM9IiAiKTtiPWEubGVuZ3RoPj1iPyIiOkFycmF5KDErYi1hLmxlbmd0aD4+PjApLmpvaW4oYyk7cmV0dXJuIGQ/YStiOmIrYX0sZD1mdW5jdGlvbihhLGMsZCxlLGssaCl7dmFyIHA9ZS1hLmxlbmd0aDswPHAmJihhPWR8fCFrP2IoYSxlLGgsZCk6YS5zbGljZSgwLGMubGVuZ3RoKStiKCIiLHAsIjAiLCEwKSsKYS5zbGljZShjLmxlbmd0aCkpO3JldHVybiBhfSxlPWZ1bmN0aW9uKGEsYyxlLGwsayxoLHApe2E+Pj49MDtlPWUmJmEmJnsyOiIwYiIsODoiMCIsMTY6IjB4In1bY118fCIiO2E9ZStiKGEudG9TdHJpbmcoYyksaHx8MCwiMCIsITEpO3JldHVybiBkKGEsZSxsLGsscCl9O3JldHVybiBhW2MrK10ucmVwbGFjZSgvJSV8JShcZCtcJCk/KFstK1wnIzAgXSopKFwqXGQrXCR8XCp8XGQrKT8oXC4oXCpcZCtcJHxcKnxcZCspKT8oW3NjYm94WHVpZGVFZkZnR10pL2csZnVuY3Rpb24oZixnLGgsbCxrLHUscCl7dmFyIG4sdztpZigiJSUiPT09ZilyZXR1cm4iJSI7dmFyIHE9ITE7dz0iIjt2YXIgcj1rPSExO249IiAiO2Zvcih2YXIgdD1oLmxlbmd0aCx2PTA7aCYmdjx0O3YrKylzd2l0Y2goaC5jaGFyQXQodikpe2Nhc2UgIiAiOnc9IiAiO2JyZWFrO2Nhc2UgIisiOnc9IisiO2JyZWFrO2Nhc2UgIi0iOnE9ITA7YnJlYWs7Y2FzZSAiJyI6bj1oLmNoYXJBdCh2KzEpO2JyZWFrO2Nhc2UgIjAiOms9CiEwO249IjAiO2JyZWFrO2Nhc2UgIiMiOnI9ITB9bD1sPyIqIj09PWw/K2FbYysrXToiKiI9PWwuY2hhckF0KDApPythW2wuc2xpY2UoMSwtMSldOitsOjA7MD5sJiYobD0tbCxxPSEwKTtpZighaXNGaW5pdGUobCkpdGhyb3cgRXJyb3IoInNwcmludGY6IChtaW5pbXVtLSl3aWR0aCBtdXN0IGJlIGZpbml0ZSIpO3U9dT8iKiI9PT11PythW2MrK106IioiPT11LmNoYXJBdCgwKT8rYVt1LnNsaWNlKDEsLTEpXTordTotMTwiZkZlRSIuaW5kZXhPZihwKT82OiJkIj09PXA/MDp2b2lkIDA7Zz1nP2FbZy5zbGljZSgwLC0xKV06YVtjKytdO3N3aXRjaChwKXtjYXNlICJzIjpyZXR1cm4gcD1TdHJpbmcoZyksbnVsbCE9dSYmKHA9cC5zbGljZSgwLHUpKSxkKHAsIiIscSxsLGssbik7Y2FzZSAiYyI6cmV0dXJuIHA9U3RyaW5nLmZyb21DaGFyQ29kZSgrZyksbnVsbCE9dSYmKHA9cC5zbGljZSgwLHUpKSxkKHAsIiIscSxsLGssdm9pZCAwKTtjYXNlICJiIjpyZXR1cm4gZShnLDIscixxLGwsdSwKayk7Y2FzZSAibyI6cmV0dXJuIGUoZyw4LHIscSxsLHUsayk7Y2FzZSAieCI6cmV0dXJuIGUoZywxNixyLHEsbCx1LGspO2Nhc2UgIlgiOnJldHVybiBlKGcsMTYscixxLGwsdSxrKS50b1VwcGVyQ2FzZSgpO2Nhc2UgInUiOnJldHVybiBlKGcsMTAscixxLGwsdSxrKTtjYXNlICJpIjpjYXNlICJkIjpyZXR1cm4gbj0rZ3x8MCxuPU1hdGgucm91bmQobi1uJTEpLGY9MD5uPyItIjp3LGc9ZitiKFN0cmluZyhNYXRoLmFicyhuKSksdSwiMCIsITEpLGQoZyxmLHEsbCxrKTtjYXNlICJlIjpjYXNlICJFIjpjYXNlICJmIjpjYXNlICJGIjpjYXNlICJnIjpjYXNlICJHIjpyZXR1cm4gbj0rZyxmPTA+bj8iLSI6dyx3PVsidG9FeHBvbmVudGlhbCIsInRvRml4ZWQiLCJ0b1ByZWNpc2lvbiJdWyJlZmciLmluZGV4T2YocC50b0xvd2VyQ2FzZSgpKV0scD1bInRvU3RyaW5nIiwidG9VcHBlckNhc2UiXVsiZUVmRmdHIi5pbmRleE9mKHApJTJdLGc9ZitNYXRoLmFicyhuKVt3XSh1KSxkKGcsZixxLApsLGspW3BdKCk7ZGVmYXVsdDpyZXR1cm4gZn19KX07aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oImZ1bmN0aW9uIiwibWF0aCIsZnVuY3Rpb24oYSxjKXt3aXRoKE1hdGgpd2l0aChhKXZhciBiPWV2YWwoYS5fX2dldCgiZXF1YXRpb24iLG51bGwpLnJlcGxhY2UoL3BpXChccypcKS9nLCJQSSIpKTsiZm9ybWF0ImluIGEmJihiPW4uc3ByaW50ZihhLmZvcm1hdCxiKSk7cmV0dXJuImFzc2lnbiJpbiBhPyh5KGEuYXNzaWduLGIsYyksIiIpOmJ9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLCJ3b3Jkd3JhcCIsZnVuY3Rpb24oYSxjLGIsZCl7Yz1jfHw4MDtiPWJ8fCJcbiI7YT0obmV3IFN0cmluZyhhKSkuc3BsaXQoIlxuIik7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDsrK2Upe2Zvcih2YXIgZj1hW2VdLGc9IiI7Zi5sZW5ndGg+Yzspe2Zvcih2YXIgaD0wLGw9Zi5zbGljZShoKS5tYXRjaCgvXHMrLyk7bCYmaCtsLmluZGV4PD1jO2w9Zi5zbGljZShoKS5tYXRjaCgvXHMrLykpaCs9CmwuaW5kZXgrbFswXS5sZW5ndGg7aD1ofHwoZD9jOmw/bC5pbmRleCtsWzBdLmxlbmd0aDpmLmxlbmd0aCk7Zys9Zi5zbGljZSgwLGgpLnJlcGxhY2UoL1xzKyQvLCIiKTtoPGYubGVuZ3RoJiYoZys9Yik7Zj1mLnNsaWNlKGgpfWFbZV09ZytmfXJldHVybiBhLmpvaW4oIlxuIil9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigiYmxvY2siLCJ0ZXh0Zm9ybWF0IixmdW5jdGlvbihhLGMsYixkKXtpZighYylyZXR1cm4iIjtjPW5ldyBTdHJpbmcoYyk7ZD1hLl9fZ2V0KCJ3cmFwIiw4MCk7dmFyIGU9YS5fX2dldCgid3JhcF9jaGFyIiwiXG4iKSxmPWEuX19nZXQoIndyYXBfY3V0IiwhMSksZz1hLl9fZ2V0KCJpbmRlbnRfY2hhciIsIiAiKSxoPWEuX19nZXQoImluZGVudCIsMCksbD1BcnJheShoKzEpLmpvaW4oZyksaz1hLl9fZ2V0KCJpbmRlbnRfZmlyc3QiLDApLGc9QXJyYXkoaysxKS5qb2luKGcpOyJlbWFpbCI9PWEuX19nZXQoInN0eWxlIiwiIikmJihkPTcyKTtjPWMuc3BsaXQoIlxuIik7CmZvcih2YXIgdT0wO3U8Yy5sZW5ndGg7Kyt1KXt2YXIgcD1jW3VdO3AmJihwPXAucmVwbGFjZSgvXlxzK3xccyskLywiIikucmVwbGFjZSgvXHMrL2csIiAiKSxrJiYocD1nK3ApLHA9Si5fX3dvcmR3cmFwKHAsZC1oLGUsZiksaCYmKHA9cC5yZXBsYWNlKC9eL21nLGwpKSxjW3VdPXApfWQ9Yy5qb2luKGUrZSk7cmV0dXJuImFzc2lnbiJpbiBhPyh5KGEuYXNzaWduLGQsYiksIiIpOmR9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLCJjYXBpdGFsaXplIixmdW5jdGlvbihhLGMpe2lmKCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gYTtmb3IodmFyIGI9UmVnRXhwKGM/IltcXFdcXGRdKyI6IlxcVysiKSxkPW51bGwsZT0iIixkPWEubWF0Y2goYik7ZDtkPWEubWF0Y2goYikpe3ZhciBmPWEuc2xpY2UoMCxkLmluZGV4KSxlPWYubWF0Y2goL1xkLyk/ZStmOmUrKGYuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZi5zbGljZSgxKSksZT1lK2Euc2xpY2UoZC5pbmRleCwKZC5pbmRleCtkWzBdLmxlbmd0aCk7YT1hLnNsaWNlKGQuaW5kZXgrZFswXS5sZW5ndGgpfXJldHVybiBhLm1hdGNoKC9cZC8pP2UrYTplK2EuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYS5zbGljZSgxKX0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJtb2RpZmllciIsImNhdCIsZnVuY3Rpb24oYSxjKXtjPWM/YzoiIjtyZXR1cm4gbmV3IFN0cmluZyhhKStjfSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oIm1vZGlmaWVyIiwiY291bnQiLGZ1bmN0aW9uKGEsYyl7aWYobnVsbD09PWF8fCJ1bmRlZmluZWQiPT09dHlwZW9mIGEpcmV0dXJuIDA7aWYoYS5jb25zdHJ1Y3RvciE9PUFycmF5JiZhLmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiAxO2M9Qm9vbGVhbihjKTt2YXIgYixkPTA7Zm9yKGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoZCsrLGMmJmFbYl0mJihhW2JdLmNvbnN0cnVjdG9yPT09QXJyYXl8fGFbYl0uY29uc3RydWN0b3I9PT1PYmplY3QpJiYoZCs9CkouX19jb3VudChhW2JdLCEwKSkpO3JldHVybiBkfSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oIm1vZGlmaWVyIiwiY291bnRfY2hhcmFjdGVycyIsZnVuY3Rpb24oYSxjKXthPW5ldyBTdHJpbmcoYSk7cmV0dXJuIGM/YS5sZW5ndGg6YS5yZXBsYWNlKC9ccy9nLCIiKS5sZW5ndGh9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLCJjb3VudF9wYXJhZ3JhcGhzIixmdW5jdGlvbihhKXtyZXR1cm4oYT0obmV3IFN0cmluZyhhKSkubWF0Y2goL1xuKy9nKSk/YS5sZW5ndGgrMToxfSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oIm1vZGlmaWVyIiwiY291bnRfc2VudGVuY2VzIixmdW5jdGlvbihhKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGEmJihhPWEubWF0Y2goL1teXHNdXC4oPyFcdykvZykpP2EubGVuZ3RoOjB9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLCJjb3VudF93b3JkcyIsZnVuY3Rpb24oYSl7cmV0dXJuInN0cmluZyI9PQp0eXBlb2YgYSYmKGE9YS5tYXRjaCgvXHcrL2cpKT9hLmxlbmd0aDowfSk7bi5nZXRlbnY9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucGhwX2pzJiZ0aGlzLnBocF9qcy5FTlYmJnRoaXMucGhwX2pzLkVOVlthXT90aGlzLnBocF9qcy5FTlZbYV06ITF9O24uc2V0bG9jYWxlPWZ1bmN0aW9uKGEsYyl7dmFyIGI9IiIsZD1bXSxlPTAsZT10aGlzLndpbmRvdy5kb2N1bWVudCxmPWZ1bmN0aW9uIHAoYSl7aWYoYSBpbnN0YW5jZW9mIFJlZ0V4cClyZXR1cm4gUmVnRXhwKGEpO2lmKGEgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShhKTt2YXIgYj17fSxjO2ZvcihjIGluIGEpYltjXT0ib2JqZWN0Ij09PXR5cGVvZiBhW2NdP3AoYVtjXSk6YVtjXTtyZXR1cm4gYn0sZz1mdW5jdGlvbihhKXtyZXR1cm4gMSE9PWE/MTowfSxoPWZ1bmN0aW9uKGEpe3JldHVybiAxPGE/MTowfTt0cnl7dGhpcy5waHBfanM9dGhpcy5waHBfanN8fHt9fWNhdGNoKGwpe3RoaXMucGhwX2pzPXt9fXZhciBrPQp0aGlzLnBocF9qcztrLmxvY2FsZXN8fChrLmxvY2FsZXM9e30say5sb2NhbGVzLmVuPXtMQ19DT0xMQVRFOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9PWI/MDphPmI/MTotMX0sTENfQ1RZUEU6e2FuOi9eW0EtWmEtelxkXSskL2csYWw6L15bQS1aYS16XSskL2csY3Q6L15bXHUwMDAwLVx1MDAxRlx1MDA3Rl0rJC9nLGRnOi9eW1xkXSskL2csZ3I6L15bXHUwMDIxLVx1MDA3RV0rJC9nLGx3Oi9eW2Etel0rJC9nLHByOi9eW1x1MDAyMC1cdTAwN0VdKyQvZyxwdTovXltcdTAwMjEtXHUwMDJGXHUwMDNBLVx1MDA0MFx1MDA1Qi1cdTAwNjBcdTAwN0ItXHUwMDdFXSskL2csc3A6L15bXGZcblxyXHRcdiBdKyQvZyx1cDovXltBLVpdKyQvZyx4ZDovXltBLUZhLWZcZF0rJC9nLENPREVTRVQ6IlVURi04Iixsb3dlcjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLHVwcGVyOiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiJ9LExDX1RJTUU6e2E6IlN1biBNb24gVHVlIFdlZCBUaHUgRnJpIFNhdCIuc3BsaXQoIiAiKSwKQToiU3VuZGF5IE1vbmRheSBUdWVzZGF5IFdlZG5lc2RheSBUaHVyc2RheSBGcmlkYXkgU2F0dXJkYXkiLnNwbGl0KCIgIiksYjoiSmFuIEZlYiBNYXIgQXByIE1heSBKdW4gSnVsIEF1ZyBTZXAgT2N0IE5vdiBEZWMiLnNwbGl0KCIgIiksQjoiSmFudWFyeSBGZWJydWFyeSBNYXJjaCBBcHJpbCBNYXkgSnVuZSBKdWx5IEF1Z3VzdCBTZXB0ZW1iZXIgT2N0b2JlciBOb3ZlbWJlciBEZWNlbWJlciIuc3BsaXQoIiAiKSxjOiIlYSAlZCAlYiAlWSAlciAlWiIscDpbIkFNIiwiUE0iXSxQOlsiYW0iLCJwbSJdLHI6IiVJOiVNOiVTICVwIix4OiIlbS8lZC8lWSIsWDoiJXIiLGFsdF9kaWdpdHM6IiIsRVJBOiIiLEVSQV9ZRUFSOiIiLEVSQV9EX1RfRk1UOiIiLEVSQV9EX0ZNVDoiIixFUkFfVF9GTVQ6IiJ9LExDX01PTkVUQVJZOntpbnRfY3Vycl9zeW1ib2w6IlVTRCIsY3VycmVuY3lfc3ltYm9sOiIkIixtb25fZGVjaW1hbF9wb2ludDoiLiIsbW9uX3Rob3VzYW5kc19zZXA6IiwiLG1vbl9ncm91cGluZzpbM10sCnBvc2l0aXZlX3NpZ246IiIsbmVnYXRpdmVfc2lnbjoiLSIsaW50X2ZyYWNfZGlnaXRzOjIsZnJhY19kaWdpdHM6MixwX2NzX3ByZWNlZGVzOjEscF9zZXBfYnlfc3BhY2U6MCxuX2NzX3ByZWNlZGVzOjEsbl9zZXBfYnlfc3BhY2U6MCxwX3NpZ25fcG9zbjozLG5fc2lnbl9wb3NuOjB9LExDX05VTUVSSUM6e2RlY2ltYWxfcG9pbnQ6Ii4iLHRob3VzYW5kc19zZXA6IiwiLGdyb3VwaW5nOlszXX0sTENfTUVTU0FHRVM6e1lFU0VYUFI6Il5beVldLioiLE5PRVhQUjoiXltuTl0uKiIsWUVTU1RSOiIiLE5PU1RSOiIifSxucGx1cmFsczpnfSxrLmxvY2FsZXMuZW5fVVM9ZihrLmxvY2FsZXMuZW4pLGsubG9jYWxlcy5lbl9VUy5MQ19USU1FLmM9IiVhICVkICViICVZICVyICVaIixrLmxvY2FsZXMuZW5fVVMuTENfVElNRS54PSIlRCIsay5sb2NhbGVzLmVuX1VTLkxDX1RJTUUuWD0iJXIiLGsubG9jYWxlcy5lbl9VUy5MQ19NT05FVEFSWS5pbnRfY3Vycl9zeW1ib2w9IlVTRCAiLGsubG9jYWxlcy5lbl9VUy5MQ19NT05FVEFSWS5wX3NpZ25fcG9zbj0KMSxrLmxvY2FsZXMuZW5fVVMuTENfTU9ORVRBUlkubl9zaWduX3Bvc249MSxrLmxvY2FsZXMuZW5fVVMuTENfTU9ORVRBUlkubW9uX2dyb3VwaW5nPVszLDNdLGsubG9jYWxlcy5lbl9VUy5MQ19OVU1FUklDLnRob3VzYW5kc19zZXA9IiIsay5sb2NhbGVzLmVuX1VTLkxDX05VTUVSSUMuZ3JvdXBpbmc9W10say5sb2NhbGVzLmVuX0dCPWYoay5sb2NhbGVzLmVuKSxrLmxvY2FsZXMuZW5fR0IuTENfVElNRS5yPSIlbDolTTolUyAlUCAlWiIsay5sb2NhbGVzLmVuX0FVPWYoay5sb2NhbGVzLmVuX0dCKSxrLmxvY2FsZXMuQz1mKGsubG9jYWxlcy5lbiksay5sb2NhbGVzLkMuTENfQ1RZUEUuQ09ERVNFVD0iQU5TSV9YMy40LTE5NjgiLGsubG9jYWxlcy5DLkxDX01PTkVUQVJZPXtpbnRfY3Vycl9zeW1ib2w6IiIsY3VycmVuY3lfc3ltYm9sOiIiLG1vbl9kZWNpbWFsX3BvaW50OiIiLG1vbl90aG91c2FuZHNfc2VwOiIiLG1vbl9ncm91cGluZzpbXSxwX2NzX3ByZWNlZGVzOjEyNyxwX3NlcF9ieV9zcGFjZToxMjcsCm5fY3NfcHJlY2VkZXM6MTI3LG5fc2VwX2J5X3NwYWNlOjEyNyxwX3NpZ25fcG9zbjoxMjcsbl9zaWduX3Bvc246MTI3LHBvc2l0aXZlX3NpZ246IiIsbmVnYXRpdmVfc2lnbjoiIixpbnRfZnJhY19kaWdpdHM6MTI3LGZyYWNfZGlnaXRzOjEyN30say5sb2NhbGVzLkMuTENfTlVNRVJJQz17ZGVjaW1hbF9wb2ludDoiLiIsdGhvdXNhbmRzX3NlcDoiIixncm91cGluZzpbXX0say5sb2NhbGVzLkMuTENfVElNRS5jPSIlYSAlYiAlZSAlSDolTTolUyAlWSIsay5sb2NhbGVzLkMuTENfVElNRS54PSIlbS8lZC8leSIsay5sb2NhbGVzLkMuTENfVElNRS5YPSIlSDolTTolUyIsay5sb2NhbGVzLkMuTENfTUVTU0FHRVMuWUVTRVhQUj0iXlt5WV0iLGsubG9jYWxlcy5DLkxDX01FU1NBR0VTLk5PRVhQUj0iXltuTl0iLGsubG9jYWxlcy5mcj1mKGsubG9jYWxlcy5lbiksay5sb2NhbGVzLmZyLm5wbHVyYWxzPWgsay5sb2NhbGVzLmZyLkxDX1RJTUUuYT0iZGltIGx1biBtYXIgbWVyIGpldSB2ZW4gc2FtIi5zcGxpdCgiICIpLAprLmxvY2FsZXMuZnIuTENfVElNRS5BPSJkaW1hbmNoZSBsdW5kaSBtYXJkaSBtZXJjcmVkaSBqZXVkaSB2ZW5kcmVkaSBzYW1lZGkiLnNwbGl0KCIgIiksay5sb2NhbGVzLmZyLkxDX1RJTUUuYj0iamFuIGZcdTAwZTl2IG1hciBhdnIgbWFpIGp1biBqdWkgYW9cdTAwZmIgc2VwIG9jdCBub3YgZFx1MDBlOWMiLnNwbGl0KCIgIiksay5sb2NhbGVzLmZyLkxDX1RJTUUuQj0iamFudmllciBmXHUwMGU5dnJpZXIgbWFycyBhdnJpbCBtYWkganVpbiBqdWlsbGV0IGFvXHUwMGZidCBzZXB0ZW1icmUgb2N0b2JyZSBub3ZlbWJyZSBkXHUwMGU5Y2VtYnJlIi5zcGxpdCgiICIpLGsubG9jYWxlcy5mci5MQ19USU1FLmM9IiVhICVkICViICVZICVUICVaIixrLmxvY2FsZXMuZnIuTENfVElNRS5wPVsiIiwiIl0say5sb2NhbGVzLmZyLkxDX1RJTUUuUD1bIiIsIiJdLGsubG9jYWxlcy5mci5MQ19USU1FLng9IiVkLiVtLiVZIixrLmxvY2FsZXMuZnIuTENfVElNRS5YPSIlVCIsay5sb2NhbGVzLmZyX0NBPQpmKGsubG9jYWxlcy5mciksay5sb2NhbGVzLmZyX0NBLkxDX1RJTUUueD0iJVktJW0tJWQiKTtrLmxvY2FsZXx8KGsubG9jYWxlPSJlbl9VUyIsZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TJiZlLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJodG1sIilbMF0/ZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiaHRtbCIpWzBdLmdldEF0dHJpYnV0ZU5TJiZlLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJodG1sIilbMF0uZ2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsImxhbmciKT9rLmxvY2FsZT1lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiaHRtbCIpWzBdLmdldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLAoibGFuZyIpOmUuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImh0bWwiKVswXS5sYW5nJiYoay5sb2NhbGU9ZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiaHRtbCIpWzBdLmxhbmcpOmUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImh0bWwiKVswXSYmZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaHRtbCIpWzBdLmxhbmcmJihrLmxvY2FsZT1lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIilbMF0ubGFuZykpO2subG9jYWxlPWsubG9jYWxlLnJlcGxhY2UoIi0iLCJfIik7IShrLmxvY2FsZSBpbiBrLmxvY2FsZXMpJiZrLmxvY2FsZS5yZXBsYWNlKC9fW2EtekEtWl0rJC8sIiIpaW4gay5sb2NhbGVzJiYoay5sb2NhbGU9ay5sb2NhbGUucmVwbGFjZSgvX1thLXpBLVpdKyQvLCIiKSk7ay5sb2NhbGVDYXRlZ29yaWVzfHwoay5sb2NhbGVDYXRlZ29yaWVzPXtMQ19DT0xMQVRFOmsubG9jYWxlLApMQ19DVFlQRTprLmxvY2FsZSxMQ19NT05FVEFSWTprLmxvY2FsZSxMQ19OVU1FUklDOmsubG9jYWxlLExDX1RJTUU6ay5sb2NhbGUsTENfTUVTU0FHRVM6ay5sb2NhbGV9KTtpZihudWxsPT09Y3x8IiI9PT1jKWM9dGhpcy5nZXRlbnYoYSl8fHRoaXMuZ2V0ZW52KCJMQU5HIik7ZWxzZSBpZigiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpKWZvcihlPTA7ZTxjLmxlbmd0aDtlKyspaWYoY1tlXWluIHRoaXMucGhwX2pzLmxvY2FsZXMpe2M9Y1tlXTticmVha31lbHNlIGlmKGU9PT1jLmxlbmd0aC0xKXJldHVybiExO2lmKCIwIj09PWN8fDA9PT1jKXtpZigiTENfQUxMIj09PWEpe2ZvcihiIGluIHRoaXMucGhwX2pzLmxvY2FsZUNhdGVnb3JpZXMpZC5wdXNoKGIrIj0iK3RoaXMucGhwX2pzLmxvY2FsZUNhdGVnb3JpZXNbYl0pO3JldHVybiBkLmpvaW4oIjsiKX1yZXR1cm4gdGhpcy5waHBfanMubG9jYWxlQ2F0ZWdvcmllc1thXX1pZighKGMgaW4KdGhpcy5waHBfanMubG9jYWxlcykpcmV0dXJuITE7aWYoIkxDX0FMTCI9PT1hKWZvcihiIGluIHRoaXMucGhwX2pzLmxvY2FsZUNhdGVnb3JpZXMpdGhpcy5waHBfanMubG9jYWxlQ2F0ZWdvcmllc1tiXT1jO2Vsc2UgdGhpcy5waHBfanMubG9jYWxlQ2F0ZWdvcmllc1thXT1jO3JldHVybiBjfTtuLnN0cmZ0aW1lPWZ1bmN0aW9uKGEsYyl7dGhpcy5waHBfanM9dGhpcy5waHBfanN8fHt9O3RoaXMuc2V0bG9jYWxlKCJMQ19BTEwiLDApO2Zvcih2YXIgYj10aGlzLnBocF9qcyxkPWZ1bmN0aW9uKGEsYixjKXtmb3IoInVuZGVmaW5lZCI9PT10eXBlb2YgYyYmKGM9MTApO3BhcnNlSW50KGEsMTApPGMmJjE8YztjLz0xMClhPWIudG9TdHJpbmcoKSthO3JldHVybiBhLnRvU3RyaW5nKCl9LGU9Yi5sb2NhbGVzW2IubG9jYWxlQ2F0ZWdvcmllcy5MQ19USU1FXS5MQ19USU1FLGY9e2E6ZnVuY3Rpb24oYSl7cmV0dXJuIGUuYVthLmdldERheSgpXX0sQTpmdW5jdGlvbihhKXtyZXR1cm4gZS5BW2EuZ2V0RGF5KCldfSwKYjpmdW5jdGlvbihhKXtyZXR1cm4gZS5iW2EuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24oYSl7cmV0dXJuIGUuQlthLmdldE1vbnRoKCldfSxDOmZ1bmN0aW9uKGEpe3JldHVybiBkKHBhcnNlSW50KGEuZ2V0RnVsbFllYXIoKS8xMDAsMTApLDApfSxkOlsiZ2V0RGF0ZSIsIjAiXSxlOlsiZ2V0RGF0ZSIsIiAiXSxnOmZ1bmN0aW9uKGEpe3JldHVybiBkKHBhcnNlSW50KHRoaXMuRyhhKS8xMDAsMTApLDApfSxHOmZ1bmN0aW9uKGEpe3ZhciBiPWEuZ2V0RnVsbFllYXIoKSxjPXBhcnNlSW50KGYuVihhKSwxMCk7YT1wYXJzZUludChmLlcoYSksMTApO2E+Yz9iKys6MD09PWEmJjUyPD1jJiZiLS07cmV0dXJuIGJ9LEg6WyJnZXRIb3VycyIsIjAiXSxJOmZ1bmN0aW9uKGEpe2E9YS5nZXRIb3VycygpJTEyO3JldHVybiBkKDA9PT1hPzEyOmEsMCl9LGo6ZnVuY3Rpb24oYSl7dmFyIGI9YS1uZXcgRGF0ZSgiIithLmdldEZ1bGxZZWFyKCkrIi8xLzEgR01UIiksYj1iKzZFNCphLmdldFRpbWV6b25lT2Zmc2V0KCk7CmE9cGFyc2VJbnQoYi82RTQvNjAvMjQsMTApKzE7cmV0dXJuIGQoYSwwLDEwMCl9LGs6WyJnZXRIb3VycyIsIjAiXSxsOmZ1bmN0aW9uKGEpe2E9YS5nZXRIb3VycygpJTEyO3JldHVybiBkKDA9PT1hPzEyOmEsIiAiKX0sbTpmdW5jdGlvbihhKXtyZXR1cm4gZChhLmdldE1vbnRoKCkrMSwwKX0sTTpbImdldE1pbnV0ZXMiLCIwIl0scDpmdW5jdGlvbihhKXtyZXR1cm4gZS5wWzEyPD1hLmdldEhvdXJzKCk/MTowXX0sUDpmdW5jdGlvbihhKXtyZXR1cm4gZS5QWzEyPD1hLmdldEhvdXJzKCk/MTowXX0sczpmdW5jdGlvbihhKXtyZXR1cm4gRGF0ZS5wYXJzZShhKS8xRTN9LFM6WyJnZXRTZWNvbmRzIiwiMCJdLHU6ZnVuY3Rpb24oYSl7YT1hLmdldERheSgpO3JldHVybiAwPT09YT83OmF9LFU6ZnVuY3Rpb24oYSl7dmFyIGI9cGFyc2VJbnQoZi5qKGEpLDEwKTthPTYtYS5nZXREYXkoKTtiPXBhcnNlSW50KChiK2EpLzcsMTApO3JldHVybiBkKGIsMCl9LFY6ZnVuY3Rpb24oYSl7dmFyIGI9CnBhcnNlSW50KGYuVyhhKSwxMCksYz0obmV3IERhdGUoIiIrYS5nZXRGdWxsWWVhcigpKyIvMS8xIikpLmdldERheSgpLGI9YisoNDxjfHwxPj1jPzA6MSk7NTM9PT1iJiY0PihuZXcgRGF0ZSgiIithLmdldEZ1bGxZZWFyKCkrIi8xMi8zMSIpKS5nZXREYXkoKT9iPTE6MD09PWImJihiPWYuVihuZXcgRGF0ZSgiIisoYS5nZXRGdWxsWWVhcigpLTEpKyIvMTIvMzEiKSkpO3JldHVybiBkKGIsMCl9LHc6ImdldERheSIsVzpmdW5jdGlvbihhKXt2YXIgYj1wYXJzZUludChmLmooYSksMTApO2E9Ny1mLnUoYSk7Yj1wYXJzZUludCgoYithKS83LDEwKTtyZXR1cm4gZChiLDAsMTApfSx5OmZ1bmN0aW9uKGEpe3JldHVybiBkKGEuZ2V0RnVsbFllYXIoKSUxMDAsMCl9LFk6ImdldEZ1bGxZZWFyIix6OmZ1bmN0aW9uKGEpe2E9YS5nZXRUaW1lem9uZU9mZnNldCgpO3ZhciBiPWQocGFyc2VJbnQoTWF0aC5hYnMoYS82MCksMTApLDApLGM9ZChhJTYwLDApO3JldHVybigwPGE/Ii0iOiIrIikrYisKY30sWjpmdW5jdGlvbihhKXtyZXR1cm4gYS50b1N0cmluZygpLnJlcGxhY2UoL14uKlwoKFteKV0rKVwpJC8sIiQxIil9LCIlIjpmdW5jdGlvbihhKXtyZXR1cm4iJSJ9fSxnPSJ1bmRlZmluZWQiPT09dHlwZW9mIGM/bmV3IERhdGU6Im9iamVjdCI9PT10eXBlb2YgYz9uZXcgRGF0ZShjKTpuZXcgRGF0ZSgxRTMqYyksaD17YzoibG9jYWxlIixEOiIlbS8lZC8leSIsRjoiJXktJW0tJWQiLGg6IiViIixuOiJcbiIscjoibG9jYWxlIixSOiIlSDolTSIsdDoiXHQiLFQ6IiVIOiVNOiVTIix4OiJsb2NhbGUiLFg6ImxvY2FsZSJ9O2EubWF0Y2goLyVbY0RGaG5yUnRUeFhdLyk7KWE9YS5yZXBsYWNlKC8lKFtjREZobnJSdFR4WF0pL2csZnVuY3Rpb24oYSxiKXt2YXIgYz1oW2JdO3JldHVybiJsb2NhbGUiPT09Yz9lW2JdOmN9KTtyZXR1cm4gYS5yZXBsYWNlKC8lKFthQWJCQ2RlZ0dISWprbG1NcFBzU3VVVndXeVl6WiVdKS9nLGZ1bmN0aW9uKGEsYil7dmFyIGM9ZltiXTtyZXR1cm4ic3RyaW5nIj09PQp0eXBlb2YgYz9nW2NdKCk6ImZ1bmN0aW9uIj09PXR5cGVvZiBjP2MoZyk6Im9iamVjdCI9PT10eXBlb2YgYyYmInN0cmluZyI9PT10eXBlb2YgY1swXT9kKGdbY1swXV0oKSxjWzFdKTpifSl9O24uc3RydG90aW1lPWZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gYihhKXt2YXIgYj1hLnNwbGl0KCIgIik7YT1iWzBdO3ZhciBjPWJbMV0uc3Vic3RyaW5nKDAsMyksZD0vXGQrLy50ZXN0KGEpLGU9KCJsYXN0Ij09PWE/LTE6MSkqKCJhZ28iPT09YlsyXT8tMToxKTtkJiYoZSo9cGFyc2VJbnQoYSwxMCkpO2lmKGguaGFzT3duUHJvcGVydHkoYykmJiFiWzFdLm1hdGNoKC9ebW9uKGRheXxcLik/JC9pKSlyZXR1cm4gZlsic2V0IitoW2NdXShmWyJnZXQiK2hbY11dKCkrZSk7aWYoIndlZSI9PT1jKXJldHVybiBmLnNldERhdGUoZi5nZXREYXRlKCkrNyplKTtpZigibmV4dCI9PT1hfHwibGFzdCI9PT1hKWI9ZSxjPWdbY10sInVuZGVmaW5lZCIhPT10eXBlb2YgYyYmKGMtPWYuZ2V0RGF5KCksMD09PQpjP2M9NypiOjA8YyYmImxhc3QiPT09YT9jLT03OjA+YyYmIm5leHQiPT09YSYmKGMrPTcpLGYuc2V0RGF0ZShmLmdldERhdGUoKStjKSk7ZWxzZSBpZighZClyZXR1cm4hMTtyZXR1cm4hMH12YXIgZCxlLGYsZyxoLGw7aWYoIWEpcmV0dXJuITE7YT1hLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKS5yZXBsYWNlKC9cc3syLH0vZywiICIpLnJlcGxhY2UoL1tcdFxyXG5dL2csIiIpLnRvTG93ZXJDYXNlKCk7aWYoKGQ9YS5tYXRjaCgvXihcZHsxLDR9KShbXC1cLlwvXDpdKShcZHsxLDJ9KShbXC1cLlwvXDpdKShcZHsxLDR9KSg/OlxzKFxkezEsMn0pOihcZHsyfSk/Oj8oXGR7Mn0pPyk/KD86XHMoW0EtWl0rKT8pPyQvKSkmJmRbMl09PT1kWzRdKWlmKDE5MDE8ZFsxXSlzd2l0Y2goZFsyXSl7Y2FzZSAiLSI6cmV0dXJuIDEyPGRbM118fDMxPGRbNV0/ITE6bmV3IERhdGUoZFsxXSxwYXJzZUludChkWzNdLDEwKS0xLGRbNV0sZFs2XXx8MCxkWzddfHwwLGRbOF18fDAsZFs5XXx8MCkvMUUzOwpjYXNlICIuIjpyZXR1cm4hMTtjYXNlICIvIjpyZXR1cm4gMTI8ZFszXXx8MzE8ZFs1XT8hMTpuZXcgRGF0ZShkWzFdLHBhcnNlSW50KGRbM10sMTApLTEsZFs1XSxkWzZdfHwwLGRbN118fDAsZFs4XXx8MCxkWzldfHwwKS8xRTN9ZWxzZSBpZigxOTAxPGRbNV0pc3dpdGNoKGRbMl0pe2Nhc2UgIi0iOnJldHVybiAxMjxkWzNdfHwzMTxkWzFdPyExOm5ldyBEYXRlKGRbNV0scGFyc2VJbnQoZFszXSwxMCktMSxkWzFdLGRbNl18fDAsZFs3XXx8MCxkWzhdfHwwLGRbOV18fDApLzFFMztjYXNlICIuIjpyZXR1cm4gMTI8ZFszXXx8MzE8ZFsxXT8hMTpuZXcgRGF0ZShkWzVdLHBhcnNlSW50KGRbM10sMTApLTEsZFsxXSxkWzZdfHwwLGRbN118fDAsZFs4XXx8MCxkWzldfHwwKS8xRTM7Y2FzZSAiLyI6cmV0dXJuIDEyPGRbMV18fDMxPGRbM10/ITE6bmV3IERhdGUoZFs1XSxwYXJzZUludChkWzFdLDEwKS0xLGRbM10sZFs2XXx8MCxkWzddfHwwLGRbOF18fDAsZFs5XXx8MCkvMUUzfWVsc2Ugc3dpdGNoKGRbMl0pe2Nhc2UgIi0iOmlmKDEyPApkWzNdfHwzMTxkWzVdfHw3MD5kWzFdJiYzODxkWzFdKXJldHVybiExO2U9MDw9ZFsxXSYmMzg+PWRbMV0/K2RbMV0rMkUzOmRbMV07cmV0dXJuIG5ldyBEYXRlKGUscGFyc2VJbnQoZFszXSwxMCktMSxkWzVdLGRbNl18fDAsZFs3XXx8MCxkWzhdfHwwLGRbOV18fDApLzFFMztjYXNlICIuIjppZig3MDw9ZFs1XSlyZXR1cm4gMTI8ZFszXXx8MzE8ZFsxXT8hMTpuZXcgRGF0ZShkWzVdLHBhcnNlSW50KGRbM10sMTApLTEsZFsxXSxkWzZdfHwwLGRbN118fDAsZFs4XXx8MCxkWzldfHwwKS8xRTM7aWYoNjA+ZFs1XSYmIWRbNl0pe2lmKDIzPGRbMV18fDU5PGRbM10pcmV0dXJuITE7ZT1uZXcgRGF0ZTtyZXR1cm4gbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSxlLmdldERhdGUoKSxkWzFdfHwwLGRbM118fDAsZFs1XXx8MCxkWzldfHwwKS8xRTN9cmV0dXJuITE7Y2FzZSAiLyI6aWYoMTI8ZFsxXXx8MzE8ZFszXXx8NzA+ZFs1XSYmMzg8ZFs1XSlyZXR1cm4hMTtlPTA8PQpkWzVdJiYzOD49ZFs1XT8rZFs1XSsyRTM6ZFs1XTtyZXR1cm4gbmV3IERhdGUoZSxwYXJzZUludChkWzFdLDEwKS0xLGRbM10sZFs2XXx8MCxkWzddfHwwLGRbOF18fDAsZFs5XXx8MCkvMUUzO2Nhc2UgIjoiOmlmKDIzPGRbMV18fDU5PGRbM118fDU5PGRbNV0pcmV0dXJuITE7ZT1uZXcgRGF0ZTtyZXR1cm4gbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSxlLmdldERhdGUoKSxkWzFdfHwwLGRbM118fDAsZFs1XXx8MCkvMUUzfWlmKCJub3ciPT09YSlyZXR1cm4gbnVsbD09PWN8fGlzTmFOKGMpPyhuZXcgRGF0ZSkuZ2V0VGltZSgpLzFFM3wwOmN8MDtpZighaXNOYU4oZD1EYXRlLnBhcnNlKGEpKSlyZXR1cm4gZC8xRTN8MDtmPWM/bmV3IERhdGUoMUUzKmMpOm5ldyBEYXRlO2c9e3N1bjowLG1vbjoxLHR1ZToyLHdlZDozLHRodTo0LGZyaTo1LHNhdDo2fTtoPXt5ZWE6IkZ1bGxZZWFyIixtb246Ik1vbnRoIixkYXk6IkRhdGUiLGhvdToiSG91cnMiLG1pbjoiTWludXRlcyIsCnNlYzoiU2Vjb25kcyJ9O2Q9YS5tYXRjaChSZWdFeHAoIihbKy1dP1xcZCtcXHMoeWVhcnM/fG1vbnRocz98d2Vla3M/fGRheXM/fGhvdXJzP3xtaW51dGVzP3xtaW58c2Vjb25kcz98c2VjfHN1bmRheXxzdW5cXC4/fG1vbmRheXxtb25cXC4/fHR1ZXNkYXl8dHVlXFwuP3x3ZWRuZXNkYXl8d2VkXFwuP3x0aHVyc2RheXx0aHVcXC4/fGZyaWRheXxmcmlcXC4/fHNhdHVyZGF5fHNhdFxcLj8pfChsYXN0fG5leHQpXFxzKHllYXJzP3xtb250aHM/fHdlZWtzP3xkYXlzP3xob3Vycz98bWludXRlcz98bWlufHNlY29uZHM/fHNlY3xzdW5kYXl8c3VuXFwuP3xtb25kYXl8bW9uXFwuP3x0dWVzZGF5fHR1ZVxcLj98d2VkbmVzZGF5fHdlZFxcLj98dGh1cnNkYXl8dGh1XFwuP3xmcmlkYXl8ZnJpXFwuP3xzYXR1cmRheXxzYXRcXC4/KSkoXFxzYWdvKT8iLCJnaSIpKTtpZighZClyZXR1cm4hMTtsPTA7Zm9yKGU9ZC5sZW5ndGg7bDxlO2wrKylpZighYihkW2xdKSlyZXR1cm4hMTtyZXR1cm4gZi5nZXRUaW1lKCkvCjFFM307bWFrZVRpbWVTdGFtcD1mdW5jdGlvbihhKXtpZighYSlyZXR1cm4gTWF0aC5mbG9vcigobmV3IERhdGUpLmdldFRpbWUoKS8xRTMpO2lmKGlzTmFOKGEpKXJldHVybiBhPW4uc3RydG90aW1lKGEpLC0xPT1hfHwhMT09PWE/TWF0aC5mbG9vcigobmV3IERhdGUpLmdldFRpbWUoKS8xRTMpOmE7YT1uZXcgU3RyaW5nKGEpO3JldHVybiAxND09YS5sZW5ndGg/TWF0aC5mbG9vcigobmV3IERhdGUoYS5zdWJzdHIoMCw0KSxhLnN1YnN0cig0LDIpLTEsYS5zdWJzdHIoNiwyKSxhLnN1YnN0cig4LDIpLGEuc3Vic3RyKDEwLDIpKSkuZ2V0VGltZSgpLzFFMyk6cGFyc2VJbnQoYSl9O2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJtb2RpZmllciIsImRhdGVfZm9ybWF0IixmdW5jdGlvbihhLGMsYil7cmV0dXJuIGE/bi5zdHJmdGltZShjP2M6IiViICVlLCAlWSIsbWFrZVRpbWVTdGFtcChhP2E6YikpOiIifSk7bi5nZXRfaHRtbF90cmFuc2xhdGlvbl90YWJsZT1mdW5jdGlvbihhLApjKXt2YXIgYj17fSxkPXt9LGUsZj17fSxnPXt9LGg9e30sbD17fTtmWzBdPSJIVE1MX1NQRUNJQUxDSEFSUyI7ZlsxXT0iSFRNTF9FTlRJVElFUyI7Z1swXT0iRU5UX05PUVVPVEVTIjtnWzJdPSJFTlRfQ09NUEFUIjtnWzNdPSJFTlRfUVVPVEVTIjtoPWlzTmFOKGEpP2E/YS50b1VwcGVyQ2FzZSgpOiJIVE1MX1NQRUNJQUxDSEFSUyI6ZlthXTtsPWlzTmFOKGMpP2M/Yy50b1VwcGVyQ2FzZSgpOiJFTlRfQ09NUEFUIjpnW2NdO2lmKCJIVE1MX1NQRUNJQUxDSEFSUyIhPT1oJiYiSFRNTF9FTlRJVElFUyIhPT1oKXRocm93IEVycm9yKCJUYWJsZTogIitoKyIgbm90IHN1cHBvcnRlZCIpO2JbIjM4Il09IiZhbXA7IjsiSFRNTF9FTlRJVElFUyI9PT1oJiYoYlsiMTYwIl09IiZuYnNwOyIsYlsiMTYxIl09IiZpZXhjbDsiLGJbIjE2MiJdPSImY2VudDsiLGJbIjE2MyJdPSImcG91bmQ7IixiWyIxNjQiXT0iJmN1cnJlbjsiLGJbIjE2NSJdPSImeWVuOyIsYlsiMTY2Il09IiZicnZiYXI7IiwKYlsiMTY3Il09IiZzZWN0OyIsYlsiMTY4Il09IiZ1bWw7IixiWyIxNjkiXT0iJmNvcHk7IixiWyIxNzAiXT0iJm9yZGY7IixiWyIxNzEiXT0iJmxhcXVvOyIsYlsiMTcyIl09IiZub3Q7IixiWyIxNzMiXT0iJnNoeTsiLGJbIjE3NCJdPSImcmVnOyIsYlsiMTc1Il09IiZtYWNyOyIsYlsiMTc2Il09IiZkZWc7IixiWyIxNzciXT0iJnBsdXNtbjsiLGJbIjE3OCJdPSImc3VwMjsiLGJbIjE3OSJdPSImc3VwMzsiLGJbIjE4MCJdPSImYWN1dGU7IixiWyIxODEiXT0iJm1pY3JvOyIsYlsiMTgyIl09IiZwYXJhOyIsYlsiMTgzIl09IiZtaWRkb3Q7IixiWyIxODQiXT0iJmNlZGlsOyIsYlsiMTg1Il09IiZzdXAxOyIsYlsiMTg2Il09IiZvcmRtOyIsYlsiMTg3Il09IiZyYXF1bzsiLGJbIjE4OCJdPSImZnJhYzE0OyIsYlsiMTg5Il09IiZmcmFjMTI7IixiWyIxOTAiXT0iJmZyYWMzNDsiLGJbIjE5MSJdPSImaXF1ZXN0OyIsYlsiMTkyIl09IiZBZ3JhdmU7IixiWyIxOTMiXT0iJkFhY3V0ZTsiLApiWyIxOTQiXT0iJkFjaXJjOyIsYlsiMTk1Il09IiZBdGlsZGU7IixiWyIxOTYiXT0iJkF1bWw7IixiWyIxOTciXT0iJkFyaW5nOyIsYlsiMTk4Il09IiZBRWxpZzsiLGJbIjE5OSJdPSImQ2NlZGlsOyIsYlsiMjAwIl09IiZFZ3JhdmU7IixiWyIyMDEiXT0iJkVhY3V0ZTsiLGJbIjIwMiJdPSImRWNpcmM7IixiWyIyMDMiXT0iJkV1bWw7IixiWyIyMDQiXT0iJklncmF2ZTsiLGJbIjIwNSJdPSImSWFjdXRlOyIsYlsiMjA2Il09IiZJY2lyYzsiLGJbIjIwNyJdPSImSXVtbDsiLGJbIjIwOCJdPSImRVRIOyIsYlsiMjA5Il09IiZOdGlsZGU7IixiWyIyMTAiXT0iJk9ncmF2ZTsiLGJbIjIxMSJdPSImT2FjdXRlOyIsYlsiMjEyIl09IiZPY2lyYzsiLGJbIjIxMyJdPSImT3RpbGRlOyIsYlsiMjE0Il09IiZPdW1sOyIsYlsiMjE1Il09IiZ0aW1lczsiLGJbIjIxNiJdPSImT3NsYXNoOyIsYlsiMjE3Il09IiZVZ3JhdmU7IixiWyIyMTgiXT0iJlVhY3V0ZTsiLGJbIjIxOSJdPSImVWNpcmM7IiwKYlsiMjIwIl09IiZVdW1sOyIsYlsiMjIxIl09IiZZYWN1dGU7IixiWyIyMjIiXT0iJlRIT1JOOyIsYlsiMjIzIl09IiZzemxpZzsiLGJbIjIyNCJdPSImYWdyYXZlOyIsYlsiMjI1Il09IiZhYWN1dGU7IixiWyIyMjYiXT0iJmFjaXJjOyIsYlsiMjI3Il09IiZhdGlsZGU7IixiWyIyMjgiXT0iJmF1bWw7IixiWyIyMjkiXT0iJmFyaW5nOyIsYlsiMjMwIl09IiZhZWxpZzsiLGJbIjIzMSJdPSImY2NlZGlsOyIsYlsiMjMyIl09IiZlZ3JhdmU7IixiWyIyMzMiXT0iJmVhY3V0ZTsiLGJbIjIzNCJdPSImZWNpcmM7IixiWyIyMzUiXT0iJmV1bWw7IixiWyIyMzYiXT0iJmlncmF2ZTsiLGJbIjIzNyJdPSImaWFjdXRlOyIsYlsiMjM4Il09IiZpY2lyYzsiLGJbIjIzOSJdPSImaXVtbDsiLGJbIjI0MCJdPSImZXRoOyIsYlsiMjQxIl09IiZudGlsZGU7IixiWyIyNDIiXT0iJm9ncmF2ZTsiLGJbIjI0MyJdPSImb2FjdXRlOyIsYlsiMjQ0Il09IiZvY2lyYzsiLGJbIjI0NSJdPSImb3RpbGRlOyIsCmJbIjI0NiJdPSImb3VtbDsiLGJbIjI0NyJdPSImZGl2aWRlOyIsYlsiMjQ4Il09IiZvc2xhc2g7IixiWyIyNDkiXT0iJnVncmF2ZTsiLGJbIjI1MCJdPSImdWFjdXRlOyIsYlsiMjUxIl09IiZ1Y2lyYzsiLGJbIjI1MiJdPSImdXVtbDsiLGJbIjI1MyJdPSImeWFjdXRlOyIsYlsiMjU0Il09IiZ0aG9ybjsiLGJbIjI1NSJdPSImeXVtbDsiKTsiRU5UX05PUVVPVEVTIiE9PWwmJihiWyIzNCJdPSImcXVvdDsiKTsiRU5UX1FVT1RFUyI9PT1sJiYoYlsiMzkiXT0iJiMzOTsiKTtiWyI2MCJdPSImbHQ7IjtiWyI2MiJdPSImZ3Q7Ijtmb3IoZSBpbiBiKWIuaGFzT3duUHJvcGVydHkoZSkmJihkW1N0cmluZy5mcm9tQ2hhckNvZGUoZSldPWJbZV0pO3JldHVybiBkfTtuLmh0bWxlbnRpdGllcz1mdW5jdGlvbihhLGMsYixkKXt2YXIgZT10aGlzLmdldF9odG1sX3RyYW5zbGF0aW9uX3RhYmxlKCJIVE1MX0VOVElUSUVTIixjKTthPW51bGw9PWE/IiI6YSsiIjtpZighZSlyZXR1cm4hMTtjJiYiRU5UX1FVT1RFUyI9PT0KYyYmKGVbIiciXT0iJiMwMzk7Iik7ZD1udWxsPT1kfHwhIWQ7Yz1SZWdFeHAoIiYoPzojXFxkK3wjeFtcXGRhLWZdK3xbYS16QS1aXVtcXGRhLXpdKik7fFsiK09iamVjdC5rZXlzKGUpLmpvaW4oIiIpLnJlcGxhY2UoLyhbKClbXF17fVwtLiorP14kfFwvXFxdKS9nLCJcXCQxIikrIl0iLCJnIik7cmV0dXJuIGEucmVwbGFjZShjLGZ1bmN0aW9uKGEpe3JldHVybiAxPGEubGVuZ3RoP2Q/ZVsiJiJdK2Euc3Vic3RyKDEpOmE6ZVthXX0pfTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLCJlc2NhcGUiLGZ1bmN0aW9uKGEsYyxiLGQpe2E9bmV3IFN0cmluZyhhKTtiPWJ8fCJVVEYtOCI7ZD0idW5kZWZpbmVkIiE9dHlwZW9mIGQ/Qm9vbGVhbihkKTohMDtzd2l0Y2goY3x8Imh0bWwiKXtjYXNlICJodG1sIjpyZXR1cm4gZCYmKGE9YS5yZXBsYWNlKC8mL2csIiZhbXA7IikpLGEucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvJy9nLAoiJiMwMzk7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKTtjYXNlICJodG1sYWxsIjpyZXR1cm4gbi5odG1sZW50aXRpZXMoYSwzLGIpO2Nhc2UgInVybCI6cmV0dXJuIG4ucmF3dXJsZW5jb2RlKGEpO2Nhc2UgInVybHBhdGhpbmZvIjpyZXR1cm4gbi5yYXd1cmxlbmNvZGUoYSkucmVwbGFjZSgvJTJGL2csIi8iKTtjYXNlICJxdW90ZXMiOnJldHVybiBhLnJlcGxhY2UoLyhefFteXFxdKScvZywiJDFcXCciKTtjYXNlICJoZXgiOmM9IiI7Zm9yKGI9MDtiPGEubGVuZ3RoOysrYiljKz0iJSIrbi5iaW4yaGV4KGEuc3Vic3RyKGIsMSkpO3JldHVybiBjO2Nhc2UgImhleGVudGl0eSI6Yz0iIjtmb3IoYj0wO2I8YS5sZW5ndGg7KytiKWMrPSImI3giK24uYmluMmhleChhLnN1YnN0cihiLDEpKS50b1VwcGVyQ2FzZSgpKyI7IjtyZXR1cm4gYztjYXNlICJkZWNlbnRpdHkiOmM9IiI7Zm9yKGI9MDtiPGEubGVuZ3RoOysrYiljKz0iJiMiK24ub3JkKGEuc3Vic3RyKGIsMSkpKyI7IjtyZXR1cm4gYzsKY2FzZSAibWFpbCI6cmV0dXJuIGEucmVwbGFjZSgvQC9nLCIgW0FUXSAiKS5yZXBsYWNlKC9bLl0vZywiIFtET1RdICIpO2Nhc2UgIm5vbnN0ZCI6Yz0iIjtmb3IoYj0wO2I8YS5sZW5ndGg7KytiKWQ9bi5vcmQoYS5zdWJzdHIoYiwxKSksYz0xMjY8PWQ/YysoIiYjIitkKyI7Iik6YythLnN1YnN0cihiLDEpO3JldHVybiBjO2Nhc2UgImphdmFzY3JpcHQiOnJldHVybiBhLnJlcGxhY2UoL1xcL2csIlxcXFwiKS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoLyIvZywnXFwiJykucmVwbGFjZSgvXHIvZywiXFxyIikucmVwbGFjZSgvXG4vZywiXFxuIikucmVwbGFjZSgvPFwvL2csIjwvIil9cmV0dXJuIGF9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLCJpbmRlbnQiLGZ1bmN0aW9uKGEsYyxiKXthPW5ldyBTdHJpbmcoYSk7Yz1jP2M6NDtiPWI/YjoiICI7Zm9yKHZhciBkPSIiO2MtLTspZCs9YjtjPWEubWF0Y2goL1xuKyQvKTtyZXR1cm4gZCthLnJlcGxhY2UoL1xuKyQvLAoiIikucmVwbGFjZSgvXG4vZywiXG4iK2QpKyhjP2NbMF06IiIpfSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oIm1vZGlmaWVyIiwibG93ZXIiLGZ1bmN0aW9uKGEpe3JldHVybihuZXcgU3RyaW5nKGEpKS50b0xvd2VyQ2FzZSgpfSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oIm1vZGlmaWVyIiwibmwyYnIiLGZ1bmN0aW9uKGEpe3JldHVybihuZXcgU3RyaW5nKGEpKS5yZXBsYWNlKC9cbi9nLCI8YnIgLz5cbiIpfSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oIm1vZGlmaWVyIiwicmVnZXhfcmVwbGFjZSIsZnVuY3Rpb24oYSxjLGIpe2M9Yy5tYXRjaCgvXiAqXC8oLiopXC8oLiopICokLyk7cmV0dXJuKG5ldyBTdHJpbmcoYSkpLnJlcGxhY2UoUmVnRXhwKGNbMV0sImciKygxPGMubGVuZ3RoP2NbMl06IiIpKSxiKX0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJtb2RpZmllciIsInJlcGxhY2UiLGZ1bmN0aW9uKGEsYyxiKXtpZighYylyZXR1cm4gYTthPW5ldyBTdHJpbmcoYSk7CmM9bmV3IFN0cmluZyhjKTtiPW5ldyBTdHJpbmcoYik7Zm9yKHZhciBkPSIiLGU9LTEsZT1hLmluZGV4T2YoYyk7MDw9ZTtlPWEuaW5kZXhPZihjKSlkKz1hLnNsaWNlKDAsZSkrYixlKz1jLmxlbmd0aCxhPWEuc2xpY2UoZSk7cmV0dXJuIGQrYX0pO2gucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2luKCJtb2RpZmllciIsInNwYWNpZnkiLGZ1bmN0aW9uKGEsYyl7Y3x8KGM9IiAiKTtyZXR1cm4obmV3IFN0cmluZyhhKSkucmVwbGFjZSgvKFxufC4pKD8hJCkvZywiJDEiK2MpfSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oIm1vZGlmaWVyIiwic3RyaW5nX2Zvcm1hdCIsZnVuY3Rpb24oYSxjKXtyZXR1cm4gbi5zcHJpbnRmKGMsYSl9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLCJzdHJpcCIsZnVuY3Rpb24oYSxjKXtjPWM/YzoiICI7cmV0dXJuKG5ldyBTdHJpbmcoYSkpLnJlcGxhY2UoL1tcc10rL2csYyl9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLAoic3RyaXBfdGFncyIsZnVuY3Rpb24oYSxjKXtjPW51bGw9PWM/ITA6YztyZXR1cm4obmV3IFN0cmluZyhhKSkucmVwbGFjZSgvPFtePl0qPz4vZyxjPyIgIjoiIil9KTtoLnByb3RvdHlwZS5yZWdpc3RlclBsdWdpbigibW9kaWZpZXIiLCJ0cnVuY2F0ZSIsZnVuY3Rpb24oYSxjLGIsZCxlKXthPW5ldyBTdHJpbmcoYSk7Yz1jP2M6ODA7Yj1udWxsIT1iP2I6Ii4uLiI7aWYoYS5sZW5ndGg8PWMpcmV0dXJuIGE7Yy09TWF0aC5taW4oYyxiLmxlbmd0aCk7aWYoZSlyZXR1cm4gYS5zbGljZSgwLE1hdGguZmxvb3IoYy8yKSkrYithLnNsaWNlKGEubGVuZ3RoLU1hdGguZmxvb3IoYy8yKSk7ZHx8KGE9YS5zbGljZSgwLGMrMSkucmVwbGFjZSgvXHMrPyhcUyspPyQvLCIiKSk7cmV0dXJuIGEuc2xpY2UoMCxjKStifSk7aC5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4oIm1vZGlmaWVyIiwidXBwZXIiLGZ1bmN0aW9uKGEpe3JldHVybihuZXcgU3RyaW5nKGEpKS50b1VwcGVyQ2FzZSgpfSl9KSgpOwo=]]></data>
	</file>
	<file>
	  <filename>/js/uikit</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/uikit/uikit-icons.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIFVJa2l0IDMuMTUuMSB8IGh0dHBzOi8vd3d3LmdldHVpa2l0LmNvbSB8IChjKSAyMDE0IC0gMjAyMiBZT090aGVtZSB8IE1JVCBMaWNlbnNlICovCgooZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkgewogICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOgogICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKCd1aWtpdGljb25zJywgZmFjdG9yeSkgOgogICAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLlVJa2l0SWNvbnMgPSBmYWN0b3J5KCkpOwp9KSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7CgogICAgZnVuY3Rpb24gcGx1Z2luKFVJa2l0KSB7CiAgICAgIGlmIChwbHVnaW4uaW5zdGFsbGVkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBVSWtpdC5pY29uLmFkZCh7CiAgICAgICAgIjUwMHB4IjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTkuNjI0LDExLjg2NmMtMC4xNDEsMC4xMzIsMC40NzksMC42NTgsMC42NjIsMC40MThjMC4wNTEtMC4wNDYsMC42MDctMC42MSwwLjY2Mi0wLjY2NGMwLDAsMC43MzgsMC43MTksMC44MTQsMC43MTkgYzAuMSwwLDAuMjA3LTAuMDU1LDAuMzIyLTAuMTdjMC4yNy0wLjI2OSwwLjEzNS0wLjQxNiwwLjA2Ni0wLjQ5NWwtMC42MzEtMC42MTZsMC42NTgtMC42NjhjMC4xNDYtMC4xNTYsMC4wMjEtMC4zMTQtMC4xLTAuNDQ5IGMtMC4xODItMC4xOC0wLjM1OS0wLjIyNi0wLjQ3MS0wLjEyNWwtMC42NTYsMC42NTRsLTAuNjU0LTAuNjU0Yy0wLjAzMy0wLjAzNC0wLjA4LTAuMDQ1LTAuMTI0LTAuMDQ1IGMtMC4wNzksMC0wLjE5MSwwLjA2OC0wLjMwNywwLjE4MWMtMC4yMDIsMC4yMDItMC4yNDcsMC4zNTEtMC4xMzMsMC40NjJsMC42NjUsMC42NjVMOS42MjQsMTEuODY2elwiLz48cGF0aCBkPVwiTTExLjA2NiwyLjg4NGMtMS4wNjEsMC0yLjE4NSwwLjI0OC0zLjAxMSwwLjYwNGMtMC4wODcsMC4wMzQtMC4xNDEsMC4xMDYtMC4xNSwwLjIwNUM3Ljg5MywzLjc4NCw3LjkxOSwzLjkwOSw3Ljk4Miw0LjA2NiBjMC4wNSwwLjEzNiwwLjE4NywwLjQ3NCwwLjQ1MiwwLjM3MmMwLjg0NC0wLjMyNiwxLjc3OS0wLjUwNywyLjYzMy0wLjUwN2MwLjk2MywwLDEuOSwwLjE5MSwyLjc4MSwwLjU2NCBjMC42OTUsMC4yOTIsMS4zNTcsMC43MTksMi4wNzgsMS4zNGMwLjA1MSwwLjA0NCwwLjEwNSwwLjA2OCwwLjE2NCwwLjA2OGMwLjE0MywwLDAuMjczLTAuMTM3LDAuMzg5LTAuMjcxIGMwLjE5MS0wLjIxNCwwLjMyNC0wLjM5NSwwLjEzNS0wLjU3NWMtMC42ODYtMC42NTQtMS40MzYtMS4xMzgtMi4zNjMtMS41MzNDMTMuMjQsMy4wOTcsMTIuMTY4LDIuODg0LDExLjA2NiwyLjg4NHpcIi8+PHBhdGggZD1cIk0xNi40MywxNS43NDdjLTAuMDkyLTAuMDI4LTAuMjQyLDAuMDUtMC4zMDksMC4xMTlsMCwwYy0wLjY1MiwwLjY1Mi0xLjQyLDEuMTY5LTIuMjY4LDEuNTIxIGMtMC44NzcsMC4zNzEtMS44MTQsMC41NTEtMi43NzksMC41NTFjLTAuOTYxLDAtMS44OTYtMC4xODktMi43NzUtMC41NjRjLTAuODQ4LTAuMzYtMS42MTItMC44NzktMi4yNjgtMS41MyBjLTAuNjgyLTAuNjg4LTEuMTk2LTEuNDU1LTEuNTI5LTIuMjY4Yy0wLjMyNS0wLjc5OS0wLjQ3MS0xLjY0My0wLjQ3MS0xLjY0M2MtMC4wNDUtMC4yNC0wLjI1OC0wLjI0OS0wLjU2Ny0wLjIwMyBjLTAuMTI4LDAuMDIxLTAuNTE5LDAuMDc5LTAuNDgzLDAuMzZ2MC4wMWMwLjEwNSwwLjY0NCwwLjI4OSwxLjI4NCwwLjU0NSwxLjg5NWMwLjQxNywwLjk2OSwxLjAwMiwxLjg0OSwxLjc1NiwyLjYwNCBjMC43NTcsMC43NTQsMS42MzYsMS4zNCwyLjYwNCwxLjc1N0M4LjkwMSwxOC43ODUsOS45NywxOSwxMS4wODgsMTljMS4xMDQsMCwyLjE4Ni0wLjIxNSwzLjE4OC0wLjY0NSBjMS44MzgtMC44OTYsMi42MDQtMS43NTcsMi42MDQtMS43NTdjMC4xODItMC4yMDQsMC4yMjctMC4zMTctMC4xLTAuNjQzQzE2Ljc3OSwxNS45NTYsMTYuNTI1LDE1Ljc3NCwxNi40MywxNS43NDd6XCIvPjxwYXRoIGQ9XCJNNS42MzMsMTMuMjg3YzAuMjkzLDAuNzEsMC43MjMsMS4zNDEsMS4yNjIsMS44ODJjMC41NCwwLjU0LDEuMTcyLDAuOTcxLDEuODgyLDEuMjY0YzAuNzMxLDAuMzAzLDEuNTA5LDAuNDYxLDIuMjk4LDAuNDYxIGMwLjgwMSwwLDEuNTc4LTAuMTU4LDIuMjk3LTAuNDYxYzAuNzExLTAuMjkzLDEuMzQ0LTAuNzI0LDEuODgzLTEuMjY0YzAuNTQzLTAuNTQxLDAuOTcxLTEuMTcyLDEuMjY0LTEuODgyIGMwLjMxNC0wLjcyMSwwLjQ2My0xLjUsMC40NjMtMi4yOThjMC0wLjc5LTAuMTQ4LTEuNTY5LTAuNDYzLTIuMjg5Yy0wLjI5My0wLjY5OS0wLjcyMS0xLjMyOS0xLjI2NC0xLjg4MSBjLTAuNTM5LTAuNTQxLTEuMTcyLTAuOTU5LTEuODY3LTEuMjYzYy0wLjcyMS0wLjMwMy0xLjUtMC40NjEtMi4yOTktMC40NjFjLTAuODAyLDAtMS42MTMsMC4xNTktMi4zMjIsMC40NjEgYy0wLjU3NywwLjI1LTEuNTQ0LDAuODY3LTIuMTE5LDEuNDU0djAuMDEyVjIuMTA4aDguMTZDMTUuMSwyLjEwNCwxNS4xLDEuNjksMTUuMSwxLjU1MkMxNS4xLDEuNDE3LDE1LjEsMSwxNC44MDksMUg1LjkxNSBDNS42NzYsMSw1LjUyNywxLjE5Miw1LjUyNywxLjM4NHY2Ljg0YzAsMC4yMTQsMC4yNzMsMC4zNzIsMC41MjksMC40MjhjMC41LDAuMTA1LDAuNjE0LTAuMDU2LDAuNzM3LTAuMjI0bDAsMCBjMC4xOC0wLjI3MywwLjc3Ni0wLjg4NCwwLjc4Ny0wLjg5NGMwLjkwMS0wLjkwNSwyLjExNy0xLjQwOCwzLjQxNi0xLjQwOGMxLjI4NSwwLDIuNSwwLjUwMSwzLjQxMiwxLjQwOCBjMC45MTQsMC45MTQsMS40MDgsMi4xMjIsMS40MDgsMy40MDVjMCwxLjI4OC0wLjUwOCwyLjQ5Ni0xLjQwOCwzLjQwNWMtMC45LDAuODk2LTIuMTUyLDEuNDA2LTMuNDM4LDEuNDA2IGMtMC44NzcsMC0xLjcxMS0wLjIyOS0yLjQzMy0wLjY3MXYtNC4xNThjMC0wLjU1MywwLjIzNy0xLjE1MSwwLjY0My0xLjYxNGMwLjQ2Mi0wLjUxOSwxLjA5NC0wLjc5OSwxLjc4Mi0wLjc5OSBjMC42NjQsMCwxLjI5MywwLjI1MywxLjc1OCwwLjcxNWMwLjQ1OSwwLjQ1OSwwLjcwOSwxLjA3MSwwLjcwOSwxLjcyM2MwLDEuMzg1LTEuMDk0LDIuNDY4LTIuNDg4LDIuNDY4IGMtMC4yNzMsMC0wLjc2OS0wLjEyMS0wLjc4MS0wLjEyNWMtMC4yODEtMC4wODctMC40MDUsMC4zMDYtMC40MzgsMC40MzZjLTAuMTU5LDAuNDk2LDAuMDc5LDAuNTg1LDAuMTIzLDAuNjA3IGMwLjQ1MiwwLjEzNywwLjc0MywwLjE1NywxLjEyOSwwLjE1N2MxLjk3MywwLDMuNTcyLTEuNiwzLjU3Mi0zLjU3YzAtMS45NjQtMS42LTMuNTUyLTMuNTcyLTMuNTUyYy0wLjk3LDAtMS44NzIsMC4zNi0yLjU0NiwxLjAzOCBjLTAuNjU2LDAuNjMxLTEuMDI3LDEuNDg3LTEuMDI3LDIuMzIydjMuNDM4di0wLjAxMWMtMC4zNzItMC40Mi0wLjczMi0xLjA0MS0wLjk4MS0xLjY4MmMtMC4xMDItMC4yNDgtMC4zMTUtMC4yMDItMC42MDctMC4xMTMgYy0wLjEzNSwwLjAzNS0wLjUxOSwwLjE1Ny0wLjQ0LDAuNDM5QzUuMzcyLDEyLjc5OSw1LjU3NywxMy4xNjQsNS42MzMsMTMuMjg3elwiLz48L3N2Zz4iLAogICAgICAgICJhbGJ1bSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgeD1cIjVcIiB5PVwiMlwiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxXCIvPjxyZWN0IHg9XCIzXCIgeT1cIjRcIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMVwiLz48cmVjdCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiB4PVwiMS41XCIgeT1cIjYuNVwiIHdpZHRoPVwiMTdcIiBoZWlnaHQ9XCIxMVwiLz48L3N2Zz4iLAogICAgICAgICJhcnJvdy1kb3duIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWdvbiBwb2ludHM9XCIxMC41LDE2LjA4IDUuNjMsMTAuNjYgNi4zNywxMCAxMC41LDE0LjU4IDE0LjYzLDEwIDE1LjM3LDEwLjY2XCIvPjxsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHgxPVwiMTAuNVwiIHkxPVwiNFwiIHgyPVwiMTAuNVwiIHkyPVwiMTVcIi8+PC9zdmc+IiwKICAgICAgICAiYXJyb3ctbGVmdCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHBvaW50cz1cIjEwIDE0IDUgOS41IDEwIDVcIi8+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeDE9XCIxNlwiIHkxPVwiOS41XCIgeDI9XCI1XCIgeTI9XCI5LjUyXCIvPjwvc3ZnPiIsCiAgICAgICAgImFycm93LXJpZ2h0IjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgcG9pbnRzPVwiMTAgNSAxNSA5LjUgMTAgMTRcIi8+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeDE9XCI0XCIgeTE9XCI5LjVcIiB4Mj1cIjE1XCIgeTI9XCI5LjVcIi8+PC9zdmc+IiwKICAgICAgICAiYXJyb3ctdXAiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5Z29uIHBvaW50cz1cIjEwLjUsNCAxNS4zNyw5LjQgMTQuNjMsMTAuMDggMTAuNSw1LjQ5IDYuMzcsMTAuMDggNS42Myw5LjRcIi8+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeDE9XCIxMC41XCIgeTE9XCIxNlwiIHgyPVwiMTAuNVwiIHkyPVwiNVwiLz48L3N2Zz4iLAogICAgICAgICJiYWciOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGQ9XCJNNy41LDcuNVY0QTIuNDgsMi40OCwwLDAsMSwxMCwxLjUsMi41NCwyLjU0LDAsMCwxLDEyLjUsNFY3LjVcIi8+PHBvbHlnb24gZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgcG9pbnRzPVwiMTYuNSA3LjUgMy41IDcuNSAyLjUgMTguNSAxNy41IDE4LjUgMTYuNSA3LjVcIi8+PC9zdmc+IiwKICAgICAgICAiYmFuIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGN4PVwiMTBcIiBjeT1cIjEwXCIgcj1cIjlcIi8+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgeDE9XCI0XCIgeTE9XCIzLjVcIiB4Mj1cIjE2XCIgeTI9XCIxNi41XCIvPjwvc3ZnPiIsCiAgICAgICAgImJlaGFuY2UiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNOS41LDEwLjZjLTAuNC0wLjUtMC45LTAuOS0xLjYtMS4xYzEuNy0xLDIuMi0zLjIsMC43LTQuN0M3LjgsNCw2LjMsNCw1LjIsNEMzLjUsNCwxLjcsNCwwLDR2MTJjMS43LDAsMy40LDAsNS4yLDAgYzEsMCwyLjEsMCwzLjEtMC41QzEwLjIsMTQuNiwxMC41LDEyLjMsOS41LDEwLjZMOS41LDEwLjZ6IE01LjYsNi4xYzEuOCwwLDEuOCwyLjctMC4xLDIuN2MtMSwwLTIsMC0yLjksMFY2LjFINS42eiBNMi42LDEzLjh2LTMuMSBjMS4xLDAsMi4xLDAsMy4yLDBjMi4xLDAsMi4xLDMuMiwwLjEsMy4yTDIuNiwxMy44elwiLz48cGF0aCBkPVwiTTE5LjksMTAuOUMxOS43LDkuMiwxOC43LDcuNiwxNyw3Yy00LjItMS4zLTcuMywzLjQtNS4zLDcuMWMwLjksMS43LDIuOCwyLjMsNC43LDIuMWMxLjctMC4yLDIuOS0xLjMsMy40LTIuOWgtMi4yIGMtMC40LDEuMy0yLjQsMS41LTMuNSwwLjZjLTAuNC0wLjQtMC42LTEuMS0wLjYtMS43SDIwQzIwLDExLjcsMTkuOSwxMC45LDE5LjksMTAuOXogTTEzLjUsMTAuNmMwLTEuNiwyLjMtMi43LDMuNS0xLjQgYzAuNCwwLjQsMC41LDAuOSwwLjYsMS40SDEzLjVMMTMuNSwxMC42elwiLz48cmVjdCB4PVwiMTNcIiB5PVwiNFwiIHdpZHRoPVwiNVwiIGhlaWdodD1cIjEuNFwiLz48L3N2Zz4iLAogICAgICAgICJiZWxsIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTE3LDE1LjUgTDMsMTUuNSBDMi45OSwxNC42MSAzLjc5LDEzLjM0IDQuMSwxMi41MSBDNC41OCwxMS4zIDQuNzIsMTAuMzUgNS4xOSw3LjAxIEM1LjU0LDQuNTMgNS44OSwzLjIgNy4yOCwyLjE2IEM4LjEzLDEuNTYgOS4zNywxLjUgOS44MSwxLjUgTDkuOTYsMS41IEM5Ljk2LDEuNSAxMS42MiwxLjQxIDEyLjY3LDIuMTcgQzE0LjA4LDMuMiAxNC40Miw0LjU0IDE0Ljc3LDcuMDIgQzE1LjI2LDEwLjM1IDE1LjQsMTEuMzEgMTUuODcsMTIuNTIgQzE2LjIsMTMuMzQgMTcuMDEsMTQuNjEgMTcsMTUuNSBMMTcsMTUuNSBaXCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGQ9XCJNMTIuMzksMTYgQzEyLjM5LDE3LjM3IDExLjM1LDE4LjQzIDkuOTEsMTguNDMgQzguNDgsMTguNDMgNy40MiwxNy4zNyA3LjQyLDE2XCIvPjwvc3ZnPiIsCiAgICAgICAgImJvbGQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNSwxNS4zIEM1LjY2LDE1LjMgNS45LDE1IDUuOSwxNC41MyBMNS45LDUuNSBDNS45LDQuOTIgNS41Niw0LjcgNSw0LjcgTDUsNCBMOC45NSw0IEMxMi42LDQgMTMuNyw1LjM3IDEzLjcsNi45IEMxMy43LDcuODcgMTMuMTQsOS4xNyAxMC44Niw5LjU5IEwxMC44Niw5LjcgQzEzLjI1LDkuODYgMTQuMjksMTEuMjggMTQuMywxMi41NCBDMTQuMywxNC40NyAxMi45NCwxNiA5LDE2IEw1LDE2IEw1LDE1LjMgWiBNOSw5LjMgQzExLjE5LDkuMyAxMS44LDguNSAxMS44NSw3IEMxMS44NSw1LjY1IDExLjMsNC44IDksNC44IEw3LjY3LDQuOCBMNy42Nyw5LjMgTDksOS4zIFogTTkuMTg1LDE1LjIyIEMxMS45NywxNSAxMi4zOSwxNCAxMi40LDEyLjU4IEMxMi40LDExLjE1IDExLjM5LDEwIDksMTAgTDcuNjcsMTAgTDcuNjcsMTUgTDkuMTgsMTUgWlwiLz48L3N2Zz4iLAogICAgICAgICJib2x0IjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTQuNzQsMjAgTDcuNzMsMTIgTDMsMTIgTDE1LjQzLDEgTDEyLjMyLDkgTDE3LjAyLDkgTDQuNzQsMjAgTDQuNzQsMjAgTDQuNzQsMjAgWiBNOS4xOCwxMSBMNy4xLDE2LjM5IEwxNC40NywxMCBMMTAuODYsMTAgTDEyLjk5LDQuNjcgTDUuNjEsMTEgTDkuMTgsMTEgTDkuMTgsMTEgTDkuMTgsMTEgWlwiLz48L3N2Zz4iLAogICAgICAgICJib29rbWFyayI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgcG9pbnRzPVwiNS41IDEuNSAxNS41IDEuNSAxNS41IDE3LjUgMTAuNSAxMi41IDUuNSAxNy41XCIvPjwvc3ZnPiIsCiAgICAgICAgImNhbGVuZGFyIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTSAyLDMgMiwxNyAxOCwxNyAxOCwzIDIsMyBaIE0gMTcsMTYgMywxNiAzLDggMTcsOCAxNywxNiBaIE0gMTcsNyAzLDcgMyw0IDE3LDQgMTcsNyBaXCIvPjxyZWN0IHdpZHRoPVwiMVwiIGhlaWdodD1cIjNcIiB4PVwiNlwiIHk9XCIyXCIvPjxyZWN0IHdpZHRoPVwiMVwiIGhlaWdodD1cIjNcIiB4PVwiMTNcIiB5PVwiMlwiLz48L3N2Zz4iLAogICAgICAgICJjYW1lcmEiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxjaXJjbGUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgY3g9XCIxMFwiIGN5PVwiMTAuOFwiIHI9XCIzLjhcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgZD1cIk0xLDQuNSBDMC43LDQuNSAwLjUsNC43IDAuNSw1IEwwLjUsMTcgQzAuNSwxNy4zIDAuNywxNy41IDEsMTcuNSBMMTksMTcuNSBDMTkuMywxNy41IDE5LjUsMTcuMyAxOS41LDE3IEwxOS41LDUgQzE5LjUsNC43IDE5LjMsNC41IDE5LDQuNSBMMTMuNSw0LjUgTDEzLjUsMi45IEMxMy41LDIuNiAxMy4zLDIuNSAxMywyLjUgTDcsMi41IEM2LjcsMi41IDYuNSwyLjYgNi41LDIuOSBMNi41LDQuNSBMMSw0LjUgTDEsNC41IFpcIi8+PC9zdmc+IiwKICAgICAgICAiY2FydCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBjeD1cIjcuM1wiIGN5PVwiMTcuM1wiIHI9XCIxLjRcIi8+PGNpcmNsZSBjeD1cIjEzLjNcIiBjeT1cIjE3LjNcIiByPVwiMS40XCIvPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBwb2ludHM9XCIwIDIgMy4yIDQgNS4zIDEyLjUgMTYgMTIuNSAxOCA2LjUgOCA2LjVcIi8+PC9zdmc+IiwKICAgICAgICAiY2hlY2siOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBwb2ludHM9XCI0LDEwIDgsMTUgMTcsNFwiLz48L3N2Zz4iLAogICAgICAgICJjaGV2cm9uLWRvdWJsZS1sZWZ0IjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4wM1wiIHBvaW50cz1cIjEwIDE0IDYgMTAgMTAgNlwiLz48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4wM1wiIHBvaW50cz1cIjE0IDE0IDEwIDEwIDE0IDZcIi8+PC9zdmc+IiwKICAgICAgICAiY2hldnJvbi1kb3VibGUtcmlnaHQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjAzXCIgcG9pbnRzPVwiMTAgNiAxNCAxMCAxMCAxNFwiLz48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4wM1wiIHBvaW50cz1cIjYgNiAxMCAxMCA2IDE0XCIvPjwvc3ZnPiIsCiAgICAgICAgImNoZXZyb24tZG93biI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMDNcIiBwb2ludHM9XCIxNiA3IDEwIDEzIDQgN1wiLz48L3N2Zz4iLAogICAgICAgICJjaGV2cm9uLWxlZnQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjAzXCIgcG9pbnRzPVwiMTMgMTYgNyAxMCAxMyA0XCIvPjwvc3ZnPiIsCiAgICAgICAgImNoZXZyb24tcmlnaHQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjAzXCIgcG9pbnRzPVwiNyA0IDEzIDEwIDcgMTZcIi8+PC9zdmc+IiwKICAgICAgICAiY2hldnJvbi11cCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMDNcIiBwb2ludHM9XCI0IDEzIDEwIDcgMTYgMTNcIi8+PC9zdmc+IiwKICAgICAgICAiY2xvY2siOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxjaXJjbGUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgY3g9XCIxMFwiIGN5PVwiMTBcIiByPVwiOVwiLz48cmVjdCB4PVwiOVwiIHk9XCI0XCIgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiN1wiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTEzLjAxOCwxNC4xOTcgTDkuNDQ1LDEwLjYyNVwiLz48L3N2Zz4iLAogICAgICAgICJjbG9zZSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4wNlwiIGQ9XCJNMTYsMTYgTDQsNFwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjA2XCIgZD1cIk0xNiw0IEw0LDE2XCIvPjwvc3ZnPiIsCiAgICAgICAgImNsb3VkLWRvd25sb2FkIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTYuNSwxNC42MSBMMy43NSwxNC42MSBDMS45NiwxNC42MSAwLjUsMTMuMTcgMC41LDExLjM5IEMwLjUsOS43NiAxLjcyLDguNDEgMy4zLDguMiBDMy4zOCw1LjMxIDUuNzUsMyA4LjY4LDMgQzExLjE5LDMgMTMuMzEsNC43MSAxMy44OSw3LjAyIEMxNC4zOSw2LjggMTQuOTMsNi42OCAxNS41LDYuNjggQzE3LjcxLDYuNjggMTkuNSw4LjQ1IDE5LjUsMTAuNjQgQzE5LjUsMTIuODMgMTcuNzEsMTQuNiAxNS41LDE0LjYgTDEyLjUsMTQuNlwiLz48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgcG9pbnRzPVwiMTEuNzUgMTYgOS41IDE4LjI1IDcuMjUgMTZcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgZD1cIk05LjUsMTggTDkuNSw5LjVcIi8+PC9zdmc+IiwKICAgICAgICAiY2xvdWQtdXBsb2FkIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTYuNSwxNC42MSBMMy43NSwxNC42MSBDMS45NiwxNC42MSAwLjUsMTMuMTcgMC41LDExLjM5IEMwLjUsOS43NiAxLjcyLDguNDEgMy4zMSw4LjIgQzMuMzgsNS4zMSA1Ljc1LDMgOC42OCwzIEMxMS4xOSwzIDEzLjMxLDQuNzEgMTMuODksNy4wMiBDMTQuMzksNi44IDE0LjkzLDYuNjggMTUuNSw2LjY4IEMxNy43MSw2LjY4IDE5LjUsOC40NSAxOS41LDEwLjY0IEMxOS41LDEyLjgzIDE3LjcxLDE0LjYgMTUuNSwxNC42IEwxMi41LDE0LjZcIi8+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHBvaW50cz1cIjcuMjUgMTEuNzUgOS41IDkuNSAxMS43NSAxMS43NVwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBkPVwiTTkuNSwxOCBMOS41LDkuNVwiLz48L3N2Zz4iLAogICAgICAgICJjb2RlIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4wMVwiIHBvaW50cz1cIjEzLDQgMTksMTAgMTMsMTZcIi8+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMDFcIiBwb2ludHM9XCI3LDQgMSwxMCA3LDE2XCIvPjwvc3ZnPiIsCiAgICAgICAgImNvZyI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBjeD1cIjkuOTk3XCIgY3k9XCIxMFwiIHI9XCIzLjMxXCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGQ9XCJNMTguNDg4LDEyLjI4NSBMMTYuMjA1LDE2LjIzNyBDMTUuMzIyLDE1LjQ5NiAxNC4xODUsMTUuMjgxIDEzLjMwMywxNS43OTEgQzEyLjQyOCwxNi4yODkgMTIuMDQ3LDE3LjM3MyAxMi4yNDYsMTguNSBMNy43MzUsMTguNSBDNy45MzgsMTcuMzc0IDcuNTUzLDE2LjI5OSA2LjY4NCwxNS43OTEgQzUuODAxLDE1LjI3IDQuNjU1LDE1LjQ5MiAzLjc3MywxNi4yMzcgTDEuNSwxMi4yODUgQzIuNTczLDExLjg3MSAzLjMxNywxMC45OTkgMy4zMTcsOS45OTEgQzMuMzA1LDguOTggMi41NzMsOC4xMjEgMS41LDcuNzE2IEwzLjc2NSwzLjc4NCBDNC42NDUsNC41MTYgNS43OTQsNC43MzggNi42ODcsNC4yMzIgQzcuNTU1LDMuNzIyIDcuOTM5LDIuNjM3IDcuNzM1LDEuNSBMMTIuMjYzLDEuNSBDMTIuMDcyLDIuNjM3IDEyLjQ0MSwzLjcxIDEzLjMxNCw0LjIyIEMxNC4yMDYsNC43MyAxNS4zNDMsNC41MTYgMTYuMjI1LDMuNzk0IEwxOC40ODcsNy43MTQgQzE3LjQwNCw4LjExNyAxNi42NjEsOC45ODggMTYuNjcsMTAuMDA5IEMxNi42NzIsMTEuMDE4IDE3LjQxNSwxMS44OCAxOC40ODgsMTIuMjg1IEwxOC40ODgsMTIuMjg1IFpcIi8+PC9zdmc+IiwKICAgICAgICAiY29tbWVudCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk02LDE4LjcxIEw2LDE0IEwxLDE0IEwxLDEgTDE5LDEgTDE5LDE0IEwxMC43MSwxNCBMNiwxOC43MSBMNiwxOC43MSBaIE0yLDEzIEw3LDEzIEw3LDE2LjI5IEwxMC4yOSwxMyBMMTgsMTMgTDE4LDIgTDIsMiBMMiwxMyBMMiwxMyBaXCIvPjwvc3ZnPiIsCiAgICAgICAgImNvbW1lbnRpbmciOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5Z29uIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHBvaW50cz1cIjEuNSwxLjUgMTguNSwxLjUgMTguNSwxMy41IDEwLjUsMTMuNSA2LjUsMTcuNSA2LjUsMTMuNSAxLjUsMTMuNVwiLz48Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjhcIiByPVwiMVwiLz48Y2lyY2xlIGN4PVwiNlwiIGN5PVwiOFwiIHI9XCIxXCIvPjxjaXJjbGUgY3g9XCIxNFwiIGN5PVwiOFwiIHI9XCIxXCIvPjwvc3ZnPiIsCiAgICAgICAgImNvbW1lbnRzIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgcG9pbnRzPVwiMiAwLjUgMTkuNSAwLjUgMTkuNSAxM1wiLz48cGF0aCBkPVwiTTUsMTkuNzEgTDUsMTUgTDAsMTUgTDAsMiBMMTgsMiBMMTgsMTUgTDkuNzEsMTUgTDUsMTkuNzEgTDUsMTkuNzEgTDUsMTkuNzEgWiBNMSwxNCBMNiwxNCBMNiwxNy4yOSBMOS4yOSwxNCBMMTcsMTQgTDE3LDMgTDEsMyBMMSwxNCBMMSwxNCBMMSwxNCBaXCIvPjwvc3ZnPiIsCiAgICAgICAgImNvcHkiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxyZWN0IGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHg9XCIzLjVcIiB5PVwiMi41XCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjE2XCIvPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBwb2ludHM9XCI1IDAuNSAxNy41IDAuNSAxNy41IDE3XCIvPjwvc3ZnPiIsCiAgICAgICAgImNyZWRpdC1jYXJkIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiB4PVwiMS41XCIgeT1cIjQuNVwiIHdpZHRoPVwiMTdcIiBoZWlnaHQ9XCIxMlwiLz48cmVjdCB4PVwiMVwiIHk9XCI3XCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjNcIi8+PC9zdmc+IiwKICAgICAgICAiZGF0YWJhc2UiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxlbGxpcHNlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGN4PVwiMTBcIiBjeT1cIjQuNjRcIiByeD1cIjcuNVwiIHJ5PVwiMy4xNFwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBkPVwiTTE3LjUsOC4xMSBDMTcuNSw5Ljg1IDE0LjE0LDExLjI1IDEwLDExLjI1IEM1Ljg2LDExLjI1IDIuNSw5Ljg0IDIuNSw4LjExXCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGQ9XCJNMTcuNSwxMS4yNSBDMTcuNSwxMi45OSAxNC4xNCwxNC4zOSAxMCwxNC4zOSBDNS44NiwxNC4zOSAyLjUsMTIuOTggMi41LDExLjI1XCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGQ9XCJNMTcuNDksNC42NCBMMTcuNSwxNC4zNiBDMTcuNSwxNi4xIDE0LjE0LDE3LjUgMTAsMTcuNSBDNS44NiwxNy41IDIuNSwxNi4wOSAyLjUsMTQuMzYgTDIuNSw0LjY0XCIvPjwvc3ZnPiIsCiAgICAgICAgImRlc2t0b3AiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxyZWN0IHg9XCI4XCIgeT1cIjE1XCIgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMlwiLz48cmVjdCB4PVwiMTFcIiB5PVwiMTVcIiB3aWR0aD1cIjFcIiBoZWlnaHQ9XCIyXCIvPjxyZWN0IHg9XCI1XCIgeT1cIjE2XCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjFcIi8+PHJlY3QgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeD1cIjEuNVwiIHk9XCIzLjVcIiB3aWR0aD1cIjE3XCIgaGVpZ2h0PVwiMTFcIi8+PC9zdmc+IiwKICAgICAgICAiZGlzY29yZCI6ICI8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCI+PHBhdGggZD1cIk0xNi4wNzQsNC4zNjFhMTQuMjQzLDE0LjI0MywwLDAsMC0zLjYxLTEuMTM0LDEwLjYxLDEwLjYxLDAsMCwwLS40NjMuOTYsMTMuMjE5LDEzLjIxOSwwLDAsMC00LDAsMTAuMTM4LDEwLjEzOCwwLDAsMC0uNDY4LS45NkExNC4yMDYsMTQuMjA2LDAsMCwwLDMuOTE5LDQuMzY0LDE1LjE0NiwxNS4xNDYsMCwwLDAsMS4zMjQsMTQuNWExNC40MzUsMTQuNDM1LDAsMCwwLDQuNDI4LDIuMjY5QTEwLjk4MiwxMC45ODIsMCwwLDAsNi43LDE1LjIxYTkuMjk0LDkuMjk0LDAsMCwxLTEuNDk0LS43MjdjLjEyNS0uMDkzLjI0OC0uMTkuMzY2LS4yODlhMTAuMjEyLDEwLjIxMiwwLDAsMCw4Ljg1NCwwYy4xMTkuMS4yNDIuMi4zNjYuMjg5YTkuMjc0LDkuMjc0LDAsMCwxLTEuNS43MjgsMTAuOCwxMC44LDAsMCwwLC45NDgsMS41NjIsMTQuNDE5LDE0LjQxOSwwLDAsMCw0LjQzMS0yLjI3QTE1LjEyOCwxNS4xMjgsMCwwLDAsMTYuMDc0LDQuMzYxWm0tOC45ODEsOC4xYTEuNywxLjcsMCwwLDEtMS41NzMtMS43OUExLjY4OSwxLjY4OSwwLDAsMSw3LjA5Myw4Ljg4MWExLjY3OSwxLjY3OSwwLDAsMSwxLjU3MywxLjc5MUExLjY4NywxLjY4NywwLDAsMSw3LjA5MywxMi40NjJabTUuODE0LDBhMS43LDEuNywwLDAsMS0xLjU3My0xLjc5LDEuNjg5LDEuNjg5LDAsMCwxLDEuNTczLTEuNzkxLDEuNjc5LDEuNjc5LDAsMCwxLDEuNTczLDEuNzkxQTEuNjg4LDEuNjg4LDAsMCwxLDEyLjkwNywxMi40NjJaXCIvPjwvc3ZnPiIsCiAgICAgICAgImRvd25sb2FkIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgcG9pbnRzPVwiMTQsMTAgOS41LDE0LjUgNSwxMFwiLz48cmVjdCB4PVwiM1wiIHk9XCIxN1wiIHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIxXCIvPjxsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHgxPVwiOS41XCIgeTE9XCIxMy45MVwiIHgyPVwiOS41XCIgeTI9XCIzXCIvPjwvc3ZnPiIsCiAgICAgICAgImRyaWJiYmxlIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjRcIiBkPVwiTTEuMyw4LjljMCwwLDUsMC4xLDguNi0xYzEuNC0wLjQsMi42LTAuOSw0LTEuOSBjMS40LTEuMSwyLjUtMi41LDIuNS0yLjVcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS40XCIgZD1cIk0zLjksMTYuNmMwLDAsMS43LTIuOCwzLjUtNC4yIGMxLjgtMS4zLDQtMiw1LjctMi4yQzE2LDEwLDE5LDEwLjYsMTksMTAuNlwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjRcIiBkPVwiTTYuOSwxLjZjMCwwLDMuMyw0LjYsNC4yLDYuOCBjMC40LDAuOSwxLjMsMy4xLDEuOSw1LjJjMC42LDIsMC45LDQuNCwwLjksNC40XCIvPjxjaXJjbGUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS40XCIgY3g9XCIxMFwiIGN5PVwiMTBcIiByPVwiOVwiLz48L3N2Zz4iLAogICAgICAgICJldHN5IjogIjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIj48cGF0aCBkPVwiTTgsNC4yNkM4LDQuMDcsOCw0LDguMzEsNGg0LjQ2Yy43OSwwLDEuMjIuNjcsMS41MywxLjkxbC4yNSwxaC43NmMuMTQtMi44Mi4yNi00LC4yNi00UzEzLjY1LDMsMTIuNTIsM0g2LjgxTDMuNzUsMi45MnYuODRsMSwuMmMuNzMuMTEuOS4yNywxLDEsMCwwLC4wNiwyLC4wNiw1LjE3cy0uMDYsNS4xNC0uMDYsNS4xNGMwLC41OS0uMjMuODEtMSwuOTRsLTEsLjJ2Ljg0bDMuMDYtLjFoNS4xMWMxLjE1LDAsMy44Mi4xLDMuODIuMSwwLS43LjQ1LTMuODguNTEtNC4yMmgtLjczbC0uNzYsMS42OWEyLjI1LDIuMjUsMCwwLDEtMi40NSwxLjQ3SDkuNGMtMSwwLTEuNDQtLjQtMS40NC0xLjI0VjEwLjQ0czIuMTYsMCwyLjg2LjA2Yy41NSwwLC44NS4xOSwxLjA2LDFsLjIzLDFIMTNMMTIuOSw5Ljk0LDEzLDcuNDFoLS44NWwtLjI4LDEuMTNjLS4xNi43NC0uMjguODQtMSwxLTEsLjEtMi44OS4wOS0yLjg5LjA5WlwiLz48L3N2Zz4iLAogICAgICAgICJleHBhbmQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5Z29uIHBvaW50cz1cIjEzIDIgMTggMiAxOCA3IDE3IDcgMTcgMyAxMyAzXCIvPjxwb2x5Z29uIHBvaW50cz1cIjIgMTMgMyAxMyAzIDE3IDcgMTcgNyAxOCAyIDE4XCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGQ9XCJNMTEsOSBMMTcsM1wiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTMsMTcgTDksMTFcIi8+PC9zdmc+IiwKICAgICAgICAiZmFjZWJvb2siOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTEsMTBoMi42bDAuNC0zSDExVjUuM2MwLTAuOSwwLjItMS41LDEuNS0xLjVIMTRWMS4xYy0wLjMsMC0xLTAuMS0yLjEtMC4xQzkuNiwxLDgsMi40LDgsNXYySDUuNXYzSDh2OGgzVjEwelwiLz48L3N2Zz4iLAogICAgICAgICJmaWxlLWVkaXQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGQ9XCJNMTguNjUsMS42OCBDMTguNDEsMS40NSAxOC4xMDksMS4zMyAxNy44MSwxLjMzIEMxNy40OTksMS4zMyAxNy4yMDksMS40NSAxNi45OCwxLjY4IEw4LjkyLDkuNzYgTDgsMTIuMzMgTDEwLjU1LDExLjQxIEwxOC42NTEsMy4zNCBDMTkuMTIsMi44NyAxOS4xMiwyLjE1IDE4LjY1LDEuNjggTDE4LjY1LDEuNjggTDE4LjY1LDEuNjggWlwiLz48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgcG9pbnRzPVwiMTYuNSA4LjQ4MiAxNi41IDE4LjUgMy41IDE4LjUgMy41IDEuNSAxNC4yMTEgMS41XCIvPjwvc3ZnPiIsCiAgICAgICAgImZpbGUtcGRmIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiB3aWR0aD1cIjEzXCIgaGVpZ2h0PVwiMTdcIiB4PVwiMy41XCIgeT1cIjEuNVwiLz48cGF0aCBkPVwiTTE0LjY1IDExLjY3Yy0uNDguMy0xLjM3LS4xOS0xLjc5LS4zN2E0LjY1IDQuNjUgMCAwIDEgMS40OS4wNmMuMzUuMS4zNi4yOC4zLjMxem0tNi4zLjA2bC40My0uNzlhMTQuNyAxNC43IDAgMCAwIC43NS0xLjY0IDUuNDggNS40OCAwIDAgMCAxLjI1IDEuNTVsLjIuMTVhMTYuMzYgMTYuMzYgMCAwIDAtMi42My43M3pNOS41IDUuMzJjLjIgMCAuMzIuNS4zMi45N2ExLjk5IDEuOTkgMCAwIDEtLjIzIDEuMDQgNS4wNSA1LjA1IDAgMCAxLS4xNy0xLjNzMC0uNzEuMDgtLjcxem0tMy45IDlhNC4zNSA0LjM1IDAgMCAxIDEuMjEtMS40NmwuMjQtLjIyYTQuMzUgNC4zNSAwIDAgMS0xLjQ2IDEuNjh6bTkuMjMtMy4zYTIuMDUgMi4wNSAwIDAgMC0xLjMyLS4zIDExLjA3IDExLjA3IDAgMCAwLTEuNTguMTEgNC4wOSA0LjA5IDAgMCAxLS43NC0uNSA1LjM5IDUuMzkgMCAwIDEtMS4zMi0yLjA2IDEwLjM3IDEwLjM3IDAgMCAwIC4yOC0yLjYyIDEuODMgMS44MyAwIDAgMC0uMDctLjI1LjU3LjU3IDAgMCAwLS41Mi0uNEg5LjRhLjU5LjU5IDAgMCAwLS42LjM4IDYuOTUgNi45NSAwIDAgMCAuMzcgMy4xNGMtLjI2LjYzLTEgMi4xMi0xIDIuMTItLjMuNTgtLjU3IDEuMDgtLjgyIDEuNWwtLjguNDRBMy4xMSAzLjExIDAgMCAwIDUgMTQuMTZhLjM5LjM5IDAgMCAwIC4xNS40MmwuMjQuMTNjMS4xNS41NiAyLjI4LTEuNzQgMi42Ni0yLjQyYTIzLjEgMjMuMSAwIDAgMSAzLjU5LS44NSA0LjU2IDQuNTYgMCAwIDAgMi45MS44LjUuNSAwIDAgMCAuMy0uMjEgMS4xIDEuMSAwIDAgMCAuMTItLjc1Ljg0Ljg0IDAgMCAwLS4xNC0uMjV6XCIvPjwvc3ZnPiIsCiAgICAgICAgImZpbGUtdGV4dCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjE3XCIgeD1cIjMuNVwiIHk9XCIxLjVcIi8+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeDE9XCI2XCIgeDI9XCIxMlwiIHkxPVwiMTIuNVwiIHkyPVwiMTIuNVwiLz48bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiB4MT1cIjZcIiB4Mj1cIjE0XCIgeTE9XCI4LjVcIiB5Mj1cIjguNVwiLz48bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiB4MT1cIjZcIiB4Mj1cIjE0XCIgeTE9XCI2LjVcIiB5Mj1cIjYuNVwiLz48bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiB4MT1cIjZcIiB4Mj1cIjE0XCIgeTE9XCIxMC41XCIgeTI9XCIxMC41XCIvPjwvc3ZnPiIsCiAgICAgICAgImZpbGUiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxyZWN0IGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHg9XCIzLjVcIiB5PVwiMS41XCIgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjE3XCIvPjwvc3ZnPiIsCiAgICAgICAgImZsaWNrciI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBjeD1cIjUuNVwiIGN5PVwiOS41XCIgcj1cIjMuNVwiLz48Y2lyY2xlIGN4PVwiMTQuNVwiIGN5PVwiOS41XCIgcj1cIjMuNVwiLz48L3N2Zz4iLAogICAgICAgICJmb2xkZXIiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5Z29uIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHBvaW50cz1cIjkuNSA1LjUgOC41IDMuNSAxLjUgMy41IDEuNSAxNi41IDE4LjUgMTYuNSAxOC41IDUuNVwiLz48L3N2Zz4iLAogICAgICAgICJmb3J3YXJkIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTIuNDcsMTMuMTEgQzQuMDIsMTAuMDIgNi4yNyw3Ljg1IDkuMDQsNi42MSBDOS40OCw2LjQxIDEwLjI3LDYuMTMgMTEsNS45MSBMMTEsMiBMMTguODksOSBMMTEsMTYgTDExLDEyLjEzIEM5LjI1LDEyLjQ3IDcuNTgsMTMuMTkgNi4wMiwxNC4yNSBDMy4wMywxNi4yOCAxLjYzLDE4LjU0IDEuNjMsMTguNTQgQzEuNjMsMTguNTQgMS4zOCwxNS4yOCAyLjQ3LDEzLjExIEwyLjQ3LDEzLjExIFogTTUuMywxMy41MyBDNi45MiwxMi40IDkuMDQsMTEuNCAxMiwxMC45MiBMMTIsMTMuNjMgTDE3LjM2LDkgTDEyLDQuMjUgTDEyLDYuOCBDMTEuNzEsNi44NiAxMC44Niw3LjAyIDkuNjcsNy40OSBDNi43OSw4LjY1IDQuNTgsMTAuOTYgMy40OSwxMy4wOCBDMy4xOCwxMy43IDIuNjgsMTQuODcgMi40OSwxNiBDMy4yOCwxNS4wNSA0LjQsMTQuMTUgNS4zLDEzLjUzIEw1LjMsMTMuNTMgWlwiLz48L3N2Zz4iLAogICAgICAgICJmb3Vyc3F1YXJlIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTE1LjIzLDIgQzE1Ljk2LDIgMTYuNCwyLjQxIDE2LjUsMi44NiBDMTYuNTcsMy4xNSAxNi41NiwzLjQ0IDE2LjUxLDMuNzMgQzE2LjQ2LDQuMDQgMTQuODYsMTEuNzIgMTQuNzUsMTIuMDMgQzE0LjU2LDEyLjU2IDE0LjE2LDEyLjgyIDEzLjYxLDEyLjgzIEMxMy4wMywxMi44NCAxMS4wOSwxMi41MSAxMC42OSwxMyBDMTAuMzgsMTMuMzggNy43OSwxNi4zOSA2LjgxLDE3LjUzIEM2LjYxLDE3Ljc2IDYuNCwxNy45NiA2LjA4LDE3Ljk5IEM1LjY4LDE4LjA0IDUuMjksMTcuODcgNS4xNywxNy40NSBDNS4xMiwxNy4yOCA1LjEsMTcuMDkgNS4xLDE2LjkxIEM1LjEsMTIuNCA0Ljg2LDcuODEgNS4xMSwzLjMxIEM1LjE3LDIuNSA1LjgxLDIuMTIgNi41MywyIEwxNS4yMywyIEwxNS4yMywyIFogTTkuNzYsMTEuNDIgQzkuOTQsMTEuMTkgMTAuMTcsMTEuMSAxMC40NSwxMS4xIEwxMi44NiwxMS4xIEMxMy4xMiwxMS4xIDEzLjMxLDEwLjk0IDEzLjM2LDEwLjY5IEMxMy4zNywxMC42NCAxMy42Miw5LjQxIDEzLjc0LDguODMgQzEzLjgxLDguNTIgMTMuNTMsOC4yOCAxMy4yNyw4LjI4IEMxMi4zNSw4LjI5IDExLjQyLDguMjggMTAuNSw4LjI4IEM5Ljg0LDguMjggOS44Myw3LjY5IDkuODIsNy4yMSBDOS44LDYuODUgMTAuMTMsNi41NSAxMC41LDYuNTUgQzExLjU5LDYuNTYgMTIuNjcsNi41NSAxMy43Niw2LjU1IEMxNC4wMyw2LjU1IDE0LjIzLDYuNCAxNC4yOCw2LjE0IEMxNC4zNCw1Ljg3IDE0LjY3LDQuMjkgMTQuNjcsNC4yOSBDMTQuNjcsNC4yOSAxNC44MiwzLjc0IDE0LjE5LDMuNzQgTDcuMzQsMy43NCBDNywzLjc1IDYuODQsNC4wMiA2Ljg0LDQuMzMgQzYuODQsNy41OCA2Ljg1LDE0Ljk1IDYuODUsMTQuOTkgQzYuODcsMTUgOC44OSwxMi41MSA5Ljc2LDExLjQyIEw5Ljc2LDExLjQyIFpcIi8+PC9zdmc+IiwKICAgICAgICAiZnV0dXJlIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWxpbmUgcG9pbnRzPVwiMTkgMiAxOCAyIDE4IDYgMTQgNiAxNCA3IDE5IDcgMTkgMlwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTE4LDYuNTQ4IEMxNi43MDksMy4yOSAxMy4zNTQsMSA5LjYsMSBDNC42LDEgMC42LDUgMC42LDEwIEMwLjYsMTUgNC42LDE5IDkuNiwxOSBDMTQuNiwxOSAxOC42LDE1IDE4LjYsMTBcIi8+PHJlY3QgeD1cIjlcIiB5PVwiNFwiIHdpZHRoPVwiMVwiIGhlaWdodD1cIjdcIi8+PHBhdGggZD1cIk0xMy4wMTgsMTQuMTk3IEw5LjQ0NSwxMC42MjVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIi8+PC9zdmc+IiwKICAgICAgICAiZ2l0LWJyYW5jaCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjJcIiBjeD1cIjdcIiBjeT1cIjNcIiByPVwiMlwiLz48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMlwiIGN4PVwiMTRcIiBjeT1cIjZcIiByPVwiMlwiLz48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMlwiIGN4PVwiN1wiIGN5PVwiMTdcIiByPVwiMlwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIyXCIgZD1cIk0xNCw4IEMxNCwxMC40MSAxMi40MywxMC44NyAxMC41NiwxMS4yNSBDOS4wOSwxMS41NCA3LDEyLjA2IDcsMTUgTDcsNVwiLz48L3N2Zz4iLAogICAgICAgICJnaXQtZm9yayI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjJcIiBjeD1cIjUuNzlcIiBjeT1cIjIuNzlcIiByPVwiMS43OVwiLz48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMlwiIGN4PVwiMTQuMTlcIiBjeT1cIjIuNzlcIiByPVwiMS43OVwiLz48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMlwiIGN4PVwiMTAuMDNcIiBjeT1cIjE2Ljc5XCIgcj1cIjEuNzlcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIGQ9XCJNNS43OSw0LjU3IEw1Ljc5LDYuNTYgQzUuNzksOS4xOSAxMC4wMywxMC4yMiAxMC4wMywxMy4zMSBDMTAuMDMsMTQuODYgMTAuMDQsMTQuNTUgMTAuMDQsMTQuNTUgQzEwLjA0LDE0LjM3IDEwLjA0LDE0Ljg2IDEwLjA0LDEzLjMxIEMxMC4wNCwxMC4yMiAxNC4yLDkuMTkgMTQuMiw2LjU2IEwxNC4yLDQuNTdcIi8+PC9zdmc+IiwKICAgICAgICAiZ2l0aHViLWFsdCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xMCwwLjUgQzQuNzUsMC41IDAuNSw0Ljc2IDAuNSwxMC4wMSBDMC41LDE1LjI2IDQuNzUsMTkuNTEgMTAsMTkuNTEgQzE1LjI0LDE5LjUxIDE5LjUsMTUuMjYgMTkuNSwxMC4wMSBDMTkuNSw0Ljc2IDE1LjI1LDAuNSAxMCwwLjUgTDEwLDAuNSBaIE0xMi44MSwxNy42OSBDMTIuODEsMTcuNjkgMTIuODEsMTcuNyAxMi43OSwxNy42OSBDMTIuNDcsMTcuNzUgMTIuMzUsMTcuNTkgMTIuMzUsMTcuMzYgTDEyLjM1LDE2LjE3IEMxMi4zNSwxNS40NSAxMi4wOSwxNC45MiAxMS41OCwxNC41NiBDMTIuMiwxNC41MSAxMi43NywxNC4zOSAxMy4yNiwxNC4yMSBDMTMuODcsMTMuOTggMTQuMzYsMTMuNjkgMTQuNzQsMTMuMjkgQzE1LjQyLDEyLjU5IDE1Ljc2LDExLjU1IDE1Ljc2LDEwLjE3IEMxNS43Niw5LjI1IDE1LjQ1LDguNDYgMTQuODMsNy44IEMxNS4xLDcuMDggMTUuMDcsNi4yOSAxNC43NSw1LjQ0IEwxNC41MSw1LjQyIEMxNC4zNCw1LjQgMTQuMDYsNS40NiAxMy42Nyw1LjYxIEMxMy4yNSw1Ljc4IDEyLjc5LDYuMDMgMTIuMzEsNi4zNSBDMTEuNTUsNi4xNiAxMC44MSw2LjA1IDEwLjA5LDYuMDUgQzkuMzYsNi4wNSA4LjYxLDYuMTUgNy44OCw2LjM1IEM3LjI4LDUuOTYgNi43NSw1LjY4IDYuMjYsNS41NCBDNi4wNyw1LjQ3IDUuOSw1LjQ0IDUuNzgsNS40NCBMNS40Miw1LjQ0IEM1LjA2LDYuMjkgNS4wNCw3LjA4IDUuMzIsNy44IEM0LjcsOC40NiA0LjQsOS4yNSA0LjQsMTAuMTcgQzQuNCwxMS45NCA0Ljk2LDEzLjE2IDYuMDgsMTMuODQgQzYuNTMsMTQuMTMgNy4wNSwxNC4zMiA3LjY5LDE0LjQzIEM4LjAzLDE0LjUgOC4zMiwxNC41NCA4LjU1LDE0LjU1IEM4LjA3LDE0Ljg5IDcuODIsMTUuNDIgNy44MiwxNi4xNiBMNy44MiwxNy41MSBDNy44LDE3LjY5IDcuNywxNy44IDcuNTEsMTcuOCBDNC4yMSwxNi43NCAxLjgyLDEzLjY1IDEuODIsMTAuMDEgQzEuODIsNS41IDUuNDksMS44MyAxMCwxLjgzIEMxNC41LDEuODMgMTguMTcsNS41IDE4LjE3LDEwLjAxIEMxOC4xOCwxMy41MyAxNS45NCwxNi41NCAxMi44MSwxNy42OSBMMTIuODEsMTcuNjkgWlwiLz48L3N2Zz4iLAogICAgICAgICJnaXRodWIiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTAsMSBDNS4wMywxIDEsNS4wMyAxLDEwIEMxLDEzLjk4IDMuNTgsMTcuMzUgNy4xNiwxOC41NCBDNy42MSwxOC42MiA3Ljc3LDE4LjM0IDcuNzcsMTguMTEgQzcuNzcsMTcuOSA3Ljc2LDE3LjMzIDcuNzYsMTYuNTggQzUuMjYsMTcuMTIgNC43MywxNS4zNyA0LjczLDE1LjM3IEM0LjMyLDE0LjMzIDMuNzMsMTQuMDUgMy43MywxNC4wNSBDMi45MSwxMy41IDMuNzksMTMuNSAzLjc5LDEzLjUgQzQuNjksMTMuNTYgNS4xNywxNC40MyA1LjE3LDE0LjQzIEM1Ljk3LDE1LjggNy4yOCwxNS40MSA3Ljc5LDE1LjE4IEM3Ljg3LDE0LjYgOC4xLDE0LjIgOC4zNiwxMy45OCBDNi4zNiwxMy43NSA0LjI2LDEyLjk4IDQuMjYsOS41MyBDNC4yNiw4LjU1IDQuNjEsNy43NCA1LjE5LDcuMTEgQzUuMSw2Ljg4IDQuNzksNS45NyA1LjI4LDQuNzMgQzUuMjgsNC43MyA2LjA0LDQuNDkgNy43NSw1LjY1IEM4LjQ3LDUuNDUgOS4yNCw1LjM1IDEwLDUuMzUgQzEwLjc2LDUuMzUgMTEuNTMsNS40NSAxMi4yNSw1LjY1IEMxMy45Nyw0LjQ4IDE0LjcyLDQuNzMgMTQuNzIsNC43MyBDMTUuMjEsNS45NyAxNC45LDYuODggMTQuODEsNy4xMSBDMTUuMzksNy43NCAxNS43Myw4LjU0IDE1LjczLDkuNTMgQzE1LjczLDEyLjk5IDEzLjYzLDEzLjc1IDExLjYyLDEzLjk3IEMxMS45NCwxNC4yNSAxMi4yMywxNC44IDEyLjIzLDE1LjY0IEMxMi4yMywxNi44NCAxMi4yMiwxNy44MSAxMi4yMiwxOC4xMSBDMTIuMjIsMTguMzUgMTIuMzgsMTguNjMgMTIuODQsMTguNTQgQzE2LjQyLDE3LjM1IDE5LDEzLjk4IDE5LDEwIEMxOSw1LjAzIDE0Ljk3LDEgMTAsMSBMMTAsMSBaXCIvPjwvc3ZnPiIsCiAgICAgICAgImdpdHRlciI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgeD1cIjMuNVwiIHk9XCIxXCIgd2lkdGg9XCIxLjUzMVwiIGhlaWdodD1cIjExLjQ3MVwiLz48cmVjdCB4PVwiNy4zMjRcIiB5PVwiNC4wNTlcIiB3aWR0aD1cIjEuNTI5XCIgaGVpZ2h0PVwiMTUuMjk0XCIvPjxyZWN0IHg9XCIxMS4xNDhcIiB5PVwiNC4wNTlcIiB3aWR0aD1cIjEuNTI3XCIgaGVpZ2h0PVwiMTUuMjk0XCIvPjxyZWN0IHg9XCIxNC45NzFcIiB5PVwiNC4wNTlcIiB3aWR0aD1cIjEuNTI5XCIgaGVpZ2h0PVwiOC40MTJcIi8+PC9zdmc+IiwKICAgICAgICAiZ29vZ2xlIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTE3Ljg2LDkuMDkgQzE4LjQ2LDEyLjEyIDE3LjE0LDE2LjA1IDEzLjgxLDE3LjU2IEM5LjQ1LDE5LjUzIDQuMTMsMTcuNjggMi40NywxMi44NyBDMC42OCw3LjY4IDQuMjIsMi40MiA5LjUsMi4wMyBDMTEuNTcsMS44OCAxMy40MiwyLjM3IDE1LjA1LDMuNjUgQzE1LjIyLDMuNzggMTUuMzcsMy45MyAxNS42MSw0LjE0IEMxNC45LDQuODEgMTQuMjMsNS40NSAxMy41LDYuMTQgQzEyLjI3LDUuMDggMTAuODQsNC43MiA5LjI4LDQuOTggQzguMTIsNS4xNyA3LjE2LDUuNzYgNi4zNyw2LjYzIEM0Ljg4LDguMjcgNC42MiwxMC44NiA1Ljc2LDEyLjgyIEM2Ljk1LDE0Ljg3IDkuMTcsMTUuOCAxMS41NywxNS4yNSBDMTMuMjcsMTQuODcgMTQuNzYsMTMuMzMgMTQuODksMTEuNzUgTDEwLjUxLDExLjc1IEwxMC41MSw5LjA5IEwxNy44Niw5LjA5IEwxNy44Niw5LjA5IFpcIi8+PC9zdmc+IiwKICAgICAgICAiZ3JpZCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgeD1cIjJcIiB5PVwiMlwiIHdpZHRoPVwiM1wiIGhlaWdodD1cIjNcIi8+PHJlY3QgeD1cIjhcIiB5PVwiMlwiIHdpZHRoPVwiM1wiIGhlaWdodD1cIjNcIi8+PHJlY3QgeD1cIjE0XCIgeT1cIjJcIiB3aWR0aD1cIjNcIiBoZWlnaHQ9XCIzXCIvPjxyZWN0IHg9XCIyXCIgeT1cIjhcIiB3aWR0aD1cIjNcIiBoZWlnaHQ9XCIzXCIvPjxyZWN0IHg9XCI4XCIgeT1cIjhcIiB3aWR0aD1cIjNcIiBoZWlnaHQ9XCIzXCIvPjxyZWN0IHg9XCIxNFwiIHk9XCI4XCIgd2lkdGg9XCIzXCIgaGVpZ2h0PVwiM1wiLz48cmVjdCB4PVwiMlwiIHk9XCIxNFwiIHdpZHRoPVwiM1wiIGhlaWdodD1cIjNcIi8+PHJlY3QgeD1cIjhcIiB5PVwiMTRcIiB3aWR0aD1cIjNcIiBoZWlnaHQ9XCIzXCIvPjxyZWN0IHg9XCIxNFwiIHk9XCIxNFwiIHdpZHRoPVwiM1wiIGhlaWdodD1cIjNcIi8+PC9zdmc+IiwKICAgICAgICAiaGFwcHkiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxjaXJjbGUgY3g9XCIxM1wiIGN5PVwiN1wiIHI9XCIxXCIvPjxjaXJjbGUgY3g9XCI3XCIgY3k9XCI3XCIgcj1cIjFcIi8+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBjeD1cIjEwXCIgY3k9XCIxMFwiIHI9XCI4LjVcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgZD1cIk0xNC42LDExLjQgQzEzLjksMTMuMyAxMi4xLDE0LjUgMTAsMTQuNSBDNy45LDE0LjUgNi4xLDEzLjMgNS40LDExLjRcIi8+PC9zdmc+IiwKICAgICAgICAiaGFzaHRhZyI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xNS40MzEsOCBMMTUuNjYxLDcgTDEyLjkxMSw3IEwxMy44MzEsMyBMMTIuOTAxLDMgTDExLjk4LDcgTDkuMjksNyBMMTAuMjEsMyBMOS4yODEsMyBMOC4zNjEsNyBMNS4yMyw3IEw1LDggTDguMTMsOCBMNy4yMSwxMiBMNC4yMywxMiBMNCwxMyBMNi45OCwxMyBMNi4wNjEsMTcgTDYuOTkxLDE3IEw3LjkxMSwxMyBMMTAuNjAxLDEzIEw5LjY4MSwxNyBMMTAuNjExLDE3IEwxMS41MzEsMTMgTDE0LjQzMSwxMyBMMTQuNjYxLDEyIEwxMS43NiwxMiBMMTIuNjgxLDggTDE1LjQzMSw4IFogTTEwLjgzMSwxMiBMOC4xNDEsMTIgTDkuMDYxLDggTDExLjc1LDggTDEwLjgzMSwxMiBaXCIvPjwvc3ZnPiIsCiAgICAgICAgImhlYXJ0IjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjAzXCIgZD1cIk0xMCw0IEMxMCw0IDguMSwyIDUuNzQsMiBDMy4zOCwyIDEsMy41NSAxLDYuNzMgQzEsOC44NCAyLjY3LDEwLjQ0IDIuNjcsMTAuNDQgTDEwLDE4IEwxNy4zMywxMC40NCBDMTcuMzMsMTAuNDQgMTksOC44NCAxOSw2LjczIEMxOSwzLjU1IDE2LjYyLDIgMTQuMjYsMiBDMTEuOSwyIDEwLDQgMTAsNCBMMTAsNCBaXCIvPjwvc3ZnPiIsCiAgICAgICAgImhpc3RvcnkiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5bGluZSBmaWxsPVwiIzAwMFwiIHBvaW50cz1cIjEgMiAyIDIgMiA2IDYgNiA2IDcgMSA3IDEgMlwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTIuMSw2LjU0OCBDMy4zOTEsMy4yOSA2Ljc0NiwxIDEwLjUsMSBDMTUuNSwxIDE5LjUsNSAxOS41LDEwIEMxOS41LDE1IDE1LjUsMTkgMTAuNSwxOSBDNS41LDE5IDEuNSwxNSAxLjUsMTBcIi8+PHJlY3QgeD1cIjlcIiB5PVwiNFwiIHdpZHRoPVwiMVwiIGhlaWdodD1cIjdcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgZD1cIk0xMy4wMTgsMTQuMTk3IEw5LjQ0NSwxMC42MjVcIi8+PC9zdmc+IiwKICAgICAgICAiaG9tZSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gcG9pbnRzPVwiMTguNjUgMTEuMzUgMTAgMi43MSAxLjM1IDExLjM1IDAuNjUgMTAuNjUgMTAgMS4yOSAxOS4zNSAxMC42NVwiLz48cG9seWdvbiBwb2ludHM9XCIxNSA0IDE4IDQgMTggNyAxNyA3IDE3IDUgMTUgNVwiLz48cG9seWdvbiBwb2ludHM9XCIzIDExIDQgMTEgNCAxOCA3IDE4IDcgMTIgMTIgMTIgMTIgMTggMTYgMTggMTYgMTEgMTcgMTEgMTcgMTkgMTEgMTkgMTEgMTMgOCAxMyA4IDE5IDMgMTlcIi8+PC9zdmc+IiwKICAgICAgICAiaW1hZ2UiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxjaXJjbGUgY3g9XCIxNi4xXCIgY3k9XCI2LjFcIiByPVwiMS4xXCIvPjxyZWN0IGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHg9XCIuNVwiIHk9XCIyLjVcIiB3aWR0aD1cIjE5XCIgaGVpZ2h0PVwiMTVcIi8+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMDFcIiBwb2ludHM9XCI0LDEzIDgsOSAxMywxNFwiLz48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4wMVwiIHBvaW50cz1cIjExLDEyIDEyLjUsMTAuNSAxNiwxNFwiLz48L3N2Zz4iLAogICAgICAgICJpbmZvIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTEyLjEzLDExLjU5IEMxMS45NywxMi44NCAxMC4zNSwxNC4xMiA5LjEsMTQuMTYgQzYuMTcsMTQuMiA5Ljg5LDkuNDYgOC43NCw4LjM3IEM5LjMsOC4xNiAxMC42Miw3LjgzIDEwLjYyLDguODEgQzEwLjYyLDkuNjMgMTAuMTIsMTAuNTUgOS44OCwxMS4zMiBDOC42NiwxNS4xNiAxMi4xMywxMS4xNSAxMi4xNCwxMS4xOCBDMTIuMTYsMTEuMjEgMTIuMTYsMTEuMzUgMTIuMTMsMTEuNTkgQzEyLjA4LDExLjk1IDEyLjE2LDExLjM1IDEyLjEzLDExLjU5IEwxMi4xMywxMS41OSBaIE0xMS41Niw1LjY3IEMxMS41Niw2LjY3IDkuMzYsNy4xNSA5LjM2LDYuMDMgQzkuMzYsNSAxMS41Niw0LjU0IDExLjU2LDUuNjcgTDExLjU2LDUuNjcgWlwiLz48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGN4PVwiMTBcIiBjeT1cIjEwXCIgcj1cIjlcIi8+PC9zdmc+IiwKICAgICAgICAiaW5zdGFncmFtIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTEzLjU1LDFINi40NkMzLjQ1LDEsMSwzLjQ0LDEsNi40NHY3LjEyYzAsMywyLjQ1LDUuNDQsNS40Niw1LjQ0aDcuMDhjMy4wMiwwLDUuNDYtMi40NCw1LjQ2LTUuNDRWNi40NCBDMTkuMDEsMy40NCwxNi41NiwxLDEzLjU1LDF6IE0xNy41LDE0YzAsMS45My0xLjU3LDMuNS0zLjUsMy41SDZjLTEuOTMsMC0zLjUtMS41Ny0zLjUtMy41VjZjMC0xLjkzLDEuNTctMy41LDMuNS0zLjVoOCBjMS45MywwLDMuNSwxLjU3LDMuNSwzLjVWMTR6XCIvPjxjaXJjbGUgY3g9XCIxNC44N1wiIGN5PVwiNS4yNlwiIHI9XCIxLjA5XCIvPjxwYXRoIGQ9XCJNMTAuMDMsNS40NWMtMi41NSwwLTQuNjMsMi4wNi00LjYzLDQuNmMwLDIuNTUsMi4wNyw0LjYxLDQuNjMsNC42MWMyLjU2LDAsNC42My0yLjA2MSw0LjYzLTQuNjEgQzE0LjY1LDcuNTEsMTIuNTgsNS40NSwxMC4wMyw1LjQ1TDEwLjAzLDUuNDVMMTAuMDMsNS40NXogTTEwLjA4LDEzYy0xLjY2LDAtMy0xLjM0LTMtMi45OWMwLTEuNjUsMS4zNC0yLjk5LDMtMi45OXMzLDEuMzQsMywyLjk5IEMxMy4wOCwxMS42NiwxMS43NCwxMywxMC4wOCwxM0wxMC4wOCwxM0wxMC4wOCwxM3pcIi8+PC9zdmc+IiwKICAgICAgICAiaXRhbGljIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTEyLjYzLDUuNDggTDEwLjE1LDE0LjUyIEMxMCwxNS4wOCAxMC4zNywxNS4yNSAxMS45MiwxNS4zIEwxMS43MiwxNiBMNiwxNiBMNi4yLDE1LjMxIEM3Ljc4LDE1LjI2IDguMTksMTUuMDkgOC4zNCwxNC41MyBMMTAuODIsNS40OSBDMTAuOTcsNC45MiAxMC42Myw0Ljc2IDkuMDksNC43MSBMOS4yOCw0IEwxNSw0IEwxNC44MSw0LjY5IEMxMy4yMyw0Ljc1IDEyLjc4LDQuOTEgMTIuNjMsNS40OCBMMTIuNjMsNS40OCBaXCIvPjwvc3ZnPiIsCiAgICAgICAgImpvb21sYSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk03LjgsMTMuNGwxLjctMS43TDUuOSw4Yy0wLjYtMC41LTAuNi0xLjUsMC0yYzAuNi0wLjYsMS40LTAuNiwyLDBsMS43LTEuN2MtMS0xLTIuMy0xLjMtMy42LTFDNS44LDIuMiw0LjgsMS40LDMuNywxLjQgYy0xLjMsMC0yLjMsMS0yLjMsMi4zYzAsMS4xLDAuOCwyLDEuOCwyLjNjLTAuNCwxLjMtMC4xLDIuOCwxLDMuOEw3LjgsMTMuNEw3LjgsMTMuNHpcIi8+PHBhdGggZD1cIk0xMC4yLDQuM2MxLTEsMi41LTEuNCwzLjgtMWMwLjItMS4xLDEuMS0yLDIuMy0yYzEuMywwLDIuMywxLDIuMywyLjNjMCwxLjItMC45LDIuMi0yLDIuM2MwLjQsMS4zLDAsMi44LTEsMy44TDEzLjksOCBjMC42LTAuNSwwLjYtMS41LDAtMmMtMC41LTAuNi0xLjUtMC42LTIsMEw4LjIsOS43TDYuNSw4XCIvPjxwYXRoIGQ9XCJNMTQuMSwxNi44Yy0xLjMsMC40LTIuOCwwLjEtMy44LTFsMS43LTEuN2MwLjYsMC42LDEuNSwwLjYsMiwwYzAuNS0wLjYsMC42LTEuNSwwLTJsLTMuNy0zLjdMMTIsNi43bDMuNywzLjcgYzEsMSwxLjMsMi40LDEsMy42YzEuMSwwLjIsMiwxLjEsMiwyLjNjMCwxLjMtMSwyLjMtMi4zLDIuM0MxNS4yLDE4LjYsMTQuMywxNy44LDE0LjEsMTYuOFwiLz48cGF0aCBkPVwiTTEzLjIsMTIuMmwtMy43LDMuN2MtMSwxLTIuNCwxLjMtMy42LDFjLTAuMiwxLTEuMiwxLjgtMi4yLDEuOGMtMS4zLDAtMi4zLTEtMi4zLTIuM2MwLTEuMSwwLjgtMiwxLjgtMi4zIGMtMC4zLTEuMywwLTIuNywxLTMuN2wxLjcsMS43Yy0wLjYsMC42LTAuNiwxLjUsMCwyYzAuNiwwLjYsMS40LDAuNiwyLDBsMy43LTMuN1wiLz48L3N2Zz4iLAogICAgICAgICJsYXB0b3AiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxyZWN0IHk9XCIxNlwiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxXCIvPjxyZWN0IGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHg9XCIyLjVcIiB5PVwiNC41XCIgd2lkdGg9XCIxNVwiIGhlaWdodD1cIjEwXCIvPjwvc3ZnPiIsCiAgICAgICAgImxpZmVzYXZlciI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xMCwwLjUgQzQuNzYsMC41IDAuNSw0Ljc2IDAuNSwxMCBDMC41LDE1LjI0IDQuNzYsMTkuNSAxMCwxOS41IEMxNS4yNCwxOS41IDE5LjUsMTUuMjQgMTkuNSwxMCBDMTkuNSw0Ljc2IDE1LjI0LDAuNSAxMCwwLjUgTDEwLDAuNSBaIE0xMCwxLjUgQzExLjQ5LDEuNSAxMi44OSwxLjg4IDE0LjExLDIuNTYgTDExLjg1LDQuODIgQzExLjI3LDQuNjEgMTAuNjUsNC41IDEwLDQuNSBDOS4yMSw0LjUgOC40Nyw0LjY3IDcuNzksNC45NiBMNS41OCwyLjc1IEM2Ljg3LDEuOTUgOC4zOCwxLjUgMTAsMS41IEwxMCwxLjUgWiBNNC45Niw3LjggQzQuNjcsOC40OCA0LjUsOS4yMSA0LjUsMTAgQzQuNSwxMC42NSA0LjYxLDExLjI3IDQuODMsMTEuODUgTDIuNTYsMTQuMTEgQzEuODgsMTIuODkgMS41LDExLjQ5IDEuNSwxMCBDMS41LDguMzggMS45NSw2Ljg3IDIuNzUsNS41OCBMNC45Niw3Ljc5IEw0Ljk2LDcuOCBMNC45Niw3LjggWiBNMTAsMTguNSBDOC4yNSwxOC41IDYuNjIsMTcuOTcgNS4yNywxNy4wNiBMNy40NiwxNC44NyBDOC4yMiwxNS4yNyA5LjA4LDE1LjUgMTAsMTUuNSBDMTAuNzksMTUuNSAxMS41MywxNS4zMyAxMi4yMSwxNS4wNCBMMTQuNDIsMTcuMjUgQzEzLjEzLDE4LjA1IDExLjYyLDE4LjUgMTAsMTguNSBMMTAsMTguNSBaIE0xMCwxNC41IEM3LjUyLDE0LjUgNS41LDEyLjQ4IDUuNSwxMCBDNS41LDcuNTIgNy41Miw1LjUgMTAsNS41IEMxMi40OCw1LjUgMTQuNSw3LjUyIDE0LjUsMTAgQzE0LjUsMTIuNDggMTIuNDgsMTQuNSAxMCwxNC41IEwxMCwxNC41IFogTTE1LjA0LDEyLjIxIEMxNS4zMywxMS41MyAxNS41LDEwLjc5IDE1LjUsMTAgQzE1LjUsOS4wOCAxNS4yNyw4LjIyIDE0Ljg3LDcuNDYgTDE3LjA2LDUuMjcgQzE3Ljk3LDYuNjIgMTguNSw4LjI1IDE4LjUsMTAgQzE4LjUsMTEuNjIgMTguMDUsMTMuMTMgMTcuMjUsMTQuNDIgTDE1LjA0LDEyLjIxIEwxNS4wNCwxMi4yMSBaXCIvPjwvc3ZnPiIsCiAgICAgICAgImxpbmsiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGQ9XCJNMTAuNjI1LDEyLjM3NSBMNy41MjUsMTUuNDc1IEM2LjgyNSwxNi4xNzUgNS45MjUsMTYuMTc1IDUuMjI1LDE1LjQ3NSBMNC41MjUsMTQuNzc1IEMzLjgyNSwxNC4wNzQgMy44MjUsMTMuMTc1IDQuNTI1LDEyLjQ3NSBMNy42MjUsOS4zNzVcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgZD1cIk05LjMyNSw3LjM3NSBMMTIuNDI1LDQuMjc1IEMxMy4xMjUsMy41NzUgMTQuMDI1LDMuNTc1IDE0LjcyNCw0LjI3NSBMMTUuNDI1LDQuOTc1IEMxNi4xMjUsNS42NzUgMTYuMTI1LDYuNTc1IDE1LjQyNSw3LjI3NSBMMTIuMzI1LDEwLjM3NVwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTcuOTI1LDExLjg3NSBMMTEuOTI1LDcuOTc1XCIvPjwvc3ZnPiIsCiAgICAgICAgImxpbmtlZGluIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTUuNzcsMTcuODkgTDUuNzcsNy4xNyBMMi4yMSw3LjE3IEwyLjIxLDE3Ljg5IEw1Ljc3LDE3Ljg5IEw1Ljc3LDE3Ljg5IFogTTMuOTksNS43MSBDNS4yMyw1LjcxIDYuMDEsNC44OSA2LjAxLDMuODYgQzUuOTksMi44IDUuMjQsMiA0LjAyLDIgQzIuOCwyIDIsMi44IDIsMy44NSBDMiw0Ljg4IDIuNzcsNS43IDMuOTcsNS43IEwzLjk5LDUuNyBMMy45OSw1LjcxIEwzLjk5LDUuNzEgWlwiLz48cGF0aCBkPVwiTTcuNzUsMTcuODkgTDExLjMxLDE3Ljg5IEwxMS4zMSwxMS45IEMxMS4zMSwxMS41OCAxMS4zMywxMS4yNiAxMS40MywxMS4wMyBDMTEuNjksMTAuMzkgMTIuMjcsOS43MyAxMy4yNiw5LjczIEMxNC41NSw5LjczIDE1LjA2LDEwLjcxIDE1LjA2LDEyLjE1IEwxNS4wNiwxNy44OSBMMTguNjIsMTcuODkgTDE4LjYyLDExLjc0IEMxOC42Miw4LjQ1IDE2Ljg2LDYuOTIgMTQuNTIsNi45MiBDMTIuNiw2LjkyIDExLjc1LDcuOTkgMTEuMjgsOC43MyBMMTEuMyw4LjczIEwxMS4zLDcuMTcgTDcuNzUsNy4xNyBDNy43OSw4LjE3IDcuNzUsMTcuODkgNy43NSwxNy44OSBMNy43NSwxNy44OSBMNy43NSwxNy44OSBaXCIvPjwvc3ZnPiIsCiAgICAgICAgImxpc3QiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxyZWN0IHg9XCI2XCIgeT1cIjRcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMVwiLz48cmVjdCB4PVwiNlwiIHk9XCI5XCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjFcIi8+PHJlY3QgeD1cIjZcIiB5PVwiMTRcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMVwiLz48cmVjdCB4PVwiMlwiIHk9XCI0XCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMVwiLz48cmVjdCB4PVwiMlwiIHk9XCI5XCIgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMVwiLz48cmVjdCB4PVwiMlwiIHk9XCIxNFwiIHdpZHRoPVwiMlwiIGhlaWdodD1cIjFcIi8+PC9zdmc+IiwKICAgICAgICAibG9jYXRpb24iOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMDFcIiBkPVwiTTEwLDAuNSBDNi40MSwwLjUgMy41LDMuMzkgMy41LDYuOTggQzMuNSwxMS44MyAxMCwxOSAxMCwxOSBDMTAsMTkgMTYuNSwxMS44MyAxNi41LDYuOTggQzE2LjUsMy4zOSAxMy41OSwwLjUgMTAsMC41IEwxMCwwLjUgWlwiLz48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGN4PVwiMTBcIiBjeT1cIjYuOFwiIHI9XCIyLjNcIi8+PC9zdmc+IiwKICAgICAgICAibG9jayI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgaGVpZ2h0PVwiMTBcIiB3aWR0aD1cIjEzXCIgeT1cIjguNVwiIHg9XCIzLjVcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgZD1cIk02LjUsOCBMNi41LDQuODggQzYuNSwzLjAxIDguMDcsMS41IDEwLDEuNSBDMTEuOTMsMS41IDEzLjUsMy4wMSAxMy41LDQuODggTDEzLjUsOFwiLz48L3N2Zz4iLAogICAgICAgICJtYWlsIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgcG9pbnRzPVwiMS40LDYuNSAxMCwxMSAxOC42LDYuNVwiLz48cGF0aCBkPVwiTSAxLDQgMSwxNiAxOSwxNiAxOSw0IDEsNCBaIE0gMTgsMTUgMiwxNSAyLDUgMTgsNSAxOCwxNSBaXCIvPjwvc3ZnPiIsCiAgICAgICAgIm1lbnUiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxyZWN0IHg9XCIyXCIgeT1cIjRcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMVwiLz48cmVjdCB4PVwiMlwiIHk9XCI5XCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjFcIi8+PHJlY3QgeD1cIjJcIiB5PVwiMTRcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMVwiLz48L3N2Zz4iLAogICAgICAgICJtaWNyb3Bob25lIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiB4MT1cIjEwXCIgeDI9XCIxMFwiIHkxPVwiMTYuNDRcIiB5Mj1cIjE4LjVcIi8+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeDE9XCI3XCIgeDI9XCIxM1wiIHkxPVwiMTguNVwiIHkyPVwiMTguNVwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTEzLjUgNC44OXY1Ljg3YTMuNSAzLjUgMCAwIDEtNyAwVjQuODlhMy41IDMuNSAwIDAgMSA3IDB6XCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGQ9XCJNMTUuNSAxMC4zNlYxMWE1LjUgNS41IDAgMCAxLTExIDB2LS42XCIvPjwvc3ZnPiIsCiAgICAgICAgIm1pbnVzLWNpcmNsZSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBjeD1cIjkuNVwiIGN5PVwiOS41XCIgcj1cIjlcIi8+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeDE9XCI1XCIgeTE9XCI5LjVcIiB4Mj1cIjE0XCIgeTI9XCI5LjVcIi8+PC9zdmc+IiwKICAgICAgICAibWludXMiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxyZWN0IGhlaWdodD1cIjFcIiB3aWR0aD1cIjE4XCIgeT1cIjlcIiB4PVwiMVwiLz48L3N2Zz4iLAogICAgICAgICJtb3JlLXZlcnRpY2FsIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjNcIiByPVwiMlwiLz48Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjEwXCIgcj1cIjJcIi8+PGNpcmNsZSBjeD1cIjEwXCIgY3k9XCIxN1wiIHI9XCIyXCIvPjwvc3ZnPiIsCiAgICAgICAgIm1vcmUiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxjaXJjbGUgY3g9XCIzXCIgY3k9XCIxMFwiIHI9XCIyXCIvPjxjaXJjbGUgY3g9XCIxMFwiIGN5PVwiMTBcIiByPVwiMlwiLz48Y2lyY2xlIGN4PVwiMTdcIiBjeT1cIjEwXCIgcj1cIjJcIi8+PC9zdmc+IiwKICAgICAgICAibW92ZSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gcG9pbnRzPVwiNCw1IDEsNSAxLDkgMiw5IDIsNiA0LDZcIi8+PHBvbHlnb24gcG9pbnRzPVwiMSwxNiAyLDE2IDIsMTggNCwxOCA0LDE5IDEsMTlcIi8+PHBvbHlnb24gcG9pbnRzPVwiMTQsMTYgMTQsMTkgMTEsMTkgMTEsMTggMTMsMTggMTMsMTZcIi8+PHJlY3QgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeD1cIjUuNVwiIHk9XCIxLjVcIiB3aWR0aD1cIjEzXCIgaGVpZ2h0PVwiMTNcIi8+PHJlY3QgeD1cIjFcIiB5PVwiMTFcIiB3aWR0aD1cIjFcIiBoZWlnaHQ9XCIzXCIvPjxyZWN0IHg9XCI2XCIgeT1cIjE4XCIgd2lkdGg9XCIzXCIgaGVpZ2h0PVwiMVwiLz48L3N2Zz4iLAogICAgICAgICJudXQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5Z29uIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHBvaW50cz1cIjIuNSw1LjcgMTAsMS4zIDE3LjUsNS43IDE3LjUsMTQuMyAxMCwxOC43IDIuNSwxNC4zXCIvPjxjaXJjbGUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgY3g9XCIxMFwiIGN5PVwiMTBcIiByPVwiMy41XCIvPjwvc3ZnPiIsCiAgICAgICAgInBhZ2VraXQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5Z29uIHBvaW50cz1cIjMsMSAxNywxIDE3LDE2IDEwLDE2IDEwLDEzIDE0LDEzIDE0LDQgNiw0IDYsMTYgMTAsMTYgMTAsMTkgMywxOVwiLz48L3N2Zz4iLAogICAgICAgICJwYWludC1idWNrZXQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTAuMjEsMSBMMCwxMS4yMSBMOC4xLDE5LjMxIEwxOC4zMSw5LjEgTDEwLjIxLDEgTDEwLjIxLDEgWiBNMTYuODksOS4xIEwxNSwxMSBMMS43LDExIEwxMC4yMSwyLjQyIEwxNi44OSw5LjEgWlwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTYuNDIsMi4zMyBMMTEuNyw3LjYxXCIvPjxwYXRoIGQ9XCJNMTguNDksMTIgQzE4LjQ5LDEyIDIwLDE0LjA2IDIwLDE1LjM2IEMyMCwxNi4yOCAxOS4yNCwxNyAxOC40OSwxNyBMMTguNDksMTcgQzE3Ljc0LDE3IDE3LDE2LjI4IDE3LDE1LjM2IEMxNywxNC4wNiAxOC40OSwxMiAxOC40OSwxMiBMMTguNDksMTIgWlwiLz48L3N2Zz4iLAogICAgICAgICJwZW5jaWwiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGQ9XCJNMTcuMjUsNi4wMSBMNy4xMiwxNi4xIEwzLjgyLDE3LjIgTDUuMDIsMTMuOSBMMTUuMTIsMy44OCBDMTUuNzEsMy4yOSAxNi42NiwzLjI5IDE3LjI1LDMuODggQzE3LjgzLDQuNDcgMTcuODMsNS40MiAxNy4yNSw2LjAxIEwxNy4yNSw2LjAxIFpcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgZD1cIk0xNS45OCw3LjI2OCBMMTMuODUxLDUuMTQ4XCIvPjwvc3ZnPiIsCiAgICAgICAgInBob25lLWxhbmRzY2FwZSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgZD1cIk0xNyw1LjUgQzE3LjgsNS41IDE4LjUsNi4yIDE4LjUsNyBMMTguNSwxNCBDMTguNSwxNC44IDE3LjgsMTUuNSAxNywxNS41IEwzLDE1LjUgQzIuMiwxNS41IDEuNSwxNC44IDEuNSwxNCBMMS41LDcgQzEuNSw2LjIgMi4yLDUuNSAzLDUuNSBMMTcsNS41IEwxNyw1LjUgTDE3LDUuNSBaXCIvPjxjaXJjbGUgY3g9XCIzLjhcIiBjeT1cIjEwLjVcIiByPVwiLjhcIi8+PC9zdmc+IiwKICAgICAgICAicGhvbmUiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGQ9XCJNMTUuNSwxNyBDMTUuNSwxNy44IDE0LjgsMTguNSAxNCwxOC41IEw3LDE4LjUgQzYuMiwxOC41IDUuNSwxNy44IDUuNSwxNyBMNS41LDMgQzUuNSwyLjIgNi4yLDEuNSA3LDEuNSBMMTQsMS41IEMxNC44LDEuNSAxNS41LDIuMiAxNS41LDMgTDE1LjUsMTcgTDE1LjUsMTcgTDE1LjUsMTcgWlwiLz48Y2lyY2xlIGN4PVwiMTAuNVwiIGN5PVwiMTYuNVwiIHI9XCIuOFwiLz48L3N2Zz4iLAogICAgICAgICJwaW50ZXJlc3QiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTAuMjEsMSBDNS41LDEgMyw0LjE2IDMsNy42MSBDMyw5LjIxIDMuODUsMTEuMiA1LjIyLDExLjg0IEM1LjQzLDExLjk0IDUuNTQsMTEuODkgNS41OCwxMS42OSBDNS42MiwxMS41NCA1LjgsMTAuOCA1Ljg4LDEwLjQ1IEM1LjkxLDEwLjM0IDUuODksMTAuMjQgNS44LDEwLjE0IEM1LjM2LDkuNTkgNSw4LjU4IDUsNy42NSBDNSw1LjI0IDYuODIsMi45MSA5LjkzLDIuOTEgQzEyLjYxLDIuOTEgMTQuNDksNC43NCAxNC40OSw3LjM1IEMxNC40OSwxMC4zIDEzLDEyLjM1IDExLjA2LDEyLjM1IEM5Ljk5LDEyLjM1IDkuMTksMTEuNDcgOS40NCwxMC4zOCBDOS43NSw5LjA4IDEwLjM1LDcuNjggMTAuMzUsNi43NSBDMTAuMzUsNS45MSA5LjksNS4yMSA4Ljk3LDUuMjEgQzcuODcsNS4yMSA2Ljk5LDYuMzQgNi45OSw3Ljg2IEM2Ljk5LDguODMgNy4zMiw5LjQ4IDcuMzIsOS40OCBDNy4zMiw5LjQ4IDYuMjQsMTQuMDYgNi4wNCwxNC45MSBDNS43LDE2LjM1IDYuMDgsMTguNyA2LjEyLDE4LjkgQzYuMTQsMTkuMDEgNi4yNiwxOS4wNSA2LjMzLDE4Ljk1IEM2LjQ0LDE4LjgxIDcuNzQsMTYuODUgOC4xMSwxNS40NCBDOC4yNCwxNC45MyA4Ljc5LDEyLjg0IDguNzksMTIuODQgQzkuMTUsMTMuNTIgMTAuMTksMTQuMDkgMTEuMjksMTQuMDkgQzE0LjU4LDE0LjA5IDE2Ljk2LDExLjA2IDE2Ljk2LDcuMyBDMTYuOTQsMy43IDE0LDEgMTAuMjEsMVwiLz48L3N2Zz4iLAogICAgICAgICJwbGF5LWNpcmNsZSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgcG9pbnRzPVwiOC41IDcgMTMuNSAxMCA4LjUgMTNcIi8+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBjeD1cIjEwXCIgY3k9XCIxMFwiIHI9XCI5XCIvPjwvc3ZnPiIsCiAgICAgICAgInBsYXkiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5Z29uIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHBvaW50cz1cIjYuNSw1IDE0LjUsMTAgNi41LDE1XCIvPjwvc3ZnPiIsCiAgICAgICAgInBsdXMtY2lyY2xlIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGN4PVwiOS41XCIgY3k9XCI5LjVcIiByPVwiOVwiLz48bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiB4MT1cIjkuNVwiIHkxPVwiNVwiIHgyPVwiOS41XCIgeTI9XCIxNFwiLz48bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiB4MT1cIjVcIiB5MT1cIjkuNVwiIHgyPVwiMTRcIiB5Mj1cIjkuNVwiLz48L3N2Zz4iLAogICAgICAgICJwbHVzIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB4PVwiOVwiIHk9XCIxXCIgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMTdcIi8+PHJlY3QgeD1cIjFcIiB5PVwiOVwiIHdpZHRoPVwiMTdcIiBoZWlnaHQ9XCIxXCIvPjwvc3ZnPiIsCiAgICAgICAgInByaW50IjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgcG9pbnRzPVwiNC41IDEzLjUgMS41IDEzLjUgMS41IDYuNSAxOC41IDYuNSAxOC41IDEzLjUgMTUuNSAxMy41XCIvPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBwb2ludHM9XCIxNS41IDYuNSAxNS41IDIuNSA0LjUgMi41IDQuNSA2LjVcIi8+PHJlY3QgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgd2lkdGg9XCIxMVwiIGhlaWdodD1cIjZcIiB4PVwiNC41XCIgeT1cIjExLjVcIi8+PHJlY3Qgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiMVwiIHg9XCI2XCIgeT1cIjEzXCIvPjxyZWN0IHdpZHRoPVwiOFwiIGhlaWdodD1cIjFcIiB4PVwiNlwiIHk9XCIxNVwiLz48L3N2Zz4iLAogICAgICAgICJwdWxsIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWdvbiBwb2ludHM9XCI2Ljg1LDggOS41LDEwLjYgMTIuMTUsOCAxMi44NSw4LjcgOS41LDEyIDYuMTUsOC43XCIvPjxsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHgxPVwiOS41XCIgeTE9XCIxMVwiIHgyPVwiOS41XCIgeTI9XCIyXCIvPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBwb2ludHM9XCI2LDUuNSAzLjUsNS41IDMuNSwxOC41IDE1LjUsMTguNSAxNS41LDUuNSAxMyw1LjVcIi8+PC9zdmc+IiwKICAgICAgICAicHVzaCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gcG9pbnRzPVwiMTIuMTUsNCA5LjUsMS40IDYuODUsNCA2LjE1LDMuMyA5LjUsMCAxMi44NSwzLjNcIi8+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeDE9XCI5LjVcIiB5MT1cIjEwXCIgeDI9XCI5LjVcIiB5Mj1cIjFcIi8+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHBvaW50cz1cIjYgNS41IDMuNSA1LjUgMy41IDE4LjUgMTUuNSAxOC41IDE1LjUgNS41IDEzIDUuNVwiLz48L3N2Zz4iLAogICAgICAgICJxdWVzdGlvbiI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBjeD1cIjEwXCIgY3k9XCIxMFwiIHI9XCI5XCIvPjxjaXJjbGUgY3g9XCIxMC40NFwiIGN5PVwiMTQuNDJcIiByPVwiMS4wNVwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjJcIiBkPVwiTTguMTcsNy43OSBDOC4xNyw0Ljc1IDEyLjcyLDQuNzMgMTIuNzIsNy43MiBDMTIuNzIsOC42NyAxMS44MSw5LjE1IDExLjIzLDkuNzUgQzEwLjc1LDEwLjI0IDEwLjUxLDEwLjczIDEwLjQ1LDExLjQgQzEwLjQ0LDExLjUzIDEwLjQzLDExLjY0IDEwLjQzLDExLjc1XCIvPjwvc3ZnPiIsCiAgICAgICAgInF1b3RlLXJpZ2h0IjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTE3LjI3LDcuNzkgQzE3LjI3LDkuNDUgMTYuOTcsMTAuNDMgMTUuOTksMTIuMDIgQzE0Ljk4LDEzLjY0IDEzLDE1LjIzIDExLjU2LDE1Ljk3IEwxMS4xLDE1LjA4IEMxMi4zNCwxNC4yIDEzLjE0LDEzLjUxIDE0LjAyLDExLjgyIEMxNC4yNywxMS4zNCAxNC40MSwxMC45MiAxNC40OSwxMC41NCBDMTQuMywxMC41OCAxNC4wOSwxMC42IDEzLjg4LDEwLjYgQzEyLjA2LDEwLjYgMTAuNTksOS4xMiAxMC41OSw3LjMgQzEwLjU5LDUuNDggMTIuMDYsNCAxMy44OCw0IEMxNS4zOSw0IDE2LjY3LDUuMDIgMTcuMDUsNi40MiBDMTcuMTksNi44MiAxNy4yNyw3LjI3IDE3LjI3LDcuNzkgTDE3LjI3LDcuNzkgWlwiLz48cGF0aCBkPVwiTTguNjgsNy43OSBDOC42OCw5LjQ1IDguMzgsMTAuNDMgNy40LDEyLjAyIEM2LjM5LDEzLjY0IDQuNDEsMTUuMjMgMi45NywxNS45NyBMMi41MSwxNS4wOCBDMy43NSwxNC4yIDQuNTUsMTMuNTEgNS40MywxMS44MiBDNS42OCwxMS4zNCA1LjgyLDEwLjkyIDUuOSwxMC41NCBDNS43MSwxMC41OCA1LjUsMTAuNiA1LjI5LDEwLjYgQzMuNDcsMTAuNiAyLDkuMTIgMiw3LjMgQzIsNS40OCAzLjQ3LDQgNS4yOSw0IEM2LjgsNCA4LjA4LDUuMDIgOC40Niw2LjQyIEM4LjYsNi44MiA4LjY4LDcuMjcgOC42OCw3Ljc5IEw4LjY4LDcuNzkgWlwiLz48L3N2Zz4iLAogICAgICAgICJyZWNlaXZlciI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4wMVwiIGQ9XCJNNi4xODksMTMuNjExQzguMTM0LDE1LjUyNSAxMS4wOTcsMTguMjM5IDEzLjg2NywxOC4yNTdDMTYuNDcsMTguMjc1IDE4LjIsMTYuMjQxIDE4LjIsMTYuMjQxTDE0LjUwOSwxMi41NTFMMTEuNTM5LDEzLjYzOUw2LjE4OSw4LjI5TDcuMzEzLDUuMzU1TDMuNzYsMS44QzMuNzYsMS44IDEuNzMyLDMuNTM3IDEuNyw2LjA5MkMxLjY2Nyw4LjgwOSA0LjM0NywxMS43MzggNi4xODksMTMuNjExXCIvPjwvc3ZnPiIsCiAgICAgICAgInJlZGRpdCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xOSA5LjA1YTIuNTYgMi41NiAwIDAgMC0yLjU2LTIuNTYgMi41OSAyLjU5IDAgMCAwLTEuODguODIgMTAuNjMgMTAuNjMgMCAwIDAtNC4xNC0xdi0uMDhjLjU4LTEuNjIgMS41OC0zLjg5IDIuNy00LjEuMzgtLjA4Ljc3LjEyIDEuMTkuNTdhMS4xNSAxLjE1IDAgMCAwLS4wNi4zNyAxLjQ4IDEuNDggMCAxIDAgMS41MS0xLjQ1IDEuNDMgMS40MyAwIDAgMC0uNzYuMTlBMi4yOSAyLjI5IDAgMCAwIDEyLjkxIDFjLTIuMTEuNDMtMy4zOSA0LjM4LTMuNjMgNS4xOSAwIDAgMCAuMTEtLjA2LjExYTEwLjY1IDEwLjY1IDAgMCAwLTMuNzUgMUEyLjU2IDIuNTYgMCAwIDAgMSA5LjA1YTIuNDIgMi40MiAwIDAgMCAuNzIgMS43NkE1LjE4IDUuMTggMCAwIDAgMS4yNCAxM2MwIDMuNjYgMy45MiA2LjY0IDguNzMgNi42NHM4Ljc0LTMgOC43NC02LjY0YTUuMjMgNS4yMyAwIDAgMC0uNDYtMi4xM0EyLjU4IDIuNTggMCAwIDAgMTkgOS4wNXptLTE2Ljg4IDBhMS40NCAxLjQ0IDAgMCAxIDIuMjctMS4xOSA3LjY4IDcuNjggMCAwIDAtMi4wNyAxLjkxIDEuMzMgMS4zMyAwIDAgMS0uMi0uNzJ6TTEwIDE4LjRjLTQuMTcgMC03LjU1LTIuNC03LjU1LTUuNFM1LjgzIDcuNTMgMTAgNy41MyAxNy41IDEwIDE3LjUgMTNzLTMuMzggNS40LTcuNSA1LjR6bTcuNjktOC42MWE3LjYyIDcuNjIgMCAwIDAtMi4wOS0xLjkxIDEuNDEgMS40MSAwIDAgMSAuODQtLjI4IDEuNDcgMS40NyAwIDAgMSAxLjQ0IDEuNDUgMS4zNCAxLjM0IDAgMCAxLS4yMS43MnpcIi8+PHBhdGggZD1cIk02LjY5IDEyLjU4YTEuMzkgMS4zOSAwIDEgMSAxLjM5LTEuMzkgMS4zOCAxLjM4IDAgMCAxLTEuMzggMS4zOXpcIi8+PHBhdGggZD1cIk0xNC4yNiAxMS4yYTEuMzkgMS4zOSAwIDEgMS0xLjM5LTEuMzkgMS4zOSAxLjM5IDAgMCAxIDEuMzkgMS4zOXpcIi8+PHBhdGggZD1cIk0xMy4wOSAxNC44OGEuNTQuNTQgMCAwIDEtLjA5Ljc3IDUuMyA1LjMgMCAwIDEtMy4yNiAxLjE5IDUuNjEgNS42MSAwIDAgMS0zLjQtMS4yMi41NS41NSAwIDEgMSAuNzMtLjgzIDQuMDkgNC4wOSAwIDAgMCA1LjI1IDAgLjU2LjU2IDAgMCAxIC43Ny4wOXpcIi8+PC9zdmc+IiwKICAgICAgICAicmVmcmVzaCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgZD1cIk0xNy4wOCwxMS4xNSBDMTcuMDksMTEuMzEgMTcuMSwxMS40NyAxNy4xLDExLjY0IEMxNy4xLDE1LjUzIDEzLjk0LDE4LjY5IDEwLjA1LDE4LjY5IEM2LjE2LDE4LjY4IDMsMTUuNTMgMywxMS42MyBDMyw3Ljc0IDYuMTYsNC41OCAxMC4wNSw0LjU4IEMxMC45LDQuNTggMTEuNzEsNC43MyAxMi40Niw1XCIvPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBwb2ludHM9XCI5LjkgMiAxMi43OSA0Ljg5IDkuNzkgNy45XCIvPjwvc3ZnPiIsCiAgICAgICAgInJlcGx5IjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTE3LjcsMTMuMTEgQzE2LjEyLDEwLjAyIDEzLjg0LDcuODUgMTEuMDIsNi42MSBDMTAuNTcsNi40MSA5Ljc1LDYuMTMgOSw1LjkxIEw5LDIgTDEsOSBMOSwxNiBMOSwxMi4xMyBDMTAuNzgsMTIuNDcgMTIuNSwxMy4xOSAxNC4wOSwxNC4yNSBDMTcuMTMsMTYuMjggMTguNTYsMTguNTQgMTguNTYsMTguNTQgQzE4LjU2LDE4LjU0IDE4LjgxLDE1LjI4IDE3LjcsMTMuMTEgTDE3LjcsMTMuMTEgWiBNMTQuODIsMTMuNTMgQzEzLjE3LDEyLjQgMTEuMDEsMTEuNCA4LDEwLjkyIEw4LDEzLjYzIEwyLjU1LDkgTDgsNC4yNSBMOCw2LjggQzguMyw2Ljg2IDkuMTYsNy4wMiAxMC4zNyw3LjQ5IEMxMy4zLDguNjUgMTUuNTQsMTAuOTYgMTYuNjUsMTMuMDggQzE2Ljk3LDEzLjcgMTcuNDgsMTQuODYgMTcuNjgsMTYgQzE2Ljg3LDE1LjA1IDE1LjczLDE0LjE1IDE0LjgyLDEzLjUzIEwxNC44MiwxMy41MyBaXCIvPjwvc3ZnPiIsCiAgICAgICAgInJzcyI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBjeD1cIjMuMTJcIiBjeT1cIjE2LjhcIiByPVwiMS44NVwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTEuNSw4LjIgQzEuNzgsOC4xOCAyLjA2LDguMTYgMi4zNSw4LjE2IEM3LjU3LDguMTYgMTEuODEsMTIuMzcgMTEuODEsMTcuNTcgQzExLjgxLDE3Ljg5IDExLjc5LDE4LjE5IDExLjc2LDE4LjVcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgZD1cIk0xLjUsMi41MiBDMS43OCwyLjUxIDIuMDYsMi41IDIuMzUsMi41IEMxMC43MiwyLjUgMTcuNSw5LjI0IDE3LjUsMTcuNTcgQzE3LjUsMTcuODkgMTcuNDksMTguMTkgMTcuNDcsMTguNVwiLz48L3N2Zz4iLAogICAgICAgICJzZWFyY2giOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxjaXJjbGUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgY3g9XCI5XCIgY3k9XCI5XCIgcj1cIjdcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgZD1cIk0xNCwxNCBMMTgsMTggTDE0LDE0IFpcIi8+PC9zdmc+IiwKICAgICAgICAic2VydmVyIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB4PVwiM1wiIHk9XCIzXCIgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMlwiLz48cmVjdCB4PVwiNVwiIHk9XCIzXCIgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMlwiLz48cmVjdCB4PVwiN1wiIHk9XCIzXCIgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMlwiLz48cmVjdCB4PVwiMTZcIiB5PVwiM1wiIHdpZHRoPVwiMVwiIGhlaWdodD1cIjFcIi8+PHJlY3QgeD1cIjE2XCIgeT1cIjEwXCIgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMVwiLz48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGN4PVwiOS45XCIgY3k9XCIxNy40XCIgcj1cIjEuNFwiLz48cmVjdCB4PVwiM1wiIHk9XCIxMFwiIHdpZHRoPVwiMVwiIGhlaWdodD1cIjJcIi8+PHJlY3QgeD1cIjVcIiB5PVwiMTBcIiB3aWR0aD1cIjFcIiBoZWlnaHQ9XCIyXCIvPjxyZWN0IHg9XCI5LjVcIiB5PVwiMTRcIiB3aWR0aD1cIjFcIiBoZWlnaHQ9XCIyXCIvPjxyZWN0IHg9XCIzXCIgeT1cIjE3XCIgd2lkdGg9XCI2XCIgaGVpZ2h0PVwiMVwiLz48cmVjdCB4PVwiMTFcIiB5PVwiMTdcIiB3aWR0aD1cIjZcIiBoZWlnaHQ9XCIxXCIvPjxyZWN0IGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHg9XCIxLjVcIiB5PVwiMS41XCIgd2lkdGg9XCIxN1wiIGhlaWdodD1cIjVcIi8+PHJlY3QgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeD1cIjEuNVwiIHk9XCI4LjVcIiB3aWR0aD1cIjE3XCIgaGVpZ2h0PVwiNVwiLz48L3N2Zz4iLAogICAgICAgICJzZXR0aW5ncyI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGVsbGlwc2UgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgY3g9XCI2LjExXCIgY3k9XCIzLjU1XCIgcng9XCIyLjExXCIgcnk9XCIyLjE1XCIvPjxlbGxpcHNlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGN4PVwiNi4xMVwiIGN5PVwiMTUuNTVcIiByeD1cIjIuMTFcIiByeT1cIjIuMTVcIi8+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBjeD1cIjEzLjE1XCIgY3k9XCI5LjU1XCIgcj1cIjIuMTVcIi8+PHJlY3QgeD1cIjFcIiB5PVwiM1wiIHdpZHRoPVwiM1wiIGhlaWdodD1cIjFcIi8+PHJlY3QgeD1cIjEwXCIgeT1cIjNcIiB3aWR0aD1cIjhcIiBoZWlnaHQ9XCIxXCIvPjxyZWN0IHg9XCIxXCIgeT1cIjlcIiB3aWR0aD1cIjhcIiBoZWlnaHQ9XCIxXCIvPjxyZWN0IHg9XCIxNVwiIHk9XCI5XCIgd2lkdGg9XCIzXCIgaGVpZ2h0PVwiMVwiLz48cmVjdCB4PVwiMVwiIHk9XCIxNVwiIHdpZHRoPVwiM1wiIGhlaWdodD1cIjFcIi8+PHJlY3QgeD1cIjEwXCIgeT1cIjE1XCIgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiMVwiLz48L3N2Zz4iLAogICAgICAgICJzaHJpbmsiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5Z29uIHBvaW50cz1cIjExIDQgMTIgNCAxMiA4IDE2IDggMTYgOSAxMSA5XCIvPjxwb2x5Z29uIHBvaW50cz1cIjQgMTEgOSAxMSA5IDE2IDggMTYgOCAxMiA0IDEyXCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIGQ9XCJNMTIsOCBMMTgsMlwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTIsMTggTDgsMTJcIi8+PC9zdmc+IiwKICAgICAgICAic2lnbi1pbiI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gcG9pbnRzPVwiNyAyIDE3IDIgMTcgMTcgNyAxNyA3IDE2IDE2IDE2IDE2IDMgNyAzXCIvPjxwb2x5Z29uIHBvaW50cz1cIjkuMSAxMy40IDguNSAxMi44IDExLjI4IDEwIDQgMTAgNCA5IDExLjI4IDkgOC41IDYuMiA5LjEgNS42MiAxMyA5LjVcIi8+PC9zdmc+IiwKICAgICAgICAic2lnbi1vdXQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5Z29uIHBvaW50cz1cIjEzLjEgMTMuNCAxMi41IDEyLjggMTUuMjggMTAgOCAxMCA4IDkgMTUuMjggOSAxMi41IDYuMiAxMy4xIDUuNjIgMTcgOS41XCIvPjxwb2x5Z29uIHBvaW50cz1cIjEzIDIgMyAyIDMgMTcgMTMgMTcgMTMgMTYgNCAxNiA0IDMgMTMgM1wiLz48L3N2Zz4iLAogICAgICAgICJzb2NpYWwiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIHgxPVwiMTMuNFwiIHkxPVwiMTRcIiB4Mj1cIjYuM1wiIHkyPVwiMTAuN1wiLz48bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiB4MT1cIjEzLjVcIiB5MT1cIjUuNVwiIHgyPVwiNi41XCIgeTI9XCI4LjhcIi8+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBjeD1cIjE1LjVcIiBjeT1cIjQuNlwiIHI9XCIyLjNcIi8+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBjeD1cIjE1LjVcIiBjeT1cIjE0LjhcIiByPVwiMi4zXCIvPjxjaXJjbGUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgY3g9XCI0LjVcIiBjeT1cIjkuOFwiIHI9XCIyLjNcIi8+PC9zdmc+IiwKICAgICAgICAic291bmRjbG91ZCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xNy4yLDkuNGMtMC40LDAtMC44LDAuMS0xLjEwMSwwLjJjLTAuMTk5LTIuNS0yLjM5OS00LjUtNS00LjVjLTAuNiwwLTEuMiwwLjEtMS43LDAuM0M5LjIsNS41LDkuMSw1LjYsOS4xLDUuNlYxNWg4IGMxLjYwMSwwLDIuODAxLTEuMiwyLjgwMS0yLjhDMjAsMTAuNywxOC43LDkuNCwxNy4yLDkuNEwxNy4yLDkuNHpcIi8+PHJlY3QgeD1cIjZcIiB5PVwiNi41XCIgd2lkdGg9XCIxLjVcIiBoZWlnaHQ9XCI4LjVcIi8+PHJlY3QgeD1cIjNcIiB5PVwiOFwiIHdpZHRoPVwiMS41XCIgaGVpZ2h0PVwiN1wiLz48cmVjdCB5PVwiMTBcIiB3aWR0aD1cIjEuNVwiIGhlaWdodD1cIjVcIi8+PC9zdmc+IiwKICAgICAgICAic3RhciI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4wMVwiIHBvaW50cz1cIjEwIDIgMTIuNjMgNy4yNyAxOC41IDguMTIgMTQuMjUgMTIuMjIgMTUuMjUgMTggMTAgMTUuMjcgNC43NSAxOCA1Ljc1IDEyLjIyIDEuNSA4LjEyIDcuMzcgNy4yN1wiLz48L3N2Zz4iLAogICAgICAgICJzdHJpa2V0aHJvdWdoIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYsMTMuMDIgTDYuNjUsMTMuMDIgQzcuNjQsMTUuMTYgOC44NiwxNi4xMiAxMC40MSwxNi4xMiBDMTIuMjIsMTYuMTIgMTIuOTIsMTQuOTMgMTIuOTIsMTMuODkgQzEyLjkyLDEyLjU1IDExLjk5LDEyLjAzIDkuNzQsMTEuMjMgQzguMDUsMTAuNjQgNi4yMywxMC4xMSA2LjIzLDcuODMgQzYuMjMsNS41IDguMDksNC4wOSAxMC40LDQuMDkgQzExLjQ0LDQuMDkgMTIuMTMsNC4zMSAxMi43Miw0LjU0IEwxMy4zMyw0IEwxMy44MSw0IEwxMy44MSw3LjU5IEwxMy4xNiw3LjU5IEMxMi41NSw1Ljg4IDExLjUyLDQuODkgMTAuMDcsNC44OSBDOC44NCw0Ljg5IDcuODksNS42OSA3Ljg5LDcuMDMgQzcuODksOC4yOSA4Ljg5LDguNzggMTAuODgsOS40NSBDMTIuNTcsMTAuMDMgMTQuMzgsMTAuNiAxNC4zOCwxMi45MSBDMTQuMzgsMTQuNzUgMTMuMjcsMTYuOTMgMTAuMTgsMTYuOTMgQzkuMTgsMTYuOTMgOC4xNywxNi42OSA3LjQ2LDE2LjM5IEw2LjUyLDE3IEw2LDE3IEw2LDEzLjAyIEw2LDEzLjAyIFpcIi8+PHJlY3QgeD1cIjNcIiB5PVwiMTBcIiB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMVwiLz48L3N2Zz4iLAogICAgICAgICJ0YWJsZSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgeD1cIjFcIiB5PVwiM1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxXCIvPjxyZWN0IHg9XCIxXCIgeT1cIjdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMVwiLz48cmVjdCB4PVwiMVwiIHk9XCIxMVwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxXCIvPjxyZWN0IHg9XCIxXCIgeT1cIjE1XCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjFcIi8+PC9zdmc+IiwKICAgICAgICAidGFibGV0LWxhbmRzY2FwZSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgZD1cIk0xLjUsNSBDMS41LDQuMiAyLjIsMy41IDMsMy41IEwxNywzLjUgQzE3LjgsMy41IDE4LjUsNC4yIDE4LjUsNSBMMTguNSwxNiBDMTguNSwxNi44IDE3LjgsMTcuNSAxNywxNy41IEwzLDE3LjUgQzIuMiwxNy41IDEuNSwxNi44IDEuNSwxNiBMMS41LDUgTDEuNSw1IEwxLjUsNSBaXCIvPjxjaXJjbGUgY3g9XCIzLjdcIiBjeT1cIjEwLjVcIiByPVwiLjhcIi8+PC9zdmc+IiwKICAgICAgICAidGFibGV0IjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBkPVwiTTUsMTguNSBDNC4yLDE4LjUgMy41LDE3LjggMy41LDE3IEwzLjUsMyBDMy41LDIuMiA0LjIsMS41IDUsMS41IEwxNiwxLjUgQzE2LjgsMS41IDE3LjUsMi4yIDE3LjUsMyBMMTcuNSwxNyBDMTcuNSwxNy44IDE2LjgsMTguNSAxNiwxOC41IEw1LDE4LjUgTDUsMTguNSBMNSwxOC41IFpcIi8+PGNpcmNsZSBjeD1cIjEwLjVcIiBjeT1cIjE2LjNcIiByPVwiLjhcIi8+PC9zdmc+IiwKICAgICAgICAidGFnIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTE3LjUsMy43MSBMMTcuNSw3LjcyIEMxNy41LDcuOTYgMTcuNCw4LjIgMTcuMjEsOC4zOSBMOC4zOSwxNy4yIEM3Ljk5LDE3LjYgNy4zMywxNy42IDYuOTMsMTcuMiBMMi44LDEzLjA3IEMyLjQsMTIuNjcgMi40LDEyLjAxIDIuOCwxMS42MSBMMTEuNjEsMi44IEMxMS44MSwyLjYgMTIuMDgsMi41IDEyLjM0LDIuNSBMMTYuMTksMi41IEMxNi41MiwyLjUgMTYuODYsMi42MyAxNy4xMSwyLjg4IEMxNy4zNSwzLjExIDE3LjQ4LDMuNCAxNy41LDMuNzEgTDE3LjUsMy43MSBaXCIvPjxjaXJjbGUgY3g9XCIxNFwiIGN5PVwiNlwiIHI9XCIxXCIvPjwvc3ZnPiIsCiAgICAgICAgInRodW1ibmFpbHMiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxyZWN0IGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHg9XCIzLjVcIiB5PVwiMy41XCIgd2lkdGg9XCI1XCIgaGVpZ2h0PVwiNVwiLz48cmVjdCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiB4PVwiMTEuNVwiIHk9XCIzLjVcIiB3aWR0aD1cIjVcIiBoZWlnaHQ9XCI1XCIvPjxyZWN0IGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHg9XCIxMS41XCIgeT1cIjExLjVcIiB3aWR0aD1cIjVcIiBoZWlnaHQ9XCI1XCIvPjxyZWN0IGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHg9XCIzLjVcIiB5PVwiMTEuNVwiIHdpZHRoPVwiNVwiIGhlaWdodD1cIjVcIi8+PC9zdmc+IiwKICAgICAgICAidGlrdG9rIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTE3LjI0LDZWOC44MmE2Ljc5LDYuNzksMCwwLDEtNC0xLjI4djUuODFBNS4yNiw1LjI2LDAsMSwxLDgsOC4xYTQuMzYsNC4zNiwwLDAsMSwuNzIuMDV2Mi45QTIuNTcsMi41NywwLDAsMCw3LjY0LDExYTIuNCwyLjQsMCwxLDAsMi43NywyLjM4VjJoMi44NmE0LDQsMCwwLDAsMS44NCwzLjM4QTQsNCwwLDAsMCwxNy4yNCw2WlwiLz48L3N2Zz4iLAogICAgICAgICJ0cmFzaCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHBvaW50cz1cIjYuNSAzIDYuNSAxLjUgMTMuNSAxLjUgMTMuNSAzXCIvPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBwb2ludHM9XCI0LjUgNCA0LjUgMTguNSAxNS41IDE4LjUgMTUuNSA0XCIvPjxyZWN0IHg9XCI4XCIgeT1cIjdcIiB3aWR0aD1cIjFcIiBoZWlnaHQ9XCI5XCIvPjxyZWN0IHg9XCIxMVwiIHk9XCI3XCIgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiOVwiLz48cmVjdCB4PVwiMlwiIHk9XCIzXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjFcIi8+PC9zdmc+IiwKICAgICAgICAidHJpYW5nbGUtZG93biI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gcG9pbnRzPVwiNSA3IDE1IDcgMTAgMTJcIi8+PC9zdmc+IiwKICAgICAgICAidHJpYW5nbGUtbGVmdCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gcG9pbnRzPVwiMTIgNSA3IDEwIDEyIDE1XCIvPjwvc3ZnPiIsCiAgICAgICAgInRyaWFuZ2xlLXJpZ2h0IjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWdvbiBwb2ludHM9XCI4IDUgMTMgMTAgOCAxNVwiLz48L3N2Zz4iLAogICAgICAgICJ0cmlhbmdsZS11cCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gcG9pbnRzPVwiNSAxMyAxMCA4IDE1IDEzXCIvPjwvc3ZnPiIsCiAgICAgICAgInRyaXBhZHZpc29yIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTE5LjAyMSw3Ljg2NkMxOS4yNTYsNi44NjIsMjAsNS44NTQsMjAsNS44NTRoLTMuMzQ2QzE0Ljc4MSw0LjY0MSwxMi41MDQsNCw5Ljk4LDRDNy4zNjMsNCw0Ljk5OSw0LjY1MSwzLjEzNSw1Ljg3NkgwXHRjMCwwLDAuNzM4LDAuOTg3LDAuOTc2LDEuOTg4Yy0wLjYxMSwwLjgzNy0wLjk3MywxLjg1Mi0wLjk3MywyLjk2NGMwLDIuNzYzLDIuMjQ5LDUuMDA5LDUuMDExLDUuMDA5XHRjMS41NzYsMCwyLjk3Ni0wLjczNywzLjkwMS0xLjg3OWwxLjA2MywxLjU5OWwxLjA3NS0xLjYxNWMwLjQ3NSwwLjYxMSwxLjEsMS4xMTEsMS44MzgsMS40NTFjMS4yMTMsMC41NDcsMi41NzQsMC42MTIsMy44MjUsMC4xNVx0YzIuNTg5LTAuOTYzLDMuOTEzLTMuODUyLDIuOTY0LTYuNDM5Yy0wLjE3NS0wLjQ2My0wLjQtMC44NzYtMC42NzUtMS4yMzhIMTkuMDIxeiBNMTYuMzgsMTQuNTk0XHRjLTEuMDAyLDAuMzcxLTIuMDg4LDAuMzI4LTMuMDYtMC4xMTljLTAuNjg4LTAuMzE3LTEuMjUyLTAuODE3LTEuNjU3LTEuNDM4Yy0wLjE2NC0wLjI1LTAuMzEzLTAuNTItMC40MTctMC44MTFcdGMtMC4xMjQtMC4zMjgtMC4xODYtMC42NjgtMC4yMTctMS4wMTRjLTAuMDYzLTAuNjg5LDAuMDM3LTEuMzk2LDAuMzM5LTIuMDQzYzAuNDQ4LTAuOTcxLDEuMjUxLTEuNzEsMi4yNS0yLjA3OVx0YzIuMDc1LTAuNzY1LDQuMzc1LDAuMyw1LjE0LDIuMzY2YzAuNzYyLDIuMDY2LTAuMzAxLDQuMzctMi4zNjMsNS4xMzRMMTYuMzgsMTQuNTk0TDE2LjM4LDE0LjU5NHogTTguMzIyLDEzLjA2Nlx0Yy0wLjcyLDEuMDU5LTEuOTM1LDEuNzYtMy4zMDksMS43NmMtMi4yMDcsMC00LjAwMS0xLjc5Ny00LjAwMS0zLjk5NmMwLTIuMjAzLDEuNzk1LTQuMDAyLDQuMDAxLTQuMDAyXHRjMi4yMDQsMCwzLjk5OSwxLjgsMy45OTksNC4wMDJjMCwwLjEzNy0wLjAyNCwwLjI2MS0wLjA0LDAuMzk2Yy0wLjA2NywwLjY3OC0wLjI4NCwxLjMxMy0wLjY0OCwxLjg1M3YtMC4wMTNIOC4zMjJ6IE0yLjQ3MiwxMC43NzVcdGMwLDEuMzY3LDEuMTEyLDIuNDc5LDIuNDc2LDIuNDc5YzEuMzYzLDAsMi40NzItMS4xMSwyLjQ3Mi0yLjQ3OWMwLTEuMzU5LTEuMTEtMi40NjgtMi40NzItMi40NjhcdEMzLjU4NCw4LjMwNiwyLjQ3Myw5LjQxNiwyLjQ3MiwxMC43NzVMMi40NzIsMTAuNzc1eiBNMTIuNTE0LDEwLjc3NWMwLDEuMzY3LDEuMTA0LDIuNDc5LDIuNDcxLDIuNDc5XHRjMS4zNjMsMCwyLjQ3NC0xLjEwOCwyLjQ3NC0yLjQ3OWMwLTEuMzU5LTEuMTEtMi40NjgtMi40NzQtMi40NjhjLTEuMzY0LDAtMi40NzcsMS4xMDktMi40NzcsMi40NjhIMTIuNTE0eiBNMy4zMjQsMTAuNzc1XHRjMC0wLjg5MywwLjcyNi0xLjYxOCwxLjYxNC0xLjYxOGMwLjg4OSwwLDEuNjI1LDAuNzI3LDEuNjI1LDEuNjE4YzAsMC44OTgtMC43MjUsMS42MjctMS42MjUsMS42MjdcdGMtMC45MDEsMC0xLjYyNS0wLjcyOS0xLjYyNS0xLjYyN0gzLjMyNHogTTEzLjM1NCwxMC43NzVjMC0wLjg5MywwLjcyNi0xLjYxOCwxLjYyNy0xLjYxOGMwLjg4NiwwLDEuNjEsMC43MjcsMS42MSwxLjYxOFx0YzAsMC44OTgtMC43MjYsMS42MjctMS42MjYsMS42MjdzLTEuNjI1LTAuNzI5LTEuNjI1LTEuNjI3SDEzLjM1NHogTTkuOTc3LDQuODc1YzEuNzk4LDAsMy40MjUsMC4zMjQsNC44NDksMC45NjhcdGMtMC41MzUsMC4wMTUtMS4wNjEsMC4xMDgtMS41ODYsMC4zYy0xLjI2NCwwLjQ2My0yLjI2NCwxLjM4OC0yLjgxNSwyLjYwNGMtMC4yNjIsMC41NTEtMC4zOTgsMS4xMzMtMC40NDgsMS43Mlx0QzkuNzksNy45MDUsNy42NzcsNS44NzMsNS4wNzYsNS44MkM2LjUwMSw1LjIwOCw4LjE1Myw0Ljg3NSw5Ljk0LDQuODc1SDkuOTc3elwiLz48L3N2Zz4iLAogICAgICAgICJ0dW1ibHIiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNi44ODUsOC41OThjMCwwLDAsMy4zOTMsMCw0Ljk5NmMwLDAuMjgyLDAsMC42NiwwLjA5NCwwLjk0MmMwLjM3NywxLjUwOSwxLjEzMSwyLjU0NSwyLjU0NSwzLjExIGMxLjMxOSwwLjQ3MiwyLjM1NiwwLjQ3MiwzLjY3NiwwYzAuNTY1LTAuMTg4LDEuMTMyLTAuNjU5LDEuMTMyLTAuNjU5bC0wLjg0OS0yLjI2M2MwLDAtMS4wMzYsMC4zNzgtMS42MDMsMC4yODMgYy0wLjU2NS0wLjA5NC0xLjIyNi0wLjY2LTEuMjI2LTEuNTA4YzAtMS42MDMsMC00LjkwMiwwLTQuOTAyaDIuODI4VjUuNzcxaC0yLjgyOFYySDguMjA1YzAsMC0wLjA5NCwwLjY2LTAuMTg4LDAuOTQyIEM3LjgyOCwzLjc5MSw3LjI2Miw0LjczMyw2LjYwMyw1LjM5NEM1Ljg0OCw2LjE0Nyw1LDYuNDMsNSw2LjQzdjIuMTY4SDYuODg1elwiLz48L3N2Zz4iLAogICAgICAgICJ0diI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgeD1cIjdcIiB5PVwiMTZcIiB3aWR0aD1cIjZcIiBoZWlnaHQ9XCIxXCIvPjxyZWN0IGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHg9XCIuNVwiIHk9XCIzLjVcIiB3aWR0aD1cIjE5XCIgaGVpZ2h0PVwiMTFcIi8+PC9zdmc+IiwKICAgICAgICAidHdpdGNoIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTUuMjMsMSwyLDQuMjNWMTUuODVINS44OHYzLjIzTDkuMSwxNS44NWgyLjU5TDE3LjUsMTBWMVptMTEsOC40TDEzLjYyLDEySDExTDguNzgsMTQuMjRWMTJINS44OFYyLjI5SDE2LjIxWlwiLz48cmVjdCB4PVwiMTIuOThcIiB5PVwiNC41NVwiIHdpZHRoPVwiMS4yOVwiIGhlaWdodD1cIjMuODhcIi8+PHJlY3QgeD1cIjkuNDNcIiB5PVwiNC41NVwiIHdpZHRoPVwiMS4yOVwiIGhlaWdodD1cIjMuODhcIi8+PC9zdmc+IiwKICAgICAgICAidHdpdHRlciI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xOSw0Ljc0IEMxOC4zMzksNS4wMjkgMTcuNjI2LDUuMjI5IDE2Ljg4MSw1LjMyIEMxNy42NDQsNC44NiAxOC4yMjcsNC4xMzkgMTguNTAzLDMuMjggQzE3Ljc5LDMuNyAxNy4wMDEsNC4wMDkgMTYuMTU5LDQuMTcgQzE1LjQ4NSwzLjQ1IDE0LjUyNiwzIDEzLjQ2NCwzIEMxMS40MjMsMyA5Ljc3MSw0LjY2IDkuNzcxLDYuNyBDOS43NzEsNi45OSA5LjgwNCw3LjI2OSA5Ljg2OCw3LjUzOSBDNi43OTUsNy4zOCA0LjA3Niw1LjkxOSAyLjI1NCwzLjY3OSBDMS45MzYsNC4yMTkgMS43NTQsNC44NiAxLjc1NCw1LjUzOSBDMS43NTQsNi44MiAyLjQwNSw3Ljk1IDMuMzk3LDguNjEgQzIuNzksOC41ODkgMi4yMiw4LjQyOSAxLjcyMyw4LjE0OSBMMS43MjMsOC4xODkgQzEuNzIzLDkuOTc4IDIuOTk3LDExLjQ3OCA0LjY4NiwxMS44MiBDNC4zNzYsMTEuODk5IDQuMDQ5LDExLjkzOSAzLjcxMywxMS45MzkgQzMuNDc1LDExLjkzOSAzLjI0NSwxMS45MTkgMy4wMTgsMTEuODggQzMuNDksMTMuMzQ5IDQuODUyLDE0LjQxOSA2LjQ2OSwxNC40NDkgQzUuMjA1LDE1LjQyOSAzLjYxMiwxNi4wMTkgMS44ODIsMTYuMDE5IEMxLjU4MywxNi4wMTkgMS4yOSwxNi4wMDkgMSwxNS45NjkgQzIuNjM1LDE3LjAxOSA0LjU3NiwxNy42MjkgNi42NjIsMTcuNjI5IEMxMy40NTQsMTcuNjI5IDE3LjE3LDEyIDE3LjE3LDcuMTI5IEMxNy4xNyw2Ljk2OSAxNy4xNjYsNi44MDkgMTcuMTU3LDYuNjQ5IEMxNy44NzksNi4xMjkgMTguNTA0LDUuNDc4IDE5LDQuNzRcIi8+PC9zdmc+IiwKICAgICAgICAidWlraXQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5Z29uIHBvaW50cz1cIjE0LjQsMy4xIDExLjMsNS4xIDE1LDcuMyAxNSwxMi45IDEwLDE1LjcgNSwxMi45IDUsOC41IDIsNi44IDIsMTQuOCA5LjksMTkuNSAxOCwxNC44IDE4LDUuM1wiLz48cG9seWdvbiBwb2ludHM9XCI5LjgsNC4yIDYuNywyLjQgOS44LDAuNCAxMi45LDIuM1wiLz48L3N2Zz4iLAogICAgICAgICJ1bmxvY2siOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxyZWN0IGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHg9XCIzLjVcIiB5PVwiOC41XCIgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjEwXCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGQ9XCJNNi41LDguNSBMNi41LDQuOSBDNi41LDMgOC4xLDEuNSAxMCwxLjUgQzExLjksMS41IDEzLjUsMyAxMy41LDQuOVwiLz48L3N2Zz4iLAogICAgICAgICJ1cGxvYWQiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBwb2ludHM9XCI1IDggOS41IDMuNSAxNCA4XCIvPjxyZWN0IHg9XCIzXCIgeT1cIjE3XCIgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjFcIi8+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgeDE9XCI5LjVcIiB5MT1cIjE1XCIgeDI9XCI5LjVcIiB5Mj1cIjRcIi8+PC9zdmc+IiwKICAgICAgICAidXNlciI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBjeD1cIjkuOVwiIGN5PVwiNi40XCIgcj1cIjQuNFwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTEuNSwxOSBDMi4zLDE0LjUgNS44LDExLjIgMTAsMTEuMiBDMTQuMiwxMS4yIDE3LjcsMTQuNiAxOC41LDE5LjJcIi8+PC9zdmc+IiwKICAgICAgICAidXNlcnMiOiAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxjaXJjbGUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgY3g9XCI3LjdcIiBjeT1cIjguNlwiIHI9XCIzLjVcIi8+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgZD1cIk0xLDE4LjEgQzEuNywxNC42IDQuNCwxMi4xIDcuNiwxMi4xIEMxMC45LDEyLjEgMTMuNywxNC44IDE0LjMsMTguM1wiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTExLjQsNCBDMTIuOCwyLjQgMTUuNCwyLjggMTYuMyw0LjcgQzE3LjIsNi42IDE1LjcsOC45IDEzLjYsOC45IEMxNi41LDguOSAxOC44LDExLjMgMTkuMiwxNC4xXCIvPjwvc3ZnPiIsCiAgICAgICAgInZpZGVvLWNhbWVyYSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBvbHlnb24gZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgcG9pbnRzPVwiMTcuNSA2LjkgMTcuNSAxMy4xIDEzLjUgMTAuNCAxMy41IDE0LjUgMi41IDE0LjUgMi41IDUuNSAxMy41IDUuNSAxMy41IDkuNiAxNy41IDYuOVwiLz48L3N2Zz4iLAogICAgICAgICJ2aW1lbyI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0yLjA2NSw3LjU5QzEuODQsNy4zNjcsMS42NTQsNy4wODIsMS40NjgsNi44MzhjLTAuMzMyLTAuNDItMC4xMzctMC40MTEsMC4yNzQtMC43NzJjMS4wMjYtMC45MSwyLjAwNC0xLjg5NiwzLjEyNy0yLjY4OCBjMS4wMTctMC43MTMsMi4zNjUtMS4xNzMsMy4yODYtMC4wMzljMC44NDksMS4wNDUsMC44NjksMi42MjksMS4wODQsMy44OTFjMC4yMTUsMS4zMDksMC40MjEsMi42NDgsMC44OCwzLjkwMSBjMC4xMjcsMC4zNTIsMC4zNywxLjAxOCwwLjgxLDEuMDc0YzAuNTY3LDAuMDc4LDEuMTQ1LTAuOTE3LDEuNDA4LTEuMjg5YzAuNjg0LTAuOTg3LDEuNjExLTIuMzE3LDEuNDk0LTMuNTg3IGMtMC4xMTUtMS4zNDktMS41NzItMS4wOTUtMi40ODItMC43NzNjMC4xNDYtMS41MTQsMS41NTUtMy4yMTYsMi45MTItMy43OTJjMS40MzktMC41OTcsMy41NzktMC41ODcsNC4zMDIsMS4wMzYgYzAuNzcyLDEuNzU5LDAuMDc4LDMuODAyLTAuNzYzLDUuMzk2Yy0wLjkxOCwxLjczMS0yLjEsMy4zMzMtMy4zNjMsNC44MjljLTEuMTE0LDEuMzI5LTIuNDMyLDIuNzg3LTQuMDkzLDMuNDIyIGMtMS44OTcsMC43MjMtMy4wMjEtMC42ODYtMy42NjctMi4zMThjLTAuNzA1LTEuNzc3LTEuMDU2LTMuNzcxLTEuNTY1LTUuNjIxQzQuODk4LDguNzI2LDQuNjQ0LDcuODM2LDQuMTM2LDcuMTkxIEMzLjQ3Myw2LjM1OCwyLjcyLDcuMTQxLDIuMDY1LDcuNTlDMS45NzcsNy41MDIsMi4xMTUsNy41NTEsMi4wNjUsNy41OUwyLjA2NSw3LjU5elwiLz48L3N2Zz4iLAogICAgICAgICJ3YXJuaW5nIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjE0XCIgcj1cIjFcIi8+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBjeD1cIjEwXCIgY3k9XCIxMFwiIHI9XCI5XCIvPjxwYXRoIGQ9XCJNMTAuOTcsNy43MiBDMTAuODUsOS41NCAxMC41NiwxMS4yOSAxMC41NiwxMS4yOSBDMTAuNTEsMTEuODcgMTAuMjcsMTIgOS45OSwxMiBDOS42OSwxMiA5LjQ5LDExLjg3IDkuNDMsMTEuMjkgQzkuNDMsMTEuMjkgOS4xNiw5LjU0IDkuMDMsNy43MiBDOC45Niw2LjU0IDkuMDMsNiA5LjAzLDYgQzkuMDMsNS40NSA5LjQ2LDUuMDIgOS45OSw1IEMxMC41Myw1LjAxIDEwLjk3LDUuNDQgMTAuOTcsNiBDMTAuOTcsNiAxMS4wNCw2LjU0IDEwLjk3LDcuNzIgTDEwLjk3LDcuNzIgWlwiLz48L3N2Zz4iLAogICAgICAgICJ3aGF0c2FwcCI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xNi43LDMuM2MtMS44LTEuOC00LjEtMi44LTYuNy0yLjhjLTUuMiwwLTkuNCw0LjItOS40LDkuNGMwLDEuNywwLjQsMy4zLDEuMyw0LjdsLTEuMyw0LjlsNS0xLjNjMS40LDAuOCwyLjksMS4yLDQuNSwxLjIgbDAsMGwwLDBjNS4yLDAsOS40LTQuMiw5LjQtOS40QzE5LjUsNy40LDE4LjUsNSwxNi43LDMuMyBNMTAuMSwxNy43TDEwLjEsMTcuN2MtMS40LDAtMi44LTAuNC00LTEuMWwtMC4zLTAuMmwtMywwLjhsMC44LTIuOSBsLTAuMi0wLjNjLTAuOC0xLjItMS4yLTIuNy0xLjItNC4yYzAtNC4zLDMuNS03LjgsNy44LTcuOGMyLjEsMCw0LjEsMC44LDUuNSwyLjNjMS41LDEuNSwyLjMsMy40LDIuMyw1LjUgQzE3LjksMTQuMiwxNC40LDE3LjcsMTAuMSwxNy43IE0xNC40LDExLjljLTAuMi0wLjEtMS40LTAuNy0xLjYtMC44Yy0wLjItMC4xLTAuNC0wLjEtMC41LDAuMWMtMC4yLDAuMi0wLjYsMC44LTAuOCwwLjkgYy0wLjEsMC4yLTAuMywwLjItMC41LDAuMWMtMC4yLTAuMS0xLTAuNC0xLjktMS4yYy0wLjctMC42LTEuMi0xLjQtMS4zLTEuNmMtMC4xLTAuMiwwLTAuNCwwLjEtMC41QzgsOC44LDguMSw4LjcsOC4yLDguNSBjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC4xLTAuMiwwLTAuMywwLTAuNEM4LjQsNy42LDcuOSw2LjUsNy43LDZDNy41LDUuNSw3LjMsNS42LDcuMiw1LjZjLTAuMSwwLTAuMywwLTAuNCwwIGMtMC4yLDAtMC40LDAuMS0wLjYsMC4zYy0wLjIsMC4yLTAuOCwwLjgtMC44LDJjMCwxLjIsMC44LDIuMywxLDIuNGMwLjEsMC4yLDEuNywyLjUsNCwzLjVjMC42LDAuMiwxLDAuNCwxLjMsMC41IGMwLjYsMC4yLDEuMSwwLjIsMS41LDAuMWMwLjUtMC4xLDEuNC0wLjYsMS42LTEuMWMwLjItMC41LDAuMi0xLDAuMS0xLjFDMTQuOCwxMi4xLDE0LjYsMTIsMTQuNCwxMS45XCIvPjwvc3ZnPiIsCiAgICAgICAgIndvcmRwcmVzcyI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xMCwwLjVjLTUuMiwwLTkuNSw0LjMtOS41LDkuNXM0LjMsOS41LDkuNSw5LjVjNS4yLDAsOS41LTQuMyw5LjUtOS41UzE1LjIsMC41LDEwLDAuNUwxMCwwLjVMMTAsMC41eiBNMTUuNiwzLjloLTAuMSBjLTAuOCwwLTEuNCwwLjctMS40LDEuNWMwLDAuNywwLjQsMS4zLDAuOCwxLjljMC4zLDAuNiwwLjcsMS4zLDAuNywyLjNjMCwwLjctMC4zLDEuNS0wLjYsMi43TDE0LjEsMTVsLTMtOC45IGMwLjUsMCwwLjktMC4xLDAuOS0wLjFDMTIuNSw2LDEyLjUsNS4zLDEyLDUuNGMwLDAtMS4zLDAuMS0yLjIsMC4xQzksNS41LDcuNyw1LjQsNy43LDUuNEM3LjIsNS4zLDcuMiw2LDcuNiw2YzAsMCwwLjQsMC4xLDAuOSwwLjEgbDEuMywzLjVMOCwxNUw1LDYuMUM1LjUsNi4xLDUuOSw2LDUuOSw2QzYuNCw2LDYuMyw1LjMsNS45LDUuNGMwLDAtMS4zLDAuMS0yLjIsMC4xYy0wLjIsMC0wLjMsMC0wLjUsMGMxLjUtMi4yLDQtMy43LDYuOS0zLjcgQzEyLjIsMS43LDE0LjEsMi42LDE1LjYsMy45TDE1LjYsMy45TDE1LjYsMy45eiBNMi41LDYuNmwzLjksMTAuOGMtMi43LTEuMy00LjYtNC4yLTQuNi03LjRDMS44LDguOCwyLDcuNiwyLjUsNi42TDIuNSw2LjZMMi41LDYuNiB6IE0xMC4yLDEwLjdsMi41LDYuOWMwLDAsMCwwLjEsMC4xLDAuMUMxMS45LDE4LDExLDE4LjIsMTAsMTguMmMtMC44LDAtMS42LTAuMS0yLjMtMC4zTDEwLjIsMTAuN0wxMC4yLDEwLjdMMTAuMiwxMC43eiBNMTQuMiwxNy4xIGwyLjUtNy4zYzAuNS0xLjIsMC42LTIuMSwwLjYtMi45YzAtMC4zLDAtMC42LTAuMS0wLjhjMC42LDEuMiwxLDIuNSwxLDRDMTguMywxMywxNi42LDE1LjcsMTQuMiwxNy4xTDE0LjIsMTcuMUwxNC4yLDE3LjF6XCIvPjwvc3ZnPiIsCiAgICAgICAgIndvcmxkIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBkPVwiTTEsMTAuNSBMMTksMTAuNVwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBkPVwiTTIuMzUsMTUuNSBMMTcuNjUsMTUuNVwiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBkPVwiTTIuMzUsNS41IEwxNy41MjMsNS41XCIvPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGQ9XCJNMTAsMTkuNDYgTDkuOTgsMTkuNDYgQzcuMzEsMTcuMzMgNS42MSwxNC4xNDEgNS42MSwxMC41OCBDNS42MSw3LjAyIDcuMzMsMy44MyAxMCwxLjcgQzEwLjAxLDEuNyA5Ljk5LDEuNyAxMCwxLjcgTDEwLDEuNyBDMTIuNjcsMy44MyAxNC40LDcuMDIgMTQuNCwxMC41OCBDMTQuNCwxNC4xNDEgMTIuNjcsMTcuMzMgMTAsMTkuNDYgTDEwLDE5LjQ2IEwxMCwxOS40NiBMMTAsMTkuNDYgWlwiLz48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGN4PVwiMTBcIiBjeT1cIjEwLjVcIiByPVwiOVwiLz48L3N2Zz4iLAogICAgICAgICJ4aW5nIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTQuNCw0LjU2IEM0LjI0LDQuNTYgNC4xMSw0LjYxIDQuMDUsNC43MiBDMy45OCw0LjgzIDMuOTksNC45NyA0LjA3LDUuMTIgTDUuODIsOC4xNiBMNS44Miw4LjE3IEwzLjA2LDEzLjA0IEMyLjk5LDEzLjE4IDIuOTksMTMuMzMgMy4wNiwxMy40NCBDMy4xMiwxMy41NSAzLjI0LDEzLjYyIDMuNCwxMy42MiBMNiwxMy42MiBDNi4zOSwxMy42MiA2LjU3LDEzLjM2IDYuNzEsMTMuMTIgQzYuNzEsMTMuMTIgOS40MSw4LjM1IDkuNTEsOC4xNiBDOS40OSw4LjE0IDcuNzIsNS4wNCA3LjcyLDUuMDQgQzcuNTgsNC44MSA3LjM5LDQuNTYgNi45OSw0LjU2IEw0LjQsNC41NiBMNC40LDQuNTYgWlwiLz48cGF0aCBkPVwiTTE1LjMsMSBDMTQuOTEsMSAxNC43NCwxLjI1IDE0LjYsMS41IEMxNC42LDEuNSA5LjAxLDExLjQyIDguODIsMTEuNzQgQzguODMsMTEuNzYgMTIuNTEsMTguNTEgMTIuNTEsMTguNTEgQzEyLjY0LDE4Ljc0IDEyLjg0LDE5IDEzLjIzLDE5IEwxNS44MiwxOSBDMTUuOTgsMTkgMTYuMSwxOC45NCAxNi4xNiwxOC44MyBDMTYuMjMsMTguNzIgMTYuMjMsMTguNTcgMTYuMTYsMTguNDMgTDEyLjUsMTEuNzQgTDEyLjUsMTEuNzIgTDE4LjI1LDEuNTYgQzE4LjMyLDEuNDIgMTguMzIsMS4yNyAxOC4yNSwxLjE2IEMxOC4yMSwxLjA2IDE4LjA4LDEgMTcuOTMsMSBMMTUuMywxIEwxNS4zLDEgWlwiLz48L3N2Zz4iLAogICAgICAgICJ5ZWxwIjogIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTE3LjE3NSwxNC45NzFjLTAuMTEyLDAuNzctMS42ODYsMi43NjctMi40MDYsMy4wNTRjLTAuMjQ2LDAuMS0wLjQ4NywwLjA3Ni0wLjY3NS0wLjA2OVx0Yy0wLjEyMi0wLjA5Ni0yLjQ0Ni0zLjg1OS0yLjQ0Ni0zLjg1OWMtMC4xOTQtMC4yOTMtMC4xNTctMC42ODIsMC4wODMtMC45NzhjMC4yMzQtMC4yODQsMC41ODEtMC4zOTMsMC44ODEtMC4yNzZcdGMwLjAxNiwwLjAxLDQuMjEsMS4zOTQsNC4zMzIsMS40ODJjMC4xNzgsMC4xNDgsMC4yNjMsMC4zNzksMC4yMjUsMC42NDZMMTcuMTc1LDE0Ljk3MUwxNy4xNzUsMTQuOTcxeiBNMTEuNDY0LDEwLjc4OVx0Yy0wLjIwMy0wLjMwNy0wLjE5OS0wLjY2NiwwLjAwOS0wLjkxNmMwLDAsMi42MjUtMy41NzQsMi43NDUtMy42NTdjMC4yMDMtMC4xMzUsMC40NTItMC4xNDEsMC42OS0wLjAyNVx0YzAuNjkxLDAuMzM1LDIuMDg1LDIuNDA1LDIuMTY3LDMuMTk5djAuMDI3YzAuMDI0LDAuMjcxLTAuMDgyLDAuNDkxLTAuMjczLDAuNjIzYy0wLjEzMiwwLjA4My00LjQzLDEuMTU1LTQuNDMsMS4xNTVcdGMtMC4zMjIsMC4wOTYtMC42OC0wLjA2LTAuODgyLTAuMzgxTDExLjQ2NCwxMC43ODl6IE05LjQ3NSw5LjU2M0M5LjMyLDkuNjA5LDguODQ4LDkuNzU3LDguMjY5LDguODE3YzAsMC0zLjkxNi02LjE2LTQuMDA3LTYuMzUxXHRjLTAuMDU3LTAuMjEyLDAuMDExLTAuNDU1LDAuMjAyLTAuNjVDNS4wNDcsMS4yMTEsOC4yMSwwLjMyNyw5LjAzNywwLjUyOWMwLjI3LDAuMDY5LDAuNDU3LDAuMjM4LDAuNTIyLDAuNDc5XHRjMC4wNDcsMC4yNjYsMC40MzMsNS45ODIsMC40ODgsNy4yNjRDMTAuMDk4LDkuMzY4LDkuNjI5LDkuNTE3LDkuNDc1LDkuNTYzeiBNOS45MjcsMTkuMDY2Yy0wLjA4MywwLjIyNS0wLjI3MywwLjM3My0wLjU0LDAuNDIxXHRjLTAuNzYyLDAuMTMtMy4xNS0wLjc1MS0zLjY0Ny0xLjM0MmMtMC4wOTYtMC4xMzEtMC4xNTUtMC4yNjItMC4xNjctMC4zOTRjLTAuMDExLTAuMDk1LDAtMC4xODksMC4wMzYtMC4yNzJcdGMwLjA2MS0wLjE1NSwyLjkxNy0zLjUzOCwyLjkxNy0zLjUzOGMwLjIxNC0wLjI3MiwwLjU5NS0wLjM1NSwwLjk1Mi0wLjIxM2MwLjM0NSwwLjEzLDAuNTYsMC40MjgsMC41MzYsMC43NDlcdEMxMC4wMTQsMTQuNDc5LDkuOTc3LDE4LjkyMyw5LjkyNywxOS4wNjZ6IE0zLjQ5NSwxMy45MTJjLTAuMjM1LTAuMDA5LTAuNDQ0LTAuMTQ4LTAuNTY4LTAuMzgyYy0wLjA4OS0wLjE3LTAuMTUxLTAuNDUzLTAuMTktMC43OTRcdEMyLjYzLDExLjcwMSwyLjc2MSwxMC4xNDQsMy4wNyw5LjY0OGMwLjE0NS0wLjIyNiwwLjM1Ny0wLjM0NSwwLjU5Mi0wLjMzNmMwLjE1NCwwLDQuMjU1LDEuNjY3LDQuMjU1LDEuNjY3XHRjMC4zMjEsMC4xMTgsMC41MjEsMC40NTMsMC41LDAuODMzYy0wLjAyMywwLjM3LTAuMjM2LDAuNjU1LTAuNTUxLDAuNzM4TDMuNDk1LDEzLjkxMnpcIi8+PC9zdmc+IiwKICAgICAgICAieW91dHViZSI6ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xNSw0LjFjMSwwLjEsMi4zLDAsMywwLjhjMC44LDAuOCwwLjksMi4xLDAuOSwzLjFDMTksOS4yLDE5LDEwLjksMTksMTJjLTAuMSwxLjEsMCwyLjQtMC41LDMuNGMtMC41LDEuMS0xLjQsMS41LTIuNSwxLjYgYy0xLjIsMC4xLTguNiwwLjEtMTEsMGMtMS4xLTAuMS0yLjQtMC4xLTMuMi0xYy0wLjctMC44LTAuNy0yLTAuOC0zQzEsMTEuOCwxLDEwLjEsMSw4LjljMC0xLjEsMC0yLjQsMC41LTMuNEMyLDQuNSwzLDQuMyw0LjEsNC4yIEM1LjMsNC4xLDEyLjYsNCwxNSw0LjF6IE04LDcuNXY2bDUuNS0zTDgsNy41elwiLz48L3N2Zz4iIH0pOwoKICAgIH0KCiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LlVJa2l0KSB7CiAgICAgIHdpbmRvdy5VSWtpdC51c2UocGx1Z2luKTsKICAgIH0KCiAgICByZXR1cm4gcGx1Z2luOwoKfSkpOwo=]]></data>
	</file>
	<file>
	  <filename>/js/uikit/uikit-icons.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIFVJa2l0IDMuMTUuMSB8IGh0dHBzOi8vd3d3LmdldHVpa2l0LmNvbSB8IChjKSAyMDE0IC0gMjAyMiBZT090aGVtZSB8IE1JVCBMaWNlbnNlICovKGZ1bmN0aW9uKHQsaSl7dHlwZW9mIGV4cG9ydHM9PSJvYmplY3QiJiZ0eXBlb2YgbW9kdWxlPCJ1Ij9tb2R1bGUuZXhwb3J0cz1pKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoInVpa2l0aWNvbnMiLGkpOih0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR8fHNlbGYsdC5VSWtpdEljb25zPWkoKSl9KSh0aGlzLGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoaSl7dC5pbnN0YWxsZWR8fGkuaWNvbi5hZGQoeyI1MDBweCI6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTkuNjI0LDExLjg2NmMtMC4xNDEsMC4xMzIsMC40NzksMC42NTgsMC42NjIsMC40MThjMC4wNTEtMC4wNDYsMC42MDctMC42MSwwLjY2Mi0wLjY2NGMwLDAsMC43MzgsMC43MTksMC44MTQsMC43MTkgYzAuMSwwLDAuMjA3LTAuMDU1LDAuMzIyLTAuMTdjMC4yNy0wLjI2OSwwLjEzNS0wLjQxNiwwLjA2Ni0wLjQ5NWwtMC42MzEtMC42MTZsMC42NTgtMC42NjhjMC4xNDYtMC4xNTYsMC4wMjEtMC4zMTQtMC4xLTAuNDQ5IGMtMC4xODItMC4xOC0wLjM1OS0wLjIyNi0wLjQ3MS0wLjEyNWwtMC42NTYsMC42NTRsLTAuNjU0LTAuNjU0Yy0wLjAzMy0wLjAzNC0wLjA4LTAuMDQ1LTAuMTI0LTAuMDQ1IGMtMC4wNzksMC0wLjE5MSwwLjA2OC0wLjMwNywwLjE4MWMtMC4yMDIsMC4yMDItMC4yNDcsMC4zNTEtMC4xMzMsMC40NjJsMC42NjUsMC42NjVMOS42MjQsMTEuODY2eiIvPjxwYXRoIGQ9Ik0xMS4wNjYsMi44ODRjLTEuMDYxLDAtMi4xODUsMC4yNDgtMy4wMTEsMC42MDRjLTAuMDg3LDAuMDM0LTAuMTQxLDAuMTA2LTAuMTUsMC4yMDVDNy44OTMsMy43ODQsNy45MTksMy45MDksNy45ODIsNC4wNjYgYzAuMDUsMC4xMzYsMC4xODcsMC40NzQsMC40NTIsMC4zNzJjMC44NDQtMC4zMjYsMS43NzktMC41MDcsMi42MzMtMC41MDdjMC45NjMsMCwxLjksMC4xOTEsMi43ODEsMC41NjQgYzAuNjk1LDAuMjkyLDEuMzU3LDAuNzE5LDIuMDc4LDEuMzRjMC4wNTEsMC4wNDQsMC4xMDUsMC4wNjgsMC4xNjQsMC4wNjhjMC4xNDMsMCwwLjI3My0wLjEzNywwLjM4OS0wLjI3MSBjMC4xOTEtMC4yMTQsMC4zMjQtMC4zOTUsMC4xMzUtMC41NzVjLTAuNjg2LTAuNjU0LTEuNDM2LTEuMTM4LTIuMzYzLTEuNTMzQzEzLjI0LDMuMDk3LDEyLjE2OCwyLjg4NCwxMS4wNjYsMi44ODR6Ii8+PHBhdGggZD0iTTE2LjQzLDE1Ljc0N2MtMC4wOTItMC4wMjgtMC4yNDIsMC4wNS0wLjMwOSwwLjExOWwwLDBjLTAuNjUyLDAuNjUyLTEuNDIsMS4xNjktMi4yNjgsMS41MjEgYy0wLjg3NywwLjM3MS0xLjgxNCwwLjU1MS0yLjc3OSwwLjU1MWMtMC45NjEsMC0xLjg5Ni0wLjE4OS0yLjc3NS0wLjU2NGMtMC44NDgtMC4zNi0xLjYxMi0wLjg3OS0yLjI2OC0xLjUzIGMtMC42ODItMC42ODgtMS4xOTYtMS40NTUtMS41MjktMi4yNjhjLTAuMzI1LTAuNzk5LTAuNDcxLTEuNjQzLTAuNDcxLTEuNjQzYy0wLjA0NS0wLjI0LTAuMjU4LTAuMjQ5LTAuNTY3LTAuMjAzIGMtMC4xMjgsMC4wMjEtMC41MTksMC4wNzktMC40ODMsMC4zNnYwLjAxYzAuMTA1LDAuNjQ0LDAuMjg5LDEuMjg0LDAuNTQ1LDEuODk1YzAuNDE3LDAuOTY5LDEuMDAyLDEuODQ5LDEuNzU2LDIuNjA0IGMwLjc1NywwLjc1NCwxLjYzNiwxLjM0LDIuNjA0LDEuNzU3QzguOTAxLDE4Ljc4NSw5Ljk3LDE5LDExLjA4OCwxOWMxLjEwNCwwLDIuMTg2LTAuMjE1LDMuMTg4LTAuNjQ1IGMxLjgzOC0wLjg5NiwyLjYwNC0xLjc1NywyLjYwNC0xLjc1N2MwLjE4Mi0wLjIwNCwwLjIyNy0wLjMxNy0wLjEtMC42NDNDMTYuNzc5LDE1Ljk1NiwxNi41MjUsMTUuNzc0LDE2LjQzLDE1Ljc0N3oiLz48cGF0aCBkPSJNNS42MzMsMTMuMjg3YzAuMjkzLDAuNzEsMC43MjMsMS4zNDEsMS4yNjIsMS44ODJjMC41NCwwLjU0LDEuMTcyLDAuOTcxLDEuODgyLDEuMjY0YzAuNzMxLDAuMzAzLDEuNTA5LDAuNDYxLDIuMjk4LDAuNDYxIGMwLjgwMSwwLDEuNTc4LTAuMTU4LDIuMjk3LTAuNDYxYzAuNzExLTAuMjkzLDEuMzQ0LTAuNzI0LDEuODgzLTEuMjY0YzAuNTQzLTAuNTQxLDAuOTcxLTEuMTcyLDEuMjY0LTEuODgyIGMwLjMxNC0wLjcyMSwwLjQ2My0xLjUsMC40NjMtMi4yOThjMC0wLjc5LTAuMTQ4LTEuNTY5LTAuNDYzLTIuMjg5Yy0wLjI5My0wLjY5OS0wLjcyMS0xLjMyOS0xLjI2NC0xLjg4MSBjLTAuNTM5LTAuNTQxLTEuMTcyLTAuOTU5LTEuODY3LTEuMjYzYy0wLjcyMS0wLjMwMy0xLjUtMC40NjEtMi4yOTktMC40NjFjLTAuODAyLDAtMS42MTMsMC4xNTktMi4zMjIsMC40NjEgYy0wLjU3NywwLjI1LTEuNTQ0LDAuODY3LTIuMTE5LDEuNDU0djAuMDEyVjIuMTA4aDguMTZDMTUuMSwyLjEwNCwxNS4xLDEuNjksMTUuMSwxLjU1MkMxNS4xLDEuNDE3LDE1LjEsMSwxNC44MDksMUg1LjkxNSBDNS42NzYsMSw1LjUyNywxLjE5Miw1LjUyNywxLjM4NHY2Ljg0YzAsMC4yMTQsMC4yNzMsMC4zNzIsMC41MjksMC40MjhjMC41LDAuMTA1LDAuNjE0LTAuMDU2LDAuNzM3LTAuMjI0bDAsMCBjMC4xOC0wLjI3MywwLjc3Ni0wLjg4NCwwLjc4Ny0wLjg5NGMwLjkwMS0wLjkwNSwyLjExNy0xLjQwOCwzLjQxNi0xLjQwOGMxLjI4NSwwLDIuNSwwLjUwMSwzLjQxMiwxLjQwOCBjMC45MTQsMC45MTQsMS40MDgsMi4xMjIsMS40MDgsMy40MDVjMCwxLjI4OC0wLjUwOCwyLjQ5Ni0xLjQwOCwzLjQwNWMtMC45LDAuODk2LTIuMTUyLDEuNDA2LTMuNDM4LDEuNDA2IGMtMC44NzcsMC0xLjcxMS0wLjIyOS0yLjQzMy0wLjY3MXYtNC4xNThjMC0wLjU1MywwLjIzNy0xLjE1MSwwLjY0My0xLjYxNGMwLjQ2Mi0wLjUxOSwxLjA5NC0wLjc5OSwxLjc4Mi0wLjc5OSBjMC42NjQsMCwxLjI5MywwLjI1MywxLjc1OCwwLjcxNWMwLjQ1OSwwLjQ1OSwwLjcwOSwxLjA3MSwwLjcwOSwxLjcyM2MwLDEuMzg1LTEuMDk0LDIuNDY4LTIuNDg4LDIuNDY4IGMtMC4yNzMsMC0wLjc2OS0wLjEyMS0wLjc4MS0wLjEyNWMtMC4yODEtMC4wODctMC40MDUsMC4zMDYtMC40MzgsMC40MzZjLTAuMTU5LDAuNDk2LDAuMDc5LDAuNTg1LDAuMTIzLDAuNjA3IGMwLjQ1MiwwLjEzNywwLjc0MywwLjE1NywxLjEyOSwwLjE1N2MxLjk3MywwLDMuNTcyLTEuNiwzLjU3Mi0zLjU3YzAtMS45NjQtMS42LTMuNTUyLTMuNTcyLTMuNTUyYy0wLjk3LDAtMS44NzIsMC4zNi0yLjU0NiwxLjAzOCBjLTAuNjU2LDAuNjMxLTEuMDI3LDEuNDg3LTEuMDI3LDIuMzIydjMuNDM4di0wLjAxMWMtMC4zNzItMC40Mi0wLjczMi0xLjA0MS0wLjk4MS0xLjY4MmMtMC4xMDItMC4yNDgtMC4zMTUtMC4yMDItMC42MDctMC4xMTMgYy0wLjEzNSwwLjAzNS0wLjUxOSwwLjE1Ny0wLjQ0LDAuNDM5QzUuMzcyLDEyLjc5OSw1LjU3NywxMy4xNjQsNS42MzMsMTMuMjg3eiIvPjwvc3ZnPicsYWxidW06Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iNSIgeT0iMiIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEiLz48cmVjdCB4PSIzIiB5PSI0IiB3aWR0aD0iMTQiIGhlaWdodD0iMSIvPjxyZWN0IGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgeD0iMS41IiB5PSI2LjUiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxMSIvPjwvc3ZnPicsImFycm93LWRvd24iOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwb2x5Z29uIHBvaW50cz0iMTAuNSwxNi4wOCA1LjYzLDEwLjY2IDYuMzcsMTAgMTAuNSwxNC41OCAxNC42MywxMCAxNS4zNywxMC42NiIvPjxsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgeDE9IjEwLjUiIHkxPSI0IiB4Mj0iMTAuNSIgeTI9IjE1Ii8+PC9zdmc+JywiYXJyb3ctbGVmdCI6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgcG9pbnRzPSIxMCAxNCA1IDkuNSAxMCA1Ii8+PGxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiB4MT0iMTYiIHkxPSI5LjUiIHgyPSI1IiB5Mj0iOS41MiIvPjwvc3ZnPicsImFycm93LXJpZ2h0IjonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cG9seWxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBwb2ludHM9IjEwIDUgMTUgOS41IDEwIDE0Ii8+PGxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiB4MT0iNCIgeTE9IjkuNSIgeDI9IjE1IiB5Mj0iOS41Ii8+PC9zdmc+JywiYXJyb3ctdXAiOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwb2x5Z29uIHBvaW50cz0iMTAuNSw0IDE1LjM3LDkuNCAxNC42MywxMC4wOCAxMC41LDUuNDkgNi4zNywxMC4wOCA1LjYzLDkuNCIvPjxsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgeDE9IjEwLjUiIHkxPSIxNiIgeDI9IjEwLjUiIHkyPSI1Ii8+PC9zdmc+JyxiYWc6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBkPSJNNy41LDcuNVY0QTIuNDgsMi40OCwwLDAsMSwxMCwxLjUsMi41NCwyLjU0LDAsMCwxLDEyLjUsNFY3LjUiLz48cG9seWdvbiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHBvaW50cz0iMTYuNSA3LjUgMy41IDcuNSAyLjUgMTguNSAxNy41IDE4LjUgMTYuNSA3LjUiLz48L3N2Zz4nLGJhbjonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIGN4PSIxMCIgY3k9IjEwIiByPSI5Ii8+PGxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuMSIgeDE9IjQiIHkxPSIzLjUiIHgyPSIxNiIgeTI9IjE2LjUiLz48L3N2Zz4nLGJlaGFuY2U6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTkuNSwxMC42Yy0wLjQtMC41LTAuOS0wLjktMS42LTEuMWMxLjctMSwyLjItMy4yLDAuNy00LjdDNy44LDQsNi4zLDQsNS4yLDRDMy41LDQsMS43LDQsMCw0djEyYzEuNywwLDMuNCwwLDUuMiwwIGMxLDAsMi4xLDAsMy4xLTAuNUMxMC4yLDE0LjYsMTAuNSwxMi4zLDkuNSwxMC42TDkuNSwxMC42eiBNNS42LDYuMWMxLjgsMCwxLjgsMi43LTAuMSwyLjdjLTEsMC0yLDAtMi45LDBWNi4xSDUuNnogTTIuNiwxMy44di0zLjEgYzEuMSwwLDIuMSwwLDMuMiwwYzIuMSwwLDIuMSwzLjIsMC4xLDMuMkwyLjYsMTMuOHoiLz48cGF0aCBkPSJNMTkuOSwxMC45QzE5LjcsOS4yLDE4LjcsNy42LDE3LDdjLTQuMi0xLjMtNy4zLDMuNC01LjMsNy4xYzAuOSwxLjcsMi44LDIuMyw0LjcsMi4xYzEuNy0wLjIsMi45LTEuMywzLjQtMi45aC0yLjIgYy0wLjQsMS4zLTIuNCwxLjUtMy41LDAuNmMtMC40LTAuNC0wLjYtMS4xLTAuNi0xLjdIMjBDMjAsMTEuNywxOS45LDEwLjksMTkuOSwxMC45eiBNMTMuNSwxMC42YzAtMS42LDIuMy0yLjcsMy41LTEuNCBjMC40LDAuNCwwLjUsMC45LDAuNiwxLjRIMTMuNUwxMy41LDEwLjZ6Ii8+PHJlY3QgeD0iMTMiIHk9IjQiIHdpZHRoPSI1IiBoZWlnaHQ9IjEuNCIvPjwvc3ZnPicsYmVsbDonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4xIiBkPSJNMTcsMTUuNSBMMywxNS41IEMyLjk5LDE0LjYxIDMuNzksMTMuMzQgNC4xLDEyLjUxIEM0LjU4LDExLjMgNC43MiwxMC4zNSA1LjE5LDcuMDEgQzUuNTQsNC41MyA1Ljg5LDMuMiA3LjI4LDIuMTYgQzguMTMsMS41NiA5LjM3LDEuNSA5LjgxLDEuNSBMOS45NiwxLjUgQzkuOTYsMS41IDExLjYyLDEuNDEgMTIuNjcsMi4xNyBDMTQuMDgsMy4yIDE0LjQyLDQuNTQgMTQuNzcsNy4wMiBDMTUuMjYsMTAuMzUgMTUuNCwxMS4zMSAxNS44NywxMi41MiBDMTYuMiwxMy4zNCAxNy4wMSwxNC42MSAxNywxNS41IEwxNywxNS41IFoiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIGQ9Ik0xMi4zOSwxNiBDMTIuMzksMTcuMzcgMTEuMzUsMTguNDMgOS45MSwxOC40MyBDOC40OCwxOC40MyA3LjQyLDE3LjM3IDcuNDIsMTYiLz48L3N2Zz4nLGJvbGQ6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUsMTUuMyBDNS42NiwxNS4zIDUuOSwxNSA1LjksMTQuNTMgTDUuOSw1LjUgQzUuOSw0LjkyIDUuNTYsNC43IDUsNC43IEw1LDQgTDguOTUsNCBDMTIuNiw0IDEzLjcsNS4zNyAxMy43LDYuOSBDMTMuNyw3Ljg3IDEzLjE0LDkuMTcgMTAuODYsOS41OSBMMTAuODYsOS43IEMxMy4yNSw5Ljg2IDE0LjI5LDExLjI4IDE0LjMsMTIuNTQgQzE0LjMsMTQuNDcgMTIuOTQsMTYgOSwxNiBMNSwxNiBMNSwxNS4zIFogTTksOS4zIEMxMS4xOSw5LjMgMTEuOCw4LjUgMTEuODUsNyBDMTEuODUsNS42NSAxMS4zLDQuOCA5LDQuOCBMNy42Nyw0LjggTDcuNjcsOS4zIEw5LDkuMyBaIE05LjE4NSwxNS4yMiBDMTEuOTcsMTUgMTIuMzksMTQgMTIuNCwxMi41OCBDMTIuNCwxMS4xNSAxMS4zOSwxMCA5LDEwIEw3LjY3LDEwIEw3LjY3LDE1IEw5LjE4LDE1IFoiLz48L3N2Zz4nLGJvbHQ6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTQuNzQsMjAgTDcuNzMsMTIgTDMsMTIgTDE1LjQzLDEgTDEyLjMyLDkgTDE3LjAyLDkgTDQuNzQsMjAgTDQuNzQsMjAgTDQuNzQsMjAgWiBNOS4xOCwxMSBMNy4xLDE2LjM5IEwxNC40NywxMCBMMTAuODYsMTAgTDEyLjk5LDQuNjcgTDUuNjEsMTEgTDkuMTgsMTEgTDkuMTgsMTEgTDkuMTgsMTEgWiIvPjwvc3ZnPicsYm9va21hcms6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlnb24gZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBwb2ludHM9IjUuNSAxLjUgMTUuNSAxLjUgMTUuNSAxNy41IDEwLjUgMTIuNSA1LjUgMTcuNSIvPjwvc3ZnPicsY2FsZW5kYXI6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTSAyLDMgMiwxNyAxOCwxNyAxOCwzIDIsMyBaIE0gMTcsMTYgMywxNiAzLDggMTcsOCAxNywxNiBaIE0gMTcsNyAzLDcgMyw0IDE3LDQgMTcsNyBaIi8+PHJlY3Qgd2lkdGg9IjEiIGhlaWdodD0iMyIgeD0iNiIgeT0iMiIvPjxyZWN0IHdpZHRoPSIxIiBoZWlnaHQ9IjMiIHg9IjEzIiB5PSIyIi8+PC9zdmc+JyxjYW1lcmE6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGNpcmNsZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4xIiBjeD0iMTAiIGN5PSIxMC44IiByPSIzLjgiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIGQ9Ik0xLDQuNSBDMC43LDQuNSAwLjUsNC43IDAuNSw1IEwwLjUsMTcgQzAuNSwxNy4zIDAuNywxNy41IDEsMTcuNSBMMTksMTcuNSBDMTkuMywxNy41IDE5LjUsMTcuMyAxOS41LDE3IEwxOS41LDUgQzE5LjUsNC43IDE5LjMsNC41IDE5LDQuNSBMMTMuNSw0LjUgTDEzLjUsMi45IEMxMy41LDIuNiAxMy4zLDIuNSAxMywyLjUgTDcsMi41IEM2LjcsMi41IDYuNSwyLjYgNi41LDIuOSBMNi41LDQuNSBMMSw0LjUgTDEsNC41IFoiLz48L3N2Zz4nLGNhcnQ6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGNpcmNsZSBjeD0iNy4zIiBjeT0iMTcuMyIgcj0iMS40Ii8+PGNpcmNsZSBjeD0iMTMuMyIgY3k9IjE3LjMiIHI9IjEuNCIvPjxwb2x5bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHBvaW50cz0iMCAyIDMuMiA0IDUuMyAxMi41IDE2IDEyLjUgMTggNi41IDggNi41Ii8+PC9zdmc+JyxjaGVjazonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cG9seWxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuMSIgcG9pbnRzPSI0LDEwIDgsMTUgMTcsNCIvPjwvc3ZnPicsImNoZXZyb24tZG91YmxlLWxlZnQiOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwb2x5bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4wMyIgcG9pbnRzPSIxMCAxNCA2IDEwIDEwIDYiLz48cG9seWxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuMDMiIHBvaW50cz0iMTQgMTQgMTAgMTAgMTQgNiIvPjwvc3ZnPicsImNoZXZyb24tZG91YmxlLXJpZ2h0IjonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cG9seWxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuMDMiIHBvaW50cz0iMTAgNiAxNCAxMCAxMCAxNCIvPjxwb2x5bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4wMyIgcG9pbnRzPSI2IDYgMTAgMTAgNiAxNCIvPjwvc3ZnPicsImNoZXZyb24tZG93biI6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjAzIiBwb2ludHM9IjE2IDcgMTAgMTMgNCA3Ii8+PC9zdmc+JywiY2hldnJvbi1sZWZ0IjonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cG9seWxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuMDMiIHBvaW50cz0iMTMgMTYgNyAxMCAxMyA0Ii8+PC9zdmc+JywiY2hldnJvbi1yaWdodCI6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjAzIiBwb2ludHM9IjcgNCAxMyAxMCA3IDE2Ii8+PC9zdmc+JywiY2hldnJvbi11cCI6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjAzIiBwb2ludHM9IjQgMTMgMTAgNyAxNiAxMyIvPjwvc3ZnPicsY2xvY2s6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGNpcmNsZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4xIiBjeD0iMTAiIGN5PSIxMCIgcj0iOSIvPjxyZWN0IHg9IjkiIHk9IjQiIHdpZHRoPSIxIiBoZWlnaHQ9IjciLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4xIiBkPSJNMTMuMDE4LDE0LjE5NyBMOS40NDUsMTAuNjI1Ii8+PC9zdmc+JyxjbG9zZTonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4wNiIgZD0iTTE2LDE2IEw0LDQiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4wNiIgZD0iTTE2LDQgTDQsMTYiLz48L3N2Zz4nLCJjbG91ZC1kb3dubG9hZCI6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuMSIgZD0iTTYuNSwxNC42MSBMMy43NSwxNC42MSBDMS45NiwxNC42MSAwLjUsMTMuMTcgMC41LDExLjM5IEMwLjUsOS43NiAxLjcyLDguNDEgMy4zLDguMiBDMy4zOCw1LjMxIDUuNzUsMyA4LjY4LDMgQzExLjE5LDMgMTMuMzEsNC43MSAxMy44OSw3LjAyIEMxNC4zOSw2LjggMTQuOTMsNi42OCAxNS41LDYuNjggQzE3LjcxLDYuNjggMTkuNSw4LjQ1IDE5LjUsMTAuNjQgQzE5LjUsMTIuODMgMTcuNzEsMTQuNiAxNS41LDE0LjYgTDEyLjUsMTQuNiIvPjxwb2x5bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHBvaW50cz0iMTEuNzUgMTYgOS41IDE4LjI1IDcuMjUgMTYiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIGQ9Ik05LjUsMTggTDkuNSw5LjUiLz48L3N2Zz4nLCJjbG91ZC11cGxvYWQiOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIGQ9Ik02LjUsMTQuNjEgTDMuNzUsMTQuNjEgQzEuOTYsMTQuNjEgMC41LDEzLjE3IDAuNSwxMS4zOSBDMC41LDkuNzYgMS43Miw4LjQxIDMuMzEsOC4yIEMzLjM4LDUuMzEgNS43NSwzIDguNjgsMyBDMTEuMTksMyAxMy4zMSw0LjcxIDEzLjg5LDcuMDIgQzE0LjM5LDYuOCAxNC45Myw2LjY4IDE1LjUsNi42OCBDMTcuNzEsNi42OCAxOS41LDguNDUgMTkuNSwxMC42NCBDMTkuNSwxMi44MyAxNy43MSwxNC42IDE1LjUsMTQuNiBMMTIuNSwxNC42Ii8+PHBvbHlsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgcG9pbnRzPSI3LjI1IDExLjc1IDkuNSA5LjUgMTEuNzUgMTEuNzUiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIGQ9Ik05LjUsMTggTDkuNSw5LjUiLz48L3N2Zz4nLGNvZGU6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjAxIiBwb2ludHM9IjEzLDQgMTksMTAgMTMsMTYiLz48cG9seWxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuMDEiIHBvaW50cz0iNyw0IDEsMTAgNywxNiIvPjwvc3ZnPicsY29nOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxjaXJjbGUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBjeD0iOS45OTciIGN5PSIxMCIgcj0iMy4zMSIvPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgZD0iTTE4LjQ4OCwxMi4yODUgTDE2LjIwNSwxNi4yMzcgQzE1LjMyMiwxNS40OTYgMTQuMTg1LDE1LjI4MSAxMy4zMDMsMTUuNzkxIEMxMi40MjgsMTYuMjg5IDEyLjA0NywxNy4zNzMgMTIuMjQ2LDE4LjUgTDcuNzM1LDE4LjUgQzcuOTM4LDE3LjM3NCA3LjU1MywxNi4yOTkgNi42ODQsMTUuNzkxIEM1LjgwMSwxNS4yNyA0LjY1NSwxNS40OTIgMy43NzMsMTYuMjM3IEwxLjUsMTIuMjg1IEMyLjU3MywxMS44NzEgMy4zMTcsMTAuOTk5IDMuMzE3LDkuOTkxIEMzLjMwNSw4Ljk4IDIuNTczLDguMTIxIDEuNSw3LjcxNiBMMy43NjUsMy43ODQgQzQuNjQ1LDQuNTE2IDUuNzk0LDQuNzM4IDYuNjg3LDQuMjMyIEM3LjU1NSwzLjcyMiA3LjkzOSwyLjYzNyA3LjczNSwxLjUgTDEyLjI2MywxLjUgQzEyLjA3MiwyLjYzNyAxMi40NDEsMy43MSAxMy4zMTQsNC4yMiBDMTQuMjA2LDQuNzMgMTUuMzQzLDQuNTE2IDE2LjIyNSwzLjc5NCBMMTguNDg3LDcuNzE0IEMxNy40MDQsOC4xMTcgMTYuNjYxLDguOTg4IDE2LjY3LDEwLjAwOSBDMTYuNjcyLDExLjAxOCAxNy40MTUsMTEuODggMTguNDg4LDEyLjI4NSBMMTguNDg4LDEyLjI4NSBaIi8+PC9zdmc+Jyxjb21tZW50Oic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik02LDE4LjcxIEw2LDE0IEwxLDE0IEwxLDEgTDE5LDEgTDE5LDE0IEwxMC43MSwxNCBMNiwxOC43MSBMNiwxOC43MSBaIE0yLDEzIEw3LDEzIEw3LDE2LjI5IEwxMC4yOSwxMyBMMTgsMTMgTDE4LDIgTDIsMiBMMiwxMyBMMiwxMyBaIi8+PC9zdmc+Jyxjb21tZW50aW5nOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwb2x5Z29uIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgcG9pbnRzPSIxLjUsMS41IDE4LjUsMS41IDE4LjUsMTMuNSAxMC41LDEzLjUgNi41LDE3LjUgNi41LDEzLjUgMS41LDEzLjUiLz48Y2lyY2xlIGN4PSIxMCIgY3k9IjgiIHI9IjEiLz48Y2lyY2xlIGN4PSI2IiBjeT0iOCIgcj0iMSIvPjxjaXJjbGUgY3g9IjE0IiBjeT0iOCIgcj0iMSIvPjwvc3ZnPicsY29tbWVudHM6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgcG9pbnRzPSIyIDAuNSAxOS41IDAuNSAxOS41IDEzIi8+PHBhdGggZD0iTTUsMTkuNzEgTDUsMTUgTDAsMTUgTDAsMiBMMTgsMiBMMTgsMTUgTDkuNzEsMTUgTDUsMTkuNzEgTDUsMTkuNzEgTDUsMTkuNzEgWiBNMSwxNCBMNiwxNCBMNiwxNy4yOSBMOS4yOSwxNCBMMTcsMTQgTDE3LDMgTDEsMyBMMSwxNCBMMSwxNCBMMSwxNCBaIi8+PC9zdmc+Jyxjb3B5Oic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgeD0iMy41IiB5PSIyLjUiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxNiIvPjxwb2x5bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHBvaW50cz0iNSAwLjUgMTcuNSAwLjUgMTcuNSAxNyIvPjwvc3ZnPicsImNyZWRpdC1jYXJkIjonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHg9IjEuNSIgeT0iNC41IiB3aWR0aD0iMTciIGhlaWdodD0iMTIiLz48cmVjdCB4PSIxIiB5PSI3IiB3aWR0aD0iMTgiIGhlaWdodD0iMyIvPjwvc3ZnPicsZGF0YWJhc2U6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGVsbGlwc2UgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBjeD0iMTAiIGN5PSI0LjY0IiByeD0iNy41IiByeT0iMy4xNCIvPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgZD0iTTE3LjUsOC4xMSBDMTcuNSw5Ljg1IDE0LjE0LDExLjI1IDEwLDExLjI1IEM1Ljg2LDExLjI1IDIuNSw5Ljg0IDIuNSw4LjExIi8+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBkPSJNMTcuNSwxMS4yNSBDMTcuNSwxMi45OSAxNC4xNCwxNC4zOSAxMCwxNC4zOSBDNS44NiwxNC4zOSAyLjUsMTIuOTggMi41LDExLjI1Ii8+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBkPSJNMTcuNDksNC42NCBMMTcuNSwxNC4zNiBDMTcuNSwxNi4xIDE0LjE0LDE3LjUgMTAsMTcuNSBDNS44NiwxNy41IDIuNSwxNi4wOSAyLjUsMTQuMzYgTDIuNSw0LjY0Ii8+PC9zdmc+JyxkZXNrdG9wOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHg9IjgiIHk9IjE1IiB3aWR0aD0iMSIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTEiIHk9IjE1IiB3aWR0aD0iMSIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iNSIgeT0iMTYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxIi8+PHJlY3QgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiB4PSIxLjUiIHk9IjMuNSIgd2lkdGg9IjE3IiBoZWlnaHQ9IjExIi8+PC9zdmc+JyxkaXNjb3JkOic8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiPjxwYXRoIGQ9Ik0xNi4wNzQsNC4zNjFhMTQuMjQzLDE0LjI0MywwLDAsMC0zLjYxLTEuMTM0LDEwLjYxLDEwLjYxLDAsMCwwLS40NjMuOTYsMTMuMjE5LDEzLjIxOSwwLDAsMC00LDAsMTAuMTM4LDEwLjEzOCwwLDAsMC0uNDY4LS45NkExNC4yMDYsMTQuMjA2LDAsMCwwLDMuOTE5LDQuMzY0LDE1LjE0NiwxNS4xNDYsMCwwLDAsMS4zMjQsMTQuNWExNC40MzUsMTQuNDM1LDAsMCwwLDQuNDI4LDIuMjY5QTEwLjk4MiwxMC45ODIsMCwwLDAsNi43LDE1LjIxYTkuMjk0LDkuMjk0LDAsMCwxLTEuNDk0LS43MjdjLjEyNS0uMDkzLjI0OC0uMTkuMzY2LS4yODlhMTAuMjEyLDEwLjIxMiwwLDAsMCw4Ljg1NCwwYy4xMTkuMS4yNDIuMi4zNjYuMjg5YTkuMjc0LDkuMjc0LDAsMCwxLTEuNS43MjgsMTAuOCwxMC44LDAsMCwwLC45NDgsMS41NjIsMTQuNDE5LDE0LjQxOSwwLDAsMCw0LjQzMS0yLjI3QTE1LjEyOCwxNS4xMjgsMCwwLDAsMTYuMDc0LDQuMzYxWm0tOC45ODEsOC4xYTEuNywxLjcsMCwwLDEtMS41NzMtMS43OUExLjY4OSwxLjY4OSwwLDAsMSw3LjA5Myw4Ljg4MWExLjY3OSwxLjY3OSwwLDAsMSwxLjU3MywxLjc5MUExLjY4NywxLjY4NywwLDAsMSw3LjA5MywxMi40NjJabTUuODE0LDBhMS43LDEuNywwLDAsMS0xLjU3My0xLjc5LDEuNjg5LDEuNjg5LDAsMCwxLDEuNTczLTEuNzkxLDEuNjc5LDEuNjc5LDAsMCwxLDEuNTczLDEuNzkxQTEuNjg4LDEuNjg4LDAsMCwxLDEyLjkwNywxMi40NjJaIi8+PC9zdmc+Jyxkb3dubG9hZDonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cG9seWxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBwb2ludHM9IjE0LDEwIDkuNSwxNC41IDUsMTAiLz48cmVjdCB4PSIzIiB5PSIxNyIgd2lkdGg9IjEzIiBoZWlnaHQ9IjEiLz48bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHgxPSI5LjUiIHkxPSIxMy45MSIgeDI9IjkuNSIgeTI9IjMiLz48L3N2Zz4nLGRyaWJiYmxlOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjQiIGQ9Ik0xLjMsOC45YzAsMCw1LDAuMSw4LjYtMWMxLjQtMC40LDIuNi0wLjksNC0xLjkgYzEuNC0xLjEsMi41LTIuNSwyLjUtMi41Ii8+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuNCIgZD0iTTMuOSwxNi42YzAsMCwxLjctMi44LDMuNS00LjIgYzEuOC0xLjMsNC0yLDUuNy0yLjJDMTYsMTAsMTksMTAuNiwxOSwxMC42Ii8+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuNCIgZD0iTTYuOSwxLjZjMCwwLDMuMyw0LjYsNC4yLDYuOCBjMC40LDAuOSwxLjMsMy4xLDEuOSw1LjJjMC42LDIsMC45LDQuNCwwLjksNC40Ii8+PGNpcmNsZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS40IiBjeD0iMTAiIGN5PSIxMCIgcj0iOSIvPjwvc3ZnPicsZXRzeTonPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBkPSJNOCw0LjI2QzgsNC4wNyw4LDQsOC4zMSw0aDQuNDZjLjc5LDAsMS4yMi42NywxLjUzLDEuOTFsLjI1LDFoLjc2Yy4xNC0yLjgyLjI2LTQsLjI2LTRTMTMuNjUsMywxMi41MiwzSDYuODFMMy43NSwyLjkydi44NGwxLC4yYy43My4xMS45LjI3LDEsMSwwLDAsLjA2LDIsLjA2LDUuMTdzLS4wNiw1LjE0LS4wNiw1LjE0YzAsLjU5LS4yMy44MS0xLC45NGwtMSwuMnYuODRsMy4wNi0uMWg1LjExYzEuMTUsMCwzLjgyLjEsMy44Mi4xLDAtLjcuNDUtMy44OC41MS00LjIyaC0uNzNsLS43NiwxLjY5YTIuMjUsMi4yNSwwLDAsMS0yLjQ1LDEuNDdIOS40Yy0xLDAtMS40NC0uNC0xLjQ0LTEuMjRWMTAuNDRzMi4xNiwwLDIuODYuMDZjLjU1LDAsLjg1LjE5LDEuMDYsMWwuMjMsMUgxM0wxMi45LDkuOTQsMTMsNy40MWgtLjg1bC0uMjgsMS4xM2MtLjE2Ljc0LS4yOC44NC0xLDEtMSwuMS0yLjg5LjA5LTIuODkuMDlaIi8+PC9zdmc+JyxleHBhbmQ6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlnb24gcG9pbnRzPSIxMyAyIDE4IDIgMTggNyAxNyA3IDE3IDMgMTMgMyIvPjxwb2x5Z29uIHBvaW50cz0iMiAxMyAzIDEzIDMgMTcgNyAxNyA3IDE4IDIgMTgiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4xIiBkPSJNMTEsOSBMMTcsMyIvPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIGQ9Ik0zLDE3IEw5LDExIi8+PC9zdmc+JyxmYWNlYm9vazonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTEsMTBoMi42bDAuNC0zSDExVjUuM2MwLTAuOSwwLjItMS41LDEuNS0xLjVIMTRWMS4xYy0wLjMsMC0xLTAuMS0yLjEtMC4xQzkuNiwxLDgsMi40LDgsNXYySDUuNXYzSDh2OGgzVjEweiIvPjwvc3ZnPicsImZpbGUtZWRpdCI6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBkPSJNMTguNjUsMS42OCBDMTguNDEsMS40NSAxOC4xMDksMS4zMyAxNy44MSwxLjMzIEMxNy40OTksMS4zMyAxNy4yMDksMS40NSAxNi45OCwxLjY4IEw4LjkyLDkuNzYgTDgsMTIuMzMgTDEwLjU1LDExLjQxIEwxOC42NTEsMy4zNCBDMTkuMTIsMi44NyAxOS4xMiwyLjE1IDE4LjY1LDEuNjggTDE4LjY1LDEuNjggTDE4LjY1LDEuNjggWiIvPjxwb2x5bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHBvaW50cz0iMTYuNSA4LjQ4MiAxNi41IDE4LjUgMy41IDE4LjUgMy41IDEuNSAxNC4yMTEgMS41Ii8+PC9zdmc+JywiZmlsZS1wZGYiOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgd2lkdGg9IjEzIiBoZWlnaHQ9IjE3IiB4PSIzLjUiIHk9IjEuNSIvPjxwYXRoIGQ9Ik0xNC42NSAxMS42N2MtLjQ4LjMtMS4zNy0uMTktMS43OS0uMzdhNC42NSA0LjY1IDAgMCAxIDEuNDkuMDZjLjM1LjEuMzYuMjguMy4zMXptLTYuMy4wNmwuNDMtLjc5YTE0LjcgMTQuNyAwIDAgMCAuNzUtMS42NCA1LjQ4IDUuNDggMCAwIDAgMS4yNSAxLjU1bC4yLjE1YTE2LjM2IDE2LjM2IDAgMCAwLTIuNjMuNzN6TTkuNSA1LjMyYy4yIDAgLjMyLjUuMzIuOTdhMS45OSAxLjk5IDAgMCAxLS4yMyAxLjA0IDUuMDUgNS4wNSAwIDAgMS0uMTctMS4zczAtLjcxLjA4LS43MXptLTMuOSA5YTQuMzUgNC4zNSAwIDAgMSAxLjIxLTEuNDZsLjI0LS4yMmE0LjM1IDQuMzUgMCAwIDEtMS40NiAxLjY4em05LjIzLTMuM2EyLjA1IDIuMDUgMCAwIDAtMS4zMi0uMyAxMS4wNyAxMS4wNyAwIDAgMC0xLjU4LjExIDQuMDkgNC4wOSAwIDAgMS0uNzQtLjUgNS4zOSA1LjM5IDAgMCAxLTEuMzItMi4wNiAxMC4zNyAxMC4zNyAwIDAgMCAuMjgtMi42MiAxLjgzIDEuODMgMCAwIDAtLjA3LS4yNS41Ny41NyAwIDAgMC0uNTItLjRIOS40YS41OS41OSAwIDAgMC0uNi4zOCA2Ljk1IDYuOTUgMCAwIDAgLjM3IDMuMTRjLS4yNi42My0xIDIuMTItMSAyLjEyLS4zLjU4LS41NyAxLjA4LS44MiAxLjVsLS44LjQ0QTMuMTEgMy4xMSAwIDAgMCA1IDE0LjE2YS4zOS4zOSAwIDAgMCAuMTUuNDJsLjI0LjEzYzEuMTUuNTYgMi4yOC0xLjc0IDIuNjYtMi40MmEyMy4xIDIzLjEgMCAwIDEgMy41OS0uODUgNC41NiA0LjU2IDAgMCAwIDIuOTEuOC41LjUgMCAwIDAgLjMtLjIxIDEuMSAxLjEgMCAwIDAgLjEyLS43NS44NC44NCAwIDAgMC0uMTQtLjI1eiIvPjwvc3ZnPicsImZpbGUtdGV4dCI6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiB3aWR0aD0iMTMiIGhlaWdodD0iMTciIHg9IjMuNSIgeT0iMS41Ii8+PGxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiB4MT0iNiIgeDI9IjEyIiB5MT0iMTIuNSIgeTI9IjEyLjUiLz48bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHgxPSI2IiB4Mj0iMTQiIHkxPSI4LjUiIHkyPSI4LjUiLz48bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHgxPSI2IiB4Mj0iMTQiIHkxPSI2LjUiIHkyPSI2LjUiLz48bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHgxPSI2IiB4Mj0iMTQiIHkxPSIxMC41IiB5Mj0iMTAuNSIvPjwvc3ZnPicsZmlsZTonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHg9IjMuNSIgeT0iMS41IiB3aWR0aD0iMTMiIGhlaWdodD0iMTciLz48L3N2Zz4nLGZsaWNrcjonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSI1LjUiIGN5PSI5LjUiIHI9IjMuNSIvPjxjaXJjbGUgY3g9IjE0LjUiIGN5PSI5LjUiIHI9IjMuNSIvPjwvc3ZnPicsZm9sZGVyOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwb2x5Z29uIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgcG9pbnRzPSI5LjUgNS41IDguNSAzLjUgMS41IDMuNSAxLjUgMTYuNSAxOC41IDE2LjUgMTguNSA1LjUiLz48L3N2Zz4nLGZvcndhcmQ6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIuNDcsMTMuMTEgQzQuMDIsMTAuMDIgNi4yNyw3Ljg1IDkuMDQsNi42MSBDOS40OCw2LjQxIDEwLjI3LDYuMTMgMTEsNS45MSBMMTEsMiBMMTguODksOSBMMTEsMTYgTDExLDEyLjEzIEM5LjI1LDEyLjQ3IDcuNTgsMTMuMTkgNi4wMiwxNC4yNSBDMy4wMywxNi4yOCAxLjYzLDE4LjU0IDEuNjMsMTguNTQgQzEuNjMsMTguNTQgMS4zOCwxNS4yOCAyLjQ3LDEzLjExIEwyLjQ3LDEzLjExIFogTTUuMywxMy41MyBDNi45MiwxMi40IDkuMDQsMTEuNCAxMiwxMC45MiBMMTIsMTMuNjMgTDE3LjM2LDkgTDEyLDQuMjUgTDEyLDYuOCBDMTEuNzEsNi44NiAxMC44Niw3LjAyIDkuNjcsNy40OSBDNi43OSw4LjY1IDQuNTgsMTAuOTYgMy40OSwxMy4wOCBDMy4xOCwxMy43IDIuNjgsMTQuODcgMi40OSwxNiBDMy4yOCwxNS4wNSA0LjQsMTQuMTUgNS4zLDEzLjUzIEw1LjMsMTMuNTMgWiIvPjwvc3ZnPicsZm91cnNxdWFyZTonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTUuMjMsMiBDMTUuOTYsMiAxNi40LDIuNDEgMTYuNSwyLjg2IEMxNi41NywzLjE1IDE2LjU2LDMuNDQgMTYuNTEsMy43MyBDMTYuNDYsNC4wNCAxNC44NiwxMS43MiAxNC43NSwxMi4wMyBDMTQuNTYsMTIuNTYgMTQuMTYsMTIuODIgMTMuNjEsMTIuODMgQzEzLjAzLDEyLjg0IDExLjA5LDEyLjUxIDEwLjY5LDEzIEMxMC4zOCwxMy4zOCA3Ljc5LDE2LjM5IDYuODEsMTcuNTMgQzYuNjEsMTcuNzYgNi40LDE3Ljk2IDYuMDgsMTcuOTkgQzUuNjgsMTguMDQgNS4yOSwxNy44NyA1LjE3LDE3LjQ1IEM1LjEyLDE3LjI4IDUuMSwxNy4wOSA1LjEsMTYuOTEgQzUuMSwxMi40IDQuODYsNy44MSA1LjExLDMuMzEgQzUuMTcsMi41IDUuODEsMi4xMiA2LjUzLDIgTDE1LjIzLDIgTDE1LjIzLDIgWiBNOS43NiwxMS40MiBDOS45NCwxMS4xOSAxMC4xNywxMS4xIDEwLjQ1LDExLjEgTDEyLjg2LDExLjEgQzEzLjEyLDExLjEgMTMuMzEsMTAuOTQgMTMuMzYsMTAuNjkgQzEzLjM3LDEwLjY0IDEzLjYyLDkuNDEgMTMuNzQsOC44MyBDMTMuODEsOC41MiAxMy41Myw4LjI4IDEzLjI3LDguMjggQzEyLjM1LDguMjkgMTEuNDIsOC4yOCAxMC41LDguMjggQzkuODQsOC4yOCA5LjgzLDcuNjkgOS44Miw3LjIxIEM5LjgsNi44NSAxMC4xMyw2LjU1IDEwLjUsNi41NSBDMTEuNTksNi41NiAxMi42Nyw2LjU1IDEzLjc2LDYuNTUgQzE0LjAzLDYuNTUgMTQuMjMsNi40IDE0LjI4LDYuMTQgQzE0LjM0LDUuODcgMTQuNjcsNC4yOSAxNC42Nyw0LjI5IEMxNC42Nyw0LjI5IDE0LjgyLDMuNzQgMTQuMTksMy43NCBMNy4zNCwzLjc0IEM3LDMuNzUgNi44NCw0LjAyIDYuODQsNC4zMyBDNi44NCw3LjU4IDYuODUsMTQuOTUgNi44NSwxNC45OSBDNi44NywxNSA4Ljg5LDEyLjUxIDkuNzYsMTEuNDIgTDkuNzYsMTEuNDIgWiIvPjwvc3ZnPicsZnV0dXJlOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwb2x5bGluZSBwb2ludHM9IjE5IDIgMTggMiAxOCA2IDE0IDYgMTQgNyAxOSA3IDE5IDIiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4xIiBkPSJNMTgsNi41NDggQzE2LjcwOSwzLjI5IDEzLjM1NCwxIDkuNiwxIEM0LjYsMSAwLjYsNSAwLjYsMTAgQzAuNiwxNSA0LjYsMTkgOS42LDE5IEMxNC42LDE5IDE4LjYsMTUgMTguNiwxMCIvPjxyZWN0IHg9IjkiIHk9IjQiIHdpZHRoPSIxIiBoZWlnaHQ9IjciLz48cGF0aCBkPSJNMTMuMDE4LDE0LjE5NyBMOS40NDUsMTAuNjI1IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4xIi8+PC9zdmc+JywiZ2l0LWJyYW5jaCI6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGNpcmNsZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4yIiBjeD0iNyIgY3k9IjMiIHI9IjIiLz48Y2lyY2xlIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjIiIGN4PSIxNCIgY3k9IjYiIHI9IjIiLz48Y2lyY2xlIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjIiIGN4PSI3IiBjeT0iMTciIHI9IjIiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMiIgZD0iTTE0LDggQzE0LDEwLjQxIDEyLjQzLDEwLjg3IDEwLjU2LDExLjI1IEM5LjA5LDExLjU0IDcsMTIuMDYgNywxNSBMNyw1Ii8+PC9zdmc+JywiZ2l0LWZvcmsiOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxjaXJjbGUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuMiIgY3g9IjUuNzkiIGN5PSIyLjc5IiByPSIxLjc5Ii8+PGNpcmNsZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4yIiBjeD0iMTQuMTkiIGN5PSIyLjc5IiByPSIxLjc5Ii8+PGNpcmNsZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4yIiBjeD0iMTAuMDMiIGN5PSIxNi43OSIgcj0iMS43OSIvPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIyIiBkPSJNNS43OSw0LjU3IEw1Ljc5LDYuNTYgQzUuNzksOS4xOSAxMC4wMywxMC4yMiAxMC4wMywxMy4zMSBDMTAuMDMsMTQuODYgMTAuMDQsMTQuNTUgMTAuMDQsMTQuNTUgQzEwLjA0LDE0LjM3IDEwLjA0LDE0Ljg2IDEwLjA0LDEzLjMxIEMxMC4wNCwxMC4yMiAxNC4yLDkuMTkgMTQuMiw2LjU2IEwxNC4yLDQuNTciLz48L3N2Zz4nLCJnaXRodWItYWx0IjonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTAsMC41IEM0Ljc1LDAuNSAwLjUsNC43NiAwLjUsMTAuMDEgQzAuNSwxNS4yNiA0Ljc1LDE5LjUxIDEwLDE5LjUxIEMxNS4yNCwxOS41MSAxOS41LDE1LjI2IDE5LjUsMTAuMDEgQzE5LjUsNC43NiAxNS4yNSwwLjUgMTAsMC41IEwxMCwwLjUgWiBNMTIuODEsMTcuNjkgQzEyLjgxLDE3LjY5IDEyLjgxLDE3LjcgMTIuNzksMTcuNjkgQzEyLjQ3LDE3Ljc1IDEyLjM1LDE3LjU5IDEyLjM1LDE3LjM2IEwxMi4zNSwxNi4xNyBDMTIuMzUsMTUuNDUgMTIuMDksMTQuOTIgMTEuNTgsMTQuNTYgQzEyLjIsMTQuNTEgMTIuNzcsMTQuMzkgMTMuMjYsMTQuMjEgQzEzLjg3LDEzLjk4IDE0LjM2LDEzLjY5IDE0Ljc0LDEzLjI5IEMxNS40MiwxMi41OSAxNS43NiwxMS41NSAxNS43NiwxMC4xNyBDMTUuNzYsOS4yNSAxNS40NSw4LjQ2IDE0LjgzLDcuOCBDMTUuMSw3LjA4IDE1LjA3LDYuMjkgMTQuNzUsNS40NCBMMTQuNTEsNS40MiBDMTQuMzQsNS40IDE0LjA2LDUuNDYgMTMuNjcsNS42MSBDMTMuMjUsNS43OCAxMi43OSw2LjAzIDEyLjMxLDYuMzUgQzExLjU1LDYuMTYgMTAuODEsNi4wNSAxMC4wOSw2LjA1IEM5LjM2LDYuMDUgOC42MSw2LjE1IDcuODgsNi4zNSBDNy4yOCw1Ljk2IDYuNzUsNS42OCA2LjI2LDUuNTQgQzYuMDcsNS40NyA1LjksNS40NCA1Ljc4LDUuNDQgTDUuNDIsNS40NCBDNS4wNiw2LjI5IDUuMDQsNy4wOCA1LjMyLDcuOCBDNC43LDguNDYgNC40LDkuMjUgNC40LDEwLjE3IEM0LjQsMTEuOTQgNC45NiwxMy4xNiA2LjA4LDEzLjg0IEM2LjUzLDE0LjEzIDcuMDUsMTQuMzIgNy42OSwxNC40MyBDOC4wMywxNC41IDguMzIsMTQuNTQgOC41NSwxNC41NSBDOC4wNywxNC44OSA3LjgyLDE1LjQyIDcuODIsMTYuMTYgTDcuODIsMTcuNTEgQzcuOCwxNy42OSA3LjcsMTcuOCA3LjUxLDE3LjggQzQuMjEsMTYuNzQgMS44MiwxMy42NSAxLjgyLDEwLjAxIEMxLjgyLDUuNSA1LjQ5LDEuODMgMTAsMS44MyBDMTQuNSwxLjgzIDE4LjE3LDUuNSAxOC4xNywxMC4wMSBDMTguMTgsMTMuNTMgMTUuOTQsMTYuNTQgMTIuODEsMTcuNjkgTDEyLjgxLDE3LjY5IFoiLz48L3N2Zz4nLGdpdGh1YjonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTAsMSBDNS4wMywxIDEsNS4wMyAxLDEwIEMxLDEzLjk4IDMuNTgsMTcuMzUgNy4xNiwxOC41NCBDNy42MSwxOC42MiA3Ljc3LDE4LjM0IDcuNzcsMTguMTEgQzcuNzcsMTcuOSA3Ljc2LDE3LjMzIDcuNzYsMTYuNTggQzUuMjYsMTcuMTIgNC43MywxNS4zNyA0LjczLDE1LjM3IEM0LjMyLDE0LjMzIDMuNzMsMTQuMDUgMy43MywxNC4wNSBDMi45MSwxMy41IDMuNzksMTMuNSAzLjc5LDEzLjUgQzQuNjksMTMuNTYgNS4xNywxNC40MyA1LjE3LDE0LjQzIEM1Ljk3LDE1LjggNy4yOCwxNS40MSA3Ljc5LDE1LjE4IEM3Ljg3LDE0LjYgOC4xLDE0LjIgOC4zNiwxMy45OCBDNi4zNiwxMy43NSA0LjI2LDEyLjk4IDQuMjYsOS41MyBDNC4yNiw4LjU1IDQuNjEsNy43NCA1LjE5LDcuMTEgQzUuMSw2Ljg4IDQuNzksNS45NyA1LjI4LDQuNzMgQzUuMjgsNC43MyA2LjA0LDQuNDkgNy43NSw1LjY1IEM4LjQ3LDUuNDUgOS4yNCw1LjM1IDEwLDUuMzUgQzEwLjc2LDUuMzUgMTEuNTMsNS40NSAxMi4yNSw1LjY1IEMxMy45Nyw0LjQ4IDE0LjcyLDQuNzMgMTQuNzIsNC43MyBDMTUuMjEsNS45NyAxNC45LDYuODggMTQuODEsNy4xMSBDMTUuMzksNy43NCAxNS43Myw4LjU0IDE1LjczLDkuNTMgQzE1LjczLDEyLjk5IDEzLjYzLDEzLjc1IDExLjYyLDEzLjk3IEMxMS45NCwxNC4yNSAxMi4yMywxNC44IDEyLjIzLDE1LjY0IEMxMi4yMywxNi44NCAxMi4yMiwxNy44MSAxMi4yMiwxOC4xMSBDMTIuMjIsMTguMzUgMTIuMzgsMTguNjMgMTIuODQsMTguNTQgQzE2LjQyLDE3LjM1IDE5LDEzLjk4IDE5LDEwIEMxOSw1LjAzIDE0Ljk3LDEgMTAsMSBMMTAsMSBaIi8+PC9zdmc+JyxnaXR0ZXI6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMy41IiB5PSIxIiB3aWR0aD0iMS41MzEiIGhlaWdodD0iMTEuNDcxIi8+PHJlY3QgeD0iNy4zMjQiIHk9IjQuMDU5IiB3aWR0aD0iMS41MjkiIGhlaWdodD0iMTUuMjk0Ii8+PHJlY3QgeD0iMTEuMTQ4IiB5PSI0LjA1OSIgd2lkdGg9IjEuNTI3IiBoZWlnaHQ9IjE1LjI5NCIvPjxyZWN0IHg9IjE0Ljk3MSIgeT0iNC4wNTkiIHdpZHRoPSIxLjUyOSIgaGVpZ2h0PSI4LjQxMiIvPjwvc3ZnPicsZ29vZ2xlOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNy44Niw5LjA5IEMxOC40NiwxMi4xMiAxNy4xNCwxNi4wNSAxMy44MSwxNy41NiBDOS40NSwxOS41MyA0LjEzLDE3LjY4IDIuNDcsMTIuODcgQzAuNjgsNy42OCA0LjIyLDIuNDIgOS41LDIuMDMgQzExLjU3LDEuODggMTMuNDIsMi4zNyAxNS4wNSwzLjY1IEMxNS4yMiwzLjc4IDE1LjM3LDMuOTMgMTUuNjEsNC4xNCBDMTQuOSw0LjgxIDE0LjIzLDUuNDUgMTMuNSw2LjE0IEMxMi4yNyw1LjA4IDEwLjg0LDQuNzIgOS4yOCw0Ljk4IEM4LjEyLDUuMTcgNy4xNiw1Ljc2IDYuMzcsNi42MyBDNC44OCw4LjI3IDQuNjIsMTAuODYgNS43NiwxMi44MiBDNi45NSwxNC44NyA5LjE3LDE1LjggMTEuNTcsMTUuMjUgQzEzLjI3LDE0Ljg3IDE0Ljc2LDEzLjMzIDE0Ljg5LDExLjc1IEwxMC41MSwxMS43NSBMMTAuNTEsOS4wOSBMMTcuODYsOS4wOSBMMTcuODYsOS4wOSBaIi8+PC9zdmc+JyxncmlkOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHg9IjIiIHk9IjIiIHdpZHRoPSIzIiBoZWlnaHQ9IjMiLz48cmVjdCB4PSI4IiB5PSIyIiB3aWR0aD0iMyIgaGVpZ2h0PSIzIi8+PHJlY3QgeD0iMTQiIHk9IjIiIHdpZHRoPSIzIiBoZWlnaHQ9IjMiLz48cmVjdCB4PSIyIiB5PSI4IiB3aWR0aD0iMyIgaGVpZ2h0PSIzIi8+PHJlY3QgeD0iOCIgeT0iOCIgd2lkdGg9IjMiIGhlaWdodD0iMyIvPjxyZWN0IHg9IjE0IiB5PSI4IiB3aWR0aD0iMyIgaGVpZ2h0PSIzIi8+PHJlY3QgeD0iMiIgeT0iMTQiIHdpZHRoPSIzIiBoZWlnaHQ9IjMiLz48cmVjdCB4PSI4IiB5PSIxNCIgd2lkdGg9IjMiIGhlaWdodD0iMyIvPjxyZWN0IHg9IjE0IiB5PSIxNCIgd2lkdGg9IjMiIGhlaWdodD0iMyIvPjwvc3ZnPicsaGFwcHk6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGNpcmNsZSBjeD0iMTMiIGN5PSI3IiByPSIxIi8+PGNpcmNsZSBjeD0iNyIgY3k9IjciIHI9IjEiLz48Y2lyY2xlIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgY3g9IjEwIiBjeT0iMTAiIHI9IjguNSIvPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgZD0iTTE0LjYsMTEuNCBDMTMuOSwxMy4zIDEyLjEsMTQuNSAxMCwxNC41IEM3LjksMTQuNSA2LjEsMTMuMyA1LjQsMTEuNCIvPjwvc3ZnPicsaGFzaHRhZzonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTUuNDMxLDggTDE1LjY2MSw3IEwxMi45MTEsNyBMMTMuODMxLDMgTDEyLjkwMSwzIEwxMS45OCw3IEw5LjI5LDcgTDEwLjIxLDMgTDkuMjgxLDMgTDguMzYxLDcgTDUuMjMsNyBMNSw4IEw4LjEzLDggTDcuMjEsMTIgTDQuMjMsMTIgTDQsMTMgTDYuOTgsMTMgTDYuMDYxLDE3IEw2Ljk5MSwxNyBMNy45MTEsMTMgTDEwLjYwMSwxMyBMOS42ODEsMTcgTDEwLjYxMSwxNyBMMTEuNTMxLDEzIEwxNC40MzEsMTMgTDE0LjY2MSwxMiBMMTEuNzYsMTIgTDEyLjY4MSw4IEwxNS40MzEsOCBaIE0xMC44MzEsMTIgTDguMTQxLDEyIEw5LjA2MSw4IEwxMS43NSw4IEwxMC44MzEsMTIgWiIvPjwvc3ZnPicsaGVhcnQ6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuMDMiIGQ9Ik0xMCw0IEMxMCw0IDguMSwyIDUuNzQsMiBDMy4zOCwyIDEsMy41NSAxLDYuNzMgQzEsOC44NCAyLjY3LDEwLjQ0IDIuNjcsMTAuNDQgTDEwLDE4IEwxNy4zMywxMC40NCBDMTcuMzMsMTAuNDQgMTksOC44NCAxOSw2LjczIEMxOSwzLjU1IDE2LjYyLDIgMTQuMjYsMiBDMTEuOSwyIDEwLDQgMTAsNCBMMTAsNCBaIi8+PC9zdmc+JyxoaXN0b3J5Oic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwb2x5bGluZSBmaWxsPSIjMDAwIiBwb2ludHM9IjEgMiAyIDIgMiA2IDYgNiA2IDcgMSA3IDEgMiIvPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIGQ9Ik0yLjEsNi41NDggQzMuMzkxLDMuMjkgNi43NDYsMSAxMC41LDEgQzE1LjUsMSAxOS41LDUgMTkuNSwxMCBDMTkuNSwxNSAxNS41LDE5IDEwLjUsMTkgQzUuNSwxOSAxLjUsMTUgMS41LDEwIi8+PHJlY3QgeD0iOSIgeT0iNCIgd2lkdGg9IjEiIGhlaWdodD0iNyIvPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIGQ9Ik0xMy4wMTgsMTQuMTk3IEw5LjQ0NSwxMC42MjUiLz48L3N2Zz4nLGhvbWU6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlnb24gcG9pbnRzPSIxOC42NSAxMS4zNSAxMCAyLjcxIDEuMzUgMTEuMzUgMC42NSAxMC42NSAxMCAxLjI5IDE5LjM1IDEwLjY1Ii8+PHBvbHlnb24gcG9pbnRzPSIxNSA0IDE4IDQgMTggNyAxNyA3IDE3IDUgMTUgNSIvPjxwb2x5Z29uIHBvaW50cz0iMyAxMSA0IDExIDQgMTggNyAxOCA3IDEyIDEyIDEyIDEyIDE4IDE2IDE4IDE2IDExIDE3IDExIDE3IDE5IDExIDE5IDExIDEzIDggMTMgOCAxOSAzIDE5Ii8+PC9zdmc+JyxpbWFnZTonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSIxNi4xIiBjeT0iNi4xIiByPSIxLjEiLz48cmVjdCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHg9Ii41IiB5PSIyLjUiIHdpZHRoPSIxOSIgaGVpZ2h0PSIxNSIvPjxwb2x5bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4wMSIgcG9pbnRzPSI0LDEzIDgsOSAxMywxNCIvPjxwb2x5bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4wMSIgcG9pbnRzPSIxMSwxMiAxMi41LDEwLjUgMTYsMTQiLz48L3N2Zz4nLGluZm86Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEyLjEzLDExLjU5IEMxMS45NywxMi44NCAxMC4zNSwxNC4xMiA5LjEsMTQuMTYgQzYuMTcsMTQuMiA5Ljg5LDkuNDYgOC43NCw4LjM3IEM5LjMsOC4xNiAxMC42Miw3LjgzIDEwLjYyLDguODEgQzEwLjYyLDkuNjMgMTAuMTIsMTAuNTUgOS44OCwxMS4zMiBDOC42NiwxNS4xNiAxMi4xMywxMS4xNSAxMi4xNCwxMS4xOCBDMTIuMTYsMTEuMjEgMTIuMTYsMTEuMzUgMTIuMTMsMTEuNTkgQzEyLjA4LDExLjk1IDEyLjE2LDExLjM1IDEyLjEzLDExLjU5IEwxMi4xMywxMS41OSBaIE0xMS41Niw1LjY3IEMxMS41Niw2LjY3IDkuMzYsNy4xNSA5LjM2LDYuMDMgQzkuMzYsNSAxMS41Niw0LjU0IDExLjU2LDUuNjcgTDExLjU2LDUuNjcgWiIvPjxjaXJjbGUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuMSIgY3g9IjEwIiBjeT0iMTAiIHI9IjkiLz48L3N2Zz4nLGluc3RhZ3JhbTonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTMuNTUsMUg2LjQ2QzMuNDUsMSwxLDMuNDQsMSw2LjQ0djcuMTJjMCwzLDIuNDUsNS40NCw1LjQ2LDUuNDRoNy4wOGMzLjAyLDAsNS40Ni0yLjQ0LDUuNDYtNS40NFY2LjQ0IEMxOS4wMSwzLjQ0LDE2LjU2LDEsMTMuNTUsMXogTTE3LjUsMTRjMCwxLjkzLTEuNTcsMy41LTMuNSwzLjVINmMtMS45MywwLTMuNS0xLjU3LTMuNS0zLjVWNmMwLTEuOTMsMS41Ny0zLjUsMy41LTMuNWg4IGMxLjkzLDAsMy41LDEuNTcsMy41LDMuNVYxNHoiLz48Y2lyY2xlIGN4PSIxNC44NyIgY3k9IjUuMjYiIHI9IjEuMDkiLz48cGF0aCBkPSJNMTAuMDMsNS40NWMtMi41NSwwLTQuNjMsMi4wNi00LjYzLDQuNmMwLDIuNTUsMi4wNyw0LjYxLDQuNjMsNC42MWMyLjU2LDAsNC42My0yLjA2MSw0LjYzLTQuNjEgQzE0LjY1LDcuNTEsMTIuNTgsNS40NSwxMC4wMyw1LjQ1TDEwLjAzLDUuNDVMMTAuMDMsNS40NXogTTEwLjA4LDEzYy0xLjY2LDAtMy0xLjM0LTMtMi45OWMwLTEuNjUsMS4zNC0yLjk5LDMtMi45OXMzLDEuMzQsMywyLjk5IEMxMy4wOCwxMS42NiwxMS43NCwxMywxMC4wOCwxM0wxMC4wOCwxM0wxMC4wOCwxM3oiLz48L3N2Zz4nLGl0YWxpYzonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIuNjMsNS40OCBMMTAuMTUsMTQuNTIgQzEwLDE1LjA4IDEwLjM3LDE1LjI1IDExLjkyLDE1LjMgTDExLjcyLDE2IEw2LDE2IEw2LjIsMTUuMzEgQzcuNzgsMTUuMjYgOC4xOSwxNS4wOSA4LjM0LDE0LjUzIEwxMC44Miw1LjQ5IEMxMC45Nyw0LjkyIDEwLjYzLDQuNzYgOS4wOSw0LjcxIEw5LjI4LDQgTDE1LDQgTDE0LjgxLDQuNjkgQzEzLjIzLDQuNzUgMTIuNzgsNC45MSAxMi42Myw1LjQ4IEwxMi42Myw1LjQ4IFoiLz48L3N2Zz4nLGpvb21sYTonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNy44LDEzLjRsMS43LTEuN0w1LjksOGMtMC42LTAuNS0wLjYtMS41LDAtMmMwLjYtMC42LDEuNC0wLjYsMiwwbDEuNy0xLjdjLTEtMS0yLjMtMS4zLTMuNi0xQzUuOCwyLjIsNC44LDEuNCwzLjcsMS40IGMtMS4zLDAtMi4zLDEtMi4zLDIuM2MwLDEuMSwwLjgsMiwxLjgsMi4zYy0wLjQsMS4zLTAuMSwyLjgsMSwzLjhMNy44LDEzLjRMNy44LDEzLjR6Ii8+PHBhdGggZD0iTTEwLjIsNC4zYzEtMSwyLjUtMS40LDMuOC0xYzAuMi0xLjEsMS4xLTIsMi4zLTJjMS4zLDAsMi4zLDEsMi4zLDIuM2MwLDEuMi0wLjksMi4yLTIsMi4zYzAuNCwxLjMsMCwyLjgtMSwzLjhMMTMuOSw4IGMwLjYtMC41LDAuNi0xLjUsMC0yYy0wLjUtMC42LTEuNS0wLjYtMiwwTDguMiw5LjdMNi41LDgiLz48cGF0aCBkPSJNMTQuMSwxNi44Yy0xLjMsMC40LTIuOCwwLjEtMy44LTFsMS43LTEuN2MwLjYsMC42LDEuNSwwLjYsMiwwYzAuNS0wLjYsMC42LTEuNSwwLTJsLTMuNy0zLjdMMTIsNi43bDMuNywzLjcgYzEsMSwxLjMsMi40LDEsMy42YzEuMSwwLjIsMiwxLjEsMiwyLjNjMCwxLjMtMSwyLjMtMi4zLDIuM0MxNS4yLDE4LjYsMTQuMywxNy44LDE0LjEsMTYuOCIvPjxwYXRoIGQ9Ik0xMy4yLDEyLjJsLTMuNywzLjdjLTEsMS0yLjQsMS4zLTMuNiwxYy0wLjIsMS0xLjIsMS44LTIuMiwxLjhjLTEuMywwLTIuMy0xLTIuMy0yLjNjMC0xLjEsMC44LTIsMS44LTIuMyBjLTAuMy0xLjMsMC0yLjcsMS0zLjdsMS43LDEuN2MtMC42LDAuNi0wLjYsMS41LDAsMmMwLjYsMC42LDEuNCwwLjYsMiwwbDMuNy0zLjciLz48L3N2Zz4nLGxhcHRvcDonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB5PSIxNiIgd2lkdGg9IjIwIiBoZWlnaHQ9IjEiLz48cmVjdCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHg9IjIuNSIgeT0iNC41IiB3aWR0aD0iMTUiIGhlaWdodD0iMTAiLz48L3N2Zz4nLGxpZmVzYXZlcjonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTAsMC41IEM0Ljc2LDAuNSAwLjUsNC43NiAwLjUsMTAgQzAuNSwxNS4yNCA0Ljc2LDE5LjUgMTAsMTkuNSBDMTUuMjQsMTkuNSAxOS41LDE1LjI0IDE5LjUsMTAgQzE5LjUsNC43NiAxNS4yNCwwLjUgMTAsMC41IEwxMCwwLjUgWiBNMTAsMS41IEMxMS40OSwxLjUgMTIuODksMS44OCAxNC4xMSwyLjU2IEwxMS44NSw0LjgyIEMxMS4yNyw0LjYxIDEwLjY1LDQuNSAxMCw0LjUgQzkuMjEsNC41IDguNDcsNC42NyA3Ljc5LDQuOTYgTDUuNTgsMi43NSBDNi44NywxLjk1IDguMzgsMS41IDEwLDEuNSBMMTAsMS41IFogTTQuOTYsNy44IEM0LjY3LDguNDggNC41LDkuMjEgNC41LDEwIEM0LjUsMTAuNjUgNC42MSwxMS4yNyA0LjgzLDExLjg1IEwyLjU2LDE0LjExIEMxLjg4LDEyLjg5IDEuNSwxMS40OSAxLjUsMTAgQzEuNSw4LjM4IDEuOTUsNi44NyAyLjc1LDUuNTggTDQuOTYsNy43OSBMNC45Niw3LjggTDQuOTYsNy44IFogTTEwLDE4LjUgQzguMjUsMTguNSA2LjYyLDE3Ljk3IDUuMjcsMTcuMDYgTDcuNDYsMTQuODcgQzguMjIsMTUuMjcgOS4wOCwxNS41IDEwLDE1LjUgQzEwLjc5LDE1LjUgMTEuNTMsMTUuMzMgMTIuMjEsMTUuMDQgTDE0LjQyLDE3LjI1IEMxMy4xMywxOC4wNSAxMS42MiwxOC41IDEwLDE4LjUgTDEwLDE4LjUgWiBNMTAsMTQuNSBDNy41MiwxNC41IDUuNSwxMi40OCA1LjUsMTAgQzUuNSw3LjUyIDcuNTIsNS41IDEwLDUuNSBDMTIuNDgsNS41IDE0LjUsNy41MiAxNC41LDEwIEMxNC41LDEyLjQ4IDEyLjQ4LDE0LjUgMTAsMTQuNSBMMTAsMTQuNSBaIE0xNS4wNCwxMi4yMSBDMTUuMzMsMTEuNTMgMTUuNSwxMC43OSAxNS41LDEwIEMxNS41LDkuMDggMTUuMjcsOC4yMiAxNC44Nyw3LjQ2IEwxNy4wNiw1LjI3IEMxNy45Nyw2LjYyIDE4LjUsOC4yNSAxOC41LDEwIEMxOC41LDExLjYyIDE4LjA1LDEzLjEzIDE3LjI1LDE0LjQyIEwxNS4wNCwxMi4yMSBMMTUuMDQsMTIuMjEgWiIvPjwvc3ZnPicsbGluazonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4xIiBkPSJNMTAuNjI1LDEyLjM3NSBMNy41MjUsMTUuNDc1IEM2LjgyNSwxNi4xNzUgNS45MjUsMTYuMTc1IDUuMjI1LDE1LjQ3NSBMNC41MjUsMTQuNzc1IEMzLjgyNSwxNC4wNzQgMy44MjUsMTMuMTc1IDQuNTI1LDEyLjQ3NSBMNy42MjUsOS4zNzUiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4xIiBkPSJNOS4zMjUsNy4zNzUgTDEyLjQyNSw0LjI3NSBDMTMuMTI1LDMuNTc1IDE0LjAyNSwzLjU3NSAxNC43MjQsNC4yNzUgTDE1LjQyNSw0Ljk3NSBDMTYuMTI1LDUuNjc1IDE2LjEyNSw2LjU3NSAxNS40MjUsNy4yNzUgTDEyLjMyNSwxMC4zNzUiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4xIiBkPSJNNy45MjUsMTEuODc1IEwxMS45MjUsNy45NzUiLz48L3N2Zz4nLGxpbmtlZGluOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik01Ljc3LDE3Ljg5IEw1Ljc3LDcuMTcgTDIuMjEsNy4xNyBMMi4yMSwxNy44OSBMNS43NywxNy44OSBMNS43NywxNy44OSBaIE0zLjk5LDUuNzEgQzUuMjMsNS43MSA2LjAxLDQuODkgNi4wMSwzLjg2IEM1Ljk5LDIuOCA1LjI0LDIgNC4wMiwyIEMyLjgsMiAyLDIuOCAyLDMuODUgQzIsNC44OCAyLjc3LDUuNyAzLjk3LDUuNyBMMy45OSw1LjcgTDMuOTksNS43MSBMMy45OSw1LjcxIFoiLz48cGF0aCBkPSJNNy43NSwxNy44OSBMMTEuMzEsMTcuODkgTDExLjMxLDExLjkgQzExLjMxLDExLjU4IDExLjMzLDExLjI2IDExLjQzLDExLjAzIEMxMS42OSwxMC4zOSAxMi4yNyw5LjczIDEzLjI2LDkuNzMgQzE0LjU1LDkuNzMgMTUuMDYsMTAuNzEgMTUuMDYsMTIuMTUgTDE1LjA2LDE3Ljg5IEwxOC42MiwxNy44OSBMMTguNjIsMTEuNzQgQzE4LjYyLDguNDUgMTYuODYsNi45MiAxNC41Miw2LjkyIEMxMi42LDYuOTIgMTEuNzUsNy45OSAxMS4yOCw4LjczIEwxMS4zLDguNzMgTDExLjMsNy4xNyBMNy43NSw3LjE3IEM3Ljc5LDguMTcgNy43NSwxNy44OSA3Ljc1LDE3Ljg5IEw3Ljc1LDE3Ljg5IEw3Ljc1LDE3Ljg5IFoiLz48L3N2Zz4nLGxpc3Q6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iNiIgeT0iNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEiLz48cmVjdCB4PSI2IiB5PSI5IiB3aWR0aD0iMTIiIGhlaWdodD0iMSIvPjxyZWN0IHg9IjYiIHk9IjE0IiB3aWR0aD0iMTIiIGhlaWdodD0iMSIvPjxyZWN0IHg9IjIiIHk9IjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiLz48cmVjdCB4PSIyIiB5PSI5IiB3aWR0aD0iMiIgaGVpZ2h0PSIxIi8+PHJlY3QgeD0iMiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjEiLz48L3N2Zz4nLGxvY2F0aW9uOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjAxIiBkPSJNMTAsMC41IEM2LjQxLDAuNSAzLjUsMy4zOSAzLjUsNi45OCBDMy41LDExLjgzIDEwLDE5IDEwLDE5IEMxMCwxOSAxNi41LDExLjgzIDE2LjUsNi45OCBDMTYuNSwzLjM5IDEzLjU5LDAuNSAxMCwwLjUgTDEwLDAuNSBaIi8+PGNpcmNsZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIGN4PSIxMCIgY3k9IjYuOCIgcj0iMi4zIi8+PC9zdmc+Jyxsb2NrOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgaGVpZ2h0PSIxMCIgd2lkdGg9IjEzIiB5PSI4LjUiIHg9IjMuNSIvPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgZD0iTTYuNSw4IEw2LjUsNC44OCBDNi41LDMuMDEgOC4wNywxLjUgMTAsMS41IEMxMS45MywxLjUgMTMuNSwzLjAxIDEzLjUsNC44OCBMMTMuNSw4Ii8+PC9zdmc+JyxtYWlsOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwb2x5bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHBvaW50cz0iMS40LDYuNSAxMCwxMSAxOC42LDYuNSIvPjxwYXRoIGQ9Ik0gMSw0IDEsMTYgMTksMTYgMTksNCAxLDQgWiBNIDE4LDE1IDIsMTUgMiw1IDE4LDUgMTgsMTUgWiIvPjwvc3ZnPicsbWVudTonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIyIiB5PSI0IiB3aWR0aD0iMTYiIGhlaWdodD0iMSIvPjxyZWN0IHg9IjIiIHk9IjkiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxIi8+PHJlY3QgeD0iMiIgeT0iMTQiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxIi8+PC9zdmc+JyxtaWNyb3Bob25lOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgeDE9IjEwIiB4Mj0iMTAiIHkxPSIxNi40NCIgeTI9IjE4LjUiLz48bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHgxPSI3IiB4Mj0iMTMiIHkxPSIxOC41IiB5Mj0iMTguNSIvPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIGQ9Ik0xMy41IDQuODl2NS44N2EzLjUgMy41IDAgMCAxLTcgMFY0Ljg5YTMuNSAzLjUgMCAwIDEgNyAweiIvPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIGQ9Ik0xNS41IDEwLjM2VjExYTUuNSA1LjUgMCAwIDEtMTEgMHYtLjYiLz48L3N2Zz4nLCJtaW51cy1jaXJjbGUiOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxjaXJjbGUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuMSIgY3g9IjkuNSIgY3k9IjkuNSIgcj0iOSIvPjxsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgeDE9IjUiIHkxPSI5LjUiIHgyPSIxNCIgeTI9IjkuNSIvPjwvc3ZnPicsbWludXM6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgaGVpZ2h0PSIxIiB3aWR0aD0iMTgiIHk9IjkiIHg9IjEiLz48L3N2Zz4nLCJtb3JlLXZlcnRpY2FsIjonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSIxMCIgY3k9IjMiIHI9IjIiLz48Y2lyY2xlIGN4PSIxMCIgY3k9IjEwIiByPSIyIi8+PGNpcmNsZSBjeD0iMTAiIGN5PSIxNyIgcj0iMiIvPjwvc3ZnPicsbW9yZTonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSIzIiBjeT0iMTAiIHI9IjIiLz48Y2lyY2xlIGN4PSIxMCIgY3k9IjEwIiByPSIyIi8+PGNpcmNsZSBjeD0iMTciIGN5PSIxMCIgcj0iMiIvPjwvc3ZnPicsbW92ZTonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cG9seWdvbiBwb2ludHM9IjQsNSAxLDUgMSw5IDIsOSAyLDYgNCw2Ii8+PHBvbHlnb24gcG9pbnRzPSIxLDE2IDIsMTYgMiwxOCA0LDE4IDQsMTkgMSwxOSIvPjxwb2x5Z29uIHBvaW50cz0iMTQsMTYgMTQsMTkgMTEsMTkgMTEsMTggMTMsMTggMTMsMTYiLz48cmVjdCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHg9IjUuNSIgeT0iMS41IiB3aWR0aD0iMTMiIGhlaWdodD0iMTMiLz48cmVjdCB4PSIxIiB5PSIxMSIgd2lkdGg9IjEiIGhlaWdodD0iMyIvPjxyZWN0IHg9IjYiIHk9IjE4IiB3aWR0aD0iMyIgaGVpZ2h0PSIxIi8+PC9zdmc+JyxudXQ6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlnb24gZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBwb2ludHM9IjIuNSw1LjcgMTAsMS4zIDE3LjUsNS43IDE3LjUsMTQuMyAxMCwxOC43IDIuNSwxNC4zIi8+PGNpcmNsZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIGN4PSIxMCIgY3k9IjEwIiByPSIzLjUiLz48L3N2Zz4nLHBhZ2VraXQ6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlnb24gcG9pbnRzPSIzLDEgMTcsMSAxNywxNiAxMCwxNiAxMCwxMyAxNCwxMyAxNCw0IDYsNCA2LDE2IDEwLDE2IDEwLDE5IDMsMTkiLz48L3N2Zz4nLCJwYWludC1idWNrZXQiOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xMC4yMSwxIEwwLDExLjIxIEw4LjEsMTkuMzEgTDE4LjMxLDkuMSBMMTAuMjEsMSBMMTAuMjEsMSBaIE0xNi44OSw5LjEgTDE1LDExIEwxLjcsMTEgTDEwLjIxLDIuNDIgTDE2Ljg5LDkuMSBaIi8+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuMSIgZD0iTTYuNDIsMi4zMyBMMTEuNyw3LjYxIi8+PHBhdGggZD0iTTE4LjQ5LDEyIEMxOC40OSwxMiAyMCwxNC4wNiAyMCwxNS4zNiBDMjAsMTYuMjggMTkuMjQsMTcgMTguNDksMTcgTDE4LjQ5LDE3IEMxNy43NCwxNyAxNywxNi4yOCAxNywxNS4zNiBDMTcsMTQuMDYgMTguNDksMTIgMTguNDksMTIgTDE4LjQ5LDEyIFoiLz48L3N2Zz4nLHBlbmNpbDonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIGQ9Ik0xNy4yNSw2LjAxIEw3LjEyLDE2LjEgTDMuODIsMTcuMiBMNS4wMiwxMy45IEwxNS4xMiwzLjg4IEMxNS43MSwzLjI5IDE2LjY2LDMuMjkgMTcuMjUsMy44OCBDMTcuODMsNC40NyAxNy44Myw1LjQyIDE3LjI1LDYuMDEgTDE3LjI1LDYuMDEgWiIvPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgZD0iTTE1Ljk4LDcuMjY4IEwxMy44NTEsNS4xNDgiLz48L3N2Zz4nLCJwaG9uZS1sYW5kc2NhcGUiOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgZD0iTTE3LDUuNSBDMTcuOCw1LjUgMTguNSw2LjIgMTguNSw3IEwxOC41LDE0IEMxOC41LDE0LjggMTcuOCwxNS41IDE3LDE1LjUgTDMsMTUuNSBDMi4yLDE1LjUgMS41LDE0LjggMS41LDE0IEwxLjUsNyBDMS41LDYuMiAyLjIsNS41IDMsNS41IEwxNyw1LjUgTDE3LDUuNSBMMTcsNS41IFoiLz48Y2lyY2xlIGN4PSIzLjgiIGN5PSIxMC41IiByPSIuOCIvPjwvc3ZnPicscGhvbmU6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBkPSJNMTUuNSwxNyBDMTUuNSwxNy44IDE0LjgsMTguNSAxNCwxOC41IEw3LDE4LjUgQzYuMiwxOC41IDUuNSwxNy44IDUuNSwxNyBMNS41LDMgQzUuNSwyLjIgNi4yLDEuNSA3LDEuNSBMMTQsMS41IEMxNC44LDEuNSAxNS41LDIuMiAxNS41LDMgTDE1LjUsMTcgTDE1LjUsMTcgTDE1LjUsMTcgWiIvPjxjaXJjbGUgY3g9IjEwLjUiIGN5PSIxNi41IiByPSIuOCIvPjwvc3ZnPicscGludGVyZXN0Oic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xMC4yMSwxIEM1LjUsMSAzLDQuMTYgMyw3LjYxIEMzLDkuMjEgMy44NSwxMS4yIDUuMjIsMTEuODQgQzUuNDMsMTEuOTQgNS41NCwxMS44OSA1LjU4LDExLjY5IEM1LjYyLDExLjU0IDUuOCwxMC44IDUuODgsMTAuNDUgQzUuOTEsMTAuMzQgNS44OSwxMC4yNCA1LjgsMTAuMTQgQzUuMzYsOS41OSA1LDguNTggNSw3LjY1IEM1LDUuMjQgNi44MiwyLjkxIDkuOTMsMi45MSBDMTIuNjEsMi45MSAxNC40OSw0Ljc0IDE0LjQ5LDcuMzUgQzE0LjQ5LDEwLjMgMTMsMTIuMzUgMTEuMDYsMTIuMzUgQzkuOTksMTIuMzUgOS4xOSwxMS40NyA5LjQ0LDEwLjM4IEM5Ljc1LDkuMDggMTAuMzUsNy42OCAxMC4zNSw2Ljc1IEMxMC4zNSw1LjkxIDkuOSw1LjIxIDguOTcsNS4yMSBDNy44Nyw1LjIxIDYuOTksNi4zNCA2Ljk5LDcuODYgQzYuOTksOC44MyA3LjMyLDkuNDggNy4zMiw5LjQ4IEM3LjMyLDkuNDggNi4yNCwxNC4wNiA2LjA0LDE0LjkxIEM1LjcsMTYuMzUgNi4wOCwxOC43IDYuMTIsMTguOSBDNi4xNCwxOS4wMSA2LjI2LDE5LjA1IDYuMzMsMTguOTUgQzYuNDQsMTguODEgNy43NCwxNi44NSA4LjExLDE1LjQ0IEM4LjI0LDE0LjkzIDguNzksMTIuODQgOC43OSwxMi44NCBDOS4xNSwxMy41MiAxMC4xOSwxNC4wOSAxMS4yOSwxNC4wOSBDMTQuNTgsMTQuMDkgMTYuOTYsMTEuMDYgMTYuOTYsNy4zIEMxNi45NCwzLjcgMTQsMSAxMC4yMSwxIi8+PC9zdmc+JywicGxheS1jaXJjbGUiOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwb2x5Z29uIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIHBvaW50cz0iOC41IDcgMTMuNSAxMCA4LjUgMTMiLz48Y2lyY2xlIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIGN4PSIxMCIgY3k9IjEwIiByPSI5Ii8+PC9zdmc+JyxwbGF5Oic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwb2x5Z29uIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgcG9pbnRzPSI2LjUsNSAxNC41LDEwIDYuNSwxNSIvPjwvc3ZnPicsInBsdXMtY2lyY2xlIjonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIGN4PSI5LjUiIGN5PSI5LjUiIHI9IjkiLz48bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHgxPSI5LjUiIHkxPSI1IiB4Mj0iOS41IiB5Mj0iMTQiLz48bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHgxPSI1IiB5MT0iOS41IiB4Mj0iMTQiIHkyPSI5LjUiLz48L3N2Zz4nLHBsdXM6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iOSIgeT0iMSIgd2lkdGg9IjEiIGhlaWdodD0iMTciLz48cmVjdCB4PSIxIiB5PSI5IiB3aWR0aD0iMTciIGhlaWdodD0iMSIvPjwvc3ZnPicscHJpbnQ6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgcG9pbnRzPSI0LjUgMTMuNSAxLjUgMTMuNSAxLjUgNi41IDE4LjUgNi41IDE4LjUgMTMuNSAxNS41IDEzLjUiLz48cG9seWxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBwb2ludHM9IjE1LjUgNi41IDE1LjUgMi41IDQuNSAyLjUgNC41IDYuNSIvPjxyZWN0IGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgd2lkdGg9IjExIiBoZWlnaHQ9IjYiIHg9IjQuNSIgeT0iMTEuNSIvPjxyZWN0IHdpZHRoPSI4IiBoZWlnaHQ9IjEiIHg9IjYiIHk9IjEzIi8+PHJlY3Qgd2lkdGg9IjgiIGhlaWdodD0iMSIgeD0iNiIgeT0iMTUiLz48L3N2Zz4nLHB1bGw6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlnb24gcG9pbnRzPSI2Ljg1LDggOS41LDEwLjYgMTIuMTUsOCAxMi44NSw4LjcgOS41LDEyIDYuMTUsOC43Ii8+PGxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiB4MT0iOS41IiB5MT0iMTEiIHgyPSI5LjUiIHkyPSIyIi8+PHBvbHlsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgcG9pbnRzPSI2LDUuNSAzLjUsNS41IDMuNSwxOC41IDE1LjUsMTguNSAxNS41LDUuNSAxMyw1LjUiLz48L3N2Zz4nLHB1c2g6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlnb24gcG9pbnRzPSIxMi4xNSw0IDkuNSwxLjQgNi44NSw0IDYuMTUsMy4zIDkuNSwwIDEyLjg1LDMuMyIvPjxsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgeDE9IjkuNSIgeTE9IjEwIiB4Mj0iOS41IiB5Mj0iMSIvPjxwb2x5bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHBvaW50cz0iNiA1LjUgMy41IDUuNSAzLjUgMTguNSAxNS41IDE4LjUgMTUuNSA1LjUgMTMgNS41Ii8+PC9zdmc+JyxxdWVzdGlvbjonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIGN4PSIxMCIgY3k9IjEwIiByPSI5Ii8+PGNpcmNsZSBjeD0iMTAuNDQiIGN5PSIxNC40MiIgcj0iMS4wNSIvPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjIiIGQ9Ik04LjE3LDcuNzkgQzguMTcsNC43NSAxMi43Miw0LjczIDEyLjcyLDcuNzIgQzEyLjcyLDguNjcgMTEuODEsOS4xNSAxMS4yMyw5Ljc1IEMxMC43NSwxMC4yNCAxMC41MSwxMC43MyAxMC40NSwxMS40IEMxMC40NCwxMS41MyAxMC40MywxMS42NCAxMC40MywxMS43NSIvPjwvc3ZnPicsInF1b3RlLXJpZ2h0IjonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTcuMjcsNy43OSBDMTcuMjcsOS40NSAxNi45NywxMC40MyAxNS45OSwxMi4wMiBDMTQuOTgsMTMuNjQgMTMsMTUuMjMgMTEuNTYsMTUuOTcgTDExLjEsMTUuMDggQzEyLjM0LDE0LjIgMTMuMTQsMTMuNTEgMTQuMDIsMTEuODIgQzE0LjI3LDExLjM0IDE0LjQxLDEwLjkyIDE0LjQ5LDEwLjU0IEMxNC4zLDEwLjU4IDE0LjA5LDEwLjYgMTMuODgsMTAuNiBDMTIuMDYsMTAuNiAxMC41OSw5LjEyIDEwLjU5LDcuMyBDMTAuNTksNS40OCAxMi4wNiw0IDEzLjg4LDQgQzE1LjM5LDQgMTYuNjcsNS4wMiAxNy4wNSw2LjQyIEMxNy4xOSw2LjgyIDE3LjI3LDcuMjcgMTcuMjcsNy43OSBMMTcuMjcsNy43OSBaIi8+PHBhdGggZD0iTTguNjgsNy43OSBDOC42OCw5LjQ1IDguMzgsMTAuNDMgNy40LDEyLjAyIEM2LjM5LDEzLjY0IDQuNDEsMTUuMjMgMi45NywxNS45NyBMMi41MSwxNS4wOCBDMy43NSwxNC4yIDQuNTUsMTMuNTEgNS40MywxMS44MiBDNS42OCwxMS4zNCA1LjgyLDEwLjkyIDUuOSwxMC41NCBDNS43MSwxMC41OCA1LjUsMTAuNiA1LjI5LDEwLjYgQzMuNDcsMTAuNiAyLDkuMTIgMiw3LjMgQzIsNS40OCAzLjQ3LDQgNS4yOSw0IEM2LjgsNCA4LjA4LDUuMDIgOC40Niw2LjQyIEM4LjYsNi44MiA4LjY4LDcuMjcgOC42OCw3Ljc5IEw4LjY4LDcuNzkgWiIvPjwvc3ZnPicscmVjZWl2ZXI6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuMDEiIGQ9Ik02LjE4OSwxMy42MTFDOC4xMzQsMTUuNTI1IDExLjA5NywxOC4yMzkgMTMuODY3LDE4LjI1N0MxNi40NywxOC4yNzUgMTguMiwxNi4yNDEgMTguMiwxNi4yNDFMMTQuNTA5LDEyLjU1MUwxMS41MzksMTMuNjM5TDYuMTg5LDguMjlMNy4zMTMsNS4zNTVMMy43NiwxLjhDMy43NiwxLjggMS43MzIsMy41MzcgMS43LDYuMDkyQzEuNjY3LDguODA5IDQuMzQ3LDExLjczOCA2LjE4OSwxMy42MTEiLz48L3N2Zz4nLHJlZGRpdDonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTkgOS4wNWEyLjU2IDIuNTYgMCAwIDAtMi41Ni0yLjU2IDIuNTkgMi41OSAwIDAgMC0xLjg4LjgyIDEwLjYzIDEwLjYzIDAgMCAwLTQuMTQtMXYtLjA4Yy41OC0xLjYyIDEuNTgtMy44OSAyLjctNC4xLjM4LS4wOC43Ny4xMiAxLjE5LjU3YTEuMTUgMS4xNSAwIDAgMC0uMDYuMzcgMS40OCAxLjQ4IDAgMSAwIDEuNTEtMS40NSAxLjQzIDEuNDMgMCAwIDAtLjc2LjE5QTIuMjkgMi4yOSAwIDAgMCAxMi45MSAxYy0yLjExLjQzLTMuMzkgNC4zOC0zLjYzIDUuMTkgMCAwIDAgLjExLS4wNi4xMWExMC42NSAxMC42NSAwIDAgMC0zLjc1IDFBMi41NiAyLjU2IDAgMCAwIDEgOS4wNWEyLjQyIDIuNDIgMCAwIDAgLjcyIDEuNzZBNS4xOCA1LjE4IDAgMCAwIDEuMjQgMTNjMCAzLjY2IDMuOTIgNi42NCA4LjczIDYuNjRzOC43NC0zIDguNzQtNi42NGE1LjIzIDUuMjMgMCAwIDAtLjQ2LTIuMTNBMi41OCAyLjU4IDAgMCAwIDE5IDkuMDV6bS0xNi44OCAwYTEuNDQgMS40NCAwIDAgMSAyLjI3LTEuMTkgNy42OCA3LjY4IDAgMCAwLTIuMDcgMS45MSAxLjMzIDEuMzMgMCAwIDEtLjItLjcyek0xMCAxOC40Yy00LjE3IDAtNy41NS0yLjQtNy41NS01LjRTNS44MyA3LjUzIDEwIDcuNTMgMTcuNSAxMCAxNy41IDEzcy0zLjM4IDUuNC03LjUgNS40em03LjY5LTguNjFhNy42MiA3LjYyIDAgMCAwLTIuMDktMS45MSAxLjQxIDEuNDEgMCAwIDEgLjg0LS4yOCAxLjQ3IDEuNDcgMCAwIDEgMS40NCAxLjQ1IDEuMzQgMS4zNCAwIDAgMS0uMjEuNzJ6Ii8+PHBhdGggZD0iTTYuNjkgMTIuNThhMS4zOSAxLjM5IDAgMSAxIDEuMzktMS4zOSAxLjM4IDEuMzggMCAwIDEtMS4zOCAxLjM5eiIvPjxwYXRoIGQ9Ik0xNC4yNiAxMS4yYTEuMzkgMS4zOSAwIDEgMS0xLjM5LTEuMzkgMS4zOSAxLjM5IDAgMCAxIDEuMzkgMS4zOXoiLz48cGF0aCBkPSJNMTMuMDkgMTQuODhhLjU0LjU0IDAgMCAxLS4wOS43NyA1LjMgNS4zIDAgMCAxLTMuMjYgMS4xOSA1LjYxIDUuNjEgMCAwIDEtMy40LTEuMjIuNTUuNTUgMCAxIDEgLjczLS44MyA0LjA5IDQuMDkgMCAwIDAgNS4yNSAwIC41Ni41NiAwIDAgMSAuNzcuMDl6Ii8+PC9zdmc+JyxyZWZyZXNoOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIGQ9Ik0xNy4wOCwxMS4xNSBDMTcuMDksMTEuMzEgMTcuMSwxMS40NyAxNy4xLDExLjY0IEMxNy4xLDE1LjUzIDEzLjk0LDE4LjY5IDEwLjA1LDE4LjY5IEM2LjE2LDE4LjY4IDMsMTUuNTMgMywxMS42MyBDMyw3Ljc0IDYuMTYsNC41OCAxMC4wNSw0LjU4IEMxMC45LDQuNTggMTEuNzEsNC43MyAxMi40Niw1Ii8+PHBvbHlsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgcG9pbnRzPSI5LjkgMiAxMi43OSA0Ljg5IDkuNzkgNy45Ii8+PC9zdmc+JyxyZXBseTonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTcuNywxMy4xMSBDMTYuMTIsMTAuMDIgMTMuODQsNy44NSAxMS4wMiw2LjYxIEMxMC41Nyw2LjQxIDkuNzUsNi4xMyA5LDUuOTEgTDksMiBMMSw5IEw5LDE2IEw5LDEyLjEzIEMxMC43OCwxMi40NyAxMi41LDEzLjE5IDE0LjA5LDE0LjI1IEMxNy4xMywxNi4yOCAxOC41NiwxOC41NCAxOC41NiwxOC41NCBDMTguNTYsMTguNTQgMTguODEsMTUuMjggMTcuNywxMy4xMSBMMTcuNywxMy4xMSBaIE0xNC44MiwxMy41MyBDMTMuMTcsMTIuNCAxMS4wMSwxMS40IDgsMTAuOTIgTDgsMTMuNjMgTDIuNTUsOSBMOCw0LjI1IEw4LDYuOCBDOC4zLDYuODYgOS4xNiw3LjAyIDEwLjM3LDcuNDkgQzEzLjMsOC42NSAxNS41NCwxMC45NiAxNi42NSwxMy4wOCBDMTYuOTcsMTMuNyAxNy40OCwxNC44NiAxNy42OCwxNiBDMTYuODcsMTUuMDUgMTUuNzMsMTQuMTUgMTQuODIsMTMuNTMgTDE0LjgyLDEzLjUzIFoiLz48L3N2Zz4nLHJzczonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSIzLjEyIiBjeT0iMTYuOCIgcj0iMS44NSIvPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIGQ9Ik0xLjUsOC4yIEMxLjc4LDguMTggMi4wNiw4LjE2IDIuMzUsOC4xNiBDNy41Nyw4LjE2IDExLjgxLDEyLjM3IDExLjgxLDE3LjU3IEMxMS44MSwxNy44OSAxMS43OSwxOC4xOSAxMS43NiwxOC41Ii8+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuMSIgZD0iTTEuNSwyLjUyIEMxLjc4LDIuNTEgMi4wNiwyLjUgMi4zNSwyLjUgQzEwLjcyLDIuNSAxNy41LDkuMjQgMTcuNSwxNy41NyBDMTcuNSwxNy44OSAxNy40OSwxOC4xOSAxNy40NywxOC41Ii8+PC9zdmc+JyxzZWFyY2g6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGNpcmNsZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4xIiBjeD0iOSIgY3k9IjkiIHI9IjciLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4xIiBkPSJNMTQsMTQgTDE4LDE4IEwxNCwxNCBaIi8+PC9zdmc+JyxzZXJ2ZXI6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iMyIgeT0iMyIgd2lkdGg9IjEiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjUiIHk9IjMiIHdpZHRoPSIxIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSI3IiB5PSIzIiB3aWR0aD0iMSIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTYiIHk9IjMiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiLz48cmVjdCB4PSIxNiIgeT0iMTAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiLz48Y2lyY2xlIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgY3g9IjkuOSIgY3k9IjE3LjQiIHI9IjEuNCIvPjxyZWN0IHg9IjMiIHk9IjEwIiB3aWR0aD0iMSIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iNSIgeT0iMTAiIHdpZHRoPSIxIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSI5LjUiIHk9IjE0IiB3aWR0aD0iMSIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMyIgeT0iMTciIHdpZHRoPSI2IiBoZWlnaHQ9IjEiLz48cmVjdCB4PSIxMSIgeT0iMTciIHdpZHRoPSI2IiBoZWlnaHQ9IjEiLz48cmVjdCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHg9IjEuNSIgeT0iMS41IiB3aWR0aD0iMTciIGhlaWdodD0iNSIvPjxyZWN0IGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgeD0iMS41IiB5PSI4LjUiIHdpZHRoPSIxNyIgaGVpZ2h0PSI1Ii8+PC9zdmc+JyxzZXR0aW5nczonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZWxsaXBzZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIGN4PSI2LjExIiBjeT0iMy41NSIgcng9IjIuMTEiIHJ5PSIyLjE1Ii8+PGVsbGlwc2UgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBjeD0iNi4xMSIgY3k9IjE1LjU1IiByeD0iMi4xMSIgcnk9IjIuMTUiLz48Y2lyY2xlIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgY3g9IjEzLjE1IiBjeT0iOS41NSIgcj0iMi4xNSIvPjxyZWN0IHg9IjEiIHk9IjMiIHdpZHRoPSIzIiBoZWlnaHQ9IjEiLz48cmVjdCB4PSIxMCIgeT0iMyIgd2lkdGg9IjgiIGhlaWdodD0iMSIvPjxyZWN0IHg9IjEiIHk9IjkiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz48cmVjdCB4PSIxNSIgeT0iOSIgd2lkdGg9IjMiIGhlaWdodD0iMSIvPjxyZWN0IHg9IjEiIHk9IjE1IiB3aWR0aD0iMyIgaGVpZ2h0PSIxIi8+PHJlY3QgeD0iMTAiIHk9IjE1IiB3aWR0aD0iOCIgaGVpZ2h0PSIxIi8+PC9zdmc+JyxzaHJpbms6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlnb24gcG9pbnRzPSIxMSA0IDEyIDQgMTIgOCAxNiA4IDE2IDkgMTEgOSIvPjxwb2x5Z29uIHBvaW50cz0iNCAxMSA5IDExIDkgMTYgOCAxNiA4IDEyIDQgMTIiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4xIiBkPSJNMTIsOCBMMTgsMiIvPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIGQ9Ik0yLDE4IEw4LDEyIi8+PC9zdmc+Jywic2lnbi1pbiI6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlnb24gcG9pbnRzPSI3IDIgMTcgMiAxNyAxNyA3IDE3IDcgMTYgMTYgMTYgMTYgMyA3IDMiLz48cG9seWdvbiBwb2ludHM9IjkuMSAxMy40IDguNSAxMi44IDExLjI4IDEwIDQgMTAgNCA5IDExLjI4IDkgOC41IDYuMiA5LjEgNS42MiAxMyA5LjUiLz48L3N2Zz4nLCJzaWduLW91dCI6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlnb24gcG9pbnRzPSIxMy4xIDEzLjQgMTIuNSAxMi44IDE1LjI4IDEwIDggMTAgOCA5IDE1LjI4IDkgMTIuNSA2LjIgMTMuMSA1LjYyIDE3IDkuNSIvPjxwb2x5Z29uIHBvaW50cz0iMTMgMiAzIDIgMyAxNyAxMyAxNyAxMyAxNiA0IDE2IDQgMyAxMyAzIi8+PC9zdmc+Jyxzb2NpYWw6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuMSIgeDE9IjEzLjQiIHkxPSIxNCIgeDI9IjYuMyIgeTI9IjEwLjciLz48bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4xIiB4MT0iMTMuNSIgeTE9IjUuNSIgeDI9IjYuNSIgeTI9IjguOCIvPjxjaXJjbGUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuMSIgY3g9IjE1LjUiIGN5PSI0LjYiIHI9IjIuMyIvPjxjaXJjbGUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuMSIgY3g9IjE1LjUiIGN5PSIxNC44IiByPSIyLjMiLz48Y2lyY2xlIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIGN4PSI0LjUiIGN5PSI5LjgiIHI9IjIuMyIvPjwvc3ZnPicsc291bmRjbG91ZDonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTcuMiw5LjRjLTAuNCwwLTAuOCwwLjEtMS4xMDEsMC4yYy0wLjE5OS0yLjUtMi4zOTktNC41LTUtNC41Yy0wLjYsMC0xLjIsMC4xLTEuNywwLjNDOS4yLDUuNSw5LjEsNS42LDkuMSw1LjZWMTVoOCBjMS42MDEsMCwyLjgwMS0xLjIsMi44MDEtMi44QzIwLDEwLjcsMTguNyw5LjQsMTcuMiw5LjRMMTcuMiw5LjR6Ii8+PHJlY3QgeD0iNiIgeT0iNi41IiB3aWR0aD0iMS41IiBoZWlnaHQ9IjguNSIvPjxyZWN0IHg9IjMiIHk9IjgiIHdpZHRoPSIxLjUiIGhlaWdodD0iNyIvPjxyZWN0IHk9IjEwIiB3aWR0aD0iMS41IiBoZWlnaHQ9IjUiLz48L3N2Zz4nLHN0YXI6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlnb24gZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuMDEiIHBvaW50cz0iMTAgMiAxMi42MyA3LjI3IDE4LjUgOC4xMiAxNC4yNSAxMi4yMiAxNS4yNSAxOCAxMCAxNS4yNyA0Ljc1IDE4IDUuNzUgMTIuMjIgMS41IDguMTIgNy4zNyA3LjI3Ii8+PC9zdmc+JyxzdHJpa2V0aHJvdWdoOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik02LDEzLjAyIEw2LjY1LDEzLjAyIEM3LjY0LDE1LjE2IDguODYsMTYuMTIgMTAuNDEsMTYuMTIgQzEyLjIyLDE2LjEyIDEyLjkyLDE0LjkzIDEyLjkyLDEzLjg5IEMxMi45MiwxMi41NSAxMS45OSwxMi4wMyA5Ljc0LDExLjIzIEM4LjA1LDEwLjY0IDYuMjMsMTAuMTEgNi4yMyw3LjgzIEM2LjIzLDUuNSA4LjA5LDQuMDkgMTAuNCw0LjA5IEMxMS40NCw0LjA5IDEyLjEzLDQuMzEgMTIuNzIsNC41NCBMMTMuMzMsNCBMMTMuODEsNCBMMTMuODEsNy41OSBMMTMuMTYsNy41OSBDMTIuNTUsNS44OCAxMS41Miw0Ljg5IDEwLjA3LDQuODkgQzguODQsNC44OSA3Ljg5LDUuNjkgNy44OSw3LjAzIEM3Ljg5LDguMjkgOC44OSw4Ljc4IDEwLjg4LDkuNDUgQzEyLjU3LDEwLjAzIDE0LjM4LDEwLjYgMTQuMzgsMTIuOTEgQzE0LjM4LDE0Ljc1IDEzLjI3LDE2LjkzIDEwLjE4LDE2LjkzIEM5LjE4LDE2LjkzIDguMTcsMTYuNjkgNy40NiwxNi4zOSBMNi41MiwxNyBMNiwxNyBMNiwxMy4wMiBMNiwxMy4wMiBaIi8+PHJlY3QgeD0iMyIgeT0iMTAiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxIi8+PC9zdmc+Jyx0YWJsZTonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB4PSIxIiB5PSIzIiB3aWR0aD0iMTgiIGhlaWdodD0iMSIvPjxyZWN0IHg9IjEiIHk9IjciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxIi8+PHJlY3QgeD0iMSIgeT0iMTEiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxIi8+PHJlY3QgeD0iMSIgeT0iMTUiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxIi8+PC9zdmc+JywidGFibGV0LWxhbmRzY2FwZSI6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBkPSJNMS41LDUgQzEuNSw0LjIgMi4yLDMuNSAzLDMuNSBMMTcsMy41IEMxNy44LDMuNSAxOC41LDQuMiAxOC41LDUgTDE4LjUsMTYgQzE4LjUsMTYuOCAxNy44LDE3LjUgMTcsMTcuNSBMMywxNy41IEMyLjIsMTcuNSAxLjUsMTYuOCAxLjUsMTYgTDEuNSw1IEwxLjUsNSBMMS41LDUgWiIvPjxjaXJjbGUgY3g9IjMuNyIgY3k9IjEwLjUiIHI9Ii44Ii8+PC9zdmc+Jyx0YWJsZXQ6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBkPSJNNSwxOC41IEM0LjIsMTguNSAzLjUsMTcuOCAzLjUsMTcgTDMuNSwzIEMzLjUsMi4yIDQuMiwxLjUgNSwxLjUgTDE2LDEuNSBDMTYuOCwxLjUgMTcuNSwyLjIgMTcuNSwzIEwxNy41LDE3IEMxNy41LDE3LjggMTYuOCwxOC41IDE2LDE4LjUgTDUsMTguNSBMNSwxOC41IEw1LDE4LjUgWiIvPjxjaXJjbGUgY3g9IjEwLjUiIGN5PSIxNi4zIiByPSIuOCIvPjwvc3ZnPicsdGFnOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIGQ9Ik0xNy41LDMuNzEgTDE3LjUsNy43MiBDMTcuNSw3Ljk2IDE3LjQsOC4yIDE3LjIxLDguMzkgTDguMzksMTcuMiBDNy45OSwxNy42IDcuMzMsMTcuNiA2LjkzLDE3LjIgTDIuOCwxMy4wNyBDMi40LDEyLjY3IDIuNCwxMi4wMSAyLjgsMTEuNjEgTDExLjYxLDIuOCBDMTEuODEsMi42IDEyLjA4LDIuNSAxMi4zNCwyLjUgTDE2LjE5LDIuNSBDMTYuNTIsMi41IDE2Ljg2LDIuNjMgMTcuMTEsMi44OCBDMTcuMzUsMy4xMSAxNy40OCwzLjQgMTcuNSwzLjcxIEwxNy41LDMuNzEgWiIvPjxjaXJjbGUgY3g9IjE0IiBjeT0iNiIgcj0iMSIvPjwvc3ZnPicsdGh1bWJuYWlsczonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHg9IjMuNSIgeT0iMy41IiB3aWR0aD0iNSIgaGVpZ2h0PSI1Ii8+PHJlY3QgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiB4PSIxMS41IiB5PSIzLjUiIHdpZHRoPSI1IiBoZWlnaHQ9IjUiLz48cmVjdCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHg9IjExLjUiIHk9IjExLjUiIHdpZHRoPSI1IiBoZWlnaHQ9IjUiLz48cmVjdCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHg9IjMuNSIgeT0iMTEuNSIgd2lkdGg9IjUiIGhlaWdodD0iNSIvPjwvc3ZnPicsdGlrdG9rOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNy4yNCw2VjguODJhNi43OSw2Ljc5LDAsMCwxLTQtMS4yOHY1LjgxQTUuMjYsNS4yNiwwLDEsMSw4LDguMWE0LjM2LDQuMzYsMCwwLDEsLjcyLjA1djIuOUEyLjU3LDIuNTcsMCwwLDAsNy42NCwxMWEyLjQsMi40LDAsMSwwLDIuNzcsMi4zOFYyaDIuODZhNCw0LDAsMCwwLDEuODQsMy4zOEE0LDQsMCwwLDAsMTcuMjQsNloiLz48L3N2Zz4nLHRyYXNoOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwb2x5bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHBvaW50cz0iNi41IDMgNi41IDEuNSAxMy41IDEuNSAxMy41IDMiLz48cG9seWxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBwb2ludHM9IjQuNSA0IDQuNSAxOC41IDE1LjUgMTguNSAxNS41IDQiLz48cmVjdCB4PSI4IiB5PSI3IiB3aWR0aD0iMSIgaGVpZ2h0PSI5Ii8+PHJlY3QgeD0iMTEiIHk9IjciIHdpZHRoPSIxIiBoZWlnaHQ9IjkiLz48cmVjdCB4PSIyIiB5PSIzIiB3aWR0aD0iMTYiIGhlaWdodD0iMSIvPjwvc3ZnPicsInRyaWFuZ2xlLWRvd24iOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwb2x5Z29uIHBvaW50cz0iNSA3IDE1IDcgMTAgMTIiLz48L3N2Zz4nLCJ0cmlhbmdsZS1sZWZ0IjonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cG9seWdvbiBwb2ludHM9IjEyIDUgNyAxMCAxMiAxNSIvPjwvc3ZnPicsInRyaWFuZ2xlLXJpZ2h0IjonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cG9seWdvbiBwb2ludHM9IjggNSAxMyAxMCA4IDE1Ii8+PC9zdmc+JywidHJpYW5nbGUtdXAiOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwb2x5Z29uIHBvaW50cz0iNSAxMyAxMCA4IDE1IDEzIi8+PC9zdmc+Jyx0cmlwYWR2aXNvcjonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTkuMDIxLDcuODY2QzE5LjI1Niw2Ljg2MiwyMCw1Ljg1NCwyMCw1Ljg1NGgtMy4zNDZDMTQuNzgxLDQuNjQxLDEyLjUwNCw0LDkuOTgsNEM3LjM2Myw0LDQuOTk5LDQuNjUxLDMuMTM1LDUuODc2SDAJYzAsMCwwLjczOCwwLjk4NywwLjk3NiwxLjk4OGMtMC42MTEsMC44MzctMC45NzMsMS44NTItMC45NzMsMi45NjRjMCwyLjc2MywyLjI0OSw1LjAwOSw1LjAxMSw1LjAwOQljMS41NzYsMCwyLjk3Ni0wLjczNywzLjkwMS0xLjg3OWwxLjA2MywxLjU5OWwxLjA3NS0xLjYxNWMwLjQ3NSwwLjYxMSwxLjEsMS4xMTEsMS44MzgsMS40NTFjMS4yMTMsMC41NDcsMi41NzQsMC42MTIsMy44MjUsMC4xNQljMi41ODktMC45NjMsMy45MTMtMy44NTIsMi45NjQtNi40MzljLTAuMTc1LTAuNDYzLTAuNC0wLjg3Ni0wLjY3NS0xLjIzOEgxOS4wMjF6IE0xNi4zOCwxNC41OTQJYy0xLjAwMiwwLjM3MS0yLjA4OCwwLjMyOC0zLjA2LTAuMTE5Yy0wLjY4OC0wLjMxNy0xLjI1Mi0wLjgxNy0xLjY1Ny0xLjQzOGMtMC4xNjQtMC4yNS0wLjMxMy0wLjUyLTAuNDE3LTAuODExCWMtMC4xMjQtMC4zMjgtMC4xODYtMC42NjgtMC4yMTctMS4wMTRjLTAuMDYzLTAuNjg5LDAuMDM3LTEuMzk2LDAuMzM5LTIuMDQzYzAuNDQ4LTAuOTcxLDEuMjUxLTEuNzEsMi4yNS0yLjA3OQljMi4wNzUtMC43NjUsNC4zNzUsMC4zLDUuMTQsMi4zNjZjMC43NjIsMi4wNjYtMC4zMDEsNC4zNy0yLjM2Myw1LjEzNEwxNi4zOCwxNC41OTRMMTYuMzgsMTQuNTk0eiBNOC4zMjIsMTMuMDY2CWMtMC43MiwxLjA1OS0xLjkzNSwxLjc2LTMuMzA5LDEuNzZjLTIuMjA3LDAtNC4wMDEtMS43OTctNC4wMDEtMy45OTZjMC0yLjIwMywxLjc5NS00LjAwMiw0LjAwMS00LjAwMgljMi4yMDQsMCwzLjk5OSwxLjgsMy45OTksNC4wMDJjMCwwLjEzNy0wLjAyNCwwLjI2MS0wLjA0LDAuMzk2Yy0wLjA2NywwLjY3OC0wLjI4NCwxLjMxMy0wLjY0OCwxLjg1M3YtMC4wMTNIOC4zMjJ6IE0yLjQ3MiwxMC43NzUJYzAsMS4zNjcsMS4xMTIsMi40NzksMi40NzYsMi40NzljMS4zNjMsMCwyLjQ3Mi0xLjExLDIuNDcyLTIuNDc5YzAtMS4zNTktMS4xMS0yLjQ2OC0yLjQ3Mi0yLjQ2OAlDMy41ODQsOC4zMDYsMi40NzMsOS40MTYsMi40NzIsMTAuNzc1TDIuNDcyLDEwLjc3NXogTTEyLjUxNCwxMC43NzVjMCwxLjM2NywxLjEwNCwyLjQ3OSwyLjQ3MSwyLjQ3OQljMS4zNjMsMCwyLjQ3NC0xLjEwOCwyLjQ3NC0yLjQ3OWMwLTEuMzU5LTEuMTEtMi40NjgtMi40NzQtMi40NjhjLTEuMzY0LDAtMi40NzcsMS4xMDktMi40NzcsMi40NjhIMTIuNTE0eiBNMy4zMjQsMTAuNzc1CWMwLTAuODkzLDAuNzI2LTEuNjE4LDEuNjE0LTEuNjE4YzAuODg5LDAsMS42MjUsMC43MjcsMS42MjUsMS42MThjMCwwLjg5OC0wLjcyNSwxLjYyNy0xLjYyNSwxLjYyNwljLTAuOTAxLDAtMS42MjUtMC43MjktMS42MjUtMS42MjdIMy4zMjR6IE0xMy4zNTQsMTAuNzc1YzAtMC44OTMsMC43MjYtMS42MTgsMS42MjctMS42MThjMC44ODYsMCwxLjYxLDAuNzI3LDEuNjEsMS42MTgJYzAsMC44OTgtMC43MjYsMS42MjctMS42MjYsMS42MjdzLTEuNjI1LTAuNzI5LTEuNjI1LTEuNjI3SDEzLjM1NHogTTkuOTc3LDQuODc1YzEuNzk4LDAsMy40MjUsMC4zMjQsNC44NDksMC45NjgJYy0wLjUzNSwwLjAxNS0xLjA2MSwwLjEwOC0xLjU4NiwwLjNjLTEuMjY0LDAuNDYzLTIuMjY0LDEuMzg4LTIuODE1LDIuNjA0Yy0wLjI2MiwwLjU1MS0wLjM5OCwxLjEzMy0wLjQ0OCwxLjcyCUM5Ljc5LDcuOTA1LDcuNjc3LDUuODczLDUuMDc2LDUuODJDNi41MDEsNS4yMDgsOC4xNTMsNC44NzUsOS45NCw0Ljg3NUg5Ljk3N3oiLz48L3N2Zz4nLHR1bWJscjonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNi44ODUsOC41OThjMCwwLDAsMy4zOTMsMCw0Ljk5NmMwLDAuMjgyLDAsMC42NiwwLjA5NCwwLjk0MmMwLjM3NywxLjUwOSwxLjEzMSwyLjU0NSwyLjU0NSwzLjExIGMxLjMxOSwwLjQ3MiwyLjM1NiwwLjQ3MiwzLjY3NiwwYzAuNTY1LTAuMTg4LDEuMTMyLTAuNjU5LDEuMTMyLTAuNjU5bC0wLjg0OS0yLjI2M2MwLDAtMS4wMzYsMC4zNzgtMS42MDMsMC4yODMgYy0wLjU2NS0wLjA5NC0xLjIyNi0wLjY2LTEuMjI2LTEuNTA4YzAtMS42MDMsMC00LjkwMiwwLTQuOTAyaDIuODI4VjUuNzcxaC0yLjgyOFYySDguMjA1YzAsMC0wLjA5NCwwLjY2LTAuMTg4LDAuOTQyIEM3LjgyOCwzLjc5MSw3LjI2Miw0LjczMyw2LjYwMyw1LjM5NEM1Ljg0OCw2LjE0Nyw1LDYuNDMsNSw2LjQzdjIuMTY4SDYuODg1eiIvPjwvc3ZnPicsdHY6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iNyIgeT0iMTYiIHdpZHRoPSI2IiBoZWlnaHQ9IjEiLz48cmVjdCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHg9Ii41IiB5PSIzLjUiIHdpZHRoPSIxOSIgaGVpZ2h0PSIxMSIvPjwvc3ZnPicsdHdpdGNoOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik01LjIzLDEsMiw0LjIzVjE1Ljg1SDUuODh2My4yM0w5LjEsMTUuODVoMi41OUwxNy41LDEwVjFabTExLDguNEwxMy42MiwxMkgxMUw4Ljc4LDE0LjI0VjEySDUuODhWMi4yOUgxNi4yMVoiLz48cmVjdCB4PSIxMi45OCIgeT0iNC41NSIgd2lkdGg9IjEuMjkiIGhlaWdodD0iMy44OCIvPjxyZWN0IHg9IjkuNDMiIHk9IjQuNTUiIHdpZHRoPSIxLjI5IiBoZWlnaHQ9IjMuODgiLz48L3N2Zz4nLHR3aXR0ZXI6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE5LDQuNzQgQzE4LjMzOSw1LjAyOSAxNy42MjYsNS4yMjkgMTYuODgxLDUuMzIgQzE3LjY0NCw0Ljg2IDE4LjIyNyw0LjEzOSAxOC41MDMsMy4yOCBDMTcuNzksMy43IDE3LjAwMSw0LjAwOSAxNi4xNTksNC4xNyBDMTUuNDg1LDMuNDUgMTQuNTI2LDMgMTMuNDY0LDMgQzExLjQyMywzIDkuNzcxLDQuNjYgOS43NzEsNi43IEM5Ljc3MSw2Ljk5IDkuODA0LDcuMjY5IDkuODY4LDcuNTM5IEM2Ljc5NSw3LjM4IDQuMDc2LDUuOTE5IDIuMjU0LDMuNjc5IEMxLjkzNiw0LjIxOSAxLjc1NCw0Ljg2IDEuNzU0LDUuNTM5IEMxLjc1NCw2LjgyIDIuNDA1LDcuOTUgMy4zOTcsOC42MSBDMi43OSw4LjU4OSAyLjIyLDguNDI5IDEuNzIzLDguMTQ5IEwxLjcyMyw4LjE4OSBDMS43MjMsOS45NzggMi45OTcsMTEuNDc4IDQuNjg2LDExLjgyIEM0LjM3NiwxMS44OTkgNC4wNDksMTEuOTM5IDMuNzEzLDExLjkzOSBDMy40NzUsMTEuOTM5IDMuMjQ1LDExLjkxOSAzLjAxOCwxMS44OCBDMy40OSwxMy4zNDkgNC44NTIsMTQuNDE5IDYuNDY5LDE0LjQ0OSBDNS4yMDUsMTUuNDI5IDMuNjEyLDE2LjAxOSAxLjg4MiwxNi4wMTkgQzEuNTgzLDE2LjAxOSAxLjI5LDE2LjAwOSAxLDE1Ljk2OSBDMi42MzUsMTcuMDE5IDQuNTc2LDE3LjYyOSA2LjY2MiwxNy42MjkgQzEzLjQ1NCwxNy42MjkgMTcuMTcsMTIgMTcuMTcsNy4xMjkgQzE3LjE3LDYuOTY5IDE3LjE2Niw2LjgwOSAxNy4xNTcsNi42NDkgQzE3Ljg3OSw2LjEyOSAxOC41MDQsNS40NzggMTksNC43NCIvPjwvc3ZnPicsdWlraXQ6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlnb24gcG9pbnRzPSIxNC40LDMuMSAxMS4zLDUuMSAxNSw3LjMgMTUsMTIuOSAxMCwxNS43IDUsMTIuOSA1LDguNSAyLDYuOCAyLDE0LjggOS45LDE5LjUgMTgsMTQuOCAxOCw1LjMiLz48cG9seWdvbiBwb2ludHM9IjkuOCw0LjIgNi43LDIuNCA5LjgsMC40IDEyLjksMi4zIi8+PC9zdmc+Jyx1bmxvY2s6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiB4PSIzLjUiIHk9IjguNSIgd2lkdGg9IjEzIiBoZWlnaHQ9IjEwIi8+PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBkPSJNNi41LDguNSBMNi41LDQuOSBDNi41LDMgOC4xLDEuNSAxMCwxLjUgQzExLjksMS41IDEzLjUsMyAxMy41LDQuOSIvPjwvc3ZnPicsdXBsb2FkOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwb2x5bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHBvaW50cz0iNSA4IDkuNSAzLjUgMTQgOCIvPjxyZWN0IHg9IjMiIHk9IjE3IiB3aWR0aD0iMTMiIGhlaWdodD0iMSIvPjxsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgeDE9IjkuNSIgeTE9IjE1IiB4Mj0iOS41IiB5Mj0iNCIvPjwvc3ZnPicsdXNlcjonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIGN4PSI5LjkiIGN5PSI2LjQiIHI9IjQuNCIvPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIGQ9Ik0xLjUsMTkgQzIuMywxNC41IDUuOCwxMS4yIDEwLDExLjIgQzE0LjIsMTEuMiAxNy43LDE0LjYgMTguNSwxOS4yIi8+PC9zdmc+Jyx1c2VyczonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIGN4PSI3LjciIGN5PSI4LjYiIHI9IjMuNSIvPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIGQ9Ik0xLDE4LjEgQzEuNywxNC42IDQuNCwxMi4xIDcuNiwxMi4xIEMxMC45LDEyLjEgMTMuNywxNC44IDE0LjMsMTguMyIvPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIGQ9Ik0xMS40LDQgQzEyLjgsMi40IDE1LjQsMi44IDE2LjMsNC43IEMxNy4yLDYuNiAxNS43LDguOSAxMy42LDguOSBDMTYuNSw4LjkgMTguOCwxMS4zIDE5LjIsMTQuMSIvPjwvc3ZnPicsInZpZGVvLWNhbWVyYSI6Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlnb24gZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBwb2ludHM9IjE3LjUgNi45IDE3LjUgMTMuMSAxMy41IDEwLjQgMTMuNSAxNC41IDIuNSAxNC41IDIuNSA1LjUgMTMuNSA1LjUgMTMuNSA5LjYgMTcuNSA2LjkiLz48L3N2Zz4nLHZpbWVvOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0yLjA2NSw3LjU5QzEuODQsNy4zNjcsMS42NTQsNy4wODIsMS40NjgsNi44MzhjLTAuMzMyLTAuNDItMC4xMzctMC40MTEsMC4yNzQtMC43NzJjMS4wMjYtMC45MSwyLjAwNC0xLjg5NiwzLjEyNy0yLjY4OCBjMS4wMTctMC43MTMsMi4zNjUtMS4xNzMsMy4yODYtMC4wMzljMC44NDksMS4wNDUsMC44NjksMi42MjksMS4wODQsMy44OTFjMC4yMTUsMS4zMDksMC40MjEsMi42NDgsMC44OCwzLjkwMSBjMC4xMjcsMC4zNTIsMC4zNywxLjAxOCwwLjgxLDEuMDc0YzAuNTY3LDAuMDc4LDEuMTQ1LTAuOTE3LDEuNDA4LTEuMjg5YzAuNjg0LTAuOTg3LDEuNjExLTIuMzE3LDEuNDk0LTMuNTg3IGMtMC4xMTUtMS4zNDktMS41NzItMS4wOTUtMi40ODItMC43NzNjMC4xNDYtMS41MTQsMS41NTUtMy4yMTYsMi45MTItMy43OTJjMS40MzktMC41OTcsMy41NzktMC41ODcsNC4zMDIsMS4wMzYgYzAuNzcyLDEuNzU5LDAuMDc4LDMuODAyLTAuNzYzLDUuMzk2Yy0wLjkxOCwxLjczMS0yLjEsMy4zMzMtMy4zNjMsNC44MjljLTEuMTE0LDEuMzI5LTIuNDMyLDIuNzg3LTQuMDkzLDMuNDIyIGMtMS44OTcsMC43MjMtMy4wMjEtMC42ODYtMy42NjctMi4zMThjLTAuNzA1LTEuNzc3LTEuMDU2LTMuNzcxLTEuNTY1LTUuNjIxQzQuODk4LDguNzI2LDQuNjQ0LDcuODM2LDQuMTM2LDcuMTkxIEMzLjQ3Myw2LjM1OCwyLjcyLDcuMTQxLDIuMDY1LDcuNTlDMS45NzcsNy41MDIsMi4xMTUsNy41NTEsMi4wNjUsNy41OUwyLjA2NSw3LjU5eiIvPjwvc3ZnPicsd2FybmluZzonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSIxMCIgY3k9IjE0IiByPSIxIi8+PGNpcmNsZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4xIiBjeD0iMTAiIGN5PSIxMCIgcj0iOSIvPjxwYXRoIGQ9Ik0xMC45Nyw3LjcyIEMxMC44NSw5LjU0IDEwLjU2LDExLjI5IDEwLjU2LDExLjI5IEMxMC41MSwxMS44NyAxMC4yNywxMiA5Ljk5LDEyIEM5LjY5LDEyIDkuNDksMTEuODcgOS40MywxMS4yOSBDOS40MywxMS4yOSA5LjE2LDkuNTQgOS4wMyw3LjcyIEM4Ljk2LDYuNTQgOS4wMyw2IDkuMDMsNiBDOS4wMyw1LjQ1IDkuNDYsNS4wMiA5Ljk5LDUgQzEwLjUzLDUuMDEgMTAuOTcsNS40NCAxMC45Nyw2IEMxMC45Nyw2IDExLjA0LDYuNTQgMTAuOTcsNy43MiBMMTAuOTcsNy43MiBaIi8+PC9zdmc+Jyx3aGF0c2FwcDonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTYuNywzLjNjLTEuOC0xLjgtNC4xLTIuOC02LjctMi44Yy01LjIsMC05LjQsNC4yLTkuNCw5LjRjMCwxLjcsMC40LDMuMywxLjMsNC43bC0xLjMsNC45bDUtMS4zYzEuNCwwLjgsMi45LDEuMiw0LjUsMS4yIGwwLDBsMCwwYzUuMiwwLDkuNC00LjIsOS40LTkuNEMxOS41LDcuNCwxOC41LDUsMTYuNywzLjMgTTEwLjEsMTcuN0wxMC4xLDE3LjdjLTEuNCwwLTIuOC0wLjQtNC0xLjFsLTAuMy0wLjJsLTMsMC44bDAuOC0yLjkgbC0wLjItMC4zYy0wLjgtMS4yLTEuMi0yLjctMS4yLTQuMmMwLTQuMywzLjUtNy44LDcuOC03LjhjMi4xLDAsNC4xLDAuOCw1LjUsMi4zYzEuNSwxLjUsMi4zLDMuNCwyLjMsNS41IEMxNy45LDE0LjIsMTQuNCwxNy43LDEwLjEsMTcuNyBNMTQuNCwxMS45Yy0wLjItMC4xLTEuNC0wLjctMS42LTAuOGMtMC4yLTAuMS0wLjQtMC4xLTAuNSwwLjFjLTAuMiwwLjItMC42LDAuOC0wLjgsMC45IGMtMC4xLDAuMi0wLjMsMC4yLTAuNSwwLjFjLTAuMi0wLjEtMS0wLjQtMS45LTEuMmMtMC43LTAuNi0xLjItMS40LTEuMy0xLjZjLTAuMS0wLjIsMC0wLjQsMC4xLTAuNUM4LDguOCw4LjEsOC43LDguMiw4LjUgYzAuMS0wLjEsMC4yLTAuMiwwLjItMC40YzAuMS0wLjIsMC0wLjMsMC0wLjRDOC40LDcuNiw3LjksNi41LDcuNyw2QzcuNSw1LjUsNy4zLDUuNiw3LjIsNS42Yy0wLjEsMC0wLjMsMC0wLjQsMCBjLTAuMiwwLTAuNCwwLjEtMC42LDAuM2MtMC4yLDAuMi0wLjgsMC44LTAuOCwyYzAsMS4yLDAuOCwyLjMsMSwyLjRjMC4xLDAuMiwxLjcsMi41LDQsMy41YzAuNiwwLjIsMSwwLjQsMS4zLDAuNSBjMC42LDAuMiwxLjEsMC4yLDEuNSwwLjFjMC41LTAuMSwxLjQtMC42LDEuNi0xLjFjMC4yLTAuNSwwLjItMSwwLjEtMS4xQzE0LjgsMTIuMSwxNC42LDEyLDE0LjQsMTEuOSIvPjwvc3ZnPicsd29yZHByZXNzOic8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xMCwwLjVjLTUuMiwwLTkuNSw0LjMtOS41LDkuNXM0LjMsOS41LDkuNSw5LjVjNS4yLDAsOS41LTQuMyw5LjUtOS41UzE1LjIsMC41LDEwLDAuNUwxMCwwLjVMMTAsMC41eiBNMTUuNiwzLjloLTAuMSBjLTAuOCwwLTEuNCwwLjctMS40LDEuNWMwLDAuNywwLjQsMS4zLDAuOCwxLjljMC4zLDAuNiwwLjcsMS4zLDAuNywyLjNjMCwwLjctMC4zLDEuNS0wLjYsMi43TDE0LjEsMTVsLTMtOC45IGMwLjUsMCwwLjktMC4xLDAuOS0wLjFDMTIuNSw2LDEyLjUsNS4zLDEyLDUuNGMwLDAtMS4zLDAuMS0yLjIsMC4xQzksNS41LDcuNyw1LjQsNy43LDUuNEM3LjIsNS4zLDcuMiw2LDcuNiw2YzAsMCwwLjQsMC4xLDAuOSwwLjEgbDEuMywzLjVMOCwxNUw1LDYuMUM1LjUsNi4xLDUuOSw2LDUuOSw2QzYuNCw2LDYuMyw1LjMsNS45LDUuNGMwLDAtMS4zLDAuMS0yLjIsMC4xYy0wLjIsMC0wLjMsMC0wLjUsMGMxLjUtMi4yLDQtMy43LDYuOS0zLjcgQzEyLjIsMS43LDE0LjEsMi42LDE1LjYsMy45TDE1LjYsMy45TDE1LjYsMy45eiBNMi41LDYuNmwzLjksMTAuOGMtMi43LTEuMy00LjYtNC4yLTQuNi03LjRDMS44LDguOCwyLDcuNiwyLjUsNi42TDIuNSw2LjZMMi41LDYuNiB6IE0xMC4yLDEwLjdsMi41LDYuOWMwLDAsMCwwLjEsMC4xLDAuMUMxMS45LDE4LDExLDE4LjIsMTAsMTguMmMtMC44LDAtMS42LTAuMS0yLjMtMC4zTDEwLjIsMTAuN0wxMC4yLDEwLjdMMTAuMiwxMC43eiBNMTQuMiwxNy4xIGwyLjUtNy4zYzAuNS0xLjIsMC42LTIuMSwwLjYtMi45YzAtMC4zLDAtMC42LTAuMS0wLjhjMC42LDEuMiwxLDIuNSwxLDRDMTguMywxMywxNi42LDE1LjcsMTQuMiwxNy4xTDE0LjIsMTcuMUwxNC4yLDE3LjF6Ii8+PC9zdmc+Jyx3b3JsZDonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIGQ9Ik0xLDEwLjUgTDE5LDEwLjUiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIGQ9Ik0yLjM1LDE1LjUgTDE3LjY1LDE1LjUiLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIGQ9Ik0yLjM1LDUuNSBMMTcuNTIzLDUuNSIvPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgZD0iTTEwLDE5LjQ2IEw5Ljk4LDE5LjQ2IEM3LjMxLDE3LjMzIDUuNjEsMTQuMTQxIDUuNjEsMTAuNTggQzUuNjEsNy4wMiA3LjMzLDMuODMgMTAsMS43IEMxMC4wMSwxLjcgOS45OSwxLjcgMTAsMS43IEwxMCwxLjcgQzEyLjY3LDMuODMgMTQuNCw3LjAyIDE0LjQsMTAuNTggQzE0LjQsMTQuMTQxIDEyLjY3LDE3LjMzIDEwLDE5LjQ2IEwxMCwxOS40NiBMMTAsMTkuNDYgTDEwLDE5LjQ2IFoiLz48Y2lyY2xlIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgY3g9IjEwIiBjeT0iMTAuNSIgcj0iOSIvPjwvc3ZnPicseGluZzonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNC40LDQuNTYgQzQuMjQsNC41NiA0LjExLDQuNjEgNC4wNSw0LjcyIEMzLjk4LDQuODMgMy45OSw0Ljk3IDQuMDcsNS4xMiBMNS44Miw4LjE2IEw1LjgyLDguMTcgTDMuMDYsMTMuMDQgQzIuOTksMTMuMTggMi45OSwxMy4zMyAzLjA2LDEzLjQ0IEMzLjEyLDEzLjU1IDMuMjQsMTMuNjIgMy40LDEzLjYyIEw2LDEzLjYyIEM2LjM5LDEzLjYyIDYuNTcsMTMuMzYgNi43MSwxMy4xMiBDNi43MSwxMy4xMiA5LjQxLDguMzUgOS41MSw4LjE2IEM5LjQ5LDguMTQgNy43Miw1LjA0IDcuNzIsNS4wNCBDNy41OCw0LjgxIDcuMzksNC41NiA2Ljk5LDQuNTYgTDQuNCw0LjU2IEw0LjQsNC41NiBaIi8+PHBhdGggZD0iTTE1LjMsMSBDMTQuOTEsMSAxNC43NCwxLjI1IDE0LjYsMS41IEMxNC42LDEuNSA5LjAxLDExLjQyIDguODIsMTEuNzQgQzguODMsMTEuNzYgMTIuNTEsMTguNTEgMTIuNTEsMTguNTEgQzEyLjY0LDE4Ljc0IDEyLjg0LDE5IDEzLjIzLDE5IEwxNS44MiwxOSBDMTUuOTgsMTkgMTYuMSwxOC45NCAxNi4xNiwxOC44MyBDMTYuMjMsMTguNzIgMTYuMjMsMTguNTcgMTYuMTYsMTguNDMgTDEyLjUsMTEuNzQgTDEyLjUsMTEuNzIgTDE4LjI1LDEuNTYgQzE4LjMyLDEuNDIgMTguMzIsMS4yNyAxOC4yNSwxLjE2IEMxOC4yMSwxLjA2IDE4LjA4LDEgMTcuOTMsMSBMMTUuMywxIEwxNS4zLDEgWiIvPjwvc3ZnPicseWVscDonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTcuMTc1LDE0Ljk3MWMtMC4xMTIsMC43Ny0xLjY4NiwyLjc2Ny0yLjQwNiwzLjA1NGMtMC4yNDYsMC4xLTAuNDg3LDAuMDc2LTAuNjc1LTAuMDY5CWMtMC4xMjItMC4wOTYtMi40NDYtMy44NTktMi40NDYtMy44NTljLTAuMTk0LTAuMjkzLTAuMTU3LTAuNjgyLDAuMDgzLTAuOTc4YzAuMjM0LTAuMjg0LDAuNTgxLTAuMzkzLDAuODgxLTAuMjc2CWMwLjAxNiwwLjAxLDQuMjEsMS4zOTQsNC4zMzIsMS40ODJjMC4xNzgsMC4xNDgsMC4yNjMsMC4zNzksMC4yMjUsMC42NDZMMTcuMTc1LDE0Ljk3MUwxNy4xNzUsMTQuOTcxeiBNMTEuNDY0LDEwLjc4OQljLTAuMjAzLTAuMzA3LTAuMTk5LTAuNjY2LDAuMDA5LTAuOTE2YzAsMCwyLjYyNS0zLjU3NCwyLjc0NS0zLjY1N2MwLjIwMy0wLjEzNSwwLjQ1Mi0wLjE0MSwwLjY5LTAuMDI1CWMwLjY5MSwwLjMzNSwyLjA4NSwyLjQwNSwyLjE2NywzLjE5OXYwLjAyN2MwLjAyNCwwLjI3MS0wLjA4MiwwLjQ5MS0wLjI3MywwLjYyM2MtMC4xMzIsMC4wODMtNC40MywxLjE1NS00LjQzLDEuMTU1CWMtMC4zMjIsMC4wOTYtMC42OC0wLjA2LTAuODgyLTAuMzgxTDExLjQ2NCwxMC43ODl6IE05LjQ3NSw5LjU2M0M5LjMyLDkuNjA5LDguODQ4LDkuNzU3LDguMjY5LDguODE3YzAsMC0zLjkxNi02LjE2LTQuMDA3LTYuMzUxCWMtMC4wNTctMC4yMTIsMC4wMTEtMC40NTUsMC4yMDItMC42NUM1LjA0NywxLjIxMSw4LjIxLDAuMzI3LDkuMDM3LDAuNTI5YzAuMjcsMC4wNjksMC40NTcsMC4yMzgsMC41MjIsMC40NzkJYzAuMDQ3LDAuMjY2LDAuNDMzLDUuOTgyLDAuNDg4LDcuMjY0QzEwLjA5OCw5LjM2OCw5LjYyOSw5LjUxNyw5LjQ3NSw5LjU2M3ogTTkuOTI3LDE5LjA2NmMtMC4wODMsMC4yMjUtMC4yNzMsMC4zNzMtMC41NCwwLjQyMQljLTAuNzYyLDAuMTMtMy4xNS0wLjc1MS0zLjY0Ny0xLjM0MmMtMC4wOTYtMC4xMzEtMC4xNTUtMC4yNjItMC4xNjctMC4zOTRjLTAuMDExLTAuMDk1LDAtMC4xODksMC4wMzYtMC4yNzIJYzAuMDYxLTAuMTU1LDIuOTE3LTMuNTM4LDIuOTE3LTMuNTM4YzAuMjE0LTAuMjcyLDAuNTk1LTAuMzU1LDAuOTUyLTAuMjEzYzAuMzQ1LDAuMTMsMC41NiwwLjQyOCwwLjUzNiwwLjc0OQlDMTAuMDE0LDE0LjQ3OSw5Ljk3NywxOC45MjMsOS45MjcsMTkuMDY2eiBNMy40OTUsMTMuOTEyYy0wLjIzNS0wLjAwOS0wLjQ0NC0wLjE0OC0wLjU2OC0wLjM4MmMtMC4wODktMC4xNy0wLjE1MS0wLjQ1My0wLjE5LTAuNzk0CUMyLjYzLDExLjcwMSwyLjc2MSwxMC4xNDQsMy4wNyw5LjY0OGMwLjE0NS0wLjIyNiwwLjM1Ny0wLjM0NSwwLjU5Mi0wLjMzNmMwLjE1NCwwLDQuMjU1LDEuNjY3LDQuMjU1LDEuNjY3CWMwLjMyMSwwLjExOCwwLjUyMSwwLjQ1MywwLjUsMC44MzNjLTAuMDIzLDAuMzctMC4yMzYsMC42NTUtMC41NTEsMC43MzhMMy40OTUsMTMuOTEyeiIvPjwvc3ZnPicseW91dHViZTonPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTUsNC4xYzEsMC4xLDIuMywwLDMsMC44YzAuOCwwLjgsMC45LDIuMSwwLjksMy4xQzE5LDkuMiwxOSwxMC45LDE5LDEyYy0wLjEsMS4xLDAsMi40LTAuNSwzLjRjLTAuNSwxLjEtMS40LDEuNS0yLjUsMS42IGMtMS4yLDAuMS04LjYsMC4xLTExLDBjLTEuMS0wLjEtMi40LTAuMS0zLjItMWMtMC43LTAuOC0wLjctMi0wLjgtM0MxLDExLjgsMSwxMC4xLDEsOC45YzAtMS4xLDAtMi40LDAuNS0zLjRDMiw0LjUsMyw0LjMsNC4xLDQuMiBDNS4zLDQuMSwxMi42LDQsMTUsNC4xeiBNOCw3LjV2Nmw1LjUtM0w4LDcuNXoiLz48L3N2Zz4nfSl9cmV0dXJuIHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuVUlraXQmJndpbmRvdy5VSWtpdC51c2UodCksdH0pOwo=]]></data>
	</file>
	<file>
	  <filename>/js/uikit/uikit.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIFVJa2l0IDMuMTUuMSB8IGh0dHBzOi8vd3d3LmdldHVpa2l0LmNvbSB8IChjKSAyMDE0IC0gMjAyMiBZT090aGVtZSB8IE1JVCBMaWNlbnNlICovCgooZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkgewogICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOgogICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKCd1aWtpdCcsIGZhY3RvcnkpIDoKICAgIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5VSWtpdCA9IGZhY3RvcnkoKSk7Cn0pKHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsKCiAgICBjb25zdCB7IGhhc093blByb3BlcnR5LCB0b1N0cmluZyB9ID0gT2JqZWN0LnByb3RvdHlwZTsKCiAgICBmdW5jdGlvbiBoYXNPd24ob2JqLCBrZXkpIHsKICAgICAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpOwogICAgfQoKICAgIGNvbnN0IGh5cGhlbmF0ZVJlID0gL1xCKFtBLVpdKS9nOwoKICAgIGNvbnN0IGh5cGhlbmF0ZSA9IG1lbW9pemUoKHN0cikgPT4gc3RyLnJlcGxhY2UoaHlwaGVuYXRlUmUsICctJDEnKS50b0xvd2VyQ2FzZSgpKTsKCiAgICBjb25zdCBjYW1lbGl6ZVJlID0gLy0oXHcpL2c7CgogICAgY29uc3QgY2FtZWxpemUgPSBtZW1vaXplKChzdHIpID0+IHN0ci5yZXBsYWNlKGNhbWVsaXplUmUsIHRvVXBwZXIpKTsKCiAgICBjb25zdCB1Y2ZpcnN0ID0gbWVtb2l6ZSgoc3RyKSA9PgogICAgc3RyLmxlbmd0aCA/IHRvVXBwZXIobnVsbCwgc3RyLmNoYXJBdCgwKSkgKyBzdHIuc2xpY2UoMSkgOiAnJyk7CgoKICAgIGZ1bmN0aW9uIHRvVXBwZXIoXywgYykgewogICAgICByZXR1cm4gYyA/IGMudG9VcHBlckNhc2UoKSA6ICcnOwogICAgfQoKICAgIGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc3RyLCBzZWFyY2gpIHsKICAgICAgcmV0dXJuIHN0ciA9PSBudWxsID8gdm9pZCAwIDogc3RyLnN0YXJ0c1dpdGggPT0gbnVsbCA/IHZvaWQgMCA6IHN0ci5zdGFydHNXaXRoKHNlYXJjaCk7CiAgICB9CgogICAgZnVuY3Rpb24gZW5kc1dpdGgoc3RyLCBzZWFyY2gpIHsKICAgICAgcmV0dXJuIHN0ciA9PSBudWxsID8gdm9pZCAwIDogc3RyLmVuZHNXaXRoID09IG51bGwgPyB2b2lkIDAgOiBzdHIuZW5kc1dpdGgoc2VhcmNoKTsKICAgIH0KCiAgICBmdW5jdGlvbiBpbmNsdWRlcyhvYmosIHNlYXJjaCkgewogICAgICByZXR1cm4gb2JqID09IG51bGwgPyB2b2lkIDAgOiBvYmouaW5jbHVkZXMgPT0gbnVsbCA/IHZvaWQgMCA6IG9iai5pbmNsdWRlcyhzZWFyY2gpOwogICAgfQoKICAgIGZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlKSB7CiAgICAgIHJldHVybiBhcnJheSA9PSBudWxsID8gdm9pZCAwIDogYXJyYXkuZmluZEluZGV4ID09IG51bGwgPyB2b2lkIDAgOiBhcnJheS5maW5kSW5kZXgocHJlZGljYXRlKTsKICAgIH0KCiAgICBjb25zdCB7IGlzQXJyYXksIGZyb206IHRvQXJyYXkgfSA9IEFycmF5OwogICAgY29uc3QgeyBhc3NpZ24gfSA9IE9iamVjdDsKCiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKG9iaikgewogICAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJzsKICAgIH0KCiAgICBmdW5jdGlvbiBpc09iamVjdChvYmopIHsKICAgICAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JzsKICAgIH0KCiAgICBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikgewogICAgICByZXR1cm4gdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBPYmplY3RdJzsKICAgIH0KCiAgICBmdW5jdGlvbiBpc1dpbmRvdyhvYmopIHsKICAgICAgcmV0dXJuIGlzT2JqZWN0KG9iaikgJiYgb2JqID09PSBvYmoud2luZG93OwogICAgfQoKICAgIGZ1bmN0aW9uIGlzRG9jdW1lbnQob2JqKSB7CiAgICAgIHJldHVybiBub2RlVHlwZShvYmopID09PSA5OwogICAgfQoKICAgIGZ1bmN0aW9uIGlzTm9kZShvYmopIHsKICAgICAgcmV0dXJuIG5vZGVUeXBlKG9iaikgPj0gMTsKICAgIH0KCiAgICBmdW5jdGlvbiBpc0VsZW1lbnQob2JqKSB7CiAgICAgIHJldHVybiBub2RlVHlwZShvYmopID09PSAxOwogICAgfQoKICAgIGZ1bmN0aW9uIG5vZGVUeXBlKG9iaikgewogICAgICByZXR1cm4gIWlzV2luZG93KG9iaikgJiYgaXNPYmplY3Qob2JqKSAmJiBvYmoubm9kZVR5cGU7CiAgICB9CgogICAgZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7CiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJzsKICAgIH0KCiAgICBmdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkgewogICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJzsKICAgIH0KCiAgICBmdW5jdGlvbiBpc051bWJlcih2YWx1ZSkgewogICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJzsKICAgIH0KCiAgICBmdW5jdGlvbiBpc051bWVyaWModmFsdWUpIHsKICAgICAgcmV0dXJuIGlzTnVtYmVyKHZhbHVlKSB8fCBpc1N0cmluZyh2YWx1ZSkgJiYgIWlzTmFOKHZhbHVlIC0gcGFyc2VGbG9hdCh2YWx1ZSkpOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7CiAgICAgIHJldHVybiAhKGlzQXJyYXkob2JqKSA/IG9iai5sZW5ndGggOiBpc09iamVjdChvYmopID8gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggOiBmYWxzZSk7CiAgICB9CgogICAgZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHsKICAgICAgcmV0dXJuIHZhbHVlID09PSB2b2lkIDA7CiAgICB9CgogICAgZnVuY3Rpb24gdG9Cb29sZWFuKHZhbHVlKSB7CiAgICAgIHJldHVybiBpc0Jvb2xlYW4odmFsdWUpID8KICAgICAgdmFsdWUgOgogICAgICB2YWx1ZSA9PT0gJ3RydWUnIHx8IHZhbHVlID09PSAnMScgfHwgdmFsdWUgPT09ICcnID8KICAgICAgdHJ1ZSA6CiAgICAgIHZhbHVlID09PSAnZmFsc2UnIHx8IHZhbHVlID09PSAnMCcgPwogICAgICBmYWxzZSA6CiAgICAgIHZhbHVlOwogICAgfQoKICAgIGZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7CiAgICAgIGNvbnN0IG51bWJlciA9IE51bWJlcih2YWx1ZSk7CiAgICAgIHJldHVybiBpc05hTihudW1iZXIpID8gZmFsc2UgOiBudW1iZXI7CiAgICB9CgogICAgZnVuY3Rpb24gdG9GbG9hdCh2YWx1ZSkgewogICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSkgfHwgMDsKICAgIH0KCiAgICBmdW5jdGlvbiB0b05vZGUoZWxlbWVudCkgewogICAgICByZXR1cm4gdG9Ob2RlcyhlbGVtZW50KVswXTsKICAgIH0KCiAgICBmdW5jdGlvbiB0b05vZGVzKGVsZW1lbnQpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQgJiYgKGlzTm9kZShlbGVtZW50KSA/IFtlbGVtZW50XSA6IEFycmF5LmZyb20oZWxlbWVudCkuZmlsdGVyKGlzTm9kZSkpIHx8IFtdOwogICAgfQoKICAgIGZ1bmN0aW9uIHRvV2luZG93KGVsZW1lbnQpIHt2YXIgX2VsZW1lbnQ7CiAgICAgIGlmIChpc1dpbmRvdyhlbGVtZW50KSkgewogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICB9CgogICAgICBlbGVtZW50ID0gdG9Ob2RlKGVsZW1lbnQpOwogICAgICBjb25zdCBkb2N1bWVudCA9IGlzRG9jdW1lbnQoZWxlbWVudCkgPyBlbGVtZW50IDogKF9lbGVtZW50ID0gZWxlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50Lm93bmVyRG9jdW1lbnQ7CgogICAgICByZXR1cm4gKGRvY3VtZW50ID09IG51bGwgPyB2b2lkIDAgOiBkb2N1bWVudC5kZWZhdWx0VmlldykgfHwgd2luZG93OwogICAgfQoKICAgIGZ1bmN0aW9uIGlzRXF1YWwodmFsdWUsIG90aGVyKSB7CiAgICAgIHJldHVybiAoCiAgICAgICAgdmFsdWUgPT09IG90aGVyIHx8CiAgICAgICAgaXNPYmplY3QodmFsdWUpICYmCiAgICAgICAgaXNPYmplY3Qob3RoZXIpICYmCiAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gT2JqZWN0LmtleXMob3RoZXIpLmxlbmd0aCAmJgogICAgICAgIGVhY2godmFsdWUsICh2YWwsIGtleSkgPT4gdmFsID09PSBvdGhlcltrZXldKSk7CgogICAgfQoKICAgIGZ1bmN0aW9uIHN3YXAodmFsdWUsIGEsIGIpIHsKICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cChhICsgInwiICsgYiwgJ2cnKSwgKG1hdGNoKSA9PiBtYXRjaCA9PT0gYSA/IGIgOiBhKTsKICAgIH0KCiAgICBmdW5jdGlvbiBsYXN0KGFycmF5KSB7CiAgICAgIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsKICAgIH0KCiAgICBmdW5jdGlvbiBlYWNoKG9iaiwgY2IpIHsKICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7CiAgICAgICAgaWYgKGZhbHNlID09PSBjYihvYmpba2V5XSwga2V5KSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBmdW5jdGlvbiBzb3J0QnkkMShhcnJheSwgcHJvcCkgewogICAgICByZXR1cm4gYXJyYXkuCiAgICAgIHNsaWNlKCkuCiAgICAgIHNvcnQoKF9yZWYsIF9yZWYyKSA9PiB7bGV0IHsgW3Byb3BdOiBwcm9wQSA9IDAgfSA9IF9yZWY7bGV0IHsgW3Byb3BdOiBwcm9wQiA9IDAgfSA9IF9yZWYyO3JldHVybiAoCiAgICAgICAgICBwcm9wQSA+IHByb3BCID8gMSA6IHByb3BCID4gcHJvcEEgPyAtMSA6IDApO30pOwoKICAgIH0KCiAgICBmdW5jdGlvbiB1bmlxdWVCeShhcnJheSwgcHJvcCkgewogICAgICBjb25zdCBzZWVuID0gbmV3IFNldCgpOwogICAgICByZXR1cm4gYXJyYXkuZmlsdGVyKChfcmVmMykgPT4ge2xldCB7IFtwcm9wXTogY2hlY2sgfSA9IF9yZWYzO3JldHVybiBzZWVuLmhhcyhjaGVjaykgPyBmYWxzZSA6IHNlZW4uYWRkKGNoZWNrKTt9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBjbGFtcChudW1iZXIsIG1pbiwgbWF4KSB7aWYgKG1pbiA9PT0gdm9pZCAwKSB7bWluID0gMDt9aWYgKG1heCA9PT0gdm9pZCAwKSB7bWF4ID0gMTt9CiAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh0b051bWJlcihudW1iZXIpIHx8IDAsIG1pbiksIG1heCk7CiAgICB9CgogICAgZnVuY3Rpb24gbm9vcCgpIHt9CgogICAgZnVuY3Rpb24gaW50ZXJzZWN0UmVjdCgpIHtmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVjdHMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7cmVjdHNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07fQogICAgICByZXR1cm4gWwogICAgICBbJ2JvdHRvbScsICd0b3AnXSwKICAgICAgWydyaWdodCcsICdsZWZ0J11dLgogICAgICBldmVyeSgKICAgICAgKF9yZWY0KSA9PiB7bGV0IFttaW5Qcm9wLCBtYXhQcm9wXSA9IF9yZWY0O3JldHVybiAoCiAgICAgICAgICBNYXRoLm1pbiguLi5yZWN0cy5tYXAoKF9yZWY1KSA9PiB7bGV0IHsgW21pblByb3BdOiBtaW4gfSA9IF9yZWY1O3JldHVybiBtaW47fSkpIC0KICAgICAgICAgIE1hdGgubWF4KC4uLnJlY3RzLm1hcCgoX3JlZjYpID0+IHtsZXQgeyBbbWF4UHJvcF06IG1heCB9ID0gX3JlZjY7cmV0dXJuIG1heDt9KSkgPgogICAgICAgICAgMCk7fSk7CgogICAgfQoKICAgIGZ1bmN0aW9uIHBvaW50SW5SZWN0KHBvaW50LCByZWN0KSB7CiAgICAgIHJldHVybiAoCiAgICAgICAgcG9pbnQueCA8PSByZWN0LnJpZ2h0ICYmCiAgICAgICAgcG9pbnQueCA+PSByZWN0LmxlZnQgJiYKICAgICAgICBwb2ludC55IDw9IHJlY3QuYm90dG9tICYmCiAgICAgICAgcG9pbnQueSA+PSByZWN0LnRvcCk7CgogICAgfQoKICAgIGZ1bmN0aW9uIHJhdGlvKGRpbWVuc2lvbnMsIHByb3AsIHZhbHVlKSB7CiAgICAgIGNvbnN0IGFQcm9wID0gcHJvcCA9PT0gJ3dpZHRoJyA/ICdoZWlnaHQnIDogJ3dpZHRoJzsKCiAgICAgIHJldHVybiB7CiAgICAgICAgW2FQcm9wXTogZGltZW5zaW9uc1twcm9wXSA/CiAgICAgICAgTWF0aC5yb3VuZCh2YWx1ZSAqIGRpbWVuc2lvbnNbYVByb3BdIC8gZGltZW5zaW9uc1twcm9wXSkgOgogICAgICAgIGRpbWVuc2lvbnNbYVByb3BdLAogICAgICAgIFtwcm9wXTogdmFsdWUgfTsKCiAgICB9CgogICAgZnVuY3Rpb24gY29udGFpbihkaW1lbnNpb25zLCBtYXhEaW1lbnNpb25zKSB7CiAgICAgIGRpbWVuc2lvbnMgPSB7IC4uLmRpbWVuc2lvbnMgfTsKCiAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBkaW1lbnNpb25zKSB7CiAgICAgICAgZGltZW5zaW9ucyA9CiAgICAgICAgZGltZW5zaW9uc1twcm9wXSA+IG1heERpbWVuc2lvbnNbcHJvcF0gPwogICAgICAgIHJhdGlvKGRpbWVuc2lvbnMsIHByb3AsIG1heERpbWVuc2lvbnNbcHJvcF0pIDoKICAgICAgICBkaW1lbnNpb25zOwogICAgICB9CgogICAgICByZXR1cm4gZGltZW5zaW9uczsKICAgIH0KCiAgICBmdW5jdGlvbiBjb3ZlciQxKGRpbWVuc2lvbnMsIG1heERpbWVuc2lvbnMpIHsKICAgICAgZGltZW5zaW9ucyA9IGNvbnRhaW4oZGltZW5zaW9ucywgbWF4RGltZW5zaW9ucyk7CgogICAgICBmb3IgKGNvbnN0IHByb3AgaW4gZGltZW5zaW9ucykgewogICAgICAgIGRpbWVuc2lvbnMgPQogICAgICAgIGRpbWVuc2lvbnNbcHJvcF0gPCBtYXhEaW1lbnNpb25zW3Byb3BdID8KICAgICAgICByYXRpbyhkaW1lbnNpb25zLCBwcm9wLCBtYXhEaW1lbnNpb25zW3Byb3BdKSA6CiAgICAgICAgZGltZW5zaW9uczsKICAgICAgfQoKICAgICAgcmV0dXJuIGRpbWVuc2lvbnM7CiAgICB9CgogICAgY29uc3QgRGltZW5zaW9ucyA9IHsgcmF0aW8sIGNvbnRhaW4sIGNvdmVyOiBjb3ZlciQxIH07CgogICAgZnVuY3Rpb24gZ2V0SW5kZXgoaSwgZWxlbWVudHMsIGN1cnJlbnQsIGZpbml0ZSkge2lmIChjdXJyZW50ID09PSB2b2lkIDApIHtjdXJyZW50ID0gMDt9aWYgKGZpbml0ZSA9PT0gdm9pZCAwKSB7ZmluaXRlID0gZmFsc2U7fQogICAgICBlbGVtZW50cyA9IHRvTm9kZXMoZWxlbWVudHMpOwoKICAgICAgY29uc3QgeyBsZW5ndGggfSA9IGVsZW1lbnRzOwoKICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KCiAgICAgIGkgPSBpc051bWVyaWMoaSkgPwogICAgICB0b051bWJlcihpKSA6CiAgICAgIGkgPT09ICduZXh0JyA/CiAgICAgIGN1cnJlbnQgKyAxIDoKICAgICAgaSA9PT0gJ3ByZXZpb3VzJyA/CiAgICAgIGN1cnJlbnQgLSAxIDoKICAgICAgZWxlbWVudHMuaW5kZXhPZih0b05vZGUoaSkpOwoKICAgICAgaWYgKGZpbml0ZSkgewogICAgICAgIHJldHVybiBjbGFtcChpLCAwLCBsZW5ndGggLSAxKTsKICAgICAgfQoKICAgICAgaSAlPSBsZW5ndGg7CgogICAgICByZXR1cm4gaSA8IDAgPyBpICsgbGVuZ3RoIDogaTsKICAgIH0KCiAgICBmdW5jdGlvbiBtZW1vaXplKGZuKSB7CiAgICAgIGNvbnN0IGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgICAgcmV0dXJuIChrZXkpID0+IGNhY2hlW2tleV0gfHwgKGNhY2hlW2tleV0gPSBmbihrZXkpKTsKICAgIH0KCiAgICBjbGFzcyBEZWZlcnJlZCB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgICAgIHRoaXMucmVqZWN0ID0gcmVqZWN0OwogICAgICAgICAgdGhpcy5yZXNvbHZlID0gcmVzb2x2ZTsKICAgICAgICB9KTsKICAgICAgfX0KCiAgICBmdW5jdGlvbiBhdHRyKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7CiAgICAgIGlmIChpc09iamVjdChuYW1lKSkgewogICAgICAgIGZvciAoY29uc3Qga2V5IGluIG5hbWUpIHsKICAgICAgICAgIGF0dHIoZWxlbWVudCwga2V5LCBuYW1lW2tleV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHt2YXIgX3RvTm9kZTsKICAgICAgICByZXR1cm4gKF90b05vZGUgPSB0b05vZGUoZWxlbWVudCkpID09IG51bGwgPyB2b2lkIDAgOiBfdG9Ob2RlLmdldEF0dHJpYnV0ZShuYW1lKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmb3IgKGNvbnN0IGVsIG9mIHRvTm9kZXMoZWxlbWVudCkpIHsKICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkgewogICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmNhbGwoZWwsIGF0dHIoZWwsIG5hbWUpKTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgcmVtb3ZlQXR0cihlbCwgbmFtZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGhhc0F0dHIoZWxlbWVudCwgbmFtZSkgewogICAgICByZXR1cm4gdG9Ob2RlcyhlbGVtZW50KS5zb21lKChlbGVtZW50KSA9PiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShuYW1lKSk7CiAgICB9CgogICAgZnVuY3Rpb24gcmVtb3ZlQXR0cihlbGVtZW50LCBuYW1lKSB7CiAgICAgIGNvbnN0IGVsZW1lbnRzID0gdG9Ob2RlcyhlbGVtZW50KTsKICAgICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgbmFtZS5zcGxpdCgnICcpKSB7CiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7CiAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGRhdGEoZWxlbWVudCwgYXR0cmlidXRlKSB7CiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBbYXR0cmlidXRlLCAiZGF0YS0iICsgYXR0cmlidXRlXSkgewogICAgICAgIGlmIChoYXNBdHRyKGVsZW1lbnQsIG5hbWUpKSB7CiAgICAgICAgICByZXR1cm4gYXR0cihlbGVtZW50LCBuYW1lKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBjb25zdCB2b2lkRWxlbWVudHMgPSB7CiAgICAgIGFyZWE6IHRydWUsCiAgICAgIGJhc2U6IHRydWUsCiAgICAgIGJyOiB0cnVlLAogICAgICBjb2w6IHRydWUsCiAgICAgIGVtYmVkOiB0cnVlLAogICAgICBocjogdHJ1ZSwKICAgICAgaW1nOiB0cnVlLAogICAgICBpbnB1dDogdHJ1ZSwKICAgICAga2V5Z2VuOiB0cnVlLAogICAgICBsaW5rOiB0cnVlLAogICAgICBtZW51aXRlbTogdHJ1ZSwKICAgICAgbWV0YTogdHJ1ZSwKICAgICAgcGFyYW06IHRydWUsCiAgICAgIHNvdXJjZTogdHJ1ZSwKICAgICAgdHJhY2s6IHRydWUsCiAgICAgIHdicjogdHJ1ZSB9OwoKICAgIGZ1bmN0aW9uIGlzVm9pZEVsZW1lbnQoZWxlbWVudCkgewogICAgICByZXR1cm4gdG9Ob2RlcyhlbGVtZW50KS5zb21lKChlbGVtZW50KSA9PiB2b2lkRWxlbWVudHNbZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCldKTsKICAgIH0KCiAgICBmdW5jdGlvbiBpc1Zpc2libGUoZWxlbWVudCkgewogICAgICByZXR1cm4gdG9Ob2RlcyhlbGVtZW50KS5zb21lKAogICAgICAoZWxlbWVudCkgPT4gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCBlbGVtZW50LmdldENsaWVudFJlY3RzKCkubGVuZ3RoKTsKCiAgICB9CgogICAgY29uc3Qgc2VsSW5wdXQgPSAnaW5wdXQsc2VsZWN0LHRleHRhcmVhLGJ1dHRvbic7CiAgICBmdW5jdGlvbiBpc0lucHV0KGVsZW1lbnQpIHsKICAgICAgcmV0dXJuIHRvTm9kZXMoZWxlbWVudCkuc29tZSgoZWxlbWVudCkgPT4gbWF0Y2hlcyhlbGVtZW50LCBzZWxJbnB1dCkpOwogICAgfQoKICAgIGNvbnN0IHNlbEZvY3VzYWJsZSA9IHNlbElucHV0ICsgIixhW2hyZWZdLFt0YWJpbmRleF0iOwogICAgZnVuY3Rpb24gaXNGb2N1c2FibGUoZWxlbWVudCkgewogICAgICByZXR1cm4gbWF0Y2hlcyhlbGVtZW50LCBzZWxGb2N1c2FibGUpOwogICAgfQoKICAgIGZ1bmN0aW9uIHBhcmVudChlbGVtZW50KSB7dmFyIF90b05vZGU7CiAgICAgIHJldHVybiAoX3RvTm9kZSA9IHRvTm9kZShlbGVtZW50KSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90b05vZGUucGFyZW50RWxlbWVudDsKICAgIH0KCiAgICBmdW5jdGlvbiBmaWx0ZXIkMShlbGVtZW50LCBzZWxlY3RvcikgewogICAgICByZXR1cm4gdG9Ob2RlcyhlbGVtZW50KS5maWx0ZXIoKGVsZW1lbnQpID0+IG1hdGNoZXMoZWxlbWVudCwgc2VsZWN0b3IpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBtYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9yKSB7CiAgICAgIHJldHVybiB0b05vZGVzKGVsZW1lbnQpLnNvbWUoKGVsZW1lbnQpID0+IGVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikpOwogICAgfQoKICAgIGZ1bmN0aW9uIGNsb3Nlc3QoZWxlbWVudCwgc2VsZWN0b3IpIHsKICAgICAgcmV0dXJuIGlzRWxlbWVudChlbGVtZW50KSA/CiAgICAgIGVsZW1lbnQuY2xvc2VzdChzdGFydHNXaXRoKHNlbGVjdG9yLCAnPicpID8gc2VsZWN0b3Iuc2xpY2UoMSkgOiBzZWxlY3RvcikgOgogICAgICB0b05vZGVzKGVsZW1lbnQpLgogICAgICBtYXAoKGVsZW1lbnQpID0+IGNsb3Nlc3QoZWxlbWVudCwgc2VsZWN0b3IpKS4KICAgICAgZmlsdGVyKEJvb2xlYW4pOwogICAgfQoKICAgIGZ1bmN0aW9uIHdpdGhpbihlbGVtZW50LCBzZWxlY3RvcikgewogICAgICByZXR1cm4gaXNTdHJpbmcoc2VsZWN0b3IpID8KICAgICAgISFjbG9zZXN0KGVsZW1lbnQsIHNlbGVjdG9yKSA6CiAgICAgIHRvTm9kZShzZWxlY3RvcikuY29udGFpbnModG9Ob2RlKGVsZW1lbnQpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBwYXJlbnRzKGVsZW1lbnQsIHNlbGVjdG9yKSB7CiAgICAgIGNvbnN0IGVsZW1lbnRzID0gW107CgogICAgICB3aGlsZSAoZWxlbWVudCA9IHBhcmVudChlbGVtZW50KSkgewogICAgICAgIGlmICghc2VsZWN0b3IgfHwgbWF0Y2hlcyhlbGVtZW50LCBzZWxlY3RvcikpIHsKICAgICAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gZWxlbWVudHM7CiAgICB9CgogICAgZnVuY3Rpb24gY2hpbGRyZW4oZWxlbWVudCwgc2VsZWN0b3IpIHsKICAgICAgZWxlbWVudCA9IHRvTm9kZShlbGVtZW50KTsKICAgICAgY29uc3QgY2hpbGRyZW4gPSBlbGVtZW50ID8gdG9Ob2RlcyhlbGVtZW50LmNoaWxkcmVuKSA6IFtdOwogICAgICByZXR1cm4gc2VsZWN0b3IgPyBmaWx0ZXIkMShjaGlsZHJlbiwgc2VsZWN0b3IpIDogY2hpbGRyZW47CiAgICB9CgogICAgZnVuY3Rpb24gaW5kZXgoZWxlbWVudCwgcmVmKSB7CiAgICAgIHJldHVybiByZWYgPyB0b05vZGVzKGVsZW1lbnQpLmluZGV4T2YodG9Ob2RlKHJlZikpIDogY2hpbGRyZW4ocGFyZW50KGVsZW1lbnQpKS5pbmRleE9mKGVsZW1lbnQpOwogICAgfQoKICAgIGZ1bmN0aW9uIHF1ZXJ5KHNlbGVjdG9yLCBjb250ZXh0KSB7CiAgICAgIHJldHVybiBmaW5kKHNlbGVjdG9yLCBnZXRDb250ZXh0KHNlbGVjdG9yLCBjb250ZXh0KSk7CiAgICB9CgogICAgZnVuY3Rpb24gcXVlcnlBbGwoc2VsZWN0b3IsIGNvbnRleHQpIHsKICAgICAgcmV0dXJuIGZpbmRBbGwoc2VsZWN0b3IsIGdldENvbnRleHQoc2VsZWN0b3IsIGNvbnRleHQpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBmaW5kKHNlbGVjdG9yLCBjb250ZXh0KSB7CiAgICAgIHJldHVybiB0b05vZGUoX3F1ZXJ5KHNlbGVjdG9yLCBjb250ZXh0LCAncXVlcnlTZWxlY3RvcicpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBmaW5kQWxsKHNlbGVjdG9yLCBjb250ZXh0KSB7CiAgICAgIHJldHVybiB0b05vZGVzKF9xdWVyeShzZWxlY3RvciwgY29udGV4dCwgJ3F1ZXJ5U2VsZWN0b3JBbGwnKSk7CiAgICB9CgogICAgY29uc3QgY29udGV4dFNlbGVjdG9yUmUgPSAvKF58W15cXF0sKVxzKlshPit+LV0vOwogICAgY29uc3QgaXNDb250ZXh0U2VsZWN0b3IgPSBtZW1vaXplKChzZWxlY3RvcikgPT4gc2VsZWN0b3IubWF0Y2goY29udGV4dFNlbGVjdG9yUmUpKTsKCiAgICBmdW5jdGlvbiBnZXRDb250ZXh0KHNlbGVjdG9yLCBjb250ZXh0KSB7aWYgKGNvbnRleHQgPT09IHZvaWQgMCkge2NvbnRleHQgPSBkb2N1bWVudDt9CiAgICAgIHJldHVybiBpc1N0cmluZyhzZWxlY3RvcikgJiYgaXNDb250ZXh0U2VsZWN0b3Ioc2VsZWN0b3IpIHx8IGlzRG9jdW1lbnQoY29udGV4dCkgPwogICAgICBjb250ZXh0IDoKICAgICAgY29udGV4dC5vd25lckRvY3VtZW50OwogICAgfQoKICAgIGNvbnN0IGNvbnRleHRTYW5pdGl6ZVJlID0gLyhbIT4rfi1dKSg/PVxzK1shPit+LV18XHMqJCkvZzsKICAgIGNvbnN0IHNhbmF0aXplID0gbWVtb2l6ZSgoc2VsZWN0b3IpID0+IHNlbGVjdG9yLnJlcGxhY2UoY29udGV4dFNhbml0aXplUmUsICckMSAqJykpOwoKICAgIGZ1bmN0aW9uIF9xdWVyeShzZWxlY3RvciwgY29udGV4dCwgcXVlcnlGbikge2lmIChjb250ZXh0ID09PSB2b2lkIDApIHtjb250ZXh0ID0gZG9jdW1lbnQ7fQogICAgICBpZiAoIXNlbGVjdG9yIHx8ICFpc1N0cmluZyhzZWxlY3RvcikpIHsKICAgICAgICByZXR1cm4gc2VsZWN0b3I7CiAgICAgIH0KCiAgICAgIHNlbGVjdG9yID0gc2FuYXRpemUoc2VsZWN0b3IpOwoKICAgICAgaWYgKGlzQ29udGV4dFNlbGVjdG9yKHNlbGVjdG9yKSkgewogICAgICAgIGNvbnN0IHNwbGl0ID0gc3BsaXRTZWxlY3RvcihzZWxlY3Rvcik7CiAgICAgICAgc2VsZWN0b3IgPSAnJzsKICAgICAgICBmb3IgKGxldCBzZWwgb2Ygc3BsaXQpIHsKICAgICAgICAgIGxldCBjdHggPSBjb250ZXh0OwoKICAgICAgICAgIGlmIChzZWxbMF0gPT09ICchJykgewogICAgICAgICAgICBjb25zdCBzZWxlY3RvcnMgPSBzZWwuc3Vic3RyKDEpLnRyaW0oKS5zcGxpdCgnICcpOwogICAgICAgICAgICBjdHggPSBjbG9zZXN0KHBhcmVudChjb250ZXh0KSwgc2VsZWN0b3JzWzBdKTsKICAgICAgICAgICAgc2VsID0gc2VsZWN0b3JzLnNsaWNlKDEpLmpvaW4oJyAnKS50cmltKCk7CiAgICAgICAgICAgIGlmICghc2VsLmxlbmd0aCAmJiBzcGxpdC5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgICByZXR1cm4gY3R4OwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKHNlbFswXSA9PT0gJy0nKSB7CiAgICAgICAgICAgIGNvbnN0IHNlbGVjdG9ycyA9IHNlbC5zdWJzdHIoMSkudHJpbSgpLnNwbGl0KCcgJyk7CiAgICAgICAgICAgIGNvbnN0IHByZXYgPSAoY3R4IHx8IGNvbnRleHQpLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7CiAgICAgICAgICAgIGN0eCA9IG1hdGNoZXMocHJldiwgc2VsLnN1YnN0cigxKSkgPyBwcmV2IDogbnVsbDsKICAgICAgICAgICAgc2VsID0gc2VsZWN0b3JzLnNsaWNlKDEpLmpvaW4oJyAnKTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoY3R4KSB7CiAgICAgICAgICAgIHNlbGVjdG9yICs9ICIiICsgKHNlbGVjdG9yID8gJywnIDogJycpICsgZG9tUGF0aChjdHgpICsgIiAiICsgc2VsOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgY29udGV4dCA9IGRvY3VtZW50OwogICAgICB9CgogICAgICB0cnkgewogICAgICAgIHJldHVybiBjb250ZXh0W3F1ZXJ5Rm5dKHNlbGVjdG9yKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CgogICAgY29uc3Qgc2VsZWN0b3JSZSA9IC8uKj9bXlxcXSg/Oix8JCkvZzsKCiAgICBjb25zdCBzcGxpdFNlbGVjdG9yID0gbWVtb2l6ZSgoc2VsZWN0b3IpID0+CiAgICBzZWxlY3Rvci5tYXRjaChzZWxlY3RvclJlKS5tYXAoKHNlbGVjdG9yKSA9PiBzZWxlY3Rvci5yZXBsYWNlKC8sJC8sICcnKS50cmltKCkpKTsKCgogICAgZnVuY3Rpb24gZG9tUGF0aChlbGVtZW50KSB7CiAgICAgIGNvbnN0IG5hbWVzID0gW107CiAgICAgIHdoaWxlIChlbGVtZW50LnBhcmVudE5vZGUpIHsKICAgICAgICBjb25zdCBpZCA9IGF0dHIoZWxlbWVudCwgJ2lkJyk7CiAgICAgICAgaWYgKGlkKSB7CiAgICAgICAgICBuYW1lcy51bnNoaWZ0KCIjIiArIGVzY2FwZShpZCkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxldCB7IHRhZ05hbWUgfSA9IGVsZW1lbnQ7CiAgICAgICAgICBpZiAodGFnTmFtZSAhPT0gJ0hUTUwnKSB7CiAgICAgICAgICAgIHRhZ05hbWUgKz0gIjpudGgtY2hpbGQoIiArIChpbmRleChlbGVtZW50KSArIDEpICsgIikiOwogICAgICAgICAgfQogICAgICAgICAgbmFtZXMudW5zaGlmdCh0YWdOYW1lKTsKICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBuYW1lcy5qb2luKCcgPiAnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBlc2NhcGUoY3NzKSB7CiAgICAgIHJldHVybiBpc1N0cmluZyhjc3MpID8gQ1NTLmVzY2FwZShjc3MpIDogJyc7CiAgICB9CgogICAgZnVuY3Rpb24gb24oKSB7Zm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7YXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTt9CiAgICAgIGxldCBbdGFyZ2V0cywgdHlwZXMsIHNlbGVjdG9yLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSA9IGZhbHNlXSA9IGdldEFyZ3MoYXJncyk7CgogICAgICBpZiAobGlzdGVuZXIubGVuZ3RoID4gMSkgewogICAgICAgIGxpc3RlbmVyID0gZGV0YWlsKGxpc3RlbmVyKTsKICAgICAgfQoKICAgICAgaWYgKHVzZUNhcHR1cmUgIT0gbnVsbCAmJiB1c2VDYXB0dXJlLnNlbGYpIHsKICAgICAgICBsaXN0ZW5lciA9IHNlbGZGaWx0ZXIobGlzdGVuZXIpOwogICAgICB9CgogICAgICBpZiAoc2VsZWN0b3IpIHsKICAgICAgICBsaXN0ZW5lciA9IGRlbGVnYXRlKHNlbGVjdG9yLCBsaXN0ZW5lcik7CiAgICAgIH0KCiAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykgewogICAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHsKICAgICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiAoKSA9PiBvZmYodGFyZ2V0cywgdHlwZXMsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvZmYoKSB7Zm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7YXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO30KICAgICAgbGV0IFt0YXJnZXRzLCB0eXBlcywsIGxpc3RlbmVyLCB1c2VDYXB0dXJlID0gZmFsc2VdID0gZ2V0QXJncyhhcmdzKTsKICAgICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7CiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykgewogICAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIG9uY2UoKSB7Zm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7YXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO30KICAgICAgY29uc3QgW2VsZW1lbnQsIHR5cGVzLCBzZWxlY3RvciwgbGlzdGVuZXIsIHVzZUNhcHR1cmUgPSBmYWxzZSwgY29uZGl0aW9uXSA9IGdldEFyZ3MoYXJncyk7CiAgICAgIGNvbnN0IG9mZiA9IG9uKAogICAgICBlbGVtZW50LAogICAgICB0eXBlcywKICAgICAgc2VsZWN0b3IsCiAgICAgIChlKSA9PiB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gIWNvbmRpdGlvbiB8fCBjb25kaXRpb24oZSk7CiAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgb2ZmKCk7CiAgICAgICAgICBsaXN0ZW5lcihlLCByZXN1bHQpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgdXNlQ2FwdHVyZSk7CgoKICAgICAgcmV0dXJuIG9mZjsKICAgIH0KCiAgICBmdW5jdGlvbiB0cmlnZ2VyKHRhcmdldHMsIGV2ZW50LCBkZXRhaWwpIHsKICAgICAgcmV0dXJuIHRvRXZlbnRUYXJnZXRzKHRhcmdldHMpLmV2ZXJ5KCh0YXJnZXQpID0+CiAgICAgIHRhcmdldC5kaXNwYXRjaEV2ZW50KGNyZWF0ZUV2ZW50KGV2ZW50LCB0cnVlLCB0cnVlLCBkZXRhaWwpKSk7CgogICAgfQoKICAgIGZ1bmN0aW9uIGNyZWF0ZUV2ZW50KGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUsIGRldGFpbCkge2lmIChidWJibGVzID09PSB2b2lkIDApIHtidWJibGVzID0gdHJ1ZTt9aWYgKGNhbmNlbGFibGUgPT09IHZvaWQgMCkge2NhbmNlbGFibGUgPSBmYWxzZTt9CiAgICAgIGlmIChpc1N0cmluZyhlKSkgewogICAgICAgIGUgPSBuZXcgQ3VzdG9tRXZlbnQoZSwgeyBidWJibGVzLCBjYW5jZWxhYmxlLCBkZXRhaWwgfSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBlOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldEFyZ3MoYXJncykgewogICAgICAvLyBFdmVudCB0YXJnZXRzCiAgICAgIGFyZ3NbMF0gPSB0b0V2ZW50VGFyZ2V0cyhhcmdzWzBdKTsKCiAgICAgIC8vIEV2ZW50IHR5cGVzCiAgICAgIGlmIChpc1N0cmluZyhhcmdzWzFdKSkgewogICAgICAgIGFyZ3NbMV0gPSBhcmdzWzFdLnNwbGl0KCcgJyk7CiAgICAgIH0KCiAgICAgIC8vIERlbGVnYXRlPwogICAgICBpZiAoaXNGdW5jdGlvbihhcmdzWzJdKSkgewogICAgICAgIGFyZ3Muc3BsaWNlKDIsIDAsIGZhbHNlKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGFyZ3M7CiAgICB9CgogICAgZnVuY3Rpb24gZGVsZWdhdGUoc2VsZWN0b3IsIGxpc3RlbmVyKSB7CiAgICAgIHJldHVybiAoZSkgPT4gewogICAgICAgIGNvbnN0IGN1cnJlbnQgPQogICAgICAgIHNlbGVjdG9yWzBdID09PSAnPicgPwogICAgICAgIGZpbmRBbGwoc2VsZWN0b3IsIGUuY3VycmVudFRhcmdldCkuCiAgICAgICAgcmV2ZXJzZSgpLgogICAgICAgIGZpbHRlcigoZWxlbWVudCkgPT4gd2l0aGluKGUudGFyZ2V0LCBlbGVtZW50KSlbMF0gOgogICAgICAgIGNsb3Nlc3QoZS50YXJnZXQsIHNlbGVjdG9yKTsKCiAgICAgICAgaWYgKGN1cnJlbnQpIHsKICAgICAgICAgIGUuY3VycmVudCA9IGN1cnJlbnQ7CiAgICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIGUpOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBkZXRhaWwobGlzdGVuZXIpIHsKICAgICAgcmV0dXJuIChlKSA9PiBpc0FycmF5KGUuZGV0YWlsKSA/IGxpc3RlbmVyKGUsIC4uLmUuZGV0YWlsKSA6IGxpc3RlbmVyKGUpOwogICAgfQoKICAgIGZ1bmN0aW9uIHNlbGZGaWx0ZXIobGlzdGVuZXIpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgaWYgKGUudGFyZ2V0ID09PSBlLmN1cnJlbnRUYXJnZXQgfHwgZS50YXJnZXQgPT09IGUuY3VycmVudCkgewogICAgICAgICAgcmV0dXJuIGxpc3RlbmVyLmNhbGwobnVsbCwgZSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGlzRXZlbnRUYXJnZXQodGFyZ2V0KSB7CiAgICAgIHJldHVybiB0YXJnZXQgJiYgJ2FkZEV2ZW50TGlzdGVuZXInIGluIHRhcmdldDsKICAgIH0KCiAgICBmdW5jdGlvbiB0b0V2ZW50VGFyZ2V0KHRhcmdldCkgewogICAgICByZXR1cm4gaXNFdmVudFRhcmdldCh0YXJnZXQpID8gdGFyZ2V0IDogdG9Ob2RlKHRhcmdldCk7CiAgICB9CgogICAgZnVuY3Rpb24gdG9FdmVudFRhcmdldHModGFyZ2V0KSB7CiAgICAgIHJldHVybiBpc0FycmF5KHRhcmdldCkgPwogICAgICB0YXJnZXQubWFwKHRvRXZlbnRUYXJnZXQpLmZpbHRlcihCb29sZWFuKSA6CiAgICAgIGlzU3RyaW5nKHRhcmdldCkgPwogICAgICBmaW5kQWxsKHRhcmdldCkgOgogICAgICBpc0V2ZW50VGFyZ2V0KHRhcmdldCkgPwogICAgICBbdGFyZ2V0XSA6CiAgICAgIHRvTm9kZXModGFyZ2V0KTsKICAgIH0KCiAgICBmdW5jdGlvbiBpc1RvdWNoKGUpIHsKICAgICAgcmV0dXJuIGUucG9pbnRlclR5cGUgPT09ICd0b3VjaCcgfHwgISFlLnRvdWNoZXM7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0RXZlbnRQb3MoZSkge3ZhciBfZSR0b3VjaGVzLCBfZSRjaGFuZ2VkVG91Y2hlczsKICAgICAgY29uc3QgeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH0gPSAoKF9lJHRvdWNoZXMgPSBlLnRvdWNoZXMpID09IG51bGwgPyB2b2lkIDAgOiBfZSR0b3VjaGVzWzBdKSB8fCAoKF9lJGNoYW5nZWRUb3VjaGVzID0gZS5jaGFuZ2VkVG91Y2hlcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9lJGNoYW5nZWRUb3VjaGVzWzBdKSB8fCBlOwoKICAgICAgcmV0dXJuIHsgeCwgeSB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGFqYXgodXJsLCBvcHRpb25zKSB7CiAgICAgIGNvbnN0IGVudiA9IHsKICAgICAgICBkYXRhOiBudWxsLAogICAgICAgIG1ldGhvZDogJ0dFVCcsCiAgICAgICAgaGVhZGVyczoge30sCiAgICAgICAgeGhyOiBuZXcgWE1MSHR0cFJlcXVlc3QoKSwKICAgICAgICBiZWZvcmVTZW5kOiBub29wLAogICAgICAgIHJlc3BvbnNlVHlwZTogJycsCiAgICAgICAgLi4ub3B0aW9ucyB9OwoKICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLgogICAgICB0aGVuKCgpID0+IGVudi5iZWZvcmVTZW5kKGVudikpLgogICAgICB0aGVuKCgpID0+IHNlbmQodXJsLCBlbnYpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBzZW5kKHVybCwgZW52KSB7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgICAgY29uc3QgeyB4aHIgfSA9IGVudjsKCiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGVudikgewogICAgICAgICAgaWYgKHByb3AgaW4geGhyKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgeGhyW3Byb3BdID0gZW52W3Byb3BdOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgLy8gbm9vcAogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB4aHIub3BlbihlbnYubWV0aG9kLnRvVXBwZXJDYXNlKCksIHVybCk7CgogICAgICAgIGZvciAoY29uc3QgaGVhZGVyIGluIGVudi5oZWFkZXJzKSB7CiAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihoZWFkZXIsIGVudi5oZWFkZXJzW2hlYWRlcl0pOwogICAgICAgIH0KCiAgICAgICAgb24oeGhyLCAnbG9hZCcsICgpID0+IHsKICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAwIHx8IHhoci5zdGF0dXMgPj0gMjAwICYmIHhoci5zdGF0dXMgPCAzMDAgfHwgeGhyLnN0YXR1cyA9PT0gMzA0KSB7CiAgICAgICAgICAgIHJlc29sdmUoeGhyKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlamVjdCgKICAgICAgICAgICAgYXNzaWduKEVycm9yKHhoci5zdGF0dXNUZXh0KSwgewogICAgICAgICAgICAgIHhociwKICAgICAgICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMgfSkpOwoKCiAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIG9uKHhociwgJ2Vycm9yJywgKCkgPT4gcmVqZWN0KGFzc2lnbihFcnJvcignTmV0d29yayBFcnJvcicpLCB7IHhociB9KSkpOwogICAgICAgIG9uKHhociwgJ3RpbWVvdXQnLCAoKSA9PiByZWplY3QoYXNzaWduKEVycm9yKCdOZXR3b3JrIFRpbWVvdXQnKSwgeyB4aHIgfSkpKTsKCiAgICAgICAgeGhyLnNlbmQoZW52LmRhdGEpOwogICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRJbWFnZShzcmMsIHNyY3NldCwgc2l6ZXMpIHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTsKCiAgICAgICAgaW1nLm9uZXJyb3IgPSAoZSkgPT4gewogICAgICAgICAgcmVqZWN0KGUpOwogICAgICAgIH07CiAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHsKICAgICAgICAgIHJlc29sdmUoaW1nKTsKICAgICAgICB9OwoKICAgICAgICBzaXplcyAmJiAoaW1nLnNpemVzID0gc2l6ZXMpOwogICAgICAgIHNyY3NldCAmJiAoaW1nLnNyY3NldCA9IHNyY3NldCk7CiAgICAgICAgaW1nLnNyYyA9IHNyYzsKICAgICAgfSk7CiAgICB9CgogICAgY29uc3QgY3NzTnVtYmVyID0gewogICAgICAnYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCc6IHRydWUsCiAgICAgICdjb2x1bW4tY291bnQnOiB0cnVlLAogICAgICAnZmlsbC1vcGFjaXR5JzogdHJ1ZSwKICAgICAgJ2ZsZXgtZ3Jvdyc6IHRydWUsCiAgICAgICdmbGV4LXNocmluayc6IHRydWUsCiAgICAgICdmb250LXdlaWdodCc6IHRydWUsCiAgICAgICdsaW5lLWhlaWdodCc6IHRydWUsCiAgICAgIG9wYWNpdHk6IHRydWUsCiAgICAgIG9yZGVyOiB0cnVlLAogICAgICBvcnBoYW5zOiB0cnVlLAogICAgICAnc3Ryb2tlLWRhc2hhcnJheSc6IHRydWUsCiAgICAgICdzdHJva2UtZGFzaG9mZnNldCc6IHRydWUsCiAgICAgIHdpZG93czogdHJ1ZSwKICAgICAgJ3otaW5kZXgnOiB0cnVlLAogICAgICB6b29tOiB0cnVlIH07CgoKICAgIGZ1bmN0aW9uIGNzcyhlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUsIHByaW9yaXR5KSB7aWYgKHByaW9yaXR5ID09PSB2b2lkIDApIHtwcmlvcml0eSA9ICcnO30KICAgICAgY29uc3QgZWxlbWVudHMgPSB0b05vZGVzKGVsZW1lbnQpOwogICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHsKICAgICAgICBpZiAoaXNTdHJpbmcocHJvcGVydHkpKSB7CiAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BOYW1lKHByb3BlcnR5KTsKCiAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKSB7CiAgICAgICAgICAgIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgKICAgICAgICAgICAgcHJvcGVydHksCiAgICAgICAgICAgIGlzTnVtZXJpYyh2YWx1ZSkgJiYgIWNzc051bWJlcltwcm9wZXJ0eV0gPwogICAgICAgICAgICB2YWx1ZSArICJweCIgOgogICAgICAgICAgICB2YWx1ZSB8fCBpc051bWJlcih2YWx1ZSkgPwogICAgICAgICAgICB2YWx1ZSA6CiAgICAgICAgICAgICcnLAogICAgICAgICAgICBwcmlvcml0eSk7CgogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShwcm9wZXJ0eSkpIHsKICAgICAgICAgIGNvbnN0IHByb3BzID0ge307CiAgICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcGVydHkpIHsKICAgICAgICAgICAgcHJvcHNbcHJvcF0gPSBjc3MoZWxlbWVudCwgcHJvcCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcHJvcHM7CiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChwcm9wZXJ0eSkpIHsKICAgICAgICAgIHByaW9yaXR5ID0gdmFsdWU7CiAgICAgICAgICBlYWNoKHByb3BlcnR5LCAodmFsdWUsIHByb3BlcnR5KSA9PiBjc3MoZWxlbWVudCwgcHJvcGVydHksIHZhbHVlLCBwcmlvcml0eSkpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZWxlbWVudHNbMF07CiAgICB9CgogICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNkb20tY3Nzc3R5bGVkZWNsYXJhdGlvbi1zZXRwcm9wZXJ0eQogICAgY29uc3QgcHJvcE5hbWUgPSBtZW1vaXplKChuYW1lKSA9PiB2ZW5kb3JQcm9wTmFtZShuYW1lKSk7CgogICAgZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUobmFtZSkgewogICAgICBpZiAoc3RhcnRzV2l0aChuYW1lLCAnLS0nKSkgewogICAgICAgIHJldHVybiBuYW1lOwogICAgICB9CgogICAgICBuYW1lID0gaHlwaGVuYXRlKG5hbWUpOwoKICAgICAgY29uc3QgeyBzdHlsZSB9ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OwoKICAgICAgaWYgKG5hbWUgaW4gc3R5bGUpIHsKICAgICAgICByZXR1cm4gbmFtZTsKICAgICAgfQoKICAgICAgZm9yIChjb25zdCBwcmVmaXggb2YgWyd3ZWJraXQnLCAnbW96J10pIHsKICAgICAgICBjb25zdCBwcmVmaXhlZE5hbWUgPSAiLSIgKyBwcmVmaXggKyAiLSIgKyBuYW1lOwogICAgICAgIGlmIChwcmVmaXhlZE5hbWUgaW4gc3R5bGUpIHsKICAgICAgICAgIHJldHVybiBwcmVmaXhlZE5hbWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gYWRkQ2xhc3MoZWxlbWVudCkge2ZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHthcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTt9CiAgICAgIGFwcGx5JDEoZWxlbWVudCwgYXJncywgJ2FkZCcpOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsZW1lbnQpIHtmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge2FyZ3NbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07fQogICAgICBhcHBseSQxKGVsZW1lbnQsIGFyZ3MsICdyZW1vdmUnKTsKICAgIH0KCiAgICBmdW5jdGlvbiByZW1vdmVDbGFzc2VzKGVsZW1lbnQsIGNscykgewogICAgICBhdHRyKGVsZW1lbnQsICdjbGFzcycsICh2YWx1ZSkgPT4KICAgICAgKHZhbHVlIHx8ICcnKS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcYiIgKyBjbHMgKyAiXFxiXFxzPyIsICdnJyksICcnKSk7CgogICAgfQoKICAgIGZ1bmN0aW9uIHJlcGxhY2VDbGFzcyhlbGVtZW50KSB7CiAgICAgIChhcmd1bWVudHMubGVuZ3RoIDw9IDEgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbMV0pICYmIHJlbW92ZUNsYXNzKGVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPD0gMSA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1sxXSk7CiAgICAgIChhcmd1bWVudHMubGVuZ3RoIDw9IDIgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbMl0pICYmIGFkZENsYXNzKGVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPD0gMiA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1syXSk7CiAgICB9CgogICAgZnVuY3Rpb24gaGFzQ2xhc3MoZWxlbWVudCwgY2xzKSB7CiAgICAgIFtjbHNdID0gZ2V0Q2xhc3NlcyhjbHMpOwogICAgICByZXR1cm4gISFjbHMgJiYgdG9Ob2RlcyhlbGVtZW50KS5zb21lKChub2RlKSA9PiBub2RlLmNsYXNzTGlzdC5jb250YWlucyhjbHMpKTsKICAgIH0KCiAgICBmdW5jdGlvbiB0b2dnbGVDbGFzcyhlbGVtZW50LCBjbHMsIGZvcmNlKSB7CiAgICAgIGNvbnN0IGNsYXNzZXMgPSBnZXRDbGFzc2VzKGNscyk7CgogICAgICBpZiAoIWlzVW5kZWZpbmVkKGZvcmNlKSkgewogICAgICAgIGZvcmNlID0gISFmb3JjZTsKICAgICAgfQoKICAgICAgZm9yIChjb25zdCBub2RlIG9mIHRvTm9kZXMoZWxlbWVudCkpIHsKICAgICAgICBmb3IgKGNvbnN0IGNscyBvZiBjbGFzc2VzKSB7CiAgICAgICAgICBub2RlLmNsYXNzTGlzdC50b2dnbGUoY2xzLCBmb3JjZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gYXBwbHkkMShlbGVtZW50LCBhcmdzLCBmbikgewogICAgICBhcmdzID0gYXJncy5yZWR1Y2UoKGFyZ3MsIGFyZykgPT4gYXJncy5jb25jYXQoZ2V0Q2xhc3NlcyhhcmcpKSwgW10pOwoKICAgICAgZm9yIChjb25zdCBub2RlIG9mIHRvTm9kZXMoZWxlbWVudCkpIHsKICAgICAgICBub2RlLmNsYXNzTGlzdFtmbl0oLi4uYXJncyk7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBnZXRDbGFzc2VzKHN0cikgewogICAgICByZXR1cm4gU3RyaW5nKHN0cikuc3BsaXQoL1xzfCwvKS5maWx0ZXIoQm9vbGVhbik7CiAgICB9CgogICAgZnVuY3Rpb24gdHJhbnNpdGlvbihlbGVtZW50LCBwcm9wcywgZHVyYXRpb24sIHRpbWluZykge2lmIChkdXJhdGlvbiA9PT0gdm9pZCAwKSB7ZHVyYXRpb24gPSA0MDA7fWlmICh0aW1pbmcgPT09IHZvaWQgMCkge3RpbWluZyA9ICdsaW5lYXInO30KICAgICAgZHVyYXRpb24gPSBNYXRoLnJvdW5kKGR1cmF0aW9uKTsKICAgICAgcmV0dXJuIFByb21pc2UuYWxsKAogICAgICB0b05vZGVzKGVsZW1lbnQpLm1hcCgKICAgICAgKGVsZW1lbnQpID0+CiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gcHJvcHMpIHsKICAgICAgICAgIGNvbnN0IHZhbHVlID0gY3NzKGVsZW1lbnQsIG5hbWUpOwogICAgICAgICAgaWYgKHZhbHVlID09PSAnJykgewogICAgICAgICAgICBjc3MoZWxlbWVudCwgbmFtZSwgdmFsdWUpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRyaWdnZXIoZWxlbWVudCwgJ3RyYW5zaXRpb25lbmQnKSwgZHVyYXRpb24pOwoKICAgICAgICBvbmNlKAogICAgICAgIGVsZW1lbnQsCiAgICAgICAgJ3RyYW5zaXRpb25lbmQgdHJhbnNpdGlvbmNhbmNlbGVkJywKICAgICAgICAoX3JlZikgPT4ge2xldCB7IHR5cGUgfSA9IF9yZWY7CiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpOwogICAgICAgICAgcmVtb3ZlQ2xhc3MoZWxlbWVudCwgJ3VrLXRyYW5zaXRpb24nKTsKICAgICAgICAgIGNzcyhlbGVtZW50LCB7CiAgICAgICAgICAgIHRyYW5zaXRpb25Qcm9wZXJ0eTogJycsCiAgICAgICAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogJycsCiAgICAgICAgICAgIHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjogJycgfSk7CgogICAgICAgICAgdHlwZSA9PT0gJ3RyYW5zaXRpb25jYW5jZWxlZCcgPyByZWplY3QoKSA6IHJlc29sdmUoZWxlbWVudCk7CiAgICAgICAgfSwKICAgICAgICB7IHNlbGY6IHRydWUgfSk7CgoKICAgICAgICBhZGRDbGFzcyhlbGVtZW50LCAndWstdHJhbnNpdGlvbicpOwogICAgICAgIGNzcyhlbGVtZW50LCB7CiAgICAgICAgICB0cmFuc2l0aW9uUHJvcGVydHk6IE9iamVjdC5rZXlzKHByb3BzKS5tYXAocHJvcE5hbWUpLmpvaW4oJywnKSwKICAgICAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogZHVyYXRpb24gKyAibXMiLAogICAgICAgICAgdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOiB0aW1pbmcsCiAgICAgICAgICAuLi5wcm9wcyB9KTsKCiAgICAgIH0pKSk7CgoKICAgIH0KCiAgICBjb25zdCBUcmFuc2l0aW9uID0gewogICAgICBzdGFydDogdHJhbnNpdGlvbiwKCiAgICAgIGFzeW5jIHN0b3AoZWxlbWVudCkgewogICAgICAgIHRyaWdnZXIoZWxlbWVudCwgJ3RyYW5zaXRpb25lbmQnKTsKICAgICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKTsKICAgICAgfSwKCiAgICAgIGFzeW5jIGNhbmNlbChlbGVtZW50KSB7CiAgICAgICAgdHJpZ2dlcihlbGVtZW50LCAndHJhbnNpdGlvbmNhbmNlbGVkJyk7CiAgICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCk7CiAgICAgIH0sCgogICAgICBpblByb2dyZXNzKGVsZW1lbnQpIHsKICAgICAgICByZXR1cm4gaGFzQ2xhc3MoZWxlbWVudCwgJ3VrLXRyYW5zaXRpb24nKTsKICAgICAgfSB9OwoKCiAgICBjb25zdCBhbmltYXRpb25QcmVmaXggPSAndWstYW5pbWF0aW9uLSc7CgogICAgZnVuY3Rpb24gYW5pbWF0ZSQyKGVsZW1lbnQsIGFuaW1hdGlvbiwgZHVyYXRpb24sIG9yaWdpbiwgb3V0KSB7aWYgKGR1cmF0aW9uID09PSB2b2lkIDApIHtkdXJhdGlvbiA9IDIwMDt9CiAgICAgIHJldHVybiBQcm9taXNlLmFsbCgKICAgICAgdG9Ob2RlcyhlbGVtZW50KS5tYXAoCiAgICAgIChlbGVtZW50KSA9PgogICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgICAgdHJpZ2dlcihlbGVtZW50LCAnYW5pbWF0aW9uY2FuY2VsZWQnKTsKICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdHJpZ2dlcihlbGVtZW50LCAnYW5pbWF0aW9uZW5kJyksIGR1cmF0aW9uKTsKCiAgICAgICAgb25jZSgKICAgICAgICBlbGVtZW50LAogICAgICAgICdhbmltYXRpb25lbmQgYW5pbWF0aW9uY2FuY2VsZWQnLAogICAgICAgIChfcmVmMikgPT4ge2xldCB7IHR5cGUgfSA9IF9yZWYyOwogICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTsKCiAgICAgICAgICB0eXBlID09PSAnYW5pbWF0aW9uY2FuY2VsZWQnID8gcmVqZWN0KCkgOiByZXNvbHZlKGVsZW1lbnQpOwoKICAgICAgICAgIGNzcyhlbGVtZW50LCAnYW5pbWF0aW9uRHVyYXRpb24nLCAnJyk7CiAgICAgICAgICByZW1vdmVDbGFzc2VzKGVsZW1lbnQsIGFuaW1hdGlvblByZWZpeCArICJcXFMqIik7CiAgICAgICAgfSwKICAgICAgICB7IHNlbGY6IHRydWUgfSk7CgoKICAgICAgICBjc3MoZWxlbWVudCwgJ2FuaW1hdGlvbkR1cmF0aW9uJywgZHVyYXRpb24gKyAibXMiKTsKICAgICAgICBhZGRDbGFzcyhlbGVtZW50LCBhbmltYXRpb24sIGFuaW1hdGlvblByZWZpeCArIChvdXQgPyAnbGVhdmUnIDogJ2VudGVyJykpOwoKICAgICAgICBpZiAoc3RhcnRzV2l0aChhbmltYXRpb24sIGFuaW1hdGlvblByZWZpeCkpIHsKICAgICAgICAgIG9yaWdpbiAmJiBhZGRDbGFzcyhlbGVtZW50LCAidWstdHJhbnNmb3JtLW9yaWdpbi0iICsgb3JpZ2luKTsKICAgICAgICAgIG91dCAmJiBhZGRDbGFzcyhlbGVtZW50LCBhbmltYXRpb25QcmVmaXggKyAicmV2ZXJzZSIpOwogICAgICAgIH0KICAgICAgfSkpKTsKCgogICAgfQoKICAgIGNvbnN0IGluUHJvZ3Jlc3NSZSA9IG5ldyBSZWdFeHAoYW5pbWF0aW9uUHJlZml4ICsgIihlbnRlcnxsZWF2ZSkiKTsKCiAgICBjb25zdCBBbmltYXRpb24gPSB7CiAgICAgIGluOiBhbmltYXRlJDIsCgogICAgICBvdXQoZWxlbWVudCwgYW5pbWF0aW9uLCBkdXJhdGlvbiwgb3JpZ2luKSB7CiAgICAgICAgcmV0dXJuIGFuaW1hdGUkMihlbGVtZW50LCBhbmltYXRpb24sIGR1cmF0aW9uLCBvcmlnaW4sIHRydWUpOwogICAgICB9LAoKICAgICAgaW5Qcm9ncmVzcyhlbGVtZW50KSB7CiAgICAgICAgcmV0dXJuIGluUHJvZ3Jlc3NSZS50ZXN0KGF0dHIoZWxlbWVudCwgJ2NsYXNzJykpOwogICAgICB9LAoKICAgICAgY2FuY2VsKGVsZW1lbnQpIHsKICAgICAgICB0cmlnZ2VyKGVsZW1lbnQsICdhbmltYXRpb25jYW5jZWxlZCcpOwogICAgICB9IH07CgogICAgY29uc3QgZGlycyQxID0gewogICAgICB3aWR0aDogWydsZWZ0JywgJ3JpZ2h0J10sCiAgICAgIGhlaWdodDogWyd0b3AnLCAnYm90dG9tJ10gfTsKCgogICAgZnVuY3Rpb24gZGltZW5zaW9ucyQxKGVsZW1lbnQpIHsKICAgICAgY29uc3QgcmVjdCA9IGlzRWxlbWVudChlbGVtZW50KSA/CiAgICAgIHRvTm9kZShlbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6CiAgICAgIHsgaGVpZ2h0OiBoZWlnaHQoZWxlbWVudCksIHdpZHRoOiB3aWR0aChlbGVtZW50KSwgdG9wOiAwLCBsZWZ0OiAwIH07CgogICAgICByZXR1cm4gewogICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsCiAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsCiAgICAgICAgdG9wOiByZWN0LnRvcCwKICAgICAgICBsZWZ0OiByZWN0LmxlZnQsCiAgICAgICAgYm90dG9tOiByZWN0LnRvcCArIHJlY3QuaGVpZ2h0LAogICAgICAgIHJpZ2h0OiByZWN0LmxlZnQgKyByZWN0LndpZHRoIH07CgogICAgfQoKICAgIGZ1bmN0aW9uIG9mZnNldChlbGVtZW50LCBjb29yZGluYXRlcykgewogICAgICBjb25zdCBjdXJyZW50T2Zmc2V0ID0gZGltZW5zaW9ucyQxKGVsZW1lbnQpOwoKICAgICAgaWYgKGVsZW1lbnQpIHsKICAgICAgICBjb25zdCB7IHNjcm9sbFksIHNjcm9sbFggfSA9IHRvV2luZG93KGVsZW1lbnQpOwogICAgICAgIGNvbnN0IG9mZnNldEJ5ID0geyBoZWlnaHQ6IHNjcm9sbFksIHdpZHRoOiBzY3JvbGxYIH07CgogICAgICAgIGZvciAoY29uc3QgZGlyIGluIGRpcnMkMSkgewogICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGRpcnMkMVtkaXJdKSB7CiAgICAgICAgICAgIGN1cnJlbnRPZmZzZXRbcHJvcF0gKz0gb2Zmc2V0QnlbZGlyXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmICghY29vcmRpbmF0ZXMpIHsKICAgICAgICByZXR1cm4gY3VycmVudE9mZnNldDsKICAgICAgfQoKICAgICAgY29uc3QgcG9zID0gY3NzKGVsZW1lbnQsICdwb3NpdGlvbicpOwoKICAgICAgZWFjaChjc3MoZWxlbWVudCwgWydsZWZ0JywgJ3RvcCddKSwgKHZhbHVlLCBwcm9wKSA9PgogICAgICBjc3MoCiAgICAgIGVsZW1lbnQsCiAgICAgIHByb3AsCiAgICAgIGNvb3JkaW5hdGVzW3Byb3BdIC0KICAgICAgY3VycmVudE9mZnNldFtwcm9wXSArCiAgICAgIHRvRmxvYXQocG9zID09PSAnYWJzb2x1dGUnICYmIHZhbHVlID09PSAnYXV0bycgPyBwb3NpdGlvbihlbGVtZW50KVtwcm9wXSA6IHZhbHVlKSkpOwoKCiAgICB9CgogICAgZnVuY3Rpb24gcG9zaXRpb24oZWxlbWVudCkgewogICAgICBsZXQgeyB0b3AsIGxlZnQgfSA9IG9mZnNldChlbGVtZW50KTsKCiAgICAgIGNvbnN0IHsKICAgICAgICBvd25lckRvY3VtZW50OiB7IGJvZHksIGRvY3VtZW50RWxlbWVudCB9LAogICAgICAgIG9mZnNldFBhcmVudCB9ID0KICAgICAgdG9Ob2RlKGVsZW1lbnQpOwogICAgICBsZXQgcGFyZW50ID0gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDsKCiAgICAgIHdoaWxlICgKICAgICAgcGFyZW50ICYmICgKICAgICAgcGFyZW50ID09PSBib2R5IHx8IHBhcmVudCA9PT0gZG9jdW1lbnRFbGVtZW50KSAmJgogICAgICBjc3MocGFyZW50LCAncG9zaXRpb24nKSA9PT0gJ3N0YXRpYycpCiAgICAgIHsKICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTsKICAgICAgfQoKICAgICAgaWYgKGlzRWxlbWVudChwYXJlbnQpKSB7CiAgICAgICAgY29uc3QgcGFyZW50T2Zmc2V0ID0gb2Zmc2V0KHBhcmVudCk7CiAgICAgICAgdG9wIC09IHBhcmVudE9mZnNldC50b3AgKyB0b0Zsb2F0KGNzcyhwYXJlbnQsICdib3JkZXJUb3BXaWR0aCcpKTsKICAgICAgICBsZWZ0IC09IHBhcmVudE9mZnNldC5sZWZ0ICsgdG9GbG9hdChjc3MocGFyZW50LCAnYm9yZGVyTGVmdFdpZHRoJykpOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIHRvcDogdG9wIC0gdG9GbG9hdChjc3MoZWxlbWVudCwgJ21hcmdpblRvcCcpKSwKICAgICAgICBsZWZ0OiBsZWZ0IC0gdG9GbG9hdChjc3MoZWxlbWVudCwgJ21hcmdpbkxlZnQnKSkgfTsKCiAgICB9CgogICAgZnVuY3Rpb24gb2Zmc2V0UG9zaXRpb24oZWxlbWVudCkgewogICAgICBlbGVtZW50ID0gdG9Ob2RlKGVsZW1lbnQpOwoKICAgICAgY29uc3Qgb2Zmc2V0ID0gW2VsZW1lbnQub2Zmc2V0VG9wLCBlbGVtZW50Lm9mZnNldExlZnRdOwoKICAgICAgd2hpbGUgKGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudCkgewogICAgICAgIG9mZnNldFswXSArPSBlbGVtZW50Lm9mZnNldFRvcCArIHRvRmxvYXQoY3NzKGVsZW1lbnQsICJib3JkZXJUb3BXaWR0aCIpKTsKICAgICAgICBvZmZzZXRbMV0gKz0gZWxlbWVudC5vZmZzZXRMZWZ0ICsgdG9GbG9hdChjc3MoZWxlbWVudCwgImJvcmRlckxlZnRXaWR0aCIpKTsKCiAgICAgICAgaWYgKGNzcyhlbGVtZW50LCAncG9zaXRpb24nKSA9PT0gJ2ZpeGVkJykgewogICAgICAgICAgY29uc3Qgd2luID0gdG9XaW5kb3coZWxlbWVudCk7CiAgICAgICAgICBvZmZzZXRbMF0gKz0gd2luLnNjcm9sbFk7CiAgICAgICAgICBvZmZzZXRbMV0gKz0gd2luLnNjcm9sbFg7CiAgICAgICAgICByZXR1cm4gb2Zmc2V0OwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIG9mZnNldDsKICAgIH0KCiAgICBjb25zdCBoZWlnaHQgPSBkaW1lbnNpb24oJ2hlaWdodCcpOwogICAgY29uc3Qgd2lkdGggPSBkaW1lbnNpb24oJ3dpZHRoJyk7CgogICAgZnVuY3Rpb24gZGltZW5zaW9uKHByb3ApIHsKICAgICAgY29uc3QgcHJvcE5hbWUgPSB1Y2ZpcnN0KHByb3ApOwogICAgICByZXR1cm4gKGVsZW1lbnQsIHZhbHVlKSA9PiB7CiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkgewogICAgICAgICAgaWYgKGlzV2luZG93KGVsZW1lbnQpKSB7CiAgICAgICAgICAgIHJldHVybiBlbGVtZW50WyJpbm5lciIgKyBwcm9wTmFtZV07CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKGlzRG9jdW1lbnQoZWxlbWVudCkpIHsKICAgICAgICAgICAgY29uc3QgZG9jID0gZWxlbWVudC5kb2N1bWVudEVsZW1lbnQ7CiAgICAgICAgICAgIHJldHVybiBNYXRoLm1heChkb2NbIm9mZnNldCIgKyBwcm9wTmFtZV0sIGRvY1sic2Nyb2xsIiArIHByb3BOYW1lXSk7CiAgICAgICAgICB9CgogICAgICAgICAgZWxlbWVudCA9IHRvTm9kZShlbGVtZW50KTsKCiAgICAgICAgICB2YWx1ZSA9IGNzcyhlbGVtZW50LCBwcm9wKTsKICAgICAgICAgIHZhbHVlID0gdmFsdWUgPT09ICdhdXRvJyA/IGVsZW1lbnRbIm9mZnNldCIgKyBwcm9wTmFtZV0gOiB0b0Zsb2F0KHZhbHVlKSB8fCAwOwoKICAgICAgICAgIHJldHVybiB2YWx1ZSAtIGJveE1vZGVsQWRqdXN0KGVsZW1lbnQsIHByb3ApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gY3NzKAogICAgICAgICAgZWxlbWVudCwKICAgICAgICAgIHByb3AsCiAgICAgICAgICAhdmFsdWUgJiYgdmFsdWUgIT09IDAgPyAnJyA6ICt2YWx1ZSArIGJveE1vZGVsQWRqdXN0KGVsZW1lbnQsIHByb3ApICsgJ3B4Jyk7CgogICAgICAgIH0KICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBib3hNb2RlbEFkanVzdChlbGVtZW50LCBwcm9wLCBzaXppbmcpIHtpZiAoc2l6aW5nID09PSB2b2lkIDApIHtzaXppbmcgPSAnYm9yZGVyLWJveCc7fQogICAgICByZXR1cm4gY3NzKGVsZW1lbnQsICdib3hTaXppbmcnKSA9PT0gc2l6aW5nID8KICAgICAgZGlycyQxW3Byb3BdLgogICAgICBtYXAodWNmaXJzdCkuCiAgICAgIHJlZHVjZSgKICAgICAgKHZhbHVlLCBwcm9wKSA9PgogICAgICB2YWx1ZSArCiAgICAgIHRvRmxvYXQoY3NzKGVsZW1lbnQsICJwYWRkaW5nIiArIHByb3ApKSArCiAgICAgIHRvRmxvYXQoY3NzKGVsZW1lbnQsICJib3JkZXIiICsgcHJvcCArICJXaWR0aCIpKSwKICAgICAgMCkgOgoKICAgICAgMDsKICAgIH0KCiAgICBmdW5jdGlvbiBmbGlwUG9zaXRpb24ocG9zKSB7CiAgICAgIGZvciAoY29uc3QgZGlyIGluIGRpcnMkMSkgewogICAgICAgIGZvciAoY29uc3QgaSBpbiBkaXJzJDFbZGlyXSkgewogICAgICAgICAgaWYgKGRpcnMkMVtkaXJdW2ldID09PSBwb3MpIHsKICAgICAgICAgICAgcmV0dXJuIGRpcnMkMVtkaXJdWzEgLSBpXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHBvczsKICAgIH0KCiAgICBmdW5jdGlvbiB0b1B4KHZhbHVlLCBwcm9wZXJ0eSwgZWxlbWVudCwgb2Zmc2V0RGltKSB7aWYgKHByb3BlcnR5ID09PSB2b2lkIDApIHtwcm9wZXJ0eSA9ICd3aWR0aCc7fWlmIChlbGVtZW50ID09PSB2b2lkIDApIHtlbGVtZW50ID0gd2luZG93O31pZiAob2Zmc2V0RGltID09PSB2b2lkIDApIHtvZmZzZXREaW0gPSBmYWxzZTt9CiAgICAgIGlmICghaXNTdHJpbmcodmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIHRvRmxvYXQodmFsdWUpOwogICAgICB9CgogICAgICByZXR1cm4gcGFyc2VDYWxjKHZhbHVlKS5yZWR1Y2UoKHJlc3VsdCwgdmFsdWUpID0+IHsKICAgICAgICBjb25zdCB1bml0ID0gcGFyc2VVbml0KHZhbHVlKTsKICAgICAgICBpZiAodW5pdCkgewogICAgICAgICAgdmFsdWUgPSBwZXJjZW50KAogICAgICAgICAgdW5pdCA9PT0gJ3ZoJyA/CiAgICAgICAgICBoZWlnaHQodG9XaW5kb3coZWxlbWVudCkpIDoKICAgICAgICAgIHVuaXQgPT09ICd2dycgPwogICAgICAgICAgd2lkdGgodG9XaW5kb3coZWxlbWVudCkpIDoKICAgICAgICAgIG9mZnNldERpbSA/CiAgICAgICAgICBlbGVtZW50WyJvZmZzZXQiICsgdWNmaXJzdChwcm9wZXJ0eSldIDoKICAgICAgICAgIGRpbWVuc2lvbnMkMShlbGVtZW50KVtwcm9wZXJ0eV0sCiAgICAgICAgICB2YWx1ZSk7CgogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJlc3VsdCArIHRvRmxvYXQodmFsdWUpOwogICAgICB9LCAwKTsKICAgIH0KCiAgICBjb25zdCBjYWxjUmUgPSAvLT9cZCsoPzpcLlxkKyk/KD86dlt3aF18JXxweCk/L2c7CiAgICBjb25zdCBwYXJzZUNhbGMgPSBtZW1vaXplKChjYWxjKSA9PiBjYWxjLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMvZywgJycpLm1hdGNoKGNhbGNSZSkgfHwgW10pOwogICAgY29uc3QgdW5pdFJlJDEgPSAvKD86dltod118JSkkLzsKICAgIGNvbnN0IHBhcnNlVW5pdCA9IG1lbW9pemUoKHN0cikgPT4gKHN0ci5tYXRjaCh1bml0UmUkMSkgfHwgW10pWzBdKTsKCiAgICBmdW5jdGlvbiBwZXJjZW50KGJhc2UsIHZhbHVlKSB7CiAgICAgIHJldHVybiBiYXNlICogdG9GbG9hdCh2YWx1ZSkgLyAxMDA7CiAgICB9CgogICAgZnVuY3Rpb24gcmVhZHkoZm4pIHsKICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgIT09ICdsb2FkaW5nJykgewogICAgICAgIGZuKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBvbmNlKGRvY3VtZW50LCAnRE9NQ29udGVudExvYWRlZCcsIGZuKTsKICAgIH0KCiAgICBmdW5jdGlvbiBpc1RhZyhlbGVtZW50LCB0YWdOYW1lKSB7dmFyIF9lbGVtZW50JHRhZ05hbWU7CiAgICAgIHJldHVybiAoZWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogKF9lbGVtZW50JHRhZ05hbWUgPSBlbGVtZW50LnRhZ05hbWUpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCR0YWdOYW1lLnRvTG93ZXJDYXNlKCkpID09PSB0YWdOYW1lLnRvTG93ZXJDYXNlKCk7CiAgICB9CgogICAgZnVuY3Rpb24gZW1wdHkoZWxlbWVudCkgewogICAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnJzsKICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CgogICAgZnVuY3Rpb24gaHRtbChwYXJlbnQsIGh0bWwpIHsKICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKGh0bWwpID8gJChwYXJlbnQpLmlubmVySFRNTCA6IGFwcGVuZChlbXB0eShwYXJlbnQpLCBodG1sKTsKICAgIH0KCiAgICBjb25zdCBwcmVwZW5kID0gYXBwbHlGbigncHJlcGVuZCcpOwogICAgY29uc3QgYXBwZW5kID0gYXBwbHlGbignYXBwZW5kJyk7CiAgICBjb25zdCBiZWZvcmUgPSBhcHBseUZuKCdiZWZvcmUnKTsKICAgIGNvbnN0IGFmdGVyID0gYXBwbHlGbignYWZ0ZXInKTsKCiAgICBmdW5jdGlvbiBhcHBseUZuKGZuKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiAocmVmLCBlbGVtZW50KSB7dmFyIF8kOwogICAgICAgIGNvbnN0IG5vZGVzID0gdG9Ob2Rlcyhpc1N0cmluZyhlbGVtZW50KSA/IGZyYWdtZW50KGVsZW1lbnQpIDogZWxlbWVudCk7CiAgICAgICAgKF8kID0gJChyZWYpKSA9PSBudWxsID8gdm9pZCAwIDogXyRbZm5dKC4uLm5vZGVzKTsKICAgICAgICByZXR1cm4gdW53cmFwU2luZ2xlKG5vZGVzKTsKICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiByZW1vdmUkMShlbGVtZW50KSB7CiAgICAgIHRvTm9kZXMoZWxlbWVudCkuZm9yRWFjaCgoZWxlbWVudCkgPT4gZWxlbWVudC5yZW1vdmUoKSk7CiAgICB9CgogICAgZnVuY3Rpb24gd3JhcEFsbChlbGVtZW50LCBzdHJ1Y3R1cmUpIHsKICAgICAgc3RydWN0dXJlID0gdG9Ob2RlKGJlZm9yZShlbGVtZW50LCBzdHJ1Y3R1cmUpKTsKCiAgICAgIHdoaWxlIChzdHJ1Y3R1cmUuZmlyc3RDaGlsZCkgewogICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZS5maXJzdENoaWxkOwogICAgICB9CgogICAgICBhcHBlbmQoc3RydWN0dXJlLCBlbGVtZW50KTsKCiAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CiAgICB9CgogICAgZnVuY3Rpb24gd3JhcElubmVyKGVsZW1lbnQsIHN0cnVjdHVyZSkgewogICAgICByZXR1cm4gdG9Ob2RlcygKICAgICAgdG9Ob2RlcyhlbGVtZW50KS5tYXAoKGVsZW1lbnQpID0+CiAgICAgIGVsZW1lbnQuaGFzQ2hpbGROb2RlcygpID8KICAgICAgd3JhcEFsbCh0b05vZGVzKGVsZW1lbnQuY2hpbGROb2RlcyksIHN0cnVjdHVyZSkgOgogICAgICBhcHBlbmQoZWxlbWVudCwgc3RydWN0dXJlKSkpOwoKCiAgICB9CgogICAgZnVuY3Rpb24gdW53cmFwKGVsZW1lbnQpIHsKICAgICAgdG9Ob2RlcyhlbGVtZW50KS4KICAgICAgbWFwKHBhcmVudCkuCiAgICAgIGZpbHRlcigodmFsdWUsIGluZGV4LCBzZWxmKSA9PiBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleCkuCiAgICAgIGZvckVhY2goKHBhcmVudCkgPT4gcGFyZW50LnJlcGxhY2VXaXRoKC4uLnBhcmVudC5jaGlsZE5vZGVzKSk7CiAgICB9CgogICAgY29uc3QgZnJhZ21lbnRSZSA9IC9eXHMqPChcdyt8ISlbXj5dKj4vOwogICAgY29uc3Qgc2luZ2xlVGFnUmUgPSAvXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT4pPyQvOwoKICAgIGZ1bmN0aW9uIGZyYWdtZW50KGh0bWwpIHsKICAgICAgY29uc3QgbWF0Y2hlcyA9IHNpbmdsZVRhZ1JlLmV4ZWMoaHRtbCk7CiAgICAgIGlmIChtYXRjaGVzKSB7CiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobWF0Y2hlc1sxXSk7CiAgICAgIH0KCiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBpZiAoZnJhZ21lbnRSZS50ZXN0KGh0bWwpKSB7CiAgICAgICAgY29udGFpbmVyLmluc2VydEFkamFjZW50SFRNTCgnYmVmb3JlZW5kJywgaHRtbC50cmltKCkpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnRhaW5lci50ZXh0Q29udGVudCA9IGh0bWw7CiAgICAgIH0KCiAgICAgIHJldHVybiB1bndyYXBTaW5nbGUoY29udGFpbmVyLmNoaWxkTm9kZXMpOwogICAgfQoKICAgIGZ1bmN0aW9uIHVud3JhcFNpbmdsZShub2RlcykgewogICAgICByZXR1cm4gbm9kZXMubGVuZ3RoID4gMSA/IG5vZGVzIDogbm9kZXNbMF07CiAgICB9CgogICAgZnVuY3Rpb24gYXBwbHkobm9kZSwgZm4pIHsKICAgICAgaWYgKCFpc0VsZW1lbnQobm9kZSkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGZuKG5vZGUpOwogICAgICBub2RlID0gbm9kZS5maXJzdEVsZW1lbnRDaGlsZDsKICAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICBjb25zdCBuZXh0ID0gbm9kZS5uZXh0RWxlbWVudFNpYmxpbmc7CiAgICAgICAgYXBwbHkobm9kZSwgZm4pOwogICAgICAgIG5vZGUgPSBuZXh0OwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gJChzZWxlY3RvciwgY29udGV4dCkgewogICAgICByZXR1cm4gaXNIdG1sKHNlbGVjdG9yKSA/IHRvTm9kZShmcmFnbWVudChzZWxlY3RvcikpIDogZmluZChzZWxlY3RvciwgY29udGV4dCk7CiAgICB9CgogICAgZnVuY3Rpb24gJCQoc2VsZWN0b3IsIGNvbnRleHQpIHsKICAgICAgcmV0dXJuIGlzSHRtbChzZWxlY3RvcikgPyB0b05vZGVzKGZyYWdtZW50KHNlbGVjdG9yKSkgOiBmaW5kQWxsKHNlbGVjdG9yLCBjb250ZXh0KTsKICAgIH0KCiAgICBmdW5jdGlvbiBpc0h0bWwoc3RyKSB7CiAgICAgIHJldHVybiBpc1N0cmluZyhzdHIpICYmIHN0YXJ0c1dpdGgoc3RyLnRyaW0oKSwgJzwnKTsKICAgIH0KCiAgICBjb25zdCBpbkJyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJzsKICAgIGNvbnN0IGlzUnRsID0gaW5Ccm93c2VyICYmIGF0dHIoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCAnZGlyJykgPT09ICdydGwnOwoKICAgIGNvbnN0IGhhc1RvdWNoID0gaW5Ccm93c2VyICYmICdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdzsKICAgIGNvbnN0IGhhc1BvaW50ZXJFdmVudHMgPSBpbkJyb3dzZXIgJiYgd2luZG93LlBvaW50ZXJFdmVudDsKCiAgICBjb25zdCBwb2ludGVyRG93biQxID0gaGFzUG9pbnRlckV2ZW50cyA/ICdwb2ludGVyZG93bicgOiBoYXNUb3VjaCA/ICd0b3VjaHN0YXJ0JyA6ICdtb3VzZWRvd24nOwogICAgY29uc3QgcG9pbnRlck1vdmUkMSA9IGhhc1BvaW50ZXJFdmVudHMgPyAncG9pbnRlcm1vdmUnIDogaGFzVG91Y2ggPyAndG91Y2htb3ZlJyA6ICdtb3VzZW1vdmUnOwogICAgY29uc3QgcG9pbnRlclVwJDEgPSBoYXNQb2ludGVyRXZlbnRzID8gJ3BvaW50ZXJ1cCcgOiBoYXNUb3VjaCA/ICd0b3VjaGVuZCcgOiAnbW91c2V1cCc7CiAgICBjb25zdCBwb2ludGVyRW50ZXIgPSBoYXNQb2ludGVyRXZlbnRzID8gJ3BvaW50ZXJlbnRlcicgOiBoYXNUb3VjaCA/ICcnIDogJ21vdXNlZW50ZXInOwogICAgY29uc3QgcG9pbnRlckxlYXZlID0gaGFzUG9pbnRlckV2ZW50cyA/ICdwb2ludGVybGVhdmUnIDogaGFzVG91Y2ggPyAnJyA6ICdtb3VzZWxlYXZlJzsKICAgIGNvbnN0IHBvaW50ZXJDYW5jZWwgPSBoYXNQb2ludGVyRXZlbnRzID8gJ3BvaW50ZXJjYW5jZWwnIDogJ3RvdWNoY2FuY2VsJzsKCiAgICAvKgogICAgICAgIEJhc2VkIG9uOgogICAgICAgIENvcHlyaWdodCAoYykgMjAxNiBXaWxzb24gUGFnZSB3aWxzb25wYWdlQG1lLmNvbQogICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS93aWxzb25wYWdlL2Zhc3Rkb20KICAgICovCgogICAgY29uc3QgZmFzdGRvbSA9IHsKICAgICAgcmVhZHM6IFtdLAogICAgICB3cml0ZXM6IFtdLAoKICAgICAgcmVhZCh0YXNrKSB7CiAgICAgICAgdGhpcy5yZWFkcy5wdXNoKHRhc2spOwogICAgICAgIHNjaGVkdWxlRmx1c2goKTsKICAgICAgICByZXR1cm4gdGFzazsKICAgICAgfSwKCiAgICAgIHdyaXRlKHRhc2spIHsKICAgICAgICB0aGlzLndyaXRlcy5wdXNoKHRhc2spOwogICAgICAgIHNjaGVkdWxlRmx1c2goKTsKICAgICAgICByZXR1cm4gdGFzazsKICAgICAgfSwKCiAgICAgIGNsZWFyKHRhc2spIHsKICAgICAgICByZW1vdmUodGhpcy5yZWFkcywgdGFzayk7CiAgICAgICAgcmVtb3ZlKHRoaXMud3JpdGVzLCB0YXNrKTsKICAgICAgfSwKCiAgICAgIGZsdXNoIH07CgoKICAgIGZ1bmN0aW9uIGZsdXNoKHJlY3Vyc2lvbikgewogICAgICBydW5UYXNrcyhmYXN0ZG9tLnJlYWRzKTsKICAgICAgcnVuVGFza3MoZmFzdGRvbS53cml0ZXMuc3BsaWNlKDApKTsKCiAgICAgIGZhc3Rkb20uc2NoZWR1bGVkID0gZmFsc2U7CgogICAgICBpZiAoZmFzdGRvbS5yZWFkcy5sZW5ndGggfHwgZmFzdGRvbS53cml0ZXMubGVuZ3RoKSB7CiAgICAgICAgc2NoZWR1bGVGbHVzaChyZWN1cnNpb24gKyAxKTsKICAgICAgfQogICAgfQoKICAgIGNvbnN0IFJFQ1VSU0lPTl9MSU1JVCA9IDQ7CiAgICBmdW5jdGlvbiBzY2hlZHVsZUZsdXNoKHJlY3Vyc2lvbikgewogICAgICBpZiAoZmFzdGRvbS5zY2hlZHVsZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGZhc3Rkb20uc2NoZWR1bGVkID0gdHJ1ZTsKICAgICAgaWYgKHJlY3Vyc2lvbiAmJiByZWN1cnNpb24gPCBSRUNVUlNJT05fTElNSVQpIHsKICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IGZsdXNoKHJlY3Vyc2lvbikpOwogICAgICB9IGVsc2UgewogICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBmbHVzaCgxKSk7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBydW5UYXNrcyh0YXNrcykgewogICAgICBsZXQgdGFzazsKICAgICAgd2hpbGUgKHRhc2sgPSB0YXNrcy5zaGlmdCgpKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRhc2soKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHJlbW92ZShhcnJheSwgaXRlbSkgewogICAgICBjb25zdCBpbmRleCA9IGFycmF5LmluZGV4T2YoaXRlbSk7CiAgICAgIHJldHVybiB+aW5kZXggJiYgYXJyYXkuc3BsaWNlKGluZGV4LCAxKTsKICAgIH0KCiAgICBmdW5jdGlvbiBNb3VzZVRyYWNrZXIoKSB7fQoKICAgIE1vdXNlVHJhY2tlci5wcm90b3R5cGUgPSB7CiAgICAgIHBvc2l0aW9uczogW10sCgogICAgICBpbml0KCkgewogICAgICAgIHRoaXMucG9zaXRpb25zID0gW107CgogICAgICAgIGxldCBwb3NpdGlvbjsKICAgICAgICB0aGlzLnVuYmluZCA9IG9uKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgKGUpID0+IHBvc2l0aW9uID0gZ2V0RXZlbnRQb3MoZSkpOwogICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgICAgICBpZiAoIXBvc2l0aW9uKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICB0aGlzLnBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uKTsKCiAgICAgICAgICBpZiAodGhpcy5wb3NpdGlvbnMubGVuZ3RoID4gNSkgewogICAgICAgICAgICB0aGlzLnBvc2l0aW9ucy5zaGlmdCgpOwogICAgICAgICAgfQogICAgICAgIH0sIDUwKTsKICAgICAgfSwKCiAgICAgIGNhbmNlbCgpIHt2YXIgX3RoaXMkdW5iaW5kOwogICAgICAgIChfdGhpcyR1bmJpbmQgPSB0aGlzLnVuYmluZCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzJHVuYmluZC5jYWxsKHRoaXMpOwogICAgICAgIHRoaXMuaW50ZXJ2YWwgJiYgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTsKICAgICAgfSwKCiAgICAgIG1vdmVzVG8odGFyZ2V0KSB7CiAgICAgICAgaWYgKHRoaXMucG9zaXRpb25zLmxlbmd0aCA8IDIpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGNvbnN0IHAgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgeyBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20gfSA9IHA7CgogICAgICAgIGNvbnN0IFtwcmV2UG9zaXRpb25dID0gdGhpcy5wb3NpdGlvbnM7CiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBsYXN0KHRoaXMucG9zaXRpb25zKTsKICAgICAgICBjb25zdCBwYXRoID0gW3ByZXZQb3NpdGlvbiwgcG9zaXRpb25dOwoKICAgICAgICBpZiAocG9pbnRJblJlY3QocG9zaXRpb24sIHApKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBjb25zdCBkaWFnb25hbHMgPSBbCiAgICAgICAgWwogICAgICAgIHsgeDogbGVmdCwgeTogdG9wIH0sCiAgICAgICAgeyB4OiByaWdodCwgeTogYm90dG9tIH1dLAoKICAgICAgICBbCiAgICAgICAgeyB4OiBsZWZ0LCB5OiBib3R0b20gfSwKICAgICAgICB7IHg6IHJpZ2h0LCB5OiB0b3AgfV1dOwoKCgogICAgICAgIHJldHVybiBkaWFnb25hbHMuc29tZSgoZGlhZ29uYWwpID0+IHsKICAgICAgICAgIGNvbnN0IGludGVyc2VjdGlvbiA9IGludGVyc2VjdChwYXRoLCBkaWFnb25hbCk7CiAgICAgICAgICByZXR1cm4gaW50ZXJzZWN0aW9uICYmIHBvaW50SW5SZWN0KGludGVyc2VjdGlvbiwgcCk7CiAgICAgICAgfSk7CiAgICAgIH0gfTsKCgogICAgLy8gSW5zcGlyZWQgYnkgaHR0cDovL3BhdWxib3Vya2UubmV0L2dlb21ldHJ5L3BvaW50bGluZXBsYW5lLwogICAgZnVuY3Rpb24gaW50ZXJzZWN0KF9yZWYsIF9yZWYyKSB7bGV0IFt7IHg6IHgxLCB5OiB5MSB9LCB7IHg6IHgyLCB5OiB5MiB9XSA9IF9yZWY7bGV0IFt7IHg6IHgzLCB5OiB5MyB9LCB7IHg6IHg0LCB5OiB5NCB9XSA9IF9yZWYyOwogICAgICBjb25zdCBkZW5vbWluYXRvciA9ICh5NCAtIHkzKSAqICh4MiAtIHgxKSAtICh4NCAtIHgzKSAqICh5MiAtIHkxKTsKCiAgICAgIC8vIExpbmVzIGFyZSBwYXJhbGxlbAogICAgICBpZiAoZGVub21pbmF0b3IgPT09IDApIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIGNvbnN0IHVhID0gKCh4NCAtIHgzKSAqICh5MSAtIHkzKSAtICh5NCAtIHkzKSAqICh4MSAtIHgzKSkgLyBkZW5vbWluYXRvcjsKCiAgICAgIGlmICh1YSA8IDApIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIC8vIFJldHVybiBhbiBvYmplY3Qgd2l0aCB0aGUgeCBhbmQgeSBjb29yZGluYXRlcyBvZiB0aGUgaW50ZXJzZWN0aW9uCiAgICAgIHJldHVybiB7IHg6IHgxICsgdWEgKiAoeDIgLSB4MSksIHk6IHkxICsgdWEgKiAoeTIgLSB5MSkgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBvYnNlcnZlSW50ZXJzZWN0aW9uKHRhcmdldHMsIGNiLCBvcHRpb25zLCBpbnRlcnNlY3RpbmcpIHtpZiAoaW50ZXJzZWN0aW5nID09PSB2b2lkIDApIHtpbnRlcnNlY3RpbmcgPSB0cnVlO30KICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoCiAgICAgIGludGVyc2VjdGluZyA/CiAgICAgIChlbnRyaWVzLCBvYnNlcnZlcikgPT4gewogICAgICAgIGlmIChlbnRyaWVzLnNvbWUoKGVudHJ5KSA9PiBlbnRyeS5pc0ludGVyc2VjdGluZykpIHsKICAgICAgICAgIGNiKGVudHJpZXMsIG9ic2VydmVyKTsKICAgICAgICB9CiAgICAgIH0gOgogICAgICBjYiwKICAgICAgb3B0aW9ucyk7CgogICAgICBmb3IgKGNvbnN0IGVsIG9mIHRvTm9kZXModGFyZ2V0cykpIHsKICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGVsKTsKICAgICAgfQoKICAgICAgcmV0dXJuIG9ic2VydmVyOwogICAgfQoKICAgIGNvbnN0IGhhc1Jlc2l6ZU9ic2VydmVyID0gaW5Ccm93c2VyICYmIHdpbmRvdy5SZXNpemVPYnNlcnZlcjsKICAgIGZ1bmN0aW9uIG9ic2VydmVSZXNpemUodGFyZ2V0cywgY2IsIG9wdGlvbnMpIHtpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7b3B0aW9ucyA9IHsgYm94OiAnYm9yZGVyLWJveCcgfTt9CiAgICAgIGlmIChoYXNSZXNpemVPYnNlcnZlcikgewogICAgICAgIHJldHVybiBvYnNlcnZlKFJlc2l6ZU9ic2VydmVyLCB0YXJnZXRzLCBjYiwgb3B0aW9ucyk7CiAgICAgIH0KCiAgICAgIC8vIEZhbGxiYWNrIFNhZmFyaSA8IDEzLjEKICAgICAgaW5pdFJlc2l6ZUxpc3RlbmVyKCk7CiAgICAgIGxpc3RlbmVycy5hZGQoY2IpOwoKICAgICAgcmV0dXJuIHsKICAgICAgICBkaXNjb25uZWN0KCkgewogICAgICAgICAgbGlzdGVuZXJzLmRlbGV0ZShjYik7CiAgICAgICAgfSB9OwoKICAgIH0KCiAgICBsZXQgbGlzdGVuZXJzOwogICAgZnVuY3Rpb24gaW5pdFJlc2l6ZUxpc3RlbmVyKCkgewogICAgICBpZiAobGlzdGVuZXJzKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBsaXN0ZW5lcnMgPSBuZXcgU2V0KCk7CgogICAgICAvLyB0aHJvdHRsZSAncmVzaXplJwogICAgICBsZXQgcGVuZGluZ1Jlc2l6ZTsKICAgICAgY29uc3QgaGFuZGxlUmVzaXplID0gKCkgPT4gewogICAgICAgIGlmIChwZW5kaW5nUmVzaXplKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHBlbmRpbmdSZXNpemUgPSB0cnVlOwogICAgICAgIGZhc3Rkb20ucmVhZCgoKSA9PiBwZW5kaW5nUmVzaXplID0gZmFsc2UpOwogICAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgbGlzdGVuZXJzKSB7CiAgICAgICAgICBsaXN0ZW5lcigpOwogICAgICAgIH0KICAgICAgfTsKCiAgICAgIG9uKHdpbmRvdywgJ2xvYWQgcmVzaXplJywgaGFuZGxlUmVzaXplKTsKICAgICAgb24oZG9jdW1lbnQsICdsb2FkZWRtZXRhZGF0YSBsb2FkJywgaGFuZGxlUmVzaXplLCB0cnVlKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvYnNlcnZlTXV0YXRpb24odGFyZ2V0cywgY2IsIG9wdGlvbnMpIHsKICAgICAgcmV0dXJuIG9ic2VydmUoTXV0YXRpb25PYnNlcnZlciwgdGFyZ2V0cywgY2IsIG9wdGlvbnMpOwogICAgfQoKICAgIGZ1bmN0aW9uIG9ic2VydmUoT2JzZXJ2ZXIsIHRhcmdldHMsIGNiLCBvcHRpb25zKSB7CiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE9ic2VydmVyKGNiKTsKICAgICAgZm9yIChjb25zdCBlbCBvZiB0b05vZGVzKHRhcmdldHMpKSB7CiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbCwgb3B0aW9ucyk7CiAgICAgIH0KCiAgICAgIHJldHVybiBvYnNlcnZlcjsKICAgIH0KCiAgICBjb25zdCBzdHJhdHMgPSB7fTsKCiAgICBzdHJhdHMuZXZlbnRzID0KICAgIHN0cmF0cy5jcmVhdGVkID0KICAgIHN0cmF0cy5iZWZvcmVDb25uZWN0ID0KICAgIHN0cmF0cy5jb25uZWN0ZWQgPQogICAgc3RyYXRzLmJlZm9yZURpc2Nvbm5lY3QgPQogICAgc3RyYXRzLmRpc2Nvbm5lY3RlZCA9CiAgICBzdHJhdHMuZGVzdHJveSA9CiAgICBjb25jYXRTdHJhdDsKCiAgICAvLyBhcmdzIHN0cmF0ZWd5CiAgICBzdHJhdHMuYXJncyA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7CiAgICAgIHJldHVybiBjaGlsZFZhbCAhPT0gZmFsc2UgJiYgY29uY2F0U3RyYXQoY2hpbGRWYWwgfHwgcGFyZW50VmFsKTsKICAgIH07CgogICAgLy8gdXBkYXRlIHN0cmF0ZWd5CiAgICBzdHJhdHMudXBkYXRlID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwpIHsKICAgICAgcmV0dXJuIHNvcnRCeSQxKAogICAgICBjb25jYXRTdHJhdChwYXJlbnRWYWwsIGlzRnVuY3Rpb24oY2hpbGRWYWwpID8geyByZWFkOiBjaGlsZFZhbCB9IDogY2hpbGRWYWwpLAogICAgICAnb3JkZXInKTsKCiAgICB9OwoKICAgIC8vIHByb3BlcnR5IHN0cmF0ZWd5CiAgICBzdHJhdHMucHJvcHMgPSBmdW5jdGlvbiAocGFyZW50VmFsLCBjaGlsZFZhbCkgewogICAgICBpZiAoaXNBcnJheShjaGlsZFZhbCkpIHsKICAgICAgICBjb25zdCB2YWx1ZSA9IHt9OwogICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGNoaWxkVmFsKSB7CiAgICAgICAgICB2YWx1ZVtrZXldID0gU3RyaW5nOwogICAgICAgIH0KICAgICAgICBjaGlsZFZhbCA9IHZhbHVlOwogICAgICB9CgogICAgICByZXR1cm4gc3RyYXRzLm1ldGhvZHMocGFyZW50VmFsLCBjaGlsZFZhbCk7CiAgICB9OwoKICAgIC8vIGV4dGVuZCBzdHJhdGVneQogICAgc3RyYXRzLmNvbXB1dGVkID0gc3RyYXRzLm1ldGhvZHMgPSBmdW5jdGlvbiAocGFyZW50VmFsLCBjaGlsZFZhbCkgewogICAgICByZXR1cm4gY2hpbGRWYWwgPyBwYXJlbnRWYWwgPyB7IC4uLnBhcmVudFZhbCwgLi4uY2hpbGRWYWwgfSA6IGNoaWxkVmFsIDogcGFyZW50VmFsOwogICAgfTsKCiAgICAvLyBkYXRhIHN0cmF0ZWd5CiAgICBzdHJhdHMuZGF0YSA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSkgewogICAgICBpZiAoIXZtKSB7CiAgICAgICAgaWYgKCFjaGlsZFZhbCkgewogICAgICAgICAgcmV0dXJuIHBhcmVudFZhbDsKICAgICAgICB9CgogICAgICAgIGlmICghcGFyZW50VmFsKSB7CiAgICAgICAgICByZXR1cm4gY2hpbGRWYWw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZtKSB7CiAgICAgICAgICByZXR1cm4gbWVyZ2VGbkRhdGEocGFyZW50VmFsLCBjaGlsZFZhbCwgdm0pOwogICAgICAgIH07CiAgICAgIH0KCiAgICAgIHJldHVybiBtZXJnZUZuRGF0YShwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSk7CiAgICB9OwoKICAgIGZ1bmN0aW9uIG1lcmdlRm5EYXRhKHBhcmVudFZhbCwgY2hpbGRWYWwsIHZtKSB7CiAgICAgIHJldHVybiBzdHJhdHMuY29tcHV0ZWQoCiAgICAgIGlzRnVuY3Rpb24ocGFyZW50VmFsKSA/IHBhcmVudFZhbC5jYWxsKHZtLCB2bSkgOiBwYXJlbnRWYWwsCiAgICAgIGlzRnVuY3Rpb24oY2hpbGRWYWwpID8gY2hpbGRWYWwuY2FsbCh2bSwgdm0pIDogY2hpbGRWYWwpOwoKICAgIH0KCiAgICAvLyBjb25jYXQgc3RyYXRlZ3kKICAgIGZ1bmN0aW9uIGNvbmNhdFN0cmF0KHBhcmVudFZhbCwgY2hpbGRWYWwpIHsKICAgICAgcGFyZW50VmFsID0gcGFyZW50VmFsICYmICFpc0FycmF5KHBhcmVudFZhbCkgPyBbcGFyZW50VmFsXSA6IHBhcmVudFZhbDsKCiAgICAgIHJldHVybiBjaGlsZFZhbCA/CiAgICAgIHBhcmVudFZhbCA/CiAgICAgIHBhcmVudFZhbC5jb25jYXQoY2hpbGRWYWwpIDoKICAgICAgaXNBcnJheShjaGlsZFZhbCkgPwogICAgICBjaGlsZFZhbCA6CiAgICAgIFtjaGlsZFZhbF0gOgogICAgICBwYXJlbnRWYWw7CiAgICB9CgogICAgLy8gZGVmYXVsdCBzdHJhdGVneQogICAgZnVuY3Rpb24gZGVmYXVsdFN0cmF0KHBhcmVudFZhbCwgY2hpbGRWYWwpIHsKICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKGNoaWxkVmFsKSA/IHBhcmVudFZhbCA6IGNoaWxkVmFsOwogICAgfQoKICAgIGZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLCB2bSkgewogICAgICBjb25zdCBvcHRpb25zID0ge307CgogICAgICBpZiAoaXNGdW5jdGlvbihjaGlsZCkpIHsKICAgICAgICBjaGlsZCA9IGNoaWxkLm9wdGlvbnM7CiAgICAgIH0KCiAgICAgIGlmIChjaGlsZC5leHRlbmRzKSB7CiAgICAgICAgcGFyZW50ID0gbWVyZ2VPcHRpb25zKHBhcmVudCwgY2hpbGQuZXh0ZW5kcywgdm0pOwogICAgICB9CgogICAgICBpZiAoY2hpbGQubWl4aW5zKSB7CiAgICAgICAgZm9yIChjb25zdCBtaXhpbiBvZiBjaGlsZC5taXhpbnMpIHsKICAgICAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIG1peGluLCB2bSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBmb3IgKGNvbnN0IGtleSBpbiBwYXJlbnQpIHsKICAgICAgICBtZXJnZUtleShrZXkpOwogICAgICB9CgogICAgICBmb3IgKGNvbnN0IGtleSBpbiBjaGlsZCkgewogICAgICAgIGlmICghaGFzT3duKHBhcmVudCwga2V5KSkgewogICAgICAgICAgbWVyZ2VLZXkoa2V5KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIG1lcmdlS2V5KGtleSkgewogICAgICAgIG9wdGlvbnNba2V5XSA9IChzdHJhdHNba2V5XSB8fCBkZWZhdWx0U3RyYXQpKHBhcmVudFtrZXldLCBjaGlsZFtrZXldLCB2bSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBvcHRpb25zOwogICAgfQoKICAgIGZ1bmN0aW9uIHBhcnNlT3B0aW9ucyhvcHRpb25zLCBhcmdzKSB7aWYgKGFyZ3MgPT09IHZvaWQgMCkge2FyZ3MgPSBbXTt9CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbnMgPwogICAgICAgIHN0YXJ0c1dpdGgob3B0aW9ucywgJ3snKSA/CiAgICAgICAgSlNPTi5wYXJzZShvcHRpb25zKSA6CiAgICAgICAgYXJncy5sZW5ndGggJiYgIWluY2x1ZGVzKG9wdGlvbnMsICc6JykgPwogICAgICAgIHsgW2FyZ3NbMF1dOiBvcHRpb25zIH0gOgogICAgICAgIG9wdGlvbnMuc3BsaXQoJzsnKS5yZWR1Y2UoKG9wdGlvbnMsIG9wdGlvbikgPT4gewogICAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gb3B0aW9uLnNwbGl0KC86KC4qKS8pOwogICAgICAgICAgaWYgKGtleSAmJiAhaXNVbmRlZmluZWQodmFsdWUpKSB7CiAgICAgICAgICAgIG9wdGlvbnNba2V5LnRyaW0oKV0gPSB2YWx1ZS50cmltKCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gb3B0aW9uczsKICAgICAgICB9LCB7fSkgOgogICAgICAgIHt9OwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgcmV0dXJuIHt9OwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gcGxheShlbCkgewogICAgICBpZiAoaXNJRnJhbWUoZWwpKSB7CiAgICAgICAgY2FsbChlbCwgeyBmdW5jOiAncGxheVZpZGVvJywgbWV0aG9kOiAncGxheScgfSk7CiAgICAgIH0KCiAgICAgIGlmIChpc0hUTUw1KGVsKSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBlbC5wbGF5KCkuY2F0Y2gobm9vcCk7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgLy8gbm9vcAogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHBhdXNlKGVsKSB7CiAgICAgIGlmIChpc0lGcmFtZShlbCkpIHsKICAgICAgICBjYWxsKGVsLCB7IGZ1bmM6ICdwYXVzZVZpZGVvJywgbWV0aG9kOiAncGF1c2UnIH0pOwogICAgICB9CgogICAgICBpZiAoaXNIVE1MNShlbCkpIHsKICAgICAgICBlbC5wYXVzZSgpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gbXV0ZShlbCkgewogICAgICBpZiAoaXNJRnJhbWUoZWwpKSB7CiAgICAgICAgY2FsbChlbCwgeyBmdW5jOiAnbXV0ZScsIG1ldGhvZDogJ3NldFZvbHVtZScsIHZhbHVlOiAwIH0pOwogICAgICB9CgogICAgICBpZiAoaXNIVE1MNShlbCkpIHsKICAgICAgICBlbC5tdXRlZCA9IHRydWU7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBpc1ZpZGVvKGVsKSB7CiAgICAgIHJldHVybiBpc0hUTUw1KGVsKSB8fCBpc0lGcmFtZShlbCk7CiAgICB9CgogICAgZnVuY3Rpb24gaXNIVE1MNShlbCkgewogICAgICByZXR1cm4gaXNUYWcoZWwsICd2aWRlbycpOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzSUZyYW1lKGVsKSB7CiAgICAgIHJldHVybiBpc1RhZyhlbCwgJ2lmcmFtZScpICYmIChpc1lvdXR1YmUoZWwpIHx8IGlzVmltZW8oZWwpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBpc1lvdXR1YmUoZWwpIHsKICAgICAgcmV0dXJuICEhZWwuc3JjLm1hdGNoKAogICAgICAvXC9cLy4qP3lvdXR1YmUoLW5vY29va2llKT9cLlthLXpdK1wvKHdhdGNoXD92PVteJlxzXSt8ZW1iZWQpfHlvdXR1XC5iZVwvLiovKTsKCiAgICB9CgogICAgZnVuY3Rpb24gaXNWaW1lbyhlbCkgewogICAgICByZXR1cm4gISFlbC5zcmMubWF0Y2goL3ZpbWVvXC5jb21cL3ZpZGVvXC8uKi8pOwogICAgfQoKICAgIGFzeW5jIGZ1bmN0aW9uIGNhbGwoZWwsIGNtZCkgewogICAgICBhd2FpdCBlbmFibGVBcGkoZWwpOwogICAgICBwb3N0KGVsLCBjbWQpOwogICAgfQoKICAgIGZ1bmN0aW9uIHBvc3QoZWwsIGNtZCkgewogICAgICB0cnkgewogICAgICAgIGVsLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoeyBldmVudDogJ2NvbW1hbmQnLCAuLi5jbWQgfSksICcqJyk7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAvLyBub29wCiAgICAgIH0KICAgIH0KCiAgICBjb25zdCBzdGF0ZUtleSA9ICdfdWtQbGF5ZXInOwogICAgbGV0IGNvdW50ZXIgPSAwOwogICAgZnVuY3Rpb24gZW5hYmxlQXBpKGVsKSB7CiAgICAgIGlmIChlbFtzdGF0ZUtleV0pIHsKICAgICAgICByZXR1cm4gZWxbc3RhdGVLZXldOwogICAgICB9CgogICAgICBjb25zdCB5b3V0dWJlID0gaXNZb3V0dWJlKGVsKTsKICAgICAgY29uc3QgdmltZW8gPSBpc1ZpbWVvKGVsKTsKCiAgICAgIGNvbnN0IGlkID0gKytjb3VudGVyOwogICAgICBsZXQgcG9sbGVyOwoKICAgICAgcmV0dXJuIGVsW3N0YXRlS2V5XSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgICAgeW91dHViZSAmJgogICAgICAgIG9uY2UoZWwsICdsb2FkJywgKCkgPT4gewogICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSAoKSA9PiBwb3N0KGVsLCB7IGV2ZW50OiAnbGlzdGVuaW5nJywgaWQgfSk7CiAgICAgICAgICBwb2xsZXIgPSBzZXRJbnRlcnZhbChsaXN0ZW5lciwgMTAwKTsKICAgICAgICAgIGxpc3RlbmVyKCk7CiAgICAgICAgfSk7CgogICAgICAgIG9uY2Uod2luZG93LCAnbWVzc2FnZScsIHJlc29sdmUsIGZhbHNlLCAoX3JlZikgPT4ge2xldCB7IGRhdGEgfSA9IF9yZWY7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTsKICAgICAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgICBkYXRhICYmICgKICAgICAgICAgICAgICB5b3V0dWJlICYmIGRhdGEuaWQgPT09IGlkICYmIGRhdGEuZXZlbnQgPT09ICdvblJlYWR5JyB8fAogICAgICAgICAgICAgIHZpbWVvICYmIE51bWJlcihkYXRhLnBsYXllcl9pZCkgPT09IGlkKSk7CgogICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAvLyBub29wCiAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIGVsLnNyYyA9ICIiICsgZWwuc3JjICsgKGluY2x1ZGVzKGVsLnNyYywgJz8nKSA/ICcmJyA6ICc/JykgKyAoCiAgICAgICAgeW91dHViZSA/ICdlbmFibGVqc2FwaT0xJyA6ICJhcGk9MSZwbGF5ZXJfaWQ9IiArIGlkKTsKCiAgICAgIH0pLnRoZW4oKCkgPT4gY2xlYXJJbnRlcnZhbChwb2xsZXIpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBpc0luVmlldyhlbGVtZW50LCBvZmZzZXRUb3AsIG9mZnNldExlZnQpIHtpZiAob2Zmc2V0VG9wID09PSB2b2lkIDApIHtvZmZzZXRUb3AgPSAwO31pZiAob2Zmc2V0TGVmdCA9PT0gdm9pZCAwKSB7b2Zmc2V0TGVmdCA9IDA7fQogICAgICBpZiAoIWlzVmlzaWJsZShlbGVtZW50KSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgcmV0dXJuIGludGVyc2VjdFJlY3QoCiAgICAgIC4uLnNjcm9sbFBhcmVudHMoZWxlbWVudCkuCiAgICAgIG1hcCgocGFyZW50KSA9PiB7CiAgICAgICAgY29uc3QgeyB0b3AsIGxlZnQsIGJvdHRvbSwgcmlnaHQgfSA9IG9mZnNldFZpZXdwb3J0KHBhcmVudCk7CgogICAgICAgIHJldHVybiB7CiAgICAgICAgICB0b3A6IHRvcCAtIG9mZnNldFRvcCwKICAgICAgICAgIGxlZnQ6IGxlZnQgLSBvZmZzZXRMZWZ0LAogICAgICAgICAgYm90dG9tOiBib3R0b20gKyBvZmZzZXRUb3AsCiAgICAgICAgICByaWdodDogcmlnaHQgKyBvZmZzZXRMZWZ0IH07CgogICAgICB9KS4KICAgICAgY29uY2F0KG9mZnNldChlbGVtZW50KSkpOwoKICAgIH0KCiAgICBmdW5jdGlvbiBzY3JvbGxJbnRvVmlldyhlbGVtZW50LCBfdGVtcCkge2xldCB7IG9mZnNldDogb2Zmc2V0QnkgPSAwIH0gPSBfdGVtcCA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDsKICAgICAgY29uc3QgcGFyZW50cyA9IGlzVmlzaWJsZShlbGVtZW50KSA/IHNjcm9sbFBhcmVudHMoZWxlbWVudCkgOiBbXTsKICAgICAgcmV0dXJuIHBhcmVudHMucmVkdWNlKAogICAgICAoZm4sIHNjcm9sbEVsZW1lbnQsIGkpID0+IHsKICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBvZmZzZXRIZWlnaHQgfSA9IHNjcm9sbEVsZW1lbnQ7CiAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBvZmZzZXRWaWV3cG9ydChzY3JvbGxFbGVtZW50KTsKICAgICAgICBjb25zdCBtYXhTY3JvbGwgPSBzY3JvbGxIZWlnaHQgLSB2aWV3cG9ydC5oZWlnaHQ7CiAgICAgICAgY29uc3QgeyBoZWlnaHQ6IGVsSGVpZ2h0LCB0b3A6IGVsVG9wIH0gPSBwYXJlbnRzW2kgLSAxXSA/CiAgICAgICAgb2Zmc2V0Vmlld3BvcnQocGFyZW50c1tpIC0gMV0pIDoKICAgICAgICBvZmZzZXQoZWxlbWVudCk7CgogICAgICAgIGxldCB0b3AgPSBNYXRoLmNlaWwoZWxUb3AgLSB2aWV3cG9ydC50b3AgLSBvZmZzZXRCeSArIHNjcm9sbFRvcCk7CgogICAgICAgIGlmIChvZmZzZXRCeSA+IDAgJiYgb2Zmc2V0SGVpZ2h0IDwgZWxIZWlnaHQgKyBvZmZzZXRCeSkgewogICAgICAgICAgdG9wICs9IG9mZnNldEJ5OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvZmZzZXRCeSA9IDA7CiAgICAgICAgfQoKICAgICAgICBpZiAodG9wID4gbWF4U2Nyb2xsKSB7CiAgICAgICAgICBvZmZzZXRCeSAtPSB0b3AgLSBtYXhTY3JvbGw7CiAgICAgICAgICB0b3AgPSBtYXhTY3JvbGw7CiAgICAgICAgfSBlbHNlIGlmICh0b3AgPCAwKSB7CiAgICAgICAgICBvZmZzZXRCeSAtPSB0b3A7CiAgICAgICAgICB0b3AgPSAwOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICgpID0+IHNjcm9sbFRvKHNjcm9sbEVsZW1lbnQsIHRvcCAtIHNjcm9sbFRvcCkudGhlbihmbik7CiAgICAgIH0sCiAgICAgICgpID0+IFByb21pc2UucmVzb2x2ZSgpKSgpOwoKCiAgICAgIGZ1bmN0aW9uIHNjcm9sbFRvKGVsZW1lbnQsIHRvcCkgewogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgICAgICAgY29uc3Qgc2Nyb2xsID0gZWxlbWVudC5zY3JvbGxUb3A7CiAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IGdldER1cmF0aW9uKE1hdGguYWJzKHRvcCkpOwogICAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpOwoKICAgICAgICAgIChmdW5jdGlvbiBzdGVwKCkgewogICAgICAgICAgICBjb25zdCBwZXJjZW50ID0gZWFzZShjbGFtcCgoRGF0ZS5ub3coKSAtIHN0YXJ0KSAvIGR1cmF0aW9uKSk7CgogICAgICAgICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbCArIHRvcCAqIHBlcmNlbnQ7CgogICAgICAgICAgICAvLyBzY3JvbGwgbW9yZSBpZiB3ZSBoYXZlIG5vdCByZWFjaGVkIG91ciBkZXN0aW5hdGlvbgogICAgICAgICAgICBpZiAocGVyY2VudCA9PT0gMSkgewogICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pKCk7CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGdldER1cmF0aW9uKGRpc3QpIHsKICAgICAgICByZXR1cm4gNDAgKiBNYXRoLnBvdyhkaXN0LCAwLjM3NSk7CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGVhc2UoaykgewogICAgICAgIHJldHVybiAwLjUgKiAoMSAtIE1hdGguY29zKE1hdGguUEkgKiBrKSk7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBzY3JvbGxlZE92ZXIoZWxlbWVudCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkge2lmIChzdGFydE9mZnNldCA9PT0gdm9pZCAwKSB7c3RhcnRPZmZzZXQgPSAwO31pZiAoZW5kT2Zmc2V0ID09PSB2b2lkIDApIHtlbmRPZmZzZXQgPSAwO30KICAgICAgaWYgKCFpc1Zpc2libGUoZWxlbWVudCkpIHsKICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICAgICAgY29uc3QgW3Njcm9sbEVsZW1lbnRdID0gc2Nyb2xsUGFyZW50cyhlbGVtZW50LCAvYXV0b3xzY3JvbGwvLCB0cnVlKTsKICAgICAgY29uc3QgeyBzY3JvbGxIZWlnaHQsIHNjcm9sbFRvcCB9ID0gc2Nyb2xsRWxlbWVudDsKICAgICAgY29uc3QgeyBoZWlnaHQ6IHZpZXdwb3J0SGVpZ2h0IH0gPSBvZmZzZXRWaWV3cG9ydChzY3JvbGxFbGVtZW50KTsKICAgICAgY29uc3QgbWF4U2Nyb2xsID0gc2Nyb2xsSGVpZ2h0IC0gdmlld3BvcnRIZWlnaHQ7CiAgICAgIGNvbnN0IGVsZW1lbnRPZmZzZXRUb3AgPSBvZmZzZXRQb3NpdGlvbihlbGVtZW50KVswXSAtIG9mZnNldFBvc2l0aW9uKHNjcm9sbEVsZW1lbnQpWzBdOwoKICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBlbGVtZW50T2Zmc2V0VG9wIC0gdmlld3BvcnRIZWlnaHQgKyBzdGFydE9mZnNldCk7CiAgICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKG1heFNjcm9sbCwgZWxlbWVudE9mZnNldFRvcCArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gZW5kT2Zmc2V0KTsKCiAgICAgIHJldHVybiBjbGFtcCgoc2Nyb2xsVG9wIC0gc3RhcnQpIC8gKGVuZCAtIHN0YXJ0KSk7CiAgICB9CgogICAgZnVuY3Rpb24gc2Nyb2xsUGFyZW50cyhlbGVtZW50LCBvdmVyZmxvd1JlLCBzY3JvbGxhYmxlKSB7aWYgKG92ZXJmbG93UmUgPT09IHZvaWQgMCkge292ZXJmbG93UmUgPSAvYXV0b3xzY3JvbGx8aGlkZGVufGNsaXAvO31pZiAoc2Nyb2xsYWJsZSA9PT0gdm9pZCAwKSB7c2Nyb2xsYWJsZSA9IGZhbHNlO30KICAgICAgY29uc3Qgc2Nyb2xsRWwgPSBzY3JvbGxpbmdFbGVtZW50KGVsZW1lbnQpOwoKICAgICAgbGV0IGFuY2VzdG9ycyA9IHBhcmVudHMoZWxlbWVudCkucmV2ZXJzZSgpOwogICAgICBhbmNlc3RvcnMgPSBhbmNlc3RvcnMuc2xpY2UoYW5jZXN0b3JzLmluZGV4T2Yoc2Nyb2xsRWwpICsgMSk7CgogICAgICBjb25zdCBmaXhlZEluZGV4ID0gZmluZEluZGV4KGFuY2VzdG9ycywgKGVsKSA9PiBjc3MoZWwsICdwb3NpdGlvbicpID09PSAnZml4ZWQnKTsKICAgICAgaWYgKH5maXhlZEluZGV4KSB7CiAgICAgICAgYW5jZXN0b3JzID0gYW5jZXN0b3JzLnNsaWNlKGZpeGVkSW5kZXgpOwogICAgICB9CgogICAgICByZXR1cm4gW3Njcm9sbEVsXS4KICAgICAgY29uY2F0KAogICAgICBhbmNlc3RvcnMuZmlsdGVyKAogICAgICAocGFyZW50KSA9PgogICAgICBvdmVyZmxvd1JlLnRlc3QoY3NzKHBhcmVudCwgJ292ZXJmbG93JykpICYmICgKICAgICAgIXNjcm9sbGFibGUgfHwgcGFyZW50LnNjcm9sbEhlaWdodCA+IG9mZnNldFZpZXdwb3J0KHBhcmVudCkuaGVpZ2h0KSkpLgoKCiAgICAgIHJldmVyc2UoKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvZmZzZXRWaWV3cG9ydChzY3JvbGxFbGVtZW50KSB7CiAgICAgIGNvbnN0IHdpbmRvdyA9IHRvV2luZG93KHNjcm9sbEVsZW1lbnQpOwogICAgICBjb25zdCB7CiAgICAgICAgZG9jdW1lbnQ6IHsgZG9jdW1lbnRFbGVtZW50IH0gfSA9CiAgICAgIHdpbmRvdzsKICAgICAgbGV0IHZpZXdwb3J0RWxlbWVudCA9CiAgICAgIHNjcm9sbEVsZW1lbnQgPT09IHNjcm9sbGluZ0VsZW1lbnQoc2Nyb2xsRWxlbWVudCkgPyB3aW5kb3cgOiBzY3JvbGxFbGVtZW50OwoKICAgICAgY29uc3QgeyB2aXN1YWxWaWV3cG9ydCB9ID0gd2luZG93OwogICAgICBpZiAoaXNXaW5kb3codmlld3BvcnRFbGVtZW50KSAmJiB2aXN1YWxWaWV3cG9ydCkgewogICAgICAgIGxldCB7IGhlaWdodCwgd2lkdGgsIHNjYWxlLCBwYWdlVG9wOiB0b3AsIHBhZ2VMZWZ0OiBsZWZ0IH0gPSB2aXN1YWxWaWV3cG9ydDsKICAgICAgICBoZWlnaHQgPSBNYXRoLnJvdW5kKGhlaWdodCAqIHNjYWxlKTsKICAgICAgICB3aWR0aCA9IE1hdGgucm91bmQod2lkdGggKiBzY2FsZSk7CiAgICAgICAgcmV0dXJuIHsgaGVpZ2h0LCB3aWR0aCwgdG9wLCBsZWZ0LCBib3R0b206IHRvcCArIGhlaWdodCwgcmlnaHQ6IGxlZnQgKyB3aWR0aCB9OwogICAgICB9CgogICAgICBsZXQgcmVjdCA9IG9mZnNldCh2aWV3cG9ydEVsZW1lbnQpOwogICAgICBmb3IgKGxldCBbcHJvcCwgZGlyLCBzdGFydCwgZW5kXSBvZiBbCiAgICAgIFsnd2lkdGgnLCAneCcsICdsZWZ0JywgJ3JpZ2h0J10sCiAgICAgIFsnaGVpZ2h0JywgJ3knLCAndG9wJywgJ2JvdHRvbSddXSkKICAgICAgewogICAgICAgIGlmIChpc1dpbmRvdyh2aWV3cG9ydEVsZW1lbnQpKSB7CiAgICAgICAgICAvLyBpT1MgMTIgcmV0dXJucyA8Ym9keT4gYXMgc2Nyb2xsaW5nRWxlbWVudAogICAgICAgICAgdmlld3BvcnRFbGVtZW50ID0gZG9jdW1lbnRFbGVtZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWN0W3N0YXJ0XSArPSB0b0Zsb2F0KGNzcyh2aWV3cG9ydEVsZW1lbnQsICJib3JkZXItIiArIHN0YXJ0ICsgIi13aWR0aCIpKTsKICAgICAgICB9CiAgICAgICAgcmVjdFtwcm9wXSA9IHJlY3RbZGlyXSA9IHZpZXdwb3J0RWxlbWVudFsiY2xpZW50IiArIHVjZmlyc3QocHJvcCldOwogICAgICAgIHJlY3RbZW5kXSA9IHJlY3RbcHJvcF0gKyByZWN0W3N0YXJ0XTsKICAgICAgfQogICAgICByZXR1cm4gcmVjdDsKICAgIH0KCiAgICBmdW5jdGlvbiBzY3JvbGxpbmdFbGVtZW50KGVsZW1lbnQpIHsKICAgICAgcmV0dXJuIHRvV2luZG93KGVsZW1lbnQpLmRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ7CiAgICB9CgogICAgY29uc3QgZGlycyA9IFsKICAgIFsnd2lkdGgnLCAneCcsICdsZWZ0JywgJ3JpZ2h0J10sCiAgICBbJ2hlaWdodCcsICd5JywgJ3RvcCcsICdib3R0b20nXV07CgoKICAgIGZ1bmN0aW9uIHBvc2l0aW9uQXQoZWxlbWVudCwgdGFyZ2V0LCBvcHRpb25zKSB7CiAgICAgIG9wdGlvbnMgPSB7CiAgICAgICAgYXR0YWNoOiB7CiAgICAgICAgICBlbGVtZW50OiBbJ2xlZnQnLCAndG9wJ10sCiAgICAgICAgICB0YXJnZXQ6IFsnbGVmdCcsICd0b3AnXSwKICAgICAgICAgIC4uLm9wdGlvbnMuYXR0YWNoIH0sCgogICAgICAgIG9mZnNldDogWzAsIDBdLAogICAgICAgIHBsYWNlbWVudDogW10sCiAgICAgICAgLi4ub3B0aW9ucyB9OwoKCiAgICAgIGlmICghaXNBcnJheSh0YXJnZXQpKSB7CiAgICAgICAgdGFyZ2V0ID0gW3RhcmdldCwgdGFyZ2V0XTsKICAgICAgfQoKICAgICAgb2Zmc2V0KGVsZW1lbnQsIGdldFBvc2l0aW9uKGVsZW1lbnQsIHRhcmdldCwgb3B0aW9ucykpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFBvc2l0aW9uKGVsZW1lbnQsIHRhcmdldCwgb3B0aW9ucykgewogICAgICBjb25zdCBwb3NpdGlvbiA9IGF0dGFjaFRvKGVsZW1lbnQsIHRhcmdldCwgb3B0aW9ucyk7CiAgICAgIGNvbnN0IHsgYm91bmRhcnksIHZpZXdwb3J0T2Zmc2V0ID0gMCwgcGxhY2VtZW50IH0gPSBvcHRpb25zOwoKICAgICAgbGV0IG9mZnNldFBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgIGZvciAoY29uc3QgW2ksIFtwcm9wLCwgc3RhcnQsIGVuZF1dIG9mIE9iamVjdC5lbnRyaWVzKGRpcnMpKSB7CiAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBnZXRWaWV3cG9ydCQxKHRhcmdldFtpXSwgdmlld3BvcnRPZmZzZXQsIGJvdW5kYXJ5LCBpKTsKCiAgICAgICAgaWYgKGlzV2l0aGluKHBvc2l0aW9uLCB2aWV3cG9ydCwgaSkpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgbGV0IG9mZnNldEJ5ID0gMDsKCiAgICAgICAgLy8gRmxpcAogICAgICAgIGlmIChwbGFjZW1lbnRbaV0gPT09ICdmbGlwJykgewogICAgICAgICAgY29uc3QgYXR0YWNoID0gb3B0aW9ucy5hdHRhY2gudGFyZ2V0W2ldOwogICAgICAgICAgaWYgKAogICAgICAgICAgYXR0YWNoID09PSBlbmQgJiYgcG9zaXRpb25bZW5kXSA8PSB2aWV3cG9ydFtlbmRdIHx8CiAgICAgICAgICBhdHRhY2ggPT09IHN0YXJ0ICYmIHBvc2l0aW9uW3N0YXJ0XSA+PSB2aWV3cG9ydFtzdGFydF0pCiAgICAgICAgICB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQoKICAgICAgICAgIG9mZnNldEJ5ID0gZmxpcChlbGVtZW50LCB0YXJnZXQsIG9wdGlvbnMsIGkpW3N0YXJ0XSAtIHBvc2l0aW9uW3N0YXJ0XTsKCiAgICAgICAgICBjb25zdCBzY3JvbGxBcmVhID0gZ2V0U2Nyb2xsQXJlYSh0YXJnZXRbaV0sIHZpZXdwb3J0T2Zmc2V0LCBpKTsKCiAgICAgICAgICBpZiAoIWlzV2l0aGluKGFwcGx5T2Zmc2V0KHBvc2l0aW9uLCBvZmZzZXRCeSwgaSksIHNjcm9sbEFyZWEsIGkpKSB7CiAgICAgICAgICAgIGlmIChpc1dpdGhpbihwb3NpdGlvbiwgc2Nyb2xsQXJlYSwgaSkpIHsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVjdXJzaW9uKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjb25zdCBuZXdQb3MgPSBmbGlwQXhpcyhlbGVtZW50LCB0YXJnZXQsIG9wdGlvbnMpOwoKICAgICAgICAgICAgaWYgKG5ld1BvcyAmJiBpc1dpdGhpbihuZXdQb3MsIHNjcm9sbEFyZWEsIDEgLSBpKSkgewogICAgICAgICAgICAgIHJldHVybiBuZXdQb3M7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFNoaWZ0CiAgICAgICAgfSBlbHNlIGlmIChwbGFjZW1lbnRbaV0gPT09ICdzaGlmdCcpIHsKICAgICAgICAgIGNvbnN0IHRhcmdldERpbSA9IG9mZnNldCh0YXJnZXRbaV0pOwogICAgICAgICAgY29uc3QgeyBvZmZzZXQ6IGVsT2Zmc2V0IH0gPSBvcHRpb25zOwogICAgICAgICAgb2Zmc2V0QnkgPQogICAgICAgICAgY2xhbXAoCiAgICAgICAgICBjbGFtcChwb3NpdGlvbltzdGFydF0sIHZpZXdwb3J0W3N0YXJ0XSwgdmlld3BvcnRbZW5kXSAtIHBvc2l0aW9uW3Byb3BdKSwKICAgICAgICAgIHRhcmdldERpbVtzdGFydF0gLSBwb3NpdGlvbltwcm9wXSArIGVsT2Zmc2V0W2ldLAogICAgICAgICAgdGFyZ2V0RGltW2VuZF0gLSBlbE9mZnNldFtpXSkgLQogICAgICAgICAgcG9zaXRpb25bc3RhcnRdOwogICAgICAgIH0KCiAgICAgICAgb2Zmc2V0UG9zaXRpb24gPSBhcHBseU9mZnNldChvZmZzZXRQb3NpdGlvbiwgb2Zmc2V0QnksIGkpOwogICAgICB9CgogICAgICByZXR1cm4gb2Zmc2V0UG9zaXRpb247CiAgICB9CgogICAgZnVuY3Rpb24gYXR0YWNoVG8oZWxlbWVudCwgdGFyZ2V0LCBvcHRpb25zKSB7CiAgICAgIGxldCB7IGF0dGFjaCwgb2Zmc2V0OiBvZmZzZXRCeSB9ID0gewogICAgICAgIGF0dGFjaDogewogICAgICAgICAgZWxlbWVudDogWydsZWZ0JywgJ3RvcCddLAogICAgICAgICAgdGFyZ2V0OiBbJ2xlZnQnLCAndG9wJ10sCiAgICAgICAgICAuLi5vcHRpb25zLmF0dGFjaCB9LAoKICAgICAgICBvZmZzZXQ6IFswLCAwXSwKICAgICAgICAuLi5vcHRpb25zIH07CgoKICAgICAgbGV0IGVsT2Zmc2V0ID0gb2Zmc2V0KGVsZW1lbnQpOwoKICAgICAgZm9yIChjb25zdCBbaSwgW3Byb3AsLCBzdGFydCwgZW5kXV0gb2YgT2JqZWN0LmVudHJpZXMoZGlycykpIHsKICAgICAgICBjb25zdCB0YXJnZXRPZmZzZXQgPQogICAgICAgIGF0dGFjaC50YXJnZXRbaV0gPT09IGF0dGFjaC5lbGVtZW50W2ldID8gb2Zmc2V0Vmlld3BvcnQodGFyZ2V0W2ldKSA6IG9mZnNldCh0YXJnZXRbaV0pOwoKICAgICAgICBlbE9mZnNldCA9IGFwcGx5T2Zmc2V0KAogICAgICAgIGVsT2Zmc2V0LAogICAgICAgIHRhcmdldE9mZnNldFtzdGFydF0gLQogICAgICAgIGVsT2Zmc2V0W3N0YXJ0XSArCiAgICAgICAgbW92ZUJ5KGF0dGFjaC50YXJnZXRbaV0sIGVuZCwgdGFyZ2V0T2Zmc2V0W3Byb3BdKSAtCiAgICAgICAgbW92ZUJ5KGF0dGFjaC5lbGVtZW50W2ldLCBlbmQsIGVsT2Zmc2V0W3Byb3BdKSArCiAgICAgICAgK29mZnNldEJ5W2ldLAogICAgICAgIGkpOwoKICAgICAgfQogICAgICByZXR1cm4gZWxPZmZzZXQ7CiAgICB9CgogICAgZnVuY3Rpb24gYXBwbHlPZmZzZXQocG9zaXRpb24sIG9mZnNldCwgaSkgewogICAgICBjb25zdCBbLCBkaXIsIHN0YXJ0LCBlbmRdID0gZGlyc1tpXTsKICAgICAgY29uc3QgbmV3UG9zID0geyAuLi5wb3NpdGlvbiB9OwogICAgICBuZXdQb3Nbc3RhcnRdID0gcG9zaXRpb25bZGlyXSA9IHBvc2l0aW9uW3N0YXJ0XSArIG9mZnNldDsKICAgICAgbmV3UG9zW2VuZF0gKz0gb2Zmc2V0OwogICAgICByZXR1cm4gbmV3UG9zOwogICAgfQoKICAgIGZ1bmN0aW9uIG1vdmVCeShhdHRhY2gsIGVuZCwgZGltKSB7CiAgICAgIHJldHVybiBhdHRhY2ggPT09ICdjZW50ZXInID8gZGltIC8gMiA6IGF0dGFjaCA9PT0gZW5kID8gZGltIDogMDsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRWaWV3cG9ydCQxKGVsZW1lbnQsIHZpZXdwb3J0T2Zmc2V0LCBib3VuZGFyeSwgaSkgewogICAgICBsZXQgdmlld3BvcnQgPSBnZXRJbnRlcnNlY3Rpb25BcmVhKC4uLnNjcm9sbFBhcmVudHMoZWxlbWVudCkubWFwKG9mZnNldFZpZXdwb3J0KSk7CgogICAgICBpZiAodmlld3BvcnRPZmZzZXQpIHsKICAgICAgICB2aWV3cG9ydFtkaXJzW2ldWzJdXSArPSB2aWV3cG9ydE9mZnNldDsKICAgICAgICB2aWV3cG9ydFtkaXJzW2ldWzNdXSAtPSB2aWV3cG9ydE9mZnNldDsKICAgICAgfQoKICAgICAgaWYgKGJvdW5kYXJ5KSB7CiAgICAgICAgdmlld3BvcnQgPSBnZXRJbnRlcnNlY3Rpb25BcmVhKHZpZXdwb3J0LCBvZmZzZXQoYm91bmRhcnkpKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHZpZXdwb3J0OwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFNjcm9sbEFyZWEoZWxlbWVudCwgdmlld3BvcnRPZmZzZXQsIGkpIHsKICAgICAgY29uc3QgW3Byb3AsLCBzdGFydCwgZW5kXSA9IGRpcnNbaV07CiAgICAgIGNvbnN0IFtzY3JvbGxFbGVtZW50XSA9IHNjcm9sbFBhcmVudHMoZWxlbWVudCk7CiAgICAgIGNvbnN0IHZpZXdwb3J0ID0gb2Zmc2V0Vmlld3BvcnQoc2Nyb2xsRWxlbWVudCk7CiAgICAgIHZpZXdwb3J0W3N0YXJ0XSAtPSBzY3JvbGxFbGVtZW50WyJzY3JvbGwiICsgdWNmaXJzdChzdGFydCldIC0gdmlld3BvcnRPZmZzZXQ7CiAgICAgIHZpZXdwb3J0W2VuZF0gPSB2aWV3cG9ydFtzdGFydF0gKyBzY3JvbGxFbGVtZW50WyJzY3JvbGwiICsgdWNmaXJzdChwcm9wKV0gLSB2aWV3cG9ydE9mZnNldDsKICAgICAgcmV0dXJuIHZpZXdwb3J0OwogICAgfQoKICAgIGZ1bmN0aW9uIGdldEludGVyc2VjdGlvbkFyZWEoKSB7CiAgICAgIGxldCBhcmVhID0ge307Zm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlY3RzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge3JlY3RzW19rZXldID0gYXJndW1lbnRzW19rZXldO30KICAgICAgZm9yIChjb25zdCByZWN0IG9mIHJlY3RzKSB7CiAgICAgICAgZm9yIChjb25zdCBbLCwgc3RhcnQsIGVuZF0gb2YgZGlycykgewogICAgICAgICAgYXJlYVtzdGFydF0gPSBNYXRoLm1heChhcmVhW3N0YXJ0XSB8fCAwLCByZWN0W3N0YXJ0XSk7CiAgICAgICAgICBhcmVhW2VuZF0gPSBNYXRoLm1pbiguLi5bYXJlYVtlbmRdLCByZWN0W2VuZF1dLmZpbHRlcihCb29sZWFuKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBhcmVhOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzV2l0aGluKHBvc2l0aW9uQSwgcG9zaXRpb25CLCBpKSB7CiAgICAgIGNvbnN0IFssLCBzdGFydCwgZW5kXSA9IGRpcnNbaV07CiAgICAgIHJldHVybiBwb3NpdGlvbkFbc3RhcnRdID49IHBvc2l0aW9uQltzdGFydF0gJiYgcG9zaXRpb25BW2VuZF0gPD0gcG9zaXRpb25CW2VuZF07CiAgICB9CgogICAgZnVuY3Rpb24gZmxpcChlbGVtZW50LCB0YXJnZXQsIF9yZWYsIGkpIHtsZXQgeyBvZmZzZXQsIGF0dGFjaCB9ID0gX3JlZjsKICAgICAgcmV0dXJuIGF0dGFjaFRvKGVsZW1lbnQsIHRhcmdldCwgewogICAgICAgIGF0dGFjaDogewogICAgICAgICAgZWxlbWVudDogZmxpcEF0dGFjaChhdHRhY2guZWxlbWVudCwgaSksCiAgICAgICAgICB0YXJnZXQ6IGZsaXBBdHRhY2goYXR0YWNoLnRhcmdldCwgaSkgfSwKCiAgICAgICAgb2Zmc2V0OiBmbGlwT2Zmc2V0KG9mZnNldCwgaSkgfSk7CgogICAgfQoKICAgIGZ1bmN0aW9uIGZsaXBBeGlzKGVsZW1lbnQsIHRhcmdldCwgb3B0aW9ucykgewogICAgICByZXR1cm4gZ2V0UG9zaXRpb24oZWxlbWVudCwgdGFyZ2V0LCB7CiAgICAgICAgLi4ub3B0aW9ucywKICAgICAgICBhdHRhY2g6IHsKICAgICAgICAgIGVsZW1lbnQ6IG9wdGlvbnMuYXR0YWNoLmVsZW1lbnQubWFwKGZsaXBBdHRhY2hBeGlzKS5yZXZlcnNlKCksCiAgICAgICAgICB0YXJnZXQ6IG9wdGlvbnMuYXR0YWNoLnRhcmdldC5tYXAoZmxpcEF0dGFjaEF4aXMpLnJldmVyc2UoKSB9LAoKICAgICAgICBvZmZzZXQ6IG9wdGlvbnMub2Zmc2V0LnJldmVyc2UoKSwKICAgICAgICBwbGFjZW1lbnQ6IG9wdGlvbnMucGxhY2VtZW50LnJldmVyc2UoKSwKICAgICAgICByZWN1cnNpb246IHRydWUgfSk7CgogICAgfQoKICAgIGZ1bmN0aW9uIGZsaXBBdHRhY2goYXR0YWNoLCBpKSB7CiAgICAgIGNvbnN0IG5ld0F0dGFjaCA9IFsuLi5hdHRhY2hdOwogICAgICBjb25zdCBpbmRleCA9IGRpcnNbaV0uaW5kZXhPZihhdHRhY2hbaV0pOwogICAgICBpZiAofmluZGV4KSB7CiAgICAgICAgbmV3QXR0YWNoW2ldID0gZGlyc1tpXVsxIC0gaW5kZXggJSAyICsgMl07CiAgICAgIH0KICAgICAgcmV0dXJuIG5ld0F0dGFjaDsKICAgIH0KCiAgICBmdW5jdGlvbiBmbGlwQXR0YWNoQXhpcyhwcm9wKSB7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlycy5sZW5ndGg7IGkrKykgewogICAgICAgIGNvbnN0IGluZGV4ID0gZGlyc1tpXS5pbmRleE9mKHByb3ApOwogICAgICAgIGlmICh+aW5kZXgpIHsKICAgICAgICAgIHJldHVybiBkaXJzWzEgLSBpXVtpbmRleCAlIDIgKyAyXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBmbGlwT2Zmc2V0KG9mZnNldCwgaSkgewogICAgICBvZmZzZXQgPSBbLi4ub2Zmc2V0XTsKICAgICAgb2Zmc2V0W2ldICo9IC0xOwogICAgICByZXR1cm4gb2Zmc2V0OwogICAgfQoKICAgIHZhciB1dGlsID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoewogICAgICAgIF9fcHJvdG9fXzogbnVsbCwKICAgICAgICBhamF4OiBhamF4LAogICAgICAgIGdldEltYWdlOiBnZXRJbWFnZSwKICAgICAgICBUcmFuc2l0aW9uOiBUcmFuc2l0aW9uLAogICAgICAgIEFuaW1hdGlvbjogQW5pbWF0aW9uLAogICAgICAgIGF0dHI6IGF0dHIsCiAgICAgICAgaGFzQXR0cjogaGFzQXR0ciwKICAgICAgICByZW1vdmVBdHRyOiByZW1vdmVBdHRyLAogICAgICAgIGRhdGE6IGRhdGEsCiAgICAgICAgYWRkQ2xhc3M6IGFkZENsYXNzLAogICAgICAgIHJlbW92ZUNsYXNzOiByZW1vdmVDbGFzcywKICAgICAgICByZW1vdmVDbGFzc2VzOiByZW1vdmVDbGFzc2VzLAogICAgICAgIHJlcGxhY2VDbGFzczogcmVwbGFjZUNsYXNzLAogICAgICAgIGhhc0NsYXNzOiBoYXNDbGFzcywKICAgICAgICB0b2dnbGVDbGFzczogdG9nZ2xlQ2xhc3MsCiAgICAgICAgZGltZW5zaW9uczogZGltZW5zaW9ucyQxLAogICAgICAgIG9mZnNldDogb2Zmc2V0LAogICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbiwKICAgICAgICBvZmZzZXRQb3NpdGlvbjogb2Zmc2V0UG9zaXRpb24sCiAgICAgICAgaGVpZ2h0OiBoZWlnaHQsCiAgICAgICAgd2lkdGg6IHdpZHRoLAogICAgICAgIGJveE1vZGVsQWRqdXN0OiBib3hNb2RlbEFkanVzdCwKICAgICAgICBmbGlwUG9zaXRpb246IGZsaXBQb3NpdGlvbiwKICAgICAgICB0b1B4OiB0b1B4LAogICAgICAgIHJlYWR5OiByZWFkeSwKICAgICAgICBpc1RhZzogaXNUYWcsCiAgICAgICAgZW1wdHk6IGVtcHR5LAogICAgICAgIGh0bWw6IGh0bWwsCiAgICAgICAgcHJlcGVuZDogcHJlcGVuZCwKICAgICAgICBhcHBlbmQ6IGFwcGVuZCwKICAgICAgICBiZWZvcmU6IGJlZm9yZSwKICAgICAgICBhZnRlcjogYWZ0ZXIsCiAgICAgICAgcmVtb3ZlOiByZW1vdmUkMSwKICAgICAgICB3cmFwQWxsOiB3cmFwQWxsLAogICAgICAgIHdyYXBJbm5lcjogd3JhcElubmVyLAogICAgICAgIHVud3JhcDogdW53cmFwLAogICAgICAgIGZyYWdtZW50OiBmcmFnbWVudCwKICAgICAgICBhcHBseTogYXBwbHksCiAgICAgICAgJDogJCwKICAgICAgICAkJDogJCQsCiAgICAgICAgaW5Ccm93c2VyOiBpbkJyb3dzZXIsCiAgICAgICAgaXNSdGw6IGlzUnRsLAogICAgICAgIGhhc1RvdWNoOiBoYXNUb3VjaCwKICAgICAgICBwb2ludGVyRG93bjogcG9pbnRlckRvd24kMSwKICAgICAgICBwb2ludGVyTW92ZTogcG9pbnRlck1vdmUkMSwKICAgICAgICBwb2ludGVyVXA6IHBvaW50ZXJVcCQxLAogICAgICAgIHBvaW50ZXJFbnRlcjogcG9pbnRlckVudGVyLAogICAgICAgIHBvaW50ZXJMZWF2ZTogcG9pbnRlckxlYXZlLAogICAgICAgIHBvaW50ZXJDYW5jZWw6IHBvaW50ZXJDYW5jZWwsCiAgICAgICAgb246IG9uLAogICAgICAgIG9mZjogb2ZmLAogICAgICAgIG9uY2U6IG9uY2UsCiAgICAgICAgdHJpZ2dlcjogdHJpZ2dlciwKICAgICAgICBjcmVhdGVFdmVudDogY3JlYXRlRXZlbnQsCiAgICAgICAgdG9FdmVudFRhcmdldHM6IHRvRXZlbnRUYXJnZXRzLAogICAgICAgIGlzVG91Y2g6IGlzVG91Y2gsCiAgICAgICAgZ2V0RXZlbnRQb3M6IGdldEV2ZW50UG9zLAogICAgICAgIGZhc3Rkb206IGZhc3Rkb20sCiAgICAgICAgaXNWb2lkRWxlbWVudDogaXNWb2lkRWxlbWVudCwKICAgICAgICBpc1Zpc2libGU6IGlzVmlzaWJsZSwKICAgICAgICBzZWxJbnB1dDogc2VsSW5wdXQsCiAgICAgICAgaXNJbnB1dDogaXNJbnB1dCwKICAgICAgICBzZWxGb2N1c2FibGU6IHNlbEZvY3VzYWJsZSwKICAgICAgICBpc0ZvY3VzYWJsZTogaXNGb2N1c2FibGUsCiAgICAgICAgcGFyZW50OiBwYXJlbnQsCiAgICAgICAgZmlsdGVyOiBmaWx0ZXIkMSwKICAgICAgICBtYXRjaGVzOiBtYXRjaGVzLAogICAgICAgIGNsb3Nlc3Q6IGNsb3Nlc3QsCiAgICAgICAgd2l0aGluOiB3aXRoaW4sCiAgICAgICAgcGFyZW50czogcGFyZW50cywKICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW4sCiAgICAgICAgaW5kZXg6IGluZGV4LAogICAgICAgIGhhc093bjogaGFzT3duLAogICAgICAgIGh5cGhlbmF0ZTogaHlwaGVuYXRlLAogICAgICAgIGNhbWVsaXplOiBjYW1lbGl6ZSwKICAgICAgICB1Y2ZpcnN0OiB1Y2ZpcnN0LAogICAgICAgIHN0YXJ0c1dpdGg6IHN0YXJ0c1dpdGgsCiAgICAgICAgZW5kc1dpdGg6IGVuZHNXaXRoLAogICAgICAgIGluY2x1ZGVzOiBpbmNsdWRlcywKICAgICAgICBmaW5kSW5kZXg6IGZpbmRJbmRleCwKICAgICAgICBpc0FycmF5OiBpc0FycmF5LAogICAgICAgIHRvQXJyYXk6IHRvQXJyYXksCiAgICAgICAgYXNzaWduOiBhc3NpZ24sCiAgICAgICAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbiwKICAgICAgICBpc09iamVjdDogaXNPYmplY3QsCiAgICAgICAgaXNQbGFpbk9iamVjdDogaXNQbGFpbk9iamVjdCwKICAgICAgICBpc1dpbmRvdzogaXNXaW5kb3csCiAgICAgICAgaXNEb2N1bWVudDogaXNEb2N1bWVudCwKICAgICAgICBpc05vZGU6IGlzTm9kZSwKICAgICAgICBpc0VsZW1lbnQ6IGlzRWxlbWVudCwKICAgICAgICBpc0Jvb2xlYW46IGlzQm9vbGVhbiwKICAgICAgICBpc1N0cmluZzogaXNTdHJpbmcsCiAgICAgICAgaXNOdW1iZXI6IGlzTnVtYmVyLAogICAgICAgIGlzTnVtZXJpYzogaXNOdW1lcmljLAogICAgICAgIGlzRW1wdHk6IGlzRW1wdHksCiAgICAgICAgaXNVbmRlZmluZWQ6IGlzVW5kZWZpbmVkLAogICAgICAgIHRvQm9vbGVhbjogdG9Cb29sZWFuLAogICAgICAgIHRvTnVtYmVyOiB0b051bWJlciwKICAgICAgICB0b0Zsb2F0OiB0b0Zsb2F0LAogICAgICAgIHRvTm9kZTogdG9Ob2RlLAogICAgICAgIHRvTm9kZXM6IHRvTm9kZXMsCiAgICAgICAgdG9XaW5kb3c6IHRvV2luZG93LAogICAgICAgIGlzRXF1YWw6IGlzRXF1YWwsCiAgICAgICAgc3dhcDogc3dhcCwKICAgICAgICBsYXN0OiBsYXN0LAogICAgICAgIGVhY2g6IGVhY2gsCiAgICAgICAgc29ydEJ5OiBzb3J0QnkkMSwKICAgICAgICB1bmlxdWVCeTogdW5pcXVlQnksCiAgICAgICAgY2xhbXA6IGNsYW1wLAogICAgICAgIG5vb3A6IG5vb3AsCiAgICAgICAgaW50ZXJzZWN0UmVjdDogaW50ZXJzZWN0UmVjdCwKICAgICAgICBwb2ludEluUmVjdDogcG9pbnRJblJlY3QsCiAgICAgICAgRGltZW5zaW9uczogRGltZW5zaW9ucywKICAgICAgICBnZXRJbmRleDogZ2V0SW5kZXgsCiAgICAgICAgbWVtb2l6ZTogbWVtb2l6ZSwKICAgICAgICBEZWZlcnJlZDogRGVmZXJyZWQsCiAgICAgICAgTW91c2VUcmFja2VyOiBNb3VzZVRyYWNrZXIsCiAgICAgICAgb2JzZXJ2ZUludGVyc2VjdGlvbjogb2JzZXJ2ZUludGVyc2VjdGlvbiwKICAgICAgICBvYnNlcnZlUmVzaXplOiBvYnNlcnZlUmVzaXplLAogICAgICAgIG9ic2VydmVNdXRhdGlvbjogb2JzZXJ2ZU11dGF0aW9uLAogICAgICAgIG1lcmdlT3B0aW9uczogbWVyZ2VPcHRpb25zLAogICAgICAgIHBhcnNlT3B0aW9uczogcGFyc2VPcHRpb25zLAogICAgICAgIHBsYXk6IHBsYXksCiAgICAgICAgcGF1c2U6IHBhdXNlLAogICAgICAgIG11dGU6IG11dGUsCiAgICAgICAgaXNWaWRlbzogaXNWaWRlbywKICAgICAgICBwb3NpdGlvbkF0OiBwb3NpdGlvbkF0LAogICAgICAgIHF1ZXJ5OiBxdWVyeSwKICAgICAgICBxdWVyeUFsbDogcXVlcnlBbGwsCiAgICAgICAgZmluZDogZmluZCwKICAgICAgICBmaW5kQWxsOiBmaW5kQWxsLAogICAgICAgIGVzY2FwZTogZXNjYXBlLAogICAgICAgIGNzczogY3NzLAogICAgICAgIHByb3BOYW1lOiBwcm9wTmFtZSwKICAgICAgICBpc0luVmlldzogaXNJblZpZXcsCiAgICAgICAgc2Nyb2xsSW50b1ZpZXc6IHNjcm9sbEludG9WaWV3LAogICAgICAgIHNjcm9sbGVkT3Zlcjogc2Nyb2xsZWRPdmVyLAogICAgICAgIHNjcm9sbFBhcmVudHM6IHNjcm9sbFBhcmVudHMsCiAgICAgICAgb2Zmc2V0Vmlld3BvcnQ6IG9mZnNldFZpZXdwb3J0CiAgICB9KTsKCiAgICBmdW5jdGlvbiBnbG9iYWxBUEkgKFVJa2l0KSB7CiAgICAgIGNvbnN0IERBVEEgPSBVSWtpdC5kYXRhOwoKICAgICAgVUlraXQudXNlID0gZnVuY3Rpb24gKHBsdWdpbikgewogICAgICAgIGlmIChwbHVnaW4uaW5zdGFsbGVkKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBwbHVnaW4uY2FsbChudWxsLCB0aGlzKTsKICAgICAgICBwbHVnaW4uaW5zdGFsbGVkID0gdHJ1ZTsKCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CgogICAgICBVSWtpdC5taXhpbiA9IGZ1bmN0aW9uIChtaXhpbiwgY29tcG9uZW50KSB7CiAgICAgICAgY29tcG9uZW50ID0gKGlzU3RyaW5nKGNvbXBvbmVudCkgPyBVSWtpdC5jb21wb25lbnQoY29tcG9uZW50KSA6IGNvbXBvbmVudCkgfHwgdGhpczsKICAgICAgICBjb21wb25lbnQub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhjb21wb25lbnQub3B0aW9ucywgbWl4aW4pOwogICAgICB9OwoKICAgICAgVUlraXQuZXh0ZW5kID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKCiAgICAgICAgY29uc3QgU3VwZXIgPSB0aGlzOwogICAgICAgIGNvbnN0IFN1YiA9IGZ1bmN0aW9uIFVJa2l0Q29tcG9uZW50KG9wdGlvbnMpIHsKICAgICAgICAgIHRoaXMuX2luaXQob3B0aW9ucyk7CiAgICAgICAgfTsKCiAgICAgICAgU3ViLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3VwZXIucHJvdG90eXBlKTsKICAgICAgICBTdWIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ViOwogICAgICAgIFN1Yi5vcHRpb25zID0gbWVyZ2VPcHRpb25zKFN1cGVyLm9wdGlvbnMsIG9wdGlvbnMpOwoKICAgICAgICBTdWIuc3VwZXIgPSBTdXBlcjsKICAgICAgICBTdWIuZXh0ZW5kID0gU3VwZXIuZXh0ZW5kOwoKICAgICAgICByZXR1cm4gU3ViOwogICAgICB9OwoKICAgICAgVUlraXQudXBkYXRlID0gZnVuY3Rpb24gKGVsZW1lbnQsIGUpIHsKICAgICAgICBlbGVtZW50ID0gZWxlbWVudCA/IHRvTm9kZShlbGVtZW50KSA6IGRvY3VtZW50LmJvZHk7CgogICAgICAgIGZvciAoY29uc3QgcGFyZW50RWwgb2YgcGFyZW50cyhlbGVtZW50KS5yZXZlcnNlKCkpIHsKICAgICAgICAgIHVwZGF0ZShwYXJlbnRFbFtEQVRBXSwgZSk7CiAgICAgICAgfQoKICAgICAgICBhcHBseShlbGVtZW50LCAoZWxlbWVudCkgPT4gdXBkYXRlKGVsZW1lbnRbREFUQV0sIGUpKTsKICAgICAgfTsKCiAgICAgIGxldCBjb250YWluZXI7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVSWtpdCwgJ2NvbnRhaW5lcicsIHsKICAgICAgICBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gY29udGFpbmVyIHx8IGRvY3VtZW50LmJvZHk7CiAgICAgICAgfSwKCiAgICAgICAgc2V0KGVsZW1lbnQpIHsKICAgICAgICAgIGNvbnRhaW5lciA9ICQoZWxlbWVudCk7CiAgICAgICAgfSB9KTsKCgogICAgICBmdW5jdGlvbiB1cGRhdGUoZGF0YSwgZSkgewogICAgICAgIGlmICghZGF0YSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRhdGEpIHsKICAgICAgICAgIGlmIChkYXRhW25hbWVdLl9jb25uZWN0ZWQpIHsKICAgICAgICAgICAgZGF0YVtuYW1lXS5fY2FsbFVwZGF0ZShlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBob29rc0FQSSAoVUlraXQpIHsKICAgICAgVUlraXQucHJvdG90eXBlLl9jYWxsSG9vayA9IGZ1bmN0aW9uIChob29rKSB7dmFyIF90aGlzJCRvcHRpb25zJGhvb2s7CiAgICAgICAgKF90aGlzJCRvcHRpb25zJGhvb2sgPSB0aGlzLiRvcHRpb25zW2hvb2tdKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkJG9wdGlvbnMkaG9vay5mb3JFYWNoKChoYW5kbGVyKSA9PiBoYW5kbGVyLmNhbGwodGhpcykpOwogICAgICB9OwoKICAgICAgVUlraXQucHJvdG90eXBlLl9jYWxsQ29ubmVjdGVkID0gZnVuY3Rpb24gKCkgewogICAgICAgIGlmICh0aGlzLl9jb25uZWN0ZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHRoaXMuX2RhdGEgPSB7fTsKICAgICAgICB0aGlzLl9jb21wdXRlZCA9IHt9OwoKICAgICAgICB0aGlzLl9pbml0UHJvcHMoKTsKCiAgICAgICAgdGhpcy5fY2FsbEhvb2soJ2JlZm9yZUNvbm5lY3QnKTsKICAgICAgICB0aGlzLl9jb25uZWN0ZWQgPSB0cnVlOwoKICAgICAgICB0aGlzLl9pbml0RXZlbnRzKCk7CiAgICAgICAgdGhpcy5faW5pdE9ic2VydmVycygpOwoKICAgICAgICB0aGlzLl9jYWxsSG9vaygnY29ubmVjdGVkJyk7CiAgICAgICAgdGhpcy5fY2FsbFVwZGF0ZSgpOwogICAgICB9OwoKICAgICAgVUlraXQucHJvdG90eXBlLl9jYWxsRGlzY29ubmVjdGVkID0gZnVuY3Rpb24gKCkgewogICAgICAgIGlmICghdGhpcy5fY29ubmVjdGVkKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB0aGlzLl9jYWxsSG9vaygnYmVmb3JlRGlzY29ubmVjdCcpOwogICAgICAgIHRoaXMuX2Rpc2Nvbm5lY3RPYnNlcnZlcnMoKTsKICAgICAgICB0aGlzLl91bmJpbmRFdmVudHMoKTsKICAgICAgICB0aGlzLl9jYWxsSG9vaygnZGlzY29ubmVjdGVkJyk7CgogICAgICAgIHRoaXMuX2Nvbm5lY3RlZCA9IGZhbHNlOwogICAgICAgIGRlbGV0ZSB0aGlzLl93YXRjaDsKICAgICAgfTsKCiAgICAgIFVJa2l0LnByb3RvdHlwZS5fY2FsbFVwZGF0ZSA9IGZ1bmN0aW9uIChlKSB7aWYgKGUgPT09IHZvaWQgMCkge2UgPSAndXBkYXRlJzt9CiAgICAgICAgaWYgKCF0aGlzLl9jb25uZWN0ZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChlID09PSAndXBkYXRlJyB8fCBlID09PSAncmVzaXplJykgewogICAgICAgICAgdGhpcy5fY2FsbFdhdGNoZXMoKTsKICAgICAgICB9CgogICAgICAgIGlmICghdGhpcy4kb3B0aW9ucy51cGRhdGUpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmICghdGhpcy5fdXBkYXRlcykgewogICAgICAgICAgdGhpcy5fdXBkYXRlcyA9IG5ldyBTZXQoKTsKICAgICAgICAgIGZhc3Rkb20ucmVhZCgoKSA9PiB7CiAgICAgICAgICAgIGlmICh0aGlzLl9jb25uZWN0ZWQpIHsKICAgICAgICAgICAgICBydW5VcGRhdGVzLmNhbGwodGhpcywgdGhpcy5fdXBkYXRlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3VwZGF0ZXM7CiAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIHRoaXMuX3VwZGF0ZXMuYWRkKGUudHlwZSB8fCBlKTsKICAgICAgfTsKCiAgICAgIFVJa2l0LnByb3RvdHlwZS5fY2FsbFdhdGNoZXMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKHRoaXMuX3dhdGNoKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBjb25zdCBpbml0aWFsID0gIWhhc093bih0aGlzLCAnX3dhdGNoJyk7CgogICAgICAgIHRoaXMuX3dhdGNoID0gZmFzdGRvbS5yZWFkKCgpID0+IHsKICAgICAgICAgIGlmICh0aGlzLl9jb25uZWN0ZWQpIHsKICAgICAgICAgICAgcnVuV2F0Y2hlcy5jYWxsKHRoaXMsIGluaXRpYWwpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5fd2F0Y2ggPSBudWxsOwogICAgICAgIH0pOwogICAgICB9OwoKICAgICAgZnVuY3Rpb24gcnVuVXBkYXRlcyh0eXBlcykgewogICAgICAgIGZvciAoY29uc3QgeyByZWFkLCB3cml0ZSwgZXZlbnRzID0gW10gfSBvZiB0aGlzLiRvcHRpb25zLnVwZGF0ZSkgewogICAgICAgICAgaWYgKCF0eXBlcy5oYXMoJ3VwZGF0ZScpICYmICFldmVudHMuc29tZSgodHlwZSkgPT4gdHlwZXMuaGFzKHR5cGUpKSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KCiAgICAgICAgICBsZXQgcmVzdWx0OwogICAgICAgICAgaWYgKHJlYWQpIHsKICAgICAgICAgICAgcmVzdWx0ID0gcmVhZC5jYWxsKHRoaXMsIHRoaXMuX2RhdGEsIHR5cGVzKTsKCiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgaXNQbGFpbk9iamVjdChyZXN1bHQpKSB7CiAgICAgICAgICAgICAgYXNzaWduKHRoaXMuX2RhdGEsIHJlc3VsdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAod3JpdGUgJiYgcmVzdWx0ICE9PSBmYWxzZSkgewogICAgICAgICAgICBmYXN0ZG9tLndyaXRlKCgpID0+IHsKICAgICAgICAgICAgICBpZiAodGhpcy5fY29ubmVjdGVkKSB7CiAgICAgICAgICAgICAgICB3cml0ZS5jYWxsKHRoaXMsIHRoaXMuX2RhdGEsIHR5cGVzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgZnVuY3Rpb24gcnVuV2F0Y2hlcyhpbml0aWFsKSB7CiAgICAgICAgY29uc3QgewogICAgICAgICAgJG9wdGlvbnM6IHsgY29tcHV0ZWQgfSB9ID0KICAgICAgICB0aGlzOwogICAgICAgIGNvbnN0IHZhbHVlcyA9IHsgLi4udGhpcy5fY29tcHV0ZWQgfTsKICAgICAgICB0aGlzLl9jb21wdXRlZCA9IHt9OwoKICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjb21wdXRlZCkgewogICAgICAgICAgY29uc3QgeyB3YXRjaCwgaW1tZWRpYXRlIH0gPSBjb21wdXRlZFtrZXldOwogICAgICAgICAgaWYgKAogICAgICAgICAgd2F0Y2ggJiYgKAogICAgICAgICAgaW5pdGlhbCAmJiBpbW1lZGlhdGUgfHwKICAgICAgICAgIGhhc093bih2YWx1ZXMsIGtleSkgJiYgIWlzRXF1YWwodmFsdWVzW2tleV0sIHRoaXNba2V5XSkpKQogICAgICAgICAgewogICAgICAgICAgICB3YXRjaC5jYWxsKHRoaXMsIHRoaXNba2V5XSwgdmFsdWVzW2tleV0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHN0YXRlQVBJIChVSWtpdCkgewogICAgICBsZXQgdWlkID0gMDsKCiAgICAgIFVJa2l0LnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgb3B0aW9ucy5kYXRhID0gbm9ybWFsaXplRGF0YShvcHRpb25zLCB0aGlzLmNvbnN0cnVjdG9yLm9wdGlvbnMpOwoKICAgICAgICB0aGlzLiRvcHRpb25zID0gbWVyZ2VPcHRpb25zKHRoaXMuY29uc3RydWN0b3Iub3B0aW9ucywgb3B0aW9ucywgdGhpcyk7CiAgICAgICAgdGhpcy4kZWwgPSBudWxsOwogICAgICAgIHRoaXMuJHByb3BzID0ge307CgogICAgICAgIHRoaXMuX3VpZCA9IHVpZCsrOwogICAgICAgIHRoaXMuX2luaXREYXRhKCk7CiAgICAgICAgdGhpcy5faW5pdE1ldGhvZHMoKTsKICAgICAgICB0aGlzLl9pbml0Q29tcHV0ZWRzKCk7CiAgICAgICAgdGhpcy5fY2FsbEhvb2soJ2NyZWF0ZWQnKTsKCiAgICAgICAgaWYgKG9wdGlvbnMuZWwpIHsKICAgICAgICAgIHRoaXMuJG1vdW50KG9wdGlvbnMuZWwpOwogICAgICAgIH0KICAgICAgfTsKCiAgICAgIFVJa2l0LnByb3RvdHlwZS5faW5pdERhdGEgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgY29uc3QgeyBkYXRhID0ge30gfSA9IHRoaXMuJG9wdGlvbnM7CgogICAgICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHsKICAgICAgICAgIHRoaXMuJHByb3BzW2tleV0gPSB0aGlzW2tleV0gPSBkYXRhW2tleV07CiAgICAgICAgfQogICAgICB9OwoKICAgICAgVUlraXQucHJvdG90eXBlLl9pbml0TWV0aG9kcyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBjb25zdCB7IG1ldGhvZHMgfSA9IHRoaXMuJG9wdGlvbnM7CgogICAgICAgIGlmIChtZXRob2RzKSB7CiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBtZXRob2RzKSB7CiAgICAgICAgICAgIHRoaXNba2V5XSA9IG1ldGhvZHNba2V5XS5iaW5kKHRoaXMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKCiAgICAgIFVJa2l0LnByb3RvdHlwZS5faW5pdENvbXB1dGVkcyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBjb25zdCB7IGNvbXB1dGVkIH0gPSB0aGlzLiRvcHRpb25zOwoKICAgICAgICB0aGlzLl9jb21wdXRlZCA9IHt9OwoKICAgICAgICBpZiAoY29tcHV0ZWQpIHsKICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbXB1dGVkKSB7CiAgICAgICAgICAgIHJlZ2lzdGVyQ29tcHV0ZWQodGhpcywga2V5LCBjb21wdXRlZFtrZXldKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CgogICAgICBVSWtpdC5wcm90b3R5cGUuX2luaXRQcm9wcyA9IGZ1bmN0aW9uIChwcm9wcykgewogICAgICAgIGxldCBrZXk7CgogICAgICAgIHByb3BzID0gcHJvcHMgfHwgZ2V0UHJvcHMkMSh0aGlzLiRvcHRpb25zLCB0aGlzLiRuYW1lKTsKCiAgICAgICAgZm9yIChrZXkgaW4gcHJvcHMpIHsKICAgICAgICAgIGlmICghaXNVbmRlZmluZWQocHJvcHNba2V5XSkpIHsKICAgICAgICAgICAgdGhpcy4kcHJvcHNba2V5XSA9IHByb3BzW2tleV07CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBjb25zdCBleGNsdWRlID0gW3RoaXMuJG9wdGlvbnMuY29tcHV0ZWQsIHRoaXMuJG9wdGlvbnMubWV0aG9kc107CiAgICAgICAgZm9yIChrZXkgaW4gdGhpcy4kcHJvcHMpIHsKICAgICAgICAgIGlmIChrZXkgaW4gcHJvcHMgJiYgbm90SW4oZXhjbHVkZSwga2V5KSkgewogICAgICAgICAgICB0aGlzW2tleV0gPSB0aGlzLiRwcm9wc1trZXldOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKCiAgICAgIFVJa2l0LnByb3RvdHlwZS5faW5pdEV2ZW50cyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlzLl9ldmVudHMgPSBbXTsKICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIHRoaXMuJG9wdGlvbnMuZXZlbnRzIHx8IFtdKSB7CiAgICAgICAgICBpZiAoaGFzT3duKGV2ZW50LCAnaGFuZGxlcicpKSB7CiAgICAgICAgICAgIHJlZ2lzdGVyRXZlbnQodGhpcywgZXZlbnQpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHsKICAgICAgICAgICAgICByZWdpc3RlckV2ZW50KHRoaXMsIGV2ZW50W2tleV0sIGtleSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CgogICAgICBVSWtpdC5wcm90b3R5cGUuX3VuYmluZEV2ZW50cyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlzLl9ldmVudHMuZm9yRWFjaCgodW5iaW5kKSA9PiB1bmJpbmQoKSk7CiAgICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50czsKICAgICAgfTsKCiAgICAgIFVJa2l0LnByb3RvdHlwZS5faW5pdE9ic2VydmVycyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlzLl9vYnNlcnZlcnMgPSBbaW5pdFByb3BzT2JzZXJ2ZXIodGhpcyldOwoKICAgICAgICBpZiAodGhpcy4kb3B0aW9ucy5jb21wdXRlZCkgewogICAgICAgICAgdGhpcy5yZWdpc3Rlck9ic2VydmVyKGluaXRDaGlsZExpc3RPYnNlcnZlcih0aGlzKSk7CiAgICAgICAgfQogICAgICB9OwoKICAgICAgVUlraXQucHJvdG90eXBlLnJlZ2lzdGVyT2JzZXJ2ZXIgPSBmdW5jdGlvbiAob2JzZXJ2ZXIpIHsKICAgICAgICB0aGlzLl9vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7CiAgICAgIH07CgogICAgICBVSWtpdC5wcm90b3R5cGUuX2Rpc2Nvbm5lY3RPYnNlcnZlcnMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdGhpcy5fb2JzZXJ2ZXJzLmZvckVhY2goKG9ic2VydmVyKSA9PiBvYnNlcnZlciA9PSBudWxsID8gdm9pZCAwIDogb2JzZXJ2ZXIuZGlzY29ubmVjdCgpKTsKICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRQcm9wcyQxKG9wdHMsIG5hbWUpIHsKICAgICAgY29uc3QgZGF0YSQxID0ge307CiAgICAgIGNvbnN0IHsgYXJncyA9IFtdLCBwcm9wcyA9IHt9LCBlbCB9ID0gb3B0czsKCiAgICAgIGlmICghcHJvcHMpIHsKICAgICAgICByZXR1cm4gZGF0YSQxOwogICAgICB9CgogICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wcykgewogICAgICAgIGNvbnN0IHByb3AgPSBoeXBoZW5hdGUoa2V5KTsKICAgICAgICBsZXQgdmFsdWUgPSBkYXRhKGVsLCBwcm9wKTsKCiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICB2YWx1ZSA9IHByb3BzW2tleV0gPT09IEJvb2xlYW4gJiYgdmFsdWUgPT09ICcnID8gdHJ1ZSA6IGNvZXJjZSQxKHByb3BzW2tleV0sIHZhbHVlKTsKCiAgICAgICAgaWYgKHByb3AgPT09ICd0YXJnZXQnICYmIHN0YXJ0c1dpdGgodmFsdWUsICdfJykpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgZGF0YSQxW2tleV0gPSB2YWx1ZTsKICAgICAgfQoKICAgICAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlT3B0aW9ucyhkYXRhKGVsLCBuYW1lKSwgYXJncyk7CgogICAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgcHJvcCA9IGNhbWVsaXplKGtleSk7CiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChwcm9wc1twcm9wXSkpIHsKICAgICAgICAgIGRhdGEkMVtwcm9wXSA9IGNvZXJjZSQxKHByb3BzW3Byb3BdLCBvcHRpb25zW2tleV0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIGRhdGEkMTsKICAgIH0KCiAgICBmdW5jdGlvbiByZWdpc3RlckNvbXB1dGVkKGNvbXBvbmVudCwga2V5LCBjYikgewogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29tcG9uZW50LCBrZXksIHsKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAoKICAgICAgICBnZXQoKSB7CiAgICAgICAgICBjb25zdCB7IF9jb21wdXRlZCwgJHByb3BzLCAkZWwgfSA9IGNvbXBvbmVudDsKCiAgICAgICAgICBpZiAoIWhhc093bihfY29tcHV0ZWQsIGtleSkpIHsKICAgICAgICAgICAgX2NvbXB1dGVkW2tleV0gPSAoY2IuZ2V0IHx8IGNiKS5jYWxsKGNvbXBvbmVudCwgJHByb3BzLCAkZWwpOwogICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiBfY29tcHV0ZWRba2V5XTsKICAgICAgICB9LAoKICAgICAgICBzZXQodmFsdWUpIHsKICAgICAgICAgIGNvbnN0IHsgX2NvbXB1dGVkIH0gPSBjb21wb25lbnQ7CgogICAgICAgICAgX2NvbXB1dGVkW2tleV0gPSBjYi5zZXQgPyBjYi5zZXQuY2FsbChjb21wb25lbnQsIHZhbHVlKSA6IHZhbHVlOwoKICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChfY29tcHV0ZWRba2V5XSkpIHsKICAgICAgICAgICAgZGVsZXRlIF9jb21wdXRlZFtrZXldOwogICAgICAgICAgfQogICAgICAgIH0gfSk7CgogICAgfQoKICAgIGZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnQoY29tcG9uZW50LCBldmVudCwga2V5KSB7CiAgICAgIGlmICghaXNQbGFpbk9iamVjdChldmVudCkpIHsKICAgICAgICBldmVudCA9IHsgbmFtZToga2V5LCBoYW5kbGVyOiBldmVudCB9OwogICAgICB9CgogICAgICBsZXQgeyBuYW1lLCBlbCwgaGFuZGxlciwgY2FwdHVyZSwgcGFzc2l2ZSwgZGVsZWdhdGUsIGZpbHRlciwgc2VsZiB9ID0gZXZlbnQ7CiAgICAgIGVsID0gaXNGdW5jdGlvbihlbCkgPyBlbC5jYWxsKGNvbXBvbmVudCkgOiBlbCB8fCBjb21wb25lbnQuJGVsOwoKICAgICAgaWYgKGlzQXJyYXkoZWwpKSB7CiAgICAgICAgZWwuZm9yRWFjaCgoZWwpID0+IHJlZ2lzdGVyRXZlbnQoY29tcG9uZW50LCB7IC4uLmV2ZW50LCBlbCB9LCBrZXkpKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGlmICghZWwgfHwgZmlsdGVyICYmICFmaWx0ZXIuY2FsbChjb21wb25lbnQpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBjb21wb25lbnQuX2V2ZW50cy5wdXNoKAogICAgICBvbigKICAgICAgZWwsCiAgICAgIG5hbWUsCiAgICAgIGRlbGVnYXRlID8gaXNTdHJpbmcoZGVsZWdhdGUpID8gZGVsZWdhdGUgOiBkZWxlZ2F0ZS5jYWxsKGNvbXBvbmVudCkgOiBudWxsLAogICAgICBpc1N0cmluZyhoYW5kbGVyKSA/IGNvbXBvbmVudFtoYW5kbGVyXSA6IGhhbmRsZXIuYmluZChjb21wb25lbnQpLAogICAgICB7IHBhc3NpdmUsIGNhcHR1cmUsIHNlbGYgfSkpOwoKCiAgICB9CgogICAgZnVuY3Rpb24gbm90SW4ob3B0aW9ucywga2V5KSB7CiAgICAgIHJldHVybiBvcHRpb25zLmV2ZXJ5KChhcnIpID0+ICFhcnIgfHwgIWhhc093bihhcnIsIGtleSkpOwogICAgfQoKICAgIGZ1bmN0aW9uIGNvZXJjZSQxKHR5cGUsIHZhbHVlKSB7CiAgICAgIGlmICh0eXBlID09PSBCb29sZWFuKSB7CiAgICAgICAgcmV0dXJuIHRvQm9vbGVhbih2YWx1ZSk7CiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gTnVtYmVyKSB7CiAgICAgICAgcmV0dXJuIHRvTnVtYmVyKHZhbHVlKTsKICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnbGlzdCcpIHsKICAgICAgICByZXR1cm4gdG9MaXN0KHZhbHVlKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHR5cGUgPyB0eXBlKHZhbHVlKSA6IHZhbHVlOwogICAgfQoKICAgIGZ1bmN0aW9uIHRvTGlzdCh2YWx1ZSkgewogICAgICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgPwogICAgICB2YWx1ZSA6CiAgICAgIGlzU3RyaW5nKHZhbHVlKSA/CiAgICAgIHZhbHVlLgogICAgICBzcGxpdCgvLCg/IVteKF0qXCkpLykuCiAgICAgIG1hcCgodmFsdWUpID0+IGlzTnVtZXJpYyh2YWx1ZSkgPyB0b051bWJlcih2YWx1ZSkgOiB0b0Jvb2xlYW4odmFsdWUudHJpbSgpKSkgOgogICAgICBbdmFsdWVdOwogICAgfQoKICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZURhdGEoX3JlZiwgX3JlZjIpIHtsZXQgeyBkYXRhID0ge30gfSA9IF9yZWY7bGV0IHsgYXJncyA9IFtdLCBwcm9wcyA9IHt9IH0gPSBfcmVmMjsKICAgICAgaWYgKGlzQXJyYXkoZGF0YSkpIHsKICAgICAgICBkYXRhID0gZGF0YS5zbGljZSgwLCBhcmdzLmxlbmd0aCkucmVkdWNlKChkYXRhLCB2YWx1ZSwgaW5kZXgpID0+IHsKICAgICAgICAgIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkgewogICAgICAgICAgICBhc3NpZ24oZGF0YSwgdmFsdWUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZGF0YVthcmdzW2luZGV4XV0gPSB2YWx1ZTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgIH0sIHt9KTsKICAgICAgfQoKICAgICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkgewogICAgICAgIGlmIChpc1VuZGVmaW5lZChkYXRhW2tleV0pKSB7CiAgICAgICAgICBkZWxldGUgZGF0YVtrZXldOwogICAgICAgIH0gZWxzZSBpZiAocHJvcHNba2V5XSkgewogICAgICAgICAgZGF0YVtrZXldID0gY29lcmNlJDEocHJvcHNba2V5XSwgZGF0YVtrZXldKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiBkYXRhOwogICAgfQoKICAgIGZ1bmN0aW9uIGluaXRDaGlsZExpc3RPYnNlcnZlcihjb21wb25lbnQpIHsKICAgICAgY29uc3QgeyBlbCB9ID0gY29tcG9uZW50LiRvcHRpb25zOwoKICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiBjb21wb25lbnQuJGVtaXQoKSk7CiAgICAgIG9ic2VydmVyLm9ic2VydmUoZWwsIHsKICAgICAgICBjaGlsZExpc3Q6IHRydWUsCiAgICAgICAgc3VidHJlZTogdHJ1ZSB9KTsKCgogICAgICByZXR1cm4gb2JzZXJ2ZXI7CiAgICB9CgogICAgZnVuY3Rpb24gaW5pdFByb3BzT2JzZXJ2ZXIoY29tcG9uZW50KSB7CiAgICAgIGNvbnN0IHsgJG5hbWUsICRvcHRpb25zLCAkcHJvcHMgfSA9IGNvbXBvbmVudDsKICAgICAgY29uc3QgeyBhdHRycywgcHJvcHMsIGVsIH0gPSAkb3B0aW9uczsKCiAgICAgIGlmICghcHJvcHMgfHwgYXR0cnMgPT09IGZhbHNlKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBjb25zdCBhdHRyaWJ1dGVzID0gaXNBcnJheShhdHRycykgPyBhdHRycyA6IE9iamVjdC5rZXlzKHByb3BzKTsKICAgICAgY29uc3QgZmlsdGVyID0gYXR0cmlidXRlcy5tYXAoKGtleSkgPT4gaHlwaGVuYXRlKGtleSkpLmNvbmNhdCgkbmFtZSk7CgogICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChyZWNvcmRzKSA9PiB7CiAgICAgICAgY29uc3QgZGF0YSA9IGdldFByb3BzJDEoJG9wdGlvbnMsICRuYW1lKTsKICAgICAgICBpZiAoCiAgICAgICAgcmVjb3Jkcy5zb21lKChfcmVmMykgPT4ge2xldCB7IGF0dHJpYnV0ZU5hbWUgfSA9IF9yZWYzOwogICAgICAgICAgY29uc3QgcHJvcCA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZSgnZGF0YS0nLCAnJyk7CiAgICAgICAgICByZXR1cm4gKAogICAgICAgICAgcHJvcCA9PT0gJG5hbWUgPyBhdHRyaWJ1dGVzIDogW2NhbWVsaXplKHByb3ApLCBjYW1lbGl6ZShhdHRyaWJ1dGVOYW1lKV0pLgogICAgICAgICAgc29tZSgocHJvcCkgPT4gIWlzVW5kZWZpbmVkKGRhdGFbcHJvcF0pICYmIGRhdGFbcHJvcF0gIT09ICRwcm9wc1twcm9wXSk7CiAgICAgICAgfSkpCiAgICAgICAgewogICAgICAgICAgY29tcG9uZW50LiRyZXNldCgpOwogICAgICAgIH0KICAgICAgfSk7CgogICAgICBvYnNlcnZlci5vYnNlcnZlKGVsLCB7CiAgICAgICAgYXR0cmlidXRlczogdHJ1ZSwKICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IGZpbHRlci5jb25jYXQoZmlsdGVyLm1hcCgoa2V5KSA9PiAiZGF0YS0iICsga2V5KSkgfSk7CgoKICAgICAgcmV0dXJuIG9ic2VydmVyOwogICAgfQoKICAgIGZ1bmN0aW9uIGluc3RhbmNlQVBJIChVSWtpdCkgewogICAgICBjb25zdCBEQVRBID0gVUlraXQuZGF0YTsKCiAgICAgIFVJa2l0LnByb3RvdHlwZS4kY3JlYXRlID0gZnVuY3Rpb24gKGNvbXBvbmVudCwgZWxlbWVudCwgZGF0YSkgewogICAgICAgIHJldHVybiBVSWtpdFtjb21wb25lbnRdKGVsZW1lbnQsIGRhdGEpOwogICAgICB9OwoKICAgICAgVUlraXQucHJvdG90eXBlLiRtb3VudCA9IGZ1bmN0aW9uIChlbCkgewogICAgICAgIGNvbnN0IHsgbmFtZSB9ID0gdGhpcy4kb3B0aW9uczsKCiAgICAgICAgaWYgKCFlbFtEQVRBXSkgewogICAgICAgICAgZWxbREFUQV0gPSB7fTsKICAgICAgICB9CgogICAgICAgIGlmIChlbFtEQVRBXVtuYW1lXSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgZWxbREFUQV1bbmFtZV0gPSB0aGlzOwoKICAgICAgICB0aGlzLiRlbCA9IHRoaXMuJG9wdGlvbnMuZWwgPSB0aGlzLiRvcHRpb25zLmVsIHx8IGVsOwoKICAgICAgICBpZiAod2l0aGluKGVsLCBkb2N1bWVudCkpIHsKICAgICAgICAgIHRoaXMuX2NhbGxDb25uZWN0ZWQoKTsKICAgICAgICB9CiAgICAgIH07CgogICAgICBVSWtpdC5wcm90b3R5cGUuJHJlc2V0ID0gZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXMuX2NhbGxEaXNjb25uZWN0ZWQoKTsKICAgICAgICB0aGlzLl9jYWxsQ29ubmVjdGVkKCk7CiAgICAgIH07CgogICAgICBVSWtpdC5wcm90b3R5cGUuJGRlc3Ryb3kgPSBmdW5jdGlvbiAocmVtb3ZlRWwpIHtpZiAocmVtb3ZlRWwgPT09IHZvaWQgMCkge3JlbW92ZUVsID0gZmFsc2U7fQogICAgICAgIGNvbnN0IHsgZWwsIG5hbWUgfSA9IHRoaXMuJG9wdGlvbnM7CgogICAgICAgIGlmIChlbCkgewogICAgICAgICAgdGhpcy5fY2FsbERpc2Nvbm5lY3RlZCgpOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5fY2FsbEhvb2soJ2Rlc3Ryb3knKTsKCiAgICAgICAgaWYgKCEoZWwgIT0gbnVsbCAmJiBlbFtEQVRBXSkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGRlbGV0ZSBlbFtEQVRBXVtuYW1lXTsKCiAgICAgICAgaWYgKCFpc0VtcHR5KGVsW0RBVEFdKSkgewogICAgICAgICAgZGVsZXRlIGVsW0RBVEFdOwogICAgICAgIH0KCiAgICAgICAgaWYgKHJlbW92ZUVsKSB7CiAgICAgICAgICByZW1vdmUkMSh0aGlzLiRlbCk7CiAgICAgICAgfQogICAgICB9OwoKICAgICAgVUlraXQucHJvdG90eXBlLiRlbWl0ID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICB0aGlzLl9jYWxsVXBkYXRlKGUpOwogICAgICB9OwoKICAgICAgVUlraXQucHJvdG90eXBlLiR1cGRhdGUgPSBmdW5jdGlvbiAoZWxlbWVudCwgZSkge2lmIChlbGVtZW50ID09PSB2b2lkIDApIHtlbGVtZW50ID0gdGhpcy4kZWw7fQogICAgICAgIFVJa2l0LnVwZGF0ZShlbGVtZW50LCBlKTsKICAgICAgfTsKCiAgICAgIFVJa2l0LnByb3RvdHlwZS4kZ2V0Q29tcG9uZW50ID0gVUlraXQuZ2V0Q29tcG9uZW50OwoKICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9IG1lbW9pemUoKG5hbWUpID0+IFVJa2l0LnByZWZpeCArIGh5cGhlbmF0ZShuYW1lKSk7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFVJa2l0LnByb3RvdHlwZSwgewogICAgICAgICRjb250YWluZXI6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVUlraXQsICdjb250YWluZXInKSwKCiAgICAgICAgJG5hbWU6IHsKICAgICAgICAgIGdldCgpIHsKICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudE5hbWUodGhpcy4kb3B0aW9ucy5uYW1lKTsKICAgICAgICAgIH0gfSB9KTsKCgogICAgfQoKICAgIGZ1bmN0aW9uIGNvbXBvbmVudEFQSSAoVUlraXQpIHsKICAgICAgY29uc3QgREFUQSA9IFVJa2l0LmRhdGE7CgogICAgICBjb25zdCBjb21wb25lbnRzID0ge307CgogICAgICBVSWtpdC5jb21wb25lbnQgPSBmdW5jdGlvbiAobmFtZSwgb3B0aW9ucykgewogICAgICAgIGNvbnN0IGlkID0gaHlwaGVuYXRlKG5hbWUpOwoKICAgICAgICBuYW1lID0gY2FtZWxpemUoaWQpOwoKICAgICAgICBpZiAoIW9wdGlvbnMpIHsKICAgICAgICAgIGlmIChpc1BsYWluT2JqZWN0KGNvbXBvbmVudHNbbmFtZV0pKSB7CiAgICAgICAgICAgIGNvbXBvbmVudHNbbmFtZV0gPSBVSWtpdC5leHRlbmQoY29tcG9uZW50c1tuYW1lXSk7CiAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHNbbmFtZV07CiAgICAgICAgfQoKICAgICAgICBVSWtpdFtuYW1lXSA9IGZ1bmN0aW9uIChlbGVtZW50LCBkYXRhKSB7CiAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBVSWtpdC5jb21wb25lbnQobmFtZSk7CgogICAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5vcHRpb25zLmZ1bmN0aW9uYWwgPwogICAgICAgICAgbmV3IGNvbXBvbmVudCh7IGRhdGE6IGlzUGxhaW5PYmplY3QoZWxlbWVudCkgPyBlbGVtZW50IDogWy4uLmFyZ3VtZW50c10gfSkgOgogICAgICAgICAgZWxlbWVudCA/CiAgICAgICAgICAkJChlbGVtZW50KS5tYXAoaW5pdClbMF0gOgogICAgICAgICAgaW5pdCgpOwoKICAgICAgICAgIGZ1bmN0aW9uIGluaXQoZWxlbWVudCkgewogICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IFVJa2l0LmdldENvbXBvbmVudChlbGVtZW50LCBuYW1lKTsKCiAgICAgICAgICAgIGlmIChpbnN0YW5jZSkgewogICAgICAgICAgICAgIGlmIChkYXRhKSB7CiAgICAgICAgICAgICAgICBpbnN0YW5jZS4kZGVzdHJveSgpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gbmV3IGNvbXBvbmVudCh7IGVsOiBlbGVtZW50LCBkYXRhIH0pOwogICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIGNvbnN0IG9wdCA9IGlzUGxhaW5PYmplY3Qob3B0aW9ucykgPyB7IC4uLm9wdGlvbnMgfSA6IG9wdGlvbnMub3B0aW9uczsKCiAgICAgICAgb3B0Lm5hbWUgPSBuYW1lOwoKICAgICAgICBvcHQuaW5zdGFsbCA9PSBudWxsID8gdm9pZCAwIDogb3B0Lmluc3RhbGwoVUlraXQsIG9wdCwgbmFtZSk7CgogICAgICAgIGlmIChVSWtpdC5faW5pdGlhbGl6ZWQgJiYgIW9wdC5mdW5jdGlvbmFsKSB7CiAgICAgICAgICBmYXN0ZG9tLnJlYWQoKCkgPT4gVUlraXRbbmFtZV0oIlt1ay0iICsgaWQgKyAiXSxbZGF0YS11ay0iICsgaWQgKyAiXSIpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBjb21wb25lbnRzW25hbWVdID0gaXNQbGFpbk9iamVjdChvcHRpb25zKSA/IG9wdCA6IG9wdGlvbnM7CiAgICAgIH07CgogICAgICBVSWtpdC5nZXRDb21wb25lbnRzID0gKGVsZW1lbnQpID0+IChlbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBlbGVtZW50W0RBVEFdKSB8fCB7fTsKICAgICAgVUlraXQuZ2V0Q29tcG9uZW50ID0gKGVsZW1lbnQsIG5hbWUpID0+IFVJa2l0LmdldENvbXBvbmVudHMoZWxlbWVudClbbmFtZV07CgogICAgICBVSWtpdC5jb25uZWN0ID0gKG5vZGUpID0+IHsKICAgICAgICBpZiAobm9kZVtEQVRBXSkgewogICAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIG5vZGVbREFUQV0pIHsKICAgICAgICAgICAgbm9kZVtEQVRBXVtuYW1lXS5fY2FsbENvbm5lY3RlZCgpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2Ygbm9kZS5hdHRyaWJ1dGVzKSB7CiAgICAgICAgICBjb25zdCBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShhdHRyaWJ1dGUubmFtZSk7CgogICAgICAgICAgaWYgKG5hbWUgJiYgbmFtZSBpbiBjb21wb25lbnRzKSB7CiAgICAgICAgICAgIFVJa2l0W25hbWVdKG5vZGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKCiAgICAgIFVJa2l0LmRpc2Nvbm5lY3QgPSAobm9kZSkgPT4gewogICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBub2RlW0RBVEFdKSB7CiAgICAgICAgICBub2RlW0RBVEFdW25hbWVdLl9jYWxsRGlzY29ubmVjdGVkKCk7CiAgICAgICAgfQogICAgICB9OwogICAgfQoKICAgIGNvbnN0IGdldENvbXBvbmVudE5hbWUgPSBtZW1vaXplKChhdHRyaWJ1dGUpID0+IHsKICAgICAgcmV0dXJuIHN0YXJ0c1dpdGgoYXR0cmlidXRlLCAndWstJykgfHwgc3RhcnRzV2l0aChhdHRyaWJ1dGUsICdkYXRhLXVrLScpID8KICAgICAgY2FtZWxpemUoYXR0cmlidXRlLnJlcGxhY2UoJ2RhdGEtdWstJywgJycpLnJlcGxhY2UoJ3VrLScsICcnKSkgOgogICAgICBmYWxzZTsKICAgIH0pOwoKICAgIGNvbnN0IFVJa2l0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgICAgdGhpcy5faW5pdChvcHRpb25zKTsKICAgIH07CgogICAgVUlraXQudXRpbCA9IHV0aWw7CiAgICBVSWtpdC5kYXRhID0gJ19fdWlraXRfXyc7CiAgICBVSWtpdC5wcmVmaXggPSAndWstJzsKICAgIFVJa2l0Lm9wdGlvbnMgPSB7fTsKICAgIFVJa2l0LnZlcnNpb24gPSAnMy4xNS4xJzsKCiAgICBnbG9iYWxBUEkoVUlraXQpOwogICAgaG9va3NBUEkoVUlraXQpOwogICAgc3RhdGVBUEkoVUlraXQpOwogICAgY29tcG9uZW50QVBJKFVJa2l0KTsKICAgIGluc3RhbmNlQVBJKFVJa2l0KTsKCiAgICBmdW5jdGlvbiBib290IChVSWtpdCkgewogICAgICBjb25zdCB7IGNvbm5lY3QsIGRpc2Nvbm5lY3QgfSA9IFVJa2l0OwoKICAgICAgaWYgKCFpbkJyb3dzZXIgfHwgIXdpbmRvdy5NdXRhdGlvbk9ic2VydmVyKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBmYXN0ZG9tLnJlYWQoZnVuY3Rpb24gKCkgewogICAgICAgIGlmIChkb2N1bWVudC5ib2R5KSB7CiAgICAgICAgICBhcHBseShkb2N1bWVudC5ib2R5LCBjb25uZWN0KTsKICAgICAgICB9CgogICAgICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKChyZWNvcmRzKSA9PiByZWNvcmRzLmZvckVhY2goYXBwbHlDaGlsZExpc3RNdXRhdGlvbikpLm9ic2VydmUoCiAgICAgICAgZG9jdW1lbnQsCiAgICAgICAgewogICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLAogICAgICAgICAgc3VidHJlZTogdHJ1ZSB9KTsKCgoKICAgICAgICBuZXcgTXV0YXRpb25PYnNlcnZlcigocmVjb3JkcykgPT4gcmVjb3Jkcy5mb3JFYWNoKGFwcGx5QXR0cmlidXRlTXV0YXRpb24pKS5vYnNlcnZlKAogICAgICAgIGRvY3VtZW50LAogICAgICAgIHsKICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsCiAgICAgICAgICBzdWJ0cmVlOiB0cnVlIH0pOwoKCgogICAgICAgIFVJa2l0Ll9pbml0aWFsaXplZCA9IHRydWU7CiAgICAgIH0pOwoKICAgICAgZnVuY3Rpb24gYXBwbHlDaGlsZExpc3RNdXRhdGlvbihfcmVmKSB7bGV0IHsgYWRkZWROb2RlcywgcmVtb3ZlZE5vZGVzIH0gPSBfcmVmOwogICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBhZGRlZE5vZGVzKSB7CiAgICAgICAgICBhcHBseShub2RlLCBjb25uZWN0KTsKICAgICAgICB9CgogICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiByZW1vdmVkTm9kZXMpIHsKICAgICAgICAgIGFwcGx5KG5vZGUsIGRpc2Nvbm5lY3QpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgZnVuY3Rpb24gYXBwbHlBdHRyaWJ1dGVNdXRhdGlvbihfcmVmMikge3ZhciBfVUlraXQkZ2V0Q29tcG9uZW50O2xldCB7IHRhcmdldCwgYXR0cmlidXRlTmFtZSB9ID0gX3JlZjI7CiAgICAgICAgY29uc3QgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoYXR0cmlidXRlTmFtZSk7CgogICAgICAgIGlmICghbmFtZSB8fCAhKG5hbWUgaW4gVUlraXQpKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoaGFzQXR0cih0YXJnZXQsIGF0dHJpYnV0ZU5hbWUpKSB7CiAgICAgICAgICBVSWtpdFtuYW1lXSh0YXJnZXQpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgKF9VSWtpdCRnZXRDb21wb25lbnQgPSBVSWtpdC5nZXRDb21wb25lbnQodGFyZ2V0LCBuYW1lKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9VSWtpdCRnZXRDb21wb25lbnQuJGRlc3Ryb3koKTsKICAgICAgfQogICAgfQoKICAgIHZhciBDbGFzcyA9IHsKICAgICAgY29ubmVjdGVkKCkgewogICAgICAgICFoYXNDbGFzcyh0aGlzLiRlbCwgdGhpcy4kbmFtZSkgJiYgYWRkQ2xhc3ModGhpcy4kZWwsIHRoaXMuJG5hbWUpOwogICAgICB9IH07CgogICAgdmFyIExhenlsb2FkID0gewogICAgICBkYXRhOiB7CiAgICAgICAgcHJlbG9hZDogNSB9LAoKCiAgICAgIG1ldGhvZHM6IHsKICAgICAgICBsYXp5bG9hZChvYnNlcnZlVGFyZ2V0cywgdGFyZ2V0cykge2lmIChvYnNlcnZlVGFyZ2V0cyA9PT0gdm9pZCAwKSB7b2JzZXJ2ZVRhcmdldHMgPSB0aGlzLiRlbDt9aWYgKHRhcmdldHMgPT09IHZvaWQgMCkge3RhcmdldHMgPSB0aGlzLiRlbDt9CiAgICAgICAgICB0aGlzLnJlZ2lzdGVyT2JzZXJ2ZXIoCiAgICAgICAgICBvYnNlcnZlSW50ZXJzZWN0aW9uKG9ic2VydmVUYXJnZXRzLCAoZW50cmllcywgb2JzZXJ2ZXIpID0+IHsKICAgICAgICAgICAgZm9yIChjb25zdCBlbCBvZiB0b05vZGVzKGlzRnVuY3Rpb24odGFyZ2V0cykgPyB0YXJnZXRzKCkgOiB0YXJnZXRzKSkgewogICAgICAgICAgICAgICQkKCdbbG9hZGluZz0ibGF6eSJdJywgZWwpLgogICAgICAgICAgICAgIHNsaWNlKDAsIHRoaXMucHJlbG9hZCAtIDEpLgogICAgICAgICAgICAgIGZvckVhY2goKGVsKSA9PiByZW1vdmVBdHRyKGVsLCAnbG9hZGluZycpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIChjb25zdCBlbCBvZiBlbnRyaWVzLgogICAgICAgICAgICBmaWx0ZXIoKF9yZWYpID0+IHtsZXQgeyBpc0ludGVyc2VjdGluZyB9ID0gX3JlZjtyZXR1cm4gaXNJbnRlcnNlY3Rpbmc7fSkuCiAgICAgICAgICAgIG1hcCgoX3JlZjIpID0+IHtsZXQgeyB0YXJnZXQgfSA9IF9yZWYyO3JldHVybiB0YXJnZXQ7fSkpIHsKICAgICAgICAgICAgICBvYnNlcnZlci51bm9ic2VydmUoZWwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KSk7CgogICAgICAgIH0gfSB9OwoKICAgIHZhciBUb2dnbGFibGUgPSB7CiAgICAgIHByb3BzOiB7CiAgICAgICAgY2xzOiBCb29sZWFuLAogICAgICAgIGFuaW1hdGlvbjogJ2xpc3QnLAogICAgICAgIGR1cmF0aW9uOiBOdW1iZXIsCiAgICAgICAgdmVsb2NpdHk6IE51bWJlciwKICAgICAgICBvcmlnaW46IFN0cmluZywKICAgICAgICB0cmFuc2l0aW9uOiBTdHJpbmcgfSwKCgogICAgICBkYXRhOiB7CiAgICAgICAgY2xzOiBmYWxzZSwKICAgICAgICBhbmltYXRpb246IFtmYWxzZV0sCiAgICAgICAgZHVyYXRpb246IDIwMCwKICAgICAgICB2ZWxvY2l0eTogMC4yLAogICAgICAgIG9yaWdpbjogZmFsc2UsCiAgICAgICAgdHJhbnNpdGlvbjogJ2Vhc2UnLAogICAgICAgIGNsc0VudGVyOiAndWstdG9nZ2xhYmUtZW50ZXInLAogICAgICAgIGNsc0xlYXZlOiAndWstdG9nZ2xhYmUtbGVhdmUnIH0sCgoKICAgICAgY29tcHV0ZWQ6IHsKICAgICAgICBoYXNBbmltYXRpb24oX3JlZikge2xldCB7IGFuaW1hdGlvbiB9ID0gX3JlZjsKICAgICAgICAgIHJldHVybiAhIWFuaW1hdGlvblswXTsKICAgICAgICB9LAoKICAgICAgICBoYXNUcmFuc2l0aW9uKF9yZWYyKSB7bGV0IHsgYW5pbWF0aW9uIH0gPSBfcmVmMjsKICAgICAgICAgIHJldHVybiBbJ3NsaWRlJywgJ3JldmVhbCddLnNvbWUoKHRyYW5zaXRpb24pID0+IHN0YXJ0c1dpdGgoYW5pbWF0aW9uWzBdLCB0cmFuc2l0aW9uKSk7CiAgICAgICAgfSB9LAoKCiAgICAgIG1ldGhvZHM6IHsKICAgICAgICB0b2dnbGVFbGVtZW50KHRhcmdldHMsIHRvZ2dsZSwgYW5pbWF0ZSkgewogICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PgogICAgICAgICAgUHJvbWlzZS5hbGwoCiAgICAgICAgICB0b05vZGVzKHRhcmdldHMpLm1hcCgoZWwpID0+IHsKICAgICAgICAgICAgY29uc3Qgc2hvdyA9IGlzQm9vbGVhbih0b2dnbGUpID8gdG9nZ2xlIDogIXRoaXMuaXNUb2dnbGVkKGVsKTsKCiAgICAgICAgICAgIGlmICghdHJpZ2dlcihlbCwgImJlZm9yZSIgKyAoc2hvdyA/ICdzaG93JyA6ICdoaWRlJyksIFt0aGlzXSkpIHsKICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9ICgKICAgICAgICAgICAgaXNGdW5jdGlvbihhbmltYXRlKSA/CiAgICAgICAgICAgIGFuaW1hdGUgOgogICAgICAgICAgICBhbmltYXRlID09PSBmYWxzZSB8fCAhdGhpcy5oYXNBbmltYXRpb24gPwogICAgICAgICAgICB0b2dnbGVJbnN0YW50KHRoaXMpIDoKICAgICAgICAgICAgdGhpcy5oYXNUcmFuc2l0aW9uID8KICAgICAgICAgICAgdG9nZ2xlVHJhbnNpdGlvbih0aGlzKSA6CiAgICAgICAgICAgIHRvZ2dsZUFuaW1hdGlvbih0aGlzKSkoCiAgICAgICAgICAgIGVsLCBzaG93KTsKCiAgICAgICAgICAgIGNvbnN0IGNscyA9IHNob3cgPyB0aGlzLmNsc0VudGVyIDogdGhpcy5jbHNMZWF2ZTsKCiAgICAgICAgICAgIGFkZENsYXNzKGVsLCBjbHMpOwoKICAgICAgICAgICAgdHJpZ2dlcihlbCwgc2hvdyA/ICdzaG93JyA6ICdoaWRlJywgW3RoaXNdKTsKCiAgICAgICAgICAgIGNvbnN0IGRvbmUgPSAoKSA9PiB7CiAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3MoZWwsIGNscyk7CiAgICAgICAgICAgICAgdHJpZ2dlcihlbCwgc2hvdyA/ICdzaG93bicgOiAnaGlkZGVuJywgW3RoaXNdKTsKICAgICAgICAgICAgICB0aGlzLiR1cGRhdGUoZWwpOwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgcmV0dXJuIHByb21pc2UgPwogICAgICAgICAgICBwcm9taXNlLnRoZW4oZG9uZSwgKCkgPT4gewogICAgICAgICAgICAgIHJlbW92ZUNsYXNzKGVsLCBjbHMpOwogICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpOwogICAgICAgICAgICB9KSA6CiAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgIH0pKS4KICAgICAgICAgIHRoZW4ocmVzb2x2ZSwgbm9vcCkpOwoKICAgICAgICB9LAoKICAgICAgICBpc1RvZ2dsZWQoZWwpIHtpZiAoZWwgPT09IHZvaWQgMCkge2VsID0gdGhpcy4kZWw7fQogICAgICAgICAgW2VsXSA9IHRvTm9kZXMoZWwpOwogICAgICAgICAgcmV0dXJuIGhhc0NsYXNzKGVsLCB0aGlzLmNsc0VudGVyKSA/CiAgICAgICAgICB0cnVlIDoKICAgICAgICAgIGhhc0NsYXNzKGVsLCB0aGlzLmNsc0xlYXZlKSA/CiAgICAgICAgICBmYWxzZSA6CiAgICAgICAgICB0aGlzLmNscyA/CiAgICAgICAgICBoYXNDbGFzcyhlbCwgdGhpcy5jbHMuc3BsaXQoJyAnKVswXSkgOgogICAgICAgICAgaXNWaXNpYmxlKGVsKTsKICAgICAgICB9LAoKICAgICAgICBfdG9nZ2xlKGVsLCB0b2dnbGVkKSB7CiAgICAgICAgICBpZiAoIWVsKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICB0b2dnbGVkID0gQm9vbGVhbih0b2dnbGVkKTsKCiAgICAgICAgICBsZXQgY2hhbmdlZDsKICAgICAgICAgIGlmICh0aGlzLmNscykgewogICAgICAgICAgICBjaGFuZ2VkID0gaW5jbHVkZXModGhpcy5jbHMsICcgJykgfHwgdG9nZ2xlZCAhPT0gaGFzQ2xhc3MoZWwsIHRoaXMuY2xzKTsKICAgICAgICAgICAgY2hhbmdlZCAmJiB0b2dnbGVDbGFzcyhlbCwgdGhpcy5jbHMsIGluY2x1ZGVzKHRoaXMuY2xzLCAnICcpID8gdW5kZWZpbmVkIDogdG9nZ2xlZCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjaGFuZ2VkID0gdG9nZ2xlZCA9PT0gZWwuaGlkZGVuOwogICAgICAgICAgICBjaGFuZ2VkICYmIChlbC5oaWRkZW4gPSAhdG9nZ2xlZCk7CiAgICAgICAgICB9CgogICAgICAgICAgJCQoJ1thdXRvZm9jdXNdJywgZWwpLnNvbWUoKGVsKSA9PiBpc1Zpc2libGUoZWwpID8gZWwuZm9jdXMoKSB8fCB0cnVlIDogZWwuYmx1cigpKTsKCiAgICAgICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICAgICB0cmlnZ2VyKGVsLCAndG9nZ2xlZCcsIFt0b2dnbGVkLCB0aGlzXSk7CiAgICAgICAgICAgIHRoaXMuJHVwZGF0ZShlbCk7CiAgICAgICAgICB9CiAgICAgICAgfSB9IH07CgoKCiAgICBmdW5jdGlvbiB0b2dnbGVJbnN0YW50KF9yZWYzKSB7bGV0IHsgX3RvZ2dsZSB9ID0gX3JlZjM7CiAgICAgIHJldHVybiAoZWwsIHNob3cpID0+IHsKICAgICAgICBBbmltYXRpb24uY2FuY2VsKGVsKTsKICAgICAgICBUcmFuc2l0aW9uLmNhbmNlbChlbCk7CiAgICAgICAgcmV0dXJuIF90b2dnbGUoZWwsIHNob3cpOwogICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIHRvZ2dsZVRyYW5zaXRpb24oY21wKSB7dmFyIF9jbXAkYW5pbWF0aW9uJDsKICAgICAgY29uc3QgW21vZGUgPSAncmV2ZWFsJywgc3RhcnRQcm9wID0gJ3RvcCddID0gKChfY21wJGFuaW1hdGlvbiQgPSBjbXAuYW5pbWF0aW9uWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX2NtcCRhbmltYXRpb24kLnNwbGl0KCctJykpIHx8IFtdOwoKICAgICAgY29uc3QgZGlycyA9IFsKICAgICAgWydsZWZ0JywgJ3JpZ2h0J10sCiAgICAgIFsndG9wJywgJ2JvdHRvbSddXTsKCiAgICAgIGNvbnN0IGRpciA9IGRpcnNbaW5jbHVkZXMoZGlyc1swXSwgc3RhcnRQcm9wKSA/IDAgOiAxXTsKICAgICAgY29uc3QgZW5kID0gZGlyWzFdID09PSBzdGFydFByb3A7CiAgICAgIGNvbnN0IHByb3BzID0gWyd3aWR0aCcsICdoZWlnaHQnXTsKICAgICAgY29uc3QgZGltUHJvcCA9IHByb3BzW2RpcnMuaW5kZXhPZihkaXIpXTsKICAgICAgY29uc3QgbWFyZ2luUHJvcCA9ICJtYXJnaW4tIiArIGRpclswXTsKICAgICAgY29uc3QgbWFyZ2luU3RhcnRQcm9wID0gIm1hcmdpbi0iICsgc3RhcnRQcm9wOwoKICAgICAgcmV0dXJuIGFzeW5jIChlbCwgc2hvdykgPT4gewogICAgICAgIGxldCB7IGR1cmF0aW9uLCB2ZWxvY2l0eSwgdHJhbnNpdGlvbiwgX3RvZ2dsZSB9ID0gY21wOwoKICAgICAgICBsZXQgY3VycmVudERpbSA9IGRpbWVuc2lvbnMkMShlbClbZGltUHJvcF07CgogICAgICAgIGNvbnN0IGluUHJvZ3Jlc3MgPSBUcmFuc2l0aW9uLmluUHJvZ3Jlc3MoZWwpOwogICAgICAgIGF3YWl0IFRyYW5zaXRpb24uY2FuY2VsKGVsKTsKCiAgICAgICAgaWYgKHNob3cpIHsKICAgICAgICAgIF90b2dnbGUoZWwsIHRydWUpOwogICAgICAgIH0KCiAgICAgICAgY29uc3QgcHJldlByb3BzID0gT2JqZWN0LmZyb21FbnRyaWVzKAogICAgICAgIFsKICAgICAgICAncGFkZGluZycsCiAgICAgICAgJ2JvcmRlcicsCiAgICAgICAgJ3dpZHRoJywKICAgICAgICAnaGVpZ2h0JywKICAgICAgICAnb3ZlcmZsb3dZJywKICAgICAgICAnb3ZlcmZsb3dYJywKICAgICAgICBtYXJnaW5Qcm9wLAogICAgICAgIG1hcmdpblN0YXJ0UHJvcF0uCiAgICAgICAgbWFwKChrZXkpID0+IFtrZXksIGVsLnN0eWxlW2tleV1dKSk7CgoKICAgICAgICBjb25zdCBkaW0gPSBkaW1lbnNpb25zJDEoZWwpOwogICAgICAgIGNvbnN0IGN1cnJlbnRNYXJnaW4gPSB0b0Zsb2F0KGNzcyhlbCwgbWFyZ2luUHJvcCkpOwogICAgICAgIGNvbnN0IG1hcmdpblN0YXJ0ID0gdG9GbG9hdChjc3MoZWwsIG1hcmdpblN0YXJ0UHJvcCkpOwogICAgICAgIGNvbnN0IGVuZERpbSA9IGRpbVtkaW1Qcm9wXSArIG1hcmdpblN0YXJ0OwoKICAgICAgICBpZiAoIWluUHJvZ3Jlc3MgJiYgIXNob3cpIHsKICAgICAgICAgIGN1cnJlbnREaW0gKz0gbWFyZ2luU3RhcnQ7CiAgICAgICAgfQoKICAgICAgICBjb25zdCBbd3JhcHBlcl0gPSB3cmFwSW5uZXIoZWwsICc8ZGl2PicpOwogICAgICAgIGNzcyh3cmFwcGVyLCB7CiAgICAgICAgICBib3hTaXppbmc6ICdib3JkZXItYm94JywKICAgICAgICAgIGhlaWdodDogZGltLmhlaWdodCwKICAgICAgICAgIHdpZHRoOiBkaW0ud2lkdGgsCiAgICAgICAgICAuLi5jc3MoZWwsIFsKICAgICAgICAgICdvdmVyZmxvdycsCiAgICAgICAgICAncGFkZGluZycsCiAgICAgICAgICAnYm9yZGVyVG9wJywKICAgICAgICAgICdib3JkZXJSaWdodCcsCiAgICAgICAgICAnYm9yZGVyQm90dG9tJywKICAgICAgICAgICdib3JkZXJMZWZ0JywKICAgICAgICAgICdib3JkZXJJbWFnZScsCiAgICAgICAgICBtYXJnaW5TdGFydFByb3BdKSB9KTsKCgoKICAgICAgICBjc3MoZWwsIHsKICAgICAgICAgIHBhZGRpbmc6IDAsCiAgICAgICAgICBib3JkZXI6IDAsCiAgICAgICAgICBtaW5XaWR0aDogMCwKICAgICAgICAgIG1pbkhlaWdodDogMCwKICAgICAgICAgIFttYXJnaW5TdGFydFByb3BdOiAwLAogICAgICAgICAgd2lkdGg6IGRpbS53aWR0aCwKICAgICAgICAgIGhlaWdodDogZGltLmhlaWdodCwKICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJywKICAgICAgICAgIFtkaW1Qcm9wXTogY3VycmVudERpbSB9KTsKCgogICAgICAgIGNvbnN0IHBlcmNlbnQgPSBjdXJyZW50RGltIC8gZW5kRGltOwogICAgICAgIGR1cmF0aW9uID0gKHZlbG9jaXR5ICogZW5kRGltICsgZHVyYXRpb24pICogKHNob3cgPyAxIC0gcGVyY2VudCA6IHBlcmNlbnQpOwogICAgICAgIGNvbnN0IGVuZFByb3BzID0geyBbZGltUHJvcF06IHNob3cgPyBlbmREaW0gOiAwIH07CgogICAgICAgIGlmIChlbmQpIHsKICAgICAgICAgIGNzcyhlbCwgbWFyZ2luUHJvcCwgZW5kRGltIC0gY3VycmVudERpbSArIGN1cnJlbnRNYXJnaW4pOwogICAgICAgICAgZW5kUHJvcHNbbWFyZ2luUHJvcF0gPSBzaG93ID8gY3VycmVudE1hcmdpbiA6IGVuZERpbSArIGN1cnJlbnRNYXJnaW47CiAgICAgICAgfQoKICAgICAgICBpZiAoIWVuZCBeIG1vZGUgPT09ICdyZXZlYWwnKSB7CiAgICAgICAgICBjc3Mod3JhcHBlciwgbWFyZ2luUHJvcCwgLWVuZERpbSArIGN1cnJlbnREaW0pOwogICAgICAgICAgVHJhbnNpdGlvbi5zdGFydCh3cmFwcGVyLCB7IFttYXJnaW5Qcm9wXTogc2hvdyA/IDAgOiAtZW5kRGltIH0sIGR1cmF0aW9uLCB0cmFuc2l0aW9uKTsKICAgICAgICB9CgogICAgICAgIHRyeSB7CiAgICAgICAgICBhd2FpdCBUcmFuc2l0aW9uLnN0YXJ0KGVsLCBlbmRQcm9wcywgZHVyYXRpb24sIHRyYW5zaXRpb24pOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICBjc3MoZWwsIHByZXZQcm9wcyk7CiAgICAgICAgICB1bndyYXAod3JhcHBlci5maXJzdENoaWxkKTsKCiAgICAgICAgICBpZiAoIXNob3cpIHsKICAgICAgICAgICAgX3RvZ2dsZShlbCwgZmFsc2UpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiB0b2dnbGVBbmltYXRpb24oY21wKSB7CiAgICAgIHJldHVybiAoZWwsIHNob3cpID0+IHsKICAgICAgICBBbmltYXRpb24uY2FuY2VsKGVsKTsKCiAgICAgICAgY29uc3QgeyBhbmltYXRpb24sIGR1cmF0aW9uLCBfdG9nZ2xlIH0gPSBjbXA7CgogICAgICAgIGlmIChzaG93KSB7CiAgICAgICAgICBfdG9nZ2xlKGVsLCB0cnVlKTsKICAgICAgICAgIHJldHVybiBBbmltYXRpb24uaW4oZWwsIGFuaW1hdGlvblswXSwgZHVyYXRpb24sIGNtcC5vcmlnaW4pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIEFuaW1hdGlvbi5vdXQoZWwsIGFuaW1hdGlvblsxXSB8fCBhbmltYXRpb25bMF0sIGR1cmF0aW9uLCBjbXAub3JpZ2luKS50aGVuKCgpID0+CiAgICAgICAgX3RvZ2dsZShlbCwgZmFsc2UpKTsKCiAgICAgIH07CiAgICB9CgogICAgdmFyIEFjY29yZGlvbiA9IHsKICAgICAgbWl4aW5zOiBbQ2xhc3MsIExhenlsb2FkLCBUb2dnbGFibGVdLAoKICAgICAgcHJvcHM6IHsKICAgICAgICBhbmltYXRpb246IEJvb2xlYW4sCiAgICAgICAgdGFyZ2V0czogU3RyaW5nLAogICAgICAgIGFjdGl2ZTogbnVsbCwKICAgICAgICBjb2xsYXBzaWJsZTogQm9vbGVhbiwKICAgICAgICBtdWx0aXBsZTogQm9vbGVhbiwKICAgICAgICB0b2dnbGU6IFN0cmluZywKICAgICAgICBjb250ZW50OiBTdHJpbmcsCiAgICAgICAgb2Zmc2V0OiBOdW1iZXIgfSwKCgogICAgICBkYXRhOiB7CiAgICAgICAgdGFyZ2V0czogJz4gKicsCiAgICAgICAgYWN0aXZlOiBmYWxzZSwKICAgICAgICBhbmltYXRpb246IHRydWUsCiAgICAgICAgY29sbGFwc2libGU6IHRydWUsCiAgICAgICAgbXVsdGlwbGU6IGZhbHNlLAogICAgICAgIGNsc09wZW46ICd1ay1vcGVuJywKICAgICAgICB0b2dnbGU6ICc+IC51ay1hY2NvcmRpb24tdGl0bGUnLAogICAgICAgIGNvbnRlbnQ6ICc+IC51ay1hY2NvcmRpb24tY29udGVudCcsCiAgICAgICAgb2Zmc2V0OiAwIH0sCgoKICAgICAgY29tcHV0ZWQ6IHsKICAgICAgICBpdGVtczogewogICAgICAgICAgZ2V0KF9yZWYsICRlbCkge2xldCB7IHRhcmdldHMgfSA9IF9yZWY7CiAgICAgICAgICAgIHJldHVybiAkJCh0YXJnZXRzLCAkZWwpOwogICAgICAgICAgfSwKCiAgICAgICAgICB3YXRjaChpdGVtcywgcHJldikgewogICAgICAgICAgICBpZiAocHJldiB8fCBoYXNDbGFzcyhpdGVtcywgdGhpcy5jbHNPcGVuKSkgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29uc3QgYWN0aXZlID0KICAgICAgICAgICAgdGhpcy5hY3RpdmUgIT09IGZhbHNlICYmIGl0ZW1zW051bWJlcih0aGlzLmFjdGl2ZSldIHx8CiAgICAgICAgICAgICF0aGlzLmNvbGxhcHNpYmxlICYmIGl0ZW1zWzBdOwoKICAgICAgICAgICAgaWYgKGFjdGl2ZSkgewogICAgICAgICAgICAgIHRoaXMudG9nZ2xlKGFjdGl2ZSwgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAoKICAgICAgICAgIGltbWVkaWF0ZTogdHJ1ZSB9LAoKCiAgICAgICAgdG9nZ2xlcyhfcmVmMikge2xldCB7IHRvZ2dsZSB9ID0gX3JlZjI7CiAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5tYXAoKGl0ZW0pID0+ICQodG9nZ2xlLCBpdGVtKSk7CiAgICAgICAgfSwKCiAgICAgICAgY29udGVudHM6IHsKICAgICAgICAgIGdldChfcmVmMykge2xldCB7IGNvbnRlbnQgfSA9IF9yZWYzOwogICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5tYXAoKGl0ZW0pID0+ICQoY29udGVudCwgaXRlbSkpOwogICAgICAgICAgfSwKCiAgICAgICAgICB3YXRjaChpdGVtcykgewogICAgICAgICAgICBmb3IgKGNvbnN0IGVsIG9mIGl0ZW1zKSB7CiAgICAgICAgICAgICAgaGlkZSgKICAgICAgICAgICAgICBlbCwKICAgICAgICAgICAgICAhaGFzQ2xhc3MoCiAgICAgICAgICAgICAgdGhpcy5pdGVtcy5maW5kKChpdGVtKSA9PiB3aXRoaW4oZWwsIGl0ZW0pKSwKICAgICAgICAgICAgICB0aGlzLmNsc09wZW4pKTsKCgogICAgICAgICAgICB9CiAgICAgICAgICB9LAoKICAgICAgICAgIGltbWVkaWF0ZTogdHJ1ZSB9IH0sCgoKCiAgICAgIGNvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLmxhenlsb2FkKCk7CiAgICAgIH0sCgogICAgICBldmVudHM6IFsKICAgICAgewogICAgICAgIG5hbWU6ICdjbGljaycsCgogICAgICAgIGRlbGVnYXRlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0cyArICIgIiArIHRoaXMuJHByb3BzLnRvZ2dsZTsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGVyKGUpIHsKICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMudG9nZ2xlKGluZGV4KHRoaXMudG9nZ2xlcywgZS5jdXJyZW50KSk7CiAgICAgICAgfSB9XSwKCgoKICAgICAgbWV0aG9kczogewogICAgICAgIHRvZ2dsZShpdGVtLCBhbmltYXRlKSB7CiAgICAgICAgICBsZXQgaXRlbXMgPSBbdGhpcy5pdGVtc1tnZXRJbmRleChpdGVtLCB0aGlzLml0ZW1zKV1dOwogICAgICAgICAgY29uc3QgYWN0aXZlSXRlbXMgPSBmaWx0ZXIkMSh0aGlzLml0ZW1zLCAiLiIgKyB0aGlzLmNsc09wZW4pOwoKICAgICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSAmJiAhaW5jbHVkZXMoYWN0aXZlSXRlbXMsIGl0ZW1zWzBdKSkgewogICAgICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdChhY3RpdmVJdGVtcyk7CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKAogICAgICAgICAgIXRoaXMuY29sbGFwc2libGUgJiYKICAgICAgICAgIGFjdGl2ZUl0ZW1zLmxlbmd0aCA8IDIgJiYKICAgICAgICAgICFmaWx0ZXIkMShpdGVtcywgIjpub3QoLiIgKyB0aGlzLmNsc09wZW4gKyAiKSIpLmxlbmd0aCkKICAgICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGZvciAoY29uc3QgZWwgb2YgaXRlbXMpIHsKICAgICAgICAgICAgdGhpcy50b2dnbGVFbGVtZW50KGVsLCAhaGFzQ2xhc3MoZWwsIHRoaXMuY2xzT3BlbiksIGFzeW5jIChlbCwgc2hvdykgPT4gewogICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKGVsLCB0aGlzLmNsc09wZW4sIHNob3cpOwogICAgICAgICAgICAgIGF0dHIoJCh0aGlzLiRwcm9wcy50b2dnbGUsIGVsKSwgJ2FyaWEtZXhwYW5kZWQnLCBzaG93KTsKCiAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9ICQodGhpcy5jb250ZW50LCBlbCk7CgogICAgICAgICAgICAgIGlmIChhbmltYXRlID09PSBmYWxzZSB8fCAhdGhpcy5hbmltYXRpb24pIHsKICAgICAgICAgICAgICAgIGNvbnRlbnQuaGlkZGVuID0gIXNob3c7CiAgICAgICAgICAgICAgICBoaWRlKGNvbnRlbnQsICFzaG93KTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIGF3YWl0IHRvZ2dsZVRyYW5zaXRpb24odGhpcykoY29udGVudCwgc2hvdyk7CgogICAgICAgICAgICAgIGlmIChzaG93KSB7CiAgICAgICAgICAgICAgICBjb25zdCB0b2dnbGUgPSAkKHRoaXMuJHByb3BzLnRvZ2dsZSwgZWwpOwogICAgICAgICAgICAgICAgZmFzdGRvbS5yZWFkKCgpID0+IHsKICAgICAgICAgICAgICAgICAgaWYgKCFpc0luVmlldyh0b2dnbGUpKSB7CiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsSW50b1ZpZXcodG9nZ2xlLCB7IG9mZnNldDogdGhpcy5vZmZzZXQgfSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfSB9IH07CgoKCiAgICBmdW5jdGlvbiBoaWRlKGVsLCBoaWRlKSB7CiAgICAgIGVsICYmIChlbC5oaWRkZW4gPSBoaWRlKTsKICAgIH0KCiAgICB2YXIgYWxlcnQgPSB7CiAgICAgIG1peGluczogW0NsYXNzLCBUb2dnbGFibGVdLAoKICAgICAgYXJnczogJ2FuaW1hdGlvbicsCgogICAgICBwcm9wczogewogICAgICAgIGFuaW1hdGlvbjogQm9vbGVhbiwKICAgICAgICBjbG9zZTogU3RyaW5nIH0sCgoKICAgICAgZGF0YTogewogICAgICAgIGFuaW1hdGlvbjogdHJ1ZSwKICAgICAgICBzZWxDbG9zZTogJy51ay1hbGVydC1jbG9zZScsCiAgICAgICAgZHVyYXRpb246IDE1MCB9LAoKCiAgICAgIGV2ZW50czogewogICAgICAgIG5hbWU6ICdjbGljaycsCgogICAgICAgIGRlbGVnYXRlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuc2VsQ2xvc2U7CiAgICAgICAgfSwKCiAgICAgICAgaGFuZGxlcihlKSB7CiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB0aGlzLmNsb3NlKCk7CiAgICAgICAgfSB9LAoKCiAgICAgIG1ldGhvZHM6IHsKICAgICAgICBhc3luYyBjbG9zZSgpIHsKICAgICAgICAgIGF3YWl0IHRoaXMudG9nZ2xlRWxlbWVudCh0aGlzLiRlbCwgZmFsc2UsIGFuaW1hdGUkMSh0aGlzKSk7CiAgICAgICAgICB0aGlzLiRkZXN0cm95KHRydWUpOwogICAgICAgIH0gfSB9OwoKCgogICAgZnVuY3Rpb24gYW5pbWF0ZSQxKF9yZWYpIHtsZXQgeyBkdXJhdGlvbiwgdHJhbnNpdGlvbiwgdmVsb2NpdHkgfSA9IF9yZWY7CiAgICAgIHJldHVybiAoZWwpID0+IHsKICAgICAgICBjb25zdCBoZWlnaHQgPSB0b0Zsb2F0KGNzcyhlbCwgJ2hlaWdodCcpKTsKICAgICAgICBjc3MoZWwsICdoZWlnaHQnLCBoZWlnaHQpOwogICAgICAgIHJldHVybiBUcmFuc2l0aW9uLnN0YXJ0KAogICAgICAgIGVsLAogICAgICAgIHsKICAgICAgICAgIGhlaWdodDogMCwKICAgICAgICAgIG1hcmdpblRvcDogMCwKICAgICAgICAgIG1hcmdpbkJvdHRvbTogMCwKICAgICAgICAgIHBhZGRpbmdUb3A6IDAsCiAgICAgICAgICBwYWRkaW5nQm90dG9tOiAwLAogICAgICAgICAgYm9yZGVyVG9wOiAwLAogICAgICAgICAgYm9yZGVyQm90dG9tOiAwLAogICAgICAgICAgb3BhY2l0eTogMCB9LAoKICAgICAgICB2ZWxvY2l0eSAqIGhlaWdodCArIGR1cmF0aW9uLAogICAgICAgIHRyYW5zaXRpb24pOwoKICAgICAgfTsKICAgIH0KCiAgICB2YXIgVmlkZW8gPSB7CiAgICAgIGFyZ3M6ICdhdXRvcGxheScsCgogICAgICBwcm9wczogewogICAgICAgIGF1dG9tdXRlOiBCb29sZWFuLAogICAgICAgIGF1dG9wbGF5OiBCb29sZWFuIH0sCgoKICAgICAgZGF0YTogewogICAgICAgIGF1dG9tdXRlOiBmYWxzZSwKICAgICAgICBhdXRvcGxheTogdHJ1ZSB9LAoKCiAgICAgIGNvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLmluVmlldyA9IHRoaXMuYXV0b3BsYXkgPT09ICdpbnZpZXcnOwoKICAgICAgICBpZiAodGhpcy5pblZpZXcgJiYgIWhhc0F0dHIodGhpcy4kZWwsICdwcmVsb2FkJykpIHsKICAgICAgICAgIHRoaXMuJGVsLnByZWxvYWQgPSAnbm9uZSc7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNUYWcodGhpcy4kZWwsICdpZnJhbWUnKSAmJiAhaGFzQXR0cih0aGlzLiRlbCwgJ2FsbG93JykpIHsKICAgICAgICAgIHRoaXMuJGVsLmFsbG93ID0gJ2F1dG9wbGF5JzsKICAgICAgICB9CgogICAgICAgIGlmICh0aGlzLmF1dG9tdXRlKSB7CiAgICAgICAgICBtdXRlKHRoaXMuJGVsKTsKICAgICAgICB9CgogICAgICAgIHRoaXMucmVnaXN0ZXJPYnNlcnZlcihvYnNlcnZlSW50ZXJzZWN0aW9uKHRoaXMuJGVsLCAoKSA9PiB0aGlzLiRlbWl0KCksIHt9LCBmYWxzZSkpOwogICAgICB9LAoKICAgICAgdXBkYXRlOiB7CiAgICAgICAgcmVhZCgpIHsKICAgICAgICAgIGlmICghaXNWaWRlbyh0aGlzLiRlbCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHZpc2libGU6IGlzVmlzaWJsZSh0aGlzLiRlbCkgJiYgY3NzKHRoaXMuJGVsLCAndmlzaWJpbGl0eScpICE9PSAnaGlkZGVuJywKICAgICAgICAgICAgaW5WaWV3OiB0aGlzLmluVmlldyAmJiBpc0luVmlldyh0aGlzLiRlbCkgfTsKCiAgICAgICAgfSwKCiAgICAgICAgd3JpdGUoX3JlZikge2xldCB7IHZpc2libGUsIGluVmlldyB9ID0gX3JlZjsKICAgICAgICAgIGlmICghdmlzaWJsZSB8fCB0aGlzLmluVmlldyAmJiAhaW5WaWV3KSB7CiAgICAgICAgICAgIHBhdXNlKHRoaXMuJGVsKTsKICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5hdXRvcGxheSA9PT0gdHJ1ZSB8fCB0aGlzLmluVmlldyAmJiBpblZpZXcpIHsKICAgICAgICAgICAgcGxheSh0aGlzLiRlbCk7CiAgICAgICAgICB9CiAgICAgICAgfSB9IH07CgogICAgdmFyIFJlc2l6ZSA9IHsKICAgICAgY29ubmVjdGVkKCkge3ZhciBfdGhpcyQkb3B0aW9ucyRyZXNpemU7CiAgICAgICAgdGhpcy5yZWdpc3Rlck9ic2VydmVyKAogICAgICAgIG9ic2VydmVSZXNpemUoKChfdGhpcyQkb3B0aW9ucyRyZXNpemUgPSB0aGlzLiRvcHRpb25zLnJlc2l6ZVRhcmdldHMpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpcyQkb3B0aW9ucyRyZXNpemUuY2FsbCh0aGlzKSkgfHwgdGhpcy4kZWwsICgpID0+CiAgICAgICAgdGhpcy4kZW1pdCgncmVzaXplJykpKTsKCgogICAgICB9IH07CgogICAgdmFyIGNvdmVyID0gewogICAgICBtaXhpbnM6IFtSZXNpemUsIFZpZGVvXSwKCiAgICAgIHByb3BzOiB7CiAgICAgICAgd2lkdGg6IE51bWJlciwKICAgICAgICBoZWlnaHQ6IE51bWJlciB9LAoKCiAgICAgIGRhdGE6IHsKICAgICAgICBhdXRvbXV0ZTogdHJ1ZSB9LAoKCiAgICAgIGV2ZW50czogewogICAgICAgICdsb2FkIGxvYWRlZG1ldGFkYXRhJygpIHsKICAgICAgICAgIHRoaXMuJGVtaXQoJ3Jlc2l6ZScpOwogICAgICAgIH0gfSwKCgogICAgICByZXNpemVUYXJnZXRzKCkgewogICAgICAgIHJldHVybiBbdGhpcy4kZWwsIHBhcmVudCh0aGlzLiRlbCldOwogICAgICB9LAoKICAgICAgdXBkYXRlOiB7CiAgICAgICAgcmVhZCgpIHsKICAgICAgICAgIGNvbnN0IHsgcmF0aW8sIGNvdmVyIH0gPSBEaW1lbnNpb25zOwogICAgICAgICAgY29uc3QgeyAkZWwsIHdpZHRoLCBoZWlnaHQgfSA9IHRoaXM7CgogICAgICAgICAgbGV0IGRpbSA9IHsgd2lkdGgsIGhlaWdodCB9OwoKICAgICAgICAgIGlmICghZGltLndpZHRoIHx8ICFkaW0uaGVpZ2h0KSB7CiAgICAgICAgICAgIGNvbnN0IGludHJpbnNpYyA9IHsKICAgICAgICAgICAgICB3aWR0aDogJGVsLm5hdHVyYWxXaWR0aCB8fCAkZWwudmlkZW9XaWR0aCB8fCAkZWwuY2xpZW50V2lkdGgsCiAgICAgICAgICAgICAgaGVpZ2h0OiAkZWwubmF0dXJhbEhlaWdodCB8fCAkZWwudmlkZW9IZWlnaHQgfHwgJGVsLmNsaWVudEhlaWdodCB9OwoKCiAgICAgICAgICAgIGlmIChkaW0ud2lkdGgpIHsKICAgICAgICAgICAgICBkaW0gPSByYXRpbyhpbnRyaW5zaWMsICd3aWR0aCcsIGRpbS53aWR0aCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaGVpZ2h0KSB7CiAgICAgICAgICAgICAgZGltID0gcmF0aW8oaW50cmluc2ljLCAnaGVpZ2h0JywgZGltLmhlaWdodCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgZGltID0gaW50cmluc2ljOwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgY29uc3QgeyBvZmZzZXRIZWlnaHQ6IGNvdmVySGVpZ2h0LCBvZmZzZXRXaWR0aDogY292ZXJXaWR0aCB9ID0KICAgICAgICAgIGdldFBvc2l0aW9uZWRQYXJlbnQoJGVsKSB8fCBwYXJlbnQoJGVsKTsKICAgICAgICAgIGNvbnN0IGNvdmVyRGltID0gY292ZXIoZGltLCB7CiAgICAgICAgICAgIHdpZHRoOiBjb3ZlcldpZHRoICsgKGNvdmVyV2lkdGggJSAyID8gMSA6IDApLAogICAgICAgICAgICBoZWlnaHQ6IGNvdmVySGVpZ2h0ICsgKGNvdmVySGVpZ2h0ICUgMiA/IDEgOiAwKSB9KTsKCgogICAgICAgICAgaWYgKCFjb3ZlckRpbS53aWR0aCB8fCAhY292ZXJEaW0uaGVpZ2h0KSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gY292ZXJEaW07CiAgICAgICAgfSwKCiAgICAgICAgd3JpdGUoX3JlZikge2xldCB7IGhlaWdodCwgd2lkdGggfSA9IF9yZWY7CiAgICAgICAgICBjc3ModGhpcy4kZWwsIHsgaGVpZ2h0LCB3aWR0aCB9KTsKICAgICAgICB9LAoKICAgICAgICBldmVudHM6IFsncmVzaXplJ10gfSB9OwoKCgogICAgZnVuY3Rpb24gZ2V0UG9zaXRpb25lZFBhcmVudChlbCkgewogICAgICB3aGlsZSAoZWwgPSBwYXJlbnQoZWwpKSB7CiAgICAgICAgaWYgKGNzcyhlbCwgJ3Bvc2l0aW9uJykgIT09ICdzdGF0aWMnKSB7CiAgICAgICAgICByZXR1cm4gZWw7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgdmFyIENvbnRhaW5lciA9IHsKICAgICAgcHJvcHM6IHsKICAgICAgICBjb250YWluZXI6IEJvb2xlYW4gfSwKCgogICAgICBkYXRhOiB7CiAgICAgICAgY29udGFpbmVyOiB0cnVlIH0sCgoKICAgICAgY29tcHV0ZWQ6IHsKICAgICAgICBjb250YWluZXIoX3JlZikge2xldCB7IGNvbnRhaW5lciB9ID0gX3JlZjsKICAgICAgICAgIHJldHVybiBjb250YWluZXIgPT09IHRydWUgJiYgdGhpcy4kY29udGFpbmVyIHx8IGNvbnRhaW5lciAmJiAkKGNvbnRhaW5lcik7CiAgICAgICAgfSB9IH07CgogICAgdmFyIFBvc2l0aW9uID0gewogICAgICBwcm9wczogewogICAgICAgIHBvczogU3RyaW5nLAogICAgICAgIG9mZnNldDogbnVsbCwKICAgICAgICBmbGlwOiBCb29sZWFuLAogICAgICAgIHNoaWZ0OiBCb29sZWFuLAogICAgICAgIGluc2V0OiBCb29sZWFuIH0sCgoKICAgICAgZGF0YTogewogICAgICAgIHBvczogImJvdHRvbS0iICsgKGlzUnRsID8gJ3JpZ2h0JyA6ICdsZWZ0JyksCiAgICAgICAgb2Zmc2V0OiBmYWxzZSwKICAgICAgICBmbGlwOiB0cnVlLAogICAgICAgIHNoaWZ0OiB0cnVlLAogICAgICAgIGluc2V0OiBmYWxzZSB9LAoKCiAgICAgIGNvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLnBvcyA9IHRoaXMuJHByb3BzLnBvcy5zcGxpdCgnLScpLmNvbmNhdCgnY2VudGVyJykuc2xpY2UoMCwgMik7CiAgICAgICAgW3RoaXMuZGlyLCB0aGlzLmFsaWduXSA9IHRoaXMucG9zOwogICAgICAgIHRoaXMuYXhpcyA9IGluY2x1ZGVzKFsndG9wJywgJ2JvdHRvbSddLCB0aGlzLmRpcikgPyAneScgOiAneCc7CiAgICAgIH0sCgogICAgICBtZXRob2RzOiB7CiAgICAgICAgcG9zaXRpb25BdChlbGVtZW50LCB0YXJnZXQsIGJvdW5kYXJ5KSB7CiAgICAgICAgICBsZXQgb2Zmc2V0ID0gW3RoaXMuZ2V0UG9zaXRpb25PZmZzZXQoZWxlbWVudCksIHRoaXMuZ2V0U2hpZnRPZmZzZXQoZWxlbWVudCldOwogICAgICAgICAgY29uc3QgcGxhY2VtZW50ID0gW3RoaXMuZmxpcCAmJiAnZmxpcCcsIHRoaXMuc2hpZnQgJiYgJ3NoaWZ0J107CgogICAgICAgICAgY29uc3QgYXR0YWNoID0gewogICAgICAgICAgICBlbGVtZW50OiBbdGhpcy5pbnNldCA/IHRoaXMuZGlyIDogZmxpcFBvc2l0aW9uKHRoaXMuZGlyKSwgdGhpcy5hbGlnbl0sCiAgICAgICAgICAgIHRhcmdldDogW3RoaXMuZGlyLCB0aGlzLmFsaWduXSB9OwoKCiAgICAgICAgICBpZiAodGhpcy5heGlzID09PSAneScpIHsKICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGF0dGFjaCkgewogICAgICAgICAgICAgIGF0dGFjaFtwcm9wXS5yZXZlcnNlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgb2Zmc2V0LnJldmVyc2UoKTsKICAgICAgICAgICAgcGxhY2VtZW50LnJldmVyc2UoKTsKICAgICAgICAgIH0KCiAgICAgICAgICBjb25zdCBbc2Nyb2xsRWxlbWVudF0gPSBzY3JvbGxQYXJlbnRzKGVsZW1lbnQsIC9hdXRvfHNjcm9sbC8pOwogICAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbExlZnQgfSA9IHNjcm9sbEVsZW1lbnQ7CgogICAgICAgICAgLy8gRW5zdXJlIG5vbmUgcG9zaXRpb25lZCBlbGVtZW50IGRvZXMgbm90IGdlbmVyYXRlIHNjcm9sbGJhcnMKICAgICAgICAgIGNvbnN0IGVsRGltID0gZGltZW5zaW9ucyQxKGVsZW1lbnQpOwogICAgICAgICAgY3NzKGVsZW1lbnQsIHsgdG9wOiAtZWxEaW0uaGVpZ2h0LCBsZWZ0OiAtZWxEaW0ud2lkdGggfSk7CgogICAgICAgICAgcG9zaXRpb25BdChlbGVtZW50LCB0YXJnZXQsIHsKICAgICAgICAgICAgYXR0YWNoLAogICAgICAgICAgICBvZmZzZXQsCiAgICAgICAgICAgIGJvdW5kYXJ5LAogICAgICAgICAgICBwbGFjZW1lbnQsCiAgICAgICAgICAgIHZpZXdwb3J0T2Zmc2V0OiB0aGlzLmdldFZpZXdwb3J0T2Zmc2V0KGVsZW1lbnQpIH0pOwoKCiAgICAgICAgICAvLyBSZXN0b3JlIHNjcm9sbCBwb3NpdGlvbgogICAgICAgICAgc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7CiAgICAgICAgICBzY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0OwogICAgICAgIH0sCgogICAgICAgIGdldFBvc2l0aW9uT2Zmc2V0KGVsZW1lbnQpIHsKICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgIHRvUHgoCiAgICAgICAgICAgIHRoaXMub2Zmc2V0ID09PSBmYWxzZSA/IGNzcyhlbGVtZW50LCAnLS11ay1wb3NpdGlvbi1vZmZzZXQnKSA6IHRoaXMub2Zmc2V0LAogICAgICAgICAgICB0aGlzLmF4aXMgPT09ICd4JyA/ICd3aWR0aCcgOiAnaGVpZ2h0JywKICAgICAgICAgICAgZWxlbWVudCkgKiAoCgogICAgICAgICAgICBpbmNsdWRlcyhbJ2xlZnQnLCAndG9wJ10sIHRoaXMuZGlyKSA/IC0xIDogMSkgKiAoCiAgICAgICAgICAgIHRoaXMuaW5zZXQgPyAtMSA6IDEpKTsKCiAgICAgICAgfSwKCiAgICAgICAgZ2V0U2hpZnRPZmZzZXQoZWxlbWVudCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuYWxpZ24gPT09ICdjZW50ZXInID8KICAgICAgICAgIDAgOgogICAgICAgICAgdG9QeCgKICAgICAgICAgIGNzcyhlbGVtZW50LCAnLS11ay1wb3NpdGlvbi1zaGlmdC1vZmZzZXQnKSwKICAgICAgICAgIHRoaXMuYXhpcyA9PT0gJ3knID8gJ3dpZHRoJyA6ICdoZWlnaHQnLAogICAgICAgICAgZWxlbWVudCkgKiAoCiAgICAgICAgICBpbmNsdWRlcyhbJ2xlZnQnLCAndG9wJ10sIHRoaXMuYWxpZ24pID8gMSA6IC0xKTsKICAgICAgICB9LAoKICAgICAgICBnZXRWaWV3cG9ydE9mZnNldChlbGVtZW50KSB7CiAgICAgICAgICByZXR1cm4gdG9QeChjc3MoZWxlbWVudCwgJy0tdWstcG9zaXRpb24tdmlld3BvcnQtb2Zmc2V0JykpOwogICAgICAgIH0gfSB9OwoKICAgIHZhciBTdHlsZSA9IHsKICAgICAgYmVmb3JlQ29ubmVjdCgpIHsKICAgICAgICB0aGlzLl9zdHlsZSA9IGF0dHIodGhpcy4kZWwsICdzdHlsZScpOwogICAgICB9LAoKICAgICAgZGlzY29ubmVjdGVkKCkgewogICAgICAgIGF0dHIodGhpcy4kZWwsICdzdHlsZScsIHRoaXMuX3N0eWxlKTsKICAgICAgfSB9OwoKICAgIGNvbnN0IGFjdGl2ZSQxID0gW107CgogICAgdmFyIE1vZGFsID0gewogICAgICBtaXhpbnM6IFtDbGFzcywgQ29udGFpbmVyLCBUb2dnbGFibGVdLAoKICAgICAgcHJvcHM6IHsKICAgICAgICBzZWxQYW5lbDogU3RyaW5nLAogICAgICAgIHNlbENsb3NlOiBTdHJpbmcsCiAgICAgICAgZXNjQ2xvc2U6IEJvb2xlYW4sCiAgICAgICAgYmdDbG9zZTogQm9vbGVhbiwKICAgICAgICBzdGFjazogQm9vbGVhbiB9LAoKCiAgICAgIGRhdGE6IHsKICAgICAgICBjbHM6ICd1ay1vcGVuJywKICAgICAgICBlc2NDbG9zZTogdHJ1ZSwKICAgICAgICBiZ0Nsb3NlOiB0cnVlLAogICAgICAgIG92ZXJsYXk6IHRydWUsCiAgICAgICAgc3RhY2s6IGZhbHNlIH0sCgoKICAgICAgY29tcHV0ZWQ6IHsKICAgICAgICBwYW5lbChfcmVmLCAkZWwpIHtsZXQgeyBzZWxQYW5lbCB9ID0gX3JlZjsKICAgICAgICAgIHJldHVybiAkKHNlbFBhbmVsLCAkZWwpOwogICAgICAgIH0sCgogICAgICAgIHRyYW5zaXRpb25FbGVtZW50KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMucGFuZWw7CiAgICAgICAgfSwKCiAgICAgICAgYmdDbG9zZShfcmVmMikge2xldCB7IGJnQ2xvc2UgfSA9IF9yZWYyOwogICAgICAgICAgcmV0dXJuIGJnQ2xvc2UgJiYgdGhpcy5wYW5lbDsKICAgICAgICB9IH0sCgoKICAgICAgYmVmb3JlRGlzY29ubmVjdCgpIHsKICAgICAgICBpZiAoaW5jbHVkZXMoYWN0aXZlJDEsIHRoaXMpKSB7CiAgICAgICAgICB0aGlzLnRvZ2dsZUVsZW1lbnQodGhpcy4kZWwsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgfQogICAgICB9LAoKICAgICAgZXZlbnRzOiBbCiAgICAgIHsKICAgICAgICBuYW1lOiAnY2xpY2snLAoKICAgICAgICBkZWxlZ2F0ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnNlbENsb3NlOwogICAgICAgIH0sCgogICAgICAgIGhhbmRsZXIoZSkgewogICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgfSB9LAoKCiAgICAgIHsKICAgICAgICBuYW1lOiAndG9nZ2xlJywKCiAgICAgICAgc2VsZjogdHJ1ZSwKCiAgICAgICAgaGFuZGxlcihlKSB7CiAgICAgICAgICBpZiAoZS5kZWZhdWx0UHJldmVudGVkKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CgogICAgICAgICAgaWYgKHRoaXMuaXNUb2dnbGVkKCkgPT09IGluY2x1ZGVzKGFjdGl2ZSQxLCB0aGlzKSkgewogICAgICAgICAgICB0aGlzLnRvZ2dsZSgpOwogICAgICAgICAgfQogICAgICAgIH0gfSwKCgogICAgICB7CiAgICAgICAgbmFtZTogJ2JlZm9yZXNob3cnLAoKICAgICAgICBzZWxmOiB0cnVlLAoKICAgICAgICBoYW5kbGVyKGUpIHsKICAgICAgICAgIGlmIChpbmNsdWRlcyhhY3RpdmUkMSwgdGhpcykpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQoKICAgICAgICAgIGlmICghdGhpcy5zdGFjayAmJiBhY3RpdmUkMS5sZW5ndGgpIHsKICAgICAgICAgICAgUHJvbWlzZS5hbGwoYWN0aXZlJDEubWFwKChtb2RhbCkgPT4gbW9kYWwuaGlkZSgpKSkudGhlbih0aGlzLnNob3cpOwogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhY3RpdmUkMS5wdXNoKHRoaXMpOwogICAgICAgICAgfQogICAgICAgIH0gfSwKCgogICAgICB7CiAgICAgICAgbmFtZTogJ3Nob3cnLAoKICAgICAgICBzZWxmOiB0cnVlLAoKICAgICAgICBoYW5kbGVyKCkgewogICAgICAgICAgb25jZSgKICAgICAgICAgIHRoaXMuJGVsLAogICAgICAgICAgJ2hpZGUnLAogICAgICAgICAgb24oZG9jdW1lbnQsICdmb2N1c2luJywgKGUpID0+IHsKICAgICAgICAgICAgaWYgKGxhc3QoYWN0aXZlJDEpID09PSB0aGlzICYmICF3aXRoaW4oZS50YXJnZXQsIHRoaXMuJGVsKSkgewogICAgICAgICAgICAgIHRoaXMuJGVsLmZvY3VzKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pKTsKCgogICAgICAgICAgaWYgKHRoaXMub3ZlcmxheSkgewogICAgICAgICAgICBvbmNlKHRoaXMuJGVsLCAnaGlkZGVuJywgcHJldmVudE92ZXJzY3JvbGwodGhpcy4kZWwpLCB7IHNlbGY6IHRydWUgfSk7CiAgICAgICAgICAgIG9uY2UodGhpcy4kZWwsICdoaWRkZW4nLCBwcmV2ZW50QmFja2dyb3VuZFNjcm9sbCgpLCB7IHNlbGY6IHRydWUgfSk7CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKHRoaXMuc3RhY2spIHsKICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCAnekluZGV4JywgdG9GbG9hdChjc3ModGhpcy4kZWwsICd6SW5kZXgnKSkgKyBhY3RpdmUkMS5sZW5ndGgpOwogICAgICAgICAgfQoKICAgICAgICAgIGFkZENsYXNzKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgdGhpcy5jbHNQYWdlKTsKCiAgICAgICAgICBpZiAodGhpcy5iZ0Nsb3NlKSB7CiAgICAgICAgICAgIG9uY2UoCiAgICAgICAgICAgIHRoaXMuJGVsLAogICAgICAgICAgICAnaGlkZScsCiAgICAgICAgICAgIG9uKGRvY3VtZW50LCBwb2ludGVyRG93biQxLCAoX3JlZjMpID0+IHtsZXQgeyB0YXJnZXQgfSA9IF9yZWYzOwogICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICBsYXN0KGFjdGl2ZSQxKSAhPT0gdGhpcyB8fAogICAgICAgICAgICAgIHRoaXMub3ZlcmxheSAmJiAhd2l0aGluKHRhcmdldCwgdGhpcy4kZWwpIHx8CiAgICAgICAgICAgICAgd2l0aGluKHRhcmdldCwgdGhpcy5wYW5lbCkpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgb25jZSgKICAgICAgICAgICAgICBkb2N1bWVudCwKICAgICAgICAgICAgICBwb2ludGVyVXAkMSArICIgIiArIHBvaW50ZXJDYW5jZWwgKyAiIHNjcm9sbCIsCiAgICAgICAgICAgICAgKF9yZWY0KSA9PiB7bGV0IHsgZGVmYXVsdFByZXZlbnRlZCwgdHlwZSwgdGFyZ2V0OiBuZXdUYXJnZXQgfSA9IF9yZWY0OwogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgIWRlZmF1bHRQcmV2ZW50ZWQgJiYKICAgICAgICAgICAgICAgIHR5cGUgPT09IHBvaW50ZXJVcCQxICYmCiAgICAgICAgICAgICAgICB0YXJnZXQgPT09IG5ld1RhcmdldCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB0cnVlKTsKCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICB7IHNlbGY6IHRydWUgfSk7CgogICAgICAgICAgfQoKICAgICAgICAgIGlmICh0aGlzLmVzY0Nsb3NlKSB7CiAgICAgICAgICAgIG9uY2UoCiAgICAgICAgICAgIHRoaXMuJGVsLAogICAgICAgICAgICAnaGlkZScsCiAgICAgICAgICAgIG9uKGRvY3VtZW50LCAna2V5ZG93bicsIChlKSA9PiB7CiAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMjcgJiYgbGFzdChhY3RpdmUkMSkgPT09IHRoaXMpIHsKICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSksCiAgICAgICAgICAgIHsgc2VsZjogdHJ1ZSB9KTsKCiAgICAgICAgICB9CiAgICAgICAgfSB9LAoKCiAgICAgIHsKICAgICAgICBuYW1lOiAnc2hvd24nLAoKICAgICAgICBzZWxmOiB0cnVlLAoKICAgICAgICBoYW5kbGVyKCkgewogICAgICAgICAgaWYgKCFpc0ZvY3VzYWJsZSh0aGlzLiRlbCkpIHsKICAgICAgICAgICAgYXR0cih0aGlzLiRlbCwgJ3RhYmluZGV4JywgJy0xJyk7CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKCEkKCc6Zm9jdXMnLCB0aGlzLiRlbCkpIHsKICAgICAgICAgICAgdGhpcy4kZWwuZm9jdXMoKTsKICAgICAgICAgIH0KICAgICAgICB9IH0sCgoKICAgICAgewogICAgICAgIG5hbWU6ICdoaWRkZW4nLAoKICAgICAgICBzZWxmOiB0cnVlLAoKICAgICAgICBoYW5kbGVyKCkgewogICAgICAgICAgaWYgKGluY2x1ZGVzKGFjdGl2ZSQxLCB0aGlzKSkgewogICAgICAgICAgICBhY3RpdmUkMS5zcGxpY2UoYWN0aXZlJDEuaW5kZXhPZih0aGlzKSwgMSk7CiAgICAgICAgICB9CgogICAgICAgICAgY3NzKHRoaXMuJGVsLCAnekluZGV4JywgJycpOwoKICAgICAgICAgIGlmICghYWN0aXZlJDEuc29tZSgobW9kYWwpID0+IG1vZGFsLmNsc1BhZ2UgPT09IHRoaXMuY2xzUGFnZSkpIHsKICAgICAgICAgICAgcmVtb3ZlQ2xhc3MoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB0aGlzLmNsc1BhZ2UpOwogICAgICAgICAgfQogICAgICAgIH0gfV0sCgoKCiAgICAgIG1ldGhvZHM6IHsKICAgICAgICB0b2dnbGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pc1RvZ2dsZWQoKSA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KCk7CiAgICAgICAgfSwKCiAgICAgICAgc2hvdygpIHsKICAgICAgICAgIGlmICh0aGlzLmNvbnRhaW5lciAmJiBwYXJlbnQodGhpcy4kZWwpICE9PSB0aGlzLmNvbnRhaW5lcikgewogICAgICAgICAgICBhcHBlbmQodGhpcy5jb250YWluZXIsIHRoaXMuJGVsKTsKICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PgogICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5zaG93KCkudGhlbihyZXNvbHZlKSkpOwoKICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gdGhpcy50b2dnbGVFbGVtZW50KHRoaXMuJGVsLCB0cnVlLCBhbmltYXRlKHRoaXMpKTsKICAgICAgICB9LAoKICAgICAgICBoaWRlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMudG9nZ2xlRWxlbWVudCh0aGlzLiRlbCwgZmFsc2UsIGFuaW1hdGUodGhpcykpOwogICAgICAgIH0gfSB9OwoKCgogICAgZnVuY3Rpb24gYW5pbWF0ZShfcmVmNSkge2xldCB7IHRyYW5zaXRpb25FbGVtZW50LCBfdG9nZ2xlIH0gPSBfcmVmNTsKICAgICAgcmV0dXJuIChlbCwgc2hvdykgPT4KICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4KICAgICAgb25jZShlbCwgJ3Nob3cgaGlkZScsICgpID0+IHsKICAgICAgICBlbC5fcmVqZWN0ID09IG51bGwgPyB2b2lkIDAgOiBlbC5fcmVqZWN0KCk7CiAgICAgICAgZWwuX3JlamVjdCA9IHJlamVjdDsKCiAgICAgICAgX3RvZ2dsZShlbCwgc2hvdyk7CgogICAgICAgIGNvbnN0IG9mZiA9IG9uY2UoCiAgICAgICAgdHJhbnNpdGlvbkVsZW1lbnQsCiAgICAgICAgJ3RyYW5zaXRpb25zdGFydCcsCiAgICAgICAgKCkgPT4gewogICAgICAgICAgb25jZSh0cmFuc2l0aW9uRWxlbWVudCwgJ3RyYW5zaXRpb25lbmQgdHJhbnNpdGlvbmNhbmNlbCcsIHJlc29sdmUsIHsKICAgICAgICAgICAgc2VsZjogdHJ1ZSB9KTsKCiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpOwogICAgICAgIH0sCiAgICAgICAgeyBzZWxmOiB0cnVlIH0pOwoKCiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIG9mZigpOwogICAgICAgICAgcmVzb2x2ZSgpOwogICAgICAgIH0sIHRvTXMoY3NzKHRyYW5zaXRpb25FbGVtZW50LCAndHJhbnNpdGlvbkR1cmF0aW9uJykpKTsKICAgICAgfSkpLgogICAgICB0aGVuKCgpID0+IGRlbGV0ZSBlbC5fcmVqZWN0KTsKICAgIH0KCiAgICBmdW5jdGlvbiB0b01zKHRpbWUpIHsKICAgICAgcmV0dXJuIHRpbWUgPyBlbmRzV2l0aCh0aW1lLCAnbXMnKSA/IHRvRmxvYXQodGltZSkgOiB0b0Zsb2F0KHRpbWUpICogMTAwMCA6IDA7CiAgICB9CgogICAgZnVuY3Rpb24gcHJldmVudE92ZXJzY3JvbGwoZWwpIHsKICAgICAgaWYgKENTUy5zdXBwb3J0cygnb3ZlcnNjcm9sbC1iZWhhdmlvcicsICdjb250YWluJykpIHsKICAgICAgICBjb25zdCBlbGVtZW50cyA9IGZpbHRlckNoaWxkcmVuKGVsLCAoY2hpbGQpID0+IC9hdXRvfHNjcm9sbC8udGVzdChjc3MoY2hpbGQsICdvdmVyZmxvdycpKSk7CiAgICAgICAgY3NzKGVsZW1lbnRzLCAnb3ZlcnNjcm9sbEJlaGF2aW9yJywgJ2NvbnRhaW4nKTsKICAgICAgICByZXR1cm4gKCkgPT4gY3NzKGVsZW1lbnRzLCAnb3ZlcnNjcm9sbEJlaGF2aW9yJywgJycpOwogICAgICB9CgogICAgICBsZXQgc3RhcnRDbGllbnRZOwoKICAgICAgY29uc3QgZXZlbnRzID0gWwogICAgICBvbigKICAgICAgZWwsCiAgICAgICd0b3VjaHN0YXJ0JywKICAgICAgKF9yZWY2KSA9PiB7bGV0IHsgdGFyZ2V0VG91Y2hlcyB9ID0gX3JlZjY7CiAgICAgICAgaWYgKHRhcmdldFRvdWNoZXMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICBzdGFydENsaWVudFkgPSB0YXJnZXRUb3VjaGVzWzBdLmNsaWVudFk7CiAgICAgICAgfQogICAgICB9LAogICAgICB7IHBhc3NpdmU6IHRydWUgfSksCgoKICAgICAgb24oCiAgICAgIGVsLAogICAgICAndG91Y2htb3ZlJywKICAgICAgKGUpID0+IHsKICAgICAgICBpZiAoZS50YXJnZXRUb3VjaGVzLmxlbmd0aCAhPT0gMSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbGV0IFtzY3JvbGxQYXJlbnRdID0gc2Nyb2xsUGFyZW50cyhlLnRhcmdldCwgL2F1dG98c2Nyb2xsLyk7CiAgICAgICAgaWYgKCF3aXRoaW4oc2Nyb2xsUGFyZW50LCBlbCkpIHsKICAgICAgICAgIHNjcm9sbFBhcmVudCA9IGVsOwogICAgICAgIH0KCiAgICAgICAgY29uc3QgY2xpZW50WSA9IGUudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRZIC0gc3RhcnRDbGllbnRZOwogICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gc2Nyb2xsUGFyZW50OwoKICAgICAgICBpZiAoCiAgICAgICAgY2xpZW50SGVpZ2h0ID49IHNjcm9sbEhlaWdodCB8fAogICAgICAgIHNjcm9sbFRvcCA9PT0gMCAmJiBjbGllbnRZID4gMCB8fAogICAgICAgIHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCA8PSBjbGllbnRIZWlnaHQgJiYgY2xpZW50WSA8IDApCiAgICAgICAgewogICAgICAgICAgZS5jYW5jZWxhYmxlICYmIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsgcGFzc2l2ZTogZmFsc2UgfSldOwoKCgogICAgICByZXR1cm4gKCkgPT4gZXZlbnRzLmZvckVhY2goKGZuKSA9PiBmbigpKTsKICAgIH0KCiAgICBsZXQgcHJldmVudGVkOwogICAgZnVuY3Rpb24gcHJldmVudEJhY2tncm91bmRTY3JvbGwoKSB7CiAgICAgIGlmIChwcmV2ZW50ZWQpIHsKICAgICAgICByZXR1cm4gbm9vcDsKICAgICAgfQogICAgICBwcmV2ZW50ZWQgPSB0cnVlOwoKICAgICAgY29uc3QgeyBzY3JvbGxpbmdFbGVtZW50IH0gPSBkb2N1bWVudDsKICAgICAgY3NzKHNjcm9sbGluZ0VsZW1lbnQsIHsKICAgICAgICBvdmVyZmxvd1k6ICdoaWRkZW4nLAogICAgICAgIHRvdWNoQWN0aW9uOiAnbm9uZScsCiAgICAgICAgcGFkZGluZ1JpZ2h0OiB3aWR0aCh3aW5kb3cpIC0gc2Nyb2xsaW5nRWxlbWVudC5jbGllbnRXaWR0aCB9KTsKCiAgICAgIHJldHVybiAoKSA9PiB7CiAgICAgICAgcHJldmVudGVkID0gZmFsc2U7CiAgICAgICAgY3NzKHNjcm9sbGluZ0VsZW1lbnQsIHsgb3ZlcmZsb3dZOiAnJywgdG91Y2hBY3Rpb246ICcnLCBwYWRkaW5nUmlnaHQ6ICcnIH0pOwogICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGZpbHRlckNoaWxkcmVuKGVsLCBmbikgewogICAgICBjb25zdCBjaGlsZHJlbiA9IFtdOwogICAgICBhcHBseShlbCwgKG5vZGUpID0+IHsKICAgICAgICBpZiAoZm4obm9kZSkpIHsKICAgICAgICAgIGNoaWxkcmVuLnB1c2gobm9kZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuIGNoaWxkcmVuOwogICAgfQoKICAgIGxldCBhY3RpdmU7CgogICAgdmFyIGRyb3AgPSB7CiAgICAgIG1peGluczogW0NvbnRhaW5lciwgTGF6eWxvYWQsIFBvc2l0aW9uLCBTdHlsZSwgVG9nZ2xhYmxlXSwKCiAgICAgIGFyZ3M6ICdwb3MnLAoKICAgICAgcHJvcHM6IHsKICAgICAgICBtb2RlOiAnbGlzdCcsCiAgICAgICAgdG9nZ2xlOiBCb29sZWFuLAogICAgICAgIGJvdW5kYXJ5OiBCb29sZWFuLAogICAgICAgIHRhcmdldDogQm9vbGVhbiwKICAgICAgICB0YXJnZXRYOiBCb29sZWFuLAogICAgICAgIHRhcmdldFk6IEJvb2xlYW4sCiAgICAgICAgc3RyZXRjaDogQm9vbGVhbiwKICAgICAgICBkZWxheVNob3c6IE51bWJlciwKICAgICAgICBkZWxheUhpZGU6IE51bWJlciwKICAgICAgICBhdXRvVXBkYXRlOiBCb29sZWFuLAogICAgICAgIGNsc0Ryb3A6IFN0cmluZywKICAgICAgICBhbmltYXRlT3V0OiBCb29sZWFuLAogICAgICAgIGJnU2Nyb2xsOiBCb29sZWFuIH0sCgoKICAgICAgZGF0YTogewogICAgICAgIG1vZGU6IFsnY2xpY2snLCAnaG92ZXInXSwKICAgICAgICB0b2dnbGU6ICctIConLAogICAgICAgIGJvdW5kYXJ5OiBmYWxzZSwKICAgICAgICB0YXJnZXQ6IGZhbHNlLAogICAgICAgIHRhcmdldFg6IGZhbHNlLAogICAgICAgIHRhcmdldFk6IGZhbHNlLAogICAgICAgIHN0cmV0Y2g6IGZhbHNlLAogICAgICAgIGRlbGF5U2hvdzogMCwKICAgICAgICBkZWxheUhpZGU6IDgwMCwKICAgICAgICBhdXRvVXBkYXRlOiB0cnVlLAogICAgICAgIGNsc0Ryb3A6IGZhbHNlLAogICAgICAgIGFuaW1hdGVPdXQ6IGZhbHNlLAogICAgICAgIGJnU2Nyb2xsOiB0cnVlLAogICAgICAgIGFuaW1hdGlvbjogWyd1ay1hbmltYXRpb24tZmFkZSddLAogICAgICAgIGNsczogJ3VrLW9wZW4nLAogICAgICAgIGNvbnRhaW5lcjogZmFsc2UgfSwKCgogICAgICBjb21wdXRlZDogewogICAgICAgIHRhcmdldChfcmVmLCAkZWwpIHtsZXQgeyB0YXJnZXQsIHRhcmdldFgsIHRhcmdldFkgfSA9IF9yZWY7CiAgICAgICAgICB0YXJnZXRYID0gdGFyZ2V0WCB8fCB0YXJnZXQgfHwgdGhpcy50YXJnZXRFbDsKICAgICAgICAgIHRhcmdldFkgPSB0YXJnZXRZIHx8IHRhcmdldCB8fCB0aGlzLnRhcmdldEVsOwoKICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICB0YXJnZXRYID09PSB0cnVlID8gd2luZG93IDogcXVlcnkodGFyZ2V0WCwgJGVsKSwKICAgICAgICAgIHRhcmdldFkgPT09IHRydWUgPyB3aW5kb3cgOiBxdWVyeSh0YXJnZXRZLCAkZWwpXTsKCiAgICAgICAgfSB9LAoKCiAgICAgIGNyZWF0ZWQoKSB7CiAgICAgICAgdGhpcy50cmFja2VyID0gbmV3IE1vdXNlVHJhY2tlcigpOwogICAgICB9LAoKICAgICAgYmVmb3JlQ29ubmVjdCgpIHsKICAgICAgICB0aGlzLmNsc0Ryb3AgPSB0aGlzLiRwcm9wcy5jbHNEcm9wIHx8ICJ1ay0iICsgdGhpcy4kb3B0aW9ucy5uYW1lOwogICAgICB9LAoKICAgICAgY29ubmVjdGVkKCkgewogICAgICAgIGFkZENsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc0Ryb3ApOwoKICAgICAgICBpZiAodGhpcy50b2dnbGUgJiYgIXRoaXMudGFyZ2V0RWwpIHsKICAgICAgICAgIHRoaXMudGFyZ2V0RWwgPSB0aGlzLiRjcmVhdGUoJ3RvZ2dsZScsIHF1ZXJ5KHRoaXMudG9nZ2xlLCB0aGlzLiRlbCksIHsKICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLiRlbCwKICAgICAgICAgICAgbW9kZTogdGhpcy5tb2RlIH0pLgogICAgICAgICAgJGVsOwogICAgICAgICAgYXR0cih0aGlzLnRhcmdldEVsLCAnYXJpYS1oYXNwb3B1cCcsIHRydWUpOwogICAgICAgICAgdGhpcy5sYXp5bG9hZCh0aGlzLnRhcmdldEVsKTsKICAgICAgICB9CiAgICAgIH0sCgogICAgICBkaXNjb25uZWN0ZWQoKSB7CiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUoKSkgewogICAgICAgICAgdGhpcy5oaWRlKGZhbHNlKTsKICAgICAgICAgIGFjdGl2ZSA9IG51bGw7CiAgICAgICAgfQogICAgICB9LAoKICAgICAgZXZlbnRzOiBbCiAgICAgIHsKICAgICAgICBuYW1lOiAnY2xpY2snLAoKICAgICAgICBkZWxlZ2F0ZSgpIHsKICAgICAgICAgIHJldHVybiAiLiIgKyB0aGlzLmNsc0Ryb3AgKyAiLWNsb3NlIjsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGVyKGUpIHsKICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuaGlkZShmYWxzZSk7CiAgICAgICAgfSB9LAoKCiAgICAgIHsKICAgICAgICBuYW1lOiAnY2xpY2snLAoKICAgICAgICBkZWxlZ2F0ZSgpIHsKICAgICAgICAgIHJldHVybiAnYVtocmVmXj0iIyJdJzsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGVyKF9yZWYyKSB7bGV0IHsgZGVmYXVsdFByZXZlbnRlZCwgY3VycmVudDogeyBoYXNoIH0gfSA9IF9yZWYyOwogICAgICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkICYmIGhhc2ggJiYgIXdpdGhpbihoYXNoLCB0aGlzLiRlbCkpIHsKICAgICAgICAgICAgdGhpcy5oaWRlKGZhbHNlKTsKICAgICAgICAgIH0KICAgICAgICB9IH0sCgoKICAgICAgewogICAgICAgIG5hbWU6ICdiZWZvcmVzY3JvbGwnLAoKICAgICAgICBoYW5kbGVyKCkgewogICAgICAgICAgdGhpcy5oaWRlKGZhbHNlKTsKICAgICAgICB9IH0sCgoKICAgICAgewogICAgICAgIG5hbWU6ICd0b2dnbGUnLAoKICAgICAgICBzZWxmOiB0cnVlLAoKICAgICAgICBoYW5kbGVyKGUsIHRvZ2dsZSkgewogICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICAgIGlmICh0aGlzLmlzVG9nZ2xlZCgpKSB7CiAgICAgICAgICAgIHRoaXMuaGlkZShmYWxzZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLnNob3codG9nZ2xlID09IG51bGwgPyB2b2lkIDAgOiB0b2dnbGUuJGVsLCBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfSB9LAoKCiAgICAgIHsKICAgICAgICBuYW1lOiAndG9nZ2xlc2hvdycsCgogICAgICAgIHNlbGY6IHRydWUsCgogICAgICAgIGhhbmRsZXIoZSwgdG9nZ2xlKSB7CiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB0aGlzLnNob3codG9nZ2xlID09IG51bGwgPyB2b2lkIDAgOiB0b2dnbGUuJGVsKTsKICAgICAgICB9IH0sCgoKICAgICAgewogICAgICAgIG5hbWU6ICd0b2dnbGVoaWRlJywKCiAgICAgICAgc2VsZjogdHJ1ZSwKCiAgICAgICAgaGFuZGxlcihlKSB7CiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBpZiAoIW1hdGNoZXModGhpcy4kZWwsICc6Zm9jdXMsOmhvdmVyJykpIHsKICAgICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICB9CiAgICAgICAgfSB9LAoKCiAgICAgIHsKICAgICAgICBuYW1lOiBwb2ludGVyRW50ZXIgKyAiIGZvY3VzaW4iLAoKICAgICAgICBmaWx0ZXIoKSB7CiAgICAgICAgICByZXR1cm4gaW5jbHVkZXModGhpcy5tb2RlLCAnaG92ZXInKTsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGVyKGUpIHsKICAgICAgICAgIGlmICghaXNUb3VjaChlKSkgewogICAgICAgICAgICB0aGlzLmNsZWFyVGltZXJzKCk7CiAgICAgICAgICB9CiAgICAgICAgfSB9LAoKCiAgICAgIHsKICAgICAgICBuYW1lOiBwb2ludGVyTGVhdmUgKyAiIGZvY3Vzb3V0IiwKCiAgICAgICAgZmlsdGVyKCkgewogICAgICAgICAgcmV0dXJuIGluY2x1ZGVzKHRoaXMubW9kZSwgJ2hvdmVyJyk7CiAgICAgICAgfSwKCiAgICAgICAgaGFuZGxlcihlKSB7CiAgICAgICAgICBpZiAoIWlzVG91Y2goZSkgJiYgZS5yZWxhdGVkVGFyZ2V0KSB7CiAgICAgICAgICAgIHRoaXMuaGlkZSgpOwogICAgICAgICAgfQogICAgICAgIH0gfSwKCgogICAgICB7CiAgICAgICAgbmFtZTogJ3RvZ2dsZWQnLAoKICAgICAgICBzZWxmOiB0cnVlLAoKICAgICAgICBoYW5kbGVyKGUsIHRvZ2dsZWQpIHsKICAgICAgICAgIGlmICghdG9nZ2xlZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5jbGVhclRpbWVycygpOwogICAgICAgICAgdGhpcy5wb3NpdGlvbigpOwogICAgICAgIH0gfSwKCgogICAgICB7CiAgICAgICAgbmFtZTogJ3Nob3cnLAoKICAgICAgICBzZWxmOiB0cnVlLAoKICAgICAgICBoYW5kbGVyKCkgewogICAgICAgICAgYWN0aXZlID0gdGhpczsKCiAgICAgICAgICB0aGlzLnRyYWNrZXIuaW5pdCgpOwoKICAgICAgICAgIGNvbnN0IHVwZGF0ZSA9ICgpID0+IHRoaXMuJGVtaXQoKTsKICAgICAgICAgIGNvbnN0IGhhbmRsZXJzID0gWwogICAgICAgICAgb24oCiAgICAgICAgICBkb2N1bWVudCwKICAgICAgICAgIHBvaW50ZXJEb3duJDEsCiAgICAgICAgICAoX3JlZjMpID0+IHtsZXQgeyB0YXJnZXQgfSA9IF9yZWYzO3JldHVybiAoCiAgICAgICAgICAgICAgIXdpdGhpbih0YXJnZXQsIHRoaXMuJGVsKSAmJgogICAgICAgICAgICAgIG9uY2UoCiAgICAgICAgICAgICAgZG9jdW1lbnQsCiAgICAgICAgICAgICAgcG9pbnRlclVwJDEgKyAiICIgKyBwb2ludGVyQ2FuY2VsICsgIiBzY3JvbGwiLAogICAgICAgICAgICAgIChfcmVmNCkgPT4ge2xldCB7IGRlZmF1bHRQcmV2ZW50ZWQsIHR5cGUsIHRhcmdldDogbmV3VGFyZ2V0IH0gPSBfcmVmNDsKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICFkZWZhdWx0UHJldmVudGVkICYmCiAgICAgICAgICAgICAgICB0eXBlID09PSBwb2ludGVyVXAkMSAmJgogICAgICAgICAgICAgICAgdGFyZ2V0ID09PSBuZXdUYXJnZXQgJiYKICAgICAgICAgICAgICAgICEodGhpcy50YXJnZXRFbCAmJiB3aXRoaW4odGFyZ2V0LCB0aGlzLnRhcmdldEVsKSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZShmYWxzZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB0cnVlKSk7fSksCgoKCiAgICAgICAgICBvbihkb2N1bWVudCwgJ2tleWRvd24nLCAoZSkgPT4gewogICAgICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAyNykgewogICAgICAgICAgICAgIHRoaXMuaGlkZShmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pLAoKICAgICAgICAgIG9uKHdpbmRvdywgJ3Jlc2l6ZScsIHVwZGF0ZSksCgogICAgICAgICAgKCgpID0+IHsKICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBvYnNlcnZlUmVzaXplKAogICAgICAgICAgICBzY3JvbGxQYXJlbnRzKHRoaXMuJGVsKS5jb25jYXQodGhpcy50YXJnZXQpLAogICAgICAgICAgICB1cGRhdGUpOwoKICAgICAgICAgICAgcmV0dXJuICgpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgIH0pKCksCgogICAgICAgICAgLi4uKHRoaXMuYXV0b1VwZGF0ZSA/CiAgICAgICAgICBbCiAgICAgICAgICBvbihbZG9jdW1lbnQsIHNjcm9sbFBhcmVudHModGhpcy4kZWwpXSwgJ3Njcm9sbCcsIHVwZGF0ZSwgewogICAgICAgICAgICBwYXNzaXZlOiB0cnVlIH0pXSA6CgoKICAgICAgICAgIFtdKSwKCiAgICAgICAgICAuLi4odGhpcy5iZ1Njcm9sbCA/CiAgICAgICAgICBbXSA6CiAgICAgICAgICBbcHJldmVudE92ZXJzY3JvbGwodGhpcy4kZWwpLCBwcmV2ZW50QmFja2dyb3VuZFNjcm9sbCgpXSldOwoKCiAgICAgICAgICBvbmNlKHRoaXMuJGVsLCAnaGlkZScsICgpID0+IGhhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IGhhbmRsZXIoKSksIHsKICAgICAgICAgICAgc2VsZjogdHJ1ZSB9KTsKCiAgICAgICAgfSB9LAoKCiAgICAgIHsKICAgICAgICBuYW1lOiAnYmVmb3JlaGlkZScsCgogICAgICAgIHNlbGY6IHRydWUsCgogICAgICAgIGhhbmRsZXIoKSB7CiAgICAgICAgICB0aGlzLmNsZWFyVGltZXJzKCk7CiAgICAgICAgfSB9LAoKCiAgICAgIHsKICAgICAgICBuYW1lOiAnaGlkZScsCgogICAgICAgIGhhbmRsZXIoX3JlZjUpIHtsZXQgeyB0YXJnZXQgfSA9IF9yZWY1OwogICAgICAgICAgaWYgKHRoaXMuJGVsICE9PSB0YXJnZXQpIHsKICAgICAgICAgICAgYWN0aXZlID0KICAgICAgICAgICAgYWN0aXZlID09PSBudWxsICYmIHdpdGhpbih0YXJnZXQsIHRoaXMuJGVsKSAmJiB0aGlzLmlzVG9nZ2xlZCgpID8KICAgICAgICAgICAgdGhpcyA6CiAgICAgICAgICAgIGFjdGl2ZTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGFjdGl2ZSA9IHRoaXMuaXNBY3RpdmUoKSA/IG51bGwgOiBhY3RpdmU7CiAgICAgICAgICB0aGlzLnRyYWNrZXIuY2FuY2VsKCk7CiAgICAgICAgfSB9XSwKCgoKICAgICAgdXBkYXRlOiB7CiAgICAgICAgd3JpdGUoKSB7CiAgICAgICAgICBpZiAodGhpcy5pc1RvZ2dsZWQoKSAmJiAhaGFzQ2xhc3ModGhpcy4kZWwsIHRoaXMuY2xzRW50ZXIpKSB7CiAgICAgICAgICAgIHRoaXMucG9zaXRpb24oKTsKICAgICAgICAgIH0KICAgICAgICB9IH0sCgoKICAgICAgbWV0aG9kczogewogICAgICAgIHNob3codGFyZ2V0LCBkZWxheSkge2lmICh0YXJnZXQgPT09IHZvaWQgMCkge3RhcmdldCA9IHRoaXMudGFyZ2V0RWw7fWlmIChkZWxheSA9PT0gdm9pZCAwKSB7ZGVsYXkgPSB0cnVlO30KICAgICAgICAgIGlmICh0aGlzLmlzVG9nZ2xlZCgpICYmIHRhcmdldCAmJiB0aGlzLnRhcmdldEVsICYmIHRhcmdldCAhPT0gdGhpcy50YXJnZXRFbCkgewogICAgICAgICAgICB0aGlzLmhpZGUoZmFsc2UsIGZhbHNlKTsKICAgICAgICAgIH0KCiAgICAgICAgICB0aGlzLnRhcmdldEVsID0gdGFyZ2V0OwoKICAgICAgICAgIHRoaXMuY2xlYXJUaW1lcnMoKTsKCiAgICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZSgpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoYWN0aXZlKSB7CiAgICAgICAgICAgIGlmIChkZWxheSAmJiBhY3RpdmUuaXNEZWxheWluZykgewogICAgICAgICAgICAgIHRoaXMuc2hvd1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiBtYXRjaGVzKHRhcmdldCwgJzpob3ZlcicpICYmIHRoaXMuc2hvdygpLCAxMCk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZXQgcHJldjsKICAgICAgICAgICAgd2hpbGUgKGFjdGl2ZSAmJiBwcmV2ICE9PSBhY3RpdmUgJiYgIXdpdGhpbih0aGlzLiRlbCwgYWN0aXZlLiRlbCkpIHsKICAgICAgICAgICAgICBwcmV2ID0gYWN0aXZlOwogICAgICAgICAgICAgIGFjdGl2ZS5oaWRlKGZhbHNlLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAodGhpcy5jb250YWluZXIgJiYgcGFyZW50KHRoaXMuJGVsKSAhPT0gdGhpcy5jb250YWluZXIpIHsKICAgICAgICAgICAgYXBwZW5kKHRoaXMuY29udGFpbmVyLCB0aGlzLiRlbCk7CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5zaG93VGltZXIgPSBzZXRUaW1lb3V0KAogICAgICAgICAgKCkgPT4gdGhpcy50b2dnbGVFbGVtZW50KHRoaXMuJGVsLCB0cnVlKSwKICAgICAgICAgIGRlbGF5ICYmIHRoaXMuZGVsYXlTaG93IHx8IDApOwoKICAgICAgICB9LAoKICAgICAgICBoaWRlKGRlbGF5LCBhbmltYXRlKSB7aWYgKGRlbGF5ID09PSB2b2lkIDApIHtkZWxheSA9IHRydWU7fWlmIChhbmltYXRlID09PSB2b2lkIDApIHthbmltYXRlID0gdHJ1ZTt9CiAgICAgICAgICBjb25zdCBoaWRlID0gKCkgPT4gdGhpcy50b2dnbGVFbGVtZW50KHRoaXMuJGVsLCBmYWxzZSwgdGhpcy5hbmltYXRlT3V0ICYmIGFuaW1hdGUpOwoKICAgICAgICAgIHRoaXMuY2xlYXJUaW1lcnMoKTsKCiAgICAgICAgICB0aGlzLmlzRGVsYXlpbmcgPSBnZXRQb3NpdGlvbmVkRWxlbWVudHModGhpcy4kZWwpLnNvbWUoKGVsKSA9PgogICAgICAgICAgdGhpcy50cmFja2VyLm1vdmVzVG8oZWwpKTsKCgogICAgICAgICAgaWYgKGRlbGF5ICYmIHRoaXMuaXNEZWxheWluZykgewogICAgICAgICAgICB0aGlzLmhpZGVUaW1lciA9IHNldFRpbWVvdXQodGhpcy5oaWRlLCA1MCk7CiAgICAgICAgICB9IGVsc2UgaWYgKGRlbGF5ICYmIHRoaXMuZGVsYXlIaWRlKSB7CiAgICAgICAgICAgIHRoaXMuaGlkZVRpbWVyID0gc2V0VGltZW91dChoaWRlLCB0aGlzLmRlbGF5SGlkZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBoaWRlKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgY2xlYXJUaW1lcnMoKSB7CiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zaG93VGltZXIpOwogICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaGlkZVRpbWVyKTsKICAgICAgICAgIHRoaXMuc2hvd1RpbWVyID0gbnVsbDsKICAgICAgICAgIHRoaXMuaGlkZVRpbWVyID0gbnVsbDsKICAgICAgICAgIHRoaXMuaXNEZWxheWluZyA9IGZhbHNlOwogICAgICAgIH0sCgogICAgICAgIGlzQWN0aXZlKCkgewogICAgICAgICAgcmV0dXJuIGFjdGl2ZSA9PT0gdGhpczsKICAgICAgICB9LAoKICAgICAgICBwb3NpdGlvbigpIHsKICAgICAgICAgIHJlbW92ZUNsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc0Ryb3AgKyAiLXN0YWNrIik7CiAgICAgICAgICBhdHRyKHRoaXMuJGVsLCAnc3R5bGUnLCB0aGlzLl9zdHlsZSk7CgogICAgICAgICAgLy8gRW5zdXJlIG5vbmUgcG9zaXRpb25lZCBlbGVtZW50IGRvZXMgbm90IGdlbmVyYXRlIHNjcm9sbGJhcnMKICAgICAgICAgIHRoaXMuJGVsLmhpZGRlbiA9IHRydWU7CgogICAgICAgICAgY29uc3QgYm91bmRhcnkgPSBxdWVyeSh0aGlzLmJvdW5kYXJ5LCB0aGlzLiRlbCk7CiAgICAgICAgICBjb25zdCBib3VuZGFyeU9mZnNldCA9IG9mZnNldChib3VuZGFyeSB8fCB3aW5kb3cpOwogICAgICAgICAgY29uc3Qgdmlld3BvcnRzID0gdGhpcy50YXJnZXQubWFwKCh0YXJnZXQpID0+IG9mZnNldFZpZXdwb3J0KHNjcm9sbFBhcmVudHModGFyZ2V0KVswXSkpOwogICAgICAgICAgY29uc3Qgdmlld3BvcnRPZmZzZXQgPSB0aGlzLmdldFZpZXdwb3J0T2Zmc2V0KHRoaXMuJGVsKTsKCiAgICAgICAgICBjb25zdCBkaXJzID0gWwogICAgICAgICAgWzAsIFsneCcsICd3aWR0aCcsICdsZWZ0JywgJ3JpZ2h0J11dLAogICAgICAgICAgWzEsIFsneScsICdoZWlnaHQnLCAndG9wJywgJ2JvdHRvbSddXV07CgoKICAgICAgICAgIGZvciAoY29uc3QgW2ksIFtheGlzLCBwcm9wXV0gb2YgZGlycykgewogICAgICAgICAgICBpZiAodGhpcy5heGlzICE9PSBheGlzICYmIGluY2x1ZGVzKFtheGlzLCB0cnVlXSwgdGhpcy5zdHJldGNoKSkgewogICAgICAgICAgICAgIGNzcyh0aGlzLiRlbCwgewogICAgICAgICAgICAgICAgW3Byb3BdOiBNYXRoLm1pbigKICAgICAgICAgICAgICAgIGJvdW5kYXJ5T2Zmc2V0W3Byb3BdLAogICAgICAgICAgICAgICAgdmlld3BvcnRzW2ldW3Byb3BdIC0gMiAqIHZpZXdwb3J0T2Zmc2V0KSwKCiAgICAgICAgICAgICAgICBbIm92ZXJmbG93LSIgKyBheGlzXTogJ2F1dG8nIH0pOwoKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIGNvbnN0IG1heFdpZHRoID0gdmlld3BvcnRzWzBdLndpZHRoIC0gMiAqIHZpZXdwb3J0T2Zmc2V0OwoKICAgICAgICAgIGlmICh0aGlzLiRlbC5vZmZzZXRXaWR0aCA+IG1heFdpZHRoKSB7CiAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc0Ryb3AgKyAiLXN0YWNrIik7CiAgICAgICAgICB9CgogICAgICAgICAgY3NzKHRoaXMuJGVsLCAnbWF4V2lkdGgnLCBtYXhXaWR0aCk7CgogICAgICAgICAgdGhpcy4kZWwuaGlkZGVuID0gZmFsc2U7CgogICAgICAgICAgdGhpcy5wb3NpdGlvbkF0KHRoaXMuJGVsLCB0aGlzLnRhcmdldCwgYm91bmRhcnkpOwoKICAgICAgICAgIGZvciAoY29uc3QgW2ksIFtheGlzLCBwcm9wLCBzdGFydCwgZW5kXV0gb2YgZGlycykgewogICAgICAgICAgICBpZiAodGhpcy5heGlzID09PSBheGlzICYmIGluY2x1ZGVzKFtheGlzLCB0cnVlXSwgdGhpcy5zdHJldGNoKSkgewogICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uT2Zmc2V0ID0gTWF0aC5hYnModGhpcy5nZXRQb3NpdGlvbk9mZnNldCh0aGlzLiRlbCkpOwogICAgICAgICAgICAgIGNvbnN0IHRhcmdldE9mZnNldCA9IG9mZnNldCh0aGlzLnRhcmdldFtpXSk7CiAgICAgICAgICAgICAgY29uc3QgZWxPZmZzZXQgPSBvZmZzZXQodGhpcy4kZWwpOwoKICAgICAgICAgICAgICBjc3ModGhpcy4kZWwsIHsKICAgICAgICAgICAgICAgIFtwcm9wXToKICAgICAgICAgICAgICAgICh0YXJnZXRPZmZzZXRbc3RhcnRdID4gZWxPZmZzZXRbc3RhcnRdID8KICAgICAgICAgICAgICAgIHRhcmdldE9mZnNldFtzdGFydF0gLQogICAgICAgICAgICAgICAgTWF0aC5tYXgoCiAgICAgICAgICAgICAgICBib3VuZGFyeU9mZnNldFtzdGFydF0sCiAgICAgICAgICAgICAgICB2aWV3cG9ydHNbaV1bc3RhcnRdICsgdmlld3BvcnRPZmZzZXQpIDoKCiAgICAgICAgICAgICAgICBNYXRoLm1pbigKICAgICAgICAgICAgICAgIGJvdW5kYXJ5T2Zmc2V0W2VuZF0sCiAgICAgICAgICAgICAgICB2aWV3cG9ydHNbaV1bZW5kXSAtIHZpZXdwb3J0T2Zmc2V0KSAtCiAgICAgICAgICAgICAgICB0YXJnZXRPZmZzZXRbZW5kXSkgLSBwb3NpdGlvbk9mZnNldCwKICAgICAgICAgICAgICAgIFsib3ZlcmZsb3ctIiArIGF4aXNdOiAnYXV0bycgfSk7CgoKICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uQXQodGhpcy4kZWwsIHRoaXMudGFyZ2V0LCBib3VuZGFyeSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IH0gfTsKCgoKICAgIGZ1bmN0aW9uIGdldFBvc2l0aW9uZWRFbGVtZW50cyhlbCkgewogICAgICBjb25zdCByZXN1bHQgPSBbXTsKICAgICAgYXBwbHkoZWwsIChlbCkgPT4gY3NzKGVsLCAncG9zaXRpb24nKSAhPT0gJ3N0YXRpYycgJiYgcmVzdWx0LnB1c2goZWwpKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICB2YXIgZm9ybUN1c3RvbSA9IHsKICAgICAgbWl4aW5zOiBbQ2xhc3NdLAoKICAgICAgYXJnczogJ3RhcmdldCcsCgogICAgICBwcm9wczogewogICAgICAgIHRhcmdldDogQm9vbGVhbiB9LAoKCiAgICAgIGRhdGE6IHsKICAgICAgICB0YXJnZXQ6IGZhbHNlIH0sCgoKICAgICAgY29tcHV0ZWQ6IHsKICAgICAgICBpbnB1dChfLCAkZWwpIHsKICAgICAgICAgIHJldHVybiAkKHNlbElucHV0LCAkZWwpOwogICAgICAgIH0sCgogICAgICAgIHN0YXRlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQubmV4dEVsZW1lbnRTaWJsaW5nOwogICAgICAgIH0sCgogICAgICAgIHRhcmdldChfcmVmLCAkZWwpIHtsZXQgeyB0YXJnZXQgfSA9IF9yZWY7CiAgICAgICAgICByZXR1cm4gKAogICAgICAgICAgICB0YXJnZXQgJiYgKAogICAgICAgICAgICB0YXJnZXQgPT09IHRydWUgJiYgcGFyZW50KHRoaXMuaW5wdXQpID09PSAkZWwgJiYgdGhpcy5pbnB1dC5uZXh0RWxlbWVudFNpYmxpbmcgfHwKICAgICAgICAgICAgJCh0YXJnZXQsICRlbCkpKTsKCiAgICAgICAgfSB9LAoKCiAgICAgIHVwZGF0ZSgpIHt2YXIgX2lucHV0JGZpbGVzOwogICAgICAgIGNvbnN0IHsgdGFyZ2V0LCBpbnB1dCB9ID0gdGhpczsKCiAgICAgICAgaWYgKCF0YXJnZXQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGxldCBvcHRpb247CiAgICAgICAgY29uc3QgcHJvcCA9IGlzSW5wdXQodGFyZ2V0KSA/ICd2YWx1ZScgOiAndGV4dENvbnRlbnQnOwogICAgICAgIGNvbnN0IHByZXYgPSB0YXJnZXRbcHJvcF07CiAgICAgICAgY29uc3QgdmFsdWUgPSAoX2lucHV0JGZpbGVzID0gaW5wdXQuZmlsZXMpICE9IG51bGwgJiYgX2lucHV0JGZpbGVzWzBdID8KICAgICAgICBpbnB1dC5maWxlc1swXS5uYW1lIDoKICAgICAgICBtYXRjaGVzKGlucHV0LCAnc2VsZWN0JykgJiYgKAogICAgICAgIG9wdGlvbiA9ICQkKCdvcHRpb24nLCBpbnB1dCkuZmlsdGVyKChlbCkgPT4gZWwuc2VsZWN0ZWQpWzBdKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nCiAgICAgICAgPyBvcHRpb24udGV4dENvbnRlbnQgOgogICAgICAgIGlucHV0LnZhbHVlOwoKICAgICAgICBpZiAocHJldiAhPT0gdmFsdWUpIHsKICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHZhbHVlOwogICAgICAgIH0KICAgICAgfSwKCiAgICAgIGV2ZW50czogWwogICAgICB7CiAgICAgICAgbmFtZTogJ2NoYW5nZScsCgogICAgICAgIGhhbmRsZXIoKSB7CiAgICAgICAgICB0aGlzLiRlbWl0KCk7CiAgICAgICAgfSB9LAoKCiAgICAgIHsKICAgICAgICBuYW1lOiAncmVzZXQnLAoKICAgICAgICBlbCgpIHsKICAgICAgICAgIHJldHVybiBjbG9zZXN0KHRoaXMuJGVsLCAnZm9ybScpOwogICAgICAgIH0sCgogICAgICAgIGhhbmRsZXIoKSB7CiAgICAgICAgICB0aGlzLiRlbWl0KCk7CiAgICAgICAgfSB9XSB9OwoKICAgIHZhciBNYXJnaW4gPSB7CiAgICAgIG1peGluczogW1Jlc2l6ZV0sCgogICAgICBwcm9wczogewogICAgICAgIG1hcmdpbjogU3RyaW5nLAogICAgICAgIGZpcnN0Q29sdW1uOiBCb29sZWFuIH0sCgoKICAgICAgZGF0YTogewogICAgICAgIG1hcmdpbjogJ3VrLW1hcmdpbi1zbWFsbC10b3AnLAogICAgICAgIGZpcnN0Q29sdW1uOiAndWstZmlyc3QtY29sdW1uJyB9LAoKCiAgICAgIHJlc2l6ZVRhcmdldHMoKSB7CiAgICAgICAgcmV0dXJuIFt0aGlzLiRlbCwgLi4udG9BcnJheSh0aGlzLiRlbC5jaGlsZHJlbildOwogICAgICB9LAoKICAgICAgY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMucmVnaXN0ZXJPYnNlcnZlcigKICAgICAgICBvYnNlcnZlTXV0YXRpb24odGhpcy4kZWwsICgpID0+IHRoaXMuJHJlc2V0KCksIHsKICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSB9KSk7CgoKICAgICAgfSwKCiAgICAgIHVwZGF0ZTogewogICAgICAgIHJlYWQoKSB7CiAgICAgICAgICBjb25zdCByb3dzID0gZ2V0Um93cyh0aGlzLiRlbC5jaGlsZHJlbik7CgogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcm93cywKICAgICAgICAgICAgY29sdW1uczogZ2V0Q29sdW1ucyhyb3dzKSB9OwoKICAgICAgICB9LAoKICAgICAgICB3cml0ZShfcmVmKSB7bGV0IHsgY29sdW1ucywgcm93cyB9ID0gX3JlZjsKICAgICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHsKICAgICAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2Ygcm93KSB7CiAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoY29sdW1uLCB0aGlzLm1hcmdpbiwgcm93c1swXSAhPT0gcm93KTsKICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhjb2x1bW4sIHRoaXMuZmlyc3RDb2x1bW4sIGNvbHVtbnNbMF0uaW5jbHVkZXMoY29sdW1uKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBldmVudHM6IFsncmVzaXplJ10gfSB9OwoKCgogICAgZnVuY3Rpb24gZ2V0Um93cyhpdGVtcykgewogICAgICByZXR1cm4gc29ydEJ5KGl0ZW1zLCAndG9wJywgJ2JvdHRvbScpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldENvbHVtbnMocm93cykgewogICAgICBjb25zdCBjb2x1bW5zID0gW107CgogICAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7CiAgICAgICAgY29uc3Qgc29ydGVkID0gc29ydEJ5KHJvdywgJ2xlZnQnLCAncmlnaHQnKTsKICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNvcnRlZC5sZW5ndGg7IGorKykgewogICAgICAgICAgY29sdW1uc1tqXSA9IGNvbHVtbnNbal0gPyBjb2x1bW5zW2pdLmNvbmNhdChzb3J0ZWRbal0pIDogc29ydGVkW2pdOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIGlzUnRsID8gY29sdW1ucy5yZXZlcnNlKCkgOiBjb2x1bW5zOwogICAgfQoKICAgIGZ1bmN0aW9uIHNvcnRCeShpdGVtcywgc3RhcnRQcm9wLCBlbmRQcm9wKSB7CiAgICAgIGNvbnN0IHNvcnRlZCA9IFtbXV07CgogICAgICBmb3IgKGNvbnN0IGVsIG9mIGl0ZW1zKSB7CiAgICAgICAgaWYgKCFpc1Zpc2libGUoZWwpKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIGxldCBkaW0gPSBnZXRPZmZzZXQoZWwpOwoKICAgICAgICBmb3IgKGxldCBpID0gc29ydGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICBjb25zdCBjdXJyZW50ID0gc29ydGVkW2ldOwoKICAgICAgICAgIGlmICghY3VycmVudFswXSkgewogICAgICAgICAgICBjdXJyZW50LnB1c2goZWwpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KCiAgICAgICAgICBsZXQgc3RhcnREaW07CiAgICAgICAgICBpZiAoY3VycmVudFswXS5vZmZzZXRQYXJlbnQgPT09IGVsLm9mZnNldFBhcmVudCkgewogICAgICAgICAgICBzdGFydERpbSA9IGdldE9mZnNldChjdXJyZW50WzBdKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRpbSA9IGdldE9mZnNldChlbCwgdHJ1ZSk7CiAgICAgICAgICAgIHN0YXJ0RGltID0gZ2V0T2Zmc2V0KGN1cnJlbnRbMF0sIHRydWUpOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChkaW1bc3RhcnRQcm9wXSA+PSBzdGFydERpbVtlbmRQcm9wXSAtIDEgJiYgZGltW3N0YXJ0UHJvcF0gIT09IHN0YXJ0RGltW3N0YXJ0UHJvcF0pIHsKICAgICAgICAgICAgc29ydGVkLnB1c2goW2VsXSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChkaW1bZW5kUHJvcF0gLSAxID4gc3RhcnREaW1bc3RhcnRQcm9wXSB8fCBkaW1bc3RhcnRQcm9wXSA9PT0gc3RhcnREaW1bc3RhcnRQcm9wXSkgewogICAgICAgICAgICBjdXJyZW50LnB1c2goZWwpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoaSA9PT0gMCkgewogICAgICAgICAgICBzb3J0ZWQudW5zaGlmdChbZWxdKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gc29ydGVkOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE9mZnNldChlbGVtZW50LCBvZmZzZXQpIHtpZiAob2Zmc2V0ID09PSB2b2lkIDApIHtvZmZzZXQgPSBmYWxzZTt9CiAgICAgIGxldCB7IG9mZnNldFRvcCwgb2Zmc2V0TGVmdCwgb2Zmc2V0SGVpZ2h0LCBvZmZzZXRXaWR0aCB9ID0gZWxlbWVudDsKCiAgICAgIGlmIChvZmZzZXQpIHsKICAgICAgICBbb2Zmc2V0VG9wLCBvZmZzZXRMZWZ0XSA9IG9mZnNldFBvc2l0aW9uKGVsZW1lbnQpOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIHRvcDogb2Zmc2V0VG9wLAogICAgICAgIGxlZnQ6IG9mZnNldExlZnQsCiAgICAgICAgYm90dG9tOiBvZmZzZXRUb3AgKyBvZmZzZXRIZWlnaHQsCiAgICAgICAgcmlnaHQ6IG9mZnNldExlZnQgKyBvZmZzZXRXaWR0aCB9OwoKICAgIH0KCiAgICB2YXIgU2Nyb2xsID0gewogICAgICBjb25uZWN0ZWQoKSB7CiAgICAgICAgcmVnaXN0ZXJTY3JvbGxMaXN0ZW5lcih0aGlzLl91aWQsICgpID0+IHRoaXMuJGVtaXQoJ3Njcm9sbCcpKTsKICAgICAgfSwKCiAgICAgIGRpc2Nvbm5lY3RlZCgpIHsKICAgICAgICB1bnJlZ2lzdGVyU2Nyb2xsTGlzdGVuZXIodGhpcy5fdWlkKTsKICAgICAgfSB9OwoKCiAgICBjb25zdCBzY3JvbGxMaXN0ZW5lcnMgPSBuZXcgTWFwKCk7CiAgICBsZXQgdW5iaW5kU2Nyb2xsTGlzdGVuZXI7CiAgICBmdW5jdGlvbiByZWdpc3RlclNjcm9sbExpc3RlbmVyKGlkLCBsaXN0ZW5lcikgewogICAgICB1bmJpbmRTY3JvbGxMaXN0ZW5lciA9CiAgICAgIHVuYmluZFNjcm9sbExpc3RlbmVyIHx8CiAgICAgIG9uKHdpbmRvdywgJ3Njcm9sbCcsICgpID0+IHNjcm9sbExpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIoKSksIHsKICAgICAgICBwYXNzaXZlOiB0cnVlLAogICAgICAgIGNhcHR1cmU6IHRydWUgfSk7CgoKICAgICAgc2Nyb2xsTGlzdGVuZXJzLnNldChpZCwgbGlzdGVuZXIpOwogICAgfQoKICAgIGZ1bmN0aW9uIHVucmVnaXN0ZXJTY3JvbGxMaXN0ZW5lcihpZCkgewogICAgICBzY3JvbGxMaXN0ZW5lcnMuZGVsZXRlKGlkKTsKICAgICAgaWYgKHVuYmluZFNjcm9sbExpc3RlbmVyICYmICFzY3JvbGxMaXN0ZW5lcnMuc2l6ZSkgewogICAgICAgIHVuYmluZFNjcm9sbExpc3RlbmVyKCk7CiAgICAgICAgdW5iaW5kU2Nyb2xsTGlzdGVuZXIgPSBudWxsOwogICAgICB9CiAgICB9CgogICAgdmFyIGdyaWQgPSB7CiAgICAgIGV4dGVuZHM6IE1hcmdpbiwKCiAgICAgIG1peGluczogW0NsYXNzLCBTY3JvbGxdLAoKICAgICAgbmFtZTogJ2dyaWQnLAoKICAgICAgcHJvcHM6IHsKICAgICAgICBtYXNvbnJ5OiBCb29sZWFuLAogICAgICAgIHBhcmFsbGF4OiBOdW1iZXIgfSwKCgogICAgICBkYXRhOiB7CiAgICAgICAgbWFyZ2luOiAndWstZ3JpZC1tYXJnaW4nLAogICAgICAgIGNsc1N0YWNrOiAndWstZ3JpZC1zdGFjaycsCiAgICAgICAgbWFzb25yeTogZmFsc2UsCiAgICAgICAgcGFyYWxsYXg6IDAgfSwKCgogICAgICBjb25uZWN0ZWQoKSB7CiAgICAgICAgdGhpcy5tYXNvbnJ5ICYmIGFkZENsYXNzKHRoaXMuJGVsLCAndWstZmxleC10b3AgdWstZmxleC13cmFwLXRvcCcpOwogICAgICB9LAoKICAgICAgdXBkYXRlOiBbCiAgICAgIHsKICAgICAgICB3cml0ZShfcmVmKSB7bGV0IHsgY29sdW1ucyB9ID0gX3JlZjsKICAgICAgICAgIHRvZ2dsZUNsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc1N0YWNrLCBjb2x1bW5zLmxlbmd0aCA8IDIpOwogICAgICAgIH0sCgogICAgICAgIGV2ZW50czogWydyZXNpemUnXSB9LAoKCiAgICAgIHsKICAgICAgICByZWFkKGRhdGEpIHsKICAgICAgICAgIGxldCB7IGNvbHVtbnMsIHJvd3MgfSA9IGRhdGE7CgogICAgICAgICAgLy8gRmlsdGVyIGNvbXBvbmVudCBtYWtlcyBlbGVtZW50cyBwb3NpdGlvbmVkIGFic29sdXRlCiAgICAgICAgICBpZiAoCiAgICAgICAgICAhY29sdW1ucy5sZW5ndGggfHwKICAgICAgICAgICF0aGlzLm1hc29ucnkgJiYgIXRoaXMucGFyYWxsYXggfHwKICAgICAgICAgIHBvc2l0aW9uZWRBYnNvbHV0ZSh0aGlzLiRlbCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIGRhdGEudHJhbnNsYXRlcyA9IGZhbHNlOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CgogICAgICAgICAgbGV0IHRyYW5zbGF0ZXMgPSBmYWxzZTsKCiAgICAgICAgICBjb25zdCBub2RlcyA9IGNoaWxkcmVuKHRoaXMuJGVsKTsKICAgICAgICAgIGNvbnN0IGNvbHVtbkhlaWdodHMgPSBnZXRDb2x1bW5IZWlnaHRzKGNvbHVtbnMpOwogICAgICAgICAgY29uc3QgbWFyZ2luID0gZ2V0TWFyZ2luVG9wKG5vZGVzLCB0aGlzLm1hcmdpbikgKiAocm93cy5sZW5ndGggLSAxKTsKICAgICAgICAgIGNvbnN0IGVsSGVpZ2h0ID0gTWF0aC5tYXgoLi4uY29sdW1uSGVpZ2h0cykgKyBtYXJnaW47CgogICAgICAgICAgaWYgKHRoaXMubWFzb25yeSkgewogICAgICAgICAgICBjb2x1bW5zID0gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gc29ydEJ5JDEoY29sdW1uLCAnb2Zmc2V0VG9wJykpOwogICAgICAgICAgICB0cmFuc2xhdGVzID0gZ2V0VHJhbnNsYXRlcyhyb3dzLCBjb2x1bW5zKTsKICAgICAgICAgIH0KCiAgICAgICAgICBsZXQgcGFkZGluZyA9IE1hdGguYWJzKHRoaXMucGFyYWxsYXgpOwogICAgICAgICAgaWYgKHBhZGRpbmcpIHsKICAgICAgICAgICAgcGFkZGluZyA9IGNvbHVtbkhlaWdodHMucmVkdWNlKAogICAgICAgICAgICAobmV3UGFkZGluZywgaGd0LCBpKSA9PgogICAgICAgICAgICBNYXRoLm1heCgKICAgICAgICAgICAgbmV3UGFkZGluZywKICAgICAgICAgICAgaGd0ICsgbWFyZ2luICsgKGkgJSAyID8gcGFkZGluZyA6IHBhZGRpbmcgLyA4KSAtIGVsSGVpZ2h0KSwKCiAgICAgICAgICAgIDApOwoKICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4geyBwYWRkaW5nLCBjb2x1bW5zLCB0cmFuc2xhdGVzLCBoZWlnaHQ6IHRyYW5zbGF0ZXMgPyBlbEhlaWdodCA6ICcnIH07CiAgICAgICAgfSwKCiAgICAgICAgd3JpdGUoX3JlZjIpIHtsZXQgeyBoZWlnaHQsIHBhZGRpbmcgfSA9IF9yZWYyOwogICAgICAgICAgY3NzKHRoaXMuJGVsLCAncGFkZGluZ0JvdHRvbScsIHBhZGRpbmcgfHwgJycpOwogICAgICAgICAgaGVpZ2h0ICE9PSBmYWxzZSAmJiBjc3ModGhpcy4kZWwsICdoZWlnaHQnLCBoZWlnaHQpOwogICAgICAgIH0sCgogICAgICAgIGV2ZW50czogWydyZXNpemUnXSB9LAoKCiAgICAgIHsKICAgICAgICByZWFkKCkgewogICAgICAgICAgaWYgKHRoaXMucGFyYWxsYXggJiYgcG9zaXRpb25lZEFic29sdXRlKHRoaXMuJGVsKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgc2Nyb2xsZWQ6IHRoaXMucGFyYWxsYXggPwogICAgICAgICAgICBzY3JvbGxlZE92ZXIodGhpcy4kZWwpICogTWF0aC5hYnModGhpcy5wYXJhbGxheCkgOgogICAgICAgICAgICBmYWxzZSB9OwoKICAgICAgICB9LAoKICAgICAgICB3cml0ZShfcmVmMykge2xldCB7IGNvbHVtbnMsIHNjcm9sbGVkLCB0cmFuc2xhdGVzIH0gPSBfcmVmMzsKICAgICAgICAgIGlmIChzY3JvbGxlZCA9PT0gZmFsc2UgJiYgIXRyYW5zbGF0ZXMpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpKSA9PgogICAgICAgICAgY29sdW1uLmZvckVhY2goKGVsLCBqKSA9PgogICAgICAgICAgY3NzKAogICAgICAgICAgZWwsCiAgICAgICAgICAndHJhbnNmb3JtJywKICAgICAgICAgICFzY3JvbGxlZCAmJiAhdHJhbnNsYXRlcyA/CiAgICAgICAgICAnJyA6ICJ0cmFuc2xhdGVZKCIgKyAoCgogICAgICAgICAgKHRyYW5zbGF0ZXMgJiYgLXRyYW5zbGF0ZXNbaV1bal0pICsgKAogICAgICAgICAgc2Nyb2xsZWQgPyBpICUgMiA/IHNjcm9sbGVkIDogc2Nyb2xsZWQgLyA4IDogMCkpICsgInB4KSIpKSk7CgoKCgogICAgICAgIH0sCgogICAgICAgIGV2ZW50czogWydzY3JvbGwnLCAncmVzaXplJ10gfV0gfTsKCgoKCiAgICBmdW5jdGlvbiBwb3NpdGlvbmVkQWJzb2x1dGUoZWwpIHsKICAgICAgcmV0dXJuIGNoaWxkcmVuKGVsKS5zb21lKChlbCkgPT4gY3NzKGVsLCAncG9zaXRpb24nKSA9PT0gJ2Fic29sdXRlJyk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0VHJhbnNsYXRlcyhyb3dzLCBjb2x1bW5zKSB7CiAgICAgIGNvbnN0IHJvd0hlaWdodHMgPSByb3dzLm1hcCgocm93KSA9PiBNYXRoLm1heCguLi5yb3cubWFwKChlbCkgPT4gZWwub2Zmc2V0SGVpZ2h0KSkpOwoKICAgICAgcmV0dXJuIGNvbHVtbnMubWFwKChlbGVtZW50cykgPT4gewogICAgICAgIGxldCBwcmV2ID0gMDsKICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKAogICAgICAgIChlbGVtZW50LCByb3cpID0+CiAgICAgICAgcHJldiArPSByb3cgPyByb3dIZWlnaHRzW3JvdyAtIDFdIC0gZWxlbWVudHNbcm93IC0gMV0ub2Zmc2V0SGVpZ2h0IDogMCk7CgogICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNYXJnaW5Ub3Aobm9kZXMsIGNscykgewogICAgICBjb25zdCBbbm9kZV0gPSBub2Rlcy5maWx0ZXIoKGVsKSA9PiBoYXNDbGFzcyhlbCwgY2xzKSk7CgogICAgICByZXR1cm4gdG9GbG9hdChub2RlID8gY3NzKG5vZGUsICdtYXJnaW5Ub3AnKSA6IGNzcyhub2Rlc1swXSwgJ3BhZGRpbmdMZWZ0JykpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldENvbHVtbkhlaWdodHMoY29sdW1ucykgewogICAgICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLnJlZHVjZSgoc3VtLCBlbCkgPT4gc3VtICsgZWwub2Zmc2V0SGVpZ2h0LCAwKSk7CiAgICB9CgogICAgdmFyIGhlaWdodE1hdGNoID0gewogICAgICBtaXhpbnM6IFtSZXNpemVdLAoKICAgICAgYXJnczogJ3RhcmdldCcsCgogICAgICBwcm9wczogewogICAgICAgIHRhcmdldDogU3RyaW5nLAogICAgICAgIHJvdzogQm9vbGVhbiB9LAoKCiAgICAgIGRhdGE6IHsKICAgICAgICB0YXJnZXQ6ICc+IConLAogICAgICAgIHJvdzogdHJ1ZSB9LAoKCiAgICAgIGNvbXB1dGVkOiB7CiAgICAgICAgZWxlbWVudHM6IHsKICAgICAgICAgIGdldChfcmVmLCAkZWwpIHtsZXQgeyB0YXJnZXQgfSA9IF9yZWY7CiAgICAgICAgICAgIHJldHVybiAkJCh0YXJnZXQsICRlbCk7CiAgICAgICAgICB9LAoKICAgICAgICAgIHdhdGNoKCkgewogICAgICAgICAgICB0aGlzLiRyZXNldCgpOwogICAgICAgICAgfSB9IH0sCgoKCiAgICAgIHJlc2l6ZVRhcmdldHMoKSB7CiAgICAgICAgcmV0dXJuIFt0aGlzLiRlbCwgLi4udGhpcy5lbGVtZW50c107CiAgICAgIH0sCgogICAgICB1cGRhdGU6IHsKICAgICAgICByZWFkKCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcm93czogKHRoaXMucm93ID8gZ2V0Um93cyh0aGlzLmVsZW1lbnRzKSA6IFt0aGlzLmVsZW1lbnRzXSkubWFwKG1hdGNoJDEpIH07CgogICAgICAgIH0sCgogICAgICAgIHdyaXRlKF9yZWYyKSB7bGV0IHsgcm93cyB9ID0gX3JlZjI7CiAgICAgICAgICBmb3IgKGNvbnN0IHsgaGVpZ2h0cywgZWxlbWVudHMgfSBvZiByb3dzKSB7CiAgICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsLCBpKSA9PiBjc3MoZWwsICdtaW5IZWlnaHQnLCBoZWlnaHRzW2ldKSk7CiAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiBbJ3Jlc2l6ZSddIH0gfTsKCgoKICAgIGZ1bmN0aW9uIG1hdGNoJDEoZWxlbWVudHMpIHsKICAgICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA8IDIpIHsKICAgICAgICByZXR1cm4geyBoZWlnaHRzOiBbJyddLCBlbGVtZW50cyB9OwogICAgICB9CgogICAgICBjc3MoZWxlbWVudHMsICdtaW5IZWlnaHQnLCAnJyk7CiAgICAgIGxldCBoZWlnaHRzID0gZWxlbWVudHMubWFwKGdldEhlaWdodCk7CiAgICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLmhlaWdodHMpOwoKICAgICAgcmV0dXJuIHsKICAgICAgICBoZWlnaHRzOiBlbGVtZW50cy5tYXAoKGVsLCBpKSA9PiBoZWlnaHRzW2ldLnRvRml4ZWQoMikgPT09IG1heC50b0ZpeGVkKDIpID8gJycgOiBtYXgpLAogICAgICAgIGVsZW1lbnRzIH07CgogICAgfQoKICAgIGZ1bmN0aW9uIGdldEhlaWdodChlbGVtZW50KSB7CiAgICAgIGxldCBzdHlsZSA9IGZhbHNlOwogICAgICBpZiAoIWlzVmlzaWJsZShlbGVtZW50KSkgewogICAgICAgIHN0eWxlID0gZWxlbWVudC5zdHlsZS5kaXNwbGF5OwogICAgICAgIGNzcyhlbGVtZW50LCAnZGlzcGxheScsICdibG9jaycsICdpbXBvcnRhbnQnKTsKICAgICAgfQoKICAgICAgY29uc3QgaGVpZ2h0ID0gZGltZW5zaW9ucyQxKGVsZW1lbnQpLmhlaWdodCAtIGJveE1vZGVsQWRqdXN0KGVsZW1lbnQsICdoZWlnaHQnLCAnY29udGVudC1ib3gnKTsKCiAgICAgIGlmIChzdHlsZSAhPT0gZmFsc2UpIHsKICAgICAgICBjc3MoZWxlbWVudCwgJ2Rpc3BsYXknLCBzdHlsZSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBoZWlnaHQ7CiAgICB9CgogICAgdmFyIGhlaWdodFZpZXdwb3J0ID0gewogICAgICBtaXhpbnM6IFtSZXNpemVdLAoKICAgICAgcHJvcHM6IHsKICAgICAgICBleHBhbmQ6IEJvb2xlYW4sCiAgICAgICAgb2Zmc2V0VG9wOiBCb29sZWFuLAogICAgICAgIG9mZnNldEJvdHRvbTogQm9vbGVhbiwKICAgICAgICBtaW5IZWlnaHQ6IE51bWJlciB9LAoKCiAgICAgIGRhdGE6IHsKICAgICAgICBleHBhbmQ6IGZhbHNlLAogICAgICAgIG9mZnNldFRvcDogZmFsc2UsCiAgICAgICAgb2Zmc2V0Qm90dG9tOiBmYWxzZSwKICAgICAgICBtaW5IZWlnaHQ6IDAgfSwKCgogICAgICByZXNpemVUYXJnZXRzKCkgewogICAgICAgIC8vIGNoZWNrIGZvciBvZmZzZXRUb3AgY2hhbmdlCiAgICAgICAgcmV0dXJuIFt0aGlzLiRlbCwgLi4uc2Nyb2xsUGFyZW50cyh0aGlzLiRlbCwgL2F1dG98c2Nyb2xsLyldOwogICAgICB9LAoKICAgICAgdXBkYXRlOiB7CiAgICAgICAgcmVhZChfcmVmKSB7bGV0IHsgbWluSGVpZ2h0OiBwcmV2IH0gPSBfcmVmOwogICAgICAgICAgaWYgKCFpc1Zpc2libGUodGhpcy4kZWwpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KCiAgICAgICAgICBsZXQgbWluSGVpZ2h0ID0gJyc7CiAgICAgICAgICBjb25zdCBib3ggPSBib3hNb2RlbEFkanVzdCh0aGlzLiRlbCwgJ2hlaWdodCcsICdjb250ZW50LWJveCcpOwoKICAgICAgICAgIGNvbnN0IHsgYm9keSwgc2Nyb2xsaW5nRWxlbWVudCB9ID0gZG9jdW1lbnQ7CiAgICAgICAgICBjb25zdCBbc2Nyb2xsRWxlbWVudF0gPSBzY3JvbGxQYXJlbnRzKHRoaXMuJGVsLCAvYXV0b3xzY3JvbGwvKTsKICAgICAgICAgIGNvbnN0IHsgaGVpZ2h0OiB2aWV3cG9ydEhlaWdodCB9ID0gb2Zmc2V0Vmlld3BvcnQoCiAgICAgICAgICBzY3JvbGxFbGVtZW50ID09PSBib2R5ID8gc2Nyb2xsaW5nRWxlbWVudCA6IHNjcm9sbEVsZW1lbnQpOwoKCiAgICAgICAgICBpZiAodGhpcy5leHBhbmQpIHsKICAgICAgICAgICAgbWluSGVpZ2h0ID0gTWF0aC5tYXgoCiAgICAgICAgICAgIHZpZXdwb3J0SGVpZ2h0IC0gKAogICAgICAgICAgICBkaW1lbnNpb25zJDEoc2Nyb2xsRWxlbWVudCkuaGVpZ2h0IC0gZGltZW5zaW9ucyQxKHRoaXMuJGVsKS5oZWlnaHQpIC0KICAgICAgICAgICAgYm94LAogICAgICAgICAgICAwKTsKCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCBpc1Njcm9sbGluZ0VsZW1lbnQgPQogICAgICAgICAgICBzY3JvbGxpbmdFbGVtZW50ID09PSBzY3JvbGxFbGVtZW50IHx8IGJvZHkgPT09IHNjcm9sbEVsZW1lbnQ7CgogICAgICAgICAgICAvLyBvbiBtb2JpbGUgZGV2aWNlcyAoaU9TIGFuZCBBbmRyb2lkKSB3aW5kb3cuaW5uZXJIZWlnaHQgIT09IDEwMHZoCiAgICAgICAgICAgIG1pbkhlaWdodCA9ICJjYWxjKCIgKyAoaXNTY3JvbGxpbmdFbGVtZW50ID8gJzEwMHZoJyA6IHZpZXdwb3J0SGVpZ2h0ICsgInB4Iik7CgogICAgICAgICAgICBpZiAodGhpcy5vZmZzZXRUb3ApIHsKICAgICAgICAgICAgICBpZiAoaXNTY3JvbGxpbmdFbGVtZW50KSB7CiAgICAgICAgICAgICAgICBjb25zdCB0b3AgPSBvZmZzZXRQb3NpdGlvbih0aGlzLiRlbClbMF0gLSBvZmZzZXRQb3NpdGlvbihzY3JvbGxFbGVtZW50KVswXTsKICAgICAgICAgICAgICAgIG1pbkhlaWdodCArPSB0b3AgPiAwICYmIHRvcCA8IHZpZXdwb3J0SGVpZ2h0IC8gMiA/ICIgLSAiICsgdG9wICsgInB4IiA6ICcnOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBtaW5IZWlnaHQgKz0gIiAtICIgKyBjc3Moc2Nyb2xsRWxlbWVudCwgJ3BhZGRpbmdUb3AnKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICh0aGlzLm9mZnNldEJvdHRvbSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAgIG1pbkhlaWdodCArPSAiIC0gIiArIGRpbWVuc2lvbnMkMSh0aGlzLiRlbC5uZXh0RWxlbWVudFNpYmxpbmcpLmhlaWdodCArICJweCI7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1lcmljKHRoaXMub2Zmc2V0Qm90dG9tKSkgewogICAgICAgICAgICAgIG1pbkhlaWdodCArPSAiIC0gIiArIHRoaXMub2Zmc2V0Qm90dG9tICsgInZoIjsKICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9mZnNldEJvdHRvbSAmJiBlbmRzV2l0aCh0aGlzLm9mZnNldEJvdHRvbSwgJ3B4JykpIHsKICAgICAgICAgICAgICBtaW5IZWlnaHQgKz0gIiAtICIgKyB0b0Zsb2F0KHRoaXMub2Zmc2V0Qm90dG9tKSArICJweCI7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcodGhpcy5vZmZzZXRCb3R0b20pKSB7CiAgICAgICAgICAgICAgbWluSGVpZ2h0ICs9ICIgLSAiICsgZGltZW5zaW9ucyQxKHF1ZXJ5KHRoaXMub2Zmc2V0Qm90dG9tLCB0aGlzLiRlbCkpLmhlaWdodCArICJweCI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG1pbkhlaWdodCArPSAoYm94ID8gIiAtICIgKyBib3ggKyAicHgiIDogJycpICsgIikiOwogICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiB7IG1pbkhlaWdodCwgcHJldiB9OwogICAgICAgIH0sCgogICAgICAgIHdyaXRlKF9yZWYyKSB7bGV0IHsgbWluSGVpZ2h0IH0gPSBfcmVmMjsKICAgICAgICAgIGNzcyh0aGlzLiRlbCwgeyBtaW5IZWlnaHQgfSk7CgogICAgICAgICAgaWYgKHRoaXMubWluSGVpZ2h0ICYmIHRvRmxvYXQoY3NzKHRoaXMuJGVsLCAnbWluSGVpZ2h0JykpIDwgdGhpcy5taW5IZWlnaHQpIHsKICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCAnbWluSGVpZ2h0JywgdGhpcy5taW5IZWlnaHQpOwogICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIGV2ZW50czogWydyZXNpemUnXSB9IH07CgogICAgdmFyIFNWRyA9IHsKICAgICAgYXJnczogJ3NyYycsCgogICAgICBwcm9wczogewogICAgICAgIGlkOiBCb29sZWFuLAogICAgICAgIGljb246IFN0cmluZywKICAgICAgICBzcmM6IFN0cmluZywKICAgICAgICBzdHlsZTogU3RyaW5nLAogICAgICAgIHdpZHRoOiBOdW1iZXIsCiAgICAgICAgaGVpZ2h0OiBOdW1iZXIsCiAgICAgICAgcmF0aW86IE51bWJlciwKICAgICAgICBjbGFzczogU3RyaW5nLAogICAgICAgIHN0cm9rZUFuaW1hdGlvbjogQm9vbGVhbiwKICAgICAgICBmb2N1c2FibGU6IEJvb2xlYW4sIC8vIElFIDExCiAgICAgICAgYXR0cmlidXRlczogJ2xpc3QnIH0sCgoKICAgICAgZGF0YTogewogICAgICAgIHJhdGlvOiAxLAogICAgICAgIGluY2x1ZGU6IFsnc3R5bGUnLCAnY2xhc3MnLCAnZm9jdXNhYmxlJ10sCiAgICAgICAgY2xhc3M6ICcnLAogICAgICAgIHN0cm9rZUFuaW1hdGlvbjogZmFsc2UgfSwKCgogICAgICBiZWZvcmVDb25uZWN0KCkgewogICAgICAgIHRoaXMuY2xhc3MgKz0gJyB1ay1zdmcnOwogICAgICB9LAoKICAgICAgY29ubmVjdGVkKCkgewogICAgICAgIGlmICghdGhpcy5pY29uICYmIGluY2x1ZGVzKHRoaXMuc3JjLCAnIycpKSB7CiAgICAgICAgICBbdGhpcy5zcmMsIHRoaXMuaWNvbl0gPSB0aGlzLnNyYy5zcGxpdCgnIycpOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5zdmcgPSB0aGlzLmdldFN2ZygpLnRoZW4oKGVsKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5fY29ubmVjdGVkKSB7CiAgICAgICAgICAgIGNvbnN0IHN2ZyA9IGluc2VydFNWRyhlbCwgdGhpcy4kZWwpOwoKICAgICAgICAgICAgaWYgKHRoaXMuc3ZnRWwgJiYgc3ZnICE9PSB0aGlzLnN2Z0VsKSB7CiAgICAgICAgICAgICAgcmVtb3ZlJDEodGhpcy5zdmdFbCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRoaXMuYXBwbHlBdHRyaWJ1dGVzKHN2ZywgZWwpOwoKICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ZnRWwgPSBzdmc7CiAgICAgICAgICB9CiAgICAgICAgfSwgbm9vcCk7CgogICAgICAgIGlmICh0aGlzLnN0cm9rZUFuaW1hdGlvbikgewogICAgICAgICAgdGhpcy5zdmcudGhlbigoZWwpID0+IHsKICAgICAgICAgICAgaWYgKHRoaXMuX2Nvbm5lY3RlZCkgewogICAgICAgICAgICAgIGFwcGx5QW5pbWF0aW9uKGVsKTsKICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyT2JzZXJ2ZXIoCiAgICAgICAgICAgICAgb2JzZXJ2ZUludGVyc2VjdGlvbihlbCwgKHJlY29yZHMsIG9ic2VydmVyKSA9PiB7CiAgICAgICAgICAgICAgICBhcHBseUFuaW1hdGlvbihlbCk7CiAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAoKICAgICAgZGlzY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMuc3ZnLnRoZW4oKHN2ZykgPT4gewogICAgICAgICAgaWYgKHRoaXMuX2Nvbm5lY3RlZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKGlzVm9pZEVsZW1lbnQodGhpcy4kZWwpKSB7CiAgICAgICAgICAgIHRoaXMuJGVsLmhpZGRlbiA9IGZhbHNlOwogICAgICAgICAgfQoKICAgICAgICAgIHJlbW92ZSQxKHN2Zyk7CiAgICAgICAgICB0aGlzLnN2Z0VsID0gbnVsbDsKICAgICAgICB9KTsKCiAgICAgICAgdGhpcy5zdmcgPSBudWxsOwogICAgICB9LAoKICAgICAgbWV0aG9kczogewogICAgICAgIGFzeW5jIGdldFN2ZygpIHsKICAgICAgICAgIGlmIChpc1RhZyh0aGlzLiRlbCwgJ2ltZycpICYmICF0aGlzLiRlbC5jb21wbGV0ZSAmJiB0aGlzLiRlbC5sb2FkaW5nID09PSAnbGF6eScpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PgogICAgICAgICAgICBvbmNlKHRoaXMuJGVsLCAnbG9hZCcsICgpID0+IHJlc29sdmUodGhpcy5nZXRTdmcoKSkpKTsKCiAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuIHBhcnNlU1ZHKGF3YWl0IGxvYWRTVkcodGhpcy5zcmMpLCB0aGlzLmljb24pIHx8IFByb21pc2UucmVqZWN0KCdTVkcgbm90IGZvdW5kLicpOwogICAgICAgIH0sCgogICAgICAgIGFwcGx5QXR0cmlidXRlcyhlbCwgcmVmKSB7CiAgICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gdGhpcy4kb3B0aW9ucy5wcm9wcykgewogICAgICAgICAgICBpZiAoaW5jbHVkZXModGhpcy5pbmNsdWRlLCBwcm9wKSAmJiBwcm9wIGluIHRoaXMpIHsKICAgICAgICAgICAgICBhdHRyKGVsLCBwcm9wLCB0aGlzW3Byb3BdKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIGZvciAoY29uc3QgYXR0cmlidXRlIGluIHRoaXMuYXR0cmlidXRlcykgewogICAgICAgICAgICBjb25zdCBbcHJvcCwgdmFsdWVdID0gdGhpcy5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV0uc3BsaXQoJzonLCAyKTsKICAgICAgICAgICAgYXR0cihlbCwgcHJvcCwgdmFsdWUpOwogICAgICAgICAgfQoKICAgICAgICAgIGlmICghdGhpcy5pZCkgewogICAgICAgICAgICByZW1vdmVBdHRyKGVsLCAnaWQnKTsKICAgICAgICAgIH0KCiAgICAgICAgICBjb25zdCBwcm9wcyA9IFsnd2lkdGgnLCAnaGVpZ2h0J107CiAgICAgICAgICBsZXQgZGltZW5zaW9ucyA9IHByb3BzLm1hcCgocHJvcCkgPT4gdGhpc1twcm9wXSk7CgogICAgICAgICAgaWYgKCFkaW1lbnNpb25zLnNvbWUoKHZhbCkgPT4gdmFsKSkgewogICAgICAgICAgICBkaW1lbnNpb25zID0gcHJvcHMubWFwKChwcm9wKSA9PiBhdHRyKHJlZiwgcHJvcCkpOwogICAgICAgICAgfQoKICAgICAgICAgIGNvbnN0IHZpZXdCb3ggPSBhdHRyKHJlZiwgJ3ZpZXdCb3gnKTsKICAgICAgICAgIGlmICh2aWV3Qm94ICYmICFkaW1lbnNpb25zLnNvbWUoKHZhbCkgPT4gdmFsKSkgewogICAgICAgICAgICBkaW1lbnNpb25zID0gdmlld0JveC5zcGxpdCgnICcpLnNsaWNlKDIpOwogICAgICAgICAgfQoKICAgICAgICAgIGRpbWVuc2lvbnMuZm9yRWFjaCgodmFsLCBpKSA9PiBhdHRyKGVsLCBwcm9wc1tpXSwgdG9GbG9hdCh2YWwpICogdGhpcy5yYXRpbyB8fCBudWxsKSk7CiAgICAgICAgfSB9IH07CgoKCiAgICBjb25zdCBsb2FkU1ZHID0gbWVtb2l6ZShhc3luYyAoc3JjKSA9PiB7CiAgICAgIGlmIChzcmMpIHsKICAgICAgICBpZiAoc3RhcnRzV2l0aChzcmMsICdkYXRhOicpKSB7CiAgICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHNyYy5zcGxpdCgnLCcpWzFdKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIChhd2FpdCBmZXRjaChzcmMpKS50ZXh0KCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpOwogICAgICB9CiAgICB9KTsKCiAgICBmdW5jdGlvbiBwYXJzZVNWRyhzdmcsIGljb24pIHt2YXIgX3N2ZzsKICAgICAgaWYgKGljb24gJiYgaW5jbHVkZXMoc3ZnLCAnPHN5bWJvbCcpKSB7CiAgICAgICAgc3ZnID0gcGFyc2VTeW1ib2xzKHN2ZywgaWNvbikgfHwgc3ZnOwogICAgICB9CgogICAgICBzdmcgPSAkKHN2Zy5zdWJzdHIoc3ZnLmluZGV4T2YoJzxzdmcnKSkpOwogICAgICByZXR1cm4gKChfc3ZnID0gc3ZnKSA9PSBudWxsID8gdm9pZCAwIDogX3N2Zy5oYXNDaGlsZE5vZGVzKCkpICYmIHN2ZzsKICAgIH0KCiAgICBjb25zdCBzeW1ib2xSZSA9IC88c3ltYm9sKFteXSo/aWQ9KFsnIl0pKC4rPylcMlteXSo/PFwvKXN5bWJvbD4vZzsKICAgIGNvbnN0IHN5bWJvbHMgPSB7fTsKCiAgICBmdW5jdGlvbiBwYXJzZVN5bWJvbHMoc3ZnLCBpY29uKSB7CiAgICAgIGlmICghc3ltYm9sc1tzdmddKSB7CiAgICAgICAgc3ltYm9sc1tzdmddID0ge307CgogICAgICAgIHN5bWJvbFJlLmxhc3RJbmRleCA9IDA7CgogICAgICAgIGxldCBtYXRjaDsKICAgICAgICB3aGlsZSAobWF0Y2ggPSBzeW1ib2xSZS5leGVjKHN2ZykpIHsKICAgICAgICAgIHN5bWJvbHNbc3ZnXVttYXRjaFszXV0gPSAiPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIiICsgbWF0Y2hbMV0gKyAic3ZnPiI7CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gc3ltYm9sc1tzdmddW2ljb25dOwogICAgfQoKICAgIGZ1bmN0aW9uIGFwcGx5QW5pbWF0aW9uKGVsKSB7CiAgICAgIGNvbnN0IGxlbmd0aCA9IGdldE1heFBhdGhMZW5ndGgoZWwpOwoKICAgICAgaWYgKGxlbmd0aCkgewogICAgICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCctLXVrLWFuaW1hdGlvbi1zdHJva2UnLCBsZW5ndGgpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TWF4UGF0aExlbmd0aChlbCkgewogICAgICByZXR1cm4gTWF0aC5jZWlsKAogICAgICBNYXRoLm1heCgKICAgICAgMCwKICAgICAgLi4uJCQoJ1tzdHJva2VdJywgZWwpLm1hcCgoc3Ryb2tlKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJldHVybiBzdHJva2UuZ2V0VG90YWxMZW5ndGgoKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgIH0pKSk7CgoKICAgIH0KCiAgICBmdW5jdGlvbiBpbnNlcnRTVkcoZWwsIHJvb3QpIHsKICAgICAgaWYgKGlzVm9pZEVsZW1lbnQocm9vdCkgfHwgaXNUYWcocm9vdCwgJ2NhbnZhcycpKSB7CiAgICAgICAgcm9vdC5oaWRkZW4gPSB0cnVlOwoKICAgICAgICBjb25zdCBuZXh0ID0gcm9vdC5uZXh0RWxlbWVudFNpYmxpbmc7CiAgICAgICAgcmV0dXJuIGVxdWFscyhlbCwgbmV4dCkgPyBuZXh0IDogYWZ0ZXIocm9vdCwgZWwpOwogICAgICB9CgogICAgICBjb25zdCBsYXN0ID0gcm9vdC5sYXN0RWxlbWVudENoaWxkOwogICAgICByZXR1cm4gZXF1YWxzKGVsLCBsYXN0KSA/IGxhc3QgOiBhcHBlbmQocm9vdCwgZWwpOwogICAgfQoKICAgIGZ1bmN0aW9uIGVxdWFscyhlbCwgb3RoZXIpIHsKICAgICAgcmV0dXJuIGlzVGFnKGVsLCAnc3ZnJykgJiYgaXNUYWcob3RoZXIsICdzdmcnKSAmJiBpbm5lckhUTUwoZWwpID09PSBpbm5lckhUTUwob3RoZXIpOwogICAgfQoKICAgIGZ1bmN0aW9uIGlubmVySFRNTChlbCkgewogICAgICByZXR1cm4gKAogICAgICBlbC5pbm5lckhUTUwgfHwKICAgICAgbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhlbCkucmVwbGFjZSgvPHN2Zy4qPz4oLio/KTxcL3N2Zz4vZywgJyQxJykpLgogICAgICByZXBsYWNlKC9ccy9nLCAnJyk7CiAgICB9CgogICAgdmFyIGNsb3NlSWNvbiA9ICI8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgeDE9XCIxXCIgeTE9XCIxXCIgeDI9XCIxM1wiIHkyPVwiMTNcIi8+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgeDE9XCIxM1wiIHkxPVwiMVwiIHgyPVwiMVwiIHkyPVwiMTNcIi8+PC9zdmc+IjsKCiAgICB2YXIgY2xvc2VMYXJnZSA9ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS40XCIgeDE9XCIxXCIgeTE9XCIxXCIgeDI9XCIxOVwiIHkyPVwiMTlcIi8+PGxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS40XCIgeDE9XCIxOVwiIHkxPVwiMVwiIHgyPVwiMVwiIHkyPVwiMTlcIi8+PC9zdmc+IjsKCiAgICB2YXIgbWFya2VyID0gIjxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB4PVwiOVwiIHk9XCI0XCIgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMTFcIi8+PHJlY3QgeD1cIjRcIiB5PVwiOVwiIHdpZHRoPVwiMTFcIiBoZWlnaHQ9XCIxXCIvPjwvc3ZnPiI7CgogICAgdmFyIG5hdlBhcmVudEljb24gPSAiPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBwb2ludHM9XCIxIDMuNSA2IDguNSAxMSAzLjVcIi8+PC9zdmc+IjsKCiAgICB2YXIgbmF2UGFyZW50SWNvbkxhcmdlID0gIjxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgcG9pbnRzPVwiMSA0IDcgMTAgMTMgNFwiLz48L3N2Zz4iOwoKICAgIHZhciBuYXZiYXJQYXJlbnRJY29uID0gIjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIj48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgcG9pbnRzPVwiMSAzLjUgNiA4LjUgMTEgMy41XCIvPjwvc3ZnPiI7CgogICAgdmFyIG5hdmJhclRvZ2dsZUljb24gPSAiPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxzdHlsZT4udWstbmF2YmFyLXRvZ2dsZS1hbmltYXRlIHN2ZyA+IFtjbGFzcyo9J2xpbmUtJ10ge1xuICAgICAgICAgICAgdHJhbnNpdGlvbjogMC4ycyBlYXNlLWluLW91dDtcbiAgICAgICAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eSw7XG4gICAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XG4gICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLnVrLW5hdmJhci10b2dnbGUgc3ZnID4gLmxpbmUtMyB7IG9wYWNpdHk6IDA7IH1cbiAgICAgICAgLnVrLW5hdmJhci10b2dnbGUtYW5pbWF0ZVthcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXSBzdmcgPiAubGluZS0zIHsgb3BhY2l0eTogMTsgfVxuXG4gICAgICAgIC51ay1uYXZiYXItdG9nZ2xlLWFuaW1hdGVbYXJpYS1leHBhbmRlZD1cInRydWVcIl0gc3ZnID4gLmxpbmUtMiB7IHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsgfVxuICAgICAgICAudWstbmF2YmFyLXRvZ2dsZS1hbmltYXRlW2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdIHN2ZyA+IC5saW5lLTMgeyB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpOyB9XG5cbiAgICAgICAgLnVrLW5hdmJhci10b2dnbGUtYW5pbWF0ZVthcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXSBzdmcgPiAubGluZS0xLFxuICAgICAgICAudWstbmF2YmFyLXRvZ2dsZS1hbmltYXRlW2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdIHN2ZyA+IC5saW5lLTQgeyBvcGFjaXR5OiAwOyB9XG4gICAgICAgIC51ay1uYXZiYXItdG9nZ2xlLWFuaW1hdGVbYXJpYS1leHBhbmRlZD1cInRydWVcIl0gc3ZnID4gLmxpbmUtMSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSg2cHgpIHNjYWxlWCgwKTsgfVxuICAgICAgICAudWstbmF2YmFyLXRvZ2dsZS1hbmltYXRlW2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdIHN2ZyA+IC5saW5lLTQgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTZweCkgc2NhbGVYKDApOyB9PC9zdHlsZT48cmVjdCBjbGFzcz1cImxpbmUtMVwiIHk9XCIzXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjJcIi8+PHJlY3QgY2xhc3M9XCJsaW5lLTJcIiB5PVwiOVwiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyXCIvPjxyZWN0IGNsYXNzPVwibGluZS0zXCIgeT1cIjlcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMlwiLz48cmVjdCBjbGFzcz1cImxpbmUtNFwiIHk9XCIxNVwiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyXCIvPjwvc3ZnPiI7CgogICAgdmFyIG92ZXJsYXlJY29uID0gIjxzdmcgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB4PVwiMTlcIiB5PVwiMFwiIHdpZHRoPVwiMVwiIGhlaWdodD1cIjQwXCIvPjxyZWN0IHg9XCIwXCIgeT1cIjE5XCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjFcIi8+PC9zdmc+IjsKCiAgICB2YXIgcGFnaW5hdGlvbk5leHQgPSAiPHN2ZyB3aWR0aD1cIjdcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgNyAxMlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4yXCIgcG9pbnRzPVwiMSAxIDYgNiAxIDExXCIvPjwvc3ZnPiI7CgogICAgdmFyIHBhZ2luYXRpb25QcmV2aW91cyA9ICI8c3ZnIHdpZHRoPVwiN1wiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCA3IDEyXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjJcIiBwb2ludHM9XCI2IDEgMSA2IDYgMTFcIi8+PC9zdmc+IjsKCiAgICB2YXIgc2VhcmNoSWNvbiA9ICI8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBjeD1cIjlcIiBjeT1cIjlcIiByPVwiN1wiLz48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBkPVwiTTE0LDE0IEwxOCwxOCBMMTQsMTQgWlwiLz48L3N2Zz4iOwoKICAgIHZhciBzZWFyY2hMYXJnZSA9ICI8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHZpZXdCb3g9XCIwIDAgNDAgNDBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjhcIiBjeD1cIjE3LjVcIiBjeT1cIjE3LjVcIiByPVwiMTYuNVwiLz48bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjhcIiB4MT1cIjM4XCIgeTE9XCIzOVwiIHgyPVwiMjlcIiB5Mj1cIjMwXCIvPjwvc3ZnPiI7CgogICAgdmFyIHNlYXJjaE5hdmJhciA9ICI8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGNpcmNsZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjFcIiBjeD1cIjEwLjVcIiBjeT1cIjEwLjVcIiByPVwiOS41XCIvPjxsaW5lIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIHgxPVwiMjNcIiB5MT1cIjIzXCIgeDI9XCIxN1wiIHkyPVwiMTdcIi8+PC9zdmc+IjsKCiAgICB2YXIgc2xpZGVuYXZOZXh0ID0gIjxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAxNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS40XCIgcG9pbnRzPVwiMS4yMjUsMjMgMTIuNzc1LDEyIDEuMjI1LDEgXCIvPjwvc3ZnPiI7CgogICAgdmFyIHNsaWRlbmF2TmV4dExhcmdlID0gIjxzdmcgd2lkdGg9XCIyNVwiIGhlaWdodD1cIjQwXCIgdmlld0JveD1cIjAgMCAyNSA0MFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHBvaW50cz1cIjQuMDAyLDM4LjU0NyAyMi41MjcsMjAuMDI0IDQsMS41IFwiLz48L3N2Zz4iOwoKICAgIHZhciBzbGlkZW5hdlByZXZpb3VzID0gIjxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAxNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS40XCIgcG9pbnRzPVwiMTIuNzc1LDEgMS4yMjUsMTIgMTIuNzc1LDIzIFwiLz48L3N2Zz4iOwoKICAgIHZhciBzbGlkZW5hdlByZXZpb3VzTGFyZ2UgPSAiPHN2ZyB3aWR0aD1cIjI1XCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDI1IDQwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwb2x5bGluZSBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiMwMDBcIiBzdHJva2Utd2lkdGg9XCIyXCIgcG9pbnRzPVwiMjAuNTI3LDEuNSAyLDIwLjAyNCAyMC41MjUsMzguNTQ3IFwiLz48L3N2Zz4iOwoKICAgIHZhciBzcGlubmVyID0gIjxzdmcgd2lkdGg9XCIzMFwiIGhlaWdodD1cIjMwXCIgdmlld0JveD1cIjAgMCAzMCAzMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48Y2lyY2xlIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzAwMFwiIGN4PVwiMTVcIiBjeT1cIjE1XCIgcj1cIjE0XCIvPjwvc3ZnPiI7CgogICAgdmFyIHRvdG9wID0gIjxzdmcgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjEwXCIgdmlld0JveD1cIjAgMCAxOCAxMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cG9seWxpbmUgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMS4yXCIgcG9pbnRzPVwiMSA5IDkgMSAxNyA5IFwiLz48L3N2Zz4iOwoKICAgIGNvbnN0IGljb25zID0gewogICAgICBzcGlubmVyLAogICAgICB0b3RvcCwKICAgICAgbWFya2VyLAogICAgICAnY2xvc2UtaWNvbic6IGNsb3NlSWNvbiwKICAgICAgJ2Nsb3NlLWxhcmdlJzogY2xvc2VMYXJnZSwKICAgICAgJ25hdi1wYXJlbnQtaWNvbic6IG5hdlBhcmVudEljb24sCiAgICAgICduYXYtcGFyZW50LWljb24tbGFyZ2UnOiBuYXZQYXJlbnRJY29uTGFyZ2UsCiAgICAgICduYXZiYXItcGFyZW50LWljb24nOiBuYXZiYXJQYXJlbnRJY29uLAogICAgICAnbmF2YmFyLXRvZ2dsZS1pY29uJzogbmF2YmFyVG9nZ2xlSWNvbiwKICAgICAgJ292ZXJsYXktaWNvbic6IG92ZXJsYXlJY29uLAogICAgICAncGFnaW5hdGlvbi1uZXh0JzogcGFnaW5hdGlvbk5leHQsCiAgICAgICdwYWdpbmF0aW9uLXByZXZpb3VzJzogcGFnaW5hdGlvblByZXZpb3VzLAogICAgICAnc2VhcmNoLWljb24nOiBzZWFyY2hJY29uLAogICAgICAnc2VhcmNoLWxhcmdlJzogc2VhcmNoTGFyZ2UsCiAgICAgICdzZWFyY2gtbmF2YmFyJzogc2VhcmNoTmF2YmFyLAogICAgICAnc2xpZGVuYXYtbmV4dCc6IHNsaWRlbmF2TmV4dCwKICAgICAgJ3NsaWRlbmF2LW5leHQtbGFyZ2UnOiBzbGlkZW5hdk5leHRMYXJnZSwKICAgICAgJ3NsaWRlbmF2LXByZXZpb3VzJzogc2xpZGVuYXZQcmV2aW91cywKICAgICAgJ3NsaWRlbmF2LXByZXZpb3VzLWxhcmdlJzogc2xpZGVuYXZQcmV2aW91c0xhcmdlIH07CgoKICAgIGNvbnN0IEljb24gPSB7CiAgICAgIGluc3RhbGw6IGluc3RhbGwkMywKCiAgICAgIGV4dGVuZHM6IFNWRywKCiAgICAgIGFyZ3M6ICdpY29uJywKCiAgICAgIHByb3BzOiBbJ2ljb24nXSwKCiAgICAgIGRhdGE6IHsKICAgICAgICBpbmNsdWRlOiBbJ2ZvY3VzYWJsZSddIH0sCgoKICAgICAgaXNJY29uOiB0cnVlLAoKICAgICAgYmVmb3JlQ29ubmVjdCgpIHsKICAgICAgICBhZGRDbGFzcyh0aGlzLiRlbCwgJ3VrLWljb24nKTsKICAgICAgfSwKCiAgICAgIG1ldGhvZHM6IHsKICAgICAgICBhc3luYyBnZXRTdmcoKSB7CiAgICAgICAgICBjb25zdCBpY29uID0gZ2V0SWNvbih0aGlzLmljb24pOwoKICAgICAgICAgIGlmICghaWNvbikgewogICAgICAgICAgICB0aHJvdyAnSWNvbiBub3QgZm91bmQuJzsKICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gaWNvbjsKICAgICAgICB9IH0gfTsKCiAgICBjb25zdCBJY29uQ29tcG9uZW50ID0gewogICAgICBhcmdzOiBmYWxzZSwKCiAgICAgIGV4dGVuZHM6IEljb24sCgogICAgICBkYXRhOiAodm0pID0+ICh7CiAgICAgICAgaWNvbjogaHlwaGVuYXRlKHZtLmNvbnN0cnVjdG9yLm9wdGlvbnMubmFtZSkgfSksCgoKICAgICAgYmVmb3JlQ29ubmVjdCgpIHsKICAgICAgICBhZGRDbGFzcyh0aGlzLiRlbCwgdGhpcy4kbmFtZSk7CiAgICAgIH0gfTsKCgogICAgY29uc3QgTmF2UGFyZW50SWNvbiA9IHsKICAgICAgZXh0ZW5kczogSWNvbkNvbXBvbmVudCwKCiAgICAgIGJlZm9yZUNvbm5lY3QoKSB7CiAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMuJHByb3BzLmljb247CiAgICAgICAgdGhpcy5pY29uID0gY2xvc2VzdCh0aGlzLiRlbCwgJy51ay1uYXYtcHJpbWFyeScpID8gaWNvbiArICItbGFyZ2UiIDogaWNvbjsKICAgICAgfSB9OwoKCiAgICBjb25zdCBTbGlkZW5hdiA9IHsKICAgICAgZXh0ZW5kczogSWNvbkNvbXBvbmVudCwKCiAgICAgIGJlZm9yZUNvbm5lY3QoKSB7CiAgICAgICAgYWRkQ2xhc3ModGhpcy4kZWwsICd1ay1zbGlkZW5hdicpOwogICAgICAgIGNvbnN0IGljb24gPSB0aGlzLiRwcm9wcy5pY29uOwogICAgICAgIHRoaXMuaWNvbiA9IGhhc0NsYXNzKHRoaXMuJGVsLCAndWstc2xpZGVuYXYtbGFyZ2UnKSA/IGljb24gKyAiLWxhcmdlIiA6IGljb247CiAgICAgIH0gfTsKCgogICAgY29uc3QgU2VhcmNoID0gewogICAgICBleHRlbmRzOiBJY29uQ29tcG9uZW50LAoKICAgICAgYmVmb3JlQ29ubmVjdCgpIHsKICAgICAgICB0aGlzLmljb24gPQogICAgICAgIGhhc0NsYXNzKHRoaXMuJGVsLCAndWstc2VhcmNoLWljb24nKSAmJiBwYXJlbnRzKHRoaXMuJGVsLCAnLnVrLXNlYXJjaC1sYXJnZScpLmxlbmd0aCA/CiAgICAgICAgJ3NlYXJjaC1sYXJnZScgOgogICAgICAgIHBhcmVudHModGhpcy4kZWwsICcudWstc2VhcmNoLW5hdmJhcicpLmxlbmd0aCA/CiAgICAgICAgJ3NlYXJjaC1uYXZiYXInIDoKICAgICAgICB0aGlzLiRwcm9wcy5pY29uOwogICAgICB9IH07CgoKICAgIGNvbnN0IENsb3NlID0gewogICAgICBleHRlbmRzOiBJY29uQ29tcG9uZW50LAoKICAgICAgYmVmb3JlQ29ubmVjdCgpIHsKICAgICAgICB0aGlzLmljb24gPSAiY2xvc2UtIiArIChoYXNDbGFzcyh0aGlzLiRlbCwgJ3VrLWNsb3NlLWxhcmdlJykgPyAnbGFyZ2UnIDogJ2ljb24nKTsKICAgICAgfSB9OwoKCiAgICBjb25zdCBTcGlubmVyID0gewogICAgICBleHRlbmRzOiBJY29uQ29tcG9uZW50LAoKICAgICAgbWV0aG9kczogewogICAgICAgIGFzeW5jIGdldFN2ZygpIHsKICAgICAgICAgIGNvbnN0IGljb24gPSBhd2FpdCBJY29uLm1ldGhvZHMuZ2V0U3ZnLmNhbGwodGhpcyk7CgogICAgICAgICAgaWYgKHRoaXMucmF0aW8gIT09IDEpIHsKICAgICAgICAgICAgY3NzKCQoJ2NpcmNsZScsIGljb24pLCAnc3Ryb2tlV2lkdGgnLCAxIC8gdGhpcy5yYXRpbyk7CiAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuIGljb247CiAgICAgICAgfSB9IH07CgoKCiAgICBjb25zdCBwYXJzZWQgPSB7fTsKICAgIGZ1bmN0aW9uIGluc3RhbGwkMyhVSWtpdCkgewogICAgICBVSWtpdC5pY29uLmFkZCA9IChuYW1lLCBzdmcpID0+IHsKICAgICAgICBjb25zdCBhZGRlZCA9IGlzU3RyaW5nKG5hbWUpID8geyBbbmFtZV06IHN2ZyB9IDogbmFtZTsKICAgICAgICBlYWNoKGFkZGVkLCAoc3ZnLCBuYW1lKSA9PiB7CiAgICAgICAgICBpY29uc1tuYW1lXSA9IHN2ZzsKICAgICAgICAgIGRlbGV0ZSBwYXJzZWRbbmFtZV07CiAgICAgICAgfSk7CgogICAgICAgIGlmIChVSWtpdC5faW5pdGlhbGl6ZWQpIHsKICAgICAgICAgIGFwcGx5KGRvY3VtZW50LmJvZHksIChlbCkgPT4KICAgICAgICAgIGVhY2goVUlraXQuZ2V0Q29tcG9uZW50cyhlbCksIChjbXApID0+IHsKICAgICAgICAgICAgY21wLiRvcHRpb25zLmlzSWNvbiAmJiBjbXAuaWNvbiBpbiBhZGRlZCAmJiBjbXAuJHJlc2V0KCk7CiAgICAgICAgICB9KSk7CgogICAgICAgIH0KICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRJY29uKGljb24pIHsKICAgICAgaWYgKCFpY29uc1tpY29uXSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CgogICAgICBpZiAoIXBhcnNlZFtpY29uXSkgewogICAgICAgIHBhcnNlZFtpY29uXSA9ICQoKGljb25zW2FwcGx5UnRsKGljb24pXSB8fCBpY29uc1tpY29uXSkudHJpbSgpKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHBhcnNlZFtpY29uXS5jbG9uZU5vZGUodHJ1ZSk7CiAgICB9CgogICAgZnVuY3Rpb24gYXBwbHlSdGwoaWNvbikgewogICAgICByZXR1cm4gaXNSdGwgPyBzd2FwKHN3YXAoaWNvbiwgJ2xlZnQnLCAncmlnaHQnKSwgJ3ByZXZpb3VzJywgJ25leHQnKSA6IGljb247CiAgICB9CgogICAgY29uc3QgbmF0aXZlTGF6eUxvYWQgPSBpbkJyb3dzZXIgJiYgJ2xvYWRpbmcnIGluIEhUTUxJbWFnZUVsZW1lbnQucHJvdG90eXBlOwoKICAgIHZhciBpbWcgPSB7CiAgICAgIGFyZ3M6ICdkYXRhU3JjJywKCiAgICAgIHByb3BzOiB7CiAgICAgICAgZGF0YVNyYzogU3RyaW5nLAogICAgICAgIHNvdXJjZXM6IFN0cmluZywKICAgICAgICBvZmZzZXRUb3A6IFN0cmluZywKICAgICAgICBvZmZzZXRMZWZ0OiBTdHJpbmcsCiAgICAgICAgdGFyZ2V0OiBTdHJpbmcsCiAgICAgICAgbG9hZGluZzogU3RyaW5nIH0sCgoKICAgICAgZGF0YTogewogICAgICAgIGRhdGFTcmM6ICcnLAogICAgICAgIHNvdXJjZXM6IGZhbHNlLAogICAgICAgIG9mZnNldFRvcDogJzUwdmgnLAogICAgICAgIG9mZnNldExlZnQ6ICc1MHZ3JywKICAgICAgICB0YXJnZXQ6IGZhbHNlLAogICAgICAgIGxvYWRpbmc6ICdsYXp5JyB9LAoKCiAgICAgIGNvbm5lY3RlZCgpIHsKICAgICAgICBpZiAodGhpcy5sb2FkaW5nICE9PSAnbGF6eScpIHsKICAgICAgICAgIHRoaXMubG9hZCgpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgY29uc3QgdGFyZ2V0ID0gW3RoaXMuJGVsLCAuLi5xdWVyeUFsbCh0aGlzLiRwcm9wcy50YXJnZXQsIHRoaXMuJGVsKV07CgogICAgICAgIGlmIChuYXRpdmVMYXp5TG9hZCAmJiBpc0ltZyh0aGlzLiRlbCkpIHsKICAgICAgICAgIHRoaXMuJGVsLmxvYWRpbmcgPSAnbGF6eSc7CiAgICAgICAgICBzZXRTcmNBdHRycyh0aGlzLiRlbCk7CgogICAgICAgICAgaWYgKHRhcmdldC5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZW5zdXJlU3JjQXR0cmlidXRlKHRoaXMuJGVsKTsKCiAgICAgICAgdGhpcy5yZWdpc3Rlck9ic2VydmVyKAogICAgICAgIG9ic2VydmVJbnRlcnNlY3Rpb24oCiAgICAgICAgdGFyZ2V0LAogICAgICAgIChlbnRyaWVzLCBvYnNlcnZlcikgPT4gewogICAgICAgICAgdGhpcy5sb2FkKCk7CiAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICByb290TWFyZ2luOiB0b1B4KHRoaXMub2Zmc2V0VG9wLCAnaGVpZ2h0JykgKyAicHggIiArIHRvUHgoCiAgICAgICAgICB0aGlzLm9mZnNldExlZnQsCiAgICAgICAgICAnd2lkdGgnKSArICJweCIgfSkpOwoKCgoKICAgICAgfSwKCiAgICAgIGRpc2Nvbm5lY3RlZCgpIHsKICAgICAgICBpZiAodGhpcy5fZGF0YS5pbWFnZSkgewogICAgICAgICAgdGhpcy5fZGF0YS5pbWFnZS5vbmxvYWQgPSAnJzsKICAgICAgICB9CiAgICAgIH0sCgogICAgICBtZXRob2RzOiB7CiAgICAgICAgbG9hZCgpIHsKICAgICAgICAgIGlmICh0aGlzLl9kYXRhLmltYWdlKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRhLmltYWdlOwogICAgICAgICAgfQoKICAgICAgICAgIGNvbnN0IGltYWdlID0gaXNJbWcodGhpcy4kZWwpID8KICAgICAgICAgIHRoaXMuJGVsIDoKICAgICAgICAgIGdldEltYWdlRnJvbUVsZW1lbnQodGhpcy4kZWwsIHRoaXMuZGF0YVNyYywgdGhpcy5zb3VyY2VzKTsKCiAgICAgICAgICByZW1vdmVBdHRyKGltYWdlLCAnbG9hZGluZycpOwogICAgICAgICAgc2V0U3JjQXR0cnModGhpcy4kZWwsIGltYWdlLmN1cnJlbnRTcmMpOwogICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuaW1hZ2UgPSBpbWFnZTsKICAgICAgICB9IH0gfTsKCgoKICAgIGZ1bmN0aW9uIHNldFNyY0F0dHJzKGVsLCBzcmMpIHsKICAgICAgaWYgKGlzSW1nKGVsKSkgewogICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBwYXJlbnQoZWwpOwogICAgICAgIGNvbnN0IGVsZW1lbnRzID0gaXNQaWN0dXJlKHBhcmVudE5vZGUpID8gY2hpbGRyZW4ocGFyZW50Tm9kZSkgOiBbZWxdOwogICAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsKSA9PiBzZXRTb3VyY2VQcm9wcyhlbCwgZWwpKTsKICAgICAgfSBlbHNlIGlmIChzcmMpIHsKICAgICAgICBjb25zdCBjaGFuZ2UgPSAhaW5jbHVkZXMoZWwuc3R5bGUuYmFja2dyb3VuZEltYWdlLCBzcmMpOwogICAgICAgIGlmIChjaGFuZ2UpIHsKICAgICAgICAgIGNzcyhlbCwgJ2JhY2tncm91bmRJbWFnZScsICJ1cmwoIiArIGVzY2FwZShzcmMpICsgIikiKTsKICAgICAgICAgIHRyaWdnZXIoZWwsIGNyZWF0ZUV2ZW50KCdsb2FkJywgZmFsc2UpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBjb25zdCBzcmNQcm9wcyA9IFsnZGF0YS1zcmMnLCAnZGF0YS1zcmNzZXQnLCAnc2l6ZXMnXTsKICAgIGZ1bmN0aW9uIHNldFNvdXJjZVByb3BzKHNvdXJjZUVsLCB0YXJnZXRFbCkgewogICAgICBzcmNQcm9wcy5mb3JFYWNoKChwcm9wKSA9PiB7CiAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhKHNvdXJjZUVsLCBwcm9wKTsKICAgICAgICBpZiAodmFsdWUpIHsKICAgICAgICAgIGF0dHIodGFyZ2V0RWwsIHByb3AucmVwbGFjZSgvXihkYXRhLSkrLywgJycpLCB2YWx1ZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRJbWFnZUZyb21FbGVtZW50KGVsLCBzcmMsIHNvdXJjZXMpIHsKICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7CgogICAgICB3cmFwSW5QaWN0dXJlKGltZywgc291cmNlcyk7CiAgICAgIHNldFNvdXJjZVByb3BzKGVsLCBpbWcpOwogICAgICBpbWcub25sb2FkID0gKCkgPT4gewogICAgICAgIHNldFNyY0F0dHJzKGVsLCBpbWcuY3VycmVudFNyYyk7CiAgICAgIH07CiAgICAgIGF0dHIoaW1nLCAnc3JjJywgc3JjKTsKICAgICAgcmV0dXJuIGltZzsKICAgIH0KCiAgICBmdW5jdGlvbiB3cmFwSW5QaWN0dXJlKGltZywgc291cmNlcykgewogICAgICBzb3VyY2VzID0gcGFyc2VTb3VyY2VzKHNvdXJjZXMpOwoKICAgICAgaWYgKHNvdXJjZXMubGVuZ3RoKSB7CiAgICAgICAgY29uc3QgcGljdHVyZSA9IGZyYWdtZW50KCc8cGljdHVyZT4nKTsKICAgICAgICBmb3IgKGNvbnN0IGF0dHJzIG9mIHNvdXJjZXMpIHsKICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGZyYWdtZW50KCc8c291cmNlPicpOwogICAgICAgICAgYXR0cihzb3VyY2UsIGF0dHJzKTsKICAgICAgICAgIGFwcGVuZChwaWN0dXJlLCBzb3VyY2UpOwogICAgICAgIH0KICAgICAgICBhcHBlbmQocGljdHVyZSwgaW1nKTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHBhcnNlU291cmNlcyhzb3VyY2VzKSB7CiAgICAgIGlmICghc291cmNlcykgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfQoKICAgICAgaWYgKHN0YXJ0c1dpdGgoc291cmNlcywgJ1snKSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBzb3VyY2VzID0gSlNPTi5wYXJzZShzb3VyY2VzKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICBzb3VyY2VzID0gW107CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHNvdXJjZXMgPSBwYXJzZU9wdGlvbnMoc291cmNlcyk7CiAgICAgIH0KCiAgICAgIGlmICghaXNBcnJheShzb3VyY2VzKSkgewogICAgICAgIHNvdXJjZXMgPSBbc291cmNlc107CiAgICAgIH0KCiAgICAgIHJldHVybiBzb3VyY2VzLmZpbHRlcigoc291cmNlKSA9PiAhaXNFbXB0eShzb3VyY2UpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBlbnN1cmVTcmNBdHRyaWJ1dGUoZWwpIHsKICAgICAgaWYgKGlzSW1nKGVsKSAmJiAhaGFzQXR0cihlbCwgJ3NyYycpKSB7CiAgICAgICAgYXR0cihlbCwgJ3NyYycsICdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PC9zdmc+Jyk7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBpc1BpY3R1cmUoZWwpIHsKICAgICAgcmV0dXJuIGlzVGFnKGVsLCAncGljdHVyZScpOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzSW1nKGVsKSB7CiAgICAgIHJldHVybiBpc1RhZyhlbCwgJ2ltZycpOwogICAgfQoKICAgIHZhciBNZWRpYSA9IHsKICAgICAgcHJvcHM6IHsKICAgICAgICBtZWRpYTogQm9vbGVhbiB9LAoKCiAgICAgIGRhdGE6IHsKICAgICAgICBtZWRpYTogZmFsc2UgfSwKCgogICAgICBjb25uZWN0ZWQoKSB7CiAgICAgICAgY29uc3QgbWVkaWEgPSB0b01lZGlhKHRoaXMubWVkaWEsIHRoaXMuJGVsKTsKICAgICAgICB0aGlzLm1hdGNoTWVkaWEgPSB0cnVlOwogICAgICAgIGlmIChtZWRpYSkgewogICAgICAgICAgdGhpcy5tZWRpYU9iaiA9IHdpbmRvdy5tYXRjaE1lZGlhKG1lZGlhKTsKICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiB7CiAgICAgICAgICAgIHRoaXMubWF0Y2hNZWRpYSA9IHRoaXMubWVkaWFPYmoubWF0Y2hlczsKICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgY3JlYXRlRXZlbnQoJ21lZGlhY2hhbmdlJywgZmFsc2UsIHRydWUsIFt0aGlzLm1lZGlhT2JqXSkpOwogICAgICAgICAgfTsKICAgICAgICAgIHRoaXMub2ZmTWVkaWFPYmogPSBvbih0aGlzLm1lZGlhT2JqLCAnY2hhbmdlJywgKCkgPT4gewogICAgICAgICAgICBoYW5kbGVyKCk7CiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3Jlc2l6ZScpOwogICAgICAgICAgfSk7CiAgICAgICAgICBoYW5kbGVyKCk7CiAgICAgICAgfQogICAgICB9LAoKICAgICAgZGlzY29ubmVjdGVkKCkge3ZhciBfdGhpcyRvZmZNZWRpYU9iajsKICAgICAgICAoX3RoaXMkb2ZmTWVkaWFPYmogPSB0aGlzLm9mZk1lZGlhT2JqKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkb2ZmTWVkaWFPYmouY2FsbCh0aGlzKTsKICAgICAgfSB9OwoKCiAgICBmdW5jdGlvbiB0b01lZGlhKHZhbHVlLCBlbGVtZW50KSB7CiAgICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHsKICAgICAgICBpZiAoc3RhcnRzV2l0aCh2YWx1ZSwgJ0AnKSkgewogICAgICAgICAgdmFsdWUgPSB0b0Zsb2F0KGNzcyhlbGVtZW50LCAiLS11ay1icmVha3BvaW50LSIgKyB2YWx1ZS5zdWJzdHIoMSkpKTsKICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKHZhbHVlKSkgewogICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIHZhbHVlICYmIGlzTnVtZXJpYyh2YWx1ZSkgPyAiKG1pbi13aWR0aDogIiArIHZhbHVlICsgInB4KSIgOiAnJzsKICAgIH0KCiAgICB2YXIgbGVhZGVyID0gewogICAgICBtaXhpbnM6IFtDbGFzcywgTWVkaWEsIFJlc2l6ZV0sCgogICAgICBwcm9wczogewogICAgICAgIGZpbGw6IFN0cmluZyB9LAoKCiAgICAgIGRhdGE6IHsKICAgICAgICBmaWxsOiAnJywKICAgICAgICBjbHNXcmFwcGVyOiAndWstbGVhZGVyLWZpbGwnLAogICAgICAgIGNsc0hpZGU6ICd1ay1sZWFkZXItaGlkZScsCiAgICAgICAgYXR0ckZpbGw6ICdkYXRhLWZpbGwnIH0sCgoKICAgICAgY29tcHV0ZWQ6IHsKICAgICAgICBmaWxsKF9yZWYpIHtsZXQgeyBmaWxsIH0gPSBfcmVmOwogICAgICAgICAgcmV0dXJuIGZpbGwgfHwgY3NzKHRoaXMuJGVsLCAnLS11ay1sZWFkZXItZmlsbC1jb250ZW50Jyk7CiAgICAgICAgfSB9LAoKCiAgICAgIGNvbm5lY3RlZCgpIHsKICAgICAgICBbdGhpcy53cmFwcGVyXSA9IHdyYXBJbm5lcih0aGlzLiRlbCwgIjxzcGFuIGNsYXNzPVwiIiArIHRoaXMuY2xzV3JhcHBlciArICJcIj4iKTsKICAgICAgfSwKCiAgICAgIGRpc2Nvbm5lY3RlZCgpIHsKICAgICAgICB1bndyYXAodGhpcy53cmFwcGVyLmNoaWxkTm9kZXMpOwogICAgICB9LAoKICAgICAgdXBkYXRlOiB7CiAgICAgICAgcmVhZCgpIHsKICAgICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC50cnVuYyh0aGlzLiRlbC5vZmZzZXRXaWR0aCAvIDIpOwoKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHdpZHRoLAogICAgICAgICAgICBmaWxsOiB0aGlzLmZpbGwsCiAgICAgICAgICAgIGhpZGU6ICF0aGlzLm1hdGNoTWVkaWEgfTsKCiAgICAgICAgfSwKCiAgICAgICAgd3JpdGUoX3JlZjIpIHtsZXQgeyB3aWR0aCwgZmlsbCwgaGlkZSB9ID0gX3JlZjI7CiAgICAgICAgICB0b2dnbGVDbGFzcyh0aGlzLndyYXBwZXIsIHRoaXMuY2xzSGlkZSwgaGlkZSk7CiAgICAgICAgICBhdHRyKHRoaXMud3JhcHBlciwgdGhpcy5hdHRyRmlsbCwgbmV3IEFycmF5KHdpZHRoKS5qb2luKGZpbGwpKTsKICAgICAgICB9LAoKICAgICAgICBldmVudHM6IFsncmVzaXplJ10gfSB9OwoKICAgIHZhciBtb2RhbCA9IHsKICAgICAgaW5zdGFsbDogaW5zdGFsbCQyLAoKICAgICAgbWl4aW5zOiBbTW9kYWxdLAoKICAgICAgZGF0YTogewogICAgICAgIGNsc1BhZ2U6ICd1ay1tb2RhbC1wYWdlJywKICAgICAgICBzZWxQYW5lbDogJy51ay1tb2RhbC1kaWFsb2cnLAogICAgICAgIHNlbENsb3NlOgogICAgICAgICcudWstbW9kYWwtY2xvc2UsIC51ay1tb2RhbC1jbG9zZS1kZWZhdWx0LCAudWstbW9kYWwtY2xvc2Utb3V0c2lkZSwgLnVrLW1vZGFsLWNsb3NlLWZ1bGwnIH0sCgoKICAgICAgZXZlbnRzOiBbCiAgICAgIHsKICAgICAgICBuYW1lOiAnc2hvdycsCgogICAgICAgIHNlbGY6IHRydWUsCgogICAgICAgIGhhbmRsZXIoKSB7CiAgICAgICAgICBpZiAoaGFzQ2xhc3ModGhpcy5wYW5lbCwgJ3VrLW1hcmdpbi1hdXRvLXZlcnRpY2FsJykpIHsKICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy4kZWwsICd1ay1mbGV4Jyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjc3ModGhpcy4kZWwsICdkaXNwbGF5JywgJ2Jsb2NrJyk7CiAgICAgICAgICB9CgogICAgICAgICAgaGVpZ2h0KHRoaXMuJGVsKTsgLy8gZm9yY2UgcmVmbG93CiAgICAgICAgfSB9LAoKCiAgICAgIHsKICAgICAgICBuYW1lOiAnaGlkZGVuJywKCiAgICAgICAgc2VsZjogdHJ1ZSwKCiAgICAgICAgaGFuZGxlcigpIHsKICAgICAgICAgIGNzcyh0aGlzLiRlbCwgJ2Rpc3BsYXknLCAnJyk7CiAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLiRlbCwgJ3VrLWZsZXgnKTsKICAgICAgICB9IH1dIH07CgoKCgogICAgZnVuY3Rpb24gaW5zdGFsbCQyKF9yZWYpIHtsZXQgeyBtb2RhbCB9ID0gX3JlZjsKICAgICAgbW9kYWwuZGlhbG9nID0gZnVuY3Rpb24gKGNvbnRlbnQsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBkaWFsb2cgPSBtb2RhbCgiPGRpdiBjbGFzcz1cInVrLW1vZGFsXCI+IDxkaXYgY2xhc3M9XCJ1ay1tb2RhbC1kaWFsb2dcIj4iICsKCiAgICAgICAgY29udGVudCArICI8L2Rpdj4gPC9kaXY+IiwKCiAgICAgICAgb3B0aW9ucyk7CgoKICAgICAgICBkaWFsb2cuc2hvdygpOwoKICAgICAgICBvbigKICAgICAgICBkaWFsb2cuJGVsLAogICAgICAgICdoaWRkZW4nLAogICAgICAgIGFzeW5jICgpID0+IHsKICAgICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpOwogICAgICAgICAgZGlhbG9nLiRkZXN0cm95KHRydWUpOwogICAgICAgIH0sCiAgICAgICAgeyBzZWxmOiB0cnVlIH0pOwoKCiAgICAgICAgcmV0dXJuIGRpYWxvZzsKICAgICAgfTsKCiAgICAgIG1vZGFsLmFsZXJ0ID0gZnVuY3Rpb24gKG1lc3NhZ2UsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gb3BlbkRpYWxvZygKICAgICAgICAoX3JlZjIpID0+IHtsZXQgeyBsYWJlbHMgfSA9IF9yZWYyO3JldHVybiAiPGRpdiBjbGFzcz1cInVrLW1vZGFsLWJvZHlcIj4iICsgKAogICAgICAgICAgaXNTdHJpbmcobWVzc2FnZSkgPyBtZXNzYWdlIDogaHRtbChtZXNzYWdlKSkgKyAiPC9kaXY+IDxkaXYgY2xhc3M9XCJ1ay1tb2RhbC1mb290ZXIgdWstdGV4dC1yaWdodFwiPiA8YnV0dG9uIGNsYXNzPVwidWstYnV0dG9uIHVrLWJ1dHRvbi1wcmltYXJ5IHVrLW1vZGFsLWNsb3NlXCIgYXV0b2ZvY3VzPiIgKwoKCgogICAgICAgICAgbGFiZWxzLm9rICsgIjwvYnV0dG9uPiA8L2Rpdj4iO30sCgoKICAgICAgICBvcHRpb25zLAogICAgICAgIChkZWZlcnJlZCkgPT4gZGVmZXJyZWQucmVzb2x2ZSgpKTsKCiAgICAgIH07CgogICAgICBtb2RhbC5jb25maXJtID0gZnVuY3Rpb24gKG1lc3NhZ2UsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gb3BlbkRpYWxvZygKICAgICAgICAoX3JlZjMpID0+IHtsZXQgeyBsYWJlbHMgfSA9IF9yZWYzO3JldHVybiAiPGZvcm0+IDxkaXYgY2xhc3M9XCJ1ay1tb2RhbC1ib2R5XCI+IiArICgKICAgICAgICAgIGlzU3RyaW5nKG1lc3NhZ2UpID8gbWVzc2FnZSA6IGh0bWwobWVzc2FnZSkpICsgIjwvZGl2PiA8ZGl2IGNsYXNzPVwidWstbW9kYWwtZm9vdGVyIHVrLXRleHQtcmlnaHRcIj4gPGJ1dHRvbiBjbGFzcz1cInVrLWJ1dHRvbiB1ay1idXR0b24tZGVmYXVsdCB1ay1tb2RhbC1jbG9zZVwiIHR5cGU9XCJidXR0b25cIj4iICsKCgogICAgICAgICAgbGFiZWxzLmNhbmNlbCArICI8L2J1dHRvbj4gPGJ1dHRvbiBjbGFzcz1cInVrLWJ1dHRvbiB1ay1idXR0b24tcHJpbWFyeVwiIGF1dG9mb2N1cz4iICsKCiAgICAgICAgICBsYWJlbHMub2sgKyAiPC9idXR0b24+IDwvZGl2PiA8L2Zvcm0+Ijt9LAoKCiAgICAgICAgb3B0aW9ucywKICAgICAgICAoZGVmZXJyZWQpID0+IGRlZmVycmVkLnJlamVjdCgpKTsKCiAgICAgIH07CgogICAgICBtb2RhbC5wcm9tcHQgPSBmdW5jdGlvbiAobWVzc2FnZSwgdmFsdWUsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gb3BlbkRpYWxvZygKICAgICAgICAoX3JlZjQpID0+IHtsZXQgeyBsYWJlbHMgfSA9IF9yZWY0O3JldHVybiAiPGZvcm0gY2xhc3M9XCJ1ay1mb3JtLXN0YWNrZWRcIj4gPGRpdiBjbGFzcz1cInVrLW1vZGFsLWJvZHlcIj4gPGxhYmVsPiIgKyAoCgogICAgICAgICAgaXNTdHJpbmcobWVzc2FnZSkgPyBtZXNzYWdlIDogaHRtbChtZXNzYWdlKSkgKyAiPC9sYWJlbD4gPGlucHV0IGNsYXNzPVwidWstaW5wdXRcIiB2YWx1ZT1cIiIgKyAoCiAgICAgICAgICB2YWx1ZSB8fCAnJykgKyAiXCIgYXV0b2ZvY3VzPiA8L2Rpdj4gPGRpdiBjbGFzcz1cInVrLW1vZGFsLWZvb3RlciB1ay10ZXh0LXJpZ2h0XCI+IDxidXR0b24gY2xhc3M9XCJ1ay1idXR0b24gdWstYnV0dG9uLWRlZmF1bHQgdWstbW9kYWwtY2xvc2VcIiB0eXBlPVwiYnV0dG9uXCI+IiArCgoKCiAgICAgICAgICBsYWJlbHMuY2FuY2VsICsgIjwvYnV0dG9uPiA8YnV0dG9uIGNsYXNzPVwidWstYnV0dG9uIHVrLWJ1dHRvbi1wcmltYXJ5XCI+IiArCgogICAgICAgICAgbGFiZWxzLm9rICsgIjwvYnV0dG9uPiA8L2Rpdj4gPC9mb3JtPiI7fSwKCgogICAgICAgIG9wdGlvbnMsCiAgICAgICAgKGRlZmVycmVkKSA9PiBkZWZlcnJlZC5yZXNvbHZlKG51bGwpLAogICAgICAgIChkaWFsb2cpID0+ICQoJ2lucHV0JywgZGlhbG9nLiRlbCkudmFsdWUpOwoKICAgICAgfTsKCiAgICAgIG1vZGFsLmxhYmVscyA9IHsKICAgICAgICBvazogJ09rJywKICAgICAgICBjYW5jZWw6ICdDYW5jZWwnIH07CgoKICAgICAgZnVuY3Rpb24gb3BlbkRpYWxvZyh0bXBsLCBvcHRpb25zLCBoaWRlRm4sIHN1Ym1pdEZuKSB7CiAgICAgICAgb3B0aW9ucyA9IHsgYmdDbG9zZTogZmFsc2UsIGVzY0Nsb3NlOiB0cnVlLCBsYWJlbHM6IG1vZGFsLmxhYmVscywgLi4ub3B0aW9ucyB9OwoKICAgICAgICBjb25zdCBkaWFsb2cgPSBtb2RhbC5kaWFsb2codG1wbChvcHRpb25zKSwgb3B0aW9ucyk7CiAgICAgICAgY29uc3QgZGVmZXJyZWQgPSBuZXcgRGVmZXJyZWQoKTsKCiAgICAgICAgbGV0IHJlc29sdmVkID0gZmFsc2U7CgogICAgICAgIG9uKGRpYWxvZy4kZWwsICdzdWJtaXQnLCAnZm9ybScsIChlKSA9PiB7CiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKHN1Ym1pdEZuID09IG51bGwgPyB2b2lkIDAgOiBzdWJtaXRGbihkaWFsb2cpKTsKICAgICAgICAgIHJlc29sdmVkID0gdHJ1ZTsKICAgICAgICAgIGRpYWxvZy5oaWRlKCk7CiAgICAgICAgfSk7CgogICAgICAgIG9uKGRpYWxvZy4kZWwsICdoaWRlJywgKCkgPT4gIXJlc29sdmVkICYmIGhpZGVGbihkZWZlcnJlZCkpOwoKICAgICAgICBkZWZlcnJlZC5wcm9taXNlLmRpYWxvZyA9IGRpYWxvZzsKCiAgICAgICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7CiAgICAgIH0KICAgIH0KCiAgICB2YXIgbmF2ID0gewogICAgICBleHRlbmRzOiBBY2NvcmRpb24sCgogICAgICBkYXRhOiB7CiAgICAgICAgdGFyZ2V0czogJz4gLnVrLXBhcmVudCcsCiAgICAgICAgdG9nZ2xlOiAnPiBhJywKICAgICAgICBjb250ZW50OiAnPiB1bCcgfSB9OwoKICAgIHZhciBuYXZiYXIgPSB7CiAgICAgIG1peGluczogW0NsYXNzLCBDb250YWluZXJdLAoKICAgICAgcHJvcHM6IHsKICAgICAgICBkcm9wZG93bjogU3RyaW5nLAogICAgICAgIGFsaWduOiBTdHJpbmcsCiAgICAgICAgY2xzRHJvcDogU3RyaW5nLAogICAgICAgIGJvdW5kYXJ5OiBCb29sZWFuLAogICAgICAgIGRyb3BiYXI6IEJvb2xlYW4sCiAgICAgICAgZHJvcGJhckFuY2hvcjogQm9vbGVhbiwKICAgICAgICBkdXJhdGlvbjogTnVtYmVyLAogICAgICAgIG1vZGU6IEJvb2xlYW4sCiAgICAgICAgb2Zmc2V0OiBCb29sZWFuLAogICAgICAgIHN0cmV0Y2g6IEJvb2xlYW4sCiAgICAgICAgZGVsYXlTaG93OiBCb29sZWFuLAogICAgICAgIGRlbGF5SGlkZTogQm9vbGVhbiwKICAgICAgICB0YXJnZXQ6IEJvb2xlYW4sCiAgICAgICAgdGFyZ2V0WDogQm9vbGVhbiwKICAgICAgICB0YXJnZXRZOiBCb29sZWFuLAogICAgICAgIGFuaW1hdGlvbjogQm9vbGVhbiwKICAgICAgICBhbmltYXRlT3V0OiBCb29sZWFuIH0sCgoKICAgICAgZGF0YTogewogICAgICAgIGRyb3Bkb3duOiAnLnVrLW5hdmJhci1uYXYgPiBsaSA+IGEsIC51ay1uYXZiYXItaXRlbSwgLnVrLW5hdmJhci10b2dnbGUnLAogICAgICAgIGFsaWduOiBpc1J0bCA/ICdyaWdodCcgOiAnbGVmdCcsCiAgICAgICAgY2xzRHJvcDogJ3VrLW5hdmJhci1kcm9wZG93bicsCiAgICAgICAgYm91bmRhcnk6IHRydWUsCiAgICAgICAgZHJvcGJhcjogZmFsc2UsCiAgICAgICAgZHJvcGJhckFuY2hvcjogZmFsc2UsCiAgICAgICAgZHVyYXRpb246IDIwMCwKICAgICAgICBjb250YWluZXI6IGZhbHNlIH0sCgoKICAgICAgY29tcHV0ZWQ6IHsKICAgICAgICBkcm9wYmFyQW5jaG9yKF9yZWYsICRlbCkge2xldCB7IGRyb3BiYXJBbmNob3IgfSA9IF9yZWY7CiAgICAgICAgICByZXR1cm4gcXVlcnkoZHJvcGJhckFuY2hvciwgJGVsKSB8fCAkZWw7CiAgICAgICAgfSwKCiAgICAgICAgZHJvcGJhcjogewogICAgICAgICAgZ2V0KF9yZWYyKSB7bGV0IHsgZHJvcGJhciB9ID0gX3JlZjI7CiAgICAgICAgICAgIGlmICghZHJvcGJhcikgewogICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CgogICAgICAgICAgICBkcm9wYmFyID0KICAgICAgICAgICAgdGhpcy5fZHJvcGJhciB8fAogICAgICAgICAgICBxdWVyeShkcm9wYmFyLCB0aGlzLiRlbCkgfHwKICAgICAgICAgICAgJCgnKyAudWstbmF2YmFyLWRyb3BiYXInLCB0aGlzLiRlbCk7CgogICAgICAgICAgICByZXR1cm4gZHJvcGJhciA/IGRyb3BiYXIgOiB0aGlzLl9kcm9wYmFyID0gJCgnPGRpdj48L2Rpdj4nKTsKICAgICAgICAgIH0sCgogICAgICAgICAgd2F0Y2goZHJvcGJhcikgewogICAgICAgICAgICBhZGRDbGFzcyhkcm9wYmFyLCAndWstZHJvcGJhcicsICd1ay1kcm9wYmFyLXRvcCcsICd1ay1uYXZiYXItZHJvcGJhcicpOwogICAgICAgICAgfSwKCiAgICAgICAgICBpbW1lZGlhdGU6IHRydWUgfSwKCgogICAgICAgIGRyb3BDb250YWluZXIoXywgJGVsKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXIgfHwgJGVsOwogICAgICAgIH0sCgogICAgICAgIGRyb3Bkb3duczogewogICAgICAgICAgZ2V0KF9yZWYzLCAkZWwpIHtsZXQgeyBjbHNEcm9wIH0gPSBfcmVmMzsKICAgICAgICAgICAgY29uc3QgZHJvcGRvd25zID0gJCQoIi4iICsgY2xzRHJvcCwgJGVsKTsKCiAgICAgICAgICAgIGlmICh0aGlzLmRyb3BDb250YWluZXIgIT09ICRlbCkgewogICAgICAgICAgICAgIGZvciAoY29uc3QgZWwgb2YgJCQoIi4iICsgY2xzRHJvcCwgdGhpcy5kcm9wQ29udGFpbmVyKSkge3ZhciBfdGhpcyRnZXREcm9wZG93bjsKICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IChfdGhpcyRnZXREcm9wZG93biA9IHRoaXMuZ2V0RHJvcGRvd24oZWwpKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkZ2V0RHJvcGRvd24udGFyZ2V0RWw7CiAgICAgICAgICAgICAgICBpZiAoIWluY2x1ZGVzKGRyb3Bkb3ducywgZWwpICYmIHRhcmdldCAmJiB3aXRoaW4odGFyZ2V0LCB0aGlzLiRlbCkpIHsKICAgICAgICAgICAgICAgICAgZHJvcGRvd25zLnB1c2goZWwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGRyb3Bkb3duczsKICAgICAgICAgIH0sCgogICAgICAgICAgd2F0Y2goZHJvcGRvd25zKSB7CiAgICAgICAgICAgIHRoaXMuJGNyZWF0ZSgKICAgICAgICAgICAgJ2Ryb3AnLAogICAgICAgICAgICBkcm9wZG93bnMuZmlsdGVyKChlbCkgPT4gIXRoaXMuZ2V0RHJvcGRvd24oZWwpKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIC4uLnRoaXMuJHByb3BzLAogICAgICAgICAgICAgIGZsaXA6IGZhbHNlLAogICAgICAgICAgICAgIHNoaWZ0OiB0cnVlLAogICAgICAgICAgICAgIHBvczogImJvdHRvbS0iICsgdGhpcy5hbGlnbiwKICAgICAgICAgICAgICBib3VuZGFyeTogdGhpcy5ib3VuZGFyeSA9PT0gdHJ1ZSA/IHRoaXMuJGVsIDogdGhpcy5ib3VuZGFyeSB9KTsKCgogICAgICAgICAgfSwKCiAgICAgICAgICBpbW1lZGlhdGU6IHRydWUgfSwKCgogICAgICAgIHRvZ2dsZXM6IHsKICAgICAgICAgIGdldChfcmVmNCwgJGVsKSB7bGV0IHsgZHJvcGRvd24gfSA9IF9yZWY0OwogICAgICAgICAgICByZXR1cm4gJCQoZHJvcGRvd24sICRlbCk7CiAgICAgICAgICB9LAoKICAgICAgICAgIHdhdGNoKCkgewogICAgICAgICAgICBjb25zdCBqdXN0aWZ5ID0gaGFzQ2xhc3ModGhpcy4kZWwsICd1ay1uYXZiYXItanVzdGlmeScpOwogICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRhaW5lciBvZiAkJCgKICAgICAgICAgICAgJy51ay1uYXZiYXItbmF2LCAudWstbmF2YmFyLWxlZnQsIC51ay1uYXZiYXItcmlnaHQnLAogICAgICAgICAgICB0aGlzLiRlbCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjc3MoY29udGFpbmVyLCAnZmxleEdyb3cnLCBqdXN0aWZ5ID8gJCQodGhpcy5kcm9wZG93biwgY29udGFpbmVyKS5sZW5ndGggOiAnJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCgogICAgICAgICAgaW1tZWRpYXRlOiB0cnVlIH0gfSwKCgoKICAgICAgZGlzY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMuZHJvcGJhciAmJiByZW1vdmUkMSh0aGlzLmRyb3BiYXIpOwogICAgICAgIGRlbGV0ZSB0aGlzLl9kcm9wYmFyOwogICAgICB9LAoKICAgICAgZXZlbnRzOiBbCiAgICAgIHsKICAgICAgICBuYW1lOiAnbW91c2VvdmVyIGZvY3VzaW4nLAoKICAgICAgICBkZWxlZ2F0ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmRyb3Bkb3duOwogICAgICAgIH0sCgogICAgICAgIGhhbmRsZXIoX3JlZjUpIHtsZXQgeyBjdXJyZW50IH0gPSBfcmVmNTsKICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuZ2V0QWN0aXZlKCk7CiAgICAgICAgICBpZiAoCiAgICAgICAgICBhY3RpdmUgJiYKICAgICAgICAgIGluY2x1ZGVzKGFjdGl2ZS5tb2RlLCAnaG92ZXInKSAmJgogICAgICAgICAgYWN0aXZlLnRhcmdldEVsICYmCiAgICAgICAgICAhd2l0aGluKGFjdGl2ZS50YXJnZXRFbCwgY3VycmVudCkgJiYKICAgICAgICAgICFhY3RpdmUuaXNEZWxheWluZykKICAgICAgICAgIHsKICAgICAgICAgICAgYWN0aXZlLmhpZGUoZmFsc2UpOwogICAgICAgICAgfQogICAgICAgIH0gfSwKCgogICAgICB7CiAgICAgICAgbmFtZTogJ2tleWRvd24nLAoKICAgICAgICBkZWxlZ2F0ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmRyb3Bkb3duOwogICAgICAgIH0sCgogICAgICAgIGhhbmRsZXIoZSkgewogICAgICAgICAgY29uc3QgeyBjdXJyZW50LCBrZXlDb2RlIH0gPSBlOwogICAgICAgICAgY29uc3QgYWN0aXZlID0gdGhpcy5nZXRBY3RpdmUoKTsKCiAgICAgICAgICBpZiAoa2V5Q29kZSA9PT0ga2V5TWFwLkRPV04gJiYgaGFzQXR0cihjdXJyZW50LCAnYXJpYS1leHBhbmRlZCcpKSB7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKCiAgICAgICAgICAgIGlmICghYWN0aXZlIHx8IGFjdGl2ZS50YXJnZXRFbCAhPT0gY3VycmVudCkgewogICAgICAgICAgICAgIGN1cnJlbnQuY2xpY2soKTsKICAgICAgICAgICAgICBvbmNlKHRoaXMuZHJvcENvbnRhaW5lciwgJ3Nob3cnLCAoX3JlZjYpID0+IHtsZXQgeyB0YXJnZXQgfSA9IF9yZWY2O3JldHVybiAoCiAgICAgICAgICAgICAgICAgIGZvY3VzRmlyc3RGb2N1c2FibGVFbGVtZW50KHRhcmdldCkpO30pOwoKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBmb2N1c0ZpcnN0Rm9jdXNhYmxlRWxlbWVudChhY3RpdmUuJGVsKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIGhhbmRsZU5hdkl0ZW1OYXZpZ2F0aW9uKGUsIHRoaXMudG9nZ2xlcywgYWN0aXZlKTsKICAgICAgICB9IH0sCgoKICAgICAgewogICAgICAgIG5hbWU6ICdrZXlkb3duJywKCiAgICAgICAgZWwoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5kcm9wQ29udGFpbmVyOwogICAgICAgIH0sCgogICAgICAgIGRlbGVnYXRlKCkgewogICAgICAgICAgcmV0dXJuICIuIiArIHRoaXMuY2xzRHJvcDsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGVyKGUpIHsKICAgICAgICAgIGNvbnN0IHsgY3VycmVudCwga2V5Q29kZSB9ID0gZTsKCiAgICAgICAgICBpZiAoIWluY2x1ZGVzKHRoaXMuZHJvcGRvd25zLCBjdXJyZW50KSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgY29uc3QgYWN0aXZlID0gdGhpcy5nZXRBY3RpdmUoKTsKICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gJCQoc2VsRm9jdXNhYmxlLCBjdXJyZW50KTsKICAgICAgICAgIGNvbnN0IGkgPSBmaW5kSW5kZXgoZWxlbWVudHMsIChlbCkgPT4gbWF0Y2hlcyhlbCwgJzpmb2N1cycpKTsKCiAgICAgICAgICBpZiAoa2V5Q29kZSA9PT0ga2V5TWFwLlVQKSB7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgaWYgKGkgPiAwKSB7CiAgICAgICAgICAgICAgZWxlbWVudHNbaSAtIDFdLmZvY3VzKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoa2V5Q29kZSA9PT0ga2V5TWFwLkRPV04pIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBpZiAoaSA8IGVsZW1lbnRzLmxlbmd0aCAtIDEpIHsKICAgICAgICAgICAgICBlbGVtZW50c1tpICsgMV0uZm9jdXMoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIGlmIChrZXlDb2RlID09PSBrZXlNYXAuRVNDKSB7dmFyIF9hY3RpdmUkdGFyZ2V0RWw7CiAgICAgICAgICAgIGFjdGl2ZSA9PSBudWxsID8gdm9pZCAwIDogKF9hY3RpdmUkdGFyZ2V0RWwgPSBhY3RpdmUudGFyZ2V0RWwpID09IG51bGwgPyB2b2lkIDAgOiBfYWN0aXZlJHRhcmdldEVsLmZvY3VzKCk7CiAgICAgICAgICB9CgogICAgICAgICAgaGFuZGxlTmF2SXRlbU5hdmlnYXRpb24oZSwgdGhpcy50b2dnbGVzLCBhY3RpdmUpOwogICAgICAgIH0gfSwKCgogICAgICB7CiAgICAgICAgbmFtZTogJ21vdXNlbGVhdmUnLAoKICAgICAgICBlbCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmRyb3BiYXI7CiAgICAgICAgfSwKCiAgICAgICAgZmlsdGVyKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuZHJvcGJhcjsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGVyKCkgewogICAgICAgICAgY29uc3QgYWN0aXZlID0gdGhpcy5nZXRBY3RpdmUoKTsKCiAgICAgICAgICBpZiAoCiAgICAgICAgICBhY3RpdmUgJiYKICAgICAgICAgIGluY2x1ZGVzKGFjdGl2ZS5tb2RlLCAnaG92ZXInKSAmJgogICAgICAgICAgIXRoaXMuZHJvcGRvd25zLnNvbWUoKGVsKSA9PiBtYXRjaGVzKGVsLCAnOmhvdmVyJykpKQogICAgICAgICAgewogICAgICAgICAgICBhY3RpdmUuaGlkZSgpOwogICAgICAgICAgfQogICAgICAgIH0gfSwKCgogICAgICB7CiAgICAgICAgbmFtZTogJ2JlZm9yZXNob3cnLAoKICAgICAgICBlbCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmRyb3BDb250YWluZXI7CiAgICAgICAgfSwKCiAgICAgICAgZmlsdGVyKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuZHJvcGJhcjsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGVyKF9yZWY3KSB7bGV0IHsgdGFyZ2V0IH0gPSBfcmVmNzsKICAgICAgICAgIGlmICghdGhpcy5pc0Ryb3BiYXJEcm9wKHRhcmdldCkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGlmICh0aGlzLmRyb3BiYXIucHJldmlvdXNFbGVtZW50U2libGluZyAhPT0gdGhpcy5kcm9wYmFyQW5jaG9yKSB7CiAgICAgICAgICAgIGFmdGVyKHRoaXMuZHJvcGJhckFuY2hvciwgdGhpcy5kcm9wYmFyKTsKICAgICAgICAgIH0KCiAgICAgICAgICBhZGRDbGFzcyh0YXJnZXQsIHRoaXMuY2xzRHJvcCArICItZHJvcGJhciIpOwogICAgICAgIH0gfSwKCgogICAgICB7CiAgICAgICAgbmFtZTogJ3Nob3cnLAoKICAgICAgICBlbCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmRyb3BDb250YWluZXI7CiAgICAgICAgfSwKCiAgICAgICAgZmlsdGVyKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuZHJvcGJhcjsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGVyKF9yZWY4KSB7bGV0IHsgdGFyZ2V0IH0gPSBfcmVmODsKICAgICAgICAgIGlmICghdGhpcy5pc0Ryb3BiYXJEcm9wKHRhcmdldCkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGNvbnN0IGRyb3AgPSB0aGlzLmdldERyb3Bkb3duKHRhcmdldCk7CiAgICAgICAgICB0aGlzLl9vYnNlcnZlciA9IG9ic2VydmVSZXNpemUoW2Ryb3AuJGVsLCAuLi5kcm9wLnRhcmdldF0sICgpID0+IHsKICAgICAgICAgICAgY29uc3QgdGFyZ2V0T2Zmc2V0cyA9IHBhcmVudHModGFyZ2V0LCAiLiIgKyB0aGlzLmNsc0Ryb3ApLgogICAgICAgICAgICBjb25jYXQodGFyZ2V0KS4KICAgICAgICAgICAgbWFwKChlbCkgPT4gb2Zmc2V0KGVsKSk7CiAgICAgICAgICAgIGNvbnN0IG1pblRvcCA9IE1hdGgubWluKC4uLnRhcmdldE9mZnNldHMubWFwKChfcmVmOSkgPT4ge2xldCB7IHRvcCB9ID0gX3JlZjk7cmV0dXJuIHRvcDt9KSk7CiAgICAgICAgICAgIGNvbnN0IG1heEJvdHRvbSA9IE1hdGgubWF4KC4uLnRhcmdldE9mZnNldHMubWFwKChfcmVmMTApID0+IHtsZXQgeyBib3R0b20gfSA9IF9yZWYxMDtyZXR1cm4gYm90dG9tO30pKTsKICAgICAgICAgICAgY29uc3QgZHJvcGJhck9mZnNldCA9IG9mZnNldCh0aGlzLmRyb3BiYXIpOwogICAgICAgICAgICBjc3ModGhpcy5kcm9wYmFyLCAndG9wJywgdGhpcy5kcm9wYmFyLm9mZnNldFRvcCAtIChkcm9wYmFyT2Zmc2V0LnRvcCAtIG1pblRvcCkpOwogICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25UbygKICAgICAgICAgICAgbWF4Qm90dG9tIC0gbWluVG9wICsgdG9GbG9hdChjc3ModGFyZ2V0LCAnbWFyZ2luQm90dG9tJykpLAogICAgICAgICAgICB0YXJnZXQpOwoKICAgICAgICAgIH0pOwogICAgICAgIH0gfSwKCgogICAgICB7CiAgICAgICAgbmFtZTogJ2JlZm9yZWhpZGUnLAoKICAgICAgICBlbCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmRyb3BDb250YWluZXI7CiAgICAgICAgfSwKCiAgICAgICAgZmlsdGVyKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuZHJvcGJhcjsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGVyKGUpIHsKICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuZ2V0QWN0aXZlKCk7CgogICAgICAgICAgaWYgKAogICAgICAgICAgbWF0Y2hlcyh0aGlzLmRyb3BiYXIsICc6aG92ZXInKSAmJgogICAgICAgICAgKGFjdGl2ZSA9PSBudWxsID8gdm9pZCAwIDogYWN0aXZlLiRlbCkgPT09IGUudGFyZ2V0ICYmCiAgICAgICAgICAhdGhpcy50b2dnbGVzLnNvbWUoKGVsKSA9PiBhY3RpdmUudGFyZ2V0RWwgIT09IGVsICYmIG1hdGNoZXMoZWwsICc6Zm9jdXMnKSkpCiAgICAgICAgICB7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIH0KICAgICAgICB9IH0sCgoKICAgICAgewogICAgICAgIG5hbWU6ICdoaWRlJywKCiAgICAgICAgZWwoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5kcm9wQ29udGFpbmVyOwogICAgICAgIH0sCgogICAgICAgIGZpbHRlcigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmRyb3BiYXI7CiAgICAgICAgfSwKCiAgICAgICAgaGFuZGxlcihfcmVmMTEpIHt2YXIgX3RoaXMkX29ic2VydmVyO2xldCB7IHRhcmdldCB9ID0gX3JlZjExOwogICAgICAgICAgaWYgKCF0aGlzLmlzRHJvcGJhckRyb3AodGFyZ2V0KSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgKF90aGlzJF9vYnNlcnZlciA9IHRoaXMuX29ic2VydmVyKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkX29ic2VydmVyLmRpc2Nvbm5lY3QoKTsKCiAgICAgICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmdldEFjdGl2ZSgpOwoKICAgICAgICAgIGlmICghYWN0aXZlIHx8IChhY3RpdmUgPT0gbnVsbCA/IHZvaWQgMCA6IGFjdGl2ZS4kZWwpID09PSB0YXJnZXQpIHsKICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8oMCk7CiAgICAgICAgICB9CiAgICAgICAgfSB9XSwKCgoKICAgICAgbWV0aG9kczogewogICAgICAgIGdldEFjdGl2ZSgpIHsKICAgICAgICAgIHJldHVybiBpbmNsdWRlcyh0aGlzLmRyb3Bkb3ducywgYWN0aXZlID09IG51bGwgPyB2b2lkIDAgOiBhY3RpdmUuJGVsKSAmJiBhY3RpdmU7CiAgICAgICAgfSwKCiAgICAgICAgdHJhbnNpdGlvblRvKG5ld0hlaWdodCwgZWwpIHsKICAgICAgICAgIGNvbnN0IHsgZHJvcGJhciB9ID0gdGhpczsKICAgICAgICAgIGNvbnN0IG9sZEhlaWdodCA9IGhlaWdodChkcm9wYmFyKTsKCiAgICAgICAgICBlbCA9IG9sZEhlaWdodCA8IG5ld0hlaWdodCAmJiBlbDsKCiAgICAgICAgICBjc3MoZWwsICdjbGlwUGF0aCcsICJwb2x5Z29uKDAgMCwxMDAlIDAsMTAwJSAiICsgb2xkSGVpZ2h0ICsgInB4LDAgIiArIG9sZEhlaWdodCArICJweCkiKTsKCiAgICAgICAgICBoZWlnaHQoZHJvcGJhciwgb2xkSGVpZ2h0KTsKCiAgICAgICAgICBUcmFuc2l0aW9uLmNhbmNlbChbZWwsIGRyb3BiYXJdKTsKICAgICAgICAgIFByb21pc2UuYWxsKFsKICAgICAgICAgIFRyYW5zaXRpb24uc3RhcnQoZHJvcGJhciwgeyBoZWlnaHQ6IG5ld0hlaWdodCB9LCB0aGlzLmR1cmF0aW9uKSwKICAgICAgICAgIFRyYW5zaXRpb24uc3RhcnQoCiAgICAgICAgICBlbCwKICAgICAgICAgIHsKICAgICAgICAgICAgY2xpcFBhdGg6ICJwb2x5Z29uKDAgMCwxMDAlIDAsMTAwJSAiICsgbmV3SGVpZ2h0ICsgInB4LDAgIiArIG5ld0hlaWdodCArICJweCkiIH0sCgogICAgICAgICAgdGhpcy5kdXJhdGlvbildKS4KCgogICAgICAgICAgY2F0Y2gobm9vcCkuCiAgICAgICAgICB0aGVuKCgpID0+IGNzcyhlbCwgeyBjbGlwUGF0aDogJycgfSkpOwogICAgICAgIH0sCgogICAgICAgIGdldERyb3Bkb3duKGVsKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4kZ2V0Q29tcG9uZW50KGVsLCAnZHJvcCcpIHx8IHRoaXMuJGdldENvbXBvbmVudChlbCwgJ2Ryb3Bkb3duJyk7CiAgICAgICAgfSwKCiAgICAgICAgaXNEcm9wYmFyRHJvcChlbCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJvcGRvd24oZWwpICYmIGhhc0NsYXNzKGVsLCB0aGlzLmNsc0Ryb3ApOwogICAgICAgIH0gfSB9OwoKCgogICAgZnVuY3Rpb24gaGFuZGxlTmF2SXRlbU5hdmlnYXRpb24oZSwgdG9nZ2xlcywgYWN0aXZlKSB7CiAgICAgIGNvbnN0IHsgY3VycmVudCwga2V5Q29kZSB9ID0gZTsKICAgICAgY29uc3QgdGFyZ2V0ID0gKGFjdGl2ZSA9PSBudWxsID8gdm9pZCAwIDogYWN0aXZlLnRhcmdldEVsKSB8fCBjdXJyZW50OwogICAgICBjb25zdCBpID0gdG9nZ2xlcy5pbmRleE9mKHRhcmdldCk7CgogICAgICAvLyBMZWZ0CiAgICAgIGlmIChrZXlDb2RlID09PSBrZXlNYXAuTEVGVCAmJiBpID4gMCkgewogICAgICAgIGFjdGl2ZSA9PSBudWxsID8gdm9pZCAwIDogYWN0aXZlLmhpZGUoZmFsc2UpOwogICAgICAgIHRvZ2dsZXNbaSAtIDFdLmZvY3VzKCk7CiAgICAgIH0KCiAgICAgIC8vIFJpZ2h0CiAgICAgIGlmIChrZXlDb2RlID09PSBrZXlNYXAuUklHSFQgJiYgaSA8IHRvZ2dsZXMubGVuZ3RoIC0gMSkgewogICAgICAgIGFjdGl2ZSA9PSBudWxsID8gdm9pZCAwIDogYWN0aXZlLmhpZGUoZmFsc2UpOwogICAgICAgIHRvZ2dsZXNbaSArIDFdLmZvY3VzKCk7CiAgICAgIH0KCiAgICAgIGlmIChrZXlDb2RlID09PSBrZXlNYXAuVEFCKSB7CiAgICAgICAgdGFyZ2V0LmZvY3VzKCk7CiAgICAgICAgYWN0aXZlID09IG51bGwgPyB2b2lkIDAgOiBhY3RpdmUuaGlkZShmYWxzZSk7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBmb2N1c0ZpcnN0Rm9jdXNhYmxlRWxlbWVudChlbCkgewogICAgICBpZiAoISQoJzpmb2N1cycsIGVsKSkge3ZhciBfJDsKICAgICAgICAoXyQgPSAkKHNlbEZvY3VzYWJsZSwgZWwpKSA9PSBudWxsID8gdm9pZCAwIDogXyQuZm9jdXMoKTsKICAgICAgfQogICAgfQoKICAgIGNvbnN0IGtleU1hcCA9IHsKICAgICAgVEFCOiA5LAogICAgICBFU0M6IDI3LAogICAgICBMRUZUOiAzNywKICAgICAgVVA6IDM4LAogICAgICBSSUdIVDogMzksCiAgICAgIERPV046IDQwIH07CgogICAgdmFyIFN3aXBlID0gewogICAgICBwcm9wczogewogICAgICAgIHN3aXBpbmc6IEJvb2xlYW4gfSwKCgogICAgICBkYXRhOiB7CiAgICAgICAgc3dpcGluZzogdHJ1ZSB9LAoKCiAgICAgIGNvbXB1dGVkOiB7CiAgICAgICAgc3dpcGVUYXJnZXQocHJvcHMsICRlbCkgewogICAgICAgICAgcmV0dXJuICRlbDsKICAgICAgICB9IH0sCgoKICAgICAgY29ubmVjdGVkKCkgewogICAgICAgIGlmICghdGhpcy5zd2lwaW5nKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICByZWdpc3RlckV2ZW50KHRoaXMsIHsKICAgICAgICAgIGVsOiB0aGlzLnN3aXBlVGFyZ2V0LAogICAgICAgICAgbmFtZTogcG9pbnRlckRvd24kMSwKICAgICAgICAgIHBhc3NpdmU6IHRydWUsCiAgICAgICAgICBoYW5kbGVyKGUpIHsKICAgICAgICAgICAgaWYgKCFpc1RvdWNoKGUpKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBIYW5kbGUgU3dpcGUgR2VzdHVyZQogICAgICAgICAgICBjb25zdCBwb3MgPSBnZXRFdmVudFBvcyhlKTsKICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gJ3RhZ05hbWUnIGluIGUudGFyZ2V0ID8gZS50YXJnZXQgOiBwYXJlbnQoZS50YXJnZXQpOwogICAgICAgICAgICBvbmNlKGRvY3VtZW50LCBwb2ludGVyVXAkMSArICIgIiArIHBvaW50ZXJDYW5jZWwgKyAiIHNjcm9sbCIsIChlKSA9PiB7CiAgICAgICAgICAgICAgY29uc3QgeyB4LCB5IH0gPSBnZXRFdmVudFBvcyhlKTsKCiAgICAgICAgICAgICAgLy8gc3dpcGUKICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgZS50eXBlICE9PSAnc2Nyb2xsJyAmJiB0YXJnZXQgJiYgeCAmJiBNYXRoLmFicyhwb3MueCAtIHgpID4gMTAwIHx8CiAgICAgICAgICAgICAgeSAmJiBNYXRoLmFicyhwb3MueSAtIHkpID4gMTAwKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgICB0cmlnZ2VyKHRhcmdldCwgJ3N3aXBlJyk7CiAgICAgICAgICAgICAgICAgIHRyaWdnZXIodGFyZ2V0LCAic3dpcGUiICsgc3dpcGVEaXJlY3Rpb24ocG9zLngsIHBvcy55LCB4LCB5KSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSB9KTsKCiAgICAgIH0gfTsKCgogICAgZnVuY3Rpb24gc3dpcGVEaXJlY3Rpb24oeDEsIHkxLCB4MiwgeTIpIHsKICAgICAgcmV0dXJuIE1hdGguYWJzKHgxIC0geDIpID49IE1hdGguYWJzKHkxIC0geTIpID8KICAgICAgeDEgLSB4MiA+IDAgPwogICAgICAnTGVmdCcgOgogICAgICAnUmlnaHQnIDoKICAgICAgeTEgLSB5MiA+IDAgPwogICAgICAnVXAnIDoKICAgICAgJ0Rvd24nOwogICAgfQoKICAgIHZhciBvZmZjYW52YXMgPSB7CiAgICAgIG1peGluczogW01vZGFsLCBTd2lwZV0sCgogICAgICBhcmdzOiAnbW9kZScsCgogICAgICBwcm9wczogewogICAgICAgIG1vZGU6IFN0cmluZywKICAgICAgICBmbGlwOiBCb29sZWFuLAogICAgICAgIG92ZXJsYXk6IEJvb2xlYW4gfSwKCgogICAgICBkYXRhOiB7CiAgICAgICAgbW9kZTogJ3NsaWRlJywKICAgICAgICBmbGlwOiBmYWxzZSwKICAgICAgICBvdmVybGF5OiBmYWxzZSwKICAgICAgICBjbHNQYWdlOiAndWstb2ZmY2FudmFzLXBhZ2UnLAogICAgICAgIGNsc0NvbnRhaW5lcjogJ3VrLW9mZmNhbnZhcy1jb250YWluZXInLAogICAgICAgIHNlbFBhbmVsOiAnLnVrLW9mZmNhbnZhcy1iYXInLAogICAgICAgIGNsc0ZsaXA6ICd1ay1vZmZjYW52YXMtZmxpcCcsCiAgICAgICAgY2xzQ29udGFpbmVyQW5pbWF0aW9uOiAndWstb2ZmY2FudmFzLWNvbnRhaW5lci1hbmltYXRpb24nLAogICAgICAgIGNsc1NpZGViYXJBbmltYXRpb246ICd1ay1vZmZjYW52YXMtYmFyLWFuaW1hdGlvbicsCiAgICAgICAgY2xzTW9kZTogJ3VrLW9mZmNhbnZhcycsCiAgICAgICAgY2xzT3ZlcmxheTogJ3VrLW9mZmNhbnZhcy1vdmVybGF5JywKICAgICAgICBzZWxDbG9zZTogJy51ay1vZmZjYW52YXMtY2xvc2UnLAogICAgICAgIGNvbnRhaW5lcjogZmFsc2UgfSwKCgogICAgICBjb21wdXRlZDogewogICAgICAgIGNsc0ZsaXAoX3JlZikge2xldCB7IGZsaXAsIGNsc0ZsaXAgfSA9IF9yZWY7CiAgICAgICAgICByZXR1cm4gZmxpcCA/IGNsc0ZsaXAgOiAnJzsKICAgICAgICB9LAoKICAgICAgICBjbHNPdmVybGF5KF9yZWYyKSB7bGV0IHsgb3ZlcmxheSwgY2xzT3ZlcmxheSB9ID0gX3JlZjI7CiAgICAgICAgICByZXR1cm4gb3ZlcmxheSA/IGNsc092ZXJsYXkgOiAnJzsKICAgICAgICB9LAoKICAgICAgICBjbHNNb2RlKF9yZWYzKSB7bGV0IHsgbW9kZSwgY2xzTW9kZSB9ID0gX3JlZjM7CiAgICAgICAgICByZXR1cm4gY2xzTW9kZSArICItIiArIG1vZGU7CiAgICAgICAgfSwKCiAgICAgICAgY2xzU2lkZWJhckFuaW1hdGlvbihfcmVmNCkge2xldCB7IG1vZGUsIGNsc1NpZGViYXJBbmltYXRpb24gfSA9IF9yZWY0OwogICAgICAgICAgcmV0dXJuIG1vZGUgPT09ICdub25lJyB8fCBtb2RlID09PSAncmV2ZWFsJyA/ICcnIDogY2xzU2lkZWJhckFuaW1hdGlvbjsKICAgICAgICB9LAoKICAgICAgICBjbHNDb250YWluZXJBbmltYXRpb24oX3JlZjUpIHtsZXQgeyBtb2RlLCBjbHNDb250YWluZXJBbmltYXRpb24gfSA9IF9yZWY1OwogICAgICAgICAgcmV0dXJuIG1vZGUgIT09ICdwdXNoJyAmJiBtb2RlICE9PSAncmV2ZWFsJyA/ICcnIDogY2xzQ29udGFpbmVyQW5pbWF0aW9uOwogICAgICAgIH0sCgogICAgICAgIHRyYW5zaXRpb25FbGVtZW50KF9yZWY2KSB7bGV0IHsgbW9kZSB9ID0gX3JlZjY7CiAgICAgICAgICByZXR1cm4gbW9kZSA9PT0gJ3JldmVhbCcgPyBwYXJlbnQodGhpcy5wYW5lbCkgOiB0aGlzLnBhbmVsOwogICAgICAgIH0gfSwKCgogICAgICB1cGRhdGU6IHsKICAgICAgICByZWFkKCkgewogICAgICAgICAgaWYgKHRoaXMuaXNUb2dnbGVkKCkgJiYgIWlzVmlzaWJsZSh0aGlzLiRlbCkpIHsKICAgICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiBbJ3Jlc2l6ZSddIH0sCgoKICAgICAgZXZlbnRzOiBbCiAgICAgIHsKICAgICAgICBuYW1lOiAnY2xpY2snLAoKICAgICAgICBkZWxlZ2F0ZSgpIHsKICAgICAgICAgIHJldHVybiAnYVtocmVmXj0iIyJdJzsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGVyKF9yZWY3KSB7bGV0IHsgY3VycmVudDogeyBoYXNoIH0sIGRlZmF1bHRQcmV2ZW50ZWQgfSA9IF9yZWY3OwogICAgICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkICYmIGhhc2ggJiYgJChoYXNoLCBkb2N1bWVudC5ib2R5KSkgewogICAgICAgICAgICB0aGlzLmhpZGUoKTsKICAgICAgICAgIH0KICAgICAgICB9IH0sCgoKICAgICAgewogICAgICAgIG5hbWU6ICd0b3VjaG1vdmUnLAoKICAgICAgICBzZWxmOiB0cnVlLAogICAgICAgIHBhc3NpdmU6IGZhbHNlLAoKICAgICAgICBmaWx0ZXIoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5OwogICAgICAgIH0sCgogICAgICAgIGhhbmRsZXIoZSkgewogICAgICAgICAgZS5jYW5jZWxhYmxlICYmIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9IH0sCgoKICAgICAgewogICAgICAgIG5hbWU6ICdzaG93JywKCiAgICAgICAgc2VsZjogdHJ1ZSwKCiAgICAgICAgaGFuZGxlcigpIHsKICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdyZXZlYWwnICYmICFoYXNDbGFzcyhwYXJlbnQodGhpcy5wYW5lbCksIHRoaXMuY2xzTW9kZSkpIHsKICAgICAgICAgICAgd3JhcEFsbCh0aGlzLnBhbmVsLCAnPGRpdj4nKTsKICAgICAgICAgICAgYWRkQ2xhc3MocGFyZW50KHRoaXMucGFuZWwpLCB0aGlzLmNsc01vZGUpOwogICAgICAgICAgfQoKICAgICAgICAgIGNvbnN0IHsgYm9keSwgc2Nyb2xsaW5nRWxlbWVudCB9ID0gZG9jdW1lbnQ7CgogICAgICAgICAgYWRkQ2xhc3MoYm9keSwgdGhpcy5jbHNDb250YWluZXIsIHRoaXMuY2xzRmxpcCk7CiAgICAgICAgICBjc3MoYm9keSwgJ3RvdWNoLWFjdGlvbicsICdwYW4teSBwaW5jaC16b29tJyk7CiAgICAgICAgICBjc3ModGhpcy4kZWwsICdkaXNwbGF5JywgJ2Jsb2NrJyk7CiAgICAgICAgICBjc3ModGhpcy5wYW5lbCwgJ21heFdpZHRoJywgc2Nyb2xsaW5nRWxlbWVudC5jbGllbnRXaWR0aCk7CiAgICAgICAgICBhZGRDbGFzcyh0aGlzLiRlbCwgdGhpcy5jbHNPdmVybGF5KTsKICAgICAgICAgIGFkZENsYXNzKAogICAgICAgICAgdGhpcy5wYW5lbCwKICAgICAgICAgIHRoaXMuY2xzU2lkZWJhckFuaW1hdGlvbiwKICAgICAgICAgIHRoaXMubW9kZSA9PT0gJ3JldmVhbCcgPyAnJyA6IHRoaXMuY2xzTW9kZSk7CgoKICAgICAgICAgIGhlaWdodChib2R5KTsgLy8gZm9yY2UgcmVmbG93CiAgICAgICAgICBhZGRDbGFzcyhib2R5LCB0aGlzLmNsc0NvbnRhaW5lckFuaW1hdGlvbik7CgogICAgICAgICAgdGhpcy5jbHNDb250YWluZXJBbmltYXRpb24gJiYgc3VwcHJlc3NVc2VyU2NhbGUoKTsKICAgICAgICB9IH0sCgoKICAgICAgewogICAgICAgIG5hbWU6ICdoaWRlJywKCiAgICAgICAgc2VsZjogdHJ1ZSwKCiAgICAgICAgaGFuZGxlcigpIHsKICAgICAgICAgIHJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIHRoaXMuY2xzQ29udGFpbmVyQW5pbWF0aW9uKTsKICAgICAgICAgIGNzcyhkb2N1bWVudC5ib2R5LCAndG91Y2gtYWN0aW9uJywgJycpOwogICAgICAgIH0gfSwKCgogICAgICB7CiAgICAgICAgbmFtZTogJ2hpZGRlbicsCgogICAgICAgIHNlbGY6IHRydWUsCgogICAgICAgIGhhbmRsZXIoKSB7CiAgICAgICAgICB0aGlzLmNsc0NvbnRhaW5lckFuaW1hdGlvbiAmJiByZXN1bWVVc2VyU2NhbGUoKTsKCiAgICAgICAgICBpZiAodGhpcy5tb2RlID09PSAncmV2ZWFsJykgewogICAgICAgICAgICB1bndyYXAodGhpcy5wYW5lbCk7CiAgICAgICAgICB9CgogICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5wYW5lbCwgdGhpcy5jbHNTaWRlYmFyQW5pbWF0aW9uLCB0aGlzLmNsc01vZGUpOwogICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy4kZWwsIHRoaXMuY2xzT3ZlcmxheSk7CiAgICAgICAgICBjc3ModGhpcy4kZWwsICdkaXNwbGF5JywgJycpOwogICAgICAgICAgY3NzKHRoaXMucGFuZWwsICdtYXhXaWR0aCcsICcnKTsKICAgICAgICAgIHJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIHRoaXMuY2xzQ29udGFpbmVyLCB0aGlzLmNsc0ZsaXApOwogICAgICAgIH0gfSwKCgogICAgICB7CiAgICAgICAgbmFtZTogJ3N3aXBlTGVmdCBzd2lwZVJpZ2h0JywKCiAgICAgICAgaGFuZGxlcihlKSB7CiAgICAgICAgICBpZiAodGhpcy5pc1RvZ2dsZWQoKSAmJiBlbmRzV2l0aChlLnR5cGUsICdMZWZ0JykgXiB0aGlzLmZsaXApIHsKICAgICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICB9CiAgICAgICAgfSB9XSB9OwoKCgoKICAgIC8vIENocm9tZSBpbiByZXNwb25zaXZlIG1vZGUgem9vbXMgcGFnZSB1cG9uIG9wZW5pbmcgb2ZmY2FudmFzCiAgICBmdW5jdGlvbiBzdXBwcmVzc1VzZXJTY2FsZSgpIHsKICAgICAgZ2V0Vmlld3BvcnQoKS5jb250ZW50ICs9ICcsdXNlci1zY2FsYWJsZT0wJzsKICAgIH0KCiAgICBmdW5jdGlvbiByZXN1bWVVc2VyU2NhbGUoKSB7CiAgICAgIGNvbnN0IHZpZXdwb3J0ID0gZ2V0Vmlld3BvcnQoKTsKICAgICAgdmlld3BvcnQuY29udGVudCA9IHZpZXdwb3J0LmNvbnRlbnQucmVwbGFjZSgvLHVzZXItc2NhbGFibGU9MCQvLCAnJyk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0Vmlld3BvcnQoKSB7CiAgICAgIHJldHVybiAoCiAgICAgICAgJCgnbWV0YVtuYW1lPSJ2aWV3cG9ydCJdJywgZG9jdW1lbnQuaGVhZCkgfHwgYXBwZW5kKGRvY3VtZW50LmhlYWQsICc8bWV0YSBuYW1lPSJ2aWV3cG9ydCI+JykpOwoKICAgIH0KCiAgICB2YXIgb3ZlcmZsb3dBdXRvID0gewogICAgICBtaXhpbnM6IFtDbGFzcywgUmVzaXplXSwKCiAgICAgIHByb3BzOiB7CiAgICAgICAgc2VsQ29udGFpbmVyOiBTdHJpbmcsCiAgICAgICAgc2VsQ29udGVudDogU3RyaW5nLAogICAgICAgIG1pbkhlaWdodDogTnVtYmVyIH0sCgoKICAgICAgZGF0YTogewogICAgICAgIHNlbENvbnRhaW5lcjogJy51ay1tb2RhbCcsCiAgICAgICAgc2VsQ29udGVudDogJy51ay1tb2RhbC1kaWFsb2cnLAogICAgICAgIG1pbkhlaWdodDogMTUwIH0sCgoKICAgICAgY29tcHV0ZWQ6IHsKICAgICAgICBjb250YWluZXIoX3JlZiwgJGVsKSB7bGV0IHsgc2VsQ29udGFpbmVyIH0gPSBfcmVmOwogICAgICAgICAgcmV0dXJuIGNsb3Nlc3QoJGVsLCBzZWxDb250YWluZXIpOwogICAgICAgIH0sCgogICAgICAgIGNvbnRlbnQoX3JlZjIsICRlbCkge2xldCB7IHNlbENvbnRlbnQgfSA9IF9yZWYyOwogICAgICAgICAgcmV0dXJuIGNsb3Nlc3QoJGVsLCBzZWxDb250ZW50KTsKICAgICAgICB9IH0sCgoKICAgICAgcmVzaXplVGFyZ2V0cygpIHsKICAgICAgICByZXR1cm4gW3RoaXMuY29udGFpbmVyLCB0aGlzLmNvbnRlbnRdOwogICAgICB9LAoKICAgICAgdXBkYXRlOiB7CiAgICAgICAgcmVhZCgpIHsKICAgICAgICAgIGlmICghdGhpcy5jb250ZW50IHx8ICF0aGlzLmNvbnRhaW5lciB8fCAhaXNWaXNpYmxlKHRoaXMuJGVsKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgbWF4OiBNYXRoLm1heCgKICAgICAgICAgICAgdGhpcy5taW5IZWlnaHQsCiAgICAgICAgICAgIGhlaWdodCh0aGlzLmNvbnRhaW5lcikgLSAoZGltZW5zaW9ucyQxKHRoaXMuY29udGVudCkuaGVpZ2h0IC0gaGVpZ2h0KHRoaXMuJGVsKSkpIH07CgoKICAgICAgICB9LAoKICAgICAgICB3cml0ZShfcmVmMykge2xldCB7IG1heCB9ID0gX3JlZjM7CiAgICAgICAgICBjc3ModGhpcy4kZWwsIHsgbWluSGVpZ2h0OiB0aGlzLm1pbkhlaWdodCwgbWF4SGVpZ2h0OiBtYXggfSk7CiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiBbJ3Jlc2l6ZSddIH0gfTsKCiAgICB2YXIgcmVzcG9uc2l2ZSA9IHsKICAgICAgbWl4aW5zOiBbUmVzaXplXSwKCiAgICAgIHByb3BzOiBbJ3dpZHRoJywgJ2hlaWdodCddLAoKICAgICAgcmVzaXplVGFyZ2V0cygpIHsKICAgICAgICByZXR1cm4gW3RoaXMuJGVsLCBwYXJlbnQodGhpcy4kZWwpXTsKICAgICAgfSwKCiAgICAgIGNvbm5lY3RlZCgpIHsKICAgICAgICBhZGRDbGFzcyh0aGlzLiRlbCwgJ3VrLXJlc3BvbnNpdmUtd2lkdGgnKTsKICAgICAgfSwKCiAgICAgIHVwZGF0ZTogewogICAgICAgIHJlYWQoKSB7CiAgICAgICAgICByZXR1cm4gaXNWaXNpYmxlKHRoaXMuJGVsKSAmJiB0aGlzLndpZHRoICYmIHRoaXMuaGVpZ2h0ID8KICAgICAgICAgIHsgd2lkdGg6IHdpZHRoKHBhcmVudCh0aGlzLiRlbCkpLCBoZWlnaHQ6IHRoaXMuaGVpZ2h0IH0gOgogICAgICAgICAgZmFsc2U7CiAgICAgICAgfSwKCiAgICAgICAgd3JpdGUoZGltKSB7CiAgICAgICAgICBoZWlnaHQoCiAgICAgICAgICB0aGlzLiRlbCwKICAgICAgICAgIERpbWVuc2lvbnMuY29udGFpbigKICAgICAgICAgIHsKICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCwKICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGggfSwKCiAgICAgICAgICBkaW0pLgogICAgICAgICAgaGVpZ2h0KTsKCiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiBbJ3Jlc2l6ZSddIH0gfTsKCiAgICB2YXIgc2Nyb2xsID0gewogICAgICBwcm9wczogewogICAgICAgIG9mZnNldDogTnVtYmVyIH0sCgoKICAgICAgZGF0YTogewogICAgICAgIG9mZnNldDogMCB9LAoKCiAgICAgIGNvbm5lY3RlZCgpIHsKICAgICAgICByZWdpc3RlckNsaWNrKHRoaXMpOwogICAgICB9LAoKICAgICAgZGlzY29ubmVjdGVkKCkgewogICAgICAgIHVucmVnaXN0ZXJDbGljayh0aGlzKTsKICAgICAgfSwKCiAgICAgIG1ldGhvZHM6IHsKICAgICAgICBhc3luYyBzY3JvbGxUbyhlbCkgewogICAgICAgICAgZWwgPSBlbCAmJiAkKGVsKSB8fCBkb2N1bWVudC5ib2R5OwoKICAgICAgICAgIGlmICh0cmlnZ2VyKHRoaXMuJGVsLCAnYmVmb3Jlc2Nyb2xsJywgW3RoaXMsIGVsXSkpIHsKICAgICAgICAgICAgYXdhaXQgc2Nyb2xsSW50b1ZpZXcoZWwsIHsgb2Zmc2V0OiB0aGlzLm9mZnNldCB9KTsKICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ3Njcm9sbGVkJywgW3RoaXMsIGVsXSk7CiAgICAgICAgICB9CiAgICAgICAgfSB9IH07CgoKCiAgICBjb25zdCBjb21wb25lbnRzJDIgPSBuZXcgU2V0KCk7CiAgICBmdW5jdGlvbiByZWdpc3RlckNsaWNrKGNtcCkgewogICAgICBpZiAoIWNvbXBvbmVudHMkMi5zaXplKSB7CiAgICAgICAgb24oZG9jdW1lbnQsICdjbGljaycsIGNsaWNrSGFuZGxlcik7CiAgICAgIH0KCiAgICAgIGNvbXBvbmVudHMkMi5hZGQoY21wKTsKICAgIH0KCiAgICBmdW5jdGlvbiB1bnJlZ2lzdGVyQ2xpY2soY21wKSB7CiAgICAgIGNvbXBvbmVudHMkMi5kZWxldGUoY21wKTsKCiAgICAgIGlmICghY29tcG9uZW50cyQyLmxlbmd0aCkgewogICAgICAgIG9mZihkb2N1bWVudCwgJ2NsaWNrJywgY2xpY2tIYW5kbGVyKTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGNsaWNrSGFuZGxlcihlKSB7CiAgICAgIGlmIChlLmRlZmF1bHRQcmV2ZW50ZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMkMikgewogICAgICAgIGlmICh3aXRoaW4oZS50YXJnZXQsIGNvbXBvbmVudC4kZWwpKSB7CiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBjb21wb25lbnQuc2Nyb2xsVG8oZ2V0VGFyZ2V0RWxlbWVudChjb21wb25lbnQuJGVsKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0VGFyZ2V0RWxlbWVudChlbCkgewogICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVjb2RlVVJJQ29tcG9uZW50KGVsLmhhc2gpLnN1YnN0cmluZygxKSk7CiAgICB9CgogICAgdmFyIHNjcm9sbHNweSA9IHsKICAgICAgbWl4aW5zOiBbU2Nyb2xsXSwKCiAgICAgIGFyZ3M6ICdjbHMnLAoKICAgICAgcHJvcHM6IHsKICAgICAgICBjbHM6IFN0cmluZywKICAgICAgICB0YXJnZXQ6IFN0cmluZywKICAgICAgICBoaWRkZW46IEJvb2xlYW4sCiAgICAgICAgb2Zmc2V0VG9wOiBOdW1iZXIsCiAgICAgICAgb2Zmc2V0TGVmdDogTnVtYmVyLAogICAgICAgIHJlcGVhdDogQm9vbGVhbiwKICAgICAgICBkZWxheTogTnVtYmVyIH0sCgoKICAgICAgZGF0YTogKCkgPT4gKHsKICAgICAgICBjbHM6ICcnLAogICAgICAgIHRhcmdldDogZmFsc2UsCiAgICAgICAgaGlkZGVuOiB0cnVlLAogICAgICAgIG9mZnNldFRvcDogMCwKICAgICAgICBvZmZzZXRMZWZ0OiAwLAogICAgICAgIHJlcGVhdDogZmFsc2UsCiAgICAgICAgZGVsYXk6IDAsCiAgICAgICAgaW5WaWV3Q2xhc3M6ICd1ay1zY3JvbGxzcHktaW52aWV3JyB9KSwKCgogICAgICBjb21wdXRlZDogewogICAgICAgIGVsZW1lbnRzOiB7CiAgICAgICAgICBnZXQoX3JlZiwgJGVsKSB7bGV0IHsgdGFyZ2V0IH0gPSBfcmVmOwogICAgICAgICAgICByZXR1cm4gdGFyZ2V0ID8gJCQodGFyZ2V0LCAkZWwpIDogWyRlbF07CiAgICAgICAgICB9LAoKICAgICAgICAgIHdhdGNoKGVsZW1lbnRzLCBwcmV2KSB7CiAgICAgICAgICAgIGlmICh0aGlzLmhpZGRlbikgewogICAgICAgICAgICAgIGNzcyhmaWx0ZXIkMShlbGVtZW50cywgIjpub3QoLiIgKyB0aGlzLmluVmlld0NsYXNzICsgIikiKSwgJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghaXNFcXVhbChlbGVtZW50cywgcHJldikpIHsKICAgICAgICAgICAgICB0aGlzLiRyZXNldCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAoKICAgICAgICAgIGltbWVkaWF0ZTogdHJ1ZSB9IH0sCgoKCiAgICAgIGNvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLl9kYXRhLmVsZW1lbnRzID0gbmV3IE1hcCgpOwogICAgICAgIHRoaXMucmVnaXN0ZXJPYnNlcnZlcigKICAgICAgICBvYnNlcnZlSW50ZXJzZWN0aW9uKAogICAgICAgIHRoaXMuZWxlbWVudHMsCiAgICAgICAgKHJlY29yZHMpID0+IHsKICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5fZGF0YS5lbGVtZW50czsKICAgICAgICAgIGZvciAoY29uc3QgeyB0YXJnZXQ6IGVsLCBpc0ludGVyc2VjdGluZyB9IG9mIHJlY29yZHMpIHsKICAgICAgICAgICAgaWYgKCFlbGVtZW50cy5oYXMoZWwpKSB7CiAgICAgICAgICAgICAgZWxlbWVudHMuc2V0KGVsLCB7CiAgICAgICAgICAgICAgICBjbHM6IGRhdGEoZWwsICd1ay1zY3JvbGxzcHktY2xhc3MnKSB8fCB0aGlzLmNscyB9KTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gZWxlbWVudHMuZ2V0KGVsKTsKICAgICAgICAgICAgaWYgKCF0aGlzLnJlcGVhdCAmJiBzdGF0ZS5zaG93KSB7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN0YXRlLnNob3cgPSBpc0ludGVyc2VjdGluZzsKICAgICAgICAgIH0KCiAgICAgICAgICB0aGlzLiRlbWl0KCk7CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICByb290TWFyZ2luOiB0b1B4KHRoaXMub2Zmc2V0VG9wLCAnaGVpZ2h0JykgLSAxICsgInB4ICIgKyAoCiAgICAgICAgICB0b1B4KHRoaXMub2Zmc2V0TGVmdCwgJ3dpZHRoJykgLSAxKSArICJweCIgfSwKCgogICAgICAgIGZhbHNlKSk7CgoKICAgICAgfSwKCiAgICAgIGRpc2Nvbm5lY3RlZCgpIHsKICAgICAgICBmb3IgKGNvbnN0IFtlbCwgc3RhdGVdIG9mIHRoaXMuX2RhdGEuZWxlbWVudHMuZW50cmllcygpKSB7CiAgICAgICAgICByZW1vdmVDbGFzcyhlbCwgdGhpcy5pblZpZXdDbGFzcywgKHN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBzdGF0ZS5jbHMpIHx8ICcnKTsKICAgICAgICB9CiAgICAgIH0sCgogICAgICB1cGRhdGU6IFsKICAgICAgewogICAgICAgIHdyaXRlKGRhdGEpIHsKICAgICAgICAgIGZvciAoY29uc3QgW2VsLCBzdGF0ZV0gb2YgZGF0YS5lbGVtZW50cy5lbnRyaWVzKCkpIHsKICAgICAgICAgICAgaWYgKHN0YXRlLnNob3cgJiYgIXN0YXRlLmludmlldyAmJiAhc3RhdGUucXVldWVkKSB7CiAgICAgICAgICAgICAgc3RhdGUucXVldWVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgZGF0YS5wcm9taXNlID0gKGRhdGEucHJvbWlzZSB8fCBQcm9taXNlLnJlc29sdmUoKSkuCiAgICAgICAgICAgICAgdGhlbigoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aGlzLmRlbGF5KSkpLgogICAgICAgICAgICAgIHRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgdGhpcy50b2dnbGUoZWwsIHRydWUpOwogICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICAgIHN0YXRlLnF1ZXVlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCk7CiAgICAgICAgICAgICAgICB9LCAzMDApOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZS5zaG93ICYmIHN0YXRlLmludmlldyAmJiAhc3RhdGUucXVldWVkICYmIHRoaXMucmVwZWF0KSB7CiAgICAgICAgICAgICAgdGhpcy50b2dnbGUoZWwsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gfV0sCgoKCiAgICAgIG1ldGhvZHM6IHsKICAgICAgICB0b2dnbGUoZWwsIGludmlldykgewogICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9kYXRhLmVsZW1lbnRzLmdldChlbCk7CgogICAgICAgICAgaWYgKCFzdGF0ZSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgc3RhdGUub2ZmID09IG51bGwgPyB2b2lkIDAgOiBzdGF0ZS5vZmYoKTsKCiAgICAgICAgICBjc3MoZWwsICd2aXNpYmlsaXR5JywgIWludmlldyAmJiB0aGlzLmhpZGRlbiA/ICdoaWRkZW4nIDogJycpOwoKICAgICAgICAgIHRvZ2dsZUNsYXNzKGVsLCB0aGlzLmluVmlld0NsYXNzLCBpbnZpZXcpOwogICAgICAgICAgdG9nZ2xlQ2xhc3MoZWwsIHN0YXRlLmNscyk7CgogICAgICAgICAgaWYgKC9cYnVrLWFuaW1hdGlvbi0vLnRlc3Qoc3RhdGUuY2xzKSkgewogICAgICAgICAgICBjb25zdCByZW1vdmVBbmltYXRpb25DbGFzc2VzID0gKCkgPT4gcmVtb3ZlQ2xhc3NlcyhlbCwgJ3VrLWFuaW1hdGlvbi1bXFx3LV0rJyk7CiAgICAgICAgICAgIGlmIChpbnZpZXcpIHsKICAgICAgICAgICAgICBzdGF0ZS5vZmYgPSBvbmNlKGVsLCAnYW5pbWF0aW9uY2FuY2VsIGFuaW1hdGlvbmVuZCcsIHJlbW92ZUFuaW1hdGlvbkNsYXNzZXMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJlbW92ZUFuaW1hdGlvbkNsYXNzZXMoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIHRyaWdnZXIoZWwsIGludmlldyA/ICdpbnZpZXcnIDogJ291dHZpZXcnKTsKCiAgICAgICAgICBzdGF0ZS5pbnZpZXcgPSBpbnZpZXc7CgogICAgICAgICAgdGhpcy4kdXBkYXRlKGVsKTsKICAgICAgICB9IH0gfTsKCiAgICB2YXIgc2Nyb2xsc3B5TmF2ID0gewogICAgICBtaXhpbnM6IFtTY3JvbGxdLAoKICAgICAgcHJvcHM6IHsKICAgICAgICBjbHM6IFN0cmluZywKICAgICAgICBjbG9zZXN0OiBTdHJpbmcsCiAgICAgICAgc2Nyb2xsOiBCb29sZWFuLAogICAgICAgIG92ZXJmbG93OiBCb29sZWFuLAogICAgICAgIG9mZnNldDogTnVtYmVyIH0sCgoKICAgICAgZGF0YTogewogICAgICAgIGNsczogJ3VrLWFjdGl2ZScsCiAgICAgICAgY2xvc2VzdDogZmFsc2UsCiAgICAgICAgc2Nyb2xsOiBmYWxzZSwKICAgICAgICBvdmVyZmxvdzogdHJ1ZSwKICAgICAgICBvZmZzZXQ6IDAgfSwKCgogICAgICBjb21wdXRlZDogewogICAgICAgIGxpbmtzOiB7CiAgICAgICAgICBnZXQoXywgJGVsKSB7CiAgICAgICAgICAgIHJldHVybiAkJCgnYVtocmVmXj0iIyJdJywgJGVsKS5maWx0ZXIoKGVsKSA9PiBlbC5oYXNoKTsKICAgICAgICAgIH0sCgogICAgICAgICAgd2F0Y2gobGlua3MpIHsKICAgICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsKSB7CiAgICAgICAgICAgICAgdGhpcy4kY3JlYXRlKCdzY3JvbGwnLCBsaW5rcywgeyBvZmZzZXQ6IHRoaXMub2Zmc2V0IHx8IDAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCgogICAgICAgICAgaW1tZWRpYXRlOiB0cnVlIH0sCgoKICAgICAgICBlbGVtZW50cyhfcmVmKSB7bGV0IHsgY2xvc2VzdDogc2VsZWN0b3IgfSA9IF9yZWY7CiAgICAgICAgICByZXR1cm4gY2xvc2VzdCh0aGlzLmxpbmtzLCBzZWxlY3RvciB8fCAnKicpOwogICAgICAgIH0gfSwKCgogICAgICB1cGRhdGU6IFsKICAgICAgewogICAgICAgIHJlYWQoKSB7CiAgICAgICAgICBjb25zdCB0YXJnZXRzID0gdGhpcy5saW5rcy5tYXAoZ2V0VGFyZ2V0RWxlbWVudCkuZmlsdGVyKEJvb2xlYW4pOwoKICAgICAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSB0YXJnZXRzOwoKICAgICAgICAgIGlmICghbGVuZ3RoIHx8ICFpc1Zpc2libGUodGhpcy4kZWwpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KCiAgICAgICAgICBjb25zdCBbc2Nyb2xsRWxlbWVudF0gPSBzY3JvbGxQYXJlbnRzKHRhcmdldHMsIC9hdXRvfHNjcm9sbC8sIHRydWUpOwogICAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCB9ID0gc2Nyb2xsRWxlbWVudDsKICAgICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gb2Zmc2V0Vmlld3BvcnQoc2Nyb2xsRWxlbWVudCk7CiAgICAgICAgICBjb25zdCBtYXggPSBzY3JvbGxIZWlnaHQgLSB2aWV3cG9ydC5oZWlnaHQ7CiAgICAgICAgICBsZXQgYWN0aXZlID0gZmFsc2U7CgogICAgICAgICAgaWYgKHNjcm9sbFRvcCA9PT0gbWF4KSB7CiAgICAgICAgICAgIGFjdGl2ZSA9IGxlbmd0aCAtIDE7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhcmdldHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBpZiAob2Zmc2V0KHRhcmdldHNbaV0pLnRvcCAtIHZpZXdwb3J0LnRvcCAtIHRoaXMub2Zmc2V0ID4gMCkgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGFjdGl2ZSA9ICtpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoYWN0aXZlID09PSBmYWxzZSAmJiB0aGlzLm92ZXJmbG93KSB7CiAgICAgICAgICAgICAgYWN0aXZlID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiB7IGFjdGl2ZSB9OwogICAgICAgIH0sCgogICAgICAgIHdyaXRlKF9yZWYyKSB7bGV0IHsgYWN0aXZlIH0gPSBfcmVmMjsKICAgICAgICAgIGNvbnN0IGNoYW5nZWQgPSBhY3RpdmUgIT09IGZhbHNlICYmICFoYXNDbGFzcyh0aGlzLmVsZW1lbnRzW2FjdGl2ZV0sIHRoaXMuY2xzKTsKCiAgICAgICAgICB0aGlzLmxpbmtzLmZvckVhY2goKGVsKSA9PiBlbC5ibHVyKCkpOwogICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHRoaXMuZWxlbWVudHNbaV0sIHRoaXMuY2xzLCAraSA9PT0gYWN0aXZlKTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICAgICB0cmlnZ2VyKHRoaXMuJGVsLCAnYWN0aXZlJywgW2FjdGl2ZSwgdGhpcy5lbGVtZW50c1thY3RpdmVdXSk7CiAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiBbJ3Njcm9sbCcsICdyZXNpemUnXSB9XSB9OwoKICAgIHZhciBzdGlja3kgPSB7CiAgICAgIG1peGluczogW0NsYXNzLCBNZWRpYSwgUmVzaXplLCBTY3JvbGxdLAoKICAgICAgcHJvcHM6IHsKICAgICAgICBwb3NpdGlvbjogU3RyaW5nLAogICAgICAgIHRvcDogbnVsbCwKICAgICAgICBib3R0b206IG51bGwsCiAgICAgICAgc3RhcnQ6IG51bGwsCiAgICAgICAgZW5kOiBudWxsLAogICAgICAgIG9mZnNldDogU3RyaW5nLAogICAgICAgIG92ZXJmbG93RmxpcDogQm9vbGVhbiwKICAgICAgICBhbmltYXRpb246IFN0cmluZywKICAgICAgICBjbHNBY3RpdmU6IFN0cmluZywKICAgICAgICBjbHNJbmFjdGl2ZTogU3RyaW5nLAogICAgICAgIGNsc0ZpeGVkOiBTdHJpbmcsCiAgICAgICAgY2xzQmVsb3c6IFN0cmluZywKICAgICAgICBzZWxUYXJnZXQ6IFN0cmluZywKICAgICAgICBzaG93T25VcDogQm9vbGVhbiwKICAgICAgICB0YXJnZXRPZmZzZXQ6IE51bWJlciB9LAoKCiAgICAgIGRhdGE6IHsKICAgICAgICBwb3NpdGlvbjogJ3RvcCcsCiAgICAgICAgdG9wOiBmYWxzZSwKICAgICAgICBib3R0b206IGZhbHNlLAogICAgICAgIHN0YXJ0OiBmYWxzZSwKICAgICAgICBlbmQ6IGZhbHNlLAogICAgICAgIG9mZnNldDogMCwKICAgICAgICBvdmVyZmxvd0ZsaXA6IGZhbHNlLAogICAgICAgIGFuaW1hdGlvbjogJycsCiAgICAgICAgY2xzQWN0aXZlOiAndWstYWN0aXZlJywKICAgICAgICBjbHNJbmFjdGl2ZTogJycsCiAgICAgICAgY2xzRml4ZWQ6ICd1ay1zdGlja3ktZml4ZWQnLAogICAgICAgIGNsc0JlbG93OiAndWstc3RpY2t5LWJlbG93JywKICAgICAgICBzZWxUYXJnZXQ6ICcnLAogICAgICAgIHNob3dPblVwOiBmYWxzZSwKICAgICAgICB0YXJnZXRPZmZzZXQ6IGZhbHNlIH0sCgoKICAgICAgY29tcHV0ZWQ6IHsKICAgICAgICBzZWxUYXJnZXQoX3JlZiwgJGVsKSB7bGV0IHsgc2VsVGFyZ2V0IH0gPSBfcmVmOwogICAgICAgICAgcmV0dXJuIHNlbFRhcmdldCAmJiAkKHNlbFRhcmdldCwgJGVsKSB8fCAkZWw7CiAgICAgICAgfSB9LAoKCiAgICAgIHJlc2l6ZVRhcmdldHMoKSB7CiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKICAgICAgfSwKCiAgICAgIGNvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLnN0YXJ0ID0gY29lcmNlKHRoaXMuc3RhcnQgfHwgdGhpcy50b3ApOwogICAgICAgIHRoaXMuZW5kID0gY29lcmNlKHRoaXMuZW5kIHx8IHRoaXMuYm90dG9tKTsKCiAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9CiAgICAgICAgJCgnKyAudWstc3RpY2t5LXBsYWNlaG9sZGVyJywgdGhpcy4kZWwpIHx8CiAgICAgICAgJCgnPGRpdiBjbGFzcz0idWstc3RpY2t5LXBsYWNlaG9sZGVyIj48L2Rpdj4nKTsKICAgICAgICB0aGlzLmlzRml4ZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLnNldEFjdGl2ZShmYWxzZSk7CiAgICAgIH0sCgogICAgICBkaXNjb25uZWN0ZWQoKSB7CiAgICAgICAgaWYgKHRoaXMuaXNGaXhlZCkgewogICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLnNlbFRhcmdldCwgdGhpcy5jbHNJbmFjdGl2ZSk7CiAgICAgICAgfQoKICAgICAgICByZW1vdmUkMSh0aGlzLnBsYWNlaG9sZGVyKTsKICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gbnVsbDsKICAgICAgfSwKCiAgICAgIGV2ZW50czogWwogICAgICB7CiAgICAgICAgbmFtZTogJ3Jlc2l6ZScsCgogICAgICAgIGVsKCkgewogICAgICAgICAgcmV0dXJuIHdpbmRvdzsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGVyKCkgewogICAgICAgICAgdGhpcy4kZW1pdCgncmVzaXplJyk7CiAgICAgICAgfSB9LAoKICAgICAgewogICAgICAgIG5hbWU6ICdsb2FkIGhhc2hjaGFuZ2UgcG9wc3RhdGUnLAoKICAgICAgICBlbCgpIHsKICAgICAgICAgIHJldHVybiB3aW5kb3c7CiAgICAgICAgfSwKCiAgICAgICAgZmlsdGVyKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0T2Zmc2V0ICE9PSBmYWxzZTsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGVyKCkgewogICAgICAgICAgY29uc3QgeyBzY3JvbGxpbmdFbGVtZW50IH0gPSBkb2N1bWVudDsKCiAgICAgICAgICBpZiAoIWxvY2F0aW9uLmhhc2ggfHwgc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3AgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBjb25zdCB0YXJnZXRPZmZzZXQgPSBvZmZzZXQoJChsb2NhdGlvbi5oYXNoKSk7CiAgICAgICAgICAgIGNvbnN0IGVsT2Zmc2V0ID0gb2Zmc2V0KHRoaXMuJGVsKTsKCiAgICAgICAgICAgIGlmICh0aGlzLmlzRml4ZWQgJiYgaW50ZXJzZWN0UmVjdCh0YXJnZXRPZmZzZXQsIGVsT2Zmc2V0KSkgewogICAgICAgICAgICAgIHNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wID0KICAgICAgICAgICAgICB0YXJnZXRPZmZzZXQudG9wIC0KICAgICAgICAgICAgICBlbE9mZnNldC5oZWlnaHQgLQogICAgICAgICAgICAgIHRvUHgodGhpcy50YXJnZXRPZmZzZXQsICdoZWlnaHQnLCB0aGlzLnBsYWNlaG9sZGVyKSAtCiAgICAgICAgICAgICAgdG9QeCh0aGlzLm9mZnNldCwgJ2hlaWdodCcsIHRoaXMucGxhY2Vob2xkZXIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9IH1dLAoKCgogICAgICB1cGRhdGU6IFsKICAgICAgewogICAgICAgIHJlYWQoX3JlZjIsIHR5cGVzKSB7bGV0IHsgaGVpZ2h0OiBoZWlnaHQkMSwgbWFyZ2luIH0gPSBfcmVmMjsKICAgICAgICAgIHRoaXMuaW5hY3RpdmUgPSAhdGhpcy5tYXRjaE1lZGlhIHx8ICFpc1Zpc2libGUodGhpcy4kZWwpOwoKICAgICAgICAgIGlmICh0aGlzLmluYWN0aXZlKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KCiAgICAgICAgICBjb25zdCBoaWRlID0gdGhpcy5hY3RpdmUgJiYgdHlwZXMuaGFzKCdyZXNpemUnKTsKICAgICAgICAgIGlmIChoaWRlKSB7CiAgICAgICAgICAgIGNzcyh0aGlzLnNlbFRhcmdldCwgJ3RyYW5zaXRpb24nLCAnMHMnKTsKICAgICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZSkgewogICAgICAgICAgICBoZWlnaHQkMSA9IG9mZnNldCh0aGlzLiRlbCkuaGVpZ2h0OwogICAgICAgICAgICBtYXJnaW4gPSBjc3ModGhpcy4kZWwsICdtYXJnaW4nKTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoaGlkZSkgewogICAgICAgICAgICB0aGlzLnNob3coKTsKICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IGNzcyh0aGlzLnNlbFRhcmdldCwgJ3RyYW5zaXRpb24nLCAnJykpOwogICAgICAgICAgfQoKICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLmlzRml4ZWQgPyB0aGlzLnBsYWNlaG9sZGVyIDogdGhpcy4kZWw7CiAgICAgICAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSBoZWlnaHQod2luZG93KTsKCiAgICAgICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uOwogICAgICAgICAgaWYgKHRoaXMub3ZlcmZsb3dGbGlwICYmIGhlaWdodCQxID4gd2luZG93SGVpZ2h0KSB7CiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gPT09ICd0b3AnID8gJ2JvdHRvbScgOiAndG9wJzsKICAgICAgICAgIH0KCiAgICAgICAgICBsZXQgb2Zmc2V0JDEgPSB0b1B4KHRoaXMub2Zmc2V0LCAnaGVpZ2h0JywgcmVmZXJlbmNlRWxlbWVudCk7CiAgICAgICAgICBpZiAocG9zaXRpb24gPT09ICdib3R0b20nICYmIChoZWlnaHQkMSA8IHdpbmRvd0hlaWdodCB8fCB0aGlzLm92ZXJmbG93RmxpcCkpIHsKICAgICAgICAgICAgb2Zmc2V0JDEgKz0gd2luZG93SGVpZ2h0IC0gaGVpZ2h0JDE7CiAgICAgICAgICB9CgogICAgICAgICAgY29uc3Qgb3ZlcmZsb3cgPSB0aGlzLm92ZXJmbG93RmxpcCA/CiAgICAgICAgICAwIDoKICAgICAgICAgIE1hdGgubWF4KDAsIGhlaWdodCQxICsgb2Zmc2V0JDEgLSB3aW5kb3dIZWlnaHQpOwogICAgICAgICAgY29uc3QgdG9wT2Zmc2V0ID0gb2Zmc2V0KHJlZmVyZW5jZUVsZW1lbnQpLnRvcDsKCiAgICAgICAgICBjb25zdCBzdGFydCA9CiAgICAgICAgICAodGhpcy5zdGFydCA9PT0gZmFsc2UgPwogICAgICAgICAgdG9wT2Zmc2V0IDoKICAgICAgICAgIHBhcnNlUHJvcCh0aGlzLnN0YXJ0LCB0aGlzLiRlbCwgdG9wT2Zmc2V0KSkgLSBvZmZzZXQkMTsKICAgICAgICAgIGNvbnN0IGVuZCA9CiAgICAgICAgICB0aGlzLmVuZCA9PT0gZmFsc2UgPwogICAgICAgICAgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxIZWlnaHQgLSB3aW5kb3dIZWlnaHQgOgogICAgICAgICAgcGFyc2VQcm9wKHRoaXMuZW5kLCB0aGlzLiRlbCwgdG9wT2Zmc2V0ICsgaGVpZ2h0JDEsIHRydWUpIC0KICAgICAgICAgIG9mZnNldCh0aGlzLiRlbCkuaGVpZ2h0ICsKICAgICAgICAgIG92ZXJmbG93IC0KICAgICAgICAgIG9mZnNldCQxOwoKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHN0YXJ0LAogICAgICAgICAgICBlbmQsCiAgICAgICAgICAgIG9mZnNldDogb2Zmc2V0JDEsCiAgICAgICAgICAgIG92ZXJmbG93LAogICAgICAgICAgICB0b3BPZmZzZXQsCiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0JDEsCiAgICAgICAgICAgIG1hcmdpbiwKICAgICAgICAgICAgd2lkdGg6IGRpbWVuc2lvbnMkMShyZWZlcmVuY2VFbGVtZW50KS53aWR0aCwKICAgICAgICAgICAgdG9wOiBvZmZzZXRQb3NpdGlvbihyZWZlcmVuY2VFbGVtZW50KVswXSB9OwoKICAgICAgICB9LAoKICAgICAgICB3cml0ZShfcmVmMykge2xldCB7IGhlaWdodCwgbWFyZ2luIH0gPSBfcmVmMzsKICAgICAgICAgIGNvbnN0IHsgcGxhY2Vob2xkZXIgfSA9IHRoaXM7CgogICAgICAgICAgY3NzKHBsYWNlaG9sZGVyLCB7IGhlaWdodCwgbWFyZ2luIH0pOwoKICAgICAgICAgIGlmICghd2l0aGluKHBsYWNlaG9sZGVyLCBkb2N1bWVudCkpIHsKICAgICAgICAgICAgYWZ0ZXIodGhpcy4kZWwsIHBsYWNlaG9sZGVyKTsKICAgICAgICAgICAgcGxhY2Vob2xkZXIuaGlkZGVuID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBldmVudHM6IFsncmVzaXplJ10gfSwKCgogICAgICB7CiAgICAgICAgcmVhZChfcmVmNCkKCgoKCgoKICAgICAgICB7bGV0IHsgc2Nyb2xsOiBwcmV2U2Nyb2xsID0gMCwgZGlyOiBwcmV2RGlyID0gJ2Rvd24nLCBvdmVyZmxvdywgb3ZlcmZsb3dTY3JvbGwgPSAwLCBzdGFydCwgZW5kIH0gPSBfcmVmNDsKICAgICAgICAgIGNvbnN0IHNjcm9sbCA9IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wOwogICAgICAgICAgY29uc3QgZGlyID0gcHJldlNjcm9sbCA8PSBzY3JvbGwgPyAnZG93bicgOiAndXAnOwoKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGRpciwKICAgICAgICAgICAgcHJldkRpciwKICAgICAgICAgICAgc2Nyb2xsLAogICAgICAgICAgICBwcmV2U2Nyb2xsLAogICAgICAgICAgICBvZmZzZXRQYXJlbnRUb3A6IG9mZnNldCgKICAgICAgICAgICAgKHRoaXMuaXNGaXhlZCA/IHRoaXMucGxhY2Vob2xkZXIgOiB0aGlzLiRlbCkub2Zmc2V0UGFyZW50KS4KICAgICAgICAgICAgdG9wLAogICAgICAgICAgICBvdmVyZmxvd1Njcm9sbDogY2xhbXAoCiAgICAgICAgICAgIG92ZXJmbG93U2Nyb2xsICsgY2xhbXAoc2Nyb2xsLCBzdGFydCwgZW5kKSAtIGNsYW1wKHByZXZTY3JvbGwsIHN0YXJ0LCBlbmQpLAogICAgICAgICAgICAwLAogICAgICAgICAgICBvdmVyZmxvdykgfTsKCgogICAgICAgIH0sCgogICAgICAgIHdyaXRlKGRhdGEsIHR5cGVzKSB7CiAgICAgICAgICBjb25zdCBpc1Njcm9sbFVwZGF0ZSA9IHR5cGVzLmhhcygnc2Nyb2xsJyk7CiAgICAgICAgICBjb25zdCB7CiAgICAgICAgICAgIGluaXRUaW1lc3RhbXAgPSAwLAogICAgICAgICAgICBkaXIsCiAgICAgICAgICAgIHByZXZEaXIsCiAgICAgICAgICAgIHNjcm9sbCwKICAgICAgICAgICAgcHJldlNjcm9sbCA9IDAsCiAgICAgICAgICAgIHRvcCwKICAgICAgICAgICAgc3RhcnQsCiAgICAgICAgICAgIHRvcE9mZnNldCwKICAgICAgICAgICAgaGVpZ2h0IH0gPQogICAgICAgICAgZGF0YTsKCiAgICAgICAgICBpZiAoCiAgICAgICAgICBzY3JvbGwgPCAwIHx8CiAgICAgICAgICBzY3JvbGwgPT09IHByZXZTY3JvbGwgJiYgaXNTY3JvbGxVcGRhdGUgfHwKICAgICAgICAgIHRoaXMuc2hvd09uVXAgJiYgIWlzU2Nyb2xsVXBkYXRlICYmICF0aGlzLmlzRml4ZWQpCiAgICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpOwogICAgICAgICAgaWYgKG5vdyAtIGluaXRUaW1lc3RhbXAgPiAzMDAgfHwgZGlyICE9PSBwcmV2RGlyKSB7CiAgICAgICAgICAgIGRhdGEuaW5pdFNjcm9sbCA9IHNjcm9sbDsKICAgICAgICAgICAgZGF0YS5pbml0VGltZXN0YW1wID0gbm93OwogICAgICAgICAgfQoKICAgICAgICAgIGlmICgKICAgICAgICAgIHRoaXMuc2hvd09uVXAgJiYKICAgICAgICAgICF0aGlzLmlzRml4ZWQgJiYKICAgICAgICAgIE1hdGguYWJzKGRhdGEuaW5pdFNjcm9sbCAtIHNjcm9sbCkgPD0gMzAgJiYKICAgICAgICAgIE1hdGguYWJzKHByZXZTY3JvbGwgLSBzY3JvbGwpIDw9IDEwKQogICAgICAgICAgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKAogICAgICAgICAgdGhpcy5pbmFjdGl2ZSB8fAogICAgICAgICAgc2Nyb2xsIDwgc3RhcnQgfHwKICAgICAgICAgIHRoaXMuc2hvd09uVXAgJiYgKAogICAgICAgICAgc2Nyb2xsIDw9IHN0YXJ0IHx8CiAgICAgICAgICBkaXIgPT09ICdkb3duJyAmJiBpc1Njcm9sbFVwZGF0ZSB8fAogICAgICAgICAgZGlyID09PSAndXAnICYmICF0aGlzLmlzRml4ZWQgJiYgc2Nyb2xsIDw9IHRvcE9mZnNldCArIGhlaWdodCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmICghdGhpcy5pc0ZpeGVkKSB7CiAgICAgICAgICAgICAgaWYgKEFuaW1hdGlvbi5pblByb2dyZXNzKHRoaXMuJGVsKSAmJiB0b3AgPiBzY3JvbGwpIHsKICAgICAgICAgICAgICAgIEFuaW1hdGlvbi5jYW5jZWwodGhpcy4kZWwpOwogICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRoaXMuaXNGaXhlZCA9IGZhbHNlOwoKICAgICAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uICYmIHNjcm9sbCA+IHRvcE9mZnNldCkgewogICAgICAgICAgICAgIEFuaW1hdGlvbi5jYW5jZWwodGhpcy4kZWwpOwogICAgICAgICAgICAgIEFuaW1hdGlvbi5vdXQodGhpcy4kZWwsIHRoaXMuYW5pbWF0aW9uKS50aGVuKCgpID0+IHRoaXMuaGlkZSgpLCBub29wKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0aGlzLmhpZGUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRml4ZWQpIHsKICAgICAgICAgICAgdGhpcy51cGRhdGUoKTsKICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5hbmltYXRpb24gJiYgc2Nyb2xsID4gdG9wT2Zmc2V0KSB7CiAgICAgICAgICAgIEFuaW1hdGlvbi5jYW5jZWwodGhpcy4kZWwpOwogICAgICAgICAgICB0aGlzLnNob3coKTsKICAgICAgICAgICAgQW5pbWF0aW9uLmluKHRoaXMuJGVsLCB0aGlzLmFuaW1hdGlvbikuY2F0Y2gobm9vcCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLnNob3coKTsKICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBldmVudHM6IFsncmVzaXplJywgJ3Njcm9sbCddIH1dLAoKCgogICAgICBtZXRob2RzOiB7CiAgICAgICAgc2hvdygpIHsKICAgICAgICAgIHRoaXMuaXNGaXhlZCA9IHRydWU7CiAgICAgICAgICB0aGlzLnVwZGF0ZSgpOwogICAgICAgICAgdGhpcy5wbGFjZWhvbGRlci5oaWRkZW4gPSBmYWxzZTsKICAgICAgICB9LAoKICAgICAgICBoaWRlKCkgewogICAgICAgICAgdGhpcy5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy4kZWwsIHRoaXMuY2xzRml4ZWQsIHRoaXMuY2xzQmVsb3cpOwogICAgICAgICAgY3NzKHRoaXMuJGVsLCB7IHBvc2l0aW9uOiAnJywgdG9wOiAnJywgd2lkdGg6ICcnIH0pOwogICAgICAgICAgdGhpcy5wbGFjZWhvbGRlci5oaWRkZW4gPSB0cnVlOwogICAgICAgIH0sCgogICAgICAgIHVwZGF0ZSgpIHsKICAgICAgICAgIGxldCB7CiAgICAgICAgICAgIHdpZHRoLAogICAgICAgICAgICBzY3JvbGwgPSAwLAogICAgICAgICAgICBvdmVyZmxvdywKICAgICAgICAgICAgb3ZlcmZsb3dTY3JvbGwgPSAwLAogICAgICAgICAgICBzdGFydCwKICAgICAgICAgICAgZW5kLAogICAgICAgICAgICBvZmZzZXQsCiAgICAgICAgICAgIHRvcE9mZnNldCwKICAgICAgICAgICAgaGVpZ2h0LAogICAgICAgICAgICBvZmZzZXRQYXJlbnRUb3AgfSA9CiAgICAgICAgICB0aGlzLl9kYXRhOwogICAgICAgICAgY29uc3QgYWN0aXZlID0gc3RhcnQgIT09IDAgfHwgc2Nyb2xsID4gc3RhcnQ7CiAgICAgICAgICBsZXQgcG9zaXRpb24gPSAnZml4ZWQnOwoKICAgICAgICAgIGlmIChzY3JvbGwgPiBlbmQpIHsKICAgICAgICAgICAgb2Zmc2V0ICs9IGVuZCAtIG9mZnNldFBhcmVudFRvcDsKICAgICAgICAgICAgcG9zaXRpb24gPSAnYWJzb2x1dGUnOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChvdmVyZmxvdykgewogICAgICAgICAgICBvZmZzZXQgLT0gb3ZlcmZsb3dTY3JvbGw7CiAgICAgICAgICB9CgogICAgICAgICAgY3NzKHRoaXMuJGVsLCB7CiAgICAgICAgICAgIHBvc2l0aW9uLAogICAgICAgICAgICB0b3A6IG9mZnNldCArICJweCIsCiAgICAgICAgICAgIHdpZHRoIH0pOwoKCiAgICAgICAgICB0aGlzLnNldEFjdGl2ZShhY3RpdmUpOwogICAgICAgICAgdG9nZ2xlQ2xhc3ModGhpcy4kZWwsIHRoaXMuY2xzQmVsb3csIHNjcm9sbCA+IHRvcE9mZnNldCArIGhlaWdodCk7CiAgICAgICAgICBhZGRDbGFzcyh0aGlzLiRlbCwgdGhpcy5jbHNGaXhlZCk7CiAgICAgICAgfSwKCiAgICAgICAgc2V0QWN0aXZlKGFjdGl2ZSkgewogICAgICAgICAgY29uc3QgcHJldiA9IHRoaXMuYWN0aXZlOwogICAgICAgICAgdGhpcy5hY3RpdmUgPSBhY3RpdmU7CiAgICAgICAgICBpZiAoYWN0aXZlKSB7CiAgICAgICAgICAgIHJlcGxhY2VDbGFzcyh0aGlzLnNlbFRhcmdldCwgdGhpcy5jbHNJbmFjdGl2ZSwgdGhpcy5jbHNBY3RpdmUpOwogICAgICAgICAgICBwcmV2ICE9PSBhY3RpdmUgJiYgdHJpZ2dlcih0aGlzLiRlbCwgJ2FjdGl2ZScpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVwbGFjZUNsYXNzKHRoaXMuc2VsVGFyZ2V0LCB0aGlzLmNsc0FjdGl2ZSwgdGhpcy5jbHNJbmFjdGl2ZSk7CiAgICAgICAgICAgIHByZXYgIT09IGFjdGl2ZSAmJiB0cmlnZ2VyKHRoaXMuJGVsLCAnaW5hY3RpdmUnKTsKICAgICAgICAgIH0KICAgICAgICB9IH0gfTsKCgoKICAgIGZ1bmN0aW9uIHBhcnNlUHJvcCh2YWx1ZSwgZWwsIHByb3BPZmZzZXQsIHBhZGRpbmcpIHsKICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgIHJldHVybiAwOwogICAgICB9CgogICAgICBpZiAoaXNOdW1lcmljKHZhbHVlKSB8fCBpc1N0cmluZyh2YWx1ZSkgJiYgdmFsdWUubWF0Y2goL14tP1xkLykpIHsKICAgICAgICByZXR1cm4gcHJvcE9mZnNldCArIHRvUHgodmFsdWUsICdoZWlnaHQnLCBlbCwgdHJ1ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgcmVmRWxlbWVudCA9IHZhbHVlID09PSB0cnVlID8gcGFyZW50KGVsKSA6IHF1ZXJ5KHZhbHVlLCBlbCk7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgIG9mZnNldChyZWZFbGVtZW50KS5ib3R0b20gLSAoCiAgICAgICAgICBwYWRkaW5nICYmIHJlZkVsZW1lbnQgJiYgd2l0aGluKGVsLCByZWZFbGVtZW50KSA/CiAgICAgICAgICB0b0Zsb2F0KGNzcyhyZWZFbGVtZW50LCAncGFkZGluZ0JvdHRvbScpKSA6CiAgICAgICAgICAwKSk7CgogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gY29lcmNlKHZhbHVlKSB7CiAgICAgIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdmYWxzZScpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQoKICAgIHZhciBTd2l0Y2hlciA9IHsKICAgICAgbWl4aW5zOiBbTGF6eWxvYWQsIFN3aXBlLCBUb2dnbGFibGVdLAoKICAgICAgYXJnczogJ2Nvbm5lY3QnLAoKICAgICAgcHJvcHM6IHsKICAgICAgICBjb25uZWN0OiBTdHJpbmcsCiAgICAgICAgdG9nZ2xlOiBTdHJpbmcsCiAgICAgICAgaXRlbU5hdjogU3RyaW5nLAogICAgICAgIGFjdGl2ZTogTnVtYmVyIH0sCgoKICAgICAgZGF0YTogewogICAgICAgIGNvbm5lY3Q6ICd+LnVrLXN3aXRjaGVyJywKICAgICAgICB0b2dnbGU6ICc+ICogPiA6Zmlyc3QtY2hpbGQnLAogICAgICAgIGl0ZW1OYXY6IGZhbHNlLAogICAgICAgIGFjdGl2ZTogMCwKICAgICAgICBjbHM6ICd1ay1hY3RpdmUnLAogICAgICAgIGF0dHJJdGVtOiAndWstc3dpdGNoZXItaXRlbScgfSwKCgogICAgICBjb21wdXRlZDogewogICAgICAgIGNvbm5lY3RzOiB7CiAgICAgICAgICBnZXQoX3JlZiwgJGVsKSB7bGV0IHsgY29ubmVjdCB9ID0gX3JlZjsKICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5QWxsKGNvbm5lY3QsICRlbCk7CiAgICAgICAgICB9LAoKICAgICAgICAgIHdhdGNoKGNvbm5lY3RzKSB7CiAgICAgICAgICAgIGlmICh0aGlzLnN3aXBpbmcpIHsKICAgICAgICAgICAgICBjc3MoY29ubmVjdHMsICd0b3VjaEFjdGlvbicsICdwYW4teSBwaW5jaC16b29tJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbmRleCgpOwogICAgICAgICAgICB0aGlzLmNvbm5lY3RzLmZvckVhY2goKGVsKSA9PiB7CiAgICAgICAgICAgICAgY2hpbGRyZW4oZWwpLmZvckVhY2goKGNoaWxkLCBpKSA9PiB0b2dnbGVDbGFzcyhjaGlsZCwgdGhpcy5jbHMsIGkgPT09IGluZGV4KSk7CiAgICAgICAgICAgICAgdGhpcy5sYXp5bG9hZCh0aGlzLiRlbCwgY2hpbGRyZW4oZWwpKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAoKICAgICAgICAgIGltbWVkaWF0ZTogdHJ1ZSB9LAoKCiAgICAgICAgdG9nZ2xlczogewogICAgICAgICAgZ2V0KF9yZWYyLCAkZWwpIHtsZXQgeyB0b2dnbGUgfSA9IF9yZWYyOwogICAgICAgICAgICByZXR1cm4gJCQodG9nZ2xlLCAkZWwpLmZpbHRlcigKICAgICAgICAgICAgKGVsKSA9PiAhbWF0Y2hlcyhlbCwgJy51ay1kaXNhYmxlZCAqLCAudWstZGlzYWJsZWQsIFtkaXNhYmxlZF0nKSk7CgogICAgICAgICAgfSwKCiAgICAgICAgICB3YXRjaCh0b2dnbGVzKSB7CiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuaW5kZXgoKTsKICAgICAgICAgICAgdGhpcy5zaG93KH5hY3RpdmUgPyBhY3RpdmUgOiB0b2dnbGVzW3RoaXMuYWN0aXZlXSB8fCB0b2dnbGVzWzBdKTsKICAgICAgICAgIH0sCgogICAgICAgICAgaW1tZWRpYXRlOiB0cnVlIH0sCgoKICAgICAgICBjaGlsZHJlbigpIHsKICAgICAgICAgIHJldHVybiBjaGlsZHJlbih0aGlzLiRlbCkuZmlsdGVyKChjaGlsZCkgPT4KICAgICAgICAgIHRoaXMudG9nZ2xlcy5zb21lKCh0b2dnbGUpID0+IHdpdGhpbih0b2dnbGUsIGNoaWxkKSkpOwoKICAgICAgICB9LAoKICAgICAgICBzd2lwZVRhcmdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RzOwogICAgICAgIH0gfSwKCgogICAgICBjb25uZWN0ZWQoKSB7CiAgICAgICAgLy8gY2hlY2sgZm9yIGNvbm5lY3RzCiAgICAgICAgcmVhZHkoKCkgPT4gdGhpcy4kZW1pdCgpKTsKICAgICAgfSwKCiAgICAgIGV2ZW50czogWwogICAgICB7CiAgICAgICAgbmFtZTogJ2NsaWNrJywKCiAgICAgICAgZGVsZWdhdGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy50b2dnbGU7CiAgICAgICAgfSwKCiAgICAgICAgaGFuZGxlcihlKSB7CiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB0aGlzLnNob3coZS5jdXJyZW50KTsKICAgICAgICB9IH0sCgoKICAgICAgewogICAgICAgIG5hbWU6ICdjbGljaycsCgogICAgICAgIGVsKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdHMuY29uY2F0KHRoaXMuaXRlbU5hdiA/IHF1ZXJ5QWxsKHRoaXMuaXRlbU5hdiwgdGhpcy4kZWwpIDogW10pOwogICAgICAgIH0sCgogICAgICAgIGRlbGVnYXRlKCkgewogICAgICAgICAgcmV0dXJuICJbIiArIHRoaXMuYXR0ckl0ZW0gKyAiXSxbZGF0YS0iICsgdGhpcy5hdHRySXRlbSArICJdIjsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGVyKGUpIHsKICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuc2hvdyhkYXRhKGUuY3VycmVudCwgdGhpcy5hdHRySXRlbSkpOwogICAgICAgIH0gfSwKCgogICAgICB7CiAgICAgICAgbmFtZTogJ3N3aXBlUmlnaHQgc3dpcGVMZWZ0JywKCiAgICAgICAgZmlsdGVyKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuc3dpcGluZzsKICAgICAgICB9LAoKICAgICAgICBlbCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RzOwogICAgICAgIH0sCgogICAgICAgIGhhbmRsZXIoX3JlZjMpIHtsZXQgeyB0eXBlIH0gPSBfcmVmMzsKICAgICAgICAgIHRoaXMuc2hvdyhlbmRzV2l0aCh0eXBlLCAnTGVmdCcpID8gJ25leHQnIDogJ3ByZXZpb3VzJyk7CiAgICAgICAgfSB9XSwKCgoKICAgICAgbWV0aG9kczogewogICAgICAgIGluZGV4KCkgewogICAgICAgICAgcmV0dXJuIGZpbmRJbmRleCh0aGlzLmNoaWxkcmVuLCAoZWwpID0+IGhhc0NsYXNzKGVsLCB0aGlzLmNscykpOwogICAgICAgIH0sCgogICAgICAgIHNob3coaXRlbSkgewogICAgICAgICAgY29uc3QgcHJldiA9IHRoaXMuaW5kZXgoKTsKICAgICAgICAgIGNvbnN0IG5leHQgPSBnZXRJbmRleChpdGVtLCB0aGlzLnRvZ2dsZXMsIHByZXYpOwogICAgICAgICAgY29uc3QgYWN0aXZlID0gZ2V0SW5kZXgodGhpcy5jaGlsZHJlbltuZXh0XSwgY2hpbGRyZW4odGhpcy4kZWwpKTsKICAgICAgICAgIGNoaWxkcmVuKHRoaXMuJGVsKS5mb3JFYWNoKChjaGlsZCwgaSkgPT4gewogICAgICAgICAgICB0b2dnbGVDbGFzcyhjaGlsZCwgdGhpcy5jbHMsIGFjdGl2ZSA9PT0gaSk7CiAgICAgICAgICAgIGF0dHIodGhpcy50b2dnbGVzW2ldLCAnYXJpYS1leHBhbmRlZCcsIGFjdGl2ZSA9PT0gaSk7CiAgICAgICAgICB9KTsKCiAgICAgICAgICBjb25zdCBhbmltYXRlID0gcHJldiA+PSAwICYmIHByZXYgIT09IG5leHQ7CiAgICAgICAgICB0aGlzLmNvbm5lY3RzLmZvckVhY2goYXN5bmMgKF9yZWY0KSA9PiB7bGV0IHsgY2hpbGRyZW4gfSA9IF9yZWY0OwogICAgICAgICAgICBhd2FpdCB0aGlzLnRvZ2dsZUVsZW1lbnQoCiAgICAgICAgICAgIHRvTm9kZXMoY2hpbGRyZW4pLmZpbHRlcigoY2hpbGQpID0+IGhhc0NsYXNzKGNoaWxkLCB0aGlzLmNscykpLAogICAgICAgICAgICBmYWxzZSwKICAgICAgICAgICAgYW5pbWF0ZSk7CgogICAgICAgICAgICBhd2FpdCB0aGlzLnRvZ2dsZUVsZW1lbnQoY2hpbGRyZW5bYWN0aXZlXSwgdHJ1ZSwgYW5pbWF0ZSk7CiAgICAgICAgICB9KTsKICAgICAgICB9IH0gfTsKCiAgICB2YXIgdGFiID0gewogICAgICBtaXhpbnM6IFtDbGFzc10sCgogICAgICBleHRlbmRzOiBTd2l0Y2hlciwKCiAgICAgIHByb3BzOiB7CiAgICAgICAgbWVkaWE6IEJvb2xlYW4gfSwKCgogICAgICBkYXRhOiB7CiAgICAgICAgbWVkaWE6IDk2MCwKICAgICAgICBhdHRySXRlbTogJ3VrLXRhYi1pdGVtJyB9LAoKCiAgICAgIGNvbm5lY3RlZCgpIHsKICAgICAgICBjb25zdCBjbHMgPSBoYXNDbGFzcyh0aGlzLiRlbCwgJ3VrLXRhYi1sZWZ0JykgPwogICAgICAgICd1ay10YWItbGVmdCcgOgogICAgICAgIGhhc0NsYXNzKHRoaXMuJGVsLCAndWstdGFiLXJpZ2h0JykgPwogICAgICAgICd1ay10YWItcmlnaHQnIDoKICAgICAgICBmYWxzZTsKCiAgICAgICAgaWYgKGNscykgewogICAgICAgICAgdGhpcy4kY3JlYXRlKCd0b2dnbGUnLCB0aGlzLiRlbCwgeyBjbHMsIG1vZGU6ICdtZWRpYScsIG1lZGlhOiB0aGlzLm1lZGlhIH0pOwogICAgICAgIH0KICAgICAgfSB9OwoKICAgIGNvbnN0IEtFWV9TUEFDRSA9IDMyOwoKICAgIHZhciB0b2dnbGUgPSB7CiAgICAgIG1peGluczogW0xhenlsb2FkLCBNZWRpYSwgVG9nZ2xhYmxlXSwKCiAgICAgIGFyZ3M6ICd0YXJnZXQnLAoKICAgICAgcHJvcHM6IHsKICAgICAgICBocmVmOiBTdHJpbmcsCiAgICAgICAgdGFyZ2V0OiBudWxsLAogICAgICAgIG1vZGU6ICdsaXN0JywKICAgICAgICBxdWV1ZWQ6IEJvb2xlYW4gfSwKCgogICAgICBkYXRhOiB7CiAgICAgICAgaHJlZjogZmFsc2UsCiAgICAgICAgdGFyZ2V0OiBmYWxzZSwKICAgICAgICBtb2RlOiAnY2xpY2snLAogICAgICAgIHF1ZXVlZDogdHJ1ZSB9LAoKCiAgICAgIGNvbXB1dGVkOiB7CiAgICAgICAgdGFyZ2V0OiB7CiAgICAgICAgICBnZXQoX3JlZiwgJGVsKSB7bGV0IHsgaHJlZiwgdGFyZ2V0IH0gPSBfcmVmOwogICAgICAgICAgICB0YXJnZXQgPSBxdWVyeUFsbCh0YXJnZXQgfHwgaHJlZiwgJGVsKTsKICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5sZW5ndGggJiYgdGFyZ2V0IHx8IFskZWxdOwogICAgICAgICAgfSwKCiAgICAgICAgICB3YXRjaCgpIHsKICAgICAgICAgICAgdGhpcy51cGRhdGVBcmlhKCk7CiAgICAgICAgICAgIHRoaXMubGF6eWxvYWQodGhpcy4kZWwsIHRoaXMudGFyZ2V0KTsKICAgICAgICAgIH0sCgogICAgICAgICAgaW1tZWRpYXRlOiB0cnVlIH0gfSwKCgoKICAgICAgY29ubmVjdGVkKCkgewogICAgICAgIGlmICghaW5jbHVkZXModGhpcy5tb2RlLCAnbWVkaWEnKSAmJiAhaXNGb2N1c2FibGUodGhpcy4kZWwpKSB7CiAgICAgICAgICBhdHRyKHRoaXMuJGVsLCAndGFiaW5kZXgnLCAnMCcpOwogICAgICAgIH0KCiAgICAgICAgLy8gY2hlY2sgZm9yIHRhcmdldAogICAgICAgIHJlYWR5KCgpID0+IHRoaXMuJGVtaXQoKSk7CiAgICAgIH0sCgogICAgICBldmVudHM6IFsKICAgICAgewogICAgICAgIG5hbWU6IHBvaW50ZXJEb3duJDEsCgogICAgICAgIGZpbHRlcigpIHsKICAgICAgICAgIHJldHVybiBpbmNsdWRlcyh0aGlzLm1vZGUsICdob3ZlcicpOwogICAgICAgIH0sCgogICAgICAgIGhhbmRsZXIoZSkgewogICAgICAgICAgdGhpcy5fcHJldmVudENsaWNrID0gbnVsbDsKCiAgICAgICAgICBpZiAoIWlzVG91Y2goZSkgfHwgdGhpcy5fc2hvd1N0YXRlKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBDbGlja2luZyBhIGJ1dHRvbiBkb2VzIG5vdCBnaXZlIGl0IGZvY3VzIG9uIGFsbCBicm93c2VycyBhbmQgcGxhdGZvcm1zCiAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uI2NsaWNraW5nX2FuZF9mb2N1cwogICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ2ZvY3VzJyk7CiAgICAgICAgICBvbmNlKAogICAgICAgICAgZG9jdW1lbnQsCiAgICAgICAgICBwb2ludGVyRG93biQxLAogICAgICAgICAgKCkgPT4gdHJpZ2dlcih0aGlzLiRlbCwgJ2JsdXInKSwKICAgICAgICAgIHRydWUsCiAgICAgICAgICAoZSkgPT4gIXdpdGhpbihlLnRhcmdldCwgdGhpcy4kZWwpKTsKCgogICAgICAgICAgLy8gUHJldmVudCBpbml0aWFsIGNsaWNrIHRvIHByZXZlbnQgZG91YmxlIHRvZ2dsZSB0aHJvdWdoIGZvY3VzICsgY2xpY2sKICAgICAgICAgIGlmIChpbmNsdWRlcyh0aGlzLm1vZGUsICdjbGljaycpKSB7CiAgICAgICAgICAgIHRoaXMuX3ByZXZlbnRDbGljayA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSB9LAoKCiAgICAgIHsKICAgICAgICBuYW1lOiBwb2ludGVyRW50ZXIgKyAiICIgKyBwb2ludGVyTGVhdmUgKyAiIGZvY3VzIGJsdXIiLAoKICAgICAgICBmaWx0ZXIoKSB7CiAgICAgICAgICByZXR1cm4gaW5jbHVkZXModGhpcy5tb2RlLCAnaG92ZXInKTsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGVyKGUpIHsKICAgICAgICAgIGlmIChpc1RvdWNoKGUpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICBjb25zdCBzaG93ID0gaW5jbHVkZXMoW3BvaW50ZXJFbnRlciwgJ2ZvY3VzJ10sIGUudHlwZSk7CiAgICAgICAgICBjb25zdCBleHBhbmRlZCA9IGF0dHIodGhpcy4kZWwsICdhcmlhLWV4cGFuZGVkJyk7CgogICAgICAgICAgLy8gU2tpcCBoaWRlIGlmIHN0aWxsIGhvdmVyZWQgb3IgZm9jdXNlZAogICAgICAgICAgaWYgKAogICAgICAgICAgIXNob3cgJiYgKAogICAgICAgICAgZS50eXBlID09PSBwb2ludGVyTGVhdmUgJiYgbWF0Y2hlcyh0aGlzLiRlbCwgJzpmb2N1cycpIHx8CiAgICAgICAgICBlLnR5cGUgPT09ICdibHVyJyAmJiBtYXRjaGVzKHRoaXMuJGVsLCAnOmhvdmVyJykpKQogICAgICAgICAgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgLy8gU2tpcCBpZiBzdGF0ZSBkb2VzIG5vdCBjaGFuZ2UgZS5nLiBob3ZlciArIGZvY3VzIHJlY2VpdmVkCiAgICAgICAgICBpZiAodGhpcy5fc2hvd1N0YXRlICYmIHNob3cgJiYgZXhwYW5kZWQgIT09IHRoaXMuX3Nob3dTdGF0ZSkgewogICAgICAgICAgICAvLyBFbnN1cmUgcmVzZXQgaWYgc3RhdGUgaGFzIGNoYW5nZWQgdGhyb3VnaCBjbGljawogICAgICAgICAgICBpZiAoIXNob3cpIHsKICAgICAgICAgICAgICB0aGlzLl9zaG93U3RhdGUgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICB0aGlzLl9zaG93U3RhdGUgPSBzaG93ID8gZXhwYW5kZWQgOiBudWxsOwoKICAgICAgICAgIHRoaXMudG9nZ2xlKCJ0b2dnbGUiICsgKHNob3cgPyAnc2hvdycgOiAnaGlkZScpKTsKICAgICAgICB9IH0sCgoKICAgICAgewogICAgICAgIG5hbWU6ICdrZXlkb3duJywKCiAgICAgICAgZmlsdGVyKCkgewogICAgICAgICAgcmV0dXJuIGluY2x1ZGVzKHRoaXMubW9kZSwgJ2NsaWNrJykgJiYgIWlzVGFnKHRoaXMuJGVsLCAnaW5wdXQnKTsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGVyKGUpIHsKICAgICAgICAgIGlmIChlLmtleUNvZGUgPT09IEtFWV9TUEFDRSkgewogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIHRoaXMuJGVsLmNsaWNrKCk7CiAgICAgICAgICB9CiAgICAgICAgfSB9LAoKCiAgICAgIHsKICAgICAgICBuYW1lOiAnY2xpY2snLAoKICAgICAgICBmaWx0ZXIoKSB7CiAgICAgICAgICByZXR1cm4gWydjbGljaycsICdob3ZlciddLnNvbWUoKG1vZGUpID0+IGluY2x1ZGVzKHRoaXMubW9kZSwgbW9kZSkpOwogICAgICAgIH0sCgogICAgICAgIGhhbmRsZXIoZSkgewogICAgICAgICAgbGV0IGxpbms7CiAgICAgICAgICBpZiAoCiAgICAgICAgICB0aGlzLl9wcmV2ZW50Q2xpY2sgfHwKICAgICAgICAgIGNsb3Nlc3QoZS50YXJnZXQsICdhW2hyZWY9IiMiXSwgYVtocmVmPSIiXScpIHx8CiAgICAgICAgICAobGluayA9IGNsb3Nlc3QoZS50YXJnZXQsICdhW2hyZWZdJykpICYmICgKICAgICAgICAgIGF0dHIodGhpcy4kZWwsICdhcmlhLWV4cGFuZGVkJykgIT09ICd0cnVlJyB8fAogICAgICAgICAgbGluay5oYXNoICYmIG1hdGNoZXModGhpcy50YXJnZXQsIGxpbmsuaGFzaCkpKQogICAgICAgICAgewogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKCF0aGlzLl9wcmV2ZW50Q2xpY2sgJiYgaW5jbHVkZXModGhpcy5tb2RlLCAnY2xpY2snKSkgewogICAgICAgICAgICB0aGlzLnRvZ2dsZSgpOwogICAgICAgICAgfQogICAgICAgIH0gfSwKCgogICAgICB7CiAgICAgICAgbmFtZTogJ2hpZGUgc2hvdycsCgogICAgICAgIHNlbGY6IHRydWUsCgogICAgICAgIGVsKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0OwogICAgICAgIH0sCgogICAgICAgIGhhbmRsZXIoX3JlZjIpIHtsZXQgeyB0eXBlIH0gPSBfcmVmMjsKICAgICAgICAgIHRoaXMudXBkYXRlQXJpYSh0eXBlID09PSAnc2hvdycpOwogICAgICAgIH0gfSwKCgogICAgICB7CiAgICAgICAgbmFtZTogJ21lZGlhY2hhbmdlJywKCiAgICAgICAgZmlsdGVyKCkgewogICAgICAgICAgcmV0dXJuIGluY2x1ZGVzKHRoaXMubW9kZSwgJ21lZGlhJyk7CiAgICAgICAgfSwKCiAgICAgICAgZWwoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy50YXJnZXQ7CiAgICAgICAgfSwKCiAgICAgICAgaGFuZGxlcihlLCBtZWRpYU9iaikgewogICAgICAgICAgaWYgKG1lZGlhT2JqLm1hdGNoZXMgXiB0aGlzLmlzVG9nZ2xlZCh0aGlzLnRhcmdldCkpIHsKICAgICAgICAgICAgdGhpcy50b2dnbGUoKTsKICAgICAgICAgIH0KICAgICAgICB9IH1dLAoKCgogICAgICBtZXRob2RzOiB7CiAgICAgICAgYXN5bmMgdG9nZ2xlKHR5cGUpIHsKICAgICAgICAgIGlmICghdHJpZ2dlcih0aGlzLnRhcmdldCwgdHlwZSB8fCAndG9nZ2xlJywgW3RoaXNdKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKCF0aGlzLnF1ZXVlZCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy50b2dnbGVFbGVtZW50KHRoaXMudGFyZ2V0KTsKICAgICAgICAgIH0KCiAgICAgICAgICBjb25zdCBsZWF2aW5nID0gdGhpcy50YXJnZXQuZmlsdGVyKChlbCkgPT4gaGFzQ2xhc3MoZWwsIHRoaXMuY2xzTGVhdmUpKTsKCiAgICAgICAgICBpZiAobGVhdmluZy5sZW5ndGgpIHsKICAgICAgICAgICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLnRhcmdldCkgewogICAgICAgICAgICAgIGNvbnN0IGlzTGVhdmluZyA9IGluY2x1ZGVzKGxlYXZpbmcsIGVsKTsKICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUVsZW1lbnQoZWwsIGlzTGVhdmluZywgaXNMZWF2aW5nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgY29uc3QgdG9nZ2xlZCA9IHRoaXMudGFyZ2V0LmZpbHRlcih0aGlzLmlzVG9nZ2xlZCk7CiAgICAgICAgICBhd2FpdCB0aGlzLnRvZ2dsZUVsZW1lbnQodG9nZ2xlZCwgZmFsc2UpOwogICAgICAgICAgYXdhaXQgdGhpcy50b2dnbGVFbGVtZW50KAogICAgICAgICAgdGhpcy50YXJnZXQuZmlsdGVyKChlbCkgPT4gIWluY2x1ZGVzKHRvZ2dsZWQsIGVsKSksCiAgICAgICAgICB0cnVlKTsKCiAgICAgICAgfSwKCiAgICAgICAgdXBkYXRlQXJpYSh0b2dnbGVkKSB7CiAgICAgICAgICBpZiAoaW5jbHVkZXModGhpcy5tb2RlLCAnbWVkaWEnKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgYXR0cigKICAgICAgICAgIHRoaXMuJGVsLAogICAgICAgICAgJ2FyaWEtZXhwYW5kZWQnLAogICAgICAgICAgaXNCb29sZWFuKHRvZ2dsZWQpID8gdG9nZ2xlZCA6IHRoaXMuaXNUb2dnbGVkKHRoaXMudGFyZ2V0KSk7CgogICAgICAgIH0gfSB9OwoKICAgIHZhciBjb21wb25lbnRzJDEgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7CiAgICAgICAgX19wcm90b19fOiBudWxsLAogICAgICAgIEFjY29yZGlvbjogQWNjb3JkaW9uLAogICAgICAgIEFsZXJ0OiBhbGVydCwKICAgICAgICBDb3ZlcjogY292ZXIsCiAgICAgICAgRHJvcDogZHJvcCwKICAgICAgICBEcm9wZG93bjogZHJvcCwKICAgICAgICBGb3JtQ3VzdG9tOiBmb3JtQ3VzdG9tLAogICAgICAgIEdyaWQ6IGdyaWQsCiAgICAgICAgSGVpZ2h0TWF0Y2g6IGhlaWdodE1hdGNoLAogICAgICAgIEhlaWdodFZpZXdwb3J0OiBoZWlnaHRWaWV3cG9ydCwKICAgICAgICBJY29uOiBJY29uLAogICAgICAgIEltZzogaW1nLAogICAgICAgIExlYWRlcjogbGVhZGVyLAogICAgICAgIE1hcmdpbjogTWFyZ2luLAogICAgICAgIE1vZGFsOiBtb2RhbCwKICAgICAgICBOYXY6IG5hdiwKICAgICAgICBOYXZiYXI6IG5hdmJhciwKICAgICAgICBPZmZjYW52YXM6IG9mZmNhbnZhcywKICAgICAgICBPdmVyZmxvd0F1dG86IG92ZXJmbG93QXV0bywKICAgICAgICBSZXNwb25zaXZlOiByZXNwb25zaXZlLAogICAgICAgIFNjcm9sbDogc2Nyb2xsLAogICAgICAgIFNjcm9sbHNweTogc2Nyb2xsc3B5LAogICAgICAgIFNjcm9sbHNweU5hdjogc2Nyb2xsc3B5TmF2LAogICAgICAgIFN0aWNreTogc3RpY2t5LAogICAgICAgIFN2ZzogU1ZHLAogICAgICAgIFN3aXRjaGVyOiBTd2l0Y2hlciwKICAgICAgICBUYWI6IHRhYiwKICAgICAgICBUb2dnbGU6IHRvZ2dsZSwKICAgICAgICBWaWRlbzogVmlkZW8sCiAgICAgICAgQ2xvc2U6IENsb3NlLAogICAgICAgIFNwaW5uZXI6IFNwaW5uZXIsCiAgICAgICAgTmF2UGFyZW50SWNvbjogTmF2UGFyZW50SWNvbiwKICAgICAgICBTbGlkZW5hdk5leHQ6IFNsaWRlbmF2LAogICAgICAgIFNsaWRlbmF2UHJldmlvdXM6IFNsaWRlbmF2LAogICAgICAgIFNlYXJjaEljb246IFNlYXJjaCwKICAgICAgICBNYXJrZXI6IEljb25Db21wb25lbnQsCiAgICAgICAgTmF2YmFyUGFyZW50SWNvbjogSWNvbkNvbXBvbmVudCwKICAgICAgICBOYXZiYXJUb2dnbGVJY29uOiBJY29uQ29tcG9uZW50LAogICAgICAgIE92ZXJsYXlJY29uOiBJY29uQ29tcG9uZW50LAogICAgICAgIFBhZ2luYXRpb25OZXh0OiBJY29uQ29tcG9uZW50LAogICAgICAgIFBhZ2luYXRpb25QcmV2aW91czogSWNvbkNvbXBvbmVudCwKICAgICAgICBUb3RvcDogSWNvbkNvbXBvbmVudAogICAgfSk7CgogICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50cwogICAgZWFjaChjb21wb25lbnRzJDEsIChjb21wb25lbnQsIG5hbWUpID0+IFVJa2l0LmNvbXBvbmVudChuYW1lLCBjb21wb25lbnQpKTsKCiAgICBib290KFVJa2l0KTsKCiAgICBjb25zdCB1bml0cyA9IFsnZGF5cycsICdob3VycycsICdtaW51dGVzJywgJ3NlY29uZHMnXTsKCiAgICB2YXIgY291bnRkb3duID0gewogICAgICBtaXhpbnM6IFtDbGFzc10sCgogICAgICBwcm9wczogewogICAgICAgIGRhdGU6IFN0cmluZywKICAgICAgICBjbHNXcmFwcGVyOiBTdHJpbmcgfSwKCgogICAgICBkYXRhOiB7CiAgICAgICAgZGF0ZTogJycsCiAgICAgICAgY2xzV3JhcHBlcjogJy51ay1jb3VudGRvd24tJXVuaXQlJyB9LAoKCiAgICAgIGNvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLmRhdGUgPSBEYXRlLnBhcnNlKHRoaXMuJHByb3BzLmRhdGUpOwogICAgICAgIHRoaXMuc3RhcnQoKTsKICAgICAgfSwKCiAgICAgIGRpc2Nvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLnN0b3AoKTsKICAgICAgfSwKCiAgICAgIGV2ZW50czogWwogICAgICB7CiAgICAgICAgbmFtZTogJ3Zpc2liaWxpdHljaGFuZ2UnLAoKICAgICAgICBlbCgpIHsKICAgICAgICAgIHJldHVybiBkb2N1bWVudDsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGVyKCkgewogICAgICAgICAgaWYgKGRvY3VtZW50LmhpZGRlbikgewogICAgICAgICAgICB0aGlzLnN0b3AoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQoKTsKICAgICAgICAgIH0KICAgICAgICB9IH1dLAoKCgogICAgICBtZXRob2RzOiB7CiAgICAgICAgc3RhcnQoKSB7CiAgICAgICAgICB0aGlzLnN0b3AoKTsKICAgICAgICAgIHRoaXMudXBkYXRlKCk7CiAgICAgICAgICB0aGlzLnRpbWVyID0gc2V0SW50ZXJ2YWwodGhpcy51cGRhdGUsIDEwMDApOwogICAgICAgIH0sCgogICAgICAgIHN0b3AoKSB7CiAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMudGltZXIpOwogICAgICAgIH0sCgogICAgICAgIHVwZGF0ZSgpIHsKICAgICAgICAgIGNvbnN0IHRpbWVzcGFuID0gZ2V0VGltZVNwYW4odGhpcy5kYXRlKTsKCiAgICAgICAgICBpZiAoIXRoaXMuZGF0ZSB8fCB0aW1lc3Bhbi50b3RhbCA8PSAwKSB7CiAgICAgICAgICAgIHRoaXMuc3RvcCgpOwoKICAgICAgICAgICAgdGltZXNwYW4uZGF5cyA9IHRpbWVzcGFuLmhvdXJzID0gdGltZXNwYW4ubWludXRlcyA9IHRpbWVzcGFuLnNlY29uZHMgPSAwOwogICAgICAgICAgfQoKICAgICAgICAgIGZvciAoY29uc3QgdW5pdCBvZiB1bml0cykgewogICAgICAgICAgICBjb25zdCBlbCA9ICQodGhpcy5jbHNXcmFwcGVyLnJlcGxhY2UoJyV1bml0JScsIHVuaXQpLCB0aGlzLiRlbCk7CgogICAgICAgICAgICBpZiAoIWVsKSB7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxldCBkaWdpdHMgPSBTdHJpbmcoTWF0aC50cnVuYyh0aW1lc3Bhblt1bml0XSkpOwoKICAgICAgICAgICAgZGlnaXRzID0gZGlnaXRzLmxlbmd0aCA8IDIgPyAiMCIgKyBkaWdpdHMgOiBkaWdpdHM7CgogICAgICAgICAgICBpZiAoZWwudGV4dENvbnRlbnQgIT09IGRpZ2l0cykgewogICAgICAgICAgICAgIGRpZ2l0cyA9IGRpZ2l0cy5zcGxpdCgnJyk7CgogICAgICAgICAgICAgIGlmIChkaWdpdHMubGVuZ3RoICE9PSBlbC5jaGlsZHJlbi5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGh0bWwoZWwsIGRpZ2l0cy5tYXAoKCkgPT4gJzxzcGFuPjwvc3Bhbj4nKS5qb2luKCcnKSk7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBkaWdpdHMuZm9yRWFjaCgoZGlnaXQsIGkpID0+IGVsLmNoaWxkcmVuW2ldLnRleHRDb250ZW50ID0gZGlnaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSB9IH07CgoKCiAgICBmdW5jdGlvbiBnZXRUaW1lU3BhbihkYXRlKSB7CiAgICAgIGNvbnN0IHRvdGFsID0gZGF0ZSAtIERhdGUubm93KCk7CgogICAgICByZXR1cm4gewogICAgICAgIHRvdGFsLAogICAgICAgIHNlY29uZHM6IHRvdGFsIC8gMTAwMCAlIDYwLAogICAgICAgIG1pbnV0ZXM6IHRvdGFsIC8gMTAwMCAvIDYwICUgNjAsCiAgICAgICAgaG91cnM6IHRvdGFsIC8gMTAwMCAvIDYwIC8gNjAgJSAyNCwKICAgICAgICBkYXlzOiB0b3RhbCAvIDEwMDAgLyA2MCAvIDYwIC8gMjQgfTsKCiAgICB9CgogICAgY29uc3QgY2xzTGVhdmUgPSAndWstdHJhbnNpdGlvbi1sZWF2ZSc7CiAgICBjb25zdCBjbHNFbnRlciA9ICd1ay10cmFuc2l0aW9uLWVudGVyJzsKCiAgICBmdW5jdGlvbiBmYWRlKGFjdGlvbiwgdGFyZ2V0LCBkdXJhdGlvbiwgc3RhZ2dlcikge2lmIChzdGFnZ2VyID09PSB2b2lkIDApIHtzdGFnZ2VyID0gMDt9CiAgICAgIGNvbnN0IGluZGV4ID0gdHJhbnNpdGlvbkluZGV4KHRhcmdldCwgdHJ1ZSk7CiAgICAgIGNvbnN0IHByb3BzSW4gPSB7IG9wYWNpdHk6IDEgfTsKICAgICAgY29uc3QgcHJvcHNPdXQgPSB7IG9wYWNpdHk6IDAgfTsKCiAgICAgIGNvbnN0IHdyYXBJbmRleEZuID0gKGZuKSA9PiAoKSA9PiBpbmRleCA9PT0gdHJhbnNpdGlvbkluZGV4KHRhcmdldCkgPyBmbigpIDogUHJvbWlzZS5yZWplY3QoKTsKCiAgICAgIGNvbnN0IGxlYXZlRm4gPSB3cmFwSW5kZXhGbigoKSA9PiB7CiAgICAgICAgYWRkQ2xhc3ModGFyZ2V0LCBjbHNMZWF2ZSk7CgogICAgICAgIHJldHVybiBQcm9taXNlLmFsbCgKICAgICAgICBnZXRUcmFuc2l0aW9uTm9kZXModGFyZ2V0KS5tYXAoCiAgICAgICAgKGNoaWxkLCBpKSA9PgogICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PgogICAgICAgIHNldFRpbWVvdXQoCiAgICAgICAgKCkgPT4KICAgICAgICBUcmFuc2l0aW9uLnN0YXJ0KGNoaWxkLCBwcm9wc091dCwgZHVyYXRpb24gLyAyLCAnZWFzZScpLnRoZW4oCiAgICAgICAgcmVzb2x2ZSksCgogICAgICAgIGkgKiBzdGFnZ2VyKSkpKS4KCgoKICAgICAgICB0aGVuKCgpID0+IHJlbW92ZUNsYXNzKHRhcmdldCwgY2xzTGVhdmUpKTsKICAgICAgfSk7CgogICAgICBjb25zdCBlbnRlckZuID0gd3JhcEluZGV4Rm4oKCkgPT4gewogICAgICAgIGNvbnN0IG9sZEhlaWdodCA9IGhlaWdodCh0YXJnZXQpOwoKICAgICAgICBhZGRDbGFzcyh0YXJnZXQsIGNsc0VudGVyKTsKICAgICAgICBhY3Rpb24oKTsKCiAgICAgICAgY3NzKGNoaWxkcmVuKHRhcmdldCksIHsgb3BhY2l0eTogMCB9KTsKCiAgICAgICAgLy8gRW5zdXJlIFVJa2l0IHVwZGF0ZXMgaGF2ZSBwcm9wYWdhdGVkCiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PgogICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICBjb25zdCBub2RlcyA9IGNoaWxkcmVuKHRhcmdldCk7CiAgICAgICAgICBjb25zdCBuZXdIZWlnaHQgPSBoZWlnaHQodGFyZ2V0KTsKCiAgICAgICAgICAvLyBFbnN1cmUgR3JpZCBjZWxscyBkbyBub3Qgc3RyZXRjaCB3aGVuIGhlaWdodCBpcyBhcHBsaWVkCiAgICAgICAgICBjc3ModGFyZ2V0LCAnYWxpZ25Db250ZW50JywgJ2ZsZXgtc3RhcnQnKTsKICAgICAgICAgIGhlaWdodCh0YXJnZXQsIG9sZEhlaWdodCk7CgogICAgICAgICAgY29uc3QgdHJhbnNpdGlvbk5vZGVzID0gZ2V0VHJhbnNpdGlvbk5vZGVzKHRhcmdldCk7CiAgICAgICAgICBjc3Mobm9kZXMsIHByb3BzT3V0KTsKCiAgICAgICAgICBjb25zdCB0cmFuc2l0aW9ucyA9IHRyYW5zaXRpb25Ob2Rlcy5tYXAoCiAgICAgICAgICAoY2hpbGQsIGkpID0+CiAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4KICAgICAgICAgIHNldFRpbWVvdXQoCiAgICAgICAgICAoKSA9PgogICAgICAgICAgVHJhbnNpdGlvbi5zdGFydChjaGlsZCwgcHJvcHNJbiwgZHVyYXRpb24gLyAyLCAnZWFzZScpLnRoZW4oCiAgICAgICAgICByZXNvbHZlKSwKCiAgICAgICAgICBpICogc3RhZ2dlcikpKTsKCgoKCiAgICAgICAgICBpZiAob2xkSGVpZ2h0ICE9PSBuZXdIZWlnaHQpIHsKICAgICAgICAgICAgdHJhbnNpdGlvbnMucHVzaCgKICAgICAgICAgICAgVHJhbnNpdGlvbi5zdGFydCgKICAgICAgICAgICAgdGFyZ2V0LAogICAgICAgICAgICB7IGhlaWdodDogbmV3SGVpZ2h0IH0sCiAgICAgICAgICAgIGR1cmF0aW9uIC8gMiArIHRyYW5zaXRpb25Ob2Rlcy5sZW5ndGggKiBzdGFnZ2VyLAogICAgICAgICAgICAnZWFzZScpKTsKCgogICAgICAgICAgfQoKICAgICAgICAgIFByb21pc2UuYWxsKHRyYW5zaXRpb25zKS50aGVuKCgpID0+IHsKICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGFyZ2V0LCBjbHNFbnRlcik7CiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdHJhbnNpdGlvbkluZGV4KHRhcmdldCkpIHsKICAgICAgICAgICAgICBjc3ModGFyZ2V0LCB7IGhlaWdodDogJycsIGFsaWduQ29udGVudDogJycgfSk7CiAgICAgICAgICAgICAgY3NzKG5vZGVzLCB7IG9wYWNpdHk6ICcnIH0pOwogICAgICAgICAgICAgIGRlbGV0ZSB0YXJnZXQuZGF0YXNldC50cmFuc2l0aW9uOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pKTsKCiAgICAgIH0pOwoKICAgICAgcmV0dXJuIGhhc0NsYXNzKHRhcmdldCwgY2xzTGVhdmUpID8KICAgICAgd2FpdFRyYW5zaXRpb25lbmQodGFyZ2V0KS50aGVuKGVudGVyRm4pIDoKICAgICAgaGFzQ2xhc3ModGFyZ2V0LCBjbHNFbnRlcikgPwogICAgICB3YWl0VHJhbnNpdGlvbmVuZCh0YXJnZXQpLnRoZW4obGVhdmVGbikudGhlbihlbnRlckZuKSA6CiAgICAgIGxlYXZlRm4oKS50aGVuKGVudGVyRm4pOwogICAgfQoKICAgIGZ1bmN0aW9uIHRyYW5zaXRpb25JbmRleCh0YXJnZXQsIG5leHQpIHsKICAgICAgaWYgKG5leHQpIHsKICAgICAgICB0YXJnZXQuZGF0YXNldC50cmFuc2l0aW9uID0gMSArIHRyYW5zaXRpb25JbmRleCh0YXJnZXQpOwogICAgICB9CgogICAgICByZXR1cm4gdG9OdW1iZXIodGFyZ2V0LmRhdGFzZXQudHJhbnNpdGlvbikgfHwgMDsKICAgIH0KCiAgICBmdW5jdGlvbiB3YWl0VHJhbnNpdGlvbmVuZCh0YXJnZXQpIHsKICAgICAgcmV0dXJuIFByb21pc2UuYWxsKAogICAgICBjaGlsZHJlbih0YXJnZXQpLgogICAgICBmaWx0ZXIoVHJhbnNpdGlvbi5pblByb2dyZXNzKS4KICAgICAgbWFwKAogICAgICAoZWwpID0+CiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBvbmNlKGVsLCAndHJhbnNpdGlvbmVuZCB0cmFuc2l0aW9uY2FuY2VsZWQnLCByZXNvbHZlKSkpKTsKCgogICAgfQoKICAgIGZ1bmN0aW9uIGdldFRyYW5zaXRpb25Ob2Rlcyh0YXJnZXQpIHsKICAgICAgcmV0dXJuIGdldFJvd3MoY2hpbGRyZW4odGFyZ2V0KSkucmVkdWNlKAogICAgICAobm9kZXMsIHJvdykgPT4KICAgICAgbm9kZXMuY29uY2F0KAogICAgICBzb3J0QnkkMSgKICAgICAgcm93LmZpbHRlcigoZWwpID0+IGlzSW5WaWV3KGVsKSksCiAgICAgICdvZmZzZXRMZWZ0JykpLAoKCiAgICAgIFtdKTsKCiAgICB9CgogICAgZnVuY3Rpb24gc2xpZGUgKGFjdGlvbiwgdGFyZ2V0LCBkdXJhdGlvbikgewogICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+CiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgbGV0IG5vZGVzID0gY2hpbGRyZW4odGFyZ2V0KTsKCiAgICAgICAgLy8gR2V0IGN1cnJlbnQgc3RhdGUKICAgICAgICBjb25zdCBjdXJyZW50UHJvcHMgPSBub2Rlcy5tYXAoKGVsKSA9PiBnZXRQcm9wcyhlbCwgdHJ1ZSkpOwogICAgICAgIGNvbnN0IHRhcmdldFByb3BzID0gY3NzKHRhcmdldCwgWydoZWlnaHQnLCAncGFkZGluZyddKTsKCiAgICAgICAgLy8gQ2FuY2VsIHByZXZpb3VzIGFuaW1hdGlvbnMKICAgICAgICBUcmFuc2l0aW9uLmNhbmNlbCh0YXJnZXQpOwogICAgICAgIG5vZGVzLmZvckVhY2goVHJhbnNpdGlvbi5jYW5jZWwpOwogICAgICAgIHJlc2V0KHRhcmdldCk7CgogICAgICAgIC8vIEFkZGluZywgc29ydGluZywgcmVtb3Zpbmcgbm9kZXMKICAgICAgICBhY3Rpb24oKTsKCiAgICAgICAgLy8gRmluZCBuZXcgbm9kZXMKICAgICAgICBub2RlcyA9IG5vZGVzLmNvbmNhdChjaGlsZHJlbih0YXJnZXQpLmZpbHRlcigoZWwpID0+ICFpbmNsdWRlcyhub2RlcywgZWwpKSk7CgogICAgICAgIC8vIFdhaXQgZm9yIHVwZGF0ZSB0byBwcm9wYWdhdGUKICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHsKICAgICAgICAgIC8vIEZvcmNlIHVwZGF0ZQogICAgICAgICAgZmFzdGRvbS5mbHVzaCgpOwoKICAgICAgICAgIC8vIEdldCBuZXcgc3RhdGUKICAgICAgICAgIGNvbnN0IHRhcmdldFByb3BzVG8gPSBjc3ModGFyZ2V0LCBbJ2hlaWdodCcsICdwYWRkaW5nJ10pOwogICAgICAgICAgY29uc3QgW3Byb3BzVG8sIHByb3BzRnJvbV0gPSBnZXRUcmFuc2l0aW9uUHJvcHModGFyZ2V0LCBub2RlcywgY3VycmVudFByb3BzKTsKCiAgICAgICAgICAvLyBSZXNldCB0byBwcmV2aW91cyBzdGF0ZQogICAgICAgICAgbm9kZXMuZm9yRWFjaCgoZWwsIGkpID0+IHByb3BzRnJvbVtpXSAmJiBjc3MoZWwsIHByb3BzRnJvbVtpXSkpOwogICAgICAgICAgY3NzKHRhcmdldCwgeyBkaXNwbGF5OiAnYmxvY2snLCAuLi50YXJnZXRQcm9wcyB9KTsKCiAgICAgICAgICAvLyBTdGFydCB0cmFuc2l0aW9ucyBvbiBuZXh0IGZyYW1lCiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgICBjb25zdCB0cmFuc2l0aW9ucyA9IG5vZGVzLgogICAgICAgICAgICBtYXAoCiAgICAgICAgICAgIChlbCwgaSkgPT4KICAgICAgICAgICAgcGFyZW50KGVsKSA9PT0gdGFyZ2V0ICYmCiAgICAgICAgICAgIFRyYW5zaXRpb24uc3RhcnQoZWwsIHByb3BzVG9baV0sIGR1cmF0aW9uLCAnZWFzZScpKS4KCiAgICAgICAgICAgIGNvbmNhdChUcmFuc2l0aW9uLnN0YXJ0KHRhcmdldCwgdGFyZ2V0UHJvcHNUbywgZHVyYXRpb24sICdlYXNlJykpOwoKICAgICAgICAgICAgUHJvbWlzZS5hbGwodHJhbnNpdGlvbnMpLgogICAgICAgICAgICB0aGVuKCgpID0+IHsKICAgICAgICAgICAgICBub2Rlcy5mb3JFYWNoKAogICAgICAgICAgICAgIChlbCwgaSkgPT4KICAgICAgICAgICAgICBwYXJlbnQoZWwpID09PSB0YXJnZXQgJiYKICAgICAgICAgICAgICBjc3MoZWwsICdkaXNwbGF5JywgcHJvcHNUb1tpXS5vcGFjaXR5ID09PSAwID8gJ25vbmUnIDogJycpKTsKCiAgICAgICAgICAgICAgcmVzZXQodGFyZ2V0KTsKICAgICAgICAgICAgfSwgbm9vcCkuCiAgICAgICAgICAgIHRoZW4ocmVzb2x2ZSk7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfSkpOwoKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRQcm9wcyhlbCwgb3BhY2l0eSkgewogICAgICBjb25zdCB6SW5kZXggPSBjc3MoZWwsICd6SW5kZXgnKTsKCiAgICAgIHJldHVybiBpc1Zpc2libGUoZWwpID8KICAgICAgewogICAgICAgIGRpc3BsYXk6ICcnLAogICAgICAgIG9wYWNpdHk6IG9wYWNpdHkgPyBjc3MoZWwsICdvcGFjaXR5JykgOiAnMCcsCiAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLAogICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgIHpJbmRleDogekluZGV4ID09PSAnYXV0bycgPyBpbmRleChlbCkgOiB6SW5kZXgsCiAgICAgICAgLi4uZ2V0UG9zaXRpb25XaXRoTWFyZ2luKGVsKSB9IDoKCiAgICAgIGZhbHNlOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFRyYW5zaXRpb25Qcm9wcyh0YXJnZXQsIG5vZGVzLCBjdXJyZW50UHJvcHMpIHsKICAgICAgY29uc3QgcHJvcHNUbyA9IG5vZGVzLm1hcCgoZWwsIGkpID0+CiAgICAgIHBhcmVudChlbCkgJiYgaSBpbiBjdXJyZW50UHJvcHMgPwogICAgICBjdXJyZW50UHJvcHNbaV0gPwogICAgICBpc1Zpc2libGUoZWwpID8KICAgICAgZ2V0UG9zaXRpb25XaXRoTWFyZ2luKGVsKSA6CiAgICAgIHsgb3BhY2l0eTogMCB9IDoKICAgICAgeyBvcGFjaXR5OiBpc1Zpc2libGUoZWwpID8gMSA6IDAgfSA6CiAgICAgIGZhbHNlKTsKCgogICAgICBjb25zdCBwcm9wc0Zyb20gPSBwcm9wc1RvLm1hcCgocHJvcHMsIGkpID0+IHsKICAgICAgICBjb25zdCBmcm9tID0gcGFyZW50KG5vZGVzW2ldKSA9PT0gdGFyZ2V0ICYmIChjdXJyZW50UHJvcHNbaV0gfHwgZ2V0UHJvcHMobm9kZXNbaV0pKTsKCiAgICAgICAgaWYgKCFmcm9tKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoIXByb3BzKSB7CiAgICAgICAgICBkZWxldGUgZnJvbS5vcGFjaXR5OwogICAgICAgIH0gZWxzZSBpZiAoISgnb3BhY2l0eScgaW4gcHJvcHMpKSB7CiAgICAgICAgICBjb25zdCB7IG9wYWNpdHkgfSA9IGZyb207CgogICAgICAgICAgaWYgKG9wYWNpdHkgJSAxKSB7CiAgICAgICAgICAgIHByb3BzLm9wYWNpdHkgPSAxOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZGVsZXRlIGZyb20ub3BhY2l0eTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBmcm9tOwogICAgICB9KTsKCiAgICAgIHJldHVybiBbcHJvcHNUbywgcHJvcHNGcm9tXTsKICAgIH0KCiAgICBmdW5jdGlvbiByZXNldChlbCkgewogICAgICBjc3MoZWwuY2hpbGRyZW4sIHsKICAgICAgICBoZWlnaHQ6ICcnLAogICAgICAgIGxlZnQ6ICcnLAogICAgICAgIG9wYWNpdHk6ICcnLAogICAgICAgIHBvaW50ZXJFdmVudHM6ICcnLAogICAgICAgIHBvc2l0aW9uOiAnJywKICAgICAgICB0b3A6ICcnLAogICAgICAgIG1hcmdpblRvcDogJycsCiAgICAgICAgbWFyZ2luTGVmdDogJycsCiAgICAgICAgdHJhbnNmb3JtOiAnJywKICAgICAgICB3aWR0aDogJycsCiAgICAgICAgekluZGV4OiAnJyB9KTsKCiAgICAgIGNzcyhlbCwgeyBoZWlnaHQ6ICcnLCBkaXNwbGF5OiAnJywgcGFkZGluZzogJycgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0UG9zaXRpb25XaXRoTWFyZ2luKGVsKSB7CiAgICAgIGNvbnN0IHsgaGVpZ2h0LCB3aWR0aCB9ID0gb2Zmc2V0KGVsKTsKICAgICAgY29uc3QgeyB0b3AsIGxlZnQgfSA9IHBvc2l0aW9uKGVsKTsKICAgICAgY29uc3QgeyBtYXJnaW5MZWZ0LCBtYXJnaW5Ub3AgfSA9IGNzcyhlbCwgWydtYXJnaW5Ub3AnLCAnbWFyZ2luTGVmdCddKTsKCiAgICAgIHJldHVybiB7IHRvcCwgbGVmdCwgaGVpZ2h0LCB3aWR0aCwgbWFyZ2luTGVmdCwgbWFyZ2luVG9wLCB0cmFuc2Zvcm06ICcnIH07CiAgICB9CgogICAgdmFyIEFuaW1hdGUgPSB7CiAgICAgIHByb3BzOiB7CiAgICAgICAgZHVyYXRpb246IE51bWJlciwKICAgICAgICBhbmltYXRpb246IEJvb2xlYW4gfSwKCgogICAgICBkYXRhOiB7CiAgICAgICAgZHVyYXRpb246IDE1MCwKICAgICAgICBhbmltYXRpb246ICdzbGlkZScgfSwKCgogICAgICBtZXRob2RzOiB7CiAgICAgICAgYW5pbWF0ZShhY3Rpb24sIHRhcmdldCkge2lmICh0YXJnZXQgPT09IHZvaWQgMCkge3RhcmdldCA9IHRoaXMuJGVsO30KICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmFuaW1hdGlvbjsKICAgICAgICAgIGNvbnN0IGFuaW1hdGlvbkZuID0KICAgICAgICAgIG5hbWUgPT09ICdmYWRlJyA/CiAgICAgICAgICBmYWRlIDoKICAgICAgICAgIG5hbWUgPT09ICdkZWxheWVkLWZhZGUnID8KICAgICAgICAgIGZ1bmN0aW9uICgpIHtmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHthcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO31yZXR1cm4gZmFkZSguLi5hcmdzLCA0MCk7fSA6CiAgICAgICAgICBuYW1lID8KICAgICAgICAgIHNsaWRlIDoKICAgICAgICAgICgpID0+IHsKICAgICAgICAgICAgYWN0aW9uKCk7CiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKICAgICAgICAgIH07CgogICAgICAgICAgcmV0dXJuIGFuaW1hdGlvbkZuKGFjdGlvbiwgdGFyZ2V0LCB0aGlzLmR1cmF0aW9uKS50aGVuKAogICAgICAgICAgKCkgPT4gdGhpcy4kdXBkYXRlKHRhcmdldCwgJ3Jlc2l6ZScpLAogICAgICAgICAgbm9vcCk7CgogICAgICAgIH0gfSB9OwoKICAgIHZhciBmaWx0ZXIgPSB7CiAgICAgIG1peGluczogW0FuaW1hdGVdLAoKICAgICAgYXJnczogJ3RhcmdldCcsCgogICAgICBwcm9wczogewogICAgICAgIHRhcmdldDogQm9vbGVhbiwKICAgICAgICBzZWxBY3RpdmU6IEJvb2xlYW4gfSwKCgogICAgICBkYXRhOiB7CiAgICAgICAgdGFyZ2V0OiBudWxsLAogICAgICAgIHNlbEFjdGl2ZTogZmFsc2UsCiAgICAgICAgYXR0ckl0ZW06ICd1ay1maWx0ZXItY29udHJvbCcsCiAgICAgICAgY2xzOiAndWstYWN0aXZlJywKICAgICAgICBkdXJhdGlvbjogMjUwIH0sCgoKICAgICAgY29tcHV0ZWQ6IHsKICAgICAgICB0b2dnbGVzOiB7CiAgICAgICAgICBnZXQoX3JlZiwgJGVsKSB7bGV0IHsgYXR0ckl0ZW0gfSA9IF9yZWY7CiAgICAgICAgICAgIHJldHVybiAkJCgiWyIgKyBhdHRySXRlbSArICJdLFtkYXRhLSIgKyBhdHRySXRlbSArICJdIiwgJGVsKTsKICAgICAgICAgIH0sCgogICAgICAgICAgd2F0Y2goKSB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoKTsKCiAgICAgICAgICAgIGlmICh0aGlzLnNlbEFjdGl2ZSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICBjb25zdCBhY3RpdmVzID0gJCQodGhpcy5zZWxBY3RpdmUsIHRoaXMuJGVsKTsKICAgICAgICAgICAgICB0aGlzLnRvZ2dsZXMuZm9yRWFjaCgoZWwpID0+IHRvZ2dsZUNsYXNzKGVsLCB0aGlzLmNscywgaW5jbHVkZXMoYWN0aXZlcywgZWwpKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCgogICAgICAgICAgaW1tZWRpYXRlOiB0cnVlIH0sCgoKICAgICAgICBjaGlsZHJlbjogewogICAgICAgICAgZ2V0KF9yZWYyLCAkZWwpIHtsZXQgeyB0YXJnZXQgfSA9IF9yZWYyOwogICAgICAgICAgICByZXR1cm4gJCQodGFyZ2V0ICsgIiA+ICoiLCAkZWwpOwogICAgICAgICAgfSwKCiAgICAgICAgICB3YXRjaChsaXN0LCBvbGQpIHsKICAgICAgICAgICAgaWYgKG9sZCAmJiAhaXNFcXVhbExpc3QobGlzdCwgb2xkKSkgewogICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RhdGUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKCiAgICAgICAgICBpbW1lZGlhdGU6IHRydWUgfSB9LAoKCgogICAgICBldmVudHM6IFsKICAgICAgewogICAgICAgIG5hbWU6ICdjbGljaycsCgogICAgICAgIGRlbGVnYXRlKCkgewogICAgICAgICAgcmV0dXJuICJbIiArIHRoaXMuYXR0ckl0ZW0gKyAiXSxbZGF0YS0iICsgdGhpcy5hdHRySXRlbSArICJdIjsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGVyKGUpIHsKICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuYXBwbHkoZS5jdXJyZW50KTsKICAgICAgICB9IH1dLAoKCgogICAgICBtZXRob2RzOiB7CiAgICAgICAgYXBwbHkoZWwpIHsKICAgICAgICAgIGNvbnN0IHByZXZTdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKTsKICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID0gbWVyZ2VTdGF0ZShlbCwgdGhpcy5hdHRySXRlbSwgdGhpcy5nZXRTdGF0ZSgpKTsKCiAgICAgICAgICBpZiAoIWlzRXF1YWxTdGF0ZShwcmV2U3RhdGUsIG5ld1N0YXRlKSkgewogICAgICAgICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTsKICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBnZXRTdGF0ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnRvZ2dsZXMuCiAgICAgICAgICBmaWx0ZXIoKGl0ZW0pID0+IGhhc0NsYXNzKGl0ZW0sIHRoaXMuY2xzKSkuCiAgICAgICAgICByZWR1Y2UoKHN0YXRlLCBlbCkgPT4gbWVyZ2VTdGF0ZShlbCwgdGhpcy5hdHRySXRlbSwgc3RhdGUpLCB7CiAgICAgICAgICAgIGZpbHRlcjogeyAnJzogJycgfSwKICAgICAgICAgICAgc29ydDogW10gfSk7CgogICAgICAgIH0sCgogICAgICAgIGFzeW5jIHNldFN0YXRlKHN0YXRlLCBhbmltYXRlKSB7aWYgKGFuaW1hdGUgPT09IHZvaWQgMCkge2FuaW1hdGUgPSB0cnVlO30KICAgICAgICAgIHN0YXRlID0geyBmaWx0ZXI6IHsgJyc6ICcnIH0sIHNvcnQ6IFtdLCAuLi5zdGF0ZSB9OwoKICAgICAgICAgIHRyaWdnZXIodGhpcy4kZWwsICdiZWZvcmVGaWx0ZXInLCBbdGhpcywgc3RhdGVdKTsKCiAgICAgICAgICB0aGlzLnRvZ2dsZXMuZm9yRWFjaCgoZWwpID0+CiAgICAgICAgICB0b2dnbGVDbGFzcyhlbCwgdGhpcy5jbHMsICEhbWF0Y2hGaWx0ZXIoZWwsIHRoaXMuYXR0ckl0ZW0sIHN0YXRlKSkpOwoKCiAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCgKICAgICAgICAgICQkKHRoaXMudGFyZ2V0LCB0aGlzLiRlbCkubWFwKCh0YXJnZXQpID0+IHsKICAgICAgICAgICAgY29uc3QgZmlsdGVyRm4gPSAoKSA9PiB7CiAgICAgICAgICAgICAgYXBwbHlTdGF0ZShzdGF0ZSwgdGFyZ2V0LCBjaGlsZHJlbih0YXJnZXQpKTsKICAgICAgICAgICAgICB0aGlzLiR1cGRhdGUodGhpcy4kZWwpOwogICAgICAgICAgICB9OwogICAgICAgICAgICByZXR1cm4gYW5pbWF0ZSA/IHRoaXMuYW5pbWF0ZShmaWx0ZXJGbiwgdGFyZ2V0KSA6IGZpbHRlckZuKCk7CiAgICAgICAgICB9KSk7CgoKICAgICAgICAgIHRyaWdnZXIodGhpcy4kZWwsICdhZnRlckZpbHRlcicsIFt0aGlzXSk7CiAgICAgICAgfSwKCiAgICAgICAgdXBkYXRlU3RhdGUoKSB7CiAgICAgICAgICBmYXN0ZG9tLndyaXRlKCgpID0+IHRoaXMuc2V0U3RhdGUodGhpcy5nZXRTdGF0ZSgpLCBmYWxzZSkpOwogICAgICAgIH0gfSB9OwoKCgogICAgZnVuY3Rpb24gZ2V0RmlsdGVyKGVsLCBhdHRyKSB7CiAgICAgIHJldHVybiBwYXJzZU9wdGlvbnMoZGF0YShlbCwgYXR0ciksIFsnZmlsdGVyJ10pOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzRXF1YWxTdGF0ZShzdGF0ZUEsIHN0YXRlQikgewogICAgICByZXR1cm4gWydmaWx0ZXInLCAnc29ydCddLmV2ZXJ5KChwcm9wKSA9PiBpc0VxdWFsKHN0YXRlQVtwcm9wXSwgc3RhdGVCW3Byb3BdKSk7CiAgICB9CgogICAgZnVuY3Rpb24gYXBwbHlTdGF0ZShzdGF0ZSwgdGFyZ2V0LCBjaGlsZHJlbikgewogICAgICBjb25zdCBzZWxlY3RvciA9IGdldFNlbGVjdG9yKHN0YXRlKTsKCiAgICAgIGNoaWxkcmVuLmZvckVhY2goKGVsKSA9PiBjc3MoZWwsICdkaXNwbGF5Jywgc2VsZWN0b3IgJiYgIW1hdGNoZXMoZWwsIHNlbGVjdG9yKSA/ICdub25lJyA6ICcnKSk7CgogICAgICBjb25zdCBbc29ydCwgb3JkZXJdID0gc3RhdGUuc29ydDsKCiAgICAgIGlmIChzb3J0KSB7CiAgICAgICAgY29uc3Qgc29ydGVkID0gc29ydEl0ZW1zKGNoaWxkcmVuLCBzb3J0LCBvcmRlcik7CiAgICAgICAgaWYgKCFpc0VxdWFsKHNvcnRlZCwgY2hpbGRyZW4pKSB7CiAgICAgICAgICBhcHBlbmQodGFyZ2V0LCBzb3J0ZWQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIG1lcmdlU3RhdGUoZWwsIGF0dHIsIHN0YXRlKSB7CiAgICAgIGNvbnN0IGZpbHRlckJ5ID0gZ2V0RmlsdGVyKGVsLCBhdHRyKTsKICAgICAgY29uc3QgeyBmaWx0ZXIsIGdyb3VwLCBzb3J0LCBvcmRlciA9ICdhc2MnIH0gPSBmaWx0ZXJCeTsKCiAgICAgIGlmIChmaWx0ZXIgfHwgaXNVbmRlZmluZWQoc29ydCkpIHsKICAgICAgICBpZiAoZ3JvdXApIHsKICAgICAgICAgIGlmIChmaWx0ZXIpIHsKICAgICAgICAgICAgZGVsZXRlIHN0YXRlLmZpbHRlclsnJ107CiAgICAgICAgICAgIHN0YXRlLmZpbHRlcltncm91cF0gPSBmaWx0ZXI7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkZWxldGUgc3RhdGUuZmlsdGVyW2dyb3VwXTsKCiAgICAgICAgICAgIGlmIChpc0VtcHR5KHN0YXRlLmZpbHRlcikgfHwgJycgaW4gc3RhdGUuZmlsdGVyKSB7CiAgICAgICAgICAgICAgc3RhdGUuZmlsdGVyID0geyAnJzogZmlsdGVyIHx8ICcnIH07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RhdGUuZmlsdGVyID0geyAnJzogZmlsdGVyIHx8ICcnIH07CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoIWlzVW5kZWZpbmVkKHNvcnQpKSB7CiAgICAgICAgc3RhdGUuc29ydCA9IFtzb3J0LCBvcmRlcl07CiAgICAgIH0KCiAgICAgIHJldHVybiBzdGF0ZTsKICAgIH0KCiAgICBmdW5jdGlvbiBtYXRjaEZpbHRlcigKICAgIGVsLAogICAgYXR0ciwgX3JlZjMpCgogICAge2xldCB7IGZpbHRlcjogc3RhdGVGaWx0ZXIgPSB7ICcnOiAnJyB9LCBzb3J0OiBbc3RhdGVTb3J0LCBzdGF0ZU9yZGVyXSB9ID0gX3JlZjM7CiAgICAgIGNvbnN0IHsgZmlsdGVyID0gJycsIGdyb3VwID0gJycsIHNvcnQsIG9yZGVyID0gJ2FzYycgfSA9IGdldEZpbHRlcihlbCwgYXR0cik7CgogICAgICByZXR1cm4gaXNVbmRlZmluZWQoc29ydCkgPwogICAgICBncm91cCBpbiBzdGF0ZUZpbHRlciAmJiBmaWx0ZXIgPT09IHN0YXRlRmlsdGVyW2dyb3VwXSB8fAogICAgICAhZmlsdGVyICYmIGdyb3VwICYmICEoZ3JvdXAgaW4gc3RhdGVGaWx0ZXIpICYmICFzdGF0ZUZpbHRlclsnJ10gOgogICAgICBzdGF0ZVNvcnQgPT09IHNvcnQgJiYgc3RhdGVPcmRlciA9PT0gb3JkZXI7CiAgICB9CgogICAgZnVuY3Rpb24gaXNFcXVhbExpc3QobGlzdEEsIGxpc3RCKSB7CiAgICAgIHJldHVybiBsaXN0QS5sZW5ndGggPT09IGxpc3RCLmxlbmd0aCAmJiBsaXN0QS5ldmVyeSgoZWwpID0+IGxpc3RCLmluY2x1ZGVzKGVsKSk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0U2VsZWN0b3IoX3JlZjQpIHtsZXQgeyBmaWx0ZXIgfSA9IF9yZWY0OwogICAgICBsZXQgc2VsZWN0b3IgPSAnJzsKICAgICAgZWFjaChmaWx0ZXIsICh2YWx1ZSkgPT4gc2VsZWN0b3IgKz0gdmFsdWUgfHwgJycpOwogICAgICByZXR1cm4gc2VsZWN0b3I7CiAgICB9CgogICAgZnVuY3Rpb24gc29ydEl0ZW1zKG5vZGVzLCBzb3J0LCBvcmRlcikgewogICAgICByZXR1cm4gWy4uLm5vZGVzXS5zb3J0KAogICAgICAoYSwgYikgPT4KICAgICAgZGF0YShhLCBzb3J0KS5sb2NhbGVDb21wYXJlKGRhdGEoYiwgc29ydCksIHVuZGVmaW5lZCwgeyBudW1lcmljOiB0cnVlIH0pICogKAogICAgICBvcmRlciA9PT0gJ2FzYycgfHwgLTEpKTsKCiAgICB9CgogICAgdmFyIEFuaW1hdGlvbnMkMiA9IHsKICAgICAgc2xpZGU6IHsKICAgICAgICBzaG93KGRpcikgewogICAgICAgICAgcmV0dXJuIFt7IHRyYW5zZm9ybTogdHJhbnNsYXRlKGRpciAqIC0xMDApIH0sIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoKSB9XTsKICAgICAgICB9LAoKICAgICAgICBwZXJjZW50KGN1cnJlbnQpIHsKICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVkKGN1cnJlbnQpOwogICAgICAgIH0sCgogICAgICAgIHRyYW5zbGF0ZShwZXJjZW50LCBkaXIpIHsKICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKGRpciAqIC0xMDAgKiBwZXJjZW50KSB9LAogICAgICAgICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZShkaXIgKiAxMDAgKiAoMSAtIHBlcmNlbnQpKSB9XTsKCiAgICAgICAgfSB9IH07CgoKCiAgICBmdW5jdGlvbiB0cmFuc2xhdGVkKGVsKSB7CiAgICAgIHJldHVybiBNYXRoLmFicyhjc3MoZWwsICd0cmFuc2Zvcm0nKS5zcGxpdCgnLCcpWzRdIC8gZWwub2Zmc2V0V2lkdGgpIHx8IDA7CiAgICB9CgogICAgZnVuY3Rpb24gdHJhbnNsYXRlKHZhbHVlLCB1bml0KSB7aWYgKHZhbHVlID09PSB2b2lkIDApIHt2YWx1ZSA9IDA7fWlmICh1bml0ID09PSB2b2lkIDApIHt1bml0ID0gJyUnO30KICAgICAgdmFsdWUgKz0gdmFsdWUgPyB1bml0IDogJyc7CiAgICAgIHJldHVybiAidHJhbnNsYXRlM2QoIiArIHZhbHVlICsgIiwgMCwgMCkiOwogICAgfQoKICAgIGZ1bmN0aW9uIHNjYWxlM2QodmFsdWUpIHsKICAgICAgcmV0dXJuICJzY2FsZTNkKCIgKyB2YWx1ZSArICIsICIgKyB2YWx1ZSArICIsIDEpIjsKICAgIH0KCiAgICB2YXIgQW5pbWF0aW9ucyQxID0gewogICAgICAuLi5BbmltYXRpb25zJDIsCiAgICAgIGZhZGU6IHsKICAgICAgICBzaG93KCkgewogICAgICAgICAgcmV0dXJuIFt7IG9wYWNpdHk6IDAgfSwgeyBvcGFjaXR5OiAxIH1dOwogICAgICAgIH0sCgogICAgICAgIHBlcmNlbnQoY3VycmVudCkgewogICAgICAgICAgcmV0dXJuIDEgLSBjc3MoY3VycmVudCwgJ29wYWNpdHknKTsKICAgICAgICB9LAoKICAgICAgICB0cmFuc2xhdGUocGVyY2VudCkgewogICAgICAgICAgcmV0dXJuIFt7IG9wYWNpdHk6IDEgLSBwZXJjZW50IH0sIHsgb3BhY2l0eTogcGVyY2VudCB9XTsKICAgICAgICB9IH0sCgoKICAgICAgc2NhbGU6IHsKICAgICAgICBzaG93KCkgewogICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgIHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiBzY2FsZTNkKDEgLSAwLjIpIH0sCiAgICAgICAgICB7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogc2NhbGUzZCgxKSB9XTsKCiAgICAgICAgfSwKCiAgICAgICAgcGVyY2VudChjdXJyZW50KSB7CiAgICAgICAgICByZXR1cm4gMSAtIGNzcyhjdXJyZW50LCAnb3BhY2l0eScpOwogICAgICAgIH0sCgogICAgICAgIHRyYW5zbGF0ZShwZXJjZW50KSB7CiAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgeyBvcGFjaXR5OiAxIC0gcGVyY2VudCwgdHJhbnNmb3JtOiBzY2FsZTNkKDEgLSAwLjIgKiBwZXJjZW50KSB9LAogICAgICAgICAgeyBvcGFjaXR5OiBwZXJjZW50LCB0cmFuc2Zvcm06IHNjYWxlM2QoMSAtIDAuMiArIDAuMiAqIHBlcmNlbnQpIH1dOwoKICAgICAgICB9IH0gfTsKCiAgICBmdW5jdGlvbiBUcmFuc2l0aW9uZXIkMShwcmV2LCBuZXh0LCBkaXIsIF9yZWYpIHtsZXQgeyBhbmltYXRpb24sIGVhc2luZyB9ID0gX3JlZjsKICAgICAgY29uc3QgeyBwZXJjZW50LCB0cmFuc2xhdGUsIHNob3cgPSBub29wIH0gPSBhbmltYXRpb247CiAgICAgIGNvbnN0IHByb3BzID0gc2hvdyhkaXIpOwogICAgICBjb25zdCBkZWZlcnJlZCA9IG5ldyBEZWZlcnJlZCgpOwoKICAgICAgcmV0dXJuIHsKICAgICAgICBkaXIsCgogICAgICAgIHNob3coZHVyYXRpb24sIHBlcmNlbnQsIGxpbmVhcikge2lmIChwZXJjZW50ID09PSB2b2lkIDApIHtwZXJjZW50ID0gMDt9CiAgICAgICAgICBjb25zdCB0aW1pbmcgPSBsaW5lYXIgPyAnbGluZWFyJyA6IGVhc2luZzsKICAgICAgICAgIGR1cmF0aW9uIC09IE1hdGgucm91bmQoZHVyYXRpb24gKiBjbGFtcChwZXJjZW50LCAtMSwgMSkpOwoKICAgICAgICAgIHRoaXMudHJhbnNsYXRlKHBlcmNlbnQpOwoKICAgICAgICAgIHRyaWdnZXJVcGRhdGUkMShuZXh0LCAnaXRlbWluJywgeyBwZXJjZW50LCBkdXJhdGlvbiwgdGltaW5nLCBkaXIgfSk7CiAgICAgICAgICB0cmlnZ2VyVXBkYXRlJDEocHJldiwgJ2l0ZW1vdXQnLCB7IHBlcmNlbnQ6IDEgLSBwZXJjZW50LCBkdXJhdGlvbiwgdGltaW5nLCBkaXIgfSk7CgogICAgICAgICAgUHJvbWlzZS5hbGwoWwogICAgICAgICAgVHJhbnNpdGlvbi5zdGFydChuZXh0LCBwcm9wc1sxXSwgZHVyYXRpb24sIHRpbWluZyksCiAgICAgICAgICBUcmFuc2l0aW9uLnN0YXJ0KHByZXYsIHByb3BzWzBdLCBkdXJhdGlvbiwgdGltaW5nKV0pLgogICAgICAgICAgdGhlbigoKSA9PiB7CiAgICAgICAgICAgIHRoaXMucmVzZXQoKTsKICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgICAgfSwgbm9vcCk7CgogICAgICAgICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7CiAgICAgICAgfSwKCiAgICAgICAgY2FuY2VsKCkgewogICAgICAgICAgVHJhbnNpdGlvbi5jYW5jZWwoW25leHQsIHByZXZdKTsKICAgICAgICB9LAoKICAgICAgICByZXNldCgpIHsKICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBwcm9wc1swXSkgewogICAgICAgICAgICBjc3MoW25leHQsIHByZXZdLCBwcm9wLCAnJyk7CiAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgZm9yd2FyZChkdXJhdGlvbiwgcGVyY2VudCkge2lmIChwZXJjZW50ID09PSB2b2lkIDApIHtwZXJjZW50ID0gdGhpcy5wZXJjZW50KCk7fQogICAgICAgICAgVHJhbnNpdGlvbi5jYW5jZWwoW25leHQsIHByZXZdKTsKICAgICAgICAgIHJldHVybiB0aGlzLnNob3coZHVyYXRpb24sIHBlcmNlbnQsIHRydWUpOwogICAgICAgIH0sCgogICAgICAgIHRyYW5zbGF0ZShwZXJjZW50KSB7CiAgICAgICAgICB0aGlzLnJlc2V0KCk7CgogICAgICAgICAgY29uc3QgcHJvcHMgPSB0cmFuc2xhdGUocGVyY2VudCwgZGlyKTsKICAgICAgICAgIGNzcyhuZXh0LCBwcm9wc1sxXSk7CiAgICAgICAgICBjc3MocHJldiwgcHJvcHNbMF0pOwogICAgICAgICAgdHJpZ2dlclVwZGF0ZSQxKG5leHQsICdpdGVtdHJhbnNsYXRlaW4nLCB7IHBlcmNlbnQsIGRpciB9KTsKICAgICAgICAgIHRyaWdnZXJVcGRhdGUkMShwcmV2LCAnaXRlbXRyYW5zbGF0ZW91dCcsIHsgcGVyY2VudDogMSAtIHBlcmNlbnQsIGRpciB9KTsKICAgICAgICB9LAoKICAgICAgICBwZXJjZW50KCkgewogICAgICAgICAgcmV0dXJuIHBlcmNlbnQocHJldiB8fCBuZXh0LCBuZXh0LCBkaXIpOwogICAgICAgIH0sCgogICAgICAgIGdldERpc3RhbmNlKCkgewogICAgICAgICAgcmV0dXJuIHByZXYgPT0gbnVsbCA/IHZvaWQgMCA6IHByZXYub2Zmc2V0V2lkdGg7CiAgICAgICAgfSB9OwoKICAgIH0KCiAgICBmdW5jdGlvbiB0cmlnZ2VyVXBkYXRlJDEoZWwsIHR5cGUsIGRhdGEpIHsKICAgICAgdHJpZ2dlcihlbCwgY3JlYXRlRXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlLCBkYXRhKSk7CiAgICB9CgogICAgdmFyIFNsaWRlckF1dG9wbGF5ID0gewogICAgICBwcm9wczogewogICAgICAgIGF1dG9wbGF5OiBCb29sZWFuLAogICAgICAgIGF1dG9wbGF5SW50ZXJ2YWw6IE51bWJlciwKICAgICAgICBwYXVzZU9uSG92ZXI6IEJvb2xlYW4gfSwKCgogICAgICBkYXRhOiB7CiAgICAgICAgYXV0b3BsYXk6IGZhbHNlLAogICAgICAgIGF1dG9wbGF5SW50ZXJ2YWw6IDcwMDAsCiAgICAgICAgcGF1c2VPbkhvdmVyOiB0cnVlIH0sCgoKICAgICAgY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMuYXV0b3BsYXkgJiYgdGhpcy5zdGFydEF1dG9wbGF5KCk7CiAgICAgIH0sCgogICAgICBkaXNjb25uZWN0ZWQoKSB7CiAgICAgICAgdGhpcy5zdG9wQXV0b3BsYXkoKTsKICAgICAgfSwKCiAgICAgIHVwZGF0ZSgpIHsKICAgICAgICBhdHRyKHRoaXMuc2xpZGVzLCAndGFiaW5kZXgnLCAnLTEnKTsKICAgICAgfSwKCiAgICAgIGV2ZW50czogWwogICAgICB7CiAgICAgICAgbmFtZTogJ3Zpc2liaWxpdHljaGFuZ2UnLAoKICAgICAgICBlbCgpIHsKICAgICAgICAgIHJldHVybiBkb2N1bWVudDsKICAgICAgICB9LAoKICAgICAgICBmaWx0ZXIoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5hdXRvcGxheTsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGVyKCkgewogICAgICAgICAgaWYgKGRvY3VtZW50LmhpZGRlbikgewogICAgICAgICAgICB0aGlzLnN0b3BBdXRvcGxheSgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5zdGFydEF1dG9wbGF5KCk7CiAgICAgICAgICB9CiAgICAgICAgfSB9XSwKCgoKICAgICAgbWV0aG9kczogewogICAgICAgIHN0YXJ0QXV0b3BsYXkoKSB7CiAgICAgICAgICB0aGlzLnN0b3BBdXRvcGxheSgpOwoKICAgICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgKICAgICAgICAgICgpID0+CiAgICAgICAgICAoIXRoaXMuZHJhZ2dhYmxlIHx8ICEkKCc6Zm9jdXMnLCB0aGlzLiRlbCkpICYmICgKICAgICAgICAgICF0aGlzLnBhdXNlT25Ib3ZlciB8fCAhbWF0Y2hlcyh0aGlzLiRlbCwgJzpob3ZlcicpKSAmJgogICAgICAgICAgIXRoaXMuc3RhY2subGVuZ3RoICYmCiAgICAgICAgICB0aGlzLnNob3coJ25leHQnKSwKICAgICAgICAgIHRoaXMuYXV0b3BsYXlJbnRlcnZhbCk7CgogICAgICAgIH0sCgogICAgICAgIHN0b3BBdXRvcGxheSgpIHsKICAgICAgICAgIHRoaXMuaW50ZXJ2YWwgJiYgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTsKICAgICAgICB9IH0gfTsKCiAgICBjb25zdCBwb2ludGVyT3B0aW9ucyA9IHsgcGFzc2l2ZTogZmFsc2UsIGNhcHR1cmU6IHRydWUgfTsKICAgIGNvbnN0IHBvaW50ZXJEb3duID0gJ3RvdWNoc3RhcnQgbW91c2Vkb3duJzsKICAgIGNvbnN0IHBvaW50ZXJNb3ZlID0gJ3RvdWNobW92ZSBtb3VzZW1vdmUnOwogICAgY29uc3QgcG9pbnRlclVwID0gJ3RvdWNoZW5kIHRvdWNoY2FuY2VsIG1vdXNldXAgY2xpY2sgaW5wdXQnOwoKICAgIHZhciBTbGlkZXJEcmFnID0gewogICAgICBwcm9wczogewogICAgICAgIGRyYWdnYWJsZTogQm9vbGVhbiB9LAoKCiAgICAgIGRhdGE6IHsKICAgICAgICBkcmFnZ2FibGU6IHRydWUsCiAgICAgICAgdGhyZXNob2xkOiAxMCB9LAoKCiAgICAgIGNyZWF0ZWQoKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgWydzdGFydCcsICdtb3ZlJywgJ2VuZCddKSB7CiAgICAgICAgICBjb25zdCBmbiA9IHRoaXNba2V5XTsKICAgICAgICAgIHRoaXNba2V5XSA9IChlKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHBvcyA9IGdldEV2ZW50UG9zKGUpLnggKiAoaXNSdGwgPyAtMSA6IDEpOwoKICAgICAgICAgICAgdGhpcy5wcmV2UG9zID0gcG9zID09PSB0aGlzLnBvcyA/IHRoaXMucHJldlBvcyA6IHRoaXMucG9zOwogICAgICAgICAgICB0aGlzLnBvcyA9IHBvczsKCiAgICAgICAgICAgIGZuKGUpOwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgIH0sCgogICAgICBldmVudHM6IFsKICAgICAgewogICAgICAgIG5hbWU6IHBvaW50ZXJEb3duLAoKICAgICAgICBkZWxlZ2F0ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnNlbFNsaWRlczsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGVyKGUpIHsKICAgICAgICAgIGlmICgKICAgICAgICAgICF0aGlzLmRyYWdnYWJsZSB8fAogICAgICAgICAgIWlzVG91Y2goZSkgJiYgaGFzVGV4dE5vZGVzT25seShlLnRhcmdldCkgfHwKICAgICAgICAgIGNsb3Nlc3QoZS50YXJnZXQsIHNlbElucHV0KSB8fAogICAgICAgICAgZS5idXR0b24gPiAwIHx8CiAgICAgICAgICB0aGlzLmxlbmd0aCA8IDIpCiAgICAgICAgICB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICB0aGlzLnN0YXJ0KGUpOwogICAgICAgIH0gfSwKCgogICAgICB7CiAgICAgICAgbmFtZTogJ2RyYWdzdGFydCcsCgogICAgICAgIGhhbmRsZXIoZSkgewogICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0gfSwKCgogICAgICB7CiAgICAgICAgLy8gaU9TIHdvcmthcm91bmQgZm9yIHNsaWRlciBzdG9wcGluZyBpZiBzd2lwaW5nIGZhc3QKICAgICAgICBuYW1lOiBwb2ludGVyTW92ZSArICIgIiArIHBvaW50ZXJVcCwKICAgICAgICBlbCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmxpc3Q7CiAgICAgICAgfSwKICAgICAgICBoYW5kbGVyOiBub29wLAogICAgICAgIC4uLnBvaW50ZXJPcHRpb25zIH1dLAoKCgogICAgICBtZXRob2RzOiB7CiAgICAgICAgc3RhcnQoKSB7CiAgICAgICAgICB0aGlzLmRyYWcgPSB0aGlzLnBvczsKCiAgICAgICAgICBpZiAodGhpcy5fdHJhbnNpdGlvbmVyKSB7CiAgICAgICAgICAgIHRoaXMucGVyY2VudCA9IHRoaXMuX3RyYW5zaXRpb25lci5wZXJjZW50KCk7CiAgICAgICAgICAgIHRoaXMuZHJhZyArPSB0aGlzLl90cmFuc2l0aW9uZXIuZ2V0RGlzdGFuY2UoKSAqIHRoaXMucGVyY2VudCAqIHRoaXMuZGlyOwoKICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmVyLmNhbmNlbCgpOwogICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uZXIudHJhbnNsYXRlKHRoaXMucGVyY2VudCk7CgogICAgICAgICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTsKCiAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBbXTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMucHJldkluZGV4ID0gdGhpcy5pbmRleDsKICAgICAgICAgIH0KCiAgICAgICAgICBvbihkb2N1bWVudCwgcG9pbnRlck1vdmUsIHRoaXMubW92ZSwgcG9pbnRlck9wdGlvbnMpOwoKICAgICAgICAgIC8vICdpbnB1dCcgZXZlbnQgaXMgdHJpZ2dlcmVkIGJ5IHZpZGVvIGNvbnRyb2xzCiAgICAgICAgICBvbihkb2N1bWVudCwgcG9pbnRlclVwLCB0aGlzLmVuZCwgcG9pbnRlck9wdGlvbnMpOwoKICAgICAgICAgIGNzcyh0aGlzLmxpc3QsICd1c2VyU2VsZWN0JywgJ25vbmUnKTsKICAgICAgICB9LAoKICAgICAgICBtb3ZlKGUpIHsKICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gdGhpcy5wb3MgLSB0aGlzLmRyYWc7CgogICAgICAgICAgaWYgKAogICAgICAgICAgZGlzdGFuY2UgPT09IDAgfHwKICAgICAgICAgIHRoaXMucHJldlBvcyA9PT0gdGhpcy5wb3MgfHwKICAgICAgICAgICF0aGlzLmRyYWdnaW5nICYmIE1hdGguYWJzKGRpc3RhbmNlKSA8IHRoaXMudGhyZXNob2xkKQogICAgICAgICAgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgLy8gcHJldmVudCBjbGljayBldmVudAogICAgICAgICAgY3NzKHRoaXMubGlzdCwgJ3BvaW50ZXJFdmVudHMnLCAnbm9uZScpOwoKICAgICAgICAgIGUuY2FuY2VsYWJsZSAmJiBlLnByZXZlbnREZWZhdWx0KCk7CgogICAgICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7CiAgICAgICAgICB0aGlzLmRpciA9IGRpc3RhbmNlIDwgMCA/IDEgOiAtMTsKCiAgICAgICAgICBjb25zdCB7IHNsaWRlcyB9ID0gdGhpczsKICAgICAgICAgIGxldCB7IHByZXZJbmRleCB9ID0gdGhpczsKICAgICAgICAgIGxldCBkaXMgPSBNYXRoLmFicyhkaXN0YW5jZSk7CiAgICAgICAgICBsZXQgbmV4dEluZGV4ID0gdGhpcy5nZXRJbmRleChwcmV2SW5kZXggKyB0aGlzLmRpciwgcHJldkluZGV4KTsKICAgICAgICAgIGxldCB3aWR0aCA9IHRoaXMuX2dldERpc3RhbmNlKHByZXZJbmRleCwgbmV4dEluZGV4KSB8fCBzbGlkZXNbcHJldkluZGV4XS5vZmZzZXRXaWR0aDsKCiAgICAgICAgICB3aGlsZSAobmV4dEluZGV4ICE9PSBwcmV2SW5kZXggJiYgZGlzID4gd2lkdGgpIHsKICAgICAgICAgICAgdGhpcy5kcmFnIC09IHdpZHRoICogdGhpcy5kaXI7CgogICAgICAgICAgICBwcmV2SW5kZXggPSBuZXh0SW5kZXg7CiAgICAgICAgICAgIGRpcyAtPSB3aWR0aDsKICAgICAgICAgICAgbmV4dEluZGV4ID0gdGhpcy5nZXRJbmRleChwcmV2SW5kZXggKyB0aGlzLmRpciwgcHJldkluZGV4KTsKICAgICAgICAgICAgd2lkdGggPSB0aGlzLl9nZXREaXN0YW5jZShwcmV2SW5kZXgsIG5leHRJbmRleCkgfHwgc2xpZGVzW3ByZXZJbmRleF0ub2Zmc2V0V2lkdGg7CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5wZXJjZW50ID0gZGlzIC8gd2lkdGg7CgogICAgICAgICAgY29uc3QgcHJldiA9IHNsaWRlc1twcmV2SW5kZXhdOwogICAgICAgICAgY29uc3QgbmV4dCA9IHNsaWRlc1tuZXh0SW5kZXhdOwogICAgICAgICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuaW5kZXggIT09IG5leHRJbmRleDsKICAgICAgICAgIGNvbnN0IGVkZ2UgPSBwcmV2SW5kZXggPT09IG5leHRJbmRleDsKCiAgICAgICAgICBsZXQgaXRlbVNob3duOwoKICAgICAgICAgIFt0aGlzLmluZGV4LCB0aGlzLnByZXZJbmRleF0uCiAgICAgICAgICBmaWx0ZXIoKGkpID0+ICFpbmNsdWRlcyhbbmV4dEluZGV4LCBwcmV2SW5kZXhdLCBpKSkuCiAgICAgICAgICBmb3JFYWNoKChpKSA9PiB7CiAgICAgICAgICAgIHRyaWdnZXIoc2xpZGVzW2ldLCAnaXRlbWhpZGRlbicsIFt0aGlzXSk7CgogICAgICAgICAgICBpZiAoZWRnZSkgewogICAgICAgICAgICAgIGl0ZW1TaG93biA9IHRydWU7CiAgICAgICAgICAgICAgdGhpcy5wcmV2SW5kZXggPSBwcmV2SW5kZXg7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwoKICAgICAgICAgIGlmICh0aGlzLmluZGV4ID09PSBwcmV2SW5kZXggJiYgdGhpcy5wcmV2SW5kZXggIT09IHByZXZJbmRleCB8fCBpdGVtU2hvd24pIHsKICAgICAgICAgICAgdHJpZ2dlcihzbGlkZXNbdGhpcy5pbmRleF0sICdpdGVtc2hvd24nLCBbdGhpc10pOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChjaGFuZ2VkKSB7CiAgICAgICAgICAgIHRoaXMucHJldkluZGV4ID0gcHJldkluZGV4OwogICAgICAgICAgICB0aGlzLmluZGV4ID0gbmV4dEluZGV4OwoKICAgICAgICAgICAgIWVkZ2UgJiYgdHJpZ2dlcihwcmV2LCAnYmVmb3JlaXRlbWhpZGUnLCBbdGhpc10pOwogICAgICAgICAgICB0cmlnZ2VyKG5leHQsICdiZWZvcmVpdGVtc2hvdycsIFt0aGlzXSk7CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmVyID0gdGhpcy5fdHJhbnNsYXRlKE1hdGguYWJzKHRoaXMucGVyY2VudCksIHByZXYsICFlZGdlICYmIG5leHQpOwoKICAgICAgICAgIGlmIChjaGFuZ2VkKSB7CiAgICAgICAgICAgICFlZGdlICYmIHRyaWdnZXIocHJldiwgJ2l0ZW1oaWRlJywgW3RoaXNdKTsKICAgICAgICAgICAgdHJpZ2dlcihuZXh0LCAnaXRlbXNob3cnLCBbdGhpc10pOwogICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIGVuZCgpIHsKICAgICAgICAgIG9mZihkb2N1bWVudCwgcG9pbnRlck1vdmUsIHRoaXMubW92ZSwgcG9pbnRlck9wdGlvbnMpOwogICAgICAgICAgb2ZmKGRvY3VtZW50LCBwb2ludGVyVXAsIHRoaXMuZW5kLCBwb2ludGVyT3B0aW9ucyk7CgogICAgICAgICAgaWYgKHRoaXMuZHJhZ2dpbmcpIHsKICAgICAgICAgICAgdGhpcy5kcmFnZ2luZyA9IG51bGw7CgogICAgICAgICAgICBpZiAodGhpcy5pbmRleCA9PT0gdGhpcy5wcmV2SW5kZXgpIHsKICAgICAgICAgICAgICB0aGlzLnBlcmNlbnQgPSAxIC0gdGhpcy5wZXJjZW50OwogICAgICAgICAgICAgIHRoaXMuZGlyICo9IC0xOwogICAgICAgICAgICAgIHRoaXMuX3Nob3coZmFsc2UsIHRoaXMuaW5kZXgsIHRydWUpOwogICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25lciA9IG51bGw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY29uc3QgZGlyQ2hhbmdlID0KICAgICAgICAgICAgICAoaXNSdGwgPyB0aGlzLmRpciAqIChpc1J0bCA/IDEgOiAtMSkgOiB0aGlzLmRpcikgPCAwID09PQogICAgICAgICAgICAgIHRoaXMucHJldlBvcyA+IHRoaXMucG9zOwogICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBkaXJDaGFuZ2UgPyB0aGlzLmluZGV4IDogdGhpcy5wcmV2SW5kZXg7CgogICAgICAgICAgICAgIGlmIChkaXJDaGFuZ2UpIHsKICAgICAgICAgICAgICAgIHRoaXMucGVyY2VudCA9IDEgLSB0aGlzLnBlcmNlbnQ7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICB0aGlzLnNob3coCiAgICAgICAgICAgICAgdGhpcy5kaXIgPiAwICYmICFkaXJDaGFuZ2UgfHwgdGhpcy5kaXIgPCAwICYmIGRpckNoYW5nZSA/CiAgICAgICAgICAgICAgJ25leHQnIDoKICAgICAgICAgICAgICAncHJldmlvdXMnLAogICAgICAgICAgICAgIHRydWUpOwoKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIGNzcyh0aGlzLmxpc3QsIHsgdXNlclNlbGVjdDogJycsIHBvaW50ZXJFdmVudHM6ICcnIH0pOwoKICAgICAgICAgIHRoaXMuZHJhZyA9IHRoaXMucGVyY2VudCA9IG51bGw7CiAgICAgICAgfSB9IH07CgoKCiAgICBmdW5jdGlvbiBoYXNUZXh0Tm9kZXNPbmx5KGVsKSB7CiAgICAgIHJldHVybiAhZWwuY2hpbGRyZW4ubGVuZ3RoICYmIGVsLmNoaWxkTm9kZXMubGVuZ3RoOwogICAgfQoKICAgIHZhciBTbGlkZXJOYXYgPSB7CiAgICAgIGRhdGE6IHsKICAgICAgICBzZWxOYXY6IGZhbHNlIH0sCgoKICAgICAgY29tcHV0ZWQ6IHsKICAgICAgICBuYXYoX3JlZiwgJGVsKSB7bGV0IHsgc2VsTmF2IH0gPSBfcmVmOwogICAgICAgICAgcmV0dXJuICQoc2VsTmF2LCAkZWwpOwogICAgICAgIH0sCgogICAgICAgIHNlbE5hdkl0ZW0oX3JlZjIpIHtsZXQgeyBhdHRySXRlbSB9ID0gX3JlZjI7CiAgICAgICAgICByZXR1cm4gIlsiICsgYXR0ckl0ZW0gKyAiXSxbZGF0YS0iICsgYXR0ckl0ZW0gKyAiXSI7CiAgICAgICAgfSwKCiAgICAgICAgbmF2SXRlbXMoXywgJGVsKSB7CiAgICAgICAgICByZXR1cm4gJCQodGhpcy5zZWxOYXZJdGVtLCAkZWwpOwogICAgICAgIH0gfSwKCgogICAgICB1cGRhdGU6IHsKICAgICAgICB3cml0ZSgpIHsKICAgICAgICAgIGlmICh0aGlzLm5hdiAmJiB0aGlzLmxlbmd0aCAhPT0gdGhpcy5uYXYuY2hpbGRyZW4ubGVuZ3RoKSB7CiAgICAgICAgICAgIGh0bWwoCiAgICAgICAgICAgIHRoaXMubmF2LAogICAgICAgICAgICB0aGlzLnNsaWRlcy4KICAgICAgICAgICAgbWFwKChfLCBpKSA9PiAiPGxpICIgKyB0aGlzLmF0dHJJdGVtICsgIj1cIiIgKyBpICsgIlwiPjxhIGhyZWY+PC9hPjwvbGk+IikuCiAgICAgICAgICAgIGpvaW4oJycpKTsKCiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5uYXZJdGVtcy5jb25jYXQodGhpcy5uYXYpLmZvckVhY2goKGVsKSA9PiBlbCAmJiAoZWwuaGlkZGVuID0gIXRoaXMubWF4SW5kZXgpKTsKCiAgICAgICAgICB0aGlzLnVwZGF0ZU5hdigpOwogICAgICAgIH0sCgogICAgICAgIGV2ZW50czogWydyZXNpemUnXSB9LAoKCiAgICAgIGV2ZW50czogWwogICAgICB7CiAgICAgICAgbmFtZTogJ2NsaWNrJywKCiAgICAgICAgZGVsZWdhdGUoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5zZWxOYXZJdGVtOwogICAgICAgIH0sCgogICAgICAgIGhhbmRsZXIoZSkgewogICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5zaG93KGRhdGEoZS5jdXJyZW50LCB0aGlzLmF0dHJJdGVtKSk7CiAgICAgICAgfSB9LAoKCiAgICAgIHsKICAgICAgICBuYW1lOiAnaXRlbXNob3cnLAogICAgICAgIGhhbmRsZXI6ICd1cGRhdGVOYXYnIH1dLAoKCgogICAgICBtZXRob2RzOiB7CiAgICAgICAgdXBkYXRlTmF2KCkgewogICAgICAgICAgY29uc3QgaSA9IHRoaXMuZ2V0VmFsaWRJbmRleCgpOwogICAgICAgICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLm5hdkl0ZW1zKSB7CiAgICAgICAgICAgIGNvbnN0IGNtZCA9IGRhdGEoZWwsIHRoaXMuYXR0ckl0ZW0pOwoKICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoZWwsIHRoaXMuY2xzQWN0aXZlLCB0b051bWJlcihjbWQpID09PSBpKTsKICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoCiAgICAgICAgICAgIGVsLAogICAgICAgICAgICAndWstaW52aXNpYmxlJywKICAgICAgICAgICAgdGhpcy5maW5pdGUgJiYgKAogICAgICAgICAgICBjbWQgPT09ICdwcmV2aW91cycgJiYgaSA9PT0gMCB8fCBjbWQgPT09ICduZXh0JyAmJiBpID49IHRoaXMubWF4SW5kZXgpKTsKCiAgICAgICAgICB9CiAgICAgICAgfSB9IH07CgogICAgdmFyIFNsaWRlciA9IHsKICAgICAgbWl4aW5zOiBbU2xpZGVyQXV0b3BsYXksIFNsaWRlckRyYWcsIFNsaWRlck5hdiwgUmVzaXplXSwKCiAgICAgIHByb3BzOiB7CiAgICAgICAgY2xzQWN0aXZhdGVkOiBCb29sZWFuLAogICAgICAgIGVhc2luZzogU3RyaW5nLAogICAgICAgIGluZGV4OiBOdW1iZXIsCiAgICAgICAgZmluaXRlOiBCb29sZWFuLAogICAgICAgIHZlbG9jaXR5OiBOdW1iZXIsCiAgICAgICAgc2VsU2xpZGVzOiBTdHJpbmcgfSwKCgogICAgICBkYXRhOiAoKSA9PiAoewogICAgICAgIGVhc2luZzogJ2Vhc2UnLAogICAgICAgIGZpbml0ZTogZmFsc2UsCiAgICAgICAgdmVsb2NpdHk6IDEsCiAgICAgICAgaW5kZXg6IDAsCiAgICAgICAgcHJldkluZGV4OiAtMSwKICAgICAgICBzdGFjazogW10sCiAgICAgICAgcGVyY2VudDogMCwKICAgICAgICBjbHNBY3RpdmU6ICd1ay1hY3RpdmUnLAogICAgICAgIGNsc0FjdGl2YXRlZDogZmFsc2UsCiAgICAgICAgVHJhbnNpdGlvbmVyOiBmYWxzZSwKICAgICAgICB0cmFuc2l0aW9uT3B0aW9uczoge30gfSksCgoKICAgICAgY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMucHJldkluZGV4ID0gLTE7CiAgICAgICAgdGhpcy5pbmRleCA9IHRoaXMuZ2V0VmFsaWRJbmRleCh0aGlzLiRwcm9wcy5pbmRleCk7CiAgICAgICAgdGhpcy5zdGFjayA9IFtdOwogICAgICB9LAoKICAgICAgZGlzY29ubmVjdGVkKCkgewogICAgICAgIHJlbW92ZUNsYXNzKHRoaXMuc2xpZGVzLCB0aGlzLmNsc0FjdGl2ZSk7CiAgICAgIH0sCgogICAgICBjb21wdXRlZDogewogICAgICAgIGR1cmF0aW9uKF9yZWYsICRlbCkge2xldCB7IHZlbG9jaXR5IH0gPSBfcmVmOwogICAgICAgICAgcmV0dXJuIHNwZWVkVXAoJGVsLm9mZnNldFdpZHRoIC8gdmVsb2NpdHkpOwogICAgICAgIH0sCgogICAgICAgIGxpc3QoX3JlZjIsICRlbCkge2xldCB7IHNlbExpc3QgfSA9IF9yZWYyOwogICAgICAgICAgcmV0dXJuICQoc2VsTGlzdCwgJGVsKTsKICAgICAgICB9LAoKICAgICAgICBtYXhJbmRleCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCAtIDE7CiAgICAgICAgfSwKCiAgICAgICAgc2VsU2xpZGVzKF9yZWYzKSB7bGV0IHsgc2VsTGlzdCwgc2VsU2xpZGVzIH0gPSBfcmVmMzsKICAgICAgICAgIHJldHVybiBzZWxMaXN0ICsgIiAiICsgKHNlbFNsaWRlcyB8fCAnPiAqJyk7CiAgICAgICAgfSwKCiAgICAgICAgc2xpZGVzOiB7CiAgICAgICAgICBnZXQoKSB7CiAgICAgICAgICAgIHJldHVybiAkJCh0aGlzLnNlbFNsaWRlcywgdGhpcy4kZWwpOwogICAgICAgICAgfSwKCiAgICAgICAgICB3YXRjaCgpIHsKICAgICAgICAgICAgdGhpcy4kcmVzZXQoKTsKICAgICAgICAgIH0gfSwKCgogICAgICAgIGxlbmd0aCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnNsaWRlcy5sZW5ndGg7CiAgICAgICAgfSB9LAoKCiAgICAgIG1ldGhvZHM6IHsKICAgICAgICBzaG93KGluZGV4LCBmb3JjZSkge2lmIChmb3JjZSA9PT0gdm9pZCAwKSB7Zm9yY2UgPSBmYWxzZTt9CiAgICAgICAgICBpZiAodGhpcy5kcmFnZ2luZyB8fCAhdGhpcy5sZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGNvbnN0IHsgc3RhY2sgfSA9IHRoaXM7CiAgICAgICAgICBjb25zdCBxdWV1ZUluZGV4ID0gZm9yY2UgPyAwIDogc3RhY2subGVuZ3RoOwogICAgICAgICAgY29uc3QgcmVzZXQgPSAoKSA9PiB7CiAgICAgICAgICAgIHN0YWNrLnNwbGljZShxdWV1ZUluZGV4LCAxKTsKCiAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICB0aGlzLnNob3coc3RhY2suc2hpZnQoKSwgdHJ1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CgogICAgICAgICAgc3RhY2tbZm9yY2UgPyAndW5zaGlmdCcgOiAncHVzaCddKGluZGV4KTsKCiAgICAgICAgICBpZiAoIWZvcmNlICYmIHN0YWNrLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMikgewogICAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25lci5mb3J3YXJkKE1hdGgubWluKHRoaXMuZHVyYXRpb24sIDIwMCkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgY29uc3QgcHJldkluZGV4ID0gdGhpcy5nZXRJbmRleCh0aGlzLmluZGV4KTsKICAgICAgICAgIGNvbnN0IHByZXYgPSBoYXNDbGFzcyh0aGlzLnNsaWRlcywgdGhpcy5jbHNBY3RpdmUpICYmIHRoaXMuc2xpZGVzW3ByZXZJbmRleF07CiAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSB0aGlzLmdldEluZGV4KGluZGV4LCB0aGlzLmluZGV4KTsKICAgICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLnNsaWRlc1tuZXh0SW5kZXhdOwoKICAgICAgICAgIGlmIChwcmV2ID09PSBuZXh0KSB7CiAgICAgICAgICAgIHJlc2V0KCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICB0aGlzLmRpciA9IGdldERpcmVjdGlvbihpbmRleCwgcHJldkluZGV4KTsKICAgICAgICAgIHRoaXMucHJldkluZGV4ID0gcHJldkluZGV4OwogICAgICAgICAgdGhpcy5pbmRleCA9IG5leHRJbmRleDsKCiAgICAgICAgICBpZiAoCiAgICAgICAgICBwcmV2ICYmICF0cmlnZ2VyKHByZXYsICdiZWZvcmVpdGVtaGlkZScsIFt0aGlzXSkgfHwKICAgICAgICAgICF0cmlnZ2VyKG5leHQsICdiZWZvcmVpdGVtc2hvdycsIFt0aGlzLCBwcmV2XSkpCiAgICAgICAgICB7CiAgICAgICAgICAgIHRoaXMuaW5kZXggPSB0aGlzLnByZXZJbmRleDsKICAgICAgICAgICAgcmVzZXQoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl9zaG93KHByZXYsIG5leHQsIGZvcmNlKS50aGVuKCgpID0+IHsKICAgICAgICAgICAgcHJldiAmJiB0cmlnZ2VyKHByZXYsICdpdGVtaGlkZGVuJywgW3RoaXNdKTsKICAgICAgICAgICAgdHJpZ2dlcihuZXh0LCAnaXRlbXNob3duJywgW3RoaXNdKTsKCiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgICAgICAgICAgIGZhc3Rkb20ud3JpdGUoKCkgPT4gewogICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgdGhpcy5zaG93KHN0YWNrLnNoaWZ0KCksIHRydWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmVyID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KTsKCiAgICAgICAgICBwcmV2ICYmIHRyaWdnZXIocHJldiwgJ2l0ZW1oaWRlJywgW3RoaXNdKTsKICAgICAgICAgIHRyaWdnZXIobmV4dCwgJ2l0ZW1zaG93JywgW3RoaXNdKTsKCiAgICAgICAgICByZXR1cm4gcHJvbWlzZTsKICAgICAgICB9LAoKICAgICAgICBnZXRJbmRleChpbmRleCwgcHJldikge2lmIChpbmRleCA9PT0gdm9pZCAwKSB7aW5kZXggPSB0aGlzLmluZGV4O31pZiAocHJldiA9PT0gdm9pZCAwKSB7cHJldiA9IHRoaXMuaW5kZXg7fQogICAgICAgICAgcmV0dXJuIGNsYW1wKGdldEluZGV4KGluZGV4LCB0aGlzLnNsaWRlcywgcHJldiwgdGhpcy5maW5pdGUpLCAwLCB0aGlzLm1heEluZGV4KTsKICAgICAgICB9LAoKICAgICAgICBnZXRWYWxpZEluZGV4KGluZGV4LCBwcmV2SW5kZXgpIHtpZiAoaW5kZXggPT09IHZvaWQgMCkge2luZGV4ID0gdGhpcy5pbmRleDt9aWYgKHByZXZJbmRleCA9PT0gdm9pZCAwKSB7cHJldkluZGV4ID0gdGhpcy5wcmV2SW5kZXg7fQogICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SW5kZXgoaW5kZXgsIHByZXZJbmRleCk7CiAgICAgICAgfSwKCiAgICAgICAgX3Nob3cocHJldiwgbmV4dCwgZm9yY2UpIHsKICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25lciA9IHRoaXMuX2dldFRyYW5zaXRpb25lcihwcmV2LCBuZXh0LCB0aGlzLmRpciwgewogICAgICAgICAgICBlYXNpbmc6IGZvcmNlID8KICAgICAgICAgICAgbmV4dC5vZmZzZXRXaWR0aCA8IDYwMCA/CiAgICAgICAgICAgICdjdWJpYy1iZXppZXIoMC4yNSwgMC40NiwgMC40NSwgMC45NCknIC8qIGVhc2VPdXRRdWFkICovIDoKICAgICAgICAgICAgJ2N1YmljLWJlemllcigwLjE2NSwgMC44NCwgMC40NCwgMSknIC8qIGVhc2VPdXRRdWFydCAqLyA6CiAgICAgICAgICAgIHRoaXMuZWFzaW5nLAogICAgICAgICAgICAuLi50aGlzLnRyYW5zaXRpb25PcHRpb25zIH0pOwoKCiAgICAgICAgICBpZiAoIWZvcmNlICYmICFwcmV2KSB7CiAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZSgxKTsKICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwogICAgICAgICAgfQoKICAgICAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSB0aGlzLnN0YWNrOwogICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zaXRpb25lcltsZW5ndGggPiAxID8gJ2ZvcndhcmQnIDogJ3Nob3cnXSgKICAgICAgICAgIGxlbmd0aCA+IDEgPyBNYXRoLm1pbih0aGlzLmR1cmF0aW9uLCA3NSArIDc1IC8gKGxlbmd0aCAtIDEpKSA6IHRoaXMuZHVyYXRpb24sCiAgICAgICAgICB0aGlzLnBlcmNlbnQpOwoKICAgICAgICB9LAoKICAgICAgICBfZ2V0RGlzdGFuY2UocHJldiwgbmV4dCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFRyYW5zaXRpb25lcihwcmV2LCBwcmV2ICE9PSBuZXh0ICYmIG5leHQpLmdldERpc3RhbmNlKCk7CiAgICAgICAgfSwKCiAgICAgICAgX3RyYW5zbGF0ZShwZXJjZW50LCBwcmV2LCBuZXh0KSB7aWYgKHByZXYgPT09IHZvaWQgMCkge3ByZXYgPSB0aGlzLnByZXZJbmRleDt9aWYgKG5leHQgPT09IHZvaWQgMCkge25leHQgPSB0aGlzLmluZGV4O30KICAgICAgICAgIGNvbnN0IHRyYW5zaXRpb25lciA9IHRoaXMuX2dldFRyYW5zaXRpb25lcihwcmV2ICE9PSBuZXh0ID8gcHJldiA6IGZhbHNlLCBuZXh0KTsKICAgICAgICAgIHRyYW5zaXRpb25lci50cmFuc2xhdGUocGVyY2VudCk7CiAgICAgICAgICByZXR1cm4gdHJhbnNpdGlvbmVyOwogICAgICAgIH0sCgogICAgICAgIF9nZXRUcmFuc2l0aW9uZXIoCiAgICAgICAgcHJldiwKICAgICAgICBuZXh0LAogICAgICAgIGRpciwKICAgICAgICBvcHRpb25zKQogICAgICAgIHtpZiAocHJldiA9PT0gdm9pZCAwKSB7cHJldiA9IHRoaXMucHJldkluZGV4O31pZiAobmV4dCA9PT0gdm9pZCAwKSB7bmV4dCA9IHRoaXMuaW5kZXg7fWlmIChkaXIgPT09IHZvaWQgMCkge2RpciA9IHRoaXMuZGlyIHx8IDE7fWlmIChvcHRpb25zID09PSB2b2lkIDApIHtvcHRpb25zID0gdGhpcy50cmFuc2l0aW9uT3B0aW9uczt9CiAgICAgICAgICByZXR1cm4gbmV3IHRoaXMuVHJhbnNpdGlvbmVyKAogICAgICAgICAgaXNOdW1iZXIocHJldikgPyB0aGlzLnNsaWRlc1twcmV2XSA6IHByZXYsCiAgICAgICAgICBpc051bWJlcihuZXh0KSA/IHRoaXMuc2xpZGVzW25leHRdIDogbmV4dCwKICAgICAgICAgIGRpciAqIChpc1J0bCA/IC0xIDogMSksCiAgICAgICAgICBvcHRpb25zKTsKCiAgICAgICAgfSB9IH07CgoKCiAgICBmdW5jdGlvbiBnZXREaXJlY3Rpb24oaW5kZXgsIHByZXZJbmRleCkgewogICAgICByZXR1cm4gaW5kZXggPT09ICduZXh0JyA/IDEgOiBpbmRleCA9PT0gJ3ByZXZpb3VzJyA/IC0xIDogaW5kZXggPCBwcmV2SW5kZXggPyAtMSA6IDE7CiAgICB9CgogICAgZnVuY3Rpb24gc3BlZWRVcCh4KSB7CiAgICAgIHJldHVybiAwLjUgKiB4ICsgMzAwOyAvLyBwYXJhYm9sYSB0aHJvdWdoICg0MDAsNTAwOyA2MDAsNjAwOyAxODAwLDEyMDApCiAgICB9CgogICAgdmFyIFNsaWRlc2hvdyA9IHsKICAgICAgbWl4aW5zOiBbU2xpZGVyXSwKCiAgICAgIHByb3BzOiB7CiAgICAgICAgYW5pbWF0aW9uOiBTdHJpbmcgfSwKCgogICAgICBkYXRhOiB7CiAgICAgICAgYW5pbWF0aW9uOiAnc2xpZGUnLAogICAgICAgIGNsc0FjdGl2YXRlZDogJ3VrLXRyYW5zaXRpb24tYWN0aXZlJywKICAgICAgICBBbmltYXRpb25zOiBBbmltYXRpb25zJDIsCiAgICAgICAgVHJhbnNpdGlvbmVyOiBUcmFuc2l0aW9uZXIkMSB9LAoKCiAgICAgIGNvbXB1dGVkOiB7CiAgICAgICAgYW5pbWF0aW9uKF9yZWYpIHtsZXQgeyBhbmltYXRpb24sIEFuaW1hdGlvbnMgfSA9IF9yZWY7CiAgICAgICAgICByZXR1cm4geyAuLi4oQW5pbWF0aW9uc1thbmltYXRpb25dIHx8IEFuaW1hdGlvbnMuc2xpZGUpLCBuYW1lOiBhbmltYXRpb24gfTsKICAgICAgICB9LAoKICAgICAgICB0cmFuc2l0aW9uT3B0aW9ucygpIHsKICAgICAgICAgIHJldHVybiB7IGFuaW1hdGlvbjogdGhpcy5hbmltYXRpb24gfTsKICAgICAgICB9IH0sCgoKICAgICAgZXZlbnRzOiB7CiAgICAgICAgYmVmb3JlaXRlbXNob3coX3JlZjIpIHtsZXQgeyB0YXJnZXQgfSA9IF9yZWYyOwogICAgICAgICAgYWRkQ2xhc3ModGFyZ2V0LCB0aGlzLmNsc0FjdGl2ZSk7CiAgICAgICAgfSwKCiAgICAgICAgaXRlbXNob3duKF9yZWYzKSB7bGV0IHsgdGFyZ2V0IH0gPSBfcmVmMzsKICAgICAgICAgIGFkZENsYXNzKHRhcmdldCwgdGhpcy5jbHNBY3RpdmF0ZWQpOwogICAgICAgIH0sCgogICAgICAgIGl0ZW1oaWRkZW4oX3JlZjQpIHtsZXQgeyB0YXJnZXQgfSA9IF9yZWY0OwogICAgICAgICAgcmVtb3ZlQ2xhc3ModGFyZ2V0LCB0aGlzLmNsc0FjdGl2ZSwgdGhpcy5jbHNBY3RpdmF0ZWQpOwogICAgICAgIH0gfSB9OwoKICAgIHZhciBMaWdodGJveFBhbmVsID0gewogICAgICBtaXhpbnM6IFtDb250YWluZXIsIE1vZGFsLCBUb2dnbGFibGUsIFNsaWRlc2hvd10sCgogICAgICBmdW5jdGlvbmFsOiB0cnVlLAoKICAgICAgcHJvcHM6IHsKICAgICAgICBkZWxheUNvbnRyb2xzOiBOdW1iZXIsCiAgICAgICAgcHJlbG9hZDogTnVtYmVyLAogICAgICAgIHZpZGVvQXV0b3BsYXk6IEJvb2xlYW4sCiAgICAgICAgdGVtcGxhdGU6IFN0cmluZyB9LAoKCiAgICAgIGRhdGE6ICgpID0+ICh7CiAgICAgICAgcHJlbG9hZDogMSwKICAgICAgICB2aWRlb0F1dG9wbGF5OiBmYWxzZSwKICAgICAgICBkZWxheUNvbnRyb2xzOiAzMDAwLAogICAgICAgIGl0ZW1zOiBbXSwKICAgICAgICBjbHM6ICd1ay1vcGVuJywKICAgICAgICBjbHNQYWdlOiAndWstbGlnaHRib3gtcGFnZScsCiAgICAgICAgc2VsTGlzdDogJy51ay1saWdodGJveC1pdGVtcycsCiAgICAgICAgYXR0ckl0ZW06ICd1ay1saWdodGJveC1pdGVtJywKICAgICAgICBzZWxDbG9zZTogJy51ay1jbG9zZS1sYXJnZScsCiAgICAgICAgc2VsQ2FwdGlvbjogJy51ay1saWdodGJveC1jYXB0aW9uJywKICAgICAgICBwYXVzZU9uSG92ZXI6IGZhbHNlLAogICAgICAgIHZlbG9jaXR5OiAyLAogICAgICAgIEFuaW1hdGlvbnM6IEFuaW1hdGlvbnMkMSwKICAgICAgICB0ZW1wbGF0ZTogIjxkaXYgY2xhc3M9XCJ1ay1saWdodGJveCB1ay1vdmVyZmxvdy1oaWRkZW5cIj4gPHVsIGNsYXNzPVwidWstbGlnaHRib3gtaXRlbXNcIj48L3VsPiA8ZGl2IGNsYXNzPVwidWstbGlnaHRib3gtdG9vbGJhciB1ay1wb3NpdGlvbi10b3AgdWstdGV4dC1yaWdodCB1ay10cmFuc2l0aW9uLXNsaWRlLXRvcCB1ay10cmFuc2l0aW9uLW9wYXF1ZVwiPiA8YnV0dG9uIGNsYXNzPVwidWstbGlnaHRib3gtdG9vbGJhci1pY29uIHVrLWNsb3NlLWxhcmdlXCIgdHlwZT1cImJ1dHRvblwiIHVrLWNsb3NlPjwvYnV0dG9uPiA8L2Rpdj4gPGEgY2xhc3M9XCJ1ay1saWdodGJveC1idXR0b24gdWstcG9zaXRpb24tY2VudGVyLWxlZnQgdWstcG9zaXRpb24tbWVkaXVtIHVrLXRyYW5zaXRpb24tZmFkZVwiIGhyZWYgdWstc2xpZGVuYXYtcHJldmlvdXMgdWstbGlnaHRib3gtaXRlbT1cInByZXZpb3VzXCI+PC9hPiA8YSBjbGFzcz1cInVrLWxpZ2h0Ym94LWJ1dHRvbiB1ay1wb3NpdGlvbi1jZW50ZXItcmlnaHQgdWstcG9zaXRpb24tbWVkaXVtIHVrLXRyYW5zaXRpb24tZmFkZVwiIGhyZWYgdWstc2xpZGVuYXYtbmV4dCB1ay1saWdodGJveC1pdGVtPVwibmV4dFwiPjwvYT4gPGRpdiBjbGFzcz1cInVrLWxpZ2h0Ym94LXRvb2xiYXIgdWstbGlnaHRib3gtY2FwdGlvbiB1ay1wb3NpdGlvbi1ib3R0b20gdWstdGV4dC1jZW50ZXIgdWstdHJhbnNpdGlvbi1zbGlkZS1ib3R0b20gdWstdHJhbnNpdGlvbi1vcGFxdWVcIj48L2Rpdj4gPC9kaXY+IiB9KSwKCgoKCgoKCgoKCiAgICAgIGNyZWF0ZWQoKSB7CiAgICAgICAgY29uc3QgJGVsID0gJCh0aGlzLnRlbXBsYXRlKTsKICAgICAgICBjb25zdCBsaXN0ID0gJCh0aGlzLnNlbExpc3QsICRlbCk7CiAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKCgpID0+IGFwcGVuZChsaXN0LCAnPGxpPicpKTsKCiAgICAgICAgdGhpcy4kbW91bnQoYXBwZW5kKHRoaXMuY29udGFpbmVyLCAkZWwpKTsKICAgICAgfSwKCiAgICAgIGNvbXB1dGVkOiB7CiAgICAgICAgY2FwdGlvbihfcmVmLCAkZWwpIHtsZXQgeyBzZWxDYXB0aW9uIH0gPSBfcmVmOwogICAgICAgICAgcmV0dXJuICQoc2VsQ2FwdGlvbiwgJGVsKTsKICAgICAgICB9IH0sCgoKICAgICAgZXZlbnRzOiBbCiAgICAgIHsKICAgICAgICBuYW1lOiBwb2ludGVyTW92ZSQxICsgIiAiICsgcG9pbnRlckRvd24kMSArICIga2V5ZG93biIsCgogICAgICAgIGhhbmRsZXI6ICdzaG93Q29udHJvbHMnIH0sCgoKICAgICAgewogICAgICAgIG5hbWU6ICdjbGljaycsCgogICAgICAgIHNlbGY6IHRydWUsCgogICAgICAgIGRlbGVnYXRlKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuc2VsU2xpZGVzOwogICAgICAgIH0sCgogICAgICAgIGhhbmRsZXIoZSkgewogICAgICAgICAgaWYgKGUuZGVmYXVsdFByZXZlbnRlZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgfSB9LAoKCiAgICAgIHsKICAgICAgICBuYW1lOiAnc2hvd24nLAoKICAgICAgICBzZWxmOiB0cnVlLAoKICAgICAgICBoYW5kbGVyKCkgewogICAgICAgICAgdGhpcy5zaG93Q29udHJvbHMoKTsKICAgICAgICB9IH0sCgoKICAgICAgewogICAgICAgIG5hbWU6ICdoaWRlJywKCiAgICAgICAgc2VsZjogdHJ1ZSwKCiAgICAgICAgaGFuZGxlcigpIHsKICAgICAgICAgIHRoaXMuaGlkZUNvbnRyb2xzKCk7CgogICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5zbGlkZXMsIHRoaXMuY2xzQWN0aXZlKTsKICAgICAgICAgIFRyYW5zaXRpb24uc3RvcCh0aGlzLnNsaWRlcyk7CiAgICAgICAgfSB9LAoKCiAgICAgIHsKICAgICAgICBuYW1lOiAnaGlkZGVuJywKCiAgICAgICAgc2VsZjogdHJ1ZSwKCiAgICAgICAgaGFuZGxlcigpIHsKICAgICAgICAgIHRoaXMuJGRlc3Ryb3kodHJ1ZSk7CiAgICAgICAgfSB9LAoKCiAgICAgIHsKICAgICAgICBuYW1lOiAna2V5dXAnLAoKICAgICAgICBlbCgpIHsKICAgICAgICAgIHJldHVybiBkb2N1bWVudDsKICAgICAgICB9LAoKICAgICAgICBoYW5kbGVyKGUpIHsKICAgICAgICAgIGlmICghdGhpcy5pc1RvZ2dsZWQodGhpcy4kZWwpIHx8ICF0aGlzLmRyYWdnYWJsZSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgc3dpdGNoIChlLmtleUNvZGUpIHsKICAgICAgICAgICAgY2FzZSAzNzoKICAgICAgICAgICAgICB0aGlzLnNob3coJ3ByZXZpb3VzJyk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMzk6CiAgICAgICAgICAgICAgdGhpcy5zaG93KCduZXh0Jyk7CiAgICAgICAgICAgICAgYnJlYWs7fQoKICAgICAgICB9IH0sCgoKICAgICAgewogICAgICAgIG5hbWU6ICdiZWZvcmVpdGVtc2hvdycsCgogICAgICAgIGhhbmRsZXIoZSkgewogICAgICAgICAgaWYgKHRoaXMuaXNUb2dnbGVkKCkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIHRoaXMuZHJhZ2dhYmxlID0gZmFsc2U7CgogICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICAgIHRoaXMudG9nZ2xlRWxlbWVudCh0aGlzLiRlbCwgdHJ1ZSwgZmFsc2UpOwoKICAgICAgICAgIHRoaXMuYW5pbWF0aW9uID0gQW5pbWF0aW9ucyQxWydzY2FsZSddOwogICAgICAgICAgcmVtb3ZlQ2xhc3MoZS50YXJnZXQsIHRoaXMuY2xzQWN0aXZlKTsKICAgICAgICAgIHRoaXMuc3RhY2suc3BsaWNlKDEsIDAsIHRoaXMuaW5kZXgpOwogICAgICAgIH0gfSwKCgogICAgICB7CiAgICAgICAgbmFtZTogJ2l0ZW1zaG93JywKCiAgICAgICAgaGFuZGxlcigpIHsKICAgICAgICAgIGh0bWwodGhpcy5jYXB0aW9uLCB0aGlzLmdldEl0ZW0oKS5jYXB0aW9uIHx8ICcnKTsKCiAgICAgICAgICBmb3IgKGxldCBqID0gLXRoaXMucHJlbG9hZDsgaiA8PSB0aGlzLnByZWxvYWQ7IGorKykgewogICAgICAgICAgICB0aGlzLmxvYWRJdGVtKHRoaXMuaW5kZXggKyBqKTsKICAgICAgICAgIH0KICAgICAgICB9IH0sCgoKICAgICAgewogICAgICAgIG5hbWU6ICdpdGVtc2hvd24nLAoKICAgICAgICBoYW5kbGVyKCkgewogICAgICAgICAgdGhpcy5kcmFnZ2FibGUgPSB0aGlzLiRwcm9wcy5kcmFnZ2FibGU7CiAgICAgICAgfSB9LAoKCiAgICAgIHsKICAgICAgICBuYW1lOiAnaXRlbWxvYWQnLAoKICAgICAgICBhc3luYyBoYW5kbGVyKF8sIGl0ZW0pIHsKICAgICAgICAgIGNvbnN0IHsgc291cmNlOiBzcmMsIHR5cGUsIGFsdCA9ICcnLCBwb3N0ZXIsIGF0dHJzID0ge30gfSA9IGl0ZW07CgogICAgICAgICAgdGhpcy5zZXRJdGVtKGl0ZW0sICc8c3BhbiB1ay1zcGlubmVyPjwvc3Bhbj4nKTsKCiAgICAgICAgICBpZiAoIXNyYykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgbGV0IG1hdGNoZXM7CiAgICAgICAgICBjb25zdCBpZnJhbWVBdHRycyA9IHsKICAgICAgICAgICAgZnJhbWVib3JkZXI6ICcwJywKICAgICAgICAgICAgYWxsb3dmdWxsc2NyZWVuOiAnJywKICAgICAgICAgICAgc3R5bGU6ICdtYXgtd2lkdGg6IDEwMCU7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7JywKICAgICAgICAgICAgJ3VrLXJlc3BvbnNpdmUnOiAnJywKICAgICAgICAgICAgJ3VrLXZpZGVvJzogIiIgKyB0aGlzLnZpZGVvQXV0b3BsYXkgfTsKCgogICAgICAgICAgLy8gSW1hZ2UKICAgICAgICAgIGlmICgKICAgICAgICAgIHR5cGUgPT09ICdpbWFnZScgfHwKICAgICAgICAgIHNyYy5tYXRjaCgvXC4oYXZpZnxqcGU/Z3xqZmlmfGE/cG5nfGdpZnxzdmd8d2VicCkoJHxcPykvaSkpCiAgICAgICAgICB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBhd2FpdCBnZXRJbWFnZShzcmMsIGF0dHJzLnNyY3NldCwgYXR0cnMuc2l6ZSk7CiAgICAgICAgICAgICAgdGhpcy5zZXRJdGVtKGl0ZW0sIGNyZWF0ZUVsKCdpbWcnLCB7IHNyYywgd2lkdGgsIGhlaWdodCwgYWx0LCAuLi5hdHRycyB9KSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICB0aGlzLnNldEVycm9yKGl0ZW0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBWaWRlbwogICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAndmlkZW8nIHx8IHNyYy5tYXRjaCgvXC4obXA0fHdlYm18b2d2KSgkfFw/KS9pKSkgewogICAgICAgICAgICBjb25zdCB2aWRlbyA9IGNyZWF0ZUVsKCd2aWRlbycsIHsKICAgICAgICAgICAgICBzcmMsCiAgICAgICAgICAgICAgcG9zdGVyLAogICAgICAgICAgICAgIGNvbnRyb2xzOiAnJywKICAgICAgICAgICAgICBwbGF5c2lubGluZTogJycsCiAgICAgICAgICAgICAgJ3VrLXZpZGVvJzogIiIgKyB0aGlzLnZpZGVvQXV0b3BsYXksCiAgICAgICAgICAgICAgLi4uYXR0cnMgfSk7CgoKICAgICAgICAgICAgb24odmlkZW8sICdsb2FkZWRtZXRhZGF0YScsICgpID0+IHsKICAgICAgICAgICAgICBhdHRyKHZpZGVvLCB7IHdpZHRoOiB2aWRlby52aWRlb1dpZHRoLCBoZWlnaHQ6IHZpZGVvLnZpZGVvSGVpZ2h0IH0pOwogICAgICAgICAgICAgIHRoaXMuc2V0SXRlbShpdGVtLCB2aWRlbyk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBvbih2aWRlbywgJ2Vycm9yJywgKCkgPT4gdGhpcy5zZXRFcnJvcihpdGVtKSk7CgogICAgICAgICAgICAvLyBJZnJhbWUKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2lmcmFtZScgfHwgc3JjLm1hdGNoKC9cLihodG1sfHBocCkoJHxcPykvaSkpIHsKICAgICAgICAgICAgdGhpcy5zZXRJdGVtKAogICAgICAgICAgICBpdGVtLAogICAgICAgICAgICBjcmVhdGVFbCgnaWZyYW1lJywgewogICAgICAgICAgICAgIHNyYywKICAgICAgICAgICAgICBmcmFtZWJvcmRlcjogJzAnLAogICAgICAgICAgICAgIGFsbG93ZnVsbHNjcmVlbjogJycsCiAgICAgICAgICAgICAgY2xhc3M6ICd1ay1saWdodGJveC1pZnJhbWUnLAogICAgICAgICAgICAgIC4uLmF0dHJzIH0pKTsKCgoKICAgICAgICAgICAgLy8gWW91VHViZQogICAgICAgICAgfSBlbHNlIGlmICgKICAgICAgICAgIG1hdGNoZXMgPSBzcmMubWF0Y2goCiAgICAgICAgICAvXC9cLyg/Oi4qP3lvdXR1YmUoLW5vY29va2llKT9cLi4qP1s/Jl12PXx5b3V0dVwuYmVcLykoW1x3LV17MTF9KVsmP10/KC4qKT8vKSkKCiAgICAgICAgICB7CiAgICAgICAgICAgIHRoaXMuc2V0SXRlbSgKICAgICAgICAgICAgaXRlbSwKICAgICAgICAgICAgY3JlYXRlRWwoJ2lmcmFtZScsIHsKICAgICAgICAgICAgICBzcmM6ICJodHRwczovL3d3dy55b3V0dWJlIiArIChtYXRjaGVzWzFdIHx8ICcnKSArICIuY29tL2VtYmVkLyIgKyBtYXRjaGVzWzJdICsgKAogICAgICAgICAgICAgIG1hdGNoZXNbM10gPyAiPyIgKyBtYXRjaGVzWzNdIDogJycpLAoKICAgICAgICAgICAgICB3aWR0aDogMTkyMCwKICAgICAgICAgICAgICBoZWlnaHQ6IDEwODAsCiAgICAgICAgICAgICAgLi4uaWZyYW1lQXR0cnMsCiAgICAgICAgICAgICAgLi4uYXR0cnMgfSkpOwoKCgogICAgICAgICAgICAvLyBWaW1lbwogICAgICAgICAgfSBlbHNlIGlmIChtYXRjaGVzID0gc3JjLm1hdGNoKC9cL1wvLio/dmltZW9cLlthLXpdK1wvKFxkKylbJj9dPyguKik/LykpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBjb25zdCB7IGhlaWdodCwgd2lkdGggfSA9IGF3YWl0ICgKICAgICAgICAgICAgICBhd2FpdCBmZXRjaCgiaHR0cHM6Ly92aW1lby5jb20vYXBpL29lbWJlZC5qc29uP21heHdpZHRoPTE5MjAmdXJsPSIgKwogICAgICAgICAgICAgIGVuY29kZVVSSSgKICAgICAgICAgICAgICBzcmMpLAoKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogJ29taXQnIH0pKS4KCgogICAgICAgICAgICAgIGpzb24oKTsKCiAgICAgICAgICAgICAgdGhpcy5zZXRJdGVtKAogICAgICAgICAgICAgIGl0ZW0sCiAgICAgICAgICAgICAgY3JlYXRlRWwoJ2lmcmFtZScsIHsKICAgICAgICAgICAgICAgIHNyYzogImh0dHBzOi8vcGxheWVyLnZpbWVvLmNvbS92aWRlby8iICsgbWF0Y2hlc1sxXSArICgKICAgICAgICAgICAgICAgIG1hdGNoZXNbMl0gPyAiPyIgKyBtYXRjaGVzWzJdIDogJycpLAoKICAgICAgICAgICAgICAgIHdpZHRoLAogICAgICAgICAgICAgICAgaGVpZ2h0LAogICAgICAgICAgICAgICAgLi4uaWZyYW1lQXR0cnMsCiAgICAgICAgICAgICAgICAuLi5hdHRycyB9KSk7CgoKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgIHRoaXMuc2V0RXJyb3IoaXRlbSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IH1dLAoKCgogICAgICBtZXRob2RzOiB7CiAgICAgICAgbG9hZEl0ZW0oaW5kZXgpIHtpZiAoaW5kZXggPT09IHZvaWQgMCkge2luZGV4ID0gdGhpcy5pbmRleDt9CiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKGluZGV4KTsKCiAgICAgICAgICBpZiAoIXRoaXMuZ2V0U2xpZGUoaXRlbSkuY2hpbGRFbGVtZW50Q291bnQpIHsKICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ2l0ZW1sb2FkJywgW2l0ZW1dKTsKICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBnZXRJdGVtKGluZGV4KSB7aWYgKGluZGV4ID09PSB2b2lkIDApIHtpbmRleCA9IHRoaXMuaW5kZXg7fQogICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXNbZ2V0SW5kZXgoaW5kZXgsIHRoaXMuc2xpZGVzKV07CiAgICAgICAgfSwKCiAgICAgICAgc2V0SXRlbShpdGVtLCBjb250ZW50KSB7CiAgICAgICAgICB0cmlnZ2VyKHRoaXMuJGVsLCAnaXRlbWxvYWRlZCcsIFt0aGlzLCBodG1sKHRoaXMuZ2V0U2xpZGUoaXRlbSksIGNvbnRlbnQpXSk7CiAgICAgICAgfSwKCiAgICAgICAgZ2V0U2xpZGUoaXRlbSkgewogICAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVzW3RoaXMuaXRlbXMuaW5kZXhPZihpdGVtKV07CiAgICAgICAgfSwKCiAgICAgICAgc2V0RXJyb3IoaXRlbSkgewogICAgICAgICAgdGhpcy5zZXRJdGVtKGl0ZW0sICc8c3BhbiB1ay1pY29uPSJpY29uOiBib2x0OyByYXRpbzogMiI+PC9zcGFuPicpOwogICAgICAgIH0sCgogICAgICAgIHNob3dDb250cm9scygpIHsKICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNvbnRyb2xzVGltZXIpOwogICAgICAgICAgdGhpcy5jb250cm9sc1RpbWVyID0gc2V0VGltZW91dCh0aGlzLmhpZGVDb250cm9scywgdGhpcy5kZWxheUNvbnRyb2xzKTsKCiAgICAgICAgICBhZGRDbGFzcyh0aGlzLiRlbCwgJ3VrLWFjdGl2ZScsICd1ay10cmFuc2l0aW9uLWFjdGl2ZScpOwogICAgICAgIH0sCgogICAgICAgIGhpZGVDb250cm9scygpIHsKICAgICAgICAgIHJlbW92ZUNsYXNzKHRoaXMuJGVsLCAndWstYWN0aXZlJywgJ3VrLXRyYW5zaXRpb24tYWN0aXZlJyk7CiAgICAgICAgfSB9IH07CgoKCiAgICBmdW5jdGlvbiBjcmVhdGVFbCh0YWcsIGF0dHJzKSB7CiAgICAgIGNvbnN0IGVsID0gZnJhZ21lbnQoIjwiICsgdGFnICsgIj4iKTsKICAgICAgYXR0cihlbCwgYXR0cnMpOwogICAgICByZXR1cm4gZWw7CiAgICB9CgogICAgdmFyIGxpZ2h0Ym94ID0gewogICAgICBpbnN0YWxsOiBpbnN0YWxsJDEsCgogICAgICBwcm9wczogeyB0b2dnbGU6IFN0cmluZyB9LAoKICAgICAgZGF0YTogeyB0b2dnbGU6ICdhJyB9LAoKICAgICAgY29tcHV0ZWQ6IHsKICAgICAgICB0b2dnbGVzOiB7CiAgICAgICAgICBnZXQoX3JlZiwgJGVsKSB7bGV0IHsgdG9nZ2xlIH0gPSBfcmVmOwogICAgICAgICAgICByZXR1cm4gJCQodG9nZ2xlLCAkZWwpOwogICAgICAgICAgfSwKCiAgICAgICAgICB3YXRjaCgpIHsKICAgICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICB9IH0gfSwKCgoKICAgICAgZGlzY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMuaGlkZSgpOwogICAgICB9LAoKICAgICAgZXZlbnRzOiBbCiAgICAgIHsKICAgICAgICBuYW1lOiAnY2xpY2snLAoKICAgICAgICBkZWxlZ2F0ZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnRvZ2dsZSArICI6bm90KC51ay1kaXNhYmxlZCkiOwogICAgICAgIH0sCgogICAgICAgIGhhbmRsZXIoZSkgewogICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5zaG93KGUuY3VycmVudCk7CiAgICAgICAgfSB9XSwKCgoKICAgICAgbWV0aG9kczogewogICAgICAgIHNob3coaW5kZXgpIHsKICAgICAgICAgIGNvbnN0IGl0ZW1zID0gdW5pcXVlQnkodGhpcy50b2dnbGVzLm1hcCh0b0l0ZW0pLCAnc291cmNlJyk7CgogICAgICAgICAgaWYgKGlzRWxlbWVudChpbmRleCkpIHsKICAgICAgICAgICAgY29uc3QgeyBzb3VyY2UgfSA9IHRvSXRlbShpbmRleCk7CiAgICAgICAgICAgIGluZGV4ID0gZmluZEluZGV4KGl0ZW1zLCAoX3JlZjIpID0+IHtsZXQgeyBzb3VyY2U6IHNyYyB9ID0gX3JlZjI7cmV0dXJuIHNvdXJjZSA9PT0gc3JjO30pOwogICAgICAgICAgfQoKICAgICAgICAgIHRoaXMucGFuZWwgPSB0aGlzLnBhbmVsIHx8IHRoaXMuJGNyZWF0ZSgnbGlnaHRib3hQYW5lbCcsIHsgLi4udGhpcy4kcHJvcHMsIGl0ZW1zIH0pOwoKICAgICAgICAgIG9uKHRoaXMucGFuZWwuJGVsLCAnaGlkZGVuJywgKCkgPT4gdGhpcy5wYW5lbCA9IGZhbHNlKTsKCiAgICAgICAgICByZXR1cm4gdGhpcy5wYW5lbC5zaG93KGluZGV4KTsKICAgICAgICB9LAoKICAgICAgICBoaWRlKCkge3ZhciBfdGhpcyRwYW5lbDsKICAgICAgICAgIHJldHVybiAoX3RoaXMkcGFuZWwgPSB0aGlzLnBhbmVsKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXMkcGFuZWwuaGlkZSgpOwogICAgICAgIH0gfSB9OwoKCgogICAgZnVuY3Rpb24gaW5zdGFsbCQxKFVJa2l0LCBMaWdodGJveCkgewogICAgICBpZiAoIVVJa2l0LmxpZ2h0Ym94UGFuZWwpIHsKICAgICAgICBVSWtpdC5jb21wb25lbnQoJ2xpZ2h0Ym94UGFuZWwnLCBMaWdodGJveFBhbmVsKTsKICAgICAgfQoKICAgICAgYXNzaWduKExpZ2h0Ym94LnByb3BzLCBVSWtpdC5jb21wb25lbnQoJ2xpZ2h0Ym94UGFuZWwnKS5vcHRpb25zLnByb3BzKTsKICAgIH0KCiAgICBmdW5jdGlvbiB0b0l0ZW0oZWwpIHsKICAgICAgY29uc3QgaXRlbSA9IHt9OwoKICAgICAgZm9yIChjb25zdCBhdHRyIG9mIFsnaHJlZicsICdjYXB0aW9uJywgJ3R5cGUnLCAncG9zdGVyJywgJ2FsdCcsICdhdHRycyddKSB7CiAgICAgICAgaXRlbVthdHRyID09PSAnaHJlZicgPyAnc291cmNlJyA6IGF0dHJdID0gZGF0YShlbCwgYXR0cik7CiAgICAgIH0KCiAgICAgIGl0ZW0uYXR0cnMgPSBwYXJzZU9wdGlvbnMoaXRlbS5hdHRycyk7CgogICAgICByZXR1cm4gaXRlbTsKICAgIH0KCiAgICB2YXIgbm90aWZpY2F0aW9uID0gewogICAgICBtaXhpbnM6IFtDb250YWluZXJdLAoKICAgICAgZnVuY3Rpb25hbDogdHJ1ZSwKCiAgICAgIGFyZ3M6IFsnbWVzc2FnZScsICdzdGF0dXMnXSwKCiAgICAgIGRhdGE6IHsKICAgICAgICBtZXNzYWdlOiAnJywKICAgICAgICBzdGF0dXM6ICcnLAogICAgICAgIHRpbWVvdXQ6IDUwMDAsCiAgICAgICAgZ3JvdXA6IG51bGwsCiAgICAgICAgcG9zOiAndG9wLWNlbnRlcicsCiAgICAgICAgY2xzQ29udGFpbmVyOiAndWstbm90aWZpY2F0aW9uJywKICAgICAgICBjbHNDbG9zZTogJ3VrLW5vdGlmaWNhdGlvbi1jbG9zZScsCiAgICAgICAgY2xzTXNnOiAndWstbm90aWZpY2F0aW9uLW1lc3NhZ2UnIH0sCgoKICAgICAgaW5zdGFsbCwKCiAgICAgIGNvbXB1dGVkOiB7CiAgICAgICAgbWFyZ2luUHJvcChfcmVmKSB7bGV0IHsgcG9zIH0gPSBfcmVmOwogICAgICAgICAgcmV0dXJuICJtYXJnaW4iICsgKHN0YXJ0c1dpdGgocG9zLCAndG9wJykgPyAnVG9wJyA6ICdCb3R0b20nKTsKICAgICAgICB9LAoKICAgICAgICBzdGFydFByb3BzKCkgewogICAgICAgICAgcmV0dXJuIHsgb3BhY2l0eTogMCwgW3RoaXMubWFyZ2luUHJvcF06IC10aGlzLiRlbC5vZmZzZXRIZWlnaHQgfTsKICAgICAgICB9IH0sCgoKICAgICAgY3JlYXRlZCgpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPQogICAgICAgICQoIi4iICsgdGhpcy5jbHNDb250YWluZXIgKyAiLSIgKyB0aGlzLnBvcywgdGhpcy5jb250YWluZXIpIHx8CiAgICAgICAgYXBwZW5kKAogICAgICAgIHRoaXMuY29udGFpbmVyLCAiPGRpdiBjbGFzcz1cIiIgKwogICAgICAgIHRoaXMuY2xzQ29udGFpbmVyICsgIiAiICsgdGhpcy5jbHNDb250YWluZXIgKyAiLSIgKyB0aGlzLnBvcyArICJcIiBzdHlsZT1cImRpc3BsYXk6IGJsb2NrXCI+PC9kaXY+Iik7CgoKICAgICAgICB0aGlzLiRtb3VudCgKICAgICAgICBhcHBlbmQoCiAgICAgICAgY29udGFpbmVyLCAiPGRpdiBjbGFzcz1cIiIgKwogICAgICAgIHRoaXMuY2xzTXNnICsgKAogICAgICAgIHRoaXMuc3RhdHVzID8gIiAiICsgdGhpcy5jbHNNc2cgKyAiLSIgKyB0aGlzLnN0YXR1cyA6ICcnKSArICJcIiByb2xlPVwiYWxlcnRcIj4gPGEgaHJlZiBjbGFzcz1cIiIgKwoKICAgICAgICB0aGlzLmNsc0Nsb3NlICsgIlwiIGRhdGEtdWstY2xvc2U+PC9hPiA8ZGl2PiIgKwogICAgICAgIHRoaXMubWVzc2FnZSArICI8L2Rpdj4gPC9kaXY+IikpOwoKCgogICAgICB9LAoKICAgICAgYXN5bmMgY29ubmVjdGVkKCkgewogICAgICAgIGNvbnN0IG1hcmdpbiA9IHRvRmxvYXQoY3NzKHRoaXMuJGVsLCB0aGlzLm1hcmdpblByb3ApKTsKICAgICAgICBhd2FpdCBUcmFuc2l0aW9uLnN0YXJ0KGNzcyh0aGlzLiRlbCwgdGhpcy5zdGFydFByb3BzKSwgewogICAgICAgICAgb3BhY2l0eTogMSwKICAgICAgICAgIFt0aGlzLm1hcmdpblByb3BdOiBtYXJnaW4gfSk7CgoKICAgICAgICBpZiAodGhpcy50aW1lb3V0KSB7CiAgICAgICAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dCh0aGlzLmNsb3NlLCB0aGlzLnRpbWVvdXQpOwogICAgICAgIH0KICAgICAgfSwKCiAgICAgIGV2ZW50czogewogICAgICAgIGNsaWNrKGUpIHsKICAgICAgICAgIGlmIChjbG9zZXN0KGUudGFyZ2V0LCAnYVtocmVmPSIjIl0sYVtocmVmPSIiXScpKSB7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuY2xvc2UoKTsKICAgICAgICB9LAoKICAgICAgICBbcG9pbnRlckVudGVyXSgpIHsKICAgICAgICAgIGlmICh0aGlzLnRpbWVyKSB7CiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTsKICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBbcG9pbnRlckxlYXZlXSgpIHsKICAgICAgICAgIGlmICh0aGlzLnRpbWVvdXQpIHsKICAgICAgICAgICAgdGhpcy50aW1lciA9IHNldFRpbWVvdXQodGhpcy5jbG9zZSwgdGhpcy50aW1lb3V0KTsKICAgICAgICAgIH0KICAgICAgICB9IH0sCgoKICAgICAgbWV0aG9kczogewogICAgICAgIGFzeW5jIGNsb3NlKGltbWVkaWF0ZSkgewogICAgICAgICAgY29uc3QgcmVtb3ZlRm4gPSAoZWwpID0+IHsKICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gcGFyZW50KGVsKTsKCiAgICAgICAgICAgIHRyaWdnZXIoZWwsICdjbG9zZScsIFt0aGlzXSk7CiAgICAgICAgICAgIHJlbW92ZSQxKGVsKTsKCiAgICAgICAgICAgIGlmICghKGNvbnRhaW5lciAhPSBudWxsICYmIGNvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpKSB7CiAgICAgICAgICAgICAgcmVtb3ZlJDEoY29udGFpbmVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfTsKCiAgICAgICAgICBpZiAodGhpcy50aW1lcikgewogICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHsKICAgICAgICAgICAgYXdhaXQgVHJhbnNpdGlvbi5zdGFydCh0aGlzLiRlbCwgdGhpcy5zdGFydFByb3BzKTsKICAgICAgICAgIH0KCiAgICAgICAgICByZW1vdmVGbih0aGlzLiRlbCk7CiAgICAgICAgfSB9IH07CgoKCiAgICBmdW5jdGlvbiBpbnN0YWxsKFVJa2l0KSB7CiAgICAgIFVJa2l0Lm5vdGlmaWNhdGlvbi5jbG9zZUFsbCA9IGZ1bmN0aW9uIChncm91cCwgaW1tZWRpYXRlKSB7CiAgICAgICAgYXBwbHkoZG9jdW1lbnQuYm9keSwgKGVsKSA9PiB7CiAgICAgICAgICBjb25zdCBub3RpZmljYXRpb24gPSBVSWtpdC5nZXRDb21wb25lbnQoZWwsICdub3RpZmljYXRpb24nKTsKICAgICAgICAgIGlmIChub3RpZmljYXRpb24gJiYgKCFncm91cCB8fCBncm91cCA9PT0gbm90aWZpY2F0aW9uLmdyb3VwKSkgewogICAgICAgICAgICBub3RpZmljYXRpb24uY2xvc2UoaW1tZWRpYXRlKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfTsKICAgIH0KCiAgICBjb25zdCBwcm9wcyA9IHsKICAgICAgeDogdHJhbnNmb3JtRm4sCiAgICAgIHk6IHRyYW5zZm9ybUZuLAogICAgICByb3RhdGU6IHRyYW5zZm9ybUZuLAogICAgICBzY2FsZTogdHJhbnNmb3JtRm4sCiAgICAgIGNvbG9yOiBjb2xvckZuLAogICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yRm4sCiAgICAgIGJvcmRlckNvbG9yOiBjb2xvckZuLAogICAgICBibHVyOiBmaWx0ZXJGbiwKICAgICAgaHVlOiBmaWx0ZXJGbiwKICAgICAgZm9wYWNpdHk6IGZpbHRlckZuLAogICAgICBncmF5c2NhbGU6IGZpbHRlckZuLAogICAgICBpbnZlcnQ6IGZpbHRlckZuLAogICAgICBzYXR1cmF0ZTogZmlsdGVyRm4sCiAgICAgIHNlcGlhOiBmaWx0ZXJGbiwKICAgICAgb3BhY2l0eTogY3NzUHJvcEZuLAogICAgICBzdHJva2U6IHN0cm9rZUZuLAogICAgICBiZ3g6IGJhY2tncm91bmRGbiwKICAgICAgYmd5OiBiYWNrZ3JvdW5kRm4gfTsKCgogICAgY29uc3QgeyBrZXlzIH0gPSBPYmplY3Q7CgogICAgdmFyIFBhcmFsbGF4ID0gewogICAgICBtaXhpbnM6IFtNZWRpYV0sCgogICAgICBwcm9wczogZmlsbE9iamVjdChrZXlzKHByb3BzKSwgJ2xpc3QnKSwKCiAgICAgIGRhdGE6IGZpbGxPYmplY3Qoa2V5cyhwcm9wcyksIHVuZGVmaW5lZCksCgogICAgICBjb21wdXRlZDogewogICAgICAgIHByb3BzKHByb3BlcnRpZXMsICRlbCkgewogICAgICAgICAgY29uc3Qgc3RvcHMgPSB7fTsKICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBwcm9wZXJ0aWVzKSB7CiAgICAgICAgICAgIGlmIChwcm9wIGluIHByb3BzICYmICFpc1VuZGVmaW5lZChwcm9wZXJ0aWVzW3Byb3BdKSkgewogICAgICAgICAgICAgIHN0b3BzW3Byb3BdID0gcHJvcGVydGllc1twcm9wXS5zbGljZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCByZXN1bHQgPSB7fTsKICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBzdG9wcykgewogICAgICAgICAgICByZXN1bHRbcHJvcF0gPSBwcm9wc1twcm9wXShwcm9wLCAkZWwsIHN0b3BzW3Byb3BdLCBzdG9wcyk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0gfSwKCgogICAgICBldmVudHM6IHsKICAgICAgICBsb2FkKCkgewogICAgICAgICAgdGhpcy4kZW1pdCgpOwogICAgICAgIH0gfSwKCgogICAgICBtZXRob2RzOiB7CiAgICAgICAgcmVzZXQoKSB7CiAgICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gdGhpcy5nZXRDc3MoMCkpIHsKICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCBwcm9wLCAnJyk7CiAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgZ2V0Q3NzKHBlcmNlbnQpIHsKICAgICAgICAgIGNvbnN0IGNzcyA9IHsgdHJhbnNmb3JtOiAnJywgZmlsdGVyOiAnJyB9OwogICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHRoaXMucHJvcHMpIHsKICAgICAgICAgICAgdGhpcy5wcm9wc1twcm9wXShjc3MsIHBlcmNlbnQpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGNzczsKICAgICAgICB9IH0gfTsKCgoKICAgIGZ1bmN0aW9uIHRyYW5zZm9ybUZuKHByb3AsIGVsLCBzdG9wcykgewogICAgICBsZXQgdW5pdCA9IGdldFVuaXQoc3RvcHMpIHx8IHsgeDogJ3B4JywgeTogJ3B4Jywgcm90YXRlOiAnZGVnJyB9W3Byb3BdIHx8ICcnOwogICAgICBsZXQgdHJhbnNmb3JtRm47CgogICAgICBpZiAocHJvcCA9PT0gJ3gnIHx8IHByb3AgPT09ICd5JykgewogICAgICAgIHByb3AgPSAidHJhbnNsYXRlIiArIHVjZmlyc3QocHJvcCk7CiAgICAgICAgdHJhbnNmb3JtRm4gPSAoc3RvcCkgPT4gdG9GbG9hdCh0b0Zsb2F0KHN0b3ApLnRvRml4ZWQodW5pdCA9PT0gJ3B4JyA/IDAgOiA2KSk7CiAgICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gJ3NjYWxlJykgewogICAgICAgIHVuaXQgPSAnJzsKICAgICAgICB0cmFuc2Zvcm1GbiA9IChzdG9wKSA9PgogICAgICAgIGdldFVuaXQoW3N0b3BdKSA/IHRvUHgoc3RvcCwgJ3dpZHRoJywgZWwsIHRydWUpIC8gZWwub2Zmc2V0V2lkdGggOiBzdG9wOwogICAgICB9CgogICAgICBpZiAoc3RvcHMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgc3RvcHMudW5zaGlmdChwcm9wID09PSAnc2NhbGUnID8gMSA6IDApOwogICAgICB9CgogICAgICBzdG9wcyA9IHBhcnNlU3RvcHMoc3RvcHMsIHRyYW5zZm9ybUZuKTsKCiAgICAgIHJldHVybiAoY3NzLCBwZXJjZW50KSA9PiB7CiAgICAgICAgY3NzLnRyYW5zZm9ybSArPSAiICIgKyBwcm9wICsgIigiICsgZ2V0VmFsdWUoc3RvcHMsIHBlcmNlbnQpICsgdW5pdCArICIpIjsKICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBjb2xvckZuKHByb3AsIGVsLCBzdG9wcykgewogICAgICBpZiAoc3RvcHMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgc3RvcHMudW5zaGlmdChnZXRDc3NWYWx1ZShlbCwgcHJvcCwgJycpKTsKICAgICAgfQoKICAgICAgc3RvcHMgPSBwYXJzZVN0b3BzKHN0b3BzLCAoc3RvcCkgPT4gcGFyc2VDb2xvcihlbCwgc3RvcCkpOwoKICAgICAgcmV0dXJuIChjc3MsIHBlcmNlbnQpID0+IHsKICAgICAgICBjb25zdCBbc3RhcnQsIGVuZCwgcF0gPSBnZXRTdG9wKHN0b3BzLCBwZXJjZW50KTsKICAgICAgICBjb25zdCB2YWx1ZSA9IHN0YXJ0LgogICAgICAgIG1hcCgodmFsdWUsIGkpID0+IHsKICAgICAgICAgIHZhbHVlICs9IHAgKiAoZW5kW2ldIC0gdmFsdWUpOwogICAgICAgICAgcmV0dXJuIGkgPT09IDMgPyB0b0Zsb2F0KHZhbHVlKSA6IHBhcnNlSW50KHZhbHVlLCAxMCk7CiAgICAgICAgfSkuCiAgICAgICAgam9pbignLCcpOwogICAgICAgIGNzc1twcm9wXSA9ICJyZ2JhKCIgKyB2YWx1ZSArICIpIjsKICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBwYXJzZUNvbG9yKGVsLCBjb2xvcikgewogICAgICByZXR1cm4gZ2V0Q3NzVmFsdWUoZWwsICdjb2xvcicsIGNvbG9yKS4KICAgICAgc3BsaXQoL1soKSxdL2cpLgogICAgICBzbGljZSgxLCAtMSkuCiAgICAgIGNvbmNhdCgxKS4KICAgICAgc2xpY2UoMCwgNCkuCiAgICAgIG1hcCh0b0Zsb2F0KTsKICAgIH0KCiAgICBmdW5jdGlvbiBmaWx0ZXJGbihwcm9wLCBlbCwgc3RvcHMpIHsKICAgICAgaWYgKHN0b3BzLmxlbmd0aCA9PT0gMSkgewogICAgICAgIHN0b3BzLnVuc2hpZnQoMCk7CiAgICAgIH0KCiAgICAgIGNvbnN0IHVuaXQgPSBnZXRVbml0KHN0b3BzKSB8fCB7IGJsdXI6ICdweCcsIGh1ZTogJ2RlZycgfVtwcm9wXSB8fCAnJSc7CiAgICAgIHByb3AgPSB7IGZvcGFjaXR5OiAnb3BhY2l0eScsIGh1ZTogJ2h1ZS1yb3RhdGUnIH1bcHJvcF0gfHwgcHJvcDsKICAgICAgc3RvcHMgPSBwYXJzZVN0b3BzKHN0b3BzKTsKCiAgICAgIHJldHVybiAoY3NzLCBwZXJjZW50KSA9PiB7CiAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRWYWx1ZShzdG9wcywgcGVyY2VudCk7CiAgICAgICAgY3NzLmZpbHRlciArPSAiICIgKyBwcm9wICsgIigiICsgKHZhbHVlICsgdW5pdCkgKyAiKSI7CiAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gY3NzUHJvcEZuKHByb3AsIGVsLCBzdG9wcykgewogICAgICBpZiAoc3RvcHMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgc3RvcHMudW5zaGlmdChnZXRDc3NWYWx1ZShlbCwgcHJvcCwgJycpKTsKICAgICAgfQoKICAgICAgc3RvcHMgPSBwYXJzZVN0b3BzKHN0b3BzKTsKCiAgICAgIHJldHVybiAoY3NzLCBwZXJjZW50KSA9PiB7CiAgICAgICAgY3NzW3Byb3BdID0gZ2V0VmFsdWUoc3RvcHMsIHBlcmNlbnQpOwogICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIHN0cm9rZUZuKHByb3AsIGVsLCBzdG9wcykgewogICAgICBpZiAoc3RvcHMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgc3RvcHMudW5zaGlmdCgwKTsKICAgICAgfQoKICAgICAgY29uc3QgdW5pdCA9IGdldFVuaXQoc3RvcHMpOwogICAgICBjb25zdCBsZW5ndGggPSBnZXRNYXhQYXRoTGVuZ3RoKGVsKTsKICAgICAgc3RvcHMgPSBwYXJzZVN0b3BzKHN0b3BzLnJldmVyc2UoKSwgKHN0b3ApID0+IHsKICAgICAgICBzdG9wID0gdG9GbG9hdChzdG9wKTsKICAgICAgICByZXR1cm4gdW5pdCA9PT0gJyUnID8gc3RvcCAqIGxlbmd0aCAvIDEwMCA6IHN0b3A7CiAgICAgIH0pOwoKICAgICAgaWYgKCFzdG9wcy5zb21lKChfcmVmKSA9PiB7bGV0IFt2YWx1ZV0gPSBfcmVmO3JldHVybiB2YWx1ZTt9KSkgewogICAgICAgIHJldHVybiBub29wOwogICAgICB9CgogICAgICBjc3MoZWwsICdzdHJva2VEYXNoYXJyYXknLCBsZW5ndGgpOwoKICAgICAgcmV0dXJuIChjc3MsIHBlcmNlbnQpID0+IHsKICAgICAgICBjc3Muc3Ryb2tlRGFzaG9mZnNldCA9IGdldFZhbHVlKHN0b3BzLCBwZXJjZW50KTsKICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBiYWNrZ3JvdW5kRm4ocHJvcCwgZWwsIHN0b3BzLCBwcm9wcykgewogICAgICBpZiAoc3RvcHMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgc3RvcHMudW5zaGlmdCgwKTsKICAgICAgfQoKICAgICAgY29uc3QgYXR0ciA9IHByb3AgPT09ICdiZ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnOwogICAgICBwcm9wc1twcm9wXSA9IHBhcnNlU3RvcHMoc3RvcHMsIChzdG9wKSA9PiB0b1B4KHN0b3AsIGF0dHIsIGVsKSk7CgogICAgICBjb25zdCBiZ1Byb3BzID0gWydiZ3gnLCAnYmd5J10uZmlsdGVyKChwcm9wKSA9PiBwcm9wIGluIHByb3BzKTsKICAgICAgaWYgKGJnUHJvcHMubGVuZ3RoID09PSAyICYmIHByb3AgPT09ICdiZ3gnKSB7CiAgICAgICAgcmV0dXJuIG5vb3A7CiAgICAgIH0KCiAgICAgIGlmIChnZXRDc3NWYWx1ZShlbCwgJ2JhY2tncm91bmRTaXplJywgJycpID09PSAnY292ZXInKSB7CiAgICAgICAgcmV0dXJuIGJhY2tncm91bmRDb3ZlckZuKHByb3AsIGVsLCBzdG9wcywgcHJvcHMpOwogICAgICB9CgogICAgICBjb25zdCBwb3NpdGlvbnMgPSB7fTsKICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGJnUHJvcHMpIHsKICAgICAgICBwb3NpdGlvbnNbcHJvcF0gPSBnZXRCYWNrZ3JvdW5kUG9zKGVsLCBwcm9wKTsKICAgICAgfQoKICAgICAgcmV0dXJuIHNldEJhY2tncm91bmRQb3NGbihiZ1Byb3BzLCBwb3NpdGlvbnMsIHByb3BzKTsKICAgIH0KCiAgICBmdW5jdGlvbiBiYWNrZ3JvdW5kQ292ZXJGbihwcm9wLCBlbCwgc3RvcHMsIHByb3BzKSB7CiAgICAgIGNvbnN0IGRpbUltYWdlID0gZ2V0QmFja2dyb3VuZEltYWdlRGltZW5zaW9ucyhlbCk7CgogICAgICBpZiAoIWRpbUltYWdlLndpZHRoKSB7CiAgICAgICAgcmV0dXJuIG5vb3A7CiAgICAgIH0KCiAgICAgIGNvbnN0IGRpbUVsID0gewogICAgICAgIHdpZHRoOiBlbC5vZmZzZXRXaWR0aCwKICAgICAgICBoZWlnaHQ6IGVsLm9mZnNldEhlaWdodCB9OwoKCiAgICAgIGNvbnN0IGJnUHJvcHMgPSBbJ2JneCcsICdiZ3knXS5maWx0ZXIoKHByb3ApID0+IHByb3AgaW4gcHJvcHMpOwoKICAgICAgY29uc3QgcG9zaXRpb25zID0ge307CiAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBiZ1Byb3BzKSB7CiAgICAgICAgY29uc3QgdmFsdWVzID0gcHJvcHNbcHJvcF0ubWFwKChfcmVmMikgPT4ge2xldCBbdmFsdWVdID0gX3JlZjI7cmV0dXJuIHZhbHVlO30pOwogICAgICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKC4uLnZhbHVlcyk7CiAgICAgICAgY29uc3QgbWF4ID0gTWF0aC5tYXgoLi4udmFsdWVzKTsKICAgICAgICBjb25zdCBkb3duID0gdmFsdWVzLmluZGV4T2YobWluKSA8IHZhbHVlcy5pbmRleE9mKG1heCk7CiAgICAgICAgY29uc3QgZGlmZiA9IG1heCAtIG1pbjsKCiAgICAgICAgcG9zaXRpb25zW3Byb3BdID0gKGRvd24gPyAtZGlmZiA6IDApIC0gKGRvd24gPyBtaW4gOiBtYXgpICsgInB4IjsKICAgICAgICBkaW1FbFtwcm9wID09PSAnYmd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJ10gKz0gZGlmZjsKICAgICAgfQoKICAgICAgY29uc3QgZGltID0gRGltZW5zaW9ucy5jb3ZlcihkaW1JbWFnZSwgZGltRWwpOwoKICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGJnUHJvcHMpIHsKICAgICAgICBjb25zdCBhdHRyID0gcHJvcCA9PT0gJ2JneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7CiAgICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBkaW1bYXR0cl0gLSBkaW1FbFthdHRyXTsKICAgICAgICBwb3NpdGlvbnNbcHJvcF0gPSAibWF4KCIgKyBnZXRCYWNrZ3JvdW5kUG9zKGVsLCBwcm9wKSArICIsLSIgKyBvdmVyZmxvdyArICJweCkgKyAiICsgcG9zaXRpb25zW3Byb3BdOwogICAgICB9CgogICAgICBjb25zdCBmbiA9IHNldEJhY2tncm91bmRQb3NGbihiZ1Byb3BzLCBwb3NpdGlvbnMsIHByb3BzKTsKICAgICAgcmV0dXJuIChjc3MsIHBlcmNlbnQpID0+IHsKICAgICAgICBmbihjc3MsIHBlcmNlbnQpOwogICAgICAgIGNzcy5iYWNrZ3JvdW5kU2l6ZSA9IGRpbS53aWR0aCArICJweCAiICsgZGltLmhlaWdodCArICJweCI7CiAgICAgICAgY3NzLmJhY2tncm91bmRSZXBlYXQgPSAnbm8tcmVwZWF0JzsKICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRCYWNrZ3JvdW5kUG9zKGVsLCBwcm9wKSB7CiAgICAgIHJldHVybiBnZXRDc3NWYWx1ZShlbCwgImJhY2tncm91bmQtcG9zaXRpb24tIiArIHByb3Auc3Vic3RyKC0xKSwgJycpOwogICAgfQoKICAgIGZ1bmN0aW9uIHNldEJhY2tncm91bmRQb3NGbihiZ1Byb3BzLCBwb3NpdGlvbnMsIHByb3BzKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiAoY3NzLCBwZXJjZW50KSB7CiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGJnUHJvcHMpIHsKICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0VmFsdWUocHJvcHNbcHJvcF0sIHBlcmNlbnQpOwogICAgICAgICAgY3NzWyJiYWNrZ3JvdW5kLXBvc2l0aW9uLSIgKyBwcm9wLnN1YnN0cigtMSldID0gImNhbGMoIiArIHBvc2l0aW9uc1twcm9wXSArICIgKyAiICsgdmFsdWUgKyAicHgpIjsKICAgICAgICB9CiAgICAgIH07CiAgICB9CgogICAgY29uc3QgZGltZW5zaW9ucyA9IHt9OwogICAgZnVuY3Rpb24gZ2V0QmFja2dyb3VuZEltYWdlRGltZW5zaW9ucyhlbCkgewogICAgICBjb25zdCBzcmMgPSBjc3MoZWwsICdiYWNrZ3JvdW5kSW1hZ2UnKS5yZXBsYWNlKC9ebm9uZXx1cmxcKFsiJ10/KC4rPylbIiddP1wpJC8sICckMScpOwoKICAgICAgaWYgKGRpbWVuc2lvbnNbc3JjXSkgewogICAgICAgIHJldHVybiBkaW1lbnNpb25zW3NyY107CiAgICAgIH0KCiAgICAgIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7CiAgICAgIGlmIChzcmMpIHsKICAgICAgICBpbWFnZS5zcmMgPSBzcmM7CgogICAgICAgIGlmICghaW1hZ2UubmF0dXJhbFdpZHRoKSB7CiAgICAgICAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7CiAgICAgICAgICAgIGRpbWVuc2lvbnNbc3JjXSA9IHRvRGltZW5zaW9ucyhpbWFnZSk7CiAgICAgICAgICAgIHRyaWdnZXIoZWwsIGNyZWF0ZUV2ZW50KCdsb2FkJywgZmFsc2UpKTsKICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gdG9EaW1lbnNpb25zKGltYWdlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiBkaW1lbnNpb25zW3NyY10gPSB0b0RpbWVuc2lvbnMoaW1hZ2UpOwogICAgfQoKICAgIGZ1bmN0aW9uIHRvRGltZW5zaW9ucyhpbWFnZSkgewogICAgICByZXR1cm4gewogICAgICAgIHdpZHRoOiBpbWFnZS5uYXR1cmFsV2lkdGgsCiAgICAgICAgaGVpZ2h0OiBpbWFnZS5uYXR1cmFsSGVpZ2h0IH07CgogICAgfQoKICAgIGZ1bmN0aW9uIHBhcnNlU3RvcHMoc3RvcHMsIGZuKSB7aWYgKGZuID09PSB2b2lkIDApIHtmbiA9IHRvRmxvYXQ7fQogICAgICBjb25zdCByZXN1bHQgPSBbXTsKICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHN0b3BzOwogICAgICBsZXQgbnVsbEluZGV4ID0gMDsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGxldCBbdmFsdWUsIHBlcmNlbnRdID0gaXNTdHJpbmcoc3RvcHNbaV0pID8gc3RvcHNbaV0udHJpbSgpLnNwbGl0KCcgJykgOiBbc3RvcHNbaV1dOwogICAgICAgIHZhbHVlID0gZm4odmFsdWUpOwogICAgICAgIHBlcmNlbnQgPSBwZXJjZW50ID8gdG9GbG9hdChwZXJjZW50KSAvIDEwMCA6IG51bGw7CgogICAgICAgIGlmIChpID09PSAwKSB7CiAgICAgICAgICBpZiAocGVyY2VudCA9PT0gbnVsbCkgewogICAgICAgICAgICBwZXJjZW50ID0gMDsKICAgICAgICAgIH0gZWxzZSBpZiAocGVyY2VudCkgewogICAgICAgICAgICByZXN1bHQucHVzaChbdmFsdWUsIDBdKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGkgPT09IGxlbmd0aCAtIDEpIHsKICAgICAgICAgIGlmIChwZXJjZW50ID09PSBudWxsKSB7CiAgICAgICAgICAgIHBlcmNlbnQgPSAxOwogICAgICAgICAgfSBlbHNlIGlmIChwZXJjZW50ICE9PSAxKSB7CiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFt2YWx1ZSwgcGVyY2VudF0pOwogICAgICAgICAgICBwZXJjZW50ID0gMTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJlc3VsdC5wdXNoKFt2YWx1ZSwgcGVyY2VudF0pOwoKICAgICAgICBpZiAocGVyY2VudCA9PT0gbnVsbCkgewogICAgICAgICAgbnVsbEluZGV4Kys7CiAgICAgICAgfSBlbHNlIGlmIChudWxsSW5kZXgpIHsKICAgICAgICAgIGNvbnN0IGxlZnRQZXJjZW50ID0gcmVzdWx0W2kgLSBudWxsSW5kZXggLSAxXVsxXTsKICAgICAgICAgIGNvbnN0IHAgPSAocGVyY2VudCAtIGxlZnRQZXJjZW50KSAvIChudWxsSW5kZXggKyAxKTsKICAgICAgICAgIGZvciAobGV0IGogPSBudWxsSW5kZXg7IGogPiAwOyBqLS0pIHsKICAgICAgICAgICAgcmVzdWx0W2kgLSBqXVsxXSA9IGxlZnRQZXJjZW50ICsgcCAqIChudWxsSW5kZXggLSBqICsgMSk7CiAgICAgICAgICB9CgogICAgICAgICAgbnVsbEluZGV4ID0gMDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0U3RvcChzdG9wcywgcGVyY2VudCkgewogICAgICBjb25zdCBpbmRleCA9IGZpbmRJbmRleChzdG9wcy5zbGljZSgxKSwgKF9yZWYzKSA9PiB7bGV0IFssIHRhcmdldFBlcmNlbnRdID0gX3JlZjM7cmV0dXJuIHBlcmNlbnQgPD0gdGFyZ2V0UGVyY2VudDt9KSArIDE7CiAgICAgIHJldHVybiBbCiAgICAgIHN0b3BzW2luZGV4IC0gMV1bMF0sCiAgICAgIHN0b3BzW2luZGV4XVswXSwKICAgICAgKHBlcmNlbnQgLSBzdG9wc1tpbmRleCAtIDFdWzFdKSAvIChzdG9wc1tpbmRleF1bMV0gLSBzdG9wc1tpbmRleCAtIDFdWzFdKV07CgogICAgfQoKICAgIGZ1bmN0aW9uIGdldFZhbHVlKHN0b3BzLCBwZXJjZW50KSB7CiAgICAgIGNvbnN0IFtzdGFydCwgZW5kLCBwXSA9IGdldFN0b3Aoc3RvcHMsIHBlcmNlbnQpOwogICAgICByZXR1cm4gaXNOdW1iZXIoc3RhcnQpID8gc3RhcnQgKyBNYXRoLmFicyhzdGFydCAtIGVuZCkgKiBwICogKHN0YXJ0IDwgZW5kID8gMSA6IC0xKSA6ICtlbmQ7CiAgICB9CgogICAgY29uc3QgdW5pdFJlID0gL14tP1xkKyhcUyopLzsKICAgIGZ1bmN0aW9uIGdldFVuaXQoc3RvcHMsIGRlZmF1bHRVbml0KSB7CiAgICAgIGZvciAoY29uc3Qgc3RvcCBvZiBzdG9wcykgewogICAgICAgIGNvbnN0IG1hdGNoID0gc3RvcC5tYXRjaCA9PSBudWxsID8gdm9pZCAwIDogc3RvcC5tYXRjaCh1bml0UmUpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgcmV0dXJuIG1hdGNoWzFdOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZGVmYXVsdFVuaXQ7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0Q3NzVmFsdWUoZWwsIHByb3AsIHZhbHVlKSB7CiAgICAgIGNvbnN0IHByZXYgPSBlbC5zdHlsZVtwcm9wXTsKICAgICAgY29uc3QgdmFsID0gY3NzKGNzcyhlbCwgcHJvcCwgdmFsdWUpLCBwcm9wKTsKICAgICAgZWwuc3R5bGVbcHJvcF0gPSBwcmV2OwogICAgICByZXR1cm4gdmFsOwogICAgfQoKICAgIGZ1bmN0aW9uIGZpbGxPYmplY3Qoa2V5cywgdmFsdWUpIHsKICAgICAgcmV0dXJuIGtleXMucmVkdWNlKChkYXRhLCBwcm9wKSA9PiB7CiAgICAgICAgZGF0YVtwcm9wXSA9IHZhbHVlOwogICAgICAgIHJldHVybiBkYXRhOwogICAgICB9LCB7fSk7CiAgICB9CgogICAgdmFyIHBhcmFsbGF4ID0gewogICAgICBtaXhpbnM6IFtQYXJhbGxheCwgUmVzaXplLCBTY3JvbGxdLAoKICAgICAgcHJvcHM6IHsKICAgICAgICB0YXJnZXQ6IFN0cmluZywKICAgICAgICB2aWV3cG9ydDogTnVtYmVyLCAvLyBEZXByZWNhdGVkCiAgICAgICAgZWFzaW5nOiBOdW1iZXIsCiAgICAgICAgc3RhcnQ6IFN0cmluZywKICAgICAgICBlbmQ6IFN0cmluZyB9LAoKCiAgICAgIGRhdGE6IHsKICAgICAgICB0YXJnZXQ6IGZhbHNlLAogICAgICAgIHZpZXdwb3J0OiAxLAogICAgICAgIGVhc2luZzogMSwKICAgICAgICBzdGFydDogMCwKICAgICAgICBlbmQ6IDAgfSwKCgogICAgICBjb21wdXRlZDogewogICAgICAgIHRhcmdldChfcmVmLCAkZWwpIHtsZXQgeyB0YXJnZXQgfSA9IF9yZWY7CiAgICAgICAgICByZXR1cm4gZ2V0T2Zmc2V0RWxlbWVudCh0YXJnZXQgJiYgcXVlcnkodGFyZ2V0LCAkZWwpIHx8ICRlbCk7CiAgICAgICAgfSwKCiAgICAgICAgc3RhcnQoX3JlZjIpIHtsZXQgeyBzdGFydCB9ID0gX3JlZjI7CiAgICAgICAgICByZXR1cm4gdG9QeChzdGFydCwgJ2hlaWdodCcsIHRoaXMudGFyZ2V0LCB0cnVlKTsKICAgICAgICB9LAoKICAgICAgICBlbmQoX3JlZjMpIHtsZXQgeyBlbmQsIHZpZXdwb3J0IH0gPSBfcmVmMzsKICAgICAgICAgIHJldHVybiB0b1B4KAogICAgICAgICAgZW5kIHx8ICh2aWV3cG9ydCA9ICgxIC0gdmlld3BvcnQpICogMTAwKSAmJiB2aWV3cG9ydCArICJ2aCsiICsgdmlld3BvcnQgKyAiJSIsCiAgICAgICAgICAnaGVpZ2h0JywKICAgICAgICAgIHRoaXMudGFyZ2V0LAogICAgICAgICAgdHJ1ZSk7CgogICAgICAgIH0gfSwKCgogICAgICB1cGRhdGU6IHsKICAgICAgICByZWFkKF9yZWY0LCB0eXBlcykge2xldCB7IHBlcmNlbnQgfSA9IF9yZWY0OwogICAgICAgICAgaWYgKCF0eXBlcy5oYXMoJ3Njcm9sbCcpKSB7CiAgICAgICAgICAgIHBlcmNlbnQgPSBmYWxzZTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoIXRoaXMubWF0Y2hNZWRpYSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgY29uc3QgcHJldiA9IHBlcmNlbnQ7CiAgICAgICAgICBwZXJjZW50ID0gZWFzZShzY3JvbGxlZE92ZXIodGhpcy50YXJnZXQsIHRoaXMuc3RhcnQsIHRoaXMuZW5kKSwgdGhpcy5lYXNpbmcpOwoKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHBlcmNlbnQsCiAgICAgICAgICAgIHN0eWxlOiBwcmV2ID09PSBwZXJjZW50ID8gZmFsc2UgOiB0aGlzLmdldENzcyhwZXJjZW50KSB9OwoKICAgICAgICB9LAoKICAgICAgICB3cml0ZShfcmVmNSkge2xldCB7IHN0eWxlIH0gPSBfcmVmNTsKICAgICAgICAgIGlmICghdGhpcy5tYXRjaE1lZGlhKSB7CiAgICAgICAgICAgIHRoaXMucmVzZXQoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIHN0eWxlICYmIGNzcyh0aGlzLiRlbCwgc3R5bGUpOwogICAgICAgIH0sCgogICAgICAgIGV2ZW50czogWydzY3JvbGwnLCAncmVzaXplJ10gfSB9OwoKCgogICAgLyoKICAgICAqIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2dyZS8xNjUwMjk0P3Blcm1hbGlua19jb21tZW50X2lkPTM0Nzc0MjUjZ2lzdGNvbW1lbnQtMzQ3NzQyNQogICAgICoKICAgICAqIGxpbmVhcjogMAogICAgICogZWFzZUluU2luZTogMC41CiAgICAgKiBlYXNlT3V0U2luZTogLTAuNQogICAgICogZWFzZUluUXVhZDogMQogICAgICogZWFzZU91dFF1YWQ6IC0xCiAgICAgKiBlYXNlSW5DdWJpYzogMgogICAgICogZWFzZU91dEN1YmljOiAtMgogICAgICogZWFzZUluUXVhcnQ6IDMKICAgICAqIGVhc2VPdXRRdWFydDogLTMKICAgICAqIGVhc2VJblF1aW50OiA0CiAgICAgKiBlYXNlT3V0UXVpbnQ6IC00CiAgICAgKi8KICAgIGZ1bmN0aW9uIGVhc2UocGVyY2VudCwgZWFzaW5nKSB7CiAgICAgIHJldHVybiBlYXNpbmcgPj0gMCA/IE1hdGgucG93KHBlcmNlbnQsIGVhc2luZyArIDEpIDogMSAtIE1hdGgucG93KDEgLSBwZXJjZW50LCAxIC0gZWFzaW5nKTsKICAgIH0KCiAgICAvLyBTVkcgZWxlbWVudHMgZG8gbm90IGluaGVyaXQgZnJvbSBIVE1MRWxlbWVudAogICAgZnVuY3Rpb24gZ2V0T2Zmc2V0RWxlbWVudChlbCkgewogICAgICByZXR1cm4gZWwgPyAnb2Zmc2V0VG9wJyBpbiBlbCA/IGVsIDogZ2V0T2Zmc2V0RWxlbWVudChwYXJlbnQoZWwpKSA6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKICAgIH0KCiAgICB2YXIgU2xpZGVyUmVhY3RpdmUgPSB7CiAgICAgIHVwZGF0ZTogewogICAgICAgIHdyaXRlKCkgewogICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIHx8IHRoaXMuZHJhZ2dpbmcpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRWYWxpZEluZGV4KHRoaXMuaW5kZXgpOwoKICAgICAgICAgIGlmICghfnRoaXMucHJldkluZGV4IHx8IHRoaXMuaW5kZXggIT09IGluZGV4KSB7CiAgICAgICAgICAgIHRoaXMuc2hvdyhpbmRleCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgZXZlbnRzOiBbJ3Jlc2l6ZSddIH0gfTsKCiAgICB2YXIgU2xpZGVyUHJlbG9hZCA9IHsKICAgICAgbWl4aW5zOiBbTGF6eWxvYWRdLAoKICAgICAgY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMubGF6eWxvYWQodGhpcy5zbGlkZXMsIHRoaXMuZ2V0QWRqYWNlbnRTbGlkZXMpOwogICAgICB9IH07CgogICAgZnVuY3Rpb24gVHJhbnNpdGlvbmVyIChwcmV2LCBuZXh0LCBkaXIsIF9yZWYpIHtsZXQgeyBjZW50ZXIsIGVhc2luZywgbGlzdCB9ID0gX3JlZjsKICAgICAgY29uc3QgZGVmZXJyZWQgPSBuZXcgRGVmZXJyZWQoKTsKCiAgICAgIGNvbnN0IGZyb20gPSBwcmV2ID8KICAgICAgZ2V0TGVmdChwcmV2LCBsaXN0LCBjZW50ZXIpIDoKICAgICAgZ2V0TGVmdChuZXh0LCBsaXN0LCBjZW50ZXIpICsgZGltZW5zaW9ucyQxKG5leHQpLndpZHRoICogZGlyOwogICAgICBjb25zdCB0byA9IG5leHQgPwogICAgICBnZXRMZWZ0KG5leHQsIGxpc3QsIGNlbnRlcikgOgogICAgICBmcm9tICsgZGltZW5zaW9ucyQxKHByZXYpLndpZHRoICogZGlyICogKGlzUnRsID8gLTEgOiAxKTsKCiAgICAgIHJldHVybiB7CiAgICAgICAgZGlyLAoKICAgICAgICBzaG93KGR1cmF0aW9uLCBwZXJjZW50LCBsaW5lYXIpIHtpZiAocGVyY2VudCA9PT0gdm9pZCAwKSB7cGVyY2VudCA9IDA7fQogICAgICAgICAgY29uc3QgdGltaW5nID0gbGluZWFyID8gJ2xpbmVhcicgOiBlYXNpbmc7CiAgICAgICAgICBkdXJhdGlvbiAtPSBNYXRoLnJvdW5kKGR1cmF0aW9uICogY2xhbXAocGVyY2VudCwgLTEsIDEpKTsKCiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZShwZXJjZW50KTsKCiAgICAgICAgICBwZXJjZW50ID0gcHJldiA/IHBlcmNlbnQgOiBjbGFtcChwZXJjZW50LCAwLCAxKTsKICAgICAgICAgIHRyaWdnZXJVcGRhdGUodGhpcy5nZXRJdGVtSW4oKSwgJ2l0ZW1pbicsIHsgcGVyY2VudCwgZHVyYXRpb24sIHRpbWluZywgZGlyIH0pOwogICAgICAgICAgcHJldiAmJgogICAgICAgICAgdHJpZ2dlclVwZGF0ZSh0aGlzLmdldEl0ZW1Jbih0cnVlKSwgJ2l0ZW1vdXQnLCB7CiAgICAgICAgICAgIHBlcmNlbnQ6IDEgLSBwZXJjZW50LAogICAgICAgICAgICBkdXJhdGlvbiwKICAgICAgICAgICAgdGltaW5nLAogICAgICAgICAgICBkaXIgfSk7CgoKICAgICAgICAgIFRyYW5zaXRpb24uc3RhcnQoCiAgICAgICAgICBsaXN0LAogICAgICAgICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtdG8gKiAoaXNSdGwgPyAtMSA6IDEpLCAncHgnKSB9LAogICAgICAgICAgZHVyYXRpb24sCiAgICAgICAgICB0aW1pbmcpLgogICAgICAgICAgdGhlbihkZWZlcnJlZC5yZXNvbHZlLCBub29wKTsKCiAgICAgICAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZTsKICAgICAgICB9LAoKICAgICAgICBjYW5jZWwoKSB7CiAgICAgICAgICBUcmFuc2l0aW9uLmNhbmNlbChsaXN0KTsKICAgICAgICB9LAoKICAgICAgICByZXNldCgpIHsKICAgICAgICAgIGNzcyhsaXN0LCAndHJhbnNmb3JtJywgJycpOwogICAgICAgIH0sCgogICAgICAgIGZvcndhcmQoZHVyYXRpb24sIHBlcmNlbnQpIHtpZiAocGVyY2VudCA9PT0gdm9pZCAwKSB7cGVyY2VudCA9IHRoaXMucGVyY2VudCgpO30KICAgICAgICAgIFRyYW5zaXRpb24uY2FuY2VsKGxpc3QpOwogICAgICAgICAgcmV0dXJuIHRoaXMuc2hvdyhkdXJhdGlvbiwgcGVyY2VudCwgdHJ1ZSk7CiAgICAgICAgfSwKCiAgICAgICAgdHJhbnNsYXRlKHBlcmNlbnQpIHsKICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gdGhpcy5nZXREaXN0YW5jZSgpICogZGlyICogKGlzUnRsID8gLTEgOiAxKTsKCiAgICAgICAgICBjc3MoCiAgICAgICAgICBsaXN0LAogICAgICAgICAgJ3RyYW5zZm9ybScsCiAgICAgICAgICB0cmFuc2xhdGUoCiAgICAgICAgICBjbGFtcCgKICAgICAgICAgIC10byArIChkaXN0YW5jZSAtIGRpc3RhbmNlICogcGVyY2VudCksCiAgICAgICAgICAtZ2V0V2lkdGgobGlzdCksCiAgICAgICAgICBkaW1lbnNpb25zJDEobGlzdCkud2lkdGgpICogKAogICAgICAgICAgaXNSdGwgPyAtMSA6IDEpLAogICAgICAgICAgJ3B4JykpOwoKCgogICAgICAgICAgY29uc3QgYWN0aXZlcyA9IHRoaXMuZ2V0QWN0aXZlcygpOwogICAgICAgICAgY29uc3QgaXRlbUluID0gdGhpcy5nZXRJdGVtSW4oKTsKICAgICAgICAgIGNvbnN0IGl0ZW1PdXQgPSB0aGlzLmdldEl0ZW1Jbih0cnVlKTsKCiAgICAgICAgICBwZXJjZW50ID0gcHJldiA/IGNsYW1wKHBlcmNlbnQsIC0xLCAxKSA6IDA7CgogICAgICAgICAgZm9yIChjb25zdCBzbGlkZSBvZiBjaGlsZHJlbihsaXN0KSkgewogICAgICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IGluY2x1ZGVzKGFjdGl2ZXMsIHNsaWRlKTsKICAgICAgICAgICAgY29uc3QgaXNJbiA9IHNsaWRlID09PSBpdGVtSW47CiAgICAgICAgICAgIGNvbnN0IGlzT3V0ID0gc2xpZGUgPT09IGl0ZW1PdXQ7CiAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZUluID0KICAgICAgICAgICAgaXNJbiB8fAogICAgICAgICAgICAhaXNPdXQgJiYgKAogICAgICAgICAgICBpc0FjdGl2ZSB8fAogICAgICAgICAgICBkaXIgKiAoaXNSdGwgPyAtMSA6IDEpID09PSAtMSBeCiAgICAgICAgICAgIGdldEVsTGVmdChzbGlkZSwgbGlzdCkgPiBnZXRFbExlZnQocHJldiB8fCBuZXh0KSk7CgogICAgICAgICAgICB0cmlnZ2VyVXBkYXRlKHNsaWRlLCAiaXRlbXRyYW5zbGF0ZSIgKyAodHJhbnNsYXRlSW4gPyAnaW4nIDogJ291dCcpLCB7CiAgICAgICAgICAgICAgZGlyLAogICAgICAgICAgICAgIHBlcmNlbnQ6IGlzT3V0ID8gMSAtIHBlcmNlbnQgOiBpc0luID8gcGVyY2VudCA6IGlzQWN0aXZlID8gMSA6IDAgfSk7CgogICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIHBlcmNlbnQoKSB7CiAgICAgICAgICByZXR1cm4gTWF0aC5hYnMoCiAgICAgICAgICAoY3NzKGxpc3QsICd0cmFuc2Zvcm0nKS5zcGxpdCgnLCcpWzRdICogKGlzUnRsID8gLTEgOiAxKSArIGZyb20pIC8gKHRvIC0gZnJvbSkpOwoKICAgICAgICB9LAoKICAgICAgICBnZXREaXN0YW5jZSgpIHsKICAgICAgICAgIHJldHVybiBNYXRoLmFicyh0byAtIGZyb20pOwogICAgICAgIH0sCgogICAgICAgIGdldEl0ZW1JbihvdXQpIHtpZiAob3V0ID09PSB2b2lkIDApIHtvdXQgPSBmYWxzZTt9CiAgICAgICAgICBsZXQgYWN0aXZlcyA9IHRoaXMuZ2V0QWN0aXZlcygpOwogICAgICAgICAgbGV0IG5leHRBY3RpdmVzID0gaW5WaWV3KGxpc3QsIGdldExlZnQobmV4dCB8fCBwcmV2LCBsaXN0LCBjZW50ZXIpKTsKCiAgICAgICAgICBpZiAob3V0KSB7CiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBhY3RpdmVzOwogICAgICAgICAgICBhY3RpdmVzID0gbmV4dEFjdGl2ZXM7CiAgICAgICAgICAgIG5leHRBY3RpdmVzID0gdGVtcDsKICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gbmV4dEFjdGl2ZXNbZmluZEluZGV4KG5leHRBY3RpdmVzLCAoZWwpID0+ICFpbmNsdWRlcyhhY3RpdmVzLCBlbCkpXTsKICAgICAgICB9LAoKICAgICAgICBnZXRBY3RpdmVzKCkgewogICAgICAgICAgcmV0dXJuIGluVmlldyhsaXN0LCBnZXRMZWZ0KHByZXYgfHwgbmV4dCwgbGlzdCwgY2VudGVyKSk7CiAgICAgICAgfSB9OwoKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRMZWZ0KGVsLCBsaXN0LCBjZW50ZXIpIHsKICAgICAgY29uc3QgbGVmdCA9IGdldEVsTGVmdChlbCwgbGlzdCk7CgogICAgICByZXR1cm4gY2VudGVyID8gbGVmdCAtIGNlbnRlckVsKGVsLCBsaXN0KSA6IE1hdGgubWluKGxlZnQsIGdldE1heChsaXN0KSk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TWF4KGxpc3QpIHsKICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIGdldFdpZHRoKGxpc3QpIC0gZGltZW5zaW9ucyQxKGxpc3QpLndpZHRoKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRXaWR0aChsaXN0KSB7CiAgICAgIHJldHVybiBjaGlsZHJlbihsaXN0KS5yZWR1Y2UoKHJpZ2h0LCBlbCkgPT4gZGltZW5zaW9ucyQxKGVsKS53aWR0aCArIHJpZ2h0LCAwKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjZW50ZXJFbChlbCwgbGlzdCkgewogICAgICByZXR1cm4gZGltZW5zaW9ucyQxKGxpc3QpLndpZHRoIC8gMiAtIGRpbWVuc2lvbnMkMShlbCkud2lkdGggLyAyOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldEVsTGVmdChlbCwgbGlzdCkgewogICAgICByZXR1cm4gKAogICAgICAgIGVsICYmCiAgICAgICAgKHBvc2l0aW9uKGVsKS5sZWZ0ICsgKGlzUnRsID8gZGltZW5zaW9ucyQxKGVsKS53aWR0aCAtIGRpbWVuc2lvbnMkMShsaXN0KS53aWR0aCA6IDApKSAqICgKICAgICAgICBpc1J0bCA/IC0xIDogMSkgfHwKICAgICAgICAwKTsKCiAgICB9CgogICAgZnVuY3Rpb24gaW5WaWV3KGxpc3QsIGxpc3RMZWZ0KSB7CiAgICAgIGxpc3RMZWZ0IC09IDE7CiAgICAgIGNvbnN0IGxpc3RXaWR0aCA9IGRpbWVuc2lvbnMkMShsaXN0KS53aWR0aDsKICAgICAgY29uc3QgbGlzdFJpZ2h0ID0gbGlzdExlZnQgKyBsaXN0V2lkdGggKyAyOwoKICAgICAgcmV0dXJuIGNoaWxkcmVuKGxpc3QpLmZpbHRlcigoc2xpZGUpID0+IHsKICAgICAgICBjb25zdCBzbGlkZUxlZnQgPSBnZXRFbExlZnQoc2xpZGUsIGxpc3QpOwogICAgICAgIGNvbnN0IHNsaWRlUmlnaHQgPSBzbGlkZUxlZnQgKyBNYXRoLm1pbihkaW1lbnNpb25zJDEoc2xpZGUpLndpZHRoLCBsaXN0V2lkdGgpOwoKICAgICAgICByZXR1cm4gc2xpZGVMZWZ0ID49IGxpc3RMZWZ0ICYmIHNsaWRlUmlnaHQgPD0gbGlzdFJpZ2h0OwogICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiB0cmlnZ2VyVXBkYXRlKGVsLCB0eXBlLCBkYXRhKSB7CiAgICAgIHRyaWdnZXIoZWwsIGNyZWF0ZUV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSwgZGF0YSkpOwogICAgfQoKICAgIHZhciBzbGlkZXIgPSB7CiAgICAgIG1peGluczogW0NsYXNzLCBTbGlkZXIsIFNsaWRlclJlYWN0aXZlLCBTbGlkZXJQcmVsb2FkXSwKCiAgICAgIHByb3BzOiB7CiAgICAgICAgY2VudGVyOiBCb29sZWFuLAogICAgICAgIHNldHM6IEJvb2xlYW4gfSwKCgogICAgICBkYXRhOiB7CiAgICAgICAgY2VudGVyOiBmYWxzZSwKICAgICAgICBzZXRzOiBmYWxzZSwKICAgICAgICBhdHRySXRlbTogJ3VrLXNsaWRlci1pdGVtJywKICAgICAgICBzZWxMaXN0OiAnLnVrLXNsaWRlci1pdGVtcycsCiAgICAgICAgc2VsTmF2OiAnLnVrLXNsaWRlci1uYXYnLAogICAgICAgIGNsc0NvbnRhaW5lcjogJ3VrLXNsaWRlci1jb250YWluZXInLAogICAgICAgIFRyYW5zaXRpb25lciB9LAoKCiAgICAgIGNvbXB1dGVkOiB7CiAgICAgICAgYXZnV2lkdGgoKSB7CiAgICAgICAgICByZXR1cm4gZ2V0V2lkdGgodGhpcy5saXN0KSAvIHRoaXMubGVuZ3RoOwogICAgICAgIH0sCgogICAgICAgIGZpbml0ZShfcmVmKSB7bGV0IHsgZmluaXRlIH0gPSBfcmVmOwogICAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgZmluaXRlIHx8CiAgICAgICAgICAgIE1hdGguY2VpbChnZXRXaWR0aCh0aGlzLmxpc3QpKSA8CiAgICAgICAgICAgIE1hdGgudHJ1bmMoZGltZW5zaW9ucyQxKHRoaXMubGlzdCkud2lkdGggKyBnZXRNYXhFbFdpZHRoKHRoaXMubGlzdCkgKyB0aGlzLmNlbnRlcikpOwoKICAgICAgICB9LAoKICAgICAgICBtYXhJbmRleCgpIHsKICAgICAgICAgIGlmICghdGhpcy5maW5pdGUgfHwgdGhpcy5jZW50ZXIgJiYgIXRoaXMuc2V0cykgewogICAgICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggLSAxOwogICAgICAgICAgfQoKICAgICAgICAgIGlmICh0aGlzLmNlbnRlcikgewogICAgICAgICAgICByZXR1cm4gbGFzdCh0aGlzLnNldHMpOwogICAgICAgICAgfQoKICAgICAgICAgIGxldCBsZnQgPSAwOwogICAgICAgICAgY29uc3QgbWF4ID0gZ2V0TWF4KHRoaXMubGlzdCk7CiAgICAgICAgICBjb25zdCBpbmRleCA9IGZpbmRJbmRleCh0aGlzLnNsaWRlcywgKGVsKSA9PiB7CiAgICAgICAgICAgIGlmIChsZnQgPj0gbWF4KSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxmdCArPSBkaW1lbnNpb25zJDEoZWwpLndpZHRoOwogICAgICAgICAgfSk7CgogICAgICAgICAgcmV0dXJuIH5pbmRleCA/IGluZGV4IDogdGhpcy5sZW5ndGggLSAxOwogICAgICAgIH0sCgogICAgICAgIHNldHMoX3JlZjIpIHtsZXQgeyBzZXRzOiBlbmFibGVkIH0gPSBfcmVmMjsKICAgICAgICAgIGlmICghZW5hYmxlZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgbGV0IGxlZnQgPSAwOwogICAgICAgICAgY29uc3Qgc2V0cyA9IFtdOwogICAgICAgICAgY29uc3Qgd2lkdGggPSBkaW1lbnNpb25zJDEodGhpcy5saXN0KS53aWR0aDsKICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zbGlkZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgY29uc3Qgc2xpZGVXaWR0aCA9IGRpbWVuc2lvbnMkMSh0aGlzLnNsaWRlc1tpXSkud2lkdGg7CgogICAgICAgICAgICBpZiAobGVmdCArIHNsaWRlV2lkdGggPiB3aWR0aCkgewogICAgICAgICAgICAgIGxlZnQgPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAodGhpcy5jZW50ZXIpIHsKICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgbGVmdCA8IHdpZHRoIC8gMiAmJgogICAgICAgICAgICAgIGxlZnQgKyBzbGlkZVdpZHRoICsgZGltZW5zaW9ucyQxKHRoaXMuc2xpZGVzWytpICsgMV0pLndpZHRoIC8gMiA+IHdpZHRoIC8gMikKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzZXRzLnB1c2goK2kpOwogICAgICAgICAgICAgICAgbGVmdCA9IHdpZHRoIC8gMiAtIHNsaWRlV2lkdGggLyAyOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0ID09PSAwKSB7CiAgICAgICAgICAgICAgc2V0cy5wdXNoKE1hdGgubWluKCtpLCB0aGlzLm1heEluZGV4KSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlZnQgKz0gc2xpZGVXaWR0aDsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoc2V0cy5sZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuIHNldHM7CiAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgdHJhbnNpdGlvbk9wdGlvbnMoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBjZW50ZXI6IHRoaXMuY2VudGVyLAogICAgICAgICAgICBsaXN0OiB0aGlzLmxpc3QgfTsKCiAgICAgICAgfSB9LAoKCiAgICAgIGNvbm5lY3RlZCgpIHsKICAgICAgICB0b2dnbGVDbGFzcyh0aGlzLiRlbCwgdGhpcy5jbHNDb250YWluZXIsICEkKCIuIiArIHRoaXMuY2xzQ29udGFpbmVyLCB0aGlzLiRlbCkpOwogICAgICB9LAoKICAgICAgdXBkYXRlOiB7CiAgICAgICAgd3JpdGUoKSB7CiAgICAgICAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMubmF2SXRlbXMpIHsKICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0b051bWJlcihkYXRhKGVsLCB0aGlzLmF0dHJJdGVtKSk7CiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICBlbC5oaWRkZW4gPQogICAgICAgICAgICAgICF0aGlzLm1heEluZGV4IHx8CiAgICAgICAgICAgICAgaW5kZXggPiB0aGlzLm1heEluZGV4IHx8CiAgICAgICAgICAgICAgdGhpcy5zZXRzICYmICFpbmNsdWRlcyh0aGlzLnNldHMsIGluZGV4KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIGlmICh0aGlzLmxlbmd0aCAmJiAhdGhpcy5kcmFnZ2luZyAmJiAhdGhpcy5zdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgdGhpcy5yZW9yZGVyKCk7CiAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZSgxKTsKICAgICAgICAgIH0KCiAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZUNsYXNzZXMoKTsKICAgICAgICB9LAoKICAgICAgICBldmVudHM6IFsncmVzaXplJ10gfSwKCgogICAgICBldmVudHM6IHsKICAgICAgICBiZWZvcmVpdGVtc2hvdyhlKSB7CiAgICAgICAgICBpZiAoCiAgICAgICAgICAhdGhpcy5kcmFnZ2luZyAmJgogICAgICAgICAgdGhpcy5zZXRzICYmCiAgICAgICAgICB0aGlzLnN0YWNrLmxlbmd0aCA8IDIgJiYKICAgICAgICAgICFpbmNsdWRlcyh0aGlzLnNldHMsIHRoaXMuaW5kZXgpKQogICAgICAgICAgewogICAgICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy5nZXRWYWxpZEluZGV4KCk7CiAgICAgICAgICB9CgogICAgICAgICAgY29uc3QgZGlmZiA9IE1hdGguYWJzKAogICAgICAgICAgdGhpcy5pbmRleCAtCiAgICAgICAgICB0aGlzLnByZXZJbmRleCArICgKICAgICAgICAgIHRoaXMuZGlyID4gMCAmJiB0aGlzLmluZGV4IDwgdGhpcy5wcmV2SW5kZXggfHwKICAgICAgICAgIHRoaXMuZGlyIDwgMCAmJiB0aGlzLmluZGV4ID4gdGhpcy5wcmV2SW5kZXggPwogICAgICAgICAgKHRoaXMubWF4SW5kZXggKyAxKSAqIHRoaXMuZGlyIDoKICAgICAgICAgIDApKTsKCgogICAgICAgICAgaWYgKCF0aGlzLmRyYWdnaW5nICYmIGRpZmYgPiAxKSB7CiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZjsgaSsrKSB7CiAgICAgICAgICAgICAgdGhpcy5zdGFjay5zcGxpY2UoMSwgMCwgdGhpcy5kaXIgPiAwID8gJ25leHQnIDogJ3ByZXZpb3VzJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGNvbnN0IGluZGV4ID0KICAgICAgICAgIHRoaXMuZGlyIDwgMCB8fCAhdGhpcy5zbGlkZXNbdGhpcy5wcmV2SW5kZXhdID8gdGhpcy5pbmRleCA6IHRoaXMucHJldkluZGV4OwogICAgICAgICAgdGhpcy5kdXJhdGlvbiA9CiAgICAgICAgICBzcGVlZFVwKHRoaXMuYXZnV2lkdGggLyB0aGlzLnZlbG9jaXR5KSAqICgKICAgICAgICAgIGRpbWVuc2lvbnMkMSh0aGlzLnNsaWRlc1tpbmRleF0pLndpZHRoIC8gdGhpcy5hdmdXaWR0aCk7CgogICAgICAgICAgdGhpcy5yZW9yZGVyKCk7CiAgICAgICAgfSwKCiAgICAgICAgaXRlbXNob3coKSB7CiAgICAgICAgICBpZiAofnRoaXMucHJldkluZGV4KSB7CiAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuX2dldFRyYW5zaXRpb25lcigpLmdldEl0ZW1JbigpLCB0aGlzLmNsc0FjdGl2ZSk7CiAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgaXRlbXNob3duKCkgewogICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVDbGFzc2VzKCk7CiAgICAgICAgfSB9LAoKCiAgICAgIG1ldGhvZHM6IHsKICAgICAgICByZW9yZGVyKCkgewogICAgICAgICAgaWYgKHRoaXMuZmluaXRlKSB7CiAgICAgICAgICAgIGNzcyh0aGlzLnNsaWRlcywgJ29yZGVyJywgJycpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmRpciA+IDAgJiYgdGhpcy5zbGlkZXNbdGhpcy5wcmV2SW5kZXhdID8gdGhpcy5wcmV2SW5kZXggOiB0aGlzLmluZGV4OwoKICAgICAgICAgIHRoaXMuc2xpZGVzLmZvckVhY2goKHNsaWRlLCBpKSA9PgogICAgICAgICAgY3NzKAogICAgICAgICAgc2xpZGUsCiAgICAgICAgICAnb3JkZXInLAogICAgICAgICAgdGhpcy5kaXIgPiAwICYmIGkgPCBpbmRleCA/IDEgOiB0aGlzLmRpciA8IDAgJiYgaSA+PSB0aGlzLmluZGV4ID8gLTEgOiAnJykpOwoKCgogICAgICAgICAgaWYgKCF0aGlzLmNlbnRlcikgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMuc2xpZGVzW2luZGV4XTsKICAgICAgICAgIGxldCB3aWR0aCA9IGRpbWVuc2lvbnMkMSh0aGlzLmxpc3QpLndpZHRoIC8gMiAtIGRpbWVuc2lvbnMkMShuZXh0KS53aWR0aCAvIDI7CiAgICAgICAgICBsZXQgaiA9IDA7CgogICAgICAgICAgd2hpbGUgKHdpZHRoID4gMCkgewogICAgICAgICAgICBjb25zdCBzbGlkZUluZGV4ID0gdGhpcy5nZXRJbmRleCgtLWogKyBpbmRleCwgaW5kZXgpOwogICAgICAgICAgICBjb25zdCBzbGlkZSA9IHRoaXMuc2xpZGVzW3NsaWRlSW5kZXhdOwoKICAgICAgICAgICAgY3NzKHNsaWRlLCAnb3JkZXInLCBzbGlkZUluZGV4ID4gaW5kZXggPyAtMiA6IC0xKTsKICAgICAgICAgICAgd2lkdGggLT0gZGltZW5zaW9ucyQxKHNsaWRlKS53aWR0aDsKICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICB1cGRhdGVBY3RpdmVDbGFzc2VzKCkgewogICAgICAgICAgY29uc3QgYWN0aXZlcyA9IHRoaXMuX2dldFRyYW5zaXRpb25lcih0aGlzLmluZGV4KS5nZXRBY3RpdmVzKCk7CiAgICAgICAgICBjb25zdCBhY3RpdmVDbGFzc2VzID0gWwogICAgICAgICAgdGhpcy5jbHNBY3RpdmUsCiAgICAgICAgICAoIXRoaXMuc2V0cyB8fCBpbmNsdWRlcyh0aGlzLnNldHMsIHRvRmxvYXQodGhpcy5pbmRleCkpKSAmJiB0aGlzLmNsc0FjdGl2YXRlZCB8fAogICAgICAgICAgJyddOwoKICAgICAgICAgIGZvciAoY29uc3Qgc2xpZGUgb2YgdGhpcy5zbGlkZXMpIHsKICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2xpZGUsIGFjdGl2ZUNsYXNzZXMsIGluY2x1ZGVzKGFjdGl2ZXMsIHNsaWRlKSk7CiAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgZ2V0VmFsaWRJbmRleChpbmRleCwgcHJldkluZGV4KSB7aWYgKGluZGV4ID09PSB2b2lkIDApIHtpbmRleCA9IHRoaXMuaW5kZXg7fWlmIChwcmV2SW5kZXggPT09IHZvaWQgMCkge3ByZXZJbmRleCA9IHRoaXMucHJldkluZGV4O30KICAgICAgICAgIGluZGV4ID0gdGhpcy5nZXRJbmRleChpbmRleCwgcHJldkluZGV4KTsKCiAgICAgICAgICBpZiAoIXRoaXMuc2V0cykgewogICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgICAgICB9CgogICAgICAgICAgbGV0IHByZXY7CgogICAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaW5jbHVkZXModGhpcy5zZXRzLCBpbmRleCkpIHsKICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByZXYgPSBpbmRleDsKICAgICAgICAgICAgaW5kZXggPSB0aGlzLmdldEluZGV4KGluZGV4ICsgdGhpcy5kaXIsIHByZXZJbmRleCk7CiAgICAgICAgICB9IHdoaWxlIChpbmRleCAhPT0gcHJldik7CgogICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgIH0sCgogICAgICAgIGdldEFkamFjZW50U2xpZGVzKCkgewogICAgICAgICAgY29uc3QgeyB3aWR0aCB9ID0gZGltZW5zaW9ucyQxKHRoaXMubGlzdCk7CiAgICAgICAgICBjb25zdCBsZWZ0ID0gLXdpZHRoOwogICAgICAgICAgY29uc3QgcmlnaHQgPSB3aWR0aCAqIDI7CiAgICAgICAgICBjb25zdCBzbGlkZVdpZHRoID0gZGltZW5zaW9ucyQxKHRoaXMuc2xpZGVzW3RoaXMuaW5kZXhdKS53aWR0aDsKICAgICAgICAgIGNvbnN0IHNsaWRlTGVmdCA9IHRoaXMuY2VudGVyID8gd2lkdGggLyAyIC0gc2xpZGVXaWR0aCAvIDIgOiAwOwogICAgICAgICAgY29uc3Qgc2xpZGVzID0gbmV3IFNldCgpOwogICAgICAgICAgZm9yIChjb25zdCBpIG9mIFstMSwgMV0pIHsKICAgICAgICAgICAgbGV0IGN1cnJlbnRMZWZ0ID0gc2xpZGVMZWZ0ICsgKGkgPiAwID8gc2xpZGVXaWR0aCA6IDApOwogICAgICAgICAgICBsZXQgaiA9IDA7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICBjb25zdCBzbGlkZSA9IHRoaXMuc2xpZGVzW3RoaXMuZ2V0SW5kZXgodGhpcy5pbmRleCArIGkgKyBqKysgKiBpKV07CiAgICAgICAgICAgICAgY3VycmVudExlZnQgKz0gZGltZW5zaW9ucyQxKHNsaWRlKS53aWR0aCAqIGk7CiAgICAgICAgICAgICAgc2xpZGVzLmFkZChzbGlkZSk7CiAgICAgICAgICAgIH0gd2hpbGUgKHRoaXMuc2xpZGVzLmxlbmd0aCA+IGogJiYgY3VycmVudExlZnQgPiBsZWZ0ICYmIGN1cnJlbnRMZWZ0IDwgcmlnaHQpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oc2xpZGVzKTsKICAgICAgICB9IH0gfTsKCgoKICAgIGZ1bmN0aW9uIGdldE1heEVsV2lkdGgobGlzdCkgewogICAgICByZXR1cm4gTWF0aC5tYXgoMCwgLi4uY2hpbGRyZW4obGlzdCkubWFwKChlbCkgPT4gZGltZW5zaW9ucyQxKGVsKS53aWR0aCkpOwogICAgfQoKICAgIHZhciBzbGlkZXJQYXJhbGxheCA9IHsKICAgICAgbWl4aW5zOiBbUGFyYWxsYXhdLAoKICAgICAgZGF0YTogewogICAgICAgIHNlbEl0ZW06ICchbGknIH0sCgoKICAgICAgYmVmb3JlQ29ubmVjdCgpIHsKICAgICAgICB0aGlzLml0ZW0gPSBxdWVyeSh0aGlzLnNlbEl0ZW0sIHRoaXMuJGVsKTsKICAgICAgfSwKCiAgICAgIGRpc2Nvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLml0ZW0gPSBudWxsOwogICAgICB9LAoKICAgICAgZXZlbnRzOiBbCiAgICAgIHsKICAgICAgICBuYW1lOiAnaXRlbWluIGl0ZW1vdXQnLAoKICAgICAgICBzZWxmOiB0cnVlLAoKICAgICAgICBlbCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLml0ZW07CiAgICAgICAgfSwKCiAgICAgICAgaGFuZGxlcihfcmVmKSB7bGV0IHsgdHlwZSwgZGV0YWlsOiB7IHBlcmNlbnQsIGR1cmF0aW9uLCB0aW1pbmcsIGRpciB9IH0gPSBfcmVmOwogICAgICAgICAgZmFzdGRvbS5yZWFkKCgpID0+IHsKICAgICAgICAgICAgY29uc3QgcHJvcHNGcm9tID0gdGhpcy5nZXRDc3MoZ2V0Q3VycmVudFBlcmNlbnQodHlwZSwgZGlyLCBwZXJjZW50KSk7CiAgICAgICAgICAgIGNvbnN0IHByb3BzVG8gPSB0aGlzLmdldENzcyhpc0luKHR5cGUpID8gMC41IDogZGlyID4gMCA/IDEgOiAwKTsKICAgICAgICAgICAgZmFzdGRvbS53cml0ZSgoKSA9PiB7CiAgICAgICAgICAgICAgY3NzKHRoaXMuJGVsLCBwcm9wc0Zyb20pOwogICAgICAgICAgICAgIFRyYW5zaXRpb24uc3RhcnQodGhpcy4kZWwsIHByb3BzVG8sIGR1cmF0aW9uLCB0aW1pbmcpLmNhdGNoKG5vb3ApOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0gfSwKCgogICAgICB7CiAgICAgICAgbmFtZTogJ3RyYW5zaXRpb25jYW5jZWxlZCB0cmFuc2l0aW9uZW5kJywKCiAgICAgICAgc2VsZjogdHJ1ZSwKCiAgICAgICAgZWwoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtOwogICAgICAgIH0sCgogICAgICAgIGhhbmRsZXIoKSB7CiAgICAgICAgICBUcmFuc2l0aW9uLmNhbmNlbCh0aGlzLiRlbCk7CiAgICAgICAgfSB9LAoKCiAgICAgIHsKICAgICAgICBuYW1lOiAnaXRlbXRyYW5zbGF0ZWluIGl0ZW10cmFuc2xhdGVvdXQnLAoKICAgICAgICBzZWxmOiB0cnVlLAoKICAgICAgICBlbCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLml0ZW07CiAgICAgICAgfSwKCiAgICAgICAgaGFuZGxlcihfcmVmMikge2xldCB7IHR5cGUsIGRldGFpbDogeyBwZXJjZW50LCBkaXIgfSB9ID0gX3JlZjI7CiAgICAgICAgICBmYXN0ZG9tLnJlYWQoKCkgPT4gewogICAgICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMuZ2V0Q3NzKGdldEN1cnJlbnRQZXJjZW50KHR5cGUsIGRpciwgcGVyY2VudCkpOwogICAgICAgICAgICBmYXN0ZG9tLndyaXRlKCgpID0+IGNzcyh0aGlzLiRlbCwgcHJvcHMpKTsKICAgICAgICAgIH0pOwogICAgICAgIH0gfV0gfTsKCgoKCiAgICBmdW5jdGlvbiBpc0luKHR5cGUpIHsKICAgICAgcmV0dXJuIGVuZHNXaXRoKHR5cGUsICdpbicpOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldEN1cnJlbnRQZXJjZW50KHR5cGUsIGRpciwgcGVyY2VudCkgewogICAgICBwZXJjZW50IC89IDI7CgogICAgICByZXR1cm4gaXNJbih0eXBlKSBeIGRpciA8IDAgPyBwZXJjZW50IDogMSAtIHBlcmNlbnQ7CiAgICB9CgogICAgdmFyIEFuaW1hdGlvbnMgPSB7CiAgICAgIC4uLkFuaW1hdGlvbnMkMiwKICAgICAgZmFkZTogewogICAgICAgIHNob3coKSB7CiAgICAgICAgICByZXR1cm4gW3sgb3BhY2l0eTogMCwgekluZGV4OiAwIH0sIHsgekluZGV4OiAtMSB9XTsKICAgICAgICB9LAoKICAgICAgICBwZXJjZW50KGN1cnJlbnQpIHsKICAgICAgICAgIHJldHVybiAxIC0gY3NzKGN1cnJlbnQsICdvcGFjaXR5Jyk7CiAgICAgICAgfSwKCiAgICAgICAgdHJhbnNsYXRlKHBlcmNlbnQpIHsKICAgICAgICAgIHJldHVybiBbeyBvcGFjaXR5OiAxIC0gcGVyY2VudCwgekluZGV4OiAwIH0sIHsgekluZGV4OiAtMSB9XTsKICAgICAgICB9IH0sCgoKICAgICAgc2NhbGU6IHsKICAgICAgICBzaG93KCkgewogICAgICAgICAgcmV0dXJuIFt7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogc2NhbGUzZCgxICsgMC41KSwgekluZGV4OiAwIH0sIHsgekluZGV4OiAtMSB9XTsKICAgICAgICB9LAoKICAgICAgICBwZXJjZW50KGN1cnJlbnQpIHsKICAgICAgICAgIHJldHVybiAxIC0gY3NzKGN1cnJlbnQsICdvcGFjaXR5Jyk7CiAgICAgICAgfSwKCiAgICAgICAgdHJhbnNsYXRlKHBlcmNlbnQpIHsKICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICB7IG9wYWNpdHk6IDEgLSBwZXJjZW50LCB0cmFuc2Zvcm06IHNjYWxlM2QoMSArIDAuNSAqIHBlcmNlbnQpLCB6SW5kZXg6IDAgfSwKICAgICAgICAgIHsgekluZGV4OiAtMSB9XTsKCiAgICAgICAgfSB9LAoKCiAgICAgIHB1bGw6IHsKICAgICAgICBzaG93KGRpcikgewogICAgICAgICAgcmV0dXJuIGRpciA8IDAgPwogICAgICAgICAgWwogICAgICAgICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgzMCksIHpJbmRleDogLTEgfSwKICAgICAgICAgIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoKSwgekluZGV4OiAwIH1dIDoKCiAgICAgICAgICBbCiAgICAgICAgICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC0xMDApLCB6SW5kZXg6IDAgfSwKICAgICAgICAgIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoKSwgekluZGV4OiAtMSB9XTsKCiAgICAgICAgfSwKCiAgICAgICAgcGVyY2VudChjdXJyZW50LCBuZXh0LCBkaXIpIHsKICAgICAgICAgIHJldHVybiBkaXIgPCAwID8gMSAtIHRyYW5zbGF0ZWQobmV4dCkgOiB0cmFuc2xhdGVkKGN1cnJlbnQpOwogICAgICAgIH0sCgogICAgICAgIHRyYW5zbGF0ZShwZXJjZW50LCBkaXIpIHsKICAgICAgICAgIHJldHVybiBkaXIgPCAwID8KICAgICAgICAgIFsKICAgICAgICAgIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMzAgKiBwZXJjZW50KSwgekluZGV4OiAtMSB9LAogICAgICAgICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMTAwICogKDEgLSBwZXJjZW50KSksIHpJbmRleDogMCB9XSA6CgogICAgICAgICAgWwogICAgICAgICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtcGVyY2VudCAqIDEwMCksIHpJbmRleDogMCB9LAogICAgICAgICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgzMCAqICgxIC0gcGVyY2VudCkpLCB6SW5kZXg6IC0xIH1dOwoKICAgICAgICB9IH0sCgoKICAgICAgcHVzaDogewogICAgICAgIHNob3coZGlyKSB7CiAgICAgICAgICByZXR1cm4gZGlyIDwgMCA/CiAgICAgICAgICBbCiAgICAgICAgICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMCksIHpJbmRleDogMCB9LAogICAgICAgICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgpLCB6SW5kZXg6IC0xIH1dIDoKCiAgICAgICAgICBbCiAgICAgICAgICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC0zMCksIHpJbmRleDogLTEgfSwKICAgICAgICAgIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUoKSwgekluZGV4OiAwIH1dOwoKICAgICAgICB9LAoKICAgICAgICBwZXJjZW50KGN1cnJlbnQsIG5leHQsIGRpcikgewogICAgICAgICAgcmV0dXJuIGRpciA+IDAgPyAxIC0gdHJhbnNsYXRlZChuZXh0KSA6IHRyYW5zbGF0ZWQoY3VycmVudCk7CiAgICAgICAgfSwKCiAgICAgICAgdHJhbnNsYXRlKHBlcmNlbnQsIGRpcikgewogICAgICAgICAgcmV0dXJuIGRpciA8IDAgPwogICAgICAgICAgWwogICAgICAgICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZShwZXJjZW50ICogMTAwKSwgekluZGV4OiAwIH0sCiAgICAgICAgICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC0zMCAqICgxIC0gcGVyY2VudCkpLCB6SW5kZXg6IC0xIH1dIDoKCiAgICAgICAgICBbCiAgICAgICAgICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC0zMCAqIHBlcmNlbnQpLCB6SW5kZXg6IC0xIH0sCiAgICAgICAgICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwMCAqICgxIC0gcGVyY2VudCkpLCB6SW5kZXg6IDAgfV07CgogICAgICAgIH0gfSB9OwoKICAgIHZhciBzbGlkZXNob3cgPSB7CiAgICAgIG1peGluczogW0NsYXNzLCBTbGlkZXNob3csIFNsaWRlclJlYWN0aXZlLCBTbGlkZXJQcmVsb2FkXSwKCiAgICAgIHByb3BzOiB7CiAgICAgICAgcmF0aW86IFN0cmluZywKICAgICAgICBtaW5IZWlnaHQ6IE51bWJlciwKICAgICAgICBtYXhIZWlnaHQ6IE51bWJlciB9LAoKCiAgICAgIGRhdGE6IHsKICAgICAgICByYXRpbzogJzE2OjknLAogICAgICAgIG1pbkhlaWdodDogZmFsc2UsCiAgICAgICAgbWF4SGVpZ2h0OiBmYWxzZSwKICAgICAgICBzZWxMaXN0OiAnLnVrLXNsaWRlc2hvdy1pdGVtcycsCiAgICAgICAgYXR0ckl0ZW06ICd1ay1zbGlkZXNob3ctaXRlbScsCiAgICAgICAgc2VsTmF2OiAnLnVrLXNsaWRlc2hvdy1uYXYnLAogICAgICAgIEFuaW1hdGlvbnMgfSwKCgogICAgICB1cGRhdGU6IHsKICAgICAgICByZWFkKCkgewogICAgICAgICAgaWYgKCF0aGlzLmxpc3QpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQoKICAgICAgICAgIGxldCBbd2lkdGgsIGhlaWdodF0gPSB0aGlzLnJhdGlvLnNwbGl0KCc6JykubWFwKE51bWJlcik7CgogICAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0ICogdGhpcy5saXN0Lm9mZnNldFdpZHRoIC8gd2lkdGggfHwgMDsKCiAgICAgICAgICBpZiAodGhpcy5taW5IZWlnaHQpIHsKICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5tYXgodGhpcy5taW5IZWlnaHQsIGhlaWdodCk7CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKHRoaXMubWF4SGVpZ2h0KSB7CiAgICAgICAgICAgIGhlaWdodCA9IE1hdGgubWluKHRoaXMubWF4SGVpZ2h0LCBoZWlnaHQpOwogICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiB7IGhlaWdodDogaGVpZ2h0IC0gYm94TW9kZWxBZGp1c3QodGhpcy5saXN0LCAnaGVpZ2h0JywgJ2NvbnRlbnQtYm94JykgfTsKICAgICAgICB9LAoKICAgICAgICB3cml0ZShfcmVmKSB7bGV0IHsgaGVpZ2h0IH0gPSBfcmVmOwogICAgICAgICAgaGVpZ2h0ID4gMCAmJiBjc3ModGhpcy5saXN0LCAnbWluSGVpZ2h0JywgaGVpZ2h0KTsKICAgICAgICB9LAoKICAgICAgICBldmVudHM6IFsncmVzaXplJ10gfSwKCgogICAgICBtZXRob2RzOiB7CiAgICAgICAgZ2V0QWRqYWNlbnRTbGlkZXMoKSB7CiAgICAgICAgICByZXR1cm4gWzEsIC0xXS5tYXAoKGkpID0+IHRoaXMuc2xpZGVzW3RoaXMuZ2V0SW5kZXgodGhpcy5pbmRleCArIGkpXSk7CiAgICAgICAgfSB9IH07CgogICAgdmFyIHNvcnRhYmxlID0gewogICAgICBtaXhpbnM6IFtDbGFzcywgQW5pbWF0ZV0sCgogICAgICBwcm9wczogewogICAgICAgIGdyb3VwOiBTdHJpbmcsCiAgICAgICAgdGhyZXNob2xkOiBOdW1iZXIsCiAgICAgICAgY2xzSXRlbTogU3RyaW5nLAogICAgICAgIGNsc1BsYWNlaG9sZGVyOiBTdHJpbmcsCiAgICAgICAgY2xzRHJhZzogU3RyaW5nLAogICAgICAgIGNsc0RyYWdTdGF0ZTogU3RyaW5nLAogICAgICAgIGNsc0Jhc2U6IFN0cmluZywKICAgICAgICBjbHNOb0RyYWc6IFN0cmluZywKICAgICAgICBjbHNFbXB0eTogU3RyaW5nLAogICAgICAgIGNsc0N1c3RvbTogU3RyaW5nLAogICAgICAgIGhhbmRsZTogU3RyaW5nIH0sCgoKICAgICAgZGF0YTogewogICAgICAgIGdyb3VwOiBmYWxzZSwKICAgICAgICB0aHJlc2hvbGQ6IDUsCiAgICAgICAgY2xzSXRlbTogJ3VrLXNvcnRhYmxlLWl0ZW0nLAogICAgICAgIGNsc1BsYWNlaG9sZGVyOiAndWstc29ydGFibGUtcGxhY2Vob2xkZXInLAogICAgICAgIGNsc0RyYWc6ICd1ay1zb3J0YWJsZS1kcmFnJywKICAgICAgICBjbHNEcmFnU3RhdGU6ICd1ay1kcmFnJywKICAgICAgICBjbHNCYXNlOiAndWstc29ydGFibGUnLAogICAgICAgIGNsc05vRHJhZzogJ3VrLXNvcnRhYmxlLW5vZHJhZycsCiAgICAgICAgY2xzRW1wdHk6ICd1ay1zb3J0YWJsZS1lbXB0eScsCiAgICAgICAgY2xzQ3VzdG9tOiAnJywKICAgICAgICBoYW5kbGU6IGZhbHNlLAogICAgICAgIHBvczoge30gfSwKCgogICAgICBjcmVhdGVkKCkgewogICAgICAgIGZvciAoY29uc3Qga2V5IG9mIFsnaW5pdCcsICdzdGFydCcsICdtb3ZlJywgJ2VuZCddKSB7CiAgICAgICAgICBjb25zdCBmbiA9IHRoaXNba2V5XTsKICAgICAgICAgIHRoaXNba2V5XSA9IChlKSA9PiB7CiAgICAgICAgICAgIGFzc2lnbih0aGlzLnBvcywgZ2V0RXZlbnRQb3MoZSkpOwogICAgICAgICAgICBmbihlKTsKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9LAoKICAgICAgZXZlbnRzOiB7CiAgICAgICAgbmFtZTogcG9pbnRlckRvd24kMSwKICAgICAgICBwYXNzaXZlOiBmYWxzZSwKICAgICAgICBoYW5kbGVyOiAnaW5pdCcgfSwKCgogICAgICBjb21wdXRlZDogewogICAgICAgIHRhcmdldCgpIHsKICAgICAgICAgIHJldHVybiAodGhpcy4kZWwudEJvZGllcyB8fCBbdGhpcy4kZWxdKVswXTsKICAgICAgICB9LAoKICAgICAgICBpdGVtcygpIHsKICAgICAgICAgIHJldHVybiBjaGlsZHJlbih0aGlzLnRhcmdldCk7CiAgICAgICAgfSwKCiAgICAgICAgaXNFbXB0eTogewogICAgICAgICAgZ2V0KCkgewogICAgICAgICAgICByZXR1cm4gaXNFbXB0eSh0aGlzLml0ZW1zKTsKICAgICAgICAgIH0sCgogICAgICAgICAgd2F0Y2goZW1wdHkpIHsKICAgICAgICAgICAgdG9nZ2xlQ2xhc3ModGhpcy50YXJnZXQsIHRoaXMuY2xzRW1wdHksIGVtcHR5KTsKICAgICAgICAgIH0sCgogICAgICAgICAgaW1tZWRpYXRlOiB0cnVlIH0sCgoKICAgICAgICBoYW5kbGVzOiB7CiAgICAgICAgICBnZXQoX3JlZiwgZWwpIHtsZXQgeyBoYW5kbGUgfSA9IF9yZWY7CiAgICAgICAgICAgIHJldHVybiBoYW5kbGUgPyAkJChoYW5kbGUsIGVsKSA6IHRoaXMuaXRlbXM7CiAgICAgICAgICB9LAoKICAgICAgICAgIHdhdGNoKGhhbmRsZXMsIHByZXYpIHsKICAgICAgICAgICAgY3NzKHByZXYsIHsgdG91Y2hBY3Rpb246ICcnLCB1c2VyU2VsZWN0OiAnJyB9KTsKICAgICAgICAgICAgY3NzKGhhbmRsZXMsIHsgdG91Y2hBY3Rpb246IGhhc1RvdWNoID8gJ25vbmUnIDogJycsIHVzZXJTZWxlY3Q6ICdub25lJyB9KTsgLy8gdG91Y2hBY3Rpb24gc2V0IHRvICdub25lJyBjYXVzZXMgYSBwZXJmb3JtYW5jZSBkcm9wIGluIENocm9tZSA4MAogICAgICAgICAgfSwKCiAgICAgICAgICBpbW1lZGlhdGU6IHRydWUgfSB9LAoKCgogICAgICB1cGRhdGU6IHsKICAgICAgICB3cml0ZShkYXRhKSB7CiAgICAgICAgICBpZiAoIXRoaXMuZHJhZyB8fCAhcGFyZW50KHRoaXMucGxhY2Vob2xkZXIpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICBjb25zdCB7CiAgICAgICAgICAgIHBvczogeyB4LCB5IH0sCiAgICAgICAgICAgIG9yaWdpbjogeyBvZmZzZXRUb3AsIG9mZnNldExlZnQgfSwKICAgICAgICAgICAgcGxhY2Vob2xkZXIgfSA9CiAgICAgICAgICB0aGlzOwoKICAgICAgICAgIGNzcyh0aGlzLmRyYWcsIHsKICAgICAgICAgICAgdG9wOiB5IC0gb2Zmc2V0VG9wLAogICAgICAgICAgICBsZWZ0OiB4IC0gb2Zmc2V0TGVmdCB9KTsKCgogICAgICAgICAgY29uc3Qgc29ydGFibGUgPSB0aGlzLmdldFNvcnRhYmxlKGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoeCwgeSkpOwoKICAgICAgICAgIGlmICghc29ydGFibGUpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGNvbnN0IHsgaXRlbXMgfSA9IHNvcnRhYmxlOwoKICAgICAgICAgIGlmIChpdGVtcy5zb21lKFRyYW5zaXRpb24uaW5Qcm9ncmVzcykpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGZpbmRUYXJnZXQoaXRlbXMsIHsgeCwgeSB9KTsKCiAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoICYmICghdGFyZ2V0IHx8IHRhcmdldCA9PT0gcGxhY2Vob2xkZXIpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMuZ2V0U29ydGFibGUocGxhY2Vob2xkZXIpOwogICAgICAgICAgY29uc3QgaW5zZXJ0VGFyZ2V0ID0gZmluZEluc2VydFRhcmdldCgKICAgICAgICAgIHNvcnRhYmxlLnRhcmdldCwKICAgICAgICAgIHRhcmdldCwKICAgICAgICAgIHBsYWNlaG9sZGVyLAogICAgICAgICAgeCwKICAgICAgICAgIHksCiAgICAgICAgICBzb3J0YWJsZSA9PT0gcHJldmlvdXMgJiYgZGF0YS5tb3ZlZCAhPT0gdGFyZ2V0KTsKCgogICAgICAgICAgaWYgKGluc2VydFRhcmdldCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChpbnNlcnRUYXJnZXQgJiYgcGxhY2Vob2xkZXIgPT09IGluc2VydFRhcmdldCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKHNvcnRhYmxlICE9PSBwcmV2aW91cykgewogICAgICAgICAgICBwcmV2aW91cy5yZW1vdmUocGxhY2Vob2xkZXIpOwogICAgICAgICAgICBkYXRhLm1vdmVkID0gdGFyZ2V0OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZGVsZXRlIGRhdGEubW92ZWQ7CiAgICAgICAgICB9CgogICAgICAgICAgc29ydGFibGUuaW5zZXJ0KHBsYWNlaG9sZGVyLCBpbnNlcnRUYXJnZXQpOwoKICAgICAgICAgIHRoaXMudG91Y2hlZC5hZGQoc29ydGFibGUpOwogICAgICAgIH0sCgogICAgICAgIGV2ZW50czogWydtb3ZlJ10gfSwKCgogICAgICBtZXRob2RzOiB7CiAgICAgICAgaW5pdChlKSB7CiAgICAgICAgICBjb25zdCB7IHRhcmdldCwgYnV0dG9uLCBkZWZhdWx0UHJldmVudGVkIH0gPSBlOwogICAgICAgICAgY29uc3QgW3BsYWNlaG9sZGVyXSA9IHRoaXMuaXRlbXMuZmlsdGVyKChlbCkgPT4gd2l0aGluKHRhcmdldCwgZWwpKTsKCiAgICAgICAgICBpZiAoCiAgICAgICAgICAhcGxhY2Vob2xkZXIgfHwKICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgfHwKICAgICAgICAgIGJ1dHRvbiA+IDAgfHwKICAgICAgICAgIGlzSW5wdXQodGFyZ2V0KSB8fAogICAgICAgICAgd2l0aGluKHRhcmdldCwgIi4iICsgdGhpcy5jbHNOb0RyYWcpIHx8CiAgICAgICAgICB0aGlzLmhhbmRsZSAmJiAhd2l0aGluKHRhcmdldCwgdGhpcy5oYW5kbGUpKQogICAgICAgICAgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICAgIHRoaXMudG91Y2hlZCA9IG5ldyBTZXQoW3RoaXNdKTsKICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjsKICAgICAgICAgIHRoaXMub3JpZ2luID0geyB0YXJnZXQsIGluZGV4OiBpbmRleChwbGFjZWhvbGRlciksIC4uLnRoaXMucG9zIH07CgogICAgICAgICAgb24oZG9jdW1lbnQsIHBvaW50ZXJNb3ZlJDEsIHRoaXMubW92ZSk7CiAgICAgICAgICBvbihkb2N1bWVudCwgcG9pbnRlclVwJDEsIHRoaXMuZW5kKTsKCiAgICAgICAgICBpZiAoIXRoaXMudGhyZXNob2xkKSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQoZSk7CiAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgc3RhcnQoZSkgewogICAgICAgICAgdGhpcy5kcmFnID0gYXBwZW5kRHJhZyh0aGlzLiRjb250YWluZXIsIHRoaXMucGxhY2Vob2xkZXIpOwogICAgICAgICAgY29uc3QgeyBsZWZ0LCB0b3AgfSA9IHRoaXMucGxhY2Vob2xkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICBhc3NpZ24odGhpcy5vcmlnaW4sIHsgb2Zmc2V0TGVmdDogdGhpcy5wb3MueCAtIGxlZnQsIG9mZnNldFRvcDogdGhpcy5wb3MueSAtIHRvcCB9KTsKCiAgICAgICAgICBhZGRDbGFzcyh0aGlzLmRyYWcsIHRoaXMuY2xzRHJhZywgdGhpcy5jbHNDdXN0b20pOwogICAgICAgICAgYWRkQ2xhc3ModGhpcy5wbGFjZWhvbGRlciwgdGhpcy5jbHNQbGFjZWhvbGRlcik7CiAgICAgICAgICBhZGRDbGFzcyh0aGlzLml0ZW1zLCB0aGlzLmNsc0l0ZW0pOwogICAgICAgICAgYWRkQ2xhc3MoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB0aGlzLmNsc0RyYWdTdGF0ZSk7CgogICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ3N0YXJ0JywgW3RoaXMsIHRoaXMucGxhY2Vob2xkZXJdKTsKCiAgICAgICAgICB0cmFja1Njcm9sbCh0aGlzLnBvcyk7CgogICAgICAgICAgdGhpcy5tb3ZlKGUpOwogICAgICAgIH0sCgogICAgICAgIG1vdmUoZSkgewogICAgICAgICAgaWYgKHRoaXMuZHJhZykgewogICAgICAgICAgICB0aGlzLiRlbWl0KCdtb3ZlJyk7CiAgICAgICAgICB9IGVsc2UgaWYgKAogICAgICAgICAgTWF0aC5hYnModGhpcy5wb3MueCAtIHRoaXMub3JpZ2luLngpID4gdGhpcy50aHJlc2hvbGQgfHwKICAgICAgICAgIE1hdGguYWJzKHRoaXMucG9zLnkgLSB0aGlzLm9yaWdpbi55KSA+IHRoaXMudGhyZXNob2xkKQogICAgICAgICAgewogICAgICAgICAgICB0aGlzLnN0YXJ0KGUpOwogICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIGVuZCgpIHsKICAgICAgICAgIG9mZihkb2N1bWVudCwgcG9pbnRlck1vdmUkMSwgdGhpcy5tb3ZlKTsKICAgICAgICAgIG9mZihkb2N1bWVudCwgcG9pbnRlclVwJDEsIHRoaXMuZW5kKTsKCiAgICAgICAgICBpZiAoIXRoaXMuZHJhZykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgdW50cmFja1Njcm9sbCgpOwoKICAgICAgICAgIGNvbnN0IHNvcnRhYmxlID0gdGhpcy5nZXRTb3J0YWJsZSh0aGlzLnBsYWNlaG9sZGVyKTsKCiAgICAgICAgICBpZiAodGhpcyA9PT0gc29ydGFibGUpIHsKICAgICAgICAgICAgaWYgKHRoaXMub3JpZ2luLmluZGV4ICE9PSBpbmRleCh0aGlzLnBsYWNlaG9sZGVyKSkgewogICAgICAgICAgICAgIHRyaWdnZXIodGhpcy4kZWwsICdtb3ZlZCcsIFt0aGlzLCB0aGlzLnBsYWNlaG9sZGVyXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRyaWdnZXIoc29ydGFibGUuJGVsLCAnYWRkZWQnLCBbc29ydGFibGUsIHRoaXMucGxhY2Vob2xkZXJdKTsKICAgICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ3JlbW92ZWQnLCBbdGhpcywgdGhpcy5wbGFjZWhvbGRlcl0pOwogICAgICAgICAgfQoKICAgICAgICAgIHRyaWdnZXIodGhpcy4kZWwsICdzdG9wJywgW3RoaXMsIHRoaXMucGxhY2Vob2xkZXJdKTsKCiAgICAgICAgICByZW1vdmUkMSh0aGlzLmRyYWcpOwogICAgICAgICAgdGhpcy5kcmFnID0gbnVsbDsKCiAgICAgICAgICBmb3IgKGNvbnN0IHsgY2xzUGxhY2Vob2xkZXIsIGNsc0l0ZW0gfSBvZiB0aGlzLnRvdWNoZWQpIHsKICAgICAgICAgICAgZm9yIChjb25zdCBzb3J0YWJsZSBvZiB0aGlzLnRvdWNoZWQpIHsKICAgICAgICAgICAgICByZW1vdmVDbGFzcyhzb3J0YWJsZS5pdGVtcywgY2xzUGxhY2Vob2xkZXIsIGNsc0l0ZW0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnRvdWNoZWQgPSBudWxsOwogICAgICAgICAgcmVtb3ZlQ2xhc3MoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB0aGlzLmNsc0RyYWdTdGF0ZSk7CiAgICAgICAgfSwKCiAgICAgICAgaW5zZXJ0KGVsZW1lbnQsIHRhcmdldCkgewogICAgICAgICAgYWRkQ2xhc3ModGhpcy5pdGVtcywgdGhpcy5jbHNJdGVtKTsKCiAgICAgICAgICBjb25zdCBpbnNlcnQgPSAoKSA9PiB0YXJnZXQgPyBiZWZvcmUodGFyZ2V0LCBlbGVtZW50KSA6IGFwcGVuZCh0aGlzLnRhcmdldCwgZWxlbWVudCk7CgogICAgICAgICAgdGhpcy5hbmltYXRlKGluc2VydCk7CiAgICAgICAgfSwKCiAgICAgICAgcmVtb3ZlKGVsZW1lbnQpIHsKICAgICAgICAgIGlmICghd2l0aGluKGVsZW1lbnQsIHRoaXMudGFyZ2V0KSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5hbmltYXRlKCgpID0+IHJlbW92ZSQxKGVsZW1lbnQpKTsKICAgICAgICB9LAoKICAgICAgICBnZXRTb3J0YWJsZShlbGVtZW50KSB7CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIGNvbnN0IHNvcnRhYmxlID0gdGhpcy4kZ2V0Q29tcG9uZW50KGVsZW1lbnQsICdzb3J0YWJsZScpOwoKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICBzb3J0YWJsZSAmJiAoCiAgICAgICAgICAgIHNvcnRhYmxlID09PSB0aGlzIHx8IHRoaXMuZ3JvdXAgIT09IGZhbHNlICYmIHNvcnRhYmxlLmdyb3VwID09PSB0aGlzLmdyb3VwKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHJldHVybiBzb3J0YWJsZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSB3aGlsZSAoZWxlbWVudCA9IHBhcmVudChlbGVtZW50KSk7CiAgICAgICAgfSB9IH07CgoKCiAgICBsZXQgdHJhY2tUaW1lcjsKICAgIGZ1bmN0aW9uIHRyYWNrU2Nyb2xsKHBvcykgewogICAgICBsZXQgbGFzdCA9IERhdGUubm93KCk7CiAgICAgIHRyYWNrVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgICAgbGV0IHsgeCwgeSB9ID0gcG9zOwogICAgICAgIHkgKz0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3A7CgogICAgICAgIGNvbnN0IGRpc3QgPSAoRGF0ZS5ub3coKSAtIGxhc3QpICogMC4zOwogICAgICAgIGxhc3QgPSBEYXRlLm5vdygpOwoKICAgICAgICBzY3JvbGxQYXJlbnRzKGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoeCwgcG9zLnkpLCAvYXV0b3xzY3JvbGwvKS4KICAgICAgICByZXZlcnNlKCkuCiAgICAgICAgc29tZSgoc2Nyb2xsRWwpID0+IHsKICAgICAgICAgIGxldCB7IHNjcm9sbFRvcDogc2Nyb2xsLCBzY3JvbGxIZWlnaHQgfSA9IHNjcm9sbEVsOwoKICAgICAgICAgIGNvbnN0IHsgdG9wLCBib3R0b20sIGhlaWdodCB9ID0gb2Zmc2V0Vmlld3BvcnQoc2Nyb2xsRWwpOwoKICAgICAgICAgIGlmICh0b3AgPCB5ICYmIHRvcCArIDM1ID4geSkgewogICAgICAgICAgICBzY3JvbGwgLT0gZGlzdDsKICAgICAgICAgIH0gZWxzZSBpZiAoYm90dG9tID4geSAmJiBib3R0b20gLSAzNSA8IHkpIHsKICAgICAgICAgICAgc2Nyb2xsICs9IGRpc3Q7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKHNjcm9sbCA+IDAgJiYgc2Nyb2xsIDwgc2Nyb2xsSGVpZ2h0IC0gaGVpZ2h0KSB7CiAgICAgICAgICAgIHNjcm9sbEVsLnNjcm9sbFRvcCA9IHNjcm9sbDsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0sIDE1KTsKICAgIH0KCiAgICBmdW5jdGlvbiB1bnRyYWNrU2Nyb2xsKCkgewogICAgICBjbGVhckludGVydmFsKHRyYWNrVGltZXIpOwogICAgfQoKICAgIGZ1bmN0aW9uIGFwcGVuZERyYWcoY29udGFpbmVyLCBlbGVtZW50KSB7CiAgICAgIGNvbnN0IGNsb25lID0gYXBwZW5kKAogICAgICBjb250YWluZXIsCiAgICAgIGVsZW1lbnQub3V0ZXJIVE1MLnJlcGxhY2UoLyhePCkoPzpsaXx0cil8KD86bGl8dHIpKFwvPiQpL2csICckMWRpdiQyJykpOwoKCiAgICAgIGNzcyhjbG9uZSwgJ21hcmdpbicsICcwJywgJ2ltcG9ydGFudCcpOwogICAgICBjc3MoY2xvbmUsIHsKICAgICAgICBib3hTaXppbmc6ICdib3JkZXItYm94JywKICAgICAgICB3aWR0aDogZWxlbWVudC5vZmZzZXRXaWR0aCwKICAgICAgICBoZWlnaHQ6IGVsZW1lbnQub2Zmc2V0SGVpZ2h0LAogICAgICAgIHBhZGRpbmc6IGNzcyhlbGVtZW50LCAncGFkZGluZycpIH0pOwoKCiAgICAgIGhlaWdodChjbG9uZS5maXJzdEVsZW1lbnRDaGlsZCwgaGVpZ2h0KGVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQpKTsKCiAgICAgIHJldHVybiBjbG9uZTsKICAgIH0KCiAgICBmdW5jdGlvbiBmaW5kVGFyZ2V0KGl0ZW1zLCBwb2ludCkgewogICAgICByZXR1cm4gaXRlbXNbZmluZEluZGV4KGl0ZW1zLCAoaXRlbSkgPT4gcG9pbnRJblJlY3QocG9pbnQsIGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKV07CiAgICB9CgogICAgZnVuY3Rpb24gZmluZEluc2VydFRhcmdldChsaXN0LCB0YXJnZXQsIHBsYWNlaG9sZGVyLCB4LCB5LCBzYW1lTGlzdCkgewogICAgICBpZiAoIWNoaWxkcmVuKGxpc3QpLmxlbmd0aCkgewogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgY29uc3QgcmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgaWYgKCFzYW1lTGlzdCkgewogICAgICAgIGlmICghaXNIb3Jpem9udGFsKGxpc3QsIHBsYWNlaG9sZGVyKSkgewogICAgICAgICAgcmV0dXJuIHkgPCByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMiA/IHRhcmdldCA6IHRhcmdldC5uZXh0RWxlbWVudFNpYmxpbmc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdGFyZ2V0OwogICAgICB9CgogICAgICBjb25zdCBwbGFjZWhvbGRlclJlY3QgPSBwbGFjZWhvbGRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgY29uc3Qgc2FtZVJvdyA9IGxpbmVzSW50ZXJzZWN0KAogICAgICBbcmVjdC50b3AsIHJlY3QuYm90dG9tXSwKICAgICAgW3BsYWNlaG9sZGVyUmVjdC50b3AsIHBsYWNlaG9sZGVyUmVjdC5ib3R0b21dKTsKCgogICAgICBjb25zdCBwb2ludGVyUG9zID0gc2FtZVJvdyA/IHggOiB5OwogICAgICBjb25zdCBsZW5ndGhQcm9wID0gc2FtZVJvdyA/ICd3aWR0aCcgOiAnaGVpZ2h0JzsKICAgICAgY29uc3Qgc3RhcnRQcm9wID0gc2FtZVJvdyA/ICdsZWZ0JyA6ICd0b3AnOwogICAgICBjb25zdCBlbmRQcm9wID0gc2FtZVJvdyA/ICdyaWdodCcgOiAnYm90dG9tJzsKCiAgICAgIGNvbnN0IGRpZmYgPQogICAgICBwbGFjZWhvbGRlclJlY3RbbGVuZ3RoUHJvcF0gPCByZWN0W2xlbmd0aFByb3BdID8KICAgICAgcmVjdFtsZW5ndGhQcm9wXSAtIHBsYWNlaG9sZGVyUmVjdFtsZW5ndGhQcm9wXSA6CiAgICAgIDA7CgogICAgICBpZiAocGxhY2Vob2xkZXJSZWN0W3N0YXJ0UHJvcF0gPCByZWN0W3N0YXJ0UHJvcF0pIHsKICAgICAgICBpZiAoZGlmZiAmJiBwb2ludGVyUG9zIDwgcmVjdFtzdGFydFByb3BdICsgZGlmZikgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRhcmdldC5uZXh0RWxlbWVudFNpYmxpbmc7CiAgICAgIH0KCiAgICAgIGlmIChkaWZmICYmIHBvaW50ZXJQb3MgPiByZWN0W2VuZFByb3BdIC0gZGlmZikgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KCiAgICBmdW5jdGlvbiBpc0hvcml6b250YWwobGlzdCwgcGxhY2Vob2xkZXIpIHsKICAgICAgY29uc3Qgc2luZ2xlID0gY2hpbGRyZW4obGlzdCkubGVuZ3RoID09PSAxOwoKICAgICAgaWYgKHNpbmdsZSkgewogICAgICAgIGFwcGVuZChsaXN0LCBwbGFjZWhvbGRlcik7CiAgICAgIH0KCiAgICAgIGNvbnN0IGl0ZW1zID0gY2hpbGRyZW4obGlzdCk7CiAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGl0ZW1zLnNvbWUoKGVsLCBpKSA9PiB7CiAgICAgICAgY29uc3QgcmVjdEEgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICByZXR1cm4gaXRlbXMuc2xpY2UoaSArIDEpLnNvbWUoKGVsKSA9PiB7CiAgICAgICAgICBjb25zdCByZWN0QiA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgcmV0dXJuICFsaW5lc0ludGVyc2VjdChbcmVjdEEubGVmdCwgcmVjdEEucmlnaHRdLCBbcmVjdEIubGVmdCwgcmVjdEIucmlnaHRdKTsKICAgICAgICB9KTsKICAgICAgfSk7CgogICAgICBpZiAoc2luZ2xlKSB7CiAgICAgICAgcmVtb3ZlJDEocGxhY2Vob2xkZXIpOwogICAgICB9CgogICAgICByZXR1cm4gaXNIb3Jpem9udGFsOwogICAgfQoKICAgIGZ1bmN0aW9uIGxpbmVzSW50ZXJzZWN0KGxpbmVBLCBsaW5lQikgewogICAgICByZXR1cm4gbGluZUFbMV0gPiBsaW5lQlswXSAmJiBsaW5lQlsxXSA+IGxpbmVBWzBdOwogICAgfQoKICAgIHZhciB0b29sdGlwID0gewogICAgICBtaXhpbnM6IFtDb250YWluZXIsIFRvZ2dsYWJsZSwgUG9zaXRpb25dLAoKICAgICAgYXJnczogJ3RpdGxlJywKCiAgICAgIHByb3BzOiB7CiAgICAgICAgZGVsYXk6IE51bWJlciwKICAgICAgICB0aXRsZTogU3RyaW5nIH0sCgoKICAgICAgZGF0YTogewogICAgICAgIHBvczogJ3RvcCcsCiAgICAgICAgdGl0bGU6ICcnLAogICAgICAgIGRlbGF5OiAwLAogICAgICAgIGFuaW1hdGlvbjogWyd1ay1hbmltYXRpb24tc2NhbGUtdXAnXSwKICAgICAgICBkdXJhdGlvbjogMTAwLAogICAgICAgIGNsczogJ3VrLWFjdGl2ZScgfSwKCgogICAgICBiZWZvcmVDb25uZWN0KCkgewogICAgICAgIHRoaXMuX2hhc1RpdGxlID0gaGFzQXR0cih0aGlzLiRlbCwgJ3RpdGxlJyk7CiAgICAgICAgYXR0cih0aGlzLiRlbCwgJ3RpdGxlJywgJycpOwogICAgICAgIHRoaXMudXBkYXRlQXJpYShmYWxzZSk7CiAgICAgICAgbWFrZUZvY3VzYWJsZSh0aGlzLiRlbCk7CiAgICAgIH0sCgogICAgICBkaXNjb25uZWN0ZWQoKSB7CiAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgYXR0cih0aGlzLiRlbCwgJ3RpdGxlJywgdGhpcy5faGFzVGl0bGUgPyB0aGlzLnRpdGxlIDogbnVsbCk7CiAgICAgIH0sCgogICAgICBtZXRob2RzOiB7CiAgICAgICAgc2hvdygpIHsKICAgICAgICAgIGlmICh0aGlzLmlzVG9nZ2xlZCh0aGlzLnRvb2x0aXAgfHwgbnVsbCkgfHwgIXRoaXMudGl0bGUpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIHRoaXMuX3VuYmluZCA9IG9uY2UoCiAgICAgICAgICBkb2N1bWVudCwgInNob3cga2V5ZG93biAiICsKICAgICAgICAgIHBvaW50ZXJEb3duJDEsCiAgICAgICAgICB0aGlzLmhpZGUsCiAgICAgICAgICBmYWxzZSwKICAgICAgICAgIChlKSA9PgogICAgICAgICAgZS50eXBlID09PSBwb2ludGVyRG93biQxICYmICF3aXRoaW4oZS50YXJnZXQsIHRoaXMuJGVsKSB8fAogICAgICAgICAgZS50eXBlID09PSAna2V5ZG93bicgJiYgZS5rZXlDb2RlID09PSAyNyB8fAogICAgICAgICAgZS50eXBlID09PSAnc2hvdycgJiYgZS5kZXRhaWxbMF0gIT09IHRoaXMgJiYgZS5kZXRhaWxbMF0uJG5hbWUgPT09IHRoaXMuJG5hbWUpOwoKCiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zaG93VGltZXIpOwogICAgICAgICAgdGhpcy5zaG93VGltZXIgPSBzZXRUaW1lb3V0KHRoaXMuX3Nob3csIHRoaXMuZGVsYXkpOwogICAgICAgIH0sCgogICAgICAgIGFzeW5jIGhpZGUoKSB7CiAgICAgICAgICBpZiAobWF0Y2hlcyh0aGlzLiRlbCwgJ2lucHV0OmZvY3VzJykpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNob3dUaW1lcik7CgogICAgICAgICAgaWYgKCF0aGlzLmlzVG9nZ2xlZCh0aGlzLnRvb2x0aXAgfHwgbnVsbCkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGF3YWl0IHRoaXMudG9nZ2xlRWxlbWVudCh0aGlzLnRvb2x0aXAsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgICByZW1vdmUkMSh0aGlzLnRvb2x0aXApOwogICAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDsKICAgICAgICAgIHRoaXMuX3VuYmluZCgpOwogICAgICAgIH0sCgogICAgICAgIF9zaG93KCkgewogICAgICAgICAgdGhpcy50b29sdGlwID0gYXBwZW5kKAogICAgICAgICAgdGhpcy5jb250YWluZXIsICI8ZGl2IGNsYXNzPVwidWstIiArCiAgICAgICAgICB0aGlzLiRvcHRpb25zLm5hbWUgKyAiXCI+IDxkaXYgY2xhc3M9XCJ1ay0iICsKICAgICAgICAgIHRoaXMuJG9wdGlvbnMubmFtZSArICItaW5uZXJcIj4iICsgdGhpcy50aXRsZSArICI8L2Rpdj4gPC9kaXY+Iik7CgoKCiAgICAgICAgICBvbih0aGlzLnRvb2x0aXAsICd0b2dnbGVkJywgKGUsIHRvZ2dsZWQpID0+IHsKICAgICAgICAgICAgdGhpcy51cGRhdGVBcmlhKHRvZ2dsZWQpOwoKICAgICAgICAgICAgaWYgKCF0b2dnbGVkKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0aGlzLnBvc2l0aW9uQXQodGhpcy50b29sdGlwLCB0aGlzLiRlbCk7CgogICAgICAgICAgICBjb25zdCBbZGlyLCBhbGlnbl0gPSBnZXRBbGlnbm1lbnQodGhpcy50b29sdGlwLCB0aGlzLiRlbCwgdGhpcy5wb3MpOwoKICAgICAgICAgICAgdGhpcy5vcmlnaW4gPQogICAgICAgICAgICB0aGlzLmF4aXMgPT09ICd5JyA/CiAgICAgICAgICAgIGZsaXBQb3NpdGlvbihkaXIpICsgIi0iICsgYWxpZ24gOgogICAgICAgICAgICBhbGlnbiArICItIiArIGZsaXBQb3NpdGlvbihkaXIpOwogICAgICAgICAgfSk7CgogICAgICAgICAgdGhpcy50b2dnbGVFbGVtZW50KHRoaXMudG9vbHRpcCwgdHJ1ZSk7CiAgICAgICAgfSwKCiAgICAgICAgdXBkYXRlQXJpYSh0b2dnbGVkKSB7CiAgICAgICAgICBhdHRyKHRoaXMuJGVsLCAnYXJpYS1leHBhbmRlZCcsIHRvZ2dsZWQpOwogICAgICAgIH0gfSwKCgogICAgICBldmVudHM6IHsKICAgICAgICBmb2N1czogJ3Nob3cnLAogICAgICAgIGJsdXI6ICdoaWRlJywKCiAgICAgICAgW3BvaW50ZXJFbnRlciArICIgIiArIHBvaW50ZXJMZWF2ZV0oZSkgewogICAgICAgICAgaWYgKCFpc1RvdWNoKGUpKSB7CiAgICAgICAgICAgIHRoaXNbZS50eXBlID09PSBwb2ludGVyRW50ZXIgPyAnc2hvdycgOiAnaGlkZSddKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gQ2xpY2tpbmcgYSBidXR0b24gZG9lcyBub3QgZ2l2ZSBpdCBmb2N1cyBvbiBhbGwgYnJvd3NlcnMgYW5kIHBsYXRmb3JtcwogICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9idXR0b24jY2xpY2tpbmdfYW5kX2ZvY3VzCiAgICAgICAgW3BvaW50ZXJEb3duJDFdKGUpIHsKICAgICAgICAgIGlmIChpc1RvdWNoKGUpKSB7CiAgICAgICAgICAgIHRoaXMuc2hvdygpOwogICAgICAgICAgfQogICAgICAgIH0gfSB9OwoKCgogICAgZnVuY3Rpb24gbWFrZUZvY3VzYWJsZShlbCkgewogICAgICBpZiAoIWlzRm9jdXNhYmxlKGVsKSkgewogICAgICAgIGF0dHIoZWwsICd0YWJpbmRleCcsICcwJyk7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBnZXRBbGlnbm1lbnQoZWwsIHRhcmdldCwgX3JlZikge2xldCBbZGlyLCBhbGlnbl0gPSBfcmVmOwogICAgICBjb25zdCBlbE9mZnNldCA9IG9mZnNldChlbCk7CiAgICAgIGNvbnN0IHRhcmdldE9mZnNldCA9IG9mZnNldCh0YXJnZXQpOwogICAgICBjb25zdCBwcm9wZXJ0aWVzID0gWwogICAgICBbJ2xlZnQnLCAncmlnaHQnXSwKICAgICAgWyd0b3AnLCAnYm90dG9tJ11dOwoKCiAgICAgIGZvciAoY29uc3QgcHJvcHMgb2YgcHJvcGVydGllcykgewogICAgICAgIGlmIChlbE9mZnNldFtwcm9wc1swXV0gPj0gdGFyZ2V0T2Zmc2V0W3Byb3BzWzFdXSkgewogICAgICAgICAgZGlyID0gcHJvcHNbMV07CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKGVsT2Zmc2V0W3Byb3BzWzFdXSA8PSB0YXJnZXRPZmZzZXRbcHJvcHNbMF1dKSB7CiAgICAgICAgICBkaXIgPSBwcm9wc1swXTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQoKICAgICAgY29uc3QgcHJvcHMgPSBpbmNsdWRlcyhwcm9wZXJ0aWVzWzBdLCBkaXIpID8gcHJvcGVydGllc1sxXSA6IHByb3BlcnRpZXNbMF07CiAgICAgIGlmIChlbE9mZnNldFtwcm9wc1swXV0gPT09IHRhcmdldE9mZnNldFtwcm9wc1swXV0pIHsKICAgICAgICBhbGlnbiA9IHByb3BzWzBdOwogICAgICB9IGVsc2UgaWYgKGVsT2Zmc2V0W3Byb3BzWzFdXSA9PT0gdGFyZ2V0T2Zmc2V0W3Byb3BzWzFdXSkgewogICAgICAgIGFsaWduID0gcHJvcHNbMV07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWxpZ24gPSAnY2VudGVyJzsKICAgICAgfQoKICAgICAgcmV0dXJuIFtkaXIsIGFsaWduXTsKICAgIH0KCiAgICB2YXIgdXBsb2FkID0gewogICAgICBwcm9wczogewogICAgICAgIGFsbG93OiBTdHJpbmcsCiAgICAgICAgY2xzRHJhZ292ZXI6IFN0cmluZywKICAgICAgICBjb25jdXJyZW50OiBOdW1iZXIsCiAgICAgICAgbWF4U2l6ZTogTnVtYmVyLAogICAgICAgIG1ldGhvZDogU3RyaW5nLAogICAgICAgIG1pbWU6IFN0cmluZywKICAgICAgICBtc2dJbnZhbGlkTWltZTogU3RyaW5nLAogICAgICAgIG1zZ0ludmFsaWROYW1lOiBTdHJpbmcsCiAgICAgICAgbXNnSW52YWxpZFNpemU6IFN0cmluZywKICAgICAgICBtdWx0aXBsZTogQm9vbGVhbiwKICAgICAgICBuYW1lOiBTdHJpbmcsCiAgICAgICAgcGFyYW1zOiBPYmplY3QsCiAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgIHVybDogU3RyaW5nIH0sCgoKICAgICAgZGF0YTogewogICAgICAgIGFsbG93OiBmYWxzZSwKICAgICAgICBjbHNEcmFnb3ZlcjogJ3VrLWRyYWdvdmVyJywKICAgICAgICBjb25jdXJyZW50OiAxLAogICAgICAgIG1heFNpemU6IDAsCiAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgbWltZTogZmFsc2UsCiAgICAgICAgbXNnSW52YWxpZE1pbWU6ICdJbnZhbGlkIEZpbGUgVHlwZTogJXMnLAogICAgICAgIG1zZ0ludmFsaWROYW1lOiAnSW52YWxpZCBGaWxlIE5hbWU6ICVzJywKICAgICAgICBtc2dJbnZhbGlkU2l6ZTogJ0ludmFsaWQgRmlsZSBTaXplOiAlcyBLaWxvYnl0ZXMgTWF4JywKICAgICAgICBtdWx0aXBsZTogZmFsc2UsCiAgICAgICAgbmFtZTogJ2ZpbGVzW10nLAogICAgICAgIHBhcmFtczoge30sCiAgICAgICAgdHlwZTogJycsCiAgICAgICAgdXJsOiAnJywKICAgICAgICBhYm9ydDogbm9vcCwKICAgICAgICBiZWZvcmVBbGw6IG5vb3AsCiAgICAgICAgYmVmb3JlU2VuZDogbm9vcCwKICAgICAgICBjb21wbGV0ZTogbm9vcCwKICAgICAgICBjb21wbGV0ZUFsbDogbm9vcCwKICAgICAgICBlcnJvcjogbm9vcCwKICAgICAgICBmYWlsOiBub29wLAogICAgICAgIGxvYWQ6IG5vb3AsCiAgICAgICAgbG9hZEVuZDogbm9vcCwKICAgICAgICBsb2FkU3RhcnQ6IG5vb3AsCiAgICAgICAgcHJvZ3Jlc3M6IG5vb3AgfSwKCgogICAgICBldmVudHM6IHsKICAgICAgICBjaGFuZ2UoZSkgewogICAgICAgICAgaWYgKCFtYXRjaGVzKGUudGFyZ2V0LCAnaW5wdXRbdHlwZT0iZmlsZSJdJykpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKCiAgICAgICAgICBpZiAoZS50YXJnZXQuZmlsZXMpIHsKICAgICAgICAgICAgdGhpcy51cGxvYWQoZS50YXJnZXQuZmlsZXMpOwogICAgICAgICAgfQoKICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID0gJyc7CiAgICAgICAgfSwKCiAgICAgICAgZHJvcChlKSB7CiAgICAgICAgICBzdG9wKGUpOwoKICAgICAgICAgIGNvbnN0IHRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXI7CgogICAgICAgICAgaWYgKCEodHJhbnNmZXIgIT0gbnVsbCAmJiB0cmFuc2Zlci5maWxlcykpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIHJlbW92ZUNsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc0RyYWdvdmVyKTsKCiAgICAgICAgICB0aGlzLnVwbG9hZCh0cmFuc2Zlci5maWxlcyk7CiAgICAgICAgfSwKCiAgICAgICAgZHJhZ2VudGVyKGUpIHsKICAgICAgICAgIHN0b3AoZSk7CiAgICAgICAgfSwKCiAgICAgICAgZHJhZ292ZXIoZSkgewogICAgICAgICAgc3RvcChlKTsKICAgICAgICAgIGFkZENsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc0RyYWdvdmVyKTsKICAgICAgICB9LAoKICAgICAgICBkcmFnbGVhdmUoZSkgewogICAgICAgICAgc3RvcChlKTsKICAgICAgICAgIHJlbW92ZUNsYXNzKHRoaXMuJGVsLCB0aGlzLmNsc0RyYWdvdmVyKTsKICAgICAgICB9IH0sCgoKICAgICAgbWV0aG9kczogewogICAgICAgIGFzeW5jIHVwbG9hZChmaWxlcykgewogICAgICAgICAgZmlsZXMgPSB0b0FycmF5KGZpbGVzKTsKCiAgICAgICAgICBpZiAoIWZpbGVzLmxlbmd0aCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgdHJpZ2dlcih0aGlzLiRlbCwgJ3VwbG9hZCcsIFtmaWxlc10pOwoKICAgICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykgewogICAgICAgICAgICBpZiAodGhpcy5tYXhTaXplICYmIHRoaXMubWF4U2l6ZSAqIDEwMDAgPCBmaWxlLnNpemUpIHsKICAgICAgICAgICAgICB0aGlzLmZhaWwodGhpcy5tc2dJbnZhbGlkU2l6ZS5yZXBsYWNlKCclcycsIHRoaXMubWF4U2l6ZSkpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3cgJiYgIW1hdGNoKHRoaXMuYWxsb3csIGZpbGUubmFtZSkpIHsKICAgICAgICAgICAgICB0aGlzLmZhaWwodGhpcy5tc2dJbnZhbGlkTmFtZS5yZXBsYWNlKCclcycsIHRoaXMuYWxsb3cpKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICh0aGlzLm1pbWUgJiYgIW1hdGNoKHRoaXMubWltZSwgZmlsZS50eXBlKSkgewogICAgICAgICAgICAgIHRoaXMuZmFpbCh0aGlzLm1zZ0ludmFsaWRNaW1lLnJlcGxhY2UoJyVzJywgdGhpcy5taW1lKSk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7CiAgICAgICAgICAgIGZpbGVzID0gZmlsZXMuc2xpY2UoMCwgMSk7CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5iZWZvcmVBbGwodGhpcywgZmlsZXMpOwoKICAgICAgICAgIGNvbnN0IGNodW5rcyA9IGNodW5rKGZpbGVzLCB0aGlzLmNvbmN1cnJlbnQpOwogICAgICAgICAgY29uc3QgdXBsb2FkID0gYXN5bmMgKGZpbGVzKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgRm9ybURhdGEoKTsKCiAgICAgICAgICAgIGZpbGVzLmZvckVhY2goKGZpbGUpID0+IGRhdGEuYXBwZW5kKHRoaXMubmFtZSwgZmlsZSkpOwoKICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5wYXJhbXMpIHsKICAgICAgICAgICAgICBkYXRhLmFwcGVuZChrZXksIHRoaXMucGFyYW1zW2tleV0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGNvbnN0IHhociA9IGF3YWl0IGFqYXgodGhpcy51cmwsIHsKICAgICAgICAgICAgICAgIGRhdGEsCiAgICAgICAgICAgICAgICBtZXRob2Q6IHRoaXMubWV0aG9kLAogICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiB0aGlzLnR5cGUsCiAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiAoZW52KSA9PiB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHsgeGhyIH0gPSBlbnY7CiAgICAgICAgICAgICAgICAgIHhoci51cGxvYWQgJiYgb24oeGhyLnVwbG9hZCwgJ3Byb2dyZXNzJywgdGhpcy5wcm9ncmVzcyk7CiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiBbJ2xvYWRTdGFydCcsICdsb2FkJywgJ2xvYWRFbmQnLCAnYWJvcnQnXSkgewogICAgICAgICAgICAgICAgICAgIG9uKHhociwgdHlwZS50b0xvd2VyQ2FzZSgpLCB0aGlzW3R5cGVdKTsKICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmVmb3JlU2VuZChlbnYpOwogICAgICAgICAgICAgICAgfSB9KTsKCgogICAgICAgICAgICAgIHRoaXMuY29tcGxldGUoeGhyKTsKCiAgICAgICAgICAgICAgaWYgKGNodW5rcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGF3YWl0IHVwbG9hZChjaHVua3Muc2hpZnQoKSk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVBbGwoeGhyKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICB0aGlzLmVycm9yKGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9OwoKICAgICAgICAgIGF3YWl0IHVwbG9hZChjaHVua3Muc2hpZnQoKSk7CiAgICAgICAgfSB9IH07CgoKCiAgICBmdW5jdGlvbiBtYXRjaChwYXR0ZXJuLCBwYXRoKSB7CiAgICAgIHJldHVybiBwYXRoLm1hdGNoKAogICAgICBuZXcgUmVnRXhwKCJeIiArCiAgICAgIHBhdHRlcm4uCiAgICAgIHJlcGxhY2UoL1wvL2csICdcXC8nKS4KICAgICAgcmVwbGFjZSgvXCpcKi9nLCAnKFxcL1teXFwvXSspKicpLgogICAgICByZXBsYWNlKC9cKi9nLCAnW15cXC9dKycpLgogICAgICByZXBsYWNlKC8oKD8hXFwpKVw/L2csICckMS4nKSArICIkIiwKICAgICAgJ2knKSk7CgoKICAgIH0KCiAgICBmdW5jdGlvbiBjaHVuayhmaWxlcywgc2l6ZSkgewogICAgICBjb25zdCBjaHVua3MgPSBbXTsKICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkgKz0gc2l6ZSkgewogICAgICAgIGNodW5rcy5wdXNoKGZpbGVzLnNsaWNlKGksIGkgKyBzaXplKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGNodW5rczsKICAgIH0KCiAgICBmdW5jdGlvbiBzdG9wKGUpIHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgfQoKICAgIHZhciBjb21wb25lbnRzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoewogICAgICAgIF9fcHJvdG9fXzogbnVsbCwKICAgICAgICBDb3VudGRvd246IGNvdW50ZG93biwKICAgICAgICBGaWx0ZXI6IGZpbHRlciwKICAgICAgICBMaWdodGJveDogbGlnaHRib3gsCiAgICAgICAgTGlnaHRib3hQYW5lbDogTGlnaHRib3hQYW5lbCwKICAgICAgICBOb3RpZmljYXRpb246IG5vdGlmaWNhdGlvbiwKICAgICAgICBQYXJhbGxheDogcGFyYWxsYXgsCiAgICAgICAgU2xpZGVyOiBzbGlkZXIsCiAgICAgICAgU2xpZGVyUGFyYWxsYXg6IHNsaWRlclBhcmFsbGF4LAogICAgICAgIFNsaWRlc2hvdzogc2xpZGVzaG93LAogICAgICAgIFNsaWRlc2hvd1BhcmFsbGF4OiBzbGlkZXJQYXJhbGxheCwKICAgICAgICBTb3J0YWJsZTogc29ydGFibGUsCiAgICAgICAgVG9vbHRpcDogdG9vbHRpcCwKICAgICAgICBVcGxvYWQ6IHVwbG9hZAogICAgfSk7CgogICAgZWFjaChjb21wb25lbnRzLCAoY29tcG9uZW50LCBuYW1lKSA9PiBVSWtpdC5jb21wb25lbnQobmFtZSwgY29tcG9uZW50KSk7CgogICAgcmV0dXJuIFVJa2l0OwoKfSkpOwo=]]></data>
	</file>
	<file>
	  <filename>/js/uikit/uikit.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIFVJa2l0IDMuMTUuMSB8IGh0dHBzOi8vd3d3LmdldHVpa2l0LmNvbSB8IChjKSAyMDE0IC0gMjAyMiBZT090aGVtZSB8IE1JVCBMaWNlbnNlICovKGZ1bmN0aW9uKHVlLGRlKXt0eXBlb2YgZXhwb3J0cz09Im9iamVjdCImJnR5cGVvZiBtb2R1bGU8InUiP21vZHVsZS5leHBvcnRzPWRlKCk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoInVpa2l0IixkZSk6KHVlPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnVlfHxzZWxmLHVlLlVJa2l0PWRlKCkpfSkodGhpcyxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijtjb25zdHtoYXNPd25Qcm9wZXJ0eTp1ZSx0b1N0cmluZzpkZX09T2JqZWN0LnByb3RvdHlwZTtmdW5jdGlvbiBPdCh0LGUpe3JldHVybiB1ZS5jYWxsKHQsZSl9Y29uc3QgYW89L1xCKFtBLVpdKS9nLF90PXJ0KHQ9PnQucmVwbGFjZShhbywiLSQxIikudG9Mb3dlckNhc2UoKSksbG89Ly0oXHcpL2csWXQ9cnQodD0+dC5yZXBsYWNlKGxvLHVzKSksa3Q9cnQodD0+dC5sZW5ndGg/dXMobnVsbCx0LmNoYXJBdCgwKSkrdC5zbGljZSgxKToiIik7ZnVuY3Rpb24gdXModCxlKXtyZXR1cm4gZT9lLnRvVXBwZXJDYXNlKCk6IiJ9ZnVuY3Rpb24gdHQodCxlKXtyZXR1cm4gdD09bnVsbHx8dC5zdGFydHNXaXRoPT1udWxsP3ZvaWQgMDp0LnN0YXJ0c1dpdGgoZSl9ZnVuY3Rpb24gWHQodCxlKXtyZXR1cm4gdD09bnVsbHx8dC5lbmRzV2l0aD09bnVsbD92b2lkIDA6dC5lbmRzV2l0aChlKX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHQ9PW51bGx8fHQuaW5jbHVkZXM9PW51bGw/dm9pZCAwOnQuaW5jbHVkZXMoZSl9ZnVuY3Rpb24gYnQodCxlKXtyZXR1cm4gdD09bnVsbHx8dC5maW5kSW5kZXg9PW51bGw/dm9pZCAwOnQuZmluZEluZGV4KGUpfWNvbnN0e2lzQXJyYXk6ZXQsZnJvbTpiaX09QXJyYXkse2Fzc2lnbjp4dH09T2JqZWN0O2Z1bmN0aW9uIG10KHQpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIn1mdW5jdGlvbiBTdCh0KXtyZXR1cm4gdCE9PW51bGwmJnR5cGVvZiB0PT0ib2JqZWN0In1mdW5jdGlvbiBUdCh0KXtyZXR1cm4gZGUuY2FsbCh0KT09PSJbb2JqZWN0IE9iamVjdF0ifWZ1bmN0aW9uIEd0KHQpe3JldHVybiBTdCh0KSYmdD09PXQud2luZG93fWZ1bmN0aW9uIERlKHQpe3JldHVybiB5aSh0KT09PTl9ZnVuY3Rpb24geGkodCl7cmV0dXJuIHlpKHQpPj0xfWZ1bmN0aW9uIEp0KHQpe3JldHVybiB5aSh0KT09PTF9ZnVuY3Rpb24geWkodCl7cmV0dXJuIUd0KHQpJiZTdCh0KSYmdC5ub2RlVHlwZX1mdW5jdGlvbiBOZSh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJib29sZWFuIn1mdW5jdGlvbiBfKHQpe3JldHVybiB0eXBlb2YgdD09InN0cmluZyJ9ZnVuY3Rpb24gS3QodCl7cmV0dXJuIHR5cGVvZiB0PT0ibnVtYmVyIn1mdW5jdGlvbiBCdCh0KXtyZXR1cm4gS3QodCl8fF8odCkmJiFpc05hTih0LXBhcnNlRmxvYXQodCkpfWZ1bmN0aW9uIGZlKHQpe3JldHVybiEoZXQodCk/dC5sZW5ndGg6U3QodCk/T2JqZWN0LmtleXModCkubGVuZ3RoOiExKX1mdW5jdGlvbiBSKHQpe3JldHVybiB0PT09dm9pZCAwfWZ1bmN0aW9uICRpKHQpe3JldHVybiBOZSh0KT90OnQ9PT0idHJ1ZSJ8fHQ9PT0iMSJ8fHQ9PT0iIj8hMDp0PT09ImZhbHNlInx8dD09PSIwIj8hMTp0fWZ1bmN0aW9uIEN0KHQpe2NvbnN0IGU9TnVtYmVyKHQpO3JldHVybiBpc05hTihlKT8hMTplfWZ1bmN0aW9uIHcodCl7cmV0dXJuIHBhcnNlRmxvYXQodCl8fDB9ZnVuY3Rpb24gcSh0KXtyZXR1cm4gJCh0KVswXX1mdW5jdGlvbiAkKHQpe3JldHVybiB0JiYoeGkodCk/W3RdOkFycmF5LmZyb20odCkuZmlsdGVyKHhpKSl8fFtdfWZ1bmN0aW9uIE10KHQpe3ZhciBlO2lmKEd0KHQpKXJldHVybiB0O3Q9cSh0KTtjb25zdCBpPURlKHQpP3Q6KGU9dCk9PW51bGw/dm9pZCAwOmUub3duZXJEb2N1bWVudDtyZXR1cm4oaT09bnVsbD92b2lkIDA6aS5kZWZhdWx0Vmlldyl8fHdpbmRvd31mdW5jdGlvbiBwZSh0LGUpe3JldHVybiB0PT09ZXx8U3QodCkmJlN0KGUpJiZPYmplY3Qua2V5cyh0KS5sZW5ndGg9PT1PYmplY3Qua2V5cyhlKS5sZW5ndGgmJnl0KHQsKGkscyk9Pmk9PT1lW3NdKX1mdW5jdGlvbiBraSh0LGUsaSl7cmV0dXJuIHQucmVwbGFjZShuZXcgUmVnRXhwKGUrInwiK2ksImciKSxzPT5zPT09ZT9pOmUpfWZ1bmN0aW9uIFp0KHQpe3JldHVybiB0W3QubGVuZ3RoLTFdfWZ1bmN0aW9uIHl0KHQsZSl7Zm9yKGNvbnN0IGkgaW4gdClpZihlKHRbaV0saSk9PT0hMSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB6ZSh0LGUpe3JldHVybiB0LnNsaWNlKCkuc29ydCgoaSxzKT0+e2xldHtbZV06bj0wfT1pLHtbZV06bz0wfT1zO3JldHVybiBuPm8/MTpvPm4/LTE6MH0pfWZ1bmN0aW9uIGRzKHQsZSl7Y29uc3QgaT1uZXcgU2V0O3JldHVybiB0LmZpbHRlcihzPT57bGV0e1tlXTpufT1zO3JldHVybiBpLmhhcyhuKT8hMTppLmFkZChuKX0pfWZ1bmN0aW9uIFoodCxlLGkpe3JldHVybiBlPT09dm9pZCAwJiYoZT0wKSxpPT09dm9pZCAwJiYoaT0xKSxNYXRoLm1pbihNYXRoLm1heChDdCh0KXx8MCxlKSxpKX1mdW5jdGlvbiBUKCl7fWZ1bmN0aW9uIFNpKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsZT1uZXcgQXJyYXkodCksaT0wO2k8dDtpKyspZVtpXT1hcmd1bWVudHNbaV07cmV0dXJuW1siYm90dG9tIiwidG9wIl0sWyJyaWdodCIsImxlZnQiXV0uZXZlcnkocz0+e2xldFtuLG9dPXM7cmV0dXJuIE1hdGgubWluKC4uLmUubWFwKHI9PntsZXR7W25dOmF9PXI7cmV0dXJuIGF9KSktTWF0aC5tYXgoLi4uZS5tYXAocj0+e2xldHtbb106YX09cjtyZXR1cm4gYX0pKT4wfSl9ZnVuY3Rpb24gSGUodCxlKXtyZXR1cm4gdC54PD1lLnJpZ2h0JiZ0Lng+PWUubGVmdCYmdC55PD1lLmJvdHRvbSYmdC55Pj1lLnRvcH1mdW5jdGlvbiBUaSh0LGUsaSl7Y29uc3Qgcz1lPT09IndpZHRoIj8iaGVpZ2h0Ijoid2lkdGgiO3JldHVybntbc106dFtlXT9NYXRoLnJvdW5kKGkqdFtzXS90W2VdKTp0W3NdLFtlXTppfX1mdW5jdGlvbiBmcyh0LGUpe3Q9ey4uLnR9O2Zvcihjb25zdCBpIGluIHQpdD10W2ldPmVbaV0/VGkodCxpLGVbaV0pOnQ7cmV0dXJuIHR9ZnVuY3Rpb24gaG8odCxlKXt0PWZzKHQsZSk7Zm9yKGNvbnN0IGkgaW4gdCl0PXRbaV08ZVtpXT9UaSh0LGksZVtpXSk6dDtyZXR1cm4gdH1jb25zdCBMZT17cmF0aW86VGksY29udGFpbjpmcyxjb3Zlcjpob307ZnVuY3Rpb24gUXQodCxlLGkscyl7aT09PXZvaWQgMCYmKGk9MCkscz09PXZvaWQgMCYmKHM9ITEpLGU9JChlKTtjb25zdHtsZW5ndGg6bn09ZTtyZXR1cm4gbj8odD1CdCh0KT9DdCh0KTp0PT09Im5leHQiP2krMTp0PT09InByZXZpb3VzIj9pLTE6ZS5pbmRleE9mKHEodCkpLHM/Wih0LDAsbi0xKToodCU9bix0PDA/dCtuOnQpKTotMX1mdW5jdGlvbiBydCh0KXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGk9PmVbaV18fChlW2ldPXQoaSkpfWNsYXNzIEZle2NvbnN0cnVjdG9yKCl7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKChlLGkpPT57dGhpcy5yZWplY3Q9aSx0aGlzLnJlc29sdmU9ZX0pfX1mdW5jdGlvbiB5KHQsZSxpKXtpZihTdChlKSl7Zm9yKGNvbnN0IG4gaW4gZSl5KHQsbixlW25dKTtyZXR1cm59aWYoUihpKSl7dmFyIHM7cmV0dXJuKHM9cSh0KSk9PW51bGw/dm9pZCAwOnMuZ2V0QXR0cmlidXRlKGUpfWVsc2UgZm9yKGNvbnN0IG4gb2YgJCh0KSltdChpKSYmKGk9aS5jYWxsKG4seShuLGUpKSksaT09PW51bGw/Z2UobixlKTpuLnNldEF0dHJpYnV0ZShlLGkpfWZ1bmN0aW9uIEl0KHQsZSl7cmV0dXJuICQodCkuc29tZShpPT5pLmhhc0F0dHJpYnV0ZShlKSl9ZnVuY3Rpb24gZ2UodCxlKXtjb25zdCBpPSQodCk7Zm9yKGNvbnN0IHMgb2YgZS5zcGxpdCgiICIpKWZvcihjb25zdCBuIG9mIGkpbi5yZW1vdmVBdHRyaWJ1dGUocyl9ZnVuY3Rpb24gYXQodCxlKXtmb3IoY29uc3QgaSBvZltlLCJkYXRhLSIrZV0paWYoSXQodCxpKSlyZXR1cm4geSh0LGkpfWNvbnN0IGNvPXthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZW51aXRlbTohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9O2Z1bmN0aW9uIENpKHQpe3JldHVybiAkKHQpLnNvbWUoZT0+Y29bZS50YWdOYW1lLnRvTG93ZXJDYXNlKCldKX1mdW5jdGlvbiBWKHQpe3JldHVybiAkKHQpLnNvbWUoZT0+ZS5vZmZzZXRXaWR0aHx8ZS5vZmZzZXRIZWlnaHR8fGUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpfWNvbnN0IG1lPSJpbnB1dCxzZWxlY3QsdGV4dGFyZWEsYnV0dG9uIjtmdW5jdGlvbiBJaSh0KXtyZXR1cm4gJCh0KS5zb21lKGU9PkwoZSxtZSkpfWNvbnN0IFdlPW1lKyIsYVtocmVmXSxbdGFiaW5kZXhdIjtmdW5jdGlvbiBqZSh0KXtyZXR1cm4gTCh0LFdlKX1mdW5jdGlvbiBQKHQpe3ZhciBlO3JldHVybihlPXEodCkpPT1udWxsP3ZvaWQgMDplLnBhcmVudEVsZW1lbnR9ZnVuY3Rpb24gdmUodCxlKXtyZXR1cm4gJCh0KS5maWx0ZXIoaT0+TChpLGUpKX1mdW5jdGlvbiBMKHQsZSl7cmV0dXJuICQodCkuc29tZShpPT5pLm1hdGNoZXMoZSkpfWZ1bmN0aW9uIGl0KHQsZSl7cmV0dXJuIEp0KHQpP3QuY2xvc2VzdCh0dChlLCI+Iik/ZS5zbGljZSgxKTplKTokKHQpLm1hcChpPT5pdChpLGUpKS5maWx0ZXIoQm9vbGVhbil9ZnVuY3Rpb24gQih0LGUpe3JldHVybiBfKGUpPyEhaXQodCxlKTpxKGUpLmNvbnRhaW5zKHEodCkpfWZ1bmN0aW9uIFV0KHQsZSl7Y29uc3QgaT1bXTtmb3IoO3Q9UCh0KTspKCFlfHxMKHQsZSkpJiZpLnB1c2godCk7cmV0dXJuIGl9ZnVuY3Rpb24gTSh0LGUpe3Q9cSh0KTtjb25zdCBpPXQ/JCh0LmNoaWxkcmVuKTpbXTtyZXR1cm4gZT92ZShpLGUpOml9ZnVuY3Rpb24gdGUodCxlKXtyZXR1cm4gZT8kKHQpLmluZGV4T2YocShlKSk6TShQKHQpKS5pbmRleE9mKHQpfWZ1bmN0aW9uIGR0KHQsZSl7cmV0dXJuIFBpKHQsZ3ModCxlKSl9ZnVuY3Rpb24gd2UodCxlKXtyZXR1cm4gYmUodCxncyh0LGUpKX1mdW5jdGlvbiBQaSh0LGUpe3JldHVybiBxKG1zKHQsZSwicXVlcnlTZWxlY3RvciIpKX1mdW5jdGlvbiBiZSh0LGUpe3JldHVybiAkKG1zKHQsZSwicXVlcnlTZWxlY3RvckFsbCIpKX1jb25zdCB1bz0vKF58W15cXF0sKVxzKlshPit+LV0vLHBzPXJ0KHQ9PnQubWF0Y2godW8pKTtmdW5jdGlvbiBncyh0LGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT1kb2N1bWVudCksXyh0KSYmcHModCl8fERlKGUpP2U6ZS5vd25lckRvY3VtZW50fWNvbnN0IGZvPS8oWyE+K34tXSkoPz1ccytbIT4rfi1dfFxzKiQpL2cscG89cnQodD0+dC5yZXBsYWNlKGZvLCIkMSAqIikpO2Z1bmN0aW9uIG1zKHQsZSxpKXtpZihlPT09dm9pZCAwJiYoZT1kb2N1bWVudCksIXR8fCFfKHQpKXJldHVybiB0O2lmKHQ9cG8odCkscHModCkpe2NvbnN0IHM9bW8odCk7dD0iIjtmb3IobGV0IG4gb2Ygcyl7bGV0IG89ZTtpZihuWzBdPT09IiEiKXtjb25zdCByPW4uc3Vic3RyKDEpLnRyaW0oKS5zcGxpdCgiICIpO2lmKG89aXQoUChlKSxyWzBdKSxuPXIuc2xpY2UoMSkuam9pbigiICIpLnRyaW0oKSwhbi5sZW5ndGgmJnMubGVuZ3RoPT09MSlyZXR1cm4gb31pZihuWzBdPT09Ii0iKXtjb25zdCByPW4uc3Vic3RyKDEpLnRyaW0oKS5zcGxpdCgiICIpLGE9KG98fGUpLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7bz1MKGEsbi5zdWJzdHIoMSkpP2E6bnVsbCxuPXIuc2xpY2UoMSkuam9pbigiICIpfW8mJih0Kz0odD8iLCI6IiIpK3ZvKG8pKyIgIituKX1lPWRvY3VtZW50fXRyeXtyZXR1cm4gZVtpXSh0KX1jYXRjaHtyZXR1cm4gbnVsbH19Y29uc3QgZ289Ly4qP1teXFxdKD86LHwkKS9nLG1vPXJ0KHQ9PnQubWF0Y2goZ28pLm1hcChlPT5lLnJlcGxhY2UoLywkLywiIikudHJpbSgpKSk7ZnVuY3Rpb24gdm8odCl7Y29uc3QgZT1bXTtmb3IoO3QucGFyZW50Tm9kZTspe2NvbnN0IGk9eSh0LCJpZCIpO2lmKGkpe2UudW5zaGlmdCgiIyIrQWkoaSkpO2JyZWFrfWVsc2V7bGV0e3RhZ05hbWU6c309dDtzIT09IkhUTUwiJiYocys9IjpudGgtY2hpbGQoIisodGUodCkrMSkrIikiKSxlLnVuc2hpZnQocyksdD10LnBhcmVudE5vZGV9fXJldHVybiBlLmpvaW4oIiA+ICIpfWZ1bmN0aW9uIEFpKHQpe3JldHVybiBfKHQpP0NTUy5lc2NhcGUodCk6IiJ9ZnVuY3Rpb24gaygpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGU9bmV3IEFycmF5KHQpLGk9MDtpPHQ7aSsrKWVbaV09YXJndW1lbnRzW2ldO2xldFtzLG4sbyxyLGE9ITFdPUVpKGUpO3IubGVuZ3RoPjEmJihyPWJvKHIpKSxhIT1udWxsJiZhLnNlbGYmJihyPXhvKHIpKSxvJiYocj13byhvLHIpKTtmb3IoY29uc3QgbCBvZiBuKWZvcihjb25zdCBoIG9mIHMpaC5hZGRFdmVudExpc3RlbmVyKGwscixhKTtyZXR1cm4oKT0+RHQocyxuLHIsYSl9ZnVuY3Rpb24gRHQoKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxlPW5ldyBBcnJheSh0KSxpPTA7aTx0O2krKyllW2ldPWFyZ3VtZW50c1tpXTtsZXRbcyxuLCxvLHI9ITFdPUVpKGUpO2Zvcihjb25zdCBhIG9mIG4pZm9yKGNvbnN0IGwgb2YgcylsLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxvLHIpfWZ1bmN0aW9uIE4oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxlPW5ldyBBcnJheSh0KSxpPTA7aTx0O2krKyllW2ldPWFyZ3VtZW50c1tpXTtjb25zdFtzLG4sbyxyLGE9ITEsbF09RWkoZSksaD1rKHMsbixvLHU9Pntjb25zdCBkPSFsfHxsKHUpO2QmJihoKCkscih1LGQpKX0sYSk7cmV0dXJuIGh9ZnVuY3Rpb24gZyh0LGUsaSl7cmV0dXJuIE9pKHQpLmV2ZXJ5KHM9PnMuZGlzcGF0Y2hFdmVudChOdChlLCEwLCEwLGkpKSl9ZnVuY3Rpb24gTnQodCxlLGkscyl7cmV0dXJuIGU9PT12b2lkIDAmJihlPSEwKSxpPT09dm9pZCAwJiYoaT0hMSksXyh0KSYmKHQ9bmV3IEN1c3RvbUV2ZW50KHQse2J1YmJsZXM6ZSxjYW5jZWxhYmxlOmksZGV0YWlsOnN9KSksdH1mdW5jdGlvbiBFaSh0KXtyZXR1cm4gdFswXT1PaSh0WzBdKSxfKHRbMV0pJiYodFsxXT10WzFdLnNwbGl0KCIgIikpLG10KHRbMl0pJiZ0LnNwbGljZSgyLDAsITEpLHR9ZnVuY3Rpb24gd28odCxlKXtyZXR1cm4gaT0+e2NvbnN0IHM9dFswXT09PSI+Ij9iZSh0LGkuY3VycmVudFRhcmdldCkucmV2ZXJzZSgpLmZpbHRlcihuPT5CKGkudGFyZ2V0LG4pKVswXTppdChpLnRhcmdldCx0KTtzJiYoaS5jdXJyZW50PXMsZS5jYWxsKHRoaXMsaSkpfX1mdW5jdGlvbiBibyh0KXtyZXR1cm4gZT0+ZXQoZS5kZXRhaWwpP3QoZSwuLi5lLmRldGFpbCk6dChlKX1mdW5jdGlvbiB4byh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoZS50YXJnZXQ9PT1lLmN1cnJlbnRUYXJnZXR8fGUudGFyZ2V0PT09ZS5jdXJyZW50KXJldHVybiB0LmNhbGwobnVsbCxlKX19ZnVuY3Rpb24gdnModCl7cmV0dXJuIHQmJiJhZGRFdmVudExpc3RlbmVyImluIHR9ZnVuY3Rpb24geW8odCl7cmV0dXJuIHZzKHQpP3Q6cSh0KX1mdW5jdGlvbiBPaSh0KXtyZXR1cm4gZXQodCk/dC5tYXAoeW8pLmZpbHRlcihCb29sZWFuKTpfKHQpP2JlKHQpOnZzKHQpP1t0XTokKHQpfWZ1bmN0aW9uICR0KHQpe3JldHVybiB0LnBvaW50ZXJUeXBlPT09InRvdWNoInx8ISF0LnRvdWNoZXN9ZnVuY3Rpb24gZWUodCl7dmFyIGUsaTtjb25zdHtjbGllbnRYOnMsY2xpZW50WTpufT0oKGU9dC50b3VjaGVzKT09bnVsbD92b2lkIDA6ZVswXSl8fCgoaT10LmNoYW5nZWRUb3VjaGVzKT09bnVsbD92b2lkIDA6aVswXSl8fHQ7cmV0dXJue3g6cyx5Om59fWZ1bmN0aW9uIHdzKHQsZSl7Y29uc3QgaT17ZGF0YTpudWxsLG1ldGhvZDoiR0VUIixoZWFkZXJzOnt9LHhocjpuZXcgWE1MSHR0cFJlcXVlc3QsYmVmb3JlU2VuZDpULHJlc3BvbnNlVHlwZToiIiwuLi5lfTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+aS5iZWZvcmVTZW5kKGkpKS50aGVuKCgpPT4kbyh0LGkpKX1mdW5jdGlvbiAkbyh0LGUpe3JldHVybiBuZXcgUHJvbWlzZSgoaSxzKT0+e2NvbnN0e3hocjpufT1lO2Zvcihjb25zdCBvIGluIGUpaWYobyBpbiBuKXRyeXtuW29dPWVbb119Y2F0Y2h7fW4ub3BlbihlLm1ldGhvZC50b1VwcGVyQ2FzZSgpLHQpO2Zvcihjb25zdCBvIGluIGUuaGVhZGVycyluLnNldFJlcXVlc3RIZWFkZXIobyxlLmhlYWRlcnNbb10pO2sobiwibG9hZCIsKCk9PntuLnN0YXR1cz09PTB8fG4uc3RhdHVzPj0yMDAmJm4uc3RhdHVzPDMwMHx8bi5zdGF0dXM9PT0zMDQ/aShuKTpzKHh0KEVycm9yKG4uc3RhdHVzVGV4dCkse3hocjpuLHN0YXR1czpuLnN0YXR1c30pKX0pLGsobiwiZXJyb3IiLCgpPT5zKHh0KEVycm9yKCJOZXR3b3JrIEVycm9yIikse3hocjpufSkpKSxrKG4sInRpbWVvdXQiLCgpPT5zKHh0KEVycm9yKCJOZXR3b3JrIFRpbWVvdXQiKSx7eGhyOm59KSkpLG4uc2VuZChlLmRhdGEpfSl9ZnVuY3Rpb24gYnModCxlLGkpe3JldHVybiBuZXcgUHJvbWlzZSgocyxuKT0+e2NvbnN0IG89bmV3IEltYWdlO28ub25lcnJvcj1yPT57bihyKX0sby5vbmxvYWQ9KCk9PntzKG8pfSxpJiYoby5zaXplcz1pKSxlJiYoby5zcmNzZXQ9ZSksby5zcmM9dH0pfWNvbnN0IGtvPXsiYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCI6ITAsImNvbHVtbi1jb3VudCI6ITAsImZpbGwtb3BhY2l0eSI6ITAsImZsZXgtZ3JvdyI6ITAsImZsZXgtc2hyaW5rIjohMCwiZm9udC13ZWlnaHQiOiEwLCJsaW5lLWhlaWdodCI6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLCJzdHJva2UtZGFzaGFycmF5IjohMCwic3Ryb2tlLWRhc2hvZmZzZXQiOiEwLHdpZG93czohMCwiei1pbmRleCI6ITAsem9vbTohMH07ZnVuY3Rpb24gYyh0LGUsaSxzKXtzPT09dm9pZCAwJiYocz0iIik7Y29uc3Qgbj0kKHQpO2Zvcihjb25zdCBvIG9mIG4paWYoXyhlKSl7aWYoZT1faShlKSxSKGkpKXJldHVybiBnZXRDb21wdXRlZFN0eWxlKG8pLmdldFByb3BlcnR5VmFsdWUoZSk7by5zdHlsZS5zZXRQcm9wZXJ0eShlLEJ0KGkpJiYha29bZV0/aSsicHgiOml8fEt0KGkpP2k6IiIscyl9ZWxzZSBpZihldChlKSl7Y29uc3Qgcj17fTtmb3IoY29uc3QgYSBvZiBlKXJbYV09YyhvLGEpO3JldHVybiByfWVsc2UgU3QoZSkmJihzPWkseXQoZSwocixhKT0+YyhvLGEscixzKSkpO3JldHVybiBuWzBdfWNvbnN0IF9pPXJ0KHQ9PlNvKHQpKTtmdW5jdGlvbiBTbyh0KXtpZih0dCh0LCItLSIpKXJldHVybiB0O3Q9X3QodCk7Y29uc3R7c3R5bGU6ZX09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2lmKHQgaW4gZSlyZXR1cm4gdDtmb3IoY29uc3QgaSBvZlsid2Via2l0IiwibW96Il0pe2NvbnN0IHM9Ii0iK2krIi0iK3Q7aWYocyBpbiBlKXJldHVybiBzfX1mdW5jdGlvbiBiKHQpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KGU+MT9lLTE6MCkscz0xO3M8ZTtzKyspaVtzLTFdPWFyZ3VtZW50c1tzXTt4cyh0LGksImFkZCIpfWZ1bmN0aW9uIE8odCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkoZT4xP2UtMTowKSxzPTE7czxlO3MrKylpW3MtMV09YXJndW1lbnRzW3NdO3hzKHQsaSwicmVtb3ZlIil9ZnVuY3Rpb24gQmkodCxlKXt5KHQsImNsYXNzIixpPT4oaXx8IiIpLnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxiIitlKyJcXGJcXHM/IiwiZyIpLCIiKSl9ZnVuY3Rpb24gTWkodCl7IShhcmd1bWVudHMubGVuZ3RoPD0xKSYmYXJndW1lbnRzWzFdJiZPKHQsYXJndW1lbnRzLmxlbmd0aDw9MT92b2lkIDA6YXJndW1lbnRzWzFdKSwhKGFyZ3VtZW50cy5sZW5ndGg8PTIpJiZhcmd1bWVudHNbMl0mJmIodCxhcmd1bWVudHMubGVuZ3RoPD0yP3ZvaWQgMDphcmd1bWVudHNbMl0pfWZ1bmN0aW9uIEkodCxlKXtyZXR1cm5bZV09RGkoZSksISFlJiYkKHQpLnNvbWUoaT0+aS5jbGFzc0xpc3QuY29udGFpbnMoZSkpfWZ1bmN0aW9uIFcodCxlLGkpe2NvbnN0IHM9RGkoZSk7UihpKXx8KGk9ISFpKTtmb3IoY29uc3QgbiBvZiAkKHQpKWZvcihjb25zdCBvIG9mIHMpbi5jbGFzc0xpc3QudG9nZ2xlKG8saSl9ZnVuY3Rpb24geHModCxlLGkpe2U9ZS5yZWR1Y2UoKHMsbik9PnMuY29uY2F0KERpKG4pKSxbXSk7Zm9yKGNvbnN0IHMgb2YgJCh0KSlzLmNsYXNzTGlzdFtpXSguLi5lKX1mdW5jdGlvbiBEaSh0KXtyZXR1cm4gU3RyaW5nKHQpLnNwbGl0KC9cc3wsLykuZmlsdGVyKEJvb2xlYW4pfWZ1bmN0aW9uIFRvKHQsZSxpLHMpe3JldHVybiBpPT09dm9pZCAwJiYoaT00MDApLHM9PT12b2lkIDAmJihzPSJsaW5lYXIiKSxpPU1hdGgucm91bmQoaSksUHJvbWlzZS5hbGwoJCh0KS5tYXAobj0+bmV3IFByb21pc2UoKG8scik9Pntmb3IoY29uc3QgbCBpbiBlKXtjb25zdCBoPWMobixsKTtoPT09IiImJmMobixsLGgpfWNvbnN0IGE9c2V0VGltZW91dCgoKT0+ZyhuLCJ0cmFuc2l0aW9uZW5kIiksaSk7TihuLCJ0cmFuc2l0aW9uZW5kIHRyYW5zaXRpb25jYW5jZWxlZCIsbD0+e2xldHt0eXBlOmh9PWw7Y2xlYXJUaW1lb3V0KGEpLE8obiwidWstdHJhbnNpdGlvbiIpLGMobix7dHJhbnNpdGlvblByb3BlcnR5OiIiLHRyYW5zaXRpb25EdXJhdGlvbjoiIix0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb246IiJ9KSxoPT09InRyYW5zaXRpb25jYW5jZWxlZCI/cigpOm8obil9LHtzZWxmOiEwfSksYihuLCJ1ay10cmFuc2l0aW9uIiksYyhuLHt0cmFuc2l0aW9uUHJvcGVydHk6T2JqZWN0LmtleXMoZSkubWFwKF9pKS5qb2luKCIsIiksdHJhbnNpdGlvbkR1cmF0aW9uOmkrIm1zIix0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb246cywuLi5lfSl9KSkpfWNvbnN0IFM9e3N0YXJ0OlRvLGFzeW5jIHN0b3AodCl7Zyh0LCJ0cmFuc2l0aW9uZW5kIiksYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCl9LGFzeW5jIGNhbmNlbCh0KXtnKHQsInRyYW5zaXRpb25jYW5jZWxlZCIpLGF3YWl0IFByb21pc2UucmVzb2x2ZSgpfSxpblByb2dyZXNzKHQpe3JldHVybiBJKHQsInVrLXRyYW5zaXRpb24iKX19LHhlPSJ1ay1hbmltYXRpb24tIjtmdW5jdGlvbiB5cyh0LGUsaSxzLG4pe3JldHVybiBpPT09dm9pZCAwJiYoaT0yMDApLFByb21pc2UuYWxsKCQodCkubWFwKG89Pm5ldyBQcm9taXNlKChyLGEpPT57ZyhvLCJhbmltYXRpb25jYW5jZWxlZCIpO2NvbnN0IGw9c2V0VGltZW91dCgoKT0+ZyhvLCJhbmltYXRpb25lbmQiKSxpKTtOKG8sImFuaW1hdGlvbmVuZCBhbmltYXRpb25jYW5jZWxlZCIsaD0+e2xldHt0eXBlOnV9PWg7Y2xlYXJUaW1lb3V0KGwpLHU9PT0iYW5pbWF0aW9uY2FuY2VsZWQiP2EoKTpyKG8pLGMobywiYW5pbWF0aW9uRHVyYXRpb24iLCIiKSxCaShvLHhlKyJcXFMqIil9LHtzZWxmOiEwfSksYyhvLCJhbmltYXRpb25EdXJhdGlvbiIsaSsibXMiKSxiKG8sZSx4ZSsobj8ibGVhdmUiOiJlbnRlciIpKSx0dChlLHhlKSYmKHMmJmIobywidWstdHJhbnNmb3JtLW9yaWdpbi0iK3MpLG4mJmIobyx4ZSsicmV2ZXJzZSIpKX0pKSl9Y29uc3QgQ289bmV3IFJlZ0V4cCh4ZSsiKGVudGVyfGxlYXZlKSIpLGZ0PXtpbjp5cyxvdXQodCxlLGkscyl7cmV0dXJuIHlzKHQsZSxpLHMsITApfSxpblByb2dyZXNzKHQpe3JldHVybiBDby50ZXN0KHkodCwiY2xhc3MiKSl9LGNhbmNlbCh0KXtnKHQsImFuaW1hdGlvbmNhbmNlbGVkIil9fSx6dD17d2lkdGg6WyJsZWZ0IiwicmlnaHQiXSxoZWlnaHQ6WyJ0b3AiLCJib3R0b20iXX07ZnVuY3Rpb24geCh0KXtjb25zdCBlPUp0KHQpP3EodCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6e2hlaWdodDpHKHQpLHdpZHRoOnllKHQpLHRvcDowLGxlZnQ6MH07cmV0dXJue2hlaWdodDplLmhlaWdodCx3aWR0aDplLndpZHRoLHRvcDplLnRvcCxsZWZ0OmUubGVmdCxib3R0b206ZS50b3ArZS5oZWlnaHQscmlnaHQ6ZS5sZWZ0K2Uud2lkdGh9fWZ1bmN0aW9uIEEodCxlKXtjb25zdCBpPXgodCk7aWYodCl7Y29uc3R7c2Nyb2xsWTpuLHNjcm9sbFg6b309TXQodCkscj17aGVpZ2h0Om4sd2lkdGg6b307Zm9yKGNvbnN0IGEgaW4genQpZm9yKGNvbnN0IGwgb2YgenRbYV0paVtsXSs9clthXX1pZighZSlyZXR1cm4gaTtjb25zdCBzPWModCwicG9zaXRpb24iKTt5dChjKHQsWyJsZWZ0IiwidG9wIl0pLChuLG8pPT5jKHQsbyxlW29dLWlbb10rdyhzPT09ImFic29sdXRlIiYmbj09PSJhdXRvIj9SZSh0KVtvXTpuKSkpfWZ1bmN0aW9uIFJlKHQpe2xldHt0b3A6ZSxsZWZ0Oml9PUEodCk7Y29uc3R7b3duZXJEb2N1bWVudDp7Ym9keTpzLGRvY3VtZW50RWxlbWVudDpufSxvZmZzZXRQYXJlbnQ6b309cSh0KTtsZXQgcj1vfHxuO2Zvcig7ciYmKHI9PT1zfHxyPT09bikmJmMociwicG9zaXRpb24iKT09PSJzdGF0aWMiOylyPXIucGFyZW50Tm9kZTtpZihKdChyKSl7Y29uc3QgYT1BKHIpO2UtPWEudG9wK3coYyhyLCJib3JkZXJUb3BXaWR0aCIpKSxpLT1hLmxlZnQrdyhjKHIsImJvcmRlckxlZnRXaWR0aCIpKX1yZXR1cm57dG9wOmUtdyhjKHQsIm1hcmdpblRvcCIpKSxsZWZ0OmktdyhjKHQsIm1hcmdpbkxlZnQiKSl9fWZ1bmN0aW9uIEh0KHQpe3Q9cSh0KTtjb25zdCBlPVt0Lm9mZnNldFRvcCx0Lm9mZnNldExlZnRdO2Zvcig7dD10Lm9mZnNldFBhcmVudDspaWYoZVswXSs9dC5vZmZzZXRUb3ArdyhjKHQsImJvcmRlclRvcFdpZHRoIikpLGVbMV0rPXQub2Zmc2V0TGVmdCt3KGModCwiYm9yZGVyTGVmdFdpZHRoIikpLGModCwicG9zaXRpb24iKT09PSJmaXhlZCIpe2NvbnN0IGk9TXQodCk7cmV0dXJuIGVbMF0rPWkuc2Nyb2xsWSxlWzFdKz1pLnNjcm9sbFgsZX1yZXR1cm4gZX1jb25zdCBHPSRzKCJoZWlnaHQiKSx5ZT0kcygid2lkdGgiKTtmdW5jdGlvbiAkcyh0KXtjb25zdCBlPWt0KHQpO3JldHVybihpLHMpPT57aWYoUihzKSl7aWYoR3QoaSkpcmV0dXJuIGlbImlubmVyIitlXTtpZihEZShpKSl7Y29uc3Qgbj1pLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gTWF0aC5tYXgoblsib2Zmc2V0IitlXSxuWyJzY3JvbGwiK2VdKX1yZXR1cm4gaT1xKGkpLHM9YyhpLHQpLHM9cz09PSJhdXRvIj9pWyJvZmZzZXQiK2VdOncocyl8fDAscy1pZShpLHQpfWVsc2UgcmV0dXJuIGMoaSx0LCFzJiZzIT09MD8iIjorcytpZShpLHQpKyJweCIpfX1mdW5jdGlvbiBpZSh0LGUsaSl7cmV0dXJuIGk9PT12b2lkIDAmJihpPSJib3JkZXItYm94IiksYyh0LCJib3hTaXppbmciKT09PWk/enRbZV0ubWFwKGt0KS5yZWR1Y2UoKHMsbik9PnMrdyhjKHQsInBhZGRpbmciK24pKSt3KGModCwiYm9yZGVyIituKyJXaWR0aCIpKSwwKTowfWZ1bmN0aW9uIHFlKHQpe2Zvcihjb25zdCBlIGluIHp0KWZvcihjb25zdCBpIGluIHp0W2VdKWlmKHp0W2VdW2ldPT09dClyZXR1cm4genRbZV1bMS1pXTtyZXR1cm4gdH1mdW5jdGlvbiBKKHQsZSxpLHMpe3JldHVybiBlPT09dm9pZCAwJiYoZT0id2lkdGgiKSxpPT09dm9pZCAwJiYoaT13aW5kb3cpLHM9PT12b2lkIDAmJihzPSExKSxfKHQpP1BvKHQpLnJlZHVjZSgobixvKT0+e2NvbnN0IHI9RW8obyk7cmV0dXJuIHImJihvPU9vKHI9PT0idmgiP0coTXQoaSkpOnI9PT0idnciP3llKE10KGkpKTpzP2lbIm9mZnNldCIra3QoZSldOngoaSlbZV0sbykpLG4rdyhvKX0sMCk6dyh0KX1jb25zdCBJbz0vLT9cZCsoPzpcLlxkKyk/KD86dlt3aF18JXxweCk/L2csUG89cnQodD0+dC50b1N0cmluZygpLnJlcGxhY2UoL1xzL2csIiIpLm1hdGNoKElvKXx8W10pLEFvPS8oPzp2W2h3XXwlKSQvLEVvPXJ0KHQ9Pih0Lm1hdGNoKEFvKXx8W10pWzBdKTtmdW5jdGlvbiBPbyh0LGUpe3JldHVybiB0KncoZSkvMTAwfWZ1bmN0aW9uIE5pKHQpe2lmKGRvY3VtZW50LnJlYWR5U3RhdGUhPT0ibG9hZGluZyIpe3QoKTtyZXR1cm59Tihkb2N1bWVudCwiRE9NQ29udGVudExvYWRlZCIsdCl9ZnVuY3Rpb24gcHQodCxlKXt2YXIgaTtyZXR1cm4odD09bnVsbHx8KGk9dC50YWdOYW1lKT09bnVsbD92b2lkIDA6aS50b0xvd2VyQ2FzZSgpKT09PWUudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBrcyh0KXtyZXR1cm4gdD12KHQpLHQuaW5uZXJIVE1MPSIiLHR9ZnVuY3Rpb24gUHQodCxlKXtyZXR1cm4gUihlKT92KHQpLmlubmVySFRNTDpqKGtzKHQpLGUpfWNvbnN0IF9vPVllKCJwcmVwZW5kIiksaj1ZZSgiYXBwZW5kIiksemk9WWUoImJlZm9yZSIpLFZlPVllKCJhZnRlciIpO2Z1bmN0aW9uIFllKHQpe3JldHVybiBmdW5jdGlvbihlLGkpe3ZhciBzO2NvbnN0IG49JChfKGkpP0x0KGkpOmkpO3JldHVybihzPXYoZSkpPT1udWxsfHxzW3RdKC4uLm4pLFNzKG4pfX1mdW5jdGlvbiBjdCh0KXskKHQpLmZvckVhY2goZT0+ZS5yZW1vdmUoKSl9ZnVuY3Rpb24gSGkodCxlKXtmb3IoZT1xKHppKHQsZSkpO2UuZmlyc3RDaGlsZDspZT1lLmZpcnN0Q2hpbGQ7cmV0dXJuIGooZSx0KSxlfWZ1bmN0aW9uIExpKHQsZSl7cmV0dXJuICQoJCh0KS5tYXAoaT0+aS5oYXNDaGlsZE5vZGVzKCk/SGkoJChpLmNoaWxkTm9kZXMpLGUpOmooaSxlKSkpfWZ1bmN0aW9uIFhlKHQpeyQodCkubWFwKFApLmZpbHRlcigoZSxpLHMpPT5zLmluZGV4T2YoZSk9PT1pKS5mb3JFYWNoKGU9PmUucmVwbGFjZVdpdGgoLi4uZS5jaGlsZE5vZGVzKSl9Y29uc3QgQm89L15ccyo8KFx3K3whKVtePl0qPi8sTW89L148KFx3KylccypcLz8+KD86PFwvXDE+KT8kLztmdW5jdGlvbiBMdCh0KXtjb25zdCBlPU1vLmV4ZWModCk7aWYoZSlyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlWzFdKTtjb25zdCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBCby50ZXN0KHQpP2kuaW5zZXJ0QWRqYWNlbnRIVE1MKCJiZWZvcmVlbmQiLHQudHJpbSgpKTppLnRleHRDb250ZW50PXQsU3MoaS5jaGlsZE5vZGVzKX1mdW5jdGlvbiBTcyh0KXtyZXR1cm4gdC5sZW5ndGg+MT90OnRbMF19ZnVuY3Rpb24gdnQodCxlKXtpZighIUp0KHQpKWZvcihlKHQpLHQ9dC5maXJzdEVsZW1lbnRDaGlsZDt0Oyl7Y29uc3QgaT10Lm5leHRFbGVtZW50U2libGluZzt2dCh0LGUpLHQ9aX19ZnVuY3Rpb24gdih0LGUpe3JldHVybiBUcyh0KT9xKEx0KHQpKTpQaSh0LGUpfWZ1bmN0aW9uIEQodCxlKXtyZXR1cm4gVHModCk/JChMdCh0KSk6YmUodCxlKX1mdW5jdGlvbiBUcyh0KXtyZXR1cm4gXyh0KSYmdHQodC50cmltKCksIjwiKX1jb25zdCBGdD10eXBlb2Ygd2luZG93PCJ1IixYPUZ0JiZ5KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwiZGlyIik9PT0icnRsIixXdD1GdCYmIm9udG91Y2hzdGFydCJpbiB3aW5kb3csc2U9RnQmJndpbmRvdy5Qb2ludGVyRXZlbnQsZ3Q9c2U/InBvaW50ZXJkb3duIjpXdD8idG91Y2hzdGFydCI6Im1vdXNlZG93biIsR2U9c2U/InBvaW50ZXJtb3ZlIjpXdD8idG91Y2htb3ZlIjoibW91c2Vtb3ZlIixBdD1zZT8icG9pbnRlcnVwIjpXdD8idG91Y2hlbmQiOiJtb3VzZXVwIixqdD1zZT8icG9pbnRlcmVudGVyIjpXdD8iIjoibW91c2VlbnRlciIsbmU9c2U/InBvaW50ZXJsZWF2ZSI6V3Q/IiI6Im1vdXNlbGVhdmUiLEplPXNlPyJwb2ludGVyY2FuY2VsIjoidG91Y2hjYW5jZWwiLHo9e3JlYWRzOltdLHdyaXRlczpbXSxyZWFkKHQpe3JldHVybiB0aGlzLnJlYWRzLnB1c2godCksV2koKSx0fSx3cml0ZSh0KXtyZXR1cm4gdGhpcy53cml0ZXMucHVzaCh0KSxXaSgpLHR9LGNsZWFyKHQpe0lzKHRoaXMucmVhZHMsdCksSXModGhpcy53cml0ZXMsdCl9LGZsdXNoOkZpfTtmdW5jdGlvbiBGaSh0KXtDcyh6LnJlYWRzKSxDcyh6LndyaXRlcy5zcGxpY2UoMCkpLHouc2NoZWR1bGVkPSExLCh6LnJlYWRzLmxlbmd0aHx8ei53cml0ZXMubGVuZ3RoKSYmV2kodCsxKX1jb25zdCBEbz00O2Z1bmN0aW9uIFdpKHQpe3ouc2NoZWR1bGVkfHwoei5zY2hlZHVsZWQ9ITAsdCYmdDxEbz9Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5GaSh0KSk6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5GaSgxKSkpfWZ1bmN0aW9uIENzKHQpe2xldCBlO2Zvcig7ZT10LnNoaWZ0KCk7KXRyeXtlKCl9Y2F0Y2goaSl7Y29uc29sZS5lcnJvcihpKX19ZnVuY3Rpb24gSXModCxlKXtjb25zdCBpPXQuaW5kZXhPZihlKTtyZXR1cm5+aSYmdC5zcGxpY2UoaSwxKX1mdW5jdGlvbiBqaSgpe31qaS5wcm90b3R5cGU9e3Bvc2l0aW9uczpbXSxpbml0KCl7dGhpcy5wb3NpdGlvbnM9W107bGV0IHQ7dGhpcy51bmJpbmQ9ayhkb2N1bWVudCwibW91c2Vtb3ZlIixlPT50PWVlKGUpKSx0aGlzLmludGVydmFsPXNldEludGVydmFsKCgpPT57IXR8fCh0aGlzLnBvc2l0aW9ucy5wdXNoKHQpLHRoaXMucG9zaXRpb25zLmxlbmd0aD41JiZ0aGlzLnBvc2l0aW9ucy5zaGlmdCgpKX0sNTApfSxjYW5jZWwoKXt2YXIgdDsodD10aGlzLnVuYmluZCk9PW51bGx8fHQuY2FsbCh0aGlzKSx0aGlzLmludGVydmFsJiZjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpfSxtb3Zlc1RvKHQpe2lmKHRoaXMucG9zaXRpb25zLmxlbmd0aDwyKXJldHVybiExO2NvbnN0IGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7bGVmdDppLHJpZ2h0OnMsdG9wOm4sYm90dG9tOm99PWUsW3JdPXRoaXMucG9zaXRpb25zLGE9WnQodGhpcy5wb3NpdGlvbnMpLGw9W3IsYV07cmV0dXJuIEhlKGEsZSk/ITE6W1t7eDppLHk6bn0se3g6cyx5Om99XSxbe3g6aSx5Om99LHt4OnMseTpufV1dLnNvbWUodT0+e2NvbnN0IGQ9Tm8obCx1KTtyZXR1cm4gZCYmSGUoZCxlKX0pfX07ZnVuY3Rpb24gTm8odCxlKXtsZXRbe3g6aSx5OnN9LHt4Om4seTpvfV09dCxbe3g6cix5OmF9LHt4OmwseTpofV09ZTtjb25zdCB1PShoLWEpKihuLWkpLShsLXIpKihvLXMpO2lmKHU9PT0wKXJldHVybiExO2NvbnN0IGQ9KChsLXIpKihzLWEpLShoLWEpKihpLXIpKS91O3JldHVybiBkPDA/ITE6e3g6aStkKihuLWkpLHk6cytkKihvLXMpfX1mdW5jdGlvbiBvZSh0LGUsaSxzKXtzPT09dm9pZCAwJiYocz0hMCk7Y29uc3Qgbj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIocz8obyxyKT0+e28uc29tZShhPT5hLmlzSW50ZXJzZWN0aW5nKSYmZShvLHIpfTplLGkpO2Zvcihjb25zdCBvIG9mICQodCkpbi5vYnNlcnZlKG8pO3JldHVybiBufWNvbnN0IHpvPUZ0JiZ3aW5kb3cuUmVzaXplT2JzZXJ2ZXI7ZnVuY3Rpb24gS2UodCxlLGkpe3JldHVybiBpPT09dm9pZCAwJiYoaT17Ym94OiJib3JkZXItYm94In0pLHpvP0FzKFJlc2l6ZU9ic2VydmVyLHQsZSxpKTooSG8oKSwkZS5hZGQoZSkse2Rpc2Nvbm5lY3QoKXskZS5kZWxldGUoZSl9fSl9bGV0ICRlO2Z1bmN0aW9uIEhvKCl7aWYoJGUpcmV0dXJuOyRlPW5ldyBTZXQ7bGV0IHQ7Y29uc3QgZT0oKT0+e2lmKCF0KXt0PSEwLHoucmVhZCgoKT0+dD0hMSk7Zm9yKGNvbnN0IGkgb2YgJGUpaSgpfX07ayh3aW5kb3csImxvYWQgcmVzaXplIixlKSxrKGRvY3VtZW50LCJsb2FkZWRtZXRhZGF0YSBsb2FkIixlLCEwKX1mdW5jdGlvbiBQcyh0LGUsaSl7cmV0dXJuIEFzKE11dGF0aW9uT2JzZXJ2ZXIsdCxlLGkpfWZ1bmN0aW9uIEFzKHQsZSxpLHMpe2NvbnN0IG49bmV3IHQoaSk7Zm9yKGNvbnN0IG8gb2YgJChlKSluLm9ic2VydmUobyxzKTtyZXR1cm4gbn1jb25zdCBLPXt9O0suZXZlbnRzPUsuY3JlYXRlZD1LLmJlZm9yZUNvbm5lY3Q9Sy5jb25uZWN0ZWQ9Sy5iZWZvcmVEaXNjb25uZWN0PUsuZGlzY29ubmVjdGVkPUsuZGVzdHJveT1SaSxLLmFyZ3M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSE9PSExJiZSaShlfHx0KX0sSy51cGRhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gemUoUmkodCxtdChlKT97cmVhZDplfTplKSwib3JkZXIiKX0sSy5wcm9wcz1mdW5jdGlvbih0LGUpe2lmKGV0KGUpKXtjb25zdCBpPXt9O2Zvcihjb25zdCBzIG9mIGUpaVtzXT1TdHJpbmc7ZT1pfXJldHVybiBLLm1ldGhvZHModCxlKX0sSy5jb21wdXRlZD1LLm1ldGhvZHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT90P3suLi50LC4uLmV9OmU6dH0sSy5kYXRhPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gaT9Fcyh0LGUsaSk6ZT90P2Z1bmN0aW9uKHMpe3JldHVybiBFcyh0LGUscyl9OmU6dH07ZnVuY3Rpb24gRXModCxlLGkpe3JldHVybiBLLmNvbXB1dGVkKG10KHQpP3QuY2FsbChpLGkpOnQsbXQoZSk/ZS5jYWxsKGksaSk6ZSl9ZnVuY3Rpb24gUmkodCxlKXtyZXR1cm4gdD10JiYhZXQodCk/W3RdOnQsZT90P3QuY29uY2F0KGUpOmV0KGUpP2U6W2VdOnR9ZnVuY3Rpb24gTG8odCxlKXtyZXR1cm4gUihlKT90OmV9ZnVuY3Rpb24gcmUodCxlLGkpe2NvbnN0IHM9e307aWYobXQoZSkmJihlPWUub3B0aW9ucyksZS5leHRlbmRzJiYodD1yZSh0LGUuZXh0ZW5kcyxpKSksZS5taXhpbnMpZm9yKGNvbnN0IG8gb2YgZS5taXhpbnMpdD1yZSh0LG8saSk7Zm9yKGNvbnN0IG8gaW4gdCluKG8pO2Zvcihjb25zdCBvIGluIGUpT3QodCxvKXx8bihvKTtmdW5jdGlvbiBuKG8pe3Nbb109KEtbb118fExvKSh0W29dLGVbb10saSl9cmV0dXJuIHN9ZnVuY3Rpb24ga2UodCxlKXtlPT09dm9pZCAwJiYoZT1bXSk7dHJ5e3JldHVybiB0P3R0KHQsInsiKT9KU09OLnBhcnNlKHQpOmUubGVuZ3RoJiYhcCh0LCI6Iik/e1tlWzBdXTp0fTp0LnNwbGl0KCI7IikucmVkdWNlKChpLHMpPT57Y29uc3RbbixvXT1zLnNwbGl0KC86KC4qKS8pO3JldHVybiBuJiYhUihvKSYmKGlbbi50cmltKCldPW8udHJpbSgpKSxpfSx7fSk6e319Y2F0Y2h7cmV0dXJue319fWZ1bmN0aW9uIE9zKHQpe2lmKFFlKHQpJiZxaSh0LHtmdW5jOiJwbGF5VmlkZW8iLG1ldGhvZDoicGxheSJ9KSxaZSh0KSl0cnl7dC5wbGF5KCkuY2F0Y2goVCl9Y2F0Y2h7fX1mdW5jdGlvbiBfcyh0KXtRZSh0KSYmcWkodCx7ZnVuYzoicGF1c2VWaWRlbyIsbWV0aG9kOiJwYXVzZSJ9KSxaZSh0KSYmdC5wYXVzZSgpfWZ1bmN0aW9uIEJzKHQpe1FlKHQpJiZxaSh0LHtmdW5jOiJtdXRlIixtZXRob2Q6InNldFZvbHVtZSIsdmFsdWU6MH0pLFplKHQpJiYodC5tdXRlZD0hMCl9ZnVuY3Rpb24gTXModCl7cmV0dXJuIFplKHQpfHxRZSh0KX1mdW5jdGlvbiBaZSh0KXtyZXR1cm4gcHQodCwidmlkZW8iKX1mdW5jdGlvbiBRZSh0KXtyZXR1cm4gcHQodCwiaWZyYW1lIikmJihEcyh0KXx8TnModCkpfWZ1bmN0aW9uIERzKHQpe3JldHVybiEhdC5zcmMubWF0Y2goL1wvXC8uKj95b3V0dWJlKC1ub2Nvb2tpZSk/XC5bYS16XStcLyh3YXRjaFw/dj1bXiZcc10rfGVtYmVkKXx5b3V0dVwuYmVcLy4qLyl9ZnVuY3Rpb24gTnModCl7cmV0dXJuISF0LnNyYy5tYXRjaCgvdmltZW9cLmNvbVwvdmlkZW9cLy4qLyl9YXN5bmMgZnVuY3Rpb24gcWkodCxlKXthd2FpdCBXbyh0KSx6cyh0LGUpfWZ1bmN0aW9uIHpzKHQsZSl7dHJ5e3QuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeSh7ZXZlbnQ6ImNvbW1hbmQiLC4uLmV9KSwiKiIpfWNhdGNoe319Y29uc3QgVmk9Il91a1BsYXllciI7bGV0IEZvPTA7ZnVuY3Rpb24gV28odCl7aWYodFtWaV0pcmV0dXJuIHRbVmldO2NvbnN0IGU9RHModCksaT1Ocyh0KSxzPSsrRm87bGV0IG47cmV0dXJuIHRbVmldPW5ldyBQcm9taXNlKG89PntlJiZOKHQsImxvYWQiLCgpPT57Y29uc3Qgcj0oKT0+enModCx7ZXZlbnQ6Imxpc3RlbmluZyIsaWQ6c30pO249c2V0SW50ZXJ2YWwociwxMDApLHIoKX0pLE4od2luZG93LCJtZXNzYWdlIixvLCExLHI9PntsZXR7ZGF0YTphfT1yO3RyeXtyZXR1cm4gYT1KU09OLnBhcnNlKGEpLGEmJihlJiZhLmlkPT09cyYmYS5ldmVudD09PSJvblJlYWR5Inx8aSYmTnVtYmVyKGEucGxheWVyX2lkKT09PXMpfWNhdGNoe319KSx0LnNyYz0iIit0LnNyYysocCh0LnNyYywiPyIpPyImIjoiPyIpKyhlPyJlbmFibGVqc2FwaT0xIjoiYXBpPTEmcGxheWVyX2lkPSIrcyl9KS50aGVuKCgpPT5jbGVhckludGVydmFsKG4pKX1mdW5jdGlvbiBVZSh0LGUsaSl7cmV0dXJuIGU9PT12b2lkIDAmJihlPTApLGk9PT12b2lkIDAmJihpPTApLFYodCk/U2koLi4uUSh0KS5tYXAocz0+e2NvbnN0e3RvcDpuLGxlZnQ6byxib3R0b206cixyaWdodDphfT1sdChzKTtyZXR1cm57dG9wOm4tZSxsZWZ0Om8taSxib3R0b206citlLHJpZ2h0OmEraX19KS5jb25jYXQoQSh0KSkpOiExfWZ1bmN0aW9uIFlpKHQsZSl7bGV0e29mZnNldDppPTB9PWU9PT12b2lkIDA/e306ZTtjb25zdCBzPVYodCk/USh0KTpbXTtyZXR1cm4gcy5yZWR1Y2UoKGEsbCxoKT0+e2NvbnN0e3Njcm9sbFRvcDp1LHNjcm9sbEhlaWdodDpkLG9mZnNldEhlaWdodDpmfT1sLG09bHQobCksQz1kLW0uaGVpZ2h0LHtoZWlnaHQ6RSx0b3A6VX09c1toLTFdP2x0KHNbaC0xXSk6QSh0KTtsZXQgRj1NYXRoLmNlaWwoVS1tLnRvcC1pK3UpO3JldHVybiBpPjAmJmY8RStpP0YrPWk6aT0wLEY+Qz8oaS09Ri1DLEY9Qyk6RjwwJiYoaS09RixGPTApLCgpPT5uKGwsRi11KS50aGVuKGEpfSwoKT0+UHJvbWlzZS5yZXNvbHZlKCkpKCk7ZnVuY3Rpb24gbihhLGwpe3JldHVybiBuZXcgUHJvbWlzZShoPT57Y29uc3QgdT1hLnNjcm9sbFRvcCxkPW8oTWF0aC5hYnMobCkpLGY9RGF0ZS5ub3coKTsoZnVuY3Rpb24gbSgpe2NvbnN0IEM9cihaKChEYXRlLm5vdygpLWYpL2QpKTthLnNjcm9sbFRvcD11K2wqQyxDPT09MT9oKCk6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKG0pfSkoKX0pfWZ1bmN0aW9uIG8oYSl7cmV0dXJuIDQwKk1hdGgucG93KGEsLjM3NSl9ZnVuY3Rpb24gcihhKXtyZXR1cm4gLjUqKDEtTWF0aC5jb3MoTWF0aC5QSSphKSl9fWZ1bmN0aW9uIFhpKHQsZSxpKXtpZihlPT09dm9pZCAwJiYoZT0wKSxpPT09dm9pZCAwJiYoaT0wKSwhVih0KSlyZXR1cm4gMDtjb25zdFtzXT1RKHQsL2F1dG98c2Nyb2xsLywhMCkse3Njcm9sbEhlaWdodDpuLHNjcm9sbFRvcDpvfT1zLHtoZWlnaHQ6cn09bHQocyksYT1uLXIsbD1IdCh0KVswXS1IdChzKVswXSxoPU1hdGgubWF4KDAsbC1yK2UpLHU9TWF0aC5taW4oYSxsK3Qub2Zmc2V0SGVpZ2h0LWkpO3JldHVybiBaKChvLWgpLyh1LWgpKX1mdW5jdGlvbiBRKHQsZSxpKXtlPT09dm9pZCAwJiYoZT0vYXV0b3xzY3JvbGx8aGlkZGVufGNsaXAvKSxpPT09dm9pZCAwJiYoaT0hMSk7Y29uc3Qgcz1Icyh0KTtsZXQgbj1VdCh0KS5yZXZlcnNlKCk7bj1uLnNsaWNlKG4uaW5kZXhPZihzKSsxKTtjb25zdCBvPWJ0KG4scj0+YyhyLCJwb3NpdGlvbiIpPT09ImZpeGVkIik7cmV0dXJufm8mJihuPW4uc2xpY2UobykpLFtzXS5jb25jYXQobi5maWx0ZXIocj0+ZS50ZXN0KGMociwib3ZlcmZsb3ciKSkmJighaXx8ci5zY3JvbGxIZWlnaHQ+bHQocikuaGVpZ2h0KSkpLnJldmVyc2UoKX1mdW5jdGlvbiBsdCh0KXtjb25zdCBlPU10KHQpLHtkb2N1bWVudDp7ZG9jdW1lbnRFbGVtZW50Oml9fT1lO2xldCBzPXQ9PT1Icyh0KT9lOnQ7Y29uc3R7dmlzdWFsVmlld3BvcnQ6bn09ZTtpZihHdChzKSYmbil7bGV0e2hlaWdodDpyLHdpZHRoOmEsc2NhbGU6bCxwYWdlVG9wOmgscGFnZUxlZnQ6dX09bjtyZXR1cm4gcj1NYXRoLnJvdW5kKHIqbCksYT1NYXRoLnJvdW5kKGEqbCkse2hlaWdodDpyLHdpZHRoOmEsdG9wOmgsbGVmdDp1LGJvdHRvbTpoK3IscmlnaHQ6dSthfX1sZXQgbz1BKHMpO2ZvcihsZXRbcixhLGwsaF1vZltbIndpZHRoIiwieCIsImxlZnQiLCJyaWdodCJdLFsiaGVpZ2h0IiwieSIsInRvcCIsImJvdHRvbSJdXSlHdChzKT9zPWk6b1tsXSs9dyhjKHMsImJvcmRlci0iK2wrIi13aWR0aCIpKSxvW3JdPW9bYV09c1siY2xpZW50IitrdChyKV0sb1toXT1vW3JdK29bbF07cmV0dXJuIG99ZnVuY3Rpb24gSHModCl7cmV0dXJuIE10KHQpLmRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnR9Y29uc3QgaHQ9W1sid2lkdGgiLCJ4IiwibGVmdCIsInJpZ2h0Il0sWyJoZWlnaHQiLCJ5IiwidG9wIiwiYm90dG9tIl1dO2Z1bmN0aW9uIExzKHQsZSxpKXtpPXthdHRhY2g6e2VsZW1lbnQ6WyJsZWZ0IiwidG9wIl0sdGFyZ2V0OlsibGVmdCIsInRvcCJdLC4uLmkuYXR0YWNofSxvZmZzZXQ6WzAsMF0scGxhY2VtZW50OltdLC4uLml9LGV0KGUpfHwoZT1bZSxlXSksQSh0LEZzKHQsZSxpKSl9ZnVuY3Rpb24gRnModCxlLGkpe2NvbnN0IHM9V3ModCxlLGkpLHtib3VuZGFyeTpuLHZpZXdwb3J0T2Zmc2V0Om89MCxwbGFjZW1lbnQ6cn09aTtsZXQgYT1zO2Zvcihjb25zdFtsLFtoLCx1LGRdXW9mIE9iamVjdC5lbnRyaWVzKGh0KSl7Y29uc3QgZj1qbyhlW2xdLG8sbixsKTtpZih0aShzLGYsbCkpY29udGludWU7bGV0IG09MDtpZihyW2xdPT09ImZsaXAiKXtjb25zdCBDPWkuYXR0YWNoLnRhcmdldFtsXTtpZihDPT09ZCYmc1tkXTw9ZltkXXx8Qz09PXUmJnNbdV0+PWZbdV0pY29udGludWU7bT1xbyh0LGUsaSxsKVt1XS1zW3VdO2NvbnN0IEU9Um8oZVtsXSxvLGwpO2lmKCF0aShHaShzLG0sbCksRSxsKSl7aWYodGkocyxFLGwpKWNvbnRpbnVlO2lmKGkucmVjdXJzaW9uKXJldHVybiExO2NvbnN0IFU9Vm8odCxlLGkpO2lmKFUmJnRpKFUsRSwxLWwpKXJldHVybiBVO2NvbnRpbnVlfX1lbHNlIGlmKHJbbF09PT0ic2hpZnQiKXtjb25zdCBDPUEoZVtsXSkse29mZnNldDpFfT1pO209WihaKHNbdV0sZlt1XSxmW2RdLXNbaF0pLENbdV0tc1toXStFW2xdLENbZF0tRVtsXSktc1t1XX1hPUdpKGEsbSxsKX1yZXR1cm4gYX1mdW5jdGlvbiBXcyh0LGUsaSl7bGV0e2F0dGFjaDpzLG9mZnNldDpufT17YXR0YWNoOntlbGVtZW50OlsibGVmdCIsInRvcCJdLHRhcmdldDpbImxlZnQiLCJ0b3AiXSwuLi5pLmF0dGFjaH0sb2Zmc2V0OlswLDBdLC4uLml9LG89QSh0KTtmb3IoY29uc3RbcixbYSwsbCxoXV1vZiBPYmplY3QuZW50cmllcyhodCkpe2NvbnN0IHU9cy50YXJnZXRbcl09PT1zLmVsZW1lbnRbcl0/bHQoZVtyXSk6QShlW3JdKTtvPUdpKG8sdVtsXS1vW2xdK2pzKHMudGFyZ2V0W3JdLGgsdVthXSktanMocy5lbGVtZW50W3JdLGgsb1thXSkrICtuW3JdLHIpfXJldHVybiBvfWZ1bmN0aW9uIEdpKHQsZSxpKXtjb25zdFsscyxuLG9dPWh0W2ldLHI9ey4uLnR9O3JldHVybiByW25dPXRbc109dFtuXStlLHJbb10rPWUscn1mdW5jdGlvbiBqcyh0LGUsaSl7cmV0dXJuIHQ9PT0iY2VudGVyIj9pLzI6dD09PWU/aTowfWZ1bmN0aW9uIGpvKHQsZSxpLHMpe2xldCBuPVJzKC4uLlEodCkubWFwKGx0KSk7cmV0dXJuIGUmJihuW2h0W3NdWzJdXSs9ZSxuW2h0W3NdWzNdXS09ZSksaSYmKG49UnMobixBKGkpKSksbn1mdW5jdGlvbiBSbyh0LGUsaSl7Y29uc3RbcywsbixvXT1odFtpXSxbcl09USh0KSxhPWx0KHIpO3JldHVybiBhW25dLT1yWyJzY3JvbGwiK2t0KG4pXS1lLGFbb109YVtuXStyWyJzY3JvbGwiK2t0KHMpXS1lLGF9ZnVuY3Rpb24gUnMoKXtsZXQgdD17fTtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShlKSxzPTA7czxlO3MrKylpW3NdPWFyZ3VtZW50c1tzXTtmb3IoY29uc3QgbiBvZiBpKWZvcihjb25zdFssLG8scl1vZiBodCl0W29dPU1hdGgubWF4KHRbb118fDAsbltvXSksdFtyXT1NYXRoLm1pbiguLi5bdFtyXSxuW3JdXS5maWx0ZXIoQm9vbGVhbikpO3JldHVybiB0fWZ1bmN0aW9uIHRpKHQsZSxpKXtjb25zdFssLHMsbl09aHRbaV07cmV0dXJuIHRbc10+PWVbc10mJnRbbl08PWVbbl19ZnVuY3Rpb24gcW8odCxlLGkscyl7bGV0e29mZnNldDpuLGF0dGFjaDpvfT1pO3JldHVybiBXcyh0LGUse2F0dGFjaDp7ZWxlbWVudDpxcyhvLmVsZW1lbnQscyksdGFyZ2V0OnFzKG8udGFyZ2V0LHMpfSxvZmZzZXQ6WW8obixzKX0pfWZ1bmN0aW9uIFZvKHQsZSxpKXtyZXR1cm4gRnModCxlLHsuLi5pLGF0dGFjaDp7ZWxlbWVudDppLmF0dGFjaC5lbGVtZW50Lm1hcChWcykucmV2ZXJzZSgpLHRhcmdldDppLmF0dGFjaC50YXJnZXQubWFwKFZzKS5yZXZlcnNlKCl9LG9mZnNldDppLm9mZnNldC5yZXZlcnNlKCkscGxhY2VtZW50OmkucGxhY2VtZW50LnJldmVyc2UoKSxyZWN1cnNpb246ITB9KX1mdW5jdGlvbiBxcyh0LGUpe2NvbnN0IGk9Wy4uLnRdLHM9aHRbZV0uaW5kZXhPZih0W2VdKTtyZXR1cm5+cyYmKGlbZV09aHRbZV1bMS1zJTIrMl0pLGl9ZnVuY3Rpb24gVnModCl7Zm9yKGxldCBlPTA7ZTxodC5sZW5ndGg7ZSsrKXtjb25zdCBpPWh0W2VdLmluZGV4T2YodCk7aWYofmkpcmV0dXJuIGh0WzEtZV1baSUyKzJdfX1mdW5jdGlvbiBZbyh0LGUpe3JldHVybiB0PVsuLi50XSx0W2VdKj0tMSx0fXZhciBYbz1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxhamF4OndzLGdldEltYWdlOmJzLFRyYW5zaXRpb246UyxBbmltYXRpb246ZnQsYXR0cjp5LGhhc0F0dHI6SXQscmVtb3ZlQXR0cjpnZSxkYXRhOmF0LGFkZENsYXNzOmIscmVtb3ZlQ2xhc3M6TyxyZW1vdmVDbGFzc2VzOkJpLHJlcGxhY2VDbGFzczpNaSxoYXNDbGFzczpJLHRvZ2dsZUNsYXNzOlcsZGltZW5zaW9uczp4LG9mZnNldDpBLHBvc2l0aW9uOlJlLG9mZnNldFBvc2l0aW9uOkh0LGhlaWdodDpHLHdpZHRoOnllLGJveE1vZGVsQWRqdXN0OmllLGZsaXBQb3NpdGlvbjpxZSx0b1B4OkoscmVhZHk6TmksaXNUYWc6cHQsZW1wdHk6a3MsaHRtbDpQdCxwcmVwZW5kOl9vLGFwcGVuZDpqLGJlZm9yZTp6aSxhZnRlcjpWZSxyZW1vdmU6Y3Qsd3JhcEFsbDpIaSx3cmFwSW5uZXI6TGksdW53cmFwOlhlLGZyYWdtZW50Okx0LGFwcGx5OnZ0LCQ6diwkJDpELGluQnJvd3NlcjpGdCxpc1J0bDpYLGhhc1RvdWNoOld0LHBvaW50ZXJEb3duOmd0LHBvaW50ZXJNb3ZlOkdlLHBvaW50ZXJVcDpBdCxwb2ludGVyRW50ZXI6anQscG9pbnRlckxlYXZlOm5lLHBvaW50ZXJDYW5jZWw6SmUsb246ayxvZmY6RHQsb25jZTpOLHRyaWdnZXI6ZyxjcmVhdGVFdmVudDpOdCx0b0V2ZW50VGFyZ2V0czpPaSxpc1RvdWNoOiR0LGdldEV2ZW50UG9zOmVlLGZhc3Rkb206eixpc1ZvaWRFbGVtZW50OkNpLGlzVmlzaWJsZTpWLHNlbElucHV0Om1lLGlzSW5wdXQ6SWksc2VsRm9jdXNhYmxlOldlLGlzRm9jdXNhYmxlOmplLHBhcmVudDpQLGZpbHRlcjp2ZSxtYXRjaGVzOkwsY2xvc2VzdDppdCx3aXRoaW46QixwYXJlbnRzOlV0LGNoaWxkcmVuOk0saW5kZXg6dGUsaGFzT3duOk90LGh5cGhlbmF0ZTpfdCxjYW1lbGl6ZTpZdCx1Y2ZpcnN0Omt0LHN0YXJ0c1dpdGg6dHQsZW5kc1dpdGg6WHQsaW5jbHVkZXM6cCxmaW5kSW5kZXg6YnQsaXNBcnJheTpldCx0b0FycmF5OmJpLGFzc2lnbjp4dCxpc0Z1bmN0aW9uOm10LGlzT2JqZWN0OlN0LGlzUGxhaW5PYmplY3Q6VHQsaXNXaW5kb3c6R3QsaXNEb2N1bWVudDpEZSxpc05vZGU6eGksaXNFbGVtZW50Okp0LGlzQm9vbGVhbjpOZSxpc1N0cmluZzpfLGlzTnVtYmVyOkt0LGlzTnVtZXJpYzpCdCxpc0VtcHR5OmZlLGlzVW5kZWZpbmVkOlIsdG9Cb29sZWFuOiRpLHRvTnVtYmVyOkN0LHRvRmxvYXQ6dyx0b05vZGU6cSx0b05vZGVzOiQsdG9XaW5kb3c6TXQsaXNFcXVhbDpwZSxzd2FwOmtpLGxhc3Q6WnQsZWFjaDp5dCxzb3J0Qnk6emUsdW5pcXVlQnk6ZHMsY2xhbXA6Wixub29wOlQsaW50ZXJzZWN0UmVjdDpTaSxwb2ludEluUmVjdDpIZSxEaW1lbnNpb25zOkxlLGdldEluZGV4OlF0LG1lbW9pemU6cnQsRGVmZXJyZWQ6RmUsTW91c2VUcmFja2VyOmppLG9ic2VydmVJbnRlcnNlY3Rpb246b2Usb2JzZXJ2ZVJlc2l6ZTpLZSxvYnNlcnZlTXV0YXRpb246UHMsbWVyZ2VPcHRpb25zOnJlLHBhcnNlT3B0aW9uczprZSxwbGF5Ok9zLHBhdXNlOl9zLG11dGU6QnMsaXNWaWRlbzpNcyxwb3NpdGlvbkF0OkxzLHF1ZXJ5OmR0LHF1ZXJ5QWxsOndlLGZpbmQ6UGksZmluZEFsbDpiZSxlc2NhcGU6QWksY3NzOmMscHJvcE5hbWU6X2ksaXNJblZpZXc6VWUsc2Nyb2xsSW50b1ZpZXc6WWksc2Nyb2xsZWRPdmVyOlhpLHNjcm9sbFBhcmVudHM6USxvZmZzZXRWaWV3cG9ydDpsdH0pO2Z1bmN0aW9uIEdvKHQpe2NvbnN0IGU9dC5kYXRhO3QudXNlPWZ1bmN0aW9uKG4pe2lmKCFuLmluc3RhbGxlZClyZXR1cm4gbi5jYWxsKG51bGwsdGhpcyksbi5pbnN0YWxsZWQ9ITAsdGhpc30sdC5taXhpbj1mdW5jdGlvbihuLG8pe289KF8obyk/dC5jb21wb25lbnQobyk6byl8fHRoaXMsby5vcHRpb25zPXJlKG8ub3B0aW9ucyxuKX0sdC5leHRlbmQ9ZnVuY3Rpb24obil7bj1ufHx7fTtjb25zdCBvPXRoaXMscj1mdW5jdGlvbihsKXt0aGlzLl9pbml0KGwpfTtyZXR1cm4gci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShvLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLm9wdGlvbnM9cmUoby5vcHRpb25zLG4pLHIuc3VwZXI9byxyLmV4dGVuZD1vLmV4dGVuZCxyfSx0LnVwZGF0ZT1mdW5jdGlvbihuLG8pe249bj9xKG4pOmRvY3VtZW50LmJvZHk7Zm9yKGNvbnN0IHIgb2YgVXQobikucmV2ZXJzZSgpKXMocltlXSxvKTt2dChuLHI9PnMocltlXSxvKSl9O2xldCBpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjb250YWluZXIiLHtnZXQoKXtyZXR1cm4gaXx8ZG9jdW1lbnQuYm9keX0sc2V0KG4pe2k9dihuKX19KTtmdW5jdGlvbiBzKG4sbyl7aWYoISFuKWZvcihjb25zdCByIGluIG4pbltyXS5fY29ubmVjdGVkJiZuW3JdLl9jYWxsVXBkYXRlKG8pfX1mdW5jdGlvbiBKbyh0KXt0LnByb3RvdHlwZS5fY2FsbEhvb2s9ZnVuY3Rpb24ocyl7dmFyIG47KG49dGhpcy4kb3B0aW9uc1tzXSk9PW51bGx8fG4uZm9yRWFjaChvPT5vLmNhbGwodGhpcykpfSx0LnByb3RvdHlwZS5fY2FsbENvbm5lY3RlZD1mdW5jdGlvbigpe3RoaXMuX2Nvbm5lY3RlZHx8KHRoaXMuX2RhdGE9e30sdGhpcy5fY29tcHV0ZWQ9e30sdGhpcy5faW5pdFByb3BzKCksdGhpcy5fY2FsbEhvb2soImJlZm9yZUNvbm5lY3QiKSx0aGlzLl9jb25uZWN0ZWQ9ITAsdGhpcy5faW5pdEV2ZW50cygpLHRoaXMuX2luaXRPYnNlcnZlcnMoKSx0aGlzLl9jYWxsSG9vaygiY29ubmVjdGVkIiksdGhpcy5fY2FsbFVwZGF0ZSgpKX0sdC5wcm90b3R5cGUuX2NhbGxEaXNjb25uZWN0ZWQ9ZnVuY3Rpb24oKXshdGhpcy5fY29ubmVjdGVkfHwodGhpcy5fY2FsbEhvb2soImJlZm9yZURpc2Nvbm5lY3QiKSx0aGlzLl9kaXNjb25uZWN0T2JzZXJ2ZXJzKCksdGhpcy5fdW5iaW5kRXZlbnRzKCksdGhpcy5fY2FsbEhvb2soImRpc2Nvbm5lY3RlZCIpLHRoaXMuX2Nvbm5lY3RlZD0hMSxkZWxldGUgdGhpcy5fd2F0Y2gpfSx0LnByb3RvdHlwZS5fY2FsbFVwZGF0ZT1mdW5jdGlvbihzKXtzPT09dm9pZCAwJiYocz0idXBkYXRlIiksdGhpcy5fY29ubmVjdGVkJiYoKHM9PT0idXBkYXRlInx8cz09PSJyZXNpemUiKSYmdGhpcy5fY2FsbFdhdGNoZXMoKSx0aGlzLiRvcHRpb25zLnVwZGF0ZSYmKHRoaXMuX3VwZGF0ZXN8fCh0aGlzLl91cGRhdGVzPW5ldyBTZXQsei5yZWFkKCgpPT57dGhpcy5fY29ubmVjdGVkJiZlLmNhbGwodGhpcyx0aGlzLl91cGRhdGVzKSxkZWxldGUgdGhpcy5fdXBkYXRlc30pKSx0aGlzLl91cGRhdGVzLmFkZChzLnR5cGV8fHMpKSl9LHQucHJvdG90eXBlLl9jYWxsV2F0Y2hlcz1mdW5jdGlvbigpe2lmKHRoaXMuX3dhdGNoKXJldHVybjtjb25zdCBzPSFPdCh0aGlzLCJfd2F0Y2giKTt0aGlzLl93YXRjaD16LnJlYWQoKCk9Pnt0aGlzLl9jb25uZWN0ZWQmJmkuY2FsbCh0aGlzLHMpLHRoaXMuX3dhdGNoPW51bGx9KX07ZnVuY3Rpb24gZShzKXtmb3IoY29uc3R7cmVhZDpuLHdyaXRlOm8sZXZlbnRzOnI9W119b2YgdGhpcy4kb3B0aW9ucy51cGRhdGUpe2lmKCFzLmhhcygidXBkYXRlIikmJiFyLnNvbWUobD0+cy5oYXMobCkpKWNvbnRpbnVlO2xldCBhO24mJihhPW4uY2FsbCh0aGlzLHRoaXMuX2RhdGEscyksYSYmVHQoYSkmJnh0KHRoaXMuX2RhdGEsYSkpLG8mJmEhPT0hMSYmei53cml0ZSgoKT0+e3RoaXMuX2Nvbm5lY3RlZCYmby5jYWxsKHRoaXMsdGhpcy5fZGF0YSxzKX0pfX1mdW5jdGlvbiBpKHMpe2NvbnN0eyRvcHRpb25zOntjb21wdXRlZDpufX09dGhpcyxvPXsuLi50aGlzLl9jb21wdXRlZH07dGhpcy5fY29tcHV0ZWQ9e307Zm9yKGNvbnN0IHIgaW4gbil7Y29uc3R7d2F0Y2g6YSxpbW1lZGlhdGU6bH09bltyXTthJiYocyYmbHx8T3QobyxyKSYmIXBlKG9bcl0sdGhpc1tyXSkpJiZhLmNhbGwodGhpcyx0aGlzW3JdLG9bcl0pfX19ZnVuY3Rpb24gS28odCl7bGV0IGU9MDt0LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihpKXtpPWl8fHt9LGkuZGF0YT10cihpLHRoaXMuY29uc3RydWN0b3Iub3B0aW9ucyksdGhpcy4kb3B0aW9ucz1yZSh0aGlzLmNvbnN0cnVjdG9yLm9wdGlvbnMsaSx0aGlzKSx0aGlzLiRlbD1udWxsLHRoaXMuJHByb3BzPXt9LHRoaXMuX3VpZD1lKyssdGhpcy5faW5pdERhdGEoKSx0aGlzLl9pbml0TWV0aG9kcygpLHRoaXMuX2luaXRDb21wdXRlZHMoKSx0aGlzLl9jYWxsSG9vaygiY3JlYXRlZCIpLGkuZWwmJnRoaXMuJG1vdW50KGkuZWwpfSx0LnByb3RvdHlwZS5faW5pdERhdGE9ZnVuY3Rpb24oKXtjb25zdHtkYXRhOmk9e319PXRoaXMuJG9wdGlvbnM7Zm9yKGNvbnN0IHMgaW4gaSl0aGlzLiRwcm9wc1tzXT10aGlzW3NdPWlbc119LHQucHJvdG90eXBlLl9pbml0TWV0aG9kcz1mdW5jdGlvbigpe2NvbnN0e21ldGhvZHM6aX09dGhpcy4kb3B0aW9ucztpZihpKWZvcihjb25zdCBzIGluIGkpdGhpc1tzXT1pW3NdLmJpbmQodGhpcyl9LHQucHJvdG90eXBlLl9pbml0Q29tcHV0ZWRzPWZ1bmN0aW9uKCl7Y29uc3R7Y29tcHV0ZWQ6aX09dGhpcy4kb3B0aW9ucztpZih0aGlzLl9jb21wdXRlZD17fSxpKWZvcihjb25zdCBzIGluIGkpWm8odGhpcyxzLGlbc10pfSx0LnByb3RvdHlwZS5faW5pdFByb3BzPWZ1bmN0aW9uKGkpe2xldCBzO2k9aXx8WXModGhpcy4kb3B0aW9ucyx0aGlzLiRuYW1lKTtmb3IocyBpbiBpKVIoaVtzXSl8fCh0aGlzLiRwcm9wc1tzXT1pW3NdKTtjb25zdCBuPVt0aGlzLiRvcHRpb25zLmNvbXB1dGVkLHRoaXMuJG9wdGlvbnMubWV0aG9kc107Zm9yKHMgaW4gdGhpcy4kcHJvcHMpcyBpbiBpJiZRbyhuLHMpJiYodGhpc1tzXT10aGlzLiRwcm9wc1tzXSl9LHQucHJvdG90eXBlLl9pbml0RXZlbnRzPWZ1bmN0aW9uKCl7dGhpcy5fZXZlbnRzPVtdO2Zvcihjb25zdCBpIG9mIHRoaXMuJG9wdGlvbnMuZXZlbnRzfHxbXSlpZihPdChpLCJoYW5kbGVyIikpZWkodGhpcyxpKTtlbHNlIGZvcihjb25zdCBzIGluIGkpZWkodGhpcyxpW3NdLHMpfSx0LnByb3RvdHlwZS5fdW5iaW5kRXZlbnRzPWZ1bmN0aW9uKCl7dGhpcy5fZXZlbnRzLmZvckVhY2goaT0+aSgpKSxkZWxldGUgdGhpcy5fZXZlbnRzfSx0LnByb3RvdHlwZS5faW5pdE9ic2VydmVycz1mdW5jdGlvbigpe3RoaXMuX29ic2VydmVycz1baXIodGhpcyldLHRoaXMuJG9wdGlvbnMuY29tcHV0ZWQmJnRoaXMucmVnaXN0ZXJPYnNlcnZlcihlcih0aGlzKSl9LHQucHJvdG90eXBlLnJlZ2lzdGVyT2JzZXJ2ZXI9ZnVuY3Rpb24oaSl7dGhpcy5fb2JzZXJ2ZXJzLnB1c2goaSl9LHQucHJvdG90eXBlLl9kaXNjb25uZWN0T2JzZXJ2ZXJzPWZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXJzLmZvckVhY2goaT0+aT09bnVsbD92b2lkIDA6aS5kaXNjb25uZWN0KCkpfX1mdW5jdGlvbiBZcyh0LGUpe2NvbnN0IGk9e30se2FyZ3M6cz1bXSxwcm9wczpuPXt9LGVsOm99PXQ7aWYoIW4pcmV0dXJuIGk7Zm9yKGNvbnN0IGEgaW4gbil7Y29uc3QgbD1fdChhKTtsZXQgaD1hdChvLGwpO1IoaCl8fChoPW5bYV09PT1Cb29sZWFuJiZoPT09IiI/ITA6SmkoblthXSxoKSwhKGw9PT0idGFyZ2V0IiYmdHQoaCwiXyIpKSYmKGlbYV09aCkpfWNvbnN0IHI9a2UoYXQobyxlKSxzKTtmb3IoY29uc3QgYSBpbiByKXtjb25zdCBsPVl0KGEpO1IobltsXSl8fChpW2xdPUppKG5bbF0sclthXSkpfXJldHVybiBpfWZ1bmN0aW9uIFpvKHQsZSxpKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtlbnVtZXJhYmxlOiEwLGdldCgpe2NvbnN0e19jb21wdXRlZDpzLCRwcm9wczpuLCRlbDpvfT10O3JldHVybiBPdChzLGUpfHwoc1tlXT0oaS5nZXR8fGkpLmNhbGwodCxuLG8pKSxzW2VdfSxzZXQocyl7Y29uc3R7X2NvbXB1dGVkOm59PXQ7bltlXT1pLnNldD9pLnNldC5jYWxsKHQscyk6cyxSKG5bZV0pJiZkZWxldGUgbltlXX19KX1mdW5jdGlvbiBlaSh0LGUsaSl7VHQoZSl8fChlPXtuYW1lOmksaGFuZGxlcjplfSk7bGV0e25hbWU6cyxlbDpuLGhhbmRsZXI6byxjYXB0dXJlOnIscGFzc2l2ZTphLGRlbGVnYXRlOmwsZmlsdGVyOmgsc2VsZjp1fT1lO2lmKG49bXQobik/bi5jYWxsKHQpOm58fHQuJGVsLGV0KG4pKXtuLmZvckVhY2goZD0+ZWkodCx7Li4uZSxlbDpkfSxpKSk7cmV0dXJufSFufHxoJiYhaC5jYWxsKHQpfHx0Ll9ldmVudHMucHVzaChrKG4scyxsP18obCk/bDpsLmNhbGwodCk6bnVsbCxfKG8pP3Rbb106by5iaW5kKHQpLHtwYXNzaXZlOmEsY2FwdHVyZTpyLHNlbGY6dX0pKX1mdW5jdGlvbiBRbyh0LGUpe3JldHVybiB0LmV2ZXJ5KGk9PiFpfHwhT3QoaSxlKSl9ZnVuY3Rpb24gSmkodCxlKXtyZXR1cm4gdD09PUJvb2xlYW4/JGkoZSk6dD09PU51bWJlcj9DdChlKTp0PT09Imxpc3QiP1VvKGUpOnQ/dChlKTplfWZ1bmN0aW9uIFVvKHQpe3JldHVybiBldCh0KT90Ol8odCk/dC5zcGxpdCgvLCg/IVteKF0qXCkpLykubWFwKGU9PkJ0KGUpP0N0KGUpOiRpKGUudHJpbSgpKSk6W3RdfWZ1bmN0aW9uIHRyKHQsZSl7bGV0e2RhdGE6aT17fX09dCx7YXJnczpzPVtdLHByb3BzOm49e319PWU7ZXQoaSkmJihpPWkuc2xpY2UoMCxzLmxlbmd0aCkucmVkdWNlKChvLHIsYSk9PihUdChyKT94dChvLHIpOm9bc1thXV09cixvKSx7fSkpO2Zvcihjb25zdCBvIGluIGkpUihpW29dKT9kZWxldGUgaVtvXTpuW29dJiYoaVtvXT1KaShuW29dLGlbb10pKTtyZXR1cm4gaX1mdW5jdGlvbiBlcih0KXtjb25zdHtlbDplfT10LiRvcHRpb25zLGk9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PnQuJGVtaXQoKSk7cmV0dXJuIGkub2JzZXJ2ZShlLHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLGl9ZnVuY3Rpb24gaXIodCl7Y29uc3R7JG5hbWU6ZSwkb3B0aW9uczppLCRwcm9wczpzfT10LHthdHRyczpuLHByb3BzOm8sZWw6cn09aTtpZighb3x8bj09PSExKXJldHVybjtjb25zdCBhPWV0KG4pP246T2JqZWN0LmtleXMobyksbD1hLm1hcCh1PT5fdCh1KSkuY29uY2F0KGUpLGg9bmV3IE11dGF0aW9uT2JzZXJ2ZXIodT0+e2NvbnN0IGQ9WXMoaSxlKTt1LnNvbWUoZj0+e2xldHthdHRyaWJ1dGVOYW1lOm19PWY7Y29uc3QgQz1tLnJlcGxhY2UoImRhdGEtIiwiIik7cmV0dXJuKEM9PT1lP2E6W1l0KEMpLFl0KG0pXSkuc29tZShFPT4hUihkW0VdKSYmZFtFXSE9PXNbRV0pfSkmJnQuJHJlc2V0KCl9KTtyZXR1cm4gaC5vYnNlcnZlKHIse2F0dHJpYnV0ZXM6ITAsYXR0cmlidXRlRmlsdGVyOmwuY29uY2F0KGwubWFwKHU9PiJkYXRhLSIrdSkpfSksaH1mdW5jdGlvbiBzcih0KXtjb25zdCBlPXQuZGF0YTt0LnByb3RvdHlwZS4kY3JlYXRlPWZ1bmN0aW9uKHMsbixvKXtyZXR1cm4gdFtzXShuLG8pfSx0LnByb3RvdHlwZS4kbW91bnQ9ZnVuY3Rpb24ocyl7Y29uc3R7bmFtZTpufT10aGlzLiRvcHRpb25zO3NbZV18fChzW2VdPXt9KSwhc1tlXVtuXSYmKHNbZV1bbl09dGhpcyx0aGlzLiRlbD10aGlzLiRvcHRpb25zLmVsPXRoaXMuJG9wdGlvbnMuZWx8fHMsQihzLGRvY3VtZW50KSYmdGhpcy5fY2FsbENvbm5lY3RlZCgpKX0sdC5wcm90b3R5cGUuJHJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fY2FsbERpc2Nvbm5lY3RlZCgpLHRoaXMuX2NhbGxDb25uZWN0ZWQoKX0sdC5wcm90b3R5cGUuJGRlc3Ryb3k9ZnVuY3Rpb24ocyl7cz09PXZvaWQgMCYmKHM9ITEpO2NvbnN0e2VsOm4sbmFtZTpvfT10aGlzLiRvcHRpb25zO24mJnRoaXMuX2NhbGxEaXNjb25uZWN0ZWQoKSx0aGlzLl9jYWxsSG9vaygiZGVzdHJveSIpLG4hPW51bGwmJm5bZV0mJihkZWxldGUgbltlXVtvXSxmZShuW2VdKXx8ZGVsZXRlIG5bZV0scyYmY3QodGhpcy4kZWwpKX0sdC5wcm90b3R5cGUuJGVtaXQ9ZnVuY3Rpb24ocyl7dGhpcy5fY2FsbFVwZGF0ZShzKX0sdC5wcm90b3R5cGUuJHVwZGF0ZT1mdW5jdGlvbihzLG4pe3M9PT12b2lkIDAmJihzPXRoaXMuJGVsKSx0LnVwZGF0ZShzLG4pfSx0LnByb3RvdHlwZS4kZ2V0Q29tcG9uZW50PXQuZ2V0Q29tcG9uZW50O2NvbnN0IGk9cnQocz0+dC5wcmVmaXgrX3QocykpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQucHJvdG90eXBlLHskY29udGFpbmVyOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwiY29udGFpbmVyIiksJG5hbWU6e2dldCgpe3JldHVybiBpKHRoaXMuJG9wdGlvbnMubmFtZSl9fX0pfWZ1bmN0aW9uIG5yKHQpe2NvbnN0IGU9dC5kYXRhLGk9e307dC5jb21wb25lbnQ9ZnVuY3Rpb24ocyxuKXtjb25zdCBvPV90KHMpO2lmKHM9WXQobyksIW4pcmV0dXJuIFR0KGlbc10pJiYoaVtzXT10LmV4dGVuZChpW3NdKSksaVtzXTt0W3NdPWZ1bmN0aW9uKGEsbCl7Y29uc3QgaD10LmNvbXBvbmVudChzKTtyZXR1cm4gaC5vcHRpb25zLmZ1bmN0aW9uYWw/bmV3IGgoe2RhdGE6VHQoYSk/YTpbLi4uYXJndW1lbnRzXX0pOmE/RChhKS5tYXAodSlbMF06dSgpO2Z1bmN0aW9uIHUoZCl7Y29uc3QgZj10LmdldENvbXBvbmVudChkLHMpO2lmKGYpaWYobClmLiRkZXN0cm95KCk7ZWxzZSByZXR1cm4gZjtyZXR1cm4gbmV3IGgoe2VsOmQsZGF0YTpsfSl9fTtjb25zdCByPVR0KG4pP3suLi5ufTpuLm9wdGlvbnM7cmV0dXJuIHIubmFtZT1zLHIuaW5zdGFsbD09bnVsbHx8ci5pbnN0YWxsKHQscixzKSx0Ll9pbml0aWFsaXplZCYmIXIuZnVuY3Rpb25hbCYmei5yZWFkKCgpPT50W3NdKCJbdWstIitvKyJdLFtkYXRhLXVrLSIrbysiXSIpKSxpW3NdPVR0KG4pP3I6bn0sdC5nZXRDb21wb25lbnRzPXM9PihzPT1udWxsP3ZvaWQgMDpzW2VdKXx8e30sdC5nZXRDb21wb25lbnQ9KHMsbik9PnQuZ2V0Q29tcG9uZW50cyhzKVtuXSx0LmNvbm5lY3Q9cz0+e2lmKHNbZV0pZm9yKGNvbnN0IG4gaW4gc1tlXSlzW2VdW25dLl9jYWxsQ29ubmVjdGVkKCk7Zm9yKGNvbnN0IG4gb2Ygcy5hdHRyaWJ1dGVzKXtjb25zdCBvPVhzKG4ubmFtZSk7byYmbyBpbiBpJiZ0W29dKHMpfX0sdC5kaXNjb25uZWN0PXM9Pntmb3IoY29uc3QgbiBpbiBzW2VdKXNbZV1bbl0uX2NhbGxEaXNjb25uZWN0ZWQoKX19Y29uc3QgWHM9cnQodD0+dHQodCwidWstIil8fHR0KHQsImRhdGEtdWstIik/WXQodC5yZXBsYWNlKCJkYXRhLXVrLSIsIiIpLnJlcGxhY2UoInVrLSIsIiIpKTohMSksc3Q9ZnVuY3Rpb24odCl7dGhpcy5faW5pdCh0KX07c3QudXRpbD1YbyxzdC5kYXRhPSJfX3Vpa2l0X18iLHN0LnByZWZpeD0idWstIixzdC5vcHRpb25zPXt9LHN0LnZlcnNpb249IjMuMTUuMSIsR28oc3QpLEpvKHN0KSxLbyhzdCksbnIoc3QpLHNyKHN0KTtmdW5jdGlvbiBvcih0KXtjb25zdHtjb25uZWN0OmUsZGlzY29ubmVjdDppfT10O2lmKCFGdHx8IXdpbmRvdy5NdXRhdGlvbk9ic2VydmVyKXJldHVybjt6LnJlYWQoZnVuY3Rpb24oKXtkb2N1bWVudC5ib2R5JiZ2dChkb2N1bWVudC5ib2R5LGUpLG5ldyBNdXRhdGlvbk9ic2VydmVyKG89Pm8uZm9yRWFjaChzKSkub2JzZXJ2ZShkb2N1bWVudCx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSxuZXcgTXV0YXRpb25PYnNlcnZlcihvPT5vLmZvckVhY2gobikpLm9ic2VydmUoZG9jdW1lbnQse2F0dHJpYnV0ZXM6ITAsc3VidHJlZTohMH0pLHQuX2luaXRpYWxpemVkPSEwfSk7ZnVuY3Rpb24gcyhvKXtsZXR7YWRkZWROb2RlczpyLHJlbW92ZWROb2RlczphfT1vO2Zvcihjb25zdCBsIG9mIHIpdnQobCxlKTtmb3IoY29uc3QgbCBvZiBhKXZ0KGwsaSl9ZnVuY3Rpb24gbihvKXt2YXIgcjtsZXR7dGFyZ2V0OmEsYXR0cmlidXRlTmFtZTpsfT1vO2NvbnN0IGg9WHMobCk7aWYoISghaHx8IShoIGluIHQpKSl7aWYoSXQoYSxsKSl7dFtoXShhKTtyZXR1cm59KHI9dC5nZXRDb21wb25lbnQoYSxoKSk9PW51bGx8fHIuJGRlc3Ryb3koKX19fXZhciBudD17Y29ubmVjdGVkKCl7IUkodGhpcy4kZWwsdGhpcy4kbmFtZSkmJmIodGhpcy4kZWwsdGhpcy4kbmFtZSl9fSxTZT17ZGF0YTp7cHJlbG9hZDo1fSxtZXRob2RzOntsYXp5bG9hZCh0LGUpe3Q9PT12b2lkIDAmJih0PXRoaXMuJGVsKSxlPT09dm9pZCAwJiYoZT10aGlzLiRlbCksdGhpcy5yZWdpc3Rlck9ic2VydmVyKG9lKHQsKGkscyk9Pntmb3IoY29uc3QgbiBvZiAkKG10KGUpP2UoKTplKSlEKCdbbG9hZGluZz0ibGF6eSJdJyxuKS5zbGljZSgwLHRoaXMucHJlbG9hZC0xKS5mb3JFYWNoKG89PmdlKG8sImxvYWRpbmciKSk7Zm9yKGNvbnN0IG4gb2YgaS5maWx0ZXIobz0+e2xldHtpc0ludGVyc2VjdGluZzpyfT1vO3JldHVybiByfSkubWFwKG89PntsZXR7dGFyZ2V0OnJ9PW87cmV0dXJuIHJ9KSlzLnVub2JzZXJ2ZShuKX0pKX19fSxFdD17cHJvcHM6e2NsczpCb29sZWFuLGFuaW1hdGlvbjoibGlzdCIsZHVyYXRpb246TnVtYmVyLHZlbG9jaXR5Ok51bWJlcixvcmlnaW46U3RyaW5nLHRyYW5zaXRpb246U3RyaW5nfSxkYXRhOntjbHM6ITEsYW5pbWF0aW9uOlshMV0sZHVyYXRpb246MjAwLHZlbG9jaXR5Oi4yLG9yaWdpbjohMSx0cmFuc2l0aW9uOiJlYXNlIixjbHNFbnRlcjoidWstdG9nZ2xhYmUtZW50ZXIiLGNsc0xlYXZlOiJ1ay10b2dnbGFiZS1sZWF2ZSJ9LGNvbXB1dGVkOntoYXNBbmltYXRpb24odCl7bGV0e2FuaW1hdGlvbjplfT10O3JldHVybiEhZVswXX0saGFzVHJhbnNpdGlvbih0KXtsZXR7YW5pbWF0aW9uOmV9PXQ7cmV0dXJuWyJzbGlkZSIsInJldmVhbCJdLnNvbWUoaT0+dHQoZVswXSxpKSl9fSxtZXRob2RzOnt0b2dnbGVFbGVtZW50KHQsZSxpKXtyZXR1cm4gbmV3IFByb21pc2Uocz0+UHJvbWlzZS5hbGwoJCh0KS5tYXAobj0+e2NvbnN0IG89TmUoZSk/ZTohdGhpcy5pc1RvZ2dsZWQobik7aWYoIWcobiwiYmVmb3JlIisobz8ic2hvdyI6ImhpZGUiKSxbdGhpc10pKXJldHVybiBQcm9taXNlLnJlamVjdCgpO2NvbnN0IHI9KG10KGkpP2k6aT09PSExfHwhdGhpcy5oYXNBbmltYXRpb24/cnIodGhpcyk6dGhpcy5oYXNUcmFuc2l0aW9uP0dzKHRoaXMpOmFyKHRoaXMpKShuLG8pLGE9bz90aGlzLmNsc0VudGVyOnRoaXMuY2xzTGVhdmU7YihuLGEpLGcobixvPyJzaG93IjoiaGlkZSIsW3RoaXNdKTtjb25zdCBsPSgpPT57TyhuLGEpLGcobixvPyJzaG93biI6ImhpZGRlbiIsW3RoaXNdKSx0aGlzLiR1cGRhdGUobil9O3JldHVybiByP3IudGhlbihsLCgpPT4oTyhuLGEpLFByb21pc2UucmVqZWN0KCkpKTpsKCl9KSkudGhlbihzLFQpKX0saXNUb2dnbGVkKHQpe3JldHVybiB0PT09dm9pZCAwJiYodD10aGlzLiRlbCksW3RdPSQodCksSSh0LHRoaXMuY2xzRW50ZXIpPyEwOkkodCx0aGlzLmNsc0xlYXZlKT8hMTp0aGlzLmNscz9JKHQsdGhpcy5jbHMuc3BsaXQoIiAiKVswXSk6Vih0KX0sX3RvZ2dsZSh0LGUpe2lmKCF0KXJldHVybjtlPUJvb2xlYW4oZSk7bGV0IGk7dGhpcy5jbHM/KGk9cCh0aGlzLmNscywiICIpfHxlIT09SSh0LHRoaXMuY2xzKSxpJiZXKHQsdGhpcy5jbHMscCh0aGlzLmNscywiICIpP3ZvaWQgMDplKSk6KGk9ZT09PXQuaGlkZGVuLGkmJih0LmhpZGRlbj0hZSkpLEQoIlthdXRvZm9jdXNdIix0KS5zb21lKHM9PlYocyk/cy5mb2N1cygpfHwhMDpzLmJsdXIoKSksaSYmKGcodCwidG9nZ2xlZCIsW2UsdGhpc10pLHRoaXMuJHVwZGF0ZSh0KSl9fX07ZnVuY3Rpb24gcnIodCl7bGV0e190b2dnbGU6ZX09dDtyZXR1cm4oaSxzKT0+KGZ0LmNhbmNlbChpKSxTLmNhbmNlbChpKSxlKGkscykpfWZ1bmN0aW9uIEdzKHQpe3ZhciBlO2NvbnN0W2k9InJldmVhbCIscz0idG9wIl09KChlPXQuYW5pbWF0aW9uWzBdKT09bnVsbD92b2lkIDA6ZS5zcGxpdCgiLSIpKXx8W10sbj1bWyJsZWZ0IiwicmlnaHQiXSxbInRvcCIsImJvdHRvbSJdXSxvPW5bcChuWzBdLHMpPzA6MV0scj1vWzFdPT09cyxsPVsid2lkdGgiLCJoZWlnaHQiXVtuLmluZGV4T2YobyldLGg9Im1hcmdpbi0iK29bMF0sdT0ibWFyZ2luLSIrcztyZXR1cm4gYXN5bmMoZCxmKT0+e2xldHtkdXJhdGlvbjptLHZlbG9jaXR5OkMsdHJhbnNpdGlvbjpFLF90b2dnbGU6VX09dCxGPXgoZClbbF07Y29uc3QgY2U9Uy5pblByb2dyZXNzKGQpO2F3YWl0IFMuY2FuY2VsKGQpLGYmJlUoZCwhMCk7Y29uc3QgaHM9T2JqZWN0LmZyb21FbnRyaWVzKFsicGFkZGluZyIsImJvcmRlciIsIndpZHRoIiwiaGVpZ2h0Iiwib3ZlcmZsb3dZIiwib3ZlcmZsb3dYIixoLHVdLm1hcChybz0+W3JvLGQuc3R5bGVbcm9dXSkpLE1lPXgoZCksY3M9dyhjKGQsaCkpLHNvPXcoYyhkLHUpKSxWdD1NZVtsXStzbzshY2UmJiFmJiYoRis9c28pO2NvbnN0W3dpXT1MaShkLCI8ZGl2PiIpO2Mod2kse2JveFNpemluZzoiYm9yZGVyLWJveCIsaGVpZ2h0Ok1lLmhlaWdodCx3aWR0aDpNZS53aWR0aCwuLi5jKGQsWyJvdmVyZmxvdyIsInBhZGRpbmciLCJib3JkZXJUb3AiLCJib3JkZXJSaWdodCIsImJvcmRlckJvdHRvbSIsImJvcmRlckxlZnQiLCJib3JkZXJJbWFnZSIsdV0pfSksYyhkLHtwYWRkaW5nOjAsYm9yZGVyOjAsbWluV2lkdGg6MCxtaW5IZWlnaHQ6MCxbdV06MCx3aWR0aDpNZS53aWR0aCxoZWlnaHQ6TWUuaGVpZ2h0LG92ZXJmbG93OiJoaWRkZW4iLFtsXTpGfSk7Y29uc3Qgbm89Ri9WdDttPShDKlZ0K20pKihmPzEtbm86bm8pO2NvbnN0IG9vPXtbbF06Zj9WdDowfTtyJiYoYyhkLGgsVnQtRitjcyksb29baF09Zj9jczpWdCtjcyksIXJeaT09PSJyZXZlYWwiJiYoYyh3aSxoLC1WdCtGKSxTLnN0YXJ0KHdpLHtbaF06Zj8wOi1WdH0sbSxFKSk7dHJ5e2F3YWl0IFMuc3RhcnQoZCxvbyxtLEUpfWZpbmFsbHl7YyhkLGhzKSxYZSh3aS5maXJzdENoaWxkKSxmfHxVKGQsITEpfX19ZnVuY3Rpb24gYXIodCl7cmV0dXJuKGUsaSk9PntmdC5jYW5jZWwoZSk7Y29uc3R7YW5pbWF0aW9uOnMsZHVyYXRpb246bixfdG9nZ2xlOm99PXQ7cmV0dXJuIGk/KG8oZSwhMCksZnQuaW4oZSxzWzBdLG4sdC5vcmlnaW4pKTpmdC5vdXQoZSxzWzFdfHxzWzBdLG4sdC5vcmlnaW4pLnRoZW4oKCk9Pm8oZSwhMSkpfX12YXIgSnM9e21peGluczpbbnQsU2UsRXRdLHByb3BzOnthbmltYXRpb246Qm9vbGVhbix0YXJnZXRzOlN0cmluZyxhY3RpdmU6bnVsbCxjb2xsYXBzaWJsZTpCb29sZWFuLG11bHRpcGxlOkJvb2xlYW4sdG9nZ2xlOlN0cmluZyxjb250ZW50OlN0cmluZyxvZmZzZXQ6TnVtYmVyfSxkYXRhOnt0YXJnZXRzOiI+ICoiLGFjdGl2ZTohMSxhbmltYXRpb246ITAsY29sbGFwc2libGU6ITAsbXVsdGlwbGU6ITEsY2xzT3BlbjoidWstb3BlbiIsdG9nZ2xlOiI+IC51ay1hY2NvcmRpb24tdGl0bGUiLGNvbnRlbnQ6Ij4gLnVrLWFjY29yZGlvbi1jb250ZW50IixvZmZzZXQ6MH0sY29tcHV0ZWQ6e2l0ZW1zOntnZXQodCxlKXtsZXR7dGFyZ2V0czppfT10O3JldHVybiBEKGksZSl9LHdhdGNoKHQsZSl7aWYoZXx8SSh0LHRoaXMuY2xzT3BlbikpcmV0dXJuO2NvbnN0IGk9dGhpcy5hY3RpdmUhPT0hMSYmdFtOdW1iZXIodGhpcy5hY3RpdmUpXXx8IXRoaXMuY29sbGFwc2libGUmJnRbMF07aSYmdGhpcy50b2dnbGUoaSwhMSl9LGltbWVkaWF0ZTohMH0sdG9nZ2xlcyh0KXtsZXR7dG9nZ2xlOmV9PXQ7cmV0dXJuIHRoaXMuaXRlbXMubWFwKGk9PnYoZSxpKSl9LGNvbnRlbnRzOntnZXQodCl7bGV0e2NvbnRlbnQ6ZX09dDtyZXR1cm4gdGhpcy5pdGVtcy5tYXAoaT0+dihlLGkpKX0sd2F0Y2godCl7Zm9yKGNvbnN0IGUgb2YgdClLcyhlLCFJKHRoaXMuaXRlbXMuZmluZChpPT5CKGUsaSkpLHRoaXMuY2xzT3BlbikpfSxpbW1lZGlhdGU6ITB9fSxjb25uZWN0ZWQoKXt0aGlzLmxhenlsb2FkKCl9LGV2ZW50czpbe25hbWU6ImNsaWNrIixkZWxlZ2F0ZSgpe3JldHVybiB0aGlzLnRhcmdldHMrIiAiK3RoaXMuJHByb3BzLnRvZ2dsZX0saGFuZGxlcih0KXt0LnByZXZlbnREZWZhdWx0KCksdGhpcy50b2dnbGUodGUodGhpcy50b2dnbGVzLHQuY3VycmVudCkpfX1dLG1ldGhvZHM6e3RvZ2dsZSh0LGUpe2xldCBpPVt0aGlzLml0ZW1zW1F0KHQsdGhpcy5pdGVtcyldXTtjb25zdCBzPXZlKHRoaXMuaXRlbXMsIi4iK3RoaXMuY2xzT3Blbik7aWYoIXRoaXMubXVsdGlwbGUmJiFwKHMsaVswXSkmJihpPWkuY29uY2F0KHMpKSwhKCF0aGlzLmNvbGxhcHNpYmxlJiZzLmxlbmd0aDwyJiYhdmUoaSwiOm5vdCguIit0aGlzLmNsc09wZW4rIikiKS5sZW5ndGgpKWZvcihjb25zdCBuIG9mIGkpdGhpcy50b2dnbGVFbGVtZW50KG4sIUkobix0aGlzLmNsc09wZW4pLGFzeW5jKG8scik9PntXKG8sdGhpcy5jbHNPcGVuLHIpLHkodih0aGlzLiRwcm9wcy50b2dnbGUsbyksImFyaWEtZXhwYW5kZWQiLHIpO2NvbnN0IGE9dih0aGlzLmNvbnRlbnQsbyk7aWYoZT09PSExfHwhdGhpcy5hbmltYXRpb24pe2EuaGlkZGVuPSFyLEtzKGEsIXIpO3JldHVybn1pZihhd2FpdCBHcyh0aGlzKShhLHIpLHIpe2NvbnN0IGw9dih0aGlzLiRwcm9wcy50b2dnbGUsbyk7ei5yZWFkKCgpPT57VWUobCl8fFlpKGwse29mZnNldDp0aGlzLm9mZnNldH0pfSl9fSl9fX07ZnVuY3Rpb24gS3ModCxlKXt0JiYodC5oaWRkZW49ZSl9dmFyIGxyPXttaXhpbnM6W250LEV0XSxhcmdzOiJhbmltYXRpb24iLHByb3BzOnthbmltYXRpb246Qm9vbGVhbixjbG9zZTpTdHJpbmd9LGRhdGE6e2FuaW1hdGlvbjohMCxzZWxDbG9zZToiLnVrLWFsZXJ0LWNsb3NlIixkdXJhdGlvbjoxNTB9LGV2ZW50czp7bmFtZToiY2xpY2siLGRlbGVnYXRlKCl7cmV0dXJuIHRoaXMuc2VsQ2xvc2V9LGhhbmRsZXIodCl7dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2UoKX19LG1ldGhvZHM6e2FzeW5jIGNsb3NlKCl7YXdhaXQgdGhpcy50b2dnbGVFbGVtZW50KHRoaXMuJGVsLCExLGhyKHRoaXMpKSx0aGlzLiRkZXN0cm95KCEwKX19fTtmdW5jdGlvbiBocih0KXtsZXR7ZHVyYXRpb246ZSx0cmFuc2l0aW9uOmksdmVsb2NpdHk6c309dDtyZXR1cm4gbj0+e2NvbnN0IG89dyhjKG4sImhlaWdodCIpKTtyZXR1cm4gYyhuLCJoZWlnaHQiLG8pLFMuc3RhcnQobix7aGVpZ2h0OjAsbWFyZ2luVG9wOjAsbWFyZ2luQm90dG9tOjAscGFkZGluZ1RvcDowLHBhZGRpbmdCb3R0b206MCxib3JkZXJUb3A6MCxib3JkZXJCb3R0b206MCxvcGFjaXR5OjB9LHMqbytlLGkpfX12YXIgWnM9e2FyZ3M6ImF1dG9wbGF5Iixwcm9wczp7YXV0b211dGU6Qm9vbGVhbixhdXRvcGxheTpCb29sZWFufSxkYXRhOnthdXRvbXV0ZTohMSxhdXRvcGxheTohMH0sY29ubmVjdGVkKCl7dGhpcy5pblZpZXc9dGhpcy5hdXRvcGxheT09PSJpbnZpZXciLHRoaXMuaW5WaWV3JiYhSXQodGhpcy4kZWwsInByZWxvYWQiKSYmKHRoaXMuJGVsLnByZWxvYWQ9Im5vbmUiKSxwdCh0aGlzLiRlbCwiaWZyYW1lIikmJiFJdCh0aGlzLiRlbCwiYWxsb3ciKSYmKHRoaXMuJGVsLmFsbG93PSJhdXRvcGxheSIpLHRoaXMuYXV0b211dGUmJkJzKHRoaXMuJGVsKSx0aGlzLnJlZ2lzdGVyT2JzZXJ2ZXIob2UodGhpcy4kZWwsKCk9PnRoaXMuJGVtaXQoKSx7fSwhMSkpfSx1cGRhdGU6e3JlYWQoKXtyZXR1cm4gTXModGhpcy4kZWwpP3t2aXNpYmxlOlYodGhpcy4kZWwpJiZjKHRoaXMuJGVsLCJ2aXNpYmlsaXR5IikhPT0iaGlkZGVuIixpblZpZXc6dGhpcy5pblZpZXcmJlVlKHRoaXMuJGVsKX06ITF9LHdyaXRlKHQpe2xldHt2aXNpYmxlOmUsaW5WaWV3Oml9PXQ7IWV8fHRoaXMuaW5WaWV3JiYhaT9fcyh0aGlzLiRlbCk6KHRoaXMuYXV0b3BsYXk9PT0hMHx8dGhpcy5pblZpZXcmJmkpJiZPcyh0aGlzLiRlbCl9fX0sd3Q9e2Nvbm5lY3RlZCgpe3ZhciB0O3RoaXMucmVnaXN0ZXJPYnNlcnZlcihLZSgoKHQ9dGhpcy4kb3B0aW9ucy5yZXNpemVUYXJnZXRzKT09bnVsbD92b2lkIDA6dC5jYWxsKHRoaXMpKXx8dGhpcy4kZWwsKCk9PnRoaXMuJGVtaXQoInJlc2l6ZSIpKSl9fSxjcj17bWl4aW5zOlt3dCxac10scHJvcHM6e3dpZHRoOk51bWJlcixoZWlnaHQ6TnVtYmVyfSxkYXRhOnthdXRvbXV0ZTohMH0sZXZlbnRzOnsibG9hZCBsb2FkZWRtZXRhZGF0YSIoKXt0aGlzLiRlbWl0KCJyZXNpemUiKX19LHJlc2l6ZVRhcmdldHMoKXtyZXR1cm5bdGhpcy4kZWwsUCh0aGlzLiRlbCldfSx1cGRhdGU6e3JlYWQoKXtjb25zdHtyYXRpbzp0LGNvdmVyOmV9PUxlLHskZWw6aSx3aWR0aDpzLGhlaWdodDpufT10aGlzO2xldCBvPXt3aWR0aDpzLGhlaWdodDpufTtpZighby53aWR0aHx8IW8uaGVpZ2h0KXtjb25zdCBoPXt3aWR0aDppLm5hdHVyYWxXaWR0aHx8aS52aWRlb1dpZHRofHxpLmNsaWVudFdpZHRoLGhlaWdodDppLm5hdHVyYWxIZWlnaHR8fGkudmlkZW9IZWlnaHR8fGkuY2xpZW50SGVpZ2h0fTtvLndpZHRoP289dChoLCJ3aWR0aCIsby53aWR0aCk6bj9vPXQoaCwiaGVpZ2h0IixvLmhlaWdodCk6bz1ofWNvbnN0e29mZnNldEhlaWdodDpyLG9mZnNldFdpZHRoOmF9PXVyKGkpfHxQKGkpLGw9ZShvLHt3aWR0aDphKyhhJTI/MTowKSxoZWlnaHQ6cisociUyPzE6MCl9KTtyZXR1cm4hbC53aWR0aHx8IWwuaGVpZ2h0PyExOmx9LHdyaXRlKHQpe2xldHtoZWlnaHQ6ZSx3aWR0aDppfT10O2ModGhpcy4kZWwse2hlaWdodDplLHdpZHRoOml9KX0sZXZlbnRzOlsicmVzaXplIl19fTtmdW5jdGlvbiB1cih0KXtmb3IoO3Q9UCh0KTspaWYoYyh0LCJwb3NpdGlvbiIpIT09InN0YXRpYyIpcmV0dXJuIHR9dmFyIGFlPXtwcm9wczp7Y29udGFpbmVyOkJvb2xlYW59LGRhdGE6e2NvbnRhaW5lcjohMH0sY29tcHV0ZWQ6e2NvbnRhaW5lcih0KXtsZXR7Y29udGFpbmVyOmV9PXQ7cmV0dXJuIGU9PT0hMCYmdGhpcy4kY29udGFpbmVyfHxlJiZ2KGUpfX19LFFzPXtwcm9wczp7cG9zOlN0cmluZyxvZmZzZXQ6bnVsbCxmbGlwOkJvb2xlYW4sc2hpZnQ6Qm9vbGVhbixpbnNldDpCb29sZWFufSxkYXRhOntwb3M6ImJvdHRvbS0iKyhYPyJyaWdodCI6ImxlZnQiKSxvZmZzZXQ6ITEsZmxpcDohMCxzaGlmdDohMCxpbnNldDohMX0sY29ubmVjdGVkKCl7dGhpcy5wb3M9dGhpcy4kcHJvcHMucG9zLnNwbGl0KCItIikuY29uY2F0KCJjZW50ZXIiKS5zbGljZSgwLDIpLFt0aGlzLmRpcix0aGlzLmFsaWduXT10aGlzLnBvcyx0aGlzLmF4aXM9cChbInRvcCIsImJvdHRvbSJdLHRoaXMuZGlyKT8ieSI6IngifSxtZXRob2RzOntwb3NpdGlvbkF0KHQsZSxpKXtsZXQgcz1bdGhpcy5nZXRQb3NpdGlvbk9mZnNldCh0KSx0aGlzLmdldFNoaWZ0T2Zmc2V0KHQpXTtjb25zdCBuPVt0aGlzLmZsaXAmJiJmbGlwIix0aGlzLnNoaWZ0JiYic2hpZnQiXSxvPXtlbGVtZW50Olt0aGlzLmluc2V0P3RoaXMuZGlyOnFlKHRoaXMuZGlyKSx0aGlzLmFsaWduXSx0YXJnZXQ6W3RoaXMuZGlyLHRoaXMuYWxpZ25dfTtpZih0aGlzLmF4aXM9PT0ieSIpe2Zvcihjb25zdCB1IGluIG8pb1t1XS5yZXZlcnNlKCk7cy5yZXZlcnNlKCksbi5yZXZlcnNlKCl9Y29uc3Rbcl09USh0LC9hdXRvfHNjcm9sbC8pLHtzY3JvbGxUb3A6YSxzY3JvbGxMZWZ0Omx9PXIsaD14KHQpO2ModCx7dG9wOi1oLmhlaWdodCxsZWZ0Oi1oLndpZHRofSksTHModCxlLHthdHRhY2g6byxvZmZzZXQ6cyxib3VuZGFyeTppLHBsYWNlbWVudDpuLHZpZXdwb3J0T2Zmc2V0OnRoaXMuZ2V0Vmlld3BvcnRPZmZzZXQodCl9KSxyLnNjcm9sbFRvcD1hLHIuc2Nyb2xsTGVmdD1sfSxnZXRQb3NpdGlvbk9mZnNldCh0KXtyZXR1cm4gSih0aGlzLm9mZnNldD09PSExP2ModCwiLS11ay1wb3NpdGlvbi1vZmZzZXQiKTp0aGlzLm9mZnNldCx0aGlzLmF4aXM9PT0ieCI/IndpZHRoIjoiaGVpZ2h0Iix0KSoocChbImxlZnQiLCJ0b3AiXSx0aGlzLmRpcik/LTE6MSkqKHRoaXMuaW5zZXQ/LTE6MSl9LGdldFNoaWZ0T2Zmc2V0KHQpe3JldHVybiB0aGlzLmFsaWduPT09ImNlbnRlciI/MDpKKGModCwiLS11ay1wb3NpdGlvbi1zaGlmdC1vZmZzZXQiKSx0aGlzLmF4aXM9PT0ieSI/IndpZHRoIjoiaGVpZ2h0Iix0KSoocChbImxlZnQiLCJ0b3AiXSx0aGlzLmFsaWduKT8xOi0xKX0sZ2V0Vmlld3BvcnRPZmZzZXQodCl7cmV0dXJuIEooYyh0LCItLXVrLXBvc2l0aW9uLXZpZXdwb3J0LW9mZnNldCIpKX19fSxkcj17YmVmb3JlQ29ubmVjdCgpe3RoaXMuX3N0eWxlPXkodGhpcy4kZWwsInN0eWxlIil9LGRpc2Nvbm5lY3RlZCgpe3kodGhpcy4kZWwsInN0eWxlIix0aGlzLl9zdHlsZSl9fTtjb25zdCBvdD1bXTt2YXIgS2k9e21peGluczpbbnQsYWUsRXRdLHByb3BzOntzZWxQYW5lbDpTdHJpbmcsc2VsQ2xvc2U6U3RyaW5nLGVzY0Nsb3NlOkJvb2xlYW4sYmdDbG9zZTpCb29sZWFuLHN0YWNrOkJvb2xlYW59LGRhdGE6e2NsczoidWstb3BlbiIsZXNjQ2xvc2U6ITAsYmdDbG9zZTohMCxvdmVybGF5OiEwLHN0YWNrOiExfSxjb21wdXRlZDp7cGFuZWwodCxlKXtsZXR7c2VsUGFuZWw6aX09dDtyZXR1cm4gdihpLGUpfSx0cmFuc2l0aW9uRWxlbWVudCgpe3JldHVybiB0aGlzLnBhbmVsfSxiZ0Nsb3NlKHQpe2xldHtiZ0Nsb3NlOmV9PXQ7cmV0dXJuIGUmJnRoaXMucGFuZWx9fSxiZWZvcmVEaXNjb25uZWN0KCl7cChvdCx0aGlzKSYmdGhpcy50b2dnbGVFbGVtZW50KHRoaXMuJGVsLCExLCExKX0sZXZlbnRzOlt7bmFtZToiY2xpY2siLGRlbGVnYXRlKCl7cmV0dXJuIHRoaXMuc2VsQ2xvc2V9LGhhbmRsZXIodCl7dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaGlkZSgpfX0se25hbWU6InRvZ2dsZSIsc2VsZjohMCxoYW5kbGVyKHQpe3QuZGVmYXVsdFByZXZlbnRlZHx8KHQucHJldmVudERlZmF1bHQoKSx0aGlzLmlzVG9nZ2xlZCgpPT09cChvdCx0aGlzKSYmdGhpcy50b2dnbGUoKSl9fSx7bmFtZToiYmVmb3Jlc2hvdyIsc2VsZjohMCxoYW5kbGVyKHQpe2lmKHAob3QsdGhpcykpcmV0dXJuITE7IXRoaXMuc3RhY2smJm90Lmxlbmd0aD8oUHJvbWlzZS5hbGwob3QubWFwKGU9PmUuaGlkZSgpKSkudGhlbih0aGlzLnNob3cpLHQucHJldmVudERlZmF1bHQoKSk6b3QucHVzaCh0aGlzKX19LHtuYW1lOiJzaG93IixzZWxmOiEwLGhhbmRsZXIoKXtOKHRoaXMuJGVsLCJoaWRlIixrKGRvY3VtZW50LCJmb2N1c2luIix0PT57WnQob3QpPT09dGhpcyYmIUIodC50YXJnZXQsdGhpcy4kZWwpJiZ0aGlzLiRlbC5mb2N1cygpfSkpLHRoaXMub3ZlcmxheSYmKE4odGhpcy4kZWwsImhpZGRlbiIsdG4odGhpcy4kZWwpLHtzZWxmOiEwfSksTih0aGlzLiRlbCwiaGlkZGVuIixlbigpLHtzZWxmOiEwfSkpLHRoaXMuc3RhY2smJmModGhpcy4kZWwsInpJbmRleCIsdyhjKHRoaXMuJGVsLCJ6SW5kZXgiKSkrb3QubGVuZ3RoKSxiKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0aGlzLmNsc1BhZ2UpLHRoaXMuYmdDbG9zZSYmTih0aGlzLiRlbCwiaGlkZSIsayhkb2N1bWVudCxndCx0PT57bGV0e3RhcmdldDplfT10O1p0KG90KSE9PXRoaXN8fHRoaXMub3ZlcmxheSYmIUIoZSx0aGlzLiRlbCl8fEIoZSx0aGlzLnBhbmVsKXx8Tihkb2N1bWVudCxBdCsiICIrSmUrIiBzY3JvbGwiLGk9PntsZXR7ZGVmYXVsdFByZXZlbnRlZDpzLHR5cGU6bix0YXJnZXQ6b309aTshcyYmbj09PUF0JiZlPT09byYmdGhpcy5oaWRlKCl9LCEwKX0pLHtzZWxmOiEwfSksdGhpcy5lc2NDbG9zZSYmTih0aGlzLiRlbCwiaGlkZSIsayhkb2N1bWVudCwia2V5ZG93biIsdD0+e3Qua2V5Q29kZT09PTI3JiZadChvdCk9PT10aGlzJiZ0aGlzLmhpZGUoKX0pLHtzZWxmOiEwfSl9fSx7bmFtZToic2hvd24iLHNlbGY6ITAsaGFuZGxlcigpe2plKHRoaXMuJGVsKXx8eSh0aGlzLiRlbCwidGFiaW5kZXgiLCItMSIpLHYoIjpmb2N1cyIsdGhpcy4kZWwpfHx0aGlzLiRlbC5mb2N1cygpfX0se25hbWU6ImhpZGRlbiIsc2VsZjohMCxoYW5kbGVyKCl7cChvdCx0aGlzKSYmb3Quc3BsaWNlKG90LmluZGV4T2YodGhpcyksMSksYyh0aGlzLiRlbCwiekluZGV4IiwiIiksb3Quc29tZSh0PT50LmNsc1BhZ2U9PT10aGlzLmNsc1BhZ2UpfHxPKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0aGlzLmNsc1BhZ2UpfX1dLG1ldGhvZHM6e3RvZ2dsZSgpe3JldHVybiB0aGlzLmlzVG9nZ2xlZCgpP3RoaXMuaGlkZSgpOnRoaXMuc2hvdygpfSxzaG93KCl7cmV0dXJuIHRoaXMuY29udGFpbmVyJiZQKHRoaXMuJGVsKSE9PXRoaXMuY29udGFpbmVyPyhqKHRoaXMuY29udGFpbmVyLHRoaXMuJGVsKSxuZXcgUHJvbWlzZSh0PT5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuc2hvdygpLnRoZW4odCkpKSk6dGhpcy50b2dnbGVFbGVtZW50KHRoaXMuJGVsLCEwLFVzKHRoaXMpKX0saGlkZSgpe3JldHVybiB0aGlzLnRvZ2dsZUVsZW1lbnQodGhpcy4kZWwsITEsVXModGhpcykpfX19O2Z1bmN0aW9uIFVzKHQpe2xldHt0cmFuc2l0aW9uRWxlbWVudDplLF90b2dnbGU6aX09dDtyZXR1cm4ocyxuKT0+bmV3IFByb21pc2UoKG8scik9Pk4ocywic2hvdyBoaWRlIiwoKT0+e3MuX3JlamVjdD09bnVsbHx8cy5fcmVqZWN0KCkscy5fcmVqZWN0PXIsaShzLG4pO2NvbnN0IGE9TihlLCJ0cmFuc2l0aW9uc3RhcnQiLCgpPT57TihlLCJ0cmFuc2l0aW9uZW5kIHRyYW5zaXRpb25jYW5jZWwiLG8se3NlbGY6ITB9KSxjbGVhclRpbWVvdXQobCl9LHtzZWxmOiEwfSksbD1zZXRUaW1lb3V0KCgpPT57YSgpLG8oKX0sZnIoYyhlLCJ0cmFuc2l0aW9uRHVyYXRpb24iKSkpfSkpLnRoZW4oKCk9PmRlbGV0ZSBzLl9yZWplY3QpfWZ1bmN0aW9uIGZyKHQpe3JldHVybiB0P1h0KHQsIm1zIik/dyh0KTp3KHQpKjFlMzowfWZ1bmN0aW9uIHRuKHQpe2lmKENTUy5zdXBwb3J0cygib3ZlcnNjcm9sbC1iZWhhdmlvciIsImNvbnRhaW4iKSl7Y29uc3Qgcz1wcih0LG49Pi9hdXRvfHNjcm9sbC8udGVzdChjKG4sIm92ZXJmbG93IikpKTtyZXR1cm4gYyhzLCJvdmVyc2Nyb2xsQmVoYXZpb3IiLCJjb250YWluIiksKCk9PmMocywib3ZlcnNjcm9sbEJlaGF2aW9yIiwiIil9bGV0IGU7Y29uc3QgaT1bayh0LCJ0b3VjaHN0YXJ0IixzPT57bGV0e3RhcmdldFRvdWNoZXM6bn09cztuLmxlbmd0aD09PTEmJihlPW5bMF0uY2xpZW50WSl9LHtwYXNzaXZlOiEwfSksayh0LCJ0b3VjaG1vdmUiLHM9PntpZihzLnRhcmdldFRvdWNoZXMubGVuZ3RoIT09MSlyZXR1cm47bGV0W25dPVEocy50YXJnZXQsL2F1dG98c2Nyb2xsLyk7QihuLHQpfHwobj10KTtjb25zdCBvPXMudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRZLWUse3Njcm9sbFRvcDpyLHNjcm9sbEhlaWdodDphLGNsaWVudEhlaWdodDpsfT1uOyhsPj1hfHxyPT09MCYmbz4wfHxhLXI8PWwmJm88MCkmJnMuY2FuY2VsYWJsZSYmcy5wcmV2ZW50RGVmYXVsdCgpfSx7cGFzc2l2ZTohMX0pXTtyZXR1cm4oKT0+aS5mb3JFYWNoKHM9PnMoKSl9bGV0IFppO2Z1bmN0aW9uIGVuKCl7aWYoWmkpcmV0dXJuIFQ7Wmk9ITA7Y29uc3R7c2Nyb2xsaW5nRWxlbWVudDp0fT1kb2N1bWVudDtyZXR1cm4gYyh0LHtvdmVyZmxvd1k6ImhpZGRlbiIsdG91Y2hBY3Rpb246Im5vbmUiLHBhZGRpbmdSaWdodDp5ZSh3aW5kb3cpLXQuY2xpZW50V2lkdGh9KSwoKT0+e1ppPSExLGModCx7b3ZlcmZsb3dZOiIiLHRvdWNoQWN0aW9uOiIiLHBhZGRpbmdSaWdodDoiIn0pfX1mdW5jdGlvbiBwcih0LGUpe2NvbnN0IGk9W107cmV0dXJuIHZ0KHQscz0+e2UocykmJmkucHVzaChzKX0pLGl9bGV0IFk7dmFyIHNuPXttaXhpbnM6W2FlLFNlLFFzLGRyLEV0XSxhcmdzOiJwb3MiLHByb3BzOnttb2RlOiJsaXN0Iix0b2dnbGU6Qm9vbGVhbixib3VuZGFyeTpCb29sZWFuLHRhcmdldDpCb29sZWFuLHRhcmdldFg6Qm9vbGVhbix0YXJnZXRZOkJvb2xlYW4sc3RyZXRjaDpCb29sZWFuLGRlbGF5U2hvdzpOdW1iZXIsZGVsYXlIaWRlOk51bWJlcixhdXRvVXBkYXRlOkJvb2xlYW4sY2xzRHJvcDpTdHJpbmcsYW5pbWF0ZU91dDpCb29sZWFuLGJnU2Nyb2xsOkJvb2xlYW59LGRhdGE6e21vZGU6WyJjbGljayIsImhvdmVyIl0sdG9nZ2xlOiItICoiLGJvdW5kYXJ5OiExLHRhcmdldDohMSx0YXJnZXRYOiExLHRhcmdldFk6ITEsc3RyZXRjaDohMSxkZWxheVNob3c6MCxkZWxheUhpZGU6ODAwLGF1dG9VcGRhdGU6ITAsY2xzRHJvcDohMSxhbmltYXRlT3V0OiExLGJnU2Nyb2xsOiEwLGFuaW1hdGlvbjpbInVrLWFuaW1hdGlvbi1mYWRlIl0sY2xzOiJ1ay1vcGVuIixjb250YWluZXI6ITF9LGNvbXB1dGVkOnt0YXJnZXQodCxlKXtsZXR7dGFyZ2V0OmksdGFyZ2V0WDpzLHRhcmdldFk6bn09dDtyZXR1cm4gcz1zfHxpfHx0aGlzLnRhcmdldEVsLG49bnx8aXx8dGhpcy50YXJnZXRFbCxbcz09PSEwP3dpbmRvdzpkdChzLGUpLG49PT0hMD93aW5kb3c6ZHQobixlKV19fSxjcmVhdGVkKCl7dGhpcy50cmFja2VyPW5ldyBqaX0sYmVmb3JlQ29ubmVjdCgpe3RoaXMuY2xzRHJvcD10aGlzLiRwcm9wcy5jbHNEcm9wfHwidWstIit0aGlzLiRvcHRpb25zLm5hbWV9LGNvbm5lY3RlZCgpe2IodGhpcy4kZWwsdGhpcy5jbHNEcm9wKSx0aGlzLnRvZ2dsZSYmIXRoaXMudGFyZ2V0RWwmJih0aGlzLnRhcmdldEVsPXRoaXMuJGNyZWF0ZSgidG9nZ2xlIixkdCh0aGlzLnRvZ2dsZSx0aGlzLiRlbCkse3RhcmdldDp0aGlzLiRlbCxtb2RlOnRoaXMubW9kZX0pLiRlbCx5KHRoaXMudGFyZ2V0RWwsImFyaWEtaGFzcG9wdXAiLCEwKSx0aGlzLmxhenlsb2FkKHRoaXMudGFyZ2V0RWwpKX0sZGlzY29ubmVjdGVkKCl7dGhpcy5pc0FjdGl2ZSgpJiYodGhpcy5oaWRlKCExKSxZPW51bGwpfSxldmVudHM6W3tuYW1lOiJjbGljayIsZGVsZWdhdGUoKXtyZXR1cm4iLiIrdGhpcy5jbHNEcm9wKyItY2xvc2UifSxoYW5kbGVyKHQpe3QucHJldmVudERlZmF1bHQoKSx0aGlzLmhpZGUoITEpfX0se25hbWU6ImNsaWNrIixkZWxlZ2F0ZSgpe3JldHVybidhW2hyZWZePSIjIl0nfSxoYW5kbGVyKHQpe2xldHtkZWZhdWx0UHJldmVudGVkOmUsY3VycmVudDp7aGFzaDppfX09dDshZSYmaSYmIUIoaSx0aGlzLiRlbCkmJnRoaXMuaGlkZSghMSl9fSx7bmFtZToiYmVmb3Jlc2Nyb2xsIixoYW5kbGVyKCl7dGhpcy5oaWRlKCExKX19LHtuYW1lOiJ0b2dnbGUiLHNlbGY6ITAsaGFuZGxlcih0LGUpe3QucHJldmVudERlZmF1bHQoKSx0aGlzLmlzVG9nZ2xlZCgpP3RoaXMuaGlkZSghMSk6dGhpcy5zaG93KGU9PW51bGw/dm9pZCAwOmUuJGVsLCExKX19LHtuYW1lOiJ0b2dnbGVzaG93IixzZWxmOiEwLGhhbmRsZXIodCxlKXt0LnByZXZlbnREZWZhdWx0KCksdGhpcy5zaG93KGU9PW51bGw/dm9pZCAwOmUuJGVsKX19LHtuYW1lOiJ0b2dnbGVoaWRlIixzZWxmOiEwLGhhbmRsZXIodCl7dC5wcmV2ZW50RGVmYXVsdCgpLEwodGhpcy4kZWwsIjpmb2N1cyw6aG92ZXIiKXx8dGhpcy5oaWRlKCl9fSx7bmFtZTpqdCsiIGZvY3VzaW4iLGZpbHRlcigpe3JldHVybiBwKHRoaXMubW9kZSwiaG92ZXIiKX0saGFuZGxlcih0KXskdCh0KXx8dGhpcy5jbGVhclRpbWVycygpfX0se25hbWU6bmUrIiBmb2N1c291dCIsZmlsdGVyKCl7cmV0dXJuIHAodGhpcy5tb2RlLCJob3ZlciIpfSxoYW5kbGVyKHQpeyEkdCh0KSYmdC5yZWxhdGVkVGFyZ2V0JiZ0aGlzLmhpZGUoKX19LHtuYW1lOiJ0b2dnbGVkIixzZWxmOiEwLGhhbmRsZXIodCxlKXshZXx8KHRoaXMuY2xlYXJUaW1lcnMoKSx0aGlzLnBvc2l0aW9uKCkpfX0se25hbWU6InNob3ciLHNlbGY6ITAsaGFuZGxlcigpe1k9dGhpcyx0aGlzLnRyYWNrZXIuaW5pdCgpO2NvbnN0IHQ9KCk9PnRoaXMuJGVtaXQoKSxlPVtrKGRvY3VtZW50LGd0LGk9PntsZXR7dGFyZ2V0OnN9PWk7cmV0dXJuIUIocyx0aGlzLiRlbCkmJk4oZG9jdW1lbnQsQXQrIiAiK0plKyIgc2Nyb2xsIixuPT57bGV0e2RlZmF1bHRQcmV2ZW50ZWQ6byx0eXBlOnIsdGFyZ2V0OmF9PW47IW8mJnI9PT1BdCYmcz09PWEmJiEodGhpcy50YXJnZXRFbCYmQihzLHRoaXMudGFyZ2V0RWwpKSYmdGhpcy5oaWRlKCExKX0sITApfSksayhkb2N1bWVudCwia2V5ZG93biIsaT0+e2kua2V5Q29kZT09PTI3JiZ0aGlzLmhpZGUoITEpfSksayh3aW5kb3csInJlc2l6ZSIsdCksKCgpPT57Y29uc3QgaT1LZShRKHRoaXMuJGVsKS5jb25jYXQodGhpcy50YXJnZXQpLHQpO3JldHVybigpPT5pLmRpc2Nvbm5lY3QoKX0pKCksLi4udGhpcy5hdXRvVXBkYXRlP1trKFtkb2N1bWVudCxRKHRoaXMuJGVsKV0sInNjcm9sbCIsdCx7cGFzc2l2ZTohMH0pXTpbXSwuLi50aGlzLmJnU2Nyb2xsP1tdOlt0bih0aGlzLiRlbCksZW4oKV1dO04odGhpcy4kZWwsImhpZGUiLCgpPT5lLmZvckVhY2goaT0+aSgpKSx7c2VsZjohMH0pfX0se25hbWU6ImJlZm9yZWhpZGUiLHNlbGY6ITAsaGFuZGxlcigpe3RoaXMuY2xlYXJUaW1lcnMoKX19LHtuYW1lOiJoaWRlIixoYW5kbGVyKHQpe2xldHt0YXJnZXQ6ZX09dDtpZih0aGlzLiRlbCE9PWUpe1k9WT09PW51bGwmJkIoZSx0aGlzLiRlbCkmJnRoaXMuaXNUb2dnbGVkKCk/dGhpczpZO3JldHVybn1ZPXRoaXMuaXNBY3RpdmUoKT9udWxsOlksdGhpcy50cmFja2VyLmNhbmNlbCgpfX1dLHVwZGF0ZTp7d3JpdGUoKXt0aGlzLmlzVG9nZ2xlZCgpJiYhSSh0aGlzLiRlbCx0aGlzLmNsc0VudGVyKSYmdGhpcy5wb3NpdGlvbigpfX0sbWV0aG9kczp7c2hvdyh0LGUpe2lmKHQ9PT12b2lkIDAmJih0PXRoaXMudGFyZ2V0RWwpLGU9PT12b2lkIDAmJihlPSEwKSx0aGlzLmlzVG9nZ2xlZCgpJiZ0JiZ0aGlzLnRhcmdldEVsJiZ0IT09dGhpcy50YXJnZXRFbCYmdGhpcy5oaWRlKCExLCExKSx0aGlzLnRhcmdldEVsPXQsdGhpcy5jbGVhclRpbWVycygpLCF0aGlzLmlzQWN0aXZlKCkpe2lmKFkpe2lmKGUmJlkuaXNEZWxheWluZyl7dGhpcy5zaG93VGltZXI9c2V0VGltZW91dCgoKT0+TCh0LCI6aG92ZXIiKSYmdGhpcy5zaG93KCksMTApO3JldHVybn1sZXQgaTtmb3IoO1kmJmkhPT1ZJiYhQih0aGlzLiRlbCxZLiRlbCk7KWk9WSxZLmhpZGUoITEsITEpfXRoaXMuY29udGFpbmVyJiZQKHRoaXMuJGVsKSE9PXRoaXMuY29udGFpbmVyJiZqKHRoaXMuY29udGFpbmVyLHRoaXMuJGVsKSx0aGlzLnNob3dUaW1lcj1zZXRUaW1lb3V0KCgpPT50aGlzLnRvZ2dsZUVsZW1lbnQodGhpcy4kZWwsITApLGUmJnRoaXMuZGVsYXlTaG93fHwwKX19LGhpZGUodCxlKXt0PT09dm9pZCAwJiYodD0hMCksZT09PXZvaWQgMCYmKGU9ITApO2NvbnN0IGk9KCk9PnRoaXMudG9nZ2xlRWxlbWVudCh0aGlzLiRlbCwhMSx0aGlzLmFuaW1hdGVPdXQmJmUpO3RoaXMuY2xlYXJUaW1lcnMoKSx0aGlzLmlzRGVsYXlpbmc9Z3IodGhpcy4kZWwpLnNvbWUocz0+dGhpcy50cmFja2VyLm1vdmVzVG8ocykpLHQmJnRoaXMuaXNEZWxheWluZz90aGlzLmhpZGVUaW1lcj1zZXRUaW1lb3V0KHRoaXMuaGlkZSw1MCk6dCYmdGhpcy5kZWxheUhpZGU/dGhpcy5oaWRlVGltZXI9c2V0VGltZW91dChpLHRoaXMuZGVsYXlIaWRlKTppKCl9LGNsZWFyVGltZXJzKCl7Y2xlYXJUaW1lb3V0KHRoaXMuc2hvd1RpbWVyKSxjbGVhclRpbWVvdXQodGhpcy5oaWRlVGltZXIpLHRoaXMuc2hvd1RpbWVyPW51bGwsdGhpcy5oaWRlVGltZXI9bnVsbCx0aGlzLmlzRGVsYXlpbmc9ITF9LGlzQWN0aXZlKCl7cmV0dXJuIFk9PT10aGlzfSxwb3NpdGlvbigpe08odGhpcy4kZWwsdGhpcy5jbHNEcm9wKyItc3RhY2siKSx5KHRoaXMuJGVsLCJzdHlsZSIsdGhpcy5fc3R5bGUpLHRoaXMuJGVsLmhpZGRlbj0hMDtjb25zdCB0PWR0KHRoaXMuYm91bmRhcnksdGhpcy4kZWwpLGU9QSh0fHx3aW5kb3cpLGk9dGhpcy50YXJnZXQubWFwKHI9Pmx0KFEocilbMF0pKSxzPXRoaXMuZ2V0Vmlld3BvcnRPZmZzZXQodGhpcy4kZWwpLG49W1swLFsieCIsIndpZHRoIiwibGVmdCIsInJpZ2h0Il1dLFsxLFsieSIsImhlaWdodCIsInRvcCIsImJvdHRvbSJdXV07Zm9yKGNvbnN0W3IsW2EsbF1db2Ygbil0aGlzLmF4aXMhPT1hJiZwKFthLCEwXSx0aGlzLnN0cmV0Y2gpJiZjKHRoaXMuJGVsLHtbbF06TWF0aC5taW4oZVtsXSxpW3JdW2xdLTIqcyksWyJvdmVyZmxvdy0iK2FdOiJhdXRvIn0pO2NvbnN0IG89aVswXS53aWR0aC0yKnM7dGhpcy4kZWwub2Zmc2V0V2lkdGg+byYmYih0aGlzLiRlbCx0aGlzLmNsc0Ryb3ArIi1zdGFjayIpLGModGhpcy4kZWwsIm1heFdpZHRoIixvKSx0aGlzLiRlbC5oaWRkZW49ITEsdGhpcy5wb3NpdGlvbkF0KHRoaXMuJGVsLHRoaXMudGFyZ2V0LHQpO2Zvcihjb25zdFtyLFthLGwsaCx1XV1vZiBuKWlmKHRoaXMuYXhpcz09PWEmJnAoW2EsITBdLHRoaXMuc3RyZXRjaCkpe2NvbnN0IGQ9TWF0aC5hYnModGhpcy5nZXRQb3NpdGlvbk9mZnNldCh0aGlzLiRlbCkpLGY9QSh0aGlzLnRhcmdldFtyXSksbT1BKHRoaXMuJGVsKTtjKHRoaXMuJGVsLHtbbF06KGZbaF0+bVtoXT9mW2hdLU1hdGgubWF4KGVbaF0saVtyXVtoXStzKTpNYXRoLm1pbihlW3VdLGlbcl1bdV0tcyktZlt1XSktZCxbIm92ZXJmbG93LSIrYV06ImF1dG8ifSksdGhpcy5wb3NpdGlvbkF0KHRoaXMuJGVsLHRoaXMudGFyZ2V0LHQpfX19fTtmdW5jdGlvbiBncih0KXtjb25zdCBlPVtdO3JldHVybiB2dCh0LGk9PmMoaSwicG9zaXRpb24iKSE9PSJzdGF0aWMiJiZlLnB1c2goaSkpLGV9dmFyIG1yPXttaXhpbnM6W250XSxhcmdzOiJ0YXJnZXQiLHByb3BzOnt0YXJnZXQ6Qm9vbGVhbn0sZGF0YTp7dGFyZ2V0OiExfSxjb21wdXRlZDp7aW5wdXQodCxlKXtyZXR1cm4gdihtZSxlKX0sc3RhdGUoKXtyZXR1cm4gdGhpcy5pbnB1dC5uZXh0RWxlbWVudFNpYmxpbmd9LHRhcmdldCh0LGUpe2xldHt0YXJnZXQ6aX09dDtyZXR1cm4gaSYmKGk9PT0hMCYmUCh0aGlzLmlucHV0KT09PWUmJnRoaXMuaW5wdXQubmV4dEVsZW1lbnRTaWJsaW5nfHx2KGksZSkpfX0sdXBkYXRlKCl7dmFyIHQ7Y29uc3R7dGFyZ2V0OmUsaW5wdXQ6aX09dGhpcztpZighZSlyZXR1cm47bGV0IHM7Y29uc3Qgbj1JaShlKT8idmFsdWUiOiJ0ZXh0Q29udGVudCIsbz1lW25dLHI9KHQ9aS5maWxlcykhPW51bGwmJnRbMF0/aS5maWxlc1swXS5uYW1lOkwoaSwic2VsZWN0IikmJihzPUQoIm9wdGlvbiIsaSkuZmlsdGVyKGE9PmEuc2VsZWN0ZWQpWzBdKT9zLnRleHRDb250ZW50OmkudmFsdWU7byE9PXImJihlW25dPXIpfSxldmVudHM6W3tuYW1lOiJjaGFuZ2UiLGhhbmRsZXIoKXt0aGlzLiRlbWl0KCl9fSx7bmFtZToicmVzZXQiLGVsKCl7cmV0dXJuIGl0KHRoaXMuJGVsLCJmb3JtIil9LGhhbmRsZXIoKXt0aGlzLiRlbWl0KCl9fV19LG5uPXttaXhpbnM6W3d0XSxwcm9wczp7bWFyZ2luOlN0cmluZyxmaXJzdENvbHVtbjpCb29sZWFufSxkYXRhOnttYXJnaW46InVrLW1hcmdpbi1zbWFsbC10b3AiLGZpcnN0Q29sdW1uOiJ1ay1maXJzdC1jb2x1bW4ifSxyZXNpemVUYXJnZXRzKCl7cmV0dXJuW3RoaXMuJGVsLC4uLmJpKHRoaXMuJGVsLmNoaWxkcmVuKV19LGNvbm5lY3RlZCgpe3RoaXMucmVnaXN0ZXJPYnNlcnZlcihQcyh0aGlzLiRlbCwoKT0+dGhpcy4kcmVzZXQoKSx7Y2hpbGRMaXN0OiEwfSkpfSx1cGRhdGU6e3JlYWQoKXtjb25zdCB0PVFpKHRoaXMuJGVsLmNoaWxkcmVuKTtyZXR1cm57cm93czp0LGNvbHVtbnM6dnIodCl9fSx3cml0ZSh0KXtsZXR7Y29sdW1uczplLHJvd3M6aX09dDtmb3IoY29uc3QgcyBvZiBpKWZvcihjb25zdCBuIG9mIHMpVyhuLHRoaXMubWFyZ2luLGlbMF0hPT1zKSxXKG4sdGhpcy5maXJzdENvbHVtbixlWzBdLmluY2x1ZGVzKG4pKX0sZXZlbnRzOlsicmVzaXplIl19fTtmdW5jdGlvbiBRaSh0KXtyZXR1cm4gb24odCwidG9wIiwiYm90dG9tIil9ZnVuY3Rpb24gdnIodCl7Y29uc3QgZT1bXTtmb3IoY29uc3QgaSBvZiB0KXtjb25zdCBzPW9uKGksImxlZnQiLCJyaWdodCIpO2ZvcihsZXQgbj0wO248cy5sZW5ndGg7bisrKWVbbl09ZVtuXT9lW25dLmNvbmNhdChzW25dKTpzW25dfXJldHVybiBYP2UucmV2ZXJzZSgpOmV9ZnVuY3Rpb24gb24odCxlLGkpe2NvbnN0IHM9W1tdXTtmb3IoY29uc3QgbiBvZiB0KXtpZighVihuKSljb250aW51ZTtsZXQgbz1paShuKTtmb3IobGV0IHI9cy5sZW5ndGgtMTtyPj0wO3ItLSl7Y29uc3QgYT1zW3JdO2lmKCFhWzBdKXthLnB1c2gobik7YnJlYWt9bGV0IGw7aWYoYVswXS5vZmZzZXRQYXJlbnQ9PT1uLm9mZnNldFBhcmVudD9sPWlpKGFbMF0pOihvPWlpKG4sITApLGw9aWkoYVswXSwhMCkpLG9bZV0+PWxbaV0tMSYmb1tlXSE9PWxbZV0pe3MucHVzaChbbl0pO2JyZWFrfWlmKG9baV0tMT5sW2VdfHxvW2VdPT09bFtlXSl7YS5wdXNoKG4pO2JyZWFrfWlmKHI9PT0wKXtzLnVuc2hpZnQoW25dKTticmVha319fXJldHVybiBzfWZ1bmN0aW9uIGlpKHQsZSl7ZT09PXZvaWQgMCYmKGU9ITEpO2xldHtvZmZzZXRUb3A6aSxvZmZzZXRMZWZ0OnMsb2Zmc2V0SGVpZ2h0Om4sb2Zmc2V0V2lkdGg6b309dDtyZXR1cm4gZSYmKFtpLHNdPUh0KHQpKSx7dG9wOmksbGVmdDpzLGJvdHRvbTppK24scmlnaHQ6cytvfX12YXIgVGU9e2Nvbm5lY3RlZCgpe3dyKHRoaXMuX3VpZCwoKT0+dGhpcy4kZW1pdCgic2Nyb2xsIikpfSxkaXNjb25uZWN0ZWQoKXticih0aGlzLl91aWQpfX07Y29uc3Qgc2k9bmV3IE1hcDtsZXQgQ2U7ZnVuY3Rpb24gd3IodCxlKXtDZT1DZXx8ayh3aW5kb3csInNjcm9sbCIsKCk9PnNpLmZvckVhY2goaT0+aSgpKSx7cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSksc2kuc2V0KHQsZSl9ZnVuY3Rpb24gYnIodCl7c2kuZGVsZXRlKHQpLENlJiYhc2kuc2l6ZSYmKENlKCksQ2U9bnVsbCl9dmFyIHhyPXtleHRlbmRzOm5uLG1peGluczpbbnQsVGVdLG5hbWU6ImdyaWQiLHByb3BzOnttYXNvbnJ5OkJvb2xlYW4scGFyYWxsYXg6TnVtYmVyfSxkYXRhOnttYXJnaW46InVrLWdyaWQtbWFyZ2luIixjbHNTdGFjazoidWstZ3JpZC1zdGFjayIsbWFzb25yeTohMSxwYXJhbGxheDowfSxjb25uZWN0ZWQoKXt0aGlzLm1hc29ucnkmJmIodGhpcy4kZWwsInVrLWZsZXgtdG9wIHVrLWZsZXgtd3JhcC10b3AiKX0sdXBkYXRlOlt7d3JpdGUodCl7bGV0e2NvbHVtbnM6ZX09dDtXKHRoaXMuJGVsLHRoaXMuY2xzU3RhY2ssZS5sZW5ndGg8Mil9LGV2ZW50czpbInJlc2l6ZSJdfSx7cmVhZCh0KXtsZXR7Y29sdW1uczplLHJvd3M6aX09dDtpZighZS5sZW5ndGh8fCF0aGlzLm1hc29ucnkmJiF0aGlzLnBhcmFsbGF4fHxybih0aGlzLiRlbCkpcmV0dXJuIHQudHJhbnNsYXRlcz0hMSwhMTtsZXQgcz0hMTtjb25zdCBuPU0odGhpcy4kZWwpLG89a3IoZSkscj0kcihuLHRoaXMubWFyZ2luKSooaS5sZW5ndGgtMSksYT1NYXRoLm1heCguLi5vKStyO3RoaXMubWFzb25yeSYmKGU9ZS5tYXAoaD0+emUoaCwib2Zmc2V0VG9wIikpLHM9eXIoaSxlKSk7bGV0IGw9TWF0aC5hYnModGhpcy5wYXJhbGxheCk7cmV0dXJuIGwmJihsPW8ucmVkdWNlKChoLHUsZCk9Pk1hdGgubWF4KGgsdStyKyhkJTI/bDpsLzgpLWEpLDApKSx7cGFkZGluZzpsLGNvbHVtbnM6ZSx0cmFuc2xhdGVzOnMsaGVpZ2h0OnM/YToiIn19LHdyaXRlKHQpe2xldHtoZWlnaHQ6ZSxwYWRkaW5nOml9PXQ7Yyh0aGlzLiRlbCwicGFkZGluZ0JvdHRvbSIsaXx8IiIpLGUhPT0hMSYmYyh0aGlzLiRlbCwiaGVpZ2h0IixlKX0sZXZlbnRzOlsicmVzaXplIl19LHtyZWFkKCl7cmV0dXJuIHRoaXMucGFyYWxsYXgmJnJuKHRoaXMuJGVsKT8hMTp7c2Nyb2xsZWQ6dGhpcy5wYXJhbGxheD9YaSh0aGlzLiRlbCkqTWF0aC5hYnModGhpcy5wYXJhbGxheCk6ITF9fSx3cml0ZSh0KXtsZXR7Y29sdW1uczplLHNjcm9sbGVkOmksdHJhbnNsYXRlczpzfT10O2k9PT0hMSYmIXN8fGUuZm9yRWFjaCgobixvKT0+bi5mb3JFYWNoKChyLGEpPT5jKHIsInRyYW5zZm9ybSIsIWkmJiFzPyIiOiJ0cmFuc2xhdGVZKCIrKChzJiYtc1tvXVthXSkrKGk/byUyP2k6aS84OjApKSsicHgpIikpKX0sZXZlbnRzOlsic2Nyb2xsIiwicmVzaXplIl19XX07ZnVuY3Rpb24gcm4odCl7cmV0dXJuIE0odCkuc29tZShlPT5jKGUsInBvc2l0aW9uIik9PT0iYWJzb2x1dGUiKX1mdW5jdGlvbiB5cih0LGUpe2NvbnN0IGk9dC5tYXAocz0+TWF0aC5tYXgoLi4ucy5tYXAobj0+bi5vZmZzZXRIZWlnaHQpKSk7cmV0dXJuIGUubWFwKHM9PntsZXQgbj0wO3JldHVybiBzLm1hcCgobyxyKT0+bis9cj9pW3ItMV0tc1tyLTFdLm9mZnNldEhlaWdodDowKX0pfWZ1bmN0aW9uICRyKHQsZSl7Y29uc3RbaV09dC5maWx0ZXIocz0+SShzLGUpKTtyZXR1cm4gdyhpP2MoaSwibWFyZ2luVG9wIik6Yyh0WzBdLCJwYWRkaW5nTGVmdCIpKX1mdW5jdGlvbiBrcih0KXtyZXR1cm4gdC5tYXAoZT0+ZS5yZWR1Y2UoKGkscyk9Pmkrcy5vZmZzZXRIZWlnaHQsMCkpfXZhciBTcj17bWl4aW5zOlt3dF0sYXJnczoidGFyZ2V0Iixwcm9wczp7dGFyZ2V0OlN0cmluZyxyb3c6Qm9vbGVhbn0sZGF0YTp7dGFyZ2V0OiI+ICoiLHJvdzohMH0sY29tcHV0ZWQ6e2VsZW1lbnRzOntnZXQodCxlKXtsZXR7dGFyZ2V0Oml9PXQ7cmV0dXJuIEQoaSxlKX0sd2F0Y2goKXt0aGlzLiRyZXNldCgpfX19LHJlc2l6ZVRhcmdldHMoKXtyZXR1cm5bdGhpcy4kZWwsLi4udGhpcy5lbGVtZW50c119LHVwZGF0ZTp7cmVhZCgpe3JldHVybntyb3dzOih0aGlzLnJvdz9RaSh0aGlzLmVsZW1lbnRzKTpbdGhpcy5lbGVtZW50c10pLm1hcChUcil9fSx3cml0ZSh0KXtsZXR7cm93czplfT10O2Zvcihjb25zdHtoZWlnaHRzOmksZWxlbWVudHM6c31vZiBlKXMuZm9yRWFjaCgobixvKT0+YyhuLCJtaW5IZWlnaHQiLGlbb10pKX0sZXZlbnRzOlsicmVzaXplIl19fTtmdW5jdGlvbiBUcih0KXtpZih0Lmxlbmd0aDwyKXJldHVybntoZWlnaHRzOlsiIl0sZWxlbWVudHM6dH07Yyh0LCJtaW5IZWlnaHQiLCIiKTtsZXQgZT10Lm1hcChDcik7Y29uc3QgaT1NYXRoLm1heCguLi5lKTtyZXR1cm57aGVpZ2h0czp0Lm1hcCgocyxuKT0+ZVtuXS50b0ZpeGVkKDIpPT09aS50b0ZpeGVkKDIpPyIiOmkpLGVsZW1lbnRzOnR9fWZ1bmN0aW9uIENyKHQpe2xldCBlPSExO1YodCl8fChlPXQuc3R5bGUuZGlzcGxheSxjKHQsImRpc3BsYXkiLCJibG9jayIsImltcG9ydGFudCIpKTtjb25zdCBpPXgodCkuaGVpZ2h0LWllKHQsImhlaWdodCIsImNvbnRlbnQtYm94Iik7cmV0dXJuIGUhPT0hMSYmYyh0LCJkaXNwbGF5IixlKSxpfXZhciBJcj17bWl4aW5zOlt3dF0scHJvcHM6e2V4cGFuZDpCb29sZWFuLG9mZnNldFRvcDpCb29sZWFuLG9mZnNldEJvdHRvbTpCb29sZWFuLG1pbkhlaWdodDpOdW1iZXJ9LGRhdGE6e2V4cGFuZDohMSxvZmZzZXRUb3A6ITEsb2Zmc2V0Qm90dG9tOiExLG1pbkhlaWdodDowfSxyZXNpemVUYXJnZXRzKCl7cmV0dXJuW3RoaXMuJGVsLC4uLlEodGhpcy4kZWwsL2F1dG98c2Nyb2xsLyldfSx1cGRhdGU6e3JlYWQodCl7bGV0e21pbkhlaWdodDplfT10O2lmKCFWKHRoaXMuJGVsKSlyZXR1cm4hMTtsZXQgaT0iIjtjb25zdCBzPWllKHRoaXMuJGVsLCJoZWlnaHQiLCJjb250ZW50LWJveCIpLHtib2R5Om4sc2Nyb2xsaW5nRWxlbWVudDpvfT1kb2N1bWVudCxbcl09USh0aGlzLiRlbCwvYXV0b3xzY3JvbGwvKSx7aGVpZ2h0OmF9PWx0KHI9PT1uP286cik7aWYodGhpcy5leHBhbmQpaT1NYXRoLm1heChhLSh4KHIpLmhlaWdodC14KHRoaXMuJGVsKS5oZWlnaHQpLXMsMCk7ZWxzZXtjb25zdCBsPW89PT1yfHxuPT09cjtpZihpPSJjYWxjKCIrKGw/IjEwMHZoIjphKyJweCIpLHRoaXMub2Zmc2V0VG9wKWlmKGwpe2NvbnN0IGg9SHQodGhpcy4kZWwpWzBdLUh0KHIpWzBdO2krPWg+MCYmaDxhLzI/IiAtICIraCsicHgiOiIifWVsc2UgaSs9IiAtICIrYyhyLCJwYWRkaW5nVG9wIik7dGhpcy5vZmZzZXRCb3R0b209PT0hMD9pKz0iIC0gIit4KHRoaXMuJGVsLm5leHRFbGVtZW50U2libGluZykuaGVpZ2h0KyJweCI6QnQodGhpcy5vZmZzZXRCb3R0b20pP2krPSIgLSAiK3RoaXMub2Zmc2V0Qm90dG9tKyJ2aCI6dGhpcy5vZmZzZXRCb3R0b20mJlh0KHRoaXMub2Zmc2V0Qm90dG9tLCJweCIpP2krPSIgLSAiK3codGhpcy5vZmZzZXRCb3R0b20pKyJweCI6Xyh0aGlzLm9mZnNldEJvdHRvbSkmJihpKz0iIC0gIit4KGR0KHRoaXMub2Zmc2V0Qm90dG9tLHRoaXMuJGVsKSkuaGVpZ2h0KyJweCIpLGkrPShzPyIgLSAiK3MrInB4IjoiIikrIikifXJldHVybnttaW5IZWlnaHQ6aSxwcmV2OmV9fSx3cml0ZSh0KXtsZXR7bWluSGVpZ2h0OmV9PXQ7Yyh0aGlzLiRlbCx7bWluSGVpZ2h0OmV9KSx0aGlzLm1pbkhlaWdodCYmdyhjKHRoaXMuJGVsLCJtaW5IZWlnaHQiKSk8dGhpcy5taW5IZWlnaHQmJmModGhpcy4kZWwsIm1pbkhlaWdodCIsdGhpcy5taW5IZWlnaHQpfSxldmVudHM6WyJyZXNpemUiXX19LGFuPXthcmdzOiJzcmMiLHByb3BzOntpZDpCb29sZWFuLGljb246U3RyaW5nLHNyYzpTdHJpbmcsc3R5bGU6U3RyaW5nLHdpZHRoOk51bWJlcixoZWlnaHQ6TnVtYmVyLHJhdGlvOk51bWJlcixjbGFzczpTdHJpbmcsc3Ryb2tlQW5pbWF0aW9uOkJvb2xlYW4sZm9jdXNhYmxlOkJvb2xlYW4sYXR0cmlidXRlczoibGlzdCJ9LGRhdGE6e3JhdGlvOjEsaW5jbHVkZTpbInN0eWxlIiwiY2xhc3MiLCJmb2N1c2FibGUiXSxjbGFzczoiIixzdHJva2VBbmltYXRpb246ITF9LGJlZm9yZUNvbm5lY3QoKXt0aGlzLmNsYXNzKz0iIHVrLXN2ZyJ9LGNvbm5lY3RlZCgpeyF0aGlzLmljb24mJnAodGhpcy5zcmMsIiMiKSYmKFt0aGlzLnNyYyx0aGlzLmljb25dPXRoaXMuc3JjLnNwbGl0KCIjIikpLHRoaXMuc3ZnPXRoaXMuZ2V0U3ZnKCkudGhlbih0PT57aWYodGhpcy5fY29ubmVjdGVkKXtjb25zdCBlPU9yKHQsdGhpcy4kZWwpO3JldHVybiB0aGlzLnN2Z0VsJiZlIT09dGhpcy5zdmdFbCYmY3QodGhpcy5zdmdFbCksdGhpcy5hcHBseUF0dHJpYnV0ZXMoZSx0KSx0aGlzLnN2Z0VsPWV9fSxUKSx0aGlzLnN0cm9rZUFuaW1hdGlvbiYmdGhpcy5zdmcudGhlbih0PT57dGhpcy5fY29ubmVjdGVkJiYoaG4odCksdGhpcy5yZWdpc3Rlck9ic2VydmVyKG9lKHQsKGUsaSk9Pntobih0KSxpLmRpc2Nvbm5lY3QoKX0pKSl9KX0sZGlzY29ubmVjdGVkKCl7dGhpcy5zdmcudGhlbih0PT57dGhpcy5fY29ubmVjdGVkfHwoQ2kodGhpcy4kZWwpJiYodGhpcy4kZWwuaGlkZGVuPSExKSxjdCh0KSx0aGlzLnN2Z0VsPW51bGwpfSksdGhpcy5zdmc9bnVsbH0sbWV0aG9kczp7YXN5bmMgZ2V0U3ZnKCl7cmV0dXJuIHB0KHRoaXMuJGVsLCJpbWciKSYmIXRoaXMuJGVsLmNvbXBsZXRlJiZ0aGlzLiRlbC5sb2FkaW5nPT09ImxhenkiP25ldyBQcm9taXNlKHQ9Pk4odGhpcy4kZWwsImxvYWQiLCgpPT50KHRoaXMuZ2V0U3ZnKCkpKSk6QXIoYXdhaXQgUHIodGhpcy5zcmMpLHRoaXMuaWNvbil8fFByb21pc2UucmVqZWN0KCJTVkcgbm90IGZvdW5kLiIpfSxhcHBseUF0dHJpYnV0ZXModCxlKXtmb3IoY29uc3QgbyBpbiB0aGlzLiRvcHRpb25zLnByb3BzKXAodGhpcy5pbmNsdWRlLG8pJiZvIGluIHRoaXMmJnkodCxvLHRoaXNbb10pO2Zvcihjb25zdCBvIGluIHRoaXMuYXR0cmlidXRlcyl7Y29uc3RbcixhXT10aGlzLmF0dHJpYnV0ZXNbb10uc3BsaXQoIjoiLDIpO3kodCxyLGEpfXRoaXMuaWR8fGdlKHQsImlkIik7Y29uc3QgaT1bIndpZHRoIiwiaGVpZ2h0Il07bGV0IHM9aS5tYXAobz0+dGhpc1tvXSk7cy5zb21lKG89Pm8pfHwocz1pLm1hcChvPT55KGUsbykpKTtjb25zdCBuPXkoZSwidmlld0JveCIpO24mJiFzLnNvbWUobz0+bykmJihzPW4uc3BsaXQoIiAiKS5zbGljZSgyKSkscy5mb3JFYWNoKChvLHIpPT55KHQsaVtyXSx3KG8pKnRoaXMucmF0aW98fG51bGwpKX19fTtjb25zdCBQcj1ydChhc3luYyB0PT50P3R0KHQsImRhdGE6Iik/ZGVjb2RlVVJJQ29tcG9uZW50KHQuc3BsaXQoIiwiKVsxXSk6KGF3YWl0IGZldGNoKHQpKS50ZXh0KCk6UHJvbWlzZS5yZWplY3QoKSk7ZnVuY3Rpb24gQXIodCxlKXt2YXIgaTtyZXR1cm4gZSYmcCh0LCI8c3ltYm9sIikmJih0PUVyKHQsZSl8fHQpLHQ9dih0LnN1YnN0cih0LmluZGV4T2YoIjxzdmciKSkpLCgoaT10KT09bnVsbD92b2lkIDA6aS5oYXNDaGlsZE5vZGVzKCkpJiZ0fWNvbnN0IGxuPS88c3ltYm9sKFteXSo/aWQ9KFsnIl0pKC4rPylcMlteXSo/PFwvKXN5bWJvbD4vZyxuaT17fTtmdW5jdGlvbiBFcih0LGUpe2lmKCFuaVt0XSl7bmlbdF09e30sbG4ubGFzdEluZGV4PTA7bGV0IGk7Zm9yKDtpPWxuLmV4ZWModCk7KW5pW3RdW2lbM11dPSc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyInK2lbMV0rInN2Zz4ifXJldHVybiBuaVt0XVtlXX1mdW5jdGlvbiBobih0KXtjb25zdCBlPWNuKHQpO2UmJnQuc3R5bGUuc2V0UHJvcGVydHkoIi0tdWstYW5pbWF0aW9uLXN0cm9rZSIsZSl9ZnVuY3Rpb24gY24odCl7cmV0dXJuIE1hdGguY2VpbChNYXRoLm1heCgwLC4uLkQoIltzdHJva2VdIix0KS5tYXAoZT0+e3RyeXtyZXR1cm4gZS5nZXRUb3RhbExlbmd0aCgpfWNhdGNoe3JldHVybiAwfX0pKSl9ZnVuY3Rpb24gT3IodCxlKXtpZihDaShlKXx8cHQoZSwiY2FudmFzIikpe2UuaGlkZGVuPSEwO2NvbnN0IHM9ZS5uZXh0RWxlbWVudFNpYmxpbmc7cmV0dXJuIHVuKHQscyk/czpWZShlLHQpfWNvbnN0IGk9ZS5sYXN0RWxlbWVudENoaWxkO3JldHVybiB1bih0LGkpP2k6aihlLHQpfWZ1bmN0aW9uIHVuKHQsZSl7cmV0dXJuIHB0KHQsInN2ZyIpJiZwdChlLCJzdmciKSYmZG4odCk9PT1kbihlKX1mdW5jdGlvbiBkbih0KXtyZXR1cm4odC5pbm5lckhUTUx8fG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcodCkucmVwbGFjZSgvPHN2Zy4qPz4oLio/KTxcL3N2Zz4vZywiJDEiKSkucmVwbGFjZSgvXHMvZywiIil9dmFyIF9yPSc8c3ZnIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgdmlld0JveD0iMCAwIDE0IDE0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIHgxPSIxIiB5MT0iMSIgeDI9IjEzIiB5Mj0iMTMiLz48bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4xIiB4MT0iMTMiIHkxPSIxIiB4Mj0iMSIgeTI9IjEzIi8+PC9zdmc+JyxCcj0nPHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS40IiB4MT0iMSIgeTE9IjEiIHgyPSIxOSIgeTI9IjE5Ii8+PGxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuNCIgeDE9IjE5IiB5MT0iMSIgeDI9IjEiIHkyPSIxOSIvPjwvc3ZnPicsTXI9Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iOSIgeT0iNCIgd2lkdGg9IjEiIGhlaWdodD0iMTEiLz48cmVjdCB4PSI0IiB5PSI5IiB3aWR0aD0iMTEiIGhlaWdodD0iMSIvPjwvc3ZnPicsRHI9JzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiI+PHBvbHlsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIHBvaW50cz0iMSAzLjUgNiA4LjUgMTEgMy41Ii8+PC9zdmc+JyxOcj0nPHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cG9seWxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuMSIgcG9pbnRzPSIxIDQgNyAxMCAxMyA0Ii8+PC9zdmc+Jyx6cj0nPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgdmlld0JveD0iMCAwIDEyIDEyIj48cG9seWxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuMSIgcG9pbnRzPSIxIDMuNSA2IDguNSAxMSAzLjUiLz48L3N2Zz4nLEhyPWA8c3ZnIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxzdHlsZT4udWstbmF2YmFyLXRvZ2dsZS1hbmltYXRlIHN2ZyA+IFtjbGFzcyo9J2xpbmUtJ10gewogICAgICAgICAgICB0cmFuc2l0aW9uOiAwLjJzIGVhc2UtaW4tb3V0OwogICAgICAgICAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm0sIG9wYWNpdHksOwogICAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7CiAgICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgfQoKICAgICAgICAudWstbmF2YmFyLXRvZ2dsZSBzdmcgPiAubGluZS0zIHsgb3BhY2l0eTogMDsgfQogICAgICAgIC51ay1uYXZiYXItdG9nZ2xlLWFuaW1hdGVbYXJpYS1leHBhbmRlZD0idHJ1ZSJdIHN2ZyA+IC5saW5lLTMgeyBvcGFjaXR5OiAxOyB9CgogICAgICAgIC51ay1uYXZiYXItdG9nZ2xlLWFuaW1hdGVbYXJpYS1leHBhbmRlZD0idHJ1ZSJdIHN2ZyA+IC5saW5lLTIgeyB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7IH0KICAgICAgICAudWstbmF2YmFyLXRvZ2dsZS1hbmltYXRlW2FyaWEtZXhwYW5kZWQ9InRydWUiXSBzdmcgPiAubGluZS0zIHsgdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTsgfQoKICAgICAgICAudWstbmF2YmFyLXRvZ2dsZS1hbmltYXRlW2FyaWEtZXhwYW5kZWQ9InRydWUiXSBzdmcgPiAubGluZS0xLAogICAgICAgIC51ay1uYXZiYXItdG9nZ2xlLWFuaW1hdGVbYXJpYS1leHBhbmRlZD0idHJ1ZSJdIHN2ZyA+IC5saW5lLTQgeyBvcGFjaXR5OiAwOyB9CiAgICAgICAgLnVrLW5hdmJhci10b2dnbGUtYW5pbWF0ZVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0gc3ZnID4gLmxpbmUtMSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSg2cHgpIHNjYWxlWCgwKTsgfQogICAgICAgIC51ay1uYXZiYXItdG9nZ2xlLWFuaW1hdGVbYXJpYS1leHBhbmRlZD0idHJ1ZSJdIHN2ZyA+IC5saW5lLTQgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTZweCkgc2NhbGVYKDApOyB9PC9zdHlsZT48cmVjdCBjbGFzcz0ibGluZS0xIiB5PSIzIiB3aWR0aD0iMjAiIGhlaWdodD0iMiIvPjxyZWN0IGNsYXNzPSJsaW5lLTIiIHk9IjkiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyIi8+PHJlY3QgY2xhc3M9ImxpbmUtMyIgeT0iOSIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIiLz48cmVjdCBjbGFzcz0ibGluZS00IiB5PSIxNSIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIiLz48L3N2Zz5gLExyPSc8c3ZnIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iMCAwIDQwIDQwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHg9IjE5IiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSI0MCIvPjxyZWN0IHg9IjAiIHk9IjE5IiB3aWR0aD0iNDAiIGhlaWdodD0iMSIvPjwvc3ZnPicsRnI9Jzxzdmcgd2lkdGg9IjciIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCA3IDEyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwb2x5bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4yIiBwb2ludHM9IjEgMSA2IDYgMSAxMSIvPjwvc3ZnPicsV3I9Jzxzdmcgd2lkdGg9IjciIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCA3IDEyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwb2x5bGluZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4yIiBwb2ludHM9IjYgMSAxIDYgNiAxMSIvPjwvc3ZnPicsanI9Jzxzdmcgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGNpcmNsZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4xIiBjeD0iOSIgY3k9IjkiIHI9IjciLz48cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4xIiBkPSJNMTQsMTQgTDE4LDE4IEwxNCwxNCBaIi8+PC9zdmc+JyxScj0nPHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjgiIGN4PSIxNy41IiBjeT0iMTcuNSIgcj0iMTYuNSIvPjxsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjgiIHgxPSIzOCIgeTE9IjM5IiB4Mj0iMjkiIHkyPSIzMCIvPjwvc3ZnPicscXI9Jzxzdmcgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGNpcmNsZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS4xIiBjeD0iMTAuNSIgY3k9IjEwLjUiIHI9IjkuNSIvPjxsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjEiIHgxPSIyMyIgeTE9IjIzIiB4Mj0iMTciIHkyPSIxNyIvPjwvc3ZnPicsVnI9Jzxzdmcgd2lkdGg9IjE0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMTQgMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjQiIHBvaW50cz0iMS4yMjUsMjMgMTIuNzc1LDEyIDEuMjI1LDEgIi8+PC9zdmc+JyxZcj0nPHN2ZyB3aWR0aD0iMjUiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCAyNSA0MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cG9seWxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjIiIHBvaW50cz0iNC4wMDIsMzguNTQ3IDIyLjUyNywyMC4wMjQgNCwxLjUgIi8+PC9zdmc+JyxYcj0nPHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAxNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cG9seWxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuNCIgcG9pbnRzPSIxMi43NzUsMSAxLjIyNSwxMiAxMi43NzUsMjMgIi8+PC9zdmc+JyxHcj0nPHN2ZyB3aWR0aD0iMjUiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCAyNSA0MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cG9seWxpbmUgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjIiIHBvaW50cz0iMjAuNTI3LDEuNSAyLDIwLjAyNCAyMC41MjUsMzguNTQ3ICIvPjwvc3ZnPicsSnI9Jzxzdmcgd2lkdGg9IjMwIiBoZWlnaHQ9IjMwIiB2aWV3Qm94PSIwIDAgMzAgMzAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGNpcmNsZSBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIGN4PSIxNSIgY3k9IjE1IiByPSIxNCIvPjwvc3ZnPicsS3I9Jzxzdmcgd2lkdGg9IjE4IiBoZWlnaHQ9IjEwIiB2aWV3Qm94PSIwIDAgMTggMTAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBvbHlsaW5lIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHBvaW50cz0iMSA5IDkgMSAxNyA5ICIvPjwvc3ZnPic7Y29uc3Qgb2k9e3NwaW5uZXI6SnIsdG90b3A6S3IsbWFya2VyOk1yLCJjbG9zZS1pY29uIjpfciwiY2xvc2UtbGFyZ2UiOkJyLCJuYXYtcGFyZW50LWljb24iOkRyLCJuYXYtcGFyZW50LWljb24tbGFyZ2UiOk5yLCJuYXZiYXItcGFyZW50LWljb24iOnpyLCJuYXZiYXItdG9nZ2xlLWljb24iOkhyLCJvdmVybGF5LWljb24iOkxyLCJwYWdpbmF0aW9uLW5leHQiOkZyLCJwYWdpbmF0aW9uLXByZXZpb3VzIjpXciwic2VhcmNoLWljb24iOmpyLCJzZWFyY2gtbGFyZ2UiOlJyLCJzZWFyY2gtbmF2YmFyIjpxciwic2xpZGVuYXYtbmV4dCI6VnIsInNsaWRlbmF2LW5leHQtbGFyZ2UiOllyLCJzbGlkZW5hdi1wcmV2aW91cyI6WHIsInNsaWRlbmF2LXByZXZpb3VzLWxhcmdlIjpHcn0sVWk9e2luc3RhbGw6ZWEsZXh0ZW5kczphbixhcmdzOiJpY29uIixwcm9wczpbImljb24iXSxkYXRhOntpbmNsdWRlOlsiZm9jdXNhYmxlIl19LGlzSWNvbjohMCxiZWZvcmVDb25uZWN0KCl7Yih0aGlzLiRlbCwidWstaWNvbiIpfSxtZXRob2RzOnthc3luYyBnZXRTdmcoKXtjb25zdCB0PWlhKHRoaXMuaWNvbik7aWYoIXQpdGhyb3ciSWNvbiBub3QgZm91bmQuIjtyZXR1cm4gdH19fSx1dD17YXJnczohMSxleHRlbmRzOlVpLGRhdGE6dD0+KHtpY29uOl90KHQuY29uc3RydWN0b3Iub3B0aW9ucy5uYW1lKX0pLGJlZm9yZUNvbm5lY3QoKXtiKHRoaXMuJGVsLHRoaXMuJG5hbWUpfX0sWnI9e2V4dGVuZHM6dXQsYmVmb3JlQ29ubmVjdCgpe2NvbnN0IHQ9dGhpcy4kcHJvcHMuaWNvbjt0aGlzLmljb249aXQodGhpcy4kZWwsIi51ay1uYXYtcHJpbWFyeSIpP3QrIi1sYXJnZSI6dH19LGZuPXtleHRlbmRzOnV0LGJlZm9yZUNvbm5lY3QoKXtiKHRoaXMuJGVsLCJ1ay1zbGlkZW5hdiIpO2NvbnN0IHQ9dGhpcy4kcHJvcHMuaWNvbjt0aGlzLmljb249SSh0aGlzLiRlbCwidWstc2xpZGVuYXYtbGFyZ2UiKT90KyItbGFyZ2UiOnR9fSxRcj17ZXh0ZW5kczp1dCxiZWZvcmVDb25uZWN0KCl7dGhpcy5pY29uPUkodGhpcy4kZWwsInVrLXNlYXJjaC1pY29uIikmJlV0KHRoaXMuJGVsLCIudWstc2VhcmNoLWxhcmdlIikubGVuZ3RoPyJzZWFyY2gtbGFyZ2UiOlV0KHRoaXMuJGVsLCIudWstc2VhcmNoLW5hdmJhciIpLmxlbmd0aD8ic2VhcmNoLW5hdmJhciI6dGhpcy4kcHJvcHMuaWNvbn19LFVyPXtleHRlbmRzOnV0LGJlZm9yZUNvbm5lY3QoKXt0aGlzLmljb249ImNsb3NlLSIrKEkodGhpcy4kZWwsInVrLWNsb3NlLWxhcmdlIik/ImxhcmdlIjoiaWNvbiIpfX0sdGE9e2V4dGVuZHM6dXQsbWV0aG9kczp7YXN5bmMgZ2V0U3ZnKCl7Y29uc3QgdD1hd2FpdCBVaS5tZXRob2RzLmdldFN2Zy5jYWxsKHRoaXMpO3JldHVybiB0aGlzLnJhdGlvIT09MSYmYyh2KCJjaXJjbGUiLHQpLCJzdHJva2VXaWR0aCIsMS90aGlzLnJhdGlvKSx0fX19LHJpPXt9O2Z1bmN0aW9uIGVhKHQpe3QuaWNvbi5hZGQ9KGUsaSk9Pntjb25zdCBzPV8oZSk/e1tlXTppfTplO3l0KHMsKG4sbyk9PntvaVtvXT1uLGRlbGV0ZSByaVtvXX0pLHQuX2luaXRpYWxpemVkJiZ2dChkb2N1bWVudC5ib2R5LG49Pnl0KHQuZ2V0Q29tcG9uZW50cyhuKSxvPT57by4kb3B0aW9ucy5pc0ljb24mJm8uaWNvbiBpbiBzJiZvLiRyZXNldCgpfSkpfX1mdW5jdGlvbiBpYSh0KXtyZXR1cm4gb2lbdF0/KHJpW3RdfHwocmlbdF09digob2lbc2EodCldfHxvaVt0XSkudHJpbSgpKSkscmlbdF0uY2xvbmVOb2RlKCEwKSk6bnVsbH1mdW5jdGlvbiBzYSh0KXtyZXR1cm4gWD9raShraSh0LCJsZWZ0IiwicmlnaHQiKSwicHJldmlvdXMiLCJuZXh0Iik6dH1jb25zdCBuYT1GdCYmImxvYWRpbmciaW4gSFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGU7dmFyIG9hPXthcmdzOiJkYXRhU3JjIixwcm9wczp7ZGF0YVNyYzpTdHJpbmcsc291cmNlczpTdHJpbmcsb2Zmc2V0VG9wOlN0cmluZyxvZmZzZXRMZWZ0OlN0cmluZyx0YXJnZXQ6U3RyaW5nLGxvYWRpbmc6U3RyaW5nfSxkYXRhOntkYXRhU3JjOiIiLHNvdXJjZXM6ITEsb2Zmc2V0VG9wOiI1MHZoIixvZmZzZXRMZWZ0OiI1MHZ3Iix0YXJnZXQ6ITEsbG9hZGluZzoibGF6eSJ9LGNvbm5lY3RlZCgpe2lmKHRoaXMubG9hZGluZyE9PSJsYXp5Iil7dGhpcy5sb2FkKCk7cmV0dXJufWNvbnN0IHQ9W3RoaXMuJGVsLC4uLndlKHRoaXMuJHByb3BzLnRhcmdldCx0aGlzLiRlbCldO25hJiZhaSh0aGlzLiRlbCkmJih0aGlzLiRlbC5sb2FkaW5nPSJsYXp5Iix0cyh0aGlzLiRlbCksdC5sZW5ndGg9PT0xKXx8KGNhKHRoaXMuJGVsKSx0aGlzLnJlZ2lzdGVyT2JzZXJ2ZXIob2UodCwoZSxpKT0+e3RoaXMubG9hZCgpLGkuZGlzY29ubmVjdCgpfSx7cm9vdE1hcmdpbjpKKHRoaXMub2Zmc2V0VG9wLCJoZWlnaHQiKSsicHggIitKKHRoaXMub2Zmc2V0TGVmdCwid2lkdGgiKSsicHgifSkpKX0sZGlzY29ubmVjdGVkKCl7dGhpcy5fZGF0YS5pbWFnZSYmKHRoaXMuX2RhdGEuaW1hZ2Uub25sb2FkPSIiKX0sbWV0aG9kczp7bG9hZCgpe2lmKHRoaXMuX2RhdGEuaW1hZ2UpcmV0dXJuIHRoaXMuX2RhdGEuaW1hZ2U7Y29uc3QgdD1haSh0aGlzLiRlbCk/dGhpcy4kZWw6YWEodGhpcy4kZWwsdGhpcy5kYXRhU3JjLHRoaXMuc291cmNlcyk7cmV0dXJuIGdlKHQsImxvYWRpbmciKSx0cyh0aGlzLiRlbCx0LmN1cnJlbnRTcmMpLHRoaXMuX2RhdGEuaW1hZ2U9dH19fTtmdW5jdGlvbiB0cyh0LGUpe2lmKGFpKHQpKXtjb25zdCBpPVAodCk7KHVhKGkpP00oaSk6W3RdKS5mb3JFYWNoKG49PnBuKG4sbikpfWVsc2UgZSYmIXAodC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UsZSkmJihjKHQsImJhY2tncm91bmRJbWFnZSIsInVybCgiK0FpKGUpKyIpIiksZyh0LE50KCJsb2FkIiwhMSkpKX1jb25zdCByYT1bImRhdGEtc3JjIiwiZGF0YS1zcmNzZXQiLCJzaXplcyJdO2Z1bmN0aW9uIHBuKHQsZSl7cmEuZm9yRWFjaChpPT57Y29uc3Qgcz1hdCh0LGkpO3MmJnkoZSxpLnJlcGxhY2UoL14oZGF0YS0pKy8sIiIpLHMpfSl9ZnVuY3Rpb24gYWEodCxlLGkpe2NvbnN0IHM9bmV3IEltYWdlO3JldHVybiBsYShzLGkpLHBuKHQscykscy5vbmxvYWQ9KCk9Pnt0cyh0LHMuY3VycmVudFNyYyl9LHkocywic3JjIixlKSxzfWZ1bmN0aW9uIGxhKHQsZSl7aWYoZT1oYShlKSxlLmxlbmd0aCl7Y29uc3QgaT1MdCgiPHBpY3R1cmU+Iik7Zm9yKGNvbnN0IHMgb2YgZSl7Y29uc3Qgbj1MdCgiPHNvdXJjZT4iKTt5KG4scyksaihpLG4pfWooaSx0KX19ZnVuY3Rpb24gaGEodCl7aWYoIXQpcmV0dXJuW107aWYodHQodCwiWyIpKXRyeXt0PUpTT04ucGFyc2UodCl9Y2F0Y2h7dD1bXX1lbHNlIHQ9a2UodCk7cmV0dXJuIGV0KHQpfHwodD1bdF0pLHQuZmlsdGVyKGU9PiFmZShlKSl9ZnVuY3Rpb24gY2EodCl7YWkodCkmJiFJdCh0LCJzcmMiKSYmeSh0LCJzcmMiLCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PC9zdmc+Jyl9ZnVuY3Rpb24gdWEodCl7cmV0dXJuIHB0KHQsInBpY3R1cmUiKX1mdW5jdGlvbiBhaSh0KXtyZXR1cm4gcHQodCwiaW1nIil9dmFyIGxpPXtwcm9wczp7bWVkaWE6Qm9vbGVhbn0sZGF0YTp7bWVkaWE6ITF9LGNvbm5lY3RlZCgpe2NvbnN0IHQ9ZGEodGhpcy5tZWRpYSx0aGlzLiRlbCk7aWYodGhpcy5tYXRjaE1lZGlhPSEwLHQpe3RoaXMubWVkaWFPYmo9d2luZG93Lm1hdGNoTWVkaWEodCk7Y29uc3QgZT0oKT0+e3RoaXMubWF0Y2hNZWRpYT10aGlzLm1lZGlhT2JqLm1hdGNoZXMsZyh0aGlzLiRlbCxOdCgibWVkaWFjaGFuZ2UiLCExLCEwLFt0aGlzLm1lZGlhT2JqXSkpfTt0aGlzLm9mZk1lZGlhT2JqPWsodGhpcy5tZWRpYU9iaiwiY2hhbmdlIiwoKT0+e2UoKSx0aGlzLiRlbWl0KCJyZXNpemUiKX0pLGUoKX19LGRpc2Nvbm5lY3RlZCgpe3ZhciB0Oyh0PXRoaXMub2ZmTWVkaWFPYmopPT1udWxsfHx0LmNhbGwodGhpcyl9fTtmdW5jdGlvbiBkYSh0LGUpe2lmKF8odCkpe2lmKHR0KHQsIkAiKSl0PXcoYyhlLCItLXVrLWJyZWFrcG9pbnQtIit0LnN1YnN0cigxKSkpO2Vsc2UgaWYoaXNOYU4odCkpcmV0dXJuIHR9cmV0dXJuIHQmJkJ0KHQpPyIobWluLXdpZHRoOiAiK3QrInB4KSI6IiJ9dmFyIGZhPXttaXhpbnM6W250LGxpLHd0XSxwcm9wczp7ZmlsbDpTdHJpbmd9LGRhdGE6e2ZpbGw6IiIsY2xzV3JhcHBlcjoidWstbGVhZGVyLWZpbGwiLGNsc0hpZGU6InVrLWxlYWRlci1oaWRlIixhdHRyRmlsbDoiZGF0YS1maWxsIn0sY29tcHV0ZWQ6e2ZpbGwodCl7bGV0e2ZpbGw6ZX09dDtyZXR1cm4gZXx8Yyh0aGlzLiRlbCwiLS11ay1sZWFkZXItZmlsbC1jb250ZW50Iil9fSxjb25uZWN0ZWQoKXtbdGhpcy53cmFwcGVyXT1MaSh0aGlzLiRlbCwnPHNwYW4gY2xhc3M9IicrdGhpcy5jbHNXcmFwcGVyKyciPicpfSxkaXNjb25uZWN0ZWQoKXtYZSh0aGlzLndyYXBwZXIuY2hpbGROb2Rlcyl9LHVwZGF0ZTp7cmVhZCgpe3JldHVybnt3aWR0aDpNYXRoLnRydW5jKHRoaXMuJGVsLm9mZnNldFdpZHRoLzIpLGZpbGw6dGhpcy5maWxsLGhpZGU6IXRoaXMubWF0Y2hNZWRpYX19LHdyaXRlKHQpe2xldHt3aWR0aDplLGZpbGw6aSxoaWRlOnN9PXQ7Vyh0aGlzLndyYXBwZXIsdGhpcy5jbHNIaWRlLHMpLHkodGhpcy53cmFwcGVyLHRoaXMuYXR0ckZpbGwsbmV3IEFycmF5KGUpLmpvaW4oaSkpfSxldmVudHM6WyJyZXNpemUiXX19LHBhPXtpbnN0YWxsOmdhLG1peGluczpbS2ldLGRhdGE6e2Nsc1BhZ2U6InVrLW1vZGFsLXBhZ2UiLHNlbFBhbmVsOiIudWstbW9kYWwtZGlhbG9nIixzZWxDbG9zZToiLnVrLW1vZGFsLWNsb3NlLCAudWstbW9kYWwtY2xvc2UtZGVmYXVsdCwgLnVrLW1vZGFsLWNsb3NlLW91dHNpZGUsIC51ay1tb2RhbC1jbG9zZS1mdWxsIn0sZXZlbnRzOlt7bmFtZToic2hvdyIsc2VsZjohMCxoYW5kbGVyKCl7SSh0aGlzLnBhbmVsLCJ1ay1tYXJnaW4tYXV0by12ZXJ0aWNhbCIpP2IodGhpcy4kZWwsInVrLWZsZXgiKTpjKHRoaXMuJGVsLCJkaXNwbGF5IiwiYmxvY2siKSxHKHRoaXMuJGVsKX19LHtuYW1lOiJoaWRkZW4iLHNlbGY6ITAsaGFuZGxlcigpe2ModGhpcy4kZWwsImRpc3BsYXkiLCIiKSxPKHRoaXMuJGVsLCJ1ay1mbGV4Iil9fV19O2Z1bmN0aW9uIGdhKHQpe2xldHttb2RhbDplfT10O2UuZGlhbG9nPWZ1bmN0aW9uKHMsbil7Y29uc3Qgbz1lKCc8ZGl2IGNsYXNzPSJ1ay1tb2RhbCI+IDxkaXYgY2xhc3M9InVrLW1vZGFsLWRpYWxvZyI+JytzKyI8L2Rpdj4gPC9kaXY+IixuKTtyZXR1cm4gby5zaG93KCksayhvLiRlbCwiaGlkZGVuIixhc3luYygpPT57YXdhaXQgUHJvbWlzZS5yZXNvbHZlKCksby4kZGVzdHJveSghMCl9LHtzZWxmOiEwfSksb30sZS5hbGVydD1mdW5jdGlvbihzLG4pe3JldHVybiBpKG89PntsZXR7bGFiZWxzOnJ9PW87cmV0dXJuJzxkaXYgY2xhc3M9InVrLW1vZGFsLWJvZHkiPicrKF8ocyk/czpQdChzKSkrJzwvZGl2PiA8ZGl2IGNsYXNzPSJ1ay1tb2RhbC1mb290ZXIgdWstdGV4dC1yaWdodCI+IDxidXR0b24gY2xhc3M9InVrLWJ1dHRvbiB1ay1idXR0b24tcHJpbWFyeSB1ay1tb2RhbC1jbG9zZSIgYXV0b2ZvY3VzPicrci5vaysiPC9idXR0b24+IDwvZGl2PiJ9LG4sbz0+by5yZXNvbHZlKCkpfSxlLmNvbmZpcm09ZnVuY3Rpb24ocyxuKXtyZXR1cm4gaShvPT57bGV0e2xhYmVsczpyfT1vO3JldHVybic8Zm9ybT4gPGRpdiBjbGFzcz0idWstbW9kYWwtYm9keSI+JysoXyhzKT9zOlB0KHMpKSsnPC9kaXY+IDxkaXYgY2xhc3M9InVrLW1vZGFsLWZvb3RlciB1ay10ZXh0LXJpZ2h0Ij4gPGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIHVrLWJ1dHRvbi1kZWZhdWx0IHVrLW1vZGFsLWNsb3NlIiB0eXBlPSJidXR0b24iPicrci5jYW5jZWwrJzwvYnV0dG9uPiA8YnV0dG9uIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLXByaW1hcnkiIGF1dG9mb2N1cz4nK3Iub2srIjwvYnV0dG9uPiA8L2Rpdj4gPC9mb3JtPiJ9LG4sbz0+by5yZWplY3QoKSl9LGUucHJvbXB0PWZ1bmN0aW9uKHMsbixvKXtyZXR1cm4gaShyPT57bGV0e2xhYmVsczphfT1yO3JldHVybic8Zm9ybSBjbGFzcz0idWstZm9ybS1zdGFja2VkIj4gPGRpdiBjbGFzcz0idWstbW9kYWwtYm9keSI+IDxsYWJlbD4nKyhfKHMpP3M6UHQocykpKyc8L2xhYmVsPiA8aW5wdXQgY2xhc3M9InVrLWlucHV0IiB2YWx1ZT0iJysobnx8IiIpKyciIGF1dG9mb2N1cz4gPC9kaXY+IDxkaXYgY2xhc3M9InVrLW1vZGFsLWZvb3RlciB1ay10ZXh0LXJpZ2h0Ij4gPGJ1dHRvbiBjbGFzcz0idWstYnV0dG9uIHVrLWJ1dHRvbi1kZWZhdWx0IHVrLW1vZGFsLWNsb3NlIiB0eXBlPSJidXR0b24iPicrYS5jYW5jZWwrJzwvYnV0dG9uPiA8YnV0dG9uIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLXByaW1hcnkiPicrYS5vaysiPC9idXR0b24+IDwvZGl2PiA8L2Zvcm0+In0sbyxyPT5yLnJlc29sdmUobnVsbCkscj0+digiaW5wdXQiLHIuJGVsKS52YWx1ZSl9LGUubGFiZWxzPXtvazoiT2siLGNhbmNlbDoiQ2FuY2VsIn07ZnVuY3Rpb24gaShzLG4sbyxyKXtuPXtiZ0Nsb3NlOiExLGVzY0Nsb3NlOiEwLGxhYmVsczplLmxhYmVscywuLi5ufTtjb25zdCBhPWUuZGlhbG9nKHMobiksbiksbD1uZXcgRmU7bGV0IGg9ITE7cmV0dXJuIGsoYS4kZWwsInN1Ym1pdCIsImZvcm0iLHU9Pnt1LnByZXZlbnREZWZhdWx0KCksbC5yZXNvbHZlKHI9PW51bGw/dm9pZCAwOnIoYSkpLGg9ITAsYS5oaWRlKCl9KSxrKGEuJGVsLCJoaWRlIiwoKT0+IWgmJm8obCkpLGwucHJvbWlzZS5kaWFsb2c9YSxsLnByb21pc2V9fXZhciBtYT17ZXh0ZW5kczpKcyxkYXRhOnt0YXJnZXRzOiI+IC51ay1wYXJlbnQiLHRvZ2dsZToiPiBhIixjb250ZW50OiI+IHVsIn19LHZhPXttaXhpbnM6W250LGFlXSxwcm9wczp7ZHJvcGRvd246U3RyaW5nLGFsaWduOlN0cmluZyxjbHNEcm9wOlN0cmluZyxib3VuZGFyeTpCb29sZWFuLGRyb3BiYXI6Qm9vbGVhbixkcm9wYmFyQW5jaG9yOkJvb2xlYW4sZHVyYXRpb246TnVtYmVyLG1vZGU6Qm9vbGVhbixvZmZzZXQ6Qm9vbGVhbixzdHJldGNoOkJvb2xlYW4sZGVsYXlTaG93OkJvb2xlYW4sZGVsYXlIaWRlOkJvb2xlYW4sdGFyZ2V0OkJvb2xlYW4sdGFyZ2V0WDpCb29sZWFuLHRhcmdldFk6Qm9vbGVhbixhbmltYXRpb246Qm9vbGVhbixhbmltYXRlT3V0OkJvb2xlYW59LGRhdGE6e2Ryb3Bkb3duOiIudWstbmF2YmFyLW5hdiA+IGxpID4gYSwgLnVrLW5hdmJhci1pdGVtLCAudWstbmF2YmFyLXRvZ2dsZSIsYWxpZ246WD8icmlnaHQiOiJsZWZ0IixjbHNEcm9wOiJ1ay1uYXZiYXItZHJvcGRvd24iLGJvdW5kYXJ5OiEwLGRyb3BiYXI6ITEsZHJvcGJhckFuY2hvcjohMSxkdXJhdGlvbjoyMDAsY29udGFpbmVyOiExfSxjb21wdXRlZDp7ZHJvcGJhckFuY2hvcih0LGUpe2xldHtkcm9wYmFyQW5jaG9yOml9PXQ7cmV0dXJuIGR0KGksZSl8fGV9LGRyb3BiYXI6e2dldCh0KXtsZXR7ZHJvcGJhcjplfT10O3JldHVybiBlPyhlPXRoaXMuX2Ryb3BiYXJ8fGR0KGUsdGhpcy4kZWwpfHx2KCIrIC51ay1uYXZiYXItZHJvcGJhciIsdGhpcy4kZWwpLGV8fCh0aGlzLl9kcm9wYmFyPXYoIjxkaXY+PC9kaXY+IikpKTpudWxsfSx3YXRjaCh0KXtiKHQsInVrLWRyb3BiYXIiLCJ1ay1kcm9wYmFyLXRvcCIsInVrLW5hdmJhci1kcm9wYmFyIil9LGltbWVkaWF0ZTohMH0sZHJvcENvbnRhaW5lcih0LGUpe3JldHVybiB0aGlzLmNvbnRhaW5lcnx8ZX0sZHJvcGRvd25zOntnZXQodCxlKXtsZXR7Y2xzRHJvcDppfT10O2NvbnN0IHM9RCgiLiIraSxlKTtpZih0aGlzLmRyb3BDb250YWluZXIhPT1lKWZvcihjb25zdCBvIG9mIEQoIi4iK2ksdGhpcy5kcm9wQ29udGFpbmVyKSl7dmFyIG47Y29uc3Qgcj0obj10aGlzLmdldERyb3Bkb3duKG8pKT09bnVsbD92b2lkIDA6bi50YXJnZXRFbDshcChzLG8pJiZyJiZCKHIsdGhpcy4kZWwpJiZzLnB1c2gobyl9cmV0dXJuIHN9LHdhdGNoKHQpe3RoaXMuJGNyZWF0ZSgiZHJvcCIsdC5maWx0ZXIoZT0+IXRoaXMuZ2V0RHJvcGRvd24oZSkpLHsuLi50aGlzLiRwcm9wcyxmbGlwOiExLHNoaWZ0OiEwLHBvczoiYm90dG9tLSIrdGhpcy5hbGlnbixib3VuZGFyeTp0aGlzLmJvdW5kYXJ5PT09ITA/dGhpcy4kZWw6dGhpcy5ib3VuZGFyeX0pfSxpbW1lZGlhdGU6ITB9LHRvZ2dsZXM6e2dldCh0LGUpe2xldHtkcm9wZG93bjppfT10O3JldHVybiBEKGksZSl9LHdhdGNoKCl7Y29uc3QgdD1JKHRoaXMuJGVsLCJ1ay1uYXZiYXItanVzdGlmeSIpO2Zvcihjb25zdCBlIG9mIEQoIi51ay1uYXZiYXItbmF2LCAudWstbmF2YmFyLWxlZnQsIC51ay1uYXZiYXItcmlnaHQiLHRoaXMuJGVsKSljKGUsImZsZXhHcm93Iix0P0QodGhpcy5kcm9wZG93bixlKS5sZW5ndGg6IiIpfSxpbW1lZGlhdGU6ITB9fSxkaXNjb25uZWN0ZWQoKXt0aGlzLmRyb3BiYXImJmN0KHRoaXMuZHJvcGJhciksZGVsZXRlIHRoaXMuX2Ryb3BiYXJ9LGV2ZW50czpbe25hbWU6Im1vdXNlb3ZlciBmb2N1c2luIixkZWxlZ2F0ZSgpe3JldHVybiB0aGlzLmRyb3Bkb3dufSxoYW5kbGVyKHQpe2xldHtjdXJyZW50OmV9PXQ7Y29uc3QgaT10aGlzLmdldEFjdGl2ZSgpO2kmJnAoaS5tb2RlLCJob3ZlciIpJiZpLnRhcmdldEVsJiYhQihpLnRhcmdldEVsLGUpJiYhaS5pc0RlbGF5aW5nJiZpLmhpZGUoITEpfX0se25hbWU6ImtleWRvd24iLGRlbGVnYXRlKCl7cmV0dXJuIHRoaXMuZHJvcGRvd259LGhhbmRsZXIodCl7Y29uc3R7Y3VycmVudDplLGtleUNvZGU6aX09dCxzPXRoaXMuZ2V0QWN0aXZlKCk7aT09PVJ0LkRPV04mJkl0KGUsImFyaWEtZXhwYW5kZWQiKSYmKHQucHJldmVudERlZmF1bHQoKSwhc3x8cy50YXJnZXRFbCE9PWU/KGUuY2xpY2soKSxOKHRoaXMuZHJvcENvbnRhaW5lciwic2hvdyIsbj0+e2xldHt0YXJnZXQ6b309bjtyZXR1cm4gbW4obyl9KSk6bW4ocy4kZWwpKSxnbih0LHRoaXMudG9nZ2xlcyxzKX19LHtuYW1lOiJrZXlkb3duIixlbCgpe3JldHVybiB0aGlzLmRyb3BDb250YWluZXJ9LGRlbGVnYXRlKCl7cmV0dXJuIi4iK3RoaXMuY2xzRHJvcH0saGFuZGxlcih0KXtjb25zdHtjdXJyZW50OmUsa2V5Q29kZTppfT10O2lmKCFwKHRoaXMuZHJvcGRvd25zLGUpKXJldHVybjtjb25zdCBzPXRoaXMuZ2V0QWN0aXZlKCksbj1EKFdlLGUpLG89YnQobixhPT5MKGEsIjpmb2N1cyIpKTtpZihpPT09UnQuVVAmJih0LnByZXZlbnREZWZhdWx0KCksbz4wJiZuW28tMV0uZm9jdXMoKSksaT09PVJ0LkRPV04mJih0LnByZXZlbnREZWZhdWx0KCksbzxuLmxlbmd0aC0xJiZuW28rMV0uZm9jdXMoKSksaT09PVJ0LkVTQyl7dmFyIHI7cz09bnVsbHx8KHI9cy50YXJnZXRFbCk9PW51bGx8fHIuZm9jdXMoKX1nbih0LHRoaXMudG9nZ2xlcyxzKX19LHtuYW1lOiJtb3VzZWxlYXZlIixlbCgpe3JldHVybiB0aGlzLmRyb3BiYXJ9LGZpbHRlcigpe3JldHVybiB0aGlzLmRyb3BiYXJ9LGhhbmRsZXIoKXtjb25zdCB0PXRoaXMuZ2V0QWN0aXZlKCk7dCYmcCh0Lm1vZGUsImhvdmVyIikmJiF0aGlzLmRyb3Bkb3ducy5zb21lKGU9PkwoZSwiOmhvdmVyIikpJiZ0LmhpZGUoKX19LHtuYW1lOiJiZWZvcmVzaG93IixlbCgpe3JldHVybiB0aGlzLmRyb3BDb250YWluZXJ9LGZpbHRlcigpe3JldHVybiB0aGlzLmRyb3BiYXJ9LGhhbmRsZXIodCl7bGV0e3RhcmdldDplfT10OyF0aGlzLmlzRHJvcGJhckRyb3AoZSl8fCh0aGlzLmRyb3BiYXIucHJldmlvdXNFbGVtZW50U2libGluZyE9PXRoaXMuZHJvcGJhckFuY2hvciYmVmUodGhpcy5kcm9wYmFyQW5jaG9yLHRoaXMuZHJvcGJhciksYihlLHRoaXMuY2xzRHJvcCsiLWRyb3BiYXIiKSl9fSx7bmFtZToic2hvdyIsZWwoKXtyZXR1cm4gdGhpcy5kcm9wQ29udGFpbmVyfSxmaWx0ZXIoKXtyZXR1cm4gdGhpcy5kcm9wYmFyfSxoYW5kbGVyKHQpe2xldHt0YXJnZXQ6ZX09dDtpZighdGhpcy5pc0Ryb3BiYXJEcm9wKGUpKXJldHVybjtjb25zdCBpPXRoaXMuZ2V0RHJvcGRvd24oZSk7dGhpcy5fb2JzZXJ2ZXI9S2UoW2kuJGVsLC4uLmkudGFyZ2V0XSwoKT0+e2NvbnN0IHM9VXQoZSwiLiIrdGhpcy5jbHNEcm9wKS5jb25jYXQoZSkubWFwKGE9PkEoYSkpLG49TWF0aC5taW4oLi4ucy5tYXAoYT0+e2xldHt0b3A6bH09YTtyZXR1cm4gbH0pKSxvPU1hdGgubWF4KC4uLnMubWFwKGE9PntsZXR7Ym90dG9tOmx9PWE7cmV0dXJuIGx9KSkscj1BKHRoaXMuZHJvcGJhcik7Yyh0aGlzLmRyb3BiYXIsInRvcCIsdGhpcy5kcm9wYmFyLm9mZnNldFRvcC0oci50b3AtbikpLHRoaXMudHJhbnNpdGlvblRvKG8tbit3KGMoZSwibWFyZ2luQm90dG9tIikpLGUpfSl9fSx7bmFtZToiYmVmb3JlaGlkZSIsZWwoKXtyZXR1cm4gdGhpcy5kcm9wQ29udGFpbmVyfSxmaWx0ZXIoKXtyZXR1cm4gdGhpcy5kcm9wYmFyfSxoYW5kbGVyKHQpe2NvbnN0IGU9dGhpcy5nZXRBY3RpdmUoKTtMKHRoaXMuZHJvcGJhciwiOmhvdmVyIikmJihlPT1udWxsP3ZvaWQgMDplLiRlbCk9PT10LnRhcmdldCYmIXRoaXMudG9nZ2xlcy5zb21lKGk9PmUudGFyZ2V0RWwhPT1pJiZMKGksIjpmb2N1cyIpKSYmdC5wcmV2ZW50RGVmYXVsdCgpfX0se25hbWU6ImhpZGUiLGVsKCl7cmV0dXJuIHRoaXMuZHJvcENvbnRhaW5lcn0sZmlsdGVyKCl7cmV0dXJuIHRoaXMuZHJvcGJhcn0saGFuZGxlcih0KXt2YXIgZTtsZXR7dGFyZ2V0Oml9PXQ7aWYoIXRoaXMuaXNEcm9wYmFyRHJvcChpKSlyZXR1cm47KGU9dGhpcy5fb2JzZXJ2ZXIpPT1udWxsfHxlLmRpc2Nvbm5lY3QoKTtjb25zdCBzPXRoaXMuZ2V0QWN0aXZlKCk7KCFzfHwocz09bnVsbD92b2lkIDA6cy4kZWwpPT09aSkmJnRoaXMudHJhbnNpdGlvblRvKDApfX1dLG1ldGhvZHM6e2dldEFjdGl2ZSgpe3JldHVybiBwKHRoaXMuZHJvcGRvd25zLFk9PW51bGw/dm9pZCAwOlkuJGVsKSYmWX0sdHJhbnNpdGlvblRvKHQsZSl7Y29uc3R7ZHJvcGJhcjppfT10aGlzLHM9RyhpKTtlPXM8dCYmZSxjKGUsImNsaXBQYXRoIiwicG9seWdvbigwIDAsMTAwJSAwLDEwMCUgIitzKyJweCwwICIrcysicHgpIiksRyhpLHMpLFMuY2FuY2VsKFtlLGldKSxQcm9taXNlLmFsbChbUy5zdGFydChpLHtoZWlnaHQ6dH0sdGhpcy5kdXJhdGlvbiksUy5zdGFydChlLHtjbGlwUGF0aDoicG9seWdvbigwIDAsMTAwJSAwLDEwMCUgIit0KyJweCwwICIrdCsicHgpIn0sdGhpcy5kdXJhdGlvbildKS5jYXRjaChUKS50aGVuKCgpPT5jKGUse2NsaXBQYXRoOiIifSkpfSxnZXREcm9wZG93bih0KXtyZXR1cm4gdGhpcy4kZ2V0Q29tcG9uZW50KHQsImRyb3AiKXx8dGhpcy4kZ2V0Q29tcG9uZW50KHQsImRyb3Bkb3duIil9LGlzRHJvcGJhckRyb3AodCl7cmV0dXJuIHRoaXMuZ2V0RHJvcGRvd24odCkmJkkodCx0aGlzLmNsc0Ryb3ApfX19O2Z1bmN0aW9uIGduKHQsZSxpKXtjb25zdHtjdXJyZW50OnMsa2V5Q29kZTpufT10LG89KGk9PW51bGw/dm9pZCAwOmkudGFyZ2V0RWwpfHxzLHI9ZS5pbmRleE9mKG8pO249PT1SdC5MRUZUJiZyPjAmJihpPT1udWxsfHxpLmhpZGUoITEpLGVbci0xXS5mb2N1cygpKSxuPT09UnQuUklHSFQmJnI8ZS5sZW5ndGgtMSYmKGk9PW51bGx8fGkuaGlkZSghMSksZVtyKzFdLmZvY3VzKCkpLG49PT1SdC5UQUImJihvLmZvY3VzKCksaT09bnVsbHx8aS5oaWRlKCExKSl9ZnVuY3Rpb24gbW4odCl7aWYoIXYoIjpmb2N1cyIsdCkpe3ZhciBlOyhlPXYoV2UsdCkpPT1udWxsfHxlLmZvY3VzKCl9fWNvbnN0IFJ0PXtUQUI6OSxFU0M6MjcsTEVGVDozNyxVUDozOCxSSUdIVDozOSxET1dOOjQwfTt2YXIgdm49e3Byb3BzOntzd2lwaW5nOkJvb2xlYW59LGRhdGE6e3N3aXBpbmc6ITB9LGNvbXB1dGVkOntzd2lwZVRhcmdldCh0LGUpe3JldHVybiBlfX0sY29ubmVjdGVkKCl7IXRoaXMuc3dpcGluZ3x8ZWkodGhpcyx7ZWw6dGhpcy5zd2lwZVRhcmdldCxuYW1lOmd0LHBhc3NpdmU6ITAsaGFuZGxlcih0KXtpZighJHQodCkpcmV0dXJuO2NvbnN0IGU9ZWUodCksaT0idGFnTmFtZSJpbiB0LnRhcmdldD90LnRhcmdldDpQKHQudGFyZ2V0KTtOKGRvY3VtZW50LEF0KyIgIitKZSsiIHNjcm9sbCIscz0+e2NvbnN0e3g6bix5Om99PWVlKHMpOyhzLnR5cGUhPT0ic2Nyb2xsIiYmaSYmbiYmTWF0aC5hYnMoZS54LW4pPjEwMHx8byYmTWF0aC5hYnMoZS55LW8pPjEwMCkmJnNldFRpbWVvdXQoKCk9PntnKGksInN3aXBlIiksZyhpLCJzd2lwZSIrd2EoZS54LGUueSxuLG8pKX0pfSl9fSl9fTtmdW5jdGlvbiB3YSh0LGUsaSxzKXtyZXR1cm4gTWF0aC5hYnModC1pKT49TWF0aC5hYnMoZS1zKT90LWk+MD8iTGVmdCI6IlJpZ2h0IjplLXM+MD8iVXAiOiJEb3duIn12YXIgYmE9e21peGluczpbS2ksdm5dLGFyZ3M6Im1vZGUiLHByb3BzOnttb2RlOlN0cmluZyxmbGlwOkJvb2xlYW4sb3ZlcmxheTpCb29sZWFufSxkYXRhOnttb2RlOiJzbGlkZSIsZmxpcDohMSxvdmVybGF5OiExLGNsc1BhZ2U6InVrLW9mZmNhbnZhcy1wYWdlIixjbHNDb250YWluZXI6InVrLW9mZmNhbnZhcy1jb250YWluZXIiLHNlbFBhbmVsOiIudWstb2ZmY2FudmFzLWJhciIsY2xzRmxpcDoidWstb2ZmY2FudmFzLWZsaXAiLGNsc0NvbnRhaW5lckFuaW1hdGlvbjoidWstb2ZmY2FudmFzLWNvbnRhaW5lci1hbmltYXRpb24iLGNsc1NpZGViYXJBbmltYXRpb246InVrLW9mZmNhbnZhcy1iYXItYW5pbWF0aW9uIixjbHNNb2RlOiJ1ay1vZmZjYW52YXMiLGNsc092ZXJsYXk6InVrLW9mZmNhbnZhcy1vdmVybGF5IixzZWxDbG9zZToiLnVrLW9mZmNhbnZhcy1jbG9zZSIsY29udGFpbmVyOiExfSxjb21wdXRlZDp7Y2xzRmxpcCh0KXtsZXR7ZmxpcDplLGNsc0ZsaXA6aX09dDtyZXR1cm4gZT9pOiIifSxjbHNPdmVybGF5KHQpe2xldHtvdmVybGF5OmUsY2xzT3ZlcmxheTppfT10O3JldHVybiBlP2k6IiJ9LGNsc01vZGUodCl7bGV0e21vZGU6ZSxjbHNNb2RlOml9PXQ7cmV0dXJuIGkrIi0iK2V9LGNsc1NpZGViYXJBbmltYXRpb24odCl7bGV0e21vZGU6ZSxjbHNTaWRlYmFyQW5pbWF0aW9uOml9PXQ7cmV0dXJuIGU9PT0ibm9uZSJ8fGU9PT0icmV2ZWFsIj8iIjppfSxjbHNDb250YWluZXJBbmltYXRpb24odCl7bGV0e21vZGU6ZSxjbHNDb250YWluZXJBbmltYXRpb246aX09dDtyZXR1cm4gZSE9PSJwdXNoIiYmZSE9PSJyZXZlYWwiPyIiOml9LHRyYW5zaXRpb25FbGVtZW50KHQpe2xldHttb2RlOmV9PXQ7cmV0dXJuIGU9PT0icmV2ZWFsIj9QKHRoaXMucGFuZWwpOnRoaXMucGFuZWx9fSx1cGRhdGU6e3JlYWQoKXt0aGlzLmlzVG9nZ2xlZCgpJiYhVih0aGlzLiRlbCkmJnRoaXMuaGlkZSgpfSxldmVudHM6WyJyZXNpemUiXX0sZXZlbnRzOlt7bmFtZToiY2xpY2siLGRlbGVnYXRlKCl7cmV0dXJuJ2FbaHJlZl49IiMiXSd9LGhhbmRsZXIodCl7bGV0e2N1cnJlbnQ6e2hhc2g6ZX0sZGVmYXVsdFByZXZlbnRlZDppfT10OyFpJiZlJiZ2KGUsZG9jdW1lbnQuYm9keSkmJnRoaXMuaGlkZSgpfX0se25hbWU6InRvdWNobW92ZSIsc2VsZjohMCxwYXNzaXZlOiExLGZpbHRlcigpe3JldHVybiB0aGlzLm92ZXJsYXl9LGhhbmRsZXIodCl7dC5jYW5jZWxhYmxlJiZ0LnByZXZlbnREZWZhdWx0KCl9fSx7bmFtZToic2hvdyIsc2VsZjohMCxoYW5kbGVyKCl7dGhpcy5tb2RlPT09InJldmVhbCImJiFJKFAodGhpcy5wYW5lbCksdGhpcy5jbHNNb2RlKSYmKEhpKHRoaXMucGFuZWwsIjxkaXY+IiksYihQKHRoaXMucGFuZWwpLHRoaXMuY2xzTW9kZSkpO2NvbnN0e2JvZHk6dCxzY3JvbGxpbmdFbGVtZW50OmV9PWRvY3VtZW50O2IodCx0aGlzLmNsc0NvbnRhaW5lcix0aGlzLmNsc0ZsaXApLGModCwidG91Y2gtYWN0aW9uIiwicGFuLXkgcGluY2gtem9vbSIpLGModGhpcy4kZWwsImRpc3BsYXkiLCJibG9jayIpLGModGhpcy5wYW5lbCwibWF4V2lkdGgiLGUuY2xpZW50V2lkdGgpLGIodGhpcy4kZWwsdGhpcy5jbHNPdmVybGF5KSxiKHRoaXMucGFuZWwsdGhpcy5jbHNTaWRlYmFyQW5pbWF0aW9uLHRoaXMubW9kZT09PSJyZXZlYWwiPyIiOnRoaXMuY2xzTW9kZSksRyh0KSxiKHQsdGhpcy5jbHNDb250YWluZXJBbmltYXRpb24pLHRoaXMuY2xzQ29udGFpbmVyQW5pbWF0aW9uJiZ4YSgpfX0se25hbWU6ImhpZGUiLHNlbGY6ITAsaGFuZGxlcigpe08oZG9jdW1lbnQuYm9keSx0aGlzLmNsc0NvbnRhaW5lckFuaW1hdGlvbiksYyhkb2N1bWVudC5ib2R5LCJ0b3VjaC1hY3Rpb24iLCIiKX19LHtuYW1lOiJoaWRkZW4iLHNlbGY6ITAsaGFuZGxlcigpe3RoaXMuY2xzQ29udGFpbmVyQW5pbWF0aW9uJiZ5YSgpLHRoaXMubW9kZT09PSJyZXZlYWwiJiZYZSh0aGlzLnBhbmVsKSxPKHRoaXMucGFuZWwsdGhpcy5jbHNTaWRlYmFyQW5pbWF0aW9uLHRoaXMuY2xzTW9kZSksTyh0aGlzLiRlbCx0aGlzLmNsc092ZXJsYXkpLGModGhpcy4kZWwsImRpc3BsYXkiLCIiKSxjKHRoaXMucGFuZWwsIm1heFdpZHRoIiwiIiksTyhkb2N1bWVudC5ib2R5LHRoaXMuY2xzQ29udGFpbmVyLHRoaXMuY2xzRmxpcCl9fSx7bmFtZToic3dpcGVMZWZ0IHN3aXBlUmlnaHQiLGhhbmRsZXIodCl7dGhpcy5pc1RvZ2dsZWQoKSYmWHQodC50eXBlLCJMZWZ0IiledGhpcy5mbGlwJiZ0aGlzLmhpZGUoKX19XX07ZnVuY3Rpb24geGEoKXt3bigpLmNvbnRlbnQrPSIsdXNlci1zY2FsYWJsZT0wIn1mdW5jdGlvbiB5YSgpe2NvbnN0IHQ9d24oKTt0LmNvbnRlbnQ9dC5jb250ZW50LnJlcGxhY2UoLyx1c2VyLXNjYWxhYmxlPTAkLywiIil9ZnVuY3Rpb24gd24oKXtyZXR1cm4gdignbWV0YVtuYW1lPSJ2aWV3cG9ydCJdJyxkb2N1bWVudC5oZWFkKXx8aihkb2N1bWVudC5oZWFkLCc8bWV0YSBuYW1lPSJ2aWV3cG9ydCI+Jyl9dmFyICRhPXttaXhpbnM6W250LHd0XSxwcm9wczp7c2VsQ29udGFpbmVyOlN0cmluZyxzZWxDb250ZW50OlN0cmluZyxtaW5IZWlnaHQ6TnVtYmVyfSxkYXRhOntzZWxDb250YWluZXI6Ii51ay1tb2RhbCIsc2VsQ29udGVudDoiLnVrLW1vZGFsLWRpYWxvZyIsbWluSGVpZ2h0OjE1MH0sY29tcHV0ZWQ6e2NvbnRhaW5lcih0LGUpe2xldHtzZWxDb250YWluZXI6aX09dDtyZXR1cm4gaXQoZSxpKX0sY29udGVudCh0LGUpe2xldHtzZWxDb250ZW50Oml9PXQ7cmV0dXJuIGl0KGUsaSl9fSxyZXNpemVUYXJnZXRzKCl7cmV0dXJuW3RoaXMuY29udGFpbmVyLHRoaXMuY29udGVudF19LHVwZGF0ZTp7cmVhZCgpe3JldHVybiF0aGlzLmNvbnRlbnR8fCF0aGlzLmNvbnRhaW5lcnx8IVYodGhpcy4kZWwpPyExOnttYXg6TWF0aC5tYXgodGhpcy5taW5IZWlnaHQsRyh0aGlzLmNvbnRhaW5lciktKHgodGhpcy5jb250ZW50KS5oZWlnaHQtRyh0aGlzLiRlbCkpKX19LHdyaXRlKHQpe2xldHttYXg6ZX09dDtjKHRoaXMuJGVsLHttaW5IZWlnaHQ6dGhpcy5taW5IZWlnaHQsbWF4SGVpZ2h0OmV9KX0sZXZlbnRzOlsicmVzaXplIl19fSxrYT17bWl4aW5zOlt3dF0scHJvcHM6WyJ3aWR0aCIsImhlaWdodCJdLHJlc2l6ZVRhcmdldHMoKXtyZXR1cm5bdGhpcy4kZWwsUCh0aGlzLiRlbCldfSxjb25uZWN0ZWQoKXtiKHRoaXMuJGVsLCJ1ay1yZXNwb25zaXZlLXdpZHRoIil9LHVwZGF0ZTp7cmVhZCgpe3JldHVybiBWKHRoaXMuJGVsKSYmdGhpcy53aWR0aCYmdGhpcy5oZWlnaHQ/e3dpZHRoOnllKFAodGhpcy4kZWwpKSxoZWlnaHQ6dGhpcy5oZWlnaHR9OiExfSx3cml0ZSh0KXtHKHRoaXMuJGVsLExlLmNvbnRhaW4oe2hlaWdodDp0aGlzLmhlaWdodCx3aWR0aDp0aGlzLndpZHRofSx0KS5oZWlnaHQpfSxldmVudHM6WyJyZXNpemUiXX19LFNhPXtwcm9wczp7b2Zmc2V0Ok51bWJlcn0sZGF0YTp7b2Zmc2V0OjB9LGNvbm5lY3RlZCgpe1RhKHRoaXMpfSxkaXNjb25uZWN0ZWQoKXtDYSh0aGlzKX0sbWV0aG9kczp7YXN5bmMgc2Nyb2xsVG8odCl7dD10JiZ2KHQpfHxkb2N1bWVudC5ib2R5LGcodGhpcy4kZWwsImJlZm9yZXNjcm9sbCIsW3RoaXMsdF0pJiYoYXdhaXQgWWkodCx7b2Zmc2V0OnRoaXMub2Zmc2V0fSksZyh0aGlzLiRlbCwic2Nyb2xsZWQiLFt0aGlzLHRdKSl9fX07Y29uc3QgSWU9bmV3IFNldDtmdW5jdGlvbiBUYSh0KXtJZS5zaXplfHxrKGRvY3VtZW50LCJjbGljayIsYm4pLEllLmFkZCh0KX1mdW5jdGlvbiBDYSh0KXtJZS5kZWxldGUodCksSWUubGVuZ3RofHxEdChkb2N1bWVudCwiY2xpY2siLGJuKX1mdW5jdGlvbiBibih0KXtpZighdC5kZWZhdWx0UHJldmVudGVkKWZvcihjb25zdCBlIG9mIEllKUIodC50YXJnZXQsZS4kZWwpJiYodC5wcmV2ZW50RGVmYXVsdCgpLGUuc2Nyb2xsVG8oeG4oZS4kZWwpKSl9ZnVuY3Rpb24geG4odCl7cmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRlY29kZVVSSUNvbXBvbmVudCh0Lmhhc2gpLnN1YnN0cmluZygxKSl9dmFyIElhPXttaXhpbnM6W1RlXSxhcmdzOiJjbHMiLHByb3BzOntjbHM6U3RyaW5nLHRhcmdldDpTdHJpbmcsaGlkZGVuOkJvb2xlYW4sb2Zmc2V0VG9wOk51bWJlcixvZmZzZXRMZWZ0Ok51bWJlcixyZXBlYXQ6Qm9vbGVhbixkZWxheTpOdW1iZXJ9LGRhdGE6KCk9Pih7Y2xzOiIiLHRhcmdldDohMSxoaWRkZW46ITAsb2Zmc2V0VG9wOjAsb2Zmc2V0TGVmdDowLHJlcGVhdDohMSxkZWxheTowLGluVmlld0NsYXNzOiJ1ay1zY3JvbGxzcHktaW52aWV3In0pLGNvbXB1dGVkOntlbGVtZW50czp7Z2V0KHQsZSl7bGV0e3RhcmdldDppfT10O3JldHVybiBpP0QoaSxlKTpbZV19LHdhdGNoKHQsZSl7dGhpcy5oaWRkZW4mJmModmUodCwiOm5vdCguIit0aGlzLmluVmlld0NsYXNzKyIpIiksInZpc2liaWxpdHkiLCJoaWRkZW4iKSxwZSh0LGUpfHx0aGlzLiRyZXNldCgpfSxpbW1lZGlhdGU6ITB9fSxjb25uZWN0ZWQoKXt0aGlzLl9kYXRhLmVsZW1lbnRzPW5ldyBNYXAsdGhpcy5yZWdpc3Rlck9ic2VydmVyKG9lKHRoaXMuZWxlbWVudHMsdD0+e2NvbnN0IGU9dGhpcy5fZGF0YS5lbGVtZW50cztmb3IoY29uc3R7dGFyZ2V0OmksaXNJbnRlcnNlY3Rpbmc6c31vZiB0KXtlLmhhcyhpKXx8ZS5zZXQoaSx7Y2xzOmF0KGksInVrLXNjcm9sbHNweS1jbGFzcyIpfHx0aGlzLmNsc30pO2NvbnN0IG49ZS5nZXQoaSk7IXRoaXMucmVwZWF0JiZuLnNob3d8fChuLnNob3c9cyl9dGhpcy4kZW1pdCgpfSx7cm9vdE1hcmdpbjpKKHRoaXMub2Zmc2V0VG9wLCJoZWlnaHQiKS0xKyJweCAiKyhKKHRoaXMub2Zmc2V0TGVmdCwid2lkdGgiKS0xKSsicHgifSwhMSkpfSxkaXNjb25uZWN0ZWQoKXtmb3IoY29uc3RbdCxlXW9mIHRoaXMuX2RhdGEuZWxlbWVudHMuZW50cmllcygpKU8odCx0aGlzLmluVmlld0NsYXNzLChlPT1udWxsP3ZvaWQgMDplLmNscyl8fCIiKX0sdXBkYXRlOlt7d3JpdGUodCl7Zm9yKGNvbnN0W2UsaV1vZiB0LmVsZW1lbnRzLmVudHJpZXMoKSlpLnNob3cmJiFpLmludmlldyYmIWkucXVldWVkPyhpLnF1ZXVlZD0hMCx0LnByb21pc2U9KHQucHJvbWlzZXx8UHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oKCk9Pm5ldyBQcm9taXNlKHM9PnNldFRpbWVvdXQocyx0aGlzLmRlbGF5KSkpLnRoZW4oKCk9Pnt0aGlzLnRvZ2dsZShlLCEwKSxzZXRUaW1lb3V0KCgpPT57aS5xdWV1ZWQ9ITEsdGhpcy4kZW1pdCgpfSwzMDApfSkpOiFpLnNob3cmJmkuaW52aWV3JiYhaS5xdWV1ZWQmJnRoaXMucmVwZWF0JiZ0aGlzLnRvZ2dsZShlLCExKX19XSxtZXRob2RzOnt0b2dnbGUodCxlKXtjb25zdCBpPXRoaXMuX2RhdGEuZWxlbWVudHMuZ2V0KHQpO2lmKCEhaSl7aWYoaS5vZmY9PW51bGx8fGkub2ZmKCksYyh0LCJ2aXNpYmlsaXR5IiwhZSYmdGhpcy5oaWRkZW4/ImhpZGRlbiI6IiIpLFcodCx0aGlzLmluVmlld0NsYXNzLGUpLFcodCxpLmNscyksL1xidWstYW5pbWF0aW9uLS8udGVzdChpLmNscykpe2NvbnN0IHM9KCk9PkJpKHQsInVrLWFuaW1hdGlvbi1bXFx3LV0rIik7ZT9pLm9mZj1OKHQsImFuaW1hdGlvbmNhbmNlbCBhbmltYXRpb25lbmQiLHMpOnMoKX1nKHQsZT8iaW52aWV3Ijoib3V0dmlldyIpLGkuaW52aWV3PWUsdGhpcy4kdXBkYXRlKHQpfX19fSxQYT17bWl4aW5zOltUZV0scHJvcHM6e2NsczpTdHJpbmcsY2xvc2VzdDpTdHJpbmcsc2Nyb2xsOkJvb2xlYW4sb3ZlcmZsb3c6Qm9vbGVhbixvZmZzZXQ6TnVtYmVyfSxkYXRhOntjbHM6InVrLWFjdGl2ZSIsY2xvc2VzdDohMSxzY3JvbGw6ITEsb3ZlcmZsb3c6ITAsb2Zmc2V0OjB9LGNvbXB1dGVkOntsaW5rczp7Z2V0KHQsZSl7cmV0dXJuIEQoJ2FbaHJlZl49IiMiXScsZSkuZmlsdGVyKGk9PmkuaGFzaCl9LHdhdGNoKHQpe3RoaXMuc2Nyb2xsJiZ0aGlzLiRjcmVhdGUoInNjcm9sbCIsdCx7b2Zmc2V0OnRoaXMub2Zmc2V0fHwwfSl9LGltbWVkaWF0ZTohMH0sZWxlbWVudHModCl7bGV0e2Nsb3Nlc3Q6ZX09dDtyZXR1cm4gaXQodGhpcy5saW5rcyxlfHwiKiIpfX0sdXBkYXRlOlt7cmVhZCgpe2NvbnN0IHQ9dGhpcy5saW5rcy5tYXAoeG4pLmZpbHRlcihCb29sZWFuKSx7bGVuZ3RoOmV9PXQ7aWYoIWV8fCFWKHRoaXMuJGVsKSlyZXR1cm4hMTtjb25zdFtpXT1RKHQsL2F1dG98c2Nyb2xsLywhMCkse3Njcm9sbFRvcDpzLHNjcm9sbEhlaWdodDpufT1pLG89bHQoaSkscj1uLW8uaGVpZ2h0O2xldCBhPSExO2lmKHM9PT1yKWE9ZS0xO2Vsc2V7Zm9yKGxldCBsPTA7bDx0Lmxlbmd0aCYmIShBKHRbbF0pLnRvcC1vLnRvcC10aGlzLm9mZnNldD4wKTtsKyspYT0rbDthPT09ITEmJnRoaXMub3ZlcmZsb3cmJihhPTApfXJldHVybnthY3RpdmU6YX19LHdyaXRlKHQpe2xldHthY3RpdmU6ZX09dDtjb25zdCBpPWUhPT0hMSYmIUkodGhpcy5lbGVtZW50c1tlXSx0aGlzLmNscyk7dGhpcy5saW5rcy5mb3JFYWNoKHM9PnMuYmx1cigpKTtmb3IobGV0IHM9MDtzPHRoaXMuZWxlbWVudHMubGVuZ3RoO3MrKylXKHRoaXMuZWxlbWVudHNbc10sdGhpcy5jbHMsK3M9PT1lKTtpJiZnKHRoaXMuJGVsLCJhY3RpdmUiLFtlLHRoaXMuZWxlbWVudHNbZV1dKX0sZXZlbnRzOlsic2Nyb2xsIiwicmVzaXplIl19XX0sQWE9e21peGluczpbbnQsbGksd3QsVGVdLHByb3BzOntwb3NpdGlvbjpTdHJpbmcsdG9wOm51bGwsYm90dG9tOm51bGwsc3RhcnQ6bnVsbCxlbmQ6bnVsbCxvZmZzZXQ6U3RyaW5nLG92ZXJmbG93RmxpcDpCb29sZWFuLGFuaW1hdGlvbjpTdHJpbmcsY2xzQWN0aXZlOlN0cmluZyxjbHNJbmFjdGl2ZTpTdHJpbmcsY2xzRml4ZWQ6U3RyaW5nLGNsc0JlbG93OlN0cmluZyxzZWxUYXJnZXQ6U3RyaW5nLHNob3dPblVwOkJvb2xlYW4sdGFyZ2V0T2Zmc2V0Ok51bWJlcn0sZGF0YTp7cG9zaXRpb246InRvcCIsdG9wOiExLGJvdHRvbTohMSxzdGFydDohMSxlbmQ6ITEsb2Zmc2V0OjAsb3ZlcmZsb3dGbGlwOiExLGFuaW1hdGlvbjoiIixjbHNBY3RpdmU6InVrLWFjdGl2ZSIsY2xzSW5hY3RpdmU6IiIsY2xzRml4ZWQ6InVrLXN0aWNreS1maXhlZCIsY2xzQmVsb3c6InVrLXN0aWNreS1iZWxvdyIsc2VsVGFyZ2V0OiIiLHNob3dPblVwOiExLHRhcmdldE9mZnNldDohMX0sY29tcHV0ZWQ6e3NlbFRhcmdldCh0LGUpe2xldHtzZWxUYXJnZXQ6aX09dDtyZXR1cm4gaSYmdihpLGUpfHxlfX0scmVzaXplVGFyZ2V0cygpe3JldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9LGNvbm5lY3RlZCgpe3RoaXMuc3RhcnQ9JG4odGhpcy5zdGFydHx8dGhpcy50b3ApLHRoaXMuZW5kPSRuKHRoaXMuZW5kfHx0aGlzLmJvdHRvbSksdGhpcy5wbGFjZWhvbGRlcj12KCIrIC51ay1zdGlja3ktcGxhY2Vob2xkZXIiLHRoaXMuJGVsKXx8dignPGRpdiBjbGFzcz0idWstc3RpY2t5LXBsYWNlaG9sZGVyIj48L2Rpdj4nKSx0aGlzLmlzRml4ZWQ9ITEsdGhpcy5zZXRBY3RpdmUoITEpfSxkaXNjb25uZWN0ZWQoKXt0aGlzLmlzRml4ZWQmJih0aGlzLmhpZGUoKSxPKHRoaXMuc2VsVGFyZ2V0LHRoaXMuY2xzSW5hY3RpdmUpKSxjdCh0aGlzLnBsYWNlaG9sZGVyKSx0aGlzLnBsYWNlaG9sZGVyPW51bGx9LGV2ZW50czpbe25hbWU6InJlc2l6ZSIsZWwoKXtyZXR1cm4gd2luZG93fSxoYW5kbGVyKCl7dGhpcy4kZW1pdCgicmVzaXplIil9fSx7bmFtZToibG9hZCBoYXNoY2hhbmdlIHBvcHN0YXRlIixlbCgpe3JldHVybiB3aW5kb3d9LGZpbHRlcigpe3JldHVybiB0aGlzLnRhcmdldE9mZnNldCE9PSExfSxoYW5kbGVyKCl7Y29uc3R7c2Nyb2xsaW5nRWxlbWVudDp0fT1kb2N1bWVudDshbG9jYXRpb24uaGFzaHx8dC5zY3JvbGxUb3A9PT0wfHxzZXRUaW1lb3V0KCgpPT57Y29uc3QgZT1BKHYobG9jYXRpb24uaGFzaCkpLGk9QSh0aGlzLiRlbCk7dGhpcy5pc0ZpeGVkJiZTaShlLGkpJiYodC5zY3JvbGxUb3A9ZS50b3AtaS5oZWlnaHQtSih0aGlzLnRhcmdldE9mZnNldCwiaGVpZ2h0Iix0aGlzLnBsYWNlaG9sZGVyKS1KKHRoaXMub2Zmc2V0LCJoZWlnaHQiLHRoaXMucGxhY2Vob2xkZXIpKX0pfX1dLHVwZGF0ZTpbe3JlYWQodCxlKXtsZXR7aGVpZ2h0OmksbWFyZ2luOnN9PXQ7aWYodGhpcy5pbmFjdGl2ZT0hdGhpcy5tYXRjaE1lZGlhfHwhVih0aGlzLiRlbCksdGhpcy5pbmFjdGl2ZSlyZXR1cm4hMTtjb25zdCBuPXRoaXMuYWN0aXZlJiZlLmhhcygicmVzaXplIik7biYmKGModGhpcy5zZWxUYXJnZXQsInRyYW5zaXRpb24iLCIwcyIpLHRoaXMuaGlkZSgpKSx0aGlzLmFjdGl2ZXx8KGk9QSh0aGlzLiRlbCkuaGVpZ2h0LHM9Yyh0aGlzLiRlbCwibWFyZ2luIikpLG4mJih0aGlzLnNob3coKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PmModGhpcy5zZWxUYXJnZXQsInRyYW5zaXRpb24iLCIiKSkpO2NvbnN0IG89dGhpcy5pc0ZpeGVkP3RoaXMucGxhY2Vob2xkZXI6dGhpcy4kZWwscj1HKHdpbmRvdyk7bGV0IGE9dGhpcy5wb3NpdGlvbjt0aGlzLm92ZXJmbG93RmxpcCYmaT5yJiYoYT1hPT09InRvcCI/ImJvdHRvbSI6InRvcCIpO2xldCBsPUoodGhpcy5vZmZzZXQsImhlaWdodCIsbyk7YT09PSJib3R0b20iJiYoaTxyfHx0aGlzLm92ZXJmbG93RmxpcCkmJihsKz1yLWkpO2NvbnN0IGg9dGhpcy5vdmVyZmxvd0ZsaXA/MDpNYXRoLm1heCgwLGkrbC1yKSx1PUEobykudG9wLGQ9KHRoaXMuc3RhcnQ9PT0hMT91OnluKHRoaXMuc3RhcnQsdGhpcy4kZWwsdSkpLWwsZj10aGlzLmVuZD09PSExP2RvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsSGVpZ2h0LXI6eW4odGhpcy5lbmQsdGhpcy4kZWwsdStpLCEwKS1BKHRoaXMuJGVsKS5oZWlnaHQraC1sO3JldHVybntzdGFydDpkLGVuZDpmLG9mZnNldDpsLG92ZXJmbG93OmgsdG9wT2Zmc2V0OnUsaGVpZ2h0OmksbWFyZ2luOnMsd2lkdGg6eChvKS53aWR0aCx0b3A6SHQobylbMF19fSx3cml0ZSh0KXtsZXR7aGVpZ2h0OmUsbWFyZ2luOml9PXQ7Y29uc3R7cGxhY2Vob2xkZXI6c309dGhpcztjKHMse2hlaWdodDplLG1hcmdpbjppfSksQihzLGRvY3VtZW50KXx8KFZlKHRoaXMuJGVsLHMpLHMuaGlkZGVuPSEwKX0sZXZlbnRzOlsicmVzaXplIl19LHtyZWFkKHQpe2xldHtzY3JvbGw6ZT0wLGRpcjppPSJkb3duIixvdmVyZmxvdzpzLG92ZXJmbG93U2Nyb2xsOm49MCxzdGFydDpvLGVuZDpyfT10O2NvbnN0IGE9ZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3A7cmV0dXJue2RpcjplPD1hPyJkb3duIjoidXAiLHByZXZEaXI6aSxzY3JvbGw6YSxwcmV2U2Nyb2xsOmUsb2Zmc2V0UGFyZW50VG9wOkEoKHRoaXMuaXNGaXhlZD90aGlzLnBsYWNlaG9sZGVyOnRoaXMuJGVsKS5vZmZzZXRQYXJlbnQpLnRvcCxvdmVyZmxvd1Njcm9sbDpaKG4rWihhLG8sciktWihlLG8sciksMCxzKX19LHdyaXRlKHQsZSl7Y29uc3QgaT1lLmhhcygic2Nyb2xsIikse2luaXRUaW1lc3RhbXA6cz0wLGRpcjpuLHByZXZEaXI6byxzY3JvbGw6cixwcmV2U2Nyb2xsOmE9MCx0b3A6bCxzdGFydDpoLHRvcE9mZnNldDp1LGhlaWdodDpkfT10O2lmKHI8MHx8cj09PWEmJml8fHRoaXMuc2hvd09uVXAmJiFpJiYhdGhpcy5pc0ZpeGVkKXJldHVybjtjb25zdCBmPURhdGUubm93KCk7aWYoKGYtcz4zMDB8fG4hPT1vKSYmKHQuaW5pdFNjcm9sbD1yLHQuaW5pdFRpbWVzdGFtcD1mKSwhKHRoaXMuc2hvd09uVXAmJiF0aGlzLmlzRml4ZWQmJk1hdGguYWJzKHQuaW5pdFNjcm9sbC1yKTw9MzAmJk1hdGguYWJzKGEtcik8PTEwKSlpZih0aGlzLmluYWN0aXZlfHxyPGh8fHRoaXMuc2hvd09uVXAmJihyPD1ofHxuPT09ImRvd24iJiZpfHxuPT09InVwIiYmIXRoaXMuaXNGaXhlZCYmcjw9dStkKSl7aWYoIXRoaXMuaXNGaXhlZCl7ZnQuaW5Qcm9ncmVzcyh0aGlzLiRlbCkmJmw+ciYmKGZ0LmNhbmNlbCh0aGlzLiRlbCksdGhpcy5oaWRlKCkpO3JldHVybn10aGlzLmlzRml4ZWQ9ITEsdGhpcy5hbmltYXRpb24mJnI+dT8oZnQuY2FuY2VsKHRoaXMuJGVsKSxmdC5vdXQodGhpcy4kZWwsdGhpcy5hbmltYXRpb24pLnRoZW4oKCk9PnRoaXMuaGlkZSgpLFQpKTp0aGlzLmhpZGUoKX1lbHNlIHRoaXMuaXNGaXhlZD90aGlzLnVwZGF0ZSgpOnRoaXMuYW5pbWF0aW9uJiZyPnU/KGZ0LmNhbmNlbCh0aGlzLiRlbCksdGhpcy5zaG93KCksZnQuaW4odGhpcy4kZWwsdGhpcy5hbmltYXRpb24pLmNhdGNoKFQpKTp0aGlzLnNob3coKX0sZXZlbnRzOlsicmVzaXplIiwic2Nyb2xsIl19XSxtZXRob2RzOntzaG93KCl7dGhpcy5pc0ZpeGVkPSEwLHRoaXMudXBkYXRlKCksdGhpcy5wbGFjZWhvbGRlci5oaWRkZW49ITF9LGhpZGUoKXt0aGlzLnNldEFjdGl2ZSghMSksTyh0aGlzLiRlbCx0aGlzLmNsc0ZpeGVkLHRoaXMuY2xzQmVsb3cpLGModGhpcy4kZWwse3Bvc2l0aW9uOiIiLHRvcDoiIix3aWR0aDoiIn0pLHRoaXMucGxhY2Vob2xkZXIuaGlkZGVuPSEwfSx1cGRhdGUoKXtsZXR7d2lkdGg6dCxzY3JvbGw6ZT0wLG92ZXJmbG93Omksb3ZlcmZsb3dTY3JvbGw6cz0wLHN0YXJ0Om4sZW5kOm8sb2Zmc2V0OnIsdG9wT2Zmc2V0OmEsaGVpZ2h0Omwsb2Zmc2V0UGFyZW50VG9wOmh9PXRoaXMuX2RhdGE7Y29uc3QgdT1uIT09MHx8ZT5uO2xldCBkPSJmaXhlZCI7ZT5vJiYocis9by1oLGQ9ImFic29sdXRlIiksaSYmKHItPXMpLGModGhpcy4kZWwse3Bvc2l0aW9uOmQsdG9wOnIrInB4Iix3aWR0aDp0fSksdGhpcy5zZXRBY3RpdmUodSksVyh0aGlzLiRlbCx0aGlzLmNsc0JlbG93LGU+YStsKSxiKHRoaXMuJGVsLHRoaXMuY2xzRml4ZWQpfSxzZXRBY3RpdmUodCl7Y29uc3QgZT10aGlzLmFjdGl2ZTt0aGlzLmFjdGl2ZT10LHQ/KE1pKHRoaXMuc2VsVGFyZ2V0LHRoaXMuY2xzSW5hY3RpdmUsdGhpcy5jbHNBY3RpdmUpLGUhPT10JiZnKHRoaXMuJGVsLCJhY3RpdmUiKSk6KE1pKHRoaXMuc2VsVGFyZ2V0LHRoaXMuY2xzQWN0aXZlLHRoaXMuY2xzSW5hY3RpdmUpLGUhPT10JiZnKHRoaXMuJGVsLCJpbmFjdGl2ZSIpKX19fTtmdW5jdGlvbiB5bih0LGUsaSxzKXtpZighdClyZXR1cm4gMDtpZihCdCh0KXx8Xyh0KSYmdC5tYXRjaCgvXi0/XGQvKSlyZXR1cm4gaStKKHQsImhlaWdodCIsZSwhMCk7e2NvbnN0IG49dD09PSEwP1AoZSk6ZHQodCxlKTtyZXR1cm4gQShuKS5ib3R0b20tKHMmJm4mJkIoZSxuKT93KGMobiwicGFkZGluZ0JvdHRvbSIpKTowKX19ZnVuY3Rpb24gJG4odCl7cmV0dXJuIHQ9PT0idHJ1ZSI/ITA6dD09PSJmYWxzZSI/ITE6dH12YXIga249e21peGluczpbU2Usdm4sRXRdLGFyZ3M6ImNvbm5lY3QiLHByb3BzOntjb25uZWN0OlN0cmluZyx0b2dnbGU6U3RyaW5nLGl0ZW1OYXY6U3RyaW5nLGFjdGl2ZTpOdW1iZXJ9LGRhdGE6e2Nvbm5lY3Q6In4udWstc3dpdGNoZXIiLHRvZ2dsZToiPiAqID4gOmZpcnN0LWNoaWxkIixpdGVtTmF2OiExLGFjdGl2ZTowLGNsczoidWstYWN0aXZlIixhdHRySXRlbToidWstc3dpdGNoZXItaXRlbSJ9LGNvbXB1dGVkOntjb25uZWN0czp7Z2V0KHQsZSl7bGV0e2Nvbm5lY3Q6aX09dDtyZXR1cm4gd2UoaSxlKX0sd2F0Y2godCl7dGhpcy5zd2lwaW5nJiZjKHQsInRvdWNoQWN0aW9uIiwicGFuLXkgcGluY2gtem9vbSIpO2NvbnN0IGU9dGhpcy5pbmRleCgpO3RoaXMuY29ubmVjdHMuZm9yRWFjaChpPT57TShpKS5mb3JFYWNoKChzLG4pPT5XKHMsdGhpcy5jbHMsbj09PWUpKSx0aGlzLmxhenlsb2FkKHRoaXMuJGVsLE0oaSkpfSl9LGltbWVkaWF0ZTohMH0sdG9nZ2xlczp7Z2V0KHQsZSl7bGV0e3RvZ2dsZTppfT10O3JldHVybiBEKGksZSkuZmlsdGVyKHM9PiFMKHMsIi51ay1kaXNhYmxlZCAqLCAudWstZGlzYWJsZWQsIFtkaXNhYmxlZF0iKSl9LHdhdGNoKHQpe2NvbnN0IGU9dGhpcy5pbmRleCgpO3RoaXMuc2hvdyh+ZT9lOnRbdGhpcy5hY3RpdmVdfHx0WzBdKX0saW1tZWRpYXRlOiEwfSxjaGlsZHJlbigpe3JldHVybiBNKHRoaXMuJGVsKS5maWx0ZXIodD0+dGhpcy50b2dnbGVzLnNvbWUoZT0+QihlLHQpKSl9LHN3aXBlVGFyZ2V0KCl7cmV0dXJuIHRoaXMuY29ubmVjdHN9fSxjb25uZWN0ZWQoKXtOaSgoKT0+dGhpcy4kZW1pdCgpKX0sZXZlbnRzOlt7bmFtZToiY2xpY2siLGRlbGVnYXRlKCl7cmV0dXJuIHRoaXMudG9nZ2xlfSxoYW5kbGVyKHQpe3QucHJldmVudERlZmF1bHQoKSx0aGlzLnNob3codC5jdXJyZW50KX19LHtuYW1lOiJjbGljayIsZWwoKXtyZXR1cm4gdGhpcy5jb25uZWN0cy5jb25jYXQodGhpcy5pdGVtTmF2P3dlKHRoaXMuaXRlbU5hdix0aGlzLiRlbCk6W10pfSxkZWxlZ2F0ZSgpe3JldHVybiJbIit0aGlzLmF0dHJJdGVtKyJdLFtkYXRhLSIrdGhpcy5hdHRySXRlbSsiXSJ9LGhhbmRsZXIodCl7dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2hvdyhhdCh0LmN1cnJlbnQsdGhpcy5hdHRySXRlbSkpfX0se25hbWU6InN3aXBlUmlnaHQgc3dpcGVMZWZ0IixmaWx0ZXIoKXtyZXR1cm4gdGhpcy5zd2lwaW5nfSxlbCgpe3JldHVybiB0aGlzLmNvbm5lY3RzfSxoYW5kbGVyKHQpe2xldHt0eXBlOmV9PXQ7dGhpcy5zaG93KFh0KGUsIkxlZnQiKT8ibmV4dCI6InByZXZpb3VzIil9fV0sbWV0aG9kczp7aW5kZXgoKXtyZXR1cm4gYnQodGhpcy5jaGlsZHJlbix0PT5JKHQsdGhpcy5jbHMpKX0sc2hvdyh0KXtjb25zdCBlPXRoaXMuaW5kZXgoKSxpPVF0KHQsdGhpcy50b2dnbGVzLGUpLHM9UXQodGhpcy5jaGlsZHJlbltpXSxNKHRoaXMuJGVsKSk7TSh0aGlzLiRlbCkuZm9yRWFjaCgobyxyKT0+e1cobyx0aGlzLmNscyxzPT09cikseSh0aGlzLnRvZ2dsZXNbcl0sImFyaWEtZXhwYW5kZWQiLHM9PT1yKX0pO2NvbnN0IG49ZT49MCYmZSE9PWk7dGhpcy5jb25uZWN0cy5mb3JFYWNoKGFzeW5jIG89PntsZXR7Y2hpbGRyZW46cn09bzthd2FpdCB0aGlzLnRvZ2dsZUVsZW1lbnQoJChyKS5maWx0ZXIoYT0+SShhLHRoaXMuY2xzKSksITEsbiksYXdhaXQgdGhpcy50b2dnbGVFbGVtZW50KHJbc10sITAsbil9KX19fSxFYT17bWl4aW5zOltudF0sZXh0ZW5kczprbixwcm9wczp7bWVkaWE6Qm9vbGVhbn0sZGF0YTp7bWVkaWE6OTYwLGF0dHJJdGVtOiJ1ay10YWItaXRlbSJ9LGNvbm5lY3RlZCgpe2NvbnN0IHQ9SSh0aGlzLiRlbCwidWstdGFiLWxlZnQiKT8idWstdGFiLWxlZnQiOkkodGhpcy4kZWwsInVrLXRhYi1yaWdodCIpPyJ1ay10YWItcmlnaHQiOiExO3QmJnRoaXMuJGNyZWF0ZSgidG9nZ2xlIix0aGlzLiRlbCx7Y2xzOnQsbW9kZToibWVkaWEiLG1lZGlhOnRoaXMubWVkaWF9KX19O2NvbnN0IE9hPTMyO3ZhciBfYT17bWl4aW5zOltTZSxsaSxFdF0sYXJnczoidGFyZ2V0Iixwcm9wczp7aHJlZjpTdHJpbmcsdGFyZ2V0Om51bGwsbW9kZToibGlzdCIscXVldWVkOkJvb2xlYW59LGRhdGE6e2hyZWY6ITEsdGFyZ2V0OiExLG1vZGU6ImNsaWNrIixxdWV1ZWQ6ITB9LGNvbXB1dGVkOnt0YXJnZXQ6e2dldCh0LGUpe2xldHtocmVmOmksdGFyZ2V0OnN9PXQ7cmV0dXJuIHM9d2Uoc3x8aSxlKSxzLmxlbmd0aCYmc3x8W2VdfSx3YXRjaCgpe3RoaXMudXBkYXRlQXJpYSgpLHRoaXMubGF6eWxvYWQodGhpcy4kZWwsdGhpcy50YXJnZXQpfSxpbW1lZGlhdGU6ITB9fSxjb25uZWN0ZWQoKXshcCh0aGlzLm1vZGUsIm1lZGlhIikmJiFqZSh0aGlzLiRlbCkmJnkodGhpcy4kZWwsInRhYmluZGV4IiwiMCIpLE5pKCgpPT50aGlzLiRlbWl0KCkpfSxldmVudHM6W3tuYW1lOmd0LGZpbHRlcigpe3JldHVybiBwKHRoaXMubW9kZSwiaG92ZXIiKX0saGFuZGxlcih0KXt0aGlzLl9wcmV2ZW50Q2xpY2s9bnVsbCwhKCEkdCh0KXx8dGhpcy5fc2hvd1N0YXRlKSYmKGcodGhpcy4kZWwsImZvY3VzIiksTihkb2N1bWVudCxndCwoKT0+Zyh0aGlzLiRlbCwiYmx1ciIpLCEwLGU9PiFCKGUudGFyZ2V0LHRoaXMuJGVsKSkscCh0aGlzLm1vZGUsImNsaWNrIikmJih0aGlzLl9wcmV2ZW50Q2xpY2s9ITApKX19LHtuYW1lOmp0KyIgIituZSsiIGZvY3VzIGJsdXIiLGZpbHRlcigpe3JldHVybiBwKHRoaXMubW9kZSwiaG92ZXIiKX0saGFuZGxlcih0KXtpZigkdCh0KSlyZXR1cm47Y29uc3QgZT1wKFtqdCwiZm9jdXMiXSx0LnR5cGUpLGk9eSh0aGlzLiRlbCwiYXJpYS1leHBhbmRlZCIpO2lmKCEoIWUmJih0LnR5cGU9PT1uZSYmTCh0aGlzLiRlbCwiOmZvY3VzIil8fHQudHlwZT09PSJibHVyIiYmTCh0aGlzLiRlbCwiOmhvdmVyIikpKSl7aWYodGhpcy5fc2hvd1N0YXRlJiZlJiZpIT09dGhpcy5fc2hvd1N0YXRlKXtlfHwodGhpcy5fc2hvd1N0YXRlPW51bGwpO3JldHVybn10aGlzLl9zaG93U3RhdGU9ZT9pOm51bGwsdGhpcy50b2dnbGUoInRvZ2dsZSIrKGU/InNob3ciOiJoaWRlIikpfX19LHtuYW1lOiJrZXlkb3duIixmaWx0ZXIoKXtyZXR1cm4gcCh0aGlzLm1vZGUsImNsaWNrIikmJiFwdCh0aGlzLiRlbCwiaW5wdXQiKX0saGFuZGxlcih0KXt0LmtleUNvZGU9PT1PYSYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLiRlbC5jbGljaygpKX19LHtuYW1lOiJjbGljayIsZmlsdGVyKCl7cmV0dXJuWyJjbGljayIsImhvdmVyIl0uc29tZSh0PT5wKHRoaXMubW9kZSx0KSl9LGhhbmRsZXIodCl7bGV0IGU7KHRoaXMuX3ByZXZlbnRDbGlja3x8aXQodC50YXJnZXQsJ2FbaHJlZj0iIyJdLCBhW2hyZWY9IiJdJyl8fChlPWl0KHQudGFyZ2V0LCJhW2hyZWZdIikpJiYoeSh0aGlzLiRlbCwiYXJpYS1leHBhbmRlZCIpIT09InRydWUifHxlLmhhc2gmJkwodGhpcy50YXJnZXQsZS5oYXNoKSkpJiZ0LnByZXZlbnREZWZhdWx0KCksIXRoaXMuX3ByZXZlbnRDbGljayYmcCh0aGlzLm1vZGUsImNsaWNrIikmJnRoaXMudG9nZ2xlKCl9fSx7bmFtZToiaGlkZSBzaG93IixzZWxmOiEwLGVsKCl7cmV0dXJuIHRoaXMudGFyZ2V0fSxoYW5kbGVyKHQpe2xldHt0eXBlOmV9PXQ7dGhpcy51cGRhdGVBcmlhKGU9PT0ic2hvdyIpfX0se25hbWU6Im1lZGlhY2hhbmdlIixmaWx0ZXIoKXtyZXR1cm4gcCh0aGlzLm1vZGUsIm1lZGlhIil9LGVsKCl7cmV0dXJuIHRoaXMudGFyZ2V0fSxoYW5kbGVyKHQsZSl7ZS5tYXRjaGVzXnRoaXMuaXNUb2dnbGVkKHRoaXMudGFyZ2V0KSYmdGhpcy50b2dnbGUoKX19XSxtZXRob2RzOnthc3luYyB0b2dnbGUodCl7aWYoIWcodGhpcy50YXJnZXQsdHx8InRvZ2dsZSIsW3RoaXNdKSlyZXR1cm47aWYoIXRoaXMucXVldWVkKXJldHVybiB0aGlzLnRvZ2dsZUVsZW1lbnQodGhpcy50YXJnZXQpO2NvbnN0IGU9dGhpcy50YXJnZXQuZmlsdGVyKHM9Pkkocyx0aGlzLmNsc0xlYXZlKSk7aWYoZS5sZW5ndGgpe2Zvcihjb25zdCBzIG9mIHRoaXMudGFyZ2V0KXtjb25zdCBuPXAoZSxzKTt0aGlzLnRvZ2dsZUVsZW1lbnQocyxuLG4pfXJldHVybn1jb25zdCBpPXRoaXMudGFyZ2V0LmZpbHRlcih0aGlzLmlzVG9nZ2xlZCk7YXdhaXQgdGhpcy50b2dnbGVFbGVtZW50KGksITEpLGF3YWl0IHRoaXMudG9nZ2xlRWxlbWVudCh0aGlzLnRhcmdldC5maWx0ZXIocz0+IXAoaSxzKSksITApfSx1cGRhdGVBcmlhKHQpe3AodGhpcy5tb2RlLCJtZWRpYSIpfHx5KHRoaXMuJGVsLCJhcmlhLWV4cGFuZGVkIixOZSh0KT90OnRoaXMuaXNUb2dnbGVkKHRoaXMudGFyZ2V0KSl9fX0sQmE9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQWNjb3JkaW9uOkpzLEFsZXJ0OmxyLENvdmVyOmNyLERyb3A6c24sRHJvcGRvd246c24sRm9ybUN1c3RvbTptcixHcmlkOnhyLEhlaWdodE1hdGNoOlNyLEhlaWdodFZpZXdwb3J0OklyLEljb246VWksSW1nOm9hLExlYWRlcjpmYSxNYXJnaW46bm4sTW9kYWw6cGEsTmF2Om1hLE5hdmJhcjp2YSxPZmZjYW52YXM6YmEsT3ZlcmZsb3dBdXRvOiRhLFJlc3BvbnNpdmU6a2EsU2Nyb2xsOlNhLFNjcm9sbHNweTpJYSxTY3JvbGxzcHlOYXY6UGEsU3RpY2t5OkFhLFN2ZzphbixTd2l0Y2hlcjprbixUYWI6RWEsVG9nZ2xlOl9hLFZpZGVvOlpzLENsb3NlOlVyLFNwaW5uZXI6dGEsTmF2UGFyZW50SWNvbjpacixTbGlkZW5hdk5leHQ6Zm4sU2xpZGVuYXZQcmV2aW91czpmbixTZWFyY2hJY29uOlFyLE1hcmtlcjp1dCxOYXZiYXJQYXJlbnRJY29uOnV0LE5hdmJhclRvZ2dsZUljb246dXQsT3ZlcmxheUljb246dXQsUGFnaW5hdGlvbk5leHQ6dXQsUGFnaW5hdGlvblByZXZpb3VzOnV0LFRvdG9wOnV0fSk7eXQoQmEsKHQsZSk9PnN0LmNvbXBvbmVudChlLHQpKSxvcihzdCk7Y29uc3QgTWE9WyJkYXlzIiwiaG91cnMiLCJtaW51dGVzIiwic2Vjb25kcyJdO3ZhciBEYT17bWl4aW5zOltudF0scHJvcHM6e2RhdGU6U3RyaW5nLGNsc1dyYXBwZXI6U3RyaW5nfSxkYXRhOntkYXRlOiIiLGNsc1dyYXBwZXI6Ii51ay1jb3VudGRvd24tJXVuaXQlIn0sY29ubmVjdGVkKCl7dGhpcy5kYXRlPURhdGUucGFyc2UodGhpcy4kcHJvcHMuZGF0ZSksdGhpcy5zdGFydCgpfSxkaXNjb25uZWN0ZWQoKXt0aGlzLnN0b3AoKX0sZXZlbnRzOlt7bmFtZToidmlzaWJpbGl0eWNoYW5nZSIsZWwoKXtyZXR1cm4gZG9jdW1lbnR9LGhhbmRsZXIoKXtkb2N1bWVudC5oaWRkZW4/dGhpcy5zdG9wKCk6dGhpcy5zdGFydCgpfX1dLG1ldGhvZHM6e3N0YXJ0KCl7dGhpcy5zdG9wKCksdGhpcy51cGRhdGUoKSx0aGlzLnRpbWVyPXNldEludGVydmFsKHRoaXMudXBkYXRlLDFlMyl9LHN0b3AoKXtjbGVhckludGVydmFsKHRoaXMudGltZXIpfSx1cGRhdGUoKXtjb25zdCB0PU5hKHRoaXMuZGF0ZSk7KCF0aGlzLmRhdGV8fHQudG90YWw8PTApJiYodGhpcy5zdG9wKCksdC5kYXlzPXQuaG91cnM9dC5taW51dGVzPXQuc2Vjb25kcz0wKTtmb3IoY29uc3QgZSBvZiBNYSl7Y29uc3QgaT12KHRoaXMuY2xzV3JhcHBlci5yZXBsYWNlKCIldW5pdCUiLGUpLHRoaXMuJGVsKTtpZighaSljb250aW51ZTtsZXQgcz1TdHJpbmcoTWF0aC50cnVuYyh0W2VdKSk7cz1zLmxlbmd0aDwyPyIwIitzOnMsaS50ZXh0Q29udGVudCE9PXMmJihzPXMuc3BsaXQoIiIpLHMubGVuZ3RoIT09aS5jaGlsZHJlbi5sZW5ndGgmJlB0KGkscy5tYXAoKCk9PiI8c3Bhbj48L3NwYW4+Iikuam9pbigiIikpLHMuZm9yRWFjaCgobixvKT0+aS5jaGlsZHJlbltvXS50ZXh0Q29udGVudD1uKSl9fX19O2Z1bmN0aW9uIE5hKHQpe2NvbnN0IGU9dC1EYXRlLm5vdygpO3JldHVybnt0b3RhbDplLHNlY29uZHM6ZS8xZTMlNjAsbWludXRlczplLzFlMy82MCU2MCxob3VyczplLzFlMy82MC82MCUyNCxkYXlzOmUvMWUzLzYwLzYwLzI0fX1jb25zdCBlcz0idWstdHJhbnNpdGlvbi1sZWF2ZSIsaXM9InVrLXRyYW5zaXRpb24tZW50ZXIiO2Z1bmN0aW9uIFNuKHQsZSxpLHMpe3M9PT12b2lkIDAmJihzPTApO2NvbnN0IG49aGkoZSwhMCksbz17b3BhY2l0eToxfSxyPXtvcGFjaXR5OjB9LGE9dT0+KCk9Pm49PT1oaShlKT91KCk6UHJvbWlzZS5yZWplY3QoKSxsPWEoKCk9PihiKGUsZXMpLFByb21pc2UuYWxsKENuKGUpLm1hcCgodSxkKT0+bmV3IFByb21pc2UoZj0+c2V0VGltZW91dCgoKT0+Uy5zdGFydCh1LHIsaS8yLCJlYXNlIikudGhlbihmKSxkKnMpKSkpLnRoZW4oKCk9Pk8oZSxlcykpKSksaD1hKCgpPT57Y29uc3QgdT1HKGUpO3JldHVybiBiKGUsaXMpLHQoKSxjKE0oZSkse29wYWNpdHk6MH0pLG5ldyBQcm9taXNlKGQ9PnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2NvbnN0IGY9TShlKSxtPUcoZSk7YyhlLCJhbGlnbkNvbnRlbnQiLCJmbGV4LXN0YXJ0IiksRyhlLHUpO2NvbnN0IEM9Q24oZSk7YyhmLHIpO2NvbnN0IEU9Qy5tYXAoKFUsRik9Pm5ldyBQcm9taXNlKGNlPT5zZXRUaW1lb3V0KCgpPT5TLnN0YXJ0KFUsbyxpLzIsImVhc2UiKS50aGVuKGNlKSxGKnMpKSk7dSE9PW0mJkUucHVzaChTLnN0YXJ0KGUse2hlaWdodDptfSxpLzIrQy5sZW5ndGgqcywiZWFzZSIpKSxQcm9taXNlLmFsbChFKS50aGVuKCgpPT57TyhlLGlzKSxuPT09aGkoZSkmJihjKGUse2hlaWdodDoiIixhbGlnbkNvbnRlbnQ6IiJ9KSxjKGYse29wYWNpdHk6IiJ9KSxkZWxldGUgZS5kYXRhc2V0LnRyYW5zaXRpb24pLGQoKX0pfSkpfSk7cmV0dXJuIEkoZSxlcyk/VG4oZSkudGhlbihoKTpJKGUsaXMpP1RuKGUpLnRoZW4obCkudGhlbihoKTpsKCkudGhlbihoKX1mdW5jdGlvbiBoaSh0LGUpe3JldHVybiBlJiYodC5kYXRhc2V0LnRyYW5zaXRpb249MStoaSh0KSksQ3QodC5kYXRhc2V0LnRyYW5zaXRpb24pfHwwfWZ1bmN0aW9uIFRuKHQpe3JldHVybiBQcm9taXNlLmFsbChNKHQpLmZpbHRlcihTLmluUHJvZ3Jlc3MpLm1hcChlPT5uZXcgUHJvbWlzZShpPT5OKGUsInRyYW5zaXRpb25lbmQgdHJhbnNpdGlvbmNhbmNlbGVkIixpKSkpKX1mdW5jdGlvbiBDbih0KXtyZXR1cm4gUWkoTSh0KSkucmVkdWNlKChlLGkpPT5lLmNvbmNhdCh6ZShpLmZpbHRlcihzPT5VZShzKSksIm9mZnNldExlZnQiKSksW10pfWZ1bmN0aW9uIHphKHQsZSxpKXtyZXR1cm4gbmV3IFByb21pc2Uocz0+cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57bGV0IG49TShlKTtjb25zdCBvPW4ubWFwKGE9PkluKGEsITApKSxyPWMoZSxbImhlaWdodCIsInBhZGRpbmciXSk7Uy5jYW5jZWwoZSksbi5mb3JFYWNoKFMuY2FuY2VsKSxQbihlKSx0KCksbj1uLmNvbmNhdChNKGUpLmZpbHRlcihhPT4hcChuLGEpKSksUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3ouZmx1c2goKTtjb25zdCBhPWMoZSxbImhlaWdodCIsInBhZGRpbmciXSksW2wsaF09SGEoZSxuLG8pO24uZm9yRWFjaCgodSxkKT0+aFtkXSYmYyh1LGhbZF0pKSxjKGUse2Rpc3BsYXk6ImJsb2NrIiwuLi5yfSkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57Y29uc3QgdT1uLm1hcCgoZCxmKT0+UChkKT09PWUmJlMuc3RhcnQoZCxsW2ZdLGksImVhc2UiKSkuY29uY2F0KFMuc3RhcnQoZSxhLGksImVhc2UiKSk7UHJvbWlzZS5hbGwodSkudGhlbigoKT0+e24uZm9yRWFjaCgoZCxmKT0+UChkKT09PWUmJmMoZCwiZGlzcGxheSIsbFtmXS5vcGFjaXR5PT09MD8ibm9uZSI6IiIpKSxQbihlKX0sVCkudGhlbihzKX0pfSl9KSl9ZnVuY3Rpb24gSW4odCxlKXtjb25zdCBpPWModCwiekluZGV4Iik7cmV0dXJuIFYodCk/e2Rpc3BsYXk6IiIsb3BhY2l0eTplP2ModCwib3BhY2l0eSIpOiIwIixwb2ludGVyRXZlbnRzOiJub25lIixwb3NpdGlvbjoiYWJzb2x1dGUiLHpJbmRleDppPT09ImF1dG8iP3RlKHQpOmksLi4uQW4odCl9OiExfWZ1bmN0aW9uIEhhKHQsZSxpKXtjb25zdCBzPWUubWFwKChvLHIpPT5QKG8pJiZyIGluIGk/aVtyXT9WKG8pP0FuKG8pOntvcGFjaXR5OjB9OntvcGFjaXR5OlYobyk/MTowfTohMSksbj1zLm1hcCgobyxyKT0+e2NvbnN0IGE9UChlW3JdKT09PXQmJihpW3JdfHxJbihlW3JdKSk7aWYoIWEpcmV0dXJuITE7aWYoIW8pZGVsZXRlIGEub3BhY2l0eTtlbHNlIGlmKCEoIm9wYWNpdHkiaW4gbykpe2NvbnN0e29wYWNpdHk6bH09YTtsJTE/by5vcGFjaXR5PTE6ZGVsZXRlIGEub3BhY2l0eX1yZXR1cm4gYX0pO3JldHVybltzLG5dfWZ1bmN0aW9uIFBuKHQpe2ModC5jaGlsZHJlbix7aGVpZ2h0OiIiLGxlZnQ6IiIsb3BhY2l0eToiIixwb2ludGVyRXZlbnRzOiIiLHBvc2l0aW9uOiIiLHRvcDoiIixtYXJnaW5Ub3A6IiIsbWFyZ2luTGVmdDoiIix0cmFuc2Zvcm06IiIsd2lkdGg6IiIsekluZGV4OiIifSksYyh0LHtoZWlnaHQ6IiIsZGlzcGxheToiIixwYWRkaW5nOiIifSl9ZnVuY3Rpb24gQW4odCl7Y29uc3R7aGVpZ2h0OmUsd2lkdGg6aX09QSh0KSx7dG9wOnMsbGVmdDpufT1SZSh0KSx7bWFyZ2luTGVmdDpvLG1hcmdpblRvcDpyfT1jKHQsWyJtYXJnaW5Ub3AiLCJtYXJnaW5MZWZ0Il0pO3JldHVybnt0b3A6cyxsZWZ0Om4saGVpZ2h0OmUsd2lkdGg6aSxtYXJnaW5MZWZ0Om8sbWFyZ2luVG9wOnIsdHJhbnNmb3JtOiIifX12YXIgRW49e3Byb3BzOntkdXJhdGlvbjpOdW1iZXIsYW5pbWF0aW9uOkJvb2xlYW59LGRhdGE6e2R1cmF0aW9uOjE1MCxhbmltYXRpb246InNsaWRlIn0sbWV0aG9kczp7YW5pbWF0ZSh0LGUpe2U9PT12b2lkIDAmJihlPXRoaXMuJGVsKTtjb25zdCBpPXRoaXMuYW5pbWF0aW9uO3JldHVybihpPT09ImZhZGUiP1NuOmk9PT0iZGVsYXllZC1mYWRlIj9mdW5jdGlvbigpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLG89bmV3IEFycmF5KG4pLHI9MDtyPG47cisrKW9bcl09YXJndW1lbnRzW3JdO3JldHVybiBTbiguLi5vLDQwKX06aT96YTooKT0+KHQoKSxQcm9taXNlLnJlc29sdmUoKSkpKHQsZSx0aGlzLmR1cmF0aW9uKS50aGVuKCgpPT50aGlzLiR1cGRhdGUoZSwicmVzaXplIiksVCl9fX0sTGE9e21peGluczpbRW5dLGFyZ3M6InRhcmdldCIscHJvcHM6e3RhcmdldDpCb29sZWFuLHNlbEFjdGl2ZTpCb29sZWFufSxkYXRhOnt0YXJnZXQ6bnVsbCxzZWxBY3RpdmU6ITEsYXR0ckl0ZW06InVrLWZpbHRlci1jb250cm9sIixjbHM6InVrLWFjdGl2ZSIsZHVyYXRpb246MjUwfSxjb21wdXRlZDp7dG9nZ2xlczp7Z2V0KHQsZSl7bGV0e2F0dHJJdGVtOml9PXQ7cmV0dXJuIEQoIlsiK2krIl0sW2RhdGEtIitpKyJdIixlKX0sd2F0Y2goKXtpZih0aGlzLnVwZGF0ZVN0YXRlKCksdGhpcy5zZWxBY3RpdmUhPT0hMSl7Y29uc3QgdD1EKHRoaXMuc2VsQWN0aXZlLHRoaXMuJGVsKTt0aGlzLnRvZ2dsZXMuZm9yRWFjaChlPT5XKGUsdGhpcy5jbHMscCh0LGUpKSl9fSxpbW1lZGlhdGU6ITB9LGNoaWxkcmVuOntnZXQodCxlKXtsZXR7dGFyZ2V0Oml9PXQ7cmV0dXJuIEQoaSsiID4gKiIsZSl9LHdhdGNoKHQsZSl7ZSYmIVJhKHQsZSkmJnRoaXMudXBkYXRlU3RhdGUoKX0saW1tZWRpYXRlOiEwfX0sZXZlbnRzOlt7bmFtZToiY2xpY2siLGRlbGVnYXRlKCl7cmV0dXJuIlsiK3RoaXMuYXR0ckl0ZW0rIl0sW2RhdGEtIit0aGlzLmF0dHJJdGVtKyJdIn0saGFuZGxlcih0KXt0LnByZXZlbnREZWZhdWx0KCksdGhpcy5hcHBseSh0LmN1cnJlbnQpfX1dLG1ldGhvZHM6e2FwcGx5KHQpe2NvbnN0IGU9dGhpcy5nZXRTdGF0ZSgpLGk9X24odCx0aGlzLmF0dHJJdGVtLHRoaXMuZ2V0U3RhdGUoKSk7RmEoZSxpKXx8dGhpcy5zZXRTdGF0ZShpKX0sZ2V0U3RhdGUoKXtyZXR1cm4gdGhpcy50b2dnbGVzLmZpbHRlcih0PT5JKHQsdGhpcy5jbHMpKS5yZWR1Y2UoKHQsZSk9Pl9uKGUsdGhpcy5hdHRySXRlbSx0KSx7ZmlsdGVyOnsiIjoiIn0sc29ydDpbXX0pfSxhc3luYyBzZXRTdGF0ZSh0LGUpe2U9PT12b2lkIDAmJihlPSEwKSx0PXtmaWx0ZXI6eyIiOiIifSxzb3J0OltdLC4uLnR9LGcodGhpcy4kZWwsImJlZm9yZUZpbHRlciIsW3RoaXMsdF0pLHRoaXMudG9nZ2xlcy5mb3JFYWNoKGk9PlcoaSx0aGlzLmNscywhIWphKGksdGhpcy5hdHRySXRlbSx0KSkpLGF3YWl0IFByb21pc2UuYWxsKEQodGhpcy50YXJnZXQsdGhpcy4kZWwpLm1hcChpPT57Y29uc3Qgcz0oKT0+e1dhKHQsaSxNKGkpKSx0aGlzLiR1cGRhdGUodGhpcy4kZWwpfTtyZXR1cm4gZT90aGlzLmFuaW1hdGUocyxpKTpzKCl9KSksZyh0aGlzLiRlbCwiYWZ0ZXJGaWx0ZXIiLFt0aGlzXSl9LHVwZGF0ZVN0YXRlKCl7ei53cml0ZSgoKT0+dGhpcy5zZXRTdGF0ZSh0aGlzLmdldFN0YXRlKCksITEpKX19fTtmdW5jdGlvbiBPbih0LGUpe3JldHVybiBrZShhdCh0LGUpLFsiZmlsdGVyIl0pfWZ1bmN0aW9uIEZhKHQsZSl7cmV0dXJuWyJmaWx0ZXIiLCJzb3J0Il0uZXZlcnkoaT0+cGUodFtpXSxlW2ldKSl9ZnVuY3Rpb24gV2EodCxlLGkpe2NvbnN0IHM9cWEodCk7aS5mb3JFYWNoKHI9PmMociwiZGlzcGxheSIscyYmIUwocixzKT8ibm9uZSI6IiIpKTtjb25zdFtuLG9dPXQuc29ydDtpZihuKXtjb25zdCByPVZhKGksbixvKTtwZShyLGkpfHxqKGUscil9fWZ1bmN0aW9uIF9uKHQsZSxpKXtjb25zdCBzPU9uKHQsZSkse2ZpbHRlcjpuLGdyb3VwOm8sc29ydDpyLG9yZGVyOmE9ImFzYyJ9PXM7cmV0dXJuKG58fFIocikpJiYobz9uPyhkZWxldGUgaS5maWx0ZXJbIiJdLGkuZmlsdGVyW29dPW4pOihkZWxldGUgaS5maWx0ZXJbb10sKGZlKGkuZmlsdGVyKXx8IiJpbiBpLmZpbHRlcikmJihpLmZpbHRlcj17IiI6bnx8IiJ9KSk6aS5maWx0ZXI9eyIiOm58fCIifSksUihyKXx8KGkuc29ydD1bcixhXSksaX1mdW5jdGlvbiBqYSh0LGUsaSl7bGV0e2ZpbHRlcjpzPXsiIjoiIn0sc29ydDpbbixvXX09aTtjb25zdHtmaWx0ZXI6cj0iIixncm91cDphPSIiLHNvcnQ6bCxvcmRlcjpoPSJhc2MifT1Pbih0LGUpO3JldHVybiBSKGwpP2EgaW4gcyYmcj09PXNbYV18fCFyJiZhJiYhKGEgaW4gcykmJiFzWyIiXTpuPT09bCYmbz09PWh9ZnVuY3Rpb24gUmEodCxlKXtyZXR1cm4gdC5sZW5ndGg9PT1lLmxlbmd0aCYmdC5ldmVyeShpPT5lLmluY2x1ZGVzKGkpKX1mdW5jdGlvbiBxYSh0KXtsZXR7ZmlsdGVyOmV9PXQsaT0iIjtyZXR1cm4geXQoZSxzPT5pKz1zfHwiIiksaX1mdW5jdGlvbiBWYSh0LGUsaSl7cmV0dXJuWy4uLnRdLnNvcnQoKHMsbik9PmF0KHMsZSkubG9jYWxlQ29tcGFyZShhdChuLGUpLHZvaWQgMCx7bnVtZXJpYzohMH0pKihpPT09ImFzYyJ8fC0xKSl9dmFyIHNzPXtzbGlkZTp7c2hvdyh0KXtyZXR1cm5be3RyYW5zZm9ybTpIKHQqLTEwMCl9LHt0cmFuc2Zvcm06SCgpfV19LHBlcmNlbnQodCl7cmV0dXJuIFBlKHQpfSx0cmFuc2xhdGUodCxlKXtyZXR1cm5be3RyYW5zZm9ybTpIKGUqLTEwMCp0KX0se3RyYW5zZm9ybTpIKGUqMTAwKigxLXQpKX1dfX19O2Z1bmN0aW9uIFBlKHQpe3JldHVybiBNYXRoLmFicyhjKHQsInRyYW5zZm9ybSIpLnNwbGl0KCIsIilbNF0vdC5vZmZzZXRXaWR0aCl8fDB9ZnVuY3Rpb24gSCh0LGUpe3JldHVybiB0PT09dm9pZCAwJiYodD0wKSxlPT09dm9pZCAwJiYoZT0iJSIpLHQrPXQ/ZToiIiwidHJhbnNsYXRlM2QoIit0KyIsIDAsIDApIn1mdW5jdGlvbiBsZSh0KXtyZXR1cm4ic2NhbGUzZCgiK3QrIiwgIit0KyIsIDEpIn12YXIgQm49ey4uLnNzLGZhZGU6e3Nob3coKXtyZXR1cm5be29wYWNpdHk6MH0se29wYWNpdHk6MX1dfSxwZXJjZW50KHQpe3JldHVybiAxLWModCwib3BhY2l0eSIpfSx0cmFuc2xhdGUodCl7cmV0dXJuW3tvcGFjaXR5OjEtdH0se29wYWNpdHk6dH1dfX0sc2NhbGU6e3Nob3coKXtyZXR1cm5be29wYWNpdHk6MCx0cmFuc2Zvcm06bGUoMS0uMil9LHtvcGFjaXR5OjEsdHJhbnNmb3JtOmxlKDEpfV19LHBlcmNlbnQodCl7cmV0dXJuIDEtYyh0LCJvcGFjaXR5Iil9LHRyYW5zbGF0ZSh0KXtyZXR1cm5be29wYWNpdHk6MS10LHRyYW5zZm9ybTpsZSgxLS4yKnQpfSx7b3BhY2l0eTp0LHRyYW5zZm9ybTpsZSgxLS4yKy4yKnQpfV19fX07ZnVuY3Rpb24gWWEodCxlLGkscyl7bGV0e2FuaW1hdGlvbjpuLGVhc2luZzpvfT1zO2NvbnN0e3BlcmNlbnQ6cix0cmFuc2xhdGU6YSxzaG93Omw9VH09bixoPWwoaSksdT1uZXcgRmU7cmV0dXJue2RpcjppLHNob3coZCxmLG0pe2Y9PT12b2lkIDAmJihmPTApO2NvbnN0IEM9bT8ibGluZWFyIjpvO3JldHVybiBkLT1NYXRoLnJvdW5kKGQqWihmLC0xLDEpKSx0aGlzLnRyYW5zbGF0ZShmKSxjaShlLCJpdGVtaW4iLHtwZXJjZW50OmYsZHVyYXRpb246ZCx0aW1pbmc6QyxkaXI6aX0pLGNpKHQsIml0ZW1vdXQiLHtwZXJjZW50OjEtZixkdXJhdGlvbjpkLHRpbWluZzpDLGRpcjppfSksUHJvbWlzZS5hbGwoW1Muc3RhcnQoZSxoWzFdLGQsQyksUy5zdGFydCh0LGhbMF0sZCxDKV0pLnRoZW4oKCk9Pnt0aGlzLnJlc2V0KCksdS5yZXNvbHZlKCl9LFQpLHUucHJvbWlzZX0sY2FuY2VsKCl7Uy5jYW5jZWwoW2UsdF0pfSxyZXNldCgpe2Zvcihjb25zdCBkIGluIGhbMF0pYyhbZSx0XSxkLCIiKX0sZm9yd2FyZChkLGYpe3JldHVybiBmPT09dm9pZCAwJiYoZj10aGlzLnBlcmNlbnQoKSksUy5jYW5jZWwoW2UsdF0pLHRoaXMuc2hvdyhkLGYsITApfSx0cmFuc2xhdGUoZCl7dGhpcy5yZXNldCgpO2NvbnN0IGY9YShkLGkpO2MoZSxmWzFdKSxjKHQsZlswXSksY2koZSwiaXRlbXRyYW5zbGF0ZWluIix7cGVyY2VudDpkLGRpcjppfSksY2kodCwiaXRlbXRyYW5zbGF0ZW91dCIse3BlcmNlbnQ6MS1kLGRpcjppfSl9LHBlcmNlbnQoKXtyZXR1cm4gcih0fHxlLGUsaSl9LGdldERpc3RhbmNlKCl7cmV0dXJuIHQ9PW51bGw/dm9pZCAwOnQub2Zmc2V0V2lkdGh9fX1mdW5jdGlvbiBjaSh0LGUsaSl7Zyh0LE50KGUsITEsITEsaSkpfXZhciBYYT17cHJvcHM6e2F1dG9wbGF5OkJvb2xlYW4sYXV0b3BsYXlJbnRlcnZhbDpOdW1iZXIscGF1c2VPbkhvdmVyOkJvb2xlYW59LGRhdGE6e2F1dG9wbGF5OiExLGF1dG9wbGF5SW50ZXJ2YWw6N2UzLHBhdXNlT25Ib3ZlcjohMH0sY29ubmVjdGVkKCl7dGhpcy5hdXRvcGxheSYmdGhpcy5zdGFydEF1dG9wbGF5KCl9LGRpc2Nvbm5lY3RlZCgpe3RoaXMuc3RvcEF1dG9wbGF5KCl9LHVwZGF0ZSgpe3kodGhpcy5zbGlkZXMsInRhYmluZGV4IiwiLTEiKX0sZXZlbnRzOlt7bmFtZToidmlzaWJpbGl0eWNoYW5nZSIsZWwoKXtyZXR1cm4gZG9jdW1lbnR9LGZpbHRlcigpe3JldHVybiB0aGlzLmF1dG9wbGF5fSxoYW5kbGVyKCl7ZG9jdW1lbnQuaGlkZGVuP3RoaXMuc3RvcEF1dG9wbGF5KCk6dGhpcy5zdGFydEF1dG9wbGF5KCl9fV0sbWV0aG9kczp7c3RhcnRBdXRvcGxheSgpe3RoaXMuc3RvcEF1dG9wbGF5KCksdGhpcy5pbnRlcnZhbD1zZXRJbnRlcnZhbCgoKT0+KCF0aGlzLmRyYWdnYWJsZXx8IXYoIjpmb2N1cyIsdGhpcy4kZWwpKSYmKCF0aGlzLnBhdXNlT25Ib3Zlcnx8IUwodGhpcy4kZWwsIjpob3ZlciIpKSYmIXRoaXMuc3RhY2subGVuZ3RoJiZ0aGlzLnNob3coIm5leHQiKSx0aGlzLmF1dG9wbGF5SW50ZXJ2YWwpfSxzdG9wQXV0b3BsYXkoKXt0aGlzLmludGVydmFsJiZjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpfX19O2NvbnN0IEFlPXtwYXNzaXZlOiExLGNhcHR1cmU6ITB9LEdhPSJ0b3VjaHN0YXJ0IG1vdXNlZG93biIsbnM9InRvdWNobW92ZSBtb3VzZW1vdmUiLG9zPSJ0b3VjaGVuZCB0b3VjaGNhbmNlbCBtb3VzZXVwIGNsaWNrIGlucHV0Ijt2YXIgSmE9e3Byb3BzOntkcmFnZ2FibGU6Qm9vbGVhbn0sZGF0YTp7ZHJhZ2dhYmxlOiEwLHRocmVzaG9sZDoxMH0sY3JlYXRlZCgpe2Zvcihjb25zdCB0IG9mWyJzdGFydCIsIm1vdmUiLCJlbmQiXSl7Y29uc3QgZT10aGlzW3RdO3RoaXNbdF09aT0+e2NvbnN0IHM9ZWUoaSkueCooWD8tMToxKTt0aGlzLnByZXZQb3M9cz09PXRoaXMucG9zP3RoaXMucHJldlBvczp0aGlzLnBvcyx0aGlzLnBvcz1zLGUoaSl9fX0sZXZlbnRzOlt7bmFtZTpHYSxkZWxlZ2F0ZSgpe3JldHVybiB0aGlzLnNlbFNsaWRlc30saGFuZGxlcih0KXshdGhpcy5kcmFnZ2FibGV8fCEkdCh0KSYmS2EodC50YXJnZXQpfHxpdCh0LnRhcmdldCxtZSl8fHQuYnV0dG9uPjB8fHRoaXMubGVuZ3RoPDJ8fHRoaXMuc3RhcnQodCl9fSx7bmFtZToiZHJhZ3N0YXJ0IixoYW5kbGVyKHQpe3QucHJldmVudERlZmF1bHQoKX19LHtuYW1lOm5zKyIgIitvcyxlbCgpe3JldHVybiB0aGlzLmxpc3R9LGhhbmRsZXI6VCwuLi5BZX1dLG1ldGhvZHM6e3N0YXJ0KCl7dGhpcy5kcmFnPXRoaXMucG9zLHRoaXMuX3RyYW5zaXRpb25lcj8odGhpcy5wZXJjZW50PXRoaXMuX3RyYW5zaXRpb25lci5wZXJjZW50KCksdGhpcy5kcmFnKz10aGlzLl90cmFuc2l0aW9uZXIuZ2V0RGlzdGFuY2UoKSp0aGlzLnBlcmNlbnQqdGhpcy5kaXIsdGhpcy5fdHJhbnNpdGlvbmVyLmNhbmNlbCgpLHRoaXMuX3RyYW5zaXRpb25lci50cmFuc2xhdGUodGhpcy5wZXJjZW50KSx0aGlzLmRyYWdnaW5nPSEwLHRoaXMuc3RhY2s9W10pOnRoaXMucHJldkluZGV4PXRoaXMuaW5kZXgsayhkb2N1bWVudCxucyx0aGlzLm1vdmUsQWUpLGsoZG9jdW1lbnQsb3MsdGhpcy5lbmQsQWUpLGModGhpcy5saXN0LCJ1c2VyU2VsZWN0Iiwibm9uZSIpfSxtb3ZlKHQpe2NvbnN0IGU9dGhpcy5wb3MtdGhpcy5kcmFnO2lmKGU9PT0wfHx0aGlzLnByZXZQb3M9PT10aGlzLnBvc3x8IXRoaXMuZHJhZ2dpbmcmJk1hdGguYWJzKGUpPHRoaXMudGhyZXNob2xkKXJldHVybjtjKHRoaXMubGlzdCwicG9pbnRlckV2ZW50cyIsIm5vbmUiKSx0LmNhbmNlbGFibGUmJnQucHJldmVudERlZmF1bHQoKSx0aGlzLmRyYWdnaW5nPSEwLHRoaXMuZGlyPWU8MD8xOi0xO2NvbnN0e3NsaWRlczppfT10aGlzO2xldHtwcmV2SW5kZXg6c309dGhpcyxuPU1hdGguYWJzKGUpLG89dGhpcy5nZXRJbmRleChzK3RoaXMuZGlyLHMpLHI9dGhpcy5fZ2V0RGlzdGFuY2UocyxvKXx8aVtzXS5vZmZzZXRXaWR0aDtmb3IoO28hPT1zJiZuPnI7KXRoaXMuZHJhZy09cip0aGlzLmRpcixzPW8sbi09cixvPXRoaXMuZ2V0SW5kZXgocyt0aGlzLmRpcixzKSxyPXRoaXMuX2dldERpc3RhbmNlKHMsbyl8fGlbc10ub2Zmc2V0V2lkdGg7dGhpcy5wZXJjZW50PW4vcjtjb25zdCBhPWlbc10sbD1pW29dLGg9dGhpcy5pbmRleCE9PW8sdT1zPT09bztsZXQgZDtbdGhpcy5pbmRleCx0aGlzLnByZXZJbmRleF0uZmlsdGVyKGY9PiFwKFtvLHNdLGYpKS5mb3JFYWNoKGY9PntnKGlbZl0sIml0ZW1oaWRkZW4iLFt0aGlzXSksdSYmKGQ9ITAsdGhpcy5wcmV2SW5kZXg9cyl9KSwodGhpcy5pbmRleD09PXMmJnRoaXMucHJldkluZGV4IT09c3x8ZCkmJmcoaVt0aGlzLmluZGV4XSwiaXRlbXNob3duIixbdGhpc10pLGgmJih0aGlzLnByZXZJbmRleD1zLHRoaXMuaW5kZXg9bywhdSYmZyhhLCJiZWZvcmVpdGVtaGlkZSIsW3RoaXNdKSxnKGwsImJlZm9yZWl0ZW1zaG93IixbdGhpc10pKSx0aGlzLl90cmFuc2l0aW9uZXI9dGhpcy5fdHJhbnNsYXRlKE1hdGguYWJzKHRoaXMucGVyY2VudCksYSwhdSYmbCksaCYmKCF1JiZnKGEsIml0ZW1oaWRlIixbdGhpc10pLGcobCwiaXRlbXNob3ciLFt0aGlzXSkpfSxlbmQoKXtpZihEdChkb2N1bWVudCxucyx0aGlzLm1vdmUsQWUpLER0KGRvY3VtZW50LG9zLHRoaXMuZW5kLEFlKSx0aGlzLmRyYWdnaW5nKWlmKHRoaXMuZHJhZ2dpbmc9bnVsbCx0aGlzLmluZGV4PT09dGhpcy5wcmV2SW5kZXgpdGhpcy5wZXJjZW50PTEtdGhpcy5wZXJjZW50LHRoaXMuZGlyKj0tMSx0aGlzLl9zaG93KCExLHRoaXMuaW5kZXgsITApLHRoaXMuX3RyYW5zaXRpb25lcj1udWxsO2Vsc2V7Y29uc3QgdD0oWD90aGlzLmRpciooWD8xOi0xKTp0aGlzLmRpcik8MD09dGhpcy5wcmV2UG9zPnRoaXMucG9zO3RoaXMuaW5kZXg9dD90aGlzLmluZGV4OnRoaXMucHJldkluZGV4LHQmJih0aGlzLnBlcmNlbnQ9MS10aGlzLnBlcmNlbnQpLHRoaXMuc2hvdyh0aGlzLmRpcj4wJiYhdHx8dGhpcy5kaXI8MCYmdD8ibmV4dCI6InByZXZpb3VzIiwhMCl9Yyh0aGlzLmxpc3Qse3VzZXJTZWxlY3Q6IiIscG9pbnRlckV2ZW50czoiIn0pLHRoaXMuZHJhZz10aGlzLnBlcmNlbnQ9bnVsbH19fTtmdW5jdGlvbiBLYSh0KXtyZXR1cm4hdC5jaGlsZHJlbi5sZW5ndGgmJnQuY2hpbGROb2Rlcy5sZW5ndGh9dmFyIFphPXtkYXRhOntzZWxOYXY6ITF9LGNvbXB1dGVkOntuYXYodCxlKXtsZXR7c2VsTmF2Oml9PXQ7cmV0dXJuIHYoaSxlKX0sc2VsTmF2SXRlbSh0KXtsZXR7YXR0ckl0ZW06ZX09dDtyZXR1cm4iWyIrZSsiXSxbZGF0YS0iK2UrIl0ifSxuYXZJdGVtcyh0LGUpe3JldHVybiBEKHRoaXMuc2VsTmF2SXRlbSxlKX19LHVwZGF0ZTp7d3JpdGUoKXt0aGlzLm5hdiYmdGhpcy5sZW5ndGghPT10aGlzLm5hdi5jaGlsZHJlbi5sZW5ndGgmJlB0KHRoaXMubmF2LHRoaXMuc2xpZGVzLm1hcCgodCxlKT0+IjxsaSAiK3RoaXMuYXR0ckl0ZW0rJz0iJytlKyciPjxhIGhyZWY+PC9hPjwvbGk+Jykuam9pbigiIikpLHRoaXMubmF2SXRlbXMuY29uY2F0KHRoaXMubmF2KS5mb3JFYWNoKHQ9PnQmJih0LmhpZGRlbj0hdGhpcy5tYXhJbmRleCkpLHRoaXMudXBkYXRlTmF2KCl9LGV2ZW50czpbInJlc2l6ZSJdfSxldmVudHM6W3tuYW1lOiJjbGljayIsZGVsZWdhdGUoKXtyZXR1cm4gdGhpcy5zZWxOYXZJdGVtfSxoYW5kbGVyKHQpe3QucHJldmVudERlZmF1bHQoKSx0aGlzLnNob3coYXQodC5jdXJyZW50LHRoaXMuYXR0ckl0ZW0pKX19LHtuYW1lOiJpdGVtc2hvdyIsaGFuZGxlcjoidXBkYXRlTmF2In1dLG1ldGhvZHM6e3VwZGF0ZU5hdigpe2NvbnN0IHQ9dGhpcy5nZXRWYWxpZEluZGV4KCk7Zm9yKGNvbnN0IGUgb2YgdGhpcy5uYXZJdGVtcyl7Y29uc3QgaT1hdChlLHRoaXMuYXR0ckl0ZW0pO1coZSx0aGlzLmNsc0FjdGl2ZSxDdChpKT09PXQpLFcoZSwidWstaW52aXNpYmxlIix0aGlzLmZpbml0ZSYmKGk9PT0icHJldmlvdXMiJiZ0PT09MHx8aT09PSJuZXh0IiYmdD49dGhpcy5tYXhJbmRleCkpfX19fSxNbj17bWl4aW5zOltYYSxKYSxaYSx3dF0scHJvcHM6e2Nsc0FjdGl2YXRlZDpCb29sZWFuLGVhc2luZzpTdHJpbmcsaW5kZXg6TnVtYmVyLGZpbml0ZTpCb29sZWFuLHZlbG9jaXR5Ok51bWJlcixzZWxTbGlkZXM6U3RyaW5nfSxkYXRhOigpPT4oe2Vhc2luZzoiZWFzZSIsZmluaXRlOiExLHZlbG9jaXR5OjEsaW5kZXg6MCxwcmV2SW5kZXg6LTEsc3RhY2s6W10scGVyY2VudDowLGNsc0FjdGl2ZToidWstYWN0aXZlIixjbHNBY3RpdmF0ZWQ6ITEsVHJhbnNpdGlvbmVyOiExLHRyYW5zaXRpb25PcHRpb25zOnt9fSksY29ubmVjdGVkKCl7dGhpcy5wcmV2SW5kZXg9LTEsdGhpcy5pbmRleD10aGlzLmdldFZhbGlkSW5kZXgodGhpcy4kcHJvcHMuaW5kZXgpLHRoaXMuc3RhY2s9W119LGRpc2Nvbm5lY3RlZCgpe08odGhpcy5zbGlkZXMsdGhpcy5jbHNBY3RpdmUpfSxjb21wdXRlZDp7ZHVyYXRpb24odCxlKXtsZXR7dmVsb2NpdHk6aX09dDtyZXR1cm4gRG4oZS5vZmZzZXRXaWR0aC9pKX0sbGlzdCh0LGUpe2xldHtzZWxMaXN0Oml9PXQ7cmV0dXJuIHYoaSxlKX0sbWF4SW5kZXgoKXtyZXR1cm4gdGhpcy5sZW5ndGgtMX0sc2VsU2xpZGVzKHQpe2xldHtzZWxMaXN0OmUsc2VsU2xpZGVzOml9PXQ7cmV0dXJuIGUrIiAiKyhpfHwiPiAqIil9LHNsaWRlczp7Z2V0KCl7cmV0dXJuIEQodGhpcy5zZWxTbGlkZXMsdGhpcy4kZWwpfSx3YXRjaCgpe3RoaXMuJHJlc2V0KCl9fSxsZW5ndGgoKXtyZXR1cm4gdGhpcy5zbGlkZXMubGVuZ3RofX0sbWV0aG9kczp7c2hvdyh0LGUpe2lmKGU9PT12b2lkIDAmJihlPSExKSx0aGlzLmRyYWdnaW5nfHwhdGhpcy5sZW5ndGgpcmV0dXJuO2NvbnN0e3N0YWNrOml9PXRoaXMscz1lPzA6aS5sZW5ndGgsbj0oKT0+e2kuc3BsaWNlKHMsMSksaS5sZW5ndGgmJnRoaXMuc2hvdyhpLnNoaWZ0KCksITApfTtpZihpW2U/InVuc2hpZnQiOiJwdXNoIl0odCksIWUmJmkubGVuZ3RoPjEpe2kubGVuZ3RoPT09MiYmdGhpcy5fdHJhbnNpdGlvbmVyLmZvcndhcmQoTWF0aC5taW4odGhpcy5kdXJhdGlvbiwyMDApKTtyZXR1cm59Y29uc3Qgbz10aGlzLmdldEluZGV4KHRoaXMuaW5kZXgpLHI9SSh0aGlzLnNsaWRlcyx0aGlzLmNsc0FjdGl2ZSkmJnRoaXMuc2xpZGVzW29dLGE9dGhpcy5nZXRJbmRleCh0LHRoaXMuaW5kZXgpLGw9dGhpcy5zbGlkZXNbYV07aWYocj09PWwpe24oKTtyZXR1cm59aWYodGhpcy5kaXI9UWEodCxvKSx0aGlzLnByZXZJbmRleD1vLHRoaXMuaW5kZXg9YSxyJiYhZyhyLCJiZWZvcmVpdGVtaGlkZSIsW3RoaXNdKXx8IWcobCwiYmVmb3JlaXRlbXNob3ciLFt0aGlzLHJdKSl7dGhpcy5pbmRleD10aGlzLnByZXZJbmRleCxuKCk7cmV0dXJufWNvbnN0IGg9dGhpcy5fc2hvdyhyLGwsZSkudGhlbigoKT0+KHImJmcociwiaXRlbWhpZGRlbiIsW3RoaXNdKSxnKGwsIml0ZW1zaG93biIsW3RoaXNdKSxuZXcgUHJvbWlzZSh1PT57ei53cml0ZSgoKT0+e2kuc2hpZnQoKSxpLmxlbmd0aD90aGlzLnNob3coaS5zaGlmdCgpLCEwKTp0aGlzLl90cmFuc2l0aW9uZXI9bnVsbCx1KCl9KX0pKSk7cmV0dXJuIHImJmcociwiaXRlbWhpZGUiLFt0aGlzXSksZyhsLCJpdGVtc2hvdyIsW3RoaXNdKSxofSxnZXRJbmRleCh0LGUpe3JldHVybiB0PT09dm9pZCAwJiYodD10aGlzLmluZGV4KSxlPT09dm9pZCAwJiYoZT10aGlzLmluZGV4KSxaKFF0KHQsdGhpcy5zbGlkZXMsZSx0aGlzLmZpbml0ZSksMCx0aGlzLm1heEluZGV4KX0sZ2V0VmFsaWRJbmRleCh0LGUpe3JldHVybiB0PT09dm9pZCAwJiYodD10aGlzLmluZGV4KSxlPT09dm9pZCAwJiYoZT10aGlzLnByZXZJbmRleCksdGhpcy5nZXRJbmRleCh0LGUpfSxfc2hvdyh0LGUsaSl7aWYodGhpcy5fdHJhbnNpdGlvbmVyPXRoaXMuX2dldFRyYW5zaXRpb25lcih0LGUsdGhpcy5kaXIse2Vhc2luZzppP2Uub2Zmc2V0V2lkdGg8NjAwPyJjdWJpYy1iZXppZXIoMC4yNSwgMC40NiwgMC40NSwgMC45NCkiOiJjdWJpYy1iZXppZXIoMC4xNjUsIDAuODQsIDAuNDQsIDEpIjp0aGlzLmVhc2luZywuLi50aGlzLnRyYW5zaXRpb25PcHRpb25zfSksIWkmJiF0KXJldHVybiB0aGlzLl90cmFuc2xhdGUoMSksUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3R7bGVuZ3RoOnN9PXRoaXMuc3RhY2s7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25lcltzPjE/ImZvcndhcmQiOiJzaG93Il0ocz4xP01hdGgubWluKHRoaXMuZHVyYXRpb24sNzUrNzUvKHMtMSkpOnRoaXMuZHVyYXRpb24sdGhpcy5wZXJjZW50KX0sX2dldERpc3RhbmNlKHQsZSl7cmV0dXJuIHRoaXMuX2dldFRyYW5zaXRpb25lcih0LHQhPT1lJiZlKS5nZXREaXN0YW5jZSgpfSxfdHJhbnNsYXRlKHQsZSxpKXtlPT09dm9pZCAwJiYoZT10aGlzLnByZXZJbmRleCksaT09PXZvaWQgMCYmKGk9dGhpcy5pbmRleCk7Y29uc3Qgcz10aGlzLl9nZXRUcmFuc2l0aW9uZXIoZSE9PWk/ZTohMSxpKTtyZXR1cm4gcy50cmFuc2xhdGUodCksc30sX2dldFRyYW5zaXRpb25lcih0LGUsaSxzKXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9dGhpcy5wcmV2SW5kZXgpLGU9PT12b2lkIDAmJihlPXRoaXMuaW5kZXgpLGk9PT12b2lkIDAmJihpPXRoaXMuZGlyfHwxKSxzPT09dm9pZCAwJiYocz10aGlzLnRyYW5zaXRpb25PcHRpb25zKSxuZXcgdGhpcy5UcmFuc2l0aW9uZXIoS3QodCk/dGhpcy5zbGlkZXNbdF06dCxLdChlKT90aGlzLnNsaWRlc1tlXTplLGkqKFg/LTE6MSkscyl9fX07ZnVuY3Rpb24gUWEodCxlKXtyZXR1cm4gdD09PSJuZXh0Ij8xOnQ9PT0icHJldmlvdXMifHx0PGU/LTE6MX1mdW5jdGlvbiBEbih0KXtyZXR1cm4gLjUqdCszMDB9dmFyIE5uPXttaXhpbnM6W01uXSxwcm9wczp7YW5pbWF0aW9uOlN0cmluZ30sZGF0YTp7YW5pbWF0aW9uOiJzbGlkZSIsY2xzQWN0aXZhdGVkOiJ1ay10cmFuc2l0aW9uLWFjdGl2ZSIsQW5pbWF0aW9uczpzcyxUcmFuc2l0aW9uZXI6WWF9LGNvbXB1dGVkOnthbmltYXRpb24odCl7bGV0e2FuaW1hdGlvbjplLEFuaW1hdGlvbnM6aX09dDtyZXR1cm57Li4uaVtlXXx8aS5zbGlkZSxuYW1lOmV9fSx0cmFuc2l0aW9uT3B0aW9ucygpe3JldHVybnthbmltYXRpb246dGhpcy5hbmltYXRpb259fX0sZXZlbnRzOntiZWZvcmVpdGVtc2hvdyh0KXtsZXR7dGFyZ2V0OmV9PXQ7YihlLHRoaXMuY2xzQWN0aXZlKX0saXRlbXNob3duKHQpe2xldHt0YXJnZXQ6ZX09dDtiKGUsdGhpcy5jbHNBY3RpdmF0ZWQpfSxpdGVtaGlkZGVuKHQpe2xldHt0YXJnZXQ6ZX09dDtPKGUsdGhpcy5jbHNBY3RpdmUsdGhpcy5jbHNBY3RpdmF0ZWQpfX19LHpuPXttaXhpbnM6W2FlLEtpLEV0LE5uXSxmdW5jdGlvbmFsOiEwLHByb3BzOntkZWxheUNvbnRyb2xzOk51bWJlcixwcmVsb2FkOk51bWJlcix2aWRlb0F1dG9wbGF5OkJvb2xlYW4sdGVtcGxhdGU6U3RyaW5nfSxkYXRhOigpPT4oe3ByZWxvYWQ6MSx2aWRlb0F1dG9wbGF5OiExLGRlbGF5Q29udHJvbHM6M2UzLGl0ZW1zOltdLGNsczoidWstb3BlbiIsY2xzUGFnZToidWstbGlnaHRib3gtcGFnZSIsc2VsTGlzdDoiLnVrLWxpZ2h0Ym94LWl0ZW1zIixhdHRySXRlbToidWstbGlnaHRib3gtaXRlbSIsc2VsQ2xvc2U6Ii51ay1jbG9zZS1sYXJnZSIsc2VsQ2FwdGlvbjoiLnVrLWxpZ2h0Ym94LWNhcHRpb24iLHBhdXNlT25Ib3ZlcjohMSx2ZWxvY2l0eToyLEFuaW1hdGlvbnM6Qm4sdGVtcGxhdGU6JzxkaXYgY2xhc3M9InVrLWxpZ2h0Ym94IHVrLW92ZXJmbG93LWhpZGRlbiI+IDx1bCBjbGFzcz0idWstbGlnaHRib3gtaXRlbXMiPjwvdWw+IDxkaXYgY2xhc3M9InVrLWxpZ2h0Ym94LXRvb2xiYXIgdWstcG9zaXRpb24tdG9wIHVrLXRleHQtcmlnaHQgdWstdHJhbnNpdGlvbi1zbGlkZS10b3AgdWstdHJhbnNpdGlvbi1vcGFxdWUiPiA8YnV0dG9uIGNsYXNzPSJ1ay1saWdodGJveC10b29sYmFyLWljb24gdWstY2xvc2UtbGFyZ2UiIHR5cGU9ImJ1dHRvbiIgdWstY2xvc2U+PC9idXR0b24+IDwvZGl2PiA8YSBjbGFzcz0idWstbGlnaHRib3gtYnV0dG9uIHVrLXBvc2l0aW9uLWNlbnRlci1sZWZ0IHVrLXBvc2l0aW9uLW1lZGl1bSB1ay10cmFuc2l0aW9uLWZhZGUiIGhyZWYgdWstc2xpZGVuYXYtcHJldmlvdXMgdWstbGlnaHRib3gtaXRlbT0icHJldmlvdXMiPjwvYT4gPGEgY2xhc3M9InVrLWxpZ2h0Ym94LWJ1dHRvbiB1ay1wb3NpdGlvbi1jZW50ZXItcmlnaHQgdWstcG9zaXRpb24tbWVkaXVtIHVrLXRyYW5zaXRpb24tZmFkZSIgaHJlZiB1ay1zbGlkZW5hdi1uZXh0IHVrLWxpZ2h0Ym94LWl0ZW09Im5leHQiPjwvYT4gPGRpdiBjbGFzcz0idWstbGlnaHRib3gtdG9vbGJhciB1ay1saWdodGJveC1jYXB0aW9uIHVrLXBvc2l0aW9uLWJvdHRvbSB1ay10ZXh0LWNlbnRlciB1ay10cmFuc2l0aW9uLXNsaWRlLWJvdHRvbSB1ay10cmFuc2l0aW9uLW9wYXF1ZSI+PC9kaXY+IDwvZGl2Pid9KSxjcmVhdGVkKCl7Y29uc3QgdD12KHRoaXMudGVtcGxhdGUpLGU9dih0aGlzLnNlbExpc3QsdCk7dGhpcy5pdGVtcy5mb3JFYWNoKCgpPT5qKGUsIjxsaT4iKSksdGhpcy4kbW91bnQoaih0aGlzLmNvbnRhaW5lcix0KSl9LGNvbXB1dGVkOntjYXB0aW9uKHQsZSl7bGV0e3NlbENhcHRpb246aX09dDtyZXR1cm4gdihpLGUpfX0sZXZlbnRzOlt7bmFtZTpHZSsiICIrZ3QrIiBrZXlkb3duIixoYW5kbGVyOiJzaG93Q29udHJvbHMifSx7bmFtZToiY2xpY2siLHNlbGY6ITAsZGVsZWdhdGUoKXtyZXR1cm4gdGhpcy5zZWxTbGlkZXN9LGhhbmRsZXIodCl7dC5kZWZhdWx0UHJldmVudGVkfHx0aGlzLmhpZGUoKX19LHtuYW1lOiJzaG93biIsc2VsZjohMCxoYW5kbGVyKCl7dGhpcy5zaG93Q29udHJvbHMoKX19LHtuYW1lOiJoaWRlIixzZWxmOiEwLGhhbmRsZXIoKXt0aGlzLmhpZGVDb250cm9scygpLE8odGhpcy5zbGlkZXMsdGhpcy5jbHNBY3RpdmUpLFMuc3RvcCh0aGlzLnNsaWRlcyl9fSx7bmFtZToiaGlkZGVuIixzZWxmOiEwLGhhbmRsZXIoKXt0aGlzLiRkZXN0cm95KCEwKX19LHtuYW1lOiJrZXl1cCIsZWwoKXtyZXR1cm4gZG9jdW1lbnR9LGhhbmRsZXIodCl7aWYoISghdGhpcy5pc1RvZ2dsZWQodGhpcy4kZWwpfHwhdGhpcy5kcmFnZ2FibGUpKXN3aXRjaCh0LmtleUNvZGUpe2Nhc2UgMzc6dGhpcy5zaG93KCJwcmV2aW91cyIpO2JyZWFrO2Nhc2UgMzk6dGhpcy5zaG93KCJuZXh0Iik7YnJlYWt9fX0se25hbWU6ImJlZm9yZWl0ZW1zaG93IixoYW5kbGVyKHQpe3RoaXMuaXNUb2dnbGVkKCl8fCh0aGlzLmRyYWdnYWJsZT0hMSx0LnByZXZlbnREZWZhdWx0KCksdGhpcy50b2dnbGVFbGVtZW50KHRoaXMuJGVsLCEwLCExKSx0aGlzLmFuaW1hdGlvbj1Cbi5zY2FsZSxPKHQudGFyZ2V0LHRoaXMuY2xzQWN0aXZlKSx0aGlzLnN0YWNrLnNwbGljZSgxLDAsdGhpcy5pbmRleCkpfX0se25hbWU6Iml0ZW1zaG93IixoYW5kbGVyKCl7UHQodGhpcy5jYXB0aW9uLHRoaXMuZ2V0SXRlbSgpLmNhcHRpb258fCIiKTtmb3IobGV0IHQ9LXRoaXMucHJlbG9hZDt0PD10aGlzLnByZWxvYWQ7dCsrKXRoaXMubG9hZEl0ZW0odGhpcy5pbmRleCt0KX19LHtuYW1lOiJpdGVtc2hvd24iLGhhbmRsZXIoKXt0aGlzLmRyYWdnYWJsZT10aGlzLiRwcm9wcy5kcmFnZ2FibGV9fSx7bmFtZToiaXRlbWxvYWQiLGFzeW5jIGhhbmRsZXIodCxlKXtjb25zdHtzb3VyY2U6aSx0eXBlOnMsYWx0Om49IiIscG9zdGVyOm8sYXR0cnM6cj17fX09ZTtpZih0aGlzLnNldEl0ZW0oZSwiPHNwYW4gdWstc3Bpbm5lcj48L3NwYW4+IiksIWkpcmV0dXJuO2xldCBhO2NvbnN0IGw9e2ZyYW1lYm9yZGVyOiIwIixhbGxvd2Z1bGxzY3JlZW46IiIsc3R5bGU6Im1heC13aWR0aDogMTAwJTsgYm94LXNpemluZzogYm9yZGVyLWJveDsiLCJ1ay1yZXNwb25zaXZlIjoiIiwidWstdmlkZW8iOiIiK3RoaXMudmlkZW9BdXRvcGxheX07aWYocz09PSJpbWFnZSJ8fGkubWF0Y2goL1wuKGF2aWZ8anBlP2d8amZpZnxhP3BuZ3xnaWZ8c3ZnfHdlYnApKCR8XD8pL2kpKXRyeXtjb25zdHt3aWR0aDpoLGhlaWdodDp1fT1hd2FpdCBicyhpLHIuc3Jjc2V0LHIuc2l6ZSk7dGhpcy5zZXRJdGVtKGUsRWUoImltZyIse3NyYzppLHdpZHRoOmgsaGVpZ2h0OnUsYWx0Om4sLi4ucn0pKX1jYXRjaHt0aGlzLnNldEVycm9yKGUpfWVsc2UgaWYocz09PSJ2aWRlbyJ8fGkubWF0Y2goL1wuKG1wNHx3ZWJtfG9ndikoJHxcPykvaSkpe2NvbnN0IGg9RWUoInZpZGVvIix7c3JjOmkscG9zdGVyOm8sY29udHJvbHM6IiIscGxheXNpbmxpbmU6IiIsInVrLXZpZGVvIjoiIit0aGlzLnZpZGVvQXV0b3BsYXksLi4ucn0pO2soaCwibG9hZGVkbWV0YWRhdGEiLCgpPT57eShoLHt3aWR0aDpoLnZpZGVvV2lkdGgsaGVpZ2h0OmgudmlkZW9IZWlnaHR9KSx0aGlzLnNldEl0ZW0oZSxoKX0pLGsoaCwiZXJyb3IiLCgpPT50aGlzLnNldEVycm9yKGUpKX1lbHNlIGlmKHM9PT0iaWZyYW1lInx8aS5tYXRjaCgvXC4oaHRtbHxwaHApKCR8XD8pL2kpKXRoaXMuc2V0SXRlbShlLEVlKCJpZnJhbWUiLHtzcmM6aSxmcmFtZWJvcmRlcjoiMCIsYWxsb3dmdWxsc2NyZWVuOiIiLGNsYXNzOiJ1ay1saWdodGJveC1pZnJhbWUiLC4uLnJ9KSk7ZWxzZSBpZihhPWkubWF0Y2goL1wvXC8oPzouKj95b3V0dWJlKC1ub2Nvb2tpZSk/XC4uKj9bPyZddj18eW91dHVcLmJlXC8pKFtcdy1dezExfSlbJj9dPyguKik/LykpdGhpcy5zZXRJdGVtKGUsRWUoImlmcmFtZSIse3NyYzoiaHR0cHM6Ly93d3cueW91dHViZSIrKGFbMV18fCIiKSsiLmNvbS9lbWJlZC8iK2FbMl0rKGFbM10/Ij8iK2FbM106IiIpLHdpZHRoOjE5MjAsaGVpZ2h0OjEwODAsLi4ubCwuLi5yfSkpO2Vsc2UgaWYoYT1pLm1hdGNoKC9cL1wvLio/dmltZW9cLlthLXpdK1wvKFxkKylbJj9dPyguKik/LykpdHJ5e2NvbnN0e2hlaWdodDpoLHdpZHRoOnV9PWF3YWl0KGF3YWl0IGZldGNoKCJodHRwczovL3ZpbWVvLmNvbS9hcGkvb2VtYmVkLmpzb24/bWF4d2lkdGg9MTkyMCZ1cmw9IitlbmNvZGVVUkkoaSkse2NyZWRlbnRpYWxzOiJvbWl0In0pKS5qc29uKCk7dGhpcy5zZXRJdGVtKGUsRWUoImlmcmFtZSIse3NyYzoiaHR0cHM6Ly9wbGF5ZXIudmltZW8uY29tL3ZpZGVvLyIrYVsxXSsoYVsyXT8iPyIrYVsyXToiIiksd2lkdGg6dSxoZWlnaHQ6aCwuLi5sLC4uLnJ9KSl9Y2F0Y2h7dGhpcy5zZXRFcnJvcihlKX19fV0sbWV0aG9kczp7bG9hZEl0ZW0odCl7dD09PXZvaWQgMCYmKHQ9dGhpcy5pbmRleCk7Y29uc3QgZT10aGlzLmdldEl0ZW0odCk7dGhpcy5nZXRTbGlkZShlKS5jaGlsZEVsZW1lbnRDb3VudHx8Zyh0aGlzLiRlbCwiaXRlbWxvYWQiLFtlXSl9LGdldEl0ZW0odCl7cmV0dXJuIHQ9PT12b2lkIDAmJih0PXRoaXMuaW5kZXgpLHRoaXMuaXRlbXNbUXQodCx0aGlzLnNsaWRlcyldfSxzZXRJdGVtKHQsZSl7Zyh0aGlzLiRlbCwiaXRlbWxvYWRlZCIsW3RoaXMsUHQodGhpcy5nZXRTbGlkZSh0KSxlKV0pfSxnZXRTbGlkZSh0KXtyZXR1cm4gdGhpcy5zbGlkZXNbdGhpcy5pdGVtcy5pbmRleE9mKHQpXX0sc2V0RXJyb3IodCl7dGhpcy5zZXRJdGVtKHQsJzxzcGFuIHVrLWljb249Imljb246IGJvbHQ7IHJhdGlvOiAyIj48L3NwYW4+Jyl9LHNob3dDb250cm9scygpe2NsZWFyVGltZW91dCh0aGlzLmNvbnRyb2xzVGltZXIpLHRoaXMuY29udHJvbHNUaW1lcj1zZXRUaW1lb3V0KHRoaXMuaGlkZUNvbnRyb2xzLHRoaXMuZGVsYXlDb250cm9scyksYih0aGlzLiRlbCwidWstYWN0aXZlIiwidWstdHJhbnNpdGlvbi1hY3RpdmUiKX0saGlkZUNvbnRyb2xzKCl7Tyh0aGlzLiRlbCwidWstYWN0aXZlIiwidWstdHJhbnNpdGlvbi1hY3RpdmUiKX19fTtmdW5jdGlvbiBFZSh0LGUpe2NvbnN0IGk9THQoIjwiK3QrIj4iKTtyZXR1cm4geShpLGUpLGl9dmFyIFVhPXtpbnN0YWxsOnRsLHByb3BzOnt0b2dnbGU6U3RyaW5nfSxkYXRhOnt0b2dnbGU6ImEifSxjb21wdXRlZDp7dG9nZ2xlczp7Z2V0KHQsZSl7bGV0e3RvZ2dsZTppfT10O3JldHVybiBEKGksZSl9LHdhdGNoKCl7dGhpcy5oaWRlKCl9fX0sZGlzY29ubmVjdGVkKCl7dGhpcy5oaWRlKCl9LGV2ZW50czpbe25hbWU6ImNsaWNrIixkZWxlZ2F0ZSgpe3JldHVybiB0aGlzLnRvZ2dsZSsiOm5vdCgudWstZGlzYWJsZWQpIn0saGFuZGxlcih0KXt0LnByZXZlbnREZWZhdWx0KCksdGhpcy5zaG93KHQuY3VycmVudCl9fV0sbWV0aG9kczp7c2hvdyh0KXtjb25zdCBlPWRzKHRoaXMudG9nZ2xlcy5tYXAoSG4pLCJzb3VyY2UiKTtpZihKdCh0KSl7Y29uc3R7c291cmNlOml9PUhuKHQpO3Q9YnQoZSxzPT57bGV0e3NvdXJjZTpufT1zO3JldHVybiBpPT09bn0pfXJldHVybiB0aGlzLnBhbmVsPXRoaXMucGFuZWx8fHRoaXMuJGNyZWF0ZSgibGlnaHRib3hQYW5lbCIsey4uLnRoaXMuJHByb3BzLGl0ZW1zOmV9KSxrKHRoaXMucGFuZWwuJGVsLCJoaWRkZW4iLCgpPT50aGlzLnBhbmVsPSExKSx0aGlzLnBhbmVsLnNob3codCl9LGhpZGUoKXt2YXIgdDtyZXR1cm4odD10aGlzLnBhbmVsKT09bnVsbD92b2lkIDA6dC5oaWRlKCl9fX07ZnVuY3Rpb24gdGwodCxlKXt0LmxpZ2h0Ym94UGFuZWx8fHQuY29tcG9uZW50KCJsaWdodGJveFBhbmVsIix6bikseHQoZS5wcm9wcyx0LmNvbXBvbmVudCgibGlnaHRib3hQYW5lbCIpLm9wdGlvbnMucHJvcHMpfWZ1bmN0aW9uIEhuKHQpe2NvbnN0IGU9e307Zm9yKGNvbnN0IGkgb2ZbImhyZWYiLCJjYXB0aW9uIiwidHlwZSIsInBvc3RlciIsImFsdCIsImF0dHJzIl0pZVtpPT09ImhyZWYiPyJzb3VyY2UiOmldPWF0KHQsaSk7cmV0dXJuIGUuYXR0cnM9a2UoZS5hdHRycyksZX12YXIgZWw9e21peGluczpbYWVdLGZ1bmN0aW9uYWw6ITAsYXJnczpbIm1lc3NhZ2UiLCJzdGF0dXMiXSxkYXRhOnttZXNzYWdlOiIiLHN0YXR1czoiIix0aW1lb3V0OjVlMyxncm91cDpudWxsLHBvczoidG9wLWNlbnRlciIsY2xzQ29udGFpbmVyOiJ1ay1ub3RpZmljYXRpb24iLGNsc0Nsb3NlOiJ1ay1ub3RpZmljYXRpb24tY2xvc2UiLGNsc01zZzoidWstbm90aWZpY2F0aW9uLW1lc3NhZ2UifSxpbnN0YWxsOmlsLGNvbXB1dGVkOnttYXJnaW5Qcm9wKHQpe2xldHtwb3M6ZX09dDtyZXR1cm4ibWFyZ2luIisodHQoZSwidG9wIik/IlRvcCI6IkJvdHRvbSIpfSxzdGFydFByb3BzKCl7cmV0dXJue29wYWNpdHk6MCxbdGhpcy5tYXJnaW5Qcm9wXTotdGhpcy4kZWwub2Zmc2V0SGVpZ2h0fX19LGNyZWF0ZWQoKXtjb25zdCB0PXYoIi4iK3RoaXMuY2xzQ29udGFpbmVyKyItIit0aGlzLnBvcyx0aGlzLmNvbnRhaW5lcil8fGoodGhpcy5jb250YWluZXIsJzxkaXYgY2xhc3M9IicrdGhpcy5jbHNDb250YWluZXIrIiAiK3RoaXMuY2xzQ29udGFpbmVyKyItIit0aGlzLnBvcysnIiBzdHlsZT0iZGlzcGxheTogYmxvY2siPjwvZGl2PicpO3RoaXMuJG1vdW50KGoodCwnPGRpdiBjbGFzcz0iJyt0aGlzLmNsc01zZysodGhpcy5zdGF0dXM/IiAiK3RoaXMuY2xzTXNnKyItIit0aGlzLnN0YXR1czoiIikrJyIgcm9sZT0iYWxlcnQiPiA8YSBocmVmIGNsYXNzPSInK3RoaXMuY2xzQ2xvc2UrJyIgZGF0YS11ay1jbG9zZT48L2E+IDxkaXY+Jyt0aGlzLm1lc3NhZ2UrIjwvZGl2PiA8L2Rpdj4iKSl9LGFzeW5jIGNvbm5lY3RlZCgpe2NvbnN0IHQ9dyhjKHRoaXMuJGVsLHRoaXMubWFyZ2luUHJvcCkpO2F3YWl0IFMuc3RhcnQoYyh0aGlzLiRlbCx0aGlzLnN0YXJ0UHJvcHMpLHtvcGFjaXR5OjEsW3RoaXMubWFyZ2luUHJvcF06dH0pLHRoaXMudGltZW91dCYmKHRoaXMudGltZXI9c2V0VGltZW91dCh0aGlzLmNsb3NlLHRoaXMudGltZW91dCkpfSxldmVudHM6e2NsaWNrKHQpe2l0KHQudGFyZ2V0LCdhW2hyZWY9IiMiXSxhW2hyZWY9IiJdJykmJnQucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlKCl9LFtqdF0oKXt0aGlzLnRpbWVyJiZjbGVhclRpbWVvdXQodGhpcy50aW1lcil9LFtuZV0oKXt0aGlzLnRpbWVvdXQmJih0aGlzLnRpbWVyPXNldFRpbWVvdXQodGhpcy5jbG9zZSx0aGlzLnRpbWVvdXQpKX19LG1ldGhvZHM6e2FzeW5jIGNsb3NlKHQpe2NvbnN0IGU9aT0+e2NvbnN0IHM9UChpKTtnKGksImNsb3NlIixbdGhpc10pLGN0KGkpLHMhPW51bGwmJnMuaGFzQ2hpbGROb2RlcygpfHxjdChzKX07dGhpcy50aW1lciYmY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHR8fGF3YWl0IFMuc3RhcnQodGhpcy4kZWwsdGhpcy5zdGFydFByb3BzKSxlKHRoaXMuJGVsKX19fTtmdW5jdGlvbiBpbCh0KXt0Lm5vdGlmaWNhdGlvbi5jbG9zZUFsbD1mdW5jdGlvbihlLGkpe3Z0KGRvY3VtZW50LmJvZHkscz0+e2NvbnN0IG49dC5nZXRDb21wb25lbnQocywibm90aWZpY2F0aW9uIik7biYmKCFlfHxlPT09bi5ncm91cCkmJm4uY2xvc2UoaSl9KX19Y29uc3QgdWk9e3g6ZGkseTpkaSxyb3RhdGU6ZGksc2NhbGU6ZGksY29sb3I6cnMsYmFja2dyb3VuZENvbG9yOnJzLGJvcmRlckNvbG9yOnJzLGJsdXI6cXQsaHVlOnF0LGZvcGFjaXR5OnF0LGdyYXlzY2FsZTpxdCxpbnZlcnQ6cXQsc2F0dXJhdGU6cXQsc2VwaWE6cXQsb3BhY2l0eTpubCxzdHJva2U6b2wsYmd4OlduLGJneTpXbn0se2tleXM6TG59PU9iamVjdDt2YXIgRm49e21peGluczpbbGldLHByb3BzOlZuKExuKHVpKSwibGlzdCIpLGRhdGE6Vm4oTG4odWkpLHZvaWQgMCksY29tcHV0ZWQ6e3Byb3BzKHQsZSl7Y29uc3QgaT17fTtmb3IoY29uc3QgbiBpbiB0KW4gaW4gdWkmJiFSKHRbbl0pJiYoaVtuXT10W25dLnNsaWNlKCkpO2NvbnN0IHM9e307Zm9yKGNvbnN0IG4gaW4gaSlzW25dPXVpW25dKG4sZSxpW25dLGkpO3JldHVybiBzfX0sZXZlbnRzOntsb2FkKCl7dGhpcy4kZW1pdCgpfX0sbWV0aG9kczp7cmVzZXQoKXtmb3IoY29uc3QgdCBpbiB0aGlzLmdldENzcygwKSljKHRoaXMuJGVsLHQsIiIpfSxnZXRDc3ModCl7Y29uc3QgZT17dHJhbnNmb3JtOiIiLGZpbHRlcjoiIn07Zm9yKGNvbnN0IGkgaW4gdGhpcy5wcm9wcyl0aGlzLnByb3BzW2ldKGUsdCk7cmV0dXJuIGV9fX07ZnVuY3Rpb24gZGkodCxlLGkpe2xldCBzPXBpKGkpfHx7eDoicHgiLHk6InB4Iixyb3RhdGU6ImRlZyJ9W3RdfHwiIixuO3JldHVybiB0PT09IngifHx0PT09InkiPyh0PSJ0cmFuc2xhdGUiK2t0KHQpLG49bz0+dyh3KG8pLnRvRml4ZWQocz09PSJweCI/MDo2KSkpOnQ9PT0ic2NhbGUiJiYocz0iIixuPW89PnBpKFtvXSk/SihvLCJ3aWR0aCIsZSwhMCkvZS5vZmZzZXRXaWR0aDpvKSxpLmxlbmd0aD09PTEmJmkudW5zaGlmdCh0PT09InNjYWxlIj8xOjApLGk9aGUoaSxuKSwobyxyKT0+e28udHJhbnNmb3JtKz0iICIrdCsiKCIrT2UoaSxyKStzKyIpIn19ZnVuY3Rpb24gcnModCxlLGkpe3JldHVybiBpLmxlbmd0aD09PTEmJmkudW5zaGlmdChfZShlLHQsIiIpKSxpPWhlKGkscz0+c2woZSxzKSksKHMsbik9Pntjb25zdFtvLHIsYV09cW4oaSxuKSxsPW8ubWFwKChoLHUpPT4oaCs9YSooclt1XS1oKSx1PT09Mz93KGgpOnBhcnNlSW50KGgsMTApKSkuam9pbigiLCIpO3NbdF09InJnYmEoIitsKyIpIn19ZnVuY3Rpb24gc2wodCxlKXtyZXR1cm4gX2UodCwiY29sb3IiLGUpLnNwbGl0KC9bKCksXS9nKS5zbGljZSgxLC0xKS5jb25jYXQoMSkuc2xpY2UoMCw0KS5tYXAodyl9ZnVuY3Rpb24gcXQodCxlLGkpe2kubGVuZ3RoPT09MSYmaS51bnNoaWZ0KDApO2NvbnN0IHM9cGkoaSl8fHtibHVyOiJweCIsaHVlOiJkZWcifVt0XXx8IiUiO3JldHVybiB0PXtmb3BhY2l0eToib3BhY2l0eSIsaHVlOiJodWUtcm90YXRlIn1bdF18fHQsaT1oZShpKSwobixvKT0+e2NvbnN0IHI9T2UoaSxvKTtuLmZpbHRlcis9IiAiK3QrIigiKyhyK3MpKyIpIn19ZnVuY3Rpb24gbmwodCxlLGkpe3JldHVybiBpLmxlbmd0aD09PTEmJmkudW5zaGlmdChfZShlLHQsIiIpKSxpPWhlKGkpLChzLG4pPT57c1t0XT1PZShpLG4pfX1mdW5jdGlvbiBvbCh0LGUsaSl7aS5sZW5ndGg9PT0xJiZpLnVuc2hpZnQoMCk7Y29uc3Qgcz1waShpKSxuPWNuKGUpO3JldHVybiBpPWhlKGkucmV2ZXJzZSgpLG89PihvPXcobykscz09PSIlIj9vKm4vMTAwOm8pKSxpLnNvbWUobz0+e2xldFtyXT1vO3JldHVybiByfSk/KGMoZSwic3Ryb2tlRGFzaGFycmF5IixuKSwobyxyKT0+e28uc3Ryb2tlRGFzaG9mZnNldD1PZShpLHIpfSk6VH1mdW5jdGlvbiBXbih0LGUsaSxzKXtpLmxlbmd0aD09PTEmJmkudW5zaGlmdCgwKTtjb25zdCBuPXQ9PT0iYmd5Ij8iaGVpZ2h0Ijoid2lkdGgiO3NbdF09aGUoaSxhPT5KKGEsbixlKSk7Y29uc3Qgbz1bImJneCIsImJneSJdLmZpbHRlcihhPT5hIGluIHMpO2lmKG8ubGVuZ3RoPT09MiYmdD09PSJiZ3giKXJldHVybiBUO2lmKF9lKGUsImJhY2tncm91bmRTaXplIiwiIik9PT0iY292ZXIiKXJldHVybiBybCh0LGUsaSxzKTtjb25zdCByPXt9O2Zvcihjb25zdCBhIG9mIG8pclthXT1qbihlLGEpO3JldHVybiBSbihvLHIscyl9ZnVuY3Rpb24gcmwodCxlLGkscyl7Y29uc3Qgbj1hbChlKTtpZighbi53aWR0aClyZXR1cm4gVDtjb25zdCBvPXt3aWR0aDplLm9mZnNldFdpZHRoLGhlaWdodDplLm9mZnNldEhlaWdodH0scj1bImJneCIsImJneSJdLmZpbHRlcih1PT51IGluIHMpLGE9e307Zm9yKGNvbnN0IHUgb2Ygcil7Y29uc3QgZD1zW3VdLm1hcChVPT57bGV0W0ZdPVU7cmV0dXJuIEZ9KSxmPU1hdGgubWluKC4uLmQpLG09TWF0aC5tYXgoLi4uZCksQz1kLmluZGV4T2YoZik8ZC5pbmRleE9mKG0pLEU9bS1mO2FbdV09KEM/LUU6MCktKEM/ZjptKSsicHgiLG9bdT09PSJiZ3kiPyJoZWlnaHQiOiJ3aWR0aCJdKz1FfWNvbnN0IGw9TGUuY292ZXIobixvKTtmb3IoY29uc3QgdSBvZiByKXtjb25zdCBkPXU9PT0iYmd5Ij8iaGVpZ2h0Ijoid2lkdGgiLGY9bFtkXS1vW2RdO2FbdV09Im1heCgiK2puKGUsdSkrIiwtIitmKyJweCkgKyAiK2FbdV19Y29uc3QgaD1SbihyLGEscyk7cmV0dXJuKHUsZCk9PntoKHUsZCksdS5iYWNrZ3JvdW5kU2l6ZT1sLndpZHRoKyJweCAiK2wuaGVpZ2h0KyJweCIsdS5iYWNrZ3JvdW5kUmVwZWF0PSJuby1yZXBlYXQifX1mdW5jdGlvbiBqbih0LGUpe3JldHVybiBfZSh0LCJiYWNrZ3JvdW5kLXBvc2l0aW9uLSIrZS5zdWJzdHIoLTEpLCIiKX1mdW5jdGlvbiBSbih0LGUsaSl7cmV0dXJuIGZ1bmN0aW9uKHMsbil7Zm9yKGNvbnN0IG8gb2YgdCl7Y29uc3Qgcj1PZShpW29dLG4pO3NbImJhY2tncm91bmQtcG9zaXRpb24tIitvLnN1YnN0cigtMSldPSJjYWxjKCIrZVtvXSsiICsgIityKyJweCkifX19Y29uc3QgZmk9e307ZnVuY3Rpb24gYWwodCl7Y29uc3QgZT1jKHQsImJhY2tncm91bmRJbWFnZSIpLnJlcGxhY2UoL15ub25lfHVybFwoWyInXT8oLis/KVsiJ10/XCkkLywiJDEiKTtpZihmaVtlXSlyZXR1cm4gZmlbZV07Y29uc3QgaT1uZXcgSW1hZ2U7cmV0dXJuIGUmJihpLnNyYz1lLCFpLm5hdHVyYWxXaWR0aCk/KGkub25sb2FkPSgpPT57ZmlbZV09YXMoaSksZyh0LE50KCJsb2FkIiwhMSkpfSxhcyhpKSk6ZmlbZV09YXMoaSl9ZnVuY3Rpb24gYXModCl7cmV0dXJue3dpZHRoOnQubmF0dXJhbFdpZHRoLGhlaWdodDp0Lm5hdHVyYWxIZWlnaHR9fWZ1bmN0aW9uIGhlKHQsZSl7ZT09PXZvaWQgMCYmKGU9dyk7Y29uc3QgaT1bXSx7bGVuZ3RoOnN9PXQ7bGV0IG49MDtmb3IobGV0IG89MDtvPHM7bysrKXtsZXRbcixhXT1fKHRbb10pP3Rbb10udHJpbSgpLnNwbGl0KCIgIik6W3Rbb11dO2lmKHI9ZShyKSxhPWE/dyhhKS8xMDA6bnVsbCxvPT09MD9hPT09bnVsbD9hPTA6YSYmaS5wdXNoKFtyLDBdKTpvPT09cy0xJiYoYT09PW51bGw/YT0xOmEhPT0xJiYoaS5wdXNoKFtyLGFdKSxhPTEpKSxpLnB1c2goW3IsYV0pLGE9PT1udWxsKW4rKztlbHNlIGlmKG4pe2NvbnN0IGw9aVtvLW4tMV1bMV0saD0oYS1sKS8obisxKTtmb3IobGV0IHU9bjt1PjA7dS0tKWlbby11XVsxXT1sK2gqKG4tdSsxKTtuPTB9fXJldHVybiBpfWZ1bmN0aW9uIHFuKHQsZSl7Y29uc3QgaT1idCh0LnNsaWNlKDEpLHM9PntsZXRbLG5dPXM7cmV0dXJuIGU8PW59KSsxO3JldHVyblt0W2ktMV1bMF0sdFtpXVswXSwoZS10W2ktMV1bMV0pLyh0W2ldWzFdLXRbaS0xXVsxXSldfWZ1bmN0aW9uIE9lKHQsZSl7Y29uc3RbaSxzLG5dPXFuKHQsZSk7cmV0dXJuIEt0KGkpP2krTWF0aC5hYnMoaS1zKSpuKihpPHM/MTotMSk6K3N9Y29uc3QgbGw9L14tP1xkKyhcUyopLztmdW5jdGlvbiBwaSh0LGUpe2Zvcihjb25zdCBpIG9mIHQpe2NvbnN0IHM9aS5tYXRjaD09bnVsbD92b2lkIDA6aS5tYXRjaChsbCk7aWYocylyZXR1cm4gc1sxXX1yZXR1cm4gZX1mdW5jdGlvbiBfZSh0LGUsaSl7Y29uc3Qgcz10LnN0eWxlW2VdLG49YyhjKHQsZSxpKSxlKTtyZXR1cm4gdC5zdHlsZVtlXT1zLG59ZnVuY3Rpb24gVm4odCxlKXtyZXR1cm4gdC5yZWR1Y2UoKGkscyk9PihpW3NdPWUsaSkse30pfXZhciBobD17bWl4aW5zOltGbix3dCxUZV0scHJvcHM6e3RhcmdldDpTdHJpbmcsdmlld3BvcnQ6TnVtYmVyLGVhc2luZzpOdW1iZXIsc3RhcnQ6U3RyaW5nLGVuZDpTdHJpbmd9LGRhdGE6e3RhcmdldDohMSx2aWV3cG9ydDoxLGVhc2luZzoxLHN0YXJ0OjAsZW5kOjB9LGNvbXB1dGVkOnt0YXJnZXQodCxlKXtsZXR7dGFyZ2V0Oml9PXQ7cmV0dXJuIFluKGkmJmR0KGksZSl8fGUpfSxzdGFydCh0KXtsZXR7c3RhcnQ6ZX09dDtyZXR1cm4gSihlLCJoZWlnaHQiLHRoaXMudGFyZ2V0LCEwKX0sZW5kKHQpe2xldHtlbmQ6ZSx2aWV3cG9ydDppfT10O3JldHVybiBKKGV8fChpPSgxLWkpKjEwMCkmJmkrInZoKyIraSsiJSIsImhlaWdodCIsdGhpcy50YXJnZXQsITApfX0sdXBkYXRlOntyZWFkKHQsZSl7bGV0e3BlcmNlbnQ6aX09dDtpZihlLmhhcygic2Nyb2xsIil8fChpPSExKSwhdGhpcy5tYXRjaE1lZGlhKXJldHVybjtjb25zdCBzPWk7cmV0dXJuIGk9Y2woWGkodGhpcy50YXJnZXQsdGhpcy5zdGFydCx0aGlzLmVuZCksdGhpcy5lYXNpbmcpLHtwZXJjZW50Omksc3R5bGU6cz09PWk/ITE6dGhpcy5nZXRDc3MoaSl9fSx3cml0ZSh0KXtsZXR7c3R5bGU6ZX09dDtpZighdGhpcy5tYXRjaE1lZGlhKXt0aGlzLnJlc2V0KCk7cmV0dXJufWUmJmModGhpcy4kZWwsZSl9LGV2ZW50czpbInNjcm9sbCIsInJlc2l6ZSJdfX07ZnVuY3Rpb24gY2wodCxlKXtyZXR1cm4gZT49MD9NYXRoLnBvdyh0LGUrMSk6MS1NYXRoLnBvdygxLXQsMS1lKX1mdW5jdGlvbiBZbih0KXtyZXR1cm4gdD8ib2Zmc2V0VG9wImluIHQ/dDpZbihQKHQpKTpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9dmFyIFhuPXt1cGRhdGU6e3dyaXRlKCl7aWYodGhpcy5zdGFjay5sZW5ndGh8fHRoaXMuZHJhZ2dpbmcpcmV0dXJuO2NvbnN0IHQ9dGhpcy5nZXRWYWxpZEluZGV4KHRoaXMuaW5kZXgpOyghfnRoaXMucHJldkluZGV4fHx0aGlzLmluZGV4IT09dCkmJnRoaXMuc2hvdyh0KX0sZXZlbnRzOlsicmVzaXplIl19fSxHbj17bWl4aW5zOltTZV0sY29ubmVjdGVkKCl7dGhpcy5sYXp5bG9hZCh0aGlzLnNsaWRlcyx0aGlzLmdldEFkamFjZW50U2xpZGVzKX19O2Z1bmN0aW9uIHVsKHQsZSxpLHMpe2xldHtjZW50ZXI6bixlYXNpbmc6byxsaXN0OnJ9PXM7Y29uc3QgYT1uZXcgRmUsbD10P0JlKHQscixuKTpCZShlLHIsbikreChlKS53aWR0aCppLGg9ZT9CZShlLHIsbik6bCt4KHQpLndpZHRoKmkqKFg/LTE6MSk7cmV0dXJue2RpcjppLHNob3codSxkLGYpe2Q9PT12b2lkIDAmJihkPTApO2NvbnN0IG09Zj8ibGluZWFyIjpvO3JldHVybiB1LT1NYXRoLnJvdW5kKHUqWihkLC0xLDEpKSx0aGlzLnRyYW5zbGF0ZShkKSxkPXQ/ZDpaKGQsMCwxKSxscyh0aGlzLmdldEl0ZW1JbigpLCJpdGVtaW4iLHtwZXJjZW50OmQsZHVyYXRpb246dSx0aW1pbmc6bSxkaXI6aX0pLHQmJmxzKHRoaXMuZ2V0SXRlbUluKCEwKSwiaXRlbW91dCIse3BlcmNlbnQ6MS1kLGR1cmF0aW9uOnUsdGltaW5nOm0sZGlyOml9KSxTLnN0YXJ0KHIse3RyYW5zZm9ybTpIKC1oKihYPy0xOjEpLCJweCIpfSx1LG0pLnRoZW4oYS5yZXNvbHZlLFQpLGEucHJvbWlzZX0sY2FuY2VsKCl7Uy5jYW5jZWwocil9LHJlc2V0KCl7YyhyLCJ0cmFuc2Zvcm0iLCIiKX0sZm9yd2FyZCh1LGQpe3JldHVybiBkPT09dm9pZCAwJiYoZD10aGlzLnBlcmNlbnQoKSksUy5jYW5jZWwociksdGhpcy5zaG93KHUsZCwhMCl9LHRyYW5zbGF0ZSh1KXtjb25zdCBkPXRoaXMuZ2V0RGlzdGFuY2UoKSppKihYPy0xOjEpO2MociwidHJhbnNmb3JtIixIKFooLWgrKGQtZCp1KSwtZ2kocikseChyKS53aWR0aCkqKFg/LTE6MSksInB4IikpO2NvbnN0IGY9dGhpcy5nZXRBY3RpdmVzKCksbT10aGlzLmdldEl0ZW1JbigpLEM9dGhpcy5nZXRJdGVtSW4oITApO3U9dD9aKHUsLTEsMSk6MDtmb3IoY29uc3QgRSBvZiBNKHIpKXtjb25zdCBVPXAoZixFKSxGPUU9PT1tLGNlPUU9PT1DLGhzPUZ8fCFjZSYmKFV8fGkqKFg/LTE6MSk9PT0tMV5taShFLHIpPm1pKHR8fGUpKTtscyhFLCJpdGVtdHJhbnNsYXRlIisoaHM/ImluIjoib3V0Iikse2RpcjppLHBlcmNlbnQ6Y2U/MS11OkY/dTpVPzE6MH0pfX0scGVyY2VudCgpe3JldHVybiBNYXRoLmFicygoYyhyLCJ0cmFuc2Zvcm0iKS5zcGxpdCgiLCIpWzRdKihYPy0xOjEpK2wpLyhoLWwpKX0sZ2V0RGlzdGFuY2UoKXtyZXR1cm4gTWF0aC5hYnMoaC1sKX0sZ2V0SXRlbUluKHUpe3U9PT12b2lkIDAmJih1PSExKTtsZXQgZD10aGlzLmdldEFjdGl2ZXMoKSxmPUtuKHIsQmUoZXx8dCxyLG4pKTtpZih1KXtjb25zdCBtPWQ7ZD1mLGY9bX1yZXR1cm4gZltidChmLG09PiFwKGQsbSkpXX0sZ2V0QWN0aXZlcygpe3JldHVybiBLbihyLEJlKHR8fGUscixuKSl9fX1mdW5jdGlvbiBCZSh0LGUsaSl7Y29uc3Qgcz1taSh0LGUpO3JldHVybiBpP3MtZGwodCxlKTpNYXRoLm1pbihzLEpuKGUpKX1mdW5jdGlvbiBKbih0KXtyZXR1cm4gTWF0aC5tYXgoMCxnaSh0KS14KHQpLndpZHRoKX1mdW5jdGlvbiBnaSh0KXtyZXR1cm4gTSh0KS5yZWR1Y2UoKGUsaSk9PngoaSkud2lkdGgrZSwwKX1mdW5jdGlvbiBkbCh0LGUpe3JldHVybiB4KGUpLndpZHRoLzIteCh0KS53aWR0aC8yfWZ1bmN0aW9uIG1pKHQsZSl7cmV0dXJuIHQmJihSZSh0KS5sZWZ0KyhYP3godCkud2lkdGgteChlKS53aWR0aDowKSkqKFg/LTE6MSl8fDB9ZnVuY3Rpb24gS24odCxlKXtlLT0xO2NvbnN0IGk9eCh0KS53aWR0aCxzPWUraSsyO3JldHVybiBNKHQpLmZpbHRlcihuPT57Y29uc3Qgbz1taShuLHQpLHI9bytNYXRoLm1pbih4KG4pLndpZHRoLGkpO3JldHVybiBvPj1lJiZyPD1zfSl9ZnVuY3Rpb24gbHModCxlLGkpe2codCxOdChlLCExLCExLGkpKX12YXIgZmw9e21peGluczpbbnQsTW4sWG4sR25dLHByb3BzOntjZW50ZXI6Qm9vbGVhbixzZXRzOkJvb2xlYW59LGRhdGE6e2NlbnRlcjohMSxzZXRzOiExLGF0dHJJdGVtOiJ1ay1zbGlkZXItaXRlbSIsc2VsTGlzdDoiLnVrLXNsaWRlci1pdGVtcyIsc2VsTmF2OiIudWstc2xpZGVyLW5hdiIsY2xzQ29udGFpbmVyOiJ1ay1zbGlkZXItY29udGFpbmVyIixUcmFuc2l0aW9uZXI6dWx9LGNvbXB1dGVkOnthdmdXaWR0aCgpe3JldHVybiBnaSh0aGlzLmxpc3QpL3RoaXMubGVuZ3RofSxmaW5pdGUodCl7bGV0e2Zpbml0ZTplfT10O3JldHVybiBlfHxNYXRoLmNlaWwoZ2kodGhpcy5saXN0KSk8TWF0aC50cnVuYyh4KHRoaXMubGlzdCkud2lkdGgrcGwodGhpcy5saXN0KSt0aGlzLmNlbnRlcil9LG1heEluZGV4KCl7aWYoIXRoaXMuZmluaXRlfHx0aGlzLmNlbnRlciYmIXRoaXMuc2V0cylyZXR1cm4gdGhpcy5sZW5ndGgtMTtpZih0aGlzLmNlbnRlcilyZXR1cm4gWnQodGhpcy5zZXRzKTtsZXQgdD0wO2NvbnN0IGU9Sm4odGhpcy5saXN0KSxpPWJ0KHRoaXMuc2xpZGVzLHM9PntpZih0Pj1lKXJldHVybiEwO3QrPXgocykud2lkdGh9KTtyZXR1cm5+aT9pOnRoaXMubGVuZ3RoLTF9LHNldHModCl7bGV0e3NldHM6ZX09dDtpZighZSlyZXR1cm47bGV0IGk9MDtjb25zdCBzPVtdLG49eCh0aGlzLmxpc3QpLndpZHRoO2ZvcihsZXQgbz0wO288dGhpcy5zbGlkZXMubGVuZ3RoO28rKyl7Y29uc3Qgcj14KHRoaXMuc2xpZGVzW29dKS53aWR0aDtpK3I+biYmKGk9MCksdGhpcy5jZW50ZXI/aTxuLzImJmkrcit4KHRoaXMuc2xpZGVzWytvKzFdKS53aWR0aC8yPm4vMiYmKHMucHVzaCgrbyksaT1uLzItci8yKTppPT09MCYmcy5wdXNoKE1hdGgubWluKCtvLHRoaXMubWF4SW5kZXgpKSxpKz1yfWlmKHMubGVuZ3RoKXJldHVybiBzfSx0cmFuc2l0aW9uT3B0aW9ucygpe3JldHVybntjZW50ZXI6dGhpcy5jZW50ZXIsbGlzdDp0aGlzLmxpc3R9fX0sY29ubmVjdGVkKCl7Vyh0aGlzLiRlbCx0aGlzLmNsc0NvbnRhaW5lciwhdigiLiIrdGhpcy5jbHNDb250YWluZXIsdGhpcy4kZWwpKX0sdXBkYXRlOnt3cml0ZSgpe2Zvcihjb25zdCB0IG9mIHRoaXMubmF2SXRlbXMpe2NvbnN0IGU9Q3QoYXQodCx0aGlzLmF0dHJJdGVtKSk7ZSE9PSExJiYodC5oaWRkZW49IXRoaXMubWF4SW5kZXh8fGU+dGhpcy5tYXhJbmRleHx8dGhpcy5zZXRzJiYhcCh0aGlzLnNldHMsZSkpfXRoaXMubGVuZ3RoJiYhdGhpcy5kcmFnZ2luZyYmIXRoaXMuc3RhY2subGVuZ3RoJiYodGhpcy5yZW9yZGVyKCksdGhpcy5fdHJhbnNsYXRlKDEpKSx0aGlzLnVwZGF0ZUFjdGl2ZUNsYXNzZXMoKX0sZXZlbnRzOlsicmVzaXplIl19LGV2ZW50czp7YmVmb3JlaXRlbXNob3codCl7IXRoaXMuZHJhZ2dpbmcmJnRoaXMuc2V0cyYmdGhpcy5zdGFjay5sZW5ndGg8MiYmIXAodGhpcy5zZXRzLHRoaXMuaW5kZXgpJiYodGhpcy5pbmRleD10aGlzLmdldFZhbGlkSW5kZXgoKSk7Y29uc3QgZT1NYXRoLmFicyh0aGlzLmluZGV4LXRoaXMucHJldkluZGV4Kyh0aGlzLmRpcj4wJiZ0aGlzLmluZGV4PHRoaXMucHJldkluZGV4fHx0aGlzLmRpcjwwJiZ0aGlzLmluZGV4PnRoaXMucHJldkluZGV4Pyh0aGlzLm1heEluZGV4KzEpKnRoaXMuZGlyOjApKTtpZighdGhpcy5kcmFnZ2luZyYmZT4xKXtmb3IobGV0IHM9MDtzPGU7cysrKXRoaXMuc3RhY2suc3BsaWNlKDEsMCx0aGlzLmRpcj4wPyJuZXh0IjoicHJldmlvdXMiKTt0LnByZXZlbnREZWZhdWx0KCk7cmV0dXJufWNvbnN0IGk9dGhpcy5kaXI8MHx8IXRoaXMuc2xpZGVzW3RoaXMucHJldkluZGV4XT90aGlzLmluZGV4OnRoaXMucHJldkluZGV4O3RoaXMuZHVyYXRpb249RG4odGhpcy5hdmdXaWR0aC90aGlzLnZlbG9jaXR5KSooeCh0aGlzLnNsaWRlc1tpXSkud2lkdGgvdGhpcy5hdmdXaWR0aCksdGhpcy5yZW9yZGVyKCl9LGl0ZW1zaG93KCl7fnRoaXMucHJldkluZGV4JiZiKHRoaXMuX2dldFRyYW5zaXRpb25lcigpLmdldEl0ZW1JbigpLHRoaXMuY2xzQWN0aXZlKX0saXRlbXNob3duKCl7dGhpcy51cGRhdGVBY3RpdmVDbGFzc2VzKCl9fSxtZXRob2RzOntyZW9yZGVyKCl7aWYodGhpcy5maW5pdGUpe2ModGhpcy5zbGlkZXMsIm9yZGVyIiwiIik7cmV0dXJufWNvbnN0IHQ9dGhpcy5kaXI+MCYmdGhpcy5zbGlkZXNbdGhpcy5wcmV2SW5kZXhdP3RoaXMucHJldkluZGV4OnRoaXMuaW5kZXg7aWYodGhpcy5zbGlkZXMuZm9yRWFjaCgobixvKT0+YyhuLCJvcmRlciIsdGhpcy5kaXI+MCYmbzx0PzE6dGhpcy5kaXI8MCYmbz49dGhpcy5pbmRleD8tMToiIikpLCF0aGlzLmNlbnRlcilyZXR1cm47Y29uc3QgZT10aGlzLnNsaWRlc1t0XTtsZXQgaT14KHRoaXMubGlzdCkud2lkdGgvMi14KGUpLndpZHRoLzIscz0wO2Zvcig7aT4wOyl7Y29uc3Qgbj10aGlzLmdldEluZGV4KC0tcyt0LHQpLG89dGhpcy5zbGlkZXNbbl07YyhvLCJvcmRlciIsbj50Py0yOi0xKSxpLT14KG8pLndpZHRofX0sdXBkYXRlQWN0aXZlQ2xhc3Nlcygpe2NvbnN0IHQ9dGhpcy5fZ2V0VHJhbnNpdGlvbmVyKHRoaXMuaW5kZXgpLmdldEFjdGl2ZXMoKSxlPVt0aGlzLmNsc0FjdGl2ZSwoIXRoaXMuc2V0c3x8cCh0aGlzLnNldHMsdyh0aGlzLmluZGV4KSkpJiZ0aGlzLmNsc0FjdGl2YXRlZHx8IiJdO2Zvcihjb25zdCBpIG9mIHRoaXMuc2xpZGVzKVcoaSxlLHAodCxpKSl9LGdldFZhbGlkSW5kZXgodCxlKXtpZih0PT09dm9pZCAwJiYodD10aGlzLmluZGV4KSxlPT09dm9pZCAwJiYoZT10aGlzLnByZXZJbmRleCksdD10aGlzLmdldEluZGV4KHQsZSksIXRoaXMuc2V0cylyZXR1cm4gdDtsZXQgaTtkb3tpZihwKHRoaXMuc2V0cyx0KSlyZXR1cm4gdDtpPXQsdD10aGlzLmdldEluZGV4KHQrdGhpcy5kaXIsZSl9d2hpbGUodCE9PWkpO3JldHVybiB0fSxnZXRBZGphY2VudFNsaWRlcygpe2NvbnN0e3dpZHRoOnR9PXgodGhpcy5saXN0KSxlPS10LGk9dCoyLHM9eCh0aGlzLnNsaWRlc1t0aGlzLmluZGV4XSkud2lkdGgsbj10aGlzLmNlbnRlcj90LzItcy8yOjAsbz1uZXcgU2V0O2Zvcihjb25zdCByIG9mWy0xLDFdKXtsZXQgYT1uKyhyPjA/czowKSxsPTA7ZG97Y29uc3QgaD10aGlzLnNsaWRlc1t0aGlzLmdldEluZGV4KHRoaXMuaW5kZXgrcitsKysqcildO2ErPXgoaCkud2lkdGgqcixvLmFkZChoKX13aGlsZSh0aGlzLnNsaWRlcy5sZW5ndGg+bCYmYT5lJiZhPGkpfXJldHVybiBBcnJheS5mcm9tKG8pfX19O2Z1bmN0aW9uIHBsKHQpe3JldHVybiBNYXRoLm1heCgwLC4uLk0odCkubWFwKGU9PngoZSkud2lkdGgpKX12YXIgWm49e21peGluczpbRm5dLGRhdGE6e3NlbEl0ZW06IiFsaSJ9LGJlZm9yZUNvbm5lY3QoKXt0aGlzLml0ZW09ZHQodGhpcy5zZWxJdGVtLHRoaXMuJGVsKX0sZGlzY29ubmVjdGVkKCl7dGhpcy5pdGVtPW51bGx9LGV2ZW50czpbe25hbWU6Iml0ZW1pbiBpdGVtb3V0IixzZWxmOiEwLGVsKCl7cmV0dXJuIHRoaXMuaXRlbX0saGFuZGxlcih0KXtsZXR7dHlwZTplLGRldGFpbDp7cGVyY2VudDppLGR1cmF0aW9uOnMsdGltaW5nOm4sZGlyOm99fT10O3oucmVhZCgoKT0+e2NvbnN0IHI9dGhpcy5nZXRDc3MoVW4oZSxvLGkpKSxhPXRoaXMuZ2V0Q3NzKFFuKGUpPy41Om8+MD8xOjApO3oud3JpdGUoKCk9PntjKHRoaXMuJGVsLHIpLFMuc3RhcnQodGhpcy4kZWwsYSxzLG4pLmNhdGNoKFQpfSl9KX19LHtuYW1lOiJ0cmFuc2l0aW9uY2FuY2VsZWQgdHJhbnNpdGlvbmVuZCIsc2VsZjohMCxlbCgpe3JldHVybiB0aGlzLml0ZW19LGhhbmRsZXIoKXtTLmNhbmNlbCh0aGlzLiRlbCl9fSx7bmFtZToiaXRlbXRyYW5zbGF0ZWluIGl0ZW10cmFuc2xhdGVvdXQiLHNlbGY6ITAsZWwoKXtyZXR1cm4gdGhpcy5pdGVtfSxoYW5kbGVyKHQpe2xldHt0eXBlOmUsZGV0YWlsOntwZXJjZW50OmksZGlyOnN9fT10O3oucmVhZCgoKT0+e2NvbnN0IG49dGhpcy5nZXRDc3MoVW4oZSxzLGkpKTt6LndyaXRlKCgpPT5jKHRoaXMuJGVsLG4pKX0pfX1dfTtmdW5jdGlvbiBRbih0KXtyZXR1cm4gWHQodCwiaW4iKX1mdW5jdGlvbiBVbih0LGUsaSl7cmV0dXJuIGkvPTIsUW4odCleZTwwP2k6MS1pfXZhciBnbD17Li4uc3MsZmFkZTp7c2hvdygpe3JldHVyblt7b3BhY2l0eTowLHpJbmRleDowfSx7ekluZGV4Oi0xfV19LHBlcmNlbnQodCl7cmV0dXJuIDEtYyh0LCJvcGFjaXR5Iil9LHRyYW5zbGF0ZSh0KXtyZXR1cm5be29wYWNpdHk6MS10LHpJbmRleDowfSx7ekluZGV4Oi0xfV19fSxzY2FsZTp7c2hvdygpe3JldHVyblt7b3BhY2l0eTowLHRyYW5zZm9ybTpsZSgxKy41KSx6SW5kZXg6MH0se3pJbmRleDotMX1dfSxwZXJjZW50KHQpe3JldHVybiAxLWModCwib3BhY2l0eSIpfSx0cmFuc2xhdGUodCl7cmV0dXJuW3tvcGFjaXR5OjEtdCx0cmFuc2Zvcm06bGUoMSsuNSp0KSx6SW5kZXg6MH0se3pJbmRleDotMX1dfX0scHVsbDp7c2hvdyh0KXtyZXR1cm4gdDwwP1t7dHJhbnNmb3JtOkgoMzApLHpJbmRleDotMX0se3RyYW5zZm9ybTpIKCksekluZGV4OjB9XTpbe3RyYW5zZm9ybTpIKC0xMDApLHpJbmRleDowfSx7dHJhbnNmb3JtOkgoKSx6SW5kZXg6LTF9XX0scGVyY2VudCh0LGUsaSl7cmV0dXJuIGk8MD8xLVBlKGUpOlBlKHQpfSx0cmFuc2xhdGUodCxlKXtyZXR1cm4gZTwwP1t7dHJhbnNmb3JtOkgoMzAqdCksekluZGV4Oi0xfSx7dHJhbnNmb3JtOkgoLTEwMCooMS10KSksekluZGV4OjB9XTpbe3RyYW5zZm9ybTpIKC10KjEwMCksekluZGV4OjB9LHt0cmFuc2Zvcm06SCgzMCooMS10KSksekluZGV4Oi0xfV19fSxwdXNoOntzaG93KHQpe3JldHVybiB0PDA/W3t0cmFuc2Zvcm06SCgxMDApLHpJbmRleDowfSx7dHJhbnNmb3JtOkgoKSx6SW5kZXg6LTF9XTpbe3RyYW5zZm9ybTpIKC0zMCksekluZGV4Oi0xfSx7dHJhbnNmb3JtOkgoKSx6SW5kZXg6MH1dfSxwZXJjZW50KHQsZSxpKXtyZXR1cm4gaT4wPzEtUGUoZSk6UGUodCl9LHRyYW5zbGF0ZSh0LGUpe3JldHVybiBlPDA/W3t0cmFuc2Zvcm06SCh0KjEwMCksekluZGV4OjB9LHt0cmFuc2Zvcm06SCgtMzAqKDEtdCkpLHpJbmRleDotMX1dOlt7dHJhbnNmb3JtOkgoLTMwKnQpLHpJbmRleDotMX0se3RyYW5zZm9ybTpIKDEwMCooMS10KSksekluZGV4OjB9XX19fSxtbD17bWl4aW5zOltudCxObixYbixHbl0scHJvcHM6e3JhdGlvOlN0cmluZyxtaW5IZWlnaHQ6TnVtYmVyLG1heEhlaWdodDpOdW1iZXJ9LGRhdGE6e3JhdGlvOiIxNjo5IixtaW5IZWlnaHQ6ITEsbWF4SGVpZ2h0OiExLHNlbExpc3Q6Ii51ay1zbGlkZXNob3ctaXRlbXMiLGF0dHJJdGVtOiJ1ay1zbGlkZXNob3ctaXRlbSIsc2VsTmF2OiIudWstc2xpZGVzaG93LW5hdiIsQW5pbWF0aW9uczpnbH0sdXBkYXRlOntyZWFkKCl7aWYoIXRoaXMubGlzdClyZXR1cm4hMTtsZXRbdCxlXT10aGlzLnJhdGlvLnNwbGl0KCI6IikubWFwKE51bWJlcik7cmV0dXJuIGU9ZSp0aGlzLmxpc3Qub2Zmc2V0V2lkdGgvdHx8MCx0aGlzLm1pbkhlaWdodCYmKGU9TWF0aC5tYXgodGhpcy5taW5IZWlnaHQsZSkpLHRoaXMubWF4SGVpZ2h0JiYoZT1NYXRoLm1pbih0aGlzLm1heEhlaWdodCxlKSkse2hlaWdodDplLWllKHRoaXMubGlzdCwiaGVpZ2h0IiwiY29udGVudC1ib3giKX19LHdyaXRlKHQpe2xldHtoZWlnaHQ6ZX09dDtlPjAmJmModGhpcy5saXN0LCJtaW5IZWlnaHQiLGUpfSxldmVudHM6WyJyZXNpemUiXX0sbWV0aG9kczp7Z2V0QWRqYWNlbnRTbGlkZXMoKXtyZXR1cm5bMSwtMV0ubWFwKHQ9PnRoaXMuc2xpZGVzW3RoaXMuZ2V0SW5kZXgodGhpcy5pbmRleCt0KV0pfX19LHZsPXttaXhpbnM6W250LEVuXSxwcm9wczp7Z3JvdXA6U3RyaW5nLHRocmVzaG9sZDpOdW1iZXIsY2xzSXRlbTpTdHJpbmcsY2xzUGxhY2Vob2xkZXI6U3RyaW5nLGNsc0RyYWc6U3RyaW5nLGNsc0RyYWdTdGF0ZTpTdHJpbmcsY2xzQmFzZTpTdHJpbmcsY2xzTm9EcmFnOlN0cmluZyxjbHNFbXB0eTpTdHJpbmcsY2xzQ3VzdG9tOlN0cmluZyxoYW5kbGU6U3RyaW5nfSxkYXRhOntncm91cDohMSx0aHJlc2hvbGQ6NSxjbHNJdGVtOiJ1ay1zb3J0YWJsZS1pdGVtIixjbHNQbGFjZWhvbGRlcjoidWstc29ydGFibGUtcGxhY2Vob2xkZXIiLGNsc0RyYWc6InVrLXNvcnRhYmxlLWRyYWciLGNsc0RyYWdTdGF0ZToidWstZHJhZyIsY2xzQmFzZToidWstc29ydGFibGUiLGNsc05vRHJhZzoidWstc29ydGFibGUtbm9kcmFnIixjbHNFbXB0eToidWstc29ydGFibGUtZW1wdHkiLGNsc0N1c3RvbToiIixoYW5kbGU6ITEscG9zOnt9fSxjcmVhdGVkKCl7Zm9yKGNvbnN0IHQgb2ZbImluaXQiLCJzdGFydCIsIm1vdmUiLCJlbmQiXSl7Y29uc3QgZT10aGlzW3RdO3RoaXNbdF09aT0+e3h0KHRoaXMucG9zLGVlKGkpKSxlKGkpfX19LGV2ZW50czp7bmFtZTpndCxwYXNzaXZlOiExLGhhbmRsZXI6ImluaXQifSxjb21wdXRlZDp7dGFyZ2V0KCl7cmV0dXJuKHRoaXMuJGVsLnRCb2RpZXN8fFt0aGlzLiRlbF0pWzBdfSxpdGVtcygpe3JldHVybiBNKHRoaXMudGFyZ2V0KX0saXNFbXB0eTp7Z2V0KCl7cmV0dXJuIGZlKHRoaXMuaXRlbXMpfSx3YXRjaCh0KXtXKHRoaXMudGFyZ2V0LHRoaXMuY2xzRW1wdHksdCl9LGltbWVkaWF0ZTohMH0saGFuZGxlczp7Z2V0KHQsZSl7bGV0e2hhbmRsZTppfT10O3JldHVybiBpP0QoaSxlKTp0aGlzLml0ZW1zfSx3YXRjaCh0LGUpe2MoZSx7dG91Y2hBY3Rpb246IiIsdXNlclNlbGVjdDoiIn0pLGModCx7dG91Y2hBY3Rpb246V3Q/Im5vbmUiOiIiLHVzZXJTZWxlY3Q6Im5vbmUifSl9LGltbWVkaWF0ZTohMH19LHVwZGF0ZTp7d3JpdGUodCl7aWYoIXRoaXMuZHJhZ3x8IVAodGhpcy5wbGFjZWhvbGRlcikpcmV0dXJuO2NvbnN0e3Bvczp7eDplLHk6aX0sb3JpZ2luOntvZmZzZXRUb3A6cyxvZmZzZXRMZWZ0Om59LHBsYWNlaG9sZGVyOm99PXRoaXM7Yyh0aGlzLmRyYWcse3RvcDppLXMsbGVmdDplLW59KTtjb25zdCByPXRoaXMuZ2V0U29ydGFibGUoZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLGkpKTtpZighcilyZXR1cm47Y29uc3R7aXRlbXM6YX09cjtpZihhLnNvbWUoUy5pblByb2dyZXNzKSlyZXR1cm47Y29uc3QgbD15bChhLHt4OmUseTppfSk7aWYoYS5sZW5ndGgmJighbHx8bD09PW8pKXJldHVybjtjb25zdCBoPXRoaXMuZ2V0U29ydGFibGUobyksdT0kbChyLnRhcmdldCxsLG8sZSxpLHI9PT1oJiZ0Lm1vdmVkIT09bCk7dSE9PSExJiYodSYmbz09PXV8fChyIT09aD8oaC5yZW1vdmUobyksdC5tb3ZlZD1sKTpkZWxldGUgdC5tb3ZlZCxyLmluc2VydChvLHUpLHRoaXMudG91Y2hlZC5hZGQocikpKX0sZXZlbnRzOlsibW92ZSJdfSxtZXRob2RzOntpbml0KHQpe2NvbnN0e3RhcmdldDplLGJ1dHRvbjppLGRlZmF1bHRQcmV2ZW50ZWQ6c309dCxbbl09dGhpcy5pdGVtcy5maWx0ZXIobz0+QihlLG8pKTshbnx8c3x8aT4wfHxJaShlKXx8QihlLCIuIit0aGlzLmNsc05vRHJhZyl8fHRoaXMuaGFuZGxlJiYhQihlLHRoaXMuaGFuZGxlKXx8KHQucHJldmVudERlZmF1bHQoKSx0aGlzLnRvdWNoZWQ9bmV3IFNldChbdGhpc10pLHRoaXMucGxhY2Vob2xkZXI9bix0aGlzLm9yaWdpbj17dGFyZ2V0OmUsaW5kZXg6dGUobiksLi4udGhpcy5wb3N9LGsoZG9jdW1lbnQsR2UsdGhpcy5tb3ZlKSxrKGRvY3VtZW50LEF0LHRoaXMuZW5kKSx0aGlzLnRocmVzaG9sZHx8dGhpcy5zdGFydCh0KSl9LHN0YXJ0KHQpe3RoaXMuZHJhZz14bCh0aGlzLiRjb250YWluZXIsdGhpcy5wbGFjZWhvbGRlcik7Y29uc3R7bGVmdDplLHRvcDppfT10aGlzLnBsYWNlaG9sZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3h0KHRoaXMub3JpZ2luLHtvZmZzZXRMZWZ0OnRoaXMucG9zLngtZSxvZmZzZXRUb3A6dGhpcy5wb3MueS1pfSksYih0aGlzLmRyYWcsdGhpcy5jbHNEcmFnLHRoaXMuY2xzQ3VzdG9tKSxiKHRoaXMucGxhY2Vob2xkZXIsdGhpcy5jbHNQbGFjZWhvbGRlciksYih0aGlzLml0ZW1zLHRoaXMuY2xzSXRlbSksYihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdGhpcy5jbHNEcmFnU3RhdGUpLGcodGhpcy4kZWwsInN0YXJ0IixbdGhpcyx0aGlzLnBsYWNlaG9sZGVyXSksd2wodGhpcy5wb3MpLHRoaXMubW92ZSh0KX0sbW92ZSh0KXt0aGlzLmRyYWc/dGhpcy4kZW1pdCgibW92ZSIpOihNYXRoLmFicyh0aGlzLnBvcy54LXRoaXMub3JpZ2luLngpPnRoaXMudGhyZXNob2xkfHxNYXRoLmFicyh0aGlzLnBvcy55LXRoaXMub3JpZ2luLnkpPnRoaXMudGhyZXNob2xkKSYmdGhpcy5zdGFydCh0KX0sZW5kKCl7aWYoRHQoZG9jdW1lbnQsR2UsdGhpcy5tb3ZlKSxEdChkb2N1bWVudCxBdCx0aGlzLmVuZCksIXRoaXMuZHJhZylyZXR1cm47YmwoKTtjb25zdCB0PXRoaXMuZ2V0U29ydGFibGUodGhpcy5wbGFjZWhvbGRlcik7dGhpcz09PXQ/dGhpcy5vcmlnaW4uaW5kZXghPT10ZSh0aGlzLnBsYWNlaG9sZGVyKSYmZyh0aGlzLiRlbCwibW92ZWQiLFt0aGlzLHRoaXMucGxhY2Vob2xkZXJdKTooZyh0LiRlbCwiYWRkZWQiLFt0LHRoaXMucGxhY2Vob2xkZXJdKSxnKHRoaXMuJGVsLCJyZW1vdmVkIixbdGhpcyx0aGlzLnBsYWNlaG9sZGVyXSkpLGcodGhpcy4kZWwsInN0b3AiLFt0aGlzLHRoaXMucGxhY2Vob2xkZXJdKSxjdCh0aGlzLmRyYWcpLHRoaXMuZHJhZz1udWxsO2Zvcihjb25zdHtjbHNQbGFjZWhvbGRlcjplLGNsc0l0ZW06aX1vZiB0aGlzLnRvdWNoZWQpZm9yKGNvbnN0IHMgb2YgdGhpcy50b3VjaGVkKU8ocy5pdGVtcyxlLGkpO3RoaXMudG91Y2hlZD1udWxsLE8oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHRoaXMuY2xzRHJhZ1N0YXRlKX0saW5zZXJ0KHQsZSl7Yih0aGlzLml0ZW1zLHRoaXMuY2xzSXRlbSk7Y29uc3QgaT0oKT0+ZT96aShlLHQpOmoodGhpcy50YXJnZXQsdCk7dGhpcy5hbmltYXRlKGkpfSxyZW1vdmUodCl7IUIodCx0aGlzLnRhcmdldCl8fHRoaXMuYW5pbWF0ZSgoKT0+Y3QodCkpfSxnZXRTb3J0YWJsZSh0KXtkb3tjb25zdCBlPXRoaXMuJGdldENvbXBvbmVudCh0LCJzb3J0YWJsZSIpO2lmKGUmJihlPT09dGhpc3x8dGhpcy5ncm91cCE9PSExJiZlLmdyb3VwPT09dGhpcy5ncm91cCkpcmV0dXJuIGV9d2hpbGUodD1QKHQpKX19fTtsZXQgdG87ZnVuY3Rpb24gd2wodCl7bGV0IGU9RGF0ZS5ub3coKTt0bz1zZXRJbnRlcnZhbCgoKT0+e2xldHt4OmkseTpzfT10O3MrPWRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wO2NvbnN0IG49KERhdGUubm93KCktZSkqLjM7ZT1EYXRlLm5vdygpLFEoZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChpLHQueSksL2F1dG98c2Nyb2xsLykucmV2ZXJzZSgpLnNvbWUobz0+e2xldHtzY3JvbGxUb3A6cixzY3JvbGxIZWlnaHQ6YX09bztjb25zdHt0b3A6bCxib3R0b206aCxoZWlnaHQ6dX09bHQobyk7aWYobDxzJiZsKzM1PnMpci09bjtlbHNlIGlmKGg+cyYmaC0zNTxzKXIrPW47ZWxzZSByZXR1cm47aWYocj4wJiZyPGEtdSlyZXR1cm4gby5zY3JvbGxUb3A9ciwhMH0pfSwxNSl9ZnVuY3Rpb24gYmwoKXtjbGVhckludGVydmFsKHRvKX1mdW5jdGlvbiB4bCh0LGUpe2NvbnN0IGk9aih0LGUub3V0ZXJIVE1MLnJlcGxhY2UoLyhePCkoPzpsaXx0cil8KD86bGl8dHIpKFwvPiQpL2csIiQxZGl2JDIiKSk7cmV0dXJuIGMoaSwibWFyZ2luIiwiMCIsImltcG9ydGFudCIpLGMoaSx7Ym94U2l6aW5nOiJib3JkZXItYm94Iix3aWR0aDplLm9mZnNldFdpZHRoLGhlaWdodDplLm9mZnNldEhlaWdodCxwYWRkaW5nOmMoZSwicGFkZGluZyIpfSksRyhpLmZpcnN0RWxlbWVudENoaWxkLEcoZS5maXJzdEVsZW1lbnRDaGlsZCkpLGl9ZnVuY3Rpb24geWwodCxlKXtyZXR1cm4gdFtidCh0LGk9PkhlKGUsaS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSkpXX1mdW5jdGlvbiAkbCh0LGUsaSxzLG4sbyl7aWYoIU0odCkubGVuZ3RoKXJldHVybjtjb25zdCByPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIW8pcmV0dXJuIGtsKHQsaSl8fG48ci50b3Arci5oZWlnaHQvMj9lOmUubmV4dEVsZW1lbnRTaWJsaW5nO2NvbnN0IGE9aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxsPWVvKFtyLnRvcCxyLmJvdHRvbV0sW2EudG9wLGEuYm90dG9tXSksaD1sP3M6bix1PWw/IndpZHRoIjoiaGVpZ2h0IixkPWw/ImxlZnQiOiJ0b3AiLGY9bD8icmlnaHQiOiJib3R0b20iLG09YVt1XTxyW3VdP3JbdV0tYVt1XTowO3JldHVybiBhW2RdPHJbZF0/bSYmaDxyW2RdK20/ITE6ZS5uZXh0RWxlbWVudFNpYmxpbmc6bSYmaD5yW2ZdLW0/ITE6ZX1mdW5jdGlvbiBrbCh0LGUpe2NvbnN0IGk9TSh0KS5sZW5ndGg9PT0xO2kmJmoodCxlKTtjb25zdCBzPU0odCksbj1zLnNvbWUoKG8scik9Pntjb25zdCBhPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHMuc2xpY2UocisxKS5zb21lKGw9Pntjb25zdCBoPWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIWVvKFthLmxlZnQsYS5yaWdodF0sW2gubGVmdCxoLnJpZ2h0XSl9KX0pO3JldHVybiBpJiZjdChlKSxufWZ1bmN0aW9uIGVvKHQsZSl7cmV0dXJuIHRbMV0+ZVswXSYmZVsxXT50WzBdfXZhciBTbD17bWl4aW5zOlthZSxFdCxRc10sYXJnczoidGl0bGUiLHByb3BzOntkZWxheTpOdW1iZXIsdGl0bGU6U3RyaW5nfSxkYXRhOntwb3M6InRvcCIsdGl0bGU6IiIsZGVsYXk6MCxhbmltYXRpb246WyJ1ay1hbmltYXRpb24tc2NhbGUtdXAiXSxkdXJhdGlvbjoxMDAsY2xzOiJ1ay1hY3RpdmUifSxiZWZvcmVDb25uZWN0KCl7dGhpcy5faGFzVGl0bGU9SXQodGhpcy4kZWwsInRpdGxlIikseSh0aGlzLiRlbCwidGl0bGUiLCIiKSx0aGlzLnVwZGF0ZUFyaWEoITEpLFRsKHRoaXMuJGVsKX0sZGlzY29ubmVjdGVkKCl7dGhpcy5oaWRlKCkseSh0aGlzLiRlbCwidGl0bGUiLHRoaXMuX2hhc1RpdGxlP3RoaXMudGl0bGU6bnVsbCl9LG1ldGhvZHM6e3Nob3coKXt0aGlzLmlzVG9nZ2xlZCh0aGlzLnRvb2x0aXB8fG51bGwpfHwhdGhpcy50aXRsZXx8KHRoaXMuX3VuYmluZD1OKGRvY3VtZW50LCJzaG93IGtleWRvd24gIitndCx0aGlzLmhpZGUsITEsdD0+dC50eXBlPT09Z3QmJiFCKHQudGFyZ2V0LHRoaXMuJGVsKXx8dC50eXBlPT09ImtleWRvd24iJiZ0LmtleUNvZGU9PT0yN3x8dC50eXBlPT09InNob3ciJiZ0LmRldGFpbFswXSE9PXRoaXMmJnQuZGV0YWlsWzBdLiRuYW1lPT09dGhpcy4kbmFtZSksY2xlYXJUaW1lb3V0KHRoaXMuc2hvd1RpbWVyKSx0aGlzLnNob3dUaW1lcj1zZXRUaW1lb3V0KHRoaXMuX3Nob3csdGhpcy5kZWxheSkpfSxhc3luYyBoaWRlKCl7TCh0aGlzLiRlbCwiaW5wdXQ6Zm9jdXMiKXx8KGNsZWFyVGltZW91dCh0aGlzLnNob3dUaW1lciksdGhpcy5pc1RvZ2dsZWQodGhpcy50b29sdGlwfHxudWxsKSYmKGF3YWl0IHRoaXMudG9nZ2xlRWxlbWVudCh0aGlzLnRvb2x0aXAsITEsITEpLGN0KHRoaXMudG9vbHRpcCksdGhpcy50b29sdGlwPW51bGwsdGhpcy5fdW5iaW5kKCkpKX0sX3Nob3coKXt0aGlzLnRvb2x0aXA9aih0aGlzLmNvbnRhaW5lciwnPGRpdiBjbGFzcz0idWstJyt0aGlzLiRvcHRpb25zLm5hbWUrJyI+IDxkaXYgY2xhc3M9InVrLScrdGhpcy4kb3B0aW9ucy5uYW1lKyctaW5uZXIiPicrdGhpcy50aXRsZSsiPC9kaXY+IDwvZGl2PiIpLGsodGhpcy50b29sdGlwLCJ0b2dnbGVkIiwodCxlKT0+e2lmKHRoaXMudXBkYXRlQXJpYShlKSwhZSlyZXR1cm47dGhpcy5wb3NpdGlvbkF0KHRoaXMudG9vbHRpcCx0aGlzLiRlbCk7Y29uc3RbaSxzXT1DbCh0aGlzLnRvb2x0aXAsdGhpcy4kZWwsdGhpcy5wb3MpO3RoaXMub3JpZ2luPXRoaXMuYXhpcz09PSJ5Ij9xZShpKSsiLSIrczpzKyItIitxZShpKX0pLHRoaXMudG9nZ2xlRWxlbWVudCh0aGlzLnRvb2x0aXAsITApfSx1cGRhdGVBcmlhKHQpe3kodGhpcy4kZWwsImFyaWEtZXhwYW5kZWQiLHQpfX0sZXZlbnRzOntmb2N1czoic2hvdyIsYmx1cjoiaGlkZSIsW2p0KyIgIituZV0odCl7JHQodCl8fHRoaXNbdC50eXBlPT09anQ/InNob3ciOiJoaWRlIl0oKX0sW2d0XSh0KXskdCh0KSYmdGhpcy5zaG93KCl9fX07ZnVuY3Rpb24gVGwodCl7amUodCl8fHkodCwidGFiaW5kZXgiLCIwIil9ZnVuY3Rpb24gQ2wodCxlLGkpe2xldFtzLG5dPWk7Y29uc3Qgbz1BKHQpLHI9QShlKSxhPVtbImxlZnQiLCJyaWdodCJdLFsidG9wIiwiYm90dG9tIl1dO2Zvcihjb25zdCBoIG9mIGEpe2lmKG9baFswXV0+PXJbaFsxXV0pe3M9aFsxXTticmVha31pZihvW2hbMV1dPD1yW2hbMF1dKXtzPWhbMF07YnJlYWt9fWNvbnN0IGw9cChhWzBdLHMpP2FbMV06YVswXTtyZXR1cm4gb1tsWzBdXT09PXJbbFswXV0/bj1sWzBdOm9bbFsxXV09PT1yW2xbMV1dP249bFsxXTpuPSJjZW50ZXIiLFtzLG5dfXZhciBJbD17cHJvcHM6e2FsbG93OlN0cmluZyxjbHNEcmFnb3ZlcjpTdHJpbmcsY29uY3VycmVudDpOdW1iZXIsbWF4U2l6ZTpOdW1iZXIsbWV0aG9kOlN0cmluZyxtaW1lOlN0cmluZyxtc2dJbnZhbGlkTWltZTpTdHJpbmcsbXNnSW52YWxpZE5hbWU6U3RyaW5nLG1zZ0ludmFsaWRTaXplOlN0cmluZyxtdWx0aXBsZTpCb29sZWFuLG5hbWU6U3RyaW5nLHBhcmFtczpPYmplY3QsdHlwZTpTdHJpbmcsdXJsOlN0cmluZ30sZGF0YTp7YWxsb3c6ITEsY2xzRHJhZ292ZXI6InVrLWRyYWdvdmVyIixjb25jdXJyZW50OjEsbWF4U2l6ZTowLG1ldGhvZDoiUE9TVCIsbWltZTohMSxtc2dJbnZhbGlkTWltZToiSW52YWxpZCBGaWxlIFR5cGU6ICVzIixtc2dJbnZhbGlkTmFtZToiSW52YWxpZCBGaWxlIE5hbWU6ICVzIixtc2dJbnZhbGlkU2l6ZToiSW52YWxpZCBGaWxlIFNpemU6ICVzIEtpbG9ieXRlcyBNYXgiLG11bHRpcGxlOiExLG5hbWU6ImZpbGVzW10iLHBhcmFtczp7fSx0eXBlOiIiLHVybDoiIixhYm9ydDpULGJlZm9yZUFsbDpULGJlZm9yZVNlbmQ6VCxjb21wbGV0ZTpULGNvbXBsZXRlQWxsOlQsZXJyb3I6VCxmYWlsOlQsbG9hZDpULGxvYWRFbmQ6VCxsb2FkU3RhcnQ6VCxwcm9ncmVzczpUfSxldmVudHM6e2NoYW5nZSh0KXshTCh0LnRhcmdldCwnaW5wdXRbdHlwZT0iZmlsZSJdJyl8fCh0LnByZXZlbnREZWZhdWx0KCksdC50YXJnZXQuZmlsZXMmJnRoaXMudXBsb2FkKHQudGFyZ2V0LmZpbGVzKSx0LnRhcmdldC52YWx1ZT0iIil9LGRyb3AodCl7dmkodCk7Y29uc3QgZT10LmRhdGFUcmFuc2ZlcjshKGUhPW51bGwmJmUuZmlsZXMpfHwoTyh0aGlzLiRlbCx0aGlzLmNsc0RyYWdvdmVyKSx0aGlzLnVwbG9hZChlLmZpbGVzKSl9LGRyYWdlbnRlcih0KXt2aSh0KX0sZHJhZ292ZXIodCl7dmkodCksYih0aGlzLiRlbCx0aGlzLmNsc0RyYWdvdmVyKX0sZHJhZ2xlYXZlKHQpe3ZpKHQpLE8odGhpcy4kZWwsdGhpcy5jbHNEcmFnb3Zlcil9fSxtZXRob2RzOnthc3luYyB1cGxvYWQodCl7aWYodD1iaSh0KSwhdC5sZW5ndGgpcmV0dXJuO2codGhpcy4kZWwsInVwbG9hZCIsW3RdKTtmb3IoY29uc3QgcyBvZiB0KXtpZih0aGlzLm1heFNpemUmJnRoaXMubWF4U2l6ZSoxZTM8cy5zaXplKXt0aGlzLmZhaWwodGhpcy5tc2dJbnZhbGlkU2l6ZS5yZXBsYWNlKCIlcyIsdGhpcy5tYXhTaXplKSk7cmV0dXJufWlmKHRoaXMuYWxsb3cmJiFpbyh0aGlzLmFsbG93LHMubmFtZSkpe3RoaXMuZmFpbCh0aGlzLm1zZ0ludmFsaWROYW1lLnJlcGxhY2UoIiVzIix0aGlzLmFsbG93KSk7cmV0dXJufWlmKHRoaXMubWltZSYmIWlvKHRoaXMubWltZSxzLnR5cGUpKXt0aGlzLmZhaWwodGhpcy5tc2dJbnZhbGlkTWltZS5yZXBsYWNlKCIlcyIsdGhpcy5taW1lKSk7cmV0dXJufX10aGlzLm11bHRpcGxlfHwodD10LnNsaWNlKDAsMSkpLHRoaXMuYmVmb3JlQWxsKHRoaXMsdCk7Y29uc3QgZT1QbCh0LHRoaXMuY29uY3VycmVudCksaT1hc3luYyBzPT57Y29uc3Qgbj1uZXcgRm9ybURhdGE7cy5mb3JFYWNoKG89Pm4uYXBwZW5kKHRoaXMubmFtZSxvKSk7Zm9yKGNvbnN0IG8gaW4gdGhpcy5wYXJhbXMpbi5hcHBlbmQobyx0aGlzLnBhcmFtc1tvXSk7dHJ5e2NvbnN0IG89YXdhaXQgd3ModGhpcy51cmwse2RhdGE6bixtZXRob2Q6dGhpcy5tZXRob2QscmVzcG9uc2VUeXBlOnRoaXMudHlwZSxiZWZvcmVTZW5kOnI9Pntjb25zdHt4aHI6YX09cjthLnVwbG9hZCYmayhhLnVwbG9hZCwicHJvZ3Jlc3MiLHRoaXMucHJvZ3Jlc3MpO2Zvcihjb25zdCBsIG9mWyJsb2FkU3RhcnQiLCJsb2FkIiwibG9hZEVuZCIsImFib3J0Il0payhhLGwudG9Mb3dlckNhc2UoKSx0aGlzW2xdKTtyZXR1cm4gdGhpcy5iZWZvcmVTZW5kKHIpfX0pO3RoaXMuY29tcGxldGUobyksZS5sZW5ndGg/YXdhaXQgaShlLnNoaWZ0KCkpOnRoaXMuY29tcGxldGVBbGwobyl9Y2F0Y2gobyl7dGhpcy5lcnJvcihvKX19O2F3YWl0IGkoZS5zaGlmdCgpKX19fTtmdW5jdGlvbiBpbyh0LGUpe3JldHVybiBlLm1hdGNoKG5ldyBSZWdFeHAoIl4iK3QucmVwbGFjZSgvXC8vZywiXFwvIikucmVwbGFjZSgvXCpcKi9nLCIoXFwvW15cXC9dKykqIikucmVwbGFjZSgvXCovZywiW15cXC9dKyIpLnJlcGxhY2UoLygoPyFcXCkpXD8vZywiJDEuIikrIiQiLCJpIikpfWZ1bmN0aW9uIFBsKHQsZSl7Y29uc3QgaT1bXTtmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrPWUpaS5wdXNoKHQuc2xpY2UocyxzK2UpKTtyZXR1cm4gaX1mdW5jdGlvbiB2aSh0KXt0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKX12YXIgQWw9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQ291bnRkb3duOkRhLEZpbHRlcjpMYSxMaWdodGJveDpVYSxMaWdodGJveFBhbmVsOnpuLE5vdGlmaWNhdGlvbjplbCxQYXJhbGxheDpobCxTbGlkZXI6ZmwsU2xpZGVyUGFyYWxsYXg6Wm4sU2xpZGVzaG93Om1sLFNsaWRlc2hvd1BhcmFsbGF4OlpuLFNvcnRhYmxlOnZsLFRvb2x0aXA6U2wsVXBsb2FkOklsfSk7cmV0dXJuIHl0KEFsLCh0LGUpPT5zdC5jb21wb25lbnQoZSx0KSksc3R9KTsK]]></data>
	</file>
	<file>
	  <filename>/js/underscore-esm-min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gICAgIFVuZGVyc2NvcmUuanMgMS4xMy42Ci8vICAgICBodHRwczovL3VuZGVyc2NvcmVqcy5vcmcKLy8gICAgIChjKSAyMDA5LTIwMjIgSmVyZW15IEFzaGtlbmFzLCBKdWxpYW4gR29uZ2dyaWpwLCBhbmQgRG9jdW1lbnRDbG91ZCBhbmQgSW52ZXN0aWdhdGl2ZSBSZXBvcnRlcnMgJiBFZGl0b3JzCi8vICAgICBVbmRlcnNjb3JlIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgp2YXIgVkVSU0lPTj0iMS4xMy42Iixyb290PSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZi5zZWxmPT09c2VsZiYmc2VsZnx8Im9iamVjdCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbC5nbG9iYWw9PT1nbG9iYWwmJmdsb2JhbHx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKXx8e30sQXJyYXlQcm90bz1BcnJheS5wcm90b3R5cGUsT2JqUHJvdG89T2JqZWN0LnByb3RvdHlwZSxTeW1ib2xQcm90bz0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbD9TeW1ib2wucHJvdG90eXBlOm51bGwscHVzaD1BcnJheVByb3RvLnB1c2gsc2xpY2U9QXJyYXlQcm90by5zbGljZSx0b1N0cmluZz1PYmpQcm90by50b1N0cmluZyxoYXNPd25Qcm9wZXJ0eT1PYmpQcm90by5oYXNPd25Qcm9wZXJ0eSxzdXBwb3J0c0FycmF5QnVmZmVyPSJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXIsc3VwcG9ydHNEYXRhVmlldz0idW5kZWZpbmVkIiE9dHlwZW9mIERhdGFWaWV3LG5hdGl2ZUlzQXJyYXk9QXJyYXkuaXNBcnJheSxuYXRpdmVLZXlzPU9iamVjdC5rZXlzLG5hdGl2ZUNyZWF0ZT1PYmplY3QuY3JlYXRlLG5hdGl2ZUlzVmlldz1zdXBwb3J0c0FycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXcsX2lzTmFOPWlzTmFOLF9pc0Zpbml0ZT1pc0Zpbml0ZSxoYXNFbnVtQnVnPSF7dG9TdHJpbmc6bnVsbH0ucHJvcGVydHlJc0VudW1lcmFibGUoInRvU3RyaW5nIiksbm9uRW51bWVyYWJsZVByb3BzPVsidmFsdWVPZiIsImlzUHJvdG90eXBlT2YiLCJ0b1N0cmluZyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiaGFzT3duUHJvcGVydHkiLCJ0b0xvY2FsZVN0cmluZyJdLE1BWF9BUlJBWV9JTkRFWD1NYXRoLnBvdygyLDUzKS0xO2Z1bmN0aW9uIHJlc3RBcmd1bWVudHMoZSx0KXtyZXR1cm4gdD1udWxsPT10P2UubGVuZ3RoLTE6K3QsZnVuY3Rpb24oKXtmb3IodmFyIG49TWF0aC5tYXgoYXJndW1lbnRzLmxlbmd0aC10LDApLHI9QXJyYXkobiksaT0wO2k8bjtpKyspcltpXT1hcmd1bWVudHNbaSt0XTtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiBlLmNhbGwodGhpcyxyKTtjYXNlIDE6cmV0dXJuIGUuY2FsbCh0aGlzLGFyZ3VtZW50c1swXSxyKTtjYXNlIDI6cmV0dXJuIGUuY2FsbCh0aGlzLGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0scil9dmFyIGE9QXJyYXkodCsxKTtmb3IoaT0wO2k8dDtpKyspYVtpXT1hcmd1bWVudHNbaV07cmV0dXJuIGFbdF09cixlLmFwcGx5KHRoaXMsYSl9fWZ1bmN0aW9uIGlzT2JqZWN0KGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiJmdW5jdGlvbiI9PT10fHwib2JqZWN0Ij09PXQmJiEhZX1mdW5jdGlvbiBpc051bGwoZSl7cmV0dXJuIG51bGw9PT1lfWZ1bmN0aW9uIGlzVW5kZWZpbmVkKGUpe3JldHVybiB2b2lkIDA9PT1lfWZ1bmN0aW9uIGlzQm9vbGVhbihlKXtyZXR1cm4hMD09PWV8fCExPT09ZXx8IltvYmplY3QgQm9vbGVhbl0iPT09dG9TdHJpbmcuY2FsbChlKX1mdW5jdGlvbiBpc0VsZW1lbnQoZSl7cmV0dXJuISghZXx8MSE9PWUubm9kZVR5cGUpfWZ1bmN0aW9uIHRhZ1Rlc3RlcihlKXt2YXIgdD0iW29iamVjdCAiK2UrIl0iO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdG9TdHJpbmcuY2FsbChlKT09PXR9fXZhciBpc1N0cmluZz10YWdUZXN0ZXIoIlN0cmluZyIpLGlzTnVtYmVyPXRhZ1Rlc3RlcigiTnVtYmVyIiksaXNEYXRlPXRhZ1Rlc3RlcigiRGF0ZSIpLGlzUmVnRXhwPXRhZ1Rlc3RlcigiUmVnRXhwIiksaXNFcnJvcj10YWdUZXN0ZXIoIkVycm9yIiksaXNTeW1ib2w9dGFnVGVzdGVyKCJTeW1ib2wiKSxpc0FycmF5QnVmZmVyPXRhZ1Rlc3RlcigiQXJyYXlCdWZmZXIiKSxpc0Z1bmN0aW9uPXRhZ1Rlc3RlcigiRnVuY3Rpb24iKSxub2RlbGlzdD1yb290LmRvY3VtZW50JiZyb290LmRvY3VtZW50LmNoaWxkTm9kZXM7ImZ1bmN0aW9uIiE9dHlwZW9mLy4vJiYib2JqZWN0IiE9dHlwZW9mIEludDhBcnJheSYmImZ1bmN0aW9uIiE9dHlwZW9mIG5vZGVsaXN0JiYoaXNGdW5jdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZXx8ITF9KTt2YXIgaXNGdW5jdGlvbiQxPWlzRnVuY3Rpb24saGFzT2JqZWN0VGFnPXRhZ1Rlc3RlcigiT2JqZWN0IiksaGFzU3RyaW5nVGFnQnVnPXN1cHBvcnRzRGF0YVZpZXcmJmhhc09iamVjdFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDgpKSksaXNJRTExPSJ1bmRlZmluZWQiIT10eXBlb2YgTWFwJiZoYXNPYmplY3RUYWcobmV3IE1hcCksaXNEYXRhVmlldz10YWdUZXN0ZXIoIkRhdGFWaWV3Iik7ZnVuY3Rpb24gaWUxMElzRGF0YVZpZXcoZSl7cmV0dXJuIG51bGwhPWUmJmlzRnVuY3Rpb24kMShlLmdldEludDgpJiZpc0FycmF5QnVmZmVyKGUuYnVmZmVyKX12YXIgaXNEYXRhVmlldyQxPWhhc1N0cmluZ1RhZ0J1Zz9pZTEwSXNEYXRhVmlldzppc0RhdGFWaWV3LGlzQXJyYXk9bmF0aXZlSXNBcnJheXx8dGFnVGVzdGVyKCJBcnJheSIpO2Z1bmN0aW9uIGhhcyQxKGUsdCl7cmV0dXJuIG51bGwhPWUmJmhhc093blByb3BlcnR5LmNhbGwoZSx0KX12YXIgaXNBcmd1bWVudHM9dGFnVGVzdGVyKCJBcmd1bWVudHMiKTshZnVuY3Rpb24oKXtpc0FyZ3VtZW50cyhhcmd1bWVudHMpfHwoaXNBcmd1bWVudHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGhhcyQxKGUsImNhbGxlZSIpfSl9KCk7dmFyIGlzQXJndW1lbnRzJDE9aXNBcmd1bWVudHM7ZnVuY3Rpb24gaXNGaW5pdGUkMShlKXtyZXR1cm4haXNTeW1ib2woZSkmJl9pc0Zpbml0ZShlKSYmIWlzTmFOKHBhcnNlRmxvYXQoZSkpfWZ1bmN0aW9uIGlzTmFOJDEoZSl7cmV0dXJuIGlzTnVtYmVyKGUpJiZfaXNOYU4oZSl9ZnVuY3Rpb24gY29uc3RhbnQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGNyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1lKHQpO3JldHVybiJudW1iZXIiPT10eXBlb2YgbiYmbj49MCYmbjw9TUFYX0FSUkFZX0lOREVYfX1mdW5jdGlvbiBzaGFsbG93UHJvcGVydHkoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMDp0W2VdfX12YXIgZ2V0Qnl0ZUxlbmd0aD1zaGFsbG93UHJvcGVydHkoImJ5dGVMZW5ndGgiKSxpc0J1ZmZlckxpa2U9Y3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0Qnl0ZUxlbmd0aCksdHlwZWRBcnJheVBhdHRlcm49L1xbb2JqZWN0ICgoSXxVaSludCg4fDE2fDMyKXxGbG9hdCgzMnw2NCl8VWludDhDbGFtcGVkfEJpZyhJfFVpKW50NjQpQXJyYXlcXS87ZnVuY3Rpb24gaXNUeXBlZEFycmF5KGUpe3JldHVybiBuYXRpdmVJc1ZpZXc/bmF0aXZlSXNWaWV3KGUpJiYhaXNEYXRhVmlldyQxKGUpOmlzQnVmZmVyTGlrZShlKSYmdHlwZWRBcnJheVBhdHRlcm4udGVzdCh0b1N0cmluZy5jYWxsKGUpKX12YXIgaXNUeXBlZEFycmF5JDE9c3VwcG9ydHNBcnJheUJ1ZmZlcj9pc1R5cGVkQXJyYXk6Y29uc3RhbnQoITEpLGdldExlbmd0aD1zaGFsbG93UHJvcGVydHkoImxlbmd0aCIpO2Z1bmN0aW9uIGVtdWxhdGVkU2V0KGUpe2Zvcih2YXIgdD17fSxuPWUubGVuZ3RoLHI9MDtyPG47KytyKXRbZVtyXV09ITA7cmV0dXJue2NvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiEwPT09dFtlXX0scHVzaDpmdW5jdGlvbihuKXtyZXR1cm4gdFtuXT0hMCxlLnB1c2gobil9fX1mdW5jdGlvbiBjb2xsZWN0Tm9uRW51bVByb3BzKGUsdCl7dD1lbXVsYXRlZFNldCh0KTt2YXIgbj1ub25FbnVtZXJhYmxlUHJvcHMubGVuZ3RoLHI9ZS5jb25zdHJ1Y3RvcixpPWlzRnVuY3Rpb24kMShyKSYmci5wcm90b3R5cGV8fE9ialByb3RvLGE9ImNvbnN0cnVjdG9yIjtmb3IoaGFzJDEoZSxhKSYmIXQuY29udGFpbnMoYSkmJnQucHVzaChhKTtuLS07KShhPW5vbkVudW1lcmFibGVQcm9wc1tuXSlpbiBlJiZlW2FdIT09aVthXSYmIXQuY29udGFpbnMoYSkmJnQucHVzaChhKX1mdW5jdGlvbiBrZXlzKGUpe2lmKCFpc09iamVjdChlKSlyZXR1cm5bXTtpZihuYXRpdmVLZXlzKXJldHVybiBuYXRpdmVLZXlzKGUpO3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBlKWhhcyQxKGUsbikmJnQucHVzaChuKTtyZXR1cm4gaGFzRW51bUJ1ZyYmY29sbGVjdE5vbkVudW1Qcm9wcyhlLHQpLHR9ZnVuY3Rpb24gaXNFbXB0eShlKXtpZihudWxsPT1lKXJldHVybiEwO3ZhciB0PWdldExlbmd0aChlKTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJihpc0FycmF5KGUpfHxpc1N0cmluZyhlKXx8aXNBcmd1bWVudHMkMShlKSk/MD09PXQ6MD09PWdldExlbmd0aChrZXlzKGUpKX1mdW5jdGlvbiBpc01hdGNoKGUsdCl7dmFyIG49a2V5cyh0KSxyPW4ubGVuZ3RoO2lmKG51bGw9PWUpcmV0dXJuIXI7Zm9yKHZhciBpPU9iamVjdChlKSxhPTA7YTxyO2ErKyl7dmFyIHU9blthXTtpZih0W3VdIT09aVt1XXx8ISh1IGluIGkpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIF8kMShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIF8kMT9lOnRoaXMgaW5zdGFuY2VvZiBfJDE/dm9pZCh0aGlzLl93cmFwcGVkPWUpOm5ldyBfJDEoZSl9ZnVuY3Rpb24gdG9CdWZmZXJWaWV3KGUpe3JldHVybiBuZXcgVWludDhBcnJheShlLmJ1ZmZlcnx8ZSxlLmJ5dGVPZmZzZXR8fDAsZ2V0Qnl0ZUxlbmd0aChlKSl9XyQxLlZFUlNJT049VkVSU0lPTixfJDEucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBwZWR9LF8kMS5wcm90b3R5cGUudmFsdWVPZj1fJDEucHJvdG90eXBlLnRvSlNPTj1fJDEucHJvdG90eXBlLnZhbHVlLF8kMS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nKHRoaXMuX3dyYXBwZWQpfTt2YXIgdGFnRGF0YVZpZXc9IltvYmplY3QgRGF0YVZpZXddIjtmdW5jdGlvbiBlcShlLHQsbixyKXtpZihlPT09dClyZXR1cm4gMCE9PWV8fDEvZT09MS90O2lmKG51bGw9PWV8fG51bGw9PXQpcmV0dXJuITE7aWYoZSE9ZSlyZXR1cm4gdCE9dDt2YXIgaT10eXBlb2YgZTtyZXR1cm4oImZ1bmN0aW9uIj09PWl8fCJvYmplY3QiPT09aXx8Im9iamVjdCI9PXR5cGVvZiB0KSYmZGVlcEVxKGUsdCxuLHIpfWZ1bmN0aW9uIGRlZXBFcShlLHQsbixyKXtlIGluc3RhbmNlb2YgXyQxJiYoZT1lLl93cmFwcGVkKSx0IGluc3RhbmNlb2YgXyQxJiYodD10Ll93cmFwcGVkKTt2YXIgaT10b1N0cmluZy5jYWxsKGUpO2lmKGkhPT10b1N0cmluZy5jYWxsKHQpKXJldHVybiExO2lmKGhhc1N0cmluZ1RhZ0J1ZyYmIltvYmplY3QgT2JqZWN0XSI9PWkmJmlzRGF0YVZpZXckMShlKSl7aWYoIWlzRGF0YVZpZXckMSh0KSlyZXR1cm4hMTtpPXRhZ0RhdGFWaWV3fXN3aXRjaChpKXtjYXNlIltvYmplY3QgUmVnRXhwXSI6Y2FzZSJbb2JqZWN0IFN0cmluZ10iOnJldHVybiIiK2U9PSIiK3Q7Y2FzZSJbb2JqZWN0IE51bWJlcl0iOnJldHVybitlIT0rZT8rdCE9K3Q6MD09K2U/MS8rZT09MS90OitlPT0rdDtjYXNlIltvYmplY3QgRGF0ZV0iOmNhc2UiW29iamVjdCBCb29sZWFuXSI6cmV0dXJuK2U9PSt0O2Nhc2UiW29iamVjdCBTeW1ib2xdIjpyZXR1cm4gU3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKGUpPT09U3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKHQpO2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOmNhc2UgdGFnRGF0YVZpZXc6cmV0dXJuIGRlZXBFcSh0b0J1ZmZlclZpZXcoZSksdG9CdWZmZXJWaWV3KHQpLG4scil9dmFyIGE9IltvYmplY3QgQXJyYXldIj09PWk7aWYoIWEmJmlzVHlwZWRBcnJheSQxKGUpKXtpZihnZXRCeXRlTGVuZ3RoKGUpIT09Z2V0Qnl0ZUxlbmd0aCh0KSlyZXR1cm4hMTtpZihlLmJ1ZmZlcj09PXQuYnVmZmVyJiZlLmJ5dGVPZmZzZXQ9PT10LmJ5dGVPZmZzZXQpcmV0dXJuITA7YT0hMH1pZighYSl7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHwib2JqZWN0IiE9dHlwZW9mIHQpcmV0dXJuITE7dmFyIHU9ZS5jb25zdHJ1Y3RvcixvPXQuY29uc3RydWN0b3I7aWYodSE9PW8mJiEoaXNGdW5jdGlvbiQxKHUpJiZ1IGluc3RhbmNlb2YgdSYmaXNGdW5jdGlvbiQxKG8pJiZvIGluc3RhbmNlb2YgbykmJiJjb25zdHJ1Y3RvciJpbiBlJiYiY29uc3RydWN0b3IiaW4gdClyZXR1cm4hMX1yPXJ8fFtdO2Zvcih2YXIgcz0obj1ufHxbXSkubGVuZ3RoO3MtLTspaWYobltzXT09PWUpcmV0dXJuIHJbc109PT10O2lmKG4ucHVzaChlKSxyLnB1c2godCksYSl7aWYoKHM9ZS5sZW5ndGgpIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKDtzLS07KWlmKCFlcShlW3NdLHRbc10sbixyKSlyZXR1cm4hMX1lbHNle3ZhciBjLGY9a2V5cyhlKTtpZihzPWYubGVuZ3RoLGtleXModCkubGVuZ3RoIT09cylyZXR1cm4hMTtmb3IoO3MtLTspaWYoIWhhcyQxKHQsYz1mW3NdKXx8IWVxKGVbY10sdFtjXSxuLHIpKXJldHVybiExfXJldHVybiBuLnBvcCgpLHIucG9wKCksITB9ZnVuY3Rpb24gaXNFcXVhbChlLHQpe3JldHVybiBlcShlLHQpfWZ1bmN0aW9uIGFsbEtleXMoZSl7aWYoIWlzT2JqZWN0KGUpKXJldHVybltdO3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBlKXQucHVzaChuKTtyZXR1cm4gaGFzRW51bUJ1ZyYmY29sbGVjdE5vbkVudW1Qcm9wcyhlLHQpLHR9ZnVuY3Rpb24gaWUxMWZpbmdlcnByaW50KGUpe3ZhciB0PWdldExlbmd0aChlKTtyZXR1cm4gZnVuY3Rpb24obil7aWYobnVsbD09bilyZXR1cm4hMTt2YXIgcj1hbGxLZXlzKG4pO2lmKGdldExlbmd0aChyKSlyZXR1cm4hMTtmb3IodmFyIGk9MDtpPHQ7aSsrKWlmKCFpc0Z1bmN0aW9uJDEobltlW2ldXSkpcmV0dXJuITE7cmV0dXJuIGUhPT13ZWFrTWFwTWV0aG9kc3x8IWlzRnVuY3Rpb24kMShuW2ZvckVhY2hOYW1lXSl9fXZhciBmb3JFYWNoTmFtZT0iZm9yRWFjaCIsaGFzTmFtZT0iaGFzIixjb21tb25Jbml0PVsiY2xlYXIiLCJkZWxldGUiXSxtYXBUYWlsPVsiZ2V0IixoYXNOYW1lLCJzZXQiXSxtYXBNZXRob2RzPWNvbW1vbkluaXQuY29uY2F0KGZvckVhY2hOYW1lLG1hcFRhaWwpLHdlYWtNYXBNZXRob2RzPWNvbW1vbkluaXQuY29uY2F0KG1hcFRhaWwpLHNldE1ldGhvZHM9WyJhZGQiXS5jb25jYXQoY29tbW9uSW5pdCxmb3JFYWNoTmFtZSxoYXNOYW1lKSxpc01hcD1pc0lFMTE/aWUxMWZpbmdlcnByaW50KG1hcE1ldGhvZHMpOnRhZ1Rlc3RlcigiTWFwIiksaXNXZWFrTWFwPWlzSUUxMT9pZTExZmluZ2VycHJpbnQod2Vha01hcE1ldGhvZHMpOnRhZ1Rlc3RlcigiV2Vha01hcCIpLGlzU2V0PWlzSUUxMT9pZTExZmluZ2VycHJpbnQoc2V0TWV0aG9kcyk6dGFnVGVzdGVyKCJTZXQiKSxpc1dlYWtTZXQ9dGFnVGVzdGVyKCJXZWFrU2V0Iik7ZnVuY3Rpb24gdmFsdWVzKGUpe2Zvcih2YXIgdD1rZXlzKGUpLG49dC5sZW5ndGgscj1BcnJheShuKSxpPTA7aTxuO2krKylyW2ldPWVbdFtpXV07cmV0dXJuIHJ9ZnVuY3Rpb24gcGFpcnMoZSl7Zm9yKHZhciB0PWtleXMoZSksbj10Lmxlbmd0aCxyPUFycmF5KG4pLGk9MDtpPG47aSsrKXJbaV09W3RbaV0sZVt0W2ldXV07cmV0dXJuIHJ9ZnVuY3Rpb24gaW52ZXJ0KGUpe2Zvcih2YXIgdD17fSxuPWtleXMoZSkscj0wLGk9bi5sZW5ndGg7cjxpO3IrKyl0W2VbbltyXV1dPW5bcl07cmV0dXJuIHR9ZnVuY3Rpb24gZnVuY3Rpb25zKGUpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiBlKWlzRnVuY3Rpb24kMShlW25dKSYmdC5wdXNoKG4pO3JldHVybiB0LnNvcnQoKX1mdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihlLHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoO2lmKHQmJihuPU9iamVjdChuKSkscjwyfHxudWxsPT1uKXJldHVybiBuO2Zvcih2YXIgaT0xO2k8cjtpKyspZm9yKHZhciBhPWFyZ3VtZW50c1tpXSx1PWUoYSksbz11Lmxlbmd0aCxzPTA7czxvO3MrKyl7dmFyIGM9dVtzXTt0JiZ2b2lkIDAhPT1uW2NdfHwobltjXT1hW2NdKX1yZXR1cm4gbn19dmFyIGV4dGVuZD1jcmVhdGVBc3NpZ25lcihhbGxLZXlzKSxleHRlbmRPd249Y3JlYXRlQXNzaWduZXIoa2V5cyksZGVmYXVsdHM9Y3JlYXRlQXNzaWduZXIoYWxsS2V5cywhMCk7ZnVuY3Rpb24gY3Rvcigpe3JldHVybiBmdW5jdGlvbigpe319ZnVuY3Rpb24gYmFzZUNyZWF0ZShlKXtpZighaXNPYmplY3QoZSkpcmV0dXJue307aWYobmF0aXZlQ3JlYXRlKXJldHVybiBuYXRpdmVDcmVhdGUoZSk7dmFyIHQ9Y3RvcigpO3QucHJvdG90eXBlPWU7dmFyIG49bmV3IHQ7cmV0dXJuIHQucHJvdG90eXBlPW51bGwsbn1mdW5jdGlvbiBjcmVhdGUoZSx0KXt2YXIgbj1iYXNlQ3JlYXRlKGUpO3JldHVybiB0JiZleHRlbmRPd24obix0KSxufWZ1bmN0aW9uIGNsb25lKGUpe3JldHVybiBpc09iamVjdChlKT9pc0FycmF5KGUpP2Uuc2xpY2UoKTpleHRlbmQoe30sZSk6ZX1mdW5jdGlvbiB0YXAoZSx0KXtyZXR1cm4gdChlKSxlfWZ1bmN0aW9uIHRvUGF0aCQxKGUpe3JldHVybiBpc0FycmF5KGUpP2U6W2VdfWZ1bmN0aW9uIHRvUGF0aChlKXtyZXR1cm4gXyQxLnRvUGF0aChlKX1mdW5jdGlvbiBkZWVwR2V0KGUsdCl7Zm9yKHZhciBuPXQubGVuZ3RoLHI9MDtyPG47cisrKXtpZihudWxsPT1lKXJldHVybjtlPWVbdFtyXV19cmV0dXJuIG4/ZTp2b2lkIDB9ZnVuY3Rpb24gZ2V0KGUsdCxuKXt2YXIgcj1kZWVwR2V0KGUsdG9QYXRoKHQpKTtyZXR1cm4gaXNVbmRlZmluZWQocik/bjpyfWZ1bmN0aW9uIGhhcyhlLHQpe2Zvcih2YXIgbj0odD10b1BhdGgodCkpLmxlbmd0aCxyPTA7cjxuO3IrKyl7dmFyIGk9dFtyXTtpZighaGFzJDEoZSxpKSlyZXR1cm4hMTtlPWVbaV19cmV0dXJuISFufWZ1bmN0aW9uIGlkZW50aXR5KGUpe3JldHVybiBlfWZ1bmN0aW9uIG1hdGNoZXIoZSl7cmV0dXJuIGU9ZXh0ZW5kT3duKHt9LGUpLGZ1bmN0aW9uKHQpe3JldHVybiBpc01hdGNoKHQsZSl9fWZ1bmN0aW9uIHByb3BlcnR5KGUpe3JldHVybiBlPXRvUGF0aChlKSxmdW5jdGlvbih0KXtyZXR1cm4gZGVlcEdldCh0LGUpfX1mdW5jdGlvbiBvcHRpbWl6ZUNiKGUsdCxuKXtpZih2b2lkIDA9PT10KXJldHVybiBlO3N3aXRjaChudWxsPT1uPzM6bil7Y2FzZSAxOnJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZS5jYWxsKHQsbil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24obixyLGkpe3JldHVybiBlLmNhbGwodCxuLHIsaSl9O2Nhc2UgNDpyZXR1cm4gZnVuY3Rpb24obixyLGksYSl7cmV0dXJuIGUuY2FsbCh0LG4scixpLGEpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGJhc2VJdGVyYXRlZShlLHQsbil7cmV0dXJuIG51bGw9PWU/aWRlbnRpdHk6aXNGdW5jdGlvbiQxKGUpP29wdGltaXplQ2IoZSx0LG4pOmlzT2JqZWN0KGUpJiYhaXNBcnJheShlKT9tYXRjaGVyKGUpOnByb3BlcnR5KGUpfWZ1bmN0aW9uIGl0ZXJhdGVlKGUsdCl7cmV0dXJuIGJhc2VJdGVyYXRlZShlLHQsMS8wKX1mdW5jdGlvbiBjYihlLHQsbil7cmV0dXJuIF8kMS5pdGVyYXRlZSE9PWl0ZXJhdGVlP18kMS5pdGVyYXRlZShlLHQpOmJhc2VJdGVyYXRlZShlLHQsbil9ZnVuY3Rpb24gbWFwT2JqZWN0KGUsdCxuKXt0PWNiKHQsbik7Zm9yKHZhciByPWtleXMoZSksaT1yLmxlbmd0aCxhPXt9LHU9MDt1PGk7dSsrKXt2YXIgbz1yW3VdO2Fbb109dChlW29dLG8sZSl9cmV0dXJuIGF9ZnVuY3Rpb24gbm9vcCgpe31mdW5jdGlvbiBwcm9wZXJ0eU9mKGUpe3JldHVybiBudWxsPT1lP25vb3A6ZnVuY3Rpb24odCl7cmV0dXJuIGdldChlLHQpfX1mdW5jdGlvbiB0aW1lcyhlLHQsbil7dmFyIHI9QXJyYXkoTWF0aC5tYXgoMCxlKSk7dD1vcHRpbWl6ZUNiKHQsbiwxKTtmb3IodmFyIGk9MDtpPGU7aSsrKXJbaV09dChpKTtyZXR1cm4gcn1mdW5jdGlvbiByYW5kb20oZSx0KXtyZXR1cm4gbnVsbD09dCYmKHQ9ZSxlPTApLGUrTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKih0LWUrMSkpfV8kMS50b1BhdGg9dG9QYXRoJDEsXyQxLml0ZXJhdGVlPWl0ZXJhdGVlO3ZhciBub3c9RGF0ZS5ub3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O2Z1bmN0aW9uIGNyZWF0ZUVzY2FwZXIoZSl7dmFyIHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19LG49Iig/OiIra2V5cyhlKS5qb2luKCJ8IikrIikiLHI9UmVnRXhwKG4pLGk9UmVnRXhwKG4sImciKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU9bnVsbD09ZT8iIjoiIitlLHIudGVzdChlKT9lLnJlcGxhY2UoaSx0KTplfX12YXIgZXNjYXBlTWFwPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiN4Mjc7IiwiYCI6IiYjeDYwOyJ9LF9lc2NhcGU9Y3JlYXRlRXNjYXBlcihlc2NhcGVNYXApLHVuZXNjYXBlTWFwPWludmVydChlc2NhcGVNYXApLF91bmVzY2FwZT1jcmVhdGVFc2NhcGVyKHVuZXNjYXBlTWFwKSx0ZW1wbGF0ZVNldHRpbmdzPV8kMS50ZW1wbGF0ZVNldHRpbmdzPXtldmFsdWF0ZTovPCUoW1xzXFNdKz8pJT4vZyxpbnRlcnBvbGF0ZTovPCU9KFtcc1xTXSs/KSU+L2csZXNjYXBlOi88JS0oW1xzXFNdKz8pJT4vZ30sbm9NYXRjaD0vKC4pXi8sZXNjYXBlcz17IiciOiInIiwiXFwiOiJcXCIsIlxyIjoiciIsIlxuIjoibiIsIlx1MjAyOCI6InUyMDI4IiwiXHUyMDI5IjoidTIwMjkifSxlc2NhcGVSZWdFeHA9L1xcfCd8XHJ8XG58XHUyMDI4fFx1MjAyOS9nO2Z1bmN0aW9uIGVzY2FwZUNoYXIoZSl7cmV0dXJuIlxcIitlc2NhcGVzW2VdfXZhciBiYXJlSWRlbnRpZmllcj0vXlxzKihcd3xcJCkrXHMqJC87ZnVuY3Rpb24gdGVtcGxhdGUoZSx0LG4peyF0JiZuJiYodD1uKSx0PWRlZmF1bHRzKHt9LHQsXyQxLnRlbXBsYXRlU2V0dGluZ3MpO3ZhciByPVJlZ0V4cChbKHQuZXNjYXBlfHxub01hdGNoKS5zb3VyY2UsKHQuaW50ZXJwb2xhdGV8fG5vTWF0Y2gpLnNvdXJjZSwodC5ldmFsdWF0ZXx8bm9NYXRjaCkuc291cmNlXS5qb2luKCJ8IikrInwkIiwiZyIpLGk9MCxhPSJfX3ArPSciO2UucmVwbGFjZShyLChmdW5jdGlvbih0LG4scix1LG8pe3JldHVybiBhKz1lLnNsaWNlKGksbykucmVwbGFjZShlc2NhcGVSZWdFeHAsZXNjYXBlQ2hhciksaT1vK3QubGVuZ3RoLG4/YSs9IicrXG4oKF9fdD0oIituKyIpKT09bnVsbD8nJzpfLmVzY2FwZShfX3QpKStcbiciOnI/YSs9IicrXG4oKF9fdD0oIityKyIpKT09bnVsbD8nJzpfX3QpK1xuJyI6dSYmKGErPSInO1xuIit1KyJcbl9fcCs9JyIpLHR9KSksYSs9Iic7XG4iO3ZhciB1LG89dC52YXJpYWJsZTtpZihvKXtpZighYmFyZUlkZW50aWZpZXIudGVzdChvKSl0aHJvdyBuZXcgRXJyb3IoInZhcmlhYmxlIGlzIG5vdCBhIGJhcmUgaWRlbnRpZmllcjogIitvKX1lbHNlIGE9IndpdGgob2JqfHx7fSl7XG4iK2ErIn1cbiIsbz0ib2JqIjthPSJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sIisicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcbiIrYSsicmV0dXJuIF9fcDtcbiI7dHJ5e3U9bmV3IEZ1bmN0aW9uKG8sIl8iLGEpfWNhdGNoKGUpe3Rocm93IGUuc291cmNlPWEsZX12YXIgcz1mdW5jdGlvbihlKXtyZXR1cm4gdS5jYWxsKHRoaXMsZSxfJDEpfTtyZXR1cm4gcy5zb3VyY2U9ImZ1bmN0aW9uKCIrbysiKXtcbiIrYSsifSIsc31mdW5jdGlvbiByZXN1bHQoZSx0LG4pe3ZhciByPSh0PXRvUGF0aCh0KSkubGVuZ3RoO2lmKCFyKXJldHVybiBpc0Z1bmN0aW9uJDEobik/bi5jYWxsKGUpOm47Zm9yKHZhciBpPTA7aTxyO2krKyl7dmFyIGE9bnVsbD09ZT92b2lkIDA6ZVt0W2ldXTt2b2lkIDA9PT1hJiYoYT1uLGk9ciksZT1pc0Z1bmN0aW9uJDEoYSk/YS5jYWxsKGUpOmF9cmV0dXJuIGV9dmFyIGlkQ291bnRlcj0wO2Z1bmN0aW9uIHVuaXF1ZUlkKGUpe3ZhciB0PSsraWRDb3VudGVyKyIiO3JldHVybiBlP2UrdDp0fWZ1bmN0aW9uIGNoYWluKGUpe3ZhciB0PV8kMShlKTtyZXR1cm4gdC5fY2hhaW49ITAsdH1mdW5jdGlvbiBleGVjdXRlQm91bmQoZSx0LG4scixpKXtpZighKHIgaW5zdGFuY2VvZiB0KSlyZXR1cm4gZS5hcHBseShuLGkpO3ZhciBhPWJhc2VDcmVhdGUoZS5wcm90b3R5cGUpLHU9ZS5hcHBseShhLGkpO3JldHVybiBpc09iamVjdCh1KT91OmF9dmFyIHBhcnRpYWw9cmVzdEFyZ3VtZW50cygoZnVuY3Rpb24oZSx0KXt2YXIgbj1wYXJ0aWFsLnBsYWNlaG9sZGVyLHI9ZnVuY3Rpb24oKXtmb3IodmFyIGk9MCxhPXQubGVuZ3RoLHU9QXJyYXkoYSksbz0wO288YTtvKyspdVtvXT10W29dPT09bj9hcmd1bWVudHNbaSsrXTp0W29dO2Zvcig7aTxhcmd1bWVudHMubGVuZ3RoOyl1LnB1c2goYXJndW1lbnRzW2krK10pO3JldHVybiBleGVjdXRlQm91bmQoZSxyLHRoaXMsdGhpcyx1KX07cmV0dXJuIHJ9KSk7cGFydGlhbC5wbGFjZWhvbGRlcj1fJDE7dmFyIGJpbmQ9cmVzdEFyZ3VtZW50cygoZnVuY3Rpb24oZSx0LG4pe2lmKCFpc0Z1bmN0aW9uJDEoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1bmN0aW9uIik7dmFyIHI9cmVzdEFyZ3VtZW50cygoZnVuY3Rpb24oaSl7cmV0dXJuIGV4ZWN1dGVCb3VuZChlLHIsdCx0aGlzLG4uY29uY2F0KGkpKX0pKTtyZXR1cm4gcn0pKSxpc0FycmF5TGlrZT1jcmVhdGVTaXplUHJvcGVydHlDaGVjayhnZXRMZW5ndGgpO2Z1bmN0aW9uIGZsYXR0ZW4kMShlLHQsbixyKXtpZihyPXJ8fFtdLHR8fDA9PT10KXtpZih0PD0wKXJldHVybiByLmNvbmNhdChlKX1lbHNlIHQ9MS8wO2Zvcih2YXIgaT1yLmxlbmd0aCxhPTAsdT1nZXRMZW5ndGgoZSk7YTx1O2ErKyl7dmFyIG89ZVthXTtpZihpc0FycmF5TGlrZShvKSYmKGlzQXJyYXkobyl8fGlzQXJndW1lbnRzJDEobykpKWlmKHQ+MSlmbGF0dGVuJDEobyx0LTEsbixyKSxpPXIubGVuZ3RoO2Vsc2UgZm9yKHZhciBzPTAsYz1vLmxlbmd0aDtzPGM7KXJbaSsrXT1vW3MrK107ZWxzZSBufHwocltpKytdPW8pfXJldHVybiByfXZhciBiaW5kQWxsPXJlc3RBcmd1bWVudHMoKGZ1bmN0aW9uKGUsdCl7dmFyIG49KHQ9ZmxhdHRlbiQxKHQsITEsITEpKS5sZW5ndGg7aWYobjwxKXRocm93IG5ldyBFcnJvcigiYmluZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5jdGlvbiBuYW1lcyIpO2Zvcig7bi0tOyl7dmFyIHI9dFtuXTtlW3JdPWJpbmQoZVtyXSxlKX1yZXR1cm4gZX0pKTtmdW5jdGlvbiBtZW1vaXplKGUsdCl7dmFyIG49ZnVuY3Rpb24ocil7dmFyIGk9bi5jYWNoZSxhPSIiKyh0P3QuYXBwbHkodGhpcyxhcmd1bWVudHMpOnIpO3JldHVybiBoYXMkMShpLGEpfHwoaVthXT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksaVthXX07cmV0dXJuIG4uY2FjaGU9e30sbn12YXIgZGVsYXk9cmVzdEFyZ3VtZW50cygoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KG51bGwsbil9KSx0KX0pKSxkZWZlcj1wYXJ0aWFsKGRlbGF5LF8kMSwxKTtmdW5jdGlvbiB0aHJvdHRsZShlLHQsbil7dmFyIHIsaSxhLHUsbz0wO258fChuPXt9KTt2YXIgcz1mdW5jdGlvbigpe289ITE9PT1uLmxlYWRpbmc/MDpub3coKSxyPW51bGwsdT1lLmFwcGx5KGksYSkscnx8KGk9YT1udWxsKX0sYz1mdW5jdGlvbigpe3ZhciBjPW5vdygpO298fCExIT09bi5sZWFkaW5nfHwobz1jKTt2YXIgZj10LShjLW8pO3JldHVybiBpPXRoaXMsYT1hcmd1bWVudHMsZjw9MHx8Zj50PyhyJiYoY2xlYXJUaW1lb3V0KHIpLHI9bnVsbCksbz1jLHU9ZS5hcHBseShpLGEpLHJ8fChpPWE9bnVsbCkpOnJ8fCExPT09bi50cmFpbGluZ3x8KHI9c2V0VGltZW91dChzLGYpKSx1fTtyZXR1cm4gYy5jYW5jZWw9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQociksbz0wLHI9aT1hPW51bGx9LGN9ZnVuY3Rpb24gZGVib3VuY2UoZSx0LG4pe3ZhciByLGksYSx1LG8scz1mdW5jdGlvbigpe3ZhciBjPW5vdygpLWk7dD5jP3I9c2V0VGltZW91dChzLHQtYyk6KHI9bnVsbCxufHwodT1lLmFwcGx5KG8sYSkpLHJ8fChhPW89bnVsbCkpfSxjPXJlc3RBcmd1bWVudHMoKGZ1bmN0aW9uKGMpe3JldHVybiBvPXRoaXMsYT1jLGk9bm93KCkscnx8KHI9c2V0VGltZW91dChzLHQpLG4mJih1PWUuYXBwbHkobyxhKSkpLHV9KSk7cmV0dXJuIGMuY2FuY2VsPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHIpLHI9YT1vPW51bGx9LGN9ZnVuY3Rpb24gd3JhcChlLHQpe3JldHVybiBwYXJ0aWFsKHQsZSl9ZnVuY3Rpb24gbmVnYXRlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gY29tcG9zZSgpe3ZhciBlPWFyZ3VtZW50cyx0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBuPXQscj1lW3RdLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtuLS07KXI9ZVtuXS5jYWxsKHRoaXMscik7cmV0dXJuIHJ9fWZ1bmN0aW9uIGFmdGVyKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoLS1lPDEpcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBiZWZvcmUoZSx0KXt2YXIgbjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tLWU+MCYmKG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGU8PTEmJih0PW51bGwpLG59fXZhciBvbmNlPXBhcnRpYWwoYmVmb3JlLDIpO2Z1bmN0aW9uIGZpbmRLZXkoZSx0LG4pe3Q9Y2IodCxuKTtmb3IodmFyIHIsaT1rZXlzKGUpLGE9MCx1PWkubGVuZ3RoO2E8dTthKyspaWYodChlW3I9aVthXV0scixlKSlyZXR1cm4gcn1mdW5jdGlvbiBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcihlKXtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe249Y2IobixyKTtmb3IodmFyIGk9Z2V0TGVuZ3RoKHQpLGE9ZT4wPzA6aS0xO2E+PTAmJmE8aTthKz1lKWlmKG4odFthXSxhLHQpKXJldHVybiBhO3JldHVybi0xfX12YXIgZmluZEluZGV4PWNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKDEpLGZpbmRMYXN0SW5kZXg9Y3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoLTEpO2Z1bmN0aW9uIHNvcnRlZEluZGV4KGUsdCxuLHIpe2Zvcih2YXIgaT0obj1jYihuLHIsMSkpKHQpLGE9MCx1PWdldExlbmd0aChlKTthPHU7KXt2YXIgbz1NYXRoLmZsb29yKChhK3UpLzIpO24oZVtvXSk8aT9hPW8rMTp1PW99cmV0dXJuIGF9ZnVuY3Rpb24gY3JlYXRlSW5kZXhGaW5kZXIoZSx0LG4pe3JldHVybiBmdW5jdGlvbihyLGksYSl7dmFyIHU9MCxvPWdldExlbmd0aChyKTtpZigibnVtYmVyIj09dHlwZW9mIGEpZT4wP3U9YT49MD9hOk1hdGgubWF4KGErbyx1KTpvPWE+PTA/TWF0aC5taW4oYSsxLG8pOmErbysxO2Vsc2UgaWYobiYmYSYmbylyZXR1cm4gclthPW4ocixpKV09PT1pP2E6LTE7aWYoaSE9aSlyZXR1cm4oYT10KHNsaWNlLmNhbGwocix1LG8pLGlzTmFOJDEpKT49MD9hK3U6LTE7Zm9yKGE9ZT4wP3U6by0xO2E+PTAmJmE8bzthKz1lKWlmKHJbYV09PT1pKXJldHVybiBhO3JldHVybi0xfX12YXIgaW5kZXhPZj1jcmVhdGVJbmRleEZpbmRlcigxLGZpbmRJbmRleCxzb3J0ZWRJbmRleCksbGFzdEluZGV4T2Y9Y3JlYXRlSW5kZXhGaW5kZXIoLTEsZmluZExhc3RJbmRleCk7ZnVuY3Rpb24gZmluZChlLHQsbil7dmFyIHI9KGlzQXJyYXlMaWtlKGUpP2ZpbmRJbmRleDpmaW5kS2V5KShlLHQsbik7aWYodm9pZCAwIT09ciYmLTEhPT1yKXJldHVybiBlW3JdfWZ1bmN0aW9uIGZpbmRXaGVyZShlLHQpe3JldHVybiBmaW5kKGUsbWF0Y2hlcih0KSl9ZnVuY3Rpb24gZWFjaChlLHQsbil7dmFyIHIsaTtpZih0PW9wdGltaXplQ2IodCxuKSxpc0FycmF5TGlrZShlKSlmb3Iocj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl0KGVbcl0scixlKTtlbHNle3ZhciBhPWtleXMoZSk7Zm9yKHI9MCxpPWEubGVuZ3RoO3I8aTtyKyspdChlW2Fbcl1dLGFbcl0sZSl9cmV0dXJuIGV9ZnVuY3Rpb24gbWFwKGUsdCxuKXt0PWNiKHQsbik7Zm9yKHZhciByPSFpc0FycmF5TGlrZShlKSYma2V5cyhlKSxpPShyfHxlKS5sZW5ndGgsYT1BcnJheShpKSx1PTA7dTxpO3UrKyl7dmFyIG89cj9yW3VdOnU7YVt1XT10KGVbb10sbyxlKX1yZXR1cm4gYX1mdW5jdGlvbiBjcmVhdGVSZWR1Y2UoZSl7dmFyIHQ9ZnVuY3Rpb24odCxuLHIsaSl7dmFyIGE9IWlzQXJyYXlMaWtlKHQpJiZrZXlzKHQpLHU9KGF8fHQpLmxlbmd0aCxvPWU+MD8wOnUtMTtmb3IoaXx8KHI9dFthP2Fbb106b10sbys9ZSk7bz49MCYmbzx1O28rPWUpe3ZhciBzPWE/YVtvXTpvO3I9bihyLHRbc10scyx0KX1yZXR1cm4gcn07cmV0dXJuIGZ1bmN0aW9uKGUsbixyLGkpe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+PTM7cmV0dXJuIHQoZSxvcHRpbWl6ZUNiKG4saSw0KSxyLGEpfX12YXIgcmVkdWNlPWNyZWF0ZVJlZHVjZSgxKSxyZWR1Y2VSaWdodD1jcmVhdGVSZWR1Y2UoLTEpO2Z1bmN0aW9uIGZpbHRlcihlLHQsbil7dmFyIHI9W107cmV0dXJuIHQ9Y2IodCxuKSxlYWNoKGUsKGZ1bmN0aW9uKGUsbixpKXt0KGUsbixpKSYmci5wdXNoKGUpfSkpLHJ9ZnVuY3Rpb24gcmVqZWN0KGUsdCxuKXtyZXR1cm4gZmlsdGVyKGUsbmVnYXRlKGNiKHQpKSxuKX1mdW5jdGlvbiBldmVyeShlLHQsbil7dD1jYih0LG4pO2Zvcih2YXIgcj0haXNBcnJheUxpa2UoZSkmJmtleXMoZSksaT0ocnx8ZSkubGVuZ3RoLGE9MDthPGk7YSsrKXt2YXIgdT1yP3JbYV06YTtpZighdChlW3VdLHUsZSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gc29tZShlLHQsbil7dD1jYih0LG4pO2Zvcih2YXIgcj0haXNBcnJheUxpa2UoZSkmJmtleXMoZSksaT0ocnx8ZSkubGVuZ3RoLGE9MDthPGk7YSsrKXt2YXIgdT1yP3JbYV06YTtpZih0KGVbdV0sdSxlKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBjb250YWlucyhlLHQsbixyKXtyZXR1cm4gaXNBcnJheUxpa2UoZSl8fChlPXZhbHVlcyhlKSksKCJudW1iZXIiIT10eXBlb2Ygbnx8cikmJihuPTApLGluZGV4T2YoZSx0LG4pPj0wfXZhciBpbnZva2U9cmVzdEFyZ3VtZW50cygoZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7cmV0dXJuIGlzRnVuY3Rpb24kMSh0KT9pPXQ6KHQ9dG9QYXRoKHQpLHI9dC5zbGljZSgwLC0xKSx0PXRbdC5sZW5ndGgtMV0pLG1hcChlLChmdW5jdGlvbihlKXt2YXIgYT1pO2lmKCFhKXtpZihyJiZyLmxlbmd0aCYmKGU9ZGVlcEdldChlLHIpKSxudWxsPT1lKXJldHVybjthPWVbdF19cmV0dXJuIG51bGw9PWE/YTphLmFwcGx5KGUsbil9KSl9KSk7ZnVuY3Rpb24gcGx1Y2soZSx0KXtyZXR1cm4gbWFwKGUscHJvcGVydHkodCkpfWZ1bmN0aW9uIHdoZXJlKGUsdCl7cmV0dXJuIGZpbHRlcihlLG1hdGNoZXIodCkpfWZ1bmN0aW9uIG1heChlLHQsbil7dmFyIHIsaSxhPS0xLzAsdT0tMS8wO2lmKG51bGw9PXR8fCJudW1iZXIiPT10eXBlb2YgdCYmIm9iamVjdCIhPXR5cGVvZiBlWzBdJiZudWxsIT1lKWZvcih2YXIgbz0wLHM9KGU9aXNBcnJheUxpa2UoZSk/ZTp2YWx1ZXMoZSkpLmxlbmd0aDtvPHM7bysrKW51bGwhPShyPWVbb10pJiZyPmEmJihhPXIpO2Vsc2UgdD1jYih0LG4pLGVhY2goZSwoZnVuY3Rpb24oZSxuLHIpeygoaT10KGUsbixyKSk+dXx8aT09PS0xLzAmJmE9PT0tMS8wKSYmKGE9ZSx1PWkpfSkpO3JldHVybiBhfWZ1bmN0aW9uIG1pbihlLHQsbil7dmFyIHIsaSxhPTEvMCx1PTEvMDtpZihudWxsPT10fHwibnVtYmVyIj09dHlwZW9mIHQmJiJvYmplY3QiIT10eXBlb2YgZVswXSYmbnVsbCE9ZSlmb3IodmFyIG89MCxzPShlPWlzQXJyYXlMaWtlKGUpP2U6dmFsdWVzKGUpKS5sZW5ndGg7bzxzO28rKyludWxsIT0ocj1lW29dKSYmcjxhJiYoYT1yKTtlbHNlIHQ9Y2IodCxuKSxlYWNoKGUsKGZ1bmN0aW9uKGUsbixyKXsoKGk9dChlLG4scikpPHV8fGk9PT0xLzAmJmE9PT0xLzApJiYoYT1lLHU9aSl9KSk7cmV0dXJuIGF9dmFyIHJlU3RyU3ltYm9sPS9bXlx1ZDgwMC1cdWRmZmZdfFtcdWQ4MDAtXHVkYmZmXVtcdWRjMDAtXHVkZmZmXXxbXHVkODAwLVx1ZGZmZl0vZztmdW5jdGlvbiB0b0FycmF5KGUpe3JldHVybiBlP2lzQXJyYXkoZSk/c2xpY2UuY2FsbChlKTppc1N0cmluZyhlKT9lLm1hdGNoKHJlU3RyU3ltYm9sKTppc0FycmF5TGlrZShlKT9tYXAoZSxpZGVudGl0eSk6dmFsdWVzKGUpOltdfWZ1bmN0aW9uIHNhbXBsZShlLHQsbil7aWYobnVsbD09dHx8bilyZXR1cm4gaXNBcnJheUxpa2UoZSl8fChlPXZhbHVlcyhlKSksZVtyYW5kb20oZS5sZW5ndGgtMSldO3ZhciByPXRvQXJyYXkoZSksaT1nZXRMZW5ndGgocik7dD1NYXRoLm1heChNYXRoLm1pbih0LGkpLDApO2Zvcih2YXIgYT1pLTEsdT0wO3U8dDt1Kyspe3ZhciBvPXJhbmRvbSh1LGEpLHM9clt1XTtyW3VdPXJbb10scltvXT1zfXJldHVybiByLnNsaWNlKDAsdCl9ZnVuY3Rpb24gc2h1ZmZsZShlKXtyZXR1cm4gc2FtcGxlKGUsMS8wKX1mdW5jdGlvbiBzb3J0QnkoZSx0LG4pe3ZhciByPTA7cmV0dXJuIHQ9Y2IodCxuKSxwbHVjayhtYXAoZSwoZnVuY3Rpb24oZSxuLGkpe3JldHVybnt2YWx1ZTplLGluZGV4OnIrKyxjcml0ZXJpYTp0KGUsbixpKX19KSkuc29ydCgoZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmNyaXRlcmlhLHI9dC5jcml0ZXJpYTtpZihuIT09cil7aWYobj5yfHx2b2lkIDA9PT1uKXJldHVybiAxO2lmKG48cnx8dm9pZCAwPT09cilyZXR1cm4tMX1yZXR1cm4gZS5pbmRleC10LmluZGV4fSkpLCJ2YWx1ZSIpfWZ1bmN0aW9uIGdyb3VwKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scixpKXt2YXIgYT10P1tbXSxbXV06e307cmV0dXJuIHI9Y2IocixpKSxlYWNoKG4sKGZ1bmN0aW9uKHQsaSl7dmFyIHU9cih0LGksbik7ZShhLHQsdSl9KSksYX19dmFyIGdyb3VwQnk9Z3JvdXAoKGZ1bmN0aW9uKGUsdCxuKXtoYXMkMShlLG4pP2Vbbl0ucHVzaCh0KTplW25dPVt0XX0pKSxpbmRleEJ5PWdyb3VwKChmdW5jdGlvbihlLHQsbil7ZVtuXT10fSkpLGNvdW50Qnk9Z3JvdXAoKGZ1bmN0aW9uKGUsdCxuKXtoYXMkMShlLG4pP2Vbbl0rKzplW25dPTF9KSkscGFydGl0aW9uPWdyb3VwKChmdW5jdGlvbihlLHQsbil7ZVtuPzA6MV0ucHVzaCh0KX0pLCEwKTtmdW5jdGlvbiBzaXplKGUpe3JldHVybiBudWxsPT1lPzA6aXNBcnJheUxpa2UoZSk/ZS5sZW5ndGg6a2V5cyhlKS5sZW5ndGh9ZnVuY3Rpb24ga2V5SW5PYmooZSx0LG4pe3JldHVybiB0IGluIG59dmFyIHBpY2s9cmVzdEFyZ3VtZW50cygoZnVuY3Rpb24oZSx0KXt2YXIgbj17fSxyPXRbMF07aWYobnVsbD09ZSlyZXR1cm4gbjtpc0Z1bmN0aW9uJDEocik/KHQubGVuZ3RoPjEmJihyPW9wdGltaXplQ2Iocix0WzFdKSksdD1hbGxLZXlzKGUpKToocj1rZXlJbk9iaix0PWZsYXR0ZW4kMSh0LCExLCExKSxlPU9iamVjdChlKSk7Zm9yKHZhciBpPTAsYT10Lmxlbmd0aDtpPGE7aSsrKXt2YXIgdT10W2ldLG89ZVt1XTtyKG8sdSxlKSYmKG5bdV09byl9cmV0dXJuIG59KSksb21pdD1yZXN0QXJndW1lbnRzKChmdW5jdGlvbihlLHQpe3ZhciBuLHI9dFswXTtyZXR1cm4gaXNGdW5jdGlvbiQxKHIpPyhyPW5lZ2F0ZShyKSx0Lmxlbmd0aD4xJiYobj10WzFdKSk6KHQ9bWFwKGZsYXR0ZW4kMSh0LCExLCExKSxTdHJpbmcpLHI9ZnVuY3Rpb24oZSxuKXtyZXR1cm4hY29udGFpbnModCxuKX0pLHBpY2soZSxyLG4pfSkpO2Z1bmN0aW9uIGluaXRpYWwoZSx0LG4pe3JldHVybiBzbGljZS5jYWxsKGUsMCxNYXRoLm1heCgwLGUubGVuZ3RoLShudWxsPT10fHxuPzE6dCkpKX1mdW5jdGlvbiBmaXJzdChlLHQsbil7cmV0dXJuIG51bGw9PWV8fGUubGVuZ3RoPDE/bnVsbD09dHx8bj92b2lkIDA6W106bnVsbD09dHx8bj9lWzBdOmluaXRpYWwoZSxlLmxlbmd0aC10KX1mdW5jdGlvbiByZXN0KGUsdCxuKXtyZXR1cm4gc2xpY2UuY2FsbChlLG51bGw9PXR8fG4/MTp0KX1mdW5jdGlvbiBsYXN0KGUsdCxuKXtyZXR1cm4gbnVsbD09ZXx8ZS5sZW5ndGg8MT9udWxsPT10fHxuP3ZvaWQgMDpbXTpudWxsPT10fHxuP2VbZS5sZW5ndGgtMV06cmVzdChlLE1hdGgubWF4KDAsZS5sZW5ndGgtdCkpfWZ1bmN0aW9uIGNvbXBhY3QoZSl7cmV0dXJuIGZpbHRlcihlLEJvb2xlYW4pfWZ1bmN0aW9uIGZsYXR0ZW4oZSx0KXtyZXR1cm4gZmxhdHRlbiQxKGUsdCwhMSl9dmFyIGRpZmZlcmVuY2U9cmVzdEFyZ3VtZW50cygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD1mbGF0dGVuJDEodCwhMCwhMCksZmlsdGVyKGUsKGZ1bmN0aW9uKGUpe3JldHVybiFjb250YWlucyh0LGUpfSkpfSkpLHdpdGhvdXQ9cmVzdEFyZ3VtZW50cygoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZGlmZmVyZW5jZShlLHQpfSkpO2Z1bmN0aW9uIHVuaXEoZSx0LG4scil7aXNCb29sZWFuKHQpfHwocj1uLG49dCx0PSExKSxudWxsIT1uJiYobj1jYihuLHIpKTtmb3IodmFyIGk9W10sYT1bXSx1PTAsbz1nZXRMZW5ndGgoZSk7dTxvO3UrKyl7dmFyIHM9ZVt1XSxjPW4/bihzLHUsZSk6czt0JiYhbj8odSYmYT09PWN8fGkucHVzaChzKSxhPWMpOm4/Y29udGFpbnMoYSxjKXx8KGEucHVzaChjKSxpLnB1c2gocykpOmNvbnRhaW5zKGkscyl8fGkucHVzaChzKX1yZXR1cm4gaX12YXIgdW5pb249cmVzdEFyZ3VtZW50cygoZnVuY3Rpb24oZSl7cmV0dXJuIHVuaXEoZmxhdHRlbiQxKGUsITAsITApKX0pKTtmdW5jdGlvbiBpbnRlcnNlY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49YXJndW1lbnRzLmxlbmd0aCxyPTAsaT1nZXRMZW5ndGgoZSk7cjxpO3IrKyl7dmFyIGE9ZVtyXTtpZighY29udGFpbnModCxhKSl7dmFyIHU7Zm9yKHU9MTt1PG4mJmNvbnRhaW5zKGFyZ3VtZW50c1t1XSxhKTt1KyspO3U9PT1uJiZ0LnB1c2goYSl9fXJldHVybiB0fWZ1bmN0aW9uIHVuemlwKGUpe2Zvcih2YXIgdD1lJiZtYXgoZSxnZXRMZW5ndGgpLmxlbmd0aHx8MCxuPUFycmF5KHQpLHI9MDtyPHQ7cisrKW5bcl09cGx1Y2soZSxyKTtyZXR1cm4gbn12YXIgemlwPXJlc3RBcmd1bWVudHModW56aXApO2Z1bmN0aW9uIG9iamVjdChlLHQpe2Zvcih2YXIgbj17fSxyPTAsaT1nZXRMZW5ndGgoZSk7cjxpO3IrKyl0P25bZVtyXV09dFtyXTpuW2Vbcl1bMF1dPWVbcl1bMV07cmV0dXJuIG59ZnVuY3Rpb24gcmFuZ2UoZSx0LG4pe251bGw9PXQmJih0PWV8fDAsZT0wKSxufHwobj10PGU/LTE6MSk7Zm9yKHZhciByPU1hdGgubWF4KE1hdGguY2VpbCgodC1lKS9uKSwwKSxpPUFycmF5KHIpLGE9MDthPHI7YSsrLGUrPW4paVthXT1lO3JldHVybiBpfWZ1bmN0aW9uIGNodW5rKGUsdCl7aWYobnVsbD09dHx8dDwxKXJldHVybltdO2Zvcih2YXIgbj1bXSxyPTAsaT1lLmxlbmd0aDtyPGk7KW4ucHVzaChzbGljZS5jYWxsKGUscixyKz10KSk7cmV0dXJuIG59ZnVuY3Rpb24gY2hhaW5SZXN1bHQoZSx0KXtyZXR1cm4gZS5fY2hhaW4/XyQxKHQpLmNoYWluKCk6dH1mdW5jdGlvbiBtaXhpbihlKXtyZXR1cm4gZWFjaChmdW5jdGlvbnMoZSksKGZ1bmN0aW9uKHQpe3ZhciBuPV8kMVt0XT1lW3RdO18kMS5wcm90b3R5cGVbdF09ZnVuY3Rpb24oKXt2YXIgZT1bdGhpcy5fd3JhcHBlZF07cmV0dXJuIHB1c2guYXBwbHkoZSxhcmd1bWVudHMpLGNoYWluUmVzdWx0KHRoaXMsbi5hcHBseShfJDEsZSkpfX0pKSxfJDF9ZWFjaChbInBvcCIsInB1c2giLCJyZXZlcnNlIiwic2hpZnQiLCJzb3J0Iiwic3BsaWNlIiwidW5zaGlmdCJdLChmdW5jdGlvbihlKXt2YXIgdD1BcnJheVByb3RvW2VdO18kMS5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXt2YXIgbj10aGlzLl93cmFwcGVkO3JldHVybiBudWxsIT1uJiYodC5hcHBseShuLGFyZ3VtZW50cyksInNoaWZ0IiE9PWUmJiJzcGxpY2UiIT09ZXx8MCE9PW4ubGVuZ3RofHxkZWxldGUgblswXSksY2hhaW5SZXN1bHQodGhpcyxuKX19KSksZWFjaChbImNvbmNhdCIsImpvaW4iLCJzbGljZSJdLChmdW5jdGlvbihlKXt2YXIgdD1BcnJheVByb3RvW2VdO18kMS5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl93cmFwcGVkO3JldHVybiBudWxsIT1lJiYoZT10LmFwcGx5KGUsYXJndW1lbnRzKSksY2hhaW5SZXN1bHQodGhpcyxlKX19KSk7dmFyIGFsbEV4cG9ydHM9e19fcHJvdG9fXzpudWxsLFZFUlNJT046VkVSU0lPTixyZXN0QXJndW1lbnRzOnJlc3RBcmd1bWVudHMsaXNPYmplY3Q6aXNPYmplY3QsaXNOdWxsOmlzTnVsbCxpc1VuZGVmaW5lZDppc1VuZGVmaW5lZCxpc0Jvb2xlYW46aXNCb29sZWFuLGlzRWxlbWVudDppc0VsZW1lbnQsaXNTdHJpbmc6aXNTdHJpbmcsaXNOdW1iZXI6aXNOdW1iZXIsaXNEYXRlOmlzRGF0ZSxpc1JlZ0V4cDppc1JlZ0V4cCxpc0Vycm9yOmlzRXJyb3IsaXNTeW1ib2w6aXNTeW1ib2wsaXNBcnJheUJ1ZmZlcjppc0FycmF5QnVmZmVyLGlzRGF0YVZpZXc6aXNEYXRhVmlldyQxLGlzQXJyYXk6aXNBcnJheSxpc0Z1bmN0aW9uOmlzRnVuY3Rpb24kMSxpc0FyZ3VtZW50czppc0FyZ3VtZW50cyQxLGlzRmluaXRlOmlzRmluaXRlJDEsaXNOYU46aXNOYU4kMSxpc1R5cGVkQXJyYXk6aXNUeXBlZEFycmF5JDEsaXNFbXB0eTppc0VtcHR5LGlzTWF0Y2g6aXNNYXRjaCxpc0VxdWFsOmlzRXF1YWwsaXNNYXA6aXNNYXAsaXNXZWFrTWFwOmlzV2Vha01hcCxpc1NldDppc1NldCxpc1dlYWtTZXQ6aXNXZWFrU2V0LGtleXM6a2V5cyxhbGxLZXlzOmFsbEtleXMsdmFsdWVzOnZhbHVlcyxwYWlyczpwYWlycyxpbnZlcnQ6aW52ZXJ0LGZ1bmN0aW9uczpmdW5jdGlvbnMsbWV0aG9kczpmdW5jdGlvbnMsZXh0ZW5kOmV4dGVuZCxleHRlbmRPd246ZXh0ZW5kT3duLGFzc2lnbjpleHRlbmRPd24sZGVmYXVsdHM6ZGVmYXVsdHMsY3JlYXRlOmNyZWF0ZSxjbG9uZTpjbG9uZSx0YXA6dGFwLGdldDpnZXQsaGFzOmhhcyxtYXBPYmplY3Q6bWFwT2JqZWN0LGlkZW50aXR5OmlkZW50aXR5LGNvbnN0YW50OmNvbnN0YW50LG5vb3A6bm9vcCx0b1BhdGg6dG9QYXRoJDEscHJvcGVydHk6cHJvcGVydHkscHJvcGVydHlPZjpwcm9wZXJ0eU9mLG1hdGNoZXI6bWF0Y2hlcixtYXRjaGVzOm1hdGNoZXIsdGltZXM6dGltZXMscmFuZG9tOnJhbmRvbSxub3c6bm93LGVzY2FwZTpfZXNjYXBlLHVuZXNjYXBlOl91bmVzY2FwZSx0ZW1wbGF0ZVNldHRpbmdzOnRlbXBsYXRlU2V0dGluZ3MsdGVtcGxhdGU6dGVtcGxhdGUscmVzdWx0OnJlc3VsdCx1bmlxdWVJZDp1bmlxdWVJZCxjaGFpbjpjaGFpbixpdGVyYXRlZTppdGVyYXRlZSxwYXJ0aWFsOnBhcnRpYWwsYmluZDpiaW5kLGJpbmRBbGw6YmluZEFsbCxtZW1vaXplOm1lbW9pemUsZGVsYXk6ZGVsYXksZGVmZXI6ZGVmZXIsdGhyb3R0bGU6dGhyb3R0bGUsZGVib3VuY2U6ZGVib3VuY2Usd3JhcDp3cmFwLG5lZ2F0ZTpuZWdhdGUsY29tcG9zZTpjb21wb3NlLGFmdGVyOmFmdGVyLGJlZm9yZTpiZWZvcmUsb25jZTpvbmNlLGZpbmRLZXk6ZmluZEtleSxmaW5kSW5kZXg6ZmluZEluZGV4LGZpbmRMYXN0SW5kZXg6ZmluZExhc3RJbmRleCxzb3J0ZWRJbmRleDpzb3J0ZWRJbmRleCxpbmRleE9mOmluZGV4T2YsbGFzdEluZGV4T2Y6bGFzdEluZGV4T2YsZmluZDpmaW5kLGRldGVjdDpmaW5kLGZpbmRXaGVyZTpmaW5kV2hlcmUsZWFjaDplYWNoLGZvckVhY2g6ZWFjaCxtYXA6bWFwLGNvbGxlY3Q6bWFwLHJlZHVjZTpyZWR1Y2UsZm9sZGw6cmVkdWNlLGluamVjdDpyZWR1Y2UscmVkdWNlUmlnaHQ6cmVkdWNlUmlnaHQsZm9sZHI6cmVkdWNlUmlnaHQsZmlsdGVyOmZpbHRlcixzZWxlY3Q6ZmlsdGVyLHJlamVjdDpyZWplY3QsZXZlcnk6ZXZlcnksYWxsOmV2ZXJ5LHNvbWU6c29tZSxhbnk6c29tZSxjb250YWluczpjb250YWlucyxpbmNsdWRlczpjb250YWlucyxpbmNsdWRlOmNvbnRhaW5zLGludm9rZTppbnZva2UscGx1Y2s6cGx1Y2ssd2hlcmU6d2hlcmUsbWF4Om1heCxtaW46bWluLHNodWZmbGU6c2h1ZmZsZSxzYW1wbGU6c2FtcGxlLHNvcnRCeTpzb3J0QnksZ3JvdXBCeTpncm91cEJ5LGluZGV4Qnk6aW5kZXhCeSxjb3VudEJ5OmNvdW50QnkscGFydGl0aW9uOnBhcnRpdGlvbix0b0FycmF5OnRvQXJyYXksc2l6ZTpzaXplLHBpY2s6cGljayxvbWl0Om9taXQsZmlyc3Q6Zmlyc3QsaGVhZDpmaXJzdCx0YWtlOmZpcnN0LGluaXRpYWw6aW5pdGlhbCxsYXN0Omxhc3QscmVzdDpyZXN0LHRhaWw6cmVzdCxkcm9wOnJlc3QsY29tcGFjdDpjb21wYWN0LGZsYXR0ZW46ZmxhdHRlbix3aXRob3V0OndpdGhvdXQsdW5pcTp1bmlxLHVuaXF1ZTp1bmlxLHVuaW9uOnVuaW9uLGludGVyc2VjdGlvbjppbnRlcnNlY3Rpb24sZGlmZmVyZW5jZTpkaWZmZXJlbmNlLHVuemlwOnVuemlwLHRyYW5zcG9zZTp1bnppcCx6aXA6emlwLG9iamVjdDpvYmplY3QscmFuZ2U6cmFuZ2UsY2h1bms6Y2h1bmssbWl4aW46bWl4aW4sZGVmYXVsdDpfJDF9LF89bWl4aW4oYWxsRXhwb3J0cyk7Xy5fPV87ZXhwb3J0IGRlZmF1bHQgXztleHBvcnR7VkVSU0lPTixhZnRlcixldmVyeSBhcyBhbGwsYWxsS2V5cyxzb21lIGFzIGFueSxleHRlbmRPd24gYXMgYXNzaWduLGJlZm9yZSxiaW5kLGJpbmRBbGwsY2hhaW4sY2h1bmssY2xvbmUsbWFwIGFzIGNvbGxlY3QsY29tcGFjdCxjb21wb3NlLGNvbnN0YW50LGNvbnRhaW5zLGNvdW50QnksY3JlYXRlLGRlYm91bmNlLGRlZmF1bHRzLGRlZmVyLGRlbGF5LGZpbmQgYXMgZGV0ZWN0LGRpZmZlcmVuY2UscmVzdCBhcyBkcm9wLGVhY2gsX2VzY2FwZSBhcyBlc2NhcGUsZXZlcnksZXh0ZW5kLGV4dGVuZE93bixmaWx0ZXIsZmluZCxmaW5kSW5kZXgsZmluZEtleSxmaW5kTGFzdEluZGV4LGZpbmRXaGVyZSxmaXJzdCxmbGF0dGVuLHJlZHVjZSBhcyBmb2xkbCxyZWR1Y2VSaWdodCBhcyBmb2xkcixlYWNoIGFzIGZvckVhY2gsZnVuY3Rpb25zLGdldCxncm91cEJ5LGhhcyxmaXJzdCBhcyBoZWFkLGlkZW50aXR5LGNvbnRhaW5zIGFzIGluY2x1ZGUsY29udGFpbnMgYXMgaW5jbHVkZXMsaW5kZXhCeSxpbmRleE9mLGluaXRpYWwscmVkdWNlIGFzIGluamVjdCxpbnRlcnNlY3Rpb24saW52ZXJ0LGludm9rZSxpc0FyZ3VtZW50cyQxIGFzIGlzQXJndW1lbnRzLGlzQXJyYXksaXNBcnJheUJ1ZmZlcixpc0Jvb2xlYW4saXNEYXRhVmlldyQxIGFzIGlzRGF0YVZpZXcsaXNEYXRlLGlzRWxlbWVudCxpc0VtcHR5LGlzRXF1YWwsaXNFcnJvcixpc0Zpbml0ZSQxIGFzIGlzRmluaXRlLGlzRnVuY3Rpb24kMSBhcyBpc0Z1bmN0aW9uLGlzTWFwLGlzTWF0Y2gsaXNOYU4kMSBhcyBpc05hTixpc051bGwsaXNOdW1iZXIsaXNPYmplY3QsaXNSZWdFeHAsaXNTZXQsaXNTdHJpbmcsaXNTeW1ib2wsaXNUeXBlZEFycmF5JDEgYXMgaXNUeXBlZEFycmF5LGlzVW5kZWZpbmVkLGlzV2Vha01hcCxpc1dlYWtTZXQsaXRlcmF0ZWUsa2V5cyxsYXN0LGxhc3RJbmRleE9mLG1hcCxtYXBPYmplY3QsbWF0Y2hlcixtYXRjaGVyIGFzIG1hdGNoZXMsbWF4LG1lbW9pemUsZnVuY3Rpb25zIGFzIG1ldGhvZHMsbWluLG1peGluLG5lZ2F0ZSxub29wLG5vdyxvYmplY3Qsb21pdCxvbmNlLHBhaXJzLHBhcnRpYWwscGFydGl0aW9uLHBpY2sscGx1Y2sscHJvcGVydHkscHJvcGVydHlPZixyYW5kb20scmFuZ2UscmVkdWNlLHJlZHVjZVJpZ2h0LHJlamVjdCxyZXN0LHJlc3RBcmd1bWVudHMscmVzdWx0LHNhbXBsZSxmaWx0ZXIgYXMgc2VsZWN0LHNodWZmbGUsc2l6ZSxzb21lLHNvcnRCeSxzb3J0ZWRJbmRleCxyZXN0IGFzIHRhaWwsZmlyc3QgYXMgdGFrZSx0YXAsdGVtcGxhdGUsdGVtcGxhdGVTZXR0aW5ncyx0aHJvdHRsZSx0aW1lcyx0b0FycmF5LHRvUGF0aCQxIGFzIHRvUGF0aCx1bnppcCBhcyB0cmFuc3Bvc2UsX3VuZXNjYXBlIGFzIHVuZXNjYXBlLHVuaW9uLHVuaXEsdW5pcSBhcyB1bmlxdWUsdW5pcXVlSWQsdW56aXAsdmFsdWVzLHdoZXJlLHdpdGhvdXQsd3JhcCx6aXB9Ow==]]></data>
	</file>
	<file>
	  <filename>/js/underscore-min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IWZ1bmN0aW9uKG4scil7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1yKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoInVuZGVyc2NvcmUiLHIpOihuPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOm58fHNlbGYsZnVuY3Rpb24oKXt2YXIgdD1uLl8sZT1uLl89cigpO2Uubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBuLl89dCxlfX0oKSl9KHRoaXMsKGZ1bmN0aW9uKCl7Ci8vICAgICBVbmRlcnNjb3JlLmpzIDEuMTMuNgovLyAgICAgaHR0cHM6Ly91bmRlcnNjb3JlanMub3JnCi8vICAgICAoYykgMjAwOS0yMDIyIEplcmVteSBBc2hrZW5hcywgSnVsaWFuIEdvbmdncmlqcCwgYW5kIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9ycwovLyAgICAgVW5kZXJzY29yZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KdmFyIG49IjEuMTMuNiIscj0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYuc2VsZj09PXNlbGYmJnNlbGZ8fCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwuZ2xvYmFsPT09Z2xvYmFsJiZnbG9iYWx8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl8fHt9LHQ9QXJyYXkucHJvdG90eXBlLGU9T2JqZWN0LnByb3RvdHlwZSx1PSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sP1N5bWJvbC5wcm90b3R5cGU6bnVsbCxvPXQucHVzaCxpPXQuc2xpY2UsYT1lLnRvU3RyaW5nLGY9ZS5oYXNPd25Qcm9wZXJ0eSxjPSJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXIsbD0idW5kZWZpbmVkIiE9dHlwZW9mIERhdGFWaWV3LHM9QXJyYXkuaXNBcnJheSxwPU9iamVjdC5rZXlzLHY9T2JqZWN0LmNyZWF0ZSxoPWMmJkFycmF5QnVmZmVyLmlzVmlldyx5PWlzTmFOLGQ9aXNGaW5pdGUsZz0he3RvU3RyaW5nOm51bGx9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCJ0b1N0cmluZyIpLGI9WyJ2YWx1ZU9mIiwiaXNQcm90b3R5cGVPZiIsInRvU3RyaW5nIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJoYXNPd25Qcm9wZXJ0eSIsInRvTG9jYWxlU3RyaW5nIl0sbT1NYXRoLnBvdygyLDUzKS0xO2Z1bmN0aW9uIGoobixyKXtyZXR1cm4gcj1udWxsPT1yP24ubGVuZ3RoLTE6K3IsZnVuY3Rpb24oKXtmb3IodmFyIHQ9TWF0aC5tYXgoYXJndW1lbnRzLmxlbmd0aC1yLDApLGU9QXJyYXkodCksdT0wO3U8dDt1KyspZVt1XT1hcmd1bWVudHNbdStyXTtzd2l0Y2gocil7Y2FzZSAwOnJldHVybiBuLmNhbGwodGhpcyxlKTtjYXNlIDE6cmV0dXJuIG4uY2FsbCh0aGlzLGFyZ3VtZW50c1swXSxlKTtjYXNlIDI6cmV0dXJuIG4uY2FsbCh0aGlzLGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sZSl9dmFyIG89QXJyYXkocisxKTtmb3IodT0wO3U8cjt1Kyspb1t1XT1hcmd1bWVudHNbdV07cmV0dXJuIG9bcl09ZSxuLmFwcGx5KHRoaXMsbyl9fWZ1bmN0aW9uIF8obil7dmFyIHI9dHlwZW9mIG47cmV0dXJuImZ1bmN0aW9uIj09PXJ8fCJvYmplY3QiPT09ciYmISFufWZ1bmN0aW9uIHcobil7cmV0dXJuIHZvaWQgMD09PW59ZnVuY3Rpb24gQShuKXtyZXR1cm4hMD09PW58fCExPT09bnx8IltvYmplY3QgQm9vbGVhbl0iPT09YS5jYWxsKG4pfWZ1bmN0aW9uIHgobil7dmFyIHI9IltvYmplY3QgIituKyJdIjtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGEuY2FsbChuKT09PXJ9fXZhciBTPXgoIlN0cmluZyIpLE89eCgiTnVtYmVyIiksTT14KCJEYXRlIiksRT14KCJSZWdFeHAiKSxCPXgoIkVycm9yIiksTj14KCJTeW1ib2wiKSxJPXgoIkFycmF5QnVmZmVyIiksVD14KCJGdW5jdGlvbiIpLGs9ci5kb2N1bWVudCYmci5kb2N1bWVudC5jaGlsZE5vZGVzOyJmdW5jdGlvbiIhPXR5cGVvZi8uLyYmIm9iamVjdCIhPXR5cGVvZiBJbnQ4QXJyYXkmJiJmdW5jdGlvbiIhPXR5cGVvZiBrJiYoVD1mdW5jdGlvbihuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbnx8ITF9KTt2YXIgRD1ULFI9eCgiT2JqZWN0IiksRj1sJiZSKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoOCkpKSxWPSJ1bmRlZmluZWQiIT10eXBlb2YgTWFwJiZSKG5ldyBNYXApLFA9eCgiRGF0YVZpZXciKTt2YXIgcT1GP2Z1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiZEKG4uZ2V0SW50OCkmJkkobi5idWZmZXIpfTpQLFU9c3x8eCgiQXJyYXkiKTtmdW5jdGlvbiBXKG4scil7cmV0dXJuIG51bGwhPW4mJmYuY2FsbChuLHIpfXZhciB6PXgoIkFyZ3VtZW50cyIpOyFmdW5jdGlvbigpe3ooYXJndW1lbnRzKXx8KHo9ZnVuY3Rpb24obil7cmV0dXJuIFcobiwiY2FsbGVlIil9KX0oKTt2YXIgTD16O2Z1bmN0aW9uICQobil7cmV0dXJuIE8obikmJnkobil9ZnVuY3Rpb24gQyhuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gSyhuKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIHQ9bihyKTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTAmJnQ8PW19fWZ1bmN0aW9uIEoobil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBudWxsPT1yP3ZvaWQgMDpyW25dfX12YXIgRz1KKCJieXRlTGVuZ3RoIiksSD1LKEcpLFE9L1xbb2JqZWN0ICgoSXxVaSludCg4fDE2fDMyKXxGbG9hdCgzMnw2NCl8VWludDhDbGFtcGVkfEJpZyhJfFVpKW50NjQpQXJyYXlcXS87dmFyIFg9Yz9mdW5jdGlvbihuKXtyZXR1cm4gaD9oKG4pJiYhcShuKTpIKG4pJiZRLnRlc3QoYS5jYWxsKG4pKX06QyghMSksWT1KKCJsZW5ndGgiKTtmdW5jdGlvbiBaKG4scil7cj1mdW5jdGlvbihuKXtmb3IodmFyIHI9e30sdD1uLmxlbmd0aCxlPTA7ZTx0OysrZSlyW25bZV1dPSEwO3JldHVybntjb250YWluczpmdW5jdGlvbihuKXtyZXR1cm4hMD09PXJbbl19LHB1c2g6ZnVuY3Rpb24odCl7cmV0dXJuIHJbdF09ITAsbi5wdXNoKHQpfX19KHIpO3ZhciB0PWIubGVuZ3RoLHU9bi5jb25zdHJ1Y3RvcixvPUQodSkmJnUucHJvdG90eXBlfHxlLGk9ImNvbnN0cnVjdG9yIjtmb3IoVyhuLGkpJiYhci5jb250YWlucyhpKSYmci5wdXNoKGkpO3QtLTspKGk9Ylt0XSlpbiBuJiZuW2ldIT09b1tpXSYmIXIuY29udGFpbnMoaSkmJnIucHVzaChpKX1mdW5jdGlvbiBubihuKXtpZighXyhuKSlyZXR1cm5bXTtpZihwKXJldHVybiBwKG4pO3ZhciByPVtdO2Zvcih2YXIgdCBpbiBuKVcobix0KSYmci5wdXNoKHQpO3JldHVybiBnJiZaKG4scikscn1mdW5jdGlvbiBybihuLHIpe3ZhciB0PW5uKHIpLGU9dC5sZW5ndGg7aWYobnVsbD09bilyZXR1cm4hZTtmb3IodmFyIHU9T2JqZWN0KG4pLG89MDtvPGU7bysrKXt2YXIgaT10W29dO2lmKHJbaV0hPT11W2ldfHwhKGkgaW4gdSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gdG4obil7cmV0dXJuIG4gaW5zdGFuY2VvZiB0bj9uOnRoaXMgaW5zdGFuY2VvZiB0bj92b2lkKHRoaXMuX3dyYXBwZWQ9bik6bmV3IHRuKG4pfWZ1bmN0aW9uIGVuKG4pe3JldHVybiBuZXcgVWludDhBcnJheShuLmJ1ZmZlcnx8bixuLmJ5dGVPZmZzZXR8fDAsRyhuKSl9dG4uVkVSU0lPTj1uLHRuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwcGVkfSx0bi5wcm90b3R5cGUudmFsdWVPZj10bi5wcm90b3R5cGUudG9KU09OPXRuLnByb3RvdHlwZS52YWx1ZSx0bi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nKHRoaXMuX3dyYXBwZWQpfTt2YXIgdW49IltvYmplY3QgRGF0YVZpZXddIjtmdW5jdGlvbiBvbihuLHIsdCxlKXtpZihuPT09cilyZXR1cm4gMCE9PW58fDEvbj09MS9yO2lmKG51bGw9PW58fG51bGw9PXIpcmV0dXJuITE7aWYobiE9bilyZXR1cm4gciE9cjt2YXIgbz10eXBlb2YgbjtyZXR1cm4oImZ1bmN0aW9uIj09PW98fCJvYmplY3QiPT09b3x8Im9iamVjdCI9PXR5cGVvZiByKSYmZnVuY3Rpb24gbihyLHQsZSxvKXtyIGluc3RhbmNlb2YgdG4mJihyPXIuX3dyYXBwZWQpO3QgaW5zdGFuY2VvZiB0biYmKHQ9dC5fd3JhcHBlZCk7dmFyIGk9YS5jYWxsKHIpO2lmKGkhPT1hLmNhbGwodCkpcmV0dXJuITE7aWYoRiYmIltvYmplY3QgT2JqZWN0XSI9PWkmJnEocikpe2lmKCFxKHQpKXJldHVybiExO2k9dW59c3dpdGNoKGkpe2Nhc2UiW29iamVjdCBSZWdFeHBdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIiIrcj09IiIrdDtjYXNlIltvYmplY3QgTnVtYmVyXSI6cmV0dXJuK3IhPStyPyt0IT0rdDowPT0rcj8xLytyPT0xL3Q6K3I9PSt0O2Nhc2UiW29iamVjdCBEYXRlXSI6Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpyZXR1cm4rcj09K3Q7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOnJldHVybiB1LnZhbHVlT2YuY2FsbChyKT09PXUudmFsdWVPZi5jYWxsKHQpO2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOmNhc2UgdW46cmV0dXJuIG4oZW4ociksZW4odCksZSxvKX12YXIgZj0iW29iamVjdCBBcnJheV0iPT09aTtpZighZiYmWChyKSl7aWYoRyhyKSE9PUcodCkpcmV0dXJuITE7aWYoci5idWZmZXI9PT10LmJ1ZmZlciYmci5ieXRlT2Zmc2V0PT09dC5ieXRlT2Zmc2V0KXJldHVybiEwO2Y9ITB9aWYoIWYpe2lmKCJvYmplY3QiIT10eXBlb2Ygcnx8Im9iamVjdCIhPXR5cGVvZiB0KXJldHVybiExO3ZhciBjPXIuY29uc3RydWN0b3IsbD10LmNvbnN0cnVjdG9yO2lmKGMhPT1sJiYhKEQoYykmJmMgaW5zdGFuY2VvZiBjJiZEKGwpJiZsIGluc3RhbmNlb2YgbCkmJiJjb25zdHJ1Y3RvciJpbiByJiYiY29uc3RydWN0b3IiaW4gdClyZXR1cm4hMX1vPW98fFtdO3ZhciBzPShlPWV8fFtdKS5sZW5ndGg7Zm9yKDtzLS07KWlmKGVbc109PT1yKXJldHVybiBvW3NdPT09dDtpZihlLnB1c2gociksby5wdXNoKHQpLGYpe2lmKChzPXIubGVuZ3RoKSE9PXQubGVuZ3RoKXJldHVybiExO2Zvcig7cy0tOylpZighb24ocltzXSx0W3NdLGUsbykpcmV0dXJuITF9ZWxzZXt2YXIgcCx2PW5uKHIpO2lmKHM9di5sZW5ndGgsbm4odCkubGVuZ3RoIT09cylyZXR1cm4hMTtmb3IoO3MtLTspaWYocD12W3NdLCFXKHQscCl8fCFvbihyW3BdLHRbcF0sZSxvKSlyZXR1cm4hMX1yZXR1cm4gZS5wb3AoKSxvLnBvcCgpLCEwfShuLHIsdCxlKX1mdW5jdGlvbiBhbihuKXtpZighXyhuKSlyZXR1cm5bXTt2YXIgcj1bXTtmb3IodmFyIHQgaW4gbilyLnB1c2godCk7cmV0dXJuIGcmJloobixyKSxyfWZ1bmN0aW9uIGZuKG4pe3ZhciByPVkobik7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuITE7dmFyIGU9YW4odCk7aWYoWShlKSlyZXR1cm4hMTtmb3IodmFyIHU9MDt1PHI7dSsrKWlmKCFEKHRbblt1XV0pKXJldHVybiExO3JldHVybiBuIT09aG58fCFEKHRbY25dKX19dmFyIGNuPSJmb3JFYWNoIixsbj0iaGFzIixzbj1bImNsZWFyIiwiZGVsZXRlIl0scG49WyJnZXQiLGxuLCJzZXQiXSx2bj1zbi5jb25jYXQoY24scG4pLGhuPXNuLmNvbmNhdChwbikseW49WyJhZGQiXS5jb25jYXQoc24sY24sbG4pLGRuPVY/Zm4odm4pOngoIk1hcCIpLGduPVY/Zm4oaG4pOngoIldlYWtNYXAiKSxibj1WP2ZuKHluKTp4KCJTZXQiKSxtbj14KCJXZWFrU2V0Iik7ZnVuY3Rpb24gam4obil7Zm9yKHZhciByPW5uKG4pLHQ9ci5sZW5ndGgsZT1BcnJheSh0KSx1PTA7dTx0O3UrKyllW3VdPW5bclt1XV07cmV0dXJuIGV9ZnVuY3Rpb24gX24obil7Zm9yKHZhciByPXt9LHQ9bm4obiksZT0wLHU9dC5sZW5ndGg7ZTx1O2UrKylyW25bdFtlXV1dPXRbZV07cmV0dXJuIHJ9ZnVuY3Rpb24gd24obil7dmFyIHI9W107Zm9yKHZhciB0IGluIG4pRChuW3RdKSYmci5wdXNoKHQpO3JldHVybiByLnNvcnQoKX1mdW5jdGlvbiBBbihuLHIpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoO2lmKHImJih0PU9iamVjdCh0KSksZTwyfHxudWxsPT10KXJldHVybiB0O2Zvcih2YXIgdT0xO3U8ZTt1KyspZm9yKHZhciBvPWFyZ3VtZW50c1t1XSxpPW4obyksYT1pLmxlbmd0aCxmPTA7ZjxhO2YrKyl7dmFyIGM9aVtmXTtyJiZ2b2lkIDAhPT10W2NdfHwodFtjXT1vW2NdKX1yZXR1cm4gdH19dmFyIHhuPUFuKGFuKSxTbj1BbihubiksT249QW4oYW4sITApO2Z1bmN0aW9uIE1uKG4pe2lmKCFfKG4pKXJldHVybnt9O2lmKHYpcmV0dXJuIHYobik7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPW47dmFyIHQ9bmV3IHI7cmV0dXJuIHIucHJvdG90eXBlPW51bGwsdH1mdW5jdGlvbiBFbihuKXtyZXR1cm4gVShuKT9uOltuXX1mdW5jdGlvbiBCbihuKXtyZXR1cm4gdG4udG9QYXRoKG4pfWZ1bmN0aW9uIE5uKG4scil7Zm9yKHZhciB0PXIubGVuZ3RoLGU9MDtlPHQ7ZSsrKXtpZihudWxsPT1uKXJldHVybjtuPW5bcltlXV19cmV0dXJuIHQ/bjp2b2lkIDB9ZnVuY3Rpb24gSW4obixyLHQpe3ZhciBlPU5uKG4sQm4ocikpO3JldHVybiB3KGUpP3Q6ZX1mdW5jdGlvbiBUbihuKXtyZXR1cm4gbn1mdW5jdGlvbiBrbihuKXtyZXR1cm4gbj1Tbih7fSxuKSxmdW5jdGlvbihyKXtyZXR1cm4gcm4ocixuKX19ZnVuY3Rpb24gRG4obil7cmV0dXJuIG49Qm4obiksZnVuY3Rpb24ocil7cmV0dXJuIE5uKHIsbil9fWZ1bmN0aW9uIFJuKG4scix0KXtpZih2b2lkIDA9PT1yKXJldHVybiBuO3N3aXRjaChudWxsPT10PzM6dCl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5jYWxsKHIsdCl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24odCxlLHUpe3JldHVybiBuLmNhbGwocix0LGUsdSl9O2Nhc2UgNDpyZXR1cm4gZnVuY3Rpb24odCxlLHUsbyl7cmV0dXJuIG4uY2FsbChyLHQsZSx1LG8pfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbi5hcHBseShyLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEZuKG4scix0KXtyZXR1cm4gbnVsbD09bj9UbjpEKG4pP1JuKG4scix0KTpfKG4pJiYhVShuKT9rbihuKTpEbihuKX1mdW5jdGlvbiBWbihuLHIpe3JldHVybiBGbihuLHIsMS8wKX1mdW5jdGlvbiBQbihuLHIsdCl7cmV0dXJuIHRuLml0ZXJhdGVlIT09Vm4/dG4uaXRlcmF0ZWUobixyKTpGbihuLHIsdCl9ZnVuY3Rpb24gcW4oKXt9ZnVuY3Rpb24gVW4obixyKXtyZXR1cm4gbnVsbD09ciYmKHI9bixuPTApLG4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihyLW4rMSkpfXRuLnRvUGF0aD1Fbix0bi5pdGVyYXRlZT1Wbjt2YXIgV249RGF0ZS5ub3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O2Z1bmN0aW9uIHpuKG4pe3ZhciByPWZ1bmN0aW9uKHIpe3JldHVybiBuW3JdfSx0PSIoPzoiK25uKG4pLmpvaW4oInwiKSsiKSIsZT1SZWdFeHAodCksdT1SZWdFeHAodCwiZyIpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbj1udWxsPT1uPyIiOiIiK24sZS50ZXN0KG4pP24ucmVwbGFjZSh1LHIpOm59fXZhciBMbj17IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjeDI3OyIsImAiOiImI3g2MDsifSwkbj16bihMbiksQ249em4oX24oTG4pKSxLbj10bi50ZW1wbGF0ZVNldHRpbmdzPXtldmFsdWF0ZTovPCUoW1xzXFNdKz8pJT4vZyxpbnRlcnBvbGF0ZTovPCU9KFtcc1xTXSs/KSU+L2csZXNjYXBlOi88JS0oW1xzXFNdKz8pJT4vZ30sSm49LyguKV4vLEduPXsiJyI6IiciLCJcXCI6IlxcIiwiXHIiOiJyIiwiXG4iOiJuIiwiXHUyMDI4IjoidTIwMjgiLCJcdTIwMjkiOiJ1MjAyOSJ9LEhuPS9cXHwnfFxyfFxufFx1MjAyOHxcdTIwMjkvZztmdW5jdGlvbiBRbihuKXtyZXR1cm4iXFwiK0duW25dfXZhciBYbj0vXlxzKihcd3xcJCkrXHMqJC87dmFyIFluPTA7ZnVuY3Rpb24gWm4obixyLHQsZSx1KXtpZighKGUgaW5zdGFuY2VvZiByKSlyZXR1cm4gbi5hcHBseSh0LHUpO3ZhciBvPU1uKG4ucHJvdG90eXBlKSxpPW4uYXBwbHkobyx1KTtyZXR1cm4gXyhpKT9pOm99dmFyIG5yPWooKGZ1bmN0aW9uKG4scil7dmFyIHQ9bnIucGxhY2Vob2xkZXIsZT1mdW5jdGlvbigpe2Zvcih2YXIgdT0wLG89ci5sZW5ndGgsaT1BcnJheShvKSxhPTA7YTxvO2ErKylpW2FdPXJbYV09PT10P2FyZ3VtZW50c1t1KytdOnJbYV07Zm9yKDt1PGFyZ3VtZW50cy5sZW5ndGg7KWkucHVzaChhcmd1bWVudHNbdSsrXSk7cmV0dXJuIFpuKG4sZSx0aGlzLHRoaXMsaSl9O3JldHVybiBlfSkpO25yLnBsYWNlaG9sZGVyPXRuO3ZhciBycj1qKChmdW5jdGlvbihuLHIsdCl7aWYoIUQobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1bmN0aW9uIik7dmFyIGU9aigoZnVuY3Rpb24odSl7cmV0dXJuIFpuKG4sZSxyLHRoaXMsdC5jb25jYXQodSkpfSkpO3JldHVybiBlfSkpLHRyPUsoWSk7ZnVuY3Rpb24gZXIobixyLHQsZSl7aWYoZT1lfHxbXSxyfHwwPT09cil7aWYocjw9MClyZXR1cm4gZS5jb25jYXQobil9ZWxzZSByPTEvMDtmb3IodmFyIHU9ZS5sZW5ndGgsbz0wLGk9WShuKTtvPGk7bysrKXt2YXIgYT1uW29dO2lmKHRyKGEpJiYoVShhKXx8TChhKSkpaWYocj4xKWVyKGEsci0xLHQsZSksdT1lLmxlbmd0aDtlbHNlIGZvcih2YXIgZj0wLGM9YS5sZW5ndGg7ZjxjOyllW3UrK109YVtmKytdO2Vsc2UgdHx8KGVbdSsrXT1hKX1yZXR1cm4gZX12YXIgdXI9aigoZnVuY3Rpb24obixyKXt2YXIgdD0ocj1lcihyLCExLCExKSkubGVuZ3RoO2lmKHQ8MSl0aHJvdyBuZXcgRXJyb3IoImJpbmRBbGwgbXVzdCBiZSBwYXNzZWQgZnVuY3Rpb24gbmFtZXMiKTtmb3IoO3QtLTspe3ZhciBlPXJbdF07bltlXT1ycihuW2VdLG4pfXJldHVybiBufSkpO3ZhciBvcj1qKChmdW5jdGlvbihuLHIsdCl7cmV0dXJuIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIG4uYXBwbHkobnVsbCx0KX0pLHIpfSkpLGlyPW5yKG9yLHRuLDEpO2Z1bmN0aW9uIGFyKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiFuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gZnIobixyKXt2YXIgdDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tLW4+MCYmKHQ9ci5hcHBseSh0aGlzLGFyZ3VtZW50cykpLG48PTEmJihyPW51bGwpLHR9fXZhciBjcj1ucihmciwyKTtmdW5jdGlvbiBscihuLHIsdCl7cj1QbihyLHQpO2Zvcih2YXIgZSx1PW5uKG4pLG89MCxpPXUubGVuZ3RoO288aTtvKyspaWYocihuW2U9dVtvXV0sZSxuKSlyZXR1cm4gZX1mdW5jdGlvbiBzcihuKXtyZXR1cm4gZnVuY3Rpb24ocix0LGUpe3Q9UG4odCxlKTtmb3IodmFyIHU9WShyKSxvPW4+MD8wOnUtMTtvPj0wJiZvPHU7bys9bilpZih0KHJbb10sbyxyKSlyZXR1cm4gbztyZXR1cm4tMX19dmFyIHByPXNyKDEpLHZyPXNyKC0xKTtmdW5jdGlvbiBocihuLHIsdCxlKXtmb3IodmFyIHU9KHQ9UG4odCxlLDEpKShyKSxvPTAsaT1ZKG4pO288aTspe3ZhciBhPU1hdGguZmxvb3IoKG8raSkvMik7dChuW2FdKTx1P289YSsxOmk9YX1yZXR1cm4gb31mdW5jdGlvbiB5cihuLHIsdCl7cmV0dXJuIGZ1bmN0aW9uKGUsdSxvKXt2YXIgYT0wLGY9WShlKTtpZigibnVtYmVyIj09dHlwZW9mIG8pbj4wP2E9bz49MD9vOk1hdGgubWF4KG8rZixhKTpmPW8+PTA/TWF0aC5taW4obysxLGYpOm8rZisxO2Vsc2UgaWYodCYmbyYmZilyZXR1cm4gZVtvPXQoZSx1KV09PT11P286LTE7aWYodSE9dSlyZXR1cm4obz1yKGkuY2FsbChlLGEsZiksJCkpPj0wP28rYTotMTtmb3Iobz1uPjA/YTpmLTE7bz49MCYmbzxmO28rPW4paWYoZVtvXT09PXUpcmV0dXJuIG87cmV0dXJuLTF9fXZhciBkcj15cigxLHByLGhyKSxncj15cigtMSx2cik7ZnVuY3Rpb24gYnIobixyLHQpe3ZhciBlPSh0cihuKT9wcjpscikobixyLHQpO2lmKHZvaWQgMCE9PWUmJi0xIT09ZSlyZXR1cm4gbltlXX1mdW5jdGlvbiBtcihuLHIsdCl7dmFyIGUsdTtpZihyPVJuKHIsdCksdHIobikpZm9yKGU9MCx1PW4ubGVuZ3RoO2U8dTtlKyspcihuW2VdLGUsbik7ZWxzZXt2YXIgbz1ubihuKTtmb3IoZT0wLHU9by5sZW5ndGg7ZTx1O2UrKylyKG5bb1tlXV0sb1tlXSxuKX1yZXR1cm4gbn1mdW5jdGlvbiBqcihuLHIsdCl7cj1QbihyLHQpO2Zvcih2YXIgZT0hdHIobikmJm5uKG4pLHU9KGV8fG4pLmxlbmd0aCxvPUFycmF5KHUpLGk9MDtpPHU7aSsrKXt2YXIgYT1lP2VbaV06aTtvW2ldPXIoblthXSxhLG4pfXJldHVybiBvfWZ1bmN0aW9uIF9yKG4pe3ZhciByPWZ1bmN0aW9uKHIsdCxlLHUpe3ZhciBvPSF0cihyKSYmbm4ociksaT0ob3x8cikubGVuZ3RoLGE9bj4wPzA6aS0xO2Zvcih1fHwoZT1yW28/b1thXTphXSxhKz1uKTthPj0wJiZhPGk7YSs9bil7dmFyIGY9bz9vW2FdOmE7ZT10KGUscltmXSxmLHIpfXJldHVybiBlfTtyZXR1cm4gZnVuY3Rpb24obix0LGUsdSl7dmFyIG89YXJndW1lbnRzLmxlbmd0aD49MztyZXR1cm4gcihuLFJuKHQsdSw0KSxlLG8pfX12YXIgd3I9X3IoMSksQXI9X3IoLTEpO2Z1bmN0aW9uIHhyKG4scix0KXt2YXIgZT1bXTtyZXR1cm4gcj1QbihyLHQpLG1yKG4sKGZ1bmN0aW9uKG4sdCx1KXtyKG4sdCx1KSYmZS5wdXNoKG4pfSkpLGV9ZnVuY3Rpb24gU3IobixyLHQpe3I9UG4ocix0KTtmb3IodmFyIGU9IXRyKG4pJiZubihuKSx1PShlfHxuKS5sZW5ndGgsbz0wO288dTtvKyspe3ZhciBpPWU/ZVtvXTpvO2lmKCFyKG5baV0saSxuKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBPcihuLHIsdCl7cj1QbihyLHQpO2Zvcih2YXIgZT0hdHIobikmJm5uKG4pLHU9KGV8fG4pLmxlbmd0aCxvPTA7bzx1O28rKyl7dmFyIGk9ZT9lW29dOm87aWYocihuW2ldLGksbikpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gTXIobixyLHQsZSl7cmV0dXJuIHRyKG4pfHwobj1qbihuKSksKCJudW1iZXIiIT10eXBlb2YgdHx8ZSkmJih0PTApLGRyKG4scix0KT49MH12YXIgRXI9aigoZnVuY3Rpb24obixyLHQpe3ZhciBlLHU7cmV0dXJuIEQocik/dT1yOihyPUJuKHIpLGU9ci5zbGljZSgwLC0xKSxyPXJbci5sZW5ndGgtMV0pLGpyKG4sKGZ1bmN0aW9uKG4pe3ZhciBvPXU7aWYoIW8pe2lmKGUmJmUubGVuZ3RoJiYobj1ObihuLGUpKSxudWxsPT1uKXJldHVybjtvPW5bcl19cmV0dXJuIG51bGw9PW8/bzpvLmFwcGx5KG4sdCl9KSl9KSk7ZnVuY3Rpb24gQnIobixyKXtyZXR1cm4ganIobixEbihyKSl9ZnVuY3Rpb24gTnIobixyLHQpe3ZhciBlLHUsbz0tMS8wLGk9LTEvMDtpZihudWxsPT1yfHwibnVtYmVyIj09dHlwZW9mIHImJiJvYmplY3QiIT10eXBlb2YgblswXSYmbnVsbCE9bilmb3IodmFyIGE9MCxmPShuPXRyKG4pP246am4obikpLmxlbmd0aDthPGY7YSsrKW51bGwhPShlPW5bYV0pJiZlPm8mJihvPWUpO2Vsc2Ugcj1QbihyLHQpLG1yKG4sKGZ1bmN0aW9uKG4sdCxlKXsoKHU9cihuLHQsZSkpPml8fHU9PT0tMS8wJiZvPT09LTEvMCkmJihvPW4saT11KX0pKTtyZXR1cm4gb312YXIgSXI9L1teXHVkODAwLVx1ZGZmZl18W1x1ZDgwMC1cdWRiZmZdW1x1ZGMwMC1cdWRmZmZdfFtcdWQ4MDAtXHVkZmZmXS9nO2Z1bmN0aW9uIFRyKG4pe3JldHVybiBuP1Uobik/aS5jYWxsKG4pOlMobik/bi5tYXRjaChJcik6dHIobik/anIobixUbik6am4obik6W119ZnVuY3Rpb24ga3IobixyLHQpe2lmKG51bGw9PXJ8fHQpcmV0dXJuIHRyKG4pfHwobj1qbihuKSksbltVbihuLmxlbmd0aC0xKV07dmFyIGU9VHIobiksdT1ZKGUpO3I9TWF0aC5tYXgoTWF0aC5taW4ocix1KSwwKTtmb3IodmFyIG89dS0xLGk9MDtpPHI7aSsrKXt2YXIgYT1VbihpLG8pLGY9ZVtpXTtlW2ldPWVbYV0sZVthXT1mfXJldHVybiBlLnNsaWNlKDAscil9ZnVuY3Rpb24gRHIobixyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHUpe3ZhciBvPXI/W1tdLFtdXTp7fTtyZXR1cm4gZT1QbihlLHUpLG1yKHQsKGZ1bmN0aW9uKHIsdSl7dmFyIGk9ZShyLHUsdCk7bihvLHIsaSl9KSksb319dmFyIFJyPURyKChmdW5jdGlvbihuLHIsdCl7VyhuLHQpP25bdF0ucHVzaChyKTpuW3RdPVtyXX0pKSxGcj1EcigoZnVuY3Rpb24obixyLHQpe25bdF09cn0pKSxWcj1EcigoZnVuY3Rpb24obixyLHQpe1cobix0KT9uW3RdKys6blt0XT0xfSkpLFByPURyKChmdW5jdGlvbihuLHIsdCl7blt0PzA6MV0ucHVzaChyKX0pLCEwKTtmdW5jdGlvbiBxcihuLHIsdCl7cmV0dXJuIHIgaW4gdH12YXIgVXI9aigoZnVuY3Rpb24obixyKXt2YXIgdD17fSxlPXJbMF07aWYobnVsbD09bilyZXR1cm4gdDtEKGUpPyhyLmxlbmd0aD4xJiYoZT1SbihlLHJbMV0pKSxyPWFuKG4pKTooZT1xcixyPWVyKHIsITEsITEpLG49T2JqZWN0KG4pKTtmb3IodmFyIHU9MCxvPXIubGVuZ3RoO3U8bzt1Kyspe3ZhciBpPXJbdV0sYT1uW2ldO2UoYSxpLG4pJiYodFtpXT1hKX1yZXR1cm4gdH0pKSxXcj1qKChmdW5jdGlvbihuLHIpe3ZhciB0LGU9clswXTtyZXR1cm4gRChlKT8oZT1hcihlKSxyLmxlbmd0aD4xJiYodD1yWzFdKSk6KHI9anIoZXIociwhMSwhMSksU3RyaW5nKSxlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIU1yKHIsdCl9KSxVcihuLGUsdCl9KSk7ZnVuY3Rpb24genIobixyLHQpe3JldHVybiBpLmNhbGwobiwwLE1hdGgubWF4KDAsbi5sZW5ndGgtKG51bGw9PXJ8fHQ/MTpyKSkpfWZ1bmN0aW9uIExyKG4scix0KXtyZXR1cm4gbnVsbD09bnx8bi5sZW5ndGg8MT9udWxsPT1yfHx0P3ZvaWQgMDpbXTpudWxsPT1yfHx0P25bMF06enIobixuLmxlbmd0aC1yKX1mdW5jdGlvbiAkcihuLHIsdCl7cmV0dXJuIGkuY2FsbChuLG51bGw9PXJ8fHQ/MTpyKX12YXIgQ3I9aigoZnVuY3Rpb24obixyKXtyZXR1cm4gcj1lcihyLCEwLCEwKSx4cihuLChmdW5jdGlvbihuKXtyZXR1cm4hTXIocixuKX0pKX0pKSxLcj1qKChmdW5jdGlvbihuLHIpe3JldHVybiBDcihuLHIpfSkpO2Z1bmN0aW9uIEpyKG4scix0LGUpe0Eocil8fChlPXQsdD1yLHI9ITEpLG51bGwhPXQmJih0PVBuKHQsZSkpO2Zvcih2YXIgdT1bXSxvPVtdLGk9MCxhPVkobik7aTxhO2krKyl7dmFyIGY9bltpXSxjPXQ/dChmLGksbik6ZjtyJiYhdD8oaSYmbz09PWN8fHUucHVzaChmKSxvPWMpOnQ/TXIobyxjKXx8KG8ucHVzaChjKSx1LnB1c2goZikpOk1yKHUsZil8fHUucHVzaChmKX1yZXR1cm4gdX12YXIgR3I9aigoZnVuY3Rpb24obil7cmV0dXJuIEpyKGVyKG4sITAsITApKX0pKTtmdW5jdGlvbiBIcihuKXtmb3IodmFyIHI9biYmTnIobixZKS5sZW5ndGh8fDAsdD1BcnJheShyKSxlPTA7ZTxyO2UrKyl0W2VdPUJyKG4sZSk7cmV0dXJuIHR9dmFyIFFyPWooSHIpO2Z1bmN0aW9uIFhyKG4scil7cmV0dXJuIG4uX2NoYWluP3RuKHIpLmNoYWluKCk6cn1mdW5jdGlvbiBZcihuKXtyZXR1cm4gbXIod24obiksKGZ1bmN0aW9uKHIpe3ZhciB0PXRuW3JdPW5bcl07dG4ucHJvdG90eXBlW3JdPWZ1bmN0aW9uKCl7dmFyIG49W3RoaXMuX3dyYXBwZWRdO3JldHVybiBvLmFwcGx5KG4sYXJndW1lbnRzKSxYcih0aGlzLHQuYXBwbHkodG4sbikpfX0pKSx0bn1tcihbInBvcCIsInB1c2giLCJyZXZlcnNlIiwic2hpZnQiLCJzb3J0Iiwic3BsaWNlIiwidW5zaGlmdCJdLChmdW5jdGlvbihuKXt2YXIgcj10W25dO3RuLnByb3RvdHlwZVtuXT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3dyYXBwZWQ7cmV0dXJuIG51bGwhPXQmJihyLmFwcGx5KHQsYXJndW1lbnRzKSwic2hpZnQiIT09biYmInNwbGljZSIhPT1ufHwwIT09dC5sZW5ndGh8fGRlbGV0ZSB0WzBdKSxYcih0aGlzLHQpfX0pKSxtcihbImNvbmNhdCIsImpvaW4iLCJzbGljZSJdLChmdW5jdGlvbihuKXt2YXIgcj10W25dO3RuLnByb3RvdHlwZVtuXT1mdW5jdGlvbigpe3ZhciBuPXRoaXMuX3dyYXBwZWQ7cmV0dXJuIG51bGwhPW4mJihuPXIuYXBwbHkobixhcmd1bWVudHMpKSxYcih0aGlzLG4pfX0pKTt2YXIgWnI9WXIoe19fcHJvdG9fXzpudWxsLFZFUlNJT046bixyZXN0QXJndW1lbnRzOmosaXNPYmplY3Q6Xyxpc051bGw6ZnVuY3Rpb24obil7cmV0dXJuIG51bGw9PT1ufSxpc1VuZGVmaW5lZDp3LGlzQm9vbGVhbjpBLGlzRWxlbWVudDpmdW5jdGlvbihuKXtyZXR1cm4hKCFufHwxIT09bi5ub2RlVHlwZSl9LGlzU3RyaW5nOlMsaXNOdW1iZXI6Tyxpc0RhdGU6TSxpc1JlZ0V4cDpFLGlzRXJyb3I6Qixpc1N5bWJvbDpOLGlzQXJyYXlCdWZmZXI6SSxpc0RhdGFWaWV3OnEsaXNBcnJheTpVLGlzRnVuY3Rpb246RCxpc0FyZ3VtZW50czpMLGlzRmluaXRlOmZ1bmN0aW9uKG4pe3JldHVybiFOKG4pJiZkKG4pJiYhaXNOYU4ocGFyc2VGbG9hdChuKSl9LGlzTmFOOiQsaXNUeXBlZEFycmF5OlgsaXNFbXB0eTpmdW5jdGlvbihuKXtpZihudWxsPT1uKXJldHVybiEwO3ZhciByPVkobik7cmV0dXJuIm51bWJlciI9PXR5cGVvZiByJiYoVShuKXx8UyhuKXx8TChuKSk/MD09PXI6MD09PVkobm4obikpfSxpc01hdGNoOnJuLGlzRXF1YWw6ZnVuY3Rpb24obixyKXtyZXR1cm4gb24obixyKX0saXNNYXA6ZG4saXNXZWFrTWFwOmduLGlzU2V0OmJuLGlzV2Vha1NldDptbixrZXlzOm5uLGFsbEtleXM6YW4sdmFsdWVzOmpuLHBhaXJzOmZ1bmN0aW9uKG4pe2Zvcih2YXIgcj1ubihuKSx0PXIubGVuZ3RoLGU9QXJyYXkodCksdT0wO3U8dDt1KyspZVt1XT1bclt1XSxuW3JbdV1dXTtyZXR1cm4gZX0saW52ZXJ0Ol9uLGZ1bmN0aW9uczp3bixtZXRob2RzOnduLGV4dGVuZDp4bixleHRlbmRPd246U24sYXNzaWduOlNuLGRlZmF1bHRzOk9uLGNyZWF0ZTpmdW5jdGlvbihuLHIpe3ZhciB0PU1uKG4pO3JldHVybiByJiZTbih0LHIpLHR9LGNsb25lOmZ1bmN0aW9uKG4pe3JldHVybiBfKG4pP1Uobik/bi5zbGljZSgpOnhuKHt9LG4pOm59LHRhcDpmdW5jdGlvbihuLHIpe3JldHVybiByKG4pLG59LGdldDpJbixoYXM6ZnVuY3Rpb24obixyKXtmb3IodmFyIHQ9KHI9Qm4ocikpLmxlbmd0aCxlPTA7ZTx0O2UrKyl7dmFyIHU9cltlXTtpZighVyhuLHUpKXJldHVybiExO249blt1XX1yZXR1cm4hIXR9LG1hcE9iamVjdDpmdW5jdGlvbihuLHIsdCl7cj1QbihyLHQpO2Zvcih2YXIgZT1ubihuKSx1PWUubGVuZ3RoLG89e30saT0wO2k8dTtpKyspe3ZhciBhPWVbaV07b1thXT1yKG5bYV0sYSxuKX1yZXR1cm4gb30saWRlbnRpdHk6VG4sY29uc3RhbnQ6Qyxub29wOnFuLHRvUGF0aDpFbixwcm9wZXJ0eTpEbixwcm9wZXJ0eU9mOmZ1bmN0aW9uKG4pe3JldHVybiBudWxsPT1uP3FuOmZ1bmN0aW9uKHIpe3JldHVybiBJbihuLHIpfX0sbWF0Y2hlcjprbixtYXRjaGVzOmtuLHRpbWVzOmZ1bmN0aW9uKG4scix0KXt2YXIgZT1BcnJheShNYXRoLm1heCgwLG4pKTtyPVJuKHIsdCwxKTtmb3IodmFyIHU9MDt1PG47dSsrKWVbdV09cih1KTtyZXR1cm4gZX0scmFuZG9tOlVuLG5vdzpXbixlc2NhcGU6JG4sdW5lc2NhcGU6Q24sdGVtcGxhdGVTZXR0aW5nczpLbix0ZW1wbGF0ZTpmdW5jdGlvbihuLHIsdCl7IXImJnQmJihyPXQpLHI9T24oe30scix0bi50ZW1wbGF0ZVNldHRpbmdzKTt2YXIgZT1SZWdFeHAoWyhyLmVzY2FwZXx8Sm4pLnNvdXJjZSwoci5pbnRlcnBvbGF0ZXx8Sm4pLnNvdXJjZSwoci5ldmFsdWF0ZXx8Sm4pLnNvdXJjZV0uam9pbigifCIpKyJ8JCIsImciKSx1PTAsbz0iX19wKz0nIjtuLnJlcGxhY2UoZSwoZnVuY3Rpb24ocix0LGUsaSxhKXtyZXR1cm4gbys9bi5zbGljZSh1LGEpLnJlcGxhY2UoSG4sUW4pLHU9YStyLmxlbmd0aCx0P28rPSInK1xuKChfX3Q9KCIrdCsiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXG4nIjplP28rPSInK1xuKChfX3Q9KCIrZSsiKSk9PW51bGw/Jyc6X190KStcbiciOmkmJihvKz0iJztcbiIraSsiXG5fX3ArPSciKSxyfSkpLG8rPSInO1xuIjt2YXIgaSxhPXIudmFyaWFibGU7aWYoYSl7aWYoIVhuLnRlc3QoYSkpdGhyb3cgbmV3IEVycm9yKCJ2YXJpYWJsZSBpcyBub3QgYSBiYXJlIGlkZW50aWZpZXI6ICIrYSl9ZWxzZSBvPSJ3aXRoKG9ianx8e30pe1xuIitvKyJ9XG4iLGE9Im9iaiI7bz0idmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLCIrInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XG4iK28rInJldHVybiBfX3A7XG4iO3RyeXtpPW5ldyBGdW5jdGlvbihhLCJfIixvKX1jYXRjaChuKXt0aHJvdyBuLnNvdXJjZT1vLG59dmFyIGY9ZnVuY3Rpb24obil7cmV0dXJuIGkuY2FsbCh0aGlzLG4sdG4pfTtyZXR1cm4gZi5zb3VyY2U9ImZ1bmN0aW9uKCIrYSsiKXtcbiIrbysifSIsZn0scmVzdWx0OmZ1bmN0aW9uKG4scix0KXt2YXIgZT0ocj1CbihyKSkubGVuZ3RoO2lmKCFlKXJldHVybiBEKHQpP3QuY2FsbChuKTp0O2Zvcih2YXIgdT0wO3U8ZTt1Kyspe3ZhciBvPW51bGw9PW4/dm9pZCAwOm5bclt1XV07dm9pZCAwPT09byYmKG89dCx1PWUpLG49RChvKT9vLmNhbGwobik6b31yZXR1cm4gbn0sdW5pcXVlSWQ6ZnVuY3Rpb24obil7dmFyIHI9KytZbisiIjtyZXR1cm4gbj9uK3I6cn0sY2hhaW46ZnVuY3Rpb24obil7dmFyIHI9dG4obik7cmV0dXJuIHIuX2NoYWluPSEwLHJ9LGl0ZXJhdGVlOlZuLHBhcnRpYWw6bnIsYmluZDpycixiaW5kQWxsOnVyLG1lbW9pemU6ZnVuY3Rpb24obixyKXt2YXIgdD1mdW5jdGlvbihlKXt2YXIgdT10LmNhY2hlLG89IiIrKHI/ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZSk7cmV0dXJuIFcodSxvKXx8KHVbb109bi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHVbb119O3JldHVybiB0LmNhY2hlPXt9LHR9LGRlbGF5Om9yLGRlZmVyOmlyLHRocm90dGxlOmZ1bmN0aW9uKG4scix0KXt2YXIgZSx1LG8saSxhPTA7dHx8KHQ9e30pO3ZhciBmPWZ1bmN0aW9uKCl7YT0hMT09PXQubGVhZGluZz8wOlduKCksZT1udWxsLGk9bi5hcHBseSh1LG8pLGV8fCh1PW89bnVsbCl9LGM9ZnVuY3Rpb24oKXt2YXIgYz1XbigpO2F8fCExIT09dC5sZWFkaW5nfHwoYT1jKTt2YXIgbD1yLShjLWEpO3JldHVybiB1PXRoaXMsbz1hcmd1bWVudHMsbDw9MHx8bD5yPyhlJiYoY2xlYXJUaW1lb3V0KGUpLGU9bnVsbCksYT1jLGk9bi5hcHBseSh1LG8pLGV8fCh1PW89bnVsbCkpOmV8fCExPT09dC50cmFpbGluZ3x8KGU9c2V0VGltZW91dChmLGwpKSxpfTtyZXR1cm4gYy5jYW5jZWw9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoZSksYT0wLGU9dT1vPW51bGx9LGN9LGRlYm91bmNlOmZ1bmN0aW9uKG4scix0KXt2YXIgZSx1LG8saSxhLGY9ZnVuY3Rpb24oKXt2YXIgYz1XbigpLXU7cj5jP2U9c2V0VGltZW91dChmLHItYyk6KGU9bnVsbCx0fHwoaT1uLmFwcGx5KGEsbykpLGV8fChvPWE9bnVsbCkpfSxjPWooKGZ1bmN0aW9uKGMpe3JldHVybiBhPXRoaXMsbz1jLHU9V24oKSxlfHwoZT1zZXRUaW1lb3V0KGYsciksdCYmKGk9bi5hcHBseShhLG8pKSksaX0pKTtyZXR1cm4gYy5jYW5jZWw9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoZSksZT1vPWE9bnVsbH0sY30sd3JhcDpmdW5jdGlvbihuLHIpe3JldHVybiBucihyLG4pfSxuZWdhdGU6YXIsY29tcG9zZTpmdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50cyxyPW4ubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PXIsZT1uW3JdLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0LS07KWU9blt0XS5jYWxsKHRoaXMsZSk7cmV0dXJuIGV9fSxhZnRlcjpmdW5jdGlvbihuLHIpe3JldHVybiBmdW5jdGlvbigpe2lmKC0tbjwxKXJldHVybiByLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGJlZm9yZTpmcixvbmNlOmNyLGZpbmRLZXk6bHIsZmluZEluZGV4OnByLGZpbmRMYXN0SW5kZXg6dnIsc29ydGVkSW5kZXg6aHIsaW5kZXhPZjpkcixsYXN0SW5kZXhPZjpncixmaW5kOmJyLGRldGVjdDpicixmaW5kV2hlcmU6ZnVuY3Rpb24obixyKXtyZXR1cm4gYnIobixrbihyKSl9LGVhY2g6bXIsZm9yRWFjaDptcixtYXA6anIsY29sbGVjdDpqcixyZWR1Y2U6d3IsZm9sZGw6d3IsaW5qZWN0OndyLHJlZHVjZVJpZ2h0OkFyLGZvbGRyOkFyLGZpbHRlcjp4cixzZWxlY3Q6eHIscmVqZWN0OmZ1bmN0aW9uKG4scix0KXtyZXR1cm4geHIobixhcihQbihyKSksdCl9LGV2ZXJ5OlNyLGFsbDpTcixzb21lOk9yLGFueTpPcixjb250YWluczpNcixpbmNsdWRlczpNcixpbmNsdWRlOk1yLGludm9rZTpFcixwbHVjazpCcix3aGVyZTpmdW5jdGlvbihuLHIpe3JldHVybiB4cihuLGtuKHIpKX0sbWF4Ok5yLG1pbjpmdW5jdGlvbihuLHIsdCl7dmFyIGUsdSxvPTEvMCxpPTEvMDtpZihudWxsPT1yfHwibnVtYmVyIj09dHlwZW9mIHImJiJvYmplY3QiIT10eXBlb2YgblswXSYmbnVsbCE9bilmb3IodmFyIGE9MCxmPShuPXRyKG4pP246am4obikpLmxlbmd0aDthPGY7YSsrKW51bGwhPShlPW5bYV0pJiZlPG8mJihvPWUpO2Vsc2Ugcj1QbihyLHQpLG1yKG4sKGZ1bmN0aW9uKG4sdCxlKXsoKHU9cihuLHQsZSkpPGl8fHU9PT0xLzAmJm89PT0xLzApJiYobz1uLGk9dSl9KSk7cmV0dXJuIG99LHNodWZmbGU6ZnVuY3Rpb24obil7cmV0dXJuIGtyKG4sMS8wKX0sc2FtcGxlOmtyLHNvcnRCeTpmdW5jdGlvbihuLHIsdCl7dmFyIGU9MDtyZXR1cm4gcj1QbihyLHQpLEJyKGpyKG4sKGZ1bmN0aW9uKG4sdCx1KXtyZXR1cm57dmFsdWU6bixpbmRleDplKyssY3JpdGVyaWE6cihuLHQsdSl9fSkpLnNvcnQoKGZ1bmN0aW9uKG4scil7dmFyIHQ9bi5jcml0ZXJpYSxlPXIuY3JpdGVyaWE7aWYodCE9PWUpe2lmKHQ+ZXx8dm9pZCAwPT09dClyZXR1cm4gMTtpZih0PGV8fHZvaWQgMD09PWUpcmV0dXJuLTF9cmV0dXJuIG4uaW5kZXgtci5pbmRleH0pKSwidmFsdWUiKX0sZ3JvdXBCeTpScixpbmRleEJ5OkZyLGNvdW50Qnk6VnIscGFydGl0aW9uOlByLHRvQXJyYXk6VHIsc2l6ZTpmdW5jdGlvbihuKXtyZXR1cm4gbnVsbD09bj8wOnRyKG4pP24ubGVuZ3RoOm5uKG4pLmxlbmd0aH0scGljazpVcixvbWl0OldyLGZpcnN0OkxyLGhlYWQ6THIsdGFrZTpMcixpbml0aWFsOnpyLGxhc3Q6ZnVuY3Rpb24obixyLHQpe3JldHVybiBudWxsPT1ufHxuLmxlbmd0aDwxP251bGw9PXJ8fHQ/dm9pZCAwOltdOm51bGw9PXJ8fHQ/bltuLmxlbmd0aC0xXTokcihuLE1hdGgubWF4KDAsbi5sZW5ndGgtcikpfSxyZXN0OiRyLHRhaWw6JHIsZHJvcDokcixjb21wYWN0OmZ1bmN0aW9uKG4pe3JldHVybiB4cihuLEJvb2xlYW4pfSxmbGF0dGVuOmZ1bmN0aW9uKG4scil7cmV0dXJuIGVyKG4sciwhMSl9LHdpdGhvdXQ6S3IsdW5pcTpKcix1bmlxdWU6SnIsdW5pb246R3IsaW50ZXJzZWN0aW9uOmZ1bmN0aW9uKG4pe2Zvcih2YXIgcj1bXSx0PWFyZ3VtZW50cy5sZW5ndGgsZT0wLHU9WShuKTtlPHU7ZSsrKXt2YXIgbz1uW2VdO2lmKCFNcihyLG8pKXt2YXIgaTtmb3IoaT0xO2k8dCYmTXIoYXJndW1lbnRzW2ldLG8pO2krKyk7aT09PXQmJnIucHVzaChvKX19cmV0dXJuIHJ9LGRpZmZlcmVuY2U6Q3IsdW56aXA6SHIsdHJhbnNwb3NlOkhyLHppcDpRcixvYmplY3Q6ZnVuY3Rpb24obixyKXtmb3IodmFyIHQ9e30sZT0wLHU9WShuKTtlPHU7ZSsrKXI/dFtuW2VdXT1yW2VdOnRbbltlXVswXV09bltlXVsxXTtyZXR1cm4gdH0scmFuZ2U6ZnVuY3Rpb24obixyLHQpe251bGw9PXImJihyPW58fDAsbj0wKSx0fHwodD1yPG4/LTE6MSk7Zm9yKHZhciBlPU1hdGgubWF4KE1hdGguY2VpbCgoci1uKS90KSwwKSx1PUFycmF5KGUpLG89MDtvPGU7bysrLG4rPXQpdVtvXT1uO3JldHVybiB1fSxjaHVuazpmdW5jdGlvbihuLHIpe2lmKG51bGw9PXJ8fHI8MSlyZXR1cm5bXTtmb3IodmFyIHQ9W10sZT0wLHU9bi5sZW5ndGg7ZTx1Oyl0LnB1c2goaS5jYWxsKG4sZSxlKz1yKSk7cmV0dXJuIHR9LG1peGluOllyLGRlZmF1bHQ6dG59KTtyZXR1cm4gWnIuXz1acixacn0pKTs=]]></data>
	</file>
	<file>
	  <filename>/js/underscore-umd-min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IWZ1bmN0aW9uKG4scil7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1yKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoInVuZGVyc2NvcmUiLHIpOihuPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOm58fHNlbGYsZnVuY3Rpb24oKXt2YXIgdD1uLl8sZT1uLl89cigpO2Uubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBuLl89dCxlfX0oKSl9KHRoaXMsKGZ1bmN0aW9uKCl7Ci8vICAgICBVbmRlcnNjb3JlLmpzIDEuMTMuNgovLyAgICAgaHR0cHM6Ly91bmRlcnNjb3JlanMub3JnCi8vICAgICAoYykgMjAwOS0yMDIyIEplcmVteSBBc2hrZW5hcywgSnVsaWFuIEdvbmdncmlqcCwgYW5kIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9ycwovLyAgICAgVW5kZXJzY29yZSBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KdmFyIG49IjEuMTMuNiIscj0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYuc2VsZj09PXNlbGYmJnNlbGZ8fCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwuZ2xvYmFsPT09Z2xvYmFsJiZnbG9iYWx8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl8fHt9LHQ9QXJyYXkucHJvdG90eXBlLGU9T2JqZWN0LnByb3RvdHlwZSx1PSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sP1N5bWJvbC5wcm90b3R5cGU6bnVsbCxvPXQucHVzaCxpPXQuc2xpY2UsYT1lLnRvU3RyaW5nLGY9ZS5oYXNPd25Qcm9wZXJ0eSxjPSJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXIsbD0idW5kZWZpbmVkIiE9dHlwZW9mIERhdGFWaWV3LHM9QXJyYXkuaXNBcnJheSxwPU9iamVjdC5rZXlzLHY9T2JqZWN0LmNyZWF0ZSxoPWMmJkFycmF5QnVmZmVyLmlzVmlldyx5PWlzTmFOLGQ9aXNGaW5pdGUsZz0he3RvU3RyaW5nOm51bGx9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCJ0b1N0cmluZyIpLGI9WyJ2YWx1ZU9mIiwiaXNQcm90b3R5cGVPZiIsInRvU3RyaW5nIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJoYXNPd25Qcm9wZXJ0eSIsInRvTG9jYWxlU3RyaW5nIl0sbT1NYXRoLnBvdygyLDUzKS0xO2Z1bmN0aW9uIGoobixyKXtyZXR1cm4gcj1udWxsPT1yP24ubGVuZ3RoLTE6K3IsZnVuY3Rpb24oKXtmb3IodmFyIHQ9TWF0aC5tYXgoYXJndW1lbnRzLmxlbmd0aC1yLDApLGU9QXJyYXkodCksdT0wO3U8dDt1KyspZVt1XT1hcmd1bWVudHNbdStyXTtzd2l0Y2gocil7Y2FzZSAwOnJldHVybiBuLmNhbGwodGhpcyxlKTtjYXNlIDE6cmV0dXJuIG4uY2FsbCh0aGlzLGFyZ3VtZW50c1swXSxlKTtjYXNlIDI6cmV0dXJuIG4uY2FsbCh0aGlzLGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sZSl9dmFyIG89QXJyYXkocisxKTtmb3IodT0wO3U8cjt1Kyspb1t1XT1hcmd1bWVudHNbdV07cmV0dXJuIG9bcl09ZSxuLmFwcGx5KHRoaXMsbyl9fWZ1bmN0aW9uIF8obil7dmFyIHI9dHlwZW9mIG47cmV0dXJuImZ1bmN0aW9uIj09PXJ8fCJvYmplY3QiPT09ciYmISFufWZ1bmN0aW9uIHcobil7cmV0dXJuIHZvaWQgMD09PW59ZnVuY3Rpb24gQShuKXtyZXR1cm4hMD09PW58fCExPT09bnx8IltvYmplY3QgQm9vbGVhbl0iPT09YS5jYWxsKG4pfWZ1bmN0aW9uIHgobil7dmFyIHI9IltvYmplY3QgIituKyJdIjtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGEuY2FsbChuKT09PXJ9fXZhciBTPXgoIlN0cmluZyIpLE89eCgiTnVtYmVyIiksTT14KCJEYXRlIiksRT14KCJSZWdFeHAiKSxCPXgoIkVycm9yIiksTj14KCJTeW1ib2wiKSxJPXgoIkFycmF5QnVmZmVyIiksVD14KCJGdW5jdGlvbiIpLGs9ci5kb2N1bWVudCYmci5kb2N1bWVudC5jaGlsZE5vZGVzOyJmdW5jdGlvbiIhPXR5cGVvZi8uLyYmIm9iamVjdCIhPXR5cGVvZiBJbnQ4QXJyYXkmJiJmdW5jdGlvbiIhPXR5cGVvZiBrJiYoVD1mdW5jdGlvbihuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbnx8ITF9KTt2YXIgRD1ULFI9eCgiT2JqZWN0IiksRj1sJiZSKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoOCkpKSxWPSJ1bmRlZmluZWQiIT10eXBlb2YgTWFwJiZSKG5ldyBNYXApLFA9eCgiRGF0YVZpZXciKTt2YXIgcT1GP2Z1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiZEKG4uZ2V0SW50OCkmJkkobi5idWZmZXIpfTpQLFU9c3x8eCgiQXJyYXkiKTtmdW5jdGlvbiBXKG4scil7cmV0dXJuIG51bGwhPW4mJmYuY2FsbChuLHIpfXZhciB6PXgoIkFyZ3VtZW50cyIpOyFmdW5jdGlvbigpe3ooYXJndW1lbnRzKXx8KHo9ZnVuY3Rpb24obil7cmV0dXJuIFcobiwiY2FsbGVlIil9KX0oKTt2YXIgTD16O2Z1bmN0aW9uICQobil7cmV0dXJuIE8obikmJnkobil9ZnVuY3Rpb24gQyhuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gSyhuKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIHQ9bihyKTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTAmJnQ8PW19fWZ1bmN0aW9uIEoobil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBudWxsPT1yP3ZvaWQgMDpyW25dfX12YXIgRz1KKCJieXRlTGVuZ3RoIiksSD1LKEcpLFE9L1xbb2JqZWN0ICgoSXxVaSludCg4fDE2fDMyKXxGbG9hdCgzMnw2NCl8VWludDhDbGFtcGVkfEJpZyhJfFVpKW50NjQpQXJyYXlcXS87dmFyIFg9Yz9mdW5jdGlvbihuKXtyZXR1cm4gaD9oKG4pJiYhcShuKTpIKG4pJiZRLnRlc3QoYS5jYWxsKG4pKX06QyghMSksWT1KKCJsZW5ndGgiKTtmdW5jdGlvbiBaKG4scil7cj1mdW5jdGlvbihuKXtmb3IodmFyIHI9e30sdD1uLmxlbmd0aCxlPTA7ZTx0OysrZSlyW25bZV1dPSEwO3JldHVybntjb250YWluczpmdW5jdGlvbihuKXtyZXR1cm4hMD09PXJbbl19LHB1c2g6ZnVuY3Rpb24odCl7cmV0dXJuIHJbdF09ITAsbi5wdXNoKHQpfX19KHIpO3ZhciB0PWIubGVuZ3RoLHU9bi5jb25zdHJ1Y3RvcixvPUQodSkmJnUucHJvdG90eXBlfHxlLGk9ImNvbnN0cnVjdG9yIjtmb3IoVyhuLGkpJiYhci5jb250YWlucyhpKSYmci5wdXNoKGkpO3QtLTspKGk9Ylt0XSlpbiBuJiZuW2ldIT09b1tpXSYmIXIuY29udGFpbnMoaSkmJnIucHVzaChpKX1mdW5jdGlvbiBubihuKXtpZighXyhuKSlyZXR1cm5bXTtpZihwKXJldHVybiBwKG4pO3ZhciByPVtdO2Zvcih2YXIgdCBpbiBuKVcobix0KSYmci5wdXNoKHQpO3JldHVybiBnJiZaKG4scikscn1mdW5jdGlvbiBybihuLHIpe3ZhciB0PW5uKHIpLGU9dC5sZW5ndGg7aWYobnVsbD09bilyZXR1cm4hZTtmb3IodmFyIHU9T2JqZWN0KG4pLG89MDtvPGU7bysrKXt2YXIgaT10W29dO2lmKHJbaV0hPT11W2ldfHwhKGkgaW4gdSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gdG4obil7cmV0dXJuIG4gaW5zdGFuY2VvZiB0bj9uOnRoaXMgaW5zdGFuY2VvZiB0bj92b2lkKHRoaXMuX3dyYXBwZWQ9bik6bmV3IHRuKG4pfWZ1bmN0aW9uIGVuKG4pe3JldHVybiBuZXcgVWludDhBcnJheShuLmJ1ZmZlcnx8bixuLmJ5dGVPZmZzZXR8fDAsRyhuKSl9dG4uVkVSU0lPTj1uLHRuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwcGVkfSx0bi5wcm90b3R5cGUudmFsdWVPZj10bi5wcm90b3R5cGUudG9KU09OPXRuLnByb3RvdHlwZS52YWx1ZSx0bi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nKHRoaXMuX3dyYXBwZWQpfTt2YXIgdW49IltvYmplY3QgRGF0YVZpZXddIjtmdW5jdGlvbiBvbihuLHIsdCxlKXtpZihuPT09cilyZXR1cm4gMCE9PW58fDEvbj09MS9yO2lmKG51bGw9PW58fG51bGw9PXIpcmV0dXJuITE7aWYobiE9bilyZXR1cm4gciE9cjt2YXIgbz10eXBlb2YgbjtyZXR1cm4oImZ1bmN0aW9uIj09PW98fCJvYmplY3QiPT09b3x8Im9iamVjdCI9PXR5cGVvZiByKSYmZnVuY3Rpb24gbihyLHQsZSxvKXtyIGluc3RhbmNlb2YgdG4mJihyPXIuX3dyYXBwZWQpO3QgaW5zdGFuY2VvZiB0biYmKHQ9dC5fd3JhcHBlZCk7dmFyIGk9YS5jYWxsKHIpO2lmKGkhPT1hLmNhbGwodCkpcmV0dXJuITE7aWYoRiYmIltvYmplY3QgT2JqZWN0XSI9PWkmJnEocikpe2lmKCFxKHQpKXJldHVybiExO2k9dW59c3dpdGNoKGkpe2Nhc2UiW29iamVjdCBSZWdFeHBdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIiIrcj09IiIrdDtjYXNlIltvYmplY3QgTnVtYmVyXSI6cmV0dXJuK3IhPStyPyt0IT0rdDowPT0rcj8xLytyPT0xL3Q6K3I9PSt0O2Nhc2UiW29iamVjdCBEYXRlXSI6Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpyZXR1cm4rcj09K3Q7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOnJldHVybiB1LnZhbHVlT2YuY2FsbChyKT09PXUudmFsdWVPZi5jYWxsKHQpO2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOmNhc2UgdW46cmV0dXJuIG4oZW4ociksZW4odCksZSxvKX12YXIgZj0iW29iamVjdCBBcnJheV0iPT09aTtpZighZiYmWChyKSl7aWYoRyhyKSE9PUcodCkpcmV0dXJuITE7aWYoci5idWZmZXI9PT10LmJ1ZmZlciYmci5ieXRlT2Zmc2V0PT09dC5ieXRlT2Zmc2V0KXJldHVybiEwO2Y9ITB9aWYoIWYpe2lmKCJvYmplY3QiIT10eXBlb2Ygcnx8Im9iamVjdCIhPXR5cGVvZiB0KXJldHVybiExO3ZhciBjPXIuY29uc3RydWN0b3IsbD10LmNvbnN0cnVjdG9yO2lmKGMhPT1sJiYhKEQoYykmJmMgaW5zdGFuY2VvZiBjJiZEKGwpJiZsIGluc3RhbmNlb2YgbCkmJiJjb25zdHJ1Y3RvciJpbiByJiYiY29uc3RydWN0b3IiaW4gdClyZXR1cm4hMX1vPW98fFtdO3ZhciBzPShlPWV8fFtdKS5sZW5ndGg7Zm9yKDtzLS07KWlmKGVbc109PT1yKXJldHVybiBvW3NdPT09dDtpZihlLnB1c2gociksby5wdXNoKHQpLGYpe2lmKChzPXIubGVuZ3RoKSE9PXQubGVuZ3RoKXJldHVybiExO2Zvcig7cy0tOylpZighb24ocltzXSx0W3NdLGUsbykpcmV0dXJuITF9ZWxzZXt2YXIgcCx2PW5uKHIpO2lmKHM9di5sZW5ndGgsbm4odCkubGVuZ3RoIT09cylyZXR1cm4hMTtmb3IoO3MtLTspaWYocD12W3NdLCFXKHQscCl8fCFvbihyW3BdLHRbcF0sZSxvKSlyZXR1cm4hMX1yZXR1cm4gZS5wb3AoKSxvLnBvcCgpLCEwfShuLHIsdCxlKX1mdW5jdGlvbiBhbihuKXtpZighXyhuKSlyZXR1cm5bXTt2YXIgcj1bXTtmb3IodmFyIHQgaW4gbilyLnB1c2godCk7cmV0dXJuIGcmJloobixyKSxyfWZ1bmN0aW9uIGZuKG4pe3ZhciByPVkobik7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuITE7dmFyIGU9YW4odCk7aWYoWShlKSlyZXR1cm4hMTtmb3IodmFyIHU9MDt1PHI7dSsrKWlmKCFEKHRbblt1XV0pKXJldHVybiExO3JldHVybiBuIT09aG58fCFEKHRbY25dKX19dmFyIGNuPSJmb3JFYWNoIixsbj0iaGFzIixzbj1bImNsZWFyIiwiZGVsZXRlIl0scG49WyJnZXQiLGxuLCJzZXQiXSx2bj1zbi5jb25jYXQoY24scG4pLGhuPXNuLmNvbmNhdChwbikseW49WyJhZGQiXS5jb25jYXQoc24sY24sbG4pLGRuPVY/Zm4odm4pOngoIk1hcCIpLGduPVY/Zm4oaG4pOngoIldlYWtNYXAiKSxibj1WP2ZuKHluKTp4KCJTZXQiKSxtbj14KCJXZWFrU2V0Iik7ZnVuY3Rpb24gam4obil7Zm9yKHZhciByPW5uKG4pLHQ9ci5sZW5ndGgsZT1BcnJheSh0KSx1PTA7dTx0O3UrKyllW3VdPW5bclt1XV07cmV0dXJuIGV9ZnVuY3Rpb24gX24obil7Zm9yKHZhciByPXt9LHQ9bm4obiksZT0wLHU9dC5sZW5ndGg7ZTx1O2UrKylyW25bdFtlXV1dPXRbZV07cmV0dXJuIHJ9ZnVuY3Rpb24gd24obil7dmFyIHI9W107Zm9yKHZhciB0IGluIG4pRChuW3RdKSYmci5wdXNoKHQpO3JldHVybiByLnNvcnQoKX1mdW5jdGlvbiBBbihuLHIpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoO2lmKHImJih0PU9iamVjdCh0KSksZTwyfHxudWxsPT10KXJldHVybiB0O2Zvcih2YXIgdT0xO3U8ZTt1KyspZm9yKHZhciBvPWFyZ3VtZW50c1t1XSxpPW4obyksYT1pLmxlbmd0aCxmPTA7ZjxhO2YrKyl7dmFyIGM9aVtmXTtyJiZ2b2lkIDAhPT10W2NdfHwodFtjXT1vW2NdKX1yZXR1cm4gdH19dmFyIHhuPUFuKGFuKSxTbj1BbihubiksT249QW4oYW4sITApO2Z1bmN0aW9uIE1uKG4pe2lmKCFfKG4pKXJldHVybnt9O2lmKHYpcmV0dXJuIHYobik7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPW47dmFyIHQ9bmV3IHI7cmV0dXJuIHIucHJvdG90eXBlPW51bGwsdH1mdW5jdGlvbiBFbihuKXtyZXR1cm4gVShuKT9uOltuXX1mdW5jdGlvbiBCbihuKXtyZXR1cm4gdG4udG9QYXRoKG4pfWZ1bmN0aW9uIE5uKG4scil7Zm9yKHZhciB0PXIubGVuZ3RoLGU9MDtlPHQ7ZSsrKXtpZihudWxsPT1uKXJldHVybjtuPW5bcltlXV19cmV0dXJuIHQ/bjp2b2lkIDB9ZnVuY3Rpb24gSW4obixyLHQpe3ZhciBlPU5uKG4sQm4ocikpO3JldHVybiB3KGUpP3Q6ZX1mdW5jdGlvbiBUbihuKXtyZXR1cm4gbn1mdW5jdGlvbiBrbihuKXtyZXR1cm4gbj1Tbih7fSxuKSxmdW5jdGlvbihyKXtyZXR1cm4gcm4ocixuKX19ZnVuY3Rpb24gRG4obil7cmV0dXJuIG49Qm4obiksZnVuY3Rpb24ocil7cmV0dXJuIE5uKHIsbil9fWZ1bmN0aW9uIFJuKG4scix0KXtpZih2b2lkIDA9PT1yKXJldHVybiBuO3N3aXRjaChudWxsPT10PzM6dCl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5jYWxsKHIsdCl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24odCxlLHUpe3JldHVybiBuLmNhbGwocix0LGUsdSl9O2Nhc2UgNDpyZXR1cm4gZnVuY3Rpb24odCxlLHUsbyl7cmV0dXJuIG4uY2FsbChyLHQsZSx1LG8pfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbi5hcHBseShyLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEZuKG4scix0KXtyZXR1cm4gbnVsbD09bj9UbjpEKG4pP1JuKG4scix0KTpfKG4pJiYhVShuKT9rbihuKTpEbihuKX1mdW5jdGlvbiBWbihuLHIpe3JldHVybiBGbihuLHIsMS8wKX1mdW5jdGlvbiBQbihuLHIsdCl7cmV0dXJuIHRuLml0ZXJhdGVlIT09Vm4/dG4uaXRlcmF0ZWUobixyKTpGbihuLHIsdCl9ZnVuY3Rpb24gcW4oKXt9ZnVuY3Rpb24gVW4obixyKXtyZXR1cm4gbnVsbD09ciYmKHI9bixuPTApLG4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihyLW4rMSkpfXRuLnRvUGF0aD1Fbix0bi5pdGVyYXRlZT1Wbjt2YXIgV249RGF0ZS5ub3d8fGZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O2Z1bmN0aW9uIHpuKG4pe3ZhciByPWZ1bmN0aW9uKHIpe3JldHVybiBuW3JdfSx0PSIoPzoiK25uKG4pLmpvaW4oInwiKSsiKSIsZT1SZWdFeHAodCksdT1SZWdFeHAodCwiZyIpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbj1udWxsPT1uPyIiOiIiK24sZS50ZXN0KG4pP24ucmVwbGFjZSh1LHIpOm59fXZhciBMbj17IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjeDI3OyIsImAiOiImI3g2MDsifSwkbj16bihMbiksQ249em4oX24oTG4pKSxLbj10bi50ZW1wbGF0ZVNldHRpbmdzPXtldmFsdWF0ZTovPCUoW1xzXFNdKz8pJT4vZyxpbnRlcnBvbGF0ZTovPCU9KFtcc1xTXSs/KSU+L2csZXNjYXBlOi88JS0oW1xzXFNdKz8pJT4vZ30sSm49LyguKV4vLEduPXsiJyI6IiciLCJcXCI6IlxcIiwiXHIiOiJyIiwiXG4iOiJuIiwiXHUyMDI4IjoidTIwMjgiLCJcdTIwMjkiOiJ1MjAyOSJ9LEhuPS9cXHwnfFxyfFxufFx1MjAyOHxcdTIwMjkvZztmdW5jdGlvbiBRbihuKXtyZXR1cm4iXFwiK0duW25dfXZhciBYbj0vXlxzKihcd3xcJCkrXHMqJC87dmFyIFluPTA7ZnVuY3Rpb24gWm4obixyLHQsZSx1KXtpZighKGUgaW5zdGFuY2VvZiByKSlyZXR1cm4gbi5hcHBseSh0LHUpO3ZhciBvPU1uKG4ucHJvdG90eXBlKSxpPW4uYXBwbHkobyx1KTtyZXR1cm4gXyhpKT9pOm99dmFyIG5yPWooKGZ1bmN0aW9uKG4scil7dmFyIHQ9bnIucGxhY2Vob2xkZXIsZT1mdW5jdGlvbigpe2Zvcih2YXIgdT0wLG89ci5sZW5ndGgsaT1BcnJheShvKSxhPTA7YTxvO2ErKylpW2FdPXJbYV09PT10P2FyZ3VtZW50c1t1KytdOnJbYV07Zm9yKDt1PGFyZ3VtZW50cy5sZW5ndGg7KWkucHVzaChhcmd1bWVudHNbdSsrXSk7cmV0dXJuIFpuKG4sZSx0aGlzLHRoaXMsaSl9O3JldHVybiBlfSkpO25yLnBsYWNlaG9sZGVyPXRuO3ZhciBycj1qKChmdW5jdGlvbihuLHIsdCl7aWYoIUQobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1bmN0aW9uIik7dmFyIGU9aigoZnVuY3Rpb24odSl7cmV0dXJuIFpuKG4sZSxyLHRoaXMsdC5jb25jYXQodSkpfSkpO3JldHVybiBlfSkpLHRyPUsoWSk7ZnVuY3Rpb24gZXIobixyLHQsZSl7aWYoZT1lfHxbXSxyfHwwPT09cil7aWYocjw9MClyZXR1cm4gZS5jb25jYXQobil9ZWxzZSByPTEvMDtmb3IodmFyIHU9ZS5sZW5ndGgsbz0wLGk9WShuKTtvPGk7bysrKXt2YXIgYT1uW29dO2lmKHRyKGEpJiYoVShhKXx8TChhKSkpaWYocj4xKWVyKGEsci0xLHQsZSksdT1lLmxlbmd0aDtlbHNlIGZvcih2YXIgZj0wLGM9YS5sZW5ndGg7ZjxjOyllW3UrK109YVtmKytdO2Vsc2UgdHx8KGVbdSsrXT1hKX1yZXR1cm4gZX12YXIgdXI9aigoZnVuY3Rpb24obixyKXt2YXIgdD0ocj1lcihyLCExLCExKSkubGVuZ3RoO2lmKHQ8MSl0aHJvdyBuZXcgRXJyb3IoImJpbmRBbGwgbXVzdCBiZSBwYXNzZWQgZnVuY3Rpb24gbmFtZXMiKTtmb3IoO3QtLTspe3ZhciBlPXJbdF07bltlXT1ycihuW2VdLG4pfXJldHVybiBufSkpO3ZhciBvcj1qKChmdW5jdGlvbihuLHIsdCl7cmV0dXJuIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cmV0dXJuIG4uYXBwbHkobnVsbCx0KX0pLHIpfSkpLGlyPW5yKG9yLHRuLDEpO2Z1bmN0aW9uIGFyKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiFuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gZnIobixyKXt2YXIgdDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tLW4+MCYmKHQ9ci5hcHBseSh0aGlzLGFyZ3VtZW50cykpLG48PTEmJihyPW51bGwpLHR9fXZhciBjcj1ucihmciwyKTtmdW5jdGlvbiBscihuLHIsdCl7cj1QbihyLHQpO2Zvcih2YXIgZSx1PW5uKG4pLG89MCxpPXUubGVuZ3RoO288aTtvKyspaWYocihuW2U9dVtvXV0sZSxuKSlyZXR1cm4gZX1mdW5jdGlvbiBzcihuKXtyZXR1cm4gZnVuY3Rpb24ocix0LGUpe3Q9UG4odCxlKTtmb3IodmFyIHU9WShyKSxvPW4+MD8wOnUtMTtvPj0wJiZvPHU7bys9bilpZih0KHJbb10sbyxyKSlyZXR1cm4gbztyZXR1cm4tMX19dmFyIHByPXNyKDEpLHZyPXNyKC0xKTtmdW5jdGlvbiBocihuLHIsdCxlKXtmb3IodmFyIHU9KHQ9UG4odCxlLDEpKShyKSxvPTAsaT1ZKG4pO288aTspe3ZhciBhPU1hdGguZmxvb3IoKG8raSkvMik7dChuW2FdKTx1P289YSsxOmk9YX1yZXR1cm4gb31mdW5jdGlvbiB5cihuLHIsdCl7cmV0dXJuIGZ1bmN0aW9uKGUsdSxvKXt2YXIgYT0wLGY9WShlKTtpZigibnVtYmVyIj09dHlwZW9mIG8pbj4wP2E9bz49MD9vOk1hdGgubWF4KG8rZixhKTpmPW8+PTA/TWF0aC5taW4obysxLGYpOm8rZisxO2Vsc2UgaWYodCYmbyYmZilyZXR1cm4gZVtvPXQoZSx1KV09PT11P286LTE7aWYodSE9dSlyZXR1cm4obz1yKGkuY2FsbChlLGEsZiksJCkpPj0wP28rYTotMTtmb3Iobz1uPjA/YTpmLTE7bz49MCYmbzxmO28rPW4paWYoZVtvXT09PXUpcmV0dXJuIG87cmV0dXJuLTF9fXZhciBkcj15cigxLHByLGhyKSxncj15cigtMSx2cik7ZnVuY3Rpb24gYnIobixyLHQpe3ZhciBlPSh0cihuKT9wcjpscikobixyLHQpO2lmKHZvaWQgMCE9PWUmJi0xIT09ZSlyZXR1cm4gbltlXX1mdW5jdGlvbiBtcihuLHIsdCl7dmFyIGUsdTtpZihyPVJuKHIsdCksdHIobikpZm9yKGU9MCx1PW4ubGVuZ3RoO2U8dTtlKyspcihuW2VdLGUsbik7ZWxzZXt2YXIgbz1ubihuKTtmb3IoZT0wLHU9by5sZW5ndGg7ZTx1O2UrKylyKG5bb1tlXV0sb1tlXSxuKX1yZXR1cm4gbn1mdW5jdGlvbiBqcihuLHIsdCl7cj1QbihyLHQpO2Zvcih2YXIgZT0hdHIobikmJm5uKG4pLHU9KGV8fG4pLmxlbmd0aCxvPUFycmF5KHUpLGk9MDtpPHU7aSsrKXt2YXIgYT1lP2VbaV06aTtvW2ldPXIoblthXSxhLG4pfXJldHVybiBvfWZ1bmN0aW9uIF9yKG4pe3ZhciByPWZ1bmN0aW9uKHIsdCxlLHUpe3ZhciBvPSF0cihyKSYmbm4ociksaT0ob3x8cikubGVuZ3RoLGE9bj4wPzA6aS0xO2Zvcih1fHwoZT1yW28/b1thXTphXSxhKz1uKTthPj0wJiZhPGk7YSs9bil7dmFyIGY9bz9vW2FdOmE7ZT10KGUscltmXSxmLHIpfXJldHVybiBlfTtyZXR1cm4gZnVuY3Rpb24obix0LGUsdSl7dmFyIG89YXJndW1lbnRzLmxlbmd0aD49MztyZXR1cm4gcihuLFJuKHQsdSw0KSxlLG8pfX12YXIgd3I9X3IoMSksQXI9X3IoLTEpO2Z1bmN0aW9uIHhyKG4scix0KXt2YXIgZT1bXTtyZXR1cm4gcj1QbihyLHQpLG1yKG4sKGZ1bmN0aW9uKG4sdCx1KXtyKG4sdCx1KSYmZS5wdXNoKG4pfSkpLGV9ZnVuY3Rpb24gU3IobixyLHQpe3I9UG4ocix0KTtmb3IodmFyIGU9IXRyKG4pJiZubihuKSx1PShlfHxuKS5sZW5ndGgsbz0wO288dTtvKyspe3ZhciBpPWU/ZVtvXTpvO2lmKCFyKG5baV0saSxuKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBPcihuLHIsdCl7cj1QbihyLHQpO2Zvcih2YXIgZT0hdHIobikmJm5uKG4pLHU9KGV8fG4pLmxlbmd0aCxvPTA7bzx1O28rKyl7dmFyIGk9ZT9lW29dOm87aWYocihuW2ldLGksbikpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gTXIobixyLHQsZSl7cmV0dXJuIHRyKG4pfHwobj1qbihuKSksKCJudW1iZXIiIT10eXBlb2YgdHx8ZSkmJih0PTApLGRyKG4scix0KT49MH12YXIgRXI9aigoZnVuY3Rpb24obixyLHQpe3ZhciBlLHU7cmV0dXJuIEQocik/dT1yOihyPUJuKHIpLGU9ci5zbGljZSgwLC0xKSxyPXJbci5sZW5ndGgtMV0pLGpyKG4sKGZ1bmN0aW9uKG4pe3ZhciBvPXU7aWYoIW8pe2lmKGUmJmUubGVuZ3RoJiYobj1ObihuLGUpKSxudWxsPT1uKXJldHVybjtvPW5bcl19cmV0dXJuIG51bGw9PW8/bzpvLmFwcGx5KG4sdCl9KSl9KSk7ZnVuY3Rpb24gQnIobixyKXtyZXR1cm4ganIobixEbihyKSl9ZnVuY3Rpb24gTnIobixyLHQpe3ZhciBlLHUsbz0tMS8wLGk9LTEvMDtpZihudWxsPT1yfHwibnVtYmVyIj09dHlwZW9mIHImJiJvYmplY3QiIT10eXBlb2YgblswXSYmbnVsbCE9bilmb3IodmFyIGE9MCxmPShuPXRyKG4pP246am4obikpLmxlbmd0aDthPGY7YSsrKW51bGwhPShlPW5bYV0pJiZlPm8mJihvPWUpO2Vsc2Ugcj1QbihyLHQpLG1yKG4sKGZ1bmN0aW9uKG4sdCxlKXsoKHU9cihuLHQsZSkpPml8fHU9PT0tMS8wJiZvPT09LTEvMCkmJihvPW4saT11KX0pKTtyZXR1cm4gb312YXIgSXI9L1teXHVkODAwLVx1ZGZmZl18W1x1ZDgwMC1cdWRiZmZdW1x1ZGMwMC1cdWRmZmZdfFtcdWQ4MDAtXHVkZmZmXS9nO2Z1bmN0aW9uIFRyKG4pe3JldHVybiBuP1Uobik/aS5jYWxsKG4pOlMobik/bi5tYXRjaChJcik6dHIobik/anIobixUbik6am4obik6W119ZnVuY3Rpb24ga3IobixyLHQpe2lmKG51bGw9PXJ8fHQpcmV0dXJuIHRyKG4pfHwobj1qbihuKSksbltVbihuLmxlbmd0aC0xKV07dmFyIGU9VHIobiksdT1ZKGUpO3I9TWF0aC5tYXgoTWF0aC5taW4ocix1KSwwKTtmb3IodmFyIG89dS0xLGk9MDtpPHI7aSsrKXt2YXIgYT1VbihpLG8pLGY9ZVtpXTtlW2ldPWVbYV0sZVthXT1mfXJldHVybiBlLnNsaWNlKDAscil9ZnVuY3Rpb24gRHIobixyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHUpe3ZhciBvPXI/W1tdLFtdXTp7fTtyZXR1cm4gZT1QbihlLHUpLG1yKHQsKGZ1bmN0aW9uKHIsdSl7dmFyIGk9ZShyLHUsdCk7bihvLHIsaSl9KSksb319dmFyIFJyPURyKChmdW5jdGlvbihuLHIsdCl7VyhuLHQpP25bdF0ucHVzaChyKTpuW3RdPVtyXX0pKSxGcj1EcigoZnVuY3Rpb24obixyLHQpe25bdF09cn0pKSxWcj1EcigoZnVuY3Rpb24obixyLHQpe1cobix0KT9uW3RdKys6blt0XT0xfSkpLFByPURyKChmdW5jdGlvbihuLHIsdCl7blt0PzA6MV0ucHVzaChyKX0pLCEwKTtmdW5jdGlvbiBxcihuLHIsdCl7cmV0dXJuIHIgaW4gdH12YXIgVXI9aigoZnVuY3Rpb24obixyKXt2YXIgdD17fSxlPXJbMF07aWYobnVsbD09bilyZXR1cm4gdDtEKGUpPyhyLmxlbmd0aD4xJiYoZT1SbihlLHJbMV0pKSxyPWFuKG4pKTooZT1xcixyPWVyKHIsITEsITEpLG49T2JqZWN0KG4pKTtmb3IodmFyIHU9MCxvPXIubGVuZ3RoO3U8bzt1Kyspe3ZhciBpPXJbdV0sYT1uW2ldO2UoYSxpLG4pJiYodFtpXT1hKX1yZXR1cm4gdH0pKSxXcj1qKChmdW5jdGlvbihuLHIpe3ZhciB0LGU9clswXTtyZXR1cm4gRChlKT8oZT1hcihlKSxyLmxlbmd0aD4xJiYodD1yWzFdKSk6KHI9anIoZXIociwhMSwhMSksU3RyaW5nKSxlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIU1yKHIsdCl9KSxVcihuLGUsdCl9KSk7ZnVuY3Rpb24genIobixyLHQpe3JldHVybiBpLmNhbGwobiwwLE1hdGgubWF4KDAsbi5sZW5ndGgtKG51bGw9PXJ8fHQ/MTpyKSkpfWZ1bmN0aW9uIExyKG4scix0KXtyZXR1cm4gbnVsbD09bnx8bi5sZW5ndGg8MT9udWxsPT1yfHx0P3ZvaWQgMDpbXTpudWxsPT1yfHx0P25bMF06enIobixuLmxlbmd0aC1yKX1mdW5jdGlvbiAkcihuLHIsdCl7cmV0dXJuIGkuY2FsbChuLG51bGw9PXJ8fHQ/MTpyKX12YXIgQ3I9aigoZnVuY3Rpb24obixyKXtyZXR1cm4gcj1lcihyLCEwLCEwKSx4cihuLChmdW5jdGlvbihuKXtyZXR1cm4hTXIocixuKX0pKX0pKSxLcj1qKChmdW5jdGlvbihuLHIpe3JldHVybiBDcihuLHIpfSkpO2Z1bmN0aW9uIEpyKG4scix0LGUpe0Eocil8fChlPXQsdD1yLHI9ITEpLG51bGwhPXQmJih0PVBuKHQsZSkpO2Zvcih2YXIgdT1bXSxvPVtdLGk9MCxhPVkobik7aTxhO2krKyl7dmFyIGY9bltpXSxjPXQ/dChmLGksbik6ZjtyJiYhdD8oaSYmbz09PWN8fHUucHVzaChmKSxvPWMpOnQ/TXIobyxjKXx8KG8ucHVzaChjKSx1LnB1c2goZikpOk1yKHUsZil8fHUucHVzaChmKX1yZXR1cm4gdX12YXIgR3I9aigoZnVuY3Rpb24obil7cmV0dXJuIEpyKGVyKG4sITAsITApKX0pKTtmdW5jdGlvbiBIcihuKXtmb3IodmFyIHI9biYmTnIobixZKS5sZW5ndGh8fDAsdD1BcnJheShyKSxlPTA7ZTxyO2UrKyl0W2VdPUJyKG4sZSk7cmV0dXJuIHR9dmFyIFFyPWooSHIpO2Z1bmN0aW9uIFhyKG4scil7cmV0dXJuIG4uX2NoYWluP3RuKHIpLmNoYWluKCk6cn1mdW5jdGlvbiBZcihuKXtyZXR1cm4gbXIod24obiksKGZ1bmN0aW9uKHIpe3ZhciB0PXRuW3JdPW5bcl07dG4ucHJvdG90eXBlW3JdPWZ1bmN0aW9uKCl7dmFyIG49W3RoaXMuX3dyYXBwZWRdO3JldHVybiBvLmFwcGx5KG4sYXJndW1lbnRzKSxYcih0aGlzLHQuYXBwbHkodG4sbikpfX0pKSx0bn1tcihbInBvcCIsInB1c2giLCJyZXZlcnNlIiwic2hpZnQiLCJzb3J0Iiwic3BsaWNlIiwidW5zaGlmdCJdLChmdW5jdGlvbihuKXt2YXIgcj10W25dO3RuLnByb3RvdHlwZVtuXT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3dyYXBwZWQ7cmV0dXJuIG51bGwhPXQmJihyLmFwcGx5KHQsYXJndW1lbnRzKSwic2hpZnQiIT09biYmInNwbGljZSIhPT1ufHwwIT09dC5sZW5ndGh8fGRlbGV0ZSB0WzBdKSxYcih0aGlzLHQpfX0pKSxtcihbImNvbmNhdCIsImpvaW4iLCJzbGljZSJdLChmdW5jdGlvbihuKXt2YXIgcj10W25dO3RuLnByb3RvdHlwZVtuXT1mdW5jdGlvbigpe3ZhciBuPXRoaXMuX3dyYXBwZWQ7cmV0dXJuIG51bGwhPW4mJihuPXIuYXBwbHkobixhcmd1bWVudHMpKSxYcih0aGlzLG4pfX0pKTt2YXIgWnI9WXIoe19fcHJvdG9fXzpudWxsLFZFUlNJT046bixyZXN0QXJndW1lbnRzOmosaXNPYmplY3Q6Xyxpc051bGw6ZnVuY3Rpb24obil7cmV0dXJuIG51bGw9PT1ufSxpc1VuZGVmaW5lZDp3LGlzQm9vbGVhbjpBLGlzRWxlbWVudDpmdW5jdGlvbihuKXtyZXR1cm4hKCFufHwxIT09bi5ub2RlVHlwZSl9LGlzU3RyaW5nOlMsaXNOdW1iZXI6Tyxpc0RhdGU6TSxpc1JlZ0V4cDpFLGlzRXJyb3I6Qixpc1N5bWJvbDpOLGlzQXJyYXlCdWZmZXI6SSxpc0RhdGFWaWV3OnEsaXNBcnJheTpVLGlzRnVuY3Rpb246RCxpc0FyZ3VtZW50czpMLGlzRmluaXRlOmZ1bmN0aW9uKG4pe3JldHVybiFOKG4pJiZkKG4pJiYhaXNOYU4ocGFyc2VGbG9hdChuKSl9LGlzTmFOOiQsaXNUeXBlZEFycmF5OlgsaXNFbXB0eTpmdW5jdGlvbihuKXtpZihudWxsPT1uKXJldHVybiEwO3ZhciByPVkobik7cmV0dXJuIm51bWJlciI9PXR5cGVvZiByJiYoVShuKXx8UyhuKXx8TChuKSk/MD09PXI6MD09PVkobm4obikpfSxpc01hdGNoOnJuLGlzRXF1YWw6ZnVuY3Rpb24obixyKXtyZXR1cm4gb24obixyKX0saXNNYXA6ZG4saXNXZWFrTWFwOmduLGlzU2V0OmJuLGlzV2Vha1NldDptbixrZXlzOm5uLGFsbEtleXM6YW4sdmFsdWVzOmpuLHBhaXJzOmZ1bmN0aW9uKG4pe2Zvcih2YXIgcj1ubihuKSx0PXIubGVuZ3RoLGU9QXJyYXkodCksdT0wO3U8dDt1KyspZVt1XT1bclt1XSxuW3JbdV1dXTtyZXR1cm4gZX0saW52ZXJ0Ol9uLGZ1bmN0aW9uczp3bixtZXRob2RzOnduLGV4dGVuZDp4bixleHRlbmRPd246U24sYXNzaWduOlNuLGRlZmF1bHRzOk9uLGNyZWF0ZTpmdW5jdGlvbihuLHIpe3ZhciB0PU1uKG4pO3JldHVybiByJiZTbih0LHIpLHR9LGNsb25lOmZ1bmN0aW9uKG4pe3JldHVybiBfKG4pP1Uobik/bi5zbGljZSgpOnhuKHt9LG4pOm59LHRhcDpmdW5jdGlvbihuLHIpe3JldHVybiByKG4pLG59LGdldDpJbixoYXM6ZnVuY3Rpb24obixyKXtmb3IodmFyIHQ9KHI9Qm4ocikpLmxlbmd0aCxlPTA7ZTx0O2UrKyl7dmFyIHU9cltlXTtpZighVyhuLHUpKXJldHVybiExO249blt1XX1yZXR1cm4hIXR9LG1hcE9iamVjdDpmdW5jdGlvbihuLHIsdCl7cj1QbihyLHQpO2Zvcih2YXIgZT1ubihuKSx1PWUubGVuZ3RoLG89e30saT0wO2k8dTtpKyspe3ZhciBhPWVbaV07b1thXT1yKG5bYV0sYSxuKX1yZXR1cm4gb30saWRlbnRpdHk6VG4sY29uc3RhbnQ6Qyxub29wOnFuLHRvUGF0aDpFbixwcm9wZXJ0eTpEbixwcm9wZXJ0eU9mOmZ1bmN0aW9uKG4pe3JldHVybiBudWxsPT1uP3FuOmZ1bmN0aW9uKHIpe3JldHVybiBJbihuLHIpfX0sbWF0Y2hlcjprbixtYXRjaGVzOmtuLHRpbWVzOmZ1bmN0aW9uKG4scix0KXt2YXIgZT1BcnJheShNYXRoLm1heCgwLG4pKTtyPVJuKHIsdCwxKTtmb3IodmFyIHU9MDt1PG47dSsrKWVbdV09cih1KTtyZXR1cm4gZX0scmFuZG9tOlVuLG5vdzpXbixlc2NhcGU6JG4sdW5lc2NhcGU6Q24sdGVtcGxhdGVTZXR0aW5nczpLbix0ZW1wbGF0ZTpmdW5jdGlvbihuLHIsdCl7IXImJnQmJihyPXQpLHI9T24oe30scix0bi50ZW1wbGF0ZVNldHRpbmdzKTt2YXIgZT1SZWdFeHAoWyhyLmVzY2FwZXx8Sm4pLnNvdXJjZSwoci5pbnRlcnBvbGF0ZXx8Sm4pLnNvdXJjZSwoci5ldmFsdWF0ZXx8Sm4pLnNvdXJjZV0uam9pbigifCIpKyJ8JCIsImciKSx1PTAsbz0iX19wKz0nIjtuLnJlcGxhY2UoZSwoZnVuY3Rpb24ocix0LGUsaSxhKXtyZXR1cm4gbys9bi5zbGljZSh1LGEpLnJlcGxhY2UoSG4sUW4pLHU9YStyLmxlbmd0aCx0P28rPSInK1xuKChfX3Q9KCIrdCsiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXG4nIjplP28rPSInK1xuKChfX3Q9KCIrZSsiKSk9PW51bGw/Jyc6X190KStcbiciOmkmJihvKz0iJztcbiIraSsiXG5fX3ArPSciKSxyfSkpLG8rPSInO1xuIjt2YXIgaSxhPXIudmFyaWFibGU7aWYoYSl7aWYoIVhuLnRlc3QoYSkpdGhyb3cgbmV3IEVycm9yKCJ2YXJpYWJsZSBpcyBub3QgYSBiYXJlIGlkZW50aWZpZXI6ICIrYSl9ZWxzZSBvPSJ3aXRoKG9ianx8e30pe1xuIitvKyJ9XG4iLGE9Im9iaiI7bz0idmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLCIrInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307XG4iK28rInJldHVybiBfX3A7XG4iO3RyeXtpPW5ldyBGdW5jdGlvbihhLCJfIixvKX1jYXRjaChuKXt0aHJvdyBuLnNvdXJjZT1vLG59dmFyIGY9ZnVuY3Rpb24obil7cmV0dXJuIGkuY2FsbCh0aGlzLG4sdG4pfTtyZXR1cm4gZi5zb3VyY2U9ImZ1bmN0aW9uKCIrYSsiKXtcbiIrbysifSIsZn0scmVzdWx0OmZ1bmN0aW9uKG4scix0KXt2YXIgZT0ocj1CbihyKSkubGVuZ3RoO2lmKCFlKXJldHVybiBEKHQpP3QuY2FsbChuKTp0O2Zvcih2YXIgdT0wO3U8ZTt1Kyspe3ZhciBvPW51bGw9PW4/dm9pZCAwOm5bclt1XV07dm9pZCAwPT09byYmKG89dCx1PWUpLG49RChvKT9vLmNhbGwobik6b31yZXR1cm4gbn0sdW5pcXVlSWQ6ZnVuY3Rpb24obil7dmFyIHI9KytZbisiIjtyZXR1cm4gbj9uK3I6cn0sY2hhaW46ZnVuY3Rpb24obil7dmFyIHI9dG4obik7cmV0dXJuIHIuX2NoYWluPSEwLHJ9LGl0ZXJhdGVlOlZuLHBhcnRpYWw6bnIsYmluZDpycixiaW5kQWxsOnVyLG1lbW9pemU6ZnVuY3Rpb24obixyKXt2YXIgdD1mdW5jdGlvbihlKXt2YXIgdT10LmNhY2hlLG89IiIrKHI/ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZSk7cmV0dXJuIFcodSxvKXx8KHVbb109bi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHVbb119O3JldHVybiB0LmNhY2hlPXt9LHR9LGRlbGF5Om9yLGRlZmVyOmlyLHRocm90dGxlOmZ1bmN0aW9uKG4scix0KXt2YXIgZSx1LG8saSxhPTA7dHx8KHQ9e30pO3ZhciBmPWZ1bmN0aW9uKCl7YT0hMT09PXQubGVhZGluZz8wOlduKCksZT1udWxsLGk9bi5hcHBseSh1LG8pLGV8fCh1PW89bnVsbCl9LGM9ZnVuY3Rpb24oKXt2YXIgYz1XbigpO2F8fCExIT09dC5sZWFkaW5nfHwoYT1jKTt2YXIgbD1yLShjLWEpO3JldHVybiB1PXRoaXMsbz1hcmd1bWVudHMsbDw9MHx8bD5yPyhlJiYoY2xlYXJUaW1lb3V0KGUpLGU9bnVsbCksYT1jLGk9bi5hcHBseSh1LG8pLGV8fCh1PW89bnVsbCkpOmV8fCExPT09dC50cmFpbGluZ3x8KGU9c2V0VGltZW91dChmLGwpKSxpfTtyZXR1cm4gYy5jYW5jZWw9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoZSksYT0wLGU9dT1vPW51bGx9LGN9LGRlYm91bmNlOmZ1bmN0aW9uKG4scix0KXt2YXIgZSx1LG8saSxhLGY9ZnVuY3Rpb24oKXt2YXIgYz1XbigpLXU7cj5jP2U9c2V0VGltZW91dChmLHItYyk6KGU9bnVsbCx0fHwoaT1uLmFwcGx5KGEsbykpLGV8fChvPWE9bnVsbCkpfSxjPWooKGZ1bmN0aW9uKGMpe3JldHVybiBhPXRoaXMsbz1jLHU9V24oKSxlfHwoZT1zZXRUaW1lb3V0KGYsciksdCYmKGk9bi5hcHBseShhLG8pKSksaX0pKTtyZXR1cm4gYy5jYW5jZWw9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoZSksZT1vPWE9bnVsbH0sY30sd3JhcDpmdW5jdGlvbihuLHIpe3JldHVybiBucihyLG4pfSxuZWdhdGU6YXIsY29tcG9zZTpmdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50cyxyPW4ubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PXIsZT1uW3JdLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0LS07KWU9blt0XS5jYWxsKHRoaXMsZSk7cmV0dXJuIGV9fSxhZnRlcjpmdW5jdGlvbihuLHIpe3JldHVybiBmdW5jdGlvbigpe2lmKC0tbjwxKXJldHVybiByLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGJlZm9yZTpmcixvbmNlOmNyLGZpbmRLZXk6bHIsZmluZEluZGV4OnByLGZpbmRMYXN0SW5kZXg6dnIsc29ydGVkSW5kZXg6aHIsaW5kZXhPZjpkcixsYXN0SW5kZXhPZjpncixmaW5kOmJyLGRldGVjdDpicixmaW5kV2hlcmU6ZnVuY3Rpb24obixyKXtyZXR1cm4gYnIobixrbihyKSl9LGVhY2g6bXIsZm9yRWFjaDptcixtYXA6anIsY29sbGVjdDpqcixyZWR1Y2U6d3IsZm9sZGw6d3IsaW5qZWN0OndyLHJlZHVjZVJpZ2h0OkFyLGZvbGRyOkFyLGZpbHRlcjp4cixzZWxlY3Q6eHIscmVqZWN0OmZ1bmN0aW9uKG4scix0KXtyZXR1cm4geHIobixhcihQbihyKSksdCl9LGV2ZXJ5OlNyLGFsbDpTcixzb21lOk9yLGFueTpPcixjb250YWluczpNcixpbmNsdWRlczpNcixpbmNsdWRlOk1yLGludm9rZTpFcixwbHVjazpCcix3aGVyZTpmdW5jdGlvbihuLHIpe3JldHVybiB4cihuLGtuKHIpKX0sbWF4Ok5yLG1pbjpmdW5jdGlvbihuLHIsdCl7dmFyIGUsdSxvPTEvMCxpPTEvMDtpZihudWxsPT1yfHwibnVtYmVyIj09dHlwZW9mIHImJiJvYmplY3QiIT10eXBlb2YgblswXSYmbnVsbCE9bilmb3IodmFyIGE9MCxmPShuPXRyKG4pP246am4obikpLmxlbmd0aDthPGY7YSsrKW51bGwhPShlPW5bYV0pJiZlPG8mJihvPWUpO2Vsc2Ugcj1QbihyLHQpLG1yKG4sKGZ1bmN0aW9uKG4sdCxlKXsoKHU9cihuLHQsZSkpPGl8fHU9PT0xLzAmJm89PT0xLzApJiYobz1uLGk9dSl9KSk7cmV0dXJuIG99LHNodWZmbGU6ZnVuY3Rpb24obil7cmV0dXJuIGtyKG4sMS8wKX0sc2FtcGxlOmtyLHNvcnRCeTpmdW5jdGlvbihuLHIsdCl7dmFyIGU9MDtyZXR1cm4gcj1QbihyLHQpLEJyKGpyKG4sKGZ1bmN0aW9uKG4sdCx1KXtyZXR1cm57dmFsdWU6bixpbmRleDplKyssY3JpdGVyaWE6cihuLHQsdSl9fSkpLnNvcnQoKGZ1bmN0aW9uKG4scil7dmFyIHQ9bi5jcml0ZXJpYSxlPXIuY3JpdGVyaWE7aWYodCE9PWUpe2lmKHQ+ZXx8dm9pZCAwPT09dClyZXR1cm4gMTtpZih0PGV8fHZvaWQgMD09PWUpcmV0dXJuLTF9cmV0dXJuIG4uaW5kZXgtci5pbmRleH0pKSwidmFsdWUiKX0sZ3JvdXBCeTpScixpbmRleEJ5OkZyLGNvdW50Qnk6VnIscGFydGl0aW9uOlByLHRvQXJyYXk6VHIsc2l6ZTpmdW5jdGlvbihuKXtyZXR1cm4gbnVsbD09bj8wOnRyKG4pP24ubGVuZ3RoOm5uKG4pLmxlbmd0aH0scGljazpVcixvbWl0OldyLGZpcnN0OkxyLGhlYWQ6THIsdGFrZTpMcixpbml0aWFsOnpyLGxhc3Q6ZnVuY3Rpb24obixyLHQpe3JldHVybiBudWxsPT1ufHxuLmxlbmd0aDwxP251bGw9PXJ8fHQ/dm9pZCAwOltdOm51bGw9PXJ8fHQ/bltuLmxlbmd0aC0xXTokcihuLE1hdGgubWF4KDAsbi5sZW5ndGgtcikpfSxyZXN0OiRyLHRhaWw6JHIsZHJvcDokcixjb21wYWN0OmZ1bmN0aW9uKG4pe3JldHVybiB4cihuLEJvb2xlYW4pfSxmbGF0dGVuOmZ1bmN0aW9uKG4scil7cmV0dXJuIGVyKG4sciwhMSl9LHdpdGhvdXQ6S3IsdW5pcTpKcix1bmlxdWU6SnIsdW5pb246R3IsaW50ZXJzZWN0aW9uOmZ1bmN0aW9uKG4pe2Zvcih2YXIgcj1bXSx0PWFyZ3VtZW50cy5sZW5ndGgsZT0wLHU9WShuKTtlPHU7ZSsrKXt2YXIgbz1uW2VdO2lmKCFNcihyLG8pKXt2YXIgaTtmb3IoaT0xO2k8dCYmTXIoYXJndW1lbnRzW2ldLG8pO2krKyk7aT09PXQmJnIucHVzaChvKX19cmV0dXJuIHJ9LGRpZmZlcmVuY2U6Q3IsdW56aXA6SHIsdHJhbnNwb3NlOkhyLHppcDpRcixvYmplY3Q6ZnVuY3Rpb24obixyKXtmb3IodmFyIHQ9e30sZT0wLHU9WShuKTtlPHU7ZSsrKXI/dFtuW2VdXT1yW2VdOnRbbltlXVswXV09bltlXVsxXTtyZXR1cm4gdH0scmFuZ2U6ZnVuY3Rpb24obixyLHQpe251bGw9PXImJihyPW58fDAsbj0wKSx0fHwodD1yPG4/LTE6MSk7Zm9yKHZhciBlPU1hdGgubWF4KE1hdGguY2VpbCgoci1uKS90KSwwKSx1PUFycmF5KGUpLG89MDtvPGU7bysrLG4rPXQpdVtvXT1uO3JldHVybiB1fSxjaHVuazpmdW5jdGlvbihuLHIpe2lmKG51bGw9PXJ8fHI8MSlyZXR1cm5bXTtmb3IodmFyIHQ9W10sZT0wLHU9bi5sZW5ndGg7ZTx1Oyl0LnB1c2goaS5jYWxsKG4sZSxlKz1yKSk7cmV0dXJuIHR9LG1peGluOllyLGRlZmF1bHQ6dG59KTtyZXR1cm4gWnIuXz1acixacn0pKTs=]]></data>
	</file>
	<file>
	  <filename>/js/util.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQnVpbHQgYnkgZXVzdGlhLgooZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkKewogICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkKICAgIHsKICAgICAgICBkZWZpbmUoW10sIGZhY3RvcnkpOwogICAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykKICAgIHsKICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTsKICAgIH0gZWxzZSB7IHJvb3QuXyA9IGZhY3RvcnkoKTsgfQp9KHRoaXMsIGZ1bmN0aW9uICgpCnsKICAgIC8qIGVzbGludC1kaXNhYmxlICovCgogICAgdmFyIF8gPSB7fTsKCiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgd2luZG93Ll8pIF8gPSB3aW5kb3cuXzsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZm52MWEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGZudjFhID0gXy5mbnYxYSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFNpbXBsZSBGTlYtMWEgaW1wbGVtZW50YXRpb24uCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHN0ciAgIHxTdHJpbmcgdG8gaGFzaHwKICAgICAgICAgKiB8cmV0dXJufEhhc3QgcmVzdWx0ICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogZm52MWEoJ3Rlc3QnKTsgLy8gLT4gMjk0OTY3MzQ0NQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZm52MWEoc3RyOiBzdHJpbmcpOiBudW1iZXI7CiAgICAgICAgICovCiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3NjaHdhcnprb3BmYi9mbnYxYQogICAgICAgIC8vIGh0dHA6Ly9pc3RoZS5jb20vY2hvbmdvL3RlY2gvY29tcC9mbnYKICAgICAgICB2YXIgQkFTRSA9IDB4ODExYzlkYzU7CgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgdmFyIHJldCA9IEJBU0U7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gc3RyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICByZXQgXj0gc3RyLmNoYXJDb2RlQXQoaSk7CiAgICAgICAgICAgICAgICByZXQgKz0gKHJldCA8PCAxKSArIChyZXQgPDwgNCkgKyAocmV0IDw8IDcpICsgKHJldCA8PCA4KSArIChyZXQgPDwgMjQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmV0ID4+PiAwOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdHJIYXNoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBzdHJIYXNoID0gXy5zdHJIYXNoID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogU3RyaW5nIGhhc2ggZnVuY3Rpb24gdXNpbmcgZGpiMi4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8c3RyICAgfFN0cmluZyB0byBoYXNofAogICAgICAgICAqIHxyZXR1cm58SGFzaCByZXN1bHQgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBzdHJIYXNoKCd0ZXN0Jyk7IC8vIC0+IDIwOTA3NzA5ODEKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHN0ckhhc2goc3RyOiBzdHJpbmcpOiBudW1iZXI7CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgICAgICB2YXIgaGFzaCA9IDUzODE7CiAgICAgICAgICAgIHZhciBpID0gc3RyLmxlbmd0aDsKCiAgICAgICAgICAgIHdoaWxlIChpKSB7CiAgICAgICAgICAgICAgICBoYXNoID0gKGhhc2ggPDwgNSkgKyBoYXNoICsgc3RyLmNoYXJDb2RlQXQoLS1pKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGhhc2ggPj4+IDA7IC8vIE1ha2Ugc3VyZSBpdCdzIGFsd2F5cyBwb3NpdGl2ZS4KICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcmdiVG9Ic2wgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIHJnYlRvSHNsID0gXy5yZ2JUb0hzbCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENvbnZlcnQgcmdiIHRvIGhzbC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS18CiAgICAgICAgICogfHJnYiAgIHxSZ2IgdmFsdWVzfAogICAgICAgICAqIHxyZXR1cm58SHNsIHZhbHVlc3wKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHJnYlRvSHNsKFs1MiwgMjAzLCAxNjUsIDAuOF0pOyAvLyAtPiBbMTY1LCA1OSwgNTAsIDAuOF0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJnYlRvSHNsKHJnYjogbnVtYmVyW10pOiBudW1iZXJbXTsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24ocmdiKSB7CiAgICAgICAgICAgIHZhciByID0gcmdiWzBdIC8gMjU1OwogICAgICAgICAgICB2YXIgZyA9IHJnYlsxXSAvIDI1NTsKICAgICAgICAgICAgdmFyIGIgPSByZ2JbMl0gLyAyNTU7CiAgICAgICAgICAgIHZhciBtaW4gPSBtTWluKHIsIGcsIGIpOwogICAgICAgICAgICB2YXIgbWF4ID0gbU1heChyLCBnLCBiKTsKICAgICAgICAgICAgdmFyIGRlbHRhID0gbWF4IC0gbWluOwogICAgICAgICAgICB2YXIgaDsKICAgICAgICAgICAgdmFyIHM7CgogICAgICAgICAgICBpZiAobWF4ID09PSBtaW4pIHsKICAgICAgICAgICAgICAgIGggPSAwOwogICAgICAgICAgICB9IGVsc2UgaWYgKHIgPT09IG1heCkgewogICAgICAgICAgICAgICAgaCA9IChnIC0gYikgLyBkZWx0YTsKICAgICAgICAgICAgfSBlbHNlIGlmIChnID09PSBtYXgpIHsKICAgICAgICAgICAgICAgIGggPSAyICsgKGIgLSByKSAvIGRlbHRhOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaCA9IDQgKyAociAtIGcpIC8gZGVsdGE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGggPSBtTWluKGggKiA2MCwgMzYwKTsKICAgICAgICAgICAgaWYgKGggPCAwKSBoICs9IDM2MDsKICAgICAgICAgICAgdmFyIGwgPSAobWluICsgbWF4KSAvIDI7CgogICAgICAgICAgICBpZiAobWF4ID09PSBtaW4pIHsKICAgICAgICAgICAgICAgIHMgPSAwOwogICAgICAgICAgICB9IGVsc2UgaWYgKGwgPD0gMC41KSB7CiAgICAgICAgICAgICAgICBzID0gZGVsdGEgLyAobWF4ICsgbWluKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHMgPSBkZWx0YSAvICgyIC0gbWF4IC0gbWluKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHJldCA9IFtyb3VuZChoKSwgcm91bmQocyAqIDEwMCksIHJvdW5kKGwgKiAxMDApXTsKICAgICAgICAgICAgaWYgKHJnYlszXSkgcmV0WzNdID0gcmdiWzNdOwogICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH07CgogICAgICAgIHZhciBtTWluID0gTWF0aC5taW47CiAgICAgICAgdmFyIG1NYXggPSBNYXRoLm1heDsKICAgICAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaHNsVG9SZ2IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGhzbFRvUmdiID0gXy5oc2xUb1JnYiA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENvbnZlcnQgaHNsIHRvIHJnYi4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS18CiAgICAgICAgICogfGhzbCAgIHxIc2wgdmFsdWVzfAogICAgICAgICAqIHxyZXR1cm58UmdiIHZhbHVlc3wKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGhzbFRvUmdiKFsxNjUsIDU5LCA1MCwgMC44XSk7IC8vIC0+IFs1MiwgMjAzLCAxNjUsIDAuOF0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGhzbFRvUmdiKGhzbDogbnVtYmVyW10pOiBudW1iZXJbXTsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oaHNsKSB7CiAgICAgICAgICAgIHZhciBoID0gaHNsWzBdIC8gMzYwOwogICAgICAgICAgICB2YXIgcyA9IGhzbFsxXSAvIDEwMDsKICAgICAgICAgICAgdmFyIGwgPSBoc2xbMl0gLyAxMDA7CiAgICAgICAgICAgIHZhciByZXQgPSBbXTsKICAgICAgICAgICAgdmFyIHQyOwogICAgICAgICAgICB2YXIgdDM7CiAgICAgICAgICAgIHZhciB2YWw7CiAgICAgICAgICAgIGlmIChoc2xbM10pIHJldFszXSA9IGhzbFszXTsKCiAgICAgICAgICAgIGlmIChzID09PSAwKSB7CiAgICAgICAgICAgICAgICB2YWwgPSByb3VuZChsICogMjU1KTsKICAgICAgICAgICAgICAgIHJldFswXSA9IHJldFsxXSA9IHJldFsyXSA9IHZhbDsKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChsIDwgMC41KSB7CiAgICAgICAgICAgICAgICB0MiA9IGwgKiAoMSArIHMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdDIgPSBsICsgcyAtIGwgKiBzOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdDEgPSAyICogbCAtIHQyOwoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHsKICAgICAgICAgICAgICAgIHQzID0gaCArICgxIC8gMykgKiAtKGkgLSAxKTsKICAgICAgICAgICAgICAgIGlmICh0MyA8IDApIHQzKys7CiAgICAgICAgICAgICAgICBpZiAodDMgPiAxKSB0My0tOwoKICAgICAgICAgICAgICAgIGlmICg2ICogdDMgPCAxKSB7CiAgICAgICAgICAgICAgICAgICAgdmFsID0gdDEgKyAodDIgLSB0MSkgKiA2ICogdDM7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDIgKiB0MyA8IDEpIHsKICAgICAgICAgICAgICAgICAgICB2YWwgPSB0MjsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoMyAqIHQzIDwgMikgewogICAgICAgICAgICAgICAgICAgIHZhbCA9IHQxICsgKHQyIC0gdDEpICogKDIgLyAzIC0gdDMpICogNjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdmFsID0gdDE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0W2ldID0gcm91bmQodmFsICogMjU1KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9OwoKICAgICAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdW5pcUlkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciB1bmlxSWQgPSBfLnVuaXFJZCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEdlbmVyYXRlIGEgZ2xvYmFsbHktdW5pcXVlIGlkLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHByZWZpeHxJZCBwcmVmaXggICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxHbG9iYWxseS11bmlxdWUgaWR8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiB1bmlxSWQoJ2V1c2l0YV8nKTsgLy8gLT4gJ2V1c3RpYV94eHgnCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1bmlxSWQocHJlZml4Pzogc3RyaW5nKTogc3RyaW5nOwogICAgICAgICAqLwogICAgICAgIHZhciBpZENvdW50ZXIgPSAwOwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24ocHJlZml4KSB7CiAgICAgICAgICAgIHZhciBpZCA9ICsraWRDb3VudGVyICsgJyc7CiAgICAgICAgICAgIHJldHVybiBwcmVmaXggPyBwcmVmaXggKyBpZCA6IGlkOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBoYXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGhhcyA9IF8uaGFzID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2tzIGlmIGtleSBpcyBhIGRpcmVjdCBwcm9wZXJ0eS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8b2JqICAgfE9iamVjdCB0byBxdWVyeSAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxrZXkgICB8UGF0aCB0byBjaGVjayAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxUcnVlIGlmIGtleSBpcyBhIGRpcmVjdCBwcm9wZXJ0eXwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGhhcyh7b25lOiAxfSwgJ29uZScpOyAvLyAtPiB0cnVlCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBoYXMob2JqOiB7fSwga2V5OiBzdHJpbmcpOiBib29sZWFuOwogICAgICAgICAqLwogICAgICAgIHZhciBoYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTsKCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7CiAgICAgICAgICAgIHJldHVybiBoYXNPd25Qcm9wLmNhbGwob2JqLCBrZXkpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzbGljZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgc2xpY2UgPSBfLnNsaWNlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ3JlYXRlIHNsaWNlIG9mIHNvdXJjZSBhcnJheSBvciBhcnJheS1saWtlIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgICAgICAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxhcnJheSAgICAgICAgICAgfEFycmF5IHRvIHNsaWNlICAgICAgICAgICAgfAogICAgICAgICAqIHxzdGFydD0wICAgICAgICAgfFN0YXJ0IHBvc2l0aW9uICAgICAgICAgICAgfAogICAgICAgICAqIHxlbmQ9YXJyYXkubGVuZ3RofEVuZCBwb3NpdGlvbiwgbm90IGluY2x1ZGVkfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogc2xpY2UoWzEsIDIsIDMsIDRdLCAxLCAyKTsgLy8gLT4gWzJdCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzbGljZShhcnJheTogYW55W10sIHN0YXJ0PzogbnVtYmVyLCBlbmQ/OiBudW1iZXIpOiBhbnlbXTsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oYXJyLCBzdGFydCwgZW5kKSB7CiAgICAgICAgICAgIHZhciBsZW4gPSBhcnIubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKHN0YXJ0ID09IG51bGwpIHsKICAgICAgICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydCA8IDApIHsKICAgICAgICAgICAgICAgIHN0YXJ0ID0gTWF0aC5tYXgobGVuICsgc3RhcnQsIDApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgc3RhcnQgPSBNYXRoLm1pbihzdGFydCwgbGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGVuZCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBlbmQgPSBsZW47CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5kIDwgMCkgewogICAgICAgICAgICAgICAgZW5kID0gTWF0aC5tYXgobGVuICsgZW5kLCAwKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGVuZCA9IE1hdGgubWluKGVuZCwgbGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHJldCA9IFtdOwoKICAgICAgICAgICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CiAgICAgICAgICAgICAgICByZXQucHVzaChhcnJbc3RhcnQrK10pOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzd2FwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBzd2FwID0gXy5zd2FwID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogU3dhcCB0d28gaXRlbXMgaW4gYW4gYXJyYXkuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxhcnIgICB8QXJyYXkgdG8gc3dhcHwKICAgICAgICAgKiB8YSAgICAgfEZpcnN0IGluZGV4ICB8CiAgICAgICAgICogfGIgICAgIHxTZWNvbmQgaW5kZXggfAogICAgICAgICAqIHxyZXR1cm58QXJyYXkgZ2l2ZW4gIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnN0IGFyciA9IFsxLCAyXTsKICAgICAgICAgKiBzd2FwKGFyciwgMCwgMSk7IC8vIC0+IFsyLCAxXQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc3dhcChhcnI6IGFueVtdLCBhOiBudW1iZXIsIGI6IG51bWJlcik6IGFueVtdOwogICAgICAgICAqLwogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihhcnIsIGEsIGIpIHsKICAgICAgICAgICAgdmFyIHRtcCA9IGFyclthXTsKICAgICAgICAgICAgYXJyW2FdID0gYXJyW2JdOwogICAgICAgICAgICBhcnJbYl0gPSB0bXA7CiAgICAgICAgICAgIHJldHVybiBhcnI7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlzU29ydGVkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBpc1NvcnRlZCA9IF8uaXNTb3J0ZWQgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDaGVjayBpZiBhbiBhcnJheSBpcyBzb3J0ZWQuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGFyciAgIHxBcnJheSB0byBjaGVjayAgICAgICAgIHwKICAgICAgICAgKiB8Y21wICAgfENvbXBhcmF0b3IgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58VHJ1ZSBpZiBhcnJheSBpcyBzb3J0ZWR8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBpc1NvcnRlZChbMSwgMiwgM10pOyAvLyAtPiB0cnVlCiAgICAgICAgICogaXNTb3J0ZWQoWzMsIDIsIDFdKTsgLy8gLT4gZmFsc2UKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGlzU29ydGVkKGFycjogYW55W10sIGNtcD86IEZ1bmN0aW9uKTogYm9vbGVhbjsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oYXJyKSB7CiAgICAgICAgICAgIHZhciBjbXAgPQogICAgICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQKICAgICAgICAgICAgICAgICAgICA/IGFyZ3VtZW50c1sxXQogICAgICAgICAgICAgICAgICAgIDogZXhwb3J0cy5kZWZDb21wYXJhdG9yOwoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGkgPCBsZW4gLSAxOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChjbXAoYXJyW2ldLCBhcnJbaSArIDFdKSA+IDApIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfTsKCiAgICAgICAgZXhwb3J0cy5kZWZDb21wYXJhdG9yID0gZnVuY3Rpb24oYSwgYikgewogICAgICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTsKICAgICAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gMTsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlzVW5kZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGlzVW5kZWYgPSBfLmlzVW5kZWYgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDaGVjayBpZiB2YWx1ZSBpcyB1bmRlZmluZWQuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbCAgIHxWYWx1ZSB0byBjaGVjayAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgdmFsdWUgaXMgdW5kZWZpbmVkfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNVbmRlZih2b2lkIDApOyAvLyAtPiB0cnVlCiAgICAgICAgICogaXNVbmRlZihudWxsKTsgLy8gLT4gZmFsc2UKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGlzVW5kZWYodmFsOiBhbnkpOiBib29sZWFuOwogICAgICAgICAqLwogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbCA9PT0gdm9pZCAwOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjbGFtcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgY2xhbXAgPSBfLmNsYW1wID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2xhbXAgbnVtYmVyIHdpdGhpbiB0aGUgaW5jbHVzaXZlIGxvd2VyIGFuZCB1cHBlciBib3VuZHMuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8biAgICAgfE51bWJlciB0byBjbGFtcHwKICAgICAgICAgKiB8bG93ZXIgfExvd2VyIGJvdW5kICAgIHwKICAgICAgICAgKiB8dXBwZXIgfFVwcGVyIGJvdW5kICAgIHwKICAgICAgICAgKiB8cmV0dXJufENsYW1wZWQgbnVtYmVyIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNsYW1wKC0xMCwgLTUsIDUpOyAvLyAtPiAtNQogICAgICAgICAqIGNsYW1wKDEwLCAtNSwgNSk7IC8vIC0+IDUKICAgICAgICAgKiBjbGFtcCgyLCAtNSwgNSk7IC8vIC0+IDIKICAgICAgICAgKiBjbGFtcCgxMCwgNSk7IC8vIC0+IDUKICAgICAgICAgKiBjbGFtcCgyLCA1KTsgLy8gLT4gMgogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY2xhbXAobjogbnVtYmVyLCBsb3dlcjogbnVtYmVyLCB1cHBlcjogbnVtYmVyKTogbnVtYmVyOwogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNsYW1wKG46IG51bWJlciwgdXBwZXI6IG51bWJlcik6IG51bWJlcjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNVbmRlZiAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG4sIGxvd2VyLCB1cHBlcikgewogICAgICAgICAgICBpZiAoaXNVbmRlZih1cHBlcikpIHsKICAgICAgICAgICAgICAgIHVwcGVyID0gbG93ZXI7CiAgICAgICAgICAgICAgICBsb3dlciA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFpc1VuZGVmKGxvd2VyKSAmJiBuIDwgbG93ZXIpIHJldHVybiBsb3dlcjsKICAgICAgICAgICAgaWYgKG4gPiB1cHBlcikgcmV0dXJuIHVwcGVyOwogICAgICAgICAgICByZXR1cm4gbjsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZmlsbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgZmlsbCA9IF8uZmlsbCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEZpbGwgZWxlbWVudHMgb2YgYXJyYXkgd2l0aCB2YWx1ZS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgICAgIHxEZXNjICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8bGlzdCAgICAgICAgICB8QXJyYXkgdG8gZmlsbCAgICAgICAgICAgfAogICAgICAgICAqIHx2YWwgICAgICAgICAgIHxWYWx1ZSB0byBmaWxsIGFycmF5IHdpdGh8CiAgICAgICAgICogfHN0YXJ0PTAgICAgICAgfFN0YXJ0IHBvc2l0aW9uICAgICAgICAgIHwKICAgICAgICAgKiB8ZW5kPWFyci5sZW5ndGh8RW5kIHBvc2l0aW9uICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm4gICAgICAgIHxGaWxsZWQgYXJyYXkgICAgICAgICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBmaWxsKFsxLCAyLCAzXSwgJyonKTsgLy8gLT4gWycqJywgJyonLCAnKiddCiAgICAgICAgICogZmlsbChbMSwgMiwgM10sICcqJywgMSwgMik7IC8vIC0+IFsxLCAnKicsIDNdCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBmaWxsKAogICAgICAgICAqICAgICBsaXN0OiBhbnlbXSwKICAgICAgICAgKiAgICAgdmFsOiBhbnksCiAgICAgICAgICogICAgIHN0YXJ0PzogbnVtYmVyLAogICAgICAgICAqICAgICBlbmQ/OiBudW1iZXIKICAgICAgICAgKiApOiBhbnlbXTsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNVbmRlZiAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGFyciwgdmFsLCBzdGFydCwgZW5kKSB7CiAgICAgICAgICAgIHZhciBsZW4gPSBhcnIubGVuZ3RoOwogICAgICAgICAgICBpZiAoIWxlbikgcmV0dXJuIFtdOwogICAgICAgICAgICBpZiAoaXNVbmRlZihlbmQpKSBlbmQgPSBsZW47CiAgICAgICAgICAgIGlmIChpc1VuZGVmKHN0YXJ0KSkgc3RhcnQgPSAwOwoKICAgICAgICAgICAgd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CiAgICAgICAgICAgICAgICBhcnJbc3RhcnQrK10gPSB2YWw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBhcnI7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlzT2JqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBpc09iaiA9IF8uaXNPYmogPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDaGVjayBpZiB2YWx1ZSBpcyB0aGUgbGFuZ3VhZ2UgdHlwZSBvZiBPYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbCAgIHxWYWx1ZSB0byBjaGVjayAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgdmFsdWUgaXMgYW4gb2JqZWN0fAogICAgICAgICAqCiAgICAgICAgICogW0xhbmd1YWdlIFNwZWNdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKQogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNPYmooe30pOyAvLyAtPiB0cnVlCiAgICAgICAgICogaXNPYmooW10pOyAvLyAtPiB0cnVlCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpc09iaih2YWw6IGFueSk6IGJvb2xlYW47CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7CiAgICAgICAgICAgIHJldHVybiAhIXZhbCAmJiAodHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0Jyk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG5leHRUaWNrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBuZXh0VGljayA9IF8ubmV4dFRpY2sgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBOZXh0IHRpY2sgZm9yIGJvdGggbm9kZSBhbmQgYnJvd3Nlci4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lfERlc2MgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS18LS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8Y2IgIHxGdW5jdGlvbiB0byBjYWxsfAogICAgICAgICAqCiAgICAgICAgICogVXNlIHByb2Nlc3MubmV4dFRpY2sgaWYgYXZhaWxhYmxlLgogICAgICAgICAqCiAgICAgICAgICogT3RoZXJ3aXNlIHNldEltbWVkaWF0ZSBvciBzZXRUaW1lb3V0IGlzIHVzZWQgYXMgZmFsbGJhY2suCiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICogICAgIC8vIERvIHNvbWV0aGluZy4uLgogICAgICAgICAqIH0pOwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbmV4dFRpY2soY2I6IEZ1bmN0aW9uKTogdm9pZDsKICAgICAgICAgKi8KICAgICAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3MubmV4dFRpY2spIHsKICAgICAgICAgICAgZXhwb3J0cyA9IHByb2Nlc3MubmV4dFRpY2s7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihjYikgewogICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGVuc3VyZUNhbGxhYmxlKGNiKSk7CiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGNiKSB7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGVuc3VyZUNhbGxhYmxlKGNiKSwgMCk7CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBlbnN1cmVDYWxsYWJsZShmbikgewogICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmbiArICcgaXMgbm90IGEgZnVuY3Rpb24nKTsKICAgICAgICAgICAgcmV0dXJuIGZuOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG5vb3AgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIG5vb3AgPSBfLm5vb3AgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBBIG5vLW9wZXJhdGlvbiBmdW5jdGlvbi4KICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIG5vb3AoKTsgLy8gRG9lcyBub3RoaW5nCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBub29wKCk6IHZvaWQ7CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKCkge307CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSByZXZlcnNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciByZXZlcnNlID0gXy5yZXZlcnNlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogUmV2ZXJzZSBhcnJheSB3aXRob3V0IG11dGF0aW5nIGl0LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGFyciAgIHxBcnJheSB0byBtb2RpZnl8CiAgICAgICAgICogfHJldHVybnxSZXZlcnNlZCBhcnJheSB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiByZXZlcnNlKFsxLCAyLCAzXSk7IC8vIC0+IFszLCAyLCAxXQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmV2ZXJzZShhcnI6IGFueVtdKTogYW55W107CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGFycikgewogICAgICAgICAgICB2YXIgbGVuID0gYXJyLmxlbmd0aDsKICAgICAgICAgICAgdmFyIHJldCA9IEFycmF5KGxlbik7CiAgICAgICAgICAgIGxlbi0tOwoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHJldFtsZW4gLSBpXSA9IGFycltpXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbm93IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBub3cgPSBfLm5vdyA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEdldHMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIFVuaXggZXBvY2guCiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBub3coKTsgLy8gLT4gMTQ2ODgyNjY3ODcwMQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbm93KCk6IG51bWJlcjsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0KICAgICAgICAgICAgRGF0ZS5ub3cgfHwKICAgICAgICAgICAgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7CiAgICAgICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc0Jyb3dzZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGlzQnJvd3NlciA9IF8uaXNCcm93c2VyID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2sgaWYgcnVubmluZyBpbiBhIGJyb3dzZXIuCiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb25zb2xlLmxvZyhpc0Jyb3dzZXIpOyAvLyAtPiB0cnVlIGlmIHJ1bm5pbmcgaW4gYSBicm93c2VyCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBjb25zdCBpc0Jyb3dzZXI6IGJvb2xlYW47CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9CiAgICAgICAgICAgIHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnICYmCiAgICAgICAgICAgIHR5cGVvZiBkb2N1bWVudCA9PT0gJ29iamVjdCcgJiYKICAgICAgICAgICAgZG9jdW1lbnQubm9kZVR5cGUgPT09IDk7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSByYWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIHJhZiA9IF8ucmFmID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogU2hvcnRjdXQgZm9yIHJlcXVlc3RBbmltYXRpb25GcmFtZS4KICAgICAgICAgKgogICAgICAgICAqIFVzZSBzZXRUaW1lb3V0IGlmIG5hdGl2ZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgaXMgbm90IHN1cHBvcnRlZC4KICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnN0IGlkID0gcmFmKGZ1bmN0aW9uIHRpY2soKSB7CiAgICAgICAgICogICAgIC8vIEFuaW1hdGlvbiBzdHVmZgogICAgICAgICAqICAgICByYWYodGljayk7CiAgICAgICAgICogfSk7CiAgICAgICAgICogcmFmLmNhbmNlbChpZCk7CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgcmFmIHsKICAgICAgICAgKiAgICAgZnVuY3Rpb24gY2FuY2VsKGlkOiBudW1iZXIpOwogICAgICAgICAqIH0KICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByYWYoY2I6IEZ1bmN0aW9uKTogbnVtYmVyOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBub3cgaXNCcm93c2VyIAogICAgICAgICAqLwoKICAgICAgICB2YXIgcmFmLCBjYW5jZWw7CiAgICAgICAgdmFyIGxhc3RUaW1lID0gMDsKCiAgICAgICAgaWYgKGlzQnJvd3NlcikgewogICAgICAgICAgICByYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lOwogICAgICAgICAgICBjYW5jZWwgPSB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU7CiAgICAgICAgICAgIHZhciB2ZW5kb3JzID0gWydtcycsICdtb3onLCAnd2Via2l0JywgJ28nXTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB2ZW5kb3JzLmxlbmd0aDsgaSA8IGxlbiAmJiAhcmFmOyBpKyspIHsKICAgICAgICAgICAgICAgIHJhZiA9IHdpbmRvd1t2ZW5kb3JzW2ldICsgJ1JlcXVlc3RBbmltYXRpb25GcmFtZSddOwogICAgICAgICAgICAgICAgY2FuY2VsID0KICAgICAgICAgICAgICAgICAgICB3aW5kb3dbdmVuZG9yc1tpXSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8CiAgICAgICAgICAgICAgICAgICAgd2luZG93W3ZlbmRvcnNbaV0gKyAnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJ107CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJhZiA9CiAgICAgICAgICAgIHJhZiB8fAogICAgICAgICAgICBmdW5jdGlvbihjYikgewogICAgICAgICAgICAgICAgdmFyIGN1clRpbWUgPSBub3coKTsKICAgICAgICAgICAgICAgIHZhciB0aW1lVG9DYWxsID0gTWF0aC5tYXgoMCwgMTYgLSAoY3VyVGltZSAtIGxhc3RUaW1lKSk7CiAgICAgICAgICAgICAgICB2YXIgaWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGNiKGN1clRpbWUgKyB0aW1lVG9DYWxsKTsKICAgICAgICAgICAgICAgIH0sIHRpbWVUb0NhbGwpOwogICAgICAgICAgICAgICAgbGFzdFRpbWUgPSBjdXJUaW1lICsgdGltZVRvQ2FsbDsKICAgICAgICAgICAgICAgIHJldHVybiBpZDsKICAgICAgICAgICAgfTsKCiAgICAgICAgY2FuY2VsID0KICAgICAgICAgICAgY2FuY2VsIHx8CiAgICAgICAgICAgIGZ1bmN0aW9uKGlkKSB7CiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaWQpOwogICAgICAgICAgICB9OwoKICAgICAgICByYWYuY2FuY2VsID0gY2FuY2VsOwogICAgICAgIGV4cG9ydHMgPSByYWY7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSByb290IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciByb290ID0gXy5yb290ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogUm9vdCBvYmplY3QgcmVmZXJlbmNlLCBgZ2xvYmFsYCBpbiBub2RlSnMsIGB3aW5kb3dgIGluIGJyb3dzZXIuICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBjb25zdCByb290OiBhbnk7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlzQnJvd3NlciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGlzQnJvd3NlciA/IHdpbmRvdyA6IGdsb2JhbDsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGRldGVjdE1vY2hhIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBkZXRlY3RNb2NoYSA9IF8uZGV0ZWN0TW9jaGEgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBEZXRlY3QgaWYgbW9jaGEgaXMgcnVubmluZy4KICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGRldGVjdE1vY2hhKCk7IC8vIC0+IFRydWUgaWYgbW9jaGEgaXMgcnVubmluZy4KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGRldGVjdE1vY2hhKCk6IGJvb2xlYW47CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHJvb3QgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBtZXRob2QgPSBtZXRob2RzW2ldOwogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByb290W21ldGhvZF0gIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfTsKCiAgICAgICAgdmFyIG1ldGhvZHMgPSBbJ2FmdGVyRWFjaCcsICdhZnRlcicsICdiZWZvcmVFYWNoJywgJ2JlZm9yZScsICdkZXNjcmliZScsICdpdCddOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0ga2V5cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIga2V5cyA9IF8ua2V5cyA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENyZWF0ZSBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2Ygb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxvYmogICB8T2JqZWN0IHRvIHF1ZXJ5ICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxBcnJheSBvZiBwcm9wZXJ0eSBuYW1lc3wKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGtleXMoe2E6IDF9KTsgLy8gLT4gWydhJ10KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGtleXMob2JqOiBhbnkpOiBzdHJpbmdbXTsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaGFzIGRldGVjdE1vY2hhIAogICAgICAgICAqLwoKICAgICAgICBpZiAoT2JqZWN0LmtleXMgJiYgIWRldGVjdE1vY2hhKCkpIHsKICAgICAgICAgICAgZXhwb3J0cyA9IE9iamVjdC5rZXlzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihvYmopIHsKICAgICAgICAgICAgICAgIHZhciByZXQgPSBbXTsKCiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGhhcyhvYmosIGtleSkpIHJldC5wdXNoKGtleSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBmcmVlemUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGZyZWV6ZSA9IF8uZnJlZXplID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogU2hvcnRjdXQgZm9yIE9iamVjdC5mcmVlemUuCiAgICAgICAgICoKICAgICAgICAgKiBVc2UgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgaWYgT2JqZWN0LmZyZWV6ZSBpcyBub3Qgc3VwcG9ydGVkLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8b2JqICAgfE9iamVjdCB0byBmcmVlemV8CiAgICAgICAgICogfHJldHVybnxPYmplY3QgcGFzc2VkIGlufAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3QgYSA9IHtiOiAxfTsKICAgICAgICAgKiBmcmVlemUoYSk7CiAgICAgICAgICogYS5iID0gMjsKICAgICAgICAgKiBjb25zb2xlLmxvZyhhKTsgLy8gLT4ge2I6IDF9CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBmcmVlemU8VD4ob2JqOiBUKTogVDsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICoga2V5cyAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkgcmV0dXJuIE9iamVjdC5mcmVlemUob2JqKTsKICAgICAgICAgICAga2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24ocHJvcCkgewogICAgICAgICAgICAgICAgaWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCkuY29uZmlndXJhYmxlKSByZXR1cm47CiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wLCB7CiAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaXNCb29sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBpc0Jvb2wgPSBfLmlzQm9vbCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENoZWNrIGlmIHZhbHVlIGlzIGEgYm9vbGVhbiBwcmltaXRpdmUuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbCAgIHxWYWx1ZSB0byBjaGVjayAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgdmFsdWUgaXMgYSBib29sZWFufAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNCb29sKHRydWUpOyAvLyAtPiB0cnVlCiAgICAgICAgICogaXNCb29sKGZhbHNlKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqIGlzQm9vbCgxKTsgLy8gLT4gZmFsc2UKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGlzQm9vbCh2YWw6IGFueSk6IGJvb2xlYW47CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICByZXR1cm4gdmFsID09PSB0cnVlIHx8IHZhbCA9PT0gZmFsc2U7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGFmdGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5hZnRlciA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENyZWF0ZSBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBvbmNlIGl0J3MgY2FsbGVkIG4gb3IgbW9yZSB0aW1lcy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxuICAgICB8TnVtYmVyIG9mIGNhbGxzIGJlZm9yZSBpbnZva2VkfAogICAgICAgICAqIHxmbiAgICB8RnVuY3Rpb24gdG8gcmVzdHJpY3QgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58TmV3IHJlc3RyaWN0ZWQgZnVuY3Rpb24gICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3QgZm4gPSBhZnRlcig1LCBmdW5jdGlvbigpIHsKICAgICAgICAgKiAgICAgLy8gLT4gT25seSBpbnZva2UgYWZ0ZXIgZm4gaXMgY2FsbGVkIDUgdGltZXMuCiAgICAgICAgICogfSk7CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhZnRlcihuOiBudW1iZXIsIGZuOiBGdW5jdGlvbik6IEZ1bmN0aW9uOwogICAgICAgICAqLwogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihuLCBmbikgewogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoLS1uIDwgMSkgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgIH07CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGJhc2U2NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgYmFzZTY0ID0gXy5iYXNlNjQgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBCYXNpYyBiYXNlNjQgZW5jb2RpbmcgYW5kIGRlY29kaW5nLgogICAgICAgICAqCiAgICAgICAgICogIyMjIGVuY29kZQogICAgICAgICAqCiAgICAgICAgICogVHVybiBhIGJ5dGUgYXJyYXkgaW50byBhIGJhc2U2NCBzdHJpbmcuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxieXRlcyB8Qnl0ZSBhcnJheSAgIHwKICAgICAgICAgKiB8cmV0dXJufEJhc2U2NCBzdHJpbmd8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgZGVjb2RlCiAgICAgICAgICoKICAgICAgICAgKiBUdXJuIGEgYmFzZTY0IHN0cmluZyBpbnRvIGEgYnl0ZSBhcnJheS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHN0ciAgIHxCYXNlNjQgc3RyaW5nfAogICAgICAgICAqIHxyZXR1cm58Qnl0ZSBhcnJheSAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGJhc2U2NC5lbmNvZGUoWzE2OCwgMTc0LCAxNTUsIDI1NV0pOyAvLyAtPiAncUs2Yi93PT0nCiAgICAgICAgICogYmFzZTY0LmRlY29kZSgncUs2Yi93PT0nKTsgLy8gLT4gWzE2OCwgMTc0LCAxNTUsIDI1NV0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGNvbnN0IGJhc2U2NDogewogICAgICAgICAqICAgICBlbmNvZGUoYnl0ZXM6IG51bWJlcltdKTogc3RyaW5nOwogICAgICAgICAqICAgICBkZWNvZGUoc3RyOiBzdHJpbmcpOiBudW1iZXJbXTsKICAgICAgICAgKiB9OwogICAgICAgICAqLwogICAgICAgIGV4cG9ydHMgPSB7CiAgICAgICAgICAgIGVuY29kZTogZnVuY3Rpb24oYnl0ZXMpIHsKICAgICAgICAgICAgICAgIHZhciByZXQgPSBbXTsKICAgICAgICAgICAgICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGg7CiAgICAgICAgICAgICAgICB2YXIgcmVtYWluID0gbGVuICUgMzsKICAgICAgICAgICAgICAgIGxlbiA9IGxlbiAtIHJlbWFpbjsKCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAzKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goCiAgICAgICAgICAgICAgICAgICAgICAgIG51bVRvQmFzZTY0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGVzW2ldIDw8IDE2KSArIChieXRlc1tpICsgMV0gPDwgOCkgKyBieXRlc1tpICsgMl0KICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbGVuID0gYnl0ZXMubGVuZ3RoOwogICAgICAgICAgICAgICAgdmFyIHRtcDsKCiAgICAgICAgICAgICAgICBpZiAocmVtYWluID09PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgdG1wID0gYnl0ZXNbbGVuIC0gMV07CiAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goY29kZVt0bXAgPj4gMl0pOwogICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKGNvZGVbKHRtcCA8PCA0KSAmIDB4M2ZdKTsKICAgICAgICAgICAgICAgICAgICByZXQucHVzaCgnPT0nKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVtYWluID09PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgdG1wID0gKGJ5dGVzW2xlbiAtIDJdIDw8IDgpICsgYnl0ZXNbbGVuIC0gMV07CiAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goY29kZVt0bXAgPj4gMTBdKTsKICAgICAgICAgICAgICAgICAgICByZXQucHVzaChjb2RlWyh0bXAgPj4gNCkgJiAweDNmXSk7CiAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goY29kZVsodG1wIDw8IDIpICYgMHgzZl0pOwogICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKCc9Jyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHJldC5qb2luKCcnKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGVjb2RlOiBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgICAgIHZhciBsZW4gPSBzdHIubGVuZ3RoLAogICAgICAgICAgICAgICAgICAgIHJlbWFpbiA9IDA7CiAgICAgICAgICAgICAgICBpZiAoc3RyW2xlbiAtIDJdID09PSAnPScpIHJlbWFpbiA9IDI7CiAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHJbbGVuIC0gMV0gPT09ICc9JykgcmVtYWluID0gMTsKICAgICAgICAgICAgICAgIHZhciByZXQgPSBuZXcgQXJyYXkoKGxlbiAqIDMpIC8gNCAtIHJlbWFpbik7CiAgICAgICAgICAgICAgICBsZW4gPSByZW1haW4gPiAwID8gbGVuIC0gNCA6IGxlbjsKICAgICAgICAgICAgICAgIHZhciBpLCBqOwoKICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbGVuOyBpICs9IDQpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0gYmFzZTY0VG9OdW0oc3RyW2ldLCBzdHJbaSArIDFdLCBzdHJbaSArIDJdLCBzdHJbaSArIDNdKTsKICAgICAgICAgICAgICAgICAgICByZXRbaisrXSA9IChudW0gPj4gMTYpICYgMHhmZjsKICAgICAgICAgICAgICAgICAgICByZXRbaisrXSA9IChudW0gPj4gOCkgJiAweGZmOwogICAgICAgICAgICAgICAgICAgIHJldFtqKytdID0gbnVtICYgMHhmZjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgdG1wOwoKICAgICAgICAgICAgICAgIGlmIChyZW1haW4gPT09IDIpIHsKICAgICAgICAgICAgICAgICAgICB0bXAgPQogICAgICAgICAgICAgICAgICAgICAgICAoY29kZU1hcFtzdHIuY2hhckNvZGVBdChpKV0gPDwgMikgfAogICAgICAgICAgICAgICAgICAgICAgICAoY29kZU1hcFtzdHIuY2hhckNvZGVBdChpICsgMSldID4+IDQpOwogICAgICAgICAgICAgICAgICAgIHJldFtqKytdID0gdG1wICYgMHhmZjsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVtYWluID09PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgdG1wID0KICAgICAgICAgICAgICAgICAgICAgICAgKGNvZGVNYXBbc3RyLmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8CiAgICAgICAgICAgICAgICAgICAgICAgIChjb2RlTWFwW3N0ci5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfAogICAgICAgICAgICAgICAgICAgICAgICAoY29kZU1hcFtzdHIuY2hhckNvZGVBdChpICsgMildID4+IDIpOwogICAgICAgICAgICAgICAgICAgIHJldFtqKytdID0gKHRtcCA+PiA4KSAmIDB4ZmY7CiAgICAgICAgICAgICAgICAgICAgcmV0W2orK10gPSB0bXAgJiAweGZmOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIHZhciBjb2RlTWFwID0gW107CiAgICAgICAgdmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7CgogICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgIGNvZGVNYXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBudW1Ub0Jhc2U2NChudW0pIHsKICAgICAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgICAgIGNvZGVbKG51bSA+PiAxOCkgJiAweDNmXSArCiAgICAgICAgICAgICAgICBjb2RlWyhudW0gPj4gMTIpICYgMHgzZl0gKwogICAgICAgICAgICAgICAgY29kZVsobnVtID4+IDYpICYgMHgzZl0gKwogICAgICAgICAgICAgICAgY29kZVtudW0gJiAweDNmXQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gYmFzZTY0VG9OdW0oc3RyMSwgc3RyMiwgc3RyMywgc3RyNCkgewogICAgICAgICAgICByZXR1cm4gKAogICAgICAgICAgICAgICAgKGNvZGVNYXBbc3RyMS5jaGFyQ29kZUF0KDApXSA8PCAxOCkgfAogICAgICAgICAgICAgICAgKGNvZGVNYXBbc3RyMi5jaGFyQ29kZUF0KDApXSA8PCAxMikgfAogICAgICAgICAgICAgICAgKGNvZGVNYXBbc3RyMy5jaGFyQ29kZUF0KDApXSA8PCA2KSB8CiAgICAgICAgICAgICAgICBjb2RlTWFwW3N0cjQuY2hhckNvZGVBdCgwKV0KICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBhdmVyYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5hdmVyYWdlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogR2V0IGF2ZXJhZ2UgdmFsdWUgb2YgZ2l2ZW4gbnVtYmVycy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8Li4ubnVtfE51bWJlcnMgdG8gY2FsY3VsYXRlfAogICAgICAgICAqIHxyZXR1cm58QXZlcmFnZSB2YWx1ZSAgICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBhdmVyYWdlKDUsIDMsIDEpOyAvLyAtPiAzCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhdmVyYWdlKC4uLm51bTogbnVtYmVyW10pOiBudW1iZXI7CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgYXJyID0gYXJndW1lbnRzOwogICAgICAgICAgICB2YXIgc3VtID0gMDsKICAgICAgICAgICAgdmFyIGxlbiA9IGFyci5sZW5ndGg7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICBzdW0gKz0gYXJyW2ldOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gc3VtIC8gbGVuOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBiZWZvcmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGJlZm9yZSA9IF8uYmVmb3JlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ3JlYXRlIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGxlc3MgdGhhbiBuIHRpbWVzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG4gICAgIHxOdW1iZXIgb2YgY2FsbHMgYXQgd2hpY2ggZm4gaXMgbm8gbG9uZ2VyIGludm9rZWR8CiAgICAgICAgICogfGZuICAgIHxGdW5jdGlvbiB0byByZXN0cmljdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxOZXcgcmVzdHJpY3RlZCBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICoKICAgICAgICAgKiBTdWJzZXF1ZW50IGNhbGxzIHRvIHRoZSBjcmVhdGVkIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGZuIGludm9jYXRpb24uCiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBmbiA9IGJlZm9yZSg1LCBmdW5jdGlvbigpIHt9KTsKICAgICAgICAgKiBmbigpOyAvLyBBbGxvdyBmdW5jdGlvbiB0byBiZSBjYWxsIDQgdGltZXMgYXQgbGFzdC4KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGJlZm9yZShuOiBudW1iZXIsIGZuOiBGdW5jdGlvbik6IEZ1bmN0aW9uOwogICAgICAgICAqLwogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihuLCBmbikgewogICAgICAgICAgICB2YXIgbWVtbzsKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKC0tbiA+IDApIG1lbW8gPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgICAgICAgICAgaWYgKG4gPD0gMSkgZm4gPSBudWxsOwogICAgICAgICAgICAgICAgcmV0dXJuIG1lbW87CiAgICAgICAgICAgIH07CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGJpbmFyeVNlYXJjaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uYmluYXJ5U2VhcmNoID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQmluYXJ5IHNlYXJjaCBpbXBsZW1lbnRhdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGFycmF5IHxTb3J0ZWQgYXJyYXkgfAogICAgICAgICAqIHx2YWwgICB8VmFsdWUgdG8gc2Vla3wKICAgICAgICAgKiB8Y21wICAgfENvbXBhcmF0b3IgICB8CiAgICAgICAgICogfHJldHVybnxWYWx1ZSBpbmRleCAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogYmluYXJ5U2VhcmNoKFsxLCAyLCAzXSwgMik7IC8vIC0+IDEKICAgICAgICAgKiBiaW5hcnlTZWFyY2goWzEsIDJdLCAzKTsgLy8gLT4gLTEKICAgICAgICAgKiBiaW5hcnlTZWFyY2goCiAgICAgICAgICogICAgIFsKICAgICAgICAgKiAgICAgICAgIHsKICAgICAgICAgKiAgICAgICAgICAgICBrZXk6IDEKICAgICAgICAgKiAgICAgICAgIH0sCiAgICAgICAgICogICAgICAgICB7CiAgICAgICAgICogICAgICAgICAgICAga2V5OiAyCiAgICAgICAgICogICAgICAgICB9CiAgICAgICAgICogICAgIF0sCiAgICAgICAgICogICAgIHsga2V5OiAxIH0sCiAgICAgICAgICogICAgIChhLCBiKSA9PiB7CiAgICAgICAgICogICAgICAgICBpZiAoYS5rZXkgPT09IGIua2V5KSByZXR1cm4gMDsKICAgICAgICAgKiAgICAgICAgIHJldHVybiBhLmtleSA8IGIua2V5ID8gLTEgOiAxOwogICAgICAgICAqICAgICB9CiAgICAgICAgICogKTsgLy8gLT4gMAogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYmluYXJ5U2VhcmNoKAogICAgICAgICAqICAgICBhcnJheTogYW55W10sCiAgICAgICAgICogICAgIHZhbDogYW55LAogICAgICAgICAqICAgICBjbXA/OiBGdW5jdGlvbgogICAgICAgICAqICk6IG51bWJlcjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNTb3J0ZWQgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihhcnIsIHZhbCkgewogICAgICAgICAgICB2YXIgY21wID0KICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkCiAgICAgICAgICAgICAgICAgICAgPyBhcmd1bWVudHNbMl0KICAgICAgICAgICAgICAgICAgICA6IGlzU29ydGVkLmRlZkNvbXBhcmF0b3I7CiAgICAgICAgICAgIHZhciBzdGFydElkeCA9IDA7CiAgICAgICAgICAgIHZhciBlbmRJZHggPSBhcnIubGVuZ3RoIC0gMTsKCiAgICAgICAgICAgIHdoaWxlIChzdGFydElkeCA8PSBlbmRJZHgpIHsKICAgICAgICAgICAgICAgIHZhciBtaWRkbGVJZHggPSBzdGFydElkeCArIE1hdGguZmxvb3IoKGVuZElkeCAtIHN0YXJ0SWR4KSAvIDIpOwogICAgICAgICAgICAgICAgdmFyIG1pZGRsZVZhbCA9IGFyclttaWRkbGVJZHhdOwoKICAgICAgICAgICAgICAgIGlmIChjbXAobWlkZGxlVmFsLCB2YWwpID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1pZGRsZUlkeDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoY21wKG1pZGRsZVZhbCwgdmFsKSA8IDApIHsKICAgICAgICAgICAgICAgICAgICBzdGFydElkeCA9IG1pZGRsZUlkeCArIDE7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGVuZElkeCA9IG1pZGRsZUlkeCAtIDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcmVzdEFyZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIHJlc3RBcmdzID0gXy5yZXN0QXJncyA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFRoaXMgYWNjdW11bGF0ZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byBhbiBhcnJheSwgYWZ0ZXIgYSBnaXZlbiBpbmRleC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGZ1bmN0aW9uICB8RnVuY3Rpb24gdGhhdCBuZWVkcyByZXN0IHBhcmFtZXRlcnMgICAgfAogICAgICAgICAqIHxzdGFydEluZGV4fFRoZSBzdGFydCBpbmRleCB0byBhY2N1bXVsYXRlcyAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJuICAgIHxHZW5lcmF0ZWQgZnVuY3Rpb24gd2l0aCByZXN0IHBhcmFtZXRlcnN8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBwYXJhbUFyciA9IHJlc3RBcmdzKGZ1bmN0aW9uIChyZXN0KSB7IHJldHVybiByZXN0IH0pOwogICAgICAgICAqIHBhcmFtQXJyKDEsIDIsIDMsIDQpOyAvLyAtPiBbMSwgMiwgMywgNF0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlc3RBcmdzKGZuOiBGdW5jdGlvbiwgc3RhcnRJbmRleD86IG51bWJlcik6IEZ1bmN0aW9uOwogICAgICAgICAqLwogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihmbiwgc3RhcnRJZHgpIHsKICAgICAgICAgICAgc3RhcnRJZHggPSBzdGFydElkeCA9PSBudWxsID8gZm4ubGVuZ3RoIC0gMSA6ICtzdGFydElkeDsKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGxlbiA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydElkeCwgMCk7CiAgICAgICAgICAgICAgICB2YXIgcmVzdCA9IG5ldyBBcnJheShsZW4pOwogICAgICAgICAgICAgICAgdmFyIGk7CgogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdFtpXSA9IGFyZ3VtZW50c1tpICsgc3RhcnRJZHhdOwogICAgICAgICAgICAgICAgfSAvLyBDYWxsIHJ1bnMgZmFzdGVyIHRoYW4gYXBwbHkuCgogICAgICAgICAgICAgICAgc3dpdGNoIChzdGFydElkeCkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgcmVzdCk7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCByZXN0KTsKCiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSwgcmVzdCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoc3RhcnRJZHggKyAxKTsKCiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RhcnRJZHg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYXJnc1tzdGFydElkeF0gPSByZXN0OwogICAgICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3MpOwogICAgICAgICAgICB9OwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBiaW5kIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBiaW5kID0gXy5iaW5kID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ3JlYXRlIGEgZnVuY3Rpb24gYm91bmQgdG8gYSBnaXZlbiBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgIHxEZXNjICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxmbiAgICAgfEZ1bmN0aW9uIHRvIGJpbmQgICAgICAgIHwKICAgICAgICAgKiB8Y3R4ICAgIHxUaGlzIGJpbmRpbmcgb2YgZ2l2ZW4gZm58CiAgICAgICAgICogfC4uLnJlc3R8T3B0aW9uYWwgYXJndW1lbnRzICAgICAgfAogICAgICAgICAqIHxyZXR1cm4gfE5ldyBib3VuZCBmdW5jdGlvbiAgICAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnN0IGZuID0gYmluZChmdW5jdGlvbiAobXNnKSB7CiAgICAgICAgICogICAgIGNvbnNvbGUubG9nKHRoaXMubmFtZSArICc6JyArIG1zZyk7CiAgICAgICAgICogfSwge25hbWU6ICdldXN0aWEnfSwgJ0kgYW0gYSB1dGlsaXR5IGxpYnJhcnkuJyk7CiAgICAgICAgICogZm4oKTsgLy8gLT4gJ2V1c3RpYTogSSBhbSBhIHV0aWxpdHkgbGlicmFyeS4nCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBiaW5kKGZuOiBGdW5jdGlvbiwgY3R4OiBhbnksIC4uLnJlc3Q6IGFueVtdKTogRnVuY3Rpb247CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHJlc3RBcmdzIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gcmVzdEFyZ3MoZnVuY3Rpb24oZm4sIGN0eCwgcmVzdCkgewogICAgICAgICAgICByZXR1cm4gcmVzdEFyZ3MoZnVuY3Rpb24oY2FsbEFyZ3MpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShjdHgsIHJlc3QuY29uY2F0KGNhbGxBcmdzKSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYnViYmxlU29ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uYnViYmxlU29ydCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEJ1YmJsZSBzb3J0IGltcGxlbWVudGF0aW9uLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8YXJyICAgfEFycmF5IHRvIHNvcnR8CiAgICAgICAgICogfGNtcCAgIHxDb21wYXJhdG9yICAgfAogICAgICAgICAqIHxyZXR1cm58U29ydGVkIGFycmF5IHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGJ1YmJsZVNvcnQoWzIsIDFdKTsgLy8gLT4gWzEsIDJdCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBidWJibGVTb3J0KGFycjogYW55W10sIGNtcD86IEZ1bmN0aW9uKTogYW55W107CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHN3YXAgaXNTb3J0ZWQgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihhcnIpIHsKICAgICAgICAgICAgdmFyIGNtcCA9CiAgICAgICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZAogICAgICAgICAgICAgICAgICAgID8gYXJndW1lbnRzWzFdCiAgICAgICAgICAgICAgICAgICAgOiBpc1NvcnRlZC5kZWZDb21wYXJhdG9yOwoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPiAwOyBqLS0pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY21wKGFycltqXSwgYXJyW2ogLSAxXSkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN3YXAoYXJyLCBqLCBqIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gYXJyOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBieXRlc1RvV29yZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGJ5dGVzVG9Xb3JkcyA9IF8uYnl0ZXNUb1dvcmRzID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ29udmVydCBieXRlcyB0byAzMi1iaXQgd29yZHMuCiAgICAgICAgICoKICAgICAgICAgKiBVc2VmdWwgd2hlbiB1c2luZyBDcnlwdG9KUy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS18CiAgICAgICAgICogfGJ5dGVzIHxCeXRlIGFycmF5fAogICAgICAgICAqIHxyZXR1cm58V29yZCBhcnJheXwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGJ5dGVzVG9Xb3JkcyhbMHgxMiwgMHgzNCwgMHg1NiwgMHg3OF0pOyAvLyAtPiBbMHgxMjM0NTY3OF0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGJ5dGVzVG9Xb3JkcyhieXRlczogbnVtYmVyW10pOiBudW1iZXJbXTsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oYnl0ZXMpIHsKICAgICAgICAgICAgdmFyIHdvcmRzID0gW107CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYnl0ZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDJdIHw9IGJ5dGVzW2ldIDw8ICgyNCAtIChpICUgNCkgKiA4KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHdvcmRzOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjYWxsYmFja2lmeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgY2FsbGJhY2tpZnkgPSBfLmNhbGxiYWNraWZ5ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ29udmVydCBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIFByb21pc2UgdG8gYSBmdW5jdGlvbiBmb2xsb3dpbmcgdGhlIGVycm9yLWZpcnN0IGNhbGxiYWNrIHN0eWxlLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGZuICAgIHxGdW5jdGlvbiB0aGF0IHJldHVybnMgYSBQcm9taXNlICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxGdW5jdGlvbiBmb2xsb3dpbmcgdGhlIGVycm9yLWZpc3QgY2FsbGJhY2sgc3R5bGV8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBmdW5jdGlvbiBmbigpIHsKICAgICAgICAgKiAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgKiAgICAgICAgIC8vIC4uLgogICAgICAgICAqICAgICB9KTsKICAgICAgICAgKiB9CiAgICAgICAgICoKICAgICAgICAgKiBjb25zdCBjYkZuID0gY2FsbGJhY2tpZnkoZm4pOwogICAgICAgICAqCiAgICAgICAgICogY2JGbihmdW5jdGlvbiAoZXJyLCB2YWx1ZSkgewogICAgICAgICAqICAgICAvLyAuLi4KICAgICAgICAgKiB9KTsKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNhbGxiYWNraWZ5KGZuOiBGdW5jdGlvbik6IEZ1bmN0aW9uOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiByZXN0QXJncyAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGZuKSB7CiAgICAgICAgICAgIHJldHVybiByZXN0QXJncyhmdW5jdGlvbihhcmdzKSB7CiAgICAgICAgICAgICAgICB2YXIgY2IgPSBhcmdzLnBvcCgpOwogICAgICAgICAgICAgICAgZm4uYXBwbHkodGhpcywgYXJncykudGhlbigKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICBjYihudWxsLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA9PT0gbnVsbCkgZXJyID0gbmV3IEVycm9yKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNiKGVycik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNwbGl0Q2FzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgc3BsaXRDYXNlID0gXy5zcGxpdENhc2UgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBTcGxpdCBkaWZmZXJlbnQgc3RyaW5nIGNhc2UgdG8gYW4gYXJyYXkuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8c3RyICAgfFN0cmluZyB0byBzcGxpdHwKICAgICAgICAgKiB8cmV0dXJufFJlc3VsdCBhcnJheSAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHNwbGl0Q2FzZSgnZm9vLWJhcicpOyAvLyAtPiBbJ2ZvbycsICdiYXInXQogICAgICAgICAqIHNwbGl0Q2FzZSgnZm9vIGJhcicpOyAvLyAtPiBbJ2ZvbycsICdiYXInXQogICAgICAgICAqIHNwbGl0Q2FzZSgnZm9vX2JhcicpOyAvLyAtPiBbJ2ZvbycsICdiYXInXQogICAgICAgICAqIHNwbGl0Q2FzZSgnZm9vLmJhcicpOyAvLyAtPiBbJ2ZvbycsICdiYXInXQogICAgICAgICAqIHNwbGl0Q2FzZSgnZm9vQmFyJyk7IC8vIC0+IFsnZm9vJywgJ2JhciddCiAgICAgICAgICogc3BsaXRDYXNlKCdmb28tQmFyJyk7IC8vIC0+IFsnZm9vJywgJ2JhciddCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzcGxpdENhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmdbXTsKICAgICAgICAgKi8KICAgICAgICB2YXIgcmVnVXBwZXJDYXNlID0gLyhbQS1aXSkvZzsKICAgICAgICB2YXIgcmVnU2VwYXJhdG9yID0gL1tfLlwtIF0rL2c7CiAgICAgICAgdmFyIHJlZ1RyaW0gPSAvKF4tKXwoLSQpL2c7CgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgc3RyID0gc3RyCiAgICAgICAgICAgICAgICAucmVwbGFjZShyZWdVcHBlckNhc2UsICctJDEnKQogICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKCkKICAgICAgICAgICAgICAgIC5yZXBsYWNlKHJlZ1NlcGFyYXRvciwgJy0nKQogICAgICAgICAgICAgICAgLnJlcGxhY2UocmVnVHJpbSwgJycpOwogICAgICAgICAgICByZXR1cm4gc3RyLnNwbGl0KCctJyk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNhbWVsQ2FzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgY2FtZWxDYXNlID0gXy5jYW1lbENhc2UgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDb252ZXJ0IHN0cmluZyB0byAiY2FtZWxDYXNlIi4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHIgICB8U3RyaW5nIHRvIGNvbnZlcnQgfAogICAgICAgICAqIHxyZXR1cm58Q2FtZWwgY2FzZWQgc3RyaW5nfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY2FtZWxDYXNlKCdmb28tYmFyJyk7IC8vIC0+IGZvb0JhcgogICAgICAgICAqIGNhbWVsQ2FzZSgnZm9vIGJhcicpOyAvLyAtPiBmb29CYXIKICAgICAgICAgKiBjYW1lbENhc2UoJ2Zvb19iYXInKTsgLy8gLT4gZm9vQmFyCiAgICAgICAgICogY2FtZWxDYXNlKCdmb28uYmFyJyk7IC8vIC0+IGZvb0JhcgogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY2FtZWxDYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBzcGxpdENhc2UgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgdmFyIGFyciA9IHNwbGl0Q2FzZShzdHIpOwogICAgICAgICAgICB2YXIgcmV0ID0gYXJyWzBdOwogICAgICAgICAgICBhcnIuc2hpZnQoKTsKICAgICAgICAgICAgYXJyLmZvckVhY2goY2FwaXRhbGl6ZSwgYXJyKTsKICAgICAgICAgICAgcmV0ICs9IGFyci5qb2luKCcnKTsKICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBjYXBpdGFsaXplKHZhbCwgaWR4KSB7CiAgICAgICAgICAgIHRoaXNbaWR4XSA9IHZhbC5yZXBsYWNlKC9cdy8sIGZ1bmN0aW9uKG1hdGNoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2gudG9VcHBlckNhc2UoKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY2FwaXRhbGl6ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgY2FwaXRhbGl6ZSA9IF8uY2FwaXRhbGl6ZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENvbnZlcnQgdGhlIGZpcnN0IGNoYXJhY3RlciB0byB1cHBlciBjYXNlIGFuZCB0aGUgcmVtYWluaW5nIHRvIGxvd2VyIGNhc2UuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHN0ciAgIHxTdHJpbmcgdG8gY2FwaXRhbGl6ZXwKICAgICAgICAgKiB8cmV0dXJufENhcGl0YWxpemVkIHN0cmluZyAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY2FwaXRhbGl6ZSgnckVEJyk7IC8vIC0+IFJlZAogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHI6IHN0cmluZyk6IHN0cmluZzsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNoYXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmNoYXIgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBSZXR1cm4gc3RyaW5nIHJlcHJlc2VudGluZyBhIGNoYXJhY3RlciB3aG9zZSBVbmljb2RlIGNvZGUgcG9pbnQgaXMgdGhlIGdpdmVuIGludGVnZXIuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG51bSAgIHxJbnRlZ2VyIHRvIGNvbnZlcnQgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFN0cmluZyByZXByZXNlbnRpbmcgY29ycmVzcG9uZGluZyBjaGFyfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY2hhcig2NSk7IC8vIC0+ICdBJwogICAgICAgICAqIGNoYXIoOTcpOyAvLyAtPiAnYScKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNoYXIobnVtOiBudW1iZXIpOiBzdHJpbmc7CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG51bSkgewogICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQobnVtKTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY2h1bmsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmNodW5rID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogU3BsaXQgYXJyYXkgaW50byBncm91cHMgdGhlIGxlbmd0aCBvZiBnaXZlbiBzaXplLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxhcnIgICB8QXJyYXkgdG8gcHJvY2VzcyAgICB8CiAgICAgICAgICogfHNpemU9MXxMZW5ndGggb2YgZWFjaCBjaHVua3wKICAgICAgICAgKiB8cmV0dXJufENodW5rcyBvZiBnaXZlbiBzaXplfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY2h1bmsoWzEsIDIsIDMsIDRdLCAyKTsgLy8gLT4gW1sxLCAyXSwgWzMsIDRdXQogICAgICAgICAqIGNodW5rKFsxLCAyLCAzLCA0XSwgMyk7IC8vIC0+IFtbMSwgMiwgM10sIFs0XV0KICAgICAgICAgKiBjaHVuayhbMSwgMiwgMywgNF0pOyAvLyAtPiBbWzFdLCBbMl0sIFszXSwgWzRdXQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY2h1bmsoYXJyOiBhbnlbXSwgc2l6ZT86IG51bWJlcik6IEFycmF5PGFueVtdPjsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oYXJyLCBzaXplKSB7CiAgICAgICAgICAgIHZhciByZXQgPSBbXTsKICAgICAgICAgICAgc2l6ZSA9IHNpemUgfHwgMTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLmNlaWwoYXJyLmxlbmd0aCAvIHNpemUpOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IGkgKiBzaXplOwogICAgICAgICAgICAgICAgdmFyIGVuZCA9IHN0YXJ0ICsgc2l6ZTsKICAgICAgICAgICAgICAgIHJldC5wdXNoKGFyci5zbGljZShzdGFydCwgZW5kKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1heCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgbWF4ID0gXy5tYXggPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBHZXQgbWF4aW11bSB2YWx1ZSBvZiBnaXZlbiBudW1iZXJzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHwuLi5udW18TnVtYmVycyB0byBjYWxjdWxhdGV8CiAgICAgICAgICogfHJldHVybnxNYXhpbXVtIHZhbHVlICAgICAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIG1heCgyLjMsIDEsIDQuNSwgMik7IC8vIDQuNQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbWF4KC4uLm51bTogbnVtYmVyW10pOiBudW1iZXI7CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgYXJyID0gYXJndW1lbnRzOwogICAgICAgICAgICB2YXIgcmV0ID0gYXJyWzBdOwoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDEsIGxlbiA9IGFyci5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgaWYgKGFycltpXSA+IHJldCkgcmV0ID0gYXJyW2ldOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjb21iaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5jb21iaW5lID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ3JlYXRlIGFuIGFycmF5IGJ5IHVzaW5nIG9uZSBhcnJheSBmb3Iga2V5cyBhbmQgYW5vdGhlciBmb3IgaXRzIHZhbHVlcy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8a2V5cyAgfEtleXMgdG8gYmUgdXNlZCAgfAogICAgICAgICAqIHx2YWx1ZXN8VmFsdWVzIHRvIGJlIHVzZWR8CiAgICAgICAgICogfHJldHVybnxDcmVhdGVkIG9iamVjdCAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbWJpbmUoWydhJywgJ2InLCAnYyddLCBbMSwgMiwgM10pOyAvLyAtPiB7YTogMSwgYjogMiwgYzogM30KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNvbWJpbmUoa2V5czogc3RyaW5nW10sIHZhbHVlczogYW55W10pOiBhbnk7CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGtleXMsIHZhbHVlcykgewogICAgICAgICAgICB2YXIgcmV0ID0ge307CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0ga2V5cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgcmV0W2tleXNbaV1dID0gdmFsdWVzW2ldOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjb21wb3NlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5jb21wb3NlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ29tcG9zZSBhIGxpc3Qgb2YgZnVuY3Rpb25zLgogICAgICAgICAqCiAgICAgICAgICogRWFjaCBmdW5jdGlvbiBjb25zdW1lcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0IGZvbGxvd3MuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfC4uLmZuIHxGdW5jdGlvbnMgdG8gY29tcG9zZXwKICAgICAgICAgKiB8cmV0dXJufENvbXBvc2VkIGZ1bmN0aW9uICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3Qgd2VsY29tZSA9IGNvbXBvc2UoZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgICAgKiAgICAgcmV0dXJuICdoaTogJyArIG5hbWU7CiAgICAgICAgICogfSwgZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgICAgKiAgICAgcmV0dXJuIG5hbWUudG9VcHBlckNhc2UoKSArICchJzsKICAgICAgICAgKiB9KTsKICAgICAgICAgKgogICAgICAgICAqIHdlbGNvbWUoJ2xpY2lhJyk7IC8vIC0+ICdoaTogTElDSUEhJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY29tcG9zZSguLi5mbjogRnVuY3Rpb25bXSk6IEZ1bmN0aW9uOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiByZXN0QXJncyAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IHJlc3RBcmdzKGZ1bmN0aW9uKGZuTGlzdCkgewogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgaSA9IGZuTGlzdC5sZW5ndGggLSAxOwogICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGZuTGlzdFtpXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwoKICAgICAgICAgICAgICAgIHdoaWxlIChpLS0pIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmbkxpc3RbaV0uY2FsbCh0aGlzLCByZXN1bHQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpZHhPZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgaWR4T2YgPSBfLmlkeE9mID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogR2V0IHRoZSBpbmRleCBhdCB3aGljaCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB2YWx1ZS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICB8RGVzYyAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8YXJyICAgICAgfEFycmF5IHRvIHNlYXJjaCAgICAgfAogICAgICAgICAqIHx2YWwgICAgICB8VmFsdWUgdG8gc2VhcmNoIGZvciB8CiAgICAgICAgICogfGZyb21JZHg9MHxJbmRleCB0byBzZWFyY2ggZnJvbXwKICAgICAgICAgKiB8cmV0dXJuICAgfFZhbHVlIGluZGV4ICAgICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaWR4T2YoWzEsIDIsIDEsIDJdLCAyLCAyKTsgLy8gLT4gMwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaWR4T2YoYXJyOiBhbnlbXSwgdmFsOiBhbnksIGZyb21JZHg/OiBudW1iZXIpOiBudW1iZXI7CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGFyciwgdmFsLCBmcm9tSWR4KSB7CiAgICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGFyciwgdmFsLCBmcm9tSWR4KTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY29udmVydEJhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmNvbnZlcnRCYXNlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ29udmVydCBiYXNlIG9mIGEgbnVtYmVyLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxudW0gICB8TnVtYmVyIHRvIGNvbnZlcnR8CiAgICAgICAgICogfGZyb20gIHxCYXNlIGZyb20gICAgICAgIHwKICAgICAgICAgKiB8dG8gICAgfEJhc2UgdG8gICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58Q29udmVydGVkIG51bWJlciB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb252ZXJ0QmFzZSgnMTAnLCAyLCAxMCk7IC8vIC0+ICcyJwogICAgICAgICAqIGNvbnZlcnRCYXNlKCdmZicsIDE2LCAyKTsgLy8gLT4gJzExMTExMTExJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY29udmVydEJhc2UoCiAgICAgICAgICogICAgIG51bTogbnVtYmVyIHwgc3RyaW5nLAogICAgICAgICAqICAgICBmcm9tOiBudW1iZXIsCiAgICAgICAgICogICAgIHRvOiBudW1iZXIKICAgICAgICAgKiApOiBzdHJpbmc7CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG51bSwgZnJvbSwgdG8pIHsKICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG51bSwgZnJvbSkudG9TdHJpbmcodG8pOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjcmVhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGNyZWF0ZSA9IF8uY3JlYXRlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ3JlYXRlIG5ldyBvYmplY3QgdXNpbmcgZ2l2ZW4gb2JqZWN0IGFzIHByb3RvdHlwZS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8cHJvdG8gfFByb3RvdHlwZSBvZiBuZXcgb2JqZWN0fAogICAgICAgICAqIHxyZXR1cm58Q3JlYXRlZCBvYmplY3QgICAgICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBvYmogPSBjcmVhdGUoeyBhOiAxIH0pOwogICAgICAgICAqIGNvbnNvbGUubG9nKG9iai5hKTsgLy8gLT4gMQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlKHByb3RvPzogb2JqZWN0KTogYW55OwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBpc09iaiAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHByb3RvKSB7CiAgICAgICAgICAgIGlmICghaXNPYmoocHJvdG8pKSByZXR1cm4ge307CiAgICAgICAgICAgIGlmIChvYmpDcmVhdGUpIHJldHVybiBvYmpDcmVhdGUocHJvdG8pOwoKICAgICAgICAgICAgZnVuY3Rpb24gbm9vcCgpIHt9CgogICAgICAgICAgICBub29wLnByb3RvdHlwZSA9IHByb3RvOwogICAgICAgICAgICByZXR1cm4gbmV3IG5vb3AoKTsKICAgICAgICB9OwoKICAgICAgICB2YXIgb2JqQ3JlYXRlID0gT2JqZWN0LmNyZWF0ZTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGluaGVyaXRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBpbmhlcml0cyA9IF8uaW5oZXJpdHMgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXIuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICAgIHxEZXNjICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwKICAgICAgICAgKiB8Q2xhc3MgICAgIHxDaGlsZCBDbGFzc3wKICAgICAgICAgKiB8U3VwZXJDbGFzc3xTdXBlciBDbGFzc3wKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGZ1bmN0aW9uIFBlb3BsZShuYW1lKSB7CiAgICAgICAgICogICAgIHRoaXMuX25hbWUgPSBuYW1lOwogICAgICAgICAqIH0KICAgICAgICAgKiBQZW9wbGUucHJvdG90eXBlID0gewogICAgICAgICAqICAgICBnZXROYW1lOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICogICAgICAgICByZXR1cm4gdGhpcy5fbmFtZTsKICAgICAgICAgKiAgICAgfQogICAgICAgICAqIH07CiAgICAgICAgICogZnVuY3Rpb24gU3R1ZGVudChuYW1lKSB7CiAgICAgICAgICogICAgIHRoaXMuX25hbWUgPSBuYW1lOwogICAgICAgICAqIH0KICAgICAgICAgKiBpbmhlcml0cyhTdHVkZW50LCBQZW9wbGUpOwogICAgICAgICAqIGNvbnN0IHMgPSBuZXcgU3R1ZGVudCgnUmVkSG9vZCcpOwogICAgICAgICAqIHMuZ2V0TmFtZSgpOyAvLyAtPiAnUmVkSG9vZCcKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGluaGVyaXRzKENsYXNzOiBGdW5jdGlvbiwgU3VwZXJDbGFzczogRnVuY3Rpb24pOiB2b2lkOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBjcmVhdGUgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihDbGFzcywgU3VwZXJDbGFzcykgewogICAgICAgICAgICBDbGFzcy5wcm90b3R5cGUgPSBjcmVhdGUoU3VwZXJDbGFzcy5wcm90b3R5cGUpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSByZXBlYXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIHJlcGVhdCA9IF8ucmVwZWF0ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogUmVwZWF0IHN0cmluZyBuLXRpbWVzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8c3RyICAgfFN0cmluZyB0byByZXBlYXR8CiAgICAgICAgICogfG4gICAgIHxSZXBlYXQgdGltZXMgICAgfAogICAgICAgICAqIHxyZXR1cm58UmVwZWF0ZWQgc3RyaW5nIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHJlcGVhdCgnYScsIDMpOyAvLyAtPiAnYWFhJwogICAgICAgICAqIHJlcGVhdCgnYWInLCAyKTsgLy8gLT4gJ2FiYWInCiAgICAgICAgICogcmVwZWF0KCcqJywgMCk7IC8vIC0+ICcnCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByZXBlYXQoc3RyOiBzdHJpbmcsIG46IG51bWJlcik6IHN0cmluZzsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oc3RyLCBuKSB7CiAgICAgICAgICAgIHZhciByZXQgPSAnJzsKICAgICAgICAgICAgaWYgKG4gPCAxKSByZXR1cm4gJyc7CgogICAgICAgICAgICB3aGlsZSAobiA+IDApIHsKICAgICAgICAgICAgICAgIGlmIChuICYgMSkgcmV0ICs9IHN0cjsKICAgICAgICAgICAgICAgIG4gPj49IDE7CiAgICAgICAgICAgICAgICBzdHIgKz0gc3RyOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB0b1N0ciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgdG9TdHIgPSBfLnRvU3RyID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ29udmVydCB2YWx1ZSB0byBhIHN0cmluZy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbCAgIHxWYWx1ZSB0byBjb252ZXJ0fAogICAgICAgICAqIHxyZXR1cm58UmVzdWx0IHN0cmluZyAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHRvU3RyKG51bGwpOyAvLyAtPiAnJwogICAgICAgICAqIHRvU3RyKDEpOyAvLyAtPiAnMScKICAgICAgICAgKiB0b1N0cihmYWxzZSk7IC8vIC0+ICdmYWxzZScKICAgICAgICAgKiB0b1N0cihbMSwgMiwgM10pOyAvLyAtPiAnMSwyLDMnCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB0b1N0cih2YWw6IGFueSk6IHN0cmluZzsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIHJldHVybiB2YWwgPT0gbnVsbCA/ICcnIDogdmFsLnRvU3RyaW5nKCk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGxvd2VyQ2FzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgbG93ZXJDYXNlID0gXy5sb3dlckNhc2UgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDb252ZXJ0IHN0cmluZyB0byBsb3dlciBjYXNlLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHN0ciAgIHxTdHJpbmcgdG8gY29udmVydCB8CiAgICAgICAgICogfHJldHVybnxMb3dlciBjYXNlZCBzdHJpbmd8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBsb3dlckNhc2UoJ1RFU1QnKTsgLy8gLT4gJ3Rlc3QnCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBsb3dlckNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmc7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHRvU3RyIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgIHJldHVybiB0b1N0cihzdHIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGxwYWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGxwYWQgPSBfLmxwYWQgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBQYWQgc3RyaW5nIG9uIHRoZSBsZWZ0IHNpZGUgaWYgaXQncyBzaG9ydGVyIHRoYW4gbGVuZ3RoLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8c3RyICAgfFN0cmluZyB0byBwYWQgICAgICAgICB8CiAgICAgICAgICogfGxlbiAgIHxQYWRkaW5nIGxlbmd0aCAgICAgICAgfAogICAgICAgICAqIHxjaGFycyB8U3RyaW5nIHVzZWQgYXMgcGFkZGluZ3wKICAgICAgICAgKiB8cmV0dXJufFJlc3VsdCBzdHJpbmcgICAgICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBscGFkKCdhJywgNSk7IC8vIC0+ICcgICAgYScKICAgICAgICAgKiBscGFkKCdhJywgNSwgJy0nKTsgLy8gLT4gJy0tLS1hJwogICAgICAgICAqIGxwYWQoJ2FiYycsIDMsICctJyk7IC8vIC0+ICdhYmMnCiAgICAgICAgICogbHBhZCgnYWJjJywgNSwgJ2FiJyk7IC8vIC0+ICdhYmFiYycKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGxwYWQoc3RyOiBzdHJpbmcsIGxlbjogbnVtYmVyLCBjaGFycz86IHN0cmluZyk6IHN0cmluZzsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogcmVwZWF0IHRvU3RyIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oc3RyLCBsZW4sIGNoYXJzKSB7CiAgICAgICAgICAgIHN0ciA9IHRvU3RyKHN0cik7CiAgICAgICAgICAgIHZhciBzdHJMZW4gPSBzdHIubGVuZ3RoOwogICAgICAgICAgICBjaGFycyA9IGNoYXJzIHx8ICcgJzsKICAgICAgICAgICAgaWYgKHN0ckxlbiA8IGxlbikgc3RyID0gKHJlcGVhdChjaGFycywgbGVuIC0gc3RyTGVuKSArIHN0cikuc2xpY2UoLWxlbik7CiAgICAgICAgICAgIHJldHVybiBzdHI7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGRlYm91bmNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBkZWJvdW5jZSA9IF8uZGVib3VuY2UgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBSZXR1cm4gYSBuZXcgZGVib3VuY2VkIHZlcnNpb24gb2YgdGhlIHBhc3NlZCBmdW5jdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGZuICAgIHxGdW5jdGlvbiB0byBkZWJvdW5jZSAgICAgICAgICAgfAogICAgICAgICAqIHx3YWl0ICB8TnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheXwKICAgICAgICAgKiB8cmV0dXJufE5ldyBkZWJvdW5jZWQgZnVuY3Rpb24gICAgICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBjYWxMYXlvdXQgPSBkZWJvdW5jZShmdW5jdGlvbiAoKSB7fSwgMzAwKTsKICAgICAgICAgKiAvLyAkKHdpbmRvdykucmVzaXplKGNhbExheW91dCk7CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBkZWJvdW5jZShmbjogRnVuY3Rpb24sIHdhaXQ6IG51bWJlcik6IEZ1bmN0aW9uOwogICAgICAgICAqLwogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihmbiwgd2FpdCwgaW1tZWRpYXRlKSB7CiAgICAgICAgICAgIHZhciB0aW1lb3V0OwogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgY3R4ID0gdGhpczsKICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzOwoKICAgICAgICAgICAgICAgIHZhciB0aHJvdHRsZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICBmbi5hcHBseShjdHgsIGFyZ3MpOwogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICBpZiAoIWltbWVkaWF0ZSkgY2xlYXJUaW1lb3V0KHRpbWVvdXQpOwogICAgICAgICAgICAgICAgaWYgKCFpbW1lZGlhdGUgfHwgIXRpbWVvdXQpIHRpbWVvdXQgPSBzZXRUaW1lb3V0KHRocm90dGxlciwgd2FpdCk7CiAgICAgICAgICAgIH07CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGRlYnVyciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uZGVidXJyID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ29udmVydCBMYXRpbi0xIFN1cHBsZW1lbnQgYW5kIExhdGluIEV4dGVuZGVkLUEgbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzIGFuZCByZW1vdmUgY29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8c3RyICAgfFN0cmluZyB0byBkZWJ1cnJ8CiAgICAgICAgICogfHJldHVybnxEZWJ1cnJlZCBzdHJpbmcgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogZGVidXJyKCdkw6lqw6AgdnUnKTsgLy8gLT4gJ2RlamEgdnUnCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBkZWJ1cnIoc3RyOiBzdHJpbmcpOiBzdHJpbmc7CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgICAgICByZXR1cm4gc3RyCiAgICAgICAgICAgICAgICAucmVwbGFjZShyZWdMYXRpbiwgZnVuY3Rpb24oa2V5KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlYnVycmVkTGV0dGVyc1trZXldOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5yZXBsYWNlKHJlZ0NvbWJvTWFyaywgJycpOwogICAgICAgIH07IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvZXMvZGVidXJyLmpzCgogICAgICAgIHZhciByZWdDb21ib01hcmsgPSAvW1x1MDMwMC1cdTAzNmZcdWZlMjAtXHVmZTJmXHUyMGQwLVx1MjBmZl0vZzsKICAgICAgICB2YXIgcmVnTGF0aW4gPSAvW1x4YzAtXHhkNlx4ZDgtXHhmNlx4ZjgtXHhmZlx1MDEwMC1cdTAxN2ZdL2c7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvZXMvX2RlYnVyckxldHRlci5qcwogICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZQoKICAgICAgICB2YXIgZGVidXJyZWRMZXR0ZXJzID0gewogICAgICAgICAgLy8gTGF0aW4tMSBTdXBwbGVtZW50IGJsb2NrLgogICAgICAgICAgJ1x4YzAnOiAnQScsCiAgICAgICAgICAnXHhjMSc6ICdBJywKICAgICAgICAgICdceGMyJzogJ0EnLAogICAgICAgICAgJ1x4YzMnOiAnQScsCiAgICAgICAgICAnXHhjNCc6ICdBJywKICAgICAgICAgICdceGM1JzogJ0EnLAogICAgICAgICAgJ1x4ZTAnOiAnYScsCiAgICAgICAgICAnXHhlMSc6ICdhJywKICAgICAgICAgICdceGUyJzogJ2EnLAogICAgICAgICAgJ1x4ZTMnOiAnYScsCiAgICAgICAgICAnXHhlNCc6ICdhJywKICAgICAgICAgICdceGU1JzogJ2EnLAogICAgICAgICAgJ1x4YzcnOiAnQycsCiAgICAgICAgICAnXHhlNyc6ICdjJywKICAgICAgICAgICdceGQwJzogJ0QnLAogICAgICAgICAgJ1x4ZjAnOiAnZCcsCiAgICAgICAgICAnXHhjOCc6ICdFJywKICAgICAgICAgICdceGM5JzogJ0UnLAogICAgICAgICAgJ1x4Y2EnOiAnRScsCiAgICAgICAgICAnXHhjYic6ICdFJywKICAgICAgICAgICdceGU4JzogJ2UnLAogICAgICAgICAgJ1x4ZTknOiAnZScsCiAgICAgICAgICAnXHhlYSc6ICdlJywKICAgICAgICAgICdceGViJzogJ2UnLAogICAgICAgICAgJ1x4Y2MnOiAnSScsCiAgICAgICAgICAnXHhjZCc6ICdJJywKICAgICAgICAgICdceGNlJzogJ0knLAogICAgICAgICAgJ1x4Y2YnOiAnSScsCiAgICAgICAgICAnXHhlYyc6ICdpJywKICAgICAgICAgICdceGVkJzogJ2knLAogICAgICAgICAgJ1x4ZWUnOiAnaScsCiAgICAgICAgICAnXHhlZic6ICdpJywKICAgICAgICAgICdceGQxJzogJ04nLAogICAgICAgICAgJ1x4ZjEnOiAnbicsCiAgICAgICAgICAnXHhkMic6ICdPJywKICAgICAgICAgICdceGQzJzogJ08nLAogICAgICAgICAgJ1x4ZDQnOiAnTycsCiAgICAgICAgICAnXHhkNSc6ICdPJywKICAgICAgICAgICdceGQ2JzogJ08nLAogICAgICAgICAgJ1x4ZDgnOiAnTycsCiAgICAgICAgICAnXHhmMic6ICdvJywKICAgICAgICAgICdceGYzJzogJ28nLAogICAgICAgICAgJ1x4ZjQnOiAnbycsCiAgICAgICAgICAnXHhmNSc6ICdvJywKICAgICAgICAgICdceGY2JzogJ28nLAogICAgICAgICAgJ1x4ZjgnOiAnbycsCiAgICAgICAgICAnXHhkOSc6ICdVJywKICAgICAgICAgICdceGRhJzogJ1UnLAogICAgICAgICAgJ1x4ZGInOiAnVScsCiAgICAgICAgICAnXHhkYyc6ICdVJywKICAgICAgICAgICdceGY5JzogJ3UnLAogICAgICAgICAgJ1x4ZmEnOiAndScsCiAgICAgICAgICAnXHhmYic6ICd1JywKICAgICAgICAgICdceGZjJzogJ3UnLAogICAgICAgICAgJ1x4ZGQnOiAnWScsCiAgICAgICAgICAnXHhmZCc6ICd5JywKICAgICAgICAgICdceGZmJzogJ3knLAogICAgICAgICAgJ1x4YzYnOiAnQWUnLAogICAgICAgICAgJ1x4ZTYnOiAnYWUnLAogICAgICAgICAgJ1x4ZGUnOiAnVGgnLAogICAgICAgICAgJ1x4ZmUnOiAndGgnLAogICAgICAgICAgJ1x4ZGYnOiAnc3MnLAogICAgICAgICAgLy8gTGF0aW4gRXh0ZW5kZWQtQSBibG9jay4KICAgICAgICAgICdcdTAxMDAnOiAnQScsCiAgICAgICAgICAnXHUwMTAyJzogJ0EnLAogICAgICAgICAgJ1x1MDEwNCc6ICdBJywKICAgICAgICAgICdcdTAxMDEnOiAnYScsCiAgICAgICAgICAnXHUwMTAzJzogJ2EnLAogICAgICAgICAgJ1x1MDEwNSc6ICdhJywKICAgICAgICAgICdcdTAxMDYnOiAnQycsCiAgICAgICAgICAnXHUwMTA4JzogJ0MnLAogICAgICAgICAgJ1x1MDEwYSc6ICdDJywKICAgICAgICAgICdcdTAxMGMnOiAnQycsCiAgICAgICAgICAnXHUwMTA3JzogJ2MnLAogICAgICAgICAgJ1x1MDEwOSc6ICdjJywKICAgICAgICAgICdcdTAxMGInOiAnYycsCiAgICAgICAgICAnXHUwMTBkJzogJ2MnLAogICAgICAgICAgJ1x1MDEwZSc6ICdEJywKICAgICAgICAgICdcdTAxMTAnOiAnRCcsCiAgICAgICAgICAnXHUwMTBmJzogJ2QnLAogICAgICAgICAgJ1x1MDExMSc6ICdkJywKICAgICAgICAgICdcdTAxMTInOiAnRScsCiAgICAgICAgICAnXHUwMTE0JzogJ0UnLAogICAgICAgICAgJ1x1MDExNic6ICdFJywKICAgICAgICAgICdcdTAxMTgnOiAnRScsCiAgICAgICAgICAnXHUwMTFhJzogJ0UnLAogICAgICAgICAgJ1x1MDExMyc6ICdlJywKICAgICAgICAgICdcdTAxMTUnOiAnZScsCiAgICAgICAgICAnXHUwMTE3JzogJ2UnLAogICAgICAgICAgJ1x1MDExOSc6ICdlJywKICAgICAgICAgICdcdTAxMWInOiAnZScsCiAgICAgICAgICAnXHUwMTFjJzogJ0cnLAogICAgICAgICAgJ1x1MDExZSc6ICdHJywKICAgICAgICAgICdcdTAxMjAnOiAnRycsCiAgICAgICAgICAnXHUwMTIyJzogJ0cnLAogICAgICAgICAgJ1x1MDExZCc6ICdnJywKICAgICAgICAgICdcdTAxMWYnOiAnZycsCiAgICAgICAgICAnXHUwMTIxJzogJ2cnLAogICAgICAgICAgJ1x1MDEyMyc6ICdnJywKICAgICAgICAgICdcdTAxMjQnOiAnSCcsCiAgICAgICAgICAnXHUwMTI2JzogJ0gnLAogICAgICAgICAgJ1x1MDEyNSc6ICdoJywKICAgICAgICAgICdcdTAxMjcnOiAnaCcsCiAgICAgICAgICAnXHUwMTI4JzogJ0knLAogICAgICAgICAgJ1x1MDEyYSc6ICdJJywKICAgICAgICAgICdcdTAxMmMnOiAnSScsCiAgICAgICAgICAnXHUwMTJlJzogJ0knLAogICAgICAgICAgJ1x1MDEzMCc6ICdJJywKICAgICAgICAgICdcdTAxMjknOiAnaScsCiAgICAgICAgICAnXHUwMTJiJzogJ2knLAogICAgICAgICAgJ1x1MDEyZCc6ICdpJywKICAgICAgICAgICdcdTAxMmYnOiAnaScsCiAgICAgICAgICAnXHUwMTMxJzogJ2knLAogICAgICAgICAgJ1x1MDEzNCc6ICdKJywKICAgICAgICAgICdcdTAxMzUnOiAnaicsCiAgICAgICAgICAnXHUwMTM2JzogJ0snLAogICAgICAgICAgJ1x1MDEzNyc6ICdrJywKICAgICAgICAgICdcdTAxMzgnOiAnaycsCiAgICAgICAgICAnXHUwMTM5JzogJ0wnLAogICAgICAgICAgJ1x1MDEzYic6ICdMJywKICAgICAgICAgICdcdTAxM2QnOiAnTCcsCiAgICAgICAgICAnXHUwMTNmJzogJ0wnLAogICAgICAgICAgJ1x1MDE0MSc6ICdMJywKICAgICAgICAgICdcdTAxM2EnOiAnbCcsCiAgICAgICAgICAnXHUwMTNjJzogJ2wnLAogICAgICAgICAgJ1x1MDEzZSc6ICdsJywKICAgICAgICAgICdcdTAxNDAnOiAnbCcsCiAgICAgICAgICAnXHUwMTQyJzogJ2wnLAogICAgICAgICAgJ1x1MDE0Myc6ICdOJywKICAgICAgICAgICdcdTAxNDUnOiAnTicsCiAgICAgICAgICAnXHUwMTQ3JzogJ04nLAogICAgICAgICAgJ1x1MDE0YSc6ICdOJywKICAgICAgICAgICdcdTAxNDQnOiAnbicsCiAgICAgICAgICAnXHUwMTQ2JzogJ24nLAogICAgICAgICAgJ1x1MDE0OCc6ICduJywKICAgICAgICAgICdcdTAxNGInOiAnbicsCiAgICAgICAgICAnXHUwMTRjJzogJ08nLAogICAgICAgICAgJ1x1MDE0ZSc6ICdPJywKICAgICAgICAgICdcdTAxNTAnOiAnTycsCiAgICAgICAgICAnXHUwMTRkJzogJ28nLAogICAgICAgICAgJ1x1MDE0Zic6ICdvJywKICAgICAgICAgICdcdTAxNTEnOiAnbycsCiAgICAgICAgICAnXHUwMTU0JzogJ1InLAogICAgICAgICAgJ1x1MDE1Nic6ICdSJywKICAgICAgICAgICdcdTAxNTgnOiAnUicsCiAgICAgICAgICAnXHUwMTU1JzogJ3InLAogICAgICAgICAgJ1x1MDE1Nyc6ICdyJywKICAgICAgICAgICdcdTAxNTknOiAncicsCiAgICAgICAgICAnXHUwMTVhJzogJ1MnLAogICAgICAgICAgJ1x1MDE1Yyc6ICdTJywKICAgICAgICAgICdcdTAxNWUnOiAnUycsCiAgICAgICAgICAnXHUwMTYwJzogJ1MnLAogICAgICAgICAgJ1x1MDE1Yic6ICdzJywKICAgICAgICAgICdcdTAxNWQnOiAncycsCiAgICAgICAgICAnXHUwMTVmJzogJ3MnLAogICAgICAgICAgJ1x1MDE2MSc6ICdzJywKICAgICAgICAgICdcdTAxNjInOiAnVCcsCiAgICAgICAgICAnXHUwMTY0JzogJ1QnLAogICAgICAgICAgJ1x1MDE2Nic6ICdUJywKICAgICAgICAgICdcdTAxNjMnOiAndCcsCiAgICAgICAgICAnXHUwMTY1JzogJ3QnLAogICAgICAgICAgJ1x1MDE2Nyc6ICd0JywKICAgICAgICAgICdcdTAxNjgnOiAnVScsCiAgICAgICAgICAnXHUwMTZhJzogJ1UnLAogICAgICAgICAgJ1x1MDE2Yyc6ICdVJywKICAgICAgICAgICdcdTAxNmUnOiAnVScsCiAgICAgICAgICAnXHUwMTcwJzogJ1UnLAogICAgICAgICAgJ1x1MDE3Mic6ICdVJywKICAgICAgICAgICdcdTAxNjknOiAndScsCiAgICAgICAgICAnXHUwMTZiJzogJ3UnLAogICAgICAgICAgJ1x1MDE2ZCc6ICd1JywKICAgICAgICAgICdcdTAxNmYnOiAndScsCiAgICAgICAgICAnXHUwMTcxJzogJ3UnLAogICAgICAgICAgJ1x1MDE3Myc6ICd1JywKICAgICAgICAgICdcdTAxNzQnOiAnVycsCiAgICAgICAgICAnXHUwMTc1JzogJ3cnLAogICAgICAgICAgJ1x1MDE3Nic6ICdZJywKICAgICAgICAgICdcdTAxNzcnOiAneScsCiAgICAgICAgICAnXHUwMTc4JzogJ1knLAogICAgICAgICAgJ1x1MDE3OSc6ICdaJywKICAgICAgICAgICdcdTAxN2InOiAnWicsCiAgICAgICAgICAnXHUwMTdkJzogJ1onLAogICAgICAgICAgJ1x1MDE3YSc6ICd6JywKICAgICAgICAgICdcdTAxN2MnOiAneicsCiAgICAgICAgICAnXHUwMTdlJzogJ3onLAogICAgICAgICAgJ1x1MDEzMic6ICdJSicsCiAgICAgICAgICAnXHUwMTMzJzogJ2lqJywKICAgICAgICAgICdcdTAxNTInOiAnT2UnLAogICAgICAgICAgJ1x1MDE1Myc6ICdvZScsCiAgICAgICAgICAnXHUwMTQ5JzogIiduIiwKICAgICAgICAgICdcdTAxN2YnOiAncycKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdWNzMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgdWNzMiA9IF8udWNzMiA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFVDUy0yIGVuY29kaW5nIGFuZCBkZWNvZGluZy4KICAgICAgICAgKgogICAgICAgICAqICMjIyBlbmNvZGUKICAgICAgICAgKgogICAgICAgICAqIENyZWF0ZSBhIHN0cmluZyB1c2luZyBhbiBhcnJheSBvZiBjb2RlIHBvaW50IHZhbHVlcy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8YXJyICAgfEFycmF5IG9mIGNvZGUgcG9pbnRzfAogICAgICAgICAqIHxyZXR1cm58RW5jb2RlZCBzdHJpbmcgICAgICB8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgZGVjb2RlCiAgICAgICAgICoKICAgICAgICAgKiBDcmVhdGUgYW4gYXJyYXkgb2YgY29kZSBwb2ludCB2YWx1ZXMgdXNpbmcgYSBzdHJpbmcuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHN0ciAgIHxJbnB1dCBzdHJpbmcgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufEFycmF5IG9mIGNvZGUgcG9pbnRzfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogdWNzMi5lbmNvZGUoWzB4NjEsIDB4NjIsIDB4NjNdKTsgLy8gLT4gJ2FiYycKICAgICAgICAgKiB1Y3MyLmRlY29kZSgnYWJjJyk7IC8vIC0+IFsweDYxLCAweDYyLCAweDYzXQogICAgICAgICAqICfwnYyGJy5sZW5ndGg7IC8vIC0+IDIKICAgICAgICAgKiB1Y3MyLmRlY29kZSgn8J2MhicpLmxlbmd0aDsgLy8gLT4gMQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgY29uc3QgdWNzMjogewogICAgICAgICAqICAgICBlbmNvZGUoYXJyOiBudW1iZXJbXSk6IHN0cmluZzsKICAgICAgICAgKiAgICAgZGVjb2RlKHN0cjogc3RyaW5nKTogbnVtYmVyW107CiAgICAgICAgICogfTsKICAgICAgICAgKi8KICAgICAgICAvLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZwogICAgICAgIGV4cG9ydHMgPSB7CiAgICAgICAgICAgIGVuY29kZTogZnVuY3Rpb24oYXJyKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkoU3RyaW5nLCBhcnIpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBkZWNvZGU6IGZ1bmN0aW9uKHN0cikgewogICAgICAgICAgICAgICAgdmFyIHJldCA9IFtdOwogICAgICAgICAgICAgICAgdmFyIGkgPSAwOwogICAgICAgICAgICAgICAgdmFyIGxlbiA9IHN0ci5sZW5ndGg7CgogICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBsZW4pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IHN0ci5jaGFyQ29kZUF0KGkrKyk7IC8vIEEgaGlnaCBzdXJyb2dhdGUKCiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPj0gMHhkODAwICYmIGMgPD0gMHhkYmZmICYmIGkgPCBsZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhaWwgPSBzdHIuY2hhckNvZGVBdChpKyspOyAvLyBuZXh0QyA+PSAweERDMDAgJiYgbmV4dEMgPD0gMHhERkZGCgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHRhaWwgJiAweGZjMDApID09PSAweGRjMDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEMgPSAoSCAtIDB4RDgwMCkgKiAweDQwMCArIEwgLSAweERDMDAgKyAweDEwMDAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaCgoKGMgJiAweDNmZikgPDwgMTApICsgKHRhaWwgJiAweDNmZikgKyAweDEwMDAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKGMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goYyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdXRmOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgdXRmOCA9IF8udXRmOCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFVURi04IGVuY29kaW5nIGFuZCBkZWNvZGluZy4KICAgICAgICAgKgogICAgICAgICAqICMjIyBlbmNvZGUKICAgICAgICAgKgogICAgICAgICAqIFR1cm4gYW55IFVURi04IGRlY29kZWQgc3RyaW5nIGludG8gVVRGLTggZW5jb2RlZCBzdHJpbmcuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHIgICB8U3RyaW5nIHRvIGVuY29kZXwKICAgICAgICAgKiB8cmV0dXJufEVuY29kZWQgc3RyaW5nICB8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgZGVjb2RlCiAgICAgICAgICoKICAgICAgICAgKiBUdXJuIGFueSBVVEYtOCBlbmNvZGVkIHN0cmluZyBpbnRvIFVURi04IGRlY29kZWQgc3RyaW5nLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgICB8RGVzYyAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHIgICAgICAgfFN0cmluZyB0byBkZWNvZGUgICAgICB8CiAgICAgICAgICogfHNhZmU9ZmFsc2V8U3VwcHJlc3MgZXJyb3IgaWYgdHJ1ZXwKICAgICAgICAgKiB8cmV0dXJuICAgIHxEZWNvZGVkIHN0cmluZyAgICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogdXRmOC5lbmNvZGUoJ1x1RDgwMFx1REMwMCcpOyAvLyAtPiAgJ1x4RjBceDkwXHg4MFx4ODAnCiAgICAgICAgICogdXRmOC5kZWNvZGUoJ1x4RjBceDkwXHg4MFx4ODAnKTsgLy8gLT4gJ1x1RDgwMFx1REMwMCcKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGNvbnN0IHV0Zjg6IHsKICAgICAgICAgKiAgICAgZW5jb2RlKHN0cjogc3RyaW5nKTogc3RyaW5nOwogICAgICAgICAqICAgICBkZWNvZGUoc3RyOiBzdHJpbmcsIHNhZmU/OiBib29sZWFuKTogc3RyaW5nOwogICAgICAgICAqIH07CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHVjczIgCiAgICAgICAgICovIC8vIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyN1dGYtOAoKICAgICAgICBleHBvcnRzID0gewogICAgICAgICAgICBlbmNvZGU6IGZ1bmN0aW9uKHN0cikgewogICAgICAgICAgICAgICAgdmFyIGNvZGVQb2ludHMgPSB1Y3MyLmRlY29kZShzdHIpOwogICAgICAgICAgICAgICAgdmFyIGJ5dGVBcnIgPSAnJzsKCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gY29kZVBvaW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgICAgIGJ5dGVBcnIgKz0gZW5jb2RlQ29kZVBvaW50KGNvZGVQb2ludHNbaV0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBieXRlQXJyOwogICAgICAgICAgICB9LAogICAgICAgICAgICBkZWNvZGU6IGZ1bmN0aW9uKHN0ciwgc2FmZSkgewogICAgICAgICAgICAgICAgYnl0ZUFyciA9IHVjczIuZGVjb2RlKHN0cik7CiAgICAgICAgICAgICAgICBieXRlSWR4ID0gMDsKICAgICAgICAgICAgICAgIGJ5dGVDb3VudCA9IGJ5dGVBcnIubGVuZ3RoOwogICAgICAgICAgICAgICAgY29kZVBvaW50ID0gMDsKICAgICAgICAgICAgICAgIGJ5dGVzU2VlbiA9IDA7CiAgICAgICAgICAgICAgICBieXRlc05lZWRlZCA9IDA7CiAgICAgICAgICAgICAgICBsb3dlckJvdW5kYXJ5ID0gMHg4MDsKICAgICAgICAgICAgICAgIHVwcGVyQm91bmRhcnkgPSAweGJmOwogICAgICAgICAgICAgICAgdmFyIGNvZGVQb2ludHMgPSBbXTsKICAgICAgICAgICAgICAgIHZhciB0bXA7CgogICAgICAgICAgICAgICAgd2hpbGUgKCh0bXAgPSBkZWNvZGVDb2RlUG9pbnQoc2FmZSkpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgIGNvZGVQb2ludHMucHVzaCh0bXApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB1Y3MyLmVuY29kZShjb2RlUG9pbnRzKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgdmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7CgogICAgICAgIGZ1bmN0aW9uIGVuY29kZUNvZGVQb2ludChjb2RlUG9pbnQpIHsKICAgICAgICAgICAgLy8gVSswMDAwIHRvIFUrMDA4MCwgQVNDSUkgY29kZSBwb2ludAogICAgICAgICAgICBpZiAoKGNvZGVQb2ludCAmIDB4ZmZmZmZmODApID09PSAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZnJvbUNoYXJDb2RlKGNvZGVQb2ludCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciByZXQgPSAnJywKICAgICAgICAgICAgICAgIGNvdW50LAogICAgICAgICAgICAgICAgb2Zmc2V0OyAvLyBVKzAwODAgdG8gVSswN0ZGLCBpbmNsdXNpdmUKCiAgICAgICAgICAgIGlmICgoY29kZVBvaW50ICYgMHhmZmZmZjgwMCkgPT09IDApIHsKICAgICAgICAgICAgICAgIGNvdW50ID0gMTsKICAgICAgICAgICAgICAgIG9mZnNldCA9IDB4YzA7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNvZGVQb2ludCAmIDB4ZmZmZjAwMDApID09PSAwKSB7CiAgICAgICAgICAgICAgICAvLyBVKzA4MDAgdG8gVStGRkZGLCBpbmNsdXNpdmUKICAgICAgICAgICAgICAgIGNvdW50ID0gMjsKICAgICAgICAgICAgICAgIG9mZnNldCA9IDB4ZTA7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNvZGVQb2ludCAmIDB4ZmZlMDAwMDApID09IDApIHsKICAgICAgICAgICAgICAgIC8vIFUrMTAwMDAgdG8gVSsxMEZGRkYsIGluY2x1c2l2ZQogICAgICAgICAgICAgICAgY291bnQgPSAzOwogICAgICAgICAgICAgICAgb2Zmc2V0ID0gMHhmMDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0ICs9IGZyb21DaGFyQ29kZSgoY29kZVBvaW50ID4+ICg2ICogY291bnQpKSArIG9mZnNldCk7CgogICAgICAgICAgICB3aGlsZSAoY291bnQgPiAwKSB7CiAgICAgICAgICAgICAgICB2YXIgdG1wID0gY29kZVBvaW50ID4+ICg2ICogKGNvdW50IC0gMSkpOwogICAgICAgICAgICAgICAgcmV0ICs9IGZyb21DaGFyQ29kZSgweDgwIHwgKHRtcCAmIDB4M2YpKTsKICAgICAgICAgICAgICAgIGNvdW50LS07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfQoKICAgICAgICB2YXIgYnl0ZUFyciwKICAgICAgICAgICAgYnl0ZUlkeCwKICAgICAgICAgICAgYnl0ZUNvdW50LAogICAgICAgICAgICBjb2RlUG9pbnQsCiAgICAgICAgICAgIGJ5dGVzU2VlbiwKICAgICAgICAgICAgYnl0ZXNOZWVkZWQsCiAgICAgICAgICAgIGxvd2VyQm91bmRhcnksCiAgICAgICAgICAgIHVwcGVyQm91bmRhcnk7CgogICAgICAgIGZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludChzYWZlKSB7CiAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnN0YW50LWNvbmRpdGlvbiAqLwogICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgaWYgKGJ5dGVJZHggPj0gYnl0ZUNvdW50ICYmIGJ5dGVzTmVlZGVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNhZmUpIHJldHVybiBnb0JhY2soKTsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYnl0ZSBpbmRleCcpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChieXRlSWR4ID09PSBieXRlQ291bnQpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIHZhciBieXRlID0gYnl0ZUFycltieXRlSWR4XTsKICAgICAgICAgICAgICAgIGJ5dGVJZHgrKzsKCiAgICAgICAgICAgICAgICBpZiAoIWJ5dGVzTmVlZGVkKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gMHgwMCB0byAweDdGCiAgICAgICAgICAgICAgICAgICAgaWYgKChieXRlICYgMHg4MCkgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ5dGU7CiAgICAgICAgICAgICAgICAgICAgfSAvLyAweEMyIHRvIDB4REYKCiAgICAgICAgICAgICAgICAgICAgaWYgKChieXRlICYgMHhlMCkgPT09IDB4YzApIHsKICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNOZWVkZWQgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICBjb2RlUG9pbnQgPSBieXRlICYgMHgxZjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChieXRlICYgMHhmMCkgPT09IDB4ZTApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gMHhFMCB0byAweEVGCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChieXRlID09PSAweGUwKSBsb3dlckJvdW5kYXJ5ID0gMHhhMDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGUgPT09IDB4ZWQpIHVwcGVyQm91bmRhcnkgPSAweDlmOwogICAgICAgICAgICAgICAgICAgICAgICBieXRlc05lZWRlZCA9IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVQb2ludCA9IGJ5dGUgJiAweGY7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoYnl0ZSAmIDB4ZjgpID09PSAweGYwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDB4RjAgdG8gMHhGNAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZSA9PT0gMHhmMCkgbG93ZXJCb3VuZGFyeSA9IDB4OTA7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChieXRlID09PSAweGY0KSB1cHBlckJvdW5kYXJ5ID0gMHg4ZjsKICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNOZWVkZWQgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICBjb2RlUG9pbnQgPSBieXRlICYgMHg3OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzYWZlKSByZXR1cm4gZ29CYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBVVEYtOCBkZXRlY3RlZCcpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGJ5dGUgPCBsb3dlckJvdW5kYXJ5IHx8IGJ5dGUgPiB1cHBlckJvdW5kYXJ5KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNhZmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZUlkeC0tOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ29CYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29udGludWF0aW9uIGJ5dGUnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBsb3dlckJvdW5kYXJ5ID0gMHg4MDsKICAgICAgICAgICAgICAgIHVwcGVyQm91bmRhcnkgPSAweGJmOwogICAgICAgICAgICAgICAgY29kZVBvaW50ID0gKGNvZGVQb2ludCA8PCA2KSB8IChieXRlICYgMHgzZik7CiAgICAgICAgICAgICAgICBieXRlc1NlZW4rKzsKICAgICAgICAgICAgICAgIGlmIChieXRlc1NlZW4gIT09IGJ5dGVzTmVlZGVkKSBjb250aW51ZTsKICAgICAgICAgICAgICAgIHZhciB0bXAgPSBjb2RlUG9pbnQ7CiAgICAgICAgICAgICAgICBjb2RlUG9pbnQgPSAwOwogICAgICAgICAgICAgICAgYnl0ZXNOZWVkZWQgPSAwOwogICAgICAgICAgICAgICAgYnl0ZXNTZWVuID0gMDsKICAgICAgICAgICAgICAgIHJldHVybiB0bXA7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGdvQmFjaygpIHsKICAgICAgICAgICAgdmFyIHN0YXJ0ID0gYnl0ZUlkeCAtIGJ5dGVzU2VlbiAtIDE7CiAgICAgICAgICAgIGJ5dGVJZHggPSBzdGFydCArIDE7CiAgICAgICAgICAgIGNvZGVQb2ludCA9IDA7CiAgICAgICAgICAgIGJ5dGVzTmVlZGVkID0gMDsKICAgICAgICAgICAgYnl0ZXNTZWVuID0gMDsKICAgICAgICAgICAgbG93ZXJCb3VuZGFyeSA9IDB4ODA7CiAgICAgICAgICAgIHVwcGVyQm91bmRhcnkgPSAweGJmOwogICAgICAgICAgICByZXR1cm4gYnl0ZUFycltzdGFydF07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZGVmaW5lZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uZGVmaW5lZCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFJldHVybiB0aGUgZmlyc3QgYXJndW1lbnQgdGhhdCBpcyBub3QgdW5kZWZpbmVkLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICB8RGVzYyAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHwuLi5hcmdzfEFyZ3VtZW50cyB0byBjaGVjayAgICB8CiAgICAgICAgICogfHJldHVybiB8Rmlyc3QgZGVmaW5lZCBhcmd1bWVudHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGRlZmluZWQoZmFsc2UsIDIsIHZvaWQgMCwgMTAwKTsgLy8gLT4gZmFsc2UKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGRlZmluZWQoLi4uYXJnczogYW55W10pOiBhbnk7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlzVW5kZWYgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmKGFyZ3VtZW50c1tpXSkpIHJldHVybiBhcmd1bWVudHNbaV07CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZGVsYXkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmRlbGF5ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogSW52b2tlIGZ1bmN0aW9uIGFmdGVyIGNlcnRhaW4gbWlsbGlzZWNvbmRzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8Zm4gICAgIHxGdW5jdGlvbiB0byBkZWxheSAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHdhaXQgICB8TnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheSBpbnZvY2F0aW9ufAogICAgICAgICAqIHwuLi5hcmdzfEFyZ3VtZW50cyB0byBpbnZva2UgZm4gd2l0aCAgICAgICAgICAgICAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGRlbGF5KGZ1bmN0aW9uICh0ZXh0KSB7CiAgICAgICAgICogICAgIGNvbnNvbGUubG9nKHRleHQpOwogICAgICAgICAqIH0sIDEwMDAsICdsYXRlcicpOwogICAgICAgICAqIC8vIC0+IExvZ3MgJ2xhdGVyJyBhZnRlciBvbmUgc2Vjb25kCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBkZWxheShmbjogRnVuY3Rpb24sIHdhaXQ6IG51bWJlciwgLi4uYXJnczogYW55W10pOiB2b2lkOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiByZXN0QXJncyAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IHJlc3RBcmdzKGZ1bmN0aW9uKGZuLCB3YWl0LCBhcmdzKSB7CiAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIGFyZ3MpOwogICAgICAgICAgICB9LCB3YWl0KTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1lbVN0b3JhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIG1lbVN0b3JhZ2UgPSBfLm1lbVN0b3JhZ2UgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBNZW1vcnktYmFja2VkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBXZWIgU3RvcmFnZSBBUEkuCiAgICAgICAgICoKICAgICAgICAgKiBBIHJlcGxhY2VtZW50IGZvciBlbnZpcm9ubWVudHMgd2hlcmUgbG9jYWxTdG9yYWdlIG9yIHNlc3Npb25TdG9yYWdlIGlzIG5vdCBhdmFpbGFibGUuCiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBsb2NhbFN0b3JhZ2UgPSB3aW5kb3cubG9jYWxTdG9yYWdlIHx8IG1lbVN0b3JhZ2U7CiAgICAgICAgICogbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Rlc3QnLCAnbGljaWEnKTsKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGNvbnN0IG1lbVN0b3JhZ2U6IHR5cGVvZiB3aW5kb3cubG9jYWxTdG9yYWdlOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBrZXlzIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gewogICAgICAgICAgICBnZXRJdGVtOiBmdW5jdGlvbihrZXkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAoQVBJX0tFWVNba2V5XSA/IGNsb2FrW2tleV0gOiB0aGlzW2tleV0pIHx8IG51bGw7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNldEl0ZW06IGZ1bmN0aW9uKGtleSwgdmFsKSB7CiAgICAgICAgICAgICAgICBBUElfS0VZU1trZXldID8gKGNsb2FrW2tleV0gPSB2YWwpIDogKHRoaXNba2V5XSA9IHZhbCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlbW92ZUl0ZW06IGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICAgICAgQVBJX0tFWVNba2V5XSA/IGRlbGV0ZSBjbG9ha1trZXldIDogZGVsZXRlIHRoaXNba2V5XTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAga2V5OiBmdW5jdGlvbihpKSB7CiAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGVudW1lcmFibGVLZXlzKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gaSA+PSAwICYmIGkgPCBrZXlzLmxlbmd0aCA/IGtleXNbaV0gOiBudWxsOwogICAgICAgICAgICB9LAogICAgICAgICAgICBjbGVhcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIga2V5cyA9IHVuY2xvYWtlZEtleXMoKTsKICAgICAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbmQtYXNzaWduICovCgogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGtleTsgKGtleSA9IGtleXNbaV0pOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpc1trZXldOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGtleXMgPSBjbG9ha2VkS2V5cygpOwogICAgICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi8KCiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9rZXk7IChfa2V5ID0ga2V5c1tfaV0pOyBfaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNsb2FrW19rZXldOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ2xlbmd0aCcsIHsKICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiBlbnVtZXJhYmxlS2V5cygpLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHZhciBjbG9hayA9IHt9OwogICAgICAgIHZhciBBUElfS0VZUyA9IHsKICAgICAgICAgICAgZ2V0SXRlbTogMSwKICAgICAgICAgICAgc2V0SXRlbTogMSwKICAgICAgICAgICAgcmVtb3ZlSXRlbTogMSwKICAgICAgICAgICAga2V5OiAxLAogICAgICAgICAgICBjbGVhcjogMSwKICAgICAgICAgICAgbGVuZ3RoOiAxCiAgICAgICAgfTsKCiAgICAgICAgZnVuY3Rpb24gZW51bWVyYWJsZUtleXMoKSB7CiAgICAgICAgICAgIHJldHVybiB1bmNsb2FrZWRLZXlzKCkuY29uY2F0KGNsb2FrZWRLZXlzKCkpOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gdW5jbG9ha2VkS2V5cygpIHsKICAgICAgICAgICAgcmV0dXJuIGtleXMoZXhwb3J0cykuZmlsdGVyKGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICAgICAgcmV0dXJuICFBUElfS0VZU1trZXldOwogICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGNsb2FrZWRLZXlzKCkgewogICAgICAgICAgICByZXR1cm4ga2V5cyhjbG9hayk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZGV0ZWN0T3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmRldGVjdE9zID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogRGV0ZWN0IG9wZXJhdGluZyBzeXN0ZW0gdXNpbmcgdWEuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICAgICAgICAgICAgICAgIHxEZXNjICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx1YT1uYXZpZ2F0b3IudXNlckFnZW50fEJyb3dzZXIgdXNlckFnZW50ICAgIHwKICAgICAgICAgKiB8cmV0dXJuICAgICAgICAgICAgICAgIHxPcGVyYXRpbmcgc3lzdGVtIG5hbWV8CiAgICAgICAgICoKICAgICAgICAgKiBTdXBwb3J0ZWQgb3M6IHdpbmRvd3MsIG9zIHgsIGxpbnV4LCBpb3MsIGFuZHJvaWQsIHdpbmRvd3MgcGhvbmUKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGlmIChkZXRlY3RPcygpID09PSAnaW9zJykgewogICAgICAgICAqICAgICAvLyBEbyBzb21ldGhpbmcgYWJvdXQgaW9zLi4uCiAgICAgICAgICogfQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZGV0ZWN0T3ModWE/OiBzdHJpbmcpOiBzdHJpbmc7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlzQnJvd3NlciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHVhKSB7CiAgICAgICAgICAgIHVhID0gdWEgfHwgKGlzQnJvd3NlciA/IG5hdmlnYXRvci51c2VyQWdlbnQgOiAnJyk7CiAgICAgICAgICAgIHVhID0gdWEudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgaWYgKGRldGVjdCgnd2luZG93cyBwaG9uZScpKSByZXR1cm4gJ3dpbmRvd3MgcGhvbmUnOwogICAgICAgICAgICBpZiAoZGV0ZWN0KCd3aW4nKSkgcmV0dXJuICd3aW5kb3dzJzsKICAgICAgICAgICAgaWYgKGRldGVjdCgnYW5kcm9pZCcpKSByZXR1cm4gJ2FuZHJvaWQnOwogICAgICAgICAgICBpZiAoZGV0ZWN0KCdpcGFkJykgfHwgZGV0ZWN0KCdpcGhvbmUnKSB8fCBkZXRlY3QoJ2lwb2QnKSkgcmV0dXJuICdpb3MnOwogICAgICAgICAgICBpZiAoZGV0ZWN0KCdtYWMnKSkgcmV0dXJuICdvcyB4JzsKICAgICAgICAgICAgaWYgKGRldGVjdCgnbGludXgnKSkgcmV0dXJuICdsaW51eCc7CgogICAgICAgICAgICBmdW5jdGlvbiBkZXRlY3Qoa2V5d29yZCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHVhLmluZGV4T2Yoa2V5d29yZCkgPiAtMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICd1bmtub3duJzsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZG90Q2FzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uZG90Q2FzZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENvbnZlcnQgc3RyaW5nIHRvICJkb3RDYXNlIi4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8c3RyICAgfFN0cmluZyB0byBjb252ZXJ0fAogICAgICAgICAqIHxyZXR1cm58RG90IGNhc2VkIHN0cmluZyB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBkb3RDYXNlKCdmb29CYXInKTsgLy8gLT4gZm9vLmJhcgogICAgICAgICAqIGRvdENhc2UoJ2ZvbyBiYXInKTsgLy8gLT4gZm9vLmJhcgogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZG90Q2FzZShzdHI6IHN0cmluZyk6IHN0cmluZzsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogc3BsaXRDYXNlIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgIHJldHVybiBzcGxpdENhc2Uoc3RyKS5qb2luKCcuJyk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG9wdGltaXplQ2IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIG9wdGltaXplQ2IgPSBfLm9wdGltaXplQ2IgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBVc2VkIGZvciBmdW5jdGlvbiBjb250ZXh0IGJpbmRpbmcuCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBvcHRpbWl6ZUNiKGZuOiBGdW5jdGlvbiwgY3R4OiBhbnksIGFyZ0NvdW50PzogbnVtYmVyKTogRnVuY3Rpb247CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlzVW5kZWYgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihmbiwgY3R4LCBhcmdDb3VudCkgewogICAgICAgICAgICBpZiAoaXNVbmRlZihjdHgpKSByZXR1cm4gZm47CgogICAgICAgICAgICBzd2l0Y2ggKGFyZ0NvdW50ID09IG51bGwgPyAzIDogYXJnQ291bnQpIHsKICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5jYWxsKGN0eCwgdmFsKTsKICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odmFsLCBpZHgsIGNvbGxlY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuLmNhbGwoY3R4LCB2YWwsIGlkeCwgY29sbGVjdGlvbik7CiAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFjY3VtdWxhdG9yLCB2YWwsIGlkeCwgY29sbGVjdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uY2FsbChjdHgsIGFjY3VtdWxhdG9yLCB2YWwsIGlkeCwgY29sbGVjdGlvbik7CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KGN0eCwgYXJndW1lbnRzKTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIHR5cGVzID0gXy50eXBlcyA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFVzZWQgZm9yIHR5cGVzY3JpcHQgZGVmaW5pdGlvbnMgb25seS4KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSB0eXBlcyB7CiAgICAgICAgICogICAgIGludGVyZmFjZSBDb2xsZWN0aW9uPFQ+IHt9CiAgICAgICAgICogICAgIGludGVyZmFjZSBMaXN0PFQ+IGV4dGVuZHMgQ29sbGVjdGlvbjxUPiB7CiAgICAgICAgICogICAgICAgICBbaW5kZXg6IG51bWJlcl06IFQ7CiAgICAgICAgICogICAgICAgICBsZW5ndGg6IG51bWJlcjsKICAgICAgICAgKiAgICAgfQogICAgICAgICAqICAgICBpbnRlcmZhY2UgTGlzdEl0ZXJhdG9yPFQsIFRSZXN1bHQ+IHsKICAgICAgICAgKiAgICAgICAgICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgbGlzdDogTGlzdDxUPik6IFRSZXN1bHQ7CiAgICAgICAgICogICAgIH0KICAgICAgICAgKiAgICAgaW50ZXJmYWNlIERpY3Rpb25hcnk8VD4gZXh0ZW5kcyBDb2xsZWN0aW9uPFQ+IHsKICAgICAgICAgKiAgICAgICAgIFtpbmRleDogc3RyaW5nXTogVDsKICAgICAgICAgKiAgICAgfQogICAgICAgICAqICAgICBpbnRlcmZhY2UgT2JqZWN0SXRlcmF0b3I8VCwgVFJlc3VsdD4gewogICAgICAgICAqICAgICAgICAgKGVsZW1lbnQ6IFQsIGtleTogc3RyaW5nLCBsaXN0OiBEaWN0aW9uYXJ5PFQ+KTogVFJlc3VsdDsKICAgICAgICAgKiAgICAgfQogICAgICAgICAqICAgICBpbnRlcmZhY2UgTWVtb0l0ZXJhdG9yPFQsIFRSZXN1bHQ+IHsKICAgICAgICAgKiAgICAgICAgIChwcmV2OiBUUmVzdWx0LCBjdXJyOiBULCBpbmRleDogbnVtYmVyLCBsaXN0OiBMaXN0PFQ+KTogVFJlc3VsdDsKICAgICAgICAgKiAgICAgfQogICAgICAgICAqICAgICBpbnRlcmZhY2UgTWVtb09iamVjdEl0ZXJhdG9yPFQsIFRSZXN1bHQ+IHsKICAgICAgICAgKiAgICAgICAgIChwcmV2OiBUUmVzdWx0LCBjdXJyOiBULCBrZXk6IHN0cmluZywgbGlzdDogRGljdGlvbmFyeTxUPik6IFRSZXN1bHQ7CiAgICAgICAgICogICAgIH0KICAgICAgICAgKiB9CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgY29uc3QgdHlwZXM6IHt9CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IHt9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdXBwZXJGaXJzdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgdXBwZXJGaXJzdCA9IF8udXBwZXJGaXJzdCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENvbnZlcnQgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBzdHJpbmcgdG8gdXBwZXIgY2FzZS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8c3RyICAgfFN0cmluZyB0byBjb252ZXJ0fAogICAgICAgICAqIHxyZXR1cm58Q29udmVydGVkIHN0cmluZyB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiB1cHBlckZpcnN0KCdyZWQnKTsgLy8gLT4gUmVkCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1cHBlckZpcnN0KHN0cjogc3RyaW5nKTogc3RyaW5nOwogICAgICAgICAqLwogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgaWYgKHN0ci5sZW5ndGggPCAxKSByZXR1cm4gc3RyOwogICAgICAgICAgICByZXR1cm4gc3RyWzBdLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGVuZFdpdGggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGVuZFdpdGggPSBfLmVuZFdpdGggPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDaGVjayBpZiBzdHJpbmcgZW5kcyB3aXRoIHRoZSBnaXZlbiB0YXJnZXQgc3RyaW5nLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8c3RyICAgfFRoZSBzdHJpbmcgdG8gc2VhcmNoICAgICAgICAgICB8CiAgICAgICAgICogfHN1ZmZpeHxTdHJpbmcgc3VmZml4ICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58VHJ1ZSBpZiBzdHJpbmcgZW5kcyB3aXRoIHRhcmdldHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGVuZFdpdGgoJ2FiJywgJ2InKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZW5kV2l0aChzdHI6IHN0cmluZywgc3VmZml4OiBzdHJpbmcpOiBib29sZWFuOwogICAgICAgICAqLwogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdHIsIHN1ZmZpeCkgewogICAgICAgICAgICB2YXIgaWR4ID0gc3RyLmxlbmd0aCAtIHN1ZmZpeC5sZW5ndGg7CiAgICAgICAgICAgIHJldHVybiBpZHggPj0gMCAmJiBzdHIuaW5kZXhPZihzdWZmaXgsIGlkeCkgPT09IGlkeDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZXNjYXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBlc2NhcGUgPSBfLmVzY2FwZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEVzY2FwZXMgYSBzdHJpbmcgZm9yIGluc2VydGlvbiBpbnRvIEhUTUwsIHJlcGxhY2luZyAmLCA8LCA+LCAiLCBgLCBhbmQgJyBjaGFyYWN0ZXJzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8c3RyICAgfFN0cmluZyB0byBlc2NhcGV8CiAgICAgICAgICogfHJldHVybnxFc2NhcGVkIHN0cmluZyAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogZXNjYXBlKCdZb3UgJiBNZScpOyAvLyAtPiAnWW91ICZhbXA7IE1lJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZXNjYXBlKHN0cjogc3RyaW5nKTogc3RyaW5nOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBrZXlzIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgIHJldHVybiByZWdUZXN0LnRlc3Qoc3RyKSA/IHN0ci5yZXBsYWNlKHJlZ1JlcGxhY2UsIHJlcGxhY2VGbikgOiBzdHI7CiAgICAgICAgfTsKCiAgICAgICAgdmFyIG1hcCA9IChleHBvcnRzLm1hcCA9IHsKICAgICAgICAgICAgJyYnOiAnJmFtcDsnLAogICAgICAgICAgICAnPCc6ICcmbHQ7JywKICAgICAgICAgICAgJz4nOiAnJmd0OycsCiAgICAgICAgICAgICciJzogJyZxdW90OycsCiAgICAgICAgICAgICInIjogJyYjeDI3OycsCiAgICAgICAgICAgICdgJzogJyYjeDYwOycKICAgICAgICB9KTsKICAgICAgICB2YXIgcmVnU3JjID0gJyg/OicgKyBrZXlzKG1hcCkuam9pbignfCcpICsgJyknOwogICAgICAgIHZhciByZWdUZXN0ID0gbmV3IFJlZ0V4cChyZWdTcmMpOwogICAgICAgIHZhciByZWdSZXBsYWNlID0gbmV3IFJlZ0V4cChyZWdTcmMsICdnJyk7CgogICAgICAgIHZhciByZXBsYWNlRm4gPSBmdW5jdGlvbihtYXRjaCkgewogICAgICAgICAgICByZXR1cm4gbWFwW21hdGNoXTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZXNjYXBlSnNTdHIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGVzY2FwZUpzU3RyID0gXy5lc2NhcGVKc1N0ciA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEVzY2FwZSBzdHJpbmcgdG8gYmUgYSB2YWxpZCBKYXZhU2NyaXB0IHN0cmluZyBsaXRlcmFsIGJldHdlZW4gcXVvdGVzLgogICAgICAgICAqCiAgICAgICAgICogaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTcuOC40CiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHIgICB8U3RyaW5nIHRvIGVzY2FwZXwKICAgICAgICAgKiB8cmV0dXJufEVzY2FwZWQgc3RyaW5nICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBlc2NhcGVKc1N0cignXCJcbicpOyAvLyAtPiAnXFwiXFxcXG4nCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBlc2NhcGVKc1N0cihzdHI6IHN0cmluZyk6IHN0cmluZzsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogdG9TdHIgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgcmV0dXJuIHRvU3RyKHN0cikucmVwbGFjZShyZWdFc2NhcGVDaGFycywgZnVuY3Rpb24oY2hhcikgewogICAgICAgICAgICAgICAgc3dpdGNoIChjaGFyKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnIic6CiAgICAgICAgICAgICAgICAgICAgY2FzZSAiJyI6CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnXFwnOgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1xcJyArIGNoYXI7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ1xuJzoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcXG4nOwoKICAgICAgICAgICAgICAgICAgICBjYXNlICdccic6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnXFxyJzsKICAgICAgICAgICAgICAgICAgICAvLyBMaW5lIHNlcGFyYXRvcgoKICAgICAgICAgICAgICAgICAgICBjYXNlICdcdTIwMjgnOgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1xcdTIwMjgnOwogICAgICAgICAgICAgICAgICAgIC8vIFBhcmFncmFwaCBzZXBhcmF0b3IKCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnXHUyMDI5JzoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcXHUyMDI5JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKCiAgICAgICAgdmFyIHJlZ0VzY2FwZUNoYXJzID0gL1siJ1xcXG5cclx1MjAyOFx1MjAyOV0vZzsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGVzY2FwZVJlZ0V4cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgZXNjYXBlUmVnRXhwID0gXy5lc2NhcGVSZWdFeHAgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBFc2NhcGUgc3BlY2lhbCBjaGFycyB0byBiZSB1c2VkIGFzIGxpdGVyYWxzIGluIFJlZ0V4cCBjb25zdHJ1Y3RvcnMuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHIgICB8U3RyaW5nIHRvIGVzY2FwZXwKICAgICAgICAgKiB8cmV0dXJufEVzY2FwZWQgc3RyaW5nICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBlc2NhcGVSZWdFeHAoJ1tsaWNpYV0nKTsgLy8gLT4gJ1xcW2xpY2lhXFxdJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHN0cjogc3RyaW5nKTogc3RyaW5nOwogICAgICAgICAqLwogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cVy9nLCAnXFwkJicpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtZW1vaXplIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBtZW1vaXplID0gXy5tZW1vaXplID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogTWVtb2l6ZSBhIGdpdmVuIGZ1bmN0aW9uIGJ5IGNhY2hpbmcgdGhlIGNvbXB1dGVkIHJlc3VsdC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxmbiAgICB8RnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkfAogICAgICAgICAqIHxoYXNoRm58RnVuY3Rpb24gdG8gY3JlYXRlIGNhY2hlIGtleSAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58TmV3IG1lbW9pemVkIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3QgZmlib25hY2NpID0gbWVtb2l6ZShmdW5jdGlvbihuKSB7CiAgICAgICAgICogICAgIHJldHVybiBuIDwgMiA/IG4gOiBmaWJvbmFjY2kobiAtIDEpICsgZmlib25hY2NpKG4gLSAyKTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG1lbW9pemUoZm46IEZ1bmN0aW9uLCBoYXNoRm4/OiBGdW5jdGlvbik6IEZ1bmN0aW9uOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBoYXMgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihmbiwgaGFzaEZuKSB7CiAgICAgICAgICAgIHZhciBtZW1vaXplID0gZnVuY3Rpb24oa2V5KSB7CiAgICAgICAgICAgICAgICB2YXIgY2FjaGUgPSBtZW1vaXplLmNhY2hlOwogICAgICAgICAgICAgICAgdmFyIGFkZHJlc3MgPSAnJyArIChoYXNoRm4gPyBoYXNoRm4uYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IGtleSk7CiAgICAgICAgICAgICAgICBpZiAoIWhhcyhjYWNoZSwgYWRkcmVzcykpIGNhY2hlW2FkZHJlc3NdID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZVthZGRyZXNzXTsKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIG1lbW9pemUuY2FjaGUgPSB7fTsKICAgICAgICAgICAgcmV0dXJuIG1lbW9pemU7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGZpYm9uYWNjaSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uZmlib25hY2NpID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2FsY3VsYXRlIGZpYm9uYWNjaSBudW1iZXIuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8biAgICAgfEluZGV4IG9mIGZpYm9uYWNjaSBzZXF1ZW5jZXwKICAgICAgICAgKiB8cmV0dXJufEV4cGVjdGVkIGZpYm9uYWNjaSBudW1iZXIgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGZpYm9uYWNjaSgxKTsgLy8gLT4gMQogICAgICAgICAqIGZpYm9uYWNjaSgzKTsgLy8gLT4gMgogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZmlib25hY2NpKG46IG51bWJlcik6IG51bWJlcjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogbWVtb2l6ZSAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IG1lbW9pemUoZnVuY3Rpb24obikgewogICAgICAgICAgICByZXR1cm4gbiA8IDIgPyBuIDogZXhwb3J0cyhuIC0gMSkgKyBleHBvcnRzKG4gLSAyKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGZpbGVTaXplIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5maWxlU2l6ZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFR1cm4gYnl0ZXMgaW50byBodW1hbiByZWFkYWJsZSBmaWxlIHNpemUuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8Ynl0ZXMgfEZpbGUgYnl0ZXMgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFJlYWRhYmxlIGZpbGUgc2l6ZXwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGZpbGVTaXplKDUpOyAvLyAtPiAnNScKICAgICAgICAgKiBmaWxlU2l6ZSgxNTAwKTsgLy8gLT4gJzEuNDZLJwogICAgICAgICAqIGZpbGVTaXplKDE1MDAwMDApOyAvLyAtPiAnMS40M00nCiAgICAgICAgICogZmlsZVNpemUoMTUwMDAwMDAwMCk7IC8vIC0+ICcxLjRHJwogICAgICAgICAqIGZpbGVTaXplKDE1MDAwMDAwMDAwMDApOyAvLyAtPiAnMS4zNlQnCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBmaWxlU2l6ZShieXRlczogbnVtYmVyKTogc3RyaW5nOwogICAgICAgICAqLwogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihieXRlcykgewogICAgICAgICAgICBpZiAoYnl0ZXMgPD0gMCkgcmV0dXJuICcwJzsKICAgICAgICAgICAgdmFyIHN1ZmZpeElkeCA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coMTAyNCkpOwogICAgICAgICAgICB2YXIgdmFsID0gYnl0ZXMgLyBNYXRoLnBvdygyLCBzdWZmaXhJZHggKiAxMCk7CiAgICAgICAgICAgIHJldHVybiArdmFsLnRvRml4ZWQoMikgKyBzdWZmaXhMaXN0W3N1ZmZpeElkeF07CiAgICAgICAgfTsKCiAgICAgICAgdmFyIHN1ZmZpeExpc3QgPSBbJycsICdLJywgJ00nLCAnRycsICdUJ107CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdGFydFdpdGggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIHN0YXJ0V2l0aCA9IF8uc3RhcnRXaXRoID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2sgaWYgc3RyaW5nIHN0YXJ0cyB3aXRoIHRoZSBnaXZlbiB0YXJnZXQgc3RyaW5nLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHN0ciAgIHxTdHJpbmcgdG8gc2VhcmNoICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHByZWZpeHxTdHJpbmcgcHJlZml4ICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxUcnVlIGlmIHN0cmluZyBzdGFydHMgd2l0aCBwcmVmaXh8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBzdGFydFdpdGgoJ2FiJywgJ2EnKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc3RhcnRXaXRoKHN0cjogc3RyaW5nLCBwcmVmaXg6IHN0cmluZyk6IGJvb2xlYW47CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHN0ciwgcHJlZml4KSB7CiAgICAgICAgICAgIHJldHVybiBzdHIuaW5kZXhPZihwcmVmaXgpID09PSAwOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBsYXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBsYXN0ID0gXy5sYXN0ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYXJyYXkuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxhcnIgICB8VGhlIGFycmF5IHRvIHF1ZXJ5ICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRoZSBsYXN0IGVsZW1lbnQgb2YgYXJyYXl8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBsYXN0KFsxLCAyXSk7IC8vIC0+IDIKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGxhc3QoYXJyOiBhbnlbXSk6IGFueTsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oYXJyKSB7CiAgICAgICAgICAgIHZhciBsZW4gPSBhcnIgPyBhcnIubGVuZ3RoIDogMDsKICAgICAgICAgICAgaWYgKGxlbikgcmV0dXJuIGFycltsZW4gLSAxXTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3RyaXBDbXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIHN0cmlwQ210ID0gXy5zdHJpcENtdCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFN0cmlwIGNvbW1lbnRzIGZyb20gc291cmNlIGNvZGUuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8c3RyICAgfFNvdXJjZSBjb2RlICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufENvZGUgd2l0aG91dCBjb21tZW50c3wKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHN0cmlwQ210KCcvLyBjb21tZW50IFxuIHZhciBhID0gNTsgLyogY29tbWVudDJcbiAqIGNvbW1lbnQzXG4gKlwvJyk7IC8vIC0+ICcgdmFyIGEgPSA1OyAnCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzdHJpcENtdChzdHI6IHN0cmluZyk6IHN0cmluZzsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgIHN0ciA9ICgnX18nICsgc3RyICsgJ19fJykuc3BsaXQoJycpOwogICAgICAgICAgICB2YXIgbW9kZSA9IHsKICAgICAgICAgICAgICAgIHNpbmdsZVF1b3RlOiBmYWxzZSwKICAgICAgICAgICAgICAgIGRvdWJsZVF1b3RlOiBmYWxzZSwKICAgICAgICAgICAgICAgIHJlZ2V4OiBmYWxzZSwKICAgICAgICAgICAgICAgIGJsb2NrQ29tbWVudDogZmFsc2UsCiAgICAgICAgICAgICAgICBsaW5lQ29tbWVudDogZmFsc2UsCiAgICAgICAgICAgICAgICBjb25kQ29tcDogZmFsc2UKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc3RyLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKG1vZGUucmVnZXgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyW2ldID09PSAnLycgJiYgc3RyW2kgLSAxXSAhPT0gJ1xcJykgbW9kZS5yZWdleCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChtb2RlLnNpbmdsZVF1b3RlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cltpXSA9PT0gIiciICYmIHN0cltpIC0gMV0gIT09ICdcXCcpIG1vZGUuc2luZ2xlUXVvdGUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAobW9kZS5kb3VibGVRdW90ZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChzdHJbaV0gPT09ICciJyAmJiBzdHJbaSAtIDFdICE9PSAnXFwnKSBtb2RlLmRvdWJsZVF1b3RlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKG1vZGUuYmxvY2tDb21tZW50KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cltpXSA9PT0gJyonICYmIHN0cltpICsgMV0gPT09ICcvJykgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJbaSArIDFdID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUuYmxvY2tDb21tZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBzdHJbaV0gPSAnJzsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAobW9kZS5saW5lQ29tbWVudCkgewogICAgICAgICAgICAgICAgICAgIGlmIChzdHJbaSArIDFdID09PSAnXG4nKSBtb2RlLmxpbmVDb21tZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgc3RyW2ldID0gJyc7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbW9kZS5kb3VibGVRdW90ZSA9IHN0cltpXSA9PT0gJyInOwogICAgICAgICAgICAgICAgbW9kZS5zaW5nbGVRdW90ZSA9IHN0cltpXSA9PT0gIiciOwoKICAgICAgICAgICAgICAgIGlmIChzdHJbaV0gPT09ICcvJykgewogICAgICAgICAgICAgICAgICAgIGlmIChzdHJbaSArIDFdID09PSAnKicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RyW2ldID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUuYmxvY2tDb21tZW50ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyW2kgKyAxXSA9PT0gJy8nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cltpXSA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICBtb2RlLmxpbmVDb21tZW50ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBtb2RlLnJlZ2V4ID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHN0ci5qb2luKCcnKS5zbGljZSgyLCAtMik7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdjZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgZ2NkID0gXy5nY2QgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDb21wdXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciB1c2luZyBFdWNsaWQncyBhbGdvcml0aG0uCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGEgICAgIHxOdW1iZXIgdG8gY2FsY3VsYXRlICAgIHwKICAgICAgICAgKiB8YiAgICAgfE51bWJlciB0byBjYWxjdWxhdGUgICAgfAogICAgICAgICAqIHxyZXR1cm58R3JlYXRlc3QgY29tbW9uIGRpdmlzb3J8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBnY2QoMTIxLCA0NCk7IC8vIC0+IDExCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnY2QoYTogbnVtYmVyLCBiOiBudW1iZXIpOiBudW1iZXI7CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGEsIGIpIHsKICAgICAgICAgICAgaWYgKGIgPT09IDApIHJldHVybiBhOwogICAgICAgICAgICByZXR1cm4gZXhwb3J0cyhiLCBhICUgYik7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHByZWNpc2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgcHJlY2lzaW9uID0gXy5wcmVjaXNpb24gPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBGaW5kIGRlY2ltYWwgcHJlY2lzaW9uIG9mIGEgZ2l2ZW4gbnVtYmVyLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG51bSAgIHxOdW1iZXIgdG8gY2hlY2t8CiAgICAgICAgICogfHJldHVybnxQcmVjaXNpb24gICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBwcmVjaXNpb24oMS4yMzQpOyAvLyAtPiAzOwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcHJlY2lzaW9uKG51bTogbnVtYmVyKTogbnVtYmVyOwogICAgICAgICAqLwogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihudW0pIHsKICAgICAgICAgICAgbnVtID0gbnVtLnRvRXhwb25lbnRpYWwoKS5tYXRjaChyZWdFeHBvbmVudGlhbCk7CiAgICAgICAgICAgIHZhciBjb2VmZmljaWVudCA9IG51bVsxXTsKICAgICAgICAgICAgdmFyIGV4cG9uZW50ID0gcGFyc2VJbnQobnVtWzJdLCAxMCk7CiAgICAgICAgICAgIHZhciBwbGFjZXMgPSAoY29lZmZpY2llbnQuc3BsaXQoJy4nKVsxXSB8fCAnJykubGVuZ3RoOwogICAgICAgICAgICB2YXIgcmV0ID0gcGxhY2VzIC0gZXhwb25lbnQ7CiAgICAgICAgICAgIHJldHVybiByZXQgPCAwID8gMCA6IHJldDsKICAgICAgICB9OwoKICAgICAgICB2YXIgcmVnRXhwb25lbnRpYWwgPSAvXigtP1xkP1wuP1xkKyllKFsrLV1cZCkrLzsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGZyYWN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5mcmFjdGlvbiA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENvbnZlcnQgbnVtYmVyIHRvIGZyYWN0aW9uLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8bnVtICAgfE51bWJlciB0byBjb252ZXJ0ICAgICB8CiAgICAgICAgICogfHJldHVybnxDb3JyZXNwb25kaW5nIGZyYWN0aW9ufAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogZnJhY3Rpb24oMS4yKTsgLy8gLT4gJzYvNScKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGZyYWN0aW9uKG51bTogbnVtYmVyKTogc3RyaW5nOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBnY2QgcHJlY2lzaW9uIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24obnVtKSB7CiAgICAgICAgICAgIGlmIChudW0gPT09IDApIHJldHVybiAnMCc7CgogICAgICAgICAgICB2YXIgX3ByZWNpc2lvbiA9IHByZWNpc2lvbihudW0pOwoKICAgICAgICAgICAgX3ByZWNpc2lvbiA9IHBvdygxMCwgX3ByZWNpc2lvbik7CiAgICAgICAgICAgIHZhciBudW1lcmF0b3IgPSBudW0gKiBfcHJlY2lzaW9uLAogICAgICAgICAgICAgICAgZGVub21pbmF0b3IgPSBfcHJlY2lzaW9uOwoKICAgICAgICAgICAgdmFyIF9nY2QgPSBhYnMoZ2NkKG51bWVyYXRvciwgZGVub21pbmF0b3IpKTsKCiAgICAgICAgICAgIG51bWVyYXRvciAvPSBfZ2NkOwogICAgICAgICAgICBkZW5vbWluYXRvciAvPSBfZ2NkOwogICAgICAgICAgICByZXR1cm4gbnVtZXJhdG9yICsgJy8nICsgZGVub21pbmF0b3I7CiAgICAgICAgfTsKCiAgICAgICAgdmFyIGFicyA9IE1hdGguYWJzOwogICAgICAgIHZhciBwb3cgPSBNYXRoLnBvdzsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGZyZWV6ZURlZXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmZyZWV6ZURlZXAgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBSZWN1cnNpdmVseSB1c2UgT2JqZWN0LmZyZWV6ZS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG9iaiAgIHxPYmplY3QgdG8gZnJlZXplfAogICAgICAgICAqIHxyZXR1cm58T2JqZWN0IHBhc3NlZCBpbnwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnN0IGEgPSB7Yjoge2M6IDF9fTsKICAgICAgICAgKiBmcmVlemVEZWVwKGEpOwogICAgICAgICAqIGEuYi5jID0gMjsKICAgICAgICAgKiBjb25zb2xlLmxvZyhhKTsgLy8gLT4ge2I6IHtjOiAxfX0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGZyZWV6ZURlZXA8VD4ob2JqOiBUKTogVDsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogZnJlZXplIGtleXMgaXNPYmogCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihvYmopIHsKICAgICAgICAgICAgZnJlZXplKG9iaik7CiAgICAgICAgICAgIGtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApIHsKICAgICAgICAgICAgICAgIHZhciB2YWwgPSBvYmpbcHJvcF07CiAgICAgICAgICAgICAgICBpZiAoaXNPYmoodmFsKSAmJiAhT2JqZWN0LmlzRnJvemVuKHZhbCkpIGV4cG9ydHModmFsKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGxldmVuc2h0ZWluIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBsZXZlbnNodGVpbiA9IF8ubGV2ZW5zaHRlaW4gPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBMZXZlbnNodGVpbiBkaXN0YW5jZSBpbXBsZW1lbnRhdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxhICAgICB8Rmlyc3Qgc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxiICAgICB8U2Vjb25kIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58TGV2ZW5zaHRlaW4gZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBifAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogbGV2ZW5zaHRlaW4oJ2NhdCcsICdjYWtlJyk7IC8vIC0+IDIKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGxldmVuc2h0ZWluKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyOwogICAgICAgICAqLwogICAgICAgIHZhciB2ZWN0b3IgPSBbXTsKICAgICAgICB2YXIgYkNoYXJzID0gW107IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Zb21ndWl0aGVyZWFsL3RhbGlzbWFuLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oYSwgYikgewogICAgICAgICAgICBpZiAoYSA9PT0gYikgcmV0dXJuIDA7IC8vIE1ha2UgYSBpcyB0aGUgc2hvcnRlciBvbmUKCiAgICAgICAgICAgIGlmIChhLmxlbmd0aCA+IGIubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICB2YXIgdG1wID0gYTsKICAgICAgICAgICAgICAgIGEgPSBiOwogICAgICAgICAgICAgICAgYiA9IHRtcDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGFMZW4gPSBhLmxlbmd0aDsKICAgICAgICAgICAgdmFyIGJMZW4gPSBiLmxlbmd0aDsKICAgICAgICAgICAgaWYgKCFhTGVuKSByZXR1cm4gYkxlbjsKICAgICAgICAgICAgaWYgKCFiTGVuKSByZXR1cm4gYUxlbjsgLy8gSWdub3JlIGNvbW1vbiBzdWZmaXgKCiAgICAgICAgICAgIHdoaWxlIChhTGVuID4gMCAmJiBhLmNoYXJDb2RlQXQoYUxlbiAtIDEpID09PSBiLmNoYXJDb2RlQXQoYkxlbiAtIDEpKSB7CiAgICAgICAgICAgICAgICBhTGVuLS07CiAgICAgICAgICAgICAgICBiTGVuLS07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghYUxlbikgcmV0dXJuIGJMZW47IC8vIElnbm9yZSBjb21tb24gcHJlZml4CgogICAgICAgICAgICB2YXIgc3RhcnQgPSAwOwoKICAgICAgICAgICAgd2hpbGUgKHN0YXJ0IDwgYUxlbiAmJiBhLmNoYXJDb2RlQXQoc3RhcnQpID09PSBiLmNoYXJDb2RlQXQoc3RhcnQpKSB7CiAgICAgICAgICAgICAgICBzdGFydCsrOwogICAgICAgICAgICB9CgogICAgICAgICAgICBhTGVuIC09IHN0YXJ0OwogICAgICAgICAgICBiTGVuIC09IHN0YXJ0OwogICAgICAgICAgICBpZiAoIWFMZW4pIHJldHVybiBiTGVuOwogICAgICAgICAgICB2YXIgY3VycmVudCA9IDA7CiAgICAgICAgICAgIHZhciBsZWZ0OwogICAgICAgICAgICB2YXIgYWJvdmU7CiAgICAgICAgICAgIHZhciBjaGFyQTsKICAgICAgICAgICAgdmFyIGkgPSAwOwoKICAgICAgICAgICAgd2hpbGUgKGkgPCBiTGVuKSB7CiAgICAgICAgICAgICAgICBiQ2hhcnNbaV0gPSBiLmNoYXJDb2RlQXQoc3RhcnQgKyBpKTsKICAgICAgICAgICAgICAgIHZlY3RvcltpXSA9ICsraTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvKiB8IHwgfG98YXwKICAgICAgICAgICAgICogfCB8MHwxfDJ8CiAgICAgICAgICAgICAqIHxyfDF8MXwyfOKGkAogICAgICAgICAgICAgKiB8b3wyfDF8MnwKICAgICAgICAgICAgICogfGF8M3wyfDF8CiAgICAgICAgICAgICAqICAgICAg4oaRCiAgICAgICAgICAgICAqIGE6IG9hCiAgICAgICAgICAgICAqIGI6IHJvYQogICAgICAgICAgICAgKiByb3c6IFsxLCAyLCAzXQogICAgICAgICAgICAgKi8KCiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhTGVuOyBfaSsrKSB7CiAgICAgICAgICAgICAgICBsZWZ0ID0gX2k7CiAgICAgICAgICAgICAgICBjdXJyZW50ID0gX2kgKyAxOwogICAgICAgICAgICAgICAgY2hhckEgPSBhLmNoYXJDb2RlQXQoc3RhcnQgKyBfaSk7CgogICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBiTGVuOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICBhYm92ZSA9IGN1cnJlbnQ7CiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGxlZnQ7CiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHZlY3RvcltqXTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJBICE9PSBiQ2hhcnNbal0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnQgPCBjdXJyZW50KSBjdXJyZW50ID0gbGVmdDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFib3ZlIDwgY3VycmVudCkgY3VycmVudCA9IGFib3ZlOwogICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Kys7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB2ZWN0b3Jbal0gPSBjdXJyZW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gY3VycmVudDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaWRlbnRpdHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGlkZW50aXR5ID0gXy5pZGVudGl0eSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFJldHVybiB0aGUgZmlyc3QgYXJndW1lbnQgZ2l2ZW4uCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbCAgIHxBbnkgdmFsdWUgIHwKICAgICAgICAgKiB8cmV0dXJufEdpdmVuIHZhbHVlfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaWRlbnRpdHkoJ2EnKTsgLy8gLT4gJ2EnCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpZGVudGl0eTxUPih2YWw6IFQpOiBUOwogICAgICAgICAqLwogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaW5zZXJ0aW9uU29ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uaW5zZXJ0aW9uU29ydCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEluc2VydGlvbiBzb3J0IGltcGxlbWVudGF0aW9uLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8YXJyICAgfEFycmF5IHRvIHNvcnR8CiAgICAgICAgICogfGNtcCAgIHxDb21wYXJhdG9yICAgfAogICAgICAgICAqIHxyZXR1cm58U29ydGVkIGFycmF5IHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGluc2VydGlvblNvcnQoWzIsIDFdKTsgLy8gLT4gWzEsIDJdCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpbnNlcnRpb25Tb3J0KGFycjogYW55W10sIGNtcD86IEZ1bmN0aW9uKTogYW55W107CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHN3YXAgaXNTb3J0ZWQgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihhcnIpIHsKICAgICAgICAgICAgdmFyIGNtcCA9CiAgICAgICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZAogICAgICAgICAgICAgICAgICAgID8gYXJndW1lbnRzWzFdCiAgICAgICAgICAgICAgICAgICAgOiBpc1NvcnRlZC5kZWZDb21wYXJhdG9yOwoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDEsIGxlbiA9IGFyci5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPiAwOyBqLS0pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY21wKGFycltqXSwgYXJyW2ogLSAxXSkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN3YXAoYXJyLCBqLCBqIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gYXJyOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpbnRlcnNlY3RSYW5nZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uaW50ZXJzZWN0UmFuZ2UgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBJbnRlcnNlY3QgdHdvIHJhbmdlcy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxhICAgICB8UmFuZ2UgYSAgICAgICAgICAgICAgfAogICAgICAgICAqIHxiICAgICB8UmFuZ2UgYiAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58SW50ZXJzZWN0aW9uIGlmIGV4aXN0fAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaW50ZXJzZWN0UmFuZ2Uoe3N0YXJ0OiAwLCBlbmQ6IDEyfSwge3N0YXJ0OiAxMSwgZW5kOiAxM30pOwogICAgICAgICAqIC8vIC0+IHtzdGFydDogMTEsIGVuZDogMTJ9CiAgICAgICAgICogaW50ZXJzZWN0UmFuZ2Uoe3N0YXJ0OiAwLCBlbmQ6IDV9LCB7c3RhcnQ6IDYsIGVuZDogN30pOwogICAgICAgICAqIC8vIC0+IHVuZGVmaW5lZAogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIGludGVyc2VjdFJhbmdlIHsKICAgICAgICAgKiAgICAgaW50ZXJmYWNlIElSYW5nZSB7CiAgICAgICAgICogICAgICAgICBzdGFydDogbnVtYmVyOwogICAgICAgICAqICAgICAgICAgZW5kOiBudW1iZXI7CiAgICAgICAgICogICAgIH0KICAgICAgICAgKiB9CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaW50ZXJzZWN0UmFuZ2UoCiAgICAgICAgICogICAgIGE6IGludGVyc2VjdFJhbmdlLklSYW5nZSwKICAgICAgICAgKiAgICAgYjogaW50ZXJzZWN0UmFuZ2UuSVJhbmdlCiAgICAgICAgICogKTogaW50ZXJzZWN0UmFuZ2UuSVJhbmdlIHwgdm9pZDsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oYSwgYikgewogICAgICAgICAgICB2YXIgbWluID0gYS5zdGFydCA8IGIuc3RhcnQgPyBhIDogYjsKICAgICAgICAgICAgdmFyIG1heCA9IG1pbiA9PT0gYSA/IGIgOiBhOwogICAgICAgICAgICBpZiAobWluLmVuZCA8IG1heC5zdGFydCkgcmV0dXJuOwogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgc3RhcnQ6IG1heC5zdGFydCwKICAgICAgICAgICAgICAgIGVuZDogbWluLmVuZCA8IG1heC5lbmQgPyBtaW4uZW5kIDogbWF4LmVuZAogICAgICAgICAgICB9OwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpbnZhcmlhbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmludmFyaWFudCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEZhY2Vib29rJ3MgaW52YXJpYW50LgogICAgICAgICAqCiAgICAgICAgICogW1JlbGF0ZWQgZG9jc10oaHR0cHM6Ly9naXRodWIuY29tL3plcnRvc2gvaW52YXJpYW50KQogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaW52YXJpYW50KHRydWUsICdUaGlzIHdpbGwgbm90IHRocm93Jyk7CiAgICAgICAgICogLy8gTm8gZXJyb3JzCiAgICAgICAgICogaW52YXJpYW50KGZhbHNlLCAnVGhpcyB3aWxsIHRocm93IGFuIGVycm9yIHdpdGggdGhpcyBtZXNzYWdlJyk7CiAgICAgICAgICogLy8gRXJyb3I6IEludmFyaWFudCBWaW9sYXRpb246IFRoaXMgd2lsbCB0aHJvdyBhbiBlcnJvciB3aXRoIHRoaXMgbWVzc2FnZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaW52YXJpYW50KAogICAgICAgICAqICAgICBjb25kaXRpb246IGJvb2xlYW4sCiAgICAgICAgICogICAgIGZvcm1hdD86IHN0cmluZywKICAgICAgICAgKiAgICAgYT86IHN0cmluZywKICAgICAgICAgKiAgICAgYj86IHN0cmluZywKICAgICAgICAgKiAgICAgYz86IHN0cmluZywKICAgICAgICAgKiAgICAgZD86IHN0cmluZywKICAgICAgICAgKiAgICAgZT86IHN0cmluZywKICAgICAgICAgKiAgICAgZj86IHN0cmluZwogICAgICAgICAqICk6IHZvaWQ7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHJvb3QgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwgZSwgZikgewogICAgICAgICAgICB2YXIgcHJvY2VzcyA9IHJvb3QucHJvY2VzcyB8fCB7CiAgICAgICAgICAgICAgICBlbnY6IHsKICAgICAgICAgICAgICAgICAgICBOT0RFX0VOVjogJ2RldmVsb3BtZW50JwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YXJpYW50IHJlcXVpcmVzIGFuIGVycm9yIG1lc3NhZ2UgYXJndW1lbnQnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFjb25kaXRpb24pIHsKICAgICAgICAgICAgICAgIHZhciBlcnJvcjsKCiAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgJ01pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50ICcgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJwogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW2EsIGIsIGMsIGQsIGUsIGZdOwogICAgICAgICAgICAgICAgICAgIHZhciBhcmdJbmRleCA9IDA7CiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdOwogICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgZXJyb3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7CiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc0Fic29sdXRlVXJsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5pc0Fic29sdXRlVXJsID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2sgaWYgYW4gdXJsIGlzIGFic29sdXRlLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx1cmwgICB8VXJsIHRvIGNoZWNrICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxUcnVlIGlmIHVybCBpcyBhYnNvbHV0ZXwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGlzQWJzb2x1dGVVcmwoJ2h0dHA6Ly93d3cuc3VydW56aS5jb20nKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqIGlzQWJzb2x1dGVVcmwoJy8vd3d3LnN1cnVuemkuY29tJyk7IC8vIC0+IGZhbHNlCiAgICAgICAgICogaXNBYnNvbHV0ZVVybCgnc3VydW56aS5jb20nKTsgLy8gLT4gZmFsc2UKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGlzQWJzb2x1dGVVcmwodXJsOiBzdHJpbmcpOiBib29sZWFuOwogICAgICAgICAqLwogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbih1cmwpIHsKICAgICAgICAgICAgcmV0dXJuIHJlZ0Fic29sdXRlLnRlc3QodXJsKTsKICAgICAgICB9OwoKICAgICAgICB2YXIgcmVnQWJzb2x1dGUgPSAvXlthLXpdW2EtejAtOSsuLV0qOi87CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBvYmpUb1N0ciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgb2JqVG9TdHIgPSBfLm9ialRvU3RyID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQWxpYXMgb2YgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx2YWwgICB8U291cmNlIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58U3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGdpdmVuIHZhbHVlfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogb2JqVG9TdHIoNSk7IC8vIC0+ICdbb2JqZWN0IE51bWJlcl0nCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBvYmpUb1N0cih2YWw6IGFueSk6IHN0cmluZzsKICAgICAgICAgKi8KICAgICAgICB2YXIgT2JqVG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIHJldHVybiBPYmpUb1N0ci5jYWxsKHZhbCk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlzQXJncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgaXNBcmdzID0gXy5pc0FyZ3MgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDaGVjayBpZiB2YWx1ZSBpcyBjbGFzc2lmaWVkIGFzIGFuIGFyZ3VtZW50cyBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8dmFsICAgfFZhbHVlIHRvIGNoZWNrICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgdmFsdWUgaXMgYW4gYXJndW1lbnRzIG9iamVjdHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIChmdW5jdGlvbiAoKSB7CiAgICAgICAgICogICAgIGlzQXJncyhhcmd1bWVudHMpOyAvLyAtPiB0cnVlCiAgICAgICAgICogfSkoKTsKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGlzQXJncyh2YWw6IGFueSk6IGJvb2xlYW47CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIG9ialRvU3RyIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIHJldHVybiBvYmpUb1N0cih2YWwpID09PSAnW29iamVjdCBBcmd1bWVudHNdJzsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaXNBcnIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGlzQXJyID0gXy5pc0FyciA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENoZWNrIGlmIHZhbHVlIGlzIGFuIGBBcnJheWAgb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8dmFsICAgfFZhbHVlIHRvIGNoZWNrICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxUcnVlIGlmIHZhbHVlIGlzIGFuIGBBcnJheWAgb2JqZWN0fAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNBcnIoW10pOyAvLyAtPiB0cnVlCiAgICAgICAgICogaXNBcnIoe30pOyAvLyAtPiBmYWxzZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaXNBcnIodmFsOiBhbnkpOiBib29sZWFuOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBvYmpUb1N0ciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9CiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkgfHwKICAgICAgICAgICAgZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gb2JqVG9TdHIodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXldJzsKICAgICAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNhc3RQYXRoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBjYXN0UGF0aCA9IF8uY2FzdFBhdGggPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDYXN0IHZhbHVlIGludG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8cGF0aCAgfFZhbHVlIHRvIGluc3BlY3QgICB8CiAgICAgICAgICogfG9iaiAgIHxPYmplY3QgdG8gcXVlcnkgICAgfAogICAgICAgICAqIHxyZXR1cm58UHJvcGVydHkgcGF0aCBhcnJheXwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNhc3RQYXRoKCdhLmIuYycpOyAvLyAtPiBbJ2EnLCAnYicsICdjJ10KICAgICAgICAgKiBjYXN0UGF0aChbJ2EnXSk7IC8vIC0+IFsnYSddCiAgICAgICAgICogY2FzdFBhdGgoJ2FbMF0uYicpOyAvLyAtPiBbJ2EnLCAnMCcsICdiJ10KICAgICAgICAgKiBjYXN0UGF0aCgnYS5iLmMnLCB7J2EuYi5jJzogdHJ1ZX0pOyAvLyAtPiBbJ2EuYi5jJ10KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNhc3RQYXRoKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBvYmo/OiBhbnkpOiBzdHJpbmdbXTsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaGFzIGlzQXJyIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oc3RyLCBvYmopIHsKICAgICAgICAgICAgaWYgKGlzQXJyKHN0cikpIHJldHVybiBzdHI7CiAgICAgICAgICAgIGlmIChvYmogJiYgaGFzKG9iaiwgc3RyKSkgcmV0dXJuIFtzdHJdOwogICAgICAgICAgICB2YXIgcmV0ID0gW107CiAgICAgICAgICAgIHN0ci5yZXBsYWNlKHJlZ1Byb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3RyKSB7CiAgICAgICAgICAgICAgICByZXQucHVzaChxdW90ZSA/IHN0ci5yZXBsYWNlKHJlZ0VzY2FwZUNoYXIsICckMScpIDogbnVtYmVyIHx8IG1hdGNoKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfTsgLy8gTG9kYXNoIF9zdHJpbmdUb1BhdGgKCiAgICAgICAgdmFyIHJlZ1Byb3BOYW1lID0gL1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2c7CiAgICAgICAgdmFyIHJlZ0VzY2FwZUNoYXIgPSAvXFwoXFwpPy9nOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2FmZURlbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgc2FmZURlbCA9IF8uc2FmZURlbCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIERlbGV0ZSBvYmplY3QgcHJvcGVydHkuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG9iaiAgIHxPYmplY3QgdG8gcXVlcnkgICAgICAgICAgIHwKICAgICAgICAgKiB8cGF0aCAgfFBhdGggb2YgcHJvcGVydHkgdG8gZGVsZXRlfAogICAgICAgICAqIHxyZXR1cm58RGVsZXRlZCB2YWx1ZSBvciB1bmRlZmluZWR8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBvYmogPSB7YToge2FhOiB7YWFhOiAxfX19OwogICAgICAgICAqIHNhZmVEZWwob2JqLCAnYS5hYS5hYWEnKTsgLy8gLT4gMQogICAgICAgICAqIHNhZmVEZWwob2JqLCBbJ2EnLCAnYWEnXSk7IC8vIC0+IHt9CiAgICAgICAgICogc2FmZURlbChvYmosICdhLmInKTsgLy8gLT4gdW5kZWZpbmVkCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzYWZlRGVsKG9iajogYW55LCBwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSk6IGFueTsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNVbmRlZiBjYXN0UGF0aCAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgcGF0aCkgewogICAgICAgICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqKTsKICAgICAgICAgICAgdmFyIHByb3AsIHJldDsKICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi8KCiAgICAgICAgICAgIHdoaWxlICgocHJvcCA9IHBhdGguc2hpZnQoKSkpIHsKICAgICAgICAgICAgICAgIHJldCA9IG9ialtwcm9wXTsKICAgICAgICAgICAgICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgZGVsZXRlIG9ialtwcm9wXTsKICAgICAgICAgICAgICAgIG9iaiA9IHJldDsKICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmKG9iaikpIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2FmZUdldCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgc2FmZUdldCA9IF8uc2FmZUdldCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEdldCBvYmplY3QgcHJvcGVydHksIGRvbid0IHRocm93IHVuZGVmaW5lZCBlcnJvci4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG9iaiAgIHxPYmplY3QgdG8gcXVlcnkgICAgICAgICAgfAogICAgICAgICAqIHxwYXRoICB8UGF0aCBvZiBwcm9wZXJ0eSB0byBnZXQgIHwKICAgICAgICAgKiB8cmV0dXJufFRhcmdldCB2YWx1ZSBvciB1bmRlZmluZWR8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBvYmogPSB7YToge2FhOiB7YWFhOiAxfX19OwogICAgICAgICAqIHNhZmVHZXQob2JqLCAnYS5hYS5hYWEnKTsgLy8gLT4gMQogICAgICAgICAqIHNhZmVHZXQob2JqLCBbJ2EnLCAnYWEnXSk7IC8vIC0+IHthYWE6IDF9CiAgICAgICAgICogc2FmZUdldChvYmosICdhLmInKTsgLy8gLT4gdW5kZWZpbmVkCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzYWZlR2V0KG9iajogYW55LCBwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSk6IGFueTsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNVbmRlZiBjYXN0UGF0aCAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgcGF0aCkgewogICAgICAgICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqKTsKICAgICAgICAgICAgdmFyIHByb3A7CiAgICAgICAgICAgIHByb3AgPSBwYXRoLnNoaWZ0KCk7CgogICAgICAgICAgICB3aGlsZSAoIWlzVW5kZWYocHJvcCkpIHsKICAgICAgICAgICAgICAgIG9iaiA9IG9ialtwcm9wXTsKICAgICAgICAgICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuOwogICAgICAgICAgICAgICAgcHJvcCA9IHBhdGguc2hpZnQoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2FmZVNldCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgc2FmZVNldCA9IF8uc2FmZVNldCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFNldCB2YWx1ZSBhdCBwYXRoIG9mIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIElmIGEgcG9ydGlvbiBvZiBwYXRoIGRvZXNuJ3QgZXhpc3QsIGl0J3MgY3JlYXRlZC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lfERlc2MgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxvYmogfE9iamVjdCB0byBtb2RpZnkgICAgICAgfAogICAgICAgICAqIHxwYXRofFBhdGggb2YgcHJvcGVydHkgdG8gc2V0fAogICAgICAgICAqIHx2YWwgfFZhbHVlIHRvIHNldCAgICAgICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3Qgb2JqID0ge307CiAgICAgICAgICogc2FmZVNldChvYmosICdhLmFhLmFhYScsIDEpOyAvLyBvYmogPSB7YToge2FhOiB7YWFhOiAxfX19CiAgICAgICAgICogc2FmZVNldChvYmosIFsnYScsICdhYSddLCAyKTsgLy8gb2JqID0ge2E6IHthYTogMn19CiAgICAgICAgICogc2FmZVNldChvYmosICdhLmInLCAzKTsgLy8gb2JqID0ge2E6IHthYTogMiwgYjogM319CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzYWZlU2V0KG9iajogYW55LCBwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSwgdmFsOiBhbnkpOiB2b2lkOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBjYXN0UGF0aCBpc1VuZGVmIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24ob2JqLCBwYXRoLCB2YWwpIHsKICAgICAgICAgICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iaik7CiAgICAgICAgICAgIHZhciBsYXN0UHJvcCA9IHBhdGgucG9wKCk7CiAgICAgICAgICAgIHZhciBwcm9wOwogICAgICAgICAgICBwcm9wID0gcGF0aC5zaGlmdCgpOwoKICAgICAgICAgICAgd2hpbGUgKCFpc1VuZGVmKHByb3ApKSB7CiAgICAgICAgICAgICAgICBpZiAoIW9ialtwcm9wXSkgb2JqW3Byb3BdID0ge307CiAgICAgICAgICAgICAgICBvYmogPSBvYmpbcHJvcF07CiAgICAgICAgICAgICAgICBwcm9wID0gcGF0aC5zaGlmdCgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBvYmpbbGFzdFByb3BdID0gdmFsOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBmbGF0dGVuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBmbGF0dGVuID0gXy5mbGF0dGVuID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogUmVjdXJzaXZlbHkgZmxhdHRlbiBhbiBhcnJheS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGFyciAgIHxBcnJheSB0byBmbGF0dGVuICAgfAogICAgICAgICAqIHxyZXR1cm58TmV3IGZsYXR0ZW5lZCBhcnJheXwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGZsYXR0ZW4oWydhJywgWydiJywgWydjJ11dLCAnZCcsIFsnZSddXSk7IC8vIC0+IFsnYScsICdiJywgJ2MnLCAnZCcsICdlJ10KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGZsYXR0ZW4oYXJyOiBhbnlbXSk6IGFueVtdOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBpc0FyciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGFycikgewogICAgICAgICAgICByZXR1cm4gZmxhdChhcnIsIFtdKTsKICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBmbGF0KGFyciwgcmVzKSB7CiAgICAgICAgICAgIHZhciBsZW4gPSBhcnIubGVuZ3RoLAogICAgICAgICAgICAgICAgaSA9IC0xLAogICAgICAgICAgICAgICAgY3VyOwoKICAgICAgICAgICAgd2hpbGUgKGxlbi0tKSB7CiAgICAgICAgICAgICAgICBjdXIgPSBhcnJbKytpXTsKICAgICAgICAgICAgICAgIGlzQXJyKGN1cikgPyBmbGF0KGN1ciwgcmVzKSA6IHJlcy5wdXNoKGN1cik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaXNBcnJCdWZmZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGlzQXJyQnVmZmVyID0gXy5pc0FyckJ1ZmZlciA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENoZWNrIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8dmFsICAgfFZhbHVlIHRvIGNoZWNrICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNBcnJCdWZmZXIobmV3IEFycmF5QnVmZmVyKDgpKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaXNBcnJCdWZmZXIodmFsOiBhbnkpOiBib29sZWFuOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBvYmpUb1N0ciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICByZXR1cm4gb2JqVG9TdHIodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJzsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaXNEYXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBpc0RhdGUgPSBfLmlzRGF0ZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENoZWNrIGlmIHZhbHVlIGlzIGNsYXNzaWZpZWQgYXMgYSBEYXRlIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx2YWwgICB8dmFsdWUgdG8gY2hlY2sgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58VHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUgb2JqZWN0fAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNEYXRlKG5ldyBEYXRlKCkpOyAvLyAtPiB0cnVlCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpc0RhdGUodmFsOiBhbnkpOiBib29sZWFuOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBvYmpUb1N0ciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICByZXR1cm4gb2JqVG9TdHIodmFsKSA9PT0gJ1tvYmplY3QgRGF0ZV0nOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc0ZuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBpc0ZuID0gXy5pc0ZuID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2sgaWYgdmFsdWUgaXMgYSBmdW5jdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx2YWwgICB8VmFsdWUgdG8gY2hlY2sgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58VHJ1ZSBpZiB2YWx1ZSBpcyBhIGZ1bmN0aW9ufAogICAgICAgICAqCiAgICAgICAgICogR2VuZXJhdG9yIGZ1bmN0aW9uIGlzIGFsc28gY2xhc3NpZmllZCBhcyB0cnVlLgogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNGbihmdW5jdGlvbigpIHt9KTsgLy8gLT4gdHJ1ZQogICAgICAgICAqIGlzRm4oZnVuY3Rpb24qKCkge30pOyAvLyAtPiB0cnVlCiAgICAgICAgICogaXNGbihhc3luYyBmdW5jdGlvbigpIHt9KTsgLy8gLT4gdHJ1ZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaXNGbih2YWw6IGFueSk6IGJvb2xlYW47CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIG9ialRvU3RyIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIHZhciBvYmpTdHIgPSBvYmpUb1N0cih2YWwpOwogICAgICAgICAgICByZXR1cm4gKAogICAgICAgICAgICAgICAgb2JqU3RyID09PSAnW29iamVjdCBGdW5jdGlvbl0nIHx8CiAgICAgICAgICAgICAgICBvYmpTdHIgPT09ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScgfHwKICAgICAgICAgICAgICAgIG9ialN0ciA9PT0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nCiAgICAgICAgICAgICk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGdldFByb3RvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBnZXRQcm90byA9IF8uZ2V0UHJvdG8gPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBHZXQgcHJvdG90eXBlIG9mIGFuIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxvYmogICB8VGFyZ2V0IG9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58UHJvdG90eXBlIG9mIGdpdmVuIG9iamVjdCwgbnVsbCBpZiBub3QgZXhpc3RzfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3QgYSA9IHt9OwogICAgICAgICAqIGdldFByb3RvKE9iamVjdC5jcmVhdGUoYSkpOyAvLyAtPiBhCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZXRQcm90byhvYmo6IGFueSk6IGFueTsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNPYmogaXNGbiAKICAgICAgICAgKi8KCiAgICAgICAgdmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mOwogICAgICAgIHZhciBPYmplY3RDdHIgPSB7fS5jb25zdHJ1Y3RvcjsKCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgICAgICBpZiAoIWlzT2JqKG9iaikpIHJldHVybjsKICAgICAgICAgICAgaWYgKGdldFByb3RvdHlwZU9mKSByZXR1cm4gZ2V0UHJvdG90eXBlT2Yob2JqKTsKICAgICAgICAgICAgdmFyIHByb3RvID0gb2JqLl9fcHJvdG9fXzsKICAgICAgICAgICAgaWYgKHByb3RvIHx8IHByb3RvID09PSBudWxsKSByZXR1cm4gcHJvdG87CiAgICAgICAgICAgIGlmIChpc0ZuKG9iai5jb25zdHJ1Y3RvcikpIHJldHVybiBvYmouY29uc3RydWN0b3IucHJvdG90eXBlOwogICAgICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgT2JqZWN0Q3RyKSByZXR1cm4gT2JqZWN0Q3RyLnByb3RvdHlwZTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ29sYW5naWZ5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5nb2xhbmdpZnkgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBIYW5kbGUgZXJyb3JzIGxpa2UgZ29sYW5nLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGZuICAgIHxGdW5jdGlvbiB0aGF0IHJldHVybnMgYSBQcm9taXNlICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxMaWtlIGZuLCBidXQgcmVzb2x2ZXMgd2l0aCBbcmVzdWx0LCBlcnJvcl18CiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8cCAgICAgfFByb21pc2UgdG8gdHJhbnNmb3JtICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIFtyZXN1bHQsIGVycm9yXXwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIDsoYXN5bmMgKCkgPT4gewogICAgICAgICAqICAgICBsZXQgZm5BID0gZ29sYW5naWZ5KGFzeW5jICgpID0+IHsKICAgICAgICAgKiAgICAgICAgIHRocm93IEVycm9yKCdlcnInKQogICAgICAgICAqICAgICB9KTsKICAgICAgICAgKiAgICAgYXdhaXQgZm5BKCk7IC8vIC0+IFt1bmRlZmluZWQsIEVycm9yXQogICAgICAgICAqICAgICBsZXQgZm5CID0gZ29sYW5naWZ5KGFzeW5jIG51bSA9PiBudW0gKiAyKTsKICAgICAgICAgKiAgICAgYXdhaXQgZm5CKDIpOyAvLyAtPiBbNCwgbnVsbF0KICAgICAgICAgKgogICAgICAgICAqICAgICBhd2FpdCBnb2xhbmdpZnkoUHJvbWlzZS5yZWplY3QoRXJyb3IoJ2VycicpKSk7IC8vIC0+IFt1bmRlZmluZWQsIEVycm9yXQogICAgICAgICAqICAgICBhd2FpdCBnb2xhbmdpZnkoUHJvbWlzZS5yZXNvbHZlKDQpKTsgLy8gLT4gWzQsIG51bGxdCiAgICAgICAgICogfSkoKTsKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGdvbGFuZ2lmeTxULCBVID0gRXJyb3I+KAogICAgICAgICAqICAgICBmbjogKC4uLmFyZ3M6IGFueVtdKSA9PiBQcm9taXNlPFQ+CiAgICAgICAgICogKTogKC4uLmFyZ3M6IGFueVtdKSA9PiBQcm9taXNlPFtUIHwgdW5kZWZpbmVkLCBVIHwgbnVsbF0+OwogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGdvbGFuZ2lmeTxULCBVID0gRXJyb3I+KAogICAgICAgICAqICAgICBwOiBQcm9taXNlPFQ+CiAgICAgICAgICogKTogUHJvbWlzZTxbVCB8IHVuZGVmaW5lZCwgVSB8IG51bGxdPjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNGbiByZXN0QXJncyAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGZuKSB7CiAgICAgICAgICAgIGlmIChpc0ZuKGZuKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3RBcmdzKGZ1bmN0aW9uKGFyZ3MpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4KICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGx5KHRoaXMsIGFyZ3MpCiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdiwgbnVsbF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbihlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdm9pZCAwLCBlcnJdOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIGZuCiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24odikgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3YsIG51bGxdOwogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3ZvaWQgMCwgZXJyXTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc0J1ZmZlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgaXNCdWZmZXIgPSBfLmlzQnVmZmVyID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2sgaWYgdmFsdWUgaXMgYSBidWZmZXIuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx2YWwgICB8VGhlIHZhbHVlIHRvIGNoZWNrICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgdmFsdWUgaXMgYSBidWZmZXJ8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBpc0J1ZmZlcihuZXcgQnVmZmVyKDQpKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaXNCdWZmZXIodmFsOiBhbnkpOiBib29sZWFuOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBpc0ZuIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICBpZiAodmFsLl9pc0J1ZmZlcikgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICAgICB2YWwuY29uc3RydWN0b3IgJiYKICAgICAgICAgICAgICAgIGlzRm4odmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSAmJgogICAgICAgICAgICAgICAgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCkKICAgICAgICAgICAgKTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaXNNaW5pUHJvZ3JhbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgaXNNaW5pUHJvZ3JhbSA9IF8uaXNNaW5pUHJvZ3JhbSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENoZWNrIGlmIHJ1bm5pbmcgaW4gd2VjaGF0IG1pbmkgcHJvZ3JhbS4KICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnNvbGUubG9nKGlzTWluaVByb2dyYW0pOyAvLyAtPiB0cnVlIGlmIHJ1bm5pbmcgaW4gbWluaSBwcm9ncmFtLgogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNNaW5pUHJvZ3JhbTogYm9vbGVhbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNGbiAKICAgICAgICAgKi8KICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqLwoKICAgICAgICBleHBvcnRzID0gdHlwZW9mIHd4ICE9PSAndW5kZWZpbmVkJyAmJiBpc0ZuKHd4Lm9wZW5Mb2NhdGlvbik7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc1BsYWluT2JqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBpc1BsYWluT2JqID0gXy5pc1BsYWluT2JqID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2sgaWYgdmFsdWUgaXMgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgT2JqZWN0IGNvbnN0cnVjdG9yLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8dmFsICAgfFZhbHVlIHRvIGNoZWNrICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxUcnVlIGlmIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0fAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNQbGFpbk9iaih7fSk7IC8vIC0+IHRydWUKICAgICAgICAgKiBpc1BsYWluT2JqKFtdKTsgLy8gLT4gZmFsc2UKICAgICAgICAgKiBpc1BsYWluT2JqKGZ1bmN0aW9uICgpIHt9KTsgLy8gLT4gZmFsc2UKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGlzUGxhaW5PYmoodmFsOiBhbnkpOiBib29sZWFuOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBpc09iaiBpc0FyciBpc0ZuIGhhcyAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICBpZiAoIWlzT2JqKHZhbCkpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgdmFyIGN0b3IgPSB2YWwuY29uc3RydWN0b3I7CiAgICAgICAgICAgIGlmICghaXNGbihjdG9yKSkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICBpZiAoIWhhcyhjdG9yLnByb3RvdHlwZSwgJ2lzUHJvdG90eXBlT2YnKSkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICByZXR1cm4gIWlzQXJyKHZhbCkgJiYgIWlzRm4odmFsKTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaXNOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBpc05vZGUgPSBfLmlzTm9kZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENoZWNrIGlmIHJ1bm5pbmcgaW4gbm9kZS4KICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnNvbGUubG9nKGlzTm9kZSk7IC8vIC0+IHRydWUgaWYgcnVubmluZyBpbiBub2RlCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBjb25zdCBpc05vZGU6IGJvb2xlYW47CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIG9ialRvU3RyIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0KICAgICAgICAgICAgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIG9ialRvU3RyKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXSc7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBkZXByZWNhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmRlcHJlY2F0ZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIE5vZGUuanMgdXRpbC5kZXByZWNhdGUgd2l0aCBicm93c2VyIHN1cHBvcnQuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxmbiAgICB8RnVuY3Rpb24gdG8gYmUgZGVwcmVjYXRlZHwKICAgICAgICAgKiB8bXNnICAgfFdhcm5pbmcgbWVzc2FnZSAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxEZXByZWNhdGVkIGZ1bmN0aW9uICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3QgZm4gPSAoKSA9PiB7fTsKICAgICAgICAgKiBjb25zdCBvYnNvbGV0ZUZuID0gZGVwcmVjYXRlKGZuLCAnb2Jzb2xldGVGbiBpcyBkZXByZWNhdGVkLicpOwogICAgICAgICAqIG9ic29sZXRlRm4oKTsKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGRlcHJlY2F0ZShmbjogRnVuY3Rpb24sIG1zZzogc3RyaW5nKTogRnVuY3Rpb247CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlzTm9kZSByb290IG1lbVN0b3JhZ2UgCiAgICAgICAgICovCgogICAgICAgIGlmIChpc05vZGUpIHsKICAgICAgICAgICAgZXhwb3J0cyA9IHJlcXVpcmUoJ3V0aWwnKS5kZXByZWNhdGU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGxvY2FsU3RvcmFnZSA9IHJvb3QubG9jYWxTdG9yYWdlIHx8IG1lbVN0b3JhZ2U7CgogICAgICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oZm4sIG1zZykgewogICAgICAgICAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdub0RlcHJlY2F0aW9uJykpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIHdhcm5lZCA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCF3YXJuZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgd2FybmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqLwoKICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKG1zZyk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBmb3IgKAogICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBfa2V5IDwgX2xlbjsKICAgICAgICAgICAgICAgICAgICAgICAgX2tleSsrCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJncyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGRlcHJlY2F0ZWQsIGZuKTsKCiAgICAgICAgICAgICAgICBpZiAoZm4ucHJvdG90eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZC5wcm90b3R5cGUgPSBmbi5wcm90b3R5cGU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGRlcHJlY2F0ZWQ7CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaXNOdW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGlzTnVtID0gXy5pc051bSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENoZWNrIGlmIHZhbHVlIGlzIGNsYXNzaWZpZWQgYXMgYSBOdW1iZXIgcHJpbWl0aXZlIG9yIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbCAgIHxWYWx1ZSB0byBjaGVjayAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58VHJ1ZSBpZiB2YWx1ZSBpcyBjb3JyZWN0bHkgY2xhc3NpZmllZHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGlzTnVtKDUpOyAvLyAtPiB0cnVlCiAgICAgICAgICogaXNOdW0oNS4xKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqIGlzTnVtKHt9KTsgLy8gLT4gZmFsc2UKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGlzTnVtKHZhbDogYW55KTogYm9vbGVhbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogb2JqVG9TdHIgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgcmV0dXJuIG9ialRvU3RyKHZhbCkgPT09ICdbb2JqZWN0IE51bWJlcl0nOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpbmRlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmluZGVudCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEluZGVudCBlYWNoIGxpbmUgaW4gYSBzdHJpbmcuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHN0ciAgIHxTdHJpbmcgdG8gaW5kZW50ICAgIHwKICAgICAgICAgKiB8Y2hhciAgfENoYXJhY3RlciB0byBwcmVwZW5kfAogICAgICAgICAqIHxsZW4gICB8SW5kZW50IGxlbmd0aCAgICAgICB8CiAgICAgICAgICogfHJldHVybnxJbmRlbnRlZCBzdHJpbmcgICAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGluZGVudCgnZm9vXG5iYXInLCAnICcsIDQpOyAvLyAtPiAnICAgIGZvb1xuICAgIGJhcicKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGluZGVudChzdHI6IHN0cmluZywgY2hhcj86IHN0cmluZywgbGVuPzogbnVtYmVyKTogc3RyaW5nOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBpc051bSBpc1VuZGVmIHJlcGVhdCAKICAgICAgICAgKi8KCiAgICAgICAgdmFyIHJlZ0xpbmVCZWdpbiA9IC9eKD8hXHMqJCkvZ207CgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdHIsIGNoYXIsIGxlbikgewogICAgICAgICAgICBpZiAoaXNOdW0oY2hhcikpIHsKICAgICAgICAgICAgICAgIGxlbiA9IGNoYXI7CiAgICAgICAgICAgICAgICBjaGFyID0gJyAnOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaXNVbmRlZihsZW4pKSBsZW4gPSA0OwogICAgICAgICAgICBpZiAoaXNVbmRlZihjaGFyKSkgY2hhciA9ICcgJzsKICAgICAgICAgICAgY2hhciA9IHJlcGVhdChjaGFyLCBsZW4pOwogICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UocmVnTGluZUJlZ2luLCBjaGFyKTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaXNBcnJMaWtlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBpc0Fyckxpa2UgPSBfLmlzQXJyTGlrZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENoZWNrIGlmIHZhbHVlIGlzIGFycmF5LWxpa2UuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8dmFsICAgfFZhbHVlIHRvIGNoZWNrICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgdmFsdWUgaXMgYXJyYXkgbGlrZXwKICAgICAgICAgKgogICAgICAgICAqIEZ1bmN0aW9uIHJldHVybnMgZmFsc2UuCiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBpc0Fyckxpa2UoJ3Rlc3QnKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqIGlzQXJyTGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTsgLy8gLT4gdHJ1ZTsKICAgICAgICAgKiBpc0Fyckxpa2UoWzEsIDIsIDNdKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaXNBcnJMaWtlKHZhbDogYW55KTogYm9vbGVhbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNOdW0gaXNGbiAKICAgICAgICAgKi8KCiAgICAgICAgdmFyIE1BWF9BUlJfSURYID0gTWF0aC5wb3coMiwgNTMpIC0gMTsKCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICBpZiAoIXZhbCkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB2YXIgbGVuID0gdmFsLmxlbmd0aDsKICAgICAgICAgICAgcmV0dXJuIGlzTnVtKGxlbikgJiYgbGVuID49IDAgJiYgbGVuIDw9IE1BWF9BUlJfSURYICYmICFpc0ZuKHZhbCk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGVhY2ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGVhY2ggPSBfLmVhY2ggPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBJdGVyYXRlIG92ZXIgZWxlbWVudHMgb2YgY29sbGVjdGlvbiBhbmQgaW52b2tlcyBpdGVyYXRvciBmb3IgZWFjaCBlbGVtZW50LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxvYmogICAgIHxDb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3ZlciAgICB8CiAgICAgICAgICogfGl0ZXJhdG9yfEZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbnwKICAgICAgICAgKiB8Y3R4ICAgICB8RnVuY3Rpb24gY29udGV4dCAgICAgICAgICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogZWFjaCh7J2EnOiAxLCAnYic6IDJ9LCBmdW5jdGlvbiAodmFsLCBrZXkpIHt9KTsKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGVhY2g8VD4oCiAgICAgICAgICogICAgIGxpc3Q6IHR5cGVzLkxpc3Q8VD4sCiAgICAgICAgICogICAgIGl0ZXJhdG9yOiB0eXBlcy5MaXN0SXRlcmF0b3I8VCwgdm9pZD4sCiAgICAgICAgICogICAgIGN0eD86IGFueQogICAgICAgICAqICk6IHR5cGVzLkxpc3Q8VD47CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZWFjaDxUPigKICAgICAgICAgKiAgICAgb2JqZWN0OiB0eXBlcy5EaWN0aW9uYXJ5PFQ+LAogICAgICAgICAqICAgICBpdGVyYXRvcjogdHlwZXMuT2JqZWN0SXRlcmF0b3I8VCwgdm9pZD4sCiAgICAgICAgICogICAgIGN0eD86IGFueQogICAgICAgICAqICk6IHR5cGVzLkNvbGxlY3Rpb248VD47CiAgICAgICAgICovCgogICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlzQXJyTGlrZSBrZXlzIG9wdGltaXplQ2IgdHlwZXMgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihvYmosIGl0ZXJhdG9yLCBjdHgpIHsKICAgICAgICAgICAgaXRlcmF0b3IgPSBvcHRpbWl6ZUNiKGl0ZXJhdG9yLCBjdHgpOwogICAgICAgICAgICB2YXIgaSwgbGVuOwoKICAgICAgICAgICAgaWYgKGlzQXJyTGlrZShvYmopKSB7CiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBvYmoubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihvYmpbaV0sIGksIG9iaik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgX2tleXMgPSBrZXlzKG9iaik7CgogICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gX2tleXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcihvYmpbX2tleXNbaV1dLCBfa2V5c1tpXSwgb2JqKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYXJyVG9NYXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGFyclRvTWFwID0gXy5hcnJUb01hcCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIE1ha2UgYW4gb2JqZWN0IG1hcCB1c2luZyBhcnJheSBvZiBzdHJpbmdzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgfERlc2MgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGFyciAgICAgfEFycmF5IG9mIHN0cmluZ3N8CiAgICAgICAgICogfHZhbD10cnVlfEtleSB2YWx1ZSAgICAgICB8CiAgICAgICAgICogfHJldHVybiAgfE9iamVjdCBtYXAgICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBuZWVkUHggPSBhcnJUb01hcChbCiAgICAgICAgICogICAgICdjb2x1bW4tY291bnQnLCAnY29sdW1ucycsICdmb250LXdlaWdodCcsICdsaW5lLXdlaWdodCcsICdvcGFjaXR5JywgJ3otaW5kZXgnLCAnem9vbScKICAgICAgICAgKiBdKTsKICAgICAgICAgKiBjb25zdCBrZXkgPSAnY29sdW1uLWNvdW50JzsKICAgICAgICAgKiBsZXQgdmFsID0gJzUnOwogICAgICAgICAqIGlmIChuZWVkUHhba2V5XSkgdmFsICs9ICdweCc7CiAgICAgICAgICogY29uc29sZS5sb2codmFsKTsgLy8gLT4gJzVweCcKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGFyclRvTWFwPFQ+KAogICAgICAgICAqICAgICBhcnI6IHN0cmluZ1tdLAogICAgICAgICAqICAgICB2YWw/OiBUCiAgICAgICAgICogKTogeyBba2V5OiBzdHJpbmddOiBUIH07CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGVhY2ggaXNVbmRlZiBpc0ZuIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oYXJyLCB2YWwpIHsKICAgICAgICAgICAgaWYgKGlzVW5kZWYodmFsKSkgdmFsID0gdHJ1ZTsKCiAgICAgICAgICAgIHZhciBfaXNGbiA9IGlzRm4odmFsKTsKCiAgICAgICAgICAgIHZhciByZXQgPSB7fTsKICAgICAgICAgICAgZWFjaChhcnIsIGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICAgICAgcmV0W2tleV0gPSBfaXNGbiA/IHZhbChrZXkpIDogdmFsOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcGFyc2VIdG1sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBwYXJzZUh0bWwgPSBfLnBhcnNlSHRtbCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFNpbXBsZSBodG1sIHBhcnNlci4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgfERlc2MgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS18LS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8aHRtbCAgIHxIdG1sIHRvIHBhcnNlfAogICAgICAgICAqIHxoYW5kbGVyfEhhbmRsZXJzICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBwYXJzZUh0bWwoJzxkaXY+bGljaWE8L2Rpdj4nLCB7CiAgICAgICAgICogICAgIHN0YXJ0OiAodGFnLCBhdHRycywgdW5hcnkpID0+IHt9LAogICAgICAgICAqICAgICBlbmQ6ICh0YWcpID0+IHt9LAogICAgICAgICAqICAgICBjb21tZW50OiAodGV4dCkgPT4ge30sCiAgICAgICAgICogICAgIHRleHQ6ICh0ZXh0KSA9PiB7fQogICAgICAgICAqIH0pOwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcGFyc2VIdG1sKAogICAgICAgICAqICAgICBodG1sOiBzdHJpbmcsCiAgICAgICAgICogICAgIGhhbmRsZXJzOiB7CiAgICAgICAgICogICAgICAgICBzdGFydD86ICh0YWc6IHN0cmluZywgYXR0cnM6IGFueSwgdW5hcnk6IGJvb2xlYW4pID0+IHZvaWQ7CiAgICAgICAgICogICAgICAgICBlbmQ/OiAodGFnOiBzdHJpbmcpID0+IHZvaWQ7CiAgICAgICAgICogICAgICAgICBjb21tZW50PzogKHRleHQ6IHN0cmluZykgPT4gdm9pZDsKICAgICAgICAgKiAgICAgICAgIHRleHQ/OiAodGV4dDogc3RyaW5nKSA9PiB2b2lkOwogICAgICAgICAqICAgICB9CiAgICAgICAgICogKTogdm9pZDsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogbGFzdCBhcnJUb01hcCBzdGFydFdpdGggbG93ZXJDYXNlIAogICAgICAgICAqLyAvLyBodHRwczovL2pvaG5yZXNpZy5jb20vZmlsZXMvaHRtbHBhcnNlci5qcwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oaHRtbCwgaGFuZGxlcikgewogICAgICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICAgICAgdmFyIHRleHQ7CiAgICAgICAgICAgIHZhciBsYXN0SHRtbCA9IGh0bWw7CgogICAgICAgICAgICB3aGlsZSAoaHRtbCkgewogICAgICAgICAgICAgICAgdGV4dCA9IHRydWU7CgogICAgICAgICAgICAgICAgaWYgKCFsYXN0KHN0YWNrKSB8fCAhU1BFQ0lBTFtsYXN0KHN0YWNrKV0pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRXaXRoKGh0bWwsICc8IS0tJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZElkeCA9IGh0bWwuaW5kZXhPZignLS0+Jyk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5kSWR4ID49IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLmNvbW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmNvbW1lbnQoaHRtbC5zdWJzdHJpbmcoNCwgZW5kSWR4KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCA9IGh0bWwuc3Vic3RyaW5nKGVuZElkeCArIDMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydFdpdGgoaHRtbCwgJzwhJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gaHRtbC5tYXRjaChyZWdEb2N0eXBlKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIudGV4dCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnRleHQoaHRtbC5zdWJzdHJpbmcoMCwgbWF0Y2hbMF0ubGVuZ3RoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sID0gaHRtbC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRXaXRoKGh0bWwsICc8LycpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfbWF0Y2ggPSBodG1sLm1hdGNoKHJlZ0VuZFRhZyk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoX21hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sID0gaHRtbC5zdWJzdHJpbmcoX21hdGNoWzBdLmxlbmd0aCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgX21hdGNoWzBdLnJlcGxhY2UocmVnRW5kVGFnLCBwYXJzZUVuZFRhZyk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydFdpdGgoaHRtbCwgJzwnKSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgX21hdGNoMiA9IGh0bWwubWF0Y2gocmVnU3RhcnRUYWcpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9tYXRjaDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgPSBodG1sLnN1YnN0cmluZyhfbWF0Y2gyWzBdLmxlbmd0aCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgX21hdGNoMlswXS5yZXBsYWNlKHJlZ1N0YXJ0VGFnLCBwYXJzZVN0YXJ0VGFnKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZW5kSWR4ID0gaHRtbC5pbmRleE9mKCc8Jyk7CgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RleHQgPSBfZW5kSWR4IDwgMCA/IGh0bWwgOiBodG1sLnN1YnN0cmluZygwLCBfZW5kSWR4KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgPSBfZW5kSWR4IDwgMCA/ICcnIDogaHRtbC5zdWJzdHJpbmcoX2VuZElkeCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLnRleHQpIGhhbmRsZXIudGV4dChfdGV4dCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZXhlY1JlcyA9IG5ldyBSZWdFeHAoJzwvJy5jb25jYXQobGFzdChzdGFjayksICdbXj5dKj4nKSkuZXhlYygKICAgICAgICAgICAgICAgICAgICAgICAgaHRtbAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIGlmIChleGVjUmVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGV4dDIgPSBodG1sLnN1YnN0cmluZygwLCBleGVjUmVzLmluZGV4KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgPSBodG1sLnN1YnN0cmluZyhleGVjUmVzLmluZGV4ICsgZXhlY1Jlc1swXS5sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RleHQyICYmIGhhbmRsZXIudGV4dCkgaGFuZGxlci50ZXh0KF90ZXh0Mik7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBwYXJzZUVuZFRhZygnJywgbGFzdChzdGFjaykpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChsYXN0SHRtbCA9PT0gaHRtbCkgewogICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdQYXJzZSBFcnJvcjogJyArIGh0bWwpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGxhc3RIdG1sID0gaHRtbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcGFyc2VFbmRUYWcoKTsKCiAgICAgICAgICAgIGZ1bmN0aW9uIHBhcnNlU3RhcnRUYWcodGFnLCB0YWdOYW1lLCByZXN0LCB1bmFyeSkgewogICAgICAgICAgICAgICAgdGFnTmFtZSA9IGxvd2VyQ2FzZSh0YWdOYW1lKTsKICAgICAgICAgICAgICAgIHVuYXJ5ID0gISF1bmFyeTsKICAgICAgICAgICAgICAgIGlmICghdW5hcnkpIHN0YWNrLnB1c2godGFnTmFtZSk7CgogICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIuc3RhcnQpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cnMgPSB7fTsKICAgICAgICAgICAgICAgICAgICByZXN0LnJlcGxhY2UocmVnQXR0ciwgZnVuY3Rpb24oYWxsLCAkMSwgJDIsICQzLCAkNCkgewogICAgICAgICAgICAgICAgICAgICAgICBhdHRyc1skMV0gPSAkMiB8fCAkMyB8fCAkNDsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnN0YXJ0KHRhZ05hbWUsIGF0dHJzLCB1bmFyeSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZ1bmN0aW9uIHBhcnNlRW5kVGFnKHRhZywgdGFnTmFtZSkgewogICAgICAgICAgICAgICAgdGFnTmFtZSA9IGxvd2VyQ2FzZSh0YWdOYW1lKTsKICAgICAgICAgICAgICAgIHZhciBwb3M7CgogICAgICAgICAgICAgICAgaWYgKCF0YWdOYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgcG9zID0gMDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIChwb3MgPSBzdGFjay5sZW5ndGggLSAxOyBwb3MgPj0gMDsgcG9zLS0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrW3Bvc10gPT09IHRhZ05hbWUpIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAocG9zID49IDApIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhY2subGVuZ3RoIC0gMTsgaSA+PSBwb3M7IGktLSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlci5lbmQpIGhhbmRsZXIuZW5kKHN0YWNrW2ldKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHN0YWNrLmxlbmd0aCA9IHBvczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIHZhciByZWdEb2N0eXBlID0gL148IVxzKmRvY3R5cGUoKD86XHMrW1x3Ol0rKD86XHMqPVxzKig/Oig/OiJbXiJdKiIpfCg/OidbXiddKicpfFtePlxzXSspKT8pKilccyooXC8/KT4vaTsKICAgICAgICB2YXIgcmVnRW5kVGFnID0gL148XC8oWy1BLVphLXowLTlfXSspW14+XSo+LzsKICAgICAgICB2YXIgcmVnU3RhcnRUYWcgPSAvXjwoWy1BLVphLXowLTlfXSspKCg/OlxzK1stQS1aYS16MC05XzpALl0rKD86XHMqPVxzKig/Oig/OiJbXiJdKiIpfCg/OidbXiddKicpfFtePlxzXSspKT8pKilccyooXC8/KT4vaTsKICAgICAgICB2YXIgcmVnQXR0ciA9IC8oWy1BLVphLXowLTlfOkAuXSspKD86XHMqPVxzKig/Oig/OiIoKD86XFwufFteIl0pKikiKXwoPzonKCg/OlxcLnxbXiddKSopJyl8KFtePlxzXSspKSk/L2c7IC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sL3N5bnRheC5odG1sI3Jhdy10ZXh0CgogICAgICAgIHZhciBTUEVDSUFMID0gYXJyVG9NYXAoJ3NjcmlwdCxzdHlsZScuc3BsaXQoJywnKSk7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjcmVhdGVBc3NpZ25lciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgY3JlYXRlQXNzaWduZXIgPSBfLmNyZWF0ZUFzc2lnbmVyID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogVXNlZCB0byBjcmVhdGUgZXh0ZW5kLCBleHRlbmRPd24gYW5kIGRlZmF1bHRzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxrZXlzRm4gIHxGdW5jdGlvbiB0byBnZXQgb2JqZWN0IGtleXMgICB8CiAgICAgICAgICogfGRlZmF1bHRzfE5vIG92ZXJyaWRlIHdoZW4gc2V0IHRvIHRydWUgIHwKICAgICAgICAgKiB8cmV0dXJuICB8UmVzdWx0IGZ1bmN0aW9uLCBleHRlbmQuLi4gICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoa2V5c0ZuOiBGdW5jdGlvbiwgZGVmYXVsdHM6IGJvb2xlYW4pOiBGdW5jdGlvbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNVbmRlZiBlYWNoIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oa2V5c0ZuLCBkZWZhdWx0cykgewogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICAgICAgICBlYWNoKGFyZ3VtZW50cywgZnVuY3Rpb24oc3JjLCBpZHgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaWR4ID09PSAwKSByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgdmFyIGtleXMgPSBrZXlzRm4oc3JjKTsKICAgICAgICAgICAgICAgICAgICBlYWNoKGtleXMsIGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRlZmF1bHRzIHx8IGlzVW5kZWYob2JqW2tleV0pKSBvYmpba2V5XSA9IHNyY1trZXldOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gb2JqOwogICAgICAgICAgICB9OwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBleHRlbmRPd24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGV4dGVuZE93biA9IF8uZXh0ZW5kT3duID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogTGlrZSBleHRlbmQsIGJ1dCBvbmx5IGNvcGllcyBvd24gcHJvcGVydGllcyBvdmVyIHRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICAgICB8RGVzYyAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGRlc3RpbmF0aW9ufERlc3RpbmF0aW9uIG9iamVjdHwKICAgICAgICAgKiB8Li4uc291cmNlcyB8U291cmNlcyBvYmplY3RzICAgfAogICAgICAgICAqIHxyZXR1cm4gICAgIHxEZXN0aW5hdGlvbiBvYmplY3R8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBleHRlbmRPd24oe25hbWU6ICdSZWRIb29kJ30sIHthZ2U6IDI0fSk7IC8vIC0+IHtuYW1lOiAnUmVkSG9vZCcsIGFnZTogMjR9CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBleHRlbmRPd24oZGVzdGluYXRpb246IGFueSwgLi4uc291cmNlczogYW55W10pOiBhbnk7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGtleXMgY3JlYXRlQXNzaWduZXIgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBjcmVhdGVBc3NpZ25lcihrZXlzKTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGVhc2luZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgZWFzaW5nID0gXy5lYXNpbmcgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBFYXNpbmcgZnVuY3Rpb25zIGFkYXB0ZWQgZnJvbSBodHRwOi8vanF1ZXJ5dWkuY29tLyAuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgIHxEZXNjICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHBlcmNlbnR8TnVtYmVyIGJldHdlZW4gMCBhbmQgMXwKICAgICAgICAgKiB8cmV0dXJuIHxDYWxjdWxhdGVkIG51bWJlciAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogZWFzaW5nLmxpbmVhcigwLjUpOyAvLyAtPiAwLjUKICAgICAgICAgKiBlYXNpbmcuaW5FbGFzdGljKDAuNSwgNTAwKTsgLy8gLT4gMC4wMzEyNQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgY29uc3QgZWFzaW5nOiB7CiAgICAgICAgICogICAgIGxpbmVhcihwZXJjZW50OiBudW1iZXIpOiBudW1iZXI7CiAgICAgICAgICogICAgIGluUXVhZChwZXJjZW50OiBudW1iZXIpOiBudW1iZXI7CiAgICAgICAgICogICAgIG91dFF1YWQocGVyY2VudDogbnVtYmVyKTogbnVtYmVyOwogICAgICAgICAqICAgICBpbk91dFF1YWQocGVyY2VudDogbnVtYmVyKTogbnVtYmVyOwogICAgICAgICAqICAgICBvdXRJblF1YWQocGVyY2VudDogbnVtYmVyKTogbnVtYmVyOwogICAgICAgICAqICAgICBpbkN1YmljKHBlcmNlbnQ6IG51bWJlcik6IG51bWJlcjsKICAgICAgICAgKiAgICAgb3V0Q3ViaWMocGVyY2VudDogbnVtYmVyKTogbnVtYmVyOwogICAgICAgICAqICAgICBpblF1YXJ0KHBlcmNlbnQ6IG51bWJlcik6IG51bWJlcjsKICAgICAgICAgKiAgICAgb3V0UXVhcnQocGVyY2VudDogbnVtYmVyKTogbnVtYmVyOwogICAgICAgICAqICAgICBpblF1aW50KHBlcmNlbnQ6IG51bWJlcik6IG51bWJlcjsKICAgICAgICAgKiAgICAgb3V0UXVpbnQocGVyY2VudDogbnVtYmVyKTogbnVtYmVyOwogICAgICAgICAqICAgICBpbkV4cG8ocGVyY2VudDogbnVtYmVyKTogbnVtYmVyOwogICAgICAgICAqICAgICBvdXRFeHBvKHBlcmNlbnQ6IG51bWJlcik6IG51bWJlcjsKICAgICAgICAgKiAgICAgaW5TaW5lKHBlcmNlbnQ6IG51bWJlcik6IG51bWJlcjsKICAgICAgICAgKiAgICAgb3V0U2luZShwZXJjZW50OiBudW1iZXIpOiBudW1iZXI7CiAgICAgICAgICogICAgIGluQ2lyYyhwZXJjZW50OiBudW1iZXIpOiBudW1iZXI7CiAgICAgICAgICogICAgIG91dENpcmMocGVyY2VudDogbnVtYmVyKTogbnVtYmVyOwogICAgICAgICAqICAgICBpbkVsYXN0aWMocGVyY2VudDogbnVtYmVyLCBlbGFzdGljaXR5PzogbnVtYmVyKTogbnVtYmVyOwogICAgICAgICAqICAgICBvdXRFbGFzdGljKHBlcmNlbnQ6IG51bWJlciwgZWxhc3RpY2l0eT86IG51bWJlcik6IG51bWJlcjsKICAgICAgICAgKiAgICAgaW5CYWNrKHBlcmNlbnQ6IG51bWJlcik6IG51bWJlcjsKICAgICAgICAgKiAgICAgb3V0QmFjayhwZXJjZW50OiBudW1iZXIpOiBudW1iZXI7CiAgICAgICAgICogICAgIGluT3V0QmFjayhwZXJjZW50OiBudW1iZXIpOiBudW1iZXI7CiAgICAgICAgICogICAgIG91dEluQmFjayhwZXJjZW50OiBudW1iZXIpOiBudW1iZXI7CiAgICAgICAgICogICAgIGluQm91bmNlKHBlcmNlbnQ6IG51bWJlcik6IG51bWJlcjsKICAgICAgICAgKiAgICAgb3V0Qm91bmNlKHBlcmNlbnQ6IG51bWJlcik6IG51bWJlcjsKICAgICAgICAgKiB9OwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBlYWNoIHVwcGVyRmlyc3QgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMubGluZWFyID0gZnVuY3Rpb24odCkgewogICAgICAgICAgICByZXR1cm4gdDsKICAgICAgICB9OwoKICAgICAgICB2YXIgcG93ID0gTWF0aC5wb3c7CiAgICAgICAgdmFyIHNxcnQgPSBNYXRoLnNxcnQ7CiAgICAgICAgdmFyIHNpbiA9IE1hdGguc2luOwogICAgICAgIHZhciBtaW4gPSBNYXRoLm1pbjsKICAgICAgICB2YXIgYXNpbiA9IE1hdGguYXNpbjsKICAgICAgICB2YXIgUEkgPSBNYXRoLlBJOwogICAgICAgIHZhciBmbnMgPSB7CiAgICAgICAgICAgIHNpbmU6IGZ1bmN0aW9uKHQpIHsKICAgICAgICAgICAgICAgIHJldHVybiAxICsgc2luKChQSSAvIDIpICogdCAtIFBJIC8gMik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGNpcmM6IGZ1bmN0aW9uKHQpIHsKICAgICAgICAgICAgICAgIHJldHVybiAxIC0gc3FydCgxIC0gdCAqIHQpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBlbGFzdGljOiBmdW5jdGlvbih0LCBtKSB7CiAgICAgICAgICAgICAgICBtID0gbSB8fCBERUZBVUxUX0VMQVNUSUNJVFk7CiAgICAgICAgICAgICAgICBpZiAodCA9PT0gMCB8fCB0ID09PSAxKSByZXR1cm4gdDsKICAgICAgICAgICAgICAgIHZhciBwID0gMSAtIG1pbihtLCA5OTgpIC8gMTAwMDsKICAgICAgICAgICAgICAgIHZhciBzdCA9IHQgLyAxOwogICAgICAgICAgICAgICAgdmFyIHN0MSA9IHN0IC0gMTsKICAgICAgICAgICAgICAgIHZhciBzID0gKHAgLyAoMiAqIFBJKSkgKiBhc2luKDEpOwogICAgICAgICAgICAgICAgcmV0dXJuIC0ocG93KDIsIDEwICogc3QxKSAqIHNpbigoKHN0MSAtIHMpICogKDIgKiBQSSkpIC8gcCkpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBiYWNrOiBmdW5jdGlvbih0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdCAqIHQgKiAoMyAqIHQgLSAyKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYm91bmNlOiBmdW5jdGlvbih0KSB7CiAgICAgICAgICAgICAgICB2YXIgcG93MiwKICAgICAgICAgICAgICAgICAgICBib3VuY2UgPSA0OwogICAgICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tZW1wdHkgKi8KCiAgICAgICAgICAgICAgICB3aGlsZSAodCA8ICgocG93MiA9IHBvdygyLCAtLWJvdW5jZSkpIC0gMSkgLyAxMSkge30KCiAgICAgICAgICAgICAgICByZXR1cm4gKAogICAgICAgICAgICAgICAgICAgIDEgLyBwb3coNCwgMyAtIGJvdW5jZSkgLSA3LjU2MjUgKiBwb3coKHBvdzIgKiAzIC0gMikgLyAyMiAtIHQsIDIpCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBlYWNoKFsncXVhZCcsICdjdWJpYycsICdxdWFydCcsICdxdWludCcsICdleHBvJ10sIGZ1bmN0aW9uKG5hbWUsIGkpIHsKICAgICAgICAgICAgZm5zW25hbWVdID0gZnVuY3Rpb24odCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHBvdyh0LCBpICsgMik7CiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICAgICAgdmFyIERFRkFVTFRfRUxBU1RJQ0lUWSA9IDQwMDsKICAgICAgICBlYWNoKGZucywgZnVuY3Rpb24oZm4sIG5hbWUpIHsKICAgICAgICAgICAgbmFtZSA9IHVwcGVyRmlyc3QobmFtZSk7CiAgICAgICAgICAgIGV4cG9ydHNbJ2luJyArIG5hbWVdID0gZm47CgogICAgICAgICAgICBleHBvcnRzWydvdXQnICsgbmFtZV0gPSBmdW5jdGlvbih0LCBtKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMSAtIGZuKDEgLSB0LCBtKTsKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGV4cG9ydHNbJ2luT3V0JyArIG5hbWVdID0gZnVuY3Rpb24odCwgbSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHQgPCAwLjUgPyBmbih0ICogMiwgbSkgLyAyIDogMSAtIGZuKHQgKiAtMiArIDIsIG0pIC8gMjsKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGV4cG9ydHNbJ291dEluJyArIG5hbWVdID0gZnVuY3Rpb24odCwgbSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHQgPCAwLjUKICAgICAgICAgICAgICAgICAgICA/ICgxIC0gZm4oMSAtIDIgKiB0LCBtKSkgLyAyCiAgICAgICAgICAgICAgICAgICAgOiAoZm4odCAqIDIgLSAxLCBtKSArIDEpIC8gMjsKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGludmVydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgaW52ZXJ0ID0gXy5pbnZlcnQgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDcmVhdGUgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBpbnZlcnRlZCBrZXlzIGFuZCB2YWx1ZXMgb2Ygb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8b2JqICAgfE9iamVjdCB0byBpbnZlcnQgICB8CiAgICAgICAgICogfHJldHVybnxOZXcgaW52ZXJ0ZWQgb2JqZWN0fAogICAgICAgICAqCiAgICAgICAgICogSWYgb2JqZWN0IGNvbnRhaW5zIGR1cGxpY2F0ZSB2YWx1ZXMsIHN1YnNlcXVlbnQgdmFsdWVzIG92ZXJ3cml0ZSBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyB2YWx1ZXMuCiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBpbnZlcnQoe2E6ICdiJywgYzogJ2QnLCBlOiAnZid9KTsgLy8gLT4ge2I6ICdhJywgZDogJ2MnLCBmOiAnZSd9CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpbnZlcnQob2JqOiBhbnkpOiBhbnk7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGVhY2ggCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihvYmopIHsKICAgICAgICAgICAgdmFyIHJldCA9IHt9OwogICAgICAgICAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsLCBrZXkpIHsKICAgICAgICAgICAgICAgIHJldFt2YWxdID0ga2V5OwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWltZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgbWltZSA9IF8ubWltZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENvbW1vbiBtaW1lIHR5cGVzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS18CiAgICAgICAgICogfG5hbWUgIHxFeHRlbnNpb258CiAgICAgICAgICogfHJldHVybnxNaW1lIHR5cGV8CiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLXwKICAgICAgICAgKiB8bmFtZSAgfE1pbWUgdHlwZXwKICAgICAgICAgKiB8cmV0dXJufEV4dGVuc2lvbnwKICAgICAgICAgKgogICAgICAgICAqIEl0IGNvbnRhaW5zIG9ubHkgdGhlIG1vc3QgY29tbW9uIGZpbGUgdHlwZXMuCiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBtaW1lKCdqcGcnKTsgLy8gLT4gJ2ltYWdlL2pwZWcnCiAgICAgICAgICogbWltZSgnYm1wJyk7IC8vIC0+ICdpbWFnZS9ibXAnCiAgICAgICAgICogbWltZSgndmlkZW8vbXA0Jyk7IC8vIC0+ICdtcDQnCiAgICAgICAgICogbWltZSgndGVzdCcpOyAvLyAtPiBudWxsCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBtaW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZDsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogZWFjaCAKICAgICAgICAgKi8KCiAgICAgICAgdmFyIGV4dHMgPSB7CiAgICAgICAgICAgIC8vIGltYWdlCiAgICAgICAgICAgICdpbWFnZS9qcGVnJzogWydqcGVnJywgJ2pwZyddLAogICAgICAgICAgICAnaW1hZ2UvcG5nJzogWydwbmcnXSwKICAgICAgICAgICAgJ2ltYWdlL2dpZic6IFsnZ2lmJ10sCiAgICAgICAgICAgICdpbWFnZS93ZWJwJzogWyd3ZWJwJ10sCiAgICAgICAgICAgICdpbWFnZS90aWZmJzogWyd0aWYnLCAndGlmZiddLAogICAgICAgICAgICAnaW1hZ2UvYm1wJzogWydibXAnXSwKICAgICAgICAgICAgJ2ltYWdlL3ZuZC5hZG9iZS5waG90b3Nob3AnOiBbJ3BzZCddLAogICAgICAgICAgICAnaW1hZ2Uvc3ZnK3htbCc6IFsnc3ZnJ10sCiAgICAgICAgICAgIC8vIGF1ZGlvCiAgICAgICAgICAgICdhdWRpby9tcDQnOiBbJ200YScsICdtcDRhJ10sCiAgICAgICAgICAgICdhdWRpby9taWRpJzogWydtaWRpJ10sCiAgICAgICAgICAgICdhdWRpby9tcGVnJzogWydtcGdhJywgJ21wMicsICdtcDJhJywgJ21wMycsICdtMmEnLCAnbTNhJ10sCiAgICAgICAgICAgICdhdWRpby9vZ2cnOiBbJ29nZyddLAogICAgICAgICAgICAnYXVkaW8vd2F2JzogWyd3YXYnXSwKICAgICAgICAgICAgLy8gdmlkZW8KICAgICAgICAgICAgJ3ZpZGVvL21wNCc6IFsnbXA0JywgJ21wNHYnLCAnbXBnNCddLAogICAgICAgICAgICAndmlkZW8veC1tYXRyb3NrYSc6IFsnbWt2J10sCiAgICAgICAgICAgICd2aWRlby93ZWJtJzogWyd3ZWJtJ10sCiAgICAgICAgICAgICd2aWRlby94LW1zdmlkZW8nOiBbJ2F2aSddLAogICAgICAgICAgICAndmlkZW8vcXVpY2t0aW1lJzogWydxdCcsICdtb3YnXSwKICAgICAgICAgICAgJ3ZpZGVvL21wZWcnOiBbJ21wZWcnLCAnbXBnJywgJ21wZScsICdtMXYnLCAnbTJ2J10sCiAgICAgICAgICAgICd2aWRlby8zZ3BwJzogWyczZ3AnLCAnM2dwcCddLAogICAgICAgICAgICAvLyB0ZXh0CiAgICAgICAgICAgICd0ZXh0L2Nzcyc6IFsnY3NzJ10sCiAgICAgICAgICAgICd0ZXh0L2h0bWwnOiBbJ2h0bWwnLCAnaHRtJywgJ3NodG1sJ10sCiAgICAgICAgICAgICd0ZXh0L3lhbWwnOiBbJ3lhbWwnLCAneW1sJ10sCiAgICAgICAgICAgICd0ZXh0L2Nzdic6IFsnY3N2J10sCiAgICAgICAgICAgICd0ZXh0L21hcmtkb3duJzogWydtYXJrZG93bicsICdtZCddLAogICAgICAgICAgICAndGV4dC9wbGFpbic6IFsndHh0JywgJ3RleHQnLCAnY29uZicsICdsb2cnLCAnaW5pJ10sCiAgICAgICAgICAgIC8vIGZvbnQKICAgICAgICAgICAgJ2ZvbnQvdHRmJzogWyd0dGYnXSwKICAgICAgICAgICAgJ2ZvbnQvd29mZic6IFsnd29mZiddLAogICAgICAgICAgICAnZm9udC93b2ZmMic6IFsnd29mZjInXSwKICAgICAgICAgICAgLy8gYXBwbGljYXRpb24KICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ppcCc6IFsnemlwJ10sCiAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXRhcic6IFsndGFyJ10sCiAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LXJhci1jb21wcmVzc2VkJzogWydyYXInXSwKICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2d6aXAnOiBbJ2d6J10sCiAgICAgICAgICAgICdhcHBsaWNhdGlvbi94LTd6LWNvbXByZXNzZWQnOiBbJzd6J10sCiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nOiBbCiAgICAgICAgICAgICAgICAnYmluJywKICAgICAgICAgICAgICAgICdzbycsCiAgICAgICAgICAgICAgICAnZXhlJywKICAgICAgICAgICAgICAgICdkbGwnLAogICAgICAgICAgICAgICAgJ2RtZycsCiAgICAgICAgICAgICAgICAnaXNvJywKICAgICAgICAgICAgICAgICdtc2knCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9lcHViK3ppcCc6IFsnZXB1YiddLAogICAgICAgICAgICAnYXBwbGljYXRpb24vamF2YXNjcmlwdCc6IFsnanMnXSwKICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nOiBbJ2pzb24nXSwKICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL21zd29yZCc6IFsnZG9jJywgJ2RvY3gnLCAnZG90JywgJ2RvdHgnXSwKICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCc6IFsneGxzJywgJ3hsc3gnLCAneGxhJywgJ3hsdCddLAogICAgICAgICAgICAnYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQnOiBbJ3BwdCcsICdwcHR4JywgJ3BwcycsICdwb3QnXSwKICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3BkZic6IFsncGRmJ10sCiAgICAgICAgICAgICdhcHBsaWNhdGlvbi93YXNtJzogWyd3YXNtJ10sCiAgICAgICAgICAgICdhcHBsaWNhdGlvbi94bWwnOiBbJ3htbCddLAogICAgICAgICAgICAnYXBwbGljYXRpb24veG1sLWR0ZCc6IFsnZHRkJ10KICAgICAgICB9OwogICAgICAgIHZhciBtaW1lVHlwZXMgPSB7fTsKICAgICAgICBlYWNoKGV4dHMsIGZ1bmN0aW9uKGV4dCwgbWltZVR5cGUpIHsKICAgICAgICAgICAgZWFjaChleHQsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIG1pbWVUeXBlc1tlXSA9IG1pbWVUeXBlOwogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgICAgICAgcmV0dXJuIChpc01pbWVUeXBlKG5hbWUpID8gZ2V0RXh0KG5hbWUpIDogZ2V0VHlwZShuYW1lKSkgfHwgdW5kZWZpbmVkOwogICAgICAgIH07CgogICAgICAgIGZ1bmN0aW9uIGdldFR5cGUobmFtZSkgewogICAgICAgICAgICByZXR1cm4gbWltZVR5cGVzW25hbWVdOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZ2V0RXh0KG5hbWUpIHsKICAgICAgICAgICAgaWYgKGV4dHNbbmFtZV0pIHsKICAgICAgICAgICAgICAgIHJldHVybiBleHRzW25hbWVdWzBdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpc01pbWVUeXBlKG5hbWUpIHsKICAgICAgICAgICAgcmV0dXJuIG5hbWUuaW5kZXhPZignLycpID4gLTE7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdmFsdWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciB2YWx1ZXMgPSBfLnZhbHVlcyA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENyZWF0ZSBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgdmFsdWVzIG9mIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxvYmogICB8T2JqZWN0IHRvIHF1ZXJ5ICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58QXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogdmFsdWVzKHtvbmU6IDEsIHR3bzogMn0pOyAvLyAtPiBbMSwgMl0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHZhbHVlcyhvYmo6IGFueSk6IGFueVtdOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBlYWNoIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICAgIHZhciByZXQgPSBbXTsKICAgICAgICAgICAgZWFjaChvYmosIGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICAgICAgcmV0LnB1c2godmFsKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlzU3RyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBpc1N0ciA9IF8uaXNTdHIgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDaGVjayBpZiB2YWx1ZSBpcyBhIHN0cmluZyBwcmltaXRpdmUuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbCAgIHxWYWx1ZSB0byBjaGVjayAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgdmFsdWUgaXMgYSBzdHJpbmcgcHJpbWl0aXZlfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNTdHIoJ2xpY2lhJyk7IC8vIC0+IHRydWUKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGlzU3RyKHZhbDogYW55KTogYm9vbGVhbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogb2JqVG9TdHIgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgcmV0dXJuIG9ialRvU3RyKHZhbCkgPT09ICdbb2JqZWN0IFN0cmluZ10nOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjbGFzc05hbWUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmNsYXNzTmFtZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFV0aWxpdHkgZm9yIGNvbmRpdGlvbmFsbHkgam9pbmluZyBjbGFzcyBuYW1lcy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgIHxEZXNjICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8Li4uY2xhc3N8Q2xhc3MgbmFtZXMgICAgICAgfAogICAgICAgICAqIHxyZXR1cm4gIHxKb2luZWQgY2xhc3MgbmFtZXN8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjbGFzc05hbWUoJ2EnLCAnYicsICdjJyk7IC8vIC0+ICdhIGIgYycKICAgICAgICAgKiBjbGFzc05hbWUoJ2EnLCBmYWxzZSwgJ2InLCAwLCAxLCAnYycpOyAvLyAtPiAnYSBiIDEgYycKICAgICAgICAgKiBjbGFzc05hbWUoJ2EnLCBbJ2InLCAnYyddKTsgLy8gLT4gJ2EgYiBjJwogICAgICAgICAqIGNsYXNzTmFtZSgnYScsIHtiOiBmYWxzZSwgYzogdHJ1ZX0pOyAvLyAtPiAnYSBjJwogICAgICAgICAqIGNsYXNzTmFtZSgnYScsIFsnYicsICdjJywge2Q6IHRydWUsIGU6IGZhbHNlfV0pOyAvLyAtPiAnYSBiIGMgZCc7CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjbGFzc05hbWUoLi4uYXJyOiBhbnlbXSk6IHN0cmluZzsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogZWFjaCBpc1N0ciBpc051bSBpc0FyciBpc09iaiAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgcmV0ID0gW107CiAgICAgICAgICAgIGVhY2goYXJndW1lbnRzLCBmdW5jdGlvbihhcmcpIHsKICAgICAgICAgICAgICAgIGlmICghYXJnKSByZXR1cm47CiAgICAgICAgICAgICAgICBpZiAoaXNTdHIoYXJnKSB8fCBpc051bShhcmcpKSByZXR1cm4gcmV0LnB1c2goYXJnKTsKICAgICAgICAgICAgICAgIGlmIChpc0FycihhcmcpKSByZXR1cm4gcmV0LnB1c2goZXhwb3J0cy5hcHBseShudWxsLCBhcmcpKTsKICAgICAgICAgICAgICAgIGlmICghaXNPYmooYXJnKSkgcmV0dXJuOwogICAgICAgICAgICAgICAgZWFjaChhcmcsIGZ1bmN0aW9uKHZhbCwga2V5KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCkgcmV0LnB1c2goa2V5KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIHJldC5qb2luKCcgJyk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNvbnRhaW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGNvbnRhaW4gPSBfLmNvbnRhaW4gPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDaGVjayBpZiB0aGUgdmFsdWUgaXMgcHJlc2VudCBpbiB0aGUgbGlzdC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx0YXJnZXR8VGFyZ2V0IG9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHx2YWwgICB8VmFsdWUgdG8gY2hlY2sgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58VHJ1ZSBpZiB2YWx1ZSBpcyBwcmVzZW50IGluIHRoZSBsaXN0fAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29udGFpbihbMSwgMiwgM10sIDEpOyAvLyAtPiB0cnVlCiAgICAgICAgICogY29udGFpbih7YTogMSwgYjogMn0sIDEpOyAvLyAtPiB0cnVlCiAgICAgICAgICogY29udGFpbignYWJjJywgJ2EnKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY29udGFpbigKICAgICAgICAgKiAgICAgYXJyOiBhbnlbXSB8IHt9IHwgc3RyaW5nLAogICAgICAgICAqICAgICB2YWw6IGFueQogICAgICAgICAqICk6IGJvb2xlYW47CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlkeE9mIGlzU3RyIGlzQXJyTGlrZSB2YWx1ZXMgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihhcnIsIHZhbCkgewogICAgICAgICAgICBpZiAoaXNTdHIoYXJyKSkgcmV0dXJuIGFyci5pbmRleE9mKHZhbCkgPiAtMTsKICAgICAgICAgICAgaWYgKCFpc0Fyckxpa2UoYXJyKSkgYXJyID0gdmFsdWVzKGFycik7CiAgICAgICAgICAgIHJldHVybiBpZHhPZihhcnIsIHZhbCkgPj0gMDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZGF0ZUZvcm1hdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgZGF0ZUZvcm1hdCA9IF8uZGF0ZUZvcm1hdCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFNpbXBsZSBidXQgZXh0cmVtZWx5IHVzZWZ1bCBkYXRlIGZvcm1hdCBmdW5jdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgICAgfERlc2MgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGRhdGU9bmV3IERhdGV8RGF0ZSBvYmplY3QgdG8gZm9ybWF0fAogICAgICAgICAqIHxtYXNrICAgICAgICAgfEZvcm1hdCBtYXNrICAgICAgICAgIHwKICAgICAgICAgKiB8dXRjPWZhbHNlICAgIHxVVEMgb3Igbm90ICAgICAgICAgICB8CiAgICAgICAgICogfGdtdD1mYWxzZSAgICB8R01UIG9yIG5vdCAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm4gICAgICAgfEZvcm1hdHRlZCBkdXJhdGlvbiAgIHwKICAgICAgICAgKgogICAgICAgICAqIHxNYXNrfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxkICAgfERheSBvZiB0aGUgbW9udGggYXMgZGlnaXRzOyBubyBsZWFkaW5nIHplcm8gZm9yIHNpbmdsZS1kaWdpdCBkYXlzfAogICAgICAgICAqIHxkZCAgfERheSBvZiB0aGUgbW9udGggYXMgZGlnaXRzOyBsZWFkaW5nIHplcm8gZm9yIHNpbmdsZS1kaWdpdCBkYXlzICAgfAogICAgICAgICAqIHxkZGQgfERheSBvZiB0aGUgd2VlayBhcyBhIHRocmVlLWxldHRlciBhYmJyZXZpYXRpb24gICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxkZGRkfERheSBvZiB0aGUgd2VlayBhcyBpdHMgZnVsbCBuYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxtICAgfE1vbnRoIGFzIGRpZ2l0czsgbm8gbGVhZGluZyB6ZXJvIGZvciBzaW5nbGUtZGlnaXQgbW9udGhzICAgICAgICAgfAogICAgICAgICAqIHxtbSAgfE1vbnRoIGFzIGRpZ2l0czsgbGVhZGluZyB6ZXJvIGZvciBzaW5nbGUtZGlnaXQgbW9udGhzICAgICAgICAgICAgfAogICAgICAgICAqIHxtbW0gfE1vbnRoIGFzIGEgdGhyZWUtbGV0dGVyIGFiYnJldmlhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxtbW1tfE1vbnRoIGFzIGl0cyBmdWxsIG5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHx5eSAgfFllYXIgYXMgbGFzdCB0d28gZGlnaXRzOyBsZWFkaW5nIHplcm8gZm9yIHllYXJzIGxlc3MgdGhhbiAxMCAgICAgfAogICAgICAgICAqIHx5eXl5fFllYXIgcmVwcmVzZW50ZWQgYnkgZm91ciBkaWdpdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxoICAgfEhvdXJzOyBubyBsZWFkaW5nIHplcm8gZm9yIHNpbmdsZS1kaWdpdCBob3VycyAoMTItaG91ciBjbG9jaykgICAgfAogICAgICAgICAqIHxoaCAgfEhvdXJzOyBsZWFkaW5nIHplcm8gZm9yIHNpbmdsZS1kaWdpdCBob3VycyAoMTItaG91ciBjbG9jaykgICAgICAgfAogICAgICAgICAqIHxIICAgfEhvdXJzOyBubyBsZWFkaW5nIHplcm8gZm9yIHNpbmdsZS1kaWdpdCBob3VycyAoMjQtaG91ciBjbG9jaykgICAgfAogICAgICAgICAqIHxISCAgfEhvdXJzOyBsZWFkaW5nIHplcm8gZm9yIHNpbmdsZS1kaWdpdCBob3VycyAoMjQtaG91ciBjbG9jaykgICAgICAgfAogICAgICAgICAqIHxNICAgfE1pbnV0ZXM7IG5vIGxlYWRpbmcgemVybyBmb3Igc2luZ2xlLWRpZ2l0IG1pbnV0ZXMgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxNTSAgfE1pbnV0ZXM7IGxlYWRpbmcgemVybyBmb3Igc2luZ2xlLWRpZ2l0IG1pbnV0ZXMgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxzICAgfFNlY29uZHM7IG5vIGxlYWRpbmcgemVybyBmb3Igc2luZ2xlLWRpZ2l0IHNlY29uZHMgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxzcyAgfFNlY29uZHM7IGxlYWRpbmcgemVybyBmb3Igc2luZ2xlLWRpZ2l0IHNlY29uZHMgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxsIEwgfE1pbGxpc2Vjb25kcy4gbCBnaXZlcyAzIGRpZ2l0cy4gTCBnaXZlcyAyIGRpZ2l0cyAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHx0ICAgfExvd2VyY2FzZSwgc2luZ2xlLWNoYXJhY3RlciB0aW1lIG1hcmtlciBzdHJpbmc6IGEgb3IgcCAgICAgICAgICAgfAogICAgICAgICAqIHx0dCAgfExvd2VyY2FzZSwgdHdvLWNoYXJhY3RlciB0aW1lIG1hcmtlciBzdHJpbmc6IGFtIG9yIHBtICAgICAgICAgICAgfAogICAgICAgICAqIHxUICAgfFVwcGVyY2FzZSwgc2luZ2xlLWNoYXJhY3RlciB0aW1lIG1hcmtlciBzdHJpbmc6IEEgb3IgUCAgICAgICAgICAgfAogICAgICAgICAqIHxUVCAgfFVwcGVyY2FzZSwgdHdvLWNoYXJhY3RlciB0aW1lIG1hcmtlciBzdHJpbmc6IEFNIG9yIFBNICAgICAgICAgICAgfAogICAgICAgICAqIHxaICAgfFVTIHRpbWV6b25lIGFiYnJldmlhdGlvbiwgZS5nLiBFU1Qgb3IgTURUICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxvICAgfEdNVC9VVEMgdGltZXpvbmUgb2Zmc2V0LCBlLmcuIC0wNTAwIG9yICswMjMwICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxTICAgfFRoZSBkYXRlJ3Mgb3JkaW5hbCBzdWZmaXggKHN0LCBuZCwgcmQsIG9yIHRoKSAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxVVEM6fE11c3QgYmUgdGhlIGZpcnN0IGZvdXIgY2hhcmFjdGVycyBvZiB0aGUgbWFzayAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogZGF0ZUZvcm1hdCgnaXNvRGF0ZScpOyAvLyAtPiAyMDE2LTExLTE5CiAgICAgICAgICogZGF0ZUZvcm1hdCgneXl5eS1tbS1kZCBISDpNTTpzcycpOyAvLyAtPiAyMDE2LTExLTE5IDE5OjAwOjA0CiAgICAgICAgICogZGF0ZUZvcm1hdChuZXcgRGF0ZSgpLCAneXl5eS1tbS1kZCcpOyAvLyAtPiAyMDE2LTExLTE5CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBkYXRlRm9ybWF0KAogICAgICAgICAqICAgICBkYXRlOiBEYXRlLAogICAgICAgICAqICAgICBtYXNrOiBzdHJpbmcsCiAgICAgICAgICogICAgIHV0Yz86IGJvb2xlYW4sCiAgICAgICAgICogICAgIGdtdD86IGJvb2xlYW4KICAgICAgICAgKiApOiBzdHJpbmc7CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZGF0ZUZvcm1hdCgKICAgICAgICAgKiAgICAgbWFzazogc3RyaW5nLAogICAgICAgICAqICAgICB1dGM/OiBib29sZWFuLAogICAgICAgICAqICAgICBnbXQ/OiBib29sZWFuCiAgICAgICAgICogKTogc3RyaW5nOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBpc1N0ciBpc0RhdGUgdG9TdHIgbHBhZCAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGRhdGUsIG1hc2ssIHV0YywgZ210KSB7CiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIGlzU3RyKGRhdGUpICYmICFyZWdOdW0udGVzdChkYXRlKSkgewogICAgICAgICAgICAgICAgbWFzayA9IGRhdGU7CiAgICAgICAgICAgICAgICBkYXRlID0gdW5kZWZpbmVkOwogICAgICAgICAgICB9CgogICAgICAgICAgICBkYXRlID0gZGF0ZSB8fCBuZXcgRGF0ZSgpOwogICAgICAgICAgICBpZiAoIWlzRGF0ZShkYXRlKSkgZGF0ZSA9IG5ldyBEYXRlKGRhdGUpOwogICAgICAgICAgICBtYXNrID0gdG9TdHIoZXhwb3J0cy5tYXNrc1ttYXNrXSB8fCBtYXNrIHx8IGV4cG9ydHMubWFza3NbJ2RlZmF1bHQnXSk7CiAgICAgICAgICAgIHZhciBtYXNrU2xpY2UgPSBtYXNrLnNsaWNlKDAsIDQpOwoKICAgICAgICAgICAgaWYgKG1hc2tTbGljZSA9PT0gJ1VUQzonIHx8IG1hc2tTbGljZSA9PT0gJ0dNVDonKSB7CiAgICAgICAgICAgICAgICBtYXNrID0gbWFzay5zbGljZSg0KTsKICAgICAgICAgICAgICAgIHV0YyA9IHRydWU7CiAgICAgICAgICAgICAgICBpZiAobWFza1NsaWNlID09PSAnR01UOicpIGdtdCA9IHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBwcmVmaXggPSB1dGMgPyAnZ2V0VVRDJyA6ICdnZXQnOwogICAgICAgICAgICB2YXIgZCA9IGRhdGVbcHJlZml4ICsgJ0RhdGUnXSgpOwogICAgICAgICAgICB2YXIgRCA9IGRhdGVbcHJlZml4ICsgJ0RheSddKCk7CiAgICAgICAgICAgIHZhciBtID0gZGF0ZVtwcmVmaXggKyAnTW9udGgnXSgpOwogICAgICAgICAgICB2YXIgeSA9IGRhdGVbcHJlZml4ICsgJ0Z1bGxZZWFyJ10oKTsKICAgICAgICAgICAgdmFyIEggPSBkYXRlW3ByZWZpeCArICdIb3VycyddKCk7CiAgICAgICAgICAgIHZhciBNID0gZGF0ZVtwcmVmaXggKyAnTWludXRlcyddKCk7CiAgICAgICAgICAgIHZhciBzID0gZGF0ZVtwcmVmaXggKyAnU2Vjb25kcyddKCk7CiAgICAgICAgICAgIHZhciBMID0gZGF0ZVtwcmVmaXggKyAnTWlsbGlzZWNvbmRzJ10oKTsKICAgICAgICAgICAgdmFyIG8gPSB1dGMgPyAwIDogZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpOwogICAgICAgICAgICB2YXIgZmxhZ3MgPSB7CiAgICAgICAgICAgICAgICBkOiBkLAogICAgICAgICAgICAgICAgZGQ6IHBhZFplcm8oZCksCiAgICAgICAgICAgICAgICBkZGQ6IGV4cG9ydHMuaTE4bi5kYXlOYW1lc1tEXSwKICAgICAgICAgICAgICAgIGRkZGQ6IGV4cG9ydHMuaTE4bi5kYXlOYW1lc1tEICsgN10sCiAgICAgICAgICAgICAgICBtOiBtICsgMSwKICAgICAgICAgICAgICAgIG1tOiBwYWRaZXJvKG0gKyAxKSwKICAgICAgICAgICAgICAgIG1tbTogZXhwb3J0cy5pMThuLm1vbnRoTmFtZXNbbV0sCiAgICAgICAgICAgICAgICBtbW1tOiBleHBvcnRzLmkxOG4ubW9udGhOYW1lc1ttICsgMTJdLAogICAgICAgICAgICAgICAgeXk6IHRvU3RyKHkpLnNsaWNlKDIpLAogICAgICAgICAgICAgICAgeXl5eTogeSwKICAgICAgICAgICAgICAgIGg6IEggJSAxMiB8fCAxMiwKICAgICAgICAgICAgICAgIGhoOiBwYWRaZXJvKEggJSAxMiB8fCAxMiksCiAgICAgICAgICAgICAgICBIOiBILAogICAgICAgICAgICAgICAgSEg6IHBhZFplcm8oSCksCiAgICAgICAgICAgICAgICBNOiBNLAogICAgICAgICAgICAgICAgTU06IHBhZFplcm8oTSksCiAgICAgICAgICAgICAgICBzOiBzLAogICAgICAgICAgICAgICAgc3M6IHBhZFplcm8ocyksCiAgICAgICAgICAgICAgICBsOiBwYWRaZXJvKEwsIDMpLAogICAgICAgICAgICAgICAgTDogcGFkWmVybyhNYXRoLnJvdW5kKEwgLyAxMCkpLAogICAgICAgICAgICAgICAgdDogSCA8IDEyID8gJ2EnIDogJ3AnLAogICAgICAgICAgICAgICAgdHQ6IEggPCAxMiA/ICdhbScgOiAncG0nLAogICAgICAgICAgICAgICAgVDogSCA8IDEyID8gJ0EnIDogJ1AnLAogICAgICAgICAgICAgICAgVFQ6IEggPCAxMiA/ICdBTScgOiAnUE0nLAogICAgICAgICAgICAgICAgWjogZ210CiAgICAgICAgICAgICAgICAgICAgPyAnR01UJwogICAgICAgICAgICAgICAgICAgIDogdXRjCiAgICAgICAgICAgICAgICAgICAgPyAnVVRDJwogICAgICAgICAgICAgICAgICAgIDogKHRvU3RyKGRhdGUpLm1hdGNoKHJlZ1RpbWV6b25lKSB8fCBbJyddKQogICAgICAgICAgICAgICAgICAgICAgICAgIC5wb3AoKQogICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKHJlZ1RpbWV6b25lQ2xpcCwgJycpLAogICAgICAgICAgICAgICAgbzoKICAgICAgICAgICAgICAgICAgICAobyA+IDAgPyAnLScgOiAnKycpICsKICAgICAgICAgICAgICAgICAgICBwYWRaZXJvKE1hdGguZmxvb3IoTWF0aC5hYnMobykgLyA2MCkgKiAxMDAgKyAoTWF0aC5hYnMobykgJSA2MCksIDQpLAogICAgICAgICAgICAgICAgUzogWyd0aCcsICdzdCcsICduZCcsICdyZCddWwogICAgICAgICAgICAgICAgICAgIGQgJSAxMCA+IDMgPyAwIDogKCgoZCAlIDEwMCkgLSAoZCAlIDEwKSAhPSAxMCkgKiBkKSAlIDEwCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHJldHVybiBtYXNrLnJlcGxhY2UocmVnVG9rZW4sIGZ1bmN0aW9uKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggaW4gZmxhZ3MpIHJldHVybiBmbGFnc1ttYXRjaF07CiAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2guc2xpY2UoMSwgbWF0Y2gubGVuZ3RoIC0gMSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIHZhciBwYWRaZXJvID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgIHZhciBsZW4gPQogICAgICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAyOwogICAgICAgICAgICByZXR1cm4gbHBhZCh0b1N0cihzdHIpLCBsZW4sICcwJyk7CiAgICAgICAgfTsKCiAgICAgICAgdmFyIHJlZ1Rva2VuID0gL2R7MSw0fXxtezEsNH18eXkoPzp5eSk/fChbSGhNc1R0XSlcMT98W0xsb1NaV05dfCJbXiJdKiJ8J1teJ10qJy9nOwogICAgICAgIHZhciByZWdUaW1lem9uZSA9IC9cYig/OltQTUNFQV1bU0RQXVR8KD86UGFjaWZpY3xNb3VudGFpbnxDZW50cmFsfEVhc3Rlcm58QXRsYW50aWMpICg/OlN0YW5kYXJkfERheWxpZ2h0fFByZXZhaWxpbmcpIFRpbWV8KD86R01UfFVUQykoPzpbLStdXGR7NH0pPylcYi9nOwogICAgICAgIHZhciByZWdOdW0gPSAvXGQvOwogICAgICAgIHZhciByZWdUaW1lem9uZUNsaXAgPSAvW14tK1xkQS1aXS9nOwogICAgICAgIGV4cG9ydHMubWFza3MgPSB7CiAgICAgICAgICAgIGRlZmF1bHQ6ICdkZGQgbW1tIGRkIHl5eXkgSEg6TU06c3MnLAogICAgICAgICAgICBzaG9ydERhdGU6ICdtL2QveXknLAogICAgICAgICAgICBtZWRpdW1EYXRlOiAnbW1tIGQsIHl5eXknLAogICAgICAgICAgICBsb25nRGF0ZTogJ21tbW0gZCwgeXl5eScsCiAgICAgICAgICAgIGZ1bGxEYXRlOiAnZGRkZCwgbW1tbSBkLCB5eXl5JywKICAgICAgICAgICAgc2hvcnRUaW1lOiAnaDpNTSBUVCcsCiAgICAgICAgICAgIG1lZGl1bVRpbWU6ICdoOk1NOnNzIFRUJywKICAgICAgICAgICAgbG9uZ1RpbWU6ICdoOk1NOnNzIFRUIFonLAogICAgICAgICAgICBpc29EYXRlOiAneXl5eS1tbS1kZCcsCiAgICAgICAgICAgIGlzb1RpbWU6ICdISDpNTTpzcycsCiAgICAgICAgICAgIGlzb0RhdGVUaW1lOiAieXl5eS1tbS1kZCdUJ0hIOk1NOnNzbyIsCiAgICAgICAgICAgIGlzb1V0Y0RhdGVUaW1lOiAiVVRDOnl5eXktbW0tZGQnVCdISDpNTTpzcydaJyIsCiAgICAgICAgICAgIGV4cGlyZXNIZWFkZXJGb3JtYXQ6ICdkZGQsIGRkIG1tbSB5eXl5IEhIOk1NOnNzIFonCiAgICAgICAgfTsKICAgICAgICBleHBvcnRzLmkxOG4gPSB7CiAgICAgICAgICAgIGRheU5hbWVzOiBbCiAgICAgICAgICAgICAgICAnU3VuJywKICAgICAgICAgICAgICAgICdNb24nLAogICAgICAgICAgICAgICAgJ1R1ZScsCiAgICAgICAgICAgICAgICAnV2VkJywKICAgICAgICAgICAgICAgICdUaHUnLAogICAgICAgICAgICAgICAgJ0ZyaScsCiAgICAgICAgICAgICAgICAnU2F0JywKICAgICAgICAgICAgICAgICdTdW5kYXknLAogICAgICAgICAgICAgICAgJ01vbmRheScsCiAgICAgICAgICAgICAgICAnVHVlc2RheScsCiAgICAgICAgICAgICAgICAnV2VkbmVzZGF5JywKICAgICAgICAgICAgICAgICdUaHVyc2RheScsCiAgICAgICAgICAgICAgICAnRnJpZGF5JywKICAgICAgICAgICAgICAgICdTYXR1cmRheScKICAgICAgICAgICAgXSwKICAgICAgICAgICAgbW9udGhOYW1lczogWwogICAgICAgICAgICAgICAgJ0phbicsCiAgICAgICAgICAgICAgICAnRmViJywKICAgICAgICAgICAgICAgICdNYXInLAogICAgICAgICAgICAgICAgJ0FwcicsCiAgICAgICAgICAgICAgICAnTWF5JywKICAgICAgICAgICAgICAgICdKdW4nLAogICAgICAgICAgICAgICAgJ0p1bCcsCiAgICAgICAgICAgICAgICAnQXVnJywKICAgICAgICAgICAgICAgICdTZXAnLAogICAgICAgICAgICAgICAgJ09jdCcsCiAgICAgICAgICAgICAgICAnTm92JywKICAgICAgICAgICAgICAgICdEZWMnLAogICAgICAgICAgICAgICAgJ0phbnVhcnknLAogICAgICAgICAgICAgICAgJ0ZlYnJ1YXJ5JywKICAgICAgICAgICAgICAgICdNYXJjaCcsCiAgICAgICAgICAgICAgICAnQXByaWwnLAogICAgICAgICAgICAgICAgJ01heScsCiAgICAgICAgICAgICAgICAnSnVuZScsCiAgICAgICAgICAgICAgICAnSnVseScsCiAgICAgICAgICAgICAgICAnQXVndXN0JywKICAgICAgICAgICAgICAgICdTZXB0ZW1iZXInLAogICAgICAgICAgICAgICAgJ09jdG9iZXInLAogICAgICAgICAgICAgICAgJ05vdmVtYmVyJywKICAgICAgICAgICAgICAgICdEZWNlbWJlcicKICAgICAgICAgICAgXQogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBkZWZpbmVQcm9wIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBkZWZpbmVQcm9wID0gXy5kZWZpbmVQcm9wID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogU2hvcnRjdXQgZm9yIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZWZpbmVQcm9wZXJ0aWVzKS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgfERlc2MgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8b2JqICAgICAgIHxPYmplY3QgdG8gZGVmaW5lICAgfAogICAgICAgICAqIHxwcm9wICAgICAgfFByb3BlcnR5IHBhdGggICAgICB8CiAgICAgICAgICogfGRlc2NyaXB0b3J8UHJvcGVydHkgZGVzY3JpcHRvcnwKICAgICAgICAgKiB8cmV0dXJuICAgIHxPYmplY3QgaXRzZWxmICAgICAgfAogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxvYmogICB8T2JqZWN0IHRvIGRlZmluZSAgICB8CiAgICAgICAgICogfHByb3AgIHxQcm9wZXJ0eSBkZXNjcmlwdG9yc3wKICAgICAgICAgKiB8cmV0dXJufE9iamVjdCBpdHNlbGYgICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3Qgb2JqID0ge2I6IHtjOiAzfSwgZDogNCwgZTogNX07CiAgICAgICAgICogZGVmaW5lUHJvcChvYmosICdhJywgewogICAgICAgICAqICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgKiAgICAgICAgIHJldHVybiB0aGlzLmUgKiAyOwogICAgICAgICAqICAgICB9CiAgICAgICAgICogfSk7CiAgICAgICAgICogLy8gb2JqLmEgaXMgZXF1YWwgdG8gMTAKICAgICAgICAgKiBkZWZpbmVQcm9wKG9iaiwgJ2IuYycsIHsKICAgICAgICAgKiAgICAgc2V0OiAoZnVuY3Rpb24gKHZhbCkgewogICAgICAgICAqICAgICAgICAgLy8gdGhpcyBpcyBwb2ludGVkIHRvIG9iai5iCiAgICAgICAgICogICAgICAgICB0aGlzLmUgPSB2YWw7CiAgICAgICAgICogICAgIH0pLmJpbmQob2JqKQogICAgICAgICAqIH0pOwogICAgICAgICAqIG9iai5iLmMgPSAyOwogICAgICAgICAqIC8vIG9iai5hIGlzIGVxdWFsIHRvIDQKICAgICAgICAgKgogICAgICAgICAqIGNvbnN0IG9iajIgPSB7YTogMSwgYjogMiwgYzogM307CiAgICAgICAgICogZGVmaW5lUHJvcChvYmoyLCB7CiAgICAgICAgICogICAgIGE6IHsKICAgICAgICAgKiAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgewogICAgICAgICAqICAgICAgICAgICAgIHJldHVybiB0aGlzLmM7CiAgICAgICAgICogICAgICAgICB9CiAgICAgICAgICogICAgIH0sCiAgICAgICAgICogICAgIGI6IHsKICAgICAgICAgKiAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbCkgewogICAgICAgICAqICAgICAgICAgICAgIHRoaXMuYyA9IHZhbCAvIDI7CiAgICAgICAgICogICAgICAgICB9CiAgICAgICAgICogICAgIH0KICAgICAgICAgKiB9KTsKICAgICAgICAgKiAvLyBvYmoyLmEgaXMgZXF1YWwgdG8gMwogICAgICAgICAqIG9iajIuYiA9IDQ7CiAgICAgICAgICogLy8gb2JqMi5hIGlzIGVxdWFsIHRvIDIKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGRlZmluZVByb3A8VD4oCiAgICAgICAgICogICAgIG9iajogVCwKICAgICAgICAgKiAgICAgcHJvcDogc3RyaW5nLAogICAgICAgICAqICAgICBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IKICAgICAgICAgKiApOiBUOwogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGRlZmluZVByb3A8VD4ob2JqOiBULCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3JNYXApOiBUOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBjYXN0UGF0aCBpc1N0ciBpc09iaiBlYWNoIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24ob2JqLCBwcm9wLCBkZXNjcmlwdG9yKSB7CiAgICAgICAgICAgIGlmIChpc1N0cihwcm9wKSkgewogICAgICAgICAgICAgICAgZGVmaW5lUHJvcChvYmosIHByb3AsIGRlc2NyaXB0b3IpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqKHByb3ApKSB7CiAgICAgICAgICAgICAgICBlYWNoKHByb3AsIGZ1bmN0aW9uKGRlc2NyaXB0b3IsIHByb3ApIHsKICAgICAgICAgICAgICAgICAgICBkZWZpbmVQcm9wKG9iaiwgcHJvcCwgZGVzY3JpcHRvcik7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBkZWZpbmVQcm9wKG9iaiwgcHJvcCwgZGVzY3JpcHRvcikgewogICAgICAgICAgICB2YXIgcGF0aCA9IGNhc3RQYXRoKHByb3AsIG9iaik7CiAgICAgICAgICAgIHZhciBsYXN0UHJvcCA9IHBhdGgucG9wKCk7CiAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbmQtYXNzaWduICovCgogICAgICAgICAgICB3aGlsZSAoKHByb3AgPSBwYXRoLnNoaWZ0KCkpKSB7CiAgICAgICAgICAgICAgICBpZiAoIW9ialtwcm9wXSkgb2JqW3Byb3BdID0ge307CiAgICAgICAgICAgICAgICBvYmogPSBvYmpbcHJvcF07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGxhc3RQcm9wLCBkZXNjcmlwdG9yKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc0VtcHR5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBpc0VtcHR5ID0gXy5pc0VtcHR5ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2sgaWYgdmFsdWUgaXMgYW4gZW1wdHkgb2JqZWN0IG9yIGFycmF5LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8dmFsICAgfFZhbHVlIHRvIGNoZWNrICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxUcnVlIGlmIHZhbHVlIGlzIGVtcHR5fAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNFbXB0eShbXSk7IC8vIC0+IHRydWUKICAgICAgICAgKiBpc0VtcHR5KHt9KTsgLy8gLT4gdHJ1ZQogICAgICAgICAqIGlzRW1wdHkoJycpOyAvLyAtPiB0cnVlCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpc0VtcHR5KHZhbDogYW55KTogYm9vbGVhbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNBcnJMaWtlIGlzQXJyIGlzU3RyIGlzQXJncyBrZXlzIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuIHRydWU7CgogICAgICAgICAgICBpZiAoaXNBcnJMaWtlKHZhbCkgJiYgKGlzQXJyKHZhbCkgfHwgaXNTdHIodmFsKSB8fCBpc0FyZ3ModmFsKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB2YWwubGVuZ3RoID09PSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4ga2V5cyh2YWwpLmxlbmd0aCA9PT0gMDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdG9OdW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIHRvTnVtID0gXy50b051bSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENvbnZlcnQgdmFsdWUgdG8gYSBudW1iZXIuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx2YWwgICB8VmFsdWUgdG8gcHJvY2Vzc3wKICAgICAgICAgKiB8cmV0dXJufFJlc3VsdCBudW1iZXIgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiB0b051bSgnNScpOyAvLyAtPiA1CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB0b051bSh2YWw6IGFueSk6IG51bWJlcjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNOdW0gaXNPYmogaXNGbiBpc1N0ciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICBpZiAoaXNOdW0odmFsKSkgcmV0dXJuIHZhbDsKCiAgICAgICAgICAgIGlmIChpc09iaih2YWwpKSB7CiAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IGlzRm4odmFsLnZhbHVlT2YpID8gdmFsLnZhbHVlT2YoKSA6IHZhbDsKICAgICAgICAgICAgICAgIHZhbCA9IGlzT2JqKHRlbXApID8gdGVtcCArICcnIDogdGVtcDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFpc1N0cih2YWwpKSByZXR1cm4gdmFsID09PSAwID8gdmFsIDogK3ZhbDsKICAgICAgICAgICAgcmV0dXJuICt2YWw7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHRvSW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciB0b0ludCA9IF8udG9JbnQgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDb252ZXJ0IHZhbHVlIHRvIGFuIGludGVnZXIuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbCAgIHxWYWx1ZSB0byBjb252ZXJ0IHwKICAgICAgICAgKiB8cmV0dXJufENvbnZlcnRlZCBpbnRlZ2VyfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogdG9JbnQoMS4xKTsgLy8gLT4gMQogICAgICAgICAqIHRvSW50KHVuZGVmaW5lZCk7IC8vIC0+IDAKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHRvSW50KHZhbDogYW55KTogbnVtYmVyOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiB0b051bSAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICBpZiAoIXZhbCkgcmV0dXJuIHZhbCA9PT0gMCA/IHZhbCA6IDA7CiAgICAgICAgICAgIHZhbCA9IHRvTnVtKHZhbCk7CiAgICAgICAgICAgIHJldHVybiB2YWwgLSAodmFsICUgMSk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNtcFZlcnNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmNtcFZlcnNpb24gPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDb21wYXJlIHZlcnNpb24gc3RyaW5ncy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx2MSAgICB8VmVyc2lvbiB0byBjb21wYXJlfAogICAgICAgICAqIHx2MiAgICB8VmVyc2lvbiB0byBjb21wYXJlfAogICAgICAgICAqIHxyZXR1cm58Q29tcGFyaXNvbiByZXN1bHQgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY21wVmVyc2lvbignMS4xLjgnLCAnMS4wLjQnKTsgLy8gLT4gMQogICAgICAgICAqIGNtcFZlcnNpb24oJzEuMC4yJywgJzEuMC4yJyk7IC8vIC0+IDAKICAgICAgICAgKiBjbXBWZXJzaW9uKCcyLjAnLCAnMi4wLjAnKTsgLy8gLT4gMAogICAgICAgICAqIGNtcFZlcnNpb24oJzMuMC4xJywgJzMuMC4wLjInKTsgLy8gLT4gMQogICAgICAgICAqIGNtcFZlcnNpb24oJzEuMS4xJywgJzEuMi4zJyk7IC8vIC0+IC0xCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjbXBWZXJzaW9uKHYxOiBzdHJpbmcsIHYyOiBzdHJpbmcpOiBudW1iZXI7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHRvSW50IG1heCAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHYxLCB2MikgewogICAgICAgICAgICB2MSA9IHYxLnNwbGl0KCcuJyk7CiAgICAgICAgICAgIHYyID0gdjIuc3BsaXQoJy4nKTsKICAgICAgICAgICAgdmFyIGxlbiA9IG1heCh2MS5sZW5ndGgsIHYyLmxlbmd0aCk7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgbnVtMSA9IHRvSW50KHYxW2ldKTsKICAgICAgICAgICAgICAgIHZhciBudW0yID0gdG9JbnQodjJbaV0pOwogICAgICAgICAgICAgICAgaWYgKG51bTEgPiBudW0yKSByZXR1cm4gMTsKICAgICAgICAgICAgICAgIGlmIChudW0xIDwgbnVtMikgcmV0dXJuIC0xOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZGV0ZWN0QnJvd3NlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uZGV0ZWN0QnJvd3NlciA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIERldGVjdCBicm93c2VyIGluZm8gdXNpbmcgdWEuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICAgICAgICAgICAgICAgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHVhPW5hdmlnYXRvci51c2VyQWdlbnR8QnJvd3NlciB1c2VyQWdlbnQgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJuICAgICAgICAgICAgICAgIHxPYmplY3QgY29udGFpbmluZyBuYW1lIGFuZCB2ZXJzaW9ufAogICAgICAgICAqCiAgICAgICAgICogQnJvd3NlcnMgc3VwcG9ydGVkOiBpZSwgY2hyb21lLCBlZGdlLCBmaXJlZm94LCBvcGVyYSwgc2FmYXJpLCBpb3MobW9iaWxlIHNhZmFyaSksIGFuZHJvaWQoYW5kcm9pZCBicm93c2VyKQogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3QgYnJvd3NlciA9IGRldGVjdEJyb3dzZXIoKTsKICAgICAgICAgKiBpZiAoYnJvd3Nlci5uYW1lID09PSAnaWUnICYmIGJyb3dzZXIudmVyc2lvbiA8IDkpIHsKICAgICAgICAgKiAgICAgLy8gRG8gc29tZXRoaW5nIGFib3V0IG9sZCBJRS4uLgogICAgICAgICAqIH0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGRldGVjdEJyb3dzZXIodWE/OiBzdHJpbmcpOiB7CiAgICAgICAgICogICAgIG5hbWU6IHN0cmluZzsKICAgICAgICAgKiAgICAgdmVyc2lvbjogbnVtYmVyOwogICAgICAgICAqIH07CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlzQnJvd3NlciB0b0ludCBrZXlzIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24odWEpIHsKICAgICAgICAgICAgdWEgPSB1YSB8fCAoaXNCcm93c2VyID8gbmF2aWdhdG9yLnVzZXJBZ2VudCA6ICcnKTsKICAgICAgICAgICAgdWEgPSB1YS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICB2YXIgaWVWZXIgPSBnZXRWZXIodWEsICdtc2llICcpOwogICAgICAgICAgICBpZiAoaWVWZXIpCiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHZlcnNpb246IGllVmVyLAogICAgICAgICAgICAgICAgICAgIG5hbWU6ICdpZScKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIGlmIChyZWdJZTExLnRlc3QodWEpKQogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiAxMSwKICAgICAgICAgICAgICAgICAgICBuYW1lOiAnaWUnCiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGJyb3dzZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGJyb3dzZXJzW2ldOwogICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gdWEubWF0Y2gocmVnQnJvd3NlcnNbbmFtZV0pOwogICAgICAgICAgICAgICAgaWYgKG1hdGNoID09IG51bGwpIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgdmFyIHZlcnNpb24gPSB0b0ludChtYXRjaFsxXS5zcGxpdCgnLicpWzBdKTsKICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnb3BlcmEnKSB2ZXJzaW9uID0gZ2V0VmVyKHVhLCAndmVyc2lvbi8nKSB8fCB2ZXJzaW9uOwogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLAogICAgICAgICAgICAgICAgICAgIHZlcnNpb246IHZlcnNpb24KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBuYW1lOiAndW5rbm93bicsCiAgICAgICAgICAgICAgICB2ZXJzaW9uOiAtMQogICAgICAgICAgICB9OwogICAgICAgIH07CgogICAgICAgIHZhciByZWdCcm93c2VycyA9IHsKICAgICAgICAgICAgZWRnZTogL2VkZ2VcLyhbMC05Ll9dKykvLAogICAgICAgICAgICBmaXJlZm94OiAvZmlyZWZveFwvKFswLTkuXSspKD86XHN8JCkvLAogICAgICAgICAgICBvcGVyYTogL29wZXJhXC8oWzAtOS5dKykoPzpcc3wkKS8sCiAgICAgICAgICAgIGFuZHJvaWQ6IC9hbmRyb2lkXHMoWzAtOS5dKykvLAogICAgICAgICAgICBpb3M6IC92ZXJzaW9uXC8oWzAtOS5fXSspLiptb2JpbGUuKnNhZmFyaS4qLywKICAgICAgICAgICAgc2FmYXJpOiAvdmVyc2lvblwvKFswLTkuX10rKS4qc2FmYXJpLywKICAgICAgICAgICAgY2hyb21lOiAvKD8hY2hyb20uKm9wciljaHJvbSg/OmV8aXVtKVwvKFswLTkuXSspKDo/XHN8JCkvCiAgICAgICAgfTsKICAgICAgICB2YXIgcmVnSWUxMSA9IC90cmlkZW50XC83XC4vOwogICAgICAgIHZhciBicm93c2VycyA9IGtleXMocmVnQnJvd3NlcnMpOwoKICAgICAgICBmdW5jdGlvbiBnZXRWZXIodWEsIG1hcmspIHsKICAgICAgICAgICAgdmFyIGlkeCA9IHVhLmluZGV4T2YobWFyayk7CiAgICAgICAgICAgIGlmIChpZHggPiAtMSkKICAgICAgICAgICAgICAgIHJldHVybiB0b0ludCh1YS5zdWJzdHJpbmcoaWR4ICsgbWFyay5sZW5ndGgsIHVhLmluZGV4T2YoJy4nLCBpZHgpKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZHVyYXRpb25Gb3JtYXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmR1cmF0aW9uRm9ybWF0ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogU2ltcGxlIGR1cmF0aW9uIGZvcm1hdCBmdW5jdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgICAgICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGR1cmF0aW9uICAgICAgIHxEdXJhdGlvbiB0byBmb3JtYXQsIG1pbGxpc2Vjb25kfAogICAgICAgICAqIHxtYXNrPSdoaDptbTpzcyd8Rm9ybWF0IG1hc2sgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJuICAgICAgICAgfEZvcm1hdHRlZCBkdXJhdGlvbiAgICAgICAgICAgICB8CiAgICAgICAgICoKICAgICAgICAgKiB8TWFza3xEZXNjICAgICAgICB8CiAgICAgICAgICogfC0tLS18LS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxkICAgfERheXMgICAgICAgIHwKICAgICAgICAgKiB8aCAgIHxIb3VycyAgICAgICB8CiAgICAgICAgICogfG0gICB8TWludXRlcyAgICAgfAogICAgICAgICAqIHxzICAgfFNlY29uZHMgICAgIHwKICAgICAgICAgKiB8bCAgIHxNaWxsaXNlY29uZHN8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBkdXJhdGlvbkZvcm1hdCgxMjM0NTY3OCk7IC8vIC0+ICcwMzoyNTo0NScKICAgICAgICAgKiBkdXJhdGlvbkZvcm1hdCgxMjM0NTY3OCwgJ2g6bTpzOmwnKTsgLy8gLT4gJzM6MjU6NDU6Njc4JwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZHVyYXRpb25Gb3JtYXQoZHVyYXRpb246IG51bWJlciwgbWFzaz86IHN0cmluZyk6IHN0cmluZzsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogdG9JbnQgbHBhZCB0b1N0ciAKICAgICAgICAgKi8KCiAgICAgICAgdmFyIGZsb29yID0gTWF0aC5mbG9vcjsKCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGR1cmF0aW9uKSB7CiAgICAgICAgICAgIHZhciBtYXNrID0KICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkCiAgICAgICAgICAgICAgICAgICAgPyBhcmd1bWVudHNbMV0KICAgICAgICAgICAgICAgICAgICA6ICdoaDptbTpzcyc7CiAgICAgICAgICAgIGR1cmF0aW9uID0gdG9JbnQoZHVyYXRpb24pOwogICAgICAgICAgICB2YXIgZCA9IGZsb29yKGR1cmF0aW9uIC8gODY0MDAwMDApOwogICAgICAgICAgICB2YXIgaCA9IGZsb29yKGR1cmF0aW9uIC8gMzYwMDAwMCkgJSAyNDsKICAgICAgICAgICAgdmFyIG0gPSBmbG9vcihkdXJhdGlvbiAvIDYwMDAwKSAlIDYwOwogICAgICAgICAgICB2YXIgcyA9IGZsb29yKGR1cmF0aW9uIC8gMTAwMCkgJSA2MDsKICAgICAgICAgICAgdmFyIGwgPSBmbG9vcihkdXJhdGlvbikgJSAxMDAwOwogICAgICAgICAgICB2YXIgZmxhZ3MgPSB7CiAgICAgICAgICAgICAgICBkOiBkLAogICAgICAgICAgICAgICAgaDogaCwKICAgICAgICAgICAgICAgIGhoOiBwYWRaZXJvKGgpLAogICAgICAgICAgICAgICAgbTogbSwKICAgICAgICAgICAgICAgIG1tOiBwYWRaZXJvKG0pLAogICAgICAgICAgICAgICAgczogcywKICAgICAgICAgICAgICAgIHNzOiBwYWRaZXJvKHMpLAogICAgICAgICAgICAgICAgbDogbCwKICAgICAgICAgICAgICAgIGxsOiBwYWRaZXJvKGwsIDMpCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHJldHVybiBtYXNrLnJlcGxhY2UocmVnVG9rZW4sIGZ1bmN0aW9uKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2ggaW4gZmxhZ3MpIHJldHVybiBmbGFnc1ttYXRjaF07CiAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2guc2xpY2UoMSwgbWF0Y2gubGVuZ3RoIC0gMSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIHZhciBwYWRaZXJvID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgIHZhciBsZW4gPQogICAgICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAyOwogICAgICAgICAgICByZXR1cm4gbHBhZCh0b1N0cihzdHIpLCBsZW4sICcwJyk7CiAgICAgICAgfTsKCiAgICAgICAgdmFyIHJlZ1Rva2VuID0gL2R7MSwyfXxoezEsMn18bXsxLDJ9fHN7MSwyfXxsezEsMn18IlteIl0qInwnW14nXSonL2c7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBmb3JtYXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmZvcm1hdCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEZvcm1hdCBzdHJpbmcgaW4gYSBwcmludGYtbGlrZSBmb3JtYXQuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHN0ciAgICAgIHxTdHJpbmcgdG8gZm9ybWF0ICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8Li4udmFsdWVzfFZhbHVlcyB0byByZXBsYWNlIGZvcm1hdCBzcGVjaWZpZXJzfAogICAgICAgICAqIHxyZXR1cm4gICB8Rm9ybWF0dGVkIHN0cmluZyAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgRm9ybWF0IFNwZWNpZmllcnMKICAgICAgICAgKgogICAgICAgICAqIHxTcGVjaWZpZXJ8RGVzYyAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8JXMgICAgICAgfFN0cmluZyAgICAgICAgICAgICAgfAogICAgICAgICAqIHwlZCwgJWkgICB8SW50ZWdlciAgICAgICAgICAgICB8CiAgICAgICAgICogfCVmICAgICAgIHxGbG9hdGluZyBwb2ludCB2YWx1ZXwKICAgICAgICAgKiB8JW8gICAgICAgfE9iamVjdCAgICAgICAgICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogZm9ybWF0KCclc18lcycsICdmb28nLCAnYmFyJyk7IC8vIC0+ICdmb29fYmFyJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZm9ybWF0KHN0cjogc3RyaW5nLCAuLi52YWx1ZXM6IGFueVtdKTogc3RyaW5nOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiByZXN0QXJncyB0b0ludCB0b051bSB0b1N0ciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IHJlc3RBcmdzKGZ1bmN0aW9uKHN0ciwgdmFsdWVzKSB7CiAgICAgICAgICAgIHZhciByZXQgPSAnJzsKCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzdHIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBjID0gc3RyW2ldOwoKICAgICAgICAgICAgICAgIGlmIChjICE9PSAnJScgfHwgdmFsdWVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIHJldCArPSBjOwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgICAgIHZhciB2YWwgPSB2YWx1ZXMuc2hpZnQoKTsKCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0cltpXSkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2knOgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgogICAgICAgICAgICAgICAgICAgICAgICByZXQgKz0gdG9JbnQodmFsKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgogICAgICAgICAgICAgICAgICAgICAgICByZXQgKz0gdG9OdW0odmFsKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3MnOgogICAgICAgICAgICAgICAgICAgICAgICByZXQgKz0gdG9TdHIodmFsKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ28nOgogICAgICAgICAgICAgICAgICAgICAgICByZXQgKz0gdHJ5U3RyaW5naWZ5KHZhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICBpLS07CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy51bnNoaWZ0KHZhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldCArPSBjOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH0pOwoKICAgICAgICBmdW5jdGlvbiB0cnlTdHJpbmdpZnkob2JqKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJ1tFcnJvciBTdHJpbmdpZnldJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlzQXN5bmNGbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uaXNBc3luY0ZuID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2sgaWYgdmFsdWUgaXMgYW4gYXN5bmMgZnVuY3Rpb24uCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx2YWwgICB8VmFsdWUgdG8gY2hlY2sgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgdmFsdWUgaXMgYW4gYXN5bmMgZnVuY3Rpb258CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBpc0FzeW5jRm4oZnVuY3Rpb24gKiAoKSB7fSk7IC8vIC0+IGZhbHNlCiAgICAgICAgICogaXNBc3luY0ZuKGZ1bmN0aW9uICgpIHt9KTsgLy8gLT4gZmFsc2UKICAgICAgICAgKiBpc0FzeW5jRm4oYXN5bmMgZnVuY3Rpb24gKCkge30pOyAvLyAtPiB0cnVlCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpc0FzeW5jRm4odmFsOiBhbnkpOiBib29sZWFuOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBvYmpUb1N0ciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICByZXR1cm4gb2JqVG9TdHIodmFsKSA9PT0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc0Nsb3NlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5pc0Nsb3NlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2sgaWYgdmFsdWVzIGFyZSBjbG9zZShhbG1vc3QgZXF1YWwpIHRvIGVhY2ggb3RoZXIuCiAgICAgICAgICoKICAgICAgICAgKiBgYWJzKGEtYikgPD0gbWF4KHJlbFRvbCAqIG1heChhYnMoYSksIGFicyhiKSksIGFic1RvbClgCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICAgICB8RGVzYyAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGEgICAgICAgICAgfE51bWJlciB0byBjb21wYXJlICAgICAgIHwKICAgICAgICAgKiB8YiAgICAgICAgICB8TnVtYmVyIHRvIGNvbXBhcmUgICAgICAgfAogICAgICAgICAqIHxyZWxUb2w9MWUtOXxSZWxhdGl2ZSB0b2xlcmFuY2UgICAgICB8CiAgICAgICAgICogfGFic1RvbD0wICAgfEFic29sdXRlIHRvbGVyYW5jZSAgICAgIHwKICAgICAgICAgKiB8cmV0dXJuICAgICB8VHJ1ZSBpZiB2YWx1ZXMgYXJlIGNsb3NlfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNDbG9zZSgxLCAxLjAwMDAwMDAwMDEpOyAvLyAtPiB0cnVlCiAgICAgICAgICogaXNDbG9zZSgxLCAyKTsgLy8gLT4gZmFsc2UKICAgICAgICAgKiBpc0Nsb3NlKDEsIDEuMiwgMC4zKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqIGlzQ2xvc2UoMSwgMS4yLCAwLjEsIDAuMyk7IC8vIC0+IHRydWUKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGlzQ2xvc2UoCiAgICAgICAgICogICAgIGE6IG51bWJlciwKICAgICAgICAgKiAgICAgYjogbnVtYmVyLAogICAgICAgICAqICAgICByZWxUb2w/OiBudW1iZXIsCiAgICAgICAgICogICAgIGFic1RvbD86IG51bWJlcgogICAgICAgICAqICk6IGJvb2xlYW47CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlzTnVtIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oYSwgYiwgcmVsVG9sLCBhYnNUb2wpIHsKICAgICAgICAgICAgaWYgKCFpc051bShyZWxUb2wpKSByZWxUb2wgPSAxZS05OwogICAgICAgICAgICBpZiAoIWlzTnVtKGFic1RvbCkpIGFic1RvbCA9IDA7CiAgICAgICAgICAgIHJldHVybiBhYnMoYSAtIGIpIDw9IG1heChyZWxUb2wgKiBtYXgoYWJzKGEpLCBhYnMoYikpLCBhYnNUb2wpOwogICAgICAgIH07CgogICAgICAgIHZhciBhYnMgPSBNYXRoLmFiczsKICAgICAgICB2YXIgbWF4ID0gTWF0aC5tYXg7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc0VtYWlsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5pc0VtYWlsID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogTG9vc2VseSB2YWxpZGF0ZSBhbiBlbWFpbCBhZGRyZXNzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8dmFsICAgfFZhbHVlIHRvIGNoZWNrICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxUcnVlIGlmIHZhbHVlIGlzIGFuIGVtYWlsIGxpa2Ugc3RyaW5nfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNFbWFpbCgnc3VydW56aUBmb3htYWlsLmNvbScpOyAvLyAtPiB0cnVlCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpc0VtYWlsKHZhbDogc3RyaW5nKTogYm9vbGVhbjsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIHJldHVybiByZWdFbWFpbC50ZXN0KHZhbCk7CiAgICAgICAgfTsKCiAgICAgICAgdmFyIHJlZ0VtYWlsID0gLy4rQC4rXC4uKy87CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc0VxdWFsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5pc0VxdWFsID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogUGVyZm9ybXMgYW4gb3B0aW1pemVkIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cywgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZXF1YWwuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbCAgIHxWYWx1ZSB0byBjb21wYXJlICAgICAgICAgICAgIHwKICAgICAgICAgKiB8b3RoZXIgfE90aGVyIHZhbHVlIHRvIGNvbXBhcmUgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58VHJ1ZSBpZiB2YWx1ZXMgYXJlIGVxdWl2YWxlbnR8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBpc0VxdWFsKFsxLCAyLCAzXSwgWzEsIDIsIDNdKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaXNFcXVhbCh2YWw6IGFueSwgb3RoZXI6IGFueSk6IGJvb2xlYW47CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlzRm4gaGFzIGtleXMgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihhLCBiKSB7CiAgICAgICAgICAgIHJldHVybiBlcShhLCBiKTsKICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBkZWVwRXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spIHsKICAgICAgICAgICAgdmFyIGNsYXNzTmFtZSA9IHRvU3RyaW5nLmNhbGwoYSk7CiAgICAgICAgICAgIGlmIChjbGFzc05hbWUgIT09IHRvU3RyaW5nLmNhbGwoYikpIHJldHVybiBmYWxzZTsKCiAgICAgICAgICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7CiAgICAgICAgICAgICAgICBjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOgogICAgICAgICAgICAgICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJycgKyBhID09PSAnJyArIGI7CgogICAgICAgICAgICAgICAgY2FzZSAnW29iamVjdCBOdW1iZXJdJzoKICAgICAgICAgICAgICAgICAgICBpZiAoK2EgIT09ICthKSByZXR1cm4gK2IgIT09ICtiOwogICAgICAgICAgICAgICAgICAgIHJldHVybiArYSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7CgogICAgICAgICAgICAgICAgY2FzZSAnW29iamVjdCBEYXRlXSc6CiAgICAgICAgICAgICAgICBjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gK2EgPT09ICtiOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgYXJlQXJyYXlzID0gY2xhc3NOYW1lID09PSAnW29iamVjdCBBcnJheV0nOwoKICAgICAgICAgICAgaWYgKCFhcmVBcnJheXMpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYSAhPSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAhPSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgdmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvcjsKICAgICAgICAgICAgICAgIHZhciBiQ3RvciA9IGIuY29uc3RydWN0b3I7CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgYUN0b3IgIT09IGJDdG9yICYmCiAgICAgICAgICAgICAgICAgICAgISgKICAgICAgICAgICAgICAgICAgICAgICAgaXNGbihhQ3RvcikgJiYKICAgICAgICAgICAgICAgICAgICAgICAgYUN0b3IgaW5zdGFuY2VvZiBhQ3RvciAmJgogICAgICAgICAgICAgICAgICAgICAgICBpc0ZuKGJDdG9yKSAmJgogICAgICAgICAgICAgICAgICAgICAgICBiQ3RvciBpbnN0YW5jZW9mIGJDdG9yCiAgICAgICAgICAgICAgICAgICAgKSAmJgogICAgICAgICAgICAgICAgICAgICdjb25zdHJ1Y3RvcicgaW4gYSAmJgogICAgICAgICAgICAgICAgICAgICdjb25zdHJ1Y3RvcicgaW4gYgogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgYVN0YWNrID0gYVN0YWNrIHx8IFtdOwogICAgICAgICAgICBiU3RhY2sgPSBiU3RhY2sgfHwgW107CiAgICAgICAgICAgIHZhciBsZW5ndGggPSBhU3RhY2subGVuZ3RoOwoKICAgICAgICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7CiAgICAgICAgICAgICAgICBpZiAoYVN0YWNrW2xlbmd0aF0gPT09IGEpIHJldHVybiBiU3RhY2tbbGVuZ3RoXSA9PT0gYjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgYVN0YWNrLnB1c2goYSk7CiAgICAgICAgICAgIGJTdGFjay5wdXNoKGIpOwoKICAgICAgICAgICAgaWYgKGFyZUFycmF5cykgewogICAgICAgICAgICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAobGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwoKICAgICAgICAgICAgICAgIHdoaWxlIChsZW5ndGgtLSkgewogICAgICAgICAgICAgICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGFTdGFjaywgYlN0YWNrKSkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFyIF9rZXlzID0ga2V5cyhhKTsKCiAgICAgICAgICAgICAgICB2YXIga2V5OwogICAgICAgICAgICAgICAgbGVuZ3RoID0gX2tleXMubGVuZ3RoOwogICAgICAgICAgICAgICAgaWYgKGtleXMoYikubGVuZ3RoICE9PSBsZW5ndGgpIHJldHVybiBmYWxzZTsKCiAgICAgICAgICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHsKICAgICAgICAgICAgICAgICAgICBrZXkgPSBfa2V5c1tsZW5ndGhdOwogICAgICAgICAgICAgICAgICAgIGlmICghKGhhcyhiLCBrZXkpICYmIGVxKGFba2V5XSwgYltrZXldLCBhU3RhY2ssIGJTdGFjaykpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGFTdGFjay5wb3AoKTsKICAgICAgICAgICAgYlN0YWNrLnBvcCgpOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGVxKGEsIGIsIGFTdGFjaywgYlN0YWNrKSB7CiAgICAgICAgICAgIGlmIChhID09PSBiKSByZXR1cm4gYSAhPT0gMCB8fCAxIC8gYSA9PT0gMSAvIGI7CiAgICAgICAgICAgIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gYSA9PT0gYjsKICAgICAgICAgICAgaWYgKGEgIT09IGEpIHJldHVybiBiICE9PSBiOwogICAgICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiBhOwogICAgICAgICAgICBpZiAodHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiAhPSAnb2JqZWN0JykKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgcmV0dXJuIGRlZXBFcShhLCBiLCBhU3RhY2ssIGJTdGFjayk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaXNFcnIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmlzRXJyID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2sgaWYgdmFsdWUgaXMgYW4gZXJyb3IuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx2YWwgICB8VmFsdWUgdG8gY2hlY2sgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgdmFsdWUgaXMgYW4gZXJyb3J8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBpc0VycihuZXcgRXJyb3IoKSk7IC8vIC0+IHRydWUKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGlzRXJyKHZhbDogYW55KTogYm9vbGVhbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogb2JqVG9TdHIgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgcmV0dXJuIG9ialRvU3RyKHZhbCkgPT09ICdbb2JqZWN0IEVycm9yXSc7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlzSW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBpc0ludCA9IF8uaXNJbnQgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDaGVja3MgaWYgdmFsdWUgaXMgY2xhc3NpZmllZCBhcyBhIEludGVnZXIuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx2YWwgICB8VmFsdWUgdG8gY2hlY2sgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgdmFsdWUgaXMgY29ycmVjdGx5IGNsYXNzaWZpZWR8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBpc0ludCg1KTsgLy8gLT4gdHJ1ZQogICAgICAgICAqIGlzSW50KDUuMSk7IC8vIC0+IGZhbHNlCiAgICAgICAgICogaXNJbnQoe30pOyAvLyAtPiBmYWxzZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaXNJbnQodmFsOiBhbnkpOiBib29sZWFuOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBpc051bSAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICByZXR1cm4gaXNOdW0odmFsKSAmJiB2YWwgJSAxID09PSAwOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc0V2ZW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmlzRXZlbiA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENoZWNrIGlmIG51bWJlciBpcyBldmVuLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8bnVtICAgfE51bWJlciB0byBjaGVjayAgICAgICB8CiAgICAgICAgICogfHJldHVybnxUcnVlIGlmIG51bWJlciBpcyBldmVufAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNFdmVuKDApOyAvLyAtPiB0cnVlCiAgICAgICAgICogaXNFdmVuKDEpOyAvLyAtPiBmYWxzZQogICAgICAgICAqIGlzRXZlbigyKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaXNFdmVuKG51bTogbnVtYmVyKTogYm9vbGVhbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNJbnQgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihudW0pIHsKICAgICAgICAgICAgaWYgKCFpc0ludChudW0pKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIHJldHVybiBudW0gJSAyID09PSAwOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc09kZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgaXNPZGQgPSBfLmlzT2RkID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2sgaWYgbnVtYmVyIGlzIG9kZC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxudW0gICB8TnVtYmVyIHRvIGNoZWNrICAgICAgfAogICAgICAgICAqIHxyZXR1cm58VHJ1ZSBpZiBudW1iZXIgaXMgb2RkfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNPZGQoMCk7IC8vIC0+IGZhbHNlCiAgICAgICAgICogaXNPZGQoMSk7IC8vIC0+IHRydWUKICAgICAgICAgKiBpc09kZCgyKTsgLy8gLT4gZmFsc2UKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGlzT2RkKG51bTogbnVtYmVyKTogYm9vbGVhbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNJbnQgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihudW0pIHsKICAgICAgICAgICAgaWYgKCFpc0ludChudW0pKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIHJldHVybiBudW0gJSAyICE9PSAwOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBoZXggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGhleCA9IF8uaGV4ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogSGV4IGVuY29kaW5nIGFuZCBkZWNvZGluZy4KICAgICAgICAgKgogICAgICAgICAqICMjIyBlbmNvZGUKICAgICAgICAgKgogICAgICAgICAqIFR1cm4gYSBieXRlIGFycmF5IGludG8gYSBoZXggc3RyaW5nLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLXwKICAgICAgICAgKiB8Ynl0ZXMgfEJ5dGUgYXJyYXl8CiAgICAgICAgICogfHJldHVybnxoZXggc3RyaW5nfAogICAgICAgICAqCiAgICAgICAgICogIyMjIGRlY29kZQogICAgICAgICAqCiAgICAgICAgICogVHVybiBhIGhleCBzdHJpbmcgaW50byBhIGJ5dGUgYXJyYXkuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHIgICB8aGV4IHN0cmluZ3wKICAgICAgICAgKiB8cmV0dXJufEJ5dGUgYXJyYXl8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBoZXguZW5jb2RlKFsxNjgsIDE3NCwgMTU1LCAyNTVdKTsgLy8gLT4gJ2E4YWU5YmZmJwogICAgICAgICAqIGhleC5kZWNvZGUoJ2E4YWU5YmZmJyk7IC8vIC0+IFsxNjgsIDE3NCwgMTU1LCAyNTVdCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBjb25zdCBoZXg6IHsKICAgICAgICAgKiAgICAgZW5jb2RlKGJ5dGVzOiBudW1iZXJbXSk6IHN0cmluZzsKICAgICAgICAgKiAgICAgZGVjb2RlKHN0cjogc3RyaW5nKTogbnVtYmVyW107CiAgICAgICAgICogfTsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNPZGQgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSB7CiAgICAgICAgICAgIGVuY29kZTogZnVuY3Rpb24oYnl0ZXMpIHsKICAgICAgICAgICAgICAgIHZhciBoZXggPSBbXTsKCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYnl0ZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZSA9IGJ5dGVzW2ldOwogICAgICAgICAgICAgICAgICAgIGhleC5wdXNoKChieXRlID4+PiA0KS50b1N0cmluZygxNikpOwogICAgICAgICAgICAgICAgICAgIGhleC5wdXNoKChieXRlICYgMHhmKS50b1N0cmluZygxNikpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBoZXguam9pbignJyk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRlY29kZTogZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgICAgICB2YXIgYnl0ZXMgPSBbXTsKICAgICAgICAgICAgICAgIHZhciBsZW4gPSBzdHIubGVuZ3RoOwogICAgICAgICAgICAgICAgaWYgKGlzT2RkKGxlbikpIGxlbi0tOwoKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHsKICAgICAgICAgICAgICAgICAgICBieXRlcy5wdXNoKHBhcnNlSW50KHN0ci5zdWJzdHIoaSwgMiksIDE2KSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGJ5dGVzOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGJ5dGVzVG9TdHIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGJ5dGVzVG9TdHIgPSBfLmJ5dGVzVG9TdHIgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDb252ZXJ0IGJ5dGVzIHRvIHN0cmluZy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgICAgfERlc2MgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHN0ciAgICAgICAgICB8Qnl0ZXMgYXJyYXkgICAgICAgfAogICAgICAgICAqIHxlbmNvZGluZz11dGY4fEVuY29kaW5nIG9mIHN0cmluZ3wKICAgICAgICAgKiB8cmV0dXJuICAgICAgIHxSZXN1bHQgc3RyaW5nICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBieXRlc1RvU3RyKFsxMDgsIDEwNSwgOTksIDEwNSwgOTddKTsgLy8gLT4gJ2xpY2lhJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYnl0ZXNUb1N0cigKICAgICAgICAgKiAgICAgYnl0ZXM6IG51bWJlcltdLAogICAgICAgICAqICAgICBlbmNvZGluZz86IHN0cmluZwogICAgICAgICAqICk6IHN0cmluZzsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogdXRmOCBoZXggYmFzZTY0IAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oYnl0ZXMpIHsKICAgICAgICAgICAgdmFyIGVuY29kaW5nID0KICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkCiAgICAgICAgICAgICAgICAgICAgPyBhcmd1bWVudHNbMV0KICAgICAgICAgICAgICAgICAgICA6ICd1dGY4JzsKICAgICAgICAgICAgaWYgKGVuY29kaW5nID09PSAnaGV4JykgcmV0dXJuIGhleC5lbmNvZGUoYnl0ZXMpOwogICAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICdiYXNlNjQnKSByZXR1cm4gYmFzZTY0LmVuY29kZShieXRlcyk7CiAgICAgICAgICAgIHZhciBzdHIgPSBbXTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBieXRlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgc3RyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzdHIgPSBzdHIuam9pbignJyk7CgogICAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICd1dGY4JykgewogICAgICAgICAgICAgICAgc3RyID0gdXRmOC5kZWNvZGUoc3RyKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHN0cjsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3RyVG9CeXRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgc3RyVG9CeXRlcyA9IF8uc3RyVG9CeXRlcyA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENvbnZlcnQgc3RyaW5nIGludG8gYnl0ZXMuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICAgICAgIHxEZXNjICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHIgICAgICAgICAgfFN0cmluZyB0byBjb252ZXJ0IHwKICAgICAgICAgKiB8ZW5jb2Rpbmc9dXRmOHxFbmNvZGluZyBvZiBzdHJpbmd8CiAgICAgICAgICogfHJldHVybiAgICAgICB8Qnl0ZXMgYXJyYXkgICAgICAgfAogICAgICAgICAqCiAgICAgICAgICogU3VwcG9ydGVkIGVuY29kaW5nOiB1dGY4LCBoZXgsIGJhc2U2NAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogc3RyVG9CeXRlcygnbGljaWEnKTsgLy8gLT4gWzEwOCwgMTA1LCA5OSwgMTA1LCA5N10KICAgICAgICAgKiBzdHJUb0J5dGVzKCdxSzZiL3c9PScsICdiYXNlNjQnKTsgLy8gLT4gWzE2OCwgMTc0LCAxNTUsIDI1NV0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHN0clRvQnl0ZXMoCiAgICAgICAgICogICAgIHN0cjogc3RyaW5nLAogICAgICAgICAqICAgICBlbmNvZGluZz86IHN0cmluZwogICAgICAgICAqICk6IG51bWJlcltdOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiB1dGY4IGhleCBiYXNlNjQgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgdmFyIGVuY29kaW5nID0KICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkCiAgICAgICAgICAgICAgICAgICAgPyBhcmd1bWVudHNbMV0KICAgICAgICAgICAgICAgICAgICA6ICd1dGY4JzsKICAgICAgICAgICAgaWYgKGVuY29kaW5nID09PSAnaGV4JykgcmV0dXJuIGhleC5kZWNvZGUoc3RyKTsKICAgICAgICAgICAgaWYgKGVuY29kaW5nID09PSAnYmFzZTY0JykgcmV0dXJuIGJhc2U2NC5kZWNvZGUoc3RyKTsKICAgICAgICAgICAgdmFyIGJ5dGVzID0gW107CgogICAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICd1dGY4JykgewogICAgICAgICAgICAgICAgc3RyID0gdXRmOC5lbmNvZGUoc3RyKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHN0ci5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgYnl0ZXMucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gYnl0ZXM7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNyYzEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmNyYzEgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDUkMxIGltcGxlbWVudGF0aW9uLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgfERlc2MgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8aW5wdXQgICB8RGF0YSB0byBjYWxjdWxhdGUgICB8CiAgICAgICAgICogfHByZXZpb3VzfFByZXZpb3VzIENSQzEgcmVzdWx0fAogICAgICAgICAqIHxyZXR1cm4gIHxDUkMxIHJlc3VsdCAgICAgICAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNyYzEoJzEyMzQ1Njc4OTAnKS50b1N0cmluZygxNik7IC8vIC0+ICdkJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JjMSgKICAgICAgICAgKiAgICAgaW5wdXQ6IHN0cmluZyB8IG51bWJlcltdLAogICAgICAgICAqICAgICBwcmV2aW91cz86IG51bWJlcgogICAgICAgICAqICk6IG51bWJlcjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNTdHIgc3RyVG9CeXRlcyAKICAgICAgICAgKi8gLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZXhnb3JiYXRjaGV2L25vZGUtY3JjCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihpbnB1dCwgcHJldmlvdXMpIHsKICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHMuc2lnbmVkKGlucHV0LCBwcmV2aW91cykgPj4+IDA7CiAgICAgICAgfTsKCiAgICAgICAgZXhwb3J0cy5zaWduZWQgPSBmdW5jdGlvbihpbnB1dCwgcHJldmlvdXMpIHsKICAgICAgICAgICAgaWYgKGlzU3RyKGlucHV0KSkgaW5wdXQgPSBzdHJUb0J5dGVzKGlucHV0KTsKICAgICAgICAgICAgdmFyIGNyYyA9IH5+cHJldmlvdXM7CiAgICAgICAgICAgIHZhciBhY2N1bSA9IDA7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaW5wdXQubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBieXRlID0gaW5wdXRbaV07CiAgICAgICAgICAgICAgICBhY2N1bSArPSBieXRlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjcmMgKz0gYWNjdW0gJSAyNTY7CiAgICAgICAgICAgIHJldHVybiBjcmMgJSAyNTY7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNyYzE2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5jcmMxNiA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENSQzE2IGltcGxlbWVudGF0aW9uLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgfERlc2MgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxpbnB1dCAgIHxEYXRhIHRvIGNhbGN1bGF0ZSAgICB8CiAgICAgICAgICogfHByZXZpb3VzfFByZXZpb3VzIENSQzE2IHJlc3VsdHwKICAgICAgICAgKiB8cmV0dXJuICB8Q1JDMTYgcmVzdWx0ICAgICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY3JjMTYoJzEyMzQ1Njc4OTAnKS50b1N0cmluZygxNik7IC8vIC0+ICdjNTdhJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JjMTYoCiAgICAgICAgICogICAgIGlucHV0OiBzdHJpbmcgfCBudW1iZXJbXSwKICAgICAgICAgKiAgICAgcHJldmlvdXM/OiBudW1iZXIKICAgICAgICAgKiApOiBudW1iZXI7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlzU3RyIHN0clRvQnl0ZXMgCiAgICAgICAgICovIC8vIHByZXR0aWVyLWlnbm9yZQoKICAgICAgICB2YXIgVEFCTEUgPSBbCiAgICAgICAgICAgIDB4MDAwMCwKICAgICAgICAgICAgMHhjMGMxLAogICAgICAgICAgICAweGMxODEsCiAgICAgICAgICAgIDB4MDE0MCwKICAgICAgICAgICAgMHhjMzAxLAogICAgICAgICAgICAweDAzYzAsCiAgICAgICAgICAgIDB4MDI4MCwKICAgICAgICAgICAgMHhjMjQxLAogICAgICAgICAgICAweGM2MDEsCiAgICAgICAgICAgIDB4MDZjMCwKICAgICAgICAgICAgMHgwNzgwLAogICAgICAgICAgICAweGM3NDEsCiAgICAgICAgICAgIDB4MDUwMCwKICAgICAgICAgICAgMHhjNWMxLAogICAgICAgICAgICAweGM0ODEsCiAgICAgICAgICAgIDB4MDQ0MCwKICAgICAgICAgICAgMHhjYzAxLAogICAgICAgICAgICAweDBjYzAsCiAgICAgICAgICAgIDB4MGQ4MCwKICAgICAgICAgICAgMHhjZDQxLAogICAgICAgICAgICAweDBmMDAsCiAgICAgICAgICAgIDB4Y2ZjMSwKICAgICAgICAgICAgMHhjZTgxLAogICAgICAgICAgICAweDBlNDAsCiAgICAgICAgICAgIDB4MGEwMCwKICAgICAgICAgICAgMHhjYWMxLAogICAgICAgICAgICAweGNiODEsCiAgICAgICAgICAgIDB4MGI0MCwKICAgICAgICAgICAgMHhjOTAxLAogICAgICAgICAgICAweDA5YzAsCiAgICAgICAgICAgIDB4MDg4MCwKICAgICAgICAgICAgMHhjODQxLAogICAgICAgICAgICAweGQ4MDEsCiAgICAgICAgICAgIDB4MThjMCwKICAgICAgICAgICAgMHgxOTgwLAogICAgICAgICAgICAweGQ5NDEsCiAgICAgICAgICAgIDB4MWIwMCwKICAgICAgICAgICAgMHhkYmMxLAogICAgICAgICAgICAweGRhODEsCiAgICAgICAgICAgIDB4MWE0MCwKICAgICAgICAgICAgMHgxZTAwLAogICAgICAgICAgICAweGRlYzEsCiAgICAgICAgICAgIDB4ZGY4MSwKICAgICAgICAgICAgMHgxZjQwLAogICAgICAgICAgICAweGRkMDEsCiAgICAgICAgICAgIDB4MWRjMCwKICAgICAgICAgICAgMHgxYzgwLAogICAgICAgICAgICAweGRjNDEsCiAgICAgICAgICAgIDB4MTQwMCwKICAgICAgICAgICAgMHhkNGMxLAogICAgICAgICAgICAweGQ1ODEsCiAgICAgICAgICAgIDB4MTU0MCwKICAgICAgICAgICAgMHhkNzAxLAogICAgICAgICAgICAweDE3YzAsCiAgICAgICAgICAgIDB4MTY4MCwKICAgICAgICAgICAgMHhkNjQxLAogICAgICAgICAgICAweGQyMDEsCiAgICAgICAgICAgIDB4MTJjMCwKICAgICAgICAgICAgMHgxMzgwLAogICAgICAgICAgICAweGQzNDEsCiAgICAgICAgICAgIDB4MTEwMCwKICAgICAgICAgICAgMHhkMWMxLAogICAgICAgICAgICAweGQwODEsCiAgICAgICAgICAgIDB4MTA0MCwKICAgICAgICAgICAgMHhmMDAxLAogICAgICAgICAgICAweDMwYzAsCiAgICAgICAgICAgIDB4MzE4MCwKICAgICAgICAgICAgMHhmMTQxLAogICAgICAgICAgICAweDMzMDAsCiAgICAgICAgICAgIDB4ZjNjMSwKICAgICAgICAgICAgMHhmMjgxLAogICAgICAgICAgICAweDMyNDAsCiAgICAgICAgICAgIDB4MzYwMCwKICAgICAgICAgICAgMHhmNmMxLAogICAgICAgICAgICAweGY3ODEsCiAgICAgICAgICAgIDB4Mzc0MCwKICAgICAgICAgICAgMHhmNTAxLAogICAgICAgICAgICAweDM1YzAsCiAgICAgICAgICAgIDB4MzQ4MCwKICAgICAgICAgICAgMHhmNDQxLAogICAgICAgICAgICAweDNjMDAsCiAgICAgICAgICAgIDB4ZmNjMSwKICAgICAgICAgICAgMHhmZDgxLAogICAgICAgICAgICAweDNkNDAsCiAgICAgICAgICAgIDB4ZmYwMSwKICAgICAgICAgICAgMHgzZmMwLAogICAgICAgICAgICAweDNlODAsCiAgICAgICAgICAgIDB4ZmU0MSwKICAgICAgICAgICAgMHhmYTAxLAogICAgICAgICAgICAweDNhYzAsCiAgICAgICAgICAgIDB4M2I4MCwKICAgICAgICAgICAgMHhmYjQxLAogICAgICAgICAgICAweDM5MDAsCiAgICAgICAgICAgIDB4ZjljMSwKICAgICAgICAgICAgMHhmODgxLAogICAgICAgICAgICAweDM4NDAsCiAgICAgICAgICAgIDB4MjgwMCwKICAgICAgICAgICAgMHhlOGMxLAogICAgICAgICAgICAweGU5ODEsCiAgICAgICAgICAgIDB4Mjk0MCwKICAgICAgICAgICAgMHhlYjAxLAogICAgICAgICAgICAweDJiYzAsCiAgICAgICAgICAgIDB4MmE4MCwKICAgICAgICAgICAgMHhlYTQxLAogICAgICAgICAgICAweGVlMDEsCiAgICAgICAgICAgIDB4MmVjMCwKICAgICAgICAgICAgMHgyZjgwLAogICAgICAgICAgICAweGVmNDEsCiAgICAgICAgICAgIDB4MmQwMCwKICAgICAgICAgICAgMHhlZGMxLAogICAgICAgICAgICAweGVjODEsCiAgICAgICAgICAgIDB4MmM0MCwKICAgICAgICAgICAgMHhlNDAxLAogICAgICAgICAgICAweDI0YzAsCiAgICAgICAgICAgIDB4MjU4MCwKICAgICAgICAgICAgMHhlNTQxLAogICAgICAgICAgICAweDI3MDAsCiAgICAgICAgICAgIDB4ZTdjMSwKICAgICAgICAgICAgMHhlNjgxLAogICAgICAgICAgICAweDI2NDAsCiAgICAgICAgICAgIDB4MjIwMCwKICAgICAgICAgICAgMHhlMmMxLAogICAgICAgICAgICAweGUzODEsCiAgICAgICAgICAgIDB4MjM0MCwKICAgICAgICAgICAgMHhlMTAxLAogICAgICAgICAgICAweDIxYzAsCiAgICAgICAgICAgIDB4MjA4MCwKICAgICAgICAgICAgMHhlMDQxLAogICAgICAgICAgICAweGEwMDEsCiAgICAgICAgICAgIDB4NjBjMCwKICAgICAgICAgICAgMHg2MTgwLAogICAgICAgICAgICAweGExNDEsCiAgICAgICAgICAgIDB4NjMwMCwKICAgICAgICAgICAgMHhhM2MxLAogICAgICAgICAgICAweGEyODEsCiAgICAgICAgICAgIDB4NjI0MCwKICAgICAgICAgICAgMHg2NjAwLAogICAgICAgICAgICAweGE2YzEsCiAgICAgICAgICAgIDB4YTc4MSwKICAgICAgICAgICAgMHg2NzQwLAogICAgICAgICAgICAweGE1MDEsCiAgICAgICAgICAgIDB4NjVjMCwKICAgICAgICAgICAgMHg2NDgwLAogICAgICAgICAgICAweGE0NDEsCiAgICAgICAgICAgIDB4NmMwMCwKICAgICAgICAgICAgMHhhY2MxLAogICAgICAgICAgICAweGFkODEsCiAgICAgICAgICAgIDB4NmQ0MCwKICAgICAgICAgICAgMHhhZjAxLAogICAgICAgICAgICAweDZmYzAsCiAgICAgICAgICAgIDB4NmU4MCwKICAgICAgICAgICAgMHhhZTQxLAogICAgICAgICAgICAweGFhMDEsCiAgICAgICAgICAgIDB4NmFjMCwKICAgICAgICAgICAgMHg2YjgwLAogICAgICAgICAgICAweGFiNDEsCiAgICAgICAgICAgIDB4NjkwMCwKICAgICAgICAgICAgMHhhOWMxLAogICAgICAgICAgICAweGE4ODEsCiAgICAgICAgICAgIDB4Njg0MCwKICAgICAgICAgICAgMHg3ODAwLAogICAgICAgICAgICAweGI4YzEsCiAgICAgICAgICAgIDB4Yjk4MSwKICAgICAgICAgICAgMHg3OTQwLAogICAgICAgICAgICAweGJiMDEsCiAgICAgICAgICAgIDB4N2JjMCwKICAgICAgICAgICAgMHg3YTgwLAogICAgICAgICAgICAweGJhNDEsCiAgICAgICAgICAgIDB4YmUwMSwKICAgICAgICAgICAgMHg3ZWMwLAogICAgICAgICAgICAweDdmODAsCiAgICAgICAgICAgIDB4YmY0MSwKICAgICAgICAgICAgMHg3ZDAwLAogICAgICAgICAgICAweGJkYzEsCiAgICAgICAgICAgIDB4YmM4MSwKICAgICAgICAgICAgMHg3YzQwLAogICAgICAgICAgICAweGI0MDEsCiAgICAgICAgICAgIDB4NzRjMCwKICAgICAgICAgICAgMHg3NTgwLAogICAgICAgICAgICAweGI1NDEsCiAgICAgICAgICAgIDB4NzcwMCwKICAgICAgICAgICAgMHhiN2MxLAogICAgICAgICAgICAweGI2ODEsCiAgICAgICAgICAgIDB4NzY0MCwKICAgICAgICAgICAgMHg3MjAwLAogICAgICAgICAgICAweGIyYzEsCiAgICAgICAgICAgIDB4YjM4MSwKICAgICAgICAgICAgMHg3MzQwLAogICAgICAgICAgICAweGIxMDEsCiAgICAgICAgICAgIDB4NzFjMCwKICAgICAgICAgICAgMHg3MDgwLAogICAgICAgICAgICAweGIwNDEsCiAgICAgICAgICAgIDB4NTAwMCwKICAgICAgICAgICAgMHg5MGMxLAogICAgICAgICAgICAweDkxODEsCiAgICAgICAgICAgIDB4NTE0MCwKICAgICAgICAgICAgMHg5MzAxLAogICAgICAgICAgICAweDUzYzAsCiAgICAgICAgICAgIDB4NTI4MCwKICAgICAgICAgICAgMHg5MjQxLAogICAgICAgICAgICAweDk2MDEsCiAgICAgICAgICAgIDB4NTZjMCwKICAgICAgICAgICAgMHg1NzgwLAogICAgICAgICAgICAweDk3NDEsCiAgICAgICAgICAgIDB4NTUwMCwKICAgICAgICAgICAgMHg5NWMxLAogICAgICAgICAgICAweDk0ODEsCiAgICAgICAgICAgIDB4NTQ0MCwKICAgICAgICAgICAgMHg5YzAxLAogICAgICAgICAgICAweDVjYzAsCiAgICAgICAgICAgIDB4NWQ4MCwKICAgICAgICAgICAgMHg5ZDQxLAogICAgICAgICAgICAweDVmMDAsCiAgICAgICAgICAgIDB4OWZjMSwKICAgICAgICAgICAgMHg5ZTgxLAogICAgICAgICAgICAweDVlNDAsCiAgICAgICAgICAgIDB4NWEwMCwKICAgICAgICAgICAgMHg5YWMxLAogICAgICAgICAgICAweDliODEsCiAgICAgICAgICAgIDB4NWI0MCwKICAgICAgICAgICAgMHg5OTAxLAogICAgICAgICAgICAweDU5YzAsCiAgICAgICAgICAgIDB4NTg4MCwKICAgICAgICAgICAgMHg5ODQxLAogICAgICAgICAgICAweDg4MDEsCiAgICAgICAgICAgIDB4NDhjMCwKICAgICAgICAgICAgMHg0OTgwLAogICAgICAgICAgICAweDg5NDEsCiAgICAgICAgICAgIDB4NGIwMCwKICAgICAgICAgICAgMHg4YmMxLAogICAgICAgICAgICAweDhhODEsCiAgICAgICAgICAgIDB4NGE0MCwKICAgICAgICAgICAgMHg0ZTAwLAogICAgICAgICAgICAweDhlYzEsCiAgICAgICAgICAgIDB4OGY4MSwKICAgICAgICAgICAgMHg0ZjQwLAogICAgICAgICAgICAweDhkMDEsCiAgICAgICAgICAgIDB4NGRjMCwKICAgICAgICAgICAgMHg0YzgwLAogICAgICAgICAgICAweDhjNDEsCiAgICAgICAgICAgIDB4NDQwMCwKICAgICAgICAgICAgMHg4NGMxLAogICAgICAgICAgICAweDg1ODEsCiAgICAgICAgICAgIDB4NDU0MCwKICAgICAgICAgICAgMHg4NzAxLAogICAgICAgICAgICAweDQ3YzAsCiAgICAgICAgICAgIDB4NDY4MCwKICAgICAgICAgICAgMHg4NjQxLAogICAgICAgICAgICAweDgyMDEsCiAgICAgICAgICAgIDB4NDJjMCwKICAgICAgICAgICAgMHg0MzgwLAogICAgICAgICAgICAweDgzNDEsCiAgICAgICAgICAgIDB4NDEwMCwKICAgICAgICAgICAgMHg4MWMxLAogICAgICAgICAgICAweDgwODEsCiAgICAgICAgICAgIDB4NDA0MAogICAgICAgIF07CiAgICAgICAgaWYgKHR5cGVvZiBJbnQzMkFycmF5ICE9PSAndW5kZWZpbmVkJykgVEFCTEUgPSBuZXcgSW50MzJBcnJheShUQUJMRSk7CgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihpbnB1dCwgcHJldmlvdXMpIHsKICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHMuc2lnbmVkKGlucHV0LCBwcmV2aW91cykgPj4+IDA7CiAgICAgICAgfTsKCiAgICAgICAgZXhwb3J0cy5zaWduZWQgPSBmdW5jdGlvbihpbnB1dCwgcHJldmlvdXMpIHsKICAgICAgICAgICAgaWYgKGlzU3RyKGlucHV0KSkgaW5wdXQgPSBzdHJUb0J5dGVzKGlucHV0KTsKICAgICAgICAgICAgdmFyIGNyYyA9IH5+cHJldmlvdXM7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaW5wdXQubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBieXRlID0gaW5wdXRbaV07CiAgICAgICAgICAgICAgICBjcmMgPSAoVEFCTEVbKGNyYyBeIGJ5dGUpICYgMHhmZl0gXiAoY3JjID4+IDgpKSAmIDB4ZmZmZjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGNyYzsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY3JjMzIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmNyYzMyID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ1JDMzIgaW1wbGVtZW50YXRpb24uCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICB8RGVzYyAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGlucHV0ICAgfERhdGEgdG8gY2FsY3VsYXRlICAgIHwKICAgICAgICAgKiB8cHJldmlvdXN8UHJldmlvdXMgQ1JDMzIgcmVzdWx0fAogICAgICAgICAqIHxyZXR1cm4gIHxDUkMxNiByZXN1bHQgICAgICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjcmMzMignMTIzNDU2Nzg5MCcpLnRvU3RyaW5nKDE2KTsgLy8gLT4gJzI2MWRhZWU1JwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JjMzIoCiAgICAgICAgICogICAgIGlucHV0OiBzdHJpbmcgfCBudW1iZXJbXSwKICAgICAgICAgKiAgICAgcHJldmlvdXM/OiBudW1iZXIKICAgICAgICAgKiApOiBudW1iZXI7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlzU3RyIHN0clRvQnl0ZXMgCiAgICAgICAgICovCgogICAgICAgIHZhciBUQUJMRSA9IFtdOwoKICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IDI1NjsgbisrKSB7CiAgICAgICAgICAgIHZhciBjID0gbjsKCiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgODsgaysrKSB7CiAgICAgICAgICAgICAgICBpZiAoYyAmIDEpIHsKICAgICAgICAgICAgICAgICAgICBjID0gMHhlZGI4ODMyMCBeIChjID4+PiAxKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYyA9IGMgPj4+IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIFRBQkxFW25dID0gYyA+Pj4gMDsKICAgICAgICB9CgogICAgICAgIGlmICh0eXBlb2YgSW50MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcpIFRBQkxFID0gbmV3IEludDMyQXJyYXkoVEFCTEUpOwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oaW5wdXQsIHByZXZpb3VzKSB7CiAgICAgICAgICAgIHJldHVybiBleHBvcnRzLnNpZ25lZChpbnB1dCwgcHJldmlvdXMpID4+PiAwOwogICAgICAgIH07CgogICAgICAgIGV4cG9ydHMuc2lnbmVkID0gZnVuY3Rpb24oaW5wdXQsIHByZXZpb3VzKSB7CiAgICAgICAgICAgIGlmIChpc1N0cihpbnB1dCkpIGlucHV0ID0gc3RyVG9CeXRlcyhpbnB1dCk7CiAgICAgICAgICAgIHZhciBjcmMgPSBwcmV2aW91cyA9PT0gMCA/IDAgOiB+fnByZXZpb3VzIF4gLTE7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaW5wdXQubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBieXRlID0gaW5wdXRbaV07CiAgICAgICAgICAgICAgICBjcmMgPSBUQUJMRVsoY3JjIF4gYnl0ZSkgJiAweGZmXSBeIChjcmMgPj4+IDgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gY3JjIF4gLTE7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNyYzggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmNyYzggPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDUkM4IGltcGxlbWVudGF0aW9uLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgfERlc2MgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8aW5wdXQgICB8RGF0YSB0byBjYWxjdWxhdGUgICB8CiAgICAgICAgICogfHByZXZpb3VzfFByZXZpb3VzIENSQzggcmVzdWx0fAogICAgICAgICAqIHxyZXR1cm4gIHxDUkM4IHJlc3VsdCAgICAgICAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNyYzgoJzEyMzQ1Njc4OTAnKS50b1N0cmluZygxNik7IC8vIC0+ICc1MicKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyYzgoCiAgICAgICAgICogICAgIGlucHV0OiBzdHJpbmcgfCBudW1iZXJbXSwKICAgICAgICAgKiAgICAgcHJldmlvdXM/OiBudW1iZXIKICAgICAgICAgKiApOiBudW1iZXI7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlzU3RyIHN0clRvQnl0ZXMgCiAgICAgICAgICovIC8vIHByZXR0aWVyLWlnbm9yZQoKICAgICAgICB2YXIgVEFCTEUgPSBbCiAgICAgICAgICAgIDB4MDAsCiAgICAgICAgICAgIDB4MDcsCiAgICAgICAgICAgIDB4MGUsCiAgICAgICAgICAgIDB4MDksCiAgICAgICAgICAgIDB4MWMsCiAgICAgICAgICAgIDB4MWIsCiAgICAgICAgICAgIDB4MTIsCiAgICAgICAgICAgIDB4MTUsCiAgICAgICAgICAgIDB4MzgsCiAgICAgICAgICAgIDB4M2YsCiAgICAgICAgICAgIDB4MzYsCiAgICAgICAgICAgIDB4MzEsCiAgICAgICAgICAgIDB4MjQsCiAgICAgICAgICAgIDB4MjMsCiAgICAgICAgICAgIDB4MmEsCiAgICAgICAgICAgIDB4MmQsCiAgICAgICAgICAgIDB4NzAsCiAgICAgICAgICAgIDB4NzcsCiAgICAgICAgICAgIDB4N2UsCiAgICAgICAgICAgIDB4NzksCiAgICAgICAgICAgIDB4NmMsCiAgICAgICAgICAgIDB4NmIsCiAgICAgICAgICAgIDB4NjIsCiAgICAgICAgICAgIDB4NjUsCiAgICAgICAgICAgIDB4NDgsCiAgICAgICAgICAgIDB4NGYsCiAgICAgICAgICAgIDB4NDYsCiAgICAgICAgICAgIDB4NDEsCiAgICAgICAgICAgIDB4NTQsCiAgICAgICAgICAgIDB4NTMsCiAgICAgICAgICAgIDB4NWEsCiAgICAgICAgICAgIDB4NWQsCiAgICAgICAgICAgIDB4ZTAsCiAgICAgICAgICAgIDB4ZTcsCiAgICAgICAgICAgIDB4ZWUsCiAgICAgICAgICAgIDB4ZTksCiAgICAgICAgICAgIDB4ZmMsCiAgICAgICAgICAgIDB4ZmIsCiAgICAgICAgICAgIDB4ZjIsCiAgICAgICAgICAgIDB4ZjUsCiAgICAgICAgICAgIDB4ZDgsCiAgICAgICAgICAgIDB4ZGYsCiAgICAgICAgICAgIDB4ZDYsCiAgICAgICAgICAgIDB4ZDEsCiAgICAgICAgICAgIDB4YzQsCiAgICAgICAgICAgIDB4YzMsCiAgICAgICAgICAgIDB4Y2EsCiAgICAgICAgICAgIDB4Y2QsCiAgICAgICAgICAgIDB4OTAsCiAgICAgICAgICAgIDB4OTcsCiAgICAgICAgICAgIDB4OWUsCiAgICAgICAgICAgIDB4OTksCiAgICAgICAgICAgIDB4OGMsCiAgICAgICAgICAgIDB4OGIsCiAgICAgICAgICAgIDB4ODIsCiAgICAgICAgICAgIDB4ODUsCiAgICAgICAgICAgIDB4YTgsCiAgICAgICAgICAgIDB4YWYsCiAgICAgICAgICAgIDB4YTYsCiAgICAgICAgICAgIDB4YTEsCiAgICAgICAgICAgIDB4YjQsCiAgICAgICAgICAgIDB4YjMsCiAgICAgICAgICAgIDB4YmEsCiAgICAgICAgICAgIDB4YmQsCiAgICAgICAgICAgIDB4YzcsCiAgICAgICAgICAgIDB4YzAsCiAgICAgICAgICAgIDB4YzksCiAgICAgICAgICAgIDB4Y2UsCiAgICAgICAgICAgIDB4ZGIsCiAgICAgICAgICAgIDB4ZGMsCiAgICAgICAgICAgIDB4ZDUsCiAgICAgICAgICAgIDB4ZDIsCiAgICAgICAgICAgIDB4ZmYsCiAgICAgICAgICAgIDB4ZjgsCiAgICAgICAgICAgIDB4ZjEsCiAgICAgICAgICAgIDB4ZjYsCiAgICAgICAgICAgIDB4ZTMsCiAgICAgICAgICAgIDB4ZTQsCiAgICAgICAgICAgIDB4ZWQsCiAgICAgICAgICAgIDB4ZWEsCiAgICAgICAgICAgIDB4YjcsCiAgICAgICAgICAgIDB4YjAsCiAgICAgICAgICAgIDB4YjksCiAgICAgICAgICAgIDB4YmUsCiAgICAgICAgICAgIDB4YWIsCiAgICAgICAgICAgIDB4YWMsCiAgICAgICAgICAgIDB4YTUsCiAgICAgICAgICAgIDB4YTIsCiAgICAgICAgICAgIDB4OGYsCiAgICAgICAgICAgIDB4ODgsCiAgICAgICAgICAgIDB4ODEsCiAgICAgICAgICAgIDB4ODYsCiAgICAgICAgICAgIDB4OTMsCiAgICAgICAgICAgIDB4OTQsCiAgICAgICAgICAgIDB4OWQsCiAgICAgICAgICAgIDB4OWEsCiAgICAgICAgICAgIDB4MjcsCiAgICAgICAgICAgIDB4MjAsCiAgICAgICAgICAgIDB4MjksCiAgICAgICAgICAgIDB4MmUsCiAgICAgICAgICAgIDB4M2IsCiAgICAgICAgICAgIDB4M2MsCiAgICAgICAgICAgIDB4MzUsCiAgICAgICAgICAgIDB4MzIsCiAgICAgICAgICAgIDB4MWYsCiAgICAgICAgICAgIDB4MTgsCiAgICAgICAgICAgIDB4MTEsCiAgICAgICAgICAgIDB4MTYsCiAgICAgICAgICAgIDB4MDMsCiAgICAgICAgICAgIDB4MDQsCiAgICAgICAgICAgIDB4MGQsCiAgICAgICAgICAgIDB4MGEsCiAgICAgICAgICAgIDB4NTcsCiAgICAgICAgICAgIDB4NTAsCiAgICAgICAgICAgIDB4NTksCiAgICAgICAgICAgIDB4NWUsCiAgICAgICAgICAgIDB4NGIsCiAgICAgICAgICAgIDB4NGMsCiAgICAgICAgICAgIDB4NDUsCiAgICAgICAgICAgIDB4NDIsCiAgICAgICAgICAgIDB4NmYsCiAgICAgICAgICAgIDB4NjgsCiAgICAgICAgICAgIDB4NjEsCiAgICAgICAgICAgIDB4NjYsCiAgICAgICAgICAgIDB4NzMsCiAgICAgICAgICAgIDB4NzQsCiAgICAgICAgICAgIDB4N2QsCiAgICAgICAgICAgIDB4N2EsCiAgICAgICAgICAgIDB4ODksCiAgICAgICAgICAgIDB4OGUsCiAgICAgICAgICAgIDB4ODcsCiAgICAgICAgICAgIDB4ODAsCiAgICAgICAgICAgIDB4OTUsCiAgICAgICAgICAgIDB4OTIsCiAgICAgICAgICAgIDB4OWIsCiAgICAgICAgICAgIDB4OWMsCiAgICAgICAgICAgIDB4YjEsCiAgICAgICAgICAgIDB4YjYsCiAgICAgICAgICAgIDB4YmYsCiAgICAgICAgICAgIDB4YjgsCiAgICAgICAgICAgIDB4YWQsCiAgICAgICAgICAgIDB4YWEsCiAgICAgICAgICAgIDB4YTMsCiAgICAgICAgICAgIDB4YTQsCiAgICAgICAgICAgIDB4ZjksCiAgICAgICAgICAgIDB4ZmUsCiAgICAgICAgICAgIDB4ZjcsCiAgICAgICAgICAgIDB4ZjAsCiAgICAgICAgICAgIDB4ZTUsCiAgICAgICAgICAgIDB4ZTIsCiAgICAgICAgICAgIDB4ZWIsCiAgICAgICAgICAgIDB4ZWMsCiAgICAgICAgICAgIDB4YzEsCiAgICAgICAgICAgIDB4YzYsCiAgICAgICAgICAgIDB4Y2YsCiAgICAgICAgICAgIDB4YzgsCiAgICAgICAgICAgIDB4ZGQsCiAgICAgICAgICAgIDB4ZGEsCiAgICAgICAgICAgIDB4ZDMsCiAgICAgICAgICAgIDB4ZDQsCiAgICAgICAgICAgIDB4NjksCiAgICAgICAgICAgIDB4NmUsCiAgICAgICAgICAgIDB4NjcsCiAgICAgICAgICAgIDB4NjAsCiAgICAgICAgICAgIDB4NzUsCiAgICAgICAgICAgIDB4NzIsCiAgICAgICAgICAgIDB4N2IsCiAgICAgICAgICAgIDB4N2MsCiAgICAgICAgICAgIDB4NTEsCiAgICAgICAgICAgIDB4NTYsCiAgICAgICAgICAgIDB4NWYsCiAgICAgICAgICAgIDB4NTgsCiAgICAgICAgICAgIDB4NGQsCiAgICAgICAgICAgIDB4NGEsCiAgICAgICAgICAgIDB4NDMsCiAgICAgICAgICAgIDB4NDQsCiAgICAgICAgICAgIDB4MTksCiAgICAgICAgICAgIDB4MWUsCiAgICAgICAgICAgIDB4MTcsCiAgICAgICAgICAgIDB4MTAsCiAgICAgICAgICAgIDB4MDUsCiAgICAgICAgICAgIDB4MDIsCiAgICAgICAgICAgIDB4MGIsCiAgICAgICAgICAgIDB4MGMsCiAgICAgICAgICAgIDB4MjEsCiAgICAgICAgICAgIDB4MjYsCiAgICAgICAgICAgIDB4MmYsCiAgICAgICAgICAgIDB4MjgsCiAgICAgICAgICAgIDB4M2QsCiAgICAgICAgICAgIDB4M2EsCiAgICAgICAgICAgIDB4MzMsCiAgICAgICAgICAgIDB4MzQsCiAgICAgICAgICAgIDB4NGUsCiAgICAgICAgICAgIDB4NDksCiAgICAgICAgICAgIDB4NDAsCiAgICAgICAgICAgIDB4NDcsCiAgICAgICAgICAgIDB4NTIsCiAgICAgICAgICAgIDB4NTUsCiAgICAgICAgICAgIDB4NWMsCiAgICAgICAgICAgIDB4NWIsCiAgICAgICAgICAgIDB4NzYsCiAgICAgICAgICAgIDB4NzEsCiAgICAgICAgICAgIDB4NzgsCiAgICAgICAgICAgIDB4N2YsCiAgICAgICAgICAgIDB4NmEsCiAgICAgICAgICAgIDB4NmQsCiAgICAgICAgICAgIDB4NjQsCiAgICAgICAgICAgIDB4NjMsCiAgICAgICAgICAgIDB4M2UsCiAgICAgICAgICAgIDB4MzksCiAgICAgICAgICAgIDB4MzAsCiAgICAgICAgICAgIDB4MzcsCiAgICAgICAgICAgIDB4MjIsCiAgICAgICAgICAgIDB4MjUsCiAgICAgICAgICAgIDB4MmMsCiAgICAgICAgICAgIDB4MmIsCiAgICAgICAgICAgIDB4MDYsCiAgICAgICAgICAgIDB4MDEsCiAgICAgICAgICAgIDB4MDgsCiAgICAgICAgICAgIDB4MGYsCiAgICAgICAgICAgIDB4MWEsCiAgICAgICAgICAgIDB4MWQsCiAgICAgICAgICAgIDB4MTQsCiAgICAgICAgICAgIDB4MTMsCiAgICAgICAgICAgIDB4YWUsCiAgICAgICAgICAgIDB4YTksCiAgICAgICAgICAgIDB4YTAsCiAgICAgICAgICAgIDB4YTcsCiAgICAgICAgICAgIDB4YjIsCiAgICAgICAgICAgIDB4YjUsCiAgICAgICAgICAgIDB4YmMsCiAgICAgICAgICAgIDB4YmIsCiAgICAgICAgICAgIDB4OTYsCiAgICAgICAgICAgIDB4OTEsCiAgICAgICAgICAgIDB4OTgsCiAgICAgICAgICAgIDB4OWYsCiAgICAgICAgICAgIDB4OGEsCiAgICAgICAgICAgIDB4OGQsCiAgICAgICAgICAgIDB4ODQsCiAgICAgICAgICAgIDB4ODMsCiAgICAgICAgICAgIDB4ZGUsCiAgICAgICAgICAgIDB4ZDksCiAgICAgICAgICAgIDB4ZDAsCiAgICAgICAgICAgIDB4ZDcsCiAgICAgICAgICAgIDB4YzIsCiAgICAgICAgICAgIDB4YzUsCiAgICAgICAgICAgIDB4Y2MsCiAgICAgICAgICAgIDB4Y2IsCiAgICAgICAgICAgIDB4ZTYsCiAgICAgICAgICAgIDB4ZTEsCiAgICAgICAgICAgIDB4ZTgsCiAgICAgICAgICAgIDB4ZWYsCiAgICAgICAgICAgIDB4ZmEsCiAgICAgICAgICAgIDB4ZmQsCiAgICAgICAgICAgIDB4ZjQsCiAgICAgICAgICAgIDB4ZjMKICAgICAgICBdOwogICAgICAgIGlmICh0eXBlb2YgSW50MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcpIFRBQkxFID0gbmV3IEludDMyQXJyYXkoVEFCTEUpOwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oaW5wdXQsIHByZXZpb3VzKSB7CiAgICAgICAgICAgIHJldHVybiBleHBvcnRzLnNpZ25lZChpbnB1dCwgcHJldmlvdXMpID4+PiAwOwogICAgICAgIH07CgogICAgICAgIGV4cG9ydHMuc2lnbmVkID0gZnVuY3Rpb24oaW5wdXQsIHByZXZpb3VzKSB7CiAgICAgICAgICAgIGlmIChpc1N0cihpbnB1dCkpIGlucHV0ID0gc3RyVG9CeXRlcyhpbnB1dCk7CiAgICAgICAgICAgIHZhciBjcmMgPSB+fnByZXZpb3VzOwoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGlucHV0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgYnl0ZSA9IGlucHV0W2ldOwogICAgICAgICAgICAgICAgY3JjID0gVEFCTEVbKGNyYyBeIGJ5dGUpICYgMHhmZl0gJiAweGZmOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gY3JjOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc0Zpbml0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgaXNGaW5pdGUgPSBfLmlzRmluaXRlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2sgaWYgdmFsdWUgaXMgYSBmaW5pdGUgcHJpbWl0aXZlIG51bWJlci4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8dmFsICAgfFZhbHVlIHRvIGNoZWNrICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58VHJ1ZSBpZiB2YWx1ZSBpcyBhIGZpbml0ZSBudW1iZXJ8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBpc0Zpbml0ZSgzKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqIGlzRmluaXRlKEluZmluaXR5KTsgLy8gLT4gZmFsc2UKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGlzRmluaXRlKHZhbDogYW55KTogYm9vbGVhbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogcm9vdCAKICAgICAgICAgKi8KCiAgICAgICAgdmFyIG5hdGl2ZUlzRmluaXRlID0gcm9vdC5pc0Zpbml0ZTsKICAgICAgICB2YXIgbmF0aXZlSXNOYU4gPSByb290LmlzTmFOOwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIHJldHVybiBuYXRpdmVJc0Zpbml0ZSh2YWwpICYmICFuYXRpdmVJc05hTihwYXJzZUZsb2F0KHZhbCkpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc0dlbmVyYXRvckZuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBpc0dlbmVyYXRvckZuID0gXy5pc0dlbmVyYXRvckZuID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2sgaWYgdmFsdWUgaXMgYSBnZW5lcmF0b3IgZnVuY3Rpb24uCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx2YWwgICB8VmFsdWUgdG8gY2hlY2sgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgdmFsdWUgaXMgYSBnZW5lcmF0b3IgZnVuY3Rpb258CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBpc0dlbmVyYXRvckZuKGZ1bmN0aW9uICogKCkge30pOyAvLyAtPiB0cnVlCiAgICAgICAgICogaXNHZW5lcmF0b3JGbihmdW5jdGlvbiAoKSB7fSk7IC8vIC0+IGZhbHNlCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpc0dlbmVyYXRvckZuKHZhbDogYW55KTogYm9vbGVhbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogb2JqVG9TdHIgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgcmV0dXJuIG9ialRvU3RyKHZhbCkgPT09ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSc7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlzSXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmlzSXAgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDaGVjayBpZiB2YWx1ZSBpcyBhbiBJUCBhZGRyZXNzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHN0ciAgIHxTdHJpbmcgdG8gY2hlY2sgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxUcnVlIGlmIHZhbHVlIGlzIGFuIElQIGFkZHJlc3N8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgdjQKICAgICAgICAgKgogICAgICAgICAqIENoZWNrIGlmIHZhbHVlIGlzIGFuIElQdjQgYWRkcmVzcy4KICAgICAgICAgKgogICAgICAgICAqICMjIyB2NgogICAgICAgICAqCiAgICAgICAgICogQ2hlY2sgaWYgdmFsdWUgaXMgYW4gSVB2NiBhZGRyZXNzLgogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNJcCgnMTkyLjE2OC4xOTEuMScpOyAvLyAtPiB0cnVlCiAgICAgICAgICogaXNJcCgnMToyOjM6NDo1OjY6Nzo4Jyk7IC8vIC0+IHRydWUKICAgICAgICAgKiBpc0lwKCd0ZXN0Jyk7IC8vIC0+IGZhbHNlCiAgICAgICAgICogaXNJcC52NCgnMTkyLjE2OC4xOTEuMScpOyAvLyAtPiB0cnVlCiAgICAgICAgICogaXNJcC52NignMToyOjM6NDo1OjY6Nzo4Jyk7IC8vIC0+IHRydWUKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBpc0lwIHsKICAgICAgICAgKiAgICAgZnVuY3Rpb24gdjQoc3RyOiBzdHJpbmcpOiBib29sZWFuOwogICAgICAgICAqICAgICBmdW5jdGlvbiB2NihzdHI6IHN0cmluZyk6IGJvb2xlYW47CiAgICAgICAgICogfQogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGlzSXAoc3RyOiBzdHJpbmcpOiBib29sZWFuOwogICAgICAgICAqLwogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgcmV0dXJuIGV4cG9ydHMudjQoc3RyKSB8fCBleHBvcnRzLnY2KHN0cik7CiAgICAgICAgfTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9pcC1yZWdleAoKICAgICAgICB2YXIgdjQgPQogICAgICAgICAgICAnKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfSc7CiAgICAgICAgdmFyIHJlZ1Y0ID0gbmV3IFJlZ0V4cCgnXicuY29uY2F0KHY0LCAnJCcpKTsKICAgICAgICB2YXIgdjZzZWcgPSAnW2EtZkEtRlxcZF17MSw0fSc7CiAgICAgICAgdmFyIHY2ID0gWwogICAgICAgICAgICAnKCcsCiAgICAgICAgICAgICcoPzonLmNvbmNhdCh2NnNlZywgJzopezd9KD86JykuY29uY2F0KHY2c2VnLCAnfDopfCcpLAogICAgICAgICAgICAnKD86JwogICAgICAgICAgICAgICAgLmNvbmNhdCh2NnNlZywgJzopezZ9KD86JykKICAgICAgICAgICAgICAgIC5jb25jYXQodjQsICd8OicpCiAgICAgICAgICAgICAgICAuY29uY2F0KHY2c2VnLCAnfDopfCcpLAogICAgICAgICAgICAnKD86JwogICAgICAgICAgICAgICAgLmNvbmNhdCh2NnNlZywgJzopezV9KD86OicpCiAgICAgICAgICAgICAgICAuY29uY2F0KHY0LCAnfCg6JykKICAgICAgICAgICAgICAgIC5jb25jYXQodjZzZWcsICcpezEsMn18Oil8JyksCiAgICAgICAgICAgICcoPzonCiAgICAgICAgICAgICAgICAuY29uY2F0KHY2c2VnLCAnOil7NH0oPzooOicpCiAgICAgICAgICAgICAgICAuY29uY2F0KHY2c2VnLCAnKXswLDF9OicpCiAgICAgICAgICAgICAgICAuY29uY2F0KHY0LCAnfCg6JykKICAgICAgICAgICAgICAgIC5jb25jYXQodjZzZWcsICcpezEsM318Oil8JyksCiAgICAgICAgICAgICcoPzonCiAgICAgICAgICAgICAgICAuY29uY2F0KHY2c2VnLCAnOil7M30oPzooOicpCiAgICAgICAgICAgICAgICAuY29uY2F0KHY2c2VnLCAnKXswLDJ9OicpCiAgICAgICAgICAgICAgICAuY29uY2F0KHY0LCAnfCg6JykKICAgICAgICAgICAgICAgIC5jb25jYXQodjZzZWcsICcpezEsNH18Oil8JyksCiAgICAgICAgICAgICcoPzonCiAgICAgICAgICAgICAgICAuY29uY2F0KHY2c2VnLCAnOil7Mn0oPzooOicpCiAgICAgICAgICAgICAgICAuY29uY2F0KHY2c2VnLCAnKXswLDN9OicpCiAgICAgICAgICAgICAgICAuY29uY2F0KHY0LCAnfCg6JykKICAgICAgICAgICAgICAgIC5jb25jYXQodjZzZWcsICcpezEsNX18Oil8JyksCiAgICAgICAgICAgICcoPzonCiAgICAgICAgICAgICAgICAuY29uY2F0KHY2c2VnLCAnOil7MX0oPzooOicpCiAgICAgICAgICAgICAgICAuY29uY2F0KHY2c2VnLCAnKXswLDR9OicpCiAgICAgICAgICAgICAgICAuY29uY2F0KHY0LCAnfCg6JykKICAgICAgICAgICAgICAgIC5jb25jYXQodjZzZWcsICcpezEsNn18Oil8JyksCiAgICAgICAgICAgICcoPzo6KCg/OjonCiAgICAgICAgICAgICAgICAuY29uY2F0KHY2c2VnLCAnKXswLDV9OicpCiAgICAgICAgICAgICAgICAuY29uY2F0KHY0LCAnfCg/OjonKQogICAgICAgICAgICAgICAgLmNvbmNhdCh2NnNlZywgJyl7MSw3fXw6KSknKSwKICAgICAgICAgICAgJykoJVswLTlhLXpBLVpdezEsfSk/JwogICAgICAgIF0uam9pbignJyk7CiAgICAgICAgdmFyIHJlZ1Y2ID0gbmV3IFJlZ0V4cCgnXicuY29uY2F0KHY2LCAnJCcpKTsKCiAgICAgICAgZXhwb3J0cy52NCA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgICAgICByZXR1cm4gcmVnVjQudGVzdChzdHIpOwogICAgICAgIH07CgogICAgICAgIGV4cG9ydHMudjYgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgcmV0dXJuIHJlZ1Y2LnRlc3Qoc3RyKTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaXNKc29uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5pc0pzb24gPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDaGVjayBpZiB2YWx1ZSBpcyBhIHZhbGlkIEpTT04uCiAgICAgICAgICoKICAgICAgICAgKiBJdCB1c2VzIGBKU09OLnBhcnNlKClgIGFuZCBhIGB0cnkuLi4gY2F0Y2hgIGJsb2NrLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx2YWwgICB8SlNPTiBzdHJpbmcgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxUcnVlIGlmIHZhbHVlIGlzIGEgdmFsaWQgSlNPTnwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGlzSnNvbigneyJhIjogNX0nKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqIGlzSnNvbigieydhJzogNX0iKTsgLy8gLT4gZmFsc2UKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGlzSnNvbih2YWw6IHN0cmluZyk6IGJvb2xlYW47CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgSlNPTi5wYXJzZSh2YWwpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc0xlYXBZZWFyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBpc0xlYXBZZWFyID0gXy5pc0xlYXBZZWFyID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2sgaWYgYSB5ZWFyIGlzIGEgbGVhcCB5ZWFyLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHllYXIgIHxZZWFyIHRvIGNoZWNrICAgICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxUcnVlIGlmIHllYXIgaXMgYSBsZWFwIHllYXJ8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBpc0xlYXBZZWFyKDIwMDApOyAvLyAtPiB0cnVlCiAgICAgICAgICogaXNMZWFwWWVhcigyMDAyKTsgLy8gLT4gZmFsc2UKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcjogbnVtYmVyKTogYm9vbGVhbjsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oeWVhcikgewogICAgICAgICAgICByZXR1cm4geWVhciAlIDQwMCA9PT0gMCB8fCAoeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMCk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlzTWFwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5pc01hcCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENoZWNrIGlmIHZhbHVlIGlzIGEgTWFwIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbCAgIHxWYWx1ZSB0byBjaGVjayAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58VHJ1ZSBpZiB2YWx1ZSBpcyBhIE1hcHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGlzTWFwKG5ldyBNYXAoKSk7IC8vIC0+IHRydWUKICAgICAgICAgKiBpc01hcChuZXcgV2Vha01hcCgpKTsgLy8gLT4gZmFsc2UKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGlzTWFwKHZhbDogYW55KTogYm9vbGVhbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogb2JqVG9TdHIgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgcmV0dXJuIG9ialRvU3RyKHZhbCkgPT09ICdbb2JqZWN0IE1hcF0nOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc01hdGNoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBpc01hdGNoID0gXy5pc01hdGNoID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2sgaWYga2V5cyBhbmQgdmFsdWVzIGluIHNyYyBhcmUgY29udGFpbmVkIGluIG9iai4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG9iaiAgIHxPYmplY3QgdG8gaW5zcGVjdCAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxzcmMgICB8T2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgb2JqZWN0IGlzIG1hdGNoICAgICAgICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBpc01hdGNoKHthOiAxLCBiOiAyfSwge2E6IDF9KTsgLy8gLT4gdHJ1ZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaXNNYXRjaChvYmo6IGFueSwgc3JjOiBhbnkpOiBib29sZWFuOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBrZXlzIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzcmMpIHsKICAgICAgICAgICAgdmFyIF9rZXlzID0ga2V5cyhzcmMpOwoKICAgICAgICAgICAgdmFyIGxlbiA9IF9rZXlzLmxlbmd0aDsKICAgICAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gIWxlbjsKICAgICAgICAgICAgb2JqID0gT2JqZWN0KG9iaik7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIga2V5ID0gX2tleXNbaV07CiAgICAgICAgICAgICAgICBpZiAoc3JjW2tleV0gIT09IG9ialtrZXldIHx8ICEoa2V5IGluIG9iaikpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlzTW9iaWxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5pc01vYmlsZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENoZWNrIHdoZXRoZXIgY2xpZW50IGlzIHVzaW5nIGEgbW9iaWxlIGJyb3dzZXIgdXNpbmcgdWEuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICAgICAgICAgICAgICAgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHVhPW5hdmlnYXRvci51c2VyQWdlbnR8VXNlciBhZ2VudCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJuICAgICAgICAgICAgICAgIHxUcnVlIGlmIHVhIGJlbG9uZ3MgdG8gbW9iaWxlIGJyb3dzZXJzfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNNb2JpbGUobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpc01vYmlsZSh1YT86IHN0cmluZyk6IGJvb2xlYW47CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlzQnJvd3NlciBtZW1vaXplIAogICAgICAgICAqLwoKICAgICAgICB2YXIgcmVnTW9iaWxlQWxsID0gLyhhbmRyb2lkfGJiXGQrfG1lZWdvKS4rbW9iaWxlfGF2YW50Z298YmFkYVwvfGJsYWNrYmVycnl8YmxhemVyfGNvbXBhbHxlbGFpbmV8ZmVubmVjfGhpcHRvcHxpZW1vYmlsZXxpcChob25lfG9kKXxpcmlzfGtpbmRsZXxsZ2UgfG1hZW1vfG1pZHB8bW1wfG1vYmlsZS4rZmlyZWZveHxuZXRmcm9udHxvcGVyYSBtKG9ifGluKWl8cGFsbSggb3MpP3xwaG9uZXxwKGl4aXxyZSlcL3xwbHVja2VyfHBvY2tldHxwc3B8c2VyaWVzKDR8NikwfHN5bWJpYW58dHJlb3x1cFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgY2V8eGRhfHhpaW5vL2k7CiAgICAgICAgdmFyIHJlZ01vYmlsZUZvdXIgPSAvMTIwN3w2MzEwfDY1OTB8M2dzb3w0dGhwfDUwWzEtNl1pfDc3MHN8ODAyc3xhIHdhfGFiYWN8YWMoZXJ8b298cy0pfGFpKGtvfHJuKXxhbChhdnxjYXxjbyl8YW1vaXxhbihleHxueXx5dyl8YXB0dXxhcihjaHxnbyl8YXModGV8dXMpfGF0dHd8YXUoZGl8LW18ciB8cyApfGF2YW58YmUoY2t8bGx8bnEpfGJpKGxifHJkKXxibChhY3xheil8YnIoZXx2KXd8YnVtYnxidy0obnx1KXxjNTVcL3xjYXBpfGNjd2F8Y2RtLXxjZWxsfGNodG18Y2xkY3xjbWQtfGNvKG1wfG5kKXxjcmF3fGRhKGl0fGxsfG5nKXxkYnRlfGRjLXN8ZGV2aXxkaWNhfGRtb2J8ZG8oY3xwKW98ZHMoMTJ8LWQpfGVsKDQ5fGFpKXxlbShsMnx1bCl8ZXIoaWN8azApfGVzbDh8ZXooWzQtN10wfG9zfHdhfHplKXxmZXRjfGZseSgtfF8pfGcxIHV8ZzU2MHxnZW5lfGdmLTV8Zy1tb3xnbyhcLnd8b2QpfGdyKGFkfHVuKXxoYWllfGhjaXR8aGQtKG18cHx0KXxoZWktfGhpKHB0fHRhKXxocCggaXxpcCl8aHMtY3xodChjKC18IHxffGF8Z3xwfHN8dCl8dHApfGh1KGF3fHRjKXxpLSgyMHxnb3xtYSl8aTIzMHxpYWMoIHwtfFwvKXxpYnJvfGlkZWF8aWcwMXxpa29tfGltMWt8aW5ub3xpcGFxfGlyaXN8amEodHx2KWF8amJyb3xqZW11fGppZ3N8a2RkaXxrZWppfGtndCggfFwvKXxrbG9ufGtwdCB8a3djLXxreW8oY3xrKXxsZShub3x4aSl8bGcoIGd8XC8oa3xsfHUpfDUwfDU0fC1bYS13XSl8bGlid3xseW54fG0xLXd8bTNnYXxtNTBcL3xtYSh0ZXx1aXx4byl8bWMoMDF8MjF8Y2EpfG0tY3J8bWUocmN8cmkpfG1pKG84fG9hfHRzKXxtbWVmfG1vKDAxfDAyfGJpfGRlfGRvfHQoLXwgfG98dil8enopfG10KDUwfHAxfHYgKXxtd2JwfG15d2F8bjEwWzAtMl18bjIwWzItM118bjMwKDB8Mil8bjUwKDB8Mnw1KXxuNygwKDB8MSl8MTApfG5lKChjfG0pLXxvbnx0Znx3Znx3Z3x3dCl8bm9rKDZ8aSl8bnpwaHxvMmltfG9wKHRpfHd2KXxvcmFufG93ZzF8cDgwMHxwYW4oYXxkfHQpfHBkeGd8cGcoMTN8LShbMS04XXxjKSl8cGhpbHxwaXJlfHBsKGF5fHVjKXxwbi0yfHBvKGNrfHJ0fHNlKXxwcm94fHBzaW98cHQtZ3xxYS1hfHFjKDA3fDEyfDIxfDMyfDYwfC1bMi03XXxpLSl8cXRla3xyMzgwfHI2MDB8cmFrc3xyaW05fHJvKHZlfHpvKXxzNTVcL3xzYShnZXxtYXxtbXxtc3xueXx2YSl8c2MoMDF8aC18b298cC0pfHNka1wvfHNlKGMoLXwwfDEpfDQ3fG1jfG5kfHJpKXxzZ2gtfHNoYXJ8c2llKC18bSl8c2stMHxzbCg0NXxpZCl8c20oYWx8YXJ8YjN8aXR8dDUpfHNvKGZ0fG55KXxzcCgwMXxoLXx2LXx2ICl8c3koMDF8bWIpfHQyKDE4fDUwKXx0NigwMHwxMHwxOCl8dGEoZ3R8bGspfHRjbC18dGRnLXx0ZWwoaXxtKXx0aW0tfHQtbW98dG8ocGx8c2gpfHRzKDcwfG0tfG0zfG01KXx0eC05fHVwKFwuYnxnMXxzaSl8dXRzdHx2NDAwfHY3NTB8dmVyaXx2aShyZ3x0ZSl8dmsoNDB8NVswLTNdfC12KXx2bTQwfHZvZGF8dnVsY3x2eCg1Mnw1M3w2MHw2MXw3MHw4MHw4MXw4M3w4NXw5OCl8dzNjKC18ICl8d2ViY3x3aGl0fHdpKGcgfG5jfG53KXx3bWxifHdvbnV8eDcwMHx5YXMtfHlvdXJ8emV0b3x6dGUtL2k7CiAgICAgICAgZXhwb3J0cyA9IG1lbW9pemUoZnVuY3Rpb24odWEpIHsKICAgICAgICAgICAgdWEgPSB1YSB8fCAoaXNCcm93c2VyID8gbmF2aWdhdG9yLnVzZXJBZ2VudCA6ICcnKTsKICAgICAgICAgICAgcmV0dXJuIHJlZ01vYmlsZUFsbC50ZXN0KHVhKSB8fCByZWdNb2JpbGVGb3VyLnRlc3QodWEuc3Vic3RyKDAsIDQpKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlzTmFOIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBpc05hTiA9IF8uaXNOYU4gPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDaGVjayBpZiB2YWx1ZSBpcyBhbiBOYU4uCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbCAgIHxWYWx1ZSB0byBjaGVjayAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgdmFsdWUgaXMgYW4gTmFOfAogICAgICAgICAqCiAgICAgICAgICogVW5kZWZpbmVkIGlzIG5vdCBhbiBOYU4sIGRpZmZlcmVudCBmcm9tIGdsb2JhbCBpc05hTiBmdW5jdGlvbi4KICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGlzTmFOKDApOyAvLyAtPiBmYWxzZQogICAgICAgICAqIGlzTmFOKE5hTik7IC8vIC0+IHRydWUKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGlzTmFOKHZhbDogYW55KTogYm9vbGVhbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNOdW0gCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgcmV0dXJuIGlzTnVtKHZhbCkgJiYgdmFsICE9PSArdmFsOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB0eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciB0eXBlID0gXy50eXBlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogRGV0ZXJtaW5lIHRoZSBpbnRlcm5hbCBKYXZhU2NyaXB0IFtbQ2xhc3NdXSBvZiBhbiBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICAgICAgICB8RGVzYyAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx2YWwgICAgICAgICAgIHxWYWx1ZSB0byBnZXQgdHlwZXwKICAgICAgICAgKiB8bG93ZXJDYXNlPXRydWV8TG93ZXJDYXNlIHJlc3VsdCB8CiAgICAgICAgICogfHJldHVybiAgICAgICAgfFR5cGUgb2Ygb2JqZWN0ICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogdHlwZSg1KTsgLy8gLT4gJ251bWJlcicKICAgICAgICAgKiB0eXBlKHt9KTsgLy8gLT4gJ29iamVjdCcKICAgICAgICAgKiB0eXBlKGZ1bmN0aW9uICgpIHt9KTsgLy8gLT4gJ2Z1bmN0aW9uJwogICAgICAgICAqIHR5cGUoW10pOyAvLyAtPiAnYXJyYXknCiAgICAgICAgICogdHlwZShbXSwgZmFsc2UpOyAvLyAtPiAnQXJyYXknCiAgICAgICAgICogdHlwZShhc3luYyBmdW5jdGlvbiAoKSB7fSwgZmFsc2UpOyAvLyAtPiAnQXN5bmNGdW5jdGlvbicKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHR5cGUodmFsOiBhbnksIGxvd2VyQ2FzZT86IGJvb2xlYW4pOiBzdHJpbmc7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIG9ialRvU3RyIGlzTmFOIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIHZhciBsb3dlckNhc2UgPQogICAgICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQKICAgICAgICAgICAgICAgICAgICA/IGFyZ3VtZW50c1sxXQogICAgICAgICAgICAgICAgICAgIDogdHJ1ZTsKICAgICAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCkgcmV0dXJuIGxvd2VyQ2FzZSA/ICdudWxsJyA6ICdOdWxsJzsKICAgICAgICAgICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbG93ZXJDYXNlID8gJ3VuZGVmaW5lZCcgOiAnVW5kZWZpbmVkJzsKICAgICAgICAgICAgaWYgKGlzTmFOKHZhbCkpIHJldHVybiBsb3dlckNhc2UgPyAnbmFuJyA6ICdOYU4nOwogICAgICAgICAgICB2YXIgcmV0ID0gb2JqVG9TdHIodmFsKS5tYXRjaChyZWdPYmopOwogICAgICAgICAgICBpZiAoIXJldCkgcmV0dXJuICcnOwogICAgICAgICAgICByZXR1cm4gbG93ZXJDYXNlID8gcmV0WzFdLnRvTG93ZXJDYXNlKCkgOiByZXRbMV07CiAgICAgICAgfTsKCiAgICAgICAgdmFyIHJlZ09iaiA9IC9eXFtvYmplY3RccysoLio/KV0kLzsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNvbnZlcnRCaW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmNvbnZlcnRCaW4gPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDb252ZXJ0IGJpbmFyeSBkYXRhIHR5cGUuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxiaW4gICB8QmluYXJ5IGRhdGEgdG8gY29udmVydHwKICAgICAgICAgKiB8dHlwZSAgfEJpbmFyeSB0eXBlICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxUYXJnZXQgYmluYXJ5ICAgICAgICAgfAogICAgICAgICAqCiAgICAgICAgICogIyMjIFN1cHBvcnRlZCBiaW5hcnkgdHlwZQogICAgICAgICAqCiAgICAgICAgICogYmFzZTY0LCBBcnJheUJ1ZmZlciwgQXJyYXksIFVpbnQ4QXJyYXksIEJsb2IoYnJvd3NlciksIEJ1ZmZlcihub2RlKQogICAgICAgICAqCiAgICAgICAgICogWW91IGNhbiBub3QgY29udmVydCBCbG9iIHRvIG90aGVyIHR5cGVzIGRpcmVjdGx5IHNpbmNlIGl0J3MgYW4gYXN5bmNocm9ub3VzIHByb2Nlc3MuCiAgICAgICAgICoKICAgICAgICAgKiAjIyMgYmxvYlRvQXJyQnVmZmVyCiAgICAgICAgICoKICAgICAgICAgKiBDb252ZXJ0IEJsb2IgdG8gQXJyYXlCdWZmZXIuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxibG9iICB8QmxvYiB0byBjb252ZXJ0ICAgIHwKICAgICAgICAgKiB8cmV0dXJufEFycmF5QnVmZmVyIHByb21pc2V8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb252ZXJ0QmluKCdxSzZiL3c9PScsICdVaW50OEFycmF5Jyk7IC8vIC0+IFsxNjgsIDE3NCwgMTU1LCAyNTVdCiAgICAgICAgICogY29udmVydEJpbi5ibG9iVG9BcnJCdWZmZXIobmV3IEJsb2IoW10pKS50aGVuKGFyckJ1ZmZlciA9PiB7CiAgICAgICAgICogICAgIC8vIERvIHNvbWV0aGluZy4uLgogICAgICAgICAqIH0pOwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIGNvbnZlcnRCaW4gewogICAgICAgICAqICAgICBmdW5jdGlvbiBibG9iVG9BcnJCdWZmZXIoYmxvYjogYW55KTogUHJvbWlzZTxBcnJheUJ1ZmZlcj47CiAgICAgICAgICogfQogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNvbnZlcnRCaW4oYmluOiBhbnksIHR5cGU6IHN0cmluZyk6IGFueTsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNTdHIgYmFzZTY0IGlzQXJyQnVmZmVyIGlzQXJyIGlzQnVmZmVyIHR5cGUgbG93ZXJDYXNlIAogICAgICAgICAqLwoKICAgICAgICBmdW5jdGlvbiBleHBvcnRzKGJpbiwgdCkgewogICAgICAgICAgICB2YXIgcmVzdWx0OwogICAgICAgICAgICB0ID0gbG93ZXJDYXNlKHQpOwoKICAgICAgICAgICAgaWYgKGlzU3RyKGJpbikpIHsKICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGJhc2U2NC5kZWNvZGUoYmluKSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNBcnJCdWZmZXIoYmluKSkgewogICAgICAgICAgICAgICAgYmluID0gYmluLnNsaWNlKDApOwogICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoYmluKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChpc0FycihiaW4pKSB7CiAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheShiaW4pOwogICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUoYmluKSA9PT0gJ3VpbnQ4YXJyYXknKSB7CiAgICAgICAgICAgICAgICByZXN1bHQgPSBiaW4uc2xpY2UoMCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNCdWZmZXIoYmluKSkgewogICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoYmluLmxlbmd0aCk7CgogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiaW4ubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBiaW5baV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgIHN3aXRjaCAodCkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Jhc2U2NCc6CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGJhc2U2NC5lbmNvZGUocmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2FycmF5YnVmZmVyJzoKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmJ1ZmZlcjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2FycmF5JzoKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gW10uc2xpY2UuY2FsbChyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYnVmZmVyJzoKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQnVmZmVyLmZyb20ocmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Jsb2InOgogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXcgQmxvYihbcmVzdWx0LmJ1ZmZlcl0pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CgogICAgICAgIGV4cG9ydHMuYmxvYlRvQXJyQnVmZmVyID0gZnVuY3Rpb24oYmxvYikgewogICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgICAgICAgICAgICB2YXIgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CgogICAgICAgICAgICAgICAgZmlsZVJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnRhcmdldC5yZXN1bHQpOwogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICBmaWxlUmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbihlcnIpIHsKICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTsKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgZmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGZpbGVUeXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5maWxlVHlwZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgewogICAgICAgICAgICByZXR1cm4gKAogICAgICAgICAgICAgICAgX2FycmF5V2l0aEhvbGVzKGFycikgfHwKICAgICAgICAgICAgICAgIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8CiAgICAgICAgICAgICAgICBfbm9uSXRlcmFibGVSZXN0KCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UnKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgISgKICAgICAgICAgICAgICAgICAgICBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikgfHwKICAgICAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyKSA9PT0gJ1tvYmplY3QgQXJndW1lbnRzXScKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIF9hcnIgPSBbXTsKICAgICAgICAgICAgdmFyIF9uID0gdHJ1ZTsKICAgICAgICAgICAgdmFyIF9kID0gZmFsc2U7CiAgICAgICAgICAgIHZhciBfZSA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGZvciAoCiAgICAgICAgICAgICAgICAgICAgdmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7CiAgICAgICAgICAgICAgICAgICAgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7CiAgICAgICAgICAgICAgICAgICAgX24gPSB0cnVlCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICBfYXJyLnB1c2goX3MudmFsdWUpOwogICAgICAgICAgICAgICAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgICBfZCA9IHRydWU7CiAgICAgICAgICAgICAgICBfZSA9IGVycjsKICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFfbiAmJiBfaVsncmV0dXJuJ10gIT0gbnVsbCkgX2lbJ3JldHVybiddKCk7CiAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgICAgIGlmIChfZCkgdGhyb3cgX2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIF9hcnI7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7CiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7CiAgICAgICAgfQoKICAgICAgICAvKiBEZXRlY3QgZmlsZSB0eXBlIHVzaW5nIG1hZ2ljIG51bWJlci4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxpbnB1dCB8RmlsZSBpbnB1dCAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58T2JqZWN0IGNvbnRhaW5pbmcgZXh0IGFuZCBtaW1lfAogICAgICAgICAqCiAgICAgICAgICogIyMjIFN1cHBvcnRlZCBmaWxlIHR5cGVzCiAgICAgICAgICoKICAgICAgICAgKiBqcGcsIHBuZywgZ2lmLCB3ZWJwLCBibXAsIGd6LCB6aXAsIHJhciwgcGRmLCBleGUKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTsKICAgICAgICAgKiBjb25zdCBmaWxlID0gZnMucmVhZEZpbGVTeW5jKCdwYXRoL3RvL2ZpbGUnKTsKICAgICAgICAgKiBjb25zb2xlLmxvZyhmaWxlVHlwZShmaWxlKSk7IC8vIC0+IHsgZXh0OiAnanBnJywgbWltZTogJ2ltYWdlL2pwZWcnIH0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGZpbGVUeXBlKAogICAgICAgICAqICAgICBpbnB1dDogQnVmZmVyIHwgQXJyYXlCdWZmZXIgfCBVaW50OEFycmF5CiAgICAgICAgICogKTogewogICAgICAgICAqICAgICBleHQ6IHN0cmluZzsKICAgICAgICAgKiAgICAgbWltZTogc3RyaW5nOwogICAgICAgICAqIH0gfCB1bmRlZmluZWQ7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHR5cGUgbWltZSBpc0ZuIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICAgICAgaWYgKHR5cGUoaW5wdXQpICE9PSAndWludDhhcnJheScpIHsKICAgICAgICAgICAgICAgIGlucHV0ID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdHlwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBfdHlwZSA9IHR5cGVzW2ldOwoKICAgICAgICAgICAgICAgIHZhciBfdHlwZTIgPSBfc2xpY2VkVG9BcnJheShfdHlwZSwgMyksCiAgICAgICAgICAgICAgICAgICAgZXh0ID0gX3R5cGUyWzBdLAogICAgICAgICAgICAgICAgICAgIG1hZ2ljID0gX3R5cGUyWzFdLAogICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IF90eXBlMlsyXTsKCiAgICAgICAgICAgICAgICBpZiAoaXNGbihtYWdpYykpIHsKICAgICAgICAgICAgICAgICAgICBpZiAobWFnaWMoaW5wdXQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHQ6IGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbWU6IG1pbWUoZXh0KQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hlY2soaW5wdXQsIG1hZ2ljLCBvZmZzZXQpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgZXh0OiBleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIG1pbWU6IG1pbWUoZXh0KQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICB2YXIgdHlwZXMgPSBbCiAgICAgICAgICAgIFsnanBnJywgWzB4ZmYsIDB4ZDgsIDB4ZmZdXSwKICAgICAgICAgICAgWydwbmcnLCBbMHg4OSwgMHg1MCwgMHg0ZSwgMHg0NywgMHgwZCwgMHgwYSwgMHgxYSwgMHgwYV1dLAogICAgICAgICAgICBbJ2dpZicsIFsweDQ3LCAweDQ5LCAweDQ2XV0sCiAgICAgICAgICAgIFsnd2VicCcsIFsweDU3LCAweDQ1LCAweDQyLCAweDUwXSwgOF0sCiAgICAgICAgICAgIFsnYm1wJywgWzB4NDIsIDB4NGRdXSwKICAgICAgICAgICAgWydneicsIFsweDFmLCAweDhiLCAweDhdXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ3ppcCcsCiAgICAgICAgICAgICAgICBmdW5jdGlvbihpbnB1dCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrKGlucHV0LCBbMHg1MCwgMHg0Yl0pICYmCiAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dFsyXSA9PT0gMHgzIHx8IGlucHV0WzJdID09PSAweDUgfHwgaW5wdXRbMl0gPT09IDB4NykgJiYKICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0WzNdID09PSAweDQgfHwgaW5wdXRbM10gPT09IDB4NiB8fCBpbnB1dFszXSA9PT0gMHg4KQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICdyYXInLAogICAgICAgICAgICAgICAgZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKAogICAgICAgICAgICAgICAgICAgICAgICBjaGVjayhpbnB1dCwgWzB4NTIsIDB4NjEsIDB4NzIsIDB4MjEsIDB4MWEsIDB4N10pICYmCiAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dFs2XSA9PT0gMHgwIHx8IGlucHV0WzZdID09PSAweDEpCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgWydwZGYnLCBbMHgyNSwgMHg1MCwgMHg0NCwgMHg0Nl1dLAogICAgICAgICAgICBbJ2V4ZScsIFsweDRkLCAweDVhXV0KICAgICAgICBdOwoKICAgICAgICBmdW5jdGlvbiBjaGVjayhpbnB1dCwgbWFnaWMpIHsKICAgICAgICAgICAgdmFyIG9mZnNldCA9CiAgICAgICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDA7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gbWFnaWMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChpbnB1dFtvZmZzZXQgKyBpXSAhPT0gbWFnaWNbaV0pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGZuQXJncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uZm5BcmdzID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogVmFsaWRhdGUgZnVuY3Rpb24gYXJndW1lbnRzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgfERlc2MgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx0eXBlc3xBcmd1bWVudCB0eXBlcyB8CiAgICAgICAgICogfGFyZ3MgfEFyZ3VtZW50IG9iamVjdHwKICAgICAgICAgKgogICAgICAgICAqIEl0IHRocm93cyBhbiBleGNlcHRpb24gd2hlbiB2YWxpZGF0aW9uIGZhaWxlZC4KICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGZ1bmN0aW9uIHRlc3QoYSwgYiwgYykgewogICAgICAgICAqICAgICBmbkFyZ3MoWwogICAgICAgICAqICAgICAgICAgJ251bWJlcnxzdHJpbmcnLAogICAgICAgICAqICAgICAgICAgJz9GdW5jdGlvbicsCiAgICAgICAgICogICAgICAgICAnLi4ubnVtYmVyJywKICAgICAgICAgKiAgICAgXSwgYXJndW1lbnRzKTsKICAgICAgICAgKiAgICAgLy8gRG8gc29tZXRoaW5nLgogICAgICAgICAqIH0KICAgICAgICAgKiAvLyBAdHMtaWdub3JlCiAgICAgICAgICogdGVzdCgxNSk7CiAgICAgICAgICogLy8gQHRzLWlnbm9yZQogICAgICAgICAqIHRlc3QoJ3Rlc3QnLCAoKSA9PiB7fSk7CiAgICAgICAgICogdGVzdCgndGVzdCcsICgpID0+IHt9LCA1KTsKICAgICAgICAgKiAvLyBAdHMtaWdub3JlCiAgICAgICAgICogdGVzdCgpOyAvLyBUaHJvdyBlcnJvcgogICAgICAgICAqIC8vIEB0cy1pZ25vcmUKICAgICAgICAgKiB0ZXN0KCd0ZXN0JywgJ3Rlc3QnKTsgLy8gVGhyb3cgZXJyb3IKICAgICAgICAgKiAvLyBAdHMtaWdub3JlCiAgICAgICAgICogdGVzdCgndGVzdCcsICgpID0+IHt9LCA1LCAndGVzdCcpIC8vIFRocm93IGVycm9yCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBmbkFyZ3ModHlwZXM6IHN0cmluZ1tdLCBhcmdzOiBhbnkpOiB2b2lkOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBzdGFydFdpdGggbGFzdCBsb3dlckNhc2UgaXNPYmogdHlwZSAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHR5cGVzLCBhcmdzKSB7CiAgICAgICAgICAgIHZhciBhcmdzTGVuID0gYXJncy5sZW5ndGg7CiAgICAgICAgICAgIHZhciB0eXBlc0xlbiA9IHR5cGVzLmxlbmd0aDsKICAgICAgICAgICAgdmFyIG1pbkxlbiA9IHR5cGVzTGVuOwogICAgICAgICAgICB2YXIgbWF4TGVuID0gdHlwZXNMZW47CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVzTGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBfdHlwZSA9IHR5cGVzW2ldLnNwbGl0KCd8Jyk7CgogICAgICAgICAgICAgICAgaWYgKHN0YXJ0V2l0aChfdHlwZVswXSwgJz8nKSkgewogICAgICAgICAgICAgICAgICAgIF90eXBlWzBdID0gX3R5cGVbMF0uc2xpY2UoMSk7CgogICAgICAgICAgICAgICAgICAgIGlmIChtaW5MZW4gPT09IHR5cGVzTGVuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1pbkxlbiA9IGk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChpID09PSB0eXBlc0xlbiAtIDEgJiYgc3RhcnRXaXRoKF90eXBlWzBdLCAnLi4uJykpIHsKICAgICAgICAgICAgICAgICAgICBtYXhMZW4gPSBJbmZpbml0eTsKICAgICAgICAgICAgICAgICAgICBfdHlwZVswXSA9IF90eXBlWzBdLnNsaWNlKDMpOwoKICAgICAgICAgICAgICAgICAgICBpZiAobWluTGVuID09PSB0eXBlc0xlbikgewogICAgICAgICAgICAgICAgICAgICAgICBtaW5MZW4gPSBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0eXBlc1tpXSA9IF90eXBlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoYXJnc0xlbiA8IG1pbkxlbikgewogICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIGF0IGxlYXN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChtaW5MZW4sICcgYXJncyBidXQgZ290ICcpCiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJnc0xlbikKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnc0xlbiA+IG1heExlbikgewogICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgJ0V4cGVjdGVkIGF0IG1vc3QgJy5jb25jYXQobWF4TGVuLCAnIGFyZ3MgYnV0IGdvdCAnKS5jb25jYXQoYXJnc0xlbikKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmdzTGVuOyBfaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgYXJnID0gYXJnc1tfaV07CgogICAgICAgICAgICAgICAgaWYgKF9pID49IHR5cGVzTGVuKSB7CiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVBcmcoYXJnLCBsYXN0KHR5cGVzKSwgX2kpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUFyZyhhcmcsIHR5cGVzW19pXSwgX2kpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVBcmcodmFsdWUsIHR5cGVzLCBudW0pIHsKICAgICAgICAgICAgdmFyIGlzVmFsaWQgPSBmYWxzZTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0eXBlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgdmFyIHQgPSBsb3dlckNhc2UodHlwZXNbaV0pOwoKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICB0ID09PSAnYW55JyB8fAogICAgICAgICAgICAgICAgICAgICh0ID09PSAnb2JqZWN0JyAmJiBpc09iaih2YWx1ZSkpIHx8CiAgICAgICAgICAgICAgICAgICAgdHlwZSh2YWx1ZSkgPT09IHQKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIWlzVmFsaWQpIHsKICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcigKICAgICAgICAgICAgICAgICAgICAnQXJndW1lbnQgJy5jb25jYXQobnVtLCAnIHNob3VsZCBiZSB0eXBlICcpLmNvbmNhdCh0eXBlcy5qb2luKCd8JykpCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaXNOaWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGlzTmlsID0gXy5pc05pbCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENoZWNrIGlmIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGUgc2FtZSBhcyB2YWx1ZSA9PSBudWxsLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8dmFsICAgfFZhbHVlIHRvIGNoZWNrICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxUcnVlIGlmIHZhbHVlIGlzIG51bGwgb3IgdW5kZWZpbmVkfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNOaWwobnVsbCk7IC8vIC0+IHRydWUKICAgICAgICAgKiBpc05pbCh2b2lkIDApOyAvLyAtPiB0cnVlCiAgICAgICAgICogaXNOaWwodW5kZWZpbmVkKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqIGlzTmlsKGZhbHNlKTsgLy8gLT4gZmFsc2UKICAgICAgICAgKiBpc05pbCgwKTsgLy8gLT4gZmFsc2UKICAgICAgICAgKiBpc05pbChbXSk7IC8vIC0+IGZhbHNlCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpc05pbCh2YWw6IGFueSk6IGJvb2xlYW47CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICByZXR1cm4gdmFsID09IG51bGw7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHRvU3JjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciB0b1NyYyA9IF8udG9TcmMgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDb252ZXJ0IGZ1bmN0aW9uIHRvIGl0cyBzb3VyY2UgY29kZS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGZuICAgIHxGdW5jdGlvbiB0byBjb252ZXJ0fAogICAgICAgICAqIHxyZXR1cm58U291cmNlIGNvZGUgICAgICAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHRvU3JjKE1hdGgubWluKTsgLy8gLT4gJ2Z1bmN0aW9uIG1pbigpIHsgW25hdGl2ZSBjb2RlXSB9JwogICAgICAgICAqIHRvU3JjKGZ1bmN0aW9uICgpIHt9KSAvLyAtPiAnZnVuY3Rpb24gKCkgeyB9JwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdG9TcmMoZm46IEZ1bmN0aW9uKTogc3RyaW5nOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBpc05pbCAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGZuKSB7CiAgICAgICAgICAgIGlmIChpc05pbChmbikpIHJldHVybiAnJzsKCiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZm5Ub1N0ci5jYWxsKGZuKTsKICAgICAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5ICovCiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CgogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZuICsgJyc7CiAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1lbXB0eSAqLwogICAgICAgICAgICB9IGNhdGNoIChlKSB7fQoKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH07CgogICAgICAgIHZhciBmblRvU3RyID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZm5QYXJhbXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmZuUGFyYW1zID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogR2V0IGEgZnVuY3Rpb24gcGFyYW1ldGVyJ3MgbmFtZXMuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGZuICAgIHxGdW5jdGlvbiB0byBnZXQgcGFyYW1ldGVyc3wKICAgICAgICAgKiB8cmV0dXJufE5hbWVzICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogZm5QYXJhbXMoZnVuY3Rpb24gKGEsIGIpIHt9KTsgLy8gLT4gWydhJywgJ2InXQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZm5QYXJhbXMoZm46IEZ1bmN0aW9uIHwgc3RyaW5nKTogc3RyaW5nW107CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHRvU3JjIHN0cmlwQ210IHN0YXJ0V2l0aCBpc1N0ciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGZuKSB7CiAgICAgICAgICAgIHZhciBmblN0ciA9IHN0cmlwQ210KGlzU3RyKGZuKSA/IGZuIDogdG9TcmMoZm4pKTsKICAgICAgICAgICAgdmFyIG9wZW47CiAgICAgICAgICAgIHZhciBjbG9zZTsKCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICFzdGFydFdpdGgoZm5TdHIsICdhc3luYycpICYmCiAgICAgICAgICAgICAgICAhc3RhcnRXaXRoKGZuU3RyLCAnZnVuY3Rpb24nKSAmJgogICAgICAgICAgICAgICAgIXN0YXJ0V2l0aChmblN0ciwgJygnKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIC8vIEFycm93IGZ1bmN0aW9uIHdpdGggbm8gYnJhY2tldHMKICAgICAgICAgICAgICAgIG9wZW4gPSAwOwogICAgICAgICAgICAgICAgY2xvc2UgPSBmblN0ci5pbmRleE9mKCc9PicpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgb3BlbiA9IGZuU3RyLmluZGV4T2YoJygnKSArIDE7CiAgICAgICAgICAgICAgICBjbG9zZSA9IGZuU3RyLmluZGV4T2YoJyknKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHJldCA9IGZuU3RyLnNsaWNlKG9wZW4sIGNsb3NlKTsKICAgICAgICAgICAgcmV0ID0gcmV0Lm1hdGNoKHJlZ0FyZ05hbWVzKTsKICAgICAgICAgICAgcmV0dXJuIHJldCA9PT0gbnVsbCA/IFtdIDogcmV0OwogICAgICAgIH07CgogICAgICAgIHZhciByZWdBcmdOYW1lcyA9IC9bXlxzLF0rL2c7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc05hdGl2ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uaXNOYXRpdmUgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDaGVjayBpZiB2YWx1ZSBpcyBhIG5hdGl2ZSBmdW5jdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbCAgIHxWYWx1ZSB0byBjaGVjayAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58VHJ1ZSBpZiB2YWx1ZSBpcyBhIG5hdGl2ZSBmdW5jdGlvbnwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGlzTmF0aXZlKGZ1bmN0aW9uICgpIHt9KTsgLy8gLT4gZmFsc2UKICAgICAgICAgKiBpc05hdGl2ZShNYXRoLm1pbik7IC8vIC0+IHRydWUKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGlzTmF0aXZlKHZhbDogYW55KTogYm9vbGVhbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNPYmogaXNGbiB0b1NyYyAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICBpZiAoIWlzT2JqKHZhbCkpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgaWYgKGlzRm4odmFsKSkgcmV0dXJuIHJlZ0lzTmF0aXZlLnRlc3QodG9TcmModmFsKSk7IC8vIERldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpID4gNDsgcmVhbGx5IHR5cGVkIGFycmF5IHNwZWNpZmljKQoKICAgICAgICAgICAgcmV0dXJuIHJlZ0lzSG9zdEN0b3IudGVzdCh0b1NyYyh2YWwpKTsKICAgICAgICB9OwoKICAgICAgICB2YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OwogICAgICAgIHZhciByZWdJc05hdGl2ZSA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgICdeJyArCiAgICAgICAgICAgICAgICB0b1NyYyhoYXNPd25Qcm9wZXJ0eSkKICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csICdcXCQmJykKICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgKICAgICAgICAgICAgICAgICAgICAgICAgL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csCiAgICAgICAgICAgICAgICAgICAgICAgICckMS4qPycKICAgICAgICAgICAgICAgICAgICApICsKICAgICAgICAgICAgICAgICckJwogICAgICAgICk7CiAgICAgICAgdmFyIHJlZ0lzSG9zdEN0b3IgPSAvXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLzsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlzTnVsbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uaXNOdWxsID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2sgaWYgdmFsdWUgaXMgYW4gTnVsbC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx2YWwgICB8VmFsdWUgdG8gY2hlY2sgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58VHJ1ZSBpZiB2YWx1ZSBpcyBhbiBOdWxsfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNOdWxsKG51bGwpOyAvLyAtPiB0cnVlCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpc051bGwodmFsOiBhbnkpOiBib29sZWFuOwogICAgICAgICAqLwogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaXNOdW1lcmljIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5pc051bWVyaWMgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDaGVjayBpZiB2YWx1ZSBpcyBudW1lcmljLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbCAgIHxWYWx1ZSB0byBjaGVjayAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxUcnVlIGlmIHZhbHVlIGlzIG51bWVyaWN8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBpc051bWVyaWMoMSk7IC8vIC0+IHRydWUKICAgICAgICAgKiBpc051bWVyaWMoJzEnKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqIGlzTnVtZXJpYyhOdW1iZXIuTUFYX1ZBTFVFKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqIGlzTnVtZXJpYygweEZGKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqIGlzTnVtZXJpYygnJyk7IC8vIC0+IGZhbHNlCiAgICAgICAgICogaXNOdW1lcmljKCcxLjEuMScpOyAvLyAtPiBmYWxzZQogICAgICAgICAqIGlzTnVtZXJpYyhOYU4pOyAvLyAtPiBmYWxzZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaXNOdW1lcmljKHZhbDogYW55KTogYm9vbGVhbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNTdHIgaXNOYU4gaXNGaW5pdGUgaXNBcnIgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgaWYgKGlzU3RyKHZhbCkpIHZhbCA9IHZhbC5yZXBsYWNlKHJlZ0NvbW1hLCAnJyk7CiAgICAgICAgICAgIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdCh2YWwpKSAmJiBpc0Zpbml0ZSh2YWwpICYmICFpc0Fycih2YWwpOwogICAgICAgIH07CgogICAgICAgIHZhciByZWdDb21tYSA9IC8sL2c7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc1ByaW1lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5pc1ByaW1lID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2sgaWYgdGhlIHByb3ZpZGVkIGludGVnZXIgaXMgYSBwcmltZSBudW1iZXIuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG51bSAgIHxOdW1iZXIgdG8gY2hlY2sgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgbnVtYmVyIGlzIGEgcHJpbWUgbnVtYmVyfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNQcmltZSgxMSk7IC8vIC0+IHRydWUKICAgICAgICAgKiBpc1ByaW1lKDgpOyAvLyAtPiBmYWxzZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaXNQcmltZShudW06IG51bWJlcik6IGJvb2xlYW47CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG51bSkgewogICAgICAgICAgICB2YXIgYm91bmRhcnkgPSBNYXRoLmZsb29yKE1hdGguc3FydChudW0pKTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAyOyBpIDw9IGJvdW5kYXJ5OyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChudW0gJSBpID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gbnVtID49IDI7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlzUHJpbWl0aXZlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5pc1ByaW1pdGl2ZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENoZWNrIGlmIHZhbHVlIGlzIHN0cmluZywgbnVtYmVyLCBib29sZWFuIG9yIG51bGwuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx2YWwgICB8VmFsdWUgdG8gY2hlY2sgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgdmFsdWUgaXMgYSBwcmltaXRpdmV8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBpc1ByaW1pdGl2ZSg1KTsgLy8gLT4gdHJ1ZQogICAgICAgICAqIGlzUHJpbWl0aXZlKCdhYmMnKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqIGlzUHJpbWl0aXZlKGZhbHNlKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsOiBhbnkpOiBib29sZWFuOwogICAgICAgICAqLwogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsOwogICAgICAgICAgICByZXR1cm4gdmFsID09IG51bGwgfHwgKHR5cGUgIT09ICdmdW5jdGlvbicgJiYgdHlwZSAhPT0gJ29iamVjdCcpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc1Byb21pc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGlzUHJvbWlzZSA9IF8uaXNQcm9taXNlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2sgaWYgdmFsdWUgbG9va3MgbGlrZSBhIHByb21pc2UuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx2YWwgICB8VmFsdWUgdG8gY2hlY2sgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgdmFsdWUgbG9va3MgbGlrZSBhIHByb21pc2V8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBpc1Byb21pc2UobmV3IFByb21pc2UoZnVuY3Rpb24gKCkge30pKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqIGlzUHJvbWlzZSh7fSk7IC8vIC0+IGZhbHNlCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpc1Byb21pc2UodmFsOiBhbnkpOiBib29sZWFuOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBpc09iaiBpc0ZuIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIHJldHVybiBpc09iaih2YWwpICYmIGlzRm4odmFsLnRoZW4pOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc1JlZ0V4cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgaXNSZWdFeHAgPSBfLmlzUmVnRXhwID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2sgaWYgdmFsdWUgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24uCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx2YWwgICB8VmFsdWUgdG8gY2hlY2sgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgdmFsdWUgaXMgYSByZWd1bGFyIGV4cHJlc3Npb258CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBpc1JlZ0V4cCgvYS8pOyAvLyAtPiB0cnVlCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpc1JlZ0V4cCh2YWw6IGFueSk6IGJvb2xlYW47CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIG9ialRvU3RyIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIHJldHVybiBvYmpUb1N0cih2YWwpID09PSAnW29iamVjdCBSZWdFeHBdJzsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaXNSZWxhdGl2ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uaXNSZWxhdGl2ZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENoZWNrIGlmIHBhdGggYXBwZWFycyB0byBiZSByZWxhdGl2ZS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8cGF0aCAgfFBhdGggdG8gY2hlY2sgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58VHJ1ZSBpZiBwYXRoIGFwcGVhcnMgdG8gYmUgcmVsYXRpdmV8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBpc1JlbGF0aXZlKCdSRUFETUUubWQnKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaXNSZWxhdGl2ZShwYXRoOiBzdHJpbmcpOiBib29sZWFuOwogICAgICAgICAqLwogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihwYXRoKSB7CiAgICAgICAgICAgIHJldHVybiAhcmVnQWJzb2x1dGUudGVzdChwYXRoKTsKICAgICAgICB9OwoKICAgICAgICB2YXIgcmVnQWJzb2x1dGUgPSAvXihbYS16XSs6KT9bXFwvXS9pOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaXNTZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmlzU2V0ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2hlY2sgaWYgdmFsdWUgaXMgYSBTZXQgb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8dmFsICAgfFZhbHVlIHRvIGNoZWNrICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxUcnVlIGlmIHZhbHVlIGlzIGEgU2V0fAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNTZXQobmV3IFNldCgpKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqIGlzU2V0KG5ldyBXZWFrU2V0KCkpOyAvLyAtPiBmYWxzZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaXNTZXQodmFsOiBhbnkpOiBib29sZWFuOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBvYmpUb1N0ciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICByZXR1cm4gb2JqVG9TdHIodmFsKSA9PT0gJ1tvYmplY3QgU2V0XSc7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlzU3ltYm9sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5pc1N5bWJvbCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENoZWNrIGlmIHZhbHVlIGlzIGEgc3ltYm9sLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8dmFsICAgfFZhbHVlIHRvIGNoZWNrICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxUcnVlIGlmIHZhbHVlIGlzIGEgc3ltYm9sfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNTeW1ib2woU3ltYm9sKCd0ZXN0JykpOyAvLyAtPiB0cnVlCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpc1N5bWJvbCh2YWw6IGFueSk6IGJvb2xlYW47CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N5bWJvbCc7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlzVHlwZWRBcnIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmlzVHlwZWRBcnIgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDaGVjayBpZiB2YWx1ZSBpcyBhIHR5cGVkIGFycmF5LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbCAgIHxWYWx1ZSB0byBjaGVjayAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxUcnVlIGlmIHZhbHVlIGlzIGEgdHlwZWQgYXJyYXl8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBpc1R5cGVkQXJyKFtdKTsgLy8gLT4gZmFsc2UKICAgICAgICAgKiBpc1R5cGVkQXJyKG5ldyBVaW50OEFycmF5KDgpKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaXNUeXBlZEFycih2YWw6IGFueSk6IGJvb2xlYW47CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIG9ialRvU3RyIGVhY2ggCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgcmV0dXJuICEhbWFwW29ialRvU3RyKHZhbCldOwogICAgICAgIH07CgogICAgICAgIHZhciBtYXAgPSB7fTsKICAgICAgICBlYWNoKAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAnSW50OEFycmF5JywKICAgICAgICAgICAgICAgICdJbnQxNkFycmF5JywKICAgICAgICAgICAgICAgICdJbnQzMkFycmF5JywKICAgICAgICAgICAgICAgICdVaW50OEFycmF5JywKICAgICAgICAgICAgICAgICdVaW50OENsYW1wZWRBcnJheScsCiAgICAgICAgICAgICAgICAnVWludDE2QXJyYXknLAogICAgICAgICAgICAgICAgJ1VpbnQzMkFycmF5JywKICAgICAgICAgICAgICAgICdGbG9hdDMyQXJyYXknLAogICAgICAgICAgICAgICAgJ0Zsb2F0NjRBcnJheScKICAgICAgICAgICAgXSwKICAgICAgICAgICAgZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgICAgICBtYXBbJ1tvYmplY3QgJyArIHZhbCArICddJ10gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGlzVXJsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5pc1VybCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIExvb3NlbHkgdmFsaWRhdGUgYW4gdXJsLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx2YWwgICB8VmFsdWUgdG8gY2hlY2sgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxUcnVlIGlmIHZhbHVlIGlzIGFuIHVybCBsaWtlIHN0cmluZ3wKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGlzVXJsKCdodHRwOi8vd3d3LmV4YW1wbGUuY29tP2Zvbz1iYXImcGFyYW09dGVzdCcpOyAvLyAtPiB0cnVlCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpc1VybCh2YWw6IHN0cmluZyk6IGJvb2xlYW47CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICByZXR1cm4gcmVnVXJsLnRlc3QodmFsKTsKICAgICAgICB9OwoKICAgICAgICB2YXIgcmVnVXJsID0gL14oPzpcdys6KT9cL1wvKFteXHMuXStcLlxTezJ9fGxvY2FsaG9zdFs6P1xkXSopXFMqJC87CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc1dlYWtNYXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmlzV2Vha01hcCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENoZWNrIGlmIHZhbHVlIGlzIGEgV2Vha01hcCBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbCAgIHxWYWx1ZSB0byBjaGVjayAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgdmFsdWUgaXMgYSBXZWFrTWFwfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNXZWFrTWFwKG5ldyBNYXAoKSk7IC8vIC0+IGZhbHNlCiAgICAgICAgICogaXNXZWFrTWFwKG5ldyBXZWFrTWFwKCkpOyAvLyAtPiB0cnVlCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpc1dlYWtNYXAodmFsOiBhbnkpOiBib29sZWFuOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBvYmpUb1N0ciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICByZXR1cm4gb2JqVG9TdHIodmFsKSA9PT0gJ1tvYmplY3QgV2Vha01hcF0nOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc1dlYWtTZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmlzV2Vha1NldCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENoZWNrIGlmIHZhbHVlIGlzIGEgV2Vha1NldCBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbCAgIHxWYWx1ZSB0byBjaGVjayAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgdmFsdWUgaXMgYSBXZWFrU2V0fAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaXNXZWFrU2V0KG5ldyBTZXQoKSk7IC8vIC0+IGZhbHNlCiAgICAgICAgICogaXNXZWFrU2V0KG5ldyBXZWFrU2V0KCkpOyAvLyAtPiB0cnVlCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpc1dlYWtTZXQodmFsOiBhbnkpOiBib29sZWFuOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBvYmpUb1N0ciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICByZXR1cm4gb2JqVG9TdHIodmFsKSA9PT0gJ1tvYmplY3QgV2Vha1NldF0nOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBqc29uQ2xvbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmpzb25DbG9uZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFVzZSBKU09OIHBhcnNlIGFuZCBzdHJpbmdpZnkgdG8gY2xvbmUgb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx2YWwgICB8VmFsdWUgdG8gY2xvbmV8CiAgICAgICAgICogfHJldHVybnxDbG9uZWQgdmFsdWUgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGpzb25DbG9uZSh7IG5hbWU6ICdsaWNpYScgfSk7IC8vIC0+IHsgbmFtZTogJ2xpY2lhJyB9CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBqc29uQ2xvbmU8VD4odmFsOiBUKTogVDsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbCkpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBrZWJhYkNhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmtlYmFiQ2FzZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENvbnZlcnQgc3RyaW5nIHRvICJrZWJhYkNhc2UiLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHN0ciAgIHxTdHJpbmcgdG8gY29udmVydCB8CiAgICAgICAgICogfHJldHVybnxLZWJhYiBjYXNlZCBzdHJpbmd8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBrZWJhYkNhc2UoJ2Zvb0JhcicpOyAvLyAtPiBmb28tYmFyCiAgICAgICAgICoga2ViYWJDYXNlKCdmb28gYmFyJyk7IC8vIC0+IGZvby1iYXIKICAgICAgICAgKiBrZWJhYkNhc2UoJ2Zvb19iYXInKTsgLy8gLT4gZm9vLWJhcgogICAgICAgICAqIGtlYmFiQ2FzZSgnZm9vLmJhcicpOyAvLyAtPiBmb28tYmFyCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBrZWJhYkNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmc7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHNwbGl0Q2FzZSAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgICAgICByZXR1cm4gc3BsaXRDYXNlKHN0cikuam9pbignLScpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBrZXlDb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5rZXlDb2RlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogS2V5IGNvZGVzIGFuZCBrZXkgbmFtZXMgY29udmVyc2lvbi4KICAgICAgICAgKgogICAgICAgICAqIEdldCBrZXkgY29kZSdzIG5hbWUuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxjb2RlICB8S2V5IGNvZGUgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufENvcnJlc3BvbmRpbmcga2V5IG5hbWV8CiAgICAgICAgICoKICAgICAgICAgKiBHZXQga2V5IG5hbWUncyBjb2RlLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8bmFtZSAgfEtleSBuYW1lICAgICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxDb3JyZXNwb25kaW5nIGtleSBjb2RlfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICoga2V5Q29kZSgxMyk7IC8vIC0+ICdlbnRlcicKICAgICAgICAgKiBrZXlDb2RlKCdlbnRlcicpOyAvLyAtPiAxMwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24ga2V5Q29kZShuYW1lOiBzdHJpbmcpOiBudW1iZXI7CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24ga2V5Q29kZShjb2RlOiBudW1iZXIpOiBzdHJpbmc7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlzU3RyIGludmVydCAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICBpZiAoaXNTdHIodmFsKSkgcmV0dXJuIGNvZGVNYXBbdmFsXTsKICAgICAgICAgICAgcmV0dXJuIG5hbWVNYXBbdmFsXTsKICAgICAgICB9OwoKICAgICAgICB2YXIgY29kZU1hcCA9IHsKICAgICAgICAgICAgYmFja3NwYWNlOiA4LAogICAgICAgICAgICB0YWI6IDksCiAgICAgICAgICAgIGVudGVyOiAxMywKICAgICAgICAgICAgc2hpZnQ6IDE2LAogICAgICAgICAgICBjdHJsOiAxNywKICAgICAgICAgICAgYWx0OiAxOCwKICAgICAgICAgICAgJ3BhdXNlL2JyZWFrJzogMTksCiAgICAgICAgICAgICdjYXBzIGxvY2snOiAyMCwKICAgICAgICAgICAgZXNjOiAyNywKICAgICAgICAgICAgc3BhY2U6IDMyLAogICAgICAgICAgICAncGFnZSB1cCc6IDMzLAogICAgICAgICAgICAncGFnZSBkb3duJzogMzQsCiAgICAgICAgICAgIGVuZDogMzUsCiAgICAgICAgICAgIGhvbWU6IDM2LAogICAgICAgICAgICBsZWZ0OiAzNywKICAgICAgICAgICAgdXA6IDM4LAogICAgICAgICAgICByaWdodDogMzksCiAgICAgICAgICAgIGRvd246IDQwLAogICAgICAgICAgICBpbnNlcnQ6IDQ1LAogICAgICAgICAgICBkZWxldGU6IDQ2LAogICAgICAgICAgICB3aW5kb3dzOiA5MSwKICAgICAgICAgICAgJ3JpZ2h0IHdpbmRvd3MnOiA5MiwKICAgICAgICAgICAgJ3dpbmRvd3MgbWVudSc6IDkzLAogICAgICAgICAgICAnbnVtcGFkIConOiAxMDYsCiAgICAgICAgICAgICdudW1wYWQgKyc6IDEwNywKICAgICAgICAgICAgJ251bXBhZCAtJzogMTA5LAogICAgICAgICAgICAnbnVtcGFkIC4nOiAxMTAsCiAgICAgICAgICAgICdudW1wYWQgLyc6IDExMSwKICAgICAgICAgICAgJ251bSBsb2NrJzogMTQ0LAogICAgICAgICAgICAnc2Nyb2xsIGxvY2snOiAxNDUsCiAgICAgICAgICAgICc7JzogMTg2LAogICAgICAgICAgICAnPSc6IDE4NywKICAgICAgICAgICAgJywnOiAxODgsCiAgICAgICAgICAgICctJzogMTg5LAogICAgICAgICAgICAnLic6IDE5MCwKICAgICAgICAgICAgJy8nOiAxOTEsCiAgICAgICAgICAgICdgJzogMTkyLAogICAgICAgICAgICAnWyc6IDIxOSwKICAgICAgICAgICAgJ1xcJzogMjIwLAogICAgICAgICAgICAnXSc6IDIyMSwKICAgICAgICAgICAgIiciOiAyMjIKICAgICAgICB9OyAvLyBMb3dlciBjYXNlIGNoYXJzCgogICAgICAgIGZvciAodmFyIGkgPSA5NzsgaSA8IDEyMzsgaSsrKSB7CiAgICAgICAgICAgIGNvZGVNYXBbU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpIC0gMzI7CiAgICAgICAgfSAvLyBOdW1iZXJzCgogICAgICAgIGZvciAodmFyIF9pID0gNDg7IF9pIDwgNTg7IF9pKyspIHsKICAgICAgICAgICAgY29kZU1hcFtfaSAtIDQ4XSA9IF9pOwogICAgICAgIH0gLy8gRnVuY3Rpb24ga2V5cwoKICAgICAgICBmb3IgKHZhciBfaTIgPSAxOyBfaTIgPCAxMzsgX2kyKyspIHsKICAgICAgICAgICAgY29kZU1hcFsnZicgKyBfaTJdID0gX2kyICsgMTExOwogICAgICAgIH0gLy8gTnVtcGFkIGtleXMKCiAgICAgICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgMTA7IF9pMysrKSB7CiAgICAgICAgICAgIGNvZGVNYXBbJ251bXBhZCAnICsgX2kzXSA9IF9pMyArIDk2OwogICAgICAgIH0KCiAgICAgICAgdmFyIG5hbWVNYXAgPSBpbnZlcnQoY29kZU1hcCk7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzaXplIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBzaXplID0gXy5zaXplID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogR2V0IHNpemUgb2Ygb2JqZWN0IG9yIGxlbmd0aCBvZiBhcnJheSBsaWtlIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxvYmogICB8Q29sbGVjdGlvbiB0byBpbnNwZWN0fAogICAgICAgICAqIHxyZXR1cm58Q29sbGVjdGlvbiBzaXplICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogc2l6ZSh7YTogMSwgYjogMn0pOyAvLyAtPiAyCiAgICAgICAgICogc2l6ZShbMSwgMiwgM10pOyAvLyAtPiAzCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzaXplKG9iajogYW55KTogbnVtYmVyOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBpc0Fyckxpa2Uga2V5cyAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgICAgICByZXR1cm4gaXNBcnJMaWtlKG9iaikgPyBvYmoubGVuZ3RoIDoga2V5cyhvYmopLmxlbmd0aDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbG9uZ2VzdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgbG9uZ2VzdCA9IF8ubG9uZ2VzdCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEdldCB0aGUgbG9uZ2VzdCBpdGVtIGluIGFuIGFycmF5LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8YXJyICAgfEFycmF5IHRvIGluc3BlY3R8CiAgICAgICAgICogfHJldHVybnxMb25nZXN0IGl0ZW0gICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogbG9uZ2VzdChbJ2EnLCAnYWJjZGUnLCAnYWJjJ10pOyAvLyAtPiAnYWJjZGUnCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBsb25nZXN0KGFycjogc3RyaW5nW10pOiBzdHJpbmc7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHNpemUgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihhcnIpIHsKICAgICAgICAgICAgaWYgKGFyci5sZW5ndGggPCAxKSByZXR1cm47CiAgICAgICAgICAgIHZhciByZXQgPSBhcnJbMF0sCiAgICAgICAgICAgICAgICByZXRTaXplID0gc2l6ZShhcnJbMF0pOwoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDEsIGxlbiA9IGFyci5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgdmFyIGVsU2l6ZSA9IHNpemUoYXJyW2ldKTsKCiAgICAgICAgICAgICAgICBpZiAoZWxTaXplID4gcmV0U2l6ZSkgewogICAgICAgICAgICAgICAgICAgIHJldCA9IGFycltpXTsKICAgICAgICAgICAgICAgICAgICByZXRTaXplID0gZWxTaXplOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBsdHJpbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgbHRyaW0gPSBfLmx0cmltID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogUmVtb3ZlIGNoYXJzIG9yIHdoaXRlLXNwYWNlcyBmcm9tIGJlZ2lubmluZyBvZiBzdHJpbmcuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8c3RyICAgfFN0cmluZyB0byB0cmltICAgIHwKICAgICAgICAgKiB8Y2hhcnMgfENoYXJhY3RlcnMgdG8gdHJpbXwKICAgICAgICAgKiB8cmV0dXJufFRyaW1tZWQgc3RyaW5nICAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGx0cmltKCcgYWJjICAnKTsgLy8gLT4gJ2FiYyAgJwogICAgICAgICAqIGx0cmltKCdfYWJjXycsICdfJyk7IC8vIC0+ICdhYmNfJwogICAgICAgICAqIGx0cmltKCdfYWJjXycsIFsnYScsICdfJ10pOyAvLyAtPiAnYmNfJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbHRyaW0oc3RyOiBzdHJpbmcsIGNoYXJzPzogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmc7CiAgICAgICAgICovCiAgICAgICAgdmFyIHJlZ1NwYWNlID0gL15ccysvOwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oc3RyLCBjaGFycykgewogICAgICAgICAgICBpZiAoY2hhcnMgPT0gbnVsbCkgcmV0dXJuIHN0ci5yZXBsYWNlKHJlZ1NwYWNlLCAnJyk7CiAgICAgICAgICAgIHZhciBzdGFydCA9IDA7CiAgICAgICAgICAgIHZhciBsZW4gPSBzdHIubGVuZ3RoOwogICAgICAgICAgICB2YXIgY2hhckxlbiA9IGNoYXJzLmxlbmd0aDsKICAgICAgICAgICAgdmFyIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgdmFyIGk7CiAgICAgICAgICAgIHZhciBjOwoKICAgICAgICAgICAgd2hpbGUgKGZvdW5kICYmIHN0YXJ0IDwgbGVuKSB7CiAgICAgICAgICAgICAgICBmb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgaSA9IC0xOwogICAgICAgICAgICAgICAgYyA9IHN0ci5jaGFyQXQoc3RhcnQpOwoKICAgICAgICAgICAgICAgIHdoaWxlICgrK2kgPCBjaGFyTGVuKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09IGNoYXJzW2ldKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQrKzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gc3RhcnQgPj0gbGVuID8gJycgOiBzdHIuc3Vic3RyKHN0YXJ0LCBsZW4pOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYXRjaGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBtYXRjaGVyID0gXy5tYXRjaGVyID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogUmV0dXJuIGEgcHJlZGljYXRlIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIGF0dHJzIGFyZSBjb250YWluZWQgaW4gYW4gb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8YXR0cnMgfE9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2h8CiAgICAgICAgICogfHJldHVybnxOZXcgcHJlZGljYXRlIGZ1bmN0aW9uICAgICAgICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3QgZmlsdGVyID0gcmVxdWlyZSgnbGljaWEvZmlsdGVyJyk7CiAgICAgICAgICoKICAgICAgICAgKiBjb25zdCBvYmplY3RzID0gWwogICAgICAgICAqICAgICB7YTogMSwgYjogMiwgYzogMyB9LAogICAgICAgICAqICAgICB7YTogNCwgYjogNSwgYzogNiB9CiAgICAgICAgICogXTsKICAgICAgICAgKiBmaWx0ZXIob2JqZWN0cywgbWF0Y2hlcih7YTogNCwgYzogNiB9KSk7IC8vIC0+IFt7YTogNCwgYjogNSwgYzogNn1dCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBtYXRjaGVyKGF0dHJzOiBhbnkpOiBGdW5jdGlvbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogZXh0ZW5kT3duIGlzTWF0Y2ggCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihhdHRycykgewogICAgICAgICAgICBhdHRycyA9IGV4dGVuZE93bih7fSwgYXR0cnMpOwogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaXNNYXRjaChvYmosIGF0dHJzKTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2FmZUNiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBzYWZlQ2IgPSBfLnNhZmVDYiA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENyZWF0ZSBjYWxsYmFjayBiYXNlZCBvbiBpbnB1dCB2YWx1ZS4KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHNhZmVDYih2YWw/OiBhbnksIGN0eD86IGFueSwgYXJnQ291bnQ/OiBudW1iZXIpOiBGdW5jdGlvbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNGbiBpc09iaiBvcHRpbWl6ZUNiIG1hdGNoZXIgaWRlbnRpdHkgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbih2YWwsIGN0eCwgYXJnQ291bnQpIHsKICAgICAgICAgICAgaWYgKHZhbCA9PSBudWxsKSByZXR1cm4gaWRlbnRpdHk7CiAgICAgICAgICAgIGlmIChpc0ZuKHZhbCkpIHJldHVybiBvcHRpbWl6ZUNiKHZhbCwgY3R4LCBhcmdDb3VudCk7CiAgICAgICAgICAgIGlmIChpc09iaih2YWwpKSByZXR1cm4gbWF0Y2hlcih2YWwpOwogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oa2V5KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iaiA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqW2tleV07CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9OwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBldmVyeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uZXZlcnkgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDaGVjayBpZiBwcmVkaWNhdGUgcmV0dXJuIHRydXRoeSBmb3IgYWxsIGVsZW1lbnRzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxvYmplY3QgIHxDb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3ZlciAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfGl0ZXJhdG9yfEZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbiAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8Y29udGV4dCB8UHJlZGljYXRlIGNvbnRleHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm4gIHxUcnVlIGlmIGFsbCBlbGVtZW50cyBwYXNzIHRoZSBwcmVkaWNhdGUgY2hlY2t8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBldmVyeShbMiwgNF0sIGZ1bmN0aW9uICh2YWwpIHsKICAgICAgICAgKiAgICAgcmV0dXJuIHZhbCAlIDIgPT09IDA7CiAgICAgICAgICogfSk7IC8vIC0+IGZhbHNlCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBldmVyeTxUPigKICAgICAgICAgKiAgICAgb2JqZWN0OiB0eXBlcy5MaXN0PFQ+LAogICAgICAgICAqICAgICBpdGVyYXRvcj86IHR5cGVzLkxpc3RJdGVyYXRvcjxULCBib29sZWFuPiwKICAgICAgICAgKiAgICAgY29udGV4dD86IGFueQogICAgICAgICAqICk6IGJvb2xlYW47CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZXZlcnk8VD4oCiAgICAgICAgICogICAgIG9iamVjdDogdHlwZXMuRGljdGlvbmFyeTxUPiwKICAgICAgICAgKiAgICAgaXRlcmF0b3I/OiB0eXBlcy5PYmplY3RJdGVyYXRvcjxULCBib29sZWFuPiwKICAgICAgICAgKiAgICAgY29udGV4dD86IGFueQogICAgICAgICAqICk6IGJvb2xlYW47CiAgICAgICAgICovCgogICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHNhZmVDYiBpc0Fyckxpa2Uga2V5cyB0eXBlcyAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgcHJlZGljYXRlLCBjdHgpIHsKICAgICAgICAgICAgcHJlZGljYXRlID0gc2FmZUNiKHByZWRpY2F0ZSwgY3R4KTsKCiAgICAgICAgICAgIHZhciBfa2V5cyA9ICFpc0Fyckxpa2Uob2JqKSAmJiBrZXlzKG9iaik7CgogICAgICAgICAgICB2YXIgbGVuID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoOwoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgdmFyIGN1cktleSA9IF9rZXlzID8gX2tleXNbaV0gOiBpOwogICAgICAgICAgICAgICAgaWYgKCFwcmVkaWNhdGUob2JqW2N1cktleV0sIGN1cktleSwgb2JqKSkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZmlsdGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBmaWx0ZXIgPSBfLmZpbHRlciA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgY29sbGVjdGlvbiwgcmV0dXJuaW5nIGFuIGFycmF5IG9mIGFsbCB0aGUgdmFsdWVzIHRoYXQgcGFzcyBhIHRydXRoIHRlc3QuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8b2JqICAgICAgfENvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cHJlZGljYXRlfEZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbiAgICAgICAgIHwKICAgICAgICAgKiB8Y3R4ICAgICAgfFByZWRpY2F0ZSBjb250ZXh0ICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJuICAgfEFycmF5IG9mIGFsbCB2YWx1ZXMgdGhhdCBwYXNzIHByZWRpY2F0ZXwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGZpbHRlcihbMSwgMiwgMywgNCwgNV0sIGZ1bmN0aW9uICh2YWwpIHsKICAgICAgICAgKiAgICAgcmV0dXJuIHZhbCAlIDIgPT09IDA7CiAgICAgICAgICogfSk7IC8vIC0+IFsyLCA0XQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZmlsdGVyPFQ+KAogICAgICAgICAqICAgICBsaXN0OiB0eXBlcy5MaXN0PFQ+LAogICAgICAgICAqICAgICBpdGVyYXRvcjogdHlwZXMuTGlzdEl0ZXJhdG9yPFQsIGJvb2xlYW4+LAogICAgICAgICAqICAgICBjb250ZXh0PzogYW55CiAgICAgICAgICogKTogVFtdOwogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGZpbHRlcjxUPigKICAgICAgICAgKiAgICAgb2JqZWN0OiB0eXBlcy5EaWN0aW9uYXJ5PFQ+LAogICAgICAgICAqICAgICBpdGVyYXRvcjogdHlwZXMuT2JqZWN0SXRlcmF0b3I8VCwgYm9vbGVhbj4sCiAgICAgICAgICogICAgIGNvbnRleHQ/OiBhbnkKICAgICAgICAgKiApOiBUW107CiAgICAgICAgICovCgogICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHNhZmVDYiBlYWNoIHR5cGVzIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGN0eCkgewogICAgICAgICAgICB2YXIgcmV0ID0gW107CiAgICAgICAgICAgIHByZWRpY2F0ZSA9IHNhZmVDYihwcmVkaWNhdGUsIGN0eCk7CiAgICAgICAgICAgIGVhY2gob2JqLCBmdW5jdGlvbih2YWwsIGlkeCwgbGlzdCkgewogICAgICAgICAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWwsIGlkeCwgbGlzdCkpIHJldC5wdXNoKHZhbCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjb21wYWN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5jb21wYWN0ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogUmV0dXJuIGEgY29weSBvZiB0aGUgYXJyYXkgd2l0aCBhbGwgZmFsc3kgdmFsdWVzIHJlbW92ZWQuCiAgICAgICAgICoKICAgICAgICAgKiBUaGUgdmFsdWVzIGZhbHNlLCBudWxsLCAwLCAiIiwgdW5kZWZpbmVkLCBhbmQgTmFOIGFyZSBmYWxzZXkuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxhcnIgICB8QXJyYXkgdG8gY29tcGFjdCAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufE5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXN8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb21wYWN0KFswLCAxLCBmYWxzZSwgMiwgJycsIDNdKTsgLy8gLT4gWzEsIDIsIDNdCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjb21wYWN0KGFycjogYW55W10pOiBhbnlbXTsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogZmlsdGVyIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oYXJyKSB7CiAgICAgICAgICAgIHJldHVybiBmaWx0ZXIoYXJyLCBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgICAgIHJldHVybiAhIXZhbDsKICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGRpZmZlcmVuY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGRpZmZlcmVuY2UgPSBfLmRpZmZlcmVuY2UgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDcmVhdGUgYW4gYXJyYXkgb2YgdW5pcXVlIGFycmF5IHZhbHVlcyBub3QgaW5jbHVkZWQgaW4gdGhlIG90aGVyIGdpdmVuIGFycmF5LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxhcnIgICAgfEFycmF5IHRvIGluc3BlY3QgICAgICAgICAgICB8CiAgICAgICAgICogfC4uLnJlc3R8VmFsdWVzIHRvIGV4Y2x1ZGUgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJuIHxOZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogZGlmZmVyZW5jZShbMywgMiwgMV0sIFs0LCAyXSk7IC8vIC0+IFszLCAxXQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZGlmZmVyZW5jZShhcnI6IGFueVtdLCAuLi5yZXN0OiBhbnlbXSk6IGFueVtdOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiByZXN0QXJncyBmbGF0dGVuIGZpbHRlciBjb250YWluIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gcmVzdEFyZ3MoZnVuY3Rpb24oYXJyLCByZXN0KSB7CiAgICAgICAgICAgIHJlc3QgPSBmbGF0dGVuKHJlc3QpOwogICAgICAgICAgICByZXR1cm4gZmlsdGVyKGFyciwgZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIWNvbnRhaW4ocmVzdCwgdmFsKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB1bmlxdWUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIHVuaXF1ZSA9IF8udW5pcXVlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ3JlYXRlIGR1cGxpY2F0ZS1mcmVlIHZlcnNpb24gb2YgYW4gYXJyYXkuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGFyciAgIHxBcnJheSB0byBpbnNwZWN0ICAgICAgICAgICAgIHwKICAgICAgICAgKiB8Y21wICAgfEZ1bmN0aW9uIGZvciBjb21wYXJpbmcgdmFsdWVzfAogICAgICAgICAqIHxyZXR1cm58TmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5ICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiB1bmlxdWUoWzEsIDIsIDMsIDFdKTsgLy8gLT4gWzEsIDIsIDNdCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1bmlxdWUoCiAgICAgICAgICogICAgIGFycjogYW55W10sCiAgICAgICAgICogICAgIGNtcD86IChhOiBhbnksIGI6IGFueSkgPT4gYm9vbGVhbiB8IG51bWJlcgogICAgICAgICAqICk6IGFueVtdOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBmaWx0ZXIgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihhcnIsIGNtcCkgewogICAgICAgICAgICBjbXAgPSBjbXAgfHwgaXNFcXVhbDsKICAgICAgICAgICAgcmV0dXJuIGZpbHRlcihhcnIsIGZ1bmN0aW9uKGl0ZW0sIGlkeCwgYXJyKSB7CiAgICAgICAgICAgICAgICB2YXIgbGVuID0gYXJyLmxlbmd0aDsKCiAgICAgICAgICAgICAgICB3aGlsZSAoKytpZHggPCBsZW4pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY21wKGl0ZW0sIGFycltpZHhdKSkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9KTsKICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBpc0VxdWFsKGEsIGIpIHsKICAgICAgICAgICAgcmV0dXJuIGEgPT09IGI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYWxsS2V5cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgYWxsS2V5cyA9IF8uYWxsS2V5cyA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFJldHJpZXZlIGFsbCB0aGUgbmFtZXMgb2Ygb2JqZWN0J3Mgb3duIGFuZCBpbmhlcml0ZWQgcHJvcGVydGllcy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG9iaiAgICB8T2JqZWN0IHRvIHF1ZXJ5ICAgICAgICAgICAgfAogICAgICAgICAqIHxvcHRpb25zfE9wdGlvbnMgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJuIHxBcnJheSBvZiBhbGwgcHJvcGVydHkgbmFtZXN8CiAgICAgICAgICoKICAgICAgICAgKiBBdmFpbGFibGUgb3B0aW9uczoKICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgICAgICAgICB8RGVzYyAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHByb3RvdHlwZT10cnVlICAgIHxJbmNsdWRlIHByb3RvdHlwZSBrZXlzICAgfAogICAgICAgICAqIHx1bmVudW1lcmFibGU9ZmFsc2V8SW5jbHVkZSB1bmVudW1lcmFibGUga2V5c3wKICAgICAgICAgKiB8c3ltYm9sPWZhbHNlICAgICAgfEluY2x1ZGUgc3ltYm9sIGtleXMgICAgICB8CiAgICAgICAgICoKICAgICAgICAgKiBNZW1iZXJzIG9mIE9iamVjdCdzIHByb3RvdHlwZSB3b24ndCBiZSByZXRyaWV2ZWQuCiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKHt6ZXJvOiAwfSk7CiAgICAgICAgICogb2JqLm9uZSA9IDE7CiAgICAgICAgICogYWxsS2V5cyhvYmopIC8vIC0+IFsnemVybycsICdvbmUnXQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIGFsbEtleXMgewogICAgICAgICAqICAgICBpbnRlcmZhY2UgSU9wdGlvbnMgewogICAgICAgICAqICAgICAgICAgcHJvdG90eXBlPzogYm9vbGVhbjsKICAgICAgICAgKiAgICAgICAgIHVuZW51bWVyYWJsZT86IGJvb2xlYW47CiAgICAgICAgICogICAgIH0KICAgICAgICAgKiB9CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYWxsS2V5cygKICAgICAgICAgKiAgICAgb2JqOiBhbnksCiAgICAgICAgICogICAgIG9wdGlvbnM6IHsgc3ltYm9sOiB0cnVlIH0gJiBhbGxLZXlzLklPcHRpb25zCiAgICAgICAgICogKTogQXJyYXk8c3RyaW5nIHwgU3ltYm9sPjsKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhbGxLZXlzKAogICAgICAgICAqICAgICBvYmo6IGFueSwKICAgICAgICAgKiAgICAgb3B0aW9ucz86ICh7IHN5bWJvbDogZmFsc2UgfSAmIGFsbEtleXMuSU9wdGlvbnMpIHwgYWxsS2V5cy5JT3B0aW9ucwogICAgICAgICAqICk6IHN0cmluZ1tdOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBrZXlzIGdldFByb3RvIHVuaXF1ZSAKICAgICAgICAgKi8KCiAgICAgICAgdmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lczsKICAgICAgICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sczsKCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgICAgICB2YXIgX3JlZiA9CiAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQKICAgICAgICAgICAgICAgICAgICAgICAgPyBhcmd1bWVudHNbMV0KICAgICAgICAgICAgICAgICAgICAgICAgOiB7fSwKICAgICAgICAgICAgICAgIF9yZWYkcHJvdG90eXBlID0gX3JlZi5wcm90b3R5cGUsCiAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBfcmVmJHByb3RvdHlwZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkcHJvdG90eXBlLAogICAgICAgICAgICAgICAgX3JlZiR1bmVudW1lcmFibGUgPSBfcmVmLnVuZW51bWVyYWJsZSwKICAgICAgICAgICAgICAgIHVuZW51bWVyYWJsZSA9IF9yZWYkdW5lbnVtZXJhYmxlID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkdW5lbnVtZXJhYmxlLAogICAgICAgICAgICAgICAgX3JlZiRzeW1ib2wgPSBfcmVmLnN5bWJvbCwKICAgICAgICAgICAgICAgIHN5bWJvbCA9IF9yZWYkc3ltYm9sID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkc3ltYm9sOwoKICAgICAgICAgICAgdmFyIHJldCA9IFtdOwoKICAgICAgICAgICAgaWYgKCh1bmVudW1lcmFibGUgfHwgc3ltYm9sKSAmJiBnZXRPd25Qcm9wZXJ0eU5hbWVzKSB7CiAgICAgICAgICAgICAgICB2YXIgZ2V0S2V5cyA9IGtleXM7CiAgICAgICAgICAgICAgICBpZiAodW5lbnVtZXJhYmxlICYmIGdldE93blByb3BlcnR5TmFtZXMpIGdldEtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzOwoKICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICByZXQgPSByZXQuY29uY2F0KGdldEtleXMob2JqKSk7CgogICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wgJiYgZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHJldC5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaikpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gd2hpbGUgKAogICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZSAmJgogICAgICAgICAgICAgICAgICAgIChvYmogPSBnZXRQcm90byhvYmopKSAmJgogICAgICAgICAgICAgICAgICAgIG9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZQogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICByZXQgPSB1bmlxdWUocmV0KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChwcm90b3R5cGUpIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKGtleSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXQgPSBrZXlzKG9iaik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGRlZmF1bHRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBkZWZhdWx0cyA9IF8uZGVmYXVsdHMgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBGaWxsIGluIHVuZGVmaW5lZCBwcm9wZXJ0aWVzIGluIG9iamVjdCB3aXRoIHRoZSBmaXJzdCB2YWx1ZSBwcmVzZW50IGluIHRoZSBmb2xsb3dpbmcgbGlzdCBvZiBkZWZhdWx0cyBvYmplY3RzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG9iaiAgIHxEZXN0aW5hdGlvbiBvYmplY3R8CiAgICAgICAgICogfC4uLnNyY3xTb3VyY2VzIG9iamVjdHMgICB8CiAgICAgICAgICogfHJldHVybnxEZXN0aW5hdGlvbiBvYmplY3R8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBkZWZhdWx0cyh7bmFtZTogJ1JlZEhvb2QnfSwge25hbWU6ICdVbmtub3duJywgYWdlOiAyNH0pOyAvLyAtPiB7bmFtZTogJ1JlZEhvb2QnLCBhZ2U6IDI0fQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZGVmYXVsdHMob2JqOiBhbnksIC4uLnNyYzogYW55W10pOiBhbnk7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGNyZWF0ZUFzc2lnbmVyIGFsbEtleXMgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBjcmVhdGVBc3NpZ25lcihhbGxLZXlzLCB0cnVlKTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGhpZ2hsaWdodCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uaGlnaGxpZ2h0ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogSGlnaGxpZ2h0IGNvZGUuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHN0ciAgICB8Q29kZSBzdHJpbmcgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8bGFuZz1qc3xMYW5ndWFnZSwganMsIGh0bWwgb3IgY3NzICAgfAogICAgICAgICAqIHxzdHlsZSAgfEtleXdvcmQgaGlnaGxpZ2h0IHN0eWxlICAgICB8CiAgICAgICAgICogfHJldHVybiB8SGlnaGxpZ2h0ZWQgaHRtbCBjb2RlIHN0cmluZ3wKICAgICAgICAgKgogICAgICAgICAqIEF2YWlsYWJsZSBzdHlsZXM6CiAgICAgICAgICoKICAgICAgICAgKiBjb21tZW50LCBzdHJpbmcsIG51bWJlciwga2V5d29yZCwgb3BlcmF0b3IKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGhpZ2hsaWdodCgnY29uc3QgYSA9IDU7JywgJ2pzJywgewogICAgICAgICAqICAgICBrZXl3b3JkOiAnY29sb3I6IzU2OWNkNjsnCiAgICAgICAgICogfSk7IC8vIC0+ICc8c3BhbiBzdHlsZT0iY29sb3I6IzU2OWNkNjsiPmNvbnN0PC9zcGFuPiBhIDxzcGFuIHN0eWxlPSJjb2xvcjojOTk0NTAwOyI+PTwvc3Bhbj4gPHNwYW4gc3R5bGU9ImNvbG9yOiMwMDg2YjM7Ij41PC9zcGFuPjsnCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBoaWdobGlnaHQoCiAgICAgICAgICogICAgIHN0cjogc3RyaW5nLAogICAgICAgICAqICAgICBsYW5nPzogc3RyaW5nLAogICAgICAgICAqICAgICBzdHlsZT86IHsKICAgICAgICAgKiAgICAgICAgIGNvbW1lbnQ/OiBzdHJpbmc7CiAgICAgICAgICogICAgICAgICBzdHJpbmc/OiBzdHJpbmc7CiAgICAgICAgICogICAgICAgICBudW1iZXI/OiBzdHJpbmc7CiAgICAgICAgICogICAgICAgICBrZXl3b3JkPzogc3RyaW5nOwogICAgICAgICAqICAgICAgICAgb3BlcmF0b3I/OiBzdHJpbmc7CiAgICAgICAgICogICAgIH0KICAgICAgICAgKiApOiBzdHJpbmc7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGVhY2ggZGVmYXVsdHMgCiAgICAgICAgICovIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90cmVudHJpY2hhcmRzb24valF1ZXJ5LUxpdGVsaWdodGVyCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgdmFyIGxhbmcgPQogICAgICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQKICAgICAgICAgICAgICAgICAgICA/IGFyZ3VtZW50c1sxXQogICAgICAgICAgICAgICAgICAgIDogJ2pzJzsKICAgICAgICAgICAgdmFyIHN0eWxlID0KICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307CiAgICAgICAgICAgIGRlZmF1bHRzKHN0eWxlLCBkZWZTdHlsZSk7CiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpOwogICAgICAgICAgICBsYW5nID0gbGFuZ3VhZ2VbbGFuZ107CiAgICAgICAgICAgIHZhciBzdWJMYW5nU2kgPSAwOwogICAgICAgICAgICB2YXIgc3ViTGFuZ3MgPSBbXTsKICAgICAgICAgICAgZWFjaChsYW5nLCBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgICAgIGlmICghdmFsLmxhbmd1YWdlKSByZXR1cm47CiAgICAgICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSh2YWwucmUsIGZ1bmN0aW9uKCQxLCAkMikgewogICAgICAgICAgICAgICAgICAgIHN1YkxhbmdzW3N1YkxhbmdTaSsrXSA9IGV4cG9ydHMoJDIsIHZhbC5sYW5ndWFnZSwgc3R5bGUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAkMS5yZXBsYWNlKCQyLCAnX19fc3VidG1wbCcgKyAoc3ViTGFuZ1NpIC0gMSkgKyAnX19fJyk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGVhY2gobGFuZywgZnVuY3Rpb24odmFsLCBrZXkpIHsKICAgICAgICAgICAgICAgIGlmIChsYW5ndWFnZVt2YWwubGFuZ3VhZ2VdKSByZXR1cm47CiAgICAgICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSh2YWwucmUsICdfX18nICsga2V5ICsgJ19fXyQxX19fZW5kJyArIGtleSArICdfX18nKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHZhciBsZXZlbHMgPSBbXTsKICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL19fXyg/IXN1YnRtcGwpXHcrP19fXy9nLCBmdW5jdGlvbigkMCkgewogICAgICAgICAgICAgICAgdmFyIGVuZCA9ICQwLnN1YnN0cigzLCAzKSA9PT0gJ2VuZCcsCiAgICAgICAgICAgICAgICAgICAgdGFnID0gKCFlbmQgPyAkMC5zdWJzdHIoMykgOiAkMC5zdWJzdHIoNikpLnJlcGxhY2UoL18vZywgJycpLAogICAgICAgICAgICAgICAgICAgIGxhc3RUYWcgPSBsZXZlbHMubGVuZ3RoID4gMCA/IGxldmVsc1tsZXZlbHMubGVuZ3RoIC0gMV0gOiBudWxsOwoKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAhZW5kICYmCiAgICAgICAgICAgICAgICAgICAgKGxhc3RUYWcgPT0gbnVsbCB8fAogICAgICAgICAgICAgICAgICAgICAgICB0YWcgPT0gbGFzdFRhZyB8fAogICAgICAgICAgICAgICAgICAgICAgICAobGFzdFRhZyAhPSBudWxsICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5nW2xhc3RUYWddICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5nW2xhc3RUYWddLmVtYmVkICE9IHVuZGVmaW5lZCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ1tsYXN0VGFnXS5lbWJlZC5pbmRleE9mKHRhZykgPiAtMSkpCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICBsZXZlbHMucHVzaCh0YWcpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAkMDsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5kICYmIHRhZyA9PSBsYXN0VGFnKSB7CiAgICAgICAgICAgICAgICAgICAgbGV2ZWxzLnBvcCgpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAkMDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBlYWNoKGxhbmcsIGZ1bmN0aW9uKHZhbCwga2V5KSB7CiAgICAgICAgICAgICAgICBzdHIgPSBzdHIKICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShuZXcgUmVnRXhwKCdfX19lbmQnICsga2V5ICsgJ19fXycsICdnJyksICc8L3NwYW4+JykKICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgKICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFJlZ0V4cCgnX19fJyArIGtleSArICdfX18nLCAnZycpLAogICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gc3R5bGU9IicgKyBzdHlsZVt2YWwuc3R5bGVdICsgJyI+JwogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBlYWNoKGxhbmcsIGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICAgICAgaWYgKCF2YWwubGFuZ3VhZ2UpIHJldHVybjsKICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9fX19zdWJ0bXBsXGQrX19fL2csIGZ1bmN0aW9uKCR0bXBsKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSBwYXJzZUludCgkdG1wbC5yZXBsYWNlKC9fX19zdWJ0bXBsKFxkKylfX18vLCAnJDEnKSwgMTApOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWJMYW5nc1tpXTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIHN0cjsKICAgICAgICB9OwoKICAgICAgICB2YXIgZGVmU3R5bGUgPSB7CiAgICAgICAgICAgIGNvbW1lbnQ6ICdjb2xvcjojNjNhMzVjOycsCiAgICAgICAgICAgIHN0cmluZzogJ2NvbG9yOiMxODM2OTE7JywKICAgICAgICAgICAgbnVtYmVyOiAnY29sb3I6IzAwODZiMzsnLAogICAgICAgICAgICBrZXl3b3JkOiAnY29sb3I6I2E3MWQ1ZDsnLAogICAgICAgICAgICBvcGVyYXRvcjogJ2NvbG9yOiM5OTQ1MDA7JwogICAgICAgIH07CiAgICAgICAgdmFyIGxhbmd1YWdlID0ge307CiAgICAgICAgbGFuZ3VhZ2UuanMgPSB7CiAgICAgICAgICAgIGNvbW1lbnQ6IHsKICAgICAgICAgICAgICAgIHJlOiAvKFwvXC8uKnxcL1wqKFtcc1xTXSo/KVwqXC8pL2csCiAgICAgICAgICAgICAgICBzdHlsZTogJ2NvbW1lbnQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHN0cmluZzogewogICAgICAgICAgICAgICAgcmU6IC8oKCcuKj8nKXwoIi4qPyIpKS9nLAogICAgICAgICAgICAgICAgc3R5bGU6ICdzdHJpbmcnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG51bWJlcnM6IHsKICAgICAgICAgICAgICAgIHJlOiAvKC0/KFxkK3xcZCtcLlxkK3xcLlxkKykpL2csCiAgICAgICAgICAgICAgICBzdHlsZTogJ251bWJlcicKICAgICAgICAgICAgfSwKICAgICAgICAgICAga2V5d29yZHM6IHsKICAgICAgICAgICAgICAgIHJlOiAvKD86XGIpKGZ1bmN0aW9ufGZvcnxmb3JlYWNofHdoaWxlfGlmfGVsc2V8ZWxzZWlmfHN3aXRjaHxicmVha3xhc3xyZXR1cm58dGhpc3xjbGFzc3xzZWxmfGRlZmF1bHR8dmFyfGNvbnN0fGxldHxmYWxzZXx0cnVlfG51bGx8dW5kZWZpbmVkKSg/OlxiKS9naSwKICAgICAgICAgICAgICAgIHN0eWxlOiAna2V5d29yZCcKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb3BlcmF0b3I6IHsKICAgICAgICAgICAgICAgIHJlOiAvKFwrfC18XC98XCp8JXw9fCZsdDt8Jmd0O3xcfHxcP3xcLikvZywKICAgICAgICAgICAgICAgIHN0eWxlOiAnb3BlcmF0b3InCiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGxhbmd1YWdlLmh0bWwgPSB7CiAgICAgICAgICAgIGNvbW1lbnQ6IHsKICAgICAgICAgICAgICAgIHJlOiAvKCZsdDshLS0oW1xzXFNdKj8pLS0mZ3Q7KS9nLAogICAgICAgICAgICAgICAgc3R5bGU6ICdjb21tZW50JwogICAgICAgICAgICB9LAogICAgICAgICAgICB0YWc6IHsKICAgICAgICAgICAgICAgIHJlOiAvKCZsdDtcLz9cdygufFxuKSo/XC8/Jmd0OykvZywKICAgICAgICAgICAgICAgIHN0eWxlOiAna2V5d29yZCcsCiAgICAgICAgICAgICAgICBlbWJlZDogWydzdHJpbmcnXQogICAgICAgICAgICB9LAogICAgICAgICAgICBzdHJpbmc6IGxhbmd1YWdlLmpzLnN0cmluZywKICAgICAgICAgICAgY3NzOiB7CiAgICAgICAgICAgICAgICByZTogLyg/OiZsdDtzdHlsZS4qPyZndDspKFtcc1xTXSopPyg/OiZsdDtcL3N0eWxlJmd0OykvZ2ksCiAgICAgICAgICAgICAgICBsYW5ndWFnZTogJ2NzcycKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc2NyaXB0OiB7CiAgICAgICAgICAgICAgICByZTogLyg/OiZsdDtzY3JpcHQuKj8mZ3Q7KShbXHNcU10qPykoPzombHQ7XC9zY3JpcHQmZ3Q7KS9naSwKICAgICAgICAgICAgICAgIGxhbmd1YWdlOiAnanMnCiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGxhbmd1YWdlLmNzcyA9IHsKICAgICAgICAgICAgY29tbWVudDogbGFuZ3VhZ2UuanMuY29tbWVudCwKICAgICAgICAgICAgc3RyaW5nOiBsYW5ndWFnZS5qcy5zdHJpbmcsCiAgICAgICAgICAgIG51bWJlcnM6IHsKICAgICAgICAgICAgICAgIHJlOiAvKCgtPyhcZCt8XGQrXC5cZCt8XC5cZCspKCV8cHh8ZW18cHR8aW4pPyl8I1swLTlhLWZBLUZdezN9WzAtOWEtZkEtRl17M30pL2csCiAgICAgICAgICAgICAgICBzdHlsZTogJ251bWJlcicKICAgICAgICAgICAgfSwKICAgICAgICAgICAga2V5d29yZHM6IHsKICAgICAgICAgICAgICAgIHJlOiAvKEBcdyt8Oj86XHcrfFthLXotXSs6KS9nLAogICAgICAgICAgICAgICAgc3R5bGU6ICdrZXl3b3JkJwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGV4dGVuZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgZXh0ZW5kID0gXy5leHRlbmQgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDb3B5IGFsbCBvZiB0aGUgcHJvcGVydGllcyBpbiB0aGUgc291cmNlIG9iamVjdHMgb3ZlciB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgICAgfERlc2MgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxkZXN0aW5hdGlvbnxEZXN0aW5hdGlvbiBvYmplY3R8CiAgICAgICAgICogfC4uLnNvdXJjZXMgfFNvdXJjZXMgb2JqZWN0cyAgIHwKICAgICAgICAgKiB8cmV0dXJuICAgICB8RGVzdGluYXRpb24gb2JqZWN0fAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogZXh0ZW5kKHtuYW1lOiAnUmVkSG9vZCd9LCB7YWdlOiAyNH0pOyAvLyAtPiB7bmFtZTogJ1JlZEhvb2QnLCBhZ2U6IDI0fQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZXh0ZW5kKGRlc3RpbmF0aW9uOiBhbnksIC4uLnNvdXJjZXM6IGFueVtdKTogYW55OwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBjcmVhdGVBc3NpZ25lciBhbGxLZXlzIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gY3JlYXRlQXNzaWduZXIoYWxsS2V5cyk7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjbG9uZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgY2xvbmUgPSBfLmNsb25lID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ3JlYXRlIGEgc2hhbGxvdy1jb3BpZWQgY2xvbmUgb2YgdGhlIHByb3ZpZGVkIHBsYWluIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIEFueSBuZXN0ZWQgb2JqZWN0cyBvciBhcnJheXMgd2lsbCBiZSBjb3BpZWQgYnkgcmVmZXJlbmNlLCBub3QgZHVwbGljYXRlZC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8dmFsICAgfFZhbHVlIHRvIGNsb25lfAogICAgICAgICAqIHxyZXR1cm58Q2xvbmVkIHZhbHVlICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjbG9uZSh7bmFtZTogJ2V1c3RpYSd9KTsgLy8gLT4ge25hbWU6ICdldXN0aWEnfQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY2xvbmU8VD4odmFsOiBUKTogVDsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNPYmogaXNBcnIgZXh0ZW5kIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICAgIGlmICghaXNPYmoob2JqKSkgcmV0dXJuIG9iajsKICAgICAgICAgICAgcmV0dXJuIGlzQXJyKG9iaikgPyBvYmouc2xpY2UoKSA6IGV4dGVuZCh7fSwgb2JqKTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZmluZElkeCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgZmluZElkeCA9IF8uZmluZElkeCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFJldHVybiB0aGUgZmlyc3QgaW5kZXggd2hlcmUgdGhlIHByZWRpY2F0ZSB0cnV0aCB0ZXN0IHBhc3Nlcy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxhcnIgICAgICB8QXJyYXkgdG8gc2VhcmNoICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxwcmVkaWNhdGV8RnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9ufAogICAgICAgICAqIHxyZXR1cm4gICB8SW5kZXggb2YgbWF0Y2hlZCBlbGVtZW50ICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogZmluZElkeChbewogICAgICAgICAqICAgICBuYW1lOiAnam9obicsCiAgICAgICAgICogICAgIGFnZTogMjQKICAgICAgICAgKiB9LCB7CiAgICAgICAgICogICAgIG5hbWU6ICdqYW5lJywKICAgICAgICAgKiAgICAgYWdlOiAyMwogICAgICAgICAqIH1dLCBmdW5jdGlvbiAodmFsKSB7CiAgICAgICAgICogICAgIHJldHVybiB2YWwuYWdlID09PSAyMzsKICAgICAgICAgKiB9KTsgLy8gLT4gMQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZmluZElkeChhcnI6IGFueVtdLCBwcmVkaWNhdGU6IEZ1bmN0aW9uKTogbnVtYmVyOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBzYWZlQ2IgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihhcnIsIHByZWRpY2F0ZSwgY3R4LCBkaXIpIHsKICAgICAgICAgICAgZGlyID0gZGlyIHx8IDE7CiAgICAgICAgICAgIHByZWRpY2F0ZSA9IHNhZmVDYihwcmVkaWNhdGUsIGN0eCk7CiAgICAgICAgICAgIHZhciBsZW4gPSBhcnIubGVuZ3RoOwogICAgICAgICAgICB2YXIgaSA9IGRpciA+IDAgPyAwIDogbGVuIC0gMTsKCiAgICAgICAgICAgIHdoaWxlIChpID49IDAgJiYgaSA8IGxlbikgewogICAgICAgICAgICAgICAgaWYgKHByZWRpY2F0ZShhcnJbaV0sIGksIGFycikpIHJldHVybiBpOwogICAgICAgICAgICAgICAgaSArPSBkaXI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZmluZExhc3RJZHggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmZpbmRMYXN0SWR4ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogUmV0dXJuIHRoZSBsYXN0IGluZGV4IHdoZXJlIHRoZSBwcmVkaWNhdGUgdHJ1dGggdGVzdCBwYXNzZXMuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8YXJyICAgICAgfEFycmF5IHRvIHNlYXJjaCAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cHJlZGljYXRlfEZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbnwKICAgICAgICAgKiB8cmV0dXJuICAgfExhc3QgaW5kZXggb2YgbWF0Y2hlZCBlbGVtZW50IHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGZpbmRMYXN0SWR4KFt7CiAgICAgICAgICogICAgIG5hbWU6ICdqb2huJywKICAgICAgICAgKiAgICAgYWdlOiAyNAogICAgICAgICAqIH0sIHsKICAgICAgICAgKiAgICAgbmFtZTogJ2phbmUnLAogICAgICAgICAqICAgICBhZ2U6IDIzCiAgICAgICAgICogfSwgewogICAgICAgICAqICAgICBuYW1lOiAna2l0dHknLAogICAgICAgICAqICAgICBhZ2U6IDI0CiAgICAgICAgICogfV0sIGZ1bmN0aW9uICh2YWwpIHsKICAgICAgICAgKiAgICAgcmV0dXJuIHZhbC5hZ2UgPT09IDI0OwogICAgICAgICAqIH0pOyAvLyAtPiAyCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBmaW5kTGFzdElkeChhcnI6IGFueVtdLCBwcmVkaWNhdGU6IEZ1bmN0aW9uKTogbnVtYmVyOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBmaW5kSWR4IAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oYXJyLCBwcmVkaWNhdGUsIGN0eCkgewogICAgICAgICAgICByZXR1cm4gZmluZElkeChhcnIsIHByZWRpY2F0ZSwgY3R4LCAtMSk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGZpbmRLZXkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGZpbmRLZXkgPSBfLmZpbmRLZXkgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBSZXR1cm4gdGhlIGZpcnN0IGtleSB3aGVyZSB0aGUgcHJlZGljYXRlIHRydXRoIHRlc3QgcGFzc2VzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG9iaiAgICAgIHxPYmplY3QgdG8gc2VhcmNoICAgICAgICAgICAgICB8CiAgICAgICAgICogfHByZWRpY2F0ZXxGdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb258CiAgICAgICAgICogfGN0eCAgICAgIHxQcmVkaWNhdGUgY29udGV4dCAgICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybiAgIHxLZXkgb2YgbWF0Y2hlZCBlbGVtZW50ICAgICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBmaW5kS2V5KHthOiAxLCBiOiAyfSwgZnVuY3Rpb24gKHZhbCkgewogICAgICAgICAqICAgICByZXR1cm4gdmFsID09PSAxOwogICAgICAgICAqIH0pOyAvLyAtPiBhCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBmaW5kS2V5KAogICAgICAgICAqICAgICBvYmo6IGFueSwKICAgICAgICAgKiAgICAgcHJlZGljYXRlOiBGdW5jdGlvbiwKICAgICAgICAgKiAgICAgY3R4PzogYW55CiAgICAgICAgICogKTogc3RyaW5nIHwgdm9pZDsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogc2FmZUNiIGtleXMgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY3R4KSB7CiAgICAgICAgICAgIHByZWRpY2F0ZSA9IHNhZmVDYihwcmVkaWNhdGUsIGN0eCk7CgogICAgICAgICAgICB2YXIgX2tleXMgPSBrZXlzKG9iaik7CgogICAgICAgICAgICB2YXIga2V5OwoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IF9rZXlzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICBrZXkgPSBfa2V5c1tpXTsKICAgICAgICAgICAgICAgIGlmIChwcmVkaWNhdGUob2JqW2tleV0sIGtleSwgb2JqKSkgcmV0dXJuIGtleTsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBmaW5kIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5maW5kID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogRmluZCB0aGUgZmlyc3QgdmFsdWUgdGhhdCBwYXNzZXMgYSB0cnV0aCB0ZXN0IGluIGEgY29sbGVjdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8b2JqZWN0ICB8Q29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIgICAgICAgfAogICAgICAgICAqIHxpdGVyYXRvcnxGdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24gICB8CiAgICAgICAgICogfGNvbnRleHQgfFByZWRpY2F0ZSBjb250ZXh0ICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJuICB8Rmlyc3QgdmFsdWUgdGhhdCBwYXNzZXMgcHJlZGljYXRlfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogZmluZChbewogICAgICAgICAqICAgICBuYW1lOiAnam9obicsCiAgICAgICAgICogICAgIGFnZTogMjQKICAgICAgICAgKiB9LCB7CiAgICAgICAgICogICAgIG5hbWU6ICdqYW5lJywKICAgICAgICAgKiAgICAgYWdlOiAyMwogICAgICAgICAqIH1dLCBmdW5jdGlvbiAodmFsKSB7CiAgICAgICAgICogICAgIHJldHVybiB2YWwuYWdlID09PSAyMzsKICAgICAgICAgKiB9KTsgLy8gLT4ge25hbWU6ICdqYW5lJywgYWdlOiAyM30KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGZpbmQ8VD4oCiAgICAgICAgICogICAgIG9iamVjdDogdHlwZXMuTGlzdDxUPiwKICAgICAgICAgKiAgICAgaXRlcmF0b3I6IHR5cGVzLkxpc3RJdGVyYXRvcjxULCBib29sZWFuPiwKICAgICAgICAgKiAgICAgY29udGV4dD86IGFueQogICAgICAgICAqICk6IFQgfCB1bmRlZmluZWQ7CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZmluZDxUPigKICAgICAgICAgKiAgICAgb2JqZWN0OiB0eXBlcy5EaWN0aW9uYXJ5PFQ+LAogICAgICAgICAqICAgICBpdGVyYXRvcjogdHlwZXMuT2JqZWN0SXRlcmF0b3I8VCwgYm9vbGVhbj4sCiAgICAgICAgICogICAgIGNvbnRleHQ/OiBhbnkKICAgICAgICAgKiApOiBUIHwgdW5kZWZpbmVkOwogICAgICAgICAqLwoKICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBmaW5kS2V5IGZpbmRJZHggaXNBcnJMaWtlIGlzVW5kZWYgdHlwZXMgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihvYmosIHByZWRpY2F0ZSwgY3R4KSB7CiAgICAgICAgICAgIHZhciBrZXlGaW5kZXIgPSBpc0Fyckxpa2Uob2JqKSA/IGZpbmRJZHggOiBmaW5kS2V5OwogICAgICAgICAgICB2YXIga2V5ID0ga2V5RmluZGVyKG9iaiwgcHJlZGljYXRlLCBjdHgpOwogICAgICAgICAgICBpZiAoIWlzVW5kZWYoa2V5KSAmJiBrZXkgIT09IC0xKSByZXR1cm4gb2JqW2tleV07CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgbWFwID0gXy5tYXAgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDcmVhdGUgYW4gYXJyYXkgb2YgdmFsdWVzIGJ5IHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGNvbGxlY3Rpb24gdGhyb3VnaCBpdGVyYXRlZS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8b2JqZWN0ICB8Q29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIgICAgfAogICAgICAgICAqIHxpdGVyYXRvcnxGdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb258CiAgICAgICAgICogfGNvbnRleHQgfEZ1bmN0aW9uIGNvbnRleHQgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJuICB8TmV3IG1hcHBlZCBhcnJheSAgICAgICAgICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogbWFwKFs0LCA4XSwgZnVuY3Rpb24gKG4pIHsgcmV0dXJuIG4gKiBuOyB9KTsgLy8gLT4gWzE2LCA2NF0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG1hcDxULCBUUmVzdWx0PigKICAgICAgICAgKiAgICAgbGlzdDogdHlwZXMuTGlzdDxUPiwKICAgICAgICAgKiAgICAgaXRlcmF0b3I6IHR5cGVzLkxpc3RJdGVyYXRvcjxULCBUUmVzdWx0PiwKICAgICAgICAgKiAgICAgY29udGV4dD86IGFueQogICAgICAgICAqICk6IFRSZXN1bHRbXTsKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBtYXA8VCwgVFJlc3VsdD4oCiAgICAgICAgICogICAgIG9iamVjdDogdHlwZXMuRGljdGlvbmFyeTxUPiwKICAgICAgICAgKiAgICAgaXRlcmF0b3I6IHR5cGVzLk9iamVjdEl0ZXJhdG9yPFQsIFRSZXN1bHQ+LAogICAgICAgICAqICAgICBjb250ZXh0PzogYW55CiAgICAgICAgICogKTogVFJlc3VsdFtdOwogICAgICAgICAqLwoKICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBzYWZlQ2Iga2V5cyBpc0Fyckxpa2UgdHlwZXMgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihvYmosIGl0ZXJhdG9yLCBjdHgpIHsKICAgICAgICAgICAgaXRlcmF0b3IgPSBzYWZlQ2IoaXRlcmF0b3IsIGN0eCk7CgogICAgICAgICAgICB2YXIgX2tleXMgPSAhaXNBcnJMaWtlKG9iaikgJiYga2V5cyhvYmopOwoKICAgICAgICAgICAgdmFyIGxlbiA9IChfa2V5cyB8fCBvYmopLmxlbmd0aDsKICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBBcnJheShsZW4pOwoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgdmFyIGN1cktleSA9IF9rZXlzID8gX2tleXNbaV0gOiBpOwogICAgICAgICAgICAgICAgcmVzdWx0c1tpXSA9IGl0ZXJhdG9yKG9ialtjdXJLZXldLCBjdXJLZXksIG9iaik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBhdG9iIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5hdG9iID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogVXNlIEJ1ZmZlciB0byBlbXVsYXRlIGF0b2Igd2hlbiBydW5uaW5nIGluIG5vZGUuCiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBhdG9iKCdTR1ZzYkc4Z1YyOXliR1E9Jyk7IC8vIC0+ICdIZWxsbyBXb3JsZCcKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGF0b2Ioc3RyOiBzdHJpbmcpOiBzdHJpbmc7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHJvb3QgaXNOb2RlIGJhc2U2NCBtYXAgZGV0ZWN0TW9jaGEgCiAgICAgICAgICovCgogICAgICAgIGlmIChpc05vZGUpIHsKICAgICAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCdWZmZXIoc3RyLCAnYmFzZTY0JykudG9TdHJpbmcoJ2JpbmFyeScpOwogICAgICAgICAgICB9OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChyb290LmF0b2IgJiYgIWRldGVjdE1vY2hhKCkpIHsKICAgICAgICAgICAgICAgIGV4cG9ydHMgPSByb290LmF0b2I7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcChiYXNlNjQuZGVjb2RlKHN0ciksIGZ1bmN0aW9uKGMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7CiAgICAgICAgICAgICAgICAgICAgfSkuam9pbignJyk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYnRvYSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uYnRvYSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFVzZSBCdWZmZXIgdG8gZW11bGF0ZSBidG9hIHdoZW4gcnVubmluZyBpbiBub2RlLgogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogYnRvYSgnSGVsbG8gV29ybGQnKTsgLy8gLT4gJ1NHVnNiRzhnVjI5eWJHUT0nCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBidG9hKHN0cjogc3RyaW5nKTogc3RyaW5nOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiByb290IGlzTm9kZSBiYXNlNjQgbWFwIGRldGVjdE1vY2hhIAogICAgICAgICAqLwoKICAgICAgICBpZiAoaXNOb2RlKSB7CiAgICAgICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnVmZmVyKHN0ciwgJ2JpbmFyeScpLnRvU3RyaW5nKCdiYXNlNjQnKTsKICAgICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAocm9vdC5idG9hICYmICFkZXRlY3RNb2NoYSgpKSB7CiAgICAgICAgICAgICAgICBleHBvcnRzID0gcm9vdC5idG9hOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlNjQuZW5jb2RlKAogICAgICAgICAgICAgICAgICAgICAgICBtYXAoc3RyLCBmdW5jdGlvbihjKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy5jaGFyQ29kZUF0KDApOwogICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY2VudGVyQWxpZ24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmNlbnRlckFsaWduID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ2VudGVyIGFsaWduIHRleHQgaW4gYSBzdHJpbmcuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8c3RyICAgfFN0cmluZyB0byBhbGlnbiAgICAgICAgIHwKICAgICAgICAgKiB8d2lkdGggfFRvdGFsIHdpZHRoIG9mIGVhY2ggbGluZXwKICAgICAgICAgKiB8cmV0dXJufENlbnRlciBhbGlnbmVkIHN0cmluZyAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNlbnRlckFsaWduKCd0ZXN0JywgOCk7IC8vIC0+ICcgIHRlc3QnCiAgICAgICAgICogY2VudGVyQWxpZ24oJ3Rlc3RcbmxpbmVzJywgOCk7IC8vIC0+ICcgIHRlc3RcbiBsaW5lcycKICAgICAgICAgKiBjZW50ZXJBbGlnbihbJ3Rlc3QnLCAnbGluZXMnXSwgOCk7IC8vIC0+ICcgIHRlc3RcbiBsaW5lcycKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNlbnRlckFsaWduKHN0cjogc3RyaW5nIHwgc3RyaW5nW10sIHdpZHRoPzogbnVtYmVyKTogc3RyaW5nOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBsb25nZXN0IGlzQXJyIGlzVW5kZWYgbWFwIGxwYWQgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdHIsIHdpZHRoKSB7CiAgICAgICAgICAgIHZhciByZXQgPSBzdHI7CgogICAgICAgICAgICBpZiAoIWlzQXJyKHJldCkpIHsKICAgICAgICAgICAgICAgIHJldCA9IHJldC5zcGxpdChyZWdMaW5lQnJlYWspOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaXNVbmRlZih3aWR0aCkpIHdpZHRoID0gbG9uZ2VzdChzdHIpOwogICAgICAgICAgICByZXQgPSBtYXAocmV0LCBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgICAgIHZhciBsZW4gPSBzdHIubGVuZ3RoOwogICAgICAgICAgICAgICAgcmV0dXJuIGxwYWQoc3RyLCBmbG9vcigod2lkdGggLSBsZW4pIC8gMikgKyBsZW4pOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIHJldC5qb2luKCdcbicpOwogICAgICAgIH07CgogICAgICAgIHZhciByZWdMaW5lQnJlYWsgPSAvXG4vZzsKICAgICAgICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZGVjb2RlVXJpQ29tcG9uZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5kZWNvZGVVcmlDb21wb25lbnQgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBCZXR0ZXIgZGVjb2RlVVJJQ29tcG9uZW50IHRoYXQgZG9lcyBub3QgdGhyb3cgaWYgaW5wdXQgaXMgaW52YWxpZC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHN0ciAgIHxTdHJpbmcgdG8gZGVjb2RlfAogICAgICAgICAqIHxyZXR1cm58RGVjb2RlZCBzdHJpbmcgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGRlY29kZVVyaUNvbXBvbmVudCgnJSUyNSUnKTsgLy8gLT4gJyUlJScKICAgICAgICAgKiBkZWNvZGVVcmlDb21wb25lbnQoJyVFMCVBNCVBJyk7IC8vIC0+ICdceEUwXHhBNCVBJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZGVjb2RlVXJpQ29tcG9uZW50KHN0cjogc3RyaW5nKTogc3RyaW5nOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBlYWNoIHVjczIgbWFwIHV0ZjggCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoc3RyKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBzdHIubWF0Y2gocmVnTWF0Y2hlcik7CgogICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBlYWNoKG1hdGNoZXMsIGZ1bmN0aW9uKG1hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UobWF0Y2gsIGRlY29kZShtYXRjaCkpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RyOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgZnVuY3Rpb24gZGVjb2RlKHN0cikgewogICAgICAgICAgICBzdHIgPSBzdHIuc3BsaXQoJyUnKS5zbGljZSgxKTsKICAgICAgICAgICAgdmFyIGJ5dGVzID0gbWFwKHN0ciwgaGV4VG9JbnQpOwogICAgICAgICAgICBzdHIgPSB1Y3MyLmVuY29kZShieXRlcyk7CiAgICAgICAgICAgIHN0ciA9IHV0ZjguZGVjb2RlKHN0ciwgdHJ1ZSk7CiAgICAgICAgICAgIHJldHVybiBzdHI7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBoZXhUb0ludChudW1TdHIpIHsKICAgICAgICAgICAgcmV0dXJuICsoJzB4JyArIG51bVN0cik7CiAgICAgICAgfQoKICAgICAgICB2YXIgcmVnTWF0Y2hlciA9IC8oJVthLWYwLTldezJ9KSsvZ2k7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB0b0FyciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgdG9BcnIgPSBfLnRvQXJyID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ29udmVydCB2YWx1ZSB0byBhbiBhcnJheS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbCAgIHxWYWx1ZSB0byBjb252ZXJ0fAogICAgICAgICAqIHxyZXR1cm58Q29udmVydGVkIGFycmF5IHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHRvQXJyKHthOiAxLCBiOiAyfSk7IC8vIC0+IFt7YTogMSwgYjogMn1dCiAgICAgICAgICogdG9BcnIoJ2FiYycpOyAvLyAtPiBbJ2FiYyddCiAgICAgICAgICogdG9BcnIoMSk7IC8vIC0+IFsxXQogICAgICAgICAqIHRvQXJyKG51bGwpOyAvLyAtPiBbXQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdG9BcnIodmFsOiBhbnkpOiBhbnlbXTsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNBcnJMaWtlIG1hcCBpc0FyciBpc1N0ciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICBpZiAoIXZhbCkgcmV0dXJuIFtdOwogICAgICAgICAgICBpZiAoaXNBcnIodmFsKSkgcmV0dXJuIHZhbDsKICAgICAgICAgICAgaWYgKGlzQXJyTGlrZSh2YWwpICYmICFpc1N0cih2YWwpKSByZXR1cm4gbWFwKHZhbCk7CiAgICAgICAgICAgIHJldHVybiBbdmFsXTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2xhc3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIENsYXNzID0gXy5DbGFzcyA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENyZWF0ZSBKYXZhU2NyaXB0IGNsYXNzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8bWV0aG9kc3xQdWJsaWMgbWV0aG9kcyAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogW3N0YXRpY3N8U3RhdGljIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm4gfEZ1bmN0aW9uIHVzZWQgdG8gY3JlYXRlIGluc3RhbmNlc3wKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnN0IFBlb3BsZSA9IENsYXNzKHsKICAgICAgICAgKiAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gUGVvcGxlKG5hbWUsIGFnZSkgewogICAgICAgICAqICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAgKiAgICAgICAgIHRoaXMuYWdlID0gYWdlOwogICAgICAgICAqICAgICB9LAogICAgICAgICAqICAgICBpbnRyb2R1Y2U6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgKiAgICAgICAgIHJldHVybiAnSSBhbSAnICsgdGhpcy5uYW1lICsgJywgJyArIHRoaXMuYWdlICsgJyB5ZWFycyBvbGQuJzsKICAgICAgICAgKiAgICAgfQogICAgICAgICAqIH0pOwogICAgICAgICAqCiAgICAgICAgICogY29uc3QgU3R1ZGVudCA9IFBlb3BsZS5leHRlbmQoewogICAgICAgICAqICAgICBpbml0aWFsaXplOiBmdW5jdGlvbiBTdHVkZW50KG5hbWUsIGFnZSwgc2Nob29sKSB7CiAgICAgICAgICogICAgICAgICB0aGlzLmNhbGxTdXBlcihQZW9wbGUsICdpbml0aWFsaXplJywgYXJndW1lbnRzKTsKICAgICAgICAgKgogICAgICAgICAqICAgICAgICAgdGhpcy5zY2hvb2wgPSBzY2hvb2w7CiAgICAgICAgICogICAgIH0sCiAgICAgICAgICogICAgIGludHJvZHVjZTogZnVuY3Rpb24gKCkgewogICAgICAgICAqICAgICAgICAgcmV0dXJuIHRoaXMuY2FsbFN1cGVyKFBlb3BsZSwgJ2ludHJvZHVjZScpICsgJ1xuIEkgc3R1ZHkgYXQgJyArIHRoaXMuc2Nob29sICsgJy4nOwogICAgICAgICAqICAgICB9CiAgICAgICAgICogfSwgewogICAgICAgICAqICAgICBpczogZnVuY3Rpb24gKG9iaikgewogICAgICAgICAqICAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIFN0dWRlbnQ7CiAgICAgICAgICogICAgIH0KICAgICAgICAgKiB9KTsKICAgICAgICAgKgogICAgICAgICAqIGNvbnN0IGEgPSBuZXcgU3R1ZGVudCgnYWxsZW4nLCAxNywgJ0hvZ3dhcnRzJyk7CiAgICAgICAgICogYS5pbnRyb2R1Y2UoKTsgLy8gLT4gJ0kgYW0gYWxsZW4sIDE3IHllYXJzIG9sZC4gXG4gSSBzdHVkeSBhdCBIb2d3YXJ0cy4nCiAgICAgICAgICogU3R1ZGVudC5pcyhhKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIENsYXNzIHsKICAgICAgICAgKiAgICAgY2xhc3MgQmFzZSB7CiAgICAgICAgICogICAgICAgICB0b1N0cmluZygpOiBzdHJpbmc7CiAgICAgICAgICogICAgIH0KICAgICAgICAgKiAgICAgY2xhc3MgSUNvbnN0cnVjdG9yIGV4dGVuZHMgQmFzZSB7CiAgICAgICAgICogICAgICAgICBjb25zdHJ1Y3RvciguLi5hcmdzOiBhbnlbXSk7CiAgICAgICAgICogICAgICAgICBzdGF0aWMgZXh0ZW5kKG1ldGhvZHM6IGFueSwgc3RhdGljczogYW55KTogSUNvbnN0cnVjdG9yOwogICAgICAgICAqICAgICAgICAgc3RhdGljIGluaGVyaXRzKENsYXNzOiBGdW5jdGlvbik6IHZvaWQ7CiAgICAgICAgICogICAgICAgICBzdGF0aWMgbWV0aG9kcyhtZXRob2RzOiBhbnkpOiBJQ29uc3RydWN0b3I7CiAgICAgICAgICogICAgICAgICBzdGF0aWMgc3RhdGljcyhzdGF0aWNzOiBhbnkpOiBJQ29uc3RydWN0b3I7CiAgICAgICAgICogICAgICAgICBbbWV0aG9kOiBzdHJpbmddOiBhbnk7CiAgICAgICAgICogICAgIH0KICAgICAgICAgKiB9CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gQ2xhc3MobWV0aG9kczogYW55LCBzdGF0aWNzPzogYW55KTogQ2xhc3MuSUNvbnN0cnVjdG9yOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBleHRlbmQgdG9BcnIgaW5oZXJpdHMgc2FmZUdldCBpc01pbmlQcm9ncmFtIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24obWV0aG9kcywgc3RhdGljcykgewogICAgICAgICAgICByZXR1cm4gQmFzZS5leHRlbmQobWV0aG9kcywgc3RhdGljcyk7CiAgICAgICAgfTsKCiAgICAgICAgZnVuY3Rpb24gbWFrZUNsYXNzKHBhcmVudCwgbWV0aG9kcywgc3RhdGljcykgewogICAgICAgICAgICBzdGF0aWNzID0gc3RhdGljcyB8fCB7fTsKICAgICAgICAgICAgdmFyIGNsYXNzTmFtZSA9CiAgICAgICAgICAgICAgICBtZXRob2RzLmNsYXNzTmFtZSB8fCBzYWZlR2V0KG1ldGhvZHMsICdpbml0aWFsaXplLm5hbWUnKSB8fCAnJzsKICAgICAgICAgICAgZGVsZXRlIG1ldGhvZHMuY2xhc3NOYW1lOwogICAgICAgICAgICB2YXIgY3RvcjsKCiAgICAgICAgICAgIGlmIChpc01pbmlQcm9ncmFtKSB7CiAgICAgICAgICAgICAgICBjdG9yID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSB0b0Fycihhcmd1bWVudHMpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxpemUKICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJncykgfHwgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXM7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY3RvciA9IG5ldyBGdW5jdGlvbigKICAgICAgICAgICAgICAgICAgICAndG9BcnInLAogICAgICAgICAgICAgICAgICAgICdyZXR1cm4gZnVuY3Rpb24gJyArCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSArCiAgICAgICAgICAgICAgICAgICAgICAgICcoKScgKwogICAgICAgICAgICAgICAgICAgICAgICAneycgKwogICAgICAgICAgICAgICAgICAgICAgICAndmFyIGFyZ3MgPSB0b0Fycihhcmd1bWVudHMpOycgKwogICAgICAgICAgICAgICAgICAgICAgICAncmV0dXJuIHRoaXMuaW5pdGlhbGl6ZSA/IHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmdzKSB8fCB0aGlzIDogdGhpczsnICsKICAgICAgICAgICAgICAgICAgICAgICAgJ307JwogICAgICAgICAgICAgICAgKSh0b0Fycik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGluaGVyaXRzKGN0b3IsIHBhcmVudCk7CiAgICAgICAgICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvcjsKCiAgICAgICAgICAgIGN0b3IuZXh0ZW5kID0gZnVuY3Rpb24obWV0aG9kcywgc3RhdGljcykgewogICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VDbGFzcyhjdG9yLCBtZXRob2RzLCBzdGF0aWNzKTsKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGN0b3IuaW5oZXJpdHMgPSBmdW5jdGlvbihDbGFzcykgewogICAgICAgICAgICAgICAgaW5oZXJpdHMoY3RvciwgQ2xhc3MpOwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgY3Rvci5tZXRob2RzID0gZnVuY3Rpb24obWV0aG9kcykgewogICAgICAgICAgICAgICAgZXh0ZW5kKGN0b3IucHJvdG90eXBlLCBtZXRob2RzKTsKICAgICAgICAgICAgICAgIHJldHVybiBjdG9yOwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgY3Rvci5zdGF0aWNzID0gZnVuY3Rpb24oc3RhdGljcykgewogICAgICAgICAgICAgICAgZXh0ZW5kKGN0b3IsIHN0YXRpY3MpOwogICAgICAgICAgICAgICAgcmV0dXJuIGN0b3I7CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBjdG9yLm1ldGhvZHMobWV0aG9kcykuc3RhdGljcyhzdGF0aWNzKTsKICAgICAgICAgICAgcmV0dXJuIGN0b3I7CiAgICAgICAgfQoKICAgICAgICB2YXIgQmFzZSA9IChleHBvcnRzLkJhc2UgPSBtYWtlQ2xhc3MoT2JqZWN0LCB7CiAgICAgICAgICAgIGNsYXNzTmFtZTogJ0Jhc2UnLAogICAgICAgICAgICBjYWxsU3VwZXI6IGZ1bmN0aW9uKHBhcmVudCwgbmFtZSwgYXJncykgewogICAgICAgICAgICAgICAgdmFyIHN1cGVyTWV0aG9kID0gcGFyZW50LnByb3RvdHlwZVtuYW1lXTsKICAgICAgICAgICAgICAgIHJldHVybiBzdXBlck1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZTsKICAgICAgICAgICAgfQogICAgICAgIH0pKTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENhc2VsZXNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5DYXNlbGVzcyA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIE1vZGlmeSBvYmplY3QgcHJvcHMgd2l0aG91dCBjYXJpbmcgYWJvdXQgbGV0dGVyIGNhc2UuCiAgICAgICAgICoKICAgICAgICAgKiAjIyMgY29uc3RydWN0b3IKICAgICAgICAgKgogICAgICAgICAqIHxOYW1lfERlc2MgICAgICAgICB8CiAgICAgICAgICogfC0tLS18LS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8b2JqIHxUYXJnZXQgb2JqZWN0fAogICAgICAgICAqCiAgICAgICAgICogIyMjIGdldEtleQogICAgICAgICAqCiAgICAgICAgICogR2V0IGtleSB3aXRoIHByZXNlcnZlZCBjYXNpbmcuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8a2V5ICAgfENhc2VsZXNzIGtleXwKICAgICAgICAgKiB8cmV0dXJufE9iamVjdCBrZXkgIHwKICAgICAgICAgKgogICAgICAgICAqICMjIyBzZXQKICAgICAgICAgKgogICAgICAgICAqIFNldCB2YWx1ZS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lfERlc2MgICAgICAgIHwKICAgICAgICAgKiB8LS0tLXwtLS0tLS0tLS0tLS18CiAgICAgICAgICogfGtleSB8Q2FzZWxlc3Mga2V5fAogICAgICAgICAqIHx2YWwgfFZhbHVlIHRvIHNldHwKICAgICAgICAgKgogICAgICAgICAqICMjIyBnZXQKICAgICAgICAgKgogICAgICAgICAqIEdldCB2YWx1ZS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxrZXkgICB8Q2FzZWxlc3Mga2V5ICAgICAgfAogICAgICAgICAqIHxyZXR1cm58VmFsdWUgb2YgZ2l2ZW4ga2V5fAogICAgICAgICAqCiAgICAgICAgICogIyMjIHJlbW92ZQogICAgICAgICAqCiAgICAgICAgICogUmVtb3ZlIHZhbHVlLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWV8RGVzYyAgICAgICAgfAogICAgICAgICAqIHwtLS0tfC0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8a2V5IHxDYXNlbGVzcyBrZXl8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgaGFzCiAgICAgICAgICoKICAgICAgICAgKiBEZXRlcm1pbmUgd2hldGhlciB0YXJnZXQgb2JqZWN0IGhhcyBnaXZlbiBrZXkuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8a2V5ICAgfENhc2VsZXNzIGtleSAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgaGFzIGdpdmVuIGtleXwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnN0IGhlYWRlcnMgPSB7ICdDb250ZW50LVR5cGUnOiAndGV4dC9qYXZhc2NyaXB0JyB9OwogICAgICAgICAqIGNvbnN0IGMgPSBuZXcgQ2FzZWxlc3MoaGVhZGVycyk7CiAgICAgICAgICogYy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L2NzcycpOwogICAgICAgICAqIGNvbnNvbGUubG9nKGhlYWRlcnMpOyAvLyAtPiB7ICdDb250ZW50LVR5cGUnOiAndGV4dC9jc3MnIH0KICAgICAgICAgKiBjLmdldEtleSgnY29udGVudC10eXBlJyk7IC8vIC0+ICdDb250ZW50LVR5cGUnCiAgICAgICAgICogYy5yZW1vdmUoJ2NvbnRlbnQtdHlwZScpOwogICAgICAgICAqIGMuaGFzKCdjb250ZW50LXR5cGUnKTsgLy8gLT4gZmFsc2UKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGNsYXNzIENhc2VsZXNzIHsKICAgICAgICAgKiAgICAgY29uc3RydWN0b3Iob2JqOiBhbnkpOwogICAgICAgICAqICAgICBnZXRLZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCB2b2lkOwogICAgICAgICAqICAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbDogYW55KTogdm9pZDsKICAgICAgICAgKiAgICAgZ2V0KGtleTogc3RyaW5nKTogYW55OwogICAgICAgICAqICAgICByZW1vdmUoa2V5OiBzdHJpbmcpOiB2b2lkOwogICAgICAgICAqICAgICBoYXMoa2V5OiBzdHJpbmcpOiBib29sZWFuOwogICAgICAgICAqIH0KICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogQ2xhc3MgbG93ZXJDYXNlIGtleXMgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBDbGFzcyh7CiAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKG9iaikgewogICAgICAgICAgICAgICAgdGhpcy5fdGFyZ2V0ID0gb2JqOwogICAgICAgICAgICB9LAogICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKGtleSwgdmFsKSB7CiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMuZ2V0S2V5KGtleSk7CiAgICAgICAgICAgICAgICBpZiAobmFtZSkga2V5ID0gbmFtZTsKICAgICAgICAgICAgICAgIHRoaXMuX3RhcmdldFtrZXldID0gdmFsOwogICAgICAgICAgICB9LAogICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICAgICAga2V5ID0gdGhpcy5nZXRLZXkoa2V5KTsKCiAgICAgICAgICAgICAgICBpZiAoa2V5KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RhcmdldFtrZXldOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBnZXRLZXk6IGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBsb3dlckNhc2Uoa2V5KTsKCiAgICAgICAgICAgICAgICB2YXIgX2tleXMgPSBrZXlzKHRoaXMuX3RhcmdldCk7CgogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IF9rZXlzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIF9rZXkgPSBfa2V5c1tpXTsKICAgICAgICAgICAgICAgICAgICBpZiAobG93ZXJDYXNlKF9rZXkpID09PSBuYW1lKSByZXR1cm4gX2tleTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbihrZXkpIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl90YXJnZXRbdGhpcy5nZXRLZXkoa2V5KV07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGhhczogZnVuY3Rpb24oa2V5KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gISF0aGlzLmdldEtleShrZXkpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb2xvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgQ29sb3IgPSBfLkNvbG9yID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ29sb3IgY29udmVydGVyLgogICAgICAgICAqCiAgICAgICAgICogIyMjIGNvbnN0cnVjdG9yCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSB8RGVzYyAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8Y29sb3J8Q29sb3IgdG8gY29udmVydHwKICAgICAgICAgKgogICAgICAgICAqICMjIyB0b1JnYgogICAgICAgICAqCiAgICAgICAgICogR2V0IGNvbG9yIHJnYiBzdHJpbmcgZm9ybWF0LgogICAgICAgICAqCiAgICAgICAgICogIyMjIHRvSGV4CiAgICAgICAgICoKICAgICAgICAgKiBHZXQgY29sb3IgaGV4IHN0cmluZyBmb3JtYXQuCiAgICAgICAgICoKICAgICAgICAgKiAjIyMgdG9Ic2wKICAgICAgICAgKgogICAgICAgICAqIEdldCBjb2xvciBoc2wgc3RyaW5nIGZvcm1hdC4KICAgICAgICAgKgogICAgICAgICAqICMjIyBwYXJzZQogICAgICAgICAqCiAgICAgICAgICogW3N0YXRpY10gUGFyc2UgY29sb3Igc3RyaW5nIGludG8gb2JqZWN0IGNvbnRhaW5pbmcgdmFsdWUgYW5kIG1vZGVsLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGNvbG9yIHxDb2xvciBzdHJpbmcgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxPYmplY3QgY29udGFpbmluZyB2YWx1ZSBhbmQgbW9kZWx8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBDb2xvci5wYXJzZSgncmdiKDE3MCwgMjg3LCAyMDQsIDAuNSknKTsgLy8gLT4ge3ZhbDogWzE3MCwgMTg3LCAyMDQsIDAuNV0sIG1vZGVsOiAncmdiJ30KICAgICAgICAgKiBjb25zdCBjb2xvciA9IG5ldyBDb2xvcignI2FiYycpOwogICAgICAgICAqIGNvbG9yLnRvUmdiKCk7IC8vIC0+ICdyZ2IoMTcwLCAxODcsIDIwNCknCiAgICAgICAgICogY29sb3IudG9Ic2woKTsgLy8gLT4gJ2hzbCgyMTAsIDI1JSwgNzMlKScKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBDb2xvciB7CiAgICAgICAgICogICAgIGludGVyZmFjZSBJQ29sb3IgewogICAgICAgICAqICAgICAgICAgdmFsOiBudW1iZXJbXTsKICAgICAgICAgKiAgICAgICAgIG1vZGVsOiBzdHJpbmc7CiAgICAgICAgICogICAgIH0KICAgICAgICAgKiB9CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgY2xhc3MgQ29sb3IgewogICAgICAgICAqICAgICBjb25zdHJ1Y3Rvcihjb2xvcjogc3RyaW5nIHwgQ29sb3IuSUNvbG9yKTsKICAgICAgICAgKiAgICAgdG9SZ2IoKTogc3RyaW5nOwogICAgICAgICAqICAgICB0b0hleCgpOiBzdHJpbmc7CiAgICAgICAgICogICAgIHRvSHNsKCk6IHN0cmluZzsKICAgICAgICAgKiAgICAgc3RhdGljIHBhcnNlKGNvbG9yU3RyOiBzdHJpbmcpOiBDb2xvci5JQ29sb3I7CiAgICAgICAgICogfQogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBDbGFzcyBpc1N0ciBjbGFtcCByZ2JUb0hzbCBoc2xUb1JnYiBoZXggCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBDbGFzcygKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gQ29sb3IoY29sb3IpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNTdHIoY29sb3IpKSBjb2xvciA9IGV4cG9ydHMucGFyc2UoY29sb3IpOwogICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwgPSBjb2xvci5tb2RlbDsKICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbCA9IGNvbG9yLnZhbDsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB0b1JnYjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMudmFsOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsID09PSAnaHNsJykgdmFsID0gaHNsVG9SZ2IodmFsKTsKICAgICAgICAgICAgICAgICAgICB2YXIgcHJlZml4ID0gJ3JnYmEnOwoKICAgICAgICAgICAgICAgICAgICBpZiAodmFsWzNdID09PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9ICdyZ2InOwogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwuc2xpY2UoMCwgMyk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgJygnICsgdmFsLmpvaW4oJywgJykgKyAnKSc7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgdG9IZXg6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnZhbDsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tb2RlbCA9PT0gJ2hzbCcpIHZhbCA9IGhzbFRvUmdiKHZhbCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IGhleC5lbmNvZGUodmFsLnNsaWNlKDAsIDMpKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHJldFswXSA9PT0gcmV0WzFdICYmIHJldFsyXSA9PT0gcmV0WzNdICYmIHJldFs0XSA9PT0gcmV0WzVdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHJldFswXSArIHJldFsyXSArIHJldFs1XTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHJldHVybiAnIycgKyByZXQ7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgdG9Ic2w6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnZhbDsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tb2RlbCA9PT0gJ3JnYicpIHZhbCA9IHJnYlRvSHNsKHZhbCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHByZWZpeCA9ICdoc2xhJzsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbFszXSA9PT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSAnaHNsJzsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsLnNsaWNlKDAsIDMpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgdmFsWzFdID0gdmFsWzFdICsgJyUnOwogICAgICAgICAgICAgICAgICAgIHZhbFsyXSA9IHZhbFsyXSArICclJzsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJlZml4ICsgJygnICsgdmFsLmpvaW4oJywgJykgKyAnKSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHBhcnNlOiBmdW5jdGlvbihjb2xvclN0cikgewogICAgICAgICAgICAgICAgICAgIHZhciBpLCBtYXRjaDsKICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gWzAsIDAsIDAsIDFdLAogICAgICAgICAgICAgICAgICAgICAgICBtb2RlbCA9ICdyZ2InOwogICAgICAgICAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbmQtYXNzaWduICovCgogICAgICAgICAgICAgICAgICAgIGlmICgobWF0Y2ggPSBjb2xvclN0ci5tYXRjaChyZWdIZXhBYmJyKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBtYXRjaFsxXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbFtpXSA9IHBhcnNlSW50KG1hdGNoW2ldICsgbWF0Y2hbaV0sIDE2KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gY29sb3JTdHIubWF0Y2gocmVnSGV4KSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBtYXRjaFsxXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpMiA9IGkgKiAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsW2ldID0gcGFyc2VJbnQobWF0Y2guc2xpY2UoaTIsIGkyICsgMiksIDE2KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gY29sb3JTdHIubWF0Y2gocmVnUmdiYSkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbFtpXSA9IHBhcnNlSW50KG1hdGNoW2kgKyAxXSwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFs0XSkgdmFsWzNdID0gcGFyc2VGbG9hdChtYXRjaFs0XSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgobWF0Y2ggPSBjb2xvclN0ci5tYXRjaChyZWdSZ2JhUGVyKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsW2ldID0gTWF0aC5yb3VuZChwYXJzZUZsb2F0KG1hdGNoW2kgKyAxXSkgKiAyLjU1KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoWzRdKSB2YWxbM10gPSBwYXJzZUZsb2F0KG1hdGNoWzRdKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGNvbG9yU3RyLm1hdGNoKHJlZ0hzbGEpKSkgewogICAgICAgICAgICAgICAgICAgICAgICBtb2RlbCA9ICdoc2wnOwogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHBhcnNlRmxvYXQobWF0Y2hbMV0pICUgMzYwKSArIDM2MCkgJSAzNjAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFtcChwYXJzZUZsb2F0KG1hdGNoWzJdKSwgMCwgMTAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYW1wKHBhcnNlRmxvYXQobWF0Y2hbM10pLCAwLCAxMDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhbXAocGFyc2VGbG9hdChtYXRjaFs0XSksIDAsIDEpCiAgICAgICAgICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICAgICB2YWw6IHZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw6IG1vZGVsCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICk7CiAgICAgICAgdmFyIHJlZ0hleEFiYnIgPSAvXiMoW2EtZkEtRjAtOV17M30pJC87CiAgICAgICAgdmFyIHJlZ0hleCA9IC9eIyhbYS1mQS1GMC05XXs2fSkkLzsKICAgICAgICB2YXIgcmVnUmdiYSA9IC9ecmdiYT9cKFxzKihbKy1dP1xkKylccyosXHMqKFsrLV0/XGQrKVxzKixccyooWystXT9cZCspXHMqKD86LFxzKihbKy1dP1tcZC5dKylccyopP1wpJC87CiAgICAgICAgdmFyIHJlZ1JnYmFQZXIgPSAvXnJnYmE/XChccyooWystXT9bXGQuXSspJVxzKixccyooWystXT9bXGQuXSspJVxzKixccyooWystXT9bXGQuXSspJVxzKig/OixccyooWystXT9bXGQuXSspXHMqKT9cKSQvOwogICAgICAgIHZhciByZWdIc2xhID0gL15oc2xhP1woXHMqKFsrLV0/XGQqWy5dP1xkKykoPzpkZWcpP1xzKixccyooWystXT9bXGQuXSspJVxzKixccyooWystXT9bXGQuXSspJVxzKig/OixccyooWystXT9bXGQuXSspXHMqKT9cKSQvOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVsZWdhdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5EZWxlZ2F0b3IgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBPYmplY3QgZGVsZWdhdGlvbi4KICAgICAgICAgKgogICAgICAgICAqICMjIyBjb25zdHJ1Y3RvcgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxob3N0ICB8SG9zdCBvYmplY3QgICAgICB8CiAgICAgICAgICogfHRhcmdldHxEZWxlZ2F0aW9uIHRhcmdldHwKICAgICAgICAgKgogICAgICAgICAqICMjIyBtZXRob2QKICAgICAgICAgKgogICAgICAgICAqIEFsbG93IG1ldGhvZCB0byBiZSBhY2Nlc3NlZCBvbiB0aGUgaG9zdCBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICAgICB8RGVzYyAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG5hbWUgICAgICAgfEhvc3QgbWV0aG9kIG5hbWUgIHwKICAgICAgICAgKiB8dGFyZ2V0PW5hbWV8VGFyZ2V0IG1ldGhvZCBuYW1lfAogICAgICAgICAqCiAgICAgICAgICogIyMjIGdldHRlcgogICAgICAgICAqCiAgICAgICAgICogQ3JlYXRlIGEgZ2V0dGVyLgogICAgICAgICAqCiAgICAgICAgICogIyMjIHNldHRlcgogICAgICAgICAqCiAgICAgICAgICogQ3JlYXRlIGEgc2V0dGVyLgogICAgICAgICAqCiAgICAgICAgICogIyMjIGFjY2VzcwogICAgICAgICAqCiAgICAgICAgICogQ3JlYXRlIGEgYWNjZXNzb3IsIHNhbWUgYXMgY2FsbGluZyBib3RoIHNldHRlciBhbmQgZ2V0dGVyLgogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3QgaG9zdCA9IHsKICAgICAgICAgKiAgICAgdGFyZ2V0OiB7CiAgICAgICAgICogICAgICAgICBhKCkgeyByZXR1cm4gJ2EnOyB9LAogICAgICAgICAqICAgICAgICAgYjogJ2InLAogICAgICAgICAqICAgICAgICAgYzogJ2MnLAogICAgICAgICAqICAgICAgICAgZDogJ2QnLAogICAgICAgICAqICAgICAgICAgZSgpIHsgcmV0dXJuICdlJzsgfQogICAgICAgICAqICAgICB9CiAgICAgICAgICogfTsKICAgICAgICAgKiBjb25zdCBkZWxlZ2F0b3IgPSBuZXcgRGVsZWdhdG9yKGhvc3QsICd0YXJnZXQnKTsKICAgICAgICAgKiBkZWxlZ2F0b3IubWV0aG9kKCdhJykuZ2V0dGVyKCdiJykuc2V0dGVyKCdjJykuYWNjZXNzKCdkJyk7CiAgICAgICAgICogLy8gQHRzLWlnbm9yZQogICAgICAgICAqIGhvc3QuYSgpOyAvLyAtPiAnYScKICAgICAgICAgKiAvLyBAdHMtaWdub3JlCiAgICAgICAgICogaG9zdC5iOyAvLyAtPiAnYicKICAgICAgICAgKiAvLyBAdHMtaWdub3JlCiAgICAgICAgICogaG9zdC5jID0gNTsKICAgICAgICAgKiAvLyBAdHMtaWdub3JlCiAgICAgICAgICogaG9zdC50YXJnZXQuYzsgLy8gLT4gNQogICAgICAgICAqIC8vIEB0cy1pZ25vcmUKICAgICAgICAgKiBob3N0LmQ7IC8vIC0+ICdkJwogICAgICAgICAqIC8vIEB0cy1pZ25vcmUKICAgICAgICAgKiBob3N0LmQgPSA1OwogICAgICAgICAqIC8vIEB0cy1pZ25vcmUKICAgICAgICAgKiBob3N0LmQ7IC8vIC0+IDUKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGNsYXNzIERlbGVnYXRvciB7CiAgICAgICAgICogICAgIGNvbnN0cnVjdG9yKGhvc3Q6IG9iamVjdCwgdGFyZ2V0OiBvYmplY3QgfCBzdHJpbmcpOwogICAgICAgICAqICAgICBtZXRob2QobmFtZTogc3RyaW5nLCB0YXJnZXQ/OiBzdHJpbmcpOiBEZWxlZ2F0b3I7CiAgICAgICAgICogICAgIGdldHRlcihuYW1lOiBzdHJpbmcsIHRhcmdldD86IHN0cmluZyk6IERlbGVnYXRvcjsKICAgICAgICAgKiAgICAgc2V0dGVyKG5hbWU6IHN0cmluZywgdGFyZ2V0Pzogc3RyaW5nKTogRGVsZWdhdG9yOwogICAgICAgICAqICAgICBhY2Nlc3MobmFtZTogc3RyaW5nLCB0YXJnZXQ/OiBzdHJpbmcpOiBEZWxlZ2F0b3I7CiAgICAgICAgICogfQogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBDbGFzcyBzYWZlR2V0IGRlZmluZVByb3AgaXNTdHIgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBDbGFzcyh7CiAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uIERlbGVnYXRvcihob3N0LCB0YXJnZXQpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2hvc3QgPSBob3N0OwoKICAgICAgICAgICAgICAgIGlmIChpc1N0cih0YXJnZXQpKSB7CiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gc2FmZUdldChob3N0LCB0YXJnZXQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldDsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgbWV0aG9kOiBmdW5jdGlvbihuYW1lLCB0YXJnZXROYW1lKSB7CiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy5fdGFyZ2V0OwogICAgICAgICAgICAgICAgdmFyIGZuID0gdGFyZ2V0W3RhcmdldE5hbWUgfHwgbmFtZV07CgogICAgICAgICAgICAgICAgdGhpcy5faG9zdFtuYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0YXJnZXQsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICB9LAogICAgICAgICAgICBnZXR0ZXI6IGZ1bmN0aW9uKG5hbWUsIHRhcmdldE5hbWUpIHsKICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLl90YXJnZXQ7CiAgICAgICAgICAgICAgICB0YXJnZXROYW1lID0gdGFyZ2V0TmFtZSB8fCBuYW1lOwogICAgICAgICAgICAgICAgZGVmaW5lUHJvcCh0aGlzLl9ob3N0LCBuYW1lLCB7CiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFt0YXJnZXROYW1lXTsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc2V0dGVyOiBmdW5jdGlvbihuYW1lLCB0YXJnZXROYW1lKSB7CiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy5fdGFyZ2V0OwogICAgICAgICAgICAgICAgdGFyZ2V0TmFtZSA9IHRhcmdldE5hbWUgfHwgbmFtZTsKICAgICAgICAgICAgICAgIGRlZmluZVByb3AodGhpcy5faG9zdCwgbmFtZSwgewogICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodGFyZ2V0W3RhcmdldE5hbWVdID0gdmFsKTsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYWNjZXNzOiBmdW5jdGlvbihuYW1lLCB0YXJnZXROYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXR0ZXIobmFtZSwgdGFyZ2V0TmFtZSkuc2V0dGVyKG5hbWUsIHRhcmdldE5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEaXNwYXRjaGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5EaXNwYXRjaGVyID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogRmx1eCBkaXNwYXRjaGVyLgogICAgICAgICAqCiAgICAgICAgICogW1JlbGF0ZWQgZG9jc10oaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vZmx1eC9kb2NzL2Rpc3BhdGNoZXIuaHRtbCkKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnN0IGRpc3BhdGNoZXIgPSBuZXcgRGlzcGF0Y2hlcigpOwogICAgICAgICAqCiAgICAgICAgICogZGlzcGF0Y2hlci5yZWdpc3RlcihmdW5jdGlvbiAocGF5bG9hZCkgewogICAgICAgICAqICAgIHN3aXRjaCAocGF5bG9hZC5hY3Rpb25UeXBlKSB7CiAgICAgICAgICogICAgICAgIC8vIERvIHNvbWV0aGluZwogICAgICAgICAqICAgIH0KICAgICAgICAgKiB9KTsKICAgICAgICAgKgogICAgICAgICAqIGRpc3BhdGNoZXIuZGlzcGF0Y2goewogICAgICAgICAqICAgICBhY3Rpb25UeXBlOiAnYWN0aW9uJwogICAgICAgICAqIH0pOwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgY2xhc3MgRGlzcGF0Y2hlciB7CiAgICAgICAgICogICAgIGRpc3BhdGNoKHBheWxvYWQ6IGFueSk7CiAgICAgICAgICogICAgIHJlZ2lzdGVyKGNiOiBGdW5jdGlvbik6IHZvaWQ7CiAgICAgICAgICogICAgIHdhaXRGb3IoaWRzOiBzdHJpbmdbXSk6IHZvaWQ7CiAgICAgICAgICogICAgIHVucmVnaXN0ZXIoaWQ6IHN0cmluZyk6IHZvaWQ7CiAgICAgICAgICogICAgIGlzRGlzcGF0Y2hpbmcoKTogYm9vbGVhbjsKICAgICAgICAgKiB9CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIENsYXNzIHVuaXFJZCAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IENsYXNzKHsKICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gRGlzcGF0Y2hlcigpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IHt9OwogICAgICAgICAgICAgICAgdGhpcy5faXNEaXNwYXRjaGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgdGhpcy5faXNIYW5kbGVkID0ge307CiAgICAgICAgICAgICAgICB0aGlzLl9pc1BlbmRpbmcgPSB7fTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uKHBheWxvYWQpIHsKICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0RGlzcGF0Y2hpbmcocGF5bG9hZCk7CgogICAgICAgICAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fY2FsbGJhY2tzKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzUGVuZGluZ1tpZF0pIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnZva2VDYihpZCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdGhpcy5fc3RvcERpc3BhdGNoaW5nKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2lzdGVyOiBmdW5jdGlvbihjYikgewogICAgICAgICAgICAgICAgdmFyIGlkID0gdW5pcUlkKCdJRF8nKTsKICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrc1tpZF0gPSBjYjsKICAgICAgICAgICAgICAgIHJldHVybiBpZDsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgd2FpdEZvcjogZnVuY3Rpb24oaWRzKSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gaWRzW2ldOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc1BlbmRpbmdbaWRdKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW52b2tlQ2IoaWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB1bnJlZ2lzdGVyOiBmdW5jdGlvbihpZCkgewogICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1tpZF07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGlzRGlzcGF0Y2hpbmc6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzRGlzcGF0Y2hpbmc7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9zdGFydERpc3BhdGNoaW5nOiBmdW5jdGlvbihwYXlsb2FkKSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9jYWxsYmFja3MpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1BlbmRpbmdbaWRdID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNIYW5kbGVkW2lkXSA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdQYXlsb2FkID0gcGF5bG9hZDsKICAgICAgICAgICAgICAgIHRoaXMuX2lzRGlzcGF0Y2hpbmcgPSB0cnVlOwogICAgICAgICAgICB9LAogICAgICAgICAgICBfc3RvcERpc3BhdGNoaW5nOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9wZW5kaW5nUGF5bG9hZDsKICAgICAgICAgICAgICAgIHRoaXMuX2lzRGlzcGF0Y2hpbmcgPSBmYWxzZTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX2ludm9rZUNiOiBmdW5jdGlvbihpZCkgewogICAgICAgICAgICAgICAgdGhpcy5faXNQZW5kaW5nW2lkXSA9IHRydWU7CgogICAgICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2lkXSh0aGlzLl9wZW5kaW5nUGF5bG9hZCk7CgogICAgICAgICAgICAgICAgdGhpcy5faXNIYW5kbGVkW2lkXSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVudW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIEVudW0gPSBfLkVudW0gPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBFbnVtIHR5cGUgaW1wbGVtZW50YXRpb24uCiAgICAgICAgICoKICAgICAgICAgKiAjIyMgY29uc3RydWN0b3IKICAgICAgICAgKgogICAgICAgICAqIHxOYW1lfERlc2MgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS18LS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8YXJyIHxBcnJheSBvZiBzdHJpbmdzfAogICAgICAgICAqCiAgICAgICAgICogfE5hbWV8RGVzYyAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxvYmogfFBhaXJzIG9mIGtleSBhbmQgdmFsdWV8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBpbXBvcnRhbmNlID0gbmV3IEVudW0oWwogICAgICAgICAqICAgICAnTk9ORScsICdUUklWSUFMJywgJ1JFR1VMQVInLCAnSU1QT1JUQU5UJywgJ0NSSVRJQ0FMJwogICAgICAgICAqIF0pOwogICAgICAgICAqIGNvbnN0IHZhbCA9IDE7CiAgICAgICAgICogaWYgKHZhbCA9PT0gaW1wb3J0YW5jZS5DUklUSUNBTCkgewogICAgICAgICAqICAgICAvLyBEbyBzb21ldGhpbmcuCiAgICAgICAgICogfQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgY2xhc3MgRW51bSB7CiAgICAgICAgICogICAgIHNpemU6IG51bWJlcjsKICAgICAgICAgKiAgICAgY29uc3RydWN0b3IobWFwOiBzdHJpbmdbXSB8IHsgW21lbWJlcjogc3RyaW5nXTogYW55IH0pOwogICAgICAgICAqICAgICBba2V5OiBzdHJpbmddOiBhbnk7CiAgICAgICAgICogfQogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBDbGFzcyBmcmVlemUgaXNBcnIgZWFjaCBrZXlzIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gQ2xhc3MoewogICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbiBFbnVtKG1hcCkgewogICAgICAgICAgICAgICAgaWYgKGlzQXJyKG1hcCkpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnNpemUgPSBtYXAubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIGVhY2goCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24obWVtYmVyLCB2YWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbbWVtYmVyXSA9IHZhbDsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcwogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoaXMuc2l6ZSA9IGtleXMobWFwKS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgZWFjaCgKICAgICAgICAgICAgICAgICAgICAgICAgbWFwLAogICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih2YWwsIG1lbWJlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1ttZW1iZXJdID0gdmFsOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB0aGlzCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBmcmVlemUodGhpcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhlYXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIEhlYXAgPSBfLkhlYXAgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBIZWFwIGltcGxlbWVudGF0aW9uLgogICAgICAgICAqCiAgICAgICAgICogIyMjIHNpemUKICAgICAgICAgKgogICAgICAgICAqIEhlYXAgc2l6ZS4KICAgICAgICAgKgogICAgICAgICAqICMjIyBjb25zdHJ1Y3RvcgogICAgICAgICAqCiAgICAgICAgICogfE5hbWV8RGVzYyAgICAgIHwKICAgICAgICAgKiB8LS0tLXwtLS0tLS0tLS0tfAogICAgICAgICAqIHxjbXAgfENvbXBhcmF0b3J8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgY2xlYXIKICAgICAgICAgKgogICAgICAgICAqIENsZWFyIHRoZSBoZWFwLgogICAgICAgICAqCiAgICAgICAgICogIyMjIGFkZAogICAgICAgICAqCiAgICAgICAgICogQWRkIGFuIGl0ZW0gdG8gdGhlIGhlYXAuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8aXRlbSAgfEl0ZW0gdG8gYWRkIHwKICAgICAgICAgKiB8cmV0dXJufEN1cnJlbnQgc2l6ZXwKICAgICAgICAgKgogICAgICAgICAqICMjIyBwb2xsCiAgICAgICAgICoKICAgICAgICAgKiBSZXRyaWV2ZSBhbmQgcmVtb3ZlIHRoZSByb290IGl0ZW0gb2YgdGhlIGhlYXAuCiAgICAgICAgICoKICAgICAgICAgKiAjIyMgcGVlawogICAgICAgICAqCiAgICAgICAgICogU2FtZSBhcyBwb2xsLCBidXQgZG9lcyBub3QgcmVtb3ZlIHRoZSBpdGVtLgogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3QgaGVhcCA9IG5ldyBIZWFwKGZ1bmN0aW9uKGEsIGIpIHsKICAgICAgICAgKiAgICAgIHJldHVybiBiIC0gYTsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBoZWFwLmFkZCgyKTsKICAgICAgICAgKiBoZWFwLmFkZCgxKTsKICAgICAgICAgKiBoZWFwLmFkZCg0KTsKICAgICAgICAgKiBoZWFwLmFkZCg1KTsKICAgICAgICAgKiBoZWFwLnBvbGwoKTsgLy8gLT4gNQogICAgICAgICAqIGNvbnNvbGUubG9nKGhlYXAuc2l6ZSk7IC8vIC0+IDQKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGNsYXNzIEhlYXAgewogICAgICAgICAqICAgICBzaXplOiBudW1iZXI7CiAgICAgICAgICogICAgIGNvbnN0cnVjdG9yKGNtcD86IEZ1bmN0aW9uKTsKICAgICAgICAgKiAgICAgY2xlYXIoKTogdm9pZDsKICAgICAgICAgKiAgICAgYWRkKGl0ZW06IGFueSk6IG51bWJlcjsKICAgICAgICAgKiAgICAgcG9sbCgpOiBhbnk7CiAgICAgICAgICogICAgIHBlZWsoKTogYW55OwogICAgICAgICAqIH0KICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogQ2xhc3Mgc3dhcCBpc1NvcnRlZCAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IENsYXNzKHsKICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gSGVhcCgpIHsKICAgICAgICAgICAgICAgIHZhciBjbXAgPQogICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkCiAgICAgICAgICAgICAgICAgICAgICAgID8gYXJndW1lbnRzWzBdCiAgICAgICAgICAgICAgICAgICAgICAgIDogaXNTb3J0ZWQuZGVmQ29tcGFyYXRvcjsKICAgICAgICAgICAgICAgIHRoaXMuX2NtcCA9IGNtcDsKICAgICAgICAgICAgICAgIHRoaXMuY2xlYXIoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgY2xlYXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy5fZGF0YSA9IFtdOwogICAgICAgICAgICAgICAgdGhpcy5zaXplID0gMDsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYWRkOiBmdW5jdGlvbihpdGVtKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhLnB1c2goaXRlbSk7CgogICAgICAgICAgICAgICAgdGhpcy5zaXplKys7CgogICAgICAgICAgICAgICAgdGhpcy5faGVhcGlmeVVwKHRoaXMuc2l6ZSAtIDEpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpemU7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHBvbGw6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhOwoKICAgICAgICAgICAgICAgIGlmICh0aGlzLnNpemUgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBkYXRhWzBdOwogICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gPSBkYXRhW3RoaXMuc2l6ZSAtIDFdOwogICAgICAgICAgICAgICAgICAgIHRoaXMuc2l6ZS0tOwoKICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWFwaWZ5RG93bigwKTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHBlZWs6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuc2l6ZSA+IDApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVswXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgX2hlYXBpZnlVcDogZnVuY3Rpb24oaWR4KSB7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7CiAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gcGFyZW50SWR4KGlkeCk7CgogICAgICAgICAgICAgICAgd2hpbGUgKGlkeCA+IDAgJiYgdGhpcy5fY21wKGRhdGFbcGFyZW50XSwgZGF0YVtpZHhdKSA+IDApIHsKICAgICAgICAgICAgICAgICAgICBzd2FwKGRhdGEsIHBhcmVudCwgaWR4KTsKICAgICAgICAgICAgICAgICAgICBpZHggPSBwYXJlbnQ7CiAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50SWR4KGlkeCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9oZWFwaWZ5RG93bjogZnVuY3Rpb24oaWR4KSB7CiAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuc2l6ZTsKICAgICAgICAgICAgICAgIHZhciBjbXAgPSB0aGlzLl9jbXA7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7CgogICAgICAgICAgICAgICAgd2hpbGUgKGxlZnRDaGlsZElkeChpZHgpIDwgc2l6ZSkgewogICAgICAgICAgICAgICAgICAgIHZhciBzbWFsbGVySWR4ID0gbGVmdENoaWxkSWR4KGlkeCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hpbGQgPSByaWdodENoaWxkSWR4KGlkeCk7CgogICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRDaGlsZCA8IHNpemUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgY21wKGRhdGFbcmlnaHRDaGlsZElkeF0sIGRhdGFbc21hbGxlcklkeF0pIDwgMAogICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICBzbWFsbGVySWR4ID0gcmlnaHRDaGlsZDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmIChjbXAoZGF0YVtpZHhdLCBkYXRhW3NtYWxsZXJJZHhdKSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3dhcChkYXRhLCBpZHgsIHNtYWxsZXJJZHgpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWR4ID0gc21hbGxlcklkeDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBmdW5jdGlvbiBwYXJlbnRJZHgoaWR4KSB7CiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKChpZHggLSAxKSAvIDIpOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gbGVmdENoaWxkSWR4KGlkeCkgewogICAgICAgICAgICByZXR1cm4gMiAqIGlkeCArIDE7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiByaWdodENoaWxkSWR4KGlkeCkgewogICAgICAgICAgICByZXR1cm4gMiAqIGlkeCArIDI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaGVhcFNvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmhlYXBTb3J0ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogSGVhcCBzb3J0IGltcGxlbWVudGF0aW9uLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8YXJyICAgfEFycmF5IHRvIHNvcnR8CiAgICAgICAgICogfGNtcCAgIHxDb21wYXJhdG9yICAgfAogICAgICAgICAqIHxyZXR1cm58U29ydGVkIGFycmF5IHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGhlYXBTb3J0KFsyLCAxXSk7IC8vIC0+IFsxLCAyXQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaGVhcFNvcnQoYXJyOiBhbnlbXSwgY21wPzogRnVuY3Rpb24pOiBhbnlbXTsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogSGVhcCBpc1NvcnRlZCAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGFycikgewogICAgICAgICAgICB2YXIgY21wID0KICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkCiAgICAgICAgICAgICAgICAgICAgPyBhcmd1bWVudHNbMV0KICAgICAgICAgICAgICAgICAgICA6IGlzU29ydGVkLmRlZkNvbXBhcmF0b3I7CiAgICAgICAgICAgIHZhciBoZWFwID0gbmV3IEhlYXAoY21wKTsKICAgICAgICAgICAgdmFyIGxlbiA9IGFyci5sZW5ndGg7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICBoZWFwLmFkZChhcnJbaV0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGVuOyBfaSsrKSB7CiAgICAgICAgICAgICAgICBhcnJbX2ldID0gaGVhcC5wb2xsKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBhcnI7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExpbmtlZExpc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIExpbmtlZExpc3QgPSBfLkxpbmtlZExpc3QgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBEb3VibHktbGlua2VkIGxpc3QgaW1wbGVtZW50YXRpb24uCiAgICAgICAgICoKICAgICAgICAgKiAjIyMgc2l6ZQogICAgICAgICAqCiAgICAgICAgICogTGlzdCBzaXplLgogICAgICAgICAqCiAgICAgICAgICogIyMjIGhlYWQuCiAgICAgICAgICoKICAgICAgICAgKiBGaXJzdCBub2RlLgogICAgICAgICAqCiAgICAgICAgICogIyMjIHRhaWwKICAgICAgICAgKgogICAgICAgICAqIExhc3Qgbm9kZS4KICAgICAgICAgKgogICAgICAgICAqICMjIyBwdXNoCiAgICAgICAgICoKICAgICAgICAgKiBBZGQgYW4gdmFsdWUgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbCAgIHxWYWx1ZSB0byBwdXNofAogICAgICAgICAqIHxyZXR1cm58Q3VycmVudCBzaXplIHwKICAgICAgICAgKgogICAgICAgICAqICMjIyBwb3AKICAgICAgICAgKgogICAgICAgICAqIEdldCB0aGUgbGFzdCB2YWx1ZSBvZiB0aGUgbGlzdC4KICAgICAgICAgKgogICAgICAgICAqICMjIyB1bnNoaWZ0CiAgICAgICAgICoKICAgICAgICAgKiBBZGQgYW4gdmFsdWUgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QuCiAgICAgICAgICoKICAgICAgICAgKiAjIyMgc2hpZnQKICAgICAgICAgKgogICAgICAgICAqIEdldCB0aGUgZmlyc3QgdmFsdWUgb2YgdGhlIGxpc3QuCiAgICAgICAgICoKICAgICAgICAgKiAjIyMgcm1Ob2RlCiAgICAgICAgICoKICAgICAgICAgKiBSZW1vdmUgbm9kZS4KICAgICAgICAgKgogICAgICAgICAqICMjIyBmaW5kCiAgICAgICAgICoKICAgICAgICAgKiBGaW5kIG5vZGUuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8Zm4gICAgfEZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbiAgIHwKICAgICAgICAgKiB8cmV0dXJufEZpcnN0IHZhbHVlIHRoYXQgcGFzc2VzIHByZWRpY2F0ZXwKICAgICAgICAgKgogICAgICAgICAqICMjIyBmb3JFYWNoCiAgICAgICAgICoKICAgICAgICAgKiBJdGVyYXRlIG92ZXIgdGhlIGxpc3QuCiAgICAgICAgICoKICAgICAgICAgKiAjIyMgdG9BcnIKICAgICAgICAgKgogICAgICAgICAqIENvbnZlcnQgdGhlIGxpc3QgdG8gYSBKYXZhU2NyaXB0IGFycmF5LgogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3QgbGlua2VkTGlzdCA9IG5ldyBMaW5rZWRMaXN0KCk7CiAgICAgICAgICogbGlua2VkTGlzdC5wdXNoKDUpOwogICAgICAgICAqIGxpbmtlZExpc3QucG9wKCk7IC8vIC0+IDUKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBMaW5rZWRMaXN0IHsKICAgICAgICAgKiAgICAgY2xhc3MgTm9kZSB7CiAgICAgICAgICogICAgICAgICB2YWx1ZTogYW55OwogICAgICAgICAqICAgICAgICAgcHJldjogTm9kZSB8IG51bGw7CiAgICAgICAgICogICAgICAgICBuZXh0OiBOb2RlIHwgbnVsbDsKICAgICAgICAgKiAgICAgfQogICAgICAgICAqIH0KICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBjbGFzcyBMaW5rZWRMaXN0IHsKICAgICAgICAgKiAgICAgc2l6ZTogbnVtYmVyOwogICAgICAgICAqICAgICBoZWFkOiBMaW5rZWRMaXN0Lk5vZGU7CiAgICAgICAgICogICAgIHRhaWw6IExpbmtlZExpc3QuTm9kZTsKICAgICAgICAgKiAgICAgcHVzaCh2YWw6IGFueSk6IG51bWJlcjsKICAgICAgICAgKiAgICAgcG9wKCk6IGFueTsKICAgICAgICAgKiAgICAgdW5zaGlmdCh2YWw6IGFueSk6IG51bWJlcjsKICAgICAgICAgKiAgICAgc2hpZnQoKTogYW55OwogICAgICAgICAqICAgICBmaW5kKGZuOiBGdW5jdGlvbik6IExpbmtlZExpc3QuTm9kZSB8IHZvaWQ7CiAgICAgICAgICogICAgIGRlbE5vZGUobm9kZTogTGlua2VkTGlzdC5Ob2RlKTogdm9pZDsKICAgICAgICAgKiAgICAgZm9yRWFjaChpdGVyYXRvcjogRnVuY3Rpb24sIGN0eD86IGFueSk7CiAgICAgICAgICogICAgIHRvQXJyKCk6IGFueVtdOwogICAgICAgICAqIH0KICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogQ2xhc3MgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBDbGFzcyh7CiAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uIExpbmtlZExpc3QoKSB7CiAgICAgICAgICAgICAgICB0aGlzLnRhaWwgPSBudWxsOwogICAgICAgICAgICAgICAgdGhpcy5oZWFkID0gbnVsbDsKICAgICAgICAgICAgICAgIHRoaXMuc2l6ZSA9IDA7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHB1c2g6IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBuZXcgTm9kZSh2YWwsIHRoaXMudGFpbCwgbnVsbCwgdGhpcyk7CiAgICAgICAgICAgICAgICB0aGlzLnRhaWwgPSBub2RlOwogICAgICAgICAgICAgICAgdGhpcy5oZWFkID0gdGhpcy5oZWFkIHx8IG5vZGU7CiAgICAgICAgICAgICAgICB0aGlzLnNpemUrKzsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpemU7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHBvcDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGFpbCkgcmV0dXJuOwogICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnRhaWw7CiAgICAgICAgICAgICAgICB0aGlzLnRhaWwgPSBub2RlLnByZXY7CgogICAgICAgICAgICAgICAgaWYgKHRoaXMudGFpbCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMudGFpbC5uZXh0ID0gbnVsbDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0aGlzLnNpemUtLTsKICAgICAgICAgICAgICAgIHJldHVybiBub2RlLnZhbHVlOwogICAgICAgICAgICB9LAogICAgICAgICAgICB1bnNoaWZ0OiBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgICAgIHZhciBub2RlID0gbmV3IE5vZGUodmFsLCBudWxsLCB0aGlzLmhlYWQsIHRoaXMpOwogICAgICAgICAgICAgICAgdGhpcy5oZWFkID0gbm9kZTsKICAgICAgICAgICAgICAgIHRoaXMudGFpbCA9IHRoaXMudGFpbCB8fCBub2RlOwogICAgICAgICAgICAgICAgdGhpcy5zaXplKys7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaXplOwogICAgICAgICAgICB9LAogICAgICAgICAgICBzaGlmdDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaGVhZCkgcmV0dXJuOwogICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmhlYWQ7CiAgICAgICAgICAgICAgICB0aGlzLmhlYWQgPSBub2RlLm5leHQ7CgogICAgICAgICAgICAgICAgaWYgKHRoaXMuaGVhZCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZC5wcmV2ID0gbnVsbDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWlsID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0aGlzLnNpemUtLTsKICAgICAgICAgICAgICAgIHJldHVybiBub2RlLnZhbHVlOwogICAgICAgICAgICB9LAogICAgICAgICAgICBybU5vZGU6IGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgICAgICAgICAgIGlmIChub2RlLmxpc3QgIT09IHRoaXMpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignTm9kZSBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBsaXN0Jyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIG5leHQgPSBub2RlLm5leHQsCiAgICAgICAgICAgICAgICAgICAgcHJldiA9IG5vZGUucHJldjsKCiAgICAgICAgICAgICAgICBpZiAobmV4dCkgewogICAgICAgICAgICAgICAgICAgIG5leHQucHJldiA9IHByZXY7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHByZXYpIHsKICAgICAgICAgICAgICAgICAgICBwcmV2Lm5leHQgPSBuZXh0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChub2RlID09PSB0aGlzLmhlYWQpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmhlYWQgPSBuZXh0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChub2RlID09PSB0aGlzLnRhaWwpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnRhaWwgPSBwcmV2OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG5vZGUubGlzdCA9IG51bGw7CiAgICAgICAgICAgICAgICBub2RlLnByZXYgPSBudWxsOwogICAgICAgICAgICAgICAgbm9kZS5uZXh0ID0gbnVsbDsKICAgICAgICAgICAgICAgIHRoaXMuc2l6ZS0tOwogICAgICAgICAgICB9LAogICAgICAgICAgICBmaW5kOiBmdW5jdGlvbihmbikgewogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGN1cnJlbnQgPSB0aGlzLmhlYWQ7IGN1cnJlbnQgIT09IG51bGw7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGlmIChmbihjdXJyZW50LnZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGZvckVhY2g6IGZ1bmN0aW9uKGl0ZXJhdG9yLCBjdHgpIHsKICAgICAgICAgICAgICAgIGN0eCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gY3R4IDogdGhpczsKCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgY3VycmVudCA9IHRoaXMuaGVhZDsgY3VycmVudCAhPT0gbnVsbDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChjdHgsIGN1cnJlbnQudmFsdWUsIGksIHRoaXMpOwogICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHRvQXJyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBhcnIgPSBuZXcgQXJyYXkodGhpcy5zaXplKTsKCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgY3VycmVudCA9IHRoaXMuaGVhZDsgY3VycmVudCAhPT0gbnVsbDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgYXJyW2ldID0gY3VycmVudC52YWx1ZTsKICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBhcnI7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB2YXIgTm9kZSA9IChleHBvcnRzLk5vZGUgPSBDbGFzcyh7CiAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uIE5vZGUodmFsLCBwcmV2LCBuZXh0LCBsaXN0KSB7CiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsOwogICAgICAgICAgICAgICAgdGhpcy5saXN0ID0gbGlzdDsKCiAgICAgICAgICAgICAgICBpZiAocHJldikgewogICAgICAgICAgICAgICAgICAgIHByZXYubmV4dCA9IHRoaXM7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2ID0gcHJldjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2ID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAobmV4dCkgewogICAgICAgICAgICAgICAgICAgIG5leHQucHJldiA9IHRoaXM7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gbmV4dDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pKTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhhc2hUYWJsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uSGFzaFRhYmxlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogSGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbi4KICAgICAgICAgKgogICAgICAgICAqICMjIyBjb25zdHJ1Y3RvcgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICB8RGVzYyAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS18LS0tLS0tLS0tLS18CiAgICAgICAgICogfHNpemU9MzJ8QnVja2V0IHNpemV8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgc2V0CiAgICAgICAgICoKICAgICAgICAgKiBTZXQgdmFsdWUuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZXxEZXNjICAgICAgICB8CiAgICAgICAgICogfC0tLS18LS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxrZXkgfFZhbHVlIGtleSAgIHwKICAgICAgICAgKiB8dmFsIHxWYWx1ZSB0byBzZXR8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgZ2V0CiAgICAgICAgICoKICAgICAgICAgKiBHZXQgdmFsdWUuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8a2V5ICAgfFZhbHVlIGtleSAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFZhbHVlIG9mIGdpdmVuIGtleXwKICAgICAgICAgKgogICAgICAgICAqICMjIyBoYXMKICAgICAgICAgKgogICAgICAgICAqIENoZWNrIGlmIGhhcyB2YWx1ZS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8a2V5ICAgfFZhbHVlIGtleSAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58VHJ1ZSBpZiB2YWx1ZSBleGlzdHN8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgZGVsZXRlCiAgICAgICAgICoKICAgICAgICAgKiBEZWxldGUgdmFsdWUuCiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBoYXNoVGFibGUgPSBuZXcgSGFzaFRhYmxlKDEyOCk7CiAgICAgICAgICogaGFzaFRhYmxlLnNldCgnbmFtZScsICdyZWRob29kc3UnKTsKICAgICAgICAgKiBoYXNoVGFibGUuZ2V0KCduYW1lJyk7IC8vIC0+ICdyZWRob29kc3UnCiAgICAgICAgICogaGFzaFRhYmxlLmhhcygnbmFtZScpOyAvLyAtPiB0cnVlCiAgICAgICAgICogaGFzaFRhYmxlLmRlbGV0ZSgnbmFtZScpOwogICAgICAgICAqIGhhc2hUYWJsZS5oYXMoJ25hbWUnKTsgLy8gLT4gZmFsc2UKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGNsYXNzIEhhc2hUYWJsZSB7CiAgICAgICAgICogICAgIGNvbnN0cnVjdG9yKHNpemU/OiBudW1iZXIpOwogICAgICAgICAqICAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbDogYW55KTogdm9pZDsKICAgICAgICAgKiAgICAgZ2V0KGtleTogc3RyaW5nKTogYW55OwogICAgICAgICAqICAgICBoYXMoa2V5OiBzdHJpbmcpOiBib29sZWFuOwogICAgICAgICAqICAgICBkZWxldGUoa2V5OiBzdHJpbmcpOiB2b2lkOwogICAgICAgICAqIH0KICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogQ2xhc3MgTGlua2VkTGlzdCBtYXAgc3RySGFzaCBoYXMgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBDbGFzcyh7CiAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uIEhhc2hUYWJsZSgpIHsKICAgICAgICAgICAgICAgIHZhciBzaXplID0KICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZAogICAgICAgICAgICAgICAgICAgICAgICA/IGFyZ3VtZW50c1swXQogICAgICAgICAgICAgICAgICAgICAgICA6IDMyOwogICAgICAgICAgICAgICAgdGhpcy5fYnVja2V0cyA9IG1hcChBcnJheShzaXplKSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaW5rZWRMaXN0KCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHRoaXMuX2tleXMgPSB7fTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihrZXksIHZhbCkgewogICAgICAgICAgICAgICAgdmFyIGtleUhhc2ggPSB0aGlzLl9oYXNoKGtleSk7CgogICAgICAgICAgICAgICAgdGhpcy5fa2V5c1trZXldID0ga2V5SGFzaDsKICAgICAgICAgICAgICAgIHZhciBsaW5rZWRMaXN0ID0gdGhpcy5fYnVja2V0c1trZXlIYXNoXTsKICAgICAgICAgICAgICAgIHZhciBub2RlID0gbGlua2VkTGlzdC5maW5kKGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWwua2V5ID09PSBrZXk7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgICAgICAgICAgICBsaW5rZWRMaXN0LnB1c2goewogICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBub2RlLnZhbHVlLnZhbHVlID0gdmFsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICAgICAgdmFyIGxpbmtlZExpc3QgPSB0aGlzLl9idWNrZXRzW3RoaXMuX2hhc2goa2V5KV07CgogICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBsaW5rZWRMaXN0LmZpbmQoZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbC5rZXkgPT09IGtleTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmIChub2RlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUudmFsdWUudmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGhhczogZnVuY3Rpb24oa2V5KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaGFzKHRoaXMuX2tleXMsIGtleSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRlbGV0ZTogZnVuY3Rpb24oa2V5KSB7CiAgICAgICAgICAgICAgICB2YXIga2V5SGFzaCA9IHRoaXMuX2hhc2goa2V5KTsKCiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fa2V5c1trZXldOwogICAgICAgICAgICAgICAgdmFyIGxpbmtlZExpc3QgPSB0aGlzLl9idWNrZXRzW2tleUhhc2hdOwogICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBsaW5rZWRMaXN0LmZpbmQoZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbC5rZXkgPT09IGtleTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmIChub2RlKSB7CiAgICAgICAgICAgICAgICAgICAgbGlua2VkTGlzdC5ybU5vZGUobm9kZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9oYXNoOiBmdW5jdGlvbihrZXkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBzdHJIYXNoKGtleSkgJSB0aGlzLl9idWNrZXRzLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHNldWRvTWFwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBQc2V1ZG9NYXAgPSBfLlBzZXVkb01hcCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIExpa2UgZXM2IE1hcCwgd2l0aG91dCBpdGVyYXRvcnMuCiAgICAgICAgICoKICAgICAgICAgKiBJdCBzdXBwb3J0cyBvbmx5IHN0cmluZyBrZXlzLCBhbmQgdXNlcyBNYXAgaWYgZXhpc3RzLgogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3QgbWFwID0gbmV3IFBzZXVkb01hcCgpOwogICAgICAgICAqIG1hcC5zZXQoJzEnLCAxKTsKICAgICAgICAgKiBtYXAuZ2V0KCcxJyk7IC8vIC0+IDEKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGNvbnN0IFBzZXVkb01hcDogdHlwZW9mIE1hcDsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogQ2xhc3Mgcm9vdCBkZXRlY3RNb2NoYSBkZWZpbmVQcm9wIGtleXMgZWFjaCBpc0FyciBpc1VuZGVmIAogICAgICAgICAqLwoKICAgICAgICBpZiAocm9vdC5NYXAgJiYgIWRldGVjdE1vY2hhKCkpIHsKICAgICAgICAgICAgZXhwb3J0cyA9IHJvb3QuTWFwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGV4cG9ydHMgPSBDbGFzcyh7CiAgICAgICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbiBQc2V1ZG9NYXAoZGF0YSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXIoKTsKICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICAgICAgICAgICAgICAgICAgZGVmaW5lUHJvcCh0aGlzLCAnc2l6ZScsIHsKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXlzKHNlbGYuX2RhdGEpLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbigpIHt9LAogICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBleHBvcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbih2YWwsIGtleSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCB2YWwpOwogICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzQXJyKGRhdGEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVhY2goCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQodmFsWzBdLCB2YWxbMV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZm9yRWFjaDogZnVuY3Rpb24oZm4sIGN0eCkgewogICAgICAgICAgICAgICAgICAgIGVhY2goCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHZhbCwga2V5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbi5jYWxsKHRoaXMsIHZhbCwga2V5KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgY3R4CiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBoYXM6IGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAhaXNVbmRlZih0aGlzLl9kYXRhW2tleV0pOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24oa2V5KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFba2V5XTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKGtleSwgdmFsKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YVtrZXldID0gdmFsOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGRlbGV0ZTogZnVuY3Rpb24oa2V5KSB7CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2RhdGFba2V5XTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBjbGVhcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YSA9IHt9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMcnUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLkxydSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFNpbXBsZSBMUlUgY2FjaGUuCiAgICAgICAgICoKICAgICAgICAgKiAjIyMgY29uc3RydWN0b3IKICAgICAgICAgKgogICAgICAgICAqIHxOYW1lfERlc2MgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG1heCB8TWF4IGl0ZW1zIGluIGNhY2hlfAogICAgICAgICAqCiAgICAgICAgICogIyMjIGhhcwogICAgICAgICAqCiAgICAgICAgICogQ2hlY2sgaWYgaGFzIGNhY2hlLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxrZXkgICB8Q2FjaGUga2V5ICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxUcnVlIGlmIHZhbHVlIGV4aXN0c3wKICAgICAgICAgKgogICAgICAgICAqICMjIyByZW1vdmUKICAgICAgICAgKgogICAgICAgICAqIFJlbW92ZSBjYWNoZS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tfAogICAgICAgICAqIHxrZXkgICB8Q2FjaGUga2V5fAogICAgICAgICAqCiAgICAgICAgICogIyMjIGdldAogICAgICAgICAqCiAgICAgICAgICogR2V0IGNhY2hlIHZhbHVlLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tfAogICAgICAgICAqIHxrZXkgICB8Q2FjaGUga2V5ICB8CiAgICAgICAgICogfHJldHVybnxDYWNoZSB2YWx1ZXwKICAgICAgICAgKgogICAgICAgICAqICMjIyBzZXQKICAgICAgICAgKgogICAgICAgICAqIFNldCBjYWNoZS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLXwKICAgICAgICAgKiB8a2V5ICAgfENhY2hlIGtleSAgfAogICAgICAgICAqIHx2YWwgICB8Q2FjaGUgdmFsdWV8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgY2xlYXIKICAgICAgICAgKgogICAgICAgICAqIENsZWFyIGNhY2hlLgogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3QgY2FjaGUgPSBuZXcgTHJ1KDUwKTsKICAgICAgICAgKiBjYWNoZS5zZXQoJ3Rlc3QnLCAnbGljaWEnKTsKICAgICAgICAgKiBjYWNoZS5nZXQoJ3Rlc3QnKTsgLy8gLT4gJ2xpY2lhJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgY2xhc3MgTHJ1IHsKICAgICAgICAgKiAgICAgY29uc3RydWN0b3IobWF4OiBudW1iZXIpOwogICAgICAgICAqICAgICBoYXMoa2V5OiBzdHJpbmcpOiBib29sZWFuOwogICAgICAgICAqICAgICByZW1vdmUoa2V5OiBzdHJpbmcpOiB2b2lkOwogICAgICAgICAqICAgICBnZXQoa2V5OiBzdHJpbmcpOiBhbnk7CiAgICAgICAgICogICAgIHNldChrZXk6IHN0cmluZywgdmFsOiBhbnkpOiB2b2lkOwogICAgICAgICAqICAgICBjbGVhcigpOiB2b2lkOwogICAgICAgICAqIH0KICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogTGlua2VkTGlzdCBQc2V1ZG9NYXAgQ2xhc3MgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBDbGFzcyh7CiAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uIExydShtYXgpIHsKICAgICAgICAgICAgICAgIHRoaXMuX21heCA9IG1heDsKICAgICAgICAgICAgICAgIHRoaXMuX2xpc3QgPSBuZXcgTGlua2VkTGlzdCgpOwogICAgICAgICAgICAgICAgdGhpcy5fbWFwID0gbmV3IFBzZXVkb01hcCgpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBoYXM6IGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hcC5oYXMoa2V5KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbihrZXkpIHsKICAgICAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLl9tYXA7CgogICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzKGtleSkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IG1hcC5nZXQoa2V5KTsKCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGlzdC5ybU5vZGUobm9kZSk7CgogICAgICAgICAgICAgICAgICAgIG1hcC5kZWxldGUoa2V5KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihrZXkpIHsKICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gdGhpcy5fbGlzdDsKICAgICAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLl9tYXA7CiAgICAgICAgICAgICAgICB2YXIgcmV0OwoKICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhcyhrZXkpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBtYXAuZ2V0KGtleSk7CiAgICAgICAgICAgICAgICAgICAgcmV0ID0gbm9kZS52YWx1ZS52YWw7CiAgICAgICAgICAgICAgICAgICAgbGlzdC5ybU5vZGUobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgbGlzdC51bnNoaWZ0KG5vZGUudmFsdWUpOwogICAgICAgICAgICAgICAgICAgIG1hcC5zZXQoa2V5LCBsaXN0LmhlYWQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNldDogZnVuY3Rpb24oa2V5LCB2YWwpIHsKICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gdGhpcy5fbGlzdDsKICAgICAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLl9tYXA7CgogICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzKGtleSkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IG1hcC5nZXQoa2V5KTsKICAgICAgICAgICAgICAgICAgICBsaXN0LnJtTm9kZShub2RlKTsKICAgICAgICAgICAgICAgICAgICBsaXN0LnVuc2hpZnQoewogICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgdmFsOiB2YWwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBtYXAuc2V0KGtleSwgbGlzdC5oZWFkKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbGlzdC51bnNoaWZ0KHsKICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbDogdmFsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgbWFwLnNldChrZXksIGxpc3QuaGVhZCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChsaXN0LnNpemUgPiB0aGlzLl9tYXgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBsaXN0LnBvcCgpOwogICAgICAgICAgICAgICAgICAgICAgICBtYXAuZGVsZXRlKGl0ZW0ua2V5KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGNsZWFyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHRoaXMuX21hcCA9IG5ldyBQc2V1ZG9NYXAoKTsKICAgICAgICAgICAgICAgIHRoaXMuX2xpc3QgPSBuZXcgTGlua2VkTGlzdCgpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBRdWV1ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uUXVldWUgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBRdWV1ZSBkYXRhIHN0cnVjdHVyZS4KICAgICAgICAgKgogICAgICAgICAqICMjIyBzaXplCiAgICAgICAgICoKICAgICAgICAgKiBRdWV1ZSBzaXplLgogICAgICAgICAqCiAgICAgICAgICogIyMjIGNsZWFyCiAgICAgICAgICoKICAgICAgICAgKiBDbGVhciB0aGUgcXVldWUuCiAgICAgICAgICoKICAgICAgICAgKiAjIyMgZW5xdWV1ZQogICAgICAgICAqCiAgICAgICAgICogQWRkIGFuIGl0ZW0gdG8gdGhlIHF1ZXVlLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGl0ZW0gIHxJdGVtIHRvIGVucXVldWV8CiAgICAgICAgICogfHJldHVybnxDdXJyZW50IHNpemUgICB8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgZGVxdWV1ZQogICAgICAgICAqCiAgICAgICAgICogUmVtb3ZlIHRoZSBmaXJzdCBpdGVtIG9mIHRoZSBxdWV1ZS4KICAgICAgICAgKgogICAgICAgICAqICMjIyBwZWVrCiAgICAgICAgICoKICAgICAgICAgKiBHZXQgdGhlIGZpcnN0IGl0ZW0gd2l0aG91dCByZW1vdmluZyBpdC4KICAgICAgICAgKgogICAgICAgICAqICMjIyBmb3JFYWNoCiAgICAgICAgICoKICAgICAgICAgKiBJdGVyYXRlIG92ZXIgdGhlIHF1ZXVlLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8aXRlcmF0b3J8RnVuY3Rpb24gaW52b2tlZCBpdGVyYXRpb258CiAgICAgICAgICogfGN0eCAgICAgfEZ1bmN0aW9uIGNvbnRleHQgICAgICAgICAgfAogICAgICAgICAqCiAgICAgICAgICogIyMjIHRvQXJyCiAgICAgICAgICoKICAgICAgICAgKiBDb252ZXJ0IHF1ZXVlIHRvIGEgSmF2YVNjcmlwdCBhcnJheS4KICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnN0IHF1ZXVlID0gbmV3IFF1ZXVlKCk7CiAgICAgICAgICoKICAgICAgICAgKiBjb25zb2xlLmxvZyhxdWV1ZS5zaXplKTsgLy8gLT4gMAogICAgICAgICAqIHF1ZXVlLmVucXVldWUoMik7CiAgICAgICAgICogcXVldWUuZW5xdWV1ZSgzKTsKICAgICAgICAgKiBxdWV1ZS5kZXF1ZXVlKCk7IC8vIC0+IDIKICAgICAgICAgKiBjb25zb2xlLmxvZyhxdWV1ZS5zaXplKTsgLy8gLT4gMQogICAgICAgICAqIHF1ZXVlLnBlZWsoKTsgLy8gLT4gMwogICAgICAgICAqIGNvbnNvbGUubG9nKHF1ZXVlLnNpemUpOyAvLyAtPiAxCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBjbGFzcyBRdWV1ZSB7CiAgICAgICAgICogICAgIHNpemU6IG51bWJlcjsKICAgICAgICAgKiAgICAgY2xlYXIoKTogdm9pZDsKICAgICAgICAgKiAgICAgZW5xdWV1ZShpdGVtOiBhbnkpOiBudW1iZXI7CiAgICAgICAgICogICAgIGRlcXVldWUoKTogYW55OwogICAgICAgICAqICAgICBwZWVrKCk6IGFueTsKICAgICAgICAgKiAgICAgZm9yRWFjaChpdGVyYXRvcjogRnVuY3Rpb24sIGNvbnRleHQ/OiBhbnkpOiB2b2lkOwogICAgICAgICAqICAgICB0b0FycigpOiBhbnlbXTsKICAgICAgICAgKiB9CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIENsYXNzIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gQ2xhc3MoewogICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbiBRdWV1ZSgpIHsKICAgICAgICAgICAgICAgIHRoaXMuY2xlYXIoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgY2xlYXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy5faXRlbXMgPSBbXTsKICAgICAgICAgICAgICAgIHRoaXMuc2l6ZSA9IDA7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGVucXVldWU6IGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1zLnB1c2goaXRlbSk7CgogICAgICAgICAgICAgICAgcmV0dXJuICsrdGhpcy5zaXplOwogICAgICAgICAgICB9LAogICAgICAgICAgICBkZXF1ZXVlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaXplKSByZXR1cm47CiAgICAgICAgICAgICAgICB0aGlzLnNpemUtLTsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pdGVtcy5zaGlmdCgpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBwZWVrOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaXplKSByZXR1cm47CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNbMF07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGZvckVhY2g6IGZ1bmN0aW9uKGl0ZXJhdG9yLCBjdHgpIHsKICAgICAgICAgICAgICAgIGN0eCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gY3R4IDogdGhpczsKICAgICAgICAgICAgICAgIHZhciBpdGVtcyA9IHRoaXMuX2l0ZW1zOwoKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBzaXplID0gdGhpcy5zaXplOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChjdHgsIGl0ZW1zW2ldLCBpLCB0aGlzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgdG9BcnI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zLnNsaWNlKDApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBRdWlja0xydSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uUXVpY2tMcnUgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBMUlUgaW1wbGVtZW50YXRpb24gd2l0aG91dCBsaW5rZWQgbGlzdC4KICAgICAgICAgKgogICAgICAgICAqIEluc3BpcmVkIGJ5IHRoZSBbaGFzaGxydSBhbGdvcml0aG1dKGh0dHBzOi8vZ2l0aHViLmNvbS9kb21pbmljdGFyci9oYXNobHJ1I2FsZ29yaXRobSkuCiAgICAgICAgICoKICAgICAgICAgKiBUaGUgYXBpIGlzIHRoZSBzYW1lIGFzIExydSBtb2R1bGUuCiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBjYWNoZSA9IG5ldyBRdWlja0xydSg1MCk7CiAgICAgICAgICogY2FjaGUuc2V0KCd0ZXN0JywgJ2xpY2lhJyk7CiAgICAgICAgICogY2FjaGUuZ2V0KCd0ZXN0Jyk7IC8vIC0+ICdsaWNpYScKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGNsYXNzIFF1aWNrTHJ1IHsKICAgICAgICAgKiAgICAgY29uc3RydWN0b3IobWF4OiBudW1iZXIpOwogICAgICAgICAqICAgICBoYXMoa2V5OiBzdHJpbmcpOiBib29sZWFuOwogICAgICAgICAqICAgICByZW1vdmUoa2V5OiBzdHJpbmcpOiB2b2lkOwogICAgICAgICAqICAgICBnZXQoa2V5OiBzdHJpbmcpOiBhbnk7CiAgICAgICAgICogICAgIHNldChrZXk6IHN0cmluZywgdmFsOiBhbnkpOiB2b2lkOwogICAgICAgICAqICAgICBjbGVhcigpOiB2b2lkOwogICAgICAgICAqIH0KICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNVbmRlZiBDbGFzcyAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IENsYXNzKHsKICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gUXVpY2tMcnUobWF4KSB7CiAgICAgICAgICAgICAgICB0aGlzLl9tYXggPSBtYXg7CiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZSA9IHt9OwogICAgICAgICAgICAgICAgdGhpcy5fb2xkQ2FjaGUgPSB7fTsKICAgICAgICAgICAgICAgIHRoaXMuX3NpemUgPSAwOwogICAgICAgICAgICB9LAogICAgICAgICAgICBoYXM6IGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICAgICAgcmV0dXJuICFpc1VuZGVmKHRoaXMuX2NhY2hlW2tleV0pIHx8ICFpc1VuZGVmKHRoaXMuX29sZENhY2hlW2tleV0pOwogICAgICAgICAgICB9LAogICAgICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmKHRoaXMuX2NhY2hlW2tleV0pKSB0aGlzLl9jYWNoZVtrZXldID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmKHRoaXMuX29sZENhY2hlW2tleV0pKSB0aGlzLl9vbGRDYWNoZVtrZXldID0gdW5kZWZpbmVkOwogICAgICAgICAgICB9LAogICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmKHRoaXMuX2NhY2hlW2tleV0pKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlW2tleV07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMuX29sZENhY2hlW2tleV07CgogICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmKHZhbCkpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGUoa2V5LCB2YWwpOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKGtleSwgdmFsKSB7CiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWYodGhpcy5fY2FjaGVba2V5XSkpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZVtrZXldID0gdmFsOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGUoa2V5LCB2YWwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBjbGVhcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZSA9IHt9OwogICAgICAgICAgICAgICAgdGhpcy5fb2xkQ2FjaGUgPSB7fTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX3VwZGF0ZTogZnVuY3Rpb24oa2V5LCB2YWwpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlW2tleV0gPSB2YWw7CiAgICAgICAgICAgICAgICB0aGlzLl9zaXplKys7CgogICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NpemUgPiB0aGlzLl9tYXgpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaXplID0gMDsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbGRDYWNoZSA9IHRoaXMuX2NhY2hlOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlID0ge307CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN0YWNrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBTdGFjayA9IF8uU3RhY2sgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBTdGFjayBkYXRhIHN0cnVjdHVyZS4KICAgICAgICAgKgogICAgICAgICAqICMjIyBzaXplCiAgICAgICAgICoKICAgICAgICAgKiBTdGFjayBzaXplLgogICAgICAgICAqCiAgICAgICAgICogIyMjIGNsZWFyCiAgICAgICAgICoKICAgICAgICAgKiBDbGVhciB0aGUgc3RhY2suCiAgICAgICAgICoKICAgICAgICAgKiAjIyMgcHVzaAogICAgICAgICAqCiAgICAgICAgICogQWRkIGFuIGl0ZW0gdG8gdGhlIHN0YWNrLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS18CiAgICAgICAgICogfGl0ZW0gIHxJdGVtIHRvIGFkZCB8CiAgICAgICAgICogfHJldHVybnxDdXJyZW50IHNpemV8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgcG9wCiAgICAgICAgICoKICAgICAgICAgKiBHZXQgdGhlIGxhc3QgaXRlbSBvZiB0aGUgc3RhY2suCiAgICAgICAgICoKICAgICAgICAgKiAjIyMgcGVlawogICAgICAgICAqCiAgICAgICAgICogR2V0IHRoZSBsYXN0IGl0ZW0gd2l0aG91dCByZW1vdmluZyBpdC4KICAgICAgICAgKgogICAgICAgICAqICMjIyBmb3JFYWNoCiAgICAgICAgICoKICAgICAgICAgKiBJdGVyYXRlIG92ZXIgdGhlIHN0YWNrLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8aXRlcmF0b3J8RnVuY3Rpb24gaW52b2tlZCBpdGVyYXRpb258CiAgICAgICAgICogfGN0eCAgICAgfEZ1bmN0aW9uIGNvbnRleHQgICAgICAgICAgfAogICAgICAgICAqCiAgICAgICAgICogIyMjIHRvQXJyCiAgICAgICAgICoKICAgICAgICAgKiBDb252ZXJ0IHRoZSBzdGFjayB0byBhIEphdmFTY3JpcHQgYXJyYXkuCiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpOwogICAgICAgICAqCiAgICAgICAgICogc3RhY2sucHVzaCgyKTsgLy8gLT4gMQogICAgICAgICAqIHN0YWNrLnB1c2goMyk7IC8vIC0+IDIKICAgICAgICAgKiBzdGFjay5wb3AoKTsgLy8gLT4gMwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgY2xhc3MgU3RhY2sgewogICAgICAgICAqICAgICBzaXplOiBudW1iZXI7CiAgICAgICAgICogICAgIGNsZWFyKCk6IHZvaWQ7CiAgICAgICAgICogICAgIHB1c2goaXRlbTogYW55KTogbnVtYmVyOwogICAgICAgICAqICAgICBwb3AoKTogYW55OwogICAgICAgICAqICAgICBwZWVrKCk6IGFueTsKICAgICAgICAgKiAgICAgZm9yRWFjaChpdGVyYXRvcjogRnVuY3Rpb24sIGNvbnRleHQ/OiBhbnkpOiB2b2lkOwogICAgICAgICAqICAgICB0b0FycigpOiBhbnlbXTsKICAgICAgICAgKiB9CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIENsYXNzIHJldmVyc2UgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBDbGFzcyh7CiAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uIFN0YWNrKCkgewogICAgICAgICAgICAgICAgdGhpcy5jbGVhcigpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBjbGVhcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9pdGVtcyA9IFtdOwogICAgICAgICAgICAgICAgdGhpcy5zaXplID0gMDsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24oaXRlbSkgewogICAgICAgICAgICAgICAgdGhpcy5faXRlbXMucHVzaChpdGVtKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gKyt0aGlzLnNpemU7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHBvcDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2l6ZSkgcmV0dXJuOwogICAgICAgICAgICAgICAgdGhpcy5zaXplLS07CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faXRlbXMucG9wKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHBlZWs6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zW3RoaXMuc2l6ZSAtIDFdOwogICAgICAgICAgICB9LAogICAgICAgICAgICBmb3JFYWNoOiBmdW5jdGlvbihpdGVyYXRvciwgY3R4KSB7CiAgICAgICAgICAgICAgICBjdHggPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGN0eCA6IHRoaXM7CiAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSB0aGlzLl9pdGVtczsKCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5zaXplIC0gMSwgaiA9IDA7IGkgPj0gMDsgaS0tLCBqKyspIHsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5jYWxsKGN0eCwgaXRlbXNbaV0sIGosIHRoaXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB0b0FycjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcmV2ZXJzZSh0aGlzLl9pdGVtcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFZhbGlkYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uVmFsaWRhdG9yID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogT2JqZWN0IHZhbHVlcyB2YWxpZGF0aW9uLgogICAgICAgICAqCiAgICAgICAgICogIyMjIGNvbnN0cnVjdG9yCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgIHxEZXNjICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxvcHRpb25zfFZhbGlkYXRpb24gY29uZmlndXJhdGlvbnwKICAgICAgICAgKgogICAgICAgICAqICMjIyB2YWxpZGF0ZQogICAgICAgICAqCiAgICAgICAgICogVmFsaWRhdGUgb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxvYmogICB8T2JqZWN0IHRvIHZhbGlkYXRlICAgICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxWYWxpZGF0aW9uIHJlc3VsdCwgdHJ1ZSBtZWFucyBva3wKICAgICAgICAgKgogICAgICAgICAqICMjIyBhZGRQbHVnaW4KICAgICAgICAgKgogICAgICAgICAqIFtzdGF0aWNdIEFkZCBwbHVnaW4uCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8bmFtZSAgfFBsdWdpbiBuYW1lICAgICAgIHwKICAgICAgICAgKiB8cGx1Z2lufFZhbGlkYXRpb24gaGFuZGxlcnwKICAgICAgICAgKgogICAgICAgICAqICMjIyBEZWZhdWx0IFBsdWdpbnMKICAgICAgICAgKgogICAgICAgICAqIFJlcXVpcmVkLCBudW1iZXIsIGJvb2xlYW4sIHN0cmluZyBhbmQgcmVnZXhwLgogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogVmFsaWRhdG9yLmFkZFBsdWdpbignY3VzdG9tJywgZnVuY3Rpb24gKHZhbCwga2V5LCBjb25maWcpIHsKICAgICAgICAgKiAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbC5sZW5ndGggPT09IDUpIHJldHVybiB0cnVlOwogICAgICAgICAqCiAgICAgICAgICogICAgIHJldHVybiBrZXkgKyAnIHNob3VsZCBiZSBhIHN0cmluZyB3aXRoIGxlbmd0aCA1JzsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBjb25zdCB2YWxpZGF0b3IgPSBuZXcgVmFsaWRhdG9yKHsKICAgICAgICAgKiAgICAgJ3Rlc3QnOiB7CiAgICAgICAgICogICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgKiAgICAgICAgIGN1c3RvbTogdHJ1ZQogICAgICAgICAqICAgICB9CiAgICAgICAgICogfSk7CiAgICAgICAgICogdmFsaWRhdG9yLnZhbGlkYXRlKHt9KTsgLy8gLT4gJ3Rlc3QgaXMgcmVxdWlyZWQnCiAgICAgICAgICogdmFsaWRhdG9yLnZhbGlkYXRlKHt0ZXN0OiAxfSk7IC8vIC0+ICd0ZXN0IHNob3VsZCBiZSBhIHN0cmluZyB3aXRoIGxlbmd0aCA1JzsKICAgICAgICAgKiB2YWxpZGF0b3IudmFsaWRhdGUoe3Rlc3Q6ICdsaWNpYSd9KTsgLy8gLT4gdHJ1ZQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgY2xhc3MgVmFsaWRhdG9yIHsKICAgICAgICAgKiAgICAgY29uc3RydWN0b3Iob3B0aW9uczogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pOwogICAgICAgICAqICAgICB2YWxpZGF0ZShvYmplY3Q6IGFueSk6IHN0cmluZyB8IGJvb2xlYW47CiAgICAgICAgICogICAgIHN0YXRpYyBwbHVnaW5zOiBhbnk7CiAgICAgICAgICogICAgIHN0YXRpYyBhZGRQbHVnaW4obmFtZTogc3RyaW5nLCBwbHVnaW46IEZ1bmN0aW9uKTogdm9pZDsKICAgICAgICAgKiB9CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIENsYXNzIGtleXMgc2FmZUdldCBpc0ZuIGlzVW5kZWYgaXNOdW0gaXNTdHIgaXNCb29sIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gQ2xhc3MoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ1ZhbGlkYXRvcicsCiAgICAgICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3B0S2V5cyA9IGtleXMob3B0aW9ucyk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgdmFsaWRhdGU6IGZ1bmN0aW9uKG9iaikgewogICAgICAgICAgICAgICAgICAgIG9iaiA9IG9iaiB8fCB7fTsKICAgICAgICAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHRoaXMuX29wdGlvbnM7CiAgICAgICAgICAgICAgICAgICAgdmFyIG9iaktleXMgPSB0aGlzLl9vcHRLZXlzOwoKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gb2JqS2V5cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gb2JqS2V5c1tpXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl92YWxpZGF0ZVZhbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVHZXQob2JqLCBrZXkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1trZXldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5CiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgX3ZhbGlkYXRlVmFsOiBmdW5jdGlvbih2YWwsIHJ1bGVzLCBvYmpLZXkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcGx1Z2lucyA9IGV4cG9ydHMucGx1Z2luczsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNGbihydWxlcykpIHJldHVybiBydWxlcyh2YWwpOwogICAgICAgICAgICAgICAgICAgIHZhciBydWxlS2V5cyA9IGtleXMocnVsZXMpOwoKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcnVsZUtleXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IHJ1bGVLZXlzW2ldOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29uZmlnID0gcnVsZXNba2V5XTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0ZuKGNvbmZpZykpIHJlc3VsdCA9IGNvbmZpZyh2YWwsIG9iaktleSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwbHVnaW4gPSBwbHVnaW5zW2tleV07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbHVnaW4pIHJlc3VsdCA9IHBsdWdpbih2YWwsIG9iaktleSwgY29uZmlnKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwbHVnaW5zOiB7CiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZ1bmN0aW9uKHZhbCwga2V5LCBjb25maWcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBpc1VuZGVmKHZhbCkpIHJldHVybiBrZXkgKyAnIGlzIHJlcXVpcmVkJzsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBudW1iZXI6IGZ1bmN0aW9uKHZhbCwga2V5LCBjb25maWcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiAhaXNVbmRlZih2YWwpICYmICFpc051bSh2YWwpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleSArICcgc2hvdWxkIGJlIGEgbnVtYmVyJzsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBib29sZWFuOiBmdW5jdGlvbih2YWwsIGtleSwgY29uZmlnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcgJiYgIWlzVW5kZWYodmFsKSAmJiAhaXNCb29sKHZhbCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5ICsgJyBzaG91bGQgYmUgYSBib29sZWFuJzsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBzdHJpbmc6IGZ1bmN0aW9uKHZhbCwga2V5LCBjb25maWcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiAhaXNVbmRlZih2YWwpICYmICFpc1N0cih2YWwpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleSArICcgc2hvdWxkIGJlIGEgc3RyaW5nJzsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICByZWdleHA6IGZ1bmN0aW9uKHZhbCwga2V5LCBjb25maWcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3RyKHZhbCkgJiYgIWNvbmZpZy50ZXN0KHZhbCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSArICcgc2hvdWxkIG1hdGNoIGdpdmVuIHJlZ2V4cCAnICsgY29uZmlnLnRvU3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBhZGRQbHVnaW46IGZ1bmN0aW9uKG5hbWUsIHBsdWdpbikgewogICAgICAgICAgICAgICAgICAgIGV4cG9ydHMucGx1Z2luc1tuYW1lXSA9IHBsdWdpbjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICk7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBKc29uVHJhbnNmb3JtZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLkpzb25UcmFuc2Zvcm1lciA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEpzb24gdG8ganNvbiB0cmFuc2Zvcm1lci4KICAgICAgICAgKgogICAgICAgICAqICMjIyBjb25zdHJ1Y3RvcgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICB8RGVzYyAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxkYXRhPXt9fEpzb24gb2JqZWN0IHRvIG1hbmlwdWxhdGV8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgc2V0CiAgICAgICAgICoKICAgICAgICAgKiBTZXQgb2JqZWN0IHZhbHVlLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWV8RGVzYyAgICAgICAgfAogICAgICAgICAqIHwtLS0tfC0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8a2V5IHxPYmplY3Qga2V5ICB8CiAgICAgICAgICogfHZhbCB8VmFsdWUgdG8gc2V0fAogICAgICAgICAqCiAgICAgICAgICogSWYga2V5IGlzIG5vdCBnaXZlbiwgdGhlIHdob2xlIHNvdXJjZSBvYmplY3QgaXMgcmVwbGFjZWQgYnkgdmFsLgogICAgICAgICAqCiAgICAgICAgICogIyMjIGdldAogICAgICAgICAqCiAgICAgICAgICogR2V0IG9iamVjdCB2YWx1ZS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGtleSAgIHxPYmplY3Qga2V5ICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58U3BlY2lmaWVkIHZhbHVlIG9yIHdob2xlIG9iamVjdHwKICAgICAgICAgKgogICAgICAgICAqICMjIyByZW1vdmUKICAgICAgICAgKgogICAgICAgICAqIFJlbW92ZSBvYmplY3QgdmFsdWUuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZXxEZXNjICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxrZXkgfE9iamVjdCBrZXlzIHRvIHJlbW92ZXwKICAgICAgICAgKgogICAgICAgICAqICMjIyBtYXAKICAgICAgICAgKgogICAgICAgICAqIFNob3J0Y3V0IGZvciBhcnJheSBtYXAuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZXxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxmcm9tfEZyb20gb2JqZWN0IHBhdGggICAgICAgICAgICAgIHwKICAgICAgICAgKiB8dG8gIHxUYXJnZXQgb2JqZWN0IHBhdGggICAgICAgICAgICB8CiAgICAgICAgICogfGZuICB8RnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9ufAogICAgICAgICAqCiAgICAgICAgICogIyMjIGZpbHRlcgogICAgICAgICAqCiAgICAgICAgICogU2hvcnRjdXQgZm9yIGFycmF5IGZpbHRlci4KICAgICAgICAgKgogICAgICAgICAqICMjIyBjb21wdXRlCiAgICAgICAgICoKICAgICAgICAgKiBDb21wdXRlIHZhbHVlIGZyb20gc2V2ZXJhbCBvYmplY3QgdmFsdWVzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWV8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGZyb218U291cmNlIHZhbHVlcyAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHRvICB8VGFyZ2V0IG9iamVjdCBwYXRoICAgICAgICAgICAgICB8CiAgICAgICAgICogfGZuICB8RnVuY3Rpb24gdG8gY29tcHV0ZSB0YXJnZXQgdmFsdWV8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBkYXRhID0gbmV3IEpzb25UcmFuc2Zvcm1lcih7CiAgICAgICAgICogICAgIGJvb2tzOiBbewogICAgICAgICAqICAgICAgICAgdGl0bGU6ICdCb29rIDEnLAogICAgICAgICAqICAgICAgICAgcHJpY2U6IDUKICAgICAgICAgKiAgICAgfSwgewogICAgICAgICAqICAgICAgICAgdGl0bGU6ICdCb29rIDInLAogICAgICAgICAqICAgICAgICAgcHJpY2U6IDEwCiAgICAgICAgICogICAgIH1dLAogICAgICAgICAqICAgICBhdXRob3I6IHsKICAgICAgICAgKiAgICAgICAgIGxhc3RuYW1lOiAnU3UnLAogICAgICAgICAqICAgICAgICAgZmlyc3RuYW1lOiAnUmVkSG9vZCcKICAgICAgICAgKiAgICAgfQogICAgICAgICAqIH0pOwogICAgICAgICAqIGRhdGEuZmlsdGVyKCdib29rcycsIGZ1bmN0aW9uIChib29rKSB7IHJldHVybiBib29rLnByaWNlID4gNSB9KTsKICAgICAgICAgKiBkYXRhLmNvbXB1dGUoJ2F1dGhvcicsIGZ1bmN0aW9uIChhdXRob3IpIHsgcmV0dXJuIGF1dGhvci5maXJzdG5hbWUgKyBhdXRob3IubGFzdG5hbWUgfSk7CiAgICAgICAgICogZGF0YS5zZXQoJ2NvdW50JywgZGF0YS5nZXQoJ2Jvb2tzJykubGVuZ3RoKTsKICAgICAgICAgKiBkYXRhLmdldCgpOyAvLyAtPiB7Ym9va3M6IFt7dGl0bGU6ICdCb29rIDInLCBwcmljZTogMTB9XSwgYXV0aG9yOiAnUmVkSG9vZFN1JywgY291bnQ6IDF9CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBjbGFzcyBKc29uVHJhbnNmb3JtZXIgewogICAgICAgICAqICAgICBjb25zdHJ1Y3RvcihkYXRhOiBhbnkpOwogICAgICAgICAqICAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbDogYW55KTogSnNvblRyYW5zZm9ybWVyOwogICAgICAgICAqICAgICBnZXQoa2V5Pzogc3RyaW5nKTogYW55OwogICAgICAgICAqICAgICBtYXAoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nLCBmbjogRnVuY3Rpb24pOiBKc29uVHJhbnNmb3JtZXI7CiAgICAgICAgICogICAgIG1hcChmcm9tOiBzdHJpbmcsIGZuOiBGdW5jdGlvbik6IEpzb25UcmFuc2Zvcm1lcjsKICAgICAgICAgKiAgICAgZmlsdGVyKGZyb206IHN0cmluZywgdG86IHN0cmluZywgZm46IEZ1bmN0aW9uKTogSnNvblRyYW5zZm9ybWVyOwogICAgICAgICAqICAgICBmaWx0ZXIoZnJvbTogc3RyaW5nLCBmbjogRnVuY3Rpb24pOiBKc29uVHJhbnNmb3JtZXI7CiAgICAgICAgICogICAgIHJlbW92ZShrZXlzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IEpzb25UcmFuc2Zvcm1lcjsKICAgICAgICAgKiAgICAgY29tcHV0ZShmcm9tOiBzdHJpbmcgfCBzdHJpbmdbXSwgdG86IHN0cmluZywgZm46IEZ1bmN0aW9uKTogSnNvblRyYW5zZm9ybWVyOwogICAgICAgICAqICAgICBjb21wdXRlKGZyb206IHN0cmluZywgZm46IEZ1bmN0aW9uKTogSnNvblRyYW5zZm9ybWVyOwogICAgICAgICAqICAgICB0b1N0cmluZygpOiBzdHJpbmc7CiAgICAgICAgICogfQogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBDbGFzcyBzYWZlU2V0IHNhZmVHZXQgbWFwIGZpbHRlciBpc0ZuIHNhZmVEZWwgdG9BcnIgZWFjaCAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IENsYXNzKHsKICAgICAgICAgICAgY2xhc3NOYW1lOiAnSnNvblRyYW5zZm9ybWVyJywKICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZGF0YSkgewogICAgICAgICAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGEgfHwge307CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNldDogZnVuY3Rpb24oa2V5LCB2YWwpIHsKICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YSA9IGtleTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzYWZlU2V0KHRoaXMuX2RhdGEsIGtleSwgdmFsKTsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICB9LAogICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICAgICAgaWYgKGtleSA9PSBudWxsKSByZXR1cm4gdGhpcy5fZGF0YTsKICAgICAgICAgICAgICAgIHJldHVybiBzYWZlR2V0KHRoaXMuX2RhdGEsIGtleSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG1hcDogZnVuY3Rpb24oZnJvbSwgdG8sIGZuKSB7CiAgICAgICAgICAgICAgICBpZiAoaXNGbihmcm9tKSkgcmV0dXJuIHRoaXMuc2V0KG1hcCh0aGlzLl9kYXRhLCBmcm9tLCB0aGlzKSk7CgogICAgICAgICAgICAgICAgaWYgKGlzRm4odG8pKSB7CiAgICAgICAgICAgICAgICAgICAgZm4gPSB0bzsKICAgICAgICAgICAgICAgICAgICB0byA9IGZyb207CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0KHRvLCBtYXAodGhpcy5nZXQoZnJvbSksIGZuLCB0aGlzKSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24oZnJvbSwgdG8sIGZuKSB7CiAgICAgICAgICAgICAgICBpZiAoaXNGbihmcm9tKSkgcmV0dXJuIHRoaXMuc2V0KGZpbHRlcih0aGlzLl9kYXRhLCBmcm9tLCB0aGlzKSk7CgogICAgICAgICAgICAgICAgaWYgKGlzRm4odG8pKSB7CiAgICAgICAgICAgICAgICAgICAgZm4gPSB0bzsKICAgICAgICAgICAgICAgICAgICB0byA9IGZyb207CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0KHRvLCBmaWx0ZXIodGhpcy5nZXQoZnJvbSksIGZuLCB0aGlzKSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24oa2V5cykgewogICAgICAgICAgICAgICAga2V5cyA9IHRvQXJyKGtleXMpOwogICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhOwogICAgICAgICAgICAgICAgZWFjaChrZXlzLCBmdW5jdGlvbihrZXkpIHsKICAgICAgICAgICAgICAgICAgICBzYWZlRGVsKGRhdGEsIGtleSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICB9LAogICAgICAgICAgICBjb21wdXRlOiBmdW5jdGlvbihmcm9tLCB0bywgZm4pIHsKICAgICAgICAgICAgICAgIGlmIChpc0ZuKGZyb20pKSByZXR1cm4gdGhpcy5zZXQoZnJvbS5jYWxsKHRoaXMsIHRoaXMuX2RhdGEpKTsKICAgICAgICAgICAgICAgIGlmIChpc0ZuKHRvKSkgcmV0dXJuIHRoaXMuc2V0KGZyb20sIHRvLmNhbGwodGhpcywgdGhpcy5nZXQoZnJvbSkpKTsKICAgICAgICAgICAgICAgIGZyb20gPSBtYXAoCiAgICAgICAgICAgICAgICAgICAgdG9BcnIoZnJvbSksCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oa2V5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzYWZlR2V0KHRoaXMuX2RhdGEsIGtleSk7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB0aGlzCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0KHRvLCBmbi5hcHBseSh0aGlzLCBmcm9tKSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLl9kYXRhKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYWJicmV2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5hYmJyZXYgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDYWxjdWxhdGUgdGhlIHNldCBvZiB1bmlxdWUgYWJicmV2aWF0aW9ucyBmb3IgYSBnaXZlbiBzZXQgb2Ygc3RyaW5ncy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfC4uLmFycnxMaXN0IG9mIG5hbWVzICAgfAogICAgICAgICAqIHxyZXR1cm58QWJicmV2aWF0aW9uIG1hcHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGFiYnJldignbGluYScsICdsdW5hJyk7CiAgICAgICAgICogLy8gLT4ge2xpOiAnbGluYScsIGxpbjogJ2xpbmEnLCBsaW5hOiAnbGluYScsIGx1OiAnbHVuYScsIGx1bjogJ2x1bmEnLCBsdW5hOiAnbHVuYSd9CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhYmJyZXYoCiAgICAgICAgICogICAgIC4uLmFycjogc3RyaW5nW10KICAgICAgICAgKiApOiB7IFthYmJyZXZpYXRpb246IHN0cmluZ106IHN0cmluZyB9OwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiB0b0FyciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgYXJncyA9IHRvQXJyKGFyZ3VtZW50cyk7CiAgICAgICAgICAgIGFyZ3MgPSBhcmdzLnNvcnQobmFtZVNvcnQpOwogICAgICAgICAgICB2YXIgcmV0ID0ge307CiAgICAgICAgICAgIHZhciBpZGxlTWFwID0ge307CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJncy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgdmFyIHN0ciA9IGFyZ3NbaV07CiAgICAgICAgICAgICAgICB2YXIgbmV4dFN0ciA9IGFyZ3NbaSArIDFdIHx8ICcnOwogICAgICAgICAgICAgICAgaWYgKHN0ciA9PT0gbmV4dFN0cikgY29udGludWU7CiAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBmYWxzZSwKICAgICAgICAgICAgICAgICAgICBhYmJyZXYgPSAnJzsKCiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgc3RyTGVuID0gc3RyLmxlbmd0aDsgaiA8IHN0ckxlbjsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgYWJicmV2ICs9IHN0cltqXTsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0ICYmIChzdHJbal0gIT09IG5leHRTdHJbal0gfHwgaiA9PT0gc3RyTGVuIC0gMSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFydCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZGxlTWFwW2FiYnJldl0gPSBzdHI7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghcmV0W2FiYnJldl0gJiYgIWlkbGVNYXBbYWJicmV2XSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXRbYWJicmV2XSA9IHN0cjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfTsKCiAgICAgICAgZnVuY3Rpb24gbmFtZVNvcnQoYSwgYikgewogICAgICAgICAgICByZXR1cm4gYSA9PT0gYiA/IDAgOiBhID4gYiA/IDEgOiAtMTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjb25jYXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmNvbmNhdCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENvbmNhdCBtdWx0aXBsZSBhcnJheXMgaW50byBhIHNpbmdsZSBhcnJheS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHwuLi5hcnJ8QXJyYXlzIHRvIGNvbmNhdCAgfAogICAgICAgICAqIHxyZXR1cm58Q29uY2F0ZW5hdGVkIGFycmF5fAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uY2F0KFsxLCAyXSwgWzNdLCBbNCwgNV0pOyAvLyAtPiBbMSwgMiwgMywgNCwgNV0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNvbmNhdCguLi5hcmdzOiBBcnJheTxhbnlbXT4pOiBhbnlbXTsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogdG9BcnIgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGFyZ3MgPSB0b0Fycihhcmd1bWVudHMpOwogICAgICAgICAgICB2YXIgcmV0ID0gW107CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJncy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgcmV0ID0gcmV0LmNvbmNhdCh0b0FycihhcmdzW2ldKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGN1cnJ5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5jdXJyeSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEZ1bmN0aW9uIGN1cnJ5aW5nLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxmbiAgICB8RnVuY3Rpb24gdG8gY3VycnkgICB8CiAgICAgICAgICogfHJldHVybnxOZXcgY3VycmllZCBmdW5jdGlvbnwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnN0IGFkZCA9IGN1cnJ5KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhICsgYiB9KTsKICAgICAgICAgKiBjb25zdCBhZGQxID0gYWRkKDEpOwogICAgICAgICAqIGFkZDEoMik7IC8vIC0+IDMKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGN1cnJ5KGZuOiBGdW5jdGlvbik6IEZ1bmN0aW9uOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiB0b0FyciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGZuKSB7CiAgICAgICAgICAgIHZhciBsZW4gPSBmbi5sZW5ndGg7CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjdXJyaWVkRm4oKSB7CiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IHRvQXJyKGFyZ3VtZW50cyk7CgogICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgbGVuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmllZEZuLmFwcGx5KG51bGwsIGFyZ3MuY29uY2F0KHRvQXJyKGFyZ3VtZW50cykpKTsKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmdzKTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBkZWZpbmUgPSBfLmRlZmluZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIERlZmluZSBhIG1vZHVsZSwgc2hvdWxkIGJlIHVzZWQgYWxvbmcgd2l0aCB1c2UuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICB8RGVzYyAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLXwtLS0tLS0tLS0tLS18CiAgICAgICAgICogfG5hbWUgICAgfE1vZHVsZSBuYW1lIHwKICAgICAgICAgKiB8cmVxdWlyZXN8RGVwZW5kZW5jaWVzfAogICAgICAgICAqIHxtZXRob2QgIHxNb2R1bGUgYm9keSB8CiAgICAgICAgICoKICAgICAgICAgKiBUaGUgbW9kdWxlIHdvbid0IGJlIGV4ZWN1dGVkIHVudGlsIGl0J3MgdXNlZCBieSB1c2UgZnVuY3Rpb24uCiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBkZWZpbmUoJ0EnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICogICAgIHJldHVybiAnQSc7CiAgICAgICAgICogfSk7CiAgICAgICAgICogZGVmaW5lKCdCJywgWydBJ10sIGZ1bmN0aW9uIChBKSB7CiAgICAgICAgICogICAgIHJldHVybiAnQicgKyBBOwogICAgICAgICAqIH0pOwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZGVmaW5lKG5hbWU6IHN0cmluZywgcmVxdWlyZXM6IHN0cmluZ1tdLCBtZXRob2Q6IEZ1bmN0aW9uKTogdm9pZDsKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBkZWZpbmUobmFtZTogc3RyaW5nLCBtZXRob2Q6IEZ1bmN0aW9uKTogdm9pZDsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogdG9BcnIgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihuYW1lLCByZXF1aXJlcywgbWV0aG9kKSB7CiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7CiAgICAgICAgICAgICAgICBtZXRob2QgPSByZXF1aXJlczsKICAgICAgICAgICAgICAgIHJlcXVpcmVzID0gW107CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGRlZmluZShuYW1lLCByZXF1aXJlcywgbWV0aG9kKTsKICAgICAgICB9OwoKICAgICAgICB2YXIgbW9kdWxlcyA9IChleHBvcnRzLl9tb2R1bGVzID0ge30pOwoKICAgICAgICBmdW5jdGlvbiBkZWZpbmUobmFtZSwgcmVxdWlyZXMsIG1ldGhvZCkgewogICAgICAgICAgICBtb2R1bGVzW25hbWVdID0gewogICAgICAgICAgICAgICAgcmVxdWlyZXM6IHRvQXJyKHJlcXVpcmVzKSwKICAgICAgICAgICAgICAgIGJvZHk6IG1ldGhvZAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGludGVyc2VjdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uaW50ZXJzZWN0ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ29tcHV0ZSB0aGUgbGlzdCBvZiB2YWx1ZXMgdGhhdCBhcmUgdGhlIGludGVyc2VjdGlvbiBvZiBhbGwgdGhlIGFycmF5cy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHwuLi5hcnJ8QXJyYXlzIHRvIGluc3BlY3QgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58TmV3IGFycmF5IG9mIGluc3BlY3RpbmcgdmFsdWVzfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogaW50ZXJzZWN0KFsxLCAyLCAzLCA0XSwgWzIsIDEsIDEwXSwgWzIsIDFdKTsgLy8gLT4gWzEsIDJdCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpbnRlcnNlY3QoLi4uYXJyOiBBcnJheTxhbnlbXT4pOiBhbnlbXTsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogY29udGFpbiB0b0FyciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGFycikgewogICAgICAgICAgICB2YXIgcmV0ID0gW107CiAgICAgICAgICAgIHZhciBhcmdzID0gdG9BcnIoYXJndW1lbnRzKTsKICAgICAgICAgICAgdmFyIGFyZ3NMZW4gPSBhcmdzLmxlbmd0aDsKCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBpdGVtID0gYXJyW2ldOwogICAgICAgICAgICAgICAgaWYgKGNvbnRhaW4ocmV0LCBpdGVtKSkgY29udGludWU7CiAgICAgICAgICAgICAgICB2YXIgaiA9IDE7CgogICAgICAgICAgICAgICAgZm9yICg7IGogPCBhcmdzTGVuOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRhaW4oYXJnc1tqXSwgaXRlbSkpIGJyZWFrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChqID09PSBhcmdzTGVuKSByZXQucHVzaChpdGVtKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFwT2JqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBtYXBPYmogPSBfLm1hcE9iaiA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIE1hcCBmb3Igb2JqZWN0cy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8b2JqZWN0ICB8T2JqZWN0IHRvIGl0ZXJhdGUgb3ZlciAgICAgICAgfAogICAgICAgICAqIHxpdGVyYXRvcnxGdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb258CiAgICAgICAgICogfGNvbnRleHQgfEZ1bmN0aW9uIGNvbnRleHQgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJuICB8TmV3IG1hcHBlZCBvYmplY3QgICAgICAgICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogbWFwT2JqKHthOiAxLCBiOiAyfSwgZnVuY3Rpb24gKHZhbCwga2V5KSB7IHJldHVybiB2YWwgKyAxIH0pOyAvLyAtPiB7YTogMiwgYjogM30KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG1hcE9iajxULCBUUmVzdWx0PigKICAgICAgICAgKiAgICAgb2JqZWN0OiB0eXBlcy5EaWN0aW9uYXJ5PFQ+LAogICAgICAgICAqICAgICBpdGVyYXRvcjogdHlwZXMuT2JqZWN0SXRlcmF0b3I8VCwgVFJlc3VsdD4sCiAgICAgICAgICogICAgIGNvbnRleHQ/OiBhbnkKICAgICAgICAgKiApOiB0eXBlcy5EaWN0aW9uYXJ5PFRSZXN1bHQ+OwogICAgICAgICAqLwoKICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBzYWZlQ2Iga2V5cyB0eXBlcyAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0b3IsIGN0eCkgewogICAgICAgICAgICBpdGVyYXRvciA9IHNhZmVDYihpdGVyYXRvciwgY3R4KTsKCiAgICAgICAgICAgIHZhciBfa2V5cyA9IGtleXMob2JqKTsKCiAgICAgICAgICAgIHZhciBsZW4gPSBfa2V5cy5sZW5ndGg7CiAgICAgICAgICAgIHZhciByZXQgPSB7fTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBjdXJLZXkgPSBfa2V5c1tpXTsKICAgICAgICAgICAgICAgIHJldFtjdXJLZXldID0gaXRlcmF0b3Iob2JqW2N1cktleV0sIGN1cktleSwgb2JqKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY2xvbmVEZWVwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBjbG9uZURlZXAgPSBfLmNsb25lRGVlcCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFJlY3Vyc2l2ZWx5IGNsb25lIHZhbHVlLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx2YWwgICB8VmFsdWUgdG8gY2xvbmUgICB8CiAgICAgICAgICogfHJldHVybnxEZWVwIGNsb25lZCBWYWx1ZXwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnN0IG9iaiA9IFt7YTogMX0sIHthOiAyfV07CiAgICAgICAgICogY29uc3Qgb2JqMiA9IGNsb25lRGVlcChvYmopOwogICAgICAgICAqIGNvbnNvbGUubG9nKG9ialswXSA9PT0gb2JqMlsxXSk7IC8vIC0+IGZhbHNlCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjbG9uZURlZXA8VD4odmFsOiBUKTogVDsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNPYmogaXNGbiBpc0FyciBtYXBPYmogCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihvYmopIHsKICAgICAgICAgICAgaWYgKGlzQXJyKG9iaikpIHsKICAgICAgICAgICAgICAgIHJldHVybiBvYmoubWFwKGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBleHBvcnRzKHZhbCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGlzT2JqKG9iaikgJiYgIWlzRm4ob2JqKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG1hcE9iaihvYmosIGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBleHBvcnRzKHZhbCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZXh0ZW5kRGVlcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uZXh0ZW5kRGVlcCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFJlY3Vyc2l2ZSBvYmplY3QgZXh0ZW5kaW5nLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgICAgfERlc2MgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxkZXN0aW5hdGlvbnxEZXN0aW5hdGlvbiBvYmplY3R8CiAgICAgICAgICogfC4uLnNvdXJjZXMgfFNvdXJjZXMgb2JqZWN0cyAgIHwKICAgICAgICAgKiB8cmV0dXJuICAgICB8RGVzdGluYXRpb24gb2JqZWN0fAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogZXh0ZW5kRGVlcCh7CiAgICAgICAgICogICAgIG5hbWU6ICdSZWRIb29kJywKICAgICAgICAgKiAgICAgZmFtaWx5OiB7CiAgICAgICAgICogICAgICAgICBtb3RoZXI6ICdKYW5lJywKICAgICAgICAgKiAgICAgICAgIGZhdGhlcjogJ0phY2snCiAgICAgICAgICogICAgIH0KICAgICAgICAgKiB9LCB7CiAgICAgICAgICogICAgIGZhbWlseTogewogICAgICAgICAqICAgICAgICAgYnJvdGhlcjogJ0JydWNlJwogICAgICAgICAqICAgICB9CiAgICAgICAgICogfSk7CiAgICAgICAgICogLy8gLT4ge25hbWU6ICdSZWRIb29kJywgZmFtaWx5OiB7bW90aGVyOiAnSmFuZScsIGZhdGhlcjogJ0phY2snLCBicm90aGVyOiAnQnJ1Y2UnfX0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGV4dGVuZERlZXAoZGVzdGluYXRpb246IGFueSwgLi4uc291cmNlczogYW55W10pOiBhbnk7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlzUGxhaW5PYmogZWFjaCBjbG9uZURlZXAgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihvYmopIHsKICAgICAgICAgICAgdmFyIGkgPSAwOwogICAgICAgICAgICB2YXIgcmV0ID0gb2JqOwogICAgICAgICAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsKCiAgICAgICAgICAgIHdoaWxlICgrK2kgPCBsZW4pIHsKICAgICAgICAgICAgICAgIG9iaiA9IGFyZ3VtZW50c1tpXTsKCiAgICAgICAgICAgICAgICBpZiAoaXNQbGFpbk9iaihyZXQpICYmIGlzUGxhaW5PYmoob2JqKSkgewogICAgICAgICAgICAgICAgICAgIGVhY2gob2JqLCBmdW5jdGlvbih2YWwsIGtleSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJykgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICByZXRba2V5XSA9IGV4cG9ydHMocmV0W2tleV0sIG9ialtrZXldKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0ID0gY2xvbmVEZWVwKG9iaik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGh0bWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmh0bWwgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBIdG1sIHBhcnNlciBhbmQgc2VyaWFsaXplci4KICAgICAgICAgKgogICAgICAgICAqICMjIyBwYXJzZQogICAgICAgICAqCiAgICAgICAgICogUGFyc2UgaHRtbCBzdHJpbmcgaW50byBqcyBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxodG1sICB8SHRtbCBzdHJpbmcgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFBhcnNlZCBqcyBvYmplY3R8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgc3RyaW5naWZ5CiAgICAgICAgICoKICAgICAgICAgKiBTdHJpbmdpZnkgb2JqZWN0IGludG8gYW4gaHRtbCBzdHJpbmcuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx0cmVlICB8T2JqZWN0IHRvIHN0cmluZ2lmeXwKICAgICAgICAgKiB8cmV0dXJufEh0bWwgc3RyaW5nICAgICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb25zdCB0cmVlID0gaHRtbC5wYXJzZSgnPGRpdiBpZD0ibmFtZSI+bGljaWE8L2Rpdj4nKTsKICAgICAgICAgKiAvLyAtPiBbe3RhZzogJ2RpdicsIGF0dHJzOiB7aWQ6ICduYW1lJ30sIGNvbnRlbnQ6IFsnbGljaWEnXX1dCiAgICAgICAgICogaHRtbC5zdHJpbmdpZnkodHJlZSk7CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBjb25zdCBodG1sOiB7CiAgICAgICAgICogICAgIHBhcnNlKGh0bWw6IHN0cmluZyk6IGFueVtdOwogICAgICAgICAqICAgICBzdHJpbmdpZnkodHJlZTogYW55W10pOiBzdHJpbmc7CiAgICAgICAgICogfTsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogcGFyc2VIdG1sIFN0YWNrIGlzQXJyIGVhY2ggaXNTdHIgbWFwT2JqIAogICAgICAgICAqLwoKICAgICAgICBmdW5jdGlvbiBwYXJzZShodG1sKSB7CiAgICAgICAgICAgIHZhciByZXQgPSBbXTsKICAgICAgICAgICAgdmFyIHN0YWNrID0gbmV3IFN0YWNrKCk7CiAgICAgICAgICAgIHBhcnNlSHRtbChodG1sLCB7CiAgICAgICAgICAgICAgICBzdGFydDogZnVuY3Rpb24odGFnLCBhdHRycykgewogICAgICAgICAgICAgICAgICAgIGF0dHJzID0gbWFwT2JqKGF0dHJzLCBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZXNjYXBlUXVvdGUodmFsKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiB0YWcsCiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiBhdHRycwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGVuZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBzdGFjay5wb3AoKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFjay5zaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdE5vZGUgPSBzdGFjay5wZWVrKCk7CgogICAgICAgICAgICAgICAgICAgIGlmICghaXNBcnIobGFzdE5vZGUuY29udGVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE5vZGUuY29udGVudCA9IFtdOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbGFzdE5vZGUuY29udGVudC5wdXNoKG5vZGUpOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGNvbW1lbnQ6IGZ1bmN0aW9uKHRleHQpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgY29tbWVudCA9ICc8IS0tJy5jb25jYXQodGV4dCwgJy0tPicpOwogICAgICAgICAgICAgICAgICAgIHZhciBsYXN0Tm9kZSA9IHN0YWNrLnBlZWsoKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCFsYXN0Tm9kZSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaChjb21tZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCFsYXN0Tm9kZS5jb250ZW50KSBsYXN0Tm9kZS5jb250ZW50ID0gW107CiAgICAgICAgICAgICAgICAgICAgbGFzdE5vZGUuY29udGVudC5wdXNoKGNvbW1lbnQpOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uKHRleHQpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdE5vZGUgPSBzdGFjay5wZWVrKCk7CgogICAgICAgICAgICAgICAgICAgIGlmICghbGFzdE5vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2godGV4dCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICghbGFzdE5vZGUuY29udGVudCkgbGFzdE5vZGUuY29udGVudCA9IFtdOwogICAgICAgICAgICAgICAgICAgIGxhc3ROb2RlLmNvbnRlbnQucHVzaCh0ZXh0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBzdHJpbmdpZnkodHJlZSkgewogICAgICAgICAgICB2YXIgcmV0ID0gJyc7CgogICAgICAgICAgICBpZiAoaXNBcnIodHJlZSkpIHsKICAgICAgICAgICAgICAgIGVhY2godHJlZSwgZnVuY3Rpb24obm9kZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0ICs9IHN0cmluZ2lmeShub2RlKSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cih0cmVlKSkgewogICAgICAgICAgICAgICAgcmV0ID0gdHJlZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldCArPSAnPCcuY29uY2F0KHRyZWUudGFnKTsKICAgICAgICAgICAgICAgIGVhY2godHJlZS5hdHRycywgZnVuY3Rpb24odmFsLCBrZXkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldCArPSAnICcuY29uY2F0KGtleSwgJz0iJykuY29uY2F0KGVzY2FwZVF1b3RlKHZhbCksICciJykpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXQgKz0gJz4nOwogICAgICAgICAgICAgICAgaWYgKHRyZWUuY29udGVudCkgcmV0ICs9IHN0cmluZ2lmeSh0cmVlLmNvbnRlbnQpOwogICAgICAgICAgICAgICAgcmV0ICs9ICc8LycuY29uY2F0KHRyZWUudGFnLCAnPicpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH0KCiAgICAgICAgdmFyIHVuZXNjYXBlUXVvdGUgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8mcXVvdDsvZywgJyInKTsKICAgICAgICB9OwoKICAgICAgICB2YXIgZXNjYXBlUXVvdGUgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8iL2csICcmcXVvdDsnKTsKICAgICAgICB9OwoKICAgICAgICBleHBvcnRzID0gewogICAgICAgICAgICBwYXJzZTogcGFyc2UsCiAgICAgICAgICAgIHN0cmluZ2lmeTogc3RyaW5naWZ5CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlbW92ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgcmVtb3ZlID0gXy5yZW1vdmUgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBSZW1vdmUgYWxsIGVsZW1lbnRzIGZyb20gYXJyYXkgdGhhdCBwcmVkaWNhdGUgcmV0dXJucyB0cnV0aHkgZm9yIGFuZCByZXR1cm4gYW4gYXJyYXkgb2YgdGhlIHJlbW92ZWQgZWxlbWVudHMuCiAgICAgICAgICoKICAgICAgICAgKiBVbmxpa2UgZmlsdGVyLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGFycmF5LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxsaXN0ICAgIHxDb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3ZlciAgICAgICAgICB8CiAgICAgICAgICogfGl0ZXJhdG9yfEZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbiAgICAgIHwKICAgICAgICAgKiB8Y29udGV4dCB8UHJlZGljYXRlIGNvbnRleHQgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm4gIHxBcnJheSBvZiBhbGwgdmFsdWVzIHRoYXQgYXJlIHJlbW92ZWR8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBhcnIgPSBbMSwgMiwgMywgNCwgNV07CiAgICAgICAgICogY29uc3QgZXZlbnMgPSByZW1vdmUoYXJyLCBmdW5jdGlvbiAodmFsKSB7IHJldHVybiB2YWwgJSAyID09PSAwIH0pOwogICAgICAgICAqIGNvbnNvbGUubG9nKGFycik7IC8vIC0+IFsxLCAzLCA1XQogICAgICAgICAqIGNvbnNvbGUubG9nKGV2ZW5zKTsgLy8gLT4gWzIsIDRdCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByZW1vdmU8VCwgVFJlc3VsdD4oCiAgICAgICAgICogICAgIGxpc3Q6IHR5cGVzLkxpc3Q8VD4sCiAgICAgICAgICogICAgIGl0ZXJhdG9yOiB0eXBlcy5MaXN0SXRlcmF0b3I8VCwgYm9vbGVhbj4sCiAgICAgICAgICogICAgIGNvbnRleHQ/OiBhbnkKICAgICAgICAgKiApOiBUUmVzdWx0W107CiAgICAgICAgICovCgogICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHNhZmVDYiB0eXBlcyAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGFyciwgaXRlcmF0b3IsIGN0eCkgewogICAgICAgICAgICB2YXIgcmV0ID0gW107CiAgICAgICAgICAgIGl0ZXJhdG9yID0gc2FmZUNiKGl0ZXJhdG9yLCBjdHgpOwogICAgICAgICAgICB2YXIgaSA9IC0xOwogICAgICAgICAgICB2YXIgbGVuID0gYXJyLmxlbmd0aDsKCiAgICAgICAgICAgIHdoaWxlICgrK2kgPCBsZW4pIHsKICAgICAgICAgICAgICAgIHZhciB2YWwgPSBhcnJbaV07CgogICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yKHZhbCwgaSwgYXJyKSkgewogICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKHZhbCk7CiAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVkdWNlU3RvcmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLlJlZHVjZVN0b3JlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogU2ltcGxpZmllZCByZWR1eCBsaWtlIHN0YXRlIGNvbnRhaW5lci4KICAgICAgICAgKgogICAgICAgICAqICMjIyBjb25zdHJ1Y3RvcgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgICAgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHJlZHVjZXIgICAgIHxGdW5jdGlvbiByZXR1cm5zIG5leHQgc3RhdGV8CiAgICAgICAgICogfGluaXRpYWxTdGF0ZXxJbml0aWFsIHN0YXRlICAgICAgICAgICAgICB8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgc3Vic2NyaWJlCiAgICAgICAgICoKICAgICAgICAgKiBBZGQgYSBjaGFuZ2UgbGlzdGVuZXIuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGxpc3RlbmVyfENhbGxiYWNrIHRvIGludm9rZSBvbiBldmVyeSBkaXNwYXRjaHwKICAgICAgICAgKiB8cmV0dXJuICB8RnVuY3Rpb24gdG8gdW5zdWJzY3JpYmUgICAgICAgICAgICAgfAogICAgICAgICAqCiAgICAgICAgICogIyMjIGRpc3BhdGNoCiAgICAgICAgICoKICAgICAgICAgKiBEaXNwYXRjaCBhbiBhY3Rpb24uCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8YWN0aW9ufE9iamVjdCByZXByZXNlbnRpbmcgY2hhbmdlc3wKICAgICAgICAgKiB8cmV0dXJufFNhbWUgYWN0aW9uIG9iamVjdCAgICAgICAgIHwKICAgICAgICAgKgogICAgICAgICAqICMjIyBnZXRTdGF0ZQogICAgICAgICAqCiAgICAgICAgICogR2V0IHRoZSBjdXJyZW50IHN0YXRlLgogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3Qgc3RvcmUgPSBuZXcgUmVkdWNlU3RvcmUoZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24pIHsKICAgICAgICAgKiAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkgewogICAgICAgICAqICAgICAgICAgY2FzZSAnSU5DUkVNRU5UJzogcmV0dXJuIHN0YXRlICsgMTsKICAgICAgICAgKiAgICAgICAgIGNhc2UgJ0RFQ1JFTUVOVCc6IHJldHVybiBzdGF0ZSAtIDE7CiAgICAgICAgICogICAgICAgICBkZWZhdWx0OiByZXR1cm4gc3RhdGU7CiAgICAgICAgICogICAgIH0KICAgICAgICAgKiB9LCAwKTsKICAgICAgICAgKgogICAgICAgICAqIHN0b3JlLnN1YnNjcmliZShmdW5jdGlvbiAoKSB7CiAgICAgICAgICogICAgIGNvbnNvbGUubG9nKHN0b3JlLmdldFN0YXRlKCkpOwogICAgICAgICAqIH0pOwogICAgICAgICAqCiAgICAgICAgICogc3RvcmUuZGlzcGF0Y2goe3R5cGU6ICdJTkNSRU1FTlQnfSk7IC8vIDEKICAgICAgICAgKiBzdG9yZS5kaXNwYXRjaCh7dHlwZTogJ0lOQ1JFTUVOVCd9KTsgLy8gMgogICAgICAgICAqIHN0b3JlLmRpc3BhdGNoKHt0eXBlOiAnREVDUkVNRU5UJ30pOyAvLyAxCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBjbGFzcyBSZWR1Y2VTdG9yZSB7CiAgICAgICAgICogICAgIGNvbnN0cnVjdG9yKHJlZHVjZXI6IEZ1bmN0aW9uLCBpbml0aWFsU3RhdGU6IGFueSk7CiAgICAgICAgICogICAgIHN1YnNjcmliZShsaXN0ZW5lcjogRnVuY3Rpb24pOiBGdW5jdGlvbjsKICAgICAgICAgKiAgICAgZGlzcGF0Y2goYWN0aW9uOiBhbnkpOiBhbnk7CiAgICAgICAgICogICAgIGdldFN0YXRlKCk6IGFueTsKICAgICAgICAgKiB9CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIENsYXNzIGNsb25lIHJlbW92ZSAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IENsYXNzKHsKICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gUmVkdWNlU3RvcmUocmVkdWNlciwgaW5pdGlhbFN0YXRlKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9yZWR1Y2VyID0gcmVkdWNlcjsKICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gaW5pdGlhbFN0YXRlOwogICAgICAgICAgICAgICAgdGhpcy5fY3VyTGlzdGVuZXJzID0gW107CiAgICAgICAgICAgICAgICB0aGlzLl9uZXh0TGlzdGVuZXJzID0gdGhpcy5fY3VyTGlzdGVuZXJzOwogICAgICAgICAgICB9LAogICAgICAgICAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uKGxpc3RlbmVyKSB7CiAgICAgICAgICAgICAgICB2YXIgaXNTdWJzY3JpYmVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICB0aGlzLl9lbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7CgogICAgICAgICAgICAgICAgdGhpcy5fbmV4dExpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTsKCiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1N1YnNjcmliZWQpIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpc1N1YnNjcmliZWQgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICAgICAgc2VsZi5fZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpOwoKICAgICAgICAgICAgICAgICAgICByZW1vdmUoc2VsZi5fbmV4dExpc3RlbmVycywgZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWwgPT09IGxpc3RlbmVyOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uKGFjdGlvbikgewogICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSB0aGlzLl9yZWR1Y2VyKHRoaXMuX3N0YXRlLCBhY3Rpb24pOwogICAgICAgICAgICAgICAgdmFyIGxpc3RlbmVycyA9ICh0aGlzLl9jdXJMaXN0ZW5lcnMgPSB0aGlzLl9uZXh0TGlzdGVuZXJzKTsKCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzW2ldKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZ2V0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlOwogICAgICAgICAgICB9LAogICAgICAgICAgICBfZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVyczogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbmV4dExpc3RlbmVycyA9PT0gdGhpcy5fY3VyTGlzdGVuZXJzKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmV4dExpc3RlbmVycyA9IGNsb25lKHRoaXMuX2N1ckxpc3RlbmVycyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNvbWUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIHNvbWUgPSBfLnNvbWUgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDaGVjayBpZiBwcmVkaWNhdGUgcmV0dXJuIHRydXRoeSBmb3IgYW55IGVsZW1lbnQuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxvYmogICAgICB8Q29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cHJlZGljYXRlfEZ1bmN0aW9uIHRvIGludm9rZWQgcGVyIGl0ZXJhdGlvbiAgICAgICAgICAgICB8CiAgICAgICAgICogfGN0eCAgICAgIHxQcmVkaWNhdGUgY29udGV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm4gICB8VHJ1ZSBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVja3wKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHNvbWUoWzIsIDVdLCBmdW5jdGlvbiAodmFsKSB7CiAgICAgICAgICogICAgIHJldHVybiB2YWwgJSAyID09PSAwOwogICAgICAgICAqIH0pOyAvLyAtPiB0cnVlCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzb21lPFQ+KAogICAgICAgICAqICAgICBsaXN0OiB0eXBlcy5MaXN0PFQ+LAogICAgICAgICAqICAgICBpdGVyYXRvcj86IHR5cGVzLkxpc3RJdGVyYXRvcjxULCBib29sZWFuPiwKICAgICAgICAgKiAgICAgY29udGV4dD86IGFueQogICAgICAgICAqICk6IGJvb2xlYW47CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc29tZTxUPigKICAgICAgICAgKiAgICAgb2JqZWN0OiB0eXBlcy5EaWN0aW9uYXJ5PFQ+LAogICAgICAgICAqICAgICBpdGVyYXRvcj86IHR5cGVzLk9iamVjdEl0ZXJhdG9yPFQsIGJvb2xlYW4+LAogICAgICAgICAqICAgICBjb250ZXh0PzogYW55CiAgICAgICAgICogKTogYm9vbGVhbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogc2FmZUNiIGlzQXJyTGlrZSBrZXlzIHR5cGVzIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGN0eCkgewogICAgICAgICAgICBwcmVkaWNhdGUgPSBzYWZlQ2IocHJlZGljYXRlLCBjdHgpOwoKICAgICAgICAgICAgdmFyIF9rZXlzID0gIWlzQXJyTGlrZShvYmopICYmIGtleXMob2JqKTsKCiAgICAgICAgICAgIHZhciBsZW4gPSAoX2tleXMgfHwgb2JqKS5sZW5ndGg7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIga2V5ID0gX2tleXMgPyBfa2V5c1tpXSA6IGk7CiAgICAgICAgICAgICAgICBpZiAocHJlZGljYXRlKG9ialtrZXldLCBrZXksIG9iaikpIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJsb29tRmlsdGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5CbG9vbUZpbHRlciA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEJsb29tIGZpbHRlciBpbXBsZW1lbnRhdGlvbi4KICAgICAgICAgKgogICAgICAgICAqICMjIyBjb25zdHJ1Y3RvcgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgIHxEZXNjICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHNpemU9MTAyNHxOdW1iZXIgb2YgYnVja2V0cyAgICAgICB8CiAgICAgICAgICogfGs9MyAgICAgIHxOdW1iZXIgb2YgSGFzaCBmdW5jdGlvbnN8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgYWRkCiAgICAgICAgICoKICAgICAgICAgKiBBZGQgYW4gZWxlbWVudCB0byB0aGUgZmlsdGVyLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWV8RGVzYyAgICAgICAgfAogICAgICAgICAqIHwtLS0tfC0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8dmFsIHxWYWx1ZSB0byBhZGR8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgdGVzdAogICAgICAgICAqCiAgICAgICAgICogVGVzdCBpZiBhbiBlbGVtZW50IGlzIGluIHRoZSBmaWx0ZXIuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbCAgIHxWYWx1ZSB0byB0ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgcHJvYmFibHksIGZhbHNlIGlmIGRlZmluaXRlbHkgbm90fAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3QgYmxvb20gPSBuZXcgQmxvb21GaWx0ZXIoMjU2LCAzKTsKICAgICAgICAgKiBibG9vbS5hZGQoJ0JydWNlIFdheW5lJyk7CiAgICAgICAgICogYmxvb20uYWRkKCdDbGFyayBLZW50Jyk7CiAgICAgICAgICogYmxvb20udGVzdCgnQ2xhcmsgS2VudCcpOyAvLyAtPiB0cnVlCiAgICAgICAgICogYmxvb20udGVzdCgnQnJ1Y2UgV2F5bmUnKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqIGJsb29tLnRlc3QoJ1RvbnkgU3RhcmsnKTsgLy8gLT4gZmFsc2UKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGNsYXNzIEJsb29tRmlsdGVyIHsKICAgICAgICAgKiAgICAgY29uc3RydWN0b3Ioc2l6ZT86IG51bWJlciwgaz86IG51bWJlcik7CiAgICAgICAgICogICAgIGFkZCh2YWw6IHN0cmluZyk6IHZvaWQ7CiAgICAgICAgICogICAgIHRlc3QodmFsOiBzdHJpbmcpOiBib29sZWFuOwogICAgICAgICAqIH0KICAgICAgICAgKi8KICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vamFzb25kYXZpZXMvYmxvb21maWx0ZXIuanMKCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogQ2xhc3MgZmlsbCBmbnYxYSBzdHJIYXNoIGVhY2ggc29tZSAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IENsYXNzKHsKICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9CiAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQKICAgICAgICAgICAgICAgICAgICAgICAgPyBhcmd1bWVudHNbMF0KICAgICAgICAgICAgICAgICAgICAgICAgOiAxMDI0OwogICAgICAgICAgICAgICAgdmFyIGsgPQogICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkCiAgICAgICAgICAgICAgICAgICAgICAgID8gYXJndW1lbnRzWzFdCiAgICAgICAgICAgICAgICAgICAgICAgIDogMzsKICAgICAgICAgICAgICAgIHRoaXMuX2J1Y2tldHMgPSBmaWxsKG5ldyBBcnJheShzaXplKSwgMCk7CiAgICAgICAgICAgICAgICB0aGlzLl9rID0gazsKICAgICAgICAgICAgICAgIHRoaXMuX3NpemUgPSBzaXplOwogICAgICAgICAgICB9LAogICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpczsKCiAgICAgICAgICAgICAgICBlYWNoKHRoaXMuX2xvY2F0aW9ucyh2YWwpLCBmdW5jdGlvbihsb2NhdGlvbikgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAoX3RoaXMuX2J1Y2tldHNbbG9jYXRpb25dID0gMSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdGVzdDogZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgICAgICB2YXIgX3RoaXMyID0gdGhpczsKCiAgICAgICAgICAgICAgICByZXR1cm4gIXNvbWUodGhpcy5fbG9jYXRpb25zKHZhbCksIGZ1bmN0aW9uKGxvY2F0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5fYnVja2V0c1tsb2NhdGlvbl0gPT09IDA7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX2xvY2F0aW9uczogZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgICAgICB2YXIgcmV0ID0gW107CiAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuX3NpemU7CiAgICAgICAgICAgICAgICB2YXIgYSA9IGZudjFhKHZhbCk7CiAgICAgICAgICAgICAgICB2YXIgYiA9IHN0ckhhc2godmFsKTsgLy8gaHR0cDovL3dpbGx3aGltLndwZW5naW5lLmNvbS8yMDExLzA5LzAzL3Byb2R1Y2luZy1uLWhhc2gtZnVuY3Rpb25zLWJ5LWhhc2hpbmctb25seS1vbmNlLwoKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fazsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0W2ldID0gKGEgKyBiICogaSkgJSBzaXplOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJldCk7CiAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB3b3Jkc1RvQnl0ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIHdvcmRzVG9CeXRlcyA9IF8ud29yZHNUb0J5dGVzID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ29udmVydCAzMi1iaXQgd29yZHMgdG8gYnl0ZXMuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tfAogICAgICAgICAqIHx3b3JkcyB8V29yZCBhcnJheXwKICAgICAgICAgKiB8cmV0dXJufEJ5dGUgYXJyYXl8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiB3b3Jkc1RvQnl0ZXMoWzB4MTIzNDU2NzhdKTsgLy8gLT4gWzB4MTIsIDB4MzQsIDB4NTYsIDB4NzhdCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB3b3Jkc1RvQnl0ZXMod29yZHM6IG51bWJlcltdKTogbnVtYmVyW107CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHdvcmRzKSB7CiAgICAgICAgICAgIHZhciBieXRlcyA9IFtdOwoKICAgICAgICAgICAgZm9yICh2YXIgYiA9IDAsIGxlbiA9IHdvcmRzLmxlbmd0aCAqIDMyOyBiIDwgbGVuOyBiICs9IDgpIHsKICAgICAgICAgICAgICAgIGJ5dGVzLnB1c2goKHdvcmRzW2IgPj4+IDVdID4+PiAoMjQgLSAoYiAlIDMyKSkpICYgMHhmZik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBieXRlczsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWQ1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5tZDUgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBNRDUgaW1wbGVtZW50YXRpb24uCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8bXNnICAgfE1lc3NhZ2UgdG8gZW5jcnlwdHwKICAgICAgICAgKiB8cmV0dXJufE1ENSBoYXNoICAgICAgICAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIG1kNSgnbGljaWEnKTsgLy8gLT4gJ2U1OWYzMzdkODVlOWE0NjdmMTc4M2ZhYjI4MmE0MWQwJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbWQ1KG1zZzogc3RyaW5nIHwgbnVtYmVyW10pOiBzdHJpbmc7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlzU3RyIHN0clRvQnl0ZXMgaGV4IGJ5dGVzVG9Xb3JkcyB3b3Jkc1RvQnl0ZXMgCiAgICAgICAgICovIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wdm9yYi9ub2RlLW1kNQoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24obXNnKSB7CiAgICAgICAgICAgIGlmIChpc1N0cihtc2cpKSBtc2cgPSBzdHJUb0J5dGVzKG1zZyk7CiAgICAgICAgICAgIHZhciBtID0gYnl0ZXNUb1dvcmRzKG1zZyk7CiAgICAgICAgICAgIHZhciBsID0gbXNnLmxlbmd0aCAqIDg7CiAgICAgICAgICAgIHZhciBhID0gMTczMjU4NDE5MzsKICAgICAgICAgICAgdmFyIGIgPSAtMjcxNzMzODc5OwogICAgICAgICAgICB2YXIgYyA9IC0xNzMyNTg0MTk0OwogICAgICAgICAgICB2YXIgZCA9IDI3MTczMzg3ODsgLy8gU3dhcCBlbmRpYW4KCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgbVtpXSA9CiAgICAgICAgICAgICAgICAgICAgKCgobVtpXSA8PCA4KSB8IChtW2ldID4+PiAyNCkpICYgMHgwMGZmMDBmZikgfAogICAgICAgICAgICAgICAgICAgICgoKG1baV0gPDwgMjQpIHwgKG1baV0gPj4+IDgpKSAmIDB4ZmYwMGZmMDApOwogICAgICAgICAgICB9IC8vIFBhZGRpbmcKCiAgICAgICAgICAgIG1bbCA+Pj4gNV0gfD0gMHg4MCA8PCBsICUgMzI7CiAgICAgICAgICAgIG1bKCgobCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBsOwoKICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG0ubGVuZ3RoOyBfaSArPSAxNikgewogICAgICAgICAgICAgICAgdmFyIGFhID0gYTsKICAgICAgICAgICAgICAgIHZhciBiYiA9IGI7CiAgICAgICAgICAgICAgICB2YXIgY2MgPSBjOwogICAgICAgICAgICAgICAgdmFyIGRkID0gZDsKICAgICAgICAgICAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW19pICsgMF0sIDcsIC02ODA4NzY5MzYpOwogICAgICAgICAgICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1bX2kgKyAxXSwgMTIsIC0zODk1NjQ1ODYpOwogICAgICAgICAgICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1bX2kgKyAyXSwgMTcsIDYwNjEwNTgxOSk7CiAgICAgICAgICAgICAgICBiID0gRkYoYiwgYywgZCwgYSwgbVtfaSArIDNdLCAyMiwgLTEwNDQ1MjUzMzApOwogICAgICAgICAgICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIG1bX2kgKyA0XSwgNywgLTE3NjQxODg5Nyk7CiAgICAgICAgICAgICAgICBkID0gRkYoZCwgYSwgYiwgYywgbVtfaSArIDVdLCAxMiwgMTIwMDA4MDQyNik7CiAgICAgICAgICAgICAgICBjID0gRkYoYywgZCwgYSwgYiwgbVtfaSArIDZdLCAxNywgLTE0NzMyMzEzNDEpOwogICAgICAgICAgICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1bX2kgKyA3XSwgMjIsIC00NTcwNTk4Myk7CiAgICAgICAgICAgICAgICBhID0gRkYoYSwgYiwgYywgZCwgbVtfaSArIDhdLCA3LCAxNzcwMDM1NDE2KTsKICAgICAgICAgICAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBtW19pICsgOV0sIDEyLCAtMTk1ODQxNDQxNyk7CiAgICAgICAgICAgICAgICBjID0gRkYoYywgZCwgYSwgYiwgbVtfaSArIDEwXSwgMTcsIC00MjA2Myk7CiAgICAgICAgICAgICAgICBiID0gRkYoYiwgYywgZCwgYSwgbVtfaSArIDExXSwgMjIsIC0xOTkwNDA0MTYyKTsKICAgICAgICAgICAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW19pICsgMTJdLCA3LCAxODA0NjAzNjgyKTsKICAgICAgICAgICAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBtW19pICsgMTNdLCAxMiwgLTQwMzQxMTAxKTsKICAgICAgICAgICAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBtW19pICsgMTRdLCAxNywgLTE1MDIwMDIyOTApOwogICAgICAgICAgICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1bX2kgKyAxNV0sIDIyLCAxMjM2NTM1MzI5KTsKICAgICAgICAgICAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBtW19pICsgMV0sIDUsIC0xNjU3OTY1MTApOwogICAgICAgICAgICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1bX2kgKyA2XSwgOSwgLTEwNjk1MDE2MzIpOwogICAgICAgICAgICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1bX2kgKyAxMV0sIDE0LCA2NDM3MTc3MTMpOwogICAgICAgICAgICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIG1bX2kgKyAwXSwgMjAsIC0zNzM4OTczMDIpOwogICAgICAgICAgICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1bX2kgKyA1XSwgNSwgLTcwMTU1ODY5MSk7CiAgICAgICAgICAgICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtfaSArIDEwXSwgOSwgMzgwMTYwODMpOwogICAgICAgICAgICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1bX2kgKyAxNV0sIDE0LCAtNjYwNDc4MzM1KTsKICAgICAgICAgICAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBtW19pICsgNF0sIDIwLCAtNDA1NTM3ODQ4KTsKICAgICAgICAgICAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBtW19pICsgOV0sIDUsIDU2ODQ0NjQzOCk7CiAgICAgICAgICAgICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtfaSArIDE0XSwgOSwgLTEwMTk4MDM2OTApOwogICAgICAgICAgICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1bX2kgKyAzXSwgMTQsIC0xODczNjM5NjEpOwogICAgICAgICAgICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIG1bX2kgKyA4XSwgMjAsIDExNjM1MzE1MDEpOwogICAgICAgICAgICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1bX2kgKyAxM10sIDUsIC0xNDQ0NjgxNDY3KTsKICAgICAgICAgICAgICAgIGQgPSBHRyhkLCBhLCBiLCBjLCBtW19pICsgMl0sIDksIC01MTQwMzc4NCk7CiAgICAgICAgICAgICAgICBjID0gR0coYywgZCwgYSwgYiwgbVtfaSArIDddLCAxNCwgMTczNTMyODQ3Myk7CiAgICAgICAgICAgICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtfaSArIDEyXSwgMjAsIC0xOTI2NjA3NzM0KTsKICAgICAgICAgICAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBtW19pICsgNV0sIDQsIC0zNzg1NTgpOwogICAgICAgICAgICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIG1bX2kgKyA4XSwgMTEsIC0yMDIyNTc0NDYzKTsKICAgICAgICAgICAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBtW19pICsgMTFdLCAxNiwgMTgzOTAzMDU2Mik7CiAgICAgICAgICAgICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtfaSArIDE0XSwgMjMsIC0zNTMwOTU1Nik7CiAgICAgICAgICAgICAgICBhID0gSEgoYSwgYiwgYywgZCwgbVtfaSArIDFdLCA0LCAtMTUzMDk5MjA2MCk7CiAgICAgICAgICAgICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtfaSArIDRdLCAxMSwgMTI3Mjg5MzM1Myk7CiAgICAgICAgICAgICAgICBjID0gSEgoYywgZCwgYSwgYiwgbVtfaSArIDddLCAxNiwgLTE1NTQ5NzYzMik7CiAgICAgICAgICAgICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtfaSArIDEwXSwgMjMsIC0xMDk0NzMwNjQwKTsKICAgICAgICAgICAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBtW19pICsgMTNdLCA0LCA2ODEyNzkxNzQpOwogICAgICAgICAgICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIG1bX2kgKyAwXSwgMTEsIC0zNTg1MzcyMjIpOwogICAgICAgICAgICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1bX2kgKyAzXSwgMTYsIC03MjI1MjE5NzkpOwogICAgICAgICAgICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIG1bX2kgKyA2XSwgMjMsIDc2MDI5MTg5KTsKICAgICAgICAgICAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBtW19pICsgOV0sIDQsIC02NDAzNjQ0ODcpOwogICAgICAgICAgICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIG1bX2kgKyAxMl0sIDExLCAtNDIxODE1ODM1KTsKICAgICAgICAgICAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBtW19pICsgMTVdLCAxNiwgNTMwNzQyNTIwKTsKICAgICAgICAgICAgICAgIGIgPSBISChiLCBjLCBkLCBhLCBtW19pICsgMl0sIDIzLCAtOTk1MzM4NjUxKTsKICAgICAgICAgICAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBtW19pICsgMF0sIDYsIC0xOTg2MzA4NDQpOwogICAgICAgICAgICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIG1bX2kgKyA3XSwgMTAsIDExMjY4OTE0MTUpOwogICAgICAgICAgICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIG1bX2kgKyAxNF0sIDE1LCAtMTQxNjM1NDkwNSk7CiAgICAgICAgICAgICAgICBiID0gSUkoYiwgYywgZCwgYSwgbVtfaSArIDVdLCAyMSwgLTU3NDM0MDU1KTsKICAgICAgICAgICAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBtW19pICsgMTJdLCA2LCAxNzAwNDg1NTcxKTsKICAgICAgICAgICAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBtW19pICsgM10sIDEwLCAtMTg5NDk4NjYwNik7CiAgICAgICAgICAgICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtfaSArIDEwXSwgMTUsIC0xMDUxNTIzKTsKICAgICAgICAgICAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW19pICsgMV0sIDIxLCAtMjA1NDkyMjc5OSk7CiAgICAgICAgICAgICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtfaSArIDhdLCA2LCAxODczMzEzMzU5KTsKICAgICAgICAgICAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBtW19pICsgMTVdLCAxMCwgLTMwNjExNzQ0KTsKICAgICAgICAgICAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBtW19pICsgNl0sIDE1LCAtMTU2MDE5ODM4MCk7CiAgICAgICAgICAgICAgICBiID0gSUkoYiwgYywgZCwgYSwgbVtfaSArIDEzXSwgMjEsIDEzMDkxNTE2NDkpOwogICAgICAgICAgICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIG1bX2kgKyA0XSwgNiwgLTE0NTUyMzA3MCk7CiAgICAgICAgICAgICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtfaSArIDExXSwgMTAsIC0xMTIwMjEwMzc5KTsKICAgICAgICAgICAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBtW19pICsgMl0sIDE1LCA3MTg3ODcyNTkpOwogICAgICAgICAgICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIG1bX2kgKyA5XSwgMjEsIC0zNDM0ODU1NTEpOwogICAgICAgICAgICAgICAgYSA9IChhICsgYWEpID4+PiAwOwogICAgICAgICAgICAgICAgYiA9IChiICsgYmIpID4+PiAwOwogICAgICAgICAgICAgICAgYyA9IChjICsgY2MpID4+PiAwOwogICAgICAgICAgICAgICAgZCA9IChkICsgZGQpID4+PiAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gaGV4LmVuY29kZSh3b3Jkc1RvQnl0ZXMoZW5kaWFuKFthLCBiLCBjLCBkXSkpKTsKICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBGRihhLCBiLCBjLCBkLCB4LCBzLCB0KSB7CiAgICAgICAgICAgIHZhciBuID0gYSArICgoYiAmIGMpIHwgKH5iICYgZCkpICsgKHggPj4+IDApICsgdDsKICAgICAgICAgICAgcmV0dXJuICgobiA8PCBzKSB8IChuID4+PiAoMzIgLSBzKSkpICsgYjsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIEdHKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHsKICAgICAgICAgICAgdmFyIG4gPSBhICsgKChiICYgZCkgfCAoYyAmIH5kKSkgKyAoeCA+Pj4gMCkgKyB0OwogICAgICAgICAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gSEgoYSwgYiwgYywgZCwgeCwgcywgdCkgewogICAgICAgICAgICB2YXIgbiA9IGEgKyAoYiBeIGMgXiBkKSArICh4ID4+PiAwKSArIHQ7CiAgICAgICAgICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBJSShhLCBiLCBjLCBkLCB4LCBzLCB0KSB7CiAgICAgICAgICAgIHZhciBuID0gYSArIChjIF4gKGIgfCB+ZCkpICsgKHggPj4+IDApICsgdDsKICAgICAgICAgICAgcmV0dXJuICgobiA8PCBzKSB8IChuID4+PiAoMzIgLSBzKSkpICsgYjsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGVuZGlhbihuKSB7CiAgICAgICAgICAgIGlmIChuLmNvbnN0cnVjdG9yID09IE51bWJlcikgewogICAgICAgICAgICAgICAgcmV0dXJuIChyb3RsKG4sIDgpICYgMHgwMGZmMDBmZikgfCAocm90bChuLCAyNCkgJiAweGZmMDBmZjAwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBuW2ldID0gZW5kaWFuKG5baV0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gbjsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHJvdGwobiwgYikgewogICAgICAgICAgICByZXR1cm4gKG4gPDwgYikgfCAobiA+Pj4gKDMyIC0gYikpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1lcmdlU29ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8ubWVyZ2VTb3J0ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogTWVyZ2Ugc29ydCBpbXBsZW1lbnRhdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIE5vdGU6IEl0J3Mgbm90IGFuICJpbi1wbGFjZSIgc29ydC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGFyciAgIHxBcnJheSB0byBzb3J0fAogICAgICAgICAqIHxjbXAgICB8Q29tcGFyYXRvciAgIHwKICAgICAgICAgKiB8cmV0dXJufFNvcnRlZCBhcnJheSB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBtZXJnZVNvcnQoWzIsIDFdKTsgLy8gLT4gWzEsIDJdCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBtZXJnZVNvcnQoYXJyOiBhbnlbXSwgY21wPzogRnVuY3Rpb24pOiBhbnlbXTsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNTb3J0ZWQgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihhcnIpIHsKICAgICAgICAgICAgdmFyIGNtcCA9CiAgICAgICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZAogICAgICAgICAgICAgICAgICAgID8gYXJndW1lbnRzWzFdCiAgICAgICAgICAgICAgICAgICAgOiBpc1NvcnRlZC5kZWZDb21wYXJhdG9yOwogICAgICAgICAgICBpZiAoYXJyLmxlbmd0aCA8PSAxKSByZXR1cm4gYXJyOwogICAgICAgICAgICB2YXIgbWlkZGxlID0gZmxvb3IoYXJyLmxlbmd0aCAvIDIpOwogICAgICAgICAgICB2YXIgbGVmdCA9IGFyci5zbGljZSgwLCBtaWRkbGUpOwogICAgICAgICAgICB2YXIgcmlnaHQgPSBhcnIuc2xpY2UobWlkZGxlKTsKICAgICAgICAgICAgcmV0dXJuIG1lcmdlKGV4cG9ydHMobGVmdCwgY21wKSwgZXhwb3J0cyhyaWdodCwgY21wKSwgY21wKTsKICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBtZXJnZShsZWZ0LCByaWdodCwgY21wKSB7CiAgICAgICAgICAgIHZhciByZXQgPSBbXTsKICAgICAgICAgICAgdmFyIGkgPSAwOwogICAgICAgICAgICB2YXIgaiA9IDA7CgogICAgICAgICAgICB3aGlsZSAoaSA8IGxlZnQubGVuZ3RoICYmIGogPCByaWdodC5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGNtcChsZWZ0W2ldLCByaWdodFtqXSkgPCAwID8gcmV0LnB1c2gobGVmdFtpKytdKSA6IHJldC5wdXNoKHJpZ2h0W2orK10pOwogICAgICAgICAgICB9CgogICAgICAgICAgICB3aGlsZSAoaSA8IGxlZnQubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICByZXQucHVzaChsZWZ0W2krK10pOwogICAgICAgICAgICB9CgogICAgICAgICAgICB3aGlsZSAoaiA8IHJpZ2h0Lmxlbmd0aCkgewogICAgICAgICAgICAgICAgcmV0LnB1c2gocmlnaHRbaisrXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfQoKICAgICAgICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8ubWV0aG9kcyA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBuYW1lcyBvZiBldmVyeSBtZXRob2QgaW4gYW4gb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG9iaiAgIHxPYmplY3QgdG8gY2hlY2sgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxGdW5jdGlvbiBuYW1lcyBpbiBvYmplY3R8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBtZXRob2RzKGNvbnNvbGUpOyAvLyAtPiBbJ0NvbnNvbGUnLCAnYXNzZXJ0JywgJ2RpcicsIC4uLl0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG1ldGhvZHMob2JqOiBhbnkpOiBzdHJpbmdbXTsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNGbiAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgICAgICB2YXIgcmV0ID0gW107CgogICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICAgICAgICAgICAgICBpZiAoaXNGbihvYmpba2V5XSkpIHJldC5wdXNoKGtleSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXQuc29ydCgpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtaW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIG1pbiA9IF8ubWluID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogR2V0IG1pbmltdW0gdmFsdWUgb2YgZ2l2ZW4gbnVtYmVycy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8Li4ubnVtfE51bWJlcnMgdG8gY2FsY3VsYXRlfAogICAgICAgICAqIHxyZXR1cm58TWluaW11bSB2YWx1ZSAgICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBtaW4oMi4zLCAxLCA0LjUsIDIpOyAvLyAxCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBtaW4oLi4ubnVtOiBudW1iZXJbXSk6IG51bWJlcjsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBhcnIgPSBhcmd1bWVudHM7CiAgICAgICAgICAgIHZhciByZXQgPSBhcnJbMF07CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMSwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAoYXJyW2ldIDwgcmV0KSByZXQgPSBhcnJbaV07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHRvRGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgdG9EYXRlID0gXy50b0RhdGUgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDb252ZXJ0IHZhbHVlIHRvIGEgRGF0ZS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbCAgIHxWYWx1ZSB0byBjb252ZXJ0fAogICAgICAgICAqIHxyZXR1cm58Q29udmVydGVkIERhdGUgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHRvRGF0ZSgnMjAxODA1MDEnKTsKICAgICAgICAgKiB0b0RhdGUoJzIwMTgtMDUtMDEnKTsKICAgICAgICAgKiB0b0RhdGUoMTUyNTEwNzQ1MDg0OSk7CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB0b0RhdGUodmFsOiBhbnkpOiBEYXRlOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBpc0RhdGUgaXNTdHIgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgaWYgKCF2YWwpIHJldHVybiBuZXcgRGF0ZSgpOwogICAgICAgICAgICBpZiAoaXNEYXRlKHZhbCkpIHJldHVybiB2YWw7CgogICAgICAgICAgICBpZiAoaXNTdHIodmFsKSkgewogICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gdmFsLm1hdGNoKHJlZ0RhdGUpOwogICAgICAgICAgICAgICAgaWYgKG1hdGNoKSByZXR1cm4gbmV3IERhdGUobWF0Y2hbMV0sIG1hdGNoWzJdIC0gMSwgbWF0Y2hbM10pOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gbmV3IERhdGUodmFsKTsKICAgICAgICB9OwoKICAgICAgICB2YXIgcmVnRGF0ZSA9IC9eKFxkezR9KS0/KFxkezJ9KS0/KFxkezEsMn0pJC87CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgbXMgPSBfLm1zID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ29udmVydCB0aW1lIHN0cmluZyBmb3JtYXRzIHRvIG1pbGxpc2Vjb25kcy4KICAgICAgICAgKgogICAgICAgICAqIFR1cm4gdGltZSBzdHJpbmcgaW50byBtaWxsaXNlY29uZHMuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHIgICB8U3RyaW5nIGZvcm1hdHwKICAgICAgICAgKiB8cmV0dXJufE1pbGxpc2Vjb25kcyB8CiAgICAgICAgICoKICAgICAgICAgKiBUdXJuIG1pbGxpc2Vjb25kcyBpbnRvIHRpbWUgc3RyaW5nLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8bnVtICAgfE1pbGxpc2Vjb25kcyB8CiAgICAgICAgICogfHJldHVybnxTdHJpbmcgZm9ybWF0fAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogbXMoJzFzJyk7IC8vIC0+IDEwMDAKICAgICAgICAgKiBtcygnMW0nKTsgLy8gLT4gNjAwMDAKICAgICAgICAgKiBtcygnMS41aCcpOyAvLyAtPiA1NDAwMDAwCiAgICAgICAgICogbXMoJzFkJyk7IC8vIC0+IDg2NDAwMDAwCiAgICAgICAgICogbXMoJzF5Jyk7IC8vIC0+IDMxNTU3NjAwMDAwCiAgICAgICAgICogbXMoJzEwMDAnKTsgLy8gLT4gMTAwMAogICAgICAgICAqIG1zKDE1MDApOyAvLyAtPiAnMS41cycKICAgICAgICAgKiBtcyg2MDAwMCk7IC8vIC0+ICcxbScKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG1zKHN0cjogc3RyaW5nKTogbnVtYmVyOwogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG1zKG51bTogbnVtYmVyKTogc3RyaW5nOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiB0b051bSBpc1N0ciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgICAgICBpZiAoaXNTdHIoc3RyKSkgewogICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gc3RyLm1hdGNoKHJlZ1N0clRpbWUpOwogICAgICAgICAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICByZXR1cm4gdG9OdW0obWF0Y2hbMV0pICogZmFjdG9yW21hdGNoWzJdIHx8ICdtcyddOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFyIG51bSA9IHN0cjsKICAgICAgICAgICAgICAgIHZhciBzdWZmaXggPSAnbXMnOwoKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzdWZmaXhMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG51bSA+PSBmYWN0b3Jbc3VmZml4TGlzdFtpXV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4ID0gc3VmZml4TGlzdFtpXTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiArKG51bSAvIGZhY3RvcltzdWZmaXhdKS50b0ZpeGVkKDIpICsgc3VmZml4OwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgdmFyIGZhY3RvciA9IHsKICAgICAgICAgICAgbXM6IDEsCiAgICAgICAgICAgIHM6IDEwMDAKICAgICAgICB9OwogICAgICAgIGZhY3Rvci5tID0gZmFjdG9yLnMgKiA2MDsKICAgICAgICBmYWN0b3IuaCA9IGZhY3Rvci5tICogNjA7CiAgICAgICAgZmFjdG9yLmQgPSBmYWN0b3IuaCAqIDI0OwogICAgICAgIGZhY3Rvci55ID0gZmFjdG9yLmQgKiAzNjUuMjU7CiAgICAgICAgdmFyIHN1ZmZpeExpc3QgPSBbJ3knLCAnZCcsICdoJywgJ20nLCAncyddOwogICAgICAgIHZhciByZWdTdHJUaW1lID0gL14oKD86XGQrKT9cLj9cZCspICooc3xtfGh8ZHx5KT8kLzsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1vbWVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8ubW9tZW50ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogVGlueSBtb21lbnQuanMgbGlrZSBpbXBsZW1lbnRhdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIEl0IG9ubHkgc3VwcG9ydHMgYSBzdWJzZXQgb2YgbW9tZW50LmpzIGFwaS4KICAgICAgICAgKgogICAgICAgICAqICMjIyBBdmFpbGFibGUgbWV0aG9kcwogICAgICAgICAqCiAgICAgICAgICogZm9ybWF0LCBpc1ZhbGlkLCBpc0xlYXBZZWFyLCBpc1NhbWUsIGlzQmVmb3JlLCBpc0FmdGVyLCB5ZWFyLAogICAgICAgICAqIG1vbnRoLCBkYXRlLCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQsIHVuaXgsIGNsb25lLAogICAgICAgICAqIHRvRGF0ZSwgdG9BcnJheSwgdG9KU09OLCB0b0lTT1N0cmluZywgdG9PYmplY3QsIHRvU3RyaW5nLCBzZXQsCiAgICAgICAgICogc3RhcnRPZiwgZW5kT2YsIGFkZCwgc3VidHJhY3QsIGRpZmYKICAgICAgICAgKgogICAgICAgICAqICMjIyBOb3Qgc3VwcG9ydGVkCiAgICAgICAgICoKICAgICAgICAgKiBsb2NhbGUgYW5kIHVuaXRzIGxpa2UgcXVhcnRlciBhbmQgd2Vlay4KICAgICAgICAgKgogICAgICAgICAqIE5vdGU6IEZvcm1hdCB1c2VzIGRhdGVGb3JtYXQgbW9kdWxlLCBzbyB0aGUgbWFzayBpcyBub3QgcXVpdGUgdGhlIHNhbWUgYXMgbW9tZW50LmpzLgogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogbW9tZW50KCcyMDE4MDUwMScpLmZvcm1hdCgneXl5eS1tbS1kZCcpOyAvLyAtPiAnMjAxOC0wNS0wMScKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBtb21lbnQgewogICAgICAgICAqICAgIGNsYXNzIE0gewogICAgICAgICAqICAgICAgICBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nIHwgRGF0ZSk7CiAgICAgICAgICogICAgICAgIGZvcm1hdChtYXNrOiBzdHJpbmcpOiBzdHJpbmc7CiAgICAgICAgICogICAgICAgIGlzVmFsaWQoKTogYm9vbGVhbjsKICAgICAgICAgKiAgICAgICAgaXNMZWFwWWVhcigpOiBib29sZWFuOwogICAgICAgICAqICAgICAgICBpc1NhbWUodGhhdDogTSk6IGJvb2xlYW47CiAgICAgICAgICogICAgICAgIHZhbHVlT2YoKTogbnVtYmVyOwogICAgICAgICAqICAgICAgICBpc0JlZm9yZSh0aGF0OiBNKTogYm9vbGVhbjsKICAgICAgICAgKiAgICAgICAgaXNBZnRlcih0aGF0OiBNKTogYm9vbGVhbjsKICAgICAgICAgKiAgICAgICAgeWVhcigpOiBudW1iZXI7CiAgICAgICAgICogICAgICAgIHllYXIobnVtYmVyKTogTTsKICAgICAgICAgKiAgICAgICAgbW9udGgoKTogbnVtYmVyOwogICAgICAgICAqICAgICAgICBtb250aChudW1iZXIpOiBNOwogICAgICAgICAqICAgICAgICBkYXRlKCk6IG51bWJlcjsKICAgICAgICAgKiAgICAgICAgZGF0ZShudW1iZXIpOiBNOwogICAgICAgICAqICAgICAgICBob3VyKCk6IG51bWJlcjsKICAgICAgICAgKiAgICAgICAgaG91cihudW1iZXIpOiBNOwogICAgICAgICAqICAgICAgICBtaW51dGUoKTogbnVtYmVyOwogICAgICAgICAqICAgICAgICBtaW51dGUobnVtYmVyKTogTTsKICAgICAgICAgKiAgICAgICAgc2Vjb25kKCk6IG51bWJlcjsKICAgICAgICAgKiAgICAgICAgc2Vjb25kKG51bWJlcik6IE07CiAgICAgICAgICogICAgICAgIG1pbGxpc2Vjb25kKCk6IG51bWJlcjsKICAgICAgICAgKiAgICAgICAgbWlsbGlzZWNvbmQobnVtYmVyKTogTTsKICAgICAgICAgKiAgICAgICAgdW5peCgpOiBudW1iZXI7CiAgICAgICAgICogICAgICAgIGNsb25lKCk6IE07CiAgICAgICAgICogICAgICAgIHRvRGF0ZSgpOiBEYXRlOwogICAgICAgICAqICAgICAgICB0b0FycmF5KCk6IG51bWJlcltdOwogICAgICAgICAqICAgICAgICB0b0pTT04oKTogc3RyaW5nOwogICAgICAgICAqICAgICAgICB0b0lTT1N0cmluZygpOiBzdHJpbmc7CiAgICAgICAgICogICAgICAgIHRvT2JqZWN0KCk6IGFueTsKICAgICAgICAgKiAgICAgICAgdG9TdHJpbmcoKTogc3RyaW5nOwogICAgICAgICAqICAgICAgICBzZXQodW5pdDogc3RyaW5nLCBudW06IG51bWJlcik6IE07CiAgICAgICAgICogICAgICAgIHN0YXJ0T2YodW5pdDogc3RyaW5nKTogTTsKICAgICAgICAgKiAgICAgICAgZW5kT2YodW5pdDogc3RyaW5nKTogTTsKICAgICAgICAgKiAgICAgICAgZGF5c0luTW9udGgoKTogbnVtYmVyOwogICAgICAgICAqICAgICAgICBhZGQobnVtOiBudW1iZXIsIHVuaXQ6IHN0cmluZyk6IE07CiAgICAgICAgICogICAgICAgIHN1YnRyYWN0KG51bTogbnVtYmVyLCB1bml0OiBzdHJpbmcpOiBNOwogICAgICAgICAqICAgICAgICBkaWZmKGlucHV0OiBNIHwgc3RyaW5nIHwgRGF0ZSwgdW5pdDogc3RyaW5nLCBhc0Zsb2F0OiBib29sZWFuKTogbnVtYmVyOwogICAgICAgICAqICAgIH0KICAgICAgICAgKiB9CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbW9tZW50KHZhbHVlOiBzdHJpbmcgfCBEYXRlKTogbW9tZW50Lk07CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIENsYXNzIHRvRGF0ZSBkYXRlRm9ybWF0IGlzTGVhcFllYXIgZXh0ZW5kIHRvU3RyIGlzTmlsIG1zIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KHZhbCk7CiAgICAgICAgfTsKCiAgICAgICAgdmFyIE1vbWVudCA9IENsYXNzKHsKICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gTW9tZW50KHZhbCkgewogICAgICAgICAgICAgICAgdGhpcy5fZCA9IHRvRGF0ZSh2YWwpOwoKICAgICAgICAgICAgICAgIHRoaXMuX2luaXQoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX2luaXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGQgPSB0aGlzLl9kOwogICAgICAgICAgICAgICAgZXh0ZW5kKHRoaXMsIHsKICAgICAgICAgICAgICAgICAgICBfeWVhcjogZC5nZXRGdWxsWWVhcigpLAogICAgICAgICAgICAgICAgICAgIF9tb250aDogZC5nZXRNb250aCgpLAogICAgICAgICAgICAgICAgICAgIF9kYXRlOiBkLmdldERhdGUoKSwKICAgICAgICAgICAgICAgICAgICBfaG91cjogZC5nZXRIb3VycygpLAogICAgICAgICAgICAgICAgICAgIF9taW51dGU6IGQuZ2V0TWludXRlcygpLAogICAgICAgICAgICAgICAgICAgIF9zZWNvbmQ6IGQuZ2V0U2Vjb25kcygpLAogICAgICAgICAgICAgICAgICAgIF9taWxsaXNlY29uZDogZC5nZXRNaWxsaXNlY29uZHMoKQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZm9ybWF0OiBmdW5jdGlvbihtYXNrKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZUZvcm1hdCh0aGlzLl9kLCBtYXNrKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgaXNWYWxpZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gISh0aGlzLl9kLnRvU3RyaW5nKCkgPT09ICdJbnZhbGlkIERhdGUnKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgaXNMZWFwWWVhcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih0aGlzLl95ZWFyKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgaXNTYW1lOiBmdW5jdGlvbih0aGF0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPT09IHRoYXQudmFsdWVPZigpOwogICAgICAgICAgICB9LAogICAgICAgICAgICB2YWx1ZU9mOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kLmdldFRpbWUoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgaXNCZWZvcmU6IGZ1bmN0aW9uKHRoYXQpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA8IHRoYXQudmFsdWVPZigpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBpc0FmdGVyOiBmdW5jdGlvbih0aGF0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiB0aGF0LnZhbHVlT2YoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgeWVhcjogbWFrZUdldFNldCgneWVhcicpLAogICAgICAgICAgICBtb250aDogbWFrZUdldFNldCgnbW9udGgnKSwKICAgICAgICAgICAgZGF0ZTogbWFrZUdldFNldCgnZGF0ZScpLAogICAgICAgICAgICBob3VyOiBtYWtlR2V0U2V0KCdob3VyJyksCiAgICAgICAgICAgIG1pbnV0ZTogbWFrZUdldFNldCgnbWludXRlJyksCiAgICAgICAgICAgIHNlY29uZDogbWFrZUdldFNldCgnc2Vjb25kJyksCiAgICAgICAgICAgIG1pbGxpc2Vjb25kOiBtYWtlR2V0U2V0KCdtaWxsaXNlY29uZCcpLAogICAgICAgICAgICB1bml4OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmbG9vcih0aGlzLnZhbHVlT2YoKSAvIDEwMDApOwogICAgICAgICAgICB9LAogICAgICAgICAgICBjbG9uZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1vbWVudCh0aGlzKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdG9EYXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLl9kKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdG9BcnJheTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3llYXIsCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW9udGgsCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZSwKICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3VyLAogICAgICAgICAgICAgICAgICAgIHRoaXMuX21pbnV0ZSwKICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWNvbmQsCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmQKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHRvSlNPTjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b0lTT1N0cmluZygpOwogICAgICAgICAgICB9LAogICAgICAgICAgICB0b0lTT1N0cmluZzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpOwogICAgICAgICAgICB9LAogICAgICAgICAgICB0b09iamVjdDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHllYXJzOiB0aGlzLl95ZWFyLAogICAgICAgICAgICAgICAgICAgIG1vbnRoczogdGhpcy5fbW9udGgsCiAgICAgICAgICAgICAgICAgICAgZGF0ZTogdGhpcy5fZGF0ZSwKICAgICAgICAgICAgICAgICAgICBob3VyczogdGhpcy5faG91ciwKICAgICAgICAgICAgICAgICAgICBtaW51dGVzOiB0aGlzLl9taW51dGUsCiAgICAgICAgICAgICAgICAgICAgc2Vjb25kczogdGhpcy5fc2Vjb25kLAogICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kczogdGhpcy5fbWlsbGlzZWNvbmQKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kLnRvVVRDU3RyaW5nKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNldDogZnVuY3Rpb24odW5pdCwgbnVtKSB7CiAgICAgICAgICAgICAgICB2YXIgZCA9IHRoaXMuX2Q7CiAgICAgICAgICAgICAgICB1bml0ID0gbm9ybWFsaXplVW5pdCh1bml0KTsKCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHVuaXQpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICd5ZWFyJzoKICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRGdWxsWWVhcihudW0pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbW9udGgnOgogICAgICAgICAgICAgICAgICAgICAgICBkLnNldE1vbnRoKG51bSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXRlJzoKICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXREYXRlKG51bSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBjYXNlICdob3VyJzoKICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRIb3VycyhudW0pOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWludXRlJzoKICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRNaW51dGVzKG51bSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmQnOgogICAgICAgICAgICAgICAgICAgICAgICBkLnNldFNlY29uZHMobnVtKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ21pbGxpc2Vjb25kJzoKICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRNaWxsaXNlY29uZHMobnVtKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luaXQoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc3RhcnRPZjogZnVuY3Rpb24odW5pdCkgewogICAgICAgICAgICAgICAgdW5pdCA9IG5vcm1hbGl6ZVVuaXQodW5pdCk7CiAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1mYWxsdGhyb3VnaCAqLwoKICAgICAgICAgICAgICAgIHN3aXRjaCAodW5pdCkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3llYXInOgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKDApOwoKICAgICAgICAgICAgICAgICAgICBjYXNlICdtb250aCc6CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgxKTsKCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGF5JzoKICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXRlJzoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3VyKDApOwoKICAgICAgICAgICAgICAgICAgICBjYXNlICdob3VyJzoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taW51dGUoMCk7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kKDApOwoKICAgICAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmQnOgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbGxpc2Vjb25kKDApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICB9LAogICAgICAgICAgICBlbmRPZjogZnVuY3Rpb24odW5pdCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRPZih1bml0KQogICAgICAgICAgICAgICAgICAgIC5hZGQoMSwgdW5pdCkKICAgICAgICAgICAgICAgICAgICAuc3VidHJhY3QoMSwgJ21zJyk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRheXNJbk1vbnRoOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkKICAgICAgICAgICAgICAgICAgICAuZW5kT2YoJ21vbnRoJykKICAgICAgICAgICAgICAgICAgICAuZGF0ZSgpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBhZGQ6IGNyZWF0ZUFkZGVyKDEpLAogICAgICAgICAgICBzdWJ0cmFjdDogY3JlYXRlQWRkZXIoLTEpLAogICAgICAgICAgICBkaWZmOiBmdW5jdGlvbihpbnB1dCwgdW5pdCwgYXNGbG9hdCkgewogICAgICAgICAgICAgICAgdmFyIHRoYXQgPSBpbnB1dCBpbnN0YW5jZW9mIE1vbWVudCA/IGlucHV0IDogbmV3IE1vbWVudChpbnB1dCk7CiAgICAgICAgICAgICAgICB2YXIgcmV0OwogICAgICAgICAgICAgICAgdW5pdCA9IG5vcm1hbGl6ZVVuaXQodW5pdCk7CiAgICAgICAgICAgICAgICB2YXIgZGlmZiA9IHRoaXMgLSB0aGF0OwoKICAgICAgICAgICAgICAgIHN3aXRjaCAodW5pdCkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3llYXInOgogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAxMjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ21vbnRoJzoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gZGlmZiAvIDFlMzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgLy8gMTAwMAoKICAgICAgICAgICAgICAgICAgICBjYXNlICdtaW51dGUnOgogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBkaWZmIC8gNmU0OwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAvLyAxMDAwICogNjAKCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaG91cic6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGRpZmYgLyAzNmU1OwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAvLyAxMDAwICogNjAgKiA2MAoKICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXknOgogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBkaWZmIC8gODY0ZTU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIC8vIDEwMDAgKiA2MCAqIDYwICogMjQKCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gZGlmZjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gYXNGbG9hdCA/IHJldCA6IGFic0Zsb29yKHJldCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yOwogICAgICAgIHZhciBjZWlsID0gTWF0aC5jZWlsOwoKICAgICAgICBmdW5jdGlvbiBhYnNGbG9vcihudW0pIHsKICAgICAgICAgICAgcmV0dXJuIG51bSA8IDAgPyBjZWlsKG51bSkgfHwgMCA6IGZsb29yKG51bSk7CiAgICAgICAgfQoKICAgICAgICB2YXIgdW5pdFNob3J0aGFuZE1hcCA9IHsKICAgICAgICAgICAgeTogJ3llYXInLAogICAgICAgICAgICBNOiAnbW9udGgnLAogICAgICAgICAgICBEOiAnZGF0ZScsCiAgICAgICAgICAgIGQ6ICdkYXknLAogICAgICAgICAgICBoOiAnaG91cicsCiAgICAgICAgICAgIG06ICdtaW51dGUnLAogICAgICAgICAgICBzOiAnc2Vjb25kJywKICAgICAgICAgICAgbXM6ICdtaWxsaXNlY29uZCcKICAgICAgICB9OwogICAgICAgIHZhciByZWdFbmRTID0gL3MkLzsgLy8gVHVybiAneScgb3IgJ3llYXJzJyBpbnRvICd5ZWFyJwoKICAgICAgICBmdW5jdGlvbiBub3JtYWxpemVVbml0KHVuaXQpIHsKICAgICAgICAgICAgdW5pdCA9IHRvU3RyKHVuaXQpOwogICAgICAgICAgICBpZiAodW5pdFNob3J0aGFuZE1hcFt1bml0XSkgcmV0dXJuIHVuaXRTaG9ydGhhbmRNYXBbdW5pdF07CiAgICAgICAgICAgIHJldHVybiB1bml0LnRvTG93ZXJDYXNlKCkucmVwbGFjZShyZWdFbmRTLCAnJyk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBtYWtlR2V0U2V0KHVuaXQpIHsKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG51bSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGlzTmlsKG51bSkgPyB0aGlzWydfJyArIHVuaXRdIDogdGhpcy5zZXQodW5pdCwgbnVtKTsKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUFkZGVyKGRpcikgewogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24obnVtLCB1bml0KSB7CiAgICAgICAgICAgICAgICB1bml0ID0gbm9ybWFsaXplVW5pdCh1bml0KTsKICAgICAgICAgICAgICAgIGlmICh1bml0ID09PSAnbW9udGgnKSByZXR1cm4gdGhpcy5tb250aCh0aGlzLl9tb250aCArIGRpciAqIG51bSk7CiAgICAgICAgICAgICAgICBpZiAodW5pdCA9PT0gJ3llYXInKSByZXR1cm4gdGhpcy55ZWFyKHRoaXMuX3llYXIgKyBkaXIgKiBudW0pOwogICAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gY3JlYXRlRHVyYXRpb24obnVtLCB1bml0KTsKICAgICAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSArIGRpciAqIGR1cmF0aW9uKTsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pbml0KCk7CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICB2YXIgbXNNYXAgPSB7CiAgICAgICAgICAgIGRheTogJ2QnLAogICAgICAgICAgICBob3VyOiAnaCcsCiAgICAgICAgICAgIG1pbnV0ZTogJ20nLAogICAgICAgICAgICBzZWNvbmQ6ICdzJywKICAgICAgICAgICAgbWlsbGlzZWNvbmQ6ICcnCiAgICAgICAgfTsKCiAgICAgICAgZnVuY3Rpb24gY3JlYXRlRHVyYXRpb24obnVtLCB1bml0KSB7CiAgICAgICAgICAgIHJldHVybiBtcyhudW0gKyBtc01hcFt1bml0XSk7CiAgICAgICAgfSAvLyBGcm9tIG1vbWVudC5qcwoKICAgICAgICBmdW5jdGlvbiBtb250aERpZmYoYSwgYikgewogICAgICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoYi55ZWFyKCkgLSBhLnllYXIoKSkgKiAxMiArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpOwogICAgICAgICAgICB2YXIgYW5jaG9yID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiwgJ21vbnRocycpOwogICAgICAgICAgICB2YXIgYW5jaG9yMjsKICAgICAgICAgICAgdmFyIGFkanVzdDsKCiAgICAgICAgICAgIGlmIChiIC0gYW5jaG9yIDwgMCkgewogICAgICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgLSAxLCAnbW9udGhzJyk7CiAgICAgICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yIC0gYW5jaG9yMik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiArIDEsICdtb250aHMnKTsKICAgICAgICAgICAgICAgIGFkanVzdCA9IChiIC0gYW5jaG9yKSAvIChhbmNob3IyIC0gYW5jaG9yKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIC0od2hvbGVNb250aERpZmYgKyBhZGp1c3QpIHx8IDA7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdXBwZXJDYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciB1cHBlckNhc2UgPSBfLnVwcGVyQ2FzZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENvbnZlcnQgc3RyaW5nIHRvIHVwcGVyIGNhc2UuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHN0ciAgIHxTdHJpbmcgdG8gY29udmVydHwKICAgICAgICAgKiB8cmV0dXJufFVwcGVyY2FzZWQgc3RyaW5nfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogdXBwZXJDYXNlKCd0ZXN0Jyk7IC8vIC0+ICdURVNUJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXBwZXJDYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiB0b1N0ciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgICAgICByZXR1cm4gdG9TdHIoc3RyKS50b0xvY2FsZVVwcGVyQ2FzZSgpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtb3JzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8ubW9yc2UgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBNb3JzZSBjb2RlIGVuY29kaW5nIGFuZCBkZWNvZGluZy4KICAgICAgICAgKgogICAgICAgICAqICMjIyBlbmNvZGUKICAgICAgICAgKgogICAgICAgICAqIFR1cm4gdGV4dCBpbnRvIE1vcnNlIGNvZGUuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHR4dCAgIHxUZXh0IHRvIGVuY29kZXwKICAgICAgICAgKiB8cmV0dXJufE1vcnNlIGNvZGUgICAgfAogICAgICAgICAqCiAgICAgICAgICogIyMjIGRlY29kZQogICAgICAgICAqCiAgICAgICAgICogRGVjb2RlIE1vcnNlIGNvZGUgaW50byB0ZXh0LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxtb3JzZSB8TW9yc2UgY29kZSAgICB8CiAgICAgICAgICogfHJldHVybnxEZWNvZGVkIHN0cmluZ3wKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnN0IHN0ciA9IG1vcnNlLmVuY29kZSgnSGVsbG8sIHdvcmxkLicpOwogICAgICAgICAqIC8vIC0+ICcuLi4uIC4gLi0uLiAuLS4uIC0tLSAtLS4uLS0gLi4uLi4uLiAuLS0gLS0tIC4tLiAuLS4uIC0uLiAuLS4tLi0nCiAgICAgICAgICogbW9yc2UuZGVjb2RlKHN0cik7IC8vIC0+ICdIZWxsbywgd29ybGQuJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgY29uc3QgbW9yc2U6IHsKICAgICAgICAgKiAgICAgZW5jb2RlKHR4dDogc3RyaW5nKTogc3RyaW5nOwogICAgICAgICAqICAgICBkZWNvZGUobW9yc2U6IHN0cmluZyk6IHN0cmluZzsKICAgICAgICAgKiB9CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHVwcGVyQ2FzZSBpbnZlcnQgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSB7CiAgICAgICAgICAgIGVuY29kZTogZnVuY3Rpb24odHh0KSB7CiAgICAgICAgICAgICAgICB2YXIgbGVuID0gdHh0Lmxlbmd0aDsKICAgICAgICAgICAgICAgIHZhciByZXQgPSBBcnJheShsZW4pOwoKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IHVwcGVyQ2FzZSh0eHRbaV0pOwogICAgICAgICAgICAgICAgICAgIHJldFtpXSA9IG1hcFtjXSB8fCAnPyc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHJldC5qb2luKCcgJyk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRlY29kZTogZnVuY3Rpb24obW9yc2UpIHsKICAgICAgICAgICAgICAgIHZhciByZXQgPSBtb3JzZS5zcGxpdCgnICcpOwoKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSByZXQubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICByZXRbaV0gPSBkZWNvZGVNYXBbcmV0W2ldXSB8fCAnICc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHJldC5qb2luKCcnKTsKICAgICAgICAgICAgfQogICAgICAgIH07IC8vIGNvcGllZCBmcm9tIGh0dHA6Ly9mcmVlbmV0Lm1zcC5tbi51cy9wZW9wbGUvY2FsZ3VpcmUvbW9yc2UuaHRtbAoKICAgICAgICB2YXIgbWFwID0gewogICAgICAgICAgICBBOiAnLi0nLAogICAgICAgICAgICBCOiAnLS4uLicsCiAgICAgICAgICAgIEM6ICctLi0uJywKICAgICAgICAgICAgRDogJy0uLicsCiAgICAgICAgICAgIEU6ICcuJywKICAgICAgICAgICAgRjogJy4uLS4nLAogICAgICAgICAgICBHOiAnLS0uJywKICAgICAgICAgICAgSDogJy4uLi4nLAogICAgICAgICAgICBJOiAnLi4nLAogICAgICAgICAgICBKOiAnLi0tLScsCiAgICAgICAgICAgIEs6ICctLi0nLAogICAgICAgICAgICBMOiAnLi0uLicsCiAgICAgICAgICAgIE06ICctLScsCiAgICAgICAgICAgIE46ICctLicsCiAgICAgICAgICAgIE86ICctLS0nLAogICAgICAgICAgICBQOiAnLi0tLicsCiAgICAgICAgICAgIFE6ICctLS4tJywKICAgICAgICAgICAgUjogJy4tLicsCiAgICAgICAgICAgIFM6ICcuLi4nLAogICAgICAgICAgICBUOiAnLScsCiAgICAgICAgICAgIFU6ICcuLi0nLAogICAgICAgICAgICBWOiAnLi4uLScsCiAgICAgICAgICAgIFc6ICcuLS0nLAogICAgICAgICAgICBYOiAnLS4uLScsCiAgICAgICAgICAgIFk6ICctLi0tJywKICAgICAgICAgICAgWjogJy0tLi4nLAogICAgICAgICAgICDDgTogJy4tLS4tJywKICAgICAgICAgICAgw4Q6ICcuLS4tJywKICAgICAgICAgICAgw4k6ICcuLi0uLicsCiAgICAgICAgICAgIMOROiAnLS0uLS0nLAogICAgICAgICAgICDDljogJy0tLS4nLAogICAgICAgICAgICDDnDogJy4uLS0nLAogICAgICAgICAgICAnMSc6ICcuLS0tLScsCiAgICAgICAgICAgICcyJzogJy4uLS0tJywKICAgICAgICAgICAgJzMnOiAnLi4uLS0nLAogICAgICAgICAgICAnNCc6ICcuLi4uLScsCiAgICAgICAgICAgICc1JzogJy4uLi4uJywKICAgICAgICAgICAgJzYnOiAnLS4uLi4nLAogICAgICAgICAgICAnNyc6ICctLS4uLicsCiAgICAgICAgICAgICc4JzogJy0tLS4uJywKICAgICAgICAgICAgJzknOiAnLS0tLS4nLAogICAgICAgICAgICAnMCc6ICctLS0tLScsCiAgICAgICAgICAgICcsJzogJy0tLi4tLScsCiAgICAgICAgICAgICcuJzogJy4tLi0uLScsCiAgICAgICAgICAgICc/JzogJy4uLS0uLicsCiAgICAgICAgICAgICc7JzogJy0uLS4tJywKICAgICAgICAgICAgJzonOiAnLS0tLi4uJywKICAgICAgICAgICAgJy8nOiAnLS4uLS4nLAogICAgICAgICAgICAnLSc6ICctLi4uLi0nLAogICAgICAgICAgICAiJyI6ICcuLS0tLS4nLAogICAgICAgICAgICAnKCknOiAnLS4tLS4tJywKICAgICAgICAgICAgXzogJy4uLS0uLScsCiAgICAgICAgICAgICdAJzogJy4tLS4tLicsCiAgICAgICAgICAgICcgJzogJy4uLi4uLi4nCiAgICAgICAgfTsKICAgICAgICB2YXIgZGVjb2RlTWFwID0gaW52ZXJ0KG1hcCk7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBuZWdhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIG5lZ2F0ZSA9IF8ubmVnYXRlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ3JlYXRlIGEgZnVuY3Rpb24gdGhhdCBuZWdhdGVzIHRoZSByZXN1bHQgb2YgdGhlIHByZWRpY2F0ZSBmdW5jdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICB8RGVzYyAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHByZWRpY2F0ZXxQcmVkaWNhdGUgdG8gbmVnYXRlfAogICAgICAgICAqIHxyZXR1cm4gICB8TmV3IGZ1bmN0aW9uICAgICAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGZ1bmN0aW9uIGV2ZW4obikgeyByZXR1cm4gbiAlIDIgPT09IDAgfQogICAgICAgICAqIC8vIGZpbHRlcihbMSwgMiwgMywgNCwgNSwgNl0sIG5lZ2F0ZShldmVuKSk7IC0+IFsxLCAzLCA1XQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbmVnYXRlKHByZWRpY2F0ZTogRnVuY3Rpb24pOiBGdW5jdGlvbjsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24ocHJlZGljYXRlKSB7CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiAhcHJlZGljYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgIH07CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG5vcm1hbGl6ZUhlYWRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8ubm9ybWFsaXplSGVhZGVyID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogTm9ybWFsaXplIGh0dHAgaGVhZGVyIG5hbWUuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxoZWFkZXJ8SGVhZGVyIHRvIG5vcm1hbGl6ZXwKICAgICAgICAgKiB8cmV0dXJufE5vcm1hbGl6ZWQgaGVhZGVyICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBub3JtYWxpemVIZWFkZXIoJ2NvbnRlbnQtdHlwZScpOyAvLyAtPiAnQ29udGVudC1UeXBlJwogICAgICAgICAqIG5vcm1hbGl6ZUhlYWRlcignZXRhZycpOyAvLyAtPiAnRVRhZycKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlcihoZWFkZXI6IHN0cmluZyk6IHN0cmluZzsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogbWFwIGNhcGl0YWxpemUgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihoZWFkZXIpIHsKICAgICAgICAgICAgdmFyIHJldCA9IHNwZWNpYWxIZWFkZXJzW2hlYWRlci50b0xvd2VyQ2FzZSgpXTsKCiAgICAgICAgICAgIGlmICghcmV0KSB7CiAgICAgICAgICAgICAgICByZXQgPSBtYXAoaGVhZGVyLnNwbGl0KCctJyksIGNhcGl0YWxpemUpLmpvaW4oJy0nKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9OwoKICAgICAgICB2YXIgc3BlY2lhbEhlYWRlcnMgPSB7CiAgICAgICAgICAgICdjb250ZW50LW1kNSc6ICdDb250ZW50LU1ENScsCiAgICAgICAgICAgIGRudDogJ0ROVCcsCiAgICAgICAgICAgIGV0YWc6ICdFVGFnJywKICAgICAgICAgICAgJ2xhc3QtZXZlbnQtaWQnOiAnTGFzdC1FdmVudC1JRCcsCiAgICAgICAgICAgIHRjbjogJ1RDTicsCiAgICAgICAgICAgIHRlOiAnVEUnLAogICAgICAgICAgICAnd3d3LWF1dGhlbnRpY2F0ZSc6ICdXV1ctQXV0aGVudGljYXRlJywKICAgICAgICAgICAgJ3gtZG5zcHJlZmV0Y2gtY29udHJvbCc6ICdYLUROU1ByZWZldGNoLUNvbnRyb2wnCiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG5vcm1hbGl6ZVBhdGggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLm5vcm1hbGl6ZVBhdGggPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBOb3JtYWxpemUgZmlsZSBwYXRoIHNsYXNoZXMuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHBhdGggIHxQYXRoIHRvIG5vcm1hbGl6ZXwKICAgICAgICAgKiB8cmV0dXJufE5vcm1hbGl6ZWQgcGF0aCAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogbm9ybWFsaXplUGF0aCgnXFxmb29cXGJhclxcJyk7IC8vIC0+ICcvZm9vL2Jhci8nCiAgICAgICAgICogbm9ybWFsaXplUGF0aCgnLi9mb28vL2JhcicpOyAvLyAtPiAnLi9mb28vYmFyJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmc7CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHBhdGgpIHsKICAgICAgICAgICAgcmV0dXJuIHBhdGgucmVwbGFjZShyZWdTbGFzaGVzLCAnLycpOwogICAgICAgIH07CgogICAgICAgIHZhciByZWdTbGFzaGVzID0gL1tcXC9dKy9nOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcGljayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgcGljayA9IF8ucGljayA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFJldHVybiBhIGZpbHRlcmVkIGNvcHkgb2YgYW4gb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG9iamVjdHxTb3VyY2Ugb2JqZWN0ICB8CiAgICAgICAgICogfGZpbHRlcnxPYmplY3QgZmlsdGVyICB8CiAgICAgICAgICogfHJldHVybnxGaWx0ZXJlZCBvYmplY3R8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBwaWNrKHthOiAxLCBiOiAyfSwgJ2EnKTsgLy8gLT4ge2E6IDF9CiAgICAgICAgICogcGljayh7YTogMSwgYjogMiwgYzogM30sIFsnYicsICdjJ10pIC8vIC0+IHtiOiAyLCBjOiAzfQogICAgICAgICAqIHBpY2soe2E6IDEsIGI6IDIsIGM6IDMsIGQ6IDR9LCBmdW5jdGlvbiAodmFsLCBrZXkpIHsKICAgICAgICAgKiAgICAgcmV0dXJuIHZhbCAlIDI7CiAgICAgICAgICogfSk7IC8vIC0+IHthOiAxLCBjOiAzfQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcGljaygKICAgICAgICAgKiAgICAgb2JqZWN0OiBhbnksCiAgICAgICAgICogICAgIGZpbHRlcjogc3RyaW5nIHwgc3RyaW5nW10gfCBGdW5jdGlvbiwKICAgICAgICAgKiApOiBhbnk7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlzU3RyIGlzQXJyIGNvbnRhaW4gZWFjaCAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgZmlsdGVyLCBvbWl0KSB7CiAgICAgICAgICAgIGlmIChpc1N0cihmaWx0ZXIpKSBmaWx0ZXIgPSBbZmlsdGVyXTsKCiAgICAgICAgICAgIGlmIChpc0FycihmaWx0ZXIpKSB7CiAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGZpbHRlcjsKCiAgICAgICAgICAgICAgICBmaWx0ZXIgPSBmdW5jdGlvbih2YWwsIGtleSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250YWluKGtleXMsIGtleSk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgcmV0ID0ge307CgogICAgICAgICAgICB2YXIgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWwsIGtleSkgewogICAgICAgICAgICAgICAgaWYgKGZpbHRlcih2YWwsIGtleSkpIHJldFtrZXldID0gdmFsOwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgaWYgKG9taXQpIHsKICAgICAgICAgICAgICAgIGl0ZXJhdGVlID0gZnVuY3Rpb24odmFsLCBrZXkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRlcih2YWwsIGtleSkpIHJldFtrZXldID0gdmFsOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZWFjaChvYmosIGl0ZXJhdGVlKTsKICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gb21pdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8ub21pdCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIE9wcG9zaXRlIG9mIHBpY2suCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8b2JqICAgfFNvdXJjZSBvYmplY3QgIHwKICAgICAgICAgKiB8ZmlsdGVyfE9iamVjdCBmaWx0ZXIgIHwKICAgICAgICAgKiB8cmV0dXJufEZpbHRlcmVkIG9iamVjdHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIG9taXQoe2E6IDEsIGI6IDJ9LCAnYScpOyAvLyAtPiB7YjogMn0KICAgICAgICAgKiBvbWl0KHthOiAxLCBiOiAyLCBjOiAzfSwgWydiJywgJ2MnXSkgLy8gLT4ge2E6IDF9CiAgICAgICAgICogb21pdCh7YTogMSwgYjogMiwgYzogMywgZDogNH0sIGZ1bmN0aW9uICh2YWwsIGtleSkgewogICAgICAgICAqICAgICByZXR1cm4gdmFsICUgMjsKICAgICAgICAgKiB9KTsgLy8gLT4ge2I6IDIsIGQ6IDR9CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBvbWl0KG9iajogYW55LCBmaWx0ZXI6IHN0cmluZyB8IHN0cmluZ1tdIHwgRnVuY3Rpb24pOiBhbnk7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHBpY2sgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihvYmosIGZpbHRlcikgewogICAgICAgICAgICByZXR1cm4gcGljayhvYmosIGZpbHRlciwgdHJ1ZSk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHBhcnRpYWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIHBhcnRpYWwgPSBfLnBhcnRpYWwgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBQYXJ0aWFsbHkgYXBwbHkgYSBmdW5jdGlvbiBieSBmaWxsaW5nIGluIGdpdmVuIGFyZ3VtZW50cy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxmbiAgICAgICAgIHxGdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkgYXJndW1lbnRzIHRvfAogICAgICAgICAqIHwuLi5wYXJ0aWFsc3xBcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQgICAgICAgfAogICAgICAgICAqIHxyZXR1cm4gICAgIHxOZXcgcGFydGlhbGx5IGFwcGxpZWQgZnVuY3Rpb24gICAgICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3Qgc3ViNSA9IHBhcnRpYWwoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIgLSBhIH0sIDUpOwogICAgICAgICAqIHN1YjUoMjApOyAvLyAtPiAxNQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcGFydGlhbChmbjogRnVuY3Rpb24sIC4uLnBhcnRpYWxzOiBhbnlbXSk6IEZ1bmN0aW9uOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiByZXN0QXJncyB0b0FyciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IHJlc3RBcmdzKGZ1bmN0aW9uKGZuLCBwYXJ0aWFscykgewogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtdOwogICAgICAgICAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KHBhcnRpYWxzKTsKICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdCh0b0Fycihhcmd1bWVudHMpKTsKICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmdzKTsKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG9uY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIG9uY2UgPSBfLm9uY2UgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDcmVhdGUgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgb25jZS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8Zm4gICAgfEZ1bmN0aW9uIHRvIHJlc3RyaWN0ICAgfAogICAgICAgICAqIHxyZXR1cm58TmV3IHJlc3RyaWN0ZWQgZnVuY3Rpb258CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBmdW5jdGlvbiBpbml0KCkge307CiAgICAgICAgICogY29uc3QgaW5pdE9uY2UgPSBvbmNlKGluaXQpOwogICAgICAgICAqIGluaXRPbmNlKCk7CiAgICAgICAgICogaW5pdE9uY2UoKTsgLy8gLT4gaW5pdCBpcyBpbnZva2VkIG9uY2UKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG9uY2UoZm46IEZ1bmN0aW9uKTogRnVuY3Rpb247CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHBhcnRpYWwgYmVmb3JlIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gcGFydGlhbChiZWZvcmUsIDIpOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRW1pdHRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgRW1pdHRlciA9IF8uRW1pdHRlciA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEV2ZW50IGVtaXR0ZXIgY2xhc3Mgd2hpY2ggcHJvdmlkZXMgb2JzZXJ2ZXIgcGF0dGVybi4KICAgICAgICAgKgogICAgICAgICAqICMjIyBvbgogICAgICAgICAqCiAgICAgICAgICogQmluZCBldmVudC4KICAgICAgICAgKgogICAgICAgICAqICMjIyBvZmYKICAgICAgICAgKgogICAgICAgICAqIFVuYmluZCBldmVudC4KICAgICAgICAgKgogICAgICAgICAqICMjIyBvbmNlCiAgICAgICAgICoKICAgICAgICAgKiBCaW5kIGV2ZW50IHRoYXQgdHJpZ2dlciBvbmNlLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgfERlc2MgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8ZXZlbnQgICB8RXZlbnQgbmFtZSAgICB8CiAgICAgICAgICogfGxpc3RlbmVyfEV2ZW50IGxpc3RlbmVyfAogICAgICAgICAqCiAgICAgICAgICogIyMjIGVtaXQKICAgICAgICAgKgogICAgICAgICAqIEVtaXQgZXZlbnQuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGV2ZW50ICB8RXZlbnQgbmFtZSAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8Li4uYXJnc3xBcmd1bWVudHMgcGFzc2VkIHRvIGxpc3RlbmVyfAogICAgICAgICAqCiAgICAgICAgICogIyMjIG1peGluCiAgICAgICAgICoKICAgICAgICAgKiBbc3RhdGljXSBNaXhpbiBvYmplY3QgY2xhc3MgbWV0aG9kcy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lfERlc2MgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLXwtLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG9iaiB8T2JqZWN0IHRvIG1peGlufAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3QgZXZlbnQgPSBuZXcgRW1pdHRlcigpOwogICAgICAgICAqIGV2ZW50Lm9uKCd0ZXN0JywgZnVuY3Rpb24gKCkgeyBjb25zb2xlLmxvZygndGVzdCcpIH0pOwogICAgICAgICAqIGV2ZW50LmVtaXQoJ3Rlc3QnKTsgLy8gTG9ncyBvdXQgJ3Rlc3QnLgogICAgICAgICAqIEVtaXR0ZXIubWl4aW4oe30pOwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgY2xhc3MgRW1pdHRlciB7CiAgICAgICAgICogICAgIG9uKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiBGdW5jdGlvbik6IEVtaXR0ZXI7CiAgICAgICAgICogICAgIG9mZihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogRnVuY3Rpb24pOiBFbWl0dGVyOwogICAgICAgICAqICAgICBvbmNlKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiBGdW5jdGlvbik6IEVtaXR0ZXI7CiAgICAgICAgICogICAgIGVtaXQoZXZlbnQ6IHN0cmluZyk6IEVtaXR0ZXI7CiAgICAgICAgICogICAgIHN0YXRpYyBtaXhpbihvYmo6IGFueSk6IGFueTsKICAgICAgICAgKiB9CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIENsYXNzIGhhcyBlYWNoIHNsaWNlIG9uY2UgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBDbGFzcygKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gRW1pdHRlcigpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMgPSB0aGlzLl9ldmVudHMgfHwge307CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgb246IGZ1bmN0aW9uKGV2ZW50LCBsaXN0ZW5lcikgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tldmVudF0gPSB0aGlzLl9ldmVudHNbZXZlbnRdIHx8IFtdOwoKICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbZXZlbnRdLnB1c2gobGlzdGVuZXIpOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBvZmY6IGZ1bmN0aW9uKGV2ZW50LCBsaXN0ZW5lcikgewogICAgICAgICAgICAgICAgICAgIGlmICghaGFzKHRoaXMuX2V2ZW50cywgZXZlbnQpKSByZXR1cm47CgogICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1tldmVudF0uc3BsaWNlKAogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbZXZlbnRdLmluZGV4T2YobGlzdGVuZXIpLAogICAgICAgICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgb25jZTogZnVuY3Rpb24oZXZlbnQsIGxpc3RlbmVyKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbihldmVudCwgb25jZShsaXN0ZW5lcikpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGVtaXQ6IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXModGhpcy5fZXZlbnRzLCBldmVudCkpIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IHNsaWNlKGFyZ3VtZW50cywgMSk7CiAgICAgICAgICAgICAgICAgICAgZWFjaCgKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzW2V2ZW50XSwKICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwuYXBwbHkodGhpcywgYXJncyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBtaXhpbjogZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICAgICAgICAgICAgZWFjaChbJ29uJywgJ29mZicsICdvbmNlJywgJ2VtaXQnXSwgZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9ialt2YWxdID0gZXhwb3J0cy5wcm90b3R5cGVbdmFsXTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBvYmouX2V2ZW50cyA9IG9iai5fZXZlbnRzIHx8IHt9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvZ2dlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uTG9nZ2VyID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogU2ltcGxlIGxvZ2dlciB3aXRoIGxldmVsIGZpbHRlci4KICAgICAgICAgKgogICAgICAgICAqICMjIyBjb25zdHJ1Y3RvcgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgICAgfERlc2MgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxuYW1lICAgICAgIHxMb2dnZXIgbmFtZSB8CiAgICAgICAgICogfGxldmVsPURFQlVHfExvZ2dlciBsZXZlbHwKICAgICAgICAgKgogICAgICAgICAqICMjIyBzZXRMZXZlbAogICAgICAgICAqCiAgICAgICAgICogU2V0IGxldmVsLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgfERlc2MgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS18LS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxsZXZlbHxMb2dnZXIgbGV2ZWx8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgZ2V0TGV2ZWwKICAgICAgICAgKgogICAgICAgICAqIEdldCBjdXJyZW50IGxldmVsLgogICAgICAgICAqCiAgICAgICAgICogIyMjIHRyYWNlLCBkZWJ1ZywgaW5mbywgd2FybiwgZXJyb3IKICAgICAgICAgKgogICAgICAgICAqIExvZ2dpbmcgbWV0aG9kcy4KICAgICAgICAgKgogICAgICAgICAqICMjIyBMb2cgTGV2ZWxzCiAgICAgICAgICoKICAgICAgICAgKiBUUkFDRSwgREVCVUcsIElORk8sIFdBUk4sIEVSUk9SIGFuZCBTSUxFTlQuCiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCdsaWNpYScsIExvZ2dlci5sZXZlbC5FUlJPUik7CiAgICAgICAgICogbG9nZ2VyLnRyYWNlKCd0ZXN0Jyk7CiAgICAgICAgICoKICAgICAgICAgKiAvLyBGb3JtYXQgb3V0cHV0LgogICAgICAgICAqIGxvZ2dlci5mb3JtYXR0ZXIgPSBmdW5jdGlvbiAodHlwZSwgYXJnTGlzdCkgewogICAgICAgICAqICAgICBhcmdMaXN0LnB1c2gobmV3IERhdGUoKS5nZXRUaW1lKCkpOwogICAgICAgICAqCiAgICAgICAgICogICAgIHJldHVybiBhcmdMaXN0OwogICAgICAgICAqIH07CiAgICAgICAgICoKICAgICAgICAgKiBsb2dnZXIub24oJ2FsbCcsIGZ1bmN0aW9uICh0eXBlLCBhcmdMaXN0KSB7CiAgICAgICAgICogICAgIC8vIEl0J3Mgbm90IGFmZmVjdGVkIGJ5IGxvZyBsZXZlbC4KICAgICAgICAgKiB9KTsKICAgICAgICAgKgogICAgICAgICAqIGxvZ2dlci5vbignZGVidWcnLCBmdW5jdGlvbiAoYXJnTGlzdCkgewogICAgICAgICAqICAgICAvLyBBZmZlY3RlZCBieSBsb2cgbGV2ZWwuCiAgICAgICAgICogfSk7CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBjbGFzcyBMb2dnZXIgZXh0ZW5kcyBFbWl0dGVyIHsKICAgICAgICAgKiAgICAgbmFtZTogc3RyaW5nOwogICAgICAgICAqICAgICBmb3JtYXR0ZXIodHlwZTogc3RyaW5nLCBhcmdMaXN0OiBhbnlbXSk6IGFueVtdOwogICAgICAgICAqICAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIGxldmVsPzogc3RyaW5nIHwgbnVtYmVyKTsKICAgICAgICAgKiAgICAgc2V0TGV2ZWwobGV2ZWw6IHN0cmluZyB8IG51bWJlcik6IExvZ2dlcjsKICAgICAgICAgKiAgICAgZ2V0TGV2ZWwoKTogbnVtYmVyOwogICAgICAgICAqICAgICB0cmFjZSguLi5hcmdzOiBhbnlbXSk6IExvZ2dlcjsKICAgICAgICAgKiAgICAgZGVidWcoLi4uYXJnczogYW55W10pOiBMb2dnZXI7CiAgICAgICAgICogICAgIGluZm8oLi4uYXJnczogYW55W10pOiBMb2dnZXI7CiAgICAgICAgICogICAgIHdhcm4oLi4uYXJnczogYW55W10pOiBMb2dnZXI7CiAgICAgICAgICogICAgIGVycm9yKC4uLmFyZ3M6IGFueVtdKTogTG9nZ2VyOwogICAgICAgICAqICAgICBzdGF0aWMgbGV2ZWw6IEVudW07CiAgICAgICAgICogfQogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBFbWl0dGVyIEVudW0gdG9BcnIgaXNVbmRlZiBjbG9uZSBpc1N0ciBpc051bSAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IEVtaXR0ZXIuZXh0ZW5kKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbiBMb2dnZXIobmFtZSwgbGV2ZWwpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TGV2ZWwoaXNVbmRlZihsZXZlbCkgPyBleHBvcnRzLmxldmVsLkRFQlVHIDogbGV2ZWwpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbFN1cGVyKEVtaXR0ZXIsICdpbml0aWFsaXplJywgYXJndW1lbnRzKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBzZXRMZXZlbDogZnVuY3Rpb24obGV2ZWwpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNTdHIobGV2ZWwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gZXhwb3J0cy5sZXZlbFtsZXZlbC50b1VwcGVyQ2FzZSgpXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxldmVsKSB0aGlzLl9sZXZlbCA9IGxldmVsOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmIChpc051bShsZXZlbCkpIHRoaXMuX2xldmVsID0gbGV2ZWw7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZ2V0TGV2ZWw6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9sZXZlbDsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uKHR5cGUsIGFyZ0xpc3QpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJnTGlzdDsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB0cmFjZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvZygndHJhY2UnLCBhcmd1bWVudHMpOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGRlYnVnOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9nKCdkZWJ1ZycsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgaW5mbzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvZygnaW5mbycsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgd2FybjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvZygnd2FybicsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2coJ2Vycm9yJywgYXJndW1lbnRzKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBfbG9nOiBmdW5jdGlvbih0eXBlLCBhcmdMaXN0KSB7CiAgICAgICAgICAgICAgICAgICAgYXJnTGlzdCA9IHRvQXJyKGFyZ0xpc3QpOwogICAgICAgICAgICAgICAgICAgIGlmIChhcmdMaXN0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdhbGwnLCB0eXBlLCBjbG9uZShhcmdMaXN0KSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cG9ydHMubGV2ZWxbdHlwZS50b1VwcGVyQ2FzZSgpXSA8IHRoaXMuX2xldmVsKSByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQodHlwZSwgY2xvbmUoYXJnTGlzdCkpOwogICAgICAgICAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi8KCiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnNvbGVNZXRob2QgPSB0eXBlID09PSAnZGVidWcnID8gY29uc29sZS5sb2cgOiBjb25zb2xlW3R5cGVdOwogICAgICAgICAgICAgICAgICAgIGNvbnNvbGVNZXRob2QuYXBwbHkoY29uc29sZSwgdGhpcy5mb3JtYXR0ZXIodHlwZSwgYXJnTGlzdCkpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBsZXZlbDogbmV3IEVudW0oewogICAgICAgICAgICAgICAgICAgIFRSQUNFOiAwLAogICAgICAgICAgICAgICAgICAgIERFQlVHOiAxLAogICAgICAgICAgICAgICAgICAgIElORk86IDIsCiAgICAgICAgICAgICAgICAgICAgV0FSTjogMywKICAgICAgICAgICAgICAgICAgICBFUlJPUjogNCwKICAgICAgICAgICAgICAgICAgICBTSUxFTlQ6IDUKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgIH0KICAgICAgICApOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIFN0YXRlID0gXy5TdGF0ZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFNpbXBsZSBzdGF0ZSBtYWNoaW5lLgogICAgICAgICAqCiAgICAgICAgICogRXh0ZW5kIGZyb20gRW1pdHRlci4KICAgICAgICAgKgogICAgICAgICAqICMjIyBjb25zdHJ1Y3RvcgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICB8RGVzYyAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxpbml0aWFsfEluaXRpYWwgc3RhdGUgICAgICAgICB8CiAgICAgICAgICogfGV2ZW50cyB8RXZlbnRzIHRvIGNoYW5nZSBzdGF0ZXwKICAgICAgICAgKgogICAgICAgICAqICMjIyBpcwogICAgICAgICAqCiAgICAgICAgICogQ2hlY2sgY3VycmVudCBzdGF0ZS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHN0YXRlIHxTdGF0ZSB0byBjaGVjayAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58VHJ1ZSBpZiBjdXJyZW50IHN0YXRlIGVxdWFscyBnaXZlbiB2YWx1ZXwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnN0IHN0YXRlID0gbmV3IFN0YXRlKCdlbXB0eScsIHsKICAgICAgICAgKiAgICAgbG9hZDoge2Zyb206ICdlbXB0eScsIHRvOiAncGF1c2UnfSwKICAgICAgICAgKiAgICAgcGxheToge2Zyb206ICdwYXVzZScsIHRvOiAncGxheSd9LAogICAgICAgICAqICAgICBwYXVzZToge2Zyb206IFsncGxheScsICdlbXB0eSddLCB0bzogJ3BhdXNlJ30sCiAgICAgICAgICogICAgIHVubG9hZDoge2Zyb206IFsncGxheScsICdwYXVzZSddLCB0bzogJ2VtcHR5J30KICAgICAgICAgKiB9KTsKICAgICAgICAgKgogICAgICAgICAqIHN0YXRlLmlzKCdlbXB0eScpOyAvLyAtPiB0cnVlCiAgICAgICAgICogc3RhdGUubG9hZCgpOwogICAgICAgICAqIHN0YXRlLmlzKCdwYXVzZScpOyAvLyAtPiB0cnVlCiAgICAgICAgICogc3RhdGUub24oJ3BsYXknLCBmdW5jdGlvbiAoc3JjKSB7CiAgICAgICAgICogICAgIGNvbnNvbGUubG9nKHNyYyk7IC8vIC0+ICdldXN0aWEnCiAgICAgICAgICogfSk7CiAgICAgICAgICogc3RhdGUub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVyciwgZXZlbnQpIHsKICAgICAgICAgKiAgICAgLy8gRXJyb3IgaGFuZGxlcgogICAgICAgICAqIH0pOwogICAgICAgICAqIHN0YXRlLnBsYXkoJ2V1c3RpYScpOwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgY2xhc3MgU3RhdGUgZXh0ZW5kcyBFbWl0dGVyIHsKICAgICAgICAgKiAgICAgY29uc3RydWN0b3IoaW5pdGlhbDogc3RyaW5nLCBldmVudHM6IGFueSk7CiAgICAgICAgICogICAgIGlzKHN0YXRlOiBzdHJpbmcpOiBib29sZWFuOwogICAgICAgICAqICAgICBbZXZlbnQ6IHN0cmluZ106IGFueTsKICAgICAgICAgKiB9CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIEVtaXR0ZXIgZWFjaCBzb21lIHRvQXJyIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gRW1pdHRlci5leHRlbmQoewogICAgICAgICAgICBjbGFzc05hbWU6ICdTdGF0ZScsCiAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGluaXRpYWwsIGV2ZW50cykgewogICAgICAgICAgICAgICAgdGhpcy5jYWxsU3VwZXIoRW1pdHRlciwgJ2luaXRpYWxpemUnKTsKICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IGluaXRpYWw7CiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICAgICAgICAgICAgICBlYWNoKGV2ZW50cywgZnVuY3Rpb24oZXZlbnQsIGtleSkgewogICAgICAgICAgICAgICAgICAgIHNlbGZba2V5XSA9IGJ1aWxkRXZlbnQoa2V5LCBldmVudCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgaXM6IGZ1bmN0aW9uKHN0YXRlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50ID09PSBzdGF0ZTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBmdW5jdGlvbiBidWlsZEV2ZW50KG5hbWUsIGV2ZW50KSB7CiAgICAgICAgICAgIHZhciBmcm9tID0gdG9BcnIoZXZlbnQuZnJvbSk7CiAgICAgICAgICAgIHZhciB0byA9IGV2ZW50LnRvOwogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IHRvQXJyKGFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICBhcmdzLnVuc2hpZnQobmFtZSk7CiAgICAgICAgICAgICAgICB2YXIgaGFzRXZlbnQgPSBzb21lKAogICAgICAgICAgICAgICAgICAgIGZyb20sCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQgPT09IHZhbDsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHRoaXMKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKGhhc0V2ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdG87CiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0LmFwcGx5KHRoaXMsIGFyZ3MpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoCiAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcih0aGlzLmN1cnJlbnQgKyAnID0+ICcgKyB0byArICcgZXJyb3InKSwKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvbWlzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgUHJvbWlzZSA9IF8uUHJvbWlzZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIExpZ2h0d2VpZ2h0IFByb21pc2UgaW1wbGVtZW50YXRpb24uCiAgICAgICAgICoKICAgICAgICAgKiBbUHJvbWlzZXMgc3BlY10oaHR0cHM6Ly9naXRodWIuY29tL3Byb21pc2VzLWFwbHVzL3Byb21pc2VzLXNwZWMpCiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBmdW5jdGlvbiBnZXQodXJsKSB7CiAgICAgICAgICogICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgICAgICogICAgICAgICBjb25zdCByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICAgKiAgICAgICAgIHJlcS5vcGVuKCdHRVQnLCB1cmwpOwogICAgICAgICAqICAgICAgICAgcmVxLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgKiAgICAgICAgICAgICByZXEuc3RhdHVzID09IDIwMCA/IHJlc29sdmUocmVxLnJlc3BvbnNlKSA6IHJlamVjdChFcnJvcihyZXEuc3RhdHVzVGV4dCkpOwogICAgICAgICAqICAgICAgICAgfTsKICAgICAgICAgKiAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkgeyByZWplY3QoRXJyb3IoJ05ldHdvcmsgRXJyb3InKSkgfTsKICAgICAgICAgKiAgICAgICAgIHJlcS5zZW5kKCk7CiAgICAgICAgICogICAgIH0pOwogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGdldCgndGVzdC5qc29uJykudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7CiAgICAgICAgICogICAgIC8vIERvIHNvbWV0aGluZy4uLgogICAgICAgICAqIH0pOwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIENsYXNzIGlzT2JqIGlzRm4gU3RhdGUgYmluZCBuZXh0VGljayBub29wIHRvQXJyIAogICAgICAgICAqLwoKICAgICAgICB2YXIgUHJvbWlzZSA9IChleHBvcnRzID0gQ2xhc3MoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uIFByb21pc2UoZm4pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT2JqKHRoaXMpKQogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9taXNlcyBtdXN0IGJlIGNvbnN0cnVjdGVkIHZpYSBuZXcnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRm4oZm4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKGZuICsgJyBpcyBub3QgYSBmdW5jdGlvbicpOwogICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZSA9IG5ldyBTdGF0ZSgncGVuZGluZycsIHsKICAgICAgICAgICAgICAgICAgICAgICAgZnVsZmlsbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbTogJ3BlbmRpbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG86ICdmdWxmaWxsZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbTogJ3BlbmRpbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG86ICdyZWplY3RlZCcKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgYWRvcHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb206ICdwZW5kaW5nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvOiAnYWRvcHRlZCcKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgIC5vbignZnVsZmlsbCcsIGFzc2lnblZhbCkKICAgICAgICAgICAgICAgICAgICAgICAgLm9uKCdyZWplY3QnLCBhc3NpZ25WYWwpCiAgICAgICAgICAgICAgICAgICAgICAgIC5vbignYWRvcHQnLCBhc3NpZ25WYWwpOwoKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhc3NpZ25WYWwodmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3ZhbHVlID0gdmFsOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmVycmVkcyA9IFtdOwogICAgICAgICAgICAgICAgICAgIGRvUmVzb2x2ZShmbiwgdGhpcyk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgY2F0Y2g6IGZ1bmN0aW9uKG9uUmVqZWN0ZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQpOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHRoZW46IGZ1bmN0aW9uKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShub29wKTsKICAgICAgICAgICAgICAgICAgICBoYW5kbGUodGhpcywgbmV3IEhhbmRsZXIob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYWxsOiBmdW5jdGlvbihhcnIpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IHRvQXJyKGFycik7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHJldHVybiByZXNvbHZlKFtdKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbWFpbmluZyA9IGFyZ3MubGVuZ3RoOwoKICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzKGksIHZhbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsICYmIChpc09iaih2YWwpIHx8IGlzRm4odmFsKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRoZW4gPSB2YWwudGhlbjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0ZuKHRoZW4pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuLmNhbGwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMoaSwgdmFsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1tpXSA9IHZhbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLS1yZW1haW5pbmcgPT09IDApIHJlc29sdmUoYXJncyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyhpLCBhcmdzW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHJlc29sdmU6IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICAgICAgICAgIGlmICh2YWwgJiYgaXNPYmoodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgPT09IFByb21pc2UpIHJldHVybiB2YWw7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWwpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHJlamVjdDogZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewogICAgICAgICAgICAgICAgICAgICAgICByZWplY3QodmFsKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICByYWNlOiBmdW5jdGlvbih2YWx1ZXMpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB2YWx1ZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1tpXS50aGVuKHJlc29sdmUsIHJlamVjdCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICkpOwogICAgICAgIHZhciBIYW5kbGVyID0gQ2xhc3MoewogICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbiBIYW5kbGVyKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSB7CiAgICAgICAgICAgICAgICB0aGlzLm9uRnVsZmlsbGVkID0gaXNGbihvbkZ1bGZpbGxlZCkgPyBvbkZ1bGZpbGxlZCA6IG51bGw7CiAgICAgICAgICAgICAgICB0aGlzLm9uUmVqZWN0ZWQgPSBpc0ZuKG9uUmVqZWN0ZWQpID8gb25SZWplY3RlZCA6IG51bGw7CiAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIGZ1bmN0aW9uIHJlamVjdChzZWxmLCBlcnIpIHsKICAgICAgICAgICAgc2VsZi5fc3RhdGUucmVqZWN0KGVycik7CgogICAgICAgICAgICBmaW5hbGUoc2VsZik7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiByZXNvbHZlKHNlbGYsIHZhbCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gc2VsZikKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBIHByb21pc2UgY2Fubm90IGJlIHJlc29sdmVkIHdpdGggaXRzZWxmJyk7CgogICAgICAgICAgICAgICAgaWYgKHZhbCAmJiAoaXNPYmoodmFsKSB8fCBpc0ZuKHZhbCkpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRoZW4gPSB2YWwudGhlbjsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIFByb21pc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RhdGUuYWRvcHQodmFsKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaW5hbGUoc2VsZik7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoaXNGbih0aGVuKSkgcmV0dXJuIGRvUmVzb2x2ZShiaW5kKHRoZW4sIHZhbCksIHNlbGYpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlLmZ1bGZpbGwodmFsKTsKCiAgICAgICAgICAgICAgICBmaW5hbGUoc2VsZik7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIHJlamVjdChzZWxmLCBlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZmluYWxlKHNlbGYpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHNlbGYuX2RlZmVycmVkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgaGFuZGxlKHNlbGYsIHNlbGYuX2RlZmVycmVkc1tpXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHNlbGYuX2RlZmVycmVkcyA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBoYW5kbGUoc2VsZiwgZGVmZXJyZWQpIHsKICAgICAgICAgICAgd2hpbGUgKHNlbGYuX3N0YXRlLmlzKCdhZG9wdGVkJykpIHsKICAgICAgICAgICAgICAgIHNlbGYgPSBzZWxmLl92YWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHNlbGYuX3N0YXRlLmlzKCdwZW5kaW5nJykpIHJldHVybiBzZWxmLl9kZWZlcnJlZHMucHVzaChkZWZlcnJlZCk7CiAgICAgICAgICAgIHNlbGYuX2hhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICBuZXh0VGljayhmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBpc0Z1bGZpbGxlZCA9IHNlbGYuX3N0YXRlLmlzKCdmdWxmaWxsZWQnKTsKCiAgICAgICAgICAgICAgICB2YXIgY2IgPSBpc0Z1bGZpbGxlZCA/IGRlZmVycmVkLm9uRnVsZmlsbGVkIDogZGVmZXJyZWQub25SZWplY3RlZDsKICAgICAgICAgICAgICAgIGlmIChjYiA9PT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGlzRnVsZmlsbGVkID8gcmVzb2x2ZSA6IHJlamVjdCkoCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnByb21pc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3ZhbHVlCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIHZhciByZXQ7CgogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICByZXQgPSBjYihzZWxmLl92YWx1ZSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChkZWZlcnJlZC5wcm9taXNlLCBlKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXNvbHZlKGRlZmVycmVkLnByb21pc2UsIHJldCk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZG9SZXNvbHZlKGZuLCBzZWxmKSB7CiAgICAgICAgICAgIHZhciBkb25lID0gZmFsc2U7CgogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgZm4oCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb25lKSByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNlbGYsIHZhbCk7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihyZWFzb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChzZWxmLCByZWFzb24pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIGlmIChkb25lKSByZXR1cm47CiAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICAgICAgICAgIHJlamVjdChzZWxmLCBlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN0b3JlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5TdG9yZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIE1lbW9yeSBzdG9yYWdlLgogICAgICAgICAqCiAgICAgICAgICogRXh0ZW5kIGZyb20gRW1pdHRlci4KICAgICAgICAgKgogICAgICAgICAqICMjIyBjb25zdHJ1Y3RvcgogICAgICAgICAqCiAgICAgICAgICogfE5hbWV8RGVzYyAgICAgICAgfAogICAgICAgICAqIHwtLS0tfC0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8ZGF0YXxJbml0aWFsIGRhdGF8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgc2V0CiAgICAgICAgICoKICAgICAgICAgKiBTZXQgdmFsdWUuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZXxEZXNjICAgICAgICB8CiAgICAgICAgICogfC0tLS18LS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxrZXkgfFZhbHVlIGtleSAgIHwKICAgICAgICAgKiB8dmFsIHxWYWx1ZSB0byBzZXR8CiAgICAgICAgICoKICAgICAgICAgKiBTZXQgdmFsdWVzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHZhbHVlc3xLZXkgdmFsdWUgcGFpcnN8CiAgICAgICAgICoKICAgICAgICAgKiBUaGlzIGVtaXQgYSBjaGFuZ2UgZXZlbnQgd2hlbmV2ZXIgaXMgY2FsbGVkLgogICAgICAgICAqCiAgICAgICAgICogIyMjIGdldAogICAgICAgICAqCiAgICAgICAgICogR2V0IHZhbHVlLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGtleSAgIHxWYWx1ZSBrZXkgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxWYWx1ZSBvZiBnaXZlbiBrZXl8CiAgICAgICAgICoKICAgICAgICAgKiBHZXQgdmFsdWVzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGtleXMgIHxBcnJheSBvZiBrZXlzICB8CiAgICAgICAgICogfHJldHVybnxLZXkgdmFsdWUgcGFpcnN8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgcmVtb3ZlCiAgICAgICAgICoKICAgICAgICAgKiBSZW1vdmUgdmFsdWUuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZXxEZXNjICAgICAgICAgfAogICAgICAgICAqIHwtLS0tfC0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGtleSB8S2V5IHRvIHJlbW92ZXwKICAgICAgICAgKgogICAgICAgICAqICMjIyBjbGVhcgogICAgICAgICAqCiAgICAgICAgICogQ2xlYXIgYWxsIGRhdGEuCiAgICAgICAgICoKICAgICAgICAgKiAjIyMgZWFjaAogICAgICAgICAqCiAgICAgICAgICogSXRlcmF0ZSBvdmVyIHZhbHVlcy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGZuICB8RnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9ufAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3Qgc3RvcmUgPSBuZXcgU3RvcmUoJ3Rlc3QnKTsKICAgICAgICAgKiBzdG9yZS5zZXQoJ3VzZXInLCB7bmFtZTogJ2xpY2lhJ30pOwogICAgICAgICAqIHN0b3JlLmdldCgndXNlcicpLm5hbWU7IC8vIC0+ICdsaWNpYScKICAgICAgICAgKiBzdG9yZS5jbGVhcigpOwogICAgICAgICAqIHN0b3JlLmVhY2goZnVuY3Rpb24gKHZhbCwga2V5KSB7CiAgICAgICAgICogICAgIC8vIERvIHNvbWV0aGluZy4KICAgICAgICAgKiB9KTsKICAgICAgICAgKiBzdG9yZS5vbignY2hhbmdlJywgZnVuY3Rpb24gKGtleSwgbmV3VmFsLCBvbGRWYWwpIHsKICAgICAgICAgKiAgICAgLy8gSXQgdHJpZ2dlcnMgd2hlbmV2ZXIgc2V0IGlzIGNhbGxlZC4KICAgICAgICAgKiB9KTsKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGNsYXNzIFN0b3JlIGV4dGVuZHMgRW1pdHRlciB7CiAgICAgICAgICogICAgIGNvbnN0cnVjdG9yKGRhdGE/OiB7fSk7CiAgICAgICAgICogICAgIHNldChrZXk6IHN0cmluZywgdmFsOiBhbnkpOiB2b2lkOwogICAgICAgICAqICAgICBzZXQodmFsdWVzOiB7fSk6IHZvaWQ7CiAgICAgICAgICogICAgIGdldChrZXk6IHN0cmluZyk6IGFueTsKICAgICAgICAgKiAgICAgZ2V0KGtleXM6IHN0cmluZ1tdKToge307CiAgICAgICAgICogICAgIHJlbW92ZShrZXk6IHN0cmluZyk6IHZvaWQ7CiAgICAgICAgICogICAgIHJlbW92ZShrZXlzOiBzdHJpbmdbXSk6IHZvaWQ7CiAgICAgICAgICogICAgIGNsZWFyKCk6IHZvaWQ7CiAgICAgICAgICogICAgIGVhY2goZm46ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQ7CiAgICAgICAgICogfQogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBFbWl0dGVyIGlzU3RyIGlzT2JqIGVhY2ggdG9BcnIgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBFbWl0dGVyLmV4dGVuZCh7CiAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uIFN0b3JlKGRhdGEpIHsKICAgICAgICAgICAgICAgIHRoaXMuY2FsbFN1cGVyKEVtaXR0ZXIsICdpbml0aWFsaXplJywgYXJndW1lbnRzKTsKICAgICAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhIHx8IHt9OwogICAgICAgICAgICAgICAgdGhpcy5zYXZlKHRoaXMuX2RhdGEpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKGtleSwgdmFsKSB7CiAgICAgICAgICAgICAgICB2YXIgZGF0YTsKCiAgICAgICAgICAgICAgICBpZiAoaXNTdHIoa2V5KSkgewogICAgICAgICAgICAgICAgICAgIGRhdGEgPSB7fTsKICAgICAgICAgICAgICAgICAgICBkYXRhW2tleV0gPSB2YWw7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqKGtleSkpIHsKICAgICAgICAgICAgICAgICAgICBkYXRhID0ga2V5OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKICAgICAgICAgICAgICAgIGVhY2goZGF0YSwgZnVuY3Rpb24odmFsLCBrZXkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgb2xkVmFsID0gc2VsZi5fZGF0YVtrZXldOwogICAgICAgICAgICAgICAgICAgIHNlbGYuX2RhdGFba2V5XSA9IHZhbDsKICAgICAgICAgICAgICAgICAgICBzZWxmLmVtaXQoJ2NoYW5nZScsIGtleSwgdmFsLCBvbGRWYWwpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB0aGlzLnNhdmUodGhpcy5fZGF0YSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGdldDogZnVuY3Rpb24oa2V5KSB7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7CiAgICAgICAgICAgICAgICBpZiAoaXNTdHIoa2V5KSkgcmV0dXJuIGRhdGFba2V5XTsKICAgICAgICAgICAgICAgIHZhciByZXQgPSB7fTsKICAgICAgICAgICAgICAgIGVhY2goa2V5LCBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgICAgICAgICByZXRbdmFsXSA9IGRhdGFbdmFsXTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbihrZXkpIHsKICAgICAgICAgICAgICAgIGtleSA9IHRvQXJyKGtleSk7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7CiAgICAgICAgICAgICAgICBlYWNoKGtleSwgZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGRhdGFbdmFsXTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgdGhpcy5zYXZlKGRhdGEpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBjbGVhcjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhID0ge307CiAgICAgICAgICAgICAgICB0aGlzLnNhdmUodGhpcy5fZGF0YSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGVhY2g6IGZ1bmN0aW9uKGZuKSB7CiAgICAgICAgICAgICAgICBlYWNoKHRoaXMuX2RhdGEsIGZuKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgLy8gVGhpcyBtZXRob2RzIGV4aXN0cyB0byBiZSBvdmVyd3JpdHRlbi4KICAgICAgICAgICAgc2F2ZTogZnVuY3Rpb24oZGF0YSkgewogICAgICAgICAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFR3ZWVuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5Ud2VlbiA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFR3ZWVuIGVuZ2luZSBmb3IgSmF2YVNjcmlwdCBhbmltYXRpb25zLgogICAgICAgICAqCiAgICAgICAgICogRXh0ZW5kIGZyb20gRW1pdHRlci4KICAgICAgICAgKgogICAgICAgICAqICMjIyBjb25zdHJ1Y3RvcgogICAgICAgICAqCiAgICAgICAgICogfE5hbWV8RGVzYyAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tfC0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8b2JqIHxWYWx1ZXMgdG8gdHdlZW58CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgdG8KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgIHxEZXNjICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxkZXN0aW5hdGlvbnxGaW5hbCBwcm9wZXJ0aWVzfAogICAgICAgICAqIHxkdXJhdGlvbiAgIHxUd2VlbiBkdXJhdGlvbiAgfAogICAgICAgICAqIHxlYXNlICAgICAgIHxFYXNpbmcgZnVuY3Rpb24gfAogICAgICAgICAqCiAgICAgICAgICogIyMjIHBsYXkKICAgICAgICAgKgogICAgICAgICAqIEJlZ2luIHBsYXlpbmcgZm9yd2FyZC4KICAgICAgICAgKgogICAgICAgICAqICMjIyBwYXVzZQogICAgICAgICAqCiAgICAgICAgICogUGF1c2UgdGhlIGFuaW1hdGlvbi4KICAgICAgICAgKgogICAgICAgICAqICMjIyBwYXVzZWQKICAgICAgICAgKgogICAgICAgICAqIEdldCBhbmltYXRpb24gcGF1c2VkIHN0YXRlLgogICAgICAgICAqCiAgICAgICAgICogIyMjIHByb2dyZXNzCiAgICAgICAgICoKICAgICAgICAgKiBVcGRhdGUgb3IgZ2V0IGFuaW1hdGlvbiBwcm9ncmVzcy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgIHxEZXNjICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxwcm9ncmVzc3xOdW1iZXIgYmV0d2VlbiAwIGFuZCAxfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3QgcG9zID0ge3g6IDAsIHk6IDB9OwogICAgICAgICAqCiAgICAgICAgICogY29uc3QgdHdlZW4gPSBuZXcgVHdlZW4ocG9zKTsKICAgICAgICAgKiB0d2Vlbi5vbigndXBkYXRlJywgZnVuY3Rpb24gKHRhcmdldCkgewogICAgICAgICAqICAgICBjb25zb2xlLmxvZyh0YXJnZXQueCwgdGFyZ2V0LnkpOwogICAgICAgICAqIH0pLm9uKCdlbmQnLCBmdW5jdGlvbiAodGFyZ2V0KSB7CiAgICAgICAgICogICAgIGNvbnNvbGUubG9nKHRhcmdldC54LCB0YXJnZXQueSk7IC8vIC0+IDEwMCwgMTAwCiAgICAgICAgICogfSk7CiAgICAgICAgICogdHdlZW4udG8oe3g6IDEwMCwgeTogMTAwfSwgMTAwMCwgJ2luRWxhc3RpYycpLnBsYXkoKTsKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGNsYXNzIFR3ZWVuIGV4dGVuZHMgRW1pdHRlciB7CiAgICAgICAgICogICAgIGNvbnN0cnVjdG9yKHRhcmdldDogYW55KTsKICAgICAgICAgKiAgICAgdG8ocHJvcHM6IGFueSwgZHVyYXRpb24/OiBudW1iZXIsIGVhc2U/OiBzdHJpbmcgfCBGdW5jdGlvbik6IFR3ZWVuOwogICAgICAgICAqICAgICBwcm9ncmVzcygpOiBudW1iZXI7CiAgICAgICAgICogICAgIHByb2dyZXNzKHByb2dyZXNzOiBudW1iZXIpOiBUd2VlbjsKICAgICAgICAgKiAgICAgcGxheSgpOiBUd2VlbjsKICAgICAgICAgKiAgICAgcGF1c2UoKTogVHdlZW47CiAgICAgICAgICogICAgIHBhdXNlZCgpOiBib29sZWFuOwogICAgICAgICAqIH0KICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogRW1pdHRlciBTdGF0ZSBlYXNpbmcgbm93IGVhY2ggcmFmIGlzRm4gCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBFbWl0dGVyLmV4dGVuZCh7CiAgICAgICAgICAgIGNsYXNzTmFtZTogJ1R3ZWVuJywKICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24odGFyZ2V0KSB7CiAgICAgICAgICAgICAgICB0aGlzLmNhbGxTdXBlcihFbWl0dGVyLCAnaW5pdGlhbGl6ZScsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXQ7CiAgICAgICAgICAgICAgICB0aGlzLl9kZXN0ID0ge307CiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbiA9IDA7CiAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmVzcyA9IDA7CiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW4gPSB7fTsKICAgICAgICAgICAgICAgIHRoaXMuX2RpZmYgPSB7fTsKICAgICAgICAgICAgICAgIHRoaXMuX2Vhc2UgPSBlYXNpbmdbJ2xpbmVhciddOwogICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSBuZXcgU3RhdGUoJ3BhdXNlJywgewogICAgICAgICAgICAgICAgICAgIHBsYXk6IHsKICAgICAgICAgICAgICAgICAgICAgICAgZnJvbTogJ3BhdXNlJywKICAgICAgICAgICAgICAgICAgICAgICAgdG86ICdwbGF5JwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgcGF1c2U6IHsKICAgICAgICAgICAgICAgICAgICAgICAgZnJvbTogJ3BsYXknLAogICAgICAgICAgICAgICAgICAgICAgICB0bzogJ3BhdXNlJwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9LAogICAgICAgICAgICB0bzogZnVuY3Rpb24ocHJvcHMsIGR1cmF0aW9uLCBlYXNlKSB7CiAgICAgICAgICAgICAgICB2YXIgb3JpZ2luID0ge307CiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy5fdGFyZ2V0OwogICAgICAgICAgICAgICAgdmFyIGRpZmYgPSB7fTsKICAgICAgICAgICAgICAgIGVhc2UgPSBlYXNlIHx8IHRoaXMuX2Vhc2U7CiAgICAgICAgICAgICAgICB0aGlzLl9kZXN0ID0gcHJvcHM7CiAgICAgICAgICAgICAgICB0aGlzLl9kdXJhdGlvbiA9IGR1cmF0aW9uIHx8IHRoaXMuX2R1cmF0aW9uOwogICAgICAgICAgICAgICAgdGhpcy5fZWFzZSA9IGlzRm4oZWFzZSkgPyBlYXNlIDogZWFzaW5nW2Vhc2VdOwogICAgICAgICAgICAgICAgZWFjaChwcm9wcywgZnVuY3Rpb24odmFsLCBrZXkpIHsKICAgICAgICAgICAgICAgICAgICBvcmlnaW5ba2V5XSA9IHRhcmdldFtrZXldOwogICAgICAgICAgICAgICAgICAgIGRpZmZba2V5XSA9IHZhbCAtIG9yaWdpbltrZXldOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW4gPSBvcmlnaW47CiAgICAgICAgICAgICAgICB0aGlzLl9kaWZmID0gZGlmZjsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICB9LAogICAgICAgICAgICBwcm9ncmVzczogZnVuY3Rpb24ocHJvZ3Jlc3MpIHsKICAgICAgICAgICAgICAgIHZhciBlYXNlID0gdGhpcy5fZWFzZTsKICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLl90YXJnZXQ7CiAgICAgICAgICAgICAgICB2YXIgb3JpZ2luID0gdGhpcy5fb3JpZ2luOwogICAgICAgICAgICAgICAgdmFyIGRpZmYgPSB0aGlzLl9kaWZmOwogICAgICAgICAgICAgICAgdmFyIGRlc3QgPSB0aGlzLl9kZXN0OwogICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwoKICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MgPSBwcm9ncmVzcyA8IDEgPyBwcm9ncmVzcyA6IDE7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MgPSBwcm9ncmVzczsKICAgICAgICAgICAgICAgICAgICBlYWNoKGRlc3QsIGZ1bmN0aW9uKHZhbCwga2V5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gb3JpZ2luW2tleV0gKyBkaWZmW2tleV0gKiBlYXNlKHByb2dyZXNzKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBzZWxmLmVtaXQoJ3VwZGF0ZScsIHRhcmdldCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2dyZXNzOwogICAgICAgICAgICB9LAogICAgICAgICAgICBwbGF5OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX3N0YXRlOwogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmlzKCdwbGF5JykpIHJldHVybjsKICAgICAgICAgICAgICAgIHN0YXRlLnBsYXkoKTsKICAgICAgICAgICAgICAgIHZhciBzdGFydFRpbWUgPSBub3coKTsKICAgICAgICAgICAgICAgIHZhciBwcm9ncmVzcyA9IHRoaXMuX3Byb2dyZXNzOwogICAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gdGhpcy5fZHVyYXRpb24gKiAoMSAtIHByb2dyZXNzKTsKICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLl90YXJnZXQ7CiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CgogICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVuZGVyKCkgewogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5pcygncGF1c2UnKSkgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIHZhciB0aW1lID0gbm93KCk7CiAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9ncmVzcyhwcm9ncmVzcyArICh0aW1lIC0gc3RhcnRUaW1lKSAvIGR1cmF0aW9uKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuX3Byb2dyZXNzID09PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnBhdXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgnZW5kJywgdGFyZ2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcmFmKHJlbmRlcik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmFmKHJlbmRlcik7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fc3RhdGU7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaXMoJ3BhdXNlJykpIHJldHVybjsKICAgICAgICAgICAgICAgIHN0YXRlLnBhdXNlKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcGF1c2VkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5pcygncGF1c2UnKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gd3JhcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgd3JhcCA9IF8ud3JhcCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFdyYXAgdGhlIGZ1bmN0aW9uIGluc2lkZSBhIHdyYXBwZXIgZnVuY3Rpb24sIHBhc3NpbmcgaXQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICB8RGVzYyAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxmbiAgICAgfEZ1bmN0aW9uIHRvIHdyYXB8CiAgICAgICAgICogfHdyYXBwZXJ8V3JhcHBlciBmdW5jdGlvbnwKICAgICAgICAgKiB8cmV0dXJuIHxOZXcgZnVuY3Rpb24gICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3QgcCA9IHdyYXAoZXNjYXBlLCBmdW5jdGlvbihmbiwgdGV4dCkgewogICAgICAgICAqICAgICByZXR1cm4gJzxwPicgKyBmbih0ZXh0KSArICc8L3A+JzsKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBwKCdZb3UgJiBNZScpOyAvLyAtPiAnPHA+WW91ICZhbXA7IE1lPC9wPicKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHdyYXAoZm46IEZ1bmN0aW9uLCB3cmFwcGVyOiBGdW5jdGlvbik6IEZ1bmN0aW9uOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBwYXJ0aWFsIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oZm4sIHdyYXBwZXIpIHsKICAgICAgICAgICAgcmV0dXJuIHBhcnRpYWwod3JhcHBlciwgZm4pOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcmlvcml0eVF1ZXVlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5Qcmlvcml0eVF1ZXVlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogUHJpb3JpdHkgcXVldWUgaW1wbGVtZW50YXRpb24uCiAgICAgICAgICoKICAgICAgICAgKiAjIyMgc2l6ZQogICAgICAgICAqCiAgICAgICAgICogUXVldWUgc2l6ZS4KICAgICAgICAgKgogICAgICAgICAqICMjIyBjb25zdHJ1Y3RvcgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgfERlc2MgICAgICB8CiAgICAgICAgICogfC0tLS0tfC0tLS0tLS0tLS18CiAgICAgICAgICogfGNtcCAgfENvbXBhcmF0b3J8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgY2xlYXIKICAgICAgICAgKgogICAgICAgICAqIENsZWFyIHRoZSBxdWV1ZS4KICAgICAgICAgKgogICAgICAgICAqICMjIyBlbnF1ZXVlCiAgICAgICAgICoKICAgICAgICAgKiBBZGQgYW4gaXRlbSB0byB0aGUgcXVldWUuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8aXRlbSAgfEl0ZW0gdG8gYWRkIHwKICAgICAgICAgKiB8cmV0dXJufEN1cnJlbnQgc2l6ZXwKICAgICAgICAgKgogICAgICAgICAqICMjIyBkZXF1ZXVlCiAgICAgICAgICoKICAgICAgICAgKiBSZXRyaWV2ZSBhbmQgcmVtb3ZlIHRoZSBoaWdoZXN0IHByaW9yaXR5IGl0ZW0gb2YgdGhlIHF1ZXVlLgogICAgICAgICAqCiAgICAgICAgICogIyMjIHBlZWsKICAgICAgICAgKgogICAgICAgICAqIFNhbWUgYXMgZGVxdWV1ZSwgYnV0IGRvZXMgbm90IHJlbW92ZSB0aGUgaXRlbS4KICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnN0IHF1ZXVlID0gbmV3IFByaW9yaXR5UXVldWUoZnVuY3Rpb24gKGEsIGIpIHsKICAgICAgICAgKiAgICAgaWYgKGEucHJpb3JpdHkgPiBiLnByaW9yaXR5KSByZXR1cm4gMTsKICAgICAgICAgKiAgICAgaWYgKGEucHJpb3JpdHkgPT09IGIucHJpb3JpdHkpIHJldHVybiAtMTsKICAgICAgICAgKiAgICAgcmV0dXJuIDA7CiAgICAgICAgICogfSk7CiAgICAgICAgICogcXVldWUuZW5xdWV1ZSh7CiAgICAgICAgICogICAgIHByaW9yaXR5OiAxMDAwLAogICAgICAgICAqICAgICB2YWx1ZTogJ2FwcGxlJywKICAgICAgICAgKiB9KTsKICAgICAgICAgKiBxdWV1ZS5lbnF1ZXVlKHsKICAgICAgICAgKiAgICAgcHJpb3JpdHk6IDUwMCwKICAgICAgICAgKiAgICAgdmFsdWU6ICdvcmFuZ2UnCiAgICAgICAgICogfSk7CiAgICAgICAgICogcXVldWUuZGVxdWV1ZSgpOyAvLyAtPiB7IHByaW9yaXR5OiAxMDAwLCB2YWx1ZTogJ2FwcGxlJyB9CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBjbGFzcyBQcmlvcml0eVF1ZXVlIHsKICAgICAgICAgKiAgICAgc2l6ZTogbnVtYmVyOwogICAgICAgICAqICAgICBjb25zdHJ1Y3RvcihjbXA/OiBGdW5jdGlvbik7CiAgICAgICAgICogICAgIGNsZWFyKCk6IHZvaWQ7CiAgICAgICAgICogICAgIGVucXVldWUoaXRlbTogYW55KTogbnVtYmVyOwogICAgICAgICAqICAgICBkZXF1ZXVlKCk6IGFueTsKICAgICAgICAgKiAgICAgcGVlaygpOiBhbnk7CiAgICAgICAgICogfQogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBDbGFzcyBIZWFwIGlzU29ydGVkIHdyYXAgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBDbGFzcyh7CiAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uIFByaW9yaXR5UXVldWUoKSB7CiAgICAgICAgICAgICAgICB2YXIgY21wID0KICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZAogICAgICAgICAgICAgICAgICAgICAgICA/IGFyZ3VtZW50c1swXQogICAgICAgICAgICAgICAgICAgICAgICA6IGlzU29ydGVkLmRlZkNvbXBhcmF0b3I7CiAgICAgICAgICAgICAgICB0aGlzLl9oZWFwID0gbmV3IEhlYXAoCiAgICAgICAgICAgICAgICAgICAgd3JhcChjbXAsIGZ1bmN0aW9uKGZuLCBhLCBiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbihhLCBiKSAqIC0xOwogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgdGhpcy5zaXplID0gMDsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgY2xlYXI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdGhpcy5faGVhcC5jbGVhcigpOwoKICAgICAgICAgICAgICAgIHRoaXMuc2l6ZSA9IDA7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGVucXVldWU6IGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgICAgICAgICAgIHRoaXMuX2hlYXAuYWRkKGl0ZW0pOwoKICAgICAgICAgICAgICAgIHRoaXMuc2l6ZSsrOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2l6ZTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGVxdWV1ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMuX2hlYXAucG9sbCgpOwoKICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaXplLS07CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHBlZWs6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlYXAucGVlaygpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBvcmRpbmFsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5vcmRpbmFsID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQWRkIG9yZGluYWwgaW5kaWNhdG9yIHRvIG51bWJlci4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8bnVtICAgfE51bWJlciB0byBhZGQgaW5kaWNhdG9yfAogICAgICAgICAqIHxyZXR1cm58UmVzdWx0IG9yZGluYWwgbnVtYmVyICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBvcmRpbmFsKDEpOyAvLyAtPiAnMXN0JwogICAgICAgICAqIG9yZGluYWwoMik7IC8vIC0+ICcybmQnCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBvcmRpbmFsKG51bTogbnVtYmVyKTogc3RyaW5nOwogICAgICAgICAqLwogICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEzNjI3MzA4L2FkZC1zdC1uZC1yZC1hbmQtdGgtb3JkaW5hbC1zdWZmaXgtdG8tYS1udW1iZXIKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24obnVtKSB7CiAgICAgICAgICAgIHZhciBqID0gbnVtICUgMTA7CiAgICAgICAgICAgIHZhciBrID0gbnVtICUgMTAwOwogICAgICAgICAgICB2YXIgaW5kaWNhdG9yID0gJ3RoJzsKCiAgICAgICAgICAgIGlmIChqID09IDEgJiYgayAhPSAxMSkgewogICAgICAgICAgICAgICAgaW5kaWNhdG9yID0gJ3N0JzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGogPT0gMiAmJiBrICE9IDEyKSB7CiAgICAgICAgICAgICAgICBpbmRpY2F0b3IgPSAnbmQnOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaiA9PSAzICYmIGsgIT0gMTMpIHsKICAgICAgICAgICAgICAgIGluZGljYXRvciA9ICdyZCc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBudW0gKyBpbmRpY2F0b3I7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHBhZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8ucGFkID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogUGFkIHN0cmluZyBvbiB0aGUgbGVmdCBhbmQgcmlnaHQgc2lkZXMgaWYgaXQncyBzaG9ydGVyIHRoYW4gbGVuZ3RoLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8c3RyICAgfFN0cmluZyB0byBwYWQgICAgICAgICB8CiAgICAgICAgICogfGxlbiAgIHxQYWRkaW5nIGxlbmd0aCAgICAgICAgfAogICAgICAgICAqIHxjaGFycyB8U3RyaW5nIHVzZWQgYXMgcGFkZGluZ3wKICAgICAgICAgKiB8cmV0dXJufFJlc3VsdCBzdHJpbmcgICAgICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBwYWQoJ2EnLCA1KTsgLy8gLT4gJyAgYSAgJwogICAgICAgICAqIHBhZCgnYScsIDUsICctJyk7IC8vIC0+ICctLWEtLScKICAgICAgICAgKiBwYWQoJ2FiYycsIDMsICctJyk7IC8vIC0+ICdhYmMnCiAgICAgICAgICogcGFkKCdhYmMnLCA1LCAnYWInKTsgLy8gLT4gJ2JhYmNhJwogICAgICAgICAqIHBhZCgnYWInLCA1LCAnYWInKTsgLy8gLT4gJ2FiYWJhJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcGFkKHN0cjogc3RyaW5nLCBsZW46IG51bWJlciwgY2hhcnM/OiBzdHJpbmcpOiBzdHJpbmc7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHJlcGVhdCB0b1N0ciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHN0ciwgbGVuLCBjaGFycykgewogICAgICAgICAgICBzdHIgPSB0b1N0cihzdHIpOwogICAgICAgICAgICB2YXIgc3RyTGVuID0gc3RyLmxlbmd0aDsKICAgICAgICAgICAgY2hhcnMgPSBjaGFycyB8fCAnICc7CgogICAgICAgICAgICBpZiAoc3RyTGVuIDwgbGVuKSB7CiAgICAgICAgICAgICAgICB2YXIgcGFkU3RyID0gcmVwZWF0KGNoYXJzLCBNYXRoLmNlaWwoKGxlbiAtIHN0ckxlbikgLyAyKSk7CiAgICAgICAgICAgICAgICBzdHIgPSBwYWRTdHIgKyBzdHIgKyBwYWRTdHI7CiAgICAgICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyKE1hdGguY2VpbCgoc3RyLmxlbmd0aCAtIGxlbikgLyAyKSwgbGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHN0cjsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcGFpcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLnBhaXJzID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ29udmVydCBhbiBvYmplY3QgaW50byBhIGxpc3Qgb2YgW2tleSwgdmFsdWVdIHBhaXJzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxvYmogICB8T2JqZWN0IHRvIGNvbnZlcnQgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxMaXN0IG9mIFtrZXksIHZhbHVlXSBwYWlyc3wKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHBhaXJzKHthOiAxLCBiOiAyfSk7IC8vIC0+IFtbJ2EnLCAxXSwgWydiJywgMl1dCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwYWlycyhvYmo6IGFueSk6IEFycmF5PGFueVtdPjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICoga2V5cyAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgICAgICB2YXIgX2tleXMgPSBrZXlzKG9iaik7CgogICAgICAgICAgICB2YXIgbGVuID0gX2tleXMubGVuZ3RoOwogICAgICAgICAgICB2YXIgcmV0ID0gQXJyYXkobGVuKTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHJldFtpXSA9IFtfa2V5c1tpXSwgb2JqW19rZXlzW2ldXV07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHBhcmFsbGVsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5wYXJhbGxlbCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFJ1biBhbiBhcnJheSBvZiBmdW5jdGlvbnMgaW4gcGFyYWxsZWwuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSB8RGVzYyAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx0YXNrc3xBcnJheSBvZiBmdW5jdGlvbnMgICAgIHwKICAgICAgICAgKiB8Y2IgICB8Q2FsbGJhY2sgb25jZSBjb21wbGV0ZWR8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBwYXJhbGxlbChbCiAgICAgICAgICogICAgIGZ1bmN0aW9uKGNiKSB7CiAgICAgICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgY2IobnVsbCwgJ29uZScpIH0sIDIwMCk7CiAgICAgICAgICogICAgIH0sCiAgICAgICAgICogICAgIGZ1bmN0aW9uKGNiKSB7CiAgICAgICAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgY2IobnVsbCwgJ3R3bycpIH0sIDEwMCk7CiAgICAgICAgICogICAgIH0KICAgICAgICAgKiBdLCBmdW5jdGlvbiAoZXJyLCByZXN1bHRzKSB7CiAgICAgICAgICogICAgIC8vIHJlc3VsdHMgLT4gWydvbmUnLCAndHdvJ10KICAgICAgICAgKiB9KTsKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHBhcmFsbGVsKHRhc2tzOiBGdW5jdGlvbltdLCBjYj86IEZ1bmN0aW9uKTogdm9pZDsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogbm9vcCBlYWNoIG5leHRUaWNrIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24odGFza3MsIGNiKSB7CiAgICAgICAgICAgIGNiID0gY2IgfHwgbm9vcDsKICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgICAgICAgICAgdmFyIHBlbmRpbmcgPSB0YXNrcy5sZW5ndGg7CiAgICAgICAgICAgIGlmICghcGVuZGluZykgcmV0dXJuIGRvbmUobnVsbCk7CiAgICAgICAgICAgIGVhY2godGFza3MsIGZ1bmN0aW9uKHRhc2ssIGkpIHsKICAgICAgICAgICAgICAgIHRhc2soZnVuY3Rpb24oZXJyLCByZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICB0YXNrQ2IoaSwgZXJyLCByZXN1bHQpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgZnVuY3Rpb24gdGFza0NiKGksIGVyciwgcmVzdWx0KSB7CiAgICAgICAgICAgICAgICByZXN1bHRzW2ldID0gcmVzdWx0OwogICAgICAgICAgICAgICAgaWYgKC0tcGVuZGluZyA9PT0gMCB8fCBlcnIpIGRvbmUoZXJyKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIpIHsKICAgICAgICAgICAgICAgIG5leHRUaWNrKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGNiKGVyciwgcmVzdWx0cyk7CiAgICAgICAgICAgICAgICAgICAgY2IgPSBub29wOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdG9Cb29sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciB0b0Jvb2wgPSBfLnRvQm9vbCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENvbnZlcnQgdmFsdWUgdG8gYSBib29sZWFuLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHx2YWwgICB8VmFsdWUgdG8gY29udmVydCB8CiAgICAgICAgICogfHJldHVybnxDb252ZXJ0ZWQgYm9vbGVhbnwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHRvQm9vbCh0cnVlKTsgLy8gLT4gdHJ1ZQogICAgICAgICAqIHRvQm9vbChudWxsKTsgLy8gLT4gZmFsc2UKICAgICAgICAgKiB0b0Jvb2woMSk7IC8vIC0+IHRydWUKICAgICAgICAgKiB0b0Jvb2woMCk7IC8vIC0+IGZhbHNlCiAgICAgICAgICogdG9Cb29sKCcwJyk7IC8vIC0+IGZhbHNlCiAgICAgICAgICogdG9Cb29sKCcxJyk7IC8vIC0+IHRydWUKICAgICAgICAgKiB0b0Jvb2woJ2ZhbHNlJyk7IC8vIC0+IGZhbHNlCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB0b0Jvb2wodmFsOiBhbnkpOiBib29sZWFuOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBpc1N0ciAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICBpZiAoaXNTdHIodmFsKSkgewogICAgICAgICAgICAgICAgdmFsID0gdmFsLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsICE9PSAnMCcgJiYgdmFsICE9PSAnJyAmJiB2YWwgIT09ICdmYWxzZSc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAhIXZhbDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcGFyc2VBcmdzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5wYXJzZUFyZ3MgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgb3B0aW9ucywgdGhlIHNhbWUgYXMgbWluaW1pc3QuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgIHxEZXNjICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxhcmdzICAgfEFyZ3VtZW50IGFycmF5IHwKICAgICAgICAgKiB8b3B0aW9uc3xQYXJzZSBvcHRpb25zICB8CiAgICAgICAgICogfHJldHVybiB8UGFyc2VkIHJlc3VsdCAgfAogICAgICAgICAqCiAgICAgICAgICogIyMjIG9wdGlvbnMKICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgfERlc2MgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxuYW1lcyAgICAgfG9wdGlvbiBuYW1lcyAgICAgfAogICAgICAgICAqIHxzaG9ydGhhbmRzfG9wdGlvbiBzaG9ydGhhbmRzfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogcGFyc2VBcmdzKFsnZXVzdGlhJywgJy0tb3V0cHV0JywgJ3V0aWwuanMnLCAnLXcnXSwgewogICAgICAgICAqICAgICBuYW1lczogewogICAgICAgICAqICAgICAgICAgb3V0cHV0OiAnc3RyaW5nJywKICAgICAgICAgKiAgICAgICAgIHdhdGNoOiAnYm9vbGVhbicKICAgICAgICAgKiAgICAgfSwKICAgICAgICAgKiAgICAgc2hvcnRoYW5kczogewogICAgICAgICAqICAgICAgICAgb3V0cHV0OiAnbycsCiAgICAgICAgICogICAgICAgICB3YXRjaDogJ3cnCiAgICAgICAgICogICAgIH0KICAgICAgICAgKiB9KTsKICAgICAgICAgKiAvLyAtPiB7cmVtYWluOiBbJ2V1c3RpYSddLCBvdXRwdXQ6ICd1dGlsLmpzJywgd2F0Y2g6IHRydWV9CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwYXJzZUFyZ3MoCiAgICAgICAgICogICAgIGFyZ3M6IHN0cmluZ1tdLAogICAgICAgICAqICAgICBvcHRpb25zOiB7CiAgICAgICAgICogICAgICAgICBuYW1lczogYW55LAogICAgICAgICAqICAgICAgICAgc2hvcnRoYW5kczogYW55CiAgICAgICAgICogICAgIH0KICAgICAgICAgKiApOiBhbnk7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGRlZmF1bHRzIHRvTnVtIGludmVydCB0b0Jvb2wgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihhcmdzLCBvcHRzKSB7CiAgICAgICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9OwogICAgICAgICAgICBkZWZhdWx0cyhvcHRzLCBkZWZPcHRzKTsKICAgICAgICAgICAgdmFyIG5hbWVzID0gb3B0cy5uYW1lczsKICAgICAgICAgICAgdmFyIHNob3J0aGFuZHMgPSBpbnZlcnQob3B0cy5zaG9ydGhhbmRzKTsKICAgICAgICAgICAgdmFyIHJlbWFpbiA9IFtdOwogICAgICAgICAgICB2YXIgcmV0ID0gewogICAgICAgICAgICAgICAgcmVtYWluOiByZW1haW4KICAgICAgICAgICAgfTsKICAgICAgICAgICAgdmFyIG5hbWU7CiAgICAgICAgICAgIHZhciB0eXBlOwoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyZ3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBhcmcgPSBhcmdzW2ldOwogICAgICAgICAgICAgICAgdmFyIG5leHRBcmcgPSBhcmdzW2kgKyAxXTsKICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGFyZy5tYXRjaChyZWdEb3VibGVEYXNoKTsKCiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgICAgICBuYW1lID0gbWF0Y2hbMV07CiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IG5hbWVzW25hbWVdOwoKICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluLnB1c2goYXJnKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5leHRBcmcgJiYgIXJlZ0Rhc2hTdGFydC50ZXN0KG5leHRBcmcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhuYW1lLCBuZXh0QXJnKTsKICAgICAgICAgICAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Jvb2xlYW4nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhuYW1lLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbWF0Y2ggPSBhcmcubWF0Y2gocmVnU2luZ2xlRGFzaCk7CgogICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxldHRlcnMgPSBtYXRjaFsxXTsKCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsZXR0ZXJzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXR0ZXIgPSBsZXR0ZXJzW2pdOwogICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gc2hvcnRoYW5kc1tsZXR0ZXJdOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gbmFtZXNbbmFtZV07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnYm9vbGVhbicpIHNldEFyZyhzaG9ydGhhbmRzW2xldHRlcl0sIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmVtYWluLnB1c2goYXJnKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZnVuY3Rpb24gc2V0QXJnKG5hbWUsIHZhbCkgewogICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBuYW1lc1tuYW1lXTsKCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICdudW1iZXInOgogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB0b051bSh2YWwpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHRvQm9vbCh2YWwpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0W25hbWVdID0gdmFsOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH07CgogICAgICAgIHZhciBkZWZPcHRzID0gewogICAgICAgICAgICBuYW1lczoge30sCiAgICAgICAgICAgIHNob3J0aGFuZHM6IHt9CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVnRG91YmxlRGFzaCA9IC9eLS0oLispLzsKICAgICAgICB2YXIgcmVnU2luZ2xlRGFzaCA9IC9eLShbXi1dKykvOwogICAgICAgIHZhciByZWdEYXNoU3RhcnQgPSAvXi0vOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcGFzY2FsQ2FzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8ucGFzY2FsQ2FzZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENvbnZlcnQgc3RyaW5nIHRvICJwYXNjYWxDYXNlIi4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHN0ciAgIHxTdHJpbmcgdG8gY29udmVydCAgfAogICAgICAgICAqIHxyZXR1cm58UGFzY2FsIGNhc2VkIHN0cmluZ3wKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHBhc2NhbENhc2UoJ2Zvb0JhcicpOyAvLyAtPiBGb29CYXIKICAgICAgICAgKiBwYXNjYWxDYXNlKCdmb28gYmFyJyk7IC8vIC0+IEZvb0JhcgogICAgICAgICAqIHBhc2NhbENhc2UoJ2Zvb19iYXInKTsgLy8gLT4gRm9vQmFyCiAgICAgICAgICogcGFzY2FsQ2FzZSgnZm9vLmJhcicpOyAvLyAtPiBGb29CYXIKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHBhc2NhbENhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmc7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGNhbWVsQ2FzZSB1cHBlckZpcnN0IAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgIHJldHVybiB1cHBlckZpcnN0KGNhbWVsQ2FzZShzdHIpKTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcGVyZk5vdyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgcGVyZk5vdyA9IF8ucGVyZk5vdyA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEhpZ2ggcmVzb2x1dGlvbiB0aW1lIHVwIHRvIG1pY3Jvc2Vjb25kIHByZWNpc2lvbi4KICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnN0IHN0YXJ0ID0gcGVyZk5vdygpOwogICAgICAgICAqCiAgICAgICAgICogLy8gRG8gc29tZXRoaW5nLgogICAgICAgICAqCiAgICAgICAgICogY29uc29sZS5sb2cocGVyZk5vdygpIC0gc3RhcnQpOwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcGVyZk5vdygpOiBudW1iZXI7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIG5vdyByb290IAogICAgICAgICAqLwoKICAgICAgICB2YXIgcGVyZm9ybWFuY2UgPSByb290LnBlcmZvcm1hbmNlOwogICAgICAgIHZhciBwcm9jZXNzID0gcm9vdC5wcm9jZXNzOwogICAgICAgIHZhciBsb2FkVGltZTsKCiAgICAgICAgaWYgKHBlcmZvcm1hbmNlICYmIHBlcmZvcm1hbmNlLm5vdykgewogICAgICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7CiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzICYmIHByb2Nlc3MuaHJ0aW1lKSB7CiAgICAgICAgICAgIHZhciBnZXROYW5vU2Vjb25kcyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGhyID0gcHJvY2Vzcy5ocnRpbWUoKTsKICAgICAgICAgICAgICAgIHJldHVybiBoclswXSAqIDFlOSArIGhyWzFdOwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgbG9hZFRpbWUgPSBnZXROYW5vU2Vjb25kcygpIC0gcHJvY2Vzcy51cHRpbWUoKSAqIDFlOTsKCiAgICAgICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiAoZ2V0TmFub1NlY29uZHMoKSAtIGxvYWRUaW1lKSAvIDFlNjsKICAgICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsb2FkVGltZSA9IG5vdygpOwoKICAgICAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIG5vdygpIC0gbG9hZFRpbWU7CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcHJvcGVydHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIHByb3BlcnR5ID0gXy5wcm9wZXJ0eSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFJldHVybiBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBpdHNlbGYgcmV0dXJuIHRoZSBrZXkgcHJvcGVydHkgb2YgYW55IHBhc3NlZC1pbiBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8cGF0aCAgfFBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldHwKICAgICAgICAgKiB8cmV0dXJufE5ldyBhY2Nlc3NvciBmdW5jdGlvbiAgICAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnN0IG9iaiA9IHthOiB7YjogMX19OwogICAgICAgICAqIHByb3BlcnR5KCdhJykob2JqKTsgLy8gLT4ge2I6IDF9CiAgICAgICAgICogcHJvcGVydHkoWydhJywgJ2InXSkob2JqKTsgLy8gLT4gMQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcHJvcGVydHkocGF0aDogc3RyaW5nIHwgc3RyaW5nW10pOiBGdW5jdGlvbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogaXNBcnIgc2FmZUdldCAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHBhdGgpIHsKICAgICAgICAgICAgaWYgKCFpc0FycihwYXRoKSkgcmV0dXJuIHNoYWxsb3dQcm9wZXJ0eShwYXRoKTsKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikgewogICAgICAgICAgICAgICAgcmV0dXJuIHNhZmVHZXQob2JqLCBwYXRoKTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBzaGFsbG93UHJvcGVydHkoa2V5KSB7CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihvYmopIHsKICAgICAgICAgICAgICAgIHJldHVybiBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtrZXldOwogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHBsdWNrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBwbHVjayA9IF8ucGx1Y2sgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBFeHRyYWN0IGEgbGlzdCBvZiBwcm9wZXJ0eSB2YWx1ZXMuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxvYmogICB8Q29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIgICAgIHwKICAgICAgICAgKiB8a2V5ICAgfFByb3BlcnR5IHBhdGggICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHJldHVybnxOZXcgYXJyYXkgb2Ygc3BlY2lmaWVkIHByb3BlcnR5fAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3Qgc3Rvb2dlcyA9IFsKICAgICAgICAgKiAgICAge25hbWU6ICdtb2UnLCBhZ2U6IDQwfSwKICAgICAgICAgKiAgICAge25hbWU6ICdsYXJyeScsIGFnZTogNTB9LAogICAgICAgICAqICAgICB7bmFtZTogJ2N1cmx5JywgYWdlOiA2MH0KICAgICAgICAgKiBdOwogICAgICAgICAqIHBsdWNrKHN0b29nZXMsICduYW1lJyk7IC8vIC0+IFsnbW9lJywgJ2xhcnJ5JywgJ2N1cmx5J10KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHBsdWNrKG9iamVjdDogYW55LCBrZXk6IHN0cmluZyB8IHN0cmluZ1tdKTogYW55W107CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIG1hcCBwcm9wZXJ0eSAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwga2V5KSB7CiAgICAgICAgICAgIHJldHVybiBtYXAob2JqLCBwcm9wZXJ0eShrZXkpKTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZnV6enlTZWFyY2ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmZ1enp5U2VhcmNoID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogU2ltcGxlIGZ1enp5IHNlYXJjaC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICB8RGVzYyAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG5lZWRsZSAgIHxTdHJpbmcgdG8gc2VhcmNofAogICAgICAgICAqIHxoYXlzdGFja3N8U2VhcmNoIGxpc3QgICAgIHwKICAgICAgICAgKiB8b3B0aW9ucyAgfFNlYXJjaCBvcHRpb25zICB8CiAgICAgICAgICoKICAgICAgICAgKiBBdmFpbGFibGUgb3B0aW9uczoKICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgICAgICAgICAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxjYXNlU2Vuc2l0aXZlPWZhbHNlfFdoZXRoZXIgY29tcGFyaXNvbnMgc2hvdWxkIGJlIGNhc2Ugc2Vuc2l0aXZlfAogICAgICAgICAqIHxrZXkgICAgICAgICAgICAgICAgfE9iamVjdCBrZXkgcGF0aCBpZiBpdGVtIGlzIG9iamVjdCAgICAgICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogZnV6enlTZWFyY2goJ2xpYycsIFsnbGljaWEnLCAnbGwnLCAnbGljJ10pOyAvLyAtPiBbJ2xpYycsICdsaWNpYSddCiAgICAgICAgICogZnV6enlTZWFyY2goJ2FscGhhLXRlc3QnLCBbewogICAgICAgICAqICAgICBuYW1lOiAnYWxwaGEtdGVzdC0xJwogICAgICAgICAqIH0sIHsKICAgICAgICAgKiAgICAgbmFtZTogJ2JldGEtdGVzdCcKICAgICAgICAgKiB9XSwgewogICAgICAgICAqICAgICBrZXk6ICduYW1lJwogICAgICAgICAqIH0pOyAvLyAtPiBbeyBuYW1lOiAnYWxwaGEtdGVzdC0xJyB9XQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZnV6enlTZWFyY2goCiAgICAgICAgICogICAgIG5lZWRsZTogc3RyaW5nLAogICAgICAgICAqICAgICBoYXlzdGFjazogYW55W10sCiAgICAgICAgICogICAgIG9wdGlvbnM/OiB7CiAgICAgICAgICogICAgICAgICBjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjsKICAgICAgICAgKiAgICAgICAgIGtleT86IHN0cmluZyB8IHN0cmluZ1tdOwogICAgICAgICAqICAgICB9CiAgICAgICAgICogKTogYW55W107CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGZpbHRlciBtYXAgaXNTdHIgc2FmZUdldCBsZXZlbnNodGVpbiBwbHVjayAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG5lZWRsZSwgaGF5c3RhY2tzKSB7CiAgICAgICAgICAgIHZhciBvcHRpb25zID0KICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307CgogICAgICAgICAgICBpZiAoIW9wdGlvbnMuY2FzZVNlbnNpdGl2ZSkgewogICAgICAgICAgICAgICAgbmVlZGxlID0gbmVlZGxlLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGhheXN0YWNrcyA9IG1hcChoYXlzdGFja3MsIGZ1bmN0aW9uKGhheXN0YWNrKSB7CiAgICAgICAgICAgICAgICB2YXIgc3RyaW5nID0gdG9TdHIoaGF5c3RhY2ssIG9wdGlvbnMpOwoKICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5jYXNlU2Vuc2l0aXZlKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaGF5c3RhY2ssCiAgICAgICAgICAgICAgICAgICAgbGV2ZW5zaHRlaW46IGxldmVuc2h0ZWluKG5lZWRsZSwgc3RyaW5nKSwKICAgICAgICAgICAgICAgICAgICBzdHJpbmc6IHN0cmluZwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGhheXN0YWNrcyA9IGZpbHRlcihoYXlzdGFja3MsIGZ1bmN0aW9uKGhheXN0YWNrKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaGFzQWxsTGV0dGVycyhuZWVkbGUsIGhheXN0YWNrLnN0cmluZywgb3B0aW9ucyk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBoYXlzdGFja3Muc29ydChmdW5jdGlvbihhLCBiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYS5sZXZlbnNodGVpbiAtIGIubGV2ZW5zaHRlaW47CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gcGx1Y2soaGF5c3RhY2tzLCAndmFsdWUnKTsKICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiB0b1N0cihoYXlzdGFjaywgb3B0aW9ucykgewogICAgICAgICAgICBpZiAoaXNTdHIoaGF5c3RhY2spKSByZXR1cm4gaGF5c3RhY2s7CiAgICAgICAgICAgIHJldHVybiBzYWZlR2V0KGhheXN0YWNrLCBvcHRpb25zLmtleSkgfHwgJyc7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBoYXNBbGxMZXR0ZXJzKG5lZWRsZSwgaGF5c3RhY2spIHsKICAgICAgICAgICAgdmFyIGhMZW4gPSBoYXlzdGFjay5sZW5ndGg7CiAgICAgICAgICAgIHZhciBuTGVuID0gbmVlZGxlLmxlbmd0aDsKICAgICAgICAgICAgaWYgKG5MZW4gPiBoTGVuKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIGlmIChuTGVuID09PSBoTGVuKSByZXR1cm4gbmVlZGxlID09PSBoYXlzdGFjazsKCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IG5MZW47IGkrKykgewogICAgICAgICAgICAgICAgdmFyIGMgPSBuZWVkbGUuY2hhckNvZGVBdChpKTsKICAgICAgICAgICAgICAgIHZhciBoYXMgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICB3aGlsZSAoaiA8IGhMZW4pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaGF5c3RhY2suY2hhckNvZGVBdChqKyspID09PSBjKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhhcyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIWhhcykgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwcm9taXNpZnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIHByb21pc2lmeSA9IF8ucHJvbWlzaWZ5ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ29udmVydCBjYWxsYmFjayBiYXNlZCBmdW5jdGlvbnMgaW50byBQcm9taXNlcy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgICAgICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8Zm4gICAgICAgICAgICAgfENhbGxiYWNrIGJhc2VkIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxtdWx0aUFyZ3M9ZmFsc2V8SWYgY2FsbGJhY2sgaGFzIG11bHRpcGxlIHN1Y2Nlc3MgdmFsdWV8CiAgICAgICAgICogfHJldHVybiAgICAgICAgIHxSZXN1bHQgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKgogICAgICAgICAqIElmIG11bHRpQXJncyBpcyBzZXQgdG8gdHJ1ZSwgdGhlIHJlc3VsdGluZyBwcm9taXNlIHdpbGwgYWx3YXlzIGZ1bGZpbGwgd2l0aCBhbiBhcnJheSBvZiB0aGUgY2FsbGJhY2sncyBzdWNjZXNzIHZhbHVlcy4KICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTsKICAgICAgICAgKgogICAgICAgICAqIGNvbnN0IHJlYWRGaWxlID0gcHJvbWlzaWZ5KGZzLnJlYWRGaWxlKTsKICAgICAgICAgKiByZWFkRmlsZSgndGVzdC5qcycsICd1dGYtOCcpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICAgKiAgICAgLy8gRG8gc29tZXRoaW5nIHdpdGggZmlsZSBjb250ZW50LgogICAgICAgICAqIH0pOwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcHJvbWlzaWZ5KGZuOiBGdW5jdGlvbiwgbXVsdGlBcmdzPzogYm9vbGVhbik6IEZ1bmN0aW9uOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiByZXN0QXJncyByb290IFByb21pc2UgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihmbiwgbXVsdGlBcmdzKSB7CiAgICAgICAgICAgIHJldHVybiByZXN0QXJncyhmdW5jdGlvbihhcmdzKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGV4cG9ydHMuUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RBcmdzKGZ1bmN0aW9uIGNhbGxiYWNrKGVyciwgdmFsdWVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW11bHRpQXJncykgcmV0dXJuIHJlc29sdmUodmFsdWVzWzBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIGV4cG9ydHMuUHJvbWlzZSA9IHJvb3QuUHJvbWlzZSB8fCBQcm9taXNlOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcXVpY2tTb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5xdWlja1NvcnQgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBRdWljayBzb3J0IGltcGxlbWVudGF0aW9uLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8YXJyICAgfEFycmF5IHRvIHNvcnR8CiAgICAgICAgICogfGNtcCAgIHxDb21wYXJhdG9yICAgfAogICAgICAgICAqIHxyZXR1cm58U29ydGVkIGFycmF5IHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHF1aWNrU29ydChbMiwgMV0pOyAvLyAtPiBbMSwgMl0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHF1aWNrU29ydChhcnI6IGFueVtdLCBjbXA/OiBGdW5jdGlvbik6IGFueVtdOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBzd2FwIGlzU29ydGVkIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oYXJyKSB7CiAgICAgICAgICAgIHZhciBjbXAgPQogICAgICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQKICAgICAgICAgICAgICAgICAgICA/IGFyZ3VtZW50c1sxXQogICAgICAgICAgICAgICAgICAgIDogaXNTb3J0ZWQuZGVmQ29tcGFyYXRvcjsKICAgICAgICAgICAgcmV0dXJuIHF1aWNrU29ydChhcnIsIDAsIGFyci5sZW5ndGggLSAxLCBjbXApOwogICAgICAgIH07CgogICAgICAgIGZ1bmN0aW9uIHF1aWNrU29ydChhcnIsIGxlZnQsIHJpZ2h0LCBjbXApIHsKICAgICAgICAgICAgaWYgKGFyci5sZW5ndGggPD0gMSkgcmV0dXJuIGFycjsKICAgICAgICAgICAgdmFyIGlkeCA9IHBhcnRpdGlvbihhcnIsIGxlZnQsIHJpZ2h0LCBjbXApOwogICAgICAgICAgICBpZiAobGVmdCA8IGlkeCAtIDEpIHF1aWNrU29ydChhcnIsIGxlZnQsIGlkeCAtIDEsIGNtcCk7CiAgICAgICAgICAgIGlmIChpZHggPCByaWdodCkgcXVpY2tTb3J0KGFyciwgaWR4LCByaWdodCwgY21wKTsKICAgICAgICAgICAgcmV0dXJuIGFycjsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHBhcnRpdGlvbihhcnIsIGxlZnQsIHJpZ2h0LCBjbXApIHsKICAgICAgICAgICAgdmFyIHBpdm90ID0gYXJyW2Zsb29yKChyaWdodCArIGxlZnQpIC8gMildOwoKICAgICAgICAgICAgd2hpbGUgKGxlZnQgPD0gcmlnaHQpIHsKICAgICAgICAgICAgICAgIHdoaWxlIChjbXAoYXJyW2xlZnRdLCBwaXZvdCkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgbGVmdCsrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHdoaWxlIChjbXAoYXJyW3JpZ2h0XSwgcGl2b3QpID4gMCkgewogICAgICAgICAgICAgICAgICAgIHJpZ2h0LS07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGxlZnQgPD0gcmlnaHQpIHsKICAgICAgICAgICAgICAgICAgICBzd2FwKGFyciwgbGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgICAgICAgIGxlZnQrKzsKICAgICAgICAgICAgICAgICAgICByaWdodC0tOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gbGVmdDsKICAgICAgICB9CgogICAgICAgIHZhciBmbG9vciA9IE1hdGguZmxvb3I7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSByYW5kb20gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIHJhbmRvbSA9IF8ucmFuZG9tID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogUHJvZHVjZXMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gbWluIGFuZCBtYXgoaW5jbHVzaXZlKS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgICAgIHxEZXNjICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxtaW4gICAgICAgICAgIHxNaW5pbXVtIHBvc3NpYmxlIHZhbHVlfAogICAgICAgICAqIHxtYXggICAgICAgICAgIHxNYXhpbXVtIHBvc3NpYmxlIHZhbHVlfAogICAgICAgICAqIHxmbG9hdGluZz1mYWxzZXxGbG9hdCBvciBub3QgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm4gICAgICAgIHxSYW5kb20gbnVtYmVyICAgICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogcmFuZG9tKDEsIDUpOyAvLyAtPiBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgNQogICAgICAgICAqIHJhbmRvbSg1KTsgLy8gLT4gYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDUKICAgICAgICAgKiByYW5kb20oMS4yLCA1LjIsIHRydWUpOyAvLy8gLT4gYSBmbG9hdGluZy1wb2ludCBudW1iZXIgYmV0d2VlbiAxLjIgYW5kIDUuMgogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmFuZG9tKG1pbjogbnVtYmVyLCBtYXg/OiBudW1iZXIsIGZsb2F0aW5nPzogYm9vbGVhbik6IG51bWJlcjsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24obWluLCBtYXgsIGZsb2F0aW5nKSB7CiAgICAgICAgICAgIGlmIChtYXggPT0gbnVsbCkgewogICAgICAgICAgICAgICAgbWF4ID0gbWluOwogICAgICAgICAgICAgICAgbWluID0gMDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHJhbmQgPSBNYXRoLnJhbmRvbSgpOwoKICAgICAgICAgICAgaWYgKGZsb2F0aW5nIHx8IG1pbiAlIDEgfHwgbWF4ICUgMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKAogICAgICAgICAgICAgICAgICAgIG1pbiArCiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmQgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1heCAtIG1pbiArIHBhcnNlRmxvYXQoJzFlLScgKyAoKHJhbmQgKyAnJykubGVuZ3RoIC0gMSkpKSwKICAgICAgICAgICAgICAgICAgICBtYXgKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBtaW4gKyBNYXRoLmZsb29yKHJhbmQgKiAobWF4IC0gbWluICsgMSkpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSByYW5kb21CeXRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgcmFuZG9tQnl0ZXMgPSBfLnJhbmRvbUJ5dGVzID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogUmFuZG9tIGJ5dGVzIGdlbmVyYXRvci4KICAgICAgICAgKgogICAgICAgICAqIFVzZSBjcnlwdG8gbW9kdWxlIGluIG5vZGUgb3IgY3J5cHRvIG9iamVjdCBpbiBicm93c2VyIGlmIHBvc3NpYmxlLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8c2l6ZSAgfE51bWJlciBvZiBieXRlcyB0byBnZW5lcmF0ZSB8CiAgICAgICAgICogfHJldHVybnxSYW5kb20gYnl0ZXMgb2YgZ2l2ZW4gbGVuZ3RofAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogcmFuZG9tQnl0ZXMoNSk7IC8vIC0+IFs1NSwgNDksIDE1MywgMzAsIDEyMl0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJhbmRvbUJ5dGVzKHNpemU6IG51bWJlcik6IFVpbnQ4QXJyYXk7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHJhbmRvbSBpc0Jyb3dzZXIgaXNOb2RlIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oc2l6ZSkgewogICAgICAgICAgICB2YXIgcmV0ID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSk7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgICAgICAgICAgcmV0W2ldID0gcmFuZG9tKDAsIDI1NSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfTsKCiAgICAgICAgdmFyIGNyeXB0bzsKCiAgICAgICAgaWYgKGlzQnJvd3NlcikgewogICAgICAgICAgICBjcnlwdG8gPSB3aW5kb3cuY3J5cHRvIHx8IHdpbmRvdy5tc0NyeXB0bzsKCiAgICAgICAgICAgIGlmIChjcnlwdG8pIHsKICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzaXplKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IG5ldyBVaW50OEFycmF5KHNpemUpOwogICAgICAgICAgICAgICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMocmV0KTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlKSB7CiAgICAgICAgICAgIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpOwoKICAgICAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHNpemUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoc2l6ZSk7CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2VlZFJhbmRvbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgc2VlZFJhbmRvbSA9IF8uc2VlZFJhbmRvbSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFNlZWRlZCByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgICAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8c2VlZCAgICAgICAgIHxSYW5kb20gc2VlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxtaW49MCAgICAgICAgfE1pbiBwb3NzaWJsZSB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfG1heD0xICAgICAgICB8TWF4aW11bSBwb3NzaWJsZSB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8ZmxvYXRpbmc9dHJ1ZXxGbG9hdCBvciBub3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm4gICAgICAgfEZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHJhbmRvbSBudW1iZXIgc2VxdWVuY2V8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb25zdCByYW5kb20gPSBzZWVkUmFuZG9tKDE5OTIwNzE5LCAwLCAxMDAsIGZhbHNlKTsKICAgICAgICAgKiByYW5kb20oKTsgLy8gLT4gNwogICAgICAgICAqIHJhbmRvbSgpOyAvLyAtPiA2OAogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc2VlZFJhbmRvbSgKICAgICAgICAgKiAgICAgc2VlZDogbnVtYmVyLAogICAgICAgICAqICAgICBtaW4/OiBudW1iZXIsCiAgICAgICAgICogICAgIG1heD86IG51bWJlciwKICAgICAgICAgKiAgICAgZmxvYXRpbmc/OiBib29sZWFuCiAgICAgICAgICogKTogKCkgPT4gbnVtYmVyOwogICAgICAgICAqLwogICAgICAgIC8vIGh0dHBzOi8vc29mdHdhcmVlbmdpbmVlcmluZy5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMjYwOTY5L29yaWdpbmFsLXNvdXJjZS1vZi1zZWVkLTkzMDEtNDkyOTctMjMzMjgwLXJhbmRvbS1hbGdvcml0aG0KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oc2VlZCkgewogICAgICAgICAgICB2YXIgbWluID0KICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMDsKICAgICAgICAgICAgdmFyIG1heCA9CiAgICAgICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDE7CiAgICAgICAgICAgIHZhciBmbG9hdGluZyA9CiAgICAgICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZAogICAgICAgICAgICAgICAgICAgID8gYXJndW1lbnRzWzNdCiAgICAgICAgICAgICAgICAgICAgOiB0cnVlOwogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBzZWVkID0gKHNlZWQgKiA5MzAxICsgNDkyOTcpICUgMjMzMjgwOwogICAgICAgICAgICAgICAgdmFyIHJuZCA9IHNlZWQgLyAyMzMyODAuMDsKICAgICAgICAgICAgICAgIHJuZCA9IG1pbiArIHJuZCAqIChtYXggLSBtaW4pOwogICAgICAgICAgICAgICAgcmV0dXJuIGZsb2F0aW5nID8gcm5kIDogTWF0aC5mbG9vcihybmQpOwogICAgICAgICAgICB9OwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSByYW5kb21Db2xvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8ucmFuZG9tQ29sb3IgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBSYW5kb20gY29sb3IgZ2VuZXJhdG9yLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICB8RGVzYyAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS18LS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG9wdGlvbnN8UmFuZG9tIG9wdGlvbnN8CiAgICAgICAgICogfHJldHVybiB8UmFuZG9tIGNvbG9yICB8CiAgICAgICAgICoKICAgICAgICAgKiBBdmFpbGFibGUgb3B0aW9uczoKICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGNvdW50PTEgICB8Q29sb3IgbnVtYmVyICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxodWUgICAgICAgfEh1ZSwgbnVtYmVyIGJldHdlZW4gMCBhbmQgMzYwICAgIHwKICAgICAgICAgKiB8bGlnaHRuZXNzIHxMaWdodG5lc3MsIG51bWJlciBiZXR3ZWVuIDAgYW5kIDF8CiAgICAgICAgICogfGZvcm1hdD1oZXh8Q29sb3IgZm9ybWF0LCBoZXgsIGhzbCBvciByZ2IgICAgfAogICAgICAgICAqIHxzZWVkICAgICAgfFJhbmRvbSBjb2xvciBzZWVkICAgICAgICAgICAgICAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHJhbmRvbUNvbG9yKHsKICAgICAgICAgKiAgICAgY291bnQ6IDIKICAgICAgICAgKiB9KTsgLy8gLT4gWycjZmVkN2Y0JywgJyM1MjY0OTgnXQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmFuZG9tQ29sb3IoKTogc3RyaW5nOwogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJhbmRvbUNvbG9yKG9wdGlvbnM6IHsKICAgICAgICAgKiAgICAgY291bnQ/OiBudW1iZXI7CiAgICAgICAgICogICAgIGh1ZT86IG51bWJlcjsKICAgICAgICAgKiAgICAgbGlnaHRuZXNzPzogbnVtYmVyOwogICAgICAgICAqICAgICBmb3JtYXQ/OiBzdHJpbmc7CiAgICAgICAgICogICAgIHNlZWQ/OiBudW1iZXIKICAgICAgICAgKiB9KTogc3RyaW5nIHwgc3RyaW5nW107CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGRlZmF1bHRzIHJhbmRvbSBDb2xvciBzZWVkUmFuZG9tIGlzRm4gCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIG9wdGlvbnMgPQogICAgICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTsKICAgICAgICAgICAgZGVmYXVsdHMob3B0aW9ucywgZGVmT3B0cyk7CiAgICAgICAgICAgIHZhciBjb3VudCA9IG9wdGlvbnMuY291bnQ7CiAgICAgICAgICAgIHZhciByYW5kb21IID0gb3B0aW9ucy5yYW5kb21ILAogICAgICAgICAgICAgICAgcmFuZG9tTCA9IG9wdGlvbnMucmFuZG9tTCwKICAgICAgICAgICAgICAgIHJhbmRvbVMgPSBvcHRpb25zLnJhbmRvbVM7CgogICAgICAgICAgICBpZiAoIWlzRm4ocmFuZG9tSCkpIHsKICAgICAgICAgICAgICAgIHZhciBzZWVkID0gb3B0aW9ucy5zZWVkIHx8IHJhbmRvbSgwLCAxMDAwMDApOwogICAgICAgICAgICAgICAgcmFuZG9tSCA9IHNlZWRSYW5kb20oc2VlZCwgMCwgMzYwLCBmYWxzZSk7CiAgICAgICAgICAgICAgICByYW5kb21MID0gc2VlZFJhbmRvbShzZWVkICsgMSwgMCwgMSk7CiAgICAgICAgICAgICAgICByYW5kb21TID0gc2VlZFJhbmRvbShzZWVkICsgMiwgMCwgMSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChjb3VudCA+IDEpIHsKICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBbXTsKCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBjb2xvcnMucHVzaCgKICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbUg6IHJhbmRvbUgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbUw6IHJhbmRvbUwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbVM6IHJhbmRvbVMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGNvbG9yczsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGh1ZSA9IG9wdGlvbnMuaHVlIHx8IHJhbmRvbUgoKTsKICAgICAgICAgICAgdmFyIGxpZ2h0bmVzcyA9IG9wdGlvbnMubGlnaHRuZXNzIHx8IHJhbmRvbUwoKS50b0ZpeGVkKDIpOwogICAgICAgICAgICB2YXIgc2F0dXJhdGlvbiA9IG9wdGlvbnMuc2F0dXJhdGlvbiB8fCByYW5kb21TKCkudG9GaXhlZCgyKTsKICAgICAgICAgICAgdmFyIGNvbG9yID0gbmV3IENvbG9yKHsKICAgICAgICAgICAgICAgIHZhbDogW2h1ZSwgTWF0aC5yb3VuZChzYXR1cmF0aW9uICogMTAwKSwgTWF0aC5yb3VuZChsaWdodG5lc3MgKiAxMDApXSwKICAgICAgICAgICAgICAgIG1vZGVsOiAnaHNsJwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIHN3aXRjaCAob3B0aW9ucy5mb3JtYXQpIHsKICAgICAgICAgICAgICAgIGNhc2UgJ2hzbCc6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbG9yLnRvSHNsKCk7CgogICAgICAgICAgICAgICAgY2FzZSAncmdiJzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sb3IudG9SZ2IoKTsKCiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2xvci50b0hleCgpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgdmFyIGRlZk9wdHMgPSB7CiAgICAgICAgICAgIGNvdW50OiAxLAogICAgICAgICAgICBmb3JtYXQ6ICdoZXgnCiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJhbmRvbUlkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5yYW5kb21JZCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEEgdGlueSBpZCBnZW5lcmF0b3IsIHNpbWlsYXIgdG8gbmFub2lkLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzaXplPTIxfElkIHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHN5bWJvbHN8U3ltYm9scyB1c2VkIHRvIGdlbmVyYXRlIGlkcywgYS16QS1aMC05Xy0gYnkgZGVmYXVsdHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHJhbmRvbUlkKCk7IC8vIC0+ICdvS3B5NEh3VThFNkl2VTVJMDNneVEnCiAgICAgICAgICogcmFuZG9tSWQoNSk7IC8vIC0+ICdzTTZFOScKICAgICAgICAgKiByYW5kb21JZCg1LCAnYWJjJyk7IC8vIC0+ICdjYmJjYicKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJhbmRvbUlkKHNpemU/OiBudW1iZXIsIHN5bWJvbHM/OiBzdHJpbmcpOiBzdHJpbmc7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHJhbmRvbUJ5dGVzIAogICAgICAgICAqLwoKICAgICAgICB2YXIgZGVmU3ltYm9scyA9CiAgICAgICAgICAgICdNb2R1bGVTeW1iaGFzT3duUHItMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE5RUlRVVldYWVpfY2ZnaWprcHF0dnh6JzsKCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgc2l6ZSA9CiAgICAgICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IDIxOwogICAgICAgICAgICB2YXIgc3ltYm9scyA9CiAgICAgICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZAogICAgICAgICAgICAgICAgICAgID8gYXJndW1lbnRzWzFdCiAgICAgICAgICAgICAgICAgICAgOiBkZWZTeW1ib2xzOwogICAgICAgICAgICB2YXIgaWQgPSAnJzsKICAgICAgICAgICAgdmFyIGxlbiA9IHN5bWJvbHMubGVuZ3RoOwogICAgICAgICAgICB2YXIgYnl0ZXMgPSByYW5kb21CeXRlcygyMSk7CgogICAgICAgICAgICB3aGlsZSAoMCA8IHNpemUtLSkgewogICAgICAgICAgICAgICAgaWQgKz0gc3ltYm9sc1tieXRlc1tzaXplXSAlIGxlbl07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBpZDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcmFuZG9tSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8ucmFuZG9tSXRlbSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEdldCBhIHJhbmRvbSBpdGVtIGZyb20gYW4gYXJyYXkuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGFyciAgIHxBcnJheSB0byBnZXQgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFJhbmRvbWx5IHBpY2tlZCBpdGVtfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogcmFuZG9tSXRlbShbMSwgMiwgM10pOyAvLyAtPiAyCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByYW5kb21JdGVtKGFycjogYW55W10pOiBhbnk7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHJhbmRvbSAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGFycikgewogICAgICAgICAgICByZXR1cm4gYXJyW3JhbmRvbSgwLCBhcnIubGVuZ3RoIC0gMSldOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSByYW5nZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8ucmFuZ2UgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDcmVhdGUgZmxleGlibHktbnVtYmVyZWQgbGlzdHMgb2YgaW50ZWdlcnMuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdGFydCB8U3RhcnQgb2YgdGhlIHJhbmdlICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8ZW5kICAgfEVuZCBvZiB0aGUgcmFuZ2UgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHN0ZXA9MXxWYWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5fAogICAgICAgICAqIHxyZXR1cm58TGlzdCBvZiBpbnRlZ2VycyAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHJhbmdlKDUpOyAvLyAtPiBbMCwgMSwgMiwgMywgNF0KICAgICAgICAgKiByYW5nZSgwLCA1LCAyKSAvLyAtPiBbMCwgMiwgNF0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJhbmdlKHN0YXJ0OiBudW1iZXIsIGVuZD86IG51bWJlciwgc3RlcD86IG51bWJlcik6IG51bWJlcltdOwogICAgICAgICAqLwogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdGFydCwgZW5kLCBzdGVwKSB7CiAgICAgICAgICAgIGlmIChlbmQgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgZW5kID0gc3RhcnQgfHwgMDsKICAgICAgICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFzdGVwKSBzdGVwID0gZW5kIDwgc3RhcnQgPyAtMSA6IDE7CiAgICAgICAgICAgIHZhciBsZW4gPSBNYXRoLm1heChNYXRoLmNlaWwoKGVuZCAtIHN0YXJ0KSAvIHN0ZXApLCAwKTsKICAgICAgICAgICAgdmFyIHJldCA9IEFycmF5KGxlbik7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrLCBzdGFydCArPSBzdGVwKSB7CiAgICAgICAgICAgICAgICByZXRbaV0gPSBzdGFydDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcmM0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5yYzQgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBSQzQgc3ltbWV0cmljIGVuY3J5cHRpb24gaW1wbGVtZW50YXRpb24uCiAgICAgICAgICoKICAgICAgICAgKiAjIyMgZW5jcnlwdAogICAgICAgICAqCiAgICAgICAgICogUkM0IGVuY3J5cHRpb24sIHJlc3VsdCBhcyBiYXNlNjQgc3RyaW5nLgogICAgICAgICAqCiAgICAgICAgICogIyMjIGRlY3J5cHQKICAgICAgICAgKgogICAgICAgICAqIFJDNCBkZWNyeXB0aW9uLCBwYXNzIGJhc2U2NCBzdHJpbmcgYXMgaW5wdXQuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGtleSAgIHxTZWNyZXQga2V5ICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8c3RyICAgfFN0cmluZyB0byBiZSBlbmNyeXB0ZWQvZGVjcnlwdGVkfAogICAgICAgICAqIHxyZXR1cm58RW5jcnlwdGVkL2RlY3J5cHRlZCBzdHJpbmcgICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiByYzQuZW5jcnlwdCgnbGljaWEnLCAnSGVsbG8gd29ybGQnKTsgLy8gLT4gJ2o5eTJWcFNmUjNBZE5OOD0nCiAgICAgICAgICogcmM0LmRlY3J5cHQoJ2xpY2lhJywgJ2o5eTJWcFNmUjNBZE5OOD0nKTsgLy8gLT4gJ0hlbGxvIHdvcmxkJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgY29uc3QgcmM0OiB7CiAgICAgICAgICogICAgIGVuY3J5cHQoa2V5OiBzdHJpbmcsIHN0cjogc3RyaW5nKTogc3RyaW5nOwogICAgICAgICAqICAgICBkZWNyeXB0KGtleTogc3RyaW5nLCBzdHI6IHN0cmluZyk6IHN0cmluZzsKICAgICAgICAgKiB9OwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBiYXNlNjQgYnl0ZXNUb1N0ciBzdHJUb0J5dGVzIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gewogICAgICAgICAgICBlbmNyeXB0OiBmdW5jdGlvbihrZXksIHN0cikgewogICAgICAgICAgICAgICAgcmV0dXJuIHJjNChrZXksIHN0ciwgZmFsc2UpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBkZWNyeXB0OiBmdW5jdGlvbihrZXksIHN0cikgewogICAgICAgICAgICAgICAgcmV0dXJuIHJjNChrZXksIHN0ciwgdHJ1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiByYzQoa2V5LCBzdHIsIGRlY3J5cHQpIHsKICAgICAgICAgICAga2V5ID0gc3RyVG9CeXRlcyhrZXkpOwoKICAgICAgICAgICAgaWYgKCFkZWNyeXB0KSB7CiAgICAgICAgICAgICAgICBzdHIgPSBzdHJUb0J5dGVzKHN0cik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzdHIgPSBiYXNlNjQuZGVjb2RlKHN0cik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTsKICAgICAgICAgICAgdmFyIHMgPSBbXTsKICAgICAgICAgICAgdmFyIGogPSAwOwogICAgICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgICAgIHZhciB4OwoKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAgICAgICAgICAgICAgICBzW2ldID0gaTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAgICAgICAgICAgICAgICBqID0gKGogKyBzW2ldICsga2V5W2kgJSBrZXkubGVuZ3RoXSkgJSAyNTY7CiAgICAgICAgICAgICAgICB4ID0gc1tpXTsKICAgICAgICAgICAgICAgIHNbaV0gPSBzW2pdOwogICAgICAgICAgICAgICAgc1tqXSA9IHg7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGkgPSAwOwogICAgICAgICAgICBqID0gMDsKCiAgICAgICAgICAgIGZvciAodmFyIHkgPSAwLCBsZW4gPSBzdHIubGVuZ3RoOyB5IDwgbGVuOyB5KyspIHsKICAgICAgICAgICAgICAgIGkgPSAoaSArIDEpICUgMjU2OwogICAgICAgICAgICAgICAgaiA9IChqICsgc1tpXSkgJSAyNTY7CiAgICAgICAgICAgICAgICB4ID0gc1tpXTsKICAgICAgICAgICAgICAgIHNbaV0gPSBzW2pdOwogICAgICAgICAgICAgICAgc1tqXSA9IHg7CiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChzdHJbeV0gXiBzWyhzW2ldICsgc1tqXSkgJSAyNTZdKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICFkZWNyeXB0ID8gYmFzZTY0LmVuY29kZShyZXN1bHQpIDogYnl0ZXNUb1N0cihyZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlZHVjZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgcmVkdWNlID0gXy5yZWR1Y2UgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBUdXJuIGEgbGlzdCBvZiB2YWx1ZXMgaW50byBhIHNpbmdsZSB2YWx1ZS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgICAgICAgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8b2JqICAgICAgICAgICAgICB8Q29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIgICAgfAogICAgICAgICAqIHxpdGVyYXRvcj1pZGVudGl0eXxGdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb258CiAgICAgICAgICogfGluaXRpYWwgICAgICAgICAgfEluaXRpYWwgdmFsdWUgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8Y3R4ICAgICAgICAgICAgICB8RnVuY3Rpb24gY29udGV4dCAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm4gICAgICAgICAgIHxBY2N1bXVsYXRlZCB2YWx1ZSAgICAgICAgICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiByZWR1Y2UoWzEsIDIsIDNdLCBmdW5jdGlvbiAoc3VtLCBuKSB7IHJldHVybiBzdW0gKyBuIH0sIDApOyAvLyAtPiA2CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByZWR1Y2U8VCwgVFJlc3VsdD4oCiAgICAgICAgICogICAgIGxpc3Q6IHR5cGVzLkxpc3Q8VD4sCiAgICAgICAgICogICAgIGl0ZXJhdG9yOiB0eXBlcy5NZW1vSXRlcmF0b3I8VCwgVFJlc3VsdD4sCiAgICAgICAgICogICAgIG1lbW8/OiBUUmVzdWx0LAogICAgICAgICAqICAgICBjb250ZXh0PzogYW55CiAgICAgICAgICogKTogVFJlc3VsdDsKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByZWR1Y2U8VCwgVFJlc3VsdD4oCiAgICAgICAgICogICAgIGxpc3Q6IHR5cGVzLkRpY3Rpb25hcnk8VD4sCiAgICAgICAgICogICAgIGl0ZXJhdG9yOiB0eXBlcy5NZW1vT2JqZWN0SXRlcmF0b3I8VCwgVFJlc3VsdD4sCiAgICAgICAgICogICAgIG1lbW8/OiBUUmVzdWx0LAogICAgICAgICAqICAgICBjb250ZXh0PzogYW55CiAgICAgICAgICogKTogVFJlc3VsdDsKICAgICAgICAgKi8KCiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogb3B0aW1pemVDYiBpc0Fyckxpa2UgaXNVbmRlZiBrZXlzIHR5cGVzIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gY3JlYXRlUmVkdWNlKDEpOwogICAgICAgIGV4cG9ydHMuY3JlYXRlID0gY3JlYXRlUmVkdWNlOwoKICAgICAgICBmdW5jdGlvbiBjcmVhdGVSZWR1Y2UoZGlyKSB7CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdG9yLCBpbml0aWFsLCBjdHgpIHsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yID0gb3B0aW1pemVDYihpdGVyYXRvciwgY3R4KTsKICAgICAgICAgICAgICAgIHZhciBpLCBsZW4sIGtleTsKCiAgICAgICAgICAgICAgICBpZiAoaXNBcnJMaWtlKG9iaikpIHsKICAgICAgICAgICAgICAgICAgICBsZW4gPSBvYmoubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIGkgPSBkaXIgPiAwID8gMCA6IGxlbiAtIDE7CgogICAgICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmKGluaXRpYWwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgPSBvYmpbaV07CiAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gZGlyOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBsZW4gJiYgaSA+PSAwOyBpICs9IGRpcikgewogICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsID0gaXRlcmF0b3IoaW5pdGlhbCwgb2JqW2ldLCBpLCBvYmopOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIF9rZXlzID0ga2V5cyhvYmopOwoKICAgICAgICAgICAgICAgICAgICBsZW4gPSBfa2V5cy5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgaSA9IGRpciA+IDAgPyAwIDogbGVuIC0gMTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVW5kZWYoaW5pdGlhbCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbCA9IG9ialtfa2V5c1tpXV07CiAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gZGlyOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBsZW4gJiYgaSA+PSAwOyBpICs9IGRpcikgewogICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBfa2V5c1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbCA9IGl0ZXJhdG9yKGluaXRpYWwsIG9ialtrZXldLCBrZXksIG9iaik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBpbml0aWFsOwogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlZHVjZVJpZ2h0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5yZWR1Y2VSaWdodCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24gb2YgcmVkdWNlLgogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogcmVkdWNlUmlnaHQoW1sxXSwgWzJdLCBbM11dLCBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5jb25jYXQoYikgfSwgW10pOyAvLyAtPiBbMywgMiwgMV0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlZHVjZVJpZ2h0PFQsIFRSZXN1bHQ+KAogICAgICAgICAqICAgICBsaXN0OiB0eXBlcy5Db2xsZWN0aW9uPFQ+LAogICAgICAgICAqICAgICBpdGVyYXRvcjogdHlwZXMuTWVtb0l0ZXJhdG9yPFQsIFRSZXN1bHQ+LAogICAgICAgICAqICAgICBtZW1vPzogVFJlc3VsdCwKICAgICAgICAgKiAgICAgY29udGV4dD86IGFueQogICAgICAgICAqICk6IFRSZXN1bHQ7CiAgICAgICAgICovCgogICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHJlZHVjZSB0eXBlcyAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IHJlZHVjZS5jcmVhdGUoLTEpOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcmVqZWN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5yZWplY3QgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBPcHBvc2l0ZSBvZiBmaWx0ZXIuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxvYmogICAgICB8Q29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cHJlZGljYXRlfEZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbiAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfGN0eCAgICAgIHxQcmVkaWNhdGUgY29udGV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm4gICB8QXJyYXkgb2YgYWxsIHZhbHVlcyB0aGF0IGRpZG4ndCBwYXNzIHByZWRpY2F0ZXwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHJlamVjdChbMSwgMiwgMywgNCwgNV0sIGZ1bmN0aW9uICh2YWwpIHsKICAgICAgICAgKiAgICAgcmV0dXJuIHZhbCAlIDIgPT09IDA7CiAgICAgICAgICogfSk7IC8vIC0+IFsxLCAzLCA1XQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmVqZWN0PFQ+KAogICAgICAgICAqICAgICBsaXN0OiB0eXBlcy5MaXN0PFQ+LAogICAgICAgICAqICAgICBpdGVyYXRvcjogdHlwZXMuTGlzdEl0ZXJhdG9yPFQsIGJvb2xlYW4+LAogICAgICAgICAqICAgICBjb250ZXh0PzogYW55CiAgICAgICAgICogKTogVFtdOwogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlamVjdDxUPigKICAgICAgICAgKiAgICAgb2JqZWN0OiB0eXBlcy5EaWN0aW9uYXJ5PFQ+LAogICAgICAgICAqICAgICBpdGVyYXRvcjogdHlwZXMuT2JqZWN0SXRlcmF0b3I8VCwgYm9vbGVhbj4sCiAgICAgICAgICogICAgIGNvbnRleHQ/OiBhbnkKICAgICAgICAgKiApOiBUW107CiAgICAgICAgICovCgogICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHNhZmVDYiBuZWdhdGUgZmlsdGVyIHR5cGVzIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24ob2JqLCBwcmVkaWNhdGUsIGN0eCkgewogICAgICAgICAgICBwcmVkaWNhdGUgPSBzYWZlQ2IobmVnYXRlKHByZWRpY2F0ZSksIGN0eCk7CiAgICAgICAgICAgIHJldHVybiBmaWx0ZXIob2JqLCBwcmVkaWNhdGUpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBycGFkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5ycGFkID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogUGFkIHN0cmluZyBvbiB0aGUgcmlnaHQgc2lkZSBpZiBpdCdzIHNob3J0ZXIgdGhhbiBsZW5ndGguCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHIgICB8U3RyaW5nIHRvIHBhZCAgICAgICAgIHwKICAgICAgICAgKiB8bGVuICAgfFBhZGRpbmcgbGVuZ3RoICAgICAgICB8CiAgICAgICAgICogfGNoYXJzIHxTdHJpbmcgdXNlZCBhcyBwYWRkaW5nfAogICAgICAgICAqIHxyZXR1cm58UmVzdWx0IHN0cmluZyAgICAgICAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHJwYWQoJ2EnLCA1KTsgLy8gLT4gJ2EgICAgJwogICAgICAgICAqIHJwYWQoJ2EnLCA1LCAnLScpOyAvLyAtPiAnYS0tLS0nCiAgICAgICAgICogcnBhZCgnYWJjJywgMywgJy0nKTsgLy8gLT4gJ2FiYycKICAgICAgICAgKiBycGFkKCdhYmMnLCA1LCAnYWInKTsgLy8gLT4gJ2FiY2FiJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcnBhZChzdHI6IHN0cmluZywgbGVuOiBudW1iZXIsIGNoYXJzPzogc3RyaW5nKTogc3RyaW5nOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiByZXBlYXQgdG9TdHIgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdHIsIGxlbiwgY2hhcnMpIHsKICAgICAgICAgICAgc3RyID0gdG9TdHIoc3RyKTsKICAgICAgICAgICAgdmFyIHN0ckxlbiA9IHN0ci5sZW5ndGg7CiAgICAgICAgICAgIGNoYXJzID0gY2hhcnMgfHwgJyAnOwogICAgICAgICAgICBpZiAoc3RyTGVuIDwgbGVuKSBzdHIgPSAoc3RyICsgcmVwZWF0KGNoYXJzLCBsZW4gLSBzdHJMZW4pKS5zbGljZSgwLCBsZW4pOwogICAgICAgICAgICByZXR1cm4gc3RyOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBydHJpbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgcnRyaW0gPSBfLnJ0cmltID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogUmVtb3ZlIGNoYXJzIG9yIHdoaXRlLXNwYWNlcyBmcm9tIGVuZCBvZiBzdHJpbmcuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8c3RyICAgfFN0cmluZyB0byB0cmltICAgIHwKICAgICAgICAgKiB8Y2hhcnMgfENoYXJhY3RlcnMgdG8gdHJpbXwKICAgICAgICAgKiB8cmV0dXJufFRyaW1tZWQgc3RyaW5nICAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHJ0cmltKCcgYWJjICAnKTsgLy8gLT4gJyBhYmMnCiAgICAgICAgICogcnRyaW0oJ19hYmNfJywgJ18nKTsgLy8gLT4gJ19hYmMnCiAgICAgICAgICogcnRyaW0oJ19hYmNfJywgWydjJywgJ18nXSk7IC8vIC0+ICdfYWInCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBydHJpbShzdHI6IHN0cmluZywgY2hhcnM/OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZzsKICAgICAgICAgKi8KICAgICAgICB2YXIgcmVnU3BhY2UgPSAvXHMrJC87CgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdHIsIGNoYXJzKSB7CiAgICAgICAgICAgIGlmIChjaGFycyA9PSBudWxsKSByZXR1cm4gc3RyLnJlcGxhY2UocmVnU3BhY2UsICcnKTsKICAgICAgICAgICAgdmFyIGVuZCA9IHN0ci5sZW5ndGggLSAxOwogICAgICAgICAgICB2YXIgY2hhckxlbiA9IGNoYXJzLmxlbmd0aDsKICAgICAgICAgICAgdmFyIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgdmFyIGk7CiAgICAgICAgICAgIHZhciBjOwoKICAgICAgICAgICAgd2hpbGUgKGZvdW5kICYmIGVuZCA+PSAwKSB7CiAgICAgICAgICAgICAgICBmb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgaSA9IC0xOwogICAgICAgICAgICAgICAgYyA9IHN0ci5jaGFyQXQoZW5kKTsKCiAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgY2hhckxlbikgewogICAgICAgICAgICAgICAgICAgIGlmIChjID09PSBjaGFyc1tpXSkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGVuZC0tOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBlbmQgPj0gMCA/IHN0ci5zdWJzdHJpbmcoMCwgZW5kICsgMSkgOiAnJzsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdHJpbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgdHJpbSA9IF8udHJpbSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFJlbW92ZSBjaGFycyBvciB3aGl0ZS1zcGFjZXMgZnJvbSBiZWdpbm5pbmcgZW5kIG9mIHN0cmluZy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHIgICB8U3RyaW5nIHRvIHRyaW0gICAgfAogICAgICAgICAqIHxjaGFycyB8Q2hhcmFjdGVycyB0byB0cmltfAogICAgICAgICAqIHxyZXR1cm58VHJpbW1lZCBzdHJpbmcgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogdHJpbSgnIGFiYyAgJyk7IC8vIC0+ICdhYmMnCiAgICAgICAgICogdHJpbSgnX2FiY18nLCAnXycpOyAvLyAtPiAnYWJjJwogICAgICAgICAqIHRyaW0oJ19hYmNfJywgWydhJywgJ2MnLCAnXyddKTsgLy8gLT4gJ2InCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB0cmltKHN0cjogc3RyaW5nLCBjaGFycz86IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBsdHJpbSBydHJpbSAKICAgICAgICAgKi8KCiAgICAgICAgdmFyIHJlZ1NwYWNlID0gL15ccyt8XHMrJC9nOwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oc3RyLCBjaGFycykgewogICAgICAgICAgICBpZiAoY2hhcnMgPT0gbnVsbCkgcmV0dXJuIHN0ci5yZXBsYWNlKHJlZ1NwYWNlLCAnJyk7CiAgICAgICAgICAgIHJldHVybiBsdHJpbShydHJpbShzdHIsIGNoYXJzKSwgY2hhcnMpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjc3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmNzcyA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENzcyBwYXJzZXIgYW5kIHNlcmlhbGl6ZXIuCiAgICAgICAgICoKICAgICAgICAgKiBDb21tZW50cyB3aWxsIGJlIHN0cmlwcGVkLgogICAgICAgICAqCiAgICAgICAgICogIyMjIHBhcnNlCiAgICAgICAgICoKICAgICAgICAgKiBQYXJzZSBjc3MgaW50byBqcyBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxjc3MgICB8Q3NzIHN0cmluZyAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFBhcnNlZCBqcyBvYmplY3R8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgc3RyaW5naWZ5CiAgICAgICAgICoKICAgICAgICAgKiBTdHJpbmdpZnkgb2JqZWN0IGludG8gY3NzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgICB8RGVzYyAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHlsZXNoZWV0fE9iamVjdCB0byBzdHJpbmdpZnl8CiAgICAgICAgICogfG9wdGlvbnMgICB8U3RyaW5naWZ5IG9wdGlvbnMgIHwKICAgICAgICAgKiB8cmV0dXJuICAgIHxDc3Mgc3RyaW5nICAgICAgICAgfAogICAgICAgICAqCiAgICAgICAgICogT3B0aW9uczoKICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgIHxEZXNjICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8aW5kZW50PScgICd8U3RyaW5nIHVzZWQgdG8gaW5kZW50fAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3Qgc3R5bGVzaGVldCA9IGNzcy5wYXJzZSgnLm5hbWUgeyBiYWNrZ3JvdW5kOiAjMDAwOyBjb2xvcjogcmVkOyB9Jyk7CiAgICAgICAgICogLy8ge3R5cGU6ICdzdHlsZXNoZWV0JywgcnVsZXM6IFt7dHlwZTogJ3J1bGUnLCBzZWxlY3RvcjogJy5uYW1lJywgZGVjbGFyYXRpb25zOiBbLi4uXX1dfQogICAgICAgICAqIGNzcy5zdHJpbmdpZnkoc3R5bGVzaGVldCk7CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBjb25zdCBjc3M6IHsKICAgICAgICAgKiAgICAgcGFyc2UoY3NzOiBzdHJpbmcpOiBvYmplY3Q7CiAgICAgICAgICogICAgIHN0cmluZ2lmeShzdHlsZXNoZWV0OiBvYmplY3QsIG9wdGlvbnM/OiB7IGluZGVudD86IHN0cmluZyB9KTogc3RyaW5nOwogICAgICAgICAqIH0KICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogQ2xhc3MgdHJpbSByZXBlYXQgZGVmYXVsdHMgY2FtZWxDYXNlIAogICAgICAgICAqLyAvLyBodHRwczovL2dpdGh1Yi5jb20vcmV3b3JrY3NzL2NzcwoKICAgICAgICBleHBvcnRzID0gewogICAgICAgICAgICBwYXJzZTogZnVuY3Rpb24oY3NzKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBhcnNlcihjc3MpLnBhcnNlKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24oc3R5bGVzaGVldCwgb3B0aW9ucykgewogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21waWxlcihzdHlsZXNoZWV0LCBvcHRpb25zKS5jb21waWxlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIHZhciByZWdDb21tZW50cyA9IC8oXC9cKltcc1xTXSo/XCpcLykvZ2k7CiAgICAgICAgdmFyIHJlZ09wZW4gPSAvXntccyovOwogICAgICAgIHZhciByZWdDbG9zZSA9IC9efS87CiAgICAgICAgdmFyIHJlZ1doaXRlc3BhY2UgPSAvXlxzKi87CiAgICAgICAgdmFyIHJlZ1Byb3BlcnR5ID0gL14oXCo/Wy0jLypcXFx3XSsoXFtbMC05YS16Xy1dK1xdKT8pXHMqLzsKICAgICAgICB2YXIgcmVnVmFsdWUgPSAvXigoPzonKD86XFwnfC4pKj8nfCIoPzpcXCJ8LikqPyJ8XChbXildKj9cKXxbXn07XSkrKS87CiAgICAgICAgdmFyIHJlZ1NlbGVjdG9yID0gL14oW157XSspLzsKICAgICAgICB2YXIgcmVnU2VtaWNvbG9uID0gL15bO1xzXSovOwogICAgICAgIHZhciByZWdDb2xvbiA9IC9eOlxzKi87CiAgICAgICAgdmFyIHJlZ01lZGlhID0gL15AbWVkaWEgKihbXntdKykvOwogICAgICAgIHZhciByZWdLZXlmcmFtZXMgPSAvXkAoWy1cd10rKT9rZXlmcmFtZXNccyovOwogICAgICAgIHZhciByZWdGb250RmFjZSA9IC9eQGZvbnQtZmFjZVxzKi87CiAgICAgICAgdmFyIHJlZ1N1cHBvcnRzID0gL15Ac3VwcG9ydHMgKihbXntdKykvOwogICAgICAgIHZhciByZWdJZGVudGlmaWVyID0gL14oWy1cd10rKVxzKi87CiAgICAgICAgdmFyIHJlZ0tleWZyYW1lU2VsZWN0b3IgPSAvXigoXGQrXC5cZCt8XC5cZCt8XGQrKSU/fFthLXpdKylccyovOwogICAgICAgIHZhciByZWdDb21tYSA9IC9eLFxzKi87CiAgICAgICAgdmFyIFBhcnNlciA9IENsYXNzKHsKICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gUGFyc2VyKGNzcykgewogICAgICAgICAgICAgICAgdGhpcy5pbnB1dCA9IHN0cmlwQ210KGNzcyk7CiAgICAgICAgICAgICAgICB0aGlzLm9wZW4gPSB0aGlzLl9jcmVhdGVNYXRjaGVyKHJlZ09wZW4pOwogICAgICAgICAgICAgICAgdGhpcy5jbG9zZSA9IHRoaXMuX2NyZWF0ZU1hdGNoZXIocmVnQ2xvc2UpOwogICAgICAgICAgICAgICAgdGhpcy53aGl0ZXNwYWNlID0gdGhpcy5fY3JlYXRlTWF0Y2hlcihyZWdXaGl0ZXNwYWNlKTsKICAgICAgICAgICAgICAgIHRoaXMuYXRJbXBvcnQgPSB0aGlzLl9jcmVhdGVBdFJ1bGUoJ2ltcG9ydCcpOwogICAgICAgICAgICAgICAgdGhpcy5hdENoYXJzZXQgPSB0aGlzLl9jcmVhdGVBdFJ1bGUoJ2NoYXJzZXQnKTsKICAgICAgICAgICAgICAgIHRoaXMuYXROYW1lc3BhY2UgPSB0aGlzLl9jcmVhdGVBdFJ1bGUoJ25hbWVzcGFjZScpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBwYXJzZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdHlsZXNoZWV0KCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHN0eWxlc2hlZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3R5bGVzaGVldCcsCiAgICAgICAgICAgICAgICAgICAgcnVsZXM6IHRoaXMucnVsZXMoKQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcnVsZXM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIHJ1bGU7CiAgICAgICAgICAgICAgICB2YXIgcnVsZXMgPSBbXTsKICAgICAgICAgICAgICAgIHRoaXMud2hpdGVzcGFjZSgpOwoKICAgICAgICAgICAgICAgIHdoaWxlICgKICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0Lmxlbmd0aCAmJgogICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRbMF0gIT09ICd9JyAmJgogICAgICAgICAgICAgICAgICAgIChydWxlID0gdGhpcy5hdFJ1bGUoKSB8fCB0aGlzLnJ1bGUoKSkKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgIHJ1bGVzLnB1c2gocnVsZSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy53aGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGVzOwogICAgICAgICAgICB9LAogICAgICAgICAgICBhdFJ1bGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRbMF0gIT09ICdAJykgcmV0dXJuOwogICAgICAgICAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgICAgICAgICB0aGlzLmF0S2V5ZnJhbWVzKCkgfHwKICAgICAgICAgICAgICAgICAgICB0aGlzLmF0TWVkaWEoKSB8fAogICAgICAgICAgICAgICAgICAgIHRoaXMuYXRTdXBwb3J0cygpIHx8CiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdEltcG9ydCgpIHx8CiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdENoYXJzZXQoKSB8fAogICAgICAgICAgICAgICAgICAgIHRoaXMuYXROYW1lc3BhY2UoKSB8fAogICAgICAgICAgICAgICAgICAgIHRoaXMuYXRGb250RmFjZSgpCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9LAogICAgICAgICAgICBhdEtleWZyYW1lczogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlZCA9IHRoaXMubWF0Y2gocmVnS2V5ZnJhbWVzKTsKICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlZCkgcmV0dXJuOwogICAgICAgICAgICAgICAgdmFyIHZlbmRvciA9IG1hdGNoZWRbMV0gfHwgJyc7CiAgICAgICAgICAgICAgICBtYXRjaGVkID0gdGhpcy5tYXRjaChyZWdJZGVudGlmaWVyKTsKICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlZCkgdGhyb3cgRXJyb3IoJ0BrZXlmcmFtZXMgbWlzc2luZyBuYW1lJyk7CiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG1hdGNoZWRbMV07CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMub3BlbigpKSB0aHJvdyBFcnJvcigiQGtleWZyYW1lcyBtaXNzaW5nICd7JyIpOwogICAgICAgICAgICAgICAgdmFyIGtleWZyYW1lcyA9IFtdOwogICAgICAgICAgICAgICAgdmFyIGtleWZyYW1lOwoKICAgICAgICAgICAgICAgIHdoaWxlICgoa2V5ZnJhbWUgPSB0aGlzLmtleWZyYW1lKCkpKSB7CiAgICAgICAgICAgICAgICAgICAga2V5ZnJhbWVzLnB1c2goa2V5ZnJhbWUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghdGhpcy5jbG9zZSgpKSB0aHJvdyBFcnJvcigiQGtleWZyYW1lcyBtaXNzaW5nICd9JyIpOwogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiAna2V5ZnJhbWVzJywKICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLAogICAgICAgICAgICAgICAgICAgIHZlbmRvcjogdmVuZG9yLAogICAgICAgICAgICAgICAgICAgIGtleWZyYW1lczoga2V5ZnJhbWVzCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9LAogICAgICAgICAgICBrZXlmcmFtZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBbXTsKICAgICAgICAgICAgICAgIHZhciBtYXRjaGVkOwoKICAgICAgICAgICAgICAgIHdoaWxlICgobWF0Y2hlZCA9IHRoaXMubWF0Y2gocmVnS2V5ZnJhbWVTZWxlY3RvcikpKSB7CiAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IucHVzaChtYXRjaGVkWzFdKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKHJlZ0NvbW1hKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdG9yLmxlbmd0aCkgcmV0dXJuOwogICAgICAgICAgICAgICAgdGhpcy53aGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHR5cGU6ICdrZXlmcmFtZScsCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I6IHNlbGVjdG9yLmpvaW4oJywgJyksCiAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiB0aGlzLmRlY2xhcmF0aW9ucygpCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9LAogICAgICAgICAgICBhdFN1cHBvcnRzOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBtYXRjaGVkID0gdGhpcy5tYXRjaChyZWdTdXBwb3J0cyk7CiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZWQpIHJldHVybjsKICAgICAgICAgICAgICAgIHZhciBzdXBwb3J0cyA9IHRyaW0obWF0Y2hlZFsxXSk7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMub3BlbigpKSB0aHJvdyBFcnJvcigiQHN1cHBvcnRzIG1pc3NpbmcgJ3snIik7CiAgICAgICAgICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLnJ1bGVzKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2xvc2UoKSkgdGhyb3cgRXJyb3IoIkBzdXBwb3J0cyBtaXNzaW5nICd9JyIpOwogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3VwcG9ydHMnLAogICAgICAgICAgICAgICAgICAgIHN1cHBvcnRzOiBzdXBwb3J0cywKICAgICAgICAgICAgICAgICAgICBydWxlczogcnVsZXMKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGF0Rm9udEZhY2U6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIG1hdGNoZWQgPSB0aGlzLm1hdGNoKHJlZ0ZvbnRGYWNlKTsKICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlZCkgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wZW4oKSkgdGhyb3cgRXJyb3IoIkBmb250LWZhY2UgbWlzc2luZyAneyciKTsKICAgICAgICAgICAgICAgIHZhciBkZWNsYXJhdGlvbjsKICAgICAgICAgICAgICAgIHZhciBkZWNsYXJhdGlvbnMgPSBbXTsKCiAgICAgICAgICAgICAgICB3aGlsZSAoKGRlY2xhcmF0aW9uID0gdGhpcy5kZWNsYXJhdGlvbigpKSkgewogICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9ucy5wdXNoKGRlY2xhcmF0aW9uKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2xvc2UoKSkgdGhyb3cgRXJyb3IoIkBmb250LWZhY2UgbWlzc2luZyAnfSciKTsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2ZvbnQtZmFjZScsCiAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBkZWNsYXJhdGlvbnMKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGF0TWVkaWE6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIG1hdGNoZWQgPSB0aGlzLm1hdGNoKHJlZ01lZGlhKTsKICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlZCkgcmV0dXJuOwogICAgICAgICAgICAgICAgdmFyIG1lZGlhID0gdHJpbShtYXRjaGVkWzFdKTsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5vcGVuKCkpIHRocm93IEVycm9yKCJAbWVkaWEgbWlzc2luZyAneyciKTsKICAgICAgICAgICAgICAgIHRoaXMud2hpdGVzcGFjZSgpOwogICAgICAgICAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5ydWxlcygpOwogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNsb3NlKCkpIHRocm93IEVycm9yKCJAbWVkaWEgbWlzc2luZyAnfSciKTsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ21lZGlhJywKICAgICAgICAgICAgICAgICAgICBtZWRpYTogbWVkaWEsCiAgICAgICAgICAgICAgICAgICAgcnVsZXM6IHJ1bGVzCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9LAogICAgICAgICAgICBydWxlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBzZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IoKTsKICAgICAgICAgICAgICAgIGlmICghc2VsZWN0b3IpIHRocm93IEVycm9yKCdtaXNzaW5nIHNlbGVjdG9yJyk7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHR5cGU6ICdydWxlJywKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsCiAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiB0aGlzLmRlY2xhcmF0aW9ucygpCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9LAogICAgICAgICAgICBkZWNsYXJhdGlvbnM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGRlY2xhcmF0aW9ucyA9IFtdOwogICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wZW4oKSkgdGhyb3cgRXJyb3IoIm1pc3NpbmcgJ3snIik7CiAgICAgICAgICAgICAgICB0aGlzLndoaXRlc3BhY2UoKTsKICAgICAgICAgICAgICAgIHZhciBkZWNsYXJhdGlvbjsKCiAgICAgICAgICAgICAgICB3aGlsZSAoKGRlY2xhcmF0aW9uID0gdGhpcy5kZWNsYXJhdGlvbigpKSkgewogICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9ucy5wdXNoKGRlY2xhcmF0aW9uKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2xvc2UoKSkgdGhyb3cgRXJyb3IoIm1pc3NpbmcgJ30nIik7CiAgICAgICAgICAgICAgICB0aGlzLndoaXRlc3BhY2UoKTsKICAgICAgICAgICAgICAgIHJldHVybiBkZWNsYXJhdGlvbnM7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRlY2xhcmF0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMubWF0Y2gocmVnUHJvcGVydHkpOwogICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eSkgcmV0dXJuOwogICAgICAgICAgICAgICAgcHJvcGVydHkgPSB0cmltKHByb3BlcnR5WzBdKTsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXRjaChyZWdDb2xvbikpIHRocm93IEVycm9yKCJwcm9wZXJ0eSBtaXNzaW5nICc6JyIpOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5tYXRjaChyZWdWYWx1ZSk7CiAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKHJlZ1NlbWljb2xvbik7CiAgICAgICAgICAgICAgICB0aGlzLndoaXRlc3BhY2UoKTsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2RlY2xhcmF0aW9uJywKICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHksCiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlID8gdHJpbSh2YWx1ZVswXSkgOiAnJwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc2VsZWN0b3I6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIG1hdGNoZWQgPSB0aGlzLm1hdGNoKHJlZ1NlbGVjdG9yKTsKICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlZCkgcmV0dXJuOwogICAgICAgICAgICAgICAgcmV0dXJuIHRyaW0obWF0Y2hlZFswXSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG1hdGNoOiBmdW5jdGlvbihyZWcpIHsKICAgICAgICAgICAgICAgIHZhciBtYXRjaGVkID0gcmVnLmV4ZWModGhpcy5pbnB1dCk7CiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZWQpIHJldHVybjsKICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLmlucHV0LnNsaWNlKG1hdGNoZWRbMF0ubGVuZ3RoKTsKICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVkOwogICAgICAgICAgICB9LAogICAgICAgICAgICBfY3JlYXRlTWF0Y2hlcjogZnVuY3Rpb24ocmVnKSB7CiAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMubWF0Y2gocmVnKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9jcmVhdGVBdFJ1bGU6IGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgICAgICAgICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKCdeQCcgKyBuYW1lICsgJ1xccyooW147XSspOycpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaGVkID0gdGhpcy5tYXRjaChyZWcpOwogICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlZCkgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IG5hbWUKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIHJldFtuYW1lXSA9IHRyaW0obWF0Y2hlZFsxXSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB2YXIgQ29tcGlsZXIgPSBDbGFzcyh7CiAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uIENvbXBpbGVyKGlucHV0KSB7CiAgICAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9CiAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQKICAgICAgICAgICAgICAgICAgICAgICAgPyBhcmd1bWVudHNbMV0KICAgICAgICAgICAgICAgICAgICAgICAgOiB7fTsKICAgICAgICAgICAgICAgIGRlZmF1bHRzKG9wdGlvbnMsIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQ6ICcgICcKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0OwogICAgICAgICAgICAgICAgdGhpcy5pbmRlbnRMZXZlbCA9IDA7CiAgICAgICAgICAgICAgICB0aGlzLmluZGVudGF0aW9uID0gb3B0aW9ucy5pbmRlbnQ7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGNvbXBpbGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGVzaGVldCh0aGlzLmlucHV0KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc3R5bGVzaGVldDogZnVuY3Rpb24obm9kZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFwVmlzaXQobm9kZS5ydWxlcywgJ1xuXG4nKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgbWVkaWE6IGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICAgICAgICAgJ0BtZWRpYSAnICsKICAgICAgICAgICAgICAgICAgICBub2RlLm1lZGlhICsKICAgICAgICAgICAgICAgICAgICAnIHtcbicgKwogICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZW50KDEpICsKICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcFZpc2l0KG5vZGUucnVsZXMsICdcblxuJykgKwogICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZW50KC0xKSArCiAgICAgICAgICAgICAgICAgICAgJ1xufScKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGtleWZyYW1lczogZnVuY3Rpb24obm9kZSkgewogICAgICAgICAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgICAgICAgICAnQCcuY29uY2F0KG5vZGUudmVuZG9yLCAna2V5ZnJhbWVzICcpICsKICAgICAgICAgICAgICAgICAgICBub2RlLm5hbWUgKwogICAgICAgICAgICAgICAgICAgICcge1xuJyArCiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRlbnQoMSkgKwogICAgICAgICAgICAgICAgICAgIHRoaXMubWFwVmlzaXQobm9kZS5rZXlmcmFtZXMsICdcbicpICsKICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGVudCgtMSkgKwogICAgICAgICAgICAgICAgICAgICdcbn0nCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9LAogICAgICAgICAgICBzdXBwb3J0czogZnVuY3Rpb24obm9kZSkgewogICAgICAgICAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgICAgICAgICAnQHN1cHBvcnRzICcgKwogICAgICAgICAgICAgICAgICAgIG5vZGUuc3VwcG9ydHMgKwogICAgICAgICAgICAgICAgICAgICcge1xuJyArCiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRlbnQoMSkgKwogICAgICAgICAgICAgICAgICAgIHRoaXMubWFwVmlzaXQobm9kZS5ydWxlcywgJ1xuXG4nKSArCiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRlbnQoLTEpICsKICAgICAgICAgICAgICAgICAgICAnXG59JwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAga2V5ZnJhbWU6IGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJ1bGUobm9kZSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG1hcFZpc2l0OiBmdW5jdGlvbihub2RlcywgZGVsaW1pdGVyKSB7CiAgICAgICAgICAgICAgICB2YXIgc3RyID0gJyc7CgogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG5vZGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTsKICAgICAgICAgICAgICAgICAgICBzdHIgKz0gdGhpc1tjYW1lbENhc2Uobm9kZS50eXBlKV0obm9kZSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRlbGltaXRlciAmJiBpIDwgbGVuIC0gMSkgc3RyICs9IGRlbGltaXRlcjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gc3RyOwogICAgICAgICAgICB9LAogICAgICAgICAgICBmb250RmFjZTogZnVuY3Rpb24obm9kZSkgewogICAgICAgICAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgICAgICAgICAnQGZvbnQtZmFjZSB7XG4nICsKICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGVudCgxKSArCiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBWaXNpdChub2RlLmRlY2xhcmF0aW9ucywgJ1xuJykgKwogICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZW50KC0xKSArCiAgICAgICAgICAgICAgICAgICAgJ1xufScKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJ1bGU6IGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRlbnQoKSArCiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZWxlY3RvciArCiAgICAgICAgICAgICAgICAgICAgJyB7XG4nICsKICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGVudCgxKSArCiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBWaXNpdChub2RlLmRlY2xhcmF0aW9ucywgJ1xuJykgKwogICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZW50KC0xKSArCiAgICAgICAgICAgICAgICAgICAgJ1xuJyArCiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRlbnQoKSArCiAgICAgICAgICAgICAgICAgICAgJ30nCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9LAogICAgICAgICAgICBkZWNsYXJhdGlvbjogZnVuY3Rpb24obm9kZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZW50KCkgKyBub2RlLnByb3BlcnR5ICsgJzogJyArIG5vZGUudmFsdWUgKyAnOyc7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGltcG9ydDogZnVuY3Rpb24obm9kZSkgewogICAgICAgICAgICAgICAgcmV0dXJuICdAaW1wb3J0ICcuY29uY2F0KG5vZGUuaW1wb3J0LCAnOycpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBjaGFyc2V0OiBmdW5jdGlvbihub2RlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJ0BjaGFyc2V0ICcuY29uY2F0KG5vZGUuY2hhcnNldCwgJzsnKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgbmFtZXNwYWNlOiBmdW5jdGlvbihub2RlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJ0BuYW1lc3BhY2UgJy5jb25jYXQobm9kZS5uYW1lc3BhY2UsICc7Jyk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGluZGVudDogZnVuY3Rpb24obGV2ZWwpIHsKICAgICAgICAgICAgICAgIGlmIChsZXZlbCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZW50TGV2ZWwgKz0gbGV2ZWw7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiByZXBlYXQodGhpcy5pbmRlbnRhdGlvbiwgdGhpcy5pbmRlbnRMZXZlbCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgdmFyIHN0cmlwQ210ID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgIHJldHVybiBzdHIucmVwbGFjZShyZWdDb21tZW50cywgJycpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBleHRyYWN0QmxvY2tDbXRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5leHRyYWN0QmxvY2tDbXRzID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogRXh0cmFjdCBibG9jayBjb21tZW50cyBmcm9tIHNvdXJjZSBjb2RlLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHIgICB8U3RyaW5nIHRvIGV4dHJhY3R8CiAgICAgICAgICogfHJldHVybnxCbG9jayBjb21tZW50cyAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGV4dHJhY3RCbG9ja0NtdHMoJ1wvKmxpY2lhKlwvJyk7IC8vIC0+IFsnbGljaWEnXQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZXh0cmFjdEJsb2NrQ210cyhzdHI6IHN0cmluZyk6IHN0cmluZ1tdOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBtYXAgdHJpbSAKICAgICAgICAgKi8KCiAgICAgICAgdmFyIHJlZ0Jsb2NrQ210ID0gLyhcL1wqW1xzXFNdKj9cKlwvKS9nbTsKCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgICAgICB2YXIgcmV0ID0gc3RyLm1hdGNoKHJlZ0Jsb2NrQ210KTsKICAgICAgICAgICAgaWYgKCFyZXQpIHJldHVybiBbXTsKICAgICAgICAgICAgcmV0ID0gbWFwKHJldCwgZnVuY3Rpb24oY29tbWVudCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRyaW0oCiAgICAgICAgICAgICAgICAgICAgbWFwKGNvbW1lbnQuc3BsaXQoJ1xuJyksIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyaW0obGluZSkucmVwbGFjZSgvXlwvXCorfFwqK1wvJHxeXCorL2csICcnKTsKICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCdcbicpCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZXh0cmFjdFVybHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIGV4dHJhY3RVcmxzID0gXy5leHRyYWN0VXJscyA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIEV4dHJhY3QgdXJscyBmcm9tIHBsYWluIHRleHQuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8c3RyICAgfFRleHQgdG8gZXh0cmFjdHwKICAgICAgICAgKiB8cmV0dXJufFVybCBsaXN0ICAgICAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnN0IHN0ciA9ICdbT2ZmaWNpYWwgc2l0ZTogaHR0cDovL2V1c3RpYS5saXJpbGlyaS5pb10oaHR0cDovL2V1c3RpYS5saXJpbGlyaS5pbyknOwogICAgICAgICAqIGV4dHJhY3RVcmxzKHN0cik7IC8vIC0+IFsnaHR0cDovL2V1c3RpYS5saXJpbGlyaS5pbyddCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBleHRyYWN0VXJscyhzdHI6IHN0cmluZyk6IHN0cmluZ1tdOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiB1bmlxdWUgdHJpbSBtYXAgdG9BcnIgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgdmFyIHVybExpc3QgPSB0b0FycihzdHIubWF0Y2gocmVnVXJsKSk7CiAgICAgICAgICAgIHJldHVybiB1bmlxdWUoCiAgICAgICAgICAgICAgICBtYXAodXJsTGlzdCwgZnVuY3Rpb24odXJsKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyaW0odXJsKTsKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICk7CiAgICAgICAgfTsKCiAgICAgICAgdmFyIHJlZ1VybCA9IC8oKGh0dHBzPyl8KGZ0cCkpOlwvXC9bXHcuXStbXiBcZlxuXHJcdFx2IlxcPD5bXF1cdTIxMDAtXHVGRkZGKCksXSovZ2k7CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBsaW5raWZ5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5saW5raWZ5ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogSHlwZXJsaW5rIHVybHMgaW4gYSBzdHJpbmcuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICAgfERlc2MgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHIgICAgICB8U3RyaW5nIHRvIGh5cGVybGluayAgICAgIHwKICAgICAgICAgKiB8aHlwZXJsaW5rfEZ1bmN0aW9uIHRvIGh5cGVybGluayB1cmx8CiAgICAgICAgICogfHJldHVybiAgIHxSZXN1bHQgc3RyaW5nICAgICAgICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3Qgc3RyID0gJ09mZmljaWFsIHNpdGU6IGh0dHA6Ly9ldXN0aWEubGlyaWxpcmkuaW8nCiAgICAgICAgICogbGlua2lmeShzdHIpOyAvLyAtPiAnT2ZmaWNpYWwgc2l0ZTogPGEgaHJlZj0iaHR0cDovL2V1c3RpYS5saXJpbGlyaS5pbyI+aHR0cDovL2V1c3RpYS5saXJpbGlyaS5pbzwvYT4nCiAgICAgICAgICogbGlua2lmeShzdHIsIGZ1bmN0aW9uICh1cmwpIHsKICAgICAgICAgKiAgICAgcmV0dXJuICc8YSBocmVmPSInICsgdXJsICsgJyIgdGFyZ2V0PSJfYmxhbmsiPicgKyB1cmwgKyAnPC9hPic7CiAgICAgICAgICogfSk7CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBsaW5raWZ5KHN0cjogc3RyaW5nLCBoeXBlcmxpbms/OiBGdW5jdGlvbik6IHN0cmluZzsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogZXh0cmFjdFVybHMgZWFjaCBlc2NhcGVSZWdFeHAgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdHIsIGh5cGVybGluaykgewogICAgICAgICAgICBoeXBlcmxpbmsgPSBoeXBlcmxpbmsgfHwgZGVmSHlwZXJsaW5rOwogICAgICAgICAgICB2YXIgdXJsTGlzdCA9IGV4dHJhY3RVcmxzKHN0cik7CiAgICAgICAgICAgIGVhY2godXJsTGlzdCwgZnVuY3Rpb24odXJsKSB7CiAgICAgICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4cCh1cmwpLCAnZycpLCBoeXBlcmxpbmspOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIHN0cjsKICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBkZWZIeXBlcmxpbmsodXJsKSB7CiAgICAgICAgICAgIHJldHVybiAnPGEgaHJlZj0iJyArIHVybCArICciPicgKyB1cmwgKyAnPC9hPic7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaW5pIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5pbmkgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBJbmkgcGFyc2VyIGFuZCBzZXJpYWxpemVyLgogICAgICAgICAqCiAgICAgICAgICogIyMjIHBhcnNlCiAgICAgICAgICoKICAgICAgICAgKiBQYXJzZSBpbmkgc3RyaW5nIGludG8ganMgb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8aW5pICAgfEluaSBzdHJpbmcgICAgICB8CiAgICAgICAgICogfHJldHVybnxQYXJzZWQganMgb2JqZWN0fAogICAgICAgICAqCiAgICAgICAgICogIyMjIHN0cmluZ2lmeQogICAgICAgICAqCiAgICAgICAgICogU3RyaW5naWZ5IG9iamVjdCBpbnRvIGFuIGluaSBmb3JtYXR0ZWQgc3RyaW5nLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICB8RGVzYyAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG9iaiAgICB8T2JqZWN0IHRvIHN0cmluZ2lmeSB8CiAgICAgICAgICogfG9wdGlvbnN8U3RyaW5naWZ5IG9wdGlvbnMgICB8CiAgICAgICAgICogfHJldHVybiB8SW5pIGZvcm1hdHRlZCBzdHJpbmd8CiAgICAgICAgICoKICAgICAgICAgKiBPcHRpb25zOgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgICAgICAgICB8RGVzYyAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzZWN0aW9uICAgICAgICAgfFRvcCBzZWN0aW9uICAgICAgICB8CiAgICAgICAgICogfHdoaXRlc3BhY2U9ZmFsc2V8V2hpdGVzcGFjZSBhcm91bmQgPXwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnN0IGNvbmZpZyA9IGluaS5wYXJzZShgCiAgICAgICAgICogOyBUaGlzIGlzIGEgY29tbWVudAogICAgICAgICAqIGxpYnJhcnkgPSBsaWNpYQogICAgICAgICAqCiAgICAgICAgICogW3VzZXIuaW5mb10KICAgICAgICAgKiBuYW1lID0gc3VydW56aQogICAgICAgICAqIGFsaWFzW10gPSByZWRob29kc3UKICAgICAgICAgKiBhbGlhc1tdID0gcmVkCiAgICAgICAgICogYCk7IC8vIC0+IHtsaWJyYXJ5OiAnbGljaWEnLCB1c2VyOiB7aW5mbzoge25hbWU6ICdzdXJ1bnppJywgYWxpYXM6IFsncmVkaG9vZHN1JywgJ3JlZCddfX19CiAgICAgICAgICoKICAgICAgICAgKiBpbmkuc3RyaW5naWZ5KGNvbmZpZyk7CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBjb25zdCBpbmk6IHsKICAgICAgICAgKiAgICAgcGFyc2UoaW5pOiBzdHJpbmcpOiBhbnk7CiAgICAgICAgICogICAgIHN0cmluZ2lmeSgKICAgICAgICAgKiAgICAgICAgIG9iajogYW55LAogICAgICAgICAqICAgICAgICAgb3B0aW9ucz86IHsKICAgICAgICAgKiAgICAgICAgICAgICBzZWN0aW9uPzogc3RyaW5nOwogICAgICAgICAqICAgICAgICAgICAgIHdoaXRlc3BhY2U6IGJvb2xlYW47CiAgICAgICAgICogICAgICAgICB9CiAgICAgICAgICogICAgICk6IHN0cmluZzsKICAgICAgICAgKiB9OwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBlYWNoIHRyaW0gc2FmZVNldCBzYWZlR2V0IGVuZFdpdGggaXNBcnIgaXNPYmogCiAgICAgICAgICovIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ucG0vaW5pCgogICAgICAgIHZhciByZWdTZWN0aW9uID0gL15cWyhbXlxdXSopXF0kL2k7CiAgICAgICAgdmFyIHJlZ0tleVZhbCA9IC9eKFtePV0rKSg9KC4qKSk/JC9pOwogICAgICAgIHZhciByZWdDb21tZW50ID0gL15ccypbOyNdLzsKCiAgICAgICAgZnVuY3Rpb24gcGFyc2UoaW5pKSB7CiAgICAgICAgICAgIHZhciByZXQgPSB7fTsKICAgICAgICAgICAgdmFyIHNlY3Rpb24gPSByZXQ7CiAgICAgICAgICAgIGVhY2goaW5pLnNwbGl0KCdcbicpLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgICAgICAgICBsaW5lID0gdHJpbShsaW5lKTsKICAgICAgICAgICAgICAgIGlmICghbGluZSB8fCBsaW5lLm1hdGNoKHJlZ0NvbW1lbnQpKSByZXR1cm47CiAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHJlZ1NlY3Rpb24pOwoKICAgICAgICAgICAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFsxXSkgewogICAgICAgICAgICAgICAgICAgIHZhciBfa2V5ID0gbWF0Y2hbMV07CiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiA9IHNhZmVHZXQocmV0LCBfa2V5KSB8fCB7fTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2FmZVNldChyZXQsIF9rZXksIHNlY3Rpb24pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG1hdGNoID0gbGluZS5tYXRjaChyZWdLZXlWYWwpOwogICAgICAgICAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuOwogICAgICAgICAgICAgICAgdmFyIGtleSA9IHRyaW0obWF0Y2hbMV0pOwogICAgICAgICAgICAgICAgdmFyIHZhbCA9IG1hdGNoWzJdID8gdHJpbShtYXRjaFszXSkgOiB0cnVlOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gJ3RydWUnKSB2YWwgPSB0cnVlOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gJ2ZhbHNlJykgdmFsID0gZmFsc2U7CiAgICAgICAgICAgICAgICBpZiAodmFsID09PSAnbnVsbCcpIHZhbCA9IG51bGw7CgogICAgICAgICAgICAgICAgaWYgKGVuZFdpdGgoa2V5LCAnW10nKSkgewogICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHJpbmcoMCwga2V5Lmxlbmd0aCAtIDIpOwogICAgICAgICAgICAgICAgICAgIGlmICghc2VjdGlvbltrZXldKSBzZWN0aW9uW2tleV0gPSBbXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpc0FycihzZWN0aW9uW2tleV0pID8gc2VjdGlvbltrZXldLnB1c2godmFsKSA6IChzZWN0aW9uW2tleV0gPSB2YWwpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHN0cmluZ2lmeShvYmopIHsKICAgICAgICAgICAgdmFyIG9wdGlvbnMgPQogICAgICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTsKICAgICAgICAgICAgdmFyIHJldCA9ICcnOwogICAgICAgICAgICB2YXIgc2VjdGlvbiA9IG9wdGlvbnMuc2VjdGlvbjsKICAgICAgICAgICAgdmFyIHdoaXRlc3BhY2UgPSBvcHRpb25zLndoaXRlc3BhY2U7CiAgICAgICAgICAgIHZhciBzZXBhcmF0b3IgPSB3aGl0ZXNwYWNlID8gJyA9ICcgOiAnPSc7CiAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IFtdOwogICAgICAgICAgICBlYWNoKG9iaiwgZnVuY3Rpb24odmFsLCBrZXkpIHsKICAgICAgICAgICAgICAgIGlmIChpc0Fycih2YWwpKSB7CiAgICAgICAgICAgICAgICAgICAgZWFjaCh2YWwsIGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ICs9ICcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGtleSwgJ1tdJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoc2VwYXJhdG9yKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChpdGVtLCAnXG4nKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmoodmFsKSkgewogICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goewogICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgdmFsOiB2YWwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0ICs9ICcnCiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoa2V5KQogICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KHNlcGFyYXRvcikKICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCh2YWwsICdcbicpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIGlmIChzZWN0aW9uICYmIHJldCkgewogICAgICAgICAgICAgICAgcmV0ID0gJ1snLmNvbmNhdChzZWN0aW9uLCAnXVxuJykgKyByZXQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHNlY3Rpb24gPSBzZWN0aW9uID8gc2VjdGlvbiArICcuJyA6ICcnOwogICAgICAgICAgICBlYWNoKGNoaWxkcmVuLCBmdW5jdGlvbihjaGlsZCkgewogICAgICAgICAgICAgICAgY2hpbGQgPSBzdHJpbmdpZnkoY2hpbGQudmFsLCB7CiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogc2VjdGlvbiArIGNoaWxkLmtleSwKICAgICAgICAgICAgICAgICAgICB3aGl0ZXNwYWNlOiBvcHRpb25zLndoaXRlc3BhY2UKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmIChjaGlsZCkgewogICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ICs9ICdcbic7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICByZXQgKz0gY2hpbGQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH0KCiAgICAgICAgZXhwb3J0cyA9IHsKICAgICAgICAgICAgcGFyc2U6IHBhcnNlLAogICAgICAgICAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeQogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpc0RhdGFVcmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmlzRGF0YVVybCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENoZWNrIGlmIGEgc3RyaW5nIGlzIGEgdmFsaWQgZGF0YSB1cmwuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHIgICB8U3RyaW5nIHRvIGNoZWNrICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFRydWUgaWYgc3RyaW5nIGlzIGEgZGF0YSB1cmx8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBpc0RhdGFVcmwoJ2h0dHA6Ly9ldXN0aWEubGlyaWxpcmkuaW8nKTsgLy8gLT4gZmFsc2UKICAgICAgICAgKiBpc0RhdGFVcmwoJ2RhdGE6dGV4dC9wbGFpbjtiYXNlNjQsU0dWc2JHOHNJRmR2Y214a0lRJTNEJTNEJyk7IC8vIC0+IHRydWUKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGlzRGF0YVVybChzdHI6IHN0cmluZyk6IGJvb2xlYW47CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHRyaW0gCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgcmV0dXJuIHJlZ0RhdGFVcmwudGVzdCh0cmltKHN0cikpOwogICAgICAgIH07IC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMzk3CgogICAgICAgIHZhciByZWdEYXRhVXJsID0gL15kYXRhOihbYS16XStcL1thLXowLTktKy5dKyg7W2EtejAtOS0uISMkJSorLnt9fH5gXSs9W2EtejAtOS0uISMkJSorLnt9fH5gXSspKik/KDtiYXNlNjQpPywoW2EtejAtOSEkJicsKCkqKzs9XC0uX346QC8/JVxzXSo/KSQvaTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG5vcm1hbGl6ZVBob25lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5ub3JtYWxpemVQaG9uZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIE5vcm1hbGl6ZSBwaG9uZSBudW1iZXJzIGludG8gRS4xNjQgZm9ybWF0LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICB8RGVzYyAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8cGhvbmUgIHxQaG9uZSB0byBub3JtYWxpemV8CiAgICAgICAgICogfG9wdGlvbnN8Tm9ybWFsaXplIG9wdGlvbnMgfAogICAgICAgICAqIHxyZXR1cm4gfE5vcm1hbGl6ZWQgcGhvbmUgIHwKICAgICAgICAgKgogICAgICAgICAqIEF2YWlsYWJsZSBvcHRpb25zOgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgICAgICAgICAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGNvdW50cnlDb2RlICAgICAgfENvdW50cnkgY29kZSAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHRydW5rUHJlZml4PWZhbHNlfFRydWUgaWYgbG9jYWwgZm9ybWF0IGhhcyB0cnVuayBwcmVmaXh8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBub3JtYWxpemVQaG9uZSgnMTM1MTIzNDU2NzgnLCB7CiAgICAgICAgICogICAgIGNvdW50cnlDb2RlOiA4NgogICAgICAgICAqIH0pOyAvLyAtPiAnKzg2MTM1MTIzNDU2NzgnCiAgICAgICAgICogbm9ybWFsaXplUGhvbmUoJyg0MTUpIDU1NS0yNjcxJywgewogICAgICAgICAqICAgICBjb3VudHJ5Q29kZTogMQogICAgICAgICAqIH0pOyAvLyAtPiAnKzE0MTU1NTUyNjcxJwogICAgICAgICAqIG5vcm1hbGl6ZVBob25lKCcwMjAgNzE4MyA4NzUwJywgewogICAgICAgICAqICAgICBjb3VudHJ5Q29kZTogNDQsCiAgICAgICAgICogICAgIHRydW5rUHJlZml4OiB0cnVlCiAgICAgICAgICogfSk7IC8vIC0+ICcrNDQyMDcxODM4NzUwJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbm9ybWFsaXplUGhvbmUoCiAgICAgICAgICogICAgIHBob25lOiBzdHJpbmcsCiAgICAgICAgICogICAgIG9wdGlvbnM6IHsKICAgICAgICAgKiAgICAgICAgIGNvdW50cnlDb2RlOiBudW1iZXI7CiAgICAgICAgICogICAgICAgICB0cnVua1ByZWZpeD86IGJvb2xlYW47CiAgICAgICAgICogICAgIH0KICAgICAgICAgKiApOiBzdHJpbmc7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHRyaW0gCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihwaG9uZSwgb3B0aW9ucykgewogICAgICAgICAgICBwaG9uZSA9IHRyaW0ocGhvbmUpOwogICAgICAgICAgICB2YXIgY291bnRyeUNvZGUgPSBvcHRpb25zLmNvdW50cnlDb2RlLAogICAgICAgICAgICAgICAgX29wdGlvbnMkdHJ1bmtQcmVmaXggPSBvcHRpb25zLnRydW5rUHJlZml4LAogICAgICAgICAgICAgICAgdHJ1bmtQcmVmaXggPQogICAgICAgICAgICAgICAgICAgIF9vcHRpb25zJHRydW5rUHJlZml4ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJHRydW5rUHJlZml4OwogICAgICAgICAgICB2YXIgcGx1c1NpZ24gPSByZWdQbHVzU2lnbi50ZXN0KHBob25lKTsKICAgICAgICAgICAgcGhvbmUgPSBwaG9uZS5yZXBsYWNlKHJlZ05vdERpZ2l0LCAnJyk7CgogICAgICAgICAgICBpZiAocGx1c1NpZ24pIHsKICAgICAgICAgICAgICAgIHBob25lID0gcGhvbmUucmVwbGFjZShuZXcgUmVnRXhwKCdeJy5jb25jYXQoY291bnRyeUNvZGUpKSwgJycpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAodHJ1bmtQcmVmaXgpIHsKICAgICAgICAgICAgICAgIHBob25lID0gcGhvbmUucmVwbGFjZShyZWdUcnVua1ByZWZpeCwgJycpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gJysnLmNvbmNhdChjb3VudHJ5Q29kZSArIHBob25lKTsKICAgICAgICB9OwoKICAgICAgICB2YXIgcmVnUGx1c1NpZ24gPSAvXlwrLzsKICAgICAgICB2YXIgcmVnTm90RGlnaXQgPSAvXEQvZzsKICAgICAgICB2YXIgcmVnVHJ1bmtQcmVmaXggPSAvXlxkLzsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHF1ZXJ5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBxdWVyeSA9IF8ucXVlcnkgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBQYXJzZSBhbmQgc3RyaW5naWZ5IHVybCBxdWVyeSBzdHJpbmdzLgogICAgICAgICAqCiAgICAgICAgICogIyMjIHBhcnNlCiAgICAgICAgICoKICAgICAgICAgKiBQYXJzZSBhIHF1ZXJ5IHN0cmluZyBpbnRvIGFuIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHIgICB8UXVlcnkgc3RyaW5nfAogICAgICAgICAqIHxyZXR1cm58UXVlcnkgb2JqZWN0fAogICAgICAgICAqCiAgICAgICAgICogIyMjIHN0cmluZ2lmeQogICAgICAgICAqCiAgICAgICAgICogU3RyaW5naWZ5IGFuIG9iamVjdCBpbnRvIGEgcXVlcnkgc3RyaW5nLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS18CiAgICAgICAgICogfG9iaiAgIHxRdWVyeSBvYmplY3R8CiAgICAgICAgICogfHJldHVybnxRdWVyeSBzdHJpbmd8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBxdWVyeS5wYXJzZSgnZm9vPWJhciZlcnVkYT10cnVlJyk7IC8vIC0+IHtmb286ICdiYXInLCBlcnVkYTogJ3RydWUnfQogICAgICAgICAqIHF1ZXJ5LnN0cmluZ2lmeSh7Zm9vOiAnYmFyJywgZXJ1ZGE6ICd0cnVlJ30pOyAvLyAtPiAnZm9vPWJhciZlcnVkYT10cnVlJwogICAgICAgICAqIHF1ZXJ5LnBhcnNlKCduYW1lPWVydWRhJm5hbWU9ZXVzdGlhJyk7IC8vIC0+IHtuYW1lOiBbJ2VydWRhJywgJ2V1c3RpYSddfQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgY29uc3QgcXVlcnk6IHsKICAgICAgICAgKiAgICAgcGFyc2Uoc3RyOiBzdHJpbmcpOiBhbnk7CiAgICAgICAgICogICAgIHN0cmluZ2lmeShvYmplY3Q6IGFueSk6IHN0cmluZzsKICAgICAgICAgKiB9OwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiB0cmltIGVhY2ggaXNVbmRlZiBpc0FyciBtYXAgaXNFbXB0eSBmaWx0ZXIgaXNPYmogCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSB7CiAgICAgICAgICAgIHBhcnNlOiBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgICAgIHZhciByZXQgPSB7fTsKICAgICAgICAgICAgICAgIHN0ciA9IHRyaW0oc3RyKS5yZXBsYWNlKHJlZ0lsbGVnYWxDaGFycywgJycpOwogICAgICAgICAgICAgICAgZWFjaChzdHIuc3BsaXQoJyYnKSwgZnVuY3Rpb24ocGFyYW0pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcGFydHMgPSBwYXJhbS5zcGxpdCgnPScpOwogICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLAogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHMuam9pbignPScpIDogbnVsbDsKICAgICAgICAgICAgICAgICAgICBrZXkgPSBkZWNvZGVVUklDb21wb25lbnQoa2V5KTsKICAgICAgICAgICAgICAgICAgICB2YWwgPSBkZWNvZGVVUklDb21wb25lbnQodmFsKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVW5kZWYocmV0W2tleV0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldFtrZXldID0gdmFsOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNBcnIocmV0W2tleV0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldFtrZXldLnB1c2godmFsKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXRba2V5XSA9IFtyZXRba2V5XSwgdmFsXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24ob2JqLCBhcnJLZXkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXIoCiAgICAgICAgICAgICAgICAgICAgbWFwKG9iaiwgZnVuY3Rpb24odmFsLCBrZXkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2JqKHZhbCkgJiYgaXNFbXB0eSh2YWwpKSByZXR1cm4gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Fycih2YWwpKSByZXR1cm4gZXhwb3J0cy5zdHJpbmdpZnkodmFsLCBrZXkpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFycktleQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZW5jb2RlVVJJQ29tcG9uZW50KGFycktleSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGVuY29kZVVSSUNvbXBvbmVudChrZXkpKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPScgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5sZW5ndGggPiAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkuam9pbignJicpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB2YXIgcmVnSWxsZWdhbENoYXJzID0gL14oXD98I3wmKS9nOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVXJsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKICAgIHZhciBVcmwgPSBfLlVybCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFNpbXBsZSB1cmwgbWFuaXB1bGF0b3IuCiAgICAgICAgICoKICAgICAgICAgKiAjIyMgY29uc3RydWN0b3IKICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgICB8RGVzYyAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS18CiAgICAgICAgICogfHVybD1sb2NhdGlvbnxVcmwgc3RyaW5nfAogICAgICAgICAqCiAgICAgICAgICogIyMjIHNldFF1ZXJ5CiAgICAgICAgICoKICAgICAgICAgKiBTZXQgcXVlcnkgdmFsdWUuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS18CiAgICAgICAgICogfG5hbWUgIHxRdWVyeSBuYW1lIHwKICAgICAgICAgKiB8dmFsICAgfFF1ZXJ5IHZhbHVlfAogICAgICAgICAqIHxyZXR1cm58dGhpcyAgICAgICB8CiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8cXVlcnkgfHF1ZXJ5IG9iamVjdHwKICAgICAgICAgKiB8cmV0dXJufHRoaXMgICAgICAgIHwKICAgICAgICAgKgogICAgICAgICAqICMjIyBybVF1ZXJ5CiAgICAgICAgICoKICAgICAgICAgKiBSZW1vdmUgcXVlcnkgdmFsdWUuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tfAogICAgICAgICAqIHxuYW1lICB8UXVlcnkgbmFtZXwKICAgICAgICAgKiB8cmV0dXJufHRoaXMgICAgICB8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgcGFyc2UKICAgICAgICAgKgogICAgICAgICAqIFtzdGF0aWNdIFBhcnNlIHVybCBpbnRvIGFuIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS18CiAgICAgICAgICogfHVybCAgIHxVcmwgc3RyaW5nfAogICAgICAgICAqIHxyZXR1cm58VXJsIG9iamVjdHwKICAgICAgICAgKgogICAgICAgICAqICMjIyBzdHJpbmdpZnkKICAgICAgICAgKgogICAgICAgICAqIFtzdGF0aWNdIFN0cmluZ2lmeSB1cmwgb2JqZWN0IGludG8gYSBzdHJpbmcuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tfAogICAgICAgICAqIHx1cmwgICB8VXJsIG9iamVjdHwKICAgICAgICAgKiB8cmV0dXJufFVybCBzdHJpbmd8CiAgICAgICAgICoKICAgICAgICAgKiBBbiB1cmwgb2JqZWN0IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHByb3RvY29sfFRoZSBwcm90b2NvbCBzY2hlbWUgb2YgdGhlIFVSTCAoZS5nLiBodHRwOikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxzbGFzaGVzIHxBIGJvb2xlYW4gd2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb3RvY29sIGlzIGZvbGxvd2VkIGJ5IHR3byBmb3J3YXJkIHNsYXNoZXMgKC8vKXwKICAgICAgICAgKiB8YXV0aCAgICB8QXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24gcG9ydGlvbiAoZS5nLiB1c2VybmFtZTpwYXNzd29yZCkgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfGhvc3RuYW1lfEhvc3QgbmFtZSB3aXRob3V0IHBvcnQgbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxwb3J0ICAgIHxPcHRpb25hbCBwb3J0IG51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cGF0aG5hbWV8VVJMIHBhdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfHF1ZXJ5ICAgfFBhcnNlZCBvYmplY3QgY29udGFpbmluZyBxdWVyeSBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxoYXNoICAgIHxUaGUgImZyYWdtZW50IiBwb3J0aW9uIG9mIHRoZSBVUkwgaW5jbHVkaW5nIHRoZSBwb3VuZC1zaWduICgjKSAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGNvbnN0IHVybCA9IG5ldyBVcmwoJ2h0dHA6Ly9leGFtcGxlLmNvbTo4MDgwP2VydWRhPXRydWUnKTsKICAgICAgICAgKiBjb25zb2xlLmxvZyh1cmwucG9ydCk7IC8vIC0+ICc4MDgwJwogICAgICAgICAqIHVybC5xdWVyeS5mb28gPSAnYmFyJzsKICAgICAgICAgKiB1cmwucm1RdWVyeSgnZXJ1ZGEnKTsKICAgICAgICAgKiB1cmwudG9TdHJpbmcoKTsgLy8gLT4gJ2h0dHA6Ly9leGFtcGxlLmNvbTo4MDgwLz9mb289YmFyJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIFVybCB7CiAgICAgICAgICogICAgIGludGVyZmFjZSBJVXJsIHsKICAgICAgICAgKiAgICAgICAgIHByb3RvY29sOiBzdHJpbmc7CiAgICAgICAgICogICAgICAgICBhdXRoOiBzdHJpbmc7CiAgICAgICAgICogICAgICAgICBob3N0bmFtZTogc3RyaW5nOwogICAgICAgICAqICAgICAgICAgaGFzaDogc3RyaW5nOwogICAgICAgICAqICAgICAgICAgcXVlcnk6IGFueTsKICAgICAgICAgKiAgICAgICAgIHBvcnQ6IHN0cmluZzsKICAgICAgICAgKiAgICAgICAgIHBhdGhuYW1lOiBzdHJpbmc7CiAgICAgICAgICogICAgICAgICBzbGFzaGVzOiBib29sZWFuOwogICAgICAgICAqICAgICB9CiAgICAgICAgICogfQogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGNsYXNzIFVybCB7CiAgICAgICAgICogICAgIHByb3RvY29sOiBzdHJpbmc7CiAgICAgICAgICogICAgIGF1dGg6IHN0cmluZzsKICAgICAgICAgKiAgICAgaG9zdG5hbWU6IHN0cmluZzsKICAgICAgICAgKiAgICAgaGFzaDogc3RyaW5nOwogICAgICAgICAqICAgICBxdWVyeTogYW55OwogICAgICAgICAqICAgICBwb3J0OiBzdHJpbmc7CiAgICAgICAgICogICAgIHBhdGhuYW1lOiBzdHJpbmc7CiAgICAgICAgICogICAgIHNsYXNoZXM6IGJvb2xlYW47CiAgICAgICAgICogICAgIGNvbnN0cnVjdG9yKHVybD86IHN0cmluZyk7CiAgICAgICAgICogICAgIHNldFF1ZXJ5KG5hbWU6IHN0cmluZywgdmFsOiBzdHJpbmcpOiBVcmw7CiAgICAgICAgICogICAgIHNldFF1ZXJ5KHF1ZXJ5OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSk6IFVybDsKICAgICAgICAgKiAgICAgcm1RdWVyeShuYW1lOiBzdHJpbmcgfCBzdHJpbmdbXSk6IFVybDsKICAgICAgICAgKiAgICAgdG9TdHJpbmcoKTogc3RyaW5nOwogICAgICAgICAqICAgICBzdGF0aWMgcGFyc2UodXJsOiBzdHJpbmcpOiBVcmwuSVVybDsKICAgICAgICAgKiAgICAgc3RhdGljIHN0cmluZ2lmeShvYmplY3Q6IFVybC5JVXJsKTogc3RyaW5nOwogICAgICAgICAqIH0KICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogQ2xhc3MgZXh0ZW5kIHRyaW0gcXVlcnkgaXNFbXB0eSBlYWNoIGlzQXJyIHRvQXJyIGlzQnJvd3NlciBpc09iaiAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IENsYXNzKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdVcmwnLAogICAgICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24odXJsKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCF1cmwgJiYgaXNCcm93c2VyKSB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjsKICAgICAgICAgICAgICAgICAgICBleHRlbmQodGhpcywgZXhwb3J0cy5wYXJzZSh1cmwgfHwgJycpKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBzZXRRdWVyeTogZnVuY3Rpb24obmFtZSwgdmFsKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHF1ZXJ5ID0gdGhpcy5xdWVyeTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2JqKG5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVhY2gobmFtZSwgZnVuY3Rpb24odmFsLCBrZXkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5W2tleV0gPSB2YWw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5W25hbWVdID0gdmFsOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcm1RdWVyeTogZnVuY3Rpb24obmFtZSkgewogICAgICAgICAgICAgICAgICAgIHZhciBxdWVyeSA9IHRoaXMucXVlcnk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FycihuYW1lKSkgbmFtZSA9IHRvQXJyKG5hbWUpOwogICAgICAgICAgICAgICAgICAgIGVhY2gobmFtZSwgZnVuY3Rpb24oa2V5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBxdWVyeVtrZXldOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwb3J0cy5zdHJpbmdpZnkodGhpcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHBhcnNlOiBmdW5jdGlvbih1cmwpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gewogICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGg6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICBob3N0bmFtZTogJycsCiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICBxdWVyeToge30sCiAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICBwYXRobmFtZTogJycsCiAgICAgICAgICAgICAgICAgICAgICAgIHNsYXNoZXM6IGZhbHNlCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdCA9IHRyaW0odXJsKTsKICAgICAgICAgICAgICAgICAgICB2YXIgc2xhc2hlcyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIHZhciBwcm90byA9IHJlc3QubWF0Y2gocmVnUHJvdG8pOwoKICAgICAgICAgICAgICAgICAgICBpZiAocHJvdG8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG8gPSBwcm90b1swXTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnByb3RvY29sID0gcHJvdG8udG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAocHJvdG8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2xhc2hlcyA9IHJlc3Quc3Vic3RyKDAsIDIpID09PSAnLy8nOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsYXNoZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3QgPSByZXN0LnNsaWNlKDIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnNsYXNoZXMgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoc2xhc2hlcykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG9zdCA9IHJlc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBob3N0RW5kID0gLTE7CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaG9zdEVuZGluZ0NoYXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gcmVzdC5pbmRleE9mKGhvc3RFbmRpbmdDaGFyc1tpXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgcG9zIDwgaG9zdEVuZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdEVuZCA9IHBvczsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhvc3RFbmQgPiAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCA9IHJlc3Quc2xpY2UoMCwgaG9zdEVuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0U2lnbiA9IGhvc3QubGFzdEluZGV4T2YoJ0AnKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdFNpZ24gIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChob3N0LnNsaWNlKDAsIGF0U2lnbikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCA9IGhvc3Quc2xpY2UoYXRTaWduICsgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldC5ob3N0bmFtZSA9IGhvc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3J0ID0gaG9zdC5tYXRjaChyZWdQb3J0KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3J0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0ID0gcG9ydFswXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3J0ICE9PSAnOicpIHJldC5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQuaG9zdG5hbWUgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc2ggIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldC5oYXNoID0gcmVzdC5zdWJzdHIoaGFzaCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgdmFyIHF1ZXJ5TWFyayA9IHJlc3QuaW5kZXhPZignPycpOwoKICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnlNYXJrICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXQucXVlcnkgPSBxdWVyeS5wYXJzZShyZXN0LnN1YnN0cihxdWVyeU1hcmsgKyAxKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHF1ZXJ5TWFyayk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICByZXQucGF0aG5hbWUgPSByZXN0IHx8ICcvJzsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9CiAgICAgICAgICAgICAgICAgICAgICAgIG9iai5wcm90b2NvbCArCiAgICAgICAgICAgICAgICAgICAgICAgIChvYmouc2xhc2hlcyA/ICcvLycgOiAnJykgKwogICAgICAgICAgICAgICAgICAgICAgICAob2JqLmF1dGggPyBlbmNvZGVVUklDb21wb25lbnQob2JqLmF1dGgpICsgJ0AnIDogJycpICsKICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmhvc3RuYW1lICsKICAgICAgICAgICAgICAgICAgICAgICAgKG9iai5wb3J0ID8gJzonICsgb2JqLnBvcnQgOiAnJykgKwogICAgICAgICAgICAgICAgICAgICAgICBvYmoucGF0aG5hbWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5KG9iai5xdWVyeSkpIHJldCArPSAnPycgKyBxdWVyeS5zdHJpbmdpZnkob2JqLnF1ZXJ5KTsKICAgICAgICAgICAgICAgICAgICBpZiAob2JqLmhhc2gpIHJldCArPSBvYmouaGFzaDsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgICAgICB2YXIgcmVnUHJvdG8gPSAvXihbYS16MC05ListXSs6KS9pOwogICAgICAgIHZhciByZWdQb3J0ID0gLzpbMC05XSokLzsKICAgICAgICB2YXIgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ2V0VXJsUGFyYW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLmdldFVybFBhcmFtID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogR2V0IHVybCBwYXJhbS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgICB8RGVzYyAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG5hbWUgICAgICAgIHxQYXJhbSBuYW1lICAgICAgfAogICAgICAgICAqIHx1cmw9bG9jYXRpb258VXJsIHRvIGdldCBwYXJhbXwKICAgICAgICAgKiB8cmV0dXJuICAgICAgfFBhcmFtIHZhbHVlICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBnZXRVcmxQYXJhbSgndGVzdCcsICdodHRwOi8vZXhhbXBsZS5jb20vP3Rlc3Q9dHJ1ZScpOyAvLyAtPiAndHJ1ZScKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGdldFVybFBhcmFtKG5hbWU6IHN0cmluZywgdXJsPzpzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQ7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIFVybCAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG5hbWUsIHVybCkgewogICAgICAgICAgICByZXR1cm4gbmV3IFVybCh1cmwpLnF1ZXJ5W25hbWVdOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzYW1wbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgogICAgdmFyIHNhbXBsZSA9IF8uc2FtcGxlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogU2FtcGxlIHJhbmRvbSB2YWx1ZXMgZnJvbSBhIGNvbGxlY3Rpb24uCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxvYmogICB8Q29sbGVjdGlvbiB0byBzYW1wbGUgIHwKICAgICAgICAgKiB8biAgICAgfE51bWJlciBvZiB2YWx1ZXMgICAgICB8CiAgICAgICAgICogfHJldHVybnxBcnJheSBvZiBzYW1wbGUgdmFsdWVzfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogc2FtcGxlKFsyLCAzLCAxXSwgMik7IC8vIC0+IFsyLCAzXQogICAgICAgICAqIHNhbXBsZSh7YTogMSwgYjogMiwgYzogM30sIDEpOyAvLyAtPiBbMl0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHNhbXBsZShvYmo6IGFueSwgbjogbnVtYmVyKTogYW55W107CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlzQXJyTGlrZSBjbG9uZSB2YWx1ZXMgcmFuZG9tIHN3YXAgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihvYmosIG4pIHsKICAgICAgICAgICAgdmFyIHNhbXBsZSA9IGlzQXJyTGlrZShvYmopID8gY2xvbmUob2JqKSA6IHZhbHVlcyhvYmopOwogICAgICAgICAgICB2YXIgbGVuID0gc2FtcGxlLmxlbmd0aDsKICAgICAgICAgICAgbiA9IE1hdGgubWF4KE1hdGgubWluKG4sIGxlbiksIDApOwogICAgICAgICAgICB2YXIgbGFzdCA9IGxlbiAtIDE7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICAgICAgdmFyIHJhbmQgPSByYW5kb20oaSwgbGFzdCk7CiAgICAgICAgICAgICAgICBzd2FwKHNhbXBsZSwgaSwgcmFuZCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBzYW1wbGUuc2xpY2UoMCwgbik7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNlbGVjdGlvblNvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLnNlbGVjdGlvblNvcnQgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBTZWxlY3Rpb24gc29ydCBpbXBsZW1lbnRhdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGFyciAgIHxBcnJheSB0byBzb3J0fAogICAgICAgICAqIHxjbXAgICB8Q29tcGFyYXRvciAgIHwKICAgICAgICAgKiB8cmV0dXJufFNvcnRlZCBhcnJheSB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBzZWxlY3Rpb25Tb3J0KFsyLCAxXSk7IC8vIC0+IFsxLCAyXQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc2VsZWN0aW9uU29ydChhcnI6IGFueVtdLCBjbXA/OiBGdW5jdGlvbik6IGFueVtdOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBzd2FwIGlzU29ydGVkIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oYXJyKSB7CiAgICAgICAgICAgIHZhciBjbXAgPQogICAgICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQKICAgICAgICAgICAgICAgICAgICA/IGFyZ3VtZW50c1sxXQogICAgICAgICAgICAgICAgICAgIDogaXNTb3J0ZWQuZGVmQ29tcGFyYXRvcjsKICAgICAgICAgICAgdmFyIG1pbjsKCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIG1pbiA9IGk7CgogICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyBqIDwgbGVuOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY21wKGFycltqXSwgYXJyW21pbl0pIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICBtaW4gPSBqOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoaSAhPSBtaW4pIHsKICAgICAgICAgICAgICAgICAgICBzd2FwKGFyciwgaSwgbWluKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGFycjsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2VsZWN0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLnNlbGVjdG9yID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ3NzIHNlbGVjdG9yIHBhcnNlciBhbmQgc2VyaWFsaXplci4KICAgICAgICAgKgogICAgICAgICAqICMjIyBwYXJzZQogICAgICAgICAqCiAgICAgICAgICogUGFyc2UgY3NzIHNlbGVjdG9yIGludG8ganMgb2JqZWN0LgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgfERlc2MgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHNlbGVjdG9yfENzcyBzZWxlY3RvciAgICB8CiAgICAgICAgICogfHJldHVybiAgfFBhcnNlZCBqcyBvYmplY3R8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgc3RyaW5naWZ5CiAgICAgICAgICoKICAgICAgICAgKiBTdHJpbmdpZnkgb2JqZWN0IGludG8gYW4gY3NzIHNlbGVjdG9yLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8Z3JvdXBzfE9iamVjdCB0byBzdHJpbmdpZnl8CiAgICAgICAgICogfHJldHVybnxDc3Mgc2VsZWN0b3IgICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3QgZ3JvdXBzID0gc2VsZWN0b3IucGFyc2UoJyN0ZXN0LCBpbnB1dC51c2VyW25hbWU9ImxpY2lhIl0nKTsKICAgICAgICAgKiAvLyAtPiBbW3t0eXBlOiAnaWQnLCB2YWx1ZTogJ3Rlc3QnfV0sW3t0eXBlOiAndGFnJywgdmFsdWU6ICdpbnB1dCd9Li4uXV0KICAgICAgICAgKiBzZWxlY3Rvci5zdHJpbmdpZnkoZ3JvdXBzKTsKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBzZWxlY3RvciB7CiAgICAgICAgICogICAgIGludGVyZmFjZSBJVG9rZW4gewogICAgICAgICAqICAgICAgICAgdHlwZTogc3RyaW5nOwogICAgICAgICAqICAgICAgICAgdmFsdWU6IHN0cmluZzsKICAgICAgICAgKiAgICAgfQogICAgICAgICAqIH0KICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBjb25zdCBzZWxlY3RvcjogewogICAgICAgICAqICAgICBwYXJzZShzZWxlY3Rvcjogc3RyaW5nKTogQXJyYXk8c2VsZWN0b3IuSVRva2VuW10+OwogICAgICAgICAqICAgICBzdHJpbmdpZnkoc2VsZWN0b3I6IEFycmF5PHNlbGVjdG9yLklUb2tlbltdPik6IHN0cmluZzsKICAgICAgICAgKiB9CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHRyaW0gZWFjaCBpZGVudGl0eSBtYXAgCiAgICAgICAgICovIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlCgogICAgICAgIHZhciB3aGl0ZXNwYWNlID0gJ1tcXHgyMFxcdFxcclxcblxcZl0nOwogICAgICAgIHZhciBpZGVudGlmaWVyID0gJyg/OlxcXFxbXFxkYS1mQS1GXXsxLDZ9Jy5jb25jYXQoCiAgICAgICAgICAgIHdoaXRlc3BhY2UsCiAgICAgICAgICAgICc/fFxcXFxbXlxcclxcblxcZl18W1xcdy1dfFteXDAtXFx4N2ZdKSsnCiAgICAgICAgKTsKICAgICAgICB2YXIgYXR0cmlidXRlcyA9ICdcXFsnCiAgICAgICAgICAgIC5jb25jYXQod2hpdGVzcGFjZSwgJyooJykKICAgICAgICAgICAgLmNvbmNhdChpZGVudGlmaWVyLCAnKSg/OicpCiAgICAgICAgICAgIC5jb25jYXQod2hpdGVzcGFjZSwgJyooWypeJHwhfl0/PSknKQogICAgICAgICAgICAuY29uY2F0KAogICAgICAgICAgICAgICAgd2hpdGVzcGFjZSwKICAgICAgICAgICAgICAgICcqKD86XCcoKD86XFxcXC58W15cXFxcXCddKSopXCd8IigoPzpcXFxcLnxbXlxcXFwiXSkqKSJ8KCcKICAgICAgICAgICAgKQogICAgICAgICAgICAuY29uY2F0KGlkZW50aWZpZXIsICcpKXwpJykKICAgICAgICAgICAgLmNvbmNhdCh3aGl0ZXNwYWNlLCAnKlxcXScpOwogICAgICAgIHZhciBwc2V1ZG9zID0gJzo6PygnCiAgICAgICAgICAgIC5jb25jYXQoCiAgICAgICAgICAgICAgICBpZGVudGlmaWVyLAogICAgICAgICAgICAgICAgJykoPzpcXCgoKFwnKCg/OlxcXFwufFteXFxcXFwnXSkqKVwnfCIoKD86XFxcXC58W15cXFxcIl0pKikiKXwoKD86XFxcXC58W15cXFxcKClbXFxdXXwnCiAgICAgICAgICAgICkKICAgICAgICAgICAgLmNvbmNhdChhdHRyaWJ1dGVzLCAnKSopfC4qKVxcKXwpJyk7CiAgICAgICAgdmFyIHJlZ0NvbW1hID0gbmV3IFJlZ0V4cCgnXicuY29uY2F0KHdoaXRlc3BhY2UsICcqLCcpLmNvbmNhdCh3aGl0ZXNwYWNlLCAnKicpKTsKICAgICAgICB2YXIgcmVnQ29tYmluYXRvcnMgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICAnXicKICAgICAgICAgICAgICAgIC5jb25jYXQod2hpdGVzcGFjZSwgJyooWz4rfl18JykKICAgICAgICAgICAgICAgIC5jb25jYXQod2hpdGVzcGFjZSwgJyknKQogICAgICAgICAgICAgICAgLmNvbmNhdCh3aGl0ZXNwYWNlLCAnKicpCiAgICAgICAgKTsKICAgICAgICB2YXIgbWF0Y2hFeHByID0gewogICAgICAgICAgICBpZDogewogICAgICAgICAgICAgICAgcmVnOiBuZXcgUmVnRXhwKCdeIygnLmNvbmNhdChpZGVudGlmaWVyLCAnKScpKSwKICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihyYXcpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmF3LnNsaWNlKDEpOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHRvU3RyOiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnIycuY29uY2F0KHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgY2xhc3M6IHsKICAgICAgICAgICAgICAgIHJlZzogbmV3IFJlZ0V4cCgnXlxcLignLmNvbmNhdChpZGVudGlmaWVyLCAnKScpKSwKICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihyYXcpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmF3LnNsaWNlKDEpOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHRvU3RyOiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnLicuY29uY2F0KHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgdGFnOiB7CiAgICAgICAgICAgICAgICByZWc6IG5ldyBSZWdFeHAoJ14oJy5jb25jYXQoaWRlbnRpZmllciwgJ3xbKl0pJykpLAogICAgICAgICAgICAgICAgdmFsdWU6IGlkZW50aXR5CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGF0dHJpYnV0ZTogewogICAgICAgICAgICAgICAgcmVnOiBuZXcgUmVnRXhwKCdeJy5jb25jYXQoYXR0cmlidXRlcykpLAogICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKHJhdykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiByYXcuc2xpY2UoMSwgcmF3Lmxlbmd0aCAtIDEpOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHRvU3RyOiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnWycuY29uY2F0KHZhbHVlLCAnXScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBwc2V1ZG86IHsKICAgICAgICAgICAgICAgIHJlZzogbmV3IFJlZ0V4cCgnXicuY29uY2F0KHBzZXVkb3MpKSwKICAgICAgICAgICAgICAgIHZhbHVlOiBpZGVudGl0eQogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBlYWNoKG1hdGNoRXhwciwgZnVuY3Rpb24oaXRlbSkgewogICAgICAgICAgICBpZiAoIWl0ZW0udmFsdWUpIGl0ZW0udmFsdWUgPSBpZGVudGl0eTsKICAgICAgICAgICAgaWYgKCFpdGVtLnRvU3RyKSBpdGVtLnRvU3RyID0gaWRlbnRpdHk7CiAgICAgICAgfSk7CgogICAgICAgIGZ1bmN0aW9uIHBhcnNlKHNlbGVjdG9yKSB7CiAgICAgICAgICAgIHNlbGVjdG9yID0gdHJpbShzZWxlY3Rvcik7CiAgICAgICAgICAgIHZhciBncm91cHMgPSBbXTsKICAgICAgICAgICAgdmFyIHRva2VuczsKICAgICAgICAgICAgdmFyIG1hdGNoOwogICAgICAgICAgICB2YXIgbWF0Y2hlZDsKCiAgICAgICAgICAgIHdoaWxlIChzZWxlY3RvcikgewogICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVkIHx8IChtYXRjaCA9IHJlZ0NvbW1hLmV4ZWMoc2VsZWN0b3IpKSkgewogICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKG1hdGNoWzBdLmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB0b2tlbnMgPSBbXTsKICAgICAgICAgICAgICAgICAgICBncm91cHMucHVzaCh0b2tlbnMpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICBpZiAoKG1hdGNoID0gcmVnQ29tYmluYXRvcnMuZXhlYyhzZWxlY3RvcikpKSB7CiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZShtYXRjaGVkLmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRyaW0obWF0Y2hlZCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVkKSBtYXRjaGVkID0gJyAnOwogICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb21iaW5hdG9yJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGVhY2gobWF0Y2hFeHByLCBmdW5jdGlvbihfcmVmLCB0eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJlZyA9IF9yZWYucmVnLAogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9yZWYudmFsdWU7CgogICAgICAgICAgICAgICAgICAgIGlmICgobWF0Y2ggPSByZWcuZXhlYyhzZWxlY3RvcikpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKG1hdGNoZWQubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRyaW0obWF0Y2hlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZShtYXRjaGVkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVkKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBncm91cHM7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBzdHJpbmdpZnkoZ3JvdXBzKSB7CiAgICAgICAgICAgIHJldHVybiBtYXAoZ3JvdXBzLCBmdW5jdGlvbihncm91cCkgewogICAgICAgICAgICAgICAgZ3JvdXAgPSBtYXAoZ3JvdXAsIGZ1bmN0aW9uKF9yZWYyKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBfcmVmMi50eXBlLAogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9yZWYyLnZhbHVlOwoKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2NvbWJpbmF0b3InKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gJyAnID8gdmFsdWUgOiAnICcuY29uY2F0KHZhbHVlLCAnICcpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoRXhwclt0eXBlXS50b1N0cih2YWx1ZSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHVybiBncm91cC5qb2luKCcnKTsKICAgICAgICAgICAgfSkuam9pbignLCAnKTsKICAgICAgICB9CgogICAgICAgIGV4cG9ydHMgPSB7CiAgICAgICAgICAgIHBhcnNlOiBwYXJzZSwKICAgICAgICAgICAgc3RyaW5naWZ5OiBzdHJpbmdpZnkKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2hlbGxTb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5zaGVsbFNvcnQgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBTaGVsbCBzb3J0IGltcGxlbWVudGF0aW9uLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8YXJyICAgfEFycmF5IHRvIHNvcnR8CiAgICAgICAgICogfGNtcCAgIHxDb21wYXJhdG9yICAgfAogICAgICAgICAqIHxyZXR1cm58U29ydGVkIGFycmF5IHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHNoZWxsU29ydChbMiwgMV0pOyAvLyAtPiBbMSwgMl0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHNoZWxsU29ydChhcnI6IGFueVtdLCBjbXA/OiBGdW5jdGlvbik6IGFueVtdOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBzd2FwIGlzU29ydGVkIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oYXJyKSB7CiAgICAgICAgICAgIHZhciBjbXAgPQogICAgICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQKICAgICAgICAgICAgICAgICAgICA/IGFyZ3VtZW50c1sxXQogICAgICAgICAgICAgICAgICAgIDogaXNTb3J0ZWQuZGVmQ29tcGFyYXRvcjsKICAgICAgICAgICAgdmFyIGxlbiA9IGFyci5sZW5ndGg7CiAgICAgICAgICAgIHZhciBnYXAgPSBNYXRoLmZsb29yKGxlbiAvIDIpOwoKICAgICAgICAgICAgd2hpbGUgKGdhcCA+IDApIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBnYXA7IGkgPD0gbGVuIC0gZ2FwOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gaTsgaiA+IDA7IGogLT0gZ2FwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbXAoYXJyW2pdLCBhcnJbaiAtIGdhcF0pIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcChhcnIsIGosIGogLSBnYXApOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZ2FwID0gTWF0aC5mbG9vcihnYXAgLyAyKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGFycjsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2h1ZmZsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uc2h1ZmZsZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFJhbmRvbWl6ZSB0aGUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzIGluIGEgZ2l2ZW4gYXJyYXkuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8YXJyICAgfEFycmF5IHRvIHJhbmRvbWl6ZXwKICAgICAgICAgKiB8cmV0dXJufFJhbmRvbWl6ZWQgQXJyYXkgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHNodWZmbGUoWzEsIDIsIDNdKTsgLy8gLT4gWzMsIDEsIDJdCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzaHVmZmxlKGFycjogYW55W10pOiBhbnlbXTsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogc2FtcGxlIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICAgIHJldHVybiBzYW1wbGUob2JqLCBJbmZpbml0eSk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNpemVvZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uc2l6ZW9mID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogR2V0IGFwcHJveGltYXRlIHNpemUgb2YgYSBqcyBvYmplY3QuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxvYmogICB8T2JqZWN0IHRvIGNhbGN1bGF0ZXwKICAgICAgICAgKiB8cmV0dXJufFNpemUgaW4gYnl0ZXMgICAgICB8CiAgICAgICAgICoKICAgICAgICAgKiBBIGNoYXIgb2Ygc3RyaW5nIGlzIGNvdW50ZWQgYXMgMiBieXRlcy4gQW5kIDQgYnl0ZXMgZm9yIGJvb2xlYW4sIDggYnl0ZXMgZm9yIG51bWJlci4KICAgICAgICAgKgogICAgICAgICAqIE9iamVjdCBrZXlzIGFyZSB0cmVhdGVkIGFzIHN0cmluZ3MuCiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBzaXplb2YoJ2EnKTsgLy8gLT4gMgogICAgICAgICAqIHNpemVvZig4KTsgLy8gLT4gOAogICAgICAgICAqIHNpemVvZihmYWxzZSk7IC8vIC0+IDQKICAgICAgICAgKiBzaXplb2YoZnVuY3Rpb24gKCkge30pOyAvLyAtPiAwCiAgICAgICAgICogc2l6ZW9mKHsgYTogJ2InIH0pOyAvLyAtPiA0CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzaXplb2Yob2JqOiBhbnkpOiBudW1iZXI7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlzQXJyIGtleXMgaXNCdWZmZXIgCiAgICAgICAgICovIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5MDU4NjEvbWVtb3J5LXVzYWdlLW9mLWRpZmZlcmVudC1kYXRhLXR5cGVzLWluLWphdmFzY3JpcHQKCiAgICAgICAgdmFyIHN0clNpemUgPSAyOwogICAgICAgIHZhciBib29sU2l6ZSA9IDQ7CiAgICAgICAgdmFyIG51bVNpemUgPSA4OwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICAgIHJldHVybiBzaXplb2Yob2JqLCB7CiAgICAgICAgICAgICAgICB2YWx1ZXM6IFtdCiAgICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIGZ1bmN0aW9uIHNpemVvZihvYmosIF9yZWYpIHsKICAgICAgICAgICAgdmFyIHZhbHVlcyA9IF9yZWYudmFsdWVzOwogICAgICAgICAgICB2YXIgdCA9IHR5cGVvZiBvYmo7CiAgICAgICAgICAgIGlmICh0ID09PSAnc3RyaW5nJykgcmV0dXJuIG9iai5sZW5ndGggKiBzdHJTaXplOwogICAgICAgICAgICBpZiAodCA9PT0gJ251bWJlcicpIHJldHVybiBudW1TaXplOwogICAgICAgICAgICBpZiAodCA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gYm9vbFNpemU7CiAgICAgICAgICAgIHZhciBzaXplID0gMDsKCiAgICAgICAgICAgIGlmICh0ID09PSAnb2JqZWN0JykgewogICAgICAgICAgICAgICAgaWYgKHZhbHVlcy5pbmRleE9mKG9iaikgPiAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKG9iaik7CgogICAgICAgICAgICAgICAgaWYgKGlzQXJyKG9iaikpIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gb2JqLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgKz0gc2l6ZW9mKG9ialtpXSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiB2YWx1ZXMKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB2YXIgX2tleXMgPSBrZXlzKG9iaik7CgogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2xlbiA9IF9rZXlzLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBfa2V5c1tfaV07CiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgKz0ga2V5Lmxlbmd0aCAqIHN0clNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgKz0gc2l6ZW9mKG9ialtrZXldLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IHZhbHVlcwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChpc0J1ZmZlcihvYmopKSByZXR1cm4gb2JqLmxlbmd0aDsKICAgICAgICAgICAgcmV0dXJuIHNpemU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2xlZXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLnNsZWVwID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogUmVzb2x2ZSBhIHByb21pc2UgYWZ0ZXIgYSBzcGVjaWZpZWQgdGltZW91dC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgfERlc2MgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS18LS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8dGltZW91dHxTbGVlcCB0aW1lb3V0fAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogOyhhc3luYyBmdW5jdGlvbiAoKSB7CiAgICAgICAgICogICAgIGF3YWl0IHNsZWVwKDIwMDApOwogICAgICAgICAqIH0pKCk7CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzbGVlcCh0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+OwogICAgICAgICAqLwogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNsdWdpZnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLnNsdWdpZnkgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBTbHVnaWZ5IGEgc3RyaW5nLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgICAgfERlc2MgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHIgICAgICAgIHxTdHJpbmcgdG8gc2x1Z2lmeSB8CiAgICAgICAgICogfHJlcGxhY2VtZW50fEN1c3RvbSByZXBsYWNlbWVudHwKICAgICAgICAgKiB8cmV0dXJuICAgICB8U2x1Z2lmaWVkIHN0cmluZyAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogc2x1Z2lmeSgnSSDimaUgcG9ueScpOyAvLyAtPiAnSS1sb3ZlLXBvbnknCiAgICAgICAgICogc2x1Z2lmeSgnSSDimaUgcG9ueScsIHsnICc6ICdfJ30pOyAvLyAtPiAnSV9sb3ZlX3BvbnknCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzbHVnaWZ5KAogICAgICAgICAqICAgICBzdHI6IHN0cmluZywKICAgICAgICAgKiAgICAgcmVwbGFjZW1lbnQ/OiB7IFtpbmRleDogc3RyaW5nXTogc3RyaW5nIH0KICAgICAgICAgKiApOiBzdHJpbmc7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGRlZmF1bHRzIGVhY2ggcmVkdWNlIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9CiAgICAgICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9OwogICAgICAgICAgICBkZWZhdWx0cyhyZXBsYWNlbWVudCwgZGVmUmVwbGFjZW1lbnQpOwogICAgICAgICAgICByZXR1cm4gcmVkdWNlKAogICAgICAgICAgICAgICAgc3RyLAogICAgICAgICAgICAgICAgZnVuY3Rpb24ocmVzdWx0LCBjaGFyKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChyZXBsYWNlbWVudFtjaGFyXSB8fCBjaGFyKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAnJwogICAgICAgICAgICApLnJlcGxhY2UocmVnRm9yYmlkZGVuLCAnJyk7CiAgICAgICAgfTsKCiAgICAgICAgdmFyIHJlZ0ZvcmJpZGRlbiA9IC9bXlx3XHMkKl8rfi4oKSciIVwtOkBdL2c7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW1vdi9zbHVnaWZ5CgogICAgICAgIHZhciBSRVBMQUNFTUVOVCA9CiAgICAgICAgICAgICckIGRvbGxhciwlIHBlcmNlbnQsJiBhbmQsPCBsZXNzLD4gZ3JlYXRlcix8IG9yLMKiIGNlbnQswqMgcG91bmQswqQgY3VycmVuY3kswqUgeWVuLMKpIChjKSzCqiBhLMKuIChyKSzCuiBvLMOAIEEsw4EgQSzDgiBBLMODIEEsw4QgQSzDhSBBLMOGIEFFLMOHIEMsw4ggRSzDiSBFLMOKIEUsw4sgRSzDjCBJLMONIEksw44gSSzDjyBJLMOQIEQsw5EgTizDkiBPLMOTIE8sw5QgTyzDlSBPLMOWIE8sw5ggTyzDmSBVLMOaIFUsw5sgVSzDnCBVLMOdIFksw54gVEgsw58gc3Msw6AgYSzDoSBhLMOiIGEsw6MgYSzDpCBhLMOlIGEsw6YgYWUsw6cgYyzDqCBlLMOpIGUsw6ogZSzDqyBlLMOsIGksw60gaSzDriBpLMOvIGksw7AgZCzDsSBuLMOyIG8sw7MgbyzDtCBvLMO1IG8sw7YgbyzDuCBvLMO5IHUsw7ogdSzDuyB1LMO8IHUsw70geSzDviB0aCzDvyB5LMSAIEEsxIEgYSzEgiBBLMSDIGEsxIQgQSzEhSBhLMSGIEMsxIcgYyzEjCBDLMSNIGMsxI4gRCzEjyBkLMSQIERKLMSRIGRqLMSSIEUsxJMgZSzEliBFLMSXIGUsxJggZSzEmSBlLMSaIEUsxJsgZSzEniBHLMSfIGcsxKIgRyzEoyBnLMSoIEksxKkgaSzEqiBpLMSrIGksxK4gSSzEryBpLMSwIEksxLEgaSzEtiBrLMS3IGssxLsgTCzEvCBsLMS9IEwsxL4gbCzFgSBMLMWCIGwsxYMgTizFhCBuLMWFIE4sxYYgbizFhyBOLMWIIG4sxZAgTyzFkSBvLMWSIE9FLMWTIG9lLMWUIFIsxZUgcizFmCBSLMWZIHIsxZogUyzFmyBzLMWeIFMsxZ8gcyzFoCBTLMWhIHMsxaIgVCzFoyB0LMWkIFQsxaUgdCzFqCBVLMWpIHUsxaogdSzFqyB1LMWuIFUsxa8gdSzFsCBVLMWxIHUsxbIgVSzFsyB1LMW5IFosxbogeizFuyBaLMW8IHosxb0gWizFviB6LMaSIGYsxqAgTyzGoSBvLMavIFUsxrAgdSzHiCBMSizHiSBsaizHiyBOSizHjCBuaizImCBTLMiZIHMsyJogVCzImyB0LMuaIG8szoYgQSzOiCBFLM6JIEgszoogSSzOjCBPLM6OIFkszo8gVyzOkCBpLM6RIEEszpIgQizOkyBHLM6UIEQszpUgRSzOliBaLM6XIEgszpggOCzOmSBJLM6aIEsszpsgTCzOnCBNLM6dIE4szp4gMyzOnyBPLM6gIFAszqEgUizOoyBTLM6kIFQszqUgWSzOpiBGLM6nIFgszqggUFMszqkgVyzOqiBJLM6rIFkszqwgYSzOrSBlLM6uIGgszq8gaSzOsCB5LM6xIGEszrIgYizOsyBnLM60IGQszrUgZSzOtiB6LM63IGgszrggOCzOuSBpLM66IGsszrsgbCzOvCBtLM69IG4szr4gMyzOvyBvLM+AIHAsz4EgcizPgiBzLM+DIHMsz4QgdCzPhSB5LM+GIGYsz4cgeCzPiCBwcyzPiSB3LM+KIGksz4sgeSzPjCBvLM+NIHksz44gdyzQgSBZbyzQgiBESizQhCBZZSzQhiBJLNCHIFlpLNCIIEos0IkgTEos0IogTkos0IsgQyzQjyBEWizQkCBBLNCRIEIs0JIgVizQkyBHLNCUIEQs0JUgRSzQliBaaCzQlyBaLNCYIEks0JkgSizQmiBLLNCbIEws0JwgTSzQnSBOLNCeIE8s0J8gUCzQoCBSLNChIFMs0KIgVCzQoyBVLNCkIEYs0KUgSCzQpiBDLNCnIENoLNCoIFNoLNCpIFNoLNCqIFUs0KsgWSzQrCAs0K0gRSzQriBZdSzQryBZYSzQsCBhLNCxIGIs0LIgdizQsyBnLNC0IGQs0LUgZSzQtiB6aCzQtyB6LNC4IGks0LkgaizQuiBrLNC7IGws0LwgbSzQvSBuLNC+IG8s0L8gcCzRgCByLNGBIHMs0YIgdCzRgyB1LNGEIGYs0YUgaCzRhiBjLNGHIGNoLNGIIHNoLNGJIHNoLNGKIHUs0YsgeSzRjCAs0Y0gZSzRjiB5dSzRjyB5YSzRkSB5byzRkiBkaizRlCB5ZSzRliBpLNGXIHlpLNGYIGos0ZkgbGos0Zogbmos0ZsgYyzRnyBkeizSkCBHLNKRIGcs4Li/IGJhaHQs4YOQIGEs4YORIGIs4YOSIGcs4YOTIGQs4YOUIGUs4YOVIHYs4YOWIHos4YOXIHQs4YOYIGks4YOZIGss4YOaIGws4YObIG0s4YOcIG4s4YOdIG8s4YOeIHAs4YOfIHpoLOGDoCByLOGDoSBzLOGDoiB0LOGDoyB1LOGDpCBmLOGDpSBrLOGDpiBnaCzhg6cgcSzhg6ggc2gs4YOpIGNoLOGDqiB0cyzhg6sgZHos4YOsIHRzLOGDrSBjaCzhg64ga2gs4YOvIGos4YOwIGgs4bqeIFNTLOG6oCBBLOG6oSBhLOG6oiBBLOG6oyBhLOG6pCBBLOG6pSBhLOG6piBBLOG6pyBhLOG6qCBBLOG6qSBhLOG6qiBBLOG6qyBhLOG6rCBBLOG6rSBhLOG6riBBLOG6ryBhLOG6sCBBLOG6sSBhLOG6siBBLOG6syBhLOG6tCBBLOG6tSBhLOG6tiBBLOG6tyBhLOG6uCBFLOG6uSBlLOG6uiBFLOG6uyBlLOG6vCBFLOG6vSBlLOG6viBFLOG6vyBlLOG7gCBFLOG7gSBlLOG7giBFLOG7gyBlLOG7hCBFLOG7hSBlLOG7hiBFLOG7hyBlLOG7iCBJLOG7iSBpLOG7iiBJLOG7iyBpLOG7jCBPLOG7jSBvLOG7jiBPLOG7jyBvLOG7kCBPLOG7kSBvLOG7kiBPLOG7kyBvLOG7lCBPLOG7lSBvLOG7liBPLOG7lyBvLOG7mCBPLOG7mSBvLOG7miBPLOG7myBvLOG7nCBPLOG7nSBvLOG7niBPLOG7nyBvLOG7oCBPLOG7oSBvLOG7oiBPLOG7oyBvLOG7pCBVLOG7pSB1LOG7piBVLOG7pyB1LOG7qCBVLOG7qSB1LOG7qiBVLOG7qyB1LOG7rCBVLOG7rSB1LOG7riBVLOG7ryB1LOG7sCBVLOG7sSB1LOG7siBZLOG7syB5LOG7tCBZLOG7tSB5LOG7tiBZLOG7tyB5LOG7uCBZLOG7uSB5LOKAmCBcJyzigJkgXCcs4oCcICIs4oCdICIs4oCgICss4oCiICos4oCmIC4uLizigqAgZWN1LOKCoiBjcnV6ZWlybyzigqMgZnJlbmNoIGZyYW5jLOKCpCBsaXJhLOKCpSBtaWxsLOKCpiBuYWlyYSzigqcgcGVzZXRhLOKCqCBydXBlZSzigqkgd29uLOKCqiBuZXcgc2hlcXVlbCzigqsgZG9uZyzigqwgZXVybyzigq0ga2lwLOKCriB0dWdyaWss4oKvIGRyYWNobWEs4oKwIHBlbm55LOKCsSBwZXNvLOKCsiBndWFyYW5pLOKCsyBhdXN0cmFsLOKCtCBocnl2bmlhLOKCtSBjZWRpLOKCuSBpbmRpYW4gcnVwZWUs4oK9IHJ1c3NpYW4gcnVibGUs4oK/IGJpdGNvaW4s4oSgIHNtLOKEoiB0bSziiIIgZCziiIYgZGVsdGEs4oiRIHN1bSziiJ4gaW5maW5pdHks4pmlIGxvdmUs5YWDIHl1YW4s5YaGIHllbizvt7wgcmlhbCc7CiAgICAgICAgdmFyIGRlZlJlcGxhY2VtZW50ID0ge307CiAgICAgICAgZWFjaChSRVBMQUNFTUVOVC5zcGxpdCgnLCcpLCBmdW5jdGlvbihpdGVtKSB7CiAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnNwbGl0KCcgJyk7CiAgICAgICAgICAgIGRlZlJlcGxhY2VtZW50W2l0ZW1bMF1dID0gaXRlbVsxXTsKICAgICAgICB9KTsKICAgICAgICBkZWZSZXBsYWNlbWVudFsnICddID0gJy0nOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc25ha2VDYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5zbmFrZUNhc2UgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDb252ZXJ0IHN0cmluZyB0byAic25ha2VDYXNlIi4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHIgICB8U3RyaW5nIHRvIGNvbnZlcnQgfAogICAgICAgICAqIHxyZXR1cm58U25ha2UgY2FzZWQgc3RyaW5nfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogc25ha2VDYXNlKCdmb29CYXInKTsgLy8gLT4gZm9vX2JhcgogICAgICAgICAqIHNuYWtlQ2FzZSgnZm9vIGJhcicpOyAvLyAtPiBmb29fYmFyCiAgICAgICAgICogc25ha2VDYXNlKCdmb28uYmFyJyk7IC8vIC0+IGZvb19iYXIKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHNuYWtlQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZzsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogc3BsaXRDYXNlIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgIHJldHVybiBzcGxpdENhc2Uoc3RyKS5qb2luKCdfJyk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNvcnRCeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uc29ydEJ5ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogUmV0dXJuIGFuIGFycmF5IG9mIGVsZW1lbnRzIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIgYnkgcmVzdWx0cyBvZiBydW5uaW5nIGVhY2ggZWxlbWVudCB0aHJvdWdoIGl0ZXJhdGVlLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgICAgICAgICAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8YXJyICAgICAgICAgICAgICB8Q29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXJ8CiAgICAgICAgICogfGl0ZXJhdG9yPWlkZW50aXR5fEl0ZXJhdG9yIHRvIHNvcnQgYnkgICAgICAgfAogICAgICAgICAqIHxjdHggICAgICAgICAgICAgIHxJdGVyYXRvciBjb250ZXh0ICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJuICAgICAgICAgICB8TmV3IHNvcnRlZCBhcnJheSAgICAgICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBzb3J0QnkoWzEsIDIsIDMsIDQsIDUsIDZdLCBmdW5jdGlvbiAobnVtKSB7CiAgICAgICAgICogICAgIHJldHVybiBNYXRoLnNpbihudW0pOwogICAgICAgICAqIH0pOyAvLyAtPiBbNSwgNCwgNiwgMywgMSwgMl0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHNvcnRCeShhcnI6IGFueSwgaXRlcmF0b3I/OiBGdW5jdGlvbiwgY3R4PzogYW55KTogYW55W107CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHNhZmVDYiBwbHVjayBtYXAgaXNVbmRlZiAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKG9iaiwgaXRlcmF0ZWUsIGN0eCkgewogICAgICAgICAgICBpdGVyYXRlZSA9IHNhZmVDYihpdGVyYXRlZSwgY3R4KTsKICAgICAgICAgICAgdmFyIGlkeCA9IDA7CiAgICAgICAgICAgIHJldHVybiBwbHVjaygKICAgICAgICAgICAgICAgIG1hcChvYmosIGZ1bmN0aW9uKHZhbCwga2V5KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsOiB2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIGlkeDogaWR4KyssCiAgICAgICAgICAgICAgICAgICAgICAgIGNyaXRlcmlhOiBpdGVyYXRlZSh2YWwsIGtleSwgb2JqKQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9KS5zb3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhOwogICAgICAgICAgICAgICAgICAgIHZhciBiID0gcmlnaHQuY3JpdGVyaWE7CgogICAgICAgICAgICAgICAgICAgIGlmIChhICE9PSBiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhID4gYiB8fCBpc1VuZGVmKGEpKSByZXR1cm4gMTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPCBiIHx8IGlzVW5kZWYoYikpIHJldHVybiAtMTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0LmlkeCAtIHJpZ2h0LmlkeDsKICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgJ3ZhbCcKICAgICAgICAgICAgKTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc29ydEtleXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLnNvcnRLZXlzID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogU29ydCBrZXlzIG9mIGFuIG9iamVjdC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgfERlc2MgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxvYmogICAgfE9iamVjdCB0byBzb3J0ICAgICAgICAgfAogICAgICAgICAqIHxvcHRpb25zfFNvcnQgb3B0aW9ucyAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm4gfE9iamVjdCB3aXRoIHNvcnRlZCBrZXlzfAogICAgICAgICAqCiAgICAgICAgICogQXZhaWxhYmxlIG9wdGlvbnM6CiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICAgIHxEZXNjICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxkZWVwPWZhbHNlfFNvcnQga2V5cyByZWN1cnNpdmVseXwKICAgICAgICAgKiB8Y29tcGFyYXRvcnxDb21wYXJhdG9yICAgICAgICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBzb3J0S2V5cyh7Yjoge2Q6IDIsIGM6IDF9LCBhOiAwfSwgewogICAgICAgICAqICAgICBkZWVwOiB0cnVlCiAgICAgICAgICogfSk7IC8vIC0+IHthOiAwLCBiOiB7YzogMSwgZDogMn19CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzb3J0S2V5cygKICAgICAgICAgKiAgICAgb2JqOiBvYmplY3QsCiAgICAgICAgICogICAgIG9wdGlvbnM/OiB7CiAgICAgICAgICogICAgICAgICBkZWVwPzogYm9vbGVhbiwKICAgICAgICAgKiAgICAgICAgIGNvbXBhcmF0b3I/OiBGdW5jdGlvbgogICAgICAgICAqICAgICB9CiAgICAgICAgICogKTogb2JqZWN0OwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBpc1NvcnRlZCBkZWZhdWx0cyBrZXlzIGlzQXJyIGlzT2JqIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICAgIHZhciBvcHRpb25zID0KICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307CiAgICAgICAgICAgIGRlZmF1bHRzKG9wdGlvbnMsIGRlZk9wdHMpOwogICAgICAgICAgICB2YXIgZGVlcCA9IG9wdGlvbnMuZGVlcCwKICAgICAgICAgICAgICAgIGNvbXBhcmF0b3IgPSBvcHRpb25zLmNvbXBhcmF0b3I7CiAgICAgICAgICAgIHZhciB2aXNpdGVkID0gW107CiAgICAgICAgICAgIHZhciB2aXNpdGVkUmVzdWx0ID0gW107CgogICAgICAgICAgICBmdW5jdGlvbiBzb3J0KG9iaikgewogICAgICAgICAgICAgICAgdmFyIGlkeCA9IHZpc2l0ZWQuaW5kZXhPZihvYmopOwoKICAgICAgICAgICAgICAgIGlmIChpZHggPiAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB2aXNpdGVkUmVzdWx0W2lkeF07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIHJlc3VsdDsKCiAgICAgICAgICAgICAgICBpZiAoaXNBcnIob2JqKSkgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtdOwogICAgICAgICAgICAgICAgICAgIHZpc2l0ZWQucHVzaChvYmopOwogICAgICAgICAgICAgICAgICAgIHZpc2l0ZWRSZXN1bHQucHVzaChyZXN1bHQpOwoKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gb2JqLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IG9ialtpXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWVwICYmIGlzT2JqKHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gc29ydCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0ge307CiAgICAgICAgICAgICAgICAgICAgdmlzaXRlZC5wdXNoKG9iaik7CiAgICAgICAgICAgICAgICAgICAgdmlzaXRlZFJlc3VsdC5wdXNoKHJlc3VsdCk7CgogICAgICAgICAgICAgICAgICAgIHZhciBfa2V5cyA9IGtleXMob2JqKS5zb3J0KGNvbXBhcmF0b3IpOwoKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9sZW4gPSBfa2V5cy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gX2tleXNbX2ldOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3ZhbHVlID0gb2JqW2tleV07CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVlcCAmJiBpc09iaihfdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHNvcnQoX3ZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gX3ZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBzb3J0KG9iaik7CiAgICAgICAgfTsKCiAgICAgICAgdmFyIGRlZk9wdHMgPSB7CiAgICAgICAgICAgIGRlZXA6IGZhbHNlLAogICAgICAgICAgICBjb21wYXJhdG9yOiBpc1NvcnRlZC5kZWZDb21wYXJhdG9yCiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNwYWNlQ2FzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uc3BhY2VDYXNlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ29udmVydCBzdHJpbmcgdG8gInNwYWNlQ2FzZSIuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8c3RyICAgfFN0cmluZyB0byBjb252ZXJ0IHwKICAgICAgICAgKiB8cmV0dXJufFNwYWNlIGNhc2VkIHN0cmluZ3wKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHNwYWNlQ2FzZSgnZm9vQmFyJyk7IC8vIC0+IGZvbyBiYXIKICAgICAgICAgKiBzcGFjZUNhc2UoJ2Zvby5iYXInKTsgLy8gLT4gZm9vIGJhcgogICAgICAgICAqIHNwYWNlQ2FzZSgnZm9vLmJhcicpOyAvLyAtPiBmb28gYmFyCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzcGFjZUNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmc7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHNwbGl0Q2FzZSAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgICAgICByZXR1cm4gc3BsaXRDYXNlKHN0cikuam9pbignICcpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzcGxpdFBhdGggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLnNwbGl0UGF0aCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFNwbGl0IHBhdGggaW50byBkaXIsIG5hbWUgYW5kIGV4dC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8cGF0aCAgfFBhdGggdG8gc3BsaXQgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58T2JqZWN0IGNvbnRhaW5pbmcgZGlyLCBuYW1lIGFuZCBleHR8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBzcGxpdFBhdGgoJ2Y6L2Zvby9iYXIudHh0Jyk7IC8vIC0+IHtkaXI6ICdmOi9mb28vJywgbmFtZTogJ2Jhci50eHQnLCBleHQ6ICcudHh0J30KICAgICAgICAgKiBzcGxpdFBhdGgoJy9ob21lL2Zvby9iYXIudHh0Jyk7IC8vIC0+IHtkaXI6ICcvaG9tZS9mb28vJywgbmFtZTogJ2Jhci50eHQnLCBleHQ6ICcudHh0J30KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHNwbGl0UGF0aChwYXRoOiBzdHJpbmcpOiB7CiAgICAgICAgICogICAgIGRpcjogc3RyaW5nOwogICAgICAgICAqICAgICBuYW1lOiBzdHJpbmc7CiAgICAgICAgICogICAgIGV4dDogc3RyaW5nOwogICAgICAgICAqIH07CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHBhdGgpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gcGF0aC5tYXRjaChyZWdTcGxpdCk7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBkaXI6IG1hdGNoWzFdLAogICAgICAgICAgICAgICAgbmFtZTogbWF0Y2hbMl0sCiAgICAgICAgICAgICAgICBleHQ6IG1hdGNoWzNdCiAgICAgICAgICAgIH07CiAgICAgICAgfTsKCiAgICAgICAgdmFyIHJlZ1NwbGl0ID0gL14oW1xzXFNdKj8pKCg/OlwuezEsMn18W15cXC9dKz98KShcLlteLi9cXF0qfCkpKD86W1xcL10qKSQvOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3RyaW5naWZ5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5zdHJpbmdpZnkgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBKU09OIHN0cmluZ2lmeSB3aXRoIHN1cHBvcnQgZm9yIGNpcmN1bGFyIG9iamVjdCwgZnVuY3Rpb24gZXRjLgogICAgICAgICAqCiAgICAgICAgICogVW5kZWZpbmVkIGlzIHRyZWF0ZWQgYXMgbnVsbCB2YWx1ZS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG9iaiAgIHxPYmplY3QgdG8gc3RyaW5naWZ5fAogICAgICAgICAqIHxzcGFjZXN8SW5kZW50IHNwYWNlcyAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufFN0cmluZ2lmaWVkIG9iamVjdCB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBzdHJpbmdpZnkoe2E6IGZ1bmN0aW9uICgpIHt9fSk7IC8vIC0+ICd7ImEiOiJbRnVuY3Rpb24gZnVuY3Rpb24gKCkge31dIn0nCiAgICAgICAgICogY29uc3Qgb2JqID0ge2E6IDEsIGI6IHt9fTsKICAgICAgICAgKiBvYmouYiA9IG9iajsKICAgICAgICAgKiBzdHJpbmdpZnkob2JqKTsgLy8gLT4gJ3siYSI6MSwiYiI6IltDaXJjdWxhciB+XSJ9JwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc3RyaW5naWZ5KG9iajogYW55LCBzcGFjZXM/OiBudW1iZXIpOiBzdHJpbmc7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHR5cGUgdXBwZXJGaXJzdCB0b1N0ciBpc1VuZGVmIGlzRm4gaXNSZWdFeHAgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihvYmosIHNwYWNlcykgewogICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCBzZXJpYWxpemVyKCksIHNwYWNlcyk7CiAgICAgICAgfTsKCiAgICAgICAgZnVuY3Rpb24gc2VyaWFsaXplcigpIHsKICAgICAgICAgICAgdmFyIHN0YWNrID0gW107CiAgICAgICAgICAgIHZhciBrZXlzID0gW107CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihrZXksIHZhbCkgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gc3RhY2suaW5kZXhPZih0aGlzKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyA+IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZShwb3MgKyAxKTsKICAgICAgICAgICAgICAgICAgICAgICAga2V5cy5zcGxpY2UocG9zLCBJbmZpbml0eSwga2V5KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMpOwogICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHZhciB2YWxQb3MgPSBzdGFjay5pbmRleE9mKHZhbCk7CgogICAgICAgICAgICAgICAgICAgIGlmICh2YWxQb3MgPiAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT09IHZhbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gJ1tDaXJjdWxhciB+XSc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbQ2lyY3VsYXIgfi4nICsga2V5cy5zbGljZSgwLCB2YWxQb3MpLmpvaW4oJy4nKSArICddJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh2YWwpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChpc1JlZ0V4cCh2YWwpIHx8IGlzRm4odmFsKSkgewogICAgICAgICAgICAgICAgICAgIHZhbCA9ICdbJyArIHVwcGVyRmlyc3QodHlwZSh2YWwpKSArICcgJyArIHRvU3RyKHZhbCkgKyAnXSc7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzVW5kZWYodmFsKSkgewogICAgICAgICAgICAgICAgICAgIHZhbCA9IG51bGw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdHJpbmdpZnlBbGwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLnN0cmluZ2lmeUFsbCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFN0cmluZ2lmeSBvYmplY3QgaW50byBqc29uIHdpdGggdHlwZXMuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgIHxEZXNjICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfG9iaiAgICB8T2JqZWN0IHRvIHN0cmluZ2lmeXwKICAgICAgICAgKiB8b3B0aW9uc3xTdHJpbmdpZnkgb3B0aW9ucyAgfAogICAgICAgICAqIHxyZXR1cm4gfFN0cmluZ2lmaWVkIG9iamVjdCB8CiAgICAgICAgICoKICAgICAgICAgKiBBdmFpbGFibGUgb3B0aW9uczoKICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgICAgICAgICB8RGVzYyAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfHVuZW51bWVyYWJsZT1mYWxzZXxJbmNsdWRlIHVuZW51bWVyYWJsZSBrZXlzfAogICAgICAgICAqIHxzeW1ib2w9ZmFsc2UgICAgICB8SW5jbHVkZSBzeW1ib2wga2V5cyAgICAgIHwKICAgICAgICAgKiB8YWNjZXNzR2V0dGVyPWZhbHNlfEFjY2VzcyBnZXR0ZXIgdmFsdWUgICAgICB8CiAgICAgICAgICogfHRpbWVvdXQ9MCAgICAgICAgIHxUaW1lb3V0IG9mIHN0cmluZ2lmeSAgICAgfAogICAgICAgICAqIHxkZXB0aD0wICAgICAgICAgICB8TWF4IGRlcHRoIG9mIHJlY3Vyc2lvbiAgIHwKICAgICAgICAgKiB8aWdub3JlICAgICAgICAgICAgfFZhbHVlcyB0byBpZ25vcmUgICAgICAgICB8CiAgICAgICAgICoKICAgICAgICAgKiBXaGVuIHRpbWUgaXMgb3V0LCBhbGwgcmVtYWluaW5nIHZhbHVlcyB3aWxsIGFsbCBiZSAiVGltZW91dCIuCiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBzdHJpbmdpZnlBbGwoZnVuY3Rpb24gdGVzdCgpIHt9KTsgLy8gLT4gJ3sidmFsdWUiOiJmdW5jdGlvbiB0ZXN0KCkge30iLCJ0eXBlIjoiRnVuY3Rpb24iLC4uLn0nCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzdHJpbmdpZnlBbGwoCiAgICAgICAgICogICAgIG9iajogYW55LAogICAgICAgICAqICAgICBvcHRpb25zPzogewogICAgICAgICAqICAgICAgICAgdW5lbnVtZXJhYmxlPzogYm9vbGVhbjsKICAgICAgICAgKiAgICAgICAgIHN5bWJvbD86IGJvb2xlYW47CiAgICAgICAgICogICAgICAgICBhY2Nlc3NHZXR0ZXI/OiBib29sZWFuOwogICAgICAgICAqICAgICAgICAgdGltZW91dD86IG51bWJlcjsKICAgICAgICAgKiAgICAgICAgIGRlcHRoPzogbnVtYmVyOwogICAgICAgICAqICAgICAgICAgaWdub3JlPzogYW55W107CiAgICAgICAgICogICAgIH0KICAgICAgICAgKiApOiBzdHJpbmc7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGVzY2FwZUpzU3RyIHR5cGUgdG9TdHIgZW5kV2l0aCB0b1NyYyBrZXlzIGVhY2ggQ2xhc3MgZ2V0UHJvdG8gZGlmZmVyZW5jZSBleHRlbmQgaXNQcm9taXNlIGZpbHRlciBub3cgYWxsS2V5cyBjb250YWluIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICAgIHZhciBfcmVmID0KICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZAogICAgICAgICAgICAgICAgICAgICAgICA/IGFyZ3VtZW50c1sxXQogICAgICAgICAgICAgICAgICAgICAgICA6IHt9LAogICAgICAgICAgICAgICAgc2VsZiA9IF9yZWYuc2VsZiwKICAgICAgICAgICAgICAgIF9yZWYkc3RhcnRUaW1lID0gX3JlZi5zdGFydFRpbWUsCiAgICAgICAgICAgICAgICBzdGFydFRpbWUgPSBfcmVmJHN0YXJ0VGltZSA9PT0gdm9pZCAwID8gbm93KCkgOiBfcmVmJHN0YXJ0VGltZSwKICAgICAgICAgICAgICAgIF9yZWYkdGltZW91dCA9IF9yZWYudGltZW91dCwKICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBfcmVmJHRpbWVvdXQgPT09IHZvaWQgMCA/IDAgOiBfcmVmJHRpbWVvdXQsCiAgICAgICAgICAgICAgICBfcmVmJGRlcHRoID0gX3JlZi5kZXB0aCwKICAgICAgICAgICAgICAgIGRlcHRoID0gX3JlZiRkZXB0aCA9PT0gdm9pZCAwID8gMCA6IF9yZWYkZGVwdGgsCiAgICAgICAgICAgICAgICBfcmVmJGN1ckRlcHRoID0gX3JlZi5jdXJEZXB0aCwKICAgICAgICAgICAgICAgIGN1ckRlcHRoID0gX3JlZiRjdXJEZXB0aCA9PT0gdm9pZCAwID8gMSA6IF9yZWYkY3VyRGVwdGgsCiAgICAgICAgICAgICAgICBfcmVmJHZpc2l0b3IgPSBfcmVmLnZpc2l0b3IsCiAgICAgICAgICAgICAgICB2aXNpdG9yID0gX3JlZiR2aXNpdG9yID09PSB2b2lkIDAgPyBuZXcgVmlzaXRvcigpIDogX3JlZiR2aXNpdG9yLAogICAgICAgICAgICAgICAgX3JlZiR1bmVudW1lcmFibGUgPSBfcmVmLnVuZW51bWVyYWJsZSwKICAgICAgICAgICAgICAgIHVuZW51bWVyYWJsZSA9IF9yZWYkdW5lbnVtZXJhYmxlID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkdW5lbnVtZXJhYmxlLAogICAgICAgICAgICAgICAgX3JlZiRzeW1ib2wgPSBfcmVmLnN5bWJvbCwKICAgICAgICAgICAgICAgIHN5bWJvbCA9IF9yZWYkc3ltYm9sID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkc3ltYm9sLAogICAgICAgICAgICAgICAgX3JlZiRhY2Nlc3NHZXR0ZXIgPSBfcmVmLmFjY2Vzc0dldHRlciwKICAgICAgICAgICAgICAgIGFjY2Vzc0dldHRlciA9IF9yZWYkYWNjZXNzR2V0dGVyID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkYWNjZXNzR2V0dGVyLAogICAgICAgICAgICAgICAgX3JlZiRpZ25vcmUgPSBfcmVmLmlnbm9yZSwKICAgICAgICAgICAgICAgIGlnbm9yZSA9IF9yZWYkaWdub3JlID09PSB2b2lkIDAgPyBbXSA6IF9yZWYkaWdub3JlOwoKICAgICAgICAgICAgdmFyIGpzb24gPSAnJzsKICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB7CiAgICAgICAgICAgICAgICB2aXNpdG9yOiB2aXNpdG9yLAogICAgICAgICAgICAgICAgdW5lbnVtZXJhYmxlOiB1bmVudW1lcmFibGUsCiAgICAgICAgICAgICAgICBzeW1ib2w6IHN5bWJvbCwKICAgICAgICAgICAgICAgIGFjY2Vzc0dldHRlcjogYWNjZXNzR2V0dGVyLAogICAgICAgICAgICAgICAgZGVwdGg6IGRlcHRoLAogICAgICAgICAgICAgICAgY3VyRGVwdGg6IGN1ckRlcHRoICsgMSwKICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRpbWVvdXQsCiAgICAgICAgICAgICAgICBzdGFydFRpbWU6IHN0YXJ0VGltZSwKICAgICAgICAgICAgICAgIGlnbm9yZTogaWdub3JlCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHZhciB0ID0gdHlwZShvYmosIGZhbHNlKTsKCiAgICAgICAgICAgIGlmICh0ID09PSAnU3RyaW5nJykgewogICAgICAgICAgICAgICAganNvbiA9IHdyYXBTdHIob2JqKTsKICAgICAgICAgICAgfSBlbHNlIGlmICh0ID09PSAnTnVtYmVyJykgewogICAgICAgICAgICAgICAganNvbiA9IHRvU3RyKG9iaik7CgogICAgICAgICAgICAgICAgaWYgKGVuZFdpdGgoanNvbiwgJ0luZmluaXR5JykpIHsKICAgICAgICAgICAgICAgICAgICBqc29uID0gJ3sidmFsdWUiOiInLmNvbmNhdChqc29uLCAnIiwidHlwZSI6Ik51bWJlciJ9Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAodCA9PT0gJ05hTicpIHsKICAgICAgICAgICAgICAgIGpzb24gPSAneyJ2YWx1ZSI6Ik5hTiIsInR5cGUiOiJOdW1iZXIifSc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodCA9PT0gJ0Jvb2xlYW4nKSB7CiAgICAgICAgICAgICAgICBqc29uID0gb2JqID8gJ3RydWUnIDogJ2ZhbHNlJzsKICAgICAgICAgICAgfSBlbHNlIGlmICh0ID09PSAnTnVsbCcpIHsKICAgICAgICAgICAgICAgIGpzb24gPSAnbnVsbCc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodCA9PT0gJ1VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgICAgIGpzb24gPSAneyJ0eXBlIjoiVW5kZWZpbmVkIn0nOwogICAgICAgICAgICB9IGVsc2UgaWYgKHQgPT09ICdTeW1ib2wnKSB7CiAgICAgICAgICAgICAgICB2YXIgdmFsID0gJ1N5bWJvbCc7CgogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICB2YWwgPSB0b1N0cihvYmopOwogICAgICAgICAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5ICovCiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fQoKICAgICAgICAgICAgICAgIGpzb24gPSAneyJ2YWx1ZSI6Jy5jb25jYXQod3JhcFN0cih2YWwpLCAnLCJ0eXBlIjoiU3ltYm9sIn0nKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0ICYmIG5vdygpIC0gc3RhcnRUaW1lID4gdGltZW91dCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwU3RyKCdUaW1lb3V0Jyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGRlcHRoICYmIGN1ckRlcHRoID4gZGVwdGgpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcFN0cigney4uLn0nKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBqc29uID0gJ3snOwogICAgICAgICAgICAgICAgdmFyIHBhcnRzID0gW107CiAgICAgICAgICAgICAgICB2YXIgdmlzaXRlZE9iaiA9IHZpc2l0b3IuZ2V0KG9iaik7CiAgICAgICAgICAgICAgICB2YXIgaWQ7CgogICAgICAgICAgICAgICAgaWYgKHZpc2l0ZWRPYmopIHsKICAgICAgICAgICAgICAgICAgICBpZCA9IHZpc2l0ZWRPYmouaWQ7CiAgICAgICAgICAgICAgICAgICAgcGFydHMucHVzaCgnInJlZmVyZW5jZSI6Jy5jb25jYXQoaWQpKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWQgPSB2aXNpdG9yLnNldChvYmopOwogICAgICAgICAgICAgICAgICAgIHBhcnRzLnB1c2goJyJpZCI6Jy5jb25jYXQoaWQpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKCcidHlwZSI6IicuY29uY2F0KHQsICciJykpOwoKICAgICAgICAgICAgICAgIGlmIChlbmRXaXRoKHQsICdGdW5jdGlvbicpKSB7CiAgICAgICAgICAgICAgICAgICAgcGFydHMucHVzaCgnInZhbHVlIjonLmNvbmNhdCh3cmFwU3RyKHRvU3JjKG9iaikpKSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHQgPT09ICdSZWdFeHAnKSB7CiAgICAgICAgICAgICAgICAgICAgcGFydHMucHVzaCgnInZhbHVlIjonLmNvbmNhdCh3cmFwU3RyKG9iaikpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXZpc2l0ZWRPYmopIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZW51bWVyYWJsZUtleXMgPSBrZXlzKG9iaik7CgogICAgICAgICAgICAgICAgICAgIGlmIChlbnVtZXJhYmxlS2V5cy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMucHVzaCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGVPYmooCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VudW1lcmFibGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGVLZXlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYgfHwgb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICh1bmVudW1lcmFibGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuZW51bWVyYWJsZUtleXMgPSBkaWZmZXJlbmNlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsS2V5cyhvYmosIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGU6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZW51bWVyYWJsZTogdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlS2V5cwogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuZW51bWVyYWJsZUtleXMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGVPYmooCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1bmVudW1lcmFibGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmVudW1lcmFibGVLZXlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmIHx8IG9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5bWJvbEtleXMgPSBmaWx0ZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxLZXlzKG9iaiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZTogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2Yga2V5ID09PSAnc3ltYm9sJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2xLZXlzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMucHVzaCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRlT2JqKCdzeW1ib2wnLCBzeW1ib2xLZXlzLCBzZWxmIHx8IG9iaiwgb3B0aW9ucykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBnZXRQcm90byhvYmopOwoKICAgICAgICAgICAgICAgICAgICBpZiAocHJvdG90eXBlICYmICFjb250YWluKGlnbm9yZSwgcHJvdG90eXBlKSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvdG8gPSAnInByb3RvIjonLmNvbmNhdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZChvcHRpb25zLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6IHNlbGYgfHwgb2JqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMucHVzaChwcm90byk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGpzb24gKz0gcGFydHMuam9pbignLCcpICsgJ30nOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4ganNvbjsKICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBpdGVyYXRlT2JqKG5hbWUsIGtleXMsIG9iaiwgb3B0aW9ucykgewogICAgICAgICAgICB2YXIgcGFydHMgPSBbXTsKICAgICAgICAgICAgZWFjaChrZXlzLCBmdW5jdGlvbihrZXkpIHsKICAgICAgICAgICAgICAgIHZhciB2YWw7CiAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpOwogICAgICAgICAgICAgICAgdmFyIGhhc0dldHRlciA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5nZXQ7CiAgICAgICAgICAgICAgICB2YXIgaGFzU2V0dGVyID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnNldDsKCiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuYWNjZXNzR2V0dGVyICYmIGhhc0dldHRlcikgewogICAgICAgICAgICAgICAgICAgIHZhbCA9ICcoLi4uKSc7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IG9ialtrZXldOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW4ob3B0aW9ucy5pZ25vcmUsIHZhbCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvbWlzZSh2YWwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwuY2F0Y2goZnVuY3Rpb24oKSB7fSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGUubWVzc2FnZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcGFydHMucHVzaCgnJy5jb25jYXQod3JhcEtleShrZXkpLCAnOicpLmNvbmNhdChleHBvcnRzKHZhbCwgb3B0aW9ucykpKTsKCiAgICAgICAgICAgICAgICBpZiAoaGFzR2V0dGVyKSB7CiAgICAgICAgICAgICAgICAgICAgcGFydHMucHVzaCgKICAgICAgICAgICAgICAgICAgICAgICAgJycKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQod3JhcEtleSgnZ2V0ICcgKyB0b1N0cihrZXkpKSwgJzonKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChleHBvcnRzKGRlc2NyaXB0b3IuZ2V0LCBvcHRpb25zKSkKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChoYXNTZXR0ZXIpIHsKICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKAogICAgICAgICAgICAgICAgICAgICAgICAnJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCh3cmFwS2V5KCdzZXQgJyArIHRvU3RyKGtleSkpLCAnOicpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGV4cG9ydHMoZGVzY3JpcHRvci5zZXQsIG9wdGlvbnMpKQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gJyInLmNvbmNhdChuYW1lLCAnIjp7JykgKyBwYXJ0cy5qb2luKCcsJykgKyAnfSc7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiB3cmFwS2V5KGtleSkgewogICAgICAgICAgICByZXR1cm4gJyInLmNvbmNhdChlc2NhcGVKc29uU3RyKGtleSksICciJyk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiB3cmFwU3RyKHN0cikgewogICAgICAgICAgICByZXR1cm4gJyInLmNvbmNhdChlc2NhcGVKc29uU3RyKHRvU3RyKHN0cikpLCAnIicpOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZXNjYXBlSnNvblN0cihzdHIpIHsKICAgICAgICAgICAgcmV0dXJuIGVzY2FwZUpzU3RyKHN0cikKICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCcvZywgIiciKQogICAgICAgICAgICAgICAgLnJlcGxhY2UoL1x0L2csICdcXHQnKTsKICAgICAgICB9CgogICAgICAgIHZhciBWaXNpdG9yID0gQ2xhc3MoewogICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHRoaXMuaWQgPSAwOwogICAgICAgICAgICAgICAgdGhpcy52aXNpdGVkID0gW107CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgICAgICB2YXIgdmlzaXRlZCA9IHRoaXMudmlzaXRlZCwKICAgICAgICAgICAgICAgICAgICBpZCA9IHRoaXMuaWQ7CiAgICAgICAgICAgICAgICB2YXIgb2JqID0gewogICAgICAgICAgICAgICAgICAgIGlkOiBpZCwKICAgICAgICAgICAgICAgICAgICB2YWw6IHZhbAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIHZpc2l0ZWQucHVzaChvYmopOwogICAgICAgICAgICAgICAgdGhpcy5pZCsrOwogICAgICAgICAgICAgICAgcmV0dXJuIGlkOwogICAgICAgICAgICB9LAogICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICAgICAgdmFyIHZpc2l0ZWQgPSB0aGlzLnZpc2l0ZWQ7CgogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHZpc2l0ZWQubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0gdmlzaXRlZFtpXTsKICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09PSBvYmoudmFsKSByZXR1cm4gb2JqOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3RyaXBBbnNpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5zdHJpcEFuc2kgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBTdHJpcCBhbnNpIGNvZGVzIGZyb20gYSBzdHJpbmcuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8c3RyICAgfFN0cmluZyB0byBzdHJpcHwKICAgICAgICAgKiB8cmV0dXJufFJlc3VsdCBzdHJpbmcgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHN0cmlwQW5zaSgnXHUwMDFiWzRtY2FrZVx1MDAxYlswbScpOyAvLyAtPiAnY2FrZScKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHN0cmlwQW5zaShzdHI6IHN0cmluZyk6IHN0cmluZzsKICAgICAgICAgKi8KCiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29udHJvbC1yZWdleCAqLwogICAgICAgIHZhciByZWdBbnNpID0gL1tcdTAwMWJcdTAwOWJdW1soKSM7P10qKD86WzAtOV17MSw0fSg/OjtbMC05XXswLDR9KSopP1swLTlBLU9SWmNmLW5xcnk9PjxdL2c7CgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKHJlZ0Fuc2ksICcnKTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3RyaXBDb2xvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uc3RyaXBDb2xvciA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFN0cmlwIGFuc2kgY29sb3IgY29kZXMgZnJvbSBhIHN0cmluZy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHIgICB8U3RyaW5nIHRvIHN0cmlwfAogICAgICAgICAqIHxyZXR1cm58UmVzdWx0IHN0cmluZyAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogc3RyaXBDb2xvcignXHUwMDFiWzMxbXJlZFx1MDAxYlszOW0nKTsgLy8gLT4gJ3JlZCcKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHN0cmlwQ29sb3Ioc3RyOiBzdHJpbmcpOiBzdHJpbmc7CiAgICAgICAgICovCgogICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRyb2wtcmVnZXggKi8KICAgICAgICB2YXIgcmVnQ29sb3IgPSAvXHgxQlxbKFswLTldezEsMn0oO1swLTldezEsMn0pPyk/W218S10vZzsKCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UocmVnQ29sb3IsICcnKTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3RyaXBIdG1sVGFnIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5zdHJpcEh0bWxUYWcgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBTdHJpcCBodG1sIHRhZ3MgZnJvbSBhIHN0cmluZy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHIgICB8U3RyaW5nIHRvIHN0cmlwfAogICAgICAgICAqIHxyZXR1cm58UmVzdWx0IHN0cmluZyAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogc3RyaXBIdG1sVGFnKCc8cD5IZWxsbzwvcD4nKTsgLy8gLT4gJ0hlbGxvJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc3RyaXBIdG1sVGFnKHN0cjogc3RyaW5nKTogc3RyaW5nOwogICAgICAgICAqLwogICAgICAgIHZhciByZWdIdG1sVGFnID0gLzxbXj5dKj4vZzsKCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UocmVnSHRtbFRhZywgJycpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdHJpcEluZGVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8uc3RyaXBJbmRlbnQgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBTdHJpcCBpbmRlbnRhdGlvbiBmcm9tIG11bHRpLWxpbmUgc3RyaW5ncy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHIgICB8U3RyaW5nIHRvIHN0cmlwfAogICAgICAgICAqIHxyZXR1cm58UmVzdWx0IHN0cmluZyAgfAogICAgICAgICAqCiAgICAgICAgICogSXQgY2FuIGJlIHVzZWQgYXMgZnVuY3Rpb24gb3IgdGVtcGxhdGUgdGFnLgogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogc3RyaXBJbmRlbnRgCiAgICAgICAgICogICAgIFRlc3Qgc3RyaW5nCiAgICAgICAgICogICAgICAgICAqIGl0ZW0gb25lCiAgICAgICAgICogICAgICAgICAqIGl0ZW0gdHdvCiAgICAgICAgICogYDsgLy8gLT4gJ1Rlc3Qgc3RyaW5nXG4gICAgKiBpdGVtIG9uZVxuICAgICogaXRlbSB0d28nCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzdHJpcEluZGVudChzdHI6IHN0cmluZyk6IHN0cmluZzsKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzdHJpcEluZGVudCgKICAgICAgICAgKiAgICAgbGl0ZXJhbHM6IFRlbXBsYXRlU3RyaW5nc0FycmF5LAogICAgICAgICAqICAgICAuLi5wbGFjZWhvbGRlcnM6IGFueVtdCiAgICAgICAgICogKTogc3RyaW5nOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBpc1N0ciB0b0FyciBtaW4gbWFwIHRyaW0gCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihsaXRlcmFscykgewogICAgICAgICAgICBpZiAoaXNTdHIobGl0ZXJhbHMpKSBsaXRlcmFscyA9IHRvQXJyKGxpdGVyYWxzKTsKICAgICAgICAgICAgdmFyIHN0ciA9ICcnOwoKICAgICAgICAgICAgZm9yICgKICAgICAgICAgICAgICAgIHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwKICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcnMgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLAogICAgICAgICAgICAgICAgICAgIF9rZXkgPSAxOwogICAgICAgICAgICAgICAgX2tleSA8IF9sZW47CiAgICAgICAgICAgICAgICBfa2V5KysKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcnNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gbGl0ZXJhbHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHN0ciArPSBsaXRlcmFsc1tpXTsKICAgICAgICAgICAgICAgIGlmIChwbGFjZWhvbGRlcnNbaV0pIHN0ciArPSBwbGFjZWhvbGRlcnNbaV07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBsaW5lcyA9IHN0ci5zcGxpdCgnXG4nKTsKICAgICAgICAgICAgdmFyIGluZGVudExlbnMgPSBbXTsKCiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2xlbjIgPSBsaW5lcy5sZW5ndGg7IF9pIDwgX2xlbjI7IF9pKyspIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gbGluZXNbX2ldOwoKICAgICAgICAgICAgICAgIHZhciBfaW5kZW50ID0gbGluZS5tYXRjaChyZWdTdGFydFNwYWNlcyk7CgogICAgICAgICAgICAgICAgaWYgKF9pbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnRMZW5zLnB1c2goX2luZGVudFsxXS5sZW5ndGgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgaW5kZW50ID0gaW5kZW50TGVucy5sZW5ndGggPiAwID8gbWluLmFwcGx5KG51bGwsIGluZGVudExlbnMpIDogMDsKICAgICAgICAgICAgcmV0dXJuIHRyaW0oCiAgICAgICAgICAgICAgICBtYXAobGluZXMsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGluZVswXSA9PT0gJyAnID8gbGluZS5zbGljZShpbmRlbnQpIDogbGluZTsKICAgICAgICAgICAgICAgIH0pLmpvaW4oJ1xuJykKICAgICAgICAgICAgKTsKICAgICAgICB9OwoKICAgICAgICB2YXIgcmVnU3RhcnRTcGFjZXMgPSAvXihccyspXFMrLzsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN0cmlwTnVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy5zdHJpcE51bSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFN0cmlwIG51bWJlciB0byBhIHNwZWNpZmllZCBwcmVjaXNpb24uCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICAgICAgfERlc2MgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8bnVtICAgICAgICAgfE51bWJlciB0byBzdHJpcHwKICAgICAgICAgKiB8cHJlY2lzaW9uPTEyfFByZWNpc2lvbiAgICAgIHwKICAgICAgICAgKiB8cmV0dXJuICAgICAgfFJlc3VsdCBudW1iZXIgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHN0cmlwTnVtKDAuMSArIDAuMik7IC8vIC0+IDAuMwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc3RyaXBOdW0obnVtOiBudW1iZXIsIHByZWNpc2lvbj86IG51bWJlcik6IG51bWJlcjsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24obnVtKSB7CiAgICAgICAgICAgIHZhciBwcmVjaXNpb24gPQogICAgICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAxMjsKICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtLnRvUHJlY2lzaW9uKHByZWNpc2lvbikpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLnN1bSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIENvbXB1dGUgc3VtIG9mIGdpdmVuIG51bWJlcnMuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfC4uLm51bXxOdW1iZXJzIHRvIGNhbGN1bGF0ZXwKICAgICAgICAgKiB8cmV0dXJufFN1bSBvZiBudW1iZXJzICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogc3VtKDEsIDIsIDUpOyAvLyAtPiA4CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzdW0oLi4ubnVtOiBudW1iZXJbXSk6IG51bWJlcjsKICAgICAgICAgKi8KICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBhcnIgPSBhcmd1bWVudHM7CiAgICAgICAgICAgIHZhciByZXQgPSAwOwoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgcmV0ICs9IGFycltpXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdGhyb3R0bGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLnRocm90dGxlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogUmV0dXJuIGEgbmV3IHRocm90dGxlZCB2ZXJzaW9uIG9mIHRoZSBwYXNzZWQgZnVuY3Rpb24uCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxmbiAgICB8RnVuY3Rpb24gdG8gdGhyb3R0bGUgICAgICAgICAgIHwKICAgICAgICAgKiB8d2FpdCAgfE51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXl8CiAgICAgICAgICogfHJldHVybnxOZXcgdGhyb3R0bGVkIGZ1bmN0aW9uICAgICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3QgdXBkYXRlUG9zID0gdGhyb3R0bGUoZnVuY3Rpb24gKCkge30sIDEwMCk7CiAgICAgICAgICogLy8gJCh3aW5kb3cpLnNjcm9sbCh1cGRhdGVQb3MpOwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdGhyb3R0bGUoZm46IEZ1bmN0aW9uLCB3YWl0OiBudW1iZXIpOiBGdW5jdGlvbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogZGVib3VuY2UgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihmbiwgd2FpdCkgewogICAgICAgICAgICByZXR1cm4gZGVib3VuY2UoZm4sIHdhaXQsIHRydWUpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB0aW1lQWdvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy50aW1lQWdvID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogRm9ybWF0IGRhdGV0aW1lIHdpdGggKioqIHRpbWUgYWdvIHN0YXRlbWVudC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICAgICAgICB8RGVzYyAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGRhdGUgICAgICAgIHxEYXRlIHRvIGNhbGN1bGF0ZSAgICAgICAgfAogICAgICAgICAqIHxub3c9bmV3IERhdGV8Q3VycmVudCBkYXRlICAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJuICAgICAgfEZvcm1hdHRlZCB0aW1lIGFnbyBzdHJpbmd8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKICAgICAgICAgKiB0aW1lQWdvKG5vdyAtIDEwMDAgKiA2KTsgLy8gLT4gcmlnaHQgbm93CiAgICAgICAgICogdGltZUFnbyhub3cgKyAxMDAwICogMTUpOyAvLyAtPiBpbiAxNSBtaW51dGVzCiAgICAgICAgICogdGltZUFnbyhub3cgLSAxMDAwICogNjAgKiA2MCAqIDUsIG5vdyk7IC8vIC0+IDUgaG91cnMgYWdvCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB0aW1lQWdvKGRhdGU6IERhdGUgfCBudW1iZXIsIG5vdz86IERhdGUgfCBudW1iZXIpOiBzdHJpbmc7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIGlzRGF0ZSB0b0ludCAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGRhdGUsIG5vdykgewogICAgICAgICAgICBpZiAoIWlzRGF0ZShkYXRlKSkgZGF0ZSA9IG5ldyBEYXRlKGRhdGUpOwogICAgICAgICAgICBub3cgPSBub3cgfHwgbmV3IERhdGUoKTsKICAgICAgICAgICAgaWYgKCFpc0RhdGUobm93KSkgbm93ID0gbmV3IERhdGUobm93KTsKICAgICAgICAgICAgdmFyIGRpZmYgPSAobm93IC0gZGF0ZSkgLyAxMDAwOwogICAgICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgICAgIHZhciBhZ28gPSBkaWZmID4gMDsKICAgICAgICAgICAgZGlmZiA9IE1hdGguYWJzKGRpZmYpOwoKICAgICAgICAgICAgd2hpbGUgKGRpZmYgPj0gc2VjQXJyW2ldICYmIGkgPCBzZWNBcnJMZW4pIHsKICAgICAgICAgICAgICAgIGRpZmYgLz0gc2VjQXJyW2ldOwogICAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICB9CgogICAgICAgICAgICBkaWZmID0gdG9JbnQoZGlmZik7CiAgICAgICAgICAgIGkgKj0gMjsKICAgICAgICAgICAgaWYgKGRpZmYgPiAoaSA9PT0gMCA/IDkgOiAxKSkgaSArPSAxOwogICAgICAgICAgICByZXR1cm4gZm9ybWF0KGRpZmYsIGksIGFnbyk7CiAgICAgICAgfTsKCiAgICAgICAgdmFyIHNlY0FyciA9IFs2MCwgNjAsIDI0LCA3LCAzNjUgLyA3IC8gMTIsIDEyXTsKICAgICAgICB2YXIgc2VjQXJyTGVuID0gc2VjQXJyLmxlbmd0aDsKCiAgICAgICAgZnVuY3Rpb24gZm9ybWF0KGRpZmYsIGksIGFnbykgewogICAgICAgICAgICByZXR1cm4gZXhwb3J0cy5pMThuW2ldW2FnbyA/IDAgOiAxXS5yZXBsYWNlKCclcycsIGRpZmYpOwogICAgICAgIH0KCiAgICAgICAgZXhwb3J0cy5pMThuID0gWwogICAgICAgICAgICBbJ2p1c3Qgbm93JywgJ3JpZ2h0IG5vdyddLAogICAgICAgICAgICBbJyVzIHNlY29uZHMgYWdvJywgJ2luICVzIHNlY29uZHMnXSwKICAgICAgICAgICAgWycxIG1pbnV0ZSBhZ28nLCAnaW4gMSBtaW51dGUnXSwKICAgICAgICAgICAgWyclcyBtaW51dGVzIGFnbycsICdpbiAlcyBtaW51dGVzJ10sCiAgICAgICAgICAgIFsnMSBob3VyIGFnbycsICdpbiAxIGhvdXInXSwKICAgICAgICAgICAgWyclcyBob3VycyBhZ28nLCAnaW4gJXMgaG91cnMnXSwKICAgICAgICAgICAgWycxIGRheSBhZ28nLCAnaW4gMSBkYXknXSwKICAgICAgICAgICAgWyclcyBkYXlzIGFnbycsICdpbiAlcyBkYXlzJ10sCiAgICAgICAgICAgIFsnMSB3ZWVrIGFnbycsICdpbiAxIHdlZWsnXSwKICAgICAgICAgICAgWyclcyB3ZWVrcyBhZ28nLCAnaW4gJXMgd2Vla3MnXSwKICAgICAgICAgICAgWycxIG1vbnRoIGFnbycsICdpbiAxIG1vbnRoJ10sCiAgICAgICAgICAgIFsnJXMgbW9udGhzIGFnbycsICdpbiAlcyBtb250aHMnXSwKICAgICAgICAgICAgWycxIHllYXIgYWdvJywgJ2luIDEgeWVhciddLAogICAgICAgICAgICBbJyVzIHllYXJzIGFnbycsICdpbiAlcyB5ZWFycyddCiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHRpbWVUYWtlbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8udGltZVRha2VuID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogR2V0IGV4ZWN1dGlvbiB0aW1lIG9mIGEgZnVuY3Rpb24uCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8Zm4gICAgfEZ1bmN0aW9uIHRvIG1lYXN1cmUgdGltZXwKICAgICAgICAgKiB8cmV0dXJufEV4ZWN1dGlvbiB0aW1lLCBtcyAgICAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHRpbWVUYWtlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICogICAgIC8vIERvIHNvbWV0aGluZy4KICAgICAgICAgKiB9KTsgLy8gLT4gVGltZSB0YWtlbiB0byBleGVjdXRlIGdpdmVuIGZ1bmN0aW9uLgogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdGltZVRha2VuKGZuOiBGdW5jdGlvbik6IG51bWJlcjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogcGVyZk5vdyAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGZuKSB7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHBlcmZOb3coKTsKICAgICAgICAgICAgZm4oKTsKICAgICAgICAgICAgcmV0dXJuIHBlcmZOb3coKSAtIHN0YXJ0OwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB0aW1lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8udGltZXMgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBJbnZva2UgZ2l2ZW4gZnVuY3Rpb24gbiB0aW1lcy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxuICAgICB8VGltZXMgdG8gaW52b2tlIGZ1bmN0aW9uICAgICAgfAogICAgICAgICAqIHxmbiAgICB8RnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9ufAogICAgICAgICAqIHxjdHggICB8RnVuY3Rpb24gY29udGV4dCAgICAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58QXJyYXkgb2YgcmVzdWx0cyAgICAgICAgICAgICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogdGltZXMoMywgU3RyaW5nKTsgLy8gLT4gWycwJywgJzEnLCAnMiddCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB0aW1lczxUPihuOiBudW1iZXIsIGZuOiAobjogbnVtYmVyKSA9PiBULCBjdHg/OiBhbnkpOiBUW107CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIG9wdGltaXplQ2IgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihuLCBmbiwgY3R4KSB7CiAgICAgICAgICAgIHZhciByZXQgPSBBcnJheShNYXRoLm1heCgwLCBuKSk7CiAgICAgICAgICAgIGZuID0gb3B0aW1pemVDYihmbiwgY3R4LCAxKTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgICAgICByZXRbaV0gPSBmbihpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdG9Bc3luYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8udG9Bc3luYyA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFVzZSBnZW5lcmF0b3IgbGlrZSBhc3luYy9hd2FpdC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxmbiAgICB8R2VuZXJhdG9yIGZ1bmN0aW9ufAogICAgICAgICAqIHxyZXR1cm58UmVzdWx0IGZ1bmN0aW9uICAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogY29uc3Qgc2xlZXAgPSByZXF1aXJlKCdsaWNpYS9zbGVlcCcpOwogICAgICAgICAqCiAgICAgICAgICogY29uc3QgZm4gPSB0b0FzeW5jKGZ1bmN0aW9uICooKSB7CiAgICAgICAgICogICAgIHlpZWxkIHNsZWVwKDIwMCk7CiAgICAgICAgICogICAgIHJldHVybiAnbGljaWEnOwogICAgICAgICAqIH0pOwogICAgICAgICAqCiAgICAgICAgICogZm4oKS50aGVuKHN0ciA9PiB7fSk7CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB0b0FzeW5jKGZuOiBGdW5jdGlvbik6IEZ1bmN0aW9uOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiB0b0FyciBpc0dlbmVyYXRvckZuIGlzUHJvbWlzZSB0b1N0ciAKICAgICAgICAgKi8gLy8gaHR0cHM6Ly9naXRodWIuY29tL3RqL2NvCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihmbikgewogICAgICAgICAgICBpZiAoIWlzR2VuZXJhdG9yRm4oZm4pKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIGdlbmVyYXRvciBmdW5jdGlvbicpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgICAgICAgICAgIHZhciBhcmdzID0gdG9BcnIoYXJndW1lbnRzKTsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZ2VuZXJhdG9yID0gZm4uYXBwbHkoX3RoaXMsIGFyZ3MpOwoKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBvbkZ1bGZpbGxlZChyZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldDsKCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBnZW5lcmF0b3IubmV4dChyZXMpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGUpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHJldCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBvblJlamVjdGVkKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0OwoKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGdlbmVyYXRvci50aHJvdyhlcnIpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGUpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHJldCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBuZXh0KHJldCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0LmRvbmUpIHJldHVybiByZXNvbHZlKHJldC52YWx1ZSk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNQcm9taXNlKHJldC52YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQudmFsdWUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvblJlamVjdGVkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFR5cGVFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWW91IG1heSBvbmx5IHlpZWxkIGEgcHJvbWlzZSwgJy5jb25jYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvU3RyKHJldC52YWx1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgaXMgcGFzc2VkJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIG9uRnVsZmlsbGVkKCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdG9wb1NvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLnRvcG9Tb3J0ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogVG9wb2xvZ2ljYWwgc29ydGluZyBhbGdvcml0aG0uCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8ZWRnZXMgfERlcGVuZGVuY2llc3wKICAgICAgICAgKiB8cmV0dXJufFNvcnRlZCBvcmRlcnwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHRvcG9Tb3J0KFtbMSwgMl0sIFsxLCAzXSwgWzMsIDJdXSk7IC8vIC0+IFsxLCAzLCAyXQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdG9wb1NvcnQoZWRnZXM6IGFueVtdKTogYW55W107CiAgICAgICAgICovCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGVkZ2VzKSB7CiAgICAgICAgICAgIHJldHVybiBzb3J0KHVuaXF1ZU5vZGVzKGVkZ2VzKSwgZWRnZXMpOwogICAgICAgIH07CgogICAgICAgIGZ1bmN0aW9uIHVuaXF1ZU5vZGVzKGFycikgewogICAgICAgICAgICB2YXIgcmV0ID0gW107CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgZWRnZSA9IGFycltpXTsKICAgICAgICAgICAgICAgIGlmIChyZXQuaW5kZXhPZihlZGdlWzBdKSA8IDApIHJldC5wdXNoKGVkZ2VbMF0pOwogICAgICAgICAgICAgICAgaWYgKHJldC5pbmRleE9mKGVkZ2VbMV0pIDwgMCkgcmV0LnB1c2goZWRnZVsxXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBzb3J0KG5vZGVzLCBlZGdlcykgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gbm9kZXMubGVuZ3RoOwogICAgICAgICAgICB2YXIgc29ydGVkID0gbmV3IEFycmF5KGN1cnNvcik7CiAgICAgICAgICAgIHZhciB2aXNpdGVkID0ge307CiAgICAgICAgICAgIHZhciBpID0gY3Vyc29yOwoKICAgICAgICAgICAgd2hpbGUgKGktLSkgewogICAgICAgICAgICAgICAgaWYgKCF2aXNpdGVkW2ldKSB2aXNpdChub2Rlc1tpXSwgaSwgW10pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmdW5jdGlvbiB2aXNpdChub2RlLCBpLCBwcmVkZWNlc3NvcnMpIHsKICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvcnMuaW5kZXhPZihub2RlKSA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDeWNsaWMgZGVwZW5kZW5jeTogJyArIEpTT04uc3RyaW5naWZ5KG5vZGUpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodmlzaXRlZFtpXSkgcmV0dXJuOwogICAgICAgICAgICAgICAgdmlzaXRlZFtpXSA9IHRydWU7CiAgICAgICAgICAgICAgICB2YXIgb3V0Z29pbmcgPSBlZGdlcy5maWx0ZXIoZnVuY3Rpb24oZWRnZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBlZGdlWzBdID09PSBub2RlOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqLwoKICAgICAgICAgICAgICAgIGlmICgoaSA9IG91dGdvaW5nLmxlbmd0aCkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcHJlZHMgPSBwcmVkZWNlc3NvcnMuY29uY2F0KG5vZGUpOwoKICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IG91dGdvaW5nWy0taV1bMV07CiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0KGNoaWxkLCBub2Rlcy5pbmRleE9mKGNoaWxkKSwgcHJlZHMpOwogICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGkpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNvcnRlZFstLWN1cnNvcl0gPSBub2RlOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gc29ydGVkOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHRyeUl0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy50cnlJdCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFJ1biBmdW5jdGlvbiBpbiBhIHRyeSBjYXRjaC4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lfERlc2MgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGZuICB8RnVuY3Rpb24gdG8gdHJ5IGNhdGNofAogICAgICAgICAqIHxjYiAgfENhbGxiYWNrICAgICAgICAgICAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHRyeUl0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgKiAgICAgLy8gRG8gc29tZXRoaW5nIHRoYXQgbWlnaHQgY2F1c2UgYW4gZXJyb3IuCiAgICAgICAgICogfSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0KSB7CiAgICAgICAgICogICAgIGlmIChlcnIpIGNvbnNvbGUubG9nKGVycik7CiAgICAgICAgICogfSk7CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB0cnlJdChmbjogRnVuY3Rpb24sIGNiPzogRnVuY3Rpb24pOiB2b2lkOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBub29wIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oZm4sIGNiKSB7CiAgICAgICAgICAgIGNiID0gY2IgfHwgbm9vcDsKCiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBjYihudWxsLCBmbigpKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgY2IoZSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdW5lc2NhcGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLnVuZXNjYXBlID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogQ29udmVydCBIVE1MIGVudGl0aWVzIGJhY2ssIHRoZSBpbnZlcnNlIG9mIGVzY2FwZS4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHIgICB8U3RyaW5nIHRvIHVuZXNjYXBlfAogICAgICAgICAqIHxyZXR1cm58VW5lc2NhcGVkIHN0cmluZyAgfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogdW5lc2NhcGUoJ1lvdSAmYW1wOyBNZScpOyAvLyAtPiAnWW91ICYgTWUnCiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1bmVzY2FwZShzdHI6IHN0cmluZyk6IHN0cmluZzsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogZXNjYXBlIGtleXMgaW52ZXJ0IAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgIHJldHVybiByZWdUZXN0LnRlc3Qoc3RyKSA/IHN0ci5yZXBsYWNlKHJlZ1JlcGxhY2UsIHJlcGxhY2VGbikgOiBzdHI7CiAgICAgICAgfTsKCiAgICAgICAgdmFyIG1hcCA9IGludmVydChlc2NhcGUubWFwKTsKICAgICAgICB2YXIgcmVnU3JjID0gJyg/OicgKyBrZXlzKG1hcCkuam9pbignfCcpICsgJyknOwogICAgICAgIHZhciByZWdUZXN0ID0gbmV3IFJlZ0V4cChyZWdTcmMpOwogICAgICAgIHZhciByZWdSZXBsYWNlID0gbmV3IFJlZ0V4cChyZWdTcmMsICdnJyk7CgogICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VGbihtYXRjaCkgewogICAgICAgICAgICByZXR1cm4gbWFwW21hdGNoXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB1bmlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8udW5pb24gPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBDcmVhdGUgYW4gYXJyYXkgb2YgdW5pcXVlIHZhbHVlcywgaW4gb3JkZXIsIGZyb20gYWxsIGdpdmVuIGFycmF5cy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiB8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfC4uLmFycnxBcnJheXMgdG8gaW5zcGVjdCAgICAgICAgICAgfAogICAgICAgICAqIHxyZXR1cm58TmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlc3wKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIHVuaW9uKFsyLCAxXSwgWzQsIDJdLCBbMSwgMl0pOyAvLyAtPiBbMiwgMSwgNF0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVuaW9uKC4uLmFycjogQXJyYXk8YW55W10+KTogYW55W107CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHJlc3RBcmdzIHVuaXF1ZSBmbGF0dGVuIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gcmVzdEFyZ3MoZnVuY3Rpb24oYXJyYXlzKSB7CiAgICAgICAgICAgIHJldHVybiB1bmlxdWUoZmxhdHRlbihhcnJheXMpKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHVuaXZlcnNhbGlmeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8udW5pdmVyc2FsaWZ5ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogTWFrZSBhbiBhc3luYyBmdW5jdGlvbiBzdXBwb3J0IGJvdGggcHJvbWlzZXMgYW5kIGNhbGxiYWNrcy4KICAgICAgICAgKgogICAgICAgICAqIHxOYW1lICB8RGVzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8Zm4gICAgfEFzeW5jIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHx0eXBlICB8U291cmNlIHR5cGUsIHByb21pc2Ugb3IgY2FsbGJhY2t8CiAgICAgICAgICogfHJldHVybnxSZXN1bHQgZnVuY3Rpb24gICAgICAgICAgICAgICAgIHwKICAgICAgICAgKi8KCiAgICAgICAgLyogZXhhbXBsZQogICAgICAgICAqIGZ1bmN0aW9uIGNhbGxiYWNrRm4oc3RyLCBjYikgewogICAgICAgICAqICAgICBzZXRUaW1lb3V0KCgpID0+IHsgY2IobnVsbCwgc3RyKTsgfSwgMTApOwogICAgICAgICAqIH0KICAgICAgICAgKgogICAgICAgICAqIGNvbnN0IGZuID0gdW5pdmVyc2FsaWZ5KGNhbGxiYWNrRm4sICdjYWxsYmFjaycpOwogICAgICAgICAqIGZuKCdsaWNpYScsIChlcnIsIHJlc3VsdCkgPT4gewogICAgICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpOyAvLyAtPiAnbGljaWEnCiAgICAgICAgICogfSk7CiAgICAgICAgICogZm4oJ2xpY2lhJykudGhlbihyZXN1bHQgPT4gewogICAgICAgICAqICAgICBjb25zb2xlLmxvZyhyZXN1bHQpOyAvLyAtPiAnbGljaWEnCiAgICAgICAgICogfSk7CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1bml2ZXJzYWxpZnkoZm46IEZ1bmN0aW9uLCB0eXBlOiBzdHJpbmcpOiBGdW5jdGlvbjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogcHJvbWlzaWZ5IGNhbGxiYWNraWZ5IGxhc3QgaXNGbiAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGZuLCB0eXBlKSB7CiAgICAgICAgICAgIHZhciBjYWxsYmFja0ZuOwogICAgICAgICAgICB2YXIgcHJvbWlzZUZuOwoKICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdjYWxsYmFjaycpIHsKICAgICAgICAgICAgICAgIGNhbGxiYWNrRm4gPSBmbjsKICAgICAgICAgICAgICAgIHByb21pc2VGbiA9IHByb21pc2lmeShmbik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBwcm9taXNlRm4gPSBmbjsKICAgICAgICAgICAgICAgIGNhbGxiYWNrRm4gPSBjYWxsYmFja2lmeShmbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGZvciAoCiAgICAgICAgICAgICAgICAgICAgdmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsKICAgICAgICAgICAgICAgICAgICBfa2V5IDwgX2xlbjsKICAgICAgICAgICAgICAgICAgICBfa2V5KysKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGlzRm4obGFzdChhcmdzKSkpIHsKICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0ZuLmFwcGx5KHRoaXMsIGFyZ3MpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZUZuLmFwcGx5KHRoaXMsIGFyZ3MpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB1bnppcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiAgICB2YXIgdW56aXAgPSBfLnVuemlwID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogT3Bwb3NpdGUgb2YgemlwLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgIHxEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGFyciAgIHxBcnJheSBvZiBncm91cGVkIGVsZW1lbnRzIHRvIHByb2Nlc3N8CiAgICAgICAgICogfHJldHVybnxOZXcgYXJyYXkgb2YgcmVncm91cGVkIGVsZW1lbnRzICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiB1bnppcChbWydhJywgMSwgdHJ1ZV0sIFsnYicsIDIsIGZhbHNlXV0pOyAvLyAtPiBbWydhJywgJ2InXSwgWzEsIDJdLCBbdHJ1ZSwgZmFsc2VdXQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZGVjbGFyZSBmdW5jdGlvbiB1bnppcChhcnI6IEFycmF5PGFueVtdPik6IEFycmF5PGFueVtdPjsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogbWFwIHBsdWNrIG1heCAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IGZ1bmN0aW9uKGFycikgewogICAgICAgICAgICB2YXIgbGVuID0gbWF4LmFwcGx5KAogICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgIG1hcChhcnIsIGZ1bmN0aW9uKGFycikgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnIubGVuZ3RoOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgKTsKICAgICAgICAgICAgdmFyIHJldCA9IEFycmF5KGxlbik7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICByZXRbaV0gPSBwbHVjayhhcnIsIGkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB1c2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLnVzZSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFVzZSBtb2R1bGVzIHRoYXQgaXMgY3JlYXRlZCBieSBkZWZpbmUuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgICB8RGVzYyAgICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxyZXF1aXJlc3xEZXBlbmRlbmNpZXMgICAgICAgIHwKICAgICAgICAgKiB8bWV0aG9kICB8Q29kZXMgdG8gYmUgZXhlY3V0ZWR8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiAvLyBkZWZpbmUoJ0EnLCAoKSA9PiAnQScpOwogICAgICAgICAqIHVzZShbJ0EnXSwgZnVuY3Rpb24gKEEpIHsKICAgICAgICAgKiAgICAgY29uc29sZS5sb2coQSArICdCJyk7IC8vIC0+ICdBQicKICAgICAgICAgKiB9KTsKICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVzZShyZXF1aXJlczogc3RyaW5nW10sIG1ldGhvZDogRnVuY3Rpb24pOiB2b2lkOwogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVzZShtZXRob2Q6IEZ1bmN0aW9uKTogdm9pZDsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogbWFwIGRlZmluZSBoYXMgdG9BcnIgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihyZXF1aXJlcywgbWV0aG9kKSB7CiAgICAgICAgICAgIGlmIChtZXRob2QgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgbWV0aG9kID0gcmVxdWlyZXM7CiAgICAgICAgICAgICAgICByZXF1aXJlcyA9IFtdOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXF1aXJlcyA9IG1hcCh0b0FycihyZXF1aXJlcyksIGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHJlcSh2YWwpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgbWV0aG9kLmFwcGx5KG51bGwsIHJlcXVpcmVzKTsKICAgICAgICB9OwoKICAgICAgICB2YXIgbW9kdWxlcyA9IGRlZmluZS5fbW9kdWxlczsKICAgICAgICB2YXIgcmVxdWlyZU1hcmtzID0ge307CgogICAgICAgIGZ1bmN0aW9uIHJlcShuYW1lKSB7CiAgICAgICAgICAgIGlmIChoYXMocmVxdWlyZU1hcmtzLCBuYW1lKSkgcmV0dXJuIG1vZHVsZXNbbmFtZV07CiAgICAgICAgICAgIHZhciByZXF1aXJlcyA9IG1vZHVsZXNbbmFtZV0ucmVxdWlyZXM7CiAgICAgICAgICAgIHZhciBib2R5ID0gbW9kdWxlc1tuYW1lXS5ib2R5OwogICAgICAgICAgICB2YXIgbGVuID0gcmVxdWlyZXMubGVuZ3RoOwoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgcmVxdWlyZXNbaV0gPSByZXEocmVxdWlyZXNbaV0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgZXhwb3J0cyA9IGJvZHkuYXBwbHkobnVsbCwgcmVxdWlyZXMpOwogICAgICAgICAgICBpZiAoZXhwb3J0cykgbW9kdWxlc1tuYW1lXSA9IGV4cG9ydHM7CiAgICAgICAgICAgIHJlcXVpcmVNYXJrc1tuYW1lXSA9IHRydWU7CiAgICAgICAgICAgIHJldHVybiBtb2R1bGVzW25hbWVdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHV1aWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLnV1aWQgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBSRkM0MTIyIHZlcnNpb24gNCBjb21wbGlhbnQgdXVpZCBnZW5lcmF0b3IuCiAgICAgICAgICoKICAgICAgICAgKiBDaGVjayBbUkZDNDEyMiA0LjRdKGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzQxMjIudHh0KSBmb3IgcmVmZXJlbmNlLgogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogdXVpZCgpOyAvLyAtPiAnNTNjZTA0OTctNjU1NC00OWU5LThkNzktMzQ3NDA2ZDJhODhiJwogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXVpZCgpOiBzdHJpbmc7CiAgICAgICAgICovCgogICAgICAgIC8qIGRlcGVuZGVuY2llcwogICAgICAgICAqIHJhbmRvbUJ5dGVzIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBiID0gcmFuZG9tQnl0ZXMoMTYpOwogICAgICAgICAgICBiWzZdID0gKGJbNl0gJiAweDBmKSB8IDB4NDA7CiAgICAgICAgICAgIGJbOF0gPSAoYls4XSAmIDB4M2YpIHwgMHg4MDsKICAgICAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgICAgIGhleEJ5dGVzW2JbMF1dICsKICAgICAgICAgICAgICAgIGhleEJ5dGVzW2JbMV1dICsKICAgICAgICAgICAgICAgIGhleEJ5dGVzW2JbMl1dICsKICAgICAgICAgICAgICAgIGhleEJ5dGVzW2JbM11dICsKICAgICAgICAgICAgICAgICctJyArCiAgICAgICAgICAgICAgICBoZXhCeXRlc1tiWzRdXSArCiAgICAgICAgICAgICAgICBoZXhCeXRlc1tiWzVdXSArCiAgICAgICAgICAgICAgICAnLScgKwogICAgICAgICAgICAgICAgaGV4Qnl0ZXNbYls2XV0gKwogICAgICAgICAgICAgICAgaGV4Qnl0ZXNbYls3XV0gKwogICAgICAgICAgICAgICAgJy0nICsKICAgICAgICAgICAgICAgIGhleEJ5dGVzW2JbOF1dICsKICAgICAgICAgICAgICAgIGhleEJ5dGVzW2JbOV1dICsKICAgICAgICAgICAgICAgICctJyArCiAgICAgICAgICAgICAgICBoZXhCeXRlc1tiWzEwXV0gKwogICAgICAgICAgICAgICAgaGV4Qnl0ZXNbYlsxMV1dICsKICAgICAgICAgICAgICAgIGhleEJ5dGVzW2JbMTJdXSArCiAgICAgICAgICAgICAgICBoZXhCeXRlc1tiWzEzXV0gKwogICAgICAgICAgICAgICAgaGV4Qnl0ZXNbYlsxNF1dICsKICAgICAgICAgICAgICAgIGhleEJ5dGVzW2JbMTVdXQogICAgICAgICAgICApOwogICAgICAgIH07CgogICAgICAgIHZhciBoZXhCeXRlcyA9IFtdOwoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAgICAgICAgICAgIGhleEJ5dGVzW2ldID0gKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnN1YnN0cigxKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB2bHEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLnZscSA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFZhcmlhYmxlLWxlbmd0aCBxdWFudGl0eSBlbmNvZGluZyBhbmQgZGVjb2RpbmcuCiAgICAgICAgICoKICAgICAgICAgKiAjIyMgZW5jb2RlCiAgICAgICAgICoKICAgICAgICAgKiBFbmNvZGUgbnVtYmVycyBpbnRvIHZscSBzdHJpbmcuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxudW1iZXJ8TnVtYmVyIHRvIGVuY29kZXwKICAgICAgICAgKiB8cmV0dXJufEVuY29kZWQgc3RyaW5nICB8CiAgICAgICAgICoKICAgICAgICAgKiAjIyMgZGVjb2RlCiAgICAgICAgICoKICAgICAgICAgKiBEZWNvZGUgdmxxIHN0cmluZyBpbnRvIG51bWJlcnMuCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAqIHxzdHJpbmd8U3RyaW5nIHRvIGRlY29kZXwKICAgICAgICAgKiB8cmV0dXJufERlY29kZWQgbnVtYmVycyB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiB2bHEuZW5jb2RlKDEyMyk7IC8vIC0+ICcySCcKICAgICAgICAgKiB2bHEuZW5jb2RlKFsxMjMsIDQ1NiwgNzg5XSk7IC8vIC0+ICcySHdjcXhCJwogICAgICAgICAqIHZscS5kZWNvZGUoJzJIJyk7IC8vIC0+IFsxMjNdCiAgICAgICAgICogdmxxLmRlY29kZSgnMkh3Y3F4QicpOyAvLyAtPiBbMTIzLCA0NTYsIDc4OV0KICAgICAgICAgKi8KCiAgICAgICAgLyogdHlwZXNjcmlwdAogICAgICAgICAqIGV4cG9ydCBkZWNsYXJlIGNvbnN0IHZscTogewogICAgICAgICAqICAgICBlbmNvZGUobnVtYmVyOiBudW1iZXIgfCBudW1iZXJbXSk6IHN0cmluZzsKICAgICAgICAgKiAgICAgZGVjb2RlKHN0cmluZzogc3RyaW5nKTogbnVtYmVyW107CiAgICAgICAgICogfTsKICAgICAgICAgKi8KCiAgICAgICAgLyogZGVwZW5kZW5jaWVzCiAgICAgICAgICogdG9BcnIgCiAgICAgICAgICovIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1jb21waWxlci9ibG9iL21hc3Rlci9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhCgogICAgICAgIGV4cG9ydHMgPSB7CiAgICAgICAgICAgIGVuY29kZTogZnVuY3Rpb24oYXJyKSB7CiAgICAgICAgICAgICAgICBhcnIgPSB0b0FycihhcnIpOwogICAgICAgICAgICAgICAgdmFyIHJldCA9ICcnOwoKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICByZXQgKz0gZW5jb2RlKGFycltpXSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGVjb2RlOiBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgICAgIHZhciByZXQgPSBbXTsKICAgICAgICAgICAgICAgIHZhciBpID0gMDsKICAgICAgICAgICAgICAgIHZhciBsZW4gPSBzdHIubGVuZ3RoOwoKICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgbGVuKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gMDsKICAgICAgICAgICAgICAgICAgICB2YXIgY29udGludWF0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNoaWZ0ID0gMDsKCiAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlnaXQgPSBjaGFyVG9JbnRbc3RyW2krK11dOwogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51YXRpb24gPSAoZGlnaXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCkgIT09IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0ICY9IFZMUV9CQVNFX01BU0s7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKyAoZGlnaXQgPDwgc2hpZnQpOwogICAgICAgICAgICAgICAgICAgICAgICBzaGlmdCA9IHNoaWZ0ICsgVkxRX0JBU0VfU0hJRlQ7CiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoY29udGludWF0aW9uKTsKCiAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goZnJvbVZMUVNpZ25lZCh2YWx1ZSkpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIHZhciBjaGFyVG9JbnQgPSB7fTsKICAgICAgICB2YXIgaW50VG9DaGFyID0ge307CiAgICAgICAgdmFyIGNoYXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89JzsKCiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNoYXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgIGNoYXJUb0ludFtjaGFyc1tpXV0gPSBpOwogICAgICAgICAgICBpbnRUb0NoYXJbaV0gPSBjaGFyc1tpXTsKICAgICAgICB9CgogICAgICAgIHZhciBWTFFfQkFTRV9TSElGVCA9IDU7CiAgICAgICAgdmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDsKICAgICAgICB2YXIgVkxRX0JBU0VfTUFTSyA9IFZMUV9CQVNFIC0gMTsKICAgICAgICB2YXIgVkxRX0NPTlRJTlVBVElPTl9CSVQgPSBWTFFfQkFTRTsKCiAgICAgICAgZnVuY3Rpb24gZW5jb2RlKHZhbHVlKSB7CiAgICAgICAgICAgIHZhciByZXQgPSAnJzsKICAgICAgICAgICAgdmFsdWUgPSB0b1ZMUVNpZ25lZCh2YWx1ZSk7CgogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICB2YXIgZGlnaXQgPSB2YWx1ZSAmIFZMUV9CQVNFX01BU0s7CiAgICAgICAgICAgICAgICB2YWx1ZSA+Pj49IFZMUV9CQVNFX1NISUZUOwoKICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IDApIHsKICAgICAgICAgICAgICAgICAgICBkaWdpdCB8PSBWTFFfQ09OVElOVUFUSU9OX0JJVDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXQgKz0gaW50VG9DaGFyW2RpZ2l0XTsKICAgICAgICAgICAgfSB3aGlsZSAodmFsdWUgPiAwKTsKCiAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiB0b1ZMUVNpZ25lZCh2YWx1ZSkgewogICAgICAgICAgICBpZiAodmFsdWUgPCAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gKC12YWx1ZSA8PCAxKSArIDE7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gKHZhbHVlIDw8IDEpICsgMDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZnJvbVZMUVNpZ25lZCh2YWx1ZSkgewogICAgICAgICAgICB2YXIgbmVnYXRlID0gKHZhbHVlICYgMSkgPT09IDE7CiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgPj4gMTsKICAgICAgICAgICAgcmV0dXJuIG5lZ2F0ZSA/IC12YWx1ZSA6IHZhbHVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHdhaXRVbnRpbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgIF8ud2FpdFVudGlsID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgICAgLyogV2FpdCB1bnRpbCBmdW5jdGlvbiByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgICAgICAgIHxEZXNjICAgICAgICAgICAgICB8CiAgICAgICAgICogfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfGNvbmRpdGlvbiAgIHxDb25kaXRpb24gZnVuY3Rpb258CiAgICAgICAgICogfHRpbWVvdXQ9MCAgIHxUaW1lb3V0ICAgICAgICAgICB8CiAgICAgICAgICogfGludGVydmFsPTI1MHxXYWl0IGludGVydmFsICAgICB8CiAgICAgICAgICovCgogICAgICAgIC8qIGV4YW1wbGUKICAgICAgICAgKiBsZXQgYSA9IDU7CiAgICAgICAgICogc2V0VGltZW91dCgoKSA9PiBhID0gMTAsIDUwMCk7CiAgICAgICAgICogd2FpdFVudGlsKCgpID0+IGEgPT09IDEwKS50aGVuKCgpID0+IHsKICAgICAgICAgKiAgICAgY29uc29sZS5sb2coYSk7IC8vIC0+IDEwCiAgICAgICAgICogfSk7CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB3YWl0VW50aWwoCiAgICAgICAgICogICAgIGNvbmRpdGlvbjogRnVuY3Rpb24sCiAgICAgICAgICogICAgIHRpbWVvdXQ/OiBudW1iZXIsCiAgICAgICAgICogICAgIGludGVydmFsPzogbnVtYmVyCiAgICAgICAgICogKTogUHJvbWlzZTxhbnk+OwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBub3cgCiAgICAgICAgICovCgogICAgICAgIGV4cG9ydHMgPSBmdW5jdGlvbihjb25kaXRpb24pIHsKICAgICAgICAgICAgdmFyIHRpbWVvdXQgPQogICAgICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwOwogICAgICAgICAgICB2YXIgaW50ZXJ2YWwgPQogICAgICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAyNTA7CgogICAgICAgICAgICBmdW5jdGlvbiBldmFsQ29uZGl0aW9uKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY29uZGl0aW9uKCkpOwogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgICAgICAgICAgICB2YXIgc3RhcnRUaW1lID0gbm93KCk7CgogICAgICAgICAgICAgICAgdmFyIHBvbGxDb25kaXRpb24gPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBldmFsQ29uZGl0aW9uKCkudGhlbihmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsYXBzZWQgPSBub3coKSAtIHN0YXJ0VGltZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodmFsKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aW1lb3V0ICYmIGVsYXBzZWQgPj0gdGltZW91dCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yKCdXYWl0IHRpbWVkIG91dCBhZnRlciAnLmNvbmNhdChlbGFwc2VkLCAnIG1zJykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChwb2xsQ29uZGl0aW9uLCBpbnRlcnZhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9LCByZWplY3QpOwogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICBwb2xsQ29uZGl0aW9uKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIHJldHVybiBleHBvcnRzOwogICAgfSkoe30pOwoKICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB3YXRlcmZhbGwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBfLndhdGVyZmFsbCA9IChmdW5jdGlvbiAoZXhwb3J0cykgewogICAgICAgIC8qIFJ1biBhbiBhcnJheSBvZiBmdW5jdGlvbnMgaW4gc2VyaWVzLgogICAgICAgICAqCiAgICAgICAgICogfE5hbWUgfERlc2MgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgKiB8dGFza3N8QXJyYXkgb2YgZnVuY3Rpb25zICAgICB8CiAgICAgICAgICogfGNiICAgfENhbGxiYWNrIG9uY2UgY29tcGxldGVkfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogd2F0ZXJmYWxsKFsKICAgICAgICAgKiAgICAgZnVuY3Rpb24gKGNiKSB7CiAgICAgICAgICogICAgICAgICBjYihudWxsLCAnb25lJyk7CiAgICAgICAgICogICAgIH0sCiAgICAgICAgICogICAgIGZ1bmN0aW9uIChhcmcxLCBjYikgewogICAgICAgICAqICAgICAgICAgLy8gYXJnMSAtPiAnb25lJwogICAgICAgICAqICAgICAgICAgY2IobnVsbCwgJ2RvbmUnKTsKICAgICAgICAgKiAgICAgfQogICAgICAgICAqIF0sIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkgewogICAgICAgICAqICAgICAvLyByZXN1bHQgLT4gJ2RvbmUnCiAgICAgICAgICogfSk7CiAgICAgICAgICovCgogICAgICAgIC8qIHR5cGVzY3JpcHQKICAgICAgICAgKiBleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB3YXRlcmZhbGwodGFza3M6IEZ1bmN0aW9uW10sIGNiPzogRnVuY3Rpb24pOiB2b2lkOwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiBub29wIG5leHRUaWNrIHJlc3RBcmdzIAogICAgICAgICAqLwoKICAgICAgICBleHBvcnRzID0gZnVuY3Rpb24odGFza3MsIGNiKSB7CiAgICAgICAgICAgIGNiID0gY2IgfHwgbm9vcDsKICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSAwOwogICAgICAgICAgICB2YXIgdGFza0NiID0gcmVzdEFyZ3MoZnVuY3Rpb24oZXJyLCBhcmdzKSB7CiAgICAgICAgICAgICAgICBpZiAoKytjdXJyZW50ID49IHRhc2tzLmxlbmd0aCB8fCBlcnIpIHsKICAgICAgICAgICAgICAgICAgICBhcmdzLnVuc2hpZnQoZXJyKTsKICAgICAgICAgICAgICAgICAgICBuZXh0VGljayhmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2IuYXBwbHkobnVsbCwgYXJncyk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaCh0YXNrQ2IpOwogICAgICAgICAgICAgICAgICAgIHRhc2tzW2N1cnJlbnRdLmFwcGx5KG51bGwsIGFyZ3MpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIGlmICh0YXNrcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHRhc2tzWzBdKHRhc2tDYik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBuZXh0VGljayhmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBjYigpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICByZXR1cm4gZXhwb3J0czsKICAgIH0pKHt9KTsKCiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gemlwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgXy56aXAgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgICAvKiBNZXJnZSB0b2dldGhlciB0aGUgdmFsdWVzIG9mIGVhY2ggb2YgdGhlIGFycmF5cyB3aXRoIHRoZSB2YWx1ZXMgYXQgdGhlIGNvcnJlc3BvbmRpbmcgcG9zaXRpb24uCiAgICAgICAgICoKICAgICAgICAgKiB8TmFtZSAgfERlc2MgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqIHwtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICogfC4uLmFycnxBcnJheXMgdG8gcHJvY2VzcyAgICAgICAgICAgIHwKICAgICAgICAgKiB8cmV0dXJufE5ldyBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzfAogICAgICAgICAqLwoKICAgICAgICAvKiBleGFtcGxlCiAgICAgICAgICogemlwKFsnYScsICdiJ10sIFsxLCAyXSwgW3RydWUsIGZhbHNlXSk7IC8vIC0+IFtbJ2EnLCAxLCB0cnVlXSwgWydiJywgMiwgZmFsc2VdXQogICAgICAgICAqLwoKICAgICAgICAvKiB0eXBlc2NyaXB0CiAgICAgICAgICogZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gemlwKC4uLmFycjogQXJyYXk8YW55W10+KTogQXJyYXk8YW55W10+OwogICAgICAgICAqLwoKICAgICAgICAvKiBkZXBlbmRlbmNpZXMKICAgICAgICAgKiByZXN0QXJncyB1bnppcCAKICAgICAgICAgKi8KCiAgICAgICAgZXhwb3J0cyA9IHJlc3RBcmdzKHVuemlwKTsKCiAgICAgICAgcmV0dXJuIGV4cG9ydHM7CiAgICB9KSh7fSk7CgogICAgcmV0dXJuIF87Cn0pKTs=]]></data>
	</file>
	<file>
	  <filename>/lang</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMjIEEKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjY2VzcyBEZW5pZWQuIFBsZWFzZSBjaGVjayB5b3VyIHBlcm1pc3Npb25zLic7CiRsYW5nWydhZGRfbGtwX2VudHJ5J10gPSAnQWRkIG5ldyBpdGVtJzsKJGxhbmdbJ2FsaWduX2xjJ10gPSAnQm90dG9tIENlbnRlcic7CiRsYW5nWydhbGlnbl9sbCddID0gJ0JvdHRvbSBMZWZ0JzsKJGxhbmdbJ2FsaWduX2xyJ10gPSAnQm90dG9tIFJpZ2h0JzsKJGxhbmdbJ2FsaWduX21jJ10gPSAnQ2VudGVyJzsKJGxhbmdbJ2FsaWduX21sJ10gPSAnTWlkZGxlIExlZnQnOwokbGFuZ1snYWxpZ25fbXInXSA9ICdNaWRkbGUgUmlnaHQnOwokbGFuZ1snYWxpZ25fdWMnXSA9ICdUb3AgQ2VudGVyJzsKJGxhbmdbJ2FsaWduX3VsJ10gPSAnVG9wIExlZnQnOwokbGFuZ1snYWxpZ25fdXInXSA9ICdUb3AgUmlnaHQnOwokbGFuZ1snYWxsb3dlZF91cGxvYWRfZmlsZXR5cGVzJ10gPSAnRmlsZSBFeHRlbnNpb25zIHRoYXQgbWF5IGJlIHVwbG9hZGVkJzsKJGxhbmdbJ2FwcGx5J10gPSAnQXBwbHknOwokbGFuZ1snYXJleW91c3VyZSddID0gJ0FyZSB5b3Ugc3VyZT8nOwokbGFuZ1snYXZhaWxhYmxlJ10gPSAnQXZhaWxhYmxlJzsKCiMjIEIKJGxhbmdbJ2JhY2tncm91bmRfY29sb3InXSA9ICdCYWNrZ3JvdW5kIENvbG9yJzsKCiMjIEMKJGxhbmdbJ2NhbmNlbCddID0gJ0NhbmNlbCc7CiRsYW5nWydjaGVja3N1bSddID0gJ0NoZWNrc3VtJzsKJGxhbmdbJ0NHRklMRVVQTE9BRF9CQURERVNURElSJ10gPSAnVGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBzcGVjaWZpZWQgZm9yIHVwbG9hZGVkIGZpbGVzIGRvZXMgbm90IGV4aXN0JzsKJGxhbmdbJ0NHRklMRVVQTE9BRF9CQURQRVJNUyddID0gJ0ZpbGUgcGVybWlzc2lvbnMgZG8gbm90IGFsbG93IHdyaXRpbmcgdGhlIHVwbG9hZGVkIGZpbGUgaW4gaXRzIGRlc3RpbmF0aW9uIGxvY2F0aW9uJzsKJGxhbmdbJ0NHRklMRVVQTE9BRF9GSUxFRVhJU1RTJ10gPSAnQSBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWydDR0ZJTEVVUExPQURfRklMRVNJWkUnXSA9ICdUaGUgc2l6ZSBvZiB0aGUgdXBsb2FkZWQgZmlsZSBleGNlZWRlZCB0aGUgbWF4aW11bSBhbGxvd2VkJzsKJGxhbmdbJ0NHRklMRVVQTE9BRF9GSUxFVFlQRSddID0gJ0ZpbGVzIG9mIHRoaXMgdHlwZSBjYW5ub3QgYmUgdXBsb2FkZWQnOwokbGFuZ1snQ0dGSUxFVVBMT0FEX01PVkVGQUlMRUQnXSA9ICdBdHRlbXB0aW5nIHRvIG1vdmUgdGhlIHVwbG9hZGVkIGZpbGUgdG8gaXRzIGZpbmFsIGRlc3RpbmF0aW9uIGZhaWxlZCc7CiRsYW5nWydDR0ZJTEVVUExPQURfTk9GSUxFJ10gPSAnTm8gZmlsZSB1cGxvYWRlZCBtYXRjaGluZyB0aGUgc3BlY2lmaWNhdGlvbnMnOwokbGFuZ1snQ0dGSUxFVVBMT0FEX1BSRVBST0NFU1NJTkdfRkFJTEVEJ10gPSAnUHJlcHJvY2Vzc2luZyBvZiB0aGUgdXBsb2FkZWQgZmlsZSBmYWlsZWQnOwokbGFuZ1snY291bnRyaWVzJ10gPSAnQ291bnRyaWVzJzsKCiMjIEQKJGxhbmdbJ2RlZmF1bHRfdGVtcGxhdGVzJ10gPSAnRGVmYXVsdCBUZW1wbGF0ZXMnOwokbGFuZ1snZGVsX2xrcGl0ZW0nXSA9ICdEZWxldGUgbG9va3VwIGl0ZW0nOwokbGFuZ1snZGVzY3JpcHRpb24nXSA9ICdEZXNjcmlwdGlvbic7CiRsYW5nWydkb3duJ10gPSAnRG93bic7CgojIyBFCiRsYW5nWydlZGl0J10gPSAnRWRpdCc7CiRsYW5nWydlZGl0X2xrcGl0ZW0nXSA9ICdFZGl0IGxvb2t1cCBpdGVtJzsKJGxhbmdbJ2Vycm9yJ10gPSAnRXJyb3IhJzsKJGxhbmdbJ2Vycm9yX2ltYWdlX3RyYW5zZm9ybSddID0gJ0Vycm9yIFRyYW5zZm9ybWluZyBJbWFnZSc7CiRsYW5nWydlcnJvcl9pdGVtbm90Zm91bmQnXSA9ICdUaGUgaXRlbSBzcGVjaWZpZWQgY291bGQgbm90IGJlIGZvdW5kJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdwYXJhbSddID0gJ0EgcmVxdWlyZWQgcGFyYW1ldGVyIHdhcyBtaXNzaW5nIG9yIGludmFsaWQnOwokbGFuZ1snZXJyb3JfbGtwX25hbWVyZXF1aXJlZCddID0gJ0EgbmFtZSBpcyByZXF1aXJlZCBmb3IgdGhpcyBsb29rdXAgaXRlbSc7CiRsYW5nWydlcnJvcl90ZW1wbGF0ZSddID0gJ0Vycm9yIFRlbXBsYXRlJzsKJGxhbmdbJ2Vycm9yX3RlbXBsYXRlbmFtZWJhZCddID0gJ0ludmFsaWQgdGVtcGxhdGUgbmFtZS4gIE9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIGFuZCBfIGFyZSBhbGxvd2VkJzsKJGxhbmdbJ2Vycm9yX3RlbXBsYXRlbmFtZWV4aXN0cyddID0gJ0EgVGVtcGxhdGUgYnkgdGhhdCBOYW1lIEFscmVhZHkgRXhpc3RzJzsKJGxhbmdbJ2Vycl9tb2R1bGVub3Rmb3VuZCddID0gJ0NvdWxkIG5vdCBnZXQgbW9kdWxlIGluc3RhbmNlIGZvciAlcyc7CiRsYW5nWydlcnJfdnJmeV9jMWZpbGViYWQnXSA9ICdUaGUgX2MxLmRhdCBmaWxlIGZvciB0aGUgbW9kdWxlIGJlaW5nIHRlc3RlZCBpcyBpbnZhbGlkIG9yIGNvcnJ1cHQuJzsKJGxhbmdbJ2Vycl92cmZ5X2V4dHJhZmlsZXMnXSA9ICdGaWxlcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgbW9kdWxlIGV4aXN0IGluIHRoZSBtb2R1bGUgZGlyZWN0b3J5LiAgVGhpcyBlZmZlY3RzIHNpZ25hdHVyZSBnZW5lcmF0aW9uJzsKJGxhbmdbJ2Vycl92cmZ5X2ZhaWxlZCddID0gJ01vZHVsZSBmYWlsZWQgdmFsaWRhdGlvbiB0ZXN0cy4gIEl0IGFwcGVhcnMgdGhhdCBvbmUgb3IgbW9yZSBmaWxlcyBoYXZlIGJlZW4gbW9kaWZpZWQgYWZ0ZXIgZGlzdHJpYnV0aW9uJzsKJGxhbmdbJ2Vycl92cmZ5X2ZpbGVub3Rmb3VuZCddID0gJ1Byb2JsZW0gcmVhZGluZyAlcy4gIEVpdGhlciBpdCBkb2VzIG5vdCBleGlzdCBvciB0aGVyZSBpcyBhIHBlcm1pc3Npb25zIGlzc3VlLic7CiRsYW5nWydlcnJfdnJmeV9ub2NoZWNrc3VtZGF0YSddID0gJ0Nhbm5vdCB2ZXJpZnkgaW50ZWdyaXR5IG9mICVzLiAgVGhlcmUgaXMgbm8gY2hlY2tzdW0gZGF0YSc7CiRsYW5nWydlcnJfdnJmeV9ub2ZpbGVkYXRhJ10gPSAnUHJvYmxlbSB2ZXJpZnlpbmcgbW9kdWxlLiAgVGhlcmUgaXMgbm8gZmlsZSBkYXRhIHRvIHdvcmsgd2l0aC4nOwokbGFuZ1snZXJyX3ZyZnlfcm9vdHBhdGgnXSA9ICdQcm9ibGVtIHJlYWRpbmcgJXMuICBJdCBkb2VzIG5vdCBhcHBlYXIgdG8gZXhpc3Qgd2l0aGluIHRoZSBtb2R1bGUgZGlyZWN0b3J5LCBidXQgZWxzZXdoZXJlLic7CiRsYW5nWydlcnJfdnJmeV9kaXJ3cml0YWJsZSddID0gJ1RoZSBkaXJlY3RvcnkgYXQgJXMgaXMgbm90IHdyaXRhYmxlLiAgQ2Fubm90IGNyZWF0ZSBjaGVja3N1bSBmaWxlcyc7CiRsYW5nWydlcnJfdnJmeV9maWxld3JpdGFibGUnXSA9ICdUaGUgZmlsZSBhdCAlcyBpcyBub3Qgd3JpdGFibGUuICBDYW5ub3QgY3JlYXRlIGNoZWNrc3VtIGZpbGVzJzsKCiMjIEYKJGxhbmdbJ2ZvbnQnXSA9ICdGb250JzsKJGxhbmdbJ2ZvbnRfc2l6ZSddID0gJ0ZvbnQgU2l6ZSc7CiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdDTVNNUyBFeHRlbnNpb25zJzsKCiMjIEcKJGxhbmdbJ2dlbmVyYWxfc2V0dGluZ3MnXSA9ICdHZW5lcmFsIFNldHRpbmdzJzsKJGxhbmdbJ2dlbmVyYXRlJ10gPSAnR2VuZXJhdGUnOwokbGFuZ1snZ2VuZXJhdGVfbW9kdWxlX2NoZWNrc3VtcyddID0gJ0dlbmVyYXRlIE1vZHVsZSBDaGVja3N1bXMnOwokbGFuZ1snZ28nXSA9ICdHbyc7CiRsYW5nWydncmFwaGljc19zZXR0aW5ncyddID0gJ0dyYXBoaWNzIFNldHRpbmdzJzsKJGxhbmdbJ2dyYXBoaWNfd2F0ZXJtYXJrcyddID0gJ0dyYXBoaWNhbCBXYXRlcm1hcmtzJzsKJGxhbmdbJ2dyb3VwJ10gPSAnR3JvdXAnOwoKIyMgSAokbGFuZ1snaGFzX2NoZWNrc3VtX2RhdGEnXSA9ICdIYXMgQ2hlY2tzdW1zJzsKJGxhbmdbJ2hlbHAnXSA9ICdIZWxwJzsKJGxhbmdbJ2hkcl91cGxvYWRpbmcnXSA9ICdVcGxvYWRpbmcnOwoKIyMgSQokbGFuZ1snaWQnXSA9ICdJZCc7CiRsYW5nWydpbWFnZSddID0gJ0ltYWdlJzsKJGxhbmdbJ2ltYWdlX2V4dGVuc2lvbnMnXSA9ICdJbWFnZSBGaWxlIEV4dGVuc2lvbnMnOwokbGFuZ1snaW5mb19hbGxvd2VkX3VwbG9hZF9maWxldHlwZXMnXSA9ICdTcGVjaWZ5IGEgY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgZmlsZSBleHRlbnNpb25zIHRoYXQgbWF5IGJlIHVwbG9hZGVkLiAgPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBNb2R1bGVzIHRoYXQgdXNlIHRoZSBDTVNNU0V4dCB1cGxvYWQgY2FwYWJpbGl0aWVzIG1heSBvdmVycmlkZSB0aGVzZSBzZXR0aW5ncyc7CiRsYW5nWydpbmZvX2NhY2hlX21vZHVsZWNhbGxzJ10gPSAnRVhQRVJJTUVOVEFMOiBVbmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIHRoZSBvdXRwdXQgb2YgY2FsbHMgdG8gbW9kdWxlcyBjYW4gYmUgY2FjaGVkLiAgRW5hYmxpbmcgdGhpcyBjYW4gaGF2ZSBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGJvb3N0IHRvIHlvdXIgc2l0ZS4gIEhvd2V2ZXIgbWF5IGNhdXNlIGRpZmljdWx0aWVzIHdpdGggc29tZSBjYWxscy4gICBZb3UgY2FuIGRpc2FibGUgdGhpcyBvcHRpb24gYnkgYWRkaW5nIHRoZSBub2NhY2hlPTEgcGFyYW1ldGVyIHRvIHlvdXIgbW9kdWxlIGNhbGwnOwokbGFuZ1snaW5mb19jb3VudHJpZXNfdGFiJ10gPSAnRW50ZXIgb25lIGxpbmUgcGVyIGNvdW50cnksIHdpdGggdGhlIGNvdW50cnkgY29kZSBhbmQgY291bnRyeSBuYW1lIHNlcGFyYXRlZCBieSA9IDxlbT4oaS5lOiBVUz1Vbml0ZWQgU3RhdGVzKTwvZW0+LiAgQmxhbmsgbGluZXMsIGFuZCBleHRyYSB3aGl0ZXNwYWNlIHdpbGwgYmUgaWdub3JlZC4nOwokbGFuZ1snaW5mb19lcnJvcl90ZW1wbGF0ZSddID0gJ1RoaXMgdGVtcGxhdGUgaXMgdXNlZCB0byBmb3JtYXQgZXJyb3JzIHRoYXQgbWF5IGJlIHNob3duIG9uIHRoZSBwdWJsaWMgZmFjaW5nIHdlYnNpdGUgYnkgbW9kdWxlcyBkZXJpdmVkIENNU01TRXh0IGFuZCB1c2luZyB0aGUgPGNvZGU+RGlzcGxheUVycm9yTWVzc2FnZSgpPC9jb2RlPiBhbmQgb3RoZXIgc2ltaWxhciBtZXRob2RzLic7CiRsYW5nWydpbmZvX2dyYXBoaWNzc2V0dGluZ3MnXSA9ICdUaGlzIHRhYiBhbGxvd3MgY29uZmlndXJpbmcgdGhlIGRlZmF1bHQgYmVoYXZvdXIgb2YgbW9kdWxlcyB0aGF0IHVzZSBDTVNNU0V4dCBmdW5jdGlvbmFsaXR5IGZvciB1cGxvYWRpbmcgaW1hZ2VzLiAgIEZ1bmN0aW9uYWxpdHkgaW5jbHVkZXMgYXV0b21hdGljIGlucHV0IGltYWdlIHJlc2l6aW5nLCB3YXRlcm1hcmtpbmcsIGFuZCB0aHVtYm5haWxpbmcnOwokbGFuZ1snaW5mb19pbWFnZWV4dGVuc2lvbnMnXSA9ICdTcGVjaWZ5IGEgY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgZmlsZSBleHRlbnNpb25zIHRoYXQgZGVub3RlIGltYWdlIGZpbGVzIHRoYXQgYXJlIHN1aXRhYmxlIGZvciByZXNpemluZywgd2F0ZXJtYXJraW5nLCBhbmQgdGh1bWJuYWlsaW5nLiA8c3Ryb25nPk5vdGU6PC9zdHJvbmc+IE1vZHVsZXMgdGhhdCB1c2UgdGhlIENNU01TRXh0IHVwbG9hZCBjYXBhYmlsaXRpZXMgbWF5IG92ZXJyaWRlIHRoZXNlIHNldHRpbmdzLic7CiRsYW5nWydpbmZvX21lbW9yeV9saW1pdCddID0gJ1NvbWUgZnVuY3Rpb25hbGl0eSBpbiBzb21lIG1vZHVsZXMgYXR0ZW1wdHMgdG8gdGVzdCBpZiB0aGVyZSBpcyBlbm91Z2ggYXZhaWxhYmxlIG1lbW9yeSB0byBwcm9jZWVkLiAgSG93ZXZlciwgc29tZSBob3N0cyBkb250IGFsbG93IHVzIHRvIHJlYWQgdGhpcyBpbmZvcm1hdGlvbiByZWxpYWJseS4gIFlvdSBtYXkgZW50ZXIgYW4gYXNzdW1lZCBtZW1vcnkgbGltaXQgPGVtPihpbiBNQik8L2VtPiB0byBhc3Npc3QgdGhpcyBmdW5jdGlvbmFsaXR5LiAgTGVhdmluZyB0aGUgZmllbGQgZW1wdHkgd2lsbCBhdHRlbXB0IHRvIHJlbHkgb24gdGhlIHJlYWRpbmcgdGhhdCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzeXN0ZW0uJzsKJGxhbmdbJ2luZm9fc3RhdGVzX3RhYiddID0gJ0VudGVyIG9uZSBsaW5lIHBlciBzdGF0ZS9wcm92aW5jZSwgd2l0aCB0aGUgcHJvdmluY2UgY29kZSBhbmQgbmFtZSBzZXBhcmF0ZWQgYnkgPSA8ZW0+KGkuZTogQUI9QWxiZXJ0YSk8L2VtPi4gIEJsYW5rIGxpbmVzLCBhbmQgZXh0cmEgd2hpdGVzcGFjZSB3aWxsIGJlIGlnbm9yZWQuJzsKJGxhbmdbJ2luZm9fc3lzZGVmYXVsdF90ZW1wbGF0ZSddID0gJ1N5c3RlbSBkZWZhdWx0IHRlbXBsYXRlcyBhcmUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgbmV3IHRlbXBsYXRlIG9mIGEgY2VydGFpbiB0eXBlLiAgQ2hhbmdpbmcgdGhlIHZhbHVlcyBoZXJlIHdpbGwgb25seSBoYXZlIGVmZmVjdCB3aGVuIHlvdSBjcmVhdGUgYSBuZXcgdGVtcGxhdGUgaW4gYW5vdGhlciB0YWInOwokbGFuZ1snaW5mb19zeXNkZWZhdWx0X3RlbXBsYXRlcyddID0gJ1RoaXMgdGVtcGxhdGUgZGVmaW5lcyB0aGUgZGVmYXVsdCBjb250ZW50IG9mIHRoZSB0ZW1wbGF0ZSB3aGVuIHlvdSBjcmVhdGUgYSBuZXcgdGVtcGxhdGUgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuICBBZGp1c3RpbmcgdGhpcyBjb250ZW50IHdpbGwgaGF2ZSBubyBpbW1lZGlhdGUgZWZmZWN0IG9uIHlvdXIgd2Vic2l0ZSc7CiRsYW5nWydpbmZvX3VwbG9hZGluZyddID0gJ1RoaXMgc2VjdGlvbiBkZWZpbmVzIGRlZmF1bHQgc2V0dGluZ3MgZm9yIG1vZHVsZXMgdGhhdCB1c2UgdGhlIENNU01TRXh0IGZpbGV1cGxvYWQgZnVuY3Rpb25hbGl0eS4gIE1vZHVsZXMgbWF5IGlnbm9yZSBvciBvdmVycmlkZSB0aGVzZS4nOwokbGFuZ1snaW5mb193YXRlcm1hcmtzJ10gPSAnV2F0ZXJtYXJraW5nIGlzIGEgbWV0aG9kIHRvIHByZXZlbnQgaW1hZ2UgdGhlZnQuICBFaXRoZXIgYW4gaW1hZ2UsIG9yIHNvbWUgc3BlY2lmaWVkIHRleHQgaXMgb3ZlcmxheWVkIG9uIHRvcCBvZiB0aGUgdXBsb2FkZWQgaW1hZ2UuICBJZiBhIGdyYXBoaWNhbCB3YXRlcm1hcmsgaXMgbm90IHNwZWNpZmllZCwgb3IgY2Fubm90IGJlIGZvdW5kLCBhbmQgdGhlIHRleHQgc2V0dGluZ3MgYXJlIHNwZWNpZmllZCwgdGhleSB3aWxsIGJlIHVzZWQgZm9yIHdhdGVybWFya2luZyBvZiBpbWFnZXMnOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWxlIHZlcnNpb24gJXMgaW5zdGFsbGVkLic7CiRsYW5nWydpbmZvX3ZyZnlfZmFpbGVkJ10gPSAnV2UgY291bGQgbm90IHJlbGlhYmx5IHZlcmlmeSB0aGUgaW50ZWdyaXR5IG9mIHRoaXMgbW9kdWxlLiAgWW91IG1heSBiZSBpbmVsbGlnYmxlIGZvciBzdXBwb3J0IGZvciB0aGlzIG1vZHVsZS4nOwokbGFuZ1snaW5mb192cmZ5X25vZGF0YSddID0gJ1RoZXJlIGlzIG5vIGNoZWNrc3VtIGRhdGEgZm9yIHRoaXMgbW9kdWxlIGF0IHRoaXMgdGltZS4gIFBsZWFzZSBlbnN1cmUgdGhhdCB5b3UgYXJlIHJ1bm5pbmcgdGhlIGxhdGVzdCBhdmFpbGFibGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSc7CiRsYW5nWydpbmZvX3ZyZnlfc2lnbmF0dXJlJ10gPSAnVGhpcyBtb2R1bGUgd2FzIHN1Y2Nlc3NmdWxseSB2ZXJpZmllZC4gIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlLCBhbG9uZyB3aXRoIHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIG90aGVyIHBlcnRpbmVudCBkZXRhaWxzIHdoZW4gYXNraW5nIGZvciBzdXBwb3J0Lic7CgojIyBMCgojIyBNCiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ1RoaXMgbW9kdWxlIGlzIGEgbGlicmFyeSBvZiBwaHAgY2xhc3NlcyB1c2VkIHRvIGJ1aWxkIGFkdmFuY2VkIGZvcm1zJzsKJGxhbmdbJ21vZHVsZV9zaWduYXR1cmUnXSA9ICdNb2R1bGUgaW50ZWdyaXR5IHZhbGlkYXRlZC48YnIvPlNpZ25hdHVyZSc7CiRsYW5nWydtc2dfdGVtcGxhdGVfcmVzZXQnXSA9ICdUZW1wbGF0ZSBSZXNldCc7CiRsYW5nWydtc2dfdGVtcGxhdGVzYXZlZCddID0gJ1RlbXBsYXRlIHNhdmVkJzsKJGxhbmdbJ21zZ192cmZ5X2NoZWNrc3VtZ2VuZXJhdGVkJ10gPSAnQ2hlY2tzdW0gaW5mb3JtYXRpb24gZ2VuZXJhdGVkIGZvciAlcyc7CiRsYW5nWydtc2dfdnJmeV9pbnRlZ3JpdHl2ZXJpZmllZCddID0gJ01vZHVsZSBwYXNzZXMgY2hlY2tzdW0gdGVzdHMnOwoKIyMgTgokbGFuZ1snbmFtZSddID0gJ05hbWUnOwokbGFuZ1snbm8nXSA9ICdObyc7CiRsYW5nWydub25lJ10gPSAnTm9uZSc7CgojIyBQCiRsYW5nWydwYXJhbV9ub2NhY2hlJ10gPSAnVXNlZCBpZiBjYWNoaW5nIG9mIG1vZHVsZSBjYWxscyBpcyBlbmFibGVkLCB0aGlzIHBhcmFtZXRlciB3aWxsIGRpc2FibGUgY2FjaGluZyBvZiB0aGlzIG1vZHVsZSBjYWxsLiAgVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZnVsICc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1RoaXMgbW9kdWxlIGlzIHJlYWR5IHRvIHVzZS4gIENvZGUgYXdheSEnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ1NlZSB5b3UgYWdhaW4gc29tZSBkYXknOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnTW9kdWxlIHByZWZlcmVuY2VzIHVwZGF0ZWQuJzsKJGxhbmdbJ3ByaW9yaXR5X2NvdW50cmllcyddID0gJ1ByaW9yaXR5IENvdW50cmllcyc7CiRsYW5nWydwcm9tcHRfYWxsb3dlZHRvdXBsb2FkJ10gPSAnVXBsb2FkYWJsZSBGaWxlIEV4dGVuc2lvbnMnOwokbGFuZ1sncHJvbXB0X2FsbG93X3Jlc2l6aW5nJ10gPSAnUmVzaXplIHVwbG9hZGVkIGltYWdlcz8nOwokbGFuZ1sncHJvbXB0X2FsbG93X3RodW1ibmFpbGluZyddID0gJ0NyZWF0ZSB0aHVtYm5haWxzIGZyb20gdXBsb2FkZWQgaW1hZ2VzPyc7CiRsYW5nWydwcm9tcHRfYWxsb3dfd2F0ZXJtYXJraW5nJ10gPSAnV2F0ZXJtYXJrIHVwbG9hZGVkIGltYWdlcz8nOwokbGFuZ1sncHJvbXB0X2RlZmF1bHQnXSA9ICdEZWZhdWx0JzsKJGxhbmdbJ3Byb21wdF9kZWxldGV0ZW1wbGF0ZSddID0gJ0RlbGV0ZSBUZW1wbGF0ZSc7CiRsYW5nWydwcm9tcHRfZGVsZXRlX29yaWdfaW1hZ2UnXSA9ICdSZW1vdmUgdGhlIG9yaWdpbmFsIGltYWdlIGFmdGVyIGluaXRpYWwgcmVzaXppbmcgYW5kIHdhdGVybWFya2luZz8nOwokbGFuZ1sncHJvbXB0X2VkaXR0ZW1wbGF0ZSddID0gJ0VkaXQgVGVtcGxhdGUnOwokbGFuZ1sncHJvbXB0X21lbW9yeV9saW1pdCddID0gJ0Fzc3VtZWQgTWVtb3J5IExpbWl0JzsKJGxhbmdbJ3Byb21wdF9uYW1lJ10gPSAnVGVtcGxhdGUgTmFtZSc7CiRsYW5nWydwcm9tcHRfbmV3dGVtcGxhdGUnXSA9ICdOZXcgVGVtcGxhdGUgZnJvbSBQcm90b3R5cGUnOwokbGFuZ1sncHJvbXB0X3RlbXBsYXRlJ10gPSAnVGVtcGxhdGUgVGV4dCc7CiRsYW5nWydwcm9tcHRfdGVtcGxhdGVuYW1lJ10gPSAnVGVtcGxhdGUgTmFtZSc7CgojIyBSCiRsYW5nWydyZXNldCddID0gJ1Jlc2V0JzsKJGxhbmdbJ3Jlc2V0dG9mYWN0b3J5J10gPSAnUmVzZXQgdG8gZmFjdG9yeSBkZWZhdWx0cyc7CiRsYW5nWydyZXNpemVfaW1hZ2VfdG8nXSA9ICdNYXhpbXVtIGRpbWVuc2lvbiBvZiB0aGUgcmVzaXplZCBpbWFnZSc7CiRsYW5nWydyZXNpemluZyddID0gJ0ltYWdlIFJlc2l6aW5nJzsKJGxhbmdbJ3JldHVybiddID0gJ1JldHVybic7CiRsYW5nWydyZ2JfY29sb3JzJ10gPSAnI0YwRjhGRi1BbGljZUJsdWUsCiNGQUVCRDctQW50aXF1ZVdoaXRlLAojMDBGRkZGLUFxdWEsCiM3RkZGRDQtQXF1YW1hcmluZSwKI0YwRkZGRi1BenVyZSwKI0Y1RjVEQy1CZWlnZSwKI0ZGRTRDNC1CaXNxdWUsCiNGRkVCQ0QtQmxhbmNoZWRBbG1vbmQsCiMwMDAwMDAtQmxhY2ssCiMwMDAwRkYtQmx1ZSwKIzhBMkJFMi1CbHVlVmlvbGV0LAojQTUyQTJBLUJyb3duLAojREVCODg3LUJ1cmx5V29vZCwKIzVGOUVBMC1DYWRldEJsdWUsCiM3RkZGMDAtQ2hhcnRyZXVzZSwKI0QyNjkxRS1DaG9jb2xhdGUsCiNGRjdGNTAtQ29yYWwsCiM2NDk1RUQtQ29ybmZsb3dlckJsdWUsCiNGRkY4REMtQ29ybnNpbGssCiNEQzE0M0MtQ3JpbXNvbiwKIzAwRkZGRi1DeWFuLAojMDAwMDhCLURhcmtCbHVlLAojMDA4QjhCLURhcmtDeWFuLAojQjg4NjBCLURhcmtHb2xkZW5Sb2QsCiNBOUE5QTktRGFya0dyYXksCiMwMDY0MDAtRGFya0dyZWVuLAojQkRCNzZCLURhcmtLaGFraSwKIzhCMDA4Qi1EYXJrTWFnZW50YSwKIzU1NkIyRi1EYXJrT2xpdmVHcmVlbiwKI0ZGOEMwMC1EYXJrb3JhbmdlLAojOTkzMkNDLURhcmtPcmNoaWQsCiM4QjAwMDAtRGFya1JlZCwKI0U5OTY3QS1EYXJrU2FsbW9uLAojOEZCQzhGLURhcmtTZWFHcmVlbiwKIzQ4M0Q4Qi1EYXJrU2xhdGVCbHVlLAojMkY0RjRGLURhcmtTbGF0ZUdyYXksCiMwMENFRDEtRGFya1R1cnF1b2lzZSwKIzk0MDBEMy1EYXJrVmlvbGV0LAojRkYxNDkzLURlZXBQaW5rLAojMDBCRkZGLURlZXBTa3lCbHVlLAojNjk2OTY5LURpbUdyYXksCiMxRTkwRkYtRG9kZ2VyQmx1ZSwKI0QxOTI3NS1GZWxkc3BhciwKI0IyMjIyMi1GaXJlQnJpY2ssCiNGRkZBRjAtRmxvcmFsV2hpdGUsCiMyMjhCMjItRm9yZXN0R3JlZW4sCiNGRjAwRkYtRnVjaHNpYSwKI0RDRENEQy1HYWluc2Jvcm8sCiNGOEY4RkYtR2hvc3RXaGl0ZSwKI0ZGRDcwMC1Hb2xkLAojREFBNTIwLUdvbGRlblJvZCwKIzgwODA4MC1HcmF5LAojMDA4MDAwLUdyZWVuLAojQURGRjJGLUdyZWVuWWVsbG93LAojRjBGRkYwLUhvbmV5RGV3LAojRkY2OUI0LUhvdFBpbmssCiNDRDVDNUMtSW5kaWFuUmVkLAojNEIwMDgyLUluZGlnbywKI0ZGRkZGMC1Jdm9yeSwKI0YwRTY4Qy1LaGFraSwKI0U2RTZGQS1MYXZlbmRlciwKI0ZGRjBGNS1MYXZlbmRlckJsdXNoLAojN0NGQzAwLUxhd25HcmVlbiwKI0ZGRkFDRC1MZW1vbkNoaWZmb24sCiNBREQ4RTYtTGlnaHRCbHVlLAojRjA4MDgwLUxpZ2h0Q29yYWwsCiNFMEZGRkYtTGlnaHRDeWFuLAojRkFGQUQyLUxpZ2h0R29sZGVuUm9kWWVsbG93LAojRDNEM0QzLUxpZ2h0R3JleSwKIzkwRUU5MC1MaWdodEdyZWVuLAojRkZCNkMxLUxpZ2h0UGluaywKI0ZGQTA3QS1MaWdodFNhbG1vbiwKIzIwQjJBQS1MaWdodFNlYUdyZWVuLAojODdDRUZBLUxpZ2h0U2t5Qmx1ZSwKIzg0NzBGRi1MaWdodFNsYXRlQmx1ZSwKIzc3ODg5OS1MaWdodFNsYXRlR3JheSwKI0IwQzRERS1MaWdodFN0ZWVsQmx1ZSwKI0ZGRkZFMC1MaWdodFllbGxvdywKIzAwRkYwMC1MaW1lLAojMzJDRDMyLUxpbWVHcmVlbiwKI0ZBRjBFNi1MaW5lbiwKI0ZGMDBGRi1NYWdlbnRhLAojODAwMDAwLU1hcm9vbiwKIzY2Q0RBQS1NZWRpdW1BcXVhTWFyaW5lLAojMDAwMENELU1lZGl1bUJsdWUsCiNCQTU1RDMtTWVkaXVtT3JjaGlkLAojOTM3MEQ4LU1lZGl1bVB1cnBsZSwKIzNDQjM3MS1NZWRpdW1TZWFHcmVlbiwKIzdCNjhFRS1NZWRpdW1TbGF0ZUJsdWUsCiMwMEZBOUEtTWVkaXVtU3ByaW5nR3JlZW4sCiM0OEQxQ0MtTWVkaXVtVHVycXVvaXNlLAojQzcxNTg1LU1lZGl1bVZpb2xldFJlZCwKIzE5MTk3MC1NaWRuaWdodEJsdWUsCiNGNUZGRkEtTWludENyZWFtLAojRkZFNEUxLU1pc3R5Um9zZSwKI0ZGRTRCNS1Nb2NjYXNpbiwKI0ZGREVBRC1OYXZham9XaGl0ZSwKIzAwMDA4MC1OYXZ5LAojRkRGNUU2LU9sZExhY2UsCiM4MDgwMDAtT2xpdmUsCiM2QjhFMjMtT2xpdmVEcmFiLAojRkZBNTAwLU9yYW5nZSwKI0ZGNDUwMC1PcmFuZ2VSZWQsCiNEQTcwRDYtT3JjaGlkLAojRUVFOEFBLVBhbGVHb2xkZW5Sb2QsCiM5OEZCOTgtUGFsZUdyZWVuLAojQUZFRUVFLVBhbGVUdXJxdW9pc2UsCiNEODcwOTMtUGFsZVZpb2xldFJlZCwKI0ZGRUZENS1QYXBheWFXaGlwLAojRkZEQUI5LVBlYWNoUHVmZiwKI0NEODUzRi1QZXJ1LAojRkZDMENCLVBpbmssCiNEREEwREQtUGx1bSwKI0IwRTBFNi1Qb3dkZXJCbHVlLAojODAwMDgwLVB1cnBsZSwKI0ZGMDAwMC1SZWQsCiNCQzhGOEYtUm9zeUJyb3duLAojNDE2OUUxLVJveWFsQmx1ZSwKIzhCNDUxMy1TYWRkbGVCcm93biwKI0ZBODA3Mi1TYWxtb24sCiNGNEE0NjAtU2FuZHlCcm93biwKIzJFOEI1Ny1TZWFHcmVlbiwKI0ZGRjVFRS1TZWFTaGVsbCwKI0EwNTIyRC1TaWVubmEsCiNDMEMwQzAtU2lsdmVyLAojODdDRUVCLVNreUJsdWUsCiM2QTVBQ0QtU2xhdGVCbHVlLAojNzA4MDkwLVNsYXRlR3JheSwKI0ZGRkFGQS1Tbm93LAojMDBGRjdGLVNwcmluZ0dyZWVuLAojNDY4MkI0LVN0ZWVsQmx1ZSwKI0QyQjQ4Qy1UYW4sCiMwMDgwODAtVGVhbCwKI0Q4QkZEOC1UaGlzdGxlLAojRkY2MzQ3LVRvbWF0bywKIzQwRTBEMC1UdXJxdW9pc2UsCiNFRTgyRUUtVmlvbGV0LAojRDAyMDkwLVZpb2xldFJlZCwKI0Y1REVCMy1XaGVhdCwKI0ZGRkZGRi1XaGl0ZSwKI0Y1RjVGNS1XaGl0ZVNtb2tlLAojRkZGRjAwLVllbGxvdywKIzlBQ0QzMi1ZZWxsb3dHcmVlbic7CgojIyBTCiRsYW5nWydzZWxlY3RlZCddID0gJ1NlbGVjdGVkJzsKJGxhbmdbJ3NlbGVjdF9vbmUnXSA9ICdTZWxlY3QgT25lJzsKJGxhbmdbJ3NvcnRhYmxlbGlzdF9kcmFnZHJvcCddID0gJ0RyYWcgYW5kIGRyb3AgaXRlbXMgYmV0d2VlbiB0aGUgdHdvIGxpc3RzLiAgRHJhZyB0aGUgaXRlbXMgaW4gdGhlIHNlbGVjdGVkIGxpc3QgdG8gY2hhbmdlIHRoZWlyIG9yZGVyLic7CiRsYW5nWydzb3J0YWJsZWxpc3RfbWFzdGVybGlzdCddID0gJ1RoaXMgaXMgdGhlIGxpc3Qgb2YgaXRlbXMgdGhhdCBhcmUgYXZhaWxhYmxlLiAgU2VsZWN0IGl0ZW1zIGJ5IGRyYWdnaW5nIHRoZW0gdG8gdGhlIHRvIHRoZSBvdGhlciBsaXN0Lic7CiRsYW5nWydzb3J0YWJsZWxpc3Rfc2VsZWN0bGlzdCddID0gJ1RoaXMgaXMgdGhlIGxpc3Qgb2YgaXRlbXMgdGhhdCBhcmUgc2VsZWN0ZWQuICBZb3UgY2FuIGRlbGV0ZSBpdGVtcyBieSBkcmFnZ2luZyB0aGVtIHRvIHRoZSBvdGhlciBsaXN0LiAgRHJhZyB0aGUgaXRlbXMgdG8gY2hhbmdlIHRoZWlyIG9yZGVyLic7CiRsYW5nWydzb3J0YWJsZWxpc3RfdGVtcGxhdGVzJ10gPSAnU29ydGFibGUgTGlzdCBBcmVhIFRlbXBsYXRlcyc7CiRsYW5nWydzdGF0ZXMnXSA9ICdTdGF0ZXMnOwokbGFuZ1snc3RhdF92cmZ5X25vZGF0YSddID0gJ1RoZXJlIGlzIG5vIGNoZWNrc3VtIGRhdGEgZm9yIHRoaXMgbW9kdWxlJzsKJGxhbmdbJ3N0YXRfdnJmeV9mYWlsZWQnXSA9ICdUaGlzIG1vZHVsZSBmYWlsZWQgdmVyaWZpY2F0aW9uIGNoZWNrcyc7CiRsYW5nWydzdGF0X3ZyZnlfcGFzc2VkJ10gPSAnVGhpcyBtb2R1bGUgcGFzc2VkIHZlcmlmaWNhdGlvbiBjaGVja3MnOwokbGFuZ1snc3VibWl0J10gPSAnU3VibWl0JzsKJGxhbmdbJ3N5c2RmbHRfc29ydGFibGVsaXN0X3RlbXBsYXRlJ10gPSAnU3lzdGVtIGRlZmF1bHQgc29ydGFibGUgbGlzdCB0ZW1wbGF0ZSc7CgojIyBUCiRsYW5nWyd0ZW1wbGF0ZSddID0gJ1RlbXBsYXRlJzsKJGxhbmdbJ3RleHRfYW5nbGUnXSA9ICdUZXh0IEFuZ2xlJzsKJGxhbmdbJ3RleHRfY29sb3InXSA9ICdUZXh0IENvbG9yJzsKJGxhbmdbJ3RleHRfd2F0ZXJtYXJrcyddID0gJ1RleHQgV2F0ZXJtYXJrcyc7CiRsYW5nWyd0aHVtYm5haWxpbmcnXSA9ICdUaHVtYm5haWxpbmcnOwokbGFuZ1sndGh1bWJuYWlsX3NpemUnXSA9ICdTaXplIG9mIHRodW1ibmFpbHMnOwokbGFuZ1sndGl0bGVfdnJmeV9jaGVja3N1bSddID0gJ1RoaXMgaXMgdGhlIGNhbGN1bGF0ZWQgY2hlY2tzdW0gb2YgdGhlIG1vZHVsZSBkaXJlY3RvcnkuJzsKJGxhbmdbJ3RyYW5zbHVjZW5jeSddID0gJ1RyYW5zbHVjZW5jeSc7CgojIyBVCiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ01vZHVsZSBVbmluc3RhbGxlZC4nOwokbGFuZ1sndXAnXSA9ICdVcCc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsZSB1cGdyYWRlZCB0byB2ZXJzaW9uICVzLic7CiRsYW5nWyd1c2VfdHJhbnNwYXJlbmN5J10gPSAnVXNlIFRyYW5zcGFyZW5jeSc7CgojIyBWCiRsYW5nWyd2ZXJpZnlfbW9kdWxlX2ludGVncml0eSddID0gJ1ZlcmlmeSBtb2R1bGUgaW50ZWdyaXR5JzsKJGxhbmdbJ3ZpZXdfYXBpX2RvY3MnXSA9ICdWaWV3IEFQSSBEb2N1bWVudGF0aW9uJzsKCiMjIFcKJGxhbmdbJ3dhdGVybWFya2Vycm9yXzEwMDAnXSA9ICdXYXRlcm1hcmtpbmcgaXMgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQnOwokbGFuZ1snd2F0ZXJtYXJrZXJyb3JfMTAwMSddID0gJ0JhZCBvciBjb3JydXB0IGZpbGUgc3BlY2lmaWVkIGZvciB3YXRlcm1hcmtpbmcnOwokbGFuZ1snd2F0ZXJtYXJrZXJyb3JfMTAwMiddID0gJ1Vuc3VwcG9ydGVkIEZpbGUgVHlwZSc7CiRsYW5nWyd3YXRlcm1hcmtlcnJvcl8xMDAzJ10gPSAnTm8gZmlsZSBzcGVjaWZpZWQgZm9yIHdhdGVybWFya2luZyc7CiRsYW5nWyd3YXRlcm1hcmtlcnJvcl8xMDA0J10gPSAnUHJvYmxlbSBjcmVhdGluZyB3YXRlcm1hcmsgaW1hZ2UnOwokbGFuZ1snd2F0ZXJtYXJrZXJyb3JfMTAwNSddID0gJ1Byb2JsZW0gbG9hZGluZyBpbWFnZSBmb3Igd2F0ZXJtYXJraW5nJzsKJGxhbmdbJ3dhdGVybWFya2Vycm9yXzEwMDYnXSA9ICdPdGhlciB3YXRlcm1hcmsgZXJyb3InOwokbGFuZ1snd2F0ZXJtYXJraW5nJ10gPSAnV2F0ZXJtYXJraW5nJzsKJGxhbmdbJ3dhdGVybWFya19hbGlnbm1lbnQnXSA9ICdBbGlnbiBhbGwgd2F0ZXJtYXJrcyBpbiB0aGlzIHJlbGF0aXZlIHBvc2l0aW9uJzsKJGxhbmdbJ3dhdGVybWFya190ZXh0J10gPSAnV2F0ZXJtYXJrIFRleHQnOwokbGFuZ1snd2hhdHN0aGlzJ10gPSAnV2hhdCBpcyB0aGlzPyc7CgojIyBZCiRsYW5nWyd5ZXMnXSA9ICdZZXMnOwoKIyMjIyMjIyMjIyMjIyMjIwojIEV4Y2VwdGlvbnMgRXJyb3JzIGxpc3QKIyBOb3RlOiBrZWVwIHBsYWNlaG9sZGVycyBpbiB0aGUgc2FtZSBudW1iZXIgYXMgeW91IGZpbmQgdGhlbSBpbiBlYWNoIGxpbmUgd2hlbiB0cmFuc2xhdGluZwojIyMjIyMjIyMjIyMjIyMjCiRsYW5nWycwMDAwMDAnXSA9ICclczogVW5rbm93biBlcnJvciEnOwokbGFuZ1snMDAwMDAxJ10gPSAnJXM6ICVzJzsKJGxhbmdbJzAwMDAxMCddID0gJyVzOiBBdHRlbXB0IHRvIHdyaXRlIHRvIGNvbmZpZ3VyYXRpb247IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFyZSBSRUFEIE9OTFkhJzsKJGxhbmdbJzAwMDEwMCddID0gJyVzOiBGYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcyEnOwokbGFuZ1snMDAwMTAxJ10gPSAnJXM6IEZhaWxlZCB0byBvcGVuIG9yIHJlYWQgZGlyZWN0b3J5ICVzISc7CiRsYW5nWycwMDAxMDInXSA9ICclczogRmFpbGVkIHRvIGNyZWF0ZSBmaWxlICVzISc7CiRsYW5nWycwMDAxMDMnXSA9ICclczogRmFpbGVkIHRvIGNvcHkgZmlsZSAlcyEnOwokbGFuZ1snMDAwMTA0J10gPSAnJXM6IEZhaWxlZCB0byBkZWxldGUgZmlsZSAlcyEnOwokbGFuZ1snMDAwMTA1J10gPSAnJXM6IEZhaWxlZCB0byBvcGVuIGZpbGUgJXMhJzsKJGxhbmdbJzAwMDEwNiddID0gJyVzOiBGYWlsZWQgdG8gcmVhZCBmaWxlICVzISc7CiRsYW5nWycwMDAxMDcnXSA9ICclczogRmFpbGVkIHRvIHdyaXRlIGZpbGUgJXMhJzsKJGxhbmdbJzAwMDIwMCddID0gIiVzOiBJbnZhbGlkIGRpcmVjdG9yeSAlcyEiOwoKCgoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/.backup</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/.backup/jsmin.php_bk</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQovKioKICoganNtaW4ucGhwIC0gUEhQIGltcGxlbWVudGF0aW9uIG9mIERvdWdsYXMgQ3JvY2tmb3JkJ3MgSlNNaW4uCiAqCiAqIFRoaXMgaXMgcHJldHR5IG11Y2ggYSBkaXJlY3QgcG9ydCBvZiBqc21pbi5jIHRvIFBIUCB3aXRoIGp1c3QgYSBmZXcKICogUEhQLXNwZWNpZmljIHBlcmZvcm1hbmNlIHR3ZWFrcy4gQWxzbywgd2hlcmVhcyBqc21pbi5jIHJlYWRzIGZyb20gc3RkaW4gYW5kCiAqIG91dHB1dHMgdG8gc3Rkb3V0LCB0aGlzIGxpYnJhcnkgYWNjZXB0cyBhIHN0cmluZyBhcyBpbnB1dCBhbmQgcmV0dXJucyBhbm90aGVyCiAqIHN0cmluZyBhcyBvdXRwdXQuCiAqCiAqIFBIUCA1IG9yIGhpZ2hlciBpcyByZXF1aXJlZC4KICoKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UgdGhpcyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IHVuZGVyIHRoZQogKiBzYW1lIHRlcm1zIGFzIGpzbWluLmMsIHdoaWNoIGhhcyB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CiAqCiAqIC0tCiAqIENvcHlyaWdodCAoYykgMjAwMiBEb3VnbGFzIENyb2NrZm9yZCAgKHd3dy5jcm9ja2ZvcmQuY29tKQogKgogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCiAqIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluCiAqIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8KICogdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKICogb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvCiAqIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKICoKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAqCiAqIFRoZSBTb2Z0d2FyZSBzaGFsbCBiZSB1c2VkIGZvciBHb29kLCBub3QgRXZpbC4KICoKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQogKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCiAqIFNPRlRXQVJFLgogKiAtLQogKgogKiBAcGFja2FnZSBKU01pbgogKiBAYXV0aG9yIFJ5YW4gR3JvdmUgPHJ5YW5Ad29ua28uY29tPgogKiBAY29weXJpZ2h0IDIwMDIgRG91Z2xhcyBDcm9ja2ZvcmQgPGRvdWdsYXNAY3JvY2tmb3JkLmNvbT4gKGpzbWluLmMpCiAqIEBjb3B5cmlnaHQgMjAwOCBSeWFuIEdyb3ZlIDxyeWFuQHdvbmtvLmNvbT4gKFBIUCBwb3J0KQogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwIE1JVCBMaWNlbnNlCiAqIEB2ZXJzaW9uIDEuMS4xICgyMDA4LTAzLTAyKQogKiBAbGluayBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvanNtaW4tcGhwLwogKi8KLyoqIHRvIGF2b2lkIGNvbmZsaWN0cyAqLwppZiggIWNsYXNzX2V4aXN0cygnSlNNaW4nKSApCnsKICBjbGFzcyBKU01pbiB7CiAgICBjb25zdCBPUkRfTEYgICAgPSAxMDsKICAgIGNvbnN0IE9SRF9TUEFDRSA9IDMyOwogICAgCiAgICBwcm90ZWN0ZWQgJGEgICAgICAgICAgID0gJyc7CiAgICBwcm90ZWN0ZWQgJGIgICAgICAgICAgID0gJyc7CiAgICBwcm90ZWN0ZWQgJGlucHV0ICAgICAgID0gJyc7CiAgICBwcm90ZWN0ZWQgJGlucHV0SW5kZXggID0gMDsKICAgIHByb3RlY3RlZCAkaW5wdXRMZW5ndGggPSAwOwogICAgcHJvdGVjdGVkICRsb29rQWhlYWQgICA9IG51bGw7CiAgICBwcm90ZWN0ZWQgJG91dHB1dCAgICAgID0gJyc7CiAgICAKICAgIC8vIC0tIFB1YmxpYyBTdGF0aWMgTWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1pbmlmeSgkanMpIHsKICAgICAgJGpzbWluID0gbmV3IEpTTWluKCRqcyk7CiAgICAgIHJldHVybiAkanNtaW4tPm1pbigpOwogICAgfQogICAgCiAgICAvLyAtLSBQdWJsaWMgSW5zdGFuY2UgTWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRpbnB1dCkgewogICAgICAkdGhpcy0+aW5wdXQgICAgICAgPSBzdHJfcmVwbGFjZSgiXHJcbiIsICJcbiIsICRpbnB1dCk7CiAgICAgICR0aGlzLT5pbnB1dExlbmd0aCA9IHN0cmxlbigkdGhpcy0+aW5wdXQpOwogICAgfQogICAgCiAgICAvLyAtLSBQcm90ZWN0ZWQgSW5zdGFuY2UgTWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGFjdGlvbigkZCkgewogICAgICBzd2l0Y2goJGQpIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICAkdGhpcy0+b3V0cHV0IC49ICR0aGlzLT5hOwogICAgICAgIAogICAgICAgIGNhc2UgMjoKICAgICAgICAgICR0aGlzLT5hID0gJHRoaXMtPmI7CiAgICAgICAgICAKICAgICAgICAgIGlmICgkdGhpcy0+YSA9PT0gIiciIHx8ICR0aGlzLT5hID09PSAnIicpIHsKICAgICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAgICR0aGlzLT5vdXRwdXQgLj0gJHRoaXMtPmE7CiAgICAgICAgICAgICAgJHRoaXMtPmEgICAgICAgPSAkdGhpcy0+Z2V0KCk7CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgaWYgKCR0aGlzLT5hID09PSAkdGhpcy0+YikgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIAogICAgICAgICAgICAgIGlmIChvcmQoJHRoaXMtPmEpIDw9IHNlbGY6Ok9SRF9MRikgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpTTWluRXhjZXB0aW9uKCdVbnRlcm1pbmF0ZWQgc3RyaW5nIGxpdGVyYWwuJyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIAogICAgICAgICAgICAgIGlmICgkdGhpcy0+YSA9PT0gJ1xcJykgewogICAgICAgICAgICAgICAgJHRoaXMtPm91dHB1dCAuPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgICR0aGlzLT5hICAgICAgID0gJHRoaXMtPmdldCgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIAogICAgICAgIGNhc2UgMzoKICAgICAgICAgICR0aGlzLT5iID0gJHRoaXMtPm5leHQoKTsKICAgICAgICAgIAogICAgICAgICAgaWYgKCR0aGlzLT5iID09PSAnLycgJiYgKAogICAgICAgICAgICAgICR0aGlzLT5hID09PSAnKCcgfHwgJHRoaXMtPmEgPT09ICcsJyB8fCAkdGhpcy0+YSA9PT0gJz0nIHx8CiAgICAgICAgICAgICAgJHRoaXMtPmEgPT09ICc6JyB8fCAkdGhpcy0+YSA9PT0gJ1snIHx8ICR0aGlzLT5hID09PSAnIScgfHwKICAgICAgICAgICAgICAkdGhpcy0+YSA9PT0gJyYnIHx8ICR0aGlzLT5hID09PSAnfCcgfHwgJHRoaXMtPmEgPT09ICc/JykpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgICR0aGlzLT5vdXRwdXQgLj0gJHRoaXMtPmEgLiAkdGhpcy0+YjsKICAgICAgICAgICAgCiAgICAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgICAkdGhpcy0+YSA9ICR0aGlzLT5nZXQoKTsKICAgICAgICAgICAgICAKICAgICAgICAgICAgICBpZiAoJHRoaXMtPmEgPT09ICcvJykgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfSBlbHNlaWYgKCR0aGlzLT5hID09PSAnXFwnKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+b3V0cHV0IC49ICR0aGlzLT5hOwogICAgICAgICAgICAgICAgJHRoaXMtPmEgICAgICAgPSAkdGhpcy0+Z2V0KCk7CiAgICAgICAgICAgICAgfSBlbHNlaWYgKG9yZCgkdGhpcy0+YSkgPD0gc2VsZjo6T1JEX0xGKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSlNNaW5FeGNlcHRpb24oJ1VudGVybWluYXRlZCByZWd1bGFyIGV4cHJlc3Npb24gJy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGl0ZXJhbC4nKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgJHRoaXMtPm91dHB1dCAuPSAkdGhpcy0+YTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgJHRoaXMtPmIgPSAkdGhpcy0+bmV4dCgpOwogICAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICRjID0gJHRoaXMtPmxvb2tBaGVhZDsKICAgICAgJHRoaXMtPmxvb2tBaGVhZCA9IG51bGw7CiAgICAgIAogICAgICBpZiAoJGMgPT09IG51bGwpIHsKICAgICAgICBpZiAoJHRoaXMtPmlucHV0SW5kZXggPCAkdGhpcy0+aW5wdXRMZW5ndGgpIHsKICAgICAgICAgICRjID0gc3Vic3RyKCR0aGlzLT5pbnB1dCwgJHRoaXMtPmlucHV0SW5kZXgsIDEpOwogICAgICAgICAgJHRoaXMtPmlucHV0SW5kZXggKz0gMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgJGMgPSBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgaWYgKCRjID09PSAiXHIiKSB7CiAgICAgICAgcmV0dXJuICJcbiI7CiAgICAgIH0KICAgICAgCiAgICAgIGlmICgkYyA9PT0gbnVsbCB8fCAkYyA9PT0gIlxuIiB8fCBvcmQoJGMpID49IHNlbGY6Ok9SRF9TUEFDRSkgewogICAgICAgIHJldHVybiAkYzsKICAgICAgfQogICAgICAKICAgICAgcmV0dXJuICcgJzsKICAgIH0KICAgIAogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGlzQWxwaGFOdW0oJGMpIHsKICAgICAgcmV0dXJuIG9yZCgkYykgPiAxMjYgfHwgJGMgPT09ICdcXCcgfHwgcHJlZ19tYXRjaCgnL15bXHdcJF0kLycsICRjKSA9PT0gMTsKICAgIH0KICAgIAogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIG1pbigpIHsKICAgICAgJHRoaXMtPmEgPSAiXG4iOwogICAgICAkdGhpcy0+YWN0aW9uKDMpOwogICAgICAKICAgICAgd2hpbGUgKCR0aGlzLT5hICE9PSBudWxsKSB7CiAgICAgICAgc3dpdGNoICgkdGhpcy0+YSkgewogICAgICAgICAgY2FzZSAnICc6CiAgICAgICAgICAgIGlmICgkdGhpcy0+aXNBbHBoYU51bSgkdGhpcy0+YikpIHsKICAgICAgICAgICAgICAkdGhpcy0+YWN0aW9uKDEpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICR0aGlzLT5hY3Rpb24oMik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgICAgCiAgICAgICAgICBjYXNlICJcbiI6CiAgICAgICAgICAgIHN3aXRjaCAoJHRoaXMtPmIpIHsKICAgICAgICAgICAgICBjYXNlICd7JzoKICAgICAgICAgICAgICBjYXNlICdbJzoKICAgICAgICAgICAgICBjYXNlICcoJzoKICAgICAgICAgICAgICBjYXNlICcrJzoKICAgICAgICAgICAgICBjYXNlICctJzoKICAgICAgICAgICAgICAgICR0aGlzLT5hY3Rpb24oMSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgY2FzZSAnICc6CiAgICAgICAgICAgICAgICAkdGhpcy0+YWN0aW9uKDMpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIAogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmlzQWxwaGFOdW0oJHRoaXMtPmIpKSB7CiAgICAgICAgICAgICAgICAgICR0aGlzLT5hY3Rpb24oMSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgJHRoaXMtPmFjdGlvbigyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgICAKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHN3aXRjaCAoJHRoaXMtPmIpIHsKICAgICAgICAgICAgICBjYXNlICcgJzoKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+aXNBbHBoYU51bSgkdGhpcy0+YSkpIHsKICAgICAgICAgICAgICAgICAgJHRoaXMtPmFjdGlvbigxKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICR0aGlzLT5hY3Rpb24oMyk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgY2FzZSAiXG4iOgogICAgICAgICAgICAgICAgc3dpdGNoICgkdGhpcy0+YSkgewogICAgICAgICAgICAgICAgICBjYXNlICd9JzoKICAgICAgICAgICAgICAgICAgY2FzZSAnXSc6CiAgICAgICAgICAgICAgICAgIGNhc2UgJyknOgogICAgICAgICAgICAgICAgICBjYXNlICcrJzoKICAgICAgICAgICAgICAgICAgY2FzZSAnLSc6CiAgICAgICAgICAgICAgICAgIGNhc2UgJyInOgogICAgICAgICAgICAgICAgICBjYXNlICInIjoKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YWN0aW9uKDEpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5pc0FscGhhTnVtKCR0aGlzLT5hKSkgewogICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmFjdGlvbigxKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YWN0aW9uKDMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAKICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgJHRoaXMtPmFjdGlvbigxKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgcmV0dXJuICR0aGlzLT5vdXRwdXQ7CiAgICB9CiAgICAKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBuZXh0KCkgewogICAgICAkYyA9ICR0aGlzLT5nZXQoKTsKICAgICAgCiAgICAgIGlmICgkYyA9PT0gJy8nKSB7CiAgICAgICAgc3dpdGNoKCR0aGlzLT5wZWVrKCkpIHsKICAgICAgICAgIGNhc2UgJy8nOgogICAgICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICAgJGMgPSAkdGhpcy0+Z2V0KCk7CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgaWYgKG9yZCgkYykgPD0gc2VsZjo6T1JEX0xGKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGM7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAKICAgICAgICAgIGNhc2UgJyonOgogICAgICAgICAgICAkdGhpcy0+Z2V0KCk7CiAgICAgICAgICAgIAogICAgICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT5nZXQoKSkgewogICAgICAgICAgICAgICAgY2FzZSAnKic6CiAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+cGVlaygpID09PSAnLycpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Z2V0KCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcgJzsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGNhc2UgbnVsbDoKICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpTTWluRXhjZXB0aW9uKCdVbnRlcm1pbmF0ZWQgY29tbWVudC4nKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuICRjOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgcmV0dXJuICRjOwogICAgfQogICAgCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcGVlaygpIHsKICAgICAgJHRoaXMtPmxvb2tBaGVhZCA9ICR0aGlzLT5nZXQoKTsKICAgICAgcmV0dXJuICR0aGlzLT5sb29rQWhlYWQ7CiAgICB9CiAgfQp9CgoKLy8gLS0gRXhjZXB0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLyoqIHRvIGF2b2lkIGNvbmZsaWN0cyAqLwppZiggIWNsYXNzX2V4aXN0cygnSlNNaW5FeGNlcHRpb24nKSApCnsKICBjbGFzcyBKU01pbkV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7fQp9Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/.wip</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/.wip/class.Manifest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcd2lwOw0KDQoNCnVzZSBDTVNNU0V4dFxjb3JlXEVycm9yOw0KdXNlIENNU01TRXh0XEV4Y2VwdGlvbnNcRmlsZVN5c3RlbUV4Y2VwdGlvbjsNCnVzZSBDTVNNU0V4dFxGUzsNCg0KY2xhc3MgTWFuaWZlc3QNCnsNCiAgcHJvdGVjdGVkICRfbGluZXMgPSBbXTsNCiAgcHJvdGVjdGVkICRfYnVpbGRlcjsNCiAgcHJvdGVjdGVkICRfZG9fbWQ1ID0gRkFMU0U7DQogIHByb3RlY3RlZCAkX2Z2ID0gJyc7DQogIHByb3RlY3RlZCAkX3R2ID0gJyc7DQogIHByb3RlY3RlZCAkX291dCA9ICdvdXQnOw0KICBwcm90ZWN0ZWQgJF90ZW1wX3Jvb3RfZGlyID0gJyc7DQogIA0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2luaXRpYWxpemUoKQ0KICB7DQogICAgJHRoaXMtPl9yZXNldCgpOw0KICB9DQogIA0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3Jlc2V0KCkNCiAgew0KICAgIEZTOjpkaXJfcmVjdXJzaXZlX2RlbGV0ZSgkdGhpcy0+X3RlbXBfcm9vdF9kaXIpOw0KICANCiAgICAkZm4gPSB1dGlsczo6am9pbl9wYXRoKCR0aGlzLT5fdGVtcF9yb290X2RpciwgJHRoaXMtPl9mdik7DQogIA0KICAgIGlmKCAhRlM6Om1rZGlyX3IoJGZuKSApDQogICAgew0KICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oRXJyb3I6OkNSRUFURV9ESVJfRVJST1IsICRmbik7DQogICAgfQ0KICANCiAgICAkZm4gPSB1dGlsczo6am9pbl9wYXRoKCR0aGlzLT5fdGVtcF9yb290X2RpciwgJHRoaXMtPl9mdCk7DQogIA0KICAgIGlmKCAhRlM6Om1rZGlyX3IoJGZuKSApDQogICAgew0KICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oRXJyb3I6OkNSRUFURV9ESVJfRVJST1IsICRmbik7DQogICAgfQ0KICANCiAgICAkZm4gPSB1dGlsczo6am9pbl9wYXRoKCR0aGlzLT5fdGVtcF9yb290X2RpciwgJHRoaXMtPl9vdXQpOw0KICANCiAgICBpZiggIUZTOjpta2Rpcl9yKCRmbikgKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKEVycm9yOjpDUkVBVEVfRElSX0VSUk9SLCAkZm4pOw0KICAgIH0NCiAgfQ0KICANCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9yZXNldF9vdXQoKQ0KICB7DQogICAgJGZuID0gdXRpbHM6OmpvaW5fcGF0aCgkdGhpcy0+X3RlbXBfcm9vdF9kaXIsICR0aGlzLT5fb3V0KTsNCiAgICBGUzo6ZGlyX3JlY3Vyc2l2ZV9kZWxldGUoJGZuKTsNCiAgfQ0KICANCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJG1vZHVsZV9uYW1lID0gJycsIHN0cmluZyAkZnJvbV92ZXJzaW9uID0gJycsIHN0cmluZyAkdG9fdmVyc2lvbiA9ICcnKQ0KICB7DQogICAgJHRoaXMtPl9mdiA9ICRmcm9tX3ZlcnNpb247DQogICAgJHRoaXMtPl90diA9ICR0b192ZXJzaW9uOw0KICAgIA0KICAgICR0aGlzLT5fdGVtcF9yb290X2RpciA9IHV0aWxzOjpqb2luX3BhdGgoDQogICAgICBceHRfdXRpbHM6OmdldF94dCgpLT5HZXRFeHRlbmRlZENvbmZpZygpWydyb290X3BhdGgnXSwNCiAgICAgICd0bXAnLA0KICAgICAgJ19tYW5pZmVzdF90bXBfJywNCiAgICAgICRtb2R1bGVfbmFtZQ0KICAgICk7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBTYXZlKHN0cmluZyAkZm4gPSAnJykNCiAgew0KICAgICR0aGlzLT5fcmVzZXRfb3V0KCk7DQogIH0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/.wip/functions</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/abstract.logger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEFuIGFic3RyYWN0IGNsYXNzIHRvIGltcGxlbWVudCBsb2dnaW5nLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKiBAY2F0ZWdvcnkgVXRpbGl0aWVzCiAqIEBhdXRob3IgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxNgogKi8KCi8vZGVjbGFyZShzdHJpY3RfdHlwZXM9MSk7IyByZXZpc2l0Cm5hbWVzcGFjZSBDTVNNU0V4dDsKCi8qKgogKiBBbiBhYnN0cmFjdCBjbGFzcyB0byBhc3Npc3Qgd2l0aCBsb2dnaW5nLiAgQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcwogKiB3aWxsIHR5cGljYWxseSBiZSBwYXNzZWQgaW50byBhIGZ1bmN0aW9uYWwgY2xhc3MgdG8gYXNzaXN0IHdpdGggbG9nZ2luZyBhbmQgZGVidWdnaW5nLgogKgogKiBUaGlzIGNsYXNzIGNhbiBhbHNvIGhhbmRsZSBkaXNwbGF5aW5nIHByb2dyZXNzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKi8KYWJzdHJhY3QgY2xhc3MgbG9nZ2VyCnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfY3VyX3N0ZXAgPSAwOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfdG90YWxfc3RlcHMgPSAxOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0b3IKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICR0b3RhbF9zdGVwcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHRvdGFsX3N0ZXBzID0gMSkKICAgIHsKICAgICAgICAkdGhpcy0+dG90YWxfc3RlcHMgPSBcbWF4KDEsIChpbnQpJHRvdGFsX3N0ZXBzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFkdmFuY2UgdGhlIHByb2dyZXNzIG1ldGVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWR2YW5jZSgpCiAgICB7CiAgICAgICAgJHRoaXMtPl9jdXJfc3RlcCA9IFxtaW4oJHRoaXMtPl9jdXJfc3RlcCArIDEsICR0aGlzLT5fdG90YWxfc3RlcHMpOwogICAgICAgICR0aGlzLT5kaXNwbGF5X3Byb2dyZXNzKCAkdGhpcy0+Z2V0X3BlcmNlbnRfY29tcGxldGUoKSApOwogICAgICAgIAogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIFRlc3QgaWYgdGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRvbmUoKQogICAgewogICAgICAgIHJldHVybiAoJHRoaXMtPl9jdXJfc3RlcCA9PT0gJHRoaXMtPl90b3RhbF9zdGVwcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHByb2dyZXNzIGFzIGEgcGVyY2VudGFnZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGZsb2F0IEEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxMDAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9wZXJjZW50X2NvbXBsZXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gKGZsb2F0KSAkdGhpcy0+X2N1cl9zdGVwIC8gKGZsb2F0KSAkdGhpcy0+X3RvdGFsX3N0ZXBzICogMTAwLjA7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXNldCB0aGUgcHJvZ3Jlc3MgbWV0ZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlc2V0KCkKICAgIHsKICAgICAgICAkdGhpcy0+X2N1cl9zdGVwID0gMDsKICAgICAgICAkdGhpcy0+ZGlzcGxheV9wcm9ncmVzcyggJHRoaXMtPmdldF9wZXJjZW50X2NvbXBsZXRlKCkgKTsKICAKICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogRGlzcGxheSBhIGRlYnVnIG1lc3NhZ2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkuCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBkZWJ1ZyhzdHJpbmcgJHN0cik7CgogICAgLyoqCiAgICAgKiBEaXNwbGF5IGEgdmVyYm9zZSBtZXNzYWdlLgogICAgICoKICAgICAqIFR5cGljYWxseSBzb21lIGZsYWcgaW4gdGhlIGRlcml2ZWQgY2xhc3Mgd291bGQgaW5kaWNhdGUgaWYgdGhlc2Ugc2hvdWxkIGJlIGFjdHVhbGx5IG91dHB1dC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHIgVGhlIG1lc3NhZ2UgdG8gZGlzcGxheS4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHZlcmJvc2Uoc3RyaW5nICRzdHIpOwoKICAgIC8qKgogICAgICogRGlzcGxheSBhbiBpbmZvcm1hdGlvbiBtZXNzYWdlCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkuCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBpbmZvKHN0cmluZyAkc3RyKTsKCiAgICAvKioKICAgICAqIERpc3BsYXkgYSB3YXJuaW5nIG1lc3NhZ2UKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHIgVGhlIG1lc3NhZ2UgdG8gZGlzcGxheS4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHdhcm5pbmcoc3RyaW5nICRzdHIpOwoKICAgIC8qKgogICAgICogRGlzcGxheSBhbiBlcnJvciBtZXNzYWdlCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkuCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBlcnJvcihzdHJpbmcgJHN0cik7CgogICAgLyoqCiAgICAgKiBEaXNwbGF5IGEgZmF0YWwgbWVzc2FnZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHIgVGhlIG1lc3NhZ2UgdG8gZGlzcGxheS4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGZhdGFsKHN0cmluZyAkc3RyKTsKCgogICAgLyoqCiAgICAgKiBEaXNwbGF5IHRoZSBjdXJyZW50IHByb2dyZXNzCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICRwZXJjZW50IFRoZSBwcm9ncmVzcyBwZXJjZW50YWdlLgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZGlzcGxheV9wcm9ncmVzcyhmbG9hdCAkcGVyY2VudCk7Cgp9IC8vIGVuZCBvZiBjbGFzcwo=]]></data>
	</file>
	<file>
	  <filename>/lib/bootstrap.inc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCnVzZSBDTVNNU0V4dFxhdXRvbG9hZGVyOw0KDQovKioNCiAqIExvYWQgYW5kIHJlZ2lzdGVyIENNU01TIEV4dCBBdXRvbG9hZGVyDQogKi8NCmlmICghY2xhc3NfZXhpc3RzKGF1dG9sb2FkZXI6OmNsYXNzKSkNCnsNCiAgaW5jbHVkZSBfX0RJUl9fIC4gJy9jbGFzcy5hdXRvbG9hZGVyLnBocCc7DQp9DQoNCiggbmV3IGF1dG9sb2FkZXIoKSApLT5yZWdpc3RlcigpDQogICAgICAgICAgICAgICAgICAgIC0+YWRkTmFtZXNwYWNlKCdDTVNNU0V4dCcsIF9fRElSX18pDQogICAgICAgICAgICAgICAgICAgIC0+YWRkUGF0aChfX0RJUl9fKTsNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.AssocData.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgc2ltcGxlIGNsYXNzIGxpYnJhcnkgdG8gcHJvdmlkZSBrZXkvdmFsdWUgc3RvcmFnZQogKiBhbmQgc2VhcmNoaW5nLiAgYW5kIHRvIGluY2x1ZGUgYnVpbHRpbiBjYWNoaW5nCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBVdGlsaXRpZXMKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxMCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCgovL2RlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOyMgcmV2aXNpdApuYW1lc3BhY2UgQ01TTVNFeHQ7CnVzZSBDTVNNU1xEYXRhYmFzZVxDb25uZWN0aW9uIGFzIERhdGFiYXNlOwoKLyoqCiAqIEEgbm9kZSBjb250YWluaW5nIGFzc29jaWF0aXZlIGRhdGEuCiAqCiAqIFRoaXMgY2xhc3MgaXMgdXNlZCBleGNsdXNpdmVseSBieSB0aGUgQXNzb2NEYXRhIGNsYXNzCiAqCiAqIEBpbnRlcm5hbAogKiBAcGFja2FnZSBDTVNNU0V4dAogKi8KY2xhc3MgQXNzb2NEYXRhTm9kZQp7CiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX3R5cGU7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9kYXRhOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfZXh0cmE7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgQXNzb2NEYXRhTm9kZSBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdHlwZSAoVGhlIGRhdGEgdHlwZS4gIGkuZTogb2JqZWN0LCBpbnQsIGJvb2xlYW4sIGFycmF5KSAoZGVwcmVjYXRlZCkKICAgICAqIEBwYXJhbSBtaXhlZCAkZGF0YSAgVGhlIGRhdGEgdG8gc3RvcmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJHR5cGUsJGRhdGEpCiAgICB7CiAgICAgICAgJHRoaXMtPl90eXBlID0gJHR5cGU7CiAgICAgICAgJHRoaXMtPl9kYXRhID0gJGRhdGE7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIHR5cGUgb2YgZGF0YQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl90eXBlOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBkYXRhIHR5cGUgZm9yIHRoaXMgcmVjb3JkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgRGF0YSB0eXBlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBTZXRUeXBlKHN0cmluZyAkdHlwZSkKICAgIHsKICAgICAgICAkdGhpcy0+X3R5cGUgPSAkdHlwZTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgZGF0YSBmb3IgdGhpcyByZWNvcmQKICAgICAqIE1heSBiZSBhIHNlcmlhbGl6ZWQgb2JqZWN0IG9yIGFycmF5CiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0RGF0YSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fZGF0YTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgZGF0YSBmb3IgdGhpcyByZWNvcmQKICAgICAqIE1heSBiZSBhIHNlcmlhbGl6ZWQgb2JqZWN0IG9yIGFycmF5CiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRkYXRhCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBTZXREYXRhKCRkYXRhKQogICAgewogICAgICAgICR0aGlzLT5fZGF0YSA9ICRkYXRhOwogICAgfQp9OyAvLyBjbGFzcwoKCgovKioKICogQSBjbGFzcyB0byBtYW5hZ2UgYXNzb2NpYXRpdmUgZGF0YS4gIFBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHN0b3JpbmcgZGF0YSBmb3Igd2hpY2ggdGhlcmUgYXJlIHVwIHRvIDMgaGllcmFyY2hpY2FsIGtleXMgaW4gdGhlIGRhdGFiYXNlCiAqIGFuZCByZXRyaWV2aW5nIHRoYXQgZGF0YSBhdCBhIGxhdGVyIGRhdGUuICBUaGlzIGNsYXNzIGF1dG9tYXRpY2FsbHkgc2VyaWFsaXplcyBhbmQgZGUtc2VyaWFsaXplcyBjb21wbGV4IHR5cGVzIHN1Y2ggYXMgYXJyYXlzIG9yIG9iamVjdHMuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqLwpjbGFzcyBBc3NvY0RhdGEKewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9kYjsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2tleTE7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9jYWNoZXNpemU7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9jYWNoZTsKICAKICAvKioKICAgKiBDb25zdHJ1Y3RvcgogICAqCiAgICogQHBhcmFtIFxDTVNNU1xEYXRhYmFzZVxDb25uZWN0aW9uICRkYiAgICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIGFkb2RiIGRiIG9iamVjdAogICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAka2V5MSAgICAgIFRoZSBmaXJzdCBrZXkuCiAgICogQHBhcmFtIGludGVnZXIgICAgICAgICAgICAgICAgICAgICRjYWNoZXNpemUgaW50IE51bWJlciBvZiBlbGVtZW50cyB0byBzdG9yZSBpbiB0aGUgY2FjaGUKICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChEYXRhYmFzZSAkZGIsIHN0cmluZyAka2V5MSwgaW50ICRjYWNoZXNpemU9MTAwKQogICAgewogICAgICAgICR0aGlzLT5fZGIgPSAkZGI7CiAgICAgICAgJHRoaXMtPl9rZXkxID0gJGtleTE7CiAgICAgICAgJHRoaXMtPl9jYWNoZXNpemUgPSAoaW50KSAkY2FjaGVzaXplOwogICAgfQoKCiAgICAvKioKICAgICAqIENsZWFyIHRoZSBjYWNoZQogICAgICoKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfY2xlYXJjYWNoZSgpCiAgICB7CiAgICAgICAgJHRoaXMtPl9jYWNoZSA9IGFycmF5KCk7CiAgICB9CgoKICAgIC8qKgogICAgICogU2V0IGFuIGl0ZW0gaW50byB0aGUgY2FjaGUKICAgICAqCiAgICAgKiBAaWdub3JlCiAgICAgKiBAcGFyYW0gc3RyaW5nIFNlY29uZCBrZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgVGhpcmQga2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nIEZvdXJ0aCBrZXkKICAgICAqIEBwYXJhbSBvYmplY3QgVGhlIGRhdGEgdG8gc3RvcmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfc2V0Y2FjaGUoc3RyaW5nICRrZXkyLCBzdHJpbmcgJGtleTMsIHN0cmluZyAka2V5NCwgQXNzb2NEYXRhTm9kZSAkbm9kZSkKICAgIHsKICAgICAgICBpZiggIWlzX2FycmF5KCR0aGlzLT5fY2FjaGUpICkgewogICAgICAgICAgICAkdGhpcy0+X2NhY2hlID0gYXJyYXkoKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmKCBjb3VudCgkdGhpcy0+X2NhY2hlKSA+PSAkdGhpcy0+X2NhY2hlc2l6ZSApICR0aGlzLT5fY2FjaGUgPSBhcnJheV9zaGlmdCgkdGhpcy0+X2NhY2hlKTsKICAgICAgICB9CgogICAgICAgICRrZXkgPSBpbXBsb2RlKCcrKysnLGFycmF5KCRrZXkyLCRrZXkzLCRrZXk0KSk7CiAgICAgICAgJHRoaXMtPl9jYWNoZVska2V5XSA9ICRub2RlOwogICAgfQoKCiAgICAvKioKICAgICAqIFNldCBhbiBpdGVtIGludG8gdGhlIGNhY2hlCiAgICAgKiBhbmQgaW50byB0aGUgZGF0YWJhc2UuCiAgICAgKgogICAgICogQGlnbm9yZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5MiBTZWNvbmQga2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkzIFRoaXJkIGtleQogICAgICogQHBhcmFtIHN0cmluZyAka2V5NCBGb3VydGgga2V5CiAgICAgKiBAcGFyYW0gQXNzb2NEYXRhTm9kZSAkbm9kZSBUaGUgZGF0YSB0byBzdG9yZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9zZXQoc3RyaW5nICRrZXkyLHN0cmluZyAka2V5MyxzdHJpbmcgJGtleTQsIEFzc29jRGF0YU5vZGUgJG5vZGUpCiAgICB7CiAgICAgICAgLy8gY2FsbCBfc2V0Y2FjaGUKICAgICAgICAkdGhpcy0+X3NldGNhY2hlKCRrZXkyLCRrZXkzLCRrZXk0LCRub2RlKTsKCiAgICAgICAgLy8gaWYgZXhpc3RzIHVwZGF0ZQogICAgICAgICRub3cgPSAkdGhpcy0+X2RiLT5EYlRpbWVTdGFtcCh0aW1lKCkpOwogICAgICAgICRxdWVyeSA9ICdTRUxFQ1QgaWQgRlJPTSAnLkNNU01TRVhUX1RBQkxFX0FTU09DREFUQS4nIFdIRVJFIGtleTEgPSA/IEFORCBrZXkyID0gPyBBTkQga2V5MyA9ID8gQU5EIGtleTQgPSA/IExJTUlUIDEnOwogICAgICAgICRpZCA9ICR0aGlzLT5fZGItPkdldE9uZSgkcXVlcnksIGFycmF5KCR0aGlzLT5fa2V5MSwka2V5Miwka2V5Mywka2V5NCkpOwogICAgICAgIGlmKCAkaWQgKSB7CiAgICAgICAgICAgICRxdWVyeSA9ICdVUERBVEUgJy5DTVNNU0VYVF9UQUJMRV9BU1NPQ0RBVEEuIiBTRVQgdHlwZSA9ID8sIGRhdGEgPSA/LCBtb2RpZmllZF9kYXRlID0gJG5vdwogICAgICAgICAgICAgICAgV0hFUkUga2V5MSA9ID8gQU5EIGtleTIgPSA/IEFORCBrZXkzID0gPyBBTkQga2V5NCA9ID8iOwogICAgICAgICAgICAkdGhpcy0+X2RiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJG5vZGUtPkdldFR5cGUoKSwkbm9kZS0+R2V0RGF0YSgpLCAkdGhpcy0+X2tleTEsJGtleTIsJGtleTMsJGtleTQpKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRxdWVyeSA9ICdJTlNFUlQgSU5UTyAnLkNNU01TRVhUX1RBQkxFX0FTU09DREFUQS4iIChrZXkxLGtleTIsa2V5MyxrZXk0LHR5cGUsZGF0YSxjcmVhdGVfZGF0ZSxtb2RpZmllZF9kYXRlKQogICAgICAgICAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8sPywkbm93LCRub3cpIjsKICAgICAgICAgICAgJHRoaXMtPl9kYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHRoaXMtPl9rZXkxLCRrZXkyLCRrZXkzLCRrZXk0LCRub2RlLT5HZXRUeXBlKCksJG5vZGUtPkdldERhdGEoKSkpOwogICAgICAgIH0KICAgIH0KCgogICAgLyoqCiAgICAgKiBTdG9yZSBzb21lIGRhdGEKICAgICAqCiAgICAgKiA8Y29kZT4KICAgICAqICRvYmogPSBuZXcgQXNzb2NEYXRhKGNtc21zKCktPkdldERiKCksJ2FkZHJlc3NlcycpOwogICAgICogJG9iai0+U2V0KCd1c2VyMScsJzEyMyBTb21ld2hlcmUgU3RyZWV0Jyk7CiAgICAgKiA8L2NvZGU+CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5MiBUaGUgc2Vjb25kIGtleQogICAgICogQHBhcmFtIG1peGVkICAkdmFsdWUgVGhlIGRhdGEgdG8gc3RvcmUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleTMgQW4gb3B0aW9uYWwgdGhpcmQga2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXk0IEFuIG9wdGlvbmFsIGZvdXJ0aCBrZXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIFNldChzdHJpbmcgJGtleTIsICR2YWx1ZSwgc3RyaW5nICRrZXkzID0gJycsIHN0cmluZyAka2V5NCA9ICcnKQogICAgewogICAgICAgICRrZXkyID0gdHJpbSgka2V5Mik7CiAgICAgICAgJGtleTMgPSB0cmltKCRrZXkzKTsKICAgICAgICAka2V5NCA9IHRyaW0oJGtleTQpOwogICAgICAgIGlmKCBlbXB0eSgka2V5MikgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgaWYoIGVtcHR5KCRrZXkzKSAmJiAhZW1wdHkoJGtleTQpICkgcmV0dXJuIEZBTFNFOwoKICAgICAgICAvLyBkZXRlcm1pbmUgdHlwZQogICAgICAgICR0eXBlID0gJ3NpbXBsZSc7CiAgICAgICAgJGRhdGEgPSAkdmFsdWU7CiAgICAgICAgaWYoIGlzX29iamVjdCgkdmFsdWUpICkgewogICAgICAgICAgICAkdHlwZSA9ICdvYmplY3QnOwogICAgICAgICAgICAkZGF0YSA9IHNlcmlhbGl6ZSgkdmFsdWUpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKCBpc19hcnJheSgkdmFsdWUpICkgewogICAgICAgICAgICAkdHlwZSA9ICdhcnJheSc7CiAgICAgICAgICAgICRkYXRhID0gc2VyaWFsaXplKCR2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICAkbm9kZSA9IG5ldyBBc3NvY0RhdGFOb2RlKCR0eXBlLCRkYXRhKTsKICAgICAgICAvLyBjYWxsIF9zZXQKICAgICAgICAkdGhpcy0+X3NldCgka2V5Miwka2V5Mywka2V5NCwkbm9kZSk7CiAgICB9CgoKICAgIC8qKgogICAgICogR2V0IGRhdGEgZnJvbSB0aGUgY2FjaGUKICAgICAqCiAgICAgKiBAaWdub3JlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkyCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXk0CiAgICAgKiBAcmV0dXJuIG9iamVjdCBBc3NvY0RhdGFOb2RlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX2dldGNhY2hlKHN0cmluZyAka2V5Miwgc3RyaW5nICRrZXkzLCBzdHJpbmcgJGtleTQpCiAgICB7CiAgICAgICAgJGtleSA9IGltcGxvZGUoJysrKycsYXJyYXkoJGtleTIsJGtleTMsJGtleTQpKTsKICAgICAgICBpZiggIWlzc2V0KCR0aGlzLT5fY2FjaGVbJGtleV0pICkgcmV0dXJuIEZBTFNFOwogICAgICAgIHJldHVybiAkdGhpcy0+X2NhY2hlWyRrZXldOwogICAgfQoKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHN0b3JlZCBkYXRhCiAgICAgKgogICAgICogSWYgbm90IGF2YWlsYWJsZSBpbiB0aGUgY2FjaGUsIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBwdWxsdGhlCiAgICAgKiBkYXRhIGZyb20gdGhlIGRhdGFiYXNlIGFuZCBzdG9yZSBpdCBpbiB0aGUgY2FjaGUuCiAgICAgKgogICAgICogQGlnbm9yZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5MgogICAgICogQHBhcmFtIHN0cmluZyAka2V5MwogICAgICogQHBhcmFtIHN0cmluZyAka2V5NAogICAgICogQHJldHVybm9iamVjdCBBc3NvY0RhdGFOb2RlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX2dldChzdHJpbmcgJGtleTIsIHN0cmluZyAka2V5Mywgc3RyaW5nICRrZXk0KQogICAgewogICAgICAgIC8vIGNhbGwgX2dldGNhY2hlCiAgICAgICAgJHRtcCA9ICR0aGlzLT5fZ2V0Y2FjaGUoJGtleTIsJGtleTMsJGtleTQpOwogICAgICAgIGlmKCAkdG1wID09PSBGQUxTRSApIHsKICAgICAgICAgICAgLy8gcmV0cmVpdmUgZGF0YSBmcm9tIGRhdGFiYXNlCiAgICAgICAgICAgICRxdWVyeSA9ICdTRUxFQ1QgZGF0YSx0eXBlIEZST00gJy5DTVNNU0VYVF9UQUJMRV9BU1NPQ0RBVEEuJyBXSEVSRSBrZXkxPT8gQU5EIGtleTI9PyBBTkQga2V5Mz0/IEFORCBrZXk0PT8gTElNSVQgMSc7CiAgICAgICAgICAgICRyb3cgPSAkdGhpcy0+X2RiLT5HZXRSb3coJHF1ZXJ5LCBhcnJheSgkdGhpcy0+X2tleTEsJGtleTIsJGtleTMsJGtleTQpKTsKICAgICAgICAgICAgaWYoICEkcm93ICkgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICAkdG1wID0gbmV3IEFzc29jRGF0YU5vZGUoJHJvd1sndHlwZSddLCRyb3dbJ2RhdGEnXSk7CgogICAgICAgICAgICAvLyB1cGRhdGUgY2FjaGUKICAgICAgICAgICAgJHRoaXMtPl9zZXRjYWNoZSgka2V5Miwka2V5Mywka2V5NCwkdG1wKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0bXA7CiAgICB9CgoKICAgIC8qKgogICAgICogUmV0cmlldmUgc3RvcmVkIGRhdGEKICAgICAqCiAgICAgKiB3aWxsIHB1bGwgdGhlIGRhdGEgZnJvbSB0aGUgY2FjaGUgaWYgcG9zc2libGUsIGFuZCBpZiBuZWNlc3NhcnkKICAgICAqIGZyb20gdGhlIGRhdGFiYXNlLgogICAgICoKICAgICAqIDxjb2RlPgogICAgICogJG9iaiA9IG5ldyBBc3NvY0RhdGEoY21zbXMoKS0+R2V0RGIoKSwnYWRkcmVzc2VzJyk7CiAgICAgKiAkdGhlX2FkZHJlc3MgPSAkb2JqLT5HZXQoJ3VzZXIxJyk7CiAgICAgKiA8L2NvZGU+CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5MiBBIHNlY29uZCBrZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleTMgQW4gb3B0aW9uYWwgdGhpcmQga2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXk0IEFuIG9wdGlvbmFsIDR0aCBrZXkKICAgICAqIEByZXR1cm4gbWl4ZWQgVGhlIHJlc3VsdGluZyBkYXRhLiAgSWYgbm8gZGF0YSBpcyBmb3VuZCBGQUxTRSBpcyByZXR1cm5lZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIEdldChzdHJpbmcgJGtleTIsIHN0cmluZyAka2V5MyA9ICcnLCBzdHJpbmcgJGtleTQgPSAnJykKICAgIHsKICAgICAgICAka2V5MiA9IHRyaW0oJGtleTIpOwogICAgICAgIGlmKCAka2V5MyApICRrZXkzID0gdHJpbSgka2V5Myk7CiAgICAgICAgaWYoICRrZXk0ICkgJGtleTQgPSB0cmltKCRrZXk0KTsKICAgICAgICBpZiggZW1wdHkoJGtleTIpICkgcmV0dXJuIEZBTFNFOwogICAgICAgIGlmKCBlbXB0eSgka2V5MykgJiYgIWVtcHR5KCRrZXk0KSApIHJldHVybiBGQUxTRTsKCiAgICAgICAgLy8gY2FsbCBfZ2V0CiAgICAgICAgJG5vZGUgPSAkdGhpcy0+X2dldCgka2V5Miwka2V5Mywka2V5NCk7CiAgICAgICAgaWYoICRub2RlID09PSBGQUxTRSApIHJldHVybiBGQUxTRTsKCiAgICAgICAgLy8gZGVzZXJpYWxpemUKICAgICAgICBpZiggJG5vZGUtPkdldFR5cGUoKSA9PSAnc2ltcGxlJyApcmV0dXJuICRub2RlLT5HZXREYXRhKCk7CiAgICAgICAgcmV0dXJuIHVuc2VyaWFsaXplKCRub2RlLT5HZXREYXRhKCkpOwogICAgfQoKCiAgICAvKioKICAgICAqIFJldHJpZXZlIGRhdGEgZnJvbSB0aGUgZGF0YWJhc2UsIGlnbm9yaW5nIGFueSBjYWNoZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleTIgQSBzZWNvbmQga2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkzIEFuIG9wdGlvbmFsIHRoaXJkIGtleQogICAgICogQHBhcmFtIHN0cmluZyAka2V5NCBBbiBvcHRpb25hbCA0dGgga2V5CiAgICAgKiBAcmV0dXJuIG1peGVkIFRoZSByZXN1bHRpbmcgZGF0YS4gIElmIG5vIGRhdGEgaXMgZm91bmQgRkFMU0UgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRGdWxsTm9DYWNoZShzdHJpbmcgJGtleTIsIHN0cmluZyAka2V5MyA9ICcnLCBzdHJpbmcgJGtleTQgPSAnJykKICAgIHsKICAgICAgICAka2V5MiA9IHRyaW0oJGtleTIpOwogICAgICAgICRrZXkzID0gdHJpbSgka2V5Myk7CiAgICAgICAgJGtleTQgPSB0cmltKCRrZXk0KTsKICAgICAgICBpZiggZW1wdHkoJGtleTIpICkgcmV0dXJuIEZBTFNFOwogICAgICAgIGlmKCBlbXB0eSgka2V5MykgJiYgIWVtcHR5KCRrZXk0KSApIHJldHVybiBGQUxTRTsKCiAgICAgICAgLy8gcmV0dXJuIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGFsbCBkYXRhIGZvciBhIHBhcnRpY3VsYXIgcm93CiAgICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5DTVNNU0VYVF9UQUJMRV9BU1NPQ0RBVEEuJyBXSEVSRSBrZXkxID0gPyBBTkQga2V5MiA9ID8gQU5EIGtleTMgPSA/IEFORCBrZXk0ID0gPyc7CiAgICAgICAgJHJvdyA9ICR0aGlzLT5fZGItPkdldFJvdygkcXVlcnksYXJyYXkoJHRoaXMtPl9rZXkxLCRrZXkyLCRrZXkzLCRrZXk0KSk7CiAgICB9CgoKICAgIC8qKgogICAgICogTGlzdCB2YWx1ZXMgc3RvcmVkIGluIHRoZSBjYWNoZSBmb3IgYSBwYXJ0aWN1bGFyIHNldCBvZiBrZXlzCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5MgogICAgICogQHBhcmFtIHN0cmluZyAka2V5MyBBbiBvcHRpb25hbCB0aGlyZCBrZXkKICAgICAqIEByZXR1cm4gYXJyYXkgbGlzdGluZyBhbGwgbWF0Y2hpbmcgdmFsdWVzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0TGlzdChzdHJpbmcgJGtleTIsIHN0cmluZyAka2V5MyA9ICcnKQogICAgewogICAgICAgIC8vIHJldHVybnMgYW4gYXJyYXkgYXNzb2NpYXRpb25zIG9mIGFsbCBtYXRjaGluZyBrZXlzCiAgICAgICAgaWYoIGVtcHR5KCRrZXkyKSApIHJldHVybiBGQUxTRTsKCiAgICAgICAgJHFwYXJtcyA9IGFycmF5KCk7CiAgICAgICAgJHFwYXJtc1tdID0gJHRoaXMtPl9rZXkxOwogICAgICAgICRxcGFybXNbXSA9ICRrZXkyOwogICAgICAgICRxdWVyeSA9ICdTRUxFQ1Qga2V5MSxrZXkyLGtleTMsa2V5NCBGUk9NICcuQ01TTVNFWFRfVEFCTEVfQVNTT0NEQVRBLicgV0hFUkUga2V5MSA9ID8gQU5EIGtleTIgPSA/JzsKICAgICAgICBpZiggIWVtcHR5KCRrZXkzKSApIHsKICAgICAgICAgICAgJHF1ZXJ5IC49ICcgQU5EIGtleTMgPSA/JzsKICAgICAgICAgICAgJHFwYXJtc1tdID0gJGtleTM7CiAgICAgICAgfQogICAgICAgICRyZXN1bHRzID0gJHRoaXMtPl9kYi0+R2V0QXJyYXkoJHF1ZXJ5LCRxcGFybXMpOwogICAgICAgIGlmKCAhaXNfYXJyYXkoJHJlc3VsdHMpICkgcmV0dXJuIEZBTFNFOwogICAgICAgIHJldHVybiAkcmVzdWx0czsKICAgIH0KCgogICAgLyoqCiAgICAgKiBEZWxldGUgYSBzdG9yZWQgdmFsdWUuCiAgICAgKgogICAgICogPGNvZGU+CiAgICAgKiAkb2JqID0gbmV3IEFzc29jRGF0YShjbXNtcygpLT5HZXREYigpLCdhZGRyZXNzZXMnKTsKICAgICAqICRvYmotPkRlbGV0ZSgndXNlcjEnKTsKICAgICAqIDwvY29kZT4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkyCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkzIGFuIG9wdGlvbmFsIGtleTMKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleTQgYW4gb3B0aW9uYWwga2V5NAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBEZWxldGUoc3RyaW5nICRrZXkyLCBzdHJpbmcgJGtleTMgPSAnJywgc3RyaW5nICRrZXk0ID0gJycpCiAgICB7CiAgICAgICAgLy8gZGVsZXRlIGFsbCBtYXRjaGluZyBrZXlzCiAgICAgICAgJGtleTIgPSB0cmltKCRrZXkyKTsKICAgICAgICAka2V5MyA9IHRyaW0oJGtleTMpOwogICAgICAgICRrZXk0ID0gdHJpbSgka2V5NCk7CiAgICAgICAgaWYoIGVtcHR5KCRrZXkyKSApIHJldHVybiBGQUxTRTsKICAgICAgICBpZiggZW1wdHkoJGtleTMpICYmICFlbXB0eSgka2V5NCkgKSByZXR1cm4gRkFMU0U7CgogICAgICAgICR0aGlzLT5fY2xlYXJjYWNoZSgpOwoKICAgICAgICAkcXBhcm1zID0gYXJyYXkoKTsKICAgICAgICAkcXBhcm1zW10gPSAkdGhpcy0+X2tleTE7CiAgICAgICAgJHFwYXJtc1tdID0gJGtleTI7CiAgICAgICAgJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcuQ01TTVNFWFRfVEFCTEVfQVNTT0NEQVRBLicKICAgICAgICAgICAgICAgV0hFUkUga2V5MSA9ID8gQU5EIGtleTIgPSA/JzsKICAgICAgICBpZiggIWVtcHR5KCRrZXkzKSApIHsKICAgICAgICAgICAgJHF1ZXJ5IC49ICcgQU5EIGtleTMgPSA/JzsKICAgICAgICAgICAgJHFwYXJtc1tdID0gJGtleTM7CiAgICAgICAgICAgIGlmKCAhZW1wdHkoJGtleTQpICkgewogICAgICAgICAgICAgICAgJHF1ZXJ5IC49ICcgQU5EIGtleTQgPSA/JzsKICAgICAgICAgICAgICAgICRxcGFybXNbXSA9ICRrZXk0OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRkYiA9ICR0aGlzLT5fZGItPkV4ZWN1dGUoJHF1ZXJ5LCRxcGFybXMpOwogICAgICAgIHJldHVybiBUUlVFOwogICAgfQoKCiAgICAvKioKICAgICAqIEZpbmQgYWxsIG9mIHRoZSBlbnRyaWVzIHRoYXQgbWF0Y2gKICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGtleTIgKG9wdGlvbmFsKSAoc3BlY2lmeSBhIHN0cmluZyBmb3IgYW4gZXhhY3QgbWF0Y2gsIGFuIGFycmF5IGZvciBJTiBleHByZXNzaW4pCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkzIChvcHRpb25hbCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleTQgKG9wdGlvbmFsKQogICAgICogQHJldHVybiBhcnJheSBvZiBtYXRjaGluZyBrZXkxLGtleTIsa2V5MyxrZXk0IHZhbHVlcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmluZChzdHJpbmcgJGtleTIgPSAnJywgc3RyaW5nICRrZXkzID0gJycsIHN0cmluZyAka2V5NCA9ICcnKQogICAgewogICAgICAgIGlmKCAhJGtleTIgJiYgISRrZXkzICYmICEka2V5NCApIHJldHVybjsKICAgICAgICAkcXVlcnkgPSAnU0VMRUNUIGtleTEsa2V5MixrZXkzLGtleTQgRlJPTSAnLkNNU01TRVhUX1RBQkxFX0FTU09DREFUQTsKCiAgICAgICAgJHdoZXJlID0gYXJyYXkoKTsKICAgICAgICAkcXBhcm1zID0gYXJyYXkoKTsKICAgICAgICAkcXBhcm1zW10gPSAkdGhpcy0+X2tleTE7CiAgICAgICAgCiAgICAgICAgaWYoICRrZXkyICkgewogICAgICAgICAgICBpZiggaXNfYXJyYXkoJGtleTIpICkgewogICAgICAgICAgICAgICAgZm9yKCAkaSA9IDAsICRuID0gY291bnQoJGtleTIpOyAkaSA8ICRuOyAkaSsrICkgewogICAgICAgICAgICAgICAgICAgICRrZXkyWyRpXSA9ICInIi4ka2V5MlskaV0uIiciOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHN0ciA9IGltcGxvZGUoJywnLCRrZXkyKTsKICAgICAgICAgICAgICAgICR3aGVyZVtdID0gJ2tleTEgSU4gKCcuJHN0ci4nKSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkd2hlcmVbXSA9ICdrZXkyID0gPyc7CiAgICAgICAgICAgICAgICAkcXBhcm1zW10gPSAka2V5MjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiggJGtleTMgKSB7CiAgICAgICAgICAgICR3aGVyZVtdID0gJ2tleTMgPSA/JzsKICAgICAgICAgICAgJHFwYXJtc1tdID0gJGtleTM7CiAgICAgICAgfQogICAgICAgIGlmKCAka2V5NCApIHsKICAgICAgICAgICAgJHdoZXJlW10gPSAna2V5NCA9ID8nOwogICAgICAgICAgICAkcXBhcm1zW10gPSAka2V5NDsKICAgICAgICB9CiAgICAgICAgaWYoICFjb3VudCgkd2hlcmUpICkgcmV0dXJuOwoKICAgICAgICAkcXVlcnkgLj0gJyBXSEVSRSAnLmltcGxvZGUoJyBBTkQgJywkd2hlcmUpOwogICAgICAgICRkYiA9ICR0aGlzLT5fZGI7CiAgICAgICAgJGRiciA9ICRkYi0+R2V0QXJyYXkoJHF1ZXJ5LCRxcGFybXMpOwogICAgICAgIGlmKCAhaXNfYXJyYXkoJGRicikgKSByZXR1cm47CiAgICAgICAgcmV0dXJuICRkYnI7CiAgICB9Cn0gLy8gY2xhc3MK]]></data>
	</file>
	<file>
	  <filename>/lib/class.autoloader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogVGhlIENNU01TRXh0IEF1dG9sb2FkZXIuDQogKi8NCg0KbmFtZXNwYWNlIENNU01TRXh0Ow0KY2xhc3MgYXV0b2xvYWRlcg0Kew0KICAvKioNCiAgICogQW4gYXNzb2NpYXRpdmUgYXJyYXkgd2hlcmUgdGhlIGtleSBpcyB0aGUgbmFtZXNwYWNlIHByZWZpeA0KICAgKiBhbmQgdGhlIHZhbHVlIGlzIGFuIGFycmF5IG9mIGJhc2UgZGlyZWN0b3JpZXMNCiAgICogZm9yIGNsYXNzZXMgaW4gdGhhdCBuYW1lc3BhY2UuDQogICAqDQogICAqIEB2YXIgYXJyYXkNCiAgICovDQogIHByb3RlY3RlZCBhcnJheSAkX3ByZWZpeGVzID0gW107DQogIA0KICAvKioNCiAgICogQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgZmFsbGJhY2sgcGF0aHMuDQogICAqIFRoZXNlIHBhdGhzIGFyZSB1c2VkIHdoZW4gdW5hYmxlIHRvIGZpbmQgYSBtYXBwZWQgZmlsZS4NCiAgICogQ2FuIGFsc28gYmUgdXNlZCB0byByZWdpc3RlciBjdXN0b20gcGF0aHMgZm9yIGNsYXNzZXMuDQogICAqIEB2YXIgYXJyYXkNCiAgICovDQogIHByb3RlY3RlZCBhcnJheSAkX3BhdGhzID0gW107DQogIA0KLy8gIC8qKg0KLy8gICAqIFByb3RlY3RlZCBjb25zdHJ1Y3RvciB0byBwcmV2ZW50IGNyZWF0aW5nIGEgbmV3IGluc3RhbmNlIHZpYSB0aGUgYG5ld2Agb3BlcmF0b3IgZnJvbSBvdXRzaWRlIHRoaXMgY2xhc3MuDQovLyAgICovDQovLyAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkNCi8vICB7DQovLyAgICBcc3BsX2F1dG9sb2FkX3JlZ2lzdGVyKFskdGhpcywgJ2xvYWRDbGFzcyddKTsNCi8vICB9DQogIA0KICAvKioNCiAgICogUmVnaXN0ZXIgdGhlIGF1dG9sb2FkZXIgd2l0aCB0aGUgU1BMIGF1dG9sb2FkZXIgc3RhY2suDQogICAqDQogICAqIEByZXR1cm4gXENNU01TRXh0XGF1dG9sb2FkZXINCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiByZWdpc3RlcigpDQogIHsNCiAgICBcc3BsX2F1dG9sb2FkX3JlZ2lzdGVyKFskdGhpcywgJ2xvYWRDbGFzcyddKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIC8qKg0KICAgKiBBZGQgYSBiYXNlIGRpcmVjdG9yeSBmb3IgYSBuYW1lc3BhY2UgcHJlZml4Lg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRwcmVmaXggICBUaGUgbmFtZXNwYWNlIHByZWZpeC4NCiAgICogQHBhcmFtIHN0cmluZyAkYmFzZV9kaXIgQSBiYXNlIGRpcmVjdG9yeSBmb3IgY2xhc3MgZmlsZXMgaW4gdGhlIG5hbWVzcGFjZS4NCiAgICogQHBhcmFtIGJvb2wgJHByZXBlbmQgSWYgdHJ1ZSwgcHJlcGVuZCB0aGUgYmFzZSBkaXJlY3RvcnkgdG8gdGhlIHN0YWNrIGluc3RlYWQgb2YgYXBwZW5kaW5nIGl0Ow0KICAgKiAgICAgICAgICAgICAgICAgICAgICB0aGlzIGNhdXNlcyBpdCB0byBiZSBzZWFyY2hlZCBmaXJzdCByYXRoZXIgdGhhbiBsYXN0Lg0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIGFkZE5hbWVzcGFjZSgkcHJlZml4LCAkYmFzZV9kaXIsICRwcmVwZW5kID0gRkFMU0UpDQogIHsNCiAgICAvLyBOb3JtYWxpemUgdGhlIG5hbWVzcGFjZSBwcmVmaXguDQogICAgJHByZWZpeCA9IFx0cmltKCRwcmVmaXgsICdcXCcpIC4gJ1xcJzsNCiAgICANCiAgICAvLyBOb3JtYWxpemUgdGhlIGJhc2UgZGlyZWN0b3J5IHdpdGggYSB0cmFpbGluZyBzZXBhcmF0b3IuDQogICAgJGJhc2VfZGlyID0gXHJ0cmltKCRiYXNlX2RpciwgXERJUkVDVE9SWV9TRVBBUkFUT1IpIC4gXERJUkVDVE9SWV9TRVBBUkFUT1I7DQogICAgDQogICAgLy8gSW5pdGlhbGl6ZSB0aGUgbmFtZXNwYWNlIHByZWZpeCBhcnJheSBpZiBub3QgYWxyZWFkeSBzZXQuDQogICAgaWYoIWlzc2V0KCR0aGlzLT5fcHJlZml4ZXNbJHByZWZpeF0pKQ0KICAgIHsNCiAgICAgICR0aGlzLT5fcHJlZml4ZXNbJHByZWZpeF0gPSBbXTsNCiAgICB9DQogICAgDQogICAgLy8gUmV0YWluIHRoZSBiYXNlIGRpcmVjdG9yeSBmb3IgdGhlIG5hbWVzcGFjZSBwcmVmaXguDQogICAgaWYoJHByZXBlbmQpDQogICAgew0KICAgICAgXGFycmF5X3Vuc2hpZnQoJHRoaXMtPl9wcmVmaXhlc1skcHJlZml4XSwgJGJhc2VfZGlyKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICR0aGlzLT5fcHJlZml4ZXNbJHByZWZpeF1bXSA9ICRiYXNlX2RpcjsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gYWRkUGF0aCgkcGF0aCwgJHByZXBlbmQgPSBGQUxTRSkNCiAgew0KICAgICRwYXRoID0gXHJ0cmltKCRwYXRoLCBcRElSRUNUT1JZX1NFUEFSQVRPUikgLiBcRElSRUNUT1JZX1NFUEFSQVRPUjsNCiAgICANCiAgICBpZigkcHJlcGVuZCkNCiAgICB7DQogICAgICBcYXJyYXlfdW5zaGlmdCgkdGhpcy0+X3BhdGhzLCAkcGF0aCk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkdGhpcy0+X3BhdGhzW10gPSAkcGF0aDsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICAvKioNCiAgICogTG9hZCB0aGUgY2xhc3MgZmlsZSBmb3IgYSBnaXZlbiBjbGFzcyBuYW1lLg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRjbGFzcyBUaGUgZnVsbHktcXVhbGlmaWVkIGNsYXNzIG5hbWUuDQogICAqDQogICAqIEByZXR1cm4gYm9vbHxzdHJpbmcgVGhlIG1hcHBlZCBmaWxlIG5hbWUgb24gc3VjY2Vzcywgb3IgYm9vbGVhbiBmYWxzZSBvbiBmYWlsdXJlLg0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIGxvYWRDbGFzcygkY2xhc3MpDQogIHsNCiAgICAvLyBUaGUgY3VycmVudCBuYW1lc3BhY2UgcHJlZml4Lg0KICAgICRwcmVmaXggPSAkY2xhc3M7DQogICAgDQogICAgLy8gV29yayBiYWNrd2FyZHMgdGhyb3VnaCB0aGUgbmFtZXNwYWNlIG5hbWVzIG9mIHRoZSBmdWxseS1xdWFsaWZpZWQgY2xhc3MgbmFtZSB0byBmaW5kIGEgbWFwcGVkIGZpbGUgbmFtZS4NCiAgICB3aGlsZShGQUxTRSAhPT0gKCRwb3MgPSBcc3RycnBvcygkcHJlZml4LCAnXFwnKSkpDQogICAgew0KICAgICAgLy8gUmV0YWluIHRoZSB0cmFpbGluZyBuYW1lc3BhY2Ugc2VwYXJhdG9yIGluIHRoZSBwcmVmaXguDQogICAgICAkcHJlZml4ID0gXHN1YnN0cigkY2xhc3MsIDAsICRwb3MgKyAxKTsNCiAgICAgIA0KICAgICAgLy8gVGhlIHJlc3QgaXMgdGhlIHJlbGF0aXZlIGNsYXNzIG5hbWUuDQogICAgICAkcmVsYXRpdmVfY2xhc3MgPSBcc3Vic3RyKCRjbGFzcywgJHBvcyArIDEpOw0KICAgICAgDQogICAgICAvLyBUcnkgdG8gbG9hZCBhIG1hcHBlZCBmaWxlIGZvciB0aGUgcHJlZml4IGFuZCByZWxhdGl2ZSBjbGFzcy4NCiAgICAgICRtYXBwZWRfZmlsZSA9ICR0aGlzLT5fbG9hZF9tYXBwZWRfZmlsZSgkcHJlZml4LCAkcmVsYXRpdmVfY2xhc3MpOw0KICAgICAgaWYoJG1hcHBlZF9maWxlKSB7IHJldHVybiAkbWFwcGVkX2ZpbGU7IH0NCiAgICAgIA0KICAgICAgLy8gUmVtb3ZlIHRoZSB0cmFpbGluZyBuYW1lc3BhY2Ugc2VwYXJhdG9yIGZvciB0aGUgbmV4dCBpdGVyYXRpb24gb2Ygc3RycnBvcygpLg0KICAgICAgJHByZWZpeCA9IFxydHJpbSgkcHJlZml4LCAnXFwnKTsNCiAgICB9DQogICAgDQogICAgLy8gTmV2ZXIgZm91bmQgYSBtYXBwZWQgZmlsZS4NCiAgICByZXR1cm4gRkFMU0U7DQogIH0NCiAgDQogIC8qKg0KICAgKiBMb2FkIHRoZSBtYXBwZWQgZmlsZSBmb3IgYSBuYW1lc3BhY2UgcHJlZml4IGFuZCByZWxhdGl2ZSBjbGFzcy4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkcHJlZml4ICAgICAgICAgVGhlIG5hbWVzcGFjZSBwcmVmaXguDQogICAqIEBwYXJhbSBzdHJpbmcgJHJlbGF0aXZlX2NsYXNzIFRoZSByZWxhdGl2ZSBjbGFzcyBuYW1lLg0KICAgKg0KICAgKiBAcmV0dXJuIGJvb2x8c3RyaW5nIEJvb2xlYW4gZmFsc2UgaWYgbm8gbWFwcGVkIGZpbGUgY2FuIGJlIGxvYWRlZCwgb3IgdGhlIG5hbWUgb2YgdGhlIG1hcHBlZCBmaWxlIHRoYXQgd2FzIGxvYWRlZC4NCiAgICovDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfbG9hZF9tYXBwZWRfZmlsZSgkcHJlZml4LCAkcmVsYXRpdmVfY2xhc3MpDQogIHsNCiAgICAvLyBBcmUgdGhlcmUgYW55IGJhc2UgZGlyZWN0b3JpZXMgZm9yIHRoaXMgbmFtZXNwYWNlIHByZWZpeD8NCiAgICBpZighaXNzZXQoJHRoaXMtPl9wcmVmaXhlc1skcHJlZml4XSkpIHsgcmV0dXJuIEZBTFNFOyB9DQogICAgDQogICAgLy8gRXh0cmFjdCB0aGUgYmFzZSBjbGFzcyBuYW1lIGZyb20gdGhlIHJlbGF0aXZlIGNsYXNzIG5hbWUuDQogICAgJGJhc2VuYW1lID0gXGJhc2VuYW1lKFxzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRyZWxhdGl2ZV9jbGFzcykpOw0KICAgICRyZWxhdGl2ZV9jbGFzcyA9IFxzdHJfcmVwbGFjZSggJ1xcJyAuICRiYXNlbmFtZSwgJycsICRyZWxhdGl2ZV9jbGFzcyk7DQogICAgDQogICAgLy8gTG9vayB0aHJvdWdoIGJhc2UgZGlyZWN0b3JpZXMgZm9yIHRoaXMgbmFtZXNwYWNlIHByZWZpeC4NCiAgICBmb3JlYWNoICgkdGhpcy0+X3ByZWZpeGVzWyRwcmVmaXhdIGFzICRiYXNlX2RpcikNCiAgICB7DQogICAgICAvLyBSZXBsYWNlIG5hbWVzcGFjZSBzZXBhcmF0b3JzIHdpdGggZGlyZWN0b3J5IHNlcGFyYXRvcnMgaW4gdGhlIHJlbGF0aXZlIGNsYXNzIG5hbWUuDQogICAgICAkcmVsYXRpdmVfcGF0aCA9IFxzdHJfcmVwbGFjZSgnXFwnLCBcRElSRUNUT1JZX1NFUEFSQVRPUiwgJHJlbGF0aXZlX2NsYXNzKTsNCiAgICAgIA0KICAgICAgLy8gQ2hlY2sgYWxsIGZpbGVuYW1lIHZhcmlhbnRzLg0KICAgICAgJGZpbGVfdmFyaWFudHMgPSBbDQogICAgICAgICRiYXNlbmFtZSAuICcucGhwJywNCiAgICAgICAgJ2NsYXNzLicgLiAkYmFzZW5hbWUgLiAnLnBocCcsDQogICAgICAgICd0cmFpdC4nIC4gJGJhc2VuYW1lIC4gJy5waHAnLA0KICAgICAgICAnYWJzdHJhY3QuJyAuICRiYXNlbmFtZSAuICcucGhwJywNCiAgICAgICAgJ2ludGVyZmFjZS4nIC4gJGJhc2VuYW1lIC4gJy5waHAnLA0KICAgICAgXTsNCiAgICAgIA0KICAgICAgLy8gVHJ5IHRvIGxvYWQgYW55IG9mIHRoZSB2YXJpYW50cy4NCiAgICAgIGZvcmVhY2goJGZpbGVfdmFyaWFudHMgYXMgJGZpbGUpDQogICAgICB7DQogICAgICAgICRzZWFyY2hfZmlsZSA9ICRiYXNlX2RpciAuICRyZWxhdGl2ZV9wYXRoIC4gXERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkZmlsZTsNCg0KICAgICAgICBpZigkdGhpcy0+X3JlcXVpcmVfZmlsZSgkc2VhcmNoX2ZpbGUpKSB7IHJldHVybiAkc2VhcmNoX2ZpbGU7IH0NCiAgICAgICAgDQogICAgICAgICMgaW5jbHVkZSBmYWxsYmFjayBwYXRocw0KICAgICAgICBmb3JlYWNoKCR0aGlzLT5fcGF0aHMgYXMgJHBhdGgpDQogICAgICAgIHsNCiAgICAgICAgICAkc2VhcmNoX2ZpbGUgPSAkcGF0aCAuIFxESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGZpbGU7DQoNCiAgICAgICAgICBpZigkdGhpcy0+X3JlcXVpcmVfZmlsZSgkc2VhcmNoX2ZpbGUpKSB7IHJldHVybiAkc2VhcmNoX2ZpbGU7IH0NCiAgICAgICAgICANCiAgICAgICAgICAkc2VhcmNoX2ZpbGUgPSAkcGF0aCAuICRyZWxhdGl2ZV9wYXRoIC4gXERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkZmlsZTsNCiAgICAgICAgICANCiAgICAgICAgICBpZigkdGhpcy0+X3JlcXVpcmVfZmlsZSgkc2VhcmNoX2ZpbGUpKSB7IHJldHVybiAkc2VhcmNoX2ZpbGU7IH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIE5ldmVyIGZvdW5kIGl0Lg0KICAgIHJldHVybiBGQUxTRTsNCiAgfQ0KICANCiAgLyoqDQogICAqIElmIGEgZmlsZSBleGlzdHMsIHJlcXVpcmUgaXQgZnJvbSB0aGUgZmlsZSBzeXN0ZW0uDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgVGhlIGZpbGUgdG8gcmVxdWlyZS4NCiAgICoNCiAgICogQHJldHVybiBib29sIFRydWUgaWYgdGhlIGZpbGUgZXhpc3RzLCBmYWxzZSBpZiBub3QuDQogICAqLw0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3JlcXVpcmVfZmlsZShzdHJpbmcgJGZpbGUpIDogYm9vbA0KICB7DQogICAgaWYoIFxmaWxlX2V4aXN0cygkZmlsZSkgKQ0KICAgIHsNCiAgICAgIHJlcXVpcmUgJGZpbGU7DQogICAgICANCiAgICAgIHJldHVybiBUUlVFOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gRkFMU0U7DQogIH0NCn0NCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.Browser.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogRmlsZTogQnJvd3Nlci5waHANCiAqIEF1dGhvcjogQ2hyaXMgU2NodWxkIChodHRwOi8vY2hyaXNzY2h1bGQuY29tLykNCiAqIExhc3QgTW9kaWZpZWQ6IEFwcmlsIDE0dGgsIDIwMjANCiAqIEB2ZXJzaW9uIDEuOS42DQogKg0KICogQ29weXJpZ2h0IDIwMTkgQ2hyaXMgU2NodWxkDQogKiANCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhDQogKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLA0KICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQNCiAqIGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsDQogKiBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8NCiAqIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nDQogKiBjb25kaXRpb25zOg0KICogDQogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZA0KICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQogKiANCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTDQogKiBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GDQogKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIA0KICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkNCiAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsDQogKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQ0KICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQogKg0KICogVHlwaWNhbCBVc2FnZToNCiAqDQogKiAgICRicm93c2VyID0gbmV3IEJyb3dzZXIoKTsNCiAqICAgaWYoICRicm93c2VyLT5nZXRCcm93c2VyKCkgPT0gQnJvd3Nlcjo6QlJPV1NFUl9GSVJFRk9YICYmICRicm93c2VyLT5nZXRWZXJzaW9uKCkgPj0gMiApIHsNCiAqICAgIGVjaG8gJ1lvdSBoYXZlIEZpcmVGb3ggdmVyc2lvbiAyIG9yIGdyZWF0ZXInOw0KICogICB9DQogKg0KICogVXNlciBBZ2VudHMgU2FtcGxlZCBmcm9tOiBodHRwOi8vd3d3LnVzZXJhZ2VudHN0cmluZy5jb20vDQogKg0KICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgd29yayBmcm9tIEdhcnkgV2hpdGUNCiAqIGh0dHA6Ly9hcHB0b29scy5jb20vcGhwdG9vbHMvYnJvd3Nlci8NCiAqDQogKi8NCg0KLyoqDQogKiAgQWRhcHRlZCBhbmQgbmFtZXNwYWNlZCBmb3IgQ01TTVNFeHQNCiAqIAkgKiBUeXBpY2FsIFVzYWdlOg0KICoNCiAqICAgJGJyb3dzZXIgPSBuZXcgXENNU01TRXh0XEJyb3dzZXIoKTsNCiAqICAgaWYoICRicm93c2VyLT5nZXRCcm93c2VyKCkgPT0gQnJvd3Nlcjo6QlJPV1NFUl9GSVJFRk9YICYmICRicm93c2VyLT5nZXRWZXJzaW9uKCkgPj0gMiApIHsNCiAqICAgCWVjaG8gJ1lvdSBoYXZlIEZpcmVGb3ggdmVyc2lvbiAyIG9yIGdyZWF0ZXInOw0KICogICB9DQogKg0KICovDQoNCm5hbWVzcGFjZSBDTVNNU0V4dDsNCg0KY2xhc3MgQnJvd3Nlcg0Kew0KICAgIHByaXZhdGUgJF9hZ2VudCA9ICcnOw0KICAgIHByaXZhdGUgJF9icm93c2VyX25hbWUgPSAnJzsNCiAgICBwcml2YXRlICRfdmVyc2lvbiA9ICcnOw0KICAgIHByaXZhdGUgJF9wbGF0Zm9ybSA9ICcnOw0KICAgIHByaXZhdGUgJF9vcyA9ICcnOw0KICAgIHByaXZhdGUgJF9pc19hb2wgPSBmYWxzZTsNCiAgICBwcml2YXRlICRfaXNfbW9iaWxlID0gZmFsc2U7DQogICAgcHJpdmF0ZSAkX2lzX3RhYmxldCA9IGZhbHNlOw0KICAgIHByaXZhdGUgJF9pc19yb2JvdCA9IGZhbHNlOw0KICAgIHByaXZhdGUgJF9pc19mYWNlYm9vayA9IGZhbHNlOw0KICAgIHByaXZhdGUgJF9hb2xfdmVyc2lvbiA9ICcnOw0KDQogICAgY29uc3QgQlJPV1NFUl9VTktOT1dOID0gJ3Vua25vd24nOw0KICAgIGNvbnN0IFZFUlNJT05fVU5LTk9XTiA9ICd1bmtub3duJzsNCg0KICAgIGNvbnN0IEJST1dTRVJfT1BFUkEgPSAnT3BlcmEnOyAvLyBodHRwOi8vd3d3Lm9wZXJhLmNvbS8NCiAgICBjb25zdCBCUk9XU0VSX09QRVJBX01JTkkgPSAnT3BlcmEgTWluaSc7IC8vIGh0dHA6Ly93d3cub3BlcmEuY29tL21pbmkvDQogICAgY29uc3QgQlJPV1NFUl9XRUJUViA9ICdXZWJUVic7IC8vIGh0dHA6Ly93d3cud2VidHYubmV0L3BjLw0KICAgIGNvbnN0IEJST1dTRVJfRURHRSA9ICdFZGdlJzsgLy8gaHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS9lZGdlDQogICAgY29uc3QgQlJPV1NFUl9JRSA9ICdJbnRlcm5ldCBFeHBsb3Jlcic7IC8vIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9pZS8NCiAgICBjb25zdCBCUk9XU0VSX1BPQ0tFVF9JRSA9ICdQb2NrZXQgSW50ZXJuZXQgRXhwbG9yZXInOyAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ludGVybmV0X0V4cGxvcmVyX01vYmlsZQ0KICAgIGNvbnN0IEJST1dTRVJfS09OUVVFUk9SID0gJ0tvbnF1ZXJvcic7IC8vIGh0dHA6Ly93d3cua29ucXVlcm9yLm9yZy8NCiAgICBjb25zdCBCUk9XU0VSX0lDQUIgPSAnaUNhYic7IC8vIGh0dHA6Ly93d3cuaWNhYi5kZS8NCiAgICBjb25zdCBCUk9XU0VSX09NTklXRUIgPSAnT21uaVdlYic7IC8vIGh0dHA6Ly93d3cub21uaWdyb3VwLmNvbS9hcHBsaWNhdGlvbnMvb21uaXdlYi8NCiAgICBjb25zdCBCUk9XU0VSX0ZJUkVCSVJEID0gJ0ZpcmViaXJkJzsgLy8gaHR0cDovL3d3dy5pYnBob2VuaXguY29tLw0KICAgIGNvbnN0IEJST1dTRVJfRklSRUZPWCA9ICdGaXJlZm94JzsgLy8gaHR0cHM6Ly93d3cubW96aWxsYS5vcmcvZW4tVVMvZmlyZWZveC8NCiAgICBjb25zdCBCUk9XU0VSX0JSQVZFID0gJ0JyYXZlJzsgLy8gaHR0cHM6Ly9icmF2ZS5jb20vDQogICAgY29uc3QgQlJPV1NFUl9QQUxFTU9PTiA9ICdQYWxlbW9vbic7IC8vIGh0dHBzOi8vd3d3LnBhbGVtb29uLm9yZy8NCiAgICBjb25zdCBCUk9XU0VSX0lDRVdFQVNFTCA9ICdJY2V3ZWFzZWwnOyAvLyBodHRwOi8vd3d3LmdldGljZXdlYXNlbC5vcmcvDQogICAgY29uc3QgQlJPV1NFUl9TSElSRVRPS08gPSAnU2hpcmV0b2tvJzsgLy8gaHR0cDovL3dpa2kubW96aWxsYS5vcmcvUHJvamVjdHMvc2hpcmV0b2tvDQogICAgY29uc3QgQlJPV1NFUl9NT1pJTExBID0gJ01vemlsbGEnOyAvLyBodHRwOi8vd3d3Lm1vemlsbGEuY29tL2VuLVVTLw0KICAgIGNvbnN0IEJST1dTRVJfQU1BWUEgPSAnQW1heWEnOyAvLyBodHRwOi8vd3d3LnczLm9yZy9BbWF5YS8NCiAgICBjb25zdCBCUk9XU0VSX0xZTlggPSAnTHlueCc7IC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTHlueA0KICAgIGNvbnN0IEJST1dTRVJfU0FGQVJJID0gJ1NhZmFyaSc7IC8vIGh0dHA6Ly9hcHBsZS5jb20NCiAgICBjb25zdCBCUk9XU0VSX0lQSE9ORSA9ICdpUGhvbmUnOyAvLyBodHRwOi8vYXBwbGUuY29tDQogICAgY29uc3QgQlJPV1NFUl9JUE9EID0gJ2lQb2QnOyAvLyBodHRwOi8vYXBwbGUuY29tDQogICAgY29uc3QgQlJPV1NFUl9JUEFEID0gJ2lQYWQnOyAvLyBodHRwOi8vYXBwbGUuY29tDQogICAgY29uc3QgQlJPV1NFUl9DSFJPTUUgPSAnQ2hyb21lJzsgLy8gaHR0cDovL3d3dy5nb29nbGUuY29tL2Nocm9tZQ0KICAgIGNvbnN0IEJST1dTRVJfQU5EUk9JRCA9ICdBbmRyb2lkJzsgLy8gaHR0cDovL3d3dy5hbmRyb2lkLmNvbS8NCiAgICBjb25zdCBCUk9XU0VSX0dPT0dMRUJPVCA9ICdHb29nbGVCb3QnOyAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dvb2dsZWJvdA0KICAgIGNvbnN0IEJST1dTRVJfQ1VSTCA9ICdjVVJMJzsgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ1VSTA0KICAgIGNvbnN0IEJST1dTRVJfV0dFVCA9ICdXZ2V0JzsgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2dldA0KICAgIGNvbnN0IEJST1dTRVJfVUNCUk9XU0VSID0gJ1VDQnJvd3Nlcic7IC8vIGh0dHBzOi8vd3d3LnVjd2ViLmNvbS8NCg0KDQogICAgY29uc3QgQlJPV1NFUl9ZQU5ERVhCT1QgPSAnWWFuZGV4Qm90JzsgLy8gaHR0cDovL3lhbmRleC5jb20vYm90cw0KICAgIGNvbnN0IEJST1dTRVJfWUFOREVYSU1BR0VSRVNJWkVSX0JPVCA9ICdZYW5kZXhJbWFnZVJlc2l6ZXInOyAvLyBodHRwOi8veWFuZGV4LmNvbS9ib3RzDQogICAgY29uc3QgQlJPV1NFUl9ZQU5ERVhJTUFHRVNfQk9UID0gJ1lhbmRleEltYWdlcyc7IC8vIGh0dHA6Ly95YW5kZXguY29tL2JvdHMNCiAgICBjb25zdCBCUk9XU0VSX1lBTkRFWFZJREVPX0JPVCA9ICdZYW5kZXhWaWRlbyc7IC8vIGh0dHA6Ly95YW5kZXguY29tL2JvdHMNCiAgICBjb25zdCBCUk9XU0VSX1lBTkRFWE1FRElBX0JPVCA9ICdZYW5kZXhNZWRpYSc7IC8vIGh0dHA6Ly95YW5kZXguY29tL2JvdHMNCiAgICBjb25zdCBCUk9XU0VSX1lBTkRFWEJMT0dTX0JPVCA9ICdZYW5kZXhCbG9ncyc7IC8vIGh0dHA6Ly95YW5kZXguY29tL2JvdHMNCiAgICBjb25zdCBCUk9XU0VSX1lBTkRFWEZBVklDT05TX0JPVCA9ICdZYW5kZXhGYXZpY29ucyc7IC8vIGh0dHA6Ly95YW5kZXguY29tL2JvdHMNCiAgICBjb25zdCBCUk9XU0VSX1lBTkRFWFdFQk1BU1RFUl9CT1QgPSAnWWFuZGV4V2VibWFzdGVyJzsgLy8gaHR0cDovL3lhbmRleC5jb20vYm90cw0KICAgIGNvbnN0IEJST1dTRVJfWUFOREVYRElSRUNUX0JPVCA9ICdZYW5kZXhEaXJlY3QnOyAvLyBodHRwOi8veWFuZGV4LmNvbS9ib3RzDQogICAgY29uc3QgQlJPV1NFUl9ZQU5ERVhNRVRSSUtBX0JPVCA9ICdZYW5kZXhNZXRyaWthJzsgLy8gaHR0cDovL3lhbmRleC5jb20vYm90cw0KICAgIGNvbnN0IEJST1dTRVJfWUFOREVYTkVXU19CT1QgPSAnWWFuZGV4TmV3cyc7IC8vIGh0dHA6Ly95YW5kZXguY29tL2JvdHMNCiAgICBjb25zdCBCUk9XU0VSX1lBTkRFWENBVEFMT0dfQk9UID0gJ1lhbmRleENhdGFsb2cnOyAvLyBodHRwOi8veWFuZGV4LmNvbS9ib3RzDQoNCiAgICBjb25zdCBCUk9XU0VSX1NMVVJQID0gJ1lhaG9vISBTbHVycCc7IC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWWFob28hX1NsdXJwDQogICAgY29uc3QgQlJPV1NFUl9XM0NWQUxJREFUT1IgPSAnVzNDIFZhbGlkYXRvcic7IC8vIGh0dHA6Ly92YWxpZGF0b3IudzMub3JnLw0KICAgIGNvbnN0IEJST1dTRVJfQkxBQ0tCRVJSWSA9ICdCbGFja0JlcnJ5JzsgLy8gaHR0cDovL3d3dy5ibGFja2JlcnJ5LmNvbS8NCiAgICBjb25zdCBCUk9XU0VSX0lDRUNBVCA9ICdJY2VDYXQnOyAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dOVV9JY2VDYXQNCiAgICBjb25zdCBCUk9XU0VSX05PS0lBX1M2MCA9ICdOb2tpYSBTNjAgT1NTIEJyb3dzZXInOyAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dlYl9Ccm93c2VyX2Zvcl9TNjANCiAgICBjb25zdCBCUk9XU0VSX05PS0lBID0gJ05va2lhIEJyb3dzZXInOyAvLyAqIGFsbCBvdGhlciBXQVAtYmFzZWQgYnJvd3NlcnMgb24gdGhlIE5va2lhIFBsYXRmb3JtDQogICAgY29uc3QgQlJPV1NFUl9NU04gPSAnTVNOIEJyb3dzZXInOyAvLyBodHRwOi8vZXhwbG9yZXIubXNuLmNvbS8NCiAgICBjb25zdCBCUk9XU0VSX01TTkJPVCA9ICdNU04gQm90JzsgLy8gaHR0cDovL3NlYXJjaC5tc24uY29tL21zbmJvdC5odG0NCiAgICBjb25zdCBCUk9XU0VSX0JJTkdCT1QgPSAnQmluZyBCb3QnOyAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jpbmdib3QNCiAgICBjb25zdCBCUk9XU0VSX1ZJVkFMREkgPSAnVml2YWxkaSc7IC8vIGh0dHBzOi8vdml2YWxkaS5jb20vDQogICAgY29uc3QgQlJPV1NFUl9ZQU5ERVggPSAnWWFuZGV4JzsgLy8gaHR0cHM6Ly9icm93c2VyLnlhbmRleC51YS8NCg0KICAgIGNvbnN0IEJST1dTRVJfTkVUU0NBUEVfTkFWSUdBVE9SID0gJ05ldHNjYXBlIE5hdmlnYXRvcic7IC8vIGh0dHA6Ly9icm93c2VyLm5ldHNjYXBlLmNvbS8gKERFUFJFQ0FURUQpDQogICAgY29uc3QgQlJPV1NFUl9HQUxFT04gPSAnR2FsZW9uJzsgLy8gaHR0cDovL2dhbGVvbi5zb3VyY2Vmb3JnZS5uZXQvIChERVBSRUNBVEVEKQ0KICAgIGNvbnN0IEJST1dTRVJfTkVUUE9TSVRJVkUgPSAnTmV0UG9zaXRpdmUnOyAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL05ldFBvc2l0aXZlIChERVBSRUNBVEVEKQ0KICAgIGNvbnN0IEJST1dTRVJfUEhPRU5JWCA9ICdQaG9lbml4JzsgLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IaXN0b3J5X29mX01vemlsbGFfRmlyZWZveCAoREVQUkVDQVRFRCkNCiAgICBjb25zdCBCUk9XU0VSX1BMQVlTVEFUSU9OID0gIlBsYXlTdGF0aW9uIjsNCiAgICBjb25zdCBCUk9XU0VSX1NBTVNVTkcgPSAiU2Ftc3VuZ0Jyb3dzZXIiOw0KICAgIGNvbnN0IEJST1dTRVJfU0lMSyA9ICJTaWxrIjsNCiAgICBjb25zdCBCUk9XU0VSX0lfRlJBTUUgPSAiSWZyYW1lbHkiOw0KICAgIGNvbnN0IEJST1dTRVJfQ09DT0EgPSAiQ29jb2FSZXN0Q2xpZW50IjsNCg0KICAgIGNvbnN0IFBMQVRGT1JNX1VOS05PV04gPSAndW5rbm93bic7DQogICAgY29uc3QgUExBVEZPUk1fV0lORE9XUyA9ICdXaW5kb3dzJzsNCiAgICBjb25zdCBQTEFURk9STV9XSU5ET1dTX0NFID0gJ1dpbmRvd3MgQ0UnOw0KICAgIGNvbnN0IFBMQVRGT1JNX0FQUExFID0gJ0FwcGxlJzsNCiAgICBjb25zdCBQTEFURk9STV9MSU5VWCA9ICdMaW51eCc7DQogICAgY29uc3QgUExBVEZPUk1fT1MyID0gJ09TLzInOw0KICAgIGNvbnN0IFBMQVRGT1JNX0JFT1MgPSAnQmVPUyc7DQogICAgY29uc3QgUExBVEZPUk1fSVBIT05FID0gJ2lQaG9uZSc7DQogICAgY29uc3QgUExBVEZPUk1fSVBPRCA9ICdpUG9kJzsNCiAgICBjb25zdCBQTEFURk9STV9JUEFEID0gJ2lQYWQnOw0KICAgIGNvbnN0IFBMQVRGT1JNX0JMQUNLQkVSUlkgPSAnQmxhY2tCZXJyeSc7DQogICAgY29uc3QgUExBVEZPUk1fTk9LSUEgPSAnTm9raWEnOw0KICAgIGNvbnN0IFBMQVRGT1JNX0ZSRUVCU0QgPSAnRnJlZUJTRCc7DQogICAgY29uc3QgUExBVEZPUk1fT1BFTkJTRCA9ICdPcGVuQlNEJzsNCiAgICBjb25zdCBQTEFURk9STV9ORVRCU0QgPSAnTmV0QlNEJzsNCiAgICBjb25zdCBQTEFURk9STV9TVU5PUyA9ICdTdW5PUyc7DQogICAgY29uc3QgUExBVEZPUk1fT1BFTlNPTEFSSVMgPSAnT3BlblNvbGFyaXMnOw0KICAgIGNvbnN0IFBMQVRGT1JNX0FORFJPSUQgPSAnQW5kcm9pZCc7DQogICAgY29uc3QgUExBVEZPUk1fUExBWVNUQVRJT04gPSAiU29ueSBQbGF5U3RhdGlvbiI7DQogICAgY29uc3QgUExBVEZPUk1fUk9LVSA9ICJSb2t1IjsNCiAgICBjb25zdCBQTEFURk9STV9BUFBMRV9UViA9ICJBcHBsZSBUViI7DQogICAgY29uc3QgUExBVEZPUk1fVEVSTUlOQUwgPSAiVGVybWluYWwiOw0KICAgIGNvbnN0IFBMQVRGT1JNX0ZJUkVfT1MgPSAiRmlyZSBPUyI7DQogICAgY29uc3QgUExBVEZPUk1fU01BUlRfVFYgPSAiU01BUlQtVFYiOw0KICAgIGNvbnN0IFBMQVRGT1JNX0NIUk9NRV9PUyA9ICJDaHJvbWUgT1MiOw0KICAgIGNvbnN0IFBMQVRGT1JNX0pBVkFfQU5EUk9JRCA9ICJKYXZhL0FuZHJvaWQiOw0KICAgIGNvbnN0IFBMQVRGT1JNX1BPU1RNQU4gPSAiUG9zdG1hbiI7DQogICAgY29uc3QgUExBVEZPUk1fSV9GUkFNRSA9ICJJZnJhbWVseSI7DQoNCiAgICBjb25zdCBPUEVSQVRJTkdfU1lTVEVNX1VOS05PV04gPSAndW5rbm93bic7DQoNCiAgICAvKioNCiAgICAgKiBDbGFzcyBjb25zdHJ1Y3Rvcg0KICAgICAqIEBwYXJhbSBzdHJpbmcgJHVzZXJBZ2VudA0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdXNlckFnZW50ID0gJycpDQogICAgew0KICAgICAgICBpZiAoJHVzZXJBZ2VudCAhPSAnJykgew0KICAgICAgICAgICAgJHRoaXMtPnNldFVzZXJBZ2VudCgkdXNlckFnZW50KTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICR0aGlzLT5yZXNldCgpOw0KICAgICAgICAgICAgJHRoaXMtPmRldGVybWluZSgpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUmVzZXQgYWxsIHByb3BlcnRpZXMNCiAgICAgKi8NCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzZXQoKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9hZ2VudCA9IGlzc2V0KCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkgPyAkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10gOiAnJzsNCiAgICAgICAgJHRoaXMtPl9icm93c2VyX25hbWUgPSBzZWxmOjpCUk9XU0VSX1VOS05PV047DQogICAgICAgICR0aGlzLT5fdmVyc2lvbiA9IHNlbGY6OlZFUlNJT05fVU5LTk9XTjsNCiAgICAgICAgJHRoaXMtPl9wbGF0Zm9ybSA9IHNlbGY6OlBMQVRGT1JNX1VOS05PV047DQogICAgICAgICR0aGlzLT5fb3MgPSBzZWxmOjpPUEVSQVRJTkdfU1lTVEVNX1VOS05PV047DQogICAgICAgICR0aGlzLT5faXNfYW9sID0gZmFsc2U7DQogICAgICAgICR0aGlzLT5faXNfbW9iaWxlID0gZmFsc2U7DQogICAgICAgICR0aGlzLT5faXNfdGFibGV0ID0gZmFsc2U7DQogICAgICAgICR0aGlzLT5faXNfcm9ib3QgPSBmYWxzZTsNCiAgICAgICAgJHRoaXMtPl9pc19mYWNlYm9vayA9IGZhbHNlOw0KICAgICAgICAkdGhpcy0+X2FvbF92ZXJzaW9uID0gc2VsZjo6VkVSU0lPTl9VTktOT1dOOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgc3BlY2lmaWMgYnJvd3NlciBpcyB2YWxpZA0KICAgICAqIEBwYXJhbSBzdHJpbmcgJGJyb3dzZXJOYW1lDQogICAgICogQHJldHVybiBib29sIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgdGhlIHNwZWNpZmllZCBicm93c2VyDQogICAgICovDQogICAgZnVuY3Rpb24gaXNCcm93c2VyKCRicm93c2VyTmFtZSkNCiAgICB7DQogICAgICAgIHJldHVybiAoMCA9PSBzdHJjYXNlY21wKCR0aGlzLT5fYnJvd3Nlcl9uYW1lLCB0cmltKCRicm93c2VyTmFtZSkpKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgYnJvd3Nlci4gIEFsbCByZXR1cm4gdHlwZXMgYXJlIGZyb20gdGhlIGNsYXNzIGNvbnRhbnRzDQogICAgICogQHJldHVybiBzdHJpbmcgTmFtZSBvZiB0aGUgYnJvd3Nlcg0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCcm93c2VyKCkNCiAgICB7DQogICAgICAgIHJldHVybiAkdGhpcy0+X2Jyb3dzZXJfbmFtZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTZXQgdGhlIG5hbWUgb2YgdGhlIGJyb3dzZXINCiAgICAgKiBAcGFyYW0gJGJyb3dzZXIgc3RyaW5nIFRoZSBuYW1lIG9mIHRoZSBCcm93c2VyDQogICAgICovDQogICAgcHVibGljIGZ1bmN0aW9uIHNldEJyb3dzZXIoJGJyb3dzZXIpDQogICAgew0KICAgICAgICAkdGhpcy0+X2Jyb3dzZXJfbmFtZSA9ICRicm93c2VyOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwbGF0Zm9ybS4gIEFsbCByZXR1cm4gdHlwZXMgYXJlIGZyb20gdGhlIGNsYXNzIGNvbnRhbnRzDQogICAgICogQHJldHVybiBzdHJpbmcgTmFtZSBvZiB0aGUgYnJvd3Nlcg0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQbGF0Zm9ybSgpDQogICAgew0KICAgICAgICByZXR1cm4gJHRoaXMtPl9wbGF0Zm9ybTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTZXQgdGhlIG5hbWUgb2YgdGhlIHBsYXRmb3JtDQogICAgICogQHBhcmFtIHN0cmluZyAkcGxhdGZvcm0gVGhlIG5hbWUgb2YgdGhlIFBsYXRmb3JtDQogICAgICovDQogICAgcHVibGljIGZ1bmN0aW9uIHNldFBsYXRmb3JtKCRwbGF0Zm9ybSkNCiAgICB7DQogICAgICAgICR0aGlzLT5fcGxhdGZvcm0gPSAkcGxhdGZvcm07DQogICAgfQ0KDQogICAgLyoqDQogICAgICogVGhlIHZlcnNpb24gb2YgdGhlIGJyb3dzZXIuDQogICAgICogQHJldHVybiBzdHJpbmcgVmVyc2lvbiBvZiB0aGUgYnJvd3NlciAod2lsbCBvbmx5IGNvbnRhaW4gYWxwaGEtbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBhIHBlcmlvZCkNCiAgICAgKi8NCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmVyc2lvbigpDQogICAgew0KICAgICAgICByZXR1cm4gJHRoaXMtPl92ZXJzaW9uOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFNldCB0aGUgdmVyc2lvbiBvZiB0aGUgYnJvd3Nlcg0KICAgICAqIEBwYXJhbSBzdHJpbmcgJHZlcnNpb24gVGhlIHZlcnNpb24gb2YgdGhlIEJyb3dzZXINCiAgICAgKi8NCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VmVyc2lvbigkdmVyc2lvbikNCiAgICB7DQogICAgICAgICR0aGlzLT5fdmVyc2lvbiA9IHByZWdfcmVwbGFjZSgnL1teMC05LC4sYS16LEEtWi1dLycsICcnLCAkdmVyc2lvbik7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogVGhlIHZlcnNpb24gb2YgQU9MLg0KICAgICAqIEByZXR1cm4gc3RyaW5nIFZlcnNpb24gb2YgQU9MICh3aWxsIG9ubHkgY29udGFpbiBhbHBoYS1udW1lcmljIGNoYXJhY3RlcnMgYW5kIGEgcGVyaW9kKQ0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBb2xWZXJzaW9uKCkNCiAgICB7DQogICAgICAgIHJldHVybiAkdGhpcy0+X2FvbF92ZXJzaW9uOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFNldCB0aGUgdmVyc2lvbiBvZiBBT0wNCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2ZXJzaW9uIFRoZSB2ZXJzaW9uIG9mIEFPTA0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBb2xWZXJzaW9uKCR2ZXJzaW9uKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9hb2xfdmVyc2lvbiA9IHByZWdfcmVwbGFjZSgnL1teMC05LC4sYS16LEEtWl0vJywgJycsICR2ZXJzaW9uKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBJcyB0aGUgYnJvd3NlciBmcm9tIEFPTD8NCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyBmcm9tIEFPTCBvdGhlcndpc2UgZmFsc2UNCiAgICAgKi8NCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNBb2woKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5faXNfYW9sOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIElzIHRoZSBicm93c2VyIGZyb20gYSBtb2JpbGUgZGV2aWNlPw0KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBicm93c2VyIGlzIGZyb20gYSBtb2JpbGUgZGV2aWNlIG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc01vYmlsZSgpDQogICAgew0KICAgICAgICByZXR1cm4gJHRoaXMtPl9pc19tb2JpbGU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogSXMgdGhlIGJyb3dzZXIgZnJvbSBhIHRhYmxldCBkZXZpY2U/DQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgZnJvbSBhIHRhYmxldCBkZXZpY2Ugb3RoZXJ3aXNlIGZhbHNlDQogICAgICovDQogICAgcHVibGljIGZ1bmN0aW9uIGlzVGFibGV0KCkNCiAgICB7DQogICAgICAgIHJldHVybiAkdGhpcy0+X2lzX3RhYmxldDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBJcyB0aGUgYnJvd3NlciBmcm9tIGEgcm9ib3QgKGV4IFNsdXJwLEdvb2dsZUJvdCk/DQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgZnJvbSBhIHJvYm90IG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1JvYm90KCkNCiAgICB7DQogICAgICAgIHJldHVybiAkdGhpcy0+X2lzX3JvYm90Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIElzIHRoZSBicm93c2VyIGZyb20gZmFjZWJvb2s/DQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgZnJvbSBmYWNlYm9vayBvdGhlcndpc2UgZmFsc2UNCiAgICAgKi8NCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNGYWNlYm9vaygpDQogICAgew0KICAgICAgICByZXR1cm4gJHRoaXMtPl9pc19mYWNlYm9vazsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTZXQgdGhlIGJyb3dzZXIgdG8gYmUgZnJvbSBBT0wNCiAgICAgKiBAcGFyYW0gJGlzQW9sDQogICAgICovDQogICAgcHVibGljIGZ1bmN0aW9uIHNldEFvbCgkaXNBb2wpDQogICAgew0KICAgICAgICAkdGhpcy0+X2lzX2FvbCA9ICRpc0FvbDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTZXQgdGhlIEJyb3dzZXIgdG8gYmUgbW9iaWxlDQogICAgICogQHBhcmFtIGJvb2xlYW4gJHZhbHVlIGlzIHRoZSBicm93c2VyIGEgbW9iaWxlIGJyb3dzZXIgb3Igbm90DQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHNldE1vYmlsZSgkdmFsdWUgPSB0cnVlKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9pc19tb2JpbGUgPSAkdmFsdWU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU2V0IHRoZSBCcm93c2VyIHRvIGJlIHRhYmxldA0KICAgICAqIEBwYXJhbSBib29sZWFuICR2YWx1ZSBpcyB0aGUgYnJvd3NlciBhIHRhYmxldCBicm93c2VyIG9yIG5vdA0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBzZXRUYWJsZXQoJHZhbHVlID0gdHJ1ZSkNCiAgICB7DQogICAgICAgICR0aGlzLT5faXNfdGFibGV0ID0gJHZhbHVlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFNldCB0aGUgQnJvd3NlciB0byBiZSBhIHJvYm90DQogICAgICogQHBhcmFtIGJvb2xlYW4gJHZhbHVlIGlzIHRoZSBicm93c2VyIGEgcm9ib3Qgb3Igbm90DQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHNldFJvYm90KCR2YWx1ZSA9IHRydWUpDQogICAgew0KICAgICAgICAkdGhpcy0+X2lzX3JvYm90ID0gJHZhbHVlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFNldCB0aGUgQnJvd3NlciB0byBiZSBhIEZhY2Vib29rIHJlcXVlc3QNCiAgICAgKiBAcGFyYW0gYm9vbGVhbiAkdmFsdWUgaXMgdGhlIGJyb3dzZXIgYSByb2JvdCBvciBub3QNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0RmFjZWJvb2soJHZhbHVlID0gdHJ1ZSkNCiAgICB7DQogICAgICAgICR0aGlzLT5faXNfZmFjZWJvb2sgPSAkdmFsdWU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogR2V0IHRoZSB1c2VyIGFnZW50IHZhbHVlIGluIHVzZSB0byBkZXRlcm1pbmUgdGhlIGJyb3dzZXINCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgdXNlciBhZ2VudCBmcm9tIHRoZSBIVFRQIGhlYWRlcg0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVc2VyQWdlbnQoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5fYWdlbnQ7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU2V0IHRoZSB1c2VyIGFnZW50IHZhbHVlICh0aGUgY29uc3RydWN0aW9uIHdpbGwgdXNlIHRoZSBIVFRQIGhlYWRlciB2YWx1ZSAtIHRoaXMgd2lsbCBvdmVyd3JpdGUgaXQpDQogICAgICogQHBhcmFtIHN0cmluZyAkYWdlbnRfc3RyaW5nIFRoZSB2YWx1ZSBmb3IgdGhlIFVzZXIgQWdlbnQNCiAgICAgKi8NCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VXNlckFnZW50KCRhZ2VudF9zdHJpbmcpDQogICAgew0KICAgICAgICAkdGhpcy0+cmVzZXQoKTsNCiAgICAgICAgJHRoaXMtPl9hZ2VudCA9ICRhZ2VudF9zdHJpbmc7DQogICAgICAgICR0aGlzLT5kZXRlcm1pbmUoKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBVc2VkIHRvIGRldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyBhY3R1YWxseSAiY2hyb21lZnJhbWUiDQogICAgICogQHNpbmNlIDEuNw0KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBicm93c2VyIGlzIHVzaW5nIGNocm9tZWZyYW1lDQogICAgICovDQogICAgcHVibGljIGZ1bmN0aW9uIGlzQ2hyb21lRnJhbWUoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIChzdHJwb3MoJHRoaXMtPl9hZ2VudCwgImNocm9tZWZyYW1lIikgIT09IGZhbHNlKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBSZXR1cm5zIGEgZm9ybWF0dGVkIHN0cmluZyB3aXRoIGEgc3VtbWFyeSBvZiB0aGUgZGV0YWlscyBvZiB0aGUgYnJvd3Nlci4NCiAgICAgKiBAcmV0dXJuIHN0cmluZyBmb3JtYXR0ZWQgc3RyaW5nIHdpdGggYSBzdW1tYXJ5IG9mIHRoZSBicm93c2VyDQogICAgICovDQogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICI8c3Ryb25nPkJyb3dzZXIgTmFtZTo8L3N0cm9uZz4geyR0aGlzLT5nZXRCcm93c2VyKCl9PGJyLz5cbiIgLg0KICAgICAgICAgICAgIjxzdHJvbmc+QnJvd3NlciBWZXJzaW9uOjwvc3Ryb25nPiB7JHRoaXMtPmdldFZlcnNpb24oKX08YnIvPlxuIiAuDQogICAgICAgICAgICAiPHN0cm9uZz5Ccm93c2VyIFVzZXIgQWdlbnQgU3RyaW5nOjwvc3Ryb25nPiB7JHRoaXMtPmdldFVzZXJBZ2VudCgpfTxici8+XG4iIC4NCiAgICAgICAgICAgICI8c3Ryb25nPlBsYXRmb3JtOjwvc3Ryb25nPiB7JHRoaXMtPmdldFBsYXRmb3JtKCl9PGJyLz4iOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFByb3RlY3RlZCByb3V0aW5lIHRvIGNhbGN1bGF0ZSBhbmQgZGV0ZXJtaW5lIHdoYXQgdGhlIGJyb3dzZXIgaXMgaW4gdXNlIChpbmNsdWRpbmcgcGxhdGZvcm0pDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGRldGVybWluZSgpDQogICAgew0KICAgICAgICAkdGhpcy0+Y2hlY2tQbGF0Zm9ybSgpOw0KICAgICAgICAkdGhpcy0+Y2hlY2tCcm93c2VycygpOw0KICAgICAgICAkdGhpcy0+Y2hlY2tGb3JBb2woKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBQcm90ZWN0ZWQgcm91dGluZSB0byBkZXRlcm1pbmUgdGhlIGJyb3dzZXIgdHlwZQ0KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBicm93c2VyIHdhcyBkZXRlY3RlZCBvdGhlcndpc2UgZmFsc2UNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tCcm93c2VycygpDQogICAgew0KICAgICAgICByZXR1cm4gKA0KICAgICAgICAgICAgLy8gd2VsbC1rbm93biwgd2VsbC11c2VkDQogICAgICAgICAgICAvLyBTcGVjaWFsIE5vdGVzOg0KICAgICAgICAgICAgLy8gKDEpIE9wZXJhIG11c3QgYmUgY2hlY2tlZCBiZWZvcmUgRmlyZUZveCBkdWUgdG8gdGhlIG9kZA0KICAgICAgICAgICAgLy8gICAgIHVzZXIgYWdlbnRzIHVzZWQgaW4gc29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVyYQ0KICAgICAgICAgICAgLy8gKDIpIFdlYlRWIGlzIHN0cmFwcGVkIG9udG8gSW50ZXJuZXQgRXhwbG9yZXIgc28gd2UgbXVzdA0KICAgICAgICAgICAgLy8gICAgIGNoZWNrIGZvciBXZWJUViBiZWZvcmUgSUUNCiAgICAgICAgICAgIC8vICgzKSAoZGVwcmVjYXRlZCkgR2FsZW9uIGlzIGJhc2VkIG9uIEZpcmVmb3ggYW5kIG5lZWRzIHRvIGJlDQogICAgICAgICAgICAvLyAgICAgdGVzdGVkIGJlZm9yZSBGaXJlZm94IGlzIHRlc3RlZA0KICAgICAgICAgICAgLy8gKDQpIE9tbmlXZWIgaXMgYmFzZWQgb24gU2FmYXJpIHNvIE9tbmlXZWIgY2hlY2sgbXVzdCBvY2N1cg0KICAgICAgICAgICAgLy8gICAgIGJlZm9yZSBTYWZhcmkNCiAgICAgICAgICAgIC8vICg1KSBOZXRzY2FwZSA5KyBpcyBiYXNlZCBvbiBGaXJlZm94IHNvIE5ldHNjYXBlIGNoZWNrcw0KICAgICAgICAgICAgLy8gICAgIGJlZm9yZSBGaXJlRm94IGFyZSBuZWNlc3NhcnkNCiAgICAgICAgICAgIC8vICg2KSBWaXZhbGRpIGlzIFVBIGNvbnRhaW5zIGJvdGggRmlyZWZveCBhbmQgQ2hyb21lIHNvIFZpdmFsZGkgY2hlY2tzDQogICAgICAgICAgICAvLyAgICAgYmVmb3JlIEZpcmVmb3ggYW5kIENocm9tZQ0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3NlcldlYlR2KCkgfHwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJCcmF2ZSgpIHx8DQogICAgICAgICAgICAkdGhpcy0+Y2hlY2tCcm93c2VyVUNCcm93c2VyKCkgfHwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJFZGdlKCkgfHwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJJbnRlcm5ldEV4cGxvcmVyKCkgfHwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJPcGVyYSgpIHx8DQogICAgICAgICAgICAkdGhpcy0+Y2hlY2tCcm93c2VyR2FsZW9uKCkgfHwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJOZXRzY2FwZU5hdmlnYXRvcjlQbHVzKCkgfHwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJWaXZhbGRpKCkgfHwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJZYW5kZXgoKSB8fA0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3NlclBhbGVtb29uKCkgfHwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJGaXJlZm94KCkgfHwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJDaHJvbWUoKSB8fA0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3Nlck9tbmlXZWIoKSB8fA0KDQogICAgICAgICAgICAvLyBjb21tb24gbW9iaWxlDQogICAgICAgICAgICAkdGhpcy0+Y2hlY2tCcm93c2VyQW5kcm9pZCgpIHx8DQogICAgICAgICAgICAkdGhpcy0+Y2hlY2tCcm93c2VyaVBhZCgpIHx8DQogICAgICAgICAgICAkdGhpcy0+Y2hlY2tCcm93c2VyaVBvZCgpIHx8DQogICAgICAgICAgICAkdGhpcy0+Y2hlY2tCcm93c2VyaVBob25lKCkgfHwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJCbGFja0JlcnJ5KCkgfHwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJOb2tpYSgpIHx8DQoNCiAgICAgICAgICAgIC8vIGNvbW1vbiBib3RzDQogICAgICAgICAgICAkdGhpcy0+Y2hlY2tCcm93c2VyR29vZ2xlQm90KCkgfHwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJNU05Cb3QoKSB8fA0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3NlckJpbmdCb3QoKSB8fA0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3NlclNsdXJwKCkgfHwNCg0KICAgICAgICAgICAgLy8gWWFuZGV4IGJvdHMNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJZYW5kZXhCb3QoKSB8fA0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3NlcllhbmRleEltYWdlUmVzaXplckJvdCgpIHx8DQogICAgICAgICAgICAkdGhpcy0+Y2hlY2tCcm93c2VyWWFuZGV4QmxvZ3NCb3QoKSB8fA0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3NlcllhbmRleENhdGFsb2dCb3QoKSB8fA0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3NlcllhbmRleERpcmVjdEJvdCgpIHx8DQogICAgICAgICAgICAkdGhpcy0+Y2hlY2tCcm93c2VyWWFuZGV4RmF2aWNvbnNCb3QoKSB8fA0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3NlcllhbmRleEltYWdlc0JvdCgpIHx8DQogICAgICAgICAgICAkdGhpcy0+Y2hlY2tCcm93c2VyWWFuZGV4TWVkaWFCb3QoKSB8fA0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3NlcllhbmRleE1ldHJpa2FCb3QoKSB8fA0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3NlcllhbmRleE5ld3NCb3QoKSB8fA0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3NlcllhbmRleFZpZGVvQm90KCkgfHwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJZYW5kZXhXZWJtYXN0ZXJCb3QoKSB8fA0KDQogICAgICAgICAgICAvLyBjaGVjayBmb3IgZmFjZWJvb2sgZXh0ZXJuYWwgaGl0IHdoZW4gbG9hZGluZyBVUkwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0ZhY2Vib29rRXh0ZXJuYWxIaXQoKSB8fA0KDQogICAgICAgICAgICAvLyBXZWJLaXQgYmFzZSBjaGVjayAocG9zdCBtb2JpbGUgYW5kIG90aGVycykNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJTYW1zdW5nKCkgfHwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJTaWxrKCkgfHwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJTYWZhcmkoKSB8fA0KDQogICAgICAgICAgICAvLyBldmVyeW9uZSBlbHNlDQogICAgICAgICAgICAkdGhpcy0+Y2hlY2tCcm93c2VyTmV0UG9zaXRpdmUoKSB8fA0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3NlckZpcmViaXJkKCkgfHwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJLb25xdWVyb3IoKSB8fA0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3NlckljYWIoKSB8fA0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3NlclBob2VuaXgoKSB8fA0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3NlckFtYXlhKCkgfHwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJMeW54KCkgfHwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJTaGlyZXRva28oKSB8fA0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3NlckljZUNhdCgpIHx8DQogICAgICAgICAgICAkdGhpcy0+Y2hlY2tCcm93c2VySWNld2Vhc2VsKCkgfHwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJXM0NWYWxpZGF0b3IoKSB8fA0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3NlckN1cmwoKSB8fA0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3NlcldnZXQoKSB8fA0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3NlclBsYXlTdGF0aW9uKCkgfHwNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0Jyb3dzZXJJZnJhbWVseSgpIHx8DQogICAgICAgICAgICAkdGhpcy0+Y2hlY2tCcm93c2VyQ29jb2EoKSB8fA0KICAgICAgICAgICAgJHRoaXMtPmNoZWNrQnJvd3Nlck1vemlsbGEoKSAvKiBNb3ppbGxhIGlzIHN1Y2ggYW4gb3BlbiBzdGFuZGFyZCB0aGF0IHlvdSBtdXN0IGNoZWNrIGl0IGxhc3QgKi8pOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgdXNlciBpcyB1c2luZyBhIEJsYWNrQmVycnkgKGxhc3QgdXBkYXRlZCAxLjcpDQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgdGhlIEJsYWNrQmVycnkgYnJvd3NlciBvdGhlcndpc2UgZmFsc2UNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tCcm93c2VyQmxhY2tCZXJyeSgpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnYmxhY2tiZXJyeScpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJGFyZXN1bHQgPSBleHBsb2RlKCcvJywgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAiQmxhY2tCZXJyeSIpKTsNCiAgICAgICAgICAgIGlmIChpc3NldCgkYXJlc3VsdFsxXSkpIHsNCiAgICAgICAgICAgICAgICAkYXZlcnNpb24gPSBleHBsb2RlKCcgJywgJGFyZXN1bHRbMV0pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKCRhdmVyc2lvblswXSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPl9icm93c2VyX25hbWUgPSBzZWxmOjpCUk9XU0VSX0JMQUNLQkVSUlk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldE1vYmlsZSh0cnVlKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRGV0ZXJtaW5lIGlmIHRoZSB1c2VyIGlzIHVzaW5nIGFuIEFPTCBVc2VyIEFnZW50IChsYXN0IHVwZGF0ZWQgMS43KQ0KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBicm93c2VyIGlzIGZyb20gQU9MIG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0ZvckFvbCgpDQogICAgew0KICAgICAgICAkdGhpcy0+c2V0QW9sKGZhbHNlKTsNCiAgICAgICAgJHRoaXMtPnNldEFvbFZlcnNpb24oc2VsZjo6VkVSU0lPTl9VTktOT1dOKTsNCg0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnYW9sJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkYXZlcnNpb24gPSBleHBsb2RlKCcgJywgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAnQU9MJykpOw0KICAgICAgICAgICAgaWYgKGlzc2V0KCRhdmVyc2lvblsxXSkpIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0QW9sKHRydWUpOw0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRBb2xWZXJzaW9uKHByZWdfcmVwbGFjZSgnL1teMC05XC5hLXpdL2knLCAnJywgJGF2ZXJzaW9uWzFdKSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgR29vZ2xlQm90IG9yIG5vdCAobGFzdCB1cGRhdGVkIDEuNykNCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgR29vZ2xldEJvdCBvdGhlcndpc2UgZmFsc2UNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tCcm93c2VyR29vZ2xlQm90KCkNCiAgICB7DQogICAgICAgIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdnb29nbGVib3QnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICRhcmVzdWx0ID0gZXhwbG9kZSgnLycsIHN0cmlzdHIoJHRoaXMtPl9hZ2VudCwgJ2dvb2dsZWJvdCcpKTsNCiAgICAgICAgICAgIGlmIChpc3NldCgkYXJlc3VsdFsxXSkpIHsNCiAgICAgICAgICAgICAgICAkYXZlcnNpb24gPSBleHBsb2RlKCcgJywgJGFyZXN1bHRbMV0pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKHN0cl9yZXBsYWNlKCc7JywgJycsICRhdmVyc2lvblswXSkpOw0KICAgICAgICAgICAgICAgICR0aGlzLT5fYnJvd3Nlcl9uYW1lID0gc2VsZjo6QlJPV1NFUl9HT09HTEVCT1Q7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFJvYm90KHRydWUpOw0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIGJyb3dzZXIgaXMgdGhlIFlhbmRleEJvdCBvciBub3QNCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgWWFuZGV4Qm90IG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJZYW5kZXhCb3QoKQ0KICAgIHsNCiAgICAgICAgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ1lhbmRleEJvdCcpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJGFyZXN1bHQgPSBleHBsb2RlKCcvJywgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAnWWFuZGV4Qm90JykpOw0KICAgICAgICAgICAgaWYgKGlzc2V0KCRhcmVzdWx0WzFdKSkgew0KICAgICAgICAgICAgICAgICRhdmVyc2lvbiA9IGV4cGxvZGUoJyAnLCAkYXJlc3VsdFsxXSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oc3RyX3JlcGxhY2UoJzsnLCAnJywgJGF2ZXJzaW9uWzBdKSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPl9icm93c2VyX25hbWUgPSBzZWxmOjpCUk9XU0VSX1lBTkRFWEJPVDsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Um9ib3QodHJ1ZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgWWFuZGV4SW1hZ2VSZXNpemVyIG9yIG5vdA0KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBicm93c2VyIGlzIHRoZSBZYW5kZXhJbWFnZVJlc2l6ZXIgb3RoZXJ3aXNlIGZhbHNlDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrQnJvd3NlcllhbmRleEltYWdlUmVzaXplckJvdCgpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnWWFuZGV4SW1hZ2VSZXNpemVyJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkYXJlc3VsdCA9IGV4cGxvZGUoJy8nLCBzdHJpc3RyKCR0aGlzLT5fYWdlbnQsICdZYW5kZXhJbWFnZVJlc2l6ZXInKSk7DQogICAgICAgICAgICBpZiAoaXNzZXQoJGFyZXN1bHRbMV0pKSB7DQogICAgICAgICAgICAgICAgJGF2ZXJzaW9uID0gZXhwbG9kZSgnICcsICRhcmVzdWx0WzFdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbihzdHJfcmVwbGFjZSgnOycsICcnLCAkYXZlcnNpb25bMF0pKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+X2Jyb3dzZXJfbmFtZSA9IHNlbGY6OkJST1dTRVJfWUFOREVYSU1BR0VSRVNJWkVSX0JPVDsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Um9ib3QodHJ1ZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgWWFuZGV4Q2F0YWxvZyBvciBub3QNCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgWWFuZGV4Q2F0YWxvZyBvdGhlcndpc2UgZmFsc2UNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tCcm93c2VyWWFuZGV4Q2F0YWxvZ0JvdCgpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnWWFuZGV4Q2F0YWxvZycpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJGFyZXN1bHQgPSBleHBsb2RlKCcvJywgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAnWWFuZGV4Q2F0YWxvZycpKTsNCiAgICAgICAgICAgIGlmIChpc3NldCgkYXJlc3VsdFsxXSkpIHsNCiAgICAgICAgICAgICAgICAkYXZlcnNpb24gPSBleHBsb2RlKCcgJywgJGFyZXN1bHRbMV0pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKHN0cl9yZXBsYWNlKCc7JywgJycsICRhdmVyc2lvblswXSkpOw0KICAgICAgICAgICAgICAgICR0aGlzLT5fYnJvd3Nlcl9uYW1lID0gc2VsZjo6QlJPV1NFUl9ZQU5ERVhDQVRBTE9HX0JPVDsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Um9ib3QodHJ1ZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgWWFuZGV4TmV3cyBvciBub3QNCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgWWFuZGV4TmV3cyBvdGhlcndpc2UgZmFsc2UNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tCcm93c2VyWWFuZGV4TmV3c0JvdCgpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnWWFuZGV4TmV3cycpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJGFyZXN1bHQgPSBleHBsb2RlKCcvJywgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAnWWFuZGV4TmV3cycpKTsNCiAgICAgICAgICAgIGlmIChpc3NldCgkYXJlc3VsdFsxXSkpIHsNCiAgICAgICAgICAgICAgICAkYXZlcnNpb24gPSBleHBsb2RlKCcgJywgJGFyZXN1bHRbMV0pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKHN0cl9yZXBsYWNlKCc7JywgJycsICRhdmVyc2lvblswXSkpOw0KICAgICAgICAgICAgICAgICR0aGlzLT5fYnJvd3Nlcl9uYW1lID0gc2VsZjo6QlJPV1NFUl9ZQU5ERVhORVdTX0JPVDsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Um9ib3QodHJ1ZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgWWFuZGV4TWV0cmlrYSBvciBub3QNCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgWWFuZGV4TWV0cmlrYSBvdGhlcndpc2UgZmFsc2UNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tCcm93c2VyWWFuZGV4TWV0cmlrYUJvdCgpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnWWFuZGV4TWV0cmlrYScpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJGFyZXN1bHQgPSBleHBsb2RlKCcvJywgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAnWWFuZGV4TWV0cmlrYScpKTsNCiAgICAgICAgICAgIGlmIChpc3NldCgkYXJlc3VsdFsxXSkpIHsNCiAgICAgICAgICAgICAgICAkYXZlcnNpb24gPSBleHBsb2RlKCcgJywgJGFyZXN1bHRbMV0pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKHN0cl9yZXBsYWNlKCc7JywgJycsICRhdmVyc2lvblswXSkpOw0KICAgICAgICAgICAgICAgICR0aGlzLT5fYnJvd3Nlcl9uYW1lID0gc2VsZjo6QlJPV1NFUl9ZQU5ERVhNRVRSSUtBX0JPVDsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Um9ib3QodHJ1ZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgWWFuZGV4RGlyZWN0IG9yIG5vdA0KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBicm93c2VyIGlzIHRoZSBZYW5kZXhEaXJlY3Qgb3RoZXJ3aXNlIGZhbHNlDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrQnJvd3NlcllhbmRleERpcmVjdEJvdCgpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnWWFuZGV4RGlyZWN0JykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkYXJlc3VsdCA9IGV4cGxvZGUoJy8nLCBzdHJpc3RyKCR0aGlzLT5fYWdlbnQsICdZYW5kZXhEaXJlY3QnKSk7DQogICAgICAgICAgICBpZiAoaXNzZXQoJGFyZXN1bHRbMV0pKSB7DQogICAgICAgICAgICAgICAgJGF2ZXJzaW9uID0gZXhwbG9kZSgnICcsICRhcmVzdWx0WzFdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbihzdHJfcmVwbGFjZSgnOycsICcnLCAkYXZlcnNpb25bMF0pKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+X2Jyb3dzZXJfbmFtZSA9IHNlbGY6OkJST1dTRVJfWUFOREVYRElSRUNUX0JPVDsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Um9ib3QodHJ1ZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgWWFuZGV4V2VibWFzdGVyIG9yIG5vdA0KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBicm93c2VyIGlzIHRoZSBZYW5kZXhXZWJtYXN0ZXIgb3RoZXJ3aXNlIGZhbHNlDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrQnJvd3NlcllhbmRleFdlYm1hc3RlckJvdCgpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnWWFuZGV4V2VibWFzdGVyJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkYXJlc3VsdCA9IGV4cGxvZGUoJy8nLCBzdHJpc3RyKCR0aGlzLT5fYWdlbnQsICdZYW5kZXhXZWJtYXN0ZXInKSk7DQogICAgICAgICAgICBpZiAoaXNzZXQoJGFyZXN1bHRbMV0pKSB7DQogICAgICAgICAgICAgICAgJGF2ZXJzaW9uID0gZXhwbG9kZSgnICcsICRhcmVzdWx0WzFdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbihzdHJfcmVwbGFjZSgnOycsICcnLCAkYXZlcnNpb25bMF0pKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+X2Jyb3dzZXJfbmFtZSA9IHNlbGY6OkJST1dTRVJfWUFOREVYV0VCTUFTVEVSX0JPVDsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Um9ib3QodHJ1ZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgWWFuZGV4RmF2aWNvbnMgb3Igbm90DQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgdGhlIFlhbmRleEZhdmljb25zIG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJZYW5kZXhGYXZpY29uc0JvdCgpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnWWFuZGV4RmF2aWNvbnMnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICRhcmVzdWx0ID0gZXhwbG9kZSgnLycsIHN0cmlzdHIoJHRoaXMtPl9hZ2VudCwgJ1lhbmRleEZhdmljb25zJykpOw0KICAgICAgICAgICAgaWYgKGlzc2V0KCRhcmVzdWx0WzFdKSkgew0KICAgICAgICAgICAgICAgICRhdmVyc2lvbiA9IGV4cGxvZGUoJyAnLCAkYXJlc3VsdFsxXSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oc3RyX3JlcGxhY2UoJzsnLCAnJywgJGF2ZXJzaW9uWzBdKSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPl9icm93c2VyX25hbWUgPSBzZWxmOjpCUk9XU0VSX1lBTkRFWEZBVklDT05TX0JPVDsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Um9ib3QodHJ1ZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgWWFuZGV4QmxvZ3Mgb3Igbm90DQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgdGhlIFlhbmRleEJsb2dzIG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJZYW5kZXhCbG9nc0JvdCgpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnWWFuZGV4QmxvZ3MnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICRhcmVzdWx0ID0gZXhwbG9kZSgnLycsIHN0cmlzdHIoJHRoaXMtPl9hZ2VudCwgJ1lhbmRleEJsb2dzJykpOw0KICAgICAgICAgICAgaWYgKGlzc2V0KCRhcmVzdWx0WzFdKSkgew0KICAgICAgICAgICAgICAgICRhdmVyc2lvbiA9IGV4cGxvZGUoJyAnLCAkYXJlc3VsdFsxXSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oc3RyX3JlcGxhY2UoJzsnLCAnJywgJGF2ZXJzaW9uWzBdKSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPl9icm93c2VyX25hbWUgPSBzZWxmOjpCUk9XU0VSX1lBTkRFWEJMT0dTX0JPVDsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Um9ib3QodHJ1ZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgWWFuZGV4TWVkaWEgb3Igbm90DQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgdGhlIFlhbmRleE1lZGlhIG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJZYW5kZXhNZWRpYUJvdCgpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnWWFuZGV4TWVkaWEnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICRhcmVzdWx0ID0gZXhwbG9kZSgnLycsIHN0cmlzdHIoJHRoaXMtPl9hZ2VudCwgJ1lhbmRleE1lZGlhJykpOw0KICAgICAgICAgICAgaWYgKGlzc2V0KCRhcmVzdWx0WzFdKSkgew0KICAgICAgICAgICAgICAgICRhdmVyc2lvbiA9IGV4cGxvZGUoJyAnLCAkYXJlc3VsdFsxXSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oc3RyX3JlcGxhY2UoJzsnLCAnJywgJGF2ZXJzaW9uWzBdKSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPl9icm93c2VyX25hbWUgPSBzZWxmOjpCUk9XU0VSX1lBTkRFWE1FRElBX0JPVDsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Um9ib3QodHJ1ZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgWWFuZGV4VmlkZW8gb3Igbm90DQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgdGhlIFlhbmRleFZpZGVvIG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJZYW5kZXhWaWRlb0JvdCgpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnWWFuZGV4VmlkZW8nKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICRhcmVzdWx0ID0gZXhwbG9kZSgnLycsIHN0cmlzdHIoJHRoaXMtPl9hZ2VudCwgJ1lhbmRleFZpZGVvJykpOw0KICAgICAgICAgICAgaWYgKGlzc2V0KCRhcmVzdWx0WzFdKSkgew0KICAgICAgICAgICAgICAgICRhdmVyc2lvbiA9IGV4cGxvZGUoJyAnLCAkYXJlc3VsdFsxXSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oc3RyX3JlcGxhY2UoJzsnLCAnJywgJGF2ZXJzaW9uWzBdKSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPl9icm93c2VyX25hbWUgPSBzZWxmOjpCUk9XU0VSX1lBTkRFWFZJREVPX0JPVDsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Um9ib3QodHJ1ZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgWWFuZGV4SW1hZ2VzIG9yIG5vdA0KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBicm93c2VyIGlzIHRoZSBZYW5kZXhJbWFnZXMgb3RoZXJ3aXNlIGZhbHNlDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrQnJvd3NlcllhbmRleEltYWdlc0JvdCgpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnWWFuZGV4SW1hZ2VzJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkYXJlc3VsdCA9IGV4cGxvZGUoJy8nLCBzdHJpc3RyKCR0aGlzLT5fYWdlbnQsICdZYW5kZXhJbWFnZXMnKSk7DQogICAgICAgICAgICBpZiAoaXNzZXQoJGFyZXN1bHRbMV0pKSB7DQogICAgICAgICAgICAgICAgJGF2ZXJzaW9uID0gZXhwbG9kZSgnICcsICRhcmVzdWx0WzFdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbihzdHJfcmVwbGFjZSgnOycsICcnLCAkYXZlcnNpb25bMF0pKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+X2Jyb3dzZXJfbmFtZSA9IHNlbGY6OkJST1dTRVJfWUFOREVYSU1BR0VTX0JPVDsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Um9ib3QodHJ1ZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgTVNOQm90IG9yIG5vdCAobGFzdCB1cGRhdGVkIDEuOSkNCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgTVNOQm90IG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJNU05Cb3QoKQ0KICAgIHsNCiAgICAgICAgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgIm1zbmJvdCIpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJGFyZXN1bHQgPSBleHBsb2RlKCIvIiwgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAibXNuYm90IikpOw0KICAgICAgICAgICAgaWYgKGlzc2V0KCRhcmVzdWx0WzFdKSkgew0KICAgICAgICAgICAgICAgICRhdmVyc2lvbiA9IGV4cGxvZGUoIiAiLCAkYXJlc3VsdFsxXSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oc3RyX3JlcGxhY2UoIjsiLCAnJywgJGF2ZXJzaW9uWzBdKSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPl9icm93c2VyX25hbWUgPSBzZWxmOjpCUk9XU0VSX01TTkJPVDsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Um9ib3QodHJ1ZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgQmluZ0JvdCBvciBub3QgKGxhc3QgdXBkYXRlZCAxLjkpDQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgdGhlIEJpbmdCb3Qgb3RoZXJ3aXNlIGZhbHNlDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrQnJvd3NlckJpbmdCb3QoKQ0KICAgIHsNCiAgICAgICAgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgImJpbmdib3QiKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICRhcmVzdWx0ID0gZXhwbG9kZSgiLyIsIHN0cmlzdHIoJHRoaXMtPl9hZ2VudCwgImJpbmdib3QiKSk7DQogICAgICAgICAgICBpZiAoaXNzZXQoJGFyZXN1bHRbMV0pKSB7DQogICAgICAgICAgICAgICAgJGF2ZXJzaW9uID0gZXhwbG9kZSgiICIsICRhcmVzdWx0WzFdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbihzdHJfcmVwbGFjZSgiOyIsICcnLCAkYXZlcnNpb25bMF0pKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+X2Jyb3dzZXJfbmFtZSA9IHNlbGY6OkJST1dTRVJfQklOR0JPVDsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Um9ib3QodHJ1ZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgVzNDIFZhbGlkYXRvciBvciBub3QgKGxhc3QgdXBkYXRlZCAxLjcpDQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgdGhlIFczQyBWYWxpZGF0b3Igb3RoZXJ3aXNlIGZhbHNlDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrQnJvd3NlclczQ1ZhbGlkYXRvcigpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnVzNDLWNoZWNrbGluaycpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJGFyZXN1bHQgPSBleHBsb2RlKCcvJywgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAnVzNDLWNoZWNrbGluaycpKTsNCiAgICAgICAgICAgIGlmIChpc3NldCgkYXJlc3VsdFsxXSkpIHsNCiAgICAgICAgICAgICAgICAkYXZlcnNpb24gPSBleHBsb2RlKCcgJywgJGFyZXN1bHRbMV0pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKCRhdmVyc2lvblswXSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPl9icm93c2VyX25hbWUgPSBzZWxmOjpCUk9XU0VSX1czQ1ZBTElEQVRPUjsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdXM0NfVmFsaWRhdG9yJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAvLyBTb21lIG9mIHRoZSBWYWxpZGF0b3IgdmVyc2lvbnMgZG8gbm90IGRlbGluZWF0ZSB3LyBhIHNsYXNoIC0gYWRkIGl0IGJhY2sgaW4NCiAgICAgICAgICAgICR1YSA9IHN0cl9yZXBsYWNlKCJXM0NfVmFsaWRhdG9yICIsICJXM0NfVmFsaWRhdG9yLyIsICR0aGlzLT5fYWdlbnQpOw0KICAgICAgICAgICAgJGFyZXN1bHQgPSBleHBsb2RlKCcvJywgc3RyaXN0cigkdWEsICdXM0NfVmFsaWRhdG9yJykpOw0KICAgICAgICAgICAgaWYgKGlzc2V0KCRhcmVzdWx0WzFdKSkgew0KICAgICAgICAgICAgICAgICRhdmVyc2lvbiA9IGV4cGxvZGUoJyAnLCAkYXJlc3VsdFsxXSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oJGF2ZXJzaW9uWzBdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+X2Jyb3dzZXJfbmFtZSA9IHNlbGY6OkJST1dTRVJfVzNDVkFMSURBVE9SOw0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2UgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ1czQy1tb2JpbGVPSycpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJHRoaXMtPl9icm93c2VyX25hbWUgPSBzZWxmOjpCUk9XU0VSX1czQ1ZBTElEQVRPUjsNCiAgICAgICAgICAgICR0aGlzLT5zZXRNb2JpbGUodHJ1ZSk7DQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRGV0ZXJtaW5lIGlmIHRoZSBicm93c2VyIGlzIHRoZSBZYWhvbyEgU2x1cnAgUm9ib3Qgb3Igbm90IChsYXN0IHVwZGF0ZWQgMS43KQ0KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBicm93c2VyIGlzIHRoZSBZYWhvbyEgU2x1cnAgUm9ib3Qgb3RoZXJ3aXNlIGZhbHNlDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrQnJvd3NlclNsdXJwKCkNCiAgICB7DQogICAgICAgIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdzbHVycCcpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJGFyZXN1bHQgPSBleHBsb2RlKCcvJywgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAnU2x1cnAnKSk7DQogICAgICAgICAgICBpZiAoaXNzZXQoJGFyZXN1bHRbMV0pKSB7DQogICAgICAgICAgICAgICAgJGF2ZXJzaW9uID0gZXhwbG9kZSgnICcsICRhcmVzdWx0WzFdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkYXZlcnNpb25bMF0pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5fYnJvd3Nlcl9uYW1lID0gc2VsZjo6QlJPV1NFUl9TTFVSUDsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Um9ib3QodHJ1ZSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldE1vYmlsZShmYWxzZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyBCcmF2ZSBvciBub3QNCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyBCcmF2ZSBvdGhlcndpc2UgZmFsc2UNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tCcm93c2VyQnJhdmUoKQ0KICAgIHsNCiAgICAgICAgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ0JyYXZlLycpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJGFSZXN1bHQgPSBleHBsb2RlKCcvJywgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAnQnJhdmUnKSk7DQogICAgICAgICAgICBpZiAoaXNzZXQoJGFSZXN1bHRbMV0pKSB7DQogICAgICAgICAgICAgICAgJGF2ZXJzaW9uID0gZXhwbG9kZSgnICcsICRhUmVzdWx0WzFdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkYXZlcnNpb25bMF0pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRCcm93c2VyKHNlbGY6OkJST1dTRVJfQlJBVkUpOw0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2VpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnIEJyYXZlICcpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJHRoaXMtPnNldEJyb3dzZXIoc2VsZjo6QlJPV1NFUl9CUkFWRSk7DQogICAgICAgICAgICAvLyB0aGlzIHZlcnNpb24gb2YgdGhlIFVBIGRpZCBub3Qgc2hpcCB3aXRoIGEgdmVyc2lvbiBtYXJrZXINCiAgICAgICAgICAgIC8vIGUuZy4gTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIDcuMDsgU00tRzk1NUYgQnVpbGQvTlJEOTBNKSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBCcmF2ZSBDaHJvbWUvNjguMC4zNDQwLjkxIE1vYmlsZSBTYWZhcmkvNTM3LjM2DQogICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbignJyk7DQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRGV0ZXJtaW5lIGlmIHRoZSBicm93c2VyIGlzIEVkZ2Ugb3Igbm90DQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgRWRnZSBvdGhlcndpc2UgZmFsc2UNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tCcm93c2VyRWRnZSgpDQogICAgew0KICAgICAgICBpZiAoJG5hbWUgPSAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnRWRnZS8nKSAhPT0gZmFsc2UgPyAnRWRnZScgOiAoKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ0VkZy8nKSAhPT0gZmFsc2UgfHwgc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnRWRnQS8nKSAhPT0gZmFsc2UpID8gJ0VkZycgOiBmYWxzZSkpKSB7DQogICAgICAgICAgICAkYXJlc3VsdCA9IGV4cGxvZGUoJy8nLCBzdHJpc3RyKCR0aGlzLT5fYWdlbnQsICRuYW1lKSk7DQogICAgICAgICAgICBpZiAoaXNzZXQoJGFyZXN1bHRbMV0pKSB7DQogICAgICAgICAgICAgICAgJGF2ZXJzaW9uID0gZXhwbG9kZSgnICcsICRhcmVzdWx0WzFdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkYXZlcnNpb25bMF0pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRCcm93c2VyKHNlbGY6OkJST1dTRVJfRURHRSk7DQogICAgICAgICAgICAgICAgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ1dpbmRvd3MgUGhvbmUnKSAhPT0gZmFsc2UgfHwgc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnQW5kcm9pZCcpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c2V0TW9iaWxlKHRydWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRGV0ZXJtaW5lIGlmIHRoZSBicm93c2VyIGlzIEludGVybmV0IEV4cGxvcmVyIG9yIG5vdCAobGFzdCB1cGRhdGVkIDEuNykNCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyBJbnRlcm5ldCBFeHBsb3JlciBvdGhlcndpc2UgZmFsc2UNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tCcm93c2VySW50ZXJuZXRFeHBsb3JlcigpDQogICAgew0KICAgICAgICAvLyAgVGVzdCBmb3IgSUUxMQ0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnVHJpZGVudC83LjA7IHJ2OjExLjAnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICR0aGlzLT5zZXRCcm93c2VyKHNlbGY6OkJST1dTRVJfSUUpOw0KICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oJzExLjAnKTsNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9IC8vIFRlc3QgZm9yIHYxIC0gdjEuNSBJRQ0KICAgICAgICBlbHNlIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdtaWNyb3NvZnQgaW50ZXJuZXQgZXhwbG9yZXInKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICR0aGlzLT5zZXRCcm93c2VyKHNlbGY6OkJST1dTRVJfSUUpOw0KICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oJzEuMCcpOw0KICAgICAgICAgICAgJGFyZXN1bHQgPSBzdHJpc3RyKCR0aGlzLT5fYWdlbnQsICcvJyk7DQogICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnLzMwOHw0MjV8NDI2fDQ3NHwwYjEvaScsICRhcmVzdWx0KSkgew0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKCcxLjUnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9IC8vIFRlc3QgZm9yIHZlcnNpb25zID4gMS41DQogICAgICAgIGVsc2UgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ21zaWUnKSAhPT0gZmFsc2UgJiYgc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnb3BlcmEnKSA9PT0gZmFsc2UpIHsNCiAgICAgICAgICAgIC8vIFNlZSBpZiB0aGUgYnJvd3NlciBpcyB0aGUgb2RkIE1TTiBFeHBsb3Jlcg0KICAgICAgICAgICAgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ21zbmInKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICAkYXJlc3VsdCA9IGV4cGxvZGUoJyAnLCBzdHJpc3RyKHN0cl9yZXBsYWNlKCc7JywgJzsgJywgJHRoaXMtPl9hZ2VudCksICdNU04nKSk7DQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhcmVzdWx0WzFdKSkgew0KICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX01TTik7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKHN0cl9yZXBsYWNlKGFycmF5KCcoJywgJyknLCAnOycpLCAnJywgJGFyZXN1bHRbMV0pKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGFyZXN1bHQgPSBleHBsb2RlKCcgJywgc3RyaXN0cihzdHJfcmVwbGFjZSgnOycsICc7ICcsICR0aGlzLT5fYWdlbnQpLCAnbXNpZScpKTsNCiAgICAgICAgICAgIGlmIChpc3NldCgkYXJlc3VsdFsxXSkpIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX0lFKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbihzdHJfcmVwbGFjZShhcnJheSgnKCcsICcpJywgJzsnKSwgJycsICRhcmVzdWx0WzFdKSk7DQogICAgICAgICAgICAgICAgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ0lFTW9iaWxlJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5zZXRCcm93c2VyKHNlbGY6OkJST1dTRVJfUE9DS0VUX0lFKTsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnNldE1vYmlsZSh0cnVlKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0gLy8gVGVzdCBmb3IgdmVyc2lvbnMgPiBJRSAxMA0KICAgICAgICBlbHNlIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICd0cmlkZW50JykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX0lFKTsNCiAgICAgICAgICAgICRyZXN1bHQgPSBleHBsb2RlKCdydjonLCAkdGhpcy0+X2FnZW50KTsNCiAgICAgICAgICAgIGlmIChpc3NldCgkcmVzdWx0WzFdKSkgew0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKHByZWdfcmVwbGFjZSgnL1teMC05Ll0rLycsICcnLCAkcmVzdWx0WzFdKSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPl9hZ2VudCA9IHN0cl9yZXBsYWNlKGFycmF5KCJNb3ppbGxhIiwgIkdlY2tvIiksICJNU0lFIiwgJHRoaXMtPl9hZ2VudCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0gLy8gVGVzdCBmb3IgUG9ja2V0IElFDQogICAgICAgIGVsc2UgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ21zcGllJykgIT09IGZhbHNlIHx8IHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ3BvY2tldCcpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJGFyZXN1bHQgPSBleHBsb2RlKCcgJywgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAnbXNwaWUnKSk7DQogICAgICAgICAgICBpZiAoaXNzZXQoJGFyZXN1bHRbMV0pKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFBsYXRmb3JtKHNlbGY6OlBMQVRGT1JNX1dJTkRPV1NfQ0UpOw0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRCcm93c2VyKHNlbGY6OkJST1dTRVJfUE9DS0VUX0lFKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0TW9iaWxlKHRydWUpOw0KDQogICAgICAgICAgICAgICAgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ21zcGllJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKCRhcmVzdWx0WzFdKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAkYXZlcnNpb24gPSBleHBsb2RlKCcvJywgJHRoaXMtPl9hZ2VudCk7DQogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkYXZlcnNpb25bMV0pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkYXZlcnNpb25bMV0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIGJyb3dzZXIgaXMgT3BlcmEgb3Igbm90IChsYXN0IHVwZGF0ZWQgMS43KQ0KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBicm93c2VyIGlzIE9wZXJhIG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJPcGVyYSgpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnb3BlcmEgbWluaScpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJHJlc3VsdGFudCA9IHN0cmlzdHIoJHRoaXMtPl9hZ2VudCwgJ29wZXJhIG1pbmknKTsNCiAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCcvXC8vJywgJHJlc3VsdGFudCkpIHsNCiAgICAgICAgICAgICAgICAkYXJlc3VsdCA9IGV4cGxvZGUoJy8nLCAkcmVzdWx0YW50KTsNCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGFyZXN1bHRbMV0pKSB7DQogICAgICAgICAgICAgICAgICAgICRhdmVyc2lvbiA9IGV4cGxvZGUoJyAnLCAkYXJlc3VsdFsxXSk7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKCRhdmVyc2lvblswXSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkYXZlcnNpb24gPSBleHBsb2RlKCcgJywgc3RyaXN0cigkcmVzdWx0YW50LCAnb3BlcmEgbWluaScpKTsNCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGF2ZXJzaW9uWzFdKSkgew0KICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkYXZlcnNpb25bMV0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0aGlzLT5fYnJvd3Nlcl9uYW1lID0gc2VsZjo6QlJPV1NFUl9PUEVSQV9NSU5JOw0KICAgICAgICAgICAgJHRoaXMtPnNldE1vYmlsZSh0cnVlKTsNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9IGVsc2UgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ29wZXJhJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkcmVzdWx0YW50ID0gc3RyaXN0cigkdGhpcy0+X2FnZW50LCAnb3BlcmEnKTsNCiAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCcvVmVyc2lvblwvKDEqLiopJC8nLCAkcmVzdWx0YW50LCAkbWF0Y2hlcykpIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkbWF0Y2hlc1sxXSk7DQogICAgICAgICAgICB9IGVsc2UgaWYgKHByZWdfbWF0Y2goJy9cLy8nLCAkcmVzdWx0YW50KSkgew0KICAgICAgICAgICAgICAgICRhcmVzdWx0ID0gZXhwbG9kZSgnLycsIHN0cl9yZXBsYWNlKCIoIiwgIiAiLCAkcmVzdWx0YW50KSk7DQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRhcmVzdWx0WzFdKSkgew0KICAgICAgICAgICAgICAgICAgICAkYXZlcnNpb24gPSBleHBsb2RlKCcgJywgJGFyZXN1bHRbMV0pOw0KICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkYXZlcnNpb25bMF0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJGF2ZXJzaW9uID0gZXhwbG9kZSgnICcsIHN0cmlzdHIoJHJlc3VsdGFudCwgJ29wZXJhJykpOw0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKGlzc2V0KCRhdmVyc2lvblsxXSkgPyAkYXZlcnNpb25bMV0gOiAnJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnT3BlcmEgTW9iaScpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRNb2JpbGUodHJ1ZSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGhpcy0+X2Jyb3dzZXJfbmFtZSA9IHNlbGY6OkJST1dTRVJfT1BFUkE7DQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfSBlbHNlIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdPUFInKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICRyZXN1bHRhbnQgPSBzdHJpc3RyKCR0aGlzLT5fYWdlbnQsICdPUFInKTsNCiAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCcvXC8vJywgJHJlc3VsdGFudCkpIHsNCiAgICAgICAgICAgICAgICAkYXJlc3VsdCA9IGV4cGxvZGUoJy8nLCBzdHJfcmVwbGFjZSgiKCIsICIgIiwgJHJlc3VsdGFudCkpOw0KICAgICAgICAgICAgICAgIGlmIChpc3NldCgkYXJlc3VsdFsxXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJGF2ZXJzaW9uID0gZXhwbG9kZSgnICcsICRhcmVzdWx0WzFdKTsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oJGF2ZXJzaW9uWzBdKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnTW9iaWxlJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldE1vYmlsZSh0cnVlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0aGlzLT5fYnJvd3Nlcl9uYW1lID0gc2VsZjo6QlJPV1NFUl9PUEVSQTsNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIGJyb3dzZXIgaXMgQ2hyb21lIG9yIG5vdCAobGFzdCB1cGRhdGVkIDEuNykNCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyBDaHJvbWUgb3RoZXJ3aXNlIGZhbHNlDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrQnJvd3NlckNocm9tZSgpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnQ2hyb21lJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkYXJlc3VsdCA9IHByZWdfc3BsaXQoJy9bXC87XSsvJywgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAnQ2hyb21lJykpOw0KICAgICAgICAgICAgaWYgKGlzc2V0KCRhcmVzdWx0WzFdKSkgew0KICAgICAgICAgICAgICAgICRhdmVyc2lvbiA9IGV4cGxvZGUoJyAnLCAkYXJlc3VsdFsxXSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oJGF2ZXJzaW9uWzBdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX0NIUk9NRSk7DQogICAgICAgICAgICAgICAgLy9DaHJvbWUgb24gQW5kcm9pZA0KICAgICAgICAgICAgICAgIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdBbmRyb2lkJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdNb2JpbGUnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5zZXRNb2JpbGUodHJ1ZSk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VGFibGV0KHRydWUpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyBXZWJUdiBvciBub3QgKGxhc3QgdXBkYXRlZCAxLjcpDQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgV2ViVHYgb3RoZXJ3aXNlIGZhbHNlDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrQnJvd3NlcldlYlR2KCkNCiAgICB7DQogICAgICAgIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICd3ZWJ0dicpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJGFyZXN1bHQgPSBleHBsb2RlKCcvJywgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAnd2VidHYnKSk7DQogICAgICAgICAgICBpZiAoaXNzZXQoJGFyZXN1bHRbMV0pKSB7DQogICAgICAgICAgICAgICAgJGF2ZXJzaW9uID0gZXhwbG9kZSgnICcsICRhcmVzdWx0WzFdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkYXZlcnNpb25bMF0pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRCcm93c2VyKHNlbGY6OkJST1dTRVJfV0VCVFYpOw0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIGJyb3dzZXIgaXMgTmV0UG9zaXRpdmUgb3Igbm90IChsYXN0IHVwZGF0ZWQgMS43KQ0KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBicm93c2VyIGlzIE5ldFBvc2l0aXZlIG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJOZXRQb3NpdGl2ZSgpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnTmV0UG9zaXRpdmUnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICRhcmVzdWx0ID0gZXhwbG9kZSgnLycsIHN0cmlzdHIoJHRoaXMtPl9hZ2VudCwgJ05ldFBvc2l0aXZlJykpOw0KICAgICAgICAgICAgaWYgKGlzc2V0KCRhcmVzdWx0WzFdKSkgew0KICAgICAgICAgICAgICAgICRhdmVyc2lvbiA9IGV4cGxvZGUoJyAnLCAkYXJlc3VsdFsxXSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oc3RyX3JlcGxhY2UoYXJyYXkoJygnLCAnKScsICc7JyksICcnLCAkYXZlcnNpb25bMF0pKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX05FVFBPU0lUSVZFKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRGV0ZXJtaW5lIGlmIHRoZSBicm93c2VyIGlzIEdhbGVvbiBvciBub3QgKGxhc3QgdXBkYXRlZCAxLjcpDQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgR2FsZW9uIG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJHYWxlb24oKQ0KICAgIHsNCiAgICAgICAgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ2dhbGVvbicpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJGFyZXN1bHQgPSBleHBsb2RlKCcgJywgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAnZ2FsZW9uJykpOw0KICAgICAgICAgICAgJGF2ZXJzaW9uID0gZXhwbG9kZSgnLycsICRhcmVzdWx0WzBdKTsNCiAgICAgICAgICAgIGlmIChpc3NldCgkYXZlcnNpb25bMV0pKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oJGF2ZXJzaW9uWzFdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX0dBTEVPTik7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyBLb25xdWVyb3Igb3Igbm90IChsYXN0IHVwZGF0ZWQgMS43KQ0KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBicm93c2VyIGlzIEtvbnF1ZXJvciBvdGhlcndpc2UgZmFsc2UNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tCcm93c2VyS29ucXVlcm9yKCkNCiAgICB7DQogICAgICAgIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdLb25xdWVyb3InKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICRhcmVzdWx0ID0gZXhwbG9kZSgnICcsIHN0cmlzdHIoJHRoaXMtPl9hZ2VudCwgJ0tvbnF1ZXJvcicpKTsNCiAgICAgICAgICAgICRhdmVyc2lvbiA9IGV4cGxvZGUoJy8nLCAkYXJlc3VsdFswXSk7DQogICAgICAgICAgICBpZiAoaXNzZXQoJGF2ZXJzaW9uWzFdKSkgew0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKCRhdmVyc2lvblsxXSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldEJyb3dzZXIoc2VsZjo6QlJPV1NFUl9LT05RVUVST1IpOw0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIGJyb3dzZXIgaXMgaUNhYiBvciBub3QgKGxhc3QgdXBkYXRlZCAxLjcpDQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgaUNhYiBvdGhlcndpc2UgZmFsc2UNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tCcm93c2VySWNhYigpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnaWNhYicpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJGF2ZXJzaW9uID0gZXhwbG9kZSgnICcsIHN0cmlzdHIoc3RyX3JlcGxhY2UoJy8nLCAnICcsICR0aGlzLT5fYWdlbnQpLCAnaWNhYicpKTsNCiAgICAgICAgICAgIGlmIChpc3NldCgkYXZlcnNpb25bMV0pKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oJGF2ZXJzaW9uWzFdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX0lDQUIpOw0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIGJyb3dzZXIgaXMgT21uaVdlYiBvciBub3QgKGxhc3QgdXBkYXRlZCAxLjcpDQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgT21uaVdlYiBvdGhlcndpc2UgZmFsc2UNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tCcm93c2VyT21uaVdlYigpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnb21uaXdlYicpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJGFyZXN1bHQgPSBleHBsb2RlKCcvJywgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAnb21uaXdlYicpKTsNCiAgICAgICAgICAgICRhdmVyc2lvbiA9IGV4cGxvZGUoJyAnLCBpc3NldCgkYXJlc3VsdFsxXSkgPyAkYXJlc3VsdFsxXSA6ICcnKTsNCiAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKCRhdmVyc2lvblswXSk7DQogICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX09NTklXRUIpOw0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyBQaG9lbml4IG9yIG5vdCAobGFzdCB1cGRhdGVkIDEuNykNCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyBQaG9lbml4IG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJQaG9lbml4KCkNCiAgICB7DQogICAgICAgIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdQaG9lbml4JykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkYXZlcnNpb24gPSBleHBsb2RlKCcvJywgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAnUGhvZW5peCcpKTsNCiAgICAgICAgICAgIGlmIChpc3NldCgkYXZlcnNpb25bMV0pKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oJGF2ZXJzaW9uWzFdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX1BIT0VOSVgpOw0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIGJyb3dzZXIgaXMgRmlyZWJpcmQgb3Igbm90IChsYXN0IHVwZGF0ZWQgMS43KQ0KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBicm93c2VyIGlzIEZpcmViaXJkIG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJGaXJlYmlyZCgpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnRmlyZWJpcmQnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICRhdmVyc2lvbiA9IGV4cGxvZGUoJy8nLCBzdHJpc3RyKCR0aGlzLT5fYWdlbnQsICdGaXJlYmlyZCcpKTsNCiAgICAgICAgICAgIGlmIChpc3NldCgkYXZlcnNpb25bMV0pKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oJGF2ZXJzaW9uWzFdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX0ZJUkVCSVJEKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRGV0ZXJtaW5lIGlmIHRoZSBicm93c2VyIGlzIE5ldHNjYXBlIE5hdmlnYXRvciA5KyBvciBub3QgKGxhc3QgdXBkYXRlZCAxLjcpDQogICAgICogTk9URTogKGh0dHA6Ly9icm93c2VyLm5ldHNjYXBlLmNvbS8gLSBPZmZpY2lhbCBzdXBwb3J0IGVuZGVkIG9uIE1hcmNoIDFzdCwgMjAwOCkNCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyBOZXRzY2FwZSBOYXZpZ2F0b3IgOSsgb3RoZXJ3aXNlIGZhbHNlDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrQnJvd3Nlck5ldHNjYXBlTmF2aWdhdG9yOVBsdXMoKQ0KICAgIHsNCiAgICAgICAgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ0ZpcmVmb3gnKSAhPT0gZmFsc2UgJiYgcHJlZ19tYXRjaCgnL05hdmlnYXRvclwvKFteIF0qKS9pJywgJHRoaXMtPl9hZ2VudCwgJG1hdGNoZXMpKSB7DQogICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkbWF0Y2hlc1sxXSk7DQogICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX05FVFNDQVBFX05BVklHQVRPUik7DQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfSBlbHNlIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdGaXJlZm94JykgPT09IGZhbHNlICYmIHByZWdfbWF0Y2goJy9OZXRzY2FwZTY/XC8oW14gXSopL2knLCAkdGhpcy0+X2FnZW50LCAkbWF0Y2hlcykpIHsNCiAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKCRtYXRjaGVzWzFdKTsNCiAgICAgICAgICAgICR0aGlzLT5zZXRCcm93c2VyKHNlbGY6OkJST1dTRVJfTkVUU0NBUEVfTkFWSUdBVE9SKTsNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIGJyb3dzZXIgaXMgU2hpcmV0b2tvIG9yIG5vdCAoaHR0cHM6Ly93aWtpLm1vemlsbGEub3JnL1Byb2plY3RzL3NoaXJldG9rbykgKGxhc3QgdXBkYXRlZCAxLjcpDQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgU2hpcmV0b2tvIG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJTaGlyZXRva28oKQ0KICAgIHsNCiAgICAgICAgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ01vemlsbGEnKSAhPT0gZmFsc2UgJiYgcHJlZ19tYXRjaCgnL1NoaXJldG9rb1wvKFteIF0qKS9pJywgJHRoaXMtPl9hZ2VudCwgJG1hdGNoZXMpKSB7DQogICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkbWF0Y2hlc1sxXSk7DQogICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX1NISVJFVE9LTyk7DQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRGV0ZXJtaW5lIGlmIHRoZSBicm93c2VyIGlzIEljZSBDYXQgb3Igbm90IChodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dOVV9JY2VDYXQpIChsYXN0IHVwZGF0ZWQgMS43KQ0KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBicm93c2VyIGlzIEljZSBDYXQgb3RoZXJ3aXNlIGZhbHNlDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrQnJvd3NlckljZUNhdCgpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnTW96aWxsYScpICE9PSBmYWxzZSAmJiBwcmVnX21hdGNoKCcvSWNlQ2F0XC8oW14gXSopL2knLCAkdGhpcy0+X2FnZW50LCAkbWF0Y2hlcykpIHsNCiAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKCRtYXRjaGVzWzFdKTsNCiAgICAgICAgICAgICR0aGlzLT5zZXRCcm93c2VyKHNlbGY6OkJST1dTRVJfSUNFQ0FUKTsNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIGJyb3dzZXIgaXMgTm9raWEgb3Igbm90IChsYXN0IHVwZGF0ZWQgMS43KQ0KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBicm93c2VyIGlzIE5va2lhIG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJOb2tpYSgpDQogICAgew0KICAgICAgICBpZiAocHJlZ19tYXRjaCgiL05va2lhKFteXC9dKylcLyhbXiBTUF0rKS9pIiwgJHRoaXMtPl9hZ2VudCwgJG1hdGNoZXMpKSB7DQogICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkbWF0Y2hlc1syXSk7DQogICAgICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnU2VyaWVzNjAnKSAhPT0gZmFsc2UgfHwgc3RycG9zKCR0aGlzLT5fYWdlbnQsICdTNjAnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX05PS0lBX1M2MCk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRCcm93c2VyKHNlbGY6OkJST1dTRVJfTk9LSUEpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHRoaXMtPnNldE1vYmlsZSh0cnVlKTsNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIGJyb3dzZXIgaXMgUGFsZW1vb24gb3Igbm90DQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgUGFsZW1vb24gb3RoZXJ3aXNlIGZhbHNlDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrQnJvd3NlclBhbGVtb29uKCkNCiAgICB7DQogICAgICAgIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdzYWZhcmknKSA9PT0gZmFsc2UpIHsNCiAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCIvUGFsZW1vb25bXC8gXChdKFteIDtcKV0rKS9pIiwgJHRoaXMtPl9hZ2VudCwgJG1hdGNoZXMpKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oJG1hdGNoZXNbMV0pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRCcm93c2VyKHNlbGY6OkJST1dTRVJfUEFMRU1PT04pOw0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChwcmVnX21hdGNoKCIvUGFsZW1vb24oWzAtOWEtekEtWlwuXSspL2kiLCAkdGhpcy0+X2FnZW50LCAkbWF0Y2hlcykpIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkbWF0Y2hlc1sxXSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldEJyb3dzZXIoc2VsZjo6QlJPV1NFUl9QQUxFTU9PTik7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9IGVsc2UgaWYgKHByZWdfbWF0Y2goIi9QYWxlbW9vbi9pIiwgJHRoaXMtPl9hZ2VudCwgJG1hdGNoZXMpKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oJycpOw0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRCcm93c2VyKHNlbGY6OkJST1dTRVJfUEFMRU1PT04pOw0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIGJyb3dzZXIgaXMgVUNCcm93c2VyIG9yIG5vdA0KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBicm93c2VyIGlzIFVDQnJvd3NlciBvdGhlcndpc2UgZmFsc2UNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tCcm93c2VyVUNCcm93c2VyKCkNCiAgICB7DQogICAgICAgIGlmIChwcmVnX21hdGNoKCcvVUMgP0Jyb3dzZXJcLz8oW1xkXC5dKykvJywgJHRoaXMtPl9hZ2VudCwgJG1hdGNoZXMpKSB7DQogICAgICAgICAgICBpZiAoaXNzZXQoJG1hdGNoZXNbMV0pKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oJG1hdGNoZXNbMV0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ01vYmlsZScpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRNb2JpbGUodHJ1ZSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRUYWJsZXQodHJ1ZSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX1VDQlJPV1NFUik7DQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRGV0ZXJtaW5lIGlmIHRoZSBicm93c2VyIGlzIEZpcmVmb3ggb3Igbm90DQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgRmlyZWZveCBvdGhlcndpc2UgZmFsc2UNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tCcm93c2VyRmlyZWZveCgpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnc2FmYXJpJykgPT09IGZhbHNlKSB7DQogICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgiL0ZpcmVmb3hbXC8gXChdKFteIDtcKV0rKS9pIiwgJHRoaXMtPl9hZ2VudCwgJG1hdGNoZXMpKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oJG1hdGNoZXNbMV0pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRCcm93c2VyKHNlbGY6OkJST1dTRVJfRklSRUZPWCk7DQogICAgICAgICAgICAgICAgLy9GaXJlZm94IG9uIEFuZHJvaWQNCiAgICAgICAgICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnQW5kcm9pZCcpICE9PSBmYWxzZSB8fCBzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdpUGhvbmUnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ01vYmlsZScpICE9PSBmYWxzZSB8fCBzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdUYWJsZXQnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5zZXRNb2JpbGUodHJ1ZSk7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VGFibGV0KHRydWUpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChwcmVnX21hdGNoKCIvRmlyZWZveChbMC05YS16QS1aXC5dKykvaSIsICR0aGlzLT5fYWdlbnQsICRtYXRjaGVzKSkgew0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKCRtYXRjaGVzWzFdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX0ZJUkVGT1gpOw0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChwcmVnX21hdGNoKCIvRmlyZWZveCQvaSIsICR0aGlzLT5fYWdlbnQsICRtYXRjaGVzKSkgew0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKCcnKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX0ZJUkVGT1gpOw0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2VpZiAocHJlZ19tYXRjaCgiL0Z4aU9TW1wvIFwoXShbXiA7XCldKykvaSIsICR0aGlzLT5fYWdlbnQsICRtYXRjaGVzKSkgew0KICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oJG1hdGNoZXNbMV0pOw0KICAgICAgICAgICAgJHRoaXMtPnNldEJyb3dzZXIoc2VsZjo6QlJPV1NFUl9GSVJFRk9YKTsNCiAgICAgICAgICAgIC8vRmlyZWZveCBvbiBBbmRyb2lkDQogICAgICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnQW5kcm9pZCcpICE9PSBmYWxzZSB8fCBzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdpUGhvbmUnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnTW9iaWxlJykgIT09IGZhbHNlIHx8IHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ1RhYmxldCcpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c2V0TW9iaWxlKHRydWUpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5zZXRUYWJsZXQodHJ1ZSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyBGaXJlZm94IG9yIG5vdCAobGFzdCB1cGRhdGVkIDEuNykNCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyBGaXJlZm94IG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJJY2V3ZWFzZWwoKQ0KICAgIHsNCiAgICAgICAgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ0ljZXdlYXNlbCcpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJGFyZXN1bHQgPSBleHBsb2RlKCcvJywgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAnSWNld2Vhc2VsJykpOw0KICAgICAgICAgICAgaWYgKGlzc2V0KCRhcmVzdWx0WzFdKSkgew0KICAgICAgICAgICAgICAgICRhdmVyc2lvbiA9IGV4cGxvZGUoJyAnLCAkYXJlc3VsdFsxXSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oJGF2ZXJzaW9uWzBdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX0lDRVdFQVNFTCk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyBNb3ppbGxhIG9yIG5vdCAobGFzdCB1cGRhdGVkIDEuNykNCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyBNb3ppbGxhIG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJNb3ppbGxhKCkNCiAgICB7DQogICAgICAgIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdtb3ppbGxhJykgIT09IGZhbHNlICYmIHByZWdfbWF0Y2goJy9ydjpbMC05XS5bMC05XVthLWJdPy9pJywgJHRoaXMtPl9hZ2VudCkgJiYgc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnbmV0c2NhcGUnKSA9PT0gZmFsc2UpIHsNCiAgICAgICAgICAgICRhdmVyc2lvbiA9IGV4cGxvZGUoJyAnLCBzdHJpc3RyKCR0aGlzLT5fYWdlbnQsICdydjonKSk7DQogICAgICAgICAgICBwcmVnX21hdGNoKCcvcnY6WzAtOV0uWzAtOV1bYS1iXT8vaScsICR0aGlzLT5fYWdlbnQsICRhdmVyc2lvbik7DQogICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbihzdHJfcmVwbGFjZSgncnY6JywgJycsICRhdmVyc2lvblswXSkpOw0KICAgICAgICAgICAgJHRoaXMtPnNldEJyb3dzZXIoc2VsZjo6QlJPV1NFUl9NT1pJTExBKTsNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9IGVsc2UgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ21vemlsbGEnKSAhPT0gZmFsc2UgJiYgcHJlZ19tYXRjaCgnL3J2OlswLTldXC5bMC05XS9pJywgJHRoaXMtPl9hZ2VudCkgJiYgc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnbmV0c2NhcGUnKSA9PT0gZmFsc2UpIHsNCiAgICAgICAgICAgICRhdmVyc2lvbiA9IGV4cGxvZGUoJycsIHN0cmlzdHIoJHRoaXMtPl9hZ2VudCwgJ3J2OicpKTsNCiAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKHN0cl9yZXBsYWNlKCdydjonLCAnJywgJGF2ZXJzaW9uWzBdKSk7DQogICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX01PWklMTEEpOw0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0gZWxzZSBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnbW96aWxsYScpICE9PSBmYWxzZSAmJiBwcmVnX21hdGNoKCcvbW96aWxsYVwvKFteIF0qKS9pJywgJHRoaXMtPl9hZ2VudCwgJG1hdGNoZXMpICYmIHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ25ldHNjYXBlJykgPT09IGZhbHNlKSB7DQogICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkbWF0Y2hlc1sxXSk7DQogICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX01PWklMTEEpOw0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyBMeW54IG9yIG5vdCAobGFzdCB1cGRhdGVkIDEuNykNCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyBMeW54IG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJMeW54KCkNCiAgICB7DQogICAgICAgIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdseW54JykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkYXJlc3VsdCA9IGV4cGxvZGUoJy8nLCBzdHJpc3RyKCR0aGlzLT5fYWdlbnQsICdMeW54JykpOw0KICAgICAgICAgICAgJGF2ZXJzaW9uID0gZXhwbG9kZSgnICcsIChpc3NldCgkYXJlc3VsdFsxXSkgPyAkYXJlc3VsdFsxXSA6ICcnKSk7DQogICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkYXZlcnNpb25bMF0pOw0KICAgICAgICAgICAgJHRoaXMtPnNldEJyb3dzZXIoc2VsZjo6QlJPV1NFUl9MWU5YKTsNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIGJyb3dzZXIgaXMgQW1heWEgb3Igbm90IChsYXN0IHVwZGF0ZWQgMS43KQ0KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBicm93c2VyIGlzIEFtYXlhIG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJBbWF5YSgpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnYW1heWEnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICRhcmVzdWx0ID0gZXhwbG9kZSgnLycsIHN0cmlzdHIoJHRoaXMtPl9hZ2VudCwgJ0FtYXlhJykpOw0KICAgICAgICAgICAgaWYgKGlzc2V0KCRhcmVzdWx0WzFdKSkgew0KICAgICAgICAgICAgICAgICRhdmVyc2lvbiA9IGV4cGxvZGUoJyAnLCAkYXJlc3VsdFsxXSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oJGF2ZXJzaW9uWzBdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX0FNQVlBKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRGV0ZXJtaW5lIGlmIHRoZSBicm93c2VyIGlzIFNhZmFyaSBvciBub3QgKGxhc3QgdXBkYXRlZCAxLjcpDQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgU2FmYXJpIG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJTYWZhcmkoKQ0KICAgIHsNCiAgICAgICAgaWYgKA0KICAgICAgICAgICAgc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnU2FmYXJpJykgIT09IGZhbHNlDQogICAgICAgICAgICAmJiBzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdpUGhvbmUnKSA9PT0gZmFsc2UNCiAgICAgICAgICAgICYmIHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ2lQb2QnKSA9PT0gZmFsc2UNCiAgICAgICAgKSB7DQoNCiAgICAgICAgICAgICRhcmVzdWx0ID0gZXhwbG9kZSgnLycsIHN0cmlzdHIoJHRoaXMtPl9hZ2VudCwgJ1ZlcnNpb24nKSk7DQogICAgICAgICAgICBpZiAoaXNzZXQoJGFyZXN1bHRbMV0pKSB7DQogICAgICAgICAgICAgICAgJGF2ZXJzaW9uID0gZXhwbG9kZSgnICcsICRhcmVzdWx0WzFdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkYXZlcnNpb25bMF0pOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbihzZWxmOjpWRVJTSU9OX1VOS05PV04pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHRoaXMtPnNldEJyb3dzZXIoc2VsZjo6QlJPV1NFUl9TQUZBUkkpOw0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJTYW1zdW5nKCkNCiAgICB7DQogICAgICAgIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdTYW1zdW5nQnJvd3NlcicpICE9PSBmYWxzZSkgew0KDQogICAgICAgICAgICAkYXJlc3VsdCA9IGV4cGxvZGUoJy8nLCBzdHJpc3RyKCR0aGlzLT5fYWdlbnQsICdTYW1zdW5nQnJvd3NlcicpKTsNCiAgICAgICAgICAgIGlmIChpc3NldCgkYXJlc3VsdFsxXSkpIHsNCiAgICAgICAgICAgICAgICAkYXZlcnNpb24gPSBleHBsb2RlKCcgJywgJGFyZXN1bHRbMV0pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKCRhdmVyc2lvblswXSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKHNlbGY6OlZFUlNJT05fVU5LTk9XTik7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX1NBTVNVTkcpOw0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJTaWxrKCkNCiAgICB7DQogICAgICAgIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdTaWxrJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkYXJlc3VsdCA9IGV4cGxvZGUoJy8nLCBzdHJpc3RyKCR0aGlzLT5fYWdlbnQsICdTaWxrJykpOw0KICAgICAgICAgICAgaWYgKGlzc2V0KCRhcmVzdWx0WzFdKSkgew0KICAgICAgICAgICAgICAgICRhdmVyc2lvbiA9IGV4cGxvZGUoJyAnLCAkYXJlc3VsdFsxXSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oJGF2ZXJzaW9uWzBdKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oc2VsZjo6VkVSU0lPTl9VTktOT1dOKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0aGlzLT5zZXRCcm93c2VyKHNlbGY6OkJST1dTRVJfU0lMSyk7DQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrQnJvd3NlcklmcmFtZWx5KCkNCiAgICB7DQogICAgICAgIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdJZnJhbWVseScpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJGFyZXN1bHQgPSBleHBsb2RlKCcvJywgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAnSWZyYW1lbHknKSk7DQogICAgICAgICAgICBpZiAoaXNzZXQoJGFyZXN1bHRbMV0pKSB7DQogICAgICAgICAgICAgICAgJGF2ZXJzaW9uID0gZXhwbG9kZSgnICcsICRhcmVzdWx0WzFdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkYXZlcnNpb25bMF0pOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbihzZWxmOjpWRVJTSU9OX1VOS05PV04pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHRoaXMtPnNldEJyb3dzZXIoc2VsZjo6QlJPV1NFUl9JX0ZSQU1FKTsNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tCcm93c2VyQ29jb2EoKQ0KICAgIHsNCiAgICAgICAgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ0NvY29hUmVzdENsaWVudCcpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJGFyZXN1bHQgPSBleHBsb2RlKCcvJywgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAnQ29jb2FSZXN0Q2xpZW50JykpOw0KICAgICAgICAgICAgaWYgKGlzc2V0KCRhcmVzdWx0WzFdKSkgew0KICAgICAgICAgICAgICAgICRhdmVyc2lvbiA9IGV4cGxvZGUoJyAnLCAkYXJlc3VsdFsxXSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oJGF2ZXJzaW9uWzBdKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oc2VsZjo6VkVSU0lPTl9VTktOT1dOKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0aGlzLT5zZXRCcm93c2VyKHNlbGY6OkJST1dTRVJfQ09DT0EpOw0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVjdCBpZiBVUkwgaXMgbG9hZGVkIGZyb20gRmFjZWJvb2tFeHRlcm5hbEhpdA0KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIGl0IGRldGVjdHMgRmFjZWJvb2tFeHRlcm5hbEhpdCBvdGhlcndpc2UgZmFsc2UNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tGYWNlYm9va0V4dGVybmFsSGl0KCkNCiAgICB7DQogICAgICAgIGlmIChzdHJpc3RyKCR0aGlzLT5fYWdlbnQsICdGYWNlYm9va0V4dGVybmFsSGl0JykpIHsNCiAgICAgICAgICAgICR0aGlzLT5zZXRSb2JvdCh0cnVlKTsNCiAgICAgICAgICAgICR0aGlzLT5zZXRGYWNlYm9vayh0cnVlKTsNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBEZXRlY3QgaWYgVVJMIGlzIGJlaW5nIGxvYWRlZCBmcm9tIGludGVybmFsIEZhY2Vib29rIGJyb3dzZXINCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiBpdCBkZXRlY3RzIGludGVybmFsIEZhY2Vib29rIGJyb3dzZXIgb3RoZXJ3aXNlIGZhbHNlDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrRm9yRmFjZWJvb2tJb3MoKQ0KICAgIHsNCiAgICAgICAgaWYgKHN0cmlzdHIoJHRoaXMtPl9hZ2VudCwgJ0ZCSU9TJykpIHsNCiAgICAgICAgICAgICR0aGlzLT5zZXRGYWNlYm9vayh0cnVlKTsNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBEZXRlY3QgVmVyc2lvbiBmb3IgdGhlIFNhZmFyaSBicm93c2VyIG9uIGlPUyBkZXZpY2VzDQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgaXQgZGV0ZWN0cyB0aGUgdmVyc2lvbiBjb3JyZWN0bHkgb3RoZXJ3aXNlIGZhbHNlDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFNhZmFyaVZlcnNpb25PbklvcygpDQogICAgew0KICAgICAgICAkYXJlc3VsdCA9IGV4cGxvZGUoJy8nLCBzdHJpc3RyKCR0aGlzLT5fYWdlbnQsICdWZXJzaW9uJykpOw0KICAgICAgICBpZiAoaXNzZXQoJGFyZXN1bHRbMV0pKSB7DQogICAgICAgICAgICAkYXZlcnNpb24gPSBleHBsb2RlKCcgJywgJGFyZXN1bHRbMV0pOw0KICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oJGF2ZXJzaW9uWzBdKTsNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBEZXRlY3QgVmVyc2lvbiBmb3IgdGhlIENocm9tZSBicm93c2VyIG9uIGlPUyBkZXZpY2VzDQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgaXQgZGV0ZWN0cyB0aGUgdmVyc2lvbiBjb3JyZWN0bHkgb3RoZXJ3aXNlIGZhbHNlDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldENocm9tZVZlcnNpb25PbklvcygpDQogICAgew0KICAgICAgICAkYXJlc3VsdCA9IGV4cGxvZGUoJy8nLCBzdHJpc3RyKCR0aGlzLT5fYWdlbnQsICdDcmlPUycpKTsNCiAgICAgICAgaWYgKGlzc2V0KCRhcmVzdWx0WzFdKSkgew0KICAgICAgICAgICAgJGF2ZXJzaW9uID0gZXhwbG9kZSgnICcsICRhcmVzdWx0WzFdKTsNCiAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKCRhdmVyc2lvblswXSk7DQogICAgICAgICAgICAkdGhpcy0+c2V0QnJvd3NlcihzZWxmOjpCUk9XU0VSX0NIUk9NRSk7DQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRGV0ZXJtaW5lIGlmIHRoZSBicm93c2VyIGlzIGlQaG9uZSBvciBub3QgKGxhc3QgdXBkYXRlZCAxLjcpDQogICAgICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGJyb3dzZXIgaXMgaVBob25lIG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJpUGhvbmUoKQ0KICAgIHsNCiAgICAgICAgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ2lQaG9uZScpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oc2VsZjo6VkVSU0lPTl9VTktOT1dOKTsNCiAgICAgICAgICAgICR0aGlzLT5zZXRCcm93c2VyKHNlbGY6OkJST1dTRVJfSVBIT05FKTsNCiAgICAgICAgICAgICR0aGlzLT5nZXRTYWZhcmlWZXJzaW9uT25Jb3MoKTsNCiAgICAgICAgICAgICR0aGlzLT5nZXRDaHJvbWVWZXJzaW9uT25Jb3MoKTsNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0ZvckZhY2Vib29rSW9zKCk7DQogICAgICAgICAgICAkdGhpcy0+c2V0TW9iaWxlKHRydWUpOw0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyBpUGFkIG9yIG5vdCAobGFzdCB1cGRhdGVkIDEuNykNCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyBpUGFkIG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJpUGFkKCkNCiAgICB7DQogICAgICAgIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdpUGFkJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbihzZWxmOjpWRVJTSU9OX1VOS05PV04pOw0KICAgICAgICAgICAgJHRoaXMtPnNldEJyb3dzZXIoc2VsZjo6QlJPV1NFUl9JUEFEKTsNCiAgICAgICAgICAgICR0aGlzLT5nZXRTYWZhcmlWZXJzaW9uT25Jb3MoKTsNCiAgICAgICAgICAgICR0aGlzLT5nZXRDaHJvbWVWZXJzaW9uT25Jb3MoKTsNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0ZvckZhY2Vib29rSW9zKCk7DQogICAgICAgICAgICAkdGhpcy0+c2V0VGFibGV0KHRydWUpOw0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyBpUG9kIG9yIG5vdCAobGFzdCB1cGRhdGVkIDEuNykNCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyBpUG9kIG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJpUG9kKCkNCiAgICB7DQogICAgICAgIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdpUG9kJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbihzZWxmOjpWRVJTSU9OX1VOS05PV04pOw0KICAgICAgICAgICAgJHRoaXMtPnNldEJyb3dzZXIoc2VsZjo6QlJPV1NFUl9JUE9EKTsNCiAgICAgICAgICAgICR0aGlzLT5nZXRTYWZhcmlWZXJzaW9uT25Jb3MoKTsNCiAgICAgICAgICAgICR0aGlzLT5nZXRDaHJvbWVWZXJzaW9uT25Jb3MoKTsNCiAgICAgICAgICAgICR0aGlzLT5jaGVja0ZvckZhY2Vib29rSW9zKCk7DQogICAgICAgICAgICAkdGhpcy0+c2V0TW9iaWxlKHRydWUpOw0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyBBbmRyb2lkIG9yIG5vdCAobGFzdCB1cGRhdGVkIDEuNykNCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyBBbmRyb2lkIG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJBbmRyb2lkKCkNCiAgICB7DQogICAgICAgIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdBbmRyb2lkJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkYXJlc3VsdCA9IGV4cGxvZGUoJyAnLCBzdHJpc3RyKCR0aGlzLT5fYWdlbnQsICdBbmRyb2lkJykpOw0KICAgICAgICAgICAgaWYgKGlzc2V0KCRhcmVzdWx0WzFdKSkgew0KICAgICAgICAgICAgICAgICRhdmVyc2lvbiA9IGV4cGxvZGUoJyAnLCAkYXJlc3VsdFsxXSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oJGF2ZXJzaW9uWzBdKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldFZlcnNpb24oc2VsZjo6VkVSU0lPTl9VTktOT1dOKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdNb2JpbGUnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0TW9iaWxlKHRydWUpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VGFibGV0KHRydWUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHRoaXMtPnNldEJyb3dzZXIoc2VsZjo6QlJPV1NFUl9BTkRST0lEKTsNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIGJyb3dzZXIgaXMgVml2YWxkaQ0KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBicm93c2VyIGlzIFZpdmFsZGkgb3RoZXJ3aXNlIGZhbHNlDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrQnJvd3NlclZpdmFsZGkoKQ0KICAgIHsNCiAgICAgICAgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ1ZpdmFsZGknKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICRhcmVzdWx0ID0gZXhwbG9kZSgnLycsIHN0cmlzdHIoJHRoaXMtPl9hZ2VudCwgJ1ZpdmFsZGknKSk7DQogICAgICAgICAgICBpZiAoaXNzZXQoJGFyZXN1bHRbMV0pKSB7DQogICAgICAgICAgICAgICAgJGF2ZXJzaW9uID0gZXhwbG9kZSgnICcsICRhcmVzdWx0WzFdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkYXZlcnNpb25bMF0pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRCcm93c2VyKHNlbGY6OkJST1dTRVJfVklWQUxESSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyBZYW5kZXgNCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyBZYW5kZXggb3RoZXJ3aXNlIGZhbHNlDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrQnJvd3NlcllhbmRleCgpDQogICAgew0KICAgICAgICBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnWWFCcm93c2VyJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkYXJlc3VsdCA9IGV4cGxvZGUoJy8nLCBzdHJpc3RyKCR0aGlzLT5fYWdlbnQsICdZYUJyb3dzZXInKSk7DQogICAgICAgICAgICBpZiAoaXNzZXQoJGFyZXN1bHRbMV0pKSB7DQogICAgICAgICAgICAgICAgJGF2ZXJzaW9uID0gZXhwbG9kZSgnICcsICRhcmVzdWx0WzFdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkYXZlcnNpb25bMF0pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRCcm93c2VyKHNlbGY6OkJST1dTRVJfWUFOREVYKTsNCg0KICAgICAgICAgICAgICAgIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdpUGFkJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5zZXRUYWJsZXQodHJ1ZSk7DQogICAgICAgICAgICAgICAgfSBlbHNlaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ01vYmlsZScpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c2V0TW9iaWxlKHRydWUpOw0KICAgICAgICAgICAgICAgIH0gZWxzZWlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdBbmRyb2lkJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5zZXRUYWJsZXQodHJ1ZSk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRGV0ZXJtaW5lIGlmIHRoZSBicm93c2VyIGlzIGEgUGxheVN0YXRpb24NCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyBQbGF5U3RhdGlvbiBvdGhlcndpc2UgZmFsc2UNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tCcm93c2VyUGxheVN0YXRpb24oKQ0KICAgIHsNCiAgICAgICAgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ1BsYXlTdGF0aW9uICcpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJGFyZXN1bHQgPSBleHBsb2RlKCcgJywgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAnUGxheVN0YXRpb24gJykpOw0KICAgICAgICAgICAgJHRoaXMtPnNldEJyb3dzZXIoc2VsZjo6QlJPV1NFUl9QTEFZU1RBVElPTik7DQogICAgICAgICAgICBpZiAoaXNzZXQoJGFyZXN1bHRbMF0pKSB7DQogICAgICAgICAgICAgICAgJGF2ZXJzaW9uID0gZXhwbG9kZSgnKScsICRhcmVzdWx0WzJdKTsNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0VmVyc2lvbigkYXZlcnNpb25bMF0pOw0KICAgICAgICAgICAgICAgIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdQb3J0YWJsZSknKSAhPT0gZmFsc2UgfHwgc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnVml0YScpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c2V0TW9iaWxlKHRydWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRGV0ZXJtaW5lIGlmIHRoZSBicm93c2VyIGlzIFdnZXQgb3Igbm90IChsYXN0IHVwZGF0ZWQgMS43KQ0KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZSBicm93c2VyIGlzIFdnZXQgb3RoZXJ3aXNlIGZhbHNlDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrQnJvd3NlcldnZXQoKQ0KICAgIHsNCiAgICAgICAgaWYgKHByZWdfbWF0Y2goIiFeV2dldC8oW14gXSspIWkiLCAkdGhpcy0+X2FnZW50LCAkYXJlc3VsdCkpIHsNCiAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKCRhcmVzdWx0WzFdKTsNCiAgICAgICAgICAgICR0aGlzLT5zZXRCcm93c2VyKHNlbGY6OkJST1dTRVJfV0dFVCk7DQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KICAgIC8qKg0KICAgICAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyBjVVJMIG9yIG5vdCAobGFzdCB1cGRhdGVkIDEuNykNCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyBjVVJMIG90aGVyd2lzZSBmYWxzZQ0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0Jyb3dzZXJDdXJsKCkNCiAgICB7DQogICAgICAgIGlmIChzdHJwb3MoJHRoaXMtPl9hZ2VudCwgJ2N1cmwnKSA9PT0gMCkgew0KICAgICAgICAgICAgJGFyZXN1bHQgPSBleHBsb2RlKCcvJywgc3RyaXN0cigkdGhpcy0+X2FnZW50LCAnY3VybCcpKTsNCiAgICAgICAgICAgIGlmIChpc3NldCgkYXJlc3VsdFsxXSkpIHsNCiAgICAgICAgICAgICAgICAkYXZlcnNpb24gPSBleHBsb2RlKCcgJywgJGFyZXN1bHRbMV0pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5zZXRWZXJzaW9uKCRhdmVyc2lvblswXSk7DQogICAgICAgICAgICAgICAgJHRoaXMtPnNldEJyb3dzZXIoc2VsZjo6QlJPV1NFUl9DVVJMKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRGV0ZXJtaW5lIHRoZSB1c2VyJ3MgcGxhdGZvcm0gKGxhc3QgdXBkYXRlZCAyLjApDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrUGxhdGZvcm0oKQ0KICAgIHsNCiAgICAgICAgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ3dpbmRvd3MnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICR0aGlzLT5fcGxhdGZvcm0gPSBzZWxmOjpQTEFURk9STV9XSU5ET1dTOw0KICAgICAgICB9IGVsc2UgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ2lQYWQnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICR0aGlzLT5fcGxhdGZvcm0gPSBzZWxmOjpQTEFURk9STV9JUEFEOw0KICAgICAgICB9IGVsc2UgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ2lQb2QnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICR0aGlzLT5fcGxhdGZvcm0gPSBzZWxmOjpQTEFURk9STV9JUE9EOw0KICAgICAgICB9IGVsc2UgaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ2lQaG9uZScpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJHRoaXMtPl9wbGF0Zm9ybSA9IHNlbGY6OlBMQVRGT1JNX0lQSE9ORTsNCiAgICAgICAgfSBlbHNlaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ21hYycpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJHRoaXMtPl9wbGF0Zm9ybSA9IHNlbGY6OlBMQVRGT1JNX0FQUExFOw0KICAgICAgICB9IGVsc2VpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnYW5kcm9pZCcpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJHRoaXMtPl9wbGF0Zm9ybSA9IHNlbGY6OlBMQVRGT1JNX0FORFJPSUQ7DQogICAgICAgIH0gZWxzZWlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdTaWxrJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkdGhpcy0+X3BsYXRmb3JtID0gc2VsZjo6UExBVEZPUk1fRklSRV9PUzsNCiAgICAgICAgfSBlbHNlaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ2xpbnV4JykgIT09IGZhbHNlICYmIHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ1NNQVJULVRWJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkdGhpcy0+X3BsYXRmb3JtID0gc2VsZjo6UExBVEZPUk1fTElOVVggLiAnLycgLiBzZWxmOjpQTEFURk9STV9TTUFSVF9UVjsNCiAgICAgICAgfSBlbHNlaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ2xpbnV4JykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkdGhpcy0+X3BsYXRmb3JtID0gc2VsZjo6UExBVEZPUk1fTElOVVg7DQogICAgICAgIH0gZWxzZSBpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnTm9raWEnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICR0aGlzLT5fcGxhdGZvcm0gPSBzZWxmOjpQTEFURk9STV9OT0tJQTsNCiAgICAgICAgfSBlbHNlIGlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdCbGFja0JlcnJ5JykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkdGhpcy0+X3BsYXRmb3JtID0gc2VsZjo6UExBVEZPUk1fQkxBQ0tCRVJSWTsNCiAgICAgICAgfSBlbHNlaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ0ZyZWVCU0QnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICR0aGlzLT5fcGxhdGZvcm0gPSBzZWxmOjpQTEFURk9STV9GUkVFQlNEOw0KICAgICAgICB9IGVsc2VpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnT3BlbkJTRCcpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJHRoaXMtPl9wbGF0Zm9ybSA9IHNlbGY6OlBMQVRGT1JNX09QRU5CU0Q7DQogICAgICAgIH0gZWxzZWlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdOZXRCU0QnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICR0aGlzLT5fcGxhdGZvcm0gPSBzZWxmOjpQTEFURk9STV9ORVRCU0Q7DQogICAgICAgIH0gZWxzZWlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdPcGVuU29sYXJpcycpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJHRoaXMtPl9wbGF0Zm9ybSA9IHNlbGY6OlBMQVRGT1JNX09QRU5TT0xBUklTOw0KICAgICAgICB9IGVsc2VpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnU3VuT1MnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICR0aGlzLT5fcGxhdGZvcm0gPSBzZWxmOjpQTEFURk9STV9TVU5PUzsNCiAgICAgICAgfSBlbHNlaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ09TXC8yJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkdGhpcy0+X3BsYXRmb3JtID0gc2VsZjo6UExBVEZPUk1fT1MyOw0KICAgICAgICB9IGVsc2VpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnQmVPUycpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJHRoaXMtPl9wbGF0Zm9ybSA9IHNlbGY6OlBMQVRGT1JNX0JFT1M7DQogICAgICAgIH0gZWxzZWlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICd3aW4nKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICR0aGlzLT5fcGxhdGZvcm0gPSBzZWxmOjpQTEFURk9STV9XSU5ET1dTOw0KICAgICAgICB9IGVsc2VpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnUGxheXN0YXRpb24nKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICR0aGlzLT5fcGxhdGZvcm0gPSBzZWxmOjpQTEFURk9STV9QTEFZU1RBVElPTjsNCiAgICAgICAgfSBlbHNlaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ1Jva3UnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICR0aGlzLT5fcGxhdGZvcm0gPSBzZWxmOjpQTEFURk9STV9ST0tVOw0KICAgICAgICB9IGVsc2VpZiAoc3RyaXBvcygkdGhpcy0+X2FnZW50LCAnaU9TJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAkdGhpcy0+X3BsYXRmb3JtID0gc2VsZjo6UExBVEZPUk1fSVBIT05FIC4gJy8nIC4gc2VsZjo6UExBVEZPUk1fSVBBRDsNCiAgICAgICAgfSBlbHNlaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ3R2T1MnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICR0aGlzLT5fcGxhdGZvcm0gPSBzZWxmOjpQTEFURk9STV9BUFBMRV9UVjsNCiAgICAgICAgfSBlbHNlaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ2N1cmwnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICR0aGlzLT5fcGxhdGZvcm0gPSBzZWxmOjpQTEFURk9STV9URVJNSU5BTDsNCiAgICAgICAgfSBlbHNlaWYgKHN0cmlwb3MoJHRoaXMtPl9hZ2VudCwgJ0NyT1MnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICR0aGlzLT5fcGxhdGZvcm0gPSBzZWxmOjpQTEFURk9STV9DSFJPTUVfT1M7DQogICAgICAgIH0gZWxzZWlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdva2h0dHAnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICR0aGlzLT5fcGxhdGZvcm0gPSBzZWxmOjpQTEFURk9STV9KQVZBX0FORFJPSUQ7DQogICAgICAgIH0gZWxzZWlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdQb3N0bWFuUnVudGltZScpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJHRoaXMtPl9wbGF0Zm9ybSA9IHNlbGY6OlBMQVRGT1JNX1BPU1RNQU47DQogICAgICAgIH0gZWxzZWlmIChzdHJpcG9zKCR0aGlzLT5fYWdlbnQsICdJZnJhbWVseScpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJHRoaXMtPl9wbGF0Zm9ybSA9IHNlbGY6OlBMQVRGT1JNX0lfRlJBTUU7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.cge_migration_tools.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogSGVscGVyIGNsYXNzIHRvIG1pZ3JhdGUgc2V0dGluZ3MgZnJvbSBDR0V4dGVudGlvbnMgdG8gQ01TTVNFeHQNCiAqIEBwYWNrYWdlIENNU01TDQogKiBAdmVyc2lvbiAxLjANCiAqIEBhdXRob3IgRmVybmFuZG8gTW9yZ2FkbyBha2EgSm8gTW9yZw0KICovDQoNCm5hbWVzcGFjZSBDTVNNU0V4dDsNCg0KDQpjbGFzcyBjZ2VfbWlncmF0aW9uX3Rvb2xzDQp7DQogIC8qKg0KICAgKiBwcml2YXRlIHByb3BlcnRpZXMNCiAgICovDQogIA0KICAvKioNCiAgICogVGhlIGluc3RhbmNlDQogICAqDQogICAqIEBhY2Nlc3MgcHJpdmF0ZQ0KICAgKi8NCiAgcHJpdmF0ZSBzdGF0aWMgJF9pbnN0YW5jZTsNCiAgDQogIC8qKg0KICAgKiBAdmFyIG51bGwNCiAgICovDQogIHByaXZhdGUgc3RhdGljICRfY21zX2NvbmZpZyAgICAgICAgICAgPSBOVUxMOw0KICANCiAgLyoqDQogICAqIEB2YXIgbnVsbA0KICAgKi8NCiAgcHJpdmF0ZSBzdGF0aWMgJF9tb2R1bGVfY29uZmlnICAgICAgICA9IE5VTEw7DQogIA0KICAvKioNCiAgICogQHZhciBhcnJheQ0KICAgKi8NCiAgcHJpdmF0ZSBzdGF0aWMgJF9idWZmZXIgPSBbXTsNCiAgDQogIA0KICAvKioNCiAgICogcHJpdmF0ZSBtZXRob2RzDQogICAqLw0KICANCiAgLyoqDQogICAqIG1pZ3JhdGlvbl90b29scyBjb25zdHJ1Y3Rvci4NCiAgICovDQogIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKXsgfQ0KICANCiAgcHJpdmF0ZSBmdW5jdGlvbiBfbG9hZF9jbXNfY29uZmlnKCkNCiAgew0KICAgIGlmKCBlbXB0eShzZWxmOjokX2Ntc19jb25maWcpICkNCiAgICB7DQogICAgICAkcm9vdF9wYXRoICAgICAgICAgPSBkaXJuYW1lKF9fRklMRV9fLCA0KTsNCiAgICAgICRjb250ZW50cyAgICAgICAgICA9IGZpbGVfZ2V0X2NvbnRlbnRzKCBjbXNfam9pbl9wYXRoKCRyb290X3BhdGgsICdjb25maWcucGhwJykgKTsNCiAgICAgICRjb250ZW50cyAgICAgICAgICA9IGh0bWxlbnRpdGllcygkY29udGVudHMsIEVOVF9OT1FVT1RFUyk7DQogICAgICAkY29udGVudHMgICAgICAgICAgPSBzdHJfcmVwbGFjZSgnIicsICInIiwgJGNvbnRlbnRzKTsNCiAgICAgIHNlbGY6OiRfY21zX2NvbmZpZyA9IGV4cGxvZGUoIlxuIiwgJGNvbnRlbnRzKTsNCiAgICB9DQogIH0NCiAgDQogIHByaXZhdGUgZnVuY3Rpb24gX2xvYWRfbW9kdWxlX2NvbmZpZygpDQogIHsNCiAgICBpZiggZW1wdHkoIHNlbGY6OiRfbW9kdWxlX2NvbmZpZykgJiYgJHRoaXMtPm1vZHVsZV9jb25maWdfZmlsZV9leGlzdHMoKSApDQogICAgew0KICAgICAgJG1vZHVsZV9wYXRoID0gZGlybmFtZShfX0ZJTEVfXywgMik7DQogICAgICAkY29udGVudHMgICAgICAgICAgPSBmaWxlX2dldF9jb250ZW50cyggY21zX2pvaW5fcGF0aCgkbW9kdWxlX3BhdGgsICdkYXRhJywgJ2NmZy5pbmMnKSApOw0KICAgICAgJGNvbnRlbnRzICAgICAgICAgID0gaHRtbGVudGl0aWVzKCRjb250ZW50cywgRU5UX05PUVVPVEVTKTsNCiAgICAgICRjb250ZW50cyAgICAgICAgICA9IHN0cl9yZXBsYWNlKCciJywgIiciLCAkY29udGVudHMpOw0KICAgICAgc2VsZjo6JF9tb2R1bGVfY29uZmlnID0gZXhwbG9kZSgiXG4iLCAkY29udGVudHMpOw0KICAgIH0NCiAgfQ0KICANCiAgcHJpdmF0ZSBmdW5jdGlvbiBfc2Nhbl9mb3JfY2dlX2NvbmZpZ19lbnRyaWVzKCkNCiAgew0KICAgICRmb3VuZCA9IEZBTFNFOw0KICAgIA0KICAgICMgY2xlYXIgYnVmZmVyDQogICAgc2VsZjo6JF9idWZmZXIgPSBbXTsNCg0KICAgIGZvcmVhY2goc2VsZjo6JF9jbXNfY29uZmlnIGFzICRsaW5lKQ0KICAgIHsNCiAgICAgIGlmKCBcc3RhcnRzd2l0aCgkbGluZSwgJyRjb25maWdbXCdjZ2VfJykgKQ0KICAgICAgew0KICAgICAgICBzZWxmOjokX2J1ZmZlcltdID0gc3RyX3JlcGxhY2UoJyRjb25maWdbXCdjZ2VfJywgJyRjb25maWdbXCd4dF8nLCAkbGluZSk7DQogICAgICAgICRmb3VuZCA9IFRSVUU7DQogICAgICAgIGNvbnRpbnVlOw0KICAgICAgfQ0KICAgICAgDQogICAgICBpZiggXHN0YXJ0c3dpdGgoJGxpbmUsICckY29uZmlnW1wnY2dqc18nKSApDQogICAgICB7DQogICAgICAgIHNlbGY6OiRfYnVmZmVyW10gPSBzdHJfcmVwbGFjZSgnJGNvbmZpZ1tcJ2NnanNfJywgJyRjb25maWdbXCd4dGpzXycsICRsaW5lKTsNCiAgICAgICAgJGZvdW5kID0gVFJVRTsNCiAgICAgICAgY29udGludWU7DQogICAgICB9DQogICAgICANCiAgICAgICMgc2luY2Ugd2UgYXJlIGxvb2tpbmcgZm9yIGFuIG9jY3VycmVuY2Ugb2YgJ19hZG1pbnNlY3Rpb24nIG1ha2Ugc3VyZSBpdCdzIG5vdCBhIGNvbW1lbnRlZCBvdXQgbGluZQ0KICAgICAgaWYoDQogICAgICAgIHN0cnBvcygkbGluZSwgJ19hZG1pbnNlY3Rpb24nKSAhPT0gZmFsc2UNCiAgICAgICAgJiYNCiAgICAgICAgISggXHN0YXJ0c3dpdGgoJGxpbmUsICdcXFxcJykgfHwgXHN0YXJ0c3dpdGgoJGxpbmUsICcjJykgICkNCiAgICAgICkNCiAgICAgIHsNCiAgICAgICAgc2VsZjo6JF9idWZmZXJbXSA9ICRsaW5lOw0KICAgICAgICAkZm91bmQgPSBUUlVFOw0KICAgICAgICBjb250aW51ZTsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgcmV0dXJuICRmb3VuZDsNCiAgfQ0KICANCiAgDQogIC8qKg0KICAgKiBwcml2YXRlIG1ldGhvZHMNCiAgICovDQogIA0KICAvKioNCiAgICogR2V0SW5zdGFuY2UgbWV0aG9kIHVzZWQgdG8gYWNjZXNzIHRoZSBvYmplY3QNCiAgICoNCiAgICogQGFjY2VzcyBwdWJsaWMNCiAgICogQHJldHVybg0KICAgKi8NCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBHZXRJbnN0YW5jZSgpDQogIHsNCiAgICBpZighaXNzZXQoc2VsZjo6JF9pbnN0YW5jZSkpDQogICAgew0KICAgICAgc2VsZjo6JF9pbnN0YW5jZSAgPSBuZXcgc2VsZjsNCiAgICB9DQogICAgDQogICAgcmV0dXJuIHNlbGY6OiRfaW5zdGFuY2U7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBtb2R1bGVfY29uZmlnX2ZpbGVfZXhpc3RzKCkNCiAgew0KICAgICRtb2R1bGVfcGF0aCA9IGRpcm5hbWUoX19GSUxFX18sIDIpOw0KICAgICRmaWxlID0gY21zX2pvaW5fcGF0aCgkbW9kdWxlX3BhdGgsICdkYXRhJywgJ2NmZy5pbmMnKTsNCiAgICByZXR1cm4gZmlsZV9leGlzdHMoJGZpbGUpOw0KICB9DQogIA0KICANCiAgcHVibGljIGZ1bmN0aW9uIG1pZ3JhdGVfY29uZmlnX2VudHJpZXMoKQ0KICB7DQogICAgJHRoaXMtPl9sb2FkX2Ntc19jb25maWcoKTsNCiAgICANCiAgICBpZigkdGhpcy0+X3NjYW5fZm9yX2NnZV9jb25maWdfZW50cmllcygpICkNCiAgICB7DQogICAgICBzZWxmOjokX21vZHVsZV9jb25maWcgPSBbXTsNCiAgDQogICAgICBpZiggJHRoaXMtPm1vZHVsZV9jb25maWdfZmlsZV9leGlzdHMoKSApDQogICAgICB7DQogICAgICAgICR0aGlzLT5fbG9hZF9tb2R1bGVfY29uZmlnKCk7DQogICAgICAgIA0KICAgICAgICAjIHJlbW92ZSAmbHQ7P3BocCBhbmQgPyZndDsgKHBocCBmaWxlIHN0YXJ0IGFuZCBlbmRpbmcgdGFncykNCiAgICAgICAgJHRtcCA9IHNlbGY6OiRfbW9kdWxlX2NvbmZpZzsNCiAgICAgICAgc2VsZjo6JF9tb2R1bGVfY29uZmlnID0gW107DQogICAgICAgIA0KICAgICAgICBmb3JlYWNoKCR0bXAgYXMgJGxpbmUpDQogICAgICAgIHsNCiAgICAgICAgICBpZigNCiAgICAgICAgICAgIHN0cnBvcygkbGluZSwgJyZsdDs/cGhwJykgIT09IGZhbHNlIHx8DQogICAgICAgICAgICBzdHJwb3MoJGxpbmUsICc/Jmd0OycpICE9PSBmYWxzZQ0KICAgICAgICAgICkNCiAgICAgICAgICB7DQogICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICB9DQogICAgICAgICAgDQogICAgICAgICAgc2VsZjo6JF9tb2R1bGVfY29uZmlnW10gPSAkbGluZTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgDQogICAgICBmb3JlYWNoKHNlbGY6OiRfYnVmZmVyIGFzICRsaW5lKQ0KICAgICAgew0KICAgICAgICBzZWxmOjokX21vZHVsZV9jb25maWdbXSA9ICRsaW5lOw0KICAgICAgfQ0KICAgICAgDQogICAgICBzZWxmOjokX21vZHVsZV9jb25maWcgPSBhcnJheV91bmlxdWUoc2VsZjo6JF9tb2R1bGVfY29uZmlnKTsNCiAgICAgIA0KICAgICAgIyBwdXQgYmFjayB0aGUgUEhQIHRhZ3MNCiAgICAgIGFycmF5X3Vuc2hpZnQoc2VsZjo6JF9tb2R1bGVfY29uZmlnLCAnJmx0Oz9waHAnKTsNCiAgICAgIHNlbGY6OiRfbW9kdWxlX2NvbmZpZ1tdID0gJz8mZ3Q7JzsNCiAgDQogIA0KICAgICAgJGNvbnRlbnRzID0gaHRtbF9lbnRpdHlfZGVjb2RlKCBpbXBsb2RlKCJcbiIsIHNlbGY6OiRfbW9kdWxlX2NvbmZpZykgKTsNCiAgICAgICRtb2R1bGVfcGF0aCA9IGRpcm5hbWUoX19GSUxFX18sIDIpOw0KICAgICAgJGZpbGVuYW1lID0gY21zX2pvaW5fcGF0aCgkbW9kdWxlX3BhdGgsICdkYXRhJywgJ2NmZy5pbmMnKTsNCiAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlbmFtZSwgJGNvbnRlbnRzKTsNCiAgICB9DQogICAgDQogIH0NCiAgDQp9DQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.config.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiogQ01TTVNFeHQgY29uZmlnIGNsYXNzCiogQSBjb252ZW5pZW5jZSBjbGFzcyB0byBjZW50cmFsaXplCiogYWxsIENvbmZpZyB2YWx1ZXMgaW4gb25lIEFycmF5QWNjZXNzIHR5cGUgb2JqZWN0CioKKiBAYXV0aG9yIEpvIE1vcmcgKEZlcm5hbmRvIE1vcmdhZG8pCiogQHZlcnNpb24gMS4wCiovCm5hbWVzcGFjZSBDTVNNU0V4dDsKCi8qKgogKiBDbGFzcyBjb25maWcKICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICovCmNsYXNzIGNvbmZpZyBpbXBsZW1lbnRzIFxBcnJheUFjY2Vzcwp7CiAgCiAgLyoqCiAgKiBAYWNjZXNzIHByaXZhdGUKICAqLwogIHByaXZhdGUgc3RhdGljICRfZGF0YSA9IFtdOwogIAogIC8qKgogICogVGhlIGluc3RhbmNlCiAgKiBAYWNjZXNzIHByaXZhdGUKICAqLwogIHByaXZhdGUgc3RhdGljICRfaW5zdGFuY2U7CiAgCiAgLyoqCiAgKiBDTVNNUyBvd24gY29uZmlnCiAgKiBAYWNjZXNzIHByaXZhdGUKICAqLwogIHByaXZhdGUgc3RhdGljICRfQ01TTVNfQ0ZHOwogIAogIC8qKgogICogUHJpdmF0ZSBjb25zdHJ1Y3RvciB0byBwcmV2ZW50IGl0IGJlaW5nIGNyZWF0ZWQgZGlyZWN0bHkKICAqIEBhY2Nlc3MgcHJpdmF0ZQogICovCiAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpe30KICAKICAvKioKICAqIEdldEluc3RhbmNlIG1ldGhvZCB1c2VkIHRvIGFjY2VzcyB0aGUgb2JqZWN0CiAgKiBAYWNjZXNzIHB1YmxpYwogICogQHJldHVybgogICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBHZXRJbnN0YW5jZSgpCiAgewogICAgaWYoICFpc3NldChzZWxmOjokX2luc3RhbmNlKSApCiAgICB7CiAgICAgIHNlbGY6OiRfaW5zdGFuY2UgPSBuZXcgc2VsZjsKICAgICAgc2VsZjo6JF9DTVNNU19DRkcgPSBcY21zbXMoKS0+R2V0Q29uZmlnKCk7CiAgICAgICRtb2R1bGVfcGF0aCA9IGRpcm5hbWUoX19GSUxFX18sIDIpOwogICAgICAkZmlsZSA9IGNtc19qb2luX3BhdGgoJG1vZHVsZV9wYXRoLCAnZGF0YScsICdjZmcuaW5jJyk7CiAgICAgICRjZmcgPSBbXTsKICAgICAgCiAgICAgIGlmKCBcZmlsZV9leGlzdHMoJGZpbGUpICkKICAgICAgewogICAgICAgIGluY2x1ZGUoJGZpbGUpOwogICAgICAgIHNlbGY6OiRfZGF0YSA9ICRjZmcgPz8gW107CiAgICAgIH0KICAgICAgCiAgICAgIHNlbGY6OiRfZGF0YVsnbW9kdWxlX3BhdGgnXSA9ICRtb2R1bGVfcGF0aDsKICAgIH0KICAgIAogICAgcmV0dXJuIHNlbGY6OiRfaW5zdGFuY2U7CiAgfQogIAogIC8qKgogICAqIEBwYXJhbSAka2V5CiAgICoKICAgKiBAcmV0dXJuIGJvb2wKICAgKi8KICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBleGlzdHMoJGtleSkgOiBib29sCiAgewogICAgcmV0dXJuICggaXNzZXQoc2VsZjo6JF9kYXRhWyRrZXldKSB8fCBzZWxmOjokX0NNU01TX0NGRy0+b2Zmc2V0RXhpc3RzKCRrZXkpICk7CiAgfQogIAogIC8qKgogICogcHJldmVudCBjbG9uaW5nIG9mIHRoZSBvYmplY3Q6IGlzc3VlcyBhbiBFX1VTRVJfRVJST1IgaWYgdGhpcyBpcyBhdHRlbXB0ZWQKICAqLwogIHB1YmxpYyBmdW5jdGlvbiBfX2Nsb25lKCkKICB7CiAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0Nsb25pbmcgdGhlIENvbmZpZyBpcyBub3QgcGVybWl0dGVkJyk7CiAgfQogIAogIC8qKgogICAqIEdldCBhIGRhdGEgYnkga2V5CiAgICoKICAgKiBAcGFyYW0gc3RyaW5nIFRoZSBrZXkgZGF0YSB0byByZXRyaWV2ZQogICAqCiAgICogQGFjY2VzcyBwdWJsaWMKICAgKiBAcmV0dXJuIG1peGVkCiAgICovCiAgcHVibGljIGZ1bmN0aW9uICZfX2dldCAoJGtleSkKICB7CiAgICBpZihzZWxmOjokX0NNU01TX0NGRy0+b2Zmc2V0RXhpc3RzKCRrZXkpKQogICAgewogICAgICByZXR1cm4gc2VsZjo6JF9DTVNNU19DRkdbJGtleV07CiAgICB9CiAgICAKICAgIHJldHVybiBzZWxmOjokX2RhdGFbJGtleV07CiAgfQogIAogIC8qKgogICAqIEFzc2lnbnMgYSB2YWx1ZSB0byB0aGUgc3BlY2lmaWVkIGRhdGEKICAgKgogICAqIEBwYXJhbSBzdHJpbmcgVGhlIGRhdGEga2V5IHRvIGFzc2lnbiB0aGUgdmFsdWUgdG8KICAgKiBAcGFyYW0gbWl4ZWQgIFRoZSB2YWx1ZSB0byBzZXQKICAgKgogICAqIEBhY2Nlc3MgcHVibGljCiAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBfX3NldCgka2V5LCAkdmFsdWUpCiAgewogICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdSZWFkIE9ubHknKTsKICB9CiAgCiAgLyoqCiAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAqCiAgICogQHJldHVybiBib29sCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIF9faXNzZXQoJGtleSkKICB7CiAgICByZXR1cm4gKCBpc3NldChzZWxmOjokX2RhdGFbJGtleV0pIHx8IHNlbGY6OiRfQ01TTVNfQ0ZHLT5vZmZzZXRFeGlzdHMoJGtleSkgKTsKICB9CiAgCiAgCiAgLyoqCiAgICogQHBhcmFtIG1peGVkICRrZXkKICAgKgogICAqIEByZXR1cm4gYm9vbAogICAqLwogICNbXFJldHVyblR5cGVXaWxsQ2hhbmdlXQogIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJGtleSkKICB7CiAgICByZXR1cm4gKCBpc3NldChzZWxmOjokX2RhdGFbJGtleV0pIHx8IHNlbGY6OiRfQ01TTVNfQ0ZHLT5vZmZzZXRFeGlzdHMoJGtleSkgKTsKICB9CiAgCiAgLyoqCiAgICogQHBhcmFtIG1peGVkICRrZXkKICAgKgogICAqIEByZXR1cm4gbWl4ZWR8bnVsbAogICAqLwogICNbXFJldHVyblR5cGVXaWxsQ2hhbmdlXQogIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoJGtleSkKICAgewogICAgIGlmKHNlbGY6OiRfQ01TTVNfQ0ZHLT5vZmZzZXRFeGlzdHMoJGtleSkpIHsgcmV0dXJuIHNlbGY6OiRfQ01TTVNfQ0ZHWyRrZXldOyB9CiAgCiAgICAgcmV0dXJuIHNlbGY6OiRfZGF0YVska2V5XSA/PyBOVUxMOwogICB9CiAgCiAgLyoqCiAgICogQHBhcmFtIG1peGVkICRrZXkKICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICoKICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uCiAgICovCiAgI1tcUmV0dXJuVHlwZVdpbGxDaGFuZ2VdCiAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgka2V5LCAkdmFsdWUpCiAgIHsKICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1JlYWQgT25seScpOwogICB9CiAgCiAgLyoqCiAgICogQHBhcmFtIG1peGVkICRrZXkKICAgKgogICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24KICAgKi8KICAjW1xSZXR1cm5UeXBlV2lsbENoYW5nZV0KICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoJGtleSkKICAgewogICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignUmVhZCBPbmx5Jyk7CiAgIH0KICAKICAvKioKICAgKiBAcGFyYW0gJGtleQogICAqCiAgICogQHJldHVybiBtaXhlZAogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0KCRrZXkpCiAgewogICAgaWYoc2VsZjo6JF9DTVNNU19DRkctPm9mZnNldEV4aXN0cygka2V5KSkgcmV0dXJuIHNlbGY6OiRfQ01TTVNfQ0ZHWyRrZXldOwogICAgCiAgICBpZiggc2VsZjo6ZXhpc3RzKCRrZXkpICkKICAgIHsKICAgICAgcmV0dXJuIHNlbGY6OiRfZGF0YVska2V5XTsKICAgIH0KICB9CiAgCiAgLyoqCiAgICogQHBhcmFtICRrZXkKICAgKiBAcGFyYW0gJHZhbHVlCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXQoJGtleSwgJHZhbHVlKQogIHsKICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignUmVhZCBPbmx5Jyk7CiAgfQogIAogIC8qKgogICAqIEBwYXJhbSAka2V5CiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBlcmFzZSgka2V5KQogIHsKICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignUmVhZCBPbmx5Jyk7CiAgfQp9Cj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.ConfigManager.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHQ7DQoNCg0KLyoqDQogKiBDbGFzcyBDb25maWdNYW5hZ2VyDQogKg0KICogQHBhY2thZ2UgQ01TTVNFeHQNCiAqLw0KZmluYWwgY2xhc3MgQ29uZmlnTWFuYWdlcg0Kew0KICAvKioNCiAgICogQHZhciBhcnJheQ0KICAgKi8NCiAgcHJpdmF0ZSBzdGF0aWMgYXJyYXkgJF9tb2R1bGVzX2NvbmZpZ3MgPSBbXTsNCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gXENNU01vZHVsZSAkbW9kDQogICAqDQogICAqIEByZXR1cm4gbWl4ZWQNCiAgICovDQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gR2V0Q29uZmlnSW5zdGFuY2UoXENNU01vZHVsZSAkbW9kKQ0KICB7DQogICAgJG1vZF9uYW1lID0gJG1vZC0+R2V0TmFtZSgpOw0KICAgIA0KICAgIGlmKCFpc3NldChzZWxmOjokX21vZHVsZXNfY29uZmlnc1skbW9kX25hbWVdKSkNCiAgICB7DQogICAgICBzZWxmOjokX21vZHVsZXNfY29uZmlnc1skbW9kX25hbWVdID0gbmV3IE1vZHVsZUNvbmZpZygkbW9kKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuIHNlbGY6OiRfbW9kdWxlc19jb25maWdzWyRtb2RfbmFtZV07DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gJG1vZF9uYW1lDQogICAqDQogICAqIEByZXR1cm4gTW9kdWxlQ29uZmlnfHZvaWQNCiAgICovDQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gR2V0Q29uZmlnRm9yKCRtb2RfbmFtZSkNCiAgew0KICAgIA0KICAgIGlmKCFpc3NldChzZWxmOjokX21vZHVsZXNfY29uZmlnc1skbW9kX25hbWVdKSkNCiAgICB7DQogICAgICAkbW9kID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgkbW9kX25hbWUpOw0KICAgICAgDQogICAgICBpZighXGlzX29iamVjdCgkbW9kX25hbWUpKQ0KICAgICAgew0KICAgICAgICByZXR1cm47DQogICAgICB9DQogICAgICANCiAgICAgIHNlbGY6OiRfbW9kdWxlc19jb25maWdzWyRtb2RfbmFtZV0gPSBuZXcgTW9kdWxlQ29uZmlnKCRtb2QpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gc2VsZjo6JF9tb2R1bGVzX2NvbmZpZ3NbJG1vZF9uYW1lXTsNCiAgfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.content_list_builder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBjb250ZW50X2xpc3RfYnVpbGRlciBjbGFzcy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IFV0aWxpdGllcwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCm5hbWVzcGFjZSBDTVNNU0V4dDsKdXNlIGNtc19jb250ZW50X3RyZWU7CnVzZSBDb250ZW50T3BlcmF0aW9uczsKdXNlIHh0X3V0aWxzOwoKLyoqCiAqIEEgdXRpbGl0eSBjbGFzcyB0byBidWlsZCBhIHNldCBvZiBvcHRpb25zIGZvciBhIHBhZ2UgZHJvcGRvd24uCiAqCiAqIEBwcm9wZXJ0eSBpbnR8c3RyaW5nICRwYXJlbnQgVGhlIHBhZ2UgaWQgb3IgYWxpYXMgb2YgdGhlIHBhcmVudCBwYWdlIGZvciB0aGUgb3V0cHV0IG9wdGlvbnMuICBPbmx5IGRlc2NlbmRlbnRzIG9mIHRoaXMgcGFnZSB3aWxsIGJlIHNob3duLgogKiBAcHJvcGVydHkgaW50fHN0cmluZyAkY3VycmVudCBUaGUgcGFnZSBpZCBvciBhbGlhcyBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHBhZ2UuCiAqIEBwcm9wZXJ0eSBib29sICRzaG93X3VubGlua2FibGUgU2hvdyBjb250ZW50IHR5cGVzIChsaWtlIHNlcGFyYXRvcnMgZXRjKSB0aGF0IGRvIG5vdCBoYXZlIHVzYWJsZSBsaW5rcy4KICogQHByb3BlcnR5IGJvb2wgJHNob3dfZGlzYWJsZWQgU2hvdyBkaXNhYmxlZCBjb250ZW50IHBhZ2VzLgogKiBAcHJvcGVydHkgYm9vbCAkc2hvd19uYXZoaWRkZW4gc2hvdyBjb250ZW50IG9iamVjdHMgdGhhdCBhcmUgbm90IHNob3duIGluIG1lbnUuCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJHNwYWNlciBUaGUgcHJlZml4IGJlZm9yZSBlYWNoIG9wdGlvbiB0ZXh0IHRvIGlsbHVzdHJhdGUgaXRzIHJlbGF0aXZlIGRlcHRoLgogKiBAcGFja2FnZSBDTVNNU0V4dAogKi8KY2xhc3MgY29udGVudF9saXN0X2J1aWxkZXIKewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9kYXRhID0gYXJyYXkoJ3BhcmVudCc9Pi0xLCdjdXJyZW50Jz0+bnVsbCwnc2hvd191bmxpbmthYmxlJz0+RkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaG93X2Rpc2FibGVkJz0+RkFMU0UsJ3Nob3dfbmF2aGlkZGVuJz0+RkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGFjZXInPT4nJm5ic3A7Jm5ic3A7Jm5ic3A7Jyk7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9obTsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2NtOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfc3RhcnRfaWQgPSAtMTAwOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfc3RhcnRfbGV2ZWwgPSAtMTsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdG9yCiAgICAgKgogICAgICogQHBhcmFtIGNtc19jb250ZW50X3RyZWUgVGhlIGNtc19jb250ZW50X3RyZWUgdG8gYnVpbGQgcGFnZXMgZnJvbS4KICAgICAqIEBwYXJhbSBDb250ZW50T3BlcmF0aW9ucyAkb3BzIFRoZSBjb250ZW50b3BlcmF0aW9ucyBvYmplY3QKICAgICAqIEBwYXJhbSBhcnJheSAkcGFyYW1zIGFycmF5IG9mIHNldHRpbmdzL3Byb3BlcnRpZXMgZm9yIHRoaXMgb2JqZWN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoY21zX2NvbnRlbnRfdHJlZSAkaG0sIENvbnRlbnRPcGVyYXRpb25zICRvcHMsICRwYXJhbXMgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5faG0gPSAkaG07CiAgICAgICAgJHRoaXMtPl9jbSA9ICRvcHM7CgogICAgICAgIGlmKCBpc19udWxsKCRwYXJhbXMpICkgJHBhcmFtcyA9IGFycmF5KCk7CiAgICAgICAgaWYoICFpc19hcnJheSgkcGFyYW1zKSApIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0ludmFsaWQgZGF0YSBwYXNzZWQgdG8gJy5fX01FVEhPRF9fKTsKCiAgICAgICAgZm9yZWFjaCggJHBhcmFtcyBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgICAgICR0aGlzLT4ka2V5ID0gJHZhbDsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NldCgka2V5LCR2YWwpCiAgICB7CiAgICAgICAgJGtleSA9IHRyaW0oKHN0cmluZykgJGtleSk7CiAgICAgICAgc3dpdGNoKCAka2V5ICkgewogICAgICAgIGNhc2UgJ3BhcmVudCc6CiAgICAgICAgY2FzZSAnY3VycmVudCc6CiAgICAgICAgICAgIGlmKCAkdmFsIGluc3RhbmNlb2YgY21zX3RyZWUgKSB7CiAgICAgICAgICAgICAgICAkdmFsID0gKGludCkgJHZhbC0+Z2V0X3RhZygnaWQnKTsKICAgICAgICAgICAgICAgICR0aGlzLT5fZGF0YVska2V5XSA9ICR2YWw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiggIWVtcHR5KCR2YWwpKSB7CiAgICAgICAgICAgICAgICAkdmFsID0gKHN0cmluZykgJHZhbDsKICAgICAgICAgICAgICAgIGlmKCBpc19udW1lcmljKCR2YWwpICkgewogICAgICAgICAgICAgICAgICAgICR2YWwgPSAoaW50KSAkdmFsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHJvb3QgPSBjbXNtcygpLT5HZXRIaWVyYXJjaHlNYW5hZ2VyKCk7CiAgICAgICAgICAgICAgICAgICAgJG5vZGUgPSAkcm9vdC0+c3VyZUdldE5vZGVCeUFsaWFzKCR2YWwpOwogICAgICAgICAgICAgICAgICAgIGlmKCAhJG5vZGUgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdDb3VsZCBub3QgZmluZCBhIGNvbnRlbnQgb2JqZWN0IHdpdGggYWxpYXMgb3IgaWQgb2YgJy4kdmFsKTsKICAgICAgICAgICAgICAgICAgICAkdmFsID0gKGludCkgJG5vZGUtPmdldF90YWcoJ2lkJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSAkdmFsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdzcGFjZXInOgogICAgICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSB0cmltKCAoc3RyaW5nKSAkdmFsICk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdzaG93X3VubGlua2FibGUnOgogICAgICAgIGNhc2UgJ3Nob3dfZGlzYWJsZWQnOgogICAgICAgIGNhc2UgJ3Nob3dfbmF2aGlkZGVuJzoKICAgICAgICAgICAgaWYoICFlbXB0eSgkdmFsKSB8fCBpc19udW1lcmljKCR2YWwpICkgewogICAgICAgICAgICAgICAgJHZhbCA9IHh0X3V0aWxzOjp0b19ib29sKCR2YWwpOwogICAgICAgICAgICAgICAgJHRoaXMtPl9kYXRhWyRrZXldID0gJHZhbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgka2V5KQogICAgewogICAgICAgIGlmKCAhaW5fYXJyYXkoJGtleSxhcnJheV9rZXlzKCR0aGlzLT5fZGF0YSkpICkgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiJGtleSBpcyBub3QgYSB2YWxpZCBtZW1iZXIgb2YgIi5fX0NMQVNTX18pOwogICAgICAgIHJldHVybiAkdGhpcy0+X2RhdGFbJGtleV07CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2lzc2V0KCRrZXkpCiAgICB7CiAgICAgICAgcmV0dXJuIGlzc2V0KCR0aGlzLT5fZGF0YVska2V5XSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3Vuc2V0KCRrZXkpCiAgICB7CiAgICAgICAgdW5zZXQoJHRoaXMtPl9kYXRhWyRrZXldKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfZ2V0X3BhcmVudF9pZHMoY21zX2NvbnRlbnRfdHJlZSAkbm9kZSkKICAgIHsKICAgICAgICAkdG1wID0gYXJyYXkoKTsKICAgICAgICB3aGlsZSggJG5vZGUtPmdldFBhcmVudCgpICkgewogICAgICAgICAgICBhcnJheV91bnNoaWZ0KCR0bXAsJG5vZGUtPmdldF90YWcoJ2lkJykpOwogICAgICAgICAgICAkbm9kZSA9ICRub2RlLT5nZXRQYXJlbnQoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0bXA7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX2lzX2NoaWxkX29mX3N0YXJ0KGNtc19jb250ZW50X3RyZWUgJG5vZGUpCiAgICB7CiAgICAgICAgaWYoICR0aGlzLT5wYXJlbnQgPCAxICkgcmV0dXJuIFRSVUU7IC8vIGV2ZXJ5dGhpbmcgaXMgYSBjaGlsZCBvZiB0aGUgcGFyZW50CiAgICAgICAgJHBhcmVudHMgPSAkdGhpcy0+X2dldF9wYXJlbnRfaWRzKCRub2RlKTsKICAgICAgICBpZiggaW5fYXJyYXkoJG5vZGUtPmdldF90YWcoJ2lkJyksJHBhcmVudHMpICkgcmV0dXJuIFRSVUU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX2FkZF9ub2RlKGNtc19jb250ZW50X3RyZWUgJG5vZGUsJiRvdXQpCiAgICB7CiAgICAgICAgJHJlYyA9IGFycmF5KCd2YWwnPT5udWxsLCdsYWJlbCc9Pm51bGwsJ3RpdGxlJz0+bnVsbCwnc2VsZWN0ZWQnPT5GQUxTRSwnZGlzYWJsZWQnPT5GQUxTRSwnZGVwdGgnPT4wKTsKCiAgICAgICAgJGNvbnRlbnQgPSAkbm9kZS0+R2V0Q29udGVudCgpOwogICAgICAgIGlmKCAhJGNvbnRlbnQgKSByZXR1cm47CgogICAgICAgICRyZWNbJ3ZhbCddID0gJGNvbnRlbnQtPklkKCk7CiAgICAgICAgJHJlY1snbGFiZWwnXSA9ICRjb250ZW50LT5OYW1lKCk7CiAgICAgICAgJHJlY1sndGl0bGUnXSA9ICRjb250ZW50LT5UaXRsZUF0dHJpYnV0ZSgpOwogICAgICAgICRyZWNbJ2RlcHRoJ10gPSBtYXgoMCwkbm9kZS0+Z2V0X2xldmVsKCkgLSAkdGhpcy0+X3N0YXJ0X2xldmVsKTsKCiAgICAgICAgaWYoICEkY29udGVudC0+SGFzVXNhYmxlTGluaygpICkgewogICAgICAgICAgICAvLyBjb250ZW50IGhhcyBubyB1c2FibGUgbGluawogICAgICAgICAgICBpZiggJHRoaXMtPnNob3dfdW5saW5rYWJsZSApIHsKICAgICAgICAgICAgICAgIC8vIHdlIHN0aWxsIHdhbm5hIHNob3cgaXQsIGJ1dCBpdCBjYW5ub3QgYmUgc2VsZWN0YWJsZQogICAgICAgICAgICAgICAgJHJlY1snZGlzYWJsZWQnXSA9IFRSVUU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmKCAhJGNvbnRlbnQtPkFjdGl2ZSgpICkgewogICAgICAgICAgICAvLyBjb250ZW50IGlzIG5vdCBhY3RpdmUKICAgICAgICAgICAgaWYoICR0aGlzLT5zaG93X2Rpc2FibGVkICkgewogICAgICAgICAgICAgICAgLy8gd2Ugc3RpbGwgd2FubmEgc2hvdyBpdCwgYnV0IGl0IGNhbm5vdCBiZSBzZWxlY3RhYmxlCiAgICAgICAgICAgICAgICAkcmVjWydkaXNhYmxlZCddID0gVFJVRTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYoICEkY29udGVudC0+U2hvd0luTWVudSgpICkgewogICAgICAgICAgICAvLyBjb250ZW50IGlzIG5vdCBzaG93biBpbiBtZW51CiAgICAgICAgICAgIGlmKCAhJHRoaXMtPnNob3dfbmF2aGlkZGVuICkgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYoICRjb250ZW50LT5JZCgpID09ICR0aGlzLT5jdXJyZW50ICkgJHJlY1snc2VsZWN0ZWQnXSA9IFRSVUU7CgogICAgICAgIC8vIGRvbmUKICAgICAgICAkb3V0W10gPSAkcmVjOwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF93YWxrX25vZGVzKGNtc19jb250ZW50X3RyZWUgJG5vZGUsYXJyYXkgJiRvdXQpCiAgICB7CiAgICAgICAgaWYoICR0aGlzLT5faXNfY2hpbGRfb2Zfc3RhcnQoJG5vZGUpICkgewogICAgICAgICAgICAkdGhpcy0+X2FkZF9ub2RlKCRub2RlLCRvdXQpOwogICAgICAgICAgICBpZiggISRub2RlLT5oYXNfY2hpbGRyZW4oKSApIHJldHVybjsKICAgICAgICAgICAgJGNoaWxkcmVuID0gJG5vZGUtPmdldF9jaGlsZHJlbigpOwogICAgICAgICAgICBmb3JlYWNoKCAkY2hpbGRyZW4gYXMgJGNoaWxkICkgewogICAgICAgICAgICAgICAgJHRoaXMtPl93YWxrX25vZGVzKCRjaGlsZCwkb3V0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhIGxpc3Qgb2YgbWF0Y2hpbmcgcmVjb3Jkcy4KICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYW4gYXJyYXkgb2YgaGFzaGVzLiAgRWFjaCByb3cgaW4gdGhlIHJlc3VsdHNldAogICAgICogd2lsbCBoYXZlIHZhbCx0aXRsZSxsYWJlbCxzZWxlY3RlZCxkaXNhYmxlZCBtZW1iZXJzLgogICAgICoKICAgICAqIEEgY29uc3VtZXIgb2YgdGhpcyBvdXRwdXQgY2FuIHRoZW4gcGFyc2UgdGhlc2UgcmVjb3JkcyBhbmQgYnVpbGQgYQogICAgICogc3VpdGFibGUgb3B0aW9uIGxpc3QgZm9yIGEgZHJvcGRvd24uCiAgICAgKgogICAgICogQHNlZSBjb250ZW50X2xpc3RfYnVpbGRlcjo6Z2V0X29wdGlvbnMoKQogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2NvbnRlbnRfbGlzdCgpCiAgICB7CiAgICAgICAgLy8gaW5pdGlhbGl6ZSBvdXIgc3RhcnQgbGV2ZWwKICAgICAgICAkcm9vdCA9ICR0cmVlID0gJHRoaXMtPl9obTsKICAgICAgICAkdGhpcy0+X3N0YXJ0X2xldmVsID0gMDsKICAgICAgICBpZiggJHRoaXMtPnBhcmVudCA+IDAgKSB7CiAgICAgICAgICAgICR0cmVlID0gJHJvb3QtPmZpbmRfYnlfdGFnKCdpZCcsJHRoaXMtPnBhcmVudCk7CiAgICAgICAgICAgIGlmKCAhJHRyZWUgKSB0aHJvdyBuZXcgXENtc0ludmFsaWREYXRhRXhjZXB0aW9uKCdQYWdlIHdpdGggaWQgJy4kdGhpcy0+cGFyZW50Licgbm90IGZvdW5kJyk7CiAgICAgICAgICAgICR0aGlzLT5fc3RhcnRfbGV2ZWwgPSAkdHJlZS0+Z2V0X2xldmVsKCkgKyAxOwogICAgICAgIH0KCiAgICAgICAgLy8gbm93IHRoYXQgd2UgaGF2ZSBvdXIgcGFyYW10ZXJzLCBzdGFydCBidWlsZGluZyBvdXIgdHJlZS4KICAgICAgICAkYWxsY29udGVudCA9ICR0aGlzLT5fY20tPkdldEFsbENvbnRlbnQoRkFMU0UpOwoKICAgICAgICBpZiggISR0cmVlLT5oYXNfY2hpbGRyZW4oKSApIHJldHVybjsKICAgICAgICAkY2hpbGRyZW4gPSAkdHJlZS0+Z2V0X2NoaWxkcmVuKCk7CiAgICAgICAgJG91dCA9IFtdOwogICAgICAgIGZvcmVhY2goICRjaGlsZHJlbiBhcyAkY2hpbGQgKSB7CiAgICAgICAgICAgICR0aGlzLT5fd2Fsa19ub2RlcygkY2hpbGQsJG91dCk7CiAgICAgICAgfQoKICAgICAgICBpZiggIWNvdW50KCRvdXQpICkgcmV0dXJuOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGh0bWwgb3B0aW9ucyBzdWl0YWJsZSBmb3IgdXNlIGluIGEgZHJvcGRvd24gdGhhdAogICAgICogcmVwcmVzZW50IHRoZSBwYWdlcyB0aGF0IG1hdGNoIHRoZSBjcml0ZXJpYSBzcGVjaWZpZWQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9vcHRpb25zKCkKICAgIHsKICAgICAgICAkbGlzdCA9ICR0aGlzLT5nZXRfY29udGVudF9saXN0KCk7CiAgICAgICAgaWYoICFjb3VudCgkbGlzdCkgKSByZXR1cm47CgogICAgICAgICRfYnVpbGRfb3B0aW9uID0gZnVuY3Rpb24oJHJlYykgewogICAgICAgICAgICBpZiggISRyZWNbJ2xhYmVsJ10gKSByZXR1cm47CiAgICAgICAgICAgIGlmKCAhJHJlY1sndmFsJ10gKSAkcmVjWyd2YWwnXSA9IGh0bWxlbnRpdGllcygkcmVjWydsYWJlbCddKTsKCiAgICAgICAgICAgICRvdXQgPSAnPG9wdGlvbic7CiAgICAgICAgICAgICRvdXQgLj0gJyB2YWx1ZT0iJy4kcmVjWyd2YWwnXS4nIic7CiAgICAgICAgICAgIGlmKCAkcmVjWyd0aXRsZSddICkgJG91dCAuPSAnIHRpdGxlPSInLmh0bWxlbnRpdGllcygkcmVjWyd0aXRsZSddKS4nIic7CiAgICAgICAgICAgIGlmKCAkcmVjWydkaXNhYmxlZCddICkgewogICAgICAgICAgICAgICAgJG91dCAuPSAnIGRpc2FibGVkPSJkaXNhYmxlZCInOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYoICRyZWNbJ3NlbGVjdGVkJ10gKSB7CiAgICAgICAgICAgICAgICAkb3V0IC49ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG91dCAuPSAnPicuc3RyX3JlcGVhdCgkdGhpcy0+c3BhY2VyLCRyZWNbJ2RlcHRoJ10pLmh0bWxlbnRpdGllcygkcmVjWydsYWJlbCddKTsKICAgICAgICAgICAgJG91dCAuPSAnPC9vcHRpb24+JzsKICAgICAgICAgICAgcmV0dXJuICRvdXQ7CiAgICAgICAgfTsKCiAgICAgICAgJG91dCA9ICcnOwogICAgICAgIGZvcmVhY2goICRsaXN0IGFzICRyZWMgKSB7CiAgICAgICAgICAgICRvdXQgLj0gJF9idWlsZF9vcHRpb24oJHJlYyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0OwogICAgfQp9IC8vIGVuZCBvZiBjbGFzcwoKCiMKIyBFT0YKIwo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.Cookie.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHQ7DQoNCmNsYXNzIENvb2tpZQ0Kew0KICAvKioNCiAgICogQ29va2llIG5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgY29va2llLg0KICAgKg0KICAgKiBAdmFyIGJvb2wNCiAgICovDQogIHByaXZhdGUgJG5hbWUgPSBGQUxTRTsNCiAgDQogIC8qKg0KICAgKiBDb29raWUgdmFsdWUNCiAgICoNCiAgICogQHZhciBzdHJpbmcNCiAgICovDQogIHByaXZhdGUgJHZhbHVlID0gJyc7DQogIA0KICAvKioNCiAgICogQ29va2llIGxpZmUgdGltZQ0KICAgKg0KICAgKiBAdmFyIGludA0KICAgKi8NCiAgcHJpdmF0ZSAkZXhwaXJlczsNCiAgDQogIC8qKg0KICAgKiBDb29raWUgZG9tYWluDQogICAqDQogICAqIEB2YXIgc3RyaW5nDQogICAqLw0KICBwcml2YXRlICRkb21haW4gPSBGQUxTRTsNCiAgDQogIC8qKg0KICAgKiBDb29raWUgcGF0aA0KICAgKg0KICAgKiBAdmFyIHN0cmluZw0KICAgKi8NCiAgcHJpdmF0ZSAkcGF0aCA9IEZBTFNFOw0KICANCiAgLyoqDQogICAqIENvb2tpZSBzZWN1cmUNCiAgICoNCiAgICogQHZhciBib29sDQogICAqLw0KICBwcml2YXRlICRzZWN1cmUgPSBGQUxTRTsNCiAgDQogIC8qKg0KICAgKiBDb29raWUgaHR0cF9vbmx5DQogICAqDQogICAqIEB2YXIgYm9vbA0KICAgKi8NCiAgcHJpdmF0ZSAkaHR0cF9vbmx5ID0gRkFMU0U7DQogIA0KICAvKioNCiAgICogQ29uc3RydWN0b3INCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkbmFtZQ0KICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQ0KICAgKiBAcGFyYW0gaW50ICAgICRleHBpcmVzDQogICAqIEBwYXJhbSBzdHJpbmcgJHBhdGgNCiAgICogQHBhcmFtIHN0cmluZyAkZG9tYWluDQogICAqIEBwYXJhbSBib29sICAgJHNlY3VyZQ0KICAgKiBAcGFyYW0gYm9vbCAgICRodHRwX29ubHkNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgNCiAgICBzdHJpbmcgJG5hbWUgPSAnJywNCiAgICBzdHJpbmcgJHZhbHVlID0gJycsDQogICAgaW50ICRleHBpcmVzID0gMCwNCiAgICBzdHJpbmcgJHBhdGggPSAnJywNCiAgICBzdHJpbmcgJGRvbWFpbiA9ICcnLA0KICAgIGJvb2wgJHNlY3VyZSA9IEZBTFNFLA0KICAgIGJvb2wgJGh0dHBfb25seSA9IEZBTFNFDQogICkNCiAgew0KICAgICR0aGlzLT5zZXROYW1lKCRuYW1lKTsNCiAgICAkdGhpcy0+c2V0VmFsdWUoJHZhbHVlKTsNCiAgICAkdGhpcy0+c2V0RXhwaXJlcygkZXhwaXJlcyk7DQogICAgJHRoaXMtPnNldFBhdGgoJHBhdGgpOw0KICAgICR0aGlzLT5zZXREb21haW4oJGRvbWFpbik7DQogICAgJHRoaXMtPnNldFNlY3VyZSgkc2VjdXJlKTsNCiAgICAkdGhpcy0+c2V0SHR0cE9ubHkoJGh0dHBfb25seSk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBDcmVhdGUgb3IgVXBkYXRlIGNvb2tpZS4NCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoKQ0KICB7DQogICAgcmV0dXJuIHNldGNvb2tpZSgNCiAgICAgICR0aGlzLT5uYW1lLA0KICAgICAgJHRoaXMtPmdldFZhbHVlKCksDQogICAgICAkdGhpcy0+Z2V0RXhwaXJlcygpLA0KICAgICAgJHRoaXMtPmdldFBhdGgoKSwNCiAgICAgICR0aGlzLT5nZXREb21haW4oKSwNCiAgICAgICR0aGlzLT5nZXRTZWN1cmUoKSwNCiAgICAgICR0aGlzLT5nZXRIdHRwT25seSgpDQogICAgKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIFJldHVybiBhIGNvb2tpZQ0KICAgKg0KICAgKiBAcmV0dXJuIG1peGVkDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gZ2V0KCkNCiAgew0KICAgIHJldHVybiAkX0NPT0tJRVskdGhpcy0+Z2V0TmFtZSgpXTsNCiAgfQ0KICANCiAgLyoqDQogICAqIERlbGV0ZSBjb29raWUuDQogICAqDQogICAqIEByZXR1cm4gYm9vbA0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIGRlbGV0ZSgpDQogIHsNCiAgICByZXR1cm4gc2V0Y29va2llKCR0aGlzLT5uYW1lLCAxKTsNCiAgfQ0KICANCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gJGRvbWFpbg0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIHNldERvbWFpbigkZG9tYWluKQ0KICB7DQogICAgJHRoaXMtPmRvbWFpbiA9ICRkb21haW47DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcmV0dXJuIGJvb2wNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBnZXREb21haW4oKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5kb21haW47DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gJGlkDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gc2V0TmFtZSgkaWQpDQogIHsNCiAgICAkdGhpcy0+bmFtZSA9ICRpZDsNCiAgfQ0KICANCiAgLyoqDQogICAqIEByZXR1cm4gYm9vbA0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIGdldE5hbWUoKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5uYW1lOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtICRwYXRoDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gc2V0UGF0aCgkcGF0aCkNCiAgew0KICAgICR0aGlzLT5wYXRoID0gJHBhdGg7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcmV0dXJuIGJvb2wNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXRoKCkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+cGF0aDsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSAkc2VjdXJlDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gc2V0U2VjdXJlKCRzZWN1cmUpDQogIHsNCiAgICAkdGhpcy0+c2VjdXJlID0gJHNlY3VyZTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEByZXR1cm4gYm9vbA0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIGdldFNlY3VyZSgpDQogIHsNCiAgICByZXR1cm4gJHRoaXMtPnNlY3VyZTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSAkZXhwaXJlcw0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIHNldEV4cGlyZXMoJGV4cGlyZXMpDQogIHsNCiAgICAvLyBDcmVhdGUgYSBkYXRlDQogICAgJGRhdGUgPSBuZXcgRGF0ZVRpbWUoKTsNCiAgICAvLyBNb2RpZnkgaXQgKCsxaG91cnM7ICsxZGF5czsgKzIweWVhcnM7IC0yZGF5cyBldGMpDQogICAgJGRhdGUtPm1vZGlmeSgkZXhwaXJlcyk7DQogICAgLy8gU3RvcmUgdGhlIGRhdGUgaW4gVU5JWCB0aW1lc3RhbXAuDQogICAgJHRoaXMtPmV4cGlyZXMgPSAkZGF0ZS0+Z2V0VGltZXN0YW1wKCk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcmV0dXJuIGJvb2x8aW50DQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXhwaXJlcygpDQogIHsNCiAgICByZXR1cm4gJHRoaXMtPmV4cGlyZXM7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQ0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIHNldFZhbHVlKCR2YWx1ZSkNCiAgew0KICAgICR0aGlzLT52YWx1ZSA9ICR2YWx1ZTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEByZXR1cm4gc3RyaW5nDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsdWUoKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT52YWx1ZTsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIHNldEh0dHBPbmx5KHN0cmluZyAkaHR0cF9vbmx5KQ0KICB7DQogICAgJHRoaXMtPmh0dHBfb25seSA9ICRodHRwX29ubHk7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBnZXRIdHRwT25seSgpDQogIHsNCiAgICByZXR1cm4gJHRoaXMtPmh0dHBfb25seTsNCiAgfQ0KfQ0K]]></data>
	</file>
	<file>
	  <filename>/lib/class.Cookies.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHQ7DQoNCg0KdXNlIENNU01TRXh0XGNvcmVcVFNpbmdsZXRvbjsNCg0KY2xhc3MgQ29va2llcw0Kew0KICB1c2UgVFNpbmdsZXRvbjsNCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBzZXRDb29raWUoJG5hbWUsICR2YWx1ZSA9IG51bGwsICRleHBpcmUgPSBudWxsLCAkcGF0aCA9IG51bGwsICRkb21haW4gPSBudWxsLCAkc2VjdXJlID0gbnVsbCwgJGh0dHBvbmx5ID0gbnVsbCkNCiAgew0KICAgIHJldHVybiBzZXRjb29raWUoJG5hbWUsICR2YWx1ZSwgJGV4cGlyZSwgJHBhdGgsICRkb21haW4sICRzZWN1cmUsICRodHRwb25seSk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBSZXRyaWV2ZSBhIGNvb2tpZSBieSBuYW1lDQogICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUNCiAgICogQHJldHVybiBzdHJpbmd8Ym9vbGVhbiBmYWxzZSBmb3IgZmFpbHVyZQ0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIGdldENvb2tpZSgkbmFtZSkNCiAgew0KICAgIGlmKGlzc2V0KCRfQ09PS0lFKSAmJiBcaXNfYXJyYXkoJF9DT09LSUUpICYmIFxhcnJheV9rZXlfZXhpc3RzKCRuYW1lLCAkX0NPT0tJRSkgKQ0KICAgIHsNCiAgICAgIHJldHVybiAkX0NPT0tJRVskbmFtZV07DQogICAgfQ0KICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KICANCiAgLyoqDQogICAqIFVuc2V0IGEgY29va2llIGJ5IG5hbWUNCiAgICogQHBhcmFtIHN0cmluZyAkbmFtZQ0KICAgKiBAcmV0dXJuIGJvb2xlYW4NCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiB1bnNldENvb2tpZSgkbmFtZSkNCiAgew0KICAgIGlmKGZhbHNlICE9PSAkdGhpcy0+Z2V0Q29va2llKCRuYW1lKSApDQogICAgew0KICAgICAgc2V0Y29va2llKCRuYW1lLCAnJywgMSk7DQogICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQogICAgcmV0dXJuIGZhbHNlOw0KICB9DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.DailyHookTask.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIENNU01TRXh0Owp1c2UgQ01TTVNcSG9va01hbmFnZXI7CnVzZSBDbXNSZWd1bGFyVGFzazsKdXNlIGNtc19zaXRlcHJlZnM7CgpjbGFzcyBEYWlseUhvb2tUYXNrIGltcGxlbWVudHMgQ21zUmVndWxhclRhc2sKewogICAgcHVibGljIGZ1bmN0aW9uIGdldF9uYW1lKCkgeyByZXR1cm4gX19DTEFTU19fOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2Rlc2NyaXB0aW9uKCkge30KICAKICBwdWJsaWMgZnVuY3Rpb24gdGVzdCgkdGltZSA9ICcnKQogIHsKICAgIGlmKCEkdGltZSkgeyAkdGltZSA9IFx0aW1lKCk7IH0KICAgIAogICAgJGxhc3RydW4gPSAoaW50KWNtc19zaXRlcHJlZnM6OmdldChfX0NMQVNTX18pOwogICAgCiAgICByZXR1cm4gJHRpbWUgLSAkbGFzdHJ1biA+IDI0ICogMzYwMDsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCR0aW1lID0gJycpCiAgewogICAgaWYoICEkdGltZSApIHsgJHRpbWUgPSBcdGltZSgpOyB9CiAgICAKICAgIEhvb2tNYW5hZ2VyOjpkb19ob29rKCdDTVNNU0V4dDo6RGFpbHlUYXNrJywgJHRpbWUpOwogICAgCiAgICByZXR1cm4gVFJVRTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIG9uX3N1Y2Nlc3MoJHRpbWUgPSAnJykKICB7CiAgICBpZiggISR0aW1lICkgeyAkdGltZSA9IFx0aW1lKCk7IH0KICAgIAogICAgY21zX3NpdGVwcmVmczo6c2V0KF9fQ0xBU1NfXywgJHRpbWUpOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIG9uX2ZhaWx1cmUoJHRpbWUgPSAnJykKICB7CiAgICBpZiggISR0aW1lICkgeyAkdGltZSA9IFx0aW1lKCk7IH0KICB9Cgp9IC8vIGNsYXNzCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.debug.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICoNCiAqLw0KDQpuYW1lc3BhY2UgQ01TTVNFeHQ7DQoNCg0KY2xhc3MgZGVidWcNCnsNCiAgDQogIC8qKg0KICAgKiBwcml2YXRlIHByb3BlcnRpZXMNCiAgICovDQogIA0KICBwcml2YXRlIHN0YXRpYyAkX29iamVjdHM7DQogIHByaXZhdGUgc3RhdGljICRfb3V0cHV0Ow0KICBwcml2YXRlIHN0YXRpYyAkX2RlcHRoOw0KICBwcml2YXRlIHN0YXRpYyAkX2ZsYWdzID0gW107DQogIA0KICAvKioNCiAgICogY29uc3RhbnRzDQogICAqLw0KICANCiAgIyBtb2Rlcw0KICBwdWJsaWMgY29uc3QgTV9EVU1QICAgPSAnZHVtcCc7DQogIHB1YmxpYyBjb25zdCBNX1hEVU1QICA9ICd4ZHVtcCc7DQogIHB1YmxpYyBjb25zdCBNX0VYUE9SVCA9ICdleHBvcnQnOw0KICANCiAgIyBmbGFncw0KICBwdWJsaWMgY29uc3QgRl9ERUZBVUxUICAgID0gIDA7ICAgI0JJTiAwMDAwMDAwMA0KICBwdWJsaWMgY29uc3QgRl9FQ0hPICAgICAgID0gIDE7ICAgI0JJTiAwMDAwMDAwMQ0KICBwdWJsaWMgY29uc3QgRl9IVE1MICAgICAgID0gIDI7ICAgI0JJTiAwMDAwMDAxMA0KICBwdWJsaWMgY29uc3QgRl9TVFJJUF9UQUdTID0gIDQ7ICAgI0JJTiAwMDAwMDEwMA0KICBwdWJsaWMgY29uc3QgRl9ISUdITElHSFQgID0gIDg7ICAgI0JJTiAwMDAwMTAwMA0KICBwdWJsaWMgY29uc3QgRl9ESUUgICAgICAgID0gMTY7ICAgI0JJTiAwMDAxMDAwMA0KICBwdWJsaWMgY29uc3QgRl9UUkFDRSAgICAgID0gMzI7ICAgI0JJTiAwMDEwMDAwMA0KICBwdWJsaWMgY29uc3QgRl9TT1VSQ0UgICAgID0gNjQ7ICAgI0JJTiAwMTAwMDAwMA0KICANCiAgLyoqDQogICAqIHByaXZhdGUgbWV0aG9kcw0KICAgKi8NCiAgDQogIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKXt9DQogIA0KICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBfcHJvY2Vzc19mbGFncygkZmxhZ3MgPSBzZWxmOjpGX0RFRkFVTFQpDQogIHsNCiAgICBpZigkZmxhZ3MgPT09IHNlbGY6OkZfREVGQVVMVCkNCiAgICB7DQogICAgICBzZWxmOjokX2ZsYWdzWydlY2hvJ10gICAgICAgPSBUUlVFOw0KICAgICAgc2VsZjo6JF9mbGFnc1snaHRtbCddICAgICAgID0gVFJVRTsNCiAgICAgIHNlbGY6OiRfZmxhZ3NbJ3N0cmlwX3RhZ3MnXSA9IEZBTFNFOw0KICAgICAgc2VsZjo6JF9mbGFnc1snaGlnaGxpZ2h0J10gID0gVFJVRTsNCiAgICAgIHNlbGY6OiRfZmxhZ3NbJ2RpZSddICAgICAgICA9IEZBTFNFOw0KICAgICAgc2VsZjo6JF9mbGFnc1sndHJhY2UnXSAgICAgID0gRkFMU0U7DQogICAgICBzZWxmOjokX2ZsYWdzWydzb3VyY2UnXSAgICAgPSBGQUxTRTsNCiAgICAgIA0KICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICANCiAgICBzZWxmOjokX2ZsYWdzWydlY2hvJ10gICAgICAgPSAkZmxhZ3MgJiBzZWxmOjpGX0VDSE87DQogICAgc2VsZjo6JF9mbGFnc1snaHRtbCddICAgICAgID0gJGZsYWdzICYgc2VsZjo6Rl9IVE1MOw0KICAgIHNlbGY6OiRfZmxhZ3NbJ3N0cmlwX3RhZ3MnXSA9ICRmbGFncyAmIHNlbGY6OkZfU1RSSVBfVEFHUzsNCiAgICBzZWxmOjokX2ZsYWdzWydoaWdobGlnaHQnXSAgPSAkZmxhZ3MgJiBzZWxmOjpGX0hJR0hMSUdIVDsNCiAgICBzZWxmOjokX2ZsYWdzWydkaWUnXSAgICAgICAgPSAkZmxhZ3MgJiBzZWxmOjpGX0RJRTsNCiAgICBzZWxmOjokX2ZsYWdzWyd0cmFjZSddICAgICAgPSAkZmxhZ3MgJiBzZWxmOjpGX1RSQUNFOw0KICAgIHNlbGY6OiRfZmxhZ3NbJ3NvdXJjZSddICAgICA9ICRmbGFncyAmIHNlbGY6OkZfU09VUkNFOw0KICB9DQogIA0KICAvKioNCiAgICogQSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIGJhY2t0cmFjZSBpbiBhIHJlYWRhYmxlIGZvcm1hdC4NCiAgICovDQogIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIF9idCgkYnQpDQogIHsNCiAgICAkb3V0cHV0ID0gJyc7DQogICAgJGZpbGUgPSAkYnRbMF1bJ2ZpbGUnXTsNCiAgICAkbGluZSA9ICRidFswXVsnbGluZSddOw0KICAgIA0KICAgICRvdXRwdXQgLj0gIlxuXG5cbjxwPjxiPkJhY2t0cmFjZSBpbiAkZmlsZSBvbiBsaW5lICRsaW5lPC9iPjwvcD5cbiI7DQogICAgDQogICAgJGJ0ID0gXGFycmF5X3JldmVyc2UoJGJ0KTsNCiAgICANCiAgICAkb3V0cHV0IC49ICAiPHByZT48ZGw+XG4iOw0KICAgIA0KICAgIGZvcmVhY2goJGJ0IGFzICR0cmFjZSkNCiAgICB7DQogICAgICAkZmlsZSAgICAgPSAkdHJhY2VbJ2ZpbGUnXTsNCiAgICAgICRsaW5lICAgICA9ICR0cmFjZVsnbGluZSddOw0KICAgICAgJGZ1bmN0aW9uID0gJHRyYWNlWydmdW5jdGlvbiddOw0KICAgICAgDQogICAgICAkYXJncyA9IFtdOw0KICAgICAgZm9yZWFjaCgkdHJhY2VbJ2FyZ3MnXSBhcyAkYXJnKQ0KICAgICAgew0KICAgICAgICBzd2l0Y2goIFxnZXR0eXBlKCRhcmcpICkNCiAgICAgICAgew0KICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOg0KICAgICAgICAgICAgJGFyZ3MgLj0gJGFyZyA/ICdUUlVFJyA6ICdGQUxTRSc7DQogICAgICAgICAgYnJlYWs7DQogIA0KICAgICAgICAgIGNhc2UgJ2RvdWJsZSc6DQogICAgICAgICAgY2FzZSAnaW50ZWdlcic6DQogICAgICAgICAgICAkYXJnc1tdID0gIiRhcmciOw0KICAgICAgICAgIGJyZWFrOw0KICANCiAgICAgICAgICBjYXNlICdzdHJpbmcnOg0KICAgICAgICAgICAgJGFyZ3NbXSA9ICInJGFyZyciOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgIA0KICAgICAgICAgIGNhc2UgJ3Jlc291cmNlJzoNCiAgICAgICAgICAgICRhcmdzW10gPSAne3Jlc291cmNlfSc7DQogICAgICAgICAgYnJlYWs7DQogICAgICAgICAgDQogICAgICAgICAgY2FzZSAnTlVMTCc6DQogICAgICAgICAgICAkYXJnc1tdID0gIk5VTEwiOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgIA0KICAgICAgICAgIGNhc2UgJ3Vua25vd24gdHlwZSc6DQogICAgICAgICAgICAkYXJnc1tdID0gJ3t1bmtub3dufSc7DQogICAgICAgICAgYnJlYWs7DQogICAgICAgICAgDQogICAgICAgICAgY2FzZSAnYXJyYXknOg0KICAgICAgICAgICAgLy8kYXJnc1tdID0gIiRhcmciOw0KICAgICAgICAgICAgJGFyZ3NbXSA9IFxwcmludF9yKCRhcmcsIFRSVUUpOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgIA0KICAgICAgICAgIGNhc2UgJ29iamVjdCc6DQogICAgICAgICAgICAkYXJnc1tdID0gJ3tvYmplY3R9ICcgLiBcZ2V0X2NsYXNzKCRhcmcpOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgIA0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgfQ0KICAgICAgDQogICAgICAkYXJncyA9IFxpbXBsb2RlKCcsICcsICRhcmdzKTsNCiAgICAgIA0KICAgICAgJG91dHB1dCAuPSAiDQogICAgICAgICAgPGR0PjxiPiRmdW5jdGlvbjwvYj4oJGFyZ3MpIDwvZHQ+DQogICAgICAgICAgPGRkPiRmaWxlIG9uIGxpbmUgJGxpbmU8L2RkPg0KICAJCSI7DQogICAgfQ0KICAgIA0KICAgICRvdXRwdXQgLj0gICI8L2RsPjwvcHJlPlxuIjsNCiAgICANCiAgICByZXR1cm4gJG91dHB1dDsNCiAgfQ0KICANCiAgLyoqDQogICAqIGJhc2VkIG9uIFFpYW5nIFh1ZSdzIFRWYXJEdW1wZXINCiAgICoNCiAgICogQHBhcmFtICR2YXINCiAgICogQHBhcmFtICRsZXZlbA0KICAgKi8NCiAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gX2R1bXBJbnRlcm5hbCgkdmFyLCAkbGV2ZWwpDQogIHsNCiAgICBzd2l0Y2goIFxnZXR0eXBlKCR2YXIpICkNCiAgICB7DQogICAgICBjYXNlICdib29sZWFuJzoNCiAgICAgICAgc2VsZjo6JF9vdXRwdXQgLj0gJHZhciA/ICdUUlVFJyA6ICdGQUxTRSc7DQogICAgICBicmVhazsNCiAgDQogICAgICBjYXNlICdkb3VibGUnOg0KICAgICAgY2FzZSAnaW50ZWdlcic6DQogICAgICAgIHNlbGY6OiRfb3V0cHV0IC49ICIkdmFyIjsNCiAgICAgIGJyZWFrOw0KICANCiAgICAgIGNhc2UgJ3N0cmluZyc6DQogICAgICAgIHNlbGY6OiRfb3V0cHV0IC49ICInJHZhciciOw0KICAgICAgYnJlYWs7DQogICAgICANCiAgICAgIGNhc2UgJ3Jlc291cmNlJzoNCiAgICAgICAgc2VsZjo6JF9vdXRwdXQgLj0gJ3tyZXNvdXJjZX0nOw0KICAgICAgYnJlYWs7DQogICAgICANCiAgICAgIGNhc2UgJ05VTEwnOg0KICAgICAgICBzZWxmOjokX291dHB1dCAuPSAiTlVMTCI7DQogICAgICBicmVhazsNCiAgICAgIA0KICAgICAgY2FzZSAndW5rbm93biB0eXBlJzoNCiAgICAgICAgc2VsZjo6JF9vdXRwdXQgLj0gJ3t1bmtub3dufSc7DQogICAgICBicmVhazsNCiAgICAgIA0KICAgICAgY2FzZSAnYXJyYXknOg0KICAgICAgICBpZihzZWxmOjokX2RlcHRoIDw9ICRsZXZlbCkNCiAgICAgICAgew0KICAgICAgICAgIHNlbGY6OiRfb3V0cHV0IC49ICdhcnJheSguLi4pJzsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmKGVtcHR5KCR2YXIpKQ0KICAgICAgICB7DQogICAgICAgICAgc2VsZjo6JF9vdXRwdXQgLj0gJ2FycmF5KCknOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICRrZXlzICAgICAgICAgID0gXGFycmF5X2tleXMoJHZhcik7DQogICAgICAgICAgJHNwYWNlcyAgICAgICAgPSBcc3RyX3JlcGVhdCgnICcsICRsZXZlbCAqIDQpOw0KICAgICAgICAgIHNlbGY6OiRfb3V0cHV0IC49ICJhcnJheVxuIiAuICRzcGFjZXMgLiAnKCc7DQogICAgICAgICAgDQogICAgICAgICAgZm9yZWFjaCgka2V5cyBhcyAka2V5KQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIHNlbGY6OiRfb3V0cHV0IC49ICJcbiIgLiAkc3BhY2VzIC4gIiAgICBbJGtleV0gPT4gIjsNCiAgICAgICAgICAgIHNlbGY6OiRfb3V0cHV0IC49IHNlbGY6Ol9kdW1wSW50ZXJuYWwoJHZhclska2V5XSwgJGxldmVsICsgMSk7DQogICAgICAgICAgfQ0KICAgICAgICAgIA0KICAgICAgICAgIHNlbGY6OiRfb3V0cHV0IC49ICJcbiIgLiAkc3BhY2VzIC4gJyknOw0KICAgICAgICB9DQogICAgICBicmVhazsNCiAgICAgIA0KICAgICAgY2FzZSAnb2JqZWN0JzoNCiAgICAgICAgaWYoIEZBTFNFICE9PSAoJGlkID0gXGFycmF5X3NlYXJjaCgkdmFyLCBzZWxmOjokX29iamVjdHMsIFRSVUUpICkgKQ0KICAgICAgICB7DQogICAgICAgICAgc2VsZjo6JF9vdXRwdXQgLj0gXGdldF9jbGFzcygkdmFyKSAuICcgIycgLiAoJGlkICsgMSkgLiAnKC4uLiknOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYoc2VsZjo6JF9kZXB0aCA8PSAkbGV2ZWwpDQogICAgICAgIHsNCiAgICAgICAgICBzZWxmOjokX291dHB1dCAuPSBcZ2V0X2NsYXNzKCR2YXIpIC4gJyguLi4pJzsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAkaWQgICAgICAgICAgICA9IFxhcnJheV9wdXNoKHNlbGY6OiRfb2JqZWN0cywgJHZhcik7DQogICAgICAgICAgJGNsYXNzTmFtZSAgICAgPSBcZ2V0X2NsYXNzKCR2YXIpOw0KICAgICAgICAgICRtZW1iZXJzICAgICAgID0gKGFycmF5KSR2YXI7DQogICAgICAgICAgJGtleXMgICAgICAgICAgPSBcYXJyYXlfa2V5cygkbWVtYmVycyk7DQogICAgICAgICAgJHNwYWNlcyAgICAgICAgPSBcc3RyX3JlcGVhdCgnICcsICRsZXZlbCAqIDQpOw0KICAgICAgICAgIHNlbGY6OiRfb3V0cHV0IC49ICIkY2xhc3NOYW1lICMkaWRcbiIgLiAkc3BhY2VzIC4gJygnOw0KICAgICAgICAgIA0KICAgICAgICAgIGZvcmVhY2goJGtleXMgYXMgJGtleSkNCiAgICAgICAgICB7DQogICAgICAgICAgICAka2V5RGlzcGxheSAgICA9IHN0cnRyKFx0cmltKCRrZXkpLCBbIlwwIiA9PiAnOiddKTsNCiAgICAgICAgICAgIHNlbGY6OiRfb3V0cHV0IC49ICJcbiIgLiAkc3BhY2VzIC4gIiAgICBbJGtleURpc3BsYXldID0+ICI7DQogICAgICAgICAgICBzZWxmOjokX291dHB1dCAuPSBzZWxmOjpfZHVtcEludGVybmFsKCRtZW1iZXJzWyRrZXldLCAkbGV2ZWwgKyAxKTsNCiAgICAgICAgICB9DQogICAgICAgICAgDQogICAgICAgICAgc2VsZjo6JF9vdXRwdXQgLj0gIlxuIiAuICRzcGFjZXMgLiAnKSc7DQogICAgICAgIH0NCiAgICAgIGJyZWFrOw0KICAgIH0NCiAgICANCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSBtaXhlZCAkdmFyDQogICAqIEBwYXJhbSBpbnQgICAkbWF4RGVwdGgNCiAgICoNCiAgICogQHJldHVybiBtaXhlZA0KICAgKi8NCiAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gX2V4cG9ydCgkdmFyLCAkbWF4RGVwdGgpDQogIHsNCiAgICAkcmV0dXJuID0gTlVMTDsNCiAgICANCiAgICAkaXNPYmogID0gXGlzX29iamVjdCgkdmFyKTsNCiAgICANCiAgICBpZighJG1heERlcHRoKQ0KICAgIHsNCiAgICAgIHJldHVybiBcaXNfb2JqZWN0KCR2YXIpID8gXGdldF9jbGFzcygkdmFyKQ0KICAgICAgICA6IChcaXNfYXJyYXkoJHZhcikgPyAnQXJyYXkoJyAuIFxjb3VudCgkdmFyKSAuICcpJyA6ICR2YXIpOw0KICAgIH0NCiAgICANCiAgICBpZihcaXNfYXJyYXkoJHZhcikpDQogICAgew0KICAgICAgJHJldHVybiA9IFtdOw0KICAgICAgDQogICAgICBmb3JlYWNoKCR2YXIgYXMgJGsgPT4gJHYpDQogICAgICB7DQogICAgICAgICRyZXR1cm5bJGtdID0gc2VsZjo6X2V4cG9ydCgkdiwgJG1heERlcHRoIC0gMSk7DQogICAgICB9DQogICAgICANCiAgICAgIHJldHVybiAkcmV0dXJuOw0KICAgIH0NCiAgICANCiAgICBpZighJGlzT2JqKQ0KICAgIHsNCiAgICAgIHJldHVybiAkdmFyOw0KICAgIH0NCiAgICANCiAgICAkcmV0dXJuID0gbmV3IFxzdGRDbGFzcygpOw0KICAgIA0KICAgIGlmKCR2YXIgaW5zdGFuY2VvZiBcRGF0ZVRpbWVJbnRlcmZhY2UpDQogICAgew0KICAgICAgJHJldHVybi0+X19DTEFTU19fID0gXGdldF9jbGFzcygkdmFyKTsNCiAgICAgICRyZXR1cm4tPmRhdGUgICAgICA9ICR2YXItPmZvcm1hdCgnYycpOw0KICAgICAgJHJldHVybi0+dGltZXpvbmUgID0gJHZhci0+Z2V0VGltZXpvbmUoKS0+Z2V0TmFtZSgpOw0KICAgICAgDQogICAgICByZXR1cm4gJHJldHVybjsNCiAgICB9DQogICAgDQogICAgaWYoJHZhciBpbnN0YW5jZW9mIFxBcnJheU9iamVjdCB8fCAkdmFyIGluc3RhbmNlb2YgXEFycmF5SXRlcmF0b3IpDQogICAgew0KICAgICAgJHJldHVybi0+X19TVE9SQUdFX18gPSBzZWxmOjpfZXhwb3J0KCR2YXItPmdldEFycmF5Q29weSgpLCAkbWF4RGVwdGggLSAxKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuIHNlbGY6Ol9maWxsV2l0aENsYXNzQXR0cmlidXRlcygkdmFyLCAkcmV0dXJuLCAkbWF4RGVwdGgpOw0KICB9DQogIA0KICAvKioNCiAgICogRmlsbCB0aGUgJHJldHVybiB2YXJpYWJsZSB3aXRoIGNsYXNzIGF0dHJpYnV0ZXMNCiAgICogQmFzZWQgb24gb2JqMmFycmF5IGZ1bmN0aW9uIGZyb20ge0BzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZ2V0LW9iamVjdC12YXJzLnBocCM0NzA3NX0NCiAgICoNCiAgICogQHBhcmFtIG9iamVjdCAgICR2YXINCiAgICogQHBhcmFtIFxzdGRDbGFzcyAkcmV0dXJuDQogICAqIEBwYXJhbSBpbnQgICAgICAkbWF4RGVwdGgNCiAgICoNCiAgICogQHJldHVybiBtaXhlZA0KICAgKi8NCiAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gX2ZpbGxXaXRoQ2xhc3NBdHRyaWJ1dGVzKCR2YXIsIFxzdGRDbGFzcyAkcmV0dXJuLCAkbWF4RGVwdGgpDQogIHsNCiAgICAkY2xvbmUgPSAoYXJyYXkpJHZhcjsNCiAgICANCiAgICBmb3JlYWNoKFxhcnJheV9rZXlzKCRjbG9uZSkgYXMgJGtleSkNCiAgICB7DQogICAgICAkYXV4ICA9IFxleHBsb2RlKCJcMCIsICRrZXkpOw0KICAgICAgJG5hbWUgPSBcZW5kKCRhdXgpOw0KICAgICAgDQogICAgICBpZignJyA9PT0gJGF1eFswXSkNCiAgICAgIHsNCiAgICAgICAgJG5hbWUgLj0gJzonIC4gKCcqJyA9PT0gJGF1eFsxXSA/ICdwcm90ZWN0ZWQnIDogJGF1eFsxXSAuICc6cHJpdmF0ZScpOw0KICAgICAgfQ0KICAgICAgDQogICAgICAkcmV0dXJuLT4kbmFtZSA9IHNlbGY6Ol9leHBvcnQoJGNsb25lWyRrZXldLCAkbWF4RGVwdGggLSAxKTs7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkcmV0dXJuOw0KICB9DQogIA0KICAvKioNCiAgICogcHVibGljIG1ldGhvZHMNCiAgICovDQogIA0KICAvKioNCiAgICogYmFzZWQgb24gUWlhbmcgWHVlJ3MgVFZhckR1bXBlcg0KICAgKg0KICAgKiBlY2hvIGRlYnVnX2Rpc3BsYXk6OmR1bXAoJHZhcik7DQogICAqDQogICAqIENvbnZlcnRzIGEgdmFyaWFibGUgaW50byBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4NCiAgICogVGhpcyBtZXRob2QgYWNoaWV2ZXMgdGhlIHNpbWlsYXIgZnVuY3Rpb25hbGl0eSBhcyB2YXJfZHVtcCBhbmQgcHJpbnRfcg0KICAgKg0KICAgKiBAcGFyYW0gbWl4ZWQgdmFyaWFibGUgdG8gYmUgZHVtcGVkDQogICAqIEBwYXJhbSBpbnRlZ2VyIG1heGltdW0gZGVwdGggdGhhdCB0aGUgZHVtcGVyIHNob3VsZCBnbyBpbnRvIHRoZSB2YXJpYWJsZS4gRGVmYXVsdHMgdG8gMTAuDQogICAqDQogICAqIEByZXR1cm4gc3RyaW5nIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhcmlhYmxlDQogICAqLw0KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGR1bXAoJHZhciwgJGRlcHRoID0gMTAsICRoaWdobGlnaHQgPSBGQUxTRSkNCiAgew0KICAgIHNlbGY6OiRfb3V0cHV0ID0gJyc7DQogICAgc2VsZjo6JF9vYmplY3RzID0gW107DQogICAgc2VsZjo6JF9kZXB0aCAgID0gJGRlcHRoOw0KICAgIHNlbGY6Ol9kdW1wSW50ZXJuYWwoJHZhciwgMCk7DQogICAgDQogICAgaWYoJGhpZ2hsaWdodCkNCiAgICB7DQogICAgICAkcmVzdWx0ID0gXGhpZ2hsaWdodF9zdHJpbmcoIjw/cGhwXG4iIC4gc2VsZjo6JF9vdXRwdXQsIFRSVUUpOw0KICAgIA0KICAgICAgcmV0dXJuIFxwcmVnX3JlcGxhY2UoJy8mbHQ7XFw/cGhwPGJyIFxcLz4vJywgJycsICRyZXN1bHQsIDEpOw0KICAgIH0NCiAgDQogICAgcmV0dXJuIHNlbGY6OiRfb3V0cHV0Ow0KICB9DQogIA0KICAvKioNCiAgICogUHJpbnRzIGEgZHVtcCBvZiB0aGUgcHVibGljLCBwcm90ZWN0ZWQgYW5kIHByaXZhdGUgcHJvcGVydGllcyBvZiAkdmFyLg0KICAgKg0KICAgKiBAbGluayBodHRwczovL3hkZWJ1Zy5vcmcvDQogICAqDQogICAqIEBwYXJhbSBtaXhlZCAgICR2YXIgICAgICAgVGhlIHZhcmlhYmxlIHRvIGR1bXAuDQogICAqIEBwYXJhbSBpbnRlZ2VyICRtYXhEZXB0aCAgVGhlIG1heGltdW0gbmVzdGluZyBsZXZlbCBmb3Igb2JqZWN0IHByb3BlcnRpZXMuDQogICAqIEBwYXJhbSBib29sZWFuICRzdHJpcFRhZ3MgV2hldGhlciBvdXRwdXQgc2hvdWxkIHN0cmlwIEhUTUwgdGFncy4NCiAgICogQHBhcmFtIGJvb2xlYW4gJGVjaG8gICAgICBTZW5kIHRoZSBkdW1wZWQgdmFsdWUgdG8gdGhlIG91dHB1dCBidWZmZXINCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICovDQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24geGR1bXAoJHZhciwgJG1heERlcHRoID0gMiwgJHN0cmlwVGFncyA9IFRSVUUsICRlY2hvID0gVFJVRSkNCiAgew0KICAgICRodG1sID0gXGluaV9nZXQoJ2h0bWxfZXJyb3JzJyk7DQogICAgDQogICAgaWYoVFJVRSAhPT0gJGh0bWwpDQogICAgew0KICAgICAgXGluaV9zZXQoJ2h0bWxfZXJyb3JzJywgVFJVRSk7DQogICAgfQ0KICAgIA0KICAgIGlmKFxleHRlbnNpb25fbG9hZGVkKCd4ZGVidWcnKSkNCiAgICB7DQogICAgICBcaW5pX3NldCgneGRlYnVnLnZhcl9kaXNwbGF5X21heF9kZXB0aCcsICRtYXhEZXB0aCk7DQogICAgfQ0KICAgIA0KICAgICR2YXIgPSBzZWxmOjpfZXhwb3J0KCR2YXIsICRtYXhEZXB0aCk7DQogICAgDQogICAgXG9iX3N0YXJ0KCk7DQogICAgXHZhcl9kdW1wKCR2YXIpOw0KICAgICRkdW1wID0gXG9iX2dldF9jb250ZW50cygpOw0KICAgIFxvYl9lbmRfY2xlYW4oKTsNCiAgICANCiAgICAkZHVtcFRleHQgPSAoJHN0cmlwVGFncyA/IFxzdHJpcF90YWdzKFxodG1sX2VudGl0eV9kZWNvZGUoJGR1bXApKSA6ICRkdW1wKTsNCiAgICANCiAgICBcaW5pX3NldCgnaHRtbF9lcnJvcnMnLCAkaHRtbCk7DQogICAgDQogICAgaWYoJGVjaG8pDQogICAgew0KICAgICAgZWNobyAkZHVtcFRleHQ7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkZHVtcFRleHQ7DQogIH0NCiAgDQogIC8qKg0KICAgKiBBbm90aGVyIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIG91dHB1dCBhIGh1bWFuLXJlYWRhYmxlIGZ1bmN0aW9uIHN0YWNrIHRyYWNlLg0KICAgKg0KICAgKiBUaGlzIG1ldGhvZCB1c2VzIGVjaG8uDQogICAqLw0KICBwdWJsaWMgc3RhdGljICBmdW5jdGlvbiBzdGFja190cmFjZSgpDQogIHsNCiAgICAkc3RhY2sgPSBcZGVidWdfYmFja3RyYWNlKCk7DQogICAgZm9yZWFjaCgkc3RhY2sgYXMgJGVsZW0pDQogICAgew0KICAgICAgaWYoJ3N0YWNrX3RyYWNlJyA9PT0gJGVsZW1bJ2Z1bmN0aW9uJ10pIHsgY29udGludWU7IH0NCiAgICAgIA0KICAgICAgaWYoaXNzZXQoJGVsZW1bJ2ZpbGUnXSkpDQogICAgICB7DQogICAgICAgIGVjaG8gJGVsZW1bJ2ZpbGUnXSAuICc6JyAuICRlbGVtWydsaW5lJ10gLiAnIC0gJyAuICRlbGVtWydmdW5jdGlvbiddIC4gJzxici8+JzsNCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgZWNobyAnIC0gJyAuICRlbGVtWydmdW5jdGlvbiddIC4gJzxici8+JzsNCiAgICAgIH0NCiAgICB9DQogIH0NCiAgDQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGlzcGxheSgNCiAgICAkd2hhdCwNCiAgICBzdHJpbmcgJG1vZGUgPSBzZWxmOjpNX0RVTVAsDQogICAgaW50ICRkZXB0aCA9IDEwLA0KICAgIGludCAkZmxhZ3MgPSBzZWxmOjpGX0RFRkFVTFQNCiAgKQ0KICB7DQogICAgIyBnYXRoZXIgc29tZSBpbmZvIGZyb20gdGhlIGJhY2t0cmFjZQ0KICAgICRidCA9IFxkZWJ1Z19iYWNrdHJhY2UoKTsNCiAgICAkZmlsZSA9IFxmaWxlKCRidFswXVsnZmlsZSddKTsNCiAgICAkc3JjICA9ICRmaWxlWyRidFswXVsnbGluZSddLTFdOw0KICAgICRwYXQgPSAnIyguKiknIC4gX19GVU5DVElPTl9fIC4gJyAqP1woICo/KC4qKSAqP1wpKC4qKSNpJzsNCiAgICAkcGFyYW1zICA9IFxwcmVnX3JlcGxhY2UoJHBhdCwgJyQyJywgJHNyYyk7DQogICAgJHZhcnMgPSBcZXhwbG9kZSgnLCcsICRwYXJhbXMpOw0KICAgICR2YXIgPSBcdHJpbSgkdmFyc1swXSk7DQogICAgc2VsZjo6JF9vdXRwdXQgID0gJyc7DQogICAgJGZpbmFsX291dCA9ICcnOw0KDQogICAgIyBwcm9jZXNzIGZsYWdzDQogICAgc2VsZjo6X3Byb2Nlc3NfZmxhZ3MoJGZsYWdzKTsNCiAgICANCiAgICBzd2l0Y2goJG1vZGUpDQogICAgew0KICAgICAgY2FzZSBzZWxmOjpNX0RVTVA6DQogICAgICAgIHNlbGY6OmR1bXAoJHdoYXQsICRkZXB0aCk7DQogICAgICBicmVhazsNCiAgICAgIGNhc2Ugc2VsZjo6TV9FWFBPUlQ6DQogICAgICBjYXNlIHNlbGY6Ok1fWERVTVA6DQogICAgICAgICMgVE9ETw0KICAgICAgYnJlYWs7DQogICAgICBkZWZhdWx0Og0KICAgIH0NCiAgICANCiAgICBpZihzZWxmOjokX2ZsYWdzWydoaWdobGlnaHQnXSkNCiAgICB7DQogICAgICAkcmVzdWx0ID0gXGhpZ2hsaWdodF9zdHJpbmcoIjw/cGhwXG4iIC4gc2VsZjo6JF9vdXRwdXQsIFRSVUUpOw0KICAgICAgJHJlc3VsdCA9IFxwcmVnX3JlcGxhY2UoJy8mbHQ7XFw/cGhwPGJyIFxcLz4vJywgJycsICRyZXN1bHQsIDEpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJHJlc3VsdCA9IHNlbGY6OiRfb3V0cHV0Ow0KICAgIH0NCiAgICANCiAgICBpZihzZWxmOjokX2ZsYWdzWydzb3VyY2UnXSkNCiAgICB7DQogICAgICBpZihzZWxmOjokX2ZsYWdzWydodG1sJ10pDQogICAgICB7DQogICAgICAgICRmaW5hbF9vdXQgLj0gJzxici8+Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6PGJyLz4nOw0KICAgICAgICAkZmluYWxfb3V0IC49ICdjYWxsZWQgZnJvbTogJzsNCiAgICAgICAgJGZpbmFsX291dCAuPSAkYnRbMF1bJ2ZpbGUnXSAuICcgLSAnIC4gJGJ0WzBdWydsaW5lJ10gLiAnPGJyLz4nOw0KICAgICAgICAkZmluYWxfb3V0IC49ICctICcgLiAkYnRbMF1bJ2NsYXNzJ10gLiAkYnRbMF1bJ3R5cGUnXSAuICRidFswXVsnZnVuY3Rpb24nXSAuICcgOiAnIC4gJzxici8+JzsNCiAgICAgICAgJGZpbmFsX291dCAuPSAnLSB2YXJpYWJsZTogJyAuICR2YXI7DQogICAgICAgICRmaW5hbF9vdXQgLj0gJzxici8+Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6PGJyLz4nOw0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAkZmluYWxfb3V0IC49IFBIUF9FT0wgLiBQSFBfRU9MOw0KICAgICAgICAkZmluYWxfb3V0IC49ICdjYWxsZWQgZnJvbTogJzsNCiAgICAgICAgJGZpbmFsX291dCAuPSBQSFBfRU9MOw0KICAgICAgICAkZmluYWxfb3V0IC49ICRidFswXVsnZmlsZSddIC4gJyAtICcgLiAkYnRbMF1bJ2xpbmUnXTsNCiAgICAgICAgJGZpbmFsX291dCAuPSBQSFBfRU9MOw0KICAgICAgICAkZmluYWxfb3V0IC49ICctICcgLiAkYnRbMF1bJ2NsYXNzJ10gLiAkYnRbMF1bJ3R5cGUnXSAuICRidFswXVsnZnVuY3Rpb24nXTsNCiAgICAgICAgJGZpbmFsX291dCAuPSBQSFBfRU9MOw0KICAgICAgICAkZmluYWxfb3V0IC49ICctIHZhcmlhYmxlOiAnIC4gJHZhcjsNCiAgICAgICAgJGZpbmFsX291dCAuPSBQSFBfRU9MIC4gUEhQX0VPTDsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgJGZpbmFsX291dCAuPSAkcmVzdWx0Ow0KICAgIA0KICAgIGlmKHNlbGY6OiRfZmxhZ3NbJ3RyYWNlJ10pDQogICAgew0KICAgICAgJGZpbmFsX291dCAuPSBzZWxmOjpfYnQoJGJ0KTsNCiAgICB9DQogICAgDQogICAgaWYoc2VsZjo6JF9mbGFnc1snZWNobyddKQ0KICAgIHsNCiAgICAgIGVjaG8gJGZpbmFsX291dDsNCiAgICAgIA0KICAgICAgaWYoc2VsZjo6JF9mbGFnc1snZGllJ10pDQogICAgICB7DQogICAgICAgIGRpZSgnPGJyLz5SSVAhPGJyLz4nKTsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgcmV0dXJuICRmaW5hbF9vdXQ7DQogIH0NCiAgDQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVzZXQoKQ0KICB7DQogICAgc2VsZjo6JF9vdXRwdXQgID0gJyc7ICMgcmVzZXQgb3RoZXJ3aXNlIHdlIGdldCBhY2N1bXVsYXRlZCBkdW1wcw0KICB9DQogIA0KICANCiAgLyoqDQogICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0Lg0KICAgKg0KICAgKiBAcGFyYW0gb2JqZWN0ICRvYmoNCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICovDQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdG9TdHJpbmcoJG9iaikNCiAgew0KICAgIHJldHVybiBcbWV0aG9kX2V4aXN0cygkb2JqLCAnX190b1N0cmluZycpID8gKHN0cmluZykgJG9iaiA6IFxnZXRfY2xhc3MoJG9iaikgLiAnQCcgLiBcc3BsX29iamVjdF9oYXNoKCRvYmopOw0KICB9DQp9DQoNCj8+DQo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.encrypted_store.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgdXRpbGl0eSBjbGFzcyBmb3IgY2FjaGluZyBlbmNyeXB0ZWQgaW5mb3JtYXRpb24uCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBVdGlsaXRpZXMKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxMCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCgovL2RlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOyMgcmV2aXNpdAoKLyoqCiAqIEEgdXRpbGl0eSBjbGFzcyBmb3IgY2FjaGluZyBlbmNyeXB0ZWQgaW5mb3JtYXRpb24uCiAqIFRoaXMgY2xhc3MgYXV0b21hdGljYWxseSBjYWxjdWxhdGVzIGFuIGVuY3J5cHRpb24ga2V5IHdpdGggc2Vzc2lvbiBzcGVjaWZpYyBlbnRyb3B5LgogKiBIb3dldmVyLCB0aGUgZW5jcnlwdGlvbiBrZXkgY2FuIGJlIG92ZXJyaWRkZW4uCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBzZWUgeHRfZGF0YXN0b3JlCiAqIEBzZWUgeHRfZW5jcnlwdAogKi8KbmFtZXNwYWNlIENNU01TRXh0Owp1c2UgXHh0X2VuY3J5cHQsIFx4dF9kYXRhc3RvcmUsIFxjbXNfY29uZmlnOwoKZmluYWwgY2xhc3MgZW5jcnlwdGVkX3N0b3JlCnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBzdGF0aWMgcHJpdmF0ZSAkX3N0b3JlOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBzdGF0aWMgcHJpdmF0ZSAkX2tleTsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgc3RhdGljIHByaXZhdGUgJF9lbmNrZXk7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHN0YXRpYyBwcml2YXRlICRfdGltZW91dCA9IDYwMDsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBfX21ha2UoKQogICAgewogICAgICAgIGlmKCBpc19udWxsKHNlbGY6OiRfc3RvcmUpICkgewogICAgICAgICAgICBzZWxmOjokX3N0b3JlID0gbmV3IHh0X2RhdGFzdG9yZShzZWxmOjokX3RpbWVvdXQpOwogICAgICAgICAgICBzZWxmOjokX2tleSA9IG1kNShfX0ZJTEVfXyk7CgogICAgICAgICAgICAvLyRjb25maWcgPSBjbXNfY29uZmlnOjpnZXRfaW5zdGFuY2UoKTsKICAgICAgICAgICAgJGNvbmZpZyA9IFxDTVNNU0V4dFxjb25maWc6OkdldEluc3RhbmNlKCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAka2V5ID0gbWQ1KF9fRklMRV9fIC4gJGNvbmZpZ1sncm9vdF91cmwnXSAuICRjb25maWdbJ3Jvb3RfcGF0aCddIC4gZ2V0ZW52KCdSRU1PVEVfQUREUicpKTsKICAgICAgICAgICAgc2VsZjo6JF9lbmNrZXkgPSAka2V5OwogICAgICAgIH0KICAgIH0KCgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGRhdGEgZXhwaXJ5IHRpbWUgaW4gc2Vjb25kcwogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X3RpbWVvdXQoKSA6IGludAogICAgewogICAgICAgIHJldHVybiBzZWxmOjokX3RpbWVvdXQ7CiAgICB9CgoKICAgIC8qKgogICAgICogU2V0IHRoZSBkYXRhIGV4cGlyeSB0aW1lIGluIHNlY29uZHMuCiAgICAgKiBTaW5jZSB0aGlzIGlzIGVuY3J5cHRlZCBkYXRhLCBpdCdzIGxpZmV0aW1lIGlzIGV4cGVjdGVkIHRvIGJlIHZlcnkgc2hvcnQuCiAgICAgKiBBIG1heGltdW0gb2YgNSBtaW51dGVzICgzMDAgc2Vjb25kcykKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRudW0gIEV4cGlyeSB0aW1lb3V0IGluIHNlY29uZHMuCiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gc2V0X3RpbWVvdXQoaW50ICRudW0pCiAgICB7CiAgICAgICAgJG51bSA9IG1heCgkbnVtLDMwMCk7CiAgICAgICAgc2VsZjo6JF90aW1lb3V0ID0gJG51bTsKICAgICAgICBpZiggaXNfb2JqZWN0KHNlbGY6OiRfc3RvcmUpICkgc2VsZjo6JF9zdG9yZS0+c2V0X2V4cGlyeSgkbnVtKTsKICAgIH0KCgogICAgLyoqCiAgICAgKiBPdmVycmlkZSB0aGUgZW5jcnlwdGlvbiBrZXkuCiAgICAgKiBJdCBpcyBpbXBvcnRhbnQgdG8gc2V0IHRoaXMga2V5IHdpdGggYSBsb25nIGVub3VnaCB2YWx1ZSBhbmQgd2l0aCBlbm91Z2ggZW50cm9weQogICAgICogdG8gYmUgcmFuZG9tIGZvciBkaWZmZXJlbnQgcHVycG9zZXMuICBpLmU6IGlmIHN0b3JpbmcgdXNlciBzcGVjaWZpYyBkYXRhCiAgICAgKiBmb3IgYSBzaG9ydCB0aW1lIGl0IG1heSBiZSBhcHByb3ByaWF0ZSB0byB1c2UgdGhlIHNlc3Npb24gaWQgYXMgcGFydCBvZiB0aGUgZW5jcnlwdGlvbiBrZXkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyCiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gc2V0X2tleShzdHJpbmcgJHN0cikKICAgIHsKICAgICAgICBzZWxmOjokX2tleSA9ICRzdHI7CiAgICB9CgoKICAgIC8qKgogICAgICogU3RvcmUgZW5jcnlwdGVkIGRhdGEKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhICBUaGUgZGF0YSB0byBzdG9yZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5MSBUaGUgZmlyc3Qga2V5IGluIHRoZSBlbmNyeXB0ZWQgc2V0LiAgVXAgdG8gdGhyZWUga2V5cyBjYW4gYmUgdXNlZAogICAgICogQHBhcmFtIHN0cmluZyAka2V5MiBUaGUgb3B0aW9uYWwgc2Vjb25kIGtleSBpbiB0aGUgZW5jcnlwdGVkIHNldAogICAgICogQHBhcmFtIHN0cmluZyAka2V5MyBUaGUgb3B0aW9uYWwgdGhpcmQga2V5IGluIHRoZSBlbmNyeXB0ZWQgc2V0CiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gcHV0KHN0cmluZyAkZGF0YSxzdHJpbmcgJGtleTEsc3RyaW5nICRrZXkyPScnLHN0cmluZyAka2V5Mz0nJykKICAgIHsKICAgICAgICBzZWxmOjpfX21ha2UoKTsKICAgICAgICBpZiggaXNfbnVsbChzZWxmOjokX2VuY2tleSkgKSBkaWUoJ2Fib3J0IC0gbm8gZW5jcnlwdGlvbiBrZXkgc2V0Jyk7CiAgICAgICAgJHNlciA9IHNlcmlhbGl6ZSgkZGF0YSk7CiAgICAgICAgJHRtcCA9IHh0X2VuY3J5cHQ6OmVuY3J5cHQoc2VsZjo6JF9lbmNrZXksJHNlcik7CiAgICAgICAgc2VsZjo6JF9zdG9yZS0+c3RvcmUoYmFzZTY0X2VuY29kZSgkdG1wKSxzZWxmOjokX2tleSwka2V5MSwka2V5Miwka2V5Myk7CiAgICB9CgoKICAgIC8qKgogICAgICogQSBjb252ZW5pZW5jZSBtZXRob2QgdG8gc3RvcmUgZGF0YSB3aXRoIGEgc3BlY2lhbCBlbmNyeXB0aW9uIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhICBUaGUgZGF0YSB0byBzdG9yZQogICAgICogQHBhcmFtIHN0cmluZyAkc3BlY2lhbGtleSBUaGUgb3ZlcnJpZGUgZW5jcnlwdGlvbiBrZXkuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkxIFRoZSBmaXJzdCBrZXkgaW4gdGhlIGVuY3J5cHRlZCBzZXQuICBVcCB0byB0aHJlZSBrZXlzIGNhbiBiZSB1c2VkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkyIFRoZSBvcHRpb25hbCBzZWNvbmQga2V5IGluIHRoZSBlbmNyeXB0ZWQgc2V0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkzIFRoZSBvcHRpb25hbCB0aGlyZCBrZXkgaW4gdGhlIGVuY3J5cHRlZCBzZXQKICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBwdXRfc3BlY2lhbChzdHJpbmcgJGRhdGEsc3RyaW5nICRzcGVjaWFsa2V5LHN0cmluZyAka2V5MSxzdHJpbmcgJGtleTI9Jycsc3RyaW5nICRrZXkzPScnKQogICAgewogICAgICAgIHNlbGY6Ol9fbWFrZSgpOwogICAgICAgICR0bXAgPSB4dF9lbmNyeXB0OjplbmNyeXB0KCRzcGVjaWFsa2V5LHNlcmlhbGl6ZSgkZGF0YSkpOwogICAgICAgIHNlbGY6OiRfc3RvcmUtPnN0b3JlKGJhc2U2NF9lbmNvZGUoJHRtcCksc2VsZjo6JF9rZXksJGtleTEsJGtleTIsJGtleTMpOwogICAgfQoKICAgIC8qKgogICAgICogdW5lbmNyeXB0IGFuZCByZXR1cm4gc3RvcmVkIGRhdGEKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkxIFRoZSBmaXJzdCBrZXkgaW4gdGhlIGVuY3J5cHRlZCBzZXQuICBVcCB0byB0aHJlZSBrZXlzIGNhbiBiZSB1c2VkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkyIFRoZSBvcHRpb25hbCBzZWNvbmQga2V5IGluIHRoZSBlbmNyeXB0ZWQgc2V0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkzIFRoZSBvcHRpb25hbCB0aGlyZCBrZXkgaW4gdGhlIGVuY3J5cHRlZCBzZXQKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBnZXQoc3RyaW5nICRrZXkxLHN0cmluZyAka2V5Mj0nJyxzdHJpbmcgJGtleTM9JycpCiAgICB7CiAgICAgICAgc2VsZjo6X19tYWtlKCk7CiAgICAgICAgJHRtcCA9IHNlbGY6OiRfc3RvcmUtPmdldChzZWxmOjokX2tleSwka2V5MSwka2V5Miwka2V5Myk7CglpZiggISR0bXAgKSByZXR1cm47CiAgICAgICAgJHRtcCA9IGJhc2U2NF9kZWNvZGUoJHRtcCk7CiAgICAgICAgJHRtcCA9IHh0X2VuY3J5cHQ6OmRlY3J5cHQoc2VsZjo6JF9lbmNrZXksJHRtcCk7CiAgICAgICAgaWYoICEkdG1wICkgcmV0dXJuOwogICAgICAgIHJldHVybiBAdW5zZXJpYWxpemUoJHRtcCk7CiAgICB9CgogICAgLyoqCiAgICAgKiB1bmVuY3J5cHQgYW5kIHJldHVybiBzdG9yZWQgZGF0YSB1c2luZyBhIHNwZWNpYWwgZW5jcnlwdGlvbiBrZXkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzcGVjaWFsa2V5IFRoZSBvdmVycmlkZSBlbmNyeXB0aW9uIGtleS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleTEgVGhlIGZpcnN0IGtleSBpbiB0aGUgZW5jcnlwdGVkIHNldC4gIFVwIHRvIHRocmVlIGtleXMgY2FuIGJlIHVzZWQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleTIgVGhlIG9wdGlvbmFsIHNlY29uZCBrZXkgaW4gdGhlIGVuY3J5cHRlZCBzZXQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleTMgVGhlIG9wdGlvbmFsIHRoaXJkIGtleSBpbiB0aGUgZW5jcnlwdGVkIHNldAogICAgICogQHJldHVybiBzdHJpbmcuCiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X3NwZWNpYWwoc3RyaW5nICRzcGVjaWFsa2V5LHN0cmluZyAka2V5MSxzdHJpbmcgJGtleTI9Jycsc3RyaW5nICRrZXkzPScnKQogICAgewogICAgICAgIHNlbGY6Ol9fbWFrZSgpOwogICAgICAgICR0bXAgPSBzZWxmOjokX3N0b3JlLT5nZXQoc2VsZjo6JF9rZXksJGtleTEsJGtleTIsJGtleTMpOwoJaWYoICEkdG1wICkgcmV0dXJuOwogICAgICAgICR0bXAgPSBiYXNlNjRfZGVjb2RlKCR0bXApOwogICAgICAgICRkYXRhID0gdW5zZXJpYWxpemUoeHRfZW5jcnlwdDo6ZGVjcnlwdCgkc3BlY2lhbGtleSwkdG1wKSk7CiAgICAgICAgcmV0dXJuICRkYXRhOwogICAgfQoKICAgIC8qKgogICAgICogRXJhc2UgZW5jcnlwdGVkIGRhdGEgZnJvbSB0aGUgZGF0YXN0b3JlCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5MSBUaGUgZmlyc3Qga2V5IGluIHRoZSBlbmNyeXB0ZWQgc2V0LiAgVXAgdG8gdGhyZWUga2V5cyBjYW4gYmUgdXNlZAogICAgICogQHBhcmFtIHN0cmluZyAka2V5MiBUaGUgb3B0aW9uYWwgc2Vjb25kIGtleSBpbiB0aGUgZW5jcnlwdGVkIHNldAogICAgICogQHBhcmFtIHN0cmluZyAka2V5MyBUaGUgb3B0aW9uYWwgdGhpcmQga2V5IGluIHRoZSBlbmNyeXB0ZWQgc2V0CiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZXJhc2Uoc3RyaW5nICRrZXkxLHN0cmluZyAka2V5Mj0nJyxzdHJpbmcgJGtleTM9JycpCiAgICB7CiAgICAgICAgc2VsZjo6X19tYWtlKCk7CiAgICAgICAgc2VsZjo6JF9zdG9yZS0+ZXJhc2Uoc2VsZjo6JF9rZXksJGtleTEsJGtleTIsJGtleTMpOwogICAgfQoKICAgIC8qKgogICAgICogQ2xlYW4gYWxsIGV4cGlyZWQgZGF0YS4KICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBjbGVhbnVwKCkKICAgIHsKICAgICAgICBzZWxmOjpfX21ha2UoKTsKICAgICAgICBzZWxmOjokX3N0b3JlLT5yZW1vdmVfZXhwaXJlZCgpOwogICAgfQp9IC8vIGVuZCBvZiBjbGFzcwoKLy8gRU9GCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.FileTemplateResource.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBDTVNNU0V4dDsKCi8vaWYodmVyc2lvbl9jb21wYXJlKENNU19WRVJTSU9OLCAnMi4yLjkwMCcpIDwgMCkKLy97Ci8vICBhYnN0cmFjdCBjbGFzcyBfdG1wUmVzb3VyY2VCYXNlIGV4dGVuZHMgXENNU19GaXhlZF9SZXNvdXJjZV9DdXN0b20KLy8gIHsKLy8gIH0KLy99Ci8vZWxzZQovL3sKLy8gIGFic3RyYWN0IGNsYXNzIF90bXBSZXNvdXJjZUJhc2UgZXh0ZW5kcyBcQ01TTVNcaW50ZXJuYWxcZml4ZWRfc21hcnR5X2N1c3RvbV9yZXNvdXJjZQovLyAgewovLyAgfQovL30KCiAgYWJzdHJhY3QgY2xhc3MgX3RtcFJlc291cmNlQmFzZSBleHRlbmRzIFxDTVNfRml4ZWRfUmVzb3VyY2VfQ3VzdG9tCiAgewogIH0KCi8qKgogKiBDbGFzcyBGaWxlVGVtcGxhdGVSZXNvdXJjZQogKgogKiBsb29rcyBmb3IgZmlsZXMgT05MWSBpbiB0aGUgbW9kdWxlcyBwYXRocy4gIElnbm9yZXMgbW9kdWxlX2N1c3RvbQogKiBpZiBubyBmaWxlcyBleGlzdCBpbiB0aGUgbW9kdWxlcyBwYXRocyB0cmllcyBmaW5kaW5nIHRoZW0gaW4gQ01TTVNFeHQvZnJhbWV3b3JrL3RlbXBsYXRlcwogKgogKiBAdXNlcyB7aW5jbHVkZSBmaWxlPSd4dF9tb2RmaWxlOk1vZHVsZU5hbWU7VGVtcGxhdGVOYW1lLnRwbCd9IGluIHRlbXBsYXRlcyBvcgogKiAgICAgICAgJHNtYXJ0eS0+ZmV0Y2goJ3h0X21vZGZpbGU6JyAuICR0aGlzLT5HZXROYW1lKCkgLiAnOycgLiBUZW1wbGF0ZU5hbWUudHBsKTsKICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICovCmNsYXNzIEZpbGVUZW1wbGF0ZVJlc291cmNlIGV4dGVuZHMgX3RtcFJlc291cmNlQmFzZQp7CiAgcHJvdGVjdGVkIGZ1bmN0aW9uIGZldGNoKCRuYW1lLCAmJHNvdXJjZSwgJiRtdGltZSkKICB7CiAgICAkbmFtZSAgICAgICAgPSAoc3RyaW5nKSRuYW1lOwogICAgJG1vZHVsZV9uYW1lID0gJHRwbF9uYW1lID0gTlVMTDsKICAgICRwYXJ0cyAgICAgICA9IGV4cGxvZGUoJzsnLCAkbmFtZSk7CiAgICAKICAgIGlmKGNvdW50KCRwYXJ0cykgPCAyKSB7IHJldHVybjsgfQogICAgCiAgICAkbW9kdWxlX25hbWUgPSB0cmltKCRwYXJ0c1swXSk7CiAgICAkdHBsX25hbWUgICAgPSB0cmltKCRwYXJ0c1sxXSk7CiAgICAKICAgIGlmKCEkbW9kdWxlX25hbWUgfHwgISR0cGxfbmFtZSkgeyByZXR1cm47IH0KCiAgICAkbW9kID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgkbW9kdWxlX25hbWUpOwogICAgCiAgICBpZighJG1vZCkgeyByZXR1cm47IH0KICAKICAgICRmaWxlbmFtZSA9IFxjbXNfam9pbl9wYXRoKAogICAgICAkbW9kLT5HZXRNb2R1bGVQYXRoKCksCiAgICAgICd0ZW1wbGF0ZXMnLAogICAgICAkdHBsX25hbWUKICAgICk7CiAgICAKICAgIGlmKCAhaXNfZmlsZSgkZmlsZW5hbWUpICkKICAgIHsKICAgICAgJG1vZCA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0NNU01TRXh0Jyk7CiAgICAgICRmaWxlbmFtZSA9IFxjbXNfam9pbl9wYXRoKAogICAgICAgICRtb2QtPkdldE1vZHVsZVBhdGgoKSwKICAgICAgICAnZnJhbWV3b3JrJywKICAgICAgICAndGVtcGxhdGVzJywKICAgICAgICAkdHBsX25hbWUKICAgICAgKTsKICAgIH0KICAKICAgICRzb3VyY2UgPSBmaWxlX2dldF9jb250ZW50cygkZmlsZW5hbWUpOwogICAgJG10aW1lICA9IGZpbGVtdGltZSgkZmlsZW5hbWUpOwogIH0KfSAvLyBlbmQgb2YgY2xhc3MK]]></data>
	</file>
	<file>
	  <filename>/lib/class.FS.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHQ7DQoNCnVzZSBDTVNNU0V4dFxFeGNlcHRpb25zXEZpbGVTeXN0ZW1FeGNlcHRpb247DQoNCi8qKg0KICogQ2xhc3MgRlMNCiAqIGEgY2xhc3MgZm9yIGZpbGVzeXN0ZW0gdXRpbHMNCiAqDQogKiBAcGFja2FnZSBDTVNNU0V4dA0KICovDQpjbGFzcyBGUw0Kew0KICAvKioNCiAgICogUmVjdXJzaXZlbHkgZGVsZXRlIGEgZGlyZWN0b3J5DQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJGRpcmVjdG9yeSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHRvIGJlIHJlbW92ZWQuDQogICAqDQogICAqIEByZXR1cm4gYm9vbA0KICAgKi8NCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkaXJfcmVjdXJzaXZlX2RlbGV0ZShzdHJpbmcgJGRpcmVjdG9yeSkNCiAgew0KICAgIGlmKCcvJyA9PT0gXHN1YnN0cigkZGlyZWN0b3J5LCAtMSkpDQogICAgew0KICAgICAgJGRpcmVjdG9yeSA9IFxzdWJzdHIoJGRpcmVjdG9yeSwgMCwgLTEpOw0KICAgIH0NCiAgICANCiAgICBpZighXGZpbGVfZXhpc3RzKCRkaXJlY3RvcnkpIHx8ICFcaXNfZGlyKCRkaXJlY3RvcnkpKSB7IHJldHVybiBGQUxTRTsgfQ0KICANCiAgICBpZihcaXNfcmVhZGFibGUoJGRpcmVjdG9yeSkpDQogICAgew0KICAgICAgJGhhbmRsZSA9IFxvcGVuZGlyKCRkaXJlY3RvcnkpOw0KICAgICAgDQogICAgICB3aGlsZShGQUxTRSAhPT0gKCRpdGVtID0gXHJlYWRkaXIoJGhhbmRsZSkpKQ0KICAgICAgew0KICAgICAgICBpZignLicgIT09ICRpdGVtICYmICcuLicgIT09ICRpdGVtKQ0KICAgICAgICB7DQogICAgICAgICAgJHBhdGggPSAkZGlyZWN0b3J5IC4gJy8nIC4gJGl0ZW07DQogICAgICAgICAgDQogICAgICAgICAgaWYoXGlzX2RpcigkcGF0aCkpDQogICAgICAgICAgew0KICAgICAgICAgICAgc2VsZjo6ZGlyX3JlY3Vyc2l2ZV9kZWxldGUoJHBhdGgpOw0KICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlDQogICAgICAgICAgew0KICAgICAgICAgICAgXHVubGluaygkcGF0aCk7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgICANCiAgICAgIFxjbG9zZWRpcigkaGFuZGxlKTsNCiAgICAgIA0KICAgICAgaWYoICFccm1kaXIoJGRpcmVjdG9yeSkgKSB7IHJldHVybiBGQUxTRTsgfQ0KICAgIH0NCiAgDQogICAgcmV0dXJuIFRSVUU7DQogIH0NCiAgDQogIA0KICAvKioNCiAgICogUmV0dXJuIGEgbGlzdCBvZiBhbGwgb2YgdGhlIGRpcmVjdG9yaWVzIGluc2lkZSBhIHBhcmVudA0KICAgKiBUaGlzIG1ldGhvZCBpcyBOT1QgcmVjdXJzaXZlDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJHBhcmVudCBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHRvIHNlYXJjaA0KICAgKiBAcmV0dXJuIGFycmF5IEFuIGFycmF5IG9mIGRpcmVjdG9yaWVzIGRpcmVjdGx5IGJlbG93IHRoZSBwYXJlbnQuDQogICAqLw0KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRpcl9saXN0KHN0cmluZyAkcGFyZW50KQ0KICB7DQogICAgaWYoZW1wdHkoJHBhcmVudCkpIHsgcmV0dXJuIFtdOyB9DQogICAgDQogICAgaWYoIVxpc19kaXIoJHBhcmVudCkpIHsgcmV0dXJuIFtdOyB9DQogICAgDQogICAgJGRoID0gXG9wZW5kaXIoJHBhcmVudCk7DQogICAgDQogICAgaWYoISRkaCkgeyByZXR1cm4gW107IH0NCiAgICANCiAgICAkcmVzdWx0cyA9IFtdOw0KICAgIHdoaWxlKEZBTFNFICE9PSAoJGZpbGUgPSBccmVhZGRpcigkZGgpKSkNCiAgICB7DQogICAgICBpZignLicgPT09ICRmaWxlIHx8ICcuLicgPT09ICRmaWxlKSB7IGNvbnRpbnVlOyB9DQogICAgICANCiAgICAgIGlmKFxzdGFydHN3aXRoKCRmaWxlLCAnLicpKSB7IGNvbnRpbnVlOyB9DQogICAgICANCiAgICAgIGlmKFxpc19kaXIoJHBhcmVudCAuICcvJyAuICRmaWxlKSkNCiAgICAgIHsNCiAgICAgICAgJHJlc3VsdHNbXSA9ICRmaWxlOw0KICAgICAgfQ0KICAgIH0NCiAgICANCiAgICBcY2xvc2VkaXIoJGRoKTsNCiAgICANCiAgICByZXR1cm4gJHJlc3VsdHM7DQogIH0NCiAgDQogIC8qKg0KICAgKiBSZWN1cnNpdmVseSBjcmVhdGUgYSBzdWJkaXJlY3RvcnkgdGlsbCB0aGUgcGF0aCBleGlzdHMuDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgICAkcGF0aG5hbWUgVGhlIHBhdGggbmFtZSB0byBjcmVhdGUNCiAgICogQHBhcmFtIGludCAgICAgICRtb2RlICAgICBUaGUgb2N0YWwgcGVybWlzc2lvbiBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgc3ViZGlyZWN0b3JpZXMNCiAgICoNCiAgICogQHJldHVybiBib29sDQogICAqLw0KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1rZGlyX3Ioc3RyaW5nICRwYXRobmFtZSwgaW50ICRtb2RlID0gMDc1NSkgOiBib29sDQogIHsNCiAgICAvLyBDaGVjayBpZiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMNCiAgICBpZihlbXB0eSgkcGF0aG5hbWUpIHx8IFxpc19kaXIoJHBhdGhuYW1lKSkgeyByZXR1cm4gVFJVRTsgfQ0KICAgIA0KICAgIC8vIEVuc3VyZSBhIGZpbGUgZG9lcyBub3QgYWxyZWFkeSBleGlzdCB3aXRoIHRoZSBzYW1lIG5hbWUNCiAgICBpZihcaXNfZmlsZSgkcGF0aG5hbWUpKSB7IHJldHVybiBUUlVFOyB9DQogICAgDQogICAgLy8gQ3Jhd2wgdXAgdGhlIGRpcmVjdG9yeSB0cmVlDQogICAgJG5leHRfcGF0aG5hbWUgPSBcZGlybmFtZSgkcGF0aG5hbWUpOw0KICAgIA0KICAgIGlmKHNlbGY6Om1rZGlyX3IoJG5leHRfcGF0aG5hbWUsICRtb2RlKSAmJiAhXGlzX2ZpbGUoJHBhdGhuYW1lKSkNCiAgICB7DQogICAgICByZXR1cm4gXG1rZGlyKCRwYXRobmFtZSwgJG1vZGUpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gRkFMU0U7DQogIH0NCiAgDQogIC8qKg0KICAgKiBHaXZlbiBhIGRpcmVjdG9yeSwgYW5kIGEgbGlzdCBvZiBleHRlbnNpb25zLCByZXR1cm4gYSBsaXN0IG9mIG1hdGNoaW5nIGZpbGVzLg0KICAgKiBUaGlzIG1ldGhvZCB3aWxsIG5vdCByZXR1cm4gYW55IGRpcmVjdG9yaWVzLg0KICAgKiBUaGlzIG1ldGhvZCBpcyBub3QgcmVjdXJzaXZlLg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRkaXIgVGhlIHNlYXJjaCBkaXJlY3RvcnkNCiAgICogQHBhcmFtIHN0cmluZyAkZXh0ZW5zaW9ucyBBIGNvbW1hIGRlbGltaXRlZCBsaXN0IG9mIGV4dGVuc2lvbnMgdG8gcmV0dXJuDQogICAqIEBwYXJhbSBib29sICRzb3J0ZWQgV2hldGhlciB0aGUgb3V0cHV0IHNob3VsZCBiZSBzb3J0ZWQgKG5hdHVyYWwgY2FzZSkgb3Igbm90Lg0KICAgKiBAcmV0dXJuIHN0cmluZ1tdDQogICAqLw0KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9maWxlX2xpc3Qoc3RyaW5nICRkaXIsIHN0cmluZyAkZXh0ZW5zaW9ucywgYm9vbCAkc29ydGVkID0gVFJVRSkNCiAgew0KICAgICRmaWxlX3R5cGVzID0gW107DQogICAgDQogICAgaWYoICFlbXB0eSgkZXh0ZW5zaW9ucykgKQ0KICAgIHsNCiAgICAgICRmaWxlX3R5cGVzID0gXGV4cGxvZGUoJywnLCAkZXh0ZW5zaW9ucyk7DQogICAgfQ0KICAgIA0KICAgICR0bXAgPSBbXTsNCiAgICANCiAgICBmb3JlYWNoKCRmaWxlX3R5cGVzIGFzICRvbmUpDQogICAgew0KICAgICAgJG9uZSA9IFxzdHJ0b2xvd2VyKCBcdHJpbSgkb25lKSApOw0KICAgICAgDQogICAgICBpZigkb25lKSB7ICR0bXBbXSA9ICRvbmU7IH0NCiAgICB9DQogICAgDQogICAgJGZpbGVfdHlwZXMgPSBOVUxMOw0KICAgIA0KICAgIGlmKCBcY291bnQoJHRtcCkgKSB7ICRmaWxlX3R5cGVzID0gJHRtcDsgfQ0KICAgIA0KICAgICRmaWxlcyA9IFtdOw0KICAgICRkaCAgICA9IFxvcGVuZGlyKCRkaXIpOw0KICAgIA0KICAgIGlmKCRkaCkNCiAgICB7DQogICAgICB3aGlsZSggRkFMU0UgIT09ICggJGZpbGUgPSBccmVhZGRpcigkZGgpICkgKQ0KICAgICAgew0KICAgICAgICBpZignLicgPT09ICRmaWxlIHx8ICcuLicgPT09ICRmaWxlKSB7IGNvbnRpbnVlOyB9DQogICAgICAgIA0KICAgICAgICAkZnVsbF9wYXRoID0gXGNtc19qb2luX3BhdGgoJGRpciwgJGZpbGUpOw0KICAgICAgICANCiAgICAgICAgaWYoIFxpc19kaXIoJGZ1bGxfcGF0aCkgKSB7IGNvbnRpbnVlOyB9DQogICAgICAgIA0KICAgICAgICAkZXh0ID0gXHN1YnN0cihcc3RycmNocigkZmlsZSwgJy4nKSwgMSk7DQogICAgICAgIA0KICAgICAgICBpZiggIWVtcHR5KCRmaWxlX3R5cGVzKSAmJiAhXGluX2FycmF5KCRleHQsICRmaWxlX3R5cGVzLCBUUlVFKSApIHsgY29udGludWU7IH0NCiAgICAgICAgDQogICAgICAgICRmaWxlc1skZmlsZV0gPSAkZmlsZTsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgXGNsb3NlZGlyKCRkaCk7DQogICAgfQ0KICAgIA0KICAgIGlmKCRzb3J0ZWQpIHsgXG5hdGNhc2Vzb3J0KCRmaWxlcyk7IH0NCiAgICANCiAgICByZXR1cm4gJGZpbGVzOw0KICB9DQogIA0KICAvKioNCiAgICogR2l2ZW4gYSBmaWxlbmFtZSwgdGVzdCBpZiBpdCBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcGF0dGVybg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgdGVzdCBmaWxlbmFtZSAoc3RyaW5nKSBvciBhbiBhcnJheSBvZiBzdHJpbmdzDQogICAqIEBwYXJhbSBtaXhlZCAgJHBhdHRlcm4gQW4gYXJyYXkgb2Ygc3RyaW5nIHBhdHRlcm5zLCBvciBhIHNpbmdsZSBzdHJpbmcuDQogICAqIEBwYXJhbSBib29sICAgJGNhc2Vfc2Vuc2l0aXZlIFdoZXRoZXIgdGhlIHBhdHRlcm4ocykgaXMvYXJlIGNhc2Ugc2Vuc2l0aXZlDQogICAqIEBwYXJhbSBib29sICAgJGFsbG93X2VtcHR5IFdoZXRoZXIgb3Igbm90IGFuIGVtcHR5IHBhdHRlcm4gaXMgYWxsb3dlZCAodG8gbWF0Y2ggYW55dGhpbmcpIChkZXByZWNhdGVkKQ0KICAgKg0KICAgKiBAcmV0dXJuIGJvb2wNCiAgICovDQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmlsZV9tYXRjaGVzX3BhdHRlcm4oDQogICAgc3RyaW5nICRmaWxlbmFtZSwNCiAgICAkcGF0dGVybiwNCiAgICBib29sICRjYXNlX3NlbnNpdGl2ZSA9IFRSVUUsDQogICAgYm9vbCAkYWxsb3dfZW1wdHkgPSBUUlVFDQogICkNCiAgew0KICAgIGlmKCFcaXNfYXJyYXkoJHBhdHRlcm4pKQ0KICAgIHsNCiAgICAgIGlmKCEkcGF0dGVybiAmJiAkYWxsb3dfZW1wdHkpIHsgcmV0dXJuIFRSVUU7IH0gLy8gbm8gcGF0dGVybiA9IG1hdGNoIGV2ZXJ5dGhpbmcNCiAgICAgIA0KICAgICAgJHBhdHRlcm4gPSBbJHBhdHRlcm5dOw0KICAgIH0NCiAgDQogICAgZm9yZWFjaCgkcGF0dGVybiBhcyAkaVZhbHVlKQ0KICAgIHsNCiAgICAgICRmID0gJGZpbGVuYW1lOw0KICAgICAgJHAgPSAkaVZhbHVlOw0KICAgICAgDQogICAgICBpZighJHApIHsgY29udGludWU7IH0NCiAgICAgIA0KICAgICAgaWYoISRjYXNlX3NlbnNpdGl2ZSkNCiAgICAgIHsNCiAgICAgICAgJGYgPSBcc3RydG9sb3dlcigkZmlsZW5hbWUpOw0KICAgICAgICAkcCA9IFxzdHJ0b2xvd2VyKCRpVmFsdWUpOw0KICAgICAgfQ0KICAgICAgaWYoIFxmbm1hdGNoKCRwLCAkZikgKSB7IHJldHVybiBUUlVFO30NCiAgICB9DQogIA0KICAgIHJldHVybiBGQUxTRTsNCiAgfQ0KICANCiAgLyoqDQogICAqIFNpbWlsYXIgdG8gdGhlIFBIUCBnbG9iIG1ldGhvZCB0aGlzIGZ1bmN0aW9uIHdpbGwgc2VhcmNoIGFsbCBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5IChhbmQgYmVsb3cgaXQpIGFuZCByZXR1cm4gYWxsDQogICAqIGZpbGVzIHRoYXQgbWF0Y2ggdGhlIHBhdHRlcm4uDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJHBhdGggICAgICAgICAgIFRoZSBmdWxsIHBhdGggdG8gdGhlIGlucHV0IGRpcmVjdG9yeQ0KICAgKiBAcGFyYW0gbWl4ZWQgICRwYXR0ZXJuICAgICAgICBBbiBhcnJheSBvZiBzdHJpbmcgcGF0dGVybnMuICBPciBhIHNpbmdsZSBzdHJpbmcNCiAgICogQHBhcmFtIHN0cmluZyAkbW9kZSAgICAgICAgICAgRWl0aGVyIEZJTEVTLCBESVJTLCBvciBGVUxMLiAgSWYgJ0ZJTEVTJywgb25seSBmaWxlcyBtYXRjaGluZyB0aGUgcGF0dGVybiBhcmUNCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQuICBJZiAnRElSUycgb25seSBkaXJlY3RvcmllcyBhcmUgcmV0dXJuZWQuICBJRiAnRlVMTCcsIGFueSBmaWxlIG9yDQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBtYXRjaGluZyB0aGUgcGF0dGVybiBpcyByZXR1cm5lZC4NCiAgICogQHBhcmFtIG1peGVkICAkZXhjbHVkZXBhdHRlcm4gQW4gYXJyYXkgb2Ygc3RyaW5nIHBhdHRlcm5zIHRvIGV4Y2x1ZGUuICBPciBhIHNpbXBsZSBzdHJpbmcNCiAgICogQHBhcmFtIGludCAgICAkbWF4ZGVwdGggICAgICAgVGhlIG1heGltdW0gZGlyZWN0b3J5IGxldmVsIHRvIHNlYXJjaC4gIERlZmF1bHQgaXMgaW5maW5pdGUuDQogICAqIEBwYXJhbSBpbnQgICAgJGQgICAgICAgICAgICAgIEludGVybmFsDQogICAqDQogICAqIEByZXR1cm4gYXJyYXl8dm9pZA0KICAgKi8NCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWN1cnNpdmVfZ2xvYigNCiAgICBzdHJpbmcgJHBhdGgsDQogICAgJHBhdHRlcm4gPSAnKicsDQogICAgc3RyaW5nICRtb2RlID0gJ0ZVTEwnLA0KICAgICRleGNsdWRlcGF0dGVybiA9ICcnLA0KICAgIGludCAkbWF4ZGVwdGggPSAtMSwNCiAgICBpbnQgJGQgPSAwDQogICkNCiAgew0KICAgIGlmKCAhXGVuZHN3aXRoKCRwYXRoLCAnLycpICkgeyAkcGF0aCAuPSAnLyc7IH0NCiAgICANCiAgICAkZGlyX2xpc3QgPSBbXTsNCiAgICANCiAgICBpZigNCiAgICAgICgnRklMRVMnICE9PSAkbW9kZSkgJiYgc2VsZjo6ZmlsZV9tYXRjaGVzX3BhdHRlcm4oXGJhc2VuYW1lKCRwYXRoKSwgJHBhdHRlcm4pICYmDQogICAgICAhc2VsZjo6ZmlsZV9tYXRjaGVzX3BhdHRlcm4oXGJhc2VuYW1lKCRwYXRoKSwgJGV4Y2x1ZGVwYXR0ZXJuKQ0KICAgICl7ICRkaXJfbGlzdFtdID0gJHBhdGg7IH0NCiAgICANCiAgICBpZiggIVxpc19kaXIoJHBhdGgpICkgeyByZXR1cm47IH0NCiAgICANCiAgICBpZiggJGhhbmRsZSA9IFxvcGVuZGlyKCRwYXRoKSApDQogICAgew0KICAgICAgJHRtcCA9IFtdOw0KICAgICAgd2hpbGUoIEZBTFNFICE9PSAoICRmaWxlID0gXHJlYWRkaXIoJGhhbmRsZSkgKSApDQogICAgICB7DQogICAgICAgIGlmKCcuJyA9PT0gJGZpbGUgfHwgJy4uJyA9PT0gJGZpbGUpIHsgY29udGludWU7IH0NCiAgICAgICAgDQogICAgICAgICRmcyA9ICRwYXRoIC4gJGZpbGU7DQogICAgICAgIA0KICAgICAgICBpZiggIUBcaXNfZGlyKCRmcykgJiYgIVxzdGFydHN3aXRoKCRmaWxlLCAnLicpICYmICFcc3RhcnRzd2l0aCgkZmlsZSwgJ18nKSApDQogICAgICAgIHsNCiAgICAgICAgICBpZigNCiAgICAgICAgICAgICdESVJTJyAhPT0gJG1vZGUgJiYgc2VsZjo6ZmlsZV9tYXRjaGVzX3BhdHRlcm4oJGZpbGUsICRwYXR0ZXJuKSAmJg0KICAgICAgICAgICAgIXNlbGY6OmZpbGVfbWF0Y2hlc19wYXR0ZXJuKCRmaWxlLCAkZXhjbHVkZXBhdHRlcm4sIEZBTFNFLCBGQUxTRSkNCiAgICAgICAgICApDQogICAgICAgICAgeyAkZGlyX2xpc3RbXSA9ICRmczsgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYoDQogICAgICAgICAgJGQgPj0gMCAmJiAoJGQgPCAkbWF4ZGVwdGggfHwgJG1heGRlcHRoIDwgMCkgJiYgIVxzdGFydHN3aXRoKCRmaWxlLCAnLicpICYmICFcc3RhcnRzd2l0aCgkZmlsZSwgJ18nKSAmJg0KICAgICAgICAgICFzZWxmOjpmaWxlX21hdGNoZXNfcGF0dGVybigkZmlsZSwgJGV4Y2x1ZGVwYXR0ZXJuLCBUUlVFLCBGQUxTRSkNCiAgICAgICAgKQ0KICAgICAgICB7DQogICAgICAgICAgJHRtcFtdICAgICA9IHNlbGY6OnJlY3Vyc2l2ZV9nbG9iKCRmcyAuICcvJywgJHBhdHRlcm4sICRtb2RlLCAkZXhjbHVkZXBhdHRlcm4sICRtYXhkZXB0aCwgJGQgKyAxKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICANCiAgICAgICRkaXJfbGlzdCA9IFxhcnJheV9tZXJnZSgkZGlyX2xpc3QsLi4uJHRtcCk7DQogICAgICANCiAgICAgIFxjbG9zZWRpcigkaGFuZGxlKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICRkaXJfbGlzdDsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSBhcnJheSAgJGxpc3QNCiAgICogQHBhcmFtIHN0cmluZyAkZGlyDQogICAqIEBwYXJhbSBudWxsICAgJGZpbHRlcg0KICAgKiBAcGFyYW0gbnVsbCAgICRleGNsdWRlDQogICAqLw0KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZpbmRGaWxlcygmJGxpc3QgPSBbXSwgJGRpciA9ICcuJywgJGZpbHRlciA9IE5VTEwsICRleGNsdWRlID0gTlVMTCkNCiAgew0KICAgIGlmKCAhXGlzX2FycmF5KCRmaWx0ZXIpICkgeyAkZmlsdGVyID0gWyRmaWx0ZXJdOyB9DQogICAgaWYoIGVtcHR5KCRleGNsdWRlKSApIHsgJGV4Y2x1ZGUgPSBbXTsgfQ0KICAgIGlmKCFcaXNfYXJyYXkoJGV4Y2x1ZGUpKSB7ICRleGNsdWRlID0gWyRleGNsdWRlXTsgfQ0KICAgIA0KICAgICR0bXAgPSBbXTsNCiAgICBmb3JlYWNoKCRleGNsdWRlIGFzICRleGNsdXNpb24pDQogICAgew0KICAgICAgJHRtcFtdID0gJyheXFwnIC4gJGV4Y2x1c2lvbiAuICckKSc7DQogICAgfQ0KICAgIA0KICAgICRleGNsdWRlX3JlZ2V4ID0gXGltcGxvZGUoJ3wnLCAkdG1wKTsNCiAgICANCiAgICAkaXRlciA9IG5ldyBcUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IoJGRpciwgXFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yOjpTS0lQX0RPVFMpOw0KICAgIA0KICAgIGZvcmVhY2goDQogICAgICBuZXcgXFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IoDQogICAgICAgICRpdGVyLA0KICAgICAgICBcUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcjo6U0VMRl9GSVJTVA0KICAgICAgKQ0KICAgICAgYXMgJGYNCiAgICApDQogICAgew0KICAgICAgaWYoIFxwcmVnX21hdGNoKCAnLycgLiAkZXhjbHVkZV9yZWdleCAuICcvaScsICRpdGVyLT5nZXRGaWxlbmFtZSgpICkgKSB7IGNvbnRpbnVlOyB9DQogICAgICANCiAgICAgIC8vb25lIGxhc3QgY2hlY2sNCiAgICAgIGlmKCBcaW5fYXJyYXkoJGl0ZXItPmdldEZpbGVuYW1lKCksICRleGNsdWRlKSApIHsgY29udGludWU7IH0NCiAgICAgIA0KICAgICAgJGV4dGVuZGVkX2Rpcl9hcnJheSA9IFxleHBsb2RlKFxESVJFQ1RPUllfU0VQQVJBVE9SLCAkZi0+Z2V0UGF0aG5hbWUoKSApOw0KICAgICAgDQogICAgICAjIHRoZSBmb2xsb3dpbmcgaXMgYWxsIGZhaWxpbmcuLi4gYW5kIHNlZW1zIHJlZHVuZGFudCBhbnl3YXkgOlMgSk0NCiAgICAgICRjb250ID0gRkFMU0U7DQoNCiAgICAgIGZvcmVhY2goJGV4dGVuZGVkX2Rpcl9hcnJheSBhcyAkdGVzdF9kaXIpDQogICAgICB7DQogICAgICAgIGlmKCBccHJlZ19tYXRjaCgnLycgLiAkZXhjbHVkZV9yZWdleCAuICcvaScsICR0ZXN0X2RpciApICkgeyAkY29udCA9IFRSVUU7IH0NCg0KICAgICAgICAvL29uZSBsYXN0IGNoZWNrDQogICAgICAgIGlmKCBcaW5fYXJyYXkoJGYtPmdldEZpbGVuYW1lKCksICRleGNsdWRlLCBGQUxTRSkgKSB7ICRjb250ID0gVFJVRTsgfQ0KICAgICAgfQ0KDQogICAgICBpZigkY29udCkgeyBjb250aW51ZTsgfQ0KICAgICAgDQogICAgICBpZigkZi0+aXNEaXIoKSkNCiAgICAgIHsNCiAgICAgICAgaWYoIFxwcmVnX21hdGNoKCcvJyAuICRleGNsdWRlX3JlZ2V4IC4gJy9pJywgJGYtPmdldEZpbGVuYW1lKCkgKSApIHsgY29udGludWU7IH0NCiAgICAgICAgDQogICAgICAgIC8vb25lIGxhc3QgY2hlY2sNCiAgICAgICAgaWYoIFxpbl9hcnJheSgkZi0+Z2V0RmlsZW5hbWUoKSwgJGV4Y2x1ZGUsIEZBTFNFKSApIHsgY29udGludWU7IH0NCiAgICAgICAgDQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgICRjdXJyZW50X2ZpbGUgPSBcZXhwbG9kZSgnLicsICRmLT5nZXRCYXNlbmFtZSgpKTsNCiAgICAgICAgDQogICAgICAgIGlmKCBccHJlZ19tYXRjaCgnLycgLiAkZXhjbHVkZV9yZWdleCAuICcvaScsICRjdXJyZW50X2ZpbGVbMF0pICkgeyBjb250aW51ZTsgfQ0KICAgICAgICBpZiggXGluX2FycmF5KCRjdXJyZW50X2ZpbGVbMF0sICRleGNsdWRlKSApIHsgY29udGludWU7IH0NCiAgICAgICAgaWYoIFxwcmVnX21hdGNoKCAnLycgLiAkZXhjbHVkZV9yZWdleCAuICcvaScsICcuJyAuICRmLT5nZXRFeHRlbnNpb24oKSApICkgeyBjb250aW51ZTsgfQ0KICAgICAgICBpZiggXGluX2FycmF5KCcuJyAuICRmLT5nZXRFeHRlbnNpb24oKSwgJGV4Y2x1ZGUpICkgeyBjb250aW51ZTsgfQ0KICAgICAgfQ0KICAgICAgDQogICAgICBpZighZW1wdHkoJGZpbHRlcikpDQogICAgICB7DQogICAgICAgIGlmKCBcaW5fYXJyYXkoJy4nIC4gJGYtPmdldEV4dGVuc2lvbigpLCAkZmlsdGVyKSApDQogICAgICAgIHsNCiAgICAgICAgICAkbGlzdFtdID0gJGYtPmdldFBhdGhuYW1lKCk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vIG90aGVyd2lzZSBub3RoaW5nIGlzIGFkZGVkDQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgICRsaXN0W10gPSAkZi0+Z2V0UGF0aG5hbWUoKTsNCiAgICAgIH0NCiAgICB9DQogIH0NCiAgDQogIHN0YXRpYyBmdW5jdGlvbiBjb3B5X3Ioc3RyaW5nICRzb3VyY2VfZGlyLCBzdHJpbmcgJHRhcmdldF9kaXIsIGFycmF5ICRleGNsdWRlcyA9IFtdKQ0KICB7DQogICAgLy9OT1RFIEtFWV9BU19GSUxFTkFNRSBmbGFnIGRvZXMgbm90IHdvcmsgYXMgc3VjaCAtIGFsd2F5cyBnZXQgcGF0aCBoZXJlDQogICAgJGl0ZXIgPSBuZXcgXFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IoDQogICAgICBuZXcgXFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRzb3VyY2VfZGlyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcRmlsZXN5c3RlbUl0ZXJhdG9yOjpLRVlfQVNfRklMRU5BTUUgfA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcRmlsZXN5c3RlbUl0ZXJhdG9yOjpDVVJSRU5UX0FTX1BBVEhOQU1FIHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXEZpbGVzeXN0ZW1JdGVyYXRvcjo6VU5JWF9QQVRIUyB8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxGaWxlc3lzdGVtSXRlcmF0b3I6OkZPTExPV19TWU1MSU5LUw0KICAgICAgKSwNCiAgICAgIFxSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yOjpTRUxGX0ZJUlNUKTsNCiAgICANCiAgICAkbGVuID0gXHN0cmxlbigkc291cmNlX2RpciAuIFxESVJFQ1RPUllfU0VQQVJBVE9SKTsNCiAgICANCiAgICAkbWF0Y2hlcyA9IG51bGw7DQogIA0KICAgIGZvcmVhY2goJGl0ZXIgYXMgJGZuID0+ICRmcCkNCiAgICB7DQogICAgICBmb3JlYWNoKCRleGNsdWRlcyBhcyAkZXhjbCkNCiAgICAgIHsNCiAgICAgICAgaWYoXHByZWdfbWF0Y2goJGV4Y2wsICRmcCwgJG1hdGNoZXMsIDAsICRsZW4pKQ0KICAgICAgICB7DQogICAgICAgICAgJHJlbHBhdGggPSBcc3Vic3RyKCRmcCwgJGxlbik7DQogICAgICAgICAgY29udGludWUgMjsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgDQogICAgICAkcmVscGF0aCA9IFxzdWJzdHIoJGZwLCAkbGVuKTsNCiAgDQogICAgICBpZignLicgPT09ICRmbikNCiAgICAgIHsNCiAgICAgICAgJHRwID0gXGpvaW5wYXRoKCR0YXJnZXRfZGlyLCAkcmVscGF0aCk7DQogICAgDQogICAgICAgIGlmKCFcbWtkaXIoICRjb25jdXJyZW50RGlyZWN0b3J5ID0gXGRpcm5hbWUoJHRwKSwgMDc3MSwgVFJVRSkgJiYgIVxpc19kaXIoJGNvbmN1cnJlbnREaXJlY3RvcnkpICkNCiAgICAgICAgew0KICAgICAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCBcc3ByaW50ZignRGlyZWN0b3J5ICIlcyIgd2FzIG5vdCBjcmVhdGVkJywgJGNvbmN1cnJlbnREaXJlY3RvcnkpICk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGVsc2UgaWYoJy4uJyAhPT0gJGZuKQ0KICAgICAgew0KICAgICAgICAkdHAgPSBcam9pbnBhdGgoJHRhcmdldF9kaXIsICRyZWxwYXRoKTsNCiAgICAgICAgaWYoICFcbWtkaXIoJGNvbmN1cnJlbnREaXJlY3RvcnkgPSBcZGlybmFtZSgkdHApLCAwNzcxLCBUUlVFKSAmJiAhXGlzX2RpcigkY29uY3VycmVudERpcmVjdG9yeSkgKQ0KICAgICAgICB7DQogICAgICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIFxzcHJpbnRmKCdEaXJlY3RvcnkgIiVzIiB3YXMgbm90IGNyZWF0ZWQnLCAkY29uY3VycmVudERpcmVjdG9yeSkgKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgQFxjb3B5KCRmcCwgJHRwKTsNCiAgICAgIH0NCiAgICB9DQogIH0NCiAgDQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.HourlyHookTask.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwpuYW1lc3BhY2UgQ01TTVNFeHQ7Cgp1c2UgQ01TTVNcSG9va01hbmFnZXI7CnVzZSBDbXNSZWd1bGFyVGFzazsKdXNlIGNtc19zaXRlcHJlZnM7CgpjbGFzcyBIb3VybHlIb29rVGFzayBpbXBsZW1lbnRzIENtc1JlZ3VsYXJUYXNrCnsKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X25hbWUoKSB7IHJldHVybiBfX0NMQVNTX187IH0KICAKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2Rlc2NyaXB0aW9uKCkge30KICAKICBwdWJsaWMgZnVuY3Rpb24gdGVzdCgkdGltZSA9ICcnKQogIHsKICAgIGlmKCAhJHRpbWUgKSB7ICR0aW1lID0gXHRpbWUoKTsgfQogICAgCiAgICAkbGFzdHJ1biA9IChpbnQpY21zX3NpdGVwcmVmczo6Z2V0KF9fQ0xBU1NfXyk7CiAgICAKICAgIHJldHVybiAkdGltZSAtICRsYXN0cnVuID4gMzYwMDsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoJHRpbWUgPSAnJykKICB7CiAgICBpZiggISR0aW1lICkgeyAkdGltZSA9IFx0aW1lKCk7IH0KICAgIAogICAgSG9va01hbmFnZXI6OmRvX2hvb2soJ0NNU01TRXh0OjpIb3VybHlUYXNrJywgJHRpbWUpOwogICAgCiAgICByZXR1cm4gVFJVRTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIG9uX3N1Y2Nlc3MoJHRpbWUgPSAnJykKICB7CiAgICBpZiggISR0aW1lICkgeyAkdGltZSA9IFx0aW1lKCk7IH0KICAgIAogICAgY21zX3NpdGVwcmVmczo6c2V0KF9fQ0xBU1NfXywgJHRpbWUpOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gb25fZmFpbHVyZSgkdGltZSA9ICcnKQogIHsKICAgIGlmKCAhJHRpbWUgKSB7ICR0aW1lID0gXHRpbWUoKTsgfQogIH0KICAKfSAvLyBjbGFzcwo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.internals.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFNvbWUgaW50ZXJuYWwgbWV0aG9kcwogKgogKiBAaWdub3JlCiAqLwoKbmFtZXNwYWNlIENNU01TRXh0Owp1c2UgQ01TTVNcRGF0YWJhc2VcQ29ubmVjdGlvbiBhcyBEYXRhYmFzZTsKCi8qKgogKiBTb21lIGludGVybmFsIG1ldGhvZHMKICoKICogQGlnbm9yZQogKi8KZmluYWwgY2xhc3MgaW50ZXJuYWxzCnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRkYjsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJF9pbnN0YW5jZTsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCBEYXRhYmFzZSAkZGIgKQogICAgewogICAgICAgIGlmKCBzZWxmOjokX2luc3RhbmNlICkgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignT25seSBvbmUgaW5zdGFuY2Ugb2YgJy5fX0NMQVNTX18uJyBpcyBwZXJtaXR0ZWQnKTsKICAgICAgICBzZWxmOjokX2luc3RhbmNlID0gMTsKICAgICAgICAkdGhpcy0+ZGIgPSAkZGI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXNldF9jb3VudHJpZXMoKQogICAgewovLyAgICAgICAgJHF1ZXJ5ID0gJ1RSVU5DQVRFIFRBQkxFICcuQ0dFWFRFTlNJT05TX1RBQkxFX0NPVU5UUklFUzsKLy8gICAgICAgICR0aGlzLT5kYi0+RXhlY3V0ZSgkcXVlcnkpOwovLwovLyAgICAgICAgJGZuID0gY21zX2pvaW5fcGF0aChkaXJuYW1lKF9fRElSX18pLCdjb3VudHJpZXMudHh0Jyk7Ci8vICAgICAgICAkcmF3X2NvdW50cmllcyA9IEBmaWxlKCRmbik7Ci8vICAgICAgICAkbiA9IDE7Ci8vICAgICAgICAkcXVlcnkgPSAnSU5TRVJUIElOVE8gJy5DR0VYVEVOU0lPTlNfVEFCTEVfQ09VTlRSSUVTLicgKGNvZGUsbmFtZSxzb3J0aW5nKSBWQUxVRVMgKD8sPyw/KSc7Ci8vICAgICAgICBmb3JlYWNoKCRyYXdfY291bnRyaWVzIGFzICRvbmUpIHsKLy8gICAgICAgICAgICBsaXN0KCRhY3JvbnltLCRjb3VudHJ5X25hbWUpID0gZXhwbG9kZSgnLCcsJG9uZSk7Ci8vICAgICAgICAgICAgJGFjcm9ueW0gPSB0cmltKCRhY3JvbnltKTsKLy8gICAgICAgICAgICAkY291bnRyeV9uYW1lID0gdHJpbSgkY291bnRyeV9uYW1lKTsKLy8gICAgICAgICAgICAkdGhpcy0+ZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRhY3JvbnltLCRjb3VudHJ5X25hbWUsJG4rKykpOwovLyAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzZXRfc3RhdGVzKCkKICAgIHsKLy8gICAgICAgICRxdWVyeSA9ICdUUlVOQ0FURSBUQUJMRSAnLkNHRVhURU5TSU9OU19UQUJMRV9TVEFURVM7Ci8vICAgICAgICAkdGhpcy0+ZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKLy8KLy8gICAgICAgICRmbiA9IGNtc19qb2luX3BhdGgoZGlybmFtZShfX0RJUl9fKSwnc3RhdGVzLnR4dCcpOwovLyAgICAgICAgJHJhd19zdGF0ZXMgPSBAZmlsZSgkZm4pOwovLyAgICAgICAgJHF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuQ0dFWFRFTlNJT05TX1RBQkxFX1NUQVRFUy4nIChjb2RlLG5hbWUsc29ydGluZykgVkFMVUVTICg/LD8sPyknOwovLyAgICAgICAgJG4gPSAxOwovLyAgICAgICAgZm9yZWFjaCgkcmF3X3N0YXRlcyBhcyAkb25lKSB7Ci8vICAgICAgICAgICAgbGlzdCgkYWNyb255bSwkc3RhdGVfbmFtZSkgPSBleHBsb2RlKCcsJywkb25lKTsKLy8gICAgICAgICAgICAkYWNyb255bSA9IHRyaW0oJGFjcm9ueW0pOwovLyAgICAgICAgICAgICRzdGF0ZV9uYW1lID0gdHJpbSgkc3RhdGVfbmFtZSk7Ci8vICAgICAgICAgICAgJHRoaXMtPmRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkYWNyb255bSwkc3RhdGVfbmFtZSwkbisrKSk7Ci8vICAgICAgICB9CiAgICB9Cn0gLy8gY2xhc3MK]]></data>
	</file>
	<file>
	  <filename>/lib/class.internal_utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQovL2RlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOyMgcmV2aXNpdApuYW1lc3BhY2UgQ01TTVNFeHQ7Cgp1c2UgQ01TTVNFeHQ7CnVzZSB4dF90ZW1wbGF0ZV91dGlsczsKdXNlIGNtc191dGlsczsKdXNlIFN0ZENsYXNzOwoKZmluYWwgY2xhc3MgaW50ZXJuYWxfdXRpbHMKewogIHByaXZhdGUgJG1vZDsKICAKICBmdW5jdGlvbiBfX2NvbnN0cnVjdChYVE1vZHVsZSAkbW9kKQogIHsKICAgIGlmKFxNT0RfQ01TTVNFWFQgIT0gXGdldF9jbGFzcygkbW9kKSkKICAgIHsKICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignSW52YWxpZCBtb2R1bGUgcGFzc2VkIHRvICcgLiBfX01FVEhPRF9fKTsKICAgIH0KICAgIAogICAgJHRoaXMtPm1vZCA9ICRtb2Q7CiAgfQogIAogIC8qCiAgICogQSBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byByZWRpcmVjdCB0byBhbiBhZG1pbiB0YWIgaW4gdGhlCiAgICogZGVmYXVsdGFkbWluIGFjdGlvbgogICAqCiAgICogU2VlIEFsc286ICBTZXRDdXJyZW50VGFiCiAgICovCiAgZnVuY3Rpb24gUmVkaXJlY3RUb1RhYihzdHJpbmcgJGlkLCBzdHJpbmcgJHRhYiA9ICcnLCAkcGFyYW1zID0gJycsIHN0cmluZyAkYWN0aW9uID0gJycpCiAgewogICAgJHBhcm1zID0gYXJyYXkoKTsKICAgIGlmKGlzX2FycmF5KCRwYXJhbXMpKQogICAgewogICAgICAkcGFybXMgPSAkcGFyYW1zOwogICAgfQogICAgaWYoJHRhYiA9PSAnJykKICAgIHsKICAgICAgaWYoJHRoaXMtPm1vZC0+X2N1cnJlbnRfdGFiKQogICAgICB7CiAgICAgICAgJHRhYiA9ICR0aGlzLT5tb2QtPl9jdXJyZW50X3RhYjsKICAgICAgfQogICAgfQogICAgaWYoJHRhYiAhPSAnJykKICAgIHsKICAgICAgJHBhcm1zWyd4dF9hY3RpdmV0YWInXSA9ICR0YWI7CiAgICB9CiAgICBpZihpc19hcnJheSgkdGhpcy0+bW9kLT5fZXJyb3Jtc2cpICYmIGNvdW50KCR0aGlzLT5tb2QtPl9lcnJvcm1zZykpCiAgICB7CiAgICAgICRwYXJtc1sneHRfZXJyb3InXSA9IGltcGxvZGUoJzplcnI6JywgJHRoaXMtPm1vZC0+X2Vycm9ybXNnKTsKICAgIH0KICAgIGlmKGlzX2FycmF5KCR0aGlzLT5tb2QtPl9tZXNzYWdlcykgJiYgY291bnQoJHRoaXMtPm1vZC0+X21lc3NhZ2VzKSkKICAgIHsKICAgICAgJHBhcm1zWyd4dF9tZXNzYWdlJ10gPSBpbXBsb2RlKCc6ZXJyOicsICR0aGlzLT5tb2QtPl9tZXNzYWdlcyk7CiAgICB9CiAgICAKICAgIGlmKCEkYWN0aW9uICYmICR0aGlzLT5tb2QtPl9jdXJyZW50X2FjdGlvbikKICAgIHsKICAgICAgJGFjdGlvbiA9ICR0aGlzLT5tb2QtPl9jdXJyZW50X2FjdGlvbjsKICAgIH0KICAgIGlmKCEkYWN0aW9uKQogICAgewogICAgICAkYWN0aW9uID0gJ2RlZmF1bHRhZG1pbic7CiAgICB9CiAgICAkdGhpcy0+bW9kLT5SZWRpcmVjdCgkaWQsICRhY3Rpb24sICcnLCAkcGFybXMsIFRSVUUpOwogIH0KICAKICAvKgogICAqIEEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGFuIDxpbWc+IHRhZy4KICAgKiBAZGVwcmVjYXRlZAogICAqLwogIGZ1bmN0aW9uIENyZWF0ZUltYWdlVGFnKAogICAgc3RyaW5nICRpbWFnZSwgc3RyaW5nICRhbHQgPSAnJywgaW50ICR3aWR0aCA9IE5VTEwsIGludCAkaGVpZ2h0ID0gTlVMTCwgc3RyaW5nICRjbGFzcyA9ICcnLCBzdHJpbmcgJGFkZHRleHQgPSAnJwogICkKICB7CiAgICAkdHh0ID0gIjxpbWcgc3JjPVwiJGltYWdlXCIiOwogICAgJHR4dCAuPSAiIGFsdD1cIiRhbHRcIiI7CiAgICBpZigkYWx0ICE9ICcnKQogICAgewogICAgICAkdHh0IC49ICIgdGl0bGU9XCIkYWx0XCIiOwogICAgfQogICAgaWYoJHdpZHRoICE9ICcnKQogICAgewogICAgICAkdHh0IC49ICIgd2lkdGg9XCIkd2lkdGhcIiI7CiAgICB9CiAgICBpZigkaGVpZ2h0ICE9ICcnKQogICAgewogICAgICAkdHh0IC49ICIgaGVpZ2h0PVwiJGhlaWdodFwiIjsKICAgIH0KICAgIGlmKCRjbGFzcyAhPSAnJykKICAgIHsKICAgICAgJHR4dCAuPSAiIGNsYXNzPVwiJGNsYXNzXCIiOwogICAgfQogICAgaWYoJGFkZHRleHQgIT0gJycpCiAgICB7CiAgICAgICR0eHQgLj0gIiAkYWRkdGV4dCI7CiAgICB9CiAgICAkdHh0IC49ICIgLz4iOwogICAgCiAgICByZXR1cm4gJHR4dDsKICB9CiAgCiAgCiAgLyoKICAgKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHNlYXJjaCBmb3IgYW4gaW1hZ2UgaW4gY2VydGFpbiBwcmVzZXQKICAgKiBkaXJlY3RvcmllcwogICAqLwogIGZ1bmN0aW9uIERpc3BsYXlJbWFnZSgKICAgIFhUTW9kdWxlICRtb2QsIHN0cmluZyAkaW1hZ2UsIHN0cmluZyAkYWx0ID0gJycsIHN0cmluZyAkY2xhc3MgPSAnJywgaW50ICR3aWR0aCA9IE5VTEwsIGludCAkaGVpZ2h0ID0gTlVMTCwKICAgIHN0cmluZyAkaWQgPSAnJwogICkKICB7CiAgICAvLyRjb25maWcgPSAkdGhpcy0+bW9kLT5jb25maWc7CiAgICAkY29uZmlnID0gXENNU01TRXh0XGNvbmZpZzo6R2V0SW5zdGFuY2UoKTsKICAgIAogICAgaWYoISRjbGFzcyAmJiAkdGhpcy0+bW9kLT5jbXMtPmlzX2Zyb250ZW5kX3JlcXVlc3QoKSkKICAgIHsKICAgICAgJGNsYXNzID0gJ3N5c3RlbWljb24nOwogICAgfQogICAgCiAgICAkaW1nMSA9IFxiYXNlbmFtZSgkaW1hZ2UpOwogICAgCiAgICAvLyBjaGVjayBpbWFnZV9kaXJlY3RvcmllcyBmaXJzdAogICAgaWYoaXNzZXQoJG1vZC0+X2ltYWdlX2RpcmVjdG9yaWVzKSAmJiAhZW1wdHkoJG1vZC0+X2ltYWdlX2RpcmVjdG9yaWVzKSkKICAgIHsKICAgICAgZm9yZWFjaCgkbW9kLT5faW1hZ2VfZGlyZWN0b3JpZXMgYXMgJGRpcikKICAgICAgewogICAgICAgICR1cmwgID0gIiRkaXIvJGltZzEiOwogICAgICAgICRwYXRoID0gXGNtc19qb2luX3BhdGgoQ01TX1JPT1RfUEFUSCwgJHVybCk7CiAgICAgICAgaWYoXGlzX3JlYWRhYmxlKCRwYXRoKSkKICAgICAgICB7CiAgICAgICAgICBpZighJHRoaXMtPm1vZC0+Y21zLT5pc19mcm9udGVuZF9yZXF1ZXN0KCkpCiAgICAgICAgICB7CiAgICAgICAgICAgICR1cmwgPSAiLi4vJHVybCI7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgICR1cmwgPSAkY29uZmlnWydyb290X3VybCddIC4gIi8kdXJsIjsKICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgcmV0dXJuICR0aGlzLT5DcmVhdGVJbWFnZVRhZygkdXJsLCAkYWx0LCAkd2lkdGgsICRoZWlnaHQsICRjbGFzcyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAKICAgICR0aGVtZSA9IGNtc191dGlsczo6Z2V0X3RoZW1lX29iamVjdCgpOwogICAgaWYoXGlzX29iamVjdCgkdGhlbWUpKQogICAgewogICAgICAvLyB3ZSdyZSBpbiB0aGUgYWRtaW4KICAgICAgJHR4dCA9ICR0aGVtZS0+RGlzcGxheUltYWdlKCRpbWFnZSwgJGFsdCwgJHdpZHRoLCAkaGVpZ2h0LCAkY2xhc3MpOwogICAgfQogICAgZWxzZQogICAgewogICAgICAvLyBmcm9udGVuZAogICAgICAkdHh0ID0gJHRoaXMtPkNyZWF0ZUltYWdlVGFnKCRpbWFnZSwgJGFsdCwgJHdpZHRoLCAkaGVpZ2h0LCAkY2xhc3MpOwogICAgfQogICAgCiAgICByZXR1cm4gJHR4dDsKICB9CiAgCiAgCiAgLyoKICAgKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIGxpbmsgd2l0aCBhbiBpbWFnZQogICAqLwogIGZ1bmN0aW9uIENyZWF0ZUltYWdlTGluaygKICAgIFhUTW9kdWxlICRtb2QsIHN0cmluZyAkaWQsIHN0cmluZyAkYWN0aW9uLCAkcmV0dXJuaWQsICRjb250ZW50cywgJGltYWdlLAogICAgICAgICAgICAgJHBhcmFtcyA9IFtdLCAkY2xhc3NuYW1lID0gJycsCiAgICAgICAgICAgICAkd2Fybl9tZXNzYWdlID0gJycsCiAgICAgICAgICAgICAkaW1hZ2Vvbmx5ID0gVFJVRSwKICAgICAgICAgICAgICRpbmxpbmUgPSBGQUxTRSwKICAgICAgICAgICAgICRhZGR0ZXh0ID0gJycsCiAgICAgICAgICAgICAkdGFyZ2V0Y29udGVudG9ubHkgPSBGQUxTRSwKICAgICAgICAgICAgICRwcmV0dHl1cmwgPSAnJwogICkKICB7CiAgICBpZignJyA9PSAkY2xhc3NuYW1lKQogICAgewogICAgICAkY2xhc3NuYW1lID0gJ3N5c3RlbWljb24nOwogICAgfQogICAgCiAgICAkdHh0ID0gJHRoaXMtPkRpc3BsYXlJbWFnZSgkbW9kLCAkaW1hZ2UsICRjb250ZW50cywgJGNsYXNzbmFtZSk7CiAgICAKICAgIGlmKFRSVUUgIT09ICRpbWFnZW9ubHkpCiAgICB7CiAgICAgICR0eHQgLj0gJyZuYnNwJzsKICAgICAgJHR4dCAuPSAkY29udGVudHM7CiAgICB9CiAgICAKICAgIHJldHVybiAkbW9kLT5DcmVhdGVMaW5rKAogICAgICAkaWQsICRhY3Rpb24sICRyZXR1cm5pZCwgJHR4dCwgJHBhcmFtcywgJHdhcm5fbWVzc2FnZSwgJGlubGluZSwgJGFkZHRleHQsICR0YXJnZXRjb250ZW50b25seSwgJHByZXR0eXVybAogICAgKTsKICB9CiAgCiAgCiAgLyoKICAgKiBBbiBvdmVycmlkYWJsZSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBwcmV0dHkgbGluawogICAqCiAgICogQGRlcHJlY2F0ZWQKICAgKi8KICBmdW5jdGlvbiBfX0NyZWF0ZVByZXR0eUxpbmsoCiAgICBYVE1vZHVsZSAkbW9kLCAkaWQsICRhY3Rpb24sICRyZXR1cm5pZCA9ICcnLCAkY29udGVudHMgPSAnJywKICAgICRwYXJhbXMgPSBhcnJheSgpLCAkd2Fybl9tZXNzYWdlID0gJycsCiAgICAkb25seWhyZWYgPSBGQUxTRSwgJGlubGluZSA9IEZBTFNFLCAkYWRkdGV4dCA9ICcnLAogICAgJHRhcmdldGNvbnRlbnRvbmx5ID0gRkFMU0UsICRwcmV0dHl1cmwgPSAnJwogICkKICB7CiAgICAvLyRjb25maWcgPSAkdGhpcy0+bW9kLT5jb25maWc7CiAgICAkY29uZmlnID0gXENNU01TRXh0XGNvbmZpZzo6R2V0SW5zdGFuY2UoKTsKICAgICRwcmV0dHkgPSBGQUxTRTsKICAgIGlmKFRSVUUgPT09ICRjb25maWdbJ2Fzc3VtZV9tb2RfcmV3cml0ZSddIHx8IFRSVUUgPT09ICRjb25maWdbJ2ludGVybmFsX3ByZXR0eV91cmxzJ10pCiAgICB7CiAgICAgICRwcmV0dHkgPSBUUlVFOwogICAgfQogICAgCiAgICAkbWV0aG9kX2V4aXN0cyA9IFxtZXRob2RfZXhpc3RzKCR0aGlzLT5tb2QsICdDcmVhdGVQcmV0dHlMaW5rJyk7CiAgICBpZigkcHJldHR5ICYmICgkcmV0dXJuaWQgIT0gJycpICYmICRtZXRob2RfZXhpc3RzKQogICAgewogICAgICAvLyBwcmV0dHkgdXJscyBhcmUgY29uZmlndXJlZCwgd2UncmUgbm90IGluIGFuIGFkbWluIGFjdGlvbgogICAgICAvLyBhbmQgdGhlIENyZWF0ZVByZXR0eUxpbmsgbWV0aG9kIGhhcyBiZWVuIGZvdW5kLgogICAgICByZXR1cm4gJG1vZC0+Q3JlYXRlUHJldHR5TGluaygKICAgICAgICAkaWQsICRhY3Rpb24sICRyZXR1cm5pZCwKICAgICAgICAkY29udGVudHMsICRwYXJhbXMsCiAgICAgICAgJHdhcm5fbWVzc2FnZSwKICAgICAgICAkb25seWhyZWYsICRpbmxpbmUsICRhZGR0ZXh0LAogICAgICAgICR0YXJnZXRjb250ZW50b25seSwgJHByZXR0eXVybAogICAgICApOwogICAgfQogICAgCiAgICByZXR1cm4gJG1vZC0+Q3JlYXRlTGluaygKICAgICAgJGlkLCAkYWN0aW9uLCAkcmV0dXJuaWQsICRjb250ZW50cywgJHBhcmFtcywgJHdhcm5fbWVzc2FnZSwKICAgICAgJG9ubHlocmVmLCAkaW5saW5lLCAkYWRkdGV4dCwgJHRhcmdldGNvbnRlbnRvbmx5LCAkcHJldHR5dXJsCiAgICApOwogIH0KICAKICAKICBmdW5jdGlvbiBfRGlzcGxheVRlbXBsYXRlTGlzdCgKICAgICRtb2R1bGUsICRpZCwgJHJldHVybmlkLCAkcHJlZml4LAogICAgJGRlZmF1bHR0ZW1wbGF0ZXByZWYsCiAgICAkYWN0aXZlX3RhYiwgJGRlZmF1bHRwcmVmbmFtZSwKICAgICR0aXRsZSwgJGluZm8gPSAnJywgJGRlc3RhY3Rpb24gPSAnZGVmYXVsdGFkbWluJwogICkKICB7CiAgICAvLyB3ZSdyZSBnb25uYSBhbGxvdyBtdWx0aXBsZSB0ZW1wbGF0ZXMgaGVyZQogICAgLy8gYnV0IHdlJ3JlIGdvbm5hIHByZWZpeCB0aGVtIGFsbCB3aXRoIHNvbWV0aGluZwogICAgCiAgICAkdGhlbWUgICAgICAgID0gXGNtc191dGlsczo6Z2V0X3RoZW1lX29iamVjdCgpOwogICAgJGZhbHNlaW1hZ2UxICA9ICR0aGVtZS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZmFsc2UuZ2lmJywgJ21ha2UgZGVmYXVsdCcsICcnLCAnJywgJ3N5c3RlbWljb24nKTsKICAgICR0cnVlaW1hZ2UxICAgPSAkdGhlbWUtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL3RydWUuZ2lmJywgJ2RlZmF1bHQnLCAnJywgJycsICdzeXN0ZW1pY29uJyk7CiAgICAkYWxsdGVtcGxhdGVzID0geHRfdGVtcGxhdGVfdXRpbHM6OmdldF90ZW1wbGF0ZXNfYnlfcHJlZml4KCRtb2R1bGUsICRwcmVmaXgsIFRSVUUpOwogICAgJHJvd2FycmF5ICAgICA9IGFycmF5KCk7CiAgICAkcm93Y2xhc3MgICAgID0gJ3JvdzEnOwogICAgCiAgICBmb3JlYWNoKCRhbGx0ZW1wbGF0ZXMgYXMgJG9uZXRlbXBsYXRlKQogICAgewogICAgICBpZigkcHJlZml4IC4gJG9uZXRlbXBsYXRlID09ICRkZWZhdWx0dGVtcGxhdGVwcmVmKSB7IGNvbnRpbnVlOyB9IC8vIGRvbid0IHNob3cgdGhlIHN5c3RlbSBkZWZhdWx0LgogICAgICAKICAgICAgJHRtcCAgICAgICAgICAgPSAkb25ldGVtcGxhdGU7CiAgICAgICRyb3cgICAgICAgICAgID0gbmV3IFN0ZENsYXNzOwogICAgICAkcm93LT5uYW1lICAgICA9ICRtb2R1bGUtPkNyZWF0ZUxpbmsoCiAgICAgICAgJGlkLCAnZWRpdHRlbXBsYXRlJywgJHJldHVybmlkLAogICAgICAgICR0bXAsIGFycmF5KAogICAgICAgICAgJ3RlbXBsYXRlJyAgICAgICAgICAgID0+ICR0bXAsCiAgICAgICAgICAnZGVzdGFjdGlvbicgICAgICAgICAgPT4gJGRlc3RhY3Rpb24sCiAgICAgICAgICAnYWN0aXZldGFiJyAgICAgICAgICAgPT4gJGFjdGl2ZV90YWIsCiAgICAgICAgICAndGl0bGUnICAgICAgICAgICAgICAgPT4gJHRpdGxlLAogICAgICAgICAgJ2luZm8nICAgICAgICAgICAgICAgID0+ICRpbmZvLAogICAgICAgICAgJ3ByZWZpeCcgICAgICAgICAgICAgID0+ICRwcmVmaXgsCiAgICAgICAgICAnbW9kbmFtZScgICAgICAgICAgICAgPT4gJG1vZHVsZS0+R2V0TmFtZSgpLAogICAgICAgICAgJ21vZGRlc2MnICAgICAgICAgICAgID0+ICRtb2R1bGUtPkdldEZyaWVuZGx5TmFtZSgpLAogICAgICAgICAgJ2RlZmF1bHR0ZW1wbGF0ZXByZWYnID0+ICRkZWZhdWx0dGVtcGxhdGVwcmVmLAogICAgICAgICAgJ2RlZmF1bHRwcmVmbmFtZScgICAgID0+ICRkZWZhdWx0cHJlZm5hbWUsCiAgICAgICAgICAnbW9kZScgICAgICAgICAgICAgICAgPT4gJ2VkaXQnCiAgICAgICAgKQogICAgICApOwogICAgICAkcm93LT5yb3djbGFzcyA9ICRyb3djbGFzczsKICAgICAgCiAgICAgICRyb3ctPmRlZmF1bHQgPSBOVUxMOwogICAgICBpZigkZGVmYXVsdHByZWZuYW1lKQogICAgICB7CiAgICAgICAgJGRlZmF1bHQgPSAoJG1vZHVsZS0+R2V0UHJlZmVyZW5jZSgkZGVmYXVsdHByZWZuYW1lKSA9PSAkdG1wKSA/IFRSVUUgOiBGQUxTRTsKICAgICAgICBpZigkZGVmYXVsdCkKICAgICAgICB7CiAgICAgICAgICAkcm93LT5kZWZhdWx0ID0gJHRydWVpbWFnZTE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAkcm93LT5kZWZhdWx0ID0gJG1vZHVsZS0+Q3JlYXRlTGluaygKICAgICAgICAgICAgJGlkLCAnbWFrZWRlZmF1bHR0ZW1wbGF0ZScsICRyZXR1cm5pZCwKICAgICAgICAgICAgJGZhbHNlaW1hZ2UxLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAndGVtcGxhdGUnICAgICAgICA9PiAkdG1wLAogICAgICAgICAgICAgICdkZXN0YWN0aW9uJyAgICAgID0+ICRkZXN0YWN0aW9uLAogICAgICAgICAgICAgICdkZWZhdWx0cHJlZm5hbWUnID0+ICRkZWZhdWx0cHJlZm5hbWUsCiAgICAgICAgICAgICAgJ21vZG5hbWUnICAgICAgICAgPT4gJG1vZHVsZS0+R2V0TmFtZSgpLAogICAgICAgICAgICAgICd4dF9hY3RpdmV0YWInICAgID0+ICRhY3RpdmVfdGFiCiAgICAgICAgICAgICkKICAgICAgICAgICk7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICAkcm93LT5lZGl0bGluayA9ICRtb2R1bGUtPkNyZWF0ZUltYWdlTGluaygKICAgICAgICAkaWQsICdlZGl0dGVtcGxhdGUnLCAkcmV0dXJuaWQsCiAgICAgICAgJHRoaXMtPm1vZC0+TGFuZygncHJvbXB0X2VkaXR0ZW1wbGF0ZScpLAogICAgICAgICdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLAogICAgICAgIGFycmF5KAogICAgICAgICAgJ3RlbXBsYXRlJyAgICAgICAgICAgID0+ICR0bXAsCiAgICAgICAgICAnZGVzdGFjdGlvbicgICAgICAgICAgPT4gJGRlc3RhY3Rpb24sCiAgICAgICAgICAnYWN0aXZldGFiJyAgICAgICAgICAgPT4gJGFjdGl2ZV90YWIsCiAgICAgICAgICAncHJlZml4JyAgICAgICAgICAgICAgPT4gJHByZWZpeCwKICAgICAgICAgICd0aXRsZScgICAgICAgICAgICAgICA9PiAkdGl0bGUsCiAgICAgICAgICAnaW5mbycgICAgICAgICAgICAgICAgPT4gJGluZm8sCiAgICAgICAgICAnbW9kbmFtZScgICAgICAgICAgICAgPT4gJG1vZHVsZS0+R2V0TmFtZSgpLAogICAgICAgICAgJ21vZGRlc2MnICAgICAgICAgICAgID0+ICRtb2R1bGUtPkdldEZyaWVuZGx5TmFtZSgpLAogICAgICAgICAgJ2RlZmF1bHR0ZW1wbGF0ZXByZWYnID0+ICRkZWZhdWx0dGVtcGxhdGVwcmVmLAogICAgICAgICAgJ2RlZmF1bHRwcmVmbmFtZScgICAgID0+ICRkZWZhdWx0cHJlZm5hbWUsCiAgICAgICAgICAnbW9kZScgICAgICAgICAgICAgICAgPT4gJ2VkaXQnCiAgICAgICAgKQogICAgICApOwogICAgICAKICAgICAgaWYoJGRlZmF1bHRwcmVmbmFtZSAmJiAkZGVmYXVsdCkKICAgICAgewogICAgICAgICRyb3ctPmRlbGV0ZWxpbmsgPSAnJm5ic3A7JzsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICAkcm93LT5kZWxldGVsaW5rID0gJG1vZHVsZS0+Q3JlYXRlSW1hZ2VMaW5rKAogICAgICAgICAgJGlkLCAnZGVsZXRldGVtcGxhdGUnLCAkcmV0dXJuaWQsCiAgICAgICAgICAkdGhpcy0+bW9kLT5MYW5nKCdwcm9tcHRfZGVsZXRldGVtcGxhdGUnKSwKICAgICAgICAgICdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsCiAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgJ3RlbXBsYXRlJyAgICAgPT4gJG9uZXRlbXBsYXRlLAogICAgICAgICAgICAncHJlZml4JyAgICAgICA9PiAkcHJlZml4LAogICAgICAgICAgICAnbW9kbmFtZScgICAgICA9PiAkbW9kdWxlLT5HZXROYW1lKCksCiAgICAgICAgICAgICdkZXN0YWN0aW9uJyAgID0+ICRkZXN0YWN0aW9uLAogICAgICAgICAgICAneHRfYWN0aXZldGFiJyA9PiAkYWN0aXZlX3RhYgogICAgICAgICAgKSwKICAgICAgICAgICcnLAogICAgICAgICAgJHRoaXMtPm1vZC0+TGFuZygnYXJleW91c3VyZScpCiAgICAgICAgKTsKICAgICAgfQogICAgICAKICAgICAgJHJvd2FycmF5W10gPSAkcm93OwogICAgICAoJHJvd2NsYXNzID09ICJyb3cxIiA/ICRyb3djbGFzcyA9ICJyb3cyIiA6ICRyb3djbGFzcyA9ICJyb3cxIik7CiAgICB9CiAgICAKICAgICR0cGwgPSAkdGhpcy0+bW9kLT5DcmVhdGVTbWFydHlUZW1wbGF0ZSgnbGlzdHRlbXBsYXRlcy50cGwnKTsKICAgIAogICAgJHRwbC0+YXNzaWduKCdwYXJlbnRfbW9kdWxlX25hbWUnLCAkbW9kdWxlLT5HZXRGcmllbmRseU5hbWUoKSk7CiAgICAkdHBsLT5hc3NpZ24oJ2l0ZW1zJywgJHJvd2FycmF5KTsKICAgICR0cGwtPmFzc2lnbignbmFtZXByb21wdCcsICR0aGlzLT5tb2QtPkxhbmcoJ3Byb21wdF9uYW1lJykpOwogICAgJHRwbC0+YXNzaWduKCdkZWZhdWx0cHJvbXB0JywgJHRoaXMtPm1vZC0+TGFuZygncHJvbXB0X2RlZmF1bHQnKSk7CiAgICAkdHBsLT5hc3NpZ24oCiAgICAgICduZXd0ZW1wbGF0ZWxpbmsnLAogICAgICAkbW9kdWxlLT5DcmVhdGVJbWFnZUxpbmsoCiAgICAgICAgJGlkLCAnZWRpdHRlbXBsYXRlJywgJHJldHVybmlkLAogICAgICAgICR0aGlzLT5tb2QtPkxhbmcoJ3Byb21wdF9uZXd0ZW1wbGF0ZScpLAogICAgICAgICdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsCiAgICAgICAgYXJyYXkoCiAgICAgICAgICAncHJlZml4JyAgICAgICAgICAgICAgPT4gJHByZWZpeCwKICAgICAgICAgICdkZXN0YWN0aW9uJyAgICAgICAgICA9PiAkZGVzdGFjdGlvbiwKICAgICAgICAgICdhY3RpdmV0YWInICAgICAgICAgICA9PiAkYWN0aXZlX3RhYiwKICAgICAgICAgICdtb2RuYW1lJyAgICAgICAgICAgICA9PiAkbW9kdWxlLT5HZXROYW1lKCksCiAgICAgICAgICAnbW9kZGVzYycgICAgICAgICAgICAgPT4gJG1vZHVsZS0+R2V0RnJpZW5kbHlOYW1lKCksCiAgICAgICAgICAndGl0bGUnICAgICAgICAgICAgICAgPT4gJHRpdGxlLAogICAgICAgICAgJ2luZm8nICAgICAgICAgICAgICAgID0+ICRpbmZvLAogICAgICAgICAgJ21vZGUnICAgICAgICAgICAgICAgID0+ICdhZGQnLAogICAgICAgICAgJ2RlZmF1bHR0ZW1wbGF0ZXByZWYnID0+ICRkZWZhdWx0dGVtcGxhdGVwcmVmLAogICAgICAgICAgJ2RlZmF1bHRwcmVmbmFtZScgICAgID0+ICRkZWZhdWx0cHJlZm5hbWUKICAgICAgICApLCAnJywgJycsIEZBTFNFCiAgICAgICkKICAgICk7CiAgICAKICAgIHJldHVybiAkdHBsLT5mZXRjaCgpOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24geHRfQ3JlYXRlSW5wdXRZZXNOb0Ryb3Bkb3duKHN0cmluZyAkaWQsIHN0cmluZyAkbmFtZSwgJHNlbGVjdGVkdmFsdWUgPSAnJywgc3RyaW5nICRhZGR0ZXh0ID0gJycpCiAgewogICAgJGl0ZW1zID0gWyR0aGlzLT5tb2QtPkxhbmcoJ3llcycpID0+IDEsICR0aGlzLT5tb2QtPkxhbmcoJ25vJykgPT4gMF07CiAgICAKICAgIHJldHVybiAkdGhpcy0+bW9kLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJG5hbWUsICRpdGVtcywgLTEsICRzZWxlY3RlZHZhbHVlLCAkYWRkdGV4dCk7CiAgfQogIAp9IC8vIGNsYXNzCgojCiMgRU9GCiMK]]></data>
	</file>
	<file>
	  <filename>/lib/class.JSLikeHTMLElement.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiogSmF2YVNjcmlwdC1saWtlIEhUTUwgRE9NIEVsZW1lbnQKKgoqIFRoaXMgY2xhc3MgZXh0ZW5kcyBQSFAncyBET01FbGVtZW50IHRvIGFsbG93CiogdXNlcnMgdG8gZ2V0IGFuZCBzZXQgdGhlIGlubmVySFRNTCBwcm9wZXJ0eSBvZgoqIEhUTUwgZWxlbWVudHMgaW4gdGhlIHNhbWUgd2F5IGl0J3MgZG9uZSBpbgoqIEphdmFTY3JpcHQuCioKKiBFeGFtcGxlIHVzYWdlOgoqIEBjb2RlCiogcmVxdWlyZV9vbmNlICdKU0xpa2VIVE1MRWxlbWVudC5waHAnOwoqIGhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluJyk7CiogJGRvYyA9IG5ldyBET01Eb2N1bWVudCgpOwoqICRkb2MtPnJlZ2lzdGVyTm9kZUNsYXNzKCdET01FbGVtZW50JywgJ0pTTGlrZUhUTUxFbGVtZW50Jyk7CiogJGRvYy0+bG9hZEhUTUwoJzxkaXY+PHA+UGFyYSAxPC9wPjxwPlBhcmEgMjwvcD48L2Rpdj4nKTsKKiAkZWxlbSA9ICRkb2MtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKS0+aXRlbSgwKTsKKgoqIC8vIHByaW50IGlubmVySFRNTAoqIGVjaG8gJGVsZW0tPmlubmVySFRNTDsgLy8gcHJpbnRzICc8cD5QYXJhIDE8L3A+PHA+UGFyYSAyPC9wPicKKiBlY2hvICJcblxuIjsKKgoqIC8vIHNldCBpbm5lckhUTUwKKiAkZWxlbS0+aW5uZXJIVE1MID0gJzxhIGhyZWY9Imh0dHA6Ly9maXZlZmlsdGVycy5vcmciPkZpdmVGaWx0ZXJzLm9yZzwvYT4nOwoqIGVjaG8gJGVsZW0tPmlubmVySFRNTDsgLy8gcHJpbnRzICc8YSBocmVmPSJodHRwOi8vZml2ZWZpbHRlcnMub3JnIj5GaXZlRmlsdGVycy5vcmc8L2E+JwoqIGVjaG8gIlxuXG4iOwoqCiogLy8gcHJpbnQgZG9jdW1lbnQgKHdpdGggb3VyIGNoYW5nZXMpCiogZWNobyAkZG9jLT5zYXZlWE1MKCk7CiogQGVuZGNvZGUKKgoqIEBhdXRob3IgS2V5dmFuIE1pbm91a2FkZWggLSBodHRwOi8vd3d3LmtleXZhbi5uZXQgLSBrZXl2YW5Aa2V5dmFuLm5ldAoqIEBzZWUgaHR0cDovL2ZpdmVmaWx0ZXJzLm9yZyAodGhlIHByb2plY3QgdGhpcyB3YXMgd3JpdHRlbiBmb3IpCiovCgovKioKICogQ2xhc3MgSlNMaWtlSFRNTEVsZW1lbnQKICoKICogYWRhcHRlZCBhbmQgbmFtZXNwYWNlZCBmb3IgQ01TTVNFeHQKICovCgpuYW1lc3BhY2UgQ01TTVNFeHQ7CgpjbGFzcyBKU0xpa2VIVE1MRWxlbWVudCBleHRlbmRzIFxET01FbGVtZW50CnsKCS8qKgoJKiBVc2VkIGZvciBzZXR0aW5nIGlubmVySFRNTCBsaWtlIGl0J3MgZG9uZSBpbiBKYXZhU2NyaXB0OgoJKiBAY29kZQoJKiAkZGl2LT5pbm5lckhUTUwgPSAnPGgyPkNoYXB0ZXIgMjwvaDI+PHA+VGhlIHN0b3J5IGJlZ2lucy4uLjwvcD4nOwoJKiBAZW5kY29kZQoJKi8KCXB1YmxpYyBmdW5jdGlvbiBfX3NldCgkbmFtZSwgJHZhbHVlKSB7CgkJaWYgKCRuYW1lID09ICdpbm5lckhUTUwnKSB7CgkJCS8vIGZpcnN0LCBlbXB0eSB0aGUgZWxlbWVudAoJCQlmb3IgKCR4PSR0aGlzLT5jaGlsZE5vZGVzLT5sZW5ndGgtMTsgJHg+PTA7ICR4LS0pIHsKCQkJCSR0aGlzLT5yZW1vdmVDaGlsZCgkdGhpcy0+Y2hpbGROb2Rlcy0+aXRlbSgkeCkpOwoJCQl9CgkJCS8vICR2YWx1ZSBob2xkcyBvdXIgbmV3IGlubmVyIEhUTUwKCQkJaWYgKCR2YWx1ZSAhPSAnJykgewoJCQkJJGYgPSAkdGhpcy0+b3duZXJEb2N1bWVudC0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwoJCQkJLy8gYXBwZW5kWE1MKCkgZXhwZWN0cyB3ZWxsLWZvcm1lZCBtYXJrdXAgKFhIVE1MKQoJCQkJJHJlc3VsdCA9IEAkZi0+YXBwZW5kWE1MKCR2YWx1ZSk7IC8vIEAgdG8gc3VwcHJlc3MgUEhQIHdhcm5pbmdzCgkJCQlpZiAoJHJlc3VsdCkgewoJCQkJICBpZiAoJGYtPmhhc0NoaWxkTm9kZXMoKSkKCQkJCSAgICB7CgkJCQkgICAgICAkdGhpcy0+YXBwZW5kQ2hpbGQoJGYpOwoJCQkJICAgIH0KCQkJCX0gZWxzZSB7CgkJCQkJLy8gJHZhbHVlIGlzIHByb2JhYmx5IGlsbC1mb3JtZWQKCQkJCQkkZiA9IG5ldyBET01Eb2N1bWVudCgpOwoJCQkJCSR2YWx1ZSA9IG1iX2NvbnZlcnRfZW5jb2RpbmcoJHZhbHVlLCAnSFRNTC1FTlRJVElFUycsICdVVEYtOCcpOwoJCQkJCS8vIFVzaW5nIDxodG1sZnJhZ21lbnQ+IHdpbGwgZ2VuZXJhdGUgYSB3YXJuaW5nLCBidXQgc28gd2lsbCBiYWQgSFRNTAoJCQkJCS8vIChhbmQgYnkgdGhpcyBwb2ludCwgYmFkIEhUTUwgaXMgd2hhdCB3ZSd2ZSBnb3QpLgoJCQkJCS8vIFdlIHVzZSBpdCAoYW5kIHN1cHByZXNzIHRoZSB3YXJuaW5nKSBiZWNhdXNlIGFuIEhUTUwgZnJhZ21lbnQgd2lsbAoJCQkJCS8vIGJlIHdyYXBwZWQgYXJvdW5kIDxodG1sPjxib2R5PiB0YWdzIHdoaWNoIHdlIGRvbid0IHJlYWxseSB3YW50IHRvIGtlZXAuCgkJCQkJLy8gTm90ZTogZGVzcGl0ZSB0aGUgd2FybmluZywgaWYgbG9hZEhUTUwgc3VjY2VlZHMgaXQgd2lsbCByZXR1cm4gdHJ1ZS4KCQkJCQkkcmVzdWx0ID0gQCRmLT5sb2FkSFRNTCgnPGh0bWxmcmFnbWVudD4nLiR2YWx1ZS4nPC9odG1sZnJhZ21lbnQ+Jyk7CgkJCQkJaWYgKCRyZXN1bHQpIHsKCQkJCQkJJGltcG9ydCA9ICRmLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaHRtbGZyYWdtZW50JyktPml0ZW0oMCk7CgkJCQkJCWZvcmVhY2ggKCRpbXBvcnQtPmNoaWxkTm9kZXMgYXMgJGNoaWxkKSB7CgkJCQkJCQkkaW1wb3J0ZWROb2RlID0gJHRoaXMtPm93bmVyRG9jdW1lbnQtPmltcG9ydE5vZGUoJGNoaWxkLCB0cnVlKTsKCQkJCQkJCSR0aGlzLT5hcHBlbmRDaGlsZCgkaW1wb3J0ZWROb2RlKTsKCQkJCQkJfQoJCQkJCX0gZWxzZSB7CgkJCQkJCS8vIG9oIHdlbGwsIHdlIHRyaWVkLCB3ZSByZWFsbHkgZGlkLiA6KAoJCQkJCQkvLyB0aGlzIGVsZW1lbnQgaXMgbm93IGVtcHR5CgkJCQkJfQoJCQkJfQoJCQl9CgkJfSBlbHNlIHsKCQkJJHRyYWNlID0gZGVidWdfYmFja3RyYWNlKCk7CgkJCXRyaWdnZXJfZXJyb3IoJ1VuZGVmaW5lZCBwcm9wZXJ0eSB2aWEgX19zZXQoKTogJy4kbmFtZS4nIGluICcuJHRyYWNlWzBdWydmaWxlJ10uJyBvbiBsaW5lICcuJHRyYWNlWzBdWydsaW5lJ10sIEVfVVNFUl9OT1RJQ0UpOwoJCX0KCX0KCgkvKioKCSogVXNlZCBmb3IgZ2V0dGluZyBpbm5lckhUTUwgbGlrZSBpdCdzIGRvbmUgaW4gSmF2YVNjcmlwdDoKCSogQGNvZGUKCSogJHN0cmluZyA9ICRkaXYtPmlubmVySFRNTDsKCSogQGVuZGNvZGUKCSovCglwdWJsaWMgZnVuY3Rpb24gX19nZXQoJG5hbWUpCgl7CiAgICAgICAgLy8gd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCB0aGVzZSBub2RlcyBhcmUgbm90IHNlbGYgY2xvc2VkLgogICAgICAgICRub3NlbGZjbG9zZSA9IFsnYSddOwoJCWlmICgkbmFtZSA9PSAnaW5uZXJIVE1MJykgewogICAgICAgICAgICAkaW5uZXIgPSBudWxsOwoJCQlmb3JlYWNoICgkdGhpcy0+Y2hpbGROb2RlcyBhcyAkY2hpbGQpIHsKICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgPGE+IHRhZ3MKICAgICAgICAgICAgICAgIGlmKCAhJGNoaWxkLT5oYXNDaGlsZE5vZGVzKCkgJiYgaW5fYXJyYXkoJGNoaWxkLT5ub2RlTmFtZSwgJG5vc2VsZmNsb3NlKSApIHsKICAgICAgICAgICAgICAgICAgICAkaW5uZXIgLj0gJHRoaXMtPm93bmVyRG9jdW1lbnQtPnNhdmVYTUwoJGNoaWxkLExJQlhNTF9OT0VNUFRZVEFHKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGlubmVyIC49ICR0aGlzLT5vd25lckRvY3VtZW50LT5zYXZlWE1MKCRjaGlsZCk7CiAgICAgICAgICAgICAgICB9CgkJCX0KCQkJcmV0dXJuICRpbm5lcjsKCQl9CgoJCSR0cmFjZSA9IGRlYnVnX2JhY2t0cmFjZSgpOwoJCXRyaWdnZXJfZXJyb3IoJ1VuZGVmaW5lZCBwcm9wZXJ0eSB2aWEgX19nZXQoKTogJy4kbmFtZS4nIGluICcuJHRyYWNlWzBdWydmaWxlJ10uJyBvbiBsaW5lICcuJHRyYWNlWzBdWydsaW5lJ10sIEVfVVNFUl9OT1RJQ0UpOwoJCXJldHVybiBudWxsOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKCXsKICAgICAgICByZXR1cm4gJHRoaXMtPl9fZ2V0KCdpbm5lckhUTUwnKTsKCQkvL3JldHVybiAnWycuJHRoaXMtPnRhZ05hbWUuJ10nOwoJfQp9Cj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.lookup_table.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIGdlbmVyYXRlIGEgZ2VuZXJpYyBsb29rdXAgdGFibGUuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBVdGlsaXRpZXMKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxMCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCm5hbWVzcGFjZSBDTVNNU0V4dDsKCi8qKgogKiBBbiBhYnN0cmFjdCBjbGFzcyBmb3IgYSBnZW5lcmljIGxvb2t1cCB0YWJsZS4KICogVGhpcyBjbGFzcyBtYW5hZ2VzIGEgdGFibGUsIGFuZCBpdCdzIGl0ZW1zLgogKgogKiBAcHJvcGVydHktcmVhZCBpbnQgJGlkCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJG5hbWUKICogQHByb3BlcnR5IHN0cmluZyAkZGVzY3JpcHRpb24KICovCmFic3RyYWN0IGNsYXNzIGxvb2t1cF90YWJsZQp7CiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2RhdGEgPSBhcnJheSgnaWQnPT5udWxsLCduYW1lJz0+bnVsbCwnZGVzY3JpcHRpb24nPT5udWxsLCdpb3JkZXInPT5udWxsKTsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJF9jYWNoZTsKCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgdGFibGUgbmFtZS4KICAgICAqIHVzZXMgbGF0ZSBzdGF0aWMgYmluZGluZ3MuCiAgICAgKgogICAgICogQGFic3RyYWN0CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRhYmxlX25hbWUoKQogICAgewogICAgICAgIGRpZSgnWU9VIE1VU1Qgb3ZlcnJpZGUgdGhlIHRhYmxlX25hbWUgTUVUSE9EIGluIHlvdXIgbG9va3VwIHRhYmxlIGRlcml2ZWQgY2xhc3MuJyk7CiAgICB9CgoKICAgIC8qKgogICAgICogUmV0dXJuIGEgdGl0bGUgZm9yIHRoZSBhZGQvZWRpdCBmb3JtLgogICAgICogdXNlcyBsYXRlIHN0YXRpYyBiaW5kaW5ncy4KICAgICAqCiAgICAgKiBAYWJzdHJhY3QKICAgICAqIEByZXR1cm4gbG9va3VwX2Zvcm1fZGF0YQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9hZGRlZGl0X2Zvcm1kYXRhKCkKICAgIHsKICAgICAgICBkaWUoJ1lPVSBNVVNUIG92ZXJyaWRlIHRoZSBnZXRfYWRkZWRpdF9mb3JtZGF0YSBNRVRIT0QgaW4geW91ciBsb29rdXAgdGFibGUgZGVyaXZlZCBjbGFzcy4nKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSB0aGUgZGF0YWJhc2UgdGFibGUgZm9yIHRoaXMgbG9va3VwIHRhYmxlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaW5zdGFsbCgpCiAgICB7CiAgICAgICAgJGRiID0gXHh0X3V0aWxzOjpnZXRfZGIoKTsKICAgICAgICAkZmxkcyA9ICJpZCBJIEtFWSBBVVRPLAogICAgICAgICAgICAgICAgIG5hbWUgQygyNTUpIE5PVCBOVUxMLAogICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIFgsCiAgICAgICAgICAgICAgICAgaW9yZGVyIEkgTk9UIE5VTEwiOwoKICAgICAgICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CiAgICAgICAgJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsaScgPT4gJ0VOR0lORT1Jbm5vREInKTsKICAgICAgICAkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoc3RhdGljOjp0YWJsZV9uYW1lKCksJGZsZHMsJHRhYm9wdGFycmF5KTsKICAgICAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSxGQUxTRSk7CgogICAgICAgICRpZHggPSBzdGF0aWM6OnRhYmxlX25hbWUoKS4nX2lkeDEnOwogICAgICAgICRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVJbmRleFNRTCgkaWR4LHN0YXRpYzo6dGFibGVfbmFtZSgpLCduYW1lJyxhcnJheSgnVU5JUVVFJykpOwogICAgICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5LEZBTFNFKTsKICAgIH0KCiAgICAvKioKICAgICAqIERlc3Ryb3kgdGhlIGRhdGFiYXNlIHRhYmxlIGZvciB0aGlzIGxvb2t1cCB0YWJsZS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1bmluc3RhbGwoKQogICAgewogICAgICAgICRkYiA9IFx4dF91dGlsczo6Z2V0X2RiKCk7CiAgICAgICAgJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoKICAgICAgICAkc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKHN0YXRpYzo6dGFibGVfbmFtZSgpKTsKICAgICAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSxGQUxTRSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgka2V5KQogICAgewogICAgICAgIHN3aXRjaCggJGtleSApIHsKICAgICAgICBjYXNlICdpZCc6CiAgICAgICAgY2FzZSAnbmFtZSc6CiAgICAgICAgY2FzZSAnZGVzY3JpcHRpb24nOgogICAgICAgIGNhc2UgJ2lvcmRlcic6CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X2RhdGFbJGtleV07CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCIka2V5IGlzIG5vdCBhIHZhbGlkIG1lbWJlciBvZiAiLl9fQ0xBU1NfXyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXQoJGtleSwkdmFsKQogICAgewogICAgICAgIHN3aXRjaCggJGtleSApIHsKICAgICAgICBjYXNlICdpZCc6CiAgICAgICAgY2FzZSAnaW9yZGVyJzoKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiJGtleSBpcyBub3QgYSBzZXR0YWJsZSBtZW1iZXIgb2YgIi5fX0NMQVNTX18pOwoKICAgICAgICBjYXNlICduYW1lJzoKICAgICAgICBjYXNlICdkZXNjcmlwdGlvbic6CiAgICAgICAgICAgICR0aGlzLT5fZGF0YVska2V5XSA9IHRyaW0oJHZhbCk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCIka2V5IGlzIG5vdCBhIHZhbGlkIG1lbWJlciBvZiAiLl9fQ0xBU1NfXyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19pc3NldCgka2V5KQogICAgewogICAgICAgIHN3aXRjaCggJGtleSApIHsKICAgICAgICBjYXNlICdpZCc6CiAgICAgICAgY2FzZSAnbmFtZSc6CiAgICAgICAgY2FzZSAnZGVzY3JpcHRpb24nOgogICAgICAgIGNhc2UgJ2lvcmRlcic6CiAgICAgICAgICAgIHJldHVybiBUUlVFOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCIka2V5IGlzIG5vdCBhIHZhbGlkIG1lbWJlciBvZiAiLl9fQ0xBU1NfXyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICB9CgoKICAgIC8qKgogICAgICogVmFsaWRhdGUgdGhlIGN1cnJlbnQgbG9va3VwIHRhYmxlIHRvIGVuc3VyZSB3ZSBoYXZlIHRoZSBkZXNpcmVkIGluZm9ybWF0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZSgpCiAgICB7CiAgICAgICAgaWYoICEkdGhpcy0+bmFtZSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbih4dF9sYW5nKCdlcnJvcl9sa3BfbmFtZXJlcXVpcmVkJykpOwogICAgfQoKICAgIC8qKgogICAgICogU2F2ZSB0aGlzIGxvb2t1cCB0YWJsZSB0byB0aGUgZGF0YWJhc2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNhdmUoKQogICAgewogICAgICAgICR0aGlzLT52YWxpZGF0ZSgpOwogICAgICAgIGlmKCAkdGhpcy0+aWQgPiAwICkgewogICAgICAgICAgICAkdGhpcy0+X3VwZGF0ZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5faW5zZXJ0KCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogSW5zZXJ0IGEgbmV3IGxvb2t1cCB0YWJsZSBpbnRvIHRoZSBkYXRhYmFzZS4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9pbnNlcnQoKQogICAgewogICAgICAgICRkYiA9IFx4dF91dGlsczo6Z2V0X2RiKCk7CiAgICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCBDT0FMRVNDRShNQVgoaW9yZGVyKSwwKSArIDEgRlJPTSAnLnN0YXRpYzo6dGFibGVfbmFtZSgpOwogICAgICAgICR0aGlzLT5fZGF0YVsnaW9yZGVyJ10gPSAoaW50KSAkZGItPkdldE9uZSgkcXVlcnkpOwoKICAgICAgICAkcXVlcnkgPSAnSU5TRVJUIElOVE8gJy5zdGF0aWM6OnRhYmxlX25hbWUoKS4nIChuYW1lLGRlc2NyaXB0aW9uLGlvcmRlcikgVkFMVUVTICg/LD8sPyknOwogICAgICAgICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHRoaXMtPm5hbWUsJHRoaXMtPmRlc2NyaXB0aW9uLCR0aGlzLT5pb3JkZXIpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFVwZGF0ZSBhbiBleGlzdGluZyBsb29rdXAgdGFibGUgcmVjb3JkLgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3VwZGF0ZSgpCiAgICB7CiAgICAgICAgJGRiID0gXHh0X3V0aWxzOjpnZXRfZGIoKTsKICAgICAgICAkcXVlcnkgPSAnVVBEQVRFICcuc3RhdGljOjp0YWJsZV9uYW1lKCkuJyBTRVQgbmFtZSA9ID8sIGRlc2NyaXB0aW9uID0gPywgaW9yZGVyID0gPyBXSEVSRSBpZCA9ID8nOwogICAgICAgICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHRoaXMtPm5hbWUsJHRoaXMtPmRlc2NyaXB0aW9uLCR0aGlzLT5pb3JkZXIsJHRoaXMtPmlkKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhbiBpdGVtIGlkLCBkZWxldGUgaXQgZnJvbSB0aGUgZGF0YWJhc2UKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpdGVtX2lkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGVsZXRlKGludCAkaXRlbV9pZCkKICAgIHsKICAgICAgICAkaXRlbV9pZCA9IChpbnQpICRpdGVtX2lkOwogICAgICAgIGlmKCAkaXRlbV9pZCA8IDEgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdDYW5ub3QgZGVsZXRlIGEgJy5nZXRfY2xhc3Moc3RhdGljOjpjbGFzcykuJyB0aGF0IGhhcyBub3QgYmVlbiBzYXZlZCcpOwoKICAgICAgICAkZGIgPSBceHRfdXRpbHM6OmdldF9kYigpOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRkYi0+QmVnaW5UcmFucygpOwoKICAgICAgICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCBpb3JkZXIgRlJPTSAnLnN0YXRpYzo6dGFibGVfbmFtZSgpLicgV0hFUkUgaWQgPSA/JzsKICAgICAgICAgICAgJGlvcmRlciA9ICRkYi0+R2V0T25lKCRxdWVyeSxhcnJheSgkaXRlbV9pZCkpOwogICAgICAgICAgICBpZiggJGlvcmRlciA8IDEgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdDb3VsZCBub3QgZmluZCBhbiBpb3JkZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBsb29rdXAgaXRlbSAnLiRpdGVtX2lkKTsKCiAgICAgICAgICAgICRxdWVyeSA9ICdVUERBVEUgJy5zdGF0aWM6OnRhYmxlX25hbWUoKS4nIFNFVCBpb3JkZXIgPSBpb3JkZXIgLSAxIFdIRVJFIGlvcmRlciA+ID8nOwogICAgICAgICAgICAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRpb3JkZXIpKTsKCiAgICAgICAgICAgICRxdWVyeSA9ICdERUxFVEUgRlJPTSAnLnN0YXRpYzo6dGFibGVfbmFtZSgpLicgV0hFUkUgaWQgPSA/JzsKICAgICAgICAgICAgJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkaXRlbV9pZCkpOwoKICAgICAgICAgICAgJGRiLT5Db21taXRUcmFucygpOwogICAgICAgIH0KICAgICAgICBjYXRjaCggXEV4Y2VwdGlvbiAkZSApIHsKICAgICAgICAgICAgJGRiLT5Sb2xsYmFja1RyYW5zKCk7CiAgICAgICAgICAgIHRocm93ICRlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIE1vdmUgYW4gaXRlbSB1cCBhbW9uZ3N0IGl0cyBwZWVycy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBhdXRvbWF0aWNhbGx5IHNhdmVzIGVmZmVjdGVkIGl0ZW1zIHRvIHRoZSBkYXRhYnNlLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGl0ZW1fYV9pZAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1vdmVfdXAoaW50ICRpdGVtX2FfaWQpCiAgICB7CiAgICAgICAgJGl0ZW1fYV9pZCA9IChpbnQpICRpdGVtX2FfaWQ7CgogICAgICAgIC8vIGdldCB0aGlzIGl0ZW0gYW5kIGl0J3MgaW9yZGVyCiAgICAgICAgJGl0ZW1fYSA9IHN0YXRpYzo6bG9hZCgkaXRlbV9hX2lkKTsKCiAgICAgICAgLy8gZ2V0IHRoZSBpdGVtIHdpdGggdGhlIHByZXZpb3VzIGlvcmRlcgogICAgICAgICRkYiA9IFx4dF91dGlsczo6Z2V0X2RiKCk7CiAgICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCBpZCBGUk9NICcuc3RhdGljOjp0YWJsZV9uYW1lKCkuJyBXSEVSRSBpb3JkZXIgPSA/JzsKICAgICAgICAkaXRlbV9iX2lkID0gKGludCkgJGRiLT5HZXRPbmUoJHF1ZXJ5LGFycmF5KCRpdGVtX2EtPmlvcmRlci0xKSk7CiAgICAgICAgaWYoICEkaXRlbV9iX2lkICkgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignVGhpcyBsb29rdXAgaXRlbSBjYW5ub3QgYmUgbW92ZWQgdXAnKTsKICAgICAgICAkaXRlbV9iID0gc3RhdGljOjpsb2FkKCRpdGVtX2JfaWQpOwoKICAgICAgICAvLyBzd2FwIHRoZSB0d28gaXRlbXMgb3JkZXJzCiAgICAgICAgJHRtcCA9ICRpdGVtX2EtPmlvcmRlcjsKICAgICAgICAkaXRlbV9hLT5fZGF0YVsnaW9yZGVyJ10gPSAkaXRlbV9iLT5pb3JkZXI7CiAgICAgICAgJGl0ZW1fYi0+X2RhdGFbJ2lvcmRlciddID0gJHRtcDsKCiAgICAgICAgLy8gc2F2ZSB0aGVtIGJvdGguCiAgICAgICAgJGl0ZW1fYS0+c2F2ZSgpOwogICAgICAgICRpdGVtX2ItPnNhdmUoKTsKICAgIH0KCiAgICAvKioKICAgICAqIE1vdmUgYW4gaXRlbSBkb3duIGFtb25nc3QgaXRzIHBlZXJzLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGF1dG9tYXRpY2FsbHkgc2F2ZXMgZWZmZWN0ZWQgaXRlbXMgdG8gdGhlIGRhdGFic2UuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaXRlbV9hX2lkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbW92ZV9kb3duKGludCAkaXRlbV9hX2lkKQogICAgewogICAgICAgICRpdGVtX2FfaWQgPSAoaW50KSAkaXRlbV9hX2lkOwoKICAgICAgICAvLyBnZXQgdGhpcyBpdGVtIGFuZCBpdCdzIGlvcmRlcgogICAgICAgICRpdGVtX2EgPSBzdGF0aWM6OmxvYWQoJGl0ZW1fYV9pZCk7CgogICAgICAgIC8vIGdldCB0aGUgaXRlbSB3aXRoIHRoZSBwcmV2aW91cyBpb3JkZXIKICAgICAgICAkZGIgPSBceHRfdXRpbHM6OmdldF9kYigpOwogICAgICAgICRxdWVyeSA9ICdTRUxFQ1QgaWQgRlJPTSAnLnN0YXRpYzo6dGFibGVfbmFtZSgpLicgV0hFUkUgaW9yZGVyID0gPyc7CiAgICAgICAgJGl0ZW1fYl9pZCA9IChpbnQpICRkYi0+R2V0T25lKCRxdWVyeSxhcnJheSgkaXRlbV9hLT5pb3JkZXIrMSkpOwogICAgICAgIGlmKCAhJGl0ZW1fYl9pZCApIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ1RoaXMgbG9va3VwIGl0ZW0gY2Fubm90IGJlIG1vdmVkIHVwJyk7CiAgICAgICAgJGl0ZW1fYiA9IHN0YXRpYzo6bG9hZCgkaXRlbV9iX2lkKTsKCiAgICAgICAgLy8gc3dhcCB0aGUgdHdvIGl0ZW1zIG9yZGVycwogICAgICAgICR0bXAgPSAkaXRlbV9hLT5pb3JkZXI7CiAgICAgICAgJGl0ZW1fYS0+X2RhdGFbJ2lvcmRlciddID0gJGl0ZW1fYi0+aW9yZGVyOwogICAgICAgICRpdGVtX2ItPl9kYXRhWydpb3JkZXInXSA9ICR0bXA7CgogICAgICAgIC8vIHNhdmUgdGhlbSBib3RoLgogICAgICAgICRpdGVtX2EtPnNhdmUoKTsKICAgICAgICAkaXRlbV9iLT5zYXZlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBsb2FkIGEgbG9va3VwIHRhYmxlICBpdGVtCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaWQgVGhlIHRhYmxlIGlkCiAgICAgKiBAcmV0dXJuIG9iamVjdAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvYWQoaW50ICRpZCkKICAgIHsKICAgICAgICAkaWQgPSAoaW50KSAkaWQ7CiAgICAgICAgJGxpc3QgPSBzZWxmOjpsb2FkX2FsbCgpOwogICAgICAgIGlmKCBpc3NldCgkbGlzdFskaWRdKSApIHJldHVybiAkbGlzdFskaWRdOwogICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbih4dF9sYW5nKCdlcnJvcl9pdGVtbm90Zm91bmQnKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBMb2FkIGFsbCBsb29rdXAgdGFibGUgaXRlbXMKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IGFuIGFycmF5IG9mIG9iamVjdHMuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZF9hbGwoKQogICAgewogICAgICAgIGlmKCBpc19hcnJheShzZWxmOjokX2NhY2hlW3N0YXRpYzo6dGFibGVfbmFtZSgpXSkgKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjokX2NhY2hlW3N0YXRpYzo6dGFibGVfbmFtZSgpXTsKICAgICAgICB9CgogICAgICAgIHNlbGY6OiRfY2FjaGVbc3RhdGljOjp0YWJsZV9uYW1lKCldID0gYXJyYXkoKTsKICAgICAgICAkZGIgPSBceHRfdXRpbHM6OmdldF9kYigpOwogICAgICAgICRxdWVyeSA9ICdTRUxFQ1QgaWQsbmFtZSxkZXNjcmlwdGlvbixpb3JkZXIgRlJPTSAnLnN0YXRpYzo6dGFibGVfbmFtZSgpLicgT1JERVIgQlkgaW9yZGVyJzsKICAgICAgICAkcm93cyA9ICRkYi0+R2V0QXJyYXkoJHF1ZXJ5KTsKICAgICAgICBpZiggIWlzX2FycmF5KCRyb3dzKSApIHJldHVybjsKCiAgICAgICAgJGNsYXNzID0gZ2V0X2NhbGxlZF9jbGFzcygpOwogICAgICAgIGZvcmVhY2goICRyb3dzIGFzICRyb3cgKSB7CiAgICAgICAgICAgICRvYmogPSBuZXcgJGNsYXNzOwogICAgICAgICAgICAkb2JqLT5fZGF0YSA9ICRyb3c7CiAgICAgICAgICAgIHNlbGY6OiRfY2FjaGVbc3RhdGljOjp0YWJsZV9uYW1lKCldWyRvYmotPmlkXSA9ICRvYmo7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjokX2NhY2hlW3N0YXRpYzo6dGFibGVfbmFtZSgpXTsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBhIG5ldyBsb29rdXAgdGFibGUgaXRlbQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlc2NyaXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYWRkKHN0cmluZyAkbmFtZSxzdHJpbmcgJGRlc2NyaXB0aW9uID0gbnVsbCkKICAgIHsKICAgICAgICAkbmFtZSA9IHRyaW0oKHN0cmluZykgJG5hbWUpOwogICAgICAgIGlmKCAhJG5hbWUgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCJBIHZhbGlkIG5hbWUgbXVzdCBiZSBwYXNzZWQgdG8gIi5fX01FVEhPRF9fKTsKICAgICAgICAkY2xhc3MgPSBnZXRfY2FsbGVkX2NsYXNzKCk7CgogICAgICAgICRvYmogPSBuZXcgJGNsYXNzOwogICAgICAgICRvYmotPm5hbWUgPSAkbmFtZTsKICAgICAgICAkb2JqLT5kZXNjcmlwdGlvbiA9IHRyaW0oKHN0cmluZykgJGRlc2NyaXB0aW9uKTsKICAgICAgICAkb2JqLT5zYXZlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUZXN0IGlmIGFuIGl0ZW0gZXhpc3RzIGJ5IGl0cyBpZC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpZAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXhpc3RzKGludCAkaWQpIDogYm9vbAogICAgewogICAgICAgICRpZCA9IChpbnQpICRpZDsKICAgICAgICBpZiggJGlkIDwgMSApIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oIkEgdmFsaWQgaWQgbXVzdCBiZSBwYXNzZWQgdG8gIi5fX01FVEhPRF9fKTsKICAgICAgICAkY2xhc3MgPSBnZXRfY2FsbGVkX2NsYXNzKCk7CiAgICAgICAgJGxpc3QgPSAkY2xhc3M6OmxvYWRfYWxsKCk7CiAgICAgICAgaWYoIGlzc2V0KCRsaXN0WyRpZF0pICkgcmV0dXJuIFRSVUU7CiAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBpdGVtcyBmb3IgYSBsb29rdXAgdGFibGUgaW4gYSBmb3JtYXQgdGhhdCBpcyBzdWl0YWJsZSB0byB1c2UgaW4gYSBkcm9wZG93bgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfbGlzdCgpCiAgICB7CiAgICAgICAgJGNsYXNzID0gZ2V0X2NhbGxlZF9jbGFzcygpOwogICAgICAgICRsaXN0ID0gJGNsYXNzOjpsb2FkX2FsbCgpOwoKICAgICAgICBpZiggIWNvdW50KCRsaXN0KSApIHJldHVybjsKCiAgICAgICAgJG91dCA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCggJGxpc3QgYXMgJGlkID0+ICRvYmogKSB7CiAgICAgICAgICAgICRvdXRbJGlkXSA9ICRvYmotPm5hbWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKfSAvLyBlbmQgb2YgY2xhc3MKCi8qKgogKiBBIHNpbXBsZSBjbGFzcyB0byBwcm92aWRlIHRpdGxlLCBhbmQgcmV0dXJuIGRhdGEgaW5mb3JtYXRpb24gdG8gdGhlIGxvb2t1cCBmb3JtIG1hbmFnZXIKICoKICogQHByb3BlcnR5IHN0cmluZyAkbW9kdWxlX25hbWUgVGhlIG1vZHVsZSBuYW1lIHRoYXQgdGhlIGxvb2t1cCB0eXBlIGJlbG9uZ3MgdG8uCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJHRpdGxlIEEgdGl0bGUgZm9yIHRoZSBhZGQvZWRpdCBmb3JtLgogKiBAcHJvcGVydHkgc3RyaW5nICRzdWJ0aXRsZSBBIHN1YnRpdGxlIGZvciB0aGUgYWRkL2VkaXQgZm9ybQogKiBAcHJvcGVydHkgc3RyaW5nICRyZXR1cm5fYWN0aW9uIFRoZSBvcHRpb25hbCBhY3Rpb24gdGhhdCB0aGUgdXNlciBzaG91bGQgYmUgcmV0dXJuZWQgdG8gd2l0aGluIHRoZSBvd25pbmcgbW9kdWxlIChpZiBub3Qgc3BlY2lmaWVkIGRlZmF1bHRhZG1pbiBpcyB1c2VkKQogKiBAcHJvcGVydHkgc3RyaW5nICRyZXR1cm5fdGFiIFRoZSBvcHRpb25hbCB0YWIgbmFtZSB0aGF0IHRoZSB1c2VyIHNob3VsZCBiZSByZXR1cm5lZCB0byB3aXRoaW4gdGhlIHNwZWNpZmllZCBhY3Rpb24gb2YgdGhlIG93bmluZyBtb2R1bGUuCiAqIEBwcm9lcHJ0eSBzdHJpbmcgJHBvc3RfYWRkX21lc3NhZ2UgT3B0aW9uYWwgbWVzc2FnZSB0byBkaXNwbGF5IGFmdGVyIHRoZSB1c2VyIGhhcyBhZGRlZCBhIG5ldyBpdGVtIHRvIHRoZSBsb29rdXAgdGFibGUuCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJHBvc3RfZWRpdF9tZXNzYWdlIE9wdGlvbmFsIG1lc3NhZ2UgdG8gZGlzcGxheSBhZnRlciB0aGUgdXNlciBoYXMgZWRpdGVkIGFuIGV4aXN0aW5nIGl0ZW0gaW4gdGhlIGxvb2t1cCB0YWJsZS4KICogQHByb3BlcnR5IHN0cmluZyAkY2FuY2VsX21lc3NhZ2UgT3B0aW9uYWwgbWVzc2FnZSB0byBkaXNwbGF5IGFmdGVyIGh0ZSB1c2VyIGhhcyBjYW5jZWxsZWQgYW4gYWRkIG9yIGVkaXQgb3BlcmF0aW9uLgogKi8KZmluYWwgY2xhc3MgbG9va3VwX2Zvcm1fZGF0YQp7CiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2RhdGEgPSBhcnJheSgnbW9kdWxlX25hbWUnPT5udWxsLCd0aXRsZSc9Pm51bGwsJ3N1YnRpdGxlJz0+bnVsbCwncmV0dXJuX2FjdGlvbic9Pm51bGwsJ3JldHVybl90YWInPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAncG9zdF9hZGRfbWVzc2FnZSc9Pm51bGwsJ3Bvc3RfZWRpdF9tZXNzYWdlJz0+bnVsbCwnY2FuY2VsX21lc3NhZ2UnPT5udWxsKTsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdG9yCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRkYXRhIEFuIGFzc29jaWF0aXZlIGFycmF5IG9mIHByb3BlcnRpZXMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkZGF0YSA9IG51bGwpCiAgICB7CiAgICAgICAgZm9yZWFjaCggJGRhdGEgYXMgJGtleSA9PiAkdmFsICkgewogICAgICAgICAgICAkdGhpcy0+JGtleSA9ICR2YWw7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJGtleSkKICAgIHsKICAgICAgICBzd2l0Y2goICRrZXkgKSB7CiAgICAgICAgY2FzZSAnbW9kdWxlX25hbWUnOgogICAgICAgIGNhc2UgJ3RpdGxlJzoKICAgICAgICBjYXNlICdzdWJ0aXRsZSc6CiAgICAgICAgY2FzZSAncmV0dXJuX3RhYic6CiAgICAgICAgY2FzZSAncG9zdF9hZGRfbWVzc2FnZSc6CiAgICAgICAgY2FzZSAncG9zdF9lZGl0X21lc3NhZ2UnOgogICAgICAgIGNhc2UgJ2NhbmNlbF9tZXNzYWdlJzoKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5fZGF0YVska2V5XTsKCiAgICAgICAgY2FzZSAncmV0dXJuX2FjdGlvbic6CiAgICAgICAgICAgIGlmKCAhJHRoaXMtPl9kYXRhWyRrZXldICkgcmV0dXJuICdkZWZhdWx0YWRtaW4nOwogICAgICAgICAgICByZXR1cm4gJHRoaXMtPl9kYXRhWyRrZXldOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCIka2V5IGlzIG5vdCBhIHZhbGlkIG1lbWJlciBvZiAiLl9fQ0xBU1NfXyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXQoJGtleSwkdmFsKQogICAgewogICAgICAgIHN3aXRjaCggJGtleSApIHsKICAgICAgICBjYXNlICdtb2R1bGVfbmFtZSc6CiAgICAgICAgY2FzZSAndGl0bGUnOgogICAgICAgIGNhc2UgJ3N1YnRpdGxlJzoKICAgICAgICBjYXNlICdyZXR1cm5fYWN0aW9uJzoKICAgICAgICBjYXNlICdyZXR1cm5fdGFiJzoKICAgICAgICBjYXNlICdwb3N0X2FkZF9tZXNzYWdlJzoKICAgICAgICBjYXNlICdwb3N0X2VkaXRfbWVzc2FnZSc6CiAgICAgICAgY2FzZSAnY2FuY2VsX21lc3NhZ2UnOgogICAgICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSB0cmltKCR2YWwpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiJGtleSBpcyBub3QgYSB2YWxpZCBtZW1iZXIgb2YgIi5fX0NMQVNTX18pOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9faXNzZXQoJGtleSkKICAgIHsKICAgICAgICBzd2l0Y2goICRrZXkgKSB7CiAgICAgICAgY2FzZSAnbW9kdWxlX25hbWUnOgogICAgICAgIGNhc2UgJ3RpdGxlJzoKICAgICAgICBjYXNlICdzdWJ0aXRsZSc6CiAgICAgICAgY2FzZSAncmV0dXJuX2FjdGlvbic6CiAgICAgICAgY2FzZSAncmV0dXJuX3RhYic6CiAgICAgICAgY2FzZSAncG9zdF9hZGRfbWVzc2FnZSc6CiAgICAgICAgY2FzZSAncG9zdF9lZGl0X21lc3NhZ2UnOgogICAgICAgIGNhc2UgJ2NhbmNlbF9tZXNzYWdlJzoKICAgICAgICAgICAgcmV0dXJuICFlbXB0eSgkdGhpcy0+X2RhdGFbJGtleV0pOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCIka2V5IGlzIG5vdCBhIHZhbGlkIG1lbWJlciBvZiAiLl9fQ0xBU1NfXyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX191bnNldCgka2V5KQogICAgewogICAgICAgIHN3aXRjaCggJGtleSApIHsKICAgICAgICBjYXNlICdtb2R1bGVfbmFtZSc6CiAgICAgICAgY2FzZSAndGl0bGUnOgogICAgICAgIGNhc2UgJ3N1YnRpdGxlJzoKICAgICAgICBjYXNlICdyZXR1cm5fYWN0aW9uJzoKICAgICAgICBjYXNlICdyZXR1cm5fdGFiJzoKICAgICAgICBjYXNlICdwb3N0X2FkZF9tZXNzYWdlJzoKICAgICAgICBjYXNlICdwb3N0X2VkaXRfbWVzc2FnZSc6CiAgICAgICAgY2FzZSAnY2FuY2VsX21lc3NhZ2UnOgogICAgICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSBudWxsOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiJGtleSBpcyBub3QgYSB2YWxpZCBtZW1iZXIgb2YgIi5fX0NMQVNTX18pOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFZhbGlkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZSgpCiAgICB7CiAgICAgICAgaWYoICEkdGhpcy0+bW9kdWxlX25hbWUgfHwgISR0aGlzLT50aXRsZSApIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ2luc3RhbmNlIG9mICcuX19DTEFTU19fLicgY291bGQgbm90IHZhbGlkYXRlJyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/class.lookup_table_manager.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKbmFtZXNwYWNlIENNU01TRXh0OwoKY2xhc3MgbG9va3VwX3RhYmxlX21hbmFnZXIKewogICAgcHJpdmF0ZSAkX2RhdGEgPSBhcnJheSgnX20nPT5udWxsLCdfYyc9Pm51bGwpOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbW9kdWxlLCRjbGFzcykKICAgIHsKICAgICAgICAkdGhpcy0+X2RhdGFbJ19tJ10gPSAoc3RyaW5nKSAkbW9kdWxlOwogICAgICAgICR0aGlzLT5fZGF0YVsnX2MnXSA9IChzdHJpbmcpICRjbGFzczsKCiAgICAgICAgLy8gQHRvZG86IGNoZWNrIHRvIHNlZSBpZiBtb2R1bGUgd29ya3MKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2NsYXNzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9kYXRhWydjbGFzcyddOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNwbGF5X21hbmFnZXIoKQogICAgewogICAgICAgIC8vIG9ubHkgZm9yIGFkbWluIHJlcXVlc3RzLgogICAgICAgICRtb2QgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKE1PRF9YVE1PRFVMRSk7CiAgICAgICAgaWYoICRtb2QtPmNtcy0+aXNfZnJvbnRlbmRfcmVxdWVzdCgpICkgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbihfX01FVEhPRF9fLicgY2Fubm90IGJlIHVzZWQgZm9yIGZyb250ZW5kIHJlcXVlc3RzLicpOwoKICAgICAgICAkY2xhc3MgPSAkdGhpcy0+X2RhdGFbJ19jJ107CiAgICAgICAgJGxpc3QgPSAkY2xhc3M6OmxvYWRfYWxsKCk7CgogICAgICAgIC8vIHRyYW5zZm9ybSB0aGUgbGlzdCBpbnRvIGEgc2ltcGxlIGNsYXNzCiAgICAgICAgJG5ld2xpc3QgPSBhcnJheSgpOwogICAgICAgICRrZXlzID0gYXJyYXlfa2V5cygkbGlzdCk7CiAgICAgICAgZm9yKCAkaSA9IDAsICRuID0gY291bnQoJGtleXMpOyAkaSA8ICRuOyAkaSsrICkgewogICAgICAgICAgICAka2V5ID0gJGtleXNbJGldOwogICAgICAgICAgICAkaXRlbSA9ICRsaXN0WyRrZXldOwogICAgICAgICAgICAkbl9pdGVtID0gbmV3IFxTdGRDbGFzczsKICAgICAgICAgICAgJG5faXRlbS0+aWQgPSAkaXRlbS0+aWQ7CiAgICAgICAgICAgICRuX2l0ZW0tPm5hbWUgPSAkaXRlbS0+bmFtZTsKICAgICAgICAgICAgJG5faXRlbS0+ZGVzY3JpcHRpb24gPSAkaXRlbS0+ZGVzY3JpcHRpb247CiAgICAgICAgICAgICRuX2l0ZW0tPmlvcmRlciA9ICRpdGVtLT5pb3JkZXI7CgogICAgICAgICAgICAkcGFybXMgPSAkdGhpcy0+X2RhdGE7CiAgICAgICAgICAgICRwYXJtc1snX2knXSA9ICRuX2l0ZW0tPmlkOwogICAgICAgICAgICAkbl9pdGVtLT5lZGl0X3VybCA9ICRtb2QtPmNyZWF0ZV91cmwoJ20xXycsJ2FkbWluX2xrcF9lZGl0aXRlbScsJycsXHh0X3V0aWxzOjplbmNyeXB0X3BhcmFtcygkcGFybXMpKTsKICAgICAgICAgICAgJG5faXRlbS0+ZGVsX3VybCA9ICRtb2QtPmNyZWF0ZV91cmwoJ20xXycsJ2FkbWluX2xrcF9kZWxpdGVtJywnJyxceHRfdXRpbHM6OmVuY3J5cHRfcGFyYW1zKCRwYXJtcykpOwogICAgICAgICAgICBpZiggJGkgPiAwICYmIGNvdW50KCRsaXN0KSA+IDEgKSB7CiAgICAgICAgICAgICAgICAvLyBjYW4gbW92ZSB1cAogICAgICAgICAgICAgICAgJHBhcm1zWydfZGlyJ10gPSAndXAnOwogICAgICAgICAgICAgICAgJG5faXRlbS0+dXBfdXJsID0gJG1vZC0+Y3JlYXRlX3VybCgnbTFfJywnYWRtaW5fbGtwX21vdmVpdGVtJywnJyxceHRfdXRpbHM6OmVuY3J5cHRfcGFyYW1zKCRwYXJtcykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKCBjb3VudCgkbGlzdCkgPiAxICYmICRpIDwgY291bnQoJGxpc3QpIC0gMSApIHsKICAgICAgICAgICAgICAgIC8vIGNhbiBtb3ZlIGRvd24KICAgICAgICAgICAgICAgICRwYXJtc1snX2RpciddID0gJ2Rvd24nOwogICAgICAgICAgICAgICAgJG5faXRlbS0+ZG93bl91cmwgPSAkbW9kLT5jcmVhdGVfdXJsKCdtMV8nLCdhZG1pbl9sa3BfbW92ZWl0ZW0nLCcnLFx4dF91dGlsczo6ZW5jcnlwdF9wYXJhbXMoJHBhcm1zKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRuZXdsaXN0W10gPSAkbl9pdGVtOwogICAgICAgIH0KICAgICAgICAkdHBsID0gJG1vZC0+Q3JlYXRlU21hcnR5VGVtcGxhdGUoJ2xvb2t1cF90YWJsZV9saXN0LnRwbCcpOwogICAgICAgICR0cGwtPmFzc2lnbignaXRlbXMnLCRuZXdsaXN0KTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ2NsYXNzJywkY2xhc3MpOwogICAgICAgICR0cGwtPmFzc2lnbigneHQnLCRtb2QpOwogICAgICAgICR0cGwtPmFzc2lnbignYWRkX3VybCcsJG1vZC0+Y3JlYXRlX3VybCgnbTFfJywnYWRtaW5fbGtwX2VkaXRpdGVtJywnJyxceHRfdXRpbHM6OmVuY3J5cHRfcGFyYW1zKCR0aGlzLT5fZGF0YSkpKTsKICAgICAgICAkdHBsLT5kaXNwbGF5KCk7CiAgICB9Cn0gLy8gZW5kIG9mIGNsYXNzCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.Mail_mimeDecode.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFRoZSBNYWlsX21pbWVEZWNvZGUgY2xhc3MgaXMgdXNlZCB0byBkZWNvZGUgbWFpbC9taW1lIG1lc3NhZ2VzCiAqCiAqIFRoaXMgY2xhc3Mgd2lsbCBwYXJzZSBhIHJhdyBtaW1lIGVtYWlsIGFuZCByZXR1cm4KICogdGhlIHN0cnVjdHVyZS4gUmV0dXJuZWQgc3RydWN0dXJlIGlzIHNpbWlsYXIgdG8KICogdGhhdCByZXR1cm5lZCBieSBpbWFwX2ZldGNoc3RydWN0dXJlKCkuCiAqCiAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSU1QT1JUQU5UIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICogIHwgVXNhZ2Ugb2YgdGhpcyBjbGFzcyBjb21wYXJlZCB0byBuYXRpdmUgcGhwIGV4dGVuc2lvbnMgc3VjaCBhcyAgICAgICAgfAogKiAgfCBtYWlscGFyc2Ugb3IgaW1hcCwgaXMgc2xvdyBhbmQgbWF5IGJlIGZlYXR1cmUgZGVmaWNpZW50LiBJZiBhdmFpbGFibGV8CiAqICB8IHlvdSBhcmUgU1RST05HTFkgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBwaHAgZXh0ZW5zaW9ucy4gICAgICAgICAgICAgIHwKICogICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogKgogKiBDb21wYXRpYmxlIHdpdGggUEhQIHZlcnNpb25zIDQgYW5kIDUKICoKICogTElDRU5TRTogVGhpcyBMSUNFTlNFIGlzIGluIHRoZSBCU0QgbGljZW5zZSBzdHlsZS4KICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMsIFJpY2hhcmQgSGV5ZXMgPHJpY2hhcmRAcGhwZ3VydS5vcmc+CiAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA2LCBQRUFSIDxwZWFyLWdyb3VwQHBocC5uZXQ+CiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCiAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKICoKICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGF1dGhvcnMsIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyAKICogICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgCiAqICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgogKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCiAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQogKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCiAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCiAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwogKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgogKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQogKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCiAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICoKICogQGNhdGVnb3J5ICAgTWFpbAogKiBAcGFja2FnZSAgICBNYWlsX01pbWUKICogQGF1dGhvciAgICAgUmljaGFyZCBIZXllcyAgPHJpY2hhcmRAcGhwZ3VydS5vcmc+CiAqIEBhdXRob3IgICAgIEdlb3JnZSBTY2hsb3NzbmFnbGUgPGdlb3JnZUBvbW5pdGkuY29tPgogKiBAYXV0aG9yICAgICBDaXByaWFubyBHcm9lbmVuZGFsIDxjaXByaUBwaHAubmV0PgogKiBAYXV0aG9yICAgICBTZWFuIENvYXRlcyA8c2VhbkBwaHAubmV0PgogKiBAY29weXJpZ2h0ICAyMDAzLTIwMDYgUEVBUiA8cGVhci1ncm91cEBwaHAubmV0PgogKiBAbGljZW5zZSAgICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKiBAdmVyc2lvbiAgICBDVlM6ICRJZDogbWltZURlY29kZS5waHAgMzA1ODc1IDIwMTAtMTItMDEgMDc6MTc6MTBaIGFsYW5fayAkCiAqIEBsaW5rICAgICAgIGh0dHA6Ly9wZWFyLnBocC5uZXQvcGFja2FnZS9NYWlsX21pbWUKICovCgoKLyoqCiAqIFRoZSBNYWlsX21pbWVEZWNvZGUgY2xhc3MgaXMgdXNlZCB0byBkZWNvZGUgbWFpbC9taW1lIG1lc3NhZ2VzCiAqCiAqIFRoaXMgY2xhc3Mgd2lsbCBwYXJzZSBhIHJhdyBtaW1lIGVtYWlsIGFuZCByZXR1cm4gdGhlIHN0cnVjdHVyZS4KICogUmV0dXJuZWQgc3RydWN0dXJlIGlzIHNpbWlsYXIgdG8gdGhhdCByZXR1cm5lZCBieSBpbWFwX2ZldGNoc3RydWN0dXJlKCkuCiAqCiAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSU1QT1JUQU5UIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICogIHwgVXNhZ2Ugb2YgdGhpcyBjbGFzcyBjb21wYXJlZCB0byBuYXRpdmUgcGhwIGV4dGVuc2lvbnMgc3VjaCBhcyAgICAgICAgfAogKiAgfCBtYWlscGFyc2Ugb3IgaW1hcCwgaXMgc2xvdyBhbmQgbWF5IGJlIGZlYXR1cmUgZGVmaWNpZW50LiBJZiBhdmFpbGFibGV8CiAqICB8IHlvdSBhcmUgU1RST05HTFkgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBwaHAgZXh0ZW5zaW9ucy4gICAgICAgICAgICAgIHwKICogICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogKgogKiBAY2F0ZWdvcnkgICBNYWlsCiAqIEBwYWNrYWdlICAgIE1haWxfTWltZQogKiBAYXV0aG9yICAgICBSaWNoYXJkIEhleWVzICA8cmljaGFyZEBwaHBndXJ1Lm9yZz4KICogQGF1dGhvciAgICAgR2VvcmdlIFNjaGxvc3NuYWdsZSA8Z2VvcmdlQG9tbml0aS5jb20+CiAqIEBhdXRob3IgICAgIENpcHJpYW5vIEdyb2VuZW5kYWwgPGNpcHJpQHBocC5uZXQ+CiAqIEBhdXRob3IgICAgIFNlYW4gQ29hdGVzIDxzZWFuQHBocC5uZXQ+CiAqIEBjb3B5cmlnaHQgIDIwMDMtMjAwNiBQRUFSIDxwZWFyLWdyb3VwQHBocC5uZXQ+CiAqIEBsaWNlbnNlICAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwIEJTRCBMaWNlbnNlCiAqIEB2ZXJzaW9uICAgIFJlbGVhc2U6IEBwYWNrYWdlX3ZlcnNpb25ACiAqIEBsaW5rICAgICAgIGh0dHA6Ly9wZWFyLnBocC5uZXQvcGFja2FnZS9NYWlsX21pbWUKICovCgovKioKICogQ2xhc3MgTWFpbF9NaW1lRGVjb2RlCiAqIEFkYXB0ZWQgYW5kIG5hbWVzcGFjZWQgZm9yIENNU01TRXh0CiAqLwpuYW1lc3BhY2UgQ01TTVNFeHQ7CmNsYXNzIE1haWxfTWltZURlY29kZQp7CiAgICAvKioKICAgICAqIFRoZSByYXcgZW1haWwgdG8gZGVjb2RlCiAgICAgKgogICAgICogQHZhciAgICBzdHJpbmcKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBwcml2YXRlICRfaW5wdXQ7CgogICAgLyoqCiAgICAgKiBUaGUgaGVhZGVyIHBhcnQgb2YgdGhlIGlucHV0CiAgICAgKgogICAgICogQHZhciAgICBzdHJpbmcKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBwcml2YXRlICRfaGVhZGVyOwoKICAgIC8qKgogICAgICogVGhlIGJvZHkgcGFydCBvZiB0aGUgaW5wdXQKICAgICAqCiAgICAgKiBAdmFyICAgIHN0cmluZwogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIHByaXZhdGUgJF9ib2R5OwoKICAgIC8qKgogICAgICogSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGlzIGlzIHVzZWQgdG8gc3RvcmUgdGhlIG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdmFyICAgIHN0cmluZwogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIHByaXZhdGUgJF9lcnJvcjsKCiAgICAvKioKICAgICAqIEZsYWcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gaW5jbHVkZSBib2RpZXMgaW4gdGhlCiAgICAgKiByZXR1cm5lZCBvYmplY3QuCiAgICAgKgogICAgICogQHZhciAgICBib29sZWFuCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgcHJpdmF0ZSAkX2luY2x1ZGVfYm9kaWVzOwoKICAgIC8qKgogICAgICogRmxhZyB0byBkZXRlcm1pbmUgd2hldGhlciB0byBkZWNvZGUgYm9kaWVzCiAgICAgKgogICAgICogQHZhciAgICBib29sZWFuCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgcHJpdmF0ZSAkX2RlY29kZV9ib2RpZXM7CgogICAgLyoqCiAgICAgKiBGbGFnIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGRlY29kZSBoZWFkZXJzCiAgICAgKgogICAgICogQHZhciAgICBib29sZWFuCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgcHJpdmF0ZSAkX2RlY29kZV9oZWFkZXJzOwoKICAgIC8qKgogICAgICogRmxhZyB0byBkZXRlcm1pbmUgd2hldGhlciB0byBpbmNsdWRlIGF0dGFjaGVkIG1lc3NhZ2VzCiAgICAgKiBhcyBib2R5IGluIHRoZSByZXR1cm5lZCBvYmplY3QuIERlcGVuZHMgb24gJF9pbmNsdWRlX2JvZGllcwogICAgICoKICAgICAqIEB2YXIgICAgYm9vbGVhbgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIHByaXZhdGUgJF9yZmM4MjJfYm9kaWVzOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0b3IuCiAgICAgKgogICAgICogU2V0cyB1cCB0aGUgb2JqZWN0LCBpbml0aWFsaXNlIHRoZSB2YXJpYWJsZXMsIGFuZCBzcGxpdHMgYW5kCiAgICAgKiBzdG9yZXMgdGhlIGhlYWRlciBhbmQgYm9keSBvZiB0aGUgaW5wdXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyBUaGUgaW5wdXQgdG8gZGVjb2RlCiAgICAgKiBAYWNjZXNzIHB1YmxpYwogICAgICovCiAgICBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkaW5wdXQpCiAgICB7CiAgICAgICAgbGlzdCgkaGVhZGVyLCAkYm9keSkgICA9ICR0aGlzLT5fc3BsaXRCb2R5SGVhZGVyKCRpbnB1dCk7CgogICAgICAgICR0aGlzLT5faW5wdXQgICAgICAgICAgPSAkaW5wdXQ7CiAgICAgICAgJHRoaXMtPl9oZWFkZXIgICAgICAgICA9ICRoZWFkZXI7CiAgICAgICAgJHRoaXMtPl9ib2R5ICAgICAgICAgICA9ICRib2R5OwogICAgICAgICR0aGlzLT5fZGVjb2RlX2JvZGllcyAgPSBmYWxzZTsKICAgICAgICAkdGhpcy0+X2luY2x1ZGVfYm9kaWVzID0gdHJ1ZTsKICAgICAgICAkdGhpcy0+X3JmYzgyMl9ib2RpZXMgID0gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBCZWdpbnMgdGhlIGRlY29kaW5nIHByb2Nlc3MuIElmIGNhbGxlZCBzdGF0aWNhbGx5CiAgICAgKiBpdCB3aWxsIGNyZWF0ZSBhbiBvYmplY3QgYW5kIGNhbGwgdGhlIGRlY29kZSgpIG1ldGhvZAogICAgICogb2YgaXQuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5IEFuIGFycmF5IG9mIHZhcmlvdXMgcGFyYW1ldGVycyB0aGF0IGRldGVybWluZQogICAgICogICAgICAgICAgICAgIHZhcmlvdXMgdGhpbmdzOgogICAgICogICAgICAgICAgICAgIGluY2x1ZGVfYm9kaWVzIC0gV2hldGhlciB0byBpbmNsdWRlIHRoZSBib2R5IGluIHRoZSByZXR1cm5lZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LgogICAgICogICAgICAgICAgICAgIGRlY29kZV9ib2RpZXMgIC0gV2hldGhlciB0byBkZWNvZGUgdGhlIGJvZGllcwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHBhcnRzLiAoVHJhbnNmZXIgZW5jb2RpbmcpCiAgICAgKiAgICAgICAgICAgICAgZGVjb2RlX2hlYWRlcnMgLSBXaGV0aGVyIHRvIGRlY29kZSBoZWFkZXJzCiAgICAgKiAgICAgICAgICAgICAgaW5wdXQgICAgICAgICAgLSBJZiBjYWxsZWQgc3RhdGljYWxseSwgdGhpcyB3aWxsIGJlIHRyZWF0ZWQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHRoZSBpbnB1dAogICAgICogQHJldHVybiBvYmplY3QgRGVjb2RlZCByZXN1bHRzCiAgICAgKiBAYWNjZXNzIHB1YmxpYwogICAgICovCiAgICBmdW5jdGlvbiBkZWNvZGUoJHBhcmFtcyA9IG51bGwpCiAgICB7CiAgICAgICAgLy8gZGV0ZXJtaW5lIGlmIHRoaXMgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCBzdGF0aWNhbGx5CiAgICAgICAgJGlzU3RhdGljID0gZW1wdHkoJHRoaXMpIHx8ICFpc19hKCR0aGlzLCBfX0NMQVNTX18pOwoKICAgICAgICAvLyBIYXZlIHdlIGJlZW4gY2FsbGVkIHN0YXRpY2FsbHk/CgkvLyBJZiBzbywgY3JlYXRlIGFuIG9iamVjdCBhbmQgcGFzcyBkZXRhaWxzIHRvIHRoYXQuCiAgICAgICAgaWYgKCRpc1N0YXRpYyBBTkQgaXNzZXQoJHBhcmFtc1snaW5wdXQnXSkpIHsKCiAgICAgICAgICAgICRvYmogPSBuZXcgTWFpbF9taW1lRGVjb2RlKCRwYXJhbXNbJ2lucHV0J10pOwogICAgICAgICAgICAkc3RydWN0dXJlID0gJG9iai0+ZGVjb2RlKCRwYXJhbXMpOwoKICAgICAgICAvLyBDYWxsZWQgc3RhdGljYWxseSBidXQgbm8gaW5wdXQKICAgICAgICB9IGVsc2VpZiAoJGlzU3RhdGljKSB7CgkgIHRocm93IG5ldyBFeGNlcHRpb24oJ0NhbGxlZCBzdGF0aWNhbGx5IGFuZCBubyBpbnB1dCBnaXZlbicpOwoKICAgICAgICAvLyBDYWxsZWQgdmlhIGFuIG9iamVjdAogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5faW5jbHVkZV9ib2RpZXMgPSBpc3NldCgkcGFyYW1zWydpbmNsdWRlX2JvZGllcyddKSA/CgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbXNbJ2luY2x1ZGVfYm9kaWVzJ10gOiBmYWxzZTsKICAgICAgICAgICAgJHRoaXMtPl9kZWNvZGVfYm9kaWVzICA9IGlzc2V0KCRwYXJhbXNbJ2RlY29kZV9ib2RpZXMnXSkgPwoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1zWydkZWNvZGVfYm9kaWVzJ10gIDogZmFsc2U7CiAgICAgICAgICAgICR0aGlzLT5fZGVjb2RlX2hlYWRlcnMgPSBpc3NldCgkcGFyYW1zWydkZWNvZGVfaGVhZGVycyddKSA/CgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbXNbJ2RlY29kZV9oZWFkZXJzJ10gOiBmYWxzZTsKICAgICAgICAgICAgJHRoaXMtPl9yZmM4MjJfYm9kaWVzICA9IGlzc2V0KCRwYXJhbXNbJ3JmY184MjJib2RpZXMnXSkgPwoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1zWydyZmNfODIyYm9kaWVzJ10gIDogZmFsc2U7CgogICAgICAgICAgICAkc3RydWN0dXJlID0gJHRoaXMtPl9kZWNvZGUoJHRoaXMtPl9oZWFkZXIsICR0aGlzLT5fYm9keSk7CiAgICAgICAgICAgIGlmICgkc3RydWN0dXJlID09PSBmYWxzZSkgewoJICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigkdGhpcy0+X2Vycm9yKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRzdHJ1Y3R1cmU7CiAgICB9CgogICAgLyoqCiAgICAgKiBQZXJmb3JtcyB0aGUgZGVjb2RpbmcuIERlY29kZXMgdGhlIGJvZHkgc3RyaW5nIHBhc3NlZCB0byBpdAogICAgICogSWYgaXQgZmluZHMgY2VydGFpbiBjb250ZW50LXR5cGVzIGl0IHdpbGwgY2FsbCBpdHNlbGYgaW4gYQogICAgICogcmVjdXJzaXZlIGZhc2hpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIEhlYWRlciBzZWN0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nIEJvZHkgc2VjdGlvbgogICAgICogQHJldHVybiBvYmplY3QgUmVzdWx0cyBvZiBkZWNvZGluZyBwcm9jZXNzCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX2RlY29kZSgkaGVhZGVycywgJGJvZHksICRkZWZhdWx0X2N0eXBlID0gJ3RleHQvcGxhaW4nKQogICAgewogICAgICAgICRyZXR1cm4gPSBuZXcgc3RkQ2xhc3M7CiAgICAgICAgJHJldHVybi0+aGVhZGVycyA9IGFycmF5KCk7CiAgICAgICAgJGhlYWRlcnMgPSAkdGhpcy0+X3BhcnNlSGVhZGVycygkaGVhZGVycyk7CgogICAgICAgIGZvcmVhY2ggKCRoZWFkZXJzIGFzICR2YWx1ZSkgewogICAgICAgICAgICAkdmFsdWVbJ3ZhbHVlJ10gPSAkdGhpcy0+X2RlY29kZV9oZWFkZXJzID8gJHRoaXMtPl9kZWNvZGVIZWFkZXIoJHZhbHVlWyd2YWx1ZSddKSA6ICR2YWx1ZVsndmFsdWUnXTsKICAgICAgICAgICAgaWYgKGlzc2V0KCRyZXR1cm4tPmhlYWRlcnNbc3RydG9sb3dlcigkdmFsdWVbJ25hbWUnXSldKSBBTkQgIWlzX2FycmF5KCRyZXR1cm4tPmhlYWRlcnNbc3RydG9sb3dlcigkdmFsdWVbJ25hbWUnXSldKSkgewogICAgICAgICAgICAgICAgJHJldHVybi0+aGVhZGVyc1tzdHJ0b2xvd2VyKCR2YWx1ZVsnbmFtZSddKV0gICA9IGFycmF5KCRyZXR1cm4tPmhlYWRlcnNbc3RydG9sb3dlcigkdmFsdWVbJ25hbWUnXSldKTsKICAgICAgICAgICAgICAgICRyZXR1cm4tPmhlYWRlcnNbc3RydG9sb3dlcigkdmFsdWVbJ25hbWUnXSldW10gPSAkdmFsdWVbJ3ZhbHVlJ107CgogICAgICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJHJldHVybi0+aGVhZGVyc1tzdHJ0b2xvd2VyKCR2YWx1ZVsnbmFtZSddKV0pKSB7CiAgICAgICAgICAgICAgICAkcmV0dXJuLT5oZWFkZXJzW3N0cnRvbG93ZXIoJHZhbHVlWyduYW1lJ10pXVtdID0gJHZhbHVlWyd2YWx1ZSddOwoKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRyZXR1cm4tPmhlYWRlcnNbc3RydG9sb3dlcigkdmFsdWVbJ25hbWUnXSldID0gJHZhbHVlWyd2YWx1ZSddOwogICAgICAgICAgICB9CiAgICAgICAgfQoKCiAgICAgICAgZm9yZWFjaCAoJGhlYWRlcnMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgJGhlYWRlcnNbJGtleV1bJ25hbWUnXSA9IHN0cnRvbG93ZXIoJGhlYWRlcnNbJGtleV1bJ25hbWUnXSk7CiAgICAgICAgICAgIHN3aXRjaCAoJGhlYWRlcnNbJGtleV1bJ25hbWUnXSkgewoKICAgICAgICAgICAgICAgIGNhc2UgJ2NvbnRlbnQtdHlwZSc6CiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnRfdHlwZSA9ICR0aGlzLT5fcGFyc2VIZWFkZXJWYWx1ZSgkaGVhZGVyc1ska2V5XVsndmFsdWUnXSk7CgogICAgICAgICAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCcvKFswLTlhLXorLi1dKylcLyhbMC05YS16Ky4tXSspL2knLCAkY29udGVudF90eXBlWyd2YWx1ZSddLCAkcmVncykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHJldHVybi0+Y3R5cGVfcHJpbWFyeSAgID0gJHJlZ3NbMV07CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXR1cm4tPmN0eXBlX3NlY29uZGFyeSA9ICRyZWdzWzJdOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRjb250ZW50X3R5cGVbJ290aGVyJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJGNvbnRlbnRfdHlwZVsnb3RoZXInXSBhcyAkcF9uYW1lID0+ICRwX3ZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV0dXJuLT5jdHlwZV9wYXJhbWV0ZXJzWyRwX25hbWVdID0gJHBfdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAnY29udGVudC1kaXNwb3NpdGlvbic6CiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnRfZGlzcG9zaXRpb24gPSAkdGhpcy0+X3BhcnNlSGVhZGVyVmFsdWUoJGhlYWRlcnNbJGtleV1bJ3ZhbHVlJ10pOwogICAgICAgICAgICAgICAgICAgICRyZXR1cm4tPmRpc3Bvc2l0aW9uICAgPSAkY29udGVudF9kaXNwb3NpdGlvblsndmFsdWUnXTsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGNvbnRlbnRfZGlzcG9zaXRpb25bJ290aGVyJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJGNvbnRlbnRfZGlzcG9zaXRpb25bJ290aGVyJ10gYXMgJHBfbmFtZSA9PiAkcF92YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJldHVybi0+ZF9wYXJhbWV0ZXJzWyRwX25hbWVdID0gJHBfdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAnY29udGVudC10cmFuc2Zlci1lbmNvZGluZyc6CiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnRfdHJhbnNmZXJfZW5jb2RpbmcgPSAkdGhpcy0+X3BhcnNlSGVhZGVyVmFsdWUoJGhlYWRlcnNbJGtleV1bJ3ZhbHVlJ10pOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJGNvbnRlbnRfdHlwZSkpIHsKICAgICAgICAgICAgc3dpdGNoIChzdHJ0b2xvd2VyKCRjb250ZW50X3R5cGVbJ3ZhbHVlJ10pKSB7CiAgICAgICAgICAgICAgICBjYXNlICd0ZXh0L3BsYWluJzoKICAgICAgICAgICAgICAgICAgICAkZW5jb2RpbmcgPSBpc3NldCgkY29udGVudF90cmFuc2Zlcl9lbmNvZGluZykgPyAkY29udGVudF90cmFuc2Zlcl9lbmNvZGluZ1sndmFsdWUnXSA6ICc3Yml0JzsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X2luY2x1ZGVfYm9kaWVzID8gJHJldHVybi0+Ym9keSA9ICgkdGhpcy0+X2RlY29kZV9ib2RpZXMgPyAkdGhpcy0+X2RlY29kZUJvZHkoJGJvZHksICRlbmNvZGluZykgOiAkYm9keSkgOiBudWxsOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgJ3RleHQvaHRtbCc6CiAgICAgICAgICAgICAgICAgICAgJGVuY29kaW5nID0gaXNzZXQoJGNvbnRlbnRfdHJhbnNmZXJfZW5jb2RpbmcpID8gJGNvbnRlbnRfdHJhbnNmZXJfZW5jb2RpbmdbJ3ZhbHVlJ10gOiAnN2JpdCc7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9pbmNsdWRlX2JvZGllcyA/ICRyZXR1cm4tPmJvZHkgPSAoJHRoaXMtPl9kZWNvZGVfYm9kaWVzID8gJHRoaXMtPl9kZWNvZGVCb2R5KCRib2R5LCAkZW5jb2RpbmcpIDogJGJvZHkpIDogbnVsbDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlICdtdWx0aXBhcnQvcGFyYWxsZWwnOgogICAgICAgICAgICAgICAgY2FzZSAnbXVsdGlwYXJ0L2FwcGxlZG91YmxlJzogLy8gQXBwbGVkb3VibGUgbWFpbAogICAgICAgICAgICAgICAgY2FzZSAnbXVsdGlwYXJ0L3JlcG9ydCc6IC8vIFJGQzE4OTIKICAgICAgICAgICAgICAgIGNhc2UgJ211bHRpcGFydC9zaWduZWQnOiAvLyBQR1AKICAgICAgICAgICAgICAgIGNhc2UgJ211bHRpcGFydC9kaWdlc3QnOgogICAgICAgICAgICAgICAgY2FzZSAnbXVsdGlwYXJ0L2FsdGVybmF0aXZlJzoKICAgICAgICAgICAgICAgIGNhc2UgJ211bHRpcGFydC9yZWxhdGVkJzoKICAgICAgICAgICAgICAgIGNhc2UgJ211bHRpcGFydC9taXhlZCc6CiAgICAgICAgICAgICAgICBjYXNlICdhcHBsaWNhdGlvbi92bmQud2FwLm11bHRpcGFydC5yZWxhdGVkJzoKICAgICAgICAgICAgICAgICAgICBpZighaXNzZXQoJGNvbnRlbnRfdHlwZVsnb3RoZXInXVsnYm91bmRhcnknXSkpewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X2Vycm9yID0gJ05vIGJvdW5kYXJ5IGZvdW5kIGZvciAnIC4gJGNvbnRlbnRfdHlwZVsndmFsdWUnXSAuICcgcGFydCc7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRkZWZhdWx0X2N0eXBlID0gKHN0cnRvbG93ZXIoJGNvbnRlbnRfdHlwZVsndmFsdWUnXSkgPT09ICdtdWx0aXBhcnQvZGlnZXN0JykgPyAnbWVzc2FnZS9yZmM4MjInIDogJ3RleHQvcGxhaW4nOwoKICAgICAgICAgICAgICAgICAgICAkcGFydHMgPSAkdGhpcy0+X2JvdW5kYXJ5U3BsaXQoJGJvZHksICRjb250ZW50X3R5cGVbJ290aGVyJ11bJ2JvdW5kYXJ5J10pOwogICAgICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IGNvdW50KCRwYXJ0cyk7ICRpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCgkcGFydF9oZWFkZXIsICRwYXJ0X2JvZHkpID0gJHRoaXMtPl9zcGxpdEJvZHlIZWFkZXIoJHBhcnRzWyRpXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0ID0gJHRoaXMtPl9kZWNvZGUoJHBhcnRfaGVhZGVyLCAkcGFydF9ib2R5LCAkZGVmYXVsdF9jdHlwZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRwYXJ0ID09PSBmYWxzZSkKCQkJICB0aHJvdyBuZXcgRXhjZXB0aW9uKCR0aGlzLT5fZXJyb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAkcmV0dXJuLT5wYXJ0c1tdID0gJHBhcnQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgJ21lc3NhZ2UvcmZjODIyJzoKCQkJCQlpZiAoJHRoaXMtPl9yZmM4MjJfYm9kaWVzKSB7CgkJCQkJCSRlbmNvZGluZyA9IGlzc2V0KCRjb250ZW50X3RyYW5zZmVyX2VuY29kaW5nKSA/ICRjb250ZW50X3RyYW5zZmVyX2VuY29kaW5nWyd2YWx1ZSddIDogJzdiaXQnOwoJCQkJCQkkcmV0dXJuLT5ib2R5ID0gKCR0aGlzLT5fZGVjb2RlX2JvZGllcyA/ICR0aGlzLT5fZGVjb2RlQm9keSgkYm9keSwgJGVuY29kaW5nKSA6ICRib2R5KTsKCQkJCQl9CiAgICAgICAgICAgICAgICAgICAgJG9iaiA9IG5ldyBNYWlsX21pbWVEZWNvZGUoJGJvZHkpOwogICAgICAgICAgICAgICAgICAgICRyZXR1cm4tPnBhcnRzW10gPSAkb2JqLT5kZWNvZGUoYXJyYXkoJ2luY2x1ZGVfYm9kaWVzJyA9PiAkdGhpcy0+X2luY2x1ZGVfYm9kaWVzLAoJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlY29kZV9ib2RpZXMnICA9PiAkdGhpcy0+X2RlY29kZV9ib2RpZXMsCgkJCQkJCQkJCQkJCQkJICAnZGVjb2RlX2hlYWRlcnMnID0+ICR0aGlzLT5fZGVjb2RlX2hlYWRlcnMpKTsKICAgICAgICAgICAgICAgICAgICB1bnNldCgkb2JqKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIGlmKCFpc3NldCgkY29udGVudF90cmFuc2Zlcl9lbmNvZGluZ1sndmFsdWUnXSkpCiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50X3RyYW5zZmVyX2VuY29kaW5nWyd2YWx1ZSddID0gJzdiaXQnOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5faW5jbHVkZV9ib2RpZXMgPyAkcmV0dXJuLT5ib2R5ID0gKCR0aGlzLT5fZGVjb2RlX2JvZGllcyA/ICR0aGlzLT5fZGVjb2RlQm9keSgkYm9keSwgJGNvbnRlbnRfdHJhbnNmZXJfZW5jb2RpbmdbJ3ZhbHVlJ10pIDogJGJvZHkpIDogbnVsbDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkY3R5cGUgPSBleHBsb2RlKCcvJywgJGRlZmF1bHRfY3R5cGUpOwogICAgICAgICAgICAkcmV0dXJuLT5jdHlwZV9wcmltYXJ5ICAgPSAkY3R5cGVbMF07CiAgICAgICAgICAgICRyZXR1cm4tPmN0eXBlX3NlY29uZGFyeSA9ICRjdHlwZVsxXTsKICAgICAgICAgICAgJHRoaXMtPl9pbmNsdWRlX2JvZGllcyA/ICRyZXR1cm4tPmJvZHkgPSAoJHRoaXMtPl9kZWNvZGVfYm9kaWVzID8gJHRoaXMtPl9kZWNvZGVCb2R5KCRib2R5KSA6ICRib2R5KSA6IG51bGw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJldHVybjsKICAgIH0KCiAgICAvKioKICAgICAqIEdpdmVuIHRoZSBvdXRwdXQgb2YgdGhlIGFib3ZlIGZ1bmN0aW9uLCB0aGlzIHdpbGwgcmV0dXJuIGFuCiAgICAgKiBhcnJheSBvZiByZWZlcmVuY2VzIHRvIHRoZSBwYXJ0cywgaW5kZXhlZCBieSBtaW1lIG51bWJlci4KICAgICAqCiAgICAgKiBAcGFyYW0gIG9iamVjdCAkc3RydWN0dXJlICAgVGhlIHN0cnVjdHVyZSB0byBnbyB0aHJvdWdoCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkbWltZV9udW1iZXIgSW50ZXJuYWwgdXNlIG9ubHkuCiAgICAgKiBAcmV0dXJuIGFycmF5ICAgICAgICAgICAgICAgTWltZSBudW1iZXJzCiAgICAgKi8KICAgIGZ1bmN0aW9uICZnZXRNaW1lTnVtYmVycygmJHN0cnVjdHVyZSwgJG5vX3JlZnMgPSBmYWxzZSwgJG1pbWVfbnVtYmVyID0gJycsICRwcmVwZW5kID0gJycpCiAgICB7CiAgICAgICAgJHJldHVybiA9IGFycmF5KCk7CiAgICAgICAgaWYgKCFlbXB0eSgkc3RydWN0dXJlLT5wYXJ0cykpIHsKICAgICAgICAgICAgaWYgKCRtaW1lX251bWJlciAhPSAnJykgewogICAgICAgICAgICAgICAgJHN0cnVjdHVyZS0+bWltZV9pZCA9ICRwcmVwZW5kIC4gJG1pbWVfbnVtYmVyOwogICAgICAgICAgICAgICAgJHJldHVyblskcHJlcGVuZCAuICRtaW1lX251bWJlcl0gPSAmJHN0cnVjdHVyZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkc3RydWN0dXJlLT5wYXJ0cyk7ICRpKyspIHsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkc3RydWN0dXJlLT5oZWFkZXJzWydjb250ZW50LXR5cGUnXSkgQU5EIHN1YnN0cihzdHJ0b2xvd2VyKCRzdHJ1Y3R1cmUtPmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKSwgMCwgOCkgPT0gJ21lc3NhZ2UvJykgewogICAgICAgICAgICAgICAgICAgICRwcmVwZW5kICAgICAgPSAkcHJlcGVuZCAuICRtaW1lX251bWJlciAuICcuJzsKICAgICAgICAgICAgICAgICAgICAkX21pbWVfbnVtYmVyID0gJyc7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRfbWltZV9udW1iZXIgPSAoJG1pbWVfbnVtYmVyID09ICcnID8gJGkgKyAxIDogc3ByaW50ZignJXMuJXMnLCAkbWltZV9udW1iZXIsICRpICsgMSkpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRhcnIgPSAmTWFpbF9taW1lRGVjb2RlOjpnZXRNaW1lTnVtYmVycygkc3RydWN0dXJlLT5wYXJ0c1skaV0sICRub19yZWZzLCAkX21pbWVfbnVtYmVyLCAkcHJlcGVuZCk7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkYXJyIGFzICRrZXkgPT4gJHZhbCkgewogICAgICAgICAgICAgICAgICAgICRub19yZWZzID8gJHJldHVyblska2V5XSA9ICcnIDogJHJldHVyblska2V5XSA9ICYkYXJyWyRrZXldOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCRtaW1lX251bWJlciA9PSAnJykgewogICAgICAgICAgICAgICAgJG1pbWVfbnVtYmVyID0gJzEnOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRzdHJ1Y3R1cmUtPm1pbWVfaWQgPSAkcHJlcGVuZCAuICRtaW1lX251bWJlcjsKICAgICAgICAgICAgJG5vX3JlZnMgPyAkcmV0dXJuWyRwcmVwZW5kIC4gJG1pbWVfbnVtYmVyXSA9ICcnIDogJHJldHVyblskcHJlcGVuZCAuICRtaW1lX251bWJlcl0gPSAmJHN0cnVjdHVyZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuICRyZXR1cm47CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhIHN0cmluZyBjb250YWluaW5nIGEgaGVhZGVyIGFuZCBib2R5CiAgICAgKiBzZWN0aW9uLCB0aGlzIGZ1bmN0aW9uIHdpbGwgc3BsaXQgdGhlbSAoYXQgdGhlIGZpcnN0CiAgICAgKiBibGFuayBsaW5lKSBhbmQgcmV0dXJuIHRoZW0uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyBJbnB1dCB0byBzcGxpdCBhcGFydAogICAgICogQHJldHVybiBhcnJheSBDb250YWlucyBoZWFkZXIgYW5kIGJvZHkgc2VjdGlvbgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9zcGxpdEJvZHlIZWFkZXIoJGlucHV0KQogICAgewogICAgICAgIGlmIChwcmVnX21hdGNoKCIvXiguKj8pXHI/XG5ccj9cbiguKikvcyIsICRpbnB1dCwgJG1hdGNoKSkgewogICAgICAgICAgICByZXR1cm4gYXJyYXkoJG1hdGNoWzFdLCAkbWF0Y2hbMl0pOwogICAgICAgIH0KICAgICAgICAvLyBidWcgIzE3MzI1IC0gZW1wdHkgYm9kaWVzIGFyZSBhbGxvd2VkLiAtIHdlIGp1c3QgY2hlY2sgdGhhdCBhdCBsZWFzdCBvbmUgbGluZSAKICAgICAgICAvLyBvZiBoZWFkZXJzIGV4aXN0Li4KICAgICAgICBpZiAoY291bnQoZXhwbG9kZSgiXG4iLCRpbnB1dCkpKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgkaW5wdXQsICcnKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPl9lcnJvciA9ICdDb3VsZCBub3Qgc3BsaXQgaGVhZGVyIGFuZCBib2R5JzsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBQYXJzZSBoZWFkZXJzIGdpdmVuIGluICRpbnB1dCBhbmQgcmV0dXJuCiAgICAgKiBhcyBhc3NvYyBhcnJheS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIEhlYWRlcnMgdG8gcGFyc2UKICAgICAqIEByZXR1cm4gYXJyYXkgQ29udGFpbnMgcGFyc2VkIGhlYWRlcnMKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfcGFyc2VIZWFkZXJzKCRpbnB1dCkKICAgIHsKCiAgICAgICAgaWYgKCRpbnB1dCAhPT0gJycpIHsKICAgICAgICAgICAgLy8gVW5mb2xkIHRoZSBpbnB1dAogICAgICAgICAgICAkaW5wdXQgICA9IHByZWdfcmVwbGFjZSgiL1xyP1xuLyIsICJcclxuIiwgJGlucHV0KTsKICAgICAgICAgICAgLy8jNzA2NSAtIHdyYXBwaW5nLi4gd2l0aCBlbmNvZGVkIHN0dWZmLi4gLSBwcm9iYWJseSBub3QgbmVlZGVkLAogICAgICAgICAgICAvLyB3cmFwcGluZyBzcGFjZSBzaG91bGQgb25seSBnZXQgcmVtb3ZlZCBpZiB0aGUgdHJhaWxpbmcgaXRlbSBvbiBwcmV2aW91cyBsaW5lIGlzIGEgCiAgICAgICAgICAgIC8vIGVuY29kZWQgY2hhcmFjdGVyCiAgICAgICAgICAgICRpbnB1dCAgID0gcHJlZ19yZXBsYWNlKCIvPVxyXG4oXHR8ICkrLyIsICc9JywgJGlucHV0KTsKICAgICAgICAgICAgJGlucHV0ICAgPSBwcmVnX3JlcGxhY2UoIi9cclxuKFx0fCApKy8iLCAnICcsICRpbnB1dCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAkaGVhZGVycyA9IGV4cGxvZGUoIlxyXG4iLCB0cmltKCRpbnB1dCkpOwoKICAgICAgICAgICAgZm9yZWFjaCAoJGhlYWRlcnMgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgICAgICAkaGRyX25hbWUgPSBzdWJzdHIoJHZhbHVlLCAwLCAkcG9zID0gc3RycG9zKCR2YWx1ZSwgJzonKSk7CiAgICAgICAgICAgICAgICAkaGRyX3ZhbHVlID0gc3Vic3RyKCR2YWx1ZSwgJHBvcysxKTsKICAgICAgICAgICAgICAgIGlmKCRoZHJfdmFsdWVbMF0gPT0gJyAnKQogICAgICAgICAgICAgICAgICAgICRoZHJfdmFsdWUgPSBzdWJzdHIoJGhkcl92YWx1ZSwgMSk7CgogICAgICAgICAgICAgICAgJHJldHVybltdID0gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmFtZScgID0+ICRoZHJfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZScgPT4gICRoZHJfdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRyZXR1cm4gPSBhcnJheSgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXR1cm47CiAgICB9CgogICAgLyoqCiAgICAgKiBGdW5jdGlvbiB0byBwYXJzZSBhIGhlYWRlciB2YWx1ZSwKICAgICAqIGV4dHJhY3QgZmlyc3QgcGFydCwgYW5kIGFueSBzZWNvbmRhcnkKICAgICAqIHBhcnRzIChhZnRlciA7KSBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBhcwogICAgICogcm9idXN0IGFzIGl0IGNvdWxkIGJlLiBFZy4gaGVhZGVyIGNvbW1lbnRzCiAgICAgKiBpbiB0aGUgd3JvbmcgcGxhY2Ugd2lsbCBwcm9iYWJseSBicmVhayBpdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIEhlYWRlciB2YWx1ZSB0byBwYXJzZQogICAgICogQHJldHVybiBhcnJheSBDb250YWlucyBwYXJzZWQgcmVzdWx0CiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX3BhcnNlSGVhZGVyVmFsdWUoJGlucHV0KQogICAgewoKICAgICAgICBpZiAoKCRwb3MgPSBzdHJwb3MoJGlucHV0LCAnOycpKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgJGlucHV0ID0gJHRoaXMtPl9kZWNvZGVfaGVhZGVycyA/ICR0aGlzLT5fZGVjb2RlSGVhZGVyKCRpbnB1dCkgOiAkaW5wdXQ7CiAgICAgICAgICAgICRyZXR1cm5bJ3ZhbHVlJ10gPSB0cmltKCRpbnB1dCk7CiAgICAgICAgICAgIHJldHVybiAkcmV0dXJuOwogICAgICAgIH0KCgoKICAgICAgICAkdmFsdWUgPSBzdWJzdHIoJGlucHV0LCAwLCAkcG9zKTsKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+X2RlY29kZV9oZWFkZXJzID8gJHRoaXMtPl9kZWNvZGVIZWFkZXIoJHZhbHVlKSA6ICR2YWx1ZTsKICAgICAgICAkcmV0dXJuWyd2YWx1ZSddID0gdHJpbSgkdmFsdWUpOwogICAgICAgICRpbnB1dCA9IHRyaW0oc3Vic3RyKCRpbnB1dCwgJHBvcysxKSk7CgogICAgICAgIGlmICghc3RybGVuKCRpbnB1dCkgPiAwKSB7CiAgICAgICAgICAgIHJldHVybiAkcmV0dXJuOwogICAgICAgIH0KICAgICAgICAvLyBhdCB0aGlzIHBvaW50IGlucHV0IGNvbnRhaW5zIHh4eHg9Ii4uLi4uIjt6enp6PSIuLi4uIgogICAgICAgIC8vIHNpbmNlIHdlIGFyZSBkZWFsaW5nIHdpdGggcXVvdGVkIHN0cmluZ3MsIHdlIG5lZWQgdG8gaGFuZGxlIHRoaXMgcHJvcGVybHkuLgogICAgICAgICRpID0gMDsKICAgICAgICAkbCA9IHN0cmxlbigkaW5wdXQpOwogICAgICAgICRrZXkgPSAnJzsKICAgICAgICAkdmFsID0gZmFsc2U7IC8vIG91ciBzdHJpbmcgLSBpbmNsdWRpbmcgcXVvdGVzLi4KICAgICAgICAkcSA9IGZhbHNlOyAvLyBpbiBxdW90ZS4uCiAgICAgICAgJGxxID0gJyc7IC8vIGxhc3QgcXVvdGUuLgoKICAgICAgICB3aGlsZSAoJGkgPCAkbCkgewogICAgICAgICAgICAKICAgICAgICAgICAgJGMgPSAkaW5wdXRbJGldOwoKICAgICAgICAgICAgJGVzY2FwZWQgPSBmYWxzZTsKICAgICAgICAgICAgaWYgKCRjID09ICdcXCcpIHsKICAgICAgICAgICAgICAgICRpKys7CiAgICAgICAgICAgICAgICBpZiAoJGkgPT0gJGwtMSkgeyAvLyBlbmQgb2Ygc3RyaW5nLgogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGVzY2FwZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgJGMgPSAkaW5wdXRbJGldOwogICAgICAgICAgICB9ICAgICAgICAgICAgCgoKICAgICAgICAgICAgLy8gc3RhdGUgLSBpbiBrZXkuLgogICAgICAgICAgICBpZiAoJHZhbCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIGlmICghJGVzY2FwZWQgJiYgJGMgPT0gJz0nKSB7CiAgICAgICAgICAgICAgICAgICAgJHZhbCA9ICcnOwogICAgICAgICAgICAgICAgICAgICRrZXkgPSB0cmltKCRrZXkpOwogICAgICAgICAgICAgICAgICAgICRpKys7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoISRlc2NhcGVkICYmICRjID09ICc7JykgewogICAgICAgICAgICAgICAgICAgIGlmICgka2V5KSB7IC8vIGEga2V5IHdpdGhvdXQgYSB2YWx1ZS4uCiAgICAgICAgICAgICAgICAgICAgICAgICRrZXk9IHRyaW0oJGtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXR1cm5bJ290aGVyJ11bJGtleV0gPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgJHJldHVyblsnb3RoZXInXVtzdHJ0b2xvd2VyKCRrZXkpXSA9ICcnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAka2V5ID0gJyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAka2V5IC49ICRjOwogICAgICAgICAgICAgICAgJGkrKzsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAvLyBzdGF0ZSAtIGluIHZhbHVlLi4gKGFzICR2YWwgaXMgc2V0Li4pCgogICAgICAgICAgICBpZiAoJHEgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAvLyBub3QgaW4gcXVvdGUgeWV0LgogICAgICAgICAgICAgICAgaWYgKCghc3RybGVuKCR2YWwpIHx8ICRscSAhPT0gZmFsc2UpICYmICRjID09ICcgJyB8fCAgJGMgPT0gIlx0IikgewogICAgICAgICAgICAgICAgICAgICRpKys7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIHNraXAgbGVhZGluZyBzcGFjZXMgYWZ0ZXIgJz0nIG9yIGFmdGVyICciJwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCEkZXNjYXBlZCAmJiAoJGMgPT0gJyInIHx8ICRjID09ICInIikpIHsKICAgICAgICAgICAgICAgICAgICAvLyBzdGFydCBxdW90ZWQgYXJlYS4uCiAgICAgICAgICAgICAgICAgICAgJHEgPSAkYzsKICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGVvcnkgc2hvdWxkIG5vdCBoYXBwZW4gcmF3IHRleHQgaW4gdmFsdWUgcGFydC4uCiAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHdlIHdpbGwgaGFuZGxlIGl0IGFzIGEgbWVyZ2VkIHBhcnQgb2YgdGhlIHN0cmluZy4uCiAgICAgICAgICAgICAgICAgICAgJHZhbCA9ICFzdHJsZW4odHJpbSgkdmFsKSkgPyAnJyA6IHRyaW0oJHZhbCk7CiAgICAgICAgICAgICAgICAgICAgJGkrKzsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIGdvdCBlbmQuLi4uCiAgICAgICAgICAgICAgICBpZiAoISRlc2NhcGVkICYmICRjID09ICc7JykgewoKICAgICAgICAgICAgICAgICAgICAkdmFsID0gdHJpbSgkdmFsKTsKICAgICAgICAgICAgICAgICAgICAkYWRkZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnL1wqWzAtOV0rJC8nLCAka2V5KSkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBleHRlbmRlZCBhYWEqMD0uLi47YWFhKjE9Li4uLiBjb2RlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IGFzc3VtZXMgdGhlIHBpZWNlcyBhcnJpdmUgaW4gb3JkZXIsIGFuZCBhcmUgdmFsaWQuLi4KICAgICAgICAgICAgICAgICAgICAgICAgJGtleSA9IHByZWdfcmVwbGFjZSgnL1wqWzAtOV0rJC8nLCAnJywgJGtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkcmV0dXJuWydvdGhlciddWyRrZXldKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJldHVyblsnb3RoZXInXVska2V5XSAuPSAkdmFsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnRvbG93ZXIoJGtleSkgIT0gJGtleSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXR1cm5bJ290aGVyJ11bc3RydG9sb3dlcigka2V5KV0gLj0gJHZhbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhZGRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGludWUgYW5kIHVzZSBzdGFuZGFyZCBzZXR0ZXJzLi4KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCEkYWRkZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHJldHVyblsnb3RoZXInXVska2V5XSA9ICR2YWw7CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXR1cm5bJ290aGVyJ11bc3RydG9sb3dlcigka2V5KV0gPSAkdmFsOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkdmFsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgJGtleSA9ICcnOwogICAgICAgICAgICAgICAgICAgICRscSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICRpKys7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHZhbCAuPSAkYzsKICAgICAgICAgICAgICAgICRpKys7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gc3RhdGUgLSBpbiBxdW90ZS4uCiAgICAgICAgICAgIGlmICghJGVzY2FwZWQgJiYgJGMgPT0gJHEpIHsgIC8vIHBvdGVudGlhbCBleGl0IHN0YXRlLi4KCiAgICAgICAgICAgICAgICAvLyBlbmQgb2YgcXVvdGVkIHN0cmluZy4uCiAgICAgICAgICAgICAgICAkbHEgPSAkcTsKICAgICAgICAgICAgICAgICRxID0gZmFsc2U7CiAgICAgICAgICAgICAgICAkaSsrOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAvLyBub3JtYWwgY2hhciBpbnNpZGUgb2YgcXVvdGVkIHN0cmluZy4uCiAgICAgICAgICAgICR2YWwuPSAkYzsKICAgICAgICAgICAgJGkrKzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gZG8gd2UgaGF2ZSBhbnl0aGluZyBsZWZ0Li4KICAgICAgICBpZiAoc3RybGVuKHRyaW0oJGtleSkpIHx8ICR2YWwgIT09IGZhbHNlKSB7CiAgICAgICAgICAgCiAgICAgICAgICAgICR2YWwgPSB0cmltKCR2YWwpOwogICAgICAgICAgICAkYWRkZWQgPSBmYWxzZTsKICAgICAgICAgICAgaWYgKCR2YWwgIT09IGZhbHNlICYmIHByZWdfbWF0Y2goJy9cKlswLTldKyQvJywgJGtleSkpIHsKICAgICAgICAgICAgICAgIC8vIG5vIGR1cGVzIGR1ZSB0byBvdXIgY3JhenkgcmVnZXhwLgogICAgICAgICAgICAgICAgJGtleSA9IHByZWdfcmVwbGFjZSgnL1wqWzAtOV0rJC8nLCAnJywgJGtleSk7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHJldHVyblsnb3RoZXInXVska2V5XSkpIHsKICAgICAgICAgICAgICAgICAgICAkcmV0dXJuWydvdGhlciddWyRrZXldIC49ICR2YWw7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnRvbG93ZXIoJGtleSkgIT0gJGtleSkgewogICAgICAgICAgICAgICAgICAgICAgICAkcmV0dXJuWydvdGhlciddW3N0cnRvbG93ZXIoJGtleSldIC49ICR2YWw7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRhZGRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBjb250aW51ZSBhbmQgdXNlIHN0YW5kYXJkIHNldHRlcnMuLgogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghJGFkZGVkKSB7CiAgICAgICAgICAgICAgICAkcmV0dXJuWydvdGhlciddWyRrZXldID0gJHZhbDsKICAgICAgICAgICAgICAgICRyZXR1cm5bJ290aGVyJ11bc3RydG9sb3dlcigka2V5KV0gPSAkdmFsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIGRlY29kZSB2YWx1ZXMuCiAgICAgICAgZm9yZWFjaCgkcmV0dXJuWydvdGhlciddIGFzICRrZXkgPT4kdmFsKSB7CiAgICAgICAgICAgICRyZXR1cm5bJ290aGVyJ11bJGtleV0gPSAkdGhpcy0+X2RlY29kZV9oZWFkZXJzID8gJHRoaXMtPl9kZWNvZGVIZWFkZXIoJHZhbCkgOiAkdmFsOwogICAgICAgIH0KICAgICAgIC8vcHJpbnRfcigkcmV0dXJuKTsKICAgICAgICByZXR1cm4gJHJldHVybjsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgZnVuY3Rpb24gc3BsaXRzIHRoZSBpbnB1dCBiYXNlZAogICAgICogb24gdGhlIGdpdmVuIGJvdW5kYXJ5CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyBJbnB1dCB0byBwYXJzZQogICAgICogQHJldHVybiBhcnJheSBDb250YWlucyBhcnJheSBvZiByZXN1bHRpbmcgbWltZSBwYXJ0cwogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9ib3VuZGFyeVNwbGl0KCRpbnB1dCwgJGJvdW5kYXJ5KQogICAgewogICAgICAgICRwYXJ0cyA9IGFycmF5KCk7CgogICAgICAgICRic19wb3NzaWJsZSA9IHN1YnN0cigkYm91bmRhcnksIDIsIC0yKTsKICAgICAgICAkYnNfY2hlY2sgPSAnXCInIC4gJGJzX3Bvc3NpYmxlIC4gJ1wiJzsKCiAgICAgICAgaWYgKCRib3VuZGFyeSA9PSAkYnNfY2hlY2spIHsKICAgICAgICAgICAgJGJvdW5kYXJ5ID0gJGJzX3Bvc3NpYmxlOwogICAgICAgIH0KICAgICAgICAkdG1wID0gcHJlZ19zcGxpdCgiLy0tIi5wcmVnX3F1b3RlKCRib3VuZGFyeSwgJy8nKS4iKCg/PVxzKXwtLSkvIiwgJGlucHV0KTsKCiAgICAgICAgJGxlbiA9IGNvdW50KCR0bXApIC0xOwogICAgICAgIGZvciAoJGkgPSAxOyAkaSA8ICRsZW47ICRpKyspIHsKICAgICAgICAgICAgaWYgKHN0cmxlbih0cmltKCR0bXBbJGldKSkpIHsKICAgICAgICAgICAgICAgICRwYXJ0c1tdID0gJHRtcFskaV07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gYWRkIHRoZSBsYXN0IHBhcnQgb24gaWYgaXQgZG9lcyBub3QgZW5kIHdpdGggdGhlICdjbG9zaW5nIGluZGljYXRvcicKICAgICAgICBpZiAoIWVtcHR5KCR0bXBbJGxlbl0pICYmIHN0cmxlbih0cmltKCR0bXBbJGxlbl0pKSAmJiAkdG1wWyRsZW5dWzBdICE9ICctJykgewogICAgICAgICAgICAkcGFydHNbXSA9ICR0bXBbJGxlbl07CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcGFydHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhIGhlYWRlciwgdGhpcyBmdW5jdGlvbiB3aWxsIGRlY29kZSBpdAogICAgICogYWNjb3JkaW5nIHRvIFJGQzIwNDcuIFByb2JhYmx5IG5vdCAqZXhhY3RseSoKICAgICAqIGNvbmZvcm1hbnQsIGJ1dCBpdCBkb2VzIHBhc3MgYWxsIHRoZSBnaXZlbgogICAgICogZXhhbXBsZXMgKGluIFJGQzIwNDcpLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgSW5wdXQgaGVhZGVyIHZhbHVlIHRvIGRlY29kZQogICAgICogQHJldHVybiBzdHJpbmcgRGVjb2RlZCBoZWFkZXIgdmFsdWUKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfZGVjb2RlSGVhZGVyKCRpbnB1dCkKICAgIHsKICAgICAgICAvLyBSZW1vdmUgd2hpdGUgc3BhY2UgYmV0d2VlbiBlbmNvZGVkLXdvcmRzCiAgICAgICAgJGlucHV0ID0gcHJlZ19yZXBsYWNlKCcvKD1cP1teP10rXD8ocXxiKVw/W14/XSpcPz0pKFxzKSs9XD8vaScsICdcMT0/JywgJGlucHV0KTsKCiAgICAgICAgLy8gRm9yIGVhY2ggZW5jb2RlZC13b3JkLi4uCiAgICAgICAgd2hpbGUgKHByZWdfbWF0Y2goJy8oPVw/KFteP10rKVw/KHF8YilcPyhbXj9dKilcPz0pL2knLCAkaW5wdXQsICRtYXRjaGVzKSkgewoKICAgICAgICAgICAgJGVuY29kZWQgID0gJG1hdGNoZXNbMV07CiAgICAgICAgICAgICRjaGFyc2V0ICA9ICRtYXRjaGVzWzJdOwogICAgICAgICAgICAkZW5jb2RpbmcgPSAkbWF0Y2hlc1szXTsKICAgICAgICAgICAgJHRleHQgICAgID0gJG1hdGNoZXNbNF07CgogICAgICAgICAgICBzd2l0Y2ggKHN0cnRvbG93ZXIoJGVuY29kaW5nKSkgewogICAgICAgICAgICAgICAgY2FzZSAnYic6CiAgICAgICAgICAgICAgICAgICAgJHRleHQgPSBiYXNlNjRfZGVjb2RlKCR0ZXh0KTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlICdxJzoKICAgICAgICAgICAgICAgICAgICAkdGV4dCA9IHN0cl9yZXBsYWNlKCdfJywgJyAnLCAkdGV4dCk7CiAgICAgICAgICAgICAgICAgICAgcHJlZ19tYXRjaF9hbGwoJy89KFthLWYwLTldezJ9KS9pJywgJHRleHQsICRtYXRjaGVzKTsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRtYXRjaGVzWzFdIGFzICR2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgJHRleHQgPSBzdHJfcmVwbGFjZSgnPScuJHZhbHVlLCBjaHIoaGV4ZGVjKCR2YWx1ZSkpLCAkdGV4dCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRpbnB1dCA9IHN0cl9yZXBsYWNlKCRlbmNvZGVkLCAkdGV4dCwgJGlucHV0KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkaW5wdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhIGJvZHkgc3RyaW5nIGFuZCBhbiBlbmNvZGluZyB0eXBlLAogICAgICogdGhpcyBmdW5jdGlvbiB3aWxsIGRlY29kZSBhbmQgcmV0dXJuIGl0LgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nIElucHV0IGJvZHkgdG8gZGVjb2RlCiAgICAgKiBAcGFyYW0gIHN0cmluZyBFbmNvZGluZyB0eXBlIHRvIHVzZS4KICAgICAqIEByZXR1cm4gc3RyaW5nIERlY29kZWQgYm9keQogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9kZWNvZGVCb2R5KCRpbnB1dCwgJGVuY29kaW5nID0gJzdiaXQnKQogICAgewogICAgICAgIHN3aXRjaCAoc3RydG9sb3dlcigkZW5jb2RpbmcpKSB7CiAgICAgICAgICAgIGNhc2UgJzdiaXQnOgogICAgICAgICAgICAgICAgcmV0dXJuICRpbnB1dDsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSAncXVvdGVkLXByaW50YWJsZSc6CiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPl9xdW90ZWRQcmludGFibGVEZWNvZGUoJGlucHV0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSAnYmFzZTY0JzoKICAgICAgICAgICAgICAgIHJldHVybiBiYXNlNjRfZGVjb2RlKCRpbnB1dCk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gJGlucHV0OwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdpdmVuIGEgcXVvdGVkLXByaW50YWJsZSBzdHJpbmcsIHRoaXMKICAgICAqIGZ1bmN0aW9uIHdpbGwgZGVjb2RlIGFuZCByZXR1cm4gaXQuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgSW5wdXQgYm9keSB0byBkZWNvZGUKICAgICAqIEByZXR1cm4gc3RyaW5nIERlY29kZWQgYm9keQogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9xdW90ZWRQcmludGFibGVEZWNvZGUoJGlucHV0KQogICAgewogICAgICAgIC8vIFJlbW92ZSBzb2Z0IGxpbmUgYnJlYWtzCiAgICAgICAgJGlucHV0ID0gcHJlZ19yZXBsYWNlKCIvPVxyP1xuLyIsICcnLCAkaW5wdXQpOwoKICAgICAgICAvLyBSZXBsYWNlIGVuY29kZWQgY2hhcmFjdGVycwoJCSRpbnB1dCA9IHByZWdfcmVwbGFjZSgnLz0oW2EtZjAtOV17Mn0pL2llJywgImNocihoZXhkZWMoJ1xcMScpKSIsICRpbnB1dCk7CgogICAgICAgIHJldHVybiAkaW5wdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgdGhlIGlucHV0IGZvciB1dWVuY29kZWQgZmlsZXMgYW5kIHJldHVybnMKICAgICAqIGFuIGFycmF5IG9mIHRoZW0uIENhbiBiZSBjYWxsZWQgc3RhdGljYWxseSwgZWc6CiAgICAgKgogICAgICogJGZpbGVzID0mIE1haWxfbWltZURlY29kZTo6dXVkZWNvZGUoJHNvbWVfdGV4dCk7CiAgICAgKgogICAgICogSXQgd2lsbCBjaGVjayBmb3IgdGhlIGJlZ2luIDY2NiAuLi4gZW5kIHN5bnRheAogICAgICogaG93ZXZlciBhbmQgd29uJ3QganVzdCBibGluZGx5IGRlY29kZSB3aGF0ZXZlciB5b3UKICAgICAqIHBhc3MgaXQuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgSW5wdXQgYm9keSB0byBsb29rIGZvciBhdHRhaGNtZW50cyBpbgogICAgICogQHJldHVybiBhcnJheSAgRGVjb2RlZCBib2RpZXMsIGZpbGVuYW1lcyBhbmQgcGVybWlzc2lvbnMKICAgICAqIEBhY2Nlc3MgcHVibGljCiAgICAgKiBAYXV0aG9yIFVua25vd24KICAgICAqLwogICAgZnVuY3Rpb24gJnV1ZGVjb2RlKCRpbnB1dCkKICAgIHsKICAgICAgICAvLyBGaW5kIGFsbCB1dWVuY29kZWQgc2VjdGlvbnMKICAgICAgICBwcmVnX21hdGNoX2FsbCgiL2JlZ2luIChbMC03XXszfSkgKC4rKVxyP1xuKC4rKVxyP1xuZW5kL1VzIiwgJGlucHV0LCAkbWF0Y2hlcyk7CgogICAgICAgIGZvciAoJGogPSAwOyAkaiA8IGNvdW50KCRtYXRjaGVzWzNdKTsgJGorKykgewoKICAgICAgICAgICAgJHN0ciAgICAgID0gJG1hdGNoZXNbM11bJGpdOwogICAgICAgICAgICAkZmlsZW5hbWUgPSAkbWF0Y2hlc1syXVskal07CiAgICAgICAgICAgICRmaWxlcGVybSA9ICRtYXRjaGVzWzFdWyRqXTsKCiAgICAgICAgICAgICRmaWxlID0gJyc7CiAgICAgICAgICAgICRzdHIgPSBwcmVnX3NwbGl0KCIvXHI/XG4vIiwgdHJpbSgkc3RyKSk7CiAgICAgICAgICAgICRzdHJsZW4gPSBjb3VudCgkc3RyKTsKCiAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRzdHJsZW47ICRpKyspIHsKICAgICAgICAgICAgICAgICRwb3MgPSAxOwogICAgICAgICAgICAgICAgJGQgPSAwOwogICAgICAgICAgICAgICAgJGxlbj0oaW50KSgoKG9yZChzdWJzdHIoJHN0clskaV0sMCwxKSkgLTMyKSAtICcgJykgJiAwNzcpOwoKICAgICAgICAgICAgICAgIHdoaWxlICgoJGQgKyAzIDw9ICRsZW4pIEFORCAoJHBvcyArIDQgPD0gc3RybGVuKCRzdHJbJGldKSkpIHsKICAgICAgICAgICAgICAgICAgICAkYzAgPSAob3JkKHN1YnN0cigkc3RyWyRpXSwkcG9zLDEpKSBeIDB4MjApOwogICAgICAgICAgICAgICAgICAgICRjMSA9IChvcmQoc3Vic3RyKCRzdHJbJGldLCRwb3MrMSwxKSkgXiAweDIwKTsKICAgICAgICAgICAgICAgICAgICAkYzIgPSAob3JkKHN1YnN0cigkc3RyWyRpXSwkcG9zKzIsMSkpIF4gMHgyMCk7CiAgICAgICAgICAgICAgICAgICAgJGMzID0gKG9yZChzdWJzdHIoJHN0clskaV0sJHBvcyszLDEpKSBeIDB4MjApOwogICAgICAgICAgICAgICAgICAgICRmaWxlIC49IGNocigoKCgkYzAgLSAnICcpICYgMDc3KSA8PCAyKSB8ICgoKCRjMSAtICcgJykgJiAwNzcpID4+IDQpKTsKCiAgICAgICAgICAgICAgICAgICAgJGZpbGUgLj0gY2hyKCgoKCRjMSAtICcgJykgJiAwNzcpIDw8IDQpIHwgKCgoJGMyIC0gJyAnKSAmIDA3NykgPj4gMikpOwoKICAgICAgICAgICAgICAgICAgICAkZmlsZSAuPSBjaHIoKCgoJGMyIC0gJyAnKSAmIDA3NykgPDwgNikgfCAgKCgkYzMgLSAnICcpICYgMDc3KSk7CgogICAgICAgICAgICAgICAgICAgICRwb3MgKz0gNDsKICAgICAgICAgICAgICAgICAgICAkZCArPSAzOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgoJGQgKyAyIDw9ICRsZW4pICYmICgkcG9zICsgMyA8PSBzdHJsZW4oJHN0clskaV0pKSkgewogICAgICAgICAgICAgICAgICAgICRjMCA9IChvcmQoc3Vic3RyKCRzdHJbJGldLCRwb3MsMSkpIF4gMHgyMCk7CiAgICAgICAgICAgICAgICAgICAgJGMxID0gKG9yZChzdWJzdHIoJHN0clskaV0sJHBvcysxLDEpKSBeIDB4MjApOwogICAgICAgICAgICAgICAgICAgICRjMiA9IChvcmQoc3Vic3RyKCRzdHJbJGldLCRwb3MrMiwxKSkgXiAweDIwKTsKICAgICAgICAgICAgICAgICAgICAkZmlsZSAuPSBjaHIoKCgoJGMwIC0gJyAnKSAmIDA3NykgPDwgMikgfCAoKCgkYzEgLSAnICcpICYgMDc3KSA+PiA0KSk7CgogICAgICAgICAgICAgICAgICAgICRmaWxlIC49IGNocigoKCgkYzEgLSAnICcpICYgMDc3KSA8PCA0KSB8ICgoKCRjMiAtICcgJykgJiAwNzcpID4+IDIpKTsKCiAgICAgICAgICAgICAgICAgICAgJHBvcyArPSAzOwogICAgICAgICAgICAgICAgICAgICRkICs9IDI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCgkZCArIDEgPD0gJGxlbikgJiYgKCRwb3MgKyAyIDw9IHN0cmxlbigkc3RyWyRpXSkpKSB7CiAgICAgICAgICAgICAgICAgICAgJGMwID0gKG9yZChzdWJzdHIoJHN0clskaV0sJHBvcywxKSkgXiAweDIwKTsKICAgICAgICAgICAgICAgICAgICAkYzEgPSAob3JkKHN1YnN0cigkc3RyWyRpXSwkcG9zKzEsMSkpIF4gMHgyMCk7CiAgICAgICAgICAgICAgICAgICAgJGZpbGUgLj0gY2hyKCgoKCRjMCAtICcgJykgJiAwNzcpIDw8IDIpIHwgKCgoJGMxIC0gJyAnKSAmIDA3NykgPj4gNCkpOwoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkZmlsZXNbXSA9IGFycmF5KCdmaWxlbmFtZScgPT4gJGZpbGVuYW1lLCAnZmlsZXBlcm0nID0+ICRmaWxlcGVybSwgJ2ZpbGVkYXRhJyA9PiAkZmlsZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGZpbGVzOwogICAgfQoKICAgIC8qKgogICAgICogZ2V0U2VuZEFycmF5KCkgcmV0dXJucyB0aGUgYXJndW1lbnRzIHJlcXVpcmVkIGZvciBNYWlsOjpzZW5kKCkKICAgICAqIHVzZWQgdG8gYnVpbGQgdGhlIGFyZ3VtZW50cyBmb3IgYSBtYWlsOjpzZW5kKCkgY2FsbCAKICAgICAqCiAgICAgKiBVc2FnZToKICAgICAqICRtYWlsdGV4dCA9IEZ1bGwgZW1haWwgKGZvciBleGFtcGxlIGdlbmVyYXRlZCBieSBhIHRlbXBsYXRlKQogICAgICogJGRlY29kZXIgPSBuZXcgTWFpbF9taW1lRGVjb2RlKCRtYWlsdGV4dCk7CiAgICAgKiAkcGFydHMgPSAgJGRlY29kZXItPmdldFNlbmRBcnJheSgpOwogICAgICogaWYgKCFQRUFSOjppc0Vycm9yKCRwYXJ0cykgewogICAgICogICAgIGxpc3QoJHJlY2lwZW50cywkaGVhZGVycywkYm9keSkgPSAkcGFydHM7CiAgICAgKiAgICAgJG1haWwgPSBNYWlsOjpmYWN0b3J5KCdzbXRwJyk7CiAgICAgKiAgICAgJG1haWwtPnNlbmQoJHJlY2lwZW50cywkaGVhZGVycywkYm9keSk7CiAgICAgKiB9IGVsc2UgewogICAgICogICAgIGVjaG8gJHBhcnRzLT5tZXNzYWdlOwogICAgICogfQogICAgICogQHJldHVybiBtaXhlZCAgIGFycmF5IG9mIHJlY2lwZWludCwgaGVhZGVycyxib2R5IG9yIFBlYXJfRXJyb3IKICAgICAqIEBhY2Nlc3MgcHVibGljCiAgICAgKiBAYXV0aG9yIEFsYW4gS25vd2xlcyA8YWxhbkBha2JraG9tZS5jb20+CiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFNlbmRBcnJheSgpCiAgICB7CiAgICAgICAgLy8gcHJldmVudCB3YXJuaW5nIGlmIHRoaXMgaXMgbm90IHNldAogICAgICAgICR0aGlzLT5fZGVjb2RlX2hlYWRlcnMgPSBGQUxTRTsKICAgICAgICAkaGVhZGVybGlzdCA9JHRoaXMtPl9wYXJzZUhlYWRlcnMoJHRoaXMtPl9oZWFkZXIpOwogICAgICAgICR0byA9ICIiOwogICAgICAgIGlmICghJGhlYWRlcmxpc3QpIHsKCSAgdGhyb3cgbmV3IEV4Y2VwdGlvbignTWVzc2FnZSBkaWQgbm90IGNvbnRhaW4gaGVhZGVycycpOwogICAgICAgIH0KICAgICAgICBmb3JlYWNoKCRoZWFkZXJsaXN0IGFzICRpdGVtKSB7CiAgICAgICAgICAgICRoZWFkZXJbJGl0ZW1bJ25hbWUnXV0gPSAkaXRlbVsndmFsdWUnXTsKICAgICAgICAgICAgc3dpdGNoIChzdHJ0b2xvd2VyKCRpdGVtWyduYW1lJ10pKSB7CiAgICAgICAgICAgICAgICBjYXNlICJ0byI6CiAgICAgICAgICAgICAgICBjYXNlICJjYyI6CiAgICAgICAgICAgICAgICBjYXNlICJiY2MiOgogICAgICAgICAgICAgICAgICAgICR0byAuPSAiLCIuJGl0ZW1bJ3ZhbHVlJ107CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCR0byA9PSAiIikgewoJICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdNZXNzYWdlIGRpZCBub3QgY29udGFpbiBhbnkgcmVjaXBpZW50cycpOwogICAgICAgIH0KICAgICAgICAkdG8gPSBzdWJzdHIoJHRvLDEpOwogICAgICAgIHJldHVybiBhcnJheSgkdG8sJGhlYWRlciwkdGhpcy0+X2JvZHkpOwogICAgfSAKCiAgICAvKioKICAgICAqIFJldHVybnMgYSB4bWwgY29weSBvZiB0aGUgb3V0cHV0IG9mCiAgICAgKiBNYWlsX21pbWVEZWNvZGU6OmRlY29kZS4gUGFzcyB0aGUgb3V0cHV0IGluIGFzIHRoZQogICAgICogYXJndW1lbnQuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBzdGF0aWNhbGx5LiBFZzoKICAgICAqCiAgICAgKiAkb3V0cHV0ID0gJG9iai0+ZGVjb2RlKCk7CiAgICAgKiAkeG1sICAgID0gTWFpbF9taW1lRGVjb2RlOjpnZXRYTUwoJG91dHB1dCk7CiAgICAgKgogICAgICogVGhlIERURCB1c2VkIGZvciB0aGlzIHNob3VsZCBoYXZlIGJlZW4gaW4gdGhlIHBhY2thZ2UuIE9yCiAgICAgKiBhbHRlcm5hdGl2ZWx5IHlvdSBjYW4gZ2V0IGl0IGZyb20wIGN2cywgb3IgaGVyZToKICAgICAqIGh0dHA6Ly93d3cucGhwZ3VydS5vcmcveG1haWwveG1haWwuZHRkLgogICAgICoKICAgICAqIEBwYXJhbSAgb2JqZWN0IElucHV0IHRvIGNvbnZlcnQgdG8geG1sLiBUaGlzIHNob3VsZCBiZSB0aGUKICAgICAqICAgICAgICAgICAgICAgIG91dHB1dCBvZiB0aGUgTWFpbF9taW1lRGVjb2RlOjpkZWNvZGUgZnVuY3Rpb24KICAgICAqIEByZXR1cm4gc3RyaW5nIFhNTCB2ZXJzaW9uIG9mIGlucHV0CiAgICAgKiBAYWNjZXNzIHB1YmxpYwogICAgICovCiAgICBmdW5jdGlvbiBnZXRYTUwoJGlucHV0KQogICAgewogICAgICAgICRjcmxmICAgID0gICJcclxuIjsKICAgICAgICAkb3V0cHV0ICA9ICc8P3htbCB2ZXJzaW9uPVwnMS4wXCc/PicgLiAkY3JsZiAuCiAgICAgICAgICAgICAgICAgICAnPCFET0NUWVBFIGVtYWlsIFNZU1RFTSAiaHR0cDovL3d3dy5waHBndXJ1Lm9yZy94bWFpbC94bWFpbC5kdGQiPicgLiAkY3JsZiAuCiAgICAgICAgICAgICAgICAgICAnPGVtYWlsPicgLiAkY3JsZiAuCiAgICAgICAgICAgICAgICAgICBNYWlsX21pbWVEZWNvZGU6Ol9nZXRYTUwoJGlucHV0KSAuCiAgICAgICAgICAgICAgICAgICAnPC9lbWFpbD4nOwoKICAgICAgICByZXR1cm4gJG91dHB1dDsKICAgIH0KCiAgICAvKioKICAgICAqIEZ1bmN0aW9uIHRoYXQgZG9lcyB0aGUgYWN0dWFsIGNvbnZlcnNpb24gdG8geG1sLiBEb2VzIGEgc2luZ2xlCiAgICAgKiBtaW1lcGFydCBhdCBhIHRpbWUuCiAgICAgKgogICAgICogQHBhcmFtICBvYmplY3QgIElucHV0IHRvIGNvbnZlcnQgdG8geG1sLiBUaGlzIGlzIGEgbWltZXBhcnQgb2JqZWN0LgogICAgICogICAgICAgICAgICAgICAgIEl0IG1heSBvciBtYXkgbm90IGNvbnRhaW4gc3VicGFydHMuCiAgICAgKiBAcGFyYW0gIGludGVnZXIgTnVtYmVyIG9mIHRhYnMgdG8gaW5kZW50CiAgICAgKiBAcmV0dXJuIHN0cmluZyAgWE1MIHZlcnNpb24gb2YgaW5wdXQKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfZ2V0WE1MKCRpbnB1dCwgJGluZGVudCA9IDEpCiAgICB7CiAgICAgICAgJGh0YWIgICAgPSAgIlx0IjsKICAgICAgICAkY3JsZiAgICA9ICAiXHJcbiI7CiAgICAgICAgJG91dHB1dCAgPSAgJyc7CiAgICAgICAgJGhlYWRlcnMgPSBAKGFycmF5KSRpbnB1dC0+aGVhZGVyczsKCiAgICAgICAgZm9yZWFjaCAoJGhlYWRlcnMgYXMgJGhkcl9uYW1lID0+ICRoZHJfdmFsdWUpIHsKCiAgICAgICAgICAgIC8vIE11bHRpcGxlIGhlYWRlcnMgd2l0aCB0aGlzIG5hbWUKICAgICAgICAgICAgaWYgKGlzX2FycmF5KCRoZWFkZXJzWyRoZHJfbmFtZV0pKSB7CiAgICAgICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkaGRyX3ZhbHVlKTsgJGkrKykgewogICAgICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gTWFpbF9taW1lRGVjb2RlOjpfZ2V0WE1MX2hlbHBlcigkaGRyX25hbWUsICRoZHJfdmFsdWVbJGldLCAkaW5kZW50KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIE9ubHkgb25lIGhlYWRlciBvZiB0aGlzIHNvcnQKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gTWFpbF9taW1lRGVjb2RlOjpfZ2V0WE1MX2hlbHBlcigkaGRyX25hbWUsICRoZHJfdmFsdWUsICRpbmRlbnQpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIWVtcHR5KCRpbnB1dC0+cGFydHMpKSB7CiAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IGNvdW50KCRpbnB1dC0+cGFydHMpOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAkb3V0cHV0IC49ICRjcmxmIC4gc3RyX3JlcGVhdCgkaHRhYiwgJGluZGVudCkgLiAnPG1pbWVwYXJ0PicgLiAkY3JsZiAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haWxfbWltZURlY29kZTo6X2dldFhNTCgkaW5wdXQtPnBhcnRzWyRpXSwgJGluZGVudCsxKSAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9yZXBlYXQoJGh0YWIsICRpbmRlbnQpIC4gJzwvbWltZXBhcnQ+JyAuICRjcmxmOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlaWYgKGlzc2V0KCRpbnB1dC0+Ym9keSkpIHsKICAgICAgICAgICAgJG91dHB1dCAuPSAkY3JsZiAuIHN0cl9yZXBlYXQoJGh0YWIsICRpbmRlbnQpIC4gJzxib2R5PjwhW0NEQVRBWycgLgogICAgICAgICAgICAgICAgICAgICAgICRpbnB1dC0+Ym9keSAuICddXT48L2JvZHk+JyAuICRjcmxmOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRvdXRwdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gX2dldFhNTCgpLiBSZXR1cm5zIHhtbCBvZiBhIGhlYWRlci4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgTmFtZSBvZiBoZWFkZXIKICAgICAqIEBwYXJhbSAgc3RyaW5nICBWYWx1ZSBvZiBoZWFkZXIKICAgICAqIEBwYXJhbSAgaW50ZWdlciBOdW1iZXIgb2YgdGFicyB0byBpbmRlbnQKICAgICAqIEByZXR1cm4gc3RyaW5nICBYTUwgdmVyc2lvbiBvZiBpbnB1dAogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9nZXRYTUxfaGVscGVyKCRoZHJfbmFtZSwgJGhkcl92YWx1ZSwgJGluZGVudCkKICAgIHsKICAgICAgICAkaHRhYiAgID0gIlx0IjsKICAgICAgICAkY3JsZiAgID0gIlxyXG4iOwogICAgICAgICRyZXR1cm4gPSAnJzsKCiAgICAgICAgJG5ld19oZHJfdmFsdWUgPSAoJGhkcl9uYW1lICE9ICdyZWNlaXZlZCcpID8gTWFpbF9taW1lRGVjb2RlOjpfcGFyc2VIZWFkZXJWYWx1ZSgkaGRyX3ZhbHVlKSA6IGFycmF5KCd2YWx1ZScgPT4gJGhkcl92YWx1ZSk7CiAgICAgICAgJG5ld19oZHJfbmFtZSAgPSBzdHJfcmVwbGFjZSgnICcsICctJywgdWN3b3JkcyhzdHJfcmVwbGFjZSgnLScsICcgJywgJGhkcl9uYW1lKSkpOwoKICAgICAgICAvLyBTb3J0IG91dCBhbnkgcGFyYW1ldGVycwogICAgICAgIGlmICghZW1wdHkoJG5ld19oZHJfdmFsdWVbJ290aGVyJ10pKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRuZXdfaGRyX3ZhbHVlWydvdGhlciddIGFzICRwYXJhbW5hbWUgPT4gJHBhcmFtdmFsdWUpIHsKICAgICAgICAgICAgICAgICRwYXJhbXNbXSA9IHN0cl9yZXBlYXQoJGh0YWIsICRpbmRlbnQpIC4gJGh0YWIgLiAnPHBhcmFtZXRlcj4nIC4gJGNybGYgLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX3JlcGVhdCgkaHRhYiwgJGluZGVudCkgLiAkaHRhYiAuICRodGFiIC4gJzxwYXJhbW5hbWU+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJHBhcmFtbmFtZSkgLiAnPC9wYXJhbW5hbWU+JyAuICRjcmxmIC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9yZXBlYXQoJGh0YWIsICRpbmRlbnQpIC4gJGh0YWIgLiAkaHRhYiAuICc8cGFyYW12YWx1ZT4nIC4gaHRtbHNwZWNpYWxjaGFycygkcGFyYW12YWx1ZSkgLiAnPC9wYXJhbXZhbHVlPicgLiAkY3JsZiAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfcmVwZWF0KCRodGFiLCAkaW5kZW50KSAuICRodGFiIC4gJzwvcGFyYW1ldGVyPicgLiAkY3JsZjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHBhcmFtcyA9IGltcGxvZGUoJycsICRwYXJhbXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRwYXJhbXMgPSAnJzsKICAgICAgICB9CgogICAgICAgICRyZXR1cm4gPSBzdHJfcmVwZWF0KCRodGFiLCAkaW5kZW50KSAuICc8aGVhZGVyPicgLiAkY3JsZiAuCiAgICAgICAgICAgICAgICAgIHN0cl9yZXBlYXQoJGh0YWIsICRpbmRlbnQpIC4gJGh0YWIgLiAnPGhlYWRlcm5hbWU+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJG5ld19oZHJfbmFtZSkgLiAnPC9oZWFkZXJuYW1lPicgLiAkY3JsZiAuCiAgICAgICAgICAgICAgICAgIHN0cl9yZXBlYXQoJGh0YWIsICRpbmRlbnQpIC4gJGh0YWIgLiAnPGhlYWRlcnZhbHVlPicgLiBodG1sc3BlY2lhbGNoYXJzKCRuZXdfaGRyX3ZhbHVlWyd2YWx1ZSddKSAuICc8L2hlYWRlcnZhbHVlPicgLiAkY3JsZiAuCiAgICAgICAgICAgICAgICAgICRwYXJhbXMgLgogICAgICAgICAgICAgICAgICBzdHJfcmVwZWF0KCRodGFiLCAkaW5kZW50KSAuICc8L2hlYWRlcj4nIC4gJGNybGY7CgogICAgICAgIHJldHVybiAkcmV0dXJuOwogICAgfQoKfSAvLyBFbmQgb2YgY2xhc3MK]]></data>
	</file>
	<file>
	  <filename>/lib/class.Mail_RFC822.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFJGQyA4MjIgRW1haWwgYWRkcmVzcyBsaXN0IHZhbGlkYXRpb24gVXRpbGl0eQogKgogKiBQSFAgdmVyc2lvbnMgNCBhbmQgNQogKgogKiBMSUNFTlNFOgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxMCwgUmljaGFyZCBIZXllcwogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAqIGFyZSBtZXQ6CiAqCiAqIG8gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqIG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAqICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICogbyBUaGUgbmFtZXMgb2YgdGhlIGF1dGhvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQogKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgogKiAgIHBlcm1pc3Npb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCiAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAogKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAogKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICoKICogQGNhdGVnb3J5ICAgIE1haWwKICogQHBhY2thZ2UgICAgIE1haWwKICogQGF1dGhvciAgICAgIFJpY2hhcmQgSGV5ZXMgPHJpY2hhcmRAcGhwZ3VydS5vcmc+CiAqIEBhdXRob3IgICAgICBDaHVjayBIYWdlbmJ1Y2ggPGNodWNrQGhvcmRlLm9yZwogKiBAY29weXJpZ2h0ICAgMjAwMS0yMDEwIFJpY2hhcmQgSGV5ZXMKICogQGxpY2Vuc2UgICAgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAgTmV3IEJTRCBMaWNlbnNlCiAqIEB2ZXJzaW9uICAgICBDVlM6ICRJZDogUkZDODIyLnBocCAyOTQ3NDkgMjAxMC0wMi0wOCAwODoyMjoyNVogY2xvY2t3ZXJ4ICQKICogQGxpbmsgICAgICAgIGh0dHA6Ly9wZWFyLnBocC5uZXQvcGFja2FnZS9NYWlsLwogKi8KCi8qKgogKiBSRkMgODIyIEVtYWlsIGFkZHJlc3MgbGlzdCB2YWxpZGF0aW9uIFV0aWxpdHkKICoKICogV2hhdCBpcyBpdD8KICoKICogVGhpcyBjbGFzcyB3aWxsIHRha2UgYW4gYWRkcmVzcyBzdHJpbmcsIGFuZCBwYXJzZSBpdCBpbnRvIGl0J3MgY29uc2l0dWVudAogKiBwYXJ0cywgYmUgdGhhdCBlaXRoZXIgYWRkcmVzc2VzLCBncm91cHMsIG9yIGNvbWJpbmF0aW9ucy4gTmVzdGVkIGdyb3VwcwogKiBhcmUgbm90IHN1cHBvcnRlZC4gVGhlIHN0cnVjdHVyZSBpdCByZXR1cm5zIGlzIHByZXR0eSBzdHJhaWdodCBmb3J3YXJkLAogKiBhbmQgaXMgc2ltaWxhciB0byB0aGF0IHByb3ZpZGVkIGJ5IHRoZSBpbWFwX3JmYzgyMl9wYXJzZV9hZHJsaXN0KCkuIFVzZQogKiBwcmludF9yKCkgdG8gdmlldyB0aGUgc3RydWN0dXJlLgogKgogKiBIb3cgZG8gSSB1c2UgaXQ/CiAqCiAqICRhZGRyZXNzX3N0cmluZyA9ICdNeSBHcm91cDogIlJpY2hhcmQiIDxyaWNoYXJkQGxvY2FsaG9zdD4gKEEgY29tbWVudCksIHRlZEBleGFtcGxlLmNvbSAoVGVkIEJsb2dncyksIEJhcm5leTsnOwogKiAkc3RydWN0dXJlID0gTWFpbF9SRkM4MjI6OnBhcnNlQWRkcmVzc0xpc3QoJGFkZHJlc3Nfc3RyaW5nLCAnZXhhbXBsZS5jb20nLCB0cnVlKQogKiBwcmludF9yKCRzdHJ1Y3R1cmUpOwogKgogKiBAYXV0aG9yICBSaWNoYXJkIEhleWVzIDxyaWNoYXJkQHBocGd1cnUub3JnPgogKiBAYXV0aG9yICBDaHVjayBIYWdlbmJ1Y2ggPGNodWNrQGhvcmRlLm9yZz4KICogQHZlcnNpb24gJFJldmlzaW9uOiAyOTQ3NDkgJAogKiBAbGljZW5zZSBCU0QKICogQHBhY2thZ2UgTWFpbAogKi8KCi8qKgogKiBDbGFzcyBNYWlsX1JGQzgyMgogKiBBZGFwdGVkIGFuZCBuYW1lc3BhY2VkIGZvciBDTVNNU0V4dAogKi8KbmFtZXNwYWNlIENNU01TRXh0OwoKY2xhc3MgTWFpbF9SRkM4MjIgewoKICAgIC8qKgogICAgICogVGhlIGFkZHJlc3MgYmVpbmcgcGFyc2VkIGJ5IHRoZSBSRkM4MjIgb2JqZWN0LgogICAgICogQHZhciBzdHJpbmcgJGFkZHJlc3MKICAgICAqLwogICAgcHJpdmF0ZSAkYWRkcmVzcyA9ICcnOwoKICAgIC8qKgogICAgICogVGhlIGRlZmF1bHQgZG9tYWluIHRvIHVzZSBmb3IgdW5xdWFsaWZpZWQgYWRkcmVzc2VzLgogICAgICogQHZhciBzdHJpbmcgJGRlZmF1bHRfZG9tYWluCiAgICAgKi8KICAgIHByaXZhdGUgJGRlZmF1bHRfZG9tYWluID0gJ2xvY2FsaG9zdCc7CgogICAgLyoqCiAgICAgKiBTaG91bGQgd2UgcmV0dXJuIGEgbmVzdGVkIGFycmF5IHNob3dpbmcgZ3JvdXBzLCBvciBmbGF0dGVuIGV2ZXJ5dGhpbmc/CiAgICAgKiBAdmFyIGJvb2xlYW4gJG5lc3RHcm91cHMKICAgICAqLwogICAgcHJpdmF0ZSAkbmVzdEdyb3VwcyA9IHRydWU7CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byB2YWxpZGF0ZSBhdG9tcyBmb3Igbm9uLWFzY2lpIGNoYXJhY3RlcnMuCiAgICAgKiBAdmFyIGJvb2xlYW4gJHZhbGlkYXRlCiAgICAgKi8KICAgIHByaXZhdGUgJHZhbGlkYXRlID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIFRoZSBhcnJheSBvZiByYXcgYWRkcmVzc2VzIGJ1aWx0IHVwIGFzIHdlIHBhcnNlLgogICAgICogQHZhciBhcnJheSAkYWRkcmVzc2VzCiAgICAgKi8KICAgIHByaXZhdGUgJGFkZHJlc3NlcyA9IGFycmF5KCk7CgogICAgLyoqCiAgICAgKiBUaGUgZmluYWwgYXJyYXkgb2YgcGFyc2VkIGFkZHJlc3MgaW5mb3JtYXRpb24gdGhhdCB3ZSBidWlsZCB1cC4KICAgICAqIEB2YXIgYXJyYXkgJHN0cnVjdHVyZQogICAgICovCiAgICBwcml2YXRlICRzdHJ1Y3R1cmUgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICogVGhlIGN1cnJlbnQgZXJyb3IgbWVzc2FnZSwgaWYgYW55LgogICAgICogQHZhciBzdHJpbmcgJGVycm9yCiAgICAgKi8KICAgIHByaXZhdGUgJGVycm9yID0gbnVsbDsKCiAgICAvKioKICAgICAqIEFuIGludGVybmFsIGNvdW50ZXIvcG9pbnRlci4KICAgICAqIEB2YXIgaW50ZWdlciAkaW5kZXgKICAgICAqLwogICAgcHJpdmF0ZSAkaW5kZXggPSBudWxsOwoKICAgIC8qKgogICAgICogVGhlIG51bWJlciBvZiBncm91cHMgdGhhdCBoYXZlIGJlZW4gZm91bmQgaW4gdGhlIGFkZHJlc3MgbGlzdC4KICAgICAqIEB2YXIgaW50ZWdlciAkbnVtX2dyb3VwcwogICAgICogQGFjY2VzcyBwdWJsaWMKICAgICAqLwogICAgcHJpdmF0ZSAkbnVtX2dyb3VwcyA9IDA7CgogICAgLyoqCiAgICAgKiBBIHZhcmlhYmxlIHNvIHRoYXQgd2UgY2FuIHRlbGwgd2hldGhlciBvciBub3Qgd2UncmUgaW5zaWRlIGEKICAgICAqIE1haWxfUkZDODIyIG9iamVjdC4KICAgICAqIEB2YXIgYm9vbGVhbiAkbWFpbFJGQzgyMgogICAgICovCiAgICBwcml2YXRlICRtYWlsUkZDODIyID0gdHJ1ZTsKCiAgICAvKioKICAgICogQSBsaW1pdCBhZnRlciB3aGljaCBwcm9jZXNzaW5nIHN0b3BzCiAgICAqIEB2YXIgaW50ICRsaW1pdAogICAgKi8KICAgIHByaXZhdGUgJGxpbWl0ID0gbnVsbDsKCiAgICAvKioKICAgICAqIFNldHMgdXAgdGhlIG9iamVjdC4gVGhlIGFkZHJlc3MgbXVzdCBlaXRoZXIgYmUgc2V0IGhlcmUgb3Igd2hlbgogICAgICogY2FsbGluZyBwYXJzZUFkZHJlc3NMaXN0KCkuIE9uZSBvciB0aGUgb3RoZXIuCiAgICAgKgogICAgICogQGFjY2VzcyBwdWJsaWMKICAgICAqIEBwYXJhbSBzdHJpbmcgICRhZGRyZXNzICAgICAgICAgVGhlIGFkZHJlc3MoZXMpIHRvIHZhbGlkYXRlLgogICAgICogQHBhcmFtIHN0cmluZyAgJGRlZmF1bHRfZG9tYWluICBEZWZhdWx0IGRvbWFpbi9ob3N0IGV0Yy4gSWYgbm90IHN1cHBsaWVkLCB3aWxsIGJlIHNldCB0byBsb2NhbGhvc3QuCiAgICAgKiBAcGFyYW0gYm9vbGVhbiAkbmVzdF9ncm91cHMgICAgIFdoZXRoZXIgdG8gcmV0dXJuIHRoZSBzdHJ1Y3R1cmUgd2l0aCBncm91cHMgbmVzdGVkIGZvciBlYXNpZXIgdmlld2luZy4KICAgICAqIEBwYXJhbSBib29sZWFuICR2YWxpZGF0ZSAgICAgICAgV2hldGhlciB0byB2YWxpZGF0ZSBhdG9tcy4gVHVybiB0aGlzIG9mZiBpZiB5b3UgbmVlZCB0byBydW4gYWRkcmVzc2VzIHRocm91Z2ggYmVmb3JlIGVuY29kaW5nIHRoZSBwZXJzb25hbCBuYW1lcywgZm9yIGluc3RhbmNlLgogICAgICoKICAgICAqIEByZXR1cm4gb2JqZWN0IE1haWxfUkZDODIyIEEgbmV3IE1haWxfUkZDODIyIG9iamVjdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRhZGRyZXNzID0gbnVsbCwgJGRlZmF1bHRfZG9tYWluID0gbnVsbCwgJG5lc3RfZ3JvdXBzID0gbnVsbCwgJHZhbGlkYXRlID0gbnVsbCwgJGxpbWl0ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJGFkZHJlc3MpKSAgICAgICAgJHRoaXMtPmFkZHJlc3MgICAgICAgID0gJGFkZHJlc3M7CiAgICAgICAgaWYgKGlzc2V0KCRkZWZhdWx0X2RvbWFpbikpICR0aGlzLT5kZWZhdWx0X2RvbWFpbiA9ICRkZWZhdWx0X2RvbWFpbjsKICAgICAgICBpZiAoaXNzZXQoJG5lc3RfZ3JvdXBzKSkgICAgJHRoaXMtPm5lc3RHcm91cHMgICAgID0gJG5lc3RfZ3JvdXBzOwogICAgICAgIGlmIChpc3NldCgkdmFsaWRhdGUpKSAgICAgICAkdGhpcy0+dmFsaWRhdGUgICAgICAgPSAkdmFsaWRhdGU7CiAgICAgICAgaWYgKGlzc2V0KCRsaW1pdCkpICAgICAgICAgICR0aGlzLT5saW1pdCAgICAgICAgICA9ICRsaW1pdDsKICAgIH0KCgogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBleHRyYWN0X2VtYWlsX2FkZHJlc3Nlcygkc3RyLCRkZWZhdWx0X2RvbWFpbiA9IG51bGwpCiAgICB7CiAgICAgICR0bXAgPSBzZWxmOjpwYXJzZUFkZHJlc3NMaXN0KCRzdHIsJGRlZmF1bHRfZG9tYWluKTsKICAgICAgaWYoIGlzX2FycmF5KCR0bXApICYmIGNvdW50KCR0bXApICkKCXsKCSAgJHJlcyA9IGFycmF5KCk7CgkgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCR0bXApOyAkaSsrICkKCSAgICB7CgkgICAgICAkcmVzW10gPSAkdG1wWyRpXS0+bWFpbGJveC4nQCcuJHRtcFskaV0tPmhvc3Q7CgkgICAgfQoJICBpZiggY291bnQoJHJlcykgPT0gMSApIHJldHVybiAkcmVzWzBdOwoJICByZXR1cm4gJHJlczsKCX0KICAgIH0KCiAgICAvKioKICAgICAqIFN0YXJ0cyB0aGUgd2hvbGUgcHJvY2Vzcy4gVGhlIGFkZHJlc3MgbXVzdCBlaXRoZXIgYmUgc2V0IGhlcmUKICAgICAqIG9yIHdoZW4gY3JlYXRpbmcgdGhlIG9iamVjdC4gT25lIG9yIHRoZSBvdGhlci4KICAgICAqCiAgICAgKiBAYWNjZXNzIHB1YmxpYwogICAgICogQHBhcmFtIHN0cmluZyAgJGFkZHJlc3MgICAgICAgICBUaGUgYWRkcmVzcyhlcykgdG8gdmFsaWRhdGUuCiAgICAgKiBAcGFyYW0gc3RyaW5nICAkZGVmYXVsdF9kb21haW4gIERlZmF1bHQgZG9tYWluL2hvc3QgZXRjLgogICAgICogQHBhcmFtIGJvb2xlYW4gJG5lc3RfZ3JvdXBzICAgICBXaGV0aGVyIHRvIHJldHVybiB0aGUgc3RydWN0dXJlIHdpdGggZ3JvdXBzIG5lc3RlZCBmb3IgZWFzaWVyIHZpZXdpbmcuCiAgICAgKiBAcGFyYW0gYm9vbGVhbiAkdmFsaWRhdGUgICAgICAgIFdoZXRoZXIgdG8gdmFsaWRhdGUgYXRvbXMuIFR1cm4gdGhpcyBvZmYgaWYgeW91IG5lZWQgdG8gcnVuIGFkZHJlc3NlcyB0aHJvdWdoIGJlZm9yZSBlbmNvZGluZyB0aGUgcGVyc29uYWwgbmFtZXMsIGZvciBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IEEgc3RydWN0dXJlZCBhcnJheSBvZiBhZGRyZXNzZXMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXJzZUFkZHJlc3NMaXN0KCRhZGRyZXNzID0gbnVsbCwgJGRlZmF1bHRfZG9tYWluID0gbnVsbCwgJG5lc3RfZ3JvdXBzID0gbnVsbCwgJHZhbGlkYXRlID0gbnVsbCwgJGxpbWl0ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzKSB8fCAhaXNzZXQoJHRoaXMtPm1haWxSRkM4MjIpKSB7CiAgICAgICAgICAgICRvYmogPSBuZXcgTWFpbF9SRkM4MjIoJGFkZHJlc3MsICRkZWZhdWx0X2RvbWFpbiwgJG5lc3RfZ3JvdXBzLCAkdmFsaWRhdGUsICRsaW1pdCk7CiAgICAgICAgICAgIHJldHVybiAkb2JqLT5wYXJzZUFkZHJlc3NMaXN0KCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJGFkZHJlc3MpKSAgICAgICAgJHRoaXMtPmFkZHJlc3MgICAgICAgID0gJGFkZHJlc3M7CiAgICAgICAgaWYgKGlzc2V0KCRkZWZhdWx0X2RvbWFpbikpICR0aGlzLT5kZWZhdWx0X2RvbWFpbiA9ICRkZWZhdWx0X2RvbWFpbjsKICAgICAgICBpZiAoaXNzZXQoJG5lc3RfZ3JvdXBzKSkgICAgJHRoaXMtPm5lc3RHcm91cHMgICAgID0gJG5lc3RfZ3JvdXBzOwogICAgICAgIGlmIChpc3NldCgkdmFsaWRhdGUpKSAgICAgICAkdGhpcy0+dmFsaWRhdGUgICAgICAgPSAkdmFsaWRhdGU7CiAgICAgICAgaWYgKGlzc2V0KCRsaW1pdCkpICAgICAgICAgICR0aGlzLT5saW1pdCAgICAgICAgICA9ICRsaW1pdDsKCiAgICAgICAgJHRoaXMtPnN0cnVjdHVyZSAgPSBhcnJheSgpOwogICAgICAgICR0aGlzLT5hZGRyZXNzZXMgID0gYXJyYXkoKTsKICAgICAgICAkdGhpcy0+ZXJyb3IgICAgICA9IG51bGw7CiAgICAgICAgJHRoaXMtPmluZGV4ICAgICAgPSBudWxsOwoKICAgICAgICAvLyBVbmZvbGQgYW55IGxvbmcgbGluZXMgaW4gJHRoaXMtPmFkZHJlc3MuCiAgICAgICAgJHRoaXMtPmFkZHJlc3MgPSBwcmVnX3JlcGxhY2UoJy9ccj9cbi8nLCAiXHJcbiIsICR0aGlzLT5hZGRyZXNzKTsKICAgICAgICAkdGhpcy0+YWRkcmVzcyA9IHByZWdfcmVwbGFjZSgnL1xyXG4oXHR8ICkrLycsICcgJywgJHRoaXMtPmFkZHJlc3MpOwoKICAgICAgICB3aGlsZSAoJHRoaXMtPmFkZHJlc3MgPSAkdGhpcy0+X3NwbGl0QWRkcmVzc2VzKCR0aGlzLT5hZGRyZXNzKSk7CgogICAgICAgIGlmICgkdGhpcy0+YWRkcmVzcyA9PT0gZmFsc2UgfHwgaXNzZXQoJHRoaXMtPmVycm9yKSkgewogICAgICAgICAgICByZXF1aXJlX29uY2UgJ1BFQVIucGhwJzsKICAgICAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoJHRoaXMtPmVycm9yKTsKICAgICAgICB9CgogICAgICAgIC8vIFZhbGlkYXRlIGVhY2ggYWRkcmVzcyBpbmRpdmlkdWFsbHkuICBJZiB3ZSBlbmNvdW50ZXIgYW4gaW52YWxpZAogICAgICAgIC8vIGFkZHJlc3MsIHN0b3AgaXRlcmF0aW5nIGFuZCByZXR1cm4gYW4gZXJyb3IgaW1tZWRpYXRlbHkuCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmFkZHJlc3NlcyBhcyAkYWRkcmVzcykgewogICAgICAgICAgICAkdmFsaWQgPSAkdGhpcy0+X3ZhbGlkYXRlQWRkcmVzcygkYWRkcmVzcyk7CgogICAgICAgICAgICBpZiAoJHZhbGlkID09PSBmYWxzZSB8fCBpc3NldCgkdGhpcy0+ZXJyb3IpKSB7CiAgICAgICAgICAgICAgICByZXF1aXJlX29uY2UgJ1BFQVIucGhwJzsKICAgICAgICAgICAgICAgIHJldHVybiBQRUFSOjpyYWlzZUVycm9yKCR0aGlzLT5lcnJvcik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghJHRoaXMtPm5lc3RHcm91cHMpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5zdHJ1Y3R1cmUgPSBhcnJheV9tZXJnZSgkdGhpcy0+c3RydWN0dXJlLCAkdmFsaWQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPnN0cnVjdHVyZVtdID0gJHZhbGlkOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cnVjdHVyZTsKICAgIH0KCiAgICAvKioKICAgICAqIFNwbGl0cyBhbiBhZGRyZXNzIGludG8gc2VwYXJhdGUgYWRkcmVzc2VzLgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICogQHBhcmFtIHN0cmluZyAkYWRkcmVzcyBUaGUgYWRkcmVzc2VzIHRvIHNwbGl0LgogICAgICogQHJldHVybiBib29sZWFuIFN1Y2Nlc3Mgb3IgZmFpbHVyZS4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfc3BsaXRBZGRyZXNzZXMoJGFkZHJlc3MpCiAgICB7CiAgICAgICAgaWYgKCFlbXB0eSgkdGhpcy0+bGltaXQpICYmIGNvdW50KCR0aGlzLT5hZGRyZXNzZXMpID09ICR0aGlzLT5saW1pdCkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPl9pc0dyb3VwKCRhZGRyZXNzKSAmJiAhaXNzZXQoJHRoaXMtPmVycm9yKSkgewogICAgICAgICAgICAkc3BsaXRfY2hhciA9ICc7JzsKICAgICAgICAgICAgJGlzX2dyb3VwICAgPSB0cnVlOwogICAgICAgIH0gZWxzZWlmICghaXNzZXQoJHRoaXMtPmVycm9yKSkgewogICAgICAgICAgICAkc3BsaXRfY2hhciA9ICcsJzsKICAgICAgICAgICAgJGlzX2dyb3VwICAgPSBmYWxzZTsKICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJHRoaXMtPmVycm9yKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBTcGxpdCB0aGUgc3RyaW5nIGJhc2VkIG9uIHRoZSBhYm92ZSB0ZW4gb3Igc28gbGluZXMuCiAgICAgICAgJHBhcnRzICA9IGV4cGxvZGUoJHNwbGl0X2NoYXIsICRhZGRyZXNzKTsKICAgICAgICAkc3RyaW5nID0gJHRoaXMtPl9zcGxpdENoZWNrKCRwYXJ0cywgJHNwbGl0X2NoYXIpOwoKICAgICAgICAvLyBJZiBhIGdyb3VwLi4uCiAgICAgICAgaWYgKCRpc19ncm91cCkgewogICAgICAgICAgICAvLyBJZiAkc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gYSBjb2xvbiBvdXRzaWRlIG9mCiAgICAgICAgICAgIC8vIGJyYWNrZXRzL3F1b3RlcyBldGMgdGhlbiBzb21ldGhpbmcncyBmdWJhci4KCiAgICAgICAgICAgIC8vIEZpcnN0IGNoZWNrIHRoZXJlJ3MgYSBjb2xvbiBhdCBhbGw6CiAgICAgICAgICAgIGlmIChzdHJwb3MoJHN0cmluZywgJzonKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5lcnJvciA9ICdJbnZhbGlkIGFkZHJlc3M6ICcgLiAkc3RyaW5nOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBOb3cgY2hlY2sgaXQncyBvdXRzaWRlIG9mIGJyYWNrZXRzL3F1b3RlczoKICAgICAgICAgICAgaWYgKCEkdGhpcy0+X3NwbGl0Q2hlY2soZXhwbG9kZSgnOicsICRzdHJpbmcpLCAnOicpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFdlIG11c3QgaGF2ZSBhIGdyb3VwIGF0IHRoaXMgcG9pbnQsIHNvIGluY3JlYXNlIHRoZSBjb3VudGVyOgogICAgICAgICAgICAkdGhpcy0+bnVtX2dyb3VwcysrOwogICAgICAgIH0KCiAgICAgICAgLy8gJHN0cmluZyBub3cgY29udGFpbnMgdGhlIGZpcnN0IGZ1bGwgYWRkcmVzcy9ncm91cC4KICAgICAgICAvLyBBZGQgdG8gdGhlIGFkZHJlc3NlcyBhcnJheS4KICAgICAgICAkdGhpcy0+YWRkcmVzc2VzW10gPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkcmVzcycgPT4gdHJpbSgkc3RyaW5nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ3JvdXAnICAgPT4gJGlzX2dyb3VwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgLy8gUmVtb3ZlIHRoZSBub3cgc3RvcmVkIGFkZHJlc3MgZnJvbSB0aGUgaW5pdGlhbCBsaW5lLCB0aGUgKzEKICAgICAgICAvLyBpcyB0byBhY2NvdW50IGZvciB0aGUgZXhwbG9kZSBjaGFyYWN0ZXIuCiAgICAgICAgJGFkZHJlc3MgPSB0cmltKHN1YnN0cigkYWRkcmVzcywgc3RybGVuKCRzdHJpbmcpICsgMSkpOwoKICAgICAgICAvLyBJZiB0aGUgbmV4dCBjaGFyIGlzIGEgY29tbWEgYW5kIHRoaXMgd2FzIGEgZ3JvdXAsIHRoZW4KICAgICAgICAvLyB0aGVyZSBhcmUgbW9yZSBhZGRyZXNzZXMsIG90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIGFueSBtb3JlCiAgICAgICAgLy8gY2hhcnMsIHRoZW4gdGhlcmUgaXMgYW5vdGhlciBhZGRyZXNzLgogICAgICAgIGlmICgkaXNfZ3JvdXAgJiYgc3Vic3RyKCRhZGRyZXNzLCAwLCAxKSA9PSAnLCcpewogICAgICAgICAgICAkYWRkcmVzcyA9IHRyaW0oc3Vic3RyKCRhZGRyZXNzLCAxKSk7CiAgICAgICAgICAgIHJldHVybiAkYWRkcmVzczsKCiAgICAgICAgfSBlbHNlaWYgKHN0cmxlbigkYWRkcmVzcykgPiAwKSB7CiAgICAgICAgICAgIHJldHVybiAkYWRkcmVzczsKCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KCiAgICAgICAgLy8gSWYgeW91IGdvdCBoZXJlIHRoZW4gc29tZXRoaW5nJ3Mgb2ZmCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIGZvciBhIGdyb3VwIGF0IHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nLgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICogQHBhcmFtIHN0cmluZyAkYWRkcmVzcyBUaGUgYWRkcmVzcyB0byBjaGVjay4KICAgICAqIEByZXR1cm4gYm9vbGVhbiBXaGV0aGVyIG9yIG5vdCB0aGVyZSBpcyBhIGdyb3VwIGF0IHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9pc0dyb3VwKCRhZGRyZXNzKQogICAgewogICAgICAgIC8vIEZpcnN0IGNvbW1hIG5vdCBpbiBxdW90ZXMsIGFuZ2xlcyBvciBlc2NhcGVkOgogICAgICAgICRwYXJ0cyAgPSBleHBsb2RlKCcsJywgJGFkZHJlc3MpOwogICAgICAgICRzdHJpbmcgPSAkdGhpcy0+X3NwbGl0Q2hlY2soJHBhcnRzLCAnLCcpOwoKICAgICAgICAvLyBOb3cgd2UgaGF2ZSB0aGUgZmlyc3QgYWRkcmVzcywgd2UgY2FuIHJlbGlhYmx5IGNoZWNrIGZvciBhCiAgICAgICAgLy8gZ3JvdXAgYnkgc2VhcmNoaW5nIGZvciBhIGNvbG9uIHRoYXQncyBub3QgZXNjYXBlZCBvciBpbgogICAgICAgIC8vIHF1b3RlcyBvciBhbmdsZSBicmFja2V0cy4KICAgICAgICBpZiAoY291bnQoJHBhcnRzID0gZXhwbG9kZSgnOicsICRzdHJpbmcpKSA+IDEpIHsKICAgICAgICAgICAgJHN0cmluZzIgPSAkdGhpcy0+X3NwbGl0Q2hlY2soJHBhcnRzLCAnOicpOwogICAgICAgICAgICByZXR1cm4gKCRzdHJpbmcyICE9PSAkc3RyaW5nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQSBjb21tb24gZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGFuIGV4cGxvZGVkIHN0cmluZy4KICAgICAqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqIEBwYXJhbSBhcnJheSAkcGFydHMgVGhlIGV4bG9kZWQgc3RyaW5nLgogICAgICogQHBhcmFtIHN0cmluZyAkY2hhciAgVGhlIGNoYXIgdGhhdCB3YXMgZXhwbG9kZWQgb24uCiAgICAgKiBAcmV0dXJuIG1peGVkIEZhbHNlIGlmIHRoZSBzdHJpbmcgY29udGFpbnMgdW5jbG9zZWQgcXVvdGVzL2JyYWNrZXRzLCBvciB0aGUgc3RyaW5nIG9uIHN1Y2Nlc3MuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX3NwbGl0Q2hlY2soJHBhcnRzLCAkY2hhcikKICAgIHsKICAgICAgICAkc3RyaW5nID0gJHBhcnRzWzBdOwoKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkcGFydHMpOyAkaSsrKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+X2hhc1VuY2xvc2VkUXVvdGVzKCRzdHJpbmcpCiAgICAgICAgICAgICAgICB8fCAkdGhpcy0+X2hhc1VuY2xvc2VkQnJhY2tldHMoJHN0cmluZywgJzw+JykKICAgICAgICAgICAgICAgIHx8ICR0aGlzLT5faGFzVW5jbG9zZWRCcmFja2V0cygkc3RyaW5nLCAnW10nKQogICAgICAgICAgICAgICAgfHwgJHRoaXMtPl9oYXNVbmNsb3NlZEJyYWNrZXRzKCRzdHJpbmcsICcoKScpCiAgICAgICAgICAgICAgICB8fCBzdWJzdHIoJHN0cmluZywgLTEpID09ICdcXCcpIHsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkcGFydHNbJGkgKyAxXSkpIHsKICAgICAgICAgICAgICAgICAgICAkc3RyaW5nID0gJHN0cmluZyAuICRjaGFyIC4gJHBhcnRzWyRpICsgMV07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5lcnJvciA9ICdJbnZhbGlkIGFkZHJlc3Mgc3BlYy4gVW5jbG9zZWQgYnJhY2tldCBvciBxdW90ZXMnOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5pbmRleCA9ICRpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkc3RyaW5nOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIGEgc3RyaW5nIGhhcyB1bmNsb3NlZCBxdW90ZXMgb3Igbm90LgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nICBUaGUgc3RyaW5nIHRvIGNoZWNrLgogICAgICogQHJldHVybiBib29sZWFuICBUcnVlIGlmIHRoZXJlIGFyZSB1bmNsb3NlZCBxdW90ZXMgaW5zaWRlIHRoZSBzdHJpbmcsCiAgICAgKiAgICAgICAgICAgICAgICAgIGZhbHNlIG90aGVyd2lzZS4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfaGFzVW5jbG9zZWRRdW90ZXMoJHN0cmluZykKICAgIHsKICAgICAgICAkc3RyaW5nID0gdHJpbSgkc3RyaW5nKTsKICAgICAgICAkaU1heCA9IHN0cmxlbigkc3RyaW5nKTsKICAgICAgICAkaW5fcXVvdGUgPSBmYWxzZTsKICAgICAgICAkaSA9ICRzbGFzaGVzID0gMDsKCiAgICAgICAgZm9yICg7ICRpIDwgJGlNYXg7ICsrJGkpIHsKICAgICAgICAgICAgc3dpdGNoICgkc3RyaW5nWyRpXSkgewogICAgICAgICAgICBjYXNlICdcXCc6CiAgICAgICAgICAgICAgICArKyRzbGFzaGVzOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlICciJzoKICAgICAgICAgICAgICAgIGlmICgkc2xhc2hlcyAlIDIgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICRpbl9xdW90ZSA9ICEkaW5fcXVvdGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gZGVmYXVsdCBhY3Rpb24gYmVsb3cuCgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgJHNsYXNoZXMgPSAwOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkaW5fcXVvdGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgYSBzdHJpbmcgaGFzIGFuIHVuY2xvc2VkIGJyYWNrZXRzIG9yIG5vdC4gSU1QT1JUQU5UOgogICAgICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGJvdGggYW5nbGUgYnJhY2tldHMgYW5kIHNxdWFyZSBicmFja2V0czsKICAgICAqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyBUaGUgc3RyaW5nIHRvIGNoZWNrLgogICAgICogQHBhcmFtIHN0cmluZyAkY2hhcnMgIFRoZSBjaGFyYWN0ZXJzIHRvIGNoZWNrIGZvci4KICAgICAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHRoZXJlIGFyZSB1bmNsb3NlZCBicmFja2V0cyBpbnNpZGUgdGhlIHN0cmluZywgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9oYXNVbmNsb3NlZEJyYWNrZXRzKCRzdHJpbmcsICRjaGFycykKICAgIHsKICAgICAgICAkbnVtX2FuZ2xlX3N0YXJ0ID0gc3Vic3RyX2NvdW50KCRzdHJpbmcsICRjaGFyc1swXSk7CiAgICAgICAgJG51bV9hbmdsZV9lbmQgICA9IHN1YnN0cl9jb3VudCgkc3RyaW5nLCAkY2hhcnNbMV0pOwoKICAgICAgICAkdGhpcy0+X2hhc1VuY2xvc2VkQnJhY2tldHNTdWIoJHN0cmluZywgJG51bV9hbmdsZV9zdGFydCwgJGNoYXJzWzBdKTsKICAgICAgICAkdGhpcy0+X2hhc1VuY2xvc2VkQnJhY2tldHNTdWIoJHN0cmluZywgJG51bV9hbmdsZV9lbmQsICRjaGFyc1sxXSk7CgogICAgICAgIGlmICgkbnVtX2FuZ2xlX3N0YXJ0IDwgJG51bV9hbmdsZV9lbmQpIHsKICAgICAgICAgICAgJHRoaXMtPmVycm9yID0gJ0ludmFsaWQgYWRkcmVzcyBzcGVjLiBVbm1hdGNoZWQgcXVvdGUgb3IgYnJhY2tldCAoJyAuICRjaGFycyAuICcpJzsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAoJG51bV9hbmdsZV9zdGFydCA+ICRudW1fYW5nbGVfZW5kKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBTdWIgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIG9ubHkgYnkgaGFzVW5jbG9zZWRCcmFja2V0cygpLgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIFRoZSBzdHJpbmcgdG8gY2hlY2suCiAgICAgKiBAcGFyYW0gaW50ZWdlciAmJG51bSAgICBUaGUgbnVtYmVyIG9mIG9jY3VyZW5jZXMuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjaGFyICAgVGhlIGNoYXJhY3RlciB0byBjb3VudC4KICAgICAqIEByZXR1cm4gaW50ZWdlciBUaGUgbnVtYmVyIG9mIG9jY3VyZW5jZXMgb2YgJGNoYXIgaW4gJHN0cmluZywgYWRqdXN0ZWQgZm9yIGJhY2tzbGFzaGVzLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9oYXNVbmNsb3NlZEJyYWNrZXRzU3ViKCRzdHJpbmcsICYkbnVtLCAkY2hhcikKICAgIHsKICAgICAgICAkcGFydHMgPSBleHBsb2RlKCRjaGFyLCAkc3RyaW5nKTsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkcGFydHMpOyAkaSsrKXsKICAgICAgICAgICAgaWYgKHN1YnN0cigkcGFydHNbJGldLCAtMSkgPT0gJ1xcJyB8fCAkdGhpcy0+X2hhc1VuY2xvc2VkUXVvdGVzKCRwYXJ0c1skaV0pKQogICAgICAgICAgICAgICAgJG51bS0tOwogICAgICAgICAgICBpZiAoaXNzZXQoJHBhcnRzWyRpICsgMV0pKQogICAgICAgICAgICAgICAgJHBhcnRzWyRpICsgMV0gPSAkcGFydHNbJGldIC4gJGNoYXIgLiAkcGFydHNbJGkgKyAxXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbnVtOwogICAgfQoKICAgIC8qKgogICAgICogRnVuY3Rpb24gdG8gYmVnaW4gY2hlY2tpbmcgdGhlIGFkZHJlc3MuCiAgICAgKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzIFRoZSBhZGRyZXNzIHRvIHZhbGlkYXRlLgogICAgICogQHJldHVybiBtaXhlZCBGYWxzZSBvbiBmYWlsdXJlLCBvciBhIHN0cnVjdHVyZWQgYXJyYXkgb2YgYWRkcmVzcyBpbmZvcm1hdGlvbiBvbiBzdWNjZXNzLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF92YWxpZGF0ZUFkZHJlc3MoJGFkZHJlc3MpCiAgICB7CiAgICAgICAgJGlzX2dyb3VwID0gZmFsc2U7CiAgICAgICAgJGFkZHJlc3NlcyA9IGFycmF5KCk7CgogICAgICAgIGlmICgkYWRkcmVzc1snZ3JvdXAnXSkgewogICAgICAgICAgICAkaXNfZ3JvdXAgPSB0cnVlOwoKICAgICAgICAgICAgLy8gR2V0IHRoZSBncm91cCBwYXJ0IG9mIHRoZSBuYW1lCiAgICAgICAgICAgICRwYXJ0cyAgICAgPSBleHBsb2RlKCc6JywgJGFkZHJlc3NbJ2FkZHJlc3MnXSk7CiAgICAgICAgICAgICRncm91cG5hbWUgPSAkdGhpcy0+X3NwbGl0Q2hlY2soJHBhcnRzLCAnOicpOwogICAgICAgICAgICAkc3RydWN0dXJlID0gYXJyYXkoKTsKCiAgICAgICAgICAgIC8vIEFuZCB2YWxpZGF0ZSB0aGUgZ3JvdXAgcGFydCBvZiB0aGUgbmFtZS4KICAgICAgICAgICAgaWYgKCEkdGhpcy0+X3ZhbGlkYXRlUGhyYXNlKCRncm91cG5hbWUpKXsKICAgICAgICAgICAgICAgICR0aGlzLT5lcnJvciA9ICdHcm91cCBuYW1lIGRpZCBub3QgdmFsaWRhdGUuJzsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIERvbid0IGluY2x1ZGUgZ3JvdXBzIGlmIHdlIGFyZSBub3QgbmVzdGluZwogICAgICAgICAgICAgICAgLy8gdGhlbS4gVGhpcyBhdm9pZHMgcmV0dXJuaW5nIGludmFsaWQgYWRkcmVzc2VzLgogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5uZXN0R3JvdXBzKSB7CiAgICAgICAgICAgICAgICAgICAgJHN0cnVjdHVyZSA9IG5ldyBzdGRDbGFzczsKICAgICAgICAgICAgICAgICAgICAkc3RydWN0dXJlLT5ncm91cG5hbWUgPSAkZ3JvdXBuYW1lOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkYWRkcmVzc1snYWRkcmVzcyddID0gbHRyaW0oc3Vic3RyKCRhZGRyZXNzWydhZGRyZXNzJ10sIHN0cmxlbigkZ3JvdXBuYW1lIC4gJzonKSkpOwogICAgICAgIH0KCiAgICAgICAgLy8gSWYgYSBncm91cCB0aGVuIHNwbGl0IG9uIGNvbW1hIGFuZCBwdXQgaW50byBhbiBhcnJheS4KICAgICAgICAvLyBPdGhlcndpc2UsIEp1c3QgcHV0IHRoZSB3aG9sZSBhZGRyZXNzIGluIGFuIGFycmF5LgogICAgICAgIGlmICgkaXNfZ3JvdXApIHsKICAgICAgICAgICAgd2hpbGUgKHN0cmxlbigkYWRkcmVzc1snYWRkcmVzcyddKSA+IDApIHsKICAgICAgICAgICAgICAgICRwYXJ0cyAgICAgICA9IGV4cGxvZGUoJywnLCAkYWRkcmVzc1snYWRkcmVzcyddKTsKICAgICAgICAgICAgICAgICRhZGRyZXNzZXNbXSA9ICR0aGlzLT5fc3BsaXRDaGVjaygkcGFydHMsICcsJyk7CiAgICAgICAgICAgICAgICAkYWRkcmVzc1snYWRkcmVzcyddID0gdHJpbShzdWJzdHIoJGFkZHJlc3NbJ2FkZHJlc3MnXSwgc3RybGVuKGVuZCgkYWRkcmVzc2VzKSAuICcsJykpKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRhZGRyZXNzZXNbXSA9ICRhZGRyZXNzWydhZGRyZXNzJ107CiAgICAgICAgfQoKICAgICAgICAvLyBDaGVjayB0aGF0ICRhZGRyZXNzZXMgaXMgc2V0LCBpZiBhZGRyZXNzIGxpa2UgdGhpczoKICAgICAgICAvLyBHcm91cG5hbWU6OwogICAgICAgIC8vIFRoZW4gZXJyb3JzIHdlcmUgYXBwZWFyaW5nLgogICAgICAgIGlmICghY291bnQoJGFkZHJlc3NlcykpewogICAgICAgICAgICAkdGhpcy0+ZXJyb3IgPSAnRW1wdHkgZ3JvdXAuJzsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgLy8gVHJpbSB0aGUgd2hpdGVzcGFjZSBmcm9tIGFsbCBvZiB0aGUgYWRkcmVzcyBzdHJpbmdzLgogICAgICAgIGFycmF5X21hcCgndHJpbScsICRhZGRyZXNzZXMpOwoKICAgICAgICAvLyBWYWxpZGF0ZSBlYWNoIG1haWxib3guCiAgICAgICAgLy8gRm9ybWF0IGNvdWxkIGJlIG9uZSBvZjogbmFtZSA8Z2VlemVyQGRvbWFpbi5jb20+CiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgZ2VlemVyQGRvbWFpbi5jb20KICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBnZWV6ZXIKICAgICAgICAvLyAuLi4gb3IgYW55IG90aGVyIGZvcm1hdCB2YWxpZCBieSBSRkMgODIyLgogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IGNvdW50KCRhZGRyZXNzZXMpOyAkaSsrKSB7CiAgICAgICAgICAgIGlmICghJHRoaXMtPnZhbGlkYXRlTWFpbGJveCgkYWRkcmVzc2VzWyRpXSkpIHsKICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkdGhpcy0+ZXJyb3IpKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmVycm9yID0gJ1ZhbGlkYXRpb24gZmFpbGVkIGZvcjogJyAuICRhZGRyZXNzZXNbJGldOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBOZXN0ZWQgZm9ybWF0CiAgICAgICAgaWYgKCR0aGlzLT5uZXN0R3JvdXBzKSB7CiAgICAgICAgICAgIGlmICgkaXNfZ3JvdXApIHsKICAgICAgICAgICAgICAgICRzdHJ1Y3R1cmUtPmFkZHJlc3NlcyA9ICRhZGRyZXNzZXM7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkc3RydWN0dXJlID0gJGFkZHJlc3Nlc1swXTsKICAgICAgICAgICAgfQoKICAgICAgICAvLyBGbGF0IGZvcm1hdAogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICgkaXNfZ3JvdXApIHsKICAgICAgICAgICAgICAgICRzdHJ1Y3R1cmUgPSBhcnJheV9tZXJnZSgkc3RydWN0dXJlLCAkYWRkcmVzc2VzKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRzdHJ1Y3R1cmUgPSAkYWRkcmVzc2VzOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHN0cnVjdHVyZTsKICAgIH0KCiAgICAvKioKICAgICAqIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgcGhyYXNlLgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICogQHBhcmFtIHN0cmluZyAkcGhyYXNlIFRoZSBwaHJhc2UgdG8gY2hlY2suCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gU3VjY2VzcyBvciBmYWlsdXJlLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF92YWxpZGF0ZVBocmFzZSgkcGhyYXNlKQogICAgewogICAgICAgIC8vIFNwbGl0cyBvbiBvbmUgb3IgbW9yZSBUYWIgb3Igc3BhY2UuCiAgICAgICAgJHBhcnRzID0gcHJlZ19zcGxpdCgnL1sgXFx4MDldKy8nLCAkcGhyYXNlLCAtMSwgUFJFR19TUExJVF9OT19FTVBUWSk7CgogICAgICAgICRwaHJhc2VfcGFydHMgPSBhcnJheSgpOwogICAgICAgIHdoaWxlIChjb3VudCgkcGFydHMpID4gMCl7CiAgICAgICAgICAgICRwaHJhc2VfcGFydHNbXSA9ICR0aGlzLT5fc3BsaXRDaGVjaygkcGFydHMsICcgJyk7CiAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICR0aGlzLT5pbmRleCArIDE7ICRpKyspCiAgICAgICAgICAgICAgICBhcnJheV9zaGlmdCgkcGFydHMpOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJHBocmFzZV9wYXJ0cyBhcyAkcGFydCkgewogICAgICAgICAgICAvLyBJZiBxdW90ZWQgc3RyaW5nOgogICAgICAgICAgICBpZiAoc3Vic3RyKCRwYXJ0LCAwLCAxKSA9PSAnIicpIHsKICAgICAgICAgICAgICAgIGlmICghJHRoaXMtPl92YWxpZGF0ZVF1b3RlZFN0cmluZygkcGFydCkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3MgYW4gYXRvbToKICAgICAgICAgICAgaWYgKCEkdGhpcy0+X3ZhbGlkYXRlQXRvbSgkcGFydCkpIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogRnVuY3Rpb24gdG8gdmFsaWRhdGUgYW4gYXRvbSB3aGljaCBmcm9tIHJmYzgyMiBpczoKICAgICAqIGF0b20gPSAxKjxhbnkgQ0hBUiBleGNlcHQgc3BlY2lhbHMsIFNQQUNFIGFuZCBDVExzPgogICAgICoKICAgICAqIElmIHZhbGlkYXRpb24gKCR0aGlzLT52YWxpZGF0ZSkgaGFzIGJlZW4gdHVybmVkIG9mZiwgdGhlbgogICAgICogdmFsaWRhdGVBdG9tKCkgZG9lc24ndCBhY3R1YWxseSBjaGVjayBhbnl0aGluZy4gVGhpcyBpcyBzbyB0aGF0IHlvdQogICAgICogY2FuIHNwbGl0IGEgbGlzdCBvZiBhZGRyZXNzZXMgdXAgYmVmb3JlIGVuY29kaW5nIHBlcnNvbmFsIG5hbWVzCiAgICAgKiAodW1sYXV0cywgZXRjLiksIGZvciBleGFtcGxlLgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICogQHBhcmFtIHN0cmluZyAkYXRvbSBUaGUgc3RyaW5nIHRvIGNoZWNrLgogICAgICogQHJldHVybiBib29sZWFuIFN1Y2Nlc3Mgb3IgZmFpbHVyZS4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfdmFsaWRhdGVBdG9tKCRhdG9tKQogICAgewogICAgICAgIGlmICghJHRoaXMtPnZhbGlkYXRlKSB7CiAgICAgICAgICAgIC8vIFZhbGlkYXRpb24gaGFzIGJlZW4gdHVybmVkIG9mZjsgYXNzdW1lIHRoZSBhdG9tIGlzIG9rYXkuCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgZm9yIGFueSBjaGFyIGZyb20gQVNDSUkgMCAtIEFTQ0lJIDEyNwogICAgICAgIGlmICghcHJlZ19tYXRjaCgnL15bXFx4MDAtXFx4N0VdKyQvaScsICRhdG9tLCAkbWF0Y2hlcykpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgZm9yIHNwZWNpYWxzOgogICAgICAgIGlmIChwcmVnX21hdGNoKCcvW11bKCk8PkAsO1xcOiIuIF0vJywgJGF0b20pKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIGZvciBjb250cm9sIGNoYXJhY3RlcnMgKEFTQ0lJIDAtMzEpOgogICAgICAgIGlmIChwcmVnX21hdGNoKCcvW1xceDAwLVxceDFGXSsvJywgJGF0b20pKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogRnVuY3Rpb24gdG8gdmFsaWRhdGUgcXVvdGVkIHN0cmluZywgd2hpY2ggaXM6CiAgICAgKiBxdW90ZWQtc3RyaW5nID0gPCI+ICoocXRleHQvcXVvdGVkLXBhaXIpIDwiPgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICogQHBhcmFtIHN0cmluZyAkcXN0cmluZyBUaGUgc3RyaW5nIHRvIGNoZWNrCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gU3VjY2VzcyBvciBmYWlsdXJlLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF92YWxpZGF0ZVF1b3RlZFN0cmluZygkcXN0cmluZykKICAgIHsKICAgICAgICAvLyBMZWFkaW5nIGFuZCB0cmFpbGluZyAiCiAgICAgICAgJHFzdHJpbmcgPSBzdWJzdHIoJHFzdHJpbmcsIDEsIC0xKTsKCiAgICAgICAgLy8gUGVyZm9ybSBjaGVjaywgcmVtb3ZpbmcgcXVvdGVkIGNoYXJhY3RlcnMgZmlyc3QuCiAgICAgICAgcmV0dXJuICFwcmVnX21hdGNoKCcvW1x4MERcXFxcIl0vJywgcHJlZ19yZXBsYWNlKCcvXFxcXC4vJywgJycsICRxc3RyaW5nKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGdW5jdGlvbiB0byB2YWxpZGF0ZSBhIG1haWxib3gsIHdoaWNoIGlzOgogICAgICogbWFpbGJveCA9ICAgYWRkci1zcGVjICAgICAgICAgOyBzaW1wbGUgYWRkcmVzcwogICAgICogICAgICAgICAgIC8gcGhyYXNlIHJvdXRlLWFkZHIgOyBuYW1lIGFuZCByb3V0ZS1hZGRyCiAgICAgKgogICAgICogQGFjY2VzcyBwdWJsaWMKICAgICAqIEBwYXJhbSBzdHJpbmcgJiRtYWlsYm94IFRoZSBzdHJpbmcgdG8gY2hlY2suCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gU3VjY2VzcyBvciBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWRhdGVNYWlsYm94KCYkbWFpbGJveCkKICAgIHsKICAgICAgICAvLyBBIGNvdXBsZSBvZiBkZWZhdWx0cy4KICAgICAgICAkcGhyYXNlICA9ICcnOwogICAgICAgICRjb21tZW50ID0gJyc7CiAgICAgICAgJGNvbW1lbnRzID0gYXJyYXkoKTsKCiAgICAgICAgLy8gQ2F0Y2ggYW55IFJGQzgyMiBjb21tZW50cyBhbmQgc3RvcmUgdGhlbSBzZXBhcmF0ZWx5LgogICAgICAgICRfbWFpbGJveCA9ICRtYWlsYm94OwogICAgICAgIHdoaWxlIChzdHJsZW4odHJpbSgkX21haWxib3gpKSA+IDApIHsKICAgICAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnKCcsICRfbWFpbGJveCk7CiAgICAgICAgICAgICRiZWZvcmVfY29tbWVudCA9ICR0aGlzLT5fc3BsaXRDaGVjaygkcGFydHMsICcoJyk7CiAgICAgICAgICAgIGlmICgkYmVmb3JlX2NvbW1lbnQgIT0gJF9tYWlsYm94KSB7CiAgICAgICAgICAgICAgICAvLyBGaXJzdCBjaGFyIHNob3VsZCBiZSBhICguCiAgICAgICAgICAgICAgICAkY29tbWVudCAgICA9IHN1YnN0cihzdHJfcmVwbGFjZSgkYmVmb3JlX2NvbW1lbnQsICcnLCAkX21haWxib3gpLCAxKTsKICAgICAgICAgICAgICAgICRwYXJ0cyAgICAgID0gZXhwbG9kZSgnKScsICRjb21tZW50KTsKICAgICAgICAgICAgICAgICRjb21tZW50ICAgID0gJHRoaXMtPl9zcGxpdENoZWNrKCRwYXJ0cywgJyknKTsKICAgICAgICAgICAgICAgICRjb21tZW50c1tdID0gJGNvbW1lbnQ7CgogICAgICAgICAgICAgICAgLy8gKzIgaXMgZm9yIHRoZSBicmFja2V0cwogICAgICAgICAgICAgICAgJF9tYWlsYm94ID0gc3Vic3RyKCRfbWFpbGJveCwgc3RycG9zKCRfbWFpbGJveCwgJygnLiRjb21tZW50KStzdHJsZW4oJGNvbW1lbnQpKzIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRjb21tZW50cyBhcyAkY29tbWVudCkgewogICAgICAgICAgICAkbWFpbGJveCA9IHN0cl9yZXBsYWNlKCIoJGNvbW1lbnQpIiwgJycsICRtYWlsYm94KTsKICAgICAgICB9CgogICAgICAgICRtYWlsYm94ID0gdHJpbSgkbWFpbGJveCk7CgogICAgICAgIC8vIENoZWNrIGZvciBuYW1lICsgcm91dGUtYWRkcgogICAgICAgIGlmIChzdWJzdHIoJG1haWxib3gsIC0xKSA9PSAnPicgJiYgc3Vic3RyKCRtYWlsYm94LCAwLCAxKSAhPSAnPCcpIHsKICAgICAgICAgICAgJHBhcnRzICA9IGV4cGxvZGUoJzwnLCAkbWFpbGJveCk7CiAgICAgICAgICAgICRuYW1lICAgPSAkdGhpcy0+X3NwbGl0Q2hlY2soJHBhcnRzLCAnPCcpOwoKICAgICAgICAgICAgJHBocmFzZSAgICAgPSB0cmltKCRuYW1lKTsKICAgICAgICAgICAgJHJvdXRlX2FkZHIgPSB0cmltKHN1YnN0cigkbWFpbGJveCwgc3RybGVuKCRuYW1lLic8JyksIC0xKSk7CgogICAgICAgICAgICBpZiAoJHRoaXMtPl92YWxpZGF0ZVBocmFzZSgkcGhyYXNlKSA9PT0gZmFsc2UgfHwgKCRyb3V0ZV9hZGRyID0gJHRoaXMtPl92YWxpZGF0ZVJvdXRlQWRkcigkcm91dGVfYWRkcikpID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgIC8vIE9ubHkgZ290IGFkZHItc3BlYwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIEZpcnN0IHNuaXAgYW5nbGUgYnJhY2tldHMgaWYgcHJlc2VudC4KICAgICAgICAgICAgaWYgKHN1YnN0cigkbWFpbGJveCwgMCwgMSkgPT0gJzwnICYmIHN1YnN0cigkbWFpbGJveCwgLTEpID09ICc+JykgewogICAgICAgICAgICAgICAgJGFkZHJfc3BlYyA9IHN1YnN0cigkbWFpbGJveCwgMSwgLTEpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGFkZHJfc3BlYyA9ICRtYWlsYm94OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoKCRhZGRyX3NwZWMgPSAkdGhpcy0+X3ZhbGlkYXRlQWRkclNwZWMoJGFkZHJfc3BlYykpID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgcmV0dXJuZWQuCiAgICAgICAgJG1ib3ggPSBuZXcgc3RkQ2xhc3MoKTsKCiAgICAgICAgLy8gQWRkIHRoZSBwaHJhc2UgKGV2ZW4gaWYgZW1wdHkpIGFuZCBjb21tZW50cwogICAgICAgICRtYm94LT5wZXJzb25hbCA9ICRwaHJhc2U7CiAgICAgICAgJG1ib3gtPmNvbW1lbnQgID0gaXNzZXQoJGNvbW1lbnRzKSA/ICRjb21tZW50cyA6IGFycmF5KCk7CgogICAgICAgIGlmIChpc3NldCgkcm91dGVfYWRkcikpIHsKICAgICAgICAgICAgJG1ib3gtPm1haWxib3ggPSAkcm91dGVfYWRkclsnbG9jYWxfcGFydCddOwogICAgICAgICAgICAkbWJveC0+aG9zdCAgICA9ICRyb3V0ZV9hZGRyWydkb21haW4nXTsKICAgICAgICAgICAgJHJvdXRlX2FkZHJbJ2FkbCddICE9PSAnJyA/ICRtYm94LT5hZGwgPSAkcm91dGVfYWRkclsnYWRsJ10gOiAnJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbWJveC0+bWFpbGJveCA9ICRhZGRyX3NwZWNbJ2xvY2FsX3BhcnQnXTsKICAgICAgICAgICAgJG1ib3gtPmhvc3QgICAgPSAkYWRkcl9zcGVjWydkb21haW4nXTsKICAgICAgICB9CgogICAgICAgICRtYWlsYm94ID0gJG1ib3g7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGlzIGZ1bmN0aW9uIHZhbGlkYXRlcyBhIHJvdXRlLWFkZHIgd2hpY2ggaXM6CiAgICAgKiByb3V0ZS1hZGRyID0gIjwiIFtyb3V0ZV0gYWRkci1zcGVjICI+IgogICAgICoKICAgICAqIEFuZ2xlIGJyYWNrZXRzIGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQgYXQgdGhlIHBvaW50IG9mCiAgICAgKiBnZXR0aW5nIHRvIHRoaXMgZnVuY3Rpb24uCiAgICAgKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyb3V0ZV9hZGRyIFRoZSBzdHJpbmcgdG8gY2hlY2suCiAgICAgKiBAcmV0dXJuIG1peGVkIEZhbHNlIG9uIGZhaWx1cmUsIG9yIGFuIGFycmF5IGNvbnRhaW5pbmcgdmFsaWRhdGVkIGFkZHJlc3Mvcm91dGUgaW5mb3JtYXRpb24gb24gc3VjY2Vzcy4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfdmFsaWRhdGVSb3V0ZUFkZHIoJHJvdXRlX2FkZHIpCiAgICB7CiAgICAgICAgLy8gQ2hlY2sgZm9yIGNvbG9uLgogICAgICAgIGlmIChzdHJwb3MoJHJvdXRlX2FkZHIsICc6JykgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJzonLCAkcm91dGVfYWRkcik7CiAgICAgICAgICAgICRyb3V0ZSA9ICR0aGlzLT5fc3BsaXRDaGVjaygkcGFydHMsICc6Jyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHJvdXRlID0gJHJvdXRlX2FkZHI7CiAgICAgICAgfQoKICAgICAgICAvLyBJZiAkcm91dGUgaXMgc2FtZSBhcyAkcm91dGVfYWRkciB0aGVuIHRoZSBjb2xvbiB3YXMgaW4KICAgICAgICAvLyBxdW90ZXMgb3IgYnJhY2tldHMgb3IsIG9mIGNvdXJzZSwgbm9uIGV4aXN0ZW50LgogICAgICAgIGlmICgkcm91dGUgPT09ICRyb3V0ZV9hZGRyKXsKICAgICAgICAgICAgdW5zZXQoJHJvdXRlKTsKICAgICAgICAgICAgJGFkZHJfc3BlYyA9ICRyb3V0ZV9hZGRyOwogICAgICAgICAgICBpZiAoKCRhZGRyX3NwZWMgPSAkdGhpcy0+X3ZhbGlkYXRlQWRkclNwZWMoJGFkZHJfc3BlYykpID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gVmFsaWRhdGUgcm91dGUgcGFydC4KICAgICAgICAgICAgaWYgKCgkcm91dGUgPSAkdGhpcy0+X3ZhbGlkYXRlUm91dGUoJHJvdXRlKSkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRhZGRyX3NwZWMgPSBzdWJzdHIoJHJvdXRlX2FkZHIsIHN0cmxlbigkcm91dGUgLiAnOicpKTsKCiAgICAgICAgICAgIC8vIFZhbGlkYXRlIGFkZHItc3BlYyBwYXJ0LgogICAgICAgICAgICBpZiAoKCRhZGRyX3NwZWMgPSAkdGhpcy0+X3ZhbGlkYXRlQWRkclNwZWMoJGFkZHJfc3BlYykpID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJHJvdXRlKSkgewogICAgICAgICAgICAkcmV0dXJuWydhZGwnXSA9ICRyb3V0ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcmV0dXJuWydhZGwnXSA9ICcnOwogICAgICAgIH0KCiAgICAgICAgJHJldHVybiA9IGFycmF5X21lcmdlKCRyZXR1cm4sICRhZGRyX3NwZWMpOwogICAgICAgIHJldHVybiAkcmV0dXJuOwogICAgfQoKICAgIC8qKgogICAgICogRnVuY3Rpb24gdG8gdmFsaWRhdGUgYSByb3V0ZSwgd2hpY2ggaXM6CiAgICAgKiByb3V0ZSA9IDEjKCJAIiBkb21haW4pICI6IgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICogQHBhcmFtIHN0cmluZyAkcm91dGUgVGhlIHN0cmluZyB0byBjaGVjay4KICAgICAqIEByZXR1cm4gbWl4ZWQgRmFsc2Ugb24gZmFpbHVyZSwgb3IgdGhlIHZhbGlkYXRlZCAkcm91dGUgb24gc3VjY2Vzcy4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfdmFsaWRhdGVSb3V0ZSgkcm91dGUpCiAgICB7CiAgICAgICAgLy8gU3BsaXQgb24gY29tbWEuCiAgICAgICAgJGRvbWFpbnMgPSBleHBsb2RlKCcsJywgdHJpbSgkcm91dGUpKTsKCiAgICAgICAgZm9yZWFjaCAoJGRvbWFpbnMgYXMgJGRvbWFpbikgewogICAgICAgICAgICAkZG9tYWluID0gc3RyX3JlcGxhY2UoJ0AnLCAnJywgdHJpbSgkZG9tYWluKSk7CiAgICAgICAgICAgIGlmICghJHRoaXMtPl92YWxpZGF0ZURvbWFpbigkZG9tYWluKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyb3V0ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgZG9tYWluLCB0aG91Z2ggdGhpcyBpcyBub3QgcXVpdGUgd2hhdAogICAgICogeW91IGV4cGVjdCBvZiBhIHN0cmljdCBpbnRlcm5ldCBkb21haW4uCiAgICAgKgogICAgICogZG9tYWluID0gc3ViLWRvbWFpbiAqKCIuIiBzdWItZG9tYWluKQogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICogQHBhcmFtIHN0cmluZyAkZG9tYWluIFRoZSBzdHJpbmcgdG8gY2hlY2suCiAgICAgKiBAcmV0dXJuIG1peGVkIEZhbHNlIG9uIGZhaWx1cmUsIG9yIHRoZSB2YWxpZGF0ZWQgZG9tYWluIG9uIHN1Y2Nlc3MuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX3ZhbGlkYXRlRG9tYWluKCRkb21haW4pCiAgICB7CiAgICAgICAgLy8gTm90ZSB0aGUgZGlmZmVyZW50IHVzZSBvZiAkc3ViZG9tYWlucyBhbmQgJHN1Yl9kb21haW5zCiAgICAgICAgJHN1YmRvbWFpbnMgPSBleHBsb2RlKCcuJywgJGRvbWFpbik7CgogICAgICAgIHdoaWxlIChjb3VudCgkc3ViZG9tYWlucykgPiAwKSB7CiAgICAgICAgICAgICRzdWJfZG9tYWluc1tdID0gJHRoaXMtPl9zcGxpdENoZWNrKCRzdWJkb21haW5zLCAnLicpOwogICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkdGhpcy0+aW5kZXggKyAxOyAkaSsrKQogICAgICAgICAgICAgICAgYXJyYXlfc2hpZnQoJHN1YmRvbWFpbnMpOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJHN1Yl9kb21haW5zIGFzICRzdWJfZG9tYWluKSB7CiAgICAgICAgICAgIGlmICghJHRoaXMtPl92YWxpZGF0ZVN1YmRvbWFpbih0cmltKCRzdWJfZG9tYWluKSkpCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBNYW5hZ2VkIHRvIGdldCBoZXJlLCBzbyByZXR1cm4gaW5wdXQuCiAgICAgICAgcmV0dXJuICRkb21haW47CiAgICB9CgogICAgLyoqCiAgICAgKiBGdW5jdGlvbiB0byB2YWxpZGF0ZSBhIHN1YmRvbWFpbjoKICAgICAqICAgc3ViZG9tYWluID0gZG9tYWluLXJlZiAvIGRvbWFpbi1saXRlcmFsCiAgICAgKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdWJkb21haW4gVGhlIHN0cmluZyB0byBjaGVjay4KICAgICAqIEByZXR1cm4gYm9vbGVhbiBTdWNjZXNzIG9yIGZhaWx1cmUuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX3ZhbGlkYXRlU3ViZG9tYWluKCRzdWJkb21haW4pCiAgICB7CiAgICAgICAgaWYgKHByZWdfbWF0Y2goJ3xeXFsoLiopXSR8JywgJHN1YmRvbWFpbiwgJGFycikpewogICAgICAgICAgICBpZiAoISR0aGlzLT5fdmFsaWRhdGVEbGl0ZXJhbCgkYXJyWzFdKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghJHRoaXMtPl92YWxpZGF0ZUF0b20oJHN1YmRvbWFpbikpIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIEdvdCBoZXJlLCBzbyByZXR1cm4gc3VjY2Vzc2Z1bC4KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgZG9tYWluIGxpdGVyYWw6CiAgICAgKiAgIGRvbWFpbi1saXRlcmFsID0gICJbIiAqKGR0ZXh0IC8gcXVvdGVkLXBhaXIpICJdIgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICogQHBhcmFtIHN0cmluZyAkZGxpdGVyYWwgVGhlIHN0cmluZyB0byBjaGVjay4KICAgICAqIEByZXR1cm4gYm9vbGVhbiBTdWNjZXNzIG9yIGZhaWx1cmUuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX3ZhbGlkYXRlRGxpdGVyYWwoJGRsaXRlcmFsKQogICAgewogICAgICAgIHJldHVybiAhcHJlZ19tYXRjaCgnLyguKVtdW1x4MERcXFxcXS8nLCAkZGxpdGVyYWwsICRtYXRjaGVzKSAmJiAkbWF0Y2hlc1sxXSAhPSAnXFwnOwogICAgfQoKICAgIC8qKgogICAgICogRnVuY3Rpb24gdG8gdmFsaWRhdGUgYW4gYWRkci1zcGVjLgogICAgICoKICAgICAqIGFkZHItc3BlYyA9IGxvY2FsLXBhcnQgIkAiIGRvbWFpbgogICAgICoKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICogQHBhcmFtIHN0cmluZyAkYWRkcl9zcGVjIFRoZSBzdHJpbmcgdG8gY2hlY2suCiAgICAgKiBAcmV0dXJuIG1peGVkIEZhbHNlIG9uIGZhaWx1cmUsIG9yIHRoZSB2YWxpZGF0ZWQgYWRkci1zcGVjIG9uIHN1Y2Nlc3MuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX3ZhbGlkYXRlQWRkclNwZWMoJGFkZHJfc3BlYykKICAgIHsKICAgICAgICAkYWRkcl9zcGVjID0gdHJpbSgkYWRkcl9zcGVjKTsKCiAgICAgICAgLy8gU3BsaXQgb24gQCBzaWduIGlmIHRoZXJlIGlzIG9uZS4KICAgICAgICBpZiAoc3RycG9zKCRhZGRyX3NwZWMsICdAJykgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICRwYXJ0cyAgICAgID0gZXhwbG9kZSgnQCcsICRhZGRyX3NwZWMpOwogICAgICAgICAgICAkbG9jYWxfcGFydCA9ICR0aGlzLT5fc3BsaXRDaGVjaygkcGFydHMsICdAJyk7CiAgICAgICAgICAgICRkb21haW4gICAgID0gc3Vic3RyKCRhZGRyX3NwZWMsIHN0cmxlbigkbG9jYWxfcGFydCAuICdAJykpOwoKICAgICAgICAvLyBObyBAIHNpZ24gc28gYXNzdW1lIHRoZSBkZWZhdWx0IGRvbWFpbi4KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbG9jYWxfcGFydCA9ICRhZGRyX3NwZWM7CiAgICAgICAgICAgICRkb21haW4gICAgID0gJHRoaXMtPmRlZmF1bHRfZG9tYWluOwogICAgICAgIH0KCiAgICAgICAgaWYgKCgkbG9jYWxfcGFydCA9ICR0aGlzLT5fdmFsaWRhdGVMb2NhbFBhcnQoJGxvY2FsX3BhcnQpKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAoKCRkb21haW4gICAgID0gJHRoaXMtPl92YWxpZGF0ZURvbWFpbigkZG9tYWluKSkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7CgogICAgICAgIC8vIEdvdCBoZXJlIHNvIHJldHVybiBzdWNjZXNzZnVsLgogICAgICAgIHJldHVybiBhcnJheSgnbG9jYWxfcGFydCcgPT4gJGxvY2FsX3BhcnQsICdkb21haW4nID0+ICRkb21haW4pOwogICAgfQoKICAgIC8qKgogICAgICogRnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIGxvY2FsIHBhcnQgb2YgYW4gYWRkcmVzczoKICAgICAqICAgbG9jYWwtcGFydCA9IHdvcmQgKigiLiIgd29yZCkKICAgICAqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsX3BhcnQKICAgICAqIEByZXR1cm4gbWl4ZWQgRmFsc2Ugb24gZmFpbHVyZSwgb3IgdGhlIHZhbGlkYXRlZCBsb2NhbCBwYXJ0IG9uIHN1Y2Nlc3MuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX3ZhbGlkYXRlTG9jYWxQYXJ0KCRsb2NhbF9wYXJ0KQogICAgewogICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJy4nLCAkbG9jYWxfcGFydCk7CiAgICAgICAgJHdvcmRzID0gYXJyYXkoKTsKCiAgICAgICAgLy8gU3BsaXQgdGhlIGxvY2FsX3BhcnQgaW50byB3b3Jkcy4KICAgICAgICB3aGlsZSAoY291bnQoJHBhcnRzKSA+IDApewogICAgICAgICAgICAkd29yZHNbXSA9ICR0aGlzLT5fc3BsaXRDaGVjaygkcGFydHMsICcuJyk7CiAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICR0aGlzLT5pbmRleCArIDE7ICRpKyspIHsKICAgICAgICAgICAgICAgIGFycmF5X3NoaWZ0KCRwYXJ0cyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFZhbGlkYXRlIGVhY2ggd29yZC4KICAgICAgICBmb3JlYWNoICgkd29yZHMgYXMgJHdvcmQpIHsKICAgICAgICAgICAgLy8gSWYgdGhpcyB3b3JkIGNvbnRhaW5zIGFuIHVucXVvdGVkIHNwYWNlLCBpdCBpcyBpbnZhbGlkLiAoNi4yLjQpCiAgICAgICAgICAgIGlmIChzdHJwb3MoJHdvcmQsICcgJykgJiYgJHdvcmRbMF0gIT09ICciJykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJHRoaXMtPl92YWxpZGF0ZVBocmFzZSh0cmltKCR3b3JkKSkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBNYW5hZ2VkIHRvIGdldCBoZXJlLCBzbyByZXR1cm4gdGhlIGlucHV0LgogICAgICAgIHJldHVybiAkbG9jYWxfcGFydDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXBwcm94aW1hdGUgY291bnQgb2YgaG93IG1hbnkgYWRkcmVzc2VzIGFyZSBpbiB0aGUKICAgICAqIGdpdmVuIHN0cmluZy4gVGhpcyBpcyBBUFBST1hJTUFURSBhcyBpdCBvbmx5IHNwbGl0cyBiYXNlZCBvbiBhCiAgICAgKiBjb21tYSB3aGljaCBoYXMgbm8gcHJlY2VkaW5nIGJhY2tzbGFzaC4gQ291bGQgYmUgdXNlZnVsIGFzCiAgICAgKiBsYXJnZSBhbW91bnRzIG9mIGFkZHJlc3NlcyB3aWxsIGVuZCB1cCBwcm9kdWNpbmcgKmxhcmdlKgogICAgICogc3RydWN0dXJlcyB3aGVuIHVzZWQgd2l0aCBwYXJzZUFkZHJlc3NMaXN0KCkuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgJGRhdGEgQWRkcmVzc2VzIHRvIGNvdW50CiAgICAgKiBAcmV0dXJuIGludCAgICAgICAgICBBcHByb3hpbWF0ZSBjb3VudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwcm94aW1hdGVDb3VudCgkZGF0YSkKICAgIHsKICAgICAgICByZXR1cm4gY291bnQocHJlZ19zcGxpdCgnLyg/PCFcXFxcKSwvJywgJGRhdGEpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgaXMgYSBlbWFpbCB2YWxpZGF0aW5nIGZ1bmN0aW9uIHNlcGFyYXRlIHRvIHRoZSByZXN0IG9mIHRoZQogICAgICogY2xhc3MuIEl0IHNpbXBseSB2YWxpZGF0ZXMgd2hldGhlciBhbiBlbWFpbCBpcyBvZiB0aGUgY29tbW9uCiAgICAgKiBpbnRlcm5ldCBmb3JtOiA8dXNlcj5APGRvbWFpbj4uIFRoaXMgY2FuIGJlIHN1ZmZpY2llbnQgZm9yIG1vc3QKICAgICAqIHBlb3BsZS4gT3B0aW9uYWwgc3RyaWN0ZXIgbW9kZSBjYW4gYmUgdXRpbGlzZWQgd2hpY2ggcmVzdHJpY3RzCiAgICAgKiBtYWlsYm94IGNoYXJhY3RlcnMgYWxsb3dlZCB0byBhbHBoYW51bWVyaWMsIGZ1bGwgc3RvcCwgaHlwaGVuCiAgICAgKiBhbmQgdW5kZXJzY29yZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGRhdGEgICBBZGRyZXNzIHRvIGNoZWNrCiAgICAgKiBAcGFyYW0gIGJvb2xlYW4gJHN0cmljdCBPcHRpb25hbCBzdHJpY3RlciBtb2RlCiAgICAgKiBAcmV0dXJuIG1peGVkICAgICAgICAgICBGYWxzZSBpZiBpdCBmYWlscywgYW4gaW5kZXhlZCBhcnJheQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWUvZG9tYWluIGlmIGl0IG1hdGNoZXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzVmFsaWRJbmV0QWRkcmVzcygkZGF0YSwgJHN0cmljdCA9IGZhbHNlKQogICAgewogICAgICAgICRyZWdleCA9ICRzdHJpY3QgPyAnL14oWy4wLTlhLXpfKy1dKylAKChbMC05YS16LV0rXC4pK1swLTlhLXpdezIsfSkkL2knIDogJy9eKFsqKyEuJiMkfFwnXFwlXC8wLTlhLXpeX2B7fT0/fjotXSspQCgoWzAtOWEtei1dK1wuKStbMC05YS16XXsyLH0pJC9pJzsKICAgICAgICBpZiAocHJlZ19tYXRjaCgkcmVnZXgsIHRyaW0oJGRhdGEpLCAkbWF0Y2hlcykpIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCRtYXRjaGVzWzFdLCAkbWF0Y2hlc1syXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KCn0K]]></data>
	</file>
	<file>
	  <filename>/lib/class.ModuleConfig.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KbmFtZXNwYWNlIENNU01TRXh0Ow0KDQoNCnVzZSBBcnJheUFjY2VzczsNCg0KLyoqDQogKiBDbGFzcyBNb2R1bGVDb25maWcNCiAqDQogKiBAcGFja2FnZSBDTVNNU0V4dA0KICovDQpjbGFzcyBNb2R1bGVDb25maWcgaW1wbGVtZW50cyBBcnJheUFjY2Vzcw0Kew0KICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICMgQXR0cmlidXRlcw0KICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIA0KICAvKioNCiAgICogQHZhciBhcnJheQ0KICAgKi8NCiAgcHJpdmF0ZSBhcnJheSAkX2RhdGEgPSBbXTsNCiAgLyoqDQogICAqIEB2YXIgXGNtc19jb25maWcNCiAgICovDQogIHByaXZhdGUgXGNtc19jb25maWcgJF9DTVNNU19DRkc7DQogIA0KICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICMgTWFnaWMgbWV0aG9kcw0KICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIA0KICAvKioNCiAgICogTW9kdWxlQ29uZmlnIGNvbnN0cnVjdG9yLg0KICAgKg0KICAgKiBAcGFyYW0gXENNU01vZHVsZSAkbW9kDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoXENNU01vZHVsZSAkbW9kKQ0KICB7DQogICAgJHRoaXMtPl9DTVNNU19DRkcgICAgICAgICAgICAgICAgICAgID0gXGNtc21zKCktPkdldENvbmZpZygpOw0KICAgICR0aGlzLT5fZGF0YVsnbW9kdWxlX3BhdGgnXSAgICAgICAgICA9ICRtb2QtPkdldE1vZHVsZVBhdGgoKTsNCiAgICAkdGhpcy0+X2RhdGFbJ21vZF9uYW1lJ10gICAgICAgICAgICAgPSAkbW9kLT5HZXROYW1lKCk7DQogICAgDQogICAgJGZuID0gXGNtc19qb2luX3BhdGgoJHRoaXMtPl9kYXRhWydtb2R1bGVfcGF0aCddLCAnZGF0YScsICdjZmcuaW5jJyk7DQogICAgJGNvbmZpZyA9IFtdOw0KICAgIA0KICAgIGlmKCBcaXNfcmVhZGFibGUoJGZuKSApDQogICAgew0KICAgICAgaW5jbHVkZSgkZm4pOw0KICAgICAgDQogICAgICBpZiggaXNzZXQoJGNvbmZpZykgKQ0KICAgICAgew0KICAgICAgICBmb3JlYWNoKCRjb25maWcgYXMgJGtleSA9PiAkdmFsdWUpDQogICAgICAgIHsNCiAgICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSAkdmFsdWU7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogIH0NCiAgDQogIC8qKg0KICAgKiBHZXQgYSBkYXRhIGJ5IGtleQ0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nIFRoZSBrZXkgZGF0YSB0byByZXRyaWV2ZQ0KICAgKg0KICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgKiBAcmV0dXJuIG1peGVkfG51bGwNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBfX2dldCAoJGtleSkNCiAgew0KICAgIGlmKCR0aGlzLT5fQ01TTVNfQ0ZHLT5vZmZzZXRFeGlzdHMoJGtleSkpIHsgcmV0dXJuICR0aGlzLT5fQ01TTVNfQ0ZHWyRrZXldOyB9DQogICAgDQogICAgcmV0dXJuICR0aGlzLT5fZGF0YVska2V5XTsNCiAgfQ0KICANCiAgLyoqDQogICAqIGlzIHRyaWdnZXJlZCBieSBjYWxsaW5nIGlzc2V0KCkgb3IgZW1wdHkoKSBvbiBpbmFjY2Vzc2libGUgbWVtYmVycy4NCiAgICoNCiAgICogQHBhcmFtICRrZXkNCiAgICoNCiAgICogQHJldHVybiBib29sDQogICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2Uub29wNS5vdmVybG9hZGluZy5waHAjbGFuZ3VhZ2Uub29wNS5vdmVybG9hZGluZy5tZW1iZXJzDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gX19pc3NldCgka2V5KQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5vZmZzZXRFeGlzdHMoJGtleSk7DQogIH0NCiAgDQogIA0KICAvKioNCiAgICogQHBhcmFtICRrZXkNCiAgICogQHBhcmFtICR2YWx1ZQ0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIF9fc2V0KCRrZXksICR2YWx1ZSkNCiAgew0KICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignUmVhZCBPbmx5Jyk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gbWl4ZWQgJGtleQ0KICAgKg0KICAgKiBAcmV0dXJuIGJvb2wNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJGtleSkgOiBib29sDQogIHsNCiAgICByZXR1cm4gKCBpc3NldCgkdGhpcy0+X2RhdGFbJGtleV0pIHx8ICR0aGlzLT5fQ01TTVNfQ0ZHLT5vZmZzZXRFeGlzdHMoJGtleSkgKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSBtaXhlZCAka2V5DQogICAqDQogICAqIEByZXR1cm4gYm9vbHxtaXhlZHxzdHJpbmd8dm9pZHxudWxsDQogICAqLw0KICAjW1xSZXR1cm5UeXBlV2lsbENoYW5nZV0NCiAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEdldCgka2V5KQ0KICB7DQogICAgaWYoICR0aGlzLT5fQ01TTVNfQ0ZHLT5vZmZzZXRFeGlzdHMoJGtleSkgKSB7IHJldHVybiAkdGhpcy0+X0NNU01TX0NGR1ska2V5XTsgfQ0KICAgIA0KICAgIGlmKGlzc2V0KCR0aGlzLT5fZGF0YVska2V5XSkpDQogICAgew0KICAgICAgJHJldCA9ICR0aGlzLT5fZGF0YVska2V5XTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICRyZXQgPSBOVUxMOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHJldDsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSBtaXhlZCAka2V5DQogICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRTZXQoJGtleSwgJHZhbHVlKSA6IHZvaWQNCiAgew0KICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignUmVhZCBPbmx5Jyk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gbWl4ZWQgJGtleQ0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFVuc2V0KCRrZXkpIDogdm9pZA0KICB7DQogICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdSZWFkIE9ubHknKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSAka2V5DQogICAqDQogICAqIEByZXR1cm4gYm9vbHxtaXhlZHxzdHJpbmd8dm9pZHxudWxsDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gZ2V0KCRrZXkpDQogIHsNCiAgICBpZigkdGhpcy0+X0NNU01TX0NGRy0+b2Zmc2V0RXhpc3RzKCRrZXkpKSB7IHJldHVybiAkdGhpcy0+X0NNU01TX0NGR1ska2V5XTsgfQ0KICAgIGlmKCAkdGhpcy0+b2Zmc2V0RXhpc3RzKCRrZXkpICkgeyByZXR1cm4gJHRoaXMtPl9kYXRhWyRrZXldOyB9DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gJGtleQ0KICAgKiBAcGFyYW0gJHZhbHVlDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gc2V0KCRrZXksICR2YWx1ZSkNCiAgew0KICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignUmVhZCBPbmx5Jyk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gJGtleQ0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIGVyYXNlKCRrZXkpDQogIHsNCiAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1JlYWQgT25seScpOw0KICB9DQp9DQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.module_helper.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBjb250YWlucyBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgdG8gYXNzaXN0IG1vZHVsZXMuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBVdGlsaXRpZXMKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxMCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCgovKioKICogVGhlIG1vZHVsZSBoZWxwZXIgY2xhc3MgaXMgYW4gYWJzdHJhY3QgY2xhc3MsIGludGVuZGVkIHRvIGhlbHAgc2VwYXJhdGUgZnVuY3Rpb25hbGl0eSBpbnRvIGRpZmZlcmVudCBjbGFzc2VzCiAqIEVhY2ggaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBpcyBhIHNpbmdsZXRvbi4KICoKICogQGRlcHJlY2F0ZWQKICovCmNsYXNzIG1vZHVsZV9oZWxwZXIKewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X2luc3RhbmNlKCRuYW1lKQogICAgewogICAgICAgIHJldHVybiB4dF91dGlsczo6Z2V0X21vZHVsZSgkbmFtZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBwcmVmZXJlbmNlIGZyb20gYSBuYW1lZCBtb2R1bGUuCiAgICAgKgogICAgICogQGRlcHJlY2F0ZWQKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1vZHVsZW5hbWUgVGhlIG1vZHVsZSBuYW1lLgogICAgICogQHBhcmFtIHN0cmluZyAkcHJlZmVyZW5jZSBUaGUgcHJlZmVyZW5jZSBuYW1lLgogICAgICogQHBhcmFtIHN0cmluZyAkZGZsdCBUaGUgZGVmYXVsdCB2YWx1ZSB0byByZXR1cm4uCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGdldF9wcmVmZXJlbmNlKCRtb2R1bGVuYW1lLCRwcmVmZXJlbmNlLCRkZmx0ID0gbnVsbCkKICAgIHsKICAgICAgICAkbW9kdWxlID0gc2VsZjo6Z2V0X2luc3RhbmNlKChzdHJpbmcpICRtb2R1bGVuYW1lKTsKICAgICAgICBpZiggISRtb2R1bGUgKSByZXR1cm4gJGRmbHQ7CgogICAgICAgIHJldHVybiAkbW9kdWxlLT5HZXRQcmVmZXJlbmNlKChzdHJpbmcpICRwcmVmZXJlbmNlLCRkZmx0KTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiBhIGxpc3Qgb2YgYWxsIG9mIHRoZSBtb2R1bGVzIHRoYXQgaGF2ZSB0aGUgc3BlY2lmaWVkIG1ldGhvZC4KICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICogQHBhcmFtIHN0cmluZyAkbWV0aG9kbmFtZQogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGdldF9tb2R1bGVzX3dpdGhfbWV0aG9kKCRtZXRob2RuYW1lKQogICAgewogICAgICAgICRyZXMgPSBhcnJheSgpOwoKICAgICAgICAkbW9kdWxlcyA9IE1vZHVsZU9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpLT5HZXRJbnN0YWxsZWRNb2R1bGVzKCk7CiAgICAgICAgZm9yZWFjaCggJG1vZHVsZXMgYXMgJG9uZW1vZHVsZSApIHsKICAgICAgICAgICAgJG1vZCA9IE1vZHVsZU9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpLT5nZXRfbW9kdWxlX2luc3RhbmNlKCRvbmVtb2R1bGUpOwogICAgICAgICAgICBpZiggISRtb2QgKSBjb250aW51ZTsKCiAgICAgICAgICAgIGlmKCAhbWV0aG9kX2V4aXN0cygkbW9kLCRtZXRob2RuYW1lKSApIGNvbnRpbnVlOwogICAgICAgICAgICAkcmVzWyRtb2QtPkdldE5hbWUoKV0gPSAkbW9kLT5HZXRGcmllbmRseU5hbWUoKTsKICAgICAgICB9CgogICAgICAgIGlmKCBlbXB0eSgkcmVzKSApIHJldHVybiBGQUxTRTsKICAgICAgICByZXR1cm4gJHJlczsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiBhIGxpc3Qgb2YgYWxsIG9mIHRoZSBtb2R1bGVzIHRoYXQgZXh0ZW5kIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2xhc3NuYW1lCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X21vZHVsZXNfYnlfaW50ZXJmYWNlKCRjbGFzc25hbWUpCiAgICB7CiAgICAgICAgJHJlcyA9IFtdOwogICAgICAgIGlmKCBzdGFydHN3aXRoKCAkY2xhc3NuYW1lLCAnXFwnKSApICRjbGFzc25hbWUgPSBzdWJzdHIoJGNsYXNzbmFtZSwxKTsKCiAgICAgICAgJG1vZHVsZXMgPSBNb2R1bGVPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKS0+R2V0SW5zdGFsbGVkTW9kdWxlcygpOwogICAgICAgIGZvcmVhY2goICRtb2R1bGVzIGFzICRvbmVtb2R1bGUgKSB7CiAgICAgICAgICAgICRtb2QgPSBNb2R1bGVPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKS0+Z2V0X21vZHVsZV9pbnN0YW5jZSgkb25lbW9kdWxlKTsKICAgICAgICAgICAgaWYoICEkbW9kICkgY29udGludWU7CgogICAgICAgICAgICAkdG1wID0gY2xhc3NfaW1wbGVtZW50cygkbW9kKTsKICAgICAgICAgICAgaWYoICFpbl9hcnJheSggJGNsYXNzbmFtZSwgJHRtcCApICkgY29udGludWU7CiAgICAgICAgICAgICRyZXNbJG1vZC0+R2V0TmFtZSgpXSA9ICRtb2QtPkdldEZyaWVuZGx5TmFtZSgpOwogICAgICAgIH0KCiAgICAgICAgaWYoIGVtcHR5KCRyZXMpICkgcmV0dXJuOwogICAgICAgIHJldHVybiAkcmVzOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGEgbGlzdCBvZiBhbGwgb2YgdGhlIG1vZHVsZXMgdGhhdCBoYXZlIHRoZSBzcGVjaWZpZWQgY2FwYWJpbGl0eS4KICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICogQHBhcmFtIHN0cmluZyAkY2FwYWJpbGl0eQogICAgICogQHBhcmFtIGFycmF5ICRwYXJhbXMKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBnZXRfbW9kdWxlc193aXRoX2NhcGFiaWxpdHkoJGNhcGFiaWxpdHksJHBhcmFtcyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZShNT0RfWFRNT0RVTEUpOwogICAgICAgICR0bXAgPSAkbW9kLT5HZXRNb2R1bGVzV2l0aENhcGFiaWxpdHkoJGNhcGFiaWxpdHksJHBhcmFtcyk7CiAgICAgICAgaWYoIGlzX2FycmF5KCR0bXApICYmIGNvdW50KCR0bXApICkgewogICAgICAgICAgICAkdDIgPSBhcnJheSgpOwogICAgICAgICAgICBmb3IoICRpID0gMCwgJG4gPSBjb3VudCgkdG1wKTsgJGkgPCAkbjsgJGkrKyApIHsKICAgICAgICAgICAgICAgICR0MlskdG1wWyRpXV0gPSAkdG1wWyRpXTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gJHQyOwogICAgICAgIH0KICAgIH0KfSAvLyBjbGFzcwoKIwojIEVPRgojCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.module_migrator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiNCRUdJTl9MSUNFTlNFDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24NCiMgIEFuIGFkZC1vbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIHVzZWZ1bCBmdW5jdGlvbnMNCiMgIGFuZCBjb21tb25seSB1c2VkIGd1aSBjYXBhYmlsaXRpZXMgdG8gb3RoZXIgbW9kdWxlcy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIEEgZm9yayBvZjoNCiMNCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwNCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykNCiMNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojDQojIENNU01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA2IC0gMjAyMSBieSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbg0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpDQojIFZpc2l0IHRoZSBDTVNNUyBIb21lcGFnZSBhdDogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KIw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCiMNCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkDQojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQ0KIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TDQojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbg0KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLg0KIw0KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQ0KIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMDQojDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KI0VORF9MSUNFTlNFDQoNCm5hbWVzcGFjZSBDTVNNU0V4dDsNCg0KDQp1c2UgQ21zTW9kdWxlOw0KDQpjbGFzcyBNaWdyYXRvckV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24ge30NCmNsYXNzIE1pZ3JhdG9yUnVudGltZUV4Y2VwdGlvbiBleHRlbmRzIE1pZ3JhdG9yRXhjZXB0aW9uIHt9DQpjbGFzcyBNaWdyYXRvckRiRXhjZXB0aW9uIGV4dGVuZHMgTWlncmF0b3JFeGNlcHRpb24ge30NCmNsYXNzIE1pZ3JhdG9yRGJEcm9wRXhjZXB0aW9uIGV4dGVuZHMgTWlncmF0b3JFeGNlcHRpb24ge30NCmNsYXNzIE1pZ3JhdG9yRGJSb2xsQmFja0V4Y2VwdGlvbiBleHRlbmRzIE1pZ3JhdG9yRXhjZXB0aW9uIHt9DQoNCi8qKg0KICogQ2xhc3MgbW9kdWxlX21pZ3JhdG9yDQogKg0KICogVGhpcyBjbGFzcyBoYXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBiYXNpYyBtZXRob2RzDQogKiBuZWVkZWQgdG8gbWlncmF0ZSBzZXR0aW5ncyBhbmQgZGF0YSBmcm9tIHRoZSBzb3VyY2UgbW9kdWxlDQogKiB0byBpdHMgZm9yaywgdGhlIHRhcmdldCBtb2R1bGUNCiAqDQogKiBUaGUgY2xhc3MgYXR0ZW1wdHMgdG8gY3JlYXRlIG9uZSBvciBtb3JlIHRlbXBvcmFyeSBEQiB0YWJsZXMNCiAqIGlmIGEgZGF0YWJhc2UgbWlncmF0aW9uIGlzIHJlcXVpcmVkIGFuZCB0cmllcyB0byByZWNyZWF0ZQ0KICogdGhlIHNvdXJjZSB0YWJsZXMgYXMgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBvbmVzDQogKg0KICogT24gYSBzZWNvbmQgcGFzcyBpdCB0cmllcyB0byByZWNyZWF0ZSB0aGUgaW5kZXhlcw0KICogYXMgcGVyIHRoZSBhcnJheSBzdHJ1Y3R1cmUgZGVzY3JpYmVkIGJlbGxvdw0KICogbm90ZSBvbiBpbmRleGVzOiBQUklNQVJZIGluZGV4ZXMgYXJlIGFsd2F5cyBhdXRvbWF0aWNhbGx5IGNvcGllZCwNCiAqIHRoZXJlIGlzIG5vIG5lZWQgdG8gYWRkIHRoZW0gdG8gdGhlIGluZGV4IGxpc3Q7DQogKiB0cnlpbmcgdG8gZG8gc28gd2lsbCByZXN1bHQgaW4gYSBEQiBlcnJvciBhbnl3YXkuLi4NCiAqDQogKiBJZiBhbGwgZ29lcyB3ZWxsIGl0IGNvcGllcyB0aGUgcHJlZmVyZW5jZXMgZnJvbSB0aGUgc291cmNlIG1vZHVsZQ0KICoNCiAqIFRoZSBtaWdyYXRvciBpcyBhbHNvIGFibGUgdG8gY29weSBmaWxlcyBmcm9tIGEgbGlzdCBvZiBzb3VyY2UgZmlsZXMgb3IgZm9sZGVycw0KICogdG8gYSB0YXJnZXQgbGlzdCBvZiBmb2xkZXJzDQogKg0KICogQG5vdGU6IHRoZSBjbGFzcyBpcyBleHBhbmRpbmcgZnJlcXVlbnRseSwgdGhlcmUgd2lsbCBzdXJlbHkgYmUNCiAqIHVuZG9jdW1lbnRlZCBmZWF0dXJlcyBhdCBvbmUgcG9pbnQgb3IgYW5vdGhlcg0KICoNCiAqIEBhdXRob3IgRmVybmFuZG8gTW9yZ2FkbyBha2EgSm8gTW9yZw0KICogQHBhY2thZ2UgQ01TTVNFeHQNCiAqLw0KY2xhc3MgbW9kdWxlX21pZ3JhdG9yDQp7DQogIA0KICAvKioNCiAgICogQHZhciBib29sDQogICAqICAgICAgICAgIHNob3VsZCBiZSB0cnVlIGFmdGVyIGluaXRpYWxpemF0aW9uDQogICAqLw0KICBwcm90ZWN0ZWQgYm9vbCAgICAgICAgICAgICAgICAgICRfaW5pdGlhbGl6ZWQgICAgICA9IEZBTFNFOw0KICBwcm90ZWN0ZWQgc3RyaW5nICAgICAgICAgICAgICAgICRfc291cmNlX21vZHVsZV9uYW1lOw0KICBwcm90ZWN0ZWQgc3RyaW5nICAgICAgICAgICAgICAgICRfdGFyZ2V0X21vZHVsZV9uYW1lOw0KICBwcm90ZWN0ZWQgYm9vbCAgICAgICAgICAgICAgICAgICRfc291cmNlX2luc3RhbGxlZCA9IEZBTFNFOw0KICBwcm90ZWN0ZWQgQ21zTW9kdWxlICAgICAgICAgICAgICRfdGFyZ2V0X21vZHVsZTsNCiAgcHJvdGVjdGVkIENtc01vZHVsZSAgICAgICAgICAgICAkX3NvdXJjZV9tb2R1bGU7DQogIHByb3RlY3RlZCAgICAgICAgICAgICAgICAgICAgICAgJF9kYjsNCiAgcHJvdGVjdGVkIGludCAgICAgICAgICAgICAgICAgICAkX2ZsYWdzID0gc2VsZjo6REVGQVVMVDsNCiAgcHJvdGVjdGVkIHN0cmluZyAgICAgICAgICAgICAgICAkX3N0bWEgPSAnbW9kdWxlJzsNCiAgcHJvdGVjdGVkIHN0cmluZyAgICAgICAgICAgICAgICAkX3R0bWEgPSAnbW9kdWxlJzsNCiAgDQogIC8qKg0KICAgKiBUaGUgdGFibGVzIHRvIGJlIGNvcGllZA0KICAgKiBAdmFyIGFycmF5DQogICAqDQogICAqICAgICAgICAgICBmb3JtYXQgb2YgdGhpcyBhcnJheSBzaG91bGQgYmUNCiAgICogICAgICAgICAgIFsNCiAgICogICAgICAgICAgICAgJycsIC8vIDwtLSBlbXB0eSBpZiB0aGUgdGFibGUgbmFtZSBpcyA9PT0gdG8gdGhlIG1vZHVsZSBuYW1lDQogICAqICAgICAgICAgICAgICd0YWJsZV9uYW1lX2EnLA0KICAgKiAgICAgICAgICAgICAndGFibGVfbmFtZV9iJywNCiAgICogICAgICAgICAgICAgJ3RhYmxlX25hbWVfYycsDQogICAqICAgICAgICAgICAgICAgICAuLi4uLi4NCiAgICogICAgICAgICAgICAgJ3RhYmxlX25hbWVfbicNCiAgICogICAgICAgICAgIF0NCiAgICovDQogIHByb3RlY3RlZCBhcnJheSAkX3RhYmxlcyAgICAgICAgID0gW107DQogIA0KICAvKioNCiAgICogVGhlIGxpc3Qgb2YgaW5kZXhlcyB0byBiZSBjcmVhdGVkIGJ5IHRhYmxlDQogICAqIEB2YXIgYXJyYXkNCiAgICoNCiAgICogbm90ZToNCiAgICogICAgICAgIHRoZSBmb3JtYXQgZm9yIHRoaXMgYXJyYXkgc2hvdWxkIGJlDQogICAqICAgICAgICBbDQogICAqICAgICAgICAgIFsndGFibGVfbmFtZV9hJywgJ2luZGV4X25hbWVfYSddLA0KICAgKiAgICAgICAgICBbJ3RhYmxlX25hbWVfYicsICdpbmRleF9uYW1lX2InXSwNCiAgICogICAgICAgICAgICAgICAgICAgIC4uLi4uLi4NCiAgICogICAgICAgICAgWyd0YWJsZV9uYW1lX24nLCAnaW5kZXhfbmFtZV9uJ10NCiAgICogICAgICAgIF0NCiAgICogICAgICAgIGVtcHR5IHRhYmxlIG5hbWUgaWYgaXQgaXMgdGhlIG1vZHVsZSBuYW1lDQogICAqIEBzZWUgJF90YWJsZXMNCiAgICovDQogIHByb3RlY3RlZCBhcnJheSAkX2luZGV4ZXNfdGFibGVzID0gW107DQogIA0KICAvKioNCiAgICogVGhlIGxpc3Qgb2YgaW5kZXhlcyB0byBiZSBjcmVhdGVkIGFuZCB0aGUgY29sdW1ucyBhZmZlY3RlZA0KICAgKiBUaGlzIGFuZCB0aGUgYWJvdmUgYXJyYXkgYXJlIGxpbmtlZCB0b2dldGhlciB0byBjcmVhdGUgdGhlIGluZGV4ZXMNCiAgICogQHZhciBhcnJheQ0KICAgKg0KICAgKiAgICAgICAgICAgZm9ybWF0IGZvciB0aGlzIGFycmF5IHNob3VsZCBiZQ0KICAgKiAgICAgICAgICAgWw0KICAgKiAgICAgICAgICAgICAgJ2luZGV4X25hbWVfYScgPT4gWydhZmZlY3RlZF9jb2x1bW5fYSddLA0KICAgKiAgICAgICAgICAgICAgJ2luZGV4X25hbWVfYicgPT4gWydhZmZlY3RlZF9jb2x1bW5fYScsICdhZmZlY3RlZF9jb2x1bW5fYicsICdhZmZlY3RlZF9jb2x1bW5fYyddDQogICAqICAgICAgICAgICBdDQogICAqDQogICAqICAgICAgICAgICBpbiB3aGljaCBpbmRleCBuYW1lcyBoYXZlIHRvIGV4aXN0IGluIHRoZSAkX2luZGV4ZXNfdGFibGVzIGFycmF5LA0KICAgKiAgICAgICAgICAgIGFuZCB0aGUgY29sdW1uIG5hbWVzIG11c3QgYmUgdmFsaWQgZXhpc3RlbnQgb25lcw0KICAgKg0KICAgKiAgICAgICAgICAgQWx0ZXJuYXRpdmVseSB0aGUgZm9ybWF0IGNhbiBiZQ0KICAgKg0KICAgKiAgICAgICAgICAgWw0KICAgKiAgICAgICAgICAgICAgJ3RhYmxlX25hbWVfYScgPT4gWyAnaW5kZXhfbmFtZV9hJyA9PiBbJ2FmZmVjdGVkX2NvbHVtbl9hJ10gXSwNCiAgICogICAgICAgICAgICAgICd0YWJsZV9uYW1lX2InID0+WyAnaW5kZXhfbmFtZV9iJyA9PiBbJ2FmZmVjdGVkX2NvbHVtbl9hJywgJ2FmZmVjdGVkX2NvbHVtbl9iJywgJ2FmZmVjdGVkX2NvbHVtbl9jJ10gXQ0KICAgKiAgICAgICAgICAgXQ0KICAgKg0KICAgKiAgICAgICAgICAgdG8gYWNjb21tb2RhdGUgY2FzZXMgd2hlcmUgdGhlIGluZGV4IG9mIGRpZmZlcmVudCB0YWJsZXMgaGF2ZSB0aGUgc2FtZSBuYW1lDQogICAqLw0KICBwcm90ZWN0ZWQgYXJyYXkgJF9pbmRleGVzICAgICAgICA9IFtdOw0KICANCiAgLyoqDQogICAqIFRoZSBsaXN0IG9mIHByZWZlcmVuY2VzIHRvIGJlIGNvcGllZA0KICAgKiBAdmFyIGFycmF5DQogICAqDQogICAqICAgICAgICAgICBbDQogICAqICAgICAgICAgICAgICdwcmVmZXJlbmNlX25hbWVfYScsDQogICAqICAgICAgICAgICAgICdwcmVmZXJlbmNlX25hbWVfYicsDQogICAqICAgICAgICAgICAgICdwcmVmZXJlbmNlX25hbWVfYycsDQogICAqICAgICAgICAgICAgICAgICAuLi4uLi4NCiAgICogICAgICAgICAgICAgJ3ByZWZlcmVuY2VfbmFtZV9uJw0KICAgKiAgICAgICAgICAgXQ0KICAgKi8NCiAgcHJvdGVjdGVkIGFycmF5ICRfcHJlZnMgICAgICAgICAgPSBbXTsNCiAgDQogIC8qKg0KICAgKiBUaGUgbGlzdCBvZiBmb2xkZXJzIHRvIGJlIGNvcGllZA0KICAgKiBAdmFyIGFycmF5DQogICAqDQogICAqICAgICAgICAgICBhIG1peGVkIGFycmF5IHdpdGggZWl0aGVyDQogICAqICAgICAgICAgICBhIGZvbGRlciBwYXRoIGFzc3VtaW5nICogKGFsbCBmaWxlcykNCiAgICogICAgICAgICAgIG9yIGFuIGFycmF5IG9mIFsnZm9sZGVyX3BhdGgnLCAncGF0dGVybiddDQogICAqDQogICAqICAgICAgICAgICBbDQogICAqICAgICAgICAgICAgIFsnZm9sZGVyX3BhdGhfYScsICdwYXR0ZXJuX2EnXSwNCiAgICogICAgICAgICAgICAgWydmb2xkZXJfcGF0aF9iJywNCiAgICogICAgICAgICAgICAgWydmb2xkZXJfcGF0aF9jJywgJ3BhdHRlcm5fYyddDQogICAqICAgICAgICAgICAgICAgICAuLi4uLi4NCiAgICogICAgICAgICAgICAgWydmb2xkZXJfcGF0aF9uJw0KICAgKiAgICAgICAgICAgXQ0KICAgKi8NCiAgcHJvdGVjdGVkIGFycmF5ICRfZm9sZGVycyAgICAgICAgPSBbXTsNCiAgDQogIC8qKg0KICAgKiBhbiBhcnJheSBvZiBmdWxseSBxdWFsaWZpZWQgZmlsZW5hbWVzIGluY2x1ZGluZyB0aGUgcGF0aA0KICAgKiBvciBhIHJlbGF0aXZlIHBhdGggdG8gdGhlIG1vZHVsZSBmb2xkZXINCiAgICoNCiAgICogQHZhciBhcnJheQ0KICAgKi8NCiAgcHJvdGVjdGVkIGFycmF5ICRfZmlsZXMgICAgICAgICAgPSBbXTsNCiAgDQogIC8qKg0KICAgKiBBbiBhcnJheSBvZiBwZXJtaXNzaW9ucyB0byBiZSBjb3BpZWQNCiAgICogQHZhciBhcnJheQ0KICAgKg0KICAgKiBAbm90ZTogaWYgZW1wdHkgdGhlIHBlcm1pc3Npb25zIGFyZSBhc3N1bWVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBzb3VyY2UgbmFtZSBieSBuYW1lDQogICAqICAgICAgICBvdGhlcndpc2UgdGhpcyBhcnJheSBzaG91bGQgYmUgaW4gdGhlIGZvcm1hdA0KICAgKiAgICAgICAgWw0KICAgKiAgICAgICAgICAgWydwZXJtaXNzaW9uX3NvdXJjZV9hJywgJ3Blcm1pc3Npb25fdGFyZ2V0X2EnXSwNCiAgICogICAgICAgICAgIFsncGVybWlzc2lvbl9zb3VyY2VfYicsICdwZXJtaXNzaW9uX3RhcmdldF9iJ10sDQogICAqICAgICAgICAgICAgICAgICAuLi4uLi4NCiAgICogICAgICAgICAgIFsncGVybWlzc2lvbl9zb3VyY2VfbicsICdwZXJtaXNzaW9uX3RhcmdldF9uJ10NCiAgICogICAgICAgIF0NCiAgICovDQogIHByb3RlY3RlZCBhcnJheSAkX3Blcm1pc3Npb25zICAgPSBbXTsNCiAgDQogICMgRmxhZ3MNCiAgDQogIHB1YmxpYyBjb25zdCBERUZBVUxUICAgICAgICAgICAgICAgPSAwOyAjIGgwMDAwDQogIHB1YmxpYyBjb25zdCBBVVRPX1BSRUZFUkVOQ0VTX0NPUFkgPSAxOyAjIGgwMDAxDQogIA0KICANCiAgLyoqDQogICAqIGluaXRpYWxpemF0aW9uIG1ldGhvZCBmb3IgdGhlIG1pZ3JhdG9yDQogICAqDQogICAqIEB0aHJvd3MgXENNU01TRXh0XE1pZ3JhdG9yUnVudGltZUV4Y2VwdGlvbg0KICAgKiBAdGhyb3dzIFxFeGNlcHRpb24NCiAgICovDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfaW5pdGlhbGl6ZSgpIDogdm9pZA0KICB7DQogICAgaWYoISR0aGlzLT5faW5pdGlhbGl6ZWQpDQogICAgew0KICAgICAgIyBkZXRlcm1pbmUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIG1vZHVsZSBpbiB0aGUgc3lzdGVtIGF0IGFsbA0KICAgICAgJG1vZHMgICAgICAgICAgICAgICAgICAgID0gXE1vZHVsZU9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpLT5HZXRJbnN0YWxsZWRNb2R1bGVzKCk7DQogICAgICAkdGhpcy0+X3NvdXJjZV9pbnN0YWxsZWQgPSBcaW5fYXJyYXkoJHRoaXMtPl9zb3VyY2VfbW9kdWxlX25hbWUsICRtb2RzLCBUUlVFKTsNCiAgICAgIA0KICAgICAgIyBjbGFzc2VzIGV4dGVuZGluZyB0aGlzIG9uZSBvciBjcmVhdGluZyBhbiBleHRlbmRpbmcgY2xhc3Mgc2hvdWxkIGNhdGNoIHRoZSBleGNlcHRpb25zDQogICAgICBpZighJHRoaXMtPl9zb3VyY2VfaW5zdGFsbGVkKQ0KICAgICAgew0KICAgICAgICB0aHJvdyBuZXcgTWlncmF0b3JSdW50aW1lRXhjZXB0aW9uKCdDb3VsZCBub3QgZmluZCAnIC4gJHRoaXMtPl9zb3VyY2VfbW9kdWxlX25hbWUpOw0KICAgICAgfQ0KICANCiAgICAgICMgd2UgZG8gaGF2ZSB0aGUgc291cmNlLCBzbyBsZXQncyB0cnkgdG8gbG9hZCBpdCBhbG9uZyB3aXRoIHRoZSB0YXJnZXQgbW9kdWxlDQogICAgICAjIG5vdGUgdGhhdCB3ZSBzaG91bGRuJ3QgaGF2ZSB0byBjaGVjayB0aGUgdGFyZ2V0IG1vZHVsZSBhdCBhbGwNCiAgICAgICMgYXMgdGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSB0YXJnZXQNCiAgICAgICMgc28gd2Ugd291bGQgYXNzdW1lIGl0IGlzIGxvYWRlZA0KICAgICAgdHJ5DQogICAgICB7DQogICAgICAgICR0aGlzLT5fc291cmNlX21vZHVsZSA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJHRoaXMtPl9zb3VyY2VfbW9kdWxlX25hbWUpOw0KICAgICAgfQ0KICAgICAgY2F0Y2goXFR5cGVFcnJvciAkZXhjZXB0aW9uKQ0KICAgICAgew0KICAgICAgICB0aHJvdyBuZXcgTWlncmF0b3JSdW50aW1lRXhjZXB0aW9uKCdDb3VsZCBub3QgbG9hZCAnIC4gJHRoaXMtPl9zb3VyY2VfbW9kdWxlX25hbWUpOw0KICAgICAgfQ0KICAgICAgDQogICAgICB0cnkNCiAgICAgIHsNCiAgICAgICAgJHRoaXMtPl90YXJnZXRfbW9kdWxlID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgkdGhpcy0+X3RhcmdldF9tb2R1bGVfbmFtZSk7DQogICAgICB9DQogICAgICBjYXRjaChcVHlwZUVycm9yICRleGNlcHRpb24pDQogICAgICB7DQogICAgICAgIHRocm93IG5ldyBNaWdyYXRvclJ1bnRpbWVFeGNlcHRpb24oJ0NvdWxkIG5vdCBsb2FkICcgLiAkdGhpcy0+X3RhcmdldF9tb2R1bGVfbmFtZSk7DQogICAgICB9DQogICAgICANCiAgICAgICMgdGhpcyBzaG91bGQgbm90IGJlIG5lZWRlZCBhbnkgbG9uZ2VyIGJ1dCwganVzdCBpbiBjYXNlLi4uDQogICAgICBpZiggISR0aGlzLT5faGF2ZV9zb3VyY2UoKSApDQogICAgICB7DQogICAgICAgIHRocm93IG5ldyBNaWdyYXRvclJ1bnRpbWVFeGNlcHRpb24oJ0NvdWxkIG5vdCBsb2FkICcgLiAkdGhpcy0+X3NvdXJjZV9tb2R1bGVfbmFtZSk7DQogICAgICB9DQogICAgICANCiAgICAgIGlmKCAhXGlzX29iamVjdCgkdGhpcy0+X3RhcmdldF9tb2R1bGUpKQ0KICAgICAgew0KICAgICAgICB0aHJvdyBuZXcgTWlncmF0b3JSdW50aW1lRXhjZXB0aW9uKCdDb3VsZCBub3QgbG9hZCAnIC4gJHRoaXMtPl90YXJnZXRfbW9kdWxlX25hbWUpOw0KICAgICAgfQ0KICAgICAgDQogICAgICAjIGFsbCBnb29kIHByb2NlZWQNCiAgICAgICR0aGlzLT5fZGIgICAgICAgICAgICA9IFxjbXNfdXRpbHM6OmdldF9kYigpOw0KICAgICAgJHRoaXMtPl9pbml0aWFsaXplZCAgID0gVFJVRTsNCiAgICB9DQogIH0NCiAgDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfaXNfc291cmNlX2FjdGl2ZSgpIDogYm9vbA0KICB7DQogICAgcmV0dXJuIFxNb2R1bGVPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKS0+SXNNb2R1bGVBY3RpdmUoJHRoaXMtPl9zb3VyY2VfbW9kdWxlX25hbWUpOw0KICB9DQogIA0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2lzX3NvdXJjZV9pbnN0YWxsZWQoKSA6IGJvb2wNCiAgew0KICAgIHJldHVybiAkdGhpcy0+X3NvdXJjZV9pbnN0YWxsZWQ7DQogIH0NCiAgDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfaGF2ZV9zb3VyY2UoKSA6IGJvb2wNCiAgew0KICAgIHJldHVybiAoJHRoaXMtPl9pc19zb3VyY2VfaW5zdGFsbGVkKCkgJiYgJHRoaXMtPl9pc19zb3VyY2VfYWN0aXZlKCkgJiYgXGlzX29iamVjdCgkdGhpcy0+X3NvdXJjZV9tb2R1bGUpICk7DQogIH0NCiAgDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfZ2V0X3NvdXJjZV9kYl9wcmVmaXgoKQ0KICB7DQogICAgcmV0dXJuIFxjbXNfZGJfcHJlZml4KCkgLiAkdGhpcy0+X3N0bWEgLiAnXycgLiBcc3RydG9sb3dlcigkdGhpcy0+X3NvdXJjZV9tb2R1bGVfbmFtZSk7DQogIH0NCiAgDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfZ2V0X3RhcmdldF9kYl9wcmVmaXgoKQ0KICB7DQogICAgcmV0dXJuIFxjbXNfZGJfcHJlZml4KCkgLiAkdGhpcy0+X3R0bWEgLiAnXycgLiBcc3RydG9sb3dlcigkdGhpcy0+X3RhcmdldF9tb2R1bGVfbmFtZSk7DQogIH0NCiAgDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfZGJfZXJyb3IoKSA6IGJvb2wNCiAgew0KICAgIHJldHVybiAkdGhpcy0+X2RiLT5FcnJvck5vKCkgPiAwOw0KICB9DQogIA0KICAvKioNCiAgICogYmFja3MgdXAgU291cmNlIHRhYmxlcw0KICAgKiBAdGhyb3dzIFxDTVNNU0V4dFxNaWdyYXRvckRiRXhjZXB0aW9uDQogICAqLw0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX0NvcHlTb3VyY2VUYWJsZXMyYmt1cCgpIDogdm9pZA0KICB7DQogICAgJHByZWZpeF9zID0gXGNtc19kYl9wcmVmaXgoKSAuICR0aGlzLT5fc3RtYSAuICdfJyAuIFxzdHJ0b2xvd2VyKCR0aGlzLT5fc291cmNlX21vZHVsZV9uYW1lKTsNCiAgICAkcHJlZml4X3QgPSBcY21zX2RiX3ByZWZpeCgpIC4gJHRoaXMtPl90dG1hIC4gJ18nIC4gXHN0cnRvbG93ZXIoJHRoaXMtPl90YXJnZXRfbW9kdWxlX25hbWUpIC4gJ19fdG1wJzsNCiAgDQogICAgZm9yZWFjaCgkdGhpcy0+X3RhYmxlcyBhcyAkb25lKQ0KICAgIHsNCiAgICAgIGlmKCBlbXB0eSgkb25lKSApDQogICAgICB7DQogICAgICAgICRzID0gJHByZWZpeF9zOw0KICAgICAgICAkdCA9ICRwcmVmaXhfdDsNCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgJHMgPSAkcHJlZml4X3MgLiAnXycgLiAkb25lOw0KICAgICAgICAkdCA9ICRwcmVmaXhfdCAuICdfJyAuICRvbmU7DQogICAgICB9DQogICAgICANCiAgICAgICRjb250ZXh0ID0gJHRoaXMtPl9zb3VyY2VfbW9kdWxlX25hbWUgLiAnMicgLiAkdGhpcy0+X3RhcmdldF9tb2R1bGVfbmFtZTsNCiAgICAgIA0KICAgICAgXGF1ZGl0KDgwMDg1LCAkY29udGV4dCwgJ3Byb2Nlc3NpbmcgdGFibGUgJyAuICR0KTsNCiAgICAgIA0KICAgICAgJHEgPSAnRFJPUCBUQUJMRSBJRiBFWElTVFMgJyAuICR0Ow0KICAgICAgJHIgPSAkdGhpcy0+X2RiLT5FeGVjdXRlKCRxKTsNCiAgICANCiAgICAgIGlmKCR0aGlzLT5fZGJfZXJyb3IoKSkNCiAgICAgIHsNCiAgICAgICAgdGhyb3cgbmV3IE1pZ3JhdG9yRGJFeGNlcHRpb24oDQogICAgICAgICAgJHRoaXMtPl9kYi0+RXJyb3JObygpIC4gJyAtICcgLiAkdGhpcy0+X2RiLT5FcnJvck1zZygpLA0KICAgICAgICAgICR0aGlzLT5fZGItPkVycm9yTm8oKQ0KICAgICAgICApOw0KICAgICAgfQ0KICANCiAgICAgIFxhdWRpdCg4MDA4NSwgJGNvbnRleHQsICdjcmVhdGluZyB0YWJsZSAnIC4gJHQpOw0KICANCiAgICAgICRxID0gJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICcgLiAkdCAuICcgTElLRSAnIC4gJHM7DQogICAgICAkciA9ICR0aGlzLT5fZGItPkV4ZWN1dGUoJHEpOw0KICANCiAgICAgIGlmKCR0aGlzLT5fZGJfZXJyb3IoKSkNCiAgICAgIHsNCiAgICAgICAgdGhyb3cgbmV3IE1pZ3JhdG9yRGJFeGNlcHRpb24oDQogICAgICAgICAgJHRoaXMtPl9kYi0+RXJyb3JObygpIC4gJyAtICcgLiAkdGhpcy0+X2RiLT5FcnJvck1zZygpLA0KICAgICAgICAgICR0aGlzLT5fZGItPkVycm9yTm8oKQ0KICAgICAgICApOw0KICAgICAgfQ0KICAgICAgDQogICAgICBcYXVkaXQoODAwODUsICRjb250ZXh0LCAnY3JlYXRlZCAsIGNvcHlpbmcuLi4nKTsNCiAgICAgIA0KICAgICAgJHEgPSAnSU5TRVJUICcgLiAkdCAuICcgU0VMRUNUICogRlJPTSAnIC4gJHM7DQogICAgICAkciA9ICR0aGlzLT5fZGItPkV4ZWN1dGUoJHEpOw0KICANCiAgICAgIGlmKCR0aGlzLT5fZGJfZXJyb3IoKSkNCiAgICAgIHsNCiAgICAgICAgdGhyb3cgbmV3IE1pZ3JhdG9yRGJFeGNlcHRpb24oDQogICAgICAgICAgJHRoaXMtPl9kYi0+RXJyb3JObygpIC4gJyAtICcgLiAkdGhpcy0+X2RiLT5FcnJvck1zZygpLA0KICAgICAgICAgICR0aGlzLT5fZGItPkVycm9yTm8oKQ0KICAgICAgICApOw0KICAgICAgfQ0KICANCiAgICAgIFxhdWRpdCg4MDA4NSwgJGNvbnRleHQsICdjb3B5ZWQhJyk7DQogICAgfQ0KICB9DQogIA0KICAvKioNCiAgICogY29waWVzIHRhYmxlcyBmcm9tIHNvdXJjZSB0byB0YXJnZXQNCiAgICoNCiAgICogQHRocm93cyBcQ01TTVNFeHRcTWlncmF0b3JEYkV4Y2VwdGlvbg0KICAgKi8NCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9Db3B5U291cmNlVGFibGVzMlRhcmdldCgpDQogIHsNCiAgICAkcHJlZml4X3MgPSBcY21zX2RiX3ByZWZpeCgpIC4gJHRoaXMtPl9zdG1hIC4gJ18nIC4gXHN0cnRvbG93ZXIoJHRoaXMtPl9zb3VyY2VfbW9kdWxlX25hbWUpOw0KICAgICRwcmVmaXhfdCA9IFxjbXNfZGJfcHJlZml4KCkgLiAkdGhpcy0+X3R0bWEgLiAnXycgLiBcc3RydG9sb3dlcigkdGhpcy0+X3RhcmdldF9tb2R1bGVfbmFtZSk7DQogIA0KICAgICRxID0gJ1NFVCBmb3JlaWduX2tleV9jaGVja3MgPSAwJzsNCiAgICAkciA9ICR0aGlzLT5fZGItPkV4ZWN1dGUoJHEpOw0KICANCiAgICBpZigkdGhpcy0+X2RiX2Vycm9yKCkpDQogICAgew0KICAgICAgdGhyb3cgbmV3IE1pZ3JhdG9yRGJFeGNlcHRpb24oDQogICAgICAgICR0aGlzLT5fZGItPkVycm9yTm8oKSAuICcgLSAnIC4gJHRoaXMtPl9kYi0+RXJyb3JNc2coKSwNCiAgICAgICAgJHRoaXMtPl9kYi0+RXJyb3JObygpDQogICAgICApOw0KICAgIH0NCiAgICANCiAgICBmb3JlYWNoKCR0aGlzLT5fdGFibGVzIGFzICRvbmUpDQogICAgew0KICAgICAgaWYoIGVtcHR5KCRvbmUpICkNCiAgICAgIHsNCiAgICAgICAgJHMgPSAkcHJlZml4X3M7DQogICAgICAgICR0ID0gJHByZWZpeF90Ow0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAkcyA9ICRwcmVmaXhfcyAuICdfJyAuICRvbmU7DQogICAgICAgICR0ID0gJHByZWZpeF90IC4gJ18nIC4gJG9uZTsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgJHEgPSAnRFJPUCBUQUJMRSBJRiBFWElTVFMgJyAuICR0Ow0KICAgICAgJHIgPSAkdGhpcy0+X2RiLT5FeGVjdXRlKCRxKTsNCiAgICAgIA0KICAgICAgaWYoJHRoaXMtPl9kYl9lcnJvcigpKQ0KICAgICAgew0KICAgICAgICB0aHJvdyBuZXcgTWlncmF0b3JEYkV4Y2VwdGlvbigNCiAgICAgICAgICAkdGhpcy0+X2RiLT5FcnJvck5vKCkgLiAnIC0gJyAuICR0aGlzLT5fZGItPkVycm9yTXNnKCksDQogICAgICAgICAgJHRoaXMtPl9kYi0+RXJyb3JObygpDQogICAgICAgICk7DQogICAgICB9DQogIA0KICAgICAgJHEgPSAnQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgJyAuICR0IC4gJyBMSUtFICcgLiAkczsNCiAgICAgICRyID0gJHRoaXMtPl9kYi0+RXhlY3V0ZSgkcSk7DQogIA0KICAgICAgaWYoJHRoaXMtPl9kYl9lcnJvcigpKQ0KICAgICAgew0KICAgICAgICB0aHJvdyBuZXcgTWlncmF0b3JEYkV4Y2VwdGlvbigNCiAgICAgICAgICAkdGhpcy0+X2RiLT5FcnJvck5vKCkgLiAnIC0gJyAuICR0aGlzLT5fZGItPkVycm9yTXNnKCksDQogICAgICAgICAgJHRoaXMtPl9kYi0+RXJyb3JObygpDQogICAgICAgICk7DQogICAgICB9DQogIA0KICAgICAgJHEgPSAnSU5TRVJUICcgLiAkdCAuICcgU0VMRUNUICogRlJPTSAnIC4gJHM7DQogICAgICAkciA9ICR0aGlzLT5fZGItPkV4ZWN1dGUoJHEpOw0KICANCiAgICAgIGlmKCR0aGlzLT5fZGJfZXJyb3IoKSkNCiAgICAgIHsNCiAgICAgICAgdGhyb3cgbmV3IE1pZ3JhdG9yRGJFeGNlcHRpb24oDQogICAgICAgICAgJHRoaXMtPl9kYi0+RXJyb3JObygpIC4gJyAtICcgLiAkdGhpcy0+X2RiLT5FcnJvck1zZygpLA0KICAgICAgICAgICR0aGlzLT5fZGItPkVycm9yTm8oKQ0KICAgICAgICApOw0KICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAkcSA9ICdTRVQgZm9yZWlnbl9rZXlfY2hlY2tzID0gMSc7DQogICAgJHIgPSAkdGhpcy0+X2RiLT5FeGVjdXRlKCRxKTsNCiAgDQogICAgaWYoJHRoaXMtPl9kYl9lcnJvcigpKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBNaWdyYXRvckRiRXhjZXB0aW9uKA0KICAgICAgICAkdGhpcy0+X2RiLT5FcnJvck5vKCkgLiAnIC0gJyAuICR0aGlzLT5fZGItPkVycm9yTXNnKCksDQogICAgICAgICR0aGlzLT5fZGItPkVycm9yTm8oKQ0KICAgICAgKTsNCiAgICB9DQogIH0NCiAgDQogIC8qKg0KICAgKiBSb2xscyBiYWNrIGkuZS4gZ2V0cyBvcmlnaW5hbCB0YWJsZXMgZnJvbSBiYWNrdXANCiAgICogQHRocm93cyBcQ01TTVNFeHRcTWlncmF0b3JEYlJvbGxCYWNrRXhjZXB0aW9uDQogICAqLw0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX1JvbGxCYWNrKCkgOiB2b2lkDQogIHsNCiAgICAkcHJlZml4X3MgPSBcY21zX2RiX3ByZWZpeCgpIC4gJHRoaXMtPl9zdG1hIC4gJ18nIC4gXHN0cnRvbG93ZXIoJHRoaXMtPl90YXJnZXRfbW9kdWxlX25hbWUpIC4gJ19fdG1wJzsNCiAgICAkcHJlZml4X3QgPSBcY21zX2RiX3ByZWZpeCgpIC4gJHRoaXMtPl90dG1hIC4gJ18nIC4gXHN0cnRvbG93ZXIoJHRoaXMtPl9zb3VyY2VfbW9kdWxlX25hbWUpOw0KICAgIA0KICAgICRxID0gJ1NFVCBmb3JlaWduX2tleV9jaGVja3MgPSAwJzsNCiAgICAkciA9ICR0aGlzLT5fZGItPkV4ZWN1dGUoJHEpOw0KICANCiAgICBpZigkdGhpcy0+X2RiX2Vycm9yKCkpDQogICAgew0KICAgICAgdGhyb3cgbmV3IE1pZ3JhdG9yRGJSb2xsQmFja0V4Y2VwdGlvbigNCiAgICAgICAgJHRoaXMtPl9kYi0+RXJyb3JObygpIC4gJyAtICcgLiAkdGhpcy0+X2RiLT5FcnJvck1zZygpLA0KICAgICAgICAkdGhpcy0+X2RiLT5FcnJvck5vKCkNCiAgICAgICk7DQogICAgfQ0KICAgIA0KICAgIGZvcmVhY2goJHRoaXMtPl90YWJsZXMgYXMgJG9uZSkNCiAgICB7DQogICAgICBpZiggZW1wdHkoJG9uZSkgKQ0KICAgICAgew0KICAgICAgICAkcyA9ICRwcmVmaXhfczsNCiAgICAgICAgJHQgPSAkcHJlZml4X3Q7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgICRzID0gJHByZWZpeF9zIC4gJ18nIC4gJG9uZTsNCiAgICAgICAgJHQgPSAkcHJlZml4X3QgLiAnXycgLiAkb25lOw0KICAgICAgfQ0KICAgICAgDQogICAgICAkcSA9ICdEUk9QIFRBQkxFIElGIEVYSVNUUyAnIC4gJHQ7DQogICAgICAkciA9ICR0aGlzLT5fZGItPkV4ZWN1dGUoJHEpOw0KICAgICAgDQogICAgICBpZigkdGhpcy0+X2RiX2Vycm9yKCkpDQogICAgICB7DQogICAgICAgIHRocm93IG5ldyBNaWdyYXRvckRiUm9sbEJhY2tFeGNlcHRpb24oDQogICAgICAgICAgJHRoaXMtPl9kYi0+RXJyb3JObygpIC4gJyAtICcgLiAkdGhpcy0+X2RiLT5FcnJvck1zZygpLA0KICAgICAgICAgICR0aGlzLT5fZGItPkVycm9yTm8oKQ0KICAgICAgICApOw0KICAgICAgfQ0KICANCiAgICAgICRxID0gJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICcgLiAkdCAuICcgTElLRSAnIC4gJHM7DQogICAgICAkciA9ICR0aGlzLT5fZGItPkV4ZWN1dGUoJHEpOw0KICANCiAgICAgIGlmKCR0aGlzLT5fZGJfZXJyb3IoKSkNCiAgICAgIHsNCiAgICAgICAgdGhyb3cgbmV3IE1pZ3JhdG9yRGJSb2xsQmFja0V4Y2VwdGlvbigNCiAgICAgICAgICAkdGhpcy0+X2RiLT5FcnJvck5vKCkgLiAnIC0gJyAuICR0aGlzLT5fZGItPkVycm9yTXNnKCksDQogICAgICAgICAgJHRoaXMtPl9kYi0+RXJyb3JObygpDQogICAgICAgICk7DQogICAgICB9DQogIA0KICAgICAgJHEgPSAnSU5TRVJUICcgLiAkdCAuICcgU0VMRUNUICogRlJPTSAnIC4gJHM7DQogICAgICAkciA9ICR0aGlzLT5fZGItPkV4ZWN1dGUoJHEpOw0KICANCiAgICAgIGlmKCR0aGlzLT5fZGJfZXJyb3IoKSkNCiAgICAgIHsNCiAgICAgICAgdGhyb3cgbmV3IE1pZ3JhdG9yRGJSb2xsQmFja0V4Y2VwdGlvbigNCiAgICAgICAgICAkdGhpcy0+X2RiLT5FcnJvck5vKCkgLiAnIC0gJyAuICR0aGlzLT5fZGItPkVycm9yTXNnKCksDQogICAgICAgICAgJHRoaXMtPl9kYi0+RXJyb3JObygpDQogICAgICAgICk7DQogICAgICB9DQogICAgfQ0KICANCiAgICAkcSA9ICdTRVQgZm9yZWlnbl9rZXlfY2hlY2tzID0gMSc7DQogICAgJHIgPSAkdGhpcy0+X2RiLT5FeGVjdXRlKCRxKTsNCiAgDQogICAgaWYoJHRoaXMtPl9kYl9lcnJvcigpKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBNaWdyYXRvckRiUm9sbEJhY2tFeGNlcHRpb24oDQogICAgICAgICR0aGlzLT5fZGItPkVycm9yTm8oKSAuICcgLSAnIC4gJHRoaXMtPl9kYi0+RXJyb3JNc2coKSwNCiAgICAgICAgJHRoaXMtPl9kYi0+RXJyb3JObygpDQogICAgICApOw0KICAgIH0NCiAgfQ0KICANCiAgLyoqDQogICAqIGRyb3BzIHRlbXBvcmFyeSBiYWNrdXAgdGFibGVzDQogICAqIEB0aHJvd3MgXENNU01TRXh0XE1pZ3JhdG9yRGJEcm9wRXhjZXB0aW9uDQogICAqLw0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX0Ryb3BUZW1wcygpIDogdm9pZA0KICB7DQogICAgJHByZWZpeCA9IFxjbXNfZGJfcHJlZml4KCkgLiAkdGhpcy0+X3R0bWEgLiAnXycgLiBcc3RydG9sb3dlcigkdGhpcy0+X3RhcmdldF9tb2R1bGVfbmFtZSkgLiAnX190bXAnOw0KICAgIA0KICAgICMgdHJ5IHJldmVyc2luZyB0aGUgb3JkZXIgdG8gcHJldmVudCBmb3JlaWduIGtleSBjb25zdHJhaW50cyBmYWlscw0KICAgICMgJHRhYmxlcyA9IGFycmF5X3JldmVyc2UoJHRoaXMtPl90YWJsZXMpOw0KICAgIA0KICAgICRxID0gJ1NFVCBmb3JlaWduX2tleV9jaGVja3MgPSAwJzsNCiAgICAkciA9ICR0aGlzLT5fZGItPkV4ZWN1dGUoJHEpOw0KICANCiAgICBpZigkdGhpcy0+X2RiX2Vycm9yKCkpDQogICAgew0KICAgICAgdGhyb3cgbmV3IE1pZ3JhdG9yRGJEcm9wRXhjZXB0aW9uKA0KICAgICAgICAkdGhpcy0+X2RiLT5FcnJvck5vKCkgLiAnIC0gJyAuICR0aGlzLT5fZGItPkVycm9yTXNnKCksDQogICAgICAgICR0aGlzLT5fZGItPkVycm9yTm8oKQ0KICAgICAgKTsNCiAgICB9DQogICAgDQogICAgZm9yZWFjaCgkdGhpcy0+X3RhYmxlcyBhcyAkb25lKQ0KICAgIHsNCiAgDQogICAgICBpZiggZW1wdHkoJG9uZSkgKQ0KICAgICAgew0KICAgICAgICAkdCA9ICRwcmVmaXg7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgICR0ID0gJHByZWZpeCAuICdfJyAuICRvbmU7DQogICAgICB9DQogICAgICANCiAgICAgICRjb250ZXh0ID0gJHRoaXMtPl9zb3VyY2VfbW9kdWxlX25hbWUgLiAnMicgLiAkdGhpcy0+X3RhcmdldF9tb2R1bGVfbmFtZTsNCiAgICAgIFxhdWRpdCg4MDA4NSwgJGNvbnRleHQsICdkcm9wcGluZyB0YWJsZSAnIC4gJHQpOw0KICAgICAgDQogICAgICAkcSA9ICdEUk9QIFRBQkxFIElGIEVYSVNUUyAnIC4gJHQ7DQogICAgICAkciA9ICR0aGlzLT5fZGItPkV4ZWN1dGUoJHEpOw0KICAgICAgDQogICAgICBpZigkdGhpcy0+X2RiX2Vycm9yKCkpDQogICAgICB7DQogICAgICAgIHRocm93IG5ldyBNaWdyYXRvckRiRHJvcEV4Y2VwdGlvbigNCiAgICAgICAgICAkdGhpcy0+X2RiLT5FcnJvck5vKCkgLiAnIC0gJyAuICR0aGlzLT5fZGItPkVycm9yTXNnKCksDQogICAgICAgICAgJHRoaXMtPl9kYi0+RXJyb3JObygpDQogICAgICAgICk7DQogICAgICB9DQogIA0KICAgICAgXGF1ZGl0KDgwMDg1LCAkY29udGV4dCwgJ2Ryb3BwZWQhJyk7DQogICAgfQ0KICANCiAgICAkcSA9ICdTRVQgZm9yZWlnbl9rZXlfY2hlY2tzID0gMSc7DQogICAgJHIgPSAkdGhpcy0+X2RiLT5FeGVjdXRlKCRxKTsNCiAgDQogICAgaWYoJHRoaXMtPl9kYl9lcnJvcigpKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBNaWdyYXRvckRiRHJvcEV4Y2VwdGlvbigNCiAgICAgICAgJHRoaXMtPl9kYi0+RXJyb3JObygpIC4gJyAtICcgLiAkdGhpcy0+X2RiLT5FcnJvck1zZygpLA0KICAgICAgICAkdGhpcy0+X2RiLT5FcnJvck5vKCkNCiAgICAgICk7DQogICAgfQ0KICB9DQogIA0KICAvKioNCiAgICogQHRocm93cyBcQ01TTVNFeHRcTWlncmF0b3JEYkV4Y2VwdGlvbg0KICAgKi8NCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9SZW5hbWVJbmRleGVzKCkNCiAgew0KICAgICRwcmVmaXggPSBcY21zX2RiX3ByZWZpeCgpIC4gJHRoaXMtPl90dG1hIC4gJ18nIC4gXHN0cnRvbG93ZXIoJHRoaXMtPl90YXJnZXRfbW9kdWxlX25hbWUpIC4gJ18nOw0KICAgICRmID0gMDsNCiAgICANCiAgICBmb3JlYWNoKCR0aGlzLT5faW5kZXhlc190YWJsZXMgYXMgJG9uZSkNCiAgICB7DQogICAgICArKyRmOw0KICAgICAgWyR0YWJsZSwgJGluZGV4X25hbWVdID0gJG9uZTsNCiAgICAgIA0KICAgICAgLyoNCiAgICAgICAqIG5vdyBoZXJlJ3MgdGhlIHRoaW5nOg0KICAgICAgICogLSBpZiB0aGUgdGFibGUgaXMgbm90IGluIG91ciBsaXN0IHdlIHNraXAgaXQ7DQogICAgICAgKiAtIGlmIGl0IGlzLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW5kZXhlcyBsaXN0IGlzIGluIHRoZSBjb3JyZWN0IGZvcm1hdA0KICAgICAgICovDQogICAgICANCiAgICAgIGlmKCBcaW5fYXJyYXkoJHRhYmxlLCAkdGhpcy0+X3RhYmxlcykgKQ0KICAgICAgew0KICAgICAgICAjIGZvcm1hdCBhPw0KICAgICAgICBpZiggaXNzZXQoJHRoaXMtPl9pbmRleGVzWyRpbmRleF9uYW1lXSkgKQ0KICAgICAgICB7DQogICAgICAgICAgJHRhYmxlX25hbWUgPSAkcHJlZml4IC4gJHRhYmxlOw0KICAgICAgICAgICRkcm9wICAgICAgPSAkaW5kZXhfbmFtZTsNCiAgICAgICAgICAkYWRkICAgICAgID0gJGluZGV4X25hbWU7DQogICAgICAgICAgJGZpZWxkcyAgICA9IFxpbXBsb2RlKCcsJywgJHRoaXMtPl9pbmRleGVzWyRpbmRleF9uYW1lXSk7DQogICAgDQogICAgICAgICAgJHEgPSAnQUxURVIgVEFCTEUgJyAuICR0YWJsZV9uYW1lDQogICAgICAgICAgICAgICAuICcgRFJPUCBJTkRFWCAnIC4gJGRyb3ANCiAgICAgICAgICAgICAgIC4gJywgQUREIElOREVYICcgLiAkYWRkIC4gJyAoJyAuICRmaWVsZHMgLiAnKSBVU0lORyBCVFJFRSc7DQogICAgDQogICAgICAgICAgJHIgPSAkdGhpcy0+X2RiLT5FeGVjdXRlKCRxKTsNCiAgICANCiAgICAgICAgICBpZigkdGhpcy0+X2RiX2Vycm9yKCkpDQogICAgICAgICAgew0KICAgICAgICAgICAgdGhyb3cgbmV3IE1pZ3JhdG9yRGJFeGNlcHRpb24oDQogICAgICAgICAgICAgICR0aGlzLT5fZGItPkVycm9yTm8oKSAuICcgLSAnIC4gJHRoaXMtPl9kYi0+RXJyb3JNc2coKSwNCiAgICAgICAgICAgICAgJHRoaXMtPl9kYi0+RXJyb3JObygpDQogICAgICAgICAgICApOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAjIGZvcm1hdCBiPw0KICAgICAgICBlbHNlaWYoIGlzc2V0KCR0aGlzLT5faW5kZXhlc1skdGFibGVdKSApDQogICAgICAgIHsNCiAgICAgICAgICBmb3JlYWNoKCR0aGlzLT5faW5kZXhlc1skdGFibGVdIGFzICRpbmRleF9uYW1lID0+ICRjb2x1bW5zKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICR0YWJsZV9uYW1lID0gJHByZWZpeCAuICR0YWJsZTsNCiAgICAgICAgICAgICRkcm9wICAgICAgPSAkaW5kZXhfbmFtZTsNCiAgICAgICAgICAgICRhZGQgICAgICAgPSAkaW5kZXhfbmFtZTsNCiAgICAgICAgICAgICRmaWVsZHMgICAgPSBcaW1wbG9kZSgnLCcsICRjb2x1bW5zKTsNCiAgICAgIA0KICAgICAgICAgICAgJHEgPSAnQUxURVIgVEFCTEUgJyAuICR0YWJsZV9uYW1lDQogICAgICAgICAgICAgICAgIC4gJyBEUk9QIElOREVYICcgLiAkZHJvcA0KICAgICAgICAgICAgICAgICAuICcsIEFERCBJTkRFWCAnIC4gJGFkZCAuICcgKCcgLiAkZmllbGRzIC4gJykgVVNJTkcgQlRSRUUnOw0KICAgICAgDQogICAgICAgICAgICAkciA9ICR0aGlzLT5fZGItPkV4ZWN1dGUoJHEpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZigkdGhpcy0+X2RiX2Vycm9yKCkpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHRocm93IG5ldyBNaWdyYXRvckRiRXhjZXB0aW9uKA0KICAgICAgICAgICAgICAgICR0aGlzLT5fZGItPkVycm9yTm8oKSAuICcgLSAnIC4gJHRoaXMtPl9kYi0+RXJyb3JNc2coKSwNCiAgICAgICAgICAgICAgICAkdGhpcy0+X2RiLT5FcnJvck5vKCkNCiAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgLyoNCiAgICAgKiBwcmV2aW91cyBsb29wIGRpZG4ndCBldmVuIGl0ZXJhdGUgb25jZT8NCiAgICAgKiB0aGVuIHdlIG1heSBoYXZlIGFuIGFsdGVybmF0aXZlIGZvcm1hdDogYg0KICAgICAqIGV2ZW4gd2l0aCBhbiBlbXB0eSBfaW5kZXhlc190YWJsZXMgbGlzdA0KICAgICAqLw0KICANCiAgICBpZighJGYpDQogICAgew0KICAgICAgZm9yZWFjaCgkdGhpcy0+X2luZGV4ZXMgYXMgJHRhYmxlID0+ICRkYXRhKQ0KICAgICAgew0KICAgICAgICBpZiggXGluX2FycmF5KCR0YWJsZSwgJHRoaXMtPl90YWJsZXMpICkNCiAgICAgICAgew0KICAgICAgICAgIGZvcmVhY2goJGRhdGEgYXMgJGluZGV4X25hbWUgPT4gJGNvbHVtbnMpDQogICAgICAgICAgew0KICAgICAgICAgICAgJHRhYmxlX25hbWUgPSAkcHJlZml4IC4gJHRhYmxlOw0KICAgICAgICAgICAgJGRyb3AgICAgICA9ICRpbmRleF9uYW1lOw0KICAgICAgICAgICAgJGFkZCAgICAgICA9ICRpbmRleF9uYW1lOw0KICAgICAgICAgICAgJGZpZWxkcyAgICA9IFxpbXBsb2RlKCcsJywgJGNvbHVtbnMpOw0KICANCiAgICAgICAgICAgICRxID0gJ0FMVEVSIFRBQkxFICcgLiAkdGFibGVfbmFtZQ0KICAgICAgICAgICAgICAgICAuICcgRFJPUCBJTkRFWCAnIC4gJGRyb3ANCiAgICAgICAgICAgICAgICAgLiAnLCBBREQgSU5ERVggJyAuICRhZGQgLiAnICgnIC4gJGZpZWxkcyAuICcpIFVTSU5HIEJUUkVFJzsNCiAgDQogICAgICAgICAgICAkciA9ICR0aGlzLT5fZGItPkV4ZWN1dGUoJHEpOw0KICANCiAgICAgICAgICAgIGlmKCR0aGlzLT5fZGJfZXJyb3IoKSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgdGhyb3cgbmV3IE1pZ3JhdG9yRGJFeGNlcHRpb24oDQogICAgICAgICAgICAgICAgJHRoaXMtPl9kYi0+RXJyb3JObygpIC4gJyAtICcgLiAkdGhpcy0+X2RiLT5FcnJvck1zZygpLA0KICAgICAgICAgICAgICAgICR0aGlzLT5fZGItPkVycm9yTm8oKQ0KICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgfQ0KICANCiAgLyoqDQogICAqIEB0aHJvd3MgXENNU01TRXh0XE1pZ3JhdG9yRGJFeGNlcHRpb24NCiAgICovDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfYXV0b19wcmVmZXJlbmNlc19jb3B5KCkNCiAgew0KICAgIHRyeQ0KICAgIHsNCiAgICAgICRxID0gJ1NFTEVDVCAqIEZST00gJw0KICAgICAgICAgICAuIFxjbXNfZGJfcHJlZml4KCkNCiAgICAgICAgICAgLiAnc2l0ZXByZWZzJw0KICAgICAgICAgICAuICcgV0hFUkUgc2l0ZXByZWZfbmFtZSBMSUtFIFwnJyAuICR0aGlzLT5fc291cmNlX21vZHVsZV9uYW1lLiclXCcnOw0KICAgICAgDQogICAgICAkciA9ICR0aGlzLT5fZGItPkdldEFsbCgkcSk7DQogICAgICANCiAgICAgIGlmKCR0aGlzLT5fZGJfZXJyb3IoKSkNCiAgICAgIHsNCiAgICAgICAgdGhyb3cgbmV3IE1pZ3JhdG9yRGJFeGNlcHRpb24oJHRoaXMtPl9kYi0+RXJyb3JNc2coKSwgJHRoaXMtPl9kYi0+RXJyb3JObygpICk7DQogICAgICB9DQogICAgICANCiAgICAgIGZvcmVhY2goJHIgYXMgJG9uZSkNCiAgICAgIHsNCiAgICAgICAgJHByZWYgPSBcc3RyX3JlcGxhY2UoJHRoaXMtPl9zb3VyY2VfbW9kdWxlX25hbWUgLiAnX21hcGlfcHJlZl8nLCAnJywgJG9uZVsnc2l0ZXByZWZfbmFtZSddKTsNCiAgICAgICAgJHRoaXMtPl90YXJnZXRfbW9kdWxlLT5TZXRQcmVmZXJlbmNlKCRwcmVmLCAkb25lWydzaXRlcHJlZl92YWx1ZSddKTsNCiAgICAgIH0NCiAgICB9DQogICAgY2F0Y2goXEV4Y2VwdGlvbiAkZSkNCiAgICB7DQogICAgICB0aHJvdyBuZXcgTWlncmF0b3JEYkV4Y2VwdGlvbigkZS0+Z2V0TWVzc2FnZSgpLCAkZS0+Z2V0Q29kZSgpICk7DQogICAgfQ0KICANCiAgfQ0KICANCg0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX0NvcHlQcmVmZXJlbmNlcygpIDogdm9pZA0KICB7DQogICAgaWYoXGNvdW50KCR0aGlzLT5fcHJlZnMpICkNCiAgICB7DQogICAgICBmb3JlYWNoKCR0aGlzLT5fcHJlZnMgYXMgJG9uZSkNCiAgICAgIHsNCiAgICAgICAgJHRoaXMtPl90YXJnZXRfbW9kdWxlLT5TZXRQcmVmZXJlbmNlKCAkb25lLCAkdGhpcy0+X3NvdXJjZV9tb2R1bGUtPkdldFByZWZlcmVuY2UoJG9uZSkgKTsNCiAgICAgIH0NCiAgICB9DQogICAgZWxzZWlmKCR0aGlzLT5fZmxhZ3MgPT09IHNlbGY6OkFVVE9fUFJFRkVSRU5DRVNfQ09QWSkNCiAgICB7DQogICAgICAkdGhpcy0+X2F1dG9fcHJlZmVyZW5jZXNfY29weSgpOw0KICAgIH0NCg0KICB9DQogIA0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2ZpbmRfZmlsZXNfcmVjdXJzaXZlKCRwYXRoICwgJHBhdHRlcm4pDQogIHsNCiAgICAvLyB0b2RvOiBmaW5pc2ggdGhpcyEhISENCiAgfQ0KICANCiAgLyoqDQogICAqIHB1YmxpYyBtZXRob2RzDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZnJvbSBuYW1lIG9mIHRoZSBtb2R1bGUgdG8gbWlncmF0ZSBmcm9tDQogICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkdG8gICBuYW1lIG9mIHRoZSBtb2R1bGUgdG8gbWlncmF0ZSB0bw0KICAgKg0KICAgKiBAdGhyb3dzIFxDTVNNU0V4dFxNaWdyYXRvclJ1bnRpbWVFeGNlcHRpb24NCiAgICovDQogIA0KICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRmcm9tID0gTlVMTCwgc3RyaW5nICR0byA9IE5VTEwpDQogIHsNCiAgICBpZiggZW1wdHkoJGZyb20pIHx8IGVtcHR5KCR0byApICkNCiAgICB7DQogICAgICB0aHJvdyBuZXcgTWlncmF0b3JSdW50aW1lRXhjZXB0aW9uKCdCb3RoICRmcm9tIGFuZCAkdG8gcGFyYW1ldGVycyBuZWVkZWQnKTsNCiAgICB9DQogICAgDQogICAgJHRoaXMtPl9zb3VyY2VfbW9kdWxlX25hbWUgPSAkZnJvbTsNCiAgICAkdGhpcy0+X3RhcmdldF9tb2R1bGVfbmFtZSA9ICR0bzsNCiAgICANCiAgICAkdGhpcy0+X2luaXRpYWxpemUoKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSBpbnQgJGZsYWdzDQogICAqDQogICAqIEByZXR1cm4gbW9kdWxlX21pZ3JhdG9yDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gc2V0X2ZsYWdzKGludCAkZmxhZ3MpIDogbW9kdWxlX21pZ3JhdG9yDQogIHsNCiAgICAkdGhpcy0+X2ZsYWdzID0gJGZsYWdzOw0KICAgIA0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KICANCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBzZXRfdGFibGVzKCR0YWJsZXMgPSBOVUxMKSA6IG1vZHVsZV9taWdyYXRvcg0KICB7DQogICAgaWYoXGlzX2FycmF5KCR0YWJsZXMpICYmICFlbXB0eSgkdGFibGVzKSApDQogICAgew0KICAgICAgJHRoaXMtPl90YWJsZXMgPSAkdGFibGVzOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBzZXRfaW5kZXhlc190YWJsZXMoJGluZGV4ZXNfdGFibGVzID0gTlVMTCkgOiBtb2R1bGVfbWlncmF0b3INCiAgew0KICAgIGlmKFxpc19hcnJheSgkaW5kZXhlc190YWJsZXMpICYmICFlbXB0eSgkaW5kZXhlc190YWJsZXMpICkNCiAgICB7DQogICAgICAkdGhpcy0+X2luZGV4ZXNfdGFibGVzID0gJGluZGV4ZXNfdGFibGVzOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBzZXRfaW5kZXhlcygkaW5kZXhlcyA9IE5VTEwpIDogbW9kdWxlX21pZ3JhdG9yDQogIHsNCiAgICBpZihcaXNfYXJyYXkoJGluZGV4ZXMpICYmICFlbXB0eSgkaW5kZXhlcykgKQ0KICAgIHsNCiAgICAgICR0aGlzLT5faW5kZXhlcyA9ICRpbmRleGVzOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBzZXRfcHJlZnMoJHByZWZzID0gTlVMTCkgOiBtb2R1bGVfbWlncmF0b3INCiAgew0KICAgIGlmKFxpc19hcnJheSgkcHJlZnMpICYmICFlbXB0eSgkcHJlZnMpICkNCiAgICB7DQogICAgICAkdGhpcy0+X3ByZWZzID0gJHByZWZzOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBzZXRfZm9sZGVycygkZm9sZGVycyA9IE5VTEwpIDogbW9kdWxlX21pZ3JhdG9yDQogIHsNCiAgICBpZihcaXNfYXJyYXkoJGZvbGRlcnMpICYmICFlbXB0eSgkZm9sZGVycykgKQ0KICAgIHsNCiAgICAgICR0aGlzLT5fZm9sZGVycyA9ICRmb2xkZXJzOw0KICAgIH0NCiAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gc2V0X2ZpbGVzKCRmaWxlcyA9IE5VTEwpIDogbW9kdWxlX21pZ3JhdG9yDQogIHsNCiAgICBpZihcaXNfYXJyYXkoJGZpbGVzKSAmJiAhZW1wdHkoJGZpbGVzKSApDQogICAgew0KICAgICAgJHRoaXMtPl9maWxlcyA9ICRmaWxlczsNCiAgICB9DQogIA0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIHNldF9zb3VyY2VfZGJfdGFibGVfbW9kdWxlX2FsaWFzKCRhbGlhcyA9IE5VTEwpIDogbW9kdWxlX21pZ3JhdG9yDQogIHsNCiAgICAkdGhpcy0+X3N0bWEgPSAkYWxpYXMgPz8gJ21vZHVsZSc7DQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gc2V0X3RhcmdldF9kYl90YWJsZV9tb2R1bGVfYWxpYXMoJGFsaWFzID0gTlVMTCkgOiBtb2R1bGVfbWlncmF0b3INCiAgew0KICAgICR0aGlzLT5fdHRtYSA9ICRhbGlhcyA/PyAnbW9kdWxlJzsNCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBydW4oKSA6IGFycmF5DQogIHsNCiAgICAkY29kZSA9IDA7DQogICAgJG1zZyAgPSAnT0snOw0KICAgICRlcnIgID0gWyRjb2RlLCAkbXNnXTsNCiAgICAkZmFpbCA9IEZBTFNFOw0KICAgIA0KICAgIGlmKCAhJHRoaXMtPl9pc19zb3VyY2VfaW5zdGFsbGVkKCkgKQ0KICAgIHsNCiAgICAgICRjb2RlID0gMTsNCiAgICAgICRtc2cgPSAnbm9fc291cmNlX2luc3RhbGwnOw0KICAgICAgJGVyciA9IFskY29kZSwgJG1zZ107DQogICAgICByZXR1cm4gW0ZBTFNFLCAkZXJyXTsNCiAgICB9DQogICAgDQogICAgJGNvbnRleHQgPSAkdGhpcy0+X3NvdXJjZV9tb2R1bGVfbmFtZSAuICcyJyAuICR0aGlzLT5fdGFyZ2V0X21vZHVsZV9uYW1lOw0KICAgIA0KICAgICMgYmFja3VwIHRhcmdldCB0YWJsZXMNCiAgICB0cnkNCiAgICB7DQogICAgICBcYXVkaXQoODgwMDg1LCAkY29udGV4dCwgJ1N0YXJ0IG1ha2luZyBiYWNrdXBzJyk7DQogICAgICAkdGhpcy0+X0NvcHlTb3VyY2VUYWJsZXMyYmt1cCgpOw0KICAgIH0NCiAgICBjYXRjaCggTWlncmF0b3JEYkV4Y2VwdGlvbiAkZSkNCiAgICB7DQogICAgICAkY29kZSA9ICRlLT5nZXRDb2RlKCk7DQogICAgICAkbXNnID0gJGUtPmdldE1lc3NhZ2UoKTsNCiAgICAgICRmdWxsX21zZyA9ICdTb21ldGhpbmcgd2VudCB3cm9uZyBjcmVhdGluZyBiYWNrdXBzIG9mICcNCiAgICAgICAgICAgICAgICAgIC4gJHRoaXMtPl90YXJnZXRfbW9kdWxlX25hbWUNCiAgICAgICAgICAgICAgICAgIC4gJyB0YWJsZXMgd2l0aCB0aGUgbWVzc2FnZTogY29kZScNCiAgICAgICAgICAgICAgICAgIC4gJGNvZGUNCiAgICAgICAgICAgICAgICAgIC4nIC0gIicNCiAgICAgICAgICAgICAgICAgIC4gJG1zZw0KICAgICAgICAgICAgICAgICAgLiAnIiB0YWJsZXMuLi4gZ29pbmcgdG8gZHJvcCB0ZW1wIHRhYmxlcyEnDQogICAgICA7DQogICAgICANCiAgICAgIFxhdWRpdCg4ODAwODUsICRjb250ZXh0LCAkZnVsbF9tc2cpOw0KICAgICAgDQogICAgICB0cnkNCiAgICAgIHsNCiAgICAgICAgIyBzb21ldGhpbmcgd2VudCB3cm9uZyByZW1vdmUgdGhlIGJhY2t1cHMgYW55d2F5DQogICAgICAgICR0aGlzLT5fRHJvcFRlbXBzKCk7DQogICAgICAgIFxhdWRpdCg4ODAwODUsICRjb250ZXh0LCAnQmFja3VwIHRhYmxlcyBkcm9wcGVkIHN1Y2Nlc3NmdWxseSEnKTsNCiAgICAgIH0NCiAgICAgIGNhdGNoKCBNaWdyYXRvckRiRHJvcEV4Y2VwdGlvbiAkZSkNCiAgICAgIHsNCiAgICAgICAgJGNvZGUgPSAkZS0+Z2V0Q29kZSgpOw0KICAgICAgICAkbXNnID0gJGUtPmdldE1lc3NhZ2UoKTsNCiAgICAgICAgXGF1ZGl0KDg4MDA4NSwgJGNvbnRleHQsICdFcnJvciBkcm9wcGluZyAnIC4gJHRoaXMtPl90YXJnZXRfbW9kdWxlX25hbWUgLiAnIHRlbXAgdGFibGVzOiAoJyAuICRjb2RlIC4gJykgLSAnIC4gJG1zZyk7DQogICAgICB9DQogICAgICBmaW5hbGx5DQogICAgICB7DQogICAgICAgIFxhdWRpdCg4ODAwODUsICRjb250ZXh0LCAnQ29weWluZyB0YWJsZXMgZnJvbSAnIC4gJHRoaXMtPl9zb3VyY2VfbW9kdWxlX25hbWUgLiAnIGZhaWxlZCEgSW1wb3J0IGFib3J0ZWQgYW5kIHNvbWUgY2xlYW5pbmcgdXAgd2FzIGF0dGVtcHRlZC4nKTsNCiAgICAgICAgIyB3aGV0aGVyIGJhY2t1cCBmYWlsZWQgb3IgYm90aCBiYWNrdXAgYW5kIGRyb3AgdGVtcHMNCiAgICAgICAgIyB3ZSByZXR1cm4gdGhlIGVycm9yIGNvZGUgLS0gdGhlcmUgaXMgb25seSBzbyBtdWNoIHdlIGNhbiBkbw0KICAgICAgICAkZXJyID0gWyRjb2RlLCAkbXNnXTsNCiAgICAgICAgcmV0dXJuIFtGQUxTRSwgJGVycl07DQogICAgICB9DQogICAgfQ0KICAgIA0KICAgICMgY29weSBzb3VyY2UgdG8gdGFyZ2V0DQogICAgdHJ5DQogICAgew0KICAgICAgXGF1ZGl0KDg4MDA4NSwgJGNvbnRleHQsICdTdGFydCBjb3B5aW5nIHRhYmxlcyBmcm9tICcgLiAkdGhpcy0+X3NvdXJjZV9tb2R1bGVfbmFtZSk7DQogICAgICAkdGhpcy0+X0NvcHlTb3VyY2VUYWJsZXMyVGFyZ2V0KCk7DQogICAgfQ0KICAgIGNhdGNoKCBNaWdyYXRvckRiRXhjZXB0aW9uICRlKQ0KICAgIHsNCiAgICAgICRjb2RlID0gJGUtPmdldENvZGUoKTsNCiAgICAgICRtc2cgPSAkZS0+Z2V0TWVzc2FnZSgpOw0KICAgICAgDQogICAgICAjIHNvbWV0aGluZyB3ZW50IHdyb25nDQogICAgICBcYXVkaXQoODgwMDg1LCAkY29udGV4dCwgJ1NvbWV0aGluZyB3ZW50IHdyb25nIGNvcHlpbmcgdGFibGVzIGZyb20gJyAuICR0aGlzLT5fc291cmNlX21vZHVsZV9uYW1lIC4gJzogKCcgLiAkY29kZSAuICcpIC0gJyAuICRtc2cgLiAnLi4uIGdvaW5nIHRvIHJvbGxiYWNrIScpOw0KICAgICAgDQogICAgICB0cnkNCiAgICAgIHsNCiAgICAgICAgIyByb2xsIGJhY2sNCiAgICAgICAgJHRoaXMtPl9Sb2xsQmFjaygpOw0KICAgICAgICAjIHJlbW92ZSB0aGUgYmFja3VwcyBhbnl3YXkNCiAgICAgICAgXGF1ZGl0KDg4MDA4NSwgJGNvbnRleHQsICdSb2xsZWQgYmFjay4uLiByZW1vdmluZyB0ZW1wIGJhY2t1cCB0YWJsZXMnKTsNCiAgICAgICAgJHRoaXMtPl9Ecm9wVGVtcHMoKTsNCiAgICAgICAgXGF1ZGl0KDg4MDA4NSwgJGNvbnRleHQsICdCYWNrdXAgdGFibGVzIGRyb3BwZWQgc3VjY2Vzc2Z1bGx5IScpOw0KICAgICAgfQ0KICAgICAgY2F0Y2goIE1pZ3JhdG9yRGJSb2xsQmFja0V4Y2VwdGlvbiAkZSkNCiAgICAgIHsNCiAgICAgICAgJGNvZGUgPSAkZS0+Z2V0Q29kZSgpOw0KICAgICAgICAkbXNnID0gJGUtPmdldE1lc3NhZ2UoKTsNCiAgICAgICAgXGF1ZGl0KDg4MDA4NSwgJGNvbnRleHQsICdFcnJvciByb2xsaW5nIGJhY2s6ICgnIC4gJGNvZGUgLiAnKSAtICcgLiAkbXNnKTsNCiAgICAgIH0NCiAgICAgIGNhdGNoKCBNaWdyYXRvckRiRHJvcEV4Y2VwdGlvbiAkZSkNCiAgICAgIHsNCiAgICAgICAgJGNvZGUgPSAkZS0+Z2V0Q29kZSgpOw0KICAgICAgICAkbXNnID0gJGUtPmdldE1lc3NhZ2UoKTsNCiAgICAgICAgXGF1ZGl0KDg4MDA4NSwgJGNvbnRleHQsICdFcnJvciBkcm9wcGluZyAnIC4gJHRoaXMtPl90YXJnZXRfbW9kdWxlX25hbWUgLiAnIHRlbXAgdGFibGVzOiAoJyAuICRjb2RlIC4gJykgLSAnIC4gJG1zZyk7DQogICAgICB9DQogICAgICBmaW5hbGx5DQogICAgICB7DQogICAgICAgICMgd2hldGhlciBiYWNrdXAgZmFpbGVkIG9yIGJvdGggYmFja3VwIGFuZCBkcm9wIHRlbXBzDQogICAgICAgICMgd2UgcmV0dXJuIHRoZSBlcnJvciBjb2RlIC0tIHRoZXJlIGlzIG9ubHkgc28gbXVjaCB3ZSBjYW4gZG8NCiAgICAgICAgXGF1ZGl0KDg4MDA4NSwgJGNvbnRleHQsICdDb3B5aW5nIHRhYmxlcyBmcm9tICcgLiAkdGhpcy0+X3NvdXJjZV9tb2R1bGVfbmFtZSAuICcgZmFpbGVkISBJbXBvcnQgYWJvcnRlZCBhbmQgc29tZSBjbGVhbmluZyB1cCB3YXMgYXR0ZW1wdGVkLicpOw0KICAgICAgICAkZXJyID0gWyRjb2RlLCAkbXNnXTsNCiAgICAgICAgDQogICAgICAgIHJldHVybiBbRkFMU0UsICRlcnJdOw0KICAgICAgfQ0KICAgIH0NCiAgICANCiAgICB0cnkNCiAgICB7DQogICAgICAkdGhpcy0+X0Ryb3BUZW1wcygpOw0KICAgICAgXGF1ZGl0KDg4MDA4NSwgJGNvbnRleHQsICdCYWNrdXAgdGFibGVzIGRyb3BwZWQgc3VjY2Vzc2Z1bGx5IScpOw0KICAgIH0NCiAgICBjYXRjaCggTWlncmF0b3JEYkRyb3BFeGNlcHRpb24gJGUpDQogICAgew0KICAgICAgJGNvZGUgPSAkZS0+Z2V0Q29kZSgpOw0KICAgICAgJG1zZyAgPSAkZS0+Z2V0TWVzc2FnZSgpOw0KICAgICAgJGZhaWwgPSBUUlVFOw0KICAgICAgXGF1ZGl0KDg4MDA4NSwgJGNvbnRleHQsICdFcnJvciBkcm9wcGluZyAnIC4gJHRoaXMtPl90YXJnZXRfbW9kdWxlX25hbWUgLiAnIHRlbXAgdGFibGVzOiAoJyAuICRjb2RlIC4gJykgLSAnIC4gJG1zZyk7DQogICAgfQ0KICAgIGZpbmFsbHkNCiAgICB7DQogICAgICBpZigkZmFpbCkNCiAgICAgIHsNCiAgICAgICAgIyB3aGV0aGVyIGJhY2t1cCBmYWlsZWQgb3IgYm90aCBiYWNrdXAgYW5kIGRyb3AgdGVtcHMNCiAgICAgICAgIyB3ZSByZXR1cm4gdGhlIGVycm9yIGNvZGUgLS0gdGhlcmUgaXMgb25seSBzbyBtdWNoIHdlIGNhbiBkbw0KICAgICAgICBcYXVkaXQoODgwMDg1LCAkY29udGV4dCwgJ0NvcHlpbmcgdGFibGVzIGZyb20gJyAuICR0aGlzLT5fc291cmNlX21vZHVsZV9uYW1lIC4gJyBzZWVtcyB0byBoYXZlIHdvcmtlZCFCdXQgYXBwYXJlbnRseSB0aGVyZSBhcmUgc29tZSBsZWZ0b3ZlciB0ZW1wIHRhYmxlcy4nKTsNCiAgICAgICAgJGVyciA9IFskY29kZSwgJG1zZ107DQogICAgICAgIHJldHVybiBbRkFMU0UsICRlcnJdOw0KICAgICAgfQ0KICAgIH0NCiAgICANCiAgICB0cnkNCiAgICB7DQogICAgICAkdGhpcy0+X1JlbmFtZUluZGV4ZXMoKTsNCiAgICB9DQogICAgY2F0Y2goTWlncmF0b3JEYkV4Y2VwdGlvbiAkZSkNCiAgICB7DQogICAgICAkY29kZSA9ICRlLT5nZXRDb2RlKCk7DQogICAgICAkbXNnICA9ICRlLT5nZXRNZXNzYWdlKCk7DQogICAgICAkZXJyICA9IFskY29kZSwgJG1zZ107DQogICAgICByZXR1cm4gW0ZBTFNFLCAkZXJyXTsNCiAgICB9DQogICAgDQogICAgdHJ5DQogICAgew0KICAgICAgJHRoaXMtPl9Db3B5UHJlZmVyZW5jZXMoKTsNCiAgICB9DQogICAgY2F0Y2goXEV4Y2VwdGlvbiAkZSkNCiAgICB7DQogICAgICAkY29kZSA9ICRlLT5nZXRDb2RlKCk7DQogICAgICAkbXNnICA9ICRlLT5nZXRNZXNzYWdlKCk7DQogICAgICAkZXJyICA9IFskY29kZSwgJG1zZ107DQogICAgICByZXR1cm4gW0ZBTFNFLCAkZXJyXTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuIFtUUlVFLCAkZXJyXTsNCiAgfQ0KICANCiAgLyoqDQogICAqIHF1ZXJpZXMgaWYgdGhlIHNvdXJjZSBtb2R1bGUNCiAgICogaXMgaW5zdGFsbGVkDQogICAqIHdoZXRoZXIgaXQgaXMgYWN0aXZlIG9yIG5vdDsNCiAgICoNCiAgICogY2FuIGJlIG92ZXJyaWRkZW4gYnkgY2hpbGQgY2xhc3Nlcw0KICAgKg0KICAgKiBAcmV0dXJuIGJvb2wNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBoYXZlX3NvdXJjZSgpDQogIHsNCiAgICByZXR1cm4gJHRoaXMtPl9oYXZlX3NvdXJjZSgpOw0KICB9DQogIA0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.notification_message.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBjb250YWlucyBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgZm9yIHNlbmRpbmcgbm90aWZpY2F0aW9ucy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IEV4Y2VwdGlvbnMKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxMCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCgovKioKICogQSBiYXNlIGNsYXNzIG5vdGlmaWNhdGlvbiBtZXNzYWdlIG9iamVjdC4gIFRoaXMgaXMgdXNlZCB0byBjb252ZXkgaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgZm9ybWF0dGVkIGFuZCBzZW50IG91dCB2aWEgdmFyaW91cyB0cmFuc3BvcnRzLgogKgogKiBUaGlzIG9iamVjdCBpcyB1c2VkIHRvIHNlbmQgZGF0YSB0byB2YXJpb3VzIHR3aXR0ZXIsIGZhY2Vib29rLCBtYWlsLCBhbmQgb3RoZXIgbW9kdWxlcy4gIHNvbWUgdHJhbnNwb3J0cyBtYXkgbm90IHVzZSBhbGwgb2YgdGhlIGZpZWxkcwogKiBvciBtYXkgYWdncmVnYXRlIHRoZSBkYXRhIGluIHZhcmlvdXMgd2F5cy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQHNlZSBDR05vdGlmaWVyCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJHN1YmplY3QgVGhlIG1lc3NhZ2Ugc3ViamVjdAogKiBAcHJvcGVydHkgc3RyaW5nICRib2R5IFRoZSBtZXNzYWdlIGJvZHkuICAgU29tZSBkaXN0cmlidXRpb24gdHJhbnNwb3J0cyBtYXkgc3RyaXAgSFRNTCBvdXQgb2YgdGhlIGJvZHkgYW5kL29yIHNob3J0ZW4gVVJMUyBvciBkbyBvdGhlciBwcm9jZXNzaW5nIHRvIG1ha2UKICogICB0ZXh0IGNvbXBsaWFudCB3aXRoIHRoZWlyIHJlcXVpcmVtZW50cy4KICogQHByb3BlcnR5IHN0cmluZyAkbW9kdWxlIFRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hdGlvbmcgbW9kdWxlLgogKiBAcHJvcGVydHkgaW50L2NvbnN0ICRwcmlvcml0eSBBIG1lc3NhZ2UgcHJpb3JpdHkgKDEgPSBoaWdoLCAyID0gbm9ybWFsLCAzID0gbG93KQogKiBAcHJvcGVydHkgaW50ICR0byBBIHVzZXIgaWRlbnRpZmllci4gIEEgbmVnYXRpdmUgdmFsdWUgaW5kaWNhdGVzIGFuIGFkbWluIHVzZXIgaWQuICBBIHBvc2l0aXZlIHZhbHVlIGluZGljYXRlcyBhbiBGRVUgdWlkLgogKiBAcHJvcGVydHkgaW50ICR0b19ncm91cCBBIGdyb3VwIGlkZW50aWZpZXIuICBBIG5lZ2F0aXZlIHZhbHVlIGluZGljYXRlcyBhbiBhZG1pbiBnaWQuICBBIHBvc2l0aXZlIHZhbHVlIGluZGljYXRlcyBhbiBGRVUgZ2lkLgogKiBAcHJvcGVydHkgZmxvYXQgJGxhdCBMYXRpdHVkZSBvZiBzZW5kZXIKICogQHByb3BlcnR5IGZsb2F0ICRsb25nIExvbmdpdHVkZSBvZiBzZW5kZXIKICogQHByb3BlcnR5IGJvb2wgJGh0bWwgTWF5IGluZGljYXRlIHRoYXQgdGhlIG1lc3NhZ2UgaXMgYW4gSFRNTCBtZXNzYWdlLiAgU29tZSB0cmFuc3BvcnRzIG1heSBpZ25vcmUgdGhpcy4KICogQHByb3BlcnR5IGJvb2wgJGlzY2hlY2tpbiBNYXkgaW5kaWNhdGUgdGhhdCB0aGUgbWVzc2FnZSBpcyBhIHVzZXIgY2hlY2tpbi4KICogQHByb3BlcnR5IHN0cmluZyAkbGluayBVUkwgdG8gYXR0YWNoIHRvIHRoZSBtZXNzYWdlCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJGxpbmtuYW1lIEEgbmFtZSBmb3IgdGhlIGxpbmsKICogQHByb3BlcnR5IHN0cmluZyAkY2FwdGlvbiBBIGNhcHRpb24gZm9yIHRoZSBsaW5rCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJGRlc2NyaXB0aW9uIEEgZGVzY3JpcHRpb24gZm9yIHRoZSBsaW5rCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJHBpY3R1cmUgQSBVUkwgdG8gYW4gaW1hZ2UgdG8gYXR0YWNoIHRvIHRoZSBtZXNzYWdlCiAqIEBwcm9wZXJ0eSBib29sICRzaG9ydGVuIEluZGljYXRlcyB0aGF0IFVSTFMgaW4gdGhlIG1lc3NhZ2UgYm9keSAoYW5kIHBvc3NpYmx5IHRoZSBsaW5rIGFuZCBwaWN0dXJlKSBjYW4gYmUgc2hvcnRlbmVkIGJ5IHRoZSB0cmFuc3BvcnQKICovCmNsYXNzIG5vdGlmaWNhdGlvbl9tZXNzYWdlCnsKICBjb25zdCBQUklPUklUWV9ISUdIID0gMTsKICBjb25zdCBQUklPUklUWV9OT1JNQUwgPSAyOwogIGNvbnN0IFBSSU9SSVRZX0xPVyA9IDM7CgogIC8qKgogICAqIEBpZ25vcmUKICAgKi8KICBwcml2YXRlIHN0YXRpYyAkX2tleXMgPSBhcnJheSgnc3ViamVjdCcsJ2JvZHknLCdtb2R1bGUnLCdwcmlvcml0eScsJ3RvJywndG9fZ3JvdXAnLCdsYXQnLCdsb25nJywnaHRtbCcsJ2lzY2hlY2tpbicsJ2xpbmsnLCdsaW5rbmFtZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhcHRpb24nLCdkZXNjcmlwdGlvbicsJ3BpY3R1cmUnLCdzaG9ydGVuJyk7CgogIC8qKgogICAqIEBpZ25vcmUKICAgKi8KICBwcml2YXRlICRfZGF0YSA9IGFycmF5KCk7CgogIC8qKgogICAqIEBpZ25vcmUKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJG9rZXkpCiAgewogICAgLy8ga2V5IHRyYW5zbGF0aW9uCiAgICBpZiggJG9rZXkgPT0gJ21lc3NhZ2UnIHx8ICRva2V5ID09ICdtc2cnICkgJG9rZXkgPSAnYm9keSc7CgogICAgJGtleSA9IHN0cnRvbG93ZXIoJG9rZXkpOwogICAgaWYoICFpbl9hcnJheSgka2V5LHNlbGY6OiRfa2V5cykgKSB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBdHRlbXB0IHRvIHJldHJpZXZlIGludmFsaWQga2V5ICcuJG9rZXkuJyBmcm9tIG1lc3NhZ2Ugb2JqZWN0Jyk7CiAgICBpZiggaXNzZXQoJHRoaXMtPl9kYXRhWyRrZXldKSApIHJldHVybiAkdGhpcy0+X2RhdGFbJGtleV07CgogICAgc3dpdGNoKCRrZXkpIHsKICAgIGNhc2UgJ3ByaW9yaXR5JzoKICAgICAgcmV0dXJuIHNlbGY6OlBSSU9SSVRZX05PUk1BTDsKCiAgICBjYXNlICd0byc6CiAgICBjYXNlICd0b19ncm91cCc6CiAgICAgIHJldHVybiAwOwoKICAgIGNhc2UgJ2h0bWwnOgogICAgICByZXR1cm4gMDsKCiAgICBjYXNlICdtb2R1bGUnOgogICAgICByZXR1cm4gLTE7CgogICAgY2FzZSAnc2hvcnRlbic6CiAgICAgIHJldHVybiAwOwogICAgfQogIH0KCiAgLyoqCiAgICogQGlnbm9yZQogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBfX3NldCgka2V5LCR2YWx1ZSkKICB7CiAgICBpZiggJGtleSA9PSAnbWVzc2FnZScgfHwgJGtleSA9PSAnbXNnJyApICRrZXkgPSAnYm9keSc7CgogICAgJGtleSA9IHN0cnRvbG93ZXIoJGtleSk7CiAgICBpZiggIWluX2FycmF5KCRrZXksc2VsZjo6JF9rZXlzKSApIHRocm93IG5ldyBFeGNlcHRpb24oJ0F0dGVtcHQgdG8gc3RvcmUgaW52YWxpZCBkYXRhIGludG8gbWVzc2FnZSBvYmplY3QnKTsKCiAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSAkdmFsdWU7CiAgfQoKICAvKioKICAgKiBAaWdub3JlCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIF9faXNzZXQoJGtleSkKICB7CiAgICBpZiggIWluX2FycmF5KCRrZXksc2VsZjo6JF9rZXlzKSApIHRocm93IG5ldyBFeGNlcHRpb24oJ0F0dGVtcHQgdG8gcmV0cmlldmUgaW52YWxpZCBrZXkgJy4kb2tleS4nIGZyb20gbWVzc2FnZSBvYmplY3QnKTsKICAgIHJldHVybiBpc3NldCgkdGhpcy0+X2RhdGFbJGtleV0pOwogIH0KCiAgLyoqCiAgICogVGVzdCBpZiB0aGUga2V5IHNwZWNpZmllZCBpcyB2YWxpZAogICAqCiAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICogQHJldHVybiBib29sCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIHZhbGlkX2tleSgka2V5KQogIHsKICAgIGlmKCAka2V5ID09ICdtZXNzYWdlJyB8fCAka2V5ID09ICdtc2cnICkgJGtleSA9ICdib2R5JzsKICAgIHJldHVybiBpbl9hcnJheSgka2V5LHNlbGY6OiRfa2V5cyk7CiAgfQp9IC8vIGVuZCBvZiBjbGFzcwoKIwojIEVPRgojCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.POP3_Base.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFBPUDMgQ2xhc3MKICogCiAqIFRoaXMgY2xhc3MgcHJvdmlkZSBhY2Nlc3MgdG8gYSBwb3AzIHNlcnZlciB0aHJvdWdoIHRoZSBwb3AzIHByb3RvY29sCiAqICAKICogQG5lZWQ6ID49cGhwLTUuMi54CiAqIEBhdXRob3I6IGowaW50eS5zTAogKiBAZW1haWw6IGJlc3RtaXNjaG1ha2VyQHdlYi5kZQogKiBAdmVyc2lvbjogMC43LjItYmV0YQogKgogKiBOT1RFUzoKICogLSBJUHY2IHN1cHBvcnQgTkVWRVIgdGVzdGVkIGF0IHRpbWUKICovCgpmaW5hbCBjbGFzcyBQT1AzX0V4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgp7CiAgLyoqCiAgICogQHBhcmFtIHN0cmluZyAkc3RyRXJyTWVzc2FnZQogICAqIEBwYXJhbSBpbnRlZ2VyICRpbnRFcnJDb2RlCiAgICogCiAgICogQHJldHVybiBQT1AzX0V4Y2VwdGlvbgogICAqLwogIGZ1bmN0aW9uIF9fY29uc3RydWN0KCAkc3RyRXJyTWVzc2FnZSwgJGludEVyckNvZGUgKQogIHsKICAgIHN3aXRjaCggJGludEVyckNvZGUgKQogICAgICB7CiAgICAgIGNhc2UgUE9QM19CYXNlOjpFUlJfTk9UX0lNUExFTUVOVFM6CglpZiggZW1wdHkoJHN0ckVyck1lc3NhZ2UpICkgJHN0ckVyck1lc3NhZ2UgPSAiVGhpcyBmdW5jdGlvbiBpc24ndCBpbXBsZW1lbnRzIGF0IHRpbWUuIjsKCWJyZWFrOwogICAgICAgICAgICAKICAgICAgY2FzZSBQT1AzX0Jhc2U6OkVSUl9TT0NLRVRTOgoJJHN0ckVyck1lc3NhZ2UgPSAiU29ja2V0cyBFcnJvcjogKCIuIHNvY2tldF9sYXN0X2Vycm9yKCkgLiIpIC0tICIuIHNvY2tldF9zdHJlcnJvcihzb2NrZXRfbGFzdF9lcnJvcigpKTsKCWJyZWFrOwogICAgICAgICAgICAKICAgICAgY2FzZSBQT1AzX0Jhc2U6OkVSUl9TVFJFQU06CiAgICAgIGNhc2UgUE9QM19CYXNlOjpFUlJfTE9HOgoJJGFFcnJvciA9IGVycm9yX2dldF9sYXN0KCk7Cgkkc3RyRXJyTWVzc2FnZSA9ICJTdHJlYW0gRXJyb3I6ICgiLiAkYUVycm9yWyJ0eXBlIl0gLiIpIC0tICIuICRhRXJyb3JbIm1lc3NhZ2UiXTsKCWJyZWFrOwogICAgICB9CiAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRzdHJFcnJNZXNzYWdlLCAkaW50RXJyQ29kZSk7CQogIH0KCQoJCiAgLyoqCiAgICogQHJldHVybiBzdHJpbmcgRXhjZXB0aW9uIHdpdGggU3RhY2tUcmFjZSBhcyBTdHJpbmcKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgewogICAgcmV0dXJuIF9fQ0xBU1NfXyAuIiBbIi4gJHRoaXMtPmdldENvZGUoKSAuIl0gLS0gIi4gJHRoaXMtPmdldE1lc3NhZ2UoKSAuIiBpbiBmaWxlICIuICR0aGlzLT5nZXRGaWxlKCkgLiIgYXQgbGluZSAiLiAkdGhpcy0+Z2V0TGluZSgpLiBQSFBfRU9MIC4iVHJhY2U6ICIuICR0aGlzLT5nZXRUcmFjZUFzU3RyaW5nKCkgLlBIUF9FT0w7CiAgfSAgICAKfSAvLyBlbmQgb2YgY2xhc3MKCgoKY2xhc3MgUE9QM19CYXNlCnsKICAvL2NvbnN0IEVSUl9OT05FID0gMDsKICBjb25zdCBFUlJfTE9HID0gMTsKICBjb25zdCBFUlJfU09DS0VUUyA9IDI7CiAgY29uc3QgRVJSX1BBUkFNRVRFUiA9IDM7CiAgY29uc3QgRVJSX05PVF9JTVBMRU1FTlRTID0gNDsKICBjb25zdCBFUlJfSU5WQUxJRF9TVEFURSA9IDU7CiAgY29uc3QgRVJSX1NUUkVBTSA9IDY7CiAgY29uc3QgRVJSX1NFTkRfQ01EID0gNzsKICAKICBjb25zdCBTVEFURV9ESVNDT05ORUNUID0gMTAwOwogIGNvbnN0IFNUQVRFX0FVVEhPUklaQVRJT04gPSAxMDE7CiAgY29uc3QgU1RBVEVfVFJBTlNBQ1RJT04gPSAxMDI7CiAgICAKICBjb25zdCBERUZBVUxUX0JVRkZFUl9TSVpFID0gNDA5NjsKICBwcml2YXRlICRiTG9nT3BlbmVkID0gRkFMU0U7CiAgcHJpdmF0ZSAkcmVzTG9nRnAgPSBGQUxTRTsKICBwcml2YXRlICRiSGlkZVVzZXJuYW1lQXRMb2cgPSBUUlVFOwogIAogIHByaXZhdGUgJGJVc2VTb2NrZXRzOwogIHByaXZhdGUgJHN0clByb3RvY29sID0gTlVMTDsKICBwcml2YXRlICRiU29ja2V0Q29ubmVjdGVkID0gRkFMU0U7CiAgcHJpdmF0ZSAkc3RySG9zdG5hbWUgPSBOVUxMOwogIHByaXZhdGUgJHN0cklQQWRyZXNzID0gTlVMTDsKICBwcml2YXRlICRpbnRQb3J0ID0gTlVMTDsKICAKICBwcml2YXRlICRpbnRDdXJTdGF0ZSA9IHNlbGY6OlNUQVRFX0RJU0NPTk5FQ1Q7CiAgcHJpdmF0ZSAkc3RyQVBPUEJhbm5lciA9IE5VTEw7CiAgcHJpdmF0ZSAkYkFQT1BBdXRvRGV0ZWN0OwogIAogIHByaXZhdGUgJHN0clZlcnNpb24gPSAiMC43LjItYmV0YSI7CiAgCgogIC8qCiAgICogQ29uc3RydWN0b3IKICAgKgogICAqIEBwYXJhbSBib29sICRiQVBPUEF1dG9EZXRlY3QgIEFQT1AgQXV0byBEZWN0aW9uIG9ufG9mZgogICAqIEBwYXJhbSBib29sICRiSGlkZVVzZXJuYW1lQXRMb2cgIERvZXMgdGhlIFVzZXJuYW1lIHNob3VsZCBoaWRlIGF0IHRoZSBsb2cgZmlsZSAKICAgKiBAcGFyYW0gJHN0ckVuY3J5cHRpb24gKHRjcHxzc2x8c3NsdjJ8c3NsdjN8dGxzKSBbZGVwZW5kIG9uIHlvdXIgUEhQIGNvbmZpZ3VyYXRpb25dCiAgICogQHBhcmFtIGJvb2wgJGJVc2VTb2NrZXRzICBVc2UgdGhlIHNvY2tldCBleHRlbnNpb24gKGRlZmF1bHQgPSBUUlVFKSBCdXQgaXQgY2hlY2sgaXMgdGhlIGV4dGVuc2lvbl9sb2FkZWQsIHRvbwogICAqICAgICAgICAgICAgICEhISBPbmx5IG5lZWRlZCBieSB0aGVtLCB3aG8gaGF2ZSB0aGUgc29ja2V0cyBleHRlbnNpb24gbG9hZGVkLCBidXQgd2FudCB1c2UgdGhlIHN0cmVhbSBmdW5jdGlvbnMgISEhCiAgICogCiAgICogQHRocm93IFBPUDNfRXhjZXB0aW9uCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCAkc3RyRW5jcnlwdGlvbiA9ICd0Y3AnLCAkYkFQT1BBdXRvRGV0ZWN0ID0gVFJVRSwgJGJIaWRlVXNlcm5hbWVBdExvZyA9IFRSVUUsICRiVXNlU29ja2V0cyA9IFRSVUUgKQogIHsKICAgIGlmKCAhaXNfYm9vbCgkYkFQT1BBdXRvRGV0ZWN0KSApCiAgICAgIHsKCXRocm93IG5ldyBQT1AzX0V4Y2VwdGlvbigiSW52YWxpZCBBUE9QIGF1dG8gZGV0ZWN0IHBhcmFtZXRlciBnaXZlbi4iLCBzZWxmOjpFUlJfUEFSQU1FVEVSKTsKICAgICAgfQogICAgaWYoICFpc19ib29sKCRiSGlkZVVzZXJuYW1lQXRMb2cpICkKICAgICAgewoJdGhyb3cgbmV3IFBPUDNfRXhjZXB0aW9uKCJJbnZhbGlkIEhpZGUgVXNlcm5hbWUgYXQgbG9nIGZpbGUgcGFyYW1ldGVyIGdpdmVuLiIsIHNlbGY6OkVSUl9QQVJBTUVURVIpOwogICAgICB9CiAgICAgICAgCiAgICBpZiggIXByZWdfbWF0Y2goIi9eKHRjcHxzc2x8c3NsdjJ8c3NsdjN8dGxzKSskLyIsICRzdHJFbmNyeXB0aW9uKSApCiAgICAgIHsKCXRocm93IG5ldyBQT1AzX0V4Y2VwdGlvbigiSW52YWxpZCBlbmNyeXB0aW9uIHBhcmFtZXRlciBnaXZlbi4gKHRjcHxzc2x8c3NsdjJ8c3NsdjN8dGxzKSBbZGVwZW5kIG9uIHlvdXIgUEhQIGNvbmZpZ3VyYXRpb25dIiwgc2VsZjo6RVJSX1BBUkFNRVRFUik7CiAgICAgIH0KICAgIGVsc2UgaWYoICRiVXNlU29ja2V0cyAmJiBwcmVnX21hdGNoKCIvXihzc2x8c3NsdjJ8c3NsdjN8dGxzKSskLyIsICRzdHJFbmNyeXB0aW9uKSkKICAgICAgewoJdGhyb3cgbmV3IFBPUDNfRXhjZXB0aW9uKCJFbmNyeXB0aW9uIHdpdGggU29ja2V0cyBFeHRlbnNpb24gaXMgbm90IGltcGxlbWVudGVkIG5vdy4gVXNlIFwkVXNlU29ja2V0PWZhbHNlIGZvciB0aGF0LiIsc2VsZjo6RVJSX05PVF9JTVBMRU1FTlRTICk7CiAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAvLyBDaGVjayBmb3Igc29ja2V0cyBleHRlbnNpb24gaWYgbmVlZGVkCiAgICBpZiggJGJVc2VTb2NrZXRzICYmIGV4dGVuc2lvbl9sb2FkZWQoInNvY2tldHMiKSApCiAgICAgIHsKCSR0aGlzLT5iVXNlU29ja2V0cyA9IFRSVUU7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJaWYoICRiVXNlU29ja2V0cyApCgkgIHsKCSAgICAkdGhpcy0+bG9nKCdTb2NrZXQgZXh0ZW5zaW9ucyBzZWxlY3RlZCwgYnV0IHNvY2tldHMgZXh0ZW5zaW9uIGlzIG5vdCBhdmFpbGFibGUnKTsKCSAgfQoJJHRoaXMtPmJVc2VTb2NrZXRzID0gRkFMU0U7CiAgICAgIH0KICAgIC8vIEFjdGl2YXRlIG9yIERlYWN0aXZhdGUgQVBPUCBBdXRvIERldGVjdCBtZWNoYW5pc20KICAgICR0aGlzLT5iQVBPUEF1dG9EZXRlY3QgPSAkYkFQT1BBdXRvRGV0ZWN0OwogICAgJHRoaXMtPmJIaWRlVXNlcm5hbWVBdExvZyA9ICRiSGlkZVVzZXJuYW1lQXRMb2c7CiAgICAkdGhpcy0+c3RyUHJvdG9jb2wgPSAkc3RyRW5jcnlwdGlvbjsKICB9CgoKICAvKgogICAqIERlc3RydWN0b3IKICAgKgogICAqIEB0aHJvdyBQT1AzX0V4Y2VwdGlvbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBfX2Rlc3RydWN0KCkKICB7CiAgICAkdGhpcy0+ZGlzY29ubmVjdCgpOwogIH0KCgogIC8qCiAgICogQ29ubmVjdCB0byB0aGUgcG9wMyBzZXJ2ZXIKICAgKgogICAqIEBwYXJhbSBOVUxMfHN0cmluZyAkc3RySG9zdG5hbWUgIEhvc3RuYW1lIG9yIGlwIGFkcmVzcyBvZiBhIHBvcDMgc2VydmVyCiAgICogQHBhcmFtIGludGVnZXIgJGludFBvcnQgIFRoZSBwb3J0IGZvciB0aGUgcG9wMyBzZXJ2aWNlIChkZWZhdWx0IGlzIDExMCkKICAgKiBAcGFyYW0gYXJyYXkgJGFyckNvbm5lY3Rpb25UaW1lb3V0ICBhcnJheSgic2VjIiA9PiAiIiwgInVzZWMiID0+ICIiKQogICAqIEBwYXJhbSBib29sICRiSVB2NiAgSVAgVmVyc2lvbiA2IFByb3RvY29sCiAgICoKICAgKiBAdGhyb3cgUE9QM19FeGNlcHRpb24KICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gY29ubmVjdCggJiRzdHJIb3N0bmFtZSAsJGludFBvcnQgPSAxMTAsICRhcnJDb25uZWN0aW9uVGltZW91dCA9IGFycmF5KCJzZWMiID0+IDEwLCAidXNlYyIgPT4gMCkgLCRiSVB2NiA9IEZBTFNFICkKICB7CiAgICAkdGhpcy0+Y2hlY2tTdGF0ZShzZWxmOjpTVEFURV9ESVNDT05ORUNUKTsKICAgIC8vLyBQYXJhbWV0ZXIgY2hlY2tzIC8vLwoKICAgICAgaWYoICFpc19zdHJpbmcoJHN0ckhvc3RuYW1lKSApCiAgICAgICAgewoJICB0aHJvdyBuZXcgUE9QM19FeGNlcHRpb24oIkludmFsaWQgaG9zdCBwYXJhbWV0ZXIgZ2l2ZW4iLCBzZWxmOjpFUlJfUEFSQU1FVEVSKTsKICAgICAgICB9CgogICAgICBpZiggIWlzX2ludCgkaW50UG9ydCkgfHwgJGludFBvcnQgPCAxIHx8ICRpbnRQb3J0ID4gNjU1MzUgKSAKICAgICAgICB7CgkgIHRocm93IG5ldyBQT1AzX0V4Y2VwdGlvbigiSW52YWxpZCBwb3J0IHBhcmFtZXRlciBnaXZlbiIsIHNlbGY6OkVSUl9QQVJBTUVURVIpOwogICAgICAgIH0KICAgICAgaWYoICFpc19ib29sKCRiSVB2NikgKQogICAgICAgIHsKCSAgdGhyb3cgbmV3IFBPUDNfRXhjZXB0aW9uKCJJbnZhbGlkIElQdjYgcGFyYW1ldGVyIGdpdmVuIiwgc2VsZjo6RVJSX1BBUkFNRVRFUik7CiAgICAgICAgfQogICAgICAgIAogICAgICAkdGhpcy0+c3RySG9zdG5hbWUgPSAkc3RySG9zdG5hbWU7CiAgICAgICR0aGlzLT5pbnRQb3J0ID0gJGludFBvcnQ7IAogICAgICAgIAogICAgICAvLy8gQ29ubmVjdGluZyAvLy8KCWlmKCAkdGhpcy0+YlVzZVNvY2tldHMgKQoJICB7CiAgICAgICAgICAgIGlmKCAhJHRoaXMtPnJlc1NvY2tldCA9IEBzb2NrZXRfY3JlYXRlKCAoKCRiSVB2NikgPyBBRl9JTkVUNiA6IEFGX0lORVQpLCBTT0NLX1NUUkVBTSwgU09MX1RDUCApICkKCSAgICAgIHsKCQl0aHJvdyBuZXcgUE9QM19FeGNlcHRpb24oIiIsIHNlbGY6OkVSUl9TT0NLRVRTKTsKCSAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmxvZyggKCRiSVB2NikgPyAiQUZfSU5FVDYiIDogIkFGX0lORVQiIC4iLVRDUCBTb2NrZXQgY3JlYXRlZCAodXNpbmcgc29ja2V0cyBleHRlbnNpb24pIik7CgoJICAgICR0aGlzLT5zZXRTb2NrVGltZW91dCgkYXJyQ29ubmVjdGlvblRpbWVvdXQpOwoJCQkKICAgICAgICAgICAgaWYoICFAc29ja2V0X2Nvbm5lY3QoJHRoaXMtPnJlc1NvY2tldCwgJHRoaXMtPnN0ckhvc3RuYW1lLCAkdGhpcy0+aW50UG9ydCkKICAgICAgICAgICAgCXx8ICFAc29ja2V0X2dldHBlZXJuYW1lKCR0aGlzLT5yZXNTb2NrZXQsJHRoaXMtPnN0cklQQWRyZXNzKSApCgkgICAgICB7CgkJdGhyb3cgbmV3IFBPUDNfRXhjZXB0aW9uKCIiLCBzZWxmOjpFUlJfU09DS0VUUyk7CgkgICAgICB9CgkgIH0KCWVsc2UKCSAgewogICAgICAgICAgICAkZFRpbWVvdXQgPSAoZG91YmxlKSBpbXBsb2RlKCIuIiwkYXJyQ29ubmVjdGlvblRpbWVvdXQpOwoJICAgIGlmKCAhJHRoaXMtPnJlc1NvY2tldCA9IEBmc29ja29wZW4oJHRoaXMtPnN0clByb3RvY29sLiAiOi8vIiAuICR0aGlzLT5zdHJIb3N0bmFtZSAuIjoiLiAkdGhpcy0+aW50UG9ydCwgJGludEVycm5vLCAkc3RyRXJyb3IsICRkVGltZW91dCkgKQoJICAgICAgewoJCXRocm93IG5ldyBQT1AzX0V4Y2VwdGlvbiggIlsiLiAkaW50RXJybm8uIl0gLS0gIi4gJHN0ckVycm9yLCBzZWxmOjpFUlJfU1RSRUFNICk7CgkgICAgICB9CgkJCQoJICAgICR0aGlzLT5zZXRTb2NrVGltZW91dCgkYXJyQ29ubmVjdGlvblRpbWVvdXQpOwogICAgICAgICAgICAkdGhpcy0+c3RySVBBZHJlc3MgPSBAZ2V0aG9zdGJ5bmFtZSgkdGhpcy0+c3RySG9zdG5hbWUpOwoJICB9CiAgICAgICAgJHRoaXMtPmJTb2NrZXRDb25uZWN0ZWQgPSBUUlVFOwogICAgICAgICR0aGlzLT5sb2coIkNvbm5lY3RlZCB0byAiLiAkdGhpcy0+c3RyUHJvdG9jb2wgLiAiOi8vIi4gJHRoaXMtPnN0cklQQWRyZXNzIC4iOiIuICR0aGlzLT5pbnRQb3J0IC4iIFsiLiAkdGhpcy0+c3RySG9zdG5hbWUgLiJdIik7CgogICAgICAgIC8vIEdldCB0aGUgZmlyc3QgcmVzcG9uc2Ugd2l0aCwgaWYgQVBPUCBzdXBwb3J0IGF2YWxpYmxlLCB0aGUgYXBvcCBiYW5uZXIuCiAgICAgICAgJHN0ckJ1ZmZlciA9ICR0aGlzLT5yZWN2U3RyaW5nKCk7CiAgICAgICAgJHRoaXMtPmxvZygkc3RyQnVmZmVyKTsKICAgICAgICAkdGhpcy0+cGFyc2VCYW5uZXIoJHN0ckJ1ZmZlcik7CgkkdGhpcy0+aW50Q3VyU3RhdGUgPSBzZWxmOjpTVEFURV9BVVRIT1JJWkFUSU9OOwogIH0KCgogIC8qCiAgICogRGlzY29ubmVjdCBmcm9tIHRoZSBzZXJ2ZXIuCiAgICogQ0FVVElPTjoKICAgKiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3Qgc2VuZCB0aGUgUVVJVCBjb21tYW5kIHRvIHRoZSBzZXJ2ZXIgc28gYWxsIGFzIGRlbGV0ZSBtYXJrZWQgZW1haWxzIHdvbid0IGRlbGV0ZS4KICAgKgogICAqIEByZXR1cm4gdm9pZAogICAqIEB0aHJvdyBQT1AzX0V4Y2VwdGlvbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBkaXNjb25uZWN0KCkKICB7CiAgICBpZiggJHRoaXMtPmJTb2NrZXRDb25uZWN0ZWQgKQogICAgICB7CglpZiggJHRoaXMtPmJVc2VTb2NrZXRzICkKCSAgewoJICAgIGlmKCBAc29ja2V0X2Nsb3NlKCR0aGlzLT5yZXNTb2NrZXQpID09PSBGQUxTRSApCgkgICAgICB7CgkJdGhyb3cgbmV3IFBPUDNfRXhjZXB0aW9uKCIiLCBzZWxmOjpFUlJfU09DS0VUUyk7CgkgICAgICB9CgkgIH0KCWVsc2UKCSAgewoJICAgIGlmKCAhQGZjbG9zZSgkdGhpcy0+cmVzU29ja2V0KSApCgkgICAgICB7CgkJdGhyb3cgbmV3IFBPUDNfRXhjZXB0aW9uKCJmY2xvc2UoKTogRmFpbGVkIHRvIGNsb3NlIHNvY2tldCIsIHNlbGY6OkVSUl9TVFJFQU0pOwoJICAgICAgfQoJICB9CgkkdGhpcy0+YlNvY2tldENvbm5lY3RlZCA9IEZBTFNFOwoJJHRoaXMtPmxvZygiRGlzY29ubmV0ZWQgZnJvbSAiLiAkdGhpcy0+c3RySVBBZHJlc3MgLiI6Ii4gJHRoaXMtPmludFBvcnQgLiIgWyIuICR0aGlzLT5zdHJIb3N0bmFtZSAuIl0iICk7CiAgICAgIH0KICB9CgoKICAvKioKICAgKiBBdXRob3JpemUgdG8gdGhlIHBvcDMgc2VydmVyIHdpdGggeW91ciBsb2dpbiBkYXRhcy4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJHN0clVzZXIgIFVzZXJuYW1lCiAgICogQHBhcmFtIHN0cmluZyAkc3RyUGFzcyAgUGFzc3dvcmQKICAgKiBAcGFyYW0gYm9vbGVhbiAkYkFwb3AgIEFQT1AgQXV0aG9yaXphdGlvbiBNZWNoYW5pc20KICAgKgogICAqIEByZXR1cm4gdm9pZAogICAqIEB0aHJvdyBQT1AzX0V4Y2VwdGlvbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBsb2dpbiggJHN0clVzZXIsICRzdHJQYXNzLCAkYkFQT1AgPSBGQUxTRSkKICB7CiAgICAkdGhpcy0+Y2hlY2tTdGF0ZShzZWxmOjpTVEFURV9BVVRIT1JJWkFUSU9OKTsKICAgIGlmKCAhaXNfc3RyaW5nKCRzdHJVc2VyKSB8fCBzdHJsZW4oJHN0clVzZXIpID09IDAgKQogICAgICB7Cgl0aHJvdyBuZXcgUE9QM19FeGNlcHRpb24oIkludmFsaWQgdXNlcm5hbWUgc3RyaW5nIGdpdmVuIiwgc2VsZjo6RVJSX1BBUkFNRVRFUik7CiAgICAgIH0KICAgIGlmKCAhaXNfc3RyaW5nKCRzdHJQYXNzKSApCiAgICAgIHsKCXRocm93IG5ldyBQT1AzX0V4Y2VwdGlvbigiSW52YWxpZCBwYXNzd29yZCBzdHJpbmcgZ2l2ZW4iLCBzZWxmOjpFUlJfUEFSQU1FVEVSKTsKICAgICAgfQogICAgaWYoICFpc19ib29sKCRiQVBPUCkgKQogICAgICB7Cgl0aHJvdyBuZXcgUE9QM19FeGNlcHRpb24oIkludmFsaWQgQVBPUCB2YXJpYWJsZSBnaXZlbiIsIHNlbGY6OkVSUl9QQVJBTUVURVIpOwogICAgICB9CgogICAgaWYoICR0aGlzLT5iQVBPUEF1dG9EZXRlY3QgJiYgIWlzX251bGwoJHRoaXMtPnN0ckFQT1BCYW5uZXIpICYmICEkYkFQT1ApCiAgICAgIHsKCSRiQVBPUCA9IFRSVUU7CiAgICAgIH0KCiAgICBpZiggJGJBUE9QICkKICAgICAgewoJLy8gQVBPUCBBdXRoCgkkdGhpcy0+c2VuZENtZCgiQVBPUCAiLiAkc3RyVXNlciAuIiAiLiBoYXNoKCJtZDUiLCR0aGlzLT5zdHJBUE9QQmFubmVyIC4gJHN0clBhc3MsIGZhbHNlKSwgIkFQT1AgIi4gKCgkdGhpcy0+YkhpZGVVc2VybmFtZUF0TG9nKSA/IGhhc2goInNoYTI1NiIsJHN0clVzZXIgLiBtaWNyb3RpbWUodHJ1ZSksZmFsc2UpIDogJHN0clVzZXIpIC4iICIuIGhhc2goIm1kNSIsJHRoaXMtPnN0ckFQT1BCYW5uZXIgLiAkc3RyUGFzcywgZmFsc2UpKTsKICAgICAgfQogICAgZWxzZQogICAgICB7CgkvLyBQT1AzIEF1dGgKCSR0aGlzLT5zZW5kQ21kKCAiVVNFUiAiLiAkc3RyVXNlciwgIlVTRVIgIi4gKCgkdGhpcy0+YkhpZGVVc2VybmFtZUF0TG9nKSA/IGhhc2goInNoYTI1NiIsJHN0clVzZXIgLiBtaWNyb3RpbWUodHJ1ZSksZmFsc2UpIDogJHN0clVzZXIpICk7CgkkdGhpcy0+c2VuZENtZCggIlBBU1MgIi4gJHN0clBhc3MsICJQQVNTICIuIGhhc2goInNoYTI1NiIsJHN0clBhc3MgLiBtaWNyb3RpbWUodHJ1ZSksZmFsc2UpICk7CiAgICAgIH0KICAgICR0aGlzLT5pbnRDdXJTdGF0ZSA9IHNlbGY6OlNUQVRFX1RSQU5TQUNUSU9OOwogIH0KCgogIC8qKgogICAqIFNlbmQgdGhlIHF1aXQgY29tbWFuZCB0byB0aGUgc2VydmVyLgogICAqIEFsbCBhcyBkZWxldGUgbWFya2VkIG1lc3NhZ2VzIHdpbGwgcmVtb3ZlIGZyb20gdGhlIG1haWwgZHJvcC4KICAgKgogICAqIEByZXR1cm4gdm9pZAogICAqIEB0aHJvdyBQT1AzX0V4Y2VwdGlvbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBxdWl0KCkKICB7CiAgICB0cnkKICAgICAgewoJJHRoaXMtPmNoZWNrU3RhdGUoc2VsZjo6U1RBVEVfVFJBTlNBQ1RJT04pOwogICAgICB9CiAgICBjYXRjaCggUE9QM19FeGNlcHRpb24gJGUgKQogICAgICB7CgkkdGhpcy0+Y2hlY2tTdGF0ZShzZWxmOjpTVEFURV9BVVRIT1JJWkFUSU9OKTsKICAgICAgfQogICAgJHRoaXMtPnNlbmRDbWQoIlFVSVQiKTsKICB9CgoKICAvKioKICAgKiBHZXQgdGhlIHN0YXRzIGZyb20gdGhlIHBvcDMgc2VydmVyCiAgICogVGhpcyBpcyBvbmx5IGEgc3RyaW5nIHdpdGggdGhlIGNvdW50IG9mIG1haWxzIGFuZCB0aGVpciBzaXplIGluIHlvdXIgbWFpbCBkcm9wLgogICAqCiAgICogQHJldHVybiBzdHJpbmcgIGV4YW1wbGU6ICIrT0sgMiAzNDY3IgogICAqIEB0aHJvdyBQT1AzX0V4Y2VwdGlvbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0KCkKICB7CiAgICAkdGhpcy0+Y2hlY2tTdGF0ZShzZWxmOjpTVEFURV9UUkFOU0FDVElPTik7CiAgICByZXR1cm4gJHRoaXMtPnNlbmRDbWQoIlNUQVQiKTsgICAgCiAgfQoKCiAgLyoqCiAgICogUmVjaWV2ZSBhIHJhdyBtZXNzYWdlLgogICAqCiAgICogQHBhcmFtIGludCBpbnRNc2dOdW0gIFRoZSBtZXNzYWdlIG51bWJlciBvbiB0aGUgcG9wMyBzZXJ2ZXIuCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZyAgQ29tcGxldGUgbWVzc2FnZQogICAqIEB0aHJvdyBQT1AzX0V4Y2VwdGlvbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBnZXRNc2coICRpbnRNc2dOdW0gKQogIHsKICAgICR0aGlzLT5jaGVja1N0YXRlKHNlbGY6OlNUQVRFX1RSQU5TQUNUSU9OKTsKICAgICR0aGlzLT5jaGVja01zZ051bSgkaW50TXNnTnVtKTsKICAgICR0aGlzLT5zZW5kQ21kKCJSRVRSICIuICRpbnRNc2dOdW0gKTsKICAgIHJldHVybiAkdGhpcy0+cmVjdlRvUG9pbnQoKTsgCiAgfQoKCiAgLyoqCiAgICogR2V0IGEgbGlzdCB3aXRoIG1lc3NhZ2UgbnVtYmVyIGFuZCB0aGUgc2l6ZSBpbiBieXRlcyBvZiBhIG1lc3NhZ2UuCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZyAgQSBTdHJpbmcgd2l0aCBhIGxpc3Qgb2YgYWxsIG1lc3NhZ2UgbnVtYmVyIGFuZCBzaXplIGluIHlvdXIgbWFpbCBkcm9wIHNlcGVyYXRlZCBieSAiXHJcbiIKICAgKiBAdGhyb3cgUE9QM19FeGNlcHRpb24KICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGlzdCgpCiAgewogICAgJHRoaXMtPmNoZWNrU3RhdGUoc2VsZjo6U1RBVEVfVFJBTlNBQ1RJT04pOwogICAgJHRoaXMtPnNlbmRDbWQoIkxJU1QiKTsKICAgIHJldHVybiAkdGhpcy0+cmVjdlRvUG9pbnQoKTsKICB9CgoKICAvKioKICAgKiBHZXQgYSBsaXN0IHdpdGggbWVzc2FnZSBudW1iZXIgYW5kIHRoZSB1bmlxdWUgaWQgb24gdGhlIHBvcDMgc2VydmVyLiAKICAgKgogICAqIEByZXR1cm4gc3RyaW5nICBVbmlxdWUgSUQgTGlzdAogICAqIEB0aHJvdyBQT1AzX0V4Y2VwdGlvbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBnZXRVaWRsKCkKICB7CiAgICAkdGhpcy0+Y2hlY2tTdGF0ZShzZWxmOjpTVEFURV9UUkFOU0FDVElPTik7CiAgICAkdGhpcy0+c2VuZENtZCgiVUlETCIpOwogICAgcmV0dXJuICR0aGlzLT5yZWN2VG9Qb2ludCgpOwogIH0KCgogIC8qKgogICAqIEdldCB0aGUgbWVzc2FnZSBoZWFkZXIgYW5kIGlmIHlvdSB3YW50IHggbGluZXMgb2YgdGhlIG1lc3NhZ2UgYm9keS4KICAgKgogICAqIEBwYXJhbSBpbnQgaW50TXNnTnVtICBUaGUgbWVzc2FnZSBudW1iZXIgb24gdGhlIHBvcDMgc2VydmVyLgogICAqIEBwYXJhbSBpbnQgaW50TGluZXMgIFRoZSBjb3VudCBvZiBsaW5lcyBvZiB0aGUgbWVzc2FnZSBib2R5LiAoZGVmYXVsdCBpcyAwKQogICAqCiAgICogQHJldHVybiBzdHJpbmcgIE1lc3NhZ2UgaGVhZGVyCiAgICogQHRocm93IFBPUDNfRXhjZXB0aW9uCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGdldFRvcCggJGludE1zZ051bSAsICRpbnRMaW5lcyA9IDAgKQogIHsKICAgICR0aGlzLT5jaGVja1N0YXRlKHNlbGY6OlNUQVRFX1RSQU5TQUNUSU9OKTsKICAgICR0aGlzLT5jaGVja01zZ051bSgkaW50TXNnTnVtKTsKICAgIGlmKCAhaXNfaW50KCRpbnRMaW5lcykgKSB0aHJvdyBuZXcgUE9QM19FeGNlcHRpb24oIkludmFsaWQgbGluZSBudW1iZXIgZ2l2ZW4iLCBzZWxmOjpFUlJfUEFSQU1FVEVSKTsKICAgICR0aGlzLT5zZW5kQ21kKCJUT1AgIi4gJGludE1zZ051bSAuIiAiLiAkaW50TGluZXMpOwogICAgcmV0dXJuICR0aGlzLT5yZWN2VG9Qb2ludCgpOwogIH0KCgogIC8qKgogICAqIE1hcmsgYSBtZXNzYWdlIGFzIGRlbGV0ZQogICAqCiAgICogQHBhcmFtIGludCAkaW50TXNnTnVtICBNZXNzYWdlIE51bWJlciBvbiB0aGUgcG9wMyBzZXJ2ZXIKICAgKgogICAqIEB0aHJvdyBQT1AzX0V4Y2VwdGlvbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBkZWxldGVNc2coICRpbnRNc2dOdW0gKQogIHsKICAgICR0aGlzLT5jaGVja1N0YXRlKHNlbGY6OlNUQVRFX1RSQU5TQUNUSU9OKTsKICAgICR0aGlzLT5jaGVja01zZ051bSgkaW50TXNnTnVtKTsKICAgICR0aGlzLT5zZW5kQ21kKCJERUxFICIuICRpbnRNc2dOdW0pOwogIH0KCgogIC8qKgogICAqCiAgICogQHBhcmFtIGFycmF5ICRhcnJNc2dOdW1zICBOdW1lcmljIGFycmF5IHdpdGggdGhlIG1lc3NhZ2UgbnVtYmVycyBvbiB0aGUgcG9wMyBzZXJ2ZXIKICAgKgogICAqIEByZXR1cm4gYXJyYXkgIEFuIGFycmF5IG9mIG1lc3NhZ2VzIHN0b3JlZCB1bmRlciB0aGUgbWVzc2FnZSBudW1iZXIKICAgKiBAdGhyb3cgUE9QM19FeGNlcHRpb24KICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmF3TWFpbHMoICRhcnJNc2dOdW1zICkKICB7CiAgICAkYXJyTXNncyA9IGFycmF5KCk7CiAgICBmb3JlYWNoKCAkYXJyTXNnTnVtcyBhcyAkaW50TXNnTnVtICkKICAgICAgewoJJGFyck1zZ3NbJGludE1zZ051bV0gPSAkdGhpcy0+Z2V0TXNnKCRpbnRNc2dOdW0pOwogICAgICB9CiAgICByZXR1cm4gJGFyck1zZ3M7CiAgfQoKCiAgLyoqCiAgICogR2V0IHRoZSBvZmZpY2Ugc3RhdHVzLiBUaGF0IG1lYW5zIHRoYXQgeW91IHdpbGwgZ2V0IGFuIGFycmF5CiAgICogd2l0aCBhbGwgbmVlZGVkIGluZm9ybWF0aW9ucyBhYm91dCB5b3VyIG1haWwgZHJvcC4KICAgKiBUaGUgYXJyYXkgaXMgYnVpbGQgdXAgbGlrZSBkaXNjcmliZWQgaGVyZS4KICAgKgogICAqICRyZXN1bHQgPSBhcnJheSggImNvdW50IiA9PiAiQ291bnQgb2YgbWVzc2FnZXMgaW4geW91ciBtYWlsIGRyb3AiLAogICAqICAgICAgICAgICAgICAgICAgIm9jdGV0cyIgPT4gIlNpemUgb2YgeW91ciBtYWlsIGRyb3AgaW4gYnl0ZXMiLAogICAqICAgICAgICAgICAgICAgICAgCiAgICogICAgICAgICAgICAgICAgICAibXNnX251bWJlciIgPT4gYXJyYXkoInVpZCIgPT4gIlRoZSB1bmlxdWUgaWQgc3RyaW5nIG9mIHRoZSBtZXNzYWdlIG9uIHRoZSBwb3AzIHNlcnZlciIsCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9jdGV0cyIgPT4gIlRoZSBzaXplIG9mIHRoZSBtZXNzYWdlIGluIGJ5dGVzIgogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICogICAgICAgICAgICAgICAgICAiYW5kIHNvb24iCiAgICogICAgICAgICAgKTsKICAgKgogICAqIEByZXR1cm4gYXJyYXkgIAogICAqIEB0aHJvdyBQT1AzX0V4Y2VwdGlvbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBnZXRPZmZpY2VTdGF0dXMoKQogIHsKICAgICR0aGlzLT5jaGVja1N0YXRlKHNlbGY6OlNUQVRFX1RSQU5TQUNUSU9OKTsKICAgICRhcnJSZXMgPSBhcnJheSgpOwoKICAgICRzdHJTVEFUcyA9ICR0aGlzLT5nZXRTdGF0KCk7CiAgICAkYXJyU1RBVHMgPSBleHBsb2RlKCIgIix0cmltKCRzdHJTVEFUcykpOwogICAgJGFyclJlc1siY291bnQiXSA9IChpbnQpICRhcnJTVEFUc1sxXTsKICAgICRhcnJSZXNbIm9jdGV0cyJdID0gKGludCkgJGFyclNUQVRzWzJdOwoKICAgIGlmKCAkYXJyUmVzWyJjb3VudCJdID4gMCApCiAgICAgIHsKCSRzdHJVSURMcyA9ICR0aGlzLT5nZXRVaWRsKCk7Cgkkc3RyTElTVHMgPSAkdGhpcy0+Z2V0TGlzdCgpOwogICAgICAgICAgICAgICAgICAgIAoJJGFyclVJRExzID0gZXhwbG9kZSgiXHJcbiIsdHJpbSgkc3RyVUlETHMpKTsKCSRhcnJMSVNUcyA9IGV4cGxvZGUoIlxyXG4iLHRyaW0oJHN0ckxJU1RzKSk7CgkJCglmb3IoJGk9MTsgJGk8PSRhcnJSZXNbImNvdW50Il07ICRpKyspCgkgIHsKCSAgICBsaXN0KCwkaW50VUlETCkgPSBleHBsb2RlKCIgIiwgdHJpbSgkYXJyVUlETHNbJGktMV0pKTsKCSAgICBsaXN0KCwkaW50TElTVCkgPSBleHBsb2RlKCIgIiwgdHJpbSgkYXJyTElTVHNbJGktMV0pKTsKCSAgICAkYXJyUmVzWyRpXVsidWlkIl0gPSAkaW50VUlETDsKCSAgICAkYXJyUmVzWyRpXVsib2N0ZXRzIl0gPSAoaW50KSAkaW50TElTVDsKCSAgfQogICAgICB9CiAgICByZXR1cm4gJGFyclJlczsKICB9CgogICAgCiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIFByaXZhdGUgZnVuY3Rpb25zIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKICAgIC8qKgogICAgICogQ29tcGFyZSB0aGUgY3VycmVudCBzdGF0ZSB3aXRoIHRoZSBuZWVkZWQgc3RhdGUuCiAgICAgKgogICAgICogQHBhcmFtIGludGVnZXIgJGludE5lZWRlZFN0YXRlCiAgICAgKgogICAgICogQHRocm93IFBPUDNfRXhjZXB0aW9uCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY2hlY2tTdGF0ZSggJGludE5lZWRlZFN0YXRlICkKICAgIHsKICAgICAgaWYgKCAkdGhpcy0+aW50Q3VyU3RhdGUgIT0gJGludE5lZWRlZFN0YXRlKSAKCXsKCSAgdGhyb3cgbmV3IFBPUDNfRXhjZXB0aW9uKCJJbnZhbGlkIFN0YXRlICEhISBQbGVhc2UgY2hlY2sgeW91ciBDb2RlICEhISIsIHNlbGY6OkVSUl9JTlZBTElEX1NUQVRFKTsKCX0KICAgIH0KCiAgICAKICAgIC8qKgogICAgICogQHBhcmFtICZpbnRlZ2VyICRpbnRNc2dOdW0KICAgICAqIAogICAgICogQHRocm93cyBQT1AzX0V4Y2VwdGlvbgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrTXNnTnVtKCAmJGludE1zZ051bSApCiAgICB7CiAgICAgIGlmKCAhaXNfaW50KCRpbnRNc2dOdW0pICkKICAgICAgICB7CgkgIHRocm93IG5ldyBQT1AzX0V4Y2VwdGlvbigiSW52YWxpZCBtZXNzYWdlIG51bWJlciBnaXZlbiIsIHNlbGY6OkVSUl9QQVJBTUVURVIpOwogICAgICAgIH0KICAgIH0KCgogICAgLyoqCiAgICAgKiBTZW5kIGEgc3RyaW5nIHRvIHRoZSBzZXJ2ZXIuCiAgICAgKiBXaWxsIGFwcGVuZCB0aGUgbmV0d29yayBsaW5lZW5kICJcclxuIi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIHN0ckNtZCAgVGhlIHN0cmluZyB0aGF0IHNob3VsZCBzZW5kIHRvIHRoZSBwb3AzIHNlcnZlcgogICAgICogCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEB0aHJvd3MgUE9QM19FeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZW5kKCAkc3RyQ21kICkKICAgIHsKICAgICAgJHN0ckNtZCAuPSAiXHJcbiI7CiAgICAgIGlmKCAkdGhpcy0+YlVzZVNvY2tldHMgKQogICAgICAgIHsKCSAgaWYoIEBzb2NrZXRfc2VuZCgkdGhpcy0+cmVzU29ja2V0LCAkc3RyQ21kLCBzdHJsZW4oJHN0ckNtZCksIDApID09PSBGQUxTRSApCiAgICAgICAgICAgIHsKCSAgICAgIHRocm93IG5ldyBQT1AzX0V4Y2VwdGlvbigiIiwgc2VsZjo6RVJSX1NPQ0tFVFMpOyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKCSAgaWYoICFAZndyaXRlKCR0aGlzLT5yZXNTb2NrZXQsICRzdHJDbWQsIHN0cmxlbigkc3RyQ21kKSkgKQogICAgICAgICAgICB7CgkgICAgICB0aHJvdyBuZXcgUE9QM19FeGNlcHRpb24oImZ3cml0ZSgpOiBGYWlsZWQgdG8gd3JpdGUgc3RyaW5nIHRvIHNvY2tldCIsc2VsZjo6RVJSX1NUUkVBTSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgoKICAgIC8qKgogICAgICogVGhpcyBmdW5jdGlvbiBzZW5kIHRoZSBjb21tYW5kIHRvIHRoZSBzZXJ2ZXIgYW5kIHdpbGwgZ2V0IHRoZSByZXNwb25zZQogICAgICogSWYgdGhlIGNvbW1hbmQgZ29lcyBmYWlsZWQsIHRoZSBmdW5jdGlvbiB3aWxsIHRocm93IHRoZSBQT1AzX0V4Y2VwdGlvbiB3aXRoIHRoZQogICAgICogRVJSX1NFTkRfQ01EIGVycm9yIGNvZGUgYW5kIHRoZSByZXNwb25zZSBhcyBlcnJvciBtZXNzYWdlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0ckNtZCAgVGhlIHN0cmluZyB3aXRoIHRoZSBjb21tYW5kIGZvciB0aGUgcG9wMyBzZXJ2ZXIKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0ckxvZyAgV29ya2Fyb3VuZCBmb3Igbm9uIGNsZWFyIHBhc3N3b3JkcyBhbmQgdXNlcm5hbWVzIGluIGxvZyBmaWxlCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgIFNlcnZlciByZXNwb25zZSBpZiBpdCB3YXMgc3VjY2Vzc2Z1bGwKICAgICAqIEB0aHJvd3MgUE9QM19FeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZW5kQ21kKCAkc3RyQ21kICwgJHN0ckxvZyA9IE5VTEwgKQogICAgewogICAgICAoICFpc19udWxsKCRzdHJMb2cpICkgPyAkdGhpcy0+bG9nKCRzdHJMb2cpIDogJHRoaXMtPmxvZygkc3RyQ21kKTsKICAgICAgJHRoaXMtPnNlbmQoJHN0ckNtZCk7CiAgICAgICRzdHJSZXMgPSAkdGhpcy0+cmVjdlN0cmluZygpOwogICAgICAkdGhpcy0+bG9nKCRzdHJSZXMpOwogICAgICAvLyAxLiB0aGUgY2hlY2sgZm9yIHRoZSBzdHJsZW4gb2YgdGhlIHJlc3VsdCBpcyBhIHdvcmthcm91bmQgZm9yIHNvbWUgc2VydmVyIHdobyBkb24ndCBzZW5kIHNvbWV0aGluZyBhZnRlciB0aGUgcXVpdCBjb21tYW5kCiAgICAgIC8vIDIuIHNob3VsZCBydW4gd2l0aCBxbWFpbGVyIHRvby4uLnFtYWlsZXIgYnVnIChwb3AzLmNsYXNzLmluYykgIi4iIGluc3RlYWQgb2YgIitPSyIgYWZ0ZXIgUkVUUiBjb21tYW5kCiAgICAgIGlmKCBzdHJsZW4oJHN0clJlcykgPiAwICYmICRzdHJSZXNbMF0gPT0gJy0nICkKCXsKCSAgdGhyb3cgbmV3IFBPUDNfRXhjZXB0aW9uKHRyaW0oJHN0clJlcyksIHNlbGY6OkVSUl9TRU5EX0NNRCk7Cgl9CiAgICAgIHJldHVybiAkc3RyUmVzOwogICAgfQoKCiAgICAvKioKICAgICAqIFJldHVybiB2YWx1ZToKICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgIGEpIG9uIHN1Y2Nlc3MgcmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgcmVhZAoKICAgICBiKSBpbiBjYXNlIG9mIG5vIGRhdGEgb24gbGluZSwgcmV0dXJucyB6ZXJvIGFuZCAkYnVmIHdpbGwgYmUgc2V0IHRvIE5VTEwuCgogICAgIGMpIG9uIGZhaWx1cmUgcmV0dXJucyBmYWxzZSwgYW5kICRidWYgd2lsbCBiZSBzZXQgdG8gTlVMTC4KICAgICBUbyBnZXQgdGhlIGVycm9yIGNvZGUvbWVzc2FnZSwgY2FsbCB0aGUgYXBwcm9wcmlhdGUgc29ja2V0IGZ1bmN0aW9ucy4KCiAgICAgZCkgaW4gY2FzZSBvZiBkaXNjb25uZWN0LCB0aGUgZnVuY3Rpb24gcmV0dXJucyBlaXRoZXIgYikgb3IgYykgd2hpY2ggZGVwZW5kcyBvbiBob3cgY29ubmVjdGlvbiB3YXMgY2xvc2VkIGZyb20gdGhlIG90aGVyIGVuZC4KICAgICBJdCByZXR1cm5zIDAgaWYgdGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBncmFjZWZ1bGx5IHdpdGggRklOIHNxdWVuY2UgYW5kIGZhbHNlIGlmIGl0IHdhcyByZXNldC4KICAgICAqCiAgICAgKiBAcGFyYW0gJnN0cmluZyAkc3RyQnVmZmVyCiAgICAgKiBAcGFyYW0gaW5lZ2VyICRpbnRCdWZmZXJTaXplCiAgICAgKgogICAgICogQHJldHVybiBpbnQgbnVtYmVyIG9mIHJlY2lldmVkIGJ5dGVzCiAgICAgKiBAdGhyb3dzIFBPUDNfRXhjZXB0aW9uCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcmVjdiggJiRzdHJCdWZmZXIsICRpbnRCdWZmZXJTaXplID0gc2VsZjo6REVGQVVMVF9CVUZGRVJfU0laRSApCiAgICB7CiAgICAgICRzdHJCdWZmZXIgPSAiIjsKICAgICAgaWYoICR0aGlzLT5iVXNlU29ja2V0cyApCiAgICAgICAgewoJICAkaW50UmVhZEJ5dGVzID0gQHNvY2tldF9yZWN2KCR0aGlzLT5yZXNTb2NrZXQsICRzdHJCdWZmZXIsICRpbnRCdWZmZXJTaXplLCAwKTsKCSAgaWYoICRpbnRSZWFkQnl0ZXMgPT09IEZBTFNFICkKICAgICAgICAgICAgewoJICAgICAgdGhyb3cgbmV3IFBPUDNfRXhjZXB0aW9uKCIiLCBzZWxmOjpFUlJfU09DS0VUUyk7CiAgICAgICAgICAgIH0KCX0KICAgICAgZWxzZQogICAgICAgIHsKCSAgaWYoICEkc3RyQnVmZmVyID0gQGZyZWFkKCR0aGlzLT5yZXNTb2NrZXQsICRpbnRCdWZmZXJTaXplKSApCgkgICAgewoJICAgICAgdGhyb3cgbmV3IFBPUDNfRXhjZXB0aW9uKCJmcmVhZCgpOiBDb3VsZG4ndCByZWNpZXZlIGZyb20gc29ja2V0Iiwgc2VsZjo6RVJSX1NUUkVBTSk7CgkgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICRpbnRSZWFkQnl0ZXM7CiAgICB9CgoKICAgIC8qKgogICAgICogCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkaW50QnVmZmVyU2l6ZQogICAgICogCiAgICAgKiBAcmV0dXJuIHN0cmluZyAkc3RyQnVmZmVyIFJldHVybiB0aGUgcmVjaWV2ZWQgU3RyaW5nIGVuZGVkIGJ5ICJcclxuIgogICAgICogQHRocm93IFBPUDNfRXhjZXB0aW9uCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcmVjdlN0cmluZyggJGludEJ1ZmZlclNpemUgPSBzZWxmOjpERUZBVUxUX0JVRkZFUl9TSVpFICkKICAgIHsKICAgICAgJHN0ckJ1ZmZlciA9ICIiOwogICAgICBpZiggJHRoaXMtPmJVc2VTb2NrZXRzICkKCXsKCSAgaWYoICgkc3RyQnVmZmVyID0gQHNvY2tldF9yZWFkKCR0aGlzLT5yZXNTb2NrZXQsICRpbnRCdWZmZXJTaXplICwgUEhQX05PUk1BTF9SRUFEKSkgPT09IEZBTFNFICkKCSAgICB7CgkgICAgICB0aHJvdyBuZXcgUE9QM19FeGNlcHRpb24oIiIsIHNlbGY6OkVSUl9TT0NLRVRTKTsKCSAgICB9CgkgIC8vIFdvcmthcm91bmQ6IFRoZSBzb2NrZXRfcmVhZCBmdW5jdGlvbiB3aXRoIFBIUF9OT1JNQUxfUkVBRCBzdG9wcyBhdCAiXHIiIGJ1dCB0aGUgbmV0d29yayBzdHJpbmcgZW5kcyB3aXRoICJcclxuIgoJICAvLyBzbyB3ZSBuZWVkIHRvIGNhbGwgdGhlIHNvY2tldF9yZWFkIGZ1bmN0aW9uIGFnYWluIHRvIGdldCB0aGUgIlxuIgoJICBpZiggKCRzdHJCdWZmZXIyID0gQHNvY2tldF9yZWFkKCR0aGlzLT5yZXNTb2NrZXQsIDEgLCBQSFBfTk9STUFMX1JFQUQpKSA9PT0gRkFMU0UgKQogICAgICAgICAgICB7CgkgICAgICB0aHJvdyBuZXcgUE9QM19FeGNlcHRpb24oIiIsIHNlbGY6OkVSUl9TT0NLRVRTKTsKICAgICAgICAgICAgfQoJICAkc3RyQnVmZmVyIC49ICRzdHJCdWZmZXIyOwogICAgICAgIH0KICAgICAgZWxzZQoJewoJICBpZiggISRzdHJCdWZmZXIgPSBAZmdldHMoJHRoaXMtPnJlc1NvY2tldCwgJGludEJ1ZmZlclNpemUpICkKCSAgICB7CgkgICAgICB0aHJvdyBuZXcgUE9QM19FeGNlcHRpb24oImZnZXRzKCk6IENvdWxkbid0IHJlY2lldmUgdGhlIHN0cmluZyBmcm9tIHNvY2tldCIsIHNlbGY6OkVSUl9TVFJFQU0pOwoJICAgIH0KCX0KICAgICAgcmV0dXJuICRzdHJCdWZmZXI7CiAgICB9CgoKICAgIC8qKgogICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGdldCBhIGNvbXBsZXRlIGxpc3QvbWVzc2FnZSB1bnRpbCB0aGUgZmluYWxseSBwb2ludCB3YXMgc2VuZGVkLgogICAgICogCiAgICAgKiBAcmV0dXJuIHN0cmluZyBsaXN0L21lc3NhZ2UKICAgICAqIEB0aHJvdyBQT1AzX0V4Y2VwdGlvbgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlY3ZUb1BvaW50KCkKICAgIHsKICAgICAgJHN0clJlcyA9ICIiOwogICAgICB3aGlsZSh0cnVlKQoJewoJICAkc3RyQnVmZmVyID0gJHRoaXMtPnJlY3ZTdHJpbmcoKTsKCSAgJHN0clJlcyAuPSAkc3RyQnVmZmVyOwoJICBpZiggc3RybGVuKCRzdHJCdWZmZXIpID09IDMgJiYgJHN0ckJ1ZmZlclswXSA9PSAnLicgICkKCSAgICB7CgkgICAgICBicmVhazsKCSAgICB9Cgl9CiAgICAgIHJldHVybiAkc3RyUmVzOwogICAgfQoKICAgCiAgICAvKioKICAgICAqIFNldCB0aGUgY29ubmVjdGlvbiB0aW1lb3V0cyBmb3IgYSBzb2NrZXQKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFyclRpbWVvdXQgICJzZWMiID0+IHNlY29uZHMsICJ1c2VjIiA9PiBtaWNyb3NlY29uZHMKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEB0aHJvdyBQT1AzX0V4Y2VwdGlvbgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHNldFNvY2tUaW1lb3V0KCAkYXJyVGltZW91dCApCiAgICB7CiAgICAgIGlmKCAhaXNfYXJyYXkoJGFyclRpbWVvdXQpIHx8ICFpc19pbnQoJGFyclRpbWVvdXRbInNlYyJdKSB8fCAhaXNfaW50KCRhcnJUaW1lb3V0WyJ1c2VjIl0pICkKICAgICAgICB7CgkgIHRocm93IG5ldyBQT1AzX0V4Y2VwdGlvbigiSW52YWxpZCBDb25uZWN0aW9uIFRpbWVvdXQgZ2l2ZW4iLCBzZWxmOjpFUlJfUEFSQU1FVEVSKTsKICAgICAgICB9CgogICAgICBpZiggJHRoaXMtPmJVc2VTb2NrZXRzICkKCXsKCSAgaWYoICFAc29ja2V0X3NldF9vcHRpb24oJHRoaXMtPnJlc1NvY2tldCxTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgJGFyclRpbWVvdXQpCgkgICAgICB8fCAhQHNvY2tldF9zZXRfb3B0aW9uKCR0aGlzLT5yZXNTb2NrZXQsU09MX1NPQ0tFVCwgU09fU05EVElNRU8sICRhcnJUaW1lb3V0KSApCiAgICAgICAgICAgIHsKCSAgICAgIHRocm93IG5ldyBQT1AzX0V4Y2VwdGlvbigiIiwgc2VsZjo6RVJSX1NPQ0tFVFMpOwogICAgICAgICAgICB9Cgl9CiAgICAgIGVsc2UKICAgICAgICB7CgkgIGlmKCAhQHN0cmVhbV9zZXRfdGltZW91dCgkdGhpcy0+cmVzU29ja2V0LCAkYXJyVGltZW91dFsic2VjIl0sICRhcnJUaW1lb3V0WyJ1c2VjIl0pICkKICAgICAgICAgICAgewoJICAgICAgdGhyb3cgbmV3IFBPUDNfRXhjZXB0aW9uKCIiLCBzZWxmOjpFUlJfU1RSRUFNKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgJHRoaXMtPmxvZygiU2V0IHNvY2tldCB0aW1lb3V0IHRvICIuIGltcGxvZGUoIi4iLCRhcnJUaW1lb3V0KSAuIiBzZWNvbmRlcy4iKTsKICAgIH0KCgogICAgLyoqCiAgICAgKiBQYXJzZSB0aGUgbmVlZGVkIGFwb3AgYmFubmVyIGlmIGdpdmVuCiAgICAgKiAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHBhcnNlQmFubmVyKCAkc3RyQnVmZmVyICkKICAgIHsKICAgICAgJGludEJ1ZmZlckxlbmd0aCA9IHN0cmxlbigkc3RyQnVmZmVyKTsKICAgICAgJGJPcGVuVGFnID0gRkFMU0U7CiAgICAgIGZvciggJGk9MDsgJGkgPCAkaW50QnVmZmVyTGVuZ3RoOyAkaSsrICkKICAgICAgICB7CgkgIGlmKCRzdHJCdWZmZXJbJGldID09ICc+JyApCiAgICAgICAgICAgIHsKCSAgICAgIGJyZWFrOwogICAgICAgICAgICB9CgkgIGlmKCAkYk9wZW5UYWcgKQogICAgICAgICAgICB7CgkgICAgICAkdGhpcy0+c3RyQVBPUEJhbm5lciAuPSAkc3RyQnVmZmVyWyRpXTsKCSAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgkgIGlmKCRzdHJCdWZmZXJbJGldID09ICc8JyApCiAgICAgICAgICAgIHsKCSAgICAgICRiT3BlblRhZyA9IFRSVUU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAKICAgIAogICAgLyoqCiAgICAgKiAvLyBMT0dHSU5HIEZVTkNUSU9OUwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbG9nKCAkc3RyICkKICAgIHsKICAgICAgZGVidWdfdG9fbG9nKCRzdHIpOwogICAgfQogICAgCiAgICAKfSAvLyBlbmQgb2YgY2xhc3MKCgojIAojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.secure_settings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBDTVNNU0V4dDsKCi8qKgogKiB1c2FnZToKICoKICogICAgJHRoaXMtPnNldHRpbmdzX21hbmFnZXIoKS0+cmVhZF9mcm9tKCRmaWxlbmFtZSk7CiAqICAgICR0aGlzLT5zZXR0aW5nc19tYW5hZ2VyKCktPndyaXRlX3RvKCRmaWxlbmFtZSwkc2V0dGluZ3MpOwogKi8KY2xhc3Mgc2VjdXJlX3NldHRpbmdzCnsKICBwcml2YXRlICRwcmV0dHkgPSBGQUxTRTsKICBwcml2YXRlICRzYWx0OwogIAogIGNvbnN0IE1BR0lDX0hFQURFUiA9ICc8P3BocCBkaWUoMSk7IC8vIEpTT04gU0VUVElOR1MgRklMRSB2MSc7CiAgCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGJvb2wgJHByZXR0eSA9IFRSVUUsIHN0cmluZyAkc2FsdCA9IE5VTEwpCiAgewogICAgJHRoaXMtPnByZXR0eSA9ICRwcmV0dHk7CiAgICBpZighJHNhbHQpCiAgICB7CiAgICAgICRzYWx0ID0gX19GSUxFX187CiAgICB9CiAgICAkdGhpcy0+c2FsdCA9ICRzYWx0OwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gcmVhZF9mcm9tKHN0cmluZyAkZmlsZW5hbWUsIGJvb2wgJHZlcmlmeV9jaGVja3N1bSA9IEZBTFNFKSA6IGFycmF5CiAgewogICAgaWYoIVxpc19maWxlKCRmaWxlbmFtZSkpCiAgICB7CiAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJGaWxlICRmaWxlbmFtZSBub3QgZm91bmQiKTsKICAgIH0KICAgIAogICAgcmV0dXJuICR0aGlzLT5yZWFkX2ZpbGUoJGZpbGVuYW1lLCAkdmVyaWZ5X2NoZWNrc3VtKTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIGlzX3NldHRpbmdzX2ZpbGUoc3RyaW5nICRmaWxlbmFtZSkgOiBib29sCiAgewogICAgdHJ5CiAgICB7CiAgICAgICRkYXRhID0gJHRoaXMtPnJlYWRfZnJvbSgkZmlsZW5hbWUpOwogICAgICAKICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CiAgICBjYXRjaChcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uICRlKQogICAgewogICAgICByZXR1cm4gRkFMU0U7CiAgICB9CiAgfQogIAogIHByb3RlY3RlZCBmdW5jdGlvbiByZWFkX2ZpbGUoc3RyaW5nICRmaWxlbmFtZSwgYm9vbCAkdmVyaWZ5X2NoZWNrc3VtID0gRkFMU0UpIDogYXJyYXkKICB7CiAgICAkdGV4dCA9IFxmaWxlX2dldF9jb250ZW50cygkZmlsZW5hbWUpOwogICAgaWYoISR0ZXh0KQogICAgewogICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiRmlsZSAkZmlsZW5hbWUgaXMgZW1wdHkgb3IgZG9lcyBub3QgZXhpc3QiKTsKICAgIH0KICAgIGlmKCFzdGFydHN3aXRoKCR0ZXh0LCBzZWxmOjpNQUdJQ19IRUFERVIpKQogICAgewogICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiRmlsZSAkZmlsZW5hbWUgaXMgbm90IGEgdmFsaWQgc2V0dGluZ3MgZmlsZSIpOwogICAgfQogICAgJHRleHQgPSBcbHRyaW0oXHN1YnN0cigkdGV4dCwgXHN0cmxlbihzZWxmOjpNQUdJQ19IRUFERVIpKSk7CiAgICAKICAgIGlmKCR2ZXJpZnlfY2hlY2tzdW0gJiYgIXN0YXJ0c3dpdGgoJHRleHQsICdDSEVDS1NVTTonKSkKICAgIHsKICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIkZpbGUgJGZpbGVuYW1lIGRvZXMgbm90IGNvbnRhaW4gcmVxdWlyZWQgc2lnbmF0dXJlIik7CiAgICB9CiAgICAKICAgIGlmKHN0YXJ0c3dpdGgoJHRleHQsICdDSEVDS1NVTTonKSkKICAgIHsKICAgICAgJHBvcyAgPSBcc3RycG9zKCR0ZXh0LCAiXG4iKTsKICAgICAgJGxpbmUgPSBcc3Vic3RyKCR0ZXh0LCAwLCAkcG9zKTsKICAgICAgJHRleHQgPSBcbHRyaW0oXHN1YnN0cigkdGV4dCwgJHBvcykgKTsKICAgICAgaWYoJHZlcmlmeV9jaGVja3N1bSkKICAgICAgewogICAgICAgIFssICRmaWxlX2Nrc3VtXSA9IGV4cGxvZGUoJyAnLCAkbGluZSwgMik7CiAgICAgICAgJGZpbGVfY2tzdW0gPSB0cmltKCRmaWxlX2Nrc3VtKTsKICAgICAgICAkY2FsY19ja3N1bSA9IHNoYTEoJHRoaXMtPnNhbHQgLiAkdGV4dCk7CiAgICAgICAgaWYoJGZpbGVfY2tzdW0gIT0gJGNhbGNfY2tzdW0pCiAgICAgICAgewogICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIkZpbGUgJGZpbGVuYW1lIGRvZXMgbm90IHBhc3MgY2hlY2tzdW0gdGVzdCIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgCiAgICBpZighc3RhcnRzd2l0aCgkdGV4dCwgJ3snKSkKICAgIHsKICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oImZpbGUgJGZpbGVuYW1lIGlzIG5vdCBhIHZhbGlkIHNldHRpbmdzIGZpbGUiKTsKICAgIH0KICAgICRqc29uID0ganNvbl9kZWNvZGUoJHRleHQsIFRSVUUpOwogICAgaWYoISRqc29uKQogICAgewogICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiZmlsZSAkZmlsZW5hbWUgaXMgbm90IGEgdmFsaWQgc2V0dGluZ3MgZmlsZSIpOwogICAgfQogICAgCiAgICByZXR1cm4gJGpzb247CiAgfQogIAogIHByb3RlY3RlZCBmdW5jdGlvbiBlbmNvZGVfZGF0YSgkc2V0dGluZ3MpIDogc3RyaW5nCiAgewogICAgJGRhdGEgICAgICAgPSBqc29uX2VuY29kZSgkc2V0dGluZ3MsIEpTT05fUFJFVFRZX1BSSU5UKTsKICAgICR0ZXN0X251bGwgID0ganNvbl9lbmNvZGUoTlVMTCk7CiAgICAkdGVzdF9lbXB0eSA9IGpzb25fZW5jb2RlKCcnKTsKICAgIGlmKCEkZGF0YSB8fCAkZGF0YSA9PSAkdGVzdF9udWxsIHx8ICRkYXRhID09ICR0ZXN0X2VtcHR5IHx8ICRkYXRhID09ICd7fScpCiAgICB7CiAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIHNldHRpbmdzIHBhc3NlZCB0byAnIC4gX19NRVRIT0RfXyk7CiAgICB9CiAgICAKICAgIHJldHVybiAkZGF0YTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHdyaXRlX3RvKHN0cmluZyAkZmlsZW5hbWUsICRzZXR0aW5ncykgOiB2b2lkCiAgewogICAgLy8gJHNldHRpbmdzIG11c3QgYmUgYW4gYXJyYXksIG9yIGFuIG9iamVjdCB0aGF0IHdlIGNhbiBpdGVyYXRlLCBvciBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZW5jb2RlZAogICAgaWYoISRmaWxlbmFtZSkKICAgIHsKICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgZmlsZW5hbWUgcGFzc2VkIHRvICcgLiBfX01FVEhPRF9fKTsKICAgIH0KICAgIAogICAgJGRhdGEgICAgID0gJHRoaXMtPmVuY29kZV9kYXRhKCRzZXR0aW5ncyk7CiAgICAkY2hlY2tzdW0gPSBzaGExKCR0aGlzLT5zYWx0IC4gJGRhdGEpOwogICAgCiAgICAkZmggPSBmb3BlbigkZmlsZW5hbWUsICd3Jyk7CiAgICBpZighJGZoKQogICAgewogICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0Nhbm5vdCBvcGVuIGZpbGUgZm9yIHdyaXRpbmcgYXQgJyAuICRmaWxlbmFtZSk7CiAgICB9CiAgICBmd3JpdGUoJGZoLCBzZWxmOjpNQUdJQ19IRUFERVIgLiAiXG4iKTsKICAgIGZ3cml0ZSgkZmgsICJDSEVDS1NVTTogJGNoZWNrc3VtXG4iKTsKICAgIGZ3cml0ZSgkZmgsICRkYXRhIC4gIlxuIik7CiAgICBmY2xvc2UoJGZoKTsKICB9CiAgCn0gLy8gY2xhc3MK]]></data>
	</file>
	<file>
	  <filename>/lib/class.smarty_plugins.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQpuYW1lc3BhY2UgQ01TTVNFeHQ7Cgp1c2UgY21zX3V0aWxzOwp1c2UgeHRfdXRpbHM7CnVzZSB4dF9wYXJhbTsKdXNlIHh0X3VybDsKdXNlIHh0X2FycmF5OwoKZmluYWwgY2xhc3Mgc21hcnR5X3BsdWdpbnMKewogIHByaXZhdGUgc3RhdGljICRfaW5zdGFuY2U7CiAgcHJpdmF0ZSAgICAgICAgJF94dF9jYWNoZV9rZXlzOwogIHByaXZhdGUgICAgICAgICRfaW5fdGFiOwogIHByaXZhdGUgICAgICAgICRtb2Q7CiAgcHJpdmF0ZSAgICAgICAgJGRiOwogIAogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChcQ01TTVNFeHQgJG1vZCwgJHNtYXJ0eSkKICB7CiAgICBpZihzZWxmOjokX2luc3RhbmNlKQogICAgewogICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdPbmx5IG9uZSBpbnN0YW5jZSBvZiAnIC4gX19DTEFTU19fIC4gJyBpcyBwZXJtaXR0ZWQnKTsKICAgIH0KICAgIHNlbGY6OiRfaW5zdGFuY2UgPSAkdGhpczsKICAgICR0aGlzLT5tb2QgICAgICAgPSAkbW9kOwogICAgJHRoaXMtPmluaXQoJHNtYXJ0eSk7CiAgfQogIAogIC8qKgogICAqIEBpZ25vcmUKICAgKi8KICBwcm90ZWN0ZWQgZnVuY3Rpb24gaW5pdCgkc21hcnR5KQogIHsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd4dF95ZXNub19vcHRpb25zJywgWyR0aGlzLCAnc21hcnR5X2Z1bmN0aW9uX3h0X3llc25vX29wdGlvbnMnXSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigneHRfaGF2ZV9tb2R1bGUnLCBbJHRoaXMsICdwbHVnaW5faGF2ZV9tb2R1bGUnXSk7CiAgICAKICAgICRzbWFydHktPnJlZ2lzdGVyX2Jsb2NrKCd4dGVycm9yJywgWyR0aGlzLCAnYmxvY2tEaXNwbGF5RXJyb3InXSk7CiAgICAjIGFsaWFzIGZvciBjb25zaXN0ZW5jeTogeHRlcnJvciBpcyBkZXByZWNhdGVkCiAgICAkc21hcnR5LT5yZWdpc3Rlcl9ibG9jaygneHRfZXJyb3InLCBbJHRoaXMsICdibG9ja0Rpc3BsYXlFcnJvciddKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Jsb2NrKCdqc21pbicsIFskdGhpcywgJ2pzbWluJ10pOwogICAgCiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigneHRfY2FjaGVkX3VybCcsIFskdGhpcywgJ3h0X2NhY2hlZF91cmwnXSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigneHRpbWFnZScsIFskdGhpcywgJ3NtYXJ0eV9mdW5jdGlvbl94dGltYWdlJ10pOwogICAgIyBhbGlhcyBmb3IgY29uc2lzdGVuY3k6IHh0aW1hZ2UgaXMgZGVwcmVjYXRlZAogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3h0X2ltYWdlJywgWyR0aGlzLCAnc21hcnR5X2Z1bmN0aW9uX3h0aW1hZ2UnXSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigneHRfaGVscHRhZycsIFskdGhpcywgJ3NtYXJ0eV9mdW5jdGlvbl9oZWxwdGFnJ10pOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3h0X2hlbHBoYW5kbGVyJywgWyR0aGlzLCAnc21hcnR5X2Z1bmN0aW9uX2hlbHBoYW5kbGVyJ10pOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3h0X2hlbHBjb250ZW50JywgWyR0aGlzLCAnc21hcnR5X2Z1bmN0aW9uX2hlbHBjb250ZW50J10pOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3h0X3N0YXRlX29wdGlvbnMnLCBbJHRoaXMsICdzbWFydHlfZnVuY3Rpb25feHRfc3RhdGVfb3B0aW9ucyddKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd4dF9jb3VudHJ5X29wdGlvbnMnLCBbJHRoaXMsICdzbWFydHlfZnVuY3Rpb25feHRfY291bnRyeV9vcHRpb25zJ10pOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3h0X3RleHRhcmVhJywgWyR0aGlzLCAnc21hcnR5X2Z1bmN0aW9uX3h0X3RleHRhcmVhJ10pOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ2dldF9jdXJyZW50X3VybCcsIFskdGhpcywgJ3NtYXJ0eV9mdW5jdGlvbl9nZXRfY3VycmVudF91cmwnXSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigneHRfc3RyX3RvX2Fzc29jJywgWyR0aGlzLCAnc21hcnR5X2Z1bmN0aW9uX3N0cl90b19hc3NvYyddKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX21vZGlmaWVyKCdyZmNfZGF0ZScsIFskdGhpcywgJ3NtYXJ0eV9tb2RpZmllcl9yZmNfZGF0ZSddKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX21vZGlmaWVyKCd0aW1lX2ZtdCcsIFskdGhpcywgJ3NtYXJ0eV9tb2RpZmllcl90aW1lX2ZtdCddKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX21vZGlmaWVyKCdhc19udW0nLCBbJHRoaXMsICdzbWFydHlfbW9kaWZpZXJfYXNfbnVtJ10pOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfbW9kaWZpZXIoJ3h0X2VudGl0eV9kZWNvZGUnLCBbJHRoaXMsICdzbWFydHlfbW9kaWZpZXJfeHRfZW50aXR5X2RlY29kZSddKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2NvbXBpbGVyX2Z1bmN0aW9uKCd4dF9jYWNoZScsIFskdGhpcywgJ2NhY2hlX3N0YXJ0J10pOyAvLyBtdXN0IGJlIGFuIGFycmF5IChzbWFydHkgYnVnPyApCiAgICAkc21hcnR5LT5yZWdpc3Rlcl9jb21waWxlcl9mdW5jdGlvbigneHRfY2FjaGVjbG9zZScsIFskdGhpcywgJ2NhY2hlX2VuZCddKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Jsb2NrKCd4dF9jYWNoZV9ibG9jaycsIFskdGhpcywgJ3h0X2NhY2hlX2Jsb2NrJ10pOwogICAgCiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigneHRfbW9kdWxlX2hpbnQnLCBbJHRoaXMsICd4dF9tb2R1bGVfaGludCddKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd4dF9maWxlX2xpc3QnLCBbJHRoaXMsICd4dF9maWxlX2xpc3QnXSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigneHRfaW1hZ2VfbGlzdCcsIFskdGhpcywgJ3h0X2ltYWdlX2xpc3QnXSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigneHRfYXJyYXlfc2V0JywgWyR0aGlzLCAneHRfYXJyYXlfc2V0J10pOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3h0X2FycmF5X2VyYXNlJywgWyR0aGlzLCAneHRfYXJyYXlfZXJhc2UnXSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigneHRfYXJyYXlfZ2V0JywgWyR0aGlzLCAneHRfYXJyYXlfZ2V0J10pOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3h0X2FycmF5X2dldGFsbCcsIFskdGhpcywgJ3h0X2FycmF5X2dldGFsbCddKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd4dF9hcnJheV9jb3B5JywgWyR0aGlzLCAneHRfYXJyYXlfY29weSddKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd4dF9hZG1pbl9lcnJvcicsIFskdGhpcywgJ3h0X2FkbWluX2Vycm9yJ10pOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3h0X3d5c2l3eWcnLCBbJHRoaXMsICd4dF93eXNpd3lnJ10pOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfbW9kaWZpZXIoJ3h0X2NyZWF0ZXVybCcsIFskdGhpcywgJ3NtYXJ0eV9tb2RpZmllcl9jcmVhdGV1cmwnXSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigneHRfc2V0bGlzdCcsIFskdGhpcywgJ3h0X3NldGxpc3QnXSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigneHRfdW5zZXRsaXN0JywgWyR0aGlzLCAneHRfdW5zZXRsaXN0J10pOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3h0X21lc3NhZ2UnLCBbJHRoaXMsICd4dF9tZXNzYWdlJ10pOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3h0X2ZpbGVfbGluaycsIFskdGhpcywgJ3h0X2ZpbGVfbGluayddKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd4dF9mb3JtX2NzcmYnLCBbJHRoaXMsICd4dF9mb3JtX2NzcmYnXSk7CiAgICAKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd4dF9pc2JvdCcsIFskdGhpcywgJ3h0X2lzYm90J10pOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3h0X2lzX3NtYXJ0cGhvbmUnLCBbJHRoaXMsICd4dF9pc19zbWFydHBob25lJ10pOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3h0X2dldGJyb3dzZXInLCBbJHRoaXMsICd4dF9nZXRfYnJvd3NlciddKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd4dF9pc2llJywgWyR0aGlzLCAneHRfaXNpZSddKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd4dF9pc2FuZHJvaWQnLCBbJHRoaXMsICd4dF9pc2FuZHJvaWQnXSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigneHRfaXNpb3MnLCBbJHRoaXMsICd4dF9pc2lvcyddKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd4dF9saXN0ZmlsZXMnLCBbJHRoaXMsICd4dF9saXN0ZmlsZXMnXSk7IC8vIG5ldwogICAgCiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigneHRfY29udGVudF90eXBlJywgWyR0aGlzLCAneHRfY29udGVudF90eXBlJ10pOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3h0X3N0YXJ0X3RhYnMnLCBbJHRoaXMsICd4dF9zdGFydF90YWJzJ10pOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3h0X2VuZF90YWJzJywgWyR0aGlzLCAneHRfZW5kX3RhYnMnXSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigneHRfdGFiaGVhZGVyJywgWyR0aGlzLCAneHRfdGFiaGVhZGVyJ10pOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3h0X3RhYmNvbnRlbnRfc3RhcnQnLCBbJHRoaXMsICd4dF90YWJjb250ZW50X3N0YXJ0J10pOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3h0X3RhYmNvbnRlbnRfZW5kJywgWyR0aGlzLCAneHRfdGFiY29udGVudF9lbmQnXSk7CiAgICAKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd4dGpzX3JlbmRlcicsIFskdGhpcywgJ3h0anNfcmVuZGVyJ10pOwogICAgIyBhbGlhcyBmb3IgY29uc2lzdGVuY3k6IHh0anNfcmVuZGVyIGlzIGRlcHJlY2F0ZWQKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd4dF9qc19yZW5kZXInLCBbJHRoaXMsICd4dGpzX3JlbmRlciddKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd4dGpzX3JlcXVpcmUnLCBbJHRoaXMsICd4dGpzX3JlcXVpcmUnXSk7CiAgICAjIGFsaWFzIGZvciBjb25zaXN0ZW5jeTogeHRqc19yZXF1aXJlIGlzIGRlcHJlY2F0ZWQKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd4dF9qc19yZXF1aXJlJywgWyR0aGlzLCAneHRqc19yZXF1aXJlJ10pOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfYmxvY2soJ3h0anNfYWRkJywgWyR0aGlzLCAneHRqc19hZGQnXSk7CiAgICAjIGFsaWFzIGZvciBjb25zaXN0ZW5jeTogeHRqc19hZGQgaXMgZGVwcmVjYXRlZAogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfYmxvY2soJ3h0X2pzX2FkZCcsIFskdGhpcywgJ3h0anNfYWRkJ10pOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfYmxvY2soJ3h0Y3NzX2FkZCcsIFskdGhpcywgJ3h0Y3NzX2FkZCddKTsKICAgICMgYWxpYXMgZm9yIGNvbnNpc3RlbmN5OiB4dGNzc19hZGQgaXMgZGVwcmVjYXRlZAogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfYmxvY2soJ3h0X2Nzc19hZGQnLCBbJHRoaXMsICd4dGNzc19hZGQnXSk7CiAgICAKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd4dF9odG1sX29wdGlvbnMnLCBbJHRoaXMsICd4dF9odG1sX29wdGlvbnMnXSk7CiAgICAKICAgICMgY29va2llcwogIAogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3h0X2Nvb2tpZV9zZXQnLCBbJHRoaXMsICd4dF9jb29raWVfc2V0J10pOwogICAgCiAgICAjIG1vZHVsZSBhY3Rpb24ganMKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd4dF9sb2FkX2FjdGlvbl9qcycsIFskdGhpcywgJ2dldF9hY3Rpb25fanMnXSk7CiAgICAKICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgIAogICAgLy8gc2hvdWxkIGJlIGFkbWluIG9ubHkKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd4dF9wYWdlb3B0aW9ucycsIFskdGhpcywgJ3h0X3BhZ2VvcHRpb25zJ10pOwogICAgCiAgICBnbG9iYWwgJENNU19BRE1JTl9QQUdFOwogICAgaWYoIWlzc2V0KCRDTVNfQURNSU5fUEFHRSkpIHsgcmV0dXJuOyB9CiAgICAKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd4dF9maWxlcGlja2VyJywgWyR0aGlzLCAneHRfZmlsZXBpY2tlciddKTsKICB9CiAgCiAgLyoqKgogICAqIEEgc21hcnR5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIGxpc3Qgb2Ygc3RhdGUgb3B0aW9ucwogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBzbWFydHlfZnVuY3Rpb25feHRfc3RhdGVfb3B0aW9ucygkcGFyYW1zLCAkc21hcnR5KQogIHsKICAgICRzZWxlY3RlZCA9IHh0X3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywgJ3NlbGVjdGVkJyk7CiAgICBpZiggXGlzX3N0cmluZygkc2VsZWN0ZWQpICkKICAgIHsKICAgICAgJHNlbGVjdGVkID0gXGV4cGxvZGUoJywnLCAkc2VsZWN0ZWQpOwogICAgfQogICAgaWYoICFcaXNfYXJyYXkoJHNlbGVjdGVkKSApCiAgICB7CiAgICAgICRzZWxlY3RlZCA9IFtdOwogICAgfQogICAgCiAgICAvLyRsaXN0ICAgPSAkdGhpcy0+bW9kLT5nZXRfc3RhdGVfbGlzdF9vcHRpb25zKCk7CiAgICAkbGlzdCAgID0gJHRoaXMtPm1vZC0+Z2V0X3h0LT5nZXRfc3RhdGVfbGlzdF9vcHRpb25zKCk7CiAgICAkb3V0cHV0ID0gJyc7CiAgICBpZihpc3NldCgkcGFyYW1zWydzZWxlY3RvbmUnXSkpCiAgICB7CiAgICAgICRvdXRwdXQgLj0gJzxvcHRpb24gdmFsdWU9IiI+JyAuIFx0cmltKCRwYXJhbXNbJ3NlbGVjdG9uZSddKSAuICI8L29wdGlvbj5cbiI7CiAgICB9CiAgICBmb3JlYWNoKCRsaXN0IGFzICRrZXkgPT4gJHZhbCkKICAgIHsKICAgICAgJG91dHB1dCAuPSAiPG9wdGlvbiB2YWx1ZT1cInska2V5fVwiIjsKICAgICAgaWYoXGluX2FycmF5KCRrZXksICRzZWxlY3RlZCkpCiAgICAgIHsKICAgICAgICAkb3V0cHV0IC49ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7CiAgICAgIH0KICAgICAgJG91dHB1dCAuPSAiPnskdmFsfTwvb3B0aW9uPlxuIjsKICAgIH0KICAgIAogICAgcmV0dXJuICRvdXRwdXQ7CiAgfQogIAogIC8qKioKICAgKiBBIHNtYXJ0eSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBsaXN0IG9mIGNvdW50cnkgb3B0aW9ucwogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBzbWFydHlfZnVuY3Rpb25feHRfY291bnRyeV9vcHRpb25zKCRwYXJhbXMsICRzbWFydHkpCiAgewogICAgJGxpc3QgPSAkdGhpcy0+bW9kLT5nZXRfY291bnRyeV9saXN0X29wdGlvbnMoKTsKICAgIGlmKCgkc3RyID0geHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywgJ3NlbGVjdG9uZScpKSkKICAgIHsKICAgICAgJGxpc3QgPSBcYXJyYXlfbWVyZ2UoWycnID0+ICRzdHJdLCAkbGlzdCk7CiAgICB9CiAgICAkc2VsZWN0ZWQgPSB4dF91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsICdzZWxlY3RlZCcpOwogICAgaWYoXGlzX3N0cmluZygkc2VsZWN0ZWQpKQogICAgewogICAgICAkc2VsZWN0ZWQgPSBcZXhwbG9kZSgnLCcsICRzZWxlY3RlZCk7CiAgICB9CiAgICBpZighXGlzX2FycmF5KCRzZWxlY3RlZCkpCiAgICB7CiAgICAgICRzZWxlY3RlZCA9IFtdOwogICAgfQogICAgCiAgICAkb3V0cHV0ID0gTlVMTDsKICAgIGZvcmVhY2goJGxpc3QgYXMgJGtleSA9PiAkdmFsKQogICAgewogICAgICAkb3V0cHV0IC49ICI8b3B0aW9uIHZhbHVlPVwieyRrZXl9XCIiOwogICAgICBpZihcaW5fYXJyYXkoJGtleSwgJHNlbGVjdGVkKSkKICAgICAgewogICAgICAgICRvdXRwdXQgLj0gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzsKICAgICAgfQogICAgICAkb3V0cHV0IC49ICI+eyR2YWx9PC9vcHRpb24+XG4iOwogICAgfQogICAgCiAgICByZXR1cm4gJG91dHB1dDsKICB9CiAgCiAgCiAgLyoKICAgICAqIEEgc21hcnR5IHBsdWdpbiBmb3IgZGlzcGxheWluZyB0aGUgY3VycmVudCBwYWdlIHVybAogICAgICovCiAgcHVibGljIGZ1bmN0aW9uIHNtYXJ0eV9mdW5jdGlvbl9nZXRfY3VycmVudF91cmwoJHBhcmFtcywgJHNtYXJ0eSkKICB7CiAgICAkdXJsID0geHRfdXJsOjpjdXJyZW50X3VybCgpOwogICAgaWYoaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pKQogICAgewogICAgICAkc21hcnR5LT5hc3NpZ24oJHBhcmFtc1snYXNzaWduJ10sICR1cmwpOwogICAgICAKICAgICAgcmV0dXJuICcnOwogICAgfQogICAgCiAgICByZXR1cm4gJHVybDsKICB9CiAgCiAgCiAgLyoKICAgICAqIEEgc21hcnR5IGZ1bmN0aW9uIHRvIG91dHB1dCBhIHllcy9ubyBkcm9wZG93bi4KICAgICAqLwogIHB1YmxpYyBmdW5jdGlvbiBzbWFydHlfZnVuY3Rpb25feHRfeWVzbm9fb3B0aW9ucygkcGFyYW1zLCAkc21hcnR5KQogIHsKICAgICRuYW1lICAgICA9ICcnOwogICAgJHByZWZpeCAgID0gJyc7CiAgICAkc2VsZWN0ZWQgPSAnJzsKICAgICRvdXQgICAgICA9ICcnOwogICAgJHNlbHR4dCAgID0gJyc7CiAgICAkaWQgICAgICAgPSBcdHJpbSgoc3RyaW5nKXh0X3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywgJ2lkJykpOwogICAgJGNsYXNzICAgID0gXHRyaW0oKHN0cmluZyl4dF91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsICdjbGFzcycpKTsKICAgIAogICAgaWYoaXNzZXQoJHBhcmFtc1sncHJlZml4J10pKQogICAgewogICAgICAkcHJlZml4ID0gXHRyaW0oJHBhcmFtc1sncHJlZml4J10pOwogICAgfQogICAgaWYoaXNzZXQoJHBhcmFtc1snbmFtZSddKSkKICAgIHsKICAgICAgJG5hbWUgPSBcdHJpbSgkcGFyYW1zWyduYW1lJ10pOwogICAgfQogICAgaWYoaXNzZXQoJHBhcmFtc1snc2VsZWN0ZWQnXSkpCiAgICB7CiAgICAgICRzZWxlY3RlZCA9IFx0cmltKCRwYXJhbXNbJ3NlbGVjdGVkJ10pOwogICAgfQogICAgaWYoIWVtcHR5KCRuYW1lKSkKICAgIHsKICAgICAgJG91dCAuPSAiPHNlbGVjdCBuYW1lPVwieyRwcmVmaXh9eyRuYW1lfVwiIjsKICAgICAgaWYoIWVtcHR5KCRpZCkpCiAgICAgIHsKICAgICAgICAkb3V0IC49ICIgaWQ9XCJ7JGlkfVwiIjsKICAgICAgfQogICAgICBpZighZW1wdHkoJGNsYXNzKSkKICAgICAgewogICAgICAgICRvdXQgLj0gIiBjbGFzcz1cInskY2xhc3N9XCIiOwogICAgICB9CiAgICAgICRvdXQgLj0gJz4nOwogICAgfQogICAgaWYoJHNlbGVjdGVkID09IDEpCiAgICB7CiAgICAgICRzZWx0eHQgPSAnIHNlbGVjdGVkPSJzZWxlY3RlZCInOwogICAgfQogICAgCiAgICAkb3V0ICAgIC49ICc8b3B0aW9uIHZhbHVlPSIxIicgLiAkc2VsdHh0IC4gJz4nIC4gJHRoaXMtPm1vZC0+TGFuZygneWVzJykgLiAnPC9vcHRpb24+JzsKICAgICRzZWx0eHQgPSAnJzsKICAgIGlmKCRzZWxlY3RlZCA9PSAwKQogICAgewogICAgICAkc2VsdHh0ID0gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzsKICAgIH0KICAgICRvdXQgLj0gJzxvcHRpb24gdmFsdWU9IjAiJyAuICRzZWx0eHQgLiAnPicgLiAkdGhpcy0+bW9kLT5MYW5nKCdubycpIC4gJzwvb3B0aW9uPic7CiAgICBpZighZW1wdHkoJG5hbWUpKQogICAgewogICAgICAkb3V0IC49ICI8L3NlbGVjdD4iOwogICAgfQogICAgCiAgICBpZihpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkpCiAgICB7CiAgICAgICRzbWFydHktPmFzc2lnbigkcGFyYW1zWydhc3NpZ24nXSwgJG91dCk7CiAgICAgIAogICAgICByZXR1cm4gJyc7CiAgICB9CiAgICAKICAgIHJldHVybiAkb3V0OwogIH0KICAKICAKICAvKgogICAgICogQSBzbWFydHkgcGx1Z2luIGZvciB0ZXN0aW5nIGlmIGEgbW9kdWxlIGlzIGF2YWlsYWJsZS4KICAgICAqLwogIHB1YmxpYyBmdW5jdGlvbiBwbHVnaW5faGF2ZV9tb2R1bGUoJHBhcmFtcywgJHNtYXJ0eSkKICB7CiAgICAkbmFtZSAgICA9ICcnOwogICAgJHRyeXRoaXMgPSBbJ21vZHVsZScsICdtb2QnLCAnbSddOwogICAgZm9yZWFjaCgkdHJ5dGhpcyBhcyAkb25lKQogICAgewogICAgICBpZihpc3NldCgkcGFyYW1zWyRvbmVdKSkKICAgICAgewogICAgICAgICRuYW1lID0gXHRyaW0oJHBhcmFtc1skb25lXSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgICRyZXMgPSAwOwogICAgaWYoIWVtcHR5KCRuYW1lKSkKICAgIHsKICAgICAgJHRtcCA9IHh0X3V0aWxzOjpnZXRfbW9kdWxlKCRuYW1lKTsKICAgICAgJHJlcyA9IChpc19vYmplY3QoJHRtcCkpID8gMSA6IDA7CiAgICB9CiAgICAKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSkKICAgIHsKICAgICAgJHNtYXJ0eS0+YXNzaWduKCRwYXJhbXNbJ2Fzc2lnbiddLCAkcmVzKTsKICAgICAgCiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgcmV0dXJuICRyZXM7CiAgfQogIAogIAogIC8qCiAgICAgKiBBIHNtYXJ0eSBmdW5jdGlvbiBmb3IgZGlzcGxheWluZyBhbiBpbWFnZQogICAgICovCiAgcHVibGljIGZ1bmN0aW9uIHNtYXJ0eV9mdW5jdGlvbl94dGltYWdlKCRwYXJhbXMsICRzbWFydHkpCiAgewogICAgaWYoIWlzc2V0KCRwYXJhbXNbJ2ltYWdlJ10pKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAkb2JqID0gJHNtYXJ0eS0+Z2V0VGVtcGxhdGVWYXJzKCdtb2QnKTsKICAgIGlmKCFpc19vYmplY3QoJG9iaikpCiAgICB7CiAgICAgICRvYmogPSAkdGhpcy0+bW9kOwogICAgfQogICAgCiAgICAkaW1hZ2UgPSAkYWx0ID0geHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywgJ2ltYWdlJyk7CiAgICAkYWx0ICAgPSB4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCAnYWx0JywgJGFsdCk7CiAgICAvL2lmKCBpc3NldCgkcGFyYW1zWydhbHQnXSkgKSAkYWx0ID0gaHRtbGVudGl0aWVzKHRyaW0oJHBhcmFtc1snYWx0J10pLEVOVF9RVU9URVMpOwogICAgJGNsYXNzICA9IHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsICdjbGFzcycpOwogICAgJGhlaWdodCA9IHh0X3BhcmFtOjpnZXRfaW50KCRwYXJhbXMsICdoZWlnaHQnKTsKICAgICR3aWR0aCAgPSB4dF9wYXJhbTo6Z2V0X2ludCgkcGFyYW1zLCAnd2lkdGgnKTsKICAgIAogICAgLy8kb2JqLT5fbG9hZF9tYWluKCk7CiAgICAkdHh0ID0gJG9iai0+RGlzcGxheUltYWdlKCRpbWFnZSwgJGFsdCwgJGNsYXNzLCAkd2lkdGgsICRoZWlnaHQpOwogICAgCiAgICBpZihpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkpCiAgICB7CiAgICAgICRzbWFydHktPmFzc2lnbih0cmltKCRwYXJhbXNbJ2Fzc2lnbiddKSwgJHR4dCk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIHJldHVybiAkdHh0OwogICAgfQogIH0KICAKICAKICAvKgogICAqIEEgc21hcnR5IGZ1bmN0aW9uIGZvciBkaXNwbGF5aW5nIGEgaGVscCBpbWFnZQogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBzbWFydHlfZnVuY3Rpb25faGVscHRhZygkcGFyYW1zLCAkc21hcnR5KQogIHsKICAgIAogICAgJGltYWdlID0gJ2ljb25zL3N5c3RlbS9pbmZvLmdpZic7CiAgICAkYWx0ICAgPSAkdGhpcy0+bW9kLT5MYW5nKCd3aGF0c3RoaXMnKTsKICAgICR3aWR0aCA9ICRoZWlnaHQgPSBOVUxMOwogICAgJGNsYXNzID0gJ2hlbHAnOwogICAgCiAgICBpZighaXNzZXQoJHBhcmFtc1sna2V5J10pKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAka2V5ID0gdHJpbSgkcGFyYW1zWydrZXknXSk7CiAgICAKICAgICRpbWFnZSA9ICdpY29ucy9zeXN0ZW0vaW5mby5naWYnOwogICAgJGNsYXNzID0gJ2hlbHAnOwogICAgCiAgICBpZighaXNzZXQoJHBhcmFtc1sna2V5J10pKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAka2V5ID0gdHJpbSgkcGFyYW1zWydrZXknXSk7CiAgICAKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2FsdCddKSkKICAgIHsKICAgICAgJGFsdCA9IHRyaW0oJHBhcmFtc1snYWx0J10pOwogICAgfQogICAgaWYoaXNzZXQoJHBhcmFtc1snY2xhc3MnXSkpCiAgICB7CiAgICAgICRjbGFzcyA9IHRyaW0oJHBhcmFtc1snY2xhc3MnXSk7CiAgICB9CiAgICAKICAgICRpbWcgPSAkdGhpcy0+bW9kLT5EaXNwbGF5SW1hZ2UoJGltYWdlLCAkYWx0LCAnJywgJHdpZHRoLCAkaGVpZ2h0KTsKICAgICR0eHQgPSAnPGEgaHJlZj0iIycgLiAka2V5IC4gJyIgY2xhc3M9IicgLiAkY2xhc3MgLiAnIj4nIC4gJGltZyAuICc8L2E+JzsKICAgIAogICAgaWYoaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pKQogICAgewogICAgICAkc21hcnR5LT5hc3NpZ24odHJpbSgkcGFyYW1zWydhc3NpZ24nXSksICR0eHQpOwogICAgICAKICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICByZXR1cm4gJHR4dDsKICB9CiAgCiAgLyoKICAgICAqIEEgc21hcnR5IGZ1bmN0aW9uIGZvciBkaXNwbGF5aW5nIGEgaGVscCBpbWFnZQogICAgICovCiAgcHVibGljIGZ1bmN0aW9uIHNtYXJ0eV9mdW5jdGlvbl9oZWxwaGFuZGxlcigkcGFyYW1zLCAkc21hcnR5KQogIHsKICAgICRjbGFzcyA9ICdoZWxwJzsKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2NsYXNzJ10pKQogICAgewogICAgICAkY2xhc3MgPSB0cmltKCRwYXJhbXNbJ2NsYXNzJ10pOwogICAgfQogICAgCiAgICAkanMgPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7CiAgICAgICQoXCdhLicgLiAkY2xhc3MgLiAnXCcpLmNsaWNrKGZ1bmN0aW9uKCl7CiAgICAgICAgdmFyIHYgPSAkKHRoaXMpLmF0dHIoXCdocmVmXCcpLnN1YnN0cigxKTsKICAgICAgICAkKFwnI1wnK3YpLmRpYWxvZyh7CiAgICAgICAgICB3aWR0aDogXCdhdXRvXCcKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0pOwogICAgfSk8L3NjcmlwdD4nOwogICAgCiAgICBpZihpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkpCiAgICB7CiAgICAgICRzbWFydHktPmFzc2lnbigkcGFyYW1zWydhc3NpZ24nXSwgJGpzKTsKICAgICAgCiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgcmV0dXJuICRqczsKICB9CiAgCiAgLyoKICAgICAqIEEgc21hcnR5IGZ1bmN0aW9uIGZvciBvdXRwdXR0aW5nIGhlbHAgdGV4dC4KICAgICAqLwogIHB1YmxpYyBmdW5jdGlvbiBzbWFydHlfZnVuY3Rpb25faGVscGNvbnRlbnQoJHBhcmFtcywgJHNtYXJ0eSkKICB7CiAgICBpZighaXNzZXQoJHBhcmFtc1sna2V5J10pKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZighaXNzZXQoJHBhcmFtc1sndGV4dCddKSkKICAgIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICAkdGl0bGUgPSAkdGhpcy0+bW9kLT5MYW5nKCdoZWxwJyk7CiAgICAka2V5ICAgPSB0cmltKCRwYXJhbXNbJ2tleSddKTsKICAgICR0ZXh0ICA9IHRyaW0oJHBhcmFtc1sndGV4dCddKTsKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ3RpdGxlJ10pKQogICAgewogICAgICAkdGl0bGUgPSB0cmltKCRwYXJhbXNbJ3RpdGxlJ10pOwogICAgfQogICAgCiAgICAkb3V0ID0gJzxkaXYgaWQ9IicgLiAka2V5IC4gJyIgdGl0bGU9IicgLiAkdGl0bGUgLiAnIiBjbGFzcz0iaGVscGNvbnRlbnQiPicgLiAkdGV4dCAuICc8L2Rpdj4nOwogICAgCiAgICBpZihpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkpCiAgICB7CiAgICAgICRzbWFydHktPmFzc2lnbigkcGFyYW1zWydhc3NpZ24nXSwgJG91dCk7CiAgICAgIAogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIHJldHVybiAkb3V0OwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gc21hcnR5X21vZGlmaWVyX3RpbWVfZm10KAogICAgJHZhbCwgJHNob3dfaG91cnMgPSBUUlVFLCAkc2hvd19taW51dGVzID0gVFJVRSwgJHNob3dfc2Vjb25kcyA9IEZBTFNFLCAkZGVsaW1pdGVyID0gJzonCiAgKQogIHsKICAgICR2YWwgPSAoaW50KSR2YWw7CiAgICAkYXJyID0gW107CiAgICBpZigkc2hvd19ob3VycykKICAgIHsKICAgICAgJGFycltdID0gc3ByaW50ZignJTAycycsIGZsb29yKCR2YWwgLyAzNjAwKSk7CiAgICB9IC8vIGhvdXJzCiAgICBpZigkc2hvd19taW51dGVzKQogICAgewogICAgICAkYXJyW10gPSBzcHJpbnRmKCclMDJzJywgZmxvb3IoJHZhbCAlIDM2MDAgLyA2MCkpOwogICAgfSAvLyBtaW51dGVzCiAgICBpZigkc2hvd19zZWNvbmRzKQogICAgewogICAgICAkYXJyW10gPSBzcHJpbnRmKCclMDJzJywgZmxvb3IoJHZhbCAlIDYwKSk7CiAgICB9IC8vIHNlY29uZHMuCiAgICAkb3V0ID0gaW1wbG9kZSgkZGVsaW1pdGVyLCAkYXJyKTsKICAgIAogICAgcmV0dXJuICRvdXQ7CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBzbWFydHlfbW9kaWZpZXJfYXNfbnVtKCR2YWwsICRuZCA9IDAsICRkcCA9IE5VTEwsICR0cyA9IE5VTEwpCiAgewogICAgJG5kID0gbWF4KDAsIChpbnQpJG5kKTsKICAgICRsYyA9IGxvY2FsZWNvbnYoKTsKICAgIGlmKGlzX251bGwoJGRwKSkKICAgIHsKICAgICAgJGRwID0gJGxjWydkZWNpbWFsX3BvaW50J107CiAgICB9CiAgICBpZihpc19udWxsKCR0cykpCiAgICB7CiAgICAgICR0cyA9ICRsY1sndGhvdXNhbmRzX3NlcCddOwogICAgfQogICAgCiAgICByZXR1cm4gbnVtYmVyX2Zvcm1hdCgkdmFsLCAkbmQsICRkcCwgJHRzKTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHNtYXJ0eV9tb2RpZmllcl9yZmNfZGF0ZSgkc3RyaW5nKQogIHsKICAgICRtYWtlX3RpbWVzdGFtcCA9IGZ1bmN0aW9uKCRzdHJpbmcpewogICAgICBpZihlbXB0eSgkc3RyaW5nKSkKICAgICAgewogICAgICAgICR0aW1lID0gdGltZSgpOwogICAgICB9CiAgICAgIGVsc2UgaWYocHJlZ19tYXRjaCgnL15cZHsxNH0kLycsICRzdHJpbmcpKQogICAgICB7CiAgICAgICAgJHRpbWUgPSBta3RpbWUoCiAgICAgICAgICBzdWJzdHIoJHN0cmluZywgOCwgMiksIHN1YnN0cigkc3RyaW5nLCAxMCwgMiksIHN1YnN0cigkc3RyaW5nLCAxMiwgMiksCiAgICAgICAgICBzdWJzdHIoJHN0cmluZywgNCwgMiksIHN1YnN0cigkc3RyaW5nLCA2LCAyKSwgc3Vic3RyKCRzdHJpbmcsIDAsIDQpCiAgICAgICAgKTsKICAgICAgfQogICAgICBlbHNlIGlmKGlzX251bWVyaWMoJHN0cmluZykpCiAgICAgIHsKICAgICAgICAkdGltZSA9IChpbnQpJHN0cmluZzsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICAkdGltZSA9IHN0cnRvdGltZSgkc3RyaW5nKTsKICAgICAgICBpZigkdGltZSA9PSAtMSB8fCAkdGltZSA9PT0gRkFMU0UpCiAgICAgICAgewogICAgICAgICAgLy8gc3RydG90aW1lKCkgd2FzIG5vdCBhYmxlIHRvIHBhcnNlICRzdHJpbmcsIHVzZSAibm93IjoKICAgICAgICAgICR0aW1lID0gdGltZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgcmV0dXJuICR0aW1lOwogICAgfTsKICAgIAogICAgJHRpbWVzdGFtcCA9ICcnOwogICAgaWYoJHN0cmluZyAhPSAnJykKICAgIHsKICAgICAgJHRpbWVzdGFtcCA9ICRtYWtlX3RpbWVzdGFtcCgkc3RyaW5nKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICAkdHh0ID0gZGF0ZSgncicsICR0aW1lc3RhbXApOwogICAgCiAgICByZXR1cm4gJHR4dDsKICB9CiAgCiAgCiAgcHVibGljIGZ1bmN0aW9uIHNtYXJ0eV9tb2RpZmllcl94dF9lbnRpdHlfZGVjb2RlKCRzdHJpbmcpCiAgewogICAgcmV0dXJuIGh0bWxfZW50aXR5X2RlY29kZSgkc3RyaW5nLCBFTlRfUVVPVEVTKTsKICB9CiAgCiAgCiAgLyoKICAgICAqIEEgc21hcnR5IGJsb2NrIHBsdWdpbiBmb3IgZGlzcGxheWluZyBhbiBlcnJvciB1c2luZwogICAgICogYSB0ZW1wbGF0ZS4gIGkuZSB7ZXJyb3J9YmxhaCBibGFoIGJsYWh7L2Vycm9yfQogICAgICoKICAgICAqLwogIHB1YmxpYyBmdW5jdGlvbiBibG9ja0Rpc3BsYXlFcnJvcigkcGFyYW1zLCAkY29udGVudCwgJHNtYXJ0eSwgJHJlcGVhdCkKICB7CiAgICAkdHh0ID0gJyc7CiAgICBpZih0cmltKCRjb250ZW50KSAhPSAnJykKICAgIHsKICAgICAgJGVycm9yY2xhc3MgPSAnZXJyb3InOwogICAgICBpZihpc3NldCgkcGFyYW1zWydlcnJvcmNsYXNzJ10pKQogICAgICB7CiAgICAgICAgJGVycm9yY2xhc3MgPSB0cmltKCRwYXJhbXNbJ2Vycm9yY2xhc3MnXSk7CiAgICAgIH0KICAgICAgJHR4dCA9ICR0aGlzLT5tb2QtPkRpc3BsYXlFcnJvck1lc3NhZ2UoJGNvbnRlbnQsICRlcnJvcmNsYXNzKTsKICAgIH0KICAgIAogICAgaWYoaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pKQogICAgewogICAgICAkc21hcnR5LT5hc3NpZ24oJHBhcmFtc1snYXNzaWduJ10sICR0eHQpOwogICAgICAKICAgICAgcmV0dXJuICcnOwogICAgfQogICAgCiAgICByZXR1cm4gJHR4dDsKICB9CiAgCiAgCiAgcHVibGljIGZ1bmN0aW9uIGpzbWluKCRwYXJhbXMsICRjb250ZW50LCAkc21hcnR5LCAkcmVwZWF0KQogIHsKICAgIHJlcXVpcmVfb25jZShfX0RJUl9fIC4gJy9qc21pbi5waHAnKTsKICAgICR0eHQgPSAnJzsKICAgIGlmKCRjb250ZW50ICE9ICcnKQogICAgewogICAgICAkdHh0ID0gXEpTTWluOjptaW5pZnkoJGNvbnRlbnQpOwogICAgfQogICAgCiAgICBpZihpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkpCiAgICB7CiAgICAgICRzbWFydHktPmFzc2lnbigkcGFyYW1zWydhc3NpZ24nXSwgJHR4dCk7CiAgICAgIAogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIHJldHVybiAkdHh0OwogIH0KICAKICAKICAvKioKICAgKiBBIHNtYXJ0eSBwbHVnaW4gdG8gcHJvdmlkZSBhIHRleHQgYXJlYQogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBzbWFydHlfZnVuY3Rpb25feHRfdGV4dGFyZWEoJHBhcmFtcywgJHNtYXJ0eSkKICB7CiAgICAkbmFtZSAgICAgICAgID0gJyc7CiAgICAkd3lzaXd5ZyAgICAgID0gRkFMU0U7CiAgICAkc3ludGF4ICAgICAgID0gRkFMU0U7CiAgICAkY29udGVudCAgICAgID0gJyc7CiAgICAkY2xhc3MgICAgICAgID0gJyc7CiAgICAkaWQgICAgICAgICAgID0gJyc7CiAgICAkcm93cyAgICAgICAgID0gMTA7CiAgICAkY29scyAgICAgICAgID0gODA7CiAgICAkcmVxdWlyZWQgICAgID0gRkFMU0U7CiAgICAkd2FudGVkc3ludGF4ID0gJ3NtYXJ0eSc7CiAgICAKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ3ByZWZpeCddKSkKICAgIHsKICAgICAgJG5hbWUgPSB0cmltKCRwYXJhbXNbJ3ByZWZpeCddKTsKICAgIH0KICAgIAogICAgaWYoaXNzZXQoJHBhcmFtc1snbmFtZSddKSkKICAgIHsKICAgICAgJG5hbWUgLj0gdHJpbSgkcGFyYW1zWyduYW1lJ10pOwogICAgfQogICAgCiAgICBpZihpc3NldCgkcGFyYW1zWyd3eXNpd3lnJ10pKQogICAgewogICAgICAkd3lzaXd5ZyA9IHh0X3V0aWxzOjp0b19ib29sKHh0X3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywgJ3d5c2l3eWcnKSk7CiAgICB9CiAgICAKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ3N5bnRheCddKSkKICAgIHsKICAgICAgJHN5bnRheCA9IHh0X3V0aWxzOjp0b19ib29sKHh0X3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywgJ3N5bnRheCcpKTsKICAgIH0KICAgIAogICAgaWYoaXNzZXQoJHBhcmFtc1sncmVxdWlyZWQnXSkpCiAgICB7CiAgICAgICRyZXF1aXJlZCA9IHh0X3V0aWxzOjp0b19ib29sKHh0X3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywgJ3JlcXVpcmVkJykpOwogICAgfQogICAgCiAgICBpZihpc3NldCgkcGFyYW1zWyd2YWx1ZSddKSkKICAgIHsKICAgICAgJGNvbnRlbnQgPSAkcGFyYW1zWyd2YWx1ZSddOwogICAgfQogICAgCiAgICBpZihpc3NldCgkcGFyYW1zWydjb250ZW50J10pKQogICAgewogICAgICAkY29udGVudCA9ICRwYXJhbXNbJ2NvbnRlbnQnXTsKICAgIH0KICAgIAogICAgaWYoaXNzZXQoJHBhcmFtc1snY2xhc3MnXSkpCiAgICB7CiAgICAgICRjbGFzcyA9IHRyaW0oJHBhcmFtc1snY2xhc3MnXSk7CiAgICB9CiAgICAKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ3dhbnRlZHN5bnRheCddKSkKICAgIHsKICAgICAgJHdhbnRlZHN5bnRheCA9IHRyaW0oJHBhcmFtc1snd2FudGVkc3ludGF4J10pOwogICAgfQogICAgCiAgICBpZigkbmFtZSA9PSAnJykgeyByZXR1cm47IH0KICAKICAgIC8vIG5vIHN5bnRheCBhbmQgd3lzaXd5ZyBhdCB0aGUgc2FtZSB0aW1lLgogICAgaWYoJHd5c2l3eWcpIHsgJHN5bnRheCA9IEZBTFNFOyB9CiAgICAKICAgICRpZCAgID0gdHJpbSh4dF91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsICdpZCcsICRpZCkpOwogICAgJHJvd3MgPSAoaW50KXh0X3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywgJ3Jvd3MnLCAkcm93cyk7CiAgICAkcm93cyA9IG1heCgxLCAkcm93cyk7CiAgICAkY29scyA9IChpbnQpeHRfdXRpbHM6OmdldF9wYXJhbSgkcGFyYW1zLCAnY29scycsICRjb2xzKTsKICAgICRjb2xzID0gbWF4KDEsICRjb2xzKTsKICAgIAogICAgJGFkZHRleHQgPSAnJzsKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ3JlcXVpcmVkJ10pKQogICAgewogICAgICAkcmVxdWlyZWQgPSB4dF91dGlsczo6dG9fYm9vbCgkcGFyYW1zWydyZXF1aXJlZCddKTsKICAgICAgaWYoJHJlcXVpcmVkICYmICEkd3lzaXd5ZykKICAgICAgewogICAgICAgICRhZGR0ZXh0IC49ICcgcmVxdWlyZWQnOwogICAgICB9CiAgICB9CiAgICBpZigoJHBoID0geHRfdXRpbHM6OmdldF9wYXJhbSgkcGFyYW1zLCAncGxhY2Vob2xkZXInKSkpCiAgICB7CiAgICAgICRhZGR0ZXh0IC49ICcgcGxhY2Vob2xkZXI9IicgLiAkcGggLiAnIic7CiAgICB9CiAgICBpZigoJG1heGxlbiA9IChpbnQpeHRfdXRpbHM6OmdldF9wYXJhbSgkcGFyYW1zLCAnbWF4bGVuZ3RoJykpKQogICAgewogICAgICAkYWRkdGV4dCAuPSAnIG1heGxlbmd0aD0iJyAuICRtYXhsZW4gLiAnIic7CiAgICB9CiAgICAKICAgICRvdXRwdXQgPSBjcmVhdGVfdGV4dGFyZWEoJHd5c2l3eWcsICRjb250ZW50LCAkbmFtZSwgJGNsYXNzLCAkaWQsICcnLCAnJywgJGNvbHMsICRyb3dzLCAnJywgJHdhbnRlZHN5bnRheCwgJGFkZHRleHQpOwogICAgCiAgICBpZihpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkpCiAgICB7CiAgICAgICRzbWFydHktPmFzc2lnbih0cmltKCRwYXJhbXNbJ2Fzc2lnbiddKSwgJG91dHB1dCk7CiAgICAgIAogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIHJldHVybiAkb3V0cHV0OwogIH0KICAKICAKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICBhcnJheV90b19hc3NvYwogICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIHNtYXJ0eV9mdW5jdGlvbl9zdHJfdG9fYXNzb2MoJHBhcmFtcywgJHNtYXJ0eSkKICB7CiAgICAkaW5wdXQgID0gJyc7CiAgICAkZGVsaW0xID0gJywnOwogICAgJGRlbGltMiA9ICc9JzsKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2lucHV0J10pKQogICAgewogICAgICAkaW5wdXQgPSB0cmltKCRwYXJhbXNbJ2lucHV0J10pOwogICAgfQogICAgaWYoaXNzZXQoJHBhcmFtc1snZGVsaW0xJ10pKQogICAgewogICAgICAkZGVsaW0xID0gdHJpbSgkcGFyYW1zWydkZWxpbTEnXSk7CiAgICB9CiAgICBpZihpc3NldCgkcGFyYW1zWydkZWxpbTInXSkpCiAgICB7CiAgICAgICRkZWxpbTIgPSB0cmltKCRwYXJhbXNbJ2RlbGltMiddKTsKICAgIH0KICAgIAogICAgaWYoJGlucHV0ID09ICcnKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAkdG1wID0gXHh0X2FycmF5OjpleHBsb2RlX3dpdGhfa2V5KCRpbnB1dCwgJGRlbGltMiwgJGRlbGltMSk7CiAgICAKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSkKICAgIHsKICAgICAgJHNtYXJ0eS0+YXNzaWduKHRyaW0oJHBhcmFtc1snYXNzaWduJ10pLCAkdG1wKTsKICAgICAgCiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgcmV0dXJuICR0bXA7CiAgfQogIAogIAogIHB1YmxpYyBmdW5jdGlvbiB4dF9jYWNoZV9ibG9jaygkcGFyYW1zLCAkY29udGVudCwgJiRzbWFydHksICYkcmVwZWF0KQogIHsKICAgICRsaWZldGltZSAgICAgPSB4dF9wYXJhbTo6Z2V0X2ludCgkcGFyYW1zLCAnZXhwaXJlcycsIDEyMCk7CiAgICAkbGlmZXRpbWUgICAgID0gbWF4KDEsIG1pbigxNDQwLCAkbGlmZXRpbWUpKTsgLy8gbWludXRlcwogICAgJGxpZmV0aW1lICAgICAqPSA2MDsgLy8gc2Vjb25kcwogICAgLy8kY29uZmlnICAgICAgID0gJHRoaXMtPm1vZC0+Y29uZmlnOwogICAgJGNvbmZpZyA9IFxDTVNNU0V4dFxjb25maWc6OkdldEluc3RhbmNlKCk7CiAgICAkY2FjaGVfZHJpdmVyID0gTlVMTDsKICAgIAogICAgaWYoZ2V0X3VzZXJpZChGQUxTRSkgfHwgJGNvbmZpZ1snZGVidWcnXSkKICAgIHsKICAgICAgcmV0dXJuICRjb250ZW50OwogICAgfQogICAgJGNhY2hlX2RyaXZlciA9IG5ldyBcY21zX2ZpbGVjYWNoZV9kcml2ZXIoWydsaWZldGltZScgPT4gJGxpZmV0aW1lLCAnZ3JvdXAnID0+ICd4dF9jYWNoZV9ibG9jayddKTsKICAgIAogICAgLy8gaWYgY29udGVudCBpcyBudWxsLCBpdCdzIHRoZSBvcGVuaW4gY2FsbAogICAgLy8gICAgaWYgd2UgaGF2ZSBjYWNoZWQgY29udGVudCwgc2V0IHJlcGVhdCB0byBmYWxzZSwgZ2V0IGNvbnRlbnQsIHNldCByZXBlYXQgdG8gZmFsc2UsIHJldHVybiB0aGUgY29udGVudC4KICAgIC8vIGlmIGNvbnRlbnQgaXMgbm90IG51bGwsIGl0J3MgdGhlIGNsb3NpbmcgY2FsbAogICAgLy8gICAgc2V0IHJlcGVhdCB0byBmYWxzZQogICAgLy8gICAgY2FjaGUgdGhlIGNvbnRlbnQgYW5kIHJldHVybi4KICAgIGlmKGlzX251bGwoJGNvbnRlbnQpKQogICAgewogICAgICAvLyBvcGVuaW5nIHRhZwogICAgICAka2V5ID0geHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywgJ2tleScpOwogICAgICBpZighaXNfYXJyYXkoJHRoaXMtPl94dF9jYWNoZV9rZXlzKSkKICAgICAgewogICAgICAgICR0aGlzLT5feHRfY2FjaGVfa2V5cyA9IFtdOwogICAgICB9CiAgICAgICRsb3dlbnRyb3B5ID0geHRfcGFyYW06OmdldF9ib29sKCRwYXJhbXMsICdsb3dlbnRyb3B5Jyk7CiAgICAgIAogICAgICBpZighJGtleSAmJiAhJGxvd2VudHJvcHkpCiAgICAgIHsKICAgICAgICAvLyBnb3R0YSBnZW5lcmF0ZSBhIGtleS4KICAgICAgICAka2V5ID0gJ2MnIC4gbWQ1KF9fTUVUSE9EX18pOwogICAgICB9CiAgICAgIGlmKCEka2V5KQogICAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxTbWFydHlFeGNlcHRpb24oImxvd2VudHJvcHkgc3BlY2lmaWVkLCBidXQgbm8ga2V5IHNwZWNpZmllZCBpbiBjYWxsIHRvIHh0X2NhY2hlX2Jsb2NrIik7CiAgICAgIH0KICAgICAgLy8gYWRkIHNvbWUgZW50cm9weSBpbnRvIHRoZSBrZXkuLi4uIHRoZSBjdXJyZW50IHVybCwgYW5kIHRoZSBwYWdlIGNvbnRleHQuCiAgICAgIGlmKCF4dF9wYXJhbTo6Z2V0X2Jvb2woJHBhcmFtcywgJ2xvd2VudHJvcHknKSkKICAgICAgewogICAgICAgICRrZXkgPSAnYycgLiBtZDUoJGtleSAuIFxjbXNfdXRpbHM6OmdldF9jdXJyZW50X3BhZ2VpZCgpIC4geHRfdXJsOjpjdXJyZW50X3VybCgpKTsKICAgICAgfQogICAgICAkdGhpcy0+X3h0X2NhY2hlX2tleXNbXSA9ICRrZXk7CiAgICAgIGlmKCRjYWNoZV9kcml2ZXItPmV4aXN0cygka2V5KSkKICAgICAgewogICAgICAgICRjb250ZW50ID0gJGNhY2hlX2RyaXZlci0+Z2V0KCRrZXkpOwogICAgICAgICRyZXBlYXQgID0gRkFMU0U7CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgLy8gY2xvc2luZyBjYWxsCiAgICAgIC8vIGlmIHdlIGdvdCBoZXJlLCB3ZSdyZSBzZXR0aW5nIHRoZSBjYWNoZS4KICAgICAgJHJlcGVhdCA9IEZBTFNFOwogICAgICAka2V5ICAgID0gYXJyYXlfcG9wKCR0aGlzLT5feHRfY2FjaGVfa2V5cyk7CiAgICAgICRjYWNoZV9kcml2ZXItPnNldCgka2V5LCAkY29udGVudCk7CiAgICB9CiAgICAKICAgIHJldHVybiAkY29udGVudDsKICB9CiAgCiAgCiAgcHVibGljIGZ1bmN0aW9uIGNhY2hlX3N0YXJ0KCR0YWdfYXJnLCAkc21hcnR5KQogIHsKICAgICRvdXRwdXQgPSAka2V5ID0gJyc7CiAgICAvLyRjb25maWcgPSAkdGhpcy0+bW9kLT5jb25maWc7CiAgICAkY29uZmlnID0gXENNU01TRXh0XGNvbmZpZzo6R2V0SW5zdGFuY2UoKTsKICAgIAogICAgaWYoIVxjbXNfY2FjaGVfaGFuZGxlcjo6Z2V0X2luc3RhbmNlKCktPmNhbl9jYWNoZSgpKQogICAgewogICAgICAkb3V0cHV0ID0gJ3snOwogICAgfQogICAgZWxzZQogICAgewogICAgICBpZighaXNfYXJyYXkoJHRoaXMtPl94dF9jYWNoZV9rZXlzKSkKICAgICAgewogICAgICAgICR0aGlzLT5feHRfY2FjaGVfa2V5cyA9IFtdOwogICAgICB9CiAgICAgIAogICAgICAvLyBpbml0aWFsaXplCiAgICAgIGlmKGlzX2FycmF5KCR0YWdfYXJnKSAmJiBpc3NldCgkdGFnX2FyZ1sna2V5J10pKQogICAgICB7CiAgICAgICAgJGtleSA9IHRyaW0oJHRhZ19hcmdbJ2tleSddKTsKICAgICAgICAka2V5ID0gJ19fJyAuIHRyaW0odHJpbSgka2V5LCAiJ1wiIikpOwogICAgICAgICRrZXkgLj0gY291bnQoJHRoaXMtPl94dF9jYWNoZV9rZXlzKTsKICAgICAgfQogICAgICAvLyBmb3JtdWxhdGUgYSByYW5kb20ga2V5CiAgICAgIGlmKCEka2V5KQogICAgICB7CiAgICAgICAgJG5uID0gMDsKICAgICAgICB3aGlsZSgkbm4gPCAxMDApCiAgICAgICAgewogICAgICAgICAgJGtleXIgPSAndicgLiBtZDUoJG5uIC4gcmFuZG9tX2J5dGVzKDY0KSAuIFxjbXNfdXRpbHM6OmdldF9jdXJyZW50X3BhZ2VpZCgpIC4geHRfdXJsOjpjdXJyZW50X3VybCgpKTsKICAgICAgICAgICRrZXkgID0gJGtleXIgLiAkbm47CiAgICAgICAgICBpZighaW5fYXJyYXkoJGtleSwgJHRoaXMtPl94dF9jYWNoZV9rZXlzKSkKICAgICAgICAgIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBpZighJG5uKQogICAgICAgICAgewogICAgICAgICAgICAkbm4gPSAxOwogICAgICAgICAgfQogICAgICAgICAgJG5uID0gJG5uKys7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICBpZighJGtleSkKICAgICAgewogICAgICAgIHJldHVybiAneyc7CiAgICAgIH0KICAgICAgJHRoaXMtPl94dF9jYWNoZV9rZXlzW10gPSAka2V5OwogICAgICAKICAgICAgJG91dHB1dCA9ICJcJCRrZXk9XGNtc19jYWNoZV9oYW5kbGVyOjpnZXRfaW5zdGFuY2UoKS0+Z2V0KCcka2V5JywneHRfY2FjaGUnKTsgaWYoXCQka2V5IT0nJyl7ZWNobyAnPCEtLXh0X2NhY2hlLS0+Jy5cJCRrZXk7fWVsc2V7b2Jfc3RhcnQoKTsiOwogICAgfQogICAgCiAgICByZXR1cm4gJzw/cGhwICcgLiAkb3V0cHV0IC4gJyA/Pic7CiAgfQogIAogIAogIHB1YmxpYyBmdW5jdGlvbiBjYWNoZV9lbmQoJHRhZ19hcmcsICRzbWFydHkpCiAgewogICAgJG91dHB1dCA9ICcnOwogICAgaWYoIVxjbXNfY2FjaGVfaGFuZGxlcjo6Z2V0X2luc3RhbmNlKCktPmNhbl9jYWNoZSgpKQogICAgewogICAgICAkb3V0cHV0ID0gJ30nOwogICAgfQogICAgZWxzZQogICAgewogICAgICBpZighaXNfYXJyYXkoJHRoaXMtPl94dF9jYWNoZV9rZXlzKSB8fCBjb3VudCgkdGhpcy0+X3h0X2NhY2hlX2tleXMpID09IDApCiAgICAgIHsKICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdpbiAveHRfY2FjaGUgc21hcnR5IHRhZyB3aXRob3V0IGV4aXN0aW5nIGNhY2hlIGRhdGEnKTsKICAgICAgfQogICAgICAka2V5ID0gYXJyYXlfcG9wKCR0aGlzLT5feHRfY2FjaGVfa2V5cyk7CiAgICAgIGlmKCRrZXkgPT0gJycpCiAgICAgIHsKICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdpbiAveHRfY2FjaGUgd2l0aCBpbnZhbGlkIGtleScpOwogICAgICB9CiAgICAgIAogICAgICAkb3V0cHV0ID0gIlwkJGtleT1Ab2JfZ2V0X2NvbnRlbnRzKCk7QG9iX2VuZF9jbGVhbigpO2VjaG8gXCQka2V5O1xjbXNfY2FjaGVfaGFuZGxlcjo6Z2V0X2luc3RhbmNlKCktPnNldCgnJGtleScsXCQka2V5LCd4dF9jYWNoZScpO30iOwogICAgfQogICAgCiAgICByZXR1cm4gJzw/cGhwICcgLiAkb3V0cHV0IC4gJyA/Pic7CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiB4dF9hcnJheV9jb3B5KCRwYXJhbXMsICRzbWFydHkpCiAgewogICAgJG5hbWUgPSB4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCAnbmFtZScpOwogICAgJGluICAgPSB4dF91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsICdpbicpOwogICAgaWYoISRuYW1lIHx8ICFpc19hcnJheSgkaW4pKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIGZvcmVhY2goJGluIGFzICRrZXkgPT4gJHZhbHVlKQogICAgewogICAgICBzZWxmOjp4dF9hcnJheV9zZXQoWydhcnJheScgPT4gJG5hbWUsICdrZXknID0+ICRrZXksICd2YWx1ZScgPT4gJHZhbHVlXSwgJHNtYXJ0eSk7CiAgICB9CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiB4dF9hcnJheV9zZXQoJHBhcmFtcywgJHNtYXJ0eSkKICB7CiAgICBpZighKGlzc2V0KCRwYXJhbXNbJ2FycmF5J10pICYmIGlzc2V0KCRwYXJhbXNbJ3ZhbHVlJ10pKSkKICAgIHsKICAgICAgcmV0dXJuOwogICAgfSAvLyBubyBwYXJhbXMsIGRvIG5vdGhpbmcuCiAgICAkYXJyID0gZ2V0X3BhcmFtZXRlcl92YWx1ZSgkcGFyYW1zLCAnYXJyYXknKTsKICAgICRrZXkgPSBnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsICdrZXknKTsKICAgICR2YWwgPSBnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsICd2YWx1ZScpOwogICAgCiAgICBpZigkYXJyID09ICcnIHx8ICR2YWwgPT0gJycpCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgJGRhdGEgPSBbXTsKICAgIGlmKFx4dF90bXBkYXRhOjpleGlzdHMoJGFycikpCiAgICB7CiAgICAgICRkYXRhID0gXHh0X3RtcGRhdGE6OmdldCgkYXJyKTsKICAgIH0KICAgIGlmKCFpc19hcnJheSgkZGF0YSkpCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmKCRrZXkpCiAgICB7CiAgICAgICRkYXRhWyRrZXldID0gJHZhbDsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgJGRhdGFbXSA9ICR2YWw7CiAgICB9CiAgICBceHRfdG1wZGF0YTo6c2V0KCRhcnIsICRkYXRhKTsKICB9CiAgCiAgCiAgcHVibGljIGZ1bmN0aW9uIHh0X2FycmF5X3BvcCgkcGFyYW1zLCAkc21hcnR5KQogIHsKICAgIGlmKCFpc3NldCgkcGFyYW1zWydhcnJheSddKSkKICAgIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgJGFyciA9IGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywgJ2FycmF5Jyk7CiAgICBpZighJGFycikKICAgIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYoIVx4dF90bXBkYXRhOjpleGlzdHMoJGFycikpCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICAgICRkYXRhID0gXHh0X2FycmF5OjpnZXQoJGFycik7CiAgICBpZighaXNfYXJyYXkoJGRhdGEpKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgICRyZXQgPSBhcnJheV9wb3AoJGRhdGEpOwogICAgXHh0X3RtcGRhdGE6OnNldCgkYXJyLCAkZGF0YSk7CiAgICAKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSkKICAgIHsKICAgICAgJHNtYXJ0eS0+YXNzaWduKHRyaW0oJHBhcmFtc1snYXNzaWduJ10pLCAkcmV0KTsKICAgICAgCiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgcmV0dXJuICRyZXQ7CiAgfQogIAogIAogIHB1YmxpYyBmdW5jdGlvbiB4dF9hcnJheV9lcmFzZSgkcGFyYW1zLCAkc21hcnR5KQogIHsKICAgIGlmKCFpc3NldCgkcGFyYW1zWydhcnJheSddKSB8fCAhaXNzZXQoJHBhcmFtc1sna2V5J10pKQogICAgewogICAgICAvLyBubyBwYXJhbXMsIGRvIG5vdGhpbmcuCiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgJGFyciA9IHRyaW0oJHBhcmFtc1snYXJyYXknXSk7CiAgICAka2V5ID0gdHJpbSgkcGFyYW1zWydrZXknXSk7CiAgICBpZigkYXJyID09ICcnIHx8ICRrZXkgPT0gJycpCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmKCFceHRfdG1wZGF0YTo6ZXhpc3RzKCRhcnIpKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgICRkYXRhID0gXHh0X3RtcGRhdGE6OmdldCgkYXJyKTsKICAgIGlmKGlzc2V0KCRkYXRhWyRrZXldKSkKICAgIHsKICAgICAgdW5zZXQoJGRhdGFbJGtleV0pOwogICAgfQogICAgaWYoY291bnQoYXJyYXlfa2V5cygkZGF0YSkpID09IDApCiAgICB7CiAgICAgIFx4dF90bXBkYXRhOjplcmFzZSgkYXJyKTsKICAgICAgCiAgICAgIHJldHVybjsKICAgIH0KICAgIFx4dF90bXBkYXRhOjpzZXQoJGFyciwgJGRhdGEpOwogIH0KICAKICAKICBwdWJsaWMgZnVuY3Rpb24geHRfYXJyYXlfZ2V0KCRwYXJhbXMsICRzbWFydHkpCiAgewogICAgaWYoIWlzc2V0KCRwYXJhbXNbJ2FycmF5J10pIHx8ICFpc3NldCgkcGFyYW1zWydrZXknXSkpCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0gLy8gbm8gcGFyYW1zLCBkbyBub3RoaW5nLgogICAgJGFyciA9IHRyaW0oJHBhcmFtc1snYXJyYXknXSk7CiAgICAka2V5ID0gdHJpbSgkcGFyYW1zWydrZXknXSk7CiAgICBpZigkYXJyID09ICcnIHx8ICRrZXkgPT0gJycpCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmKCFceHRfdG1wZGF0YTo6ZXhpc3RzKCRhcnIpKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgICRkYXRhID0gXHh0X3RtcGRhdGE6OmdldCgkYXJyKTsKICAgIGlmKGlzc2V0KCRkYXRhWyRrZXldKSkKICAgIHsKICAgICAgJHZhbCA9ICRkYXRhWyRrZXldOwogICAgICAKICAgICAgaWYoaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pKQogICAgICB7CiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKHRyaW0oJHBhcmFtc1snYXNzaWduJ10pLCAkdmFsKTsKICAgICAgICAKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiAkdmFsOwogICAgfQogIH0KICAKICAKICBwdWJsaWMgZnVuY3Rpb24geHRfYXJyYXlfZ2V0YWxsKCRwYXJhbXMsICRzbWFydHkpCiAgewogICAgaWYoIWlzc2V0KCRwYXJhbXNbJ2FycmF5J10pKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgICRhcnIgPSB0cmltKCRwYXJhbXNbJ2FycmF5J10pOwogICAgaWYoJGFyciA9PSAnJykKICAgIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYoIVx4dF90bXBkYXRhOjpleGlzdHMoJGFycikpCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICAgICRkYXRhID0gXHh0X3RtcGRhdGE6OmdldCgkYXJyKTsKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSkKICAgIHsKICAgICAgJHNtYXJ0eS0+YXNzaWduKHRyaW0oJHBhcmFtc1snYXNzaWduJ10pLCAkZGF0YSk7CiAgICAgIAogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIHJldHVybiAkZGF0YTsKICB9CiAgCiAgCiAgcHVibGljIGZ1bmN0aW9uIHh0X2FkbWluX2Vycm9yKCRwYXJhbXMsICRzbWFydHkpCiAgewogICAgZ2xvYmFsICRDTVNfQURNSU5fUEFHRTsKICAgIGlmKCFpc3NldCgkQ01TX0FETUlOX1BBR0UpKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZighaXNzZXQoJHBhcmFtc1snZXJyb3InXSkpCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgJHRtcCA9ICR0aGlzLT5tb2QtPlNob3dFcnJvcnMoJHBhcmFtc1snZXJyb3InXSk7CiAgICAKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSkKICAgIHsKICAgICAgJHNtYXJ0eS0+YXNzaWduKCRwYXJhbXNbJ2Fzc2lnbiddLCAkdG1wKTsKICAgICAgCiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgcmV0dXJuICR0bXA7CiAgfQogIAogIAogIHB1YmxpYyBmdW5jdGlvbiB4dF9pc2JvdCgkcGFyYW1zLCAkc21hcnR5KQogIHsKICAgICRicm93c2VyID0geHRfdXRpbHM6OmdldF9icm93c2VyKCk7CiAgICAkcm9ib3QgICA9ICRicm93c2VyLT5pc1JvYm90KCk7CiAgICAKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSkKICAgIHsKICAgICAgJHNtYXJ0eS0+YXNzaWduKCRwYXJhbXNbJ2Fzc2lnbiddLCAkcm9ib3QpOwogICAgICAKICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICByZXR1cm4gJHJvYm90OwogIH0KICAKICAKICBwdWJsaWMgZnVuY3Rpb24geHRfaXNhbmRyb2lkKCRwYXJhbXMsICRzbWFydHkpCiAgewogICAgJGJyb3dzZXIgPSB4dF91dGlsczo6Z2V0X2Jyb3dzZXIoKTsKICAgICRhbmRyb2lkID0gKCRicm93c2VyLT5nZXRQbGF0Zm9ybSgpID09ICRicm93c2VyOjpQTEFURk9STV9BTkRST0lEKTsKICAgIAogICAgaWYoaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pKQogICAgewogICAgICAkc21hcnR5LT5hc3NpZ24oJHBhcmFtc1snYXNzaWduJ10sICRhbmRyb2lkKTsKICAgICAgCiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgcmV0dXJuICRhbmRyb2lkOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24geHRfaXNpb3MoJHBhcmFtcywgJHNtYXJ0eSkKICB7CiAgICAkYnJvd3NlciA9IHh0X3V0aWxzOjpnZXRfYnJvd3NlcigpOwogICAgJGlvcyAgICAgPSAoJGJyb3dzZXItPmdldFBsYXRmb3JtKCkgPT0gJGJyb3dzZXI6OlBMQVRGT1JNX0lQSE9ORSB8fAogICAgICAgICAgICAgICAgJGJyb3dzZXItPmdldFBsYXRmb3JtKCkgPT0gJGJyb3dzZXI6OlBMQVRGT1JNX0lQQUQgfHwKICAgICAgICAgICAgICAgICRicm93c2VyLT5nZXRQbGF0Zm9ybSgpID09ICRicm93c2VyOjpQTEFURk9STV9JUE9EKTsKICAgIAogICAgaWYoaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pKQogICAgewogICAgICAkc21hcnR5LT5hc3NpZ24oJHBhcmFtc1snYXNzaWduJ10sICRpb3MpOwogICAgICAKICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICByZXR1cm4gJGlvczsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHh0X2dldF9icm93c2VyKCRwYXJhbXMsICRzbWFydHkpCiAgewogICAgJGJyb3dzZXIgPSB4dF91dGlsczo6Z2V0X2Jyb3dzZXIoKTsKICAgICRyZXMgICAgID0gJGJyb3dzZXItPmdldEJyb3dzZXIoKTsKICAgIAogICAgaWYoaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pKQogICAgewogICAgICAkc21hcnR5LT5hc3NpZ24oJHBhcmFtc1snYXNzaWduJ10sICRyZXMpOwogICAgICAKICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICByZXR1cm4gJHJlczsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHh0X2lzaWUoJHBhcmFtcywgJHNtYXJ0eSkKICB7CiAgICAkYnJvd3NlciA9IHh0X3V0aWxzOjpnZXRfYnJvd3NlcigpOwogICAgJHJlcyAgICAgPSAkYnJvd3Nlci0+Z2V0QnJvd3NlcigpOwogICAgJHJlcyAgICAgPSAoJHJlcyA9PSBcQnJvd3Nlcjo6QlJPV1NFUl9JRSAmJiAhJGJyb3dzZXItPmlzTW9iaWxlKCkpID8gMSA6IDA7CiAgICAKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSkKICAgIHsKICAgICAgJHNtYXJ0eS0+YXNzaWduKCRwYXJhbXNbJ2Fzc2lnbiddLCAkcmVzKTsKICAgICAgCiAgICAgIHJldHVybiAnJzsKICAgIH0KICAgIAogICAgcmV0dXJuICRyZXM7CiAgfQogIAogIAogIHB1YmxpYyBmdW5jdGlvbiB4dF9pc19zbWFydHBob25lKCRwYXJhbXMsICRzbWFydHkpCiAgewogICAgJGJyb3dzZXIgICAgPSB4dF91dGlsczo6Z2V0X2Jyb3dzZXIoKTsKICAgICRzbWFydHBob25lID0gJGJyb3dzZXItPmlzTW9iaWxlKCk7CiAgICAKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSkKICAgIHsKICAgICAgJHNtYXJ0eS0+YXNzaWduKCRwYXJhbXNbJ2Fzc2lnbiddLCAkc21hcnRwaG9uZSk7CiAgICAgIAogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIHJldHVybiAkc21hcnRwaG9uZTsKICB9CiAgCiAgCiAgcHVibGljIGZ1bmN0aW9uIHh0X3d5c2l3eWcoJHBhcmFtcywgJHNtYXJ0eSkKICB7CiAgICBpZighaXNzZXQoJHBhcmFtc1snd3lzaXd5ZyddKSkKICAgIHsKICAgICAgJHBhcmFtc1snd3lzaXd5ZyddID0gMTsKICAgIH0KICAgIAogICAgcmV0dXJuIHNlbGY6OnNtYXJ0eV9mdW5jdGlvbl94dF90ZXh0YXJlYSgkcGFyYW1zLCAkc21hcnR5KTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHNtYXJ0eV9tb2RpZmllcl9jcmVhdGV1cmwoJGlucHV0LCAkYXNzdW1lX3Jvb3QgPSBUUlVFKQogIHsKICAgICR0bXAgPSBzdHJ0b2xvd2VyKCRpbnB1dCk7CiAgICBpZihzdGFydHN3aXRoKCR0bXAsICdmdHAnKSB8fCBzdGFydHN3aXRoKCR0bXAsICdodHRwJykpCiAgICB7CiAgICAgIHJldHVybiAkaW5wdXQ7CiAgICB9CiAgICBpZihzdGFydHN3aXRoKCRpbnB1dCwgJy8nKSAmJiAkYXNzdW1lX3Jvb3QpCiAgICB7CiAgICAgIC8vIHJlbGF0aXZlIHVybC4uLgogICAgICByZXR1cm4gQ01TX1JPT1RfVVJMIC4gJGlucHV0OwogICAgfQogICAgCiAgICAkaG9zdHBhcnQgPSBzdWJzdHIoJGlucHV0LCAwLCBzdHJwb3MoJGlucHV0LCAnLycpKTsKICAgIGlmKHN0cnBvcygkaW5wdXQsICcuJykgPT09IEZBTFNFKQogICAgewogICAgICAvLyBubyBkb3RzIGluIGhvc3QgcGFydC4uLiBpdCdzIGEgcGF0aCB3aXRob3V0IGEgc3RhcnRpbmcgLwogICAgICByZXR1cm4gQ01TX1JPT1RfVVJMIC4gJGlucHV0OwogICAgfQogICAgCiAgICAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBwYXRoIHN0dWZmLgogICAgcmV0dXJuICcvLycgLiAkaW5wdXQ7CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiB4dF9zZXRsaXN0KCRwYXJhbXMsICRzbWFydHkpCiAgewogICAgJG5hbWUgPSBnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsICdhcnJheScpOwogICAgJG5hbWUgPSBnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsICduYW1lJywgJG5hbWUpOwogICAgJGtleSAgPSBnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsICdrZXknKTsKICAgICR2YWwgID0gZ2V0X3BhcmFtZXRlcl92YWx1ZSgkcGFyYW1zLCAndmFsdWUnKTsKICAgIAogICAgJG5hbWUgPSB0cmltKCRuYW1lKTsKICAgICRrZXkgID0gdHJpbSgka2V5KTsKICAgIGlmKCEkbmFtZSB8fCAhaXNzZXQoJHBhcmFtc1sndmFsdWUnXSkpCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgJHBhcnRzID0gZXhwbG9kZSgnLicsICRuYW1lKTsKICAgICRkYXRhICA9IFtdOwogICAgaWYoIWlzX2FycmF5KCRwYXJ0cykgfHwgY291bnQoJHBhcnRzKSA9PSAwKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZigka2V5KQogICAgewogICAgICAkcGFydHNbXSA9ICRrZXk7CiAgICB9CiAgICAKICAgICRzbWFydHkgPSAkdGhpcy0+bW9kLT5jbXMtPkdldFNtYXJ0eSgpOwogICAgJG5hbWUgICA9ICRwYXJ0c1swXTsKICAgICRkYXRhICAgPSAkc21hcnR5LT5nZXRfdGVtcGxhdGVfdmFycygkbmFtZSk7CiAgICBpZighJGRhdGEpCiAgICB7CiAgICAgICRkYXRhID0gW107CiAgICB9CiAgICBpZighaXNfYXJyYXkoJGRhdGEpKQogICAgewogICAgICAkZGF0YSA9IGFycmF5KCRkYXRhKTsKICAgIH0KICAgIAogICAgLy8ge3h0X3NldGxpc3QgbmFtZT0nYS5iLmMuZCcgdmFsdWU9JzU1J30KICAgICRyZWYgPSYgJGRhdGE7CiAgICAkaSAgID0gMDsKICAgIGZvcigkaSA9IDE7ICRpIDwgY291bnQoJHBhcnRzKSAtIDE7ICRpKyspCiAgICB7CiAgICAgIGlmKCFpc3NldCgkcmVmWyRwYXJ0c1skaV1dKSB8fCAhaXNfYXJyYXkoJHJlZlskcGFydHNbJGldXSkpCiAgICAgIHsKICAgICAgICBpZigkaSA8IGNvdW50KCRwYXJ0cykgLSAxKQogICAgICAgIHsKICAgICAgICAgICRyZWZbJHBhcnRzWyRpXV0gPSBbXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgJHJlZiA9JiAkcmVmWyRwYXJ0c1skaV1dOwogICAgfQogICAgCiAgICAvLyBleHBlY3QgYSBsaXN0IG9mIHZhbHVlcy4uLiBtYXkgY29udGFpbiBrZXkvdmFsdWUgcGFpcnMKICAgIGlmKHN0cnBvcygkdmFsLCAnOjonKSA9PT0gRkFMU0UpCiAgICB7CiAgICAgICRyZWZbJHBhcnRzWyRpXV0gPSAkdmFsOwogICAgfQogICAgZWxzZQogICAgewogICAgICAkdG1wID0gXHh0X2FycmF5OjpzbWFydF9leHBsb2RlKCR2YWwsICd8fCcpOwogICAgICBpZihpc19hcnJheSgkdG1wKSAmJiBjb3VudCgkdG1wKSkKICAgICAgewogICAgICAgICRyZWZbJHBhcnRzWyRpXV0gPSBbXTsKICAgICAgICBmb3IoJGogPSAwOyAkaiA8IGNvdW50KCR0bXApOyAkaisrKQogICAgICAgIHsKICAgICAgICAgICRrID0gJyc7CiAgICAgICAgICAkdiA9ICR0bXBbJGpdOwogICAgICAgICAgaWYoc3RycG9zKCR2LCAnOjonKSAhPT0gRkFMU0UpCiAgICAgICAgICB7CiAgICAgICAgICAgIFskaywgJHZdID0gZXhwbG9kZSgnOjonLCAkdG1wWyRqXSwgMik7CiAgICAgICAgICB9CiAgICAgICAgICBpZigkaykKICAgICAgICAgIHsKICAgICAgICAgICAgJGsgPSB0cmltKHRyaW0oJGssICciJykpOwogICAgICAgICAgfQogICAgICAgICAgaWYoJHYpCiAgICAgICAgICB7CiAgICAgICAgICAgICR2ID0gdHJpbSh0cmltKCR2LCAnIicpKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmKCRrKQogICAgICAgICAgewogICAgICAgICAgICAkcmVmWyRwYXJ0c1skaV1dWyRrXSA9ICR2OwogICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgewogICAgICAgICAgICAkcmVmWyRwYXJ0c1skaV1dW10gPSAkdjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIAogICAgLy8gcHV0IHRoZSBkYXRhIGJhY2sKICAgICRzbWFydHktPmFzc2lnbigkbmFtZSwgJGRhdGEpOwogICAgLy8gZG9uZS4KICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHh0X3Vuc2V0bGlzdCgkcGFyYW1zLCAkc21hcnR5KQogIHsKICAgICRuYW1lID0gZ2V0X3BhcmFtZXRlcl92YWx1ZSgkcGFyYW1zLCAnYXJyYXknKTsKICAgICRuYW1lID0gZ2V0X3BhcmFtZXRlcl92YWx1ZSgkcGFyYW1zLCAnbmFtZScsICRuYW1lKTsKICAgICRrZXkgID0gZ2V0X3BhcmFtZXRlcl92YWx1ZSgkcGFyYW1zLCAna2V5Jyk7CiAgICAKICAgIGlmKCEkbmFtZSB8fCAhJGtleSkKICAgIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgJGRhdGEgPSAkc21hcnR5LT5nZXRfdGVtcGxhdGVfdmFycygkbmFtZSk7CiAgICBpZighJGRhdGEpCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmKCFpc19hcnJheSgkZGF0YSkpCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgaWYoIWlzc2V0KCRkYXRhWyRrZXldKSkKICAgIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdW5zZXQoJGRhdGFbJGtleV0pOwogICAgJHNtYXJ0eS0+YXNzaWduKCRuYW1lLCAkZGF0YSk7CiAgICAvLyBkb25lLgogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24geHRfbW9kdWxlX2hpbnQoJHBhcmFtcywgJHNtYXJ0eSkKICB7CiAgICBpZighaXNzZXQoJHBhcmFtc1snbW9kdWxlJ10pKSB7IHJldHVybiAnJzsgfQogICAgCiAgICAkbW9kdWxlID0gXHRyaW0oJHBhcmFtc1snbW9kdWxlJ10pOwogICAgCiAgICAkbW9kb2JqID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRtb2R1bGUpOwogICAgCiAgICBpZighXGlzX29iamVjdCgkbW9kb2JqKSkgeyByZXR1cm47IH0KICAgIAogICAgJGRhdGEgPSBjbXNfdXRpbHM6OmdldF9hcHBfZGF0YSgnX19NT0RVTEVfSElOVF9fJyAuICRtb2R1bGUpOwogICAgCiAgICBpZighJGRhdGEpIHsgJGRhdGEgPSBbXTsgfQogICAgCiAgICAvLyB3YXJuaW5nLCBubyBjaGVjayBoZXJlIGlmIHRoZSBtb2R1bGUgdW5kZXJzdGFuZHMgdGhlIHBhcmFtZXRlci4KICAgIGZvcmVhY2goJHBhcmFtcyBhcyAka2V5ID0+ICR2YWx1ZSkKICAgIHsKICAgICAgaWYoJ21vZHVsZScgPT0gJGtleSkgeyBjb250aW51ZTsgfQogICAgICAKICAgICAgJGRhdGFbJGtleV0gPSAkdmFsdWU7CiAgICB9CiAgICBjbXNfdXRpbHM6OnNldF9hcHBfZGF0YSgnX19NT0RVTEVfSElOVF9fJyAuICRtb2R1bGUsICRkYXRhKTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHh0X3N0YXJ0X3RhYnMoJHBhcmFtcywgJHNtYXJ0eSkKICB7CiAgICAkb3V0ID0gJHRoaXMtPm1vZC0+U3RhcnRUYWJIZWFkZXJzKCk7CiAgICBpZihpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkpCiAgICB7CiAgICAgICRzbWFydHktPmFzc2lnbih0cmltKCRwYXJhbXNbJ2Fzc2lnbiddKSwgJG91dCk7CiAgICAgIAogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIHJldHVybiAkb3V0OwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24geHRfZW5kX3RhYnMoJHBhcmFtcywgJHNtYXJ0eSkKICB7CiAgICAkb3V0ID0gJyc7CiAgICBpZigkdGhpcy0+X2luX3RhYikKICAgIHsKICAgICAgJG91dCAgICAgICAgICAgLj0gJHRoaXMtPm1vZC0+RW5kVGFiKCk7CiAgICAgICR0aGlzLT5faW5fdGFiID0gMDsKICAgIH0KICAgICRvdXQgLj0gJHRoaXMtPm1vZC0+RW5kVGFiQ29udGVudCgpOwogICAgaWYoaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pKQogICAgewogICAgICAkc21hcnR5LT5hc3NpZ24odHJpbSgkcGFyYW1zWydhc3NpZ24nXSksICRvdXQpOwogICAgICAKICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICByZXR1cm4gJG91dDsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHh0X3RhYmhlYWRlcigkcGFyYW1zLCAkc21hcnR5KQogIHsKICAgIGlmKCFpc3NldCgkcGFyYW1zWyduYW1lJ10pKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgICRuYW1lICA9IHRyaW0oJHBhcmFtc1snbmFtZSddKTsKICAgICRsYWJlbCA9ICRuYW1lOwogICAgaWYoaXNzZXQoJHBhcmFtc1snbGFiZWwnXSkpCiAgICB7CiAgICAgICRsYWJlbCA9IHRyaW0oJHBhcmFtc1snbGFiZWwnXSk7CiAgICB9CiAgICAKICAgICRvdXQgPSAkdGhpcy0+bW9kLT5TZXRUYWJIZWFkZXIoJG5hbWUsICRsYWJlbCk7CiAgICAKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSkKICAgIHsKICAgICAgJHNtYXJ0eS0+YXNzaWduKHRyaW0oJHBhcmFtc1snYXNzaWduJ10pLCAkb3V0KTsKICAgICAgCiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgcmV0dXJuICRvdXQ7CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiB4dF90YWJjb250ZW50X3N0YXJ0KCRwYXJhbXMsICRzbWFydHkpCiAgewogICAgc3RhdGljICRlbmR0YWJoZWFkZXJzX3NlbnQgPSAwOwogICAgCiAgICBpZighaXNzZXQoJHBhcmFtc1snbmFtZSddKSkKICAgIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgJHBhcm1zMiA9ICRzbWFydHktPmdldF90ZW1wbGF0ZV92YXJzKCdhY3Rpb25wYXJhbXMnKTsKICAgIGlmKCFpc19hcnJheSgkcGFybXMyKSkKICAgIHsKICAgICAgJHBhcm1zMiA9IFtdOwogICAgfQogICAgCiAgICAkb3V0ID0gJyc7CiAgICBpZighJGVuZHRhYmhlYWRlcnNfc2VudCkKICAgIHsKICAgICAgJG91dCAgICAgICAgICAgICAgICAuPSAkdGhpcy0+bW9kLT5FbmRUYWJIZWFkZXJzKCk7CiAgICAgICRvdXQgICAgICAgICAgICAgICAgLj0gJHRoaXMtPm1vZC0+U3RhcnRUYWJDb250ZW50KCk7CiAgICAgICRlbmR0YWJoZWFkZXJzX3NlbnQgPSAxOwogICAgfQogICAgCiAgICBpZigkdGhpcy0+X2luX3RhYikKICAgIHsKICAgICAgJG91dCAgICAgICAgICAgLj0gJHRoaXMtPm1vZC0+RW5kVGFiKCk7CiAgICAgICR0aGlzLT5faW5fdGFiID0gMDsKICAgIH0KICAgIAogICAgJG91dCAgICAgICAgICAgLj0gJHRoaXMtPm1vZC0+U3RhcnRUYWIoJHBhcmFtc1snbmFtZSddLCAkcGFybXMyKTsKICAgICR0aGlzLT5faW5fdGFiID0gMTsKICAgIAogICAgaWYoaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pKQogICAgewogICAgICAkc21hcnR5LT5hc3NpZ24odHJpbSgkcGFyYW1zWydhc3NpZ24nXSksICRvdXQpOwogICAgICAKICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICByZXR1cm4gJG91dDsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHh0X3RhYmNvbnRlbnRfZW5kKCRwYXJhbXMsICRzbWFydHkpCiAgewogICAgJGVuZGhlYWRlcl9zZW50ID0gMDsKICAgICRvdXQgICAgICAgICAgICA9ICR0aGlzLT5tb2QtPkVuZFRhYigpOwogICAgJHRoaXMtPl9pbl90YWIgID0gMDsKICAgIAogICAgaWYoaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pKQogICAgewogICAgICAkc21hcnR5LT5hc3NpZ24odHJpbSgkcGFyYW1zWydhc3NpZ24nXSksICRvdXQpOwogICAgICAKICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICByZXR1cm4gJG91dDsKICB9CiAgCiAgCiAgcHVibGljIGZ1bmN0aW9uIHh0X2ZpbGVwaWNrZXIoJHBhcmFtcywgJHNtYXJ0eSkKICB7CiAgICAvLyB0aGlzIGlzIGEgY29weSBvZiB0aGUgY21zX2ZpbGVwaWNrZXIgcGx1Z2luLCB3aXRoIG9uZSBjaGFuZ2UgdG8gZml4IGFuIGVycm9yIGVuY291bnRlcmVkIGluIDIuMgogICAgJHByb2ZpbGVfbmFtZSA9IHRyaW0oZ2V0X3BhcmFtZXRlcl92YWx1ZSgkcGFyYW1zLCAncHJvZmlsZScpKTsKICAgICRwcmVmaXggICAgICAgPSB0cmltKGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywgJ3ByZWZpeCcpKTsKICAgICRuYW1lICAgICAgICAgPSB0cmltKGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywgJ25hbWUnKSk7CiAgICAkdmFsdWUgICAgICAgID0gdHJpbShnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsICd2YWx1ZScpKTsKICAgICR0b3AgICAgICAgICAgPSB0cmltKGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywgJ3RvcCcpKTsKICAgICR0eXBlICAgICAgICAgPSB0cmltKGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywgJ3R5cGUnKSk7CiAgICAkcmVxdWlyZWQgICAgID0gY21zX3RvX2Jvb2woZ2V0X3BhcmFtZXRlcl92YWx1ZSgkcGFyYW1zLCAncmVxdWlyZWQnKSk7CiAgICBpZighJG5hbWUpCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgJG5hbWUgICAgICAgPSAkcHJlZml4IC4gJG5hbWU7CiAgICAkZmlsZXBpY2tlciA9IFxjbXNfdXRpbHM6OmdldF9maWxlcGlja2VyX21vZHVsZSgpOwogICAgaWYoISRmaWxlcGlja2VyKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgICRwcm9maWxlID0gJGZpbGVwaWNrZXItPmdldF9wcm9maWxlX29yX2RlZmF1bHQoJHByb2ZpbGVfbmFtZSk7CiAgICAkcGFybXMgICA9IFtdOwogICAgaWYoJHRvcCkKICAgIHsKICAgICAgJHBhcm1zWyd0b3AnXSA9ICR0b3A7CiAgICB9CiAgICBpZigkdHlwZSkKICAgIHsKICAgICAgJHBhcm1zWyd0eXBlJ10gPSAkdHlwZTsKICAgIH0KICAgIGlmKGNvdW50KCRwYXJtcykpCiAgICB7CiAgICAgICRwcm9maWxlID0gJHByb2ZpbGUtPm92ZXJyaWRlV2l0aCgkcGFybXMpOwogICAgfQogICAgCiAgICAvLyB0b2RvOiBzb21ldGhpbmcgd2l0aCByZXF1aXJlZC4KICAgICRvdXQgPSAkZmlsZXBpY2tlci0+Z2V0X2h0bWwoJG5hbWUsICR2YWx1ZSwgJHByb2ZpbGUsICRyZXF1aXJlZCk7CiAgICBpZihpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkpCiAgICB7CiAgICAgICR0ZW1wbGF0ZS0+YXNzaWduKCRwYXJhbXNbJ2Fzc2lnbiddLCAkb3V0KTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiB4dF9saXN0ZmlsZXMoJHBhcmFtcywgJHNtYXJ0eSkKICB7CiAgICAvLyRjb25maWcgPSAkdGhpcy0+bW9kLT5jb25maWc7CiAgICAkY29uZmlnID0gXENNU01TRXh0XGNvbmZpZzo6R2V0SW5zdGFuY2UoKTsKICAgICRkaXIgICAgPSAkY29uZmlnWyd1cGxvYWRzX3BhdGgnXTsKICAgIAogICAgJGFzc2lnbiAgICAgICAgID0geHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywgJ2Fzc2lnbicpOwogICAgJGV4Y2x1ZGVfcHJlZml4ID0geHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywgJ2V4Y2x1ZGVfcHJlZml4Jyk7CiAgICAkbWFzayAgICAgICAgICAgPSB4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCAnbWFzaycpOwogICAgJHRtcCAgICAgICAgICAgID0geHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywgJ2RpcicpOwogICAgaWYoJHRtcCkKICAgIHsKICAgICAgJHRtcCA9IGNtc19qb2luX3BhdGgoJGRpciwgJHRtcCk7CiAgICAgIGlmKGlzX2RpcigkdG1wKSkKICAgICAgewogICAgICAgICRkaXIgPSAkdG1wOwogICAgICB9CiAgICB9CiAgICAKICAgICRzdHIgICA9ICRkaXIgLiAnLycgLiAkbWFzazsKICAgICRmaWxlcyA9IGdsb2IoJHN0cik7CiAgICAkb3V0ICAgPSBOVUxMOwogICAgaWYoY291bnQoJGZpbGVzKSkKICAgIHsKICAgICAgJG91dCA9IFtdOwogICAgICBmb3JlYWNoKCRmaWxlcyBhcyAkZmlsZSkKICAgICAgewogICAgICAgIGlmKGlzX2RpcigkZmlsZSkpCiAgICAgICAgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgICRmbiA9IGJhc2VuYW1lKCRmaWxlKTsKICAgICAgICBpZihzdGFydHN3aXRoKCRmbiwgJy4nKSB8fCBzdGFydHN3aXRoKCRmbiwgJ18nKSkKICAgICAgICB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYoJGV4Y2x1ZGVfcHJlZml4ICYmIHN0YXJ0c3dpdGgoJGZuLCAkZXhjbHVkZV9wcmVmaXgpKQogICAgICAgIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkb3V0W10gPSAkZGlyIC4gJy8nIC4gJGJuOwogICAgICB9CiAgICB9CiAgICAKICAgIGlmKCRhc3NpZ24pCiAgICB7CiAgICAgICRzbWFydHktPmFzc2lnbigkYXNzaWduLCAkb3V0KTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiB4dF9maWxlX2xpc3QoJHBhcmFtcywgJHNtYXJ0eSkKICB7CiAgICAvLyRjb25maWcgICA9ICR0aGlzLT5tb2QtPmNvbmZpZzsKICAgICRjb25maWcgPSBcQ01TTVNFeHRcY29uZmlnOjpHZXRJbnN0YW5jZSgpOwogICAgJGRpciAgICAgID0gJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ107CiAgICAkbWF4ZGVwdGggPSAtMTsKICAgICRwYXR0ZXJuICA9ICcqJzsKICAgICRleGNsdWRlcyA9IGFycmF5KCdfKicsICcuPz8qJyk7CiAgICAkYWJzb2x1dGUgPSBGQUxTRTsKICAgICRvcHRpb25zICA9IEZBTFNFOwogICAgJHNlbGVjdGVkID0gTlVMTDsKICAgICRub3ZhbHVlICA9ICcnOwogICAgCiAgICAvLyBoYW5kbGUgdGhlIGRpciBwYXJhbQogICAgJHRtcCA9IHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsICdkaXInKTsKICAgIGlmKCR0bXApCiAgICB7CiAgICAgICR0bXAyID0gY21zX2pvaW5fcGF0aCgkZGlyLCAkdG1wKTsKICAgICAgaWYoaXNfZGlyKCR0bXAyKSkKICAgICAgewogICAgICAgICRkaXIgPSAkdG1wMjsKICAgICAgfQogICAgfQogICAgCiAgICAvLyBoYW5kbGUgdGhlIHBhdHRlcm4gcGFyYW0KICAgIGlmKGlzc2V0KCRwYXJhbXNbJ3BhdHRlcm4nXSkpCiAgICB7CiAgICAgICR0bXAgICAgID0gdHJpbSgkcGFyYW1zWydwYXR0ZXJuJ10pOwogICAgICAkcGF0dGVybiA9IGV4cGxvZGUoJ3x8JywgJHRtcCk7CiAgICB9CiAgICAKICAgIC8vIGhhbmRsZSB0aGUgZXhjbHVkZXMgcGFyYW0KICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2V4Y2x1ZGVzJ10pKQogICAgewogICAgICAkdG1wICAgICAgPSB0cmltKCRwYXJhbXNbJ2V4Y2x1ZGVzJ10pOwogICAgICAkZXhjbHVkZXMgPSBhcnJheV9tZXJnZSgkZXhjbHVkZXMsIGV4cGxvZGUoJ3x8JywgJHRtcCkpOwogICAgfQogICAgCiAgICAvLyBoYW5kbGUgdGhlIG1heGRlcHRoIHBhcmFtCiAgICBpZihpc3NldCgkcGFyYW1zWydtYXhkZXB0aCddKSkKICAgIHsKICAgICAgJHRtcCA9IChpbnQpJHBhcmFtc1snbWF4ZGVwdGgnXTsKICAgICAgaWYoJHRtcCA+IDApCiAgICAgIHsKICAgICAgICAkbWF4ZGVwdGggPSAkdG1wOwogICAgICB9CiAgICB9CiAgICAKICAgIC8vIGhhbmRsZSB0aGUgb3B0aW9ucyBwYXJhbQogICAgaWYoaXNzZXQoJHBhcmFtc1snb3B0aW9ucyddKSkKICAgIHsKICAgICAgJG9wdGlvbnMgPSB4dF91dGlsczo6dG9fYm9vbCgkcGFyYW1zWydvcHRpb25zJ10pOwogICAgfQogICAgCiAgICAvLyBoYW5kbGUgdGhlIHNlbGVjdGVkIHBhcmFtCiAgICBpZihpc3NldCgkcGFyYW1zWydzZWxlY3RlZCddKSkKICAgIHsKICAgICAgJG9wdGlvbnMgID0gVFJVRTsKICAgICAgJHNlbGVjdGVkID0gdHJpbSgkcGFyYW1zWydzZWxlY3RlZCddKTsKICAgIH0KICAgIAogICAgLy8gaGFuZGxlIHRoZSAnbm92YWx1ZScgcGFyYW0KICAgIGlmKGlzc2V0KCRwYXJhbXNbJ25vdmFsdWUnXSkpCiAgICB7CiAgICAgICRub3ZhbHVlID0gdHJpbSgkcGFyYW1zWydub3ZhbHVlJ10pOwogICAgfTsKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2Fic29sdXRlJ10pKQogICAgewogICAgICAkYWJzb2x1dGUgPSBjbXNfdG9fYm9vbCgkcGFyYW1zWydhYnNvbHV0ZSddKTsKICAgIH0KICAgIAogICAgJGZpbGVzID0gXHh0X2Rpcjo6cmVjdXJzaXZlX2dsb2IoJGRpciwgJHBhdHRlcm4sICdGSUxFUycsICRleGNsdWRlcywgJG1heGRlcHRoKTsKICAgICRvdXQgICA9IE5VTEw7CiAgICBpZihjb3VudCgkZmlsZXMpKQogICAgewogICAgICAkb3V0ID0gW107CiAgICAgIGZvcmVhY2goJGZpbGVzIGFzICRvbmUpCiAgICAgIHsKICAgICAgICBpZigkYWJzb2x1dGUpCiAgICAgICAgewogICAgICAgICAgJG91dFskb25lXSA9ICRvbmU7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAkb25lID0gc3Vic3RyKCRvbmUsIHN0cmxlbigkZGlyKSk7CiAgICAgICAgICBpZihzdGFydHN3aXRoKCRvbmUsICcvJykpCiAgICAgICAgICB7CiAgICAgICAgICAgICRvbmUgPSBzdWJzdHIoJG9uZSwgMSk7CiAgICAgICAgICB9CiAgICAgICAgICAkb3V0WyRvbmVdID0gJG9uZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIGlmKCRvcHRpb25zKQogICAgICB7CiAgICAgICAgJHRtcCA9ICRvdXQ7CiAgICAgICAgJG91dCA9ICcnOwogICAgICAgIGlmKCRub3ZhbHVlICE9ICcnKQogICAgICAgIHsKICAgICAgICAgICRvdXQgLj0gIjxvcHRpb24gdmFsdWU9XCJcIj4iIC4gJG5vdmFsdWUgLiAiPC9vcHRpb24+IjsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCgkdG1wIGFzICRrID0+ICR2KQogICAgICAgIHsKICAgICAgICAgIGlmKCRrID09ICRzZWxlY3RlZCkKICAgICAgICAgIHsKICAgICAgICAgICAgJG91dCAuPSAiPG9wdGlvbiBzZWxlY3RlZD1cInNlbGVjdGVkXCIgdmFsdWU9XCIka1wiPiR2PC9vcHRpb24+IjsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgJG91dCAuPSAiPG9wdGlvbiB2YWx1ZT1cIiRrXCI+JHY8L29wdGlvbj4iOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgCiAgICBpZihpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkpCiAgICB7CiAgICAgICRzbWFydHktPmFzc2lnbih0cmltKCRwYXJhbXNbJ2Fzc2lnbiddKSwgJG91dCk7CiAgICAgIAogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIHJldHVybiAkb3V0OwogIH0KICAKICAKICBwdWJsaWMgZnVuY3Rpb24geHRfaW1hZ2VfbGlzdCgkcGFyYW1zLCAkc21hcnR5KQogIHsKICAgIC8vJGNvbmZpZyAgID0gJHRoaXMtPm1vZC0+Y29uZmlnOwogICAgJGNvbmZpZyA9IFxDTVNNU0V4dFxjb25maWc6OkdldEluc3RhbmNlKCk7CiAgICAkZGlyICAgICAgPSAkY29uZmlnWyd1cGxvYWRzX3BhdGgnXTsKICAgICRtYXhkZXB0aCA9IC0xOwogICAgJHBhdHRlcm4gID0gYXJyYXkoJyouanBnJywgJyouanBlZycsICcqLmJtcCcsICcqLmdpZicsICcqLnBuZycsICcqLmljbycsICcqLnN2ZycsICcqLndlYnAnKTsKICAgICRleGNsdWRlcyA9IGFycmF5KCdfKicsICcuPz8qJyk7CiAgICAkYWJzb2x1dGUgPSBGQUxTRTsKICAgICR0aHVtYnMgICA9IEZBTFNFOwogICAgJG9wdGlvbnMgID0gRkFMU0U7CiAgICAkc2VsZWN0ZWQgPSBOVUxMOwogICAgJG5vdmFsdWUgID0gJyc7CiAgICAKICAgIC8vIGhhbmRsZSB0aGUgZGlyIHBhcmFtCiAgICAkdG1wID0geHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywgJ2RpcicpOwogICAgaWYoJHRtcCkKICAgIHsKICAgICAgJHRtcDIgPSBjbXNfam9pbl9wYXRoKCRjb25maWdbJ3VwbG9hZHNfcGF0aCddLCAkdG1wKTsKICAgICAgaWYoaXNfZGlyKCR0bXAyKSkKICAgICAgewogICAgICAgICRkaXIgPSAkdG1wMjsKICAgICAgfQogICAgfQogICAgCiAgICAvLyBoYW5kbGUgdGhlIGV4dGVuc2lvbnMgcGFyYW0KICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2V4dGVuc2lvbnMnXSkpCiAgICB7CiAgICAgICR0bXAgICAgID0gdHJpbSgkcGFyYW1zWydleHRlbnNpb25zJ10pOwogICAgICAkcGF0dGVybiA9IGV4cGxvZGUoJ3x8JywgJHRtcCk7CiAgICB9CiAgICAKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ3RodW1icyddKSkKICAgIHsKICAgICAgJHRodW1icyA9IGNtc190b19ib29sKCRwYXJhbXNbJ3RodW1icyddKTsKICAgIH0KICAgIAogICAgLy8gaGFuZGxlIHRoZSBleGNsdWRlcyBwYXJhbQogICAgaWYoaXNzZXQoJHBhcmFtc1snZXhjbHVkZXMnXSkpCiAgICB7CiAgICAgICR0bXAgICAgICA9IHRyaW0oJHBhcmFtc1snZXhjbHVkZXMnXSk7CiAgICAgICRleGNsdWRlcyA9IGFycmF5X21lcmdlKCRleGNsdWRlcywgZXhwbG9kZSgnfHwnLCAkdG1wKSk7CiAgICB9CiAgICAKICAgIC8vIGhhbmRsZSB0aGUgbWF4ZGVwdGggcGFyYW0KICAgIGlmKGlzc2V0KCRwYXJhbXNbJ21heGRlcHRoJ10pKQogICAgewogICAgICAkdG1wID0gKGludCkkcGFyYW1zWydtYXhkZXB0aCddOwogICAgICBpZigkdG1wID4gMCkKICAgICAgewogICAgICAgICRtYXhkZXB0aCA9ICR0bXA7CiAgICAgIH0KICAgIH0KICAgIAogICAgaWYoaXNzZXQoJHBhcmFtc1snYWJzb2x1dGUnXSkpCiAgICB7CiAgICAgICRhYnNvbHV0ZSA9IGNtc190b19ib29sKCRwYXJhbXNbJ2Fic29sdXRlJ10pOwogICAgfQogICAgCiAgICAvLyBoYW5kbGUgdGhlIG9wdGlvbnMgcGFyYW0KICAgIGlmKGlzc2V0KCRwYXJhbXNbJ29wdGlvbnMnXSkpCiAgICB7CiAgICAgICRvcHRpb25zID0gY21zX3RvX2Jvb2woJHBhcmFtc1snb3B0aW9ucyddKTsKICAgIH0KICAgIAogICAgLy8gaGFuZGxlIHRoZSBzZWxlY3RlZCBwYXJhbQogICAgaWYoaXNzZXQoJHBhcmFtc1snc2VsZWN0ZWQnXSkpCiAgICB7CiAgICAgICRvcHRpb25zICA9IFRSVUU7CiAgICAgICRzZWxlY3RlZCA9IHRyaW0oJHBhcmFtc1snc2VsZWN0ZWQnXSk7CiAgICB9CiAgICAKICAgIC8vIGhhbmRsZSB0aGUgJ25vdmFsdWUnIHBhcmFtCiAgICBpZihpc3NldCgkcGFyYW1zWydub3ZhbHVlJ10pKQogICAgewogICAgICAkbm92YWx1ZSA9IHRyaW0oJHBhcmFtc1snbm92YWx1ZSddKTsKICAgIH07CiAgICBpZighJHRodW1icykKICAgIHsKICAgICAgJGV4Y2x1ZGVzW10gPSAndGh1bWJfKic7CiAgICB9CiAgICAKICAgICRmaWxlcyA9IFx4dF9kaXI6OnJlY3Vyc2l2ZV9nbG9iKCRkaXIsICRwYXR0ZXJuLCAnRklMRVMnLCAkZXhjbHVkZXMsICRtYXhkZXB0aCk7CiAgICAkb3V0ICAgPSBOVUxMOwogICAgCiAgICBpZihjb3VudCgkZmlsZXMpKQogICAgewogICAgICAkb3V0ID0gW107CiAgICAgIGZvcmVhY2goJGZpbGVzIGFzICRvbmUpCiAgICAgIHsKICAgICAgICBpZigkYWJzb2x1dGUpCiAgICAgICAgewogICAgICAgICAgJG91dFskb25lXSA9ICRvbmU7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAkb25lID0gc3Vic3RyKCRvbmUsIHN0cmxlbigkZGlyKSk7CiAgICAgICAgICBpZihzdGFydHN3aXRoKCRvbmUsICcvJykpCiAgICAgICAgICB7CiAgICAgICAgICAgICRvbmUgPSBzdWJzdHIoJG9uZSwgMSk7CiAgICAgICAgICB9CiAgICAgICAgICAkb3V0WyRvbmVdID0gJG9uZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIGlmKCRvcHRpb25zKQogICAgICB7CiAgICAgICAgJHRtcCA9ICRvdXQ7CiAgICAgICAgJG91dCA9ICcnOwogICAgICAgIGlmKCRub3ZhbHVlICE9ICcnKQogICAgICAgIHsKICAgICAgICAgICRvdXQgLj0gIjxvcHRpb24gdmFsdWU9XCJcIj4iIC4gJG5vdmFsdWUgLiAiPC9vcHRpb24+IjsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCgkdG1wIGFzICRrID0+ICR2KQogICAgICAgIHsKICAgICAgICAgIGlmKCRrID09ICRzZWxlY3RlZCkKICAgICAgICAgIHsKICAgICAgICAgICAgJG91dCAuPSAiPG9wdGlvbiBzZWxlY3RlZD1cInNlbGVjdGVkXCIgdmFsdWU9XCIka1wiPiR2PC9vcHRpb24+IjsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgJG91dCAuPSAiPG9wdGlvbiB2YWx1ZT1cIiRrXCI+JHY8L29wdGlvbj4iOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgCiAgICBpZihpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkpCiAgICB7CiAgICAgICRzbWFydHktPmFzc2lnbih0cmltKCRwYXJhbXNbJ2Fzc2lnbiddKSwgJG91dCk7CiAgICAgIAogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIHJldHVybiAkb3V0OwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24geHRfY29udGVudF90eXBlKCRwYXJhbXMsICRzbWFydHkpCiAgewogICAgJHR5cGUgPSB4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCAndHlwZScpOwogICAgaWYoJHR5cGUpCiAgICB7CiAgICAgICR0aGlzLT5tb2QtPmNtcy0+c2V0X2NvbnRlbnRfdHlwZSgkdHlwZSk7CiAgICB9CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiB4dF9jYWNoZWRfdXJsKCRwYXJhbXMsICRzbWFydHkpCiAgewogICAgJHVybCAgPSBcZ2V0X3BhcmFtZXRlcl92YWx1ZSgkcGFyYW1zLCAndXJsJyk7CiAgICAkdGltZSA9IFxnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsICd0aW1lJywgMTIwKTsKICAgIAogICAgJG9iaiA9IG5ldyBceHRfY2FjaGVkX3JlbW90ZV9maWxlKCR1cmwsICR0aW1lKTsKICAgICRvdXQgPSAkb2JqLT5maWxlX2dldF9jb250ZW50cygpOwogICAgaWYoaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pKQogICAgewogICAgICAkc21hcnR5LT5hc3NpZ24oJHBhcmFtc1snYXNzaWduJ10sICRvdXQpOwogICAgICAKICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICByZXR1cm4gJG91dDsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHh0X21lc3NhZ2UoJHBhcmFtcywgJHNtYXJ0eSkKICB7CiAgICAka2V5ID0gZ2V0X3BhcmFtZXRlcl92YWx1ZSgkcGFyYW1zLCAna2V5Jyk7CiAgICBpZigka2V5KQogICAgewogICAgICBpZihpc3NldCgkcGFyYW1zWyd2YWx1ZSddKSkKICAgICAgewogICAgICAgICR2YWwgPSB0cmltKCRwYXJhbXNbJ3ZhbHVlJ10pOwogICAgICAgIFx4dF9tZXNzYWdlOjpzZXQoJGtleSwgJHZhbCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgJHZhbCA9IFx4dF9tZXNzYWdlOjpnZXQoJGtleSk7CiAgICAgICAgaWYoaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pKQogICAgICAgIHsKICAgICAgICAgICRzbWFydHktPmFzc2lnbigkcGFyYW1zWydhc3NpZ24nXSwgJHZhbCk7CiAgICAgICAgICAKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuICR2YWw7CiAgICAgIH0KICAgIH0KICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHh0anNfcmVxdWlyZSgkcGFyYW1zLCAkc21hcnR5KQogIHsKICAgICRsaWIgICAgICA9IFx0cmltKChzdHJpbmcpeHRfdXRpbHM6OmdldF9wYXJhbSgkcGFyYW1zLCAnbGliJykpOwogICAgJGNzc25hbWUgID0gXHRyaW0oKHN0cmluZyl4dF91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsICdjc3NuYW1lJykpOwogICAgJGNzc2ZpbGUgID0gXHRyaW0oKHN0cmluZyl4dF91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsICdjc3NmaWxlJykpOwogICAgJGNzc3VybCAgID0gXHRyaW0oKHN0cmluZyl4dF91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsICdjc3N1cmwnKSk7CiAgICAkanNmaWxlICAgPSBcdHJpbSgoc3RyaW5nKXh0X3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywgJ2pzZmlsZScpKTsKICAgICRqc3VybCAgICA9IFx0cmltKChzdHJpbmcpeHRfdXRpbHM6OmdldF9wYXJhbSgkcGFyYW1zLCAnanN1cmwnKSk7CiAgICAkZGVwZW5kcyAgPSB4dF91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsICdkZXBlbmRzJyk7CiAgICAkbm9taW5pZnkgPSB4dF9wYXJhbTo6Z2V0X2Jvb2woJHBhcmFtcywgJ25vbWluaWZ5JywgRkFMU0UpOwogICAgJGtleSAgICAgID0geHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywgJ2tleScpOwogICAgCiAgICAkanNsb2FkZXIgPSAkdGhpcy0+bW9kLT5nZXRfanNsb2FkZXIoJGtleSk7CiAgICBpZigkbGliKQogICAgewogICAgICAkanNsb2FkZXItPnJlcXVpcmVfbGliKCRsaWIsICRub21pbmlmeSk7CiAgICB9CiAgICBlbHNlIGlmKCRqc2ZpbGUpCiAgICB7CiAgICAgICRqc2xvYWRlci0+YWRkX2pzZmlsZSgkanNmaWxlLCAkZGVwZW5kcywgJG5vbWluaWZ5KTsKICAgIH0KICAgIGVsc2UgaWYoJGpzdXJsKQogICAgewogICAgICAkanNsb2FkZXItPmFkZF9qc2V4dCgkanN1cmwsICRub21pbmlmeSk7CiAgICB9CiAgICBlbHNlIGlmKCRjc3NmaWxlKQogICAgewogICAgICAkanNsb2FkZXItPmFkZF9jc3NmaWxlKCRjc3NmaWxlLCAkZGVwZW5kcywgJG5vbWluaWZ5KTsKICAgIH0KICAgIGVsc2UgaWYoJGNzc25hbWUpCiAgICB7CiAgICAgICRqc2xvYWRlci0+cmVxdWlyZV9jc3MoJGNzc25hbWUsICRkZXBlbmRzLCAkbm9taW5pZnkpOwogICAgfQogICAgZWxzZSBpZigkY3NzdXJsKQogICAgewogICAgICAkanNsb2FkZXItPmFkZF9jc3NleHQoJGNzc3VybCwgJG5vbWluaWZ5KTsKICAgIH0KICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHh0anNfYWRkKCRwYXJhbXMsICRjb250ZW50LCAkc21hcnR5LCAkcmVwZWF0KQogIHsKICAgIGlmKCRjb250ZW50ID09ICcnKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAkZGVwZW5kcyAgPSB4dF91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsICdkZXBlbmRzJyk7CiAgICAkbm9taW5pZnkgPSB4dF9wYXJhbTo6Z2V0X2Jvb2woJHBhcmFtcywgJ25vbWluaWZ5Jyk7CiAgICAkYXBwZW5kICAgPSB4dF9wYXJhbTo6Z2V0X2Jvb2woJHBhcmFtcywgJ2FwcGVuZCcpOwogICAgJGtleSAgICAgID0geHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywgJ2tleScpOwogICAgJGpzbG9hZGVyID0gJHRoaXMtPm1vZC0+Z2V0X2pzbG9hZGVyKCRrZXkpOwogICAgJGpzbG9hZGVyLT5hZGRfanMoJGNvbnRlbnQsICRkZXBlbmRzLCAkbm9taW5pZnksICRhcHBlbmQpOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24geHRjc3NfYWRkKCRwYXJhbXMsICRjb250ZW50LCAkc21hcnR5LCAkcmVwZWF0KQogIHsKICAgIGlmKCRjb250ZW50ID09ICcnKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAkZGVwZW5kcyAgPSB4dF91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsICdkZXBlbmRzJyk7CiAgICAkbm9taW5pZnkgPSB4dF9wYXJhbTo6Z2V0X2Jvb2woJHBhcmFtcywgJ25vbWluaWZ5Jyk7CiAgICAkYXBwZW5kICAgPSB4dF9wYXJhbTo6Z2V0X2Jvb2woJHBhcmFtcywgJ2FwcGVuZCcpOwogICAgJGtleSAgICAgID0geHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywgJ2tleScpOwogICAgJGpzbG9hZGVyID0gJHRoaXMtPm1vZC0+Z2V0X2pzbG9hZGVyKCRrZXkpOwogICAgJGpzbG9hZGVyLT5hZGRfY3NzKCRjb250ZW50LCAkZGVwZW5kcywgJG5vbWluaWZ5LCAkYXBwZW5kKTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHh0anNfcmVuZGVyKCRwYXJhbXMsICRzbWFydHkpCiAgewogICAgJGtleSAgICAgID0geHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywgJ2tleScpOwogICAgJGpzbG9hZGVyID0gJHRoaXMtPm1vZC0+Z2V0X2pzbG9hZGVyKCRrZXkpOwogICAgJG91dCAgICAgID0gJGpzbG9hZGVyLT5yZW5kZXIoJHBhcmFtcyk7CiAgICAKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSkKICAgIHsKICAgICAgJHNtYXJ0eS0+YXNzaWduKCRwYXJhbXNbJ2Fzc2lnbiddLCAkb3V0KTsKICAgICAgCiAgICAgIHJldHVybiAnJzsKICAgIH0KICAgIAogICAgcmV0dXJuICRvdXQ7CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiB4dF9wYWdlb3B0aW9ucygkcGFyYW1zLCAkc21hcnR5KQogIHsKICAgICR2YWx1ZSA9IFx0cmltKHh0X3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywgJ3ZhbHVlJykpOwogICAgJGN1cnJlbnQgPSBcdHJpbSh4dF91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsICdzZWxlY3RlZCcpKTsKICAgICRub25lICAgID0geHRfdXRpbHM6OnRvX2Jvb2woeHRfdXRpbHM6OmdldF9wYXJhbSgkcGFyYW1zLCAnbm9uZScpKTsKICAgIAogICAgJHBhcmFtc1snY3VycmVudCddID0gJGN1cnJlbnQ7CiAgICB1bnNldCgkcGFyYW1zWyd2YWx1ZSddLCAkcGFyYW1zWydzZWxlY3RlZCddLCAkcGFyYW1zWydub25lJ10pOwogICAgCiAgICAkdG1wID0gTlVMTDsKICAgIGlmKCRub25lKQogICAgewogICAgICAkdG1wIC49ICc8b3B0aW9uIHZhbHVlPSIiPicgLiAkdGhpcy0+bW9kLT5MYW5nKCdub25lJykgLiAnPC9vcHRpb24+JzsKICAgICAgJHRtcCAuPSAnPG9wdGlvbiBkaXNhYmxlZD0iZGlzYWJsZWQiPi0tLTwvb3B0aW9uPic7CiAgICB9CiAgICAkYnVpbGRlciA9ICR0aGlzLT5tb2QtPmdldF9jb250ZW50X2xpc3RfYnVpbGRlcigpOwogICAgJHRtcCAgICAgLj0gJGJ1aWxkZXItPmdldF9vcHRpb25zKCk7CiAgICAKICAgIHJldHVybiAkdG1wOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24geHRfZm9ybV9jc3JmKCRwYXJhbXMsICRzbWFydHkpCiAgewogICAgJGFzc2lnbiA9IHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsICdhc3NpZ24nKTsKICAgICRvdXQgICAgPSB4dF91dGlsczo6Y3JlYXRlX2NzcmZfaW5wdXRzKCk7CiAgICBpZigkYXNzaWduKQogICAgewogICAgICAkc21hcnR5LT5hc3NpZ24oJGFzc2lnbiwgJG91dCk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIHJldHVybiAkb3V0OwogICAgfQogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24geHRfZmlsZV9saW5rKCRwYXJhbXMsICRzbWFydHkpCiAgewogICAgJGZpbmRfbG9jYWxfZmlsZSA9IGZ1bmN0aW9uKCRpbil7CiAgICAgICRpbiA9IFx0cmltKCRpbik7CiAgICAgIGlmKCEkaW4pIHsgcmV0dXJuICcnOyB9CiAgICAgIAogICAgICAkY29uZmlnID0gXENNU01TRXh0XGNvbmZpZzo6R2V0SW5zdGFuY2UoKTsKICAgICAgCiAgICAgIC8vIGlmIGl0IGlzIGEgdXJsCiAgICAgIC8vICAgaWYgaXQgaXMgcmVsYXRpdmUgdG8gdGhlIHJvb3QgdXJsCiAgICAgIC8vICAgaWYgaXQgaXMgcmVsYXRpdmUgdG8gdGhlIHVwbG9hZHMgdXJsCiAgICAgIGlmKFxzdGFydHN3aXRoKCRpbiwgJy8vJykpCiAgICAgIHsKICAgICAgICAkaW4gPSBcc3RyX3JlcGxhY2UoJy8vJywgQ01TX1JPT1RfVVJMLCAkaW4pOwogICAgICB9CiAgICAgIAogICAgICBpZihcc3RhcnRzd2l0aCgkaW4sICdodHRwJykpCiAgICAgIHsKICAgICAgICBpZihcc3RhcnRzd2l0aCgkaW4sIENNU19ST09UX1VSTCkpCiAgICAgICAgewogICAgICAgICAgJHRlc3QgPSBcc3RyX3JlcGxhY2UoQ01TX1JPT1RfVVJMLCBDTVNfUk9PVF9QQVRILCAkaW4pOwogICAgICAgICAgJHRlc3QgPSBccmVhbHBhdGgoJHRlc3QpOwogICAgICAgICAgCiAgICAgICAgICBpZihcaXNfZmlsZSgkdGVzdCkpIHsgcmV0dXJuICR0ZXN0OyB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgICR0ZXN0ID0gXHJlYWxwYXRoKCRjb25maWdbJ2ltYWdlX3VwbG9hZHNfcGF0aCddIC4gJy8nIC4gJGluKTsKICAgICAgICAKICAgICAgICBpZihcaXNfZmlsZSgkdGVzdCkpIHsgcmV0dXJuICR0ZXN0OyB9CiAgICAgICAgCiAgICAgICAgJHRlc3QgPSBccmVhbHBhdGgoJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ10gLiAnLycgLiAkaW4pOwogICAgICAgIAogICAgICAgIGlmKFxpc19maWxlKCR0ZXN0KSkgeyByZXR1cm4gJHRlc3Q7IH0KICAgICAgICAKICAgICAgICAkdGVzdCA9IFxyZWFscGF0aChcQ01TX1JPT1RfUEFUSCAuICcvJyAuICRpbik7CiAgICAgICAgCiAgICAgICAgaWYoXGlzX2ZpbGUoJHRlc3QpKSB7IHJldHVybiAkdGVzdDsgfQogICAgICB9CiAgICB9OwogICAgCiAgICAvLyBhY2NlcHRzIGFuIGlucHV0IGFic29sdXRlIGZpbGUgdXJsCiAgICAvLyBnZXQgdGhlIG1pbWUgdHlwZQogICAgLy8gZWl0aGVyIGZvcmNlIGRvd25sb2FkLCBvciBsaW5rIHRvIHRoZSBhY3R1YWwgb2JqZWN0LgogICAgCiAgICAkZG9fZG93bmxvYWQgPSAkdXJsb25seSA9ICRvdXQgPSBOVUxMOwogICAgJHRodW1ibmFpbCAgID0gVFJVRTsKICAgICRwYWdlICAgICAgICA9IChpbnQpJHRoaXMtPm1vZC0+Y21zLT5HZXRDb250ZW50T3BlcmF0aW9ucygpLT5HZXREZWZhdWx0Q29udGVudCgpOwogICAgJGluICAgICAgICAgID0geHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywgJ2knKTsKICAgICRpbiAgICAgICAgICA9IHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsICdmJywgJGluKTsKICAgICRpbiAgICAgICAgICA9IHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsICdpbicsICRpbik7CiAgICAkaW4gICAgICAgICAgPSB4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCAnZmlsZScsICRpbik7CiAgICAkZGwgICAgICAgICAgPSB4dF9wYXJhbTo6Z2V0X2Jvb2woJHBhcmFtcywgJ2RsJyk7CiAgICAkZGwgICAgICAgICAgPSB4dF9wYXJhbTo6Z2V0X2Jvb2woJHBhcmFtcywgJ2Rvd25sb2FkJywgJGRsKTsKICAgICR0YXJnZXQgICAgICA9IHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsICd0YXJnZXQnKTsKICAgIAogICAgaWYoKCR0bXAgPSB4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCAncGFnZScpKSkKICAgIHsKICAgICAgJHBhZ2UgPSAkdGhpcy0+bW9kLT5yZXNvbHZlX2FsaWFzX29yX2lkKCR0bXAsICRwYWdlKTsKICAgIH0KICAgICR1cmxvbmx5ICAgPSB4dF9wYXJhbTo6Z2V0X2Jvb2woJHBhcmFtcywgJ3VybG9ubHknKTsKICAgICR0aHVtYm5haWwgPSB4dF9wYXJhbTo6Z2V0X2Jvb2woJHBhcmFtcywgJ3RodW1ibmFpbCcsICR0aHVtYm5haWwpOwogICAgCiAgICAvLyBjb252ZXJ0ICRpbiBpbnRvIHNvbWV0aGluZyB0aGF0IGV4aXN0cy4KICAgICRpbiA9ICRmaW5kX2xvY2FsX2ZpbGUoJGluKTsKICAgIGlmKCRpbiAmJiBcaXNfZmlsZSgkaW4pKQogICAgewogICAgICAkaXNfaW1hZ2UgID0gRkFMU0U7CiAgICAgICRtaW1lX3R5cGUgPSB4dF91dGlsczo6Z2V0X21pbWVfdHlwZSgkaW4pOwogICAgICBpZihcc3RhcnRzd2l0aCgkbWltZV90eXBlLCAnaW1hZ2UvJykpCiAgICAgIHsKICAgICAgICAkaXNfaW1hZ2UgPSBUUlVFOwogICAgICB9CiAgICAgICRkb19kb3dubG9hZCA9IChpbnQpKCRkbCB8fCAhJGlzX2ltYWdlKTsKICAgICAgCiAgICAgICR1cmwgPSB4dF91dGlsczo6Z2V0X29iZnVzY2F0ZWRfZmlsZV91cmwoJHBhZ2UsICRpbiwgJGRvX2Rvd25sb2FkKTsKICAgICAgaWYoJHVybG9ubHkpCiAgICAgIHsKICAgICAgICAkb3V0ID0gJHVybDsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICAkYm4gPSBcYmFzZW5hbWUoJGluKTsKICAgICAgICAKICAgICAgICAkb3V0ID0gXHNwcmludGYoIjxhIGhyZWY9XCIlc1wiIiwgJHVybCk7CiAgICAgICAgaWYoJHRhcmdldCkKICAgICAgICB7CiAgICAgICAgICAkb3V0IC49IFxzcHJpbnRmKCIgdGFyZ2V0PVwiJXNcIiIsICR0YXJnZXQpOwogICAgICAgIH0KICAgICAgICAkb3V0IC49ICc+JzsKICAgICAgICBpZigkaXNfaW1hZ2UgJiYgJHRodW1ibmFpbCkKICAgICAgICB7CiAgICAgICAgICAkdGh1bWJuYWlsX3VybCA9IE5VTEw7CiAgICAgICAgICAkdGh1bWJuYWlsX2ZpbGUgPSB4dF91dGlsczo6ZmluZF9pbWFnZV90aHVtYm5haWwoJGluKTsKICAgICAgICAgIGlmKCEkdGh1bWJuYWlsX2ZpbGUpCiAgICAgICAgICB7CiAgICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgJHRodW1ibmFpbF9maWxlID0geHRfdXRpbHM6OmNyZWF0ZV9pbWFnZV90aHVtYm5haWwoJGluKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaChcUnVudGltZUV4Y2VwdGlvbiAkZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIFxhdWRpdCgnJywgJ0NNU01TRXh0JywgJ0NvdWxkIG5vdCBjcmVhdGUgdGh1bWJuYWlsIGZyb20gJyAuICRpbik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmKCEkdGh1bWJuYWlsX2ZpbGUpCiAgICAgICAgICB7CiAgICAgICAgICAgICRvdXQgLj0gJGJuOwogICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgewogICAgICAgICAgICAvLyR0aHVtYm5haWxfdXJsID0geHRfdXRpbHM6OmZpbGVfdG9fdXJsKCAkdGh1bWJuYWlsX2ZpbGUgKTsKICAgICAgICAgICAgJHRodW1ibmFpbF91cmwgPSB4dF91dGlsczo6Z2V0X29iZnVzY2F0ZWRfZmlsZV91cmwoJHBhZ2UsICR0aHVtYm5haWxfZmlsZSwgRkFMU0UpOwogICAgICAgICAgICAkaW1nICAgICAgICAgICA9IFxzcHJpbnRmKCc8aW1nIHNyYz0iJXMiIGFsdD0iJXMiLz4nLCAkdGh1bWJuYWlsX3VybCwgJGJuKTsKICAgICAgICAgICAgJG91dCAgICAgICAgICAgLj0gJGltZzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICRvdXQgLj0gJGJuOwogICAgICAgIH0KICAgICAgICBpZigkb3V0KQogICAgICAgIHsKICAgICAgICAgICRvdXQgLj0gJzwvYT4nOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgCiAgICAkYXNzaWduID0geHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywgJ2Fzc2lnbicpOwogICAgaWYoJGFzc2lnbikKICAgIHsKICAgICAgJHNtYXJ0eS0+YXNzaWduKCRhc3NpZ24sICRvdXQpOwogICAgICAKICAgICAgcmV0dXJuICcnOwogICAgfQogICAgCiAgICByZXR1cm4gJG91dDsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHh0X2h0bWxfb3B0aW9ucyhhcnJheSAkcGFyYW1zLCAkdGVtcGxhdGUpCiAgewogICAgJHRyYW5zZm9ybV9oYXNoID0gZnVuY3Rpb24oYXJyYXkgJGluKXsKICAgICAgJG91dCA9IFtdOwogICAgICBmb3JlYWNoKCRpbiBhcyAka2V5ID0+ICR2YWwpCiAgICAgIHsKICAgICAgICAkb3V0W10gPSBbJ3ZhbHVlJyA9PiAka2V5LCAnbGFiZWwnID0+ICR2YWxdOwogICAgICB9CiAgICAgIAogICAgICByZXR1cm4gJG91dDsKICAgIH07CiAgICAKICAgICRvcHRpb25zICA9IHh0X3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywgJ29wdGlvbnMnKTsKICAgICRzZWxlY3RlZCA9IHh0X3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywgJ3NlbGVjdGVkJyk7CiAgICAkYXNzaWduICAgPSB4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCAnYXNzaWduJyk7CiAgICAKICAgICRvdXQgPSBOVUxMOwogICAgaWYoXGlzX2FycmF5KCRvcHRpb25zKSkKICAgIHsKICAgICAgaWYoIVxpc19hcnJheSgkc2VsZWN0ZWQpKQogICAgICB7CiAgICAgICAgJHNlbGVjdGVkID0gWyhzdHJpbmcpJHNlbGVjdGVkXTsKICAgICAgfQogICAgICAKICAgICAgLy8gdHJhbnNmb3JtIGEgc2ltcGxlIGtleS92YWx1ZSBoYXNoIGludG8gYW4gYXJyYXkgb2YgWydsYWJlbCcgYW5kICd2YWx1ZScgcGFpcnNdCiAgICAgIGlmKHh0X2FycmF5Ojppc19oYXNoKCRvcHRpb25zKSkKICAgICAgewogICAgICAgICRvcHRpb25zID0gJHRyYW5zZm9ybV9oYXNoKCRvcHRpb25zKTsKICAgICAgfQogICAgICAKICAgICAgZm9yZWFjaCgkb3B0aW9ucyBhcyAkcmVjKQogICAgICB7CiAgICAgICAgaWYoIFxpc19zY2FsYXIoJHJlYykgKSB7IGNvbnRpbnVlOyB9CiAgICAgICAgJHZhbHVlID0gKCFlbXB0eSgkcmVjWyd2YWx1ZSddKSkgPyBcdHJpbSgoc3RyaW5nKSRyZWNbJ3ZhbHVlJ10pIDogJyc7CiAgICAgICAgJHRleHQgID0gKCFlbXB0eSgkcmVjWydsYWJlbCddKSkgPyBcdHJpbSgoc3RyaW5nKSRyZWNbJ2xhYmVsJ10pIDogJyc7CiAgICAgICAgCiAgICAgICAgJHN0ciA9ICc8b3B0aW9uIHZhbHVlPSInIC4gXGh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlKSAuICciJzsKICAgICAgICBpZigoJGNsYXNzID0geHRfcGFyYW06OmdldF9zdHJpbmcoJHJlYywgJ2NsYXNzJykpKQogICAgICAgIHsKICAgICAgICAgICRzdHIgLj0gJyBjbGFzcz0iJyAuIFxodG1sc3BlY2lhbGNoYXJzKCRjbGFzcykgLiAnIic7CiAgICAgICAgfQogICAgICAgIGlmKCgkaWQgPSB4dF9wYXJhbTo6Z2V0X3N0cmluZygkcmVjLCAnaWQnKSkpCiAgICAgICAgewogICAgICAgICAgJHN0ciAuPSAnIGlkPSInIC4gXGh0bWxzcGVjaWFsY2hhcnMoJGlkKSAuICciJzsKICAgICAgICB9CiAgICAgICAgaWYoeHRfcGFyYW06OmdldF9ib29sKCRyZWMsICdkaXNhYmxlZCcpKQogICAgICAgIHsKICAgICAgICAgICRzdHIgLj0gJyBkaXNhYmxlZCc7CiAgICAgICAgfQogICAgICAgIGlmKFxpbl9hcnJheSgkdmFsdWUsICRzZWxlY3RlZCkgfHwgeHRfcGFyYW06OmdldF9ib29sKCRyZWMsICdzZWxlY3RlZCcpKQogICAgICAgIHsKICAgICAgICAgICRzdHIgLj0gJyBzZWxlY3RlZCc7CiAgICAgICAgfQogICAgICAgICRzdHIgLj0gJz4nIC4gXGh0bWxzcGVjaWFsY2hhcnMoJHRleHQpIC4gJzwvb3B0aW9uPic7CiAgICAgICAgJG91dCAuPSAkc3RyOwogICAgICB9CiAgICB9CiAgICAKICAgIGlmKCRhc3NpZ24pCiAgICB7CiAgICAgICR0ZW1wbGF0ZS0+YXNzaWduKCRhc3NpZ24sICRvdXQpOwogICAgICAKICAgICAgcmV0dXJuICcnOwogICAgfQogICAgCiAgICByZXR1cm4gJG91dDsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHh0X2Nvb2tpZV9zZXQoYXJyYXkgJHBhcmFtcywgJHRlbXBsYXRlKQogIHsKICAgICRuYW1lICAgICA9IHh0X3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywgJ25hbWUnKTsKICAgICR2YWx1ZSAgICA9IHh0X3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywgJ3ZhbHVlJyk7CiAgICAkZXhwaXJlICAgPSB4dF9wYXJhbTo6Z2V0X2ludCgkcGFyYW1zLCAnZXhwaXJlJyk7CiAgICAkcGF0aCAgICAgPSB4dF91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsICdwYXRoJyk7CiAgICAkZG9tYWluICAgPSB4dF91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsICdkb21haW4nKTsKICAgICRzZWN1cmUgICA9IHh0X3BhcmFtOjpnZXRfYm9vbCgkcGFyYW1zLCAnc2VjdXJlJyk7CiAgICAkaHR0cG9ubHkgPSB4dF9wYXJhbTo6Z2V0X2Jvb2woJHBhcmFtcywgJ2h0dHBvbmx5Jyk7CiAgICAKICAgIENvb2tpZXM6OmdldEluc3RhbmNlKCktPnNldENvb2tpZSgKICAgICAgJG5hbWUsICR2YWx1ZSwgJGV4cGlyZSwgJHBhdGgsICRkb21haW4sICRzZWN1cmUsICRodHRwb25seQogICAgKTsKCiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBnZXRfYWN0aW9uX2pzKCRwYXJhbXMsICRzbWFydHkpCiAgewogICAgCiAgICAkbW9kdWxlICA9IFx0cmltKChzdHJpbmcpeHRfdXRpbHM6OmdldF9wYXJhbSgkcGFyYW1zLCAnbW9kdWxlJywgJHNtYXJ0eS0+Z2V0VGVtcGxhdGVWYXJzKCdhY3Rpb25tb2R1bGUnKSkpOwogICAgJGFjdGlvbiAgPSBcdHJpbSgoc3RyaW5nKXh0X3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywgJ2FjdGlvbicpKTsKICAgICRtb2Rfb2JqID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgkbW9kdWxlKTsKICAgIAogICAgaWYoISRtb2Rfb2JqKSB7IHJldHVybiAnJzsgfQogICAgCiAgICAkZmlsZV90ZW1wbGF0ZSA9ICRtb2Rfb2JqLT5HZXRNb2R1bGVQYXRoKCkgLiAnL2pzLycgLiAkYWN0aW9uIC4gJy0qLmpzJzsKICAgICRmaWxlcyAgICAgICAgID0gXGdsb2IoJGZpbGVfdGVtcGxhdGUpOwogICAgCiAgICBpZighXGNvdW50KCRmaWxlcykpIHsgcmV0dXJuICcnOyB9CiAgICAKICAgICRvdXQgPSAnJzsKICAgIAogICAgZm9yZWFjaCgkZmlsZXMgYXMgJGZpbGUpCiAgICB7CiAgICAgIGlmKFxmaWxlX2V4aXN0cygkZmlsZSkpCiAgICAgIHsKICAgICAgICAkdXJsID0gXHN0cl9yZXBsYWNlKCRtb2Rfb2JqLT5HZXRNb2R1bGVQYXRoKCksICRtb2Rfb2JqLT5HZXRNb2R1bGVVUkxQYXRoKCksICRmaWxlKTsKICAgICAgICAkb3V0IC49ICc8c2NyaXB0IHNyYz0iJyAuICR1cmwgLiAnIj48L3NjcmlwdD4nIC4gIlxuIjsKICAgICAgfQogICAgfQogICAgCiAgICBpZiggIWVtcHR5KCRvdXQpICkgeyByZXR1cm4gJG91dDsgfQogICAgCiAgICByZXR1cm4gJyc7CiAgfQp9IC8vIGVuZCBvZiBjbGFzcwoKIwojIEVPRgojCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.sqlite_utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHQ7DQoNCg0KY2xhc3Mgc3FsaXRlX3V0aWxzDQp7DQogIHByaXZhdGUgJF9vYmo7DQogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpDQogIHsNCiAgICBpZiggIWNsYXNzX2V4aXN0cygnU1FMaXRlMycpICkNCiAgICB7DQogICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1NRTGl0ZTMgZXh0ZW5zaW9uIG5vdCBsb2FkZWQhJyk7DQogICAgfQ0KICAgIA0KICAgICR0aGlzLT5fb2JqID0gbmV3IFxTUUxpdGUzOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gR2V0U1FMaXRlKCkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+X29iajsNCiAgfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.Translator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENNU01TRXh0Owp1c2UgQ01TTW9kdWxlOwoKY2xhc3MgVHJhbnNsYXRvciBpbXBsZW1lbnRzIElUcmFuc2xhdG9yCnsKICAgIHByaXZhdGUgJG1vZDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQ01TTW9kdWxlICRtb2QpCiAgICB7CiAgICAgICAgJHRoaXMtPm1vZCA9ICRtb2Q7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKC8qIHZhciBhcmdzICovKQogICAgewogICAgICAgICRhcmdzID0gXGZ1bmNfZ2V0X2FyZ3MoKTsKICAgICAgICBpZigxID09PSBcY291bnQoJGFyZ3MpICYmIFxpc19hcnJheSgkYXJnc1swXSkgKSB7ICRhcmdzID0gJGFyZ3NbMF07IH0KICAgICAgICByZXR1cm4gXGNhbGxfdXNlcl9mdW5jX2FycmF5KFskdGhpcy0+bW9kLCAnTGFuZyddLCAkYXJncyk7CiAgICB9Cn0gLy8gY2xhc3M=]]></data>
	</file>
	<file>
	  <filename>/lib/class.watermarker.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKbmFtZXNwYWNlIENNU01TRXh0OwoKY2xhc3Mgd21fZXhjZXB0aW9uIGV4dGVuZHMgXHh0X2V4Y2VwdGlvbgp7CiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzdHIgPSAnJywkY29kZSA9IDAsXEV4Y2VwdGlvbiAkcGFyZW50ID0gbnVsbCkKICB7CiAgICBpZiggKGludCkkc3RyID49IDEwMDAgKQogICAgewogICAgICAkc3RyID0gJ0NNU01TRXh0JSV3YXRlcm1hcmtlcnJvcl8nIC4gJHN0cjsKICAgIH0KICAgIGlmKCFcc3RycG9zKCRzdHIsICclJScpKQogICAgewogICAgICAkc3RyID0gJ0NNU01TRXh0JSUnIC4gJHN0cjsKICAgIH0KICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJHN0ciwkY29kZSwkcGFyZW50KTsKICB9Cn0KCmNsYXNzIHdhdGVybWFya2VyCnsKICBwdWJsaWMgY29uc3QgQUxJR05fVUwgICAgPSAwOwogIHB1YmxpYyBjb25zdCBBTElHTl9VQyAgICA9IDE7CiAgcHVibGljIGNvbnN0IEFMSUdOX1VSICAgID0gMjsKICBwdWJsaWMgY29uc3QgQUxJR05fTUwgICAgPSAzOwogIHB1YmxpYyBjb25zdCBBTElHTl9NQyAgICA9IDQ7CiAgcHVibGljIGNvbnN0IEFMSUdOX01SICAgID0gNTsKICBwdWJsaWMgY29uc3QgQUxJR05fTEwgICAgPSA2OwogIHB1YmxpYyBjb25zdCBBTElHTl9MQyAgICA9IDc7CiAgcHVibGljIGNvbnN0IEFMSUdOX0xSICAgID0gODsKICBwdWJsaWMgY29uc3QgRVJST1JfT1RIRVIgPSAxMDAwOwogIAogIHByaXZhdGUgJF90ZXh0OwogIHByaXZhdGUgJF9iZ19jb2xvcjsKICBwcml2YXRlICRfdGV4dF9jb2xvcjsKICBwcml2YXRlICRfdGV4dF9hbmdsZTsKICBwcml2YXRlICRfdGV4dF9mb250OwogIHByaXZhdGUgJF90ZXh0X3NpemU7CiAgcHJpdmF0ZSAkX3dtaW1nX2ZpbGU7CiAgcHJpdmF0ZSAkX2FsaWdubWVudDsKICBwcml2YXRlICRfaG1hcmdpbjsKICBwcml2YXRlICRfdm1hcmdpbjsKICBwcml2YXRlICRfcGFkZGluZ194OwogIHByaXZhdGUgJF9wYWRkaW5nX3k7CiAgcHJpdmF0ZSAkX3RyYW5zcGFyZW50OwogIHByaXZhdGUgJF90cmFuc2x1Y2VuY3k7CiAgcHJpdmF0ZSAkdF93bXNpemU7CiAgcHJpdmF0ZSAkaF90ZXh0Y29sb3I7CiAgcHJpdmF0ZSAkdF9lcnJvcjsKICBwcml2YXRlICRoX2JnY29sb3I7CiAgCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICB7CiAgICAkdGhpcy0+aF90ZXh0Y29sb3IgICA9ICcnOwogICAgJHRoaXMtPmhfYmdjb2xvciAgICAgPSAnJzsKICAgICR0aGlzLT50X3dtc2l6ZSAgICAgID0gJyc7CiAgICAkdGhpcy0+dF9lcnJvciAgICAgICA9IDA7CiAgICAkdGhpcy0+X3RyYW5zcGFyZW50ICA9IDE7CiAgICAkdGhpcy0+X2htYXJnaW4gICAgICA9IDIwOwogICAgJHRoaXMtPl92bWFyZ2luICAgICAgPSAyMDsKICAgICR0aGlzLT5fcGFkZGluZ194ICAgID0gNTsKICAgICR0aGlzLT5fcGFkZGluZ195ICAgID0gNTsKICAgICR0aGlzLT5fdGV4dCAgICAgICAgID0gJyc7CiAgICAkdGhpcy0+X2JnX2NvbG9yICAgICA9IFswLCAwLCAwXTsgLy8gYmxhY2sKICAgICR0aGlzLT5fdGV4dF9jb2xvciAgID0gWzI1NSwgMjU1LCAyNTVdOyAvLyB3aGl0ZQogICAgJHRoaXMtPl90ZXh0X2FuZ2xlICAgPSAwOwogICAgJHRoaXMtPl90ZXh0X2ZvbnQgICAgPSAnJzsKICAgICR0aGlzLT5fdGV4dF9zaXplICAgID0gJyc7CiAgICAkdGhpcy0+X3dtaW1nX2ZpbGUgICA9ICcnOwogICAgJHRoaXMtPl9hbGlnbm1lbnQgICAgPSBzZWxmOjpBTElHTl9NQzsKICAgICR0aGlzLT5fdHJhbnNsdWNlbmN5ID0gMTAwOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2Vycm9yKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPnRfZXJyb3I7CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBzZXRfd2F0ZXJtYXJrX3RleHQoJHRleHQpCiAgewogICAgJHRoaXMtPl90ZXh0ID0gJHRleHQ7CiAgICAkdGhpcy0+X3dtaW1nX2ZpbGUgPSAnJzsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHNldF93YXRlcm1hcmtfaW1hZ2UoJGZpbGVuYW1lKQogIHsKICAgIGlmKCBcaXNfZmlsZSgkZmlsZW5hbWUpICkKICAgIHsKICAgICAgJHRoaXMtPl93bWltZ19maWxlID0gJGZpbGVuYW1lOwogICAgfQogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2FsaWdubWVudCgkYWxpZ25tZW50KQogIHsKICAgICR0aGlzLT5fYWxpZ25tZW50ID0gJGFsaWdubWVudDsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIGdldF9hbGlnbm1lbnQoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X2FsaWdubWVudDsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHNldF9mb250KCRmb250KQogIHsKICAgICR0aGlzLT5fdGV4dF9mb250ID0gJGZvbnQ7CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBzZXRfdGV4dF9zaXplKCRwb2ludHMpCiAgewogICAgJHRoaXMtPl90ZXh0X3NpemUgPSAkcG9pbnRzOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gc2V0X3RleHRfYW5nbGUoJGFuZ2xlKQogIHsKICAgICRhbmdsZSAgICAgICAgICAgICA9IChpbnQpJGFuZ2xlOwogICAgJGFuZ2xlICAgICAgICAgICAgICU9IDM2MDsKICAgICR0aGlzLT5fdGV4dF9hbmdsZSA9ICRhbmdsZTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHNldF90ZXh0X2NvbG9yKCRyZWQsJGdyZWVuLCRibHVlKQogIHsKICAgICRyZWQgICAgICAgICAgICAgICA9IChpbnQpJHJlZDsKICAgICRyZWQgICAgICAgICAgICAgICA9IFxtYXgoJHJlZCwgMCk7CiAgICAkcmVkICAgICAgICAgICAgICAgPSBcbWluKCRyZWQsIDI1NSk7CiAgICAkZ3JlZW4gICAgICAgICAgICAgPSAoaW50KSRncmVlbjsKICAgICRncmVlbiAgICAgICAgICAgICA9IFxtYXgoJGdyZWVuLCAwKTsKICAgICRncmVlbiAgICAgICAgICAgICA9IFxtaW4oJGdyZWVuLCAyNTUpOwogICAgJGJsdWUgICAgICAgICAgICAgID0gKGludCkkYmx1ZTsKICAgICRibHVlICAgICAgICAgICAgICA9IFxtYXgoJGJsdWUsIDApOwogICAgJGJsdWUgICAgICAgICAgICAgID0gXG1pbigkYmx1ZSwgMjU1KTsKICAgICR0aGlzLT5fdGV4dF9jb2xvciA9IFskcmVkLCAkZ3JlZW4sICRibHVlXTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHNldF9iYWNrZ3JvdW5kX2NvbG9yKCRyZWQsJGdyZWVuLCRibHVlLCR0cmFuc3BhcmVudCA9IDApCiAgewogICAgJHJlZCAgICAgICAgICAgICAgICA9IChpbnQpJHJlZDsKICAgICRyZWQgICAgICAgICAgICAgICAgPSBcbWF4KCRyZWQsIDApOwogICAgJHJlZCAgICAgICAgICAgICAgICA9IFxtaW4oJHJlZCwgMjU1KTsKICAgICRncmVlbiAgICAgICAgICAgICAgPSAoaW50KSRncmVlbjsKICAgICRncmVlbiAgICAgICAgICAgICAgPSBcbWF4KCRncmVlbiwgMCk7CiAgICAkZ3JlZW4gICAgICAgICAgICAgID0gXG1pbigkZ3JlZW4sIDI1NSk7CiAgICAkYmx1ZSAgICAgICAgICAgICAgID0gKGludCkkYmx1ZTsKICAgICRibHVlICAgICAgICAgICAgICAgPSBcbWF4KCRibHVlLCAwKTsKICAgICRibHVlICAgICAgICAgICAgICAgPSBcbWluKCRibHVlLCAyNTUpOwogICAgJHRoaXMtPl9iZ19jb2xvciAgICA9IFskcmVkLCAkZ3JlZW4sICRibHVlXTsKICAgICR0aGlzLT5fdHJhbnNwYXJlbnQgPSAkdHJhbnNwYXJlbnQ7CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBzZXRfdHJhbnNsdWNlbmN5KCRudW0pCiAgewogICAgJG51bSAgICAgICAgICAgICAgICAgPSAoaW50KSRudW07CiAgICAkbnVtICAgICAgICAgICAgICAgICA9IFxtYXgoJG51bSwgMCk7CiAgICAkbnVtICAgICAgICAgICAgICAgICA9IFxtaW4oJG51bSwgMTAwKTsKICAgICR0aGlzLT5fdHJhbnNsdWNlbmN5ID0gJG51bTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIGlzX3JlYWR5KCkKICB7CiAgICBpZiggZW1wdHkoJHRoaXMtPl93bWltZ19maWxlKSAmJiBlbXB0eSgkdGhpcy0+X3RleHQpICkgeyByZXR1cm4gRkFMU0U7IH0KICAgIGlmKCAhZW1wdHkoJHRoaXMtPl90ZXh0KSAmJiAoZW1wdHkoJHRoaXMtPl90ZXh0X2ZvbnQpIHx8ICR0aGlzLT5fdGV4dF9zaXplIDwgMSkgKSB7IHJldHVybiBGQUxTRTsgfQogICAgaWYoICFlbXB0eSgkdGhpcy0+X3RleHQpICYmICFcaXNfZmlsZSgkdGhpcy0+X3RleHRfZm9udCkgKSB7IHJldHVybiBGQUxTRTsgfQogICAgCiAgICByZXR1cm4gVFJVRTsKICB9CiAgCiAgcHJpdmF0ZSBmdW5jdGlvbiBfZ2VuZXJhdGVJbWFnZUZyb21UZXh0KCYkd2lkdGgsJiRoZWlnaHQpCiAgewogICAgaWYoIEZBTFNFID09PSAkdGhpcy0+aXNfcmVhZHkoKSApIHsgcmV0dXJuIEZBTFNFOyB9CiAgICAKICAgIC8vCiAgICAvLyBHZW5lcmF0ZSBhIHRyYW5zcGFyZW50IFBORyBpbWFnZSB0eXBlIHRoaW5nCiAgICAvLyB3aXRoIHRoZSB0ZXh0IHdlIHdhbnQKICAgIC8vCiAgICAKICAgIC8vIEZpcnN0IGZpbmQgdGhlIGJvdW5kaW5nIGJveAogICAgJHRoaXMtPnRfd21zaXplID0gXGltYWdlZnRiYm94KCR0aGlzLT5fdGV4dF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5fdGV4dF9hbmdsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X3RleHRfZm9udCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X3RleHQpOwogICAgCiAgICAkd2lkdGggPSBcYWJzKCR0aGlzLT50X3dtc2l6ZVswXSkgKyBcYWJzKCR0aGlzLT50X3dtc2l6ZVsyXSk7CiAgICAkaGVpZ2h0ID0gXGFicygkdGhpcy0+dF93bXNpemVbMV0pICsgXGFicygkdGhpcy0+dF93bXNpemVbNV0pOwogICAgCiAgICAkaW1hZ2UgPSBcaW1hZ2VjcmVhdGV0cnVlY29sb3IoJHdpZHRoICsgJHRoaXMtPl9obWFyZ2luLCAkaGVpZ2h0ICsgJHRoaXMtPl92bWFyZ2luKTsKICAgIAogICAgJHRoaXMtPmhfYmdjb2xvciA9IFxpbWFnZWNvbG9yYWxsb2NhdGUoJGltYWdlLCAkdGhpcy0+X2JnX2NvbG9yWzBdLCAkdGhpcy0+X2JnX2NvbG9yWzFdLCAkdGhpcy0+X2JnX2NvbG9yWzJdKTsKICAgIAogICAgLy8gYmFja2dyb3VuZAogICAgXGltYWdlZmlsbGVkcmVjdGFuZ2xlKCRpbWFnZSwgMCwgMCwgJHdpZHRoIC0gMSArICR0aGlzLT5faG1hcmdpbiwgJGhlaWdodCAtIDEgKyAkdGhpcy0+X3ZtYXJnaW4sICR0aGlzLT5oX2JnY29sb3IpOwogICAgCiAgICBpZiggJHRoaXMtPl90cmFuc3BhcmVudCApIHsKICAgICAgLy8gbWFrZSB0aGUgYmFja2dyb3VuZCB0cmFuc3BhcmVudC4KICAgICAgXGltYWdlY29sb3J0cmFuc3BhcmVudCgkaW1hZ2UsICR0aGlzLT5oX2JnY29sb3IpOwogICAgfQogICAgCiAgICAvLyBkcmF3IHRoZSBmb3JnZXJvdW5kIHRleHQKICAgICR0aGlzLT5oX3RleHRjb2xvciA9IFxpbWFnZWNvbG9yYWxsb2NhdGUoJGltYWdlLCAkdGhpcy0+X3RleHRfY29sb3JbMF0sICR0aGlzLT5fdGV4dF9jb2xvclsxXSwgJHRoaXMtPl90ZXh0X2NvbG9yWzJdKTsKICAgICRyZXMgPSBcaW1hZ2V0dGZ0ZXh0KCRpbWFnZSwgJHRoaXMtPl90ZXh0X3NpemUsICR0aGlzLT5fdGV4dF9hbmdsZSwgKGludCkoJHRoaXMtPl9obWFyZ2luIC8gMikgKyAxLAogICAgICAgICAgICAgICAgICAgICAgICAkaGVpZ2h0KyhpbnQpKCR0aGlzLT5fdm1hcmdpbi8yKSwgJHRoaXMtPmhfdGV4dGNvbG9yLCAkdGhpcy0+X3RleHRfZm9udCwgJHRoaXMtPl90ZXh0KTsKICAKICAgICR3aWR0aCAgKz0gJHRoaXMtPl9obWFyZ2luOwogICAgJGhlaWdodCArPSAkdGhpcy0+X3ZtYXJnaW47CiAgICAKICAgIC8vIHNob3VsZCBoYXZlIGEgbmljZSBpbWFnZSBub3cuCiAgICByZXR1cm4gJGltYWdlOwogIH0KICAKICAKICBwcml2YXRlIGZ1bmN0aW9uIF9sb2FkRmlsZSgkZmlsZW5hbWUsJiRzaXplaW5mbywkaXN0cmFuc3BhcmVudCA9IGZhbHNlKQogIHsKICAgICR0bXAgPSBcZ2V0aW1hZ2VzaXplKCRmaWxlbmFtZSk7CiAgICBpZiggJHRtcCA9PT0gRkFMU0UgKSB7IHRocm93IG5ldyB3bV9leGNlcHRpb24oMTAwMSk7IH0KICAKICAgICRpbWFnZSA9ICcnOwogICAgc3dpdGNoKCR0bXBbMl0pCiAgICB7CiAgICAgIGNhc2UgXElNQUdFVFlQRV9HSUY6CiAgICAgICAgJGltYWdlID0gXGltYWdlY3JlYXRlZnJvbWdpZigkZmlsZW5hbWUpOwogICAgICBicmVhazsKICAgICAgY2FzZSBcSU1BR0VUWVBFX0pQRUc6CiAgICAgICAgJGltYWdlID0gXGltYWdlY3JlYXRlZnJvbWpwZWcoJGZpbGVuYW1lKTsKICAgICAgYnJlYWs7CiAgICAgIGNhc2UgXElNQUdFVFlQRV9QTkc6CiAgICAgICAgJGltYWdlID0gXGltYWdlY3JlYXRlZnJvbXBuZygkZmlsZW5hbWUpOwogICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBuZXcgd21fZXhjZXB0aW9uKDEwMDIpOwogICAgfQogIAogICAgaWYoJGlzdHJhbnNwYXJlbnQpCiAgICB7CiAgICAgICRjID0gXGltYWdlY29sb3JhdCgkaW1hZ2UsIDEsIDEpOwogICAgICBcaW1hZ2Vjb2xvcnRyYW5zcGFyZW50KCRpbWFnZSwgJGMpOwogICAgfQogICAgCiAgICAkc2l6ZWluZm8gPSAkdG1wOwogICAgCiAgICByZXR1cm4gJGltYWdlOwogIH0KICAKICAKICAvLyByZXR1cm5zIGFycmF5KHdpZHRoLGhlaWdodCxpbWFnZXR5cGUscmVzb3VyY2UpCiAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZV93YXRlcm1hcmtfcnNyYygpCiAgewogICAgaWYoICEkdGhpcy0+aXNfcmVhZHkoKSApIHsgcmV0dXJuOyB9CiAgICAKICAgIC8vIGxvYWQgb3IgY3JlYXRlIG91ciB3YXRlcm1hcmsgaW1hZ2UKICAgICRyZXMgICAgID0gRkFMU0U7CiAgICAkd21pbmZvICA9IE5VTEw7CiAgICAkc3JjaW5mbyA9IE5VTEw7CiAgCiAgICBpZighZW1wdHkoJHRoaXMtPl90ZXh0KSkKICAgIHsKICAgICAgLy8gZ2VuZXJhdGUgdGV4dCB3YXRlcm1hcmsgaW1hZ2UKICAgICAgLy8gZHluYW1pY2FsbHkKICAgICAgJHdpZHRoICA9ICcnOwogICAgICAkaGVpZ2h0ID0gJyc7CiAgICAgICRyZXMgICAgPSAkdGhpcy0+X2dlbmVyYXRlSW1hZ2VGcm9tVGV4dCgkd2lkdGgsICRoZWlnaHQpOwogICAgICBpZihGQUxTRSAhPT0gJHJlcykKICAgICAgewogICAgICAgICR3bWluZm8gPSBbJHdpZHRoLCAkaGVpZ2h0LCBcSU1BR0VUWVBFX1BOR107CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgLy8gbG9hZCBpbWFnZSBmcm9tIGZpbGUKICAgICAgJHJlcyA9ICR0aGlzLT5fbG9hZEZpbGUoJHRoaXMtPl93bWltZ19maWxlLCAkd21pbmZvLCBUUlVFKTsKICAgIH0KICAgIAogICAgaWYoIEZBTFNFID09PSAkcmVzICkgeyB0aHJvdyBuZXcgd21fZXhjZXB0aW9uKDEwMDYpOyB9CiAgICAKICAgICR3bWluZm9bXSA9ICRyZXM7CiAgICAKICAgIHJldHVybiAkd21pbmZvOwogIH0KICAKICAvLyByZXR1cm5zIHJzcmMKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3dhdGVybWFya2VkX2ltYWdlKCRzcmNmaWxlKQogIHsKICAgICRoX3Jlc3VsdGltZyA9IE5VTEw7CiAgICAkc3JjaW5mbyAgICAgPSBbXTsKICAgICR3bWluZm8gICAgICA9IE5VTEw7CiAgICAKCiAgICAKICAgIGlmKFxpc19yZXNvdXJjZSgkc3JjZmlsZSkgfHwgKFBIUF9WRVJTSU9OX0lEID49IDgwMDAwICYmICRzcmNmaWxlIGluc3RhbmNlb2YgXEdkSW1hZ2UpICkKICAgIHsKICAgICAgJHNyY2luZm9bMF0gID0gXGltYWdlc3goJHNyY2ZpbGUpOwogICAgICAkc3JjaW5mb1sxXSAgPSBcaW1hZ2VzeSgkc3JjZmlsZSk7CiAgICAgICRoX3Jlc3VsdGltZyA9ICRzcmNmaWxlOwogICAgfQogICAgZWxzZQogICAgewogICAgICBpZiggIVxmaWxlX2V4aXN0cygkc3JjZmlsZSkgKSB7IHRocm93IG5ldyB3bV9leGNlcHRpb24oMTAwMyk7IH0KICAgIAogICAgICAvLyBjaGVjayBpZiB3ZSdyZSByZWFkeQogICAgICBpZihGQUxTRSA9PT0gJHRoaXMtPmlzX3JlYWR5KCkpIHsgcmV0dXJuIEZBTFNFOyB9CiAgICAgIAogICAgICAvLyBzaG91bGQgYmUgYWJsZSB0byBub3cgbG9hZCB0aGUgcHJpbWFyeSBpbWFnZQogICAgICAkcmVzID0gJHRoaXMtPl9sb2FkRmlsZSgkc3JjZmlsZSwgJHNyY2luZm8pOwogICAgICBpZihGQUxTRSA9PT0gJHJlcykgeyB0aHJvdyBuZXcgd21fZXhjZXB0aW9uKDEwMDUpOyB9CiAgICAgICRoX3Jlc3VsdGltZyA9ICRyZXM7CiAgICB9CiAgICAKICAgICR3bWluZm8gPSAkdGhpcy0+Y3JlYXRlX3dhdGVybWFya19yc3JjKCk7CiAgICBpZiggIVxpc19hcnJheSgkd21pbmZvKSApIHsgdGhyb3cgbmV3IHdtX2V4Y2VwdGlvbigxMDA0KTsgfQogICAgJGhfd21pbWFnZSA9ICR3bWluZm9bM107CiAgICAKICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBzb3VyY2UgaW1hZ2UgaXNuJ3Qgc21hbGxlciB0aGFuIG91ciB3YXRlcm1hcmsgaW1hZ2UKICAgIGlmKCAoJHNyY2luZm9bMF0gPCAkd21pbmZvWzBdKSB8fCAoJHNyY2luZm9bMV0gPCAkd21pbmZvWzFdKSApIHsgdGhyb3cgbmV3IHdtX2V4Y2VwdGlvbigxMDAxKTsgfQogICAgCiAgICAvLyBGaW5kIG91dCB0aGUgcGxhY2VtZW50IG9mIHRoZSB3YXRlcm1hcmsKICAgIC8vIG9uIHRoZSByZXN1bHQgaW1hZ2UKICAgICRwb3N4ID0gJyc7CiAgICAkcG9zeSA9ICcnOwogICAgJGN4ID0gKCRzcmNpbmZvWzBdIC0gJHdtaW5mb1swXSkvMjsKICAgICRjeSA9ICgkc3JjaW5mb1sxXSAtICR3bWluZm9bMV0pLzI7CiAgCiAgICBzd2l0Y2goJHRoaXMtPl9hbGlnbm1lbnQpCiAgICB7CiAgICAgIGNhc2Ugc2VsZjo6QUxJR05fVUw6CiAgICAgICAgJHBvc3ggPSAkdGhpcy0+X3BhZGRpbmdfeDsKICAgICAgICAkcG9zeSA9ICR0aGlzLT5fcGFkZGluZ195OwogICAgICBicmVhazsKICAgIAogICAgICBjYXNlIHNlbGY6OkFMSUdOX1VDOgogICAgICAgICRwb3N4ID0gJGN4OwogICAgICAgICRwb3N5ID0gJHRoaXMtPl9wYWRkaW5nX3k7CiAgICAgIGJyZWFrOwogICAgCiAgICAgIGNhc2Ugc2VsZjo6QUxJR05fVVI6CiAgICAgICAgJHBvc3ggPSAkc3JjaW5mb1swXSAtICR0aGlzLT5fcGFkZGluZ194IC0gJHdtaW5mb1swXTsKICAgICAgICAkcG9zeSA9ICR0aGlzLT5fcGFkZGluZ195OwogICAgICBicmVhazsKICAgIAogICAgICBjYXNlIHNlbGY6OkFMSUdOX01MOgogICAgICAgICRwb3N4ID0gJHRoaXMtPl9wYWRkaW5nX3g7CiAgICAgICAgJHBvc3kgPSAkY3k7CiAgICAgIGJyZWFrOwogICAgCiAgICAgIGNhc2Ugc2VsZjo6QUxJR05fTUM6CiAgICAgICAgJHBvc3ggPSAkY3g7CiAgICAgICAgJHBvc3kgPSAkY3k7CiAgICAgIGJyZWFrOwogICAgCiAgICAgIGNhc2Ugc2VsZjo6QUxJR05fTVI6CiAgICAgICAgJHBvc3ggPSAkc3JjaW5mb1swXSAtICR0aGlzLT5fcGFkZGluZ194IC0gJHdtaW5mb1swXTsKICAgICAgICAkcG9zeSA9ICRjeTsKICAgICAgYnJlYWs7CiAgICAKICAgICAgY2FzZSBzZWxmOjpBTElHTl9MTDoKICAgICAgICAkcG9zeCA9ICR0aGlzLT5fcGFkZGluZ194OwogICAgICAgICRwb3N5ID0gJHNyY2luZm9bMV0gLSAkdGhpcy0+X3BhZGRpbmdfeSAtICR3bWluZm9bMV07CiAgICAgIGJyZWFrOwogICAgCiAgICAgIGNhc2Ugc2VsZjo6QUxJR05fTEM6CiAgICAgICAgJHBvc3ggPSAkY3g7CiAgICAgIGJyZWFrOwogICAgCiAgICAgIGNhc2Ugc2VsZjo6QUxJR05fTFI6CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgJHBvc3ggPSAkc3JjaW5mb1swXSAtICR0aGlzLT5fcGFkZGluZ194IC0gJHdtaW5mb1swXTsKICAgICAgICAkcG9zeSA9ICRzcmNpbmZvWzFdIC0gJHRoaXMtPl9wYWRkaW5nX3kgLSAkd21pbmZvWzFdOwogICAgICBicmVhazsKICAgIH0KICAgIGlmKGVtcHR5KCRwb3N4KSB8fCBlbXB0eSgkcG9zeSkpCiAgICB7CiAgICAgICR0aGlzLT50X2Vycm9yID0gc2VsZjo6RVJST1JfT1RIRVI7CiAgICAKICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQogICAgCiAgICAvLyBOb3cgd2UncmUgc2V0IHRvIG1lcmdlIHRoZSB0d28gaW1hZ2VzIHRvZ2V0aGVyCiAgICAkcmVzID0gJyc7CiAgICBpZighZW1wdHkoJHRoaXMtPl90ZXh0KSkKICAgIHsKICAgICAgLy8gdXNlIHRoaXMgZm9yIHdhdGVybWFyayBpbWFnZXMgd2UgZ2VuZXJhdGVkIGZyb20gdGV4dC4KICAgICAgXGltYWdlYWxwaGFibGVuZGluZygkaF93bWltYWdlLCBGQUxTRSk7CiAgICAgICRyZXMgPSBcaW1hZ2Vjb3B5bWVyZ2UoCiAgICAgICAgJGhfcmVzdWx0aW1nLCAkaF93bWltYWdlLAogICAgICAgICRwb3N4LCAkcG9zeSwgMCwgMCwKICAgICAgICAkd21pbmZvWzBdLCAkd21pbmZvWzFdLAogICAgICAgICR0aGlzLT5fdHJhbnNsdWNlbmN5CiAgICAgICk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIFxpbWFnZWFscGhhYmxlbmRpbmcoJHdtaW5mb1s0XSwgRkFMU0UpOwogICAgICBcaW1hZ2VzYXZlYWxwaGEoJHdtaW5mb1s0XSwgVFJVRSk7CiAgICAgICRyZXMgPSBcaW1hZ2Vjb3B5cmVzYW1wbGVkKAogICAgICAgICRoX3Jlc3VsdGltZywgJHdtaW5mb1s0XSwKICAgICAgICAkcG9zeCwgJHBvc3ksIDAsIDAsCiAgICAgICAgJHdtaW5mb1swXSwgJHdtaW5mb1sxXSwgJHdtaW5mb1swXSwgJHdtaW5mb1sxXQogICAgICApOwogICAgfQogICAgCiAgICBpZihGQUxTRSA9PT0gJHJlcykgeyB0aHJvdyBuZXcgd21fZXhjZXB0aW9uKDEwMDYpOyB9CiAgICAKICAgIHJldHVybiAkaF9yZXN1bHRpbWc7CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVfd2F0ZXJtYXJrZWRfaW1hZ2UoJHNyY2ZpbGUsJGRlc3RmaWxlKQogIHsKICAgICRzcmNmaWxlID0gdHJpbSgoc3RyaW5nKSRzcmNmaWxlKTsKICAgICRkZXN0ZmlsZSA9IHRyaW0oKHN0cmluZykkZGVzdGZpbGUpOwogICAgaWYoIGVtcHR5KCRzcmNmaWxlKSB8fCBlbXB0eSgkZGVzdGZpbGUpICkgcmV0dXJuIEZBTFNFOwogICAgCiAgICB0cnkgewogICAgICAkaF9yZXN1bHRpbWcgPSAkdGhpcy0+Z2V0X3dhdGVybWFya2VkX2ltYWdlKCRzcmNmaWxlKTsKICAgICAgCiAgICAgIC8vIGFuZCBzYXZlIHRoZSBkZXN0aW5hdGlvbgogICAgICAkZXh0ID0gc3RydG9sb3dlcihzdWJzdHIoc3RycmNocigkZGVzdGZpbGUsICcuJyksIDEpKTsKICAgICAgaWYoICRleHQgPT0gJ3BuZycgKSB7CiAgICAgICAgaW1hZ2VwbmcoJGhfcmVzdWx0aW1nLCRkZXN0ZmlsZSw5KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBpbWFnZWpwZWcoJGhfcmVzdWx0aW1nLCRkZXN0ZmlsZSwxMDApOwogICAgICB9CiAgICAgIAogICAgICAvLyBhbmQgd2UncmUgZG9uZS4KICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CiAgICBjYXRjaCggXEV4Y2VwdGlvbiAkZSApIHsKICAgICAgJHRoaXMtPnRfZXJyb3IgPSAkZS0+R2V0TWVzc2FnZSgpOwogICAgICByZXR1cm4gRkFMU0U7CiAgICB9CiAgfQp9IC8vIGVuZCBvZiBjbGFzcwoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.XTDomDocument.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgc2ltcGxlIGRvbWRvY3VtZW50IGV4dGVuc2lvbiB0aGF0IGluY2x1ZGVzIGFiaWxpdGllcyBmb3IganMgbGlrZSBpbm5lckhUTUwgZnVuY3Rpb25hbGl0eSBpbiBpdHMgZWxlbWVudHMKICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IFV0aWxpdGllcwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCi8vZGVjbGFyZShzdHJpY3RfdHlwZXM9MSk7IyByZXZpc2l0Cm5hbWVzcGFjZSBDTVNNU0V4dDsKCi8qCiAqIEEgc2ltcGxlIGRvbWRvY3VtZW50IGV4dGVuc2lvbiB0aGF0IGluY2x1ZGVzIGFiaWxpdGllcyBmb3IganMgbGlrZSBpbm5lckhUTUwgZnVuY3Rpb25hbGl0eSBpbiBpdHMgZWxlbWVudHMKICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICovCmNsYXNzIFhURG9tRG9jdW1lbnQgZXh0ZW5kcyBcRE9NRG9jdW1lbnQKewogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2ZXJzaW9uIFRoZSB2ZXJzaW9uIHN0cmluZwogICAgICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcgVGhlIGVuY29kaW5nIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICR2ZXJzaW9uID0gJycsIHN0cmluZyAkZW5jb2RpbmcgPSAnJykKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCR2ZXJzaW9uLCRlbmNvZGluZyk7CiAgICAgICAgJHRoaXMtPnJlZ2lzdGVyTm9kZUNsYXNzKCdET01FbGVtZW50JywgJ0pTTGlrZUhUTUxFbGVtZW50Jyk7CiAgICB9Cn0gLy8gY2xhc3MK]]></data>
	</file>
	<file>
	  <filename>/lib/class.XTModule.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmRlY2xhcmUoc3RyaWN0X3R5cGVzID0gMSk7ICNyZXZpc2l0IGxhdGVyDQpuYW1lc3BhY2UgQ01TTVNFeHQ7DQoNCmluY2x1ZGVfb25jZSBfX0RJUl9fIC4gJy9ib290c3RyYXAuaW5jLnBocCc7DQoNCnVzZSBDTVNNU0V4dDsNCnVzZSBjbXNfbWFpbGVyOw0KdXNlIGNtc191c2VycHJlZnM7DQp1c2UgQ21zQXBwOw0KdXNlIENNU01vZHVsZTsNCnVzZSBDTVNNU1xEYXRhYmFzZVxjb21wYXRpYmlsaXR5IGFzIGRiX2NvbXBhdGliaWxpdHk7DQp1c2UgQ01TTVNcRGF0YWJhc2VcQ29ubmVjdGlvbiBhcyBEYXRhYmFzZTsNCnVzZSBDTVNNU0V4dFxFbWFpbFxFbWFpbDsNCnVzZSBDTVNNU0V4dFxFbWFpbFxFbWFpbFByb2Nlc3NvcjsNCnVzZSBDTVNNU0V4dFxFbWFpbFxGaWxlRW1haWxTdG9yYWdlOw0KdXNlIENNU01TRXh0XEVtYWlsXGlFbWFpbFN0b3JhZ2U7DQp1c2UgQ01TTVNFeHRcRW1haWxcU2ltcGxlRW1haWxQcm9jZXNzb3I7DQp1c2UgQ01TTVNFeHRcanNsb2FkZXJcanNsb2FkZXI7DQp1c2UgQ01TTVNFeHRcTW9kdWxlRnVuY3Rpb25zXHByZWZlcmVuY2VzOw0KdXNlIHh0X2NhY2hlZF9yZW1vdGVfZmlsZTsNCnVzZSB4dF9odHRwOw0KdXNlIHh0X2ltYWdlOw0KdXNlIHh0X3RlbXBsYXRlX2FkbWluOw0KdXNlIHh0X3RtcGRhdGE7DQp1c2UgeHRfdXNlcm9wczsNCg0KY2xhc3MgWFRNb2R1bGUgZXh0ZW5kcyBcQ01TTW9kdWxlDQp7DQogIC8qKg0KICAgKiBAaWdub3JlDQogICAqLw0KICBwcml2YXRlIHN0YXRpYyAkX2luaXRpYWxpemVkOw0KICANCiAgcHJvdGVjdGVkICRfaW5pX2RhdGE7DQogIC8qKg0KICAgKiBAdmFyIFxDTVNNU0V4dFxNb2R1bGVGdW5jdGlvbnNccHJlZmVyZW5jZXMNCiAgICovDQogIHByb3RlY3RlZCBwcmVmZXJlbmNlcyAkcHJlZmVyZW5jZXM7DQogIC8qKg0KICAgKiBAdmFyIG51bGwgfFxDTVNNU0V4dFxhdXRvbG9hZGVyDQogICAqLw0KICBwcm90ZWN0ZWQgJF9hdXRvbG9hZGVyID0gTlVMTDsNCiAgDQogIC8qKg0KICAgKiBAdmFyIGFycmF5IG9mIGF1dG9sb2FkIGRhdGENCiAgICogQGRlcHJlY2F0ZWQNCiAgICogQHNlZSBDTVNNU0V4dFxhdXRvbG9hZGVyDQogICAqLw0KICBwcml2YXRlICRfYXV0b2xvYWRfZGF0YSA9IFtdOw0KICANCiAgLyoqDQogICAqIEBpZ25vcmUNCiAgICovDQogIHB1YmxpYyAkX2FjdGlvbmlkOw0KICANCiAgLyoqDQogICAqIEBpZ25vcmUNCiAgICovDQogIHB1YmxpYyBzdHJpbmcgJF9hY3Rpb25uYW1lOw0KICANCiAgLyoqDQogICAqIEBpZ25vcmUNCiAgICovDQogIHB1YmxpYyAkX2ltYWdlX2RpcmVjdG9yaWVzOw0KICANCiAgLyoqDQogICAqIEBpZ25vcmUNCiAgICovDQogIHB1YmxpYyAkX2N1cnJlbnRfYWN0aW9uOw0KICANCiAgLyoqDQogICAqIEBpZ25vcmUNCiAgICovDQogIHB1YmxpYyAkX2Vycm9ybXNnOw0KICANCiAgLyoqDQogICAqIEBpZ25vcmUNCiAgICovDQogIHB1YmxpYyAkX3JldHVybmlkOw0KICANCiAgLyoqDQogICAqIEBkZXByZWNhdGVkIHdpbGwgYmUgY2hhbmdlZCB0byBwcml2YXRlIGFuZCBwcmVmaXhlZCB3aXRoIF8NCiAgICogQHZhciBcQ01TTVNFeHRcTW9kdWxlQ29uZmlnfG1peGVkDQogICAqLw0KICBwdWJsaWMgJGNvbmZpZzsNCiAgDQogIHVzZSBcQ01TTVNFeHRcbW9kdWxlXENNU01vZHVsZU1ldGhvZHMsDQogICAgICBcQ01TTVNFeHRcbW9kdWxlXGVuY3J5cHRpb25fbWV0aG9kcywNCiAgICAgIFxDTVNNU0V4dFxtb2R1bGVcZm9ybV9tZXRob2RzLA0KICAgICAgXENNU01TRXh0XG1vZHVsZVxkZXByZWNhdGVkX21ldGhvZHMsDQogICAgICBcQ01TTVNFeHRcbW9kdWxlXGFjdGlvbnM7DQogIA0KICAvKioNCiAgICogQ2hlY2tzIGZvciBhIGRlZmF1bHQgcGVybWlzc2lvbg0KICAgKiB0aGlzIGlzIFdJUCBhbmQgbWF5IG5vdCB3b3JrIHByb3Blcmx5DQogICAqIGN1cnJlbnRseSByZXNlcnZlZCBmb3IgdGVzdGluZw0KICAgKg0KICAgKiBAcmV0dXJuIGJvb2wgUmV0dXJucyB0cnVlIGlmIHRoZSBmdW5jdGlvbiBoYXMgZGVmYXVsdCBwZXJtaXNzaW9uLCBmYWxzZSBvdGhlcndpc2UuDQogICAqLw0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2hhc19kZWZhdWx0X3Blcm1pc3Npb24oKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oICdhZG1pbl8nIC4gJHRoaXMtPkdldE5hbWUoKSApOw0KICB9DQogIA0KICAvKioNCiAgICogUmV0cmlldmVzIHRoZSBtaW5pbXVtIFBIUCB2ZXJzaW9uLg0KICAgKg0KICAgKiBNb2R1bGVzIHNob3VsZCBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIGlmIHRoZXkgbmVlZCB0byBhbmQgcmV0dXJuIHRoZSBtaW5pbWFsIFBIUCB2ZXJzaW9uIHRoZXkgc3VwcG9ydC4NCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcgVGhlIGN1cnJlbnQgUEhQIHZlcnNpb24gaWYgbm90IG92ZXJyaWRkZW4uDQogICAqLw0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gR2V0TWluaW11bVBocFZlcnNpb24oKQ0KICB7DQogICAgaWYoICFlbXB0eSgkdGhpcy0+X2luaV9kYXRhKSApDQogICAgew0KICAgICAgcmV0dXJuICR0aGlzLT5faW5pX2RhdGEtPkdldCgnTW9kdWxlJywgJ01pbmltdW1QaHBWZXJzaW9uJyk7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiBccGhwdmVyc2lvbigpOw0KICB9DQogIA0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gSXNQaHBWZXJzaW9uU3VwcG9ydGVkKCkNCiAgew0KICAgIHJldHVybiBcdmVyc2lvbl9jb21wYXJlKFxQSFBfVkVSU0lPTiwgJHRoaXMtPkdldE1pbmltdW1QaHBWZXJzaW9uKCkgKSA+PSAwOw0KICB9DQogIA0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2V4dF9pbmNsdWRlKCkNCiAgew0KICAgICRwYXR0ZXJucyA9IFsNCiAgICAgIFxjbXNfam9pbl9wYXRoKA0KICAgICAgICAkdGhpcy0+R2V0TW9kdWxlUGF0aCgpLA0KICAgICAgICAnaW5jbHVkZXMnLA0KICAgICAgICAnaW5jLioucGhwJw0KICAgICAgKSwNCiAgICAgIFxjbXNfam9pbl9wYXRoKA0KICAgICAgICAkdGhpcy0+R2V0TW9kdWxlUGF0aCgpLA0KICAgICAgICAnaW5jbHVkZXMnLA0KICAgICAgICAne2Z1bmN0aW9uLGZ1bmN0aW9uc30uKi5waHAnDQogICAgICApLA0KICAgICAgXGNtc19qb2luX3BhdGgoDQogICAgICAgICR0aGlzLT5HZXRNb2R1bGVQYXRoKCksDQogICAgICAgICdsaWInLA0KICAgICAgICAnZnVuY3Rpb25zJywNCiAgICAgICAgJ3tmdW5jdGlvbixmdW5jdGlvbnN9LioucGhwJw0KICAgICAgKSwNCiAgICAgIFxjbXNfam9pbl9wYXRoKA0KICAgICAgICAkdGhpcy0+R2V0TW9kdWxlUGF0aCgpLA0KICAgICAgICAnLndpcCcsDQogICAgICAgICdmdW5jdGlvbnMnLA0KICAgICAgICAne2Z1bmN0aW9uLGZ1bmN0aW9uc30uKi5waHAnDQogICAgICApLA0KICAgICAgXGNtc19qb2luX3BhdGgoDQogICAgICAgICR0aGlzLT5HZXRNb2R1bGVQYXRoKCksDQogICAgICAgICcud2lwJywNCiAgICAgICAgJ3thYnN0cmFjdCxjbGFzcyxpbnRlcmZhY2UsdHJhaXR9LioucGhwJw0KICAgICAgKSwNCiAgICBdOw0KICAgIA0KICAgIGZvcmVhY2goJHBhdHRlcm5zIGFzICRwYXR0ZXJuKQ0KICAgIHsNCiAgICAgIGZvcmVhY2goXGdsb2IoJHBhdHRlcm4sIEdMT0JfQlJBQ0UpIGFzICRmaWxlbmFtZSkNCiAgICAgIHsNCiAgICAgICAgaW5jbHVkZV9vbmNlICRmaWxlbmFtZTsNCiAgICAgIH0NCiAgICB9DQogIH0NCiAgDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfbG9hZF9pbml0KCkNCiAgew0KICAgICRmbiA9ICR0aGlzLT5HZXRNb2R1bGVQYXRoKCkgLiAnL2RhdGEvbW9kdWxlLmluaSc7DQogICAgDQogICAgaWYoXGZpbGVfZXhpc3RzKCRmbikpDQogICAgew0KICAgICAgJHRoaXMtPl9pbmlfZGF0YSA9IG5ldyBcQ01TTVNFeHRcRlNcU2ltcGxlSU5JKCRmbik7DQogICAgfQ0KICB9DQogIA0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2RlbGV0ZV9tb2R1bGVpbmZvaW5pKCkNCiAgew0KICAgICRmbiA9ICR0aGlzLT5HZXRNb2R1bGVQYXRoKCkgLiAnL21vZHVsZWluZm8uaW5pJzsNCiAgICANCiAgICBpZihcZmlsZV9leGlzdHMoJGZuKSkgeyBcdW5saW5rKCRmbik7IH0NCiAgfQ0KICAgIA0KICAgIA0KICAgIC8qKg0KICAgKiBUaGUgY29uc3RydWN0b3IuDQogICAqIFRoaXMgbWV0aG9kIGRvZXMgbnVtZXJvdXMgdGhpbmdzLCBpbmNsdWRpbmcgc2V0dXAgYW4gZXh0ZW5kZWQgYXV0b2xvYWRlciwNCiAgICogY3JlYXRlIGRlZmluZXMgZm9yIHRoZSBtb2R1bGUgaXRzZWxmLiAgaS5lOiBNT0RfQ01TTVNFeHQsIG9yIE1PRF9NQU1TLg0KICAgKiBzZXRzIHVwIGEgYnVpbHQgaW4gY2FjaGUgZHJpdmVyIGZvciB0ZW1wb3JhcmlseSBjYWNoaW5nIGRhdGEuDQogICAqIGFuZCByZWdpc3RlciBudW1lcm91cyBzbWFydHkgcGx1Z2lucyAoc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aG9zZSkuDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQ0KICB7DQogICAgJG5hbWUgPSAkdGhpcy0+R2V0TmFtZSgpOw0KICAgIA0KICAgICNpZignQ01TTVNFeHQnICE9PSAkbmFtZSkNCiAgICB7DQogICAgICAkdGhpcy0+X2F1dG9sb2FkZXIgPSBuZXcgXENNU01TRXh0XGF1dG9sb2FkZXIoKTsNCiAgICAgICR0aGlzLT5fYXV0b2xvYWRlci0+cmVnaXN0ZXIoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgLT5hZGRQYXRoKCR0aGlzLT5HZXRNb2R1bGVQYXRoKCkgLiAnL2xpYicpDQogICAgICAgICAgICAgICAgICAgICAgICAtPmFkZE5hbWVzcGFjZSgnXFwnLCAkdGhpcy0+R2V0TW9kdWxlUGF0aCgpIC4gJy9saWInKQ0KICAgICAgICAgICAgICAgICAgICAgICAgLT5hZGROYW1lc3BhY2UoJHRoaXMtPkdldE5hbWUoKSwgJHRoaXMtPkdldE1vZHVsZVBhdGgoKSAuICcvbGliJyk7DQogICAgfQ0KICAgIA0KICAgICMgZGVwcmVjYXRlZCAtLS0gd2lsbCBiZSByZW1vdmVkDQogICAgXHNwbF9hdXRvbG9hZF9yZWdpc3RlcihbJHRoaXMsICdhdXRvbG9hZCddKTsNCiAgICAjIw0KICAgICR0aGlzLT5faW50ZXJuYWxfYWN0aW9uc19oYW5kbGVyID0gbmV3IFxDTVNNU0V4dFxtb2R1bGVcYWN0aW9uc19oYW5kbGVyKCR0aGlzKTsNCiAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCk7DQogICAgDQogICAgJHRoaXMtPl9sb2FkX2luaXQoKTsNCiAgICAkdGhpcy0+X2RlbGV0ZV9tb2R1bGVpbmZvaW5pKCk7DQogICAgJHRoaXMtPmNvbmZpZyA9IENvbmZpZ01hbmFnZXI6OkdldENvbmZpZ0luc3RhbmNlKCR0aGlzKTsNCiAgICAkdGhpcy0+cHJlZmVyZW5jZXMgPSBuZXcgcHJlZmVyZW5jZXMoJHRoaXMpOw0KICAgIA0KICAgIGdsb2JhbCAkQ01TX0lOU1RBTExfUEFHRSwgJENNU19QSEFSX0lOU1RBTEw7DQogIA0KICAgIGlmKGlzc2V0KCRDTVNfSU5TVEFMTF9QQUdFKSB8fCBpc3NldCgkQ01TX1BIQVJfSU5TVEFMTCkpIHsgcmV0dXJuOyB9DQogIA0KICAgICRjbGFzcyA9IFxnZXRfY2xhc3MoJHRoaXMpOw0KICANCiAgICBpZighXGRlZmluZWQoJ01PRF8nIC4gXHN0cnRvdXBwZXIoJGNsYXNzKSApICkNCiAgICB7DQogICAgICAvKioNCiAgICAgICAqIEBpZ25vcmUNCiAgICAgICAqLw0KICAgICAgXGRlZmluZSgnTU9EXycgLiBcc3RydG91cHBlcigkY2xhc3MpLCAkY2xhc3MpOw0KICAgIH0NCiAgICANCiAgICAkdGhpcy0+X2V4dF9pbmNsdWRlKCk7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBSZWdpc3RlckF1dG9sb2FkQWxpYXMoJGFsaWFzID0gTlVMTCkNCiAgew0KICAgICR0aGlzLT5fYXV0b2xvYWRfZGF0YVskYWxpYXNdID0gJHRoaXMtPkdldE5hbWUoKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEFuIGV4dGVuZGVkIGF1dG9sb2FkIG1ldGhvZC4NCiAgICogU2VhcmNoIGZvciBjbGFzc2VzIGEgPG1vZHVsZT4vbGliL2NsYXNzLmNsYXNzbmFtZS5waHAgZmlsZS4NCiAgICogb3IgZm9yIGludGVyZmFjZXMgaW4gYSA8bW9kdWxlPi9saWIvaW50ZXJmYWNlLmNsYXNzbmFtZS5waHAgZmlsZS4NCiAgICogb3IgYXMgYSBsYXN0IGRpdGNoIGVmZm9ydCwgZm9yIHNpbXBsZSBjbGFzc2VzIGluIHRoZSA8bW9kdWxlPi9saWIvZXh0cmFjbGFzc2VzLnBocCBmaWxlLg0KICAgKiBUaGlzIG1ldGhvZCBhbHNvIHN1cHBvcnRzIG5hbWVzcGFjZXMsICBpbmNsdWRpbmcgPG1vZHVsZT4gYW5kIDxtb2R1bGU+L3N1YjEvc3ViMiB3aGljaCBzaG91bGQgZXhpc3QgaW4gZmlsZXMgYXMNCiAgICogZGVzY3JpYmVkIGFib3ZlLiBpbiBzdWJkaXJlY3RvcmllcyBiZWxvdyB0aGUgPG1vZHVsZT4vbGliIGRpcmVjdG9yeS4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkY2xhc3NuYW1lDQogICAqDQogICAqIEByZXR1cm4gYm9vbA0KICAgKg0KICAgKiBAaW50ZXJuYWwNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBhdXRvbG9hZCgkY2xhc3NuYW1lKSA6IGJvb2wNCiAgew0KICAgIGlmKCAhXGlzX29iamVjdCgkdGhpcykgKSB7IHJldHVybiBGQUxTRTsgfQ0KICAgICR0X3BhcnRzID0gTlVMTDsNCiAgICAkdF9wYXRoICA9ICcnOw0KICAgIA0KICAgIC8vIGNoZWNrIGZvciBjbGFzc2VzLg0KICAgICRwYXRoID0gJHRoaXMtPkdldE1vZHVsZVBhdGgoKSAuICcvbGliJzsNCiAgICANCiAgICBpZiggRkFMU0UgIT09IFxzdHJwb3MoJGNsYXNzbmFtZSwgJ1xcJykgKQ0KICAgIHsNCiAgICAgICR0X3BhdGggPSBcc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkY2xhc3NuYW1lKTsNCiAgICAgIA0KICAgICAgaWYoXHN0YXJ0c3dpdGgoJHRfcGF0aCwgJHRoaXMtPkdldE5hbWUoKSAuICcvJykpDQogICAgICB7DQogICAgICAgICRjbGFzc25hbWUgPSBcYmFzZW5hbWUoJHRfcGF0aCk7DQogICAgICAgICR0X3BhdGggICAgPSBcZGlybmFtZSgkdF9wYXRoKTsNCiAgICAgICAgJHRfcGF0aCAgICA9IFxzdWJzdHIoJHRfcGF0aCwgXHN0cmxlbigkdGhpcy0+R2V0TmFtZSgpKSArIDEpOw0KICAgICAgICAkcGF0aCAgICAgID0gJHRoaXMtPkdldE1vZHVsZVBhdGgoKSAuICcvbGliLycgLiAkdF9wYXRoOw0KICAgICAgfQ0KICAgICAgZWxzZWlmKCFlbXB0eSgkdGhpcy0+X2F1dG9sb2FkX2RhdGEpKQ0KICAgICAgew0KICAgICAgICAkdF9wYXJ0cyA9IFxleHBsb2RlKCdcXCcsICRjbGFzc25hbWUpOw0KICAgDQogICAgICAgIGlmKFxhcnJheV9rZXlfZXhpc3RzKCR0X3BhcnRzWzBdLCAkdGhpcy0+X2F1dG9sb2FkX2RhdGEpKQ0KICAgICAgICB7DQogICAgICAgICAgXGFycmF5X3NoaWZ0KCR0X3BhcnRzKTsNCiAgICAgICAgICAkdF9wYXRoICAgID0gXGltcGxvZGUoJ1xcJywgJHRfcGFydHMpOw0KICAgICAgICAgICRjbGFzc25hbWUgPSBcYmFzZW5hbWUoJHRfcGF0aCk7DQogICAgICAgICAgJHRfcGF0aCAgICA9IFxkaXJuYW1lKCR0X3BhdGgpOw0KICAgICAgICAgICR0X3BhdGggICAgPSBcc3Vic3RyKCR0X3BhdGgsIFxzdHJsZW4oJHRoaXMtPkdldE5hbWUoKSkgKyAxKTsNCiAgICAgICAgICAkcGF0aCAgICAgID0gJHRoaXMtPkdldE1vZHVsZVBhdGgoKSAuICcvbGliLycgLiAkdF9wYXRoOw0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICAgIA0KDQogICAgJGZuID0gJHBhdGggLiAiL2NsYXNzLnskY2xhc3NuYW1lfS5waHAiOw0KICAgIA0KICAgIGlmKFxpc19maWxlKCRmbikpDQogICAgew0KICAgICAgcmVxdWlyZV9vbmNlKCRmbik7DQogICAgICANCiAgICAgIHJldHVybiBUUlVFOw0KICAgIH0NCiAgICANCiAgICAkZm4gPSAkcGF0aCAuICIveyRjbGFzc25hbWV9LnBocCI7DQoNCiAgICBpZihcaXNfZmlsZSgkZm4pKQ0KICAgIHsNCiAgICAgIHJlcXVpcmVfb25jZSgkZm4pOw0KICAgICAgDQogICAgICByZXR1cm4gVFJVRTsNCiAgICB9DQogICAgDQogICAgLy8gY2hlY2sgZm9yIGFic3RyYWN0IGNsYXNzZXMuDQogICAgJGZuID0gJHBhdGggLiAiL2Fic3RyYWN0LnskY2xhc3NuYW1lfS5waHAiOw0KICAgIA0KICAgIGlmKFxpc19maWxlKCRmbikpDQogICAgew0KICAgICAgcmVxdWlyZV9vbmNlKCRmbik7DQogICAgICANCiAgICAgIHJldHVybiBUUlVFOw0KICAgIH0NCiAgICANCiAgICAvLyBjaGVjayBmb3IgaW50ZXJmYWNlcw0KICAgICRmbiA9ICRwYXRoIC4gIi9pbnRlcmZhY2UueyRjbGFzc25hbWV9LnBocCI7DQogICAgDQogICAgaWYoXGlzX2ZpbGUoJGZuKSkNCiAgICB7DQogICAgICByZXF1aXJlX29uY2UoJGZuKTsNCiAgICAgIA0KICAgICAgcmV0dXJuIFRSVUU7DQogICAgfQ0KICAgIA0KICAgIC8vIGNoZWNrIGZvciB0cmFpdHMNCiAgICAkZm4gPSAkcGF0aCAuICIvdHJhaXQueyRjbGFzc25hbWV9LnBocCI7DQogICAgDQogICAgaWYoXGlzX2ZpbGUoJGZuKSkNCiAgICB7DQogICAgICByZXF1aXJlX29uY2UoJGZuKTsNCiAgICAgIA0KICAgICAgcmV0dXJuIFRSVUU7DQogICAgfQ0KICAgIA0KICAgIC8vIGNoZWNrIGZvciBhIG1hc3RlciBmaWxlDQogICAgJGZuID0gJHRoaXMtPkdldE1vZHVsZVBhdGgoKSAuICcvbGliL2V4dHJhY2xhc3Nlcy5waHAnOw0KICAgIA0KICAgIGlmKFxpc19maWxlKCRmbikpDQogICAgew0KICAgICAgcmVxdWlyZV9vbmNlKCRmbik7DQogICAgICANCiAgICAgIHJldHVybiBUUlVFOw0KICAgIH0NCiAgICANCiAgICAvLyBjaGVjayBmb3IgYWN0aW9uIGFuZCBtb2R1bGVfZGF0YSBjbGFzc2VzDQogICAgaWYoIFxzdGFydHN3aXRoKCRjbGFzc25hbWUsICdhY3Rpb25fJykgfHwgXHN0YXJ0c3dpdGgoJGNsYXNzbmFtZSwgJ21kXycpICkNCiAgICB7DQogICAgICAkZm4gPSAkdGhpcy0+R2V0TW9kdWxlUGF0aCgpIC4gJy9tb2R1bGVfZGF0YS8nIC4gInskY2xhc3NuYW1lfS5waHAiOw0KICAgICAgDQogICAgICBpZihcaXNfZmlsZSgkZm4pKQ0KICAgICAgew0KICAgICAgICByZXF1aXJlX29uY2UoJGZuKTsNCiAgICAgICAgDQogICAgICAgIHJldHVybiBUUlVFOw0KICAgICAgfQ0KICAgIH0NCiAgICANCiAgICByZXR1cm4gRkFMU0U7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcmV0dXJuIG1peGVkDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gR2V0RXh0ZW5kZWRDb25maWcoKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5jb25maWc7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcmV0dXJuIG1peGVkDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gR2V0RXh0ZW5kZWRQcmVmZXJlbmNlcygpDQogIHsNCiAgICByZXR1cm4gJHRoaXMtPnByZWZlcmVuY2VzOw0KICB9DQogIA0KICAvKioNCiAgICogQGlnbm9yZQ0KICAgKiBAZGVwcmVjYXRlZA0KICAgKi8NCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldF91dGlscygpIDogaW50ZXJuYWxfdXRpbHMNCiAgew0KICAgIHN0YXRpYyAkX29iajsNCiAgICBpZighJF9vYmopDQogICAgew0KICAgICAgJF9vYmogPSBuZXcgaW50ZXJuYWxfdXRpbHMoJHRoaXMtPmdldF94dCgpKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICRfb2JqOw0KICB9DQogIA0KICAvKioNCiAgICogQGlnbm9yZQ0KICAgKiBAZGVwcmVjYXRlZA0KICAgKi8NCiAgcHJpdmF0ZSBmdW5jdGlvbiBfbG9hZF9mb3JtKCkNCiAgew0KICAgIHJlcXVpcmVfb25jZShfX0RJUl9fIC4gJy9mb3JtX3Rvb2xzLnBocCcpOw0KICB9DQogIA0KICAvKioNCiAgICogRm9yIGFkbWluIHJlcXVlc3RzIG9ubHksIHBhc3MgdmFyaWFibGVzIHNvIHRoYXQgdGhlIHNwZWNpZmllZCB0YWIgd2lsbCBiZSBkaXNwbGF5ZWQNCiAgICogYnkgZGVmYXVsdCBpbiB0aGUgcmVzdWx0aW5nIGFjdGlvbi4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkaWdub3JlZCAob2xkIGFjdGlvbmlkIHBhcmFtKQ0KICAgKiBAcGFyYW0gc3RyaW5nICR0YWIgICAgIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXINCiAgICogQHBhcmFtIHN0cmluZyAkcGFyYW1zICBFeHRyYSBwYXJhbWV0ZXJzIGZvciB0aGUgcmVxdWVzdA0KICAgKiBAcGFyYW0gc3RyaW5nICRhY3Rpb24gIFRoZSBkZXNpZ25hdGVkIG1vZHVsZSBhY3Rpb24uICBJZiBub25lIGlzIHNwZWNpZmllZCAnZGVmYXVsdGFkbWluJyBpcyBhc3N1bWVkLg0KICAgKg0KICAgKiBAcmV0dXJuIHZvaWQNCiAgICovDQogIGZ1bmN0aW9uIFJlZGlyZWN0VG9UYWIoJGlnbm9yZWQgPSAnJywgJHRhYiA9ICcnLCAkcGFyYW1zID0gJycsICRhY3Rpb24gPSAnJykNCiAgew0KICAgIGlmKCEkYWN0aW9uKQ0KICAgIHsNCiAgICAgICRhY3Rpb24gPSAkdGhpcy0+X2N1cnJlbnRfYWN0aW9uOw0KICAgIH0NCiAgICAkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCR0YWIsICRwYXJhbXMsICRhY3Rpb24pOw0KICB9DQogIA0KICAvKioNCiAgICogQGlnbm9yZQ0KICAgKi8NCiAgZnVuY3Rpb24gWFRSZWRpcmVjdCgkaWQsICRhY3Rpb24sICRyZXR1cm5pZCA9ICcnLCAkcGFyYW1zID0gYXJyYXkoKSwgJGlubGluZSA9IEZBTFNFKQ0KICB7DQogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwgJGFjdGlvbiwgJHJldHVybmlkLCAkcGFyYW1zLCAkaW5saW5lKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIFRlc3QgaWYgdGhlIGN1cnJlbnQgcmVxdWVzdCBpcyBhbiBhZG1pbiByZXF1ZXN0Lg0KICAgKg0KICAgKiBAcmV0dXJuIGJvb2wgVHJ1ZSBmb3IgYW4gYWRtaW4gYWN0aW9uLCBmYWxzZSBvdGhlcndpc2UuDQogICAqIEB0aHJvd3MgXENtc0ludmFsaWREYXRhRXhjZXB0aW9uDQogICAqIEBkZXByZWNhdGVkDQogICAqLw0KICBmdW5jdGlvbiBJc0FkbWluQWN0aW9uKCkNCiAgew0KICAgICRnQ21zID0gJHRoaXMtPmNtczsNCiAgICBpZigNCiAgICAgICRnQ21zLT50ZXN0X3N0YXRlKENtc0FwcDo6U1RBVEVfQURNSU5fUEFHRSkgJiYgISRnQ21zLT50ZXN0X3N0YXRlKENtc0FwcDo6U1RBVEVfSU5TVEFMTCkgJiYNCiAgICAgICEkZ0Ntcy0+dGVzdF9zdGF0ZShDbXNBcHA6OlNUQVRFX1NUWUxFU0hFRVQpDQogICAgKQ0KICAgIHsNCiAgICAgIHJldHVybiBUUlVFOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gRkFMU0U7DQogIH0NCiAgDQogIC8qKg0KICAgKiBTZXQgdGhlIGN1cnJlbnQgYWN0aW9uIGZvciB0aGUgbmV4dCByZXF1ZXN0IG9mIHRoZSBhZG1pbiBjb25zb2xlLg0KICAgKiBVc2VkIGZvciB0aGUgdmFyaW91cyBhZG1pbiBmb3Jtcy4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkYWN0aW9uIFRoZSBhY3Rpb24gbmFtZQ0KICAgKi8NCiAgZnVuY3Rpb24gU2V0Q3VycmVudEFjdGlvbihzdHJpbmcgJGFjdGlvbikNCiAgew0KICAgICRhY3Rpb24gICAgICAgICAgICAgICAgPSBcdHJpbSgkYWN0aW9uKTsNCiAgICAkdGhpcy0+X2N1cnJlbnRfYWN0aW9uID0gJGFjdGlvbjsNCiAgfQ0KICANCiAgDQogIC8qKg0KICAgKiBBIGZ1bmN0aW9uIGZvciB1c2luZyBhIHRlbXBsYXRlIHRvIGRpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZS4NCiAgICogVGhpcyBtZXRob2QgaXMgc3VpdGFibGUgZm9yIGZyb250ZW5kIGRpc3BsYXlzLg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICR0eHQgICBUaGUgZXJyb3IgbWVzc2FnZQ0KICAgKiBAcGFyYW0gc3RyaW5nICRjbGFzcyBBbiBvcHRpb25hbCBjbGFzcyBhdHRyaWJ1dGUgdmFsdWUuDQogICAqDQogICAqIEB0aHJvd3MgXFNtYXJ0eUV4Y2VwdGlvbg0KICAgKiBAZGVwcmVjYXRlZA0KICAgKi8NCiAgZnVuY3Rpb24gRGlzcGxheUVycm9yTWVzc2FnZShzdHJpbmcgJHR4dCwgc3RyaW5nICRjbGFzcyA9ICdhbGVydCBhbGVydC1kYW5nZXInKQ0KICB7DQogICAgJHRwbCA9ICR0aGlzLT5nZXRfeHQoKS0+Q3JlYXRlU21hcnR5VGVtcGxhdGUoJ2Vycm9yLnRwbCcpOw0KICAgICR0cGwtPmFzc2lnbigneHRfZXJyb3JjbGFzcycsICRjbGFzcyk7DQogICAgJHRwbC0+YXNzaWduKCd4dF9lcnJvcm1zZycsICR0eHQpOw0KICAgIA0KICAgIHJldHVybiAkdHBsLT5mZXRjaCgpOw0KICB9DQogIA0KICANCiAgLyoqDQogICAqIEdldCB0aGUgQ01TTVNFeHQgbW9kdWxlDQogICAqLw0KICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0X3h0KCkgOiBDTVNNU0V4dA0KICB7DQogICAgc3RhdGljICRfb2JqOw0KICAgIA0KICAgIGlmKCEkX29iaikNCiAgICB7DQogICAgICAkX29iaiA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnQ01TTVNFeHQnKTsNCiAgICAgIA0KICAgICAgaWYoISRfb2JqKQ0KICAgICAgew0KICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0NNU01TRXh0IG1vZHVsZSBub3QgbG9hZGFibGUuLiBkb2VzIGl0IG5lZWQgYW4gdXBncmFkZT8nKTsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgcmV0dXJuICRfb2JqOw0KICB9DQogIA0KDQogIA0KICAvKioNCiAgICogQSBmdW5jdGlvbiB0byByZXR1cm4gYW4gYXJyYXkgb2Ygb2YgY291bnRyeSBjb2RlcyBhbmQgY291bnRyeSBuYW1lcy4NCiAgICogVGhpcyBtZXRob2QgcmV0dXJucyBkYXRhIHN1aXRhYmxlIGZvciBnaXZpbmcgdG8gc21hcnR5IGFuZCBkaXNwbGF5aW5nIGluIGEgZHJvcGRvd24uDQogICAqDQogICAqIEByZXR1cm4gYXJyYXl8bnVsbA0KICAgKiBAZGVwcmVjYXRlZA0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIGdldF9jb3VudHJ5X2xpc3Rfb3B0aW9ucygpDQogIHsNCiAgICAkeHQgPSAkdGhpcy0+Z2V0X3h0KCk7DQogICAgJGZuICA9ICR4dC0+ZmluZF9tb2R1bGVfZmlsZSgnZXRjL2NvdW50cmllcy5qc29uJyk7DQogICAgaWYoJGZuKQ0KICAgIHsNCiAgICAgIHJldHVybiBcanNvbl9kZWNvZGUoXGZpbGVfZ2V0X2NvbnRlbnRzKCRmbiksIFRSVUUpOw0KICAgIH0NCiAgfQ0KICANCiAgLyoqDQogICAqIEdldCBhIGxpc3Qgb2YgY3VycmVuY3kgY29kZXMgYW5kIHRoZWlyIG5hbWVzLg0KICAgKg0KICAgKiBAcmV0dXJuIGFycmF5fG51bGwNCiAgICogQHRocm93cyBcSnNvbkV4Y2VwdGlvbg0KICAgKiBAZGVwcmVjYXRlZA0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIGdldF9jdXJyZW5jeV9saXN0X29wdGlvbnMoKQ0KICB7DQogICAgJHh0ID0gJHRoaXMtPmdldF94dCgpOw0KICAgICRmbiAgPSAkeHQtPmZpbmRfbW9kdWxlX2ZpbGUoJ2V0Yy9jdXJyZW5jaWVzLmpzb24nKTsNCiAgICBpZigkZm4pDQogICAgew0KICAgICAgcmV0dXJuIFxqc29uX2RlY29kZShcZmlsZV9nZXRfY29udGVudHMoJGZuKSwgVFJVRSwgNTEyLCBcSlNPTl9USFJPV19PTl9FUlJPUik7DQogICAgfQ0KICB9DQogIA0KICAvKioNCiAgICogQSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0byBnZXQgdGhlIGNvdW50cnkgbmFtZSBnaXZlbiB0aGUgYWNyb255bQ0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICR0aGVfYWNyb255bQ0KICAgKg0KICAgKiBAcmV0dXJuIHN0cmluZw0KICAgKiBAZGVwcmVjYXRlZA0KICAgKi8NCiAgZnVuY3Rpb24gR2V0Q291bnRyeShzdHJpbmcgJHRoZV9hY3JvbnltKQ0KICB7DQogICAgJGxpc3QgPSAkdGhpcy0+Z2V0X2NvdW50cnlfbGlzdF9vcHRpb25zKCk7DQogICAgDQogICAgcmV0dXJuICRsaXN0WyR0aGVfYWNyb255bV0gPz8gTlVMTDsNCiAgfQ0KICANCiAgDQogIC8qKg0KICAgKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3RhdGUgbmFtZSBnaXZlbiB0aGUgYWNyb255bQ0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICR0aGVfYWNyb255bQ0KICAgKg0KICAgKiBAcmV0dXJuIHN0cmluZw0KICAgKiBAZGVwcmVjYXRlZA0KICAgKi8NCiAgZnVuY3Rpb24gR2V0U3RhdGUoc3RyaW5nICR0aGVfYWNyb255bSkNCiAgew0KICAgICRsaXN0ID0gJHRoaXMtPmdldF9zdGF0ZV9saXN0X29wdGlvbnMoKTsNCiAgICANCiAgICByZXR1cm4gJGxpc3RbJHRoZV9hY3JvbnltXSA/PyBOVUxMOw0KICB9DQogIA0KICANCiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KICAvKiBJTUFHRSBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KICANCiAgLyoqDQogICAqIEBpZ25vcmUNCiAgICovDQogIGZ1bmN0aW9uIFRyYW5zZm9ybUltYWdlKCRzcmNTcGVjLCAkZGVzdFNwZWMsICRzaXplID0gJycpDQogIHsNCiAgICByZXR1cm4geHRfaW1hZ2U6OnRyYW5zZm9ybV9pbWFnZSgkc3JjU3BlYywgJGRlc3RTcGVjLCAkc2l6ZSk7DQogIH0NCiAgDQoNCiAgDQogIA0KICAvKioNCiAgICogQSBjb252ZW5pZW5jZSBtZXRob2QgdG8gZGlzcGxheSBhbiBpbWFnZS4NCiAgICogVGhpcyBtZXRob2Qgd2lsbCBhdXRvbWF0aWNhbGx5IHNlYXJjaCB0aHJvdWdoIGFkZGVkIGltYWdlIGRpcnMgZm9yIGZyb250ZW5kIGFuZCBhZG1pbiByZXF1ZXN0cw0KICAgKiBhbmQgdGhyb3VnaCB0aGUgYWRtaW4gdGhlbWUgZGlyZWN0b3JpZXMgZm9yIGFkbWluIHJlcXVlc3RzLg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRpbWFnZSAgVGhlIGJhc2VuYW1lIGZvciB0aGUgZGVzaXJlZCBpbWFnZS4NCiAgICogQHBhcmFtIHN0cmluZyAkYWx0ICAgIFRoZSBhbHQgYXR0cmlidXRlIGZvciB0aGUgdGFnDQogICAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzICBWYWx1ZSBmb3IgdGhlIGNsYXNzIGF0dHJpYnV0ZQ0KICAgKiBAcGFyYW0gaW50ICAgICR3aWR0aCAgV2lkdGggaW4gcGl4ZWxzDQogICAqIEBwYXJhbSBpbnQgICAgJGhlaWdodCBIZWlnaHQgaW4gcGl4ZWxzDQogICAqDQogICAqIEByZXR1cm4gc3RyaW5nDQogICAqIEBkZXByZWNhdGVkDQogICAqIEBzZWUgeHRfdGFnczo6Y3JlYXRlX2ltYWdlDQogICAqIEBzZWUgQWRkSW1hZ2VEaXIuDQogICAqLw0KICBmdW5jdGlvbiBEaXNwbGF5SW1hZ2Uoc3RyaW5nICRpbWFnZSwgc3RyaW5nICRhbHQgPSAnJywgc3RyaW5nICRjbGFzcyA9ICcnLCBpbnQgJHdpZHRoID0gTlVMTCwgJGhlaWdodCA9IE5VTEwpDQogIHsNCiAgICByZXR1cm4gJHRoaXMtPmdldF91dGlscygpLT5EaXNwbGF5SW1hZ2UoJHRoaXMsICRpbWFnZSwgJGFsdCwgJGNsYXNzLCAkd2lkdGgsICRoZWlnaHQpOw0KICB9DQogIA0KICAvKioNCiAgICogQWRkIGEgZGlyZWN0b3J5IHRvIHRoZSBsaXN0IG9mIHNlYXJjaGFibGUgZGlyZWN0b3JpZXMNCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkZGlyIEEgZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHRoaXMgbW9kdWxlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuDQogICAqLw0KICBmdW5jdGlvbiBBZGRJbWFnZURpcigkZGlyKQ0KICB7DQogICAgIyBhIG1vZHVsZSBtYXkgZmFpbCB0byBsb2FkIGV4dGVuZGVkIGNvbmZpZyBmb3Igc29tZSByZWFzb246IGp1c3Qgc2tpcCB0aGlzDQogICAgaWYoICFpc3NldCgkdGhpcy0+Y29uZmlnKSApDQogICAgew0KICAgICAgJG1zZyA9IHN0YXRpYzo6Y2xhc3MgLiAnIGNvdWxkIG5vdCBnZXQgYW4gaW5zdGFuY2Ugb2YgZXh0ZW5kZWQgY29uZmlnIG9uIGxpbmUgJyAuIF9fTElORV9fOw0KICAgICAgI1xhdWRpdCgwLCBfX0NMQVNTX18sICRtc2cpOyAjIGRvbid0IGF1ZGl0IHRoaXMgdW5sZXNzIHlvdSB3YW50IHRvIGRlYnVnIGl0DQogICAgICByZXR1cm47DQogICAgfQ0KICAgIA0KICAgIGlmKCFcc3RhcnRzd2l0aCgnLycsICRkaXIpKQ0KICAgIHsNCiAgICAgICRkaXIgPSAkdGhpcy0+R2V0TW9kdWxlVXJsUGF0aCgpIC4gJy8nIC4gJGRpcjsNCiAgICAgIA0KICAgICAgJGRpciA9IFxzdHJfcmVwbGFjZSgkdGhpcy0+Y29uZmlnWydyb290X3VybCddLCAnJywgJGRpcik7DQogICAgfQ0KICAgICR0aGlzLT5faW1hZ2VfZGlyZWN0b3JpZXNbXSA9ICRkaXI7DQogIH0NCiAgDQogIC8qKg0KICAgKiBQYXJ0IG9mIHRoZSBtdWx0aXBsZSBkYXRhYmFzZSB0ZW1wbGF0ZSBmdW5jdGlvbmFsaXR5DQogICAqIHRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciBhZGRpbmcsIGVkaXRpbmcsDQogICAqIGRlbGV0aW5nIGFuZCBtYXJraW5nIGFjdGl2ZSBhbGwgdGVtcGxhdGVzIHRoYXQgbWF0Y2gNCiAgICogYSBwcmVmaXguDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJGlkICAgICAgICAgICAgICAgICAgVGhlIG1vZHVsZSBhY3Rpb24gaWQgKHBhc3MgaW4gdGhlIHZhbHVlIGZyb20gZG9hY3Rpb24pDQogICAqIEBwYXJhbSBpbnQgICAgJHJldHVybmlkICAgICAgICAgICAgVGhlIHBhZ2UgaWQgdG8gdXNlIG9uIHN1YnNlcXVlbnQgZm9ybXMgYW5kIGxpbmtzLg0KICAgKiBAcGFyYW0gc3RyaW5nICRwcmVmaXggICAgICAgICAgICAgIFRoZSB0ZW1wbGF0ZSBwcmVmaXgNCiAgICogQHBhcmFtIHN0cmluZyAkZGVmYXVsdHRlbXBsYXRlcHJlZiBUaGUgbmFtZSBvZiB0aGUgdGVtcGxhdGUgY29udGFpbmluZyB0aGUgc3lzdGVtIGRlZmF1bHQgdGVtcGxhdGUuICBUaGlzIGNhbg0KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVpdGhlciBiZSB0aGUgbmFtZSBvZiBhIGRhdGFiYXNlIHRlbXBsYXRlIG9yIGEgZmlsZW5hbWUgZW5kaW5nIHdpdGggLnRwbC4NCiAgICogQHBhcmFtIHN0cmluZyAkYWN0aXZlX3RhYiAgICAgICAgICBUaGUgdGFiIHRvIHJldHVybiB0bw0KICAgKiBAcGFyYW0gc3RyaW5nICRkZWZhdWx0cHJlZm5hbWUgICAgIFRoZSBuYW1lIG9mIHRoZSBwcmVmZXJlbmNlIHRoYXQgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZGVmYXVsdA0KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLiAgSWYgZW1wdHkgc3RyaW5nIHRoZW4gdGhlcmUgd2lsbCBiZSBubyBwb3NzaWJpbGl0eSB0byBzZXQgYSBkZWZhdWx0DQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUgZm9yIHRoaXMgbGlzdC4NCiAgICogQHBhcmFtIHN0cmluZyAkdGl0bGUgICAgICAgICAgICAgICBUaXRsZSB0ZXh0IHRvIGRpc3BsYXkgaW4gdGhlIGFkZC9lZGl0IHRlbXBsYXRlIGZvcm0NCiAgICogQHBhcmFtIHN0cmluZyAkaW5mbyAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbiB0ZXh0IHRvIGRpc3BsYXkgaW4gdGhlIGFkZC9lZGl0IHRlbXBsYXRlIGZvcm0NCiAgICogQHBhcmFtIHN0cmluZyAkZGVzdGFjdGlvbiAgICAgICAgICBUaGUgYWN0aW9uIHRvIHJldHVybiB0by4NCiAgICoNCiAgICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBDbXNMYXlvdXRUZW1wbGF0ZSBjbGFzcyhlcykgaW4gMi4wIGNhcGFibGUgbW9kdWxlcy4NCiAgICovDQogIGZ1bmN0aW9uIFNob3dUZW1wbGF0ZUxpc3QoDQogICAgJGlkLCAkcmV0dXJuaWQsICRwcmVmaXgsICRkZWZhdWx0dGVtcGxhdGVwcmVmLCAkYWN0aXZlX3RhYiwgJGRlZmF1bHRwcmVmbmFtZSwNCiAgICAkdGl0bGUsICRpbmZvID0gJycsICRkZXN0YWN0aW9uID0gJ2RlZmF1bHRhZG1pbicNCiAgKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5nZXRfeHQoKS0+X0Rpc3BsYXlUZW1wbGF0ZUxpc3QoDQogICAgICAkdGhpcywgJGlkLCAkcmV0dXJuaWQsICRwcmVmaXgsICRkZWZhdWx0dGVtcGxhdGVwcmVmLCAkYWN0aXZlX3RhYiwNCiAgICAgICRkZWZhdWx0cHJlZm5hbWUsICR0aXRsZSwgJGluZm8sICRkZXN0YWN0aW9uDQogICAgKTsNCiAgfQ0KICANCiAgDQogIC8qKg0KICAgKiBAaWdub3JlDQogICAqLw0KICBmdW5jdGlvbiBfRGlzcGxheVRlbXBsYXRlTGlzdCgNCiAgICAmJG1vZHVsZSwgJGlkLCAkcmV0dXJuaWQsICRwcmVmaXgsICRkZWZhdWx0dGVtcGxhdGVwcmVmLCAkYWN0aXZlX3RhYiwgJGRlZmF1bHRwcmVmbmFtZSwNCiAgICAkdGl0bGUsICRpbmZvID0gJycsICRkZXN0YWN0aW9uID0gJ2RlZmF1bHRhZG1pbicNCiAgKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5nZXRfdXRpbHMoKS0+X0Rpc3BsYXlUZW1wbGF0ZUxpc3QoDQogICAgICAkbW9kdWxlLCAkaWQsICRyZXR1cm5pZCwgJHByZWZpeCwgJGRlZmF1bHR0ZW1wbGF0ZXByZWYsICRhY3RpdmVfdGFiLA0KICAgICAgJGRlZmF1bHRwcmVmbmFtZSwgJHRpdGxlLCAkaW5mbywgJGRlc3RhY3Rpb24NCiAgICApOw0KICB9DQogIA0KICANCiAgLyoqDQogICAqIEdldCBhIGh1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2UgZm9yIGFuIHVwbG9hZCBjb2RlLg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRjb2RlIFRoZSB1cGxvYWQgZXJyb3IgY29kZS4NCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICogQGRlcHJlY2F0ZWQNCiAgICogQHNlZSB4dF9maWxldXBsb2FkDQogICAqLw0KICBmdW5jdGlvbiBHZXRVcGxvYWRFcnJvck1lc3NhZ2Uoc3RyaW5nICRjb2RlKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5nZXRfeHQoKS0+TGFuZygkY29kZSk7DQogIH0NCiAgDQogIA0KICAvKioNCiAgICogQGlnbm9yZQ0KICAgKi8NCiAgZnVuY3Rpb24gaXNfYWxpYXMoc3RyaW5nICRzdHIpDQogIHsNCiAgICBpZighXHByZWdfbWF0Y2goJy9eW1wtXF9cd10rJC8nLCAkc3RyKSkgeyByZXR1cm4gRkFMU0U7IH0NCiAgICANCiAgICByZXR1cm4gVFJVRTsNCiAgfQ0KICANCiAgDQogIC8qKg0KICAgKiBAaWdub3JlDQogICAqLw0KICBmaW5hbCBwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0X2FjdGlvbl9pZChzdHJpbmcgJGlkID0gTlVMTCl7ICR0aGlzLT5fYWN0aW9uaWQgPSAkaWQ7IH0NCiAgDQogIC8qKg0KICAgKiBAaWdub3JlDQogICAqLw0KICBmaW5hbCBwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0X2FjdGlvbl9uYW1lKHN0cmluZyAkbmFtZSl7ICR0aGlzLT5fYWN0aW9ubmFtZSA9ICRuYW1lOyB9DQogIA0KICAvKioNCiAgICogQGlnbm9yZQ0KICAgKi8NCiAgZmluYWwgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldF9hY3Rpb25fbmFtZSgpeyByZXR1cm4gJHRoaXMtPl9hY3Rpb25uYW1lOyB9DQogIA0KICAvKioNCiAgICogUmV0dXJuIHRoZSBjdXJyZW50IGFjdGlvbiBpZA0KICAgKg0KICAgKiBAZGVwY3JlYXRlZA0KICAgKiBAcmV0dXJuIGludA0KICAgKiBAaW50ZXJuYWwNCiAgICovDQogIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRfYWN0aW9uX2lkKCkNCiAgew0KICAgIGlmKCR0aGlzLT5fYWN0aW9uaWQpDQogICAgew0KICAgICAgcmV0dXJuICR0aGlzLT5fYWN0aW9uaWQ7DQogICAgfQ0KICAgIGlmKCEkdGhpcy0+Y21zLT5pc19mcm9udGVuZF9yZXF1ZXN0KCkpDQogICAgew0KICAgICAgcmV0dXJuICdtMV8nOw0KICAgIH0NCiAgfQ0KICANCiAgDQogIC8qKg0KICAgKiBSZXR1cm4gdGhlIGN1cnJlbnQgYWN0aW9uIGlkDQogICAqDQogICAqIEBkZXBjcmVhdGVkDQogICAqIEByZXR1cm4gaW50DQogICAqIEBpbnRlcm5hbA0KICAgKi8NCiAgZnVuY3Rpb24gR2V0QWN0aW9uSWQoKQ0KICB7DQogICAgaWYoIVxtZXRob2RfZXhpc3RzKCR0aGlzLCAnZ2V0X2FjdGlvbl9pZCcpICYmIFxNT0RfQ01TTVNFWFQgIT0gJHRoaXMtPkdldE5hbWUoKSkNCiAgICB7DQogICAgICBkaWUoJ0ZBVEFMIEVSUk9SOiBBIG1vZHVsZSBkZXJpdmVkIGZyb20gQ01TTVNFeHQgaXMgbm90IGhhbmRsaW5nIHRoZSBnZXRfYWN0aW9uX2lkIG1ldGhvZCcpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHRoaXMtPmdldF9hY3Rpb25faWQoKTsNCiAgfQ0KICANCiAgDQogIC8qKg0KICAgKiBHZXQgYSBmb3JtIGZvciBhZGRpbmcgb3IgZWRpdGluZyBhIHNpbmdsZSB0ZW1wbGF0ZS4NCiAgICoNCiAgICogQHBhcmFtIENNU01TRXh0ICRtb2R1bGUgICBBIENNU01TRXh0IG1vZHVsZSByZWZlcmVuY2UNCiAgICogQHBhcmFtIHN0cmluZyAgICAgICAkaWQNCiAgICogQHBhcmFtIGludCAgICAgICAgICAkcmV0dXJuaWQNCiAgICogQHBhcmFtIHN0cmluZyAgICAgICAkdG1wbG5hbWUgVGhlIG5hbWUgb2YgdGhlIHRlbXBsYXRlIHRvIGVkaXQNCiAgICogQHBhcmFtIHN0cmluZyAgICAgICAkYWN0aXZlX3RhYg0KICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICR0aXRsZQ0KICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICRmaWxlbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZSAoaW4gdGhlIG1vZHVsZSdzIHRlbXBsYXRlIGRpcmVjdG9yeSkgY29udGFpbmluZyB0aGUgc3lzdGVtDQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgdGVtcGxhdGUuDQogICAqIEBwYXJhbSBzdHJpbmcgICAgICAgJGluZm8NCiAgICogQHBhcmFtIHN0cmluZyAgICAgICAkZGVzdGFjdGlvbg0KICAgKiBAcGFyYW0gaW50ICAgICAgICAgICRzaW1wbGUNCiAgICoNCiAgICogQGRlcHJlY2F0ZWQNCiAgICogQHNlZSB4dF90ZW1wbGF0ZV9hZG1pbjo6Z2V0X3NpbmdsZV90ZW1wbGF0ZV9mb3JtDQogICAqLw0KICBmdW5jdGlvbiBHZXRTaW5nbGVUZW1wbGF0ZUZvcm0oDQogICAgJiRtb2R1bGUsICRpZCwgJHJldHVybmlkLCAkdG1wbG5hbWUsICRhY3RpdmVfdGFiLCAkdGl0bGUsICRmaWxlbmFtZSwgJGluZm8gPSAnJywgJGRlc3RhY3Rpb24gPSAnZGVmYXVsdGFkbWluJywNCiAgICAkc2ltcGxlID0gMA0KICApDQogIHsNCiAgICByZXR1cm4geHRfdGVtcGxhdGVfYWRtaW46OmdldF9zaW5nbGVfdGVtcGxhdGVfZm9ybSgNCiAgICAgICRtb2R1bGUsICRpZCwgJHJldHVybmlkLCAkdG1wbG5hbWUsICRhY3RpdmVfdGFiLCAkdGl0bGUsICRmaWxlbmFtZSwNCiAgICAgICRpbmZvLCAkZGVzdGFjdGlvbiwgJHNpbXBsZQ0KICAgICk7DQogIH0NCiAgDQogIA0KICAvKioNCiAgICogUmV0cmlldmUgYSBodW1hbiByZWFkYWJsZSBzdHJpbmcgZm9yIGFueSBlcnJvciBnZW5lcmF0ZWQgZHVyaW5nIHdhdGVybWFya2luZy4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkZXJyb3IgdGhlIHdhdGVybWFya2luZyBlcnJvciBjb2RlDQogICAqDQogICAqIEByZXR1cm4gc3RyaW5nDQogICAqIEBkZXByZWNhdGVkDQogICAqLw0KICBmdW5jdGlvbiBHZXRXYXRlcm1hcmtFcnJvcihzdHJpbmcgJGVycm9yKQ0KICB7DQogICAgaWYoZW1wdHkoJGVycm9yKSB8fCAwID09PSAkZXJyb3IpIHsgcmV0dXJuICcnOyB9DQogIA0KICAgIHJldHVybiAkdGhpcy0+Z2V0X3h0KCktPkxhbmcoJ3dhdGVybWFya2Vycm9yXycgLiAkZXJyb3IpOw0KICB9DQogIA0KICANCiAgLyoqDQogICAqIEEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGNsZWFyIGFueSBzZXNzaW9uIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbW9kdWxlLg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgSWYgbm90IHNwZWNpZmllZCBjbGVhciBhbGwgc2Vzc2lvbiBkYXRhIHJlbGF0aXZlIHRvIHRoaXMgbW9kdWxlLiINCiAgICovDQogIGZ1bmN0aW9uIHNlc3Npb25fY2xlYXIoc3RyaW5nICRrZXkgPSAnJykNCiAgew0KICAgICRwa2V5ID0gJ2MnIC4gXG1kNShfX0ZJTEVfXyAuIFxnZXRfY2xhc3MoJHRoaXMpKTsNCiAgICBpZihlbXB0eSgka2V5KSkNCiAgICB7DQogICAgICB1bnNldCgkX1NFU1NJT05bJHBrZXldKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgIHVuc2V0KCRfU0VTU0lPTlskcGtleV1bJGtleV0pOw0KICAgIH0NCiAgfQ0KICANCiAgLyoqDQogICAqIEEgY29udmVuaWVuY2UgbWV0aG9kIHRvIHN0b3JlIHNvbWUgc2Vzc2lvbiBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1vZHVsZS4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAka2V5ICAgVGhlIHZhcmlhYmxlIGtleS4NCiAgICogQHBhcmFtIG1peGVkICAkdmFsdWUgVGhlIGRhdGEgdG8gc3RvcmUuDQogICAqLw0KICBmdW5jdGlvbiBzZXNzaW9uX3B1dChzdHJpbmcgJGtleSwgJHZhbHVlKQ0KICB7DQogICAgJHBrZXkgPSAnYycgLiBcbWQ1KF9fRklMRV9fIC4gXGdldF9jbGFzcygkdGhpcykpOw0KICAgIGlmKCFpc3NldCgkX1NFU1NJT05bJHBrZXldKSkNCiAgICB7DQogICAgICAkX1NFU1NJT05bJHBrZXldID0gW107DQogICAgfQ0KICAgICRfU0VTU0lPTlskcGtleV1bJGtleV0gPSAkdmFsdWU7DQogIH0NCiAgDQogIC8qKg0KICAgKiBBIGNvbnZlbmllbmNlIG1ldGhvZCB0byByZXRyaWV2ZSBzb21lIHNlc3Npb24gZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtb2R1bGUuDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJGtleSAgICAgICBUaGUgdmFyaWFibGUga2V5Lg0KICAgKiBAcGFyYW0gbWl4ZWQgICRkZmx0dmFsdWUgIlRoZSBkZWZhdWx0IHZhbHVlIHRvIHJldHVybiBpZiB0aGUgc3BlY2lmaWVkIGRhdGEgZG9lcyBub3QgZXhpc3QuIg0KICAgKg0KICAgKiBAcmV0dXJuIG1peGVkLg0KICAgKi8NCiAgZnVuY3Rpb24gc2Vzc2lvbl9nZXQoc3RyaW5nICRrZXksICRkZmx0dmFsdWUgPSAnJykNCiAgew0KICAgICRwa2V5ID0gJ2MnIC4gXG1kNShfX0ZJTEVfXyAuIFxnZXRfY2xhc3MoJHRoaXMpKTsNCiAgICANCiAgICBpZighaXNzZXQoJF9TRVNTSU9OWyRwa2V5XSkpIHsgcmV0dXJuICRkZmx0dmFsdWU7IH0NCiAgDQogICAgcmV0dXJuICRfU0VTU0lPTlskcGtleV1bJGtleV0gPz8gJGRmbHR2YWx1ZTsNCiAgfQ0KICANCiAgDQogIC8qKg0KICAgKiBSZXR1cm4gZGF0YSBpZGVudGlmaWVkIGJ5IGEga2V5IGVpdGhlciBmcm9tIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzLCBvciBmcm9tIHNlc3Npb24uDQogICAqDQogICAqIEBwYXJhbSBhcnJheSAgJHBhcmFtcyAgICAgICBJbnB1dCBwYXJhbWV0ZXJzDQogICAqIEBwYXJhbSBzdHJpbmcgJGtleSAgICAgICAgICBUaGUgZGF0YSBrZXkNCiAgICogQHBhcmFtIHN0cmluZyAkZGVmYXVsdHZhbHVlIFRoZSBkYXRhIHRvIHJldHVybiBpZiB0aGUgc3BlY2lmaWVkIGRhdGEgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHNlc3Npb24gb3IgaW4gdGhlIGlucHV0DQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLg0KICAgKg0KICAgKiBAcmV0dXJuIG1peGVkLg0KICAgKi8NCiAgZnVuY3Rpb24gcGFyYW1fc2Vzc2lvbl9nZXQoJiRwYXJhbXMsICRrZXksICRkZWZhdWx0dmFsdWUgPSAnJykNCiAgew0KICAgIGlmKGlzc2V0KCRwYXJhbXNbJGtleV0pKQ0KICAgIHsNCiAgICAgIHJldHVybiAkcGFyYW1zWyRrZXldOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHRoaXMtPnNlc3Npb25fZ2V0KCRrZXksICRkZWZhdWx0dmFsdWUpOw0KICB9DQogIA0KICANCiAgLyoqDQogICAqIEdpdmVuIGEgcGFnZSBhbGlhcyByZXNvbHZlIGl0IHRvIGEgcGFnZSBpZC4NCiAgICoNCiAgICogQHBhcmFtIG1peGVkICR0eHQgIFRoZSBwYWdlIGFsaWFzIHRvIHJlc29sdmUuICBJZiBhbiBpbnRlZ2VyIHBhZ2UgaWQgaXMgcGFzc2VkIGluIHRoYXQgaXMgYWNjZXB0YWJsZSBhcyB3ZWxsLg0KICAgKiBAcGFyYW0gaW50ICAgJGRmbHQgVGhlIGRlZmF1bHQgcGFnZSBpZCB0byByZXR1cm4gaWYgbm8gbWF0Y2ggY2FuIGJlIGZvdW5kDQogICAqDQogICAqIEByZXR1cm4gaW50DQogICAqLw0KICBmdW5jdGlvbiByZXNvbHZlX2FsaWFzX29yX2lkKCR0eHQsIGludCAkZGZsdCA9IE5VTEwpDQogIHsNCiAgICAkdHh0ID0gXHRyaW0oKHN0cmluZykkdHh0KTsNCiAgICBpZighJHR4dCkNCiAgICB7DQogICAgICByZXR1cm4gJGRmbHQ7DQogICAgfQ0KICAgICRtYW5hZ2VyID0gJHRoaXMtPmNtcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOw0KICAgICRub2RlICAgID0gTlVMTDsNCiAgICBpZihcaXNfbnVtZXJpYygkdHh0KSAmJiAoaW50KSR0eHQgPiAwKQ0KICAgIHsNCiAgICAgICRub2RlID0gJG1hbmFnZXItPmZpbmRfYnlfdGFnKCdpZCcsIChpbnQpJHR4dCk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkbm9kZSA9ICRtYW5hZ2VyLT5maW5kX2J5X3RhZygnYWxpYXMnLCAkdHh0KTsNCiAgICB9DQogICAgaWYoJG5vZGUpDQogICAgew0KICAgICAgcmV0dXJuIChpbnQpJG5vZGUtPmdldF90YWcoJ2lkJyk7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkZGZsdDsNCiAgfQ0KICANCiAgDQogIC8qKg0KICAgKiBQZXJmb3JtIGFuIEhUVFAgcG9zdCByZXF1ZXN0Lg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRVUkwgICAgIHRoZSB1cmwgdG8gcG9zdCB0bw0KICAgKiBAcGFyYW0gYXJyYXkgICRkYXRhICAgIFRoZSBhcnJheSB0byBwb3N0Lg0KICAgKiBAcGFyYW0gc3RyaW5nICRyZWZlcmVyIEFuIG9wdGlvbmFsIHJlZmVycmVyIHN0cmluZy4NCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICogQGRlcHJlY2F0ZWQNCiAgICogQHNlZSB4dF9odHRwDQogICAqLw0KICBmdW5jdGlvbiBodHRwX3Bvc3QoJFVSTCwgJGRhdGEgPSAnJywgJHJlZmVyZXIgPSAnJykNCiAgew0KICAgIHJldHVybiB4dF9odHRwOjpwb3N0KCRVUkwsICRkYXRhLCAkcmVmZXJlcik7DQogIH0NCiAgDQogIA0KICAvKioNCiAgICogUGVyZm9ybSBhbiBIVFRQIEdFVCByZXF1ZXN0Lg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRVUkwgICAgIHRoZSB1cmwgdG8gcG9zdCB0bw0KICAgKiBAcGFyYW0gc3RyaW5nICRyZWZlcmVyIEFuIG9wdGlvbmFsIHJlZmVycmVyIHN0cmluZy4NCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICogQHNlZSB4dF9odHRwDQogICAqIEBkZXByZWNhdGVkDQogICAqLw0KICBmdW5jdGlvbiBodHRwX2dldChzdHJpbmcgJFVSTCwgc3RyaW5nICRyZWZlcmVyID0gJycpDQogIHsNCiAgICByZXR1cm4geHRfaHR0cDo6Z2V0KCRVUkwsICRyZWZlcmVyKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIFNpbWlsYXIgdG8gR2V0UHJlZmVyZW5jZSBleGNlcHQgdGhlIGRlZmF1bHQgdmFsdWUgaXMgdXNlZCBldmVuIGlmIHRoZSBwcmVmZXJlbmNlIGV4aXN0cywgYnV0IGlzIGJsYW5rLg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRwcmVmX25hbWUgICBUaGUgcHJlZmVyZW5jZSBuYW1lDQogICAqIEBwYXJhbSBzdHJpbmcgJGRmbHRfdmFsdWUgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgcHJlZmVyZW5jZSBpZiBub3Qgc2V0IChvciBlbXB0eSkNCiAgICogQHBhcmFtIGJvb2wgICAkYWxsb3dfZW1wdHkgV2hldGhlciB0aGUgZGVmYXVsdCB2YWx1ZSBzaG91bGQgYmUgdXNlZCBpZiB0aGUgcHJlZmVyZW5jZSBleGlzdHMsIGJ1dCBpcyBlbXB0eS4NCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcuDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gWFRHZXRQcmVmZXJlbmNlKCRwcmVmX25hbWUsICRkZmx0X3ZhbHVlID0gTlVMTCwgJGFsbG93X2VtcHR5ID0gRkFMU0UpDQogIHsNCiAgICAkdG1wID0gXHRyaW0oKHN0cmluZykkdGhpcy0+R2V0UHJlZmVyZW5jZSgkcHJlZl9uYW1lLCAkZGZsdF92YWx1ZSkpOw0KICAgIGlmKCFlbXB0eSgkdG1wKSB8fCBcaXNfbnVtZXJpYygkdG1wKSkgeyByZXR1cm4gJHRtcDsgfQ0KICAgIA0KICAgIGlmKCRhbGxvd19lbXB0eSkgeyByZXR1cm4gJHRtcDsgfQ0KICAgIA0KICAgIHJldHVybiAkZGZsdF92YWx1ZTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEEgd3JhcHBlciB0byBnZXQgYSBtb2R1bGUgc3BlY2lmaWMgdXNlciBwcmVmZXJlbmNlLg0KICAgKiB0aGlzIG1ldGhvZCBvbmx5IGFwcGxpZXMgdG8gYWRtaW4gdXNlcnMuDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJHByZWZfbmFtZSAgIFRoZSBwcmVmZXJlbmNlIG5hbWUNCiAgICogQHBhcmFtIHN0cmluZyAkZGZsdF92YWx1ZSAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBwcmVmZXJlbmNlIGlmIG5vdCBzZXQgKG9yIGVtcHR5KQ0KICAgKiBAcGFyYW0gYm9vbCAgICRhbGxvd19lbXB0eSBXaGV0aGVyIHRoZSBkZWZhdWx0IHZhbHVlIHNob3VsZCBiZSB1c2VkIGlmIHRoZSBwcmVmZXJlbmNlIGV4aXN0cywgYnV0IGlzIGVtcHR5Lg0KICAgKg0KICAgKiBAcmV0dXJuIHN0cmluZy4NCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBYVEdldFVzZXJQcmVmZXJlbmNlKHN0cmluZyAkcHJlZl9uYW1lLCBzdHJpbmcgJGRmbHRfdmFsdWUgPSBOVUxMLCBib29sICRhbGxvd19lbXB0eSA9IEZBTFNFKQ0KICB7DQogICAgJGtleSA9ICdfXycgLiAkdGhpcy0+R2V0TmFtZSgpIC4gJ18nIC4gJHByZWZfbmFtZTsNCiAgICAkdG1wID0gY21zX3VzZXJwcmVmczo6Z2V0KCRrZXksICRkZmx0X3ZhbHVlKTsNCiAgICBpZighZW1wdHkoJHRtcCkgfHwgXGlzX251bWVyaWMoJHRtcCkpDQogICAgew0KICAgICAgcmV0dXJuICR0bXA7DQogICAgfQ0KICAgIGlmKCRhbGxvd19lbXB0eSkNCiAgICB7DQogICAgICByZXR1cm4gJHRtcDsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICRkZmx0X3ZhbHVlOw0KICB9DQogIA0KICAvKioNCiAgICogQSB3cmFwcGVyIHRvIHNldCBhIHVzZXIgcHJlZmVyZW5jZSB0aGF0IGlzIG1vZHVsZSBzcGVjaWZpYy4NCiAgICogdGhpcyBtZXRob2Qgb25seSBhcHBsaWVzIHRvIGFkbWluIHVzZXJzLg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRwcmVmX25hbWUgVGhlIHByZWZlcmVuY2UgbmFtZQ0KICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSAgICAgVGhlIHByZWZlcmVuY2UgdmFsdWUuDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gWFRTZXRVc2VyUHJlZmVyZW5jZShzdHJpbmcgJHByZWZfbmFtZSwgc3RyaW5nICR2YWx1ZSA9ICcnKQ0KICB7DQogICAgJGtleSA9ICdfXycgLiAkdGhpcy0+R2V0TmFtZSgpIC4gJ18nIC4gJHByZWZfbmFtZTsNCiAgICANCiAgICByZXR1cm4gY21zX3VzZXJwcmVmczo6c2V0KCRrZXksICR2YWx1ZSk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBBIHdyYXBwZXIgdG8gcmVtb3ZlIGEgdXNlciBwcmVmZXJlbmNlIHRoYXQgaXMgbW9kdWxlIHNwZWNpZmljLg0KICAgKiB0aGlzIG1ldGhvZCBvbmx5IGFwcGxpZXMgdG8gYWRtaW4gdXNlcnMuDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJHByZWZfbmFtZSBUaGUgcHJlZmVyZW5jZSBuYW1lDQogICAqDQogICAqIEByZXR1cm4gbnVsbA0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIFhUUmVtb3ZlVXNlclByZWZlcmVuY2Uoc3RyaW5nICRwcmVmX25hbWUpDQogIHsNCiAgICAka2V5ID0gJ19fJyAuICR0aGlzLT5HZXROYW1lKCkgLiAnXycgLiAkcHJlZl9uYW1lOw0KICAgIA0KICAgIHJldHVybiBjbXNfdXNlcnByZWZzOjpyZW1vdmUoJGtleSk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBHZXQgdGhlIHByZWZlcnJlZCBlbWFpbCBzdG9yYWdlIG1lY2hhbmlzbQ0KICAgKg0KICAgKiBAcmV0dXJuIElFbWFpbFN0b3JhZ2UNCiAgICogQGV4YW1wbGUgc2VuZGluZ19hbl9lbWFpbC5waHANCiAgICogQHNpbmNlICAgMS41OQ0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIGdldF9lbWFpbF9zdG9yYWdlKCkgOiBpRW1haWxTdG9yYWdlDQogIHsNCiAgICBzdGF0aWMgJF9vYmo7DQogICAgaWYoISRfb2JqKQ0KICAgIHsNCiAgICAgICRfb2JqID0gbmV3IEZpbGVFbWFpbFN0b3JhZ2UoJHRoaXMpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJF9vYmo7DQogIH0NCiAgDQogIC8qKg0KICAgKiBHZXQgYSBtYWlsZXIgZmlsbGVkIHdpdGggc29tZSBkZWZhdWx0cw0KICAgKg0KICAgKiBAcmV0dXJuIGNtc19tYWlsZXINCiAgICogQHNpbmNlIDEuNjMNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVfbmV3X21haWxlcigpIDogY21zX21haWxlcg0KICB7DQogICAgcmV0dXJuIG5ldyBjbXNfbWFpbGVyKCk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBHZXQgYSBuZXcgZW1haWwgcHJvY2Vzc29yDQogICAqDQogICAqIEBwYXJhbSBFbWFpbCAkZW1sIFRoZSBlbWFpbCB0aGF0IHdpbGwgYmUgcHJvY2Vzc2VkLg0KICAgKg0KICAgKiBAcmV0dXJuIEVtYWlsUHJvY2Vzc29yDQogICAqIEBzaW5jZSAgIDEuNjMNCiAgICogQGV4YW1wbGUgc2VuZGluZ19hbl9lbWFpbC5waHANCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVfbmV3X21haWxwcm9jZXNzb3IoRW1haWwgJGVtbCkgOiBFbWFpbFByb2Nlc3Nvcg0KICB7DQogICAgcmV0dXJuIG5ldyBTaW1wbGVFbWFpbFByb2Nlc3NvcigkZW1sLCAkdGhpcy0+Y3JlYXRlX25ld19tYWlsZXIoKSk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBGaW5kIGEgZmlsZSBmb3IgdGhpcyBtb2R1bGUNCiAgICogbG9va3MgaW4gbW9kdWxlX2N1c3RvbSwgYW5kIGluIHRoZSBtb2R1bGUgZGlyZWN0b3J5DQogICAqDQogICAqIEV4YW1wbGU6DQogICAqIDxwcmU+PGNvZGU+JGZuID0gJHRoaXMtPmZpbmRfbW9kdWxlX2ZpbGUoJ2ltYWdlcy9pY29uLnBuZycpOzwvY29kZT48L3ByZT4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgVGhlIGZpbGUgdG8gc2VhcmNoIGZvcg0KICAgKg0KICAgKiBAcmV0dXJuIHN0cmluZyBJZiBmb3VuZCByZXR1cm5zIHRoZSBjb21wbGV0ZSBmaWxlIHNwZWNpZmljYXRpb24gdG8gdGhlIGZvdW5kIGZpbGUuDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gZmluZF9tb2R1bGVfZmlsZShzdHJpbmcgJGZpbGVuYW1lKSA6IHN0cmluZw0KICB7DQogICAgaWYoIFxzdGFydHN3aXRoKCRmaWxlbmFtZSwgJy8nKSApDQogICAgew0KICAgICAgJGZpbGVuYW1lID0gXHN1YnN0cigkZmlsZW5hbWUsIDEpOw0KICAgIH0NCiAgICANCiAgICBpZighJGZpbGVuYW1lKSB7IHJldHVybiAnJzsgfQ0KICAgIA0KICAgICR0bXAgPSBccmVhbHBhdGgoJGZpbGVuYW1lKTsNCiAgICANCiAgICBpZigkdG1wKSB7IHJldHVybiAnJzsgfSAvLyBhYnNvbHV0ZSBwYXRocyBub3QgYWNjZXB0ZWQuDQogICAgDQogICAgJGNvbmZpZyAgPSAkdGhpcy0+Y29uZmlnOw0KICAgICRkaXJsaXN0ID0gW107DQogICAgDQogICAgaWYoJGNvbmZpZ1snYXNzZXRzX3BhdGgnXSAmJiBcdmVyc2lvbl9jb21wYXJlKFxDTVNfVkVSU0lPTiwgJzIuMi1iZXRhMScpID49IDAgKQ0KICAgIHsNCiAgICAgICRkaXJsaXN0W10gPSAkY29uZmlnWydhc3NldHNfcGF0aCddIC4gJy9tb2R1bGVfY3VzdG9tLycgLiAkdGhpcy0+R2V0TmFtZSgpOw0KICAgIH0NCiAgICANCiAgICAkZGlybGlzdFtdID0gXENNU19ST09UX1BBVEggLiAnL21vZHVsZV9jdXN0b20vJyAuICR0aGlzLT5HZXROYW1lKCk7DQogICAgJGRpcmxpc3RbXSA9ICR0aGlzLT5HZXRNb2R1bGVQYXRoKCk7DQogICAgDQogICAgZm9yZWFjaCgkZGlybGlzdCBhcyAkZGlyKQ0KICAgIHsNCiAgICAgICRmbiA9ICIkZGlyLyRmaWxlbmFtZSI7DQogICAgICANCiAgICAgIGlmKCBcaXNfZmlsZSgkZm4pICkgeyByZXR1cm4gJGZuOyB9DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAnJzsNCiAgfQ0KICANCi8vICAvKioNCi8vICAgKiBHZXQgYSBsaXN0IG9mIG1vZHVsZSBmaWxlcyBtYXRjaGluZyBhIHNwZWNpZmllZCBwYXR0ZXJuIGluIGEgc3BlY2lmaWVkIG1vZHVsZSBzdWJkaXJlY3RvcnkuDQovLyAgICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgZm9yIGZpbmRpbmcgYSBsaXN0IG9mIGZpbGVzIG1hdGNoaW5nIGEgcGF0dGVybiAoaS5lIGEgbGlzdCBvZiBjbGFzc2VzLCBvciBldmVuIGEgbGlzdCBvZg0KLy8gICAqIHRlbXBsYXRlcykuIFRoaXMgbWV0aG9kIHdpbGwgc2VhcmNoIGZvciBmaWxlcyBpbiBhIG1hdGNoaW5nIGRpcmVjdG9yeSBpbiB0aGUgbW9kdWxlX2N1c3RvbSBkaXJlY3RvcnkgKGlmIG9uZQ0KLy8gICAqIGV4aXN0cykgYW5kIGluIHRoZSBtb2R1bGUgZGlyZWN0b3J5LiBpLmU6ICR0aGlzLT5nZXRfbW9kdWxlX2ZpbGVzKCd0ZW1wbGF0ZXMnLCdzdW1tYXJ5KnRwbCcpOw0KLy8gICAqDQovLyAgICogQHBhcmFtIHN0cmluZyAkZGlybmFtZSBUaGUgZGlyZWN0b3J5IG5hbWUgKHJlbGF0aXZlIHRvIHRoZSBtb2R1bGUgZGlyZWN0b3J5KSB0byBzZWFyY2ggaW4uDQovLyAgICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiBBbiBvcHRpb25hbCBwYXR0ZXJuLCBpZiBubyBwYXR0ZXJuIGlzIHNwZWNpZmllZCwgKi4qIGlzIGFzc3VtZWQuDQovLyAgICoNCi8vICAgKiBAcmV0dXJuIGFycmF5DQovLyAgICovDQovLyAgcHVibGljIGZ1bmN0aW9uIGdldF9tb2R1bGVfZmlsZXMoc3RyaW5nICRkaXJuYW1lLCBzdHJpbmcgJHBhdHRlcm4gPSAnJykgOmFycmF5DQovLyAgew0KLy8gICAgaWYoISRkaXJuYW1lKSB7IHJldHVybiBbXTsgfQ0KLy8NCi8vICAgIGlmKFxmaWxlX2V4aXN0cygkZGlybmFtZSkpIHsgcmV0dXJuIFtdOyB9IC8vIGFic29sdXRlIHBhdGhzIG5vdCBhY2NlcHRlZC4NCi8vDQovLyAgICBpZihlbXB0eSgkcGF0dGVybikpIHsgJHBhdHRlcm4gPSAnKi4qJzsgfQ0KLy8NCi8vICAgICRmaWxlcyA9IFtdOw0KLy8gICAgJGRpcnMgID0gW1xDTVNfUk9PVF9QQVRIIC4gJy9tb2R1bGVfY3VzdG9tLycgLiAkdGhpcy0+R2V0TmFtZSgpLCAkdGhpcy0+R2V0TW9kdWxlUGF0aCgpXTsNCi8vDQovLyAgICBmb3JlYWNoKCRkaXJzIGFzICRkaXIpDQovLyAgICB7DQovLyAgICAgICRmbiA9ICIkZGlyLyRkaXJuYW1lIjsNCi8vDQovLyAgICAgIGlmKCAhXGlzX2RpcigkZm4pICkgeyBjb250aW51ZTsgfQ0KLy8NCi8vICAgICAgJGZpbGVzID0gYXJyYXlfbWVyZ2UoJGZpbGVzLCBcZ2xvYigiJGZuLyRwYXR0ZXJuIikpOw0KLy8gICAgfQ0KLy8NCi8vICAgIHJldHVybiAkZmlsZXM7DQovLyAgfQ0KICANCiAgLyoqDQogICAqIEdldCBhIGxpc3Qgb2YgbW9kdWxlIGZpbGVzIG1hdGNoaW5nIGEgc3BlY2lmaWVkIHBhdHRlcm4gaW4gYSBzcGVjaWZpZWQgbW9kdWxlIHN1YmRpcmVjdG9yeS4NCiAgICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgZm9yIGZpbmRpbmcgYSBsaXN0IG9mIGZpbGVzIG1hdGNoaW5nIGEgcGF0dGVybiAoaS5lIGEgbGlzdCBvZiBjbGFzc2VzLCBvciBldmVuIGEgbGlzdCBvZg0KICAgKiB0ZW1wbGF0ZXMpLiBUaGlzIG1ldGhvZCB3aWxsIHNlYXJjaCBmb3IgZmlsZXMgaW4gYSBtYXRjaGluZyBkaXJlY3RvcnkgaW4gdGhlIG1vZHVsZV9jdXN0b20gZGlyZWN0b3J5IChpZiBvbmUNCiAgICogZXhpc3RzKSBhbmQgaW4gdGhlIG1vZHVsZSBkaXJlY3RvcnkuIGkuZTogJHRoaXMtPmdldF9tb2R1bGVfZmlsZXMoJ3RlbXBsYXRlcycsJ3N1bW1hcnkqdHBsJyk7DQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJGRpcm5hbWUgVGhlIGRpcmVjdG9yeSBuYW1lIChyZWxhdGl2ZSB0byB0aGUgbW9kdWxlIGRpcmVjdG9yeSkgdG8gc2VhcmNoIGluLg0KICAgKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuIEFuIG9wdGlvbmFsIHBhdHRlcm4sIGlmIG5vIHBhdHRlcm4gaXMgc3BlY2lmaWVkLCAqLiogaXMgYXNzdW1lZC4NCiAgICoNCiAgICogQHJldHVybiBhcnJheQ0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIGdldF9tb2R1bGVfZmlsZXMoc3RyaW5nICRkaXJuYW1lLCBzdHJpbmcgJHBhdHRlcm4gPSAnJykgOiBhcnJheQ0KICB7DQogICAgaWYoISRkaXJuYW1lKSB7IHJldHVybiBbXTsgfQ0KICAgIA0KICAgIGlmKCBcZmlsZV9leGlzdHMoJGRpcm5hbWUpICkgeyByZXR1cm4gW107IH0gLy8gYWJzb2x1dGUgcGF0aHMgbm90IGFjY2VwdGVkLg0KICAgIA0KICAgIGlmKCBlbXB0eSgkcGF0dGVybikgKSB7ICRwYXR0ZXJuID0gJyouKic7IH0NCiAgICANCiAgICAkZmlsZXMgPSBbXTsNCiAgICAkZGlycyAgPSBbXENNU19ST09UX1BBVEggLiAnL21vZHVsZV9jdXN0b20vJyAuICR0aGlzLT5HZXROYW1lKCksICR0aGlzLT5HZXRNb2R1bGVQYXRoKCldOw0KICAgIA0KICAgIGZvcmVhY2goJGRpcnMgYXMgJGRpcikNCiAgICB7DQogICAgICAkZm4gPSAiJGRpci8kZGlybmFtZSI7DQogICAgICANCiAgICAgIGlmKCAhXGlzX2RpcigkZm4pICkgeyBjb250aW51ZTsgfQ0KICAgICAgDQogICAgICAkZm91bmRGaWxlcyA9IFxnbG9iKCIkZm4vJHBhdHRlcm4iKTsNCiAgICAgIA0KICAgICAgaWYoRkFMU0UgIT09ICRmb3VuZEZpbGVzKSB7JGZpbGVzW10gPSAkZm91bmRGaWxlczsgfQ0KICAgIH0NCiAgICANCiAgICAvLyBGbGF0dGVuIHRoZSBhcnJheSBvZiBmaWxlcw0KICAgIHJldHVybiBcYXJyYXlfbWVyZ2UoLi4uJGZpbGVzKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEdpdmVuIGEgZmlsZW5hbWUsIHNlYXJjaCBmb3IgaXQgaW4gdGhlIG1vZHVsZV9jdXN0b20gYW5kIG1vZHVsZSdzIHRlbXBsYXRlcyBkaXJlY3RvcnkuDQogICAqIGkuZS46ICR0aGlzLT5maW5kX3RlbXBsYXRlX2ZpbGUoJ3NvbWVyZXBvcnQudHBsJyk7DQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFRoZSB0ZW1wbGF0ZSBmaWxlbmFtZSAob25seSB0aGUgZmlsZW5hbWUpIHRvIHNlYXJjaCBmb3INCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGZpbGVuYW1lLg0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIGZpbmRfdGVtcGxhdGVfZmlsZShzdHJpbmcgJGZpbGVuYW1lKSA6IHN0cmluZw0KICB7DQogICAgaWYoISRmaWxlbmFtZSkgeyByZXR1cm4gJyc7IH0NCiAgICAkZmlsZW5hbWUgPSAndGVtcGxhdGVzLycgLiBcYmFzZW5hbWUoJGZpbGVuYW1lKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXMtPmZpbmRfbW9kdWxlX2ZpbGUoJGZpbGVuYW1lKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGdlbmVyYXRlIGEgbmV3IHNtYXJ0eSB0ZW1wbGF0ZSBvYmplY3QgZ2l2ZW4gYSByZXNvdXJjZSBzdHJpbmcsDQogICAqIGFuZCBhIHByZWZpeC4gIFRoaXMgbWV0aG9kIHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5IGFzc2lnbiBhIGZldyBjb21tb24gc21hcnR5IHZhcmlhYmxlcw0KICAgKiB0byB0aGUgbmV3IHNjb3BlLg0KICAgKg0KICAgKiBOb3RlOiB0aGUgcGFyZW50IHNtYXJ0eSBzY29wZSBkZXBlbmRzIG9uIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gIElmIGNhbGxlZCBkaXJlY3RseSBmcm9tIGEgbW9kdWxlIGFjdGlvbiBmb3INCiAgICogdGhlIHNhbWUgbW9kdWxlIHRoZSBwYXJlbnQgd2lsbCBiZSB0aGUgY3VycmVudCBzbWFydHkgc2NvcGUuICBJZiBjYWxsZWQgZnJvbSBhbnkgbWV0aG9kIHRoYXQgaXMgdXNpbmcgYSBkaWZmZXJlbnQNCiAgICogbW9kdWxlIHRoYW4gdGhlIGFjdGlvbiBtb2R1bGUsIHRoZW4gdGhlIHBhcmVudCBzY29wZSB3aWxsIGJlIHRoZSBnbG9iYWwgc21hcnR5IHNjb3BlLg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJHRlbXBsYXRlX25hbWUgVGhlIGRlc2lyZWQgdGVtcGxhdGUgbmFtZS4NCiAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcmVmaXggICAgICAgIGFuIG9wdGlvbmFsIHByZWZpeCBmb3IgZGF0YWJhc2UgdGVtcGxhdGVzLg0KICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNhY2hlX2lkICAgICAgQW4gb3B0aW9uYWwgc21hcnR5IGNhY2hlIGlkLg0KICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNvbXBpbGVfaWQgICAgQW4gb3B0aW9uYWwgc21hcnR5IGNvbXBpbGUgaWQuDQogICAqIEBwYXJhbSBudWxsICAgICAgICAkcGFyZW50ICAgICAgICBBbiBvcHRpb25hbCBwYXJlbnQgdGVtcGxhdGUgb2JqZWN0Lg0KICAgKg0KICAgKiBAcmV0dXJuIG9iamVjdA0KICAgKiBAdGhyb3dzIFxTbWFydHlFeGNlcHRpb24NCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBDcmVhdGVTbWFydHlUZW1wbGF0ZSgNCiAgICBzdHJpbmcgJHRlbXBsYXRlX25hbWUsIHN0cmluZyAkcHJlZml4ID0gTlVMTCwgc3RyaW5nICRjYWNoZV9pZCA9IE5VTEwsIHN0cmluZyAkY29tcGlsZV9pZCA9IE5VTEwsICRwYXJlbnQgPSBOVUxMDQogICkNCiAgew0KICAgICRzbWFydHkgPSBOVUxMOw0KICAgIA0KICAgIGlmKCRwYXJlbnQpIHsgJHNtYXJ0eSA9ICRwYXJlbnQ7IH0NCiAgICANCiAgICBpZighJHNtYXJ0eSkgeyAkc21hcnR5ID0gJHRoaXMtPkdldEFjdGlvblRlbXBsYXRlT2JqZWN0KCk7IH0NCiAgICANCiAgICBpZighJHNtYXJ0eSkgeyAkc21hcnR5ID0gJHRoaXMtPmNtcy0+R2V0U21hcnR5KCk7IH0NCiAgICANCiAgICAkdHBsID0gJHNtYXJ0eS0+Y3JlYXRlVGVtcGxhdGUoDQogICAgICAkdGhpcy0+WFRHZXRUZW1wbGF0ZVJlc291cmNlKCR0ZW1wbGF0ZV9uYW1lLCAkcHJlZml4KSwgJGNhY2hlX2lkLCAkY29tcGlsZV9pZCwgJHNtYXJ0eQ0KICAgICk7DQogICAgDQogICAgLy8gZm9yIGNvbnZlbmllbmNlLCBJIGFzc2lnbiBhIGZldyBzbWFydHkgdmFyaWFibGVzLg0KICAgICR0cGwtPmFzc2lnbignbW9kdWxlJywgJHRoaXMtPkdldE5hbWUoKSk7DQogICAgJHRwbC0+YXNzaWduKCR0aGlzLT5HZXROYW1lKCksICR0aGlzKTsNCiAgICAkdHBsLT5hc3NpZ24oJ21vZCcsICR0aGlzKTsNCiAgICAkdHBsLT5hc3NpZ24oJ2FjdGlvbmlkJywgJHRoaXMtPmdldF9hY3Rpb25faWQoKSk7DQogICAgaWYoKCRhY3Rpb25wYXJhbXMgPSAkc21hcnR5LT5nZXRUZW1wbGF0ZVZhcnMoJ2FjdGlvbnBhcmFtcycpKSkNCiAgICB7DQogICAgICAkdHBsLT5hc3NpZ24oJ2FjdGlvbnBhcmFtcycsICRhY3Rpb25wYXJhbXMpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHRwbDsNCiAgfQ0KICANCiAgLyoqDQogICAqIEdpdmVuIGEgdGVtcGxhdGUgbmFtZS9yZXNvdXJjZSBhbmQgc29tZSBkYXRhIHJldHVybiB0aGUgcmVzdWx0cy4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAgICAgJHRwbF9yc3JjDQogICAqIEBwYXJhbSBhcnJheXxudWxsICRkYXRhDQogICAqDQogICAqIEByZXR1cm4gc3RyaW5nDQogICAqIEB0aHJvd3MgXFNtYXJ0eUV4Y2VwdGlvbg0KICAgKiBAc2VlIENNU01TRXh0OjpDcmVhdGVTbWFydHlUZW1wbGF0ZQ0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIFByb2Nlc3NTaW1wbGVUZW1wbGF0ZShzdHJpbmcgJHRwbF9yc3JjLCBhcnJheSAkZGF0YSA9IE5VTEwpIDogc3RyaW5nDQogIHsNCiAgICAkdHBsID0gJHRoaXMtPkNyZWF0ZVNtYXJ0eVRlbXBsYXRlKCR0cGxfcnNyYyk7DQogICAgZm9yZWFjaCgkZGF0YSBhcyAka2V5ID0+ICR2YWwpDQogICAgew0KICAgICAgJHRwbC0+YXNzaWduKCRrZXksICR2YWwpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHRwbC0+ZmV0Y2goKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGdlbmVyYXRlIGEgc21hcnR5IHJlc291cmNlIHN0cmluZyBnaXZlbiBhIHRlbXBsYXRlIG5hbWUgYW5kIGFuIG9wdGlvbmFsIHByZWZpeC4NCiAgICogaWYgdGhlIHN1cHBsaWVkIHRlbXBsYXRlIG5hbWUgYmVnaW5zIHdpdGggOjogdGhlbiB3ZSBhc3N1bWUgYSAnY21zX3RlbXBsYXRlJyByZXNvdXJjZS4NCiAgICogaWYgdGhlIHN1cHBsaWVkIHRlbXBsYXRlIG5hbWUgYXBwZWFycyB0byBiZSBhIHNtYXJ0eSByZXNvdXJjZSBuYW1lIHdlIGRvbid0IGRvIGFueXRoaW5nLg0KICAgKiBpZiB0aGUgc3VwcGxpZWQgdGVtcGxhdGUgbmFtZSBlbmRzIHdpdGggLnRwbCB0aGVuIGEgZmlsZSB0ZW1wbGF0ZSBpcyBhc3N1bWVkLg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJHRlbXBsYXRlX25hbWUgVGhlIGRlc2lyZWQgdGVtcGxhdGUgbmFtZQ0KICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByZWZpeCAgICAgICAgYW4gb3B0aW9uYWwgcHJlZml4IGZvciBkYXRhYmFzZSB0ZW1wbGF0ZXMuDQogICAqDQogICAqIEByZXR1cm4gc3RyaW5nDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gWFRHZXRUZW1wbGF0ZVJlc291cmNlKHN0cmluZyAkdGVtcGxhdGVfbmFtZSwgc3RyaW5nICRwcmVmaXggPSBOVUxMKQ0KICB7DQogICAgJHRlbXBsYXRlX25hbWUgPSB0cmltKCR0ZW1wbGF0ZV9uYW1lKTsNCiAgICBpZigNCiAgICAgIHN0YXJ0c3dpdGgoJHRlbXBsYXRlX25hbWUsICdzdHJpbmc6JykgfHwgc3RhcnRzd2l0aCgkdGVtcGxhdGVfbmFtZSwgJ2V2YWw6JykgfHwNCiAgICAgIHN0YXJ0c3dpdGgoJHRlbXBsYXRlX25hbWUsICdleHRlbmRzOicpDQogICAgKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0ludmFsaWQgcmVzb3VyY2UgbmFtZSBwYXNzZWQgdG8gJyAuIF9fTUVUSE9EX18pOw0KICAgIH0NCiAgICBpZihzdGFydHN3aXRoKCR0ZW1wbGF0ZV9uYW1lLCAnOjonKSkNCiAgICB7DQogICAgICAvLyBhc3N1bWUgZGVzaWduIG1hbmFnZXIgdGVtcGxhdGUNCiAgICAgICR0ZW1wbGF0ZV9uYW1lID0gc3Vic3RyKCR0ZW1wbGF0ZV9uYW1lLCAyKTsNCiAgICAgICR0ZW1wbGF0ZV9uYW1lID0gJ2Ntc190ZW1wbGF0ZTonIC4gJHRlbXBsYXRlX25hbWU7DQogICAgfQ0KICAgIGVsc2UgaWYoIXN0cnBvcygkdGVtcGxhdGVfbmFtZSwgJzonKSkNCiAgICB7DQogICAgICAvLyBpdCdzIG5vdCBhIHJlc291cmNlLg0KICAgICAgaWYoZW5kc3dpdGgoJHRlbXBsYXRlX25hbWUsICcudHBsJykpDQogICAgICB7DQogICAgICAgIHJldHVybiAkdGhpcy0+R2V0RmlsZVJlc291cmNlKCR0ZW1wbGF0ZV9uYW1lKTsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgLy8gZGVwcmVjYXRlZA0KICAgICAgcmV0dXJuICR0aGlzLT5HZXREYXRhYmFzZVJlc291cmNlKCRwcmVmaXggLiAkdGVtcGxhdGVfbmFtZSk7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkdGVtcGxhdGVfbmFtZTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEdldCB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoYXQgdGhlIGN1cnJlbnQgYWN0aW9uIGlzIGZvci4NCiAgICogKG9ubHkgd29ya3Mgd2l0aCBtb2R1bGVzIGRlcml2ZWQgZnJvbSBDTVNNU0V4dCkuDQogICAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCB0byBmaW5kIHRoZSBtb2R1bGUgYWN0aW9uIHRoYXQgd2FzIHVzZWQgdG8gc2VuZCBhbiBldmVudC4NCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBHZXRBY3Rpb25Nb2R1bGUoKQ0KICB7DQogICAgcmV0dXJuIHh0X3RtcGRhdGE6OmdldCgnbW9kdWxlJyk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBDcmVhdGUgYSB1cmwgdG8gYW4gYWN0aW9uIHRoYXQgd2lsbCBzaG93IGEgbWVzc2FnZS4NCiAgICoNCiAgICogVGhpcyBtZXRob2QgaXMgY2FwYWJsZSBvZiB1c2luZyB0aGUgXHh0X21lc3NhZ2UgY2xhc3MgdG8gZXh0cmFjdCBsb25nZXIgbWVzc2FnZXMuDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJHBhZ2UgICAgIEEgcGFnZSBpZCBvciBhbGlhcyB0byBkaXNwbGF5IHRoZSBtZXNzYWdlIG9uDQogICAqIEBwYXJhbSBzdHJpbmcgJG1zZyAgICAgIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkuICBPciB0aGUgbWVzc2FnZSBrZXkgbmFtZS4NCiAgICogQHBhcmFtIGJvb2wgICAkaXNfa2V5ICAgSWYgdHJ1ZSwgaXQgaW5kaWNhdGVzIHRoYXQgdGhlICRtc2cgcGFyYW1ldGVyIGlzIGEga2V5IHRvIGV4dHJhY3QgZnJvbSBceHRfbWVzc2FnZS4NCiAgICogQHBhcmFtIGJvb2wgICAkaXNfZXJyb3IgSW5kaWNhdGVzIGlmIHRoZSBtZXNzYWdlIHNob3VsZCBiZSBkaXNwbGF5ZWQgYXMgYW4gZXJyb3IuDQogICAqDQogICAqIEByZXR1cm4gc3RyaW5nIFRoZSBVUkwgdG8gdGhlIGFjdGlvbi4NCiAgICogQHNlZSBDTVNNU0V4dDo6RGlzcGxheUVycm9yTWVzc2FnZSgpOw0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIEdldFNob3dNZXNzYWdlVVJMKHN0cmluZyAkcGFnZSwgc3RyaW5nICRtc2csIGJvb2wgJGlzX2tleSA9IEZBTFNFLCBib29sICRpc19lcnJvciA9IEZBTFNFKQ0KICB7DQogICAgJHBhZ2UgPSAkdGhpcy0+cmVzb2x2ZV9hbGlhc19vcl9pZCgkcGFnZSk7DQogICAgaWYoISRwYWdlKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0ludmFsaWQgcGFnZSBwYXNzZWQgdG8gJyAuIF9fTUVUSE9EX18pOw0KICAgIH0NCiAgICANCiAgICAkcGFybXMgPSBbXTsNCiAgICANCiAgICBpZigkaXNfa2V5KQ0KICAgIHsNCiAgICAgICRwYXJtc1sneHRfbXNna2V5J10gPSBcdHJpbSgkbXNnKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICRwYXJtc1sneHRfbXNnJ10gPSBcdHJpbSgkbXNnKTsNCiAgICB9DQogICAgDQogICAgJHBhcm1zWyd4dF9lcnJvciddID0gKCRpc19lcnJvcikgPyAxIDogMDsNCiAgICAkbW9kICAgICAgICAgICAgICAgPSAkdGhpcy0+Z2V0X3h0KCk7DQogICAgDQogICAgcmV0dXJuICRtb2QtPmNyZWF0ZV91cmwoJ2NudG50MDEnLCAnc2hvd21lc3NhZ2UnLCAkcGFnZSwgJHBhcm1zKTsNCiAgfQ0KICANCiAgDQogIC8qKg0KICAgKiBTaG93IGEgbWVzc2FnZSBvbiB0aGUgZnJvbnRlbmQgb2YgdGhlIHdlYnNpdGUuDQogICAqIHN1aXRhYmxlIGZvciBkaXNwbGF5aW5nIGVycm9ycyBhbmQgYnJpZWYgbWVzc2FnZXMuDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgICAgICAkbXNnICAgICAgVGhlIG1lc3NhZ2UgdG8gZGlzcGxheQ0KICAgKiBAcGFyYW0gYm9vbCAgICAgICAgJGlzX2Vycm9yIHdoZXRoZXIgb3Igbm90IHRoZSBtc2cgaXMgYW4gZXJyb3INCiAgICogQHBhcmFtIHN0cmluZ3xudWxsICR0aXRsZSAgICBJZiBub3QgYW4gZXJyb3IsIG9wdGlvbmFsbHkgZGlzcGxheSBhIHRpdGxlIHRvIHRoZSBtZXNzYWdlLg0KICAgKg0KICAgKiBAdGhyb3dzIFxTbWFydHlFeGNlcHRpb24NCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBTaG93Rm9ybWF0dGVkTWVzc2FnZShzdHJpbmcgJG1zZywgYm9vbCAkaXNfZXJyb3IgPSBGQUxTRSwgc3RyaW5nICR0aXRsZSA9IE5VTEwpDQogIHsNCiAgICBpZigkaXNfZXJyb3IpDQogICAgew0KICAgICAgZWNobyAkdGhpcy0+RGlzcGxheUVycm9yTWVzc2FnZSgkbXNnKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgIC8vIHRvZG8uLi4gbmVlZCBhIHRlbXBsYXRlIGZvciB0aGlzLg0KICAgICAgZWNobyAnPGRpdiBjbGFzcz0ieHRfbWVzc2FnZSI+JzsNCiAgICAgIGlmKCR0aXRsZSkNCiAgICAgIHsNCiAgICAgICAgZWNobyAnPGRpdiBjbGFzcz0ieHRfbXNndGl0bGUiPicgLiAkdGl0bGUgLiAnPC9kaXY+JzsNCiAgICAgIH0NCiAgICAgIGVjaG8gJzxkaXYgY2xhc3M9Inh0X21zZ2JvZHkiPicgLiAkbXNnIC4gJzwvZGl2Pic7DQogICAgICBlY2hvICc8L2Rpdj4nOw0KICAgIH0NCiAgfQ0KICANCiAgLyoqDQogICAqIEZpbmQgYW5kIHJldHVybiBhIG1vZHVsZSB0aGF0IGNhbiBkbyBub3RpZmljYXRpb25zLg0KICAgKg0KICAgKiBAcmV0dXJuIENNU01vZHVsZXxudWxsDQogICAqLw0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0X25vdGlmaWVyX21vZHVsZSgpDQogIHsNCiAgICBzdGF0aWMgJF9vYmo7DQogICAgDQogICAgaWYoISRfb2JqKQ0KICAgIHsNCiAgICAgICRsaXN0ID0gJHRoaXMtPkdldE1vZHVsZXNXaXRoQ2FwYWJpbGl0eSgnbm90aWZpY2F0aW9ucycpOw0KICAgICAgDQogICAgICBpZihlbXB0eSgkbGlzdCkpIHsgcmV0dXJuOyB9DQogICAgICANCiAgICAgICRtb2R1bGVfbmFtZSA9ICRsaXN0WzBdOw0KICAgICAgDQogICAgICBpZighXG1ldGhvZF9leGlzdHMoJG1vZHVsZV9uYW1lLCAnc2VuZF9tZXNzYWdlJykpIHsgcmV0dXJuOyB9DQogICAgICANCiAgICAgICRfb2JqID0gc2VsZjo6R2V0TW9kdWxlSW5zdGFuY2UoJG1vZHVsZV9uYW1lKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICRfb2JqOw0KICB9DQogIA0KICAvKioNCiAgICogQ3JlYXRlIGEgbmV3IG5vdGlmaWNhdGlvbiBtZXNzYWdlDQogICAqDQogICAqIEBwYXJhbSBhcnJheSAkb3B0cyBBbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBvcHRpb25zLg0KICAgKg0KICAgKiBAcmV0dXJuIFxub3RpZmljYXRpb25fbWVzc2FnZQ0KICAgKi8NCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNyZWF0ZV9ub3RpZmljYXRpb25fbWVzc2FnZShhcnJheSAkb3B0cyA9IE5VTEwpIDogXG5vdGlmaWNhdGlvbl9tZXNzYWdlDQogIHsNCiAgICByZXR1cm4gbmV3IFxub3RpZmljYXRpb25fbWVzc2FnZTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEdpdmVuIGFuIGVtYWlsIG1lc3NhZ2UgY3JlYXRlIGEgbm90aWZpY2F0aW9uIG1lc3NhZ2UuDQogICAqDQogICAqIFRoaXMgbWV0aG9kIGF0dGVtcHRzIHRvIHJlc29sdmUgdGhlIHRvX2dyb3VwIGFuZCB0byBmaWVsZHMgb2YgdGhlIG5vdGlmaWNhdGlvbiBtZXNzYWdlDQogICAqIGJ1dCB3aWxsIE5PVCB0aHJvdyBhbiBleGNlcHRpb24gaWYgbm90aGluZyBjYW4gYmUgcmVzb2x2ZWQuICBUaGUgY2FsbGVyIG1heSB3aXNoIHRvIGNoZWNrIHRoZXNlIHByb3BlcnRpZXMNCiAgICogb3Igb3ZlcnJpZGUgdGhlbS4NCiAgICoNCiAgICogQHBhcmFtIEVtYWlsICRlbWwNCiAgICoNCiAgICogQHJldHVybiBcbm90aWZpY2F0aW9uX21lc3NhZ2UNCiAgICovDQogIHByb3RlY3RlZCBmdW5jdGlvbiBjcmVhdGVfbm90aWZpY2F0aW9uX21lc3NhZ2VfZnJvbV9lbWFpbChFbWFpbCAkZW1sKSA6IFxub3RpZmljYXRpb25fbWVzc2FnZQ0KICB7DQogICAgLyoqDQogICAgICogcmV2aXNpdCB0aGlzIChKTSkNCiAgICAgKiBAcGFyYW0gXENNU01TRXh0XEVtYWlsXEVtYWlsICRlbWwNCiAgICAgKg0KICAgICAqIEByZXR1cm4gZmxvYXR8aW50fG1peGVkfHN0cmluZ3x2b2lkDQogICAgICovDQogICAgJHJlc29sdmVfZ3JvdXAgPSBmdW5jdGlvbihFbWFpbCAkZW1sKQ0KICAgIHsNCiAgICAgIGlmKGlzc2V0KCRlbWwtPnRvX2FkbWluX2dyb3Vwc1swXSkpDQogICAgICB7DQogICAgICAgICRmaXJzdCA9ICRlbWwtPnRvX2FkbWluX2dyb3Vwc1swXTsNCiAgICAgICAgDQogICAgICAgIGlmKFxpc19zdHJpbmcoJGZpcnN0KSAmJiAwID09PSAoaW50KSRmaXJzdCkNCiAgICAgICAgew0KICAgICAgICAgIHJldHVybiAoaW50KXh0X3VzZXJvcHM6OmdldF9ncm91cGlkKCRmaXJzdCkgKiAtMTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgaWYoJGZpcnN0ID4gMCkgeyByZXR1cm4gJGZpcnN0ICogLTE7IH0NCiAgICAgICAgDQogICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0NvdWxkIG5vdCByZXNvbHZlIGFkbWluIGdyb3VwICcgLiAkZmlyc3QpOw0KICAgICAgfQ0KICAgICAgDQogICAgICBpZihpc3NldCgkZW1sLT50b19mZXVfZ3JvdXBzWzBdKSkNCiAgICAgIHsNCiAgICAgICAgJGZpcnN0ID0gJGVtbC0+dG9fZmV1X2dyb3Vwc1swXTsNCiAgICAgICAgDQogICAgICAgIGlmKFxpc19zdHJpbmcoJGZpcnN0KSAmJiAwID09PSAoaW50KSRmaXJzdCkNCiAgICAgICAgew0KICAgICAgICAgICRmZXUgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0Zyb250RW5kVXNlcnMnKTsNCiAgICAgICAgICANCiAgICAgICAgICBpZigkZmV1KQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICR1aWQgPSAkZmV1LT5HZXRVc2VybmFtZSgkZmlyc3QpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZigkdWlkID4gMCkgeyByZXR1cm4gJHVpZDsgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmKCRmaXJzdCA+IDApDQogICAgICAgIHsNCiAgICAgICAgICByZXR1cm4gJGZpcnN0Ow0KICAgICAgICB9DQogICAgICB9DQogICAgICANCiAgICAgIGlmKGlzc2V0KCRlbWwtPnRvX21hbXNfZ3JvdXBzWzBdKSkNCiAgICAgIHsNCiAgICAgICAgJGZpcnN0ID0gJGVtbC0+dG9fbWFtc19ncm91cHNbMF07DQogICAgICAgIA0KICAgICAgICBpZihcaXNfc3RyaW5nKCRmaXJzdCkgJiYgMCA9PT0gKGludCkkZmlyc3QpDQogICAgICAgIHsNCiAgICAgICAgICAkZmV1ID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdNQU1TJyk7DQogICAgICAgICAgaWYoJGZldSkNCiAgICAgICAgICB7DQogICAgICAgICAgICAkdWlkID0gJGZldS0+R2V0VXNlcm5hbWUoJGZpcnN0KTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoJHVpZCA+IDApIHsgcmV0dXJuICR1aWQ7IH0NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZigkZmlyc3QgPiAwKQ0KICAgICAgICB7DQogICAgICAgICAgcmV0dXJuICRmaXJzdDsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH07DQogICAgDQogICAgLyoqDQogICAgICogcmV2aXNpdCB0aGlzIChKTSkNCiAgICAgKg0KICAgICAqIEBwYXJhbSBcQ01TTVNFeHRcRW1haWxcRW1haWwgJGVtbA0KICAgICAqDQogICAgICogQHJldHVybiBmbG9hdHxpbnR8bWl4ZWR8dm9pZA0KICAgICAqLw0KICAgICRyZXNvbHZlX3VzZXIgPSBmdW5jdGlvbihFbWFpbCAkZW1sKQ0KICAgIHsNCiAgICAgIGlmKCRlbWwtPnRvX2N1cnJlbnRfYWRtaW4pDQogICAgICB7DQogICAgICAgIGlmKCgkdWlkID0gXGdldF91c2VyaWQoRkFMU0UpKSkgeyByZXR1cm4gJHVpZCAqIC0xOyB9DQogICAgICB9DQogICAgICBlbHNlIGlmKCRlbWwtPnRvX2N1cnJlbnRfZmV1KQ0KICAgICAgew0KICAgICAgICAkZmV1ID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdGcm9udEVuZFVzZXJzJyk7DQogICAgICAgIA0KICAgICAgICBpZigkZmV1ICYmICgkdWlkID0gJGZldS0+TG9nZ2VkSW5JZCgpKSkgeyByZXR1cm4gJHVpZDsgfQ0KICAgICAgfQ0KICAgICAgZWxzZSBpZigkZW1sLT50b19jdXJyZW50X21hbXMpDQogICAgICB7DQogICAgICAgICRmZXUgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ01BTVMnKTsNCiAgICAgICAgDQogICAgICAgIGlmKCRmZXUgJiYgKCR1aWQgPSAkZmV1LT5Mb2dnZWRJbklkKCkpKSB7IHJldHVybiAkdWlkOyB9DQogICAgICB9DQogICAgICBlbHNlIGlmKCRlbWwtPnRvX2ZldV91c2VycykNCiAgICAgIHsNCiAgICAgICAgJGZldSA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnRnJvbnRFbmRVc2VycycpOw0KICAgICAgICANCiAgICAgICAgaWYoKCR1aWQgPSAkZW1sLT50b19mZXVfdXNlcnNbMF0pKSB7IHJldHVybiAkdWlkOyB9DQogICAgICB9DQogICAgICBlbHNlIGlmKCRlbWwtPnRvX21hbXNfdXNlcnMpDQogICAgICB7DQogICAgICAgICRmZXUgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ01BTVMnKTsNCiAgICAgICAgDQogICAgICAgIGlmKCgkdWlkID0gJGVtbC0+dG9fbWFtc191c2Vyc1swXSkpIHsgcmV0dXJuICR1aWQ7IH0NCiAgICAgIH0NCiAgICB9Ow0KICAgIA0KICAgICRwcm9jICAgICAgICAgID0gJHRoaXMtPmNyZWF0ZV9uZXdfbWFpbHByb2Nlc3NvcigkZW1sKTsNCiAgICAkbXNnICAgICAgICAgICA9ICR0aGlzLT5jcmVhdGVfbm90aWZpY2F0aW9uX21lc3NhZ2UoKTsNCiAgICAkbXNnLT5odG1sICAgICA9IFRSVUU7DQogICAgJG1zZy0+c3ViamVjdCAgPSAkcHJvYy0+Z2V0X2VtYWlsX3N1YmplY3QoJGVtbCk7DQogICAgJG1zZy0+Ym9keSAgICAgPSAkcHJvYy0+Z2V0X2VtYWlsX2JvZHkoJGVtbCk7DQogICAgJG1zZy0+dG9fZ3JvdXAgPSAkcmVzb2x2ZV9ncm91cCgkZW1sKTsNCiAgICANCiAgICBpZighJG1zZy0+dG9fZ3JvdXApDQogICAgew0KICAgICAgJG1zZy0+dG8gPSAkcmVzb2x2ZV91c2VyKCRlbWwpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJG1zZzsNCiAgfQ0KICANCiAgLyoqDQogICAqIEdldCB0aGUgc2hhcmVkIGluc3RhbmNlIG9mIHRoZSBqc2xvYWRlci4NCiAgICoNCiAgICogVXNlZCBieSB0aGUgeHRqc18gcGx1Z2lucw0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgYSB1bmlxdWUga2V5LiAgSWYgYW4gaW5zdGFuY2UgYnkgdGhhdCBrZXkgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC4NCiAgICoNCiAgICogQHJldHVybiBcQ01TTVNFeHRcanNsb2FkZXJcanNsb2FkZXINCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBnZXRfanNsb2FkZXIoc3RyaW5nICRrZXkgPSAnX3ByaW1hcnknKSA6IGpzbG9hZGVyDQogIHsNCiAgICAka2V5ID0gXHRyaW0oJGtleSk7DQogICAgaWYoISRrZXkpIHsgJGtleSA9ICdfcHJpbWFyeSc7IH0NCiAgICANCiAgICBzdGF0aWMgJF9vYmogPSBbXTsNCiAgICBpZighaXNzZXQoJF9vYmpbJGtleV0pKQ0KICAgIHsNCiAgICAgICRfb2JqWyRrZXldID0gbmV3IGpzbG9hZGVyKCRrZXksICR0aGlzLT5jb25maWcpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJF9vYmpbJGtleV07DQogIH0NCiAgDQogIC8qKg0KICAgKiBBIGZ1bmN0aW9uIHRvIGdldCBhIGhhbmRsZSB0byBhbiBhbHRlcm5hdGUgZGF0YWJhc2UgY29ubmVjdGlvbiB0aGF0IHN1cHBvcnRzIGJldHRlciBlcnJvciBoYW5kbGluZy4NCiAgICoNCiAgICogQHJldHVybiBEYXRhYmFzZQ0KICAgKiBAdGhyb3dzIFxDTVNNU1xEYXRhYmFzZVxDb25uZWN0aW9uU3BlY0V4Y2VwdGlvbg0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIGdldF9leHRlbmRlZF9kYigpIDogRGF0YWJhc2UNCiAgew0KICAgIHN0YXRpYyAkX29iajsNCiAgICBpZighJF9vYmopDQogICAgew0KICAgICAgJF9lcnJvcl9oYW5kbGVyID0gZnVuY3Rpb24oRGF0YWJhc2UgJGNvbm4sICRlcnJ0eXBlLCAkZXJyb3JfbnVtYmVyLCAkZXJyb3JfbWVzc2FnZSl7DQogICAgICAgIHRocm93IG5ldyBceHRfc3FsX2Vycm9yKCRlcnJvcl9tZXNzYWdlIC4gJyAtLSAnIC4gJGNvbm4tPkVycm9yTXNnKCksICRlcnJvcl9udW1iZXIpOw0KICAgICAgfTsNCiAgICAgICRfb2JqICAgICAgICAgICA9IGRiX2NvbXBhdGliaWxpdHk6OmluaXQoIFxjbXNfY29uZmlnOjpnZXRfaW5zdGFuY2UoKSApOw0KICAgICAgJF9vYmotPlNldEVycm9ySGFuZGxlcigkX2Vycm9yX2hhbmRsZXIpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJF9vYmo7DQogIH0NCiAgDQogIC8qKg0KICAgKiBDcmVhdGUgYSBuZXcgY2FjaGVkIGZpbGUgb2JqZWN0Lg0KICAgKiBUaGlzIGlzIGEgZmFjdG9yeSBtZXRob2QNCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkdXJsIFRoZSBVUkwgdG8gY2FjaGUNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBjYWNoZV9maWxlKHN0cmluZyAkdXJsKSA6IHh0X2NhY2hlZF9yZW1vdGVfZmlsZQ0KICB7DQogICAgcmV0dXJuIG5ldyB4dF9jYWNoZWRfcmVtb3RlX2ZpbGUoJHVybCk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAdGhyb3dzIFxDTVNNU1xEYXRhYmFzZVxDb25uZWN0aW9uU3BlY0V4Y2VwdGlvbg0KICAgKiBAaWdub3JlDQogICAqLw0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0X2ludGVybmFscygpIDogaW50ZXJuYWxzDQogIHsNCiAgICBzdGF0aWMgJF9vYmo7DQogICAgaWYoISRfb2JqKQ0KICAgIHsNCiAgICAgICRfb2JqID0gbmV3IGludGVybmFscygkdGhpcy0+Z2V0X2V4dGVuZGVkX2RiKCkpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJF9vYmo7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAaWdub3JlDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2NvbnRlbnRfbGlzdF9idWlsZGVyKCkgOiBjb250ZW50X2xpc3RfYnVpbGRlcg0KICB7DQogICAgc3RhdGljICRfb2JqOw0KICAgIGlmKCEkX29iaikNCiAgICB7DQogICAgICAkX29iaiA9IG5ldyBjb250ZW50X2xpc3RfYnVpbGRlcigNCiAgICAgICAgJHRoaXMtPmNtcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpLA0KICAgICAgICAkdGhpcy0+Y21zLT5HZXRDb250ZW50T3BlcmF0aW9ucygpDQogICAgICApOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJF9vYmo7DQogIH0NCiAgDQogIC8qKg0KICAgKiBBIG1ldGhvZCB0byBnZXQgYSB0cmFuc2xhdG9yIG9iamVjdCBmb3IgdGhpcyBtb2R1bGUuDQogICAqDQogICAqIEByZXR1cm4gSVRyYW5zbGF0b3INCiAgICovDQogIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRfbW9kX3RyYW5zbGF0b3IoKSA6IElUcmFuc2xhdG9yDQogIHsNCiAgICBzdGF0aWMgJF9vYmo7DQogICAgaWYoISRfb2JqKQ0KICAgIHsNCiAgICAgICRfb2JqID0gbmV3IFRyYW5zbGF0b3IoJHRoaXMpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJF9vYmo7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBNb2RQcm9jZXNzVGVtcGxhdGUoJHRwbF9uYW1lKQ0KICB7DQogICAgJG9rID0gKEZBTFNFID09PSBcc3RycG9zKCR0cGxfbmFtZSwgJy4uJykpOw0KICAgIGlmKCEkb2spIHsgIHJldHVybiAnJzsgfQ0KICAgIA0KICAgICRzbWFydHkgICAgICAgICAgPSBcY21zbXMoKS0+R2V0U21hcnR5KCk7DQogICAgJHJlc3VsdCAgICAgICAgICA9ICcnOw0KICAgICRvbGRjYWNoZSAgICAgICAgPSAkc21hcnR5LT5jYWNoaW5nOw0KICAgICRzbWFydHktPmNhY2hpbmcgPSAkdGhpcy0+Y2FuX2NhY2hlX291dHB1dCgpID8gXFNtYXJ0eTo6Q0FDSElOR19MSUZFVElNRV9DVVJSRU5UIDogXFNtYXJ0eTo6Q0FDSElOR19PRkY7DQogICAgJHJlc3VsdCAgICAgICAgICA9ICRzbWFydHktPmZldGNoKCd4dF9tb2RmaWxlOicgLiAkdGhpcy0+R2V0TmFtZSgpIC4gJzsnIC4gJHRwbF9uYW1lKTsNCiAgICAkc21hcnR5LT5jYWNoaW5nID0gJG9sZGNhY2hlOw0KICAgIA0KICAgIHJldHVybiAkcmVzdWx0Ow0KICB9DQogIA0KICANCiAgLyoqDQogICAqIEBpZ25vcmUNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBnZXRfdGFza3MoKQ0KICB7DQogICAgJG91dCAgID0gTlVMTDsNCiAgICAkb3V0W10gPSBuZXcgSG91cmx5SG9va1Rhc2soKTsNCiAgICAkb3V0W10gPSBuZXcgRGFpbHlIb29rVGFzaygpOw0KICAgIA0KICAgIHJldHVybiAkb3V0Ow0KICB9DQogIA0KDQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_address.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBjb250YWlucyBhIGNsYXNzIGZvciBkZWZpbmluZyBhbiBhZGRyZXNzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKiBAY2F0ZWdvcnkgVXRpbGl0aWVzCiAqIEBhdXRob3IgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwoKLyoqCiAqIEEgc2ltcGxlIGNsYXNzIGZvciBkZWZpbmluZyBhbmQgbWFuaXB1bGF0aW5nIGFuIGFkZHJlc3MuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBwcm9wZXJ0eSBzdHJpbmcgJGNvbXBhbnkgICBBIGNvbXBhbnkgbmFtZQogKiBAcHJvcGVydHkgc3RyaW5nICRmaXJzdG5hbWUgQSBmaXJzdC9naXZlbiBuYW1lCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJGxhc3RuYW1lICBBIGxhc3Qvc3VybmFtZQogKiBAcHJvcGVydHkgc3RyaW5nICRhZGRyZXNzMSAgQW4gYWRkcmVzcwogKiBAcHJvcGVydHkgc3RyaW5nICRhZGRyZXNzMiAgQW4gYWRkcmVzcwogKiBAcHJvcGVydHkgc3RyaW5nICRjaXR5ICAgICAgQSBjaXR5IG5hbWUKICogQHByb3BlcnR5IHN0cmluZyAkc3RhdGUgICAgIEEgc3RhdGUgbmFtZSBvciBjb2RlCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJHBvc3RhbCAgICBBIHBvc3RhbC96aXAgY29kZQogKiBAcHJvcGVydHkgc3RyaW5nICRjb3VudHJ5ICAgQSBjb3VudHJ5IGNvZGUgKG9yIG5hbWUsIGJ1dCB1c3VhbGx5IGEgY29kZSkKICogQHByb3BlcnR5IHN0cmluZyAkcGhvZW4gICAgIEEgcGhvbmUgbnVtYmVyCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJGZheCAgICAgICBBIGZheCBudW1iZXIKICogQHByb3BlcnR5IHN0cmluZyAkZW1haWwgICAgIEFuIGVtYWlsIGFkZHJlc3MKICovCmNsYXNzIHh0X2FkZHJlc3MgaW1wbGVtZW50cyBcSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2NvbXBhbnk7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9maXJzdG5hbWU7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9sYXN0bmFtZTsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2FkZHJlc3MxOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfYWRkcmVzczI7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9jaXR5OwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfc3RhdGU7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9wb3N0YWw7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9jb3VudHJ5OwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfcGhvbmU7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9mYXg7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9lbWFpbDsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKQogICAgewogICAgICAgIHJldHVybiBbICdjb21wYW55JyA9PiAkdGhpcy0+Y29tcGFueSwgJ2ZpcnN0bmFtZScgPT4gJHRoaXMtPmZpcnN0bmFtZSwgJ2xhc3RuYW1lJyA9PiAkdGhpcy0+bGFzdG5hbWUsICdhZGRyZXNzMScgPT4gJHRoaXMtPmFkZHJlc3MxLAogICAgICAgICAgICAgICAgICdhZGRyZXNzMicgPT4gJHRoaXMtPmFkZHJlc3MyLCAnY2l0eScgPT4gJHRoaXMtPmNpdHksICdzdGF0ZScgPT4gJHRoaXMtPnN0YXRlLCAncG9zdGFsJyA9PiAkdGhpcy0+cG9zdGFsLAogICAgICAgICAgICAgICAgICdjb3VudHJ5JyA9PiAkdGhpcy0+Y291bnRyeSwgJ3Bob25lJyA9PiAkdGhpcy0+cGhvbmUsICdmYXgnID0+ICR0aGlzLT5mYXgsICdlbWFpbCcgPT4gJHRoaXMtPmVtYWlsIF07CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgka2V5KQogICAgewogICAgICAgIHN3aXRjaCggJGtleSApIHsKICAgICAgICBjYXNlICdjb21wYW55JzoKICAgICAgICBjYXNlICdmaXJzdG5hbWUnOgogICAgICAgIGNhc2UgJ2xhc3RuYW1lJzoKICAgICAgICBjYXNlICdhZGRyZXNzMSc6CiAgICAgICAgY2FzZSAnYWRkcmVzczInOgogICAgICAgIGNhc2UgJ2NpdHknOgogICAgICAgIGNhc2UgJ3N0YXRlJzoKICAgICAgICBjYXNlICdwb3N0YWwnOgogICAgICAgIGNhc2UgJ2NvdW50cnknOgogICAgICAgIGNhc2UgJ3Bob25lJzoKICAgICAgICBjYXNlICdmYXgnOgogICAgICAgIGNhc2UgJ2VtYWlsJzoKICAgICAgICAgICAgJHRrZXkgPSAnXycuJGtleTsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT4kdGtleTsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiJGtleSBpcyBub3QgYSBnZXR0YWJsZSBtZW1iZXIgb2YgIi5fX0NMQVNTX18pOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fc2V0KHN0cmluZyAka2V5LCR2YWwpCiAgICB7CiAgICAgICAgc3dpdGNoKCAka2V5ICkgewogICAgICAgIGNhc2UgJ2NvbXBhbnknOgogICAgICAgIGNhc2UgJ2ZpcnN0bmFtZSc6CiAgICAgICAgY2FzZSAnbGFzdG5hbWUnOgogICAgICAgIGNhc2UgJ2FkZHJlc3MxJzoKICAgICAgICBjYXNlICdhZGRyZXNzMic6CiAgICAgICAgY2FzZSAnY2l0eSc6CiAgICAgICAgY2FzZSAnc3RhdGUnOgogICAgICAgIGNhc2UgJ3Bvc3RhbCc6CiAgICAgICAgY2FzZSAnY291bnRyeSc6CiAgICAgICAgY2FzZSAncGhvbmUnOgogICAgICAgIGNhc2UgJ2ZheCc6CiAgICAgICAgY2FzZSAnZW1haWwnOgogICAgICAgICAgICAkdGtleSA9ICdfJy4ka2V5OwogICAgICAgICAgICAkdGhpcy0+JHRrZXkgPSB0cmltKCR2YWwpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiJGtleSBpcyBub3QgYSBnZXR0YWJsZSBtZW1iZXIgb2YgIi5fX0NMQVNTX18pOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgY29tcGFueSBuYW1lIGZvciB0aGlzIGFkZHJlc3MuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfY29tcGFueShzdHJpbmcgJHN0cikKICAgIHsKICAgICAgICAkdGhpcy0+Y29tcGFueSA9ICRzdHI7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIGNvbXBhbnkgbmFtZSAoaWYgYW55KSBhc3NvY2lhdGVkIHdpdGggdGhpcyBhZGRyZXNzLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfY29tcGFueSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb21wYW55OwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBmaXJzdCBuYW1lIGZvciB0aGlzIGFkZHJlc3MuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfZmlyc3RuYW1lKHN0cmluZyAkc3RyKQogICAgewogICAgICAgICR0aGlzLT5maXJzdG5hbWUgPSAkc3RyOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBmaXJzdCBuYW1lIChpZiBhbnkpIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFkZHJlc3MuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9maXJzdG5hbWUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Zmlyc3RuYW1lOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBsYXN0IG5hbWUgZm9yIHRoaXMgYWRkcmVzcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF9sYXN0bmFtZShzdHJpbmcgJHN0cikKICAgIHsKICAgICAgICAkdGhpcy0+bGFzdG5hbWUgPSAkc3RyOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBsYXN0IG5hbWUgKGlmIGFueSkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWRkcmVzcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2xhc3RuYW1lKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmxhc3RuYW1lOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBmaXJzdCBhZGRyZXNzIGxpbmUgZm9yIHRoaXMgYWRkcmVzcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF9hZGRyZXNzMShzdHJpbmcgJHN0cikKICAgIHsKICAgICAgICAkdGhpcy0+YWRkcmVzczEgPSAkc3RyOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBmaXJzdCBhZGRyZXNzIGxpbmUgKGlmIGFueSkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWRkcmVzcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2FkZHJlc3MxKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFkZHJlc3MxOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBzZWNvbmQgYWRkcmVzcyBsaW5lIGZvciB0aGlzIGFkZHJlc3MuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfYWRkcmVzczIoc3RyaW5nICRzdHIpCiAgICB7CiAgICAgICAgJHRoaXMtPmFkZHJlc3MyID0gJHN0cjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgc2Vjb25kIGFkZHJlc3MgbGluZSAoaWYgYW55KSBhc3NvY2lhdGVkIHdpdGggdGhpcyBhZGRyZXNzLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfYWRkcmVzczIoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YWRkcmVzczI7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGNpdHkgZm9yIHRoaXMgYWRkcmVzcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF9jaXR5KHN0cmluZyAkc3RyKQogICAgewogICAgICAgICR0aGlzLT5jaXR5ID0gJHN0cjsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgY2l0eSAoaWYgYW55KSBhc3NvY2lhdGVkIHdpdGggdGhpcyBhZGRyZXNzLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfY2l0eSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jaXR5OwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBzdGF0ZSBmb3IgdGhpcyBhZGRyZXNzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X3N0YXRlKHN0cmluZyAkc3RyKQogICAgewogICAgICAgICR0aGlzLT5zdGF0ZSA9ICRzdHI7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIHN0YXRlIChpZiBhbnkpIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFkZHJlc3MuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9zdGF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdGF0ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgcG9zdGFsL3ppcCBjb2RlIGZvciB0aGlzIGFkZHJlc3MuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfcG9zdGFsKHN0cmluZyAkc3RyKQogICAgewogICAgICAgICR0aGlzLT5wb3N0YWwgPSAkc3RyOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBwb3N0YWwvemlwIGNvZGUgKGlmIGFueSkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWRkcmVzcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3Bvc3RhbCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wb3N0YWw7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGNvdW50cnkgZm9yIHRoaXMgYWRkcmVzcy4KICAgICAqIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgc2hvcnQgY291bnRyeSBjb2RlIChpLmU6IFVTIG9yIENBKSBmb3IgbW9zdCBhZGRyZXNzZXMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfY291bnRyeShzdHJpbmcgJHN0cikKICAgIHsKICAgICAgICAkdGhpcy0+Y291bnRyeSA9ICRzdHI7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIGNvdW50cnkgKGlmIGFueSkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWRkcmVzcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2NvdW50cnkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y291bnRyeTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCBhIHBob25lIG51bWJlciBmb3IgdGhpcyBhZGRyZXNzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X3Bob25lKHN0cmluZyAkc3RyKQogICAgewogICAgICAgICR0aGlzLT5waG9uZSA9ICRzdHI7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIHBob25lIG51bWJlciAoaWYgYW55KSBhc3NvY2lhdGVkIHdpdGggdGhpcyBhZGRyZXNzLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfcGhvbmUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cGhvbmU7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgYSBmYXggbnVtYmVyIGZvciB0aGlzIGFkZHJlc3MuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfZmF4KHN0cmluZyAkc3RyKQogICAgewogICAgICAgICR0aGlzLT5mYXggPSAkc3RyOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBmYXggbnVtYmVyIChpZiBhbnkpIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFkZHJlc3MuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9mYXgoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmF4OwogICAgfQoKICAgIC8qKgogICAgICogU2V0IGFuIGVtYWlsIGFkZHJlc3MgZm9yIHRoaXMgYWRkcmVzcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF9lbWFpbChzdHJpbmcgJHN0cikKICAgIHsKICAgICAgICAkdGhpcy0+ZW1haWwgPSAkc3RyOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBlbWFpbCBhZGRyZXNzIChpZiBhbnkpIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFkZHJlc3MuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9lbWFpbCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5lbWFpbDsKICAgIH0KCiAgICAvKioKICAgICAqIFRlc3QgaWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQgb3Igbm90LgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNfdmFsaWQoKQogICAgewogICAgICAgIGlmKCAkdGhpcy0+Zmlyc3RuYW1lID09ICcnICkgcmV0dXJuIEZBTFNFOwogICAgICAgIGlmKCAkdGhpcy0+bGFzdG5hbWUgPT0gJycgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgaWYoICR0aGlzLT5hZGRyZXNzMSA9PSAnJyApIHJldHVybiBGQUxTRTsKICAgICAgICBpZiggJHRoaXMtPmNpdHkgPT0gJycgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgaWYoICR0aGlzLT5jb3VudHJ5ID09ICcnICkgcmV0dXJuIEZBTFNFOwogICAgICAgIGlmKCAkdGhpcy0+ZW1haWwgPT0gJycgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CgogICAgLyoqCiAgICAgKiBGaWxsIHRoZSBjb250ZW50cyBvZiB0aGUgY3VycmVudCBvYmplY3Qgd2l0aCB0aGUgZGF0YSBmcm9tIGFuIGFycmF5LgogICAgICogRXhwZWN0cyBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIHRoZSBmb2xsb3dpbmcgZmllbGRzOiAgY29tcGFueSxmaXJzdG5hbWUsbGFzdG5hbWUsYWRkcmVzczEsYWRkcmVzczIsY2l0eSxzdGF0ZSxwb3N0YWwsY291bnRyeSxwaG9uZSxmYXgsZW1haWwuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRwYXJhbXMgVGhlIGlucHV0IGFycmF5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcmVmaXggQW4gb3B0aW9uYWwgcHJlZml4IGZvciB0aGUgYXJyYXkga2V5cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZyb21fYXJyYXkoYXJyYXkgJHBhcmFtcyxzdHJpbmcgJHByZWZpeCA9ICcnKQogICAgewogICAgICAgICRmbGRzID0gYXJyYXkoJ2NvbXBhbnknLCdmaXJzdG5hbWUnLCdsYXN0bmFtZScsJ2FkZHJlc3MxJywnYWRkcmVzczInLCAnY2l0eScsJ3N0YXRlJywgJ3Bvc3RhbCcsJ2NvdW50cnknLCAncGhvbmUnLCdmYXgnLCdlbWFpbCcpOwoKICAgICAgICBmb3JlYWNoKCAkZmxkcyBhcyAkZmxkICkgewogICAgICAgICAgICBpZiggaXNzZXQoJHBhcmFtc1skcHJlZml4LiRmbGRdKSApICR0aGlzLT4kZmxkID0gc3RyaXBfdGFncygkcGFyYW1zWyRwcmVmaXguJGZsZF0pOwogICAgICAgICAgICBpZiggaXNzZXQoJHBhcmFtc1skcHJlZml4LidmaXJzdF9uYW1lJ10pICkgJHRoaXMtPmZpcnN0bmFtZSA9IHN0cmlwX3RhZ3MoJHBhcmFtc1skcHJlZml4LidmaXJzdF9uYW1lJ10pOwogICAgICAgICAgICBpZiggaXNzZXQoJHBhcmFtc1skcHJlZml4LidsYXN0X25hbWUnXSkgKSAkdGhpcy0+bGFzdG5hbWUgPSBzdHJpcF90YWdzKCRwYXJhbXNbJHByZWZpeC4nbGFzdF9uYW1lJ10pOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIHRoZSBkZXRhaWxzIG9mdCBoZSBhZGRyZXNzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByZWZpeCBBbiBvcHRpb25hbCBwcmVmaXggZm9yIGVhY2ggb2YgdGhlIGFycmF5IGtleXMuCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b19hcnJheShzdHJpbmcgJHByZWZpeCA9ICcnKQogICAgewogICAgICAgICRyZXN1bHQgPSBhcnJheSgpOwogICAgICAgICRyZXN1bHRbJHByZWZpeC4nY29tcGFueSddID0gJHRoaXMtPmNvbXBhbnk7CiAgICAgICAgJHJlc3VsdFskcHJlZml4LidmaXJzdF9uYW1lJ10gPSAkdGhpcy0+Zmlyc3RuYW1lOwogICAgICAgICRyZXN1bHRbJHByZWZpeC4nbGFzdF9uYW1lJ10gPSAkdGhpcy0+bGFzdG5hbWU7CiAgICAgICAgJHJlc3VsdFskcHJlZml4LidhZGRyZXNzMSddID0gJHRoaXMtPmFkZHJlc3MxOwogICAgICAgICRyZXN1bHRbJHByZWZpeC4nYWRkcmVzczInXSA9ICR0aGlzLT5hZGRyZXNzMjsKICAgICAgICAkcmVzdWx0WyRwcmVmaXguJ2NpdHknXSA9ICR0aGlzLT5jaXR5OwogICAgICAgICRyZXN1bHRbJHByZWZpeC4nc3RhdGUnXSA9ICR0aGlzLT5zdGF0ZTsKICAgICAgICAkcmVzdWx0WyRwcmVmaXguJ3Bvc3RhbCddID0gJHRoaXMtPnBvc3RhbDsKICAgICAgICAkcmVzdWx0WyRwcmVmaXguJ2NvdW50cnknXSA9ICR0aGlzLT5jb3VudHJ5OwogICAgICAgICRyZXN1bHRbJHByZWZpeC4ncGhvbmUnXSA9ICR0aGlzLT5waG9uZTsKICAgICAgICAkcmVzdWx0WyRwcmVmaXguJ2ZheCddID0gJHRoaXMtPmZheDsKICAgICAgICAkcmVzdWx0WyRwcmVmaXguJ2VtYWlsJ10gPSAkdGhpcy0+ZW1haWw7CiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9Cn0gLy8gY2xhc3MKCgojCiMgRU9GCiMK]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_array.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFV0aWxpdHkgbWV0aG9kcyB0byBkZWFsIHdpdGggYXJyYXlzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKiBAY2F0ZWdvcnkgVXRpbGl0aWVzCiAqIEBhdXRob3IgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsCiAqCiAqIEBub3RlIG1haW50YWluZWQgYnkgRmVybmFuZG8gTW9yZ2FkbyA8Sm8gTW9yZz4gc2luY2UgMjAyMAogKi8KCi8vZGVjbGFyZShzdHJpY3RfdHlwZXM9MSk7IyByZXZpc2l0CgovKioKICogVXRpbGl0eSBtZXRob2RzIHRvIGRlYWwgd2l0aCBhcnJheXMuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqLwpmaW5hbCBjbGFzcyB4dF9hcnJheQp7CiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBBIGZ1bmN0b24gdG8gdGVzdCBpZiBhbiBhcnJheSBlbGVtZW50IGV4aXN0cyBhbmQgaWYgaXQgZG9lcyBub3QsIGFkZCB0aGUgdmFsdWUgc3BlY2lmaWVkLgogICAgICoKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFyciBUaGUgaW5wdXQgYXJyYXkKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaW5zZXJ0X3VuaXF1ZShhcnJheSAkYXJyLCAkdmFsKQogICAgewogICAgICAgIGlmKCAhaW5fYXJyYXkoJHZhbCwkYXJyKSApICRhcnJbXSA9ICR2YWw7CiAgICAgICAgcmV0dXJuICRhcnI7CiAgICB9CgoKICAgIC8qKgogICAgICogQSBtZXRob2QgdG8gdGVzdCBpZiBhbiBhcnJheSBlbGVtZW50IGV4aXN0cyBieSB0ZXN0aW5nCiAgICAgKiBhIHN1YnNldCBvZiBpdCdzIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFyciBUaGUgYXJyYXkgdG8gdGVzdAogICAgICogQHBhcmFtIHN0cmluZyAkZXhwciBUaGUgc3Vic3RyaW5nIGV4cHJlc3Npb24gdG8gdGVzdCBmb3IKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGtleV9leGlzdHNfc3Vic3RyKGFycmF5ICRhcnIsc3RyaW5nICRleHByKQogICAgewogICAgICAgICRrZXlzID0gYXJyYXlfa2V5cyggJGFyciApOwogICAgICAgIGZvcmVhY2goICRrZXlzIGFzICRrICkgewogICAgICAgICAgICBpZiggc3Ryc3RyKCAkaywgJGV4cHIgKSApIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgoKICAgIC8qKgogICAgICogVGVzdCBpZiBhbiBhcnJheSBrZXkgZXhpc3RzLCBnaXZlbiBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgICRhcnIgVGhlIGFycmF5IHRvIHNlYXJjaAogICAgICogQHBhcmFtIHN0cmluZyAkZXhwciBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIHVzZSBpbiB0aGUgc2VhcmNoCiAgICAgKiBAcmV0dXJuIG1peGVkIEZBTFNFIG9yIGFjdHVhbCBrZXkgbmFtZS4KICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBmaW5kX2tleV9yZWdleHAoYXJyYXkgJGFycixzdHJpbmcgJGV4cHIpCiAgICB7CiAgICAgICAgJGtleXMgPSBhcnJheV9rZXlzKCAkYXJyICk7CiAgICAgICAgZm9yZWFjaCggJGtleXMgYXMgJGsgKSB7CiAgICAgICAgICAgIGlmKCBwcmVnX21hdGNoKCAkZXhwciwgJGsgKSApIHJldHVybiAkazsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQoKCiAgICAvKioKICAgICAqIE1lcmdlIHR3byBhcnJheXMgb2YgaGFzaGVzIGJhc2VkIG9uIGNlcnRhaW4ga2V5cwogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkYXJyMSAgVGhlIHByaW1hcnkgYXJyYXkKICAgICAqIEBwYXJhbSBhcnJheSAkYXJyMiAgVGhlIGFycmF5IHRvIGJlIG1lcmdlZAogICAgICogQHBhcmFtIHN0cmluZyAka2V5MSAgVGhlIGtleSBmaWVsZCBpbiB0aGUgZmlyc3QgYXJyYXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleTIgIFRoZSBrZXkgZmllbGQgaW4gdGhlIHNlY29uZCBhcnJheQogICAgICovCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIG1lcmdlX2J5X2tleXMoYXJyYXkgJGFycjEsYXJyYXkgJGFycjIsc3RyaW5nICRrZXkxID0gJ25hbWUnLHN0cmluZyAka2V5MiA9ICduYW1lJykKICAgIHsKICAgICAgICBpZiggIWlzX2FycmF5KCAkYXJyMSApIHx8ICFpc19hcnJheSggJGFycjIgKSApIHJldHVybjsKCiAgICAgICAgJHh4cmVzdWx0ID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoKCAkYXJyMSBhcyAkYTEgKSB7CiAgICAgICAgICAgICRrZXkxdmFsID0gJGExWyRrZXkxXTsKICAgICAgICAgICAgJGZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgIGZvcmVhY2goICRhcnIyIGFzICRhMiApIHsKICAgICAgICAgICAgICAgIGlmKCAkYTJbJGtleTJdID09ICRrZXkxdmFsICkgewogICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGFuIGl0ZW0gdG8gbWVyZ2UKICAgICAgICAgICAgICAgICAgICAkeHhyZXN1bHRbXSA9IGFycmF5X21lcmdlKCRhMSwkYTIpOwogICAgICAgICAgICAgICAgICAgICRmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKCAhJGZvdW5kICkgJHh4cmVzdWx0W10gPSAkYTE7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHh4cmVzdWx0OwogICAgfQoKICAgIC8qKgogICAgICogcmUtYXJyYW5nZSBhbiBhcnJheSBvZiBhcnJheXMgaW50byBhIGhhc2ggb2YgYXJyYXlzCiAgICAgKiBieSBhIHNwZWNpZmllZCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRpbnB1dCBUaGUgaW5wdXQgYXJyYXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IHRvIGNyZWF0ZSB0aGUgb3V0cHV0IGFycmF5IG9uCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIHRvX2hhc2goYXJyYXkgJGlucHV0LCBzdHJpbmcgJGtleSkKICB7CiAgICAkdG1wID0gW107CiAgICAKICAgIGZvcmVhY2goJGlucHV0IGFzICRvbmUpCiAgICB7CiAgICAgIGlmKCFpc3NldCgkb25lWyRrZXldKSkgeyBjb250aW51ZTsgfQogICAgICAKICAgICAgJHRtcFskb25lWyRrZXldXSA9ICRvbmU7CiAgICB9CiAgICAKICAgIHJldHVybiAkdG1wOwogIH0KICAKICAvKioKICAgICAqIEV4dHJhY3Qgb25lIGZpZWxkIGZyb20gYW4gYXJyYXkgb2YgaGFzaGVzIGludG8gYSBmbGF0IGFycmF5CiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRpbnB1dCBUaGUgaW5wdXQgYXNzb2NpYXRpdmUgYXJyYXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IHRvIGV4dHJhY3QgZnJvbSB0aGUgYXJyYXkgb2YgaGFzaGVzCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXh0cmFjdF9maWVsZChhcnJheSAkaW5wdXQsc3RyaW5nICRrZXkpCiAgICB7CiAgICAgICAgaWYoICFpc19hcnJheSgkaW5wdXQpICkgcmV0dXJuOwogICAgICAgICR0bXAgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2goICRpbnB1dCBhcyAkb25lICkgewogICAgICAgICAgICBpZiggIWlzc2V0KCRvbmVbJGtleV0pICkgY29udGludWU7CiAgICAgICAgICAgICR0bXBbXSA9ICRvbmVbJGtleV07CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdG1wOwogICAgfQoKICAgIC8qKgogICAgICogQ29tcGFyZSB0d28gaGFzaGVzIGJ5IHRoZSBrZXkgJ3NvcnRfa2V5JwogICAgICogVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIHNvcnRpbmcgYXJyYXlzIG9mIGhhc2hlcy4KICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICogQHBhcmFtIGFycmF5ICRlMSBBc3NvY2lhdGl2ZSBBcnJheSAxCiAgICAgKiBAcGFyYW0gYXJyYXkgJGUyIEFzc29jaWF0aXZlIEFycmF5IDIKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IHRvIHNvcnQgZWFjaCBlbGVtZW50IGJ5CiAgICAgKiBAcmV0dXJuIGludCAtMSwgMCwgb3IgLTEKICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBjb21wYXJlX2VsZW1lbnRzX2J5X3NvcnRvcmRlcl9rZXkoYXJyYXkgJGUxLGFycmF5ICRlMixzdHJpbmcgJGtleSA9ICdzb3J0X2tleScpCiAgICB7CiAgICAgICAgaWYoICRlMVska2V5XSA8ICRlMlska2V5XSApIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKCAkZTFbJGtleV0gPiAkZTJbJGtleV0gKSB7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKICAgIH0KCgogICAgLyoqCiAgICAgKiBTb3J0IGFycmF5IG9mIGhhc2hlcyBieSBrZXkKICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICogQHBhcmFtIGFycmF5ICRpbnB1dCBBbiBhcnJheSBvZiBoYXNoZXMuIFRoaXMgYXJyYXkgb2YgaGFzaGVzIGlzIHNvcnRlZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgaGFzaCBrZXkgdG8gc29ydCBieQogICAgICogQHBhcmFtIGJvb2wgJGlzX3N0cmluZyBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUga2V5IGlzIGEgc3RyaW5nCiAgICAgKiBAcGFyYW0gYm9vbCAkY2FzZWNvbXBhcmUgSWYgJGlzX3N0cmluZyBpcyB0cnVlLCB3aGV0aGVyIHRvIGRvICdjYXNlIHNlbnNpdGl2ZScgY29tcGFyaXNvbnMKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBoYXNoc29ydChhcnJheSAmJGlucHV0LHN0cmluZyAka2V5LGJvb2wgJGlzX3N0cmluZyA9IGZhbHNlLGJvb2wgJGNhc2Vjb21wYXJlID0gZmFsc2UpCiAgICB7CiAgICAgICAgJGZ1bmMgPSBmdW5jdGlvbigkYSwkYikgdXNlICgka2V5LCRpc19zdHJpbmcsJGNhc2Vjb21wYXJlKSB7CiAgICAgICAgICAgIGlmKCAkaXNfc3RyaW5nICkgewogICAgICAgICAgICAgICAgaWYoICRjYXNlY29tcGFyZSApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyY2FzZWNtcCgkYVska2V5XSwkYlska2V5XSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyY21wKCRhWyRrZXldLCRiWyRrZXldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiggJGFbJGtleV0gPT0gJGJbJGtleV0gKSByZXR1cm4gMDsKICAgICAgICAgICAgaWYoICRhWyRrZXldIDwgJGJbJGtleV0gKSByZXR1cm4gLTE7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH07CgogICAgICAgIHJldHVybiB1c29ydCgkaW5wdXQsJGZ1bmMpOwogICAgfQoKICAgIC8qKgogICAgICogU29ydCBhcnJheSBvZiBvYmplY3RzIGJ5IG1lbWJlcgogICAgICoKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKiBAcGFyYW0gYXJyYXkgJGlucHV0IEFycmF5IG9mIG9iamVjdHMgdG8gc29ydAogICAgICogQHBhcmFtIHN0cmluZyAkbWVtYmVyIFRoZSBtZW1iZXIgbmFtZSB0byBzb3J0IG9uCiAgICAgKiBAcGFyYW0gYm9vbCAkaXNfc3RyaW5nIEluZGljYXRlcyB3aGV0aGVyIHRoZSBtZW1iZXIgaXMgYSBzdHJpbmcKICAgICAqIEBwYXJhbSBib29sICRjYXNlY29tcGFyZSBXaGV0aGVyIHRoZSB2YWx1ZXMgc2hvdWxkIGJlIHNvcnRlZCBpbiBhICdjYXNlLXNlbnNpdGl2ZScsIG9yICdjYXNlLWluc2Vuc2l0aXZlJyBtYW5uZXIuCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb2Jqc29ydChhcnJheSAmJGlucHV0LCBzdHJpbmcgJG1lbWJlciwgYm9vbCAkaXNfc3RyaW5nID0gZmFsc2UsIGJvb2wgJGNhc2Vjb21wYXJlID0gZmFsc2UpCiAgICB7CiAgICAgICAgJGZ1bmMgPSBmdW5jdGlvbigkYSwkYikgdXNlICgkbWVtYmVyLCRpc19zdHJpbmcsJGNhc2Vjb21wYXJlKSB7CiAgICAgICAgICAgIGlmKCAkaXNfc3RyaW5nICkgewogICAgICAgICAgICAgICAgaWYoICRjYXNlY29tcGFyZSApIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyY2FzZWNtcCgkYS0+JG1lbWJlciwkYi0+JG1lbWJlcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyY21wKCRhLT4kbWVtYmVyLCRiLT4kbWVtYmVyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiggJGEtPiRtZW1iZXIgPT0gJGItPiRtZW1iZXIgKSByZXR1cm4gMDsKICAgICAgICAgICAgaWYoICRhLT4kbWVtYmVyIDwgJGItPiRtZW1iZXIgKSByZXR1cm4gLTE7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH07CgogICAgICAgIHJldHVybiB1c29ydCgkaW5wdXQsJGZ1bmMpOwogICAgfQoKCiAgICAvKioKICAgICAqIFNvcnQgYXJyYXkgb2YgaGFzaGVzIGJ5IGtleSBpbiByZXZlcnNlIG9yZGVyCiAgICAgKgogICAgICogQHNlZSBzZWxmOjpoYXNoc29ydAogICAgICogQHBhcmFtIGFycmF5ICRpbnB1dCBUaGUgaW5wdXQgYXJyYXkgb2YgaGFzaGVzLiAgVGhpcyBhcnJheSBpcyBtb2RpZmllZCBvbiBvdXRwdXQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgaGFzaCBrZXkgdG8gc29ydCBieQogICAgICogQHBhcmFtIGJvb2wgJGlzX3N0cmluZyB3aGV0aGVyIHRoZSB2YWx1ZSBvZiB0aGUga2V5IGlzIGEgc3RyaW5nIG9yIG5vdAogICAgICogQHBhcmFtIGJvb2wgJGNhc2Vjb21wYXJlIElmIHRoZSB2YWx1ZSBvZiB0aGUga2V5IGlzIGEgc3RyaW5nLCB3aGV0aGVyIGl0IHNob3VsZCBiZSBzb3J0ZWQgaW4gYSBjYXNlIHNlbnNpdGl2ZSBtYW5uZXIsIG9yIG5vdC4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGhhc2hyc29ydChhcnJheSAmJGlucHV0LHN0cmluZyAka2V5LGJvb2wgJGlzX3N0cmluZyA9IGZhbHNlLGJvb2wgJGNhc2Vjb21wYXJlID0gZmFsc2UpCiAgICB7CiAgICAgICAgJHRtcCA9IHNlbGY6Omhhc2hzb3J0KCRpbnB1dCwka2V5LCRpc19zdHJpbmcsJGNhc2Vjb21wYXJlKTsKICAgICAgICBpZiggJHRtcCApIHsKICAgICAgICAgICAgJHRtcDIgPSBhcnJheV9yZXZlcnNlKCRpbnB1dCk7CiAgICAgICAgICAgICRpbnB1dCA9ICR0bXAyOwogICAgICAgIH0KICAgIH0KCgogICAgLyoqCiAgICAgKiBFeHBsb2RlIGFuIGFycmF5IGludG8gYSBoYXNoCiAgICAgKiB1c2VmdWwgZm9yIHNlcGFyYXRpbmcgcGFyYW1zIG9uIGEgVVJMIGludG8gYSBoYXNoCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyIFRoZSBpbnB1dCBzdHJpbmcuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbmdsdWUgaW5uZXIgZ2x1ZSBzdHJpbmcgKHNlcGFyYXRlcyBuYW1lIGZyb20gdmFsdWUpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvdXRnbHVlIG91dGVyIGdsdWUgc3RyaW5nIChzZXBhcmF0ZXMgZWFjaCB2YXJpYWJsZS92YWx1ZSBjb21iaW5hdGlvbikKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBleHBsb2RlX3dpdGhfa2V5KHN0cmluZyAkc3RyLCBzdHJpbmcgJGluZ2x1ZT0nPScsIHN0cmluZyAkb3V0Z2x1ZT0nJicpCiAgICB7CiAgICAgICAgJHJldCA9IGFycmF5KCk7CiAgICAgICAgJGExID0gZXhwbG9kZSgkb3V0Z2x1ZSwkc3RyKTsKICAgICAgICBmb3JlYWNoKCAkYTEgYXMgJGEyICkgewogICAgICAgICAgICAkYTIgPSB0cmltKCRhMik7CiAgICAgICAgICAgICRrID0gJHYgPSAkYTI7CiAgICAgICAgICAgICRnb3RfaW5nbHVlID0gMDsKICAgICAgICAgICAgaWYoIHN0cnN0cigkYTIsICRpbmdsdWUpICE9PSBGQUxTRSApIHsKICAgICAgICAgICAgICAgICRnb3RfaW5nbHVlID0gMTsKICAgICAgICAgICAgICAgIFsgJGssICR2IF0gPSBleHBsb2RlKCAkaW5nbHVlLCAkYTIsIDIgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmV0WyAkayBdID0gKCAkdiA9PSAnJyAmJiAhJGdvdF9pbmdsdWUgKSA/ICRrIDogJHYgOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCgogICAgLyoqCiAgICAgKiBHaXZlbiBhbiBhcnJheSBhbmQgYSB2YWx1ZSwgcmV0dXJuIHRoZSBpbmRleCBvZiB0aGF0IHZhbHVlCiAgICAgKgogICAgICogQGRlcHJlY2F0ZWQKICAgICAqIEBwYXJhbSBhcnJheSAkZGF0YQogICAgICogQHBhcmFtIG1peGVkICRuZWVkbGUKICAgICAqIEByZXR1cm4gaW5kZXggb3IgRkFMU0UKICAgICAqLwogICAgZnVuY3Rpb24gZmluZF9pbmRleChhcnJheSAkZGF0YSwgJG5lZWRsZSkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfc2VhcmNoKCRuZWVkbGUsJGRhdGEpOwogICAgfQoKCiAgICAvKioKICAgICAqIEltcGxvZGUgYSBoYXNoIGludG8gYW4gYXJyYXkKICAgICAqIHN1aXRhYmxlIGZvciBmb3JtaW5nIGEgVVJMIHN0cmluZyB3aXRoIG11bHRpcGxlIGtleS92YWx1ZSBwYWlycwogICAgICoKICAgICAqIEBwYXJhbSBoYXNoICRhc3NvYyBpbnB1dCBoYXNoCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbmdsdWUgaW5uZXIgZ2x1ZQogICAgICogQHBhcmFtIHN0cmluZyAkb3V0Z2x1ZSBvdXRlciBnbHVlCiAgICAgKiBAcmV0dXJucyBzdHJpbmc7CiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gaW1wbG9kZV93aXRoX2tleShhcnJheSAkYXNzb2MsIHN0cmluZyAkaW5nbHVlID0gJz0nLCBzdHJpbmcgJG91dGdsdWUgPSAnJicpCiAgICB7CiAgICAgICAgJHJldHVybiA9IG51bGw7CiAgICAgICAgZm9yZWFjaCAoJGFzc29jIGFzICR0ayA9PiAkdHYpICRyZXR1cm4gLj0gJG91dGdsdWUuJHRrLiRpbmdsdWUuJHR2OwogICAgICAgIHJldHVybiBzdWJzdHIoJHJldHVybixzdHJsZW4oJG91dGdsdWUpKTsKICAgIH0KCgogICAgLyoqCiAgICAgKiBHaXZlbiBhbiBhcnJheSwgaW1wbG9kZSBpdCBpbnRvIGEgc3RyaW5nIHdpdGggbm9uIGVtcHR5IHZhbHVlcyBxdW90ZWQuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRkYXRhIFRoZSBpbnB1dCBhcnJheQogICAgICogQHBhcmFtIHN0cmluZyAkZ2x1ZSBIb3cgZWFjaCB2YWx1ZSBzaG91bGQgYmUgc2VwYXJhdGVkIGluIHRoZSBpbnB1dAogICAgICogQHBhcmFtIHN0cmluZyAkcXVvdGUgSG93IG5vbiBlbXB0eSBmaWVsZHMgc2hvdWxkIGJlIGRlbGltaW5hdGVkCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGltcGxvZGVfcXVvdGVkKGFycmF5ICRkYXRhLHN0cmluZyAkZ2x1ZSA9ICcsJyxzdHJpbmcgJHF1b3RlID0gJyInKQogICAgewogICAgICAgICRyZXR1cm4gPSAnJzsKICAgICAgICAkdmFsdWVzID0gYXJyYXlfdmFsdWVzKCRkYXRhKTsKICAgICAgICBmb3IoICRpID0gMCwgJG4gPSBjb3VudCgkdmFsdWVzKTsgJGkgPCAkbjsgJGkrKyApIHsKICAgICAgICAgICAgaWYoICFlbXB0eSgkdmFsdWVzWyRpXSkgKSAkdmFsdWVzWyRpXSA9ICRxdW90ZSAuIChzdHJpbmcpICR2YWx1ZXNbJGldIC4gJHF1b3RlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaW1wbG9kZSgkZ2x1ZSwkdmFsdWVzKTsKICAgIH0KCgogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBzdHJfcHV0Y3N2KGFycmF5ICRpbnB1dCwgc3RyaW5nICRkZWxpbWl0ZXIgPSAnLCcsIHN0cmluZyAkZW5jbG9zdXJlID0gJyInKQogICAgewogICAgICAgICRmcCA9IGZvcGVuKCdwaHA6Ly90ZW1wJywgJ3IrJyk7CiAgICAgICAgZnB1dGNzdigkZnAsICRpbnB1dCwgJGRlbGltaXRlciwgJGVuY2xvc3VyZSk7CiAgICAgICAgcmV3aW5kKCRmcCk7CiAgICAgICAgJGRhdGEgPSBmcmVhZCgkZnAsIDEwNDg1NzYpOwogICAgICAgIGZjbG9zZSgkZnApOwogICAgICAgIHJldHVybiBydHJpbSgkZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0IGEgaGFzaCBpbnRvIGEgc3RkY2xhc3Mgb2JqZWN0CiAgICAgKgogICAgICogQHBhcmFtIGhhc2ggJGFycmF5IGlucHV0IGFycmF5CiAgICAgKiBAcGFyYW0gYm9vbCAkcmVjdXJzaXZlIHdoZXRoZXIgb3Igbm90IHRvIGRvIHJlY3Vyc2l2ZSBjb252ZXJzaW9uCiAgICAgKiBAcmV0dXJuIHN0ZGNsYXNzIG9iamVjdC4KICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiB0b19vYmplY3QoYXJyYXkgJGFycmF5LGJvb2wgJHJlY3Vyc2l2ZSA9IEZBTFNFKQogICAgewogICAgICAgICRvYmogPSBuZXcgXFN0ZENsYXNzKCk7CiAgICAgICAgZm9yZWFjaCggJGFycmF5IGFzICRrZXkgPT4gJHZhbHVlICkgewogICAgICAgICAgICBpZiggaXNfYXJyYXkoJHZhbHVlKSAmJiAkcmVjdXJzaXZlICkgewogICAgICAgICAgICAgICAgJG9iai0+JGtleSA9IHNlbGY6OnRvX29iamVjdCgkdmFsdWUsJHJlY3Vyc2l2ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkb2JqLT4ka2V5ID0gJHZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb2JqOwogICAgfQoKCiAgICAvKioKICAgICAqIFByZXBlbmQgYSBrZXkvdmFsdWUgcGFpciB0byBhIGhhc2guCiAgICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHByZXBlbmRpbmcgYW4gJ2FueScgdmFsdWUgdG8gYSBsaXN0IHJldHJpZXZlZCBmcm9tIHRoZSBkYXRhYmFzZSwgZm9yIHVzZSBpbiBmaWx0ZXJpbmcgZGlhbG9ncyBldGMuCiAgICAgKgogICAgICogQHBhcmFtIGhhc2ggJGlucHV0IGlucHV0IGFycmF5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBwcmVwZW5kCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIFRoZSB2YWx1ZSB0byBwcmVwZW5kCiAgICAgKiBAcmV0dXJuIGhhc2gKICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBoYXNoX3ByZXBlbmQoYXJyYXkgJGlucHV0LHN0cmluZyAka2V5LCR2YWx1ZSkKICAgIHsKICAgICAgICAkdG1wID0gYXJyYXkoKTsKICAgICAgICAkdG1wWyRrZXldID0gJHZhbHVlOwogICAgICAgIGlmKCBpc19hcnJheSgkaW5wdXQpICkgewogICAgICAgICAgICBmb3JlYWNoKCAkaW5wdXQgYXMgJGtleSA9PiAkdmFsdWUgKSB7CiAgICAgICAgICAgICAgICAkdG1wWyRrZXldID0gJHZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdG1wOwogICAgfQoKCiAgICAvKioKICAgICAqIFJlbW92ZSBBbGwgZWxlbWVudHMgb2YgdGhlIGlucHV0IGFycmF5IHRoYXQgaGF2ZSB0aGUgc3BlY2lmaWVkIHZhbHVlCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRpbnB1dCBUaGUgaW5wdXQgaGFzaC9hcnJheQogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUgVGhlIHZhbHVlIHRvIHJlbW92ZQogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIHJlbW92ZV9ieV92YWx1ZShhcnJheSAkaW5wdXQsc3RyaW5nICR2YWx1ZSA9ICcnKQogICAgewogICAgICAgICR0bXAgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2goICRpbnB1dCBhcyAka2V5ID0+ICRvbmUgKSB7CiAgICAgICAgICAgIGlmKCAkb25lICE9ICR2YWx1ZSApICR0bXBbJGtleV0gPSAkb25lOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHRtcDsKICAgIH0KCiAgICAvKioKICAgICAqIFRlc3QgaWYgdGhlIGlucHV0IGFycmF5IGlzIGFuIGFzc29jaWF0aXZlIGFycmF5IChzdHJpbmdzIG9yIHNvbWV0aGluZyBlbHNlIGZvciBrZXlzLCBpbnN0ZWFkIG9mIGxpbmVhcmx5IGluY3JlYXNpbmcgaW50ZWdlcnMpCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRhcnIgVGhlIHRlc3QgYXJyYXkKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGlzX2hhc2goYXJyYXkgJGFycikgOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleXMoJGFycikgIT09IHJhbmdlKDAsIGNvdW50KCRhcnIpIC0gMSk7CiAgICB9CgoKICAgIC8qKgogICAgICogR2l2ZW4gYSBoYXNoIG9mIHJlY29yZHMsIHdoZXJlIHRoZSBrZXkgZGVub3RlcyB0aGUgcGF0aCBzZXBhcmV0ZWQKICAgICAqIHdpdGggYSBkZWxpbWlldGVyLCBnZW5lcmF0ZSBhIHRyZWUgb2YgcmVjb3Jkcy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGhhc2ggIFRoZSBpbnB1dCBoYXNoCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZWxpbWl0ZXIgIFRoZSBpZGVudGlmaWVyIGRlbGltaXRlciAodXNlZCBvbiBoYXNoIGtleXMpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiYXNldmFsICBJbnRlcm5hbCB1c2Ugb25seQogICAgICovCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGV4cGxvZGVfdG9fdHJlZShhcnJheSAkaGFzaCwgc3RyaW5nICRkZWxpbWl0ZXIgPSAnLicsIGJvb2wgJGJhc2V2YWwgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZighaXNfYXJyYXkoJGhhc2gpKSByZXR1cm4gZmFsc2U7CiAgICAgICAgJHNwbGl0UkUgICA9ICcvJyAuIHByZWdfcXVvdGUoJGRlbGltaXRlciwgJy8nKSAuICcvJzsKICAgICAgICAkcmV0dXJuQXJyID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkaGFzaCBhcyAka2V5ID0+ICR2YWwpIHsKICAgICAgICAgICAgLy8gR2V0IHBhcmVudCBwYXJ0cyBhbmQgdGhlIGN1cnJlbnQgbGVhZgogICAgICAgICAgICAkcGFydHMgICAgPSBwcmVnX3NwbGl0KCRzcGxpdFJFLCAka2V5LCAtMSwgUFJFR19TUExJVF9OT19FTVBUWSk7CiAgICAgICAgICAgICRsZWFmUGFydCA9IGFycmF5X3BvcCgkcGFydHMpOwoKICAgICAgICAgICAgLy8gQnVpbGQgcGFyZW50IHN0cnVjdHVyZQogICAgICAgICAgICAvLyBNaWdodCBiZSBzbG93IGZvciByZWFsbHkgZGVlcCBhbmQgbGFyZ2Ugc3RydWN0dXJlcwogICAgICAgICAgICAkcGFyZW50QXJyID0gJiRyZXR1cm5BcnI7CiAgICAgICAgICAgIGZvcmVhY2ggKCRwYXJ0cyBhcyAkcGFydCkgewogICAgICAgICAgICAgICAgaWYgKCFpc3NldCgkcGFyZW50QXJyWyRwYXJ0XSkpIHsKICAgICAgICAgICAgICAgICAgICAkcGFyZW50QXJyWyRwYXJ0XSA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoIWlzX2FycmF5KCRwYXJlbnRBcnJbJHBhcnRdKSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkYmFzZXZhbCkgewogICAgICAgICAgICAgICAgICAgICAgICAkcGFyZW50QXJyWyRwYXJ0XSA9IGFycmF5KCdfX2Jhc2VfdmFsJyA9PiAkcGFyZW50QXJyWyRwYXJ0XSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmVudEFyclskcGFydF0gPSBhcnJheSgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRwYXJlbnRBcnIgPSAmJHBhcmVudEFyclskcGFydF07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIEFkZCB0aGUgZmluYWwgcGFydCB0byB0aGUgc3RydWN0dXJlCiAgICAgICAgICAgIGlmIChlbXB0eSgkcGFyZW50QXJyWyRsZWFmUGFydF0pKSB7CiAgICAgICAgICAgICAgICAkcGFyZW50QXJyWyRsZWFmUGFydF0gPSAkdmFsOwogICAgICAgICAgICB9IGVsc2VpZiAoJGJhc2V2YWwgJiYgaXNfYXJyYXkoJHBhcmVudEFyclskbGVhZlBhcnRdKSkgewogICAgICAgICAgICAgICAgJHBhcmVudEFyclskbGVhZlBhcnRdWydfX2Jhc2VfdmFsJ10gPSAkdmFsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmV0dXJuQXJyOwogICAgfQoKICAgIC8qKgogICAgICogU21hcnRseSBleHBsb2RlIGEgc3RyaW5nIGludG8gYW4gYXJyYXkgZ2l2ZW4gYSBkZWxpbWl0ZXIsIGFuZCBhIHNhZmUgY2hhcmFjdGVyLgogICAgICogQW55IGluc3RhbmNlcyBvZiB0aGUgZGVsaW1pdGVyIGluc2lkZSB0d28gJ3NhZmUgY2hhcmFjdGVycycgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgdmFsdWUuCiAgICAgKgogICAgICogVGhpcyBpcyB1c2VmdWwgd2hlbiBpbXBvcnRpbmcgZGF0YSBmcm9tIENTVi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHIgVGhlIGlucHV0IHN0cmluZwogICAgICogQHBhcmFtIHN0cmluZyAkZGVsaW0gVGhlIGZpZWxkIGRlbGltZXRlcgogICAgICogQHBhcmFtIHN0cmluZyAkc2FmZV9jaGFyIFRoZSBzYXZlIGNoYXJhY3RlcgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNtYXJ0X2V4cGxvZGUoc3RyaW5nICRzdHIsc3RyaW5nICRkZWxpbSA9ICcsJyxzdHJpbmcgJHNhZmVfY2hhciA9ICciJykKICAgIHsKICAgICAgICAkb3V0ID0gYXJyYXkoKTsKICAgICAgICAkY29sID0gJyc7CiAgICAgICAgJGlzX3NhZmUgPSAwOwogICAgICAgICRwcmV2X2NoYXIgPSAnJzsKICAgICAgICBmb3IoICRpID0gMCwgJG4gPSBzdHJsZW4oJHN0cik7ICRpIDwgJG47ICRpKysgKSB7CiAgICAgICAgICAgIHN3aXRjaCgkc3RyWyRpXSkgewogICAgICAgICAgICBjYXNlICRkZWxpbToKICAgICAgICAgICAgICAgIGlmKCAhJGlzX3NhZmUgKSB7CiAgICAgICAgICAgICAgICAgICAgJG91dFtdID0gJGNvbDsKICAgICAgICAgICAgICAgICAgICAkY29sID0gJyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkY29sIC49ICRzdHJbJGldOwogICAgICAgICAgICAgICAgICAgIC8vJGlzX3NhZmUgPSAhJGlzX3NhZmU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgJHNhZmVfY2hhcjoKICAgICAgICAgICAgICAgIGlmKCAkcHJldl9jaGFyICE9ICdcXCcgKSB7CiAgICAgICAgICAgICAgICAgICAgJGlzX3NhZmUgPSAhJGlzX3NhZmU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkY29sIC49ICRzdHJbJGldOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgJGNvbCAuPSAkc3RyWyRpXTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkcHJldl9jaGFyID0gJHN0clskaV07CiAgICAgICAgfQoKICAgICAgICBpZiggc3RybGVuKCRjb2wpICE9IDAgKSAkb3V0W10gPSAkY29sOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIC8qKgogICAgICogU2VhcmNoIGEgaGFzaCAocmVjdXJzaXZlbHkpIHRvIGZpbmQgYW4gZW50cnkgd2hlcmUgdGhlIGtleSBzcGVjaWZpZWQgaXMgZm91bmQKICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICogQHBhcmFtIGFycmF5ICRpbnB1dCBBIChwb3RlbnRpYWxseSByZWN1cnNpdmUpIGhhc2gKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5lZWRsZSBhIG1lbWJlciBuYW1lCiAgICAgKiBAcmV0dXJuIG1peGVkIFRoZSB2YWx1ZSBvZiB0aGUgZm91bmQgbWVtYmVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZWFyY2hfcmVjdXJzaXZlKGFycmF5ICRpbnB1dCxzdHJpbmcgJG5lZWRsZSkKICAgIHsKICAgICAgICBmb3JlYWNoKCAkaW5wdXQgYXMgJGtleSA9PiAkdmFsdWUgKSB7CiAgICAgICAgICAgIGlmKCAka2V5ID09ICRuZWVkbGUgKSByZXR1cm4gJHZhbHVlOwogICAgICAgICAgICBpZiggaXNfYXJyYXkoJHZhbHVlKSApIHsKICAgICAgICAgICAgICAgICRyZXMgPSBzZWxmOjpzZWFyY2hfcmVjdXJzaXZlKCR2YWx1ZSwkbmVlZGxlKTsKICAgICAgICAgICAgICAgIGlmKCAkcmVzICkgcmV0dXJuICRyZXM7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgCiAgLyoqCiAgICogSXMgdGhlIGlucHV0IGFycmF5IGFzc29jaWF0aXZlPwogICAqIEBwYXJhbSBhcnJheSAkYXJyCiAgICoKICAgKiBAYXV0aG9yIEZlcm5hbmRvIE1vcmdhZG8KICAgKiBAc2luY2UgMS40LjQKICAgKgogICAqIEByZXR1cm4gYm9vbAogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNfYXNzb2MoYXJyYXkgJGFycikKICB7CiAgICBpZihbXSA9PT0gJGFycikgeyByZXR1cm4gRkFMU0U7IH0KICAgIAogICAgcmV0dXJuIFxhcnJheV9rZXlzKCRhcnIpICE9PSBccmFuZ2UoMCwgXGNvdW50KCRhcnIpIC0gMSk7CiAgfQoKfSAvLyBjbGFzcwoKIwojIEVPRgojCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_browser.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQovKioKICogQSB3cmFwcGVyIGFyb3VuZCB0aGUgaW5jbHVkZWQgQnJvd3NlIGNsYXNzIHdpdGggc3BlY2lhbGl6ZWQgYmVoYXZpb3IuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBVdGlsaXRpZXMKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxMCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCm5hbWVzcGFjZSBDTVNNU0V4dDsKdXNlIFxDTVNNU0V4dFxCcm93c2VyIGFzIEJyb3dzZXI7CgpjbGFzcyB4dF9icm93c2VyIGV4dGVuZHMgQnJvd3Nlcgp7CiAgICAvKioKICAgICAqIEEgbWV0aG9kIHRvIGNoZWNrIGlmIHRoZSBjdXJyZW50IHVzZXIgYWdlbnQgaXMgYSBrbm93biBib3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJ1bGtDaGVja1JvYm90KCkKICAgIHsKICAgICAgICAkYm90X2xpc3QgPSBhcnJheSgnRXpvb21zJywgJ01TTkJvdCcsICdiaW5nYm90JywgJ01haWwuUnUgYm90JywgJ0dvb2dsZWJvdCcsICdNSjEyYm90JywgJ1VuaXN0ZXJCb3QnLCAnQmFpZHVzcGlkZXInLCAnR3JhcGVzaG90Q3Jhd2xlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0dlbmllbyBXZWIgZmlsdGVyJywgJ2JpdGx5Ym90JywgJ1lhbmRleEJvdCcsICdpYV9hcmNoaXZlcicsICdFeEIgTGFuZ3VhZ2UgQ3Jhd2xlcicsICdOYXZlckJvdCcsICdwcm94aW1pYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dlYlRodW1ibmFpbCcsICdNZXRhSm9iQm90JywgJ0FkZFRoaXMuY29tJywgJ1NwaW5uM3InLCAnc29nb3Ugc3BpZGVyJywgJ2NvY2NvYycsICdpY2hpcm8nLCAnVUFTbGlua0NoZWNrZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICd1TUJvdC1GQycsICdEYXVtb2EnLCAnRXhhYm90JywgJ21hZ3BpZS1jcmF3bGVyJywgJ0NoYW5nZURldGVjdGlvbicsICdadW1Cb3QnLCAnTmV0c2VlcicsICdZYWhvbyEgSkFQQU4nLCAnWWFob28hJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnQ2FyZWVyQm90JywgJ3JvZ2VyYm90JywgJ1Nob3d5b3VCb3QnLCAnQnV0dGVyZmx5JywgJ0luZm9oZWxmZXInLCAnVmFnYWJvbmRvJywgJ1Nob3BXaWtpJywgJ3Npc3RyaXgnLCAnV29rbycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NlbXJ1c2hCb3QnLCAnWWlvb3BCb3QnLCAnTmFqZGkuc2knLCAnbGlua2RleGJvdCcsICdTZXpuYW1Cb3QnLCAnQTYtSW5kZXhlcicsICdWZWRtYScsICdBaHJlZnNCb3QnLCAnYXJjaGl2ZS5vcmdfYm90JywKICAgICAgICAgICAgICAgICAgICAgICAgICAneWFjeWJvdCcsICdhbGV4YSBzaXRlIGF1ZGl0JywgJ1NFT2tpY2tzLVJvYm90JywgJ2JpeG9jcmF3bGVyJywgJ0Jyb3dzZXJzaG90cycsICdzcGJvdCcsICdIdWJTcG90IENvbm5lY3QnLCAnSnl4b2JvdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1R1cm5pdGluQm90JywgJ2FpSGl0Qm90JywgJ1NlYXJjaG1ldHJpY3NCb3QnLCAnQkxFWEJvdCcsICdDb21wU3B5Qm90JywgJ3BzYm90JywgJ1RpbkV5ZScsICdOdWhrJywgJ1dvdGJveCcsICdWb2lsYUJvdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JsZWtrb2JvdCcsICd3b3Jpb2JvdCcsICduZXRFc3RhdGUgQ3Jhd2xlcicsICdzZWFyY2guS3VtS2llLmNvbScsICdOZXRjcmFmdFN1cnZleUFnZW50JywgJ0JVYmlORycsICc4MGxlZ3MnLCAnQWJvdW5kZXhib3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdCaW5nUHJldmlldycsICdTRU9FTkdCb3QnLCAnQXJhQm90JywgJ1Nlb0NoZWNrQm90JywgJ0FNWk5LQXNzb2NCb3QnLCAnbGlua2RleC5jb20nLCAnQ2xpcXpib3QnLCAnU3BlZWR5JywgJ21lYW5wYXRoYm90JywgJ1BsdWtraWUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdwYXJzaWpvbycsICdvQm90JywgJ0hvc3RUcmFja2VyJywgJ09wZW5XZWJTcGlkZXInLCAnV0JTZWFyY2hCb3QnLCAnwqBGYWNlYm9va0V4dGVybmFsSGl0JywgJ3NvY2lhbGJtX2JvdCcsICdLck9XTGVyJywgJ2lDam9icycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lzdGVsbGFCb3QnLCAnQ2xpcXpCb3QnLCAnZmluZGxpbmtzJywgJ0ludGVncm9tZURCJywgJ0ZsaXBib2FyZFByb3h5JywgJ01vamVla0JvdCcsICdTQlNlYXJjaCcsICdOaWdtYS5ydScsICdRdWFsaWRhdG9yLmNvbSBCb3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdCYWNrbGlua0NyYXdsZXInLCAnUGVlcGxvIFNjcmVlbnNob3QgQm90JywgJ3RyZW5kaWN0aW9uYm90JywgJ1BhbnNjaWVudCB3ZWIgY3Jhd2xlcicsICdGeWJlclNwaWRlcicsICdDQ1Jlc2VhcmNoQm90JywgJ1NlbWFudGlmaXJlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnTGlua0FpZGVyJywgJ1FpcmluYSBIdXJkbGVyJywgJ1pvb2thYm90JywgJ0NyYXdsZXI0aicsICdTY3JlZW5lckJvdCBDcmF3bGVyJywgJ0Nsb3VkU2VydmVyTWFya2V0U3BpZGVyJywgJ3dlYm1hc3RlcmNvZmZlZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BhcGVyTGlCb3QnLCAnUXVlcnlTZWVrZXJTcGlkZXInLCAnQ3Jvd3NuZXN0JywgJ1Vud2luZEZldGNob3InLCAnTWV0YVVSSSBBUEknLCAnQWNvb25Cb3QnLCAnU3RlZWxlcicsICdHaWdhYm90JywgJ2Zpcm1pbHlib3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdTb3Nvc3BpZGVyJywgJ09wZW5pbmRleFNwaWRlcicsICdNZXRhSGVhZGVyc0JvdCcsICdTdHJva2Vib3QnLCAnR2VsaXlvb0JvdCcsICdDQ0JvdCcsICdib3QtcGdlLmNobG9vZS5jb20nLCAnb3duQ2xvdWQgU2VydmVyIENyYXdsZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICdDaXJydXNFeHBsb3JlcicsICdQcm9Db2dTRU9Cb3QnLCAnRmFsY29uc2JvdCcsICdEbHZyLml0LzEuMCcsICd0aHVtYnNob3RzLWRlLUJvdCcsICcyMDBQbGVhc2VCb3QnLCAnZGlzY292ZXJ5Ym90JywgJ1I2IGJvdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JsLnVrX2xkZGNfYm90JywgJ1NvbG9tb25vQm90JywgJ0dyYWhhbWJvdCcsICdBdXRvbWF0dGljIEFuYWx5dGljcyBDcmF3bGVyJywgJ2VtZWZnZWJvdCcsICdZb3VkYW9Cb3QnLCAnUGlwbEJvdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZsaWdodERlY2tSZXBvcnRzQm90JywgJ2Zhc3Rib3QgY3Jhd2xlcicsICc0c2VvaHVudEJvdCcsICdVcGRvd25lcmJvdCcsICdKaWtlU3BpZGVyJywgJ05MTlpfSUFIYXJ2ZXN0ZXIyMDEzJywgJ3dzQW5hbHl6ZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICdZb2Rhb0JvdCcsICdTcGlkZXJMaW5nJywgJ0Vzcmlib3QnLCAnVGh1bWJzaG90cy5ydScsICdCbG9nUHVsc2UnLCAnTmV4dEdlblNlYXJjaEJvdCcsICdib3Qud3Nvd25lci5jb20nLCAnd3NjaGVjay5jb20nLAogICAgICAgICAgICAgICAgICAgICAgICAgICdRc2Vlcm8nLCAnZHJ1cGFjdCcsICdIdWF3ZWlTeW1hbnRlY1NwaWRlcicsICdQYWdlUGVla2VyJywgJ0hvbWVUYWdzJywgJ8KgZmFjZWJvb2twbGF0Zm9ybScsICdQaXhyYXktU2Vla2VyJywgJ0JERmV0Y2gnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdNZU1vTmV3c0JvdCcsICdQcm9Db2dCb3QnLCAnV2lsbHlCb3QnLCAncGVlcmluZGV4JywgJ0pvYiBSb2JvdGVyIFNwaWRlcicsICdNTEJvdCcsICdXZWJOTCcsICdQZWVwb3dib3QnLCAnU2VtYWdlcicsICdNSUEgQm90JywKICAgICAgICAgICAgICAgICAgICAgICAgICAnRXVyb2JvdCcsICdEcmlwZmVlZEJvdCcsICd3ZWJpbmF0b3Jib3QnLCAnV2hvaXNtaW5kYm90JywgJ0JhZC1OZWlnaGJvcmhvb2QnLCAnSGFpbG9vYm90JywgJ2FrdWxhJywgJ01ldGFtb2ppQ3Jhd2xlcicsICdQYWdlMlJTUycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Vhc3lCaWIgQXV0b0NpdGUnLCAnc3VnZ3lib3QnLCAnTmVyZEJ5TmF0dXJlLkJvdCcsICdFdmVudEd1cnVCb3QnLCAncXVpY2tvYm90JywgJ2dvbnpvJywgJ2JuZi5mcl9ib3QnLCAnVXB0aW1lUm9ib3QnLCAnSW5mbHVlbmNlYm90JywKICAgICAgICAgICAgICAgICAgICAgICAgICAnTVNSQk9UJywgJ0tleXdvcmREZW5zaXR5Um9ib3QnLCAnaGVyaXRyaXgnLCAnUm9uem9vYm90JywgJ1J5emVDcmF3bGVyJywgJ1Njb3V0SmV0JywgJ1R3aWtsZScsICdTV0VCb3QnLCAnUkFEYVItQm90JywgJ0RDUGJvdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Nhc3RhYm90JywgJ3BlcmNib3RzcGlkZXInLCAnV2VTRUU6U2VhcmNoJywgJ0NhdGNoQm90JywgJ2ltYm90JywgJ0VkaXN0ZXJCb3QnLCAnV0FTQUxpdmUtQm90JywgJ0FjY2Vsb2JvdCcsICdQb3N0UG9zdCcsICdmYWN0Ym90JywKICAgICAgICAgICAgICAgICAgICAgICAgICAnU2V0b296Ym90JywgJ2Jpd2VjJywgJ0dhcmxpa0NyYXdsZXInLCAnU2VhcmNoMTdCb3QnLCAnTGlqaXQnLCAnTWV0YUdlbmVyYXRvckNyYXdsZXInLCAnUm9ib3RzX1Rlc3RlcicsICdKVVNULUNSQVdMRVInLCAnQXBlcmNpdGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdwbW96LmluZm8gT0RQIGxpbmsgY2hlY2tlcicsICdMZW11cldlYkNyYXdsZXInLCAnQ292YXJpby1JRFMnLCAnSG9sbWVzJywgJ1Jhbmt1ckJvdCcsICdEb3RCb3QnLCAnQWRzQm90LUdvb2dsZScsICdlbnZvbGsnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdBc2sgSmVldmVzL1Rlb21hJywgJ0xleHhlQm90JywgJ2FkcmVzc2VuZGV1dHNjaGxhbmQuZGUnLCAnU3RhY2tSYW1ibGVyJywgJ0FicmF2ZSBTcGlkZXInLCAnRXZyaU5pZCcsICdhcmFjaG5vZGUubmV0JywgJ0NhbW9udFNwaWRlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpa2l3aXgtYm90JywgJ055bWVzaXMnLCAndHJlbmRpY3Rpb25ib3QnLCAnU2l0ZWRvbWFpbi1Cb3QnLCAnU0VPRGF0JywgJ1N5Z29sQm90JywgJ1NuYXBib3QnLCAnT3BlbkNhbGFpc1NlbWFudGljUHJveHknLCAnWm9va2FCb3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdDbGlnb29Sb2JvdCcsICdjaXR5cmV2aWV3JywgJ253b3JtJywgJ0Fib3V0VXNCb3QnLCAnSUNDLUNyYXdsZXInLCAnU0JJZGVyJywgJ1R3ZW5nYUJvdCcsICdEb3QgVEsgLSBzcGlkZXInLCAnRXVyaXBCb3QnLCAnUGFyY2hCb3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdQZWV3JywgJ0FudEJvdCcsICdZUlNwaWRlcicsICdVcmxmaWxlYm90IChVcmxib3QpJywgJ0dhaXNib3QnLCAnV2F0Y2hNb3VzZScsICdUYWdvb2JvdCcsICdNb3RvcmljZXJjYS1Sb2JvdHMudHh0LUNoZWNrZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICdXZWJXYXRjaC9Sb2JvdF90eHRDaGVja2VyJywgJ3VybGZhbi1ib3QnLCAnU3RhdG9vbHNCb3QnLCAncGFnZV92ZXJpZmllcicsICdTU0xCb3QnLCAnU0FJIENyYXdsZXInLCAnRG9tYWluREInLCAnTGlua1dhbGtlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dNQ0FJX3JvYm90JywgJ3ZveWFnZXInLCAnY29weXJpZ2h0IHNoZXJpZmYnLCAnT2NlbGxpJywgJ1R3aWNlbGVyJywgJ2FtaWJvdCcsICdhYmJ5JywgJ05ldFJlc2VhcmNoU2VydmVyJywgJ1ZpZGVvU3VyZl9ib3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdYTUwgU2l0ZW1hcHMgR2VuZXJhdG9yJywgJ0JsaW5rYUNyYXdsZXInLCAnbm9kZXN0YWNrYm90JywgJ1BvbXBvcycsICd0YXB0dWJvdCcsICdCYWJhbG9vU3BpZGVyJywgJ1lhYW5iJywgJ0dpcmFmYWJvdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpdmVkb29yIFNjcmVlblNob3QnLCAnZUNhaXJuLUdyYWJiZXInLCAnRmF1Qm90JywgJ1RvcmVhZC1DcmF3bGVyJywgJ1NldG9vemJvdCAnLCAnTWV0YVVSSScsICdMLndlYmlzJywgJ1dlYi1zbmlmZmVyJywgJ0ZhaXJTaGFyZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1J1a3ktUm9ib3RlcicsICdUaHVtYlNob3RzLUJvdCcsICdCb3RPblBhcmFkZScsICdBbWFnaXQuQ09NJywgJ0hhdGVuYVNjcmVlbnNob3QnLCAnSG9sbWVzQm90JywgJ2RvdFNlbWFudGljJywgJ0thcm5ldmFsLUJvdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0hvc3RUcmFja2VyLmNvbScsICdBcG9ydFdvcm0nLCAnWG1hcmtzRmV0Y2gnLCAnRmVlZEZpbmRlci9ibG9nZ3ouc2UnLCAnQ29ycHVzQ3Jhd2xlcicsICdXaWxsb3cgSW50ZXJuZXQgQ3Jhd2xlcicsICdPcmdieUJvdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0dpbmdlckNyYXdsZXInLCAncGluZ2RvbS5jb21fYm90JywgJ051dGNoJywgJ2JheXB1cCcsICdMaW5ndWVlIEJvdCcsICdNcDNCb3QnLCAnMTkyLmNvbUFnZW50JywgJ1N1cnBoYWNlIFNjb3V0JywgJ1dpa2lvRmVlZEJvdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1N6dWthY3onLCAnREJMQm90JywgJ1RodW1ibmFpbC5DWiByb2JvdCcsICdMaW5ndWFCb3QnLCAnR3VydWppQm90JywgJ0NoYXJsb3R0ZScsICc1MC5udScsICdTYW5zekJvdCcsICdtb2JhLWNyYXdsZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICdIZWFydFJhaWxzX0NhcHR1cmUnLCAnU3VydmV5Qm90JywgJ01ub0dvU2VhcmNoJywgJ3NtYXJ0LmFwbm90aS5jb20gUm9ib3QnLCAnVG9waWNib3QnLCAnSmFkeW5BdmVCb3QnLCAnT3NPYm90JywgJ1dlYkltYWdlcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dpbldlYkJvdCcsICdTY29vdGVyJywgJ1NjYXJsZXR0JywgJ0dPRk9SSVRCT1QnLCAnREtJTVJlcEJvdCcsICdZYW5nYScsICdETlMtRGlnZ2VyLUV4cGxvcmVyJywgJ1JvYm96aWxsYScsICdhZGlkeGJvdCcsICdZb3dlZG9Cb3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdib3Rtb2JpJywgJ0Zvb29vb19XZWJfVmlkZW9fQ3Jhd2wnLCAnVXB0aW1lRG9nJywgJ15OYWlsJywgJ01ldGFzcGlubmVyLzAuMDEnLCAnVG91Y2hlJywgJ1JTU01pY3JvLmNvbSBSU1MvQXRvbSBGZWVkIFJvYm90JywKICAgICAgICAgICAgICAgICAgICAgICAgICAnU25pZmZSU1MnLCAnS2Fsb29nYScsICdGZWVkQ2F0Qm90JywgJ1dlYlJhbmtTcGlkZXInLCAnRmxhdGxhbmQgSW5kdXN0cmllcyBXZWIgU3BpZGVyJywgJ0RlYWxHYXRlcyBCb3QnLCAnTGluayBWYWxldCBPbmxpbmUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdTaGVsb2InLCAnVGVjaG5vcmF0aWJvdCcsICdGbG9ja2UgYm90JywgJ0ZvbGxvd1NpdGUgQm90JywgJ1Zpc2JvdCcpOwoKICAgICAgICBmb3JlYWNoKCAkYm90X2xpc3QgYXMgJGJvdCApIHsKICAgICAgICAgICAgaWYoIHN0cmlwb3MoJHRoaXMtPmdldFVzZXJBZ2VudCgpLCRib3QpICE9PSBmYWxzZSApIHsKICAgICAgICAgICAgICAgICR0aGlzLT5zZXRSb2JvdCh0cnVlKTsKICAgICAgICAgICAgICAgICR0aGlzLT5zZXRNb2JpbGUoZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKCiAgICAvKioKICAgICAqIElzIHRoZSBicm93c2VyIGFuIGlwYWQuCiAgICAgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiB0aGUgYnJvd3NlciBpcyBmcm9tIGFuIGlwYWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc19pUGFkKCkKICAgIHsKICAgICAgICByZXR1cm4gKCAkdGhpcy0+Z2V0QnJvd3NlcigpID09IEJyb3dzZXI6OkJST1dTRVJfSVBBRCApOwogICAgfQoKCiAgICAvKioKICAgICAqIEV4dGVuZCB0aGUgc3RhbmRhcmQgY2hlY2tCcm93c2VycyBtZXRob2QgdG8gdXNlIHRoaXMgY2xhc3NlJ3MgZXh0ZW5kZWQgYm90IGRldGVjdGlvbi4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrQnJvd3NlcnMoKQogICAgewogICAgICAgIHBhcmVudDo6Y2hlY2tCcm93c2VycygpOwoKICAgICAgICAvLyBub3cgYWRkIGRldGVjdGlvbiBmb3IgbW9yZSBib3RzLgogICAgICAgIGlmKCAhJHRoaXMtPmlzUm9ib3QoKSApICR0aGlzLT5idWxrQ2hlY2tSb2JvdCgpOwogICAgfQp9IC8vIGVuZCBvZiBjbGFzcwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_cached_remote_file.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgeHRfY2FjaGVkX3JlbW90ZV9maWxlIGNsYXNzIGFuZCB2YXJpb3VzIHV0aWxpdGllcy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IFV0aWxpdGllcwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCi8vZGVjbGFyZShzdHJpY3RfdHlwZXM9MSk7IyByZXZpc2l0CgovKioKICogQSBjbGFzcyB0byBjb3B5IGEgcmVtb3RlIFVSTCB0byBhIGxvY2FsLCB0ZW1wb3JhcnkgbG9jYXRpb24gZm9yIGEgc3BlY2lmaWVkIGFtb3VudCBvZiB0aW1lLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKi8KY2xhc3MgeHRfY2FjaGVkX3JlbW90ZV9maWxlCnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfY2FjaGVfdGltZWxpbWl0ID0gbnVsbDsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX3NyY19zcGVjID0gbnVsbDsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2NhY2hlX2ZpbGUgPSBudWxsOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0b3IKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzcmMgVGhlIHNvdXJjZSBVUkwKICAgICAqIEBwYXJhbSBpbnQgICR0aW1lbGltaXQgVGhlIGFtb3VudCBvZiB0aW1lIGluIG1pbnV0ZXMgYmVmb3JlIHRoaXMgZmlsZSBtdXN0IGJlIHJlZnJlc2hlZC4gIERlZmF1bHQgaXMgMjQgaG91cnMuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZXN0IE9wdGlvbmFsIGRlc3RpbmF0aW9uIGZpbGVuYW1lLgogICAgICogQHBhcmFtIGJvb2wgJHB1YmxpYyBPcHRpb25hbC4gSWYgcHVibGljIGlzIHNldCwgYW5kIGRlc3QgaXMgbm90IHNldCwgYXR0ZW1wdCB0byB1c2UgdGhlIFBVQkxJQ19DQUNIRV9MT0NBVElPTiBmb3IgdGhlIGRlc3RpbmF0aW9uLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRzcmMsIGludCAkdGltZWxpbWl0ID0gMCwgc3RyaW5nICRkZXN0ID0gJycsIGJvb2wgJHB1YmxpYyA9IEZBTFNFKQogICAgewogICAgICAgICR0aGlzLT5fc3JjX3NwZWMgPSAkc3JjOwogICAgICAgIGlmKCAkdGltZWxpbWl0IDw9IDAgKSAkdGltZWxpbWl0ID0gMjQqNjA7CiAgICAgICAgJHRoaXMtPl9jYWNoZV90aW1lbGltaXQgPSAkdGltZWxpbWl0OwogICAgICAgIGlmKCBlbXB0eSgkZGVzdCkgKSB7CiAgICAgICAgICAgICRibiA9ICd4dGNyZl8nLm1kNSgkc3JjKTsKICAgICAgICAgICAgJGJhc2UgPSBUTVBfQ0FDSEVfTE9DQVRJT047CiAgICAgICAgICAgIGlmKCAkcHVibGljICYmIGRlZmluZWQoJ1BVQkxJQ19DQUNIRV9MT0NBVElPTicpICkgJGJhc2UgPSBQVUJMSUNfQ0FDSEVfTE9DQVRJT047CiAgICAgICAgICAgICRkZXN0ID0gY21zX2pvaW5fcGF0aCgkYmFzZSwkYm4pOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+X2NhY2hlX2ZpbGUgPSAkZGVzdDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgc291cmNlIFVSTAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfc291cmNlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9zcmNfc3BlYzsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgZGVzdGluYXRpb24gZmlsZW5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2Rlc3QoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2NhY2hlX2ZpbGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHRpbWUgbGltaXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2NhY2hlX3RpbWVsaW1pdCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fY2FjaGVfdGltZWxpbWl0OwogICAgfQoKICAgIC8qKgogICAgICogQWRqdXN0IHRoZSB0aW1lIGxpbWl0CiAgICAgKgogICAgICogQHBhcmFtIGludCAkbWludXRlcyBUaGUgbnVtYmVyIG9mIG1pbnV0ZXMgYmVmb3JlIHRoaXMgaXRlbSBuZWVkcyByZWZyZXNoaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfY2FjaGVfdGltZWxpbWl0KGludCAkbWludXRlcykKICAgIHsKICAgICAgICAkdGhpcy0+X2NhY2hlX3RpbWVsaW1pdCA9IG1heCgxLChpbnQpJG1pbnV0ZXMpOwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlZnJlc2hfY2FjaGUoKQogICAgewogICAgICAgIEB1bmxpbmsoJHRoaXMtPl9jYWNoZV9maWxlKTsKICAgICAgICAkZGF0YSA9IHh0X2h0dHA6OmdldCgkdGhpcy0+X3NyY19zcGVjKTsKICAgICAgICBpZiggJGRhdGEgKSBAZmlsZV9wdXRfY29udGVudHMoJHRoaXMtPl9jYWNoZV9maWxlLCRkYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja19jYWNoZSgpCiAgICB7CiAgICAgICAgJG5lZWRfdXBkYXRlID0gZmFsc2U7CiAgICAgICAgaWYoICFpc19maWxlKCR0aGlzLT5fY2FjaGVfZmlsZSkgKSB7CiAgICAgICAgICAgICRuZWVkX3VwZGF0ZSA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkbXRpbWUgPSBmaWxlbXRpbWUoJHRoaXMtPl9jYWNoZV9maWxlKTsKICAgICAgICAgICAgaWYoICRtdGltZSArICgkdGhpcy0+X2NhY2hlX3RpbWVsaW1pdCAqIDYwKSA8IHRpbWUoKSApICRuZWVkX3VwZGF0ZSA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGlmKCAkbmVlZF91cGRhdGUgKSAkdGhpcy0+cmVmcmVzaF9jYWNoZSgpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBlbnRpcmUgY2FjaGVkIGZpbGUgaW50byBhbiBhcnJheQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqIEBzZWUgZmlsZSgpCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaWxlKCkKICAgIHsKICAgICAgICAkdGhpcy0+Y2hlY2tfY2FjaGUoKTsKICAgICAgICByZXR1cm4gQGZpbGUoJHRoaXMtPl9jYWNoZV9maWxlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgY29udGVudHMgb2YgdGhlIGNhY2hlZCBmaWxlIGFzIGEgc2luZ2xlIHN0cmluZwogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaWxlX2dldF9jb250ZW50cygpCiAgICB7CiAgICAgICAgJHRoaXMtPmNoZWNrX2NhY2hlKCk7CiAgICAgICAgcmV0dXJuIEBmaWxlX2dldF9jb250ZW50cygkdGhpcy0+X2NhY2hlX2ZpbGUpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBtZDUgc2lnbmF0dXJlIG9mIHRoZSBjYWNoZWQgZmlsZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtZDUoKSA6IHN0cmluZwogICAgewogICAgICAgICR0aGlzLT5jaGVja19jYWNoZSgpOwogICAgICAgIHJldHVybiBAbWQ1X2ZpbGUoJHRoaXMtPl9jYWNoZV9maWxlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgc2l6ZSBvZiB0aGUgY2FjaGVkIGZpbGUKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2l6ZSgpIDogaW50CiAgICB7CiAgICAgICAgJHRoaXMtPmNoZWNrX2NhY2hlKCk7CiAgICAgICAgcmV0dXJuIEBmaWxlc2l6ZSgkdGhpcy0+X2NhY2hlX2ZpbGUpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBtaW1lIHR5cGUgb2YgdGhlIGNhY2hlZCBmaWxlCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHR5cGUoKSA6IHN0cmluZwogICAgewogICAgICAgICR0aGlzLT5jaGVja19jYWNoZSgpOwogICAgICAgIHJldHVybiB4dF91dGlsczo6Z2V0X21pbWVfdHlwZSgkdGhpcy0+X2NhY2hlX2ZpbGUpOwogICAgfQoKICAgIC8qKgogICAgICogQ2xlYW4gdXAgdGhlIGNhY2hlZCBmaWxlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYW51cCgpCiAgICB7CiAgICAgICAgQHVubGluaygkdGhpcy0+X2NhY2hlX2ZpbGUpOwogICAgfQp9IC8vIGVuZCBvZiBjbGFzcy4KIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_datastore.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgZGF0YWJhc2UgYmFzZWQga2V5L3ZhbHVlIHN0b3JlLgogKgogKiBAcGFja2FnZSAgIENNU01TRXh0CiAqIEBjYXRlZ29yeSAgVXRpbGl0aWVzCiAqCiAqIEBhdXRob3IgICAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxMCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCgovL2RlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOyMgcmV2aXNpdAoKLyoqCiAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIHNpbXBsZSBrZXkvdmFsdWUgc3RvcmUgdXRpbGl6aW5nIHRoZSBkYXRhYmFzZQogKiBpbnRlbmRlZCBmb3Igc3RvcmluZyBzbWFsbCBhbW91bnRzIG9mIHRlbXBvcmFyeSBkYXRhIHRoYXQgbXVzdCBzdXJ2aXZlIGJvdGggdGhlIHJlcXVlc3QsCiAqIGFuZCB0aGUgc2Vzc2lvbiBidXQgY2FuIGhhdmUgYSBsaW1pdGVkIGxpZmV0aW1lLgogKgogKiBFYWNoIGVudHJ5IGNhbiBoYXZlIHVwIHRvIDMgY2FzY2FkaW5nIGtleXMuCiAqIEl0IGZlYXR1cmVzIGF1dG9tYXRpYyBkZWxldGlvbiBvZiBleHBpcmVkIGtleXMuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqLwpjbGFzcyB4dF9kYXRhc3RvcmUKewogIC8qKgogICAqIEBpZ25vcmUKICAgKi8KICBwcml2YXRlICRfZXhwaXJ5OwogIAogIC8qKgogICAqIEBpZ25vcmUKICAgKi8KICBwcml2YXRlICRfbGFzdF9jbGVhbnVwOwogIAogIC8qKgogICAqIEBpZ25vcmUKICAgKi8KICBwcml2YXRlICRfY2xlYW51cF9pbnRlcnZhbDsKICAKICAvKioKICAgKiBDb25zdHJ1Y3QgYSBuZXcgZGF0YXN0b3JlIG9iamVjdC4KICAgKgogICAqIEBwYXJhbSBpbnQgJGV4cGlyeSBUaGUgYW1vdW50IG9mIHRpbWUgdW50aWwgdmFsdWVzIHN0b3JlZCB3aXRoIHRoaXMgb2JqZWN0IHdpbGwgZXhwaXJlLiAgTWluaW11bSBvZiAzMCBzZWNvbmRzLgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJGV4cGlyeSA9IDM2MDApCiAgewogICAgJGV4cGlyeSA9IG1heCgzMCwgJGV4cGlyeSk7CiAgICAKICAgICR0aGlzLT5fZXhwaXJ5ICAgICAgICAgICA9ICRleHBpcnk7CiAgICAkdGhpcy0+X2NsZWFudXBfaW50ZXJ2YWwgPSAkZXhwaXJ5OwogICAgJHRoaXMtPl9sYXN0X2NsZWFudXAgICAgID0gLTE7CiAgfQogIAogIC8qKgogICAqIEFkanVzdCB0aGUgZXhwaXJ5IG9mIGRhdGEgc3RvcmVkIHdpdGggdGhpcyBvYmplY3QuCiAgICoKICAgKiBAcGFyYW0gaW50ICRudW0gVGhlIGFtb3VudCBvZiB0aW1lIHVudGlsIHZhbHVlcyBzdG9yZWQgd2l0aCB0aGlzIG9iamVjdCB3aWxsIGV4cGlyZS4gIE1pbmltdW0gb2YgMzAgc2Vjb25kcy4KICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gc2V0X2V4cGlyeShpbnQgJG51bSkKICB7CiAgICAkbnVtID0gbWF4KCRudW0sIDMwKTsKICAgICR0aGlzLT5fZXhwaXJ5KCRudW0pOwogIH0KICAKICAvKioKICAgKiBSZW1vdmUgYWxsIGV4cGlyZWQgZW50cmllcyBmcm9tIHRoZSBkYXRhYmFzZS4KICAgKiBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBhbGwgZXhwaXJlZCBlbnRyaWVzIGZyb20gdGhlIGRhdGFiYXNlLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSB3ZXJlIHN0b3JlZCB3aXRoIHRoaXMKICAgKiBpbnN0YW5jZSBvciBub3QuCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZV9leHBpcmVkKCkKICB7CiAgICAkbm93ID0gdGltZSgpOwogICAgaWYoKCRub3cgLSAkdGhpcy0+X2xhc3RfY2xlYW51cCkgPiAkdGhpcy0+X2NsZWFudXBfaW50ZXJ2YWwpCiAgICB7CiAgICAgICRkYiAgICA9IHh0X3V0aWxzOjpnZXRfZGIoKTsKICAgICAgJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcgLiBDTVNNU0VYVF9UQUJMRV9BU1NPQ0RBVEEgLiAnIFdIRVJFIGV4cGlyeSA8IE5PVygpIEFORCBleHBpcnkgIT0gLTEnOwogICAgICAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKICAgICAgCiAgICAgICR0aGlzLT5fbGFzdF9jbGVhbnVwID0gJG5vdzsKICAgIH0KICB9CiAgCiAgLyoqCiAgICogRXJhc2UgdGhlIHNwZWNpZmllZCBkYXRhIGZyb20gdGhlIGRhdGFiYXNlCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICRrZXkxCiAgICogQHBhcmFtIHN0cmluZyAka2V5MiAtIEFuIG9wdGlvbmFsIGFkZGl0aW9uYWwga2V5IHRoYXQgaXMgY29tYmluZWQgd2l0aCBrZXkxCiAgICogQHBhcmFtIHN0cmluZyAka2V5MyAtIEFuIG9wdGlvbmFsIGFkZGl0aW9uYWwga2V5IHRoYXQgaXMgY29tYmluZWQgd2l0aCBrZXkxIGFuZCBrZXkyCiAgICogQHBhcmFtIHN0cmluZyAka2V5NCAtIEFuIG9wdGlvbmFsIGFkZGl0aW9uYWwga2V5IHRoYXQgaXMgY29tYmluZWQgd2l0aCBrZXkxLCBrZXkyLCBhbmQga2V5MwogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBlcmFzZShzdHJpbmcgJGtleTEsIHN0cmluZyAka2V5MiA9ICcnLCBzdHJpbmcgJGtleTMgPSAnJywgc3RyaW5nICRrZXk0ID0gJycpCiAgewogICAgJGRiICAgID0geHRfdXRpbHM6OmdldF9kYigpOwogICAgJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcgLiBDTVNNU0VYVF9UQUJMRV9BU1NPQ0RBVEEgLiAnIFdIRVJFIGtleTEgPSA/IEFORCBrZXkyID0gPyBBTkQga2V5MyA9ID8gQU5EIGtleTQgPSA/JzsKICAgICRkYi0+RXhlY3V0ZSgkcXVlcnksIFska2V5MSwgJGtleTIsICRrZXkzLCAka2V5NF0pOwogICAgCiAgICAkdGhpcy0+cmVtb3ZlX2V4cGlyZWQoKTsKICB9CiAgCiAgLyoqCiAgICogU3RvcmUgdGhlIHNwZWNpZmllZCBkYXRhIGludG8gdGhlIGRhdGFiYXNlCiAgICoKICAgKiBAcGFyYW0gbWl4ZWQgICRkYXRhCiAgICogQHBhcmFtIHN0cmluZyAka2V5MQogICAqIEBwYXJhbSBzdHJpbmcgJGtleTIgLSBBbiBvcHRpb25hbCBhZGRpdGlvbmFsIGtleSB0aGF0IGlzIGNvbWJpbmVkIHdpdGgga2V5MQogICAqIEBwYXJhbSBzdHJpbmcgJGtleTMgLSBBbiBvcHRpb25hbCBhZGRpdGlvbmFsIGtleSB0aGF0IGlzIGNvbWJpbmVkIHdpdGgga2V5MSBhbmQga2V5MgogICAqIEBwYXJhbSBzdHJpbmcgJGtleTQgLSBBbiBvcHRpb25hbCBhZGRpdGlvbmFsIGtleSB0aGF0IGlzIGNvbWJpbmVkIHdpdGgga2V5MSwga2V5MiwgYW5kIGtleTMKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gc3RvcmUoJGRhdGEsIHN0cmluZyAka2V5MSwgc3RyaW5nICRrZXkyID0gJycsIHN0cmluZyAka2V5MyA9ICcnLCBzdHJpbmcgJGtleTQgPSAnJykKICB7CiAgICBpZihlbXB0eSgkZGF0YSkpCiAgICB7CiAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KICAgIAogICAgJHRoaXMtPmVyYXNlKCRrZXkxLCAka2V5MiwgJGtleTMsICRrZXk0KTsKICAgICRxdWVyeSA9ICdJTlNFUlQgSU5UTyAnIC4gQ01TTVNFWFRfVEFCTEVfQVNTT0NEQVRBIC4gIgogICAgICAgICAgICAgICAgICAoa2V5MSxrZXkyLGtleTMsa2V5NCxkYXRhLGV4cGlyeSxjcmVhdGVfZGF0ZSxtb2RpZmllZF9kYXRlKQogICAgICAgICAgICAgICAgICBWQUxVRVMgKD8sPyw/LD8sPyxEQVRFX0FERChOT1coKSxJTlRFUlZBTCA/IFNFQ09ORCksTk9XKCksTk9XKCkpIjsKICAgICRkYiAgICA9IHh0X3V0aWxzOjpnZXRfZGIoKTsKICAgICRkYnIgICA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIFska2V5MSwgJGtleTIsICRrZXkzLCAka2V5NCwgJGRhdGEsICR0aGlzLT5fZXhwaXJ5XSk7CiAgICAkdGhpcy0+cmVtb3ZlX2V4cGlyZWQoKTsKICB9CiAgCiAgCiAgLyoqCiAgICogUmV0cmlldmUgdGhlIHNwZWNpZmllZCBkYXRhIGZyb20gdGhlIGRhdGFiYXNlCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICRrZXkxCiAgICogQHBhcmFtIHN0cmluZyAka2V5MiAtIEFuIG9wdGlvbmFsIGFkZGl0aW9uYWwga2V5IHRoYXQgaXMgY29tYmluZWQgd2l0aCBrZXkxCiAgICogQHBhcmFtIHN0cmluZyAka2V5MyAtIEFuIG9wdGlvbmFsIGFkZGl0aW9uYWwga2V5IHRoYXQgaXMgY29tYmluZWQgd2l0aCBrZXkxIGFuZCBrZXkyCiAgICogQHBhcmFtIHN0cmluZyAka2V5NCAtIEFuIG9wdGlvbmFsIGFkZGl0aW9uYWwga2V5IHRoYXQgaXMgY29tYmluZWQgd2l0aCBrZXkxLCBrZXkyLCBhbmQga2V5MwogICAqCiAgICogQHJldHVybiBtaXhlZAogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBnZXQoc3RyaW5nICRrZXkxLCBzdHJpbmcgJGtleTIgPSAnJywgc3RyaW5nICRrZXkzID0gJycsIHN0cmluZyAka2V5NCA9ICcnKQogIHsKICAgICR0aGlzLT5yZW1vdmVfZXhwaXJlZCgpOwogICAgJHF1ZXJ5ID0gJ1NFTEVDVCBkYXRhIEZST00gJyAuIENNU01TRVhUX1RBQkxFX0FTU09DREFUQSAuICcKICAgICAgICAgICAgICAgV0hFUkUga2V5MSA9ID8gQU5EIGtleTIgPSA/IEFORCBrZXkzID0gPyBBTkQga2V5NCA9ID8KICAgICAgICAgICAgICAgICBBTkQgZXhwaXJ5ID4gTk9XKCkgT1JERVIgQlkgbW9kaWZpZWRfZGF0ZSBMSU1JVCAxJzsKICAgICRkYiAgICA9IHh0X3V0aWxzOjpnZXRfZGIoKTsKICAgICR0bXAgICA9ICRkYi0+R2V0T25lKCRxdWVyeSwgWyRrZXkxLCAka2V5MiwgJGtleTMsICRrZXk0XSk7CiAgICBpZighJHRtcCkKICAgIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICByZXR1cm4gJHRtcDsKICB9CiAgCiAgCiAgLyoqCiAgICogTGlzdCBhbGwgdGhlIGRhdGEgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBrZXlzLgogICAqIFRoZSBmaWV3ZXIga2V5cyBzcGVjaWZpZWQgc2hvdWxkIHJlc3VsdCBpbiBtb3JlIG1hdGNoZXMuCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICRrZXkxCiAgICogQHBhcmFtIHN0cmluZyAka2V5MiAtIEFuIG9wdGlvbmFsIGFkZGl0aW9uYWwga2V5IHRoYXQgaXMgY29tYmluZWQgd2l0aCBrZXkxCiAgICogQHBhcmFtIHN0cmluZyAka2V5MyAtIEFuIG9wdGlvbmFsIGFkZGl0aW9uYWwga2V5IHRoYXQgaXMgY29tYmluZWQgd2l0aCBrZXkxIGFuZCBrZXkyCiAgICoKICAgKiBAcmV0dXJuIGFycmF5CiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGxpc3RhbGwoc3RyaW5nICRrZXkxLCBzdHJpbmcgJGtleTIgPSBOVUxMLCBzdHJpbmcgJGtleTMgPSBOVUxMKQogIHsKICAgICRwYXJtcyAgID0gW107CiAgICAkd2hlcmVbXSA9IFtdOwogICAgCiAgICAkd2hlcmVbXSA9ICdrZXkxID0gPyc7CiAgICAkcGFybXNbXSA9ICRrZXkxOwogICAgCiAgICAkcXVlcnkgPSAnU0VMRUNUIGtleTEsa2V5MixrZXkzLGtleTQgRlJPTSAnIC4gQ01TTVNFWFRfVEFCTEVfQVNTT0NEQVRBOwogICAgaWYoIWVtcHR5KCRrZXkyKSkKICAgIHsKICAgICAgJHdoZXJlW10gPSAna2V5MiA9ID8nOwogICAgICAkcGFybXNbXSA9ICRrZXkyOwogICAgICAKICAgICAgaWYoIWVtcHR5KCRrZXkzKSkKICAgICAgewogICAgICAgICR3aGVyZVtdID0gJ2tleTMgPSA/JzsKICAgICAgICAkcGFybXNbXSA9ICRrZXkzOwogICAgICB9CiAgICB9CiAgICAKICAgIGlmKGNvdW50KCR3aGVyZSkpCiAgICB7CiAgICAgICRxdWVyeSAuPSAnIFdIRVJFICcgKyBpbXBsb2RlKCcgQU5EICcsICR3aGVyZSk7CiAgICB9CiAgICAkZGIgICA9IHh0X3V0aWxzOjpnZXRfZGIoKTsKICAgICRkYXRhID0gJGRiLT5HZXRBcnJheSgkcXVlcnksICRwYXJtcyk7CiAgICBpZighJGRhdGEpCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgcmV0dXJuICRkYXRhOwogIH0KICAKfSAvLyBlbmQgb2YgY2xhc3MK]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_date.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgQ2xhc3MgdG8gcmVwcmVzZW50IGFuZCBvcGVyYXRlIG9uIGEgZGF0ZQogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKiBAY2F0ZWdvcnkgVXRpbGl0aWVzCiAqIEBhdXRob3IgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwovL2RlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOyMgcmV2aXNpdAoKLyoqCiAqIEEgQ2xhc3MgdG8gcmVwcmVzZW50IGFuZCBvcGVyYXRlIG9uIGEgZGF0ZQogKgogKiBAZGVwcmVjYXRlZAogKi8KY2xhc3MgeHRfZGF0ZQp7CiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX3RpbWU7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RvcgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdGltZSBBIG1peGVkIHZhbHVlLiAgSWYgYW4gaW50ZWdlciB2YWx1ZSBpcyBwYXNzZWQsIGl0IGlzIGFzc3VtZWQgdG8gYmUgYSB1bml4IHRpbWVzdGFtcC4gIElmIGEgc3RyaW5nIGlzIHBhc3NlZCwgdGhlbiBhdHRlbXB0cyBhcmUgbWFkZSB0byBjb252ZXJ0IHRoZSBzdHJpbmcgaW50byBhIHVuaXggdGltZXN0YW1wLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHRpbWUgPSAnJykKICAgIHsKICAgICAgICAkbnRpbWUgPSAkdGltZTsKICAgICAgICBpZiggISR0aW1lICkgewogICAgICAgICAgICAkbnRpbWUgPSB0aW1lKCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYoICFpc19udW1lcmljKCR0aW1lKSApIHsKICAgICAgICAgICAgJG50aW1lID0gc3RydG90aW1lKCR0aW1lKTsKICAgICAgICAgICAgaWYoICEkbnRpbWUgKSB7CiAgICAgICAgICAgICAgICAkZGIgPSB4dF91dGlsczo6Z2V0X2RiKCk7CiAgICAgICAgICAgICAgICAkbnRpbWUgPSAkZGItPlVuaXhUaW1lU3RhbXAoJHRpbWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICR0aGlzLT5fdGltZSA9ICRudGltZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gX2V4cGxvZGUoaW50ICR0aGVfZGF0ZSkKICAgIHsKICAgICAgICAkcmVzID0gYXJyYXkoKTsKICAgICAgICAkcmVzWydkYXknXSA9IGRhdGUoJ2QnLCR0aGVfZGF0ZSk7CiAgICAgICAgJHJlc1snbW9udGgnXSA9IGRhdGUoJ20nLCR0aGVfZGF0ZSk7CiAgICAgICAgJHJlc1sneWVhciddID0gZGF0ZSgnWScsJHRoZV9kYXRlKTsKICAgICAgICAkcmVzWydob3VyJ10gPSBkYXRlKCdIJywkdGhlX2RhdGUpOwogICAgICAgICRyZXNbJ21pbnV0ZXMnXSA9IGRhdGUoJ2knLCR0aGVfZGF0ZSk7CiAgICAgICAgJHJlc1snc2Vjb25kcyddID0gZGF0ZSgncycsJHRoZV9kYXRlKTsKICAgICAgICByZXR1cm4gJHJlczsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gX2ltcGxvZGUoYXJyYXkgJGRhdGEpCiAgICB7CiAgICAgICAgJHRpbWUgPSBta3RpbWUoCiAgICAgICAgICAgIChpc3NldCgkZGF0YVsnaG91ciddKSk/JGRhdGFbJ2hvdXInXTowLAogICAgICAgICAgICAoaXNzZXQoJGRhdGFbJ21pbnV0ZXMnXSkpPyRkYXRhWydtaW51dGVzJ106MCwKICAgICAgICAgICAgKGlzc2V0KCRkYXRhWydzZWNvbmRzJ10pKT8kZGF0YVsnc2Vjb25kcyddOjAsCiAgICAgICAgICAgIChpc3NldCgkZGF0YVsnbW9udGgnXSkpPyRkYXRhWydtb250aCddOjAsCiAgICAgICAgICAgIChpc3NldCgkZGF0YVsnZGF5J10pKT8kZGF0YVsnZGF5J106MCwKICAgICAgICAgICAgKGlzc2V0KCRkYXRhWyd5ZWFyJ10pKT8kZGF0YVsneWVhciddOjApOwogICAgICAgIHJldHVybiAkdGltZTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnQgdGhlIGN1cnJlbnQgb2JqZWN0IHRvIGEgdW5peCB0aW1lc3RhbXAKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9fdGltZXN0YW1wKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl90aW1lOwogICAgfQoKICAgIC8qKgogICAgICogY29udmVydCB0aGUgY3VycmVudCBvYmplY3QgdG8gYSBmb3JtYXQgc3VpdGFibGUgZm9yIHNhdmluZyBpbiB0aGUgZGF0YWJhc2UKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9fZGJmb3JtYXQoKQogICAgewogICAgICAgICRkYiA9IHh0X3V0aWxzOjpnZXRfZGIoKTsKICAgICAgICByZXR1cm4gdHJpbSgkZGItPkRiVGltZVNUYW1wKCR0aGlzLT5fdGltZSksIiciKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgZGF5IG9mIHRoaXMgb2JqZWN0CiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRheSgpCiAgICB7CiAgICAgICAgcmV0dXJuIGRhdGUoJ2QnLCR0aGlzLT5fdGltZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGRheSBvZiB0aGlzIG9iamVjdAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGQKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfZGF5KCRkKQogICAgewogICAgICAgICRkID0gKGludCkgJGQ7CiAgICAgICAgJHRtcCA9IHNlbGY6Ol9leHBsb2RlKCR0aGlzLT5fdGltZSk7CiAgICAgICAgJHRtcFsnZGF5J10gPSAkZDsKICAgICAgICAkdGhpcy0+X3RpbWUgPSBzZWxmOjpfaW1wbG9kZSgkdG1wKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgbW9udGggb2YgdGhpcyBvYmplY3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbW9udGgoKQogICAgewogICAgICAgIHJldHVybiBkYXRlKCdtJywkdGhpcy0+X3RpbWUpOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBtb250aCBvZiB0aGlzIG9iamVjdAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJG0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF9tb250aChpbnQgJG0pCiAgICB7CiAgICAgICAgJG0gPSAoaW50KSAkbTsKICAgICAgICAkdG1wID0gc2VsZjo6X2V4cGxvZGUoJHRoaXMtPl90aW1lKTsKICAgICAgICAkdG1wWydtb250aCddID0gJG07CiAgICAgICAgJHRoaXMtPl90aW1lID0gc2VsZjo6X2ltcGxvZGUoJHRtcCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHllYXIgb2YgdGhpcyBvYmplY3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24geWVhcigpCiAgICB7CiAgICAgICAgcmV0dXJuIGRhdGUoJ1knLCR0aGlzLT5fdGltZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHllYXIgb2YgdGhpcyBvYmplY3QKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICR5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfeWVhcihpbnQgJHkpCiAgICB7CiAgICAgICAgJHRtcCA9IHNlbGY6Ol9leHBsb2RlKCR0aGlzLT5fdGltZSk7CiAgICAgICAgJHRtcFsneWVhciddID0gJHk7CiAgICAgICAgJHRoaXMtPl90aW1lID0gc2VsZjo6X2ltcGxvZGUoJHRtcCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGhvdXIgb2YgdGhpcyBvYmplY3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaG91cigpCiAgICB7CiAgICAgICAgcmV0dXJuIGRhdGUoJ0gnLCR0aGlzLT5fdGltZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGhvdXIgb2YgdGhpcyBvYmplY3QKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRoCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfaG91cihpbnQgJGgpCiAgICB7CiAgICAgICAgJGggPSAoaW50KSAkaDsKICAgICAgICAkdG1wID0gc2VsZjo6X2V4cGxvZGUoJHRoaXMtPl90aW1lKTsKICAgICAgICAkdG1wWydob3VyJ10gPSAkaDsKICAgICAgICAkdGhpcy0+X3RpbWUgPSBzZWxmOjpfaW1wbG9kZSgkdG1wKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgbWludXRlcyBvZiB0aGlzIG9iamVjdAogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtaW51dGVzKCkKICAgIHsKICAgICAgICByZXR1cm4gZGF0ZSgnaScsJHRoaXMtPl90aW1lKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgbWludXRlcyBvZiB0aGlzIG9iamVjdAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJG0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF9taW51dGVzKGludCAkbSkKICAgIHsKICAgICAgICAkdG1wID0gc2VsZjo6X2V4cGxvZGUoJHRoaXMtPl90aW1lKTsKICAgICAgICAkdG1wWydtaW51dGVzJ10gPSAkbTsKICAgICAgICAkdGhpcy0+X3RpbWUgPSBzZWxmOjpfaW1wbG9kZSgkdG1wKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgc2Vjb25kcyBvZiB0aGlzIG9iamVjdAogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZWNvbmRzKCkKICAgIHsKICAgICAgICByZXR1cm4gZGF0ZSgncycsJHRoaXMtPl90aW1lKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgc2Vjb25kcyBvZiB0aGlzIG9iamVjdAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF9zZWNvbmRzKGludCAkcykKICAgIHsKICAgICAgICAkdG1wID0gc2VsZjo6X2V4cGxvZGUoJHRoaXMtPl90aW1lKTsKICAgICAgICAkdG1wWydzZWNvbmRzJ10gPSAkczsKICAgICAgICAkdGhpcy0+X3RpbWUgPSBzZWxmOjpfaW1wbG9kZSgkdG1wKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgdGltZSBvZiB0aGlzIG9iamVjdAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGgKICAgICAqIEBwYXJhbSBpbnQgJG0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF90aW1lKGludCAkaCxpbnQgJG0pCiAgICB7CiAgICAgICAgJHRtcCA9IHNlbGY6Ol9leHBsb2RlKCR0aGlzLT5fdGltZSk7CiAgICAgICAgJHRtcFsnaG91ciddID0gJGg7CiAgICAgICAgJHRtcFsnbWludXRlcyddID0gJG07CiAgICAgICAgJHRoaXMtPl90aW1lID0gc2VsZjo6X2ltcGxvZGUoJHRtcCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhIHRpbWUgc3RyaW5nIChpbiB0aGUgZm9ybWF0IEg6TSwgYWRqdXN0IHRoZSB0aW1lIG9mIHRoaXMgb2JqZWN0IGFwcHJvcHJpYXRlbHkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0aW1lX3N0cgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X3RpbWVfZnJvbV9zdHIoc3RyaW5nICR0aW1lX3N0cikKICAgIHsKICAgICAgICAkdG1wID0gc2VsZjo6X2V4cGxvZGUoJHRoaXMtPl90aW1lKTsKICAgICAgICBsaXN0KCRoMSwkbTEpID0gZXhwbG9kZSgnOicsdHJpbSgkdGltZV9zdHIpKTsKICAgICAgICAkdG1wWydob3VyJ10gPSAkaDE7CiAgICAgICAgJHRtcFsnbWludXRlcyddID0gJG0xOwogICAgICAgICR0aGlzLT5fdGltZSA9IHNlbGY6Ol9pbXBsb2RlKCR0bXApOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjdXJyZW50IGRhdGUgZnJvbSB0aGlzIG9iamVjdCBpbiByZmMgZm9ybWF0CiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9yZmNfZGF0ZSgpCiAgICB7CiAgICAgICAgJGZtdCA9ICclWS0lbS0lZFQlSDolTTolUyc7CiAgICAgICAgJHRtcCA9IHN0cmZ0aW1lKCRmbXQsJHRoaXMtPl90aW1lKTsKICAgICAgICAkdG1wIC49IGRhdGUoJ1AnKTsKICAgICAgICByZXR1cm4gJHRtcDsKICAgIH0KfSAvLyBjbGFzcwoKIwojIEVPRgojCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_date_utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgc2V0IG9mIGNvbnZlbmllbmNlIG1ldGhvZHMgdG8gd29yayB3aXRoIGRhdGVzIGFuZCB0aW1lcwogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKiBAY2F0ZWdvcnkgVXRpbGl0aWVzCiAqIEBhdXRob3IgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwoKLy9kZWNsYXJlKHN0cmljdF90eXBlcz0xKTsjIHJldmlzaXQKCi8qKgogKiBBIHNldCBvZiBjb252ZW5pZW5jZSBtZXRob2RzIHRvIHdvcmsgd2l0aCBkYXRlcyBhbmQgdGltZXMKICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICovCmZpbmFsIGNsYXNzIHh0X2RhdGVfdXRpbHMKewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQogIAogIC8qKgogICAqIEdpdmVuIG1vbnRoLCBkYXkgeWVhciBpbnB1dCBmaWVsZHMgaW4gcGFyYW1ldGVycywgYW5kIGEgcHJlZml4IGNyZWF0ZSBhIHVuaXggdGltZXN0YW1wCiAgICogdGhpcyBpcyB1c2VmdWwgd2hlbiBwcm9jZXNzaW5nIGZvcm0gZGF0YSBmcm9tIHtodG1sX3NlbGVjdF9kYXRlfQogICAqCiAgICogaS5lOiA8Y29kZT4kdHMgPSBceHRfZGF0ZV91dGlsczo6ZGF0ZV9mcm9tX2Zvcm0oJHBhcmFtcywkaWQsJ3N0YXJ0ZGF0ZScpOzwvY29kZT4KICAgKgogICAqIEBwYXJhbSBhcnJheSAgICAgICAkcGFyYW1zICBBbiBhc3NvY2lhdGl2ZSBhcnJheSwgdXN1YWxseSBmcm9tIGZvcm0gc3VibWlzc2lvbi4KICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJHByZWZpeCAgVGhlIHByZWZpeCBmb3IgdGhlIE1vbnRoLCBEYXksIGFuZCBZZWFyIGZpZWxkcyB3aXRoaW4gdGhlIHBhcmFtcyBhcnJheQogICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJlZml4MiBBbiBvcHRpb25hbCBzZWNvbmQgcHJlZml4IHRvIGFwcGVuZCB0byB0aGUgZmlyc3Qgb25lIChpLmU6IHRoZSBmaWVsZCBuYW1lKQogICAqCiAgICogQHJldHVybiBpbnQgdW5peCB0aW1lc3RhbXAgcmVwcmVzZW50aW5nIHRoZSBkYXRlIGluIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGF0IDAwOjAwIGhvdXJzLiAgb3IgbnVsbAogICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkYXRlX2Zyb21fZm9ybShhcnJheSAkcGFyYW1zLHN0cmluZyAkcHJlZml4LHN0cmluZyAkcHJlZml4MiA9IG51bGwpCiAgICB7CiAgICAgICAgJHByZWZpeCA9IChzdHJpbmcpICRwcmVmaXg7CiAgICAgICAgJHByZWZpeCAuPSAoc3RyaW5nKSAkcHJlZml4MjsKICAgICAgICBpZiggIWlzX2FycmF5KCRwYXJhbXMpICkgcmV0dXJuOwoKICAgICAgICAkdHMgPSBta3RpbWUoMCwwLDAsCiAgICAgICAgICAgICAgICAgICAgIFx4dF9wYXJhbTo6Z2V0X2ludCgkcGFyYW1zLCRwcmVmaXguJ01vbnRoJyksCiAgICAgICAgICAgICAgICAgICAgIFx4dF9wYXJhbTo6Z2V0X2ludCgkcGFyYW1zLCRwcmVmaXguJ0RheScpLAogICAgICAgICAgICAgICAgICAgICBceHRfcGFyYW06OmdldF9pbnQoJHBhcmFtcywkcHJlZml4LidZZWFyJykpOwogICAgICAgIHJldHVybiAkdHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhIHVueGl4IHRpbWVzdGFtcCwgYW4gaG91ciBhbmQgbWludXRlcyB2YWx1ZQogICAgICogYWRqdXN0IHRoZSB1bml4IHRpbWVzdGFtcCBhY2NvcmRpbmdseS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICR0aW1lc3RhbXAKICAgICAqIEBwYXJhbSBpbnQgJGhvdXIKICAgICAqIEBwYXJhbSBpbnQgJG1pbnV0ZXMKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdHNfc2V0X3RpbWUoaW50ICR0aW1lc3RhbXAsIGludCAkaG91ciwgaW50ICRtaW51dGVzKSA6IGludAogICAgewogICAgICAgICRvYmogPSBuZXcgeHRfZGF0ZSgkdGltZXN0YW1wKTsKICAgICAgICAkb2JqLT5zZXRfdGltZSgkaG91ciwkbWludXRlcyk7CiAgICAgICAgcmV0dXJuICRvYmotPnRvX3RpbWVzdGFtcCgpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgdW5peCB0aW1lc3RhbXAgZnJvbSBhIHN0cmluZy4KICAgICAqIGFkanVzdCB0aGUgdW5peCB0aW1lc3RhbXAgYWNjb3JkaW5nbHkuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkdGltZXN0YW1wCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHIKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdHNfc2V0X3RpbWVfZnJvbV9zdHIoaW50ICR0aW1lc3RhbXAsIHN0cmluZyAkc3RyKSA6IGludAogICAgewogICAgICAgICRvYmogPSBuZXcgeHRfZGF0ZSgkdGltZXN0YW1wKTsKICAgICAgICAkb2JqLT5zZXRfdGltZV9mcm9tX3N0cigkc3RyKTsKICAgICAgICByZXR1cm4gJG9iai0+dG9fdGltZXN0YW1wKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUZXN0IGlmIHRoZSBnaXZlbiB5ZWFyIChvciB0aGUgY3VycmVudCB5ZWFyKSBpcyBhIGxlYXB5ZWFyCiAgICAgKgogICAgICogQHBhcmFtIGludCAkeWVhciBPcHRpb25hbCB5ZWFyLgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNfbGVhcHllYXIoaW50ICR5ZWFyID0gbnVsbCkgOiBib29sCiAgICB7CiAgICAgICAgaWYoICEkeWVhciApICR5ZWFyID0gZGF0ZSgnWScpOwoKICAgICAgICAkZiA9IDA7CiAgICAgICAgaWYoMCA9PT0gJHllYXIgJSA0KSAgIHsgJGYgPSAxOyB9CiAgICAgICAgaWYoMCA9PT0gJHllYXIgJSAxMDApIHsgJGYgPSAwOyB9CiAgICAgICAgaWYoMCA9PT0gJHllYXIgJSA0MDApIHsgJGYgPSAxOyB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuICRmOwogICAgfQogIAogIC8qKgogICAqIFJldHVybiB0aGUgZGF5cyBpbiB0aGUgZ2l2ZW4gbW9udGgveWVhcgogICAqCiAgICogQHBhcmFtIGludHxudWxsICRtb250aCBUaGUgc3BlY2lmaWVkIG1vbnRoLCBpZiBub3Qgc3BlY2lmaWVkIHRoZSBjdXJyZW50IG1vbnRoIGlzIHVzZWQuCiAgICogQHBhcmFtIGludHxudWxsICR5ZWFyICBUaGUgc3BlY2lmaWVkIHllYXIuICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgY3VycmVudCB5ZWFyIGlzIHVzZWQuCiAgICoKICAgKiBAcmV0dXJuIGludAogICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkYXlzX2luX21vbnRoKGludCAkbW9udGggPSBudWxsLCBpbnQgJHllYXIgPSBudWxsKSA6IGludAogICAgewogICAgICAgICRkYXlzX2luX21vbnRoID0gYXJyYXkoMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMSk7CgogICAgICAgIGlmKCAhJG1vbnRoICkgJG1vbnRoID0gZGF0ZSgnbScpOwogICAgICAgIGlmKCAhJHllYXIgKSAkeWVhciA9IGRhdGUoJ1knKTsKICAgICAgICBpZiggc2VsZjo6aXNfbGVhcHllYXIoJHllYXIpICkkZGF5c19pbl95ZWFyWzFdID0gMjk7CgogICAgICAgIC8vIG1vbnRoIGlzIGEgdmFsdWUgZnJvbSAxIHRvIDEyLgogICAgICAgIHJldHVybiAkZGF5c19pbl95ZWFyWyRtb250aC0xXTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIHh0X2RhdGUgZ2l2ZW4gc3BlY2lmaWVkIHRpbWUgdmFsdWVzCiAgICAgKgogICAgICogQGRlcHJlY2F0ZWQKICAgICAqIEBwYXJhbSBpbnQgJG1vbnRoCiAgICAgKiBAcGFyYW0gaW50ICRkYXkKICAgICAqIEBwYXJhbSBpbnQgJHllYXIKICAgICAqIEBwYXJhbSBpbnQgJGhvdXIKICAgICAqIEBwYXJhbSBpbnQgJG1pbnV0ZQogICAgICogQHBhcmFtIGludCAkc2Vjb25kcwogICAgICogQHJldHVybiB4dF9kYXRlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGF0ZV9hdChpbnQgJG1vbnRoLCBpbnQgJGRheSwgaW50ICR5ZWFyLCBpbnQgJGhvdXIgPSAwLCBpbnQgJG1pbnV0ZSA9IDAsIGludCAkc2Vjb25kcyA9IDApIDogeHRfZGF0ZQogICAgewogICAgICAgICR0bXAgPSBta3RpbWUoJGhvdXIsJG1pbnV0ZSwkc2Vjb25kcywkbW9udGgsJGRheSwkeWVhcik7CiAgICAgICAgcmV0dXJuIG5ldyB4dF9kYXRlKCR0bXApOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydCBhIHRpbWVzdGFtcCB0byBkYXRhYmFzZSBmb3JtYXQKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICR0cwogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0c190b19kYmZvcm1hdChpbnQgJHRzKSA6IHN0cmluZwogICAgewogICAgICAgIGlmKCAkdHMgPCAxICkgcmV0dXJuICcnOwogICAgICAgICRzdHIgPSBzdHJmdGltZSgnJVktJW0tJWQgJUg6JU06JVMnLCAkdHMpOwogICAgICAgIHJldHVybiB0cmltKCRzdHIsICInIik7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0IGEgbG9jYWxlIHNwZWNpZmljIGRhdGUvdGltZSBzdHJpbmcgdG8gYSB1bml4IHRpbWVzdGFtcAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0ciBUaGUgaW5wdXQgc3RyaW5nCiAgICAgKiBAcmV0dXJuIGludCBUaGUgdW5peCB0aW1lc3RhbXAuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbV9sb2NhbGVfc3RyKHN0cmluZyAkc3RyKSA6IGludAogICAgewogICAgICAgICRsYW5nID0gQ21zTmxzT3BlcmF0aW9uczo6Z2V0X2N1cnJlbnRfbGFuZ3VhZ2UoKTsKICAgICAgICAkZGF0ZSA9ICR0aW1lID0gbnVsbDsKICAgICAgICBpZiggc3RycG9zKCRzdHIsJyAnKSAhPT0gRkFMU0UgKSB7CiAgICAgICAgICAgIFskZGF0ZSwkdGltZV0gPSBleHBsb2RlKCcgJywkc3RyKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRkYXRlID0gJHN0cjsKICAgICAgICB9CiAgICAgICAgJHNlcCA9ICRzdHJbMl07CiAgICAgICAgaWYoICRsYW5nICE9ICdlbl9VUycpIHsKICAgICAgICAgICAgWyRkYXksJG1vbnRoLCR5ZWFyXSA9IGV4cGxvZGUoJHNlcCwkZGF0ZSk7CiAgICAgICAgICAgICRuZXdzdHIgPSB0cmltKCIkbW9udGgvJGRheS8keWVhciAkdGltZSIpOwogICAgICAgICAgICByZXR1cm4gc3RydG90aW1lKCRuZXdzdHIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc3RydG90aW1lKCRzdHIpOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydCBhIHVuaXggdGltZXN0YW1wIHRvIGEgbG9jYWxlIHNwZWNpZmljIGZvcm1hdAogICAgICogKGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgVVMgYW5kIG5vbiBVUykuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkdHMgVGhlIHVuaXggdGltZXN0YW1wCiAgICAgKiBAcGFyYW0gYm9vbCAkdGltZV90b28gV2V0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRpbWUgaW4gdGhlIG91dHB1dCBzdHJpbmcKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcCBUaGUgc2VwYXJhdG9yIGJldHdlZW4gZmllbGRzLiAgRGVmYXVsdCBpcyAnLycKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdG9fbG9jYWxlX3N0cihpbnQgJHRzLCBib29sICR0aW1lX3RvbyA9IFRSVUUsIHN0cmluZyAkc2VwID0gJy8nKSA6IHN0cmluZwogICAgewogICAgICAgICRsYW5nID0gQ21zTmxzT3BlcmF0aW9uczo6Z2V0X2N1cnJlbnRfbGFuZ3VhZ2UoKTsKICAgICAgICAkZm10ID0gIiVkeyRzZXB9JW17JHNlcH0lWSI7CiAgICAgICAgaWYoICRsYW5nID09ICdlbl9VUycgKSB7CiAgICAgICAgICAgICRmbXQgPSAiJW17JHNlcH0lZHskc2VwfSVZIjsKICAgICAgICB9CiAgICAgICAgaWYoICR0aW1lX3RvbyApICRmbXQgLj0gIiAlVCI7CiAgICAgICAgcmV0dXJuIHN0cmZ0aW1lKCRmbXQsJHRzKTsKICAgIH0KCgogICAgLyoqCiAgICAgKiBDb252ZXJ0IGEgdW5peCB0aW1lc3RhbXAgdG8gYW4gUkZDIGRhdGUKICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICogQHBhcmFtIGludCAkdHMgVGhlIHVuaXggdGltZXN0YW1wCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJmY19kYXRlKGludCAkdHMpIDogc3RyaW5nCiAgICB7CiAgICAgICAgJGZtdCA9ICclWS0lbS0lZFQlSDolTTolUyc7CiAgICAgICAgJHRtcCA9IHN0cmZ0aW1lKCRmbXQsJHRzKTsKICAgICAgICAkdG1wIC49IGRhdGUoJ1AnKTsKICAgICAgICByZXR1cm4gJHRtcDsKICAgIH0KICAvKioKICAgKiBAcGFyYW0gICAgICAkZm9ybWF0CiAgICogQHBhcmFtIG51bGwgJHRpbWVzdGFtcAogICAqCiAgICogQHJldHVybiBzdHJpbmcKICAgKi8KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN0cmZ0aW1lICgkZm9ybWF0LCAkdGltZXN0YW1wID0gbnVsbCkgOiBzdHJpbmcKICB7CiAgICBpZiggKFx2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc4LjEnKSAgPCAwKSAmJiAoXHZlcnNpb25fY29tcGFyZShDTVNfVkVSU0lPTiwgJzIuNCcpPCAwKSApCiAgICB7CiAgICAgIHJldHVybiBzdHJmdGltZSgkZm9ybWF0LCAkdGltZXN0YW1wKTsKICAgIH0KICAgIAogICAgcmV0dXJuIFxDTVNNU1xzdHJmdGltZSgkZm9ybWF0LCAkdGltZXN0YW1wKTsKICB9Cn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiMK]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_debug.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBwcm92aWRlcyBhIHN0YXRpYyBjbGFzcyBjb250YWluaW5nIGRlYnVnZ2luZyB1dGlsaXRpZXMuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBFeGNlcHRpb25zCiAqIEBhdXRob3IgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwoKLy9kZWNsYXJlKHN0cmljdF90eXBlcz0xKTsjIHJldmlzaXQKCi8qKgogKiBBIHNpbXBsZSBjbGFzcyB3aXRoIHNvbWUgZGVidWcgZnVuY3Rpb25zLgogKiBUaGlzIGNsYXNzIHN1cHBvcnRzIG91dHB1dCB0byBkaWZmZXJlbnQgZmlsZXMuCiAqCiAqIEBkZXByZWNhdGVkCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqLwpmaW5hbCBjbGFzcyB4dF9kZWJ1Zwp7CiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHN0YXRpYyBwcml2YXRlICRfb3V0cHV0OwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBzdGF0aWMgcHJpdmF0ZSAkX2luc3RhbnQgPSAxOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBzdGF0aWMgcHJpdmF0ZSAkX2h0bWwgPSB0cnVlOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBzdGF0aWMgcHJpdmF0ZSAkX2ZpbGVuYW1lOwoKICAgIC8qKgogICAgICogU2V0IGZsYWcgaW5kaWNhdGluZyB0aGF0IG91dHB1dCBzaG91bGQgYmUgaW4gaHRtbC4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkdmFyCiAgICAgKi8KICAgIHN0YXRpYyBmdW5jdGlvbiBzZXRfaHRtbChib29sICR2YXIgPSB0cnVlKQogICAgewogICAgICAgIHNlbGY6OiRfaHRtbCA9IChib29sKSR2YXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgZmxhZyBpbmRpY2F0aW5nIHRoYXQgb3V0cHV0IHNob3VsZCBiZSBpbiBodG1sIG9yIG5vdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBpc19odG1sKCkgOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OiRfaHRtbDsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCBmbGFnIGluZGljYXRpbmcgdGhhdCBvdXRwdXQgc2hvdWxkIGJlIG91dHB1dCBpbnN0YW50bHksIG9yIGNhY2hlZAogICAgICoKICAgICAqIEBwYXJhbSBib29sICR2YXIKICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBzZXRfaW5zdGFudChib29sICR2YXIgPSB0cnVlKQogICAgewogICAgICAgIHNlbGY6OiRfaW5zdGFudCA9IChib29sKSR2YXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgb3V0cHV0IHNob3VsZCBiZSBvdXRwdXQgaW5zdGFudGx5LCBvciBjYWNoZWQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBpc19pbnN0YW50KCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6JF9pbnN0YW50OwogICAgfQoKICAgIC8qKgogICAgICogU2V0IGZpbGVuYW1lIGZvciBkZWJ1ZyBvdXRwdXQuCiAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyB2YXJpYWJsZSBpcyBUTVBfQ0FDSEVfTE9DQVRJT04veHRfZGVidWcubG9nCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlbmFtZS4KICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBzZXRfZmlsZW5hbWUoc3RyaW5nICRzdHIpCiAgICB7CiAgICAgICAgc2VsZjo6JF9maWxlbmFtZSA9ICRzdHI7CiAgICB9CgoKICAgIC8qKgogICAgICogT3V0cHV0IGFjY3J1ZWQgZGVidWcgaW5mb3JtYXRpb24gdG8gYSBzcGVjaWZpZWQgZmlsZS4KICAgICAqIElmIHRoZSBmaWxlbmFtZSBwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZCwgdGhlIGN1cnJlbnRseSBzZXQgZmlsZW5hbWUKICAgICAqIHdpbGwgYmUgdXNlZCwgb3IgYSBoYXJkY29kZWQgZmlsZW5hbWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBvdXRwdXQoc3RyaW5nICRmaWxlbmFtZSA9ICcnKQogICAgewogICAgICAgIGlmKCAhJGZpbGVuYW1lICkgewogICAgICAgICAgICBpZiggc2VsZjo6JF9maWxlbmFtZSApICRmaWxlbmFtZSA9IHNlbGY6OiRfZmlsZW5hbWU7CiAgICAgICAgICAgIGlmKCAhJGZpbGVuYW1lICkgJGZpbGVuYW1lID0gVE1QX0NBQ0hFX0xPQ0FUSU9OLicveHRfZGVidWcubG9nJzsKICAgICAgICB9CgogICAgICAgIGlmKCAhY291bnQoc2VsZjo6JF9vdXRwdXQpICkgcmV0dXJuOwoKICAgICAgICBpZiggIWVtcHR5KCRmaWxlbmFtZSkgKSB7CiAgICAgICAgICAgICRmaCA9IEBmb3BlbigkZmlsZW5hbWUsJ2EnKTsKICAgICAgICAgICAgaWYoICEkZmggKSB7CiAgICAgICAgICAgICAgICB0cmlnZ2VyX2Vycm9yKCdQcm9ibGVtIG9wZW5pbmcgZGVidWcgZmlsZTogJy4kZmlsZW5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3JlYWNoKCBzZWxmOjokX291dHB1dCBhcyAkb25lICkgewogICAgICAgICAgICAgICAgZnB1dHMoJGZoLCRvbmUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZjbG9zZSgkZmgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoKCBzZWxmOjokX291dHB1dCBhcyAkb25lICkgewogICAgICAgICAgICBlY2hvICRvbmU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQWRkIGluZm9ybWF0aW9uIHRvIHRoZSBkZWJ1ZyBsb2cuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YXIgVGhlIHZhcmlhYmxlIHRvIGFkZCB0byB0aGUgZGVidWcgbG9nLiAgVGhpcyBtZXRob2QgYXR0ZW1wdHMgdG8gcGFyc2Ugb2JqZWN0cyBhbmQgYXJyYXlzLgogICAgICogQHBhcmFtIHN0cmluZyAkdGl0bGUgVGhlIHRpdGxlIGZvciB0aGUgZGVidWcgbWVzc2FnZS4KICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBhZGQoJHZhcixzdHJpbmcgJHRpdGxlID0gJycpCiAgICB7CiAgICAgICAgJG91dCA9ICcnOwogICAgICAgIGlmKCAhJHZhciApIHJldHVybjsKCiAgICAgICAgaWYoIGVtcHR5KCR0aXRsZSkgKSAkdGl0bGUgPSAnREVCVUc6ICc7CiAgICAgICAgaWYoIHNlbGY6OmlzX2h0bWwoKSApIHsKICAgICAgICAgICAgJG91dCAuPSAnPGI+eyR0aXRsZX06PC9iPic7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkb3V0IC49ICR0aXRsZS4iOiAiOwogICAgICAgIH0KCiAgICAgICAgb2Jfc3RhcnQoKTsKICAgICAgICBpZiggc2VsZjo6aXNfaHRtbCgpICkgZWNobyAnPHByZT4nOwogICAgICAgIGlmKCBpc19hcnJheSgkdmFyKSApIHsKICAgICAgICAgICAgZWNobyAiXG5OdW1iZXIgb2YgZWxlbWVudHM6ICIgLiBjb3VudCgkdmFyKSAuICJcbiI7CiAgICAgICAgICAgIHByaW50X3IoJHZhcik7CiAgICAgICAgfQogICAgICAgIGVsc2VpZihpc19vYmplY3QoJHZhcikpIHsKICAgICAgICAgICAgcHJpbnRfcigkdmFyKTsKICAgICAgICB9CiAgICAgICAgZWxzZWlmKGlzX3N0cmluZygkdmFyKSkgewogICAgICAgICAgICBwcmludF9yKGh0bWxlbnRpdGllcyhzdHJfcmVwbGFjZSgiXHQiLCAnICAnLCAkdmFyKSkpOwogICAgICAgIH0KICAgICAgICBlbHNlaWYoaXNfYm9vbCgkdmFyKSkgewogICAgICAgICAgICBlY2hvICR2YXIgPT09IHRydWUgPyAndHJ1ZScgOiAnZmFsc2UnOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcHJpbnRfcigkdmFyKTsKICAgICAgICB9CiAgICAgICAgaWYoIHNlbGY6OmlzX2h0bWwoKSApIGVjaG8gJzwvcHJlPic7CgogICAgICAgICRvdXQgLj0gb2JfZ2V0X2NvbnRlbnRzKCk7CiAgICAgICAgb2JfZW5kX2NsZWFuKCk7CiAgICAgICAgJG91dCAuPSAiXG4iOwoKICAgICAgICBpZiggc2VsZjo6aXNfaW5zdGFudCgpICkgewogICAgICAgICAgICBlY2hvICRvdXQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBzZWxmOjokX291dHB1dFtdID0gJG91dDsKICAgICAgICB9CiAgICB9Cn0KCiMKIyBFT0YKIwo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_dir.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgc2ltcGxlIGNsYXNzIGZvciB1dGlsaXRpZXMgcmVsYXRlZCB0byBtYW5pcHVsYXRpbmcgZGlyZWN0b3JpZXMuCiAqIGFuZCBzZWFyY2hpbmcuICBhbmQgdG8gaW5jbHVkZSBidWlsdGluIGNhY2hpbmcKICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IFV0aWxpdGllcwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCi8vZGVjbGFyZShzdHJpY3RfdHlwZXM9MSk7IyByZXZpc2l0CgovKioKICogQSBzaW1wbGUgY2xhc3MgZm9yIHV0aWxpdGllcyByZWxhdGVkIHRvIG1hbmlwdWxhdGluZyBkaXJlY3Rvcmllcy4KICogYW5kIHNlYXJjaGluZy4gIGFuZCB0byBpbmNsdWRlIGJ1aWx0aW4gY2FjaGluZwogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKi8KZmluYWwgY2xhc3MgeHRfZGlyCnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIFJlY3Vyc2l2ZWx5IHJlbW92ZSBhIGRpcmVjdG9yeQogICAgICogYW4gYWxpYXMgZm9yIHJlY3Vyc2l2ZV9yZW1vdmVfZGlyZWN0b3J5CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGlyZWN0b3J5IFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgdG8gYmUgcmVtb3ZlZC4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWN1cnNpdmVfcm1kaXIoc3RyaW5nICRkaXJlY3RvcnkpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OnJlY3Vyc2l2ZV9yZW1vdmVfZGlyZWN0b3J5KCRkaXJlY3RvcnkpOwogICAgfQogIAogIAogIC8qKgogICAqIFJlY3Vyc2l2ZWx5IHJlbW92ZSBhIGRpcmVjdG9yeQogICAqCiAgICogQHBhcmFtIHN0cmluZyAkZGlyZWN0b3J5IFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgdG8gYmUgcmVtb3ZlZC4KICAgKgogICAqIEByZXR1cm4gYm9vbAogICAqCiAgICogQHNlZSBcQ01TTVNFeHRcRlM6OmRpcl9yZWN1cnNpdmVfZGVsZXRlKCRkaXJlY3RvcnkpCiAgICogQGRlcHJlY2F0ZWQKICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVjdXJzaXZlX3JlbW92ZV9kaXJlY3Rvcnkoc3RyaW5nICRkaXJlY3RvcnkpCiAgICB7Ci8vICAgICAgICBpZihzdWJzdHIoJGRpcmVjdG9yeSwtMSkgPT0gJy8nKSAkZGlyZWN0b3J5ID0gc3Vic3RyKCRkaXJlY3RvcnksMCwtMSk7Ci8vICAgICAgICBpZighZmlsZV9leGlzdHMoJGRpcmVjdG9yeSkgfHwgIWlzX2RpcigkZGlyZWN0b3J5KSkJewovLyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLy8gICAgICAgIH0KLy8gICAgICAgIGVsc2VpZihpc19yZWFkYWJsZSgkZGlyZWN0b3J5KSkgewovLyAgICAgICAgICAgICRoYW5kbGUgPSBvcGVuZGlyKCRkaXJlY3RvcnkpOwovLyAgICAgICAgICAgIHdoaWxlIChGQUxTRSAhPT0gKCRpdGVtID0gcmVhZGRpcigkaGFuZGxlKSkpIHsKLy8gICAgICAgICAgICAgICAgaWYoJGl0ZW0gIT0gJy4nICYmICRpdGVtICE9ICcuLicpIHsKLy8gICAgICAgICAgICAgICAgICAgICRwYXRoID0gJGRpcmVjdG9yeS4nLycuJGl0ZW07Ci8vICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRwYXRoKSkgewovLyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6OnJlY3Vyc2l2ZV9yZW1vdmVfZGlyZWN0b3J5KCRwYXRoKTsKLy8gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci8vICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rKCRwYXRoKTsKLy8gICAgICAgICAgICAgICAgICAgIH0KLy8gICAgICAgICAgICAgICAgfQovLyAgICAgICAgICAgIH0KLy8gICAgICAgICAgICBjbG9zZWRpcigkaGFuZGxlKTsKLy8gICAgICAgICAgICBpZighcm1kaXIoJGRpcmVjdG9yeSkpIHJldHVybiBGQUxTRTsKLy8gICAgICAgIH0KLy8gICAgICAgIHJldHVybiBUUlVFOwogICAgICAKICAgICAgcmV0dXJuIFxDTVNNU0V4dFxGUzo6ZGlyX3JlY3Vyc2l2ZV9kZWxldGUoJGRpcmVjdG9yeSk7CiAgICB9CgoKICAgIC8qKgogICAgICogUmV0dXJuIGEgbGlzdCBvZiBhbGwgb2YgdGhlIGRpcmVjdG9yaWVzIGluc2lkZSBhIHBhcmVudAogICAgICogVGhpcyBtZXRob2QgaXMgTk9UIHJlY3Vyc2l2ZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhcmVudCBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHRvIHNlYXJjaAogICAgICogQHJldHVybiBtaXhlZCBBbiBhcnJheSBvZiBkaXJlY3RvcmllcyBkaXJlY3RseSBiZWxvdyB0aGUgcGFyZW50LCBvciBmYWxzZS4KICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBkaXJfbGlzdChzdHJpbmcgJHBhcmVudCkKICAgIHsKLy8gICAgICAgIGlmKCBlbXB0eSgkcGFyZW50KSApIHJldHVybiBmYWxzZTsKLy8gICAgICAgIGlmKCAhaXNfZGlyKCRwYXJlbnQpICkgcmV0dXJuIGZhbHNlOwovLwovLyAgICAgICAgJGRoID0gb3BlbmRpcigkcGFyZW50KTsKLy8gICAgICAgIGlmKCAhJGRoICkgcmV0dXJuIGZhbHNlOwovLwovLyAgICAgICAgJHJlc3VsdHMgPSBhcnJheSgpOwovLyAgICAgICAgd2hpbGUoICgkZmlsZSA9IHJlYWRkaXIoJGRoKSkgIT09IGZhbHNlICkgewovLyAgICAgICAgICAgIGlmKCAkZmlsZSA9PSAnLicgfHwgJGZpbGUgPT0gJy4uJyApIGNvbnRpbnVlOwovLyAgICAgICAgICAgIGlmKCBzdGFydHN3aXRoKCRmaWxlLCcuJykgKSBjb250aW51ZTsKLy8gICAgICAgICAgICBpZiggaXNfZGlyKCRwYXJlbnQuJy8nLiRmaWxlKSApICRyZXN1bHRzW10gPSAkZmlsZTsKLy8gICAgICAgIH0KLy8gICAgICAgIGNsb3NlZGlyKCRkaCk7Ci8vCi8vICAgICAgICBpZiggY291bnQoJHJlc3VsdHMpID09IDAgKSByZXR1cm4gZmFsc2U7Ci8vICAgICAgICByZXR1cm4gJHJlc3VsdHM7CiAgICAgIAogICAgICAkcmV0ID1cQ01TTVNFeHRcRlM6OmRpcl9saXN0KCRwYXJlbnQpOwogICAgICAKICAgICAgcmV0dXJuIGNvdW50KCRyZXQpID8gJHJldCA6IEZBTFNFOwogICAgfQogIAogIAogIC8qKgogICAqIEEgZnVuY3Rpb24gdG8gcmV0dXJuIGEgbGlzdCBvZiBhbGwgZmlsZXMgaW4gYSBkaXJlY3RvcnkgdGhhdCBtYXRjaCBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4KICAgKiBUaGlzIG1ldGhvZCBpcyBub3QgcmVjdXJzaXZlLgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkZGlyICAgIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgdG8gc2VhcmNoCiAgICogQHBhcmFtIHN0cmluZyAkcmVnZXhwIFRoZSByZWd1bGFyIGV4cHJlc3Npb24KICAgKiBAcGFyYW0gaW50ICAgICRsaW1pdCAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc3VsdHMgdG8gcmV0dXJuLgogICAqCiAgICogQHJldHVybiBhcnJheXxib29sCiAgICogQGRlcHJlY2F0ZWQKICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmlsZV9saXN0X3JlZ2V4cChzdHJpbmcgJGRpcixzdHJpbmcgJHJlZ2V4cCxpbnQgJGxpbWl0PTEwMDAwMDApCiAgICB7CiAgICAgICAgaWYoIGVtcHR5KCRkaXIpICkgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmKCAhaXNfZGlyKCRkaXIpICkgcmV0dXJuIGZhbHNlOwoKICAgICAgICAkZGggPSBvcGVuZGlyKCRkaXIpOwogICAgICAgIGlmKCAhJGRoICkgcmV0dXJuIGZhbHNlOwoKICAgICAgICAkcmVzdWx0cyA9IGFycmF5KCk7CiAgICAgICAgd2hpbGUoICgkZmlsZSA9IHJlYWRkaXIoJGRoKSkgIT09IGZhbHNlICYmIGNvdW50KCRyZXN1bHRzKSA8ICRsaW1pdCAgKSB7CiAgICAgICAgICAgIGlmKCAkZmlsZSA9PSAnLicgfHwgJGZpbGUgPT0gJy4uJyApIGNvbnRpbnVlOwogICAgICAgICAgICBpZiggcHJlZ19tYXRjaCggJy8nLiRyZWdleHAuJy8nLCAkZmlsZSApICkgJHJlc3VsdHNbXSA9ICRmaWxlOwogICAgICAgIH0KICAgICAgICBjbG9zZWRpcigkZGgpOwoKICAgICAgICBpZiggY291bnQoJHJlc3VsdHMpID09IDAgKSByZXR1cm4gZmFsc2U7CiAgICAgICAgcmV0dXJuICRyZXN1bHRzOwogICAgfQoKCiAgICAvKioKICAgICAqIFJlY3Vyc2l2ZWx5IGNyZWF0ZSBhIHN1YmRpcmVjdG9yeSB0aWxsIHRoZSBwYXRoIGV4aXN0cy4KICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICogQHNlZSBcQ01TTVNFeHRcRlM6Om1rZGlycigkcGF0aG5hbWUpOwogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aG5hbWUgVGhlIHBhdGggbmFtZSB0byBjcmVhdGUKICAgICAqIEBwYXJhbSBpbnQgJG1vZGUgVGhlIG9jdGFsIHBlcm1pc3Npb24gZm9yIHRoZSBuZXdseSBjcmVhdGVkIHN1YmRpcmVjdG9yaWVzCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHRvIGNhbGwgYWZ0ZXIgY3JlYXRpbmcgdGhlIG1ldGhvZC4KICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1rZGlyciAoc3RyaW5nICRwYXRobmFtZSxpbnQgJG1vZGUgPSAwNzU1LGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwpIDogYm9vbAogICAgewovLyAgICAgICAgLy8gQ2hlY2sgaWYgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzCi8vICAgICAgICBpZiAoZW1wdHkoJHBhdGhuYW1lKSB8fCBpc19kaXIgKCRwYXRobmFtZSkpIHJldHVybiBUUlVFOwovLwovLyAgICAgICAgLy8gRW5zdXJlIGEgZmlsZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IHdpdGggdGhlIHNhbWUgbmFtZQovLyAgICAgICAgaWYgKGlzX2ZpbGUgKCRwYXRobmFtZSkpIHJldHVybiBUUlVFOyAvLyBSQzogTW9kaWZpY2F0aW9uIHN1Y2ggdGhhdCB0aGlzIGlzbid0IGFuIGVycm9yCi8vCi8vICAgICAgICAvLyBDcmF3bCB1cCB0aGUgZGlyZWN0b3J5IHRyZWUKLy8gICAgICAgICRuZXh0X3BhdGhuYW1lID0gZGlybmFtZSAoJHBhdGhuYW1lKTsKLy8gICAgICAgIGlmIChzZWxmOjpta2RpcnIgKCRuZXh0X3BhdGhuYW1lLCAkbW9kZSkpIHsKLy8gICAgICAgICAgICBpZiAoIWlzX2ZpbGUgKCRwYXRobmFtZSkpIHsKLy8gICAgICAgICAgICAgICAgJHJlcyA9IG1rZGlyICgkcGF0aG5hbWUsICRtb2RlKTsKLy8gICAgICAgICAgICAgICAgaWYoICRyZXMgJiYgaXNfY2FsbGFibGUoJGNhbGxiYWNrKSApIGNhbGxfdXNlcl9mdW5jKCRjYWxsYmFjaywkcGF0aG5hbWUpOwovLyAgICAgICAgICAgICAgICByZXR1cm4gJHJlczsKLy8gICAgICAgICAgICB9Ci8vICAgICAgICB9Ci8vICAgIHJldHVybiBGQUxTRTsKICAgICAgCiAgICAgICRyZXQgPSBcQ01TTVNFeHRcRlM6Om1rZGlyX3IoJHBhdGhuYW1lLCAkbW9kZSk7CiAgCiAgICAgIGlmKCAkcmV0ICYmIGlzX2NhbGxhYmxlKCRjYWxsYmFjaykgKQogICAgICB7CiAgICAgICAgJGNhbGxiYWNrKCRwYXRobmFtZSk7CiAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXQ7CiAgICB9CgoKICAgIC8qKgogICAgICogR2l2ZW4gYSBkaXJlY3RvcnksIGFuZCBhIGxpc3Qgb2YgZXh0ZW5zaW9ucywgcmV0dXJuIGEgbGlzdCBvZiBtYXRjaGluZyBmaWxlcy4KICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgbm90IHJldHVybiBhbnkgZGlyZWN0b3JpZXMuCiAgICAgKiBUaGlzIG1ldGhvZCBpcyBub3QgcmVjdXJzaXZlLgogICAgICoKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKiBAc2VlIFxDTVNNU0V4dFxGUzo6Z2V0X2ZpbGVfbGlzdCgpCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGlyIFRoZSBzZWFyY2ggZGlyZWN0b3J5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRleHRlbnNpb25zIEEgY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgZXh0ZW5zaW9ucyB0byByZXR1cm4KICAgICAqIEBwYXJhbSBib29sICRzb3J0ZWQgV2hldGhlciB0aGUgb3V0cHV0IHNob3VsZCBiZSBzb3J0ZWQgKG5hdHVyYWwgY2FzZSkgb3Igbm90LgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9maWxlX2xpc3Qoc3RyaW5nICRkaXIsc3RyaW5nICRleHRlbnNpb25zLGJvb2wgJHNvcnRlZCA9IHRydWUpCiAgICB7Ci8vICAgICAgICAkZmlsZXR5cGVzID0gYXJyYXkoKTsKLy8gICAgICAgIGlmKCAhZW1wdHkoJGV4dGVuc2lvbnMpICYmICFpc19hcnJheSgkZXh0ZW5zaW9ucykgKSAkZmlsZXR5cGVzID0gZXhwbG9kZSgnLCcsJGV4dGVuc2lvbnMpOwovLwovLyAgICAgICAgJHRtcCA9IGFycmF5KCk7Ci8vICAgICAgICBmb3JlYWNoKCAkZmlsZXR5cGVzIGFzICRvbmUgKSB7Ci8vICAgICAgICAgICAgJG9uZSA9IHN0cnRvbG93ZXIodHJpbSgkb25lKSk7Ci8vICAgICAgICAgICAgaWYoICRvbmUgKSAkdG1wW10gPSAkb25lOwovLyAgICAgICAgfQovLyAgICAgICAgJGZpbGV0eXBlcyA9IG51bGw7Ci8vICAgICAgICBpZiggY291bnQoJHRtcCkgKSAkZmlsZXR5cGVzID0gJHRtcDsKLy8KLy8gICAgICAgICRmaWxlcyA9IGFycmF5KCk7Ci8vICAgICAgICAkZGggPSBvcGVuZGlyKCAkZGlyICk7Ci8vICAgICAgICBpZiggJGRoICkgewovLyAgICAgICAgICAgIHdoaWxlIChmYWxzZSAhPT0gKCRmaWxlID0gcmVhZGRpcigkZGgpKSkgewovLyAgICAgICAgICAgICAgICBpZiggJGZpbGUgPT0gJy4nIHx8ICRmaWxlID09ICcuLicgKSBjb250aW51ZTsKLy8KLy8gICAgICAgICAgICAgICAgJGZ1bGxwYXRoID0gY21zX2pvaW5fcGF0aCgkZGlyLCRmaWxlKTsKLy8gICAgICAgICAgICAgICAgaWYoIGlzX2RpciggJGZ1bGxwYXRoICkgKSBjb250aW51ZTsKLy8KLy8gICAgICAgICAgICAgICAgJGV4dCA9IHN1YnN0cihzdHJyY2hyKCRmaWxlLCAnLicpLCAxKTsKLy8gICAgICAgICAgICAgICAgaWYoICFlbXB0eSgkZmlsZXR5cGVzKSA+IDAgJiYgIWluX2FycmF5KCAkZXh0LCAkZmlsZXR5cGVzICkgKSBjb250aW51ZTsKLy8KLy8gICAgICAgICAgICAgICAgJGZpbGVzWyRmaWxlXSA9ICRmaWxlOwovLyAgICAgICAgICAgIH0KLy8gICAgICAgICAgICBjbG9zZWRpcigkZGgpOwovLyAgICAgICAgfQovLwovLyAgICAgICAgaWYoICRzb3J0ZWQgKSBuYXRjYXNlc29ydCgkZmlsZXMpOwovLwovLyAgICAgICAgcmV0dXJuICRmaWxlczsKICAgICAgCiAgICAgIHJldHVybiBcQ01TTVNFeHRcRlM6OmdldF9maWxlX2xpc3QoJGRpciwgJGV4dGVuc2lvbnMpOwogICAgfQogIAogIAogIC8qKgogICAqIEdpdmVuIGEgZmlsZW5hbWUsIHRlc3QgaWYgaXQgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHBhdHRlcm4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lICAgICAgIFRoZSB0ZXN0IGZpbGVuYW1lIChzdHJpbmcpIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MKICAgKiBAcGFyYW0gbWl4ZWQgICRwYXR0ZXJuICAgICAgICBBbiBhcnJheSBvZiBzdHJpbmcgcGF0dGVybnMsIG9yIGEgc2luZ2xlIHN0cmluZy4KICAgKiBAcGFyYW0gYm9vbCAgICRjYXNlX3NlbnNpdGl2ZSBXaGV0aGVyIHRoZSBwYXR0ZXJuKHMpIGlzL2FyZSBjYXNlIHNlbnNpdGl2ZQogICAqIEBwYXJhbSBib29sICAgJGFsbG93X2VtcHR5ICAgIFdoZXRoZXIgb3Igbm90IGFuIGVtcHR5IHBhdHRlcm4gaXMgYWxsb3dlZCAodG8gbWF0Y2ggYW55dGhpbmcpIChkZXByZWNhdGVkKQogICAqCiAgICogQHJldHVybiBib29sCiAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZpbGVfbWF0Y2hlc19wYXR0ZXJuKHN0cmluZyAkZmlsZW5hbWUsJHBhdHRlcm4sYm9vbCAkY2FzZV9zZW5zaXRpdmUgPSBUUlVFLGJvb2wgJGFsbG93X2VtcHR5ID0gVFJVRSkKICAgIHsKICAgICAgICBpZiggIWlzX2FycmF5KCRwYXR0ZXJuKSApIHsKICAgICAgICAgICAgaWYoICEkcGF0dGVybiAmJiAkYWxsb3dfZW1wdHkgKSByZXR1cm4gVFJVRTsgLy8gbm8gcGF0dGVybiA9IG1hdGNoIGV2ZXJ5dGhpbmcKICAgICAgICAgICAgJHBhdHRlcm4gPSBhcnJheSgkcGF0dGVybik7CiAgICAgICAgfQogICAgICAgIGZvciggJGkgPSAwLCAkbiA9IGNvdW50KCRwYXR0ZXJuKTsgJGkgPCAkbjsgJGkrKyApIHsKICAgICAgICAgICAgJGYgPSAkZmlsZW5hbWU7CiAgICAgICAgICAgICRwID0gJHBhdHRlcm5bJGldOwogICAgICAgICAgICBpZiggISRwICkgY29udGludWU7CiAgICAgICAgICAgIGlmKCAhJGNhc2Vfc2Vuc2l0aXZlICkgewogICAgICAgICAgICAgICAgJGYgPSBzdHJ0b2xvd2VyKCRmaWxlbmFtZSk7CiAgICAgICAgICAgICAgICAkcCA9IHN0cnRvbG93ZXIoJHBhdHRlcm5bJGldKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiggZm5tYXRjaCgkcCwkZikgKSByZXR1cm4gVFJVRTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQogIAogIC8qKgogICAqIFNpbWlsYXIgdG8gdGhlIFBIUCBnbG9iIG1ldGhvZCB0aGlzIGZ1bmN0aW9uIHdpbGwgc2VhcmNoIGFsbCBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5IChhbmQgYmVsb3cgaXQpIGFuZCByZXR1cm4gYWxsCiAgICogZmlsZXMgdGhhdCBtYXRjaCB0aGUgcGF0dGVybi4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJHBhdGggICAgICAgICAgIFRoZSBmdWxsIHBhdGggdG8gdGhlIGlucHV0IGRpcmVjdG9yeQogICAqIEBwYXJhbSBtaXhlZCAgJHBhdHRlcm4gICAgICAgIEFuIGFycmF5IG9mIHN0cmluZyBwYXR0ZXJucy4gIE9yIGEgc2luZ2xlIHN0cmluZwogICAqIEBwYXJhbSBzdHJpbmcgJG1vZGUgICAgICAgICAgIEVpdGhlciBGSUxFUywgRElSUywgb3IgRlVMTC4gIElmICdGSUxFUycsIG9ubHkgZmlsZXMgbWF0Y2hpbmcgdGhlIHBhdHRlcm4gYXJlCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQuICBJZiAnRElSUycgb25seSBkaXJlY3RvcmllcyBhcmUgcmV0dXJuZWQuICBJRiAnRlVMTCcsIGFueSBmaWxlIG9yCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IG1hdGNoaW5nIHRoZSBwYXR0ZXJuIGlzIHJldHVybmVkLgogICAqIEBwYXJhbSBtaXhlZCAgJGV4Y2x1ZGVwYXR0ZXJuIEFuIGFycmF5IG9mIHN0cmluZyBwYXR0ZXJucyB0byBleGNsdWRlLiAgT3IgYSBzaW1wbGUgc3RyaW5nCiAgICogQHBhcmFtIGludCAgICAkbWF4ZGVwdGggICAgICAgVGhlIG1heGltdW0gZGlyZWN0b3J5IGxldmVsIHRvIHNlYXJjaC4gIERlZmF1bHQgaXMgaW5maW5pdGUuCiAgICogQHBhcmFtIGludCAgICAkZCAgICAgICAgICAgICAgSW50ZXJuYWwKICAgKgogICAqIEByZXR1cm4gYXJyYXl8dm9pZAogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVjdXJzaXZlX2dsb2IoCiAgICBzdHJpbmcgJHBhdGgsICRwYXR0ZXJuLCBzdHJpbmcgJG1vZGUgPSAnRlVMTCcsICRleGNsdWRlcGF0dGVybiA9ICcnLCBpbnQgJG1heGRlcHRoID0gLTEsIGludCAkZCA9IDAKICApCiAgewogICAgaWYoICFlbmRzd2l0aCgkcGF0aCwgJy8nKSApIHsgJHBhdGggLj0gJy8nOyB9CiAgICAKICAgICRkaXJsaXN0ID0gW107CiAgICAKICAgIGlmKAogICAgICAoJ0ZJTEVTJyAhPT0gJG1vZGUpICYmIHNlbGY6OmZpbGVfbWF0Y2hlc19wYXR0ZXJuKGJhc2VuYW1lKCRwYXRoKSwgJHBhdHRlcm4pICYmCiAgICAgICFzZWxmOjpmaWxlX21hdGNoZXNfcGF0dGVybihiYXNlbmFtZSgkcGF0aCksICRleGNsdWRlcGF0dGVybikKICAgICkKICAgIHsgJGRpcmxpc3RbXSA9ICRwYXRoOyB9CiAgICAKICAgIGlmKCFpc19kaXIoJHBhdGgpKSB7IHJldHVybjsgfQogICAgCiAgICBpZigkaGFuZGxlID0gb3BlbmRpcigkcGF0aCkpCiAgICB7CiAgICAgIHdoaWxlKEZBTFNFICE9PSAoJGZpbGUgPSByZWFkZGlyKCRoYW5kbGUpKSkKICAgICAgewogICAgICAgIGlmKCcuJyA9PT0gJGZpbGUgfHwgJy4uJyA9PT0gJGZpbGUpIHsgY29udGludWU7IH0KICAgICAgICAKICAgICAgICAkZnMgPSAkcGF0aCAuICRmaWxlOwogICAgICAgIAogICAgICAgIGlmKCAhQGlzX2RpcigkZnMpICYmICFzdGFydHN3aXRoKCRmaWxlLCAnLicpICYmICFzdGFydHN3aXRoKCRmaWxlLCAnXycpICkKICAgICAgICB7CiAgICAgICAgICBpZigKICAgICAgICAgICAgJ0RJUlMnICE9PSAkbW9kZSAmJiBzZWxmOjpmaWxlX21hdGNoZXNfcGF0dGVybigkZmlsZSwgJHBhdHRlcm4pICYmCiAgICAgICAgICAgICFzZWxmOjpmaWxlX21hdGNoZXNfcGF0dGVybigkZmlsZSwgJGV4Y2x1ZGVwYXR0ZXJuLCBGQUxTRSwgRkFMU0UpCiAgICAgICAgICApIHsgJGRpcmxpc3RbXSA9ICRmczsgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmKAogICAgICAgICAgJGQgPj0gMCAmJiAoJGQgPCAkbWF4ZGVwdGggfHwgJG1heGRlcHRoIDwgMCkgICYmICAhc3RhcnRzd2l0aCgkZmlsZSwgJy4nKSAmJiAhc3RhcnRzd2l0aCgkZmlsZSwgJ18nKSAmJgogICAgICAgICAgIXNlbGY6OmZpbGVfbWF0Y2hlc19wYXR0ZXJuKCRmaWxlLCAkZXhjbHVkZXBhdHRlcm4sIFRSVUUsIEZBTFNFKQogICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAkdG1wID0gc2VsZjo6cmVjdXJzaXZlX2dsb2IoJGZzIC4gJy8nLCAkcGF0dGVybiwgJG1vZGUsICRleGNsdWRlcGF0dGVybiwgJG1heGRlcHRoLCAkZCArIDEpOwogICAgICAgICAgJGRpcmxpc3QgPSBhcnJheV9tZXJnZSgkZGlybGlzdCwgJHRtcCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNsb3NlZGlyKCRoYW5kbGUpOwogICAgfQogICAgCiAgICByZXR1cm4gJGRpcmxpc3Q7CiAgfQp9IC8vIGVuZCBvZiBjbGFzcwoKIwojIEVPRgojCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_encrypt.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgc2ltcGxlIGNsYXNzIGZvciBkb2luZyBzZWN1cmUgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiBvZiBkYXRhLgogKiBUaGlzIGNsYXNzIHJlbGllcyBvbiB0aGUgcGhwIG1jcnlwdCBtb2R1bGUuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBVdGlsaXRpZXMKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxMCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCgovL2RlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOyMgcmV2aXNpdAoKLyoqCiAqIEEgc2ltcGxlIGNsYXNzIGZvciBkb2luZyBzZWN1cmUgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiBvZiBkYXRhLgogKiBUaGlzIGNsYXNzIHJlbGllcyBvbiB0aGUgcGhwIG1jcnlwdCBtb2R1bGUuCiAqLwpmaW5hbCBjbGFzcyB4dF9lbmNyeXB0CnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogRW5jcnlwdCBzb21lIGRhdGEKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGVuY3J5cHRpb24ga2V5LiAgVGhlIGxvbmdlciBhbmQgbW9yZSB1bmlxdWUgdGhpcyBzdHJpbmcgaXMgdGhlIG1vcmUgc2VjdXJlIHRoZSBlbmNyeXB0ZWQgZGF0YSBpcy4gIFRoZSBrZXkgc2hvdWxkIGFsc28gYmUga2VwdCBpbiBhIHNlY3VyZSBsb2NhdGlvbi4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGRhdGEgdG8gZW5jcnlwdC4KICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBlbmNyeXB0ZWQgZGF0YSwgb3IgRkFMU0UKICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBlbmNyeXB0KHN0cmluZyAka2V5LHN0cmluZyAkZGF0YSkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6b3BlbnNzbF9lbmNyeXB0KCAka2V5LCAkZGF0YSApOwogICAgfQoKICAgIC8qKgogICAgICogRW5jcnlwdCBzb21lIGRhdGEgdXNpbmcgb3BlbnNzbCBsaWJyYXJpZXMKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHN0YXRpYyBwcm90ZWN0ZWQgZnVuY3Rpb24gb3BlbnNzbF9lbmNyeXB0KHN0cmluZyAka2V5LHN0cmluZyAkZGF0YSkKICAgIHsKICAgICAgICBpZiggIWZ1bmN0aW9uX2V4aXN0cygnb3BlbnNzbF9lbmNyeXB0JykgKSByZXR1cm4gRkFMU0U7CgogICAgICAgICRjaXBoZXIgPSAnYWVzLTI1Ni1jYmMnOwogICAgICAgICRpdiA9IG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcyhvcGVuc3NsX2NpcGhlcl9pdl9sZW5ndGgoJGNpcGhlcikpOwogICAgICAgICRlbmNyeXB0ZWQgPSBvcGVuc3NsX2VuY3J5cHQoJGRhdGEsICRjaXBoZXIsICRrZXksIDAsICRpdik7CiAgICAgICAgcmV0dXJuICRlbmNyeXB0ZWQuJzo6Jy4kaXY7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZWNyeXB0IHByZXZpb3VzbHkgZW5jcnlwdGVkIGRhdGEKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB1c2VkIGZvciBlbmNyeXB0aW5nIHRoZSBkYXRhLgogICAgICogQHBhcmFtIHN0cmluZyAkZW5jZGF0YSBUaGUgZW5jcnlwdGVkIGRhdGEiCiAgICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgZGVjcnlwdGVkIGRhdGEuICBvciBGQUxTRQogICAgICovCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGRlY3J5cHQoc3RyaW5nICRrZXksc3RyaW5nICRlbmNkYXRhKQogICAgewogICAgICAgIC8vIHVzZSBvcGVuc3NsIGFuZCBzZWUgaWYgd2UgZ2V0IGFueSBkYXRhCiAgICAgICAgLy8gaWYgb3BlbnNzbCBmYWlscywgdHJ5IG1jcnlwdC4KICAgICAgICByZXR1cm4gc2VsZjo6b3BlbnNzbF9kZWNyeXB0KCAka2V5LCAkZW5jZGF0YSApOwogICAgfQoKICAgIC8qKgogICAgICogRGVjcnlwdCBzb21lIGRhdGEgdXNpbmcgb3BlbnNzbAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIHN0cmluZyAkZW5jZGF0YQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgc3RhdGljIHByb3RlY3RlZCBmdW5jdGlvbiBvcGVuc3NsX2RlY3J5cHQoc3RyaW5nICRrZXksc3RyaW5nICRlbmNkYXRhKQogICAgewogICAgICAgIGxpc3QoICRlbmMsICRpdiApID0gZXhwbG9kZSgnOjonLCAkZW5jZGF0YSApOwogICAgICAgIHJldHVybiBvcGVuc3NsX2RlY3J5cHQoJGVuYywgJ2Flcy0yNTYtY2JjJywgJGtleSwgMCwgJGl2KTsKICAgIH0KCn0gLy8gZW5kIG9mIGNsYXNzCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_exception.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB4dF9leGNlcHRpb24gYmFzZSBjbGFzcy4KICogQGNhdGVnb3J5IEV4Y2VwdGlvbnMKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxMCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCgovKioKICogQSBzaW1wbGUgY2xhc3MgbGlicmFyeSB0byBleHRlbmQgdGhlIHN0YW5kYXJkIGV4Y2VwdGlvbiBjbGFzcwogKiBhbmQgcHJvdmlkZXMgb21lIGNtc21zIHJlbGF0ZWQgbGFuZyBzdHJpbmcgbG9va3Vwcy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IEV4Y2VwdGlvbnMKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxMCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCmNsYXNzIHh0X2V4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24KewogICAgLyoqCiAgICAgKiBUYWtlcyBhbiBleGNlcHRpb24gbWVzc2FnZSBvZiB0aGUgZm9ybSBbbW9kdWxlXSUla2V5WyUlc3VmZml4XQogICAgICogYW5kIGZvcm1hdCBhIGxhbmd1YWdlIHN0cmluZwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0ciBUaGUgZXhjZXB0aW9uIG1lc3NhZ2UKICAgICAqIEBwYXJhbSBpbnQgJGNvZGUgVGhlIGV4Y2VwdGlvbiBjb2RlCiAgICAgKiBAcGFyYW0gXEV4Y2VwdGlvbiAkcGFyZW50IGEgcGFyZW50IGV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHN0ciA9ICcnLCRjb2RlID0gMCxcRXhjZXB0aW9uICRwYXJlbnQgPSBudWxsKQogICAgewogICAgICAgIGlmKCBzdHJwb3MoJHN0ciwnJSUnKSApIHsKICAgICAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnJSUnLCRzdHIsMyk7CiAgICAgICAgICAgIGlmKCBjb3VudCgkcGFydHMpID4gMSApIHsKICAgICAgICAgICAgICAgICRtb2R1bGUgPSB0cmltKCRwYXJ0c1swXSk7CiAgICAgICAgICAgICAgICAka2V5ID0gdHJpbSgkcGFydHNbMV0pOwogICAgICAgICAgICAgICAgaWYoICEkbW9kdWxlICkgewogICAgICAgICAgICAgICAgICAgICRtb2R1bGUgPSB4dF90bXBkYXRhOjpnZXQoJ21vZHVsZScpOwogICAgICAgICAgICAgICAgICAgIGlmKCAhJG1vZHVsZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOwogICAgICAgICAgICAgICAgICAgICAgICAkb2JqID0gJHNtYXJ0eS0+Z2V0X3RlbXBsYXRlX3ZhcnMoJ21vZCcpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiggaXNfb2JqZWN0KCRvYmopICkgJG1vZHVsZSA9ICRvYmotPkdldE5hbWUoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYoICRtb2R1bGUgJiYgJGtleSApIHsKICAgICAgICAgICAgICAgICAgICAkbW9kID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgkbW9kdWxlKTsKICAgICAgICAgICAgICAgICAgICBpZiggJG1vZCApICRzdHIgPSAkbW9kLT5MYW5nKCRrZXkpOwogICAgICAgICAgICAgICAgICAgIGlmKCBpc3NldCgkcGFydHNbMl0pICYmICRwYXJ0c1syXSApICRzdHIgLj0gJyAnLiRwYXJ0c1syXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkc3RyLCRjb2RlLCRwYXJlbnQpOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydCB0aGlzIGV4Y2VwdGlvbiB0byBhIHN0cmluZy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiBnZXRfY2xhc3MoJHRoaXMpIC4gIiAneyR0aGlzLT5nZXRNZXNzYWdlKCl9JyBpbiB7JHRoaXMtPmdldEZpbGUoKX06eyR0aGlzLT5nZXRMaW5lKCl9XG4iCiAgICAgICAgICAgIC4gInskdGhpcy0+Z2V0VHJhY2VBc1N0cmluZygpfSI7CiAgICB9Cn0gLy8gZW5kIG9mIGludGVyZmFjZQoKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_fileupload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgc2ltcGxlIGNsYXNzIHRvIGFzc2lzdCB3aXRoIGhhbmRsaW5nIFBIUCBmaWxlIHVwbG9hZHMKICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IFV0aWxpdGllcwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCi8qKgogKiBBIHNpbXBsZSBjbGFzcyB0byBhc3Npc3Qgd2l0aCBoYW5kbGluZyBQSFAgZmlsZSB1cGxvYWRzCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqLwpjbGFzcyB4dF9maWxldXBsb2FkCnsKICAjIGtlcHQgZm9yIGNvbnNpc3RlbmN5IGJ1dCB3aWxsIGJlIHJlbW92ZWQgYXMgc29vbiBhcyByZXBsYWNlZCBieSBDTVNNU0V4dCBvd24gaGFuZGxpbmcKICBjb25zdCBOT0ZJTEUgICAgICAgICAgICAgICA9ICdDR0ZJTEVVUExPQURfTk9GSUxFJzsKICBjb25zdCBGSUxFU0laRSAgICAgICAgICAgICA9ICdDR0ZJTEVVUExPQURfRklMRVNJWkUnOwogIGNvbnN0IEZJTEVUWVBFICAgICAgICAgICAgID0gJ0NHRklMRVVQTE9BRF9GSUxFVFlQRSc7CiAgY29uc3QgRklMRUVYSVNUUyAgICAgICAgICAgPSAnQ0dGSUxFVVBMT0FEX0ZJTEVFWElTVFMnOwogIGNvbnN0IEJBRERFU1RESVIgICAgICAgICAgID0gJ0NHRklMRVVQTE9BRF9CQURERVNURElSJzsKICBjb25zdCBCQURQRVJNUyAgICAgICAgICAgICA9ICdDR0ZJTEVVUExPQURfQkFEUEVSTVMnOwogIGNvbnN0IE1PVkVGQUlMRUQgICAgICAgICAgID0gJ0NHRklMRVVQTE9BRF9NT1ZFRkFJTEVEJzsKICBjb25zdCBVUExPQURGQUlMRUQgICAgICAgICA9ICdDR0ZJTEVVUExPQURfVVBMT0FERkFJTEVEJzsKICBjb25zdCBQUkVQUk9DRVNTSU5HX0ZBSUxFRCA9ICdDR0ZJTEVVUExPQURfUFJFUFJPQ0VTU0lOR19GQUlMRUQnOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfbWF4ZmlsZXNpemU7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9lcnJubyA9IGZhbHNlOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfZXJybXNnID0gbnVsbDsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX3ByZWZpeCA9IG51bGw7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9kZXN0ZGlyOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfZmlsZXR5cGVzOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfYWxsb3dfb3ZlcndyaXRlOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfZGVzdG5hbWU7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9maWxlczsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX3ByZXByb2Nlc3NvcjsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX29yaWduYW1lOwoKCiAgICAvKioKICAgICAqIENvbnN0cnVjdG9yCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcHJlZml4IEEgY29tbW9uIGFycmF5IGtleSBwcmVmaXggZm9yIGFsbCBmaWxlcyB0byBiZSBoYW5kbGVkIGJ5IHRoaXMgb2JqZWN0LgogICAgICogQHBhcmFtIHN0cmluZyAkZGVzdGRpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJHByZWZpeCA9ICcnLHN0cmluZyAkZGVzdGRpciA9ICcnKQogICAgewogICAgICAgICR0aGlzLT5fZXJybm8gPSBmYWxzZTsKICAgICAgICAkdGhpcy0+X2FsbG93X292ZXJ3cml0ZSA9IGZhbHNlOwogICAgICAgICR0aGlzLT5fcHJlZml4ID0gJHByZWZpeDsKICAgICAgICAkdGhpcy0+X2ZpbGVzID0gJF9GSUxFUzsKICAgICAgICAkdGhpcy0+X3ByZXByb2Nlc3NvciA9IG51bGw7CgogICAgICAgICRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsKICAgICAgICAkdGhpcy0+X21heGZpbGVzaXplID0gJGNvbmZpZ1snbWF4X3VwbG9hZF9zaXplJ107CgogICAgICAgIGlmKCBlbXB0eSgkZGVzdGRpcikgKSAkZGVzdGRpciA9ICRjb25maWdbJ3VwbG9hZHNfcGF0aCddOwogICAgICAgICR0aGlzLT5fZGVzdGRpciA9ICRkZXN0ZGlyOwogICAgfQoKCiAgICAvKioKICAgICAqIFNldCBhIHByZXByb2Nlc3NvciBvYmplY3QKICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGZ1bmMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF9wcmVwcm9jZXNzb3IoY2FsbGFibGUgJGZ1bmMpCiAgICB7CiAgICAgICAgJHRoaXMtPl9wcmVwcm9jZXNzb3IgPSAkZnVuYzsKICAgIH0KCgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgYWNjZXB0ZWQgZmlsZSBleHRlbnNpb25zCiAgICAgKgogICAgICogQHByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9hY2NlcHRlZF9maWxldHlwZXMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2ZpbGV0eXBlczsKICAgIH0KCgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGxpc3Qgb2YgYWNjZXB0ZWQgZmlsZSBleHRlbnNpb25zCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRmaWxldHlwZXMgIEFjY2VwdHMgYW4gYXJyYXkgb2Ygc3RyaW5ncywgb3IgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBzdHJpbmdzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2FjY2VwdGVkX2ZpbGV0eXBlcygkZmlsZXR5cGVzKQogICAgewogICAgICAgIGlmKCBpc19hcnJheSggJGZpbGV0eXBlcyApICkgewogICAgICAgICAgICAkdGhpcy0+X2ZpbGV0eXBlcyA9ICRmaWxldHlwZXM7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiggZW1wdHkoJGZpbGV0eXBlcykgKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2ZpbGV0eXBlcyA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYoIGlzX2FycmF5KCRmaWxldHlwZXMpICkgewogICAgICAgICAgICAgICAgJHRoaXMtPl9maWxldHlwZXMgPSAkZmlsZXR5cGVzOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPl9maWxldHlwZXMgPSBleHBsb2RlKCcsJywkZmlsZXR5cGVzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICB9CgoKICAgIC8qKgogICAgICogVGVzdCBpZiB0aGUgc3BlY2lmaWVkIGZpbGVuYW1lIGlzIGFtb25nIHRoZSBhY2NlcHRlZCBmaWxldHlwZXMKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc19hY2NlcHRlZF9maWxlKCRmaWxlbmFtZSkKICAgIHsKICAgICAgICAkZmlsZXR5cGVzID0gJHRoaXMtPmdldF9hY2NlcHRlZF9maWxldHlwZXMoKTsKICAgICAgICBpZiggaXNfYXJyYXkoJGZpbGV0eXBlcykgJiYgY291bnQoJGZpbGV0eXBlcykgKSB7CiAgICAgICAgICAgICRleHRlbnNpb24gPSBzdHJyY2hyKCRmaWxlbmFtZSwiLiIpOwogICAgICAgICAgICAkZm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgZm9yZWFjaCggJGZpbGV0eXBlcyBhcyAkdHlwZSApIHsKICAgICAgICAgICAgICAgIGlmKCAiLiIuc3RydG9sb3dlcih0cmltKCR0eXBlKSkgPT0gc3RydG9sb3dlcigkZXh0ZW5zaW9uKSApIHsKICAgICAgICAgICAgICAgICAgICAkZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKCBjb3VudCgkZmlsZXR5cGVzKSAmJiAkZm91bmQgPT09IGZhbHNlICkgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCgogICAgLyoqCiAgICAgKiBTZXQgdGhlIG1heGltdW0gZmlsZSBzaXplIGZvciB1cGxvYWRlZCBmaWxlcyAoaW4ga2lsb2J5dGVzKS4KICAgICAqIFRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBocC5pbmkgc2V0dGluZ3MuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkc2l6ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X21heF9maWxlc2l6ZShpbnQgJHNpemUpCiAgICB7CiAgICAgICAgJHRoaXMtPl9tYXhmaWxlc2l6ZSA9IG1heCgxLChpbnQpICRzaXplKSAqIDEwMjQ7CiAgICB9CgoKICAgIC8qKgogICAgICogU2V0IGEgZmxhZyB0aGF0IGluZGljYXRlcyB3ZXRoZXIgb3ZlcndyaXRpbmcgZXhpc3RpbmcgZmlsZXMgaXMgcGVybWl0dGVkLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICRmbGFnCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfYWxsb3dfb3ZlcndyaXRlKCRmbGFnID0gdHJ1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+X2FsbG93X292ZXJ3cml0ZSA9IChib29sKSAkZmxhZzsKICAgIH0KCgogICAgLyoqCiAgICAgKiBHZXQgYW55IGVycm9yIGNvZGUgcmV0dXJuZWQgYWZ0ZXIgaGFuZGxpbmcgdGhlIHVwbG9hZC4KICAgICAqIFNlZSB0aGUgZXJyb3IgY29kZXMgY29udGFpbmVkIGluIHRoaXMgc3RyaW5nLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZXJyb3IoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2Vycm5vOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIGEgaHVtYW4gcmVhZGFibGUgbWVzc2FnZSBwZXJ0YWluaW5nIHRvIGFueSBlcnJvciBjb2RlIHJldHVybmVkIGFmdGVyIGhhbmRsaW5nIHRoZQogICAgICogdXBsb2FkLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZXJyb3Jtc2coKQogICAgewogICAgICAgIGlmKCAkdGhpcy0+X2Vycm1zZyApIHJldHVybiAkdGhpcy0+X2Vycm1zZzsKICAgICAgICBpZiggJHRoaXMtPl9lcnJubyApIHsKICAgICAgICAgICAgJG1vZCA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoTU9EX1hUTU9EVUxFKTsKICAgICAgICAgICAgcmV0dXJuICRtb2QtPkxhbmcoJHRoaXMtPl9lcnJubyk7CiAgICAgICAgfQogICAgfQoKCiAgICAvKioKICAgICAqIFJlc2V0IGFueSBlcnJvcnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlc2V0X2Vycm9ycygpCiAgICB7CiAgICAgICAgJHRoaXMtPl9lcnJubyA9IG51bGw7CiAgICAgICAgJHRoaXMtPl9lcnJtc2cgPSBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBjdXJyZW50IGVycm9yIGNvZGUKICAgICAqIFNlZSBlcnJvciBjb2RlcyBkZWZpbmVkIGFib3ZlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0X2Vycm5vKCR2YWwpCiAgICB7CiAgICAgICAgJHRoaXMtPl9lcnJubyA9ICR2YWw7CiAgICB9CgoKICAgIC8qKgogICAgICogU2V0IGEgaHVtYW4gcmVhZGFibGUgZXJyb3IgbWVzc2FnZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWwKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHNldF9lcnJvcihzdHJpbmcgJHZhbCkKICAgIHsKICAgICAgICAkdGhpcy0+X2Vycm1zZyA9ICR2YWw7CiAgICB9CgoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZm9yIHVwbG9hZGVkIGZpbGVzCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9kZXN0X2RpcigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fZGVzdGRpcjsKICAgIH0KCgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBmb3IgdXBsb2FkZWQgZmlsZXMKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkaXIgVGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2Rlc3RfZGlyKHN0cmluZyAkZGlyKQogICAgewogICAgICAgICR0aGlzLT5fZGVzdGRpciA9ICRkaXI7CiAgICB9CgoKICAgIC8qKgogICAgICogR2V0IHRoZSBvcHRpb25hbCBkZXN0aW5hdGlvbiBmaWxlbmFtZS4gIElmIGFueSBoYXMgYmVlbiBzcGVjaWZpZWQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9kZXN0X2ZpbGVuYW1lKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9kZXN0bmFtZTsKICAgIH0KCgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG9yaWdpbmFsIGZpbGVuYW1lLgogICAgICogVGhpcyBtZXRob2QgaXMgb25seSB1c2VmdWwgYWZ0ZXIgaGFuZGxlX3VwbG9hZCBoYXMgYmVlbiBjYWxsZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfb3JpZ19maWxlbmFtZSgpCiAgICB7CiAgICAgICAgLy8gb25seSB1c2VmdWwgYWZ0ZXIgaGFuZGxlIHVwbG9hZAogICAgICAgIHJldHVybiAkdGhpcy0+X29yaWduYW1lOwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgYSBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkIHdpdGggdGhlIHNwZWNpZmllZCBmaWVsZCBuYW1lLgogICAgICogSWYgc3BlY2lmaWVkIGluIHRoZSBjb25zdHJ1Y3RvciBhIHByZWZpeCB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGlzIG5hbWUgZm9yIGNvbXBhcmlzb24uCiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIG5vdCBzZXQgYW55IG9mIHRoZSBlcnJvciBtZW1iZXJzIGluIHRoZSBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgZmllbGQgbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkc3ViZmllbGQgQXNzdW1lIHRoYXQgdGhlIHByZWZpeCtmaWVsZCBuYW1lIHJlcHJlc2VudCBhbiBhcnJheQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja191cGxvYWRfYXR0ZW1wdGVkKHN0cmluZyAkbmFtZSxzdHJpbmcgJHN1YmZpZWxkID0gbnVsbCkKICAgIHsKICAgICAgICAkZmxkbmFtZSA9ICR0aGlzLT5fcHJlZml4LiRuYW1lOwoKICAgICAgICBpZiggIWlzc2V0KCR0aGlzLT5fZmlsZXMpIHx8ICFpc3NldCgkdGhpcy0+X2ZpbGVzWyRmbGRuYW1lXSkgKSByZXR1cm4gRkFMU0U7CgogICAgICAgIGlmKCAhZW1wdHkoJHN1YmZpZWxkKSApIHsKICAgICAgICAgICAgaWYoICFpc3NldCgkdGhpcy0+X2ZpbGVzWyRmbGRuYW1lXVskc3ViZmllbGRdKSB8fCAhaXNzZXQoJHRoaXMtPl9maWxlc1skZmxkbmFtZV1bJHN1YmZpZWxkXVsnbmFtZSddKSB8fAogICAgICAgICAgICAgICAgZW1wdHkoJHRoaXMtPl9maWxlc1skZmxkbmFtZV1bJHN1YmZpZWxkXVsnbmFtZSddKSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYoICFpc19hcnJheSgkdGhpcy0+X2ZpbGVzWyRmbGRuYW1lXSkgfHwgIWlzc2V0KCR0aGlzLT5fZmlsZXNbJGZsZG5hbWVdWyduYW1lJ10pIHx8CiAgICAgICAgICAgICAgICBlbXB0eSgkdGhpcy0+X2ZpbGVzWyRmbGRuYW1lXVsnbmFtZSddKSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gVFJVRTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhbiBhZGp1c3RlZCB1cGxvYWQgZmlsZW5hbWUsIHVzaW5nIHRoZSBkZXN0bmFtZSBpZiBwcm92aWRlZC4KICAgICAqIE5vdGU6IGV4dGVuc2lvbiB3aWxsIGJlIHByZXNlcnZlZCBpbiBvdXRwdXQgZmlsZW5hbWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaW5wdXRfbmFtZSBUaGUgaW5wdXQgZmlsZW5hbWUKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRfbmV3X2ZpbGVuYW1lKHN0cmluZyAkaW5wdXRfbmFtZSkKICAgIHsKICAgICAgICAkbmV3bmFtZSA9ICRpbnB1dF9uYW1lOwogICAgICAgIGlmKCAhZW1wdHkoJHRoaXMtPl9kZXN0bmFtZSkgKSB7CiAgICAgICAgICAgICRkZXN0ZmlsZW5hbWUgPSAkdGhpcy0+X2Rlc3RuYW1lOwoKICAgICAgICAgICAgLy8gcHV0IHRoZSBleHRlbnNpb25vZiB0aGUgaW5wdXQgZmlsZSBvbiB0aGUgbmV3IGRlc3RpbmF0aW9uIG5hbWUuCiAgICAgICAgICAgIC8vIHRoaXMgcHJldmVudHMgYSAuanBnIGZyb20gYmVpbmcgbmFtZWQgYSAuZ2lmIG9yIHNvbWV0aGluZy4KICAgICAgICAgICAgJGRlc3RmaWxlbmFtZSA9IGJhc2VuYW1lKCRkZXN0ZmlsZW5hbWUpOwogICAgICAgICAgICAkZmlsZSA9ICR0aGlzLT5nZXRfZmlsZV9yZWNvcmQoICRpbnB1dF9uYW1lICk7CiAgICAgICAgICAgICRleHRlbnNpb24gPSBzdHJyY2hyKCRmaWxlWyduYW1lJ10sIi4iKTsKICAgICAgICAgICAgJHRtcCA9IHN1YnN0cigkZGVzdGZpbGVuYW1lLDAsc3RybGVuKCRmaWxlWyduYW1lJ10pLXN0cmxlbigkZXh0ZW5zaW9uKSk7CiAgICAgICAgICAgICRuZXduYW1lID0gJHRtcC4kZXh0ZW5zaW9uOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG5ld25hbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhIGZpZWxkIG5hbWUsIGFuZCBhIHN1YmZpZWxkLi4gZ2V0IHRoZSBhZ2dyZWdhdGVkIHJlY29yZCBmcm9tICRfRklMRVMgc28gdGhhdAogICAgICogdGhlIHVwbG9hZCBjYW4gYmUgcHJvY2Vzc2VkLgogICAgICoKICAgICAqIEluIHRoZSBldmVudCBvZiBhIHByb2JsZW0gdGhpcyBtZXRob2Qgc2V0cyB0aGUgZXJybm8gdmFyaWFibGUgZm9yIGVycm9yIGhhbmRsaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpZWxkX25hbWUgVGhlIGlucHV0IGZpZWxkIG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN1YmZpZWxkIFRoZSBuYW1lIG9mIGFueSBzdWJmaWVsZC4KICAgICAqIEByZXR1cm4gYXJyYXl8bnVsbAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0X2ZpbGVfcmVjb3JkKHN0cmluZyAkZmllbGRfbmFtZSxzdHJpbmcgJHN1YmZpZWxkID0gbnVsbCkKICAgIHsKICAgICAgICAvLyBub3RlLCBzZXRzIGVycm5vCgogICAgICAgICRmbGRuYW1lID0gJHRoaXMtPl9wcmVmaXguJGZpZWxkX25hbWU7CiAgICAgICAgaWYoICFpc3NldCgkdGhpcy0+X2ZpbGVzKSB8fCAhaXNzZXQoJHRoaXMtPl9maWxlc1skZmxkbmFtZV0pICkgewogICAgICAgICAgICAkdGhpcy0+X2Vycm5vID0gc2VsZjo6Tk9GSUxFOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkZmlsZSA9IG51bGw7CiAgICAgICAgaWYoIGVtcHR5KCRzdWJmaWVsZCkgKSB7CiAgICAgICAgICAgIGlmKCAhaXNfYXJyYXkoJHRoaXMtPl9maWxlc1skZmxkbmFtZV0pIHx8ICFpc3NldCgkdGhpcy0+X2ZpbGVzWyRmbGRuYW1lXVsnbmFtZSddKSB8fAogICAgICAgICAgICAgICAgZW1wdHkoJHRoaXMtPl9maWxlc1skZmxkbmFtZV1bJ25hbWUnXSkgKSB7CiAgICAgICAgICAgICAgICAvLyB0aGVyZSdzIG5vdGhpbmcgdG8gaGFuZGxlCiAgICAgICAgICAgICAgICAkdGhpcy0+X2Vycm5vID0gc2VsZjo6Tk9GSUxFOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJGZpbGUgPSAkdGhpcy0+X2ZpbGVzWyRmbGRuYW1lXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgLy8gdGhlIGZpbGVzIGFyZSBhbiBhcnJheSwgc28gZWFjaCBlbGVtZW50IGlzIGFuIGFycmF5CiAgICAgICAgICAgIC8vIHdlIGdvdHRhIGJ1aWxkICRmaWxlIGZyb20gdGhlICRfRklMRVMgb25lIHN0ZXAgYXQgYSB0aW1lCiAgICAgICAgICAgICR0bXAgPSBhcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoKCAkdGhpcy0+X2ZpbGVzWyRmbGRuYW1lXSBhcyAka2V5ID0+ICR2YWx1ZSApIHsKICAgICAgICAgICAgICAgIGlmKCBpc3NldCgkdmFsdWVbJHN1YmZpZWxkXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgJHRtcFska2V5XSA9ICR2YWx1ZVskc3ViZmllbGRdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICRmaWxlID0gJHRtcDsKCiAgICAgICAgICAgIGlmKCAhaXNfYXJyYXkoJGZpbGUpIHx8CiAgICAgICAgICAgICAgICAhaXNzZXQoJGZpbGVbJ25hbWUnXSkgfHwKICAgICAgICAgICAgICAgIGVtcHR5KCRmaWxlWyduYW1lJ10pICkgewogICAgICAgICAgICAgICAgJHRoaXMtPl9lcnJubyA9IHNlbGY6Ok5PRklMRTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJGZpbGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG5hbWUgb2YgYW4gdXBsb2FkZWQgZmlsZSBiZWZvcmUgcHJvY2Vzc2luZwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpZWxkX25hbWUgVGhlIGlucHV0IGZpZWxkIG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN1YmZpZWxkIEFuIG9wdGlvbmFsIHN1YmZpZWxkIG5hbWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF91cGxvYWRlZF9maWxlbmFtZShzdHJpbmcgJGZpZWxkX25hbWUsIHN0cmluZyAkc3ViZmllbGQgPSBudWxsKQogICAgewogICAgICAgICRmaWxlID0gJHRoaXMtPmdldF9maWxlX3JlY29yZCggJGZpZWxkX25hbWUsICRzdWJmaWVsZCApOwogICAgICAgIGlmKCAhJGZpbGUgKSB7IHJldHVybiAnJzsgfQogICAgICAgIAogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0X25ld19maWxlbmFtZSgkZmlsZVsnbmFtZSddKTsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrIGlmIGEgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZCB0byB0aGUgc3BlY2lmaWVkIG5hbWUsIGFuZCBpZiBpdCBpcyB2YWxpZC4KICAgICAqIElmIHNwZWNpZmllZCBpbiB0aGUgY29uc3RydWN0b3IgYSBwcmVmaXggd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhpcyBuYW1lIGZvciBjb21wYXJpc29uLgogICAgICogVGhpcyBtZXRob2Qgd2lsbCBzZXQgaW50ZXJuYWwgZXJyb3Igc3RyaW5ncyBhbmQgbnVtYmVycyBvbiBmYWlsdXJlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIHVwbG9hZCBrZXkgbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkc3ViZmllbGQgQXNzdW1lIHRoYXQgdGhlIHByZWZpeCtmaWVsZCBuYW1lIHJlcHJlc2VudCBhbiBhcnJheQogICAgICogQHBhcmFtIGJvb2wgJGNoZWNrZGlyIFRlc3QgaWYgdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBleGlzdHMsIGFuZCBpcyB3cml0YWJsZS4KICAgICAqIEByZXR1cm4gYm9vbCBUcnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2tfdXBsb2FkKHN0cmluZyAkbmFtZSwkc3ViZmllbGQgPSBudWxsLGJvb2wgJGNoZWNrZGlyID0gVFJVRSkKICAgIHsKICAgICAgICAkZmlsZSA9ICR0aGlzLT5nZXRfZmlsZV9yZWNvcmQoICRuYW1lLCAkc3ViZmllbGQgKTsKICAgICAgICBpZiggISRmaWxlICkgcmV0dXJuIGZhbHNlOwoKICAgICAgICAvLyBOb3JtYWxpemUgdGhlIGZpbGUgdmFyaWFibGVzCiAgICAgICAgaWYgKCFpc3NldCAoJGZpbGVbJ3R5cGUnXSkpICRmaWxlWyd0eXBlJ10gPSAnJzsKICAgICAgICBpZiAoIWlzc2V0ICgkZmlsZVsnc2l6ZSddKSkgJGZpbGVbJ3NpemUnXSA9ICcnOwogICAgICAgIGlmICghaXNzZXQgKCRmaWxlWyd0bXBfbmFtZSddKSkgJGZpbGVbJ3RtcF9uYW1lJ10gPSAnJzsKICAgICAgICAkZmlsZVsnbmFtZSddID0KICAgICAgICAgICAgcHJlZ19yZXBsYWNlKCcvW15hLXpBLVowLTlcLlwkXCVcJ1xgXC1cQFx7XH1cflwhXCNcKFwpXCZcX1xeXS8nLCAnJywKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9yZXBsYWNlKGFycmF5KCcgJywgJyUyMCcpLGFycmF5ICgnXycsICdfJyksJGZpbGVbJ25hbWUnXSkpOwogICAgICAgICRleHRlbnNpb24gPSBzdHJyY2hyKCRmaWxlWyduYW1lJ10sIi4iKTsKCiAgICAgICAgLy8gQ2hlY2sgdGhlIGZpbGUgc2l6ZQogICAgICAgIGlmKCAoJHRoaXMtPl9tYXhmaWxlc2l6ZSA+IDApICYmCiAgICAgICAgICAgICgkZmlsZVsnc2l6ZSddID4gJHRoaXMtPl9tYXhmaWxlc2l6ZSkgKSB7CiAgICAgICAgICAgICR0aGlzLT5fZXJybm8gPSBzZWxmOjpGSUxFU0laRTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgdGhlIGZpbGUgZXh0ZW5zaW9uCiAgICAgICAgaWYoICEkdGhpcy0+aXNfYWNjZXB0ZWRfZmlsZSgkZmlsZVsnbmFtZSddKSApIHsKICAgICAgICAgICAgJHRoaXMtPl9lcnJubyA9IHNlbGY6OkZJTEVUWVBFOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiggISR0aGlzLT5fZGVzdGRpciB8fCAhJGNoZWNrZGlyICkgcmV0dXJuIHRydWU7CgogICAgICAgIC8vIGNoZWNrIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkKICAgICAgICBpZiggIWlzX2RpcigkdGhpcy0+X2Rlc3RkaXIpICkgewogICAgICAgICAgICAkdGhpcy0+X2Vycm5vID0gc2VsZjo6QkFEREVTVERJUjsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiggIWlzX3dyaXRhYmxlKCR0aGlzLT5fZGVzdGRpcikgKSB7CiAgICAgICAgICAgICR0aGlzLT5fZXJybm8gPSBzZWxmOjpCQURQRVJNUzsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJG5ld25hbWUgPSAkdGhpcy0+Z2V0X25ld19maWxlbmFtZSggJG5hbWUgKTsKICAgICAgICAkZGVzdG5hbWUgPSBjbXNfam9pbl9wYXRoKCR0aGlzLT5fZGVzdGRpciwkbmV3bmFtZSk7CiAgICAgICAgaWYoIGlzX2ZpbGUoJGRlc3RuYW1lKSApIHsKICAgICAgICAgICAgaWYoICEkdGhpcy0+X2FsbG93X292ZXJ3cml0ZSApIHsKICAgICAgICAgICAgICAgICR0aGlzLT5fZXJybm8gPSBzZWxmOjpGSUxFRVhJU1RTOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYoICFpc193cml0YWJsZSgkZGVzdG5hbWUpICkgewogICAgICAgICAgICAgICAgJHRoaXMtPl9lcnJubyA9IHNlbGY6OkJBRFBFUk1TOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCgogICAgLyoqCiAgICAgKiBIYW5kbGUgcHJlcHJvY2Vzc2luZyBhbiB1cGxvYWRlZCBmaWxlLCB0ZXN0IGZvciBlcnJvcnMgYW5kIG1vdmUgdGhlIGZpbGUKICAgICAqIHRvIGl0cyBkZXN0aW5hdGlvbiBsb2NhdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSB1cGxvYWQga2V5IG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlc3RmaWxlbmFtZSBBbiBvcHRpb25hbCBkZXN0aW5hdGlvbiBmaWxlbmFtZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHN1YmZpZWxkIEFzc3VtZSB0aGF0IHRoZSBwcmVmaXgrZmllbGQgbmFtZSByZXByZXNlbnQgYW4gYXJyYXkKICAgICAqIEByZXR1cm4gYm9vbCBUcnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFuZGxlX3VwbG9hZChzdHJpbmcgJG5hbWUsc3RyaW5nICRkZXN0ZmlsZW5hbWU9Jycsc3RyaW5nICRzdWJmaWVsZCA9IG51bGwpCiAgICB7CiAgICAgICAgJGZsZG5hbWUgPSAkdGhpcy0+X3ByZWZpeC4kbmFtZTsKICAgICAgICBpZiggIWlzc2V0KCR0aGlzLT5fZmlsZXMpIHx8ICFpc3NldCgkdGhpcy0+X2ZpbGVzWyRmbGRuYW1lXSkgKSB7CiAgICAgICAgICAgICR0aGlzLT5fZXJybm8gPSBzZWxmOjpOT0ZJTEU7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgICRmaWxlID0gJyc7CiAgICAgICAgaWYoIHN0cmxlbigkc3ViZmllbGQpID09IDAgKSB7CiAgICAgICAgICAgIGlmKCAhaXNfYXJyYXkoJHRoaXMtPl9maWxlc1skZmxkbmFtZV0pIHx8ICFpc3NldCgkdGhpcy0+X2ZpbGVzWyRmbGRuYW1lXVsnbmFtZSddKSB8fAogICAgICAgICAgICAgICAgZW1wdHkoJHRoaXMtPl9maWxlc1skZmxkbmFtZV1bJ25hbWUnXSkgKSB7CiAgICAgICAgICAgICAgICAvLyB0aGVyZSdzIG5vdGhpbmcgdG8gaGFuZGxlCiAgICAgICAgICAgICAgICAkdGhpcy0+X2Vycm5vID0gc2VsZjo6Tk9GSUxFOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJGZpbGUgPSAkdGhpcy0+X2ZpbGVzWyRmbGRuYW1lXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgLy8gdGhlIGZpbGVzIGFyZSBhbiBhcnJheSwgc28gZWFjaCBlbGVtZW50IGlzIGFuIGFycmF5CiAgICAgICAgICAgIC8vIHdlIGdvdHRhIGJ1aWxkICRmaWxlIGZyb20gdGhlICRfRklMRVMgb25lIHN0ZXAgYXQgYSB0aW1lCiAgICAgICAgICAgICR0bXAgPSBhcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoKCAkdGhpcy0+X2ZpbGVzWyRmbGRuYW1lXSBhcyAka2V5ID0+ICR2YWx1ZSApIHsKICAgICAgICAgICAgICAgIGlmKCBpc3NldCgkdmFsdWVbJHN1YmZpZWxkXSkgKSAkdG1wWyRrZXldID0gJHZhbHVlWyRzdWJmaWVsZF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGZpbGUgPSAkdG1wOwoKICAgICAgICAgICAgaWYoICFpc19hcnJheSgkZmlsZSkgfHwgIWlzc2V0KCRmaWxlWyduYW1lJ10pIHx8IGVtcHR5KCRmaWxlWyduYW1lJ10pICkgewogICAgICAgICAgICAgICAgJHRoaXMtPl9lcnJubyA9IHNlbGY6Ok5PRklMRTsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gTm9ybWFsaXplIHRoZSBmaWxlIHZhcmlhYmxlcwogICAgICAgIGlmICghaXNzZXQgKCRmaWxlWyd0eXBlJ10pKSAkZmlsZVsndHlwZSddID0gJyc7CiAgICAgICAgaWYgKCFpc3NldCAoJGZpbGVbJ3NpemUnXSkpICRmaWxlWydzaXplJ10gPSAnJzsKICAgICAgICBpZiAoIWlzc2V0ICgkZmlsZVsndG1wX25hbWUnXSkpICRmaWxlWyd0bXBfbmFtZSddID0gJyc7CiAgICAgICAgJGZpbGVbJ25hbWUnXSA9CiAgICAgICAgICAgIHByZWdfcmVwbGFjZSgnL1teYS16QS1aMC05XC5cJFwlXCdcYFwtXEBce1x9XH5cIVwjXChcKVwmXF9cXl0vJywgJycsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfcmVwbGFjZShhcnJheSgnICcsICclMjAnKSxhcnJheSAoJ18nLCAnXycpLCRmaWxlWyduYW1lJ10pKTsKICAgICAgICAkZXh0ZW5zaW9uID0gc3RycmNocigkZmlsZVsnbmFtZSddLCIuIik7CgogICAgICAgIC8vIENoZWNrIHRoZSBmaWxlIHNpemUKICAgICAgICBpZiggKCgkdGhpcy0+X21heGZpbGVzaXplID4gMCkgJiYgJGZpbGVbJ3NpemUnXSA+ICR0aGlzLT5fbWF4ZmlsZXNpemUpIHx8CiAgICAgICAgICAgICRmaWxlWydzaXplJ10gPT0gMCApIHsKICAgICAgICAgICAgJHRoaXMtPl9lcnJubyA9IHNlbGY6OkZJTEVTSVpFOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBDaGVjayB0aGUgZmlsZSBleHRlbnNpb24KICAgICAgICBpZiggISR0aGlzLT5pc19hY2NlcHRlZF9maWxlKCRmaWxlWyduYW1lJ10pICkgewogICAgICAgICAgICAkdGhpcy0+X2Vycm5vID0gc2VsZjo6RklMRVRZUEU7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIGNoZWNrIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkKICAgICAgICBpZiggIWlzX2RpcigkdGhpcy0+X2Rlc3RkaXIpICkgewogICAgICAgICAgICAkdGhpcy0+X2Vycm5vID0gc2VsZjo6QkFEREVTVERJUjsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYoICFpc193cml0YWJsZSgkdGhpcy0+X2Rlc3RkaXIpICkgewogICAgICAgICAgICAkdGhpcy0+X2Vycm5vID0gc2VsZjo6QkFEUEVSTVM7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgICRuZXduYW1lID0gJHRoaXMtPl9vcmlnbmFtZSA9ICRmaWxlWyduYW1lJ107CiAgICAgICAgaWYoIGVtcHR5KCRkZXN0ZmlsZW5hbWUpICYmICFlbXB0eSgkdGhpcy0+X2Rlc3RuYW1lKSApICRkZXN0ZmlsZW5hbWUgPSAkdGhpcy0+X2Rlc3RuYW1lOwogICAgICAgIGlmKCAhZW1wdHkoJGRlc3RmaWxlbmFtZSkgKSB7CiAgICAgICAgICAgIC8vIHB1dCB0aGUgZXh0ZW5zaW9ub2YgdGhlIGlucHV0IGZpbGUgb24gdGhlIG5ldyBkZXN0aW5hdGlvbiBuYW1lLgogICAgICAgICAgICAvLyB0aGlzIHByZXZlbnRzIGEgLmpwZyBmcm9tIGJlaW5nIG5hbWVkIGEgLmdpZiBvciBzb21ldGhpbmcuCiAgICAgICAgICAgICRkZXN0ZmlsZW5hbWUgPSBiYXNlbmFtZSgkZGVzdGZpbGVuYW1lKTsKICAgICAgICAgICAgJHRleHRlbnNpb24gPSBzdHJyY2hyKCRkZXN0ZmlsZW5hbWUsJy4nKTsKICAgICAgICAgICAgJHRtcCA9IHN1YnN0cigkZGVzdGZpbGVuYW1lLDAsc3RybGVuKCRkZXN0ZmlsZW5hbWUpLXN0cmxlbigkdGV4dGVuc2lvbikpOwogICAgICAgICAgICAkbmV3bmFtZSA9ICR0bXAuJGV4dGVuc2lvbjsKICAgICAgICB9CiAgICAgICAgJGRlc3RuYW1lID0gY21zX2pvaW5fcGF0aCgkdGhpcy0+X2Rlc3RkaXIsJG5ld25hbWUpOwogICAgICAgIGlmKCAhJHRoaXMtPl9kZXN0bmFtZSApICR0aGlzLT5fZGVzdG5hbWUgPSAkZGVzdG5hbWU7CiAgICAgICAgaWYoIGlzX2ZpbGUoJGRlc3RuYW1lKSApIHsKICAgICAgICAgICAgaWYoICEkdGhpcy0+X2FsbG93X292ZXJ3cml0ZSApIHsKICAgICAgICAgICAgICAgICR0aGlzLT5fZXJybm8gPSBzZWxmOjpGSUxFRVhJU1RTOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYoICFpc193cml0YWJsZSgkZGVzdG5hbWUpICkgewogICAgICAgICAgICAgICAgJHRoaXMtPl9lcnJubyA9IHNlbGY6OkJBRFBFUk1TOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBoZXJlIHdlIGNvdWxkIGRvIGFueSBwcmVwcm9jZXNzaW5nIG9uIHRoZSBmaWxlLgogICAgICAgICRzcmNuYW1lID0gJGZpbGVbJ3RtcF9uYW1lJ107CiAgICAgICAgJHRtcCA9ICR0aGlzLT5wcmVwcm9jZXNzX3VwbG9hZCgkZmlsZSk7CiAgICAgICAgaWYoICEkdG1wICkgewogICAgICAgICAgICAkdGhpcy0+X2Vycm5vID0gc2VsZjo6UFJFUFJPQ0VTU0lOR19GQUlMRUQ7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgJHNyY25hbWUgPSAkdG1wOwoKICAgICAgICAvLyBBbmQgQXR0ZW1wdCB0aGUgY29weQogICAgICAgICRyZXMgPSBAY29weSggJHNyY25hbWUsICRkZXN0bmFtZSApOwogICAgICAgIGlmKCAhJHJlcyApIHsKICAgICAgICAgICAgJHRoaXMtPl9lcnJubyA9IHNlbGY6Ok1PVkVGQUlMRUQ7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbmV3bmFtZTsKICAgIH0KCgogICAgLyoqCiAgICAgKiBQcmVwcm9jZXNzIHRoZSB1cGxvYWRlZCBmaWxlLgogICAgICogSWYgYSBwcmVwcm9jZXNzb3IgaGFzIGJlZW4gcGFzc2VkIGludG8gdGhpcyBvYmplY3QsIHRoaXMgbWV0aG9kCiAgICAgKiB3aWxsIHByZXByb2Nlc3MgdGhlIGZpbGUKCiAgICAgKiBAcGFyYW0gYXJyYXkgJGZpbGVpbmZvIFRoZSBmaWxlIGluZm8gcmVjb3JkIChmcm9tIHRoZSAkX0ZJTEVTIGFycmF5KSBmb3IgdGhlIGZpbGUgdG8gcHJlcHJvY2Vzcy4KICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBmaWxlbmFtZSBvZiB0aGUgcHJlLXByb2Nlc3NlZCBmaWxlIG9uIHN1Y2Nlc3MuICBPdGhlcndpc2UsIEZBTFNFCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBwcmVwcm9jZXNzX3VwbG9hZChhcnJheSAkZmlsZWluZm8pCiAgICB7CiAgICAgICAgaWYoICFpc3NldCgkZmlsZWluZm9bJ3RtcF9uYW1lJ10pICkgcmV0dXJuIEZBTFNFOwogICAgICAgICRzcmNuYW1lID0gJGZpbGVpbmZvWyd0bXBfbmFtZSddOwogICAgICAgIGlmKCAkdGhpcy0+X3ByZXByb2Nlc3NvciApIHsKICAgICAgICAgICAgJHRtcCA9IGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5fcHJlcHJvY2Vzc29yLCRmaWxlaW5mbyk7CiAgICAgICAgICAgIGlmKCAhJHRtcCApIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgJHNyY25hbWUgPSAkdG1wOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRzcmNuYW1lOwogICAgfQoKCiAgICAvKioKICAgICAqIE92ZXJyaWRlIHRoZSAkX0ZJTEVTIGFycmF5CiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRuZXdmaWxlcy4gIEFuIG92ZXJyaWRkZW4gZmlsZXMgYXJyYXkKICAgICAqIEBpbnRlcm5hbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2ZpbGVzKCYkbmV3ZmlsZXMpCiAgICB7CiAgICAgICAgJHRoaXMtPl9maWxlcyA9ICRuZXdmaWxlczsKICAgIH0KCn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiMK]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_headers.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgdXRpbGl0eSBjbGFzcyB0byBtYW5pcHVsYXRlIEhUTUwgaGVhZGVycwogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKiBAY2F0ZWdvcnkgVXRpbGl0aWVzCiAqIEBhdXRob3IgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwoKLy9kZWNsYXJlKHN0cmljdF90eXBlcz0xKTsjIHJldmlzaXQKCi8qKgogKiBBIHV0aWxpdHkgY2xhc3MgdG8gbWFuaXB1bGF0ZSBIVE1MIGhlYWRlcnMKICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICovCmZpbmFsIGNsYXNzIHh0X2hlYWRlcnMKewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljICRfaGVhZGVyczsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBUZXN0IGlmIHdlIGhhdmUgc3RvcmVkIGFueSBoZWFkZXIgdmFsdWVzCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGF2ZV9oZWFkZXJzKCkgOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIGlzX2FycmF5KHNlbGY6OiRfaGVhZGVycyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgYSBzcGVjaWZpYyBoZWFkZXIgc3RyaW5nIHRvIHRoZSBzdG9yZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRoZWFkZXIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhZGRfaGVhZGVyKHN0cmluZyAkaGVhZGVyKQogICAgewogICAgICAgIGlmKCAhaXNfYXJyYXkoc2VsZjo6JF9oZWFkZXJzKSApIHNlbGY6OiRfaGVhZGVycyA9IGFycmF5KCk7CiAgICAgICAgc2VsZjo6JF9oZWFkZXJzW10gPSAkaGVhZGVyOwogICAgfQoKICAgIC8qKgogICAgICogT3V0cHV0IHN0b3JlZCBoZWFkZXJzLgogICAgICoKICAgICAqIEBzZWUgaGVhZGVyKCkKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG91dHB1dF9oZWFkZXJzKCkKICAgIHsKICAgICAgICBpZiggIWlzX2FycmF5KHNlbGY6OiRfaGVhZGVycykgKSByZXR1cm47CgogICAgICAgIGZvcmVhY2goIHNlbGY6OiRfaGVhZGVycyBhcyAkdmFsdWUgKSB7CiAgICAgICAgICAgIGhlYWRlcigkdmFsdWUpOwogICAgICAgIH0KICAgIH0KCn0gLy8gZW5kIG9mIGNsYXNzCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_http.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBwZXJmb3JtaW5nIGh0dHAgcmVxdWVzdHMuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBVdGlsaXRpZXMKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxMCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCgovKioKICogQSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHBlcmZvcm1pbmcgaHR0cCByZXF1ZXN0cy4KICoKICogVGhpcyBjbGFzcyB1c2VzIGFuIGVtYmVkZGVkIGh0dHAgb2JqZWN0LCB3aGljaCBpbiB0dXJuIHJlbGllcyBvbiBjdXJsIChvciBhdHRlbXB0cyB0byB1c2UgZnNvY2t1cGVvbiBpZiBhbGwgZWxzZSBmYWlscykgdG8gcGVyZm9ybSBodHRwIHJlcXVlc3RzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKi8KZmluYWwgY2xhc3MgeHRfaHR0cAp7CiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgc3RhdGljIHByaXZhdGUgJF9odHRwOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIFJlc2V0IHRoZSBodHRwIG9iamVjdCBzdGF0ZSB0byBkZWZhdWx0IHZhbHVlcy4KICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiByZXNldCgpCiAgICB7CiAgICAgICAgcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvaHR0cC9jbGFzcy5odHRwLnBocCcpOwogICAgICAgIHNlbGY6OiRfaHR0cCA9IG5ldyBIdHRwKGFycmF5KCkpOwogICAgICAgIHNlbGY6OiRfaHR0cC0+c2V0VGltZW91dCg2MCk7IC8vIHRvZG8sIG1ha2UgdGhpcyBhIHByZWZlcmVuY2UuCiAgICB9CgoKICAgIC8qKgogICAgICogR2V0IHRoZSBpbnRlcm5hbCBIVFRQIG9iamVjdAogICAgICoKICAgICAqIEByZXR1cm4gaHR0cAogICAgICovCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGdldF9odHRwKCkKICAgIHsKICAgICAgICBpZiggaXNfbnVsbChzZWxmOjokX2h0dHApICkJc2VsZjo6cmVzZXQoKTsKICAgICAgICByZXR1cm4gc2VsZjo6JF9odHRwOwogICAgfQoKCiAgICAvKioKICAgICAqIFNlbmQgYSBQT1NUIHJlcXVlc3QgdG8gdGhlIHNwZWNpZmllZCBVUkwKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRVUkwgVGhlIHNwZWNpZmllZCBkYXRhCiAgICAgKiBAcGFyYW0gYXJyYXkgJGRhdGEgRGF0YSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgVVJMCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZWZlcmVyIEFuIG9wdGlvbmFsIHJlZmVyZXIgc3RyaW5nLiAgSWYgbm90IHNwZWNpZmllZCwgYSBwcmVzZXQgdmFsdWUgaXMgdXNlZC4KICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBIVE1MIG9yIG90aGVyIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgcmVxdWVzdC4iCiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gcG9zdChzdHJpbmcgJFVSTCxhcnJheSAkZGF0YSA9IG51bGwsc3RyaW5nICRyZWZlcmVyID0gbnVsbCkKICAgIHsKICAgICAgICBpZiggc3RhcnRzd2l0aCgkVVJMLCcvLycpICkgewogICAgICAgICAgICBpZiggY21zbXMoKS0+aXNfaHR0cHNfcmVxdWVzdCgpICkgewogICAgICAgICAgICAgICAgJFVSTCA9ICdodHRwczonIC4gJFVSTDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRVUkwgPSAnaHR0cDonIC4gJFVSTDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzZWxmOjpyZXNldCgpOwogICAgICAgICRodHRwID0gc2VsZjo6Z2V0X2h0dHAoKTsKICAgICAgICAkaHR0cC0+c2V0TWV0aG9kKCdQT1NUJyk7CiAgICAgICAgaWYoICRkYXRhICkJJGh0dHAtPnNldFBhcmFtcygkZGF0YSk7CiAgICAgICAgcmV0dXJuICRodHRwLT5leGVjdXRlKCRVUkwpOwogICAgfQoKCiAgICAvKioKICAgICAqIFNlbmQgYSBHRVQgcmVxdWVzdCB0byB0aGUgc3BlY2lmaWVkIFVSTC4KICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgdXNlIGZpbGVfZ2V0X2NvbnRlbnRzIHRvIHJlYWQgdGhlIFVSTCBpZiBjdXJsIGlzIG5vdCBhdmFpbGFibGUsIG9yIHVzZV9jdXJsIGlzIHNldCB0byBmYWxzZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRVUkwKICAgICAqIEBwYXJhbSBzdHJpbmcgJHJlZmVyZXIgQW4gb3B0aW9uYWwgcmVmZXJlciBzdHJpbmcKICAgICAqIEBwYXJhbSBib29sICR1c2VfY3VybAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBnZXQoc3RyaW5nICRVUkwsc3RyaW5nICRyZWZlcmVyID0gJycsYm9vbCAkdXNlX2N1cmwgPSBUUlVFKQogICAgewogICAgICAgIGlmKCBzdGFydHN3aXRoKCRVUkwsJy8vJykgKSB7CiAgICAgICAgICAgIGlmKCBjbXNtcygpLT5pc19odHRwc19yZXF1ZXN0KCkgKSB7CiAgICAgICAgICAgICAgICAkVVJMID0gJ2h0dHBzOicgLiAkVVJMOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJFVSTCA9ICdodHRwOicgLiAkVVJMOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCAkdXNlX2N1cmwgPT0gRkFMU0UgfHwgIWluX2FycmF5KCdjdXJsJyxnZXRfbG9hZGVkX2V4dGVuc2lvbnMoKSkgKSB7CiAgICAgICAgICAgIHJldHVybiBmaWxlX2dldF9jb250ZW50cygkVVJMKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHNlbGY6OnJlc2V0KCk7CiAgICAgICAgICAgICRodHRwID0gc2VsZjo6Z2V0X2h0dHAoKTsKICAgICAgICAgICAgJGh0dHAtPnNldE1ldGhvZCgnR0VUJyk7CiAgICAgICAgICAgICR0bXAgPSAkaHR0cC0+ZXhlY3V0ZSgkVVJMKTsKICAgICAgICAgICAgcmV0dXJuICR0bXA7CiAgICAgICAgfQogICAgfQoKCiAgICAvKioKICAgICAqIEdldCB0aGUgc3RhdHVzIG9mIHRoZSBsYXN0IGh0dHAgcmVxdWVzdAogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gc3RhdHVzKCkKICAgIHsKICAgICAgICAkaHR0cCA9IHNlbGY6OmdldF9odHRwKCk7CiAgICAgICAgcmV0dXJuICRodHRwLT5nZXRTdGF0dXMoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGh0dHAgcmVxdWVzdAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gcmVzdWx0KCkKICAgIHsKICAgICAgICAkaHR0cCA9IHNlbGY6OmdldF9odHRwKCk7CiAgICAgICAgcmV0dXJuICRodHRwLT5nZXRSZXN1bHQoKTsKICAgIH0KfSAvLyBjbGFzcwoKIwojIEVPRgojCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_image.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgc2ltcGxlIGNsYXNzIGZvciB1dGlsaXRpZXMgcmVsYXRlZCB0byBtYW5pcHVsYXRpbmcgaW1hZ2VzCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBVdGlsaXRpZXMKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxMCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCgovKioKICogQSBzaW1wbGUgY2xhc3MgZm9yIHV0aWxpdGllcyByZWxhdGVkIHRvIG1hbmlwdWxhdGluZyBpbWFnZXMuCiAqCiAqIEBkZXByZWNhdGVkIERvIG5vdCB1c2UKICogQGlnbm9yZQogKi8KY2xhc3MgeHRfaW1hZ2UKewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljICRfaW5zdGFuY2U7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJGRmbHRfc2l6ZTsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGludCAkZGZsdF9zaXplKQogICAgewogICAgICAgIGlmKCBzZWxmOjokX2luc3RhbmNlICkgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiT25seSBvbmUgaW5zdGFuY2Ugb2YgIi5fX0NMQVNTX18uIiBwZXJtaXR0ZWQiKTsKICAgICAgICBzZWxmOjokX2luc3RhbmNlID0gJHRoaXM7CgogICAgICAgIGlmKCAkZGZsdF9zaXplIDwgOCApIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIGRlZmF1bHQgc2l6ZSBpbiAnLl9fTUVUSE9EX18pOwogICAgICAgICR0aGlzLT5kZmx0X3NpemUgPSAkZGZsdF9zaXplOwogICAgfQoKICAgIC8qKgogICAgICogUmVzaXplIGFuIGltYWdlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC4KICAgICAqIFRoaXMgbWV0aG9kIG1ha2VzIG5vIGNoZWNrcyBmb3IgdXBzY2FsaW5nLCBkb3duc2NhbGluZywgb3IgaWYgaW1hZ2UgYXNwZWN0IHJhdGlvIGlzIG1haW50YWluZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3JjU3BlYyBUaGUgY29tcGxldGUgcGF0aCB0byB0aGUgaW5wdXQgZmlsZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlc3RTcGVjIFRoZSBjb21wbGV0ZSBwYXRoIHRvIHRoZSBvdXRwdXQgZmlsZS4KICAgICAqIEBwYXJhbSBpbnQgJG5ld193IFRoZSBkZXN0aW5hdGlvbiB3aWR0aCAoaW4gcGl4ZWxzKS4KICAgICAqIEBwYXJhbSBpbnQgJG5ld19oIFRoZSBkZXN0aW5hdGlvbiBoZWlnaHQgKGluIHBpeGVscykuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVzaXplKHN0cmluZyAkc3JjU3BlYyxzdHJpbmcgJGRlc3RTcGVjLGludCAkbmV3X3csaW50ICRuZXdfaCkKICAgIHsKICAgICAgICBpZiggIWlzX2ZpbGUoICRzcmNTcGVjICkgKSB0aHJvdyBuZXcgXENtc0ludmFsaWREYXRhRXhjZXB0aW9uKCdGaWxlICcuJHNyY1NwZWMuJyBub3QgZm91bmQnKTsKICAgICAgICBpZiggIWlzX3JlYWRhYmxlKCAkc3JjU3BlYyApICkgdGhyb3cgbmV3IFxDbXNJbnZhbGlkRGF0YUV4Y2VwdGlvbignRmlsZSAnLiRzcmNTcGVjLicgaXMgbm90IHJlYWRhYmxlJyk7CiAgICAgICAgJGRlc3RkaXIgPSBkaXJuYW1lKCRkZXN0U3BlYyk7CiAgICAgICAgaWYoICFpc193cml0YWJsZSggJGRlc3RkaXIgKSApIHRocm93IG5ldyBcQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJGRlc3RkaXIuJyBpcyBub3Qgd3JpdGFibGUnKTsKICAgICAgICBpZiggaXNfZmlsZSggJGRlc3RTcGVjICkgJiYgIWlzX3dyaXRhYmxlKCAkZGVzdFNwZWMgKSApIHRocm93IG5ldyBcQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJGRlc3RTcGVjLicgZXhpc3RzLCBidXQgY2Fubm90IGJlIG92ZXJ3cml0dGVuLicpOwogICAgICAgIGlmKCAkbmV3X3cgPCAxIHx8ICRuZXdfaCA8IDEgKSB0aHJvdyBuZXcgXENtc0ludmFsaWREYXRhRXhjZXB0aW9uKCdJbnZhbGlkIHdpZHRoL2hlaWdodCBwYXNzZWQgdG8gJy5fX01FVEhPRF9fKTsKICAgICAgICAkZXh0ID0gc3Vic3RyKCRzcmNTcGVjLCBzdHJycG9zKCRzcmNTcGVjLCAnLicpICsgMSk7CgogICAgICAgICRpbWdpbmZvID0gZ2V0aW1hZ2VzaXplKCRzcmNTcGVjKTsKICAgICAgICBpZiggJGltZ2luZm8gPT09IEZBTFNFICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCRzcmNTcGVjLicgaXMgbm90IGEgdmFsaWQgaW1hZ2UgZmlsZSAoY291bGQgbm90IGdldCBkaW1lbnNpb25zKScpOwoKICAgICAgICAkaW1nX3JzcmMgPSBAaW1hZ2VjcmVhdGVmcm9tc3RyaW5nKGZpbGVfZ2V0X2NvbnRlbnRzKCRzcmNTcGVjKSk7CiAgICAgICAgaWYoICRpbWdfcnNyYyA9PT0gRkFMU0UgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1Byb2JsZW0gcmVhZGluZyBpbWFnZSAnLiRzcmNTcGVjKTsKCiAgICAgICAgJGRlc3RfcnNyYyA9IEltYWdlQ3JlYXRlVHJ1ZUNvbG9yKCRuZXdfdywkbmV3X2gpOwogICAgICAgIGltYWdlYWxwaGFibGVuZGluZygkZGVzdF9yc3JjLEZBTFNFKTsKICAgICAgICBpbWFnZXNhdmVhbHBoYSgkZGVzdF9yc3JjLFRSVUUpOwogICAgICAgICR0cmFuc3BhcmVudCA9IGltYWdlY29sb3JhbGxvY2F0ZWFscGhhKCRkZXN0X3JzcmMsMjU1LDI1NSwyNTUsMTI3KTsKICAgICAgICBpbWFnZWZpbGxlZHJlY3RhbmdsZSgkZGVzdF9yc3JjLCAwLCAwLCAkbmV3X3csICRuZXdfaCwgJHRyYW5zcGFyZW50KTsKICAgICAgICBJbWFnZUNvcHlSZXNhbXBsZWQoJGRlc3RfcnNyYywgJGltZ19yc3JjLCAwLCAwLCAwLCAwLCAkbmV3X3csICRuZXdfaCwgJGltZ2luZm9bMF0sICRpbWdpbmZvWzFdKTsKCiAgICAgICAgJGZ1bmMgPSBudWxsOwogICAgICAgIHN3aXRjaCggJGltZ2luZm9bMl0gKSB7CiAgICAgICAgY2FzZSBJTUFHRVRZUEVfR0lGOgogICAgICAgICAgICAkZnVuYyA9ICdpbWFnZWdpZic7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgSU1BR0VUWVBFX0pQRUc6CiAgICAgICAgICAgICRmdW5jID0gJ2ltYWdlanBlZyc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgSU1BR0VUWVBFX1BORzoKICAgICAgICAgICAgJGZ1bmMgPSAnaW1hZ2VwbmcnOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIElNQUdFVFlQRV9CTVA6CiAgICAgICAgICAgICRmdW5jID0gJ2ltYWdlYm1wJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgaWYoIHN0cnRvbG93ZXIoJGV4dCkgPT0gJ3dlYnAnICkgewogICAgICAgICAgICAgICAgLy8gbm8gaW1hZ2V0eXBlIGNvbnN0YW50IGZvciB3ZWJwPwogICAgICAgICAgICAgICAgJGZ1bmMgPSAnaW1hZ2V3ZWJwJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ2Fubm90IHNhdmUgZmlsZXMgb2YgdHlwZSAnLiRpbWdpbmZvWzJdLiIgKCRleHQpIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRyZXMgPSAkZnVuYygkZGVzdF9yc3JjLCRkZXN0U3BlYyk7CiAgICAgICAgaWYoICRyZXMgPT09IEZBTFNFICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdQcm9ibGVtIHNhdmluZyBmaWxlICcuJGRlc3RTcGVjKTsKICAgICAgICBJbWFnZURlc3Ryb3koJGltZ19yc3JjKTsKICAgICAgICBJbWFnZURlc3Ryb3koJGRlc3RfcnNyYyk7CiAgICB9CiAgCiAgLyoqCiAgICogUmVzaXplIGFuIGltYWdlIHRvIGhhdmUgdGhlIHNwZWNpZmlmaWVkIG51bWJlciBvZiBwaXhlbHMgaW4gdGhlIGxvZ2VzdCBkaW1lbnNpb24gd2hpbGUgcmV0YWluaW5nIGFzcGVjdCByYXRpby4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJHNyY1NwZWMgIFRoZSBjb21wbGV0ZSBwYXRoIHRvIHRoZSBpbnB1dCBmaWxlLgogICAqIEBwYXJhbSBzdHJpbmcgJGRlc3RTcGVjIFRoZSBjb21wbGV0ZSBwYXRoIHRvIHRoZSBvdXRwdXQgZmlsZS4KICAgKiBAcGFyYW0gaW50ICAgICRzaXplICAgICBUaGUgbWF4aW11bSBzaXplIG9mIHRoZSBsb25nZXN0IGRpbWVuc2lvbiBvZiB0aGUgaW1hZ2UgKGluIHBpeGVscykuCiAgICoKICAgKiBAdGhyb3dzIFxDbXNJbnZhbGlkRGF0YUV4Y2VwdGlvbgogICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0cmFuc2Zvcm1faW1hZ2Uoc3RyaW5nICRzcmNTcGVjLHN0cmluZyAkZGVzdFNwZWMsaW50ICRzaXplID0gbnVsbCkKICAgIHsKICAgICAgICBpZiggIWlzX2ZpbGUoICRzcmNTcGVjICkgKSB0aHJvdyBuZXcgXENtc0ludmFsaWREYXRhRXhjZXB0aW9uKCdGaWxlICcuJHNyY1NwZWMuJyBub3QgZm91bmQnKTsKICAgICAgICBpZiggIWlzX3JlYWRhYmxlKCAkc3JjU3BlYyApICkgdGhyb3cgbmV3IFxDbXNJbnZhbGlkRGF0YUV4Y2VwdGlvbignRmlsZSAnLiRzcmNTcGVjLicgaXMgbm90IHJlYWRhYmxlJyk7CiAgICAgICAgJGRlc3RkaXIgPSBkaXJuYW1lKCRkZXN0U3BlYyk7CiAgICAgICAgaWYoICFpc193cml0YWJsZSggJGRlc3RkaXIgKSApIHRocm93IG5ldyBcQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJGRlc3RkaXIuJyBpcyBub3Qgd3JpdGFibGUnKTsKICAgICAgICBpZiggaXNfZmlsZSggJGRlc3RTcGVjICkgJiYgIWlzX3dyaXRhYmxlKCAkZGVzdFNwZWMgKSApIHRocm93IG5ldyBcQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJGRlc3RTcGVjLicgZXhpc3RzLCBidXQgY2Fubm90IGJlIG92ZXJ3cml0dGVuLicpOwoKICAgICAgICAkaW1naW5mbyA9IGdldGltYWdlc2l6ZSgkc3JjU3BlYyk7CiAgICAgICAgaWYoICRpbWdpbmZvID09PSBGQUxTRSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigkc3JjU3BlYy4nIGlzIG5vdCBhIHZhbGlkIGltYWdlIGZpbGUgKGNvdWxkIG5vdCBnZXQgZGltZW5zaW9ucyknKTsKCiAgICAgICAgLy8gZ2V0IGEgZGVmYXVsdCB0aHVtYm5haWwgc2l6ZS4KICAgICAgICBpZiggJHNpemUgPCAxICkgJHNpemUgPSBzZWxmOjokX2luc3RhbmNlLT5kZmx0X3NpemU7CgogICAgICAgIC8vIGNhbGN1bGF0ZSBuZXcgc2l6ZXMuCiAgICAgICAgJG5ld193ID0gJG5ld19oID0gMDsKICAgICAgICBpZiggJGltZ2luZm9bMF0gPj0gJGltZ2luZm9bMV0gKSB7CiAgICAgICAgICAgIC8vIGltYWdlIGlzIHRhbGxlciB0aGFuIHdpZGUKICAgICAgICAgICAgJG5ld193ID0gJHNpemU7CiAgICAgICAgICAgICRuZXdfaCA9IHJvdW5kKCgkbmV3X3cgLyAkaW1naW5mb1swXSkgKiAkaW1naW5mb1sxXSwgMCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkbmV3X2ggPSAkc2l6ZTsKICAgICAgICAgICAgJG5ld193ID0gcm91bmQoKCRuZXdfaCAvICRpbWdpbmZvWzFdKSAqICRpbWdpbmZvWzBdLCAwKTsKICAgICAgICB9CgogICAgICAgIHNlbGY6OnJlc2l6ZSgkc3JjU3BlYywkZGVzdFNwZWMsJG5ld193LCRuZXdfaCk7CiAgICB9Cn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiMK]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_jshandler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKZmluYWwgY2xhc3MgeHRfanNoYW5kbGVyCnsKICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZChzdHJpbmcgJGxpYm5hbWUpCiAgICB7CiAgICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZShNT0RfWFRNT0RVTEUpOwogICAgICAgIGlmKCAkbGlibmFtZSA9PSAneHRfY21zbXMnICkgewogICAgICAgICAgICAvLyBnb3R0YSByZXR1cm4gY29kZS4KICAgICAgICAgICAgLy8kY29uZmlnID0gY21zX2NvbmZpZzo6Z2V0X2luc3RhbmNlKCk7CiAgICAgICAgICAgICRjb25maWcgPSBcQ01TTVNFeHRcY29uZmlnOjpHZXRJbnN0YW5jZSgpOwogICAgICAgICAgICAkdHBsID0gJG1vZC0+Q3JlYXRlU21hcnR5VGVtcGxhdGUoJ2pxdWVyeS54dF9jbXNtcy50cGwnKTsKICAgICAgICAgICAgJHRwbC0+YXNzaWduKCdtb2QnLCRtb2QpOwogICAgICAgICAgICAkdHBsLT5hc3NpZ24oJ2NvbmZpZycsJGNvbmZpZyk7CiAgICAgICAgICAgICRjb2RlID0gJHRwbC0+ZmV0Y2goKTsKICAgICAgICAgICAgJG9iaiA9IG5ldyBTdGRDbGFzczsKICAgICAgICAgICAgJG9iai0+Y29kZSA9ICRjb2RlOwogICAgICAgICAgICByZXR1cm4gJG9iajsKICAgICAgICB9CiAgICB9Cn0gLy8gZW5kIG9mIGNsYXNzCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_message.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoZSBkZWZpbml0aW9uIGZvciB0aGUgeHRfbWVzc2FnZSBjbGFzcy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IFV0aWxpdGllcwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCi8qKgogKiBBIHNpbXBsZSBjbGFzcyBmb3Igc3RvcmluZyBhbmQgcmV0cmlldmluZyBkYXRhIGJldHdlZW4gcmVxdWVzdHMuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBkZXByZWN0ZWQKICovCmZpbmFsIGNsYXNzIHh0X21lc3NhZ2UKewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljICRfZGF0YTsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gJl9zZXNzKCkKICAgIHsKICAgICAgICBpZiggISBpc19vYmplY3Qoc2VsZjo6JF9kYXRhKSApIHNlbGY6OiRfZGF0YSA9IG5ldyB4dF9zZXNzaW9uKF9fQ0xBU1NfXyk7CiAgICAgICAgcmV0dXJuIHNlbGY6OiRfZGF0YTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCBhIG1lc3NhZ2UKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1zZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldCgka2V5LCRtc2cpCiAgICB7CiAgICAgICAgc2VsZjo6X3Nlc3MoKS0+cHV0KCRrZXksKHN0cmluZykgJG1zZyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBtZXNzYWdlCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZmx0CiAgICAgKiBAcGFyYW0gYm9vbCAgICRlcmFzZSBXaGV0aGVyIHRoZSBkYXRhIHNob3VsZCBiZSBlcmFzZWQgYWZ0ZXIgcmV0cmlldmFsLgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXQoJGtleSwkZGZsdCA9IG51bGwsJGVyYXNlID0gVFJVRSkKICAgIHsKICAgICAgICAkbXNnID0gc2VsZjo6X3Nlc3MoKS0+Z2V0KCRrZXksJGRmbHQpOwogICAgICAgIGlmKCAkZXJhc2UgKSBzZWxmOjpfc2VzcygpLT5jbGVhcigka2V5KTsKICAgICAgICByZXR1cm4gJG1zZzsKICAgIH0KCiAgICAvKioKICAgICAqIEVyYXNlIGEgbWVzc2FnZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVyYXNlKCRrZXkpCiAgICB7CiAgICAgICAgJG1zZyA9IHNlbGY6Ol9zZXNzKCktPmVyYXNlKCRrZXkpOwogICAgfQp9IC8vIGVuZCBvZiBjbGFzcwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_param.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgc2V0IG9mIHV0aWxpdGllcyBmb3IgY2xlYW5pbmcgaW5wdXQgcGFyYW1ldGVycy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IFV0aWxpdGllcwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDE1IGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCi8qKgogKiBBIHNldCBvZiB1dGlsaXRpZXMgZm9yIGNsZWFuaW5nIGlucHV0IHBhcmFtZXRlcnMuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqLwpmaW5hbCBjbGFzcyB4dF9wYXJhbQp7CiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBBIGNvbnZlbmllbmNlIG1ldGhvZCB0byB0ZXN0IGlmIGEga2V5IGV4aXN0cyBpbiB0aGUgaW5wdXQgYXJyYXkuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRwYXJhbXMgQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgaW5wdXQgcGFyYW1zCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byB0aGUgYXNzb2NpYXRpdmUgYXJyYXkKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGV4aXN0cygkcGFyYW1zLHN0cmluZyAka2V5KQogICAgewogICAgICAgICRrZXkgPSB0cmltKCRrZXkpOwogICAgICAgIGlmKCAhJGtleSApIHJldHVybjsKICAgICAgICByZXR1cm4gaXNzZXQoJHBhcmFtc1ska2V5XSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgc2FmZSBIVE1MIGZyb20gYW4gaW5wdXQgcGFyYW1ldGVyLgogICAgICogVGhpcyBtZXRob2QgdXNlcyBodG1sYXdlZCB0byBjbGVhbiBpbnB1dCBIVE1MLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcGFyYW1zIEFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGlucHV0IHBhcmFtcwogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgdG8gdGhlIGFzc29jaWF0aXZlIGFycmF5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZmx0IFRoZSBkZWZhdWx0IHZhbHVlIHRvIHVzZSBpZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0IGluIHRoZSAkcGFyYW1zIGFyYXkuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9odG1sKCRwYXJhbXMsc3RyaW5nICRrZXksJGRmbHQgPSBudWxsKQogICAgewogICAgICAgICR2YWwgPSB4dF91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsJGtleSwkZGZsdCk7CiAgICAgICAgaWYoICR2YWwgKSB7CiAgICAgICAgICAgICR2YWwgPSB4dF91dGlsczo6Y2xlYW5faW5wdXRfaHRtbCgkdmFsKTsKICAgICAgICAgICAgJHZhbCA9IGh0bWxfZW50aXR5X2RlY29kZSgkdmFsKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR2YWw7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBzYWZlIGludGVnZXIgZnJvbSBhbiBpbnB1dCBwYXJhbWV0ZXIuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRwYXJhbXMgQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgaW5wdXQgcGFyYW1zCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byB0aGUgYXNzb2NpYXRpdmUgYXJyYXkKICAgICAqIEBwYXJhbSBpbnQgJGRmbHQgVGhlIGRlZmF1bHQgdmFsdWUgdG8gdXNlIGlmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QgaW4gdGhlICRwYXJhbXMgYXJheS4KICAgICAqIEByZXR1cm4gaW50fG51bGwKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfaW50KCRwYXJhbXMsc3RyaW5nICRrZXksaW50ICRkZmx0ID0gbnVsbCkKICAgIHsKICAgICAgICAkcmVzID0geHRfdXRpbHM6OmdldF9lbXB0eV9wYXJhbSgkcGFyYW1zLCRrZXksJGRmbHQpOwogICAgICAgIGlmKCAhaXNfbnVsbCgkcmVzKSApIHJldHVybiAoaW50KSAkcmVzOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGEgc2FmZSBib29sZWFuIGZyb20gYW4gaW5wdXQgcGFyYW1ldGVyLgogICAgICogVGhpcyBtZXRob2QgY2FuIGFjY2VwdCBib29sZWFuIHN0cmluZ3MgbGlrZSB5ZXMsIG5vLCB0cnVlLCBmYWxzZSwgb24sIG9mZi4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhcmFtcyBBbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBpbnB1dCBwYXJhbXMKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IHRvIHRoZSBhc3NvY2lhdGl2ZSBhcnJheQogICAgICogQHBhcmFtIGJvb2wgJGRmbHQgVGhlIGRlZmF1bHQgdmFsdWUgdG8gdXNlIGlmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QgaW4gdGhlICRwYXJhbXMgYXJheS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfYm9vbCgkcGFyYW1zLHN0cmluZyAka2V5LGJvb2wgJGRmbHQgPSBmYWxzZSkKICAgIHsKICAgICAgICAkcmVzID0geHRfdXRpbHM6OmdldF9wYXJhbSgkcGFyYW1zLCRrZXksJGRmbHQpOwogICAgICAgIGlmKCAhaXNfbnVsbCgkcmVzKSApIHJldHVybiAoYm9vbCkgJHJlczsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhIHNhZmUgc3RyaW5nIGZyb20gYW4gaW5wdXQgcGFyYW1ldGVyLgogICAgICogVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBnZXRfc3RyaW5nIG1ldGhvZCBleGNlcHQgdGhhdCBpZiB0aGUgJGRmbHQgaXMgbnVsbCwgYW5kIHRoZSBwYXJhbWV0ZXIKICAgICAqIGRvZXMgbm90IGV4aXN0LCB0aGVuIG51bGwgd2lsbCBiZSByZXR1cm5lZC4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhcmFtcyBBbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBpbnB1dCBwYXJhbXMKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IHRvIHRoZSBhc3NvY2lhdGl2ZSBhcnJheQogICAgICogQHBhcmFtIHN0cmluZyAkZGZsdCBUaGUgZGVmYXVsdCB2YWx1ZSB0byB1c2UgaWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgJHBhcmFtcyBhcmF5LgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9lbXB0eV9zdHJpbmcoJHBhcmFtcyxzdHJpbmcgJGtleSwkZGZsdCA9IG51bGwpCiAgICB7CiAgICAgICAgJHZhbCA9IHh0X3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywka2V5LCRkZmx0KTsKICAgICAgICBpZiggIWlzX251bGwoJHZhbCkgKSB7CiAgICAgICAgICAgICR2YWwgPSBjbXNfaHRtbF9lbnRpdHlfZGVjb2RlKCR2YWwpOwogICAgICAgICAgICAkdmFsID0gdHJpbShzdHJpcF90YWdzKCAkdmFsICkpOwogICAgICAgICAgICAkdmFsID0gZmlsdGVyX3ZhciggJHZhbCwgRklMVEVSX1NBTklUSVpFX1NQRUNJQUxfQ0hBUlMgKTsgLy8gdGhpcyB3aWxsIGNvbnZlcnQgc29tZSBjcmFwIGJhY2sgdG8gZW50aXRpZXMuIGFuZCBzdHJpcCBzb21lIGhpZ2gvbG93IGNoYXJzLgogICAgICAgIH0KICAgICAgICByZXR1cm4gJHZhbDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhIHNhZmUgc3RyaW5nIGZyb20gYW4gaW5wdXQgcGFyYW1ldGVyLgogICAgICogVGhlIHN0cmluZyBpcyBzdHJpcHBlZCBvZiBhbnkgaHRtbCBjb2RlLCBhbmQgaGlnaCBvciBsb3cgYnl0ZXMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRwYXJhbXMgQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgaW5wdXQgcGFyYW1zCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byB0aGUgYXNzb2NpYXRpdmUgYXJyYXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRmbHQgVGhlIGRlZmF1bHQgdmFsdWUgdG8gdXNlIGlmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QgaW4gdGhlICRwYXJhbXMgYXJheS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfc3RyaW5nKCRwYXJhbXMsc3RyaW5nICRrZXksJGRmbHQgPSBudWxsKQogICAgewogICAgICAgIC8vIGZyb20gdGV4dGFyZWFzLCBhbmQgR0VUIHBhcmFtcyBtYXkgYmUgZW5jb2RlZCBhbHJlYWR5LiAgc28gd2UgaGF2ZSB0byBkZWNvZGUgaXQgZmlyc3QKICAgICAgICAkdmFsID0gY21zX2h0bWxfZW50aXR5X2RlY29kZSh4dF91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsJGtleSwkZGZsdCkpOwogICAgICAgIC8vIG5vdyBpdCdzIGluIEhUTUwKICAgICAgICAkdmFsID0gdHJpbShzdHJpcF90YWdzKCAkdmFsICkpOwogICAgICAgICR2YWwgPSBmaWx0ZXJfdmFyKCAkdmFsLCBGSUxURVJfU0FOSVRJWkVfU1BFQ0lBTF9DSEFSUyApOyAvLyB0aGlzIHdpbGwgY29udmVydCBzb21lIGNyYXAgYmFjayB0byBlbnRpdGllcy4gYW5kIHN0cmlwIHNvbWUgaGlnaC9sb3cgY2hhcnMuCiAgICAgICAgLy8gJHZhbCA9IGNtc19odG1sX2VudGl0eV9kZWNvZGUoICR2YWwsIEVOVF9RVU9URVMgKTsKICAgICAgICByZXR1cm4gJHZhbDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhIHNhZmUgZmxvYXQgZnJvbSBhbiBpbnB1dCBwYXJhbWV0ZXIuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRwYXJhbXMgQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgaW5wdXQgcGFyYW1zCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byB0aGUgYXNzb2NpYXRpdmUgYXJyYXkKICAgICAqIEBwYXJhbSBmbG9hdCAkZGZsdCBUaGUgZGVmYXVsdCB2YWx1ZSB0byB1c2UgaWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgJHBhcmFtcyBhcmF5LgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9mbG9hdCgkcGFyYW1zLHN0cmluZyAka2V5LGZsb2F0ICRkZmx0ID0gbnVsbCkKICAgIHsKICAgICAgICAkdG1wID0geHRfdXRpbHM6OmdldF9lbXB0eV9wYXJhbSgkcGFyYW1zLCRrZXksJGRmbHQpOwogICAgICAgIGlmKCAhaXNfbnVsbCgkdG1wKSApIHJldHVybiB4dF9zdHJpbmc6OnRvX2Zsb2F0KCR0bXApOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGEgc2FmZSBhcnJheSBvZiBzdHJpbmdzIGZyb20gYW4gaW5wdXQgcGFyYW1ldGVyIHRoYXQgaXMgYW4gYXJyYXkuCiAgICAgKiBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNsZWFuZWQuCiAgICAgKgogICAgICogQHNlZSB4dF9wYXJhbTo6Z2V0X3N0cmluZygpCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhcmFtcyBBbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBpbnB1dCBwYXJhbXMKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IHRvIHRoZSBhc3NvY2lhdGl2ZSBhcnJheQogICAgICogQHBhcmFtIHN0cmluZ1tdICRkZmx0IFRoZSBkZWZhdWx0IHZhbHVlIHRvIHVzZSBpZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0IGluIHRoZSAkcGFyYW1zIGFyYXkuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X3N0cmluZ19hcnJheSgkcGFyYW1zLHN0cmluZyAka2V5LCRkZmx0ID0gbnVsbCkKICAgIHsKICAgICAgICAkdG1wID0geHRfdXRpbHM6OmdldF9wYXJhbSgkcGFyYW1zLCRrZXksJGRmbHQpOwogICAgICAgIGlmKCAhaXNfYXJyYXkoJHRtcCkgKSAkdG1wID0gWyR0bXBdOwoKICAgICAgICAkb3V0ID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoKCAkdG1wIGFzICRrZXkgPT4gJHZhbCApIHsKICAgICAgICAgICAgJHRtcCA9IChpbnQpICRrZXk7CiAgICAgICAgICAgIGlmKCB0cmltKCR0bXApID09PSAka2V5ICkgewogICAgICAgICAgICAgICAgJGtleSA9ICR0bXA7ICAvLyB3ZSBoYXZlIGFuIGludGVnZXIga2V5LgogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJGtleSA9IGZpbHRlcl92YXIoICRrZXksIEZJTFRFUl9TQU5JVElaRV9TVFJJTkcgKTsKICAgICAgICAgICAgICAgICRrZXkgPSBodG1sX2VudGl0eV9kZWNvZGUoJGtleSk7CiAgICAgICAgICAgICAgICAka2V5ID0gdHJpbShzdHJpcF90YWdzKCRrZXkpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHZhbCA9IGh0bWxfZW50aXR5X2RlY29kZSgkdmFsKTsgLy8gaXQgY291bGQgYmUgZW5jb2RlZCBmcm9tIGEgdGV4dCBhcmVhIG9yIEdFVCByZXF1ZXN0CiAgICAgICAgICAgICR2YWwgPSBmaWx0ZXJfdmFyKCAkdmFsLCBGSUxURVJfU0FOSVRJWkVfU1BFQ0lBTF9DSEFSUyApOwogICAgICAgICAgICAkdmFsID0gaHRtbF9lbnRpdHlfZGVjb2RlKCR2YWwpOyAvLyB5ZXMsIGRlY29kZSBhZ2FpbgogICAgICAgICAgICAkdmFsID0gdHJpbShzdHJpcF90YWdzKCR2YWwpKTsKICAgICAgICAgICAgJG91dFska2V5XSA9ICR2YWw7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGEgdW5peCB0aW1lc3RhbXAgZnJvbSBzZXBhcmF0ZSBtb250aCwgZGF5IGFuZCB5ZWFyIGZpZWxkcy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgZm9yIGNvbnZlcnRpbmcgZGF0ZXMgYSB1c2VyIGVudGVyZWQgaW50byBzZXBhcmF0ZSBtb250aCBkYXkgYW5kIHllYXIgZmllbGRzIGludG8gYSB1bml4IHRpbWVzdGFtcC4KICAgICAqIGkuZTogaWYgdXNpbmcgdGhlIHNtYXJ0eSB7aHRtbF9zZWxlY3RfZGF0ZX0gZmllbGQgZm9yIGdhdGhlcmluZyBkYXRlcy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgdGhlcmUgd2lsbCBiZSBzZXBhcmF0ZSBmaWVsZHMgaW4gdGhlIHBhcmFtcyBhcnJheSB3aG8ncyB2YWx1ZXMgYXJlIGludGVnZXJzLCBhbmQgdGhlCiAgICAgKiBrZXkgYmVnaW5zIHdpdGggdGhlIHByb3ZpZGVkIHByZWZpeCBhbmQgZW5kcyB3aXRoIF9Nb250aCwgX0RheSwgYW5kIF9ZZWFyIHJlc3BlY3RpdmVseS4KICAgICAqCiAgICAgKiBOb3RlLCBpZiB0aGUgeWVhciBwYXJhbWV0ZXIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHBhcmFtcyBhcnJheSwgYnV0IG1vbnRoIGFuZCBkYXkgZG8uLi4gdGhlbiB0aGUgY3VycmVudCB5ZWFyIGlzIHVzZWQuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRwYXJhbXMKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByZWZpeCBUaGUgY29tbW9uIHByZWZpeCBmb3IgdGhlIHNlcGFyYXRlIG1vbnRoLCBkYXkgYW5kIHllYXIgcGFyYW1ldGVycwogICAgICogQHBhcmFtIGludCAkZGZsdCBUaGUgb3B0aW9uYWwgZGVmYXVsdCB2YWx1ZS4KICAgICAqIEByZXR1cm4gaW50IEEgdW5peCB0aW1lc3RhbXAgcmVwcmVzZW50aW5nIHRoZSBkYXkgZm91bmQsIGF0IG1pZG5pZ2h0LgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9zZXBhcmF0ZWRfZGF0ZSgkcGFyYW1zLHN0cmluZyAkcHJlZml4LCRkZmx0ID0gbnVsbCkKICAgIHsKICAgICAgICAkbW9udGggPSBzZWxmOjpnZXRfaW50KCRwYXJhbXMsJHByZWZpeC4nTW9udGgnKTsKICAgICAgICAkZGF5ID0gc2VsZjo6Z2V0X2ludCgkcGFyYW1zLCRwcmVmaXguJ0RheScpOwogICAgICAgICR5ZWFyID0gc2VsZjo6Z2V0X2ludCgkcGFyYW1zLCRwcmVmaXguJ1llYXInKTsKICAgICAgICBpZiggISRtb250aCB8fCAhJGRheSApIHJldHVybiAkZGZsdDsKICAgICAgICBpZiggISR5ZWFyICkgJHllYXIgPSBkYXRlKCdZJyk7CgogICAgICAgIHJldHVybiBta3RpbWUoMCwwLDAsJG1vbnRoLCRkYXksJHllYXIpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGEgdW5peCB0aW1lc3RhbXAgZnJvbSBhIGlucHV0IHRleHQgb3IgZGF0ZSBmaWVsZC4KICAgICAqIGFzc3VtZXMgdmFsdWUgZnJvbSBhIGRhdGUgZWxlbWVudCwgb3Igc29tZSBvdGhlciBzdHJpbmcgdGhhdCBjYW4gYmUgcGFyc2VkIGJ5IHN0cnRvdGltZQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcGFyYW1zCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byB0aGUgYXNzb2NpYXRpdmUgYXJyYXkKICAgICAqIEBwYXJhbSBpbnQgJGRmbHQgVGhlIGRlZmF1bHQgdGltZXN0YW1wIHZhbHVlIHRvIHVzZSBpZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0IGluIHRoZSAkcGFyYW1zIGFyYXkuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X2RhdGUoJHBhcmFtcyxzdHJpbmcgJGtleSwkZGZsdCA9IG51bGwpCiAgICB7CiAgICAgICAgLy8gZml4IHVwIGRmbHQuCiAgICAgICAgaWYoICFpc19udWxsKCRkZmx0KSApICRkZmx0ID0gKGludCkgJGRmbHQ7CiAgICAgICAgJHRtcCA9IHh0X3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywka2V5KTsKICAgICAgICBpZiggISR0bXAgKSByZXR1cm4gJGRmbHQ7CiAgICAgICAgJHRtcCA9IHN0cnRvdGltZSgkdG1wKTsKICAgICAgICBpZiggJHRtcCA9PT0gRkFMU0UgKSByZXR1cm4gJGRmbHQ7CiAgICAgICAgcmV0dXJuICR0bXA7CiAgICB9Cn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiMK]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_redirect.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgdXRpbGl0eSBjbGFzcyB0byBoYW5kbGUgc29tZSBhZHZhbmNlZCByZWRpcmVjdGlvbnMKICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IFV0aWxpdGllcwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCi8qKgogKiBBIHV0aWxpdHkgY2xhc3MgdG8gaGFuZGxlIHNvbWUgYWR2YW5jZWQgcmVkaXJlY3Rpb25zCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqLwpmaW5hbCBjbGFzcyB4dF9yZWRpcmVjdAp7CiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBQZXJmb3JtIGEgMzAxIChtb3ZlZCBwZXJtYW5lbnRseSkgcmVkaXJlY3QgdG8gdGhlIHNwZWNpZmllZCBhYnNvbHV0ZSBVUkwKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cmwKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWRpcmVjdF9hYnMzMDEoc3RyaW5nICR1cmwpCiAgICB7CiAgICAgICAgJGhhbmRsZXJzID0gb2JfbGlzdF9oYW5kbGVycygpOwogICAgICAgIGZvciAoJGNudCA9IDA7ICRjbnQgPCBzaXplb2YoJGhhbmRsZXJzKTsgJGNudCsrKSB7IG9iX2VuZF9jbGVhbigpOyB9CiAgICAgICAgaGVhZGVyKCAiSFRUUC8xLjEgMzAxIE1vdmVkIFBlcm1hbmVudGx5IiApOwogICAgICAgIGhlYWRlciggIkxvY2F0aW9uOiAiLiR1cmwgKTsKICAgIH0KCgogICAgLyoqCiAgICAgKiBQZXJmb3JtIGEgMzAxIChtb3ZlZCBwZXJtYW5lbnRseSkgcmVkaXJlY3QgdG8gdGhlIHNwZWNpZmllZCBwYWdlIGFsaWFzCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGFnZV9hbGlhcwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlZGlyZWN0MzAxKHN0cmluZyAkcGFnZV9hbGlhcykKICAgIHsKICAgICAgICAvLyAxLi4uIGdldCB0aGUgcGFnZSBvYmplY3QKICAgICAgICAkY29udGVudG9wcyA9IENtc0FwcDo6Z2V0X2luc3RhbmNlKCktPkdldENvbnRlbnRPcGVyYXRpb25zKCk7CiAgICAgICAgJGNvbnRlbnQgPSAkY29udGVudG9wcy0+TG9hZENvbnRlbnRGcm9tQWxpYXMoJHBhZ2VfYWxpYXMsdHJ1ZSk7CiAgICAgICAgaWYoIGlzX29iamVjdCgkY29udGVudCkgKSB7CiAgICAgICAgICAgIC8vIDIuLi4gZ2V0IHRoZSB1cmwKICAgICAgICAgICAgJHVybCA9ICRjb250ZW50LT5HZXRVUkwoKTsKCiAgICAgICAgICAgIC8vIDMuLi4gZG8gdGhlIHJlZGlyZWN0LgogICAgICAgICAgICBzZWxmOjpyZWRpcmVjdF9hYnMzMDEoJHVybCk7CiAgICAgICAgfQogICAgfQoKCiAgICAvKioKICAgICAqIERvIGEgNDA0IHJlZGlyZWN0LgogICAgICogVGhpcyBpcyB1c2VmdWwgd2hlbiByZXF1ZXN0aW5nIGEgZGV0YWlsIHBhZ2UgdGhhdCBjYW5ub3QgYmUgZGlzcGxheWVkLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlZGlyZWN0NDA0KCkKICAgIHsKICAgICAgICAkY29udGVudG9wcyA9IENtc0FwcDo6Z2V0X2luc3RhbmNlKCktPkdldENvbnRlbnRPcGVyYXRpb25zKCk7CgogICAgICAgICR1cmwgPSAnJzsKICAgICAgICAkY29udGVudCA9ICRjb250ZW50b3BzLT5Mb2FkQ29udGVudEZyb21BbGlhcygnZXJyb3I0MDQnLHRydWUpOwogICAgICAgIGlmKCBpc19vYmplY3QoJGNvbnRlbnQpICkgewogICAgICAgICAgICAvLyAyLi4uIGdldCB0aGUgdXJsCiAgICAgICAgICAgICR1cmwgPSAkY29udGVudC0+R2V0VVJMKCk7CgogICAgICAgICAgICAvLyAzLi4uIGRvIHRoZSByZWRpcmVjdAogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgLy8gdXNpbmcgdGhlIG9sZCBjdXN0b200MDQgaGFuZGxlci4KICAgICAgICAgICAgLy8gc28ganVzdCByZWRpcmVjdCB0byBzb21lIG5vbnNlbnNlaWNhbCB1cmwKICAgICAgICAgICAgLy8kY29uZmlnID0gQ21zQXBwOjpnZXRfaW5zdGFuY2UoKS0+R2V0Q29uZmlnKCk7CiAgICAgICAgICAgICRjb25maWcgPSBcQ01TTVNFeHRcY29uZmlnOjpHZXRJbnN0YW5jZSgpOwogICAgICAgICAgICAkYmFzZV91cmwgPSAkY29uZmlnWydyb290X3VybCddOwogICAgICAgICAgICAkanVua3BhZ2UgPSBzdHJfc2h1ZmZsZShtZDUocmFuZCgwLDEwMDApKSk7CiAgICAgICAgICAgICRqdW5rcGFnZSA9ICdqdW5rXycuc3Vic3RyKCRqdW5rcGFnZSwwLDQpOwogICAgICAgICAgICAkdXJsID0gJGJhc2VfdXJsLicvaW5kZXgucGhwPycuJGNvbmZpZ1sncXVlcnlfdmFyJ10uJz0nLiRqdW5rcGFnZTsKICAgICAgICB9CgogICAgICAgIGlmKCAhZW1wdHkoJHVybCkgKSByZWRpcmVjdCgkdXJsKTsKICAgIH0KCgogICAgLyoqCiAgICAgKiBSZWRpcmVjdCB0byB0aGUgc2FtZSBVUkwgYnV0IHN1YnN0aXR1dGUgdGhlIHNzbCB1cmwuCiAgICAgKiBJZiB0aGUgdXJsIGlzIG5vdCBzcGVjaWZpZWQgdGhlIGN1cnJlbnQgdXJsIGlzIHVzZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdXJsCiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gcmVkaXJlY3RfaHR0cHMoc3RyaW5nICR1cmwgPSAnJykKICAgIHsKICAgICAgICBpZiggZW1wdHkoJHVybCkgKSAkdXJsID0geHRfdXJsOjpjdXJyZW50X3VybCgpOwoKICAgICAgICBpZiggc3RhcnRzd2l0aCggJHVybCwgJ2h0dHBzOicgKSApIHsKICAgICAgICAgICAgLy8gbm90aGluZyB0byBkby4KICAgICAgICAgICAgcmVkaXJlY3QoJHVybCk7CiAgICAgICAgfQoKICAgICAgICAvLyRjb25maWcgPSBDbXNBcHA6OmdldF9pbnN0YW5jZSgpLT5HZXRDb25maWcoKTsKICAgICAgICAkY29uZmlnID0gXENNU01TRXh0XGNvbmZpZzo6R2V0SW5zdGFuY2UoKTsKICAgICAgICBpZiggc3RhcnRzd2l0aCggJHVybCwgJGNvbmZpZ1sncm9vdF91cmwnXSApICkgewogICAgICAgICAgICAkbmV3X3VybCA9ICcnOwogICAgICAgICAgICBpZiggaXNzZXQoJGNvbmZpZ1snc3NsX3VybCddKSApIHsKICAgICAgICAgICAgICAgICRuZXdfdXJsID0gc3RyX3JlcGxhY2UoJGNvbmZpZ1sncm9vdF91cmwnXSwkY29uZmlnWydzc2xfdXJsJ10sJHVybCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkbmV3X3VybCA9IHN0cl9yZXBsYWNlKCdodHRwOi8vJywnaHR0cHM6Ly8nLCR1cmwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlZGlyZWN0KCRuZXdfdXJsKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWRpcmVjdCB0byB0aGUgc2FtZSBVUkwgYnV0IHN1YnN0aXR1dGUgdGhlIGh0dHAgdXJsIHdpdGggdGhlIGh0dHBzIHVybAogICAgICogIElmIHRoZSBVUkwgaXMgbm90IHNwZWNpZmllZCB0aGUgY3VycmVudCB1cmwgaXMgdXNlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cmwKICAgICAqIEBwYXJhbSBib29sICAgJGZvcmNlIEFic29sdXRlbHkgZm9yY2UgdGhlIHVybCB0byBiZSBodHRwcy4KICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiByZWRpcmVjdF9odHRwKHN0cmluZyAkdXJsID0gJycsYm9vbCAkZm9yY2UgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiggZW1wdHkoJHVybCkgKSAkdXJsID0geHRfdXJsOjpjdXJyZW50X3VybCgpOwoKICAgICAgICBpZiggc3RhcnRzd2l0aCggJHVybCwgJ2h0dHA6JyApICkgewogICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvLgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyRjb25maWcgPSBDbXNBcHA6OmdldF9pbnN0YW5jZSgpLT5HZXRDb25maWcoKTsKICAgICAgICAkY29uZmlnID0gXENNU01TRXh0XGNvbmZpZzo6R2V0SW5zdGFuY2UoKTsKICAgICAgICBpZiggJGZvcmNlICkgewogICAgICAgICAgICAkbmV3X3VybCA9IHN0cl9yZXBsYWNlKCdodHRwczonLCdodHRwOicsJHVybCk7CiAgICAgICAgICAgIHJlZGlyZWN0KCRuZXdfdXJsKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmKCBzdGFydHN3aXRoKCAkdXJsLCAkY29uZmlnWydzc2xfdXJsJ10gKSAmJiBpc3NldCgkY29uZmlnWydzc2xfdXJsJ10pICkgewogICAgICAgICAgICAgICAgJG5ld191cmwgPSBzdHJfcmVwbGFjZSgkY29uZmlnWydzc2xfdXJsJ10sJGNvbmZpZ1sncm9vdF91cmwnXSwkdXJsKTsKICAgICAgICAgICAgICAgIHJlZGlyZWN0KCRuZXdfdXJsKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gcmVkaXJlY3Rfd2l0aF9lcnJvcihzdHJpbmcgJHJldHVybmlkLHN0cmluZyAkbWVzc2FnZSxpbnQgJGVycm9yPTEpCiAgICB7CiAgICAgICAgJG1vZCA9IHh0X3V0aWxzOjpnZXRfbW9kdWxlKCk7CiAgICAgICAgJG1vZC0+UmVkaXJlY3QoICRpZCwgJ3Nob3dtZXNzYWdlJywgJHJldHVybmlkLCBbJ3h0X21zZycgPT4gJG1lc3NhZ2UsICd4dF9lcnJvcicgPT4gKGludCkkZXJyb3JdKTsKICAgIH0KCn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiMK]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_session.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB4dF9zZXNzaW9uIGNsYXNzLgogKgogKiBAcGFja2FnZSAgIENNU01TRXh0CiAqIEBjYXRlZ29yeSAgVXRpbGl0aWVzCiAqIEBhdXRob3IgICAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxMCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCgovKioKICogQSBzaW1wbGUgY2xhc3MgZm9yIHN0b3JpbmcsIGFuZCByZXRyaWV2aW5nIGRhdGEgZnJvbSB0aGUgc2Vzc2lvbi4KICoKICogU2FtcGxlIFVzYWdlOjxici8+CiAqIDxjb2RlPgogKiAkc2VzcyA9IG5ldyB4dF9zZXNzaW9uKF9fRklMRV9fKTs8YnIvPgogKiAkc2Vzcy0+cHV0KCdmb28nLCdiYXInKTs8YnIvPgogKiAkZm9vID0gJHNlc3MtPmdldCgnZm9vJyk7CiAqIDwvY29kZT4KICovCmNsYXNzIHh0X3Nlc3Npb24KewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9rZXluYW1lOwogICAgCiAgICAvKioKICAgICAqIENvbnN0cnVjdG9yLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleW5hbWUgQW4gb3B0aW9uYWwgcHJpbWFyeSBrZXkgZm9yIHRoZSBzZXNzaW9uIGRhdGEuICBUaGUga2V5IGlzIHVzZWZ1bCBmb3IgcHJldmVudGluZyBjb25mbGljdHMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgaW4gc2Vzc2lvbiBkYXRhIHN0b3JlZCBieSBkaWZmZXJlbnQgbW9kdWxlcyBvciBhY3Rpb25zLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGtleW5hbWUgPSBOVUxMKQogICAgewogICAgICAgICRrZXluYW1lID0gdHJpbSgoc3RyaW5nKSRrZXluYW1lKTsKICAgICAgICBpZighJGtleW5hbWUpCiAgICAgICAgewogICAgICAgICAgICAka2V5bmFtZSA9ICdzJyAuIG1kNShfX0ZJTEVfXyk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5fa2V5bmFtZSA9ICRrZXluYW1lOwogICAgfQogICAgCiAgICAvKioKICAgICAqIENsZWFyIG9yIGVyYXNlIGEgc2Vzc2lvbiB2YXJpYWJsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIHNlc3Npb24gdmFyaWFibGUgdG8gZXJhc2UuICBJZiBubyBkYXRhIGlzIHNwZWNpZmllZCwgYWxsIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcmltYXJ5CiAgICAgKiAgICAgICAgICAgICAgICAgICAga2V5IHdpbGwgYmUgZXJhc2VkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXIoJGtleSA9ICcnKQogICAgewogICAgICAgICRrZXkgPSB0cmltKChzdHJpbmcpJGtleSk7CiAgICAgICAgaWYoZW1wdHkoJGtleSkpCiAgICAgICAgewogICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bJHRoaXMtPl9rZXluYW1lXSk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHVuc2V0KCRfU0VTU0lPTlskdGhpcy0+X2tleW5hbWVdWyRrZXldKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIC8qKgogICAgICogU2V0IGEgc2Vzc2lvbiB2YXJpYWJsZS4KICAgICAqIFRoaXMgaXMgYW4gYWxpYXMgZm9yIHRoZSBwdXQgbWV0aG9kLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIG1peGVkICAkdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldCgka2V5LCAkdmFsdWUpCiAgICB7CiAgICAgICAgJHRoaXMtPnB1dCgka2V5LCAkdmFsdWUpOwogICAgfQogICAgCiAgICAvKioKICAgICAqIFNldCBhIHNlc3Npb24gdmFyaWFibGUuCiAgICAgKiBUaGlzIGlzIGFuIGFsaWFzIGZvciB0aGUgcHV0IG1ldGhvZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBtaXhlZCAgJHZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwdXQoJGtleSwgJHZhbHVlKQogICAgewogICAgICAgICRrZXkgPSB0cmltKChzdHJpbmcpJGtleSk7CiAgICAgICAgaWYoIWlzc2V0KCRfU0VTU0lPTlskdGhpcy0+X2tleW5hbWVdKSkKICAgICAgICB7CiAgICAgICAgICAgICRfU0VTU0lPTlskdGhpcy0+X2tleW5hbWVdID0gW107CiAgICAgICAgfQogICAgICAgICRfU0VTU0lPTlskdGhpcy0+X2tleW5hbWVdWyRrZXldID0gJHZhbHVlOwogICAgfQogICAgCiAgICAvKioKICAgICAqIFRlc3QgaWYgYSBzZXNzaW9uIHZhcmlhYmxlIGV4aXN0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4aXN0cygka2V5KQogICAgewogICAgICAgICRrZXkgPSB0cmltKChzdHJpbmcpJGtleSk7CiAgICAgICAgaWYoIWlzc2V0KCRfU0VTU0lPTlskdGhpcy0+X2tleW5hbWVdKSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICB9CiAgICAgICAgaWYoIWlzc2V0KCRfU0VTU0lPTlskdGhpcy0+X2tleW5hbWVdWyRrZXldKSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogUmV0cmlldmUgYSBzZXNzaW9uIHZhcmlhYmxlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIG1peGVkICAkZGZsdHZhbHVlIFRoZSBkZWZhdWx0IHZhbHVlIHRvIHJldHVybiBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIHNlc3Npb24uCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KCRrZXksICRkZmx0dmFsdWUgPSBOVUxMKQogICAgewogICAgICAgICRrZXkgPSB0cmltKChzdHJpbmcpJGtleSk7CiAgICAgICAgaWYoIWlzc2V0KCRfU0VTU0lPTlskdGhpcy0+X2tleW5hbWVdKSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkZGZsdHZhbHVlOwogICAgICAgIH0KICAgICAgICBpZighaXNzZXQoJF9TRVNTSU9OWyR0aGlzLT5fa2V5bmFtZV1bJGtleV0pKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRkZmx0dmFsdWU7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiAkX1NFU1NJT05bJHRoaXMtPl9rZXluYW1lXVska2V5XTsKICAgIH0KICAgIAp9IC8vIGVuZCBvZiBjbGFzcwoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_setup.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgZmFjdG9yeSBjbGFzcyB0byByZXR1cm4gb2JqZWN0cyBzZXR1cCB3aXRoIHNvbWUgaW50ZXJuYWwgZGVmYXVsdHMKICogb3Igc29tZSBwcmVmZXJlbmNlcy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IFV0aWxpdGllcwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCnVzZSBDTVNNU0V4dFx3YXRlcm1hcmtlcjsKdXNlIENNU01TRXh0XGludGVybmFsXHNldHRpbmdzOwoKLyoqCiAqIEEgZmFjdG9yeSBjbGFzcyB0byByZXR1cm4gb2JqZWN0cyBzZXR1cCB3aXRoIHNvbWUgaW50ZXJuYWwgZGVmYXVsdHMKICogb3Igc29tZSBwcmVmZXJlbmNlcy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICovCmZpbmFsIGNsYXNzIHh0X3NldHVwCnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkX2luc3RhbmNlOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRzZXR0aW5nczsKCgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJGNvbmZpZzsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkbW9kdWxlX3BhdGg7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY29uZmlnLCBzZXR0aW5ncyAkc2V0dGluZ3MsIHN0cmluZyAkbW9kdWxlX3BhdGgpCiAgICB7CiAgICAgICAgaWYoIHNlbGY6OiRfaW5zdGFuY2UgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdPbmx5IG9uZSBpbnN0YW5jZSBvZiAnLl9fQ0xBU1NfXy4nIGlzIHBlcm1pdHRlZCcpOwogICAgICAgIHNlbGY6OiRfaW5zdGFuY2UgPSAkdGhpczsKCiAgICAgICAgJHRoaXMtPmNvbmZpZyA9ICRjb25maWc7CiAgICAgICAgJHRoaXMtPnNldHRpbmdzID0gJHNldHRpbmdzOwogICAgICAgICR0aGlzLT5tb2R1bGVfcGF0aCA9ICRtb2R1bGVfcGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhIG5ldyB3YXRlcm1hcmtlciBvYmplY3QgZmlsbGVkIHdpdGggbW9kdWxlIHByZWZlcmVuY2VzLgogICAgICoKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKiBAcmV0dXJuIHh0X3dhdGVybWFyawogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF93YXRlcm1hcmtlcigpIDogQ01TTVNFeHRcd2F0ZXJtYXJrZXIKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6JF9pbnN0YW5jZS0+Y3JlYXRlX3dhdGVybWFya2VyKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBuZXcgd2F0ZXJtYXJrZXIgb2JqZWN0IGZpbGxlZCB3aXRoIG1vZHVsZSBwcmVmZXJlbmNlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHh0X3dhdGVybWFyawogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlX3dhdGVybWFya2VyKCkgOiBDTVNNU0V4dFx3YXRlcm1hcmtlcgogICAgewogICAgICAgICR0eHQgPSAkdGhpcy0+c2V0dGluZ3MtPndhdGVybWFya190ZXh0OwogICAgICAgICRpbWcgPSAkdGhpcy0+c2V0dGluZ3MtPndhdGVybWFya19maWxlOwoKICAgICAgICAkb2JqID0gbmV3IFxDTVNNU0V4dFx3YXRlcm1hcmtlcjsKICAgICAgICBpZiggIWVtcHR5KCRpbWcpICkgewogICAgICAgICAgICAkZm4gPSAkdGhpcy0+Y29uZmlnWyd1cGxvYWRzX3BhdGgnXS4nLycuJGltZzsKICAgICAgICAgICAgaWYoICFpc19maWxlKCRmbikgKSAkZm4gPSAkdGhpcy0+Y29uZmlnWydhc3NldHNfcGF0aCddLicvJy4kaW1nOwogICAgICAgICAgICBpZiggIWlzX2ZpbGUoJGZuKSApIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0NvdWxkIG5vdCBmaW5kIHdhdGVybWFyayBpbWFnZSAnLiRpbWcpOwogICAgICAgICAgICAkb2JqLT5zZXRfd2F0ZXJtYXJrX2ltYWdlKCRmbik7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYoICFlbXB0eSgkdHh0KSApIHsKICAgICAgICAgICAgJGZvbnRfcGF0aHMgPSBudWxsOwogICAgICAgICAgICAkZm9udF9wYXRoc1tdID0gJHRoaXMtPmNvbmZpZ1snYXNzZXRzX3BhdGgnXS4nL2ZvbnRzLycuJHRoaXMtPnNldHRpbmdzLT53YXRlcm1hcmtfZm9udDsKICAgICAgICAgICAgJGZvbnRfcGF0aHNbXSA9ICR0aGlzLT5jb25maWdbJ2Fzc2V0c19wYXRoJ10uJy8nLiR0aGlzLT5zZXR0aW5ncy0+d2F0ZXJtYXJrX2ZvbnQ7CiAgICAgICAgICAgICRmb250X3BhdGhzW10gPSAkdGhpcy0+bW9kdWxlX3BhdGguJy9mb250cy8nLiR0aGlzLT5zZXR0aW5ncy0+d2F0ZXJtYXJrX2ZvbnQ7CiAgICAgICAgICAgICRmbmQgPSBudWxsOwogICAgICAgICAgICBmb3JlYWNoKCAkZm9udF9wYXRocyBhcyAkb25lICkgewogICAgICAgICAgICAgICAgaWYoIGlzX2ZpbGUoJG9uZSkgKSB7CiAgICAgICAgICAgICAgICAgICAgJG9iai0+c2V0X2ZvbnQoJG9uZSk7CiAgICAgICAgICAgICAgICAgICAgJGZuZCA9ICRvbmU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJG9iai0+c2V0X3dhdGVybWFya190ZXh0KCR0eHQpOwogICAgICAgICAgICAkb2JqLT5zZXRfdGV4dF9zaXplKCR0aGlzLT5zZXR0aW5ncy0+d2F0ZXJtYXJrX3RleHRzaXplKTsKICAgICAgICAgICAgJG9iai0+c2V0X3RleHRfYW5nbGUoJHRoaXMtPnNldHRpbmdzLT53YXRlcm1hcmtfdGV4dGFuZ2xlKTsKICAgICAgICAgICAgJHRtcCA9ICR0aGlzLT5zZXR0aW5ncy0+d2F0ZXJtYXJrX3RleHRjb2xvcjsKICAgICAgICAgICAgJHIgPSBoZXhkZWMoc3Vic3RyKCR0bXAsMSwyKSk7ICRnID0gaGV4ZGVjKHN1YnN0cigkdG1wLDMsMikpOyAkYiA9IGhleGRlYyhzdWJzdHIoJHRtcCw1LDIpKTsKICAgICAgICAgICAgJG9iai0+c2V0X3RleHRfY29sb3IoJHIsJGcsJGIpOwogICAgICAgICAgICAkdG1wID0gJHRoaXMtPnNldHRpbmdzLT53YXRlcm1hcmtfYmdjb2xvcjsKICAgICAgICAgICAgJHIgPSBoZXhkZWMoc3Vic3RyKCR0bXAsMSwyKSk7ICRnID0gaGV4ZGVjKHN1YnN0cigkdG1wLDMsMikpOyAkYiA9IGhleGRlYyhzdWJzdHIoJHRtcCw1LDIpKTsKICAgICAgICAgICAgJG9iai0+c2V0X2JhY2tncm91bmRfY29sb3IoJHIsICRnLCAkYiwgJHRoaXMtPnNldHRpbmdzLT53YXRlcm1hcmtfdHJhbnNwYXJlbnQpOwogICAgICAgIH0KCiAgICAgICAgJG9iai0+c2V0X2FsaWdubWVudCgkdGhpcy0+c2V0dGluZ3MtPndhdGVybWFya19hbGlnbm1lbnQpOwogICAgICAgICRvYmotPnNldF90cmFuc2x1Y2VuY3koJHRoaXMtPnNldHRpbmdzLT53YXRlcm1hcmtfdHJhbnNsdWNlbmN5KTsKICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhIG5ldyBvYmplY3QgZm9yIGhhbmRsaW5nIHVwbG9hZHMgZmlsbGVkIHdpdGggc2V0dGluZ3MgZGVmaW5lZCBpbgogICAgICogdGhlIG1vZHVsZSBhZG1pbiBwYW5lbC4KICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICogQHBhcmFtIHN0cmluZyAkcHJlZml4IEFuIG9wdGlvbmFsIHByZWZpeCBmb3IgYWxsIHVwbG9hZCBmaWxlIGtleXMKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlc3RkaXIgVGhlIG9wdGlvbmFsIGRlc3RpbmF0aW9uIGRpcmVjdG9yeS4gIElmIHNwZWNpZmllZCB0aGlzIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBkZXN0aW5hdGlvbiBkaXJlY3RvcnkuCiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X3VwbG9hZGVyKHN0cmluZyAkcHJlZml4ID0gJycsIHN0cmluZyAkZGVzdGRpciA9ICcnKSA6IHh0X3VwbG9hZGVyCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OiRfaW5zdGFuY2UtPmNyZWF0ZV91cGxvYWRlcigkcHJlZml4LCAkZGVzdGRpcik7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBuZXcgb2JqZWN0IGZvciBoYW5kbGluZyB1cGxvYWRzIGZpbGxlZCB3aXRoIHNldHRpbmdzIGRlZmluZWQgaW4KICAgICAqIHRoZSBtb2R1bGUgYWRtaW4gcGFuZWwuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcHJlZml4IEFuIG9wdGlvbmFsIHByZWZpeCBmb3IgYWxsIHVwbG9hZCBmaWxlIGtleXMKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlc3RkaXIgVGhlIG9wdGlvbmFsIGRlc3RpbmF0aW9uIGRpcmVjdG9yeS4gIElmIHNwZWNpZmllZCB0aGlzIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBkZXN0aW5hdGlvbiBkaXJlY3RvcnkuCiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlX3VwbG9hZGVyKHN0cmluZyAkcHJlZml4ID0gJycsc3RyaW5nICRkZXN0ZGlyID0gJycpIDogeHRfdXBsb2FkZXIKICAgIHsKICAgICAgICAkaW5zdCA9IHNlbGY6OiRfaW5zdGFuY2U7CiAgICAgICAgJHdhdGVybWFya2VyID0gbnVsbDsKICAgICAgICBpZiggJGluc3QtPnNldHRpbmdzLT5hbGxvd193YXRlcm1hcmtpbmcgKSAkd2F0ZXJtYXJrZXIgPSAkaW5zdC0+Y3JlYXRlX3dhdGVybWFya2VyKCk7CiAgICAgICAgJG9iaiA9IG5ldyB4dF91cGxvYWRlcigkcHJlZml4LCAkZGVzdGRpciwgJHdhdGVybWFya2VyKTsKICAgICAgICAkb2JqLT5zZXRfYWNjZXB0ZWRfZmlsZXR5cGVzKCRpbnN0LT5zZXR0aW5ncy0+dXBsb2FkX2FsbG93ZWRfZmlsZXR5cGVzKTsKICAgICAgICAkb2JqLT5zZXRfYWNjZXB0ZWRfaW1hZ2V0eXBlcygkaW5zdC0+c2V0dGluZ3MtPmltYWdleHRlbnNpb25zKTsKICAgICAgICAkb2JqLT5zZXRfcHJldmlldygkaW5zdC0+c2V0dGluZ3MtPmFsbG93X3Jlc2l6aW5nKTsKICAgICAgICAkb2JqLT5zZXRfcHJldmlld19zaXplKCRpbnN0LT5zZXR0aW5ncy0+cmVzaXplaW1hZ2UpOwogICAgICAgICRvYmotPnNldF90aHVtYm5haWwoJGluc3QtPnNldHRpbmdzLT5hbGxvd190aHVtYm5haWxpbmcpOwogICAgICAgICRvYmotPnNldF90aHVtYm5haWxfc2l6ZSgkaW5zdC0+c2V0dGluZ3MtPnRodW1ibmFpbHNpemUpOwogICAgICAgICRvYmotPnNldF9kZWxldGVfb3JpZygkaW5zdC0+c2V0dGluZ3MtPmRlbGV0ZV9vcmlnX2ltYWdlKTsKICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KfSAvLyBlbmQgb2YgY2xhc3MKCiMKIyBFT0YKIwo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_smartcache_handler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgY2xhc3MgdG8gYWlkZSBpbiBjYWNoaW5nIGRhdGEgaW4gYSBrZXkgdmFsdWUgbWVjaGFuaXNtLgogKiBCeSBkZWZhdWx0IHRoaXMgY2xhc3MgdXNlcyB0aGUgY21zX2ZpbGVjYWNoZV9kcml2ZXIgYXMgYSBkcml2ZXIuICBIb3dldmVyLCBhbnkgY2xhc3MgdGhhdCBleHRlbmRzIGNtc19jYWNoZV9kcml2ZXIgd2lsbCB3b3JrLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKiBAY2F0ZWdvcnkgVXRpbGl0aWVzCiAqIEBhdXRob3IgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwoKLyoqCiAqIEEgY2xhc3MgdG8gYWlkZSBpbiBjYWNoaW5nIGRhdGEgaW4gYSBrZXkgdmFsdWUgbWVjaGFuaXNtLgogKiBCeSBkZWZhdWx0IHRoaXMgY2xhc3MgdXNlcyB0aGUgY21zX2ZpbGVjYWNoZV9kcml2ZXIgYXMgYSBkcml2ZXIuICBIb3dldmVyLCBhbnkgY2xhc3MgdGhhdCBleHRlbmRzIGNtc19jYWNoZV9kcml2ZXIgd2lsbCB3b3JrLgogKgogKiBAZGVwcmVjYXRlZAogKiBAcGFja2FnZSBDTVNNU0V4dAogKiBAc2VlIGNtc19maWxlY2FjaGVfZHJpdmVyCiAqLwpjbGFzcyB4dF9zbWFydGNhY2hlX2hhbmRsZXIKewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9ncm91cCA9ICcnOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfZXhwaXJ5ID0gMzYwMDsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2RyaXZlcjsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdG9yLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0cyBBcnJheSBvZiBvcHRpb25zLiAgIFBvc3NpYmxlIG9wdGlvbnMgYXJlOgogICAgICogICAgY2FjaGVfZGlyIC0gVGhlIGFic29sdXRlIGRpcmVjdG9yeSBvZiB0aGUgY2FjaGUgbG9jYXRpb24gKHBhc3NlZCB0byB0aGUgZHJpdmVyKQogICAgICogICAgZHJpdmVyICAgIC0gVGhlIG5hbWUgb2YgdGhlIGRyaXZlciBjbGFzcyB0byB1c2UgKGNtc19maWxlY2FjaGVfZHJpdmVyIGlzIHRoZSBkZWZhdWx0KQogICAgICogICAgZ3JvdXAgICAgIC0gVGhlIG5hbWUgb2YgYSBncm91cCAoc29ydCBvZiBuYW1lc3BhY2UpIHRvIHN1YnNldCBrZXlzIGludG8KICAgICAqICAgIGxpZmV0aW1lICAtIFRoZSBsaWZldGltZSBvZiB0aGUgY2FjaGVkIHZhbHVlcyAoaW4gc2Vjb25kcykKICAgICAqICAgIGF1dG9jbGVhbiAtIFdoZXRoZXIgdGhlIGNhY2hlIGRyaXZlciBzaG91bGQgYXV0b21hdGljYWxseSBjbGVhbiB1cCBleHBpcmVkIHZhbHVlcwogICAgICogICAgbG9ja2luZyAgIC0gV2hldGhlciB0aGUgY2FjaGUgZHJpdmVyIHNob3VsZCBlbXBsb3kgbG9ja2luZyAoaWYgcG9zc2libGUpCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkb3B0cyA9IG51bGwpCiAgICB7CiAgICAgICAgJGRyaXZlcl9jbGFzcyA9ICdjbXNfZmlsZWNhY2hlX2RyaXZlcic7CiAgICAgICAgJGRyaXZlcl9vcHRzID0gYXJyYXkoJ2NhY2hlX2Rpcic9PlRNUF9DQUNIRV9MT0NBVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGlmZXRpbWUnPT4zNjAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsb2NraW5nJz0+MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXV0b2NsZWFuJz0+MSk7CgogICAgICAgIGlmKCBpc19hcnJheSgkb3B0cykgJiYgY291bnQoJG9wdHMpICkgewogICAgICAgICAgICBmb3JlYWNoKCAkb3B0cyBhcyAka2V5ID0+ICR2YWx1ZSApIHsKICAgICAgICAgICAgICAgIHN3aXRjaCggJGtleSApIHsKICAgICAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzoKICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSB0cmltKCR2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgaWYoICFpc19zdHJpbmcoJHZhbHVlKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignR3JvdXAgJy4kdmFsdWUuJyBpcyBpbnZhbGlkJyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5fZ3JvdXAgPSAkdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAnZHJpdmVyJzoKICAgICAgICAgICAgICAgICAgICBpZiggIWNsYXNzX2V4aXN0cygkdmFsdWUpICkgewogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdEcml2ZXIgJy4kdmFsdWUuJyBub3Qgc3BlY2lmaWVkJyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRkcml2ZXJfY2xhc3MgPSAkdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAnY2FjaGVfZGlyJzoKICAgICAgICAgICAgICAgICAgICBpZiggIWlzX3dyaXRhYmxlKCR2YWx1ZSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0RpcmVjdG9yeSAnLiR2YWx1ZS4nIGlzIG5vdCB3cml0YWJsZScpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkZHJpdmVyX29wdHNbJ2NhY2hlX2RpciddID0gJHZhbHVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgJ2xpZmV0aW1lJzoKICAgICAgICAgICAgICAgICAgICBpZiggIWlzX2ludCgkdmFsdWUpICkgewogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdMaWZldGltZSAnLiR2YWx1ZS4nIGlzIGludmFsaWQnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHZhbHVlID0gbWF4KDMwLG1pbigxMiozNjAwLCR2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICRkcml2ZXJfb3B0c1snbGlmZXRpbWUnXSA9ICR2YWx1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlICdsb2NraW5nJzoKICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSAoaW50KSR2YWx1ZTsKICAgICAgICAgICAgICAgICAgICBpZiggJHZhbHVlID4gMCApICR2YWx1ZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgJGRyaXZlcl9vcHRzWydsb2NraW5nJ10gPSAkdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAnYXV0b2NsZWFuJzoKICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSAoaW50KSR2YWx1ZTsKICAgICAgICAgICAgICAgICAgICBpZiggJHZhbHVlID4gMCApICR2YWx1ZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgJGRyaXZlcl9vcHRzWydhdXRvY2xlYW4nXSA9ICR2YWx1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPl9kcml2ZXIgPSBuZXcgJGRyaXZlcl9jbGFzcygkZHJpdmVyX29wdHMpOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBncm91cCAobmFtZXNwYWNlKSB0byBzdG9yZSB2YXJpYWJsZXMgaW4uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZ3JvdXAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF9ncm91cCgkZ3JvdXApCiAgICB7CiAgICAgICAgaWYoICFpc19hcnJheSgkZ3JvdXApICYmICFpc19vYmplY3QoJGdyb3VwKSApICR0aGlzLT5fZ3JvdXAgPSAkZ3JvdXA7CiAgICB9CgogICAgLyoqCiAgICAgKiBDbGVhciBhbGwgY2FjaGVkIGRhdGEuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZ3JvdXAgQW4gb3B0aW9uYWwgZ3JvdXAgbmFtZS4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IGdyb3VwIGlzIHVzZWQuCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGNsZWFyKCRncm91cCA9ICcnKQogICAgewogICAgICAgIGlmKCBpc19vYmplY3QoJHRoaXMtPl9kcml2ZXIpICkgewogICAgICAgICAgICBpZiggISRncm91cCApICRncm91cCA9ICR0aGlzLT5fZ3JvdXA7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X2RyaXZlci0+Y2xlYXIoJGdyb3VwKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBzcGVjaWZpZWQgY2FjaGVkIGRhdGEgdmFsdWUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleQogICAgICogQHBhcmFtIHN0cmluZyAkZ3JvdXAgQW4gb3B0aW9uYWwgZ3JvdXAuICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgY3VycmVudCBncm91cCB2YWx1ZSBpcyB1c2VkLgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0KCRrZXksJGdyb3VwID0gJycpCiAgICB7CiAgICAgICAgaWYoIGlzX29iamVjdCgkdGhpcy0+X2RyaXZlcikgKSB7CiAgICAgICAgICAgIGlmKCAhJGdyb3VwICkgJGdyb3VwID0gJHRoaXMtPl9ncm91cDsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5fZHJpdmVyLT5nZXQoJGtleSwkZ3JvdXApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFRlc3QgaWYgdGhlIHNwZWNpZmllZCBkYXRhIHZhbHVlIGV4aXN0cyB3aXRoaW4gdGhlIGNhY2hlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRncm91cCBBbiBvcHRpb25hbCBncm91cC4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IGdyb3VwIHZhbHVlIGlzIHVzZWQuCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGV4aXN0cygka2V5LCRncm91cCA9ICcnKQogICAgewogICAgICAgIGlmKCBpc19vYmplY3QoJHRoaXMtPl9kcml2ZXIpICkgewogICAgICAgICAgICBpZiggISRncm91cCApICRncm91cCA9ICR0aGlzLT5fZ3JvdXA7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X2RyaXZlci0+ZXhpc3RzKCRrZXksJGdyb3VwKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQoKICAgIC8qKgogICAgICogRXJhc2UgdGhlIHNwZWNpZmllZCBkYXRhIHZhbHVlIGZyb20gdGhlIGNhY2hlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRncm91cCBBbiBvcHRpb25hbCBncm91cC4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IGdyb3VwIHZhbHVlIGlzIHVzZWQuCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBlcmFzZSgka2V5LCRncm91cCA9ICcnKQogICAgewogICAgICAgIGlmKCBpc19vYmplY3QoJHRoaXMtPl9kcml2ZXIpICkgewogICAgICAgICAgICBpZiggISRncm91cCApICRncm91cCA9ICR0aGlzLT5fZ3JvdXA7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X2RyaXZlci0+ZXJhc2UoJGtleSwkZ3JvdXApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFN0b3JlIGRhdGEgaW50byB0aGUgY2FjaGUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBtaXhlZCAgJHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRncm91cCBBbiBvcHRpb25hbCBncm91cC4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IGdyb3VwIHZhbHVlIGlzIHVzZWQuCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXQoJGtleSwkdmFsdWUsJGdyb3VwID0gJycpCiAgICB7CiAgICAgICAgaWYoIGlzX29iamVjdCgkdGhpcy0+X2RyaXZlcikgKSB7CiAgICAgICAgICAgIGlmKCAhJGdyb3VwICkgJGdyb3VwID0gJHRoaXMtPl9ncm91cDsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5fZHJpdmVyLT5zZXQoJGtleSwkdmFsdWUsJGdyb3VwKTsKICAgICAgICB9CiAgICB9Cn0gLy8gZW5kIG9mIGNsYXNzCgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_string.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgc2V0IG9mIHN0cmluZyB1dGlsaXR5IGZ1bmN0aW9ucy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IFV0aWxpdGllcwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCi8qKgogKiBBIHNldCBvZiBzdHJpbmcgdXRpbGl0eSBmdW5jdGlvbnMuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqLwpmaW5hbCBjbGFzcyB4dF9zdHJpbmcKewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQSBzaW1wbGUgdXRpbGl0eSBmdW5jdGlvbiB0byBtYXNrIHRoZSBmaXJzdCBOIGNoYXJhY3RlcnMgb2YgYW4gaW5wdXQgc3RyaW5nCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaW5zdHIgVGhlIGlucHV0IHN0cmluZwogICAgICogQHBhcmFtIGludCAkbnVtY2hhcnMgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIG1hc2sKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1hc2sgVGhlIG1hc2sgY2hhcmFjdGVyCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1hc2tfc3RyaW5nKHN0cmluZyAkaW5zdHIsaW50ICRudW1jaGFycyxzdHJpbmcgJG1hc2sgPSAnKicpCiAgICB7CiAgICAgICAgaWYoIGVtcHR5KCRtYXNrKSApIHJldHVybiAkaW5zdHI7CiAgICAgICAgaWYoIHN0cmxlbigkbWFzaykgPiAxICkgJG1hc2sgPSAkbWFza1swXTsKICAgICAgICBpZiggJG51bWNoYXJzIDwgMCApICRudW1jaGFycyA9IHN0cmxlbigkaW5zdHIpICsgJG51bWNoYXJzOwogICAgICAgICRudW1jaGFycyA9IG1pbigkbnVtY2hhcnMsc3RybGVuKCRpbnN0cikpOwogICAgICAgIGlmKCAkbnVtY2hhcnMgPT0gMCApIHJldHVybiAkaW5zdHI7CgogICAgICAgIGZvciggJGkgPSAwOyAkaSA8ICRudW1jaGFyczsgJGkrKyApIHsKICAgICAgICAgICAgJGluc3RyWyRpXSA9ICRtYXNrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGluc3RyOwogICAgfQoKICAgIC8qKgogICAgICogVHJ1bmNhdGUgdGhlIGlucHV0IHN0cmluZyBhZnRlciBOIHdvcmRzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0ciBUaGUgaW5wdXQgc3RyaW5nCiAgICAgKiBAcGFyYW0gaW50ICRsaW1pdCBUaGUgd29yZCBsaW1pdAogICAgICogQHBhcmFtIHN0cmluZyAkZW5kX2NoYXIgSG93IHRvIHRlcm1pbmF0ZSB0aGUgb3V0cHV0IHN0cmluZwogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB3b3JkX2xpbWl0ZXIoc3RyaW5nICRzdHIsIGludCAkbGltaXQgPSAxMDAsIHN0cmluZyAkZW5kX2NoYXIgPSAnLi4uJykKICAgIHsKICAgICAgICBpZiAodHJpbSgkc3RyKSA9PSAnJykgcmV0dXJuICRzdHI7CiAgICAgICAgcHJlZ19tYXRjaCgnL15ccyooPzpcUytccyopezEsJy4gKGludCkgJGxpbWl0IC4nfS8nLCAkc3RyLCAkbWF0Y2hlcyk7CiAgICAgICAgaWYgKHN0cmxlbigkbWF0Y2hlc1swXSkgPT0gc3RybGVuKCRzdHIpKSAkZW5kX2NoYXIgPSAnJzsKICAgICAgICByZXR1cm4gcnRyaW0oJG1hdGNoZXNbMF0pIC4gJGVuZF9jaGFyOwogICAgfQoKICAgIC8qKgogICAgICogR2l2ZW4gYW4gaW5wdXQgc3RyaW5nIGluIHRoZSBmb3JtYXQgb2YgIyMjW0dnTW1La10gY29udmVydCBpdCBpbnRvIGEgYnl0ZSBjb3VudC4KICAgICAqIEVhY2gga2lsb2J5dGUgaXMgMTAyNCBidXRlcy4gIEVhY2ggbWVnYWJ5dGUgaXMgMTAyNCBraWxvYnl0ZXMuICBBbmQgZWFjaCBHaWdhYnl0ZSBpcyAxMDI0IG1lZ2FieXRlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWwKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RyX3RvX2J5dGVzKHN0cmluZyAkdmFsKQogICAgewogICAgICAgIGlmKGlzX3N0cmluZygkdmFsKSAmJiAkdmFsICE9ICcnKSB7CiAgICAgICAgICAgICR2YWwgPSB0cmltKCR2YWwpOwogICAgICAgICAgICAkaXZhbCA9IChpbnQpICR2YWw7CiAgICAgICAgICAgICRsYXN0ID0gc3RydG9sb3dlcihzdWJzdHIoJHZhbCwgc3RybGVuKCRpdmFsKSwgMSkpOwogICAgICAgICAgICBzd2l0Y2goJGxhc3QpIHsKICAgICAgICAgICAgY2FzZSAnZyc6CiAgICAgICAgICAgICAgICAkaXZhbCAqPSAxMDI0OwogICAgICAgICAgICBjYXNlICdtJzoKICAgICAgICAgICAgICAgICRpdmFsICo9IDEwMjQ7CiAgICAgICAgICAgIGNhc2UgJ2snOgogICAgICAgICAgICAgICAgJGl2YWwgKj0gMTAyNDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRpdmFsOwogICAgfQoKICAgIC8qKgogICAgICogVGVzdCB0aGF0IHRoZSBzdHJpbmcgY29udGFpbnMgY2hhcmFjdGVycyB0aGF0IGFyZSBzYWZlIGZvciBzbWFydHkgdmFyaWFibGVzLgogICAgICoKICAgICAqIGkuZTogIHVuZGVyc2NvcmVzLCBhbmQgYWxwaGFudW1lcmljcywgYW5kIHN0YXJ0cyB3aXRoIGFuIHVuZGVyc2NvcmUgYW5kL29yIGFscGhhYmV0aWMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc19zbWFydHlfc2FmZShzdHJpbmcgJHN0cmluZykKICAgIHsKICAgICAgICByZXR1cm4gcHJlZ19tYXRjaCgnL15bX0EtWl1bX0EtWjAtOV0qJC9pJywkc3RyaW5nKTsKICAgIH0KCgogICAgLyoqCiAgICAgKiBDb252ZXJ0IGEgbG9jYWxlIHNwZWNpZmljIHN0cmluZyB0byBhIGZsb2F0CiAgICAgKgogICAgICogQGRlcHJlY2F0ZWQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGluIFRoZSBmbG9hdCB2YWx1ZSB0byBjb252ZXJ0LgogICAgICogQHJldHVybiBmbG9hdAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRvX2Zsb2F0KHN0cmluZyAkaW4pCiAgICB7CiAgICAgICAgaWYoIGlzX2Zsb2F0KCRpbikgKSByZXR1cm4gJGluOwogICAgICAgIGlmKCAhaXNfc3RyaW5nKCRpbikgKSAkaW4gPSAoc3RyaW5nKSAkaW47CiAgICAgICAgJGxjID0gbG9jYWxlY29udigpOwogICAgICAgICRkcCA9ICRsY1snZGVjaW1hbF9wb2ludCddOwogICAgICAgICR0cyA9ICRsY1sndGhvdXNhbmRzX3NlcCddOwogICAgICAgICR0bXAgPSBzdHJfcmVwbGFjZSgkdHMsJycsJGluKTsKICAgICAgICAkb3V0ID0gc3RyX3JlcGxhY2UoJGRwLCcuJywkdG1wKTsKICAgICAgICByZXR1cm4gKGZsb2F0KSAkb3V0OwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydCBhIGZsb2F0IHRvIGEgc3RyaW5nIGluIGxvY2FsZSBzcGVjaWZpYyBmb3JtYXQuCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICRpbgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0b19zdHJpbmcoZmxvYXQgJGluKQogICAgewogICAgICAgIGlmKCBpc19zdHJpbmcoJGluKSApIHJldHVybiAkaW47CiAgICAgICAgaWYoICFpc19mbG9hdCgkaW4pICkgcmV0dXJuICRpbjsKICAgICAgICByZXR1cm4gc3ByaW50ZignJUYnLCRpbik7CiAgICB9Cn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiMK]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_template_admin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB4dF90ZW1wbGF0ZV9hZG1pbiBjbGFzcy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IFV0aWxpdGllcwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCi8qKgogKiBUaGlzIGNsYXNzIHByb3ZpZGVzIG1ldGhvZHMgZm9yIGRpc3BsYXlpbmcgZm9ybXMgYW5kIHJlcG9ydHMgdGhhdCBhaWRlIGluIG1hbmFnaW5nIGEgbW9kdWxlJ3MgdGVtcGxhdGVzLgogKiBUaGlzIGNsYXNzIGFuZCB0aGUgYXBwcm9wcmlhdGUgd3JhcHBlciBmdW5jdGlvbnMgYXJlIGRlcHJlY2F0ZWQuICBUaGUgRGVzaWduTWFuZ2VyIG1vZHVsZSBhbmQgaXQncyByZWxhdGVkIGNsYXNzZXMKICogYXJlIGJldHRlciBzb2x1dGlvbnMgZm9yIHRoZXNlIGZ1bmN0aW9ucy4KICoKICogQGRlcHJlY2F0ZWQKICovCmZpbmFsIGNsYXNzIHh0X3RlbXBsYXRlX2FkbWluCnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEdldCBhIGZvcm0gZm9yIGRpc3BsYXlpbmcgYSAnc3RhcnQnIHRlbXBsYXRlLiAgQSBzdGFydCB0ZW1wbGF0ZQogICAgICogaXMgcmVhZCBmcm9tIGEgZmlsZSwgc3RvcmVkIGluIHRoZSBkYXRhYmFzZSwgYW5kIGlzIHVzZWQgd2hlbiBjcmVhdGluZwogICAgICogYSBuZXcgdGVtcGxhdGUgb2YgdGhhdCB0eXBlLgogICAgICoKICAgICAqIEBwYXJhbSBDTVNNb2R1bGUgJG1vZHVsZSBUaGUgbW9kdWxlIHRoYXQgdGhpcyB0ZW1wbGF0ZSBpcyBmb3IKICAgICAqIEBwYXJhbSBzdHJpbmcgICRpZCBUaGUgbW9kdWxlIGluc3RhbmNlIGlkLgogICAgICogQHBhcmFtIGludCAgICAgJHJldHVybmlkIFRoZSByZXR1cm5pZCAodXN1YWxseSBlbXB0eSkKICAgICAqIEBwYXJhbSBzdHJpbmcgICRwcmVmbmFtZSBUaGUgcHJlZmVyZW5jZSAocmVsYXRpdmUgdG8gdGhlIG1vZHVsZSBzdXBwbGllZCkgdGhhdCB3aWxsIGhvbGQgdGhpcyBzdGFydCB0ZW1wbGF0ZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgICRhY3Rpb24gVGhlIHJldHVybiBhY3Rpb24gKHVzdWFsbHkgZGVmYXVsdGFkbWluKQogICAgICogQHBhcmFtIHN0cmluZyAgJGFjdGl2ZV90YWIgVGhlIG5hbWUgb2YgdGhlIHRhYiB0byByZXR1cm4gdG8uCiAgICAgKiBAcGFyYW0gc3RyaW5nICAkdGl0bGUgIFRoZSB0aXRsZSBmb3IgdGhpcyBmb3JtLiAgVXN1YWxseSBpbmRpY2F0ZXMgdG8gdGhlIGFkbWluaXN0cmF0b3Igd2hhdCB0ZW1wbGF0ZSBoZSBpcyBlZGl0aW5nLgogICAgICogQHBhcmFtIHN0cmluZyAgJGZpbGVuYW1lIFRoZSBmaWxlIG5hbWUgKHJlbGF0aXZlIHRvIHRoZSBtb2R1bGVzIHRlbXBsYXRlcyBkaXJlY3RvcnkpIHdoZXJlIHRoZSBzeXN0ZW0gZGVmYXVsdCB2ZXJzaW9uIG9mIHRoZSAnc3RhcnQnIHRlbXBsYXRlIGlzLgogICAgICogQHBhcmFtIHN0cmluZyAgJGluZm8gVGhlIGluZm8gc3RyaW5nIGZvciB0aGUgZm9ybS4KICAgICAqIEBwYXJhbSBib29sICAgICRzaW1wbGUgQSBmbGFnIGluZGljYXRpbmcgYSBzaW1wbGUgZm9ybS4KICAgICAqIEByZXR1cm4gc3RyaW5nIEFuIEhUTUwgZm9ybS4KICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBnZXRfc3RhcnRfdGVtcGxhdGVfZm9ybSgmJG1vZHVsZSwkaWQsJHJldHVybmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHJlZm5hbWUsJGFjdGlvbiwkYWN0aXZlX3RhYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRpdGxlLCRmaWxlbmFtZSwkaW5mbyA9ICcnLCRzaW1wbGUgPSBmYWxzZSkKICAgIHsKICAgICAgICBzdGF0aWMgJGNvdW50ZXIgPSAwOwogICAgICAgICR4dGVuc2lvbnMgPSB4dF91dGlsczo6Z2V0X21vZHVsZSgnQ01TTVNFeHQnKTsKCiAgICAgICAgJHRoZV90ZW1wbGF0ZSA9ICRtb2R1bGUtPkdldFRlbXBsYXRlKCRwcmVmbmFtZSk7CiAgICAgICAgaWYoICEkdGhlX3RlbXBsYXRlICkgJHRoZV90ZW1wbGF0ZSA9ICRtb2R1bGUtPkdldFByZWZlcmVuY2UoJHByZWZuYW1lKTsKCiAgICAgICAgJHRwbCA9ICR4dGVuc2lvbnMtPkNyZWF0ZVNtYXJ0eVRlbXBsYXRlKCdlZGl0ZGVmYXVsdHRlbXBsYXRlLnRwbCcpOwogICAgICAgICR0cGwtPmFzc2lnbignc2ltcGxlJywkc2ltcGxlKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ2RlZmF1bHR0ZW1wbGF0ZWZvcm1fdGl0bGUnLCR0aXRsZSk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdpbmZvX3RpdGxlJywkaW5mbyk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdzdGFydGZvcm0nLAogICAgICAgICAgICAgICAgICAgICAgICAkeHRlbnNpb25zLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCdzZXRkZWZhdWx0dGVtcGxhdGUnLCRyZXR1cm5pZCwncG9zdCcsJycsZmFsc2UsJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgncHJlZm5hbWUnPT4kcHJlZm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVzdG1vZHVsZSc9PiRtb2R1bGUtPkdldE5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXN0YWN0aW9uJz0+JGFjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd4dF9hY3RpdmV0YWInPT4kYWN0aXZlX3RhYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxlbmFtZSc9PiRmaWxlbmFtZSkpKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ3Byb21wdF90ZW1wbGF0ZScsJHh0ZW5zaW9ucy0+TGFuZygndGVtcGxhdGUnKSk7CiAgICAgICAgJHRwbC0+YXNzaWduKCd0ZW1wbGF0ZV9zcmMnLCR0aGVfdGVtcGxhdGUpOwogICAgICAgICR0cGwtPmFzc2lnbignaW5wdXRfdGVtcGxhdGUnLCR4dGVuc2lvbnMtPkNyZWF0ZVRleHRBcmVhKGZhbHNlLCRpZCwkdGhlX3RlbXBsYXRlLCdpbnB1dF90ZW1wbGF0ZScpKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ3N1Ym1pdCcsJHh0ZW5zaW9ucy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdzdWJtaXQnLCR4dGVuc2lvbnMtPkxhbmcoJ3N1Ym1pdCcpKSk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdyZXNldCcsJHh0ZW5zaW9ucy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdyZXNldHRvZGVmYXVsdCcsJHh0ZW5zaW9ucy0+TGFuZygncmVzZXR0b2ZhY3RvcnknKSkpOwogICAgICAgICR0cGwtPmFzc2lnbignZW5kZm9ybScsJHh0ZW5zaW9ucy0+Q3JlYXRlRm9ybUVuZCgpKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ3ByZWZuYW1lJywkcHJlZm5hbWUpOwogICAgICAgICR0cGwtPmFzc2lnbignZGZsdF90cGxfY291bnRlcicsJGNvdW50ZXIrKyk7CiAgICAgICAgcmV0dXJuICR0cGwtPmZldGNoKCk7CiAgICB9CgoKICAgIC8qKgogICAgICogQSBmdW5jdGlvbiB0byBwcm92aWRlIGEgZm9ybSB0byBlZGl0IGEgc2luZ2xlIHRlbXBsYXRlLiAgUHJvdmlkZXMgcmVzdG9yZQogICAgICogdG8gZmFjdG9yeSBkZWZhdWx0IHNldHRpbmdzIGFzIHdlbGwuCiAgICAgKgogICAgICogQHBhcmFtIENNU01vZHVsZSAkbW9kdWxlIFRoZSBtb2R1bGUgdGhhdCB0aGlzIHRlbXBsYXRlIGlzIGZvci4KICAgICAqIEBwYXJhbSBzdHJpbmcgICRpZCBUaGUgbW9kdWxlIGFjdGlvbiBpZC4KICAgICAqIEBwYXJhbSBpbnQgICAgICRyZXR1cm5pZCBUaGUgcmV0dXJuaWQgKHVzdWFsbHkgZW1wdHkpCiAgICAgKiBAcGFyYW0gc3RyaW5nICAkdG1wbG5hbWUgVGhlIHRlbXBsYXRlIG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgICRhY3RpdmVfdGFiIFRoZSBhY3RpdmUgdGFiIG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgICR0aXRsZSBBIHRpdGxlIGZvciB0aGUgZm9ybSwgdXN1YWxseSBpbmRpY2F0ZXMgd2hpY2ggdGVtcGxhdGUgdGhpcyBmb3JtIGlzIGVkaXRpbmcuCiAgICAgKiBAcGFyYW0gc3RyaW5nICAkZmlsZW5hbWUgVGhlIGZpbGVuYW1lIChyZWxhdGl2ZSB0byB0aGUgbW9kdWxlcyB0ZW1wbGF0ZXMgZGlyZWN0b3J5KSBvZiB0aGUgZmFjdG9yeSBkZWZhdWx0IHRlbXBsYXRlIHNvdXJjZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgICRpbmZvIE9wdGlvbmFsIGhlbHAgZm9yIHRoaXMgdGVtcGxhdGUKICAgICAqIEBwYXJhbSBzdHJpbmcgICRkZXN0YWN0aW9uIFRoZSBkZXN0aW5hdGlvbiBhY3Rpb24gKHVzdWFsbHkgZGVmYXVsdGFkbWluKQogICAgICogQHBhcmFtIGJvb2wgICAgJHNpbXBsZSB3aGV0aGVyIHRvIG91dHB1dCBhIHNpbXBsZSBmb3JtCiAgICAgKiBAcmV0dXJuIHN0cmluZyBBbiBIVE1MIGZvcm0KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfc2luZ2xlX3RlbXBsYXRlX2Zvcm0oJiRtb2R1bGUsJGlkLCRyZXR1cm5pZCwkdG1wbG5hbWUsJGFjdGl2ZV90YWIsJHRpdGxlLCRmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbmZvID0gJycsJGRlc3RhY3Rpb24gPSAnZGVmYXVsdGFkbWluJywkc2ltcGxlID0gMCkKICAgIHsKICAgICAgICAKICAgICAgICAkeHRlbnNpb25zID0geHRfdXRpbHM6OmdldF9tb2R1bGUoJ0NNU01TRXh0Jyk7CgogICAgICAgICR0cGwgPSAkeHRlbnNpb25zLT5DcmVhdGVTbWFydHlUZW1wbGF0ZSgnZWRpdGRlZmF1bHR0ZW1wbGF0ZS50cGwnKTsKICAgICAgICAkdGl0bGUgPSB0cmltKCR0aXRsZSk7CiAgICAgICAgaWYoICR0aXRsZSApICR0cGwtPmFzc2lnbignZGVmYXVsdHRlbXBsYXRlZm9ybV90aXRsZScsJHRpdGxlKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ21vZCcsJG1vZHVsZSk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdwcmVmbmFtZScsJHRtcGxuYW1lKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ2luZm9fdGl0bGUnLCRpbmZvKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ3N0YXJ0Zm9ybScsCiAgICAgICAgICAgICAgICAgICAgICAgICR4dGVuc2lvbnMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ3NldGRlZmF1bHR0ZW1wbGF0ZScsJHJldHVybmlkLCdwb3N0JywnJyxmYWxzZSwnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCdwcmVmbmFtZSc9PiR0bXBsbmFtZSwndXNldGVtcGxhdGUnPT4nMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVzdG1vZHVsZSc9PiRtb2R1bGUtPkdldE5hbWUoKSwneHRfYWN0aXZldGFiJz0+JGFjdGl2ZV90YWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVzdGFjdGlvbic9PiRkZXN0YWN0aW9uLCdmaWxlbmFtZSc9PiRmaWxlbmFtZSkpKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ3Byb21wdF90ZW1wbGF0ZScsJHh0ZW5zaW9ucy0+TGFuZygndGVtcGxhdGUnKSk7CiAgICAgICAgJHRwbC0+YXNzaWduKCd0ZW1wbGF0ZV9zcmMnLCRtb2R1bGUtPkdldFRlbXBsYXRlKCR0bXBsbmFtZSkpOwogICAgICAgIC8vJHRwbC0+YXNzaWduKCdpbnB1dF90ZW1wbGF0ZScsJHh0ZW5zaW9ucy0+Q3JlYXRlVGV4dEFyZWEoZmFsc2UsJGlkLCRtb2R1bGUtPkdldFRlbXBsYXRlKCR0bXBsbmFtZSksCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5wdXRfdGVtcGxhdGUnKSk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdzaW1wbGUnLCRzaW1wbGUpOwogICAgICAgICR0cGwtPmFzc2lnbignc3VibWl0JywkeHRlbnNpb25zLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ3N1Ym1pdCcsJHh0ZW5zaW9ucy0+TGFuZygnc3VibWl0JykpKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ3Jlc2V0JywkeHRlbnNpb25zLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ3Jlc2V0dG9kZWZhdWx0JywgJHh0ZW5zaW9ucy0+TGFuZygncmVzZXR0b2ZhY3RvcnknKSkpOwogICAgICAgICR0cGwtPmFzc2lnbignZW5kZm9ybScsICRtb2R1bGUtPkNyZWF0ZUZvcm1FbmQoKSk7CiAgICAgICAgcmV0dXJuICR0cGwtPmZldGNoKCk7CiAgICB9Cn0gLy8gZW5kIG9mIGNsYXNzCiMKIyBFT0YKIwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_template_utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgc2V0IG9mIGhpZ2ggbGV2ZWwgY29udmVuaWVuY2UgbWV0aG9kcy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IFV0aWxpdGllcwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCi8qKgogKiBBIGNsYXNzIHRvIHByb3ZpZGUgc29tZSBtZXRob2RzIGZvciBtYW5hZ2luZyB0ZW1wbGF0ZXMuCiAqLwpmaW5hbCBjbGFzcyB4dF90ZW1wbGF0ZV91dGlscwp7CiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgYWxsIG9mIHRoZSB0ZW1wbGF0ZXMgZm9yIGEgc3BlY2lmaWMgKG9yIHRoZSBjdXJyZW50IG1vZHVlbCkgdGhhdCBiZWdpbiB3aXRoIGEgc3BlY2lmaWVkIHByZWZpeC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtb2QgVGhlIG1vZHVsZSBuYW1lLiAgSWYgbm9uZSBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IG1vZHVsZSBpcyBhc3N1bWVkLgogICAgICogQHBhcmFtIHN0cmluZyAkcHJlZml4IEEgcHJlZml4IHRvIGZpbHRlciB0ZW1wbGF0ZXMgYnkuCiAgICAgKiBAcGFyYW0gYm9vbCAkdHJpbSBXZXRoZXIgdGhlIHByZWZpeCBzaG91bGQgYmUgdHJpbW1lZCBmcm9tIHRoZSBvdXRwdXQgYXJyYXkuCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X3RlbXBsYXRlc19ieV9wcmVmaXgoJG1vZCA9ICcnLCRwcmVmaXggPSAnJywkdHJpbSA9IGZhbHNlKQogICAgewogICAgICAgIGlmKCAhaXNfb2JqZWN0KCRtb2QpIHx8ICEoJG1vZCBpbnN0YW5jZW9mIENNU01vZHVsZSkgKSAkbW9kID0geHRfdXRpbHM6OmdldF9tb2R1bGUoKTsKCiAgICAgICAgJHRlbXBsYXRlcyA9ICRtb2QtPkxpc3RUZW1wbGF0ZXMoKTsKICAgICAgICBpZiggJHByZWZpeCA9PSAnJyApIHJldHVybiAkdGVtcGxhdGVzOwoKICAgICAgICAkaXRlbXMgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2goICR0ZW1wbGF0ZXMgYXMgJG9uZW5hbWUgKSB7CiAgICAgICAgICAgIGlmKCBwcmVnX21hdGNoKCcvXicuJHByZWZpeC4nLycsJG9uZW5hbWUpICkgewogICAgICAgICAgICAgICAgaWYoICR0cmltICkgewogICAgICAgICAgICAgICAgICAgICRpdGVtc1tdID0gc3Vic3RyKCRvbmVuYW1lLHN0cmxlbigkcHJlZml4KSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkaXRlbXNbXSA9ICRvbmVuYW1lOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkaXRlbXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBsaXN0IG9mIHRlbXBsYXRlcyBpbiB0aGUgZm9ybSBvZiBhIGRyb3Bkb3duLgogICAgICoKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBUaGUgbW9kdWxlIGFjdGlvbiBpZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUgb2YgdGhlIGRyb3Bkb3duLgogICAgICogQHBhcmFtIHN0cmluZyAkcHJlZml4IFRoZSBwcmVmaXggZm9yIHRlbXBsYXRlcy4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlbGVjdGVkdmFsdWUgVGhlIGl0ZW0gdGhhdCBzaG91bGQgYmUgY3VycmVudGx5IHNlbGVjdGVkLgogICAgICogQHBhcmFtIHN0cmluZyAkYWRkdGV4dCBBZGRpdGlvbmFsIHRleHQgZm9yIHRoZSBzZWxlY3QgZWxlbWVudC4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVfdGVtcGxhdGVfZHJvcGRvd24oJGlkLCRuYW1lLCRwcmVmaXggPSAnJywkc2VsZWN0ZWR2YWx1ZSA9IC0xLCRhZGR0ZXh0ID0gJycpCiAgICB7CiAgICAgICAgJHRlbXBsYXRlcyA9IHNlbGY6OmdldF90ZW1wbGF0ZXNfYnlfcHJlZml4KCcnLCRwcmVmaXgpOwogICAgICAgICRpdGVtcyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCggJHRlbXBsYXRlcyBhcyAkb25lbmFtZSApIHsKICAgICAgICAgICAgJHRtcCA9IHN1YnN0cigkb25lbmFtZSxzdHJsZW4oJHByZWZpeCkpOwogICAgICAgICAgICAkaXRlbXNbJHRtcF0gPSAkb25lbmFtZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB4dF91dGlsczo6Z2V0X21vZHVsZSgpLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwkbmFtZSwkaXRlbXMsLTEsJHNlbGVjdGVkdmFsdWUsJGFkZHRleHQpOwogICAgfQp9CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_tmpdata.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgY29udmVuaWVuY2UgY2xhc3MgdG8gc2hhcmUgZGF0YSBiZXR3ZWVuIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucyB3aXRob3V0IHVzaW5nIGdsb2JhbCB2YXJpYWJsZXMuCiAqIERhdGEgc3RvcmVkIHVzaW5nIHRoaXMgY2xhc3MgZG9lcyBub3Qgc3Vydml2ZSBhZnRlciB0aGUgcmVxdWVzdC4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IFV0aWxpdGllcwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCi8qKgogKiBBIGNvbnZlbmllbmNlIGNsYXNzIHRvIHNoYXJlIGRhdGEgYmV0d2VlbiBjbGFzc2VzIGFuZCBmdW5jdGlvbnMgd2l0aG91dCB1c2luZyBnbG9iYWwgdmFyaWFibGVzLgogKiBEYXRhIHN0b3JlZCB1c2luZyB0aGlzIGNsYXNzIGRvZXMgbm90IHN1cnZpdmUgYWZ0ZXIgdGhlIHJlcXVlc3QuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqLwpmaW5hbCBjbGFzcyB4dF90bXBkYXRhCnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkX2RhdGE7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIF9zZXR1cCgpCiAgICB7CiAgICAgICAgaWYoICFpc19hcnJheShzZWxmOjokX2RhdGEpICkgc2VsZjo6JF9kYXRhID0gYXJyYXkoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFRlc3QgaWYgdGhlIHNwZWNpZmllZCBrZXkgZXhpc3RzIGluIHN0b3JlZCBkYXRhLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXhpc3RzKHN0cmluZyAka2V5KQogICAgewogICAgICAgIGlmKCBlbXB0eSgka2V5KSApIHJldHVybiBGQUxTRTsKICAgICAgICBpZiggIWlzX2FycmF5KHNlbGY6OiRfZGF0YSkgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgaWYoICFpc3NldChzZWxmOjokX2RhdGFbJGtleV0pICkgcmV0dXJuIEZBTFNFOwogICAgICAgIHJldHVybiBUUlVFOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGtleQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIG1peGVkICRkZmx0IFRoZSBkZWZhdWx0IHZhbHVlIHRvIHJldHVybiBpZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0LgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldChzdHJpbmcgJGtleSwkZGZsdCA9IG51bGwpCiAgICB7CiAgICAgICAgaWYoIHNlbGY6OmV4aXN0cygka2V5KSApIHJldHVybiBzZWxmOjokX2RhdGFbJGtleV07CiAgICAgICAgcmV0dXJuICRkZmx0OwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBzcGVjaWZpZWQgZGF0YSBpbnRvIHRlbXBvcmFyeSBzdG9yYWdlCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0KHN0cmluZyAka2V5LCR2YWx1ZSkKICAgIHsKICAgICAgICBpZiggIWVtcHR5KCRrZXkpICkgewogICAgICAgICAgICBzZWxmOjpfc2V0dXAoKTsKICAgICAgICAgICAgc2VsZjo6JF9kYXRhWyRrZXldID0gJHZhbHVlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEVyYXNlIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGtleSBmcm9tIHRlbXBvcmFyeSBzdG9yYWdlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVyYXNlKHN0cmluZyAka2V5KQogICAgewogICAgICAgIGlmKCBzZWxmOjpleGlzdHMoJGtleSkgKSB1bnNldChzZWxmOjokX2RhdGFbJGtleV0pOwogICAgfQp9IC8vIGVuZCBvZiBjbGFzcwo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_units.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgc2ltcGxlIGNsYXNzIGZvciBkZWFsaW5nIHdpdGggbWV0cmljIHRvIGltcGVyaWFsIGNvbnZlcnNpb25zCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBVdGlsaXRpZXMKICogQGRlcHJlY2F0ZWQKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxMCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCgovKioKICogQSBzaW1wbGUgY2xhc3MgZm9yIGRlYWxpbmcgd2l0aCBtZXRyaWMgdG8gaW1wZXJpYWwgY29udmVyc2lvbnMKICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICovCmZpbmFsIGNsYXNzIHh0X3VuaXRzCnsKICAgIGNvbnN0IElOQ0hFU19UT19DTSA9IDIuNTQ7CiAgICBjb25zdCBDTV9UT19JTkNIRVMgPSAwLjM5MzcwMDc4NzsKICAgIGNvbnN0IExCU19UT19LRyAgICA9IDAuNDUzNTkyMzc7CiAgICBjb25zdCBLR19UT19MQlMgICAgPSAyLjIwNDYyMjYyOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIFRlc3QgaWYgdGhlIHN0cmluZyBzcGVjaWZpZWQgaW5kaWNhdGVzIGEgbWV0cmljIGxlbmd0aCB2YWx1ZSAoYWNjZXB0cyBjbSkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNfbGVuZ3RoX21ldHJpYygkc3RyKQogICAgewogICAgICAgICRzdHIgPSBzdHJ0b2xvd2VyKCRzdHIpOwogICAgICAgIGlmKCAkc3RyID09ICdjbScgKSByZXR1cm4gVFJVRTsKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICB9CgogICAgLyoqCiAgICAgKiBUZXN0IGlmIHRoZSBzdHJpbmcgc3BlY2lmaWVkIGluZGljYXRlcyBhIG1ldHJpYyBtYXNzIHZhbHVlIChhY2NlcHRzIGtnIG9yIGtncykKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNfd2VpZ2h0X21ldHJpYygkc3RyKQogICAgewogICAgICAgICRzdHIgPSBzdHJ0b2xvd2VyKCRzdHIpOwogICAgICAgIGlmKCAkc3RyID09ICdrZycgfHwgJHN0ciA9PSAna2dzJyApIHJldHVybiBUUlVFOwogICAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KfSAvLyBlbmQgb2YgY2xhc3MKCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_uploader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB4dF91cGxvYWRlciBjbGFzcy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IFV0aWxpdGllcwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KdXNlIENNU01TRXh0XHdhdGVybWFya2VyOwoKLyoqCiAqIEEgY2xhc3MgdG8gYWlkZSBpbiBkZWFsaW5nIHdpdGggdXBsb2FkZWQgZmlsZXMsIGluY2x1ZGluZyBwb3N0IHByb2Nlc3Npbmcgb2YgaW1hZ2VzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKi8KY2xhc3MgeHRfdXBsb2FkZXIgZXh0ZW5kcyB4dF9maWxldXBsb2FkCnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfZG9fcHJldmlldyA9IGZhbHNlOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfcHJldmlld19zaXplID0gODAwOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfd2F0ZXJtYXJrZXIgPSBudWxsOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfZG9fdGh1bWJuYWlsID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF90aHVtYm5haWxfc2l6ZSA9IDEwMDsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2RlbGV0ZV9vcmlnID0gMDsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2ltYWdldHlwZXM7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkcHJlZml4LCBzdHJpbmcgJGRlc3RkaXIsIHdhdGVybWFya2VyICRvYmogPSBudWxsKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJHByZWZpeCwgJGRlc3RkaXIpOwogICAgICAgICR0aGlzLT5fd2F0ZXJtYXJrZXIgPSAkb2JqOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IGEgZmxhZyBpbmRpY2F0aW5nIHRoYXQgYSBwcmV2aWV3IChzbGlnaHRseSBsYXJnZXIgdGhhbiBhIHRodW1ibmFpbCkgaW1hZ2Ugc2hvdWxkIGJlIGdlbmVyYXRlZCBmcm9tIGFuIHVwbG9hZGVkIGltYWdlLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICRmbGFnCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfcHJldmlldygkZmxhZyA9IHRydWUpCiAgICB7CiAgICAgICAgJHRoaXMtPl9kb19wcmV2aWV3ID0gKGJvb2wpICRmbGFnOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBzaXplIChpbiBwaXhlbHMpIG9mIHRoZSBwcmV2aWV3IGltYWdlLgogICAgICogVGhpcyBpcyBvbmx5IGFwcGxpY2FibGUgaWYgcHJldmlldyBpcyBlbmFibGVkLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHNpemUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF9wcmV2aWV3X3NpemUoaW50ICRzaXplKQogICAgewogICAgICAgICR0aGlzLT5fcHJldmlld19zaXplID0gbWF4KDEsKGludCkkc2l6ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgYSBmbGFnIGluZGljYXRpbmcgdGhhdCBhbiB1cGxvYWRlZCBpbWFnZSBzaG91bGQgYmUgd2F0ZXJtYXJrZWQuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJGZsYWcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF93YXRlcm1hcmsoJGZsYWcgPSB0cnVlKQogICAgewogICAgICAgIC8vIGRvIG5vdGhpbmcuLi4gY29tcGF0aWJpbGl0eQogICAgfQoKICAgIC8qKgogICAgICogU2V0IGEgZmxhZyBpbmRpY2F0aW5nIHRoYXQgYSB0aHVtYm5haWwgc2hvdWxkIGJlIGdlbmVyYXRlZCBmcm9tIGFuIHVwbG9hZGVkIGltYWdlLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICRmbGFnCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfdGh1bWJuYWlsKCRmbGFnID0gdHJ1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+X2RvX3RodW1ibmFpbCA9IChib29sKSAkZmxhZzsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgd2F0ZXJtYXJrIG9iamVjdCB0aGF0IHdpbGwgYmUgdXNlZCB0byB3YXRlcm1hcmsgaW1hZ2VzLgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICogQHJldHVybiB4dF93YXRlcm1hcmsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uICZnZXRfd2F0ZXJtYXJrX29iaigpCiAgICB7CiAgICAgICAgaWYoICFpc19vYmplY3QoJHRoaXMtPl93YXRlcm1hcmtlcikgKSB7CiAgICAgICAgICAgICR0aGlzLT5fd2F0ZXJtYXJrZXIgPSB4dF9zZXR1cDo6Z2V0X3dhdGVybWFya2VyKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPl93YXRlcm1hcmtlcjsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgc2l6ZSAoaW4gcGl4ZWxzKSBvZiB0aGUgZ2VuZXJhdGVkIHRodW1ibmFpbHMuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkc2l6ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X3RodW1ibmFpbF9zaXplKGludCAkc2l6ZSkKICAgIHsKICAgICAgICAkdGhpcy0+X3RodW1ibmFpbF9zaXplID0gJHNpemU7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgYSBmbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIG9yaWdpbmFsIGZpbGUgc2hvdWxkIGJlIGRlbGV0ZWQgYWZ0ZXIgcHJvY2Vzc2luZy4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkZmxhZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2RlbGV0ZV9vcmlnKCRmbGFnID0gdHJ1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+X2RlbGV0ZV9vcmlnID0gKGJvb2wpICRmbGFnOwogICAgfQoKICAgIC8qKgogICAgICogVGVzdCB3ZXRoZXIgdGhlIGZpbGVuYW1lIHNwZWNpZmllZCBpcyBhIGZpbGUgYWNjZXB0YWJsZSBmb3IgcHJvY2Vzc2luZy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc19hY2NlcHRlZF9pbWFnZWZpbGUoc3RyaW5nICRmaWxlbmFtZSkKICAgIHsKICAgICAgICAkaW1hZ2V0eXBlcyA9ICR0aGlzLT5nZXRfYWNjZXB0ZWRfaW1hZ2V0eXBlcygpOwogICAgICAgIGlmKCBpc19hcnJheSgkaW1hZ2V0eXBlcykgJiYgY291bnQoJGltYWdldHlwZXMpICkgewogICAgICAgICAgICAkZXh0ZW5zaW9uID0gc3RycmNocigkZmlsZW5hbWUsIi4iKTsKICAgICAgICAgICAgJGZvdW5kID0gRkFMU0U7CiAgICAgICAgICAgIGZvcmVhY2goICRpbWFnZXR5cGVzIGFzICR0eXBlICkgewogICAgICAgICAgICAgICAgaWYoICIuIi5zdHJ0b2xvd2VyKCR0eXBlKSA9PSBzdHJ0b2xvd2VyKCRleHRlbnNpb24pICkgewogICAgICAgICAgICAgICAgICAgICRmb3VuZCA9IFRSVUU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoICEkZm91bmQgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgfQogICAgICAgIHJldHVybiBUUlVFOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIGEgbGlzdCBvZiB0aGUgZmlsZSBleHRlbnNpb25zIHRoYXQgd2lsbCBiZSBhY2NlcHRlZCBmb3IgcHJvY2Vzc2luZyBvbiB1cGxvYWQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2FjY2VwdGVkX2ltYWdldHlwZXMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2ltYWdldHlwZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGxpc3Qgb2YgZmlsZSBleHRlbnNpb25zIHRoYXQgd2lsbCBiZSBhY2NlcHRlZCBmb3IgcHJvY2Vzc2luZyBvbiB1cGxvYWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAkaW1hZ2V0eXBlcyBFaXRoZXIgYW4gYXJyYXkgb3IgYSBjb21tYSBkZWxpbWl0ZWQgbGlzdCBvZiBmaWxlIGV4dGVuc2lvbnMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfYWNjZXB0ZWRfaW1hZ2V0eXBlcygkaW1hZ2V0eXBlcykKICAgIHsKICAgICAgICBpZiggaXNfYXJyYXkoICRpbWFnZXR5cGVzICkgKSB7CiAgICAgICAgICAgICR0aGlzLT5faW1hZ2V0eXBlcyA9ICRpbWFnZXR5cGVzOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYoIGVtcHR5KCRpbWFnZXR5cGVzKSApIHsKICAgICAgICAgICAgICAgICR0aGlzLT5faW1hZ2V0eXBlcyA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYoIGlzX2FycmF5KCRpbWFnZXR5cGVzKSApIHsKICAgICAgICAgICAgICAgICR0aGlzLT5faW1hZ2V0eXBlcyA9ICRpbWFnZXR5cGVzOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPl9pbWFnZXR5cGVzID0gZXhwbG9kZSgnLCcsJGltYWdldHlwZXMpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUHJlcHJvY2VzcyB0aGUgdXBsb2FkZWQgaW1hZ2UgZmlsZS4gIElmIHRoZSBmaWxlIGlzIGluIHRoZSBhY2NlcHRlZCBpbWFnZSB0eXBlcy4KICAgICAqIGJ5IGRlZmF1bHQgdGhpcyBtZXRob2Qgd2lsbCBnZW5lcmF0ZSBhIHByZXZpZXcgaW1hZ2UgKGlmIGVuYWJsZWQpLCBhbmQgdGhlbiBvcHRpb25hbGx5IHdhdGVybWFyayBpdC4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGZpbGVpbmZvIFRoZSBmaWxlaW5mbyBhcnJheSBwYXNzZWQgZnJvbSB0aGUgJF9GSUxFUyB1cGxvYWQgZ2xvYmFsLgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIHBhdGggYW5kIGZpbGVuYW1lIG9mIHRoZSBkZXN0aW5hdGlvbiBmaWxlLgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcHJlcHJvY2Vzc191cGxvYWQoYXJyYXkgJGZpbGVpbmZvKQogICAgewogICAgICAgICRzcmNuYW1lID0gJGZpbGVpbmZvWyd0bXBfbmFtZSddOwogICAgICAgIGlmKCAhJHRoaXMtPmlzX2FjY2VwdGVkX2ltYWdlZmlsZSgkZmlsZWluZm9bJ25hbWUnXSkgKSB7CiAgICAgICAgICAgIHJldHVybiAkc3JjbmFtZTsKICAgICAgICB9CgogICAgICAgIGlmKCAkdGhpcy0+X2RvX3ByZXZpZXcgJiYgJHRoaXMtPl9wcmV2aWV3X3NpemUgPiAwICkgewogICAgICAgICAgICAvLyBJIGd1ZXNzIHdlJ3JlIHJlc2l6aW5nIHRoZSBtYXN0ZXIgaW1hZ2UuCiAgICAgICAgICAgICRkZXN0ZGlyID0gZGlybmFtZSgkc3JjbmFtZSk7CiAgICAgICAgICAgICRkZXN0bmFtZSA9ICdyc18nLmJhc2VuYW1lKCRzcmNuYW1lKTsKICAgICAgICAgICAgJHRtcG5hbWUgPSAkZGVzdGRpci4nLycuJGRlc3RuYW1lOwoKICAgICAgICAgICAgeHRfaW1hZ2U6OnRyYW5zZm9ybV9pbWFnZSgkc3JjbmFtZSwkdG1wbmFtZSwkdGhpcy0+X3ByZXZpZXdfc2l6ZSk7CiAgICAgICAgICAgIGlmKCAhZmlsZV9leGlzdHMoJHRtcG5hbWUpICkgewogICAgICAgICAgICAgICAgJG1vZCA9IHh0X3V0aWxzOjpnZXRfeHQoKTsKICAgICAgICAgICAgICAgICR0aGlzLT5zZXRfZXJyb3IoJG1vZC0+TGFuZygnZXJyb3JfaW1hZ2VfdHJhbnNmb3JtJykpOwogICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYoICR0aGlzLT5fZGVsZXRlX29yaWcgKSB7CiAgICAgICAgICAgICAgICBAdW5saW5rKCRzcmNuYW1lKTsKICAgICAgICAgICAgICAgIEByZW5hbWUoJHRtcG5hbWUsJHNyY25hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJHNyY25hbWUgPSAkdG1wbmFtZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYoICR0aGlzLT5fd2F0ZXJtYXJrZXIgKSB7CiAgICAgICAgICAgIC8vIEkgZ3Vlc3Mgd2UncmUgY3JlYXRpbmcgYSB3YXRlcm1hcmsgaW1hZ2UuCiAgICAgICAgICAgICRkZXN0ZGlyID0gZGlybmFtZSgkc3JjbmFtZSk7CiAgICAgICAgICAgICRkZXN0bmFtZSA9ICd3bV8nLmJhc2VuYW1lKCRzcmNuYW1lKTsKICAgICAgICAgICAgJHRtcG5hbWUgPSAkZGVzdGRpci4nLycuJGRlc3RuYW1lOwogICAgICAgICAgICAkb2JqID0gJHRoaXMtPmdldF93YXRlcm1hcmtfb2JqKCk7CgogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgJHJlcyA9ICRvYmotPmNyZWF0ZV93YXRlcm1hcmtlZF9pbWFnZSgkc3JjbmFtZSwkdG1wbmFtZSk7CiAgICAgICAgICAgICAgICBAdW5saW5rKCRzcmNuYW1lKTsKICAgICAgICAgICAgICAgICRzcmNuYW1lID0gJHRtcG5hbWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2F0Y2goIFxFeGNlcHRpb24gJGUgKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0X2Vycm9yKCdXQVRFUk1BUktJTkc6ICcuJGUtPkdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkc3JjbmFtZTsKICAgIH0KCgogICAgLyoqCiAgICAgKiBIYW5kbGUgdGhlIHVwbG9hZCBvZiBhIGZpbGUuCiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGdlbmVyYXRlIHRodW1ibmFpbHMgZnJvbSBpbWFnZXMgdGhhdCBhcmUgaW4gdGhlIGFjY2VwdGVkIGZpbGV0eXBlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBpbnB1dCBmaWVsZCBuYW1lIGZyb20gdGhlIGZvcm0ncyBpbnB1dCBmaWVsZCBvZiB0eXBlIEZJTEUuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZXN0ZmlsZW5hbWUgVGhlIGRlc3RpbmF0aW9uIGZpbGVuYW1lLgogICAgICogQHBhcmFtIHN0cmluZyAkc3ViZmllbGQKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBiYXNlbmFtZSBvZiB0aGUgdXBsb2FkZWQgZmlsZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhbmRsZV91cGxvYWQoc3RyaW5nICRuYW1lLHN0cmluZyAkZGVzdGZpbGVuYW1lID0gJycsc3RyaW5nICRzdWJmaWVsZCA9IG51bGwpCiAgICB7CiAgICAgICAgJHJlcyA9IHBhcmVudDo6aGFuZGxlX3VwbG9hZCgkbmFtZSwkZGVzdGZpbGVuYW1lLCRzdWJmaWVsZCk7CiAgICAgICAgaWYoICEkcmVzICkgcmV0dXJuIGZhbHNlOwoKICAgICAgICAkc3JjID0gJHRoaXMtPmdldF9kZXN0X2ZpbGVuYW1lKCk7CiAgICAgICAgaWYoICEkdGhpcy0+aXNfYWNjZXB0ZWRfaW1hZ2VmaWxlKCRzcmMpICkgewogICAgICAgICAgICAvLyBub3QgYW4gaW1hZ2UgZmlsZSwgbm90aGluZyBtb3JlIHRvIGRvLgogICAgICAgICAgICByZXR1cm4gJHJlczsKICAgICAgICB9CgogICAgICAgIGlmKCAkdGhpcy0+X2RvX3RodW1ibmFpbCAmJiAkdGhpcy0+X3RodW1ibmFpbF9zaXplID4gMCApIHsKICAgICAgICAgICAgLy8gSSBndWVzcyB3ZSdyZSBtYWtpbmcgYSB0aHVtYm5haWwuCiAgICAgICAgICAgICRibiA9IGJhc2VuYW1lKCR0aGlzLT5nZXRfZGVzdF9maWxlbmFtZSgpKTsKICAgICAgICAgICAgJGZpbGVuYW1lID0gJ3RodW1iXycuJGJuOwogICAgICAgICAgICAkZGVzdCA9IGNtc19qb2luX3BhdGgoJHRoaXMtPmdldF9kZXN0X2RpcigpLCRmaWxlbmFtZSk7CgogICAgICAgICAgICAvLyB0b2RvOiBjaGVjayB0byBzZWUgaWYgdGhlIGlucHV0IGlzIGdyZWF0ZXIgdGhhbiB0aGUgdGh1bWJuYWlsIHNpemUuCiAgICAgICAgICAgIHh0X2ltYWdlOjp0cmFuc2Zvcm1faW1hZ2UoJHNyYywkZGVzdCwkdGhpcy0+X3RodW1ibmFpbF9zaXplKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBiYXNlbmFtZSgkdGhpcy0+Z2V0X2Rlc3RfZmlsZW5hbWUoKSk7CiAgICB9Cgp9CgojCiMgRU9GCiMK]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_url.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgc2ltcGxlIGNsYXNzIGZvciB0YWtpbmcgYXBhcnQsIG1vZGlmeWluZywgYW5kIHJlLWFzc2VtYmxpbmcgVVJMUy4KICoKICogQHBhY2thZ2UgICBDTVNNU0V4dAogKiBAY2F0ZWdvcnkgIFV0aWxpdGllcwogKiBAYXV0aG9yICAgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwoKLyoqCiAqIEEgc2ltcGxlIGNsYXNzIGZvciB0YWtpbmcgYXBhcnQsIG1vZGlmeWluZywgYW5kIHJlLWFzc2VtYmxpbmcgVVJMUy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICovCmZpbmFsIGNsYXNzIHh0X3VybAp7CiAgLyoqCiAgICogQGlnbm9yZQogICAqLwogIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQogIAogIC8qKgogICAqIENvbnZlcnQgYSBzdGFuZGFyZCB1cmwgaW50byBhbiBTU0wgdXJsCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICR1cmwgVGhlIGlucHV0IFVSTAogICAqCiAgICogQHJldHVybiBzdHJpbmcKICAgKi8KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNzbF91cmwoc3RyaW5nICR1cmwpCiAgewogICAgJGNvbmZpZyAgPSBcQ01TTVNFeHRcY29uZmlnOjpHZXRJbnN0YW5jZSgpOwogICAgLy8gR2V0IHRoZSBTU0wgVVJMIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24sCiAgICAvLyBmYWxsYmFjayB0byBlbXB0eSBzdHJpbmcgaWYgbm90IHNldAogICAgJHNzbF91cmwgPSAkY29uZmlnWydzc2xfdXJsJ10gPz8gJyc7CiAgICAKICAgIGlmKGVtcHR5KCRzc2xfdXJsKSkKICAgIHsKICAgICAgJHNzbF91cmwgPSBzdHJfcmVwbGFjZSgnaHR0cDovLycsICdodHRwczovLycsICRjb25maWdbJ3Jvb3RfdXJsJ10pOwogICAgfQogICAgCiAgICAKICAgIC8vIElmIHRoZSBpbnB1dCBVUkwgYWxyZWFkeSBzdGFydHMgd2l0aCB0aGUgU1NMIFVSTCwgcmV0dXJuIGl0IGFzIGlzCiAgICBpZihzdGFydHN3aXRoKCR1cmwsICRzc2xfdXJsKSkgeyByZXR1cm4gJHVybDsgfQogICAgCiAgICAvLyBJZiB0aGUgaW5wdXQgVVJMIHN0YXJ0cyB3aXRoIHRoZSByb290IFVSTCwgcmVwbGFjZSB0aGUgcm9vdCBVUkwgd2l0aCB0aGUgU1NMIFVSTAogICAgaWYoc3RhcnRzd2l0aCgkdXJsLCAkY29uZmlnWydyb290X3VybCddKSkKICAgIHsKICAgICAgcmV0dXJuIHN0cl9yZXBsYWNlKCRjb25maWdbJ3Jvb3RfdXJsJ10sICRzc2xfdXJsLCAkdXJsKTsKICAgIH0KICAgIAogICAgLy8gUmV0dXJuIHRoZSBpbnB1dCBVUkwgaWYgdGhlIGlucHV0IFVSTCBkb2VzIG5vdCBtYXRjaCBhbnkgY29uZGl0aW9uCiAgICByZXR1cm4gJHVybDsKICB9CiAgCiAgLyoqCiAgICogQXR0ZW1wdCB0byBkZXRlcm1pbmUgdGhlIGN1cnJlbnRseSByZXF1ZXN0ZWQgVVJMCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZwogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3VycmVudF91cmwoKSA6IHN0cmluZwogIHsKICAgIC8vIHJlYnVpbGQgdGhlIGN1cnJlbnQgdXJsLgogICAgLy8kY29uZmlnID0gY21zX2NvbmZpZzo6Z2V0X2luc3RhbmNlKCk7CiAgICAkY29uZmlnID0gXENNU01TRXh0XGNvbmZpZzo6R2V0SW5zdGFuY2UoKTsKICAgICR1cmwxICAgPSBuZXcgY21zX3VybCgkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSk7CiAgICAkdXJsMiAgID0gbmV3IGNtc191cmwoJGNvbmZpZ1sncm9vdF91cmwnXSk7CiAgICAkdXJsMS0+c2V0X3NjaGVtZSgkdXJsMi0+Z2V0X3NjaGVtZSgpKTsKICAgICR1cmwxLT5zZXRfaG9zdCgkdXJsMi0+Z2V0X2hvc3QoKSk7CiAgICAkdXJsMS0+c2V0X3BvcnQoJHVybDItPmdldF9wb3J0KCkpOwogICAgJHVybDEtPnNldF91c2VyKCR1cmwyLT5nZXRfdXNlcigpKTsKICAgICR1cmwxLT5zZXRfcGFzcygkdXJsMi0+Z2V0X3Bhc3MoKSk7CiAgICAKICAgIHJldHVybiAoc3RyaW5nKSR1cmwxOwogIH0KICAKICAvKioKICAgKiBHZXQgdGhlIFVSTCBvZiB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCBwYWdlLgogICAqIE9ubHkgd29ya3MgZm9yIGZyb250ZW5kIHJlcXVlc3RzCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZwogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFnZV91cmwoKSA6IHN0cmluZwogIHsKICAgICRjb250ZW50X29iaiA9IFxjbXNfdXRpbHM6OmdldF9jdXJyZW50X2NvbnRlbnQoKTsKICAgIAogICAgcmV0dXJuICRjb250ZW50X29iaiA/ICRjb250ZW50X29iai0+R2V0VVJMKCkgOiAnJzsKICB9CiAgCiAgLyoqCiAgICogR2l2ZW4gYW4gZXhpc3RpbmcgVVJMLCBhZGQgb3IgYWRqdXN0IG9uZSBvZiB0aGUgcGFyYW1ldGVycwogICAqCiAgICogQHBhcmFtIHN0cmluZyAkdXJsICAgVGhlIGlucHV0IHVybAogICAqIEBwYXJhbSBzdHJpbmcgJGtleSAgIFRoZSBrZXkgbmFtZQogICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIFRoZSB2YWx1ZSBmb3IgdGhlIHZhcmlhYmxlCiAgICoKICAgKiBAcmV0dXJucyBzdHJpbmcgIFRoZSByZXN1bHRpbmcgVVJMCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXRfcGFyYW0oc3RyaW5nICR1cmwsIHN0cmluZyAka2V5LCBzdHJpbmcgJHZhbHVlKQogIHsKLy8gICAgaWYoISR1cmwpIHsgcmV0dXJuICR1cmw7IH0KLy8KLy8gICAgJHRtcCA9IHBhcnNlX3VybCgkdXJsKTsKLy8KLy8gICAgaWYoJHRtcCA9PT0gRkFMU0UpIHsgcmV0dXJuICR1cmw7IH0KLy8KLy8gICAgJHF1ZXJ5ID0gW107Ci8vCi8vICAgIGlmKGlzc2V0KCR0bXBbJ3F1ZXJ5J10pKQovLyAgICB7Ci8vICAgICAgcGFyc2Vfc3RyKCR0bXAsICRxdWVyeSk7Ci8vICAgIH0KLy8KLy8gICAgJHF1ZXJ5WyRrZXldICA9ICR2YWx1ZTsKLy8gICAgJHRtcFsncXVlcnknXSA9IGh0dHBfYnVpbGRfcXVlcnkoJHF1ZXJ5LCAnJywgJyYnKTsKLy8KLy8gICAgcmV0dXJuIGh0dHBfYnVpbGRfdXJsKCR0bXApOwogICAgCiAgICBpZihlbXB0eSgkdXJsKSkgeyByZXR1cm4gJHVybDsgfQogICAgCiAgICAkcGFyc2VkVXJsID0gcGFyc2VfdXJsKCR1cmwpOwogICAgCiAgICBpZihGQUxTRSA9PT0gJHBhcnNlZFVybCkgeyByZXR1cm4gJHVybDsgfQogICAgCiAgICBwYXJzZV9zdHIoJHBhcnNlZFVybFsncXVlcnknXSA/PyAnJywgJHF1ZXJ5KTsKICAgIAogICAgJHF1ZXJ5WyRrZXldID0gJHZhbHVlOwogICAgJHBhcnNlZFVybFsncXVlcnknXSA9IGh0dHBfYnVpbGRfcXVlcnkoJHF1ZXJ5LCAnJywgJyYnKTsKICAgIAogICAgcmV0dXJuIGh0dHBfYnVpbGRfdXJsKCRwYXJzZWRVcmwpOwogIH0KICAKICAvKioKICAgKiBHaXZlbiBhIGZpbGVuYW1lLCBjb252ZXJ0IGl0IHRvIGEgVVJMCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgaW5wdXQgZmlsZW5hbWUKICAgKgogICAqIEByZXR1cm4gc3RyaW5nCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmaWxlbmFtZV90b191cmwoc3RyaW5nICRmaWxlbmFtZSkKICB7Ci8vICAgIGlmKCEkZmlsZW5hbWUpIHsgcmV0dXJuOyB9Ci8vCi8vICAgIGlmKCFpc19yZWFkYWJsZSgkZmlsZW5hbWUpKSB7IHJldHVybjsgfQovLwovLyAgICBpZighc3RhcnRzd2l0aCgkZmlsZW5hbWUsIENNU19ST09UX1BBVEgpKSB7IHJldHVybjsgfQovLwovLyAgICByZXR1cm4gc3RyX3JlcGxhY2UoQ01TX1JPT1RfUEFUSCwgQ01TX1JPT1RfVVJMLCAkZmlsZW5hbWUpOwogICAgCiAgICBpZihlbXB0eSgkZmlsZW5hbWUpCiAgICAgICB8fCAhaXNfcmVhZGFibGUoJGZpbGVuYW1lKQogICAgICAgfHwgIXN0YXJ0c3dpdGgoJGZpbGVuYW1lLCBDTVNfUk9PVF9QQVRIKSkKICAgIHsgcmV0dXJuICcnOyB9CiAgICAKICAgIHJldHVybiBzdHJfcmVwbGFjZShDTVNfUk9PVF9QQVRILCBDTVNfUk9PVF9VUkwsICRmaWxlbmFtZSk7CiAgICAKICB9CiAgCiAgLyoqCiAgICogQ29udmVydCBhIHN0cmluZyBvZiBwYXJhbWV0ZXJzIGludG8gYW4gYXNzb2NpYXRpdmUgYXJyYXkuCiAgICogVXNlZCBtYWlubHkgdG8gY29udmVydCBhIHByZXR0eSB1cmwKICAgKiB3aXRoIGEgZm9ybWF0IG9mIC9wYXJhbTEvdmFsdWUxL3BhcmFtMi92YWx1ZTIvKC4uLikKICAgKiBpbnRvIGFuIGFycmF5IG9mIHBhcmFtZXRlcnMuCiAgICogVGhlICRwYXJhbXMgYXJyYXkgc2hvdWxkIGNvbnRhaW4gdGhlIGtleSAncHJtcycKICAgKiB3aXRoIHRoZSB2YWx1ZSBiZWluZyB0aGUgc3RyaW5nIHRvIGNvbnZlcnQuCiAgICogVGhlIGtleSAncHJtcycgd2lsbCB0aGVuIGJlIHVuc2V0IGJlZm9yZSB0aGUgJHBhcmFtcyBhcmUgcmV0dXJuZWQKICAgKgogICAqIEBwYXJhbSBhcnJheXxudWxsICRwYXJhbXMgLSBUaGUgYXJyYXkgb2YgZXhpc3RpbmcgcGFyYW1ldGVycy4KICAgKiBAcGFyYW0gYm9vbHxudWxsICRvdmVycmlkZSAtIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIG92ZXJyaWRlIGV4aXN0aW5nIHBhcmFtZXRlcnMuCiAgICoKICAgKiBAcmV0dXJuIGFycmF5IC0gVGhlIHVwZGF0ZWQgYXJyYXkgb2YgcGFyYW1ldGVycy4KICAgKiBAYXV0aG9yIEZlcm5hbmRvIE1vcmdhZG8gQUtBIEpvIE1vcmcKICAgKiBAc2luY2UgMS40LjUKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gcGFyYW1zX3RvX3BybXMoJHBhcmFtcyA9IE5VTEwsICRvdmVycmlkZSA9IE5VTEwpCiAgewogICAgJHBybXMgPSAkcGFyYW1zWydwcm1zJ10gPz8gJyc7CiAgICB1bnNldCgkcGFyYW1zWydwcm1zJ10pOwogICAgCiAgICBpZihlbXB0eSgkcGFyYW1zKSkKICAgIHsKICAgICAgcmV0dXJuIFtdOwogICAgfQogICAgCiAgICAkcGFpcnMgPSBleHBsb2RlKCcvJywgJHBybXMpOwogICAgJGlNYXggID0gY291bnQoJHBhaXJzKTsKICAgIAogICAgJHBhcmFtZXRlcnMgPSBbXTsKICAgIGZvcigkaSA9IDA7ICRpIDwgJGlNYXg7ICRpICs9IDIpCiAgICB7CiAgICAgICRrZXkgICAgICAgICAgICAgID0gJHBhaXJzWyRpXTsKICAgICAgJHZhbHVlICAgICAgICAgICAgPSAkcGFpcnNbJGkgKyAxXSA/PyAnJzsKICAgICAgJHBhcmFtZXRlcnNbJGtleV0gPSAkdmFsdWU7CiAgICB9CiAgICAKICAgIGlmKCRvdmVycmlkZSkKICAgIHsKICAgICAgcmV0dXJuICRwYXJhbWV0ZXJzOwogICAgfQogICAgCiAgICByZXR1cm4gYXJyYXlfbWVyZ2UoJHBhcmFtcywgJHBhcmFtZXRlcnMpOwogIH0KICAKICBmdW5jdGlvbiBwYXJzZVVyaSgkdXJpKQogIHsKICAgIC8vIFNwbGl0IHRoZSBVUkkgaW50byBpdHMgY29tcG9uZW50cwogICAgJGNvbXBvbmVudHMgPSBleHBsb2RlKCcvJywgJHVyaSk7CiAgICAKICAgIC8vIEV4dHJhY3QgdGhlIGFsaWFzIGFuZCBhY3Rpb24KICAgICRhbGlhcyAgPSAkY29tcG9uZW50c1sxXTsKICAgICRhY3Rpb24gPSAkY29tcG9uZW50c1syXTsKICAgIAogICAgLy8gRXh0cmFjdCB0aGUgcGFyYW1ldGVycwogICAgJHBhcmFtZXRlcnMgPSBbXTsKICAgIGZvcigkaSA9IDMsICRpTWF4ID0gY291bnQoJGNvbXBvbmVudHMpOyAkaSA8ICRpTWF4OyAkaSsrKQogICAgewogICAgICBpZihGQUxTRSAhPT0gc3RycG9zKCRjb21wb25lbnRzWyRpXSwgJz0nKSkKICAgICAgewogICAgICAgIFska2V5LCAkdmFsdWVdID0gZXhwbG9kZSgnPScsICRjb21wb25lbnRzWyRpXSk7CiAgICAgICAgJHBhcmFtZXRlcnNbJGtleV0gPSAkdmFsdWU7CiAgICAgIH0KICAgIH0KICAgIAogICAgLy8gUmV0dXJuIHRoZSBwYXJzZWQgVVJJCiAgICByZXR1cm4gWwogICAgICAnYWxpYXMnICAgICAgPT4gJGFsaWFzLAogICAgICAnYWN0aW9uJyAgICAgPT4gJGFjdGlvbiwKICAgICAgJ3BhcmFtZXRlcnMnID0+ICRwYXJhbWV0ZXJzCiAgICBdOwogIH0KICAKICAKICAvLyAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJhbXNfdG9fcHJtcygkcGFyYW1zID0gTlVMTCwgJG92ZXJyaWRlID0gTlVMTCkKLy8gIHsKLy8gICAgJHBybXMgPSAkcGFyYW1zWydwcm1zJ10gPz8gJyc7Ci8vICAgIHVuc2V0KCRwYXJhbXNbJ3BybXMnXSk7Ci8vCi8vICAgIGlmKGVtcHR5KCRwYXJhbXMpKSB7IHJldHVybiBbXTsgfQovLwovLyAgICAkcGFpcnMgID0gZXhwbG9kZSgnLycsICRwcm1zKTsKLy8gICAgJGlNYXggICA9IGNvdW50KCRwYWlycyk7Ci8vICAgICRyZXN1bHQgPSBbXTsKLy8KLy8gICAgZm9yKCRpID0gMDsgJGkgPCAkaU1heDsgJGkgKz0gMikKLy8gICAgewovLyAgICAgICRrZXkgICA9ICRwYWlyc1skaV07Ci8vICAgICAgJHZhbHVlID0gJHBhaXJzWyRpICsgMV0gPz8gTlVMTDsKLy8KLy8gICAgICBpZighJG92ZXJyaWRlICYmIGlzc2V0KCRwYXJhbXNbJGtleV0pKSB7IGNvbnRpbnVlOyB9Ci8vCi8vICAgICAgJHJlc3VsdFska2V5XSA9ICR2YWx1ZTsKLy8gICAgfQovLwovLyAgICByZXR1cm4gJHJlc3VsdDsKLy8gIH0KICAKICAKICAKLy8gIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHJtc190b19wYXJhbXMoJHBhcmFtcyA9IE5VTEwsICRvdmVycmlkZSA9IE5VTEwpCi8vICB7Ci8vICAgICRwcm1zICAgICA9ICRwYXJhbXNbJ3BybXMnXSA/PyBbXTsKLy8gICAgJHBhcmFtcyAgID0gZW1wdHkoJHBhcmFtcykgPyBbXSA6ICRwYXJhbXM7Ci8vICAgICRvdmVycmlkZSA9ICRvdmVycmlkZSA/PyBGQUxTRTsKLy8gICAgJHBhaXJzICAgID0gXGV4cGxvZGUoJy8nLCAkcHJtcyk7Ci8vCi8vICAgIHVuc2V0KCRwYXJhbXNbJ3BybXMnXSk7Ci8vCi8vICAgIGZvciAoJGkgPSAwLCAkaU1heCA9IFxjb3VudCgkcGFpcnMpOyAkaSA8ICRpTWF4OyAkaSArPSAyKQovLyAgICB7Ci8vICAgICAgJGtleSA9ICRwYWlyc1skaV07Ci8vICAgICAgJHZhbHVlID0gJHBhaXJzWyRpICsgMV0gPz8gTlVMTDsKLy8KLy8gICAgICBpZighJG92ZXJyaWRlICYmIGlzc2V0KCRwYXJhbXNbJGtleV0pKSB7IGNvbnRpbnVlOyB9Ci8vCi8vICAgICAgJHBhcmFtc1ska2V5XSA9ICR2YWx1ZTsKLy8gICAgfQovLwovLyAgICByZXR1cm4gJHBhcmFtczsKLy8gIH0KICAKfQoKIwojIEVPRgojCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_userops.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFV0aWxpdHkgbWV0aG9kcyB0byBkZWFsIHdpdGggYWRtaW4gdXNlcnMuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBVdGlsaXRpZXMKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxMCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCgovKioKICogVXRpbGl0eSBtZXRob2RzIHRvIGRlYWwgd2l0aCBhZG1pbiB1c2Vycy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICovCmZpbmFsIGNsYXNzIHh0X3VzZXJvcHMKewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQSBmdW5jdGlvbiB0byByZXR1cm4gYW4gZXhwYW5kZWQgbGlzdCBvZiB1c2VyIGlkJ3MgZ2l2ZW4gYW4gaW5wdXQgbGlzdAogICAgICogaWYgb25lIG9mIHRoZSBpZCdzIHNwZWNpZmllZCBpcyBuZWdhdGl2ZSwgaXQgaXMgYXNzdW1lZCB0byBiZSBhIGdyb3VwIGlkCiAgICAgKiBhbmQgaXMgZXhwYW5kZWQgdG8gaXRzIG1lbWJlcnMuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR1c2VyaWRsaXN0IEEgY29tbWEgc2VwYXJhdGVkIHN0cmluZywgb3IgYW4gYXJyYXkgb2YgdXNlcmlkJ3Mgb3IgbmVnYXRpdmUgZ3JvdXAgaWQncy4KICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBleHBhbmRfdXNlcmxpc3QoJHVzZXJpZGxpc3QpCiAgICB7CiAgICAgICAgJHVzZXJzID0gYXJyYXkoKTsKCiAgICAgICAgaWYoICFpc19hcnJheSgkdXNlcmlkbGlzdCkgKSAkdXNlcmlkbGlzdCA9IGV4cGxvZGUoJywnLCR1c2VyaWRsaXN0KTsKICAgICAgICBpZiggIWNvdW50KCR1c2VyaWRsaXN0KSApIHJldHVybiAkdXNlcnM7CgogICAgICAgICR1c2Vyb3BzID0gVXNlck9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpOwogICAgICAgIGZvcmVhY2goICR1c2VyaWRsaXN0IGFzICRvbmV1aWQgKSB7CiAgICAgICAgICAgIGlmKCAkb25ldWlkIDwgMCApIHsKICAgICAgICAgICAgICAgIC8vIGFzc3VtZSBpdHMgYSBncm91cCBpZAogICAgICAgICAgICAgICAgLy8gYW5kIGdldCBhbGwgdGhlIHVpZHMgZm9yIHRoYXQgZ3JvdXAKICAgICAgICAgICAgICAgICRncm91cHVzZXJzID0gJHVzZXJvcHMtPkxvYWRVc2Vyc0luR3JvdXAoJG9uZXVpZCAqIC0xKTsKICAgICAgICAgICAgICAgIGZvcmVhY2goICRncm91cHVzZXJzIGFzICRvbmV1c2VyICkgewogICAgICAgICAgICAgICAgICAgICR1c2Vyc1tdID0gJG9uZXVzZXItPmlkOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJHVzZXJzW10gPSAkb25ldWlkOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkdXNlcnMgPSBhcnJheV91bmlxdWUoJHVzZXJzKTsKICAgICAgICByZXR1cm4gJHVzZXJzOwogICAgfQoKCiAgICAvKioKICAgICAqIFJldHJpZXZlIGFuIGFzc29jaWF0aXZlIGFycmF5IGNvbnRhaW5pbmcgYSBsaXN0IG9mIENNU01TIGFkbWluIGdyb3VwcyB0aGF0CiAgICAgKiBpcyBzdWl0YWJsZSBmb3IgZm9ybWF0dGluZyBpbiBhIGRyb3Bkb3duLgogICAgICoKICAgICAqIEBwYXJhbSBib29sZWFuICRpbmNsbm9uZSBGbGFnIGluZGljYXRpbmcgd2hldGhlciAibm9uZSIgc2hvdWxkIGJlIHRoZSBmaXJzdCBpdGVtLgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9ncm91cGxpc3QoYm9vbCAkaW5jbG5vbmUgPSBUUlVFKQogICAgewogICAgICAgIHN0YXRpYyAkbGlzdDsKICAgICAgICBpZiggIWlzX2FycmF5KCRsaXN0KSApIHsKICAgICAgICAgICAgJG9wcyA9IENtc0FwcDo6Z2V0X2luc3RhbmNlKCktPkdldEdyb3VwT3BlcmF0aW9ucygpOwogICAgICAgICAgICAkZ3JvdXBzID0gJG9wcy0+TG9hZEdyb3VwcygpOwogICAgICAgICAgICAkbGlzdCA9IGFycmF5KCk7CiAgICAgICAgICAgIGZvcmVhY2goICRncm91cHMgYXMgJG9uZWdyb3VwICkgewogICAgICAgICAgICAgICAgaWYoICEkb25lZ3JvdXAtPmFjdGl2ZSApIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgJGxpc3RbJG9uZWdyb3VwLT5pZF0gPSAkb25lZ3JvdXAtPm5hbWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRvdXQgPSAkbGlzdDsKICAgICAgICBpZiggJGluY2xub25lICkgewogICAgICAgICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKE1PRF9YVE1PRFVMRSk7CiAgICAgICAgICAgICR0bXAgPSBbIC0xID0+ICRtb2QtPkxhbmcoJ25vbmUnKSBdOwogICAgICAgICAgICAkb3V0ID0gYXJyYXlfbWVyZ2UoICR0bXAsICRsaXN0ICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKCiAgICAvKioKICAgICAqIEdpdmVuIGEgZ3JvdXAgbmFtZSwgcmV0dXJuIGEgZ3JvdXAgaWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZ3JvdXBuYW1lCiAgICAgKiBAcmV0dXJuIGludHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X2dyb3VwaWQoc3RyaW5nICRncm91cG5hbWUpCiAgICB7CiAgICAgICAgJGdyb3VwbmFtZSA9IHRyaW0oJGdyb3VwbmFtZSk7CiAgICAgICAgaWYoICEkZ3JvdXBuYW1lICkgcmV0dXJuOwoKICAgICAgICAkbGlzdCA9IHNlbGY6OmdldF9ncm91cGxpc3QoRkFMU0UpOwogICAgICAgICRsaXN0ID0gYXJyYXlfZmxpcCggJGxpc3QgKTsKICAgICAgICBpZiggaXNzZXQoICRsaXN0WyRncm91cG5hbWVdICkgKSByZXR1cm4gJGxpc3RbJGdyb3VwbmFtZV07CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYWxsIG9mIHRoZSBHSUQgbWVtYmVycyBmb3IgYWxsIHVzZXJzIGluIHRoZSBzcGVjaWZpZWQgZ3JvdXAKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRncm91cGlkIFRoZSBDTVNNUyBhZG1pbiBncm91cCBpZAogICAgICogQHBhcmFtIGJvb2wgJGFsbCBPcHRpb25hbGx5IGluY2x1ZGUgaW5hY3RpdmUgdXNlcnMKICAgICAqIEByZXR1cm4gaW50W10KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfZ3JvdXBfbWVtYmVycyhpbnQgJGdyb3VwaWQsIGJvb2wgJGFsbCA9IGZhbHNlKQogICAgewogICAgICAgIGlmKCAkZ3JvdXBpZCA8IDEgKSByZXR1cm47CgogICAgICAgICRvdXQgPSBbXTsKICAgICAgICAkb3BzID0gVXNlck9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpOwogICAgICAgICRsaXN0ID0gJG9wcy0+TG9hZFVzZXJzSW5Hcm91cCgkZ3JvdXBpZCk7CiAgICAgICAgaWYoIGlzX2FycmF5KCRsaXN0KSAmJiBjb3VudCgkbGlzdCkgKSB7CiAgICAgICAgICAgIGZvcmVhY2goICRsaXN0IGFzICRvbmV1c2VyICkgewogICAgICAgICAgICAgICAgaWYoICgkb25ldXNlci0+YWN0aXZlIHx8ICRhbGwpICYmICFpbl9hcnJheSgkb25ldXNlci0+aWQsJG91dCkgKSAkb3V0W10gPSAkb25ldXNlci0+aWQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmKCBjb3VudCgkb3V0KSA9PSAwICkgcmV0dXJuOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGFsbCBvZiB0aGUga25vd24gZW1haWwgYWRkcmVzc2VzIGZvciBhbiBhZG1pbiBncm91cCBpZAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGdyb3VwaWQgVGhlIENNU01TIGFkbWluIGdyb3VwIGlkCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXhwYW5kX2dyb3VwX2VtYWlscyhpbnQgJGdyb3VwaWQpCiAgICB7CiAgICAgICAgaWYoICRncm91cGlkIDw9IDAgKSByZXR1cm47CgogICAgICAgICRlbWFpbHMgPSBhcnJheSgpOwogICAgICAgICRvcHMgPSBVc2VyT3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCk7CiAgICAgICAgJGxpc3QgPSAkb3BzLT5Mb2FkVXNlcnNJbkdyb3VwKCRncm91cGlkKTsKICAgICAgICBpZiggaXNfYXJyYXkoJGxpc3QpICYmIGNvdW50KCRsaXN0KSApIHsKICAgICAgICAgICAgZm9yZWFjaCggJGxpc3QgYXMgJG9uZXVzZXIgKSB7CiAgICAgICAgICAgICAgICBpZiggJG9uZXVzZXItPmFjdGl2ZSAmJiAkb25ldXNlci0+ZW1haWwgIT0gJycgJiYgIWluX2FycmF5KCRvbmV1c2VyLT5lbWFpbCwkZW1haWxzKSApICRlbWFpbHNbXSA9ICRvbmV1c2VyLT5lbWFpbDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYoIGNvdW50KCRlbWFpbHMpID09IDAgKSByZXR1cm47CiAgICAgICAgcmV0dXJuICRlbWFpbHM7CiAgICB9CgoKICAgIC8qKgogICAgICogR2V0IGEgbGlzdCBvZiBlbWFpbCBhZGRyZXNzZXMgbWF0Y2hpbmcgYSB1aWQgbGlzdAogICAgICoKICAgICAqIEBwYXJhbSBpbnR8aW50W10gJGxpc3QgVGhlIGxpc3Qgb2YgQ01TTVMgYWRtaW4gVUlEcwogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGdldF91aWRfZW1haWxzKCRsaXN0KQogICAgewogICAgICAgIGlmKCAhaXNfYXJyYXkoJGxpc3QpICkgJGxpc3QgPSBhcnJheSgkbGlzdCk7CgogICAgICAgICR1c2Vyb3BzID0gVXNlck9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpOwogICAgICAgICRhbGx1c2VycyA9ICR1c2Vyb3BzLT5Mb2FkVXNlcnMoKTsKICAgICAgICAkZW1haWxzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoKCAkbGlzdCBhcyAkdWlkICkgewogICAgICAgICAgICAkdWlkID0gKGludCkkdWlkOwogICAgICAgICAgICBpZiggJHVpZCA8IDEgKSBjb250aW51ZTsKCiAgICAgICAgICAgIC8vIGZpbmQgaXQuCiAgICAgICAgICAgIGZvcmVhY2goICRhbGx1c2VycyBhcyAkcmVjICkgewogICAgICAgICAgICAgICAgaWYoICRyZWMtPmlkICE9ICR1aWQgKSBjb250aW51ZTsKICAgICAgICAgICAgICAgIGlmKCAhJHJlYy0+YWN0aXZlICkgY29udGludWU7CiAgICAgICAgICAgICAgICBpZiggISRyZWMtPmVtYWlsICkgY29udGludWU7CiAgICAgICAgICAgICAgICAkZW1haWxzW10gPSAkcmVjLT5lbWFpbDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiggY291bnQoJGVtYWlscykgKSByZXR1cm4gJGVtYWlsczsKICAgIH0KCgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGVtYWlsIGFkZHJlc3MgKGlmIGFueSkgZm9yIHRoZSBzcGVjaWZpZWQgdWlkCiAgICAgKiBJZiBubyB1aWQgaXMgc3BlY2lmaWVkLCB1c2UgdGhlIGN1cnJlbnRseSBsb2dnZWQgaW4gYWRtaW4gdWlkCiAgICAgKgogICAgICogQHBhcmFtIGludCAkdWlkIFRoZSBkZXNpcmVkIENNU01TIGFkbWluIHVzZXIgaWQuICBJZiBubyB1c2VyaWQgaXMgcHJvdmlkZWQsIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIGFkbWluIHVzZXIgYWNjb3VudCAoaWYgYW55KSBpcyB1c2VkLgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBnZXRfdWlkX2VtYWlsKGludCAkdWlkID0gbnVsbCkKICAgIHsKICAgICAgICAkdWlkID0gKGludCkkdWlkOwogICAgICAgIGlmKCAkdWlkIDwgMSApICR1aWQgPSBnZXRfdXNlcmlkKGZhbHNlKTsKICAgICAgICBpZiggJHVpZCA8IDEgKSByZXR1cm47CgogICAgICAgICRvdXQgPSBzZWxmOjpnZXRfdWlkX2VtYWlscyhhcnJheSgkdWlkKSk7CiAgICAgICAgaWYoIGNvdW50KCRvdXQpID09IDEgKSByZXR1cm4gJG91dFswXTsKICAgIH0KCiAgICAvKioKICAgICAqIEdpdmVuIGFuIGFkbWluIFVzZXJpZCBnZXQgaGlzIG1lbWJlciBncm91cHMgKGlmIGFueSkKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICR1aWQgVGhlIGFkbWluIHVzZXJpZAogICAgICogQHJldHVybiBpbnRbXSBBcnJheSBvZiBpbnRlZ2VyIGdyb3Vwcywgb3IgbnVsbC4KICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBnZXRfYWRtaW5fbWVtYmVyZ3JvdXBzKGludCAkdWlkKQogICAgewogICAgICAgICR1aWQgPSAoaW50KSAkdWlkOwogICAgICAgIGlmKCAkdWlkIDwgMSApIHJldHVybjsKCiAgICAgICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICAgICAkcXVlcnkgPSAnU0VMRUNUIERJU1RJTkNUIGdyb3VwX2lkIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ3VzZXJfZ3JvdXBzIFdIRVJFIHVzZXJfaWQgPSA/JzsKICAgICAgICAkdG1wID0gJGRiLT5HZXRDb2woJHF1ZXJ5LGFycmF5KCR1aWQpKTsKICAgICAgICByZXR1cm4gJHRtcDsKICAgIH0KCiAgICAvKioKICAgICAqIEdpdmVuIGFuIGFycmF5IG9mIHVzZXJpZHMsICBnZXQgYSBoYXNoIG9mIHVpZHMgYW5kIHVzZXJuYW1lcwogICAgICogc3VpdGFibGUgZm9yIHVzZSBpbiBhIGRyb3Bkb3duLgogICAgICoKICAgICAqIEBwYXJhbSBpbnRbXSAkdWlkX2xpc3QKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBnZXRfdXNlcmxpc3QoYXJyYXkgJHVpZF9saXN0ID0gbnVsbCkKICAgIHsKICAgICAgICAkb3BzID0gVXNlck9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpOwogICAgICAgICRhbGx1c2VycyA9ICRvcHMtPkxvYWRVc2VycygpOwoKICAgICAgICBpZiggIWNvdW50KCRhbGx1c2VycykgKSByZXR1cm47CiAgICAgICAgJG91dCA9IFtdOwogICAgICAgIGZvcmVhY2goICRhbGx1c2VycyBhcyAkdXNlciApIHsKICAgICAgICAgICAgaWYoIGlzX251bGwoJHVpZF9saXN0KSB8fCBpbl9hcnJheSgkdXNlci0+aWQsJHVpZF9saXN0KSApICRvdXRbJHVzZXItPmlkXSA9ICR1c2VyLT51c2VybmFtZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9Cn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiMK]]></data>
	</file>
	<file>
	  <filename>/lib/class.xt_utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgc2V0IG9mIGhpZ2ggbGV2ZWwgY29udmVuaWVuY2UgbWV0aG9kcy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IFV0aWxpdGllcwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCnVzZSBDTVNNU0V4dFxpbnRlcm5hbFxzZXR0aW5nczsKdXNlIENNU01TXERhdGFiYXNlXENvbm5lY3Rpb24gYXMgRGF0YWJhc2U7CnVzZSBDTVNNU1xEYXRhYmFzZVxjb21wYXRpYmlsaXR5IGFzIGRiX2NvbXBhdGliaWxpdHk7CgovKioKICogQSBzZXQgb2YgaGlnaCBsZXZlbCBjb252ZW5pZW5jZSBtZXRob2RzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKi8KZmluYWwgY2xhc3MgeHRfdXRpbHMKewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJG1vZDsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJF9pbnN0YW5jZTsKICAgIAogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKiBAZGVwcmVjYXRlZCAgd2lsbCBiZSBjaGFuZ2VkIHRvIHByaXZhdGUgX3NldHRpbmdzCiAgICAgKi8KICAgIHByaXZhdGUgJHNldHRpbmdzOwogIAogIC8qKgogICAqIEEgZnVuY3Rpb24gdG8gZ2V0IGEgaGFuZGxlIHRvIGFuIGFsdGVybmF0ZSBkYXRhYmFzZSBjb25uZWN0aW9uIHRoYXQgc3VwcG9ydHMgYmV0dGVyIGVycm9yIGhhbmRsaW5nLgogICAqCiAgICogQHJldHVybiBEYXRhYmFzZQogICAqLwogIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIF9nZXRfZGIoKTogRGF0YWJhc2UKICB7CiAgICBzdGF0aWMgJF9vYmo7CiAgICBpZighJF9vYmopCiAgICB7CiAgICAgICRfZXJyb3JfaGFuZGxlciA9IGZ1bmN0aW9uKERhdGFiYXNlICRjb25uLCAkZXJydHlwZSwgJGVycm9yX251bWJlciwgJGVycm9yX21lc3NhZ2UpewogICAgICAgIHRocm93IG5ldyBceHRfc3FsX2Vycm9yKCRlcnJvcl9tZXNzYWdlIC4gJyAtLSAnIC4gJGNvbm4tPkVycm9yTXNnKCksICRlcnJvcl9udW1iZXIpOwogICAgICB9OwogICAgICAkX29iaiAgICAgICAgICAgPSBkYl9jb21wYXRpYmlsaXR5Ojppbml0KCBcY21zX2NvbmZpZzo6Z2V0X2luc3RhbmNlKCkgKTsKICAgICAgJF9vYmotPlNldEVycm9ySGFuZGxlcigkX2Vycm9yX2hhbmRsZXIpOwogICAgfQogICAgCiAgICByZXR1cm4gJF9vYmo7CiAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQ01TTVNFeHQgJG1vZCwgc2V0dGluZ3MgJHNldHRpbmdzKQogICAgewogICAgICAgIGlmKCBzZWxmOjokX2luc3RhbmNlICkgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignT25seSBvbmUgaW5zdGFuY2Ugb2YgJy5fX0NMQVNTX18uJyBpcyBwZXJtaXR0ZWQnKTsKICAgICAgICBzZWxmOjokX2luc3RhbmNlID0gJHRoaXM7CgogICAgICAgICR0aGlzLT5tb2QgPSAkbW9kOwogICAgICAgICR0aGlzLT5zZXR0aW5ncyA9ICRzZXR0aW5nczsKICAgIH0KCgogICAgLyoqCiAgICAgKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGdldCBhbiBhZG9kYiBvYmplY3QgdGhhdCBzdXBwb3J0cyBleGNlcHRpb25zLgogICAgICogTm90ZTogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgbmV3IGRhdGFiYXNlIGFic3RyYWN0aW9uIG9iamVjdC4KICAgICAqIEByZXR1cm4gRGF0YWJhc2Ugb2JqZWN0CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X2RiKCkKICAgIHsKICAgICAgaWYoIG1ldGhvZF9leGlzdHMoc2VsZjo6JF9pbnN0YW5jZS0+bW9kLCAnZ2V0X2V4dGVuZGVkX2RiJykgKQogICAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OiRfaW5zdGFuY2UtPm1vZC0+Z2V0X2V4dGVuZGVkX2RiKCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6Ol9nZXRfZGIoKTsKICAgICAgfQogICAgfQogIAogIC8qKgogICAqIENvbnZlcnQgdGhlIHN1cHBsaWVkIHVuaXh0aW1lIGludG8gYSBkYXRhYmFzZSBjb21wYXRpYmxlIGRhdGV0aW1lIHN0cmluZwogICAqCiAgICogQHBhcmFtIGludCAgJHVuaXh0aW1lCiAgICogQHBhcmFtIGJvb2wgJHRyaW0gV2V0aGVyIG9yIG5vdCB0byB0cmltIHF1b3RlcyBmcm9tIHRoZSBvdXRwdXQKICAgKiAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZwogICAqIEBkZXByZWNhdGVkCiAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRiX3RpbWUoaW50ICR1bml4dGltZSxib29sICR0cmltID0gdHJ1ZSkKICAgIHsKICAgICAgICAkZGIgPSBzZWxmOjpnZXRfZGIoKTsKICAgICAgICAkdG1wID0gJGRiLT5EYlRpbWVTdGFtcCgkdW5peHRpbWUpOwogICAgICAgIGlmKCAkdHJpbSApICR0bXAgPSB0cmltKCR0bXAsIiciKTsKICAgICAgICByZXR1cm4gJHRtcDsKICAgIH0KCiAgICAvKioKICAgICAqIEdpdmVuIGEgZGF0YXRpbWUgc3RyaW5nIGNvbnZlcnQgaXQgdG8gYSB1bml4IHRpbWUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHN0cmluZyBUaGUgZGF0ZXRpbWUgc3RyaW5nCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVuaXhfdGltZShzdHJpbmcgJHN0cmluZyA9IG51bGwpCiAgICB7CiAgICAgICAgLy8gc25hcmZlZCBmcm9tIHNtYXJ0eS4KICAgICAgICAkc3RyaW5nID0gdHJpbSgkc3RyaW5nKTsKICAgICAgICAkdGltZSA9ICcnOwogICAgICAgIGlmKGVtcHR5KCRzdHJpbmcpKSB7CiAgICAgICAgICAgIC8vIHVzZSAibm93IjoKICAgICAgICAgICAgJHRpbWUgPSB0aW1lKCk7CgogICAgICAgIH0gZWxzZWlmIChwcmVnX21hdGNoKCcvXlxkezE0fSQvJywgJHN0cmluZykpIHsKICAgICAgICAgICAgLy8gaXQgaXMgbXlzcWwgdGltZXN0YW1wIGZvcm1hdCBvZiBZWVlZTU1EREhITU1TUz8KICAgICAgICAgICAgJHRpbWUgPSBta3RpbWUoc3Vic3RyKCRzdHJpbmcsIDgsIDIpLHN1YnN0cigkc3RyaW5nLCAxMCwgMiksc3Vic3RyKCRzdHJpbmcsIDEyLCAyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic3RyKCRzdHJpbmcsIDQsIDIpLHN1YnN0cigkc3RyaW5nLCA2LCAyKSxzdWJzdHIoJHN0cmluZywgMCwgNCkpOwoKICAgICAgICB9IGVsc2VpZiAocHJlZ19tYXRjaCgiLyhcZHs0fSktKFxkezJ9KS0oXGR7Mn0pXHMoXGR7Mn0pOihcZHsyfSk6KFxkezJ9KS8iLCAkc3RyaW5nLCAkZHQpKSB7CiAgICAgICAgICAgICR0aW1lID0gbWt0aW1lKCRkdFs0XSwkZHRbNV0sJGR0WzZdLCRkdFsyXSwkZHRbM10sJGR0WzFdKTsKICAgICAgICB9IGVsc2VpZiAoaXNfbnVtZXJpYygkc3RyaW5nKSkgewogICAgICAgICAgICAvLyBpdCBpcyBhIG51bWVyaWMgc3RyaW5nLCB3ZSBoYW5kbGUgaXQgYXMgdGltZXN0YW1wCiAgICAgICAgICAgICR0aW1lID0gKGludCkkc3RyaW5nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIHN0cnRvdGltZSBzaG91bGQgaGFuZGxlIGl0CiAgICAgICAgICAgICR0aW1lID0gc3RydG90aW1lKCRzdHJpbmcpOwogICAgICAgICAgICBpZiAoJHRpbWUgPT0gLTEgfHwgJHRpbWUgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAvLyBzdHJ0b3RpbWUoKSB3YXMgbm90IGFibGUgdG8gcGFyc2UgJHN0cmluZywgdXNlICJub3ciOgogICAgICAgICAgICAgICAgLy8gYnV0IHRyeSBvbmUgbW9yZSB0aGluZwogICAgICAgICAgICAgICAgWyRwMSwkcDJdID0gZXhwbG9kZSgnICcsJHN0cmluZywyKTsKCiAgICAgICAgICAgICAgICAkZGIgPSBzZWxmOjpnZXRfZGIoKTsKICAgICAgICAgICAgICAgICR0aW1lID0gJGRiLT5Vbml4VGltZVN0YW1wKCRzdHJpbmcpOwogICAgICAgICAgICAgICAgaWYoICEkdGltZSApIHsKICAgICAgICAgICAgICAgICAgICAkdGltZSA9IHRpbWUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aW1lOwogICAgfQoKICAgIC8qKgogICAgICogQSBjb252ZW5pZW5jZSBtZXRob2QgdG8gcmV0dXJuIHRoZSBsaXN0IG9mIGFsbG93ZWQgaW1hZ2UgZXh0ZW5zaW9ucyB0aGF0IGEgdXNlciBpcyBhbGxvd2VkIHRvIHVwbG9hZAogICAgICoKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9pbWFnZV9leHRlbnNpb25zKCkKICAgIHsKICAgICAgICAkeHQgPSBzZWxmOjokX2luc3RhbmNlLT5tb2Q7CiAgICAgICAgcmV0dXJuIHNlbGY6OiRfaW5zdGFuY2UtPnNldHRpbmdzLT5pbWFnZWV4dGVuc2lvbnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBBIHF1aWNrIHdyYXBwZXIgYXJvdW5kIGNtc191dGlsczo6Z2V0X21vZHVsZSB0aGF0IHdpbGwgdHJ5IHRvIHVzZSBhIG1vZHVsZSBuYW1lIHNhdmVkIGluIHRtcGRhdGEKICAgICAqICh0aGUgbW9kdWxlIG5hbWUgaXMgc3RvcmVkIGluIHRtcGRhdGEgaW4gZWFjaCByZXF1ZXN0LCBmb3IgQ01TTVNFeHQgZGVyaXZlZCBtb2R1bGVzKQogICAgICoKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKiBAc2VlIGNtc191dGlsczo6Z2V0X21vZHVsZQogICAgICogQHBhcmFtIHN0cmluZyAkbW9kdWxlX25hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZlcnNpb24gVGhlIGRlc2lyZWQgbW9kdWxlIHZlcnNpb24KICAgICAqIEByZXR1cm4gb2JqZWN0IFRoZSBtb2R1bGUgb2JqZWN0LiAgb3IgbnVsbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9tb2R1bGUoc3RyaW5nICRtb2R1bGVfbmFtZSA9ICcnLHN0cmluZyAkdmVyc2lvbiA9ICcnKQogICAgewogICAgICAgIGlmKCBlbXB0eSgkbW9kdWxlX25hbWUpICkgewogICAgICAgICAgICAkdmVyc2lvbiA9ICcnOwogICAgICAgICAgICBpZiggeHRfdG1wZGF0YTo6ZXhpc3RzKCdtb2R1bGUnKSApICRtb2R1bGVfbmFtZSA9IHh0X3RtcGRhdGE6OmdldCgnbW9kdWxlJyk7CiAgICAgICAgfQogICAgICAgICRvdXQgPSBudWxsOwogICAgICAgIGlmKCAkbW9kdWxlX25hbWUgKSAkb3V0ID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRtb2R1bGVfbmFtZSwkdmVyc2lvbik7CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGdldCB0aGUgQ01TTVNFeHQgbW9kdWxlIG9iamVjdCByZWZlcmVuY2UKICAgICAqCiAgICAgKiBAc2VlIHh0X3V0aWxzOjpnZXRfbW9kdWxlCiAgICAgKiBAcmV0dXJuIFxDTVNNU0V4dCBUaGUgQ01TTVNFeHQgbW9kdWxlIG9iamVjdC4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfeHQoKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjokX2luc3RhbmNlLT5tb2Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhIGZpbGUgbmFtZSwgcmV0dXJuIGl0J3MgbWltZSB0eXBlCiAgICAgKgogICAgICogUmVxdWlyZXMgdGhlIGZpbGVpbmZvIHBocCBleHRlbnNpb24gKHdoaWNoIGlzIGluY2x1ZGVkIGJ5IGRlZmF1bHQgc2luY2UgUEhQIDUuMykKICAgICAqIFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIGZpbGVpbmZvIGV4dGVuc2lvbiBpcyBub3QgYXZhaWxhYmxlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIC0gVGhlIGZpbGUgbmFtZS4KICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSByZXR1cm5lZCBtaW1lIHR5cGUgb3IgbnVsbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9taW1lX3R5cGUoc3RyaW5nICRmaWxlbmFtZSkKICAgIHsKICAgICAgICBpZiggIWZ1bmN0aW9uX2V4aXN0cygnZmluZm9fb3BlbicpICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdQcm9ibGVtIHdpdGggaG9zdCBzZXR1cC4gIHRoZSBmaW5mb19vcGVuIGZ1bmN0aW9uIGRvZXMgbm90IGV4aXN0Jyk7CiAgICAgICAgaWYoIChpc19maWxlKCRmaWxlbmFtZSkgJiYgaXNfcmVhZGFibGUoJGZpbGVuYW1lKSkgfHwgc3RhcnRzd2l0aCgkZmlsZW5hbWUsJ2h0dHAnKSkgewogICAgICAgICAgICAkZmggPSBmaW5mb19vcGVuKEZJTEVJTkZPX01JTUVfVFlQRSk7CiAgICAgICAgICAgIGlmKCAkZmggKSB7CiAgICAgICAgICAgICAgICAkbWltZV90eXBlID0gZmluZm9fZmlsZSgkZmgsJGZpbGVuYW1lKTsKICAgICAgICAgICAgICAgIGZpbmZvX2Nsb3NlKCRmaCk7CiAgICAgICAgICAgICAgICByZXR1cm4gJG1pbWVfdHlwZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEEgY29udmVuaWVuY2UgbWV0aG9kIHRvIHNlbmQgYSB0ZXh0IGZpbGUgKGxpa2UgYSBDU1YgZmlsZSkgdG8gdGhlIGJyb3dzZXIgYW5kIGV4aXQKICAgICAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QuICBJdCBhbHNvIGhhbmRsZXMgY2xlYXJpbmcgYW55IGRhdGEgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHNlbnQgdG8gb3V0cHV0IGJ1ZmZlcnMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgb3V0cHV0IGRhdGEKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbnRlbnRfdHlwZSBUaGUgb3V0cHV0IE1JTUUgdHlwZQogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgVGhlIG91dHB1dCBmaWxlbmFtZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlbmRfZGF0YV9hbmRfZXhpdCgkZGF0YSxzdHJpbmcgJGNvbnRlbnRfdHlwZSA9ICd0ZXh0L3BsYWluJyxzdHJpbmcgJGZpbGVuYW1lID0gJ3JlcG9ydC50eHQnKQogICAgewogICAgICAgICRoYW5kbGVycyA9IG9iX2xpc3RfaGFuZGxlcnMoKTsKICAgICAgICBmb3IgKCRjbnQgPSAwOyAkY250IDwgc2l6ZW9mKCRoYW5kbGVycyk7ICRjbnQrKykgeyBvYl9lbmRfY2xlYW4oKTsgfQoKICAgICAgICBoZWFkZXIoJ1ByYWdtYTogcHVibGljJyk7CiAgICAgICAgaGVhZGVyKCdFeHBpcmVzOiAwJyk7CiAgICAgICAgaGVhZGVyKCdDYWNoZS1Db250cm9sOiBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTAnKTsKICAgICAgICBoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IHByaXZhdGUnLGZhbHNlKTsKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTsKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogJy4kY29udGVudF90eXBlKTsKICAgICAgICBoZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiJGZpbGVuYW1lXCIiICk7CiAgICAgICAgaGVhZGVyKCdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnknKTsKICAgICAgICAvL2hlYWRlcignQ29udGVudC1MZW5ndGg6ICcgLiBjb3VudCgkZGF0YSkpOwoKICAgICAgICAvLyBzZW5kIHRoZSBkYXRhCiAgICAgICAgcHJpbnQoJGRhdGEpOwoKICAgICAgICAvLyBkb24ndCBhbGxvdyBhbnkgZnVydGhlciBwcm9jZXNzaW5nLgogICAgICAgIGV4aXQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEEgY29udmVuaWVuY2UgbWV0aG9kIHRvIHZpZXcgYSBmaWxlIGluIHRoZSBicm93c2VyLgogICAgICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZC4gIEl0IGFsc28gaGFuZGxlcyBjbGVhcmluZyBhbnkgZGF0YSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gc2VudCB0byBvdXRwdXQgYnVmZmVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBvdXRwdXQgZmlsZQogICAgICogQHBhcmFtIHN0cmluZyAkbWltZV90eXBlIFRoZSBvdXRwdXQgbWltZSB0eXBlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgb3V0cHV0IGZpbGVuYW1lIChzdWdnZXN0ZWQgdG8gdGhlIGJyb3dzZXIpCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdmlld19maWxlX2FuZF9leGl0KHN0cmluZyAkZmlsZSxzdHJpbmcgJG1pbWVfdHlwZSA9IG51bGwsc3RyaW5nICRmaWxlbmFtZSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYoICFmaWxlX2V4aXN0cygkZmlsZSkgKSByZXR1cm4gZmFsc2U7CgogICAgICAgIGlmKCBlbXB0eSgkbWltZV90eXBlKSApIHsKICAgICAgICAgICAgJG1pbWVfdHlwZSA9IHNlbGY6OmdldF9taW1lX3R5cGUoJGZpbGUpOwogICAgICAgICAgICBpZiggJG1pbWVfdHlwZSA9PSAndW5rbm93bicgKSAkbWltZV90eXBlID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7CiAgICAgICAgfQogICAgICAgIGlmKCBlbXB0eSgkZmlsZW5hbWUpICkgJGZpbGVuYW1lID0gJGZpbGU7CiAgICAgICAgJGZpbGVuYW1lID0gYmFzZW5hbWUoJGZpbGVuYW1lKTsKCiAgICAgICAgJGhhbmRsZXJzID0gb2JfbGlzdF9oYW5kbGVycygpOwogICAgICAgIGZvciAoJGNudCA9IDA7ICRjbnQgPCBzaXplb2YoJGhhbmRsZXJzKTsgJGNudCsrKSB7IG9iX2VuZF9jbGVhbigpOyB9CgogICAgICAgIGhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTsKICAgICAgICBoZWFkZXIoJ0V4cGlyZXM6IDAnKTsKICAgICAgICBoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCcpOwogICAgICAgIGhlYWRlcignQ2FjaGUtQ29udHJvbDogcHJpdmF0ZScsZmFsc2UpOwogICAgICAgIC8vaGVhZGVyKCdDb250ZW50LURlc2NyaXB0aW9uOiBGaWxlIFRyYW5zZmVyJyk7CiAgICAgICAgaGVhZGVyKCdDb250ZW50LVR5cGU6ICcuJG1pbWVfdHlwZSk7CiAgICAgICAgaGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPVwiJGZpbGVuYW1lXCIiICk7CiAgICAgICAgaGVhZGVyKCdDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnknKTsKICAgICAgICAvKgogICAgICAgICAgaGVhZGVyKCdBY2NlcHQtUmFuZ2VzOiBieXRlcycpOwogICAgICAgICAgaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJyAuIGZpbGVzaXplKCRmaWxlKSk7CiAgICAgICAgKi8KCiAgICAgICAgJGNodW5rc2l6ZSA9IDY1NTM1OwogICAgICAgICRoYW5kbGU9Zm9wZW4oJGZpbGUsJ3JiJyk7CiAgICAgICAgJGNvbnRlbnRzID0gJyc7CiAgICAgICAgZG8gewogICAgICAgICAgICAkZGF0YSA9IGZyZWFkKCRoYW5kbGUsJGNodW5rc2l6ZSk7CiAgICAgICAgICAgIGlmKCBzdHJsZW4oJGRhdGEpID09IDAgKSBicmVhazsKICAgICAgICAgICAgcHJpbnQoJGRhdGEpOwogICAgICAgIH0gd2hpbGUodHJ1ZSk7CiAgICAgICAgZmNsb3NlKCRoYW5kbGUpOwoKICAgICAgICAvLyBkb24ndCBhbGxvdyBhbnkgbW9yZSBwcm9jZXNzaW5nCiAgICAgICAgZXhpdCgpOwogICAgfQoKICAgIC8qKgogICAgICogQSBjb252ZW5pZW5jZSBtZXRob2QgdG8gZG93bmxvYWQgYSBmaWxlIHRvIHRoZSBicm93c2VyLCBhbmQgdGhlbiBleGl0IHRoZSBjdXJyZW50IHJlcXVlc3QKICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCB3aGVuIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgdG8gZG93bmxvYWQgYSBsYXJnZSBmaWxlLgogICAgICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZC4gIEl0IGFsc28gaGFuZGxlcyBjbGVhcmluZyBhbnkgZGF0YSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gc2VudCB0byBvdXRwdXQgYnVmZmVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBvdXRwdXQgZmlsZQogICAgICogQHBhcmFtIGludCAkY2h1bmtzaXplIFRoZSBhbW91bnQgb2YgZGF0YSB0byByZWFkIGZyb20gdGhlIGZpbGUgYXQgb25lIHRpbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1pbWVfdHlwZSBUaGUgb3V0cHV0IG1pbWUgdHlwZQogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgVGhlIG91dHB1dCBmaWxlbmFtZSAoc3VnZ2VzdGVkIHRvIHRoZSBicm93c2VyKQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlbmRfZmlsZV9hbmRfZXhpdChzdHJpbmcgJGZpbGUsaW50ICRjaHVua3NpemUgPSA2NTUzNSxzdHJpbmcgJG1pbWVfdHlwZSA9ICcnLHN0cmluZyAkZmlsZW5hbWUgPSAnJykKICAgIHsKICAgICAgICBpZiggIWZpbGVfZXhpc3RzKCRmaWxlKSApIHJldHVybiBmYWxzZTsKCiAgICAgICAgaWYoIGVtcHR5KCRtaW1lX3R5cGUpICkgewogICAgICAgICAgICAkbWltZV90eXBlID0gc2VsZjo6Z2V0X21pbWVfdHlwZSgkZmlsZSk7CiAgICAgICAgICAgIGlmKCAkbWltZV90eXBlID09ICd1bmtub3duJyApICRtaW1lX3R5cGUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzsKICAgICAgICB9CgogICAgICAgIGlmKCBlbXB0eSgkZmlsZW5hbWUpICkgJGZpbGVuYW1lID0gJGZpbGU7CiAgICAgICAgJGZpbGVuYW1lID0gYmFzZW5hbWUoJGZpbGVuYW1lKTsKCiAgICAgICAgJGhhbmRsZXJzID0gb2JfbGlzdF9oYW5kbGVycygpOwogICAgICAgIGZvciAoJGNudCA9IDA7ICRjbnQgPCBzaXplb2YoJGhhbmRsZXJzKTsgJGNudCsrKSB7IG9iX2VuZF9jbGVhbigpOyB9CgogICAgICAgIGhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTsKICAgICAgICBoZWFkZXIoJ0V4cGlyZXM6IDAnKTsKICAgICAgICBoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCcpOwogICAgICAgIGhlYWRlcignQ2FjaGUtQ29udHJvbDogcHJpdmF0ZScsZmFsc2UpOwogICAgICAgIGhlYWRlcignQ29udGVudC1EZXNjcmlwdGlvbjogRmlsZSBUcmFuc2ZlcicpOwogICAgICAgIGhlYWRlcignQ29udGVudC1UeXBlOiAnLiRtaW1lX3R5cGUpOwogICAgICAgIGhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIkZmlsZW5hbWVcIiIgKTsKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeScpOwogICAgICAgIGhlYWRlcignQ29udGVudC1MZW5ndGg6ICcgLiBmaWxlc2l6ZSgkZmlsZSkpOwoKICAgICAgICAkaGFuZGxlPWZvcGVuKCRmaWxlLCdyYicpOwogICAgICAgICRjb250ZW50cyA9ICcnOwogICAgICAgIGRvIHsKICAgICAgICAgICAgJGRhdGEgPSBmcmVhZCgkaGFuZGxlLCRjaHVua3NpemUpOwogICAgICAgICAgICBpZiggc3RybGVuKCRkYXRhKSA9PSAwICkgYnJlYWs7CiAgICAgICAgICAgIHByaW50KCRkYXRhKTsKICAgICAgICB9IHdoaWxlKHRydWUpOwogICAgICAgIGZjbG9zZSgkaGFuZGxlKTsKCiAgICAgICAgLy8gZG9uJ3QgYWxsb3cgYW55IG1vcmUgcHJvY2Vzc2luZwogICAgICAgIGV4aXQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdpdmVuIGFuIG91dHB1dCBhcnJheSBvciBvYmplY3QsIGVuY29kZSBpdCB0byBqc29uLCBhbmQgZXhpdC4KICAgICAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QuICBJdCBhbHNvIGhhbmRsZXMgY2xlYXJpbmcgYW55IGRhdGEgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHNlbnQgdG8gb3V0cHV0IGJ1ZmZlcnMuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRvdXRwdXQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZW5kX2FqYXhfYW5kX2V4aXQoJG91dHB1dCkKICAgIHsKICAgICAgICAkaGFuZGxlcnMgPSBvYl9saXN0X2hhbmRsZXJzKCk7CiAgICAgICAgZm9yICgkY250ID0gMDsgJGNudCA8IHNpemVvZigkaGFuZGxlcnMpOyAkY250KyspIHsgb2JfZW5kX2NsZWFuKCk7IH0KCiAgICAgICAgaGVhZGVyKCdQcmFnbWE6IHB1YmxpYycpOwogICAgICAgIGhlYWRlcignRXhwaXJlczogMCcpOwogICAgICAgIGhlYWRlcignQ2FjaGUtQ29udHJvbDogbXVzdC1yZXZhbGlkYXRlLCBwb3N0LWNoZWNrPTAsIHByZS1jaGVjaz0wJyk7CiAgICAgICAgaGVhZGVyKCdDYWNoZS1Db250cm9sOiBwcml2YXRlJyxmYWxzZSk7CiAgICAgICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nKTsKICAgICAgICAkb3V0cHV0ID0ganNvbl9lbmNvZGUoJG91dHB1dCk7CiAgICAgICAgZWNobyAkb3V0cHV0OwogICAgICAgIGV4aXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBVc2UgdmFyaW91cyBtZXRob2RzIHRvIHJldHVybiB0aGUgdXNlcnMgcmVhbCBJUCBhZGRyZXNzLgogICAgICogaW5jbHVkaW5nIHdoZW4gdXNpbmcgYSBwcm94eSBzZXJ2ZXIuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfcmVhbF9pcCgpIDogc3RyaW5nCiAgICB7CiAgICAgICAgJGlwID0gbnVsbDsKICAgICAgICBpZiAoIWVtcHR5KCRfU0VSVkVSWydIVFRQX0NMSUVOVF9JUCddKSkgeyAgIC8vY2hlY2sgaXAgZnJvbSBzaGFyZSBpbnRlcm5ldAogICAgICAgICAgICAkaXA9JF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ107CiAgICAgICAgfQogICAgICAgIGVsc2VpZiAoIWVtcHR5KCRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX0ZPUiddKSkgeyAgIC8vdG8gY2hlY2sgaXAgaXMgcGFzcyBmcm9tIHByb3h5CiAgICAgICAgICAgICRpcD0kX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9GT1InXTsKICAgICAgICB9CiAgICAgICAgZWxzZWlmICghZW1wdHkoJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10pKSB7CiAgICAgICAgICAgICRpcD0kX1NFUlZFUlsnUkVNT1RFX0FERFInXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRpcDsKICAgIH0KCiAgICAvKioKICAgICAqIEdpdmVuIGEgc3RyaW5nIGlucHV0IHRoYXQgdGhlb3JldGljYWxseSByZXByZXNlbnRzIGEgYm9vbGVhbiB2YWx1ZQogICAgICogcmV0dXJuIGVpdGhlciB0cnVlIG9yIGZhbHNlLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkaW4gaW5wdXQgdmFsdWUKICAgICAqIEBwYXJhbSBib29sZWFuICRzdHJpY3QgV2hldGhlciBzdHJpY3QgdGVzdGluZyBzaG91bGQgYmUgdXNlZC4KICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRvX2Jvb2woJGluLGJvb2wgJHN0cmljdCA9IEZBTFNFKSA6IGJvb2wKICAgIHsKICAgICAgICBpZiggaXNfYm9vbCgkaW4pICYmICRpbiA9PT0gVFJVRSApIHJldHVybiBUUlVFOwogICAgICAgIGlmKCBpc19ib29sKCRpbikgJiYgJGluID09PSBGQUxTRSApIHJldHVybiBGQUxTRTsKICAgICAgICAkaW4gPSBzdHJ0b2xvd2VyKCRpbik7CiAgICAgICAgaWYoIGluX2FycmF5KCRpbixhcnJheSgnMScsJ3knLCd5ZXMnLCd0cnVlJywndCcsJ29uJykpICkgcmV0dXJuIFRSVUU7CiAgICAgICAgaWYoIGluX2FycmF5KCRpbixhcnJheSgnMCcsJ24nLCdubycsJ2ZhbHNlJywnZicsJ29mZicpKSApIHJldHVybiBGQUxTRTsKICAgICAgICBpZiggJHN0cmljdCApIHJldHVybiBGQUxTRTsKICAgICAgICByZXR1cm4gKCRpbj9UUlVFOkZBTFNFKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgc2luZ2xldG9uIHh0X2Jyb3dzZXIgb2JqZWN0LgogICAgICoKICAgICAqIEByZXR1cm4geHRfYnJvd3NlcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9icm93c2VyKCkKICAgIHsKICAgICAgICBzdGF0aWMgJF9icm93c2VyID0gbnVsbDsKCiAgICAgICAgaWYoICRfYnJvd3NlciA9PSBudWxsICkgJF9icm93c2VyID0gbmV3IENNU01TRXh0XHh0X2Jyb3dzZXIoKTsKICAgICAgICByZXR1cm4gJF9icm93c2VyOwogICAgfQoKICAgIC8qKgogICAgICogQSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBmZ2V0cyB1dGlsaXR5LgogICAgICogVGhpcyBtZXRob2QgdW5kZXJzdGFuZHMgTUFDIChccikgYXMgd2VsbCBhcyBET1MvVW5peCBsaW5lIGVuZGluZ3MKICAgICAqCiAgICAgKiBAc2VlIGZnZXRzCiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgJGZoCiAgICAgKiBAcmV0dXJuIHN0cmluZyBvciBudWxsCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmdldHMoJGZoKQogICAgewogICAgICAgIGlmKCAhJGZoIHx8ICFpc19yZXNvdXJjZSgkZmgpICkgcmV0dXJuOwogICAgICAgICRwb3MxID0gZnRlbGwoJGZoKTsKCiAgICAgICAgJGxpbmUgPSBmZ2V0cygkZmgpOwogICAgICAgIGlmKCBzdHJwb3MoJGxpbmUsIlxyIikgPT09IEZBTFNFICkgcmV0dXJuICRsaW5lOwoKICAgICAgICAvLyB0aGVyZSBhcmUgbGluZSBlbmRpbmdzIGluIGhlcmUKICAgICAgICAvLyBsaW5lIGlzIHByb2JhYmx5IGEgY3JhcHB5IG1hYyBsaW5lLgogICAgICAgICRsZW4xID0gc3RybGVuKCRsaW5lKTsKICAgICAgICAkcG9zID0gc3RycG9zKCRsaW5lLCJcclxuIik7CiAgICAgICAgaWYoICRwb3MgIT09IEZBTFNFICkgewogICAgICAgICAgICAkbGVuID0gMjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRwb3MgPSBzdHJwb3MoJGxpbmUsIlxyIik7CiAgICAgICAgICAgICRsZW4gPSAxOwogICAgICAgIH0KCiAgICAgICAgJGxpbmUgPSBzdWJzdHIoJGxpbmUsMCwkcG9zKTsKICAgICAgICBmc2VlaygkZmgsKCRsZW4xIC0gJHBvcyAtICRsZW4gKSAqIC0xLFNFRUtfQ1VSKTsKICAgICAgICByZXR1cm4gJGxpbmU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIGZpcnN0IG5vbiBudWxsIGFyZ3VtZW50LgogICAgICogVGhpcyBtZXRob2QgYWNjZXB0cyBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZCBUaGUgZmlyc3Qgbm9uIG51bGwgYXJndW1lbnQKICAgICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29hbGVzY2UoKQogICAgewogICAgICAgICRhcmdzID0gZnVuY19nZXRfYXJncygpOwogICAgICAgIGlmKCAhaXNfYXJyYXkoJGFyZ3MpIHx8IGNvdW50KCRhcmdzKSA9PSAwICkgcmV0dXJuOwoKICAgICAgICBmb3IoJGkgPSAwLCAkaU1heCA9IGNvdW50KCRhcmdzKTsgJGkgPCAkaU1heDsgJGkrKyApIHsKICAgICAgICAgICAgaWYoICFpc19udWxsKCRhcmdzWyRpXSkgKSByZXR1cm4gJGFyZ3NbJGldOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdpdmVuIGFuIGFzc29jaWF0aXZlIGFycmF5LCBleHRyYWN0IHRoZSB2YWx1ZSBvZiBvbmUga2V5LCB3aXRoIGEgZGVmYXVsdC4KICAgICAqIElmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGFycmF5CiAgICAgKgogICAgICogQHBhcmFtIGhhc2ggJHBhcmFtcyBUaGUgaW5wdXQgYXNzb2NpYXRpdmUgYXJyYXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgaW5wdXQga2V5IHRvIHNlYXJjaCBmb3IKICAgICAqIEBwYXJhbSBtaXhlZCAkZGZsdCBUaGUgZGVmYXVsdCB2YWx1ZQogICAgICogQHJldHVybiBtaXhlZCBUaGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQgaW4gdGhlIGFycmF5LCBvciB0aGUgZGVmYXVsdAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9wYXJhbSgkcGFyYW1zLHN0cmluZyAka2V5LCRkZmx0ID0gbnVsbCkKICAgIHsKICAgICAgICAvLyBub3RlOiAkcGFyYW1zIG1heSBiZSBhbiBvYmplY3QgdGhhdCB1c2VzIEFycmF5QWNjZXNzLgogICAgICAgIGlmKCBpc3NldCgkcGFyYW1zWyRrZXldKSApIHsKICAgICAgICAgICAgJHRtcCA9ICRwYXJhbXNbJGtleV07CiAgICAgICAgICAgIGlmKCBpc19zdHJpbmcoJHRtcCkgKSAkdG1wID0gdHJpbSgkdG1wKTsKICAgICAgICAgICAgcmV0dXJuICR0bXA7CiAgICAgICAgICAgIC8vaWYoICFlbXB0eSgkdG1wKSApIHJldHVybiAkdG1wOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGRmbHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhbiBhc3NvY2lhdGl2ZSBhcnJheSwgZXh0cmFjdCB0aGUgdmFsdWUgb2Ygb25lIGtleSwgd2l0aCBhIGRlZmF1bHQuCiAgICAgKiBJZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0IGluIHRoZSBhcnJheSwgb3IgaXQncyB2YWx1ZSBpcyBlbXB0eSwgdGhlbiB0aGUgZGVmYXVsdCBpcyB1c2VkLgogICAgICoKICAgICAqIEBwYXJhbSBoYXNoICRwYXJhbXMgVGhlIGlucHV0IGFzc29jaWF0aXZlIGFycmF5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGlucHV0IGtleSB0byBzZWFyY2ggZm9yCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGRmbHQgVGhlIGRlZmF1bHQgdmFsdWUKICAgICAqIEByZXR1cm4gbWl4ZWQgVGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50IGluIHRoZSBhcnJheSwgb3IgdGhlIGRlZmF1bHQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfZW1wdHlfcGFyYW0oJHBhcmFtcyxzdHJpbmcgJGtleSwkZGZsdCA9IG51bGwpCiAgICB7CiAgICAgICAgLy8gbm90ZTogJHBhcmFtcyBtYXkgYmUgYW4gb2JqZWN0IHRoYXQgdXNlcyBBcnJheUFjY2Vzcy4KICAgICAgICBpZiggaXNzZXQoJHBhcmFtc1ska2V5XSkgJiYgIWVtcHR5KCRwYXJhbXNbJGtleV0pICkgewogICAgICAgICAgICAkdG1wID0gJHBhcmFtc1ska2V5XTsKICAgICAgICAgICAgaWYoIGlzX3N0cmluZygkdG1wKSApICR0bXAgPSB0cmltKCR0bXApOwogICAgICAgICAgICByZXR1cm4gJHRtcDsKICAgICAgICAgICAgLy9pZiggIWVtcHR5KCR0bXApICkgcmV0dXJuICR0bXA7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZGZsdDsKICAgIH0KCiAgICAvKioKICAgICAqIEdpdmVuIGEgc3JjIHNwZWNpZmljYXRpb24gYXR0ZW1wdCB0byByZXNvbHZlIGl0IGludG8gYSBmaWxlbmFtZSBvbiB0aGUgc2VydmVyCiAgICAgKgogICAgICogYWxnb3JpdGhtOgogICAgICogIDEuICBDaGVjayBmb3IgYW4gYWJzb2x1dGUgZmlsZW5hbWUKICAgICAqICAyLiAgVGVzdCBpZiB0aGUgc3RyaW5nIHN0YXJ0cyB3aXRoIHRoZSB1cGxvYWRzIHVybAogICAgICogICAgICAtIHJlcGxhY2Ugd2l0aCB1cGxvYWRzIHBhdGgKICAgICAqICAgICAgLSBjaGVjayBpZiBmaWxlIGV4aXN0cwogICAgICogIDMuICBUZXN0IGlmIHRoZSBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIHJvb3QgdXJsCiAgICAgKiAgICAgIC0gcmVwbGFjZSB3aXRoIHJvb3QgcGF0aAogICAgICogICAgICAtIGNoZWNrIGlmIGZpbGUgZXhpc3RzCiAgICAgKiAgNC4gIElmIHN0cmluZyBzdGFydHMgd2l0aCAvCiAgICAgKiAgICAgIC0gcHJlcGVuZCByb290IHBhdGgKICAgICAqICAgICAgLSBjaGVjayBpZiBmaWxlIGV4aXN0cwogICAgICogIDUuICBhc3N1bWUgc3RyaW5nIGlzIHJlbGF0aXZlIHRvIHVwbG9hZHMgcGF0aAogICAgICogICAgICAtIGNoZWNrayBpZiBmaWxlIGV4aXN0cwogICAgICogIDYuICBUZXN0IGlmIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgc3NsIHVybAogICAgICogICAgICAtIHJlcGxhY2Ugd2l0aCByb290IHBhdGgKICAgICAqICAgICAgLSBjaGVjayBpZiBmaWxlIGV4aXN0cwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNyYyB0aGUgc291cmNlCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgZmlsZW5hbWUgKGlmIHBvc3NpYmxlKS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzcmNfdG9fZmlsZShzdHJpbmcgJHNyYykKICAgIHsKICAgICAgICAkc3JjID0gdXJsZGVjb2RlKCRzcmMpOwogICAgICAgICRzcmNmaWxlID0gbnVsbDsKICAgICAgICAvLyRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsKICAgICAgICAkY29uZmlnID0gXENNU01TRXh0XGNvbmZpZzo6R2V0SW5zdGFuY2UoKTsKCiAgICAgICAgaWYoIGlzX2ZpbGUoJHNyYykgKSAkc3JjZmlsZSA9ICRzcmM7IC8vIHVzZXIgc3BlY2lmaWVkIHRoZSBjb21wbGV0ZSBwYXRoIHRvIHRoZSBmaWxlLgoKICAgICAgICBpZiggISRzcmNmaWxlICYmIHN0YXJ0c3dpdGgoJHNyYywkY29uZmlnWyd1cGxvYWRzX3VybCddKSApIHsKICAgICAgICAgICAgJHRtcCA9IHN0cl9yZXBsYWNlKCRjb25maWdbJ3VwbG9hZHNfdXJsJ10sJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ10sJHNyYyk7CiAgICAgICAgICAgIGlmKCBmaWxlX2V4aXN0cygkdG1wKSApICRzcmNmaWxlID0gJHRtcDsKICAgICAgICB9CiAgICAgICAgaWYoICEkc3JjZmlsZSAmJiBzdGFydHN3aXRoKCRzcmMsJGNvbmZpZ1sncm9vdF91cmwnXSkgKSB7CiAgICAgICAgICAgICR0bXAgPSBzdHJfcmVwbGFjZSgkY29uZmlnWydyb290X3VybCddLCRjb25maWdbJ3Jvb3RfcGF0aCddLCRzcmMpOwogICAgICAgICAgICBpZiggZmlsZV9leGlzdHMoJHRtcCkgKSAkc3JjZmlsZSA9ICR0bXA7CiAgICAgICAgfQogICAgICAgIGlmKCAhJHNyY2ZpbGUgJiYgc3RhcnRzd2l0aCgkc3JjLCcvJykgKSB7CiAgICAgICAgICAgICR0bXAgPSBjbXNfam9pbl9wYXRoKCRjb25maWdbJ3Jvb3RfcGF0aCddLCRzcmMpOwogICAgICAgICAgICBpZiggZmlsZV9leGlzdHMoJHRtcCkgKSAkc3JjZmlsZSA9ICR0bXA7CiAgICAgICAgfQogICAgICAgIGlmKCAhJHNyY2ZpbGUgKSB7CiAgICAgICAgICAgICR0bXAgPSBjbXNfam9pbl9wYXRoKCRjb25maWdbJ3VwbG9hZHNfcGF0aCddLCRzcmMpOwogICAgICAgICAgICBpZiggZmlsZV9leGlzdHMoJHRtcCkgKSAkc3JjZmlsZSA9ICR0bXA7CiAgICAgICAgfQogICAgICAgIGlmKCAhJHNyY2ZpbGUgJiYgaXNzZXQoJGNvbmZpZ1snc3NsX3VybCddKSAmJiBzdGFydHN3aXRoKCRzcmMsJGNvbmZpZ1snc3NsX3VybCddKSApIHsKICAgICAgICAgICAgJHRtcCA9IHN0cl9yZXBsYWNlKCRjb25maWdbJ3NzbF91cmwnXSwkY29uZmlnWydyb290X3BhdGgnXSwkc3JjKTsKICAgICAgICAgICAgaWYoIGZpbGVfZXhpc3RzKCR0bXApICkgJHNyY2ZpbGUgPSAkdG1wOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRzcmNmaWxlOwogICAgfQoKICAgIC8qKgogICAgICogVGVzdCBpZiB0aGUgY3VycmVudCByZXF1ZXN0IGlzIGZvciBhIHNlY3VyZSBjb25uZWN0aW9uCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3NsX3JlcXVlc3QoKSA6IGJvb2wKICAgIHsKICAgICAgICBpZiggIWlzc2V0KCRfU0VSVkVSWydIVFRQUyddKSB8fCBlbXB0eSgkX1NFUlZFUlsnSFRUUFMnXSkgfHwgJF9TRVJWRVJbJ0hUVFBTJ10gPT0gJ29mZicgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0IGEgZmlsZW5hbWUgdG8gYSBVUkwuCiAgICAgKiBJZiBhbiBhYnNvbHV0ZSBwYXRoIGlzIHNwZWNpZmllZCB0ZXN0cyBhcmUgZG9uZSB0byBjb21wYXJlIHRoZSBpbnB1dCB0byB0aGUgaW1hZ2UgdXBsb2FkcyBwYXRoLCB0aGUgdXBsb2FkcyBwYXRoIG9yIHRoZSByb290IHBhdGggb2YgdGhlIHN5c3RlbS4KICAgICAqIElmIGEgcmVsYXRpdmUgVVJMIHBhdGggIGlzIHBhc3NlZCBhIGZpbGUgcmVsYXRpdmUgdG8gdGhlIHJvb3QgdXJsIGlzIGFzc3VtZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZSB0aGUgZmlsZW5hbWUgdG8gY29udmVydCB0byBhIFVSTAogICAgICogQHBhcmFtIGJvb2wgJGZvcmNlX3NzbCBGb3JjZSB0aGUgb3V0cHV0IHVybCB0byB1c2UgSFRUUFMKICAgICAqIEByZXR1cm4gc3RyaW5nIG9yIG51bGwKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmaWxlX3RvX3VybChzdHJpbmcgJGZpbGUsYm9vbCAkZm9yY2Vfc3NsID0gRkFMU0UpCiAgICB7CiAgICAgICAgJGNvbmZpZyA9IFxDTVNNU0V4dFxjb25maWc6OkdldEluc3RhbmNlKCk7CiAgICAgICAgJHVybCA9IG51bGw7CiAgICAgICAgaWYoICFpc19maWxlKCRmaWxlKSApIHJldHVybiAkdXJsOwoKICAgICAgICBpZiggc3RhcnRzd2l0aCggJGZpbGUsICRjb25maWdbJ2ltYWdlX3VwbG9hZHNfcGF0aCddICkgKSB7CiAgICAgICAgICAgICR1cmwgPSBzdHJfcmVwbGFjZSgkY29uZmlnWydpbWFnZV91cGxvYWRzX3BhdGgnXSwkY29uZmlnWydpbWFnZV91cGxvYWRzX3VybCddLCRmaWxlKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiggc3RhcnRzd2l0aCggJGZpbGUsICRjb25maWdbJ3VwbG9hZHNfcGF0aCddKSApIHsKICAgICAgICAgICAgaWYoIHNlbGY6OnNzbF9yZXF1ZXN0KCkgfHwgJGZvcmNlX3NzbCApIHsKICAgICAgICAgICAgICAgICR1cmwgPSBzdHJfcmVwbGFjZSgkY29uZmlnWyd1cGxvYWRzX3BhdGgnXSwkY29uZmlnWydzc2xfdXBsb2Fkc191cmwnXSwkZmlsZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkdXJsID0gc3RyX3JlcGxhY2UoJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ10sJGNvbmZpZ1sndXBsb2Fkc191cmwnXSwkZmlsZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiggc3RhcnRzd2l0aCggJGZpbGUsICRjb25maWdbJ3Jvb3RfcGF0aCddKSApIHsKICAgICAgICAgICAgaWYoIHNlbGY6OnNzbF9yZXF1ZXN0KCkgfHwgJGZvcmNlX3NzbCApIHsKICAgICAgICAgICAgICAgICR1cmwgPSBzdHJfcmVwbGFjZSgkY29uZmlnWydyb290X3BhdGgnXSwkY29uZmlnWydzc2xfdXJsJ10sJGZpbGUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJHVybCA9IHN0cl9yZXBsYWNlKCRjb25maWdbJ3Jvb3RfcGF0aCddLCRjb25maWdbJ3Jvb3RfdXJsJ10sJGZpbGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHVybDsKICAgIH0KCiAgICAvKioKICAgICAqIEFuIGV4cGVyaW1lbnRhbCBtZXRob2QgdGhhdCBhdHRlbXB0cyB0byBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgZW5vdWdoIGF2YWlsYWJsZSBQSFAgbWVtb3J5IGZvciBhIGdpdmVuIG9wZXJhdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRuZWVkZWRfbWVtb3J5IFRoZSBlc3RpbWF0ZWQgYW1vdW50IG9mIG1lbW9yeSByZXF1aXJlZAogICAgICogQHBhcmFtIGZsb2F0ICRmdWRnZSBUaGUgZnVkZ2UgZmFjdG9yIChtdWx0aXBsaWVyKSB1c2VkIHRvIGJ1ZmZlciBhdmFpbGFibGUgbWVtb3J5LgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gaGF2ZV9lbm91Z2hfbWVtb3J5KGludCAkbmVlZGVkX21lbW9yeSxmbG9hdCAkZnVkZ2UgPSAyLjApIDogYm9vbAogICAgewogICAgICAgICRuZWVkZWRfbWVtb3J5ID0gYWJzKChpbnQpJG5lZWRlZF9tZW1vcnkpOwogICAgICAgICRmdWRnZSA9IG1pbigxMCxtYXgoMSxhYnMoKGZsb2F0KSRmdWRnZSkpKTsKICAgICAgICBpZiggJG5lZWRlZF9tZW1vcnkgPT0gMCApIHJldHVybiBUUlVFOwogICAgICAgICRuZWVkZWRfbWVtb3J5ICo9ICRmdWRnZTsKCiAgICAgICAgJGRpZmYgPSBzZWxmOjpnZXRfYXZhaWxhYmxlX21lbW9yeSgpIC0gJG5lZWRlZF9tZW1vcnk7CiAgICAgICAgaWYoICRkaWZmID4gMCApIHJldHVybiBUUlVFOwogICAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KCiAgICAvKioKICAgICAqIEFuIGV4cGVyaW1lbnRhbCBtZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSBhbW91bnQgb2YgYXZhaWxhYmxlIFBIUCBtZW1vcnkgcmVtYWluaW5nCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBnZXRfYXZhaWxhYmxlX21lbW9yeSgpIDogaW50CiAgICB7CiAgICAgICAgJE1CID0gMTAyNCAqIDEwMjQ7CiAgICAgICAgJG1lbW9yeV9saW1pdCA9IGluaV9nZXQoJ21lbW9yeV9saW1pdCcpOwogICAgICAgICRtZW1vcnlfbGltaXQgPSBpbnR2YWwoJG1lbW9yeV9saW1pdCk7CiAgICAgICAgJG1lbW9yeV9saW1pdCA9IG1heCgxLCRtZW1vcnlfbGltaXQpOwogICAgICAgICRtZW1vcnlfbGltaXQgKj0gJE1COwoKICAgICAgICByZXR1cm4gJG1lbW9yeV9saW1pdCAtIG1lbW9yeV9nZXRfdXNhZ2UoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFByZXR0eSB1cCwgc2FuaXRpemUsIGFuZCBjbGVhbiB1c2VyIGVudGVyZWQgaHRtbCBjb2RlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGh0bWwKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gY2xlYW5faW5wdXRfaHRtbChzdHJpbmcgJGh0bWwpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmVxdWlyZV9vbmNlKF9fRElSX18uJy9odG1MYXdlZC5waHAnKTsKICAgICAgICByZXR1cm4gaHRtTGF3ZWQoJGh0bWwsYXJyYXkoJ3NhZmUnPT4xLCdrZWVwX2JhZCc9PjAsJ2RlbnlfYXR0cmlidXRlJz0+J3N0eWxlLCBpZCwgb24qLCBkYXRhKicpKTsKICAgIH0KCiAgICAvKioKICAgICAqIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGNvbnZlcnQgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZmxvYXQgdmFsdWUgaW50byBhIGZsb2F0CiAgICAgKgogICAgICogQGRlcHJlY2F0ZWQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZsb2F0U3RyaW5nIHRoZSBpbnB1dCBzdHJpbmcKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRob3VzYW5kc19zZXAgVGhlIHRob3VzYW5kcyBzZXBhcmF0b3IKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlY2ltYWxfcHQgVGhlIGRlY2ltYWwgcG9pbnQKICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBwYXJzZV9mbG9hdCgkZmxvYXRTdHJpbmcsJHRob3VzYW5kc19zZXAgPSBudWxsLCRkZWNpbWFsX3B0ID0gbnVsbCkgOiBmbG9hdAogICAgewogICAgICAgICRMb2NhbGVJbmZvID0gbG9jYWxlY29udigpOwogICAgICAgIGlmKCAkdGhvdXNhbmRzX3NlcCA9PSBudWxsICkgJHRob3VzYW5kc19zZXAgPSAkTG9jYWxlSW5mb1snbW9uX3Rob3VzYW5kc19zZXAnXTsKICAgICAgICBpZiggISR0aG91c2FuZHNfc2VwICkgJHRob3VzYW5kc19zZXAgPSAkTG9jYWxlSW5mb1sndGhvdXNhbmRzX3NlcCddOwogICAgICAgIGlmKCAhJHRob3VzYW5kc19zZXAgKSAkdGhvdXNhbmRzX3NlcCA9ICcsJzsKICAgICAgICBpZiggJGRlY2ltYWxfcHQgPT0gbnVsbCApICRkZWNpbWFsX3B0ID0gJExvY2FsZUluZm9bJ21vbl90aG91c2FuZHNfc2VwJ107CiAgICAgICAgaWYoICEkZGVjaW1hbF9wdCApICRkZWNpbWFsX3B0ID0gJExvY2FsZUluZm9bJ2RlY2ltYWxfcG9pbnQnXTsKICAgICAgICBpZiggISRkZWNpbWFsX3B0ICkgJGRlY2ltYWxfcHQgPSAnLic7CiAgICAgICAgJGZsb2F0U3RyaW5nID0gc3RyX3JlcGxhY2UoJHRob3VzYW5kc19zZXAgLCAiIiwgJGZsb2F0U3RyaW5nKTsKICAgICAgICAkZmxvYXRTdHJpbmcgPSBzdHJfcmVwbGFjZSgkZGVjaW1hbF9wdCAsICIuIiwgJGZsb2F0U3RyaW5nKTsKICAgICAgICByZXR1cm4gKGZsb2F0KSBmbG9hdHZhbCgkZmxvYXRTdHJpbmcpOwogICAgfQoKICAgIC8qKgogICAgICogQSB1dGlsaXR5IGZ1bmN0aW9uIHRvIGVuY3J5cHQgcGFyYW1ldGVycyBmb3IgcGFzc2luZyB0aHJvdWdoIGRpZmZlcmVudCBVUkwncy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBhY2NlcHRzIGEgcGFyYW1ldGVyIGFycmF5LCBlbmNyeXB0cyBpdCwgYW5kIHJldHVybnMgYSBwYXJhbWV0ZXIgYXJyYXkgd2l0aCBhIHNpbmdsZSBlbGVtZW50OiBfZC4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhcmFtcyBhbiBhc3NvY2lhdGl2ZSBhcnJheQogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGVuY3J5cHRfcGFyYW1zKGFycmF5ICRwYXJhbXMpIDogYXJyYXkKICAgIHsKICAgICAgICAka2V5ID0gQ01TX1ZFUlNJT04uX19GSUxFX187CiAgICAgICAgJG91dCA9IFtdOwogICAgICAgICRvdXRbJ19kJ10gPSBiYXNlNjRfZW5jb2RlKHh0X2VuY3J5cHQ6OmVuY3J5cHQoJGtleSxzZXJpYWxpemUoJHBhcmFtcykpKTsKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICAvKioKICAgICAqIEEgdXRpbGl0eSBmdW5jdGlvbiB0byBkZWNyeXB0IHByZXZpb3VzbHkgZW5jcnlwdGVkIHBhcmFtZXRlcnMuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgYWNjZXB0cyBhIHBhcmFtZXRlciBhcnJheSAodGhlIG91dHB1dCBmcm9tIGl0J3MgY29tcGFuaW9uIG1ldGhvZCkgYW5kIGRlY3J5cHRzIHRoZSBpbnB1dC4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhcmFtcyBhbiBlbmNyeXB0ZWQgYXNzb2NpYXRpdmUgYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudDogX2QuCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZGVjcnlwdF9wYXJhbXMoYXJyYXkgJHBhcmFtcykgOiBhcnJheQogICAgewogICAgICAgICRrZXkgPSBDTVNfVkVSU0lPTi5fX0ZJTEVfXzsKICAgICAgICBpZiggIWlzc2V0KCRwYXJhbXNbJ19kJ10pICkgcmV0dXJuICRwYXJhbXM7CgogICAgICAgICR0bXAgPSB4dF9lbmNyeXB0OjpkZWNyeXB0KCRrZXksYmFzZTY0X2RlY29kZSgkcGFyYW1zWydfZCddKSk7CiAgICAgICAgJHRtcCA9IHVuc2VyaWFsaXplKCR0bXApOwogICAgICAgIHVuc2V0KCRwYXJhbXNbJ19kJ10pOwogICAgICAgICR0bXAgPSBhcnJheV9tZXJnZSgkcGFyYW1zLCR0bXApOwogICAgICAgIHJldHVybiAkdG1wOwogICAgfQoKICAgIC8qKgogICAgICogQSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0byBhc3Npc3QgaW4gZG9pbmcgY2VydGFpbiB0YXNrcyBvbmx5IG9uY2UgcGVyIGRheS4KICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgY29udmVydCB0aGUga2V5IGludG8gYSBwcmVmZXJlbmNlLCBhbmQgdGhlbiBjaGVjayB0aGUgdmFsdWUgb2YgdGhhdCBwcmVmZXJlbmNlCiAgICAgKiBpZiBpdCBpcyBtb3JlIHRoYW4gMjQgaG91cnMgc2luY2UgdGhlIGxhc3QgdGltZSB0aGlzIG1ldGhvZCB3YXMgY2FsbGVkIGZvciB0aGlzIHByZWZlcmVuY2UKICAgICAqIHRoZW4gdGhlIHZhbHVlIG9mIHRoZSBwcmVmZXJlbmNlIGlzIHVwZGF0ZWQgdG8gdGhlIGN1cnJlbnQgdGltZSBhbmQgRkFMU0UgaXMgcmV0dXJuZWQuCiAgICAgKiBPdGhlcndpc2UgVFJVRSBpcyByZXR1cm5lZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGRvbmVfdG9kYXkoc3RyaW5nICRrZXkpIDogYm9vbAogICAgewogICAgICAgICRrZXkgPSBtZDUoX19NRVRIT0RfXy4ka2V5KTsKICAgICAgICAkdmFsID0gY21zX3NpdGVwcmVmczo6Z2V0KCRrZXkpOwogICAgICAgIGlmKCB0aW1lKCkgLSAkdmFsIDwgMjQgKiAzNjAwICkgcmV0dXJuIFRSVUU7CiAgICAgICAgY21zX3NpdGVwcmVmczo6c2V0KCRrZXksdGltZSgpKTsKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICB9CgogICAgLyoqCiAgICAgKiBTd2FwIHRvIHZhcmlhYmxlcy4KICAgICAqIFByb2JhYmx5IHNob3VsZCBub3QgYmUgdXNlZCB3aGVyZSBjbG9uaW5nIG1heSBiZSByZXF1aXJlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGEKICAgICAqIEBwYXJhbSBtaXhlZCAkYgogICAgICovCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIHN3YXAoJiRhLCYkYikKICAgIHsKICAgICAgICAkdG1wID0gJGE7CiAgICAgICAgJGEgPSAkYjsKICAgICAgICAkYiA9ICR0bXA7CiAgICB9CgogICAgLyoqCiAgICAgKiBEdW1wIGFuIGV4Y2VwdGlvbiB0byB0aGUgZXJyb3IgbG9nLgogICAgICoKICAgICAqIEBwYXJhbSBFeGNlcHRpb24gJGUKICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBsb2dfZXhjZXB0aW9uKFxFeGNlcHRpb24gJGUpCiAgICB7CiAgICAgICAgJG91dCA9ICctLSBFWENFUFRJT04gRFVNUCAtLScuIlxuIjsKICAgICAgICAkb3V0IC49ICJUWVBFOiAiLmdldF9jbGFzcygkZSkuIlxuIjsKICAgICAgICAkb3V0IC49ICJNRVNTQUdFOiAiLiRlLT5nZXRNZXNzYWdlKCkuIlxuIjsKICAgICAgICAkb3V0IC49ICJGSUxFOiAiLiRlLT5nZXRGaWxlKCkuJzonLiRlLT5HZXRMaW5lKCkuIlxuIjsKICAgICAgICAkb3V0IC49ICJUUkVBQ0U6XG4iOwogICAgICAgICRvdXQgLj0gJGUtPmdldFRyYWNlQXNTdHJpbmcoKTsKICAgICAgICBkZWJ1Z190b19sb2coJG91dCwnLS0gJy5fX01FVEhPRF9fLicgLS0nKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIHVuaXF1ZSBndWlkCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVfZ3VpZCgpIDogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnY29tX2NyZWF0ZV9ndWlkJykgPT09IHRydWUpIHJldHVybiB0cmltKGNvbV9jcmVhdGVfZ3VpZCgpLCAne30nKTsKICAgICAgICByZXR1cm4gc3ByaW50ZignJTA0WCUwNFgtJTA0WC0lMDRYLSUwNFgtJTA0WCUwNFglMDRYJywgbXRfcmFuZCgwLCA2NTUzNSksIG10X3JhbmQoMCwgNjU1MzUpLCBtdF9yYW5kKDAsIDY1NTM1KSwgbXRfcmFuZCgxNjM4NCwgMjA0NzkpLCBtdF9yYW5kKDMyNzY4LCA0OTE1MSksIG10X3JhbmQoMCwgNjU1MzUpLCBtdF9yYW5kKDAsIDY1NTM1KSwgbXRfcmFuZCgwLCA2NTUzNSkpOwogICAgfQoKICAgIC8qKgogICAgICogR2l2ZW4gYSBjb21wbGV0ZSBwYXRoIGFuZCBmaWxlbmFtZSBnZXQgYSBwcm9wb3NlZCBmaWxlbmFtZSBmb3IgdGhlIHRodW1ibmFpbC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBBIGNvbXBsZXRlIHBhdGggdG8gYW4gaW1hZ2UgZmlsZQogICAgICogQHJldHVybiBzdHJpbmcgb3IgbnVsbAogICAgICovCiAgICBzdGF0aWMgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldF90aHVtYm5haWxfbmFtZShzdHJpbmcgJGZpbGVuYW1lKQogICAgewogICAgICAgIGlmKCAhJGZpbGVuYW1lIHx8ICFpc19maWxlKCAkZmlsZW5hbWUgKSApIHJldHVybjsKICAgICAgICAkZG4gPSBkaXJuYW1lKCAkZmlsZW5hbWUgKTsKICAgICAgICAkYm4gPSBiYXNlbmFtZSggJGZpbGVuYW1lICk7CiAgICAgICAgaWYoICEkZG4gfHwgIWlzX2RpciggJGRuICkgKSByZXR1cm47CgogICAgICAgIGlmKCBzdGFydHN3aXRoKCAkYm4sICd0aHVtYl8nKSApIHJldHVybiAkZmlsZW5hbWU7CiAgICAgICAgJHRuID0gJ3RodW1iXycuJGJuOwogICAgICAgICR0ZiA9ICIkZG4vJHRuIjsKICAgICAgICByZXR1cm4gJHRmOwogICAgfQoKICAgIC8qKgogICAgICogR2l2ZW4gYSB0aHVtYm5haWwsIHJldHVybiB0aGUgcGF0aCB0byB0aGUgdGh1bWJuYWlsIGlmIGl0IGV4aXN0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGZpbmRfaW1hZ2VfdGh1bWJuYWlsKCAkZmlsZW5hbWUgKQogICAgewogICAgICAgICR0ZiA9IHNlbGY6OmdldF90aHVtYm5haWxfbmFtZSggJGZpbGVuYW1lICk7CiAgICAgICAgaWYoICEkdGYgKSByZXR1cm47CiAgICAgICAgaWYoIGlzX2ZpbGUoICR0ZiApICkgcmV0dXJuICR0ZjsKICAgIH0KCiAgICAvKioKICAgICAqIEEgY29udmVuaWVuY2UgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBzdGFuZGFyZGl6ZWQgdGh1bWJuYWlsIGZvciBhbiBpbWFnZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgY29tcGxldGUgcGF0aCB0byB0aGUgaW1hZ2UgZmlsZQogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgcGF0aCB0byB0aGUgdGh1bWJuYWlsIGZpbGUuCiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlX2ltYWdlX3RodW1ibmFpbChzdHJpbmcgJGZpbGVuYW1lKQogICAgewogICAgICAgICR0ZiA9IHNlbGY6OmdldF90aHVtYm5haWxfbmFtZSggJGZpbGVuYW1lICk7CiAgICAgICAgaWYoICEkdGYgKSByZXR1cm47CiAgICAgICAgeHRfaW1hZ2U6OnRyYW5zZm9ybV9pbWFnZSggJGZpbGVuYW1lLCAkdGYsIDEwMCApOwogICAgICAgIHJldHVybiAkdGY7CiAgICB9CgogICAgLyoqCiAgICAgKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgVVJMIHRoYXQgb2JmdXNjYXRlcyBhIGZpbGVuYW1lLCBidXQgYWxsb3dzIGRvd25sb2FkLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHBhZ2VfaWQgQSBwYWdlIGlkIHRvIHVzZSBmb3IgZGlzcGxheWluZyB0aGUgZmlsZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFRoZSBjb21wbGV0ZSBwYXRobmFtZQogICAgICogQHBhcmFtIGJvb2wgJGRvd25sb2FkICBXaGV0aGVyIHRoZSBmaWxlIHNob3VsZCBiZSBmb3JjZWQgdG8gZG93bmxvYWQsIG9yIHdoZXRoZXIgdGhlIGJyb3dzZXIgY2FuIGhhbmRsZSBpdAogICAgICogQHJldHVybiBzdHJpbmcgQSB1cmwgdGhhdCBhbGxvd3MgdmlldyBvciBkb3dubG9hZCBvZiB0aGUgaW1hZ2UsIGJ1dCBvYmZ1c2NhdGVzIHRoZSBmaWxlIG5hbWUgYW5kIHBhdGguCiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X29iZnVzY2F0ZWRfZmlsZV91cmwoaW50ICRwYWdlX2lkLCBzdHJpbmcgJGZpbGVuYW1lLCBib29sICRkb3dubG9hZCA9IG51bGwgKQogICAgewogICAgICAgICRwYWdlX2lkID0gKGludCkgJHBhZ2VfaWQ7CiAgICAgICAgJGZpbGVuYW1lID0gdHJpbSggJGZpbGVuYW1lICk7CiAgICAgICAgJGRvd25sb2FkID0gKGJvb2wpICRkb3dubG9hZDsKICAgICAgICBpZiggJHBhZ2VfaWQgPCAxIHx8ICEkZmlsZW5hbWUgfHwgIWlzX2ZpbGUoJGZpbGVuYW1lKSApIHJldHVybjsKICAgICAgICAkbW9kID0gc2VsZjo6JF9pbnN0YW5jZS0+bW9kOwogICAgICAgICR1cmwgPSAkbW9kLT5jcmVhdGVfdXJsKCdjbnRudDAxJywgJ2dldGZpbGUnLCAkcGFnZV9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmOjplbmNyeXB0X3BhcmFtcyhbJ2ZpbGUnID0+JGZpbGVuYW1lLCAnZG93bmxvYWQnID0+JGRvd25sb2FkIF0gKSApIC4gJyZzaG93dGVtcGxhdGU9ZmFsc2UnOwogICAgICAgIHJldHVybiAkdXJsOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIEhUTUwgZWxlbWVudHMgZm9yIGEgZm9ybSB0aGF0IGNvbnRhaW4gQ1NSRiBrZXlzLgogICAgICogdGhpcyBtZXRob2QgYWxzbyBzdG9yZXMgZGF0YSBpbiB0aGUgc2Vzc2lvbiBmb3IgdXNlIGJ5IHRoZSB2YWxpZF9mb3JtX2NzcmYoKSBtZXRob2QuCiAgICAgKgogICAgICogQHNlZSB4dF91dGlsczo6dmFsaWRfZm9ybV9jc3JmCiAgICAgKiBAcmV0dXJuIHN0cmluZyBIVE1MIGZvcm0gZWxlbWVudHMgYXMgYSBzdHJpbmcuCiAgICAgKi8KICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlX2NzcmZfaW5wdXRzKCkgOiBzdHJpbmcKICAgIHsKICAgICAgICAvLyB1c2UgdGhpcyB3aGVuIGNyZWF0aW5nIHRoZSBmb3JtLgogICAgICAgICRuYW1lID0gc2VsZjo6Y3JlYXRlX2d1aWQoKTsKICAgICAgICAkbmFtZSA9IHN0cl9yZXBsYWNlKCctJywnJywkbmFtZSk7CiAgICAgICAgJHRva2VuICA9IHNlbGY6OmNyZWF0ZV9ndWlkKCk7CiAgICAgICAgJF9TRVNTSU9OWyAneHRfY3NyZl8nLiRuYW1lIF0gPSAkdG9rZW47CgogICAgICAgICRmbXQgPSAnPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iJXMiIHZhbHVlPSIlcyIvPic7CiAgICAgICAgJG91dCA9IHNwcmludGYoICRmbXQsICd4dF9jc3JmX25hbWUnLCAkbmFtZSApOwogICAgICAgICRvdXQgLj0gc3ByaW50ZiggJGZtdCwgJ3h0X2NzcmZfdG9rZW4nLCAkdG9rZW4gKTsKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICAvKioKICAgICAqIEdpdmVuIHZhcmlhYmxlcyBhdmFpbGFibGUgaW4gJF9QT1NUIGdlbmVyYXRlZCBieSB0aGUgY3JlYXRlX2NzcmZfaW5wdXRzKCkgbWV0aG9kCiAgICAgKiB2YWxpZGF0ZSB0aGVpciB2YWx1ZXMgd2l0aCB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIHNlc3Npb24uCiAgICAgKgogICAgICogVGhpcyBtZXRob2Qgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUgaWYgJ2lnbm9yZV94dF9jc3JmJyBpcyBlbmFibGVkIGluIHRoZSBjb25maWcucGhwCiAgICAgKgogICAgICogQHNlZSB4dF91dGlsczo6Y3JlYXRlX2NzcmZfaW5wdXRzKCkKICAgICAqIEByZXR1cm4gdHJ1ZXxudWxsIFRydWUgaWYgdGhlIENTUkYgZGF0YSBpbiAkX1BPU1QgbWF0Y2hlcyB0aGF0IGluIHRoZSBzZXNzaW9uLiAgTnVsbC9mYWxsc2Ugb3RoZXJ3aXNlLgogICAgICovCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIHZhbGlkX2Zvcm1fY3NyZigpCiAgICB7CiAgICAgICAgLy8kY29uZmlnID0gXGNtc191dGlsczo6Z2V0X2NvbmZpZygpOwogICAgICAgICRjb25maWcgPSBcQ01TTVNFeHRcY29uZmlnOjpHZXRJbnN0YW5jZSgpOwogICAgICAgIAogICAgICAgIGlmKCAkY29uZmlnWydpZ25vcmVfeHRfY3NyZiddICkgeyByZXR1cm4gVFJVRTsgfQoKICAgICAgICAkbmFtZSA9IFx4dF9wYXJhbTo6Z2V0X3N0cmluZyggJF9QT1NULCAneHRfY3NyZl9uYW1lJyApOwogICAgICAgICR0b2tlbiA9IFx4dF9wYXJhbTo6Z2V0X3N0cmluZyggJF9QT1NULCAneHRfY3NyZl90b2tlbicgKTsKICAgICAgICAKICAgICAgICBpZiggISRuYW1lICkgeyByZXR1cm4gRkFMU0U7IH0KCiAgICAgICAgJHNlc3NfdG9rZW4gPSBudWxsOwogICAgICAgICRrZXkgPSAneHRfY3NyZl8nLiRuYW1lOwogIAogICAgICBpZihpc3NldCgkX1NFU1NJT05bJGtleV0pKQogICAgICB7CiAgICAgICAgJHNlc3NfdG9rZW4gPSAkX1NFU1NJT05bJGtleV07CiAgICAgICAgdW5zZXQoJF9TRVNTSU9OWyRrZXldKTsKICAgICAgfQogICAgICAKICAgICAgICBpZiggISR0b2tlbiB8fCAhJHNlc3NfdG9rZW4gKSAgeyByZXR1cm4gRkFMU0U7IH0KCiAgICAgICAgaWYoICR0b2tlbiAhPT0gJHNlc3NfdG9rZW4gKSB7IHJldHVybiBGQUxTRTsgfQoKICAgICAgICByZXR1cm4gVFJVRTsKICAgIH0KICAKICAvKioKICAgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBjb252ZXJ0IHNpbXBsZSBzaGFsbG93IG9iamV0cyBmcm9tIG9uZSBjbGFzcyB0byBhbm90aGVyLgogICAqCiAgICogYmFzZWQgb24gd3d3LmdlZWtzZm9yZ2Vla3Mub3JnIGFydGljbGU6CiAgICogIlR5cGUgQ2FzdGluZyBhbmQgQ29udmVyc2lvbiBvZiBhbiBPYmplY3QgdG8gYW4gT2JqZWN0IG9mIG90aGVyIGNsYXNzIgogICAqCiAgICogQHBhcmFtICRvYmplY3QKICAgKiBAcGFyYW0gJGZpbmFsX2NsYXNzCiAgICoKICAgKiBAcmV0dXJuIG1peGVkCiAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbnZlcnRfb2JqX2NsYXNzKCRvYmplY3QsICRmaW5hbF9jbGFzcykKICAgIHsKICAgICAgcmV0dXJuIFx1bnNlcmlhbGl6ZSgKICAgICAgICBcc3ByaW50ZigKICAgICAgICAgICdPOiVkOiIlcyIlcycsCiAgICAgICAgICBcc3RybGVuKCRmaW5hbF9jbGFzcyksCiAgICAgICAgICAkZmluYWxfY2xhc3MsCiAgICAgICAgICBcc3Ryc3RyKFxzdHJzdHIoXHNlcmlhbGl6ZSgkb2JqZWN0KSwgJyInKSwgJzonKQogICAgICAgICkKICAgICAgKTsKICAgIH0KfSAvLyBjbGFzcwoKIwojIEVPRgojCg==]]></data>
	</file>
	<file>
	  <filename>/lib/cmsms</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/cmsms/class.permissions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogcGVybWlzc2lvbnMucGhwDQogKiBAYXV0aG9yIEpvTW9yZyBha2EgRmVybmFuZG8gTW9yZ2Fkbw0KICogQGxpY2Vuc2UgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgMi4wDQogKiBAcGFja2FnZSBDTVNNU0V4dA0KICovDQoNCi8qKg0KICogQGlnbm9yZQ0KICogQHdpcA0KICovDQoNCm5hbWVzcGFjZSBDTVNNU0V4dFxjbXNtczsNCg0KDQpjbGFzcyBwZXJtaXNzaW9ucw0Kew0KICBwdWJsaWMgY29uc3QgR0FfQllfUkFXICA9ICdyYXcnOw0KICBwdWJsaWMgY29uc3QgR0FfQllfSUQgICA9ICdpZCc7DQogIHB1YmxpYyBjb25zdCBHQV9CWV9OQU1FID0gJ25hbWUnOw0KICANCiAgLyoqDQogICAqIGdldCBhbGwgcGVybWlzc2lvbnMgZm9yIHRoZSBnaXZlbiByZWFsbQ0KICAgKiBhIHJlYWxtIGNhbiBiZSBhIG1vZHVsZSBuYW1lIG9yICdDb3JlJw0KICAgKiBpZiBub3Qgc3BlY2lmaWVkLCBhbGwgcGVybWlzc2lvbnMgd2lsbCBiZSByZXR1cm5lZA0KICAgKg0KICAgKiBAcGFyYW0gbnVsbCAkcmVhbG0gYSBtb2R1bGUgbmFtZSBvciAnQ29yZScNCiAgICogQHBhcmFtIG51bGwgJGJ5IGlkIG9yIG5hbWUsIGRlZmF1bHQgaXMgaWQNCiAgICoNCiAgICogQHJldHVybiBhcnJheSB0aGUgYXJyYXkgd2lsbCBoYXZlIHRoZSBwZXJtaXNzaW9ucyB3aXRoIGEgbmF0dXJhbCBpbmRleCBpZiAkYnkgaXMgJ3JhdycNCiAgICogICAgICAgICAgICAgICBvciBhbiBpbmRleCBiYXNlZCBvbiAkYnkgaWYgJGJ5IGlzICdpZCcgb3IgJ25hbWUnDQogICAqLw0KICBzdGF0aWMgZnVuY3Rpb24gZ2V0X2FsbCgkcmVhbG0gPSBOVUxMLCAkYnkgPSBzZWxmOjpHQV9CWV9SQVcpIDogYXJyYXkNCiAgew0KICAgICR3aGVyZSA9ICcnOw0KICAgICRyZWFsbSA9ICdjb3JlJyA9PT0gJHJlYWxtID8gJ0NvcmUnIDogJHJlYWxtOw0KICAgIA0KICAgIGlmKCdDb3JlJyA9PT0gJHJlYWxtIHx8IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJHJlYWxtKSApDQogICAgew0KICAgICAgJHdoZXJlID0gJyBXSEVSRSBwZXJtaXNzaW9uX3NvdXJjZSA9ICInIC4gJHJlYWxtIC4gJyInOw0KICAgIH0NCiAgICANCiAgICAkcSA9ICdTRUxFQ1QgKiBGUk9NICcgLiBcY21zX2RiX3ByZWZpeCgpIC4gJ3Blcm1pc3Npb25zJyAuICR3aGVyZTsNCiAgICANCiAgICB0cnkNCiAgICB7DQogICAgICAkciA9IFxjbXNtcygpLT5HZXREYigpLT5HZXRBbGwoJHEpOw0KICAgICAgDQogICAgICBpZihcY21zbXMoKS0+R2V0RGIoKS0+RXJyb3JObygpID4gMCkNCiAgICAgIHsNCiAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKFxjbXNtcygpLT5HZXREYigpLT5FcnJvck1zZygpLCBcY21zbXMoKS0+R2V0RGIoKS0+RXJyb3JObygpKTsNCiAgICAgIH0NCiAgICB9DQogICAgY2F0Y2goXEV4Y2VwdGlvbiAkZSkNCiAgICB7DQogICAgICBcYXVkaXQoMCwgX19DTEFTU19fLCAnRXJyb3I6ICcgLiAkZS0+Z2V0TWVzc2FnZSgpKTsNCiAgICAgIHJldHVybiBbXTsNCiAgICB9DQogICAgDQogICAgaWYoICEkciApIHsgcmV0dXJuIFtdOyB9DQogICAgDQogICAgaWYoc2VsZjo6R0FfQllfSUQgPT09ICRieSkNCiAgICB7DQogICAgICAkciA9IFxhcnJheV9jb2x1bW4oJHIsIE5VTEwsICdwZXJtaXNzaW9uX2lkJyk7DQogICAgfQ0KICAgIGVsc2VpZihzZWxmOjpHQV9CWV9OQU1FID09PSAkYnkpDQogICAgew0KICAgICAgJHIgPSBcYXJyYXlfY29sdW1uKCRyLCBOVUxMLCAncGVybWlzc2lvbl9uYW1lJyk7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkcjsNCiAgfQ0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBncm91cHNfZ2V0X2FsbCgpIDogYXJyYXkNCiAgICB7DQogICAgICANCiAgICAgICRxID0gJ1NFTEVDVCBwLnBlcm1pc3Npb25faWQsIHAucGVybWlzc2lvbl9zb3VyY2UsIHAucGVybWlzc2lvbl90ZXh0LCB1cC5ncm91cF9pZCBGUk9NICcgLg0KICAgICAgICAgICAgICAgXGNtc19kYl9wcmVmaXgoKSAuICdwZXJtaXNzaW9ucyBwIExFRlQgSk9JTiAnIC4gXGNtc19kYl9wcmVmaXgoKSAuDQogICAgICAgICAgICAgICAnZ3JvdXBfcGVybXMgdXAgT04gcC5wZXJtaXNzaW9uX2lkID0gdXAucGVybWlzc2lvbl9pZCBPUkRFUiBCWSBwLnBlcm1pc3Npb25fdGV4dCc7DQogICAgICANCiAgICAgICRyID0gXGNtc21zKCktPkdldERiKCktPkdldEFsbCgkcSk7DQogICAgICANCi8vICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQovLyAgICAgICRhYmMxMjM0NTYgPSBcY29tcGFjdCgncicpOw0KLy8gICAgICBlY2hvKCc8YnIvPjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojxici8+PHByZT4nKTsNCi8vICAgICAgXHZhcl9leHBvcnQoJGFiYzEyMzQ1Nik7DQovLyAgICAgIGVjaG8oJzwvcHJlPjxici8+JyAuIF9fRklMRV9fIC4gJyA6ICgnIC4gX19DTEFTU19fIC4gJyA6OiAnIC4gX19GVU5DVElPTl9fIC4gJykgOiAnIC4gX19MSU5FX18gLiAnPGJyLz4nKTsNCi8vICAgICAgZGllKCc8YnIvPlJJUCE8YnIvPicpOw0KLy8gICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICB9DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/cmsms_ext_bootstrap.inc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyoqDQogKiBAaWdub3JlDQogKi8NCmRlZmluZSgnQ01TTVNFWFRfVEFCTEVfQVNTT0NEQVRBJywgY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9jbXNtc2V4dF9hc3NvY2RhdGEnKTsNCg0KZnVuY3Rpb24gX194dF91bnNlcmlhbGl6ZV9jYWxsYmFjayhzdHJpbmcgJGNsYXNzbmFtZSkNCnsNCiAgLy90aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0Nhbm5vdCB1bnNlcmlhbGl6ZSBvYmplY3Qgb2YgdHlwZSAnIC4gJGNsYXNzbmFtZSk7DQogIFxhdWRpdCgwLCAkY2xhc3NuYW1lLCAnQ2Fubm90IHVuc2VyaWFsaXplIG9iamVjdCBvZiB0eXBlICcgLiAkY2xhc3NuYW1lKTsNCn0NCg0KIyBmdW5jdGlvbnMgbmVlZGVkIGJlZm9yZSB0aGUgQ01TTVNFeHQgbW9kdWxlIGNsYXNzIGlzIGxvYWRlZA0KaW5jbHVkZV9vbmNlIGNtc19qb2luX3BhdGgoIF9fRElSX18gLCAnZnVuY3Rpb25zL2Z1bmN0aW9ucy5ib290c3RyYXAucGhwJyk7DQojIG5lZWRlZCB0byBpbml0aWFsaXplIHRoZSBDTVNNU0V4dCBtb2R1bGUgY2xhc3MNCmluY2x1ZGVfb25jZSBjbXNfam9pbl9wYXRoKCBfX0RJUl9fICwgJ2NsYXNzLlhUTW9kdWxlLnBocCcpOw0KDQovKioNCiAqIEBpZ25vcmUNCiAqIEBub3RlOiByZXZpc2l0ISEhIQ0KICogQHRvZG8gdGhpcyBtYXkgaGF2ZSB3b3JrZWQgd2l0aCB0aGUgQ0dFeHRlbnNpb25zIHNldHVwLCBidXQgd2UgbmVlZCB0byBjaGVjayB3aGVyZSB0aGlzIHNob3VsZCBnbyBpbiB0aGUgZnV0dXJlIGFuZCB0byBkbyBleGFjdGx5IHdoYXQ/Pz8/IC0gSk0NCiAqLw0KZnVuY3Rpb24geHRfbGFuZygpDQp7DQogICRtb2QgID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKE1PRF9DTVNNU0VYVCk7DQogICRhcmdzID0gZnVuY19nZXRfYXJncygpOw0KICANCiAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jX2FycmF5KFskbW9kLCAnTGFuZyddLCAkYXJncyk7DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/collections</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/collections/class.data.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcY29sbGVjdGlvbnM7DQoNCg0KY2xhc3MgZGF0YSBleHRlbmRzIFxDTVNNU0V4dFxjb3JlXG1vcnBoYWJsZQ0Kew0KICANCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/collections/class.priority_queue.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KbmFtZXNwYWNlIENNU01TRXh0XGNvbGxlY3Rpb25zOw0KDQpjbGFzcyBwcmlvcml0eV9xdWV1ZQ0Kew0KICBwcml2YXRlICRfcXVldWU7DQogIHByaXZhdGUgJF9jb3VudGVyOw0KICANCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkNCiAgew0KICAgICR0aGlzLT5fcXVldWUgPSBuZXcgXFNwbFByaW9yaXR5UXVldWUoKTsNCiAgICAkdGhpcy0+X2NvdW50ZXIgPSAwOw0KICB9DQogIA0KICAvKioNCiAgICogQWRkIGFuIGl0ZW0gdG8gdGhlIHF1ZXVlIHdpdGggYSBnaXZlbiBwcmlvcml0eS4NCiAgICoNCiAgICogQHBhcmFtIG1peGVkICRpdGVtDQogICAqIEBwYXJhbSBpbnQgICAkcHJpb3JpdHkNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBlbnF1ZXVlKCRpdGVtLCBpbnQgJHByaW9yaXR5KSA6IHZvaWQNCiAgew0KICAgICRzZXJpYWxpemVkSXRlbSA9IHNlcmlhbGl6ZSgkaXRlbSk7DQogICAgLy8gVXNlIGEgdHVwbGUgKHByaW9yaXR5LCBjb3VudGVyKSB0byBlbnN1cmUgRklGTyBmb3IgaXRlbXMgd2l0aCBzYW1lIHByaW9yaXR5DQogICAgJHRoaXMtPl9xdWV1ZS0+aW5zZXJ0KCRzZXJpYWxpemVkSXRlbSwgWyRwcmlvcml0eSwgJHRoaXMtPl9jb3VudGVyKytdKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIFJlbW92ZSBhbmQgcmV0dXJuIHRoZSBoaWdoZXN0IHByaW9yaXR5IGl0ZW0gZnJvbSB0aGUgcXVldWUuDQogICAqDQogICAqIEByZXR1cm4gbWl4ZWQNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBkZXF1ZXVlKCkNCiAgew0KICAgIGlmKCR0aGlzLT5fcXVldWUtPmlzRW1wdHkoKSkNCiAgICB7DQogICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1F1ZXVlIGlzIGVtcHR5Jyk7DQogICAgfQ0KICAgIA0KICAgICRzZXJpYWxpemVkSXRlbSA9ICR0aGlzLT5fcXVldWUtPmV4dHJhY3QoKTsNCiAgICANCiAgICByZXR1cm4gdW5zZXJpYWxpemUoJHNlcmlhbGl6ZWRJdGVtKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIENoZWNrIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eS4NCiAgICoNCiAgICogQHJldHVybiBib29sDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gaXNFbXB0eSgpIDogYm9vbA0KICB7DQogICAgcmV0dXJuICR0aGlzLT5fcXVldWUtPmlzRW1wdHkoKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEdldCB0aGUgc2l6ZSBvZiB0aGUgcXVldWUuDQogICAqDQogICAqIEByZXR1cm4gaW50DQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gc2l6ZSgpIDogaW50DQogIHsNCiAgICByZXR1cm4gJHRoaXMtPl9xdWV1ZS0+Y291bnQoKTsNCiAgfQ0KfQ0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/core</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/core/abstract.ASingleton.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcY29yZTsNCg0KDQphYnN0cmFjdCBjbGFzcyBBU2luZ2xldG9uDQp7DQogICMgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIGV4dGVuZGluZyB0aGlzIG9uZQ0KICAvL3Byb3RlY3RlZCBzdGF0aWMgJF9pbnN0YW5jZTsNCiAgDQogIGFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpOw0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX19jbG9uZSgpIHsgfQ0KICBwdWJsaWMgZnVuY3Rpb24gX193YWtldXAoKSB7IH0NCiAgDQogIA0KICAvKioNCiAgICogcHVibGljIG1ldGhvZHMNCiAgICovDQogIA0KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEluc3RhbmNlKCkNCiAgew0KICAgIGlmIChudWxsID09PSBzdGF0aWM6OiRfaW5zdGFuY2UpeyBzdGF0aWM6OiRfaW5zdGFuY2UgPSBuZXcgc3RhdGljKCk7fQ0KICAgIA0KICAgIHJldHVybiBzdGF0aWM6OiRfaW5zdGFuY2U7DQogIH0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/core/class.api_base.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQHBhY2thZ2UgQ01TTVNFeHQNCiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKTIwMjQgRmVybmFuZG8gTW9yZ2Fkby4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlIEdQTCAzLjAgb3IgbGF0ZXINCiAqIEBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbA0KICovDQoNCm5hbWVzcGFjZSBDTVNNU0V4dFxjb3JlOw0KDQoNCmNsYXNzIGFwaV9iYXNlDQp7DQogIHByaXZhdGUgJF9vcHRpb25zID0gW107DQogIHByaXZhdGUgJF90YXJnZXQgICA9IFtdOw0KICANCiAgLyoqDQogICAqIEV4dGVuZHMgdGhlIG9wdGlvbnMgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuDQogICAqDQogICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBUaGUgb3B0aW9ucyB0byBleHRlbmQgdGhlIGN1cnJlbnQgb2JqZWN0IHdpdGguDQogICAqIEByZXR1cm4gdm9pZA0KICAgKi8NCiAgcHJpdmF0ZSBmdW5jdGlvbiBleHRlbmQoYXJyYXkgICRvcHRpb25zKSA6IHZvaWQNCiAgew0KICAgICR0aGlzLT5fb3B0aW9ucyA9IFxhcnJheV9tZXJnZSgkdGhpcy0+X29wdGlvbnMsICRvcHRpb25zKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEluaXRpYWxpemVzIHRoZSBmdW5jdGlvbi4NCiAgICoNCiAgICogQHJldHVybiB2b2lkDQogICAqLw0KICBwcml2YXRlIGZ1bmN0aW9uIGluaXQoKSA6IHZvaWQNCiAgew0KICAgICR0aGlzLT5fb3B0aW9ucyA9IFtdOyAvLyBvdmVycmlkZSB0aGlzIG1ldGhvZCBpbiBjaGlsZCBjbGFzc2VzIHdpdGggdGhlIGRlZmF1bHQgb3B0aW9ucw0KICB9DQogIA0KICAvKioNCiAgICogQ29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIHRoZSBjbGFzcy4NCiAgICoNCiAgICogQHBhcmFtIG1peGVkICR0YXJnZXQgVGhlIHRhcmdldCB2YWx1ZS4gRGVmYXVsdCBpcyBOVUxMLg0KICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgKG9wdGlvbmFsKSBBbiBhcnJheSBvZiBvcHRpb25zLiBEZWZhdWx0IGlzIGFuIGVtcHR5IGFycmF5Lg0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR0YXJnZXQgPSBOVUxMLCAmJG9wdGlvbnMgPSBbXSkNCiAgew0KICAgICR0aGlzLT5fdGFyZ2V0ID0gJHRhcmdldDsNCiAgICAkdGhpcy0+X29wdGlvbnMgPSBcYXJyYXlfbWVyZ2UoJHRoaXMtPl9vcHRpb25zLCAkb3B0aW9ucyk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBFeGVjdXRlcyBhIG1ldGhvZCBkeW5hbWljYWxseSBiYXNlZCBvbiB0aGUgZ2l2ZW4gbmFtZSBhbmQgYXJndW1lbnRzLg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgdG8gZXhlY3V0ZS4NCiAgICogQHBhcmFtIGFycmF5ICRhcmd1bWVudHMgVGhlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBtZXRob2QuDQogICAqIEB0aHJvd3MgXEJhZE1ldGhvZENhbGxFeGNlcHRpb24gSWYgdGhlIG1ldGhvZCBkb2VzIG5vdCBleGlzdC4NCiAgICogQHJldHVybiBtaXhlZCBUaGUgcmVzdWx0IG9mIHRoZSBtZXRob2QgZXhlY3V0aW9uLg0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIF9fY2FsbCgkbmFtZSwgJGFyZ3VtZW50cykNCiAgew0KICAgIGlmKCAhXHN0YXJ0c3dpdGgoJG5hbWUsICAnXycpICYmIFxtZXRob2RfZXhpc3RzKCR0aGlzLCAkbmFtZSkgKQ0KICAgIHsNCiAgICAgIHJldHVybiBcY2FsbF91c2VyX2Z1bmNfYXJyYXkoWyR0aGlzLCAkbmFtZV0sICRhcmd1bWVudHMpOw0KICAgIH0NCiAgICANCiAgICB0aHJvdyBuZXcgXEJhZE1ldGhvZENhbGxFeGNlcHRpb24oJG5hbWUpOw0KICB9DQogIA0KfQ0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/core/class.collection.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcY29yZTsNCg0KDQpjbGFzcyBjb2xsZWN0aW9uIGV4dGVuZHMgbW9ycGhhYmxlDQp7DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/core/class.dic.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQGZpbGUgY2xhc3MuZGljLnBocA0KICogQGJyaWVmIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGljIGNsYXNzLg0KICogQGRldGFpbHMgVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBzZXJ2aWNlcyBmcm9tIHRoZSBjb250YWluZXIuQA0KICogQGF1dGhvciBGZXJuYW5kbyBNb3JnYWRvIDxKbyBNb3JnPg0KICovDQoNCm5hbWVzcGFjZSBDTVNNU0V4dFxjb3JlOw0KDQoNCmNsYXNzIGRpYw0Kew0KICBwcml2YXRlIGFycmF5ICRzZXJ2aWNlcyA9IFtdOw0KICANCiAgLyoqDQogICAqIEFkZHMgYSBzZXJ2aWNlIHRvIHRoZSBzZXJ2aWNlcyBhcnJheS4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBvZiB0aGUgc2VydmljZS4NCiAgICogQHBhcmFtIG1peGVkICRzZXJ2aWNlIFRoZSBzZXJ2aWNlIHRvIGJlIGFkZGVkLg0KICAgKiBAcGFyYW0gYXJyYXkgJHBhcmFtZXRlcnMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIHNlcnZpY2UuDQogICAqIEByZXR1cm4gdm9pZA0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIGFkZFNlcnZpY2UoJG5hbWUsICRzZXJ2aWNlLCAkcGFyYW1ldGVycyA9IFtdKSA6IHZvaWQNCiAgew0KICAgICR0aGlzLT5zZXJ2aWNlc1skbmFtZV0gPSBcY29tcGFjdCgnc2VydmljZScsICdwYXJhbWV0ZXJzJyk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBSZXRyaWV2ZXMgYSBzZXJ2aWNlIGZyb20gdGhlIGNvbnRhaW5lciBiYXNlZCBvbiBpdHMgbmFtZS4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBvZiB0aGUgc2VydmljZSB0byByZXRyaWV2ZS4NCiAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBJZiB0aGUgc2VydmljZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGlzIG5vdCBmb3VuZCBpbiB0aGUgY29udGFpbmVyLg0KICAgKiBAcmV0dXJuIG1peGVkIFRoZSBpbnN0YW50aWF0ZWQgc2VydmljZS4NCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBnZXRTZXJ2aWNlKCRuYW1lKQ0KICB7DQogICAgaWYoaXNzZXQoJHRoaXMtPnNlcnZpY2VzWyRuYW1lXSkpDQogICAgew0KICAgICAgcmV0dXJuICR0aGlzLT5pbnN0YW50aWF0ZVNlcnZpY2UoJG5hbWUpOw0KICAgIH0NCiAgICANCiAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIlNlcnZpY2UgJG5hbWUgbm90IGZvdW5kIGluIHRoZSBjb250YWluZXIuIik7DQogIH0NCiAgDQogIC8qKg0KICAgKiBJbnN0YW50aWF0ZXMgYSBzZXJ2aWNlIGJhc2VkIG9uIHRoZSBnaXZlbiBuYW1lLg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIHRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlDQogICAqIEByZXR1cm4gbWl4ZWQgdGhlIGluc3RhbnRpYXRlZCBzZXJ2aWNlDQogICAqLw0KICBwcml2YXRlIGZ1bmN0aW9uIGluc3RhbnRpYXRlU2VydmljZSgkbmFtZSkNCiAgew0KICAgICRzZXJ2aWNlICAgID0gJHRoaXMtPnNlcnZpY2VzWyRuYW1lXVsnc2VydmljZSddOw0KICAgICRwYXJhbWV0ZXJzID0gJHRoaXMtPnJlc29sdmVQYXJhbWV0ZXJzKCR0aGlzLT5zZXJ2aWNlc1skbmFtZV1bJ3BhcmFtZXRlcnMnXSk7DQogICAgDQogICAgcmV0dXJuIG5ldyAkc2VydmljZSguLi4kcGFyYW1ldGVycyk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBSZXNvbHZlcyB0aGUgcGFyYW1ldGVycyBvZiBhIHNlcnZpY2UuDQogICAqDQogICAqIEBwYXJhbSBhcnJheSAkcGFyYW1ldGVycw0KICAgKi8NCiAgcHJpdmF0ZSBmdW5jdGlvbiByZXNvbHZlUGFyYW1ldGVycygkcGFyYW1ldGVycykgOiBhcnJheQ0KICB7DQogICAgJHJlc29sdmVkUGFyYW1ldGVycyA9IFtdOw0KICAgIA0KICAgIGZvcmVhY2goJHBhcmFtZXRlcnMgYXMgJHBhcmFtZXRlcikNCiAgICB7DQogICAgICBpZihcaXNfc3RyaW5nKCRwYXJhbWV0ZXIpICYmIFxjbGFzc19leGlzdHMoJHBhcmFtZXRlcikpDQogICAgICB7DQogICAgICAgIC8vIEF1dG8gd2lyaW5nOiBJZiB0aGUgcGFyYW1ldGVyIGlzIGEgY2xhc3MgbmFtZSwgcmVzb2x2ZSBpdCBmcm9tIHRoZSBjb250YWluZXINCiAgICAgICAgJHJlc29sdmVkUGFyYW1ldGVyc1tdID0gJHRoaXMtPmdldFNlcnZpY2UoJHBhcmFtZXRlcik7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSBwYXJhbWV0ZXIgYXMtaXMNCiAgICAgICAgJHJlc29sdmVkUGFyYW1ldGVyc1tdID0gJHBhcmFtZXRlcjsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgcmV0dXJuICRyZXNvbHZlZFBhcmFtZXRlcnM7DQogIH0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/core/class.Error.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICoNCiAqLw0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcY29yZTsNCg0KLyoqDQogKiBDbGFzcyBFcnJvcg0KICoNCiAqIEEgY2xhc3MgdG8gbWFuYWdlIHRoZSBlcnJvciBjb2Rlcw0KICogYSBtb2R1bGUgZ2VuZXJhdGVzDQogKiBAYXV0aG9yIEZlcm5hbmRvIE1vcmdhZG8gPEpvIE1vcmc+DQogKg0KICogQHBhY2thZ2UgQ01TTVNFeHRcY29yZQ0KICovDQpjbGFzcyBFcnJvcg0Kew0KICAvKioNCiAgICogVGhpcyBpcyBhIGxpc3Qgb2YgZXJyb3JzIHRoYXQgY2FuIGJlIGV4dGVuZGVkDQogICAqIHRoZSBmb3JtYXQgaXMgb3JpZ2luYWxseSBhIHN0cmluZyBjb25zdGFudA0KICAgKiB0byBiZSB1c2VkIGFzIGEgbGFuZyBrZXkNCiAgICogYnV0IGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyIGJlZm9yZSBiZWluZyBwYXNzZWQNCiAgICogdG8gdGhlIHBhcmVudCdzIGNvbnN0cnVjdG9yIGFzIHRoZSBjb2RlIHBhcmFtZXRlcg0KICAgKi8NCiAgDQogICMgdGhpcyBpcyBhIGNvbW1vbiBlcnJvciB0byBhbGwgY2xhc3NlcyB1bmxlc3Mgb3ZlcnJpZGRlbi4uLg0KICBwdWJsaWMgY29uc3QgVU5LTk9XTiAgICAgICAgICAgICAgICAgICAgICAgICA9ICcwMDAwMDAnOyAgICAgICMgJ1VOS05PV04nIC0gTk8gV0FZIFRPIERFVEVSTUlORSBUSEUgRVhBQ1QgRVJST1IgQ0FVU0UNCiAgcHVibGljIGNvbnN0IEdFTkVSSUMgICAgICAgICAgICAgICAgICAgICAgICAgPSAnMDAwMDAxJzsgICAgICAjICdHRU5FUklDJyAtIEEgQ09ERSBUTyBBIEdFTkVSSUMgRVJST1I6IFVTRSBUSElTIEZPUiBJTkZSRVFVRU5UIEVSUk9SUw0KICANCiAgIyBtaXNjDQogIHB1YmxpYyBjb25zdCBSRUFEX09OTFlfQ0ZHICAgICAgICAgICAgICAgICAgID0gJzAwMDAxMCc7ICAgICAgIyAnUkVBRF9PTkxZX0NGRycNCiAgDQogICMgZmlsZSBzeXN0ZW0NCiAgcHVibGljIGNvbnN0IENSRUFURV9ESVJfRVJST1IgICAgICAgICAgICAgICAgPSAnMDAwMTAwJzsgICAgICAjICdDUkVBVEVfRElSX0VSUk9SJw0KICBwdWJsaWMgY29uc3QgT1BFTl9ESVJfRVJST1IgICAgICAgICAgICAgICAgICA9ICcwMDAxMDEnOyAgICAgICMgJ09QRU5fRElSX0VSUk9SJw0KICBwdWJsaWMgY29uc3QgQ1JFQVRFX0ZJTEVfRVJST1IgICAgICAgICAgICAgICA9ICcwMDAxMDInOyAgICAgICMgJ0NSRUFURV9GSUxFX0VSUk9SJw0KICBwdWJsaWMgY29uc3QgQ09QWV9GSUxFX0VSUk9SICAgICAgICAgICAgICAgICA9ICcwMDAxMDMnOyAgICAgICMgJ0NPUFlfRklMRV9FUlJPUicNCiAgcHVibGljIGNvbnN0IERFTEVURV9GSUxFX0VSUk9SICAgICAgICAgICAgICAgPSAnMDAwMTA0JzsgICAgICAjICdERUxFVEVfRklMRV9FUlJPUicNCiAgcHVibGljIGNvbnN0IE9QRU5fRklMRV9FUlJPUiAgICAgICAgICAgICAgICAgPSAnMDAwMTA1JzsgICAgICAjICdPUEVOX0ZJTEVfRVJST1InDQogIHB1YmxpYyBjb25zdCBSRUFEX0ZJTEVfRVJST1IgICAgICAgICAgICAgICAgID0gJzAwMDEwNic7ICAgICAgIyAnUkVBRF9GSUxFX0VSUk9SJw0KICBwdWJsaWMgY29uc3QgV1JJVEVfRklMRV9FUlJPUiAgICAgICAgICAgICAgICA9ICcwMDAxMDcnOyAgICAgICMgJ1dSSVRFX0ZJTEVfRVJST1InDQogIHB1YmxpYyBjb25zdCBJTlZBTElEX0RJUl9FUlJPUiAgICAgICAgICAgICAgID0gJzAwMDIwMCc7ICAgICAgIyAnSU5WQUxJRF9ESVJfRVJST1InDQogIA0KICAjIGRhdGFiYXNlDQogIHB1YmxpYyBjb25zdCBEQVRBQkFTRV9FUlJPUiAgICAgICAgICAgICAgICAgID0gJzAwMDMwMCc7ICAgICAgIyAnREFUQUJBU0VfRVJST1InDQogIA0KICAjdGhlbiBqdXN0IGFkZCB0byB0aGlzIGxpc3QgaGVyZSBhbmQgaW4gdGhlIGxhbmcgZmlsZSBvZiB0aGUgbW9kdWxlDQogIA0KICAvKioNCiAgICogUmV0dXJucyB0aGUgY3VycmVudCBsaXN0IG9mIGVycm9yIGNvZGVzIGNvbnN0YW50cyB0aGUgY2xhc3MgY3VycmVudGx5IGhhbmRsZXMNCiAgICogQHJldHVybiBhcnJheQ0KICAgKi8NCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBHZXRFcnJvcnNMaXN0KCkgOiBhcnJheQ0KICB7DQogICAgcmV0dXJuICggbmV3IFxSZWZsZWN0aW9uQ2xhc3Moc3RhdGljOjpjbGFzcykgKS0+Z2V0Q29uc3RhbnRzKCk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBUZXN0cyBpZiBhIGNvZGUgaXMgY3VycmVudGx5IGhhbmRsZWQgYnkgdGhpcyBjbGFzcw0KICAgKg0KICAgKiBAcGFyYW0gJGNvZGUNCiAgICoNCiAgICogQHJldHVybiBib29sDQogICAqLw0KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIEhhc0NvZGUoJGNvZGUpIDogYm9vbA0KICB7DQogICAgJGNvZGVzID0gc2VsZjo6R2V0RXJyb3JzTGlzdCgpOw0KICAgIHJldHVybiBcaW5fYXJyYXkoJGNvZGUsICRjb2RlcywgRkFMU0UpOw0KICB9DQogIA0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/core/class.fifo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcY29yZTsNCg0KDQpjbGFzcyBmaWZvDQp7DQogIHByaXZhdGUgJHF1ZXVlID0gW107DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gZW5xdWV1ZSgkaXRlbSkNCiAgew0KICAgICR0aGlzLT5xdWV1ZVtdID0gJGl0ZW07DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gZGVxdWV1ZSgpDQogIHsNCiAgICBpZigkdGhpcy0+aXNFbXB0eSgpKQ0KICAgIHsNCiAgICAgIHJldHVybiBOVUxMOyAvLyBvciB0aHJvdyBhbiBleGNlcHRpb24NCiAgICB9DQogICAgDQogICAgcmV0dXJuIFxhcnJheV9zaGlmdCgkdGhpcy0+cXVldWUpOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gcGVlaygpDQogIHsNCiAgICByZXR1cm4gXHJlc2V0KCR0aGlzLT5xdWV1ZSk7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBpc0VtcHR5KCkNCiAgew0KICAgIHJldHVybiBlbXB0eSgkdGhpcy0+cXVldWUpOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gc2l6ZSgpDQogIHsNCiAgICByZXR1cm4gXGNvdW50KCR0aGlzLT5xdWV1ZSk7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiByZXNldCgpDQogIHsNCiAgICAkdGhpcy0+cXVldWUgPSBbXTsNCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/core/class.morphable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcY29yZTsNCg0KDQpjbGFzcyBtb3JwaGFibGUgZXh0ZW5kcyBcQXJyYXlPYmplY3QNCnsNCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gYXJyYXkgJGFycg0KICAgKg0KICAgKiBAcmV0dXJuIGJvb2wNCiAgICovDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfaXNBc3NvYyhhcnJheSAkYXJyKQ0KICB7DQogICAgaWYoW10gPT09ICRhcnIpIHsgcmV0dXJuIEZBTFNFOyB9DQogICAgDQogICAgcmV0dXJuIFxhcnJheV9rZXlzKCRhcnIpICE9PSBccmFuZ2UoMCwgXGNvdW50KCRhcnIpIC0gMSk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcmV0dXJuIGFycmF5DQogICAqLw0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3RvX2FycmF5KCkgIHsgcmV0dXJuIChhcnJheSkkdGhpczsgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSBhcnJheSAkYXJyYXkNCiAgICoNCiAgICogQHJldHVybiAkdGhpcw0KICAgKi8NCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9mcm9tX2FycmF5KCRhcnJheSA9IFtdKSA6IHNlbGYNCiAgew0KICAgIGZvcmVhY2goJGFycmF5IGFzICRrID0+ICR2KSB7ICR0aGlzLT57JGt9ID0gJHY7IH0NCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIC8qKg0KICAgKiBtb3JwaGFibGUgY29uc3RydWN0b3IuDQogICAqDQogICAqIEBwYXJhbSBhcnJheSAgJGlucHV0DQogICAqIEBwYXJhbSBpbnQgICAgJGZsYWdzDQogICAqIEBwYXJhbSBzdHJpbmcgJGl0ZXJhdG9yX2NsYXNzDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGlucHV0ID0gW10sICRmbGFncyA9IDAsICRpdGVyYXRvcl9jbGFzcyA9ICdBcnJheUl0ZXJhdG9yJykNCiAgew0KICAgICRmbGFncyA9ICRmbGFncyA/OiBcQXJyYXlPYmplY3Q6OkFSUkFZX0FTX1BST1BTIHwgXEFycmF5T2JqZWN0OjpTVERfUFJPUF9MSVNUOw0KICAgIA0KICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGlucHV0LCAkZmxhZ3MsICRpdGVyYXRvcl9jbGFzcyk7DQogIH0NCg0KICANCiAgLyoqDQogICAqIEEgaGFjayB3aXRoIGEgZmV3IHB1cnBvc2VzOg0KICAgKiAxIC0gdG8gYmUgYWJsZSB0byB1c2UgcGhwIG5hdGl2ZSBmdW5jdGlvbnMgd2l0aCB0aGUgb2JqZWN0DQogICAqICAgICBleGFtcGxlOiAkQW5PYmplY3QtPmFycmF5X2tleXMoKTsNCiAgICogICAgIChub3RlOiBhcnJheV88ZnVuY3Rpb25zPiBuYXRpdmVseSByZXF1aXJlIHRoZSBhcnJheSBpdHNlbGYgYXMgYSBwYXJhbWV0ZXINCiAgICogICAgICAgICAgICBpbiB0aGlzIGNhc2UgdGhlIGFycmF5IGlzIG9iamVjdCBpdHNlbGYgc28gdGhlcmUgaXMgbm8gcGFyYW1ldGVyIGZvciB0aGUgYXJyYXkpDQogICAqIDIgLSB0byBiZSBhYmxlIHRvIHVzZSBvYmplY3QgbWV0aG9kcyBhcyBzZXR0ZXJzIGFuZCBnZXR0ZXJzDQogICAqICAgICBleGFtcGxlIDE6ICAkQW5PYmplY3QtPmtleSgkdmFsdWUpIChyZXR1cm5zIHRoZSBvYmplY3QgdG8gYmUgYWJsZSB0byBjaGFpbikNCiAgICogICAgIGV4YW1wbGUgMjogICRBbk9iamVjdC0+a2V5KCkgKHJldHVybnMgdGhlIHZhbHVlKQ0KICAgKg0KICAgKiBAcGFyYW0gJGZ1bmMNCiAgICogQHBhcmFtICRhcmd2DQogICAqDQogICAqIEByZXR1cm4gbWl4ZWQNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBfX2NhbGwoJGZ1bmMsICRhcmd2KQ0KICB7DQogICAgLy8gQ2hlY2sgaWYgJGZ1bmMgaXMgbm90IGEgY2FsbGFibGUgb3IgZG9lc24ndCBzdGFydCB3aXRoICdhcnJheV8nDQogICAgaWYoIVxpc19jYWxsYWJsZSgkZnVuYykgfHwgMCAhPT0gXHN0cnBvcygkZnVuYywgJ2FycmF5XycpKQ0KICAgIHsNCiAgICAgIC8vIElmIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQsIHNldCBvciByZXR1cm4gdmFsdWVzDQogICAgICBpZighZW1wdHkoJGFyZ3YpKQ0KICAgICAgew0KICAgICAgICAvLyBDaGVjayBpZiAkYXJndiBpcyBhc3NvY2lhdGl2ZSBvciBoYXMgbW9yZSB0aGFuIG9uZSBlbGVtZW50DQogICAgICAgIGlmKCR0aGlzLT5faXNBc3NvYygkYXJndikgfHwgXGNvdW50KCRhcmd2KSA+IDEpDQogICAgICAgIHsNCiAgICAgICAgICAkdGhpcygkYXJndik7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgJHRoaXMtPnskZnVuY30gPSAkYXJndlswXTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgcmV0dXJuICR0aGlzOw0KICAgICAgfQ0KICAgICAgDQogICAgICByZXR1cm4gJHRoaXMtPnskZnVuY307DQogICAgfQ0KICAgIA0KICAgIC8vIENhbGwgbmF0aXZlIGFycmF5IGZ1bmN0aW9uIHdpdGggb2JqZWN0IGRhdGENCiAgICByZXR1cm4gXGNhbGxfdXNlcl9mdW5jX2FycmF5KCRmdW5jLCBcYXJyYXlfbWVyZ2UoWyR0aGlzLT5nZXRBcnJheUNvcHkoKV0sICRhcmd2KSk7DQogIH0NCg0KICANCiAgLyoqDQogICAqIEBwYXJhbSBzdHJpbmcgJHNlcmlhbGl6ZWQNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBfX3Vuc2VyaWFsaXplKCRzZXJpYWxpemVkKSA6IHZvaWQNCiAgew0KICAgICR0aGlzLT5fZnJvbV9hcnJheSggKGFycmF5KVx1bnNlcmlhbGl6ZSgkc2VyaWFsaXplZCkgKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEByZXR1cm4gYXJyYXkNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBfX3NlcmlhbGl6ZSgpIDogYXJyYXkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+X3RvX2FycmF5KCk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcmV0dXJuIHN0cmluZw0KICAgKiBAdGhyb3dzIFxKc29uRXhjZXB0aW9uDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpDQogIHsNCiAgICByZXR1cm4gKHN0cmluZylcanNvbl9lbmNvZGUoJHRoaXMtPl90b19hcnJheSgpLCBcSlNPTl9USFJPV19PTl9FUlJPUik7DQogIH0NCiAgDQogIC8qKg0KICAgKiBBIGhhY2sgd2l0aCBhIGZldyBwdXJwb3NlczoNCiAgICogLSB0byBiZSBhYmxlIHRvIHNldCBrZXlzIGFuZCB2YWx1ZXMgZm9yIG91ciBhcnJheSBsaWtlIG9iamVjdDsNCiAgICogLSBpZiB0aGUgY2FsbCBpcyAkQW5BcnJheU9iamVjdCgnYW5fYXJndW1lbnQnKSBpdCB3aWxsIHNldCBhIGtleSAnYW5fYXJndW1lbnQnIHdpdGggYSBudWxsIHZhbHVlOw0KICAgKiAtIGlmIHRoZSBjYWxsIGlzICRBbkFycmF5T2JqZWN0KCdhbl9hcmd1bWVudCcsICdhbm90aGVyX2FyZ3VtZW50JykgaXQgd2lsbCBzZXQgdGhlIGFyZ3VtZW50cyBhcyBrZXlzIHdpdGggYSBudWxsIHZhbHVlOw0KICAgKiAtIGlmIHRoZSBjYWxsIGlzICRBbkFycmF5T2JqZWN0KFsnYV9rZXknID0+ICdhX3ZhbHVlJ10pIGl0IHdpbGwgc2V0IHRoZSBhcmd1bWVudHMgYXMga2V5ID0+IHZhbHVlIHBhaXJzOw0KICAgKg0KICAgKiBUaGUgYXJndW1lbnRzIGNhbiBiZSBtaXhlZA0KICAgKg0KICAgKiBAcGFyYW0gYXJyYXkgJGFyZ3VtZW50cw0KICAgKg0KICAgKiBAcmV0dXJuIG1peGVkDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gX19pbnZva2UoLi4uJGFyZ3VtZW50cykNCiAgew0KICAgIGZvcmVhY2goJGFyZ3VtZW50cyBhcyAkYXJndW1lbnQpDQogICAgew0KICAgICAgaWYoXGlzX2FycmF5KCRhcmd1bWVudCkgJiYgJHRoaXMtPl9pc0Fzc29jKCRhcmd1bWVudCkpDQogICAgICB7DQogICAgICAgICR0aGlzLT5leGNoYW5nZUFycmF5KCRhcmd1bWVudCk7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgICR0aGlzLT57JGFyZ3VtZW50fSA9IE5VTEw7DQogICAgICB9DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KDQogIA0KICAvKioNCiAgICogQHJldHVybiBhcnJheQ0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIF9fZGVidWdJbmZvKCkgOiBhcnJheQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5fdG9fYXJyYXkoKTsNCiAgfQ0KICANCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBGcm9tU3RkQ2xhc3MoXHN0ZENsYXNzICRvYmopDQogIHsNCiAgICAkdGhpcy0+X2Zyb21fYXJyYXkoIChhcnJheSkkb2JqICk7DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gVG9TdGRDbGFzcygpDQogIHsNCiAgICByZXR1cm4gKG9iamVjdCkkdGhpcy0+X3RvX2FycmF5KCk7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBGcm9tQXJyYXkoYXJyYXkgJGFycmF5ID0gW10pDQogIHsNCiAgICAkdGhpcy0+X2Zyb21fYXJyYXkoJGFycmF5KTsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIFRvQXJyYXkoKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5fdG9fYXJyYXkoKTsNCiAgfQ0KICANCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/core/class.Query.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcY29yZTsNCg0KdXNlIENsb3N1cmU7DQp1c2UgQ01TTVNFeHRcRXhjZXB0aW9uc1xEYXRhRXhjZXB0aW9uOw0KDQovKioNCiAqIENsYXNzIHF1ZXJ5DQogKg0KICogQHBhY2thZ2UgQ01TTVNFeHQNCiAqLw0KY2xhc3MgUXVlcnkNCnsNCiAgIyBBY3Rpb24gdHlwZXMNCiAgLyoqDQogICAqDQogICAqLw0KICBwcm90ZWN0ZWQgY29uc3QgVFlQRV9TRUxFQ1QgID0gJ1NFTEVDVCc7DQogIHByb3RlY3RlZCBjb25zdCBUWVBFX0lOU0VSVCAgPSAnSU5TRVJUJzsNCiAgcHJvdGVjdGVkIGNvbnN0IFRZUEVfVVBEQVRFICA9ICdVUERBVEUnOw0KICBwcm90ZWN0ZWQgY29uc3QgVFlQRV9ERUxFVEUgID0gJ0RFTEVURSc7DQogIHByb3RlY3RlZCBjb25zdCBUWVBFX1JFUExBQ0UgPSAnUkVQTEFDRSc7DQogIA0KICAjDQogIHByb3RlY3RlZCBjb25zdCBOTCA9ICJcclxuIjsNCiAgcHJvdGVjdGVkIGNvbnN0IFRBQiA9ICcgICc7DQogIA0KICBwcml2YXRlIHN0YXRpYyBhcnJheSAkX21vZHVsZV9tYXAgPSBbXTsNCiAgDQogIA0KICAvKioNCiAgICogIHByb3RlY3RlZCBwcm9wcw0KICAgKi8NCiAgDQogIHByb3RlY3RlZCBzdHJpbmcgJF9tb2R1bGVfbmFtZTsNCiAgcHJvdGVjdGVkIHN0cmluZyAkX3RhYmxlX3ByZWZpeDsNCiAgDQogIC8qKg0KICAgKiBPUkRFUiBCWSByYW5kb20ga2V5d29yZA0KICAgKg0KICAgKiBAdmFyIGFycmF5DQogICAqLw0KICBwcm90ZWN0ZWQgYXJyYXkgJHJhbmRvbV9rZXl3b3JkID0gWw0KICAgICdSQU5EKCknLA0KICAgICdSQU5EKCVkKScsDQogIF07DQogIA0KICAvKioNCiAgICogVGFibGVzIHJlbGF0aW9uIHR5cGVzDQogICAqDQogICAqIEB2YXIgYXJyYXkNCiAgICovDQogIHByb3RlY3RlZCBhcnJheSAkam9pbl90eXBlcyA9IFsNCiAgICAnTEVGVCcsDQogICAgJ1JJR0hUJywNCiAgICAnT1VURVInLA0KICAgICdJTk5FUicsDQogICAgJ0NST1NTJywNCiAgICAnTEVGVCBPVVRFUicsDQogICAgJ1JJR0hUIE9VVEVSJywNCiAgXTsNCiAgDQogIC8qKg0KICAgKiAgcHJpdmF0ZSBwcm9wcw0KICAgKi8NCiAgcHJpdmF0ZSBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF90YWJsZSAgICAgICAgICAgICAgICA9ICcnOw0KICBwcml2YXRlIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkX3F1ZXJ5ICAgICAgICAgICAgICAgID0gJyc7DQogIHByaXZhdGUgYXJyYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfY29scyAgICAgICAgICAgICAgICAgPSBbXTsNCiAgcHJpdmF0ZSBhcnJheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF92YWx1ZXMgICAgICAgICAgICAgICA9IFtdOw0KICBwcml2YXRlIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkX2Zyb20gICAgICAgICAgICAgICAgID0gJyc7DQogIHByaXZhdGUgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfbGltaXQgICAgICAgICAgICAgICAgPSAwOw0KICBwcml2YXRlIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkX29mZnNldCAgICAgICAgICAgICAgID0gMDsNCiAgcHJpdmF0ZSBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF9kaXN0aW5jdCAgICAgICAgICAgICA9ICcnOw0KICBwcml2YXRlIGFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkX3NldCAgICAgICAgICAgICAgICAgID0gW107DQogIHByaXZhdGUgYXJyYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfd2hlcmVfc3RhY2sgICAgICAgICAgPSBbXTsNCiAgcHJpdmF0ZSBhcnJheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF93aGVyZV9iaW5kaW5nc19zdGFjayA9IFtdOw0KICBwcml2YXRlIGFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkX29yZGVyX2J5X3N0YWNrICAgICAgID0gW107DQogIHByaXZhdGUgYXJyYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfam9pbnNfc3RhY2sgICAgICAgICAgPSBbXTsNCiAgcHJpdmF0ZSBhcnJheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF90YWJsZV9hbGlhc2VzX21hcCAgICA9IFtdOw0KICBwcml2YXRlIFxDTVNNU1xEYXRhYmFzZVxDb25uZWN0aW9uICAgICAgICAkX2RiOw0KICBwcml2YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkX3JzOw0KICBwcml2YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkX3R5cGU7DQogIHByaXZhdGUgUXVlcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfc3ViX3F1ZXJ5Ow0KICANCiAgLyoqDQogICAqICBwcml2YXRlIG1ldGhvZHMNCiAgICovDQogIA0KICAvKioNCiAgICoNCiAgICovDQogIHByaXZhdGUgZnVuY3Rpb24gX3Jlc2V0X3RhYmxlKCkgOiB2b2lkDQogIHsNCiAgICAkdGhpcy0+X3RhYmxlID0gJyc7DQogIH0NCiAgDQogIC8qKg0KICAgKg0KICAgKi8NCiAgcHJpdmF0ZSBmdW5jdGlvbiBfcmVzZXRfdGFibGVfYWxpYXNlc19tYXAoKSA6IHZvaWQNCiAgew0KICAgICR0aGlzLT5fdGFibGVfYWxpYXNlc19tYXAgPSBbXTsNCiAgfQ0KICANCiAgLyoqDQogICAqDQogICAqLw0KICBwcml2YXRlIGZ1bmN0aW9uIF9yZXNldF9mcm9tKCkgOiB2b2lkDQogIHsNCiAgICAkdGhpcy0+X2Zyb20gPSAnJzsNCiAgfQ0KICANCiAgLyoqDQogICAqDQogICAqLw0KICBwcml2YXRlIGZ1bmN0aW9uIF9yZXNldF9xdWVyeSgpIDogdm9pZA0KICB7DQogICAgJHRoaXMtPl9xdWVyeSA9ICcnOw0KICB9DQogIA0KICAvKioNCiAgICoNCiAgICovDQogIHByaXZhdGUgZnVuY3Rpb24gX3Jlc2V0X2NvbHMoKSA6IHZvaWQNCiAgew0KICAgICR0aGlzLT5fY29scyA9IFtdOw0KICB9DQogIA0KICAvKioNCiAgICoNCiAgICovDQogIHByaXZhdGUgZnVuY3Rpb24gX3Jlc2V0X3ZhbHVlcygpIDogdm9pZA0KICB7DQogICAgJHRoaXMtPl92YWx1ZXMgPSBbXTsNCiAgfQ0KICANCiAgcHJpdmF0ZSBmdW5jdGlvbiBfcmVzZXRfcmVzdWx0X3NldCgpIDogdm9pZA0KICB7DQogICAgJHRoaXMtPl9ycyA9IFtdOw0KICB9DQogIA0KICAvKioNCiAgICogcmVzZXRzIGFsbCBpbnRlcm5hbCBkYXRhDQogICAqLw0KICBwcml2YXRlIGZ1bmN0aW9uIF9yZXNldF9hbGwoKSA6IHZvaWQNCiAgew0KICAgICR0aGlzLT5fcmVzZXRfdGFibGUoKTsNCiAgICAkdGhpcy0+X3Jlc2V0X3RhYmxlX2FsaWFzZXNfbWFwKCk7DQogICAgJHRoaXMtPl9yZXNldF9mcm9tKCk7DQogICAgJHRoaXMtPl9yZXNldF9xdWVyeSgpOw0KICAgICR0aGlzLT5fcmVzZXRfcmVzdWx0X3NldCgpOw0KICAgICR0aGlzLT5fcmVzZXRfY29scygpOw0KICAgICR0aGlzLT5fcmVzZXRfdmFsdWVzKCk7DQogICAgJHRoaXMtPl9zdGFja19jbGVhcignd2hlcmUnKTsNCiAgICAkdGhpcy0+X3N0YWNrX2NsZWFyKCd3aGVyZV9iaW5kaW5ncycpOw0KICAgICR0aGlzLT5fc3RhY2tfY2xlYXIoJ29yZGVyX2J5Jyk7DQogIH0NCiAgDQogIC8qKg0KICAgKiByZXNldHMgYWxsIHdyaXRlIGRhdGENCiAgICovDQogIHByaXZhdGUgZnVuY3Rpb24gX3Jlc2V0X3dyaXRlX2RhdGEoKSA6IHZvaWQNCiAgew0KICAgICR0aGlzLT5fcmVzZXRfcXVlcnkoKTsNCiAgICAkdGhpcy0+X3Jlc2V0X2NvbHMoKTsNCiAgICAkdGhpcy0+X3Jlc2V0X3ZhbHVlcygpOw0KICAgICR0aGlzLT5fc3RhY2tfY2xlYXIoJ3doZXJlJyk7DQogICAgJHRoaXMtPl9zdGFja19jbGVhcignd2hlcmVfYmluZGluZ3MnKTsNCiAgICAkdGhpcy0+X3N0YWNrX2NsZWFyKCdvcmRlcl9ieScpOw0KICB9DQogIA0KICAvKioNCiAgICoNCiAgICovDQogIHByaXZhdGUgZnVuY3Rpb24gX2xvYWRfbW9kdWxlX25hbWVzKCkgOiB2b2lkDQogIHsNCiAgICBpZiggZW1wdHkoc2VsZjo6JF9tb2R1bGVfbWFwICkgKQ0KICAgIHsNCiAgICAgIHNlbGY6OiRfbW9kdWxlX21hcCA9IFxNb2R1bGVPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKS0+R2V0QWxsTW9kdWxlTmFtZXMoKTsNCiAgICB9DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gJG1vZHVsZV9uYW1lDQogICAqDQogICAqIEByZXR1cm4gYm9vbA0KICAgKi8NCiAgcHJpdmF0ZSBmdW5jdGlvbiBfbW9kdWxlX2V4aXN0cygkbW9kdWxlX25hbWUpIDogYm9vbA0KICB7DQogICAgJHRoaXMtPl9sb2FkX21vZHVsZV9uYW1lcygpOw0KICAgIA0KICAgIHN0YXRpYyAkbG93ZXJfY2FzZV9saXN0Ow0KICAgIA0KICAgIGlmKCBlbXB0eSgkbG93ZXJfY2FzZV9saXN0KSApDQogICAgew0KICAgICAgJGxvd2VyX2Nhc2VfbGlzdCA9IHNlbGY6OiRfbW9kdWxlX21hcDsNCiAgICAgIA0KICAgICAgJHRvX2xvd2VyID0gc3RhdGljIGZ1bmN0aW9uKCYkaXRlbSwgJGtleSkNCiAgICAgIHsNCiAgICAgICAgJGl0ZW0gPSBcc3RydG9sb3dlcigkaXRlbSk7DQogICAgICAgICRpdGVtID0gKHN0cmluZykkaXRlbTsNCiAgICAgIH07DQogICAgICANCiAgICAgIFxhcnJheV93YWxrX3JlY3Vyc2l2ZShzZWxmOjokX21vZHVsZV9tYXAsICR0b19sb3dlcik7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAoXGluX2FycmF5KCRtb2R1bGVfbmFtZSwgc2VsZjo6JF9tb2R1bGVfbWFwLCBUUlVFKSB8fCBcaW5fYXJyYXkoJG1vZHVsZV9uYW1lLCAkbG93ZXJfY2FzZV9saXN0LCBUUlVFKSk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gJHRhYmxlX25hbWUNCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbg0KICAgKi8NCiAgcHJpdmF0ZSBmdW5jdGlvbiBfZXh0cmFjdF9tb2R1bGVfbmFtZV9mcm9tX3RhYmxlKCR0YWJsZV9uYW1lKSA6IHN0cmluZw0KICB7DQogICAgJGZvdW5kID0gRkFMU0U7DQogICAgIyByZW1vdmUgdGhlIHVzdWFsIGNtcyBwcmVmaXggaWYgdGhlcmUNCiAgICAkdG1wID0gXHN0cl9yZXBsYWNlKFxjbXNfZGJfcHJlZml4KCksICcnLCAkdGFibGVfbmFtZSk7DQogICAgDQogICAgJHBhcnRzID0gXGV4cGxvZGUoJ18nLCAkdG1wKTsNCiAgICANCiAgICAkbW9kdWxlX25hbWUgPSAnJzsNCiAgICANCiAgICBpZignbW9kdWxlJyA9PT0gJHBhcnRzWzBdKQ0KICAgIHsNCiAgICAgIC8vJGRvbmUgPSBGQUxTRTsNCiAgICAgIA0KICAgICAgZG8NCiAgICAgIHsNCiAgICAgICAgXGFycmF5X3NoaWZ0KCRwYXJ0cyk7DQogICAgICAgICRtb2R1bGVfbmFtZSAuPSAkcGFydHNbMF07DQogICAgICAgICRmb3VuZCA9ICAkdGhpcy0+X21vZHVsZV9leGlzdHMoJG1vZHVsZV9uYW1lKTsNCiAgICAgICAgJGRvbmUgPSAkZm91bmQgfHwgIVxjb3VudCgkcGFydHMpOw0KICAgICAgICANCiAgICAgICAgaWYoISRkb25lKSB7ICRtb2R1bGVfbmFtZSAuPSAnXyc7IH0NCiAgICAgIH0NCiAgICAgIHdoaWxlKCEkZG9uZSk7DQogICAgfQ0KICAgIA0KICAgIGlmKCAhXGNvdW50KCRwYXJ0cykgKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdDb3VsZCBub3QgZXh0cmFjdCBhIHZhbGlkIHRhYmxlIG5hbWUhJyk7DQogICAgfQ0KICAgIA0KICAgIGlmKCRmb3VuZCkgeyByZXR1cm4gJG1vZHVsZV9uYW1lOyB9DQogICAgDQogICAgcmV0dXJuICcnOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtICRmcm9tDQogICAqIEBwYXJhbSAkYWxpYXMNCiAgICovDQogIHByaXZhdGUgZnVuY3Rpb24gX21hcF9hbGlhcygkZnJvbSwgJGFsaWFzKSA6IHZvaWQNCiAgew0KICAgIGlmKCAhaXNzZXQoJHRoaXMtPl90YWJsZV9hbGlhc2VzX21hcFskZnJvbV0pICkNCiAgICB7DQogICAgICAkdGhpcy0+X3RhYmxlX2FsaWFzZXNfbWFwWyRmcm9tXSA9ICRhbGlhczsNCiAgICB9DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gJHRhYmxlX3N0cmluZw0KICAgKi8NCiAgcHJpdmF0ZSBmdW5jdGlvbiBfcHJvY2Vzc19hbGlhcygkdGFibGVfc3RyaW5nKSA6IHZvaWQNCiAgew0KICAgIGlmKDIgPT09IFxjb3VudCgkdG1wID0gXGV4cGxvZGUoJyAnLCBcdHJpbSgkdGFibGVfc3RyaW5nKSApICkpDQogICAgew0KICAgICAgWyR0YWJsZSwgJGFsaWFzXSA9ICR0bXA7DQogICAgICAkdGhpcy0+X3RhYmxlID0gJHRoaXMtPl9nZXRfdGFibGUoJHRoaXMtPl9jbGVhbl90YWJsZV9uYW1lKCR0YWJsZSkpOw0KICAgICAgJHRhYmxlICAgICAgICA9ICR0aGlzLT5fdGFibGU7DQogICAgICAkdGhpcy0+X21hcF9hbGlhcygkdGFibGUsICRhbGlhcyk7DQogICAgfQ0KICB9DQogIA0KICAvKioNCiAgICogc2V0IHRoZSBtYWluIHRhYmxlIGZvciBiYXNpYyBxdWVyeSBETUwgb3BlcmF0aW9ucw0KICAgKiBTRUxFQ1QgLyBVUERBVEUgLyBJTlNFUlQgLyBERUxFVEUNCiAgICogJHRhYmxlIGNhbiBpbmNsdWRlIGl0cyBhbGlhcyBpZiBzZXBhcmF0ZWQgYnkgYSBzcGFjZQ0KICAgKiBAcGFyYW0gJHRhYmxlDQogICAqLw0KICBwcml2YXRlIGZ1bmN0aW9uIF9zZXRfdGFibGUoJHRhYmxlKSA6IHZvaWQNCiAgew0KICAgIGlmKDIgPT09IFxjb3VudCgkdG1wID0gXGV4cGxvZGUoJyAnLCB0cmltKCR0YWJsZSkgKSApKQ0KICAgIHsNCiAgICAgIFskdGFibGUsICRhbGlhc10gPSAkdG1wOw0KICAgIH0NCiAgICANCiAgICAkdGhpcy0+X3RhYmxlID0gJHRoaXMtPl9jbGVhbl90YWJsZV9uYW1lKCR0YWJsZSk7DQogICAgJHRoaXMtPl9mcm9tICA9ICR0aGlzLT5fZ2V0X3RhYmxlKCk7DQogICAgDQogICAgaWYoIGlzc2V0KCRhbGlhcykgKQ0KICAgIHsNCiAgICAgICR0aGlzLT5fbWFwX2FsaWFzKCR0aGlzLT5fZnJvbSwgJGFsaWFzKTsNCiAgICB9DQogIH0NCiAgDQogIC8qKg0KICAgKiByZW1vdmUgYWxsIHByZWZpeCBhbmQgbW9kdWxlIG5hbWUgZnJvbSB0aGUgdGFibGUgbmFtZQ0KICAgKiB3ZSBjYW4gc2FmZWx5IHJlYnVpbGQgaXQgbGF0ZXINCiAgICoNCiAgICogQHBhcmFtICR0YWJsZV9uYW1lDQogICAqDQogICAqIEByZXR1cm4gc3RyaW5nfHN0cmluZ1tdDQogICAqLw0KICBwcml2YXRlIGZ1bmN0aW9uIF9jbGVhbl90YWJsZV9uYW1lKCR0YWJsZV9uYW1lKQ0KICB7DQogICAgDQogICAgaWYoIGVtcHR5KCR0aGlzLT5fbW9kdWxlX25hbWUpICkNCiAgICB7DQogICAgICAkbW4gICAgICAgICAgICAgICAgID0gJHRoaXMtPl9leHRyYWN0X21vZHVsZV9uYW1lX2Zyb21fdGFibGUoJHRhYmxlX25hbWUpOw0KICAgICAgJHRoaXMtPl9tb2R1bGVfbmFtZSA9IGVtcHR5KCRtbikgPyBcc3RydG9sb3dlcihfX05BTUVTUEFDRV9fKSA6ICRtbjsNCiAgICB9DQogICAgDQogICAgIyByZW1vdmUgdGhlIHVzdWFsIGNtcyBwcmVmaXgNCiAgICAjIHJlbW92ZSB0aGUgbW9kdWxlIG5hbWUNCiAgICANCiAgICByZXR1cm4gXHN0cl9yZXBsYWNlKA0KICAgICAgWw0KICAgICAgICAkdGhpcy0+X3RhYmxlX3ByZWZpeCwNCiAgICAgICAgJ21vZHVsZV8nIC4gJHRoaXMtPl9tb2R1bGVfbmFtZSAuICdfJw0KICAgICAgXSwNCiAgICAgICcnLCAkdGFibGVfbmFtZQ0KICAgICk7DQogICAgDQogIH0NCiAgDQogIC8qKg0KICAgKiByZXR1cm4gYSB2YWxpZCB0YWJsZSBuYW1lOg0KICAgKiBTRUxFQ1QgLyBVUERBVEUgLyBJTlNFUlQgLyBERUxFVEUNCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkdGFibGVfbmFtZQ0KICAgKg0KICAgKiBAcmV0dXJuIHN0cmluZw0KICAgKi8NCiAgcHJpdmF0ZSBmdW5jdGlvbiBfZ2V0X3RhYmxlKCR0YWJsZV9uYW1lID0gJycpIDogc3RyaW5nDQogIHsNCiAgICBpZiggZW1wdHkoJHRhYmxlX25hbWUpICkNCiAgICB7DQogICAgICAkdGFibGVfbmFtZSA9ICR0aGlzLT5fdGFibGU7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkdGhpcy0+X3RhYmxlX3ByZWZpeCAuICdtb2R1bGVfJyAuICR0aGlzLT5fbW9kdWxlX25hbWUgLiAnXycgLiAkdGFibGVfbmFtZTsNCiAgfQ0KICANCiAgLyoqDQogICAqIHN0YWNrIHJlbGF0ZWQgbWV0aG9kcw0KICAgKi8NCiAgDQogIC8qKg0KICAgKiBUaGlzIGlzIG9ubHkgdGVtcG9yYXJ5IChKTSkNCiAgICogbG93IGxldmVsDQogICAqIEBpZ25vcmUNCiAgICovDQogIA0KICAvKioNCiAgICogQHBhcmFtICRzdGFjaw0KICAgKg0KICAgKiBAcmV0dXJuIGludA0KICAgKi8NCiAgcHJpdmF0ZSBmdW5jdGlvbiBfbGxfc3RhY2tfY291bnQoJHN0YWNrKSA6IGludA0KICB7DQogICAgcmV0dXJuIFxjb3VudCgkc3RhY2spOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtICRzdGFjaw0KICAgKg0KICAgKiBAcmV0dXJuIG1peGVkDQogICAqLw0KICBwcml2YXRlIGZ1bmN0aW9uIF9sbF9zdGFja19wZWVrKCRzdGFjaykNCiAgew0KICAgIHJldHVybiBcZW5kKCRzdGFjayk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gJHN0YWNrDQogICAqIEBwYXJhbSAkdG9rZW4NCiAgICovDQogIHByaXZhdGUgZnVuY3Rpb24gX2xsX3N0YWNrX3B1c2goJiRzdGFjaywgJHRva2VuKSA6IHZvaWQNCiAgew0KICAgICRzdGFja1tdID0gJHRva2VuOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtICRzdGFjaw0KICAgKi8NCiAgcHJpdmF0ZSBmdW5jdGlvbiBfbGxfc3RhY2tfY2xlYXIoJiRzdGFjaykgOiB2b2lkDQogIHsNCiAgICAkc3RhY2sgPSBbXTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSAkc3RhY2sNCiAgICoNCiAgICogQHJldHVybiBtaXhlZA0KICAgKi8NCiAgcHJpdmF0ZSBmdW5jdGlvbiBfbGxfc3RhY2tfcG9wKCYkc3RhY2spDQogIHsNCiAgICByZXR1cm4gIFxhcnJheV9wb3AoJHN0YWNrKTsNCiAgfQ0KICANCiAgDQogIC8qKg0KICAgKiBAaW50ZXJuYWwNCiAgICovDQogIA0KICAvKioNCiAgICogQHBhcmFtICRzdGFjaw0KICAgKg0KICAgKiBAcmV0dXJuIGludA0KICAgKi8NCiAgcHJpdmF0ZSBmdW5jdGlvbiBfc3RhY2tfY291bnQoJHN0YWNrKSA6IGludA0KICB7DQogICAgJHN0YWNrX25hbWUgPSAiX3skc3RhY2t9X3N0YWNrIjsNCiAgICANCiAgICByZXR1cm4gJHRoaXMtPl9sbF9zdGFja19jb3VudCgkdGhpcy0+JHN0YWNrX25hbWUpOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtICRzdGFjaw0KICAgKg0KICAgKiBAcmV0dXJuIG1peGVkDQogICAqLw0KICBwcml2YXRlIGZ1bmN0aW9uIF9zdGFja19wZWVrKCRzdGFjaykNCiAgew0KICAgICRzdGFja19uYW1lID0gIl97JHN0YWNrfV9zdGFjayI7DQogICAgDQogICAgcmV0dXJuICR0aGlzLT5fbGxfc3RhY2tfcGVlaygkdGhpcy0+JHN0YWNrX25hbWUpOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtICRzdGFjaw0KICAgKiBAcGFyYW0gJHRva2VuDQogICAqLw0KICBwcml2YXRlIGZ1bmN0aW9uIF9zdGFja19wdXNoKCRzdGFjaywgJHRva2VuKSA6IHZvaWQNCiAgew0KICAgICRzdGFja19uYW1lICAgICAgICAgID0gIl97JHN0YWNrfV9zdGFjayI7DQogICAgJHRoaXMtPl9sbF9zdGFja19wdXNoKCR0aGlzLT4kc3RhY2tfbmFtZSwgJHRva2VuKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSAkc3RhY2sNCiAgICovDQogIHByaXZhdGUgZnVuY3Rpb24gX3N0YWNrX2NsZWFyKCRzdGFjaykgOiB2b2lkDQogIHsNCiAgICAkc3RhY2tfbmFtZSA9ICJfeyRzdGFja31fc3RhY2siOw0KICAgICR0aGlzLT5fbGxfc3RhY2tfY2xlYXIoJHRoaXMtPiRzdGFja19uYW1lKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSAkc3RhY2sNCiAgICoNCiAgICogQHJldHVybiBtaXhlZA0KICAgKi8NCiAgcHJpdmF0ZSBmdW5jdGlvbiBfc3RhY2tfcG9wKCRzdGFjaykNCiAgew0KICAgICRzdGFja19uYW1lID0gIl97JHN0YWNrfV9zdGFjayI7DQogICAgcmV0dXJuICR0aGlzLT5fbGxfc3RhY2tfcG9wKCR0aGlzLT4kc3RhY2tfbmFtZSk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBjb21waWxlIG1ldGhvZHMNCiAgICovDQogIA0KICAvKioNCiAgICogVE9ETyBtYXliZSAkbGltaXQgYW5kICRvZmZzZXQ/DQogICAqLw0KICBwcml2YXRlIGZ1bmN0aW9uIF9jb21waWxlX3F1ZXJ5KCkgOiB2b2lkDQogIHsNCiAgICBzd2l0Y2ggKCR0aGlzLT5fdHlwZSkNCiAgICB7DQogICAgICBjYXNlIHNlbGY6OlRZUEVfU0VMRUNUOg0KICAgICAgICAkdGhpcy0+X2NvbXBpbGVfc2VsZWN0KCk7DQogICAgICBicmVhazsNCiAgICAgIGNhc2Ugc2VsZjo6VFlQRV9JTlNFUlQ6DQogICAgICAgICR0aGlzLT5fY29tcGlsZV9pbnNlcnQoKTsNCiAgICAgIGJyZWFrOw0KICAgICAgY2FzZSBzZWxmOjpUWVBFX1VQREFURToNCiAgICAgICAgJHRoaXMtPl9jb21waWxlX3VwZGF0ZSgpOw0KICAgICAgYnJlYWs7DQogICAgICBjYXNlIHNlbGY6OlRZUEVfREVMRVRFOg0KICAgICAgICAkdGhpcy0+X2NvbXBpbGVfZGVsZXRlKCk7DQogICAgICBicmVhazsNCiAgICAgIGNhc2Ugc2VsZjo6VFlQRV9SRVBMQUNFOg0KICAgICAgICAkdGhpcy0+X2NvbXBpbGVfcmVwbGFjZSgpOw0KICAgICAgYnJlYWs7DQogICAgICANCiAgICAgIGRlZmF1bHQ6DQogICAgfQ0KICB9DQogIA0KICAvKioNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICovDQogIHByaXZhdGUgZnVuY3Rpb24gX2NvbXBpbGVfd2hlcmUoKSA6IHN0cmluZw0KICB7DQogICAgaWYoICEkdGhpcy0+X3N0YWNrX2NvdW50KCd3aGVyZScpICkNCiAgICB7DQogICAgICByZXR1cm4gJyc7DQogICAgfQ0KICAgIA0KICAgICR3aGVyZSA9ICdXSEVSRSAnIC4gc2VsZjo6Tkw7DQogICAgJHdoZXJlIC49IFxpbXBsb2RlKCcgJywgJHRoaXMtPl93aGVyZV9zdGFjayk7DQogICAgDQogICAgJHRoaXMtPl92YWx1ZXMgPSBcYXJyYXlfbWVyZ2UoJHRoaXMtPl92YWx1ZXMsICR0aGlzLT5fd2hlcmVfYmluZGluZ3Nfc3RhY2spOw0KICAgIA0KICAgIHJldHVybiAkd2hlcmUgLiBzZWxmOjpOTDsNCiAgfQ0KICANCiAgLyoqDQogICAqIEByZXR1cm4gc3RyaW5nDQogICAqLw0KICBwcml2YXRlIGZ1bmN0aW9uIF9jb21waWxlX2pvaW5zKCkgOiBzdHJpbmcNCiAgew0KICAgIGlmKCAhJHRoaXMtPl9zdGFja19jb3VudCgnam9pbnMnKSApIHsgcmV0dXJuICcnOyB9DQogICAgDQogICAgJGpvaW5zID0gJyc7DQogICAgDQogICAgZm9yZWFjaCggJHRoaXMtPl9qb2luc19zdGFjayBhcyAkam9pbikNCiAgICB7DQogICAgICAkam9pbnMgLj0gJGpvaW4gLiBzZWxmOjpOTDsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICRqb2luczsNCiAgfQ0KICANCiAgLyoqDQogICAqIEByZXR1cm4gc3RyaW5nDQogICAqLw0KICBwcml2YXRlIGZ1bmN0aW9uIF9jb21waWxlX29yZGVyX2J5KCkgOiBzdHJpbmcNCiAgew0KICAgIGlmKCAhJHRoaXMtPl9zdGFja19jb3VudCgnb3JkZXJfYnknKSApDQogICAgew0KICAgICAgcmV0dXJuICcnOw0KICAgIH0NCiAgICANCiAgICAkb3JkZXJfYnkgPSAnT1JERVIgQlkgJyAuIHNlbGY6Ok5MOw0KICAgICRvcmRlcl9ieSAuPSBcaW1wbG9kZSgnLCcgLiBzZWxmOjpOTCAuIHNlbGY6OlRBQiwgJHRoaXMtPl9vcmRlcl9ieV9zdGFjayk7DQogICAgDQogICAgcmV0dXJuICRvcmRlcl9ieSAuIHNlbGY6Ok5MOw0KICB9DQogIA0KICAvKioNCiAgICoNCiAgICovDQogIHByaXZhdGUgZnVuY3Rpb24gX2NvbXBpbGVfc2VsZWN0KCkgOiB2b2lkDQogIHsNCiAgICAkdGhpcy0+X3Jlc2V0X3F1ZXJ5KCk7DQogICAgJHRoaXMtPl9xdWVyeSA9ICdTRUxFQ1QgJzsNCiAgICANCiAgICBpZiggIWVtcHR5KCR0aGlzLT5fZGlzdGluY3QpICkNCiAgICB7DQogICAgICAkdGhpcy0+X3F1ZXJ5IC49ICR0aGlzLT5fZGlzdGluY3QgLiAnICc7DQogICAgfQ0KICAgIA0KICAgICR0aGlzLT5fcXVlcnkgLj0gc2VsZjo6TkwgLiBzZWxmOjpUQUI7DQogICAgDQogICAgaWYoIGVtcHR5KCR0aGlzLT5fY29scykgKSB7ICR0aGlzLT5fY29sc1tdID0gJyonOyB9DQogICAgDQogICAgJHRoaXMtPl9xdWVyeSAuPSBcaW1wbG9kZSgnLCcsICR0aGlzLT5fY29scykgLiBzZWxmOjpOTDsNCiAgICAkdGhpcy0+X3F1ZXJ5IC49ICdGUk9NICcgLiBzZWxmOjpOTCAuIHNlbGY6OlRBQjsNCiAgICAkdGhpcy0+X3F1ZXJ5IC49ICR0aGlzLT5fZnJvbSAuIHNlbGY6Ok5MOw0KICAgICR0aGlzLT5fcXVlcnkgLj0gJHRoaXMtPl9jb21waWxlX2pvaW5zKCk7DQogICAgJHRoaXMtPl9xdWVyeSAuPSAkdGhpcy0+X2NvbXBpbGVfd2hlcmUoKTsNCiAgICAkdGhpcy0+X3F1ZXJ5IC49ICR0aGlzLT5fY29tcGlsZV9vcmRlcl9ieSgpOw0KICAgIA0KICAgIGlmKCR0aGlzLT5fbGltaXQgPiAwKQ0KICAgIHsNCiAgICAgICR0aGlzLT5fcXVlcnkgLj0gJyBMSU1JVCAnIC4gJHRoaXMtPl9saW1pdDsNCiAgICAgIA0KICAgICAgaWYoJHRoaXMtPl9vZmZzZXQgPiAwKQ0KICAgICAgew0KICAgICAgICAkdGhpcy0+X3F1ZXJ5IC49ICcgT0ZGU0VUICcgLiAkdGhpcy0+X29mZnNldDsNCiAgICAgIH0NCiAgICB9DQogIH0NCiAgDQogIC8qKg0KICAgKg0KICAgKi8NCiAgcHJpdmF0ZSBmdW5jdGlvbiBfY29tcGlsZV9pbnNlcnQoKSA6IHZvaWQNCiAgew0KICAgICR0aGlzLT5fcmVzZXRfcXVlcnkoKTsNCiAgICAka2V5cyA9IFxhcnJheV9rZXlzKCR0aGlzLT5fc2V0KTsNCiAgICAkdGhpcy0+X3ZhbHVlcyA9IFxhcnJheV92YWx1ZXMoJHRoaXMtPl9zZXQpOw0KICAgICRwbGFjZV9ob2xkZXJzID0gIFxhcnJheV9maWxsKDAsIFxjb3VudCgka2V5cyksICc/Jyk7DQogICAgDQogICAgJHRoaXMtPl9xdWVyeSA9ICdJTlNFUlQgSU5UTyAnIC4gc2VsZjo6Tkw7DQogICAgJHRoaXMtPl9xdWVyeSAuPSBzZWxmOjpUQUIgLiAkdGhpcy0+X2Zyb20gLiBzZWxmOjpOTDsNCiAgICAkdGhpcy0+X3F1ZXJ5IC49IHNlbGY6OlRBQiAuICcoJzsNCiAgICAkdGhpcy0+X3F1ZXJ5IC49IFxpbXBsb2RlKCcsJywgJGtleXMpOw0KICAgICR0aGlzLT5fcXVlcnkgLj0gJyknIC4gc2VsZjo6TkwgLiAnVkFMVUVTJyAuIHNlbGY6Ok5MIC4gc2VsZjo6VEFCIC4gICcoJzsNCiAgICAkdGhpcy0+X3F1ZXJ5IC49IFxpbXBsb2RlKCcsJywgJHBsYWNlX2hvbGRlcnMpOw0KICAgICR0aGlzLT5fcXVlcnkgLj0gJyknOw0KICB9DQogIA0KICAvKioNCiAgICoNCiAgICovDQogIHByaXZhdGUgZnVuY3Rpb24gX2NvbXBpbGVfdXBkYXRlKCkgOiB2b2lkDQogIHsNCiAgICAka2V5cyAgICAgICAgICA9IFxhcnJheV9rZXlzKCR0aGlzLT5fc2V0KTsNCiAgICAkdGhpcy0+X3ZhbHVlcyA9IFxhcnJheV92YWx1ZXMoJHRoaXMtPl9zZXQpOw0KICAgIC8vJHBsYWNlX2hvbGRlcnMgPSAgYXJyYXlfZmlsbCgwLCBjb3VudCgka2V5cyksICc/Jyk7DQogICAgDQogICAgJHRoaXMtPl9yZXNldF9xdWVyeSgpOw0KICAgICR0aGlzLT5fcXVlcnkgPSAnVVBEQVRFICcgLiBzZWxmOjpOTDsNCiAgICAkdGhpcy0+X3F1ZXJ5IC49IHNlbGY6OlRBQiAuICR0aGlzLT5fZnJvbSAuIHNlbGY6Ok5MOw0KICAgICR0aGlzLT5fcXVlcnkgLj0gJ1NFVCcgLiBzZWxmOjpOTDsNCiAgICANCiAgICAkdGVtcCA9IFtdOw0KICAgIA0KICAgIGZvcmVhY2goJGtleXMgYXMgJG9uZSkNCiAgICB7DQogICAgICAkdGVtcFtdPSBzZWxmOjpUQUIgLiAgJG9uZSAuICcgPSA/JzsNCiAgICB9DQogICAgDQogICAgJHRoaXMtPl9xdWVyeSAuPSBcaW1wbG9kZSgnLCcgLiBzZWxmOjpOTCwgJHRlbXApIC4gc2VsZjo6Tkw7DQogICAgDQogICAgJHRoaXMtPl9xdWVyeSAuPSAkdGhpcy0+X2NvbXBpbGVfd2hlcmUoKSAuIHNlbGY6Ok5MOw0KICAgICR0aGlzLT5fcXVlcnkgLj0gJHRoaXMtPl9jb21waWxlX29yZGVyX2J5KCkgLiBzZWxmOjpOTDsNCiAgICANCiAgICBpZigkdGhpcy0+X2xpbWl0ID4gMCkNCiAgICB7DQogICAgICAkdGhpcy0+X3F1ZXJ5IC49ICcgTElNSVQgJyAuICR0aGlzLT5fbGltaXQ7DQogICAgICANCiAgICAgIGlmKCR0aGlzLT5fb2Zmc2V0ID4gMCkNCiAgICAgIHsNCiAgICAgICAgJHRoaXMtPl9xdWVyeSAuPSAnIE9GRlNFVCAnIC4gJHRoaXMtPl9vZmZzZXQ7DQogICAgICB9DQogICAgfQ0KICB9DQogIA0KICAvKioNCiAgICoNCiAgICovDQogIHByaXZhdGUgZnVuY3Rpb24gX2NvbXBpbGVfZGVsZXRlKCkgOiB2b2lkDQogIHsNCiAgICAkdGhpcy0+X3Jlc2V0X3F1ZXJ5KCk7DQogICAgJHRoaXMtPl9xdWVyeSA9ICdERUxFVEUgRlJPTSAnIC4gc2VsZjo6Tkw7DQogICAgJHRoaXMtPl9xdWVyeSAuPSBzZWxmOjpUQUIgLiAkdGhpcy0+X2Zyb20gLiBzZWxmOjpOTDsNCiAgICAkdGhpcy0+X3F1ZXJ5IC49ICR0aGlzLT5fY29tcGlsZV93aGVyZSgpIC4gc2VsZjo6Tkw7DQogICAgJHRoaXMtPl9xdWVyeSAuPSAkdGhpcy0+X2NvbXBpbGVfb3JkZXJfYnkoKSAuIHNlbGY6Ok5MOw0KICAgIA0KICAgIGlmKCR0aGlzLT5fbGltaXQgPiAwKQ0KICAgIHsNCiAgICAgICR0aGlzLT5fcXVlcnkgLj0gJyBMSU1JVCAnIC4gJHRoaXMtPl9saW1pdDsNCiAgICAgIA0KICAgICAgaWYoJHRoaXMtPl9vZmZzZXQgPiAwKQ0KICAgICAgew0KICAgICAgICAkdGhpcy0+X3F1ZXJ5IC49ICcgT0ZGU0VUICcgLiAkdGhpcy0+X29mZnNldDsNCiAgICAgIH0NCiAgICB9DQogIH0NCiAgDQogIHByaXZhdGUgZnVuY3Rpb24gX2NvbXBpbGVfcmVwbGFjZSgpIDogdm9pZA0KICB7DQogICAgJHRoaXMtPl9yZXNldF9xdWVyeSgpOw0KICAgICRrZXlzICAgICAgICAgID0gXGFycmF5X2tleXMoJHRoaXMtPl9zZXQpOw0KICAgICR0aGlzLT5fdmFsdWVzID0gXGFycmF5X3ZhbHVlcygkdGhpcy0+X3NldCk7DQogICAgJHBsYWNlX2hvbGRlcnMgPSBcYXJyYXlfZmlsbCgwLCBjb3VudCgka2V5cyksICc/Jyk7DQogICAgDQogICAgJHRoaXMtPl9xdWVyeSA9ICdSRVBMQUNFIElOVE8gJyAuIHNlbGY6Ok5MOw0KICAgICR0aGlzLT5fcXVlcnkgLj0gc2VsZjo6VEFCIC4gJHRoaXMtPl9mcm9tIC4gJyAnOw0KICAgICR0aGlzLT5fcXVlcnkgLj0gJygnOw0KICAgICR0aGlzLT5fcXVlcnkgLj0gXGltcGxvZGUoJywnLCAka2V5cyk7DQogICAgJHRoaXMtPl9xdWVyeSAuPSAnKScgLiBzZWxmOjpOTCAuICdWQUxVRVMnIC4gc2VsZjo6TkwgLiBzZWxmOjpUQUIgLiAnKCc7DQogICAgJHRoaXMtPl9xdWVyeSAuPSBcaW1wbG9kZSgnLCcsICRwbGFjZV9ob2xkZXJzKTsNCiAgICAkdGhpcy0+X3F1ZXJ5IC49ICcpJzsNCiAgfQ0KICANCiAgLyoqDQogICAqDQogICAqLw0KICBwcml2YXRlIGZ1bmN0aW9uIF9leGVjdXRlKCkgOiB2b2lkDQogIHsNCiAgICAkYmluZGluZ3MgPSAhZW1wdHkoJHRoaXMtPl92YWx1ZXMpID8gJHRoaXMtPl92YWx1ZXMgOiBGQUxTRTsNCiAgICAkdGhpcy0+X3JzID0gJHRoaXMtPl9kYi0+RXhlY3V0ZSgkdGhpcy0+X3F1ZXJ5LCAkYmluZGluZ3MpOw0KICB9DQogIA0KICAvKioNCiAgICogcnVucyBtZXRob2RzIGZyb20gdGhlIGNvbm5lY3Rpb24gb2JqZWN0DQogICAqIChEQiA9ICR0aGlzLT5fZGIgPSBcQ01TTVNcRGF0YWJhc2VcQ29ubmVjdGlvbikNCiAgICogaWYgbm8gYXJndW1lbnRzIHByb3ZpZGVkIHdlIHVzZSBpbnRlcm5hbCBzcWwgYW5kIGJpbmRpbmdzDQogICAqIG90aGVyd2lzZSB1c2Ugd2hhdCBpcyBwcm92aWRlZCwgaW4gb3JkZXI6DQogICAqICRzcWwgLT4gcXVlcnkgdG8gYmUgdXNlZA0KICAgKiAkYmluZGluZ3MgLT4gYXJyYXkgb2YgdmFsdWVzIHRvIGJlIGxpbmtlZCB0byB0aGUgcGxhY2Vob2xkZXJzDQogICAqDQogICAqIGFsbCBvdGhlciBhcmd1bWVudHMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxlZCBmdW5jdGlvbiBhcyBhcmUNCiAgICoNCiAgICogJHRoaXMtPl9ycyB3aWxsIGhvbGQgdGhlIHJlc3VsdHMgb2YgdGhlIG1ldGhvZCBjYWxsDQogICAqIGluIHRoZSBmb3JtIG9mIGFuIGFycmF5DQogICAqLw0KICBwcml2YXRlIGZ1bmN0aW9uIF9ydW5fY29ubmVjdGlvbigpIDogdm9pZA0KICB7DQogICAgJGFyZ3MgICA9IFxmdW5jX2dldF9hcmdzKCk7DQogICAgJG1ldGhvZCA9IFxhcnJheV9zaGlmdCgkYXJncyk7DQogICAgJHRoaXMtPl9jb21waWxlX3F1ZXJ5KCk7DQogICAgJGJpbmRpbmdzID0gIWVtcHR5KCR0aGlzLT5fdmFsdWVzKSA/ICR0aGlzLT5fdmFsdWVzIDogRkFMU0U7DQogICAgJGMgICAgICAgID0gXGNvdW50KCRhcmdzKTsNCiAgICANCiAgICAjIGluIGNhc2Ugd2UgaGF2ZSBhcmd1bWVudHMgd2UgdXNlIHRoZW0NCiAgICAjIG90aGVyd2lzZSB3ZSB1c2UgaW50ZXJuYWwNCiAgICBpZigwID09PSAkYykNCiAgICB7DQogICAgICAjIG5vbmUgcHJvdmlkZWQNCiAgICAgICRhcmdzWzBdID0gJHRoaXMtPl9xdWVyeTsNCiAgICAgICRhcmdzWzFdID0gJGJpbmRpbmdzOw0KICAgIH0NCiAgICBlbHNlaWYoMSA9PT0gJGMpDQogICAgew0KICAgICAgIyB3ZSBoYXZlIGFuIHNxbCBzdGF0ZW1lbnQsIHVzZSBpdA0KICAgICAgJHRoaXMtPl9xdWVyeSA9ICRhcmdzWzBdOw0KICAgICAgDQogICAgICAjIHVzZSBiaW5kaW5ncyBpZiBhbnkNCiAgICAgICRhcmdzWzFdICAgICAgPSAkYmluZGluZ3M7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAjIGV2ZXJ5dGhpbmcgcHJvdmlkZWQNCiAgICAgICR0aGlzLT5fcXVlcnkgICA9ICRhcmdzWzBdOw0KICAgICAgJHRoaXMtPl92YWx1ZXMgID0gJGFyZ3NbMV07DQogICAgfQ0KICAgIA0KICAgICR0aGlzLT5fcnMgPSBcY2FsbF91c2VyX2Z1bmNfYXJyYXkoWyR0aGlzLT5fZGIsICRtZXRob2RdLCAkYXJncyk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gc3RyaW5nICRzZWxlY3QNCiAgICogQHBhcmFtIHN0cmluZyAkYWxpYXMNCiAgICogQHBhcmFtIHN0cmluZyAkdHlwZQ0KICAgKg0KICAgKiBAcmV0dXJuIG1peGVkDQogICAqIEB0aHJvd3MgXENNU01TRXh0XEV4Y2VwdGlvbnNcRGF0YUV4Y2VwdGlvbg0KICAgKi8NCiAgcHJpdmF0ZSBmdW5jdGlvbiBtYXhNaW5BdmdTdW0oc3RyaW5nICRzZWxlY3QgPSAnJywgc3RyaW5nICRhbGlhcyA9ICcnLCBzdHJpbmcgJHR5cGUgPSAnTUFYJykNCiAgew0KICAgIGlmICgnJyA9PT0gJHNlbGVjdCkNCiAgICB7DQogICAgICB0aHJvdyBuZXcgRGF0YUV4Y2VwdGlvbignRW1wdHkgc2VsZWN0IHBhcmFtZXRlciBpbiBtYXhNaW5BdmdTdW0nKTsNCiAgICB9DQogICAgDQogICAgaWYgKGZhbHNlICE9PSBcc3RycG9zKCRzZWxlY3QsICcsJykpDQogICAgew0KICAgICAgdGhyb3cgbmV3IERhdGFFeGNlcHRpb24oJ0ludmFsaWQgYXJndW1lbnQgaW4gbWF4TWluQXZnU3VtOiBjb2x1bW4gbmFtZSBub3Qgc2VwYXJhdGVkIGJ5IGNvbW1hJyk7DQogICAgfQ0KICAgIA0KICAgICR0eXBlID0gXHN0cnRvdXBwZXIoJHR5cGUpOw0KICAgIA0KICAgIGlmICghIFxpbl9hcnJheSgkdHlwZSwgWydNQVgnLCAnTUlOJywgJ0FWRycsICdTVU0nLCAnQ09VTlQnXSwgdHJ1ZSkpDQogICAgew0KICAgICAgdGhyb3cgbmV3IERhdGFFeGNlcHRpb24oJ0ludmFsaWQgZnVuY3Rpb24gdHlwZTogJyAuICR0eXBlKTsNCiAgICB9DQogICAgDQogICAgaWYgKCcnID09PSAkYWxpYXMpDQogICAgew0KICAgICAgJGFsaWFzID0gJHRoaXMtPkNyZWF0ZUFsaWFzRnJvbVRhYmxlKFx0cmltKCRzZWxlY3QpICk7DQogICAgfQ0KICAgIA0KICAgICR0aGlzLT5fcXVlcnkgPSAkdHlwZSAuICcoJyAuIFx0cmltKCRzZWxlY3QpIC4gJykgQVMgJyAuIFx0cmltKCRhbGlhcykgLiAkdGhpcy0+X3F1ZXJ5IC49ICdGUk9NICcgLiAkdGhpcy0+X2Zyb207DQogICAgDQogICAgcmV0dXJuICR0aGlzLT5HZXRPbmUoJHRoaXMtPl9xdWVyeSk7DQogIH0NCiAgDQogIC8qKg0KICAgKiAgcHJvdGVjdGVkIG1ldGhvZHMNCiAgICovDQogIA0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3NsaW1fY2xvbmUoKSA6IFF1ZXJ5DQogIHsNCiAgICByZXR1cm4gKGNsb25lICR0aGlzKS0+RnVsbFJlc2V0KCk7DQogIH0NCiAgDQogIHByb3RlY3RlZCBmdW5jdGlvbiBvYmplY3RfdG9fYXJyYXkoJG9iamVjdCkgOiBhcnJheQ0KICB7DQogICAgaWYoICFcaXNfb2JqZWN0KCRvYmplY3QpICkgeyByZXR1cm4gJG9iamVjdDsgfQ0KICAgIA0KICAgICRhcnJheSA9IFtdOw0KICAgIGZvcmVhY2ggKFxnZXRfb2JqZWN0X3ZhcnMoJG9iamVjdCkgYXMgJGtleSA9PiAkdmFsKQ0KICAgIHsNCiAgICAgIC8vIFRoZXJlIGFyZSBzb21lIGJ1aWx0IGluIGtleXMgd2UgbmVlZCB0byBpZ25vcmUgZm9yIHRoaXMgY29udmVyc2lvbg0KICAgICAgaWYoIVxpc19vYmplY3QoJHZhbCkgJiYgIVxpc19hcnJheSgkdmFsKSAmJiAka2V5ICE9PSAnX3BhcmVudF9uYW1lJykNCiAgICAgIHsNCiAgICAgICAgJGFycmF5WyRrZXldID0gJHZhbDsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgcmV0dXJuICRhcnJheTsNCiAgfQ0KICANCiAgcHJpdmF0ZSBmdW5jdGlvbiBfc2V0X21vZHVsZV9uYW1lKCRtb2R1bGVfbmFtZSA9ICcnKSA6IHZvaWQNCiAgew0KICAgIGlmKCBlbXB0eSgkbW9kdWxlX25hbWUpICkNCiAgICB7DQogICAgICAkdGhpcy0+X21vZHVsZV9uYW1lID0gXHN0cnRvbG93ZXIoX19OQU1FU1BBQ0VfXyk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkdGhpcy0+X21vZHVsZV9uYW1lID0gJG1vZHVsZV9uYW1lOw0KICAgIH0NCiAgfQ0KICANCiAgcHJpdmF0ZSBmdW5jdGlvbiBfc2V0X3RhYmxlX3ByZWZpeCgkdGFibGVfcHJlZml4KSA6IHZvaWQNCiAgew0KICAgIGlmKCBlbXB0eSgkdGFibGVfcHJlZml4KSApDQogICAgew0KICAgICAgJHRoaXMtPl90YWJsZV9wcmVmaXggPSBcY21zX2RiX3ByZWZpeCgpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJHRoaXMtPl90YWJsZV9wcmVmaXggPSAkdGFibGVfcHJlZml4Ow0KICAgIH0NCiAgfQ0KICANCiAgLyoqDQogICAqIHB1YmxpYyBtZXRob2RzDQogICAqLw0KICANCiAgDQogIC8qKg0KICAgKiBxdWVyeSBjb25zdHJ1Y3Rvci4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkdGFibGVfbmFtZQ0KICAgKiBAcGFyYW0gc3RyaW5nICRtb2R1bGVfbmFtZQ0KICAgKiBAcGFyYW0gc3RyaW5nICR0YWJsZV9wcmVmaXgNCiAgICoNCiAgICogQHRocm93cyBcRXhjZXB0aW9uDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHRhYmxlX25hbWUgPSAnJywgJG1vZHVsZV9uYW1lID0gJycsICR0YWJsZV9wcmVmaXggPSAnJykNCiAgew0KICAgICR0aGlzLT5fZGIgPSBcY21zX3V0aWxzOjpnZXRfZGIoKTsNCiAgICAkdGhpcy0+X3NldF90YWJsZV9wcmVmaXgoJHRhYmxlX3ByZWZpeCk7DQogICAgJHRoaXMtPl9zZXRfbW9kdWxlX25hbWUoJG1vZHVsZV9uYW1lKTsNCiAgICAkdGhpcy0+X3NldF90YWJsZSgkdGFibGVfbmFtZSk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gc3RyaW5nICRzZWxlY3QNCiAgICoNCiAgICogQHJldHVybiAkdGhpcw0KICAgKiBAdGhyb3dzIFxDTVNNU0V4dFxFeGNlcHRpb25zXERhdGFFeGNlcHRpb24NCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBTZWxlY3REaXN0aW5jdCgkc2VsZWN0ID0gJyonKSA6IFF1ZXJ5DQogIHsNCiAgICAkdGhpcy0+X2Rpc3RpbmN0ID0gJ0RJU1RJTkNUJzsNCiAgICAkdGhpcy0+U2VsZWN0KCRzZWxlY3QpOw0KICAgIA0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgJHNlbGVjdA0KICAgKg0KICAgKiBAcmV0dXJuICR0aGlzDQogICAqIEB0aHJvd3MgXENNU01TRXh0XEV4Y2VwdGlvbnNcRGF0YUV4Y2VwdGlvbg0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIFNlbGVjdCgkc2VsZWN0ID0gJyonKSA6IFF1ZXJ5DQogIHsNCiAgICBpZiggZW1wdHkoJHRoaXMtPl9mcm9tKSApDQogICAgew0KICAgICAgdGhyb3cgbmV3IERhdGFFeGNlcHRpb24oJ0EgdGFibGUgcmVmZXJlbmNlIGlzIG5lZWRlZCBmb3IgRnJvbSEnKTsNCiAgICB9DQogICAgDQogICAgaWYoIFxpc19zdHJpbmcoJHNlbGVjdCkgKQ0KICAgIHsNCiAgICAgICRzZWxlY3QgPSBcZXhwbG9kZSgnLCcsICRzZWxlY3QpOw0KICAgIH0NCiAgICANCiAgICBmb3JlYWNoKCRzZWxlY3QgYXMgJHZhbCkNCiAgICB7DQogICAgICBpZiAoJycgIT09ICR2YWwpIHsgJHRoaXMtPl9jb2xzW10gPSAkdmFsOyB9DQogICAgfQ0KICAgIA0KICAgICR0aGlzLT5fdHlwZSA9IHNlbGY6OlRZUEVfU0VMRUNUOw0KICAgIA0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSBhcnJheXxudWxsICRzZXQNCiAgICoNCiAgICogQHJldHVybiAkdGhpcw0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIEluc2VydChhcnJheSAkc2V0ID0gbnVsbCkgOiBRdWVyeQ0KICB7DQogICAgaWYobnVsbCAhPT0gJHNldCkgeyAkdGhpcy0+U2V0KCRzZXQsICcnKTsgfQ0KICAgIA0KICAgICR0aGlzLT5fdHlwZSA9IHNlbGY6OlRZUEVfSU5TRVJUOw0KICAgIA0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSBhcnJheXxudWxsICRzZXQNCiAgICoNCiAgICogQHJldHVybiAkdGhpcw0KICAgKiBAdGhyb3dzIFxDTVNNU0V4dFxFeGNlcHRpb25zXERhdGFFeGNlcHRpb24NCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBSZXBsYWNlKGFycmF5ICRzZXQgPSBudWxsKSA6IFF1ZXJ5DQogIHsNCiAgICBpZihudWxsICE9PSAkc2V0KSB7ICR0aGlzLT5TZXQoJHNldCk7IH0NCiAgICANCiAgICBpZiggZW1wdHkoJHRoaXMtPl9zZXQpICkNCiAgICB7DQogICAgICB0aHJvdyBuZXcgRGF0YUV4Y2VwdGlvbignRGF0YSBzZXQgY2Fubm90IGJlIGVtcHR5Jyk7DQogICAgfQ0KICAgIA0KICAgICR0aGlzLT5fdHlwZSA9IHNlbGY6OlRZUEVfUkVQTEFDRTsNCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIA0KICAvKioNCiAgICogQHBhcmFtIGFycmF5fG51bGwgJHNldA0KICAgKg0KICAgKiBAcmV0dXJuICR0aGlzDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gVXBkYXRlKGFycmF5ICRzZXQgPSBudWxsKSA6IFF1ZXJ5DQogIHsNCiAgICBpZihudWxsICE9PSAkc2V0KSB7ICR0aGlzLT5TZXQoJHNldCwgJycpOyB9DQogICAgDQogICAgJHRoaXMtPl90eXBlID0gc2VsZjo6VFlQRV9VUERBVEU7DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtIHN0cmluZyAkd2hlcmUNCiAgICogQHBhcmFtIGJvb2wgICAkcmVzZXRfZGF0YQ0KICAgKg0KICAgKiBAcmV0dXJuICR0aGlzDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gRGVsZXRlKCR3aGVyZSA9ICcnLCBib29sICRyZXNldF9kYXRhID0gdHJ1ZSkgOiBRdWVyeQ0KICB7DQogICAgaWYoJHJlc2V0X2RhdGEpDQogICAgew0KICAgICAgJHRoaXMtPl9yZXNldF93cml0ZV9kYXRhKCk7DQogICAgfQ0KICAgIA0KICAgIGlmKCcnICE9PSAkd2hlcmUpDQogICAgew0KICAgICAgJHRoaXMtPldoZXJlKCR3aGVyZSk7DQogICAgfQ0KICAgIA0KICAgICR0aGlzLT5fdHlwZSA9IHNlbGY6OlRZUEVfREVMRVRFOw0KICAgIA0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KICANCiAgLyoqDQogICAqIEFsbG93cyBrZXkvdmFsdWUgcGFpcnMgdG8gYmUgc2V0IGZvciBpbnNlcnQoKSwgdXBkYXRlKCkgb3IgcmVwbGFjZSgpLg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5fG9iamVjdCAka2V5ICAgRmllbGQgbmFtZSwgb3IgYW4gYXJyYXkgb2YgZmllbGQvdmFsdWUgcGFpcnMNCiAgICogQHBhcmFtIHN0cmluZ3xudWxsICAgICAgICAgJHZhbHVlIEZpZWxkIHZhbHVlLCBpZiAka2V5IGlzIGEgc2luZ2xlIGZpZWxkDQogICAqDQogICAqIEByZXR1cm4gJHRoaXMNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBTZXQoJGtleSwgP3N0cmluZyAkdmFsdWUgPSBudWxsKSA6IFF1ZXJ5DQogIHsNCiAgICAka2V5ID0gJHRoaXMtPm9iamVjdF90b19hcnJheSgka2V5KTsNCiAgICANCiAgICAvLyBpZiggIVxpc19hcnJheSgka2V5KSApIHsgJGtleSA9IFska2V5ID0+ICR2YWx1ZV07IH0gLy8gcmVkdW5kYW50ID8NCiAgICANCiAgICBmb3JlYWNoKCRrZXkgYXMgJGsgPT4gJHYpIHsgJHRoaXMtPl9zZXRbJGtdID0gJHY7IH0NCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBGcm9tKCR0YWJsZV9uYW1lID0gJycpIDogUXVlcnkNCiAgew0KICAgICR0aGlzLT5fc2V0X3RhYmxlKCR0YWJsZV9uYW1lKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBTZXRUYWJsZSgkdGFibGVfbmFtZSA9ICcnKSA6IFF1ZXJ5DQogIHsNCiAgICAkdGhpcy0+X3NldF90YWJsZSgkdGFibGVfbmFtZSk7DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICAvKioNCiAgICogQHJldHVybiAkdGhpcw0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIEdyb3VwU3RhcnQoKSA6IFF1ZXJ5DQogIHsNCiAgICAkdGhpcy0+X3N0YWNrX3B1c2goJ3doZXJlJywnKCcpOw0KICAgIA0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KICANCiAgLyoqDQogICAqIEByZXR1cm4gJHRoaXMNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBHcm91cEVuZCgpIDogUXVlcnkNCiAgew0KICAgICR0aGlzLT5fc3RhY2tfcHVzaCgnd2hlcmUnLCcpJyk7DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICAvKioNCiAgICogQWxpYXMgZm9yIEFuZFdoZXJlDQogICAqIEBwYXJhbSAgICAgICAgJGtleQ0KICAgKiBAcGFyYW0gbnVsbCAgICR2YWx1ZQ0KICAgKiBAcGFyYW0gc3RyaW5nICRvcA0KICAgKg0KICAgKiBAcmV0dXJuICR0aGlzDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gV2hlcmUoJGtleSwgJHZhbHVlID0gTlVMTCwgJG9wID0gJz0nKSA6IFF1ZXJ5DQogIHsNCiAgICByZXR1cm4gJHRoaXMtPkFuZFdoZXJlKCRrZXksICR2YWx1ZSwgJG9wKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSAgICAgICAgJGtleQ0KICAgKiBAcGFyYW0gbnVsbCAgICR2YWx1ZQ0KICAgKiBAcGFyYW0gc3RyaW5nICRvcA0KICAgKg0KICAgKiBAcmV0dXJuICR0aGlzDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gQW5kV2hlcmUoJGtleSwgJHZhbHVlID0gTlVMTCwgJG9wID0gJz0nKSA6IFF1ZXJ5DQogIHsNCiAgICANCiAgICBpZiggJHRoaXMtPl9zdGFja19jb3VudCgnd2hlcmUnKSAmJiAhKCcoJyA9PT0gJHRoaXMtPl9zdGFja19wZWVrKCd3aGVyZScpKSApDQogICAgew0KICAgICAgJHRoaXMtPl9zdGFja19wdXNoKCd3aGVyZScsJ0FORCcpOw0KICAgIH0NCiAgICANCiAgICBpZiggIVxpc19hcnJheSgka2V5KSApDQogICAgew0KICAgICAgaWYoTlVMTCA9PT0gJHZhbHVlKQ0KICAgICAgew0KICAgICAgICAjIGxldCdzIGFzc3VtZSAka2V5IGlzIGEgZnVsbCBXSEVSRSBzdHJpbmcgZXhwcmVzc2lvbg0KICAgICAgICANCiAgICAgICAgJHRoaXMtPl9zdGFja19wdXNoKCd3aGVyZScsICRrZXkpOw0KICAgICAgfQ0KICAgICAgZWxzZSBpZigkdmFsdWUgaW5zdGFuY2VvZiBDbG9zdXJlKQ0KICAgICAgew0KICAgICAgICAkcXVlcnlfb2JqID0gJHRoaXMtPl9zbGltX2Nsb25lKCk7DQogICAgICAgICR2YWx1ZSAgICAgICA9ICcoJyAuICAkdmFsdWUoJHF1ZXJ5X29iaiktPkdldFF1ZXJ5KFRSVUUpIC4gJyknOw0KICAgICAgICAkdGhpcy0+X3N0YWNrX3B1c2goJ3doZXJlJywka2V5IC4gJyAnIC4gJG9wIC4gJyAnIC4gJHZhbHVlKTsNCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgJHRoaXMtPl9zdGFja19wdXNoKCd3aGVyZScsJGtleSAuICcgJyAuICRvcCAuICcgPycpOw0KICAgICAgICAkdGhpcy0+X3N0YWNrX3B1c2goJ3doZXJlX2JpbmRpbmdzJywgJHZhbHVlKTsNCiAgICAgIH0NCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICRjID0gXGNvdW50KCRrZXkpOw0KICAgICAgJGkgPSAwOw0KICAgICAgDQogICAgICBmb3JlYWNoKCRrZXkgYXMgJGsgPT4gJHYpDQogICAgICB7DQogICAgICAgIGlmIChudWxsICE9PSAkdikNCiAgICAgICAgew0KICAgICAgICAgICR0aGlzLT5fc3RhY2tfcHVzaCgnd2hlcmUnLCRrIC4gJyAnIC4gJG9wIC4gJyA/Jyk7DQogICAgICAgICAgJHRoaXMtPl9zdGFja19wdXNoKCd3aGVyZV9iaW5kaW5ncycsICR2KTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgaWYoKyskaSA8ICRjKQ0KICAgICAgICB7DQogICAgICAgICAgJHRoaXMtPl9zdGFja19wdXNoKCd3aGVyZScsJ0FORCcpOw0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KICANCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gICAgICAgICRrZXkNCiAgICogQHBhcmFtIG51bGwgICAkdmFsdWUNCiAgICogQHBhcmFtIHN0cmluZyAkb3ANCiAgICoNCiAgICogQHJldHVybiAkdGhpcw0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIE9yV2hlcmUoJGtleSwgJHZhbHVlID0gTlVMTCwgJG9wID0gJz0nKSA6IFF1ZXJ5DQogIHsNCiAgICBpZiggJHRoaXMtPl9zdGFja19jb3VudCgnd2hlcmUnKSApDQogICAgew0KICAgICAgJHRoaXMtPl9zdGFja19wdXNoKCd3aGVyZScsJ09SJyk7DQogICAgfQ0KICAgIA0KICAgIGlmKCAhXGlzX2FycmF5KCRrZXkpICkNCiAgICB7DQogICAgICBpZihOVUxMID09PSAkdmFsdWUpDQogICAgICB7DQogICAgICAgICMgbGV0cyBhc3N1bWUgJGtleSBpcyBhIGZ1bGwgV0hFUkUgc3RyaW5nIGV4cHJlc3Npb24NCiAgICAgICAgDQogICAgICAgICR0aGlzLT5fc3RhY2tfcHVzaCgnd2hlcmUnLCAka2V5KTsNCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgJHRoaXMtPl9zdGFja19wdXNoKCd3aGVyZScsJGtleSAuICcgJyAuICRvcCAuICcgPycpOw0KICAgICAgICAkdGhpcy0+X3N0YWNrX3B1c2goJ3doZXJlX2JpbmRpbmdzJywgJHZhbHVlKTsNCiAgICAgIH0NCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICRjID0gXGNvdW50KCRrZXkpOw0KICAgICAgJGkgPSAwOw0KICAgICAgZm9yZWFjaCgka2V5IGFzICRrID0+ICR2KQ0KICAgICAgew0KICAgICAgICAkdGhpcy0+X3N0YWNrX3B1c2goJ3doZXJlJywkayAuICcgJyAuICRvcCAuICcgPycpOw0KICAgICAgICAkdGhpcy0+X3N0YWNrX3B1c2goJ3doZXJlX2JpbmRpbmdzJywgJHYpOw0KICAgICAgICANCiAgICAgICAgaWYoKyskaSA8ICRjKQ0KICAgICAgICB7DQogICAgICAgICAgJHRoaXMtPl9zdGFja19wdXNoKCd3aGVyZScsJ09SJyk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtIGludCAkbGltaXQNCiAgICogQHBhcmFtIGludCAkb2Zmc2V0DQogICAqDQogICAqIEByZXR1cm4gJHRoaXMNCiAgICogQHRocm93cyBcQ01TTVNFeHRcRXhjZXB0aW9uc1xEYXRhRXhjZXB0aW9uDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gTGltaXQoJGxpbWl0ID0gMCwgJG9mZnNldCA9IDApIDogUXVlcnkNCiAgew0KICAgIGlmKCAhXGlzX251bWVyaWMoJGxpbWl0KSApDQogICAgew0KICAgICAgdGhyb3cgbmV3IERhdGFFeGNlcHRpb24oJ0xpbWl0IHNob3VsZCBiZSBzcGVjaWZpZWQgdXNpbmcgbnVtZXJhbHMnKTsNCiAgICB9DQogICAgDQogICAgaWYoICFcaXNfbnVtZXJpYygkb2Zmc2V0KSApDQogICAgew0KICAgICAgdGhyb3cgbmV3IERhdGFFeGNlcHRpb24oJ09mZnNldCBzaG91bGQgYmUgc3BlY2lmaWVkIHVzaW5nIG51bWVyYWxzJyk7DQogICAgfQ0KICAgIA0KICAgICR0aGlzLT5fbGltaXQgID0gJGxpbWl0ID09PSAwID8gJHRoaXMtPl9saW1pdCA6ICRsaW1pdDsNCiAgICAkdGhpcy0+X29mZnNldCA9ICRsaW1pdCA9PT0gMCA/ICR0aGlzLT5fb2Zmc2V0IDogJG9mZnNldDsNCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gc3RyaW5nICRvcmRlckJ5DQogICAqIEBwYXJhbSBzdHJpbmcgJGRpcmVjdGlvbg0KICAgKg0KICAgKiBAcmV0dXJuICR0aGlzDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gT3JkZXJCeShzdHJpbmcgJG9yZGVyQnksIHN0cmluZyAkZGlyZWN0aW9uID0gJycpDQogIHsNCiAgICAkZGlyZWN0aW9uID0gXHN0cnRvdXBwZXIodHJpbSgkZGlyZWN0aW9uKSApOw0KICAgIA0KICAgIGlmKCdSQU5ET00nID09PSAkZGlyZWN0aW9uKQ0KICAgIHsNCiAgICAgICRkaXJlY3Rpb24gPSAnJzsNCiAgICAgIA0KICAgICAgLy8gRG8gd2UgaGF2ZSBhIHNlZWQgdmFsdWU/DQogICAgICAkb3JkZXJCeSA9IFxjdHlwZV9kaWdpdCgkb3JkZXJCeSkgPyBcc3ByaW50ZigkdGhpcy0+cmFuZG9tX2tleXdvcmRbMV0sICRvcmRlckJ5KSA6ICR0aGlzLT5yYW5kb21fa2V5d29yZFswXTsNCiAgICB9DQogICAgZWxzZWlmKCBlbXB0eSgkb3JkZXJCeSkgKQ0KICAgIHsNCiAgICAgIHJldHVybiAkdGhpczsNCiAgICB9DQogICAgZWxzZWlmKCAkZGlyZWN0aW9uICE9PSAnJyApDQogICAgew0KICAgICAgJGRpcmVjdGlvbiA9IFxpbl9hcnJheSgkZGlyZWN0aW9uLCBbJ0FTQycsICdERVNDJ10sIHRydWUpID8gJyAnIC4gJGRpcmVjdGlvbiA6ICcnOw0KICAgIH0NCiAgICANCiAgICAkb2JfYXJyID0gXGV4cGxvZGUoJywnLCAkb3JkZXJCeSk7DQogICAgDQogICAgZm9yZWFjaCgkb2JfYXJyIGFzICRvbmUpDQogICAgew0KICAgICAgaWYoDQogICAgICAgICcnID09PSAkZGlyZWN0aW9uDQogICAgICAgICYmIFxwcmVnX21hdGNoKCcvXHMrKEFTQ3xERVNDKSQvaScsIFxydHJpbSgkb25lKSwgJG1hdGNoLCBcUFJFR19PRkZTRVRfQ0FQVFVSRSkNCiAgICAgICkNCiAgICAgIHsNCiAgICAgICAgJGNvbCA9IFxsdHJpbShcc3Vic3RyKCRvbmUsIDAsICRtYXRjaFswXVsxXSkgKTsNCiAgICAgICAgJGRpcmVjdGlvbiA9ICAkbWF0Y2hbMV1bMF07DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgICRjb2wgPSBcdHJpbSgkb25lKTsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgJHRoaXMtPl9zdGFja19wdXNoKCdvcmRlcl9ieScsICRjb2wgLiAnICcgLiAkZGlyZWN0aW9uKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICAvKioNCiAgICogVGVzdHMgd2hldGhlciB0aGUgc3RyaW5nIGhhcyBhbiBTUUwgb3BlcmF0b3INCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkc3RyDQogICAqDQogICAqIEByZXR1cm4gYm9vbGVhbg0KICAgKi8NCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9oYXNfb3BlcmF0b3Ioc3RyaW5nICRzdHIpIDogYm9vbA0KICB7DQogICAgcmV0dXJuIChib29sKSBccHJlZ19tYXRjaCgnLyg8fD58IXw9fFxzSVMgTlVMTHxcc0lTIE5PVCBOVUxMfFxzRVhJU1RTfFxzQkVUV0VFTnxcc0xJS0V8XHNJTlxzKlwofFxzKS9pJywgXHRyaW0oJHN0cikgKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlDQogICAqIEBwYXJhbSBzdHJpbmcgJGNvbmQNCiAgICogQHBhcmFtIHN0cmluZyAkdHlwZQ0KICAgKg0KICAgKiBAcmV0dXJuICR0aGlzDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gSm9pbihzdHJpbmcgJHRhYmxlLCBzdHJpbmcgJGNvbmQsIHN0cmluZyAkdHlwZSA9ICcnKQ0KICB7DQogICAgaWYgKCcnICE9PSAkdHlwZSkNCiAgICB7DQogICAgICAkdHlwZSA9IFxzdHJ0b3VwcGVyKHRyaW0oJHR5cGUpICk7DQogICAgICANCiAgICAgIGlmKCAhXGluX2FycmF5KCR0eXBlLCAkdGhpcy0+am9pbl90eXBlcywgdHJ1ZSkgKQ0KICAgICAgew0KICAgICAgICAkdHlwZSA9ICcnOw0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAkdHlwZSAuPSAnICc7DQogICAgICB9DQogICAgfQ0KICAgIA0KICAgICR0aGlzLT5fcHJvY2Vzc19hbGlhcygkdGFibGUpOw0KICAgIA0KICAgICR0YWJsZSA9ICR0aGlzLT5fZ2V0X3RhYmxlKCR0YWJsZSk7DQogICAgDQogICAgaWYoICEkdGhpcy0+X2hhc19vcGVyYXRvcigkY29uZCkgKQ0KICAgIHsNCiAgICAgICRjb25kID0gJyBVU0lORyAoJyAuICRjb25kIC4gJyknOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJGNvbmQgPSAnIE9OICcgLiAkY29uZDsNCiAgICB9DQogICAgDQogICAgLy8gQXNzZW1ibGUgdGhlIEpPSU4gc3RhdGVtZW50DQogICAgJGpvaW4gPSAkdHlwZSAuICdKT0lOICcgLiAkdGFibGUgLiAkY29uZDsNCiAgICAkdGhpcy0+X3N0YWNrX3B1c2goJ2pvaW5zJywgJGpvaW4pOw0KICAgIA0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSBpbnQgJGxpbWl0DQogICAqIEBwYXJhbSBpbnQgJG9mZnNldA0KICAgKg0KICAgKiBAcmV0dXJuIG1peGVkDQogICAqIEB0aHJvd3MgXENNU01TRXh0XEV4Y2VwdGlvbnNcRGF0YUV4Y2VwdGlvbg0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIEV4ZWN1dGUoJGxpbWl0ID0gMCwgJG9mZnNldCA9IDApDQogIHsNCiAgICAkdGhpcy0+TGltaXQoJGxpbWl0LCAkb2Zmc2V0KTsNCiAgICAkdGhpcy0+X2NvbXBpbGVfcXVlcnkoKTsNCiAgICAkdGhpcy0+X2V4ZWN1dGUoKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXMtPl9yczsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSBpbnQgJG51bWJlcl9vZl9yb3dzDQogICAqDQogICAqIEByZXR1cm4gbWl4ZWQNCiAgICogQHRocm93cyBcQ01TTVNFeHRcRXhjZXB0aW9uc1xEYXRhRXhjZXB0aW9uDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gUlNHZXRBcnJheSgkbnVtYmVyX29mX3Jvd3MgPSAwKQ0KICB7DQogICAgJHRoaXMtPkxpbWl0KCRudW1iZXJfb2Zfcm93cyk7DQogICAgJHRoaXMtPl9jb21waWxlX3F1ZXJ5KCk7DQogICAgJHRoaXMtPl9leGVjdXRlKCk7DQogICAgDQogICAgcmV0dXJuICR0aGlzLT5fcnMtPkdldEFycmF5KCk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gaW50ICRudW1iZXJfb2Zfcm93cw0KICAgKg0KICAgKiBAcmV0dXJuIG1peGVkDQogICAqIEB0aHJvd3MgXENNU01TRXh0XEV4Y2VwdGlvbnNcRGF0YUV4Y2VwdGlvbg0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIFJTR2V0Um93cygkbnVtYmVyX29mX3Jvd3MgPSAwKQ0KICB7DQogICAgJHRoaXMtPkxpbWl0KCRudW1iZXJfb2Zfcm93cyk7DQogICAgJHRoaXMtPl9jb21waWxlX3F1ZXJ5KCk7DQogICAgJHRoaXMtPl9leGVjdXRlKCk7DQogICAgDQogICAgcmV0dXJuICR0aGlzLT5fcnMtPkdldFJvd3MoKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSBib29sICRmb3JjZV9hcnJheQ0KICAgKg0KICAgKiBAcmV0dXJuIG1peGVkDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gUlNHZXRBc3NvYygkZm9yY2VfYXJyYXkgPSBGQUxTRSkNCiAgew0KICAgICR0aGlzLT5fY29tcGlsZV9xdWVyeSgpOw0KICAgICR0aGlzLT5fZXhlY3V0ZSgpOw0KICAgIA0KICAgIHJldHVybiAkdGhpcy0+X3JzLT5HZXRBc3NvYygkZm9yY2VfYXJyYXkpOw0KICB9DQogIA0KICAvKioNCiAgICogQWxpYXMgZm9yIEdldEFycmF5DQogICAqIEBwYXJhbSAgICAgICRzcWwNCiAgICogQHBhcmFtIGJvb2wgJGlucHV0YXJyDQogICAqDQogICAqIEByZXR1cm4gbWl4ZWQNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBHZXQoJHNxbCwgJGlucHV0YXJyID0gRkFMU0UpDQogIHsNCiAgICByZXR1cm4gJHRoaXMtPkdldEFycmF5KCRzcWwsICRpbnB1dGFycik7DQogIH0NCiAgDQogIA0KICBwdWJsaWMgZnVuY3Rpb24gR2V0T25lKCkgOiBcQ01TTVNcRGF0YWJhc2VcUmVzdWx0U2V0DQogIHsNCiAgICAkYXJncyA9IFxmdW5jX2dldF9hcmdzKCk7DQogICAgXGFycmF5X3Vuc2hpZnQoJGFyZ3MsIF9fRlVOQ1RJT05fXyk7DQogICAgXGNhbGxfdXNlcl9mdW5jX2FycmF5KFskdGhpcywgJ19ydW5fY29ubmVjdGlvbiddLCAkYXJncyk7DQogICAgDQogICAgcmV0dXJuICR0aGlzLT5fcnM7DQogIH0NCiAgDQogIC8qKg0KICAgKiBSZXRyaWV2ZXMgYSByb3cgZnJvbSB0aGUgZGF0YWJhc2UuDQogICAqDQogICAqIEByZXR1cm4gYXJyYXkgVGhlIHJldHJpZXZlZCByb3cuDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gR2V0Um93KCkgOiBhcnJheQ0KICB7DQogICAgJGFyZ3MgPSBcZnVuY19nZXRfYXJncygpOw0KICAgIFxhcnJheV91bnNoaWZ0KCRhcmdzLCBfX0ZVTkNUSU9OX18pOw0KICAgIFxjYWxsX3VzZXJfZnVuY19hcnJheShbJHRoaXMsICdfcnVuX2Nvbm5lY3Rpb24nXSwgJGFyZ3MpOw0KICAgIA0KICAgIHJldHVybiAkdGhpcy0+X3JzOw0KICB9DQogIA0KICANCiAgcHVibGljIGZ1bmN0aW9uIEdldENvbCgpIDogYXJyYXkNCiAgew0KICAgICRhcmdzID0gXGZ1bmNfZ2V0X2FyZ3MoKTsNCiAgICBcYXJyYXlfdW5zaGlmdCgkYXJncywgX19GVU5DVElPTl9fKTsNCiAgICBcY2FsbF91c2VyX2Z1bmNfYXJyYXkoWyR0aGlzLCAnX3J1bl9jb25uZWN0aW9uJ10sICRhcmdzKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXMtPl9yczsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIEdldEFsbCgpIDogYXJyYXkNCiAgew0KICAgICRhcmdzID0gXGZ1bmNfZ2V0X2FyZ3MoKTsNCiAgICBcYXJyYXlfdW5zaGlmdCgkYXJncywgX19GVU5DVElPTl9fKTsNCiAgICBcY2FsbF91c2VyX2Z1bmNfYXJyYXkoWyR0aGlzLCAnX3J1bl9jb25uZWN0aW9uJ10sICRhcmdzKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXMtPl9yczsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIEdldEFycmF5KCkgOiBhcnJheQ0KICB7DQogICAgJGFyZ3MgPSBcZnVuY19nZXRfYXJncygpOw0KICAgIFxhcnJheV91bnNoaWZ0KCRhcmdzLCBfX0ZVTkNUSU9OX18pOw0KICAgIFxjYWxsX3VzZXJfZnVuY19hcnJheShbJHRoaXMsICdfcnVuX2Nvbm5lY3Rpb24nXSwgJGFyZ3MpOw0KICAgIA0KICAgIHJldHVybiAkdGhpcy0+X3JzOw0KICB9DQogIA0KICAvKioNCiAgICogVHJ5IHRvIHVwZGF0ZSBhIHJlY29yZCwgYW5kIGlmIHRoZSByZWNvcmQgaXMgbm90IGZvdW5kLA0KICAgKiBhbiBpbnNlcnQgc3RhdGVtZW50IGlzIGdlbmVyYXRlZCBhbmQgZXhlY3V0ZWQuDQogICAqIFRoaXMgZGlmZmVycyBmcm9tIE15U1FMJ3MgcmVwbGFjZSB3aGljaCBkZWxldGVzIHRoZSByZWNvcmQgYW5kIGluc2VydHMgYSBuZXcgcmVjb3JkLg0KICAgKiBUaGlzIGFsc28gbWVhbnMgeW91IGNhbm5vdCB1cGRhdGUgdGhlIHByaW1hcnkga2V5Lg0KICAgKg0KICAgKg0KICAgKiBAcGFyYW0gICAgICAkdGFibGUgICAgICAgPSB0aGUgdGFibGUgbmFtZQ0KICAgKiBAcGFyYW0gICAgICAkYXJyRmllbGRzICAgPSBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aGVyZSB0aGUga2V5cyBhcmUgdGhlIGZpZWxkIG5hbWVzDQogICAqIEBwYXJhbSAgICAgICRrZXlDb2xzICAgICA9IHRoZSBuYW1lIG9mIHRoZSBwcmltYXJ5IGtleSwgb3IgYW4gYXJyYXkgb2YgZmllbGQgbmFtZXMgaWYgaXQgaXMgYSBjb21wb3VuZCBrZXkNCiAgICogQHBhcmFtIGJvb2wgJGF1dG9RdW90ZSA9IGlmIHRydWUgUmVwbGFjZSgpIHdpbGwgcXVvdGUgYWxsIHZhbHVlcyB0aGF0IGFyZSBub24tbnVtZXJpYzsNCiAgICoNCiAgICogYXV0by1xdW90aW5nIHdpbGwgbm90IHF1b3RlIG51bGxzLiBOb3RlIHRoYXQgYXV0by1xdW90aW5nIHdpbGwgbm90IHdvcmsgaWYgeW91IHVzZSBTUUwgZnVuY3Rpb25zIG9yIG9wZXJhdG9ycy4NCiAgICoNCiAgICogQHJldHVybiBpbnQgUmV0dXJucyAwIG9uIGZhaWx1cmUsDQogICAqICAgICAgICAgICAgICAgICAgICAgMSBpZiB1cGRhdGUgc3RhdGVtZW50IHdvcmtlZCwNCiAgICogICAgICAgICAgICAgICAgICAgICAyIGlmIG5vIHJlY29yZCB3YXMgZm91bmQgYW5kIHRoZSBpbnNlcnQgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseS4NCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBBZG9kYkx0ZVJlcGxhY2UoJHRhYmxlLCAkYXJyRmllbGRzLCAka2V5Q29scywgJGF1dG9RdW90ZSA9IGZhbHNlKSA6IGludA0KICB7DQogICAgJGFyZ3MgPSBcZnVuY19nZXRfYXJncygpOw0KICAgIFxhcnJheV91bnNoaWZ0KCRhcmdzLCAnUmVwbGFjZScpOw0KICAgIFxjYWxsX3VzZXJfZnVuY19hcnJheShbJHRoaXMsICdfcnVuX2Nvbm5lY3Rpb24nXSwgJGFyZ3MpOw0KICAgIA0KICAgIHJldHVybiAkdGhpcy0+X3JzOw0KICB9DQogIA0KICAvKioNCiAgICogSW5qZWN0cyBhIGRpcmVjdCBTUUwgc3RhdGVtZW50DQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJHNxbA0KICAgKg0KICAgKiBAcmV0dXJuICR0aGlzDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gU1FMKCRzcWwgPSAnJykgOiBRdWVyeQ0KICB7DQogICAgJHRoaXMtPl9yZXNldF9xdWVyeSgpOw0KICAgICR0aGlzLT5fcXVlcnkgPSAkc3FsOw0KICAgIA0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KICANCiAgLyoqDQogICAqICBUcnVuY2F0ZXMgdGhlIHRhYmxlDQogICAqDQogICAqIEB0aHJvd3MgXENNU01TRXh0XEV4Y2VwdGlvbnNcRGF0YUV4Y2VwdGlvbg0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIFRydW5jYXRlKCkgOiB2b2lkDQogIHsNCiAgICAkc3FsID0gJ1RSVU5DQVRFIFRBQkxFICcgLiAkdGhpcy0+X2Zyb207DQogICAgJHRoaXMtPlNRTCgkc3FsKS0+RXhlY3V0ZSgpOw0KICB9DQogIA0KICANCiAgLyoqDQogICAqIEFsaWFzIGZvciBFeGVjdXRlDQogICAqDQogICAqIEBwYXJhbSBpbnQgJGxpbWl0DQogICAqIEBwYXJhbSBpbnQgJG9mZnNldA0KICAgKg0KICAgKiBAcmV0dXJuIGFycmF5DQogICAqIEB0aHJvd3MgXENNU01TRXh0XEV4Y2VwdGlvbnNcRGF0YUV4Y2VwdGlvbg0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIFJ1bigkbGltaXQgPSAwLCAkb2Zmc2V0ID0gMCkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+RXhlY3V0ZSgkbGltaXQsICRvZmZzZXQpOw0KICB9DQogIA0KICAvKioNCiAgICogQHRocm93cyBcQ01TTVNFeHRcRXhjZXB0aW9uc1xEYXRhRXhjZXB0aW9uDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gQ291bnQoKQ0KICB7DQogICAgJHRoaXMtPl90eXBlID0gc2VsZjo6VFlQRV9TRUxFQ1Q7DQogICAgIyBSZWNvcmRDb3VudCBtZXRob2QgaXMgZnJvbSB0aGUgUmVjb3JkU2V0IG9iamVjdA0KICAgIHJldHVybiAkdGhpcy0+RXhlY3V0ZSgpLT5SZWNvcmRDb3VudCgpOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtIHN0cmluZyAkc2VsZWN0DQogICAqIEBwYXJhbSBzdHJpbmcgJGFsaWFzDQogICAqDQogICAqIEByZXR1cm4gbWl4ZWQNCiAgICogQHRocm93cyBcQ01TTVNFeHRcRXhjZXB0aW9uc1xEYXRhRXhjZXB0aW9uDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gU2VsZWN0TWF4KHN0cmluZyAkc2VsZWN0ID0gJycsIHN0cmluZyAkYWxpYXMgPSAnJykNCiAgew0KICAgIHJldHVybiAkdGhpcy0+bWF4TWluQXZnU3VtKCRzZWxlY3QsICRhbGlhcyk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gc3RyaW5nICRzZWxlY3QNCiAgICogQHBhcmFtIHN0cmluZyAkYWxpYXMNCiAgICoNCiAgICogQHJldHVybiBtaXhlZA0KICAgKiBAdGhyb3dzIFxDTVNNU0V4dFxFeGNlcHRpb25zXERhdGFFeGNlcHRpb24NCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBTZWxlY3RNaW4oc3RyaW5nICRzZWxlY3QgPSAnJywgc3RyaW5nICRhbGlhcyA9ICcnKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5tYXhNaW5BdmdTdW0oJHNlbGVjdCwgJGFsaWFzLCAnTUlOJyk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gc3RyaW5nICRzZWxlY3QNCiAgICogQHBhcmFtIHN0cmluZyAkYWxpYXMNCiAgICoNCiAgICogQHJldHVybiBhcnJheXxtaXhlZA0KICAgKiBAdGhyb3dzIFxDTVNNU0V4dFxFeGNlcHRpb25zXERhdGFFeGNlcHRpb24NCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBTZWxlY3RBdmcoc3RyaW5nICRzZWxlY3QgPSAnJywgc3RyaW5nICRhbGlhcyA9ICcnKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5tYXhNaW5BdmdTdW0oJHNlbGVjdCwgJGFsaWFzLCAnQVZHJyk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gc3RyaW5nICRzZWxlY3QNCiAgICogQHBhcmFtIHN0cmluZyAkYWxpYXMNCiAgICoNCiAgICogQHJldHVybiBhcnJheXxtaXhlZA0KICAgKiBAdGhyb3dzIFxDTVNNU0V4dFxFeGNlcHRpb25zXERhdGFFeGNlcHRpb24NCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBTZWxlY3RTdW0oc3RyaW5nICRzZWxlY3QgPSAnJywgc3RyaW5nICRhbGlhcyA9ICcnKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5tYXhNaW5BdmdTdW0oJHNlbGVjdCwgJGFsaWFzLCAnU1VNJyk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gc3RyaW5nICRzZWxlY3QNCiAgICogQHBhcmFtIHN0cmluZyAkYWxpYXMNCiAgICoNCiAgICogQHJldHVybiBhcnJheXxtaXhlZA0KICAgKiBAdGhyb3dzIFxDTVNNU0V4dFxFeGNlcHRpb25zXERhdGFFeGNlcHRpb24NCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBTZWxlY3RDb3VudChzdHJpbmcgJHNlbGVjdCA9ICcnLCBzdHJpbmcgJGFsaWFzID0gJycpDQogIHsNCiAgICByZXR1cm4gJHRoaXMtPm1heE1pbkF2Z1N1bSgkc2VsZWN0LCAkYWxpYXMsICdDT1VOVCcpOw0KICB9DQogIA0KICAvKioNCiAgICogUmV0dXJucyB0aGUgcXVlcnkgYWZ0ZXIgY29tcGlsZWQNCiAgICogRG9lc24ndCBleGVjdXRlIGl0DQogICAqIEBwYXJhbSBib29sICRzdHJpcHBlZA0KICAgKg0KICAgKiBAcmV0dXJuIHN0cmluZ3xzdHJpbmdbXXxudWxsDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gR2V0UXVlcnkoJHN0cmlwcGVkID0gRkFMU0UpDQogIHsNCiAgICAkdGhpcy0+X2NvbXBpbGVfcXVlcnkoKTsNCiAgICANCiAgICAkcmV0ID0gJHRoaXMtPl9xdWVyeTsNCiAgICANCiAgICBpZigkc3RyaXBwZWQpDQogICAgew0KICAgICAgJHJldCA9IFxwcmVnX3JlcGxhY2UoJy9ccysvJywgJyAnLCAkcmV0KTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICRyZXQ7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcmV0dXJuICR0aGlzDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gUmVzZXRRdWVyeSgpIDogUXVlcnkNCiAgew0KICAgICR0aGlzLT5fcmVzZXRfcXVlcnkoKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcmV0dXJuICR0aGlzDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gRnVsbFJlc2V0KCkgOiBRdWVyeQ0KICB7DQogICAgJHRoaXMtPl9yZXNldF9hbGwoKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gJG1vZHVsZV9uYW1lDQogICAqDQogICAqIEByZXR1cm4gJHRoaXMNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBTZXRNb2R1bGVOYW1lKCRtb2R1bGVfbmFtZSkgOiBRdWVyeQ0KICB7DQogICAgJHRoaXMtPl9zZXRfbW9kdWxlX25hbWUoJG1vZHVsZV9uYW1lKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gJHRhYmxlX3ByZWZpeA0KICAgKg0KICAgKiBAcmV0dXJuICR0aGlzDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gU2V0VGFibGVQcmVmaXgoJHRhYmxlX3ByZWZpeCkNCiAgew0KICAgICR0aGlzLT5fc2V0X3RhYmxlX3ByZWZpeCgkdGFibGVfcHJlZml4KTsNCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIC8qKg0KICAgKiAiQ291bnQgQWxsIiBxdWVyeQ0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIENvdW50QWxsKCkNCiAgew0KICAgICR0aGlzLT5fcXVlcnkgPSAnU0VMRUNUIENPVU5UKCopIEFTIGMgRlJPTSAnIC4gJHRoaXMtPl9mcm9tOw0KICAgICRyZXN1bHQgPSAkdGhpcy0+R2V0QXJyYXkoMSk7DQogICAgcmV0dXJuICRyZXN1bHRbMF1bJ2MnXTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEByZXR1cm4gc3RyaW5nDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gR2V0RGVidWdEYXRhKCkgOiBzdHJpbmcNCiAgew0KICAgICRkYXRhID0gJHRoaXMtPkdldFF1ZXJ5KCk7DQogICAgJGRhdGEgLj0gc2VsZjo6Tkw7DQogICAgJGRhdGEgLj0gJ2JpbmRpbmdzIGFycmF5KCInIC4gXGltcGxvZGUoJyIsIicsICR0aGlzLT5fdmFsdWVzKSAuICciKSc7DQogICAgcmV0dXJuICRkYXRhOw0KICAgIA0KICB9DQogIA0KICAvKioNCiAgICogQHJldHVybiBpbnQNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBJbnNlcnRJZCgpIDogaW50DQogIHsNCiAgICByZXR1cm4gJHRoaXMtPl9kYi0+SW5zZXJ0X0lEKCk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcmV0dXJuIGludA0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIEluc2VydF9JZCgpIDogaW50DQogIHsNCiAgICByZXR1cm4gJHRoaXMtPkluc2VydElkOw0KICB9DQogIA0KICAvKioNCiAgICogQHJldHVybiBpbnQNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBHZXRFcnJvck51bWJlcigpIDogaW50DQogIHsNCiAgICByZXR1cm4gJHRoaXMtPl9kYi0+RXJyb3JObygpOw0KICB9DQogIA0KICAvKioNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBHZXRFcnJvck1lc3NhZ2UoKSA6IHN0cmluZw0KICB7DQogICAgcmV0dXJuICR0aGlzLT5fZGItPkVycm9yTXNnKCk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBUcnkgdG8gZ2VuZXJhdGUgYW4gYWxpYXMgZm9yIGEgdGFibGUNCiAgICogQHRvZG8gaW1wcm92ZSB0aGUgYWxnb3JpdGhtcw0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICR0YWJsZQ0KICAgKg0KICAgKiBAcmV0dXJuIHN0cmluZw0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIENyZWF0ZUFsaWFzRnJvbVRhYmxlKHN0cmluZyAkdGFibGUgPSAnJykgOiBzdHJpbmcNCiAgew0KICAgIHJldHVybiAkdGhpcy0+X2dlbmVyYXRlX21pbmltYWxfcmF3X2FsaWFzKCR0aGlzLT5fY2xlYW5fdGFibGVfbmFtZSgkdGFibGUpICk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lDQogICAqDQogICAqIEByZXR1cm4gc3RyaW5nIHRoZSBnZW5lcmF0ZWQgYWxpYXMgb3IgZW1wdHkgaWYgbm9uZSBjb3VsZCBiZSBnZW5lcmF0ZWQNCiAgICovDQogIHByaXZhdGUgZnVuY3Rpb24gX2dlbmVyYXRlX21pbmltYWxfcmF3X2FsaWFzKHN0cmluZyAkbmFtZSA9ICcnKSA6IHN0cmluZw0KICB7DQogICAgJHJldCA9ICcnOw0KICAgICMgcmVtb3ZlIGFueSB2b3dlbHMgZXhjZXB0IGlmIHRoZSAxc3QgY2hyIG9mIHRoZSBzdHIgdG8gZ2V0IHNvbWV0aGluZyB0aGF0IG1pZ2h0IHJlc2VtYmxlIGEgbW5lbW9uaWMNCiAgICAjIGFuZCBjb252ZXJ0IGl0IHRvIGFuIGFycmF5Ow0KICAgICR0MSA9ICRuYW1lWzBdOw0KICAgICR0MiA9IFxzdWJzdHIoJG5hbWUsIDEpOw0KICAgICR0bXAgPSBcYXJyYXlfcmV2ZXJzZShzdHJfc3BsaXQoJHQxIC4gXHByZWdfcmVwbGFjZSgnI1thZWlvdV0rI2knLCAnJywgJHQyKSApICk7DQogICAgDQogICAgIyBwcmV2ZW50IGluZmluaXRlIGxvb3BzDQogICAgJGkgPSAwOyAkbGFzdCA9ICcnOw0KICAgIA0KICAgICMgYnVpbGQgYW4gYWxpYXMgZnJvbSAxIHRvIDIwIGNoYXJhY3RlcnMgZnJvbSB0aGUgbW5lbW9uaWMgd2hpbGUgY2hlY2tpbmcgaWYgYWxyZWFkeSBleGlzdHMNCiAgICBkbw0KICAgIHsNCiAgICAgICRsYXN0ID0gJHJldDsNCiAgICAgICRyZXQgLj0gJHRoaXMtPl9sbF9zdGFja19wb3AoJHRtcCk7DQogICAgfQ0KICAgIHdoaWxlKCRsYXN0ICE9PSAkcmV0ICYmIGlzc2V0KFxhcnJheV9mbGlwKCR0aGlzLT5fdGFibGVfYWxpYXNlc19tYXApWyRyZXRdICkgJiYgKyskaSA8PSAyMCk7DQogICAgDQogICAgIyBpZiAkaSA+IDIwIHRoZW4gYSBzdWl0YWJsZSBhbGlhcyBjb3VsZG4ndCBiZSBmb3VuZA0KICAgIGlmKCRpID4gMjApIHsgJHJldCA9ICcnOyB9DQogICAgDQogICAgcmV0dXJuICRyZXQ7DQogIH0NCiAgDQogIC8qKg0KICAgKiBzdWIgcXVlcmllcyBzdHVmZg0KICAgKg0KICAgKiBAcGFyYW0gXENNU01TRXh0XGNvcmVcUXVlcnkgJGZyb20NCiAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICRhbGlhcw0KICAgKg0KICAgKiBAcmV0dXJuIFxDTVNNU0V4dFxjb3JlXFF1ZXJ5DQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gRnJvbVN1YnF1ZXJ5KFF1ZXJ5ICRmcm9tLCBzdHJpbmcgJGFsaWFzKTogc2VsZg0KICB7DQogICAgJHRoaXMtPl9mcm9tID0gJHRoaXMtPl9idWlsZF9zdWJxdWVyeSgkZnJvbSwgdHJ1ZSwgJGFsaWFzKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBTZWxlY3RTdWJxdWVyeShRdWVyeSAkc3VicXVlcnksIHN0cmluZyAkYXMpOiBzZWxmDQogIHsNCiAgICAkdGhpcy0+X2Zyb20gPSAkdGhpcy0+X2J1aWxkX3N1YnF1ZXJ5KCRzdWJxdWVyeSwgdHJ1ZSwgJGFzKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gXENNU01TRXh0XGNvcmVcUXVlcnkgJGZyb20NCiAgICogQHBhcmFtIGJvb2wgICAgICAgICAgICAgICAgICR3cmFwICBXcmFwIHRoZSBzdWJxdWVyeSBpbiBicmFja2V0cw0KICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgJGFsaWFzIFN1YnF1ZXJ5IGFsaWFzDQogICAqDQogICAqIEByZXR1cm4gc3RyaW5nDQogICAqLw0KICBwcml2YXRlIGZ1bmN0aW9uIF9idWlsZF9zdWJxdWVyeShRdWVyeSAkZnJvbSwgYm9vbCAkd3JhcCwgc3RyaW5nICRhbGlhcykgOiBzdHJpbmcNCiAgew0KICAgICRyZXQgPSAkZnJvbS0+R2V0UXVlcnkoKTsNCiAgICANCiAgICBpZigkd3JhcCkNCiAgICB7DQogICAgICAkcmV0ID0gJygnLiAkcmV0IC4gJyknOw0KICAgIH0NCiAgICANCiAgICAkdGhpcy0+X21hcF9hbGlhcygkcmV0LCAkYWxpYXMpOw0KICAgIA0KICAgIHJldHVybiAkcmV0Ow0KICB9DQp9DQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/core/class.QueryBuilder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogIEV4YW1wbGUgdXNhZ2U6DQogKiAkdGhpcy0+UXVlcnlCdWlsZGVyID0gbmV3IFF1ZXJ5QnVpbGRlcigpOw0KICoNCiAqICR0aGlzLT5xdWVyeSA9ICR0aGlzLT5xdWVyeUJ1aWxkZXINCiAqICAgICAgLT50YWJsZSgndXNlcnMnKQ0KICogICAgICAtPnNlbGVjdCgnaWQnLCAndXNlcm5hbWUnLCAnZW1haWwnKQ0KICogICAgICAtPmpvaW4oJ3Bvc3RzJywgJ3VzZXJzLmlkJywgJz0nLCAncG9zdHMudXNlcl9pZCcpDQogKiAgICAgIC0+d2hlcmUoJ3VzZXJzLmlkJywgJz4nLCAxMCkNCiAqICAgICAgLT5vcmRlcl9ieSgndXNlcnMudXNlcm5hbWUnLCAnREVTQycpDQogKiAgICAgIC0+bGltaXQoNSkNCiAqICAgICAgLT5vZmZzZXQoMTApDQogKiAgICAgIC0+cXVlcnlfc3RyaW5nKCk7DQogKg0KICogZWNobyAkdGhpcy0+cXVlcnk7DQogKi8NCg0KbmFtZXNwYWNlIENNU01TRXh0XGNvcmU7DQoNCg0KY2xhc3MgUXVlcnlCdWlsZGVyDQp7DQogIC8qKiBAdmFyIHN0cmluZyAqLw0KICBwcml2YXRlIHN0cmluZyAkX3F1ZXJ5ID0gJyc7DQogIA0KICAvKiogQHZhciBzdHJpbmcgKi8NCiAgcHJpdmF0ZSBzdHJpbmcgJF90YWJsZTsNCiAgDQogIC8qKiBAdmFyIGFycmF5ICovDQogIHByaXZhdGUgYXJyYXkgJF9zZWxlY3QgPSBbJyonXTsNCiAgDQogIC8qKiBAdmFyIGFycmF5ICovDQogIHByaXZhdGUgYXJyYXkgJF9qb2lucyA9IFtdOw0KICANCiAgLyoqIEB2YXIgYXJyYXkgKi8NCiAgcHJpdmF0ZSBhcnJheSAkX3doZXJlID0gW107DQogIA0KICAvKiogQHZhciBhcnJheSAqLw0KICBwcml2YXRlIGFycmF5ICRfb3JkZXJCeSA9IFtdOw0KICANCiAgLyoqIEB2YXIgc3RyaW5nICovDQogIHByaXZhdGUgc3RyaW5nICRfbGltaXQ7DQogIA0KICAvKiogQHZhciBzdHJpbmcgKi8NCiAgcHJpdmF0ZSBzdHJpbmcgJF9vZmZzZXQ7DQogIA0KICAvKiogQHZhciBhcnJheSAqLw0KICBwcml2YXRlICRfZGF0YSA9IFtdOw0KICANCiAgLyoqIEB2YXIgXENNU01TXERhdGFiYXNlXENvbm5lY3Rpb24gKi8NCiAgcHJpdmF0ZSBcQ01TTVNcRGF0YWJhc2VcQ29ubmVjdGlvbiAkX2RiOw0KICANCiAgLyoqIEB2YXIgc3RyaW5nICovDQogIHByaXZhdGUgJF9tb2RlID0gJ3NlbGVjdCc7DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQ0KICB7DQogICAgJHRoaXMtPl9kYiA9IFxjbXNtcygpLT5HZXREYigpOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtICR0YWJsZQ0KICAgKg0KICAgKiBAcmV0dXJuICR0aGlzDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gdGFibGUoJHRhYmxlKSA6IFF1ZXJ5QnVpbGRlcg0KICB7DQogICAgJHRoaXMtPl90YWJsZSA9ICR0YWJsZTsNCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gJGNvbHVtbnMNCiAgICoNCiAgICogQHJldHVybiAkdGhpcw0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIHNlbGVjdCgkY29sdW1ucykgOiBRdWVyeUJ1aWxkZXINCiAgew0KICAgICR0aGlzLT5fbW9kZSA9ICdzZWxlY3QnOw0KICAgICR0aGlzLT5fc2VsZWN0ID0gXGlzX2FycmF5KCRjb2x1bW5zKSA/ICRjb2x1bW5zIDogXGZ1bmNfZ2V0X2FyZ3MoKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIC8qKg0KICAgKiBKb2lucyBhIF90YWJsZSB0byB0aGUgcXVlcnkuDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlIFRoZSBuYW1lIG9mIHRoZSBfdGFibGUgdG8gam9pbi4NCiAgICogQHBhcmFtIHN0cmluZyAkZm9yZWlnbkNvbHVtbiBUaGUgbmFtZSBvZiB0aGUgZm9yZWlnbiBjb2x1bW4uDQogICAqIEBwYXJhbSBzdHJpbmcgJG9wZXJhdG9yIFRoZSBvcGVyYXRvciB0byB1c2UgZm9yIHRoZSBqb2luLg0KICAgKiBAcGFyYW0gc3RyaW5nICRsb2NhbENvbHVtbiBUaGUgbmFtZSBvZiB0aGUgbG9jYWwgY29sdW1uLg0KICAgKiBAcmV0dXJuICR0aGlzIFRoZSBjdXJyZW50IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gam9pbigkdGFibGUsICRmb3JlaWduQ29sdW1uLCAkb3BlcmF0b3IsICRsb2NhbENvbHVtbikNCiAgew0KICAgICR0aGlzLT5fam9pbnNbXSA9IFxjb21wYWN0KCd0YWJsZScsICdmb3JlaWduQ29sdW1uJywgJ29wZXJhdG9yJywgJ2xvY2FsQ29sdW1uJyk7DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICAvKioNCiAgICogQWRkcyBhIFdIRVJFIGNsYXVzZSB0byB0aGUgcXVlcnkuDQogICAqDQogICAqIEBwYXJhbSBtaXhlZCAkY29sdW1uIFRoZSBjb2x1bW4gdG8gZmlsdGVyIG9uLg0KICAgKiBAcGFyYW0gc3RyaW5nICRvcGVyYXRvciBUaGUgY29tcGFyaXNvbiBvcGVyYXRvci4NCiAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZSBhZ2FpbnN0IG9yID8gZm9yIGEgc2FmZSBxdWVyeS4NCiAgICogQHJldHVybiBRdWVyeUJ1aWxkZXIgUmV0dXJucyB0aGUgUXVlcnlCdWlsZGVyIG9iamVjdCBmb3IgbWV0aG9kIGNoYWluaW5nLg0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIHdoZXJlKCRjb2x1bW4sICRvcGVyYXRvciwgJHZhbHVlKSA6IFF1ZXJ5QnVpbGRlcg0KICB7DQogICAgJHRoaXMtPl93aGVyZVtdID0gXGNvbXBhY3QoJ2NvbHVtbicsICdvcGVyYXRvcicsICd2YWx1ZScpOw0KICAgIA0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KICANCiAgLyoqDQogICAqIEFkZHMgYW4gb3JkZXIgYnkgY2xhdXNlIHRvIHRoZSBxdWVyeS4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkY29sdW1uIFRoZSBjb2x1bW4gdG8gb3JkZXIgYnkuDQogICAqIEBwYXJhbSBzdHJpbmcgJGRpcmVjdGlvbiBUaGUgZGlyZWN0aW9uIG9mIHRoZSBvcmRlci4gRGVmYXVsdHMgdG8gJ0FTQycuDQogICAqIEByZXR1cm4gUXVlcnlCdWlsZGVyIFRoZSBRdWVyeUJ1aWxkZXIgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy4NCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBvcmRlcl9ieSgkY29sdW1uLCAkZGlyZWN0aW9uID0gJ0FTQycpIDogUXVlcnlCdWlsZGVyDQogIHsNCiAgICAkdGhpcy0+X29yZGVyQnlbXSA9IFxjb21wYWN0KCdjb2x1bW4nLCAnZGlyZWN0aW9uJyk7DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICAvKioNCiAgICogU2V0cyB0aGUgX2xpbWl0IGZvciB0aGUgcXVlcnkuDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJGxpbWl0IFRoZSBtYXhpbXVtIG51bWJlciBvZiByZWNvcmRzIHRvIHJldHJpZXZlIG9yID8gZm9yIGEgc2FmZSBxdWVyeS4NCiAgICogQHJldHVybiBRdWVyeUJ1aWxkZXIgVGhlIFF1ZXJ5QnVpbGRlciBpbnN0YW5jZSB3aXRoIHRoZSBfbGltaXQgc2V0Lg0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIGxpbWl0KCRsaW1pdCkgOiBRdWVyeUJ1aWxkZXINCiAgew0KICAgICR0aGlzLT5fbGltaXQgPSAkbGltaXQ7DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICAvKioNCiAgICogU2V0cyB0aGUgb2Zmc2V0IGZvciB0aGUgcXVlcnkuDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJG9mZnNldCBUaGUgb2Zmc2V0IHZhbHVlIHRvIHNldCBvciA/IGZvciBhIHNhZmUgcXVlcnkuDQogICAqIEByZXR1cm4gUXVlcnlCdWlsZGVyIFRoZSBRdWVyeUJ1aWxkZXIgaW5zdGFuY2UuDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0KCRvZmZzZXQpIDogUXVlcnlCdWlsZGVyDQogIHsNCiAgICAkdGhpcy0+X29mZnNldCA9ICRvZmZzZXQ7DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICAvKioNCiAgICogUmV0cmlldmVzIGEgZGF0YXNldCBvYmplY3QgZnJvbSB0aGUgZGF0YWJhc2UuDQogICAqDQogICAqIEByZXR1cm4gbWl4ZWQNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBnZXQoKQ0KICB7DQogICAgLy8gQnVpbGQgYW5kIGV4ZWN1dGUgdGhlIFNFTEVDVCBxdWVyeQ0KICAgICR0aGlzLT5fYnVpbGRfcXVlcnkoKTsNCiAgICANCiAgICAvLyBFeGVjdXRlIHRoZSBxdWVyeSBhbmQgcmV0dXJuIHJlc3VsdHMNCiAgICByZXR1cm4gJHRoaXMtPl9leGVjdXRlX3F1ZXJ5KCk7DQogIH0NCiAgDQogIC8qKg0KICAgKiAgUmV0cmlldmVzIGFuIGFycmF5IGZyb20gdGhlIGRhdGFiYXNlLg0KICAgKg0KICAgKiBAcmV0dXJuIG1peGVkDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2FycmF5KCkNCiAgew0KICAgIC8vIEJ1aWxkIGFuZCBleGVjdXRlIHRoZSBTRUxFQ1QgcXVlcnkNCiAgICAkdGhpcy0+X2J1aWxkX3F1ZXJ5KCk7DQogICAgDQogICAgLy8gRXhlY3V0ZSB0aGUgcXVlcnkgYW5kIHJldHVybiByZXN1bHRzDQogICAgcmV0dXJuICR0aGlzLT5fZ2V0X2FsbCgpOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gcXVlcnlfc3RyaW5nKCkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+X190b1N0cmluZygpOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKQ0KICB7DQogICAgLy8gQnVpbGQgYW5kIGV4ZWN1dGUgdGhlIFNFTEVDVCBxdWVyeQ0KICAgICR0aGlzLT5fYnVpbGRfcXVlcnkoKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXMtPl9leGVjdXRlX3F1ZXJ5KCktPlJlY29yZENvdW50KCk7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBpbnNlcnQoJGRhdGEpDQogIHsNCiAgICAkdGhpcy0+X2RhdGEgPSAkZGF0YTsNCiAgICAvLyBCdWlsZCBhbmQgZXhlY3V0ZSB0aGUgSU5TRVJUIHF1ZXJ5DQogICAgJHRoaXMtPl9tb2RlICA9ICdpbnNlcnQnOw0KICAgICR0aGlzLT5fcXVlcnkgPSAkdGhpcy0+X2J1aWxkX3F1ZXJ5KCk7DQogICAgDQogICAgLy8gRXhlY3V0ZSB0aGUgcXVlcnkgYW5kIHJldHVybiByZXN1bHRzDQogICAgcmV0dXJuICR0aGlzLT5fZXhlY3V0ZV9xdWVyeSgkdGhpcy0+X3F1ZXJ5KTsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIHVwZGF0ZSgkZGF0YSkNCiAgew0KICAgICR0aGlzLT5fZGF0YSA9ICRkYXRhOw0KICAgIC8vIEJ1aWxkIGFuZCBleGVjdXRlIHRoZSBVUERBVEUgcXVlcnkNCiAgICAkdGhpcy0+X21vZGUgID0gJ3VwZGF0ZSc7DQogICAgJHRoaXMtPl9xdWVyeSA9ICR0aGlzLT5fYnVpbGRfcXVlcnkoKTsNCiAgICANCiAgICAvLyBFeGVjdXRlIHRoZSBxdWVyeSBhbmQgcmV0dXJuIHJlc3VsdHMNCiAgICByZXR1cm4gJHRoaXMtPl9leGVjdXRlX3F1ZXJ5KCR0aGlzLT5fcXVlcnkpOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gZGVsZXRlKCkNCiAgew0KICAgICR0aGlzLT5fbW9kZSA9ICdkZWxldGUnOw0KICAgIC8vIEJ1aWxkIGFuZCBleGVjdXRlIHRoZSBERUxFVEUgcXVlcnkNCiAgICAkdGhpcy0+X3F1ZXJ5ID0gJHRoaXMtPl9idWlsZF9xdWVyeSgpOw0KICAgIA0KICAgIC8vIEV4ZWN1dGUgdGhlIHF1ZXJ5IGFuZCByZXR1cm4gcmVzdWx0cw0KICAgIHJldHVybiAkdGhpcy0+X2V4ZWN1dGVfcXVlcnkoJHRoaXMtPl9xdWVyeSk7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkNCiAgew0KICAgICR0aGlzLT5fYnVpbGRfcXVlcnkoKTsNCiAgICByZXR1cm4gJHRoaXMtPl9xdWVyeTsNCiAgfQ0KICANCiAgLy8gQWRkIG1vcmUgbWV0aG9kcyBmb3IgYWR2YW5jZWQgZmVhdHVyZXMgYXMgbmVlZGVkDQogIA0KICAvLyBQcml2YXRlIG1ldGhvZHMNCiAgDQogIHByaXZhdGUgZnVuY3Rpb24gX2J1aWxkX3F1ZXJ5KCkNCiAgew0KICAgIHN3aXRjaCgkdGhpcy0+X21vZGUpDQogICAgew0KICAgICAgY2FzZSAnc2VsZWN0JzoNCiAgICAgICAgcmV0dXJuICR0aGlzLT5fYnVpbGRfc2VsZWN0X3F1ZXJ5KCk7DQogICAgICBjYXNlICdpbnNlcnQnOg0KICAgICAgICByZXR1cm4gJHRoaXMtPl9idWlsZF9pbnNlcnRfcXVlcnkoKTsNCiAgICAgIGNhc2UgJ3VwZGF0ZSc6DQogICAgICAgIHJldHVybiAkdGhpcy0+X2J1aWxkX3VwZGF0ZV9xdWVyeSgpOw0KICAgICAgY2FzZSAnZGVsZXRlJzoNCiAgICAgICAgcmV0dXJuICR0aGlzLT5fYnVpbGRfZGVsZXRlX3F1ZXJ5KCk7DQogICAgfQ0KICB9DQogIA0KICBwcml2YXRlIGZ1bmN0aW9uIF9idWlsZF9zZWxlY3RfcXVlcnkoKQ0KICB7DQogICAgJHRoaXMtPl9xdWVyeSA9ICcnOw0KICAgIA0KICAgIC8vIEJ1aWxkIHRoZSBTRUxFQ1QgcGFydCBvZiB0aGUgcXVlcnkNCiAgICAkdGhpcy0+X3F1ZXJ5IC49ICdTRUxFQ1QgJyAuIFxpbXBsb2RlKCcsICcsICR0aGlzLT5fc2VsZWN0KSAuICIgRlJPTSB7JHRoaXMtPl90YWJsZX0iOw0KICAgIA0KICAgIC8vIEFkZCBKT0lOcw0KICAgIGZvcmVhY2goJHRoaXMtPl9qb2lucyBhcyAkam9pbikNCiAgICB7DQogICAgICAkdGhpcy0+X3F1ZXJ5IC49ICIgSk9JTiB7JGpvaW5bJ190YWJsZSddfSBPTiB7JGpvaW5bJ2ZvcmVpZ25Db2x1bW4nXX0geyRqb2luWydvcGVyYXRvciddfSB7JGpvaW5bJ2xvY2FsQ29sdW1uJ119IjsNCiAgICB9DQogICAgDQogICAgLy8gQWRkIFdIRVJFIGNvbmRpdGlvbnMNCiAgICBpZighZW1wdHkoJHRoaXMtPl93aGVyZSkpDQogICAgew0KICAgICAgJHRoaXMtPl9xdWVyeSAuPSAnIFdIRVJFICcgLiAkdGhpcy0+X2J1aWxkX3doZXJlKCk7DQogICAgfQ0KICAgIA0KICAgIC8vIEFkZCBPUkRFUiBCWQ0KICAgIGlmKCFlbXB0eSgkdGhpcy0+X29yZGVyQnkpKQ0KICAgIHsNCiAgICAgICR0aGlzLT5fcXVlcnkgLj0gJyBPUkRFUiBCWSAnIC4gJHRoaXMtPl9idWlsZF9vcmRlcl9ieSgpOw0KICAgIH0NCiAgICANCiAgICAvLyBBZGQgTElNSVQgYW5kIE9GRlNFVA0KICAgIGlmKCR0aGlzLT5fbGltaXQpDQogICAgew0KICAgICAgJHRoaXMtPl9xdWVyeSAuPSAiIExJTUlUIHskdGhpcy0+X2xpbWl0fSI7DQogICAgICANCiAgICAgIGlmKCR0aGlzLT5fb2Zmc2V0KQ0KICAgICAgew0KICAgICAgICAkdGhpcy0+X3F1ZXJ5IC49ICIgT0ZGU0VUIHskdGhpcy0+X29mZnNldH0iOw0KICAgICAgfQ0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHRoaXMtPl9xdWVyeTsNCiAgfQ0KICANCiAgLyoqDQogICAqDQogICAqIEBwYXJhbSAkZGF0YQ0KICAgKg0KICAgKiBAcmV0dXJuIHN0cmluZw0KICAgKi8NCiAgcHJpdmF0ZSBmdW5jdGlvbiBfYnVpbGRfaW5zZXJ0X3F1ZXJ5KCkNCiAgew0KICAgIC8vIEJ1aWxkIHRoZSBJTlNFUlQgcGFydCBvZiB0aGUgcXVlcnkNCiAgICAvLw0KICAgICR0aGlzLT5fcXVlcnkgPSAiSU5TRVJUIElOVE8geyR0aGlzLT5fdGFibGV9ICgiIC4gXGltcGxvZGUoJywgJywgXGFycmF5X2tleXMoJHRoaXMtPl9kYXRhICkpIC4gJykgJzsNCiAgICANCiAgICAkdGhpcy0+X3F1ZXJ5IC49ICdWQUxVRVMgKCcgLiBcaW1wbG9kZSgNCiAgICAgICAgJywgJywgXGFycmF5X21hcChmdW5jdGlvbigkdmFsdWUpIHsNCiAgICAgICAgICAgICAgcmV0dXJuICInJHZhbHVlJyI7DQogICAgICAgICAgICB9LCAkdGhpcy0+X2RhdGEgKQ0KICAgICAgKSAuICcpJzsNCiAgICANCiAgICByZXR1cm4gJHRoaXMtPl9xdWVyeTsNCiAgfQ0KICANCiAgcHJpdmF0ZSBmdW5jdGlvbiBfYnVpbGRfdXBkYXRlX3F1ZXJ5KCkNCiAgew0KICAgIC8vIEJ1aWxkIHRoZSBVUERBVEUgcGFydCBvZiB0aGUgcXVlcnkNCiAgICAkdGhpcy0+X3F1ZXJ5ID0gIlVQREFURSB7JHRoaXMtPl90YWJsZX0gU0VUICI7DQogICAgDQogICAgJHRoaXMtPl9xdWVyeSAuPSBcaW1wbG9kZSgNCiAgICAgICcsICcsIFxhcnJheV9tYXAoZnVuY3Rpb24oJGtleSwgJHZhbHVlKSB7DQogICAgICByZXR1cm4gIiRrZXkgPSAnJHZhbHVlJyI7DQogICAgfSwgXGFycmF5X2tleXMoJHRoaXMtPl9kYXRhICksICR0aGlzLT5fZGF0YSApDQogICAgKTsNCiAgICANCiAgICAvLyBBZGQgV0hFUkUgY29uZGl0aW9ucw0KICAgIGlmKCFlbXB0eSgkdGhpcy0+X3doZXJlKSkNCiAgICB7DQogICAgICAkdGhpcy0+X3F1ZXJ5IC49ICcgV0hFUkUgJyAuICR0aGlzLT5fYnVpbGRfd2hlcmUoKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICR0aGlzLT5fcXVlcnk7DQogIH0NCiAgDQogIHByaXZhdGUgZnVuY3Rpb24gX2J1aWxkX2RlbGV0ZV9xdWVyeSgpDQogIHsNCiAgICAvLyBCdWlsZCB0aGUgREVMRVRFIHBhcnQgb2YgdGhlIHF1ZXJ5DQogICAgJHRoaXMtPl9xdWVyeSA9ICJERUxFVEUgRlJPTSB7JHRoaXMtPl90YWJsZX0iOw0KICAgIA0KICAgIC8vIEFkZCBXSEVSRSBjb25kaXRpb25zDQogICAgaWYoIWVtcHR5KCR0aGlzLT5fd2hlcmUpKQ0KICAgIHsNCiAgICAgICR0aGlzLT5fcXVlcnkgLj0gJyBXSEVSRSAnIC4gJHRoaXMtPl9idWlsZF93aGVyZSgpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHRoaXMtPl9xdWVyeTsNCiAgfQ0KICANCiAgcHJpdmF0ZSBmdW5jdGlvbiBfYnVpbGRfd2hlcmUoKQ0KICB7DQogICAgcmV0dXJuIFxpbXBsb2RlKA0KICAgICAgJyBBTkQgJywgXGFycmF5X21hcChmdW5jdGlvbigkY29uZGl0aW9uKSB7DQogICAgICByZXR1cm4gInskY29uZGl0aW9uWydjb2x1bW4nXX0geyRjb25kaXRpb25bJ29wZXJhdG9yJ119ICd7JGNvbmRpdGlvblsndmFsdWUnXX0nIjsNCiAgICB9LCAkdGhpcy0+X3doZXJlKQ0KICAgICk7DQogIH0NCiAgDQogIHByaXZhdGUgZnVuY3Rpb24gX2J1aWxkX29yZGVyX2J5KCkgOiBzdHJpbmcNCiAgew0KICAgIHJldHVybiBcaW1wbG9kZSgNCiAgICAgICcsICcsIFxhcnJheV9tYXAoZnVuY3Rpb24oJG9yZGVyKSB7DQogICAgICByZXR1cm4gInskb3JkZXJbJ2NvbHVtbiddfSB7JG9yZGVyWydkaXJlY3Rpb24nXX0iOw0KICAgIH0sICR0aGlzLT5fb3JkZXJCeSkNCiAgICApOw0KICB9DQogIA0KICBwcml2YXRlIGZ1bmN0aW9uIF9leGVjdXRlX3F1ZXJ5KCkNCiAgew0KICAgICRycyA9ICR0aGlzLT5fZGItPmV4ZWN1dGUoJHRoaXMtPl9xdWVyeSk7DQogICAgaWYoIDAgPT0gJHRoaXMtPl9kYi0+RXJyb3JObygpICkgeyByZXR1cm4gJHJzOyB9DQogICAgDQogICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCR0aGlzLT5fZGItPkVycm9yTXNnKCksICR0aGlzLT5fZGItPkVycm9yTm8oKSk7DQogIH0NCiAgDQogIHByaXZhdGUgZnVuY3Rpb24gX2dldF9hbGwoKSA6IGFycmF5DQogIHsNCiAgICAkcnMgPSAkdGhpcy0+X2RiLT5HZXRBbGwoJHRoaXMtPl9xdWVyeSk7DQogICAgaWYoIDAgPT0gJHRoaXMtPl9kYi0+RXJyb3JObygpICkgeyByZXR1cm4gJHJzOyB9DQogICAgDQogICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCR0aGlzLT5fZGItPkVycm9yTXNnKCksICR0aGlzLT5fZGItPkVycm9yTm8oKSk7DQogIH0NCn0NCg0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/lib/core/class.queue.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcY29yZTsNCg0KDQpjbGFzcyBxdWV1ZQ0Kew0KICBwcml2YXRlICRxdWV1ZTsNCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpDQogIHsNCiAgICAkdGhpcy0+cXVldWUgPSBbXTsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIGVucXVldWUoJGl0ZW0pDQogIHsNCiAgICAkdGhpcy0+cXVldWVbXSA9ICRpdGVtOw0KICAgIA0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIGRlcXVldWUoKQ0KICB7DQogICAgaWYoJHRoaXMtPmlzRW1wdHkoKSkNCiAgICB7DQogICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ3F1ZXVlIGlzIGVtcHR5Jyk7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiBcYXJyYXlfc2hpZnQoJHRoaXMtPnF1ZXVlKTsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIHBlZWsoKQ0KICB7DQogICAgaWYoJHRoaXMtPmlzRW1wdHkoKSkNCiAgICB7DQogICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ3F1ZXVlIGlzIGVtcHR5Jyk7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiBccmVzZXQoJHRoaXMtPnF1ZXVlKTsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIGlzRW1wdHkoKSA6IGJvb2wNCiAgew0KICAgIHJldHVybiBlbXB0eSgkdGhpcy0+cXVldWUpOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gc2l6ZSgpIDogaW50DQogIHsNCiAgICByZXR1cm4gXGNvdW50KCR0aGlzLT5xdWV1ZSk7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiByZXNldCgpIDogcXVldWUNCiAgew0KICAgICR0aGlzLT5xdWV1ZSA9IFtdOw0KICAgIA0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KfQ0KDQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/core/class.registry.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcY29yZTsNCg0KLyoqDQogKg0KICovDQpjbGFzcyByZWdpc3RyeQ0Kew0KICBwcml2YXRlICRfZGF0YSA9IFtdOw0KICANCiAgcHVibGljIGZ1bmN0aW9uIHNldCgka2V5LCAkdmFsdWUpIDogcmVnaXN0cnkNCiAgew0KICAgICR0aGlzLT5fZGF0YVska2V5XSA9ICR2YWx1ZTsNCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBnZXQoJGtleSwgJGRlZmF1bHQgPSBudWxsKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5fZGF0YVska2V5XSA/PyAkZGVmYXVsdDsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIGhhcygka2V5KSA6IGJvb2wNCiAgew0KICAgIHJldHVybiBpc3NldCgkdGhpcy0+X2RhdGFbJGtleV0pOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlKCRrZXkpIDogcmVnaXN0cnkNCiAgew0KICAgIHVuc2V0KCR0aGlzLT5fZGF0YVska2V5XSk7DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gZ2V0QWxsKCkgOiBhcnJheQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5fZGF0YTsNCiAgfQ0KfQ0KDQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/core/class.stack.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcY29yZTsNCg0KDQpjbGFzcyBzdGFjaw0Kew0KICAvKioNCiAgICogQHZhciBhcnJheQ0KICAgKi8NCiAgcHJpdmF0ZSBhcnJheSAkc3RhY2s7DQogIA0KICAvKioNCiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MuDQogICAqDQogICAqIEByZXR1cm4gdm9pZA0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkNCiAgew0KICAgICR0aGlzLT5jbGVhcigpOw0KICB9DQogIA0KICAvKioNCiAgICogUHVzaGVzIGFuIGl0ZW0gb250byB0aGUgc3RhY2suDQogICAqDQogICAqIEBwYXJhbSBtaXhlZCAkaXRlbSB0aGUgaXRlbSB0byBiZSBwdXNoZWQgb250byB0aGUgc3RhY2sNCiAgICoNCiAgICogQHJldHVybiBcQ01TTVNFeHRcY29yZVxzdGFjaw0KICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIGlmIHRoZSBzdGFjayBpcyBlbXB0eQ0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIHB1c2goJGl0ZW0pIDogc3RhY2sNCiAgew0KICAgICR0aGlzLT5zdGFja1tdID0gJGl0ZW07DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICAvKioNCiAgICogUG9wcyBhbmQgcmV0dXJucyB0aGUgdG9wIGVsZW1lbnQgb2YgdGhlIHN0YWNrLg0KICAgKg0KICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIElmIHRoZSBzdGFjayBpcyBlbXB0eS4NCiAgICogQHJldHVybiBtaXhlZCBUaGUgcG9wcGVkIGVsZW1lbnQuDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gcG9wKCkNCiAgew0KICAgIGlmICgkdGhpcy0+aXNFbXB0eSgpKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignU3RhY2sgaXMgZW1wdHknKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuIFxhcnJheV9wb3AoJHRoaXMtPnN0YWNrKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIFJldHJpZXZlcyB0aGUgdG9wIGVsZW1lbnQgb2YgdGhlIHN0YWNrIHdpdGhvdXQgcmVtb3ZpbmcgaXQuDQogICAqDQogICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgdGhlIHN0YWNrIGlzIGVtcHR5DQogICAqIEByZXR1cm4gbWl4ZWQgdGhlIHRvcCBlbGVtZW50IG9mIHRoZSBzdGFjaw0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIHBlZWsoKQ0KICB7DQogICAgaWYgKCR0aGlzLT5pc0VtcHR5KCkpDQogICAgew0KICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCJTdGFjayBpcyBlbXB0eSIpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gXGVuZCgkdGhpcy0+c3RhY2spOw0KICB9DQogIA0KICAvKioNCiAgICogQ2hlY2sgaWYgdGhlIHN0YWNrIGlzIGVtcHR5Lg0KICAgKg0KICAgKiBAcmV0dXJuIGJvb2wNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBpc0VtcHR5KCkgOiBib29sDQogIHsNCiAgICByZXR1cm4gZW1wdHkoJHRoaXMtPnN0YWNrKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIFJldHJpZXZlIHRoZSBzaXplIG9mIHRoZSBzdGFjay4NCiAgICoNCiAgICogQHJldHVybiBpbnQgVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc3RhY2suDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gc2l6ZSgpIDogaW50DQogIHsNCiAgICByZXR1cm4gXGNvdW50KCR0aGlzLT5zdGFjayk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBDbGVhcnMgdGhlIHN0YWNrLg0KICAgKg0KICAgKiBAcmV0dXJuIFxDTVNNU0V4dFxjb3JlXHN0YWNrDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gY2xlYXIoKSA6IHN0YWNrDQogIHsNCiAgICAkdGhpcy0+c3RhY2sgPSBbXTsNCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCn0NCg0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/core/class.static_api_base.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcY29yZTsNCg0KLyoqDQogKiBBIGJhc2UgY2xhc3MgZm9yIHN0YXRpYyBBUEkgY2xhc3Nlcy4NCiAqDQogKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgZm91bmRhdGlvbiBmb3IgY3JlYXRpbmcgc3RhdGljIEFQSSBjbGFzc2VzLg0KICogSXQgcHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIGluaXRpYWxpemluZyB0aGUgY2xhc3MsDQogKiBleHRlbmRpbmcgdGhlIG9wdGlvbnMsIGFuZCBoYW5kbGluZyBtZXRob2QgY2FsbHMuDQogKg0KICogQHBhY2thZ2UgQ01TTVNFeHRcY29yZQ0KICovDQpjbGFzcyBzdGF0aWNfYXBpX2Jhc2UNCnsNCiAgcHJvdGVjdGVkIHN0YXRpYyAkX2luaXRpYWxpemVkID0gRkFMU0U7DQogIHByaXZhdGUgc3RhdGljICRfb3B0aW9ucyA9IFtdOw0KICANCiAgLyoqDQogICAqIEluaXRpYWxpemVzIHRoZSBjbGFzcy4NCiAgICovDQogIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gaW5pdCgpDQogIHsNCiAgICBpZiggIXNlbGY6OiRfaW5pdGlhbGl6ZWQgKQ0KICAgIHsNCiAgICAgIHNlbGY6OiRfaW5pdGlhbGl6ZWQgPSBUUlVFOw0KICAgIH0NCiAgfQ0KICANCiAgLyoqDQogICAqIENoZWNrcyBpZiBhbiBhcnJheSBpcyBhc3NvY2lhdGl2ZSBvciBub3QuDQogICAqDQogICAqIEBwYXJhbSBhcnJheSAkYXJyIFRoZSBhcnJheSB0byBiZSBjaGVja2VkLg0KICAgKiBAcmV0dXJuIGJvb2wgUmV0dXJucyBUUlVFIGlmIHRoZSBhcnJheSBpcyBhc3NvY2lhdGl2ZSwgRkFMU0Ugb3RoZXJ3aXNlLg0KICAgKi8NCiAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBfaXNBc3NvYyhhcnJheSAkYXJyKSA6IGJvb2wNCiAgew0KICAgIGlmKFtdID09PSAkYXJyKSB7IHJldHVybiBGQUxTRTsgfQ0KICAgIA0KICAgIHJldHVybiBcYXJyYXlfa2V5cygkYXJyKSAhPT0gXHJhbmdlKDAsIFxjb3VudCgkYXJyKSAtIDEpOw0KICB9DQogIA0KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9fY2FsbFN0YXRpYygkbmFtZSwgJGFyZ3VtZW50cykNCiAgew0KICAgIGlmKCAhXHN0YXJ0c3dpdGgoJG5hbWUsICAnXycpICYmIFxtZXRob2RfZXhpc3RzKF9fQ0xBU1NfXywgJG5hbWUpICkNCiAgICB7DQogICAgICBzZWxmOjppbml0KCk7DQogICAgICANCiAgICAgIGlmKCBcY291bnQoJGFyZ3VtZW50cykgJiYgc2VsZjo6X2lzQXNzb2MoJGFyZ3VtZW50cykgKQ0KICAgICAgew0KICAgICAgICBzZWxmOjpleHRlbmQoJGFyZ3VtZW50cyk7DQogICAgICAgIA0KICAgICAgICByZXR1cm4gXGNhbGxfdXNlcl9mdW5jX2FycmF5KFtfX0NMQVNTX18sICRuYW1lXSwgc2VsZjo6JF9vcHRpb25zKTsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgcmV0dXJuIFxjYWxsX3VzZXJfZnVuY19hcnJheShbX19DTEFTU19fLCAkbmFtZV0sICRhcmd1bWVudHMpOw0KICAgIH0NCiAgICANCiAgICB0aHJvdyBuZXcgXEJhZE1ldGhvZENhbGxFeGNlcHRpb24oJG5hbWUpOw0KICB9DQogIA0KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGV4dGVuZChhcnJheSAgJG9wdGlvbnMpIDogdm9pZA0KICB7DQogICAgc2VsZjo6aW5pdCgpOw0KICAgIA0KICAgIGlmKCBzZWxmOjpfaXNBc3NvYygkb3B0aW9ucykgKQ0KICAgIHsNCiAgICAgIHNlbGY6OiRfb3B0aW9ucyA9IFxhcnJheV9tZXJnZShzZWxmOjokX29wdGlvbnMsICRvcHRpb25zKTsNCiAgICB9DQogIH0NCiAgDQogIA0KICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBfY2FsbGJhY2soJG5hbWUsICRhcmd1bWVudHMpDQogIHsNCiAgICBpZiggXGlzX2NhbGxhYmxlKCRuYW1lKSApDQogICAgew0KICAgICAgcmV0dXJuIFxjYWxsX3VzZXJfZnVuY19hcnJheSgkbmFtZSwgJGFyZ3VtZW50cyk7DQogICAgfQ0KICAgIA0KICAgIHRocm93IG5ldyBcQmFkRnVuY3Rpb25DYWxsRXhjZXB0aW9uKCRuYW1lKTsNCiAgfQ0KICANCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/core/class.static_registry.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcY29yZTsNCg0KDQpjbGFzcyBzdGF0aWNfcmVnaXN0cnkNCnsNCiAgcHJpdmF0ZSBzdGF0aWMgYXJyYXkgJF9kYXRhID0gW107DQogIA0KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldCgka2V5LCAkdmFsdWUpIDogdm9pZA0KICB7DQogICAgc2VsZjo6JF9kYXRhWyRrZXldID0gJHZhbHVlOw0KICB9DQogIA0KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldCgka2V5LCAkZGVmYXVsdCA9IE5VTEwpDQogIHsNCiAgICByZXR1cm4gc2VsZjo6JF9kYXRhWyRrZXldID8/ICRkZWZhdWx0Ow0KICB9DQogIA0KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhhcygka2V5KSA6IGJvb2wNCiAgew0KICAgIHJldHVybiBpc3NldChzZWxmOjokX2RhdGFbJGtleV0pOw0KICB9DQogIA0KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlbW92ZSgka2V5KSA6IHZvaWQNCiAgew0KICAgIGlmKHNlbGY6Omhhcygka2V5KSkNCiAgICB7DQogICAgICB1bnNldChzZWxmOjokX2RhdGFbJGtleV0pOw0KICAgIH0NCiAgfQ0KICANCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjbGVhcigpIDogdm9pZA0KICB7DQogICAgc2VsZjo6JF9kYXRhID0gW107DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBfX3NsZWVwKCkNCiAgew0KICAgIHJldHVyblsnX2RhdGEnXTsNCiAgfQ0KfQ0KDQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/core/class.VarDumper.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogVmFyRHVtcGVyIGNsYXNzLg0KICogYSBtb2RpZmllZCB2ZXJzaW9uIG9mIFZhckR1bXBlcg0KICogdG8gZml0IGludG8gQ01TTVMgZnJhbWV3b3JrDQogKg0KICogQmFzZWQgb24NCiAqIFRWYXJEdW1wZXIgY2xhc3MgZmlsZQ0KICoNCiAqIEBhdXRob3IgUWlhbmcgWHVlIDxxaWFuZy54dWVAZ21haWwuY29tPg0KICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3ByYWRvc29mdC9wcmFkbw0KICogQGxpY2Vuc2UgaHR0cHM6Ly9naXRodWIuY29tL3ByYWRvc29mdC9wcmFkby9ibG9iL21hc3Rlci9MSUNFTlNFDQogKi8NCm5hbWVzcGFjZSBDTVNNU0V4dFxjb3JlOw0KDQogIC8qKg0KICAgKiBWYXJEdW1wZXIgY2xhc3MuDQogICAqDQogICAqIFZhckR1bXBlciBpcyBpbnRlbmRlZCB0byByZXBsYWNlIHRoZSBidWdneSBQSFAgZnVuY3Rpb24gdmFyX2R1bXAgYW5kIHByaW50X3IuDQogICAqIEl0IGNhbiBjb3JyZWN0bHkgaWRlbnRpZnkgdGhlIHJlY3Vyc2l2ZWx5IHJlZmVyZW5jZWQgb2JqZWN0cyBpbiBhIGNvbXBsZXgNCiAgICogb2JqZWN0IHN0cnVjdHVyZS4gSXQgYWxzbyBoYXMgYSByZWN1cnNpdmUgZGVwdGggY29udHJvbCB0byBhdm9pZCBpbmRlZmluaXRlDQogICAqIHJlY3Vyc2l2ZSBkaXNwbGF5IG9mIHNvbWUgcGVjdWxpYXIgdmFyaWFibGVzLg0KICAgKg0KICAgKiBWYXJEdW1wZXIgY2FuIGJlIHVzZWQgYXMgZm9sbG93cywNCiAgICogPGNvZGU+DQogICAqICAgZWNobyBWYXJEdW1wZXI6OmR1bXAoJHZhcik7DQogICAqIDwvY29kZT4NCiAgICoNCiAgICogQGF1dGhvciBRaWFuZyBYdWUgPHFpYW5nLnh1ZUBnbWFpbC5jb20+DQogICAqIEBzaW5jZSAzLjANCiAgICovDQpjbGFzcyBWYXJEdW1wZXINCnsNCiAgcHJpdmF0ZSBzdGF0aWMgJF9vYmplY3RzOw0KICBwcml2YXRlIHN0YXRpYyAkX291dHB1dDsNCiAgcHJpdmF0ZSBzdGF0aWMgJF9kZXB0aDsNCiAgDQogIC8qKg0KICAgKiBDb252ZXJ0cyBhIHZhcmlhYmxlIGludG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uDQogICAqIFRoaXMgbWV0aG9kIGFjaGlldmVzIHRoZSBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkgYXMgdmFyX2R1bXAgYW5kIHByaW50X3INCiAgICogYnV0IGlzIG1vcmUgcm9idXN0IHdoZW4gaGFuZGxpbmcgY29tcGxleCBvYmplY3RzIHN1Y2ggYXMgUFJBRE8gY29udHJvbHMuDQogICAqIEBwYXJhbSBtaXhlZCAkdmFyIHZhcmlhYmxlIHRvIGJlIGR1bXBlZA0KICAgKiBAcGFyYW0gaW50ICRkZXB0aCBtYXhpbXVtIGRlcHRoIHRoYXQgdGhlIGR1bXBlciBzaG91bGQgZ28gaW50byB0aGUgdmFyaWFibGUuIERlZmF1bHRzIHRvIDEwLg0KICAgKiBAcGFyYW0gYm9vbCAkaGlnaGxpZ2h0IHdoZXRoZXIgdG8gaGlnaGxpZ2h0IHRoZSByZXN1bHRpbmcgc3RyaW5nDQogICAqIEByZXR1cm4gc3RyaW5nIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhcmlhYmxlDQogICAqLw0KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGR1bXAoJHZhciwgJGRlcHRoID0gMTAsICRoaWdobGlnaHQgPSBmYWxzZSkNCiAgew0KICAgIHNlbGY6OiRfb3V0cHV0ID0gJyc7DQogICAgc2VsZjo6JF9vYmplY3RzID0gW107DQogICAgc2VsZjo6JF9kZXB0aCA9ICRkZXB0aDsNCiAgICBzZWxmOjpkdW1wSW50ZXJuYWwoJHZhciwgMCk7DQogICAgDQogICAgaWYoJGhpZ2hsaWdodCkNCiAgICB7DQogICAgICAkcmVzdWx0ID0gXGhpZ2hsaWdodF9zdHJpbmcoIjw/cGhwXG4iIC4gc2VsZjo6JF9vdXRwdXQsIFRSVUUpOw0KICAgICAgDQogICAgICByZXR1cm4gXHByZWdfcmVwbGFjZSgnLyZsdDtcXD9waHA8YnIgXFwvPi8nLCAnJywgJHJlc3VsdCwgMSk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICByZXR1cm4gc2VsZjo6JF9vdXRwdXQ7DQogICAgfQ0KICB9DQogIA0KICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBkdW1wSW50ZXJuYWwoJHZhciwgJGxldmVsKQ0KICB7DQogICAgc3dpdGNoIChcZ2V0dHlwZSgkdmFyKSkNCiAgICB7DQogICAgICBjYXNlICdib29sZWFuJzoNCiAgICAgICAgc2VsZjo6JF9vdXRwdXQgLj0gJHZhciA/ICd0cnVlJyA6ICdmYWxzZSc7DQogICAgICBicmVhazsNCiAgICAgIGNhc2UgJ2RvdWJsZSc6DQogICAgICBjYXNlICdpbnRlZ2VyJzoNCiAgICAgICAgc2VsZjo6JF9vdXRwdXQgLj0gIiR2YXIiOw0KICAgICAgYnJlYWs7DQogICAgICBjYXNlICdzdHJpbmcnOg0KICAgICAgICBzZWxmOjokX291dHB1dCAuPSAiJyR2YXInIjsNCiAgICAgIGJyZWFrOw0KICAgICAgY2FzZSAncmVzb3VyY2UnOg0KICAgICAgICBzZWxmOjokX291dHB1dCAuPSAne3Jlc291cmNlfSc7DQogICAgICBicmVhazsNCiAgICAgIGNhc2UgJ05VTEwnOg0KICAgICAgICBzZWxmOjokX291dHB1dCAuPSAnbnVsbCc7DQogICAgICBicmVhazsNCiAgICAgIGNhc2UgJ3Vua25vd24gdHlwZSc6DQogICAgICAgIHNlbGY6OiRfb3V0cHV0IC49ICd7dW5rbm93bn0nOw0KICAgICAgYnJlYWs7DQogICAgICBjYXNlICdhcnJheSc6DQogICAgICAgIGlmIChzZWxmOjokX2RlcHRoIDw9ICRsZXZlbCkNCiAgICAgICAgew0KICAgICAgICAgIHNlbGY6OiRfb3V0cHV0IC49ICdhcnJheSguLi4pJzsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlaWYgKGVtcHR5KCR2YXIpKQ0KICAgICAgICB7DQogICAgICAgICAgc2VsZjo6JF9vdXRwdXQgLj0gJ2FycmF5KCknOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICRrZXlzID0gXGFycmF5X2tleXMoJHZhcik7DQogICAgICAgICAgJHNwYWNlcyA9IFxzdHJfcmVwZWF0KCcgJywgJGxldmVsICogNCk7DQogICAgICAgICAgc2VsZjo6JF9vdXRwdXQgLj0gImFycmF5XG4iIC4gJHNwYWNlcyAuICcoJzsNCiAgICAgICAgICBmb3JlYWNoICgka2V5cyBhcyAka2V5KQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIHNlbGY6OiRfb3V0cHV0IC49ICJcbiIgLiAkc3BhY2VzIC4gIiAgICBbJGtleV0gPT4gIjsNCiAgICAgICAgICAgIHNlbGY6OiRfb3V0cHV0IC49IHNlbGY6OmR1bXBJbnRlcm5hbCgkdmFyWyRrZXldLCAkbGV2ZWwgKyAxKTsNCiAgICAgICAgICB9DQogICAgICAgICAgc2VsZjo6JF9vdXRwdXQgLj0gIlxuIiAuICRzcGFjZXMgLiAnKSc7DQogICAgICAgIH0NCiAgICAgIGJyZWFrOw0KICAgICAgY2FzZSAnb2JqZWN0JzoNCiAgICAgICAgaWYgKGZhbHNlICE9PSAoJGlkID0gXGFycmF5X3NlYXJjaCgkdmFyLCBzZWxmOjokX29iamVjdHMsIHRydWUpKSkNCiAgICAgICAgew0KICAgICAgICAgIHNlbGY6OiRfb3V0cHV0IC49IFxnZXRfY2xhc3MoJHZhcikgLiAnIycgLiAoJGlkICsgMSkgLiAnKC4uLiknOw0KICAgICAgICB9DQogICAgICAgIGVsc2VpZiAoc2VsZjo6JF9kZXB0aCA8PSAkbGV2ZWwpDQogICAgICAgIHsNCiAgICAgICAgICBzZWxmOjokX291dHB1dCAuPSBcZ2V0X2NsYXNzKCR2YXIpIC4gJyguLi4pJzsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAkaWQgPSBcYXJyYXlfcHVzaChzZWxmOjokX29iamVjdHMsICR2YXIpOw0KICAgICAgICAgICRjbGFzc05hbWUgPSBcZ2V0X2NsYXNzKCR2YXIpOw0KICAgICAgICAgICRtZW1iZXJzID0gKGFycmF5KSAkdmFyOw0KICAgICAgICAgICRrZXlzID0gXGFycmF5X2tleXMoJG1lbWJlcnMpOw0KICAgICAgICAgICRzcGFjZXMgPSBcc3RyX3JlcGVhdCgnICcsICRsZXZlbCAqIDQpOw0KICAgICAgICAgIHNlbGY6OiRfb3V0cHV0IC49ICIkY2xhc3NOYW1lIyRpZFxuIiAuICRzcGFjZXMgLiAnKCc7DQogICAgICAgICAgZm9yZWFjaCAoJGtleXMgYXMgJGtleSkNCiAgICAgICAgICB7DQogICAgICAgICAgICAka2V5RGlzcGxheSA9IHN0cnRyKFx0cmltKCRrZXkpLCBbIlwwIiA9PiAnOiddKTsNCiAgICAgICAgICAgIHNlbGY6OiRfb3V0cHV0IC49ICJcbiIgLiAkc3BhY2VzIC4gIiAgICBbJGtleURpc3BsYXldID0+ICI7DQogICAgICAgICAgICBzZWxmOjokX291dHB1dCAuPSBzZWxmOjpkdW1wSW50ZXJuYWwoJG1lbWJlcnNbJGtleV0sICRsZXZlbCArIDEpOw0KICAgICAgICAgIH0NCiAgICAgICAgICBzZWxmOjokX291dHB1dCAuPSAiXG4iIC4gJHNwYWNlcyAuICcpJzsNCiAgICAgICAgfQ0KICAgICAgYnJlYWs7DQogICAgfQ0KICB9DQp9DQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/core/class.xtapi.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcY29yZTsNCg0KDQpjbGFzcyB4dGFwaQ0Kew0KICBwcm90ZWN0ZWQgYXJyYXkgJF90YXJnZXQgPSBbXTsNCiAgdXNlIFRTaW5nbGV0b247DQogIA0KICANCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkNCiAgew0KICAgICR0aGlzLT5fdGFyZ2V0ID0gXGZ1bmNfZ2V0X2FyZ3MoKVswXVswXVswXTsNCiAgfQ0KICANCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJbnN0YW5jZSguLi4kYXJncykNCiAgew0KICAgIGlmIChudWxsID09PSBzdGF0aWM6OiRfaW5zdGFuY2UpeyBzdGF0aWM6OiRfaW5zdGFuY2UgPSBuZXcgc3RhdGljKCRhcmdzKTt9DQogICAgDQogICAgcmV0dXJuIHN0YXRpYzo6JF9pbnN0YW5jZTsNCiAgfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/core/class.xt_registry.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcY29yZTsNCg0KDQpjbGFzcyB4dF9yZWdpc3RyeSBleHRlbmRzIHJlZ2lzdHJ5DQp7DQogIHVzZSBcQ01TTVNFeHRcY29yZVxUU2luZ2xldG9uOw0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/core/trait.TMagicCall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcY29yZTsNCg0KDQp0cmFpdCBUTWFnaWNDYWxsDQp7DQogIHB1YmxpYyBmdW5jdGlvbiBfX2NhbGwoJG5hbWUsICRhcmd1bWVudHMpDQogIHsNCiAgICBpZiggIVxzdGFydHN3aXRoKCRuYW1lLCAgJ18nKSAmJiBcbWV0aG9kX2V4aXN0cyhcZ2V0X2NhbGxlZF9jbGFzcygpLCAkbmFtZSkgKQ0KICAgIHsNCiAgICAgIHJldHVybiBcY2FsbF91c2VyX2Z1bmNfYXJyYXkoW1xnZXRfY2FsbGVkX2NsYXNzKCksICRuYW1lXSwgJGFyZ3VtZW50cyk7DQogICAgfQ0KICAgIA0KICAgIHRocm93IG5ldyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbihcZ2V0X2NhbGxlZF9jbGFzcygpIC4gJy0+JyAuICRuYW1lKTsNCiAgfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/core/trait.TMagicCallStatic.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcY29yZTsNCg0KDQp0cmFpdCBUTWFnaWNDYWxsU3RhdGljDQp7DQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX19jYWxsU3RhdGljKCRuYW1lLCAkYXJndW1lbnRzKQ0KICB7DQogICAgaWYoICFcc3RhcnRzd2l0aCgkbmFtZSwgICdfJykgJiYgXG1ldGhvZF9leGlzdHMoX19DTEFTU19fLCAkbmFtZSkgKQ0KICAgIHsNCiAgICAgIHJldHVybiBcY2FsbF91c2VyX2Z1bmNfYXJyYXkoW19fQ0xBU1NfXywgJG5hbWVdLCAkYXJndW1lbnRzKTsNCiAgICB9DQogICAgDQogICAgdGhyb3cgbmV3IFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uKF9fQ0xBU1NfXyAuICc6OicgLiAkbmFtZSk7DQogIH0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/core/trait.TOverloadable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICoNCiAqLw0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcY29yZTsNCg0KLyoqDQogKiBUcmFpdCBUT3ZlcmxvYWRhYmxlDQogKg0KICogQHBhY2thZ2UgQ01TTVNFeHRcY29yZQ0KICovDQp0cmFpdCBUT3ZlcmxvYWRhYmxlDQp7DQogIA0KICAvKioNCiAgICogQHBhcmFtIHN0cmluZyAkbmFtZQ0KICAgKg0KICAgKiBAcmV0dXJuIG1peGVkDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJG5hbWUpDQogIHsNCiAgICByZXR1cm4gJHRoaXMtPl9kYXRhWyRuYW1lXSA/PyBOVUxMOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtIHN0cmluZyAkbmFtZQ0KICAgKiBAcGFyYW0gbWl4ZWQgICR2YWx1ZQ0KICAgKg0KICAgKiBAcmV0dXJuIG1peGVkDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gX19zZXQoJG5hbWUsICR2YWx1ZSkNCiAgew0KICAgICR0aGlzLT5fZGF0YVskbmFtZV0gPSAkdmFsdWU7DQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtIHN0cmluZyAkbmFtZQ0KICAgKg0KICAgKiBAcmV0dXJuIGJvb2wNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBfX2lzc2V0KCRuYW1lKQ0KICB7DQogICAgcmV0dXJuIGlzc2V0KCR0aGlzLT5fZGF0YVskbmFtZV0pOw0KICB9DQogIA0KICANCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/core/trait.TSingleton.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcY29yZTsNCg0KDQp0cmFpdCBUU2luZ2xldG9uDQp7DQogIHByb3RlY3RlZCBzdGF0aWMgJF9pbnN0YW5jZTsNCiAgDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHsgfQ0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX19jbG9uZSgpIHsgfQ0KICBwdWJsaWMgZnVuY3Rpb24gX193YWtldXAoKSB7IH0NCiAgDQogIA0KICAvKioNCiAgICogcHVibGljIG1ldGhvZHMNCiAgICovDQogIA0KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEluc3RhbmNlKCkNCiAgew0KICAgIGlmIChudWxsID09PSBzdGF0aWM6OiRfaW5zdGFuY2UpeyBzdGF0aWM6OiRfaW5zdGFuY2UgPSBuZXcgc3RhdGljKCk7fQ0KICAgIA0KICAgIHJldHVybiBzdGF0aWM6OiRfaW5zdGFuY2U7DQogIH0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/db</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/db/Engine</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/db/Engine/class.compatibility.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0XGRiXEVuZ2luZVxjb21wYXRpYmlsaXR5IChjKSAyMDE1IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgQSBjb2xsZWN0aW9uIG9mIGNvbXBhdGliaWxpdHkgdG9vbHMgZm9yIHRoZSBkYXRhYmFzZSBjb25uZWN0aXZpdHkgbGF5ZXIuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFZpc2l0IG91ciBob21lcGFnZSBhdDogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCi8qKgogKiBUaGlzIGZpbGUgY29udGFpbnMgc29tZSBkYXRhYmFzZSBjb25uZWN0aXZpdHkgdG9vbHMuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XGRiXEVuZ2luZQp7CiAgCiAgLyoqCiAgICogQSBjbGFzcyBmb3IgcHJvdmlkaW5nIHNvbWUgY29tcGF0aWJpbGl0eSBmdW5jdGlvbmFsaXR5IHdpdGggb2xkZXIgbW9kdWxlIGNvZGUKICAgKgogICAqIEB0b2RvOiBtb3ZlIHRoaXMgY2xhc3MgdG8gYSBkaWZmZXJlbnQgZnVuY3Rpb24gYW5kIHJlbmFtZS4KICAgKi8KICBmaW5hbCBjbGFzcyBjb21wYXRpYmlsaXR5CiAgewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQogICAgCiAgICAvKioKICAgICAqIEluaXRpYWxpemUgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb24gYWNjb3JkaW5nIHRvIGNvbmZpZyBzZXR0aW5ncy4KICAgICAqCiAgICAgKiBAcGFyYW0gXGNtc19jb25maWcgJGNvbmZpZyBUaGUgY29uZmlnIG9iamVjdAogICAgICoKICAgICAqIEByZXR1cm4gXENNU01TRXh0XGRiXEVuZ2luZVxDb25uZWN0aW9uCiAgICAgKiBAdGhyb3dzIFxDTVNNU0V4dFxkYlxFbmdpbmVcQ29ubmVjdGlvblNwZWNFeGNlcHRpb24KICAgICAqIEBpbnRlcm5hbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGluaXQoXGNtc19jb25maWcgJGNvbmZpZykgOiBDb25uZWN0aW9uCiAgICB7CiAgICAgICRzcGVjICAgICAgICAgICA9IG5ldyBDb25uZWN0aW9uU3BlYzsKICAgICAgJHNwZWMtPnR5cGUgICAgID0gJGNvbmZpZ1snZGJtcyddOwogICAgICAkc3BlYy0+aG9zdCAgICAgPSAkY29uZmlnWydkYl9ob3N0bmFtZSddOwogICAgICAkc3BlYy0+dXNlcm5hbWUgPSAkY29uZmlnWydkYl91c2VybmFtZSddOwogICAgICAkc3BlYy0+cGFzc3dvcmQgPSAkY29uZmlnWydkYl9wYXNzd29yZCddOwogICAgICAkc3BlYy0+ZGJuYW1lICAgPSAkY29uZmlnWydkYl9uYW1lJ107CiAgICAgICRzcGVjLT5wb3J0ICAgICA9ICRjb25maWdbJ2RiX3BvcnQnXTsKICAgICAgJHNwZWMtPmRlYnVnICAgID0gXENNU19ERUJVRzsKICAgICAgCiAgICAgICR0bXAgPSBbXTsKICAgICAgaWYoJGNvbmZpZ1snc2V0X25hbWVzJ10pIHsgJHRtcFtdID0gIk5BTUVTICd1dGY4JyI7IH0KICAgICAgCiAgICAgIGlmKCRjb25maWdbJ3NldF9kYl90aW1lem9uZSddKQogICAgICB7CiAgICAgICAgJGR0ICAgICA9IG5ldyBcRGF0ZVRpbWUoKTsKICAgICAgICAkZHR6ICAgID0gbmV3IFxEYXRlVGltZVpvbmUoJGNvbmZpZ1sndGltZXpvbmUnXSk7CiAgICAgICAgJG9mZnNldCA9IFx0aW1lem9uZV9vZmZzZXRfZ2V0KCRkdHosICRkdCk7CiAgICAgICAgJHN5bWJvbCA9ICgkb2Zmc2V0IDwgMCkgPyAnLScgOiAnKyc7CiAgICAgICAgJGhycyAgICA9IFxhYnMoKGludCkoJG9mZnNldCAvIDM2MDApKTsKICAgICAgICAkbWlucyAgID0gXGFicygoaW50KSgkb2Zmc2V0ICUgMzYwMCkpOwogICAgICAgICR0bXBbXSAgPSBcc3ByaW50ZigidGltZV96b25lID0gJyVzJWQ6JTAyZCciLCAkc3ltYm9sLCAkaHJzLCAkbWlucyk7CiAgICAgIH0KICAgICAgaWYoXGNvdW50KCR0bXApKQogICAgICB7CiAgICAgICAgJHNwZWMtPmF1dG9fZXhlYyA9ICdTRVQgJyAuIFxpbXBsb2RlKCcsJywgJHRtcCk7CiAgICAgIH0KICAgICAgCiAgICAgICRvYmogPSBDb25uZWN0aW9uOjpJbml0aWFsaXplKCRzcGVjKTsKICAgICAgJG9iai0+U2V0RXJyb3JIYW5kbGVyKCdcXENNU01TRXh0XFxkYlxcRW5naW5lXFxjb21wYXRpYmlsaXR5Ojpvbl9lcnJvcicpOwogICAgICAKICAgICAgaWYoJHNwZWMtPmRlYnVnKQogICAgICB7CiAgICAgICAgJG9iai0+U2V0RGVidWdDYWxsYmFjaygnZGVidWdfYnVmZmVyJyk7CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiAkb2JqOwogICAgfQogICAgCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9uX2Vycm9yKENvbm5lY3Rpb24gJGNvbm4sICRlcnJ0eXBlLCAkZXJyb3JfbnVtYmVyLCAkZXJyb3JfbXNnKSA6IHZvaWQKICAgIHsKICAgICAgXGRlYnVnX3RvX2xvZygiRGF0YWJhc2UgRXJyb3I6ICRlcnJ0eXBlKCRlcnJvcl9udW1iZXIpIC0gJGVycm9yX21zZyIpOwogICAgICBcZGVidWdfYnRfdG9fbG9nKCk7CiAgICAgIGlmKCFcZGVmaW5lZCgnQ01TX0RFQlVHJykgfHwgXENNU19ERUJVRyA9PSAwKSB7IHJldHVybjsgfQogICAgICAKICAgICAgXENtc0FwcDo6Z2V0X2luc3RhbmNlKCktPmFkZF9lcnJvcihcZGVidWdfZGlzcGxheSgkZXJyb3JfbXNnLCAnJywgRkFMU0UsIFRSVUUpKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBBIHN0YXRpYyBuby1vcCBmdW5jdGlvbiAgdGhhdCBhbGxvd3MgdGhlIGF1dG9sb2FkZXIgdG8gbG9hZCB0aGlzIGZpbGUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub29wKCkgOiB2b2lkIHsgfSAvLyBkbyBub3RoaW5nCiAgICAKICB9IC8vIGVuZCBvZiBjbGFzcwp9IC8vIGVuZCBvZiBuYW1lc3BhY2UKCm5hbWVzcGFjZQp7CiAgCiAgLy8gcm9vdCBuYW1lc3BhY2Ugc3R1ZmYKICB1c2UgQ01TTVNFeHRcZGJcRW5naW5lXENvbm5lY3Rpb247CiAgdXNlIENNU01TRXh0XGRiXEVuZ2luZVxEYXRhRGljdGlvbmFyeTsKICAKICAvKioKICAgKiBBIGNvbnN0YW50IHRvIGFzc2lzdCB3aXRoIGRhdGUgYW5kIHRpbWUgZmxhZ3MgaW4gdGhlIGRhdGEgZGljdGlvbmFyeS4KICAgKiBAY29uc3QgQ01TX0FET0RCX0RUCiAgICovCiAgY29uc3QgQ01TX0FET0RCX0RUID0gJ0RUJzsgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCiAgCiAgLyoqCiAgICogQSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IGRhdGEgZGljdGlvbmFyeSBvYmplY3QKICAgKgogICAqIEBwYXJhbSBcQ01TTVNFeHRcZGJcRW5naW5lXENvbm5lY3Rpb24gJGNvbm4gVGhlIGV4aXN0aW5nIGRhdGFiYXNlIGNvbm5lY3Rpb24uCiAgICoKICAgKiBAcmV0dXJuIFxDTVNNU0V4dFxkYlxFbmdpbmVcRGF0YURpY3Rpb25hcnkKICAgKiBAZGVwcmVjYXRlZAogICAqLwogIGZ1bmN0aW9uIE5ld0RhdGFEaWN0aW9uYXJ5KENvbm5lY3Rpb24gJGNvbm4pIDogRGF0YURpY3Rpb25hcnkKICB7CiAgICAvLyBjYWxsZWQgYnkgbW9kdWxlIGluc3RhbGxhdGlvbiByb3V0aW5lcy4KICAgIHJldHVybiAkY29ubi0+TmV3RGF0YURpY3Rpb25hcnkoKTsKICB9CiAgCiAgLyoqCiAgICogQSBmdW5jdGlvbiBjbyBjcmVhdGUgYSBuZXcgYWRvZGIgZGF0YWJhc2UgY29ubmVjdGlvbi4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJGRibXMKICAgKiBAcGFyYW0gc3RyaW5nICRmbGFncwogICAqCiAgICogQHJldHVybiBcQ01TTVNFeHRcZGJcRW5naW5lXENvbm5lY3Rpb24KICAgKiBAdGhyb3dzIFxFeGNlcHRpb24KICAgKiBAZGVwcmVjYXRlZAogICAqLwogIGZ1bmN0aW9uIEFET05ld0Nvbm5lY3Rpb24oJGRibXMsICRmbGFncykgOiBDb25uZWN0aW9uCiAgewogICAgLy8gbm93IHRoYXQgb3VyIGNvbm5lY3Rpb24gb2JqZWN0IGlzIHN0YXRlbGVzcy4uLiB0aGlzIGlzIGp1c3QgYSB3cmFwcGVyCiAgICAvLyBmb3Igb3VyIGdsb2JhbCBkYiBpbnN0YW5jZS4uLi4gYnV0IHNob3VsZCBub3QgYmUgY2FsbGVkLgogICAgcmV0dXJuIFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpLT5HZXREYigpOwogIH0KICAKICAvKioKICAgKiBBIGZ1bmN0aW9uIGZvcm1lcmx5IHVzZWQgdG8gbG9hZCB0aGUgYWRvZGIgbGlicmFyeS4KICAgKiBUaGlzIG1ldGhvZCBjdXJyZW50bHkgaGFzIG5vIGZ1bmN0aW9uYWxpdHkuCiAgICoKICAgKiBAZGVwcmVjYXRlZAogICAqLwogIGZ1bmN0aW9uIGxvYWRfYWRvZGIoKQogIHsKICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkgaGF2ZSBiZWVuIGNhbGxlZCBieSB0aGUgY29yZQogICAgLy8gYnV0IG5vdyBkb2VzIG5vdGhpbmcsIGp1c3QgaW4gY2FzZSBpdCBpcyBjYWxsZWQuCiAgfQogIAogIC8qKgogICAqIEFuIG9sZCBtZXRob2QgZm9ybWVybHkgdXNlZCB0byBlbnN1cmUgdGhhdCB3ZSB3ZXJlIHJlLWNvbm5lY3RlZCB0byB0aGUgcHJvcGVyIGRhdGFiYXNlLgogICAqIFRoaXMgbWV0aG9kIGN1cnJlbnRseSBoYXMgbm8gZnVuY3Rpb25hbGl0eS4KICAgKgogICAqIEBkZXByZWNhdGVkCiAgICovCiAgZnVuY3Rpb24gYWRvZGJfY29ubmVjdCgpCiAgewogICAgLy8gdGhpcyBtYXkgYmUgY2FsbGVkIGJ5IFVEVCdzIGV0Yy4gdGhhdCBhcmUgdGFsa2luZyB0byBvdGhlciBkYXRhYmFzZXMKICAgIC8vIG9yIHVzaW5nIG1hbnVhbCBteXNxbCBtZXRob2RzLgogIH0KICAKICAvKioKICAgKiBBbiBvbGQgZnVuY3Rpb24gZm9yIGhhbmRsaW5nIGEgZGF0YWJhc2UgZXJyb3IuCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICRkYnR5cGUKICAgKiBAcGFyYW0gc3RyaW5nICRmdW5jdGlvbl9wZXJmb3JtZWQKICAgKiBAcGFyYW0gaW50ICAgICRlcnJvcl9udW1iZXIKICAgKiBAcGFyYW0gc3RyaW5nICRlcnJvcl9tZXNzYWdlCiAgICogQHBhcmFtIHN0cmluZyAkaG9zdAogICAqIEBwYXJhbSBzdHJpbmcgJGRhdGFiYXNlCiAgICogQHBhcmFtIG1peGVkICAkY29ubmVjdGlvbl9vYmoKICAgKgogICAqIEBkZXByZWNhdGVkCiAgICovCiAgZnVuY3Rpb24gYWRvZGJfZXJyb3IoCiAgICAkZGJ0eXBlLCAkZnVuY3Rpb25fcGVyZm9ybWVkLCAkZXJyb3JfbnVtYmVyLCAkZXJyb3JfbWVzc2FnZSwKICAgICRob3N0LCAkZGF0YWJhc2UsICRjb25uZWN0aW9uX29iagogICkKICB7CiAgICAvLyBkb2VzIG5vdGhpbmcuLi4uIHJlbW92ZSBtZSBsYXRlci4KICB9CiAgCn0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/db/Engine/class.Connection.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFxDTVNNU0V4dFxkYlxFbmdpbmVcQ29ubmVjdGlvbiAoYykgMjAxNSBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBIGNsYXNzIHRvIGRlZmluZSBpbnRlcmFjdGlvbiB3aXRoIGEgZGF0YWJhc2UuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFZpc2l0IG91ciBob21lcGFnZSBhdDogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCi8qKgogKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgYWJzdHJhY3QgZGF0YWJhc2UgY29ubmVjdGlvbiBjbGFzcy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICovCgpuYW1lc3BhY2UgQ01TTVNFeHRcZGJcRW5naW5lCnsKICAKICAvKioKICAgKiBBIGNsYXNzIGRlZmluaW5nIGEgZGF0YWJhc2UgY29ubmVjdGlvbiwgYW5kIG1lY2hhbmlzbXMgZm9yIHdvcmtpbmcgd2l0aCBhIGRhdGFiYXNlLgogICAqCiAgICogVGhpcyBsaWJyYXJ5IGlzIGxhcmdlbHkgY29tcGF0aWJsZSB3aXRoIGFkb2RiX2xpdGUgd2l0aCB0aGUgcGVhcixleHRlbmRlZCx0cmFuc2FjdGlvbiBwbHVnaW5zIHdpdGggYSBmZXcKICAgKiBub3RhYmxlIGRpZmZlcmVuY2VzOgogICAqCiAgICogRGlmZmVyZW5jZXM6CiAgICogPHVsPgogICAqICA8bGk+R2VuSUQgd2lsbCBub3QgYXV0b21hdGljYWxseSBjcmVhdGUgYSBzZXF1ZW5jZSB0YWJsZS4KICAgKiAgICA8cD5XZSBlbmNvdXJhZ2UgeW91IHRvIG5vdCB1c2Ugc2VxdWVuY2UgdGFibGVzIGFuZCB1c2UgYXV0by1pbmNyZW1lbnQgZmllbGRzIGluc3RlYWQuPC9wPgogICAqICA8L2xpPgogICAqIDwvdWw+CiAgICoKICAgKiBPcmlnaW5hbCBDb3B5cmlnaHQgKGMpIDIwMTUsIFJvYmVydCBDYW1wYmVsbCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICAgKgogICAqIEZvcmtlZCBieTogRmVybmFuZG8gTW9yZ2FkbyA8am9tb3JnQGNtc21hZGVzaW1wbGUub3JnPgogICAqCiAgICogQHBhY2thZ2UgICBDTVNNU0V4dAogICAqIEBhdXRob3IgICAgRmVybmFuZG8gTW9yZ2FkbwogICAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDI0IEZlcm5hbmRvIE1vcmdhZG8uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgICogQHNpbmNlICAgICAxLjQuNgogICAqIEBwcm9wZXJ0eS1yZWFkIGZsb2F0ICRxdWVyeV90aW1lX3RvdGFsIFRoZSB0b3RhbCBxdWVyeSB0aW1lIHNvIGZhciBpbiB0aGlzIHJlcXVlc3QgKGluIHNlY29uZHMpCiAgICogQHByb3BlcnR5LXJlYWQgaW50ICAgJHF1ZXJ5X2NvdW50ICAgICAgVGhlIHRvdGFsIG51bWJlciBvZiBxdWVyaWVzIGV4ZWN1dGVkIHNvIGZhci4KICAgKi8KICBhYnN0cmFjdCBjbGFzcyBDb25uZWN0aW9uCiAgewogICAgLyoqCiAgICAgKiBUaGlzIGNvbnN0YW50IGRlZmluZXMgYW4gZXJyb3Igd2l0aCBjb25uZWN0aW5nIHRvIHRoZSBkYXRhYmFzZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEVSUk9SX0NPTk5FQ1QgPSAnQ09OTkVDVCc7CiAgICAKICAgIC8qKgogICAgICogVGhpcyBjb25zdGFudCBkZWZpbmVzIGFuIGVycm9yIHdpdGggYW4gZXhlY3V0ZSBzdGF0ZW1lbnQuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFUlJPUl9FWEVDVVRFID0gJ0VYRUNVVEUnOwogICAgCiAgICAvKioKICAgICAqIFRoaXMgY29uc3RhbnQgZGVmaW5lcyBhbiBlcnJvciB3aXRoIGEgdHJhbnNhY3Rpb24uCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFUlJPUl9UUkFOU0FDVElPTiA9ICdUUkFOU0FDVElPTic7CiAgICAKICAgIC8qKgogICAgICogVGhpcyBjb25zdGFudCBkZWZpbmVzIGFuIGVycm9yIGluIGEgZGF0YWRpY3Rpb25hcnkgY29tbWFuZC4KICAgICAqLwogICAgCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2RlYnVnOwogICAgCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2RlYnVnX2NiOwogICAgCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBpbnQgJF9xdWVyeV9jb3VudCA9IDA7CiAgICAKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlIGFycmF5ICRfcXVlcmllcyA9IFtdOwogICAgCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2Vycm9yaGFuZGxlcjsKICAgIAogICAgLyoqCiAgICAgKiBUaGUgYWN0dWFsIGNvbm5lY3Rpb25zcGVjIG9iamVjdC4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqLwogICAgcHJvdGVjdGVkIENvbm5lY3Rpb25TcGVjICRfY29ubmVjdGlvblNwZWM7CiAgICAKICAgIC8qKgogICAgICogVGhlIGxhc3QgU1FMIGNvbW1hbmQgZXhlY3V0ZWQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzcWwKICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqLwogICAgcHVibGljICRzcWw7CiAgICAKICAgIC8qKgogICAgICogQWNjdW11bGF0ZWQgc3FsIHF1ZXJ5IHRpbWUuCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICRxdWVyeV90aW1lX3RvdGFsCiAgICAgKgogICAgICogQGludGVybmFsCiAgICAgKi8KICAgIHByb3RlY3RlZCAkcXVlcnlfdGltZV90b3RhbDsKICAgIAogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgQ29ubmVjdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gXENNU01TRXh0XGRiXEVuZ2luZVxDb25uZWN0aW9uU3BlYyAkc3BlYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQ29ubmVjdGlvblNwZWMgJHNwZWMpCiAgICB7CiAgICAgICR0aGlzLT5fY29ubmVjdGlvblNwZWMgPSAkc3BlYzsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgka2V5KQogICAgewogICAgICBpZigncXVlcnlfdGltZV90b3RhbCcgPT0gJGtleSkgeyByZXR1cm4gJHRoaXMtPnF1ZXJ5X3RpbWVfdG90YWw7IH0KICAgICAgCiAgICAgIGlmKCdxdWVyeV9jb3VudCcgPT0gJGtleSkgeyByZXR1cm4gJHRoaXMtPl9xdWVyeV9jb3VudDsgfQogICAgfQogICAgCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9faXNzZXQoJGtleSkKICAgIHsKICAgICAgaWYoJ3F1ZXJ5X3RpbWVfdG90YWwnID09ICRrZXkpIHsgcmV0dXJuIFRSVUU7IH0KICAgICAgCiAgICAgIGlmKCdxdWVyeV9jb3VudCcgPT0gJGtleSkgeyByZXR1cm4gVFJVRTsgfQogICAgICAKICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQogICAgCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBkYXRhIGRpY3Rpb25hcnkgb2JqZWN0LgogICAgICogRGF0YSBEaWN0aW9uYXJ5IG9iamVjdHMgYXJlIHVzZWQgZm9yIG1hbmlwdWxhdGluZyB0YWJsZXMsIGkuZTogY3JlYXRpbmcsIGFsdGVyaW5nIGFuZCBlZGl0aW5nIHRoZW0uCiAgICAgKgogICAgICogQHJldHVybiBcQ01TTVNFeHRcZGJcRW5naW5lXERhdGFEaWN0aW9uYXJ5CiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBOZXdEYXRhRGljdGlvbmFyeSgpIDogRGF0YURpY3Rpb25hcnk7CiAgICAKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBkYXRhYmFzZSB0eXBlLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBEYlR5cGUoKSA6IHN0cmluZzsKICAgIAogICAgLyoqCiAgICAgKiBPcGVuIHRoZSBkYXRhYmFzZSBjb25uZWN0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBTdWNjZXNzIG9yIGZhaWx1cmUKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIENvbm5lY3QoKSA6IGJvb2w7CiAgICAKICAgIC8qKgogICAgICogQ2xvc2UgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb24uCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBEaXNjb25uZWN0KCk7CiAgICAKICAgIC8qKgogICAgICogVGVzdCBpZiB0aGUgY29ubmVjdGlvbiBvYmplY3QgaXMgY29ubmVjdGVkIHRvIHRoZSBkYXRhYmFzZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIElzQ29ubmVjdGVkKCkgOiBib29sOwogICAgCiAgICAvKioKICAgICAqIEFuIGFsaWFzIGZvciBEaXNjb25uZWN0LgogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gQ2xvc2UoKSB7IHJldHVybiAkdGhpcy0+RGlzY29ubmVjdCgpOyB9CiAgICAKICAgIC8vLy8gdXRpbGl0aWVzCiAgICAKICAgIC8qKgogICAgICogUXVvdGUgYSBzdHJpbmcgbWFnaWNhbGx5IHVzaW5nIHRoZSBtYWdpYyBxdW90ZXMgZmxhZy4KICAgICAqIFRoaXMgbWV0aG9kIGlzIG5vdyBqdXN0IGEgZGVwcmVjYXRlZCBhbGlhcyBmb3IgdGhlIHFzdHIgZmxhZwogICAgICogYXMgd2Ugbm93IHJlcXVpcmUgbWFnaWMgcXVvdGVzIHRvIGJlIGRpc2FibGVkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gUU1hZ2ljKCRzdHIpIDogc3RyaW5nCiAgICB7CiAgICAgIHJldHVybiAkdGhpcy0+cXN0cigkc3RyKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBRdW90ZSBhIHN0cmluZyBpbiBhIGRhdGFiYXNlIGFnbm9zdGljIG1hbm5lci4KICAgICAqIFdhcm5pbmc6IFRoaXMgbWV0aG9kIG1heSByZXF1aXJlIHR3by13YXkgdHJhZmZpYyB3aXRoIHRoZSBkYXRhYmFzZSBkZXBlbmRpbmcgdXBvbiB0aGUgZGF0YWJhc2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHFzdHIoJHN0cikgOiBzdHJpbmc7CiAgICAKICAgIC8qKgogICAgICogb3V0cHV0IHRoZSBteXNxbCBleHByZXNzaW9uIGZvciBhIHN0cmluZyBjb25jYXRlbmF0aW9uLgogICAgICogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIGEgdmFyaWFibGUgbnVtYmVyIG9mIHN0cmluZyBhcmd1bWVudHMuCiAgICAgKgogICAgICogQHBhcmFtcyAkc3RyICAgICBGaXJzdCBzdHJpbmcgdG8gY29uY2F0ZW5hdGUKICAgICAqIEBwYXJhbXMgJHN0ciwuLi4gdW5saW1pdGVkIG51bWJlciBvZiBzdHJpbmdzIHRvIGNvbmNhdGVuYXRlLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBjb25jYXQoKSA6IHN0cmluZzsKICAgIAogICAgLyoqCiAgICAgKiBPdXRwdXQgdGhlIG15c3FsIGV4cHJlc3Npb24gdG8gdGVzdCBpZiBhbiBpdGVtIGlzIG51bGwuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmllbGQgIFRoZSBmaWVsZCB0byB0ZXN0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZk51bGwgVGhlIHZhbHVlIHRvIHVzZSBpZiAkZmllbGQgaXMgbnVsbC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gSWZOdWxsKCRmaWVsZCwgJGlmTnVsbCkgOiBzdHJpbmc7CiAgICAKICAgIC8qKgogICAgICogT3V0cHV0IHRoZSBudW1iZXIgb2Ygcm93cyBhZmZlY3RlZCBieSB0aGUgbGFzdCBxdWVyeS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gQWZmZWN0ZWRfUm93cygpIDogaW50OwogICAgCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgbnVtZXJpYyBJRCBvZiB0aGUgbGFzdCBpbnNlcnQgcXVlcnkgaW50byBhIHRhYmxlIHdpdGggYW4gYXV0by1pbmNyZW1lbnQgZmllbGQuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIEluc2VydF9JRCgpIDogaW50OwogICAgCiAgICAvLy8vIHByaW1hcnkgcXVlcnkgZnVuY3Rpb25zCiAgICAKICAgIC8qKgogICAgICogVGhlIHByaW1hcnkgZnVuY3Rpb24gZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgZGF0YWJhc2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3FsIFRoZSBTUUwgcXVlcnkKICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGRvX3NxbCgkc3FsKTsKICAgIAogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBwcmVwYXJlZCBzdGF0ZW1lbnQgb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNxbCBUaGUgU1FMIHF1ZXJ5CiAgICAgKgogICAgICogQHJldHVybiBTdGF0ZW1lbnQKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIFByZXBhcmUoJHNxbCkgOiBTdGF0ZW1lbnQ7CiAgICAKICAgIC8qKgogICAgICogRXhlY3V0ZSBhbiBTUUwgU2VsZWN0IGFuZCBsaW1pdCB0aGUgb3V0cHV0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNxbAogICAgICogQHBhcmFtIGludCAgICAkbnJvd3MgICAgVGhlIG51bWJlciBvZiByb3dzIHRvIHJldHVybgogICAgICogQHBhcmFtIGludCAgICAkb2Zmc2V0ICAgVGhlIHN0YXJ0aW5nIG9mZnNldCBvZiByb3dzIHRvIHJldHVybgogICAgICogQHBhcmFtIGFycmF5ICAkaW5wdXRhcnIgQW55IGFkZGl0aW9uYWwgcGFyYW1ldGVycyByZXF1aXJlZCBieSBwbGFjZWhvbGRlcnMgaW4gdGhlICRzcWwgc3RhdGVtZW50LgogICAgICoKICAgICAqIEByZXR1cm4gXENNU01TRXh0XGRiXEVuZ2luZVxSZXN1bHRTZXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIFNlbGVjdExpbWl0KCRzcWwsICRucm93cyA9IC0xLCAkb2Zmc2V0ID0gLTEsICRpbnB1dGFyciA9IE5VTEwpIDogP1Jlc3VsdFNldAogICAgewogICAgICAkbGltaXQgID0gTlVMTDsKICAgICAgJG5yb3dzICA9IChpbnQpJG5yb3dzOwogICAgICAkb2Zmc2V0ID0gKGludCkkb2Zmc2V0OwogICAgICBpZigkbnJvd3MgPj0gMCB8fCAkb2Zmc2V0ID49IDApCiAgICAgIHsKICAgICAgICAkb2Zmc2V0ID0gKCRvZmZzZXQgPj0gMCkgPyAkb2Zmc2V0IC4gIiwiIDogJyc7CiAgICAgICAgJG5yb3dzICA9ICgkbnJvd3MgPj0gMCkgPyAkbnJvd3MgOiAnMTg0NDY3NDQwNzM3MDk1NTE2MTUnOwogICAgICAgICRsaW1pdCAgPSAnIExJTUlUICcgLiAkb2Zmc2V0IC4gJyAnIC4gJG5yb3dzOwogICAgICB9CiAgICAgIAogICAgICBpZigkaW5wdXRhcnIgJiYgXGlzX2FycmF5KCRpbnB1dGFycikpCiAgICAgIHsKICAgICAgICAkc3FsYXJyID0gXGV4cGxvZGUoJz8nLCAkc3FsKTsKICAgICAgICAKICAgICAgICBpZighXGlzX2FycmF5KFxyZXNldCgkaW5wdXRhcnIpKSkgeyAkaW5wdXRhcnIgPSBbJGlucHV0YXJyXTsgfQogICAgICAgIAogICAgICAgIGZvcmVhY2goJGlucHV0YXJyIGFzICRhcnIpCiAgICAgICAgewogICAgICAgICAgJHNxbCA9ICcnOwogICAgICAgICAgJGkgICA9IDA7CiAgICAgICAgICAKICAgICAgICAgIGZvcmVhY2goJGFyciBhcyAkdikKICAgICAgICAgIHsKICAgICAgICAgICAgJHNxbCAuPSAkc3FsYXJyWyRpXTsKICAgICAgICAgICAgc3dpdGNoKFxnZXR0eXBlKCR2KSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6CiAgICAgICAgICAgICAgICAkc3FsIC49ICR0aGlzLT5xc3RyKCR2KTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICdkb3VibGUnOgogICAgICAgICAgICAgICAgJHNxbCAuPSBcc3RyX3JlcGxhY2UoJywnLCAnLicsICR2KTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICdib29sZWFuJzoKICAgICAgICAgICAgICAgICRzcWwgLj0gJHYgPyAxIDogMDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgaWYoTlVMTCA9PT0gJHYpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICRzcWwgLj0gJ05VTEwnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAkc3FsIC49ICR2OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICArKyRpOwogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICAkc3FsIC49ICRzcWxhcnJbJGldOwogICAgICAgICAgCiAgICAgICAgICBpZigkaSArIDEgIT0gXGNvdW50KCRzcWxhcnIpKQogICAgICAgICAgewogICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgJHNxbCAuPSAkbGltaXQ7CiAgICAgIAogICAgICByZXR1cm4gJHRoaXMtPmRvX3NxbCgkc3FsKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBFeGVjdXRlIGFuIFNRTCBDb21tYW5kCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3FsICAgICAgVGhlIFNRTCBzdGF0ZW1lbnQgdG8gZXhlY3V0ZS4KICAgICAqIEBwYXJhbSBhcnJheSAgJGlucHV0YXJyIEFueSBwYXJhbWV0ZXJzIG1hcmtlZCBhcyBwbGFjZWhvbGRlcnMgaW4gdGhlIFNRTCBzdGF0ZW1lbnQuCiAgICAgKgogICAgICogQHJldHVybiBcQ01TTVNFeHRcZGJcRW5naW5lXFJlc3VsdFNldAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gRXhlY3V0ZSgkc3FsLCAkaW5wdXRhcnIgPSBOVUxMKQogICAgewogICAgICByZXR1cm4gJHRoaXMtPlNlbGVjdExpbWl0KCRzcWwsIC0xLCAtMSwgJGlucHV0YXJyKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBFeGVjdXRlIGFuIFNRTCBDb21tYW5kIGFuZCByZXR1cm4gYWxsIG9mIHRoZSByZXN1bHRzIGFzIGFuIGFycmF5LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNxbCAgICAgIFRoZSBTUUwgc3RhdGVtZW50IHRvIGV4ZWN1dGUuCiAgICAgKiBAcGFyYW0gYXJyYXkgICRpbnB1dGFyciBBbnkgcGFyYW1ldGVycyBtYXJrZWQgYXMgcGxhY2Vob2xkZXJzIGluIHRoZSBTUUwgc3RhdGVtZW50LgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgbWF0Y2hlZCByZXN1bHRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QXJyYXkoJHNxbCwgJGlucHV0YXJyID0gTlVMTCkgOiBhcnJheQogICAgewogICAgICAkcmVzdWx0ID0gJHRoaXMtPlNlbGVjdExpbWl0KCRzcWwsIC0xLCAtMSwgJGlucHV0YXJyKTsKICAgICAgCiAgICAgIGlmKCEkcmVzdWx0KSB7IHJldHVybiBbXTsgfQogICAgICAKICAgICAgcmV0dXJuICRyZXN1bHQtPkdldEFycmF5KCk7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogQW4gYWxpYXMgZm9yIHRoZSBHZXRBcnJheSBtZXRob2QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3FsICAgICAgVGhlIFNRTCBzdGF0ZW1lbnQgdG8gZXhlY3V0ZS4KICAgICAqIEBwYXJhbSBhcnJheSAgJGlucHV0YXJyIEFueSBwYXJhbWV0ZXJzIG1hcmtlZCBhcyBwbGFjZWhvbGRlcnMgaW4gdGhlIFNRTCBzdGF0ZW1lbnQuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QWxsKCRzcWwsICRpbnB1dGFyciA9IE5VTEwpIDogYXJyYXkKICAgIHsKICAgICAgcmV0dXJuICR0aGlzLT5HZXRBcnJheSgkc3FsLCAkaW5wdXRhcnIpOwogICAgfQogICAgCiAgICAvKioKICAgICAqIEEgbWV0aG9kIHRvIHJldHVybiBhbiBhc3NvY2lhdGl2ZSBhcnJheS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzcWwgICAgICAgICBUaGUgU1FMIHN0YXRlbWVudCB0byBleGVjdXRlCiAgICAgKiBAcGFyYW0gYXJyYXkgICRpbnB1dGFyciAgICBBbnkgcGFyYW1ldGVycyBtYXJrZWQgYXMgcGxhY2Vob2xkZXJzIGluIHRoZSBTUUwgc3RhdGVtZW50LgogICAgICogQHBhcmFtIGJvb2wgICAkZm9yY2VfYXJyYXkgRm9yY2UgZWFjaCBlbGVtZW50IG9mIHRoZSBvdXRwdXQgdG8gYmUgYW4gYXNzb2NpYXRpdmUgYXJyYXkuCiAgICAgKiBAcGFyYW0gYm9vbCAgICRmaXJzdDJjb2xzICBPbmx5IG91dHB1dCB0aGUgZmlyc3QgMiBjb2x1bW5zIGluIGFuIGFzc29jaWF0aXZlIGFycmF5LiAgRG9lcyBub3Qgd29yayB3aXRoCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZV9hcnJheS4KICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICogQHNlZSBQZWFyOjpnZXRBc3NvYygpCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRBc3NvYygkc3FsLCAkaW5wdXRhcnIgPSBOVUxMLCAkZm9yY2VfYXJyYXkgPSBGQUxTRSwgJGZpcnN0MmNvbHMgPSBGQUxTRSkKICAgIHsKICAgICAgJGRhdGEgICA9IE5VTEw7CiAgICAgICRyZXN1bHQgPSAkdGhpcy0+U2VsZWN0TGltaXQoJHNxbCwgLTEsIC0xLCAkaW5wdXRhcnIpOwogICAgICAKICAgICAgaWYoJHJlc3VsdCkKICAgICAgewogICAgICAgICRkYXRhID0gJHJlc3VsdC0+R2V0QXNzb2MoJGZvcmNlX2FycmF5LCAkZmlyc3QyY29scyk7CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiAkZGF0YTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBFeGVjdXRlIGFuIFNRTCBzdGF0ZW1lbnQgdGhhdCByZXR1cm5zIG9uZSBjb2x1bW4sIGFuZCByZXR1cm4gYWxsIG9mIHRoZQogICAgICogbWF0Y2hlcyBhcyBhbiBhcnJheS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzcWwgICAgICBUaGUgU1FMIHN0YXRlbWVudCB0byBleGVjdXRlLgogICAgICogQHBhcmFtIGFycmF5ICAkaW5wdXRhcnIgQW55IHBhcmFtZXRlcnMgbWFya2VkIGFzIHBsYWNlaG9sZGVycyBpbiB0aGUgU1FMIHN0YXRlbWVudC4KICAgICAqIEBwYXJhbSBib29sICAgJHRyaW0gICAgIE9wdGlvbmFsbHkgdHJpbSB0aGUgb3V0cHV0IHJlc3VsdHMuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBBIHNpbmdsZSBmbGF0IGFycmF5IG9mIHJlc3VsdHMsIG9uZSBlbnRyeSBwZXIgcm93IG1hdGNoZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRDb2woJHNxbCwgJGlucHV0YXJyID0gTlVMTCwgJHRyaW0gPSBGQUxTRSkgOiBhcnJheQogICAgewogICAgICAkZGF0YSAgID0gTlVMTDsKICAgICAgJHJlc3VsdCA9ICR0aGlzLT5TZWxlY3RMaW1pdCgkc3FsLCAtMSwgLTEsICRpbnB1dGFycik7CiAgICAgIGlmKCRyZXN1bHQpCiAgICAgIHsKICAgICAgICAkZGF0YSA9IFtdOwogICAgICAgICRrZXkgID0gTlVMTDsKICAgICAgICB3aGlsZSghJHJlc3VsdC0+RU9GKQogICAgICAgIHsKICAgICAgICAgICRyb3cgPSAkcmVzdWx0LT5GaWVsZHMoKTsKICAgICAgICAgIGlmKCEka2V5KQogICAgICAgICAgewogICAgICAgICAgICAka2V5ID0gXGFycmF5X2tleXMoJHJvdylbMF07CiAgICAgICAgICB9CiAgICAgICAgICAkZGF0YVtdID0gKCR0cmltKSA/IFx0cmltKCRyb3dbJGtleV0pIDogJHJvd1ska2V5XTsKICAgICAgICAgICRyZXN1bHQtPk1vdmVOZXh0KCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICByZXR1cm4gJGRhdGE7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogRXhlY3V0ZSBhbiBTUUwgc3RhdGVtZW50IHRoYXQgcmV0dXJucyBvbmUgcm93IG9mIHJlc3VsdHMsIGFuZCByZXR1cm4gdGhhdCByb3cKICAgICAqIGFzIGFuIGFzc29jaWF0aXZlIGFycmF5LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNxbCAgICAgIFRoZSBTUUwgc3RhdGVtZW50IHRvIGV4ZWN1dGUuCiAgICAgKiBAcGFyYW0gYXJyYXkgICRpbnB1dGFyciBBbnkgcGFyYW1ldGVycyBtYXJrZWQgYXMgcGxhY2Vob2xkZXJzIGluIHRoZSBTUUwgc3RhdGVtZW50LgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl8Ym9vbCBBbiBhc3NvY2lhdGl2ZSBhcnJheSByZXByZXNlbnRpbmcgYSBzaW5nbGUgcmVzdWx0c2V0IHJvdyBvciBGQUxTRSBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0Um93KCRzcWwsICRpbnB1dGFyciA9IE5VTEwpCiAgICB7CiAgICAgICRucm93cyA9IDE7CiAgICAgIGlmKEZBTFNFICE9PSBcc3RyaXBvcygkc3FsLCAnTElNSVQnKSkKICAgICAgewogICAgICAgICRucm93cyA9IC0xOwogICAgICB9CiAgICAgICRycyA9ICR0aGlzLT5TZWxlY3RMaW1pdCgkc3FsLCAkbnJvd3MsIC0xLCAkaW5wdXRhcnIpOwogICAgICAKICAgICAgaWYoISRycykgeyByZXR1cm4gRkFMU0U7IH0KICAgICAgCiAgICAgIHJldHVybiAkcnMtPkZpZWxkcygpOwogICAgfQogICAgCiAgICAvKioKICAgICAqIEV4ZWN1dGUgYW4gU1FMIHN0YXRlbWVudCBhbmQgcmV0dXJuIGEgc2luZ2xlIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNxbCAgICAgIFRoZSBTUUwgc3RhdGVtZW50IHRvIGV4ZWN1dGUuCiAgICAgKiBAcGFyYW0gYXJyYXkgICRpbnB1dGFyciBBbnkgcGFyYW1ldGVycyBtYXJrZWQgYXMgcGxhY2Vob2xkZXJzIGluIHRoZSBTUUwgc3RhdGVtZW50LgogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIEdldE9uZSgkc3FsLCAkaW5wdXRhcnIgPSBOVUxMKQogICAgewogICAgICAkcmVzID0gJHRoaXMtPkdldFJvdygkc3FsLCAkaW5wdXRhcnIpOwogICAgICBpZighJHJlcykKICAgICAgewogICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgfQogICAgICAka2V5ID0gXGFycmF5X2tleXMoJHJlcylbMF07CiAgICAgIAogICAgICByZXR1cm4gJHJlc1ska2V5XTsKICAgIH0KICAgIAogICAgLy8vLyB0cmFuc2FjdGlvbnMKICAgIAogICAgLyoqCiAgICAgKiBCZWdpbiBhIHRyYW5zYWN0aW9uCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBCZWdpblRyYW5zKCk7CiAgICAKICAgIC8qKgogICAgICogQmVnaW4gYSBzbWFydCB0cmFuc2FjdGlvbgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gU3RhcnRUcmFucygpOwogICAgCiAgICAvKioKICAgICAqIENvbXBsZXRlIGEgc21hcnQgdHJhbnNhY3Rpb24uCiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGVpdGhlciBkbyBhIHJvbGxiYWNrIG9yIGEgY29tbWl0IGRlcGVuZGluZyB1cG9uIGlmIGVycm9ycyBoYXZlIGJlZW4gZGV0ZWN0ZWQuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJGF1dG9Db21wbGV0ZSBJZiBubyBlcnJvcnMgaGF2ZSBiZWVuIGRldGVjdGVkIGF0dGVtcHQgdG8gYXV0byBjb21taXQgdGhlIHRyYW5zYWN0aW9uLgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gQ29tcGxldGVUcmFucygkYXV0b0NvbXBsZXRlID0gVFJVRSk7CiAgICAKICAgIC8qKgogICAgICogQ29tbWl0IGEgc2ltcGxlIHRyYW5zYWN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICRvayBJbmRpY2F0ZXMgd2V0aGVyIHRoZXJlIGlzIHN1Y2Nlc3Mgb3Igbm90LgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gQ29tbWl0VHJhbnMoJG9rID0gVFJVRSk7CiAgICAKICAgIC8qKgogICAgICogUm9sbCBiYWNrIGEgc2ltcGxlIHRyYW5zYWN0aW9uLgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gUm9sbGJhY2tUcmFucygpOwogICAgCiAgICAvKioKICAgICAqIE1hcmsgYSB0cmFuc2FjdGlvbiBhcyBmYWlsZWQuCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBGYWlsVHJhbnMoKTsKICAgIAogICAgLyoqCiAgICAgKiBUZXN0IGlmIGEgdHJhbnNhY3Rpb24gaGFzIGZhaWxlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIEhhc0ZhaWxlZFRyYW5zKCk7CiAgICAKICAgIC8vLy8gc2VxdWVuY2UgdGFibGUgc3R1ZmYKICAgIAogICAgLyoqCiAgICAgKiBGb3IgdXNlIHdpdGggc2VxdWVuY2UgdGFibGVzLCB0aGlzIG1ldGhvZCB3aWxsIGdlbmVyYXRlIGEgbmV3IElEIHZhbHVlLgogICAgICoKICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBub3QgYXV0b21hdGljYWxseSBjcmVhdGUgdGhlIHNlcXVlbmNlIHRhYmxlIGlmIG5vdCBzcGVjaWZpZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2VxbmFtZSBUaGUgbmFtZSBvZiB0aGUgc2VxdWVuY2UgdGFibGUuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBHZW5JRCgkc2VxbmFtZSk7CiAgICAKICAgIC8vIHRoZXNlIG1ldGhvZHMgc2hvdWxkIGJlIGluIHRoZSBEYXRhRGljdGlvbmFyeT8KICAgIAogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgc2VxdWVuY2UgdGFibGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2VxbmFtZSB0aGUgbmFtZSBvZiB0aGUgc2VxdWVuY2UgdGFibGUuCiAgICAgKiBAcGFyYW0gaW50ICAgICRzdGFydElECiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gQ3JlYXRlU2VxdWVuY2UoJHNlcW5hbWUsICRzdGFydElEID0gMCkgOiBib29sOwogICAgCiAgICAvKioKICAgICAqIERyb3AgYSBzZXF1ZW5jZSB0YWJsZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcW5hbWUgVGhlIG5hbWUgb2YgdGhlIHNlcXVlbmNlIHRhYmxlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gRHJvcFNlcXVlbmNlKCRzZXFuYW1lKSA6IGJvb2w7CiAgICAKICAgIC8vLy8gdGltZSBhbmQgZGF0ZSBzdHVmZgogICAgCiAgICAvKioKICAgICAqIEEgdXRpbGl0eSBtZXRob2QgdG8gY29udmVydCBhIHVuaXggdGltZXN0YW1wIGludG8gYSBkYXRhYmFzZSBzcGVjaWZpYyBzdHJpbmcgc3VpdGFibGUKICAgICAqIGZvciB1c2UgaW4gcXVlcmllcy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkdGltZXN0YW1wCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgc2luZ2xlLXF1b3RlZCBkYXRlLXRpbWUgb3IgJ251bGwnCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBEQlRpbWVTdGFtcCgkdGltZXN0YW1wKSA6IHN0cmluZwogICAgewogICAgICBpZihlbXB0eSgkdGltZXN0YW1wKSAmJiAwICE9PSAkdGltZXN0YW1wKSB7IHJldHVybiAnbnVsbCc7IH0KICAgICAgCiAgICAgIC8vIHN0cmxlbigxNCkgYWxsb3dzIFlZWVlNTURESEhNTVNTIGZvcm1hdAogICAgICBpZihcaXNfc3RyaW5nKCR0aW1lc3RhbXApKQogICAgICB7CiAgICAgICAgaWYoMTQgPT09IFxzdHJsZW4oJHRpbWVzdGFtcCkgfHwgXHByZWdfbWF0Y2goJy9bMC05XHM6LV0qLycsICR0aW1lc3RhbXApKQogICAgICAgIHsKICAgICAgICAgICR0bXAgPSBcc3RydG90aW1lKCR0aW1lc3RhbXApOwogICAgICAgICAgCiAgICAgICAgICBpZigkdG1wIDwgMSkgeyByZXR1cm4gJ251bGwnOyB9CiAgICAgICAgICAKICAgICAgICAgICR0aW1lc3RhbXAgPSAkdG1wOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKFxpc19udW1lcmljKCR0aW1lc3RhbXApKQogICAgICAgIHsKICAgICAgICAgICR0aW1lc3RhbXAgPSAoaW50KSR0aW1lc3RhbXA7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICBpZigkdGltZXN0YW1wID4gMCkKICAgICAgewogICAgICAgIHJldHVybiBcZGF0ZSgiJ1ktbS1kIEg6aTpzJyIsICR0aW1lc3RhbXApOwogICAgICB9CiAgICAgIAogICAgICByZXR1cm4gJ251bGwnOwogICAgfQogICAgCiAgICAvKioKICAgICAqIEEgY29udmVuaWVuY2UgbWV0aG9kIGZvciBjb252ZXJ0aW5nIGEgZGF0YWJhc2Ugc3BlY2lmaWMgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRhdGUgYW5kIHRpbWUKICAgICAqIGludG8gYSB1bml4IHRpbWVzdGFtcC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHIKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gVW5peFRpbWVTdGFtcCgkc3RyKSA6IGludAogICAgewogICAgICByZXR1cm4gXHN0cnRvdGltZSgkc3RyKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBDb252ZXJ0IGEgZGF0ZSBpbnRvIHNvbWV0aGluZyB0aGF0IGlzIHN1aXRhYmxlIGZvciB3cml0aW5nIHRvIGEgZGF0YWJhc2UuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRkYXRlIEVpdGhlciBhIHN0cmluZyBkYXRlLCBvciBhbiBpbnRlZ2VyIHRpbWVzdGFtcAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIHNpbmdsZS1xdW90ZWQgbG9jYWxpemVkIGRhdGUgb3IgJ251bGwnCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBEQkRhdGUoJGRhdGUpIDogc3RyaW5nCiAgICB7CiAgICAgIGlmKGVtcHR5KCRkYXRlKSAmJiAkZGF0ZSAhPT0gMCkgeyByZXR1cm4gJ251bGwnOyB9CiAgICAgIAogICAgICBpZihcaXNfc3RyaW5nKCRkYXRlKSAmJiAhXGlzX251bWVyaWMoJGRhdGUpKQogICAgICB7CiAgICAgICAgaWYoJ251bGwnID09PSAkZGF0ZSB8fCAwID09PSBcc3RybmNtcCgkZGF0ZSwgIiciLCAxKSkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gJGRhdGU7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRkYXRlID0gJHRoaXMtPlVuaXhEYXRlKCRkYXRlKTsKICAgICAgfQogICAgICAKICAgICAgcmV0dXJuIFxsb2NhbGVfZnRpbWUoIicleCciLCAkZGF0ZSk7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogR2VuZXJhdGUgYSB1bml4IHRpbWVzdGFtcCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgZGF0ZSBhdCBtaWRuaWdodC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICogQGRlcHJlY2F0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIFVuaXhEYXRlKCkgOiBpbnQKICAgIHsKICAgICAgcmV0dXJuIFxzdHJ0b3RpbWUoJ3RvZGF5IG1pZG5pZ2h0Jyk7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogQW4gYWxpYXMgZm9yIHRoZSBVbml4VGltZXN0YW1wIG1ldGhvZC4KICAgICAqCiAgICAgKiBAcGFyYW0gJHN0cgogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBUaW1lKCRzdHIpIDogaW50IHsgcmV0dXJuICR0aGlzLT5Vbml4VGltZVN0YW1wKCRzdHIpOyB9CiAgICAKICAgIC8qKgogICAgICogQW4gQWxpYXMgZm9yIHRoZSBVbml4RGF0ZSBtZXRob2QuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIERhdGUoKSA6IGludCB7IHJldHVybiAkdGhpcy0+VW5peERhdGUoKTsgfQogICAgCiAgICAvLy8vIGVycm9yIGFuZCBkZWJ1ZyBtZXNzYWdlIGhhbmRsaW5nCiAgICAKICAgIC8qKgogICAgICogUmV0dXJuIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGxhdGVzdCBlcnJvciAoaWYgYW55KQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBFcnJvck1zZygpIDogc3RyaW5nOwogICAgCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgbGF0ZXN0IGVycm9yIG51bWJlciAoaWYgYW55KQogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBFcnJvck5vKCkgOiBpbnQ7CiAgICAKICAgIC8qKgogICAgICogU2V0IGFuIGVycm9yIGhhbmRsZXIgZnVuY3Rpb24KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGZuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBTZXRFcnJvckhhbmRsZXIoJGZuID0gTlVMTCkgOiB2b2lkCiAgICB7CiAgICAgICR0aGlzLT5fZXJyb3JoYW5kbGVyID0gTlVMTDsKICAgICAgCiAgICAgIGlmKCRmbiAmJiBcaXNfY2FsbGFibGUoJGZuKSkKICAgICAgewogICAgICAgICR0aGlzLT5fZXJyb3JoYW5kbGVyID0gJGZuOwogICAgICB9CiAgICB9CiAgICAKICAgIC8qKgogICAgICogVG9nZ2xlIGRlYnVnIG1vZGUuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgICAgICRmbGFnIEVuYWJsZSBvciBEaXNhYmxlIGRlYnVnIG1vZGUuCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGRlYnVnX2hhbmRsZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIFNldERlYnVnTW9kZSgkZmxhZyA9IFRSVUUsICRkZWJ1Z19oYW5kbGVyID0gTlVMTCkgOiB2b2lkCiAgICB7CiAgICAgICR0aGlzLT5fZGVidWcgPSAoYm9vbCkkZmxhZzsKICAgICAgCiAgICAgIGlmKCRkZWJ1Z19oYW5kbGVyICYmIFxpc19jYWxsYWJsZSgkdGhpcy0+X2RlYnVnX2NiKSkKICAgICAgewogICAgICAgICR0aGlzLT5fZGVidWdfY2IgPSAkZGVidWdfaGFuZGxlcjsKICAgICAgfQogICAgfQogICAgCiAgICAvKioKICAgICAqIFNldCB0aGUgZGVidWcgY2FsbGJhY2suCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlfG51bGwgJGRlYnVnX2hhbmRsZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIFNldERlYnVnQ2FsbGJhY2soY2FsbGFibGUgJGRlYnVnX2hhbmRsZXIgPSBOVUxMKSA6IHZvaWQKICAgIHsKICAgICAgJHRoaXMtPl9kZWJ1Z19jYiA9ICRkZWJ1Z19oYW5kbGVyOwogICAgfQogICAgCiAgICAvKioKICAgICAqIEFkZCBhIHF1ZXJ5IHRvIHRoZSBkZWJ1ZyBsb2cKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzcWwgdGhlIFNRTCBzdGF0ZW1lbnQKICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGFkZF9kZWJ1Z19xdWVyeSgkc3FsKSA6IHZvaWQKICAgIHsKICAgICAgJHRoaXMtPl9xdWVyeV9jb3VudCsrOwogICAgICAKICAgICAgaWYoJHRoaXMtPl9kZWJ1ZyAmJiAkdGhpcy0+X2RlYnVnX2NiKQogICAgICB7CiAgICAgICAgXGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5fZGVidWdfY2IsICRzcWwpOwogICAgICB9CiAgICB9CiAgICAKICAgIC8qKgogICAgICogQSBjYWxsYmFjayB0aGF0IGlzIGNhbGxlZCB3aGVuIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzLgogICAgICogVGhpcyBtZXRob2Qgd2lsbCBieSBkZWZhdWx0IGNhbGwgdGhlIGVycm9yIGhhbmRsZXIgaWYgaXQgaGFzIGJlZW4gc2V0LgogICAgICogSWYgbm8gZXJyb3IgaGFuZGxlciBpcyBzZXQsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRlcnJ0eXBlICAgICAgIFRoZSB0eXBlIG9mIGVycm9yCiAgICAgKiBAcGFyYW0gaW50ICAgICRlcnJvcl9udW1iZXIgIFRoZSBlcnJvciBudW1iZXIKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVycm9yX21lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIFxDTVNNU0V4dFxkYlxFbmdpbmVcRGF0YWJhc2VDb25uZWN0aW9uRXhjZXB0aW9uCiAgICAgKiBAaW50ZXJuYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIE9uRXJyb3IoJGVycnR5cGUsICRlcnJvcl9udW1iZXIsICRlcnJvcl9tZXNzYWdlKSA6IHZvaWQKICAgIHsKICAgICAgaWYoJHRoaXMtPl9lcnJvcmhhbmRsZXIgJiYgXGlzX2NhbGxhYmxlKCR0aGlzLT5fZXJyb3JoYW5kbGVyKSkKICAgICAgewogICAgICAgIFxjYWxsX3VzZXJfZnVuYygkdGhpcy0+X2Vycm9yaGFuZGxlciwgJHRoaXMsICRlcnJ0eXBlLCAkZXJyb3JfbnVtYmVyLCAkZXJyb3JfbWVzc2FnZSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIAogICAgICBzd2l0Y2goJGVycnR5cGUpCiAgICAgIHsKICAgICAgICBjYXNlIHNlbGY6OkVSUk9SX0NPTk5FQ1Q6CiAgICAgICAgICB0aHJvdyBuZXcgRGF0YWJhc2VDb25uZWN0aW9uRXhjZXB0aW9uKCRlcnJvcl9tZXNzYWdlLCAkZXJyb3JfbnVtYmVyKTsKICAgICAgICAKICAgICAgICBjYXNlIHNlbGY6OkVSUk9SX0VYRUNVVEU6CiAgICAgICAgICB0aHJvdyBuZXcgRGF0YWJhc2VFeGNlcHRpb24oJGVycm9yX21lc3NhZ2UsICRlcnJvcl9udW1iZXIsICR0aGlzLT5zcWwsICR0aGlzLT5fY29ubmVjdGlvblNwZWMpOwogICAgICB9CiAgICB9CiAgICAKICAgIC8vLy8gaW5pdGlhbGl6YXRpb24KICAgIAogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgZGF0YWJhc2UgY29ubmVjdGlvbiBvYmplY3QuCiAgICAgKiBUaGlzIGlzIHRoZSBwcmVmZXJyZWQgd2EgdG8gb3BlbiBhIG5ldyBkYXRhYmFzZSBjb25uZWN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBcQ01TTVNFeHRcZGJcRW5naW5lXENvbm5lY3Rpb25zcGVjICRzcGVjIEFuIG9iamVjdCBkZXNjcmliaW5nIHRoZSBkYXRhYmFzZSB0byBjb25uZWN0IHRvLgogICAgICoKICAgICAqIEByZXR1cm4gXENNU01TRXh0XGRiXEVuZ2luZVxDb25uZWN0aW9uCiAgICAgKiBAdGhyb3dzIFxDTVNNU0V4dFxkYlxFbmdpbmVcQ29ubmVjdGlvblNwZWNFeGNlcHRpb24KICAgICAqIEB0b2RvICBNb3ZlIHRoaXMgaW50byBhIGZhY3RvcnkgY2xhc3MKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBJbml0aWFsaXplKENvbm5lY3Rpb25TcGVjICRzcGVjKSA6IENvbm5lY3Rpb24KICAgIHsKICAgICAgaWYoISRzcGVjLT52YWxpZCgpKQogICAgICB7CiAgICAgICAgdGhyb3cgbmV3IENvbm5lY3Rpb25TcGVjRXhjZXB0aW9uKCdJbnZhbGlkIG9yIGluY29ycmVjdCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uJyk7CiAgICAgIH0KICAgICAgJGNvbm5lY3Rpb25fY2xhc3MgPSAnXFxDTVNNU0V4dFxcRGF0YWJhc2VcXGRiXFxFbmdpbmVcXCcgLiAkc3BlYy0+dHlwZSAuICdcXENvbm5lY3Rpb24nOwogICAgICAKICAgICAgaWYoIVxjbGFzc19leGlzdHMoJGNvbm5lY3Rpb25fY2xhc3MpKQogICAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignQ291bGQgbm90IGZpbmQgYSBkYXRhYmFzZSBhYnN0cmFjdGlvbiBsYXllciBuYW1lZCAnIC4gJHNwZWMtPnR5cGUpOwogICAgICB9CiAgICAgIAogICAgICAkb2JqID0gbmV3ICRjb25uZWN0aW9uX2NsYXNzKCRzcGVjKTsKICAgICAgCiAgICAgIGlmKCEoJG9iaiBpbnN0YW5jZW9mIHNlbGYpKQogICAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiJGNvbm5lY3Rpb25fY2xhc3MgaXMgbm90IGRlcml2ZWQgZnJvbSB0aGUgcHJpbWFyeSBkYXRhYmFzZSBjbGFzcy4iKTsKICAgICAgfQogICAgICAKICAgICAgaWYoJHNwZWMtPmRlYnVnKQogICAgICB7CiAgICAgICAgJG9iai0+U2V0RGVidWdNb2RlKCk7CiAgICAgIH0KICAgICAgCiAgICAgICRvYmotPkNvbm5lY3QoKTsKICAgICAgCiAgICAgIGlmKCRzcGVjLT5hdXRvX2V4ZWMpCiAgICAgIHsKICAgICAgICAkb2JqLT5FeGVjdXRlKCRzcGVjLT5hdXRvX2V4ZWMpOwogICAgICB9CiAgICAgIAogICAgICByZXR1cm4gJG9iajsKICAgIH0KICAgIAogIH0gLy8gZW5kIG9mIGNsYXNzCiAgCiAgLyoqCiAgICogQSBzcGVjaWFsIHR5cGUgb2YgZXhjZXB0aW9uIHJlbGF0ZWQgdG8gZGF0YWJhc2UgcXVlcmllcy4KICAgKi8KICBjbGFzcyBEYXRhYmFzZUV4Y2VwdGlvbiBleHRlbmRzIFxMb2dpY0V4Y2VwdGlvbgogIHsKICAgIC8qKgogICAgICogQGludGVybmFsCiAgICAgKi8KICAgIHByb3RlY3RlZCBDb25uZWN0aW9uU3BlYyAkX2Nvbm5lY3Rpb247CiAgICAKICAgIC8qKgogICAgICogQGludGVybmFsCiAgICAgKi8KICAgIHByb3RlY3RlZCBzdHJpbmcgJF9zcWw7CiAgICAKICAgIC8qKgogICAgICogQ29uc3RydWN0b3IKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbXNnICAgICAgICBUaGUgbWVzc2FnZSBzdHJpbmcKICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRudW1iZXIgICAgIFRoZSBlcnJvciBudW1iZXIKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgICAgICAgIFRoZSByZWxhdGVkIFNRTCBzdGF0ZW1lbnQsIGlmIGFueQogICAgICogQHBhcmFtIFxDTVNNU0V4dFxkYlxFbmdpbmVcQ29ubmVjdGlvblNwZWMgJGNvbm5lY3Rpb24gVGhlIGNvbm5lY3Rpb24gc3BlY2lmaWNhdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1zZywgJG51bWJlciwgJHNxbCwgQ29ubmVjdGlvblNwZWMgJGNvbm5lY3Rpb24pCiAgICB7CiAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG1zZywgJG51bWJlcik7CiAgICAgICR0aGlzLT5fY29ubmVjdGlvbiA9ICRjb25uZWN0aW9uOwogICAgICAkdGhpcy0+X3NxbCAgICAgICAgPSAkc3FsOwogICAgfQogICAgCiAgICAvKioKICAgICAqIEdldCB0aGUgU1FMIHN0YXRlbWVudCByZWxhdGVkIHRvIHRoaXMgZXhjZXB0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTUUwoKSA6IHN0cmluZyB7IHJldHVybiAkdGhpcy0+X3NxbDsgfQogICAgCiAgICAvKioKICAgICAqIEdldCB0aGUgQ29ubmVjdGlvbnNwZWMgdGhhdCB3YXMgdXNlZCB3aGVuIGdlbmVyYXRpbmcgdGhlIGVycm9yLgogICAgICoKICAgICAqIEByZXR1cm4gXENNU01TRXh0XGRiXEVuZ2luZVxDb25uZWN0aW9uU3BlYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29ubmVjdGlvblNwZWMoKSA6IENvbm5lY3Rpb25TcGVjIHsgcmV0dXJuICR0aGlzLT5fY29ubmVjdGlvbjsgfQogIH0KICAKICAvKioKICAgKiBBIHNwZWNpYWwgZXhjZXB0aW9uIGluZGljYXRpbmcgYSBwcm9ibGVtIGNvbm5lY3RpbmcgdG8gdGhlIGRhdGFiYXNlLgogICAqLwogIGNsYXNzIERhdGFiYXNlQ29ubmVjdGlvbkV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24geyB9CiAgCn0gLy8gZW5kIG9mIE5hbWVzcGFjZQo=]]></data>
	</file>
	<file>
	  <filename>/lib/db/Engine/class.ConnectionSpec.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFxDTVNNU0V4dFxkYlxFbmdpbmVcQ29ubmVjdGlvblNwZWMgKGMpIDIwMTUgYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQSBjbGFzcyB0byBkZWZpbmUgaG93IHRvIGNvbm5lY3QgdG8gYSBkYXRhYmFzZS4KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgb3VyIGhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBDb25uZWN0aW9uU3BlYyBjbGFzcy4KICoKICogT3JpZ2luYWwgQ29weXJpZ2h0IChjKSAyMDE1LCBSb2JlcnQgQ2FtcGJlbGwgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqCiAqIEZvcmtlZCBieTogRmVybmFuZG8gTW9yZ2FkbyA8am9tb3JnQGNtc21hZGVzaW1wbGUub3JnPgogKgogKiBAcGFja2FnZSAgIENNU01TRXh0CiAqIEBhdXRob3IgICAgRmVybmFuZG8gTW9yZ2FkbwogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAyNCBGZXJuYW5kbyBNb3JnYWRvLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBAc2luY2UgICAgIDEuNC42CiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XGRiXEVuZ2luZTsKCi8qKgogKiBBIGNsYXNzIGRlZmluaW5nIGFsbCB0aGUgZGV0YWlscyBuZWVkZWQgdG8gY29ubmVjdCB0byBhIGRhdGFiYXNlLgogKiBTb21lIGRhdGFiYXNlIGRyaXZlcnMgbWF5IG5vdCByZXF1aXJlIGFsbCB0aGUgcGFyYW1ldGVycy4KICoKICogQHBhcmFtIHN0cmluZyAkdHlwZSAgICAgICBUaGUgZGF0YWJhc2UgY29ubmVjdGlvbiB0eXBlLiAgRGVmYXVsdHMgdG8gJ215c3FsaScuCiAqIEBwYXJhbSBzdHJpbmcgJGhvc3QgICAgICAgVGhlIGhvc3RuYW1lIHRvIGNvbm5lY3QgdG8uCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJuYW1lICAgVGhlIGF1dGhlbnRpY2F0aW9uIHVzZXJuYW1lCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkICAgVGhlIGF1dGhlbnRpY2F0aW9uIHBhc3N3b3JkCiAqIEBwYXJhbSBzdHJpbmcgJGRibmFtZSAgICAgVGhlIGRhdGFiYXNlIG5hbWUKICogQHBhcmFtIHN0cmluZyAkcHJlZml4ICAgICBUaGUgdGFibGUgbmFtZSBwcmVmaXguCiAqIEBwYXJhbSBpbnQgICAgJHBvcnQgICAgICAgVGhlIGNvbm5lY3Rpb24gcG9ydAogKiBAcGFyYW0gYm9vbCAgICRwZXJzaXN0ZW50IFdldGhlciBvciBub3QgdG8gdXNlIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMuCiAqIEBwYXJhbSBib29sICAgJGRlYnVnICAgICAgRW5hYmxlIGRlYnVnIG1vZGUuCiAqCiAqIEBwYWNrYWdlICAgQ01TCiAqIEBhdXRob3IgICAgUm9iZXJ0IENhbXBiZWxsCiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE1LCBSb2JlcnQgQ2FtcGJlbGwgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBzaW5jZSAgICAgMi4yCiAqLwpjbGFzcyBDb25uZWN0aW9uU3BlYwp7CiAgLyoqCiAgICogQGlnbm9yZQogICAqLwogIHByaXZhdGUgYXJyYXkgJF9kYXRhID0gWwogICAgJ3R5cGUnICAgICAgID0+ICdteXNxbGknLAogICAgJ2hvc3QnICAgICAgID0+IE5VTEwsCiAgICAndXNlcm5hbWUnICAgPT4gTlVMTCwKICAgICdwYXNzd29yZCcgICA9PiBOVUxMLAogICAgJ2RibmFtZScgICAgID0+IE5VTEwsCiAgICAncHJlZml4JyAgICAgPT4gTlVMTCwKICAgICdwb3J0JyAgICAgICA9PiBOVUxMLAogICAgJ3BlcnNpc3RlbnQnID0+IEZBTFNFLAogICAgJ2RlYnVnJyAgICAgID0+IEZBTFNFLAogICAgJ2F1dG9fZXhlYycgID0+IE5VTEwKICBdOwogIAogIC8qKgogICAqIEBpZ25vcmUKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJGtleSkKICB7CiAgICBpZighXGFycmF5X2tleV9leGlzdHMoJGtleSwgJHRoaXMtPl9kYXRhKSkKICAgIHsKICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIiRrZXkgaXMgbm90IGEgdmFsaWQgbWVtYmVyIG9mICIgLiBfX0NMQVNTX18pOwogICAgfQogICAgCiAgICByZXR1cm4gJHRoaXMtPl9kYXRhWyRrZXldOwogIH0KICAKICAvKioKICAgKiBAaWdub3JlCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIF9fc2V0KCRrZXksICR2YWwpCiAgewogICAgaWYoIVxhcnJheV9rZXlfZXhpc3RzKCRrZXksICR0aGlzLT5fZGF0YSkpCiAgICB7CiAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCIka2V5IGlzIG5vdCBhIHZhbGlkIG1lbWJlciBvZiAiIC4gX19DTEFTU19fKTsKICAgIH0KICAgICR0aGlzLT5fZGF0YVska2V5XSA9IFx0cmltKCR2YWwpOwogIH0KICAKICAvKioKICAgKiBUZXN0IGlmIHRoaXMgY29ubmVjdGlvbnNwZWMgaXMgdmFsaWQuCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGVub3VnaCBpbmZvcm1hdGlvbiB0byBjb25uZWN0IHRvIHRoZSBkYXRhYmFzZS4KICAgKgogICAqIEByZXR1cm4gYm9vbAogICAqLwogIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpIDogYm9vbAogIHsKICAgICAgcmV0dXJuICEoISR0aGlzLT50eXBlIHx8ICEkdGhpcy0+aG9zdCB8fCAhJHRoaXMtPnVzZXJuYW1lIHx8ICEkdGhpcy0+cGFzc3dvcmQgfHwgISR0aGlzLT5kYm5hbWUpOwogIH0KfQoKLyoqCiAqIEEgc3BlY2lhbCBleGNlcHRpb24gdG8gaW5kaWNhdGUgYSBwcm9ibGVtIHdpdGggYSBDb25uZWN0aW9uU3BlYwogKi8KY2xhc3MgQ29ubmVjdGlvblNwZWNFeGNlcHRpb24gZXh0ZW5kcyBcRXhjZXB0aW9uIHsgfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/db/Engine/class.DataDictionary.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFxDTVNNU0V4dFxkYlxFbmdpbmVcRGF0YURpY3Rpb25hcnkgKGMpIDIwMTUgYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQSBjbGFzcyB0byBkZWZpbmUgbWV0aG9kcyBvZiBpbnRlcmFjdGluZyB3aXRoIGRhdGFiYXNlIHRhYmxlcy4KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgb3VyIGhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBEYXRhRGljdGlvbmFyeSBjbGFzcy4KICoKICogVGhpcyBmaWxlIGlzIGJhc2VkIG9uIHRoZSBEYXRhRGljdGlvbmFyeSBiYXNlIGNsYXNzIGZyb20gdGhlIGFkb2RiX2xpdGUgbGlicmFyeQogKiB3aGljaCB3YXMgaW4gdHVybiBhIGZvcmsgb2YgdGhlIGFkb2RiIGxpYnJhcnkgYXQgYXBwcm94aW1hdGVseSAyMDA0LgogKgogKiBDcmVkaXRzIGFuZCBrdWRvcyB0byB0aGUgYXV0aG9ycyBvZiB0aG9zZSBwYWNrYWdlcy4KICoKICogT3JpZ2luYWwgQ29weXJpZ2h0IChjKSAyMDE1LCBSb2JlcnQgQ2FtcGJlbGwgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqCiAqIEZvcmtlZCBieTogRmVybmFuZG8gTW9yZ2FkbyA8am9tb3JnQGNtc21hZGVzaW1wbGUub3JnPgogKgogKiBAcGFja2FnZSAgIENNU01TRXh0CiAqIEBhdXRob3IgICAgRmVybmFuZG8gTW9yZ2FkbwogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAyNCBGZXJuYW5kbyBNb3JnYWRvLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBAc2luY2UgICAgIDEuNC42CiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XGRiXEVuZ2luZTsKCi8vIHNob3VsZG4ndCBuZWVkIHRoaXMuCmlmKCFcZnVuY3Rpb25fZXhpc3RzKCdjdHlwZV9hbG51bScpKQp7CiAgLyoqCiAgICogQGlnbm9yZQogICAqLwogIGZ1bmN0aW9uIGN0eXBlX2FsbnVtKCR0ZXh0KQogIHsKICAgIHJldHVybiBccHJlZ19tYXRjaCgnL15bYS16MC05XSokL2knLCAkdGV4dCk7CiAgfQp9CgovKioKICogQGlnbm9yZQogKi8KZnVuY3Rpb24gX2FycmF5X2NoYW5nZV9rZXlfY2FzZSgkYW5fYXJyYXkpCnsKICBpZihcaXNfYXJyYXkoJGFuX2FycmF5KSkKICB7CiAgICAkbmV3X2FycmF5ID0gW107CiAgICBmb3JlYWNoKCRhbl9hcnJheSBhcyAka2V5ID0+ICR2YWx1ZSkKICAgIHsKICAgICAgJG5ld19hcnJheVtcc3RydG91cHBlcigka2V5KV0gPSAkdmFsdWU7CiAgICB9CiAgICAKICAgIHJldHVybiAkbmV3X2FycmF5OwogIH0KICAKICByZXR1cm4gJGFuX2FycmF5Owp9CgovKioKICogQGlnbm9yZQogKi8KZnVuY3Rpb24gTGVuc19QYXJzZUFyZ3MoJGFyZ3MsICRlbmRzdG10Y2hhciA9ICcsJywgJHRva2VuY2hhcnMgPSAnXy4tJykKewogICRwb3MgICAgICAgICAgICAgPSAwOwogICRpbnRva2VuICAgICAgICAgPSBGQUxTRTsKICAkc3RtdG5vICAgICAgICAgID0gMDsKICAkZW5kcXVvdGUgICAgICAgID0gRkFMU0U7CiAgJHRva2VucyAgICAgICAgICA9IFtdOwogICR0b2tlbnNbJHN0bXRub10gPSBbXTsKICAkbWF4ICAgICAgICAgICAgID0gXHN0cmxlbigkYXJncyk7CiAgJHF1b3RlZCAgICAgICAgICA9IEZBTFNFOwogIAogIHdoaWxlKCRwb3MgPCAkbWF4KQogIHsKICAgICRjaCA9IFxzdWJzdHIoJGFyZ3MsICRwb3MsIDEpOwogICAgc3dpdGNoKCRjaCkKICAgIHsKICAgICAgY2FzZSAnICc6CiAgICAgIGNhc2UgIlx0IjoKICAgICAgY2FzZSAiXG4iOgogICAgICBjYXNlICJcciI6CiAgICAgICAgaWYoISRxdW90ZWQpCiAgICAgICAgewogICAgICAgICAgaWYoJGludG9rZW4pCiAgICAgICAgICB7CiAgICAgICAgICAgICRpbnRva2VuICAgICAgICAgICA9IEZBTFNFOwogICAgICAgICAgICAkdG9rZW5zWyRzdG10bm9dW10gPSBcaW1wbG9kZSgnJywgJHRva2Fycik7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgJHRva2FycltdID0gJGNoOwogICAgICBicmVhazsKICAgICAgY2FzZSAnYCc6CiAgICAgICAgaWYoJGludG9rZW4pCiAgICAgICAgewogICAgICAgICAgJHRva2FycltdID0gJGNoOwogICAgICAgIH0KICAgICAgY2FzZSAnKCc6CiAgICAgIGNhc2UgJyknOgogICAgICBjYXNlICciJzoKICAgICAgY2FzZSAiJyI6CiAgICAgICAgaWYoJGludG9rZW4pCiAgICAgICAgewogICAgICAgICAgaWYoZW1wdHkoJGVuZHF1b3RlKSkKICAgICAgICAgIHsKICAgICAgICAgICAgJHRva2Vuc1skc3RtdG5vXVtdID0gXGltcGxvZGUoJycsICR0b2thcnIpOwogICAgICAgICAgICBpZigkY2ggPT0gJygnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgJGVuZHF1b3RlID0gJyknOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICRlbmRxdW90ZSA9ICRjaDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgJHF1b3RlZCAgPSBUUlVFOwogICAgICAgICAgICAkaW50b2tlbiA9IFRSVUU7CiAgICAgICAgICAgICR0b2thcnIgID0gW107CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmKCRlbmRxdW90ZSA9PSAkY2gpCiAgICAgICAgICB7CiAgICAgICAgICAgICRjaDIgPSBcc3Vic3RyKCRhcmdzLCAkcG9zICsgMSwgMSk7CiAgICAgICAgICAgIGlmKCRjaDIgPT0gJGVuZHF1b3RlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgJHBvcyAgICAgICs9IDE7CiAgICAgICAgICAgICAgJHRva2FycltdID0gJGNoMjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAkcXVvdGVkICAgICAgICAgICAgPSBGQUxTRTsKICAgICAgICAgICAgICAkaW50b2tlbiAgICAgICAgICAgPSBGQUxTRTsKICAgICAgICAgICAgICAkdG9rZW5zWyRzdG10bm9dW10gPSBcaW1wbG9kZSgnJywgJHRva2Fycik7CiAgICAgICAgICAgICAgJGVuZHF1b3RlICAgICAgICAgID0gJyc7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgJHRva2FycltdID0gJGNoOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgaWYoJGNoID09ICcoJykKICAgICAgICAgIHsKICAgICAgICAgICAgJGVuZHF1b3RlID0gJyknOwogICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgewogICAgICAgICAgICAkZW5kcXVvdGUgPSAkY2g7CiAgICAgICAgICB9CiAgICAgICAgICAKICAgICAgICAgICRxdW90ZWQgID0gVFJVRTsKICAgICAgICAgICRpbnRva2VuID0gVFJVRTsKICAgICAgICAgICR0b2thcnIgID0gW107CiAgICAgICAgICAKICAgICAgICAgIGlmKCdgJyA9PSAkY2gpIHskdG9rYXJyW10gPSAnYCc7IH0KICAgICAgICB9CiAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGlmKCEkaW50b2tlbikKICAgICAgICB7CiAgICAgICAgICBpZigkY2ggPT0gJGVuZHN0bXRjaGFyKQogICAgICAgICAgewogICAgICAgICAgICArKyRzdG10bm87CiAgICAgICAgICAgICR0b2tlbnNbJHN0bXRub10gPSBbXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICAKICAgICAgICAgICRpbnRva2VuICA9IFRSVUU7CiAgICAgICAgICAkcXVvdGVkICAgPSBGQUxTRTsKICAgICAgICAgICRlbmRxdW90ZSA9IEZBTFNFOwogICAgICAgICAgJHRva2FyciAgID0gW107CiAgICAgICAgfQogICAgICAgIGlmKCRxdW90ZWQpCiAgICAgICAgewogICAgICAgICAgJHRva2FycltdID0gJGNoOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKGN0eXBlX2FsbnVtKCRjaCkgfHwgRkFMU0UgIT09IFxzdHJwb3MoJHRva2VuY2hhcnMsICRjaCkpCiAgICAgICAgewogICAgICAgICAgJHRva2FycltdID0gJGNoOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgaWYoJGNoID09ICRlbmRzdG10Y2hhcikKICAgICAgICAgIHsKICAgICAgICAgICAgJHRva2Vuc1skc3RtdG5vXVtdID0gXGltcGxvZGUoJycsICR0b2thcnIpOwogICAgICAgICAgICArKyRzdG10bm87CiAgICAgICAgICAgICR0b2tlbnNbJHN0bXRub10gICA9IFtdOwogICAgICAgICAgICAkaW50b2tlbiAgICAgICAgICAgPSBGQUxTRTsKICAgICAgICAgICAgJHRva2FyciAgICAgICAgICAgID0gW107CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgJHRva2Vuc1skc3RtdG5vXVtdID0gXGltcGxvZGUoJycsICR0b2thcnIpOwogICAgICAgICAgJHRva2Vuc1skc3RtdG5vXVtdID0gJGNoOwogICAgICAgICAgJGludG9rZW4gICAgICAgICAgID0gRkFMU0U7CiAgICAgICAgfQogICAgfQogICAgJHBvcyArPSAxOwogIH0KICBpZigkaW50b2tlbikKICB7CiAgICAkdG9rZW5zWyRzdG10bm9dW10gPSBcaW1wbG9kZSgnJywgJHRva2Fycik7CiAgfQogIAogIHJldHVybiAkdG9rZW5zOwp9CgoKLyoqCiAqIEEgY2xhc3MgZGVmaW5pbmcgbWV0aG9kcyB0byB3b3JrIGRpcmVjdGx5IHdpdGggZGF0YWJhc2UgdGFibGVzLgogKgogKiBUaGlzIGZpbGUgaXMgYmFzZWQgb24gdGhlIERhdGFEaWN0aW9uYXJ5IGJhc2UgY2xhc3MgZnJvbSB0aGUgYWRvZGJfbGl0ZSBsaWJyYXJ5CiAqIHdoaWNoIHdhcyBpbiB0dXJuIGEgZm9yayBvZiB0aGUgYWRvZGIgbGlicmFyeSBhdCBhcHByb3hpbWF0ZWx5IDIwMDQuCiAqCiAqIENyZWRpdHMgYW5kIGt1ZG9zIHRvIHRoZSBhdXRob3JzIG9mIHRob3NlIHBhY2thZ2VzLgogKgogKiBPcmlnaW5hbCBDb3B5cmlnaHQgKGMpIDIwMTUsIFJvYmVydCBDYW1wYmVsbCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICoKICogRm9ya2VkIGJ5OiBGZXJuYW5kbyBNb3JnYWRvIDxqb21vcmdAY21zbWFkZXNpbXBsZS5vcmc+CiAqCiAqIEBwYWNrYWdlICAgQ01TTVNFeHQKICogQGF1dGhvciAgICBGZXJuYW5kbyBNb3JnYWRvCiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDI0IEZlcm5hbmRvIE1vcmdhZG8uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIEBzaW5jZSAgICAgMS40LjYKICovCmFic3RyYWN0IGNsYXNzIERhdGFEaWN0aW9uYXJ5CnsKICAvKioKICAgKiBUaGUgZGF0YWJhc2UgY29ubmVjdGlvbiBvYmplY3QuCiAgICoKICAgKiBAaW50ZXJuYWwKICAgKi8KICBwcm90ZWN0ZWQgQ29ubmVjdGlvbiAkY29ubmVjdGlvbjsKICAKICAvKioKICAgKiBUaGUgU1FMIHByZWZpeCB0byB1c2Ugd2hlbiBjcmVhdGluZyBhIGRyb3AgdGFibGUgY29tbWFuZC4KICAgKgogICAqIEBpbnRlcm5hbAogICAqLwogIHByb3RlY3RlZCBzdHJpbmcgJGRyb3BUYWJsZSA9ICdEUk9QIFRBQkxFICVzJzsKICAKICAvKioKICAgKiBUaGUgU1FMIHByZWZpeCB0byB1c2Ugd2hlbiByZW5hbWluZyBhIHRhYmxlLgogICAqCiAgICogQGludGVybmFsCiAgICovCiAgcHJvdGVjdGVkIHN0cmluZyAkcmVuYW1lVGFibGUgPSAnUkVOQU1FIFRBQkxFICVzIFRPICVzJzsKICAKICAvKioKICAgKiBUaGUgU1FMIHByZWZpeCB0byB1c2Ugd2hlbiBkcm9wcGluZyBhbiBpbmRleC4KICAgKgogICAqIEBpbnRlcm5hbAogICAqLwogIHByb3RlY3RlZCBzdHJpbmcgJGRyb3BJbmRleCA9ICdEUk9QIElOREVYICVzJzsKICAKICAvKioKICAgKiBUaGUgU1FMIHN0cmluZyB0byB1c2UgKGluIHRoZSBhbHRlciB0YWJsZSBjb21tYW5kKSB3aGVuIGFkZGluZyBhIGNvbHVtbi4KICAgKgogICAqIEBpbnRlcm5hbAogICAqLwogIHByb3RlY3RlZCBzdHJpbmcgJGFkZENvbCA9ICcgQUREJzsKICAKICAvKioKICAgKiBUaGUgU1FMIHN0cmluZyB0byB1c2UgKGluIHRoZSBhbHRlciB0YWJsZSBjb21tYW5kKSB3aGVuIGFsdGVyaW5nIGEgY29sdW1uLgogICAqCiAgICogQGludGVybmFsCiAgICovCiAgcHJvdGVjdGVkIHN0cmluZyAkYWx0ZXJDb2wgPSAnIEFMVEVSIENPTFVNTic7CiAgCiAgLyoqCiAgICogVGhlIFNRTCBzdHJpbmcgdG8gdXNlIChpbiB0aGUgYWx0ZXIgdGFibGUgY29tbWFuZCkgd2hlbiBkcm9wcGluZyBhIGNvbHVtbi4KICAgKgogICAqIEBpbnRlcm5hbAogICAqLwogIHByb3RlY3RlZCBzdHJpbmcgJGRyb3BDb2wgPSAnIERST1AgQ09MVU1OJzsKICAKICAvKioKICAgKiBUaGUgU1FMIGNvbW1hbmQgdGVtcGxhdGUgZm9yIHJlbmFtaW5nIGEgY29sdW1uLgogICAqCiAgICogQGludGVybmFsCiAgICovCiAgCiAgcHJvdGVjdGVkIHN0cmluZyAkcmVuYW1lQ29sdW1uID0gJ0FMVEVSIFRBQkxFICVzIFJFTkFNRSBDT0xVTU4gJXMgVE8gJXMnOyAgLy8gdGFibGUsIG9sZC1jb2x1bW4sIG5ldy1jb2x1bW4sIGNvbHVtbi1kZWZpbml0aW9ucyAobm90IHVzZWQgYnkgZGVmYXVsdCkKICAKICAvKioKICAgKiBAaWdub3JlCiAgICovCiAgcHJvdGVjdGVkIHN0cmluZyAkbmFtZVJlZ2V4ID0gJ1x3JzsKICAKICAvKioKICAgKiBAaWdub3JlCiAgICovCiAgcHJvdGVjdGVkIHN0cmluZyAkbmFtZVJlZ2V4QnJhY2tldHMgPSAnYS16QS1aMC05X1woXCknOwogIAogIC8qKgogICAqIEBpZ25vcmUKICAgKi8KICBwcm90ZWN0ZWQgYm9vbCAkYXV0b0luY3JlbWVudCA9IEZBTFNFOwogIAogIC8qKgogICAqIEBpZ25vcmUKICAgKi8KICBwcm90ZWN0ZWQgYXJyYXkgJGludmFsaWRSZXNpemVUeXBlczQgPSBbJ0NMT0InLCAnQkxPQicsICdURVhUJywgJ0RBVEUnLCAnVElNRSddOyAvLyBmb3IgY2hhbmdldGFibGVzcWwKICAKICAvKioKICAgKiBDb25zdHJ1Y3RvcgogICAqCiAgICogQHBhcmFtIFxDTVNNU0V4dFxkYlxFbmdpbmVcQ29ubmVjdGlvbiAkY29ubgogICAqLwogIHByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdChDb25uZWN0aW9uICRjb25uKQogIHsKICAgICR0aGlzLT5jb25uZWN0aW9uID0gJGNvbm47CiAgfQogIAogIC8qKgogICAqIEEgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBkYXRhYmFzZSB0eXBlLgogICAqCiAgICogQHJldHVybiBzdHJpbmcKICAgKiBAaW50ZXJuYWwKICAgKi8KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX0RCVHlwZSgpIDogc3RyaW5nIHsgcmV0dXJuICR0aGlzLT5jb25uZWN0aW9uLT5EYlR5cGUoKTsgfQogIAogIC8qKgogICAqIEEgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBkYXRhZGljdGlvbmFyeSBtZXRhIHR5cGUgZm9yIGEgZGF0YWJhc2UgY29sdW1uIHR5cGUuCiAgICoKICAgKiBAcGFyYW0gbWl4ZWQgICR0ICAgICAgICBUaGUgZGF0YWJhc2UgY29sdW1uIHR5cGUKICAgKiBAcGFyYW0gaW50ICAgICRsZW4gICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBmaWVsZCAoc29tZSBkYXRhYmFzZSB0eXBlcyBtYXkgaWdub3JlIHRoaXMpCiAgICogQHBhcmFtIG1peGVkICAkZmllbGRvYmogQW4gb3B0aW9uYWwgcmVmZXJlbmNlIHRvIGEgZmllbGQgb2JqZWN0IChhZHZhbmNlZCkKICAgKgogICAqIEByZXR1cm4gc3RyaW5nCiAgICogQGludGVybmFsCiAgICovCiAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIE1ldGFUeXBlKCR0LCAkbGVuID0gLTEsICRmaWVsZG9iaiA9IEZBTFNFKSA6IHN0cmluZzsKICAKICAvKioKICAgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgdGFibGVzIGluIHRoZSBjdXJyZW50bHkgY29ubmVjdGVkIGRhdGFiYXNlLgogICAqCiAgICogQHJldHVybiBzdHJpbmdbXQogICAqLwogIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBNZXRhVGFibGVzKCkgOiBhcnJheTsKICAKICAvKioKICAgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgY29sdW1ucyBpbiBhIHRhYmxlIHdpdGhpbiB0aGUgY3VycmVudGx5IGNvbm5lY3RlZCBkYXRhYmFzZS4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlIFRoZSB0YWJsZSBuYW1lLgogICAqCiAgICogQHJldHVybiBzdHJpbmdbXQogICAqLwogIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBNZXRhQ29sdW1ucygkdGFibGUpIDogYXJyYXk7CiAgCiAgLyoqCiAgICogUmV0dXJuIGEgZGF0YWJhc2Ugc3BlY2lmaWMgY29sdW1uIHR5cGUgZ2l2ZW4gYSBkYXRhZGljdGlvbmFyeSBtZXRhIGNvbHVtbiB0eXBlLgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkbWV0YSBUaGUgZGF0YWRpY3Rpb25hcnkgY29sdW1uIHR5cGUuCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZwogICAqIEBpbnRlcm5hbAogICAqLwogIGFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBBY3R1YWxUeXBlKCRtZXRhKSA6IHN0cmluZzsKICAKICAvKioKICAgKiBHaXZlbiBhIHN0cmluZyBuYW1lLCByZXR1cm4gYSBxdW90ZWQgbmFtZSBpbiBhIGZvcm0gc3VpdGFibGUgZm9yIHRoZSBkYXRhYmFzZS4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgICAgICAgICAgVGhlIGlucHV0IG5hbWUKICAgKiBAcGFyYW0gYm9vbCAgICRhbGxvd0JyYWNrZXRzIHdldGhlciBicmFja2V0cyBzaG91bGQgYmUgcXVvdGVkIG9yIG5vdC4KICAgKgogICAqIEByZXR1cm4gc3RyaW5nCiAgICogQGludGVybmFsCiAgICovCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIE5hbWVRdW90ZSgkbmFtZSA9IE5VTEwsICRhbGxvd0JyYWNrZXRzID0gRkFMU0UpCiAgewogICAgaWYoIVxpc19zdHJpbmcoJG5hbWUpKSB7IHJldHVybiBGQUxTRTsgfQogICAgCiAgICAkbmFtZSA9IFx0cmltKCRuYW1lKTsKICAgIAogICAgaWYoIVxpc19vYmplY3QoJHRoaXMtPmNvbm5lY3Rpb24pKSB7IHJldHVybiAkbmFtZTsgfQogICAgCiAgICAkcXVvdGUgPSAkdGhpcy0+Y29ubmVjdGlvbi0+bmFtZVF1b3RlOwogICAgCiAgICAvLyBpZiBuYW1lIGlzIG9mIHRoZSBmb3JtIGBuYW1lYCwgcXVvdGUgaXQKICAgIGlmKFxwcmVnX21hdGNoKCcvXmAoLispYCQvJywgJG5hbWUsICRtYXRjaGVzKSkKICAgIHsKICAgICAgcmV0dXJuICRxdW90ZSAuICRtYXRjaGVzWzFdIC4gJHF1b3RlOwogICAgfQogICAgCiAgICAvLyBpZiBuYW1lIGNvbnRhaW5zIHNwZWNpYWwgY2hhcmFjdGVycywgcXVvdGUgaXQKICAgICRyZWdleCA9ICgkYWxsb3dCcmFja2V0cykgPyAkdGhpcy0+bmFtZVJlZ2V4QnJhY2tldHMgOiAkdGhpcy0+bmFtZVJlZ2V4OwogICAgCiAgICBpZighXHByZWdfbWF0Y2goJy9eWycgLiAkcmVnZXggLiAnXSskLycsICRuYW1lKSkKICAgIHsKICAgICAgcmV0dXJuICRxdW90ZSAuICRuYW1lIC4gJHF1b3RlOwogICAgfQogICAgCiAgICByZXR1cm4gJG5hbWU7CiAgfQogIAogIC8qKgogICAqIEdpdmVuIGEgdGFibGUgbmFtZSwgb3B0aW9uYWxseSBxdW90ZSBpdC4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgKgogICAqIEByZXR1cm4gc3RyaW5nCiAgICogQGludGVybmFsCiAgICovCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIFRhYmxlTmFtZSgkbmFtZSkKICB7CiAgICByZXR1cm4gJHRoaXMtPk5hbWVRdW90ZSgkbmFtZSk7CiAgfQogIAogIC8qKgogICAqIEdpdmVuIGFuIGFycmF5IG9mIFNRTCBjb21tYW5kcyBleGVjdXRlIHRoZW0gaW4gc2VxdWVuY2UuCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nW10gJHNxbCAgICAgICAgICAgICBBbiBhcnJheSBvZiBzcWwgY29tbWFuZHMuCiAgICogQHBhcmFtIGJvb2wgICAgICRjb250aW51ZU9uRXJyb3Igd2V0aGVyIHRvIGNvbnRpbnVlIG9uIGVycm9ycyBvciBub3QuCiAgICoKICAgKiBAcmV0dXJuIGludCAyIGZvciBubyBlcnJvcnMsIDEgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAgICogQHRocm93cyBcRXhjZXB0aW9uCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIEV4ZWN1dGVTUUxBcnJheSgkc3FsLCAkY29udGludWVPbkVycm9yID0gVFJVRSkKICB7CiAgICAkcmV6ICA9IDI7CiAgICAkY29ubiA9ICR0aGlzLT5jb25uZWN0aW9uOwogICAgCiAgICBmb3JlYWNoKCRzcWwgYXMgJGxpbmUpCiAgICB7CiAgICAgIHRyeQogICAgICB7CiAgICAgICAgJG9rID0gJGNvbm4tPkV4ZWN1dGUoJGxpbmUpOwogICAgICAgIAogICAgICAgIGlmKCEkb2spCiAgICAgICAgewogICAgICAgICAgaWYoISRjb250aW51ZU9uRXJyb3IpIHsgcmV0dXJuIDA7IH0KICAgICAgICAgIAogICAgICAgICAgJHJleiA9IDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNhdGNoKFxFeGNlcHRpb24gJGUpCiAgICAgIHsKICAgICAgICBpZighJGNvbnRpbnVlT25FcnJvcikgeyB0aHJvdyAkZTsgfQogICAgICAgIAogICAgICAgICRyZXogPSAxOwogICAgICAgIC8vIGVhdCB0aGUgZXhjZXB0aW9uCiAgICAgIH0KICAgIH0KICAgIAogICAgcmV0dXJuICRyZXo7CiAgfQogIAogIC8qKgogICAqIENyZWF0ZSB0aGUgU1FMIGNvbW1hbmRzIHRoYXQgd2lsbCByZXN1bHQgaW4gYSBkYXRhYmFzZSBiZWluZyBjcmVhdGVkLgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkZGJuYW1lCiAgICogQHBhcmFtIGFycmF5ICAkb3B0aW9ucyBBbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBkYXRhYmFzZSBvcHRpb25zLgogICAqCiAgICogQHJldHVybiBzdHJpbmdbXSBBbiBhcnJheSBvZiBzdHJpbmdzIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCB0aGUgRXhlY3V0ZVNRTEFycmF5IG1ldGhvZAogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBDcmVhdGVEYXRhYmFzZShzdHJpbmcgJGRibmFtZSwgJG9wdGlvbnMgPSBGQUxTRSkgOiBhcnJheQogIHsKICAgICRvcHRpb25zID0gJHRoaXMtPl9PcHRpb25zKCRvcHRpb25zKTsKICAgICRzcWwgICAgID0gW107CiAgICAKICAgICRzID0gJ0NSRUFURSBEQVRBQkFTRSAnIC4gJHRoaXMtPk5hbWVRdW90ZSgkZGJuYW1lKTsKICAgIAogICAgaWYoaXNzZXQoJG9wdGlvbnNbJHRoaXMtPnVwcGVyTmFtZV0pKQogICAgewogICAgICAkcyAuPSAnICcgLiAkb3B0aW9uc1skdGhpcy0+dXBwZXJOYW1lXTsKICAgIH0KICAgIAogICAgJHNxbFtdID0gJHM7CiAgICAKICAgIHJldHVybiAkc3FsOwogIH0KICAKICAvKioKICAgKiBHZW5lcmF0ZSB0aGUgU1FMIHRvIGNyZWF0ZSBhbiBpbmRleC4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgJGlkeG5hbWUgICAgVGhlIGluZGV4IG5hbWUKICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICR0YWJuYW1lICAgIFRoZSB0YWJsZSBuYW1lCiAgICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAkZmxkcyAgICAgICBBIGxpc3Qgb2YgdGhlIHRhYmxlIGZpZWxkcyB0byBjcmVhdGUgdGhlIGluZGV4IHdpdGguICBFaXRoZXIgYW4gYXJyYXkgb2Ygc3RyaW5ncwogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdC4KICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICRpZHhvcHRpb25zIEFuIGFzc29jaWF0aXZlIGFycmF5IG9mIG9wdGlvbnMKICAgKgogICAqIEByZXR1cm4gc3RyaW5nW10gQW4gYXJyYXkgb2Ygc3RyaW5ncyBzdWl0YWJsZSBmb3IgdXNlIHdpdGggdGhlIEV4ZWN1dGVTUUxBcnJheSBtZXRob2QKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gQ3JlYXRlSW5kZXhTUUwoJGlkeG5hbWUsICR0YWJuYW1lLCAkZmxkcywgJGlkeG9wdGlvbnMgPSBGQUxTRSkgOiBhcnJheQogIHsKICAgIGlmKCFcaXNfYXJyYXkoJGZsZHMpKQogICAgewogICAgICAkZmxkcyA9IFxhcnJheV9tYXAoJ3RyaW0nLCBcZXhwbG9kZSgnLCcsICRmbGRzKSk7CiAgICB9CiAgICBmb3JlYWNoKCRmbGRzIGFzICRrZXkgPT4gJGZsZCkKICAgIHsKICAgICAgIyBzb21lIGluZGV4ZXMgY2FuIHVzZSBwYXJ0aWFsIGZpZWxkcywgZWcuIGluZGV4IGZpcnN0IDMyIGNoYXJzIG9mICJuYW1lIiB3aXRoIE5BTUUoMzIpCiAgICAgICRmbGRzWyRrZXldID0gJHRoaXMtPk5hbWVRdW90ZSgkZmxkLCAkYWxsb3dCcmFja2V0cyA9IFRSVUUpOwogICAgfQogICAgCiAgICByZXR1cm4gJHRoaXMtPl9JbmRleFNRTCgKICAgICAgJHRoaXMtPk5hbWVRdW90ZSgkaWR4bmFtZSksICR0aGlzLT5UYWJsZU5hbWUoJHRhYm5hbWUpLCAkZmxkcywgJHRoaXMtPl9PcHRpb25zKCRpZHhvcHRpb25zKQogICAgKTsKICB9CiAgCiAgLyoqCiAgICogR2VuZXJhdGUgdGhlIFNRTCB0byBkcm9wIGFuIGluZGV4CiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICRpZHhuYW1lIFRoZSBpbmRleCBuYW1lCiAgICogQHBhcmFtIHN0cmluZyAkdGFibmFtZSBUaGUgdGFibGUgbmFtZQogICAqCiAgICogQHJldHVybiBzdHJpbmdbXSBBbiBhcnJheSBvZiBzdHJpbmdzIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCB0aGUgRXhlY3V0ZVNRTEFycmF5IG1ldGhvZAogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBEcm9wSW5kZXhTUUwoJGlkeG5hbWUsICR0YWJuYW1lID0gTlVMTCkKICB7CiAgICByZXR1cm4gW1xzcHJpbnRmKCR0aGlzLT5kcm9wSW5kZXgsICR0aGlzLT5OYW1lUXVvdGUoJGlkeG5hbWUpKSwgJHRoaXMtPlRhYmxlTmFtZSgkdGFibmFtZSldOwogIH0KICAKICAvKioKICAgKiBHZW5lcmF0ZSB0aGUgU1FMIHRvIGFkZCBjb2x1bW5zIHRvIGEgdGFibGUuCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICR0YWJuYW1lIFRoZSBUYWJsZSBuYW1lLgogICAqIEBwYXJhbSBzdHJpbmcgJGZsZHMgICAgVGhlIGNvbHVtbiBkZWZpbml0aW9ucyAodXNpbmcgRGF0YURpY3Rpb25hcnkgbWV0YSB0eXBlcykKICAgKgogICAqIEByZXR1cm4gc3RyaW5nW10gQW4gYXJyYXkgb2Ygc3RyaW5ncyBzdWl0YWJsZSBmb3IgdXNlIHdpdGggdGhlIEV4ZWN1dGVTUUxBcnJheSBtZXRob2QKICAgKiBAc2VlIENyZWF0ZVRhYmxlU1FMCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIEFkZENvbHVtblNRTCgkdGFibmFtZSwgJGZsZHMpCiAgewogICAgJHRhYm5hbWUgPSAkdGhpcy0+VGFibGVOYW1lKCR0YWJuYW1lKTsKICAgICRzcWwgICAgID0gW107CiAgICBbJGxpbmVzLCAkcGtleV0gPSAkdGhpcy0+X0dlbkZpZWxkcygkZmxkcyk7CiAgICAkYWx0ZXIgPSAnQUxURVIgVEFCTEUgJyAuICR0YWJuYW1lIC4gJHRoaXMtPmFkZENvbCAuICcgJzsKICAgIGZvcmVhY2goJGxpbmVzIGFzICR2KQogICAgewogICAgICAkc3FsW10gPSAkYWx0ZXIgLiAkdjsKICAgIH0KICAgIAogICAgcmV0dXJuICRzcWw7CiAgfQogIAogIC8qKgogICAqIENoYW5nZSB0aGUgZGVmaW5pdGlvbiBvZiBvbmUgY29sdW1uCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICR0YWJuYW1lICAgdGFibGUtbmFtZQogICAqIEBwYXJhbSBzdHJpbmcgJGZsZHMgICAgICBjb2x1bW4tbmFtZSBhbmQgdHlwZSBmb3IgdGhlIGNoYW5nZWQgY29sdW1uLgogICAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlZmxkcyBjb21wbGV0ZSBkZWZpbnRpb24gb2YgdGhlIG5ldyB0YWJsZSwgZWcuIGZvciBwb3N0Z3JlcywgZGVmYXVsdCAnJwogICAqIEBwYXJhbSBhcnJheS9zdHJpbmcgJHRhYmxlb3B0aW9ucyBvcHRpb25zIGZvciB0aGUgbmV3IHRhYmxlIHNlZSBDcmVhdGVUYWJsZVNRTCwgZGVmYXVsdCAnJwogICAqCiAgICogQHJldHVybiBzdHJpbmdbXSBBbiBhcnJheSBvZiBzdHJpbmdzIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCB0aGUgRXhlY3V0ZVNRTEFycmF5IG1ldGhvZAogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBBbHRlckNvbHVtblNRTCgkdGFibmFtZSwgJGZsZHMsICR0YWJsZWZsZHMgPSAnJywgJHRhYmxlb3B0aW9ucyA9ICcnKQogIHsKICAgICR0YWJuYW1lID0gJHRoaXMtPlRhYmxlTmFtZSgkdGFibmFtZSk7CiAgICAkc3FsICAgICA9IFtdOwogICAgWyRsaW5lcywgJHBrZXldID0gJHRoaXMtPl9HZW5GaWVsZHMoJGZsZHMpOwogICAgJGFsdGVyID0gJ0FMVEVSIFRBQkxFICcgLiAkdGFibmFtZSAuICR0aGlzLT5hbHRlckNvbCAuICcgJzsKICAgIGZvcmVhY2goJGxpbmVzIGFzICR2KQogICAgewogICAgICAkc3FsW10gPSAkYWx0ZXIgLiAkdjsKICAgIH0KICAgIAogICAgcmV0dXJuICRzcWw7CiAgfQogIAogIC8qKgogICAqIFJlbmFtZSBvbmUgY29sdW1uIGluIGEgdGFibGUuCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICR0YWJuYW1lICAgdGFibGUtbmFtZQogICAqIEBwYXJhbSBzdHJpbmcgJG9sZGNvbHVtbiBjb2x1bW4tbmFtZSB0byBiZSByZW5hbWVkCiAgICogQHBhcmFtIHN0cmluZyAkbmV3Y29sdW1uIG5ldyBjb2x1bW4tbmFtZQogICAqIEBwYXJhbSBzdHJpbmcgJGZsZHMgICAgICBjb21wbGV0ZSBjb2x1bW4tZGVmaW50aW9uLXN0cmluZyBsaWtlIGZvciBBZGRDb2x1bW5TUUwsIG9ubHkgdXNlZCBieSBteXNxbCBhdG0uLAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScnCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZ1tdIEFuIGFycmF5IG9mIHN0cmluZ3Mgc3VpdGFibGUgZm9yIHVzZSB3aXRoIHRoZSBFeGVjdXRlU1FMQXJyYXkgbWV0aG9kCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIFJlbmFtZUNvbHVtblNRTCgkdGFibmFtZSwgJG9sZGNvbHVtbiwgJG5ld2NvbHVtbiwgJGZsZHMgPSAnJykKICB7CiAgICAkdGFibmFtZSA9ICR0aGlzLT5UYWJsZU5hbWUoJHRhYm5hbWUpOwogICAgaWYoJGZsZHMpCiAgICB7CiAgICAgIFskbGluZXMsICRwa2V5XSA9ICR0aGlzLT5fR2VuRmllbGRzKCRmbGRzKTsKICAgICAgJGZpcnN0ID0gXGN1cnJlbnQoJGxpbmVzKTsKICAgICAgWywgJGNvbHVtbl9kZWZdID0gXHByZWdfc3BsaXQoIi9bXHQgXSsvIiwgJGZpcnN0LCAyKTsKICAgIH0KICAgIAogICAgcmV0dXJuIFsKICAgICAgXHNwcmludGYoCiAgICAgICAgJHRoaXMtPnJlbmFtZUNvbHVtbiwgJHRhYm5hbWUsICR0aGlzLT5OYW1lUXVvdGUoJG9sZGNvbHVtbiksICR0aGlzLT5OYW1lUXVvdGUoJG5ld2NvbHVtbikgKSwgJGNvbHVtbl9kZWYKICAgIF07CiAgfQogIAogIC8qKgogICAqIERyb3Agb25lIGNvbHVtbiBmcm9tIGEgdGFibGUuCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICR0YWJuYW1lICAgICAgdGFibGUtbmFtZQogICAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgJGZsZHMgICAgICAgICBjb2x1bW4tbmFtZSBhbmQgdHlwZSBmb3IgdGhlIGNoYW5nZWQgY29sdW1uCiAgICogQHBhcmFtIHN0cmluZyAkdGFibGVmbGRzICAgIGNvbXBsZXRlIGRlZmludGlvbiBvZiB0aGUgbmV3IHRhYmxlLCBlZy4gZm9yIHBvc3RncmVzLCBkZWZhdWx0ICcnCiAgICogQHBhcmFtIGFycmF5ICAkdGFibGVvcHRpb25zIC9zdHJpbmcgJHRhYmxlb3B0aW9ucyBvcHRpb25zIGZvciB0aGUgbmV3IHRhYmxlIHNlZSBDcmVhdGVUYWJsZVNRTCwgZGVmYXVsdCAnJwogICAqCiAgICogQHJldHVybiBzdHJpbmdbXSBBbiBhcnJheSBvZiBzdHJpbmdzIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCB0aGUgRXhlY3V0ZVNRTEFycmF5IG1ldGhvZAogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBEcm9wQ29sdW1uU1FMKCR0YWJuYW1lLCAkZmxkcywgJHRhYmxlZmxkcyA9ICcnLCAkdGFibGVvcHRpb25zID0gJycpCiAgewogICAgJHRhYm5hbWUgPSAkdGhpcy0+VGFibGVOYW1lKCR0YWJuYW1lKTsKICAgIAogICAgaWYoIVxpc19hcnJheSgkZmxkcykpIHsgJGZsZHMgPSBcZXhwbG9kZSgnLCcsICRmbGRzKTsgfQogICAgCiAgICAkc3FsICAgPSBbXTsKICAgICRhbHRlciA9ICdBTFRFUiBUQUJMRSAnIC4gJHRhYm5hbWUgLiAkdGhpcy0+ZHJvcENvbCAuICcgJzsKICAgIGZvcmVhY2goJGZsZHMgYXMgJHYpCiAgICB7CiAgICAgICRzcWxbXSA9ICRhbHRlciAuICR0aGlzLT5OYW1lUXVvdGUoJHYpOwogICAgfQogICAgCiAgICByZXR1cm4gJHNxbDsKICB9CiAgCiAgLyoqCiAgICogRHJvcCBvbmUgdGFibGUsIGFuZCBhbGwgb2YgaXQncyBpbmRleGVzCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICR0YWJuYW1lIFRoZSB0YWJsZSBuYW1lIHRvIGRyb3AuCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZ1tdIEFuIGFycmF5IG9mIHN0cmluZ3Mgc3VpdGFibGUgZm9yIHVzZSB3aXRoIHRoZSBFeGVjdXRlU1FMQXJyYXkgbWV0aG9kCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIERyb3BUYWJsZVNRTCgkdGFibmFtZSkKICB7CiAgICByZXR1cm4gW1xzcHJpbnRmKCR0aGlzLT5kcm9wVGFibGUsICR0aGlzLT5UYWJsZU5hbWUoJHRhYm5hbWUpKV07CiAgfQogIAogIC8qKgogICAqIFJlbmFtZSBhIHRhYmxlLgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkdGFibmFtZSBUaGUgdGFibGUgbmFtZQogICAqIEBwYXJhbSBzdHJpbmcgJG5ld25hbWUgVGhlIG5ldyB0YWJsZSBuYW1lCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZ1tdIEFuIGFycmF5IG9mIHN0cmluZ3Mgc3VpdGFibGUgZm9yIHVzZSB3aXRoIHRoZSBFeGVjdXRlU1FMQXJyYXkgbWV0aG9kCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIFJlbmFtZVRhYmxlU1FMKCR0YWJuYW1lLCAkbmV3bmFtZSkKICB7CiAgICByZXR1cm4gW1xzcHJpbnRmKCR0aGlzLT5yZW5hbWVUYWJsZSwgJHRoaXMtPlRhYmxlTmFtZSgkdGFibmFtZSksICR0aGlzLT5UYWJsZU5hbWUoJG5ld25hbWUpKV07CiAgfQogIAogIC8qKgogICAqIEdlbmVyYXRlIHRoZSBTUUwgdG8gY3JlYXRlIGEgbmV3IHRhYmxlLgogICAqCiAgICogVGhlIGZsZHMgc3RyaW5nIGlzIGEgY29tbWEgc2VwYXJhdGVkIG9mIGZpZWxkIGRlZmluaXRpb25zLCB3aGVyZSBlYWNoIGRlZmluaXRpb24gaXMgb2YgdGhlIGZvcm0KICAgKiAgICBmaWVsZG5hbWUgdHlwZSBjb2x1bW5zaXplIG90aGVyb3B0aW9ucwogICAqCiAgICogVGhlIHR5cGUgZmllbGRzIGFyZSBjb2RlcyB0aGF0IG1hcCB0byByZWFsIGRhdGFiYXNlIHR5cGVzIGFzIGZvbGxvd3M6CiAgICogPGRsPgogICAqICA8ZHQ+QzwvZHQ+CiAgICogIDxkZD5WYXJjaGFyLCBjYXBwZWQgdG8gMjU1IGNoYXJhY3RlcnMuPC9kZD4KICAgKiAgPGR0Plg8L2R0PgogICAqICA8ZGQ+VGV4dDwvZGQ+CiAgICogIDxkdD5YTDwvZHQ+CiAgICogIDxkZD5Mb25nVGV4dDwvZGQ+CiAgICogIDxkdD5DMjwvZHQ+CiAgICogIDxkZD5WYXJjaGFyLCBjYXBwZWQgdG8gMjU1IGNoYXJhY3RlcnM8L2RkPgogICAqICA8ZHQ+WEw8L2R0PgogICAqICA8ZGQ+TG9uZ1RleHQ8L2RkPgogICAqICA8ZHQ+QjwvZHQ+CiAgICogIDxkZD5Mb25nQmxvYjwvZGQ+CiAgICogIDxkdD5EPC9kdD4KICAgKiAgPGRkPkRhdGU8L2RkPgogICAqICA8ZHQ+RFQ8L2R0PgogICAqICA8ZGQ+RGF0ZVRpbWU8L2RkPgogICAqICA8ZHQ+VDwvZHQ+CiAgICogIDxkZD5UaW1lPC9kZD4KICAgKiAgPGR0PlRTPC9kdD4KICAgKiAgPGRkPlRpbWVzdGFtcDwvZGQ+CiAgICogIDxkdD5MPC9kdD4KICAgKiAgPGRkPlRpbnlJbnQ8L2RkPgogICAqICA8ZHQ+UiAvIEk0IC8gSTwvZHQ+CiAgICogIDxkZD5JbnRlZ2VyPC9kZD4KICAgKiAgPGR0PkkxPC9kdD4KICAgKiAgPGRkPlRpbnlJbnQ8L2RkPgogICAqICA8ZHQ+STI8L2R0PgogICAqICA8ZGQ+U21hbGxJbnQ8L2RkPgogICAqICA8ZHQ+STQ8L2R0PgogICAqICA8ZGQ+QmlnSW50PC9kZD4KICAgKiAgPGR0PkY8L2R0PgogICAqICA8ZGQ+RG91YmxlPC9kZD4KICAgKiAgPGR0Pk48L2R0PgogICAqICA8ZGQ+TnVtZXJpYzwvZGQ+CiAgICo8L2RsPgogICAqCiAgICogVGhlIG90aGVyb3B0aW9ucyBmaWVsZCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CiAgICo8ZGw+CiAgICogIDxkdD5BVVRPPC9kdD4KICAgKiAgPGRkPkF1dG8gaW5jcmVtZW50LiBBbHNvIHNldHMgTk9UTlVMTC48L2RkPgogICAqICA8ZHQ+QVVUT0lOQ1JFTUVOVDwvZHQ+CiAgICogIDxkZD5TYW1lIGFzIEFVVE88L2RkPgogICAqICA8ZHQ+S0VZPC9kdD4KICAgKiAgPGRkPlByaW1hcnkga2V5IGZpZWxkLiAgQWxzbyBzZXRzIE5PVE5VTEwuIENvbXBvdW5kIGtleXMgYXJlIHN1cHBvcnRlZC48L2RkPgogICAqICA8ZHQ+UFJJbUFSWTwvZHQ+CiAgICogIDxkZD5TYW1lIGFzIEtFWTwvZGQ+CiAgICogIDxkdD5ERUZBVUxUPC9kdD4KICAgKiAgPGRkPlRoZSBkZWZhdWx0IHZhbHVlLiAgQ2hhcmFjdGVyIHN0cmluZ3MgYXJlIGF1dG8tcXVvdGVkIHVubGVzcyB0aGUgc3RyaW5nIGJlZ2lucyB3aXRoIGEgc3BhY2UuICBpLmU6ICcgU1lTREFURQogICAqICAnLjwvZGQ+CiAgICogIDxkdD5ERUY8L2R0PgogICAqICA8ZGQ+U2FtZSBhcyBERUZBVUxUPC9kZD4KICAgKiAgPGR0PkNPTlNUUkFJTlRTPC9kdD4KICAgKiAgPGRkPkFkZGl0aW9uYWwgY29uc3RyYWludHMgZGVmaW5lZCBhdCB0aGUgZW5kIG9mIHRoZSBmaWVsZCBkZWZpbml0aW9uLjwvZGQ+CiAgICo8L2RsPgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkdGFibmFtZSAgICAgIFRoZSB0YWJsZSBuYW1lCiAgICogQHBhcmFtIHN0cmluZyAkZmxkcyAgICAgICAgIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZmllbGQgZGVmaW5pdGlvbnMgdXNpbmcgZGF0YWRpY3Rpb25hcnkgc3ludGF4LgogICAqIEBwYXJhbSBtaXhlZCAgJHRhYmxlb3B0aW9ucyBBIHN0cmluZyBzcGVjaWZ5aW5nIHRhYmxlIG9wdGlvbnMgKGRhdGFiYXNlIGRyaXZlciBzcGVjaWZpYykgZm9yIHRoZSB0YWJsZSBjcmVhdGlvbgogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLiAgT3IgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgdGFibGUgb3B0aW9ucywga2V5cyBiZWluZyB0aGUgZGF0YWJhc2UgdHlwZSAoYXMKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlKS4KICAgKgogICAqIEByZXR1cm4gc3RyaW5nW10gQW4gYXJyYXkgb2Ygc3RyaW5ncyBzdWl0YWJsZSBmb3IgdXNlIHdpdGggdGhlIEV4ZWN1dGVTUUxBcnJheSBtZXRob2QKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gQ3JlYXRlVGFibGVTUUwoJHRhYm5hbWUsICRmbGRzLCAkdGFibGVvcHRpb25zID0gRkFMU0UpIDogYXJyYXkKICB7CiAgICBpZigkdGFibGVvcHRpb25zICYmIFxpc19zdHJpbmcoJHRhYmxlb3B0aW9ucykpCiAgICB7CiAgICAgICRkYnR5cGUgICAgICAgPSAkdGhpcy0+X0RCVHlwZSgpOwogICAgICAkdGFibGVvcHRpb25zID0gWyRkYnR5cGUgPT4gJHRhYmxlb3B0aW9uc107CiAgICB9CiAgICAKICAgIFskbGluZXMsICRwa2V5XSA9ICR0aGlzLT5fR2VuRmllbGRzKCRmbGRzLCBUUlVFKTsKICAgICR0YWJvcHRpb25zID0gJHRoaXMtPl9PcHRpb25zKCR0YWJsZW9wdGlvbnMpOwogICAgJHRhYm5hbWUgICAgPSAkdGhpcy0+VGFibGVOYW1lKCR0YWJuYW1lKTsKICAgICRzcWwgICAgICAgID0gJHRoaXMtPl9UYWJsZVNRTCgkdGFibmFtZSwgJGxpbmVzLCAkcGtleSwgJHRhYm9wdGlvbnMpOwogICAgJHRzcWwgICAgICAgPSAkdGhpcy0+X1RyaWdnZXJzKCR0YWJuYW1lLCAkdGFib3B0aW9ucyk7CiAgICAKICAgIGZvcmVhY2goJHRzcWwgYXMgJHMpIHsgJHNxbFtdID0gJHM7IH0KICAgIAogICAgcmV0dXJuICRzcWw7CiAgfQogIAogIC8qKgogICAqIFBhcnQgb2YgdGhlIHByb2Nlc3Mgb2YgcGFyc2luZyB0aGUgZGF0YWRpY3Rpb25hcnkgZm9ybWF0IGludG8gZGF0YWJhc2Ugc3BlY2lmaWMgY29tbWFuZHMuCiAgICoKICAgKiBAaW50ZXJuYWwKICAgKi8KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX0dlbkZpZWxkcygkZmxkcywgJHdpZGVzcGFjaW5nID0gRkFMU0UpCiAgewogICAgaWYoXGlzX3N0cmluZygkZmxkcykpCiAgICB7CiAgICAgICRwYWRkaW5nICA9ICcJICc7CiAgICAgICR0eHQgICAgICA9ICRmbGRzIC4gJHBhZGRpbmc7CiAgICAgICRmbGRzICAgICA9IFtdOwogICAgICAkZmxkczAgICAgPSBMZW5zX1BhcnNlQXJncygkdHh0LCAnLCcpOwogICAgICAkaGFzcGFyYW0gPSBGQUxTRTsKICAgICAgCiAgICAgIGZvcmVhY2goJGZsZHMwIGFzICRmMCkKICAgICAgewogICAgICAgIGlmKCFcY291bnQoJGYwKSkgeyBicmVhazsgfQogICAgICAgIAogICAgICAgICRmMSA9IFtdOwogICAgICAgIGZvcmVhY2goJGYwIGFzICR0b2tlbikKICAgICAgICB7CiAgICAgICAgICBzd2l0Y2goXHN0cnRvdXBwZXIoJHRva2VuKSkKICAgICAgICAgIHsKICAgICAgICAgICAgY2FzZSAnQ09OU1RSQUlOVCc6CiAgICAgICAgICAgIGNhc2UgJ0RFRkFVTFQnOgogICAgICAgICAgICAgICRoYXNwYXJhbSA9ICR0b2tlbjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgaWYoJGhhc3BhcmFtKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRmMVskaGFzcGFyYW1dID0gJHRva2VuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJGYxW10gPSAkdG9rZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICRoYXNwYXJhbSA9IEZBTFNFOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJGZsZHNbXSA9ICRmMTsKICAgICAgfQogICAgfQogICAgJHRoaXMtPmF1dG9JbmNyZW1lbnQgPSBGQUxTRTsKICAgICRsaW5lcyAgICAgICAgICAgICAgID0gW107CiAgICAkcGtleSAgICAgICAgICAgICAgICA9IFtdOwogICAgZm9yZWFjaCgkZmxkcyBhcyAkZmxkKQogICAgewogICAgICAkZmxkICAgICAgICAgPSBfYXJyYXlfY2hhbmdlX2tleV9jYXNlKCRmbGQpOwogICAgICAkZm5hbWUgICAgICAgPSBGQUxTRTsKICAgICAgJGZkZWZhdWx0ICAgID0gRkFMU0U7CiAgICAgICRmYXV0b2luYyAgICA9IEZBTFNFOwogICAgICAkZnR5cGUgICAgICAgPSBGQUxTRTsKICAgICAgJGZzaXplICAgICAgID0gRkFMU0U7CiAgICAgICRmcHJlYyAgICAgICA9IEZBTFNFOwogICAgICAkZnByaW1hcnkgICAgPSBGQUxTRTsKICAgICAgJGZub3F1b3RlICAgID0gRkFMU0U7CiAgICAgICRmZGVmdHMgICAgICA9IEZBTFNFOwogICAgICAkZmRlZmRhdGUgICAgPSBGQUxTRTsKICAgICAgJGZjb25zdHJhaW50ID0gRkFMU0U7CiAgICAgICRmbm90bnVsbCAgICA9IEZBTFNFOwogICAgICAkZnVuc2lnbmVkICAgPSBGQUxTRTsKICAgICAgCiAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgLy8gUGFyc2UgYXR0cmlidXRlcwogICAgICBmb3JlYWNoKCRmbGQgYXMgJGF0dHIgPT4gJHYpCiAgICAgIHsKICAgICAgICBpZigyID09ICRhdHRyICYmIFxpc19udW1lcmljKCR2KSkKICAgICAgICB7CiAgICAgICAgICAkYXR0ciA9ICdTSVpFJzsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZihcaXNfbnVtZXJpYygkYXR0cikgJiYgJGF0dHIgPiAxICYmICFcaXNfbnVtZXJpYygkdikpCiAgICAgICAgewogICAgICAgICAgJGF0dHIgPSBcc3RydG91cHBlcigkdik7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCgkYXR0cikKICAgICAgICB7CiAgICAgICAgICBjYXNlICcwJzoKICAgICAgICAgIGNhc2UgJ05BTUUnOgogICAgICAgICAgICAkZm5hbWUgPSAkdjsKICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAnMSc6CiAgICAgICAgICBjYXNlICdUWVBFJzoKICAgICAgICAgICAgJHR5ICAgID0gJHY7CiAgICAgICAgICAgICRmdHlwZSA9ICR0aGlzLT5BY3R1YWxUeXBlKFxzdHJ0b3VwcGVyKCR2KSk7CiAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ1NJWkUnOgogICAgICAgICAgICAkZG90YXQgPSBcc3RycG9zKCR2LCAnLicpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYoRkFMU0UgPT09ICRkb3RhdCkgeyAkZG90YXQgPSBcc3RycG9zKCR2LCAnLCcpOyB9CiAgICAgICAgICAgIAogICAgICAgICAgICBpZihGQUxTRSA9PT0gJGRvdGF0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgJGZzaXplID0gJHY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgJGZzaXplID0gXHN1YnN0cigkdiwgMCwgJGRvdGF0KTsKICAgICAgICAgICAgICAkZnByZWMgPSBcc3Vic3RyKCR2LCAkZG90YXQgKyAxKTsKICAgICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICdVTlNJR05FRCc6CiAgICAgICAgICAgICRmdW5zaWduZWQgPSBUUlVFOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICdBVVRPSU5DUkVNRU5UJzoKICAgICAgICAgIGNhc2UgJ0FVVE8nOgogICAgICAgICAgICAkZmF1dG9pbmMgPSBUUlVFOwogICAgICAgICAgICAkZm5vdG51bGwgPSBUUlVFOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICdLRVknOgogICAgICAgICAgY2FzZSAnUFJJTUFSWSc6CiAgICAgICAgICAgICRmcHJpbWFyeSA9ICR2OwogICAgICAgICAgICAkZm5vdG51bGwgPSBUUlVFOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICdERUYnOgogICAgICAgICAgY2FzZSAnREVGQVVMVCc6CiAgICAgICAgICAgICRmZGVmYXVsdCA9ICR2OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICdOT1ROVUxMJzoKICAgICAgICAgICAgJGZub3RudWxsID0gJHY7CiAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ05PUVVPVEUnOgogICAgICAgICAgICAkZm5vcXVvdGUgPSAkdjsKICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAnREVGREFURSc6CiAgICAgICAgICAgICRmZGVmZGF0ZSA9ICR2OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICdERUZUSU1FU1RBTVAnOgogICAgICAgICAgICAkZmRlZnRzID0gJHY7CiAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ0NPTlNUUkFJTlQnOgogICAgICAgICAgICAkZmNvbnN0cmFpbnQgPSAkdjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAvLyBWQUxJREFURSBGSUVMRCBJTkZPCiAgICAgIGlmKCcnID09ICRmbmFtZSkgeyByZXR1cm4gRkFMU0U7IH0KICAgICAgCiAgICAgICRmaWQgICA9IFxzdHJ0b3VwcGVyKFxwcmVnX3JlcGxhY2UoJy9eYCguKylgJC8nLCAnJDEnLCAkZm5hbWUpKTsKICAgICAgJGZuYW1lID0gJHRoaXMtPk5hbWVRdW90ZSgkZm5hbWUpOwogICAgICAKICAgICAgaWYoIVxzdHJsZW4oJGZ0eXBlKSkKICAgICAgewogICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICAkZnR5cGUgPSBcc3RydG91cHBlcigkZnR5cGUpOwogICAgICB9CiAgICAgIAogICAgICAkZnR5cGUgPSAkdGhpcy0+X0dldFNpemUoJGZ0eXBlLCAkdHksICRmc2l6ZSwgJGZwcmVjKTsKICAgICAgCiAgICAgIGlmKCdYJyA9PSAkdHkgfHwgJ1gyJyA9PSAkdHkgfHwgJ0InID09ICR0eSkgeyAkZm5vdG51bGwgPSBGQUxTRTsgfSAvLyBzb21lIGJsb2IgdHlwZXMgZG8gbm90IGFjY2VwdCBudWxscwogICAgICAKICAgICAgaWYoJGZwcmltYXJ5KSB7ICRwa2V5W10gPSAkZm5hbWU7IH0KICAgICAgCiAgICAgIC8vIHNvbWUgZGF0YWJhc2VzIGRvIG5vdCBhbGxvdyBibG9icyB0byBoYXZlIGRlZmF1bHRzCiAgICAgIGlmKCdYJyA9PSAkdHkpIHsgJGZkZWZhdWx0ID0gRkFMU0U7IH0KICAgICAgCiAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgLy8gQ09OU1RSVUNUIEZJRUxEIFNRTAogICAgICBpZigkZmRlZnRzKQogICAgICB7CiAgICAgICAgaWYoJ215c3FsJyA9PSBcc3Vic3RyKCR0aGlzLT5fRGJUeXBlKCksIDAsIDUpKQogICAgICAgIHsKICAgICAgICAgICRmdHlwZSA9ICdUSU1FU1RBTVAnOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgJGZkZWZhdWx0ID0gJHRoaXMtPmNvbm5lY3Rpb24tPnN5c1RpbWVTdGFtcDsKICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZSBpZigkZmRlZmRhdGUpCiAgICAgIHsKICAgICAgICBpZignbXlzcWwnID09IFxzdWJzdHIoJHRoaXMtPl9EQlR5cGUoKSwgMCwgNSkpCiAgICAgICAgewogICAgICAgICAgJGZ0eXBlID0gJ1RJTUVTVEFNUCc7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAkZmRlZmF1bHQgPSAkdGhpcy0+Y29ubmVjdGlvbi0+c3lzRGF0ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZSBpZihGQUxTRSAhPT0gJGZkZWZhdWx0ICYmICEkZm5vcXVvdGUpCiAgICAgIHsKICAgICAgICBpZigKICAgICAgICAgICdDJyA9PSAkdHkgb3IgJ1gnID09ICR0eSBvcgogICAgICAgICAgKCInIiAhPSBcc3Vic3RyKCRmZGVmYXVsdCwgMCwgMSkgJiYgIVxpc19udW1lcmljKCRmZGVmYXVsdCkpCiAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgIGlmKAogICAgICAgICAgICAxICE9IFxzdHJsZW4oJGZkZWZhdWx0KSAmJiAnICcgPT0gXHN1YnN0cigkZmRlZmF1bHQsIDAsIDEpICYmICcgJyA9PSBcc3Vic3RyKCRmZGVmYXVsdCwgXHN0cmxlbigkZmRlZmF1bHQpIC0gMSkKICAgICAgICAgICkKICAgICAgICAgIHsKICAgICAgICAgICAgJGZkZWZhdWx0ID0gXHRyaW0oJGZkZWZhdWx0KTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYoXHN0cnRvbG93ZXIoJGZkZWZhdWx0KSAhPT0gJ251bGwnKQogICAgICAgICAgewogICAgICAgICAgICAkZmRlZmF1bHQgPSAkdGhpcy0+Y29ubmVjdGlvbi0+cXN0cigkZmRlZmF1bHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAkc3VmZml4ID0gJHRoaXMtPl9DcmVhdGVTdWZmaXgoJGZuYW1lLCAkZnR5cGUsICRmbm90bnVsbCwgJGZkZWZhdWx0LCAkZmF1dG9pbmMsICRmY29uc3RyYWludCwgJGZ1bnNpZ25lZCk7CiAgICAgIAogICAgICBpZigkd2lkZXNwYWNpbmcpCiAgICAgIHsKICAgICAgICAkZm5hbWUgPSBcc3RyX3BhZCgkZm5hbWUsIDI0KTsKICAgICAgfQogICAgICAkbGluZXNbJGZpZF0gPSAkZm5hbWUgLiAnICcgLiAkZnR5cGUgLiAkc3VmZml4OwogICAgICAKICAgICAgaWYoJGZhdXRvaW5jKQogICAgICB7CiAgICAgICAgJHRoaXMtPmF1dG9JbmNyZW1lbnQgPSBUUlVFOwogICAgICB9CiAgICB9IC8vIGZvcmVhY2ggJGZsZHMKICAgIAogICAgcmV0dXJuIFskbGluZXMsICRwa2V5XTsKICB9CiAgCiAgLyoqCiAgICogR2VuZXJhdGUgdGhlIHNpemUgcGFydCBvZiB0aGUgZGF0YXR5cGUuCiAgICoKICAgKiBAaWdub3JlCiAgICogQGludGVybmFsCiAgICovCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9HZXRTaXplKCRmdHlwZSwgJHR5LCAkZnNpemUsICRmcHJlYykKICB7CiAgICBpZihcc3RybGVuKCRmc2l6ZSkgJiYgJ1gnICE9ICR0eSAmJiAnQicgIT0gJHR5ICYmIEZBTFNFID09PSBcc3RycG9zKCRmdHlwZSwgJygnKSkKICAgIHsKICAgICAgJGZ0eXBlIC49ICcoJyAuICRmc2l6ZTsKICAgICAgCiAgICAgIGlmKFxzdHJsZW4oJGZwcmVjKSkgeyAkZnR5cGUgLj0gJywnIC4gJGZwcmVjOyB9CiAgICAgIAogICAgICAkZnR5cGUgLj0gJyknOwogICAgfQogICAgCiAgICByZXR1cm4gJGZ0eXBlOwogIH0KICAKICAvKioKICAgKiBDcmVhdGUgYSBzdWZmaXgKICAgKgogICAqIEBpbnRlcm5hbAogICAqLwogIHByb3RlY3RlZCBmdW5jdGlvbiBfQ3JlYXRlU3VmZml4KCRmbmFtZSwgJGZ0eXBlLCAkZm5vdG51bGwsICRmZGVmYXVsdCwgJGZhdXRvaW5jLCAkZmNvbnN0cmFpbnQsICRmdW5zaWduZWQpIDogc3RyaW5nCiAgewogICAgJHN1ZmZpeCA9ICcnOwogICAgCiAgICBpZignJyAhPSAkZmRlZmF1bHQpIHsgJHN1ZmZpeCAuPSAiIERFRkFVTFQgJGZkZWZhdWx0IjsgfQogICAgCiAgICBpZigkZm5vdG51bGwpIHsgJHN1ZmZpeCAuPSAnIE5PVCBOVUxMJzsgfQogICAgCiAgICBpZigkZmNvbnN0cmFpbnQpIHsgJHN1ZmZpeCAuPSAnICcgLiAkZmNvbnN0cmFpbnQ7IH0KICAgIAogICAgcmV0dXJuICRzdWZmaXg7CiAgfQogIAogIC8qKgogICAqIGJ1aWxkIFNRTCBjb21tYW5kcyBmb3IgaW5kZXhlcy4KICAgKgogICAqIEBpbnRlcm5hbAogICAqLwogIHByb3RlY3RlZCBmdW5jdGlvbiBfSW5kZXhTUUwoJGlkeG5hbWUsICR0YWJuYW1lLCAkZmxkcywgJGlkeG9wdGlvbnMpIDogYXJyYXkKICB7CiAgICAkc3FsID0gW107CiAgICAKICAgIGlmKGlzc2V0KCRpZHhvcHRpb25zWydSRVBMQUNFJ10pIHx8IGlzc2V0KCRpZHhvcHRpb25zWydEUk9QJ10pKQogICAgewogICAgICAkc3FsW10gPSBcc3ByaW50ZigkdGhpcy0+ZHJvcEluZGV4LCAkaWR4bmFtZSk7CiAgICAgIAogICAgICBpZihpc3NldCgkaWR4b3B0aW9uc1snRFJPUCddKSkgeyByZXR1cm4gJHNxbDsgfQogICAgfQogICAgCiAgICBpZihlbXB0eSAoJGZsZHMpKSB7IHJldHVybiAkc3FsOyB9CiAgICAKICAgICR1bmlxdWUgPSBpc3NldCgkaWR4b3B0aW9uc1snVU5JUVVFJ10pID8gJyBVTklRVUUnIDogJyc7CiAgICAKICAgICRzID0gJ0NSRUFURScgLiAkdW5pcXVlIC4gJyBJTkRFWCAnIC4gJGlkeG5hbWUgLiAnIE9OICcgLiAkdGFibmFtZSAuICcgJzsKICAgIAogICAgaWYoaXNzZXQoJGlkeG9wdGlvbnNbJHRoaXMtPnVwcGVyTmFtZV0pKQogICAgewogICAgICAkcyAuPSAkaWR4b3B0aW9uc1skdGhpcy0+dXBwZXJOYW1lXTsKICAgIH0KICAgIAogICAgaWYoXGlzX2FycmF5KCRmbGRzKSkKICAgIHsKICAgICAgJGZsZHMgPSBcaW1wbG9kZSgnLCAnLCAkZmxkcyk7CiAgICB9CiAgICAKICAgICRzICAgICAuPSAnKCcgLiAkZmxkcyAuICcpJzsKICAgICRzcWxbXSA9ICRzOwogICAgCiAgICByZXR1cm4gJHNxbDsKICB9CiAgCiAgLyoqCiAgICogQSBtZXRob2QgdG8gZHJvcCB0aGUgYXV0byBpbmNyZW1lbnQgY29sdW1uIG9uIGEgdGFibGUuCiAgICoKICAgKiBAZGVwcmVjYXRlZAogICAqIEBpbnRlcm5hbAogICAqLwogIHByb3RlY3RlZCBmdW5jdGlvbiBfRHJvcEF1dG9JbmNyZW1lbnQoJHRhYm5hbWUpIDogYm9vbCB7IHJldHVybiBGQUxTRTsgfQogIAogIC8qKgogICAqIEFuIGludGVybmFsIG1ldGhvZCB0byBnZXQgYSBsaXN0IG9mIGRhdGFiYXNlIHR5cGUgc3BlY2lmaWMgb3B0aW9ucyBmb3IgYSBjb21tYW5kLgogICAqCiAgICogQGludGVybmFsCiAgICovCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldF9kYnR5cGVfb3B0aW9ucygkb3B0cywgJHN1ZmZpeCA9IE5VTEwpCiAgewogICAgJGRidHlwZSA9ICR0aGlzLT5fREJUeXBlKCk7CiAgICAkbGlzdCAgID0gWyRkYnR5cGUgLiAkc3VmZml4LCBcc3RydG91cHBlcigkZGJ0eXBlKSAuICRzdWZmaXgsIFxzdHJ0b2xvd2VyKCRkYnR5cGUpIC4gJHN1ZmZpeF07CiAgICAKICAgIGZvcmVhY2goJGxpc3QgYXMgJG9uZSkKICAgIHsKICAgICAgaWYoaXNzZXQoJG9wdHNbJG9uZV0pICYmIFxpc19zdHJpbmcoJG9wdHNbJG9uZV0pICYmIFxzdHJsZW4oJG9wdHNbJG9uZV0pKQogICAgICB7CiAgICAgICAgcmV0dXJuICRvcHRzWyRvbmVdOwogICAgICB9CiAgICB9CiAgfQogIAogIC8qKgogICAqIEJ1aWxkIHN0cmluZ3MgZm9yIGdlbmVyYXRpbmcgdGFibGVzLgogICAqCiAgICogQGludGVybmFsCiAgICovCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9UYWJsZVNRTCgkdGFibmFtZSwgJGxpbmVzLCAkcGtleSwgJHRhYmxlb3B0aW9ucykgOiBhcnJheQogIHsKICAgICRzcWwgPSBbXTsKICAgIAogICAgaWYoaXNzZXQoJHRhYmxlb3B0aW9uc1snUkVQTEFDRSddKSB8fCBpc3NldCAoJHRhYmxlb3B0aW9uc1snRFJPUCddKSkKICAgIHsKICAgICAgJHNxbFtdID0gXHNwcmludGYoJHRoaXMtPmRyb3BUYWJsZSwgJHRhYm5hbWUpOwogICAgICAKICAgICAgaWYoJHRoaXMtPmF1dG9JbmNyZW1lbnQpCiAgICAgIHsKICAgICAgICAkc0luYyA9ICR0aGlzLT5fRHJvcEF1dG9JbmNyZW1lbnQoJHRhYm5hbWUpOwogICAgICAgIAogICAgICAgIGlmKCRzSW5jKSB7ICRzcWxbXSA9ICRzSW5jOyB9CiAgICAgIH0KICAgICAgCiAgICAgIGlmKGlzc2V0ICgkdGFibGVvcHRpb25zWydEUk9QJ10pKSB7IHJldHVybiAkc3FsOyB9CiAgICB9CiAgICAkcyA9ICJDUkVBVEUgVEFCTEUgJHRhYm5hbWUgKFxuIjsKICAgICRzIC49IFxpbXBsb2RlKCIsXG4iLCAkbGluZXMpOwogICAgCiAgICBpZihcY291bnQoJHBrZXkpID4gMCkKICAgIHsKICAgICAgJHMgLj0gIixcbgkJCQkgUFJJTUFSWSBLRVkgKCI7CiAgICAgICRzIC49IFxpbXBsb2RlKCIsICIsICRwa2V5KSAuICIpIjsKICAgIH0KICAgIAogICAgaWYoaXNzZXQoJHRhYmxlb3B0aW9uc1snQ09OU1RSQUlOVFMnXSkpCiAgICB7CiAgICAgICRzIC49ICJcbiIgLiAkdGFibGVvcHRpb25zWydDT05TVFJBSU5UUyddOwogICAgfQogICAgCiAgICAkc3RyID0gJHRoaXMtPmdldF9kYnR5cGVfb3B0aW9ucygkdGFibGVvcHRpb25zLCAnX0NPTlNUUkFJTlRTJyk7CiAgICAKICAgIGlmKCRzdHIpIHsgJHMgLj0gIlxuIiAuICRzdHI7IH0KICAgIAogICAgJHMgICAuPSAiXG4pIjsKICAgICRzdHIgPSAkdGhpcy0+Z2V0X2RidHlwZV9vcHRpb25zKCR0YWJsZW9wdGlvbnMpOwogICAgCiAgICBpZigkc3RyKSB7ICRzIC49ICRzdHI7IH0KICAgIAogICAgJHNxbFtdID0gJHM7CiAgICAKICAgIHJldHVybiAkc3FsOwogIH0KICAKICAvKioKICAgKiBHZW5lcmF0ZSB0cmlnZ2VycyBpZiBuZWVkZWQuCiAgICogVGhpcyBpcyB1c2VkIHdoZW4gdGFibGUgaGFzIGF1dG8taW5jcmVtZW50aW5nIGZpZWxkIHRoYXQgaXMgZW11bGF0ZWQgdXNpbmcgdHJpZ2dlcnMuCiAgICoKICAgKiBAaW50ZXJuYWwKICAgKi8KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX1RyaWdnZXJzKCR0YWJuYW1lLCAkdGFib3B0aW9ucykgOiBhcnJheSB7IHJldHVybiBbXTsgfQogIAogIC8qKgogICAqIFNhbml0aXplIG9wdGlvbnMsCiAgICoKICAgKiBAaW50ZXJuYWwKICAgKi8KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX1Byb2Nlc3NPcHRpb25zKCRvcHRzKSAgeyByZXR1cm4gJG9wdHM7IH0KICAKICAvKioKICAgKiBDb252ZXJ0IG9wdGlvbnMgaW50byBhIGZvcm1hdCB1c2FibGUgYnkgdGhlIHN5c3RlbS4KICAgKgogICAqIEBpbnRlcm5hbAogICAqLwogIHByb3RlY3RlZCBmdW5jdGlvbiBfT3B0aW9ucygkb3B0cykgOiBhcnJheQogIHsKICAgICRvcHRzID0gJHRoaXMtPl9Qcm9jZXNzT3B0aW9ucygkb3B0cyk7CiAgICAKICAgIGlmKCFcaXNfYXJyYXkoJG9wdHMpKSB7IHJldHVybiBbXTsgfQogICAgCiAgICAkbmV3b3B0cyA9IFtdOwogICAgZm9yZWFjaCgkb3B0cyBhcyAkayA9PiAkdikKICAgIHsKICAgICAgaWYoXGlzX251bWVyaWMoJGspKQogICAgICB7CiAgICAgICAgJG5ld29wdHNbXHN0cnRvdXBwZXIoJHYpXSA9ICR2OwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgICRuZXdvcHRzW1xzdHJ0b3VwcGVyKCRrKV0gPSAkdjsKICAgICAgfQogICAgfQogICAgCiAgICByZXR1cm4gJG5ld29wdHM7CiAgfQogIAogIC8qKgogICAqIEFkZCwgZHJvcCBvciBjaGFuZ2UgY29sdW1ucyB3aXRoaW4gYSB0YWJsZS4KICAgKgogICAqIFRoaXMgZnVuY3Rpb24gY2hhbmdlcy9hZGRzIG5ldyBmaWVsZHMgdG8geW91ciB0YWJsZS4gWW91IGRvbid0CiAgICogaGF2ZSB0byBrbm93IGlmIHRoZSBjb2wgaXMgbmV3IG9yIG5vdC4gSXQgd2lsbCBjaGVjayBvbiBpdHMgb3duLgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkdGFibGVuYW1lICAgIFRoZSB0YWJsZSBuYW1lCiAgICogQHBhcmFtIHN0cmluZyAkZmxkcyAgICAgICAgIFRoZSBmaWVsZCBkZWZpbml0aW9ucwogICAqIEBwYXJhbSBhcnJheSAgJHRhYmxlb3B0aW9ucyBUYWJsZSBvcHRpb25zCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZ1tdIEFuIGFycmF5IG9mIHN0cmluZ3Mgc3VpdGFibGUgZm9yIHVzZSB3aXRoIHRoZSBFeGVjdXRlU1FMQXJyYXkgbWV0aG9kCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIENoYW5nZVRhYmxlU1FMKCR0YWJsZW5hbWUsICRmbGRzLCAkdGFibGVvcHRpb25zID0gRkFMU0UpIDogYXJyYXkKICB7CiAgICAvLyBjaGVjayB0YWJsZSBleGlzdHMKICAgICRjb2xzID0gJHRoaXMtPk1ldGFDb2x1bW5zKCR0YWJsZW5hbWUpOwogICAgCiAgICBpZihlbXB0eSgkY29scykpCiAgICB7CiAgICAgIHJldHVybiAkdGhpcy0+Q3JlYXRlVGFibGVTUUwoJHRhYmxlbmFtZSwgJGZsZHMsICR0YWJsZW9wdGlvbnMpOwogICAgfQogICAgCiAgICBpZihcaXNfYXJyYXkoJGZsZHMpKQogICAgewogICAgICAvLyBDeWNsZSB0aHJvdWdoIHRoZSB1cGRhdGUgZmllbGRzLCBjb21wYXJpbmcgZXhpc3RpbmcgZmllbGRzLAogICAgICAvLyAgdG8gZmllbGRzIHRvIHVwZGF0ZS4KICAgICAgLy8gaWYgdGhlIE1ldGF0eXBlIGFuZCBzaXplIGlzIGV4YWN0bHkgdGhlCiAgICAgIC8vIHNhbWUsIGlnbm9yZSAtIGJ5IE1hcmsgTmV3aGFtCiAgICAgICRob2xkZmxkcyA9IFtdOwogICAgICAKICAgICAgZm9yZWFjaCgkZmxkcyBhcyAkayA9PiAkdikKICAgICAgewogICAgICAgIGlmKGlzc2V0KCRjb2xzWyRrXSkgJiYgXGlzX29iamVjdCgkY29sc1ska10pKQogICAgICAgIHsKICAgICAgICAgICRjICA9ICRjb2xzWyRrXTsKICAgICAgICAgICRtbCA9ICRjLT5tYXhfbGVuZ3RoOwogICAgICAgICAgJG10ID0gJHRoaXMtPk1ldGFUeXBlKCRjLT50eXBlLCAkbWwpOwogICAgICAgICAgCiAgICAgICAgICBpZigtMSA9PSAkbWwpIHsgJG1sID0gJyc7IH0KICAgICAgICAgIAogICAgICAgICAgaWYoJ1gnID09ICRtdCkgeyAkbWwgPSAkdlsnU0laRSddOyB9CiAgICAgICAgICAKICAgICAgICAgIGlmKCgkbXQgIT0gJHZbJ1RZUEUnXSkgfHwgJG1sICE9ICR2WydTSVpFJ10pCiAgICAgICAgICB7CiAgICAgICAgICAgICRob2xkZmxkc1ska10gPSAkdjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICRob2xkZmxkc1ska10gPSAkdjsKICAgICAgICB9CiAgICAgIH0KICAgICAgJGZsZHMgPSAkaG9sZGZsZHM7CiAgICB9CiAgICAKICAgIC8vIGFscmVhZHkgZXhpc3RzLCBhbHRlciB0YWJsZSBpbnN0ZWFkCiAgICBbJGxpbmVzLCAkcGtleV0gPSAkdGhpcy0+X0dlbkZpZWxkcygkZmxkcyk7CiAgICAkYWx0ZXIgPSAnQUxURVIgVEFCTEUgJyAuICR0aGlzLT5UYWJsZU5hbWUoJHRhYmxlbmFtZSk7CiAgICAkc3FsICAgPSBbXTsKICAgIAogICAgZm9yZWFjaCgkbGluZXMgYXMgJGlkID0+ICR2KQogICAgewogICAgICBpZihpc3NldCgkY29sc1skaWRdKSAmJiBcaXNfb2JqZWN0KCRjb2xzWyRpZF0pKQogICAgICB7CiAgICAgICAgJGZsZHMgPSBMZW5zX1BhcnNlQXJncygkdiwgJywnKTsKICAgICAgICAvLyAgV2UgYXJlIHRyeWluZyB0byBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGZpZWxkLCBpZiBub3QgYWxsb3dlZCwgc2ltcGx5IGlnbm9yZSB0aGUgcmVxdWVzdC4KICAgICAgICBpZigkZmxkcyAmJiBcaW5fYXJyYXkoXHN0cnRvdXBwZXIoXHN1YnN0cigkZmxkc1swXVsxXSwgMCwgNCkpLCAkdGhpcy0+aW52YWxpZFJlc2l6ZVR5cGVzNCkpCiAgICAgICAgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRzcWxbXSA9ICRhbHRlciAuICR0aGlzLT5hbHRlckNvbCAuICcgJyAuICR2OwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgICRzcWxbXSA9ICRhbHRlciAuICR0aGlzLT5hZGRDb2wgLiAnICcgLiAkdjsKICAgICAgfQogICAgfQogICAgCiAgICByZXR1cm4gJHNxbDsKICB9CiAgCn0gLy8gZW5kIG9mIGNsYXNzCg==]]></data>
	</file>
	<file>
	  <filename>/lib/db/Engine/class.EmptyRecordSet.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBIGZpbGUgdG8gZGVzY3JpYmUgYW4gZW1wdHkgcmVjb3Jkc2V0CiAqCiAqIEBpZ25vcmUKICovCgpuYW1lc3BhY2UgQ01TTVNFeHRcZGJcRW5naW5lOwoKLyoqCiAqIEEgZmluYWwgY2xhc3MgdG8gZGVzY3JpYmUgYSBzcGVjaWFsIChlbXB0eSkgcmVjb3Jkc2V0LgogKgogKiBAaWdub3JlCiAqLwpmaW5hbCBjbGFzcyBFbXB0eVJlc3VsdFNldCBleHRlbmRzIFJlc3VsdFNldAp7CiAgLyoqCiAgICogQGlnbm9yZQogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBNb3ZlRmlyc3QoKSA6IHZvaWQge30KICAKICAvKioKICAgKiBAaWdub3JlCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIE1vdmVOZXh0KCkgOiB2b2lkIHt9CiAgCiAgLyoqCiAgICogQGlnbm9yZQogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBHZXRBcnJheSgpIDogYXJyYXkgeyByZXR1cm4gW107IH0KICAKICAvKioKICAgKiBAaWdub3JlCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIEdldFJvd3MoKSA6IGFycmF5IHsgcmV0dXJuIFtdOyB9CiAgCiAgLyoqCiAgICogQGlnbm9yZQogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBHZXRBbGwoKSA6IGFycmF5IHsgcmV0dXJuIFtdOyB9CiAgCiAgLyoqCiAgICogQHBhcmFtIGZhbHNlICRmb3JjZV9hcnJheQogICAqIEBwYXJhbSBmYWxzZSAkZmlyc3QyY29scyAqCiAgICoKKiBAaWdub3JlCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIEdldEFzc29jKCRmb3JjZV9hcnJheSA9IEZBTFNFLCAkZmlyc3QyY29scyA9IGZhbHNlKSA6ID9hcnJheSB7IHJldHVybiBOVUxMOyB9CiAgCiAgLyoqCiAgICogQGlnbm9yZQogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBFT0YoKSA6IGJvb2wgeyByZXR1cm4gVFJVRTsgfQogIAogIC8qKgogICAqIEBpZ25vcmUKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gQ2xvc2UoKSA6IHZvaWQge30KICAKICAvKioKICAgKiBAaWdub3JlCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIFJlY29yZENvdW50KCkgOiBpbnQgeyByZXR1cm4gMDsgfQogIAogIC8qKgogICAqIEBwYXJhbSBudWxsICRmaWVsZCAqCiAgICoKICAgKiBAaWdub3JlCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGZpZWxkcygkZmllbGQgPSBudWxsKSA6IHZvaWQge30KICAKICBwcm90ZWN0ZWQgZnVuY3Rpb24gTW92ZSgkaWR4KSA6IHZvaWQKICB7CiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgTW92ZSgpIG1ldGhvZC4KICB9CiAgCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIGZldGNoX3JvdygpIDogdm9pZAogIHsKICAgIC8vIFRPRE86IEltcGxlbWVudCBmZXRjaF9yb3coKSBtZXRob2QuCiAgfQp9IC8vIGVuZCBvZiBjbGFzcwo=]]></data>
	</file>
	<file>
	  <filename>/lib/db/Engine/class.ResultSet.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFxDTVNNU0V4dFxkYlxFbmdpbmVcQ29ubmVjdGlvblNwZWMgKGMpIDIwMTUgYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQSBjbGFzcyB0byBkZWZpbmUgaG93IHRvIGNvbm5lY3QgdG8gYSBkYXRhYmFzZS4KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgb3VyIGhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBiYXNlIFJlc3VsdFNldCBjbGFzcy4KICoKICogQHBhY2thZ2UgQ01TCiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XGRiXEVuZ2luZTsKCi8qKgogKiBBIGNsYXNzIGRlZmluaW5nIGEgcmVzdWx0c2V0IGFuZCBob3cgdG8gaW50ZXJhY3Qgd2l0aCByZXN1bHRzIGZyb20gYSBkYXRhYmFzZSBxdWVyeS4KICoKICogT3JpZ2luYWwgQ29weXJpZ2h0IChjKSAyMDE1LCBSb2JlcnQgQ2FtcGJlbGwgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqCiAqIEZvcmtlZCBieTogRmVybmFuZG8gTW9yZ2FkbyA8am9tb3JnQGNtc21hZGVzaW1wbGUub3JnPgogKgogKiBAcGFja2FnZSAgIENNU01TRXh0CiAqIEBhdXRob3IgICAgRmVybmFuZG8gTW9yZ2FkbwogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAyNCBGZXJuYW5kbyBNb3JnYWRvLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBAc2luY2UgICAgIDEuNC42CiAqIEBwcm9wZXJ0eS1yZWFkIGJvb2wgJEVPRiBUZXN0IGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHJlc3VsdHNldC4KICogQHByb3BlcnR5LXJlYWQgYXJyYXkgJGZpZWxkcyBSZXR1cm4gdGhlIGN1cnJlbnQgcm93IG9mIHRoZSBSZXN1bHRTZXQuCiAqLwphYnN0cmFjdCBjbGFzcyBSZXN1bHRTZXQKewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2Rlc3RydWN0KCkgeyAkdGhpcy0+Q2xvc2UoKTsgfQoKICAgIC8qKgogICAgICogTW92ZSB0byB0aGUgZmlyc3Qgcm93IGluIGEgUmVzdWx0U2V0LgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gTW92ZUZpcnN0KCk7CgogICAgLyoqCiAgICAgKiBNb3ZlIHRvIHRoZSBuZXh0IHJvdyBvZiBhIFJlc3VsdFNldC4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIE1vdmVOZXh0KCk7CgogICAgLyoqCiAgICAgKiBNb3ZlIHRvIGEgc3BlY2lmaWVkIGluZGV4IG9mIHRoZSBSZXN1bHRTZXQuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaWR4CiAgICAgKi8KICAgIGFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBNb3ZlKCRpZHgpOwoKICAgIC8qKgogICAgICogR2V0IGFsbCByZW1haW5pbmcgcmVzdWx0cyBpbiB0aGlzIFJlc3VsdFNldCBhcyBhbiBhcnJheSBvZiByZWNvcmRzLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIEdldEFycmF5KCkgOiBhcnJheQogICAgewogICAgICAgICRyZXN1bHRzID0gW107CiAgICAgIAogICAgICB3aGlsZSghJHRoaXMtPkVPRigpKQogICAgICB7CiAgICAgICAgJHJlc3VsdHNbXSA9ICR0aGlzLT5GaWVsZHMoKTsKICAgICAgICAkdGhpcy0+TW92ZU5leHQoKTsKICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiAkcmVzdWx0czsKICAgIH0KCiAgICAvKioKICAgICAqIEFuIGFsaWFzIGZvciB0aGUgR2V0QXJyYXkgbWV0aG9kLgogICAgICoKICAgICAqIEBzZWUgR2V0QXJyYXkoKQogICAgICogQHJldHVybiBhcnJheQogICAgICogQGRlcHJlY2F0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIEdldFJvd3MoKSA6IGFycmF5IHsgcmV0dXJuICR0aGlzLT5HZXRBcnJheSgpOyB9CgogICAgLyoqCiAgICAgKiBBbiBhbGlhcyBmb3IgdGhlIEdldEFycmF5IG1ldGhvZC4KICAgICAqIEBzZWUgR2V0QXJyYXkoKQogICAgICogQHJldHVybiBhcnJheQogICAgICogQGRlcHJlY2F0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIEdldEFsbCgpIDogYXJyYXkgeyByZXR1cm4gJHRoaXMtPkdldEFycmF5KCk7IH0KCiAgICAvKioKICAgICAqIEdldCBhbiBhc3NvY2lhdGl2ZSBhcnJheSBmcm9tIGEgUmVzdWx0U2V0LgogICAgICoKICAgICAqIElmIG9ubHkgdHdvIGNvbHVtbnMgYXJlIHJldHVybmVkIGluIHRoZSBSZXN1bHRTZXQsIHRoZSBrZXlzIG9mIHRoZSByZXR1cm5lZCBhc3NvY2lhdGl2ZSBhcnJheQogICAgICogd2lsbCBiZSB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGNvbHVtbiwgYW5kIHRoZSB2YWx1ZSBvZiBlYWNoIGtleSB3aWxsIGJlIHRoZSB2YWx1ZSBmcm9tIHRoZSBzZWNvbmQgY29sdW1uLgogICAgICoKICAgICAqIElmIG1vcmUgdGhhbiAyIGNvbHVtbnMgYXJlIHJldHVybmVkLCB0aGVuIHRoZSBrZXkgb2YgdGhlIHJldHVybmVkIGFzc29jaWF0aXZlIGFycmF5IHdpbGwgYmUgdGhlCiAgICAgKiB2YWx1ZSBmcm9tIHRoZSBmaXJzdCBjb2x1bW4sIGFuZCB0aGUgdmFsdWUgb2YgZWFjaCBrZXkgd2lsbCBiZSBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiB0aGUgcmVtYWluaW5nIGNvbHVtbnMuCiAgICAgKiBUaGlzIGlzIGtub3duIGFzIGFycmF5IGJlaGF2aW9yLgogICAgICoKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKiBAcGFyYW0gYm9vbGVhbiAkZm9yY2VfYXJyYXkgRm9yY2UgYXJyYXkgYmVoYXZpb3IsIGV2ZW4gaWYgdGhlcmUgYXJlIG9ubHkgdHdvIGNvbHVtbnMgaW4gdGhlIHJlc3VsdGluZyBTUUwuCiAgICAgKiBAcGFyYW0gYm9vbGVhbiAkZmlyc3QyY29scyAgVGhlIG9wcG9zaXRlIG9mIGZvcmNlX2FycmF5LiAgT25seSBvdXRwdXQgdGhlIGRhdGEgZnJvbSB0aGUgZmlyc3QgMiBjb2x1bW5zIGFzIGFuIGFzc29jaWF0aXZlIGFycmF5LgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QXNzb2MoJGZvcmNlX2FycmF5ID0gZmFsc2UsICRmaXJzdDJjb2xzID0gZmFsc2UpIDogP2FycmF5CiAgICB7CiAgICAgICAgJGRhdGEgPSBudWxsOwogICAgICAgICRmaXJzdF9yb3cgPSAkdGhpcy0+RmllbGRzKCk7CiAgICAgICAgCiAgICAgICAgaWYoXGNvdW50KCRmaXJzdF9yb3cpIDwgMiApeyByZXR1cm4gTlVMTDsgfQoKICAgICAgICAkZGF0YSA9IFtdOwogICAgICAgICRrZXlzID0gXGFycmF5X2tleXMoJGZpcnN0X3Jvdyk7CiAgICAgICAgJG51bWVyaWNfaW5kZXggPSBpc3NldCgkcm93WzBdKTsgICMgVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyBhY3R1YWxseSBuZWVkZWQKICAgICAgCiAgICAgIGlmKCEkZmlyc3QyY29scyAmJiAoXGNvdW50KCRrZXlzKSA+IDIgfHwgJGZvcmNlX2FycmF5KSkKICAgICAgewogICAgICAgIC8vIG91dHB1dCBrZXkgaXMgZmlyc3QgY29sdW1uCiAgICAgICAgLy8gb3RoZXIgY29sdW1ucyBhcyBhc3NvYwogICAgICAgICRmaXJzdF9rZXkgPSAka2V5c1swXTsKICAgICAgICAKICAgICAgICB3aGlsZSghJHRoaXMtPkVPRigpKQogICAgICAgIHsKICAgICAgICAgICRyb3cgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICR0aGlzLT5GaWVsZHMoKTsKICAgICAgICAgICRkYXRhW1x0cmltKCRyb3dbJGZpcnN0X2tleV0pXSA9IFxhcnJheV9zbGljZSgkcm93LCAxKTsKICAgICAgICAgICR0aGlzLT5Nb3ZlTmV4dCgpOwogICAgICAgIH0KICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICAvLyBvbmx5IDIgY29sdW1ucy4uLiBvdXRwdXQgYSBzaW5nbGUgYXNzb2NpYXRpdmUKICAgICAgICB3aGlsZSghJHRoaXMtPkVPRigpKQogICAgICAgIHsKICAgICAgICAgICRyb3cgICAgICAgICAgICAgICAgICAgICAgICAgPSAkdGhpcy0+RmllbGRzKCk7CiAgICAgICAgICAkZGF0YVtcdHJpbSgkcm93WyRrZXlzWzBdXSldID0gJHJvd1ska2V5c1sxXV07CiAgICAgICAgICAkdGhpcy0+TW92ZU5leHQoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiAkZGF0YTsKICAgIH0KCiAgICAvKioKICAgICAqIFRlc3QgaWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgYSBSZXN1bHRTZXQsIGFuZCB0aGVyZSBhcmUgbm8gZnVydGhlciBtYXRjaGVzLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gRU9GKCkgOiBib29sOwoKICAgIC8qKgogICAgICogQ2xvc2UgdGhlIGN1cnJlbnQgUmVzdWx0U2V0LgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gQ2xvc2UoKTsKCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIGN1cnJlbnQgcmVzdWx0c2V0LgogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBSZWNvcmRDb3VudCgpIDogaW50OwoKICAgIC8qKgogICAgICogQWxpYXMgZm9yIHRoZSBSZWNvcmRDb3VudCgpIG1ldGhvZC4KICAgICAqCiAgICAgKiBAc2VlIFJlY29yZENvdW50KCk7CiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gTnVtUm93cygpIDogaW50IHsgcmV0dXJuICR0aGlzLT5SZWNvcmRDb3VudCgpOyB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIGZpZWxkcyBvZiB0aGUgY3VycmVudCBSZXN1bHRTZXQsIG9yIGEgc2luZ2xlIGZpZWxkIG9mIGl0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpZWxkIEFuIG9wdGlvbmFsIGZpZWxkIG5hbWUsIGlmIG5vdCBzcGVjaWZpZWQsIHRoZSBlbnRpcmUgcm93IHdpbGwgYmUgcmV0dXJuZWQuCiAgICAgKiBAcmV0dXJuIG1peGVkfGFycmF5IEVpdGhlciBhIHNpbmdsZSB2YWx1ZSwgb3IgYW4gYXJyYXkKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIEZpZWxkcyggJGZpZWxkID0gbnVsbCApOwoKICAgIC8qKgogICAgICogRmV0Y2ggdGhlIGN1cnJlbnQgcm93LCBhbmQgbW92ZSB0byB0aGUgbmV4dCByb3cuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXxib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBGZXRjaFJvdygpCiAgICB7CiAgICAgICAgaWYoICR0aGlzLT5FT0YoKSApIHsgcmV0dXJuIEZBTFNFOyB9CiAgICAgICAgCiAgICAgICAgJG91dCA9ICR0aGlzLT5maWVsZHMoKTsKICAgICAgICAkdGhpcy0+TW92ZU5leHQoKTsKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbAogICAgICovCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gZmV0Y2hfcm93KCk7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJGtleSkKICB7CiAgICBpZignRU9GJyA9PSAka2V5KSB7IHJldHVybiAkdGhpcy0+RU9GKCk7IH0KICAgIAogICAgaWYoJ2ZpZWxkcycgPT0gJGtleSkgeyByZXR1cm4gJHRoaXMtPkZpZWxkcygpOyB9CiAgfQoKfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/db/Engine/class.Statement.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFxDTVNNU0V4dFxkYlxFbmdpbmVcU3RhdGVtZW50IChjKSAyMDE1IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEEgY2xhc3MgdG8gcmVwcmVzZW50IGEgcHJlcGFyZWQgU1FMIHN0YXRlbWVudAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBWaXNpdCBvdXIgaG9tZXBhZ2UgYXQ6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCgovKioKICogVGhpcyBmaWxlIGRlZmluZXMgdGhlIGFic3RyYWN0IGRhdGFiYXNlIHN0YXRlbWVudCBjbGFzcy4KICoKICogQHBhY2thZ2UgQ01TCiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XGRiXEVuZ2luZTsKCi8qKgogKiBBIGNsYXNzIGRlZmluaW5nIGEgcHJlcGFyZWQgZGF0YWJhc2Ugc3RhdGVtZW50LgogKgogKiBPcmlnaW5hbCBDb3B5cmlnaHQgKGMpIDIwMTUsIFJvYmVydCBDYW1wYmVsbCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICoKICogRm9ya2VkIGJ5OiBGZXJuYW5kbyBNb3JnYWRvIDxqb21vcmdAY21zbWFkZXNpbXBsZS5vcmc+CiAqCiAqIEBwYWNrYWdlICAgQ01TTVNFeHQKICogQGF1dGhvciAgICBGZXJuYW5kbyBNb3JnYWRvCiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDI0IEZlcm5hbmRvIE1vcmdhZG8uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIEBzaW5jZSAgICAgMS40LjYKICogQHByb3BlcnR5LXJlYWQgQ29ubmVjdGlvbiAkZGIgIFRoZSBkYXRhYmFzZSBjb25uZWN0aW9uCiAqIEBwcm9wZXJ0eS1yZWFkIHN0cmluZyAgICAgJHNxbCBUaGUgU1FMIHF1ZXJ5LgogKi8KYWJzdHJhY3QgY2xhc3MgU3RhdGVtZW50CnsKICAvKioKICAgKiBAaWdub3JlCiAgICovCiAgcHJpdmF0ZSAkX2Nvbm47CiAgCiAgLyoqCiAgICogQGlnbm9yZQogICAqLwogIHByaXZhdGUgJF9zcWw7CiAgCiAgLyoqCiAgICogQ29uc3RydWN0b3IKICAgKgogICAqIEBwYXJhbSBDb25uZWN0aW9uICRjb25uIFRoZSBkYXRhYmFzZSBjb25uZWN0aW9uCiAgICogQHBhcmFtIHN0cmluZyAgICAgJHNxbCAgVGhlIFNRTCBxdWVyeQogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChDb25uZWN0aW9uICRjb25uLCAkc3FsID0gTlVMTCkKICB7CiAgICAkdGhpcy0+X2Nvbm4gPSAkY29ubjsKICAgICR0aGlzLT5fc3FsICA9ICRzcWw7CiAgfQogIAogIC8qKgogICAqIEBpZ25vcmUKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJGtleSkKICB7CiAgICBzd2l0Y2goJGtleSkKICAgIHsKICAgICAgY2FzZSAnZGInOgogICAgICBjYXNlICdjb25uJzoKICAgICAgICByZXR1cm4gJHRoaXMtPl9jb25uOwogICAgICAKICAgICAgY2FzZSAnc3FsJzoKICAgICAgICByZXR1cm4gJHRoaXMtPl9zcWw7CiAgICB9CiAgfQogIAogIC8qKgogICAqIEJpbmQgZGF0YSB0byB0aGUgc3FsIHN0YXRlbWVudHMKICAgKgogICAqIEBwYXJhbSBhcnJheSAkZGF0YSBBbiBhcnJheSBvZiBhcnJheXMgb2YgZGF0YSByZXByZXNlbnRpbmcgdGhlIG51bWVyb3VzIHJvd3Mgb2YgdGhlIGlucHV0IGRhdGEuCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIEJpbmQoYXJyYXkgJGRhdGEpIDogdm9pZAogIHsKICAgIGlmKDAgPT0gXGNvdW50KCRkYXRhKSkKICAgIHsKICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignRGF0YSBwYXNzZWQgdG8gJyAuIF9fTUVUSE9EX18gLiAnIG11c3QgYmUgYW4gYXNzb2NpYXRpdmUgYXJyYXknKTsKICAgIH0KICAgIAogICAgJGZpcnN0ID0gJGRhdGFbMF07CiAgICAKICAgIGlmKCFcaXNfYXJyYXkoJGZpcnN0KSB8fCAwID09IFxjb3VudCgkZmlyc3QpKQogICAgewogICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdEYXRhIHBhc3NlZCB0byAnIC4gX19NRVRIT0RfXyAuICcgbXVzdCBiZSBhbiBhc3NvY2lhdGl2ZSBhcnJheScpOwogICAgfQogICAgCiAgICAka2V5cyA9IFxhcnJheV9rZXlzKCRmaXJzdCk7CiAgICAKICAgIGlmKFxpc19udW1lcmljKCRrZXlzWzBdKSAmJiAwID09PSAka2V5c1swXSkKICAgIHsKICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignRGF0YSBwYXNzZWQgdG8gJyAuIF9fTUVUSE9EX18gLiAnIG11c3QgYmUgYW4gYXNzb2NpYXRpdmUgYXJyYXknKTsKICAgIH0KICAgIAogICAgJHRoaXMtPnNldF9ib3VuZF9kYXRhKCRkYXRhKTsKICB9CiAgCiAgLyoqCiAgICogU2V0IGJvdW5kIGRhdGEKICAgKgogICAqIEBwYXJhbSBhcnJheSAkZGF0YSBBbiBhcnJheSBvZiBhcnJheXMgb2YgZGF0YSByZXByZXNlbnRpbmcgdGhlIG51bWVyb3VzIHJvd3Mgb2YgdGhlIGlucHV0IGRhdGEuCiAgICoKICAgKiBAc2VlIGJpbmQKICAgKi8KICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0X2JvdW5kX2RhdGEoJGRhdGEpOwogIAogIC8qKgogICAqIFRlc3QgaWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIHJlc3VsdHNldC4KICAgKgogICAqIEByZXR1cm4gYm9vbAogICAqLwogIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBFT0YoKSA6IGJvb2w7CiAgCiAgLyoqCiAgICogTW92ZSB0byB0aGUgZmlyc3QgcmVjb3JkIG9mIHRoZSByZXN1bHRzZXQuCiAgICovCiAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIE1vdmVGaXJzdCgpOwogIAogIC8qKgogICAqIE1vdmUgdG8gdGhlIG5leHQgcmVjb3JkIG9mIHRoZSByZXN1bHRzZXQuCiAgICovCiAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIE1vdmVOZXh0KCk7CiAgCiAgLyoqCiAgICogUmV0cml2ZSBkYXRhIGZpZWxkcy4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJGNvbCBUaGUgY29sdW1uIG5hbWUuICBJZiBub3Qgc3BlY2lmaWVkLCBhbGwgY29sdW1ucyB3aWxsIGJlIHJldHVybmVkLgogICAqCiAgICogQHJldHVybiBtaXhlZAogICAqLwogIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBGaWVsZHMoJGNvbCA9IE5VTEwpOwogIAogIC8qKgogICAqIEV4ZWN1dGUgdGhlIHF1ZXJ5CiAgICovCiAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIEV4ZWN1dGUoKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/db/Engine/mysqli</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/db/Engine/mysqli/class.Connection.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBDTVNNU0V4dFxkYlxFbmdpbmVcbXlzcWxpOwoKY2xhc3MgQ29ubmVjdGlvbiBleHRlbmRzIFxDTVNNU0V4dFxkYlxFbmdpbmVcQ29ubmVjdGlvbgp7CiAgcHJpdmF0ZSAgICAgICRfbXlzcWw7CiAgcHJpdmF0ZSBpbnQgICRfaW5fdHJhbnNhY3Rpb24gICAgICAgPSAwOwogIHByaXZhdGUgaW50ICAkX2luX3NtYXJ0X3RyYW5zYWN0aW9uID0gMDsKICBwcml2YXRlIGJvb2wgJF90cmFuc2FjdGlvbl9zdGF0dXMgICA9IFRSVUU7CiAgCiAgcHVibGljIGZ1bmN0aW9uIERiVHlwZSgpIDogc3RyaW5nIHsgcmV0dXJuICdteXNxbGknOyB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIENvbm5lY3QoKSA6IGJvb2wKICB7CiAgICBpZighXGNsYXNzX2V4aXN0cyhcbXlzcWxpOjpjbGFzcykpCiAgICB7CiAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0NvbmZpZ3VyYXRpb24gZXJyb3IuLi4gbXlzcWxpIGZ1bmN0aW9ucyBhcmUgbm90IGF2YWlsYWJsZScpOwogICAgfQogICAgCiAgICBcbXlzcWxpX3JlcG9ydChcTVlTUUxJX1JFUE9SVF9TVFJJQ1QpOwogICAgdHJ5CiAgICB7CiAgICAgICR0aGlzLT5fbXlzcWwgPSBuZXcgXG15c3FsaSgKICAgICAgICAkdGhpcy0+X2Nvbm5lY3Rpb25TcGVjLT5ob3N0LCAkdGhpcy0+X2Nvbm5lY3Rpb25TcGVjLT51c2VybmFtZSwKICAgICAgICAkdGhpcy0+X2Nvbm5lY3Rpb25TcGVjLT5wYXNzd29yZCwKICAgICAgICAkdGhpcy0+X2Nvbm5lY3Rpb25TcGVjLT5kYm5hbWUsCiAgICAgICAgKGludCkkdGhpcy0+X2Nvbm5lY3Rpb25TcGVjLT5wb3J0CiAgICAgICk7CiAgICAgIAogICAgICBpZigkdGhpcy0+X215c3FsLT5jb25uZWN0X2Vycm9yKQogICAgICB7CiAgICAgICAgJHRoaXMtPl9teXNxbCA9IE5VTEw7CiAgICAgICAgJHRoaXMtPk9uRXJyb3Ioc2VsZjo6RVJST1JfQ09OTkVDVCwgXG15c3FsaV9jb25uZWN0X2Vycm5vKCksIFxteXNxbGlfY29ubmVjdF9lcnJvcigpKTsKICAgICAgICAKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiBUUlVFOwogICAgfQogICAgY2F0Y2goXEV4Y2VwdGlvbiAkZSkKICAgIHsKICAgICAgJHRoaXMtPl9teXNxbCA9IE5VTEw7CiAgICAgICR0aGlzLT5PbkVycm9yKHNlbGY6OkVSUk9SX0NPTk5FQ1QsIFxteXNxbGlfY29ubmVjdF9lcnJubygpLCBcbXlzcWxpX2Nvbm5lY3RfZXJyb3IoKSk7CiAgICAgIAogICAgICByZXR1cm4gRkFMU0U7CiAgICB9CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBOZXdEYXRhRGljdGlvbmFyeSgpIDogRGF0YURpY3Rpb25hcnkKICB7CiAgICByZXR1cm4gbmV3IERhdGFEaWN0aW9uYXJ5KCR0aGlzKTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIERpc2Nvbm5lY3QoKQogIHsKICAgIGlmKCR0aGlzLT5fbXlzcWwpCiAgICB7CiAgICAgICR0aGlzLT5fbXlzcWwtPkNsb3NlKCk7CiAgICAgICR0aGlzLT5fbXlzcWwgPSBOVUxMOwogICAgfQogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gJmdldF9pbm5lcl9teXNxbCgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fbXlzcWw7CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBJc0Nvbm5lY3RlZCgpCiAgewogICAgcmV0dXJuIGlzX29iamVjdCgkdGhpcy0+X215c3FsKTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIEVycm9yTXNnKCkKICB7CiAgICBpZigkdGhpcy0+X215c3FsKQogICAgewogICAgICByZXR1cm4gJHRoaXMtPl9teXNxbC0+ZXJyb3I7CiAgICB9CiAgICAKICAgIHJldHVybiBteXNxbGlfY29ubmVjdF9lcnJvcigpOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gRXJyb3JObygpCiAgewogICAgaWYoJHRoaXMtPl9teXNxbCkKICAgIHsKICAgICAgcmV0dXJuICR0aGlzLT5fbXlzcWwtPmVycm5vOwogICAgfQogICAgCiAgICByZXR1cm4gbXlzcWxpX2Nvbm5lY3RfZXJybm8oKTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIEFmZmVjdGVkX1Jvd3MoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X215c3FsLT5hZmZlY3RlZF9yb3dzOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gSW5zZXJ0X0lEKCkKICB7CiAgICAkcmVzID0gJHRoaXMtPl9teXNxbC0+aW5zZXJ0X2lkOwogICAgCiAgICByZXR1cm4gJHJlczsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHFzdHIoJHN0cikKICB7CiAgICAvLyBub3RlLi4uIHRoaXMgY291bGQgYmUgYSB0d28gd2F5IHRjcC9pcCBvciBzb2NrZXQgY29tbXVuaWNhdGlvbgogICAgcmV0dXJuICInIiAuICR0aGlzLT5fbXlzcWwtPmVzY2FwZV9zdHJpbmcoJHN0cikgLiAiJyI7CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBDb25jYXQoKSA6IHN0cmluZwogIHsKICAgICRhcnIgID0gXGZ1bmNfZ2V0X2FyZ3MoKTsKICAgICRsaXN0ID0gXGltcGxvZGUoJywgJywgJGFycik7CiAgICAKICAgIGlmKCcnICE9PSAkbGlzdCkgeyByZXR1cm4gIkNPTkNBVCgkbGlzdCkiOyB9CiAgICAKICAgIHJldHVybiAnJzsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIElmTnVsbCgkZmllbGQsICRpZk51bGwpCiAgewogICAgcmV0dXJuICIgSUZOVUxMKCRmaWVsZCwgJGlmTnVsbCkiOwogIH0KICAKICBwcm90ZWN0ZWQgZnVuY3Rpb24gZG9fbXVsdGlzcWwoJHNxbCkKICB7CiAgICAvLyBubyBlcnJvciBjaGVja2luZyBmb3IgdGhpcyBzdHVmZgogICAgLy8gYW5kIG5vIHJldHVybiBkYXRhCiAgICAkX3QgPSAkdGhpcy0+X215c3FsLT5tdWx0aV9xdWVyeSgkc3FsKTsKICAgIGlmKCRfdCkKICAgIHsKICAgICAgZG8KICAgICAgewogICAgICAgICRyZXMgPSAkdGhpcy0+X215c3FsLT5zdG9yZV9yZXN1bHQoKTsKICAgICAgfQogICAgICB3aGlsZSgkdGhpcy0+X215c3FsLT5tb3JlX3Jlc3VsdHMoKSAmJiAkdGhpcy0+X215c3FsLT5uZXh0X3Jlc3VsdCgpKTsKICAgIH0KICB9CiAgCiAgLyoqCiAgICogQHRocm93cyBcQ01TTVNFeHRcZGJcRW5naW5lXERhdGFiYXNlQ29ubmVjdGlvbkV4Y2VwdGlvbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBkb19zcWwoJHNxbCkgOiA/UmVzdWx0U2V0CiAgewogICAgLy8gZXhlY3V0ZSBhbGwgcXVlcmllcywgYnV0IG9ubHkgbmVlZCB0aGUgUmVzdWx0U2V0IGZyb20gdGhlIGxhc3Qgb25lLgogICAgJHRoaXMtPnNxbCAgICAgICAgICAgICAgPSAkc3FsOwogICAgJHRpbWVfc3RhcnQgICAgICAgICAgICAgPSBcbWljcm90aW1lKFRSVUUpOwogICAgJHJlc3VsdGlkICAgICAgICAgICAgICAgPSAkdGhpcy0+X215c3FsLT5xdWVyeSgkc3FsKTsKICAgICR0aW1lX3RvdGFsICAgICAgICAgICAgID0gXG1pY3JvdGltZShUUlVFKSAtICR0aW1lX3N0YXJ0OwogICAgJHRoaXMtPnF1ZXJ5X3RpbWVfdG90YWwgKz0gJHRpbWVfdG90YWw7CiAgICAKICAgIGlmKCEkcmVzdWx0aWQpCiAgICB7CiAgICAgICR0aGlzLT5GYWlsVHJhbnMoKTsKICAgICAgJHRoaXMtPk9uRXJyb3Ioc2VsZjo6RVJST1JfRVhFQ1VURSwgJHRoaXMtPl9teXNxbC0+ZXJybm8sICR0aGlzLT5fbXlzcWwtPmVycm9yKTsKICAgICAgCiAgICAgIHJldHVybiBOVUxMOwogICAgfQogICAgCiAgICAkdGhpcy0+YWRkX2RlYnVnX3F1ZXJ5KCRzcWwpOwogICAgCiAgICByZXR1cm4gbmV3IFJlc3VsdFNldCgkdGhpcy0+X215c3FsLCAkcmVzdWx0aWQsICRzcWwpOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gUHJlcGFyZSgkc3FsKSA6IFN0YXRlbWVudAogIHsKICAgIHJldHVybiBuZXcgU3RhdGVtZW50KCR0aGlzLCAkc3FsKTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIEJlZ2luVHJhbnMoKQogIHsKICAgIGlmKCR0aGlzLT5faW5fc21hcnRfdHJhbnNhY3Rpb24pCiAgICB7CiAgICAgIHJldHVybiBUUlVFOwogICAgfSAvLyBhbGxvdyBuZXN0aW5nIGluIHRoaXMgY2FzZS4KICAgICR0aGlzLT5faW5fdHJhbnNhY3Rpb24rKzsKICAgICR0aGlzLT5fdHJhbnNhY3Rpb25fZmFpbGVkID0gRkFMU0U7CiAgICAkdGhpcy0+RXhlY3V0ZSgnQkVHSU4nKTsKICAgIAogICAgcmV0dXJuIFRSVUU7CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBTdGFydFRyYW5zKCkKICB7CiAgICBpZigkdGhpcy0+X2luX3NtYXJ0X3RyYW5zYWN0aW9uKQogICAgewogICAgICAkdGhpcy0+X2luX3NtYXJ0X3RyYW5zYWN0aW9uKys7CiAgICAgIAogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIGlmKCR0aGlzLT5faW5fdHJhbnNhY3Rpb24pCiAgICB7CiAgICAgICR0aGlzLT5PbkVycm9yKHNlbGY6OkVSUk9SX1RSQU5TQUNUSU9OLCAtMSwgJ0JhZCBUcmFuc2FjdGlvbjogU3RhcnRUcmFucyBjYWxsZWQgd2l0aGluIEJlZ2luVHJhbnMnKTsKICAgICAgCiAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KICAgICR0aGlzLT5fdHJhbnNhY3Rpb25fc3RhdHVzID0gVFJVRTsKICAgICR0aGlzLT5faW5fc21hcnRfdHJhbnNhY3Rpb24rKzsKICAgICR0aGlzLT5CZWdpblRyYW5zKCk7CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBSb2xsYmFja1RyYW5zKCkKICB7CiAgICBpZighJHRoaXMtPl9pbl90cmFuc2FjdGlvbikKICAgIHsKICAgICAgJHRoaXMtPk9uRXJyb3Ioc2VsZjo6RVJST1JfVFJBTlNBQ1RJT04sIC0xLCAnQmVnaW5UcmFucyBoYXMgbm90IGJlZW4gY2FsbGVkJyk7CiAgICAgIAogICAgICByZXR1cm4gRkFMU0U7CiAgICB9CiAgICAKICAgICR0aGlzLT5faW5fdHJhbnNhY3Rpb24tLTsKICAgICR0aGlzLT5FeGVjdXRlKCdST0xMQkFDSycpOwogICAgCiAgICByZXR1cm4gVFJVRTsKICB9CiAgCiAgZnVuY3Rpb24gQ29tbWl0VHJhbnMoJG9rID0gVFJVRSkKICB7CiAgICBpZighJG9rKQogICAgewogICAgICByZXR1cm4gJHRoaXMtPlJvbGxiYWNrVHJhbnMoKTsKICAgIH0KICAgIAogICAgaWYoISR0aGlzLT5faW5fdHJhbnNhY3Rpb24pCiAgICB7CiAgICAgICR0aGlzLT5PbkVycm9yKHNlbGY6OkVSUk9SX1RSQU5TQUNUSU9OLCAtMSwgJ0JlZ2luVHJhbnMgaGFzIG5vdCBiZWVuIGNhbGxlZCcpOwogICAgICAKICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQogICAgCiAgICAkdGhpcy0+X2luX3RyYW5zYWN0aW9uLS07CiAgICAkdGhpcy0+RXhlY3V0ZSgnQ09NTUlUJyk7CiAgICAKICAgIHJldHVybiBUUlVFOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gQ29tcGxldGVUcmFucygkYXV0b0NvbXBsZXRlID0gVFJVRSkKICB7CiAgICBpZigkdGhpcy0+X2luX3NtYXJ0X3RyYW5zYWN0aW9uID4gMCkKICAgIHsKICAgICAgJHRoaXMtPl9pbl9zbWFydF90cmFuc2FjdGlvbi0tOwogICAgICAKICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CiAgICAKICAgIGlmKCR0aGlzLT5fdHJhbnNhY3Rpb25fc3RhdHVzICYmICRhdXRvQ29tcGxldGUpCiAgICB7CiAgICAgIGlmKCEkdGhpcy0+Q29tbWl0VHJhbnMoKSkKICAgICAgewogICAgICAgICR0aGlzLT5fdHJhbnNhY3Rpb25fc3RhdHVzID0gRkFMU0U7CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgJHRoaXMtPlJvbGxiYWNrVHJhbnMoKTsKICAgIH0KICAgICR0aGlzLT5faW5fc21hcnRfdHJhbnNhY3Rpb24gPSAwOwogICAgCiAgICByZXR1cm4gJHRoaXMtPl90cmFuc2FjdGlvbl9zdGF0dXM7CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBGYWlsVHJhbnMoKQogIHsKICAgICR0aGlzLT5fdHJhbnNhY3Rpb25fc3RhdHVzID0gRkFMU0U7CiAgfQogIAogIGZ1bmN0aW9uIEhhc0ZhaWxlZFRyYW5zKCkKICB7CiAgICBpZigkdGhpcy0+X2luX3NtYXJ0X3RyYW5zYWN0aW9uID4gMCkKICAgIHsKICAgICAgcmV0dXJuICR0aGlzLT5fdHJhbnNhY3Rpb25fc3RhdHVzID09IEZBTFNFOwogICAgfQogICAgCiAgICByZXR1cm4gRkFMU0U7CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBHZW5JRCgkc2VxbmFtZSkKICB7CiAgICAkc3FsID0gc3ByaW50ZignVVBEQVRFICVzIFNFVCBpZD1pZCsxOycsICRzZXFuYW1lKTsKICAgICR0aGlzLT5FeGVjdXRlKCRzcWwpOwogICAgJHNxbCA9IHNwcmludGYoJ1NFTEVDVCBpZCBGUk9NICVzJywgJHNlcW5hbWUpOwogICAgCiAgICByZXR1cm4gKGludCkkdGhpcy0+R2V0T25lKCRzcWwpOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gQ3JlYXRlU2VxdWVuY2UoJHNlcW5hbWUsICRzdGFydElEID0gMCkKICB7CiAgICAkb3V0ICAgICA9IFtdOwogICAgJHN0YXJ0SUQgPSAoaW50KSRzdGFydElEOwogICAgJG91dFtdICAgPSBzcHJpbnRmKCdDUkVBVEUgVEFCTEUgJXMgKGlkIGludCBub3QgbnVsbCkgRU5HSU5FIE15SVNBTScsICRzZXFuYW1lKTsKICAgICRvdXRbXSAgID0gc3ByaW50ZignSU5TRVJUIElOVE8gJXMgKGlkKSB2YWx1ZXMgKCVzKScsICRzZXFuYW1lLCAkc3RhcnRJRCk7CiAgICAkZGljdCAgICA9ICR0aGlzLT5OZXdEYXRhRGljdGlvbmFyeSgpOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkb3V0KTsKICAgIAogICAgcmV0dXJuIFRSVUU7CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBEcm9wU2VxdWVuY2UoJHNlcW5hbWUpCiAgewogICAgcmV0dXJuICR0aGlzLT5FeGVjdXRlKHNwcmludGYoJ0RST1AgVEFCTEUgJXMnLCAkc2VxbmFtZSkpOwogIH0KfSAvLyBlbmQgb2YgY2xhc3MK]]></data>
	</file>
	<file>
	  <filename>/lib/db/Engine/mysqli/class.DataDictionary.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBDTVNNU0V4dFxkYlxFbmdpbmVcbXlzcWxpOwoKY2xhc3MgRGF0YURpY3Rpb25hcnkgZXh0ZW5kcyBcQ01TTVNFeHRcZGJcRW5naW5lXERhdGFEaWN0aW9uYXJ5CnsKICAvKioKICAgKiBAdmFyIHRydWUKICAgKi8KICBwcm90ZWN0ZWQgYm9vbCAkYWx0ZXJUYWJsZUFkZEluZGV4OwogIHByb3RlY3RlZCAgICAgICRibG9iU2l6ZTsKICAKICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQ29ubmVjdGlvbiAkY29ubikKICB7CiAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRjb25uKTsKICAgICR0aGlzLT5hbHRlckNvbCAgICAgICAgICAgPSAnIE1PRElGWSBDT0xVTU4nOwogICAgJHRoaXMtPmFsdGVyVGFibGVBZGRJbmRleCA9IFRSVUU7CiAgICAkdGhpcy0+ZHJvcFRhYmxlICAgICAgICAgID0gJ0RST1AgVEFCTEUgSUYgRVhJU1RTICVzJzsgLy8gcmVxdWlyZXMgbXlzcWwgMy4yMiBvciBsYXRlcgogICAgCiAgICAkdGhpcy0+ZHJvcEluZGV4ICAgID0gJ0RST1AgSU5ERVggJXMgT04gJXMnOwogICAgJHRoaXMtPnJlbmFtZUNvbHVtbiA9ICdBTFRFUiBUQUJMRSAlcyBDSEFOR0UgQ09MVU1OICVzICVzICVzJzsgIC8vIG5lZWRzIGNvbHVtbi1kZWZpbml0aW9uIQogIH0KICAKICBwcm90ZWN0ZWQgZnVuY3Rpb24gQWN0dWFsVHlwZSgkbWV0YSkgOiBzdHJpbmcKICB7CiAgICBzd2l0Y2goJG1ldGEpCiAgICB7CiAgICAgIGNhc2UgJ0MyJzoKICAgICAgY2FzZSAnQyc6CiAgICAgICAgcmV0dXJuICdWQVJDSEFSJzsKICAgICAgY2FzZSAnWDInOgogICAgICBjYXNlICdYTCc6CiAgICAgICAgcmV0dXJuICdMT05HVEVYVCc7CiAgICAgIGNhc2UgJ1gnOgogICAgICAgIHJldHVybiAnVEVYVCc7CiAgICAgIAogICAgICBjYXNlICdCJzoKICAgICAgICByZXR1cm4gJ0xPTkdCTE9CJzsKICAgICAgCiAgICAgIGNhc2UgJ0QnOgogICAgICAgIHJldHVybiAnREFURSc7CiAgICAgIGNhc2UgJ0RUJzoKICAgICAgICByZXR1cm4gJ0RBVEVUSU1FJzsKICAgICAgY2FzZSAnVCc6CiAgICAgICAgcmV0dXJuICdUSU1FJzsKICAgICAgY2FzZSAnVFMnOgogICAgICAgIHJldHVybiAnVElNRVNUQU1QJzsKICAgICAgY2FzZSAnSTEnOgogICAgICBjYXNlICdMJzoKICAgICAgICByZXR1cm4gJ1RJTllJTlQnOwogICAgICAKICAgICAgY2FzZSAnUic6CiAgICAgIGNhc2UgJ0k0JzoKICAgICAgY2FzZSAnSSc6CiAgICAgICAgcmV0dXJuICdJTlRFR0VSJzsKICAgICAgY2FzZSAnSTInOgogICAgICAgIHJldHVybiAnU01BTExJTlQnOwogICAgICBjYXNlICdJOCc6CiAgICAgICAgcmV0dXJuICdCSUdJTlQnOwogICAgICAKICAgICAgY2FzZSAnRic6CiAgICAgICAgcmV0dXJuICdET1VCTEUnOwogICAgICBjYXNlICdOJzoKICAgICAgICByZXR1cm4gJ05VTUVSSUMnOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiAkbWV0YTsKICAgIH0KICB9CiAgCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIE1ldGFUeXBlKCR0LCAkbGVuID0gLTEsICRmaWVsZG9iaiA9IEZBTFNFKSA6IHN0cmluZwogIHsKICAgIC8vICR0IGNhbiBiZSBtaXhlZC4uLgogICAgaWYoXGlzX29iamVjdCgkdCkpCiAgICB7CiAgICAgICRmaWVsZG9iaiA9ICR0OwogICAgICAkdCAgICAgICAgPSAkZmllbGRvYmotPnR5cGU7CiAgICAgICRsZW4gICAgICA9ICRmaWVsZG9iai0+bWF4X2xlbmd0aDsKICAgIH0KICAgIAogICAgJGxlbiA9IC0xOyAvLyBmb3JjZSBhcyBteXNxbCBtYXhfbGVuZ3RoIGlzIG5vdCBhY2N1cmF0ZQogICAgCiAgICBzd2l0Y2goXHN0cnRvdXBwZXIoJHQpKQogICAgewogICAgICBjYXNlICdTVFJJTkcnOgogICAgICBjYXNlICdDSEFSJzoKICAgICAgY2FzZSAnVkFSQ0hBUic6CiAgICAgIGNhc2UgJ1RJTllCTE9CJzoKICAgICAgY2FzZSAnVElOWVRFWFQnOgogICAgICBjYXNlICdFTlVNJzoKICAgICAgY2FzZSAnU0VUJzoKICAgICAgICBpZigkbGVuIDw9ICR0aGlzLT5ibG9iU2l6ZSkgeyByZXR1cm4gJ0MnOyB9CiAgICAgIAogICAgICBjYXNlICdURVhUJzoKICAgICAgY2FzZSAnTE9OR1RFWFQnOgogICAgICBjYXNlICdNRURJVU1URVhUJzoKICAgICAgICByZXR1cm4gJ1gnOwogICAgICAKICAgICAgLy8gcGhwX215c3FsIGV4dGVuc2lvbiBhbHdheXMgcmV0dXJucyAnYmxvYicgZXZlbiBpZiAndGV4dCcKICAgICAgLy8gc28gd2UgaGF2ZSB0byBjaGVjayB3aGV0aGVyIGJpbmFyeS4uLgogICAgICBjYXNlICdJTUFHRSc6CiAgICAgIGNhc2UgJ0xPTkdCTE9CJzoKICAgICAgY2FzZSAnQkxPQic6CiAgICAgIGNhc2UgJ01FRElVTUJMT0InOgogICAgICAgIHJldHVybiAhZW1wdHkoJGZpZWxkb2JqLT5iaW5hcnkpID8gJ0InIDogJ1gnOwogICAgICAKICAgICAgY2FzZSAnWUVBUic6CiAgICAgIGNhc2UgJ0RBVEUnOgogICAgICAgIHJldHVybiAnRCc7CiAgICAgIAogICAgICBjYXNlICdUSU1FJzoKICAgICAgY2FzZSAnREFURVRJTUUnOgogICAgICBjYXNlICdUSU1FU1RBTVAnOgogICAgICAgIHJldHVybiAnVCc7CiAgICAgIAogICAgICBjYXNlICdJTlQnOgogICAgICBjYXNlICdJTlRFR0VSJzoKICAgICAgY2FzZSAnQklHSU5UJzoKICAgICAgY2FzZSAnVElOWUlOVCc6CiAgICAgIGNhc2UgJ01FRElVTUlOVCc6CiAgICAgIGNhc2UgJ1NNQUxMSU5UJzoKICAgICAgICBpZighZW1wdHkoJGZpZWxkb2JqLT5wcmltYXJ5X2tleSkpIHsgcmV0dXJuICdSJzsgfQogICAgICAgIAogICAgICAgIHJldHVybiAnSSc7CiAgICAgIAogICAgICBkZWZhdWx0OgogICAgICAgIHN0YXRpYyAkdHlwZU1hcCA9IFsKICAgICAgICAgICdWQVJDSEFSJyAgICAgICAgICA9PiAnQycsCiAgICAgICAgICAnVkFSQ0hBUjInICAgICAgICAgPT4gJ0MnLAogICAgICAgICAgJ0NIQVInICAgICAgICAgICAgID0+ICdDJywKICAgICAgICAgICdDJyAgICAgICAgICAgICAgICA9PiAnQycsCiAgICAgICAgICAnU1RSSU5HJyAgICAgICAgICAgPT4gJ0MnLAogICAgICAgICAgJ05DSEFSJyAgICAgICAgICAgID0+ICdDJywKICAgICAgICAgICdOVkFSQ0hBUicgICAgICAgICA9PiAnQycsCiAgICAgICAgICAnVkFSWUlORycgICAgICAgICAgPT4gJ0MnLAogICAgICAgICAgJ0JQQ0hBUicgICAgICAgICAgID0+ICdDJywKICAgICAgICAgICdDSEFSQUNURVInICAgICAgICA9PiAnQycsCiAgICAgICAgICAjIwogICAgICAgICAgJ0xPTkdDSEFSJyAgICAgICAgID0+ICdYJywKICAgICAgICAgICdURVhUJyAgICAgICAgICAgICA9PiAnWCcsCiAgICAgICAgICAnTlRFWFQnICAgICAgICAgICAgPT4gJ1gnLAogICAgICAgICAgJ00nICAgICAgICAgICAgICAgID0+ICdYJywKICAgICAgICAgICdYJyAgICAgICAgICAgICAgICA9PiAnWCcsCiAgICAgICAgICAnQ0xPQicgICAgICAgICAgICAgPT4gJ1gnLAogICAgICAgICAgJ05DTE9CJyAgICAgICAgICAgID0+ICdYJywKICAgICAgICAgICdMVkFSQ0hBUicgICAgICAgICA9PiAnWCcsCiAgICAgICAgICAjIwogICAgICAgICAgJ0JMT0InICAgICAgICAgICAgID0+ICdCJywKICAgICAgICAgICdJTUFHRScgICAgICAgICAgICA9PiAnQicsCiAgICAgICAgICAnQklOQVJZJyAgICAgICAgICAgPT4gJ0InLAogICAgICAgICAgJ1ZBUkJJTkFSWScgICAgICAgID0+ICdCJywKICAgICAgICAgICdMT05HQklOQVJZJyAgICAgICA9PiAnQicsCiAgICAgICAgICAnQicgICAgICAgICAgICAgICAgPT4gJ0InLAogICAgICAgICAgIyMKICAgICAgICAgICdZRUFSJyAgICAgICAgICAgICA9PiAnRCcsIC8vIG15c3FsCiAgICAgICAgICAnREFURScgICAgICAgICAgICAgPT4gJ0QnLAogICAgICAgICAgJ0QnICAgICAgICAgICAgICAgID0+ICdEJywKICAgICAgICAgICMjCiAgICAgICAgICAnVElNRScgICAgICAgICAgICAgPT4gJ1QnLAogICAgICAgICAgJ1RJTUVTVEFNUCcgICAgICAgID0+ICdUJywKICAgICAgICAgICdEQVRFVElNRScgICAgICAgICA9PiAnVCcsCiAgICAgICAgICAnVElNRVNUQU1QVFonICAgICAgPT4gJ1QnLAogICAgICAgICAgJ1QnICAgICAgICAgICAgICAgID0+ICdUJywKICAgICAgICAgICMjCiAgICAgICAgICAnQk9PTCcgICAgICAgICAgICAgPT4gJ0wnLAogICAgICAgICAgJ0JPT0xFQU4nICAgICAgICAgID0+ICdMJywKICAgICAgICAgICdCSVQnICAgICAgICAgICAgICA9PiAnTCcsCiAgICAgICAgICAnTCcgICAgICAgICAgICAgICAgPT4gJ0wnLAogICAgICAgICAgIyMKICAgICAgICAgICdDT1VOVEVSJyAgICAgICAgICA9PiAnUicsCiAgICAgICAgICAnUicgICAgICAgICAgICAgICAgPT4gJ1InLAogICAgICAgICAgJ1NFUklBTCcgICAgICAgICAgID0+ICdSJywgLy8gaWZ4CiAgICAgICAgICAnSU5UIElERU5USVRZJyAgICAgPT4gJ1InLAogICAgICAgICAgIyMKICAgICAgICAgICdJTlQnICAgICAgICAgICAgICA9PiAnSScsCiAgICAgICAgICAnSU5UMicgICAgICAgICAgICAgPT4gJ0knLAogICAgICAgICAgJ0lOVDQnICAgICAgICAgICAgID0+ICdJJywKICAgICAgICAgICdJTlQ4JyAgICAgICAgICAgICA9PiAnSScsCiAgICAgICAgICAnSU5URUdFUicgICAgICAgICAgPT4gJ0knLAogICAgICAgICAgJ0lOVEVHRVIgVU5TSUdORUQnID0+ICdJJywKICAgICAgICAgICdTSE9SVCcgICAgICAgICAgICA9PiAnSScsCiAgICAgICAgICAnVElOWUlOVCcgICAgICAgICAgPT4gJ0knLAogICAgICAgICAgJ1NNQUxMSU5UJyAgICAgICAgID0+ICdJJywKICAgICAgICAgICdJJyAgICAgICAgICAgICAgICA9PiAnSScsCiAgICAgICAgICAjIwogICAgICAgICAgJ0xPTkcnICAgICAgICAgICAgID0+ICdOJywgLy8gaW50ZXJiYXNlIGlzIG51bWVyaWMsIG9jaTggaXMgYmxvYgogICAgICAgICAgJ0JJR0lOVCcgICAgICAgICAgID0+ICdOJywgLy8gdGhpcyBpcyBiaWdnZXIgdGhhbiBQSFAgMzItYml0IGludGVnZXJzCiAgICAgICAgICAnREVDSU1BTCcgICAgICAgICAgPT4gJ04nLAogICAgICAgICAgJ0RFQycgICAgICAgICAgICAgID0+ICdOJywKICAgICAgICAgICdSRUFMJyAgICAgICAgICAgICA9PiAnTicsCiAgICAgICAgICAnRE9VQkxFJyAgICAgICAgICAgPT4gJ04nLAogICAgICAgICAgJ0RPVUJMRSBQUkVDSVNJT04nID0+ICdOJywKICAgICAgICAgICdTTUFMTEZMT0FUJyAgICAgICA9PiAnTicsCiAgICAgICAgICAnRkxPQVQnICAgICAgICAgICAgPT4gJ04nLAogICAgICAgICAgJ05VTUJFUicgICAgICAgICAgID0+ICdOJywKICAgICAgICAgICdOVU0nICAgICAgICAgICAgICA9PiAnTicsCiAgICAgICAgICAnTlVNRVJJQycgICAgICAgICAgPT4gJ04nLAogICAgICAgICAgJ01PTkVZJyAgICAgICAgICAgID0+ICdOJywKICAgICAgICAgIAogICAgICAgICAgIyMgaW5mb3JtaXggOS4yCiAgICAgICAgICAnU1FMSU5UJyAgICAgICAgICAgPT4gJ0knLAogICAgICAgICAgJ1NRTFNFUklBTCcgICAgICAgID0+ICdJJywKICAgICAgICAgICdTUUxTTUlOVCcgICAgICAgICA9PiAnSScsCiAgICAgICAgICAnU1FMU01GTE9BVCcgICAgICAgPT4gJ04nLAogICAgICAgICAgJ1NRTEZMT0FUJyAgICAgICAgID0+ICdOJywKICAgICAgICAgICdTUUxNT05FWScgICAgICAgICA9PiAnTicsCiAgICAgICAgICAnU1FMREVDSU1BTCcgICAgICAgPT4gJ04nLAogICAgICAgICAgJ1NRTERBVEUnICAgICAgICAgID0+ICdEJywKICAgICAgICAgICdTUUxWQ0hBUicgICAgICAgICA9PiAnQycsCiAgICAgICAgICAnU1FMQ0hBUicgICAgICAgICAgPT4gJ0MnLAogICAgICAgICAgJ1NRTERUSU1FJyAgICAgICAgID0+ICdUJywKICAgICAgICAgICdTUUxJTlRFUlZBTCcgICAgICA9PiAnTicsCiAgICAgICAgICAnU1FMQllURVMnICAgICAgICAgPT4gJ0InLAogICAgICAgICAgJ1NRTFRFWFQnICAgICAgICAgID0+ICdYJywKICAgICAgICAgICMjIGluZm9ybWl4IDEwCiAgICAgICAgICAnU1FMSU5UOCcgICAgICAgICAgPT4gJ0k4JywKICAgICAgICAgICdTUUxTRVJJQUw4JyAgICAgICA9PiAnSTgnLAogICAgICAgICAgJ1NRTE5DSEFSJyAgICAgICAgID0+ICdDJywKICAgICAgICAgICdTUUxOVkNIQVInICAgICAgICA9PiAnQycsCiAgICAgICAgICAnU1FMTFZBUkNIQVInICAgICAgPT4gJ1gnLAogICAgICAgICAgJ1NRTEJPT0wnICAgICAgICAgID0+ICdMJwogICAgICAgIF07CiAgICAgICAgCiAgICAgICAgLy8kdG1hcCA9IEZBTFNFOwogICAgICAgICR0ICAgID0gXHN0cnRvdXBwZXIoJHQpOwogICAgICAgIAogICAgICAgIHJldHVybiAkdHlwZU1hcFskdF0gPz8gJ04nOwogICAgfQogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gTWV0YVRhYmxlcygpIDogYXJyYXkKICB7CiAgICAkc3FsICA9ICdTSE9XIFRBQkxFUyc7CiAgICAkbGlzdCA9ICR0aGlzLT5jb25uZWN0aW9uLT5HZXRDb2woJHNxbCk7CiAgICAKICAgIGlmKFxjb3VudCgkbGlzdCkpIHsgcmV0dXJuICRsaXN0OyB9CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBNZXRhQ29sdW1ucygkdGFibGUpIDogYXJyYXkKICB7CiAgICAkdGFibGUgPSBcdHJpbSgkdGFibGUpOwogICAgCiAgICBpZighJHRhYmxlKQogICAgewogICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdlbXB0eSB0YWJsZSBuYW1lIHNwZWNpZmllZCBmb3IgJyAuIF9fTUVUSE9EX18pOwogICAgfQogICAgCiAgICAkc3FsID0gJ1NIT1cgQ09MVU1OUyBGUk9NID8nOwogICAgJHJzICA9ICR0aGlzLT5jb25uZWN0aW9uLT5HZXRBcnJheSgkc3FsLCAkdGFibGUpOwogICAgCiAgICBpZihcaXNfYXJyYXkoJHJzKSAmJiBcY291bnQoJHJzKSkKICAgIHsKICAgICAgJG91dCA9IFtdOwogICAgICAKICAgICAgZm9yZWFjaCgkcnMgYXMgJHJvdykgeyAkb3V0W10gPSAkcm93WydGaWVsZCddOyB9CiAgICAgIAogICAgICByZXR1cm4gJG91dDsKICAgIH0KICAgIAogICAgcmV0dXJuIFtdOwogIH0KICAKICAvKgogICAqIEFyZ3VhYmx5IHRoaXMgbWV0aG9kIGlzIGNvdW50ZXItcHJvZHVjdGl2ZS4gQW55IGNvcnJlY3Rpb24gaGVyZSB3aWxsCiAgICogcHJvYmFibHkgbm90IGJlIHJlcGxpY2F0ZWQgYXQgcnVudGltZSwgYW5kIGJldHRlciB0byBmYWlsIGR1cmluZyBpbnN0YWxsYXRpb24uCiAgICogVGhlIG5hbWUgaXMgbm90IGNoZWNrZWQgZm9yIGEgcmVzZXJ2ZWQtd29yZC4KICAgKiBQZXJtaXR0ZWQgY2hhcmFjdGVycyBpbiB1bnF1b3RlZCBpZGVudGlmaWVycyBhcmUgaW4gYWNjb3JkIHdpdGggTXlTUUwgZG9jdW1lbnRhdGlvbi4KICAgKi8KICBwcm90ZWN0ZWQgZnVuY3Rpb24gTmFtZVF1b3RlKCRuYW1lID0gTlVMTCwgJGFsbG93QnJhY2tldHMgPSBGQUxTRSkKICB7CiAgICBpZighXGlzX3N0cmluZygkbmFtZSkpIHsgcmV0dXJuICcnOyB9CiAgICAKICAgIC8vIGlmIG5hbWUgaXMgYWxyZWFkeSBxdW90ZWQsIGp1c3QgdHJpbQogICAgaWYoXHByZWdfbWF0Y2goJy9eXHMqYC4rYFxzKiQvJywgJG5hbWUpKQogICAgewogICAgICByZXR1cm4gXHRyaW0oJG5hbWUpOwogICAgfQogICAgCiAgICAkbmFtZSA9IFxydHJpbSgkbmFtZSk7CiAgICAvLyBpZiBuYW1lIGNvbnRhaW5zIHNwZWNpYWwgY2hhcmFjdGVycywgcXVvdGUgaXQKICAgICRwYXRuID0gKCRhbGxvd0JyYWNrZXRzKSA/ICdcdyQoKVx4ODAtXHhmZicgOiAnXHckXHg4MC1ceGZmJzsKICAgIAogICAgaWYoXHByZWdfbWF0Y2goJy9bXicgLiAkcGF0biAuICddLycsICRuYW1lKSkKICAgIHsKICAgICAgcmV0dXJuICdgJyAuICRuYW1lIC4gJ2AnOwogICAgfQogICAgCiAgICAvLyBpZiBuYW1lIGNvbnRhaW5zIG9ubHkgZGlnaXRzLCBxdW90ZSBpdAogICAgaWYoXHByZWdfbWF0Y2goJy9eXHMqXGQrJC8nLCAkbmFtZSkpIHsgcmV0dXJuICdgJyAuICRuYW1lIC4gJ2AnOyB9CiAgICAKICAgIHJldHVybiAkbmFtZTsKICB9CiAgCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9DcmVhdGVTdWZmaXgoJGZuYW1lLCAkZnR5cGUsICRmbm90bnVsbCwgJGZkZWZhdWx0LCAkZmF1dG9pbmMsICRmY29uc3RyYWludCwgJGZ1bnNpZ25lZCkgOiBzdHJpbmcKICB7CiAgICAkc3VmZml4ID0gJyc7CiAgICBpZigkZnVuc2lnbmVkKQogICAgewogICAgICAkc3VmZml4IC49ICcgVU5TSUdORUQnOwogICAgfQogICAgaWYoJGZub3RudWxsKQogICAgewogICAgICAkc3VmZml4IC49ICcgTk9UIE5VTEwnOwogICAgfQogICAgaWYoXHN0cmxlbigkZmRlZmF1bHQpKQogICAgewogICAgICAkc3VmZml4IC49ICIgREVGQVVMVCAkZmRlZmF1bHQiOwogICAgfQogICAgaWYoJGZhdXRvaW5jKQogICAgewogICAgICAkc3VmZml4IC49ICcgQVVUT19JTkNSRU1FTlQnOwogICAgfQogICAgaWYoJGZjb25zdHJhaW50KQogICAgewogICAgICAkc3VmZml4IC49ICcgJyAuICRmY29uc3RyYWludDsKICAgIH0KICAgIAogICAgcmV0dXJuICRzdWZmaXg7CiAgfQogIAogIHByb3RlY3RlZCBmdW5jdGlvbiBfUHJvY2Vzc09wdGlvbnMoJG9wdHMpCiAgewogICAgLy8gZml4ZXMgZm9yIG9sZCBUWVBFPSBzdHVmZiBpbiB0YWJvcHRzLgogICAgaWYoXGlzX2FycmF5KCRvcHRzKSAmJiBcY291bnQoJG9wdHMpKQogICAgewogICAgICBmb3JlYWNoKCRvcHRzIGFzICRrZXkgPT4gJiR2YWwpCiAgICAgIHsKICAgICAgICBpZihzdGFydHN3aXRoKFxzdHJ0b2xvd2VyKCRrZXkpLCAnbXlzcWwnKSkKICAgICAgICB7CiAgICAgICAgICAkdmFsID0gXHByZWdfcmVwbGFjZSgnL1RZUEVccz89L2knLCAnRU5HSU5FPScsICR2YWwpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgCiAgICByZXR1cm4gJG9wdHM7CiAgfQogIAogIHByb3RlY3RlZCBmdW5jdGlvbiBfSW5kZXhTUUwoJGlkeG5hbWUsICR0YWJuYW1lLCAkZmxkcywgJGlkeG9wdGlvbnMpIDogYXJyYXkKICB7CiAgICAkc3FsID0gW107CiAgICAKICAgIGlmKGlzc2V0KCRpZHhvcHRpb25zWydSRVBMQUNFJ10pIHx8IGlzc2V0KCRpZHhvcHRpb25zWydEUk9QJ10pKQogICAgewogICAgICBpZigkdGhpcy0+YWx0ZXJUYWJsZUFkZEluZGV4KQogICAgICB7CiAgICAgICAgJHNxbFtdID0gIkFMVEVSIFRBQkxFICR0YWJuYW1lIERST1AgSU5ERVggJGlkeG5hbWUiOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgICRzcWxbXSA9IFxzcHJpbnRmKCR0aGlzLT5kcm9wSW5kZXgsICRpZHhuYW1lLCAkdGFibmFtZSk7CiAgICAgIH0KICAgICAgCiAgICAgIGlmKGlzc2V0KCRpZHhvcHRpb25zWydEUk9QJ10pKSB7IHJldHVybiAkc3FsOyB9CiAgICB9CiAgICAKICAgIGlmKGVtcHR5ICgkZmxkcykpIHsgcmV0dXJuICRzcWw7IH0KICAgIAogICAgaWYoaXNzZXQoJGlkeG9wdGlvbnNbJ0ZVTExURVhUJ10pKQogICAgewogICAgICAkdW5pcXVlID0gJyBGVUxMVEVYVCc7CiAgICB9CiAgICBlbHNlIGlmKGlzc2V0KCRpZHhvcHRpb25zWydVTklRVUUnXSkpCiAgICB7CiAgICAgICR1bmlxdWUgPSAnIFVOSVFVRSc7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICR1bmlxdWUgPSAnJzsKICAgIH0KICAgIAogICAgaWYoXGlzX2FycmF5KCRmbGRzKSkgeyAkZmxkcyA9IGltcGxvZGUoJywgJywgJGZsZHMpOyB9CiAgICAKICAgIGlmKCR0aGlzLT5hbHRlclRhYmxlQWRkSW5kZXgpCiAgICB7CiAgICAgICRzID0gIkFMVEVSIFRBQkxFICR0YWJuYW1lIEFERCAkdW5pcXVlIElOREVYICRpZHhuYW1lICI7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICRzID0gJ0NSRUFURScgLiAkdW5pcXVlIC4gJyBJTkRFWCAnIC4gJGlkeG5hbWUgLiAnIE9OICcgLiAkdGFibmFtZTsKICAgIH0KICAgIAogICAgJHMgLj0gJyAoJyAuICRmbGRzIC4gJyknOwogICAgCiAgICBpZigoJG9wdHMgPSAkdGhpcy0+Z2V0X2RidHlwZV9vcHRpb25zKCRpZHhvcHRpb25zKSkpCiAgICB7CiAgICAgICRzIC49ICRvcHRzOwogICAgfQogICAgCiAgICAkc3FsW10gPSAkczsKICAgIAogICAgcmV0dXJuICRzcWw7CiAgfQogIAogIGZ1bmN0aW9uIENyZWF0ZVRhYmxlU1FMKCR0YWJuYW1lLCAkZmxkcywgJHRhYmxlb3B0aW9ucyA9IEZBTFNFKSA6IGFycmF5CiAgewogICAgJHN0ciAgICA9ICdFTkdJTkU9TXlJU0FNIENIQVJBQ1RFUiBTRVQgdXRmOCBDT0xMQVRFIHV0ZjhfZ2VuZXJhbF9jaSc7CiAgICAkZGJ0eXBlID0gJHRoaXMtPl9EQlR5cGUoKTsKICAgIAogICAgLy8gY2xlYW4gdXAgaW5wdXQgdGFibGVvcHRpb25zCiAgICBpZighJHRhYmxlb3B0aW9ucykKICAgIHsKICAgICAgJHRhYmxlb3B0aW9ucyA9IFskZGJ0eXBlID0+ICRzdHJdOwogICAgfQogICAgZWxzZSBpZihcaXNfc3RyaW5nKCR0YWJsZW9wdGlvbnMpKQogICAgewogICAgICAkdGFibGVvcHRpb25zID0gWyRkYnR5cGUgPT4gJHRhYmxlb3B0aW9uc107CiAgICB9CiAgICBlbHNlIGlmKFxpc19hcnJheSgkdGFibGVvcHRpb25zKSAmJiAhaXNzZXQoJHRhYmxlb3B0aW9uc1skZGJ0eXBlXSkgJiYgaXNzZXQoJHRhYmxlb3B0aW9uc1snbXlzcWwnXSkpCiAgICB7CiAgICAgICR0YWJsZW9wdGlvbnNbJGRidHlwZV0gPSAkdGFibGVvcHRpb25zWydteXNxbCddOwogICAgfQogICAgZWxzZSBpZihcaXNfYXJyYXkoJHRhYmxlb3B0aW9ucykgJiYgIWlzc2V0KCR0YWJsZW9wdGlvbnNbJGRidHlwZV0pICYmIGlzc2V0KCR0YWJsZW9wdGlvbnNbJ01ZU1FMJ10pKQogICAgewogICAgICAkdGFibGVvcHRpb25zWyRkYnR5cGVdID0gJHRhYmxlb3B0aW9uc1snTVlTUUwnXTsKICAgIH0KICAgIAogICAgZm9yZWFjaCgkdGFibGVvcHRpb25zIGFzICRrZXkgPT4gJiR2YWwpCiAgICB7CiAgICAgIGlmKEZBTFNFICE9PSBcc3RycG9zKCR2YWwsICdUWVBFPScpKQogICAgICB7CiAgICAgICAgJHZhbCA9IFxzdHJfcmVwbGFjZSgnVFlQRT0nLCAnRU5HSU5FPScsICR2YWwpOwogICAgICB9CiAgICB9CiAgICBpZigKICAgICAgaXNzZXQoJHRhYmxlb3B0aW9uc1skZGJ0eXBlXSkgJiYgRkFMU0UgPT09IFxzdHJwb3MoJHRhYmxlb3B0aW9uc1skZGJ0eXBlXSwgJ0NIQVJBQ1RFUicpICYmCiAgICAgIEZBTFNFID09PSBcc3RycG9zKCR0YWJsZW9wdGlvbnNbJGRidHlwZV0sICdDT0xMQVRFJykKICAgICkKICAgIHsKICAgICAgLy8gaWYgbm8gY2hhcmFjdGVyIHNldCBhbmQgY29sbGF0ZSBvcHRpb25zIHNwZWNpZmllZCwgZm9yY2UgVVRGOAogICAgICAkdGFibGVvcHRpb25zWyRkYnR5cGVdIC49ICcgQ0hBUkFDVEVSIFNFVCB1dGY4IENPTExBVEUgdXRmOF9nZW5lcmFsX2NpJzsKICAgIH0KICAgIAogICAgcmV0dXJuIHBhcmVudDo6Q3JlYXRlVGFibGVTUUwoJHRhYm5hbWUsICRmbGRzLCAkdGFibGVvcHRpb25zKTsKICB9CiAgCn0gLy8gZW5kIG9mIGNsYXNzCg==]]></data>
	</file>
	<file>
	  <filename>/lib/db/Engine/mysqli/class.ResultSet.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBDTVNNU0V4dFxkYlxFbmdpbmVcbXlzcWxpOwoKY2xhc3MgUmVzdWx0U2V0IGV4dGVuZHMgXENNU01TRXh0XGRiXEVuZ2luZVxSZXN1bHRTZXQKewogICAgcHJpdmF0ZSAkX2Nvbm5lY3Rpb247CiAgICBwcml2YXRlICRfcmVzdWx0SWQ7CiAgICBwcml2YXRlICRfZmllbGRzOwogICAgcHJpdmF0ZSAkX25yb3dzOwogICAgcHJpdmF0ZSAkX3BvczsKICAgIHByaXZhdGUgJF9zcWw7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFxteXNxbGkgJGNvbm4sICRyZXN1bHRJZCwgJHNxbCA9IG51bGwpCiAgICB7CiAgICAgICR0aGlzLT5fY29ubmVjdGlvbiA9ICRjb25uOwogICAgICAkdGhpcy0+X3Jlc3VsdElkID0gJHJlc3VsdElkOwogICAgICAkdGhpcy0+X3BvcyA9IDA7CiAgICAgICR0aGlzLT5fbnJvd3MgPSAwOwogICAgICAkdGhpcy0+X3NxbCA9ICRzcWw7CiAgICAgIAogICAgICBpZiggXGlzX29iamVjdCgkcmVzdWx0SWQpICkgeyAkdGhpcy0+X25yb3dzID0gXG15c3FsaV9udW1fcm93cygkcmVzdWx0SWQpOyB9CiAgICAgIAogICAgICBpZiggISR0aGlzLT5FT0YoKSApIHsgJHRoaXMtPmZldGNoX3JvdygpOyB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fZGVzdHJ1Y3QoKQogICAgewogICAgICBpZiggJHRoaXMtPnJlc3VsdElkICkKICAgICAgewogICAgICAgIFxteXNxbGlfZnJlZV9yZXN1bHQoJHRoaXMtPnJlc3VsdElkKTsKICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBDbG9zZSgpCiAgICB7CiAgICAgIGlmKCAkdGhpcy0+cmVzdWx0SWQgKSB7IFxteXNxbGlfZnJlZV9yZXN1bHQoJHRoaXMtPnJlc3VsdElkKTsgfQogICAgICAKICAgICAgJHRoaXMtPnJlc3VsdElkID0gTlVMTDsKICAgICAgJHRoaXMtPl9maWVsZHMgID0gTlVMTDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gRmllbGRzKCAka2V5ID0gbnVsbCApCiAgICB7CiAgICAgICRrZXkgPSAoc3RyaW5nKSAka2V5OwogICAgICAKICAgICAgaWYoIGVtcHR5KCRrZXkpICkgeyByZXR1cm4gJHRoaXMtPl9maWVsZHM7IH0KICAgICAgCiAgICAgIHJldHVybiAkdGhpcy0+ZmllbGRzWyRrZXldOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBSZWNvcmRDb3VudCgpIDogaW50CiAgICB7CiAgICAgIHJldHVybiAkdGhpcy0+X25yb3dzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBFT0YoKSA6IGJvb2wKICAgIHsKICAgICAgcmV0dXJuICgwID09ICR0aGlzLT5fbnJvd3MgfHwgJHRoaXMtPl9wb3MgPCAwIHx8ICR0aGlzLT5fcG9zID49ICR0aGlzLT5fbnJvd3MpOwogICAgfQogIAogIHByb3RlY3RlZCBmdW5jdGlvbiBNb3ZlKCRpZHgpIDogYm9vbAogIHsKICAgIGlmKCRpZHggPT0gJHRoaXMtPl9wb3MpIHsgcmV0dXJuIFRSVUU7IH0KICAgIAogICAgaWYoJGlkeCA+PSAwICYmICRpZHggPCAkdGhpcy0+X25yb3dzICYmIFxteXNxbGlfZGF0YV9zZWVrKCR0aGlzLT5fcmVzdWx0SWQsICRpZHgpKQogICAgewogICAgICAkdGhpcy0+X3BvcyA9ICRpZHg7CiAgICAgICR0aGlzLT5mZXRjaF9yb3coKTsKICAgICAgCiAgICAgIHJldHVybiBUUlVFOwogICAgfQogICAgCiAgICAkdGhpcy0+X3BvcyA9ICR0aGlzLT5fbnJvd3M7CiAgICAKICAgIHJldHVybiBGQUxTRTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIE1vdmVGaXJzdCgpIDogYm9vbAogIHsKICAgIGlmKDAgPT0gJHRoaXMtPl9wb3MpIHsgcmV0dXJuIFRSVUU7IH0KICAgIAogICAgcmV0dXJuICR0aGlzLT5Nb3ZlKDApOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gTW92ZU5leHQoKSA6IGJvb2wKICB7CiAgICByZXR1cm4gJHRoaXMtPk1vdmUoJHRoaXMtPl9wb3MgKyAxKTsKICB9CiAgCiAgLyoqCiAgICogRmV0Y2hlcyBhIHNpbmdsZSByb3cgZnJvbSB0aGUgcmVzdWx0IHNldC4KICAgKgogICAqIEByZXR1cm4gdm9pZAogICAqLwogIHByb3RlY3RlZCBmdW5jdGlvbiBmZXRjaF9yb3coKSA6IHZvaWQKICB7CiAgICBpZighJHRoaXMtPkVPRigpKQogICAgewogICAgICAkdGhpcy0+X2ZpZWxkcyA9IFxteXNxbGlfZmV0Y2hfYXJyYXkoJHRoaXMtPl9yZXN1bHRJZCwgXE1ZU1FMSV9BU1NPQyk7CiAgICB9CiAgfQogIAp9IC8vIGVuZCBvZiBjbGFzcwo=]]></data>
	</file>
	<file>
	  <filename>/lib/db/Engine/mysqli/class.Statement.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBDTVNNU0V4dFxkYlxFbmdpbmVcbXlzcWxpOwoKY2xhc3MgU3RhdGVtZW50IGV4dGVuZHMgXENNU01TRXh0XGRiXEVuZ2luZVxTdGF0ZW1lbnQKewogIHByaXZhdGUgJF9kYXRhOwogIAogIC8vIG1ldGEuLi4KICBwcml2YXRlICRfYmluZDsKICBwcml2YXRlICRfYm91bmQ7CiAgcHJpdmF0ZSAkX3R5cGVzOwogIHByaXZhdGUgJF9zdG10OyAgICAgLy8gdGhlIHN0YXRlbWVudCBvYmplY3QuCiAgcHJpdmF0ZSAkX21ldGE7ICAgICAvLyBhZnRlciBmaXJzdCBleGVjdXRlCiAgcHJpdmF0ZSAkX251bV9yb3dzOyAvLyBhZnRlciBmaXJzdCBleGVjdXRlCiAgcHJpdmF0ZSAkX3JvdzsgICAgICAvLyB1cGRhdGVzIGFmdGVyIGVhY2ggZXhlY3V0ZSBmb3IgcXVlcmllcyB3aXRoIGEgcmVzdWx0c2V0CiAgcHJpdmF0ZSAkX3BvczsgICAgICAvLyB1cGRhdGVzIGFmdGVyIGVhY2ggZXhlY3V0ZSBmb3IgcXVlcmllcyB3aXRoIGEgcmVzdWx0c2V0CiAgCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KENvbm5lY3Rpb24gJGNvbm4sICRzcWwgPSBOVUxMKQogIHsKICAgIC8vIHRoaXMgaXMganVzdCBmb3IgdHlwZSBjaGVja2luZy4KICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJGNvbm4sICRzcWwpOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gX19kZXN0cnVjdCgpCiAgewogICAgaWYoJHRoaXMtPl9zdG10KQogICAgewogICAgICAkdGhpcy0+X3N0bXQtPmZyZWVfcmVzdWx0KCk7CiAgICAgICR0aGlzLT5fc3RtdC0+Y2xvc2UoKTsKICAgIH0KICB9CiAgCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldF90eXBlX2NoYXIoJHZhcikgOiBzdHJpbmcKICB7CiAgICAkdCA9IFxnZXR0eXBlKCR2YXIpOwogICAgc3dpdGNoKCR0KQogICAgewogICAgICBjYXNlICdkb3VibGUnOgogICAgICAgIHJldHVybiAnZCc7CiAgICAgIGNhc2UgJ2Jvb2xlYW4nOgogICAgICBjYXNlICdpbnRlZ2VyJzoKICAgICAgICByZXR1cm4gJ2knOwogICAgICBjYXNlICdzdHJpbmcnOgogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiAncyc7CiAgICB9CiAgfQogIAogIHByb3RlY3RlZCBmdW5jdGlvbiBzZXRfYm91bmRfZGF0YSgkZGF0YSkgOiB2b2lkCiAgewogICAgJHRoaXMtPl9kYXRhID0gJGRhdGE7CiAgICBccmVzZXQoJHRoaXMtPl9kYXRhKTsKICB9CiAgCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJpbmRfcGFyYW1zKCkgOiB2b2lkCiAgewogICAgaWYoISR0aGlzLT5fc3RtdCkgeyAkdGhpcy0+cHJlcGFyZSgkdGhpcy0+c3FsKTsgfQogICAgCiAgICAvLyBnZXQgdGhlIHR5cGUgc3RyaW5nCiAgICAkdGhpcy0+dHlwZXMgPSAnJzsKICAgICRrZXlzICAgICAgICA9IE5VTEw7CiAgICAkYXJncyAgICAgICAgPSBcZnVuY19nZXRfYXJncygpOwogICAgaWYoMSA9PSBcY291bnQoJGFyZ3MpICYmIFxpc19hcnJheSgkYXJncykgJiYgXGlzX2FycmF5KCRhcmdzWzBdKSkKICAgIHsKICAgICAgLy8gd2UgZXhwZWN0IHRoYXQgdGhlIGRhdGEgaXMgYW4gYXNzb2NpdGl2ZSBhcnJheQogICAgICAkcm93ID0gJGFyZ3NbMF07CiAgICAgIGZvcmVhY2goJHJvdyBhcyAka2V5ID0+ICR2YWwpCiAgICAgIHsKICAgICAgICAkdGhpcy0+X3R5cGVzIC49ICR0aGlzLT5nZXRfdHlwZV9jaGFyKCR2YWwpOwogICAgICB9CiAgICAgICR0aGlzLT5fYmluZCA9IFxhcnJheV92YWx1ZXMoJHJvdyk7CiAgICAgICRrZXlzICAgICAgICA9IFxhcnJheV9rZXlzKCRyb3cpOwogICAgfQogICAgZWxzZQogICAgewogICAgICAvLyBmdW5jdGlvbiBjYWxsZWQgd2l0aCBudW1lcm91cyBwYXJhbWV0ZXJzLi4uIGdldCB0aGVpciB0eXBlcwogICAgICAka2V5cyA9IFxhcnJheV9rZXlzKCRhcmdzKTsKICAgICAgCiAgICAgIGZvcmVhY2goJGFyZ3MgYXMgJHZhbCkKICAgICAgewogICAgICAgICR0aGlzLT5fdHlwZXMgLj0gJHRoaXMtPmdldF90eXBlX2NoYXIoJHZhbCk7CiAgICAgIH0KICAgICAgCiAgICAgICR0aGlzLT5fYmluZCA9IFxhcnJheV92YWx1ZXMoJGFyZ3MpOwogICAgfQogICAgCiAgICAkdGhpcy0+X2JvdW5kICAgPSBbXTsKICAgICR0aGlzLT5fYm91bmRbXSA9JiAkdGhpcy0+X3R5cGVzOwogICAgCiAgICBmb3IoJGkgPSAwLCAkaU1heCA9IFxjb3VudCgka2V5cyk7ICRpIDwgJGlNYXg7ICRpKyspCiAgICB7CiAgICAgICR0aGlzLT5fYm91bmRbXSA9JiAkdGhpcy0+X2JpbmRbJGldOwogICAgfQogICAgCiAgICBcY2FsbF91c2VyX2Z1bmNfYXJyYXkoWyR0aGlzLT5fc3RtdCwgJ2JpbmRfcGFyYW0nXSwgJHRoaXMtPl9ib3VuZCk7CiAgfQogIAogIHByb3RlY3RlZCBmdW5jdGlvbiBwcmVwYXJlKCRzcWwpIDogdm9pZAogIHsKICAgICRjb25uID0gJHRoaXMtPmRiLT5nZXRfaW5uZXJfbXlzcWwoKTsKICAgIAogICAgaWYoISRjb25uIHx8ICEkdGhpcy0+ZGItPklzQ29ubmVjdGVkKCkpCiAgICB7CiAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0F0dGVtcHQgdG8gY3JlYXRlIHByZXBhcmVkIHN0YXRlbWVudCB3aGVuIGRhdGFiYXNlIGlzIG5vdCBjb25uZWN0ZWQnKTsKICAgIH0KICAgIAogICAgJHRoaXMtPl9zdG10ID0gJGNvbm4tPnByZXBhcmUoKHN0cmluZykkc3FsKTsKICAgIAogICAgaWYoISR0aGlzLT5fc3RtdCkKICAgIHsKICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignQ291bGQgbm90IHByZXBhcmUgYSBzdGF0ZW1lbnQ6ICcgLiAkY29ubi0+ZXJyb3IpOwogICAgfQogICAgCiAgICAkdGhpcy0+X3JvdyA9IE5VTEw7CiAgICAkdGhpcy0+X3BvcyA9IDA7CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBCaW5kKGFycmF5ICRkYXRhKSA6IHZvaWQKICB7CiAgICBwYXJlbnQ6OkJpbmQoJGRhdGEpOwogICAgJGZpcnN0ID0gJGRhdGFbMF07CiAgICAkdGhpcy0+YmluZF9wYXJhbXMoJGZpcnN0KTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIEVPRigpIDogYm9vbAogIHsKICAgIGlmKCR0aGlzLT5fbWV0YSkgeyByZXR1cm4gKCR0aGlzLT5fcG9zID49ICR0aGlzLT5fbnVtX3Jvd3MpOyB9CiAgICAKICAgIGlmKCEkdGhpcy0+X2RhdGEpIHsgcmV0dXJuIFRSVUU7IH0KICAgIAogICAgcmV0dXJuIChGQUxTRSA9PT0gXGN1cnJlbnQoJHRoaXMtPl9kYXRhKSk7CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBNb3ZlRmlyc3QoKSA6IHZvaWQKICB7CiAgICBpZigkdGhpcy0+X21ldGEpCiAgICB7CiAgICAgICR0aGlzLT5fc3RtdC0+ZGF0YV9zZWVrKDApOwogICAgfQogICAgaWYoJHRoaXMtPl9kYXRhKSB7IFxyZXNldCgkdGhpcy0+X2RhdGEpOyB9CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBNb3ZlTmV4dCgpIDogdm9pZAogIHsKICAgIGlmKCR0aGlzLT5fbWV0YSkgeyArKyR0aGlzLT5fcG9zOyB9CiAgICAKICAgIGlmKCR0aGlzLT5fZGF0YSkgeyBcbmV4dCgkdGhpcy0+X2RhdGEpOyB9CiAgfQogIAogIC8qKgogICAqIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgYSBzcGVjaWZpYyBjb2x1bW4gZnJvbSB0aGUgY3VycmVudCByb3cgb2YgdGhlIHJlc3VsdCBzZXQuCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNvbCBUaGUgbmFtZSBvZiB0aGUgY29sdW1uIHRvIHJldHJpZXZlIHRoZSB2YWx1ZSBmcm9tLiBJZiBudWxsLCB0aGUgZW50aXJlIHJvdyBpcyByZXR1cm5lZC4KICAgKiBAcmV0dXJuIG1peGVkfG51bGwgVGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgY29sdW1uIGlmIGl0IGV4aXN0cywgb3IgdGhlIGVudGlyZSByb3cgaWYgJGNvbCBpcyBudWxsLiBOdWxsIGlmIHRoZXJlIGlzIG5vIGN1cnJlbnQgcm93LgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBGaWVsZHMoJGNvbCA9IE5VTEwpCiAgewogICAgJHJvdyA9IE5VTEw7CiAgICAKICAgIGlmKCR0aGlzLT5fc3RtdCkKICAgIHsKICAgICAgJHRoaXMtPl9zdG10LT5mZXRjaCgpOwogICAgICAkcm93ID0gJHRoaXMtPl9yb3c7CiAgICB9CiAgICAKICAgIGlmKCEkcm93ICYmICR0aGlzLT5fZGF0YSkKICAgIHsKICAgICAgJHJvdyA9IFxjdXJyZW50KCR0aGlzLT5fZGF0YSk7CiAgICB9CiAgICAKICAgIGlmKCEkcm93KSB7IHJldHVybiBOVUxMOyB9IC8vIG5vdGhpbmcKICAgIAogICAgaWYoJGNvbCkKICAgIHsKICAgICAgaWYoaXNzZXQoJHJvd1skY29sXSkpCiAgICAgIHsKICAgICAgICByZXR1cm4gJHJvd1skY29sXTsKICAgICAgfQogICAgfQogICAgZWxzZQogICAgewogICAgICByZXR1cm4gJHJvdzsKICAgIH0KICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIEV4ZWN1dGUoKSA6IHZvaWQKICB7CiAgICBpZighJHRoaXMtPl9zdG10KSB7ICR0aGlzLT5wcmVwYXJlKCR0aGlzLT5fc3FsKTsgfQogICAgCiAgICAkYXJncyA9IFxmdW5jX2dldF9hcmdzKCk7CiAgICAKICAgIC8vaWYoMSA9PSBcY291bnQoJGFyZ3MpICYmIFxpc19hcnJheSgkYXJncykgJiYgXGlzX2FycmF5KCRhcmdzWzBdKSkKICAgIGlmKDEgPT0gXGNvdW50KCRhcmdzKSAmJiBcaXNfYXJyYXkoJGFyZ3NbMF0pKSB7ICRhcmdzID0gJGFyZ3NbMF07IH0KICAgIAogICAgLyoKICAgICAgaWYgd2UgaGF2ZSBwYXJhbSBjb3VudCwgZmluZCBzb21lIGFyZ3VtZW50cy4uLgogICAgICBlaXRoZXIgdmlhIHRoZSBleGVjdXRlIG1ldGhvZC4uLgogICAgICBvciB2aWEgYm91bmQgcGFyYW1zCiAgICAqLwogICAgJHBjID0gJHRoaXMtPl9zdG10LT5wYXJhbV9jb3VudDsKICAgICRmYyA9ICR0aGlzLT5fc3RtdC0+ZmllbGRfY291bnQ7CiAgICAkcGFyYW1zID0gW107CiAgICAKICAgIGlmKCRhcmdzKQogICAgewogICAgICAkdGhpcy0+X2RhdGEgPSAkYXJnczsKICAgICAgJHRoaXMtPmJpbmRfcGFyYW1zKCRhcmdzKTsKICAgIH0KICAgIAogICAgLy8gd2UgYXJlIGV4cGVjdGluZyBwYXJhbWV0ZXJzCiAgICBpZigkcGMgJiYgIVxjb3VudCgkYXJncykpCiAgICB7CiAgICAgIC8vIGdldCB0aGUgYXJndW1lbnRzIHZpYSB0aGUgYm91bmQgZGF0YSBjdXJyZW50IHJvdy4KICAgICAgaWYoISR0aGlzLT5fYmluZCkKICAgICAgewogICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ05vIGJvdW5kIHBhcmFtZXRlcnMsIGFuZCBubyBhcmd1bWVudHMgcGFzc2VkJyk7CiAgICAgIH0KICAgICAgaWYoXGNvdW50KCR0aGlzLT5fYmluZCkgIT0gJHBjKQogICAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignSW5jb3JyZWN0IG51bWJlciBvZiBib3VuZCBwYXJhbWV0ZXJzLiAgRXhwZWN0aW5nICcgLiAkdGhpcy0+X3N0bXQtPmZpZWxkX2NvdW50KTsKICAgICAgfQogICAgICAkYXJncyA9ICR0aGlzLT5GaWVsZHMoKTsKICAgIH0KICAgIGlmKCRwYyAhPSBcY291bnQoJGFyZ3MpKQogICAgewogICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdJbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cy4gRXhwZWN0aW5nICcgLiAkcGMpOwogICAgfQogICAgCiAgICBpZigkYXJncykKICAgIHsKICAgICAgLy8gdXBkYXRlIGJvdW5kIHZhbHVlcwogICAgICAka2V5cyA9IFxhcnJheV9rZXlzKCRhcmdzKTsKICAgICAgZm9yKCRpID0gMCwgJGlNYXggPSBcY291bnQoJHRoaXMtPl9iaW5kKTsgJGkgPCAkaU1heDsgJGkrKykKICAgICAgewogICAgICAgICR0aGlzLT5fYmluZFskaV0gPSAkYXJnc1ska2V5c1skaV1dOwogICAgICB9CiAgICB9CiAgICAKICAgICRyZXMgPSAkdGhpcy0+X3N0bXQtPmV4ZWN1dGUoKTsKICAgIAogICAgaWYoISRyZXMpCiAgICB7CiAgICAgICMgd2h5IGRpZSBoZXJlPyAoSk0pCiAgICAgIGRpZSgnRVJST1I6ICcgLiAkdGhpcy0+X3N0bXQtPmVycm9yIC4gIlxuIik7CiAgICB9CiAgICAKICAgICR0aGlzLT5fc3RtdC0+c3RvcmVfcmVzdWx0KCk7CiAgICAKICAgICRtZXRhID0gJHRoaXMtPl9zdG10LT5yZXN1bHRfbWV0YWRhdGEoKTsKICAgIAogICAgaWYoISR0aGlzLT5fbWV0YSAmJiAkbWV0YSkKICAgIHsKICAgICAgJHRoaXMtPl9udW1fcm93cyA9ICR0aGlzLT5fc3RtdC0+bnVtX3Jvd3M7CiAgICAgICR0aGlzLT5fbWV0YSAgICAgPSAkbWV0YTsKICAgICAgJHRoaXMtPl9yb3cgICAgICA9IFtdOwogICAgICAKICAgICAgd2hpbGUoJGZpZWxkID0gJHRoaXMtPl9tZXRhLT5mZXRjaF9maWVsZCgpKQogICAgICB7CiAgICAgICAgJHRoaXMtPl9yb3dbJGZpZWxkLT5uYW1lXSA9IE5VTEw7CiAgICAgICAgJHBhcmFtc1tdICAgICAgICAgICAgICAgICA9JiAkdGhpcy0+X3Jvd1skZmllbGQtPm5hbWVdOwogICAgICB9CiAgICAgIFxjYWxsX3VzZXJfZnVuY19hcnJheShbJHRoaXMtPl9zdG10LCAnYmluZF9yZXN1bHQnXSwgJHBhcmFtcyk7CiAgICB9CiAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/eccom</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/eccom/payment</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/eccom/payment/class.AbstractPaymentGateway.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KbmFtZXNwYWNlIENNU01TRXh0XGVjY29tXHBheW1lbnQ7DQoNCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0UGF5bWVudEdhdGV3YXkNCnsNCiAgLyoqDQogICAqIFN0YXJ0IGEgcGF5bWVudCBwcm9jZXNzLg0KICAgKg0KICAgKiBAcGFyYW0gYXJyYXkgJHBheW1lbnREZXRhaWxzIFRoZSBkZXRhaWxzIGZvciB0aGUgcGF5bWVudC4NCiAgICogQHJldHVybiBhcnJheSBUaGUgcmVzcG9uc2Ugc3RydWN0dXJlIHRvIGJlIGNvbnNpc3RlbnQgYWNyb3NzIGFsbCBnYXRld2F5cy4NCiAgICovDQogIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBzdGFydFBheW1lbnQoYXJyYXkgJHBheW1lbnREZXRhaWxzKTsNCiAgDQogIC8qKg0KICAgKiBWYWxpZGF0ZSBhIHBheW1lbnQgcmVzcG9uc2UuDQogICAqDQogICAqIEBwYXJhbSBhcnJheSAkcmVzcG9uc2VEYXRhIFRoZSByZXNwb25zZSBkYXRhIGZyb20gdGhlIHBheW1lbnQgZ2F0ZXdheS4NCiAgICogQHJldHVybiBhcnJheSBUaGUgdmFsaWRhdGlvbiByZXN1bHQuDQogICAqLw0KICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gdmFsaWRhdGVSZXNwb25zZShhcnJheSAkcmVzcG9uc2VEYXRhKTsNCiAgDQogIC8qKg0KICAgKiBQcm9jZXNzIGEgd2ViaG9vayBub3RpZmljYXRpb24uDQogICAqDQogICAqIEBwYXJhbSBhcnJheSAkd2ViaG9va0RhdGEgVGhlIGRhdGEgcmVjZWl2ZWQgZnJvbSBhIHdlYmhvb2suDQogICAqIEByZXR1cm4gYXJyYXkgVGhlIHJlc3VsdCBvZiB3ZWJob29rIHByb2Nlc3NpbmcuDQogICAqLw0KICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gcHJvY2Vzc1dlYmhvb2soYXJyYXkgJHdlYmhvb2tEYXRhKTsNCn0NCg==]]></data>
	</file>
	<file>
	  <filename>/lib/eccom/payment/class.BasePaymentGateway.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENNU01TRXh0XGVjY29tXHBheW1lbnQ7CgpjbGFzcyBCYXNlUGF5bWVudEdhdGV3YXkKewogIHByb3RlY3RlZCAkYXBpRW5kcG9pbnQ7CiAgcHJvdGVjdGVkICRhcGlLZXk7CiAgcHJvdGVjdGVkICRzZWNyZXRLZXk7CiAgcHJvdGVjdGVkICRjdXJsT3B0aW9ucyA9IFtdOwoKICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGFwaUVuZHBvaW50LCAkYXBpS2V5LCAkc2VjcmV0S2V5KQogIHsKICAgICR0aGlzLT5hcGlFbmRwb2ludCA9ICRhcGlFbmRwb2ludDsKICAgICR0aGlzLT5hcGlLZXkgPSAkYXBpS2V5OwogICAgJHRoaXMtPnNlY3JldEtleSA9ICRzZWNyZXRLZXk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCRwYXJhbXMpCiAgewogICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCcpOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGF1dGhvcml6ZVBheW1lbnQoJHBhcmFtcykKICB7CiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdNZXRob2Qgbm90IGltcGxlbWVudGVkJyk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gY2FwdHVyZVBheW1lbnQoJHRyYW5zYWN0aW9uSWQsICRhbW91bnQpCiAgewogICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCcpOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHJlZnVuZFBheW1lbnQoJHRyYW5zYWN0aW9uSWQsICRhbW91bnQpCiAgewogICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCcpOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGNhbmNlbFRyYW5zYWN0aW9uKCR0cmFuc2FjdGlvbklkKQogIHsKICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQnKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBjaGVja1RyYW5zYWN0aW9uU3RhdHVzKCR0cmFuc2FjdGlvbklkKQogIHsKICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQnKTsKICB9CgogIHByb3RlY3RlZCBmdW5jdGlvbiBzZW5kUmVxdWVzdCgkbWV0aG9kLCAkZW5kcG9pbnQsICRkYXRhID0gW10pCiAgewogICAgJHVybCA9ICR0aGlzLT5hcGlFbmRwb2ludCAuICRlbmRwb2ludDsKICAgICRjaCA9IGN1cmxfaW5pdCgpOwogICAgJHRoaXMtPnNldEN1cmxPcHRpb25zKCRjaCwgJG1ldGhvZCwgJHVybCwgJGRhdGEpOwogICAgJHJlc3BvbnNlID0gY3VybF9leGVjKCRjaCk7CiAgICAkZXJyb3IgPSBjdXJsX2Vycm9yKCRjaCk7CiAgICBjdXJsX2Nsb3NlKCRjaCk7CgogICAgaWYgKCRlcnJvcikKICAgIHsKICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiQ1VSTCBFcnJvcjogJGVycm9yIik7CiAgICB9CgogICAgcmV0dXJuIGpzb25fZGVjb2RlKCRyZXNwb25zZSwgdHJ1ZSk7CiAgfQoKICBwcml2YXRlIGZ1bmN0aW9uIHNldEN1cmxPcHRpb25zKCRjaCwgJG1ldGhvZCwgJHVybCwgJGRhdGEpCiAgewogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgJHVybCk7CiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUpOwogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0hUVFBIRUFERVIsIFsKICAgICAgJ0F1dGhvcml6YXRpb246IEJlYXJlciAnIC4gJHRoaXMtPmFwaUtleSwKICAgICAgJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbicKICAgIF0pOwoKICAgIGlmICgkbWV0aG9kID09PSAnUE9TVCcpCiAgICB7CiAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NULCB0cnVlKTsKICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsIGpzb25fZW5jb2RlKCRkYXRhKSk7CiAgICB9CiAgfQp9Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/eccom/payment/class.PaymentGatewayFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENNU01TRXh0XGVjY29tXHBheW1lbnQ7Cgp1c2UgTW9kdWxlT3BlcmF0aW9uczsKCmNsYXNzIFBheW1lbnRHYXRld2F5RmFjdG9yeQp7CiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoJGdhdGV3YXlUeXBlKQogIHsKICAgICRtb2R1bGVzID0gTW9kdWxlT3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCktPmdldF9tb2R1bGVzX3dpdGhfY2FwYWJpbGl0eSgncGF5bWVudF9nYXRld2F5Jyk7CiAgICAKICAgIGlmIChpc3NldCgkbW9kdWxlc1skZ2F0ZXdheVR5cGVdKSkKICAgIHsKICAgICAgJG1vZHVsZSA9ICRtb2R1bGVzWyRnYXRld2F5VHlwZV07CiAgICAgICRjbGFzc05hbWUgPSAiXFx7JGdhdGV3YXlUeXBlfVxceyRnYXRld2F5VHlwZX1HYXRld2F5IjsKICAgICAgCiAgICAgIGlmIChcY2xhc3NfZXhpc3RzKCRjbGFzc05hbWUpICYmIFxpc19zdWJjbGFzc19vZigkY2xhc3NOYW1lLCBCYXNlUGF5bWVudEdhdGV3YXk6OmNsYXNzKSkKICAgICAgewogICAgICAgIHJldHVybiBuZXcgJGNsYXNzTmFtZSgpOwogICAgICB9CiAgICB9CiAgICAKICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCBvciBtaXNzaW5nIHBheW1lbnQgZ2F0ZXdheTogJGdhdGV3YXlUeXBlIik7CiAgfQogIAogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QXZhaWxhYmxlR2F0ZXdheXMoKQogIHsKICAgICRtb2R1bGVzID0gTW9kdWxlT3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCktPmdldF9tb2R1bGVzX3dpdGhfY2FwYWJpbGl0eSgncGF5bWVudF9nYXRld2F5Jyk7CiAgICAKICAgIC8vIEVuc3VyZSBvbmx5IG1vZHVsZSBuYW1lcyBhcmUgcmV0dXJuZWQKICAgICRtb2R1bGVOYW1lcyA9IFtdOwogICAgZm9yZWFjaCAoJG1vZHVsZXMgYXMgJG1vZHVsZSkKICAgIHsKICAgICAgJG1vZHVsZU5hbWVzWyRtb2R1bGVdID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgkbW9kdWxlKS0+R2V0RnJpZW5kbHlOYW1lKCk7CiAgICB9CiAgICAKICAgIHJldHVybiAkbW9kdWxlTmFtZXM7CiAgfQp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/eccom/payment/class.PaymentGatewayWrapper.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENNU01TRXh0XGVjY29tXHBheW1lbnQ7CmNsYXNzIFBheW1lbnRHYXRld2F5V3JhcHBlciB7CiAgICBwcm90ZWN0ZWQgJGdhdGV3YXlNb2R1bGU7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGdhdGV3YXlNb2R1bGVOYW1lKSB7CiAgICAgICAgJHRoaXMtPmdhdGV3YXlNb2R1bGUgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRnYXRld2F5TW9kdWxlTmFtZSk7CiAgICAgICAgaWYgKCEkdGhpcy0+Z2F0ZXdheU1vZHVsZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEV4Y2VwdGlvbigiUGF5bWVudCBnYXRld2F5IG1vZHVsZSAkZ2F0ZXdheU1vZHVsZU5hbWUgbm90IGZvdW5kLiIpOwogICAgICAgIH0KICAgIH0KICAgIHB1YmxpYyBmdW5jdGlvbiBzdGFydFBheW1lbnQoYXJyYXkgJHBheW1lbnREZXRhaWxzKSB7CiAgICAgICAgaWYgKCFtZXRob2RfZXhpc3RzKCR0aGlzLT5nYXRld2F5TW9kdWxlLCAnc3RhcnRQYXltZW50JykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxFeGNlcHRpb24oIlRoZSBnYXRld2F5IGRvZXMgbm90IHN1cHBvcnQgc3RhcnRpbmcgYSBwYXltZW50LiIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHRoaXMtPmdhdGV3YXlNb2R1bGUtPnN0YXJ0UGF5bWVudCgkcGF5bWVudERldGFpbHMpOwogICAgfQogICAgcHVibGljIGZ1bmN0aW9uIHZhbGlkYXRlUmVzcG9uc2UoYXJyYXkgJHJlc3BvbnNlRGF0YSkgewogICAgICAgIGlmICghbWV0aG9kX2V4aXN0cygkdGhpcy0+Z2F0ZXdheU1vZHVsZSwgJ3ZhbGlkYXRlUmVzcG9uc2UnKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEV4Y2VwdGlvbigiVGhlIGdhdGV3YXkgZG9lcyBub3Qgc3VwcG9ydCByZXNwb25zZSB2YWxpZGF0aW9uLiIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHRoaXMtPmdhdGV3YXlNb2R1bGUtPnZhbGlkYXRlUmVzcG9uc2UoJHJlc3BvbnNlRGF0YSk7CiAgICB9CiAgICBwdWJsaWMgZnVuY3Rpb24gcHJvY2Vzc1dlYmhvb2soYXJyYXkgJHdlYmhvb2tEYXRhKSB7CiAgICAgICAgaWYgKCFtZXRob2RfZXhpc3RzKCR0aGlzLT5nYXRld2F5TW9kdWxlLCAncHJvY2Vzc1dlYmhvb2snKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEV4Y2VwdGlvbigiVGhlIGdhdGV3YXkgZG9lcyBub3Qgc3VwcG9ydCB3ZWJob29rIHByb2Nlc3NpbmcuIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdGhpcy0+Z2F0ZXdheU1vZHVsZS0+cHJvY2Vzc1dlYmhvb2soJHdlYmhvb2tEYXRhKTsKICAgIH0KfQ==]]></data>
	</file>
	<file>
	  <filename>/lib/Email</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/Email/class.Email.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIERlZmluZXMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIHRlbXBsYXRhYmxlIGVtYWlsLCBhbmQgd2hvIGl0IGlzIGdvaW5nIHRvIGJlIHNlbnQgdG8gaW4gdGhlIGNvbnRleHQKICogb2YgQ01TTVMuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0XEVtYWlsCiAqIEBjYXRlZ29yeSBVdGlsaXRpZXMKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxOCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCgpuYW1lc3BhY2UgQ01TTVNFeHRcRW1haWw7CgovKioKICogRGVmaW5lcyBhbiBpbW11dGFibGUgb2JqZWN0IHJlcHJlc2VudGluZyBhIHRlbXBsYXRhYmxlIGVtYWlsLCB3aGF0IGlzIGF0dGFjaGVkIHRvIGl0LCBhbmQgd2hvIGl0IGlzIGdvaW5nIHRvIGJlIHNlbnQgdG8gaW4gdGhlIGNvbnRleHQgb2YgQ01TTVMuCiAqCiAqIEBzaW5jZSAxLjU5CiAqIEBwcm9wZXJ0eS1yZWFkIHN0cmluZ1tdICR0b19hZG1pbl9ncm91cHMgIEEgbGlzdCBvZiBhZG1pbiBncm91cCBuYW1lcyBvciBpZHMgdGhhdCB0aGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIHNlbnQgdG8uCiAqIEBwcm9wZXJ0eS1yZWFkIGludFtdICAgICR0b19mZXVfdXNlcnMgICAgIEEgbGlzdCBvZiBGRVUgdXNlciBpZHMgdGhhdCB0aGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIHNlbnQgdG8uCiAqIEBwcm9wZXJ0eS1yZWFkIHN0cmluZ1tdICR0b19mZXVfZ3JvdXBzICAgIEEgbGlzdCBvZiBGRVUgdXNlciBncm91cCBuYW1lcyBvciBpZHMgdGhhdCB0aGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIHNlbnQgdG8uCiAqIEBwcm9wZXJ0eS1yZWFkIGJvb2wgICAgICR0b19jdXJyZW50X2FkbWluIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgbWVzc2FnZSBzaG91bGQgYmUgc2VudCB0byB0aGUgY3VycmVudCBsb2dnZWQgaW4gYWRtaW5pc3RyYXRvciAoYWRtaW4gcmVxdWVzdHMgb25seSkKICogQHByb3BlcnR5LXJlYWQgYm9vbCAgICAgJHRvX2N1cnJlbnRfZmV1ICAgSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBtZXNzYWdlIHNob3VsZCBiZSBzZW50IHRvIHRoZSBjdXJyZW50IGxvZ2dlZCBpbiBGRVUgdXNlciAoZnJvbnRlbmQgcmVxdWVzdHMgb25seSkKICogQHByb3BlcnR5LXJlYWQgc3RyaW5nW10gJHRvX2FkZHIgICAgICAgICAgQWRkaXRpb25hbCBlbWFpbCBhZGRyZXNzZXMgdG8gc2VuZCB0aGlzIG1lc3NhZ2UgdG8KICogQHByb3BlcnR5LXJlYWQgc3RyaW5nW10gJGNjX2FkZHIgICAgICAgICAgQSBsaXN0IG9mIGVtYWlsIGFkZHJlc3NlcyB0byBDQyB0aGlzIG1lc3NhZ2UgdG8uCiAqIEBwcm9wZXJ0eS1yZWFkIHN0cmluZ1tdICRiY2NfYWRkciAgICAgICAgIEEgbGlzdCBvZiBlbWFpbCBhZGRyZXNzZXMgdG8gQkNDIHRoaXMgbWVzc2FnZSB0by4KICogQHByb3BlcnR5LXJlYWQgYXJyYXkgICAgJGRhdGEgICAgICAgICAgICAgQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgdmFyaWFibGVzIGFuZCB2YWx1ZXMgdG8gYXNzaWduIHRvIHNtYXJ0eSB3aGVuIHByb2Nlc3NpbmcgdGhlIHRlbXBsYXRlKHMpLgogKiBAcHJvcGVydHktcmVhZCBzdHJpbmdbXSAkYXR0YWNobWVudHMgICAgICBBbiBvcHRpb25hbCBsaXN0IG9mIGZpbGUgYXR0YWNobWVudHMKICogQHByb3BlcnR5LXJlYWQgc3RyaW5nICAgJHN1YmpfdHBsICAgICAgICAgVGhlIHNtYXJ0eSB0ZW1wbGF0ZSBmb3IgdGhlIGVtYWlsIHN1YmplY3QuCiAqIEBwcm9wZXJ0eS1yZWFkIHN0cmluZyAgICRib2R5X3RwbCAgICAgICAgIFRoZSBzbWFydHkgdGVtcGxhdGUgZm9yIHRoZSBlbWFpbCBib2R5CiAqIEBwcm9wZXJ0eS1yZWFkIGludCAgICAgICRwcmlvcml0eSAgICAgICAgIEEgcHJpb3JpdHkgdmFsdWUgYmV0d2VlbiAxIGFuZCA1IHdoZXJlIDEgaXMgaGlnaCBwcmlvcml0eSwgYW5kIDUgaXMgbG93LiAgRGVmYXVsdCBpcyAzCiAqIEBwcm9wZXJ0eS1yZWFkIGJvb2wgICAgICRlbmNvZGVfc3ViamVjdCAgIEVuYWJsZSBiYXNlNjQgZW5jb2Rpbmcgb2Ygc3ViamVjdCB0byBhbGxvdyBleHRlbmRlZCBjaGFyYWN0ZXJzIChidXQgbm90IEhUTUwgZW50aXRpZXMpLiAgRGVmYXVsdCBpcyBmYWxzZQogKiBAcGFja2FnZSBDTVNNU0V4dFxFbWFpbAogKi8KY2xhc3MgRW1haWwKewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF90b19mZXVfdXNlcnMgPSBbXTsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX3RvX2FkbWluX2dyb3VwcyA9IFtdOwogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF90b19mZXVfZ3JvdXBzID0gW107CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF90b19jdXJyZW50X2FkbWluID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF90b19jdXJyZW50X2ZldSA9IGZhbHNlOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfdG9fYWRkciA9IFtdOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfZW1haWxfbmFtZXMgPSBbXTsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2NjX2FkZHIgPSBbXTsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2JjY19hZGRyID0gW107CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9zdWJqX3RwbDsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2JvZHlfdHBsOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfZGF0YSA9IFtdOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfYXR0YWNobWVudHMgPSBbXTsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX3ByaW9yaXR5ID0gMzsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2VuY29kZV9zdWJqZWN0ID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBHaXZlbiBhbiBhc3NvY2lhdGl2ZSBhcnJheSwgY3JlYXRlIGFuIGVtYWlsIG9iamVjdC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqIEBwYXJhbSBhcnJheSAkaW4KICAgICAqIEByZXR1cm4gRW1haWwKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tX2FycmF5KCBhcnJheSAkaW4gKSA6IEVtYWlsCiAgICB7CiAgICAgICAgJG9iaiA9IG5ldyBzZWxmOwogICAgICAgIGlmKCBpc3NldCggJGluWyd0b19hZG1pbl9ncm91cHMnXSApICkgewogICAgICAgICAgICBpZiggaXNfc3RyaW5nKCAkaW5bJ3RvX2FkbWluX2dyb3VwcyddICkgKSB7CiAgICAgICAgICAgICAgICAkaW5bJ3RvX2FkbWluX2dyb3VwcyddID0gZXhwbG9kZSgnLCcsICRpblsndG9fYWRtaW5fZ3JvdXBzJ10gKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3JlYWNoKCAkaW5bJ3RvX2FkbWluX2dyb3VwcyddIGFzICRnaWQgKSB7CiAgICAgICAgICAgICAgICAkZ2lkID0gdHJpbSgkZ2lkKTsKICAgICAgICAgICAgICAgIGlmKCAkZ2lkICYmICFpbl9hcnJheSggJGdpZCwgJG9iai0+X3RvX2FkbWluX2dyb3VwcyApICkgJG9iai0+X3RvX2FkbWluX2dyb3Vwc1tdID0gJGdpZDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiggaXNzZXQoICRpblsndG9fZmV1X2dyb3VwcyddICkgKSB7CiAgICAgICAgICAgIGlmKCBpc19zdHJpbmcoICRpblsndG9fZmV1X2dyb3VwcyddICkgKSB7CiAgICAgICAgICAgICAgICAkaW5bJ3RvX2ZldV9ncm91cHMnXSA9IGV4cGxvZGUoJywnLCAkaW5bJ3RvX2ZldV9ncm91cHMnXSApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvcmVhY2goICRpblsndG9fZmV1X2dyb3VwcyddIGFzICRnaWQgKSB7CiAgICAgICAgICAgICAgICAkZ2lkID0gdHJpbSgkZ2lkKTsKICAgICAgICAgICAgICAgIGlmKCAkZ2lkICYmICFpbl9hcnJheSggJGdpZCwgJG9iai0+X3RvX2ZldV9ncm91cHMgKSApICRvYmotPl90b19mZXVfZ3JvdXBzW10gPSAkZ2lkOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRvYmotPl90b19jdXJyZW50X2FkbWluID0gKCBpc3NldCggJGluWyd0b19jdXJyZW50X2FkbWluJ10gKSApID8gY21zX3RvX2Jvb2woICRpblsndG9fY3VycmVudF9hZG1pbiddICkgOiBmYWxzZTsKICAgICAgICAkb2JqLT5fdG9fY3VycmVudF9mZXUgPSAoIGlzc2V0KCAkaW5bJ3RvX2N1cnJlbnRfZmV1J10gKSApID8gY21zX3RvX2Jvb2woICRpblsndG9fY3VycmVudF9mZXUnXSApIDogZmFsc2U7CiAgICAgICAgaWYoIGlzc2V0KCAkaW5bJ3RvX2FkZHInXSApICkgewogICAgICAgICAgICBpZiggaXNfc3RyaW5nKCAkaW5bJ3RvX2FkZHInXSApICkgewogICAgICAgICAgICAgICAgJGluWyd0b19hZGRyJ10gPSBleHBsb2RlKCcsJywgJGluWyd0b19hZGRyJ10gKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3JlYWNoKCAkaW5bJ3RvX2FkZHInXSBhcyAkYWRkciApIHsKICAgICAgICAgICAgICAgIGlmKCBpc19lbWFpbCgkYWRkcikgJiYgIWluX2FycmF5KCAkYWRkciwgJG9iai0+X3RvX2FkZHIgKSApICRvYmotPl90b19hZGRyW10gPSAkYWRkcjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiggaXNzZXQoICRpblsnY2NfYWRkciddICkgKSB7CiAgICAgICAgICAgIGlmKCBpc19zdHJpbmcoICRpblsnY2NfYWRkciddICkgKSB7CiAgICAgICAgICAgICAgICAkaW5bJ2NjX2FkZHInXSA9IGV4cGxvZGUoJywnLCAkaW5bJ2NjX2FkZHInXSApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvcmVhY2goICRpblsnY2NfYWRkciddIGFzICRhZGRyICkgewogICAgICAgICAgICAgICAgaWYoIGlzX2VtYWlsKCRhZGRyKSAmJiAhaW5fYXJyYXkoICRhZGRyLCAkb2JqLT5fY2NfYWRkciApICkgJG9iai0+X2NjX2FkZHJbXSA9ICRhZGRyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCBpc3NldCggJGluWydiY2NfYWRkciddICkgKSB7CiAgICAgICAgICAgIGlmKCBpc19zdHJpbmcoICRpblsnYmNjX2FkZHInXSApICkgewogICAgICAgICAgICAgICAgJGluWydiY2NfYWRkciddID0gZXhwbG9kZSgnLCcsICRpblsnYmNjX2FkZHInXSApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvcmVhY2goICRpblsnYmNjX2FkZHInXSBhcyAkYWRkciApIHsKICAgICAgICAgICAgICAgIGlmKCBpc19lbWFpbCgkYWRkcikgJiYgIWluX2FycmF5KCAkYWRkciwgJG9iai0+X2JjY19hZGRyICkgKSAkb2JqLT5fYmNjX2FkZHJbXSA9ICRhZGRyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCBpc3NldCggJGluWydzdWJqX3RwbCddKSApIHsKICAgICAgICAgICAgJG9iai0+X3N1YmpfdHBsID0gdHJpbSggJGluWydzdWJqX3RwbCddICk7CiAgICAgICAgfQogICAgICAgIGlmKCBpc3NldCggJGluWydib2R5X3RwbCddKSApIHsKICAgICAgICAgICAgJG9iai0+X2JvZHlfdHBsID0gdHJpbSggJGluWydib2R5X3RwbCddICk7CiAgICAgICAgfQogICAgICAgIGlmKCBpc3NldCggJGluWydwcmlvcml0eSddKSApIHsKICAgICAgICAgICAgJHZhbCA9IChpbnQpICRpblsncHJpb3JpdHknXTsKICAgICAgICAgICAgJHZhbCA9IG1heCgxLG1pbig1LCR2YWwpKTsKICAgICAgICAgICAgJG9iai0+X3ByaW9yaXR5ID0gJHZhbDsKICAgICAgICB9CiAgICAgICAgJG9iai0+X2VuY29kZV9zdWJqZWN0ID0gXHh0X3BhcmFtOjpnZXRfYm9vbCggJGluLCAnZW5jb2RlX3N1YmplY3QnICk7CiAgICAgICAgcmV0dXJuICRvYmo7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCggc3RyaW5nICRrZXkgKQogICAgewogICAgICAgIHN3aXRjaCggJGtleSApIHsKICAgICAgICBjYXNlICd0b19hZG1pbl9ncm91cHMnOgogICAgICAgICAgICByZXR1cm4gJHRoaXMtPl90b19hZG1pbl9ncm91cHM7CgogICAgICAgIGNhc2UgJ3RvX2ZldV91c2Vycyc6CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X3RvX2ZldV91c2VyczsKCiAgICAgICAgY2FzZSAndG9fZmV1X2dyb3Vwcyc6CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X3RvX2ZldV9ncm91cHM7CgogICAgICAgIGNhc2UgJ3RvX2N1cnJlbnRfYWRtaW4nOgogICAgICAgICAgICByZXR1cm4gKGJvb2wpICR0aGlzLT5fdG9fY3VycmVudF9hZG1pbjsKCiAgICAgICAgY2FzZSAndG9fY3VycmVudF9mZXUnOgogICAgICAgICAgICByZXR1cm4gKGJvb2wpICR0aGlzLT5fdG9fY3VycmVudF9mZXU7CgogICAgICAgIGNhc2UgJ3RvX2FkZHInOgogICAgICAgICAgICByZXR1cm4gJHRoaXMtPl90b19hZGRyOwoKICAgICAgICBjYXNlICdjY19hZGRyJzoKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5fY2NfYWRkcjsKCiAgICAgICAgY2FzZSAnYmNjX2FkZHInOgogICAgICAgICAgICByZXR1cm4gJHRoaXMtPl9iY2NfYWRkcjsKCiAgICAgICAgY2FzZSAnZGF0YSc6CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X2RhdGE7CgogICAgICAgIGNhc2UgJ2F0dGFjaG1lbnRzJzoKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5fYXR0YWNobWVudHM7CgogICAgICAgIGNhc2UgJ3N1YmpfdHBsJzoKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5fc3Vial90cGw7CgogICAgICAgIGNhc2UgJ2JvZHlfdHBsJzoKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5fYm9keV90cGw7CgogICAgICAgIGNhc2UgJ3ByaW9yaXR5JzoKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5fcHJpb3JpdHk7CgogICAgICAgIGNhc2UgJ2VuY29kZV9zdWJqZWN0JzoKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5fZW5jb2RlX3N1YmplY3Q7CgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCIka2V5IGlzIG5vdCBhIGdldHRhYmxlIG1lbWJlciBvZiAiLl9fQ0xBU1NfXyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXQoIHN0cmluZyAka2V5LCAkdmFsICkKICAgIHsKICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiJGtleSBpcyBub3QgYSBzZXR0YWJsZSBtZW1iZXIgb2YgIi5fX0NMQVNTX18pOwogICAgfQoKICAgIC8qKgogICAgICogVGVzdCBpZiB0aGlzIGVtYWlsIG9iamVjdCBoYXMgc29tZSBhZGRyZXNzZXMgZGVmaW5lZC4KICAgICAqIE5vdGU6ICBkb2VzIG5vdCB0ZXN0IGlmIHRoZSBhZGRyZXNzZXMgYXJlIGR1cGxpY2F0ZSBvciB2YWxpZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc19hZGRyZXNzZXMoKSA6IGJvb2wKICAgIHsKICAgICAgICBpZiggISBlbXB0eSggJHRoaXMtPl90b19hZG1pbl9ncm91cHMpICkgcmV0dXJuIHRydWU7CiAgICAgICAgaWYoICEgZW1wdHkoICR0aGlzLT5fdG9fZmV1X3VzZXJzICkgKSByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiggISBlbXB0eSggJHRoaXMtPl90b19mZXVfZ3JvdXBzICkgKSByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiggJHRoaXMtPl90b19jdXJyZW50X2FkbWluICkgcmV0dXJuIHRydWU7CiAgICAgICAgaWYoICR0aGlzLT5fdG9fY3VycmVudF9mZXUgKSByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiggIWVtcHR5KCAkdGhpcy0+X3RvX2FkZHIgKSApIHJldHVybiB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhbiBlbWFpbCBuYW1lIChpZiBhbnkpIGZvciBhbiBhZGRyZXNzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkZHIgYW4gZW1haWwgYWRkcmVzcwogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2VtYWlsX25hbWUoIHN0cmluZyAkYWRkciApCiAgICB7CiAgICAgICAgaWYoICFpc19lbWFpbCgkYWRkcikgKSB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBpbnB1dCBwYXNzZWQgdG8gIi5fX01FVEhPRF9fKTsKICAgICAgICBpZiggaXNzZXQoJHRoaXMtPl9lbWFpbF9uYW1lc1skYWRkcl0pICkgcmV0dXJuICR0aGlzLT5fZW1haWxfbmFtZXNbJGFkZHJdOwogICAgfQoKICAgIC8qKgogICAgICogQ2xlYXIgYWxsIGtub3duIGFkZHJlc3Nlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIEVtYWlsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhcl9hZGRyZXNzZXMoKSA6IEVtYWlsCiAgICB7CiAgICAgICAgLy8gbGVhdmUgYXR0YWNobWVudHMsIGRhdGEsIGFuZCB0ZW1wbGF0ZXMgaW4gcGxhY2UuLi4gYnV0IGNsZWFyIGFsbCBhZGRyZXNzIGluZm9ybWF0aW9uLgogICAgICAgICRvYmogPSBjbG9uZSAkdGhpczsKICAgICAgICAkb2JqLT5fdG9fYWRtaW5fZ3JvdXBzID0gW107CiAgICAgICAgJG9iai0+X3RvX2ZldV91c2VycyA9IFtdOwogICAgICAgICRvYmotPl90b19mZXVfZ3JvdXBzID0gW107CiAgICAgICAgJG9iai0+X3RvX2N1cnJlbnRfYWRtaW4gPSBmYWxzZTsKICAgICAgICAkb2JqLT5fdG9fY3VycmVudF9mZXUgPSBmYWxzZTsKICAgICAgICAkb2JqLT5fdG9fYWRkciA9IFtdOwogICAgICAgICRvYmotPl9jY19hZGRyID0gW107CiAgICAgICAgJG9iai0+X2JjY19hZGRyID0gW107CiAgICAgICAgcmV0dXJuICRvYmo7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGp1c3QgdGhlIHN1YmplY3QgdGVtcGxhdGUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0cGwgVGhlIHNtYXJ0eSB0ZW1wbGF0ZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBlbWFpbCBzdWJqZWN0LgogICAgICogQHJldHVybiBFbWFpbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aF9zdWJqZWN0X3RlbXBsYXRlKCBzdHJpbmcgJHRwbCApIDogRW1haWwKICAgIHsKICAgICAgICAkb2JqID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJHRoaXMtPl9zdWJqX3RwbCA9IHRyaW0oJHRwbCk7CiAgICAgICAgcmV0dXJuICRvYmo7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGp1c3QgdGhlIGJvZHkgdGVtcGxhdGUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0cGwgVGhlIHNtYXJ0eSB0ZW1wbGF0ZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBlbWFpbCBib2R5LiAgQ2Fubm90IGJlIGVtcHR5LgogICAgICogQHJldHVybiBFbWFpbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aF9ib2R5X3RlbXBsYXRlKCBzdHJpbmcgJHRwbCApIDogRW1haWwKICAgIHsKICAgICAgICAkdHBsID0gdHJpbSgkdHBsKTsKICAgICAgICBpZiggISR0cGwgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdDYW5ub3QgdXNlIGFuIGVtcHR5IHN0cmluZyBhcyBhIGJvZHkgdGVtcGxhdGUnKTsKCiAgICAgICAgJG9iaiA9IGNsb25lICR0aGlzOwogICAgICAgICR0aGlzLT5fYm9keV90cGwgPSAkdHBsOwogICAgICAgIHJldHVybiAkb2JqOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIGEga2V5IGFuZCB2YWx1ZSB0byB0aGUgZGF0YQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIG1peGVkICR2YWwKICAgICAqIEByZXR1cm4gRW1haWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZF9kYXRhKCBzdHJpbmcgJGtleSwgJHZhbCApIDogRW1haWwKICAgIHsKICAgICAgICAka2V5ID0gdHJpbSggJGtleSApOwogICAgICAgIGlmKCAhJGtleSApIHJldHVybiAkdGhpczsKCiAgICAgICAgJG9iaiA9IGNsb25lICR0aGlzOwogICAgICAgICRvYmotPl9kYXRhWyRrZXldID0gJHZhbDsKICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBhbiBhdHRhY2htZW50CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgQSBjb21wbGV0ZSBwYXRoIG5hbWUKICAgICAqIEByZXR1cm4gRW1haWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZF9hdHRhY2htZW50KCBzdHJpbmcgJGZpbGVuYW1lICkgOiBFbWFpbAogICAgewogICAgICAgICRmaWxlbmFtZSA9IHRyaW0oICRmaWxlbmFtZSApOwogICAgICAgIGlmKCAhJGZpbGVuYW1lIHx8ICFpc19maWxlKCRmaWxlbmFtZSkgKSByZXR1cm4gJHRoaXM7CiAgICAgICAgaWYoIGluX2FycmF5KCAkZmlsZW5hbWUsICR0aGlzLT5fYXR0YWNobWVudHMgKSApIHJldHVybiAkdGhpczsKCiAgICAgICAgJG9iaiA9IGNsb25lICR0aGlzOwogICAgICAgICRvYmotPl9hdHRhY2htZW50c1tdID0gJGZpbGVuYW1lOwogICAgICAgIHJldHVybiAkb2JqOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIGFuIGFkbWluIGdyb3VwIHRvIHRoZSBsaXN0IG9mIGdyb3VwcyB0byBzZW5kIHRvLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8aW50IGdpZCBBbiBhZG1pbiBncm91cCBpZCBvciBuYW1lCiAgICAgKiBAcmV0dXJuIEVtYWlsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRfYWRtaW5fZ3JvdXAoICRnaWQgKSA6IEVtYWlsCiAgICB7CiAgICAgICAgJGdpZCA9IHRyaW0oICRnaWQgKTsKICAgICAgICBpZiggc3RybGVuKCRnaWQpIDwgMSApIHJldHVybiAkdGhpczsKICAgICAgICBpZiggaW5fYXJyYXkoICRnaWQsICR0aGlzLT5fdG9fYWRtaW5fZ3JvdXBzICkgKSByZXR1cm4gJHRoaXM7CgogICAgICAgICRvYmogPSBjbG9uZSAkdGhpczsKICAgICAgICAkb2JqLT5fdG9fYWRtaW5fZ3JvdXBzW10gPSAkZ2lkOwogICAgICAgIHJldHVybiAkb2JqOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIGFuIEZFVSB1aWQgdG8gdGhlIGxpc3Qgb2YgaW5kaXZpZHVhbCBGRVUgdXNlcnMgdG8gc2VuZCB0by4KICAgICAqCiAgICAgKiBOb3RlLCBtdXN0IGJlIGEgdmFsaWQgdWlkLiBUaGUgc3lzdGVtIHdpbGwgbm90IGNoZWNrIGlmIHRoaXMgaXMgYSBkaXNhYmxlZCBvciBleHBpcmVkIHVzZXIuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkdWlkIEEgdmFsaWQgRkVVIHVzZXIgaWQKICAgICAqIEByZXR1cm4gRW1haWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZF9mZXVfdWlkKCBpbnQgJHVpZCApIDogRW1haWwKICAgIHsKICAgICAgICAkdWlkID0gKGludCkgJHVpZDsKICAgICAgICBpZiggJHVpZCA8IDEgKSByZXR1cm4gJHRoaXM7CiAgICAgICAgaWYoIGluX2FycmF5KCAkdWlkLCAkdGhpcy0+X3RvX2ZldV91c2VycyApICkgcmV0dXJuICR0aGlzOwoKICAgICAgICAkb2JqID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG9iai0+X3RvX2ZldV91c2Vyc1tdID0gJHVpZDsKICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBhbiBGRVUgZ3JvdXAgdG8gdGhlIGxpc3Qgb2YgZ3JvdXBzIHRvIHNlbmQgdG8uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xpbnQgJGdpZCBBbiBGRVUgZ3JvdXAgaWQgb3IgbmFtZS4KICAgICAqIEByZXR1cm4gRW1haWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZF9mZXVfZ3JvdXAoICRnaWQgKSA6IEVtYWlsCiAgICB7CiAgICAgICAgJGdpZCA9IHRyaW0oICRnaWQgKTsKICAgICAgICBpZiggc3RybGVuKCRnaWQpIDwgMSApIHJldHVybiAkdGhpczsKICAgICAgICBpZiggaW5fYXJyYXkoICRnaWQsICR0aGlzLT5fdG9fZmV1X2dyb3VwcyApICkgcmV0dXJuICR0aGlzOwoKICAgICAgICAkb2JqID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG9iai0+X3RvX2ZldV9ncm91cHNbXSA9ICRnaWQ7CiAgICAgICAgcmV0dXJuICRvYmo7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGp1c3QgdGhlIHByaW9yaXR5IG9mIHRoZSBtZXNzYWdlCiAgICAgKgogICAgICogQHBhcmFtIGludCAkdmFsIEEgbnVtYmVyIGJldHdlZW4gMSBhbmQgNQogICAgICogQHJldHVybiBFbWFpbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aF9wcmlvcml0eSggaW50ICR2YWwgKSA6IEVtYWlsCiAgICB7CiAgICAgICAgJHZhbCA9IChpbnQpICR2YWw7CiAgICAgICAgJHZhbCA9IG1heCgxLG1pbig1LCR2YWwpKTsKICAgICAgICAkb2JqID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG9iai0+X3ByaW9yaXR5ID0gJHZhbDsKICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KCiAgICAvKioKICAgICAqIEFkanVzdCB0aGUgZW5jb2RlIHN1YmplY3QgZmxhZy4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkZmxhZwogICAgICogQHJldHVybiBFbWFpbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aF9lbmNvZGVfc3ViamVjdCggYm9vbCAkZmxhZyApIDogRW1haWwKICAgIHsKICAgICAgICAkZmxhZyA9IChib29sKSAkZmxhZzsKICAgICAgICBpZiggJHRoaXMtPl9lbmNvZGVfc3ViamVjdCA9PSAkZmxhZyApIHJldHVybiAkdGhpczsKCiAgICAgICAgJG9iaiA9IGNsb25lICR0aGlzOwogICAgICAgICRvYmotPl9lbmNvZGVfc3ViamVjdCA9ICRmbGFnOwogICAgICAgIHJldHVybiAkb2JqOwogICAgfQoKICAgIC8qKgogICAgICogQWRqdXN0IHRoZSBjdXJyZW50X2FkbWluIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhpcyBlbWFpbCBzaG91bGQgYmUgc2VudCB0byB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiBhZG1pbgogICAgICoKICAgICAqIEBwYXJhbSBib29sICRmbGFnCiAgICAgKiBAcmV0dXJuIEVtYWlsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoX2N1cnJlbnRfYWRtaW4oIGJvb2wgJGZsYWcgKSA6IEVtYWlsCiAgICB7CiAgICAgICAgJGZsYWcgPSAoYm9vbCkgJGZsYWc7CiAgICAgICAgaWYoICR0aGlzLT5fdG9fY3VycmVudF9hZG1pbiA9PSAkZmxhZyApIHJldHVybiAkdGhpczsKCiAgICAgICAgJG9iaiA9IGNsb25lICR0aGlzOwogICAgICAgICRvYmotPl90b19jdXJyZW50X2FkbWluID0gJGZsYWc7CiAgICAgICAgcmV0dXJuICRvYmo7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGp1c3QgdGhlIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGlzIGVtYWlsIHNob3VsZCBiZSBzZW50IHRvIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIEZFVSB1c2VyCiAgICAgKiBmb3IgRkVVIHJlcXVlc3RzCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJGZsYWcKICAgICAqIEByZXR1cm4gRW1haWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhfY3VycmVudF9mZXUoIGJvb2wgJGZsYWcgKSA6IEVtYWlsCiAgICB7CiAgICAgICAgJGZsYWcgPSAoYm9vbCkgJGZsYWc7CiAgICAgICAgaWYoICR0aGlzLT5fdG9fY3VycmVudF9mZXUgPT0gJGZsYWcgKSByZXR1cm4gJHRoaXM7CgogICAgICAgICRvYmogPSBjbG9uZSAkdGhpczsKICAgICAgICAkb2JqLT5fdG9fY3VycmVudF9mZXUgPSAkZmxhZzsKICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBhbiBhZGRpdGlvbmFsIGVtYWlsIGFkZHJlc3MgdG8gc2VuZCB0aGlzIG1lc3NhZ2UgdG8uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYWRkcgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBBbiBvcHRpb25hbCB0ZXh0IG5hbWUKICAgICAqIEByZXR1cm4gRW1haWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZF9hZGRyZXNzKHN0cmluZyAkYWRkciwgc3RyaW5nICRuYW1lID0gbnVsbCkgOiBFbWFpbAogICAgewogICAgICAgIGlmKCAhaXNfZW1haWwoICRhZGRyICkgKSByZXR1cm4gJHRoaXM7CiAgICAgICAgaWYoIGluX2FycmF5KCAkYWRkciwgJHRoaXMtPl90b19hZGRyICkgKSByZXR1cm4gJHRoaXM7CgogICAgICAgICRvYmogPSBjbG9uZSAkdGhpczsKICAgICAgICAkb2JqLT5fdG9fYWRkcltdID0gJGFkZHI7CiAgICAgICAgJG5hbWUgPSB0cmltKCRuYW1lKTsKICAgICAgICBpZiggJG5hbWUgKSAkb2JqLT5fZW1haWxfbmFtZXNbJGFkZHJdID0gJG5hbWU7CiAgICAgICAgcmV0dXJuICRvYmo7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgYW4gZW1haWwgYWRkcmVzcyB0byB0aGUgQ0MgbGlzdAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkZHIKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgQW4gb3B0aW9uYWwgdGV4dCBuYW1lCiAgICAgKiBAcmV0dXJuIEVtYWlsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRfY2Moc3RyaW5nICRhZGRyLCBzdHJpbmcgJG5hbWUgPSBudWxsKSA6IEVtYWlsCiAgICB7CiAgICAgICAgaWYoICFpc19lbWFpbCggJGFkZHIgKSApIHJldHVybiAkdGhpczsKICAgICAgICBpZiggaW5fYXJyYXkoICRhZGRyLCAkdGhpcy0+X2NjX2FkZHIgKSApIHJldHVybiAkdGhpczsKCiAgICAgICAgJG9iaiA9IGNsb25lICR0aGlzOwogICAgICAgICRvYmotPl9jY19hZGRyW10gPSAkYWRkcjsKICAgICAgICAkbmFtZSA9IHRyaW0oJG5hbWUpOwogICAgICAgIGlmKCAkbmFtZSApICRvYmotPl9lbWFpbF9uYW1lc1skYWRkcl0gPSAkbmFtZTsKICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBhbiBlbWFpbCBhZGRyZXNzIHRvIHRoZSBCQ0MgbGlzdAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkZHIKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgQW4gb3B0aW9uYWwgdGV4dCBuYW1lCiAgICAgKiBAcmV0dXJuIEVtYWlsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRfYmNjKHN0cmluZyAkYWRkciwgc3RyaW5nICRuYW1lID0gbnVsbCkgOiBFbWFpbAogICAgewogICAgICAgIGlmKCAhaXNfZW1haWwoICRhZGRyICkgKSByZXR1cm4gJHRoaXM7CiAgICAgICAgaWYoIGluX2FycmF5KCAkYWRkciwgJHRoaXMtPl9iY2NfYWRkciApICkgcmV0dXJuICR0aGlzOwoKICAgICAgICAkb2JqID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG9iai0+X2JjY19hZGRyW10gPSAkYWRkcjsKICAgICAgICAkbmFtZSA9IHRyaW0oJG5hbWUpOwogICAgICAgIGlmKCAkbmFtZSApICRvYmotPl9lbWFpbF9uYW1lc1skYWRkcl0gPSAkbmFtZTsKICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KCn0gLy8gY2xhc3MK]]></data>
	</file>
	<file>
	  <filename>/lib/Email/class.EmailDestination.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgY2xhc3MgZm9yIGRlZmluaW5nIGFuIGVtYWlsIGFkZHJlc3MgYW5kIG90aGVyIGFzc29jaWF0ZWQgRkVVIG9yIGFkbWluIGluZm9ybWF0aW9uLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dFxFbWFpbAogKiBAY2F0ZWdvcnkgVXRpbGl0aWVzCiAqIEBhdXRob3IgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTggYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XEVtYWlsOwoKLyoqCiAqIEEgY2xhc3MgZm9yIGRlZmluaW5nIGFuIGVtYWlsIGFkZHJlc3MgYW5kIG90aGVyIGFzc29jaWF0ZWQgRkVVIG9yIGFkbWluIGluZm9ybWF0aW9uLgogKiBUaGlzIGNsYXNzIGlzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgU2ltcGxlRW1haWxQcm9jZXNzb3Igb2JqZWN0IGFuZCB2YXJpb3VzIGNhbGxiYWNrcy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICovCmNsYXNzIEVtYWlsRGVzdGluYXRpb24KewogICAgLyoqCiAgICAgKiBBbiBlbWFpbCBhZGRyZXNzLgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nICRhZGRyCiAgICAgKi8KICAgIHB1YmxpYyAkYWRkcjsKCiAgICAvKioKICAgICAqIEEgZnJpZW5kbHkgbmFtZQogICAgICoKICAgICAqIEB2YXIgc3RyaW5nICRuYW1lCiAgICAgKi8KICAgIHB1YmxpYyAkbmFtZTsKCiAgICAvKioKICAgICAqIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gcmV0cmlldmUgcGVyc29uYWwgaW5mb3JtYXRpb24gZm9yIGFuIEZFVQogICAgICogdG8gYXNzb2NpYXRlIHdpdGggdGhlIGVtYWlsLgogICAgICoKICAgICAqIEB2YXIgaW50ICRmZXVfdWlkCiAgICAgKi8KICAgIHB1YmxpYyAkZmV1X3VpZDsKCiAgICAvKioKICAgICAqIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gcmV0cmlldmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgYW4gRkVVIGdyb3VwCiAgICAgKiB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZW1haWwuCiAgICAgKgogICAgICogQHZhciBpbnQgJGZldV9naWQKICAgICAqLwogICAgcHVibGljICRmZXVfZ2lkOwoKICAgIC8qKgogICAgICogVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSBwZXJzb25hbCBpbmZvcm1hdGlvbiBmb3IgYW4gYWRtaW4gdXNlcgogICAgICogdG8gYXNzb2NpYXRlIHdpdGggdGhlIGVtYWlsLgogICAgICoKICAgICAqIEB2YXIgaW50ICRhZG1pbl91aWQKICAgICAqLwogICAgcHVibGljICRhZG1pbl91aWQ7CgogICAgLyoqCiAgICAgKiBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHRvIHJldHJpZXZlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIGFuIGFkbWluIGdyb3VwCiAgICAgKiB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZW1haWwuCiAgICAgKgogICAgICogQHZhciBpbnQgJGFkbWluX2dpZAogICAgICovCiAgICBwdWJsaWMgJGFkbWluX2dpZDsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fZ2V0KCAka2V5ICkKICAgIHsKICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiJGtleSBpcyBub3QgYSBnZXR0YWJsZSBtZW1iZXIgb2YgIi5fX0NMQVNTX18pOwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXQoICRrZXksICR2YWwgKQogICAgewogICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCIka2V5IGlzIG5vdCBhIHNldHRhYmxlIG1lbWJlciBvZiAiLl9fQ0xBU1NfXyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFkZHI7CiAgICB9Cn0gLy8gY2xhc3M=]]></data>
	</file>
	<file>
	  <filename>/lib/Email/class.FileEmailStorage.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIERlZmluZXMgYW4gb2JqZWN0IGZvciBsb2FkaW5nIGFuZCBzYXZpbmcgZW1haWwgb2JqZWN0cyBmcm9tIGZpbGUuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0XEVtYWlsCiAqIEBjYXRlZ29yeSBVdGlsaXRpZXMKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxOCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCgpuYW1lc3BhY2UgQ01TTVNFeHRcRW1haWw7CgovKioKICogVGhpcyBjbGFzcyBjYW4gbG9hZCBhbmQgc2F2ZSBlbWFpbCBvYmplY3RzIHRvIHRoZSBmaWxlc3lzdGVtIGluIGEgc3BlY2lhbGl6ZWQgZm9ybWF0LgogKiBJdCB3aWxsIGFsc28gc2VhcmNoIGluIHRoZSBtb2R1bGUgZGlyZWN0b3J5LCBhbmQgaW4gdGhlIC9hc3NzZXRzL2VtYWlscyBkaXJlY3RvcnkgZm9yIGVtYWlscy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHRcRW1haWwKICogQGNhdGVnb3J5IFV0aWxpdGllcwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDE4IGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KY2xhc3MgRmlsZUVtYWlsU3RvcmFnZSBpbXBsZW1lbnRzIGlFbWFpbFN0b3JhZ2UKewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9tb2Q7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RvcgogICAgICoKICAgICAqIEBwYXJhbSBcQ01TTVNFeHRcWFRNb2R1bGUgJG1vZCBBIHJlZmVyZW5jZSB0byBhIG1vZHVsZSBkZXJpdmVkIGZyb20gWFRNb2R1bGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChcQ01TTVNFeHRcWFRNb2R1bGUgJG1vZCkKICAgIHsKICAgICAgICAkdGhpcy0+X21vZCA9ICRtb2Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBMb2FkIGFuIGVtYWlsIG9iamVjdCBmcm9tIGEgZmlsZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGxvb2sgZm9yIGEgZmlsZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSwgZW5kaW5nIHdpdGggJy5lbWwnIGluIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXM6CiAgICAgKiAgIGFzc2V0cy9tb2R1bGVfY3VzdG9tLzxNb2R1bGVOYW1lPi9lbWFpbHMsICBhc3NldHMvZW1haWxzLCAgYW5kIG1vZHVsZXMvPE1vZHVsZU5hbWU+L2VtYWlscwogICAgICoKICAgICAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZpbGUgaWYgZXhpc3RzLCBpcyBhIGZvcm1hdHRlZCB0ZXh0IGZpbGUgd2l0aCB0aHJlZSBzZWN0aW9uczoKICAgICAqCiAgICAgKiB0b3Agc2VjdGlvbiAoaW5pIGZvcm1hdCkKICAgICAqID09PT0gPT09PQogICAgICogc21hcnR5IHRlbXBsYXRlIGZvciBlbWFpbCBzdWJqZWN0CiAgICAgKiA9PT09ID09PT0KICAgICAqIHNtYXJ0eSB0ZW1wbGF0ZSBmb3IgZW1haWwgYm9keQogICAgICoKICAgICAqIEBleGFtcGxlIHNlbmRpbmdfYW5fZW1haWwucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIHRoZSBvYmplY3QgbmFtZQogICAgICogQHJldHVybiBFbWFpbHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkKCBzdHJpbmcgJG5hbWUgKQogICAgewogICAgICAgICRvcmlnX25hbWUgPSAkbmFtZSA9IHRyaW0oICRuYW1lICk7CiAgICAgICAgaWYoICEkbmFtZSApIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCAnSW52YWxpZCBuYW1lIHBhc3NlZCB0byAnLl9fTUVUSE9EX18pOwogICAgICAgIGlmKCAhZW5kc3dpdGgoICRuYW1lLCAnLmVtbCcgKSApICRuYW1lIC49ICcuZW1sJzsKCiAgICAgICAgLy8kY29uZmlnID0gXGNtc191dGlsczo6Z2V0X2NvbmZpZygpOwogICAgICAgICRjb25maWcgPSBcQ01TTVNFeHRcY29uZmlnOjpHZXRJbnN0YW5jZSgpOwogICAgICAgIAogICAgICAgICRkaXJzID0gWwogICAgICAgICAgICAkY29uZmlnWydhc3NldHNfcGF0aCddLicvbW9kdWxlX2N1c3RvbS8nLiR0aGlzLT5fbW9kLT5HZXROYW1lKCkuJy9lbWFpbHMnLAogICAgICAgICAgICAkY29uZmlnWydhc3NldHNfcGF0aCddLicvZW1haWxzJywKICAgICAgICAgICAgJHRoaXMtPl9tb2QtPkdldE1vZHVsZVBhdGgoKS4nL2VtYWlscycKICAgICAgICAgICAgXTsKICAgICAgICAkZmlsZW5hbWUgPSBudWxsOwogICAgICAgIGZvcmVhY2goICRkaXJzIGFzICRkaXIgKSB7CiAgICAgICAgICAgICRmbiA9ICRkaXIuIi8kbmFtZSI7CiAgICAgICAgICAgIGlmKCBpc19maWxlKCAkZm4gKSApIHsKICAgICAgICAgICAgICAgICRmaWxlbmFtZSA9ICRmbjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCAhJGZpbGVuYW1lICkgcmV0dXJuOwoKICAgICAgICAvLyBmaWxlIGlzIGRpdmlkZWQgaW50byAzIHNlY3Rpb25zIHNlcGFyYXRlZCBieSBhIGxpbmUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgd2l0aCBhdCBsZXNhc3QgNCA9IGNoYXJhY3RlcnMuCiAgICAgICAgJHBhcnQgPSAwOwogICAgICAgICRpbmkgPSAkc3ViaiA9ICRib2R5ID0gbnVsbDsKICAgICAgICAkZmggPSBmb3BlbiggJGZpbGVuYW1lLCAncicgKTsKICAgICAgICB3aGlsZSggIWZlb2YoICRmaCApICkgewogICAgICAgICAgICAkbGluZSA9IGZnZXRzKCAkZmggKTsKICAgICAgICAgICAgJGxpbmUgPSB0cmltKCRsaW5lKTsKICAgICAgICAgICAgaWYoIHN0YXJ0c3dpdGgoICRsaW5lLCAnPT09PScpICYmIGVuZHN3aXRoKCAkbGluZSwgJz09PT0nKSApIHsKICAgICAgICAgICAgICAgIC8vIG5ldyBwYXJ0LgogICAgICAgICAgICAgICAgJHBhcnQrKzsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHN3aXRjaCggJHBhcnQgKSB7CiAgICAgICAgICAgIGNhc2UgMDogLy8gaW5pCiAgICAgICAgICAgICAgICAkaW5pIC49ICRsaW5lLiJcbiI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAxOiAvLyBzdWJqZWN0IHRlbXBsYXRlCiAgICAgICAgICAgICAgICAkc3ViaiAuPSAkbGluZS4iXG4iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMjogLy8gYm9keSB0ZW1wbGF0ZQogICAgICAgICAgICAgICAgJGJvZHkgLj0gJGxpbmUuIlxuIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiggISRpbmkgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0ludmFsaWQgZW1sIGZpbGUgZGF0YTogTm8gSU5JIFNlY3Rpb24nKTsKICAgICAgICAkYm9keSA9IHRyaW0oJGJvZHkpOwogICAgICAgICRzdWJqID0gdHJpbSgkc3Viaik7CiAgICAgICAgaWYoICRzdWJqICYmICEkYm9keSApICRib2R5ID0gJHN1Ymo7IC8vIG5vIHN1YmplY3Qgc3VwcGxpZWQKICAgICAgICBpZiggISRib2R5ICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdJbnZhbGlkIGVtbCBmaWxlIGRhdGE6IE5vIHZhbGlkIGJvZHkgc2VjdGlvbicpOwoKICAgICAgICAkZGF0YSA9IHBhcnNlX2luaV9zdHJpbmcoICRpbmkgKTsKICAgICAgICBpZiggISRkYXRhIHx8ICFpc19hcnJheSgkZGF0YSkgfHwgIWNvdW50KCRkYXRhKSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignSW52YWxpZCBlbWwgZmlsZSBkYXRhOiBpbnZhbGlkIElNSSBzZWNpb24nKTsKICAgICAgICAkZGF0YVsnbmFtZSddID0gJG9yaWdfbmFtZTsKCiAgICAgICAgaWYoICRzdWJqICkgJGRhdGFbJ3N1YmpfdHBsJ10gPSAkc3ViajsKICAgICAgICAkZGF0YVsnYm9keV90cGwnXSA9ICRib2R5OwogICAgICAgICRlbWFpbCA9IEVtYWlsOjpmcm9tX2FycmF5KCAkZGF0YSApOwogICAgICAgIHJldHVybiAkZW1haWw7CiAgICB9CgogICAgLyoqCiAgICAgKiBTYXZlIGFuIGVtYWlsIG9iamVjdCB0byBhIGZpbGUuCiAgICAgKgogICAgICogV2lsbCBPTkxZIHNhdmUgZW1haWwgZmlsZXMgdG8gdGhlIC9hc3NldHMvZW1haWxzIGRpcmVjdG9yeS4KICAgICAqCiAgICAgKiBAcGFyYW0gRW1haWwgJGVtbCBUaGUgb2JqZWN0IHRvIHNhdmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzYXZlKCBFbWFpbCAkZW1sICkKICAgIHsKICAgICAgICBkaWUoJ2luY29tcGxldGUgYXQgJy5fX0ZJTEVfXy4nOjonLl9fTElORV9fKTsKICAgIH0KfSAvLyBjbGFzcw==]]></data>
	</file>
	<file>
	  <filename>/lib/Email/class.MailTransportError.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBBIGNsYXNzIHRvIGFjdCBhcyBhIHByb2Nlc3NvciBmb3IgRW1haWwgb2JqZWN0cy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHRcRW1haWwKICogQGNhdGVnb3J5IFV0aWxpdGllcwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDE4IGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCm5hbWVzcGFjZSBDTVNNU0V4dFxFbWFpbDsKCmNsYXNzIE1haWxUcmFuc3BvcnRFcnJvciBleHRlbmRzIFxSdW50aW1lRXhjZXB0aW9uIHt9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/Email/class.SimpleEmailProcessor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHRXh0ZW5zaW9ucyAoYykgMjAwOC0yMDE4IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgY2xhc3MgdG8gYWN0IGFzIGEgcHJvY2Vzc29yIGZvciBFbWFpbCBvYmplY3RzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dFxFbWFpbAogKiBAY2F0ZWdvcnkgVXRpbGl0aWVzCiAqIEBhdXRob3IgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTggYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XEVtYWlsOwp1c2UgY21zX21haWxlcjsKCi8qKgogKiBBIGNsYXNzIHRvIGFjdCBhcyBhIHByb2Nlc3NvciBmb3IgRW1haWwgb2JqZWN0cy4KICoKICogV2hlbiB0aGlzIG9iamVjdCBzZW5kcyBtZXNzYWdlcyBpdCB0cmllcyB0byB1c2Ugc29tZSBpbnRlbGxpZ2VuY2Ugc28gdGhhdCB0aGUgc2FtZSBlbWFpbAogKiBpcyBub3Qgc2VudCB0byB0aGUgc2FtZSB1c2VyIHR3aWNlLgogKgogKiBUaGlzIGNsYXNzIGhhcyBubyBtZWNoYW5pc20gZm9yIHNlbmRpbmcgbWVzc2FnZXMgaW4gYmF0Y2hlcy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQHNpbmNlIDEuNTkKICovCmNsYXNzIFNpbXBsZUVtYWlsUHJvY2Vzc29yIGltcGxlbWVudHMgRW1haWxQcm9jZXNzb3IKewoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfZW1sOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfbWFpbGVyOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfYmVmb3JlX3NlbmQ7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9hZnRlcl9zZW5kOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfb25fZXJyb3I7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF90cGw7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RvcgogICAgICoKICAgICAqIEBwYXJhbSBFbWFpbCAkZW1sIFRoZSBlbWFpbCBvYmplY3QgdGhhdCB3aWxsIGJlIHVzZWQgdG8gc2VuZCBtZXNzYWFnZS4KICAgICAqIEBwYXJhbSBjbXNfbWFpbGVyICRtYWlsZXIgVGhlIG1haWxlciBvYmplY3QgdG8gdXNlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoIEVtYWlsICRlbWwsIGNtc19tYWlsZXIgJG1haWxlciApCiAgICB7CiAgICAgICAgaWYoICEkZW1sLT5oYXNfYWRkcmVzc2VzKCkgKSB0aHJvdyBuZXcgQWRkcmVzc0V4Y2VwdGlvbignQ2Fubm90IHNlbmQgZW1haWwuLi4gbm8gYWRkcmVzc2VzJyk7CgogICAgICAgICR0aGlzLT5fZW1sID0gJGVtbDsKICAgICAgICAkdGhpcy0+X21haWxlciA9ICRtYWlsZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgYSBjYWxsYmFjayB0byBiZSBleGVjdXRlZCBiZWZvcmUgZWFjaCBtZXNzYWdlIGlzIGNvbXBpbGVkIGFuZCBzZW50LgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkYwogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiZWZvcmVfc2VuZCggY2FsbGFibGUgJGMgKQogICAgewogICAgICAgICR0aGlzLT5fYmVmb3JlX3NlbmQgPSAkYzsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCBhIGNhbGxiYWNrIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIGVhY2ggbWVzc2FnZSBpcyBjb21waWxlZCBhbmQgc3VjY2Vzc2Z1bHkgc2VudC4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGMKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWZ0ZXJfc2VuZCggY2FsbGFibGUgJGMgKQogICAgewogICAgICAgICR0aGlzLT5fYWZ0ZXJfc2VuZCA9ICRjOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IGEgY2FsbGJhY2sgdG8gYmUgZXhlY3V0ZWQgd2hlbiBzZW5kaW5nIGEgbWVzc2FnZSBmYWlscy4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGMKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb25fZXJyb3IoIGNhbGxhYmxlICRjICkKICAgIHsKICAgICAgICAkdGhpcy0+X29uX2Vycm9yID0gJGM7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXNvbHZlIGFkbWluIGdyb3VwcyBpbnRvIGFuIGFycmF5IG9mIGVtYWlsIGFkZHJlc3NlcwogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICogQHJldHVybiBFbWFpbERlc3RpbmF0aW9uW10KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHJlc29sdmVfYWRtaW5fZ3JvdXBzKCkKICAgIHsKICAgICAgICAkb3V0ID0gW107CiAgICAgICAgJGxpc3QgPSAkdGhpcy0+X2VtbC0+dG9fYWRtaW5fZ3JvdXBzOwogICAgICAgIGlmKCBjb3VudCggJGxpc3QgKSApIHsKICAgICAgICAgICAgZm9yZWFjaCggJGxpc3QgYXMgJG9uZSApIHsKICAgICAgICAgICAgICAgICRvbmUgPSB0cmltKCRvbmUpOwogICAgICAgICAgICAgICAgJGdpZCA9IDA7CiAgICAgICAgICAgICAgICBpZiggISAoaXNfbnVtZXJpYygkb25lKSAmJiAoaW50KSAkb25lID4gMCkgKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IGRpZCBmcm9tIG5hbWUKICAgICAgICAgICAgICAgICAgICAkZ2lkID0gXHh0X3VzZXJvcHM6OmdldF9ncm91cGlkKCAkb25lICk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRnaWQgPSAoaW50KSAkb25lOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYoICRnaWQgPiAwICkgewogICAgICAgICAgICAgICAgICAgICR0bXAgPSBbXTsKICAgICAgICAgICAgICAgICAgICAkb3BzID0gXFVzZXJPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKTsKICAgICAgICAgICAgICAgICAgICAkdWxpc3QgPSAkb3BzLT5Mb2FkVXNlcnNJbkdyb3VwKCAkZ2lkICk7CiAgICAgICAgICAgICAgICAgICAgaWYoICR1bGlzdCAmJiBjb3VudCgkdWxpc3QpICkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCAkdWxpc3QgYXMgJHVzZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggISR1c2VyLT5hY3RpdmUgKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAhJHVzZXItPmVtYWlsICkgY29udGludWU7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9iaiA9IG5ldyBFbWFpbERlc3RpbmF0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9iai0+YWRkciA9ICR1c2VyLT5lbWFpbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvYmotPm5hbWUgPSAkdXNlci0+Zmlyc3RuYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9iai0+YWRtaW5fZ2lkID0gJGdpZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvYmotPmFkbWluX3VpZCA9ICR1c2VyLT5pZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0bXBbXSA9ICRvYmo7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJG91dCA9IGFycmF5X21lcmdlKCAkb3V0LCAkdG1wICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCBjb3VudCgkb3V0KSApIHJldHVybiAkb3V0OwogICAgfQoKICAgIC8qKgogICAgICogUmVzb2x2ZSBhbiBhcnJheSBvZiBGRVUgdWlkcyBpbnRvIGFuIGFycmF5IG9mIGVtYWlsIGFkZHJlc3Nlcy4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqIEByZXR1cm4gRW1haWxEZXN0aW5hdGlvbltdCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiByZXNvbHZlX2ZldV91aWRzKCkKICAgIHsKICAgICAgICAkZmV1ID0gY21zbXMoKS0+R2V0TW9kdWxlSW5zdGFuY2UoJ0Zyb250RW5kVXNlcnMnKTsKICAgICAgICBpZiggISRmZXUgKSByZXR1cm47CgogICAgICAgICRvdXQgPSBbXTsKICAgICAgICBpZiggY291bnQoICR0aGlzLT5fZW1sLT50b19mZXVfdXNlcnMgKSApIHsKICAgICAgICAgICAgJHFyeSA9IG5ldyBcZmV1X3VzZXJfcXVlcnk7CiAgICAgICAgICAgICRxcnktPmFkZF9hbmRfb3B0KCBcZmV1X3VzZXJfcXVlcnlfb3B0OjpNQVRDSF9VU0VSTElTVCwgJHRoaXMtPl9lbWwtPnRvX2ZldV91c2VycyApOwogICAgICAgICAgICAvLyB0b2RvOiBub3RleHBpcmVkLCBub3RkaXNhYmxlZD8/CiAgICAgICAgICAgICRxcnktPnNldF9wYWdlbGltaXQoIDUwMCApOyAvLyBhcmJpdHJhcnkgbGltaXQ/CiAgICAgICAgICAgICRycyA9ICRxcnktPmV4ZWN1dGUoKTsKICAgICAgICAgICAgd2hpbGUoICEkcnMtPkVPRigpICkgewogICAgICAgICAgICAgICAgJGZsZHMgPSAkcnMtPmZpZWxkczsKCiAgICAgICAgICAgICAgICAkb2JqID0gbmV3IEVtYWlsRGVzdGluYXRpb247CiAgICAgICAgICAgICAgICAkb2JqLT5hZGRyID0gJGZsZHNbJ2VtYWlsJ107CiAgICAgICAgICAgICAgICAkb2JqLT5mZXVfdWlkID0gJGZsZHNbJ2lkJ107CiAgICAgICAgICAgICAgICAkb3V0W10gPSAkb2JqOwoKICAgICAgICAgICAgICAgICRycy0+TW92ZU5leHQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiggY291bnQoJG91dCkgKSByZXR1cm4gJG91dDsKICAgIH0KCiAgICAvKioKICAgICAqIFJlc29sdmUgYW4gYXJyYXkgb2YgZmV1IGdyb3VwIG5hbWVzL2lkcyBpbnRvIGFuIGFycmF5IG9mIGVtYWlsIGFkZHJlc3Nlcy4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqIEByZXR1cm4gRW1haWxEZXN0aW5hdGlvbltdCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiByZXNvbHZlX2ZldV9ncm91cHMoKQogICAgewogICAgICAgICRmZXUgPSBjbXNtcygpLT5HZXRNb2R1bGVJbnN0YW5jZSgnRnJvbnRFbmRVc2VycycpOwogICAgICAgIGlmKCAhJGZldSApIHJldHVybjsKCiAgICAgICAgJG91dCA9IFtdOwogICAgICAgICRsaXN0ID0gJHRoaXMtPl9lbWwtPnRvX2ZldV9ncm91cHM7CiAgICAgICAgaWYoIGNvdW50KCRsaXN0KSApIHsKICAgICAgICAgICAgZm9yZWFjaCggJGxpc3QgYXMgJG9uZSApIHsKICAgICAgICAgICAgICAgICRvbmUgPSB0cmltKCRvbmUpOwogICAgICAgICAgICAgICAgJGdpZCA9IDA7CiAgICAgICAgICAgICAgICBpZiggISAoaXNfbnVtZXJpYygkb25lKSAmJiAoaW50KSAkb25lID4gMCApICkgewogICAgICAgICAgICAgICAgICAgICRnaWQgPSAkZmV1LT5HZXRHcm91cElEKCAkb25lICk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRnaWQgPSAoaW50KSAkb25lOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYoICRnaWQgPiAwICkgewogICAgICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgZW1haWxzIGZvciBhbGwgbWVtYmVycyBvZiB0aGlzIGdyb3VwCiAgICAgICAgICAgICAgICAgICAgJHRtcCA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgJHFyeSA9IG5ldyBcZmV1X3VzZXJfcXVlcnk7CiAgICAgICAgICAgICAgICAgICAgJHFyeS0+YWRkX2FuZF9vcHQoIFxmZXVfdXNlcl9xdWVyeV9vcHQ6Ok1BVENIX0dST1VQSUQsICRnaWQgKTsKICAgICAgICAgICAgICAgICAgICAkcXJ5LT5zZXRfcGFnZWxpbWl0KCA1MDAgKTsKICAgICAgICAgICAgICAgICAgICAkcnMgPSAkcXJ5LT5leGVjdXRlKCk7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUoICEkcnMtPkVPRigpICkgewogICAgICAgICAgICAgICAgICAgICAgICAkZmxkcyA9ICRycy0+ZmllbGRzOwoKICAgICAgICAgICAgICAgICAgICAgICAgJG9iaiA9IG5ldyBFbWFpbERlc3RpbmF0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICAkb2JqLT5hZGRyID0gJGZsZHNbJ2VtYWlsJ107CiAgICAgICAgICAgICAgICAgICAgICAgICRvYmotPmZldV9naWQgPSAkZ2lkOwogICAgICAgICAgICAgICAgICAgICAgICAkb2JqLT5mZXVfdWlkID0gJGZsZHNbJ2lkJ107CiAgICAgICAgICAgICAgICAgICAgICAgICR0bXBbXSA9ICRvYmo7CgogICAgICAgICAgICAgICAgICAgICAgICAkcnMtPk1vdmVOZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmKCAkdG1wICkgJG91dCA9IGFycmF5X21lcmdlKCAkb3V0LCAkdG1wICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoIGNvdW50KCRvdXQpICkgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgaW5mbyBhYm91dCB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiBhZG1pbmlzdHJhdG9yIChmb3IgYWRtaW4gcmVxdWVzdHMpCiAgICAgKgogICAgICogQGludGVybmFsCiAgICAgKiBAcmV0dXJuIEVtYWlsRGVzdGluYXRpb24KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHJlc29sdmVfY3VycmVudF9hZG1pbigpCiAgICB7CiAgICAgICAgaWYoICEgJHRoaXMtPl9lbWwtPnRvX2N1cnJlbnRfYWRtaW4gKSByZXR1cm47CiAgICAgICAgJHVpZCA9IGdldF91c2VyaWQoIEZBTFNFICk7CiAgICAgICAgaWYoICR1aWQgPCAxICkgcmV0dXJuOwoKICAgICAgICAvLyB0b2RvOiBzZXQgbmFtZSBoZXJlCiAgICAgICAgJG9iaiA9IG5ldyBFbWFpbERlc3RpbmF0aW9uOwogICAgICAgICRvYmotPmFkZHIgPSBceHRfdXNlcm9wczo6Z2V0X3VpZF9lbWFpbCgpOwogICAgICAgICRvYmotPmFkbWluX3VpZCA9ICR1aWQ7CiAgICAgICAgcmV0dXJuICRvYmo7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgaW5mbyBhYm91dCB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiBGRVUgdXNlciAoZm9yIGZyb250ZW5kIHJlcXVlc3RzKQogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICogQHJldHVybiBFbWFpbERlc3RpbmF0aW9uCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiByZXNvbHZlX2N1cnJlbnRfZmV1KCkKICAgIHsKICAgICAgICBpZiggISAkdGhpcy0+X2VtbC0+dG9fY3VycmVudF9mZXUgKSByZXR1cm47CiAgICAgICAgJGZldSA9IGNtc21zKCktPkdldE1vZHVsZUluc3RhbmNlKCdGcm9udEVuZFVzZXJzJyk7CiAgICAgICAgaWYoICEkZmV1ICkgcmV0dXJuOwogICAgICAgICR1aWQgPSAkZmV1LT5Mb2dnZWRJbklkKCk7CiAgICAgICAgaWYoICR1aWQgPCAxICkgcmV0dXJuOwoKICAgICAgICAkb2JqID0gbmV3IEVtYWlsRGVzdGluYXRpb247CiAgICAgICAgJG9iai0+YWRkciA9ICRmZXUtPkxvZ2dlZEluRW1haWwoKTsKICAgICAgICAkb2JqLT5mZXVfdWlkID0gJHVpZDsKICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KCiAgICAvKioKICAgICAqIFJlc29sdmUgYWxsIG9mIHRoZSB0b19hZGRyZXNzZXMgaW50byBFbWFpbCBtZXNzYWdlcwogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICogQHJldHVybiBFbWFpbERlc3RpbmF0aW9uW10KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHJlc29sdmVfdG9fYWRkcigpCiAgICB7CiAgICAgICAgJG91dCA9IFtdOwogICAgICAgICRsaXN0ID0gJHRoaXMtPl9lbWwtPnRvX2FkZHI7CiAgICAgICAgaWYoIGNvdW50KCRsaXN0KSApIHsKICAgICAgICAgICAgZm9yZWFjaCggJGxpc3QgYXMgJG9uZSApIHsKICAgICAgICAgICAgICAgICRvbmUgPSB0cmltKCRvbmUpOwogICAgICAgICAgICAgICAgaWYoICFpc19lbWFpbCgkb25lKSApIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgJG9iaiA9IG5ldyBFbWFpbERlc3RpbmF0aW9uOwogICAgICAgICAgICAgICAgJG9iai0+YWRkciA9ICRvbmU7CiAgICAgICAgICAgICAgICAkb2JqLT5uYW1lID0gJHRoaXMtPl9lbWwtPmdldF9lbWFpbF9uYW1lKCRvbmUpOwogICAgICAgICAgICAgICAgJG91dFtdID0gJG9iajsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiggY291bnQoJG91dCkgKSByZXR1cm4gJG91dDsKICAgIH0KCgogICAgLyoqCiAgICAgKiBHZXQgYSBsaXN0IG9mIGFsbCBhZGRyZXNzZXMgdGhhdCB0aGUgY3VycmVudCBlbWFpbCBzaG91bGQgYmUgc2VudCB0by4KICAgICAqCiAgICAgKiBAcmV0dXJuIEVtYWlsRGVzdGluYXRpb25bXQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcmVzb2x2ZV9kZXN0X2FkZHJlc3NlcygpCiAgICB7CiAgICAgICAgJHByZSA9IFtdOwogICAgICAgICR0bXAgPSAkdGhpcy0+cmVzb2x2ZV9hZG1pbl9ncm91cHMoKTsKICAgICAgICBpZiggJHRtcCAmJiBjb3VudCgkdG1wKSApICRwcmUgPSBhcnJheV9tZXJnZSggJHRtcCwgJHByZSApOwogICAgICAgICR0bXAgPSAkdGhpcy0+cmVzb2x2ZV9mZXVfdWlkcygpOwogICAgICAgIGlmKCAkdG1wICYmIGNvdW50KCR0bXApICkgJHByZSA9IGFycmF5X21lcmdlKCAkdG1wLCAkcHJlICk7CiAgICAgICAgJHRtcCA9ICR0aGlzLT5yZXNvbHZlX2ZldV9ncm91cHMoKTsKICAgICAgICBpZiggJHRtcCAmJiBjb3VudCgkdG1wKSApICRwcmUgPSBhcnJheV9tZXJnZSggJHRtcCwgJHByZSApOwogICAgICAgICR0bXAgPSAkdGhpcy0+cmVzb2x2ZV9jdXJyZW50X2FkbWluKCk7CiAgICAgICAgaWYoICR0bXAgKSAkcHJlW10gPSAkdG1wOwogICAgICAgICR0bXAgPSAkdGhpcy0+cmVzb2x2ZV9jdXJyZW50X2ZldSgpOwogICAgICAgIGlmKCAkdG1wICkgJHByZVtdID0gJHRtcDsKICAgICAgICAkdG1wID0gJHRoaXMtPnJlc29sdmVfdG9fYWRkcigpOwogICAgICAgIGlmKCAkdG1wICYmIGNvdW50KCR0bXApICkgJHByZSA9IGFycmF5X21lcmdlKCAkdG1wLCAkcHJlICk7CgogICAgICAgIC8vIG5vdyByZWR1Y2UgdGhpcyBsaXN0IHRvIHVuaXF1ZSBhZGRyZXNzZXMKICAgICAgICAkb3V0ID0gYXJyYXlfdW5pcXVlKCAkcHJlLCBTT1JUX1JFR1VMQVIgKTsKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhIGxpc3Qgb2YgYWxsIGFkZHJlc3NlcyB0aGF0IHRoZSBjdXJyZW50IGVtYWlsIHNob3VsZCBiZSBDQydkIHRvCiAgICAgKgogICAgICogQHJldHVybiBFbWFpbERlc3RpbmF0aW9uW10KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHJlc29sdmVfY2NfZW1haWxzKCkKICAgIHsKICAgICAgICAkbGlzdCA9ICR0aGlzLT5fZW1sLT5jY19hZGRyOwogICAgICAgIGlmKCAhJGxpc3QgfHwgIWlzX2FycmF5KCRsaXN0KSB8fCAhY291bnQoJGxpc3QpICkgcmV0dXJuOwogICAgICAgICRsaXN0ID0gYXJyYXlfdW5pcXVlKCRsaXN0KTsKCiAgICAgICAgJG91dCA9IG51bGw7CiAgICAgICAgZm9yZWFjaCggJGxpc3QgYXMgJG9uZSApIHsKICAgICAgICAgICAgaWYoIGlzX2VtYWlsKCRvbmUpICYmICFpbl9hcnJheSggJG9uZSwgJG91dCApICkgewogICAgICAgICAgICAgICAgJG9iaiA9IG5ldyBFbWFpbERlc3Rpb25hdGlvbjsKICAgICAgICAgICAgICAgICRvYmotPmFkZHIgPSAkb25lOwogICAgICAgICAgICAgICAgJG9iai0+bmFtZSA9ICR0aGlzLT5fZW1sLT5nZXRfZW1haWxfbmFtZSgkb25lKTsKICAgICAgICAgICAgICAgICRvdXRbXSA9ICRvYmo7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBsaXN0IG9mIGFsbCBhZGRyZXNzZXMgdGhhdCB0aGUgY3VycmVudCBlbWFpbCBzaG91bGQgYmUgQkNDJ2QgdG8KICAgICAqCiAgICAgKiBAcmV0dXJuIEVtYWlsRGVzdGluYXRpb25bXQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcmVzb2x2ZV9iY2NfZW1haWxzKCkKICAgIHsKICAgICAgICAkbGlzdCA9ICR0aGlzLT5fZW1sLT5iY2NfYWRkcjsKICAgICAgICBpZiggISRsaXN0IHx8ICFpc19hcnJheSgkbGlzdCkgfHwgIWNvdW50KCRsaXN0KSApIHJldHVybjsKICAgICAgICAkbGlzdCA9IGFycmF5X3VuaXF1ZSgkbGlzdCk7CgogICAgICAgICRvdXQgPSBudWxsOwogICAgICAgIGZvcmVhY2goICRsaXN0IGFzICRvbmUgKSB7CiAgICAgICAgICAgIGlmKCBpc19lbWFpbCgkb25lKSAmJiAhaW5fYXJyYXkoICRvbmUsICRvdXQgKSApIHsKICAgICAgICAgICAgICAgICRvYmogPSBuZXcgRW1haWxEZXN0aW9uYXRpb247CiAgICAgICAgICAgICAgICAkb2JqLT5hZGRyID0gJG9uZTsKICAgICAgICAgICAgICAgICRvYmotPm5hbWUgPSAkdGhpcy0+X2VtbC0+Z2V0X2VtYWlsX25hbWUoJG9uZSk7CiAgICAgICAgICAgICAgICAkb3V0W10gPSAkb2JqOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIC8qKgogICAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGFuZCBwcm92aWRlIHRoZSBlbWFpbCBhbmQgRW1haWxEZXN0aW5hdGlvbiBvYmplY3RzLgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICogQHBhcmFtIGNhbGxhYmxlICRjIFRoZSBjYWxsYmFjawogICAgICogQHBhcmFtIEVtYWlsICRlbWwgIFRoZSBlbWFpbAogICAgICogQHBhcmFtIEVtYWlsRGVzdGluYXRpb24gJGRlc3QKICAgICAqIEByZXR1cm4gRW1haWwKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGRvX2NhbGxiYWNrKCBjYWxsYWJsZSAkYyA9IG51bGwsIEVtYWlsICRlbWwsIEVtYWlsRGVzdGluYXRpb24gJGRlc3QgKQogICAgewogICAgICAgIGlmKCAkYyAmJiBpc19jYWxsYWJsZSggJGMgKSApIHsKICAgICAgICAgICAgJGVtbCA9IGNhbGxfdXNlcl9mdW5jX2FycmF5KCAkYywgWyAkZW1sLCAkZGVzdCBdICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZW1sOwogICAgfQoKICAgIC8qKgogICAgICogR2l2ZW4gYW4gZW1haWwgb2JqZWN0LCBnZXQgdGhlIHJlbmRlcmVkIHN1YmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIEVtYWlsICRlbWwKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZW1haWxfc3ViamVjdChFbWFpbCAkZW1sKSA6IHN0cmluZwogICAgewogICAgICAgICRzdWJqZWN0ID0gJyc7CiAgICAgICAgJHRwbCA9ICR0aGlzLT5nZXRfdGVtcGxhdGUoJGVtbCk7CiAgICAgICAgaWYoICRlbWwtPnN1YmpfdHBsICkgewogICAgICAgICAgICAkc3ViamVjdCA9ICR0cGwtPmZldGNoKCAnc3RyaW5nOicuJGVtbC0+c3Vial90cGwgKTsKICAgICAgICAgICAgJHN1YmplY3QgPSB0cmltKHN0cmlwX3RhZ3MoJHN1YmplY3QpKTsKICAgICAgICB9CiAgICAgICAgaWYoICRzdWJqZWN0ICYmICR0aGlzLT5fZW1sLT5lbmNvZGVfc3ViamVjdCApIHsKICAgICAgICAgICAgJHN1YmplY3QgPSAiPT9VVEYtOD9CPyIuYmFzZTY0X2VuY29kZSgkc3ViamVjdCkuIj89IjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRzdWJqZWN0OwogICAgfQoKICAgIC8qKgogICAgICogR2l2ZW4gYW4gZW1haWwgb2JiamVjdCwgZ2V0IHRoZSBwcm9jZXNzZWQgYm9keS4KICAgICAqCiAgICAgKiBAcGFyYW0gRW1haWwgJGVtbAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9lbWFpbF9ib2R5KEVtYWlsICRlbWwpIDogc3RyaW5nCiAgICB7CiAgICAgICAgJGJvZHkgPSAnJzsKICAgICAgICAkdHBsID0gJHRoaXMtPmdldF90ZW1wbGF0ZSgkZW1sKTsKICAgICAgICBpZiggJGVtbC0+Ym9keV90cGwgKSAkYm9keSA9ICR0cGwtPmZldGNoKCAnc3RyaW5nOicuJGVtbC0+Ym9keV90cGwgKTsKICAgICAgICByZXR1cm4gJGJvZHk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhbiBlbWFpbCBvYmplY3QsIGdldCBhIHNtYXJ0eSB0ZW1wbGF0ZSB0byBhbGxvdyBwcm9jZXNzaW5nIGl0LgogICAgICogVGhpcyBtZXRob2QgYXNzaWducyBhbGwgZGF0YSBpbiB0aGUgZW1haWwgb2JqZWN0IHRvIHNtYXJ0eSB2YXJpYWJsZXMuCiAgICAgKgogICAgICogQHBhcmFtIEVtYWlsICRlbWwKICAgICAqIEByZXR1cm4gc21hcnR5X3RlbXBsYXRlICBBIHNtYXJ0eSB0ZW1wbGF0ZSBvYmplY3QKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldF90ZW1wbGF0ZShFbWFpbCAkZW1sKQogICAgewogICAgICAgIGlmKCAhJHRoaXMtPl90cGwgKSB7CiAgICAgICAgICAgICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKICAgICAgICAgICAgJHRoaXMtPl90cGwgPSAkc21hcnR5LT5DcmVhdGVUZW1wbGF0ZSggJ3N0cmluZzonICk7CiAgICAgICAgICAgICRkYXRhID0gJGVtbC0+ZGF0YTsKICAgICAgICAgICAgaWYoICRkYXRhICYmIGNvdW50KCRkYXRhKSApIHsKICAgICAgICAgICAgICAgIGZvcmVhY2goICRkYXRhIGFzICRrZXkgPT4gJHZhbCApIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X3RwbC0+YXNzaWduKCAka2V5LCAkdmFsICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0aGlzLT5fdHBsOwogICAgfQoKICAgIC8qKgogICAgICogR2l2ZW4gYW4gZW1haWwgb2JqZWN0LCBhbmQgYSBzaW5nbGUgZGVzdGlvbmF0aW9uLi4uIHNlbmQgdGhlIGVtYWlsIHRvIHRoZSBkZXN0aW5hdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gRW1haWwgJGVtbAogICAgICogQHBhcmFtIEVtYWlsRGVzdGluYXRpb24gJGRlc3QKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHByb2Nlc3Nfb25lX2VtYWlsKEVtYWlsICRlbWwsIEVtYWlsRGVzdGluYXRpb24gJGRlc3QpCiAgICB7CiAgICAgICAgJHN1YmplY3QgPSAkYm9keSA9IG51bGw7CiAgICAgICAgJG1haWxlciA9ICR0aGlzLT5fbWFpbGVyOwoKICAgICAgICAvLyBwcm9jZXNzIHRlbXBsYXRlIGZvciBzdWJqZWN0IGFuZCBib2R5CiAgICAgICAgJHN1YmplY3QgPSAkdGhpcy0+Z2V0X2VtYWlsX3N1YmplY3QoJGVtbCk7CiAgICAgICAgJGJvZHkgPSAkdGhpcy0+Z2V0X2VtYWlsX2JvZHkoJGVtbCk7CgogICAgICAgIGlmKCAhJGJvZHkgKSByZXR1cm47CiAgICAgICAgaWYoICFwcmVnX21hdGNoKCcvXihcPGh0bWx8XDxib2R5KS8nLCAkYm9keSkgKSAkYm9keSA9ICc8Ym9keT4nLiRib2R5Lic8L2JvZHk+JzsKCiAgICAgICAgLy8gc2V0dXAgbWFpbGVyCiAgICAgICAgJG1haWxlci0+cmVzZXQoKTsKICAgICAgICAkbWFpbGVyLT5TZXRQcmlvcml0eSggJGVtbC0+cHJpb3JpdHkgKTsKICAgICAgICAkbWFpbGVyLT5TZXRTdWJqZWN0KCAkc3ViamVjdCApOwogICAgICAgICRtYWlsZXItPlNldEJvZHkoICRib2R5ICk7CiAgICAgICAgJG1haWxlci0+SXNIVE1MKCBUUlVFICk7CiAgICAgICAgaWYoICRlbWwtPmF0dGFjaG1lbnRzICkgewogICAgICAgICAgICBmb3JlYWNoKCAkZW1sLT5hdHRhY2htZW50cyBhcyAkZmlsZSApIHsKICAgICAgICAgICAgICAgICRtYWlsZXItPkFkZEF0dGFjaG1lbnQoICRmaWxlICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJG1haWxlci0+QWRkQWRkcmVzcyggJGRlc3QtPmFkZHIsICRkZXN0LT5uYW1lICk7CgogICAgICAgICRjY19hZGRyZXNzZXMgPSAkdGhpcy0+cmVzb2x2ZV9jY19lbWFpbHMoKTsKICAgICAgICAkYmNjX2FkZHJlc3NlcyA9ICR0aGlzLT5yZXNvbHZlX2JjY19lbWFpbHMoKTsKICAgICAgICBpZiggJGNjX2FkZHJlc3NlcyApIHsKICAgICAgICAgICAgZm9yZWFjaCggJGNjX2FkZHJlc3NlcyBhcyAkb25lX2NjICkgewogICAgICAgICAgICAgICAgJG1haWxlci0+QWRkQ0MoICRvbmVfY2MtPmFkZHIsICRvbmVfY2MtPm5hbWUgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiggJGJjY19hZGRyZXNzZXMgKSB7CiAgICAgICAgICAgIGZvcmVhY2goICRiY2NfYWRkcmVzc2VzIGFzICRvbmVfYmNjICkgewogICAgICAgICAgICAgICAgJG1haWxlci0+QWRkQkNDKCAkb25lX2JjYy0+YWRkciwgJG9uZV9iY2MtPm5hbWUgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gc2VuZCBhbmQgaGFuZGxlIHJlc3VsdAogICAgICAgICRyZXMgPSAkbWFpbGVyLT5TZW5kKCk7CiAgICAgICAgaWYoICEkcmVzICkgewogICAgICAgICAgICAkZXJyID0gJG1haWxlci0+R2V0RXJyb3JJbmZvKCk7CiAgICAgICAgICAgIHRocm93IG5ldyBNYWlsVHJhbnNwb3J0RXJyb3IoJGVycik7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUHJvY2VzcyBhbmQgc2VuZCB0aGUgZW1haWwKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlbmQoKQogICAgewogICAgICAgIC8vIG5vdGUgdG8gYWxsb3cgZm9yIHVzZXIgaW5mbyBleHBhbnNpb24sIGFuZCBwcml2YWNlCiAgICAgICAgLy8gZWFjaCBkZXN0aW5hdGlvbiByZWNlaXZlcyBhIHVuaXF1ZSBlbWFpbC4uLi4KICAgICAgICAvLyB0aGVyZWZvcmUgQ0MgYW5kIEJDQyBhZGRyZXNzZXMgY2FuIHJlY2VpdmUgbXVsdGlwbGUgZW1haWxzIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBkZXN0aWFudGlvbnMuCgogICAgICAgICR0b19hZGRyZXNzZXMgPSAkdGhpcy0+cmVzb2x2ZV9kZXN0X2FkZHJlc3NlcygpOwogICAgICAgIGlmKCAhJHRvX2FkZHJlc3NlcyB8fCAhY291bnQoJHRvX2FkZHJlc3NlcykgKSB0aHJvdyBuZXcgQWRkcmVzc0V4Y2VwdGlvbignTm8gZGVzdGluYXRpb24gYWRkcmVzc2VzIGZvciBlbWFpbCcpOwoKICAgICAgICAkbl9zZW50ID0gMDsKICAgICAgICAkZW1sID0gJHRoaXMtPl9lbWw7CgogICAgICAgIGZvcmVhY2goICR0b19hZGRyZXNzZXMgYXMgJGRlc3QgKSB7CiAgICAgICAgICAgIC8vIGJlZm9yZSBzZW5kCiAgICAgICAgICAgICRlbWwgPSAkdGhpcy0+ZG9fY2FsbGJhY2soICR0aGlzLT5fYmVmb3JlX3NlbmQsICRlbWwsICRkZXN0ICk7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+cHJvY2Vzc19vbmVfZW1haWwoJGVtbCwgJGRlc3QpOwogICAgICAgICAgICAgICAgJG5fc2VudCsrOwogICAgICAgICAgICAgICAgJGVtbCA9ICR0aGlzLT5kb19jYWxsYmFjayggJHRoaXMtPl9hZnRlcl9zZW5kLCAkZW1sLCAkZGVzdCApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoKCBcUnVudGltZUV4Y2VwdGlvbiAkZSApIHsKICAgICAgICAgICAgICAgIC8vIGlmIHdlIGhhdmUgYW4gb25lcnJvciBjYWxsYmFjayB3ZSBjYWxsLiAgb3RoZXJ3aXNlLCBqdXN0IHRocm93IHRoZSBleGNlcHRpb24gYWdhaW4uCiAgICAgICAgICAgICAgICBpZiggJHRoaXMtPl9vbl9lcnJvciAmJiBpc19jYWxsYWJsZSggJHRoaXMtPl9vbl9lcnJvciApICkgewogICAgICAgICAgICAgICAgICAgICRlcnIgPSAkZS0+R2V0TWVzc2FnZSgpOwogICAgICAgICAgICAgICAgICAgIGNhbGxfdXNlcl9mdW5jX2FycmF5KCAkdGhpcy0+X29uX2Vycm9yLCBbICRkZXN0LCAkZXJyIF0gKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRocm93ICRlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9IC8vIGNsYXNzCg==]]></data>
	</file>
	<file>
	  <filename>/lib/Email/class.utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENNU01TRXh0XEVtYWlsOwoKZmluYWwgY2xhc3MgdXRpbHMKewogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwZXJzb25hbGl6ZV9mb3JfYWRtaW4oIEVtYWlsICRlbWwsIEVtYWlsRGVzdGluYXRpb24gJGRlc3QgKQogICAgewogICAgICAgIC8vIGFkanVzdHMgYW4gZW1haWwgb2JqZWN0LCBhZGRzIGRhdGEgZ2l2ZW4gcGVyc29uYWwgZGF0YSBmb3IgdGhlIGFkbWluIHVzZXIKICAgICAgICBpZiggJGRlc3QtPmFkbWluX3VpZCA8IDEgKSByZXR1cm4gJGVtbDsKCiAgICAgICAgJG9wcyA9IFxVc2VyT3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCk7CiAgICAgICAgJHVzZXIgPSAkb3BzLT5Mb2FkVXNlckJ5SUQoICRkZXN0LT5hZG1pbl91aWQgKTsKICAgICAgICBpZiggISR1c2VyICkgcmV0dXJuICRlbWw7CgogICAgICAgICRlbWwgPSAkZW1sLT5hZGRfZGF0YSggJ2FkbWluX3VzZXJuYW1lJywgJHVzZXItPnVzZXJuYW1lICk7CiAgICAgICAgJGVtbCA9ICRlbWwtPmFkZF9kYXRhKCAnYWRtaW5fZmlyc3RuYW1lJywgJHVzZXItPmZpcnN0bmFtZSApOwogICAgICAgICRlbWwgPSAkZW1sLT5hZGRfZGF0YSggJ2FkbWluX2xhc3RuYW1lJywgJHVzZXItPmxhc3RuYW1lICk7CiAgICAgICAgJGVtbCA9ICRlbWwtPmFkZF9kYXRhKCAnYWRtaW5fZW1haWwnLCAkdXNlci0+ZW1haWwgKTsKICAgICAgICByZXR1cm4gJGVtbDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBlcnNvbmFsaXplX2Zvcl9mZXUoIEVtYWlsICRlbWwsIEVtYWlsRGVzdGluYXRpb24gJGRlc3QgKQogICAgewogICAgICAgIGlmKCAhJGRlc3QtPmZldV91aWQgKSByZXR1cm4gJGVtbDsKICAgICAgICAkZmV1ID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnRnJvbnRFbmRVc2VycycpOwogICAgICAgIGlmKCAhJGZldSApIHJldHVybiAkZW1sOwoKICAgICAgICAkdXNlciA9ICRmZXUtPkdldFVzZXJJbmZvKCAkZGVzdC0+ZmV1X3VpZCwgVFJVRSApOwogICAgICAgIGlmKCAhJHVzZXIgfHwgJHVzZXJbMF0gPT0gRkFMU0UgKSByZXR1cm4gJGVtbDsKICAgICAgICAkdXNlciA9ICR1c2VyWzFdOwogICAgICAgICRlbWwgPSAkZW1sLT5hZGRfZGF0YSgnZmV1X3VzZXJuYW1lJywgJHVzZXJbJ3VzZXJuYW1lJ10pOwogICAgICAgICRlbWwgPSAkZW1sLT5hZGRfZGF0YSgnZmV1X2NyZWF0ZWQnLCAkdXNlclsnY3JlYXRlZGF0ZSddKTsKICAgICAgICAkZW1sID0gJGVtbC0+YWRkX2RhdGEoJ2ZldV9leHBpcmVzJywgJHVzZXJbJ2V4cGlyZXMnXSApOwogICAgICAgICRlbWwgPSAkZW1sLT5hZGRfZGF0YSgnZmV1X2Rpc2FibGVkJywgJHVzZXJbJ2Rpc2FibGVkJ10pOwogICAgICAgICRlbWwgPSAkZW1sLT5hZGRfZGF0YSgnZmV1X2xvZ2dlZGluJywgJHVzZXJbJ2xvZ2dlZGluJ10pOwogICAgICAgIGlmKCBpc3NldCggJHVzZXJbJ2Zwcm9wcyddKSApIHsKICAgICAgICAgICAgZm9yZWFjaCggJHVzZXJbJ2Zwcm9wcyddIGFzICRyZWMgKSB7CiAgICAgICAgICAgICAgICAkZW1sID0gJGVtbC0+YWRkX2RhdGEoICRyZWNbJ3RpdGxlJ10sICRyZWNbJ2RhdGEnXSApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGVtbDsKICAgIH0KfSAvLyBjbGFzcwo=]]></data>
	</file>
	<file>
	  <filename>/lib/Email/interface.EmailProcessor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIERlZmluZXMgYSBwcm90b2NvbCBmb3IgcHJvY2Vzc29ycyBvZiBFbWFpbCBvYmplY3RzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKiBAY2F0ZWdvcnkgVXRpbGl0aWVzCiAqIEBhdXRob3IgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTggYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XEVtYWlsOwoKLyoqCiAqIEBpZ25vcmUKICovCmNsYXNzIEV4Y2VwdGlvbiBleHRlbmRzIFxSdW50aW1lRXhjZXB0aW9uIHt9CgovKioKICogQW4gZXhjZXB0aW9uIGluZGljYXRpbmcgYSBwcm9ibGVtIHdpdGggYW4gZW1haWwgYWRkcmVzcy4KICovCmNsYXNzIEFkZHJlc3NFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24ge30KCi8qKgogKiBBbiBpbnRlcmZhY2UgdG8gZGVmaW5lIGEgcHJvdG9jb2wgZm9yIHByb2Nlc3NvcnMgb2YgZW1haWwgb2JqZWN0cy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICovCmludGVyZmFjZSBFbWFpbFByb2Nlc3Nvcgp7CiAgICAvKioKICAgICAqIE9wdGlvbmFsbHkgc2V0IGEgY2FsbGJhY2sgdG8gYmUgdXNlZCBiZWZvcmUgZWFjaCBtZXNzYWdlIGlzIHNlbnQuCiAgICAgKgogICAgICogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHNob3VsZCBhY2NlcHQgdHdvIHBhcmFtZXRlcnMuICBBbiBFbWFpbCBvYmplY3QsIGFuZCBhbiBFbWFpbERlc3Qgb2JqZWN0LiAgSXQgc2hvdWxkIHJldHVybiBhbiBlbWFpbCBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjIFRoZSBjYWxsYmFjawogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiZWZvcmVfc2VuZCggY2FsbGFibGUgJGMgKTsKCiAgICAvKioKICAgICAqIE9wdGlvbmFsbHkgc2V0IGEgY2FsbGJhY2sgdG8gYmUgdXNlZCBhZnRlciBlYWNoIG1lc3NhZ2UgaXMgc3VjY2Vzc2Z1bHkgc2VudC4KICAgICAqCiAgICAgKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gc2hvdWxkIGFjY2VwdCB0d28gcGFyYW1ldGVycy4gIEFuIEVtYWlsIG9iamVjdCwgYW5kIGFuIEVtYWlsRGVzdCBvYmplY3QuICBJdCBzaG91bGQgcmV0dXJuIGFuIGVtYWlsIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGMgVGhlIGNhbGxiYWNrCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFmdGVyX3NlbmQoIGNhbGxhYmxlICRjICk7CgogICAgLyoqCiAgICAgKiBPcHRpb25hbGx5IHNldCBhIGNhbGxiYWNrIHRvIGJlIHVzZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMuCiAgICAgKgogICAgICogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHNob3VsZCBhY2NlcHQgdHdvIHBhcmFtZXRlcnMuICBBbiBFbWFpbERlc3Qgb2JqZWN0LCBhbmQgYW4gZXJyb3Igc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkYyBUaGUgY2FsbGJhY2sKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb25fZXJyb3IoIGNhbGxhYmxlICRjICk7CgogICAgLyoqCiAgICAgKiBUaGUgY2FsbGJhY2sgZm9yIHNlbmRpbmcgdGhlIGN1cnJlbnQgZW1haWwgb2JqZWN0LgogICAgICogSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjbGFzcyB0byBhY2NlcHQgYW4gRW1haWwgb2JqZWN0IGluIGl0cyBjb25zdHJ1Y3Rvciwgb3Igb3RoZXJ3aXNlLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZCgpOwp9IC8vIGludGVyZmFjZQo=]]></data>
	</file>
	<file>
	  <filename>/lib/Email/interface.iEmailStorage.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgY2xhc3MgdG8gZGVmaW5lIGEgcHJvdG9jb2wgZm9yIGxvYWRpbmcgYW5kIHNhdmluZyBFbWFpbCBvYmplZWN0cy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHRcRW1haWwKICogQGNhdGVnb3J5IFV0aWxpdGllcwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDE4IGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCm5hbWVzcGFjZSBDTVNNU0V4dFxFbWFpbDsKCi8qKgogKiBBbiBpbnRlcmZhY2UgdG8gZGVmaW5lIGEgcHJvdG9jb2wgZm9yIGxvYWRpbmcgYW5kIHNhdmlnbiBFbWFpbCBvYmplY3RzCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0XEVtYWlsCiAqLwppbnRlcmZhY2UgaUVtYWlsU3RvcmFnZQp7CiAgICAvKioKICAgICAqIExvYWQgYW4gZW1haWwgb2JqZWN0CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBvZiB0aGUgZW1haWwgb2JqZWN0IHRvIGxvYWQuCiAgICAgKiBAcmV0dXJuIEVtYWlsfG51bGwgQW4gZW1haWwgb2JqZWN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZCggc3RyaW5nICRuYW1lICk7CgogICAgLyoqCiAgICAgKiBTYXZlIGFuIGVtYWlsIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gRW1haWwgJGVtYWlsIFRoZSBlbWFpbCBvYmplY3QgdG8gc2F2ZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIFRoZSBuYW1lIG9mIHRoZSBlbWFpbCBvYmplY3QgdG8gc2F2ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNhdmUoIEVtYWlsICRlbWFpbCApOwp9]]></data>
	</file>
	<file>
	  <filename>/lib/Exceptions</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/Exceptions/class.DataException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcRXhjZXB0aW9uczsNCg0KDQpjbGFzcyBEYXRhRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uDQp7DQogIA0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/Exceptions/class.Exception.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcRXhjZXB0aW9uczsNCg0KDQpjbGFzcyBFeGNlcHRpb24gZXh0ZW5kcyBcRXhjZXB0aW9uDQp7DQogIA0KICBwcml2YXRlICRfbW9kOw0KICANCiAgLyoqDQogICAqIEV4Y2VwdGlvbiBjb25zdHJ1Y3Rvci4NCiAgICoNCiAgICogQSBtaXhlZCBudW1iZXIgYW5kIHR5cGUgb2YgcGFyYW1ldGVycyBjYW4gYmUgcGFzc2VkDQogICAqIHRvIHRoZSBjb25zdHJ1Y3RvciB0byBhZGQgc3VwcG9ydCBmb3IgZXJyb3IgbG9jYWxpemF0aW9uDQogICAqIHdoZXJlIHJlcXVpcmVkDQogICAqDQogICAqIEZvciBsb2NhbGl6YXRpb24gKHVzZSBvZiB0aGUgbW9kdWxlJ3MgbGFuZyBzdHJpbmdzKQ0KICAgKiBpdCBpcyByZXF1aXJlZCB0aGF0IHRoZSB2ZXJ5IDFzdCBwYXJhbWV0ZXIgcGFzc2VkDQogICAqIGlzIHRoZSBtb2R1bGUgaXRzZWxmDQogICAqDQogICAqDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQ0KICB7DQogIA0KICAgICRwYXJhbXMgICAgID0gXGZ1bmNfZ2V0X2FyZ3MoKTsNCiAgICAkdG1wX3BhcmFtcyA9IFtdOw0KICAgICRuZXdwYXJhbXMgID0gW107DQogICAgDQogICAgaWYoXGNvdW50KCRwYXJhbXMpICYmICRwYXJhbXNbMF0gaW5zdGFuY2VvZiBcQ01TTW9kdWxlKQ0KICAgIHsNCiAgICAgICR0aGlzLT5fbW9kID0gJHBhcmFtc1swXTsNCiAgICAgIHVuc2V0KCRwYXJhbXNbMF0pOw0KICAgICAgJHBhcmFtcyA9IFxhcnJheV92YWx1ZXMoJHBhcmFtcyk7DQogICAgfQ0KICAgIA0KICAgIGlmKCAhaXNzZXQoJHBhcmFtc1swXSkgKQ0KICAgIHsNCiAgICAgICRjb2RlID0gXENNU01TRXh0XGNvcmVcRXJyb3I6OlVOS05PV047DQogICAgICANCiAgICAgICMgd2UgbmVlZCBpdCB0d2ljZTogb25jZSBmb3IgdGhlIExhbmcgc3RyaW5nIHRyYW5zbGF0aW9uIGFuZCBvbmUgdG8gZGlzcGxheSB0aGUgZXJyb3IgY29kZSBpdHNlbGYNCiAgICAgICRuZXdwYXJhbXNbXSA9ICRjb2RlOw0KICAgICAgJG5ld3BhcmFtc1tdID0gJGNvZGU7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAjIGEgbnVtZXJpYyBjb2RlIGhhcyBiZWVuIHByb3ZpZGVkIGluc3RlYWQgb2YgYSBtZXNzYWdlDQogICAgICBpZiggXGlzX251bWVyaWMoJHBhcmFtc1swXSkgKQ0KICAgICAgew0KICAgICAgICAkY29kZSA9ICRwYXJhbXNbMF07DQogICAgICAgICMgc2VwYXJhdGUgYWRkaXRpb25hbCAkcGFyYW1zDQogICAgICAgICR0bXBfcGFyYW1zICA9IFxhcnJheV9zbGljZSgkcGFyYW1zLCAxKTsNCiAgICAgICAgJG5ld3BhcmFtc1tdID0gJGNvZGU7DQogICAgICAgICRuZXdwYXJhbXNbXSA9ICRjb2RlOw0KICAgICAgfQ0KICAgICAgZWxzZSBpZiggMSA9PT0gXGNvdW50KCRwYXJhbXMpICkNCiAgICAgICAgIyB0aGlzIGlzIGp1c3QgYSBjdXN0b20gbWVzc2FnZSBpbnN0ZWFkIG9mIGEgIGVycm9yIGNvZGU6IEdFTkVSSUMNCiAgICAgIHsNCiAgICAgICAgJGNvZGUgICAgICAgID0gXENNU01TRXh0XGNvcmVcRXJyb3I6OkdFTkVSSUM7DQogICAgICAgICRuZXdwYXJhbXNbXSA9ICRjb2RlOw0KICAgICAgICAkbmV3cGFyYW1zW10gPSAkY29kZTsNCiAgICAgICAgJG5ld3BhcmFtc1tdID0gJHBhcmFtc1swXTsNCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgICAgIyB0aGUgY2FsbCBoYXMgYmVlbiBjYWxsZWQgd2l0aCBhbGwgaXRzIHBhcmFtZXRlcnMgZmlsbGVkOg0KICAgICAgICAjIGkuZS46IHRocm93IG5ldyBDTVNNU0V4dFxFeGNlcHRpb25zXEV4Y2VwdGlvbigkbXNnLCAkY29kZVssICRwYXJhbTFdWywgJHBhcmFtMl0uLi5bLCAkcGFyYW0obildKQ0KICAgICAgICAjIHdoZXJlIHRoZSBleHRyYSBwYXJhbXMgYXJlIHBhc3NlZCB0byB0aGUgPE1vZHVsZT4tPkxhbmcoKSBtZXRob2QgYXMgYWRkaXRpb25hbCBwYXJhbXMNCiAgICAgIHsNCiAgICAgICAgJGNvZGUgPSAkcGFyYW1zWzFdOw0KICAgICAgICAjIHNlcGFyYXRlIGFkZGl0aW9uYWwgJHBhcmFtcw0KICAgICAgICAkdG1wX3BhcmFtcyAgPSBcYXJyYXlfc2xpY2UoJHBhcmFtcywgMik7DQogICAgICAgICRuZXdwYXJhbXNbXSA9ICRjb2RlOw0KICAgICAgICAkbmV3cGFyYW1zW10gPSAkY29kZTsNCiAgICAgICAgJG5ld3BhcmFtc1tdID0gJHBhcmFtc1swXTsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgIyBwcmV2ZW50IG5vbiBleGlzdGluZyBlcnJvcnMNCiAgICAgIGlmKCAhXENNU01TRXh0XGNvcmVcRXJyb3I6Okhhc0NvZGUoJGNvZGUpICkNCiAgICAgIHsNCiAgICAgICAgJGNvZGUgICAgICAgID0gXENNU01TRXh0XGNvcmVcRXJyb3I6OlVOS05PV047DQogICAgICAgICRuZXdwYXJhbXNbXSA9ICRjb2RlOw0KICAgICAgICAkbmV3cGFyYW1zW10gPSAkY29kZTsNCiAgICAgIH0NCiAgICB9DQogIA0KICAgICMgd2UgbWVyZ2UgYW55IGFkZGl0aW9uYWwgcGFyYW1zDQogICAgJG5ld3BhcmFtcyA9IFxhcnJheV9tZXJnZSgkbmV3cGFyYW1zLCAkdG1wX3BhcmFtcyk7DQogICAgDQogICAgaWYoTlVMTCA9PT0gJHRoaXMtPl9tb2QpDQogICAgew0KICAgICAgIyBzbyB3ZSBkb24ndCBoYXZlIGEgbW9kdWxlIHRvIHBhc3MgaXQgb24gdG8gaXQncyBMYW5nIG1ldGhvZA0KICAgICAgJG1zZyA9IChzdHJpbmcpJHBhcmFtc1swXTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICMgcGFzcyBtZXJnZWQgcGFyYW1ldGVycyB0byB0aGUgbW9kdWxlLT5MYW5nKCk7DQogICAgICAkbXNnID0gXGNhbGxfdXNlcl9mdW5jX2FycmF5KFskdGhpcy0+X21vZCwgJ0xhbmcnXSwgJG5ld3BhcmFtcyk7DQogICAgfQ0KICAgIA0KICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG1zZywgKGludCkkY29kZSk7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkNCiAgew0KICAgIHJldHVybiAnIyMgJyAuICR0aGlzLT5tZXNzYWdlIC4gJyAjIyc7DQogIH0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/Exceptions/class.FileSystemException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcRXhjZXB0aW9uczsNCg0KDQpjbGFzcyBGaWxlU3lzdGVtRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uDQp7DQogIA0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/Exceptions/class.RuntimeException.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcRXhjZXB0aW9uczsNCg0KDQpjbGFzcyBSdW50aW1lRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uDQp7DQogIA0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/extraclasses.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIGNsYXNzZXMgdGhhdCBhcmUgdG9vIHNtYWxsIHRvIGJlIGRpc3RyaWJ1dGVkIGluIHRoZWlyIG93biBmaWxlLgogKgogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCi8qKgogKiBBIGNsYXNzIHRvIGluZGljYXRlIGEgZGF0YWJhc2UgcXVlcnkgZXJyb3IuCiAqCiAqIEBjYXRlZ29yeSBFeGNlcHRpb25zCiAqLwpjbGFzcyB4dF9kYl9leGNlcHRpb24gZXh0ZW5kcyB4dF9leGNlcHRpb24ge30KCi8qKgogKiBBIGNsYXNzIHRvIGluZGljYXRlIGEgZGF0YWJhc2UgcXVlcnkgZXJyb3IuCiAqCiAqIEBjYXRlZ29yeSBFeGNlcHRpb25zCiAqLwpjbGFzcyB4dF9zcWxfZXJyb3IgZXh0ZW5kcyB4dF9kYl9leGNlcHRpb24ge30KCi8qKgogKiBBbiBleGNlcHRpb24gaW5kaWNhdGluZyB0aGF0IGludmFsaWQgZGF0YSB3YXMgcGFzc2VkIHRvIGEgY2xhc3MsIG1ldGhvZCwgb3IgYWN0aW9uLgogKi8KY2xhc3MgeHRfSW52YWxpZERhdGFFeGNlcHRpb24gZXh0ZW5kcyB4dF9leGNlcHRpb24ge30KCi8qKgogKiBBbiBleGNlcHRpb24gaW5kaWNhdGluZyB0aGF0IGEgZGVzaXJlZCBpdGVtIHdhcyBub3QgZm91bmQuCiAqLwpjbGFzcyB4dF9ub3Rmb3VuZEV4Y2VwdGlvbiBleHRlbmRzIHh0X2V4Y2VwdGlvbiB7fQoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/form_tools.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoKICogQ3JlYXRlIGEgeWVzL25vIGRyb3Bkb3duCiAqLwoKZnVuY3Rpb24geHRfQ3JlYXRlSW5wdXRTdWJtaXQoJG1vZCwkaWQsJG5hbWUsJHZhbHVlPScnLCRhZGR0ZXh0PScnLCRpbWFnZT0nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb25maXJtdGV4dD0nJywkY2xhc3M9JycsJGFsdCA9ICcnLCRlbGlkID0gJycpCnsKICAgICRyZWFsX2ltYWdlID0gJyc7CiAgICBpZiggIWVtcHR5KCRpbWFnZSkgKSB7CiAgICAgICAgJGNvbmZpZyA9ICRtb2QtPmNvbmZpZzsKCiAgICAgICAgLy8gY2hlY2sgaW1hZ2VfZGlyZWN0b3JpZXMgZmlyc3QKICAgICAgICBpZiggaXNzZXQoJG1vZC0+X2ltYWdlX2RpcmVjdG9yaWVzKSAmJiAhZW1wdHkoJG1vZC0+X2ltYWdlX2RpcmVjdG9yaWVzKSkgewogICAgICAgICAgICBmb3JlYWNoKCAkbW9kLT5faW1hZ2VfZGlyZWN0b3JpZXMgYXMgJGRpciApIHsKICAgICAgICAgICAgICAgICR1cmwgPSBjbXNfam9pbl9wYXRoKCRkaXIsJGltYWdlKTsKICAgICAgICAgICAgICAgICRwYXRoID0gY21zX2pvaW5fcGF0aCgkY29uZmlnWydyb290X3BhdGgnXSwkdXJsKTsKCiAgICAgICAgICAgICAgICBpZiggaXNfcmVhZGFibGUoJHBhdGgpICkgJHJlYWxfaW1hZ2UgPSAkdXJsOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkdGhlbWUgPSBjbXNfdXRpbHM6OmdldF90aGVtZV9vYmplY3QoKTsKICAgICAgICBpZiggZW1wdHkoJHJlYWxfaW1hZ2UpICkgewogICAgICAgICAgICAkcGF0aCA9ICRjb25maWdbJ3Jvb3RfcGF0aCddLicvJy4kY29uZmlnWydhZG1pbl9kaXInXS4nL3RoZW1lcy8nLiR0aGVtZS0+dGhlbWVOYW1lLicvaW1hZ2VzLyc7CiAgICAgICAgICAgIGlmKCBmaWxlX2V4aXN0cygkcGF0aC4kaW1hZ2UpICkgewogICAgICAgICAgICAgICAgLy8gaXRzIGEgdGhlbWUgaW1hZ2UKICAgICAgICAgICAgICAgICRyZWFsX2ltYWdlID0gJGNvbmZpZ1snYWRtaW5fZGlyJ10uIi90aGVtZXMvIi4kdGhlbWUtPnRoZW1lTmFtZS4nL2ltYWdlcy8nLiRpbWFnZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYoIGVtcHR5KCRyZWFsX2ltYWdlKSApIHsKICAgICAgICAgICAgaWYoIGlzX29iamVjdCgkdGhlbWUpICkgewogICAgICAgICAgICAgICAgLy8gd2UncmUgaW4gdGhlIGFkbWluCiAgICAgICAgICAgICAgICBpZiggISRhbHQgKSAkYWx0ID0gJHZhbHVlOwogICAgICAgICAgICAgICAgJHR4dCA9ICR0aGVtZS0+RGlzcGxheUltYWdlKCRpbWFnZSwkYWx0LCcnLCcnLCRjbGFzcyk7CiAgICAgICAgICAgICAgICAkcmVhbF9pbWFnZSA9ICR0aGVtZS0+aW1hZ2VMaW5rWyRpbWFnZV07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRhZGR0ZXh0IC49ICcgdGl0bGU9IicuJHZhbHVlLiciJzsKICAgIH0KCiAgICBpZiggIWVtcHR5KCRjbGFzcykgKSAkYWRkdGV4dCAuPSAnIGNsYXNzPSInLiRjbGFzcy4nIic7CiAgICByZXR1cm4gJG1vZC0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCRuYW1lLCR2YWx1ZSwkYWRkdGV4dCwkcmVhbF9pbWFnZSwkY29uZmlybXRleHQpOwp9CgoKLyoKICogQSBjb252ZW5pZW5jZSBtZXRob2QgdG8gY3JlYXRlIGEgY2hlY2tib3gKICovCmZ1bmN0aW9uIHh0X0NyZWF0ZUlucHV0Q2hlY2tib3goJG1vZCwkaWQsICRuYW1lLCAkdmFsdWU9JycsICRzZWxlY3RlZHZhbHVlPScnLCAkYWRkdHRleHQ9JycpCnsKICAgICR0ZXh0ID0gJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iJy4kaWQuJG5hbWUuJyIgdmFsdWU9IicuJHZhbHVlLiciJzsKICAgICRhcnIgPSBleHBsb2RlKCIsIiwkc2VsZWN0ZWR2YWx1ZSk7CiAgICBmb3JlYWNoKCAkYXJyIGFzICRhICkgewogICAgICAgIGlmICgkYSA9PSAkdmFsdWUpICR0ZXh0IC49ICcgJyAuICdjaGVja2VkPSJjaGVja2VkIic7CiAgICB9CiAgICBpZiAoJGFkZHR0ZXh0ICE9ICcnKSAkdGV4dCAuPSAnICcuJGFkZHR0ZXh0OwogICAgJHRleHQgLj0gIiAvPlxuIjsKICAgIHJldHVybiAkdGV4dDsKfQoKLyoKICogQSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBoaWRkZW4gZm9ybSBlbGVtZW50CiAqLwpmdW5jdGlvbiB4dF9DcmVhdGVJbnB1dEhpZGRlbigkbW9kLCAkaWQsICRuYW1lLCAkdmFsdWU9JycsICRhZGR0ZXh0PScnLCAkZGVsaW09JywnKQp7CiAgICBpZiggaXNfYXJyYXkoICR2YWx1ZSApICkgewogICAgICAgICR2YWwgPSB4dF9hcnJheTo6aW1wbG9kZV93aXRoX2tleSggJHZhbHVlICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkdmFsID0gJHZhbHVlOwogICAgfQogICAgJHZhbCA9IHN0cl9yZXBsYWNlKCciJywgJyZxdW90OycsICR2YWwpOwogICAgJHRleHQgPSAnPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iJy4kaWQuJG5hbWUuJyIgdmFsdWU9IicuJHZhbC4nIic7CiAgICBpZiAoJGFkZHRleHQgIT0gJycpICR0ZXh0IC49ICcgJy4kYWRkdGV4dDsKICAgICR0ZXh0IC49ICIgLz5cbiI7CiAgICByZXR1cm4gJHRleHQ7Cn0KCgovKgogKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIGNvbG9yIHNlbGVjdG9yCiAqLwpmdW5jdGlvbiB4dF9DcmVhdGVDb2xvckRyb3Bkb3duKCRtb2QsJGlkLCRuYW1lLCRzZWxlY3RlZHZhbHVlKQp7CiAgICBzdGF0aWMgJF9jb2xvcnM7CiAgICBpZiggIWlzX2FycmF5KCRfY29sb3JzKSApIHsKICAgICAgICAkdG1wID0gZXhwbG9kZSgnLCcsJG1vZC0+TGFuZygncmdiX2NvbG9ycycpKTsKICAgICAgICAkY29sb3JzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoKCAkdG1wIGFzICRvbmUgKSB7CiAgICAgICAgICAgIGxpc3QoJHJnYiwkdG5hbWUpID0gZXhwbG9kZSgnLScsJG9uZSk7CiAgICAgICAgICAgICRjb2xvcnNbdHJpbSgkdG5hbWUpXSA9IHRyaW0oJHJnYik7CiAgICAgICAgfQogICAgICAgICRfY29sb3JzID0gJGNvbG9yczsKICAgIH0KCiAgICByZXR1cm4gJG1vZC0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsJG5hbWUsJF9jb2xvcnMsLTEsJHNlbGVjdGVkdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICcuJHNlbGVjdGVkdmFsdWUuJzsiIG9uQ2hhbmdlPSJ0aGlzLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLm9wdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZSIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6Jy4kc2VsZWN0ZWR2YWx1ZS4nIicpOwp9CgoKCiMKIyBFT0YKIwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/FS</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/FS/class.DirComparor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcRlM7DQoNCg0KdXNlIENNU01TRXh0XEV4Y2VwdGlvbnNcRmlsZVN5c3RlbUV4Y2VwdGlvbjsNCg0KY2xhc3MgRGlyQ29tcGFyb3INCnsNCiAgcHJpdmF0ZSAkX2E7DQogIHByaXZhdGUgJF9iOw0KICBwcml2YXRlICRfbGlzdF9hOw0KICBwcml2YXRlICRfbGlzdF9iOw0KICBwcml2YXRlICRfZG9fbWQ1Ow0KICBwcml2YXRlICRfaGFzX3J1biA9IE5VTEw7DQogIHByaXZhdGUgJF9iYXNlX2RpcjsNCiAgcHJpdmF0ZSAkX2lnbm9yZWQgPSBbXTsNCiAgcHJpdmF0ZSAkX2Rvbm90ZGVsZXRlOw0KICANCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkZGlyX2EsIHN0cmluZyAkZGlyX2IsIGJvb2wgJGRvX21kNSA9IEZBTFNFKQ0KICB7DQogICAgaWYoIVxpc19kaXIoJGRpcl9hKSkNCiAgICB7DQogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbihceHRfdXRpbHM6OmdldF94dCgpLCBcQ01TTVNFeHRcY29yZVxFcnJvcjo6SU5WQUxJRF9ESVJfRVJST1IsICRkaXJfYSk7DQogICAgfQ0KICAgIGlmKCFcaXNfcmVhZGFibGUoJGRpcl9hKSkNCiAgICB7DQogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbignRGlyZWN0b3J5ICcgLiAkZGlyX2EgLiAnIGlzIG5vdCByZWFkYWJsZScpOw0KICAgIH0NCiAgICBpZighXGlzX2RpcigkZGlyX2IpKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCdJbnZhbGlkIGRpcmVjdG9yeSAnIC4gJGRpcl9iKTsNCiAgICB9DQogICAgaWYoIVxpc19yZWFkYWJsZSgkZGlyX2IpKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCdEaXJlY3RvcnkgJyAuICRkaXJfYiAuICcgaXMgbm90IHJlYWRhYmxlJyk7DQogICAgfQ0KICAgIA0KICAgICR0aGlzLT5fYSAgICAgID0gJGRpcl9hOw0KICAgICR0aGlzLT5fYiAgICAgID0gJGRpcl9iOw0KICAgICR0aGlzLT5fZG9fbWQ1ID0gJGRvX21kNTsNCiAgICAkdGhpcy0+X2xpc3RfYSA9IFtdOw0KICAgICR0aGlzLT5fbGlzdF9iID0gW107DQogICAgJHRoaXMtPl9kb25vdGRlbGV0ZSA9IFtdOw0KICB9DQogIA0KLy8gIHB1YmxpYyBmdW5jdGlvbiBkb19ub3RfZGVsZXRlKCRpbikNCi8vICB7DQovLyAgICBpZighJGluKSB7IHJldHVybjsgfQ0KLy8NCi8vICAgIGlmKCFcaXNfYXJyYXkoJGluKSkgeyAkaW4gPSBbJGluXTsgfQ0KLy8NCi8vICAgIGZvcmVhY2goJGluIGFzICRvbmUpDQovLyAgICB7DQovLyAgICAgICRvbmUgPSBcdHJpbSgkb25lKTsNCi8vDQovLyAgICAgIGlmKCRvbmUpIHsgJHRoaXMtPl9kb25vdGRlbGV0ZVtdID0gJG9uZTsgfQ0KLy8gICAgfQ0KLy8gIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBpZ25vcmUoJGluKQ0KICB7DQogICAgaWYoISRpbikgeyByZXR1cm47IH0NCiAgICANCiAgICBpZighXGlzX2FycmF5KCRpbikpIHsgJGluID0gWyRpbl07IH0NCiAgICANCiAgICBmb3JlYWNoKCRpbiBhcyAkb25lKQ0KICAgIHsNCiAgICAgICRvbmUgPSBcdHJpbSgkb25lKTsNCiAgICAgIA0KICAgICAgaWYoJG9uZSkgeyAkdGhpcy0+X2lnbm9yZWRbXSA9ICRvbmU7IH0NCiAgICB9DQogIH0NCiAgDQogIHByaXZhdGUgZnVuY3Rpb24gX3NldF9iYXNlKHN0cmluZyAkZGlyKQ0KICB7DQogICAgJHRoaXMtPl9iYXNlX2RpciA9ICRkaXI7DQogIH0NCiAgDQogIHByaXZhdGUgZnVuY3Rpb24gX2dldF9iYXNlKCkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+X2Jhc2VfZGlyOw0KICB9DQogIA0KICBwcml2YXRlIGZ1bmN0aW9uIF9pc19pZ25vcmVkKHN0cmluZyAkZmlsZW5hbWUpIDogYm9vbA0KICB7DQogICAgZm9yZWFjaCgkdGhpcy0+X2lnbm9yZWQgYXMgJHBhdHRlcm4pDQogICAgew0KICAgICAgaWYoJHBhdHRlcm4gPT09ICRmaWxlbmFtZSB8fCBcZm5tYXRjaCgkcGF0dGVybiwgJGZpbGVuYW1lLCBcRk5NX0NBU0VGT0xEKSkgeyByZXR1cm4gVFJVRTsgfQ0KICAgIH0NCiAgICANCiAgICByZXR1cm4gRkFMU0U7DQogIH0NCiAgDQogIHByaXZhdGUgZnVuY3Rpb24gX3JlYWRfZGlyKCRkaXIgPSBOVUxMKQ0KICB7DQogICAgaWYoISRkaXIpIHsgJGRpciA9ICR0aGlzLT5fYmFzZV9kaXI7IH0NCiAgICANCiAgICBpZighJGRpcikNCiAgICB7DQogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbignTm8gZGlyZWN0b3J5IHNwZWNpZmllZCB0byBfcmVhZF9kaXInKTsNCiAgICB9DQogICAgDQogICAgJG91dCA9IFtdOw0KICAgICR0bXAgPSBbXTsNCiAgICAkZGggID0gXG9wZW5kaXIoJGRpcik7DQogICAgDQogICAgaWYoISRkaCkNCiAgICB7DQogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbignUHJvYmxlbSBnZXR0aW5nIGRpcmVjdG9yeSBoYW5kbGUgZm9yICcgLiAkZGlyKTsNCiAgICB9DQogICAgDQogICAgd2hpbGUoIEZBTFNFICE9PSAoICRmaWxlID0gXHJlYWRkaXIoJGRoKSApICkNCiAgICB7DQogICAgICBpZignLicgPT09ICRmaWxlIHx8ICcuLicgPT09ICRmaWxlKSB7IGNvbnRpbnVlOyB9DQogICAgICANCiAgICAgICRmbiA9ICRkaXIgLiBcRElSRUNUT1JZX1NFUEFSQVRPUiAuICRmaWxlOw0KICAgICAgDQogICAgICBpZiggJHRoaXMtPl9pc19pZ25vcmVkKCRmaWxlKSApIHsgY29udGludWU7IH0NCiAgICAgIA0KICAgICAgJGJhc2UgPSBcc3Vic3RyKCAkZm4sIFxzdHJsZW4oICR0aGlzLT5fZ2V0X2Jhc2UoKSApICk7DQogICAgICANCiAgICAgIGlmKCBcaXNfZGlyKCRmbikgKQ0KICAgICAgew0KICAgICAgICAkdG1wW10gICAgICAgID0gJHRoaXMtPl9yZWFkX2RpcigkZm4pOw0KICAgICAgICAvLyRvdXQgICAgICAgICAgPSBhcnJheV9tZXJnZSgkb3V0LCAkdG1wKTsNCiAgICAgICAgJHJlYyAgICAgICAgICA9IFtdOw0KICAgICAgICAkcmVjWydzaXplJ10gID0gQFxmaWxlc2l6ZSgkZm4pOw0KICAgICAgICAkcmVjWydtdGltZSddID0gQFxmaWxlbXRpbWUoJGZuKTsNCiAgICAgICAgDQogICAgICAgIGlmKCR0aGlzLT5fZG9fbWQ1KSB7ICRyZWNbJ21kNSddID0gXG1kNV9maWxlKCRmbik7IH0NCiAgICAgICAgDQogICAgICAgICRvdXRbJGJhc2VdID0gJHJlYzsNCiAgICAgICAgY29udGludWU7DQogICAgICB9DQogICAgICANCiAgICAgIGlmKCFcaXNfcmVhZGFibGUoJGZuKSkNCiAgICAgIHsNCiAgICAgICAgXGF1ZGl0KDgwMDg1LCBfX0NMQVNTX18sICIkZm4gaXMgbm90IHJlYWRhYmxlIik7DQogICAgICAgIGNvbnRpbnVlOw0KICAgICAgfQ0KICAgICAgDQogICAgICAkcmVjICAgICAgICAgID0gW107DQogICAgICAkcmVjWydzaXplJ10gID0gQFxmaWxlc2l6ZSgkZm4pOw0KICAgICAgJHJlY1snbXRpbWUnXSA9IEBcZmlsZW10aW1lKCRmbik7DQogICAgICANCiAgICAgIGlmKCR0aGlzLT5fZG9fbWQ1KSB7ICRyZWNbJ21kNSddID0gXG1kNV9maWxlKCRmbik7IH0NCiAgICAgIA0KICAgICAgJG91dFskYmFzZV0gPSAkcmVjOw0KICAgIH0NCiAgICANCiAgICAkb3V0ID0gXGFycmF5X21lcmdlKCRvdXQsIC4uLiR0bXApOw0KICAgIA0KICAgIHJldHVybiAkb3V0Ow0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gcnVuKCkNCiAgew0KICAgIGlmKCR0aGlzLT5faGFzX3J1bikgeyByZXR1cm47IH0NCiAgICANCiAgICAkdGhpcy0+X2hhc19ydW4gPSBUUlVFOw0KICAgIA0KICAgICR0aGlzLT5fc2V0X2Jhc2UoJHRoaXMtPl9hKTsNCiAgICAkdGhpcy0+X2xpc3RfYSA9ICR0aGlzLT5fcmVhZF9kaXIoKTsNCiAgICAkdGhpcy0+X3NldF9iYXNlKCR0aGlzLT5fYik7DQogICAgJHRoaXMtPl9saXN0X2IgPSAkdGhpcy0+X3JlYWRfZGlyKCR0aGlzLT5fYik7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBnZXRfbmV3X2ZpbGVzKCkgOiBhcnJheQ0KICB7DQogICAgJHRoaXMtPnJ1bigpOw0KICAgIA0KICAgIC8vIGdldCBhbGwgdGhlIGZpbGVzIGluIGIgdGhhdCBhcmUgbm90IGluIGENCiAgICAkdG1wX2EgPSBcYXJyYXlfa2V5cygkdGhpcy0+X2xpc3RfYSk7DQogICAgJHRtcF9iID0gXGFycmF5X2tleXMoJHRoaXMtPl9saXN0X2IpOw0KICAgIA0KICAgIHJldHVybiBcYXJyYXlfZGlmZigkdG1wX2IsICR0bXBfYSk7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBnZXRfZGVsZXRlZF9maWxlcygpIDogYXJyYXkNCiAgew0KICAgICR0aGlzLT5ydW4oKTsNCiAgICANCiAgICAvLyBnZXQgYWxsIHRoZSBmaWxlcyBpbiBiIHRoYXQgYXJlIG5vdCBpbiBhDQogICAgJHRtcF9hID0gXGFycmF5X2tleXMoJHRoaXMtPl9saXN0X2EpOw0KICAgICR0bXBfYiA9IFxhcnJheV9rZXlzKCR0aGlzLT5fbGlzdF9iKTsNCiAgICAkb3V0ICAgPSBcYXJyYXlfZGlmZigkdG1wX2EsICR0bXBfYik7DQogICAgDQogICAgaWYoXGNvdW50KCRvdXQpICYmIFxjb3VudCgkdGhpcy0+X2Rvbm90ZGVsZXRlKSkNCiAgICB7DQogICAgICAkbmV3X291dCA9IFtdOw0KICAgICAgDQogICAgICBmb3JlYWNoKCRvdXQgYXMgJGZpbGUpDQogICAgICB7DQogICAgICAgICRza2lwcGVkID0gRkFMU0U7DQogICAgICAgIGZvcmVhY2goJHRoaXMtPl9kb25vdGRlbGV0ZSBhcyAkbmQpDQogICAgICAgIHsNCiAgICAgICAgICBpZihzdGFydHN3aXRoKCRmaWxlLCAkbmQpKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIC8vIHNraXAgdGhpcyBmaWxlIGF0IHRoaXMgc3RhZ2UuDQogICAgICAgICAgICAkc2tpcHBlZCA9IFRSVUU7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYoISRza2lwcGVkKQ0KICAgICAgICB7DQogICAgICAgICAgJG5ld19vdXRbXSA9ICRmaWxlOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgIFxhdWRpdCg4MDA4NSwgX19DTEFTU19fLCAnc2tpcHBlZCAnIC4gJGZpbGUgLiAnLCBpdCBpcyBpbiB0aGUgbm90ZGVsZXRlZCBsaXN0Jyk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIA0KICAgICAgJG91dCA9ICRuZXdfb3V0Ow0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJG91dDsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIGdldF9jaGFuZ2VkX2ZpbGVzKCkgOiBhcnJheQ0KICB7DQogICAgJHRoaXMtPnJ1bigpOw0KICAgIA0KICAgICRvdXQgPSBbXTsNCiAgICANCiAgICBmb3JlYWNoKCR0aGlzLT5fbGlzdF9hIGFzICRwYXRoID0+ICRyZWNfYSkNCiAgICB7DQogICAgICBpZighaXNzZXQoJHRoaXMtPl9saXN0X2JbJHBhdGhdKSkgeyBjb250aW51ZTsgfSAvLyBkZWxldGVkL21vdmVkIGluIGIuDQogICAgICANCiAgICAgICRyZWNfYiA9ICR0aGlzLT5fbGlzdF9iWyRwYXRoXTsNCiAgICAgIA0KICAgICAgaWYoDQogICAgICAgICRyZWNfYVsnc2l6ZSddICE9ICRyZWNfYlsnc2l6ZSddIHx8ICRyZWNfYVsnbXRpbWUnXSAhPSAkcmVjX2JbJ210aW1lJ10gfHwNCiAgICAgICAgKGlzc2V0KCRyZWNfYVsnbWQ1J10sICRyZWNfYlsnbWQ1J10pICYmICRyZWNfYVsnbWQ1J10gIT0gJHJlY19iWydtZDUnXSkNCiAgICAgICkgeyAkb3V0W10gPSAkcGF0aDsgfQ0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJG91dDsNCiAgfQ0KICANCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/FS/class.DirCopier.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcd2lwOw0KDQoNCmNsYXNzIERpckNvcGllcg0Kew0KICBwcm90ZWN0ZWQgJF9zb3VyY2U7DQogIHByb3RlY3RlZCAkX3RhcmdldDsNCiAgcHJvdGVjdGVkICRfZXhjZXB0aW9uc19saXN0ID0gW107DQogIHByb3RlY3RlZCAkX2ZpbGVzX2xpc3QgPSBbXTsNCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCguLi4kZmlsZXMpDQogIHsNCiAgICBpZiggIWVtcHR5KCRmaWxlcykgKQ0KICAgIHsNCiAgICAgICR0aGlzLT5fZmlsZXNfbGlzdCA9IFsuLi4kdGhpcy0+X2ZpbGVzX2xpc3QsIC4uLiRmaWxlcyBdOw0KICAgIH0NCiAgfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/FS/class.ExtendedIniParser.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogSGVhdmlseSBtb2RpZmllZCB2ZXJzaW9uIG9mDQogKiBBdXN0aW4gSHlkZSdzIEluaVBhcnNlcg0KICogQGF1dGhvciBGZXJuYW5kbyBNb3JnYWRvIGFrYSBKbyBNb3JnIDxqb21vcmdAPg0KICovDQovKioNCiAqIFtNSVQgTGljZW5zZWRdKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKQ0KICogQ29weXJpZ2h0IChjKSAyMDEzIEF1c3RpbiBIeWRlDQogKg0KICogSW1wbGVtZW50cyBhIHBhcnNlciBmb3IgSU5JIGZpbGVzIHRoYXQgc3VwcG9ydHMNCiAqIC0gU2VjdGlvbiBpbmhlcml0YW5jZQ0KICogLSBQcm9wZXJ0eSBuZXN0aW5nDQogKiAtIFNpbXBsZSBhcnJheXMNCiAqDQogKiBAYXV0aG9yIEF1c3RpbiBIeWRlDQogKiBAYXV0aG9yIFRpbGwgS2xhbXBhZWNrZWwgPHRpbGxAcGhwLm5ldD4NCiAqLw0KLyoqDQogKiBJbmlQYXJzZXINCiAqDQogKiBJbmlQYXJzZXIgaXMgYSBzaW1wbGUgcGFyc2VyIGZvciBjb21wbGV4IElOSSBmaWxlcywNCiAqIHByb3ZpZGluZyBhIG51bWJlciBvZiBleHRyYSBzeW50YWN0aWMgZmVhdHVyZXMgdG8gdGhlIGJ1aWx0LWluIElOSSBwYXJzaW5nIGZ1bmN0aW9ucywNCiAqIGluY2x1ZGluZyBzZWN0aW9uIGluaGVyaXRhbmNlLCBwcm9wZXJ0eSBuZXN0aW5nLCBhbmQgYXJyYXkgbGl0ZXJhbHMuDQogKg0KICogLSBBbiBFeGFtcGxlDQogKg0KICogZW52aXJvbm1lbnQgPSB0ZXN0aW5nDQogKg0KICogW3Rlc3RpbmddDQogKiBkZWJ1ZyA9IHRydWUNCiAqIGRhdGFiYXNlLmNvbm5lY3Rpb24gPSAibXlzcWw6aG9zdD0xMjcuMC4wLjEiDQogKiBkYXRhYmFzZS5uYW1lID0gdGVzdA0KICogZGF0YWJhc2UudXNlcm5hbWUgPQ0KICogZGF0YWJhc2UucGFzc3dvcmQgPQ0KICogc2VjcmV0cyA9IFsxLDIsM10NCiAqDQogKiBbc3RhZ2luZyA6IHRlc3RpbmddDQogKiBkYXRhYmFzZS5uYW1lID0gc3RhZ2UNCiAqIGRhdGFiYXNlLnVzZXJuYW1lID0gc3RhZ2luZw0KICogZGF0YWJhc2UucGFzc3dvcmQgPSAxMjM0NQ0KICoNCiAqIFtwcm9kdWN0aW9uIDogc3RhZ2luZ10NCiAqIGRlYnVnID0gZmFsc2U7DQogKiBkYXRhYmFzZS5uYW1lID0gcHJvZHVjdGlvbg0KICogZGF0YWJhc2UudXNlcm5hbWUgPSByb290DQogKg0KICogQW5kIHdoZW4gcGFyc2VkIHdpdGggSW5pUGFyc2VyOg0KICoNCiAqICRwYXJzZXIgPSBuZXcgXEluaVBhcnNlcignc2FtcGxlLmluaScpOw0KICogJGNvbmZpZyA9ICRwYXJzZXItPnBhcnNlKCk7DQogKg0KICogWW91IGdldCB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToNCiAqICAgIFsNCiAqICAgICAgJ2Vudmlyb25tZW50JyA9PiAndGVzdGluZycsDQogKiAgICAgICd0ZXN0aW5nJyAgICAgPT4gWw0KICogICAgICAgICAgICAgICAgICAgICAgICAgICdkZWJ1ZycgICAgPT4gJzEnLA0KICogICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhYmFzZScgPT4gWw0KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29ubmVjdGlvbicgPT4gJ215c3FsOmhvc3Q9MTI3LjAuMC4xJywNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnICAgICAgID0+ICd0ZXN0JywNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZXJuYW1lJyAgID0+ICcnLA0KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFzc3dvcmQnICAgPT4gJycNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sDQogKiAgICAgICAgICAgICAgICAgICAgICAgICdzZWNyZXRzJyAgPT4gWycxJywgJzInLCAnMyddDQogKiAgICAgICAgICAgICAgICAgICAgICAgXSwNCiAqICAgICAgJ3N0YWdpbmcnICAgICA9PiBbDQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlYnVnJyAgICA9PiAnMScsDQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGFiYXNlJyA9PiBbDQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25uZWN0aW9uJyA9PiAnbXlzcWw6aG9zdD0xMjcuMC4wLjEnLA0KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmFtZScgICAgICAgPT4gJ3N0YWdlJywNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZXJuYW1lJyAgID0+ICdzdGFnaW5nJywNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bhc3N3b3JkJyAgID0+ICcxMjM0NScNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sDQogKiAgICAgICAgICAgICAgICAgICAgICAgICdzZWNyZXRzJyAgPT4gWycxJywgJzInLCAnMyddDQogKiAgICAgICAgICAgICAgICAgICAgICAgIF0sDQogKiAgICAgICdwcm9kdWN0aW9uJyAgPT4gWw0KICogICAgICAgICAgICAgICAgICAgICAgICAgICdkZWJ1ZycgICAgPT4gJycsDQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGFiYXNlJyA9PiBbDQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Nvbm5lY3Rpb24nID0+ICdteXNxbDpob3N0PTEyNy4wLjAuMScsDQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnICAgICAgID0+ICdwcm9kdWN0aW9uJywNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAndXNlcm5hbWUnICAgPT4gJ3Jvb3QnLA0KICogICAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzd29yZCcgICA9PiAnMTIzNDUnDQogKiAgICAgICAgICAgICAgICAgICAgICAgIF0sDQogKiAgICAgICAgICAgICAgICAgICAgICAgICdzZWNyZXRzJyAgPT4gWycxJywgJzInLCAnMyddDQogKiAgICAgIF0NCiAqICAgIF07DQogKg0KICoNCiAqIFN1cHBvcnRlZCBGZWF0dXJlcw0KICoNCiAqIC0gQXJyYXkgTGl0ZXJhbHMNCiAqDQogKiBZb3UgY2FuIGRpcmVjdGx5IGNyZWF0ZSBhcnJheXMgdXNpbmcgdGhlIHN5bnRheCBgW2EsIGIsIGNdYCBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mIGFuIGFzc2lnbm1lbnQuIEZvciBleGFtcGxlOg0KICoNCiAqIGNvbG9ycyA9IFtibHVlLCBncmVlbiwgcmVkXQ0KICoNCiAqICpOT1RFOioqIEF0IHRoZSBtb21lbnQsIHF1b3RlZCBzdHJpbmdzIGluc2lkZSBhcnJheSBsaXRlcmFscyBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvci4NCiAqDQogKiAtIERpY3Rpb25hcmllcyBhbmQgY29tcGxleCBzdHJ1Y3R1cmVzDQogKg0KICogQmVzaWRlcyBhcnJheXMsIHlvdSBjYW4gY3JlYXRlIGRpY3Rpb25hcmllcyBhbmQgbW9yZSBjb21wbGV4IHN0cnVjdHVyZXMgdXNpbmcgSlNPTiBzeW50YXguIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZToNCiAqDQogKiBwZW9wbGUgPSAnew0KICogICAgICAgICAgICAgImJvc3MiOiB7DQogKiAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiSm9obiIsDQogKiAgICAgICAgICAgICAgICAgICAgICAgImFnZSI6IDQyDQogKiAgICAgICAgICAgICAgICAgICAgIH0sDQogKiAgICAgICAgICAgICJzdGFmZiI6IFsNCiAqICAgICAgICAgICAgICAgICAgICAgIHsNCiAqICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiTWFyayIsDQogKiAgICAgICAgICAgICAgICAgICAgICAgICJhZ2UiOiAzNQ0KICogICAgICAgICAgICAgICAgICAgICAgfSwNCiAqICAgICAgICAgICAgICAgICAgICAgIHsNCiAqICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQmlsbCIsDQogKiAgICAgICAgICAgICAgICAgICAgICAgICJhZ2UiOiA0NA0KICogICAgICAgICAgICAgICAgICAgICAgfQ0KICogICAgICAgICAgICAgICAgICAgICBdDQogKiAgICAgICAgICB9Jw0KICoNCiAqIFRoaXMgdHVybnMgaW50byBhbiBhcnJheSBsaWtlOg0KICogICAgIFsNCiAqICAgICAgJ2Jvc3MnICA9PiBbDQogKiAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAnSm9obicsDQogKiAgICAgICAgICAgICAgICAgICdhZ2UnICA9PiA0Mg0KICogICAgICAgICAgICAgICAgXSwNCiAqICAgICAnc3RhZmYnID0+IFsNCiAqICAgICAgICAgICAgICAgICAgWw0KICogICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAnTWFyaycsDQogKiAgICAgICAgICAgICAgICAgICAgJ2FnZScgID0+IDM1LA0KICogICAgICAgICAgICAgICAgICBdLA0KICogICAgICAgICAgICAgICAgICBbDQogKiAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICdCaWxsJywNCiAqICAgICAgICAgICAgICAgICAgICAnYWdlJyAgPT4gNDQsDQogKiAgICAgICAgICAgICAgICAgIF0sDQogKiAgICAgICAgICAgICAgICBdLA0KICogICAgXTsNCiAqDQogKiAqKk5PVEU6KiogIFJlbWVtYmVyIHRvIHdyYXAgdGhlIEpTT04gc3RyaW5ncyBpbiBzaW5nbGUgcXVvdGVzIGZvciBhIGNvcnJlY3QgYW5hbHlzaXMuDQogKiAgICAgICAgICAgIFRoZSBKU09OIG5hbWVzIG11c3QgYmUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcyBhbmQgdHJhaWxpbmcgY29tbWFzIGFyZSBub3QgYWxsb3dlZC4NCiAqDQogKiAtIFByb3BlcnR5IE5lc3RpbmcNCiAqDQogKiBJbmlQYXJzZXIgYWxsb3dzIHlvdSB0byB0cmVhdCBwcm9wZXJ0aWVzIGFzIGFzc29jaWF0aXZlIGFycmF5czoNCiAqDQogKiBwZXJzb24uYWdlID0gNDINCiAqIHBlcnNvbi5uYW1lLmZpcnN0ID0gSm9obg0KICogcGVyc29uLm5hbWUubGFzdCA9IERvZQ0KICoNCiAqIFRoaXMgdHVybnMgaW50byBhbiBhcnJheSBsaWtlOg0KICogWyAncGVyc29uJyA9PiBbICdhZ2UnID0+IDQyLCAgJ25hbWUnID0+IFsgJ2ZpcnN0JyA9PiAnSm9obicsICdsYXN0JyA9PiAnRG9lJ10gXSBdDQogKg0KICogLSBTZWN0aW9uIEluaGVyaXRhbmNlDQogKg0KICogSW5pUGFyc2VyIGFsbG93cyB5b3UgdG8gImluaGVyaXQiIGZyb20gb3RoZXIgc2VjdGlvbnMgKHNpbWlsYXIgdG8gT09QIGluaGVyaXRhbmNlKSwNCiAqIG1lYW5pbmcgeW91IGRvbid0IGhhdmUgdG8gY29udGludWFsbHkgcmUtZGVmaW5lIHRoZSBzYW1lIHByb3BlcnRpZXMgb3ZlciBhbmQgb3ZlciBhZ2Fpbi4NCiAqIEFzIHlvdSBjYW4gc2VlIGluIHRoZSBleGFtcGxlIGFib3ZlLCAicHJvZHVjdGlvbiIgaW5oZXJpdHMgZnJvbSAic3RhZ2luZyIsDQogKiB3aGljaCBpbiB0dXJuIGluaGVyaXRzIGZyb20gInRlc3RpbmciLg0KICoNCiAqIFlvdSBjYW4gZXZlbiBpbmhlcml0IGZyb20gbXVsdGlwbGUgcGFyZW50cywgYXMgaW4gYFtjaGlsZCA6IHAxIDogcDIgOiBwM11gLg0KICogVGhlIHByb3BlcnRpZXMgb2YgZWFjaCBwYXJlbnQgYXJlIG1lcmdlZCAgaW50byB0aGUgY2hpbGQgZnJvbSBsZWZ0IHRvIHJpZ2h0LA0KICogc28gdGhhdCB0aGUgcHJvcGVydGllcyBpbiBgcDFgIGFyZSBvdmVycmlkZGVuIGJ5IHRob3NlIGluIGBwMmAsIHRoZW4gYnkgYHAzYCwNCiAqIHRoZW4gYnkgdGhvc2UgaW4gYGNoaWxkYCBvbiB0b3Agb2YgdGhhdC4NCiAqDQogKiBEdXJpbmcgdGhlIGluaGVyaXRhbmNlIHByb2Nlc3MsDQogKiBpZiBhIGtleSBlbmRzIGluIGEgYCtgLA0KICogdGhlIG1lcmdlIGJlaGF2aW9yIGNoYW5nZXMgZnJvbSBvdmVyd3JpdGluZyB0aGUgcGFyZW50IHZhbHVlDQogKiB0byBwcmVwZW5kaW5nIHRoZSBwYXJlbnQgdmFsdWUgKG9yIGFwcGVuZGluZyB0aGUgY2hpbGQgdmFsdWUgLSBzYW1lIHRoaW5nKS4NCiAqIFNvIHRoZSBleGFtcGxlIGZpbGUNCiAqDQogKiBbcGFyZW50XQ0KICogYXJyID0gW2EsYixjXQ0KICogdmFsID0gZm9vDQogKg0KICogW2NoaWxkIDogcGFyZW50XQ0KICogYXJyICs9IFt4LHksel0NCiAqIHZhbCArPSBiYXINCiAqDQogKiB3b3VsZCBiZSBwYXJzZWQgaW50byB0aGUgZm9sbG93aW5nOg0KICoNCiAqIFsncGFyZW50JyA9PiBbJ2FycicgPT4gWydhJywnYicsJ2MnXSwgJ3ZhbCcgPT4gJ2ZvbyddLA0KICogICdjaGlsZCcgPT4gWyBhcnInID0+IFsnYScsJ2InLCdjJywneCcsJ3knLCd6J10sICd2YWwnID0+ICdmb29iYXInXQ0KICogXQ0KICoNCiAqIEZpbmFsbHksIGl0IGlzIHBvc3NpYmxlIHRvIGluaGVyaXQgZnJvbSB0aGUgc3BlY2lhbCBgXmAgc2VjdGlvbiwgcmVwcmVzZW50aW5nIHRoZSB0b3AtbGV2ZWwgb3IgZ2xvYmFsIHByb3BlcnRpZXM6DQogKg0KICogZm9vID0gYmFyDQogKg0KICogW3NlY3QgOiBeXQ0KICoNCiAqIFBhcnNlcyB0bzoNCiAqDQogKiBbJ2ZvbycgPT4gJ2JhcicsDQogKiAnc2VjdCcgPT4gWydmb28nID0+ICdiYXInXQ0KICogXQ0KICoNCiAqIC0gQXJyYXlPYmplY3QNCiAqDQogKiBBcyBhbiBhZGRlZCBib251cywgSW5pUGFyc2VyIGFsc28gYWxsb3dzIHlvdSB0byBhY2Nlc3MgdGhlIHZhbHVlcyBPTy1zdHlsZToNCiAqDQogKiBlY2hvICRjb25maWctPnByb2R1Y3Rpb24tPmRhdGFiYXNlLT5jb25uZWN0aW9uOyAvLyBvdXRwdXQ6IG15c3FsOmhvc3Q9MTI3LjAuMC4xDQogKiBlY2hvICRjb25maWctPnN0YWdpbmctPmRlYnVnOyAvLyBvdXRwdXQ6IDENCiAqLw0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcRlM7DQoNCi8qKg0KICogQ2xhc3MgUGFyc2VyDQogKg0KICogQHBhY2thZ2UgSW5pDQogKi8NCmNsYXNzIEV4dGVuZGVkSW5pUGFyc2VyDQp7DQogIC8qKg0KICAgKiBGaWxlbmFtZSBvZiBvdXIgLmluaSBmaWxlLg0KICAgKg0KICAgKiBAdmFyIHN0cmluZw0KICAgKi8NCiAgcHJvdGVjdGVkICRpbmlfY29udGVudDsNCiAgDQogIC8qKg0KICAgKiBFbmFibGUvZGlzYWJsZSBwcm9wZXJ0eSBuZXN0aW5nIGZlYXR1cmUNCiAgICoNCiAgICogQHZhciBib29sZWFuDQogICAqLw0KICBwdWJsaWMgJHByb3BlcnR5X25lc3RpbmcgPSBUUlVFOw0KICANCiAgLyoqDQogICAqIEVuYWJsZS9kaXNhYmxlIHBhcmFtZXRyaWMgdmFsdWUgcGFyc2luZw0KICAgKg0KICAgKiBAdmFyIGJvb2xlYW4NCiAgICovDQogIHB1YmxpYyAkcGFyYW1ldHJpY19wYXJzaW5nID0gRkFMU0U7DQogIA0KICAvKioNCiAgICogTm9ybWFsOiAwDQogICAqIFJhdzogMQ0KICAgKiBUeXBlZDogMg0KICAgKi8NCiAgcHVibGljICRpbmlfcGFyc2Vfb3B0aW9uID0gMDsNCiAgDQogIC8qKg0KICAgKiBTZXBhcmF0b3IgaW4gY2FzZSBvZiBtdWx0aXBsZSB2YWx1ZXMNCiAgICoNCiAgICogQHZhciBzdHJpbmcNCiAgICovDQogIHB1YmxpYyAkbXVsdGlfdmFsdWVfc2VwYXJhdG9yID0gJ3wnOw0KICANCiAgLyoqDQogICAqIFVzZSBBcnJheU9iamVjdCB0byBhbGxvdyBhcnJheSB3b3JrIGFzIG9iamVjdCAodHJ1ZSkgb3IgdXNlIG5hdGl2ZSBhcnJheXMgKGZhbHNlKQ0KICAgKg0KICAgKiBAdmFyIGJvb2xlYW4NCiAgICovDQogIHB1YmxpYyAkdXNlX2FycmF5X29iamVjdCA9IFRSVUU7DQogIA0KICAvKioNCiAgICogSW5jbHVkZSBvcmlnaW5hbCBzZWN0aW9ucyAocHJlLWluaGVyaXQgbmFtZXMpIG9uIHRoZSBmaW5hbCBvdXRwdXQNCiAgICoNCiAgICogQHZhciBib29sZWFuDQogICAqLw0KICBwdWJsaWMgJGluY2x1ZGVfb3JpZ2luYWxfc2VjdGlvbnMgPSBGQUxTRTsNCiAgDQogIC8qKg0KICAgKiBJZiBzZXQgdG8gdHJ1ZSwgaXQgd2lsbCBjb25zaWRlciB0aGUgcGFzc2VkIHBhcmFtZXRlciBhcyBzdHJpbmcNCiAgICoNCiAgICogQHZhciBib29sDQogICAqLw0KICBwdWJsaWMgJHRyZWF0X2luaV9zdHJpbmcgPSBGQUxTRTsNCiAgDQogIC8qKg0KICAgKiBEaXNhYmxlIGFycmF5IGxpdGVyYWwgcGFyc2luZw0KICAgKi8NCiAgY29uc3QgTk9fUEFSU0UgPSAwOw0KICANCiAgLyoqDQogICAqIFBhcnNlIHNpbXBsZSBhcnJheXMgdXNpbmcgcmVnZXggKGV4OiBbYSxiLGMsLi4uXSkNCiAgICovDQogIGNvbnN0IFBBUlNFX1NJTVBMRSA9IDE7DQogIA0KICAvKioNCiAgICogUGFyc2UgYXJyYXkgbGl0ZXJhbHMgdXNpbmcgSlNPTiwgYWxsb3dpbmcgYWR2YW5jZWQgZmVhdHVyZXMgbGlrZQ0KICAgKiBkaWN0aW9uYXJpZXMsIGFycmF5IG5lc3RpbmcsIGV0Yy4NCiAgICovDQogIGNvbnN0IFBBUlNFX0pTT04gPSAyOw0KICANCiAgLyoqDQogICAqIE5vcm1hbDogMA0KICAgKiBSYXc6IDENCiAgICogVHlwZWQ6IDINCiAgICovDQogIGNvbnN0IElOSV9QQVJTRV9PUFRJT04gPSAwOw0KICANCiAgLyoqDQogICAqIEFycmF5IGxpdGVyYWxzIHBhcnNlIG1vZGUNCiAgICoNCiAgICogQHZhciBpbnQNCiAgICovDQogIHB1YmxpYyAkYXJyYXlfbGl0ZXJhbHNfYmVoYXZpb3IgPSBzZWxmOjpQQVJTRV9TSU1QTEU7DQogIA0KICAvKioNCiAgICogUGFyc2VyIGNvbnN0cnVjdG9yLg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRpbmlDb250ZW50IEZpbGUgcGF0aCBvciB0aGUgaW5pIHN0cmluZw0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkaW5pQ29udGVudCA9IE5VTEwpDQogIHsNCiAgICBpZihOVUxMICE9PSAkaW5pQ29udGVudCkNCiAgICB7DQogICAgICAkdGhpcy0+c2V0SW5pQ29udGVudCgkaW5pQ29udGVudCk7DQogICAgfQ0KICB9DQogIA0KICAvKioNCiAgICogUGFyc2VzIGFuIElOSSBmaWxlDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJGluaUNvbnRlbnQNCiAgICoNCiAgICogQHJldHVybiBtaXhlZA0KICAgKiBAdGhyb3dzIFxKc29uRXhjZXB0aW9uDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gcGFyc2Uoc3RyaW5nICRpbmlDb250ZW50ID0gTlVMTCkNCiAgew0KICAgIGlmKE5VTEwgIT09ICRpbmlDb250ZW50KSB7ICR0aGlzLT5zZXRJbmlDb250ZW50KCRpbmlDb250ZW50KTsgfQ0KICAgIA0KICAgIGlmKGVtcHR5KCR0aGlzLT5pbmlfY29udGVudCkpDQogICAgew0KICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignTmVlZCBpbmkgY29udGVudCB0byBwYXJzZS4nKTsNCiAgICB9DQogICAgDQogICAgaWYoJHRoaXMtPnRyZWF0X2luaV9zdHJpbmcpDQogICAgew0KICAgICAgJHNpbXBsZV9wYXJzZWQgPSBccGFyc2VfaW5pX3N0cmluZygkdGhpcy0+aW5pX2NvbnRlbnQsIFRSVUUsICR0aGlzLT5pbmlfcGFyc2Vfb3B0aW9uKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICRzaW1wbGVfcGFyc2VkID0gXHBhcnNlX2luaV9maWxlKCR0aGlzLT5pbmlfY29udGVudCwgVFJVRSwgJHRoaXMtPmluaV9wYXJzZV9vcHRpb24pOw0KICAgIH0NCiAgICANCiAgICAkaW5oZXJpdGFuY2VfcGFyc2VkID0gJHRoaXMtPnBhcnNlU2VjdGlvbnMoJHNpbXBsZV9wYXJzZWQpOw0KICAgIA0KICAgIHJldHVybiAkdGhpcy0+cGFyc2VLZXlzKCRpbmhlcml0YW5jZV9wYXJzZWQpOw0KICB9DQogIA0KICAvKioNCiAgICogUGFyc2VzIGEgc3RyaW5nIHdpdGggSU5JIGNvbnRlbnRzDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJHNyYw0KICAgKg0KICAgKiBAcmV0dXJuIGFycmF5DQogICAqIEB0aHJvd3MgXEpzb25FeGNlcHRpb24NCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBwcm9jZXNzKHN0cmluZyAkc3JjKQ0KICB7DQogICAgJHNpbXBsZV9wYXJzZWQgICAgICA9IFxwYXJzZV9pbmlfc3RyaW5nKCRzcmMsIFRSVUUsICR0aGlzLT5pbmlfcGFyc2Vfb3B0aW9uKTsNCiAgICAkaW5oZXJpdGFuY2VfcGFyc2VkID0gJHRoaXMtPnBhcnNlU2VjdGlvbnMoJHNpbXBsZV9wYXJzZWQpOw0KICAgIA0KICAgIHJldHVybiAkdGhpcy0+cGFyc2VLZXlzKCRpbmhlcml0YW5jZV9wYXJzZWQpOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtIHN0cmluZyAkaW5pX2NvbnRlbnQNCiAgICoNCiAgICogQHJldHVybiBcQ01TTVNFeHRcRlNcRXh0ZW5kZWRJbmlQYXJzZXINCiAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gc2V0SW5pQ29udGVudChzdHJpbmcgJGluaV9jb250ZW50KQ0KICB7DQogICAgLy8gSWYgdGhlIHBhcnNlZCBwYXJhbWV0ZXIgaXMgdG8gYmUgdHJlYXRlZCBhcyBzdHJpbmcgaW5zdGVhZCBvZiBmaWxlDQogICAgaWYoJHRoaXMtPnRyZWF0X2luaV9zdHJpbmcpDQogICAgew0KICAgICAgJHRoaXMtPmluaV9jb250ZW50ID0gJGluaV9jb250ZW50Ow0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgaWYoIVxmaWxlX2V4aXN0cygkaW5pX2NvbnRlbnQpIHx8ICFcaXNfcmVhZGFibGUoJGluaV9jb250ZW50KSkNCiAgICAgIHsNCiAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIlRoZSBmaWxlICd7JGluaV9jb250ZW50fScgY2Fubm90IGJlIG9wZW5lZC4iKTsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgJHRoaXMtPmluaV9jb250ZW50ID0gJGluaV9jb250ZW50Ow0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIC8qKg0KICAgKiBQYXJzZSBzZWN0aW9ucyBhbmQgaW5oZXJpdGFuY2UuDQogICAqDQogICAqIEBwYXJhbSBhcnJheSAkc2ltcGxlX3BhcnNlZA0KICAgKg0KICAgKiBAcmV0dXJuIGFycmF5ICBQYXJzZWQgc2VjdGlvbnMNCiAgICovDQogIHByaXZhdGUgZnVuY3Rpb24gcGFyc2VTZWN0aW9ucyhhcnJheSAkc2ltcGxlX3BhcnNlZCkNCiAgew0KICAgIC8vIGRvIGFuIGluaXRpYWwgcGFzcyB0byBnYXRoZXIgc2VjdGlvbiBuYW1lcw0KICAgICRzZWN0aW9ucyA9IFtdOw0KICAgICRnbG9iYWxzICA9IFtdOw0KICAgIGZvcmVhY2goJHNpbXBsZV9wYXJzZWQgYXMgJGsgPT4gJHYpDQogICAgew0KICAgICAgaWYoXGlzX2FycmF5KCR2KSkNCiAgICAgIHsNCiAgICAgICAgLy8gJGsgaXMgYSBzZWN0aW9uIG5hbWUNCiAgICAgICAgJHNlY3Rpb25zWyRrXSA9ICR2Ow0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAkZ2xvYmFsc1ska10gPSAkdjsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgLy8gbm93IGZvciBlYWNoIHNlY3Rpb24sIHNlZSBpZiBpdCB1c2VzIGluaGVyaXRhbmNlDQogICAgJG91dHB1dF9zZWN0aW9ucyA9IFtdOw0KICAgIGZvcmVhY2goJHNlY3Rpb25zIGFzICRrID0+ICR2KQ0KICAgIHsNCiAgICAgICRzZWN0cyA9IFxhcnJheV9tYXAoJ1x0cmltJywgXGFycmF5X3JldmVyc2UoXGV4cGxvZGUoJzonLCAkaykpKTsNCiAgICAgICRyb290ICA9IFxhcnJheV9wb3AoJHNlY3RzKTsNCiAgICAgICRhcnIgICA9ICR2Ow0KICAgICAgDQogICAgICBmb3JlYWNoKCRzZWN0cyBhcyAkcykNCiAgICAgIHsNCiAgICAgICAgaWYoJ14nID09PSAkcykNCiAgICAgICAgew0KICAgICAgICAgICRhcnIgPSBcYXJyYXlfbWVyZ2UoJGdsb2JhbHMsICRhcnIpOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYoXGFycmF5X2tleV9leGlzdHMoJHMsICRvdXRwdXRfc2VjdGlvbnMpKQ0KICAgICAgICB7DQogICAgICAgICAgJGFyciA9IFxhcnJheV9tZXJnZSgkb3V0cHV0X3NlY3Rpb25zWyRzXSwgJGFycik7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZihcYXJyYXlfa2V5X2V4aXN0cygkcywgJHNlY3Rpb25zKSkNCiAgICAgICAgew0KICAgICAgICAgICRhcnIgPSBcYXJyYXlfbWVyZ2UoJHNlY3Rpb25zWyRzXSwgJGFycik7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgdGhyb3cgbmV3IFxVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oDQogICAgICAgICAgICAiSW5pUGFyc2VyOiBJbiBmaWxlICd7JHRoaXMtPmluaV9jb250ZW50fScsIHNlY3Rpb24gJ3skcm9vdH0nOiBDYW5ub3QgaW5oZXJpdCBmcm9tIHVua25vd24gc2VjdGlvbiAneyRzfSciDQogICAgICAgICAgKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgDQogICAgICBpZigkdGhpcy0+aW5jbHVkZV9vcmlnaW5hbF9zZWN0aW9ucykNCiAgICAgIHsNCiAgICAgICAgJG91dHB1dF9zZWN0aW9uc1ska10gPSAkdjsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgJG91dHB1dF9zZWN0aW9uc1skcm9vdF0gPSAkYXJyOw0KICAgIH0NCiAgICANCiAgICANCiAgICByZXR1cm4gJGdsb2JhbHMgKyAkb3V0cHV0X3NlY3Rpb25zOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtIGFycmF5ICRhcnINCiAgICoNCiAgICogQHJldHVybiBtaXhlZA0KICAgKiBAdGhyb3dzIFxKc29uRXhjZXB0aW9uDQogICAqLw0KICBwcml2YXRlIGZ1bmN0aW9uIHBhcnNlS2V5cyhhcnJheSAkYXJyKQ0KICB7DQogICAgJG91dHB1dCAgICAgICA9ICR0aGlzLT5nZXRBcnJheVZhbHVlKCk7DQogICAgJGFwcGVuZF9yZWdleCA9ICcvXHMqXCtccyokLyc7DQogICAgZm9yZWFjaCgkYXJyIGFzICRrID0+ICR2KQ0KICAgIHsNCiAgICAgIGlmKFxpc19hcnJheSgkdikgJiYgRkFMU0UgPT09IFxzdHJwb3MoJGssICcuJykpDQogICAgICB7DQogICAgICAgIC8vIHRoaXMgZWxlbWVudCByZXByZXNlbnRzIGEgc2VjdGlvbjsgcmVjdXJzaXZlbHkgcGFyc2UgdGhlIHZhbHVlDQogICAgICAgICRvdXRwdXRbJGtdID0gJHRoaXMtPnBhcnNlS2V5cygkdik7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgIC8vIGlmIHRoZSBrZXkgZW5kcyBpbiBhICssIGl0IG1lYW5zIHdlIHNob3VsZCBhcHBlbmQgdG8gdGhlIHByZXZpb3VzIHZhbHVlLCBpZiBhcHBsaWNhYmxlDQogICAgICAgICRhcHBlbmQgPSBGQUxTRTsNCiAgICAgICAgaWYoXHByZWdfbWF0Y2goJGFwcGVuZF9yZWdleCwgJGspKQ0KICAgICAgICB7DQogICAgICAgICAgJGsgICAgICA9IFxwcmVnX3JlcGxhY2UoJGFwcGVuZF9yZWdleCwgJycsICRrKTsNCiAgICAgICAgICAkYXBwZW5kID0gVFJVRTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8gdHJhbnNmb3JtICJhLmIuYyA9IHgiIGludG8gJG91dHB1dFthXVtiXVtjXSA9IHgNCiAgICAgICAgJGN1cnJlbnQgPSAmJG91dHB1dDsNCiAgICAgICAgDQogICAgICAgICRwYXRoID0gJHRoaXMtPnByb3BlcnR5X25lc3RpbmcgPyBcZXhwbG9kZSgnLicsICRrKSA6IFska107DQogICAgICAgIHdoaWxlKE5VTEwgIT09ICgkY3VycmVudF9rZXkgPSBcYXJyYXlfc2hpZnQoJHBhdGgpKSkNCiAgICAgICAgew0KICAgICAgICAgIGlmKFxpc19zdHJpbmcoJGN1cnJlbnQpKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICRjdXJyZW50ID0gWyRjdXJyZW50XTsNCiAgICAgICAgICB9DQogICAgICAgICAgDQogICAgICAgICAgaWYoXGlzX2FycmF5KCRjdXJyZW50KSAmJiAhXGFycmF5X2tleV9leGlzdHMoJGN1cnJlbnRfa2V5LCAkY3VycmVudCkpDQogICAgICAgICAgew0KICAgICAgICAgICAgaWYoIWVtcHR5KCRwYXRoKSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgJGN1cnJlbnRbJGN1cnJlbnRfa2V5XSA9ICR0aGlzLT5nZXRBcnJheVZhbHVlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICRjdXJyZW50WyRjdXJyZW50X2tleV0gPSBOVUxMOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICANCiAgICAgICAgICAkY3VycmVudCA9ICYkY3VycmVudFskY3VycmVudF9rZXldOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLyBwYXJzZSB2YWx1ZQ0KICAgICAgICAkdmFsdWUgPSAkdjsNCiAgICAgICAgaWYoIVxpc19hcnJheSgkdikpDQogICAgICAgIHsNCiAgICAgICAgICAkdmFsdWUgPSAkdGhpcy0+cGFyc2VWYWx1ZSgkdik7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGlmKCRhcHBlbmQgJiYgTlVMTCAhPT0gJGN1cnJlbnQpDQogICAgICAgIHsNCiAgICAgICAgICBpZihcaXNfYXJyYXkoJHZhbHVlKSkNCiAgICAgICAgICB7DQogICAgICAgICAgICBpZighXGlzX2FycmF5KCRjdXJyZW50KSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiQ2Fubm90IGFwcGVuZCBhcnJheSB0byBpbmhlcml0ZWQgdmFsdWUgJ3ska30nIik7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdmFsdWUgPSBhcnJheV9tZXJnZSgkY3VycmVudCwgJHZhbHVlKTsNCiAgICAgICAgICAgICR2YWx1ZSA9IFxhcnJheV9tYXAoWyR0aGlzLCAncGFyc2VQYXJhbWV0cmljVmFsdWUnXSwgJHZhbHVlKTsNCiAgICAgICAgICB9DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICR2YWx1ZSA9ICRjdXJyZW50IC4gJHZhbHVlOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgJGN1cnJlbnQgPSAkdGhpcy0+cGFyc2VQYXJhbWV0cmljVmFsdWUoJHZhbHVlKTsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgcmV0dXJuICRvdXRwdXQ7DQogIH0NCiAgDQogIC8qKg0KICAgKiBQYXJzZXMgdGhlIHBhcmFtZXRyaWMgdmFsdWUgdG8gbXVsdGlwbGUgcGFyYW1ldGVycw0KICAgKg0KICAgKiBAcGFyYW0gJHZhbHVlDQogICAqIC8vIHRvZG8gaXMgYXJyYXkgb3Igc3RyaW5nPw0KICAgKg0KICAgKiBAcmV0dXJuIGFycmF5fHN0cmluZw0KICAgKi8NCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIHBhcnNlUGFyYW1ldHJpY1ZhbHVlKCR2YWx1ZSkNCiAgew0KICAgIC8vIElmIHBhcmFtZXRyaWMgcGFyc2luZyBpc24ndCB0dXJuZWQgb24gb3IgdmFsdWUgaGFzIG5vIHBhcmFtZXRlcnMNCiAgICBpZighJHRoaXMtPnBhcmFtZXRyaWNfcGFyc2luZyB8fCAhXGlzX3N0cmluZygkdmFsdWUpIHx8IEZBTFNFID09PSBcc3RycG9zKCR2YWx1ZSwgJz0nKSkNCiAgICB7DQogICAgICByZXR1cm4gJHZhbHVlOw0KICAgIH0NCiAgICANCiAgICAvLyBBcyB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBwYXJhbWV0ZXJzIHNlcGFyYXRlZCBieSBzcGFjZXMNCiAgICAkcGFyYW1ldGVycyA9IFxwcmVnX3NwbGl0KCcvXHMrLycsICR2YWx1ZSk7DQogICAgDQogICAgJHBhcnNlZFZhbHVlID0gW107DQogICAgZm9yZWFjaCgkcGFyYW1ldGVycyBhcyAkcGFyYW1ldGVyKQ0KICAgIHsNCiAgICAgIFskcGFyYW1ldGVyS2V5LCAkcGFyYW1ldGVyVmFsdWVdID0gXGV4cGxvZGUoJz0nLCAkcGFyYW1ldGVyKTsNCiAgICAgIC8vIHRvZG8gc2ltcGxpZnkNCiAgICAgICRwYXJzZWRWYWx1ZVskcGFyYW1ldGVyS2V5XSA9IEZBTFNFICE9PSBcc3RycG9zKCRwYXJhbWV0ZXJWYWx1ZSwgJHRoaXMtPm11bHRpX3ZhbHVlX3NlcGFyYXRvcikgPyBcZXhwbG9kZSgNCiAgICAgICAgJHRoaXMtPm11bHRpX3ZhbHVlX3NlcGFyYXRvciwgJHBhcmFtZXRlclZhbHVlDQogICAgICApIDogJHBhcmFtZXRlclZhbHVlOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHBhcnNlZFZhbHVlOw0KICB9DQogIA0KICAvKioNCiAgICogUGFyc2VzIGFuZCBmb3JtYXRzIHRoZSB2YWx1ZSBpbiBhIGtleS12YWx1ZSBwYWlyDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlDQogICAqDQogICAqIEByZXR1cm4gbWl4ZWQNCiAgICogQHRocm93cyBcSnNvbkV4Y2VwdGlvbg0KICAgKi8NCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIHBhcnNlVmFsdWUoc3RyaW5nICR2YWx1ZSkNCiAgew0KICAgIHN3aXRjaCgkdGhpcy0+YXJyYXlfbGl0ZXJhbHNfYmVoYXZpb3IpDQogICAgew0KICAgICAgY2FzZSBzZWxmOjpQQVJTRV9KU09OOg0KICAgICAgICBpZihcaW5fYXJyYXkoJHZhbHVlWzBdLCBbJ1snLCAneyddKSAmJiBcaW5fYXJyYXkoXHN1YnN0cigkdmFsdWUsIC0xKSwgWyddJywgJ30nXSkpDQogICAgICAgIHsNCiAgICAgICAgICBpZihcZGVmaW5lZCgnSlNPTl9CSUdJTlRfQVNfU1RSSU5HJykpDQogICAgICAgICAgew0KICAgICAgICAgICAgJG91dHB1dCA9IFxqc29uX2RlY29kZSgkdmFsdWUsIFRSVUUsIDUxMiwgXEpTT05fVEhST1dfT05fRVJST1IgfCBcSlNPTl9CSUdJTlRfQVNfU1RSSU5HKTsNCiAgICAgICAgICB9DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICRvdXRwdXQgPSBcanNvbl9kZWNvZGUoJHZhbHVlLCBUUlVFLCA1MTIsIFxKU09OX1RIUk9XX09OX0VSUk9SKTsNCiAgICAgICAgICB9DQogICAgICAgICAgDQogICAgICAgICAgaWYoTlVMTCAhPT0gJG91dHB1dCkgeyByZXR1cm4gJG91dHB1dDsgfQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgLy8gZmFsbHRocm91Z2gNCiAgICAgIC8vIHRyeSByZWdleCBwYXJzZXIgZm9yIHNpbXBsZSBzdHJ1Y3R1cmVzIG5vdCBKU09OLWNvbXBhdGlibGUgKGV4OiBjb2xvcnMgPSBbYmx1ZSwgZ3JlZW4sIHJlZF0pDQogICAgICBjYXNlIHNlbGY6OlBBUlNFX1NJTVBMRToNCiAgICAgICAgLy8gaWYgdGhlIHZhbHVlIGxvb2tzIGxpa2UgW2EsYixjLC4uLl0sIGludGVycHJldCBhcyBhcnJheQ0KICAgICAgICBpZihccHJlZ19tYXRjaCgnL15cW1xzKi4qPyg/OlxzKixccyouKj8pKlxzKl0kLycsIFx0cmltKCR2YWx1ZSkpKQ0KICAgICAgICB7DQogICAgICAgICAgcmV0dXJuIFxhcnJheV9tYXAoJ1x0cmltJywgXGV4cGxvZGUoJywnLCBcdHJpbShcdHJpbSgkdmFsdWUpLCAnW10nKSkpOw0KICAgICAgICB9DQogICAgICBicmVhazsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICR2YWx1ZTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSBhcnJheSAkYXJyYXkNCiAgICoNCiAgICogQHJldHVybiBcQXJyYXlPYmplY3R8YXJyYXkNCiAgICovDQogIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRBcnJheVZhbHVlKGFycmF5ICRhcnJheSA9IFtdKQ0KICB7DQogICAgaWYoJHRoaXMtPnVzZV9hcnJheV9vYmplY3QpDQogICAgew0KICAgICAgcmV0dXJuIG5ldyBcQXJyYXlPYmplY3QoJGFycmF5LCBcQXJyYXlPYmplY3Q6OkFSUkFZX0FTX1BST1BTKTsNCiAgICB9DQogIA0KICAgIHJldHVybiAkYXJyYXk7DQogIH0NCn0NCg==]]></data>
	</file>
	<file>
	  <filename>/lib/FS/class.File.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcRlM7DQoNCnVzZSBDTVNNU0V4dFxkYmdcZGJnOw0KDQovKioNCiAqIENsYXNzIEZpbGUNCiAqDQogKiBAbm90ZTogV0lQDQogKiBAcGFja2FnZSBDTVNNU0V4dFxGUw0KICovDQpjbGFzcyBGaWxlDQp7DQogIHByb3RlY3RlZCAkX2ZuID0gJyc7DQogIHByb3RlY3RlZCAkX2xpbmVzID0gW107DQogIHByb3RlY3RlZCAkX2ZsYWdzID0gXExPQ0tfRVg7DQogIA0KICAvKioNCiAgICogQ29uZm9ybSB0aGUgcGF0aCBhbmQgZmlsZW5hbWUNCiAgICogdG8gdW5peCBzdHlsZSBzbGFzaGVzDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJGZuDQogICAqDQogICAqIEByZXR1cm4gc3RyaW5nfHN0cmluZ1tdfG51bGwNCiAgICovDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfY29uZm9ybV9mbihzdHJpbmcgJGZuID0gJycpDQogIHsNCiAgICBpZiggZW1wdHkoJGZuKSApIHsgJGZuID0gJHRoaXMtPl9mbjsgfQ0KICAgIA0KICAgICMgZWl0aGVyIE1TIG9yIG90aGVyIE9TIHVzZXMgZm9yd2FyZCBzbGFzaGVzIGZvciBwYXRocw0KICAgICMgc28gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkb3VibGVzIG9yIG1peGVkIHNsYXNoZXMNCiAgICAkZm4gPSBcc3RyX3JlcGxhY2UoIlxcIiwgJy8nLCAkZm4gKTsNCiAgICAkZm4gPSBccHJlZ19yZXBsYWNlKCcvXC9cLysvJywgJy8nLCAkZm4gKTsNCiAgDQogICAgaWYoIGVtcHR5KCRmbikgKSB7ICR0aGlzLT5fZm4gPSAkZm47IH0NCiAgICANCiAgICByZXR1cm4gJGZuOw0KICB9DQogIA0KICAvKioNCiAgICogbG9hZHMgdGhlIGZpbGUgdG8gdGhlIGludGVybmFsIGxpbmVzIGJ1ZmZlciBhcnJheQ0KICAgKiBpZiB0aGUgbG9hZGluZyBmYWlscyBpdCBhdXRvbWF0aWNhbGx5IHJlc2V0cyB0aGUgYnVmZmVyDQogICAqIHRvIHByZXZlbnQgaXQgYmVpbmcgb3RoZXIgdGhhbiBhbiBhcnJheQ0KICAgKi8NCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9sb2FkKCkNCiAgew0KICAgICMgdGhpcyBpcyBkZXByZWNhdGVkIGluIFBIUCA4LjEsIHNvIHdlJ2xsIGdldCByaWQgb2YgaXQgc29vbg0KICAgIGlmKCBcdmVyc2lvbl9jb21wYXJlKFxQSFBfVkVSU0lPTiwgJzguMS4wJykgPCAwICkNCiAgICB7DQogICAgICAkb2xkID0gXGluaV9nZXQoJ2F1dG9fZGV0ZWN0X2xpbmVfZW5kaW5ncycpOw0KICAgICAgXGluaV9zZXQoJ2F1dG9fZGV0ZWN0X2xpbmVfZW5kaW5ncycsIFRSVUUpOw0KICAgICAgJHRoaXMtPl9saW5lcyA9IFxmaWxlKCR0aGlzLT5fZm4sIFxGSUxFX0lHTk9SRV9ORVdfTElORVMpOw0KICAgICAgXGluaV9zZXQoJ2F1dG9fZGV0ZWN0X2xpbmVfZW5kaW5ncycsICRvbGQpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJHRoaXMtPl9saW5lcyA9IFxmaWxlKCR0aGlzLT5fZm4sIFxGSUxFX0lHTk9SRV9ORVdfTElORVMpOw0KICAgIH0NCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICANCiAgICBpZihGQUxTRSA9PT0gJHRoaXMtPl9saW5lcykgeyAkdGhpcy0+X3Jlc2V0KCk7IH0NCiAgfQ0KICANCiAgLyoqDQogICAqIHJlc2V0cyB0aGUgaW50ZXJuYWwgbGluZXMgYnVmZmVyIGFycmF5DQogICAqLw0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3Jlc2V0KCkNCiAgew0KICAgICR0aGlzLT5fbGluZXMgPSBbXTsNCiAgfQ0KICANCiAgLyoqDQogICAqIHB1YmxpYyBtZXRob2RzDQogICAqLw0KICANCiAgLyoqDQogICAqIEZpbGUgY29uc3RydWN0b3IuDQogICAqIEdpdmVuIGEgdmFsaWQgZmlsZW5hbWUNCiAgICogaXQgbG9hZHMgYSBmaWxlIGFzIGFuIGFycmF5IG9mIGxpbmVzDQogICAqIHRvIHRoZSBpbnRlcm5hbCBidWZmZXINCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkZmlsZV9uYW1lDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRmaWxlX25hbWUgPSAnJykNCiAgew0KICAgICR0aGlzLT5zZXRGaWxlTmFtZSgkZmlsZV9uYW1lKTsNCiAgICAkdGhpcy0+X2NvbmZvcm1fZm4oKTsNCiAgICAkdGhpcy0+X2xvYWQoKTsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIGFwcGVuZCgkZGF0YSkNCiAgew0KICAgIGlmKCBpc3NldCgkZGF0YSkgKQ0KICAgIHsNCiAgICAgIGlmKCBcaXNfc3RyaW5nKCRkYXRhKSApDQogICAgICB7DQogICAgICAgICR0ID0gXGV4cGxvZGUoUEhQX0VPTCwgJGRhdGEpOw0KICAgICAgICANCiAgICAgICAgaWYoICFlbXB0eSgkdCkgKQ0KICAgICAgICB7DQogICAgICAgICAgJHRoaXMtPl9saW5lcyA9IFsuLi4kdGhpcy0+X2xpbmVzLCAuLi4kdF07DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGVsc2VpZihcaXNfYXJyYXkoJGRhdGEpICkNCiAgICAgIHsNCiAgICAgICAgJHRoaXMtPl9saW5lcyA9IFsuLi4kdGhpcy0+X2xpbmVzLCAuLi4kZGF0YV07DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgICR0aGlzLT5fbGluZXNbXSA9IFsuLi4kdGhpcy0+X2xpbmVzLCAuLi5bKGFycmF5KSRkYXRhXV07DQogICAgICB9DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KICANCiAgLyoqDQogICAqIHJldHVybnMgdGhlIGJ1ZmZlciBhcyBhIHN0cmluZw0KICAgKiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gZ2V0IHRoZSBFT0xzIHJpZ2h0DQogICAqIEByZXR1cm4gc3RyaW5nDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpDQogIHsNCiAgICByZXR1cm4gJHRoaXMtPnJlYWQoKTsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIHNldEZpbGVOYW1lKHN0cmluZyAkZmlsZV9uYW1lID0gJycpDQogIHsNCiAgICAkdGhpcy0+X2ZuID0gJGZpbGVfbmFtZTsNCiAgfQ0KICANCiAgLyoqDQogICAqIHJldHVybnMgdGhlIGJ1ZmZlciBhcyBhIHN0cmluZw0KICAgKiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gZ2V0IHRoZSBFT0xzIHJpZ2h0DQogICAqIEByZXR1cm4gc3RyaW5nDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gcmVhZCgpIDogc3RyaW5nDQogIHsNCiAgICByZXR1cm4gXGltcGxvZGUoUEhQX0VPTCwgJHRoaXMtPl9saW5lcyk7DQogIH0NCiAgDQogIC8qKg0KICAgKiByZXNldHMgYW5kIHJlbG9hZHMgdGhlIGZpbGUNCiAgICogZnJvbSB0aGUgZmlsZSBuYW1lIGdpdmVuDQogICAqIG9uIHRoZSBjb25zdHJ1Y3Rvcg0KICAgKg0KICAgKiBAcmV0dXJuICR0aGlzDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gcmVsb2FkKCkNCiAgew0KICAgICR0aGlzLT5fcmVzZXQoKTsNCiAgICAkdGhpcy0+X2xvYWQoKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIC8qKg0KICAgKiBnaXZlbiBhbiBhcnJheSBvZiBsaW5lcw0KICAgKiByZXBsYWNlcyB0aGUgaW50ZXJuYWwgbGluZXMgYnVmZmVyIGFycmF5DQogICAqIHdpdGggaXQNCiAgICoNCiAgICogQHBhcmFtIGFycmF5ICRsaW5lcw0KICAgKg0KICAgKiBAcmV0dXJuICR0aGlzDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gZnJvbUFycmF5KGFycmF5ICRsaW5lcyA9IFtdKQ0KICB7DQogICAgJHRoaXMtPl9saW5lcyA9ICRsaW5lczsNCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIC8qKg0KICAgKiBnaXZlbiBhIHN0cmluZyBvZiB0ZXh0DQogICAqIHJlcGxhY2VzIHRoZSBpbnRlcm5hbCBsaW5lcyBidWZmZXIgYXJyYXkNCiAgICogd2l0aCB0aGUgYXJyYXkgcmVzdWx0aW5nIG9mIHRoZSBhdHRlbXB0DQogICAqIHRvIHNwbGl0IHRoZSBsaW5lcyBieSBhIHZhbGlkIEVPTCBjaGFyYWN0ZXINCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nDQogICAqIEBwYXJhbSBzdHJpbmcgJGVvbA0KICAgKg0KICAgKiBAcmV0dXJuICR0aGlzDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gZnJvbVN0cmluZyhzdHJpbmcgJHN0cmluZyA9ICcnLCBzdHJpbmcgJGVvbCA9IFBIUF9FT0wpDQogIHsNCiAgICAkdGhpcy0+X2xpbmVzID0gXGV4cGxvZGUoJGVvbCwgJHN0cmluZyk7DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICAvKioNCiAgICogc2F2ZXMgdGhlIGludGVybmFsIGxpbmVzIGJ1ZmZlciBhcnJheQ0KICAgKiBhcyBhIHRleHQgZmlsZSB0byB0aGUgZmlsZW5hbWUgZ2l2ZW4gb24gY3JlYXRpb24NCiAgICogb3Igc2F2ZXMgYSBjb3B5IHRvIHRoZSBnaXZlbiBmaWxlIG5hbWUgcGFyYW1ldGVyIGlmIG5vdCBlbXB0eQ0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlX25hbWUNCiAgICoNCiAgICogQHJldHVybiAkdGhpcw0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIHNhdmUoc3RyaW5nICRmaWxlX25hbWUgPSAnJykgOiBGaWxlDQogIHsNCiAgICAkZm4gPSAkdGhpcy0+X2ZuOw0KICAgIA0KICAgIGlmKCAhZW1wdHkoJGZpbGVfbmFtZSkgKQ0KICAgIHsNCiAgICAgICRmbiA9ICR0aGlzLT5fY29uZm9ybV9mbigkZm4pOw0KICAgIH0NCiAgICANCiAgICBpZigNCiAgICAgICFcaXNfZGlyKA0KICAgICAgICAgICAgICAgICRkaXIgPSBcaW1wbG9kZSggJy8nLCBcZXhwbG9kZSgnLycsICR0aGlzLT5fZm4sIC0xKSApDQogICAgICAgICAgICAgICkNCiAgICAgICYmIEAhXG1rZGlyKCRkaXIsIDA3NzcsIFRSVUUpICYmICFcaXNfZGlyKCRkaXIpDQogICAgKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbihcc3ByaW50ZignRGlyZWN0b3J5ICIlcyIgd2FzIG5vdCBjcmVhdGVkJywgJGRpcikpOw0KICAgIH0NCiAgICANCiAgICBmaWxlX3B1dF9jb250ZW50cygkZm4sICR0aGlzLT5yZWFkKCksICR0aGlzLT5fZmxhZ3MpOw0KICAgIA0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KICANCiAgLyoqDQogICAqIENsZWFycyB0aGUgc3RhdGUgb2YgdGhlIGZpbGUgYW5kIHNhdmVzIGl0Lg0KICAgKg0KICAgKiBAcmV0dXJuICR0aGlzDQogICAqLw0KICBmdW5jdGlvbiBjbGVhcigpDQogIHsNCiAgICAkdGhpcy0+X3Jlc2V0KCk7DQogICAgJHRoaXMtPnNhdmUoKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/FS/class.INI.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcRlM7DQoNCg0KdXNlIENNU01TRXh0XEV4Y2VwdGlvbnNcRXhjZXB0aW9uOw0KdXNlIENNU01TRXh0XEV4Y2VwdGlvbnNcUnVudGltZUV4Y2VwdGlvbjsNCg0KY2xhc3MgSU5JIGV4dGVuZHMgRmlsZQ0Kew0KICBwcm90ZWN0ZWQgJF9idWZmZXIgPSBbXTsNCiAgDQogIA0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2xvYWQoKSA6IHZvaWQNCiAgew0KICAgICMgdGhpcyBpcyBkZXByZWNhdGVkIGluIFBIUCA4LjEsIHNvIHdlJ2xsIGdldCByaWQgb2YgaXQgc29vbg0KICAgIGlmKCBcdmVyc2lvbl9jb21wYXJlKFxQSFBfVkVSU0lPTiwgJzguMS4wJykgPCAwICkNCiAgICB7DQogICAgICAkb2xkID0gXGluaV9nZXQoJ2F1dG9fZGV0ZWN0X2xpbmVfZW5kaW5ncycpOw0KICAgICAgXGluaV9zZXQoJ2F1dG9fZGV0ZWN0X2xpbmVfZW5kaW5ncycsIFRSVUUpOw0KICAgICAgJHRoaXMtPl9saW5lcyA9IFxmaWxlKCR0aGlzLT5fZm4sIFxGSUxFX0lHTk9SRV9ORVdfTElORVMpOw0KICAgICAgXGluaV9zZXQoJ2F1dG9fZGV0ZWN0X2xpbmVfZW5kaW5ncycsICRvbGQpOw0KICAgIH0NCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KICAgICRzZWN0aW9uID0gJyc7DQogICAgDQogICAgZm9yZWFjaCgkdGhpcy0+X2J1ZmZlciBhcyAkbGluZSkNCiAgICB7DQogICAgICAvLyBjb21tZW50IG9yIHdoaXRlc3BhY2UNCiAgICAgIGlmKCBccHJlZ19tYXRjaCgnL15ccyooOy4qKT8kLycsICRsaW5lKSB8fCBccHJlZ19tYXRjaCgnL15ccyooIy4qKT8kLycsICRsaW5lKSAgKQ0KICAgICAgew0KICAgICAgICAkdGhpcy0+X2xpbmVzW10gPSBbJ3R5cGUnID0+ICdjb21tZW50JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhJyA9PiAkbGluZV07DQogICAgICB9DQogICAgICBlbHNlIGlmKCBccHJlZ19tYXRjaCgnL15cWyguKildLycsICRsaW5lLCAkbWF0Y2gpICkNCiAgICAgIHsNCiAgICAgICAgLy8gc2VjdGlvbg0KICAgICAgICAkc2VjdGlvbiAgICAgICAgPSAkbWF0Y2hbMV07DQogICAgICAgICR0aGlzLT5fbGluZXNbXSA9IFsndHlwZScgPT4gJ3NlY3Rpb24nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnID0+ICRsaW5lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlY3Rpb24nID0+ICRzZWN0aW9uXTsNCiAgICAgIH0NCiAgICAgIGVsc2UgaWYoIFxwcmVnX21hdGNoKCcvXlxzKiguKj8pXHMqPVxzKiguKj8pXHMqJC8nLCAkbGluZSwgJG1hdGNoKSApDQogICAgICB7DQogICAgICAgIGlmKCBccHJlZ19tYXRjaCgnL15ccyooLio/KVxbKC4qPylcXVxzKj1ccyooLio/KVxzKiQvJywgJGxpbmUsICRtYXRjaCkgKQ0KICAgICAgICB7DQogICAgICAgICAgLy8gYXJyYXlfZW50cnkNCiAgICAgICAgICAkdGhpcy0+X2xpbmVzW10gPSBbJ3R5cGUnICA9PiAnYXJyYXlfZW50cnknLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YScgPT4gJGxpbmUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZWN0aW9uJyA9PiAkc2VjdGlvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tleV9hcnJheV9uYW1lJyA9PiAkbWF0Y2hbMV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrZXlfYXJyYXlfa2V5JyA9PiAkbWF0Y2hbMl0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrZXknID0+ICRtYXRjaFsxXSAuICdbJyAgLiAkbWF0Y2hbMl0gLiAnXScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZScgPT4gJG1hdGNoWzNdDQogICAgICAgICAgXTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmKCBccHJlZ19tYXRjaCgnL15ccyooW149XSspXHMqPVxzKiguKj8pXHMqJC8nLCAkbGluZSwgJG1hdGNoKSApDQogICAgICAgIHsNCiAgICAgICAgICAvLyBlbnRyeQ0KICAgICAgICAgICR0aGlzLT5fbGluZXNbXSA9IFsndHlwZScgID0+ICdlbnRyeScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhJyA9PiAkbGluZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlY3Rpb24nID0+ICRzZWN0aW9uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2V5JyA9PiAkbWF0Y2hbMV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZScgPT4gXHRyaW0oJG1hdGNoWzJdLCAnIFxuXHJcdFx2XHgwMCJcJycpDQogICAgICAgICAgXTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAkdGhpcy0+X2J1ZmZlciA9IFtdOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtICRzZWN0aW9uDQogICAqIEBwYXJhbSAka2V5DQogICAqIEBwYXJhbSAkdmFsdWUNCiAgICovDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfc2V0KCRzZWN0aW9uLCAka2V5LCAkdmFsdWUpDQogIHsNCiAgICBmb3JlYWNoKCR0aGlzLT5fbGluZXMgYXMgJiRsaW5lKQ0KICAgIHsNCiAgICAgIGlmKCdlbnRyeScgIT09ICRsaW5lWyd0eXBlJ10pIHsgY29udGludWU7IH0NCiAgICANCiAgICAgIGlmKCRsaW5lWydzZWN0aW9uJ10gIT09ICRzZWN0aW9uKSB7IGNvbnRpbnVlOyB9DQogICAgDQogICAgICBpZigkbGluZVsna2V5J10gIT09ICRrZXkpIHsgY29udGludWU7IH0NCiAgICANCiAgICAgICRsaW5lWyd2YWx1ZSddID0gJHZhbHVlOw0KICAgICAgJGxpbmVbJ2RhdGEnXSAgPSAka2V5IC4gJyA9ICcgLiAkdmFsdWU7DQogICAgfQ0KICB9DQogIA0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3NldF9hcnJheSgkc2VjdGlvbiwgJGtleSwgJHZhbHVlKQ0KICB7DQogICAgaWYoICR0aGlzLT5faXNBc3NvYygkdmFsdWUpICkNCiAgICB7DQoNCiAgICAgIGZvcmVhY2goJGtleSBhcyAkayA9PiAkdikNCiAgICAgIHsNCiAgICAgICAgJGZsYXRfa2V5ID0gJGtleSAuICdbJyAuICRrIC4gJ10nOw0KICAgICAgICAkdGhpcy0+X3NldCgkc2VjdGlvbiwgJGZsYXRfa2V5LCAkdik7DQogICAgICB9DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICBmb3JlYWNoKCRrZXkgYXMgJHYpDQogICAgICB7DQogICAgICAgICRmbGF0X2tleSA9ICRrZXkgLiAnW10nOw0KICAgICAgICAkdGhpcy0+X3NldCgkc2VjdGlvbiwgJGZsYXRfa2V5LCAkdik7DQogICAgICB9DQogICAgfQ0KICB9DQogIA0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3NlY3Rpb25fZXhpc3RzKHN0cmluZyAkc2VjdGlvbiA9ICcnKQ0KICB7DQogICAgaWYoZW1wdHkoJHNlY3Rpb24pICkgeyByZXR1cm4gRkFMU0U7IH0NCiAgICANCiAgICBmb3JlYWNoKCR0aGlzLT5fbGluZXMgYXMgJGxpbmUpDQogICAgew0KICAgICAgaWYoJGxpbmVbJ3NlY3Rpb24nXSAhPT0gJHNlY3Rpb24pIHsgY29udGludWU7IH0NCiANCiAgICAgIHJldHVybiBUUlVFOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gRkFMU0U7DQogIH0NCiAgDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfa2V5X2V4aXN0cyhzdHJpbmcgJHNlY3Rpb24gPSAnJywgJGtleSA9ICcnKQ0KICB7DQogICAgDQogICAgZm9yZWFjaCgkdGhpcy0+X2xpbmVzIGFzICRsaW5lKQ0KICAgIHsNCiAgICAgIGlmKCRsaW5lWydzZWN0aW9uJ10gIT09ICRzZWN0aW9uKSB7IGNvbnRpbnVlOyB9DQogICAgICBpZigkbGluZVsna2V5J10gIT09ICRrZXkgJiYgJGxpbmVbJ2tleV9hcnJheV9uYW1lJ10gIT09ICRrZXkpeyBjb250aW51ZTsgfQ0KICANCiAgICAgIHJldHVybiAgVFJVRTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuIEZBTFNFOw0KICB9DQogIA0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2dldF9zZWN0aW9uX2VuZF9wb2ludGVyKCRzZWN0aW9uID0gJycpDQogIHsNCiAgICAkZm91bmQgPSBGQUxTRTsNCiAgICAkcCA9IC0xOw0KICAgICRsID0gMDsNCiAgICBmb3JlYWNoKCAkdGhpcy0+X2xpbmVzIGFzICRsaW5lKQ0KICAgIHsNCiAgICAgIGlmKCEkZm91bmQpIHskcCsrO30NCiAgICAgIGlmKCAkc2VjdGlvbiAhPT0gJGxpbmVbJ3NlY3Rpb24nXSApIHsgY29udGludWU7IH0NCiAgICAgICRmb3VuZCA9IFRSVUU7DQogICAgICAkbCsrOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJGZvdW5kID8gJHAgKyAkbCA6IC0xOw0KICB9DQogIA0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2luc2VydF9zcGxpdF9hcnJheSggJHNlY3Rpb24sICRrZXksICR2YWx1ZSkNCiAgew0KICAgICRwID0gJHRoaXMtPl9nZXRfc2VjdGlvbl9lbmRfcG9pbnRlcigkc2VjdGlvbik7DQogICAgJGxpbmVzID0gW107DQogICAgaWYoIFxpc19hcnJheSgka2V5KSApDQogICAgew0KICAgICAgaWYoICR0aGlzLT5faXNBc3NvYygkdmFsdWUpICkNCiAgICAgIHsNCiAgICAgICAgZm9yZWFjaCgka2V5IGFzICRrID0+ICR2KQ0KICAgICAgICB7DQogICAgICAgICAgJGZsYXRfa2V5ID0gJGtleSAuICdbJyAuICRrIC4gJ10nOw0KICAgICAgICAgICRsaW5lWyd2YWx1ZSddID0gJHY7DQogICAgICAgICAgJGxpbmVbJ2RhdGEnXSAgPSAkZmxhdF9rZXkgLiAnID0gJyAuICR2Ow0KICAgICAgICAgICRsaW5lc1tdID0gJGxpbmU7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgZm9yZWFjaCgka2V5IGFzICR2KQ0KICAgICAgICB7DQogICAgICAgICAgJGZsYXRfa2V5ID0gJGtleSAuICdbXSc7DQogICAgICAgICAgJGxpbmVbJ3ZhbHVlJ10gPSAkdjsNCiAgICAgICAgICAkbGluZVsnZGF0YSddICA9ICRmbGF0X2tleSAuICcgPSAnIC4gJHY7DQogICAgICAgICAgJGxpbmVzW10gPSAkbGluZTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJGxpbmVzW10gPSBbJ3R5cGUnICA9PiAnZW50cnknLA0KICAgICAgICdkYXRhJyA9PiAka2V5IC4gJyA9ICcgLiAkdmFsdWUsDQogICAgICAgJ3NlY3Rpb24nID0+ICRzZWN0aW9uLA0KICAgICAgICdrZXknID0+ICRrZXksDQogICAgICAgJ3ZhbHVlJyA9PiAkdmFsdWVdOw0KICAgIH0NCiAgICANCiAgICANCiAgICBcYXJyYXlfc3BsaWNlKCAkdGhpcy0+X2xpbmVzLCAkcCwgMCwgJGxpbmVzICk7DQogIH0NCiAgDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfaW5zZXJ0KCRzZWN0aW9uLCAka2V5LCAkdmFsdWUpDQogIHsNCiAgICAkc2VjdGlvbiA9IFx0cmltKCRzZWN0aW9uKTsNCiAgICANCiAgICBpZiggIWVtcHR5KCRzZWN0aW9uKSAmJiAhJHRoaXMtPl9zZWN0aW9uX2V4aXN0cygkc2VjdGlvbikgKQ0KICAgIHsNCiAgICAgIGlmKCBcaXNfYXJyYXkoJGtleSkgKQ0KICAgICAgew0KICAgICAgICAkdGhpcy0+X2luc2VydF9hcnJheSgkc2VjdGlvbiwgJGtleSwgJHZhbHVlKTsNCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgJHRoaXMtPl9saW5lc1tdID0gWyd0eXBlJyA9PiAnc2VjdGlvbicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YScgPT4gJ1snIC4gJHNlY3Rpb24gLiAnXScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAnc2VjdGlvbicgPT4gJHNlY3Rpb25dOw0KICANCiAgICAgICAgJHRoaXMtPl9saW5lc1tdID0gWyd0eXBlJyAgPT4gJ2VudHJ5JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhJyA9PiAka2V5IC4gJyA9ICcgLiAkdmFsdWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAnc2VjdGlvbicgPT4gJHNlY3Rpb24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAna2V5JyA9PiAka2V5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJyA9PiAkdmFsdWVdOw0KICAgICAgfQ0KDQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkdGhpcy0+X2luc2VydF9zcGxpdF9hcnJheSgkc2VjdGlvbiwgJGtleSwgJHZhbHVlKTsNCiAgICB9DQogIA0KICB9DQogIA0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2luc2VydF9hcnJheSgkc2VjdGlvbiwgJGtleSwgJHZhbHVlKQ0KICB7DQogICAgaWYoICR0aGlzLT5faXNBc3NvYygkdmFsdWUpICkNCiAgICB7DQogICAgICBmb3JlYWNoKCR2YWx1ZSBhcyAkayA9PiAkdikNCiAgICAgIHsNCiAgICAgICAgJGZsYXRfa2V5ID0gJGtleSAuICdbJyAuICRrIC4gJ10nOw0KICAgICAgICAkdGhpcy0+X2luc2VydCgkc2VjdGlvbiwgJGZsYXRfa2V5LCAkdik7DQogICAgICB9DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICBmb3JlYWNoKCR2YWx1ZSBhcyAkdikNCiAgICAgIHsNCiAgICAgICAgJGZsYXRfa2V5ID0gJGtleSAuICdbXSc7DQogICAgICAgICR0aGlzLT5faW5zZXJ0KCRzZWN0aW9uLCAkZmxhdF9rZXksICR2KTsNCiAgICAgIH0NCiAgICB9DQogIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gYXJyYXkgJGFycg0KICAgKg0KICAgKiBAcmV0dXJuIGJvb2wNCiAgICovDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfaXNBc3NvYyhhcnJheSAkYXJyKQ0KICB7DQogICAgaWYoW10gPT09ICRhcnIpIHsgcmV0dXJuIEZBTFNFOyB9DQogICAgDQogICAgcmV0dXJuIFxhcnJheV9rZXlzKCRhcnIpICE9PSBccmFuZ2UoMCwgXGNvdW50KCRhcnIpIC0gMSk7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBnZXQoJHNlY3Rpb24sICRrZXkpDQogIHsNCiAgICAkYXJyYXlfZW50cnkgPSBbXTsNCiAgICANCiAgICBmb3JlYWNoKCR0aGlzLT5fbGluZXMgYXMgJGxpbmUpDQogICAgew0KICAgICAgaWYoJ2VudHJ5JyAhPT0gJGxpbmVbJ3R5cGUnXSAmJiAnYXJyYXlfZW50cnknICE9PSAkbGluZVsndHlwZSddKSB7IGNvbnRpbnVlOyB9DQogICAgICANCiAgICAgIGlmKCRsaW5lWydzZWN0aW9uJ10gIT09ICRzZWN0aW9uKSB7IGNvbnRpbnVlOyB9DQogICAgICANCiAgICAgIGlmKCRsaW5lWydrZXknXSAhPT0gJGtleSAmJiAkbGluZVsna2V5X2FycmF5X25hbWUnXSAhPT0gJGtleSkgeyBjb250aW51ZTsgfQ0KICAgICAgDQogICAgICBpZignZW50cnknID09PSAkbGluZVsndHlwZSddKSB7IHJldHVybiAkbGluZVsndmFsdWUnXTsgfQ0KICAgICAgDQogICAgICBpZignYXJyYXlfZW50cnknID09PSAkbGluZVsndHlwZSddKQ0KICAgICAgew0KICAgICAgICBpZiggIWVtcHR5KCRsaW5lWydrZXlfYXJyYXlfa2V5J10pICkNCiAgICAgICAgew0KICAgICAgICAgICRhcnJheV9lbnRyeVskbGluZVsna2V5X2FycmF5X2tleSddXSA9ICRsaW5lWyd2YWx1ZSddOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICRhcnJheV9lbnRyeVtdID0gJGxpbmVbJ3ZhbHVlJ107DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgaWYoICFlbXB0eSgkYXJyYXlfZW50cnkpICkNCiAgICB7DQogICAgICByZXR1cm4gJGFycmF5X2VudHJ5Ow0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJyc7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBzZXQoJHNlY3Rpb24sICRrZXksICR2YWx1ZSkNCiAgew0KICAgIGlmKCAkdGhpcy0+X2tleV9leGlzdHMoJHNlY3Rpb24sICRrZXkpICkNCiAgICB7DQogICAgICBpZiggXGlzX2FycmF5KCR2YWx1ZSkgKQ0KICAgICAgew0KICAgICAgICAkdGhpcy0+X3NldF9hcnJheSgkc2VjdGlvbiwgJGtleSwgJHZhbHVlKTsNCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgJHRoaXMtPl9zZXQoJHNlY3Rpb24sICRrZXksICR2YWx1ZSk7DQogICAgICB9DQogICAgfQ0KDQogICAgIyBkb2Vzbid0IGV4aXN0DQogICAgaWYoIFxpc19hcnJheSgkdmFsdWUpICkNCiAgICB7DQogICAgICAkdGhpcy0+X2luc2VydF9hcnJheSgkc2VjdGlvbiwgJGtleSwgJHZhbHVlKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICR0aGlzLT5faW5zZXJ0KCRzZWN0aW9uLCAka2V5LCAkdmFsdWUpOw0KICAgIH0NCiAgICANCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiByZWFkKCkgOiBzdHJpbmcNCiAgew0KICAgICR0bXAgPSBbXTsNCiAgICANCiAgICBmb3JlYWNoKCR0aGlzLT5fbGluZXMgYXMgJGxpbmUpIHsgJHRtcFtdID0gJGxpbmVbJ2RhdGEnXTsgfQ0KICAgIA0KICAgIHJldHVybiBcaW1wbG9kZShQSFBfRU9MLCAkdG1wKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEB0aHJvd3MgXENNU01TRXh0XEV4Y2VwdGlvbnNcUnVudGltZUV4Y2VwdGlvbg0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIGZyb21BcnJheShhcnJheSAkYXJyYXkgPSBbXSkNCiAgew0KICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdJbnZhbGlkIG1ldGhvZCBjYWxsOiAnIC4gX19NRVRIT0RfXyk7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBzYXZlKHN0cmluZyAkZmlsZV9uYW1lID0gJycpIDogRmlsZQ0KICB7DQogICAgDQogICAgJGZuID0gJHRoaXMtPl9mbjsNCiAgICANCiAgICBpZiggIWVtcHR5KCRmaWxlX25hbWUpICkNCiAgICB7DQogICAgICAkZm4gPSAkdGhpcy0+X2NvbmZvcm1fZm4oJGZuKTsNCiAgICB9DQogICAgDQogICAgZmlsZV9wdXRfY29udGVudHMoJGZuLCAkdGhpcy0+cmVhZCgpICk7DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KfQ0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/FS/class.log.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcRlM7DQoNCg0KY2xhc3MgbG9nIGV4dGVuZHMgRmlsZQ0Kew0KICBjb25zdCBUWVBFX1RYVCA9ICd0eHQnOw0KICBjb25zdCBUWVBFX0NTViA9ICdjc3YnOw0KICANCiAgcHJpdmF0ZSAkX3R5cGVzID0gWw0KICAgIHNlbGY6OlRZUEVfVFhULA0KICAgIHNlbGY6OlRZUEVfQ1NWDQogIF07DQogIA0KICBwcml2YXRlICRfdHlwZSA9IHNlbGY6OlRZUEVfVFhUOw0KICANCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkZm4gPSAnJykNCiAgew0KICAgICR0aGlzLT5zZXRfdHlwZShzZWxmOjpUWVBFX1RYVCk7DQogICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkZm4pOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gbG9nKCRtZXNzYWdlcykNCiAgew0KICAgICRkYXRldGltZSAgICA9IFxkYXRlX2Zvcm1hdChcZGF0ZV9jcmVhdGUoKSwgJ1ktbS1kIEg6aTpzOnYnKTsNCiAgICANCiAgICBpZihcaXNfYXJyYXkoJG1lc3NhZ2VzKSkNCiAgICB7DQogICAgICAkZGF0YSA9IFtdOw0KICAgICAgZm9yZWFjaCgkbWVzc2FnZXMgYXMgJG1lc3NhZ2UpDQogICAgICB7DQogICAgICAgICRtZXNzYWdlID0gZW1wdHkoJG1lc3NhZ2UpID8gJ1tlbXB0eSBtZXNzYWdlXScgOiAkbWVzc2FnZTsNCiAgICAgICAgDQogICAgICAgIGlmKCR0aGlzLT5nZXRfdHlwZSgpID09PSBzZWxmOjpUWVBFX1RYVCkNCiAgICAgICAgew0KICAgICAgICAgICRkYXRhW10gPSAkZGF0ZXRpbWUgLiAnIDo6ICcgLiAkbWVzc2FnZTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAkZGF0YVtdID0gJyInIC4gJGRhdGV0aW1lIC4gJyIsIicgLiAkbWVzc2FnZSAuICciJzsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJG1lc3NhZ2UgICAgID0gZW1wdHkoJG1lc3NhZ2VzKSA/ICdbZW1wdHkgbWVzc2FnZV0nIDogJG1lc3NhZ2VzOw0KICAgICAgDQogICAgICBpZigkdGhpcy0+Z2V0X3R5cGUoKSA9PT0gc2VsZjo6VFlQRV9UWFQpDQogICAgICB7DQogICAgICAgICRkYXRhID0gJGRhdGV0aW1lIC4gJyA6OiAnIC4gJG1lc3NhZ2U7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgICRkYXRhID0gJyInIC4gJGRhdGV0aW1lIC4gJyIsIicgLiAkbWVzc2FnZSAuICciJzsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgJHRoaXMtPmFwcGVuZCgkZGF0YSktPnNhdmUoKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBzZXRfdHlwZShzdHJpbmcgJHR5cGUpDQogIHsNCiAgICBpZighXGluX2FycmF5KCR0eXBlLCAkdGhpcy0+X3R5cGVzKSkNCiAgICB7DQogICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBsb2cgdHlwZS4nKTsNCiAgICB9DQogICAgDQogICAgJHRoaXMtPl90eXBlID0gJHR5cGU7DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3R5cGUoKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5fdHlwZTsNCiAgfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/FS/class.Manifest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KbmFtZXNwYWNlIENNU01TRXh0XEZTOw0KDQpjbGFzcyBNYW5pZmVzdCBleHRlbmRzIEZpbGUNCnsNCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkZmlsZV9uYW1lID0gJycpDQogIHsNCiAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRmaWxlX25hbWUpOw0KICB9DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/FS/class.manifest_builder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcRlM7DQoNCnVzZSBDTVNNU0V4dFxjb3JlXEVycm9yOw0KdXNlIENNU01TRXh0XEV4Y2VwdGlvbnNcRmlsZVN5c3RlbUV4Y2VwdGlvbjsNCg0KY2xhc3MgbWFuaWZlc3RfYnVpbGRlcg0Kew0KICANCiAgdXNlIFxDTVNNU0V4dFxjb3JlXFRTaW5nbGV0b247DQogIA0KICBwcm90ZWN0ZWQgJF9zb3VyY2U7DQogIHByb3RlY3RlZCAkX3RhcmdldDsNCiAgcHJvdGVjdGVkICRfc291cmNlX3ZlcnNpb247DQogIHByb3RlY3RlZCAkX3RhcmdldF92ZXJzaW9uOw0KICBwcm90ZWN0ZWQgJF9vdXRfZGlyOw0KICBwcm90ZWN0ZWQgJF9yb290X3BhdGg7DQogIHByb3RlY3RlZCAkX2Rpcl9jb21wcjsNCiAgcHJvdGVjdGVkICRfZXhjbHVkZXNfbGlzdCA9IFtdOw0KICBwcm90ZWN0ZWQgJF9leGNsdWRlc19wYXR0ZXJuX2xpc3QgPSBbXTsNCiAgcHJvdGVjdGVkICRfbWFuaWZlc3Q7DQogIA0KLy8gIHByb3RlY3RlZCBhcnJheSAkX2NvcHlfZXhjbHVkZXMgPSBbDQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9naXQvJywNCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL1wubWQkL2knLA0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvc3ZuLycsDQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9pbmRleFwuaHRtbD8kLycsDQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9jb25maWdcLnBocCQvJywNCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3BoYXJfaW5zdGFsbGVyLycsDQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9zY3JpcHRzLycsDQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9zdm4tLiovJywNCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3Rlc3RzLycsDQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9VTlVTRUQvJywNCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL0hJREUvJywNCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3VwbG9hZHMvJywNCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL34kLycsDQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9cLmJhayQvJywNCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyMuKi8nLA0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvXC4jLiovJywNCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsNCi8vICAvL1RPRE8gcm9vdC1kaXIgICcvXC5odGFjY2VzcyQvJywNCi8vDQovLyAgcHJvdGVjdGVkIGFycmF5ICRfY29tcGFyZV9leGNsdWRlcyA9IFsNCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5naXQqJywNCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyoubWQnLA0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi5NRCcsDQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuc3ZuJywNCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2bi0qJywNCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyouYmFrJywNCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyp+JywNCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyouc2gnLA0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi5wbCcsDQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLmJhdCcsDQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuIyonLA0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyonLA0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnLnBocCcsDQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmRleC5odG1sJywNCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1VOVVNFRConLA0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG1wJywNCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjcmlwdHMnLA0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMnLA0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5zdGFsbCcsDQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwaGFyX2luc3RhbGxlcicsDQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdOw0KICANCi8vICAvKioNCi8vICAgKiBtYW5pZmVzdF9idWlsZGVyIGNvbnN0cnVjdG9yLg0KLy8gICAqDQovLyAgICogQHBhcmFtIHN0cmluZyAkc291cmNlDQovLyAgICogQHBhcmFtIHN0cmluZyAkdGFyZ2V0DQovLyAgICoNCi8vICAgKiBAdGhyb3dzIFxDTVNNU0V4dFxFeGNlcHRpb25zXEZpbGVTeXN0ZW1FeGNlcHRpb24NCi8vICAgKi8NCi8vICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRzb3VyY2UgPSAnJywgc3RyaW5nICR0YXJnZXQgPSAnJywgc3RyaW5nICRpbmlfbmFtZSA9ICcnKQ0KLy8gIHsNCi8vDQoNCi8vDQovLyAgICAvLyR0aGlzLT5fZGlyX2NvbXByLT4NCi8vICB9DQogIA0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3Jlc2V0KCkNCiAgew0KICAgICR0aGlzLT5fc291cmNlICAgICAgICAgPSAnJzsNCiAgICAkdGhpcy0+X3RhcmdldCAgICAgICAgID0gJyc7DQogICAgJHRoaXMtPl9zb3VyY2VfdmVyc2lvbiA9ICcnOw0KICAgICR0aGlzLT5fdGFyZ2V0X3ZlcnNpb24gPSAnJzsNCiAgICAkdGhpcy0+X3RhcmdldCAgICAgICAgID0gJyc7DQogICAgJHRoaXMtPl9yb290X3BhdGggICAgICA9ICcnOw0KICAgICR0aGlzLT5fb3V0X2RpciAgICAgICAgPSAnJzsNCiAgfQ0KICANCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9pbml0aWFsaXplKCkNCiAgew0KICAgICRzb3VyY2UgPSB1dGlsczo6am9pbl9wYXRoKCR0aGlzLT5fcm9vdF9wYXRoLCAkdGhpcy0+X3NvdXJjZSk7DQogICAgDQogICAgaWYoIVxpc19kaXIoJHNvdXJjZSkpDQogICAgew0KICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oXHh0X3V0aWxzOjpnZXRfeHQoKSwgRXJyb3I6OklOVkFMSURfRElSX0VSUk9SLCAkc291cmNlKTsNCiAgICB9DQoNCiAgICBpZighXGlzX3JlYWRhYmxlKCRzb3VyY2UpKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCdEaXJlY3RvcnkgJyAuICRzb3VyY2UgLiAnIGlzIG5vdCByZWFkYWJsZScpOw0KICAgIH0NCiAgDQogICAgJHRhcmdldCA9IHV0aWxzOjpqb2luX3BhdGgoJHRoaXMtPl9yb290X3BhdGgsICR0aGlzLT5fdGFyZ2V0KTsNCg0KICAgIGlmKCFcaXNfZGlyKCR0YXJnZXQpKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKFx4dF91dGlsczo6Z2V0X3h0KCksIEVycm9yOjpJTlZBTElEX0RJUl9FUlJPUiwgJHRhcmdldCk7DQogICAgfQ0KDQogICAgaWYoIVxpc19yZWFkYWJsZSgkdGFyZ2V0KSkNCiAgICB7DQogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbignRGlyZWN0b3J5ICcgLiAkdGFyZ2V0IC4gJyBpcyBub3QgcmVhZGFibGUnKTsNCiAgICB9DQogICAgDQogICAgJHRoaXMtPl9zb3VyY2UgID0gJHNvdXJjZTsNCiAgICAkdGhpcy0+X3RhcmdldCAgPSAkdGFyZ2V0Ow0KICB9DQogIA0KICAvKioNCiAgICogcHVibGljIG1ldGhvZHMNCiAgICovDQogIA0KICAvKioNCiAgICogQHBhcmFtIG1peGVkICRzb3VyY2UNCiAgICoNCiAgICogQHJldHVybiBtYW5pZmVzdF9idWlsZGVyDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gc2V0U291cmNlKCRzb3VyY2UpDQogIHsNCiAgICAkdGhpcy0+X3NvdXJjZSA9ICRzb3VyY2U7DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtIG1peGVkICR0YXJnZXQNCiAgICoNCiAgICogQHJldHVybiBtYW5pZmVzdF9idWlsZGVyDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gc2V0VGFyZ2V0KCR0YXJnZXQpDQogIHsNCiAgICAkdGhpcy0+X3RhcmdldCA9ICR0YXJnZXQ7DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtIG1peGVkICRzb3VyY2VfdmVyc2lvbg0KICAgKg0KICAgKiBAcmV0dXJuIG1hbmlmZXN0X2J1aWxkZXINCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBzZXRTb3VyY2VWZXJzaW9uKCRzb3VyY2VfdmVyc2lvbikNCiAgew0KICAgICR0aGlzLT5fc291cmNlX3ZlcnNpb24gPSAkc291cmNlX3ZlcnNpb247DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtIG1peGVkICR0YXJnZXRfdmVyc2lvbg0KICAgKg0KICAgKiBAcmV0dXJuIG1hbmlmZXN0X2J1aWxkZXINCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBzZXRUYXJnZXRWZXJzaW9uKCR0YXJnZXRfdmVyc2lvbikNCiAgew0KICAgICR0aGlzLT5fdGFyZ2V0X3ZlcnNpb24gPSAkdGFyZ2V0X3ZlcnNpb247DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtIG1peGVkICRvdXRfZGlyDQogICAqDQogICAqIEByZXR1cm4gbWFuaWZlc3RfYnVpbGRlcg0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIHNldE91dERpcigkb3V0X2RpcikNCiAgew0KICAgICR0aGlzLT5fb3V0X2RpciA9ICRvdXRfZGlyOw0KICAgIA0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSBtaXhlZCAkcm9vdF9wYXRoDQogICAqDQogICAqIEByZXR1cm4gbWFuaWZlc3RfYnVpbGRlcg0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIHNldFJvb3RQYXRoKCRyb290X3BhdGgpDQogIHsNCiAgICAkdGhpcy0+X3Jvb3RfcGF0aCA9ICRyb290X3BhdGg7DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KLy8gIC8qKg0KLy8gICAqIEBwYXJhbSBtaXhlZCAkZGlyX2NvbXByDQovLyAgICoNCi8vICAgKiBAcmV0dXJuIG1hbmlmZXN0X2J1aWxkZXINCi8vICAgKi8NCi8vICBwdWJsaWMgZnVuY3Rpb24gc2V0RGlyQ29tcHIoJGRpcl9jb21wcikNCi8vICB7DQovLyAgICAkdGhpcy0+X2Rpcl9jb21wciA9ICRkaXJfY29tcHI7DQovLw0KLy8gICAgcmV0dXJuICR0aGlzOw0KLy8gIH0NCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gYXJyYXkgJGV4Y2x1ZGVzX2xpc3QNCiAgICoNCiAgICogQHJldHVybiBtYW5pZmVzdF9idWlsZGVyDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gc2V0RXhjbHVkZXNMaXN0KGFycmF5ICRleGNsdWRlc19saXN0KSA6IG1hbmlmZXN0X2J1aWxkZXINCiAgew0KICAgICR0aGlzLT5fZXhjbHVkZXNfbGlzdCA9ICRleGNsdWRlc19saXN0Ow0KICAgIA0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBwYXJhbSBhcnJheSAkZXhjbHVkZXNfcGF0dGVybl9saXN0DQogICAqDQogICAqIEByZXR1cm4gbWFuaWZlc3RfYnVpbGRlcg0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIHNldEV4Y2x1ZGVzUGF0dGVybkxpc3QoYXJyYXkgJGV4Y2x1ZGVzX3BhdHRlcm5fbGlzdCkgOiBtYW5pZmVzdF9idWlsZGVyDQogIHsNCiAgICAkdGhpcy0+X2V4Y2x1ZGVzX3BhdHRlcm5fbGlzdCA9ICRleGNsdWRlc19wYXR0ZXJuX2xpc3Q7DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gcnVuKCkNCiAgew0KICANCiAgfQ0KICANCiAgDQogIA0KfQ==]]></data>
	</file>
	<file>
	  <filename>/lib/FS/class.SimpleINI.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcRlM7DQoNCg0KdXNlIENNU01TRXh0XEV4Y2VwdGlvbnNcUnVudGltZUV4Y2VwdGlvbjsNCg0KY2xhc3MgU2ltcGxlSU5JIGV4dGVuZHMgRmlsZQ0Kew0KICBwcm90ZWN0ZWQgJF9kYXRhOw0KICANCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9sb2FkKCkgOiB2b2lkDQogIHsNCiAgICBwYXJlbnQ6Ol9sb2FkKCk7DQogICAgJHRoaXMtPl9kYXRhID0gXHBhcnNlX2luaV9zdHJpbmcoJHRoaXMtPnJlYWQoKSwgVFJVRSwgICBcSU5JX1NDQU5ORVJfVFlQRUQpOw0KICB9DQogIA0KICAvKioNCiAgICogQHBhcmFtICRzZWN0aW9uDQogICAqIEBwYXJhbSAka2V5DQogICAqDQogICAqIEByZXR1cm4gbWl4ZWR8c3RyaW5nDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gZ2V0KCRzZWN0aW9uID0gTlVMTCwgJGtleSA9IE5VTEwpDQogIHsNCiAgICBpZihOVUxMID09PSAka2V5ICYmIE5VTEwgIT09ICRzZWN0aW9uKQ0KICAgIHsNCiAgICAgICRrZXkgPSAkc2VjdGlvbjsNCiAgICAgIA0KICAgICAgcmV0dXJuICR0aGlzLT5fZGF0YVska2V5XSA/PyAnJzsNCiAgICB9DQogICAgDQogICAgaWYoaXNzZXQoJHRoaXMtPl9kYXRhWyRzZWN0aW9uXSkpDQogICAgew0KICAgICAgJHNlY3Rpb25EYXRhID0gJHRoaXMtPl9kYXRhWyRzZWN0aW9uXTsNCiAgICAgIA0KICAgICAgcmV0dXJuICRzZWN0aW9uRGF0YVska2V5XSA/PyAnJzsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICcnOw0KICB9DQogIA0KICAvKioNCiAgICogQHRocm93cyBcQ01TTVNFeHRcRXhjZXB0aW9uc1xSdW50aW1lRXhjZXB0aW9uDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gc2V0KCRzZWN0aW9uLCAka2V5LCAkdmFsdWUpDQogIHsNCiAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbignSW52YWxpZCBtZXRob2QgY2FsbDogJyAuIF9fTUVUSE9EX18pOw0KICB9DQogIA0KICAvKioNCiAgICogQHRocm93cyBcQ01TTVNFeHRcRXhjZXB0aW9uc1xSdW50aW1lRXhjZXB0aW9uDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gc2F2ZShzdHJpbmcgJGZpbGVfbmFtZSA9ICcnKSA6IEZpbGUNCiAgew0KICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdJbnZhbGlkIG1ldGhvZCBjYWxsOiAnIC4gX19NRVRIT0RfXyk7DQogIH0NCiAgDQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/FS/class.utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCm5hbWVzcGFjZSBDTVNNU0V4dFxGUzsNCg0KLyoqDQogKiBDbGFzcyB1dGlscw0KICoNCiAqIEZpbGUgc3lzdGVtIHV0aWxzIGZvciBDTVNNU0V4dA0KICoNCiAqIEBhdXRob3IgRmVybmFuZG8gTW9yZ2FkbyBha2EgSm9Nb3JnDQogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDIwIC0gMjAyMiBieSBGZXJuYW5kbyBNb3JnYWRvDQogKiBAcGFja2FnZSBDTVNNU0V4dFxGUw0KICovDQpmaW5hbCBjbGFzcyB1dGlscw0Kew0KICAvKioNCiAgICogTG9ncyBtZXNzYWdlcyB0byBhIGxvZyBmaWxlIHdpdGggYSBkYXRldGltZSBzdGFtcCAoJ1ktbS1kIEg6aTpzOnYnKQ0KICAgKiBhbGwgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwNCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSAob3B0aW9uYWwpIGRlZmF1bHQ6ICdbZW1wdHkgbWVzc2FnZV0nDQogICAqIEBwYXJhbSBzdHJpbmcgJGZvbGRlcl9uYW1lIChvcHRpb25hbCkgZGVmYXVsdDogQ01TTVMgcm9vdA0KICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSAob3B0aW9uYWwpIGRlZmF1bHQgJ2Ntc21zX2V4dCcNCiAgICoNCiAgICogbm90ZXM6IC0gdGhlIGZpbGUgZXh0ZW5zaW9uIGlzIGFsd2F5cyAubG9nIGFuZCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBmaWxlbmFtZSBhdXRvbWF0aWNhbGx5DQogICAqICAgICAgICAtIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgaXQgd2lsbCBiZSBjcmVhdGVkIGFuZCB0aGUgdG9wIGxpbmUgbWVzc2FnZSB3aWxsIGJlICdOZXcgbG9nIGZpbGUgY3JlYXRlZCcNCiAgICogICAgICAgIC0gaWYgaXQgZG9lcyB0aGUgbWVzc2FnZXMgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZXhpc3Rpbmcgb25lcy4NCiAgICovDQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9nKHN0cmluZyAkbWVzc2FnZSA9ICcnLCBzdHJpbmcgJGZvbGRlcl9uYW1lID0gJycsIHN0cmluZyAgJGZpbGVuYW1lID0gJycpIDogdm9pZA0KICB7DQogICAgJGRhdGV0aW1lICAgID0gXGRhdGVfZm9ybWF0KFxkYXRlX2NyZWF0ZSgpLCAnWS1tLWQgSDppOnM6dicpOw0KICAgICRtZXNzYWdlICAgICA9IGVtcHR5KCRtZXNzYWdlKSA/ICdbZW1wdHkgbWVzc2FnZV0nIDogJG1lc3NhZ2U7DQogICAgJHJvb3QgICAgICAgID0gXGRpcm5hbWUoX19GSUxFX18sIDUpOw0KICAgICRmb2xkZXJfbmFtZSA9IGVtcHR5KCRmb2xkZXJfbmFtZSkgPyAkcm9vdCA6ICRmb2xkZXJfbmFtZTsNCiAgICAkZmlsZW5hbWUgICAgPSBlbXB0eSgkZmlsZW5hbWUpID8gJ2Ntc21zX2V4dCcgOiAkZmlsZW5hbWU7DQogICAgJHBhdGggICAgICAgID0gKCRyb290ID09PSAkZm9sZGVyX25hbWUpID8gJHJvb3QgOiBcY21zX2pvaW5fcGF0aCgkcm9vdCwgXHN0cl9yZXBsYWNlKCRyb290LCAnJywgJGZvbGRlcl9uYW1lKSk7DQogICAgJGZpbGVfbmFtZSAgID0gJGZpbGVuYW1lIC4gJy5sb2cnOw0KICAgICRmbiAgICAgICAgICA9IHNlbGY6OmpvaW5fcGF0aCgkcGF0aCwgJGZpbGVfbmFtZSk7DQogICAgDQogICAgaWYoICFcaXNfZmlsZSgkZm4pICkNCiAgICB7DQogICAgICAkdGV4dCA9ICRkYXRldGltZSAuICAnIDo6IE5ldyBsb2cgZmlsZSBjcmVhdGVkJyAuIFBIUF9FT0w7DQogICAgICBmaWxlX3B1dF9jb250ZW50cygkZm4sICR0ZXh0KTsNCiAgICB9DQogICAgDQogICAgJHRleHQgID0gJGRhdGV0aW1lIC4gJyA6OiAnOw0KICAgICR0ZXh0IC49ICRtZXNzYWdlIC4gUEhQX0VPTDsNCiAgICANCiAgICAjIHdlIHRyeSB0byBtYWtlIHN1cmUgdGhlIGxpbmUgbGVuZ3RoIGxpbWl0IGlzIGlnbm9yZWQsIGFuZCB3ZSBjYW4gbG9nIGFueXRoaW5nIHdlIG5lZWQNCiAgICAkdG1wX21heCA9IFxpbmlfc2V0KCdsb2dfZXJyb3JzX21heF9sZW4nLCAwKTsNCiAgICBcZXJyb3JfbG9nKCR0ZXh0LCAzLCAkZm4pOw0KICAgIA0KICAgICMgcmVzZXQgdG8gdGhlIG9sZCB2YWx1ZTsNCiAgICBcaW5pX3NldCgnbG9nX2Vycm9yc19tYXhfbGVuJywgJHRtcF9tYXgpOw0KICB9DQogIA0KICAvKioNCiAgICogSm9pbnMgYW5kIGNvbmZvcm1zIGEgcGF0aA0KICAgKiBmcm9tIGVpdGhlciBhbiBhcnJheSBvZiBzZWdtZW50cw0KICAgKiBvciBhbnkgbnVtYmVyIG9mIHN0cmluZyBwYXJhbWV0ZXJzDQogICAqIHdpdGggcGFydGlhbCBwYXRocywgZGlyZWN0b3JpZXMgb3IgZmlsZW5hbWVzDQogICAqIA0KICAgKiBAcGFyYW0gbWl4ZWQgLi4uJHNlZ3MNCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICovDQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gam9pbl9wYXRoKC4uLiRzZWdzKQ0KICB7DQogICAgaWYoIFxpc19hcnJheSgkc2Vnc1swXSkgKSB7ICRzZWdzID0gJHNlZ3NbMF07IH0NCiAgDQogICAgJHBhdGggPSBcaW1wbG9kZShcRElSRUNUT1JZX1NFUEFSQVRPUiwgJHNlZ3MpOw0KICAgIA0KICAgIHJldHVybiBzZWxmOjpub3JtYWxpemVfcGF0aCgkcGF0aCk7DQogIH0NCiAgDQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbm9ybWFsaXplX3BhdGgoc3RyaW5nICRwYXRoKQ0KICB7DQogICAgIyBlaXRoZXIgTVMgb3Igb3RoZXIgT1MgdXNlcyBmb3J3YXJkIHNsYXNoZXMgZm9yIHBhdGhzDQogICAgIyBzbyBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGRvdWJsZXMgb3IgbWl4ZWQgc2xhc2hlcw0KICAgICMgZXhjZXB0IGZvciB0aGUgcmVxdWlyZWQgb25lcw0KICAgICR0ID0gXGV4cGxvZGUoJzovLycsICRwYXRoKTsNCiAgICAkcCA9ICcnOw0KICAgIA0KICAgIGlmKFxjb3VudCgkdCkgPiAxKSAjIHdlIGhhdmUgYSA6Ly8gcHJvdG9jb2wgcGF0dGVybg0KICAgIHsNCiAgICAgICRwID0gXGFycmF5X3NoaWZ0KCR0KSAuICc6Ly8nOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJHQgPSBcZXhwbG9kZSgnOlxcXFwnLCAkcGF0aCk7DQogICAgICANCiAgICAgIGlmKFxjb3VudCgkdCkgPiAxKSAjIHdlIGhhdmUgYSA6XFwgcHJvdG9jb2wgcGF0dGVybiwgYnV0IHJlYWxseSwgd2Ugd2FudCB0aGUgOi8vIGFueXdheQ0KICAgICAgew0KICAgICAgICAkcCA9IFxhcnJheV9zaGlmdCgkdCkgLiAnOi8vJzsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgJHBhdGggPSBcaW1wbG9kZShcRElSRUNUT1JZX1NFUEFSQVRPUiwgJHQpOw0KICAgICRwYXRoID0gXHN0cl9yZXBsYWNlKCJcXCIsICcvJywgICRwYXRoKTsNCiAgDQogICAgcmV0dXJuICRwIC4gXHByZWdfcmVwbGFjZSgnL1wvXC8rLycsICcvJywgJHBhdGggKTsNCiAgfQ0KICANCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/functions</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/functions/function.dbg.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCm5hbWVzcGFjZSBDTVNNU0V4dFxkYmcNCnsNCiAgdXNlICAgXENNU01TRXh0XGNvcmVcVmFyRHVtcGVyOw0KICANCg0KICAvKioNCiAgICogUmV0dXJucyBhbiBpbnN0YW5jZSBvZiBkYmcgZm9yIE9PUC1zdHlsZSBjYWxscw0KICAgKiBAbm90ZSBmb3IgdGhpcyB0byB3b3JrLCBhcmd1bWVudHMgZm9yIGFueSBjYWxsYWJsZSBtZXRob2QgbXVzdCBiZSBudWxsYWJsZQ0KICAgKg0KICAgKiBAcGFyYW0gJGl0ZW0NCiAgICoNCiAgICogQHJldHVybiBcQ01TTVNFeHRcZGJnXGRiZw0KICAgKi8NCiAgZnVuY3Rpb24gZGJnKCRpdGVtID0gTlVMTCkNCiAgew0KICAgICRkYmcgPSBuZXcgZGJnOw0KICAgIGlmKFxmdW5jX251bV9hcmdzKCkgPiAwKSB7ICRkYmctPl93cmFwcGVkID0gJGl0ZW07IH0NCiAgICANCiAgICByZXR1cm4gJGRiZzsNCiAgfQ0KICANCiAgY2xhc3MgZGJnDQogIHsNCiAgICAvLyBTaW5nbGV0b24NCiAgICBwcml2YXRlIHN0YXRpYyAgICAgICAgICAgICAgICAgICAgICAkX2luc3RhbmNlOw0KICAgIHByaXZhdGUgc3RhdGljIFxDTVNNU0V4dFxjb3JlXHN0YWNrICRfc3RhY2s7DQogICAgDQogICAgLy8gU3RhcnQgdGhlIGNoYWluDQogICAgcHJpdmF0ZSBib29sICRfY2hhaW5lZCA9IEZBTFNFOyAvLyBBcmUgd2UgaW4gYSBjaGFpbj8NCiAgICAvLyBFeHRlbmQgdGhlIGNsYXNzIHdpdGggeW91ciBvd24gZnVuY3Rpb25zDQogICAgcHJpdmF0ZSAkX21peGlucyA9IFtdOw0KICAgIA0KICAgIHB1YmxpYyAkX3dyYXBwZWQ7IC8vIFZhbHVlIHBhc3NlZCBmcm9tIG9uZSBjaGFpbmVkIG1ldGhvZCB0byB0aGUgbmV4dA0KICAgIA0KICAgIC8qKg0KICAgICAqIGludGVybmFscw0KICAgICAqLw0KICAgIA0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpDQogICAgew0KICAgICAgc2VsZjo6JF9zdGFjayA9IG5ldyBcQ01TTVNFeHRcY29yZVxzdGFjaygpOw0KICAgIH0NCiAgICANCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEluc3RhbmNlKCkNCiAgICB7DQogICAgICBpZighaXNzZXQoc2VsZjo6JF9pbnN0YW5jZSkpDQogICAgICB7DQogICAgICAgICRjICAgICAgICAgICAgICAgPSBfX0NMQVNTX187DQogICAgICAgIHNlbGY6OiRfaW5zdGFuY2UgPSBuZXcgJGM7DQogICAgICB9DQogICAgICANCiAgICAgIHJldHVybiBzZWxmOjokX2luc3RhbmNlOw0KICAgIH0NCiAgICANCg0KICAgIC8qKg0KICAgICAqIENhbGxzIGEgc3RhdGljIG1ldGhvZCBvciBtaXhpbiBieSBuYW1lIGFuZCBwYXNzZXMgdGhlIHByb3ZpZGVkIGFyZ3VtZW50cy4NCiAgICAgKiBBbGxvd3MgZXh0ZW5kaW5nIG1ldGhvZHMgaW4gc3RhdGljIGNvbnRleHQNCiAgICAgKg0KICAgICAqIEBub3RlIG1ldGhvZHMgcHJlZml4ZWQgd2l0aCBhbiB1bmRlcnNjb3JlIGFyZSB0cmVhdGVkIGFzIHByaXZhdGUNCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBuYW1lIG9mIHRoZSBtZXRob2Qgb3IgbWl4aW4gdG8gY2FsbC4NCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFyZ3VtZW50cyBUaGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIG1ldGhvZCBvciBtaXhpbi4NCiAgICAgKiBAdGhyb3dzIFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uIElmIHRoZSBtZXRob2Qgb3IgbWl4aW4gZG9lcyBub3QgZXhpc3QuDQogICAgICoNCiAgICAgKiBAcmV0dXJuIG1peGVkIFRoZSByZXN1bHQgb2YgdGhlIG1ldGhvZCBvciBtaXhpbiBjYWxsLg0KICAgICAqLw0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX19jYWxsU3RhdGljKCRuYW1lLCAkYXJndW1lbnRzKQ0KICAgIHsNCiAgICAgIGlmKCAhXHN0YXJ0c3dpdGgoJG5hbWUsICAnXycpICYmIFxtZXRob2RfZXhpc3RzKF9fQ0xBU1NfXywgJG5hbWUpICkNCiAgICAgIHsNCiAgICAgICAgJGMgPSBzZWxmOjpnZXRJbnN0YW5jZSgpOw0KICAgICAgICByZXR1cm4gXGNhbGxfdXNlcl9mdW5jX2FycmF5KFskYywgJG5hbWVdLCAkYXJndW1lbnRzKTsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgJG1peGlucyA9ICZzZWxmOjpnZXRJbnN0YW5jZSgpLT5fbWl4aW5zOw0KICAgICAgDQogICAgICBpZiggIWlzc2V0KCRtaXhpbnNbJG5hbWVdKSApDQogICAgICB7DQogICAgICAgIHRocm93IG5ldyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbigkbmFtZSk7DQogICAgICB9DQogICAgICANCiAgICAgIHJldHVybiBcY2FsbF91c2VyX2Z1bmNfYXJyYXkoJG1peGluc1skbmFtZV0sICRhcmd1bWVudHMpOw0KICAgIH0NCiAgICANCiAgICANCiAgICANCiAgICAvKioNCiAgICAgKiBFeGVjdXRlcyBpbmFjY2Vzc2libGUgbWV0aG9kcyBvciBtaXhpbnMgZHluYW1pY2FsbHkgYmFzZWQgb24gdGhlIGdpdmVuIG5hbWUgYW5kIGFyZ3VtZW50cy4NCiAgICAgKg0KICAgICAqIEBub3RlIG1ldGhvZHMgcHJlZml4ZWQgd2l0aCBhbiB1bmRlcnNjb3JlIGFyZSB0cmVhdGVkIGFzIHByaXZhdGUNCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBuYW1lIG9mIHRoZSBtZXRob2Qgb3IgbWl4aW4gdG8gZXhlY3V0ZS4NCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFyZ3VtZW50cyBUaGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIG1ldGhvZCBvciBtaXhpbi4NCiAgICAgKiBAdGhyb3dzIFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uIElmIHRoZSBtZXRob2QgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFjY2Vzc2libGUuDQogICAgICogQHJldHVybiBtaXhlZCBUaGUgcmVzdWx0IG9mIHRoZSBtZXRob2QgZXhlY3V0aW9uLg0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NhbGwoJG5hbWUsICRhcmd1bWVudHMpDQogICAgew0KICAgICAgaWYoICFcc3RhcnRzd2l0aCgkbmFtZSwgICdfJykgJiYgXG1ldGhvZF9leGlzdHMoJHRoaXMsICRuYW1lKSApDQogICAgICB7DQogICAgICAgIHJldHVybiBcY2FsbF91c2VyX2Z1bmNfYXJyYXkoWyR0aGlzLCAkbmFtZV0sICRhcmd1bWVudHMpOw0KICAgICAgfQ0KICAgICAgDQogICAgICAkbWl4aW5zICAgID0gJnNlbGY6OmdldEluc3RhbmNlKCktPl9taXhpbnM7DQogICAgICANCiAgICAgIGlmKCAhaXNzZXQoJG1peGluc1skbmFtZV0pICkNCiAgICAgIHsNCiAgICAgICAgdGhyb3cgbmV3IFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uKCRuYW1lKTsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgJGFyZ3VtZW50cyA9IHNlbGY6Ol93cmFwQXJncygkYXJndW1lbnRzKTsNCiAgICAgIA0KICAgICAgcmV0dXJuIFxjYWxsX3VzZXJfZnVuY19hcnJheSgkbWl4aW5zWyRuYW1lXSwgJGFyZ3VtZW50cyk7DQogICAgfQ0KICAgIA0KICAgIC8qKg0KICAgICAqIFdyYXBzIGEgdmFsdWUgYW5kIHJldHVybnMgaXQuDQogICAgICoNCiAgICAgKiBAbm90ZSAgQWxsIG1ldGhvZHMgc2hvdWxkIHdyYXAgdGhlaXIgcmV0dXJucyB3aXRoaW4gX3dyYXAsDQogICAgICogICAgICAgIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiB1bmRlcnN0YW5kcyBib3RoIE9PLXN0eWxlDQogICAgICogICAgICAgIGFuZCBmdW5jdGlvbmFsICBjYWxscw0KICAgICAqDQogICAgICogQHBhcmFtIG1peGVkICR2YWwgVGhlIHZhbHVlIHRvIGJlIHdyYXBwZWQuDQogICAgICoNCiAgICAgKiBAcmV0dXJuIG1peGVkIFRoZSB3cmFwcGVkIHZhbHVlLg0KICAgICAqLw0KICAgIHByaXZhdGUgZnVuY3Rpb24gX3dyYXAoJHZhbCkNCiAgICB7DQogICAgICBpZihpc3NldCgkdGhpcykgJiYgaXNzZXQoc2VsZjo6JF9jaGFpbmVkKSAmJiBzZWxmOjokX2NoYWluZWQpDQogICAgICB7DQogICAgICAgICR0aGlzLT5fd3JhcHBlZCA9ICR2YWw7DQogICAgICAgIA0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgICB9DQogICAgICANCiAgICAgIHJldHVybiAkdmFsOw0KICAgIH0NCiAgICANCiAgICANCiAgICAvKioNCiAgICAgKiBXcmFwcyB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uDQogICAgICoNCiAgICAgKiBtZXRob2RzIHNob3VsZCBnZXQgdGhlaXIgYXJndW1lbnRzIGZyb20gX3dyYXBBcmdzDQogICAgICogYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIHVuZGVyc3RhbmRzIGJvdGggT08tc3R5bGUgYW5kIGZ1bmN0aW9uYWwgY2FsbHMNCiAgICAgKg0KICAgICAqIEBwYXJhbSBhcnJheSAgICAkY2FsbGVyX2FyZ3MgVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLg0KICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkbnVtX2FyZ3MgVGhlIG51bWJlciBvZiBhcmd1bWVudHMgdG8gd3JhcC4NCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIHRoZSB0b3RhbCBudW1iZXIgb2YgY2FsbGVyIGFyZ3VtZW50cyBtaW51cyAxLg0KICAgICAqDQogICAgICogQHJldHVybiBhcnJheSBUaGUgd3JhcHBlZCBhcmd1bWVudHMuDQogICAgICovDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfd3JhcEFyZ3MoJGNhbGxlcl9hcmdzLCAkbnVtX2FyZ3MgPSBOVUxMKQ0KICAgIHsNCiAgICAgICRudW1fYXJncyA9ICRudW1fYXJncyA/PyAoXGNvdW50KCRjYWxsZXJfYXJncykgLSAxKTsNCiAgICAgIA0KICAgICAgJGZpbGxlZF9hcmdzID0gW107DQogICAgICANCiAgICAgIGlmKCBpc3NldCgkdGhpcywgJHRoaXMtPl93cmFwcGVkKSApDQogICAgICB7DQogICAgICAgICRmaWxsZWRfYXJnc1tdID0mICR0aGlzLT5fd3JhcHBlZDsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgaWYoXGNvdW50KCRjYWxsZXJfYXJncykgPiAwKQ0KICAgICAgew0KICAgICAgICBmb3JlYWNoKCRjYWxsZXJfYXJncyBhcyAkayA9PiAkdikgeyAkZmlsbGVkX2FyZ3NbXSA9ICR2OyB9DQogICAgICB9DQogICAgICANCiAgICAgIHJldHVybiBcYXJyYXlfcGFkKCRmaWxsZWRfYXJncywgJG51bV9hcmdzLCBOVUxMKTsNCiAgICB9DQogICAgDQogICAgLyoqDQogICAgICogQ2hhaW5zIGEgbmV3IGl0ZW0gdG8gdGhlIGV4aXN0aW5nIGRiZyBvYmplY3QuDQogICAgICoNCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGl0ZW0gVGhlIGl0ZW0gdG8gY2hhaW4uDQogICAgICogQHJldHVybiBkYmcgVGhlIGRiZyBvYmplY3Qgd2l0aCB0aGUgbmV3IGl0ZW0gY2hhaW5lZC4NCiAgICAgKi8NCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoYWluKCRpdGVtID0gTlVMTCkgOiBkYmcNCiAgICB7DQogICAgICBbJGl0ZW1dID0gc2VsZjo6X3dyYXBBcmdzKFxmdW5jX2dldF9hcmdzKCksIDEpOw0KICAgICAgDQogICAgICAkZGJnICAgICAgICAgICA9IChpc3NldCgkdGhpcywgc2VsZjo6JF9jaGFpbmVkKSAmJiBzZWxmOjokX2NoYWluZWQpID8gJHRoaXMgOiBkYmcoJGl0ZW0pOw0KICAgICAgJGRiZy0+X2NoYWluZWQgPSBUUlVFOw0KICAgICAgDQogICAgICByZXR1cm4gJGRiZzsNCiAgICB9DQogIA0KICAgIA0KICAgIC8qKg0KICAgICAqIEVuZCB0aGUgY2hhaW4gYW5kIHJldHVybiB0aGUgdmFsdWUuDQogICAgICoNCiAgICAgKiBAcmV0dXJuIG51bGwNCiAgICAgKi8NCiAgICBwcml2YXRlIGZ1bmN0aW9uIHZhbHVlKCkNCiAgICB7DQogICAgICByZXR1cm4gKCBpc3NldCgkdGhpcykgKSA/ICR0aGlzLT5fd3JhcHBlZCA6IE5VTEw7DQogICAgfQ0KICAgIA0KICAgIC8qKg0KICAgICAqIE1peGVzIGluIHRoZSBnaXZlbiBmdW5jdGlvbnMgaW50byB0aGUgY2xhc3MncyBsaXN0IG9mIG1peGlucy4NCiAgICAgKg0KICAgICAqIEBwYXJhbSBtaXhlZCAkZnVuY3Rpb25zIFRoZSBmdW5jdGlvbnMgdG8gYmUgbWl4ZWQgaW4uDQogICAgICoNCiAgICAgKiBAcmV0dXJuIG1peGVkIFRoZSByZXN1bHQgb2YgdGhlIF93cmFwIG1ldGhvZC4NCiAgICAgKi8NCiAgICBwcml2YXRlIGZ1bmN0aW9uIG1peGluKCRmdW5jdGlvbnMgPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskZnVuY3Rpb25zXSA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAxKTsNCiAgICAgIA0KICAgICAgJG1peGlucyA9ICZzZWxmOjpnZXRJbnN0YW5jZSgpLT5fbWl4aW5zOw0KICAgICAgZm9yZWFjaCgkZnVuY3Rpb25zIGFzICRuYW1lID0+ICRmdW5jdGlvbikNCiAgICAgIHsNCiAgICAgICAgJG1peGluc1skbmFtZV0gPSAkZnVuY3Rpb247DQogICAgICB9DQogICAgICANCiAgICAgIHJldHVybiBzZWxmOjpfd3JhcChOVUxMKTsNCiAgICB9DQogICAgDQogICAgLyoqDQogICAgICogUmV0cmlldmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHN0YWNrIGZyYW1lLg0KICAgICAqDQogICAgICogQHJldHVybiBzdHJpbmcgVGhlIGZvcm1hdHRlZCBzdHJpbmcgY29udGFpbmluZyBkZWJ1ZyBpbmZvcm1hdGlvbi4NCiAgICAgKi8NCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9pbmZvKCkNCiAgICB7DQogICAgICAkZGF0YSA9IHNlbGY6OiRfc3RhY2stPnBvcCgpOw0KICAgICAgDQogICAgICAkb3V0ID0gJ2RlYnVnOjxicj4gRklMRTogJyAuICRkYXRhWydmaWxlJ10NCiAgICAgICAgICAgICAuICcgPGJyPiBMSU5FOiAnIC4gJGRhdGFbJ2xpbmUnXQ0KICAgICAgICAgICAgICMgLiAnIDxicj4gRlVOQ1RJT046ICcgLiAkZGF0YVsnZnVuY3Rpb24nXSAjIDwtIG5vdCB3aGF0IHdlIGV4cGVjdGVkIGl0IHRvIGJlDQogICAgICA7DQogICAgICANCiAgICAgIGlmKCAnOjonID09PSAkZGF0YVsnZnVuY3Rpb24nXSApDQogICAgICB7DQogICAgICAgICRvdXQgLj0gJyAoc3RhdGljIG1ldGhvZCBjYWxsKSc7DQogICAgICB9DQogICAgICBlbHNlIGlmKCAnLT4nID09PSAkZGF0YVsndHlwZSddICkNCiAgICAgIHsNCiAgICAgICAgJG91dCAuPSAnIChpbnN0YW5jZSBtZXRob2QgY2FsbCknOw0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAkb3V0IC49ICcgKGZ1bmN0aW9uIGNhbGwgb3IgdW5kZXRlcm1pbmVkIGNhbGwpJzsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgcmV0dXJuICRvdXQ7DQogICAgfQ0KICAgIA0KICAgIA0KICAgIC8qKg0KICAgICAqIG5vdyB0aGUgZnVuY3Rpb25zDQogICAgICovDQogICAgDQogICAgLyoqDQogICAgICogRHVtcCB0aGUgdmFsdWUgYW5kIGRpc3BsYXkgaXQgaW4gYSBmb3JtYXR0ZWQgd2F5Lg0KICAgICAqDQogICAgICogQHBhcmFtIG1peGVkICR2YWwgVGhlIHZhbHVlIHRvIGJlIGR1bXBlZC4NCg0KICAgICAqIEByZXR1cm4gZGJnIHRoZSBkYmcgaW5zdGFuY2UNCiAgICAgKi8NCiAgICBwcml2YXRlIGZ1bmN0aW9uIGR1bXAoJHZhbCA9IE5VTEwsIC4uLiAkYXJncykgOiBkYmcNCiAgICB7DQogICAgICBzZWxmOjokX3N0YWNrLT5wdXNoKFxkZWJ1Z19iYWNrdHJhY2UoMiwzKVsxXSk7DQogICAgICBbJHZhbCwgJGFyZ3NdID0gc2VsZjo6X3dyYXBBcmdzKFxmdW5jX2dldF9hcmdzKCksIDIpOw0KICAgICAgDQogICAgICBpZihpc3NldCgkYXJncykpDQogICAgICB7DQogICAgICAgICRzZW5kID0gXGFycmF5X21lcmdlKFskdmFsXSwgWyRhcmdzXSk7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgICRzZW5kID0gJHZhbDsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgJG91dCA9ICc8cHJlIHN0eWxlPSJ3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7Ij4nDQogICAgICAgICAgICAgLiAkdGhpcy0+X2luZm8oKQ0KICAgICAgICAgICAgIC4gJzxkaXYgc3R5bGU9IndvcmQtd3JhcDogYnJlYWstd29yZDsiPicNCiAgICAgICAgICAgICAuICR0aGlzLT5fZHVtcCgkc2VuZCkNCiAgICAgICAgICAgICAuICc8L2Rpdj4nDQogICAgICAgICAgICAgLiAnPC9wcmU+JzsNCiAgICAgIA0KICAgICAgZWNobyAkb3V0Ow0KICAgICAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoJHRoaXMpOw0KICAgICAgJHNlbmQgPSBcYXJyYXlfbWVyZ2UoWyR2YWxdLCBbJGFyZ3NdKTsNCiAgICAgICRvdXQgPSAnPHByZSBzdHlsZT0id29yZC13cmFwOiBicmVhay13b3JkOyI+Jw0KICAgICAgICAgICAgIC4gJHRoaXMtPl9pbmZvKCkNCiAgICAgICAgICAgICAuICc8ZGl2IHN0eWxlPSJ3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7Ij4nDQogICAgICAgICAgICAgLiAkdGhpcy0+X2R1bXAoJHNlbmQpDQogICAgICAgICAgICAgLiAnPC9kaXY+Jw0KICAgICAgICAgICAgIC4gJzwvcHJlPic7DQogICAgICANCiAgICAgIGVjaG8gJG91dDsNCiAgICAgIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKCR0aGlzKTsNCiAgICB9DQogICAgDQogICAgLyoqDQogICAgICogRHVtcHMgYSB2YWx1ZSBhbmQgdGVybWluYXRlcyB0aGUgc2NyaXB0IGV4ZWN1dGlvbi4NCiAgICAgKg0KICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsIFRoZSB2YWx1ZSB0byBiZSBkdW1wZWQuDQogICAgICogQHJldHVybiB2b2lkIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGFueSB2YWx1ZS4NCiAgICAgKi8NCiAgICBwcml2YXRlIGZ1bmN0aW9uIGRpZSgkdmFsID0gTlVMTCwgLi4uICRhcmdzKQ0KICAgIHsNCiAgICAgIHNlbGY6OiRfc3RhY2stPnB1c2goXGRlYnVnX2JhY2t0cmFjZSgyLDMpWzFdKTsNCiAgICAgIFskdmFsLCAkYXJnc10gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMik7DQogICAgICANCiAgICAgIGlmKGlzc2V0KCRhcmdzKSkNCiAgICAgIHsNCiAgICAgICAgJHNlbmQgPSBcYXJyYXlfbWVyZ2UoWyR2YWxdLCBbJGFyZ3NdKTsNCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgJHNlbmQgPSAkdmFsOw0KICAgICAgfQ0KICAgICAgDQogICAgICAkb3V0ID0gJzxwcmUgc3R5bGU9IndvcmQtd3JhcDogYnJlYWstd29yZDsiPicNCiAgICAgICAgICAgICAuICR0aGlzLT5faW5mbygpDQogICAgICAgICAgICAgLiAnPGRpdiBzdHlsZT0id29yZC13cmFwOiBicmVhay13b3JkOyI+Jw0KICAgICAgICAgICAgIC4gJHRoaXMtPl9kdW1wKCRzZW5kKQ0KICAgICAgICAgICAgIC4gJzwvZGl2PicNCiAgICAgICAgICAgICAuICc8L3ByZT4nOw0KICAgICAgDQogICAgICBkaWUoJG91dCk7DQogICAgfQ0KICAgIA0KICAgIA0KICAgIC8qKg0KICAgICAqIER1bXBzIHRoZSBnaXZlbiB2YWx1ZSBhbG9uZyB3aXRoIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4NCiAgICAgKg0KICAgICAqIGdldF9kZWZpbmVkX3ZhcnMoKSBjYW4gYmUgcGFzc2VkIGFzICR2YWwNCiAgICAgKg0KICAgICAqIEBwYXJhbSBtaXhlZCAkdmFscyAgICAgICBUaGUgdmFsdWUgdG8gYmUgZHVtcGVkLg0KICAgICAqIEBwYXJhbSBtaXhlZCAkZXhjbHVzaW9ucyBBbiBhcnJheSBvZiBrZXlzIHRvIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGR1bXBlZCB2YWx1ZS4NCiAgICAgKg0KICAgICAqIEByZXR1cm4gZGJnIHRoZSBkYmcgaW5zdGFuY2UuDQogICAgICovDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBkdW1wX2V4dCgkdmFscyA9IE5VTEwsICRleGNsdXNpb25zID0gTlVMTCkgOiBkYmcNCiAgICB7DQogICAgICBzZWxmOjokX3N0YWNrLT5wdXNoKFxkZWJ1Z19iYWNrdHJhY2UoMiwzKVsxXSk7DQogICAgICBbJHZhbHMsICRleGNsdXNpb25zXSA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAyKTsNCiAgICAgICRleGNsdXNpb25zID0gKGFycmF5KSRleGNsdXNpb25zOw0KICAgICAgDQogICAgICAkdGVtcDEgPSBcYXJyYXlfdmFsdWVzKFxhcnJheV9kaWZmKFxhcnJheV9rZXlzKCR2YWxzKSwgJGV4Y2x1c2lvbnMpKTsNCiAgICAgICR0ZW1wMiA9IFtdOw0KICAgICAgDQogICAgICBmb3JlYWNoKCR0ZW1wMSBhcyAkdmFsdWUpDQogICAgICB7DQogICAgICAgIGdsb2JhbCAkJHZhbHVlOw0KICAgICAgICAkdGVtcDJbJHZhbHVlXSA9ICQkdmFsdWUgPz8gTlVMTDsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgJHRoaXMtPl9kdW1wKCR2YWxzKTsNCiAgICAgIA0KICAgICAgJG91dCA9ICc8cHJlIHN0eWxlPSJ3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7Ij4nDQogICAgICAgICAgICAgLiAkdGhpcy0+X2luZm8oKQ0KICAgICAgICAgICAgIC4gJzxkaXYgc3R5bGU9IndvcmQtd3JhcDogYnJlYWstd29yZDsiPicNCiAgICAgICAgICAgICAuICR0aGlzLT5fZHVtcCgkdGVtcDIpDQogICAgICAgICAgICAgLiAnPC9kaXY+Jw0KICAgICAgICAgICAgIC4gJzwvcHJlPic7DQogICAgICANCiAgICAgIGVjaG8gJG91dDsNCiAgICAgIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKCR0aGlzKTsNCiAgICB9DQogICAgDQogICAgDQogICAgLyoqDQogICAgICogRHVtcHMgdGhlIGdpdmVuIHZhbHVlIGFsb25nIHdpdGggc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQogICAgICogYW5kIHRlcm1pbmF0ZSBzY3JpcHQgZXhlY3V0aW9uLg0KICAgICAqDQogICAgICogZ2V0X2RlZmluZWRfdmFycygpIGNhbiBiZSBwYXNzZWQgYXMgJHZhbA0KICAgICAqDQogICAgICogQHBhcmFtIG1peGVkICR2YWxzICAgICAgIFRoZSB2YWx1ZSB0byBiZSBkdW1wZWQuDQogICAgICogQHBhcmFtIG1peGVkICRleGNsdXNpb25zIEFuIGFycmF5IG9mIGtleXMgdG8gYmUgZXhjbHVkZWQgZnJvbSB0aGUgZHVtcGVkIHZhbHVlLg0KICAgICAqDQogICAgICogQHJldHVybiB2b2lkDQogICAgICovDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBkaWVfZXh0KCR2YWxzID0gTlVMTCwgJGV4Y2x1c2lvbnMgPSBOVUxMKSA6IHZvaWQNCiAgICB7DQogICAgICBzZWxmOjokX3N0YWNrLT5wdXNoKFxkZWJ1Z19iYWNrdHJhY2UoMiwzKVsxXSk7DQogICAgICBbJHZhbCwgJGV4Y2x1c2lvbnNdID0gc2VsZjo6X3dyYXBBcmdzKFxmdW5jX2dldF9hcmdzKCksIDIpOw0KICAgICAgJGV4Y2x1c2lvbnMgPSAoYXJyYXkpJGV4Y2x1c2lvbnM7DQogICAgICAkdGVtcDEgPSBcYXJyYXlfdmFsdWVzKFxhcnJheV9kaWZmKFxhcnJheV9rZXlzKCR2YWwpLCAkZXhjbHVzaW9ucykpOw0KICAgICAgJHRlbXAyID0gW107DQogICAgICANCiAgICAgIGZvcmVhY2goJHRlbXAxIGFzICR2YWx1ZSkNCiAgICAgIHsNCiAgICAgICAgZ2xvYmFsICQkdmFsdWU7DQogICAgICAgICR0ZW1wMlskdmFsdWVdID0gJCR2YWx1ZSA/PyBOVUxMOw0KICAgICAgfQ0KICAgICAgDQogICAgICAkdGhpcy0+X2R1bXAoJHZhbCk7DQogICAgICANCiAgICAgICRvdXQgPSAnPHByZSBzdHlsZT0id29yZC13cmFwOiBicmVhay13b3JkOyI+Jw0KICAgICAgICAgICAgIC4gJHRoaXMtPl9pbmZvKCkNCiAgICAgICAgICAgICAuICc8ZGl2IHN0eWxlPSJ3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7Ij4nDQogICAgICAgICAgICAgLiAkdGhpcy0+X2R1bXAoJHRlbXAyKQ0KICAgICAgICAgICAgIC4gJzwvZGl2PicNCiAgICAgICAgICAgICAuICc8L3ByZT4nOw0KICAgICAgDQogICAgICBkaWUoJG91dCk7DQogICAgfQ0KICAgIA0KICAgIC8qKg0KICAgICAqIE91dHB1dHMgZGVidWdnaW5nIGluZm9ybWF0aW9uLg0KICAgICAqDQogICAgICogQHBhcmFtIG1peGVkICR2YWwgVGhlIHZhbHVlIHRvIGJlIGR1bXBlZC4NCiAgICAgKg0KICAgICAqIEByZXR1cm4gc3RyaW5nDQogICAgICovDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfZHVtcCgkdmFsKQ0KICAgIHsNCiAgICAgIHJldHVybiBWYXJEdW1wZXI6OmR1bXAoJHZhbCwgNSwgVFJVRSk7DQogICAgfQ0KICAgIA0KLy8gICAgZnVuY3Rpb24gZHVtcDIoYm9vbCAkcG9wdWxhdGVNaXNzaW5nQXJndW1lbnRzV2l0aERlZmF1bHRzID0gRkFMU0UpIDogYXJyYXkNCi8vICAgIHsNCi8vICAgICAgJHRyYWNlICAgICAgPSBcZGVidWdfYmFja3RyYWNlKDAsIDIpWzFdOw0KLy8gICAgICAkcmVmbGVjdGlvbiA9IE5VTEw7DQovLw0KLy8gICAgICBpZihpc3NldCgkdHJhY2VbJ2NsYXNzJ10pKQ0KLy8gICAgICB7DQovLyAgICAgICAgJHJlZmxlY3Rpb24gPSBuZXcgXFJlZmxlY3Rpb25NZXRob2QoJHRyYWNlWydjbGFzcyddLCAkdHJhY2VbJ2Z1bmN0aW9uJ10pOw0KLy8gICAgICB9DQovLyAgICAgIGVsc2UNCi8vICAgICAgew0KLy8gICAgICAgICRyZWZsZWN0aW9uID0gbmV3IFxSZWZsZWN0aW9uRnVuY3Rpb24oJHRyYWNlWydmdW5jdGlvbiddKTsNCi8vICAgICAgfQ0KLy8NCi8vICAgICAgJHJldCA9IFtdOw0KLy8gICAgICBmb3JlYWNoKCRyZWZsZWN0aW9uLT5nZXRQYXJhbWV0ZXJzKCkgYXMgJHBhcmFtKQ0KLy8gICAgICB7DQovLyAgICAgICAgaWYoXGFycmF5X2tleV9leGlzdHMoJHBhcmFtLT5nZXRQb3NpdGlvbigpLCAkdHJhY2VbJ2FyZ3MnXSkpDQovLyAgICAgICAgew0KLy8gICAgICAgICAgJHJldFskcGFyYW0tPm5hbWVdID0gJHRyYWNlWydhcmdzJ11bJHBhcmFtLT5nZXRQb3NpdGlvbigpXTsNCi8vICAgICAgICB9DQovLyAgICAgICAgZWxzZSBpZigkcG9wdWxhdGVNaXNzaW5nQXJndW1lbnRzV2l0aERlZmF1bHRzKQ0KLy8gICAgICAgIHsNCi8vICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhlICJyZXF1aXJlZCBhcmd1bWVudHMgZGVjbGFyZWQgYWZ0ZXIgYW4gb3B0aW9uYWwgYXJndW1lbnQgYXJlIGltcGxpY2l0bHkgcmVxdWlyZWQiIHJ1bGU6DQovLyAgICAgICAgICBcYXNzZXJ0KA0KLy8gICAgICAgICAgICAkcGFyYW0tPmlzRGVmYXVsdFZhbHVlQXZhaWxhYmxlKCksICJpIHRoaW5rIGFsbCBwYXJhbXMgYXJlIGVpdGhlciBpbiB0cmFjZVthcmdzXSBvciBoYXZlIGRlZmF1bHQgdmFsdWVzIg0KLy8gICAgICAgICAgKTsNCi8vDQovLyAgICAgICAgICAkcmV0WyRwYXJhbS0+bmFtZV0gPSAkcGFyYW0tPmdldERlZmF1bHRWYWx1ZSgpOw0KLy8gICAgICAgIH0NCi8vICAgICAgfQ0KLy8NCi8vICAgICAgXGRiZygpLT5kaWUoJHJldCk7DQovLw0KLy8gICAgICByZXR1cm4gJHJldDsNCi8vICAgIH0NCiAgICANCiAgICANCiAgfQ0KICANCn0NCg0KbmFtZXNwYWNlDQp7DQogIA0KICAvKioNCiAgICogaW1wb3J0cyB0aGUgbGliIGludG8gdGhlIGdsb2JhbCBuYW1lc3BhY2UNCiAgICovDQogIA0KICAvKioNCiAgICogdGhpcyBhbGxvd3MgdG8gY2FsbCBhcyBhIGZ1bmN0aW9uIHVzaW5nIGVpdGhlcg0KICAgKiBkYmcoKS0+ZnVuY3Rpb24oJHRhcmdldCk7DQogICAqIG9yDQogICAqIGRiZygkdGFyZ2V0KS0+ZnVuY3Rpb24oKTsNCiAgICovDQogIGlmKCAhXGZ1bmN0aW9uX2V4aXN0cygnZGJnJykgKQ0KICB7DQogICAgZnVuY3Rpb24gZGJnKCRpdGVtID0gTlVMTCkNCiAgICB7DQogICAgICByZXR1cm4gXENNU01TRXh0XGRiZ1xkYmcoJGl0ZW0pOw0KICAgIH0NCiAgfQ0KICANCiAgLyoqDQogICAqIHRoaXMgYWxsb3dzIHN0YXRpYyB1c2UNCiAgICogZGJnOjpmdW5jdGlvbigkdGFyZ2V0KTsNCiAgICovDQogIGlmKCAhXGNsYXNzX2V4aXN0cygnZGJnJykgKQ0KICB7DQogICAgY2xhc3MgZGJnIGV4dGVuZHMgXENNU01TRXh0XGRiZ1xkYmcge30NCiAgfQ0KfQ0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/functions/function.is_serialized.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCm5hbWVzcGFjZSBDTVNNU0V4dA0Kew0KICAvKioNCiAgICogYmFzZWQgb24gaHR0cHM6Ly9kZXZlbG9wZXIud29yZHByZXNzLm9yZy9yZWZlcmVuY2UvZnVuY3Rpb25zL2lzX3NlcmlhbGl6ZWQvDQogICAqDQogICAqIEBwYXJhbSAkZGF0YQ0KICAgKiBAcGFyYW0gJHN0cmljdA0KICAgKg0KICAgKiBAcmV0dXJuIGJvb2wNCiAgICovDQogIGZ1bmN0aW9uIGlzX3NlcmlhbGl6ZWQoJGRhdGEsICRzdHJpY3QgPSBUUlVFKSA6IGJvb2wNCiAgew0KICAgIC8vIElmIGl0IGlzbid0IGEgc3RyaW5nLCBpdCBpc24ndCBzZXJpYWxpemVkLg0KICAgIGlmKCFcaXNfc3RyaW5nKCRkYXRhKSkgeyByZXR1cm4gRkFMU0U7IH0NCiAgICANCiAgICAkZGF0YSA9IFx0cmltKCRkYXRhKTsNCiAgICANCiAgICBpZignTjsnID09PSAkZGF0YSkgeyByZXR1cm4gVFJVRTsgfQ0KICAgIGlmKFxzdHJsZW4oJGRhdGEpIDwgNCkgeyByZXR1cm4gRkFMU0U7IH0NCiAgICBpZignOicgIT09ICRkYXRhWzFdKSB7IHJldHVybiBGQUxTRTsgfQ0KICAgIA0KICAgIGlmKCRzdHJpY3QpDQogICAgew0KICAgICAgJGxhc3RjID0gXHN1YnN0cigkZGF0YSwgLTEpOw0KICAgICAgDQogICAgICBpZignOycgIT09ICRsYXN0YyAmJiAnfScgIT09ICRsYXN0YykgeyByZXR1cm4gRkFMU0U7IH0NCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICRzZW1pY29sb24gPSBcc3RycG9zKCRkYXRhLCAnOycpOw0KICAgICAgJGJyYWNlICAgICA9IFxzdHJwb3MoJGRhdGEsICd9Jyk7DQogICAgICANCiAgICAgIC8vIEVpdGhlciA7IG9yIH0gbXVzdCBleGlzdC4NCiAgICAgIGlmKEZBTFNFID09PSAkc2VtaWNvbG9uICYmIEZBTFNFID09PSAkYnJhY2UpDQogICAgICB7DQogICAgICAgIHJldHVybiBGQUxTRTsNCiAgICAgIH0NCiAgICAgIC8vIEJ1dCBuZWl0aGVyIG11c3QgYmUgaW4gdGhlIGZpcnN0IFggY2hhcmFjdGVycy4NCiAgICAgIGlmKEZBTFNFICE9PSAkc2VtaWNvbG9uICYmICRzZW1pY29sb24gPCAzKSB7IHJldHVybiBGQUxTRTsgfQ0KICAgICAgDQogICAgICBpZihGQUxTRSAhPT0gJGJyYWNlICYmICRicmFjZSA8IDQpIHsgcmV0dXJuIEZBTFNFOyB9DQogICAgfQ0KICAgIA0KICAgICR0b2tlbiA9ICRkYXRhWzBdOw0KICAgIA0KICAgIHN3aXRjaCgkdG9rZW4pDQogICAgew0KICAgICAgY2FzZSAncyc6DQogICAgICAgIGlmKCRzdHJpY3QpDQogICAgICAgIHsNCiAgICAgICAgICBpZignIicgIT09ICRkYXRhW1xzdHJsZW4oJGRhdGEpIC0gMl0pIHsgcmV0dXJuIEZBTFNFOyB9DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiggRkFMU0UgPT09IFxzdHJwb3MoJGRhdGEsICciJykgKQ0KICAgICAgICB7DQogICAgICAgICAgcmV0dXJuIEZBTFNFOw0KICAgICAgICB9DQogICAgICANCiAgICAgIC8vIE9yIGVsc2UgZmFsbCB0aHJvdWdoLg0KICAgICAgY2FzZSAnYSc6DQogICAgICBjYXNlICdPJzoNCiAgICAgICAgcmV0dXJuIChib29sKVxwcmVnX21hdGNoKCIvXnskdG9rZW59OlswLTldKzovcyIsICRkYXRhKTsNCiAgICAgIGNhc2UgJ2InOg0KICAgICAgY2FzZSAnaSc6DQogICAgICBjYXNlICdkJzoNCiAgICAgICAgJGVuZCA9ICRzdHJpY3QgPyAnJCcgOiAnJzsNCiAgICAgICAgDQogICAgICAgIHJldHVybiAoYm9vbClccHJlZ19tYXRjaCgiL157JHRva2VufTpbMC05LkUrLV0rOyRlbmQvIiwgJGRhdGEpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gRkFMU0U7DQogIH0NCn0=]]></data>
	</file>
	<file>
	  <filename>/lib/functions/function.underscore.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogYSBoZWF2aWx5IG1vZGlmaWVkIHZlcnNpb24gb2Y6DQogKi8NCi8qKg0KICogVW5kZXJzY29yZS5waHAgdjEuMy4xDQogKiBDb3B5cmlnaHQgKGMpIDIwMTEgQnJpYW4gSGF2ZXJpDQogKiBVbmRlcnNjb3JlLnBocCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UNCiAqIFVuZGVyc2NvcmUucGhwIHdhcyBpbnNwaXJlZCBieSBhbmQgYm9ycm93ZWQgZnJvbSBVbmRlcnNjb3JlLmpzDQogKiBGb3IgZG9jcywgbGljZW5zZSwgdGVzdHMsIGFuZCBkb3dubG9hZHMsIHNlZTogaHR0cDovL2JyaWFuaGF2ZXJpLmdpdGh1Yi5jb20vVW5kZXJzY29yZS5waHANCiAqLw0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcdW5kZXJzY29yZQ0Kew0KICAvLyBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIF9fIGZvciBPTy1zdHlsZSBjYWxscw0KICBmdW5jdGlvbiBfXygkaXRlbSA9IE5VTEwpDQogIHsNCiAgICAkX18gPSBuZXcgX187DQogICAgaWYoXGZ1bmNfbnVtX2FyZ3MoKSA+IDApIHsgJF9fLT5fd3JhcHBlZCA9ICRpdGVtOyB9DQogIA0KICAgIHJldHVybiAkX187DQogIH0NCiAgDQogIC8vIFVuZGVyc2NvcmUucGhwDQogIGNsYXNzIF9fDQogIHsNCiAgICAvLyBTdGFydCB0aGUgY2hhaW4NCiAgICBwcml2YXRlIGJvb2wgJF9jaGFpbmVkID0gRkFMU0U7IC8vIEFyZSB3ZSBpbiBhIGNoYWluPw0KICANCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoYWluKCRpdGVtID0gTlVMTCkgOiBfXw0KICAgIHsNCiAgICAgIFskaXRlbV0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMSk7DQogIA0KICAgICAgJF9fICAgICAgICAgICA9IChpc3NldCgkdGhpcykgJiYgaXNzZXQoc2VsZjo6JF9jaGFpbmVkKSAmJiBzZWxmOjokX2NoYWluZWQpID8gJHRoaXMgOiBfXygkaXRlbSk7DQogICAgICAkX18tPl9jaGFpbmVkID0gVFJVRTsNCiAgDQogICAgICByZXR1cm4gJF9fOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIEVuZCB0aGUgY2hhaW4NCiAgICBwcml2YXRlIGZ1bmN0aW9uIHZhbHVlKCkNCiAgICB7DQogICAgICByZXR1cm4gKCBpc3NldCgkdGhpcykgKSA/ICR0aGlzLT5fd3JhcHBlZCA6IE5VTEw7DQogICAgfQ0KICANCiAgDQogICAgLy8gSW52b2tlIHRoZSBpdGVyYXRvciBvbiBlYWNoIGl0ZW0gaW4gdGhlIGNvbGxlY3Rpb24NCiAgICBwcml2YXRlIGZ1bmN0aW9uIGVhY2goJGNvbGxlY3Rpb24gPSBOVUxMLCAkaXRlcmF0b3IgPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskY29sbGVjdGlvbiwgJGl0ZXJhdG9yXSA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAyKTsNCiAgDQogICAgICBpZihOVUxMID09PSAkY29sbGVjdGlvbikNCiAgICAgIHsNCiAgICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKE5VTEwpOw0KICAgICAgfQ0KICANCiAgICAgICRjb2xsZWN0aW9uID0gKGFycmF5KXNlbGY6Ol9jb2xsZWN0aW9uKCRjb2xsZWN0aW9uKTsNCiAgICAgIGlmKCAwID09PSBcY291bnQoJGNvbGxlY3Rpb24pICkNCiAgICAgIHsNCiAgICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKE5VTEwpOw0KICAgICAgfQ0KICANCiAgICAgIGZvcmVhY2goJGNvbGxlY3Rpb24gYXMgJGsgPT4gJHYpDQogICAgICB7DQogICAgICAgICRpdGVyYXRvcigkdiwgJGssICRjb2xsZWN0aW9uKTsNCiAgICAgIH0NCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoTlVMTCk7DQogICAgfQ0KICANCiAgDQogICAgLy8gUmV0dXJuIGFuIGFycmF5IG9mIHZhbHVlcyBieSBtYXBwaW5nIGVhY2ggaXRlbSB0aHJvdWdoIHRoZSBpdGVyYXRvcg0KICAgIC8vIG1hcCBhbGlhczogY29sbGVjdA0KICAgIHByaXZhdGUgZnVuY3Rpb24gY29sbGVjdCgkY29sbGVjdGlvbiA9IE5VTEwsICRpdGVyYXRvciA9IE5VTEwpIHsgcmV0dXJuIHNlbGY6Om1hcCgkY29sbGVjdGlvbiwgJGl0ZXJhdG9yKTsgfQ0KICANCiAgICBwcml2YXRlIGZ1bmN0aW9uIG1hcCgkY29sbGVjdGlvbiA9IE5VTEwsICRpdGVyYXRvciA9IE5VTEwpDQogICAgew0KICAgICAgWyRjb2xsZWN0aW9uLCAkaXRlcmF0b3JdID0gc2VsZjo6X3dyYXBBcmdzKFxmdW5jX2dldF9hcmdzKCksIDIpOw0KICANCiAgICAgIGlmKE5VTEwgPT09ICRjb2xsZWN0aW9uKQ0KICAgICAgew0KICAgICAgICByZXR1cm4gc2VsZjo6X3dyYXAoW10pOw0KICAgICAgfQ0KICANCiAgICAgICRjb2xsZWN0aW9uID0gKGFycmF5KXNlbGY6Ol9jb2xsZWN0aW9uKCRjb2xsZWN0aW9uKTsNCiAgICAgIGlmKDAgPT09IFxjb3VudCgkY29sbGVjdGlvbikpDQogICAgICB7DQogICAgICAgIHNlbGY6Ol93cmFwKFtdKTsNCiAgICAgIH0NCiAgDQogICAgICAkcmV0dXJuID0gW107DQogICAgICBmb3JlYWNoKCRjb2xsZWN0aW9uIGFzICRrID0+ICR2KQ0KICAgICAgew0KICAgICAgICAkcmV0dXJuW10gPSAkaXRlcmF0b3IoJHYsICRrLCAkY29sbGVjdGlvbik7DQogICAgICB9DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKCRyZXR1cm4pOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIFJlZHVjZSBhIGNvbGxlY3Rpb24gdG8gYSBzaW5nbGUgdmFsdWUNCiAgICAvLyByZWR1Y2UgYWxpYXNlczogZm9sZGwsIGluamVjdA0KICAgIHByaXZhdGUgZnVuY3Rpb24gZm9sZGwoJGNvbGxlY3Rpb24gPSBOVUxMLCAkaXRlcmF0b3IgPSBOVUxMLCAkbWVtbyA9IE5VTEwpDQogICAgew0KICAgICAgcmV0dXJuIHNlbGY6OnJlZHVjZSgNCiAgICAgICAgJGNvbGxlY3Rpb24sICRpdGVyYXRvciwgJG1lbW8NCiAgICAgICk7DQogICAgfQ0KICANCiAgICBwcml2YXRlIGZ1bmN0aW9uIGluamVjdCgkY29sbGVjdGlvbiA9IE5VTEwsICRpdGVyYXRvciA9IE5VTEwsICRtZW1vID0gTlVMTCkNCiAgICB7DQogICAgICByZXR1cm4gc2VsZjo6cmVkdWNlKA0KICAgICAgICAkY29sbGVjdGlvbiwgJGl0ZXJhdG9yLCAkbWVtbw0KICAgICAgKTsNCiAgICB9DQogIA0KICAgIHByaXZhdGUgZnVuY3Rpb24gcmVkdWNlKCRjb2xsZWN0aW9uID0gTlVMTCwgJGl0ZXJhdG9yID0gTlVMTCwgJG1lbW8gPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskY29sbGVjdGlvbiwgJGl0ZXJhdG9yLCAkbWVtb10gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMyk7DQogIA0KICAgICAgaWYoIVxpc19vYmplY3QoJGNvbGxlY3Rpb24pICYmICFcaXNfYXJyYXkoJGNvbGxlY3Rpb24pKQ0KICAgICAgew0KICAgICAgICBpZihOVUxMID09PSAkbWVtbykNCiAgICAgICAgew0KICAgICAgICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKCdJbnZhbGlkIG9iamVjdCcpOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgIHJldHVybiBzZWxmOjpfd3JhcCgkbWVtbyk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoXGFycmF5X3JlZHVjZSgkY29sbGVjdGlvbiwgJGl0ZXJhdG9yLCAkbWVtbykpOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIFJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24gb2YgcmVkdWNlDQogICAgLy8gcmVkdWNlUmlnaHQgYWxpYXM6IGZvbGRyDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBmb2xkcigkY29sbGVjdGlvbiA9IE5VTEwsICRpdGVyYXRvciA9IE5VTEwsICRtZW1vID0gTlVMTCkNCiAgICB7DQogICAgICByZXR1cm4gc2VsZjo6cmVkdWNlUmlnaHQoDQogICAgICAgICRjb2xsZWN0aW9uLCAkaXRlcmF0b3IsICRtZW1vDQogICAgICApOw0KICAgIH0NCiAgDQogICAgcHJpdmF0ZSBmdW5jdGlvbiByZWR1Y2VSaWdodCgkY29sbGVjdGlvbiA9IE5VTEwsICRpdGVyYXRvciA9IE5VTEwsICRtZW1vID0gTlVMTCkNCiAgICB7DQogICAgICBbJGNvbGxlY3Rpb24sICRpdGVyYXRvciwgJG1lbW9dID0gc2VsZjo6X3dyYXBBcmdzKFxmdW5jX2dldF9hcmdzKCksIDMpOw0KICANCiAgICAgIGlmKCFcaXNfb2JqZWN0KCRjb2xsZWN0aW9uKSAmJiAhXGlzX2FycmF5KCRjb2xsZWN0aW9uKSkNCiAgICAgIHsNCiAgICAgICAgaWYoTlVMTCA9PT0gJG1lbW8pDQogICAgICAgIHsNCiAgICAgICAgICB0aHJvdyBuZXcgXEV4Y2VwdGlvbignSW52YWxpZCBvYmplY3QnKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICByZXR1cm4gc2VsZjo6X3dyYXAoJG1lbW8pOw0KICAgICAgICB9DQogICAgICB9DQogIA0KICAgICAgXGtyc29ydCgkY29sbGVjdGlvbik7DQogIA0KICAgICAgJF9fID0gbmV3IHNlbGY7DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKCRfXy0+cmVkdWNlKCRjb2xsZWN0aW9uLCAkaXRlcmF0b3IsICRtZW1vKSk7DQogICAgfQ0KICANCiAgDQogICAgLy8gRXh0cmFjdCBhbiBhcnJheSBvZiB2YWx1ZXMgZm9yIGEgZ2l2ZW4gcHJvcGVydHkNCiAgICBwcml2YXRlIGZ1bmN0aW9uIHBsdWNrKCRjb2xsZWN0aW9uID0gTlVMTCwgJGtleSA9IE5VTEwpDQogICAgew0KICAgICAgWyRjb2xsZWN0aW9uLCAka2V5XSA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAyKTsNCiAgDQogICAgICAkY29sbGVjdGlvbiA9IChhcnJheSlzZWxmOjpfY29sbGVjdGlvbigkY29sbGVjdGlvbik7DQogIA0KICAgICAgJHJldHVybiA9IFtdOw0KICAgICAgZm9yZWFjaCgkY29sbGVjdGlvbiBhcyAkaXRlbSkNCiAgICAgIHsNCiAgICAgICAgZm9yZWFjaCgkaXRlbSBhcyAkayA9PiAkdikNCiAgICAgICAgew0KICAgICAgICAgIGlmKCRrID09PSAka2V5KQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICRyZXR1cm5bXSA9ICR2Ow0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICANCiAgICAgIHJldHVybiBzZWxmOjpfd3JhcCgkcmV0dXJuKTsNCiAgICB9DQogIA0KICANCiAgICAvLyBEb2VzIHRoZSBjb2xsZWN0aW9uIGNvbnRhaW4gdGhpcyB2YWx1ZT8NCiAgICAvLyBpbmNsdWQgYWxpYXM6IGNvbnRhaW5zDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBjb250YWlucygkY29sbGVjdGlvbiA9IE5VTEwsICR2YWwgPSBOVUxMKSB7IHJldHVybiBzZWxmOjppbmNsdWQoJGNvbGxlY3Rpb24sICR2YWwpOyB9DQogIA0KICAgIHByaXZhdGUgZnVuY3Rpb24gaW5jbHVkKCRjb2xsZWN0aW9uID0gTlVMTCwgJHZhbCA9IE5VTEwpDQogICAgew0KICAgICAgWyRjb2xsZWN0aW9uLCAkdmFsXSA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAyKTsNCiAgDQogICAgICAkY29sbGVjdGlvbiA9IChhcnJheSlzZWxmOjpfY29sbGVjdGlvbigkY29sbGVjdGlvbik7DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKCAoXGluX2FycmF5KCR2YWwsICRjb2xsZWN0aW9uLCBUUlVFKSApICk7DQogICAgfQ0KICANCiAgDQogICAgLy8gSW52b2tlIHRoZSBuYW1lZCBmdW5jdGlvbiBvdmVyIGVhY2ggaXRlbSBpbiB0aGUgY29sbGVjdGlvbiwgb3B0aW9uYWxseSBwYXNzaW5nIGFyZ3VtZW50cyB0byB0aGUgZnVuY3Rpb24NCiAgICBwcml2YXRlIGZ1bmN0aW9uIGludm9rZSgkY29sbGVjdGlvbiA9IE5VTEwsICRmdW5jdGlvbl9uYW1lID0gTlVMTCwgJGFyZ3VtZW50cyA9IE5VTEwpDQogICAgew0KICAgICAgJGFyZ3MgPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMik7DQogICAgICAkX18gICA9IG5ldyBzZWxmOw0KICAgICAgWyRjb2xsZWN0aW9uLCAkZnVuY3Rpb25fbmFtZV0gPSAkX18tPmZpcnN0KCRhcmdzLCAyKTsNCiAgICAgICRhcmd1bWVudHMgPSAkX18tPnJlc3QoXGZ1bmNfZ2V0X2FyZ3MoKSwgMik7DQogIA0KICAgICAgLy8gSWYgcGFzc2VkIGFuIGFycmF5IG9yIHN0cmluZywgcmV0dXJuIGFuIGFycmF5DQogICAgICAvLyBJZiBwYXNzZWQgYW4gb2JqZWN0LCByZXR1cm4gYW4gb2JqZWN0DQogICAgICAkaXNfb2JqID0gXGlzX29iamVjdCgkY29sbGVjdGlvbik7DQogICAgICAkcmVzdWx0ID0gKGVtcHR5KCRhcmd1bWVudHMpKQ0KICAgICAgICA/IFxhcnJheV9tYXAoJGZ1bmN0aW9uX25hbWUsIChhcnJheSkkY29sbGVjdGlvbikNCiAgICAgICAgOiBcYXJyYXlfbWFwKA0KICAgICAgICAgICRmdW5jdGlvbl9uYW1lLCAoYXJyYXkpJGNvbGxlY3Rpb24sICRhcmd1bWVudHMNCiAgICAgICAgKTsNCiAgICAgIGlmKCRpc19vYmopDQogICAgICB7DQogICAgICAgICRyZXN1bHQgPSAob2JqZWN0KSRyZXN1bHQ7DQogICAgICB9DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKCRyZXN1bHQpOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIERvZXMgYW55IHZhbHVlcyBpbiB0aGUgY29sbGVjdGlvbiBtZWV0IHRoZSBpdGVyYXRvcidzIHRydXRoIHRlc3Q/DQogICAgLy8gYW55IGFsaWFzOiBzb21lDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBzb21lKCRjb2xsZWN0aW9uID0gTlVMTCwgJGl0ZXJhdG9yID0gTlVMTCkgeyByZXR1cm4gc2VsZjo6YW55KCRjb2xsZWN0aW9uLCAkaXRlcmF0b3IpOyB9DQogIA0KICAgIHByaXZhdGUgZnVuY3Rpb24gYW55KCRjb2xsZWN0aW9uID0gTlVMTCwgJGl0ZXJhdG9yID0gTlVMTCkNCiAgICB7DQogICAgICBbJGNvbGxlY3Rpb24sICRpdGVyYXRvcl0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMik7DQogIA0KICAgICAgJGNvbGxlY3Rpb24gPSBzZWxmOjpfY29sbGVjdGlvbigkY29sbGVjdGlvbik7DQogIA0KICAgICAgJF9fID0gbmV3IHNlbGY7DQogICAgICBpZihOVUxMICE9PSAkaXRlcmF0b3IpDQogICAgICB7DQogICAgICAgICRjb2xsZWN0aW9uID0gJF9fLT5tYXAoJGNvbGxlY3Rpb24sICRpdGVyYXRvcik7DQogICAgICB9DQogICAgICBpZigwID09PSBcY291bnQoJGNvbGxlY3Rpb24pKQ0KICAgICAgew0KICAgICAgICByZXR1cm4gc2VsZjo6X3dyYXAoRkFMU0UpOw0KICAgICAgfQ0KICANCiAgICAgIHJldHVybiBzZWxmOjpfd3JhcChcaXNfaW50KFxhcnJheV9zZWFyY2goVFJVRSwgJGNvbGxlY3Rpb24sIEZBTFNFKSkpOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIERvIGFsbCB2YWx1ZXMgaW4gdGhlIGNvbGxlY3Rpb24gbWVldCB0aGUgaXRlcmF0b3IncyB0cnV0aCB0ZXN0Pw0KICAgIC8vIGFsbCBhbGlhczogZXZlcnkNCiAgICBwcml2YXRlIGZ1bmN0aW9uIGV2ZXJ5KCRjb2xsZWN0aW9uID0gTlVMTCwgJGl0ZXJhdG9yID0gTlVMTCkgeyByZXR1cm4gc2VsZjo6YWxsKCRjb2xsZWN0aW9uLCAkaXRlcmF0b3IpOyB9DQogIA0KICAgIHByaXZhdGUgZnVuY3Rpb24gYWxsKCRjb2xsZWN0aW9uID0gTlVMTCwgJGl0ZXJhdG9yID0gTlVMTCkNCiAgICB7DQogICAgICBbJGNvbGxlY3Rpb24sICRpdGVyYXRvcl0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMik7DQogIA0KICAgICAgJGNvbGxlY3Rpb24gPSBzZWxmOjpfY29sbGVjdGlvbigkY29sbGVjdGlvbik7DQogIA0KICAgICAgJF9fID0gbmV3IHNlbGY7DQogICAgICBpZihOVUxMICE9PSAkaXRlcmF0b3IpDQogICAgICB7DQogICAgICAgICRjb2xsZWN0aW9uID0gJF9fLT5tYXAoJGNvbGxlY3Rpb24sICRpdGVyYXRvcik7DQogICAgICB9DQogICAgICAkY29sbGVjdGlvbiA9IChhcnJheSkkY29sbGVjdGlvbjsNCiAgICAgIGlmKDAgPT09IFxjb3VudCgkY29sbGVjdGlvbikpDQogICAgICB7DQogICAgICAgIHJldHVybiBUUlVFOw0KICAgICAgfQ0KICANCiAgICAgIHJldHVybiBzZWxmOjpfd3JhcChcaXNfYm9vbChcYXJyYXlfc2VhcmNoKEZBTFNFLCAkY29sbGVjdGlvbiwgRkFMU0UpKSk7DQogICAgfQ0KICANCiAgDQogICAgLy8gUmV0dXJuIGFuIGFycmF5IG9mIHZhbHVlcyB0aGF0IHBhc3MgdGhlIHRydXRoIGl0ZXJhdG9yIHRlc3QNCiAgICAvLyBmaWx0ZXIgYWxpYXM6IHNlbGVjdA0KICAgIHByaXZhdGUgZnVuY3Rpb24gc2VsZWN0KCRjb2xsZWN0aW9uID0gTlVMTCwgJGl0ZXJhdG9yID0gTlVMTCkgeyByZXR1cm4gc2VsZjo6ZmlsdGVyKCRjb2xsZWN0aW9uLCAkaXRlcmF0b3IpOyB9DQogIA0KICAgIHByaXZhdGUgZnVuY3Rpb24gZmlsdGVyKCRjb2xsZWN0aW9uID0gTlVMTCwgJGl0ZXJhdG9yID0gTlVMTCkNCiAgICB7DQogICAgICBbJGNvbGxlY3Rpb24sICRpdGVyYXRvcl0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMik7DQogIA0KICAgICAgJGNvbGxlY3Rpb24gPSBzZWxmOjpfY29sbGVjdGlvbigkY29sbGVjdGlvbik7DQogIA0KICAgICAgJHJldHVybiA9IFtdOw0KICAgICAgZm9yZWFjaCgkY29sbGVjdGlvbiBhcyAkdmFsKQ0KICAgICAgew0KICAgICAgICBpZihcY2FsbF91c2VyX2Z1bmMoJGl0ZXJhdG9yLCAkdmFsKSkNCiAgICAgICAgew0KICAgICAgICAgICRyZXR1cm5bXSA9ICR2YWw7DQogICAgICAgIH0NCiAgICAgIH0NCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoJHJldHVybik7DQogICAgfQ0KICANCiAgDQogICAgLy8gUmV0dXJuIGFuIGFycmF5IHdoZXJlIHRoZSBpdGVtcyBmYWlsaW5nIHRoZSB0cnV0aCB0ZXN0IGFyZSByZW1vdmVkDQogICAgcHJpdmF0ZSBmdW5jdGlvbiByZWplY3QoJGNvbGxlY3Rpb24gPSBOVUxMLCAkaXRlcmF0b3IgPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskY29sbGVjdGlvbiwgJGl0ZXJhdG9yXSA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAyKTsNCiAgDQogICAgICAkY29sbGVjdGlvbiA9IHNlbGY6Ol9jb2xsZWN0aW9uKCRjb2xsZWN0aW9uKTsNCiAgDQogICAgICAkcmV0dXJuID0gW107DQogICAgICBmb3JlYWNoKCRjb2xsZWN0aW9uIGFzICR2YWwpDQogICAgICB7DQogICAgICAgIGlmKCFcY2FsbF91c2VyX2Z1bmMoJGl0ZXJhdG9yLCAkdmFsKSkNCiAgICAgICAgew0KICAgICAgICAgICRyZXR1cm5bXSA9ICR2YWw7DQogICAgICAgIH0NCiAgICAgIH0NCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoJHJldHVybik7DQogICAgfQ0KICANCiAgDQogICAgLy8gUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgaXRlbSBwYXNzaW5nIHRoZSB0cnV0aCBpdGVyYXRvciB0ZXN0DQogICAgLy8gZmluZCBhbGlhczogZGV0ZWN0DQogICAgcHJpdmF0ZSBmdW5jdGlvbiBkZXRlY3QoJGNvbGxlY3Rpb24gPSBOVUxMLCAkaXRlcmF0b3IgPSBOVUxMKSB7IHJldHVybiBzZWxmOjpmaW5kKCRjb2xsZWN0aW9uLCAkaXRlcmF0b3IpOyB9DQogIA0KICAgIHByaXZhdGUgZnVuY3Rpb24gZmluZCgkY29sbGVjdGlvbiA9IE5VTEwsICRpdGVyYXRvciA9IE5VTEwpDQogICAgew0KICAgICAgWyRjb2xsZWN0aW9uLCAkaXRlcmF0b3JdID0gc2VsZjo6X3dyYXBBcmdzKFxmdW5jX2dldF9hcmdzKCksIDIpOw0KICANCiAgICAgICRjb2xsZWN0aW9uID0gc2VsZjo6X2NvbGxlY3Rpb24oJGNvbGxlY3Rpb24pOw0KICANCiAgICAgIGZvcmVhY2goJGNvbGxlY3Rpb24gYXMgJHZhbCkNCiAgICAgIHsNCiAgICAgICAgaWYoJGl0ZXJhdG9yKCR2YWwpKSB7IHJldHVybiAkdmFsOyB9DQogICAgICB9DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKEZBTFNFKTsNCiAgICB9DQogIA0KICANCiAgICAvLyBIb3cgbWFueSBpdGVtcyBhcmUgaW4gdGhpcyBjb2xsZWN0aW9uPw0KICAgIHByaXZhdGUgZnVuY3Rpb24gc2l6ZSgkY29sbGVjdGlvbiA9IE5VTEwpDQogICAgew0KICAgICAgWyRjb2xsZWN0aW9uXSA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAxKTsNCiAgDQogICAgICAkY29sbGVjdGlvbiA9IHNlbGY6Ol9jb2xsZWN0aW9uKCRjb2xsZWN0aW9uKTsNCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoXGNvdW50KChhcnJheSkkY29sbGVjdGlvbikpOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIEdldCB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyBuIHJldHVybnMgdGhlIGZpcnN0IG4gZWxlbWVudHMuDQogICAgLy8gZmlyc3QgYWxpYXM6IGhlYWQNCiAgICBwcml2YXRlIGZ1bmN0aW9uIGhlYWQoJGNvbGxlY3Rpb24gPSBOVUxMLCAkbiA9IE5VTEwpIHsgcmV0dXJuIHNlbGY6OmZpcnN0KCRjb2xsZWN0aW9uLCAkbik7IH0NCiAgDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaXJzdCgkY29sbGVjdGlvbiA9IE5VTEwsICRuID0gTlVMTCkNCiAgICB7DQogICAgICBbJGNvbGxlY3Rpb24sICRuXSA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAyKTsNCiAgDQogICAgICAkY29sbGVjdGlvbiA9IHNlbGY6Ol9jb2xsZWN0aW9uKCRjb2xsZWN0aW9uKTsNCiAgDQogICAgICBpZigwID09PSAkbikNCiAgICAgIHsNCiAgICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKFtdKTsNCiAgICAgIH0NCiAgICAgIGlmKE5VTEwgPT09ICRuKQ0KICAgICAgew0KICAgICAgICByZXR1cm4gc2VsZjo6X3dyYXAoXGN1cnJlbnQoXGFycmF5X3NwbGljZSgkY29sbGVjdGlvbiwgMCwgMSwgVFJVRSkpKTsNCiAgICAgIH0NCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoXGFycmF5X3NwbGljZSgkY29sbGVjdGlvbiwgMCwgJG4sIFRSVUUpKTsNCiAgICB9DQogIA0KICANCiAgICAvLyBHZXQgdGhlIHJlc3Qgb2YgdGhlIGFycmF5IGVsZW1lbnRzLiBQYXNzaW5nIG4gcmV0dXJucyBmcm9tIHRoYXQgaW5kZXggb253YXJkLg0KICAgIHByaXZhdGUgZnVuY3Rpb24gdGFpbCgkY29sbGVjdGlvbiA9IE5VTEwsICRpbmRleCA9IE5VTEwpIHsgcmV0dXJuIHNlbGY6OnJlc3QoJGNvbGxlY3Rpb24sICRpbmRleCk7IH0NCiAgDQogICAgcHJpdmF0ZSBmdW5jdGlvbiByZXN0KCRjb2xsZWN0aW9uID0gTlVMTCwgJGluZGV4ID0gTlVMTCkNCiAgICB7DQogICAgICBbJGNvbGxlY3Rpb24sICRpbmRleF0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMik7DQogIA0KICAgICAgaWYoTlVMTCA9PT0gJGluZGV4KSB7ICRpbmRleCA9IDE7IH0NCiAgDQogICAgICAkY29sbGVjdGlvbiA9IHNlbGY6Ol9jb2xsZWN0aW9uKCRjb2xsZWN0aW9uKTsNCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoXGFycmF5X3NwbGljZSgkY29sbGVjdGlvbiwgJGluZGV4KSk7DQogICAgfQ0KICANCiAgDQogICAgLy8gUmV0dXJuIGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGFycmF5IGVsZW1lbnQuIFBhc3NpbmcgbiBleGNsdWRlcyB0aGUgbGFzdCBuIGVsZW1lbnRzLg0KICAgIHByaXZhdGUgZnVuY3Rpb24gaW5pdGlhbCgkY29sbGVjdGlvbiA9IE5VTEwsICRuID0gTlVMTCkNCiAgICB7DQogICAgICBbJGNvbGxlY3Rpb24sICRuXSA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAyKTsNCiAgDQogICAgICAkY29sbGVjdGlvbiA9IChhcnJheSlzZWxmOjpfY29sbGVjdGlvbigkY29sbGVjdGlvbik7DQogIA0KICAgICAgaWYoTlVMTCA9PT0gJG4pIHsgJG4gPSAxOyB9DQogIA0KICAgICAgJGZpcnN0X2luZGV4ID0gXGNvdW50KCRjb2xsZWN0aW9uKSAtICRuOw0KICAgICAgJF9fICAgICAgICAgID0gbmV3IHNlbGY7DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKCRfXy0+Zmlyc3QoJGNvbGxlY3Rpb24sICRmaXJzdF9pbmRleCkpOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIEdldCB0aGUgbGFzdCBlbGVtZW50IGZyb20gYW4gYXJyYXkuIFBhc3NpbmcgbiByZXR1cm5zIHRoZSBsYXN0IG4gZWxlbWVudHMuDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBsYXN0KCRjb2xsZWN0aW9uID0gTlVMTCwgJG4gPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskY29sbGVjdGlvbiwgJG5dID0gc2VsZjo6X3dyYXBBcmdzKFxmdW5jX2dldF9hcmdzKCksIDIpOw0KICAgICAgJGNvbGxlY3Rpb24gPSBzZWxmOjpfY29sbGVjdGlvbigkY29sbGVjdGlvbik7DQogIA0KICAgICAgaWYoMCA9PT0gJG4pDQogICAgICB7DQogICAgICAgICRyZXN1bHQgPSBbXTsNCiAgICAgIH0NCiAgICAgIGVsc2UgaWYoMSA9PT0gJG4gfHwgTlVMTCA9PT0gJG4pDQogICAgICB7DQogICAgICAgICRyZXN1bHQgPSBcYXJyYXlfcG9wKCRjb2xsZWN0aW9uKTsNCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgJF9fICAgICA9IG5ldyBzZWxmOw0KICAgICAgICAkcmVzdWx0ID0gJF9fLT5yZXN0KCRjb2xsZWN0aW9uLCAtJG4pOw0KICAgICAgfQ0KICANCiAgICAgIHJldHVybiBzZWxmOjpfd3JhcCgkcmVzdWx0KTsNCiAgICB9DQogIA0KICANCiAgICAvLyBSZXR1cm4gYSBjb3B5IG9mIHRoZSBhcnJheSB3aXRoIGZhbHN5IHZhbHVlcyByZW1vdmVkDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBjb21wYWN0KCRjb2xsZWN0aW9uID0gTlVMTCkNCiAgICB7DQogICAgICBbJGNvbGxlY3Rpb25dID0gc2VsZjo6X3dyYXBBcmdzKFxmdW5jX2dldF9hcmdzKCksIDEpOw0KICANCiAgICAgICRjb2xsZWN0aW9uID0gc2VsZjo6X2NvbGxlY3Rpb24oJGNvbGxlY3Rpb24pOw0KICANCiAgICAgICRfXyA9IG5ldyBzZWxmOw0KICANCiAgICAgIHJldHVybiBzZWxmOjpfd3JhcCgNCiAgICAgICAgJF9fLT5zZWxlY3QoJGNvbGxlY3Rpb24sIGZ1bmN0aW9uKCR2YWwpIHsNCiAgICAgICAgICByZXR1cm4gKGJvb2wpJHZhbDsNCiAgICAgICAgfSkNCiAgICAgICk7DQogICAgfQ0KICANCiAgDQogICAgLy8gRmxhdHRlbnMgYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5DQogICAgcHJpdmF0ZSBmdW5jdGlvbiBmbGF0dGVuKCRjb2xsZWN0aW9uID0gTlVMTCwgJHNoYWxsb3cgPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskY29sbGVjdGlvbiwgJHNoYWxsb3ddID0gc2VsZjo6X3dyYXBBcmdzKFxmdW5jX2dldF9hcmdzKCksIDIpOw0KICANCiAgICAgICRjb2xsZWN0aW9uID0gc2VsZjo6X2NvbGxlY3Rpb24oJGNvbGxlY3Rpb24pOw0KICANCiAgICAgICRyZXR1cm4gPSBbXTsNCiAgICAgIGlmKFxjb3VudCgkY29sbGVjdGlvbikgPiAwKQ0KICAgICAgew0KICAgICAgICBmb3JlYWNoKCRjb2xsZWN0aW9uIGFzICRpdGVtKQ0KICAgICAgICB7DQogICAgICAgICAgaWYoXGlzX2FycmF5KCRpdGVtKSkNCiAgICAgICAgICB7DQogICAgICAgICAgICAkX18gICAgID0gbmV3IHNlbGY7DQogICAgICAgICAgICAkcmV0dXJuID0gYXJyYXlfbWVyZ2UoJHJldHVybiwgKCRzaGFsbG93KSA/ICRpdGVtIDogJF9fLT5mbGF0dGVuKCRpdGVtKSk7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICB7DQogICAgICAgICAgICAkcmV0dXJuW10gPSAkaXRlbTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoJHJldHVybik7DQogICAgfQ0KICANCiAgDQogICAgLy8gUmV0dXJucyBhIGNvcHkgb2YgdGhlIGFycmF5IHdpdGggYWxsIGluc3RhbmNlcyBvZiB2YWwgcmVtb3ZlZA0KICAgIHByaXZhdGUgZnVuY3Rpb24gd2l0aG91dCgkY29sbGVjdGlvbiA9IE5VTEwsICR2YWwgPSBOVUxMKQ0KICAgIHsNCiAgICAgICRhcmdzICAgICAgID0gc2VsZjo6X3dyYXBBcmdzKFxmdW5jX2dldF9hcmdzKCksIDEpOw0KICAgICAgJGNvbGxlY3Rpb24gPSAkYXJnc1swXTsNCiAgICAgICRjb2xsZWN0aW9uID0gc2VsZjo6X2NvbGxlY3Rpb24oJGNvbGxlY3Rpb24pOw0KICANCiAgICAgICRudW1fYXJncyA9IFxjb3VudCgkYXJncyk7DQogICAgICBpZigxID09PSAkbnVtX2FyZ3MpIHsgcmV0dXJuIHNlbGY6Ol93cmFwKCRjb2xsZWN0aW9uKTsgfQ0KICANCiAgICAgIGlmKDAgPT09IFxjb3VudCgkY29sbGVjdGlvbikpIHsgcmV0dXJuIHNlbGY6Ol93cmFwKCRjb2xsZWN0aW9uKTsgfQ0KICANCiAgICAgICRfXyAgICAgID0gbmV3IHNlbGY7DQogICAgICAkcmVtb3ZlcyA9ICRfXy0+cmVzdCgkYXJncyk7DQogICAgICBmb3JlYWNoKCRyZW1vdmVzIGFzICRyZW1vdmUpDQogICAgICB7DQogICAgICAgICRyZW1vdmVfa2V5cyA9IFxhcnJheV9rZXlzKCRjb2xsZWN0aW9uLCAkcmVtb3ZlLCBUUlVFKTsNCiAgICAgICAgaWYoXGNvdW50KCRyZW1vdmVfa2V5cykgPiAwKQ0KICAgICAgICB7DQogICAgICAgICAgZm9yZWFjaCgkcmVtb3ZlX2tleXMgYXMgJGtleSkNCiAgICAgICAgICB7DQogICAgICAgICAgICB1bnNldCgkY29sbGVjdGlvblska2V5XSk7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKCRjb2xsZWN0aW9uKTsNCiAgICB9DQogIA0KICANCiAgICAvLyBSZXR1cm4gYW4gYXJyYXkgb2YgdGhlIHVuaXF1ZSB2YWx1ZXMNCiAgICAvLyB1bmlxIGFsaWFzOiB1bmlxdWUNCiAgICBwcml2YXRlIGZ1bmN0aW9uIHVuaXF1ZSgkY29sbGVjdGlvbiA9IE5VTEwsICRpc19zb3J0ZWQgPSBOVUxMLCAkaXRlcmF0b3IgPSBOVUxMKQ0KICAgIHsNCiAgICAgIHJldHVybiBzZWxmOjp1bmlxKA0KICAgICAgICAkY29sbGVjdGlvbiwgJGlzX3NvcnRlZCwgJGl0ZXJhdG9yDQogICAgICApOw0KICAgIH0NCiAgDQogICAgcHJpdmF0ZSBmdW5jdGlvbiB1bmlxKCRjb2xsZWN0aW9uID0gTlVMTCwgJGlzX3NvcnRlZCA9IE5VTEwsICRpdGVyYXRvciA9IE5VTEwpDQogICAgew0KICAgICAgWyRjb2xsZWN0aW9uLCAkaXNfc29ydGVkLCAkaXRlcmF0b3JdID0gc2VsZjo6X3dyYXBBcmdzKFxmdW5jX2dldF9hcmdzKCksIDMpOw0KICANCiAgICAgICRjb2xsZWN0aW9uID0gc2VsZjo6X2NvbGxlY3Rpb24oJGNvbGxlY3Rpb24pOw0KICANCiAgICAgICRyZXR1cm4gPSBbXTsNCiAgICAgIGlmKDAgPT09IFxjb3VudCgkY29sbGVjdGlvbikpDQogICAgICB7DQogICAgICAgIHJldHVybiBzZWxmOjpfd3JhcCgkcmV0dXJuKTsNCiAgICAgIH0NCiAgDQogICAgICAkY2FsY3VsYXRlZCA9IFtdOw0KICAgICAgZm9yZWFjaCgkY29sbGVjdGlvbiBhcyAkaXRlbSkNCiAgICAgIHsNCiAgICAgICAgJHZhbCA9IChOVUxMICE9PSAkaXRlcmF0b3IpID8gJGl0ZXJhdG9yKCRpdGVtKSA6ICRpdGVtOw0KICAgICAgICBpZihcaXNfYm9vbChcYXJyYXlfc2VhcmNoKCR2YWwsICRjYWxjdWxhdGVkLCBUUlVFKSkpDQogICAgICAgIHsNCiAgICAgICAgICAkY2FsY3VsYXRlZFtdID0gJHZhbDsNCiAgICAgICAgICAkcmV0dXJuW10gICAgID0gJGl0ZW07DQogICAgICAgIH0NCiAgICAgIH0NCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoJHJldHVybik7DQogICAgfQ0KICANCiAgDQogICAgLy8gUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBpbnRlcnNlY3Rpb24gb2YgYWxsIHRoZSBhcnJheXMNCiAgICBwcml2YXRlIGZ1bmN0aW9uIGludGVyc2VjdGlvbigkYXJyYXkgPSBOVUxMKQ0KICAgIHsNCiAgICAgICRhcnJheXMgPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMSk7DQogIA0KICAgICAgaWYoMSA9PT0gXGNvdW50KCRhcnJheXMpKQ0KICAgICAgew0KICAgICAgICByZXR1cm4gc2VsZjo6X3dyYXAoJGFycmF5KTsNCiAgICAgIH0NCiAgDQogICAgICAkX18gICAgID0gbmV3IHNlbGY7DQogICAgICAkcmV0dXJuID0gJF9fLT5maXJzdCgkYXJyYXlzKTsNCiAgICAgIGZvcmVhY2goJF9fLT5yZXN0KCRhcnJheXMpIGFzICRuZXh0KQ0KICAgICAgew0KICAgICAgICBpZighJF9fLT5pc0FycmF5KCRuZXh0KSkNCiAgICAgICAgew0KICAgICAgICAgICRuZXh0ID0gc3RyX3NwbGl0KChzdHJpbmcpJG5leHQpOw0KICAgICAgICB9DQogIA0KICAgICAgICAkcmV0dXJuID0gXGFycmF5X2ludGVyc2VjdCgkcmV0dXJuLCAkbmV4dCk7DQogICAgICB9DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKFxhcnJheV92YWx1ZXMoJHJldHVybikpOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIE1lcmdlIHRvZ2V0aGVyIG11bHRpcGxlIGFycmF5cw0KICAgIHByaXZhdGUgZnVuY3Rpb24gdW5pb24oJGFycmF5ID0gTlVMTCkNCiAgICB7DQogICAgICAkYXJyYXlzID0gc2VsZjo6X3dyYXBBcmdzKFxmdW5jX2dldF9hcmdzKCksIDEpOw0KICANCiAgICAgIGlmKDEgPT09IFxjb3VudCgkYXJyYXlzKSkNCiAgICAgIHsNCiAgICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKCRhcnJheSk7DQogICAgICB9DQogIA0KICAgICAgJF9fID0gbmV3IHNlbGY7DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKCRfXy0+ZmxhdHRlbihcYXJyYXlfdmFsdWVzKFxhcnJheV91bmlxdWUoXGFycmF5X21lcmdlKC4uLiRhcnJheXMpKSkpKTsNCiAgICB9DQogIA0KICANCiAgICAvLyBHZXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gYXJyYXlzDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBkaWZmZXJlbmNlKCRhcnJheV9vbmUgPSBOVUxMLCAkYXJyYXlfdHdvID0gTlVMTCkNCiAgICB7DQogICAgICAkYXJyYXlzID0gc2VsZjo6X3dyYXBBcmdzKFxmdW5jX2dldF9hcmdzKCksIDEpOw0KICANCiAgICAgIHJldHVybiBzZWxmOjpfd3JhcChcYXJyYXlfdmFsdWVzKFxhcnJheV9kaWZmKC4uLiRhcnJheXMpKSk7DQogICAgfQ0KICANCiAgDQogICAgLy8gR2V0IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgbWF0Y2gNCiAgICBwcml2YXRlIGZ1bmN0aW9uIGluZGV4T2YoJGNvbGxlY3Rpb24gPSBOVUxMLCAkaXRlbSA9IE5VTEwpDQogICAgew0KICAgICAgWyRjb2xsZWN0aW9uLCAkaXRlbV0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMik7DQogIA0KICAgICAgJGNvbGxlY3Rpb24gPSBzZWxmOjpfY29sbGVjdGlvbigkY29sbGVjdGlvbik7DQogIA0KICAgICAgJGtleSA9IFxhcnJheV9zZWFyY2goJGl0ZW0sICRjb2xsZWN0aW9uLCBUUlVFKTsNCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoKFxpc19ib29sKCRrZXkpKSA/IC0xIDogJGtleSk7DQogICAgfQ0KICANCiAgDQogICAgLy8gR2V0IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBtYXRjaA0KICAgIHByaXZhdGUgZnVuY3Rpb24gbGFzdEluZGV4T2YoJGNvbGxlY3Rpb24gPSBOVUxMLCAkaXRlbSA9IE5VTEwpDQogICAgew0KICAgICAgWyRjb2xsZWN0aW9uLCAkaXRlbV0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMik7DQogIA0KICAgICAgJGNvbGxlY3Rpb24gPSBzZWxmOjpfY29sbGVjdGlvbigkY29sbGVjdGlvbik7DQogIA0KICAgICAgXGtyc29ydCgkY29sbGVjdGlvbik7DQogICAgICAkX18gPSBuZXcgc2VsZjsNCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoJF9fLT5pbmRleE9mKCRjb2xsZWN0aW9uLCAkaXRlbSkpOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIFJldHVybnMgYW4gYXJyYXkgb2YgaW50ZWdlcnMgZnJvbSBzdGFydCB0byBzdG9wIChleGNsdXNpdmUpIGJ5IHN0ZXANCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJhbmdlKCRzdG9wID0gTlVMTCkNCiAgICB7DQogICAgICAkYXJncyA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAxKTsNCiAgDQogICAgICAkX18gICA9IG5ldyBzZWxmOw0KICAgICAgJGFyZ3MgPSAkX18tPnJlamVjdCgkYXJncywgZnVuY3Rpb24oJHZhbCkgew0KICAgICAgICByZXR1cm4gTlVMTCA9PT0gJHZhbDsNCiAgICAgIH0pOw0KICANCiAgICAgICRudW1fYXJncyA9IFxjb3VudCgkYXJncyk7DQogICAgICBzd2l0Y2goJG51bV9hcmdzKQ0KICAgICAgew0KICAgICAgICBjYXNlIDE6DQogICAgICAgICAgWyRzdGFydCwgJHN0b3AsICRzdGVwXSA9IFswLCAkYXJnc1swXSwgMV07DQogICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIDI6DQogICAgICAgICAgWyRzdGFydCwgJHN0b3AsICRzdGVwXSA9IFskYXJnc1swXSwgJGFyZ3NbMV0sIDFdOw0KICAgICAgICAgIGlmKCRzdG9wIDwgJHN0YXJ0KQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIHJldHVybiBzZWxmOjpfd3JhcChbXSk7DQogICAgICAgICAgfQ0KICAgICAgICBicmVhazsNCiAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICBbJHN0YXJ0LCAkc3RvcCwgJHN0ZXBdID0gWyRhcmdzWzBdLCAkYXJnc1sxXSwgJGFyZ3NbMl1dOw0KICAgICAgICAgIGlmKCRzdGVwID4gMCAmJiAkc3RlcCA+ICRzdG9wKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIHJldHVybiBzZWxmOjpfd3JhcChbJHN0YXJ0XSk7DQogICAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgJHJlc3VsdHMgPSBccmFuZ2UoJHN0YXJ0LCAkc3RvcCwgJHN0ZXApOw0KICANCiAgICAgIC8vIFN3aXRjaCBpbmNsdXNpdmUgdG8gZXhjbHVzaXZlDQogICAgICBpZigkc3RlcCA+IDAgJiYgJF9fLT5sYXN0KCRyZXN1bHRzKSA+PSAkc3RvcCkNCiAgICAgIHsNCiAgICAgICAgXGFycmF5X3BvcCgkcmVzdWx0cyk7DQogICAgICB9DQogICAgICBlbHNlIGlmKCRzdGVwIDwgMCAmJiAkX18tPmxhc3QoJHJlc3VsdHMpIDw9ICRzdG9wKQ0KICAgICAgew0KICAgICAgICBcYXJyYXlfcG9wKCRyZXN1bHRzKTsNCiAgICAgIH0NCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoJHJlc3VsdHMpOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIE1lcmdlcyBhcnJheXMNCiAgICBwcml2YXRlIGZ1bmN0aW9uIHppcCgkYXJyYXkgPSBOVUxMKQ0KICAgIHsNCiAgICAgICRhcnJheXMgICAgID0gc2VsZjo6X3dyYXBBcmdzKFxmdW5jX2dldF9hcmdzKCkpOw0KICAgICAgJG51bV9hcnJheXMgPSBcY291bnQoJGFycmF5cyk7DQogIA0KICAgICAgaWYoMSA9PT0gJG51bV9hcnJheXMpDQogICAgICB7DQogICAgICAgIHJldHVybiBzZWxmOjpfd3JhcCgkYXJyYXkpOw0KICAgICAgfQ0KICANCiAgICAgICRfXyAgICAgICAgICAgICAgICA9IG5ldyBzZWxmOw0KICAgICAgJG51bV9yZXR1cm5fYXJyYXlzID0gJF9fLT5tYXgoDQogICAgICAgICRfXy0+bWFwKCRhcnJheXMsIGZ1bmN0aW9uKCRhcnJheSkgew0KICAgICAgICAgIHJldHVybiBcY291bnQoJGFycmF5KTsNCiAgICAgICAgfSkNCiAgICAgICk7DQogICAgICAkcmV0dXJuX2FycmF5cyAgICAgPSAkX18tPnJhbmdlKCRudW1fcmV0dXJuX2FycmF5cyk7DQogIA0KICAgICAgZm9yZWFjaCgkcmV0dXJuX2FycmF5cyBhcyAkayA9PiAkdikNCiAgICAgIHsNCiAgICAgICAgaWYoIVxpc19hcnJheSgkdikpDQogICAgICAgIHsNCiAgICAgICAgICAkcmV0dXJuX2FycmF5c1ska10gPSBbXTsNCiAgICAgICAgfQ0KICANCiAgICAgICAgZm9yZWFjaCgkYXJyYXlzIGFzICRhID0+ICRvbmUpDQogICAgICAgIHsNCiAgICAgICAgICAkcmV0dXJuX2FycmF5c1ska11bJGFdID0gJG9uZVska10gPz8gTlVMTDsNCiAgICAgICAgfQ0KICAgICAgfQ0KICANCiAgICAgIHJldHVybiBzZWxmOjpfd3JhcCgkcmV0dXJuX2FycmF5cyk7DQogICAgfQ0KICANCiAgDQogICAgLy8gR2V0IHRoZSBtYXggdmFsdWUgaW4gdGhlIGNvbGxlY3Rpb24NCiAgICBwcml2YXRlIGZ1bmN0aW9uIG1heCgkY29sbGVjdGlvbiA9IE5VTEwsICRpdGVyYXRvciA9IE5VTEwpDQogICAgew0KICAgICAgWyRjb2xsZWN0aW9uLCAkaXRlcmF0b3JdID0gc2VsZjo6X3dyYXBBcmdzKFxmdW5jX2dldF9hcmdzKCksIDIpOw0KICANCiAgICAgIGlmKE5VTEwgPT09ICRpdGVyYXRvcikNCiAgICAgIHsNCiAgICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKFxtYXgoJGNvbGxlY3Rpb24pKTsNCiAgICAgIH0NCiAgDQogICAgICAkcmVzdWx0cyA9IFtdOw0KICAgICAgZm9yZWFjaCgkY29sbGVjdGlvbiBhcyAkayA9PiAkaXRlbSkNCiAgICAgIHsNCiAgICAgICAgJHJlc3VsdHNbJGtdID0gJGl0ZXJhdG9yKCRpdGVtKTsNCiAgICAgIH0NCiAgICAgIFxhcnNvcnQoJHJlc3VsdHMpOw0KICAgICAgJF9fICAgICAgICA9IG5ldyBzZWxmOw0KICAgICAgJGZpcnN0X2tleSA9ICRfXy0+Zmlyc3QoXGFycmF5X2tleXMoJHJlc3VsdHMpKTsNCiAgDQogICAgICByZXR1cm4gJGNvbGxlY3Rpb25bJGZpcnN0X2tleV07DQogICAgfQ0KICANCiAgDQogICAgLy8gR2V0IHRoZSBtaW4gdmFsdWUgaW4gdGhlIGNvbGxlY3Rpb24NCiAgICBwcml2YXRlIGZ1bmN0aW9uIG1pbigkY29sbGVjdGlvbiA9IE5VTEwsICRpdGVyYXRvciA9IE5VTEwpDQogICAgew0KICAgICAgWyRjb2xsZWN0aW9uLCAkaXRlcmF0b3JdID0gc2VsZjo6X3dyYXBBcmdzKFxmdW5jX2dldF9hcmdzKCksIDIpOw0KICANCiAgICAgIGlmKE5VTEwgPT09ICRpdGVyYXRvcikNCiAgICAgIHsNCiAgICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKFxtaW4oJGNvbGxlY3Rpb24pKTsNCiAgICAgIH0NCiAgDQogICAgICAkcmVzdWx0cyA9IFtdOw0KICAgICAgZm9yZWFjaCgkY29sbGVjdGlvbiBhcyAkayA9PiAkaXRlbSkNCiAgICAgIHsNCiAgICAgICAgJHJlc3VsdHNbJGtdID0gJGl0ZXJhdG9yKCRpdGVtKTsNCiAgICAgIH0NCiAgICAgIFxhc29ydCgkcmVzdWx0cyk7DQogICAgICAkX18gICAgICAgID0gbmV3IHNlbGY7DQogICAgICAkZmlyc3Rfa2V5ID0gJF9fLT5maXJzdChcYXJyYXlfa2V5cygkcmVzdWx0cykpOw0KICANCiAgICAgIHJldHVybiBzZWxmOjpfd3JhcCgkY29sbGVjdGlvblskZmlyc3Rfa2V5XSk7DQogICAgfQ0KICANCiAgDQogICAgLy8gU29ydCB0aGUgY29sbGVjdGlvbiBieSByZXR1cm4gdmFsdWVzIGZyb20gdGhlIGl0ZXJhdG9yDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBzb3J0QnkoJGNvbGxlY3Rpb24gPSBOVUxMLCAkaXRlcmF0b3IgPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskY29sbGVjdGlvbiwgJGl0ZXJhdG9yXSA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAyKTsNCiAgDQogICAgICAkcmVzdWx0cyA9IFtdOw0KICAgICAgZm9yZWFjaCgkY29sbGVjdGlvbiBhcyAkayA9PiAkaXRlbSkNCiAgICAgIHsNCiAgICAgICAgJHJlc3VsdHNbJGtdID0gJGl0ZXJhdG9yKCRpdGVtKTsNCiAgICAgIH0NCiAgICAgIFxhc29ydCgkcmVzdWx0cyk7DQogICAgICBmb3JlYWNoKCRyZXN1bHRzIGFzICRrID0+ICR2KQ0KICAgICAgew0KICAgICAgICAkcmVzdWx0c1ska10gPSAkY29sbGVjdGlvblska107DQogICAgICB9DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKFxhcnJheV92YWx1ZXMoJHJlc3VsdHMpKTsNCiAgICB9DQogICAgDQogICAgLy8gR3JvdXAgdGhlIGNvbGxlY3Rpb24gYnkgcmV0dXJuIHZhbHVlcyBmcm9tIHRoZSBpdGVyYXRvcg0KICAgIHByaXZhdGUgZnVuY3Rpb24gZ3JvdXBCeSgkY29sbGVjdGlvbiA9IE5VTEwsICRpdGVyYXRvciA9IE5VTEwpDQogICAgew0KICAgICAgWyRjb2xsZWN0aW9uLCAkaXRlcmF0b3JdID0gc2VsZjo6X3dyYXBBcmdzKFxmdW5jX2dldF9hcmdzKCksIDIpOw0KICANCiAgICAgICRyZXN1bHQgICAgID0gW107DQogICAgICAkY29sbGVjdGlvbiA9IChhcnJheSkkY29sbGVjdGlvbjsNCiAgICAgIGZvcmVhY2goJGNvbGxlY3Rpb24gYXMgJGsgPT4gJHYpDQogICAgICB7DQogICAgICAgICRrZXkgPSAoXGlzX2NhbGxhYmxlKCRpdGVyYXRvcikpID8gJGl0ZXJhdG9yKCR2LCAkaykgOiAkdlskaXRlcmF0b3JdOw0KICAgICAgICBpZighXGFycmF5X2tleV9leGlzdHMoJGtleSwgJHJlc3VsdCkpDQogICAgICAgIHsNCiAgICAgICAgICAkcmVzdWx0WyRrZXldID0gW107DQogICAgICAgIH0NCiAgICAgICAgJHJlc3VsdFska2V5XVtdID0gJHY7DQogICAgICB9DQogIA0KICAgICAgcmV0dXJuICRyZXN1bHQ7DQogICAgfQ0KICANCiAgDQogICAgLy8gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIHZhbHVlIHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBzb3J0ZWQgY29sbGVjdGlvbg0KICAgIHByaXZhdGUgZnVuY3Rpb24gc29ydGVkSW5kZXgoJGNvbGxlY3Rpb24gPSBOVUxMLCAkdmFsdWUgPSBOVUxMLCAkaXRlcmF0b3IgPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskY29sbGVjdGlvbiwgJHZhbHVlLCAkaXRlcmF0b3JdID0gc2VsZjo6X3dyYXBBcmdzKFxmdW5jX2dldF9hcmdzKCksIDMpOw0KICANCiAgICAgICRjb2xsZWN0aW9uID0gKGFycmF5KXNlbGY6Ol9jb2xsZWN0aW9uKCRjb2xsZWN0aW9uKTsNCiAgICAgICRfXyAgICAgICAgID0gbmV3IHNlbGY7DQogIA0KICAgICAgJGNhbGN1bGF0ZWRfdmFsdWUgPSAoTlVMTCAhPT0gJGl0ZXJhdG9yKSA/ICRpdGVyYXRvcigkdmFsdWUpIDogJHZhbHVlOw0KICANCiAgICAgIHdoaWxlKFxjb3VudCgkY29sbGVjdGlvbikgPiAxKQ0KICAgICAgew0KICAgICAgICAkbWlkcG9pbnQgICAgICAgICAgICAgICAgICA9IFxmbG9vcihcY291bnQoJGNvbGxlY3Rpb24pIC8gMik7DQogICAgICAgICRtaWRwb2ludF92YWx1ZXMgICAgICAgICAgID0gXGFycmF5X3NsaWNlKCRjb2xsZWN0aW9uLCAkbWlkcG9pbnQsIDEpOw0KICAgICAgICAkbWlkcG9pbnRfdmFsdWUgICAgICAgICAgICA9ICRtaWRwb2ludF92YWx1ZXNbMF07DQogICAgICAgICRtaWRwb2ludF9jYWxjdWxhdGVkX3ZhbHVlID0gKE5VTEwgIT09ICRpdGVyYXRvcikgPyAkaXRlcmF0b3IoJG1pZHBvaW50X3ZhbHVlKSA6ICRtaWRwb2ludF92YWx1ZTsNCiAgDQogICAgICAgICRjb2xsZWN0aW9uID0gKCRjYWxjdWxhdGVkX3ZhbHVlIDwgJG1pZHBvaW50X2NhbGN1bGF0ZWRfdmFsdWUpID8gXGFycmF5X3NsaWNlKCRjb2xsZWN0aW9uLCAwLCAkbWlkcG9pbnQsIFRSVUUpDQogICAgICAgICAgOiBcYXJyYXlfc2xpY2UoJGNvbGxlY3Rpb24sICRtaWRwb2ludCwgTlVMTCwgVFJVRSk7DQogICAgICB9DQogICAgICAka2V5cyA9IFxhcnJheV9rZXlzKCRjb2xsZWN0aW9uKTsNCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoXGN1cnJlbnQoJGtleXMpICsgMSk7DQogICAgfQ0KICANCiAgICAvLyBcc2h1ZmZsZSB0aGUgYXJyYXkNCiAgICBwcml2YXRlIGZ1bmN0aW9uIHNodWZmbGUoJGNvbGxlY3Rpb24gPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskY29sbGVjdGlvbl0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMSk7DQogIA0KICAgICAgJGNvbGxlY3Rpb24gPSAoYXJyYXkpc2VsZjo6X2NvbGxlY3Rpb24oJGNvbGxlY3Rpb24pOw0KICAgICAgXHNodWZmbGUoJGNvbGxlY3Rpb24pOw0KICANCiAgICAgIHJldHVybiBzZWxmOjpfd3JhcCgkY29sbGVjdGlvbik7DQogICAgfQ0KICANCiAgDQogICAgLy8gUmV0dXJuIHRoZSBjb2xsZWN0aW9uIGFzIGFuIGFycmF5DQogICAgcHJpdmF0ZSBmdW5jdGlvbiB0b0FycmF5KCRjb2xsZWN0aW9uID0gTlVMTCkNCiAgICB7DQogICAgICByZXR1cm4gKGFycmF5KSRjb2xsZWN0aW9uOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIEdldCB0aGUgY29sbGVjdGlvbidzIGtleXMNCiAgICBwcml2YXRlIGZ1bmN0aW9uIGtleXMoJGNvbGxlY3Rpb24gPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskY29sbGVjdGlvbl0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMSk7DQogIA0KICAgICAgaWYoIVxpc19vYmplY3QoJGNvbGxlY3Rpb24pICYmICFcaXNfYXJyYXkoJGNvbGxlY3Rpb24pKQ0KICAgICAgew0KICAgICAgICB0aHJvdyBuZXcgXEV4Y2VwdGlvbignSW52YWxpZCBvYmplY3QnKTsNCiAgICAgIH0NCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoXGFycmF5X2tleXMoKGFycmF5KSRjb2xsZWN0aW9uKSk7DQogICAgfQ0KICANCiAgDQogICAgLy8gR2V0IHRoZSBjb2xsZWN0aW9uJ3MgdmFsdWVzDQogICAgcHJpdmF0ZSBmdW5jdGlvbiB2YWx1ZXMoJGNvbGxlY3Rpb24gPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskY29sbGVjdGlvbl0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMSk7DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKFxhcnJheV92YWx1ZXMoKGFycmF5KSRjb2xsZWN0aW9uKSk7DQogICAgfQ0KICANCiAgDQogICAgLy8gQ29weSBhbGwgcHJvcGVydGllcyBmcm9tIHRoZSBzb3VyY2Ugb2JqZWN0cyBpbnRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QNCiAgICBwcml2YXRlIGZ1bmN0aW9uIGV4dGVuZCgkb2JqZWN0ID0gTlVMTCkNCiAgICB7DQogICAgICAkYXJncyA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAxKTsNCiAgDQogICAgICAkbnVtX2FyZ3MgPSBcZnVuY19udW1fYXJncygpOw0KICAgICAgaWYoMSA9PT0gJG51bV9hcmdzKQ0KICAgICAgew0KICAgICAgICByZXR1cm4gJG9iamVjdDsNCiAgICAgIH0NCiAgDQogICAgICAkaXNfb2JqZWN0ICA9IFxpc19vYmplY3QoJG9iamVjdCk7DQogICAgICAkYXJyYXkgICAgICA9IChhcnJheSkkb2JqZWN0Ow0KICAgICAgJF9fICAgICAgICAgPSBuZXcgc2VsZjsNCiAgICAgICRleHRlbnNpb25zID0gJF9fLT5yZXN0KFxmdW5jX2dldF9hcmdzKCkpOw0KICAgICAgZm9yZWFjaCgkZXh0ZW5zaW9ucyBhcyAkZXh0ZW5zaW9uKQ0KICAgICAgew0KICAgICAgICAkZXh0ZW5zaW9uID0gKGFycmF5KSRleHRlbnNpb247DQogICAgICAgICRhcnJheSAgICAgPSBhcnJheV9tZXJnZSgkYXJyYXksICRleHRlbnNpb24pOw0KICAgICAgfQ0KICANCiAgICAgIHJldHVybiBzZWxmOjpfd3JhcCgoJGlzX29iamVjdCkgPyAob2JqZWN0KSRhcnJheSA6ICRhcnJheSk7DQogICAgfQ0KICANCiAgDQogICAgLy8gUmV0dXJucyB0aGUgb2JqZWN0IHdpdGggYW55IG1pc3NpbmcgdmFsdWVzIGZpbGxlZCBpbiB1c2luZyB0aGUgZGVmYXVsdHMuDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBkZWZhdWx0cygkb2JqZWN0ID0gTlVMTCkNCiAgICB7DQogICAgICAkYXJncyA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAxKTsNCiAgICAgIFskb2JqZWN0XSA9ICRhcmdzOw0KICANCiAgICAgICRudW1fYXJncyA9IFxjb3VudCgkYXJncyk7DQogICAgICBpZigxID09PSAkbnVtX2FyZ3MpDQogICAgICB7DQogICAgICAgIHJldHVybiAkb2JqZWN0Ow0KICAgICAgfQ0KICANCiAgICAgICRpc19vYmplY3QgID0gXGlzX29iamVjdCgkb2JqZWN0KTsNCiAgICAgICRhcnJheSAgICAgID0gKGFycmF5KSRvYmplY3Q7DQogICAgICAkX18gICAgICAgICA9IG5ldyBzZWxmOw0KICAgICAgJGV4dGVuc2lvbnMgPSAkX18tPnJlc3QoJGFyZ3MpOw0KICAgICAgZm9yZWFjaCgkZXh0ZW5zaW9ucyBhcyAkZXh0ZW5zaW9uKQ0KICAgICAgew0KICAgICAgICAkZXh0ZW5zaW9uID0gKGFycmF5KSRleHRlbnNpb247DQogICAgICAgICRhcnJheSAgICAgPSBhcnJheV9tZXJnZSgkZXh0ZW5zaW9uLCAkYXJyYXkpOw0KICAgICAgfQ0KICANCiAgICAgIHJldHVybiBzZWxmOjpfd3JhcCgoJGlzX29iamVjdCkgPyAob2JqZWN0KSRhcnJheSA6ICRhcnJheSk7DQogICAgfQ0KICANCiAgDQogICAgLy8gR2V0IHRoZSBuYW1lcyBvZiBmdW5jdGlvbnMgYXZhaWxhYmxlIHRvIHRoZSBvYmplY3QNCiAgICAvLyBmdW5jdGlvbnMgYWxpYXM6IG1ldGhvZHMNCiAgICBwcml2YXRlIGZ1bmN0aW9uIG1ldGhvZHMoJG9iamVjdCA9IE5VTEwpIHsgcmV0dXJuIHNlbGY6OmZ1bmN0aW9ucygkb2JqZWN0KTsgfQ0KICANCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZ1bmN0aW9ucygkb2JqZWN0ID0gTlVMTCkNCiAgICB7DQogICAgICBbJG9iamVjdF0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMSk7DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKFxnZXRfY2xhc3NfbWV0aG9kcyhcZ2V0X2NsYXNzKCRvYmplY3QpKSk7DQogICAgfQ0KICANCiAgDQogICAgLy8gUmV0dXJucyBhIHNoYWxsb3cgY29weSBvZiB0aGUgb2JqZWN0DQogICAgcHJpdmF0ZSBmdW5jdGlvbiBjbG9uKCYkb2JqZWN0ID0gTlVMTCkNCiAgICB7DQogICAgICBbJG9iamVjdF0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMSk7DQogIA0KICAgICAgJGNsb25lID0gTlVMTDsNCiAgICAgIGlmKFxpc19hcnJheSgkb2JqZWN0KSkNCiAgICAgIHsNCiAgICAgICAgJG9iamVjdCA9IChvYmplY3QpICRvYmplY3Q7DQogICAgICAgICRjbG9uZSAgPSAoYXJyYXkpIGNsb25lICRvYmplY3Q7DQogICAgICB9DQogICAgICBlbHNlIGlmKCFcaXNfb2JqZWN0KCRvYmplY3QpKQ0KICAgICAgew0KICAgICAgICAkY2xvbmUgPSAkb2JqZWN0Ow0KICAgICAgfQ0KICAgICAgZWxzZSBpZighJGNsb25lKQ0KICAgICAgew0KICAgICAgICAkY2xvbmUgPSBjbG9uZSAkb2JqZWN0Ow0KICAgICAgfQ0KICANCiAgICAgIC8vIHNoYWxsb3cgY29weSBvYmplY3QNCiAgICAgIGlmKFxpc19vYmplY3QoJGNsb25lKSAmJiBcY291bnQoJGNsb25lKSA+IDApDQogICAgICB7DQogICAgICAgIGZvcmVhY2goJGNsb25lIGFzICRrID0+ICR2KQ0KICAgICAgICB7DQogICAgICAgICAgaWYoXGlzX2FycmF5KCR2KSB8fCBcaXNfb2JqZWN0KCR2KSkNCiAgICAgICAgICB7DQogICAgICAgICAgICAkY2xvbmUtPiRrID0mICRvYmplY3QtPiRrOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICANCiAgICAgIC8vIHNoYWxsb3cgY29weSBhcnJheQ0KICAgICAgZWxzZSBpZihcaXNfYXJyYXkoJGNsb25lKSAmJiBcY291bnQoJGNsb25lKSA+IDApDQogICAgICB7DQogICAgICAgIGZvcmVhY2goJGNsb25lIGFzICRrID0+ICR2KQ0KICAgICAgICB7DQogICAgICAgICAgaWYoXGlzX2FycmF5KCR2KSB8fCBcaXNfb2JqZWN0KCR2KSkNCiAgICAgICAgICB7DQogICAgICAgICAgICAkY2xvbmVbJGtdID0mICRvYmplY3RbJGtdOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKCRjbG9uZSk7DQogICAgfQ0KICANCiAgDQogICAgLy8gSW52b2tlcyB0aGUgaW50ZXJjZXB0b3Igb24gdGhlIG9iamVjdCwgdGhlbiByZXR1cm5zIHRoZSBvYmplY3QNCiAgICBwcml2YXRlIGZ1bmN0aW9uIHRhcCgkb2JqZWN0ID0gTlVMTCwgJGludGVyY2VwdG9yID0gTlVMTCkNCiAgICB7DQogICAgICBbJG9iamVjdCwgJGludGVyY2VwdG9yXSA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAyKTsNCiAgDQogICAgICAkaW50ZXJjZXB0b3IoJG9iamVjdCk7DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKCRvYmplY3QpOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIERvZXMgdGhlIGdpdmVuIGtleSBleGlzdD8NCiAgICBwcml2YXRlIGZ1bmN0aW9uIGhhcygkY29sbGVjdGlvbiA9IE5VTEwsICRrZXkgPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskY29sbGVjdGlvbiwgJGtleV0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMik7DQogIA0KICAgICAgJGNvbGxlY3Rpb24gPSAoYXJyYXkpc2VsZjo6X2NvbGxlY3Rpb24oJGNvbGxlY3Rpb24pOw0KICANCiAgICAgIHJldHVybiBzZWxmOjpfd3JhcChcYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkY29sbGVjdGlvbikpOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIEFyZSB0aGVzZSBpdGVtcyBlcXVhbD8NCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzRXF1YWwoJGEgPSBOVUxMLCAkYiA9IE5VTEwpDQogICAgew0KICAgICAgWyRhLCAkYl0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMik7DQogIA0KICAgICAgaWYoaXNzZXQoJHRoaXMpICYmIGlzc2V0KHNlbGY6OiRfY2hhaW5lZCkgJiYgc2VsZjo6JF9jaGFpbmVkKQ0KICAgICAgew0KICAgICAgICAkYSA9JiAkdGhpczsNCiAgICAgIH0NCiAgDQogICAgICBpZigkYSA9PT0gJGIpDQogICAgICB7DQogICAgICAgIHJldHVybiBzZWxmOjpfd3JhcChUUlVFKTsNCiAgICAgIH0NCiAgICAgIGlmKFxnZXR0eXBlKCRhKSAhPT0gXGdldHR5cGUoJGIpKQ0KICAgICAgew0KICAgICAgICByZXR1cm4gc2VsZjo6X3dyYXAoRkFMU0UpOw0KICAgICAgfQ0KICAgICAgaWYoXGlzX2NhbGxhYmxlKCRhKSAhPT0gXGlzX2NhbGxhYmxlKCRiKSkNCiAgICAgIHsNCiAgICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKEZBTFNFKTsNCiAgICAgIH0NCiAgDQogICAgICBpZigkYSA9PSAkYikNCiAgICAgIHsNCiAgICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKFRSVUUpOw0KICAgICAgfQ0KICANCiAgICAgIC8vIE9iamVjdHMgYW5kIGFycmF5cyBjb21wYXJlZCBieSB2YWx1ZXMNCiAgICAgIGlmKFxpc19vYmplY3QoJGEpIHx8IFxpc19hcnJheSgkYSkpDQogICAgICB7DQogIA0KICAgICAgICAvLyBEbyBlaXRoZXIgaW1wbGVtZW50IGlzRXF1YWwoKT8NCiAgICAgICAgaWYoXGlzX29iamVjdCgkYSkgJiYgaXNzZXQoJGEtPmlzRXF1YWwpKQ0KICAgICAgICB7DQogICAgICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKCRhLT5pc0VxdWFsKCRiKSk7DQogICAgICAgIH0NCiAgICAgICAgaWYoXGlzX29iamVjdCgkYikgJiYgaXNzZXQoJGItPmlzRXF1YWwpKQ0KICAgICAgICB7DQogICAgICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKCRiLT5pc0VxdWFsKCRhKSk7DQogICAgICAgIH0NCiAgICAgICAgaWYoXGlzX2FycmF5KCRhKSAmJiBcYXJyYXlfa2V5X2V4aXN0cygnaXNFcXVhbCcsICRhKSkNCiAgICAgICAgew0KICAgICAgICAgIHJldHVybiBzZWxmOjpfd3JhcCgkYVsnaXNFcXVhbCddKCRiKSk7DQogICAgICAgIH0NCiAgICAgICAgaWYoXGlzX2FycmF5KCRiKSAmJiBcYXJyYXlfa2V5X2V4aXN0cygnaXNFcXVhbCcsICRiKSkNCiAgICAgICAgew0KICAgICAgICAgIHJldHVybiBzZWxmOjpfd3JhcCgkYlsnaXNFcXVhbCddKCRhKSk7DQogICAgICAgIH0NCiAgDQogICAgICAgIGlmKFxjb3VudCgkYSkgIT09IFxjb3VudCgkYikpDQogICAgICAgIHsNCiAgICAgICAgICByZXR1cm4gc2VsZjo6X3dyYXAoRkFMU0UpOw0KICAgICAgICB9DQogIA0KICAgICAgICAkX18gICAgICAgICAgID0gbmV3IHNlbGY7DQogICAgICAgICRrZXlzX2VxdWFsICAgPSAkX18tPmlzRXF1YWwoJF9fLT5rZXlzKCRhKSwgJF9fLT5rZXlzKCRiKSk7DQogICAgICAgICR2YWx1ZXNfZXF1YWwgPSAkX18tPmlzRXF1YWwoJF9fLT52YWx1ZXMoJGEpLCAkX18tPnZhbHVlcygkYikpOw0KICANCiAgICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKCRrZXlzX2VxdWFsICYmICR2YWx1ZXNfZXF1YWwpOw0KICAgICAgfQ0KICANCiAgICAgIHJldHVybiBzZWxmOjpfd3JhcChGQUxTRSk7DQogICAgfQ0KICANCiAgDQogICAgLy8gSXMgdGhpcyBpdGVtIGVtcHR5Pw0KICAgIHByaXZhdGUgZnVuY3Rpb24gaXNFbXB0eSgkaXRlbSA9IE5VTEwpDQogICAgew0KICAgICAgWyRpdGVtXSA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAxKTsNCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoXGlzX2FycmF5KCRpdGVtKSB8fCBcaXNfb2JqZWN0KCRpdGVtKSkgPyAhKChib29sKVxjb3VudCgoYXJyYXkpJGl0ZW0pKSA6ICghKGJvb2wpJGl0ZW0pOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIElzIHRoaXMgaXRlbSBhbiBvYmplY3Q/DQogICAgcHJpdmF0ZSBmdW5jdGlvbiBpc09iamVjdCgkaXRlbSA9IE5VTEwpDQogICAgew0KICAgICAgWyRpdGVtXSA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAxKTsNCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoXGlzX29iamVjdCgkaXRlbSkpOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIElzIHRoaXMgaXRlbSBhbiBhcnJheT8NCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzQXJyYXkoJGl0ZW0gPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskaXRlbV0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMSk7DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKFxpc19hcnJheSgkaXRlbSkpOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIElzIHRoaXMgaXRlbSBhIHN0cmluZz8NCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzU3RyaW5nKCRpdGVtID0gTlVMTCkNCiAgICB7DQogICAgICBbJGl0ZW1dID0gc2VsZjo6X3dyYXBBcmdzKFxmdW5jX2dldF9hcmdzKCksIDEpOw0KICANCiAgICAgIHJldHVybiBzZWxmOjpfd3JhcChcaXNfc3RyaW5nKCRpdGVtKSk7DQogICAgfQ0KICANCiAgDQogICAgLy8gSXMgdGhpcyBpdGVtIGEgbnVtYmVyPw0KICAgIHByaXZhdGUgZnVuY3Rpb24gaXNOdW1iZXIoJGl0ZW0gPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskaXRlbV0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMSk7DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKChcaXNfaW50KCRpdGVtKSB8fCBcaXNfZmxvYXQoJGl0ZW0pKSAmJiAhXGlzX25hbigkaXRlbSkgJiYgIVxpc19pbmZpbml0ZSgkaXRlbSkpOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIElzIHRoaXMgaXRlbSBhIGJvb2w/DQogICAgcHJpdmF0ZSBmdW5jdGlvbiBpc0Jvb2xlYW4oJGl0ZW0gPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskaXRlbV0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMSk7DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKFxpc19ib29sKCRpdGVtKSk7DQogICAgfQ0KICANCiAgDQogICAgLy8gSXMgdGhpcyBpdGVtIGEgZnVuY3Rpb24gKGJ5IHR5cGUsIG5vdCBieSBuYW1lKT8NCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzRnVuY3Rpb24oJGl0ZW0gPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskaXRlbV0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMSk7DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKFxpc19vYmplY3QoJGl0ZW0pICYmIFxpc19jYWxsYWJsZSgkaXRlbSkpOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIElzIHRoaXMgaXRlbSBhbiBpbnN0YW5jZSBvZiBEYXRlVGltZT8NCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzRGF0ZSgkaXRlbSA9IE5VTEwpDQogICAgew0KICAgICAgWyRpdGVtXSA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAxKTsNCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoXGlzX29iamVjdCgkaXRlbSkgJiYgJ0RhdGVUaW1lJyA9PT0gXGdldF9jbGFzcygkaXRlbSkpOyAjIFRPRE8gdmVyaWZ5IGlmICRpdGVtIGlzIGV2ZXIgTlVMTCBoZXJlDQogICAgfQ0KICANCiAgDQogICAgLy8gSXMgdGhpcyBpdGVtIGEgTmFOIHZhbHVlPw0KICAgIHByaXZhdGUgZnVuY3Rpb24gaXNOYU4oJGl0ZW0gPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskaXRlbV0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMSk7DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKFxpc19uYW4oJGl0ZW0pKTsNCiAgICB9DQogIA0KICANCiAgICAvLyBSZXR1cm5zIHRoZSBzYW1lIHZhbHVlIHBhc3NlZCBhcyB0aGUgYXJndW1lbnQNCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlkZW50aXR5KCkNCiAgICB7DQogICAgICAkYXJncyA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAxKTsNCiAgDQogICAgICBpZihcaXNfYXJyYXkoJGFyZ3MpKQ0KICAgICAgew0KICAgICAgICByZXR1cm4gc2VsZjo6X3dyYXAoJGFyZ3NbMF0pOw0KICAgICAgfQ0KICANCiAgICAgIHJldHVybiBzZWxmOjpfd3JhcChmdW5jdGlvbigkeCkgew0KICAgICAgICByZXR1cm4gJHg7DQogICAgICB9KTsNCiAgICB9DQogIA0KICANCiAgICAvLyBHZW5lcmF0ZSBhIGdsb2JhbGx5IHVuaXF1ZSBpZCwgb3B0aW9uYWxseSBwcmVmaXhlZA0KICAgIHByaXZhdGUgJF91bmlxdWVJZCA9IC0xOw0KICANCiAgICBwcml2YXRlIGZ1bmN0aW9uIHVuaXF1ZUlkKCRwcmVmaXggPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskcHJlZml4XSA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAxKTsNCiAgDQogICAgICAkX2luc3RhbmNlID0gc2VsZjo6Z2V0SW5zdGFuY2UoKTsNCiAgICAgICRfaW5zdGFuY2UtPl91bmlxdWVJZCsrOw0KICANCiAgICAgIHJldHVybiAoTlVMTCA9PT0gJHByZWZpeCkgPyBzZWxmOjpfd3JhcCgkX2luc3RhbmNlLT5fdW5pcXVlSWQpIDogc2VsZjo6X3dyYXAoJHByZWZpeCAuICRfaW5zdGFuY2UtPl91bmlxdWVJZCk7DQogICAgfQ0KICANCiAgDQogICAgLy8gSW52b2tlcyB0aGUgaXRlcmF0b3IgbiB0aW1lcw0KICAgIHByaXZhdGUgZnVuY3Rpb24gdGltZXMoJG4gPSBOVUxMLCAkaXRlcmF0b3IgPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskbiwgJGl0ZXJhdG9yXSA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAyKTsNCiAgICAgIGlmKE5VTEwgPT09ICRuKQ0KICAgICAgew0KICAgICAgICAkbiA9IDA7DQogICAgICB9DQogIA0KICAgICAgZm9yKCRpID0gMDsgJGkgPCAkbjsgJGkrKykNCiAgICAgIHsNCiAgICAgICAgJGl0ZXJhdG9yKCRpKTsNCiAgICAgIH0NCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoTlVMTCk7DQogICAgfQ0KICANCiAgDQogICAgLy8gRXh0ZW5kIHRoZSBjbGFzcyB3aXRoIHlvdXIgb3duIGZ1bmN0aW9ucw0KICAgIHByaXZhdGUgJF9taXhpbnMgPSBbXTsNCiAgDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBtaXhpbigkZnVuY3Rpb25zID0gTlVMTCkNCiAgICB7DQogICAgICBbJGZ1bmN0aW9uc10gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMSk7DQogIA0KICAgICAgJG1peGlucyA9ICZzZWxmOjpnZXRJbnN0YW5jZSgpLT5fbWl4aW5zOw0KICAgICAgZm9yZWFjaCgkZnVuY3Rpb25zIGFzICRuYW1lID0+ICRmdW5jdGlvbikNCiAgICAgIHsNCiAgICAgICAgJG1peGluc1skbmFtZV0gPSAkZnVuY3Rpb247DQogICAgICB9DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKE5VTEwpOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIEFsbG93cyBleHRlbmRpbmcgbWV0aG9kcyBpbiBzdGF0aWMgY29udGV4dA0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX19jYWxsU3RhdGljKCRuYW1lLCAkYXJndW1lbnRzKQ0KICAgIHsNCiAgICAgIGlmKCBcbWV0aG9kX2V4aXN0cyhfX0NMQVNTX18sICRuYW1lKSApDQogICAgICB7DQogICAgICAgICRjID0gc2VsZjo6Z2V0SW5zdGFuY2UoKTsNCiAgICAgICAgcmV0dXJuIFxjYWxsX3VzZXJfZnVuY19hcnJheShbJGMsICRuYW1lXSwgJGFyZ3VtZW50cyk7DQogICAgICB9DQogIA0KICAgICAgJG1peGlucyA9ICZzZWxmOjpnZXRJbnN0YW5jZSgpLT5fbWl4aW5zOw0KICANCiAgICAgIHJldHVybiBcY2FsbF91c2VyX2Z1bmNfYXJyYXkoJG1peGluc1skbmFtZV0sICRhcmd1bWVudHMpOw0KICAgIH0NCiAgDQogICAgLy8gQWxsb3dzIGV4dGVuZGluZyBtZXRob2RzIGluIG5vbi1zdGF0aWMgY29udGV4dA0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NhbGwoJG5hbWUsICRhcmd1bWVudHMpDQogICAgew0KICAgICAgaWYoIFxtZXRob2RfZXhpc3RzKCR0aGlzLCAkbmFtZSkgKQ0KICAgICAgew0KICAgICAgICByZXR1cm4gXGNhbGxfdXNlcl9mdW5jX2FycmF5KFskdGhpcywgJG5hbWVdLCAkYXJndW1lbnRzKTsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgJG1peGlucyAgICA9ICZzZWxmOjpnZXRJbnN0YW5jZSgpLT5fbWl4aW5zOw0KICAgICAgJGFyZ3VtZW50cyA9IHNlbGY6Ol93cmFwQXJncygkYXJndW1lbnRzKTsNCiAgDQogICAgICByZXR1cm4gXGNhbGxfdXNlcl9mdW5jX2FycmF5KCRtaXhpbnNbJG5hbWVdLCAkYXJndW1lbnRzKTsNCiAgICB9DQogIA0KICANCiAgICAvLyBUZW1wb3JhcnkgUEhQIG9wZW4gYW5kIGNsb3NlIHRhZ3MgdXNlZCB3aXRoaW4gdGVtcGxhdGVzDQogICAgLy8gQWxsb3dzIGZvciBub3JtYWwgcHJvY2Vzc2luZyBvZiB0ZW1wbGF0ZXMgZXZlbiB3aGVuDQogICAgLy8gdGhlIGRldmVsb3BlciB1c2VzIFBIUCBvcGVuIG9yIGNsb3NlIHRhZ3MgZm9yIGludGVycG9sYXRpb24gb3IgZXZhbHVhdGlvbg0KICAgIHB1YmxpYyBjb25zdCBURU1QTEFURV9PUEVOX1RBRyA9ICc3NjBlN2RhYjI4MzY4NTNjNjM4MDUwMzNlNTE0NjY4MzAxZmE5YzQ3JzsNCiAgICBwdWJsaWMgY29uc3QgVEVNUExBVEVfQ0xPU0VfVEFHICAgICAgID0gJ2QyMjhhOGZhMzZiZDdkYjEwOGIwMWVkZGZiMDNhMzA4OTk5ODdhMmInOw0KICANCiAgICBwcml2YXRlIGNvbnN0IFRFTVBMQVRFX0RFRkFVTFRfRVZBTFVBVEUgICAgPSAnLzwlKFtcc1xTXSs/KSU+Lyc7DQogICAgcHVibGljIGNvbnN0IFRFTVBMQVRFX0RFRkFVTFRfSU5URVJQT0xBVEUgPSAnLzwlPShbXHNcU10rPyklPi8nOw0KICAgIHB1YmxpYyBjb25zdCBURU1QTEFURV9ERUZBVUxUX0VTQ0FQRSAgICAgID0gJy88JS0oW1xzXFNdKz8pJT4vJzsNCiAgICBwdWJsaWMgYXJyYXkgJF90ZW1wbGF0ZV9zZXR0aW5ncyA9IFsNCiAgICAgICdldmFsdWF0ZScgICAgPT4gc2VsZjo6VEVNUExBVEVfREVGQVVMVF9FVkFMVUFURSwNCiAgICAgICdpbnRlcnBvbGF0ZScgPT4gc2VsZjo6VEVNUExBVEVfREVGQVVMVF9JTlRFUlBPTEFURSwNCiAgICAgICdlc2NhcGUnICAgICAgPT4gc2VsZjo6VEVNUExBVEVfREVGQVVMVF9FU0NBUEUNCiAgICBdOw0KICANCiAgICAvLyBTZXQgdGVtcGxhdGUgc2V0dGluZ3MNCiAgICBwcml2YXRlIGZ1bmN0aW9uIHRlbXBsYXRlU2V0dGluZ3MoJHNldHRpbmdzID0gTlVMTCkNCiAgICB7DQogICAgICAkX3RlbXBsYXRlX3NldHRpbmdzID0mIHNlbGY6OmdldEluc3RhbmNlKCktPl90ZW1wbGF0ZV9zZXR0aW5nczsNCiAgDQogICAgICBpZihOVUxMID09PSAkc2V0dGluZ3MpDQogICAgICB7DQogICAgICAgICRfdGVtcGxhdGVfc2V0dGluZ3MgPSBbDQogICAgICAgICAgJ2V2YWx1YXRlJyAgICA9PiBzZWxmOjpURU1QTEFURV9ERUZBVUxUX0VWQUxVQVRFLA0KICAgICAgICAgICdpbnRlcnBvbGF0ZScgPT4gc2VsZjo6VEVNUExBVEVfREVGQVVMVF9JTlRFUlBPTEFURSwNCiAgICAgICAgICAnZXNjYXBlJyAgICAgID0+IHNlbGY6OlRFTVBMQVRFX0RFRkFVTFRfRVNDQVBFDQogICAgICAgIF07DQogIA0KICAgICAgICByZXR1cm4gVFJVRTsNCiAgICAgIH0NCiAgDQogICAgICBmb3JlYWNoKCRzZXR0aW5ncyBhcyAkayA9PiAkdikNCiAgICAgIHsNCiAgICAgICAgaWYoIVxhcnJheV9rZXlfZXhpc3RzKCRrLCAkX3RlbXBsYXRlX3NldHRpbmdzKSkNCiAgICAgICAgew0KICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICB9DQogIA0KICAgICAgICAkX3RlbXBsYXRlX3NldHRpbmdzWyRrXSA9ICR2Ow0KICAgICAgfQ0KICANCiAgICAgIHJldHVybiBUUlVFOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIENvbXBpbGUgdGVtcGxhdGVzIGludG8gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIGV2YWx1YXRlZCBmb3IgcmVuZGVyaW5nDQogICAgcHJpdmF0ZSBmdW5jdGlvbiB0ZW1wbGF0ZSgkY29kZSA9IE5VTEwsICRjb250ZXh0ID0gTlVMTCkNCiAgICB7DQogICAgICBbJGNvZGUsICRjb250ZXh0XSA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAyKTsNCiAgDQogICAgICAkY2xhc3NfbmFtZSA9IF9fQ0xBU1NfXzsNCiAgDQogICAgICAkcmV0dXJuID0gc2VsZjo6X3dyYXAoZnVuY3Rpb24oJGNvbnRleHQgPSBOVUxMKSB1c2UgKCRjb2RlLCAkY2xhc3NfbmFtZSkgew0KICAgICAgICAkdHMgPSAkY2xhc3NfbmFtZTo6Z2V0SW5zdGFuY2UoKS0+X3RlbXBsYXRlX3NldHRpbmdzOw0KICANCiAgICAgICAgLy8gV3JhcCBlc2NhcGVkLCBpbnRlcnBvbGF0ZWQsIGFuZCBldmFsdWF0ZWQgYmxvY2tzIGluc2lkZSBQSFAgdGFncw0KICAgICAgICBcZXh0cmFjdCgoYXJyYXkpJGNvbnRleHQpOw0KICAgICAgICBccHJlZ19tYXRjaF9hbGwoJHRzWydlc2NhcGUnXSwgJGNvZGUsICR2YXJzLCBcUFJFR19TRVRfT1JERVIpOw0KICAgICAgICBpZihcY291bnQoJHZhcnMpID4gMCkNCiAgICAgICAgew0KICAgICAgICAgIGZvcmVhY2goJHZhcnMgYXMgJHZhcikNCiAgICAgICAgICB7DQogICAgICAgICAgICAkZWNobyA9ICRjbGFzc19uYW1lOjpURU1QTEFURV9PUEVOX1RBRyAuICcgZWNobyBodG1sZW50aXRpZXMoJyAuIFx0cmltKCR2YXJbMV0pIC4gJyk7ICcgLg0KICAgICAgICAgICAgICAgICAgICAkY2xhc3NfbmFtZTo6VEVNUExBVEVfQ0xPU0VfVEFHOw0KICAgICAgICAgICAgJGNvZGUgPSBcc3RyX3JlcGxhY2UoJHZhclswXSwgJGVjaG8sICRjb2RlKTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgXHByZWdfbWF0Y2hfYWxsKCR0c1snaW50ZXJwb2xhdGUnXSwgJGNvZGUsICR2YXJzLCBcUFJFR19TRVRfT1JERVIpOw0KICAgICAgICBpZihcY291bnQoJHZhcnMpID4gMCkNCiAgICAgICAgew0KICAgICAgICAgIGZvcmVhY2goJHZhcnMgYXMgJHZhcikNCiAgICAgICAgICB7DQogICAgICAgICAgICAkZWNobyA9ICRjbGFzc19uYW1lOjpURU1QTEFURV9PUEVOX1RBRyAuICcgZWNobyAnIC4gXHRyaW0oJHZhclsxXSkgLiAnOyAnIC4gJGNsYXNzX25hbWU6OlRFTVBMQVRFX0NMT1NFX1RBRzsNCiAgICAgICAgICAgICRjb2RlID0gXHN0cl9yZXBsYWNlKCR2YXJbMF0sICRlY2hvLCAkY29kZSk7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIFxwcmVnX21hdGNoX2FsbCgkdHNbJ2V2YWx1YXRlJ10sICRjb2RlLCAkdmFycywgXFBSRUdfU0VUX09SREVSKTsNCiAgICAgICAgaWYoXGNvdW50KCR2YXJzKSA+IDApDQogICAgICAgIHsNCiAgICAgICAgICBmb3JlYWNoKCR2YXJzIGFzICR2YXIpDQogICAgICAgICAgew0KICAgICAgICAgICAgJGVjaG8gPSAkY2xhc3NfbmFtZTo6VEVNUExBVEVfT1BFTl9UQUcgLiBcdHJpbSgkdmFyWzFdKSAuICRjbGFzc19uYW1lOjpURU1QTEFURV9DTE9TRV9UQUc7DQogICAgICAgICAgICAkY29kZSA9IFxzdHJfcmVwbGFjZSgkdmFyWzBdLCAkZWNobywgJGNvZGUpOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkY29kZSA9IFxzdHJfcmVwbGFjZShbJGNsYXNzX25hbWU6OlRFTVBMQVRFX09QRU5fVEFHLCAkY2xhc3NfbmFtZTo6VEVNUExBVEVfQ0xPU0VfVEFHXSwgWyc8P3BocCAnLCAnPz4nXSwgJGNvZGUpOw0KICANCiAgICAgICAgLy8gVXNlIHRoZSBvdXRwdXQgYnVmZmVyIHRvIGdyYWIgdGhlIHJldHVybiB2YWx1ZQ0KICAgICAgICAkY29kZSA9ICdvYl9zdGFydCgpOyBleHRyYWN0KCRjb250ZXh0KTsgPz4nIC4gJGNvZGUgLiAnPD9waHAgcmV0dXJuIG9iX2dldF9jbGVhbigpOyc7DQogIA0KICAgICAgICAkZnVuYyA9IFxjcmVhdGVfZnVuY3Rpb24oJyRjb250ZXh0JywgJGNvZGUpOw0KICANCiAgICAgICAgcmV0dXJuICRmdW5jKChhcnJheSkkY29udGV4dCk7DQogICAgICB9KTsNCiAgDQogICAgICAvLyBSZXR1cm4gZnVuY3Rpb24gb3IgY2FsbCBmdW5jdGlvbiBkZXBlbmRpbmcgb24gY29udGV4dA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKA0KICAgICAgICAoKGlzc2V0KCR0aGlzKSAmJiBpc3NldCgkdGhpcy0+X3dyYXBwZWQpICYmICR0aGlzLT5fd3JhcHBlZCkgfHwgTlVMTCAhPT0gJGNvbnRleHQpID8gJHJldHVybigkY29udGV4dCkgOiAkcmV0dXJuDQogICAgICApOw0KICAgIH0NCiAgDQogICAgLy8gRXNjYXBlDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBlc2NhcGUoJGl0ZW0gPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskaXRlbV0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMSk7DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKFxodG1sZW50aXRpZXMoJGl0ZW0pKTsNCiAgICB9DQogIA0KICANCiAgICAvLyBNZW1vaXplcyBhIGZ1bmN0aW9uIGJ5IGNhY2hpbmcgdGhlIGNvbXB1dGVkIHJlc3VsdC4NCiAgICBwdWJsaWMgJF9tZW1vaXplZCA9IFtdOw0KICANCiAgICBwcml2YXRlIGZ1bmN0aW9uIG1lbW9pemUoJGZ1bmN0aW9uID0gTlVMTCwgJGhhc2hGdW5jdGlvbiA9IE5VTEwpDQogICAgew0KICAgICAgWyRmdW5jdGlvbiwgJGhhc2hGdW5jdGlvbl0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMik7DQogIA0KICAgICAgJF9pbnN0YW5jZSA9IChpc3NldCgkdGhpcykgJiYgaXNzZXQoJHRoaXMtPl93cmFwcGVkKSkgPyAkdGhpcyA6IHNlbGY6OmdldEluc3RhbmNlKCk7DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKGZ1bmN0aW9uKCkgdXNlICgkZnVuY3Rpb24sICYkX2luc3RhbmNlLCAkaGFzaEZ1bmN0aW9uKSB7DQogIA0KICAgICAgICAvLyBHZW5lcmF0ZSBhIGtleSBiYXNlZCBvbiBoYXNoRnVuY3Rpb24NCiAgICAgICAgJGFyZ3MgPSBcZnVuY19nZXRfYXJncygpOw0KICAgICAgICBpZihOVUxMID09PSAkaGFzaEZ1bmN0aW9uKQ0KICAgICAgICB7DQogICAgICAgICAgJGhhc2hGdW5jdGlvbiA9IGZ1bmN0aW9uKCRmdW5jdGlvbiwgJGFyZ3MpIHsNCiAgDQogICAgICAgICAgICAvLyBUcnkgdXNpbmcgdmFyX2V4cG9ydCB0byBpZGVudGlmeSB0aGUgZnVuY3Rpb24NCiAgICAgICAgICAgIHJldHVybiBcbWQ1KA0KICAgICAgICAgICAgICBcaW1wbG9kZSgnXycsIFsNCiAgICAgICAgICAgICAgICBcdmFyX2V4cG9ydCgkZnVuY3Rpb24sIFRSVUUpLA0KICAgICAgICAgICAgICAgIFx2YXJfZXhwb3J0KCRhcmdzLCBUUlVFKQ0KICAgICAgICAgICAgICBdKQ0KICAgICAgICAgICAgKTsNCiAgICAgICAgICB9Ow0KICAgICAgICB9DQogICAgICAgICRrZXkgPSAkaGFzaEZ1bmN0aW9uKCRmdW5jdGlvbiwgJGFyZ3MpOw0KICANCiAgICAgICAgaWYoIVxhcnJheV9rZXlfZXhpc3RzKCRrZXksICRfaW5zdGFuY2UtPl9tZW1vaXplZCkpDQogICAgICAgIHsNCiAgICAgICAgICAkX2luc3RhbmNlLT5fbWVtb2l6ZWRbJGtleV0gPSBcY2FsbF91c2VyX2Z1bmNfYXJyYXkoJGZ1bmN0aW9uLCAkYXJncyk7DQogICAgICAgIH0NCiAgDQogICAgICAgIHJldHVybiAkX2luc3RhbmNlLT5fbWVtb2l6ZWRbJGtleV07DQogICAgICB9KTsNCiAgICB9DQogIA0KICANCiAgICAvLyBUaHJvdHRsZXMgYSBmdW5jdGlvbiBzbyB0aGF0IGl0IGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlIGV2ZXJ5IHdhaXQgbWlsbGlzZWNvbmRzDQogICAgcHVibGljICRfdGhyb3R0bGVkID0gW107DQogIA0KICAgIHByaXZhdGUgZnVuY3Rpb24gdGhyb3R0bGUoJGZ1bmN0aW9uID0gTlVMTCwgJHdhaXQgPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskZnVuY3Rpb24sICR3YWl0XSA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAyKTsNCiAgDQogICAgICAkX2luc3RhbmNlID0gKGlzc2V0KCR0aGlzKSAmJiBpc3NldCgkdGhpcy0+X3dyYXBwZWQpKSA/ICR0aGlzIDogc2VsZjo6Z2V0SW5zdGFuY2UoKTsNCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoZnVuY3Rpb24oKSB1c2UgKCRmdW5jdGlvbiwgJHdhaXQsICYkX2luc3RhbmNlKSB7DQogIA0KICAgICAgICAvLyBUcnkgdXNpbmcgXHZhcl9leHBvcnQgdG8gaWRlbnRpZnkgdGhlIGZ1bmN0aW9uDQogICAgICAgICRrZXkgPSBcbWQ1KA0KICAgICAgICAgIFxpbXBsb2RlKCcnLCBbDQogICAgICAgICAgICBcdmFyX2V4cG9ydCgkZnVuY3Rpb24sIFRSVUUpLA0KICAgICAgICAgICAgJHdhaXQNCiAgICAgICAgICBdKQ0KICAgICAgICApOw0KICANCiAgICAgICAgJG1pY3JvdGltZSAgICAgPSBcbWljcm90aW1lKFRSVUUpOw0KICAgICAgICAkcmVhZHlfdG9fY2FsbCA9ICghXGFycmF5X2tleV9leGlzdHMoJGtleSwgJF9pbnN0YW5jZS0+X3Rocm90dGxlZCkgfHwgJG1pY3JvdGltZSA+PSAkX2luc3RhbmNlLT5fdGhyb3R0bGVkWyRrZXldKTsNCiAgICAgICAgaWYoJHJlYWR5X3RvX2NhbGwpDQogICAgICAgIHsNCiAgICAgICAgICAkbmV4dF9jYWxsYWJsZV90aW1lICAgICAgICAgID0gJG1pY3JvdGltZSArICgkd2FpdCAvIDEwMDApOw0KICAgICAgICAgICRfaW5zdGFuY2UtPl90aHJvdHRsZWRbJGtleV0gPSAkbmV4dF9jYWxsYWJsZV90aW1lOw0KICANCiAgICAgICAgICByZXR1cm4gXGNhbGxfdXNlcl9mdW5jX2FycmF5KCRmdW5jdGlvbiwgXGZ1bmNfZ2V0X2FyZ3MoKSk7DQogICAgICAgIH0NCiAgICAgIH0pOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIENyZWF0ZXMgYSB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiB0aGF0IGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlDQogICAgcHVibGljICRfb25jZWQgPSBbXTsNCiAgDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBvbmNlKCRmdW5jdGlvbiA9IE5VTEwpDQogICAgew0KICAgICAgWyRmdW5jdGlvbl0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMSk7DQogIA0KICAgICAgJF9pbnN0YW5jZSA9IChpc3NldCgkdGhpcykgJiYgaXNzZXQoJHRoaXMtPl93cmFwcGVkKSkgPyAkdGhpcyA6IHNlbGY6OmdldEluc3RhbmNlKCk7DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKGZ1bmN0aW9uKCkgdXNlICgkZnVuY3Rpb24sICYkX2luc3RhbmNlKSB7DQogIA0KICAgICAgICAvLyBUcnkgdXNpbmcgXHZhcl9leHBvcnQgdG8gaWRlbnRpZnkgdGhlIGZ1bmN0aW9uDQogICAgICAgICRrZXkgPSBcbWQ1KFx2YXJfZXhwb3J0KCRmdW5jdGlvbiwgVFJVRSkpOw0KICAgICAgICBpZighXGFycmF5X2tleV9leGlzdHMoJGtleSwgJF9pbnN0YW5jZS0+X29uY2VkKSkNCiAgICAgICAgew0KICAgICAgICAgICRfaW5zdGFuY2UtPl9vbmNlZFska2V5XSA9IFxjYWxsX3VzZXJfZnVuY19hcnJheSgkZnVuY3Rpb24sIFxmdW5jX2dldF9hcmdzKCkpOw0KICAgICAgICB9DQogIA0KICAgICAgICByZXR1cm4gJF9pbnN0YW5jZS0+X29uY2VkWyRrZXldOw0KICAgICAgfSk7DQogICAgfQ0KICANCiAgDQogICAgLy8gV3JhcHMgdGhlIGZ1bmN0aW9uIGluc2lkZSB0aGUgd3JhcHBlciBmdW5jdGlvbiwgcGFzc2luZyBpdCBhcyB0aGUgZmlyc3QgYXJndW1lbnQNCiAgICBwcml2YXRlIGZ1bmN0aW9uIHdyYXAoJGZ1bmN0aW9uID0gTlVMTCwgJHdyYXBwZXIgPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskZnVuY3Rpb24sICR3cmFwcGVyXSA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAyKTsNCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoZnVuY3Rpb24oKSB1c2UgKCR3cmFwcGVyLCAkZnVuY3Rpb24pIHsNCiAgICAgICAgJGFyZ3MgPSBcYXJyYXlfbWVyZ2UoWyRmdW5jdGlvbl0sIFxmdW5jX2dldF9hcmdzKCkpOw0KICANCiAgICAgICAgcmV0dXJuIFxjYWxsX3VzZXJfZnVuY19hcnJheSgkd3JhcHBlciwgJGFyZ3MpOw0KICAgICAgfSk7DQogICAgfQ0KICANCiAgDQogICAgLy8gUmV0dXJucyB0aGUgY29tcG9zaXRpb24gb2YgdGhlIGZ1bmN0aW9ucw0KICAgIHByaXZhdGUgZnVuY3Rpb24gY29tcG9zZSgpDQogICAgew0KICAgICAgJGZ1bmN0aW9ucyA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAxKTsNCiAgDQogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoZnVuY3Rpb24oKSB1c2UgKCRmdW5jdGlvbnMpIHsNCiAgICAgICAgJGFyZ3MgPSBcZnVuY19nZXRfYXJncygpOw0KICAgICAgICBmb3JlYWNoKCRmdW5jdGlvbnMgYXMgJGZ1bmN0aW9uKQ0KICAgICAgICB7DQogICAgICAgICAgJGFyZ3NbMF0gPSBcY2FsbF91c2VyX2Z1bmNfYXJyYXkoJGZ1bmN0aW9uLCAkYXJncyk7DQogICAgICAgIH0NCiAgDQogICAgICAgIHJldHVybiAkYXJnc1swXTsNCiAgICAgIH0pOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIENyZWF0ZXMgYSB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgb25seSBydW4gYWZ0ZXIgYmVpbmcgY2FsbGVkIFxjb3VudCB0aW1lcw0KICAgIHB1YmxpYyAkX2FmdGVyZWQgPSBbXTsNCiAgDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBhZnRlcigkY291bnQgPSBOVUxMLCAkZnVuY3Rpb24gPSBOVUxMKQ0KICAgIHsNCiAgICAgIFskY291bnQsICRmdW5jdGlvbl0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMik7DQogIA0KICAgICAgJF9pbnN0YW5jZSA9IChpc3NldCgkdGhpcykgJiYgaXNzZXQoJHRoaXMtPl93cmFwcGVkKSkgPyAkdGhpcyA6IHNlbGY6OmdldEluc3RhbmNlKCk7DQogICAgICAka2V5ICAgICAgID0gXG1kNShcbXRfcmFuZCgpKTsNCiAgDQogICAgICAkZnVuYyA9IHN0YXRpYyBmdW5jdGlvbigpIHVzZSAoJGZ1bmN0aW9uLCAmJF9pbnN0YW5jZSwgJGNvdW50LCAka2V5KSB7DQogICAgICAgIGlmKCFcYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkX2luc3RhbmNlLT5fYWZ0ZXJlZCkpDQogICAgICAgIHsNCiAgICAgICAgICAkX2luc3RhbmNlLT5fYWZ0ZXJlZFska2V5XSA9IDA7DQogICAgICAgIH0NCiAgDQogICAgICAgICsrJF9pbnN0YW5jZS0+X2FmdGVyZWRbJGtleV07DQogIA0KICAgICAgICBpZigkX2luc3RhbmNlLT5fYWZ0ZXJlZFska2V5XSA+PSAkY291bnQpDQogICAgICAgIHsNCiAgICAgICAgICByZXR1cm4gXGNhbGxfdXNlcl9mdW5jX2FycmF5KCRmdW5jdGlvbiwgXGZ1bmNfZ2V0X2FyZ3MoKSk7DQogICAgICAgIH0NCiAgICAgIH07DQogIA0KICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKCgkY291bnQpID8gJGZ1bmMgOiAkZnVuYygpKTsNCiAgICB9DQogIA0KICANCiAgICAvLyBTaW5nbGV0b24NCiAgICBwcml2YXRlIHN0YXRpYyAkX2luc3RhbmNlOw0KICANCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEluc3RhbmNlKCkNCiAgICB7DQogICAgICBpZighaXNzZXQoc2VsZjo6JF9pbnN0YW5jZSkpDQogICAgICB7DQogICAgICAgICRjICAgICAgICAgICAgICAgPSBfX0NMQVNTX187DQogICAgICAgIHNlbGY6OiRfaW5zdGFuY2UgPSBuZXcgJGM7DQogICAgICB9DQogIA0KICAgICAgcmV0dXJuIHNlbGY6OiRfaW5zdGFuY2U7DQogICAgfQ0KICANCiAgDQogICAgLy8gQWxsIG1ldGhvZHMgc2hvdWxkIHdyYXAgdGhlaXIgcmV0dXJucyB3aXRoaW4gX3dyYXANCiAgICAvLyBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gdW5kZXJzdGFuZHMgYm90aCBPTy1zdHlsZSBhbmQgZnVuY3Rpb25hbCBjYWxscw0KICAgIHB1YmxpYyAkX3dyYXBwZWQ7IC8vIFZhbHVlIHBhc3NlZCBmcm9tIG9uZSBjaGFpbmVkIG1ldGhvZCB0byB0aGUgbmV4dA0KICANCiAgICBwcml2YXRlIGZ1bmN0aW9uIF93cmFwKCR2YWwpDQogICAgew0KICAgICAgaWYoaXNzZXQoJHRoaXMpICYmIGlzc2V0KHNlbGY6OiRfY2hhaW5lZCkgJiYgc2VsZjo6JF9jaGFpbmVkKQ0KICAgICAgew0KICAgICAgICAkdGhpcy0+X3dyYXBwZWQgPSAkdmFsOw0KICANCiAgICAgICAgcmV0dXJuICR0aGlzOw0KICAgICAgfQ0KICANCiAgICAgIHJldHVybiAkdmFsOw0KICAgIH0NCiAgICANCiAgICAvLyBBbGwgbWV0aG9kcyBzaG91bGQgZ2V0IHRoZWlyIGFyZ3VtZW50cyBmcm9tIF93cmFwQXJncw0KICAgIC8vIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiB1bmRlcnN0YW5kcyBib3RoIE9PLXN0eWxlIGFuZCBmdW5jdGlvbmFsIGNhbGxzDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfd3JhcEFyZ3MoJGNhbGxlcl9hcmdzLCAkbnVtX2FyZ3MgPSBOVUxMKQ0KICAgIHsNCiAgICAgICRudW1fYXJncyA9IChOVUxMID09PSAkbnVtX2FyZ3MpID8gXGNvdW50KCRjYWxsZXJfYXJncykgLSAxIDogJG51bV9hcmdzOw0KICANCiAgICAgICRmaWxsZWRfYXJncyA9IFtdOw0KICAgICAgaWYoaXNzZXQoJHRoaXMpICYmIGlzc2V0KCR0aGlzLT5fd3JhcHBlZCkpDQogICAgICB7DQogICAgICAgICRmaWxsZWRfYXJnc1tdID0mICR0aGlzLT5fd3JhcHBlZDsNCiAgICAgIH0NCiAgICAgIGlmKFxjb3VudCgkY2FsbGVyX2FyZ3MpID4gMCkNCiAgICAgIHsNCiAgICAgICAgZm9yZWFjaCgkY2FsbGVyX2FyZ3MgYXMgJGsgPT4gJHYpDQogICAgICAgIHsNCiAgICAgICAgICAkZmlsbGVkX2FyZ3NbXSA9ICR2Ow0KICAgICAgICB9DQogICAgICB9DQogIA0KICAgICAgcmV0dXJuIFxhcnJheV9wYWQoJGZpbGxlZF9hcmdzLCAkbnVtX2FyZ3MsIE5VTEwpOw0KICAgIH0NCiAgDQogIA0KICAgIC8vIEdldCBhIGNvbGxlY3Rpb24gaW4gYSB3YXkgdGhhdCBzdXBwb3J0cyBzdHJpbmdzDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfY29sbGVjdGlvbigkY29sbGVjdGlvbikNCiAgICB7DQogICAgICByZXR1cm4gKCFcaXNfYXJyYXkoJGNvbGxlY3Rpb24pICYmICFcaXNfb2JqZWN0KCRjb2xsZWN0aW9uKSkgPyBzdHJfc3BsaXQoKHN0cmluZykkY29sbGVjdGlvbikgOiAkY29sbGVjdGlvbjsNCiAgICB9DQogIH0NCn0NCg0KbmFtZXNwYWNlDQp7DQogIGlmKCAhXGZ1bmN0aW9uX2V4aXN0cygnX18nKSApDQogIHsNCiAgICBmdW5jdGlvbiBfXygkaXRlbSA9IE5VTEwpDQogICAgew0KICAgICAgcmV0dXJuIFxDTVNNU0V4dFx1bmRlcnNjb3JlXF9fKCRpdGVtKTsNCiAgICB9DQogIH0NCiAgDQogIGlmKCAhXGNsYXNzX2V4aXN0cygnX18nKSApDQogIHsNCiAgICBjbGFzcyBfXyBleHRlbmRzIFxDTVNNU0V4dFx1bmRlcnNjb3JlXF9fIHt9DQogIH0NCn0=]]></data>
	</file>
	<file>
	  <filename>/lib/functions/function.underscore_zero.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFVuZGVyc2NvcmUgWmVybwogKgogKiBhIGNvbGxlY3Rpb24gb2YgdXNlZnVsIHRvb2xzCiAqIGZvciBQSFAuLi4gYW5kIENNU01TLi4uCiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XHVuZGVyc2NvcmVfemVybwp7CiAgLy8gUmV0dXJucyBhbiBpbnN0YW5jZSBvZiBfMF8gZm9yIE9PUC1zdHlsZSBjYWxscwogIHVzZSBDTVNNU0V4dFxjb3JlXGZpZm87CiAgdXNlIENNU01TRXh0XGNvcmVccXVldWU7CiAgdXNlIENNU01TRXh0XGNvcmVcc3RhY2s7CiAgdXNlIENNU01TRXh0XGNvcmVceHRfcmVnaXN0cnkgYXMgcmVnaXN0cnk7CiAgCiAgZnVuY3Rpb24gXzBfKCRpdGVtID0gTlVMTCkKICB7CiAgICAkXzBfID0gbmV3IF8wXzsKICAgIGlmKFxmdW5jX251bV9hcmdzKCkgPiAwKSB7ICRfMF8tPl93cmFwcGVkID0gJGl0ZW07IH0KICAgIAogICAgcmV0dXJuIF8wXzsKICB9CiAgCiAgLy8gVW5kZXJzY29yZSBaZXJvCiAgCiAgCiAgLyoqCiAgICoKICAgKi8KICBjbGFzcyBfMF8KICB7CiAgICAvLyBTaW5nbGV0b24KICAgIHByaXZhdGUgc3RhdGljICRfaW5zdGFuY2U7CiAgICAKICAgICMgaW50ZXJuYWwKICAgIHByaXZhdGUgc3RhdGljIHN0YWNrICRfc3RhY2s7CiAgICBwcml2YXRlIHN0YXRpYyBxdWV1ZSAkX3F1ZXVlOwogICAgcHJpdmF0ZSBzdGF0aWMgZmlmbyAkX2ZpZm87CiAgICBwcml2YXRlIHN0YXRpYyByZWdpc3RyeSAkX3JlZ2lzdHJ5OwogICAgLy8gU3RhcnQgdGhlIGNoYWluCiAgICBwcml2YXRlIGJvb2wgJF9jaGFpbmVkID0gRkFMU0U7IC8vIEFyZSB3ZSBpbiBhIGNoYWluPwogICAgLy8gRXh0ZW5kIHRoZSBjbGFzcyB3aXRoIHlvdXIgb3duIGZ1bmN0aW9ucwogICAgcHJpdmF0ZSAkX21peGlucyA9IFtdOwogICAgCiAgICBwdWJsaWMgJF93cmFwcGVkOyAvLyBWYWx1ZSBwYXNzZWQgZnJvbSBvbmUgY2hhaW5lZCBtZXRob2QgdG8gdGhlIG5leHQKICAgIAogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHRhcmdldCA9IE5VTEwsICRjYWxsYWJsZSA9IE5VTEwpCiAgICB7CiAgICAgIHNlbGY6OiRfc3RhY2sgPSBuZXcgc3RhY2s7CiAgICAgIHNlbGY6OiRfcXVldWUgPSBuZXcgcXVldWU7CiAgICAgIHNlbGY6OiRfZmlmbyAgPSBuZXcgZmlmbzsKICAgICAgc2VsZjo6JF9yZWdpc3RyeSA9IHJlZ2lzdHJ5OjpnZXRJbnN0YW5jZSgpOwogICAgfQogICAgCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEluc3RhbmNlKCkKICAgIHsKICAgICAgaWYoIWlzc2V0KHNlbGY6OiRfaW5zdGFuY2UpKQogICAgICB7CiAgICAgICAgJGMgICAgICAgICAgICAgICA9IF9fQ0xBU1NfXzsKICAgICAgICBzZWxmOjokX2luc3RhbmNlID0gbmV3ICRjOwogICAgICB9CiAgICAgIAogICAgICByZXR1cm4gc2VsZjo6JF9pbnN0YW5jZTsKICAgIH0KICAgIAogICAgCiAgICAvKioKICAgICAqIENhbGxzIGEgc3RhdGljIG1ldGhvZCBvciBtaXhpbiBieSBuYW1lIGFuZCBwYXNzZXMgdGhlIHByb3ZpZGVkIGFyZ3VtZW50cy4KICAgICAqIEFsbG93cyBleHRlbmRpbmcgbWV0aG9kcyBpbiBzdGF0aWMgY29udGV4dAogICAgICoKICAgICAqIEBub3RlIG1ldGhvZHMgcHJlZml4ZWQgd2l0aCBhbiB1bmRlcnNjb3JlIGFyZSB0cmVhdGVkIGFzIHByaXZhdGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCBvciBtaXhpbiB0byBjYWxsLgogICAgICogQHBhcmFtIGFycmF5ICRhcmd1bWVudHMgVGhlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBtZXRob2Qgb3IgbWl4aW4uCiAgICAgKiBAdGhyb3dzIFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uIElmIHRoZSBtZXRob2Qgb3IgbWl4aW4gZG9lcyBub3QgZXhpc3QuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZCBUaGUgcmVzdWx0IG9mIHRoZSBtZXRob2Qgb3IgbWl4aW4gY2FsbC4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBfX2NhbGxTdGF0aWMoJG5hbWUsICRhcmd1bWVudHMpCiAgICB7CiAgICAgIGlmKCAhXHN0YXJ0c3dpdGgoJG5hbWUsICAnXycpICYmIFxtZXRob2RfZXhpc3RzKF9fQ0xBU1NfXywgJG5hbWUpICkKICAgICAgewogICAgICAgICRjID0gc2VsZjo6Z2V0SW5zdGFuY2UoKTsKICAgICAgICByZXR1cm4gXGNhbGxfdXNlcl9mdW5jX2FycmF5KFskYywgJG5hbWVdLCAkYXJndW1lbnRzKTsKICAgICAgfQogICAgICAKICAgICAgJG1peGlucyA9ICZzZWxmOjpnZXRJbnN0YW5jZSgpLT5fbWl4aW5zOwogICAgICAKICAgICAgaWYoICFpc3NldCgkbWl4aW5zWyRuYW1lXSkgKQogICAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uKCRuYW1lKTsKICAgICAgfQogICAgICAKICAgICAgcmV0dXJuIFxjYWxsX3VzZXJfZnVuY19hcnJheSgkbWl4aW5zWyRuYW1lXSwgJGFyZ3VtZW50cyk7CiAgICB9CiAgICAKICAgIAogICAgCiAgICAvKioKICAgICAqIEV4ZWN1dGVzIGluYWNjZXNzaWJsZSBtZXRob2RzIG9yIG1peGlucyBkeW5hbWljYWxseSBiYXNlZCBvbiB0aGUgZ2l2ZW4gbmFtZSBhbmQgYXJndW1lbnRzLgogICAgICoKICAgICAqIEBub3RlIG1ldGhvZHMgcHJlZml4ZWQgd2l0aCBhbiB1bmRlcnNjb3JlIGFyZSB0cmVhdGVkIGFzIHByaXZhdGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCBvciBtaXhpbiB0byBleGVjdXRlLgogICAgICogQHBhcmFtIGFycmF5ICRhcmd1bWVudHMgVGhlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBtZXRob2Qgb3IgbWl4aW4uCiAgICAgKiBAdGhyb3dzIFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uIElmIHRoZSBtZXRob2QgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGFjY2Vzc2libGUuCiAgICAgKiBAcmV0dXJuIG1peGVkIFRoZSByZXN1bHQgb2YgdGhlIG1ldGhvZCBleGVjdXRpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NhbGwoJG5hbWUsICRhcmd1bWVudHMpCiAgICB7CiAgICAgIGlmKCAhXHN0YXJ0c3dpdGgoJG5hbWUsICAnXycpICYmIFxtZXRob2RfZXhpc3RzKCR0aGlzLCAkbmFtZSkgKQogICAgICB7CiAgICAgICAgcmV0dXJuIFxjYWxsX3VzZXJfZnVuY19hcnJheShbJHRoaXMsICRuYW1lXSwgJGFyZ3VtZW50cyk7CiAgICAgIH0KICAgICAgCiAgICAgICRtaXhpbnMgICAgPSAmc2VsZjo6Z2V0SW5zdGFuY2UoKS0+X21peGluczsKICAgICAgCiAgICAgIGlmKCAhaXNzZXQoJG1peGluc1skbmFtZV0pICkKICAgICAgewogICAgICAgIHRocm93IG5ldyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbigkbmFtZSk7CiAgICAgIH0KICAgICAgCiAgICAgICRhcmd1bWVudHMgPSBzZWxmOjpfd3JhcEFyZ3MoJGFyZ3VtZW50cyk7CiAgICAgIAogICAgICByZXR1cm4gXGNhbGxfdXNlcl9mdW5jX2FycmF5KCRtaXhpbnNbJG5hbWVdLCAkYXJndW1lbnRzKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBXcmFwcyBhIHZhbHVlIGFuZCByZXR1cm5zIGl0LgogICAgICoKICAgICAqIEBub3RlICBBbGwgbWV0aG9kcyBzaG91bGQgd3JhcCB0aGVpciByZXR1cm5zIHdpdGhpbiBfd3JhcCwKICAgICAqICAgICAgICBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gdW5kZXJzdGFuZHMgYm90aCBPTy1zdHlsZQogICAgICogICAgICAgIGFuZCBmdW5jdGlvbmFsICBjYWxscwogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsIFRoZSB2YWx1ZSB0byBiZSB3cmFwcGVkLgogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQgVGhlIHdyYXBwZWQgdmFsdWUuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX3dyYXAoJHZhbCkKICAgIHsKICAgICAgaWYoaXNzZXQoJHRoaXMsIHNlbGY6OiRfY2hhaW5lZCkgJiYgc2VsZjo6JF9jaGFpbmVkKQogICAgICB7CiAgICAgICAgJHRoaXMtPl93cmFwcGVkID0gJHZhbDsKICAgICAgICAKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiAkdmFsOwogICAgfQogICAgCiAgICAKICAgIC8qKgogICAgICogV3JhcHMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgogICAgICoKICAgICAqIG1ldGhvZHMgc2hvdWxkIGdldCB0aGVpciBhcmd1bWVudHMgZnJvbSBfd3JhcEFyZ3MKICAgICAqIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiB1bmRlcnN0YW5kcyBib3RoIE9PLXN0eWxlIGFuZCBmdW5jdGlvbmFsIGNhbGxzCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICAgICRjYWxsZXJfYXJncyBUaGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCiAgICAgKiBAcGFyYW0gaW50fG51bGwgJG51bV9hcmdzIFRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIHdyYXAuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIHRoZSB0b3RhbCBudW1iZXIgb2YgY2FsbGVyIGFyZ3VtZW50cyBtaW51cyAxLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgVGhlIHdyYXBwZWQgYXJndW1lbnRzLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF93cmFwQXJncygkY2FsbGVyX2FyZ3MsICRudW1fYXJncyA9IE5VTEwpCiAgICB7CiAgICAgICRudW1fYXJncyA9ICRudW1fYXJncyA/PyAoXGNvdW50KCRjYWxsZXJfYXJncykgLSAxKTsKICAgICAgCiAgICAgICRmaWxsZWRfYXJncyA9IFtdOwogICAgICAKICAgICAgaWYoIGlzc2V0KCR0aGlzLCAkdGhpcy0+X3dyYXBwZWQpICkKICAgICAgewogICAgICAgICRmaWxsZWRfYXJnc1tdID0mICR0aGlzLT5fd3JhcHBlZDsKICAgICAgfQogICAgICAKICAgICAgaWYoXGNvdW50KCRjYWxsZXJfYXJncykgPiAwKQogICAgICB7CiAgICAgICAgZm9yZWFjaCgkY2FsbGVyX2FyZ3MgYXMgJGsgPT4gJHYpIHsgJGZpbGxlZF9hcmdzW10gPSAkdjsgfQogICAgICB9CiAgICAgIAogICAgICByZXR1cm4gXGFycmF5X3BhZCgkZmlsbGVkX2FyZ3MsICRudW1fYXJncywgTlVMTCk7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogQ2hhaW5zIGEgbmV3IGl0ZW0gdG8gdGhlIGV4aXN0aW5nIGRiZyBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRpdGVtIFRoZSBpdGVtIHRvIGNoYWluLgogICAgICogQHJldHVybiBkYmcgVGhlIGRiZyBvYmplY3Qgd2l0aCB0aGUgbmV3IGl0ZW0gY2hhaW5lZC4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGFpbigkaXRlbSA9IE5VTEwpIDogZGJnCiAgICB7CiAgICAgIFskaXRlbV0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMSk7CiAgICAgIAogICAgICAkZGJnICAgICAgICAgICA9IChpc3NldCgkdGhpcywgc2VsZjo6JF9jaGFpbmVkKSAmJiBzZWxmOjokX2NoYWluZWQpID8gJHRoaXMgOiBkYmcoJGl0ZW0pOwogICAgICAkZGJnLT5fY2hhaW5lZCA9IFRSVUU7CiAgICAgIAogICAgICByZXR1cm4gJGRiZzsKICAgIH0KICAgIAogICAgCiAgICAvKioKICAgICAqIEVuZCB0aGUgY2hhaW4gYW5kIHJldHVybiB0aGUgdmFsdWUuCiAgICAgKgogICAgICogQHJldHVybiBudWxsCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gdmFsdWUoKQogICAgewogICAgICByZXR1cm4gKCBpc3NldCgkdGhpcykgKSA/ICR0aGlzLT5fd3JhcHBlZCA6IE5VTEw7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogTWl4ZXMgaW4gdGhlIGdpdmVuIGZ1bmN0aW9ucyBpbnRvIHRoZSBjbGFzcydzIGxpc3Qgb2YgbWl4aW5zLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkZnVuY3Rpb25zIFRoZSBmdW5jdGlvbnMgdG8gYmUgbWl4ZWQgaW4uCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZCBUaGUgcmVzdWx0IG9mIHRoZSBfd3JhcCBtZXRob2QuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gbWl4aW4oJGZ1bmN0aW9ucyA9IE5VTEwpCiAgICB7CiAgICAgIFskZnVuY3Rpb25zXSA9IHNlbGY6Ol93cmFwQXJncyhcZnVuY19nZXRfYXJncygpLCAxKTsKICAgICAgCiAgICAgICRtaXhpbnMgPSAmc2VsZjo6Z2V0SW5zdGFuY2UoKS0+X21peGluczsKICAgICAgZm9yZWFjaCgkZnVuY3Rpb25zIGFzICRuYW1lID0+ICRmdW5jdGlvbikKICAgICAgewogICAgICAgICRtaXhpbnNbJG5hbWVdID0gJGZ1bmN0aW9uOwogICAgICB9CiAgICAgIAogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoTlVMTCk7CiAgICB9CiAgICAKCiAgICAKICAgIC8qKgogICAgICogSW50ZXJuYWwgU3RhY2sKICAgICAqLwogICAgCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9zdF9yZXNldCgpCiAgICB7CiAgICAgIHNlbGY6OiRfc3RhY2stPnJlc2V0KCk7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogQHBhcmFtICRpdGVtCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX3N0X3B1c2goJGl0ZW0gPSBOVUxMKQogICAgewogICAgICBpZiggTlVMTCAhPT0gJGl0ZW0pCiAgICAgIHsKICAgICAgICBzZWxmOjokX3N0YWNrLT5wdXNoKCRpdGVtKTsKICAgICAgfQogICAgfQogIAogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfc3RfcG9wKCkKICAgIHsKICAgICAgcmV0dXJuIHNlbGY6OiRfc3RhY2stPnBvcCgpOwogICAgfQogIAogICAgLyoqCiAgICAgKiBAcmV0dXJuIGZhbHNlfG1peGVkCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX3N0X3BlZWsoKQogICAgewogICAgICByZXR1cm4gc2VsZjo6JF9zdGFjay0+cGVlaygpOwogICAgfQogICAgCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9zdF9jb3VudCgpCiAgICB7CiAgICAgIHJldHVybiBzZWxmOjokX3N0YWNrLT5jb3VudCgpOwogICAgfQogICAgCiAgICBwcml2YXRlIGZ1bmN0aW9uIHN0YWNrX3Jlc2V0KCkKICAgIHsKICAgICAgJHRoaXMtPl9zdF9yZXNldCgpOwogICAgICByZXR1cm4gJHRoaXM7CiAgICB9CiAgICAKICAgIHByaXZhdGUgZnVuY3Rpb24gc3RhY2tfY291bnQoKQogICAgewogICAgICByZXR1cm4gJHRoaXMtPl9zdF9jb3VudCgpOwogICAgfQogICAgCiAgICBwcml2YXRlIGZ1bmN0aW9uIHN0YWNrX3BlZWsoKQogICAgewogICAgICByZXR1cm4gJHRoaXMtPl9zdF9wZWVrKCk7CiAgICB9CiAgCiAgICAvKioKICAgICAqCiAgICAgKiBAcGFyYW0gJGl0ZW0KICAgICAqCiAgICAgKiBAcmV0dXJuICR0aGlzCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gc3RhY2tfcHVzaCgkaXRlbSA9IE5VTEwpCiAgICB7CiAgICAgIFskaXRlbV0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMSk7CiAgICAgICR0aGlzLT5fc3RfcHVzaCgkaXRlbSk7CiAgICAgIAogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoJHRoaXMpOwogICAgfQogIAogICAgcHJpdmF0ZSBmdW5jdGlvbiBzdGFja19wb3AoKQogICAgewogICAgICByZXR1cm4gJHRoaXMtPl9zdF9wb3AoKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBJbnRlcm5hbCBRdWV1ZQogICAgICovCiAgICAKICAgIHByaXZhdGUgZnVuY3Rpb24gX3FfcmVzZXQoKQogICAgewogICAgICBzZWxmOjokX3F1ZXVlLT5yZXNldCgpOwogICAgICAKICAgICAgcmV0dXJuICR0aGlzOwogICAgfQogICAgCiAgICAvKioKICAgICAqIEBwYXJhbSAkaXRlbQogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9xX2VucXVldWUoJGl0ZW0gPSBOVUxMKQogICAgewogICAgICBpZiggTlVMTCAhPT0gJGl0ZW0pCiAgICAgIHsKICAgICAgICBzZWxmOjokX3F1ZXVlLT5lbnF1ZXVlKCRpdGVtKTsKICAgICAgfQogICAgfQogIAogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfcV9kZXF1ZXVlKCkKICAgIHsKICAgICAgcmV0dXJuIHNlbGY6OiRfcXVldWUtPmRlcXVldWUoKTsKICAgIH0KICAKICAgIC8qKgogICAgICogQHJldHVybiBmYWxzZXxtaXhlZAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9xX3BlZWsoKQogICAgewogICAgICByZXR1cm4gc2VsZjo6JF9xdWV1ZS0+cGVlaygpOwogICAgfQogICAgCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9xX2NvdW50KCkKICAgIHsKICAgICAgcmV0dXJuIHNlbGY6OiRfcXVldWUtPnNpemUoKTsKICAgIH0KICAgIAogICAgcHJpdmF0ZSBmdW5jdGlvbiBxdWV1ZV9yZXNldCgpCiAgICB7CiAgICAgICR0aGlzLT5fcV9yZXNldCgpOwogICAgICAKICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKCR0aGlzKTsKICAgIH0KICAgIAogICAgcHJpdmF0ZSBmdW5jdGlvbiBxdWV1ZV9jb3VudCgpCiAgICB7CiAgICAgIHJldHVybiAkdGhpcy0+X3FfY291bnQoKTsKICAgIH0KICAgIAogICAgcHJpdmF0ZSBmdW5jdGlvbiBxdWV1ZV9wZWVrKCkKICAgIHsKICAgICAgcmV0dXJuICR0aGlzLT5fcV9wZWVrKCk7CiAgICB9CiAgCiAgICBwcml2YXRlIGZ1bmN0aW9uIHF1ZXVlX2VucXVldWUoJGl0ZW0gPSBOVUxMKQogICAgewogICAgICBbJGl0ZW1dID0gc2VsZjo6X3dyYXBBcmdzKFxmdW5jX2dldF9hcmdzKCksIDEpOwogICAgICAkdGhpcy0+X3FfZW5xdWV1ZSgkaXRlbSk7CiAgICAgIAogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoJHRoaXMpOwogICAgfQogIAogICAgcHJpdmF0ZSBmdW5jdGlvbiBxdWV1ZV9kZXF1ZXVlKCkKICAgIHsKICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKCAkdGhpcy0+X3FfZGVxdWV1ZSgpICk7CiAgICB9CiAgICAKICAgIHByaXZhdGUgZnVuY3Rpb24gX2ZpZm9fcmVzZXQoKQogICAgewogICAgICBzZWxmOjokX2ZpZm8tPnJlc2V0KCk7CiAgICB9CiAgICAKICAgIHByaXZhdGUgZnVuY3Rpb24gX2ZpZm9fZW5xdWV1ZSgkaXRlbSA9IE5VTEwpCiAgICB7CiAgICAgIFskaXRlbV0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMSk7CiAgICAgIAogICAgICBpZiggTlVMTCAhPT0gJGl0ZW0pCiAgICAgIHsKICAgICAgICBzZWxmOjokX2ZpZm8tPmVucXVldWUoJGl0ZW0pOwogICAgICB9CiAgICAgIAogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoJHRoaXMpOwogICAgfQogICAgCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9maWZvX2RlcXVldWUoKQogICAgewogICAgICByZXR1cm4gc2VsZjo6JF9maWZvLT5kZXF1ZXVlKCk7CiAgICB9CiAgICAKICAgIHByaXZhdGUgZnVuY3Rpb24gX2ZpZm9fcGVlaygpCiAgICB7CiAgICAgIHJldHVybiBzZWxmOjokX2ZpZm8tPnBlZWsoKTsKICAgIH0KICAgIAogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaWZvX3Jlc2V0KCkKICAgIHsKICAgICAgJHRoaXMtPl9maWZvX3Jlc2V0KCk7CiAgICAgIAogICAgICByZXR1cm4gc2VsZjo6X3dyYXAoJHRoaXMpOwogICAgfQogICAgCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZpZm9fZW5xdWV1ZSgkaXRlbSA9IE5VTEwpCiAgICB7CiAgICAgIFskaXRlbV0gPSBzZWxmOjpfd3JhcEFyZ3MoXGZ1bmNfZ2V0X2FyZ3MoKSwgMSk7CiAgICAgICR0aGlzLT5fZmlmb19lbnF1ZXVlKCRpdGVtKTsKICAgICAgCiAgICAgIHJldHVybiBzZWxmOjpfd3JhcCgkdGhpcyk7CiAgICB9CiAgICAKICAgIHByaXZhdGUgZnVuY3Rpb24gZmlmb19kZXF1ZXVlKCkKICAgIHsKICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKCAkdGhpcy0+X2ZpZm9fZGVxdWV1ZSgpICk7CiAgICB9CiAgICAKICAgIHByaXZhdGUgZnVuY3Rpb24gZmlmb19wZWVrKCkKICAgIHsKICAgICAgcmV0dXJuIHNlbGY6Ol93cmFwKCAkdGhpcy0+X2ZpZm9fcGVlaygpICk7CiAgICB9CiAgICAKICAgIAogIH0KfQoKbmFtZXNwYWNlCnsKICAKICAvKioKICAgKiBpbXBvcnRzIHRoZSBsaWIgaW50byB0aGUgZ2xvYmFsIG5hbWVzcGFjZQogICAqLwogIAogIC8qKgogICAqIHRoaXMgYWxsb3dzIHRvIGNhbGwgYXMgYSBmdW5jdGlvbiB1c2luZyBlaXRoZXIKICAgKiBfMF8oKS0+ZnVuY3Rpb24oJHRhcmdldCk7CiAgICogb3IKICAgKiBfMF8oJHRhcmdldCktPmZ1bmN0aW9uKCk7CiAgICovCiAgaWYoICFcZnVuY3Rpb25fZXhpc3RzKCdfMF8nKSApCiAgewogICAgZnVuY3Rpb24gXzBfKCRpdGVtID0gTlVMTCkKICAgIHsKICAgICAgcmV0dXJuIFxDTVNNU0V4dFx1bmRlcnNjb3JlX3plcm9cXzBfKCRpdGVtKTsKICAgIH0KICB9CiAgCiAgLyoqCiAgICogdGhpcyBhbGxvd3Mgc3RhdGljIHVzZQogICAqIF8wXzo6ZnVuY3Rpb24oJHRhcmdldCk7CiAgICovCiAgaWYoICFcY2xhc3NfZXhpc3RzKCdfMF8nKSApCiAgewogICAgY2xhc3MgXzBfIGV4dGVuZHMgXENNU01TRXh0XHVuZGVyc2NvcmVfemVyb1xfMF8ge30KICB9Cn0KCg==]]></data>
	</file>
	<file>
	  <filename>/lib/functions/function._z.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCm5hbWVzcGFjZSBDTVNNU0V4dFxfeg0Kew0KICANCiAgY2xhc3MgX3oNCiAgew0KICAgIHByaXZhdGUgICAgICAgICRfd3JhcHBlZDsNCiAgICBwcml2YXRlIHN0YXRpYyAkbWl4aW5zID0gW107DQogICAgDQogICAgLy8gQ29uc3RydWN0b3IgdG8gaW5pdGlhbGl6ZSB0aGUgd3JhcHBlZCB2YWx1ZQ0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkaXRlbSA9IE5VTEwpDQogICAgew0KICAgICAgaWYoZnVuY19udW1fYXJncygpID4gMCkNCiAgICAgIHsNCiAgICAgICAgJHRoaXMtPnNldFdyYXBwZWQoJGl0ZW0pOw0KICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvLyBTdGF0aWMgbWV0aG9kIHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBmb3IgT08tc3R5bGUgY2FsbHMNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF8oJGl0ZW0gPSBOVUxMKQ0KICAgIHsNCiAgICAgICRpbnN0YW5jZSA9IG5ldyBzZWxmKCk7DQogICAgICBpZihmdW5jX251bV9hcmdzKCkgPiAwKQ0KICAgICAgew0KICAgICAgICAkaW5zdGFuY2UtPnNldFdyYXBwZWQoJGl0ZW0pOw0KICAgICAgfQ0KICAgICAgDQogICAgICByZXR1cm4gJGluc3RhbmNlOw0KICAgIH0NCiAgICANCiAgICAvLyBNZXRob2QgdG8gc2V0IHRoZSB3cmFwcGVkIHZhbHVlDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZXRXcmFwcGVkKCRpdGVtKQ0KICAgIHsNCiAgICAgICR0aGlzLT5fd3JhcHBlZCA9ICRpdGVtOw0KICAgIH0NCiAgICANCiAgICAvLyBNZXRob2QgdG8gZ2V0IHRoZSB3cmFwcGVkIHZhbHVlDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRXcmFwcGVkKCkNCiAgICB7DQogICAgICByZXR1cm4gJHRoaXMtPl93cmFwcGVkOw0KICAgIH0NCiAgICANCiAgICAvLyBNZXRob2QgdG8gYWRkIG1peGlucw0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWl4aW4oJG5hbWUsICRmdW5jdGlvbikNCiAgICB7DQogICAgICBzZWxmOjokbWl4aW5zWyRuYW1lXSA9ICRmdW5jdGlvbjsNCiAgICB9DQogICAgDQogICAgLy8gTWFnaWMgbWV0aG9kIHRvIGNhbGwgbWl4aW4gbWV0aG9kcw0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NhbGwoJG5hbWUsICRhcmd1bWVudHMpDQogICAgew0KICAgICAgaWYoaXNzZXQoc2VsZjo6JG1peGluc1skbmFtZV0pKQ0KICAgICAgew0KICAgICAgICBhcnJheV91bnNoaWZ0KCRhcmd1bWVudHMsICR0aGlzLT5nZXRXcmFwcGVkKCkpOw0KICAgICAgICAkcmVzdWx0ID0gY2FsbF91c2VyX2Z1bmNfYXJyYXkoc2VsZjo6JG1peGluc1skbmFtZV0sICRhcmd1bWVudHMpOw0KICAgICAgICAkdGhpcy0+c2V0V3JhcHBlZCgkcmVzdWx0KTsNCiAgICAgICAgDQogICAgICAgIHJldHVybiAkdGhpczsNCiAgICAgIH0NCiAgICAgIHRocm93IG5ldyBCYWRNZXRob2RDYWxsRXhjZXB0aW9uKCJNZXRob2QgJG5hbWUgZG9lcyBub3QgZXhpc3QiKTsNCiAgICB9DQogICAgDQogICAgLy8gRXhhbXBsZSBtZXRob2Q6IG1hcCAod29ya3Mgd2l0aCBhcnJheXMpDQogICAgcHVibGljIGZ1bmN0aW9uIG1hcCgkaXRlcmF0b3IpDQogICAgew0KICAgICAgaWYoaXNfYXJyYXkoJHRoaXMtPmdldFdyYXBwZWQoKSkpDQogICAgICB7DQogICAgICAgICRyZXN1bHQgPSBhcnJheV9tYXAoJGl0ZXJhdG9yLCAkdGhpcy0+Z2V0V3JhcHBlZCgpKTsNCiAgICAgICAgJHRoaXMtPnNldFdyYXBwZWQoJHJlc3VsdCk7DQogICAgICB9DQogICAgICANCiAgICAgIHJldHVybiAkdGhpczsNCiAgICB9DQogICAgDQogICAgLy8gRXhhbXBsZSBtZXRob2Q6IGZpbHRlciAod29ya3Mgd2l0aCBhcnJheXMpDQogICAgcHVibGljIGZ1bmN0aW9uIGZpbHRlcigkcHJlZGljYXRlKQ0KICAgIHsNCiAgICAgIGlmKGlzX2FycmF5KCR0aGlzLT5nZXRXcmFwcGVkKCkpKQ0KICAgICAgew0KICAgICAgICAkcmVzdWx0ID0gYXJyYXlfZmlsdGVyKCR0aGlzLT5nZXRXcmFwcGVkKCksICRwcmVkaWNhdGUpOw0KICAgICAgICAkdGhpcy0+c2V0V3JhcHBlZCgkcmVzdWx0KTsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgcmV0dXJuICR0aGlzOw0KICAgIH0NCiAgICANCiAgICAvLyBNZXRob2QgdG8gZ2V0IHRoZSBmaW5hbCB3cmFwcGVkIHZhbHVlDQogICAgcHVibGljIGZ1bmN0aW9uIHZhbHVlKCkNCiAgICB7DQogICAgICByZXR1cm4gJHRoaXMtPmdldFdyYXBwZWQoKTsNCiAgICB9DQogIH0NCn0NCg0KbmFtZXNwYWNlDQp7DQogIGlmKCFcZnVuY3Rpb25fZXhpc3RzKCdfeicpKQ0KICB7DQogICAgZnVuY3Rpb24gX3ooJGl0ZW0gPSBOVUxMKQ0KICAgIHsNCiAgICAgIHJldHVybiBfejo6XygkaXRlbSk7DQogICAgfQ0KICB9DQp9DQovLy8vIEFkZGluZyBtaXhpbnMNCi8vX3o6Om1peGluKCdyZWR1Y2UnLCBmdW5jdGlvbigkYXJyYXksICRjYWxsYmFjaywgJGluaXRpYWwpIHsNCi8vICByZXR1cm4gYXJyYXlfcmVkdWNlKCRhcnJheSwgJGNhbGxiYWNrLCAkaW5pdGlhbCk7DQovL30pOw0KLy8NCi8vX3o6Om1peGluKCdzdW0nLCBmdW5jdGlvbigkYXJyYXkpIHsNCi8vICByZXR1cm4gYXJyYXlfc3VtKCRhcnJheSk7DQovL30pOw0KDQovLyBGdW5jdGlvbiB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgX3oNCi8vZnVuY3Rpb24gX3ooJGl0ZW0gPSBOVUxMKQ0KLy97DQovLyAgJGluc3RhbmNlID0gbmV3IF96KCk7DQovLyAgaWYoZnVuY19udW1fYXJncygpID4gMCkNCi8vICB7DQovLyAgICAkaW5zdGFuY2UtPnNldFdyYXBwZWQoJGl0ZW0pOw0KLy8gIH0NCi8vDQovLyAgcmV0dXJuICRpbnN0YW5jZTsNCi8vfQ0KDQovLyBGdW5jdGlvbiB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgX3oNCg0KDQoNCg0KDQovKioNCiAqDQogKiAvLyBBZGRpbmcgbWl4aW5zDQogKiBfejo6bWl4aW4oJ3JlZHVjZScsIGZ1bmN0aW9uKCRhcnJheSwgJGNhbGxiYWNrLCAkaW5pdGlhbCkNCiAqIHsNCiAqICAgcmV0dXJuIGFycmF5X3JlZHVjZSgkYXJyYXksICRjYWxsYmFjaywgJGluaXRpYWwpOw0KICogfSk7DQogKg0KICogX3o6Om1peGluKCdzdW0nLCBmdW5jdGlvbigkYXJyYXkpDQogKiB7DQogKiAgIHJldHVybiBhcnJheV9zdW0oJGFycmF5KTsNCiAqIH0pOw0KICoNCiAqIC8vIFVzYWdlIGV4YW1wbGUgd2l0aCBtaXhpbnMNCiAqICRyZXN1bHQgPSBfejo6XyhbMSwgMiwgMywgNCwgNV0pDQogKiAtPm1hcChmdW5jdGlvbigkbikgeyByZXR1cm4gJG4gKiAyOyB9KSAgICAvLyBbMiwgNCwgNiwgOCwgMTBdDQogKiAtPmZpbHRlcihmdW5jdGlvbigkbikgeyByZXR1cm4gJG4gPiA1OyB9KSAvLyBbNiwgOCwgMTBdDQogKiAtPnJlZHVjZShmdW5jdGlvbigkY2FycnksICRpdGVtKSB7IHJldHVybiAkY2FycnkgKyAkaXRlbTsgfSwgMCkNCiAqIDsgLy8gMjQNCiAqDQogKiBlY2hvICRyZXN1bHQ7IC8vIE91dHB1dHM6IDI0DQogKg0KICogJHJlc3VsdCA9IF96OjpfKFsxLCAyLCAzLCA0LCA1XSkNCiAqIC0+c3VtKCkNCiAqIDsgLy8gMTUNCiAqDQogKiBlY2hvICRyZXN1bHQ7IC8vIE91dHB1dHM6IDE1DQogKg0KICogLy8gVXNhZ2UgZXhhbXBsZSB3aXRoIG1peGlucw0KICogJHJlc3VsdCA9IF96KFsxLCAyLCAzLCA0LCA1XSkNCiAqIC0+bWFwKGZ1bmN0aW9uKCRuKSB7IHJldHVybiAkbiAqIDI7IH0pICAgLy8gWzIsIDQsIDYsIDgsIDEwXQ0KICogLT5maWx0ZXIoZnVuY3Rpb24oJG4pIHsgcmV0dXJuICRuID4gNTsgfSkgLy8gWzYsIDgsIDEwXQ0KICogLT5yZWR1Y2UoZnVuY3Rpb24oJGNhcnJ5LCAkaXRlbSkgeyByZXR1cm4gJGNhcnJ5ICsgJGl0ZW07IH0sIDApIC8vIDI0DQogKiAtPnZhbHVlKCk7DQogKg0KICogZWNobyAkcmVzdWx0OyAvLyBPdXRwdXRzOiAyNA0KICoNCiAqIC8vIFVzYWdlIGV4YW1wbGUgd2l0aCBtaXhpbnMNCiAqICRyZXN1bHQgPSBfeihbMSwgMiwgMywgNCwgNV0pDQogKiAtPm1hcChmdW5jdGlvbigkbikgeyByZXR1cm4gJG4gKiAyOyB9KSAgIC8vIFsyLCA0LCA2LCA4LCAxMF0NCiAqIC0+ZmlsdGVyKGZ1bmN0aW9uKCRuKSB7IHJldHVybiAkbiA+IDU7IH0pIC8vIFs2LCA4LCAxMF0NCiAqIC0+cmVkdWNlKGZ1bmN0aW9uKCRjYXJyeSwgJGl0ZW0pIHsgcmV0dXJuICRjYXJyeSArICRpdGVtOyB9LCAwKSAvLyAyNA0KICogLT52YWx1ZSgpOw0KICoNCiAqIGVjaG8gJHJlc3VsdDsgLy8gT3V0cHV0czogMjQNCiAqLw0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/functions/functions.arrays.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qDQogKiBzb3J0cyBhbiBhcnJheSBvZiBuYW1lZCBhcnJheXMgYnkgdGhlIHN1cHBsaWVkIGZpZWxkcw0KICogb3JpZ2luYWwgY29kZSBieSBkaG9sbWVzIGF0IGpjY2MgZDB0IG5ldA0KICogdGFrZW4gZnJvbSBodHRwOi8vYXUucGhwLm5ldC9mdW5jdGlvbi51YXNvcnQNCiAqIG1vZGlmaWVkIGJ5IGNhYmxlaGVhZCwgbWVzc2p1IGFuZCBwc2NzIGF0IGh0dHA6Ly93d3cucGhwaW5zaWRlci5jb20vc21hcnR5LWZvcnVtDQogKiBvcHRpbWl6ZWQgYW5kIGZpeGVkIGZvciBwaHA4IGJ5IEZlcm5hbmRvIE1vcmdhZG8gYWthIEpvTW9yZyA8am9tb3JnQGNtc21hZGVzaW1wbGUub3JnPg0KICovDQoNCmZ1bmN0aW9uIGFycmF5X3NvcnRfYnlfZmllbGRzKCYkZGF0YSwgJHNvcnRieSkNCnsNCiAgc3RhdGljICRzb3J0X2Z1bmNzID0gW107DQogIA0KICAjIENoZWNrIGlmIHNvcnQgZnVuY3Rpb24gZm9yIHRoaXMgZmllbGQgY29tYmluYXRpb24gYWxyZWFkeSBleGlzdHMNCiAgaWYoZW1wdHkoJHNvcnRfZnVuY3NbJHNvcnRieV0pKQ0KICB7DQogICAgIyBHZW5lcmF0ZSBjb21wYXJpc29uIGZ1bmN0aW9ucw0KICAgICRrZXlzID0gZXhwbG9kZSgnLCAnLCAkc29ydGJ5KTsNCiAgICANCiAgICAkc29ydF9mdW5jc1skc29ydGJ5XSA9IGZ1bmN0aW9uKCRhLCAkYikgdXNlICgka2V5cykNCiAgICB7DQogICAgICBmb3JlYWNoKCRrZXlzIGFzICRrZXkpDQogICAgICB7DQogICAgICAgICMgRGVmYXVsdCBhc2NlbmRpbmcgb3JkZXINCiAgICAgICAgJGRpcmVjdGlvbiA9IDE7DQogICAgICAgIA0KICAgICAgICAjIENoZWNrIGZvciBkZXNjZW5kaW5nIG9yZGVyDQogICAgICAgIGlmKCctJyA9PT0gJGtleVswXSkNCiAgICAgICAgew0KICAgICAgICAgIA0KICAgICAgICAgICRkaXJlY3Rpb24gPSAtMTsNCiAgICAgICAgICAjIFJlbW92ZSAnLScgZm9yIGtleSBuYW1lDQogICAgICAgICAgJGtleSAgICAgICA9IHN1YnN0cigka2V5LCAxKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgIyBOdW1lcmljIGNvbXBhcmlzb24NCiAgICAgICAgaWYoJyMnID09PSAka2V5WzBdKQ0KICAgICAgICB7DQogICAgICAgICAgIyBSZW1vdmUgJyMnIGZvciBrZXkgbmFtZQ0KICAgICAgICAgICRrZXkgPSBzdWJzdHIoJGtleSwgMSk7DQogICAgICAgICAgDQogICAgICAgICAgaWYoJGFbJGtleV0gPiAkYlska2V5XSkgeyByZXR1cm4gJGRpcmVjdGlvbjsgfQ0KICAgICAgICAgIA0KICAgICAgICAgIGlmKCRhWyRrZXldIDwgJGJbJGtleV0pIHsgcmV0dXJuICRkaXJlY3Rpb24gKiAtMTsgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2UgIyBTdHJpbmcgY29tcGFyaXNvbg0KICAgICAgICB7DQogICAgICAgICAgJGNvbXBhcmlzb24gPSBzdHJjYXNlY21wKCRhWyRrZXldLCAkYlska2V5XSk7DQogICAgICAgICAgDQogICAgICAgICAgaWYoMCAhPT0gJGNvbXBhcmlzb24pDQogICAgICAgICAgew0KICAgICAgICAgICAgcmV0dXJuICRkaXJlY3Rpb24gKiAkY29tcGFyaXNvbjsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIA0KICAgICAgcmV0dXJuIDA7ICMgRXF1YWwgdmFsdWVzDQogICAgfTsNCiAgfQ0KICANCiAgIyBVc2UgdGhlIGNhY2hlZCBmdW5jdGlvbiB0byBzb3J0DQogIHVhc29ydCgkZGF0YSwgJHNvcnRfZnVuY3NbJHNvcnRieV0pOw0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/functions/functions.bootstrap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KbmFtZXNwYWNlIENNU01TRXh0DQp7DQogIA0KICAvKioNCiAgICogQ2xlYW5zIHRoZSBnaXZlbiBwYXRoIGJ5IHJlcGxhY2luZyBjb25zZWN1dGl2ZSBzbGFzaGVzIHdpdGggYSBzaW5nbGUgc2xhc2guDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJHBhdGggVGhlIHBhdGggdG8gYmUgY2xlYW5lZC4NCiAgICogQHJldHVybiBzdHJpbmcgVGhlIGNsZWFuZWQgcGF0aC4NCiAgICovDQogIGZ1bmN0aW9uIGNsZWFuX3BhdGgoJHBhdGgpIDogc3RyaW5nDQogIHsNCiAgICAvLyBSZXBsYWNlIGNvbnNlY3V0aXZlIHNsYXNoZXMgd2l0aCBhIHNpbmdsZSBzbGFzaA0KICAgICMgcmV0dXJuIHByZWdfcmVwbGFjZSgnIy97Mix9IycsICcvJywgJHBhdGgpOyAjIGxlc3MgZWZmaWNpZW50IHBlcmhhcHM/PyAoSm8gTW9yZykNCiAgICByZXR1cm4gXHN0cl9yZXBsYWNlKFsnXFwnLCAnLy8nXSwgJy8nLCAkcGF0aCk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBKb2lucyBtdWx0aXBsZSBwYXRocyBpbnRvIGEgc2luZ2xlIHBhdGggYnkgcmVwbGFjaW5nIGNvbnNlY3V0aXZlIHNsYXNoZXMgd2l0aCBhIHNpbmdsZSBzbGFzaC4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZ1tdICRwYXRocyBUaGUgcGF0aHMgdG8gYmUgam9pbmVkLg0KICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgam9pbmVkIHBhdGguDQogICAqLw0KICBmdW5jdGlvbiBqb2luX3BhdGgoLi4uJHBhdGhzKSA6IHN0cmluZw0KICB7DQogICAgcmV0dXJuIFxjbGVhbl9wYXRoKFxpbXBsb2RlKCcvJywgJHBhdGhzKSk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBOb3JtYWxpemVzIGEgZ2l2ZW4gcGF0aCBieSByZXBsYWNpbmcgY29uc2VjdXRpdmUgc2xhc2hlcyB3aXRoIGEgc2luZ2xlIHNsYXNoLA0KICAgKiBhbmQgZW5zdXJpbmcgaXQgZW5kcyB3aXRoIGEgc2VwYXJhdG9yLg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBwYXRoIHRvIGJlIG5vcm1hbGl6ZWQuDQogICAqIEByZXR1cm4gc3RyaW5nIFRoZSBub3JtYWxpemVkIHBhdGguDQogICAqLw0KICBmdW5jdGlvbiBub3JtYWxpemVfcGF0aCgkcGF0aCkgOiBzdHJpbmcNCiAgew0KICAgIC8vIERlZmluZSB0aGUgdW5pdmVyc2FsIHNlcGFyYXRvcg0KICAgICRzZXBhcmF0b3IgPSBcRElSRUNUT1JZX1NFUEFSQVRPUjsNCiAgICANCiAgICAvLyBDaGVjayBpZiB0aGUgcGF0aCBzdGFydHMgd2l0aCBhIGRldmljZSBkZXNjcmlwdG9yIChlLmcuLCAnQzpcJykNCiAgICAkaXNXaW5kb3dzUGF0aCA9IFxwcmVnX21hdGNoKCcvXlthLXpBLVpdOltcL1xcXFxdLycsICRwYXRoLCAkbWF0Y2hlcyk7DQogICAgDQogICAgaWYoJGlzV2luZG93c1BhdGgpDQogICAgew0KICAgICAgLy8gRXh0cmFjdCB0aGUgZGV2aWNlIGRlc2NyaXB0b3IgKGUuZy4sICdDOlwnKQ0KICAgICAgJGRldmljZURlc2NyaXB0b3IgPSAkbWF0Y2hlc1swXTsNCiAgICAgIC8vIFJlbW92ZSB0aGUgZGV2aWNlIGRlc2NyaXB0b3IgZnJvbSB0aGUgcGF0aCBmb3IgcHJvY2Vzc2luZw0KICAgICAgJHBhdGggPSBcc3Vic3RyKCRwYXRoLCBcc3RybGVuKCRkZXZpY2VEZXNjcmlwdG9yKSk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkZGV2aWNlRGVzY3JpcHRvciA9ICcnOw0KICAgIH0NCiAgICANCiAgICAvLyBSZXBsYWNlIGFsbCBiYWNrc2xhc2hlcyB3aXRoIGZvcndhcmQgc2xhc2hlcw0KICAgICRwYXRoID0gXHN0cl9yZXBsYWNlKFsnXFwnLCAnLyddLCAkc2VwYXJhdG9yLCAkcGF0aCk7DQogICAgDQogICAgLy8gUmVwbGFjZSBtdWx0aXBsZSBjb25zZWN1dGl2ZSBzZXBhcmF0b3JzIHdpdGggYSBzaW5nbGUgc2VwYXJhdG9yDQogICAgJHBhdGggPSBccHJlZ19yZXBsYWNlKCcvJyAuIFxwcmVnX3F1b3RlKCRzZXBhcmF0b3IsICcvJykgLiAnKy8nLCAkc2VwYXJhdG9yLCAkcGF0aCk7DQogICAgDQogICAgLy8gRW5zdXJlIHRoZSBwYXRoIGVuZHMgd2l0aCBhIHNlcGFyYXRvcg0KICAgIGlmKFxzdWJzdHIoJHBhdGgsIC0xKSAhPT0gJHNlcGFyYXRvcikgeyAkcGF0aCAuPSAkc2VwYXJhdG9yOyB9DQogICAgDQogICAgLy8gUmVhdHRhY2ggdGhlIGRldmljZSBkZXNjcmlwdG9yIGlmIGl0IHdhcyBwcmVzZW50DQogICAgJHBhdGggPSAkZGV2aWNlRGVzY3JpcHRvciAuICRwYXRoOw0KICAgIA0KICAgIHJldHVybiAkcGF0aDsNCiAgfQ0KICANCiAgLyoqDQogICAqIEdldCBhIG1vZHVsZSByZWZlcmVuY2UgaW5zdGFuY2UNCiAgICogVXNlIGluc3RlYWQgb2YgXGNtc191dGlsczo6Z2V0X21vZHVsZQ0KICAgKiBmb3IgYSBzbWFsbGVyIGZvb3RwcmludA0KICAgKiB0aGUgcmV0dXJuZWQgb2JqZWN0IHdpbGwgYmUgYSBcQ01TTVNFeHRcbW9kdWxlXHJlZmVyZW5jZQ0KICAgKiB3aGljaCBpcyBhIHdyYXBwZXIgYXJvdW5kIFxDTVNNb2R1bGUgYW5kIGNsYXNzZXMgdGhhdCBleHRlbmQgaXQNCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkbW9kdWxlX25hbWUNCiAgICogQHBhcmFtIGJvb2wgICAkZm9yY2VfbG9hZA0KICAgKg0KICAgKiBAcmV0dXJuIG9iamVjdA0KICAgKiBAc2luY2UgIDEuNS4wDQogICAqIEBhdXRob3IgRmVybmFuZG8gTW9yZ2FkbyBBS0EgSm8gTW9yZw0KICAgKi8NCiAgZnVuY3Rpb24gbW9kdWxlKHN0cmluZyAkbW9kdWxlX25hbWUsICRmb3JjZV9sb2FkID0gdHJ1ZSkNCiAgew0KICAgIHN0YXRpYyAkbW9kdWxlc19saXN0ICAgICAgICAgICA9IE5VTEw7DQogICAgc3RhdGljICRpbnN0YWxsZWRfbW9kdWxlc19saXN0ID0gTlVMTDsNCiAgICANCiAgICBpZihudWxsID09PSAkbW9kdWxlc19saXN0KQ0KICAgIHsNCiAgICAgICRtb3BzID0gXE1vZHVsZU9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpOw0KICAgICAgJG1vZHVsZXNfbGlzdCA9ICRtb3BzLT5HZXRBbGxNb2R1bGVOYW1lcygpOw0KICAgIH0NCiAgICANCiAgICBpZighXGluX2FycmF5KCRtb2R1bGVfbmFtZSwgJG1vZHVsZXNfbGlzdCkpDQogICAgew0KICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdtb2R1bGUgJyAuICRtb2R1bGVfbmFtZSAuICcgbm90IGZvdW5kJyk7DQogICAgfQ0KICAgIA0KICAgIGlmKG51bGwgPT09ICRpbnN0YWxsZWRfbW9kdWxlc19saXN0KQ0KICAgIHsNCiAgICAgICRpbnN0YWxsZWRfbW9kdWxlc19saXN0ID0gJG1vcHMtPkdldEluc3RhbGxlZE1vZHVsZXMoKTsNCiAgICB9DQogICAgDQogICAgaWYoIVxpbl9hcnJheSgkbW9kdWxlX25hbWUsICRpbnN0YWxsZWRfbW9kdWxlc19saXN0KSkNCiAgICB7DQogICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ21vZHVsZSAnIC4gJG1vZHVsZV9uYW1lIC4gJyBub3QgaW5zdGFsbGVkJyk7DQogICAgfQ0KICAgIA0KICAgICMgZm9yY2UgbG9hZCBqdXN0IGluIGNhc2UgaXQncyBub3QgYWxyZWFkeSBsb2FkZWQNCiAgICAkbG9hZGVkID1caXNfb2JqZWN0KCAkbW9wcy0+Z2V0X21vZHVsZV9pbnN0YW5jZSgkbW9kdWxlX25hbWUsICcnLCAkZm9yY2VfbG9hZCkgKTsNCiAgICANCiAgICBpZighJGxvYWRlZCAmJiAkZm9yY2VfbG9hZCkNCiAgICB7DQogICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ21vZHVsZSAnIC4gJG1vZHVsZV9uYW1lIC4gJyBub3QgbG9hZGVkJyk7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiBuZXcgXENNU01TRXh0XG1vZHVsZVxyZWZlcmVuY2UoJG1vZHVsZV9uYW1lKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIGdldCBhIG1vZHVsZSBhcGkgb2JqZWN0DQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJG1vZHVsZV9uYW1lDQogICAqDQogICAqIEByZXR1cm4gXENNU01TRXh0XG1vZHVsZVxhcGkNCiAgICogQHNlZSBcQ01TTVNFeHRcbW9kdWxlKCkNCiAgICovDQogIGZ1bmN0aW9uIG1vZHVsZV9hcGkoc3RyaW5nICRtb2R1bGVfbmFtZSkNCiAgew0KICAgIHRyeQ0KICAgIHsNCiAgICAgIHJldHVybiBuZXcgXENNU01TRXh0XG1vZHVsZVxhcGkoJG1vZHVsZV9uYW1lKTsNCiAgICB9DQogICAgY2F0Y2goXEV4Y2VwdGlvbiAkZSkNCiAgICB7DQogICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ2NvdWxkIG5vdCBnZXQgYSB2YWxpZCBhcGkgb2JqZWN0IGZvciAnIC4gJG1vZHVsZV9uYW1lKTsNCiAgICB9DQogIH0NCn0NCm5hbWVzcGFjZQ0Kew0KICAvKioNCiAgICogd2UgYnJpbmcgdGhlIGZ1bmN0aW9ucyBpbnRvIHRoZSBnbG9iYWwgbmFtZXNwYWNlDQogICAqIGJ1dCB0ZXN0IGlmIHRoZXkgYWxyZWFkeSBleGlzdCBmaXJzdA0KICAgKiBmdW5jdGlvbnMgdGhhdCBhbHJlYWR5IGV4aXN0DQogICAqIGNhbiBzdGlsbCBiZSBjYWxsZWQgd2l0aCB0aGUgXENNU01TRXh0IG5hbWVzcGFjZSBwcmVmaXgNCiAgICovDQogIA0KICBpZiggIVxmdW5jdGlvbl9leGlzdHMoJ2NsZWFuX3BhdGgnKSApDQogIHsNCiAgICBmdW5jdGlvbiBjbGVhbl9wYXRoKCRwYXRoKQ0KICAgIHsNCiAgICAgIHJldHVybiBcQ01TTVNFeHRcY2xlYW5fcGF0aCgkcGF0aCk7DQogICAgfQ0KICB9DQogIA0KICBpZiggIVxmdW5jdGlvbl9leGlzdHMoJ2pvaW5fcGF0aCcpICkNCiAgew0KICAgIGZ1bmN0aW9uIGpvaW5fcGF0aCguLi4kcGF0aHMpIDogc3RyaW5nDQogICAgew0KICAgICAgcmV0dXJuIFxDTVNNU0V4dFxqb2luX3BhdGgoLi4uJHBhdGhzKTsNCiAgICB9DQogIH0NCiAgDQogIGlmKCAhXGZ1bmN0aW9uX2V4aXN0cygnbm9ybWFsaXplX3BhdGgnKSApDQogIHsNCiAgICBmdW5jdGlvbiBub3JtYWxpemVfcGF0aCgkcGF0aCA9ICcnKQ0KICAgIHsNCiAgICAgIHJldHVybiBcQ01TTVNFeHRcbm9ybWFsaXplX3BhdGgoJHBhdGgpOw0KICAgIH0NCiAgICANCiAgfQ0KICANCiAgaWYoIVxmdW5jdGlvbl9leGlzdHMoJ21vZHVsZScpKQ0KICB7DQogICAgLyoqDQogICAgICogZ2V0IGEgbW9kdWxlIHJlZmVyZW5jZSBvYmplY3QNCiAgICAgKg0KICAgICAqIEBwYXJhbSBzdHJpbmcgJG1vZHVsZV9uYW1lDQogICAgICogQHBhcmFtIGJvb2wgICAkZm9yY2VfbG9hZA0KICAgICAqDQogICAgICogQHJldHVybiBcQ01TTVNFeHRcbW9kdWxlXHJlZmVyZW5jZQ0KICAgICAqIEBzZWUgXENNU01TRXh0XG1vZHVsZSgpLCBcQ01TTVNFeHRcbW9kdWxlXHJlZmVyZW5jZQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIG1vZHVsZShzdHJpbmcgJG1vZHVsZV9uYW1lLCAkZm9yY2VfbG9hZCA9IHRydWUpIDogXENNU01TRXh0XG1vZHVsZVxyZWZlcmVuY2UNCiAgICB7DQogICAgICByZXR1cm4gXENNU01TRXh0XG1vZHVsZSgkbW9kdWxlX25hbWUsICRmb3JjZV9sb2FkKTsNCiAgICB9DQogICAgDQogICAgLyoqDQogICAgICogZ2V0IGEgbW9kdWxlIGFwaSBvYmplY3QNCiAgICAgKg0KICAgICAqIEBwYXJhbSBzdHJpbmcgJG1vZHVsZV9uYW1lDQogICAgICoNCiAgICAgKiBAcmV0dXJuIFxDTVNNU0V4dFxtb2R1bGVcYXBpDQogICAgICogQHNlZSBcQ01TTVNFeHRcbW9kdWxlKCkNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBtb2R1bGVfYXBpKHN0cmluZyAkbW9kdWxlX25hbWUpIDogXENNU01TRXh0XG1vZHVsZVxhcGkNCiAgICB7DQogICAgICByZXR1cm4gXENNU01TRXh0XG1vZHVsZV9hcGkoJG1vZHVsZV9uYW1lKTsNCiAgICB9DQogIH0NCn0NCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/functions/functions.database.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCm5hbWVzcGFjZSBDTVNNU0V4dFxkYXRhDQp7DQogIGZ1bmN0aW9uIGRvZGIoKSA6ID9kb2RiDQogIHsNCiAgICBzdGF0aWMgJGRvZGIgPSBOVUxMOw0KICAgIA0KICAgIGlmKCAhaXNzZXQoJGRvZGIpICkgeyAkZG9kYiA9IG5ldyBkb2RiKCk7IH0NCiAgICANCiAgICBpZihcZnVuY19udW1fYXJncygpID4gMCkNCiAgICB7DQogICAgICAkZG9kYi0+U2V0Q29uZmlnKFxmdW5jX2dldF9hcmdzKCkpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJGRvZGI7DQogIH0NCiAgDQogIGNsYXNzIGRvZGINCiAgew0KICAgIA0KICAgIHByb3RlY3RlZCBcY21zX2NvbmZpZyAkX2NvbmZpZzsNCiAgICBwcm90ZWN0ZWQgICAgICAgICAgICAgJF9kYjsNCiAgICAvKioNCiAgICAgKiBAdmFyIG1peGVkDQogICAgICovDQogICAgcHJvdGVjdGVkIGFycmF5ICRfZGF0YV9jb25maWc7DQogICAgDQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkNCiAgICB7DQogICAgICAkdGhpcy0+aW5pdCgpOw0KICAgIH0NCiAgICANCiAgICBwcml2YXRlIGZ1bmN0aW9uIGluaXQoKSA6IHZvaWQNCiAgICB7DQogICAgICAkdGhpcy0+X2NvbmZpZyAgICAgICAgICAgICAgICAgICAgID0gXGNtc21zKCktPkdldENvbmZpZygpOw0KICAgICAgJHRoaXMtPl9kYXRhX2NvbmZpZ1snZGJfbmFtZSddICAgICA9ICR0aGlzLT5fY29uZmlnWydkYl9uYW1lJ107DQogICAgICAkdGhpcy0+X2RhdGFfY29uZmlnWydkYl9wcmVmaXgnXSAgID0gJHRoaXMtPl9jb25maWdbJ2RiX3ByZWZpeCddOw0KICAgICAgJHRoaXMtPl9kYXRhX2NvbmZpZ1snZGJfdXNlcm5hbWUnXSA9ICR0aGlzLT5fY29uZmlnWydkYl91c2VybmFtZSddOw0KICAgICAgJHRoaXMtPl9kYXRhX2NvbmZpZ1snZGJfcGFzc3dvcmQnXSA9ICR0aGlzLT5fY29uZmlnWydkYl9wYXNzd29yZCddOw0KICAgICAgJHRoaXMtPl9kYXRhX2NvbmZpZ1snZGJfaG9zdG5hbWUnXSA9ICR0aGlzLT5fY29uZmlnWydkYl9ob3N0bmFtZSddOw0KICAgICAgJHRoaXMtPl9kYXRhX2NvbmZpZ1snZGJfcG9ydCddICAgICA9ICR0aGlzLT5fY29uZmlnWydkYl9wb3J0J107DQogICAgfQ0KICAgIA0KICAgIHB1YmxpYyBmdW5jdGlvbiBTZXRDb25maWcoJGNvbmZpZyA9IE5VTEwpDQogICAgew0KICAgICAgaWYoIFxpc19hcnJheSgkY29uZmlnKSApDQogICAgICB7DQogICAgICAgICR0aGlzLT5fZGF0YV9jb25maWcgPSBcYXJyYXlfbWVyZ2UoJHRoaXMtPl9kYXRhX2NvbmZpZywgJGNvbmZpZyk7DQogICAgICB9DQogICAgfQ0KICAgIA0KICAgIC8qKg0KICAgICAqIEB0aHJvd3MgXEV4Y2VwdGlvbg0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZGIoKSA6IFxteXNxbGkNCiAgICB7DQogICAgICAvLyBpZiB0aGVyZSBpcyBubyBkYiBjb25uZWN0aW9uLCB0cnkgdG8gY29ubmVjdA0KICAgICAgaWYoISR0aGlzLT5fZGIpDQogICAgICB7DQogICAgICAgICRjb25maWcgPSAkdGhpcy0+X2RhdGFfY29uZmlnOw0KICAgICAgICANCiAgICAgICAgLy8gaXMgdGhlIHBvcnQgc2V0PyBpZiBub3QsIHVzZSB0aGUgZGVmYXVsdA0KICAgICAgICBpZihlbXB0eSgkY29uZmlnWydkYl9wb3J0J10pKQ0KICAgICAgICB7DQogICAgICAgICAgJG15c3FsaSA9IG5ldyBcbXlzcWxpKA0KICAgICAgICAgICAgJGNvbmZpZ1snZGJfaG9zdG5hbWUnXSwNCiAgICAgICAgICAgICRjb25maWdbJ2RiX3VzZXJuYW1lJ10sDQogICAgICAgICAgICAkY29uZmlnWydkYl9wYXNzd29yZCddLA0KICAgICAgICAgICAgJGNvbmZpZ1snZGJfbmFtZSddDQogICAgICAgICAgKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAvLyB1c2UgdGhlIHBvcnQNCiAgICAgICAgICAkbXlzcWxpID0gbmV3IFxteXNxbGkoDQogICAgICAgICAgICAkY29uZmlnWydkYl9ob3N0bmFtZSddLA0KICAgICAgICAgICAgJGNvbmZpZ1snZGJfdXNlcm5hbWUnXSwNCiAgICAgICAgICAgICRjb25maWdbJ2RiX3Bhc3N3b3JkJ10sDQogICAgICAgICAgICAkY29uZmlnWydkYl9uYW1lJ10sDQogICAgICAgICAgICAoaW50KSRjb25maWdbJ2RiX3BvcnQnXQ0KICAgICAgICAgICk7DQogICAgICAgIH0NCiAgICAgICAgLy8gY2hlY2sgZm9yIGVycm9ycw0KICAgICAgICBpZigkbXlzcWxpLT5jb25uZWN0X2Vycm5vKQ0KICAgICAgICB7DQogICAgICAgICAgJHN0ciA9ICJBdHRlbXB0IHRvIGNvbm5lY3QgdG8gZGF0YWJhc2UgeyRjb25maWdbJ2RiX25hbWUnXX0gb24geyRjb25maWdbJ2RiX3VzZXInXX1AeyRjb25maWdbJ2RiX2hvc3QnXX0gZmFpbGVkIjsNCiAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJHN0cik7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICR0aGlzLT5fZGIgPSAkbXlzcWxpOw0KICAgICAgfQ0KICAgICAgDQogICAgICByZXR1cm4gJHRoaXMtPl9kYjsNCiAgICB9DQogIH0NCn0NCg0KbmFtZXNwYWNlDQp7DQogIA0KICAvKioNCiAgICogaW1wb3J0cyB0aGUgbGliIGludG8gdGhlIGdsb2JhbCBuYW1lc3BhY2UNCiAgICovDQoNCiAgLyoqDQogICAqIHRoaXMgYWxsb3dzIHRvIGNhbGwgYXMgYSBmdW5jdGlvbiB1c2luZyBlaXRoZXINCiAgICogZG9kYigpLT5mdW5jdGlvbigkdGFyZ2V0KTsNCiAgICogb3INCiAgICogZG9kYigkdGFyZ2V0KS0+ZnVuY3Rpb24oKTsNCiAgICovDQogIGlmKCAhXGZ1bmN0aW9uX2V4aXN0cygnZG9kYicpICkNCiAgew0KICAgIGZ1bmN0aW9uIGRvZGIoKQ0KICAgIHsNCiAgICAgIHJldHVybiBcQ01TTVNFeHRcZGF0YVxkb2RiKFxmdW5jX2dldF9hcmdzKCkpOw0KICAgIH0NCiAgfQ0KDQogIC8qKg0KICAgKiB0aGlzIGFsbG93cyBzdGF0aWMgdXNlDQogICAqIGRvZGI6OmZ1bmN0aW9uKC4uLik7DQogICAqLw0KICBpZiggIVxjbGFzc19leGlzdHMoJ2RvZGInKSApDQogIHsNCiAgICBjbGFzcyBkb2RiIGV4dGVuZHMgXENNU01TRXh0XGRhdGFcZG9kYiB7fQ0KICB9DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/functions/functions.session.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCm5hbWVzcGFjZSBDTVNNU0V4dDsNCg0KZnVuY3Rpb24gc2V0X3Nlc3Npb25fc3RhdHVzX2ZsYWdfZmlsZSgpDQp7DQogICMgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUNCiAgIyB0aGVyZSBpcyBubyBuZWVkIGZvciBpdCBub3cNCiAgIyBjYWxsIGl0IHRvIHNldCB0aGUgc2Vzc2lvbiBzdGF0dXMgZmxhZyBmaWxlDQogICRzbWFuYWdlciA9IFxDTVNNU0V4dFxzZXNzaW9uXE1hbmFnZXI6OmdldEluc3RhbmNlKCk7DQp9DQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/functions/functions.tokens.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCm5hbWVzcGFjZSBDTVNNU0V4dFx0b2tlbnMNCnsNCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gJGxlbmd0aA0KICAgKiBAcGFyYW0gJHNhZmUNCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICogQHRocm93cyBcRXhjZXB0aW9uDQogICAqLw0KICBmdW5jdGlvbiBHZW5lcmF0ZU1lY2hhbm9ncmFwaGljQ29kZSgkbGVuZ3RoID0gOCwgJHNhZmUgPSBUUlVFKSA6IHN0cmluZw0KICB7DQogICAgJGNvZGUgICAgICAgPSAnJzsNCiAgICAvLyBEZWZpbmUgdGhlIHBvc3NpYmxlIGNoYXJhY3RlcnMgaW4gdGhlIGNvZGUNCiAgICBpZigkc2FmZSkNCiAgICB7DQogICAgICAkY2hhcmFjdGVycyA9ICdBQkNERUZHSEpLTE1OUFFSU1RVVldYWVoxMjM0NTY3ODknOyAvLyBBdm9pZCBPIGFuZCAwDQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkY2hhcmFjdGVycyA9ICdBQkNERUZHSEpLTE1OUFFSU1RVVldYWVoxMjM0NTY3ODkwJzsNCiAgICB9DQogICAgDQogICAgLy8gUmFuZG9tbHkgc2VsZWN0IGNoYXJhY3RlcnMgdG8gZ2VuZXJhdGUgdGhlIGNvZGUNCiAgICBmb3IoJGkgPSAwOyAkaSA8ICRsZW5ndGg7ICRpKyspDQogICAgew0KICAgICAgJGluZGV4ID0gXHJhbmRvbV9pbnQoMCwgXHN0cmxlbigkY2hhcmFjdGVycykgLSAxKTsNCiAgICAgICRjb2RlICAuPSAkY2hhcmFjdGVyc1skaW5kZXhdOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJGNvZGU7DQogIH0NCiAgDQogIC8qKg0KICAgKiBAdGhyb3dzIFxFeGNlcHRpb24NCiAgICovDQogIGZ1bmN0aW9uIEdlbmVyYXRlQ29tcG91bmRlY2hhbm9ncmFwaGljQ29kZSgkbGVuZ3RoID0gOCwgJHByZWZpeCA9ICcnLCAkc2VwYXJhdG9yID0gJycsICRpbmNsdWRlX2RhdGUgPSBUUlVFLCAkc2FmZSA9IEZBTFNFKSA6IHN0cmluZw0KICB7DQogICAgJHRzID0gXGRhdGUoIkhpcyIpOw0KICAgICRkcyA9IFxkYXRlKCJZbWQiKTsNCiAgICByZXR1cm4gJHByZWZpeCAuICRzZXBhcmF0b3IgLiAgJGRzIC4gJHRzIC4gJHNlcGFyYXRvciAuIEdlbmVyYXRlTWVjaGFub2dyYXBoaWNDb2RlKCRsZW5ndGgsICRzYWZlKTsNCiAgfQ0KfQ0KDQpuYW1lc3BhY2UNCnsNCiAgaWYoICFcZnVuY3Rpb25fZXhpc3RzKCdHZW5lcmF0ZU1lY2hhbm9ncmFwaGljQ29kZScpICkNCiAgew0KICAgIGZ1bmN0aW9uIEdlbmVyYXRlTWVjaGFub2dyYXBoaWNDb2RlKCRsZW5ndGggPSA4LCAkc2FmZSA9IFRSVUUpIDogc3RyaW5nDQogICAgew0KICAgICAgcmV0dXJuIFxDTVNNU0V4dFx0b2tlbnNcR2VuZXJhdGVNZWNoYW5vZ3JhcGhpY0NvZGUoJGxlbmd0aCwgJHNhZmUpOw0KICAgIH0NCiAgfQ0KICANCiAgaWYoICFcZnVuY3Rpb25fZXhpc3RzKCdHZW5lcmF0ZUNvbXBvdW5kZWNoYW5vZ3JhcGhpY0NvZGUnKSApDQogIHsNCiAgICBmdW5jdGlvbiBHZW5lcmF0ZUNvbXBvdW5kZWNoYW5vZ3JhcGhpY0NvZGUoJGxlbmd0aCA9IDgsICRwcmVmaXggPSAnJywgJHNlcGFyYXRvciA9ICcnLCAkaW5jbHVkZV9kYXRlID0gVFJVRSwgJHNhZmUgPSBGQUxTRSkgOiBzdHJpbmcNCiAgICB7DQogICAgICByZXR1cm4gXENNU01TRXh0XHRva2Vuc1xHZW5lcmF0ZUNvbXBvdW5kZWNoYW5vZ3JhcGhpY0NvZGUoJGxlbmd0aCwgJHByZWZpeCwgJHNlcGFyYXRvciwgJGluY2x1ZGVfZGF0ZSwgJHNhZmUpOw0KICAgIH0NCiAgfQ0KfQ0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/htmLawed.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBodG1MYXdlZC5waHAg4oCTIEZpbHRlci9zYW5pdGl6ZSBIVE1MIHRleHQuCiAqCiAqIFVzZTogJG91dCA9IGh0bUxhd2VkKCRpbiwgJGNvbmZpZywgJHNwZWMpOyBzZWUgaHRtTGF3ZWRfUkVBRE1FLgogKgogKiBDb2RlIG92ZXJ2aWV3IGluIGh0bUxhd2VkX1JFQURNRSDCpzUuNi4gRmFtaWxpYXJpdHkgd2l0aCBIVE1MIHN0YW5kYXJkcyBhbmQKICogZG9jdW1lbnRhdGlvbiBvbiBodG1MYXdlZCBjb25maWd1cmF0aW9uIHJlcXVpcmVkIHRvIHVuZGVyc3RhbmQgY29kZS4KICoKICogQSBQSFAgTGFid2FyZSBpbnRlcm5hbCB1dGlsaXR5IC0gYmlvaW5mb3JtYXRpY3Mub3JnL3BocGxhYndhcmUuCiAqCiAqIEBhdXRob3IgICAgIFNhbnRvc2ggUGF0bmFpayA8ZHJwYXRuYWlrUkVNT1ZFQ0FQU0B5YWhvby5jb20+CiAqIEBjb3B5cmlnaHQgIChjKSAyMDA3LSwgU2FudG9zaCBQYXRuYWlrCiAqIEBkZXBlbmRlbmN5IE5vbmUKICogQGxpY2Vuc2UgICAgTEdQTCAzIGFuZCBHUEwgMisgZHVhbCBsaWNlbnNlCiAqIEBsaW5rICAgICAgIGh0dHBzOi8vYmlvaW5mb3JtYXRpY3Mub3JnL3BocGxhYndhcmUvaW50ZXJuYWxfdXRpbGl0aWVzL2h0bUxhd2VkCiAqIEBwYWNrYWdlICAgIGh0bUxhd2VkCiAqIEBwaHAgICAgICAgID49NC40CiAqIEB0aW1lICAgICAgIDIwMjMtMDgtMDQKICogQHZlcnNpb24gICAgMS4yLjE1CiAqLwoKLyoKICogTWFpbiBmdW5jdGlvbi4KICogQ2FsbHMgYWxsIG90aGVyIGZ1bmN0aW9ucyAoYWxwaGFiZXRpY2FsbHkgb3JkZXJlZCBmdXJ0aGVyIGJlbG93KS4KICoKICogQHBhcmFtICBzdHJpbmcgJHQgSFRNLgogKiBAcGFyYW0gIG1peGVkICAkQyAkY29uZmlnIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgogKiBAcGFyYW0gIG1peGVkICAkUyAkc3BlYyBzcGVjaWZpY2F0aW9uIG9wdGlvbi4KICogQHJldHVybiBzdHJpbmcgICAgRmlsdGVyZWQvc2FuaXRpemVkICR0LgogKi8KZnVuY3Rpb24gaHRtTGF3ZWQoJHQsICRDPTEsICRTPWFycmF5KCkpCnsKICAvLyBTdGFuZGFyZCBlbGVtZW50cyBpbmNsdWRpbmcgZGVwcmVjYXRlZC4KICAKICAkZWxlQXIgPSBhcnJheSgnYSc9PjEsICdhYmJyJz0+MSwgJ2Fjcm9ueW0nPT4xLCAnYWRkcmVzcyc9PjEsICdhcHBsZXQnPT4xLCAnYXJlYSc9PjEsICdhcnRpY2xlJz0+MSwgJ2FzaWRlJz0+MSwgJ2F1ZGlvJz0+MSwgJ2InPT4xLCAnYmRpJz0+MSwgJ2Jkbyc9PjEsICdiaWcnPT4xLCAnYmxvY2txdW90ZSc9PjEsICdicic9PjEsICdidXR0b24nPT4xLCAnY2FudmFzJz0+MSwgJ2NhcHRpb24nPT4xLCAnY2VudGVyJz0+MSwgJ2NpdGUnPT4xLCAnY29kZSc9PjEsICdjb2wnPT4xLCAnY29sZ3JvdXAnPT4xLCAnY29tbWFuZCc9PjEsICdkYXRhJz0+MSwgJ2RhdGFsaXN0Jz0+MSwgJ2RkJz0+MSwgJ2RlbCc9PjEsICdkZXRhaWxzJz0+MSwgJ2RpYWxvZyc9PjEsICdkZm4nPT4xLCAnZGlyJz0+MSwgJ2Rpdic9PjEsICdkbCc9PjEsICdkdCc9PjEsICdlbSc9PjEsICdlbWJlZCc9PjEsICdmaWVsZHNldCc9PjEsICdmaWdjYXB0aW9uJz0+MSwgJ2ZpZ3VyZSc9PjEsICdmb250Jz0+MSwgJ2Zvb3Rlcic9PjEsICdmb3JtJz0+MSwgJ2gxJz0+MSwgJ2gyJz0+MSwgJ2gzJz0+MSwgJ2g0Jz0+MSwgJ2g1Jz0+MSwgJ2g2Jz0+MSwgJ2hlYWRlcic9PjEsICdoZ3JvdXAnPT4xLCAnaHInPT4xLCAnaSc9PjEsICdpZnJhbWUnPT4xLCAnaW1nJz0+MSwgJ2lucHV0Jz0+MSwgJ2lucyc9PjEsICdpc2luZGV4Jz0+MSwgJ2tiZCc9PjEsICdrZXlnZW4nPT4xLCAnbGFiZWwnPT4xLCAnbGVnZW5kJz0+MSwgJ2xpJz0+MSwgJ2xpbmsnPT4xLCAnbWFpbic9PjEsICdtYXAnPT4xLCAnbWFyayc9PjEsICdtZW51Jz0+MSwgJ21ldGEnPT4xLCAnbWV0ZXInPT4xLCAnbmF2Jz0+MSwgJ25vc2NyaXB0Jz0+MSwgJ29iamVjdCc9PjEsICdvbCc9PjEsICdvcHRncm91cCc9PjEsICdvcHRpb24nPT4xLCAnb3V0cHV0Jz0+MSwgJ3AnPT4xLCAncGFyYW0nPT4xLCAncGljdHVyZSc9PjEsICdwcmUnPT4xLCAncHJvZ3Jlc3MnPT4xLCAncSc9PjEsICdyYic9PjEsICdyYmMnPT4xLCAncnAnPT4xLCAncnQnPT4xLCAncnRjJz0+MSwgJ3J1YnknPT4xLCAncyc9PjEsICdzYW1wJz0+MSwgJ3NjcmlwdCc9PjEsICdzZWN0aW9uJz0+MSwgJ3NlbGVjdCc9PjEsICdzbG90Jz0+MSwgJ3NtYWxsJz0+MSwgJ3NvdXJjZSc9PjEsICdzcGFuJz0+MSwgJ3N0cmlrZSc9PjEsICdzdHJvbmcnPT4xLCAnc3R5bGUnPT4xLCAnc3ViJz0+MSwgJ3N1bW1hcnknPT4xLCAnc3VwJz0+MSwgJ3RhYmxlJz0+MSwgJ3Rib2R5Jz0+MSwgJ3RkJz0+MSwgJ3RlbXBsYXRlJz0+MSwgJ3RleHRhcmVhJz0+MSwgJ3Rmb290Jz0+MSwgJ3RoJz0+MSwgJ3RoZWFkJz0+MSwgJ3RpbWUnPT4xLCAndHInPT4xLCAndHJhY2snPT4xLCAndHQnPT4xLCAndSc9PjEsICd1bCc9PjEsICd2YXInPT4xLCAndmlkZW8nPT4xLCAnd2JyJz0+MSk7CiAgCiAgLy8gU2V0ICRDIGFycmF5ICgkY29uZmlnKSwgdXNpbmcgZGVmYXVsdCBwYXJhbWV0ZXJzIGFzIG5lZWRlZC4KICAKICAkQyA9IGlzX2FycmF5KCRDKSA/ICRDIDogYXJyYXkoKTsKICBpZiAoIWVtcHR5KCRDWyd2YWxpZF94aHRtbCddKSkgewogICAgJENbJ2VsZW1lbnRzJ10gPSBlbXB0eSgkQ1snZWxlbWVudHMnXSkgPyAnKi1hY3JvbnltLWJpZy1jZW50ZXItZGlyLWZvbnQtaXNpbmRleC1zLXN0cmlrZS10dCcgOiAkQ1snZWxlbWVudHMnXTsKICAgICRDWydtYWtlX3RhZ19zdHJpY3QnXSA9IGlzc2V0KCRDWydtYWtlX3RhZ19zdHJpY3QnXSkgPyAkQ1snbWFrZV90YWdfc3RyaWN0J10gOiAyOwogICAgJENbJ3htbDpsYW5nJ10gPSBpc3NldCgkQ1sneG1sOmxhbmcnXSkgPyAkQ1sneG1sOmxhbmcnXSA6IDI7CiAgfQogIAogIC8vIC0tIENvbmZpZ3VyZSBmb3IgZWxlbWVudHMuCiAgCiAgaWYgKCFlbXB0eSgkQ1snc2FmZSddKSkgewogICAgdW5zZXQoJGVsZUFyWydhcHBsZXQnXSwgJGVsZUFyWydhdWRpbyddLCAkZWxlQXJbJ2NhbnZhcyddLCAkZWxlQXJbJ2RpYWxvZyddLCAkZWxlQXJbJ2VtYmVkJ10sICRlbGVBclsnaWZyYW1lJ10sICRlbGVBclsnb2JqZWN0J10sICRlbGVBclsnc2NyaXB0J10sICRlbGVBclsndmlkZW8nXSk7CiAgfQogICR4ID0gIWVtcHR5KCRDWydlbGVtZW50cyddKSA/IHN0cl9yZXBsYWNlKGFycmF5KCJcbiIsICJcciIsICJcdCIsICcgJyksICcnLCBzdHJ0b2xvd2VyKCRDWydlbGVtZW50cyddKSkgOiAnKic7CiAgaWYgKCR4ID09ICctKicpIHsKICAgICRlbGVBciA9IGFycmF5KCk7CiAgfSBlbHNlaWYgKHN0cnBvcygkeCwgJyonKSA9PT0gZmFsc2UpIHsKICAgICRlbGVBciA9IGFycmF5X2ZsaXAoZXhwbG9kZSgnLCcsICR4KSk7CiAgfSBlbHNlIHsKICAgIGlmIChpc3NldCgkeFsxXSkpIHsKICAgICAgaWYgKHN0cnBvcygkeCwgJygnKSkgeyAvLyBUZW1wb3JhcmlseSByZXBsYWNlIGh5cGhlbiBvZiBjdXN0b20gZWxlbWVudCwgbWludXMgYmVpbmcgc3BlY2lhbCBjaGFyYWN0ZXIKICAgICAgICAkeCA9CiAgICAgICAgICBwcmVnX3JlcGxhY2VfY2FsbGJhY2soCiAgICAgICAgICAgICdgXChbXigpXStcKWAnLAogICAgICAgICAgICBmdW5jdGlvbiAoJG0pIHsKICAgICAgICAgICAgICByZXR1cm4gc3RyX3JlcGxhY2UoYXJyYXkoJygnLCAnKScsICctJyksIGFycmF5KCcnLCAnJywgJ0EnKSwgJG1bMF0pOwogICAgICAgICAgICB9LAogICAgICAgICAgICAkeCk7CiAgICAgIH0KICAgICAgcHJlZ19tYXRjaF9hbGwoJ2AoPzpefC18XCspW15cLStdKz8oPz0tfFwrfCQpYCcsICR4LCAkbSwgUFJFR19TRVRfT1JERVIpOwogICAgICBmb3IgKCRpPWNvdW50KCRtKTsgLS0kaT49MDspIHsKICAgICAgICAkbVskaV0gPSAkbVskaV1bMF07CiAgICAgIH0KICAgICAgZm9yZWFjaCAoJG0gYXMgJHYpIHsKICAgICAgICAkdiA9IHN0cl9yZXBsYWNlKCdBJywgJy0nLCAkdik7CiAgICAgICAgaWYgKCR2WzBdID09ICcrJykgewogICAgICAgICAgJGVsZUFyW3N1YnN0cigkdiwgMSldID0gMTsKICAgICAgICB9IGVsc2VpZiAoJHZbMF0gPT0gJy0nKSB7CiAgICAgICAgICBpZiAoc3RycG9zKCR2LCAnLScsIDEpKSB7CiAgICAgICAgICAgICRlbGVBclskdl0gPSAxOwogICAgICAgICAgfSBlbHNlaWYgKGlzc2V0KCRlbGVBclsoJHYgPSBzdWJzdHIoJHYsIDEpKV0pICYmICFpbl9hcnJheSgnKycuICR2LCAkbSkpIHsKICAgICAgICAgICAgdW5zZXQoJGVsZUFyWyR2XSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogICRDWydlbGVtZW50cyddID0mICRlbGVBcjsKICAKICAvLyAtLSBDb25maWd1cmUgZm9yIGF0dHJpYnV0ZXMuCiAgCiAgJHggPSAhZW1wdHkoJENbJ2RlbnlfYXR0cmlidXRlJ10pID8gc3RydG9sb3dlcihwcmVnX3JlcGxhY2UoJyJccystIicsICcvJywgdHJpbSgkQ1snZGVueV9hdHRyaWJ1dGUnXSkpKSA6ICcnOwogICR4ID0gc3RyX3JlcGxhY2UoYXJyYXkoJyAnLCAiXHQiLCAiXHIiLCAiXG4iKSwgJycsICR4KTsKICAkeCA9CiAgICBhcnJheV9mbGlwKAogICAgICAoaXNzZXQoJHhbMF0pICYmICR4WzBdID09ICcqJykKICAgICAgICA/IHByZWdfcmVwbGFjZSgKICAgICAgICAnYF5bXipdYCcsCiAgICAgICAgJy0nLiAnXFwwJywKICAgICAgICBleHBsb2RlKAogICAgICAgICAgJy8nLAogICAgICAgICAgKCFlbXB0eSgkQ1snc2FmZSddKSA/IHByZWdfcmVwbGFjZSgnYC9vblteL10rYCcsICcnLCAkeCkgOiAkeCkpKQogICAgICAgIDogYXJyYXlfZmlsdGVyKGV4cGxvZGUoJywnLCAkeC4gKCFlbXB0eSgkQ1snc2FmZSddKSA/ICcsb24qJyA6ICcnKSkpKTsKICAkQ1snZGVueV9hdHRyaWJ1dGUnXSA9ICR4OwogIAogIC8vIC0tIENvbmZpZ3VyZSBVUkwgaGFuZGxpbmcuCiAgCiAgJHggPSAoaXNzZXQoJENbJ3NjaGVtZXMnXVsyXSkgJiYgc3RycG9zKCRDWydzY2hlbWVzJ10sICc6JykKICAgID8gc3RydG9sb3dlcigkQ1snc2NoZW1lcyddKQogICAgOiAoJ2hyZWY6IGFpbSwgZmVlZCwgZmlsZSwgZnRwLCBnb3BoZXIsIGh0dHAsIGh0dHBzLCBpcmMsIG1haWx0bywgbmV3cywgbm50cCwgc2Z0cCwgc3NoLCB0ZWwsIHRlbG5ldCwgd3MsIHdzcycKICAgICAgIC4gKGVtcHR5KCRDWydzYWZlJ10pCiAgICAgICAgPyAnLCBhcHAsIGphdmFzY3JpcHQ7ICo6IGRhdGEsIGphdmFzY3JpcHQsICcKICAgICAgICA6ICc7ICo6JykKICAgICAgIC4gJ2ZpbGUsIGh0dHAsIGh0dHBzLCB3cywgd3NzJykpOwogICRDWydzY2hlbWVzJ10gPSBhcnJheSgpOwogIGZvcmVhY2ggKGV4cGxvZGUoJzsnLCB0cmltKHN0cl9yZXBsYWNlKGFycmF5KCcgJywgIlx0IiwgIlxyIiwgIlxuIiksICcnLCAkeCksICc7JykpIGFzICR2KSB7CiAgICBpZihzdHJwb3MoJHYsICc6JykpIHsKICAgICAgbGlzdCgkeCwgJHkpID0gZXhwbG9kZSgnOicsICR2LCAyKTsKICAgICAgJENbJ3NjaGVtZXMnXVskeF0gPSBhcnJheV9mbGlwKGV4cGxvZGUoJywnLCAkeSkpOwogICAgfQogIH0KICBpZiAoIWlzc2V0KCRDWydzY2hlbWVzJ11bJyonXSkpIHsKICAgICRDWydzY2hlbWVzJ11bJyonXSA9IGFycmF5KCdmaWxlJz0+MSwgJ2h0dHAnPT4xLCAnaHR0cHMnPT4xLCAnd3MnPT4xLCAnd3NzJz0+MSk7CiAgICBpZiAoZW1wdHkoJENbJ3NhZmUnXSkpIHsKICAgICAgJENbJ3NjaGVtZXMnXVsnKiddICs9IGFycmF5KCdkYXRhJz0+MSwgJ2phdmFzY3JpcHQnPT4xKTsKICAgIH0KICB9CiAgaWYgKCFlbXB0eSgkQ1snc2FmZSddKSAmJiBlbXB0eSgkQ1snc2NoZW1lcyddWydzdHlsZSddKSkgewogICAgJENbJ3NjaGVtZXMnXVsnc3R5bGUnXSA9IGFycmF5KCchJz0+MSk7CiAgfQogICRDWydhYnNfdXJsJ10gPSBpc3NldCgkQ1snYWJzX3VybCddKSA/ICRDWydhYnNfdXJsJ10gOiAwOwogIGlmICghaXNzZXQoJENbJ2Jhc2VfdXJsJ10pIHx8ICFwcmVnX21hdGNoKCdgXlthLXpBLVpcZC4rXC1dKzovL1teL10rLyguKz8vKT8kYCcsICRDWydiYXNlX3VybCddKSkgewogICAgJENbJ2Jhc2VfdXJsJ10gPSAkQ1snYWJzX3VybCddID0gMDsKICB9CiAgCiAgLy8gLS0gQ29uZmlndXJlIG90aGVyIHBhcmFtZXRlcnMuCiAgCiAgJENbJ2FuZF9tYXJrJ10gPSBlbXB0eSgkQ1snYW5kX21hcmsnXSkgPyAwIDogMTsKICAkQ1snYW50aV9saW5rX3NwYW0nXSA9CiAgICAoaXNzZXQoJENbJ2FudGlfbGlua19zcGFtJ10pCiAgICAgJiYgaXNfYXJyYXkoJENbJ2FudGlfbGlua19zcGFtJ10pCiAgICAgJiYgY291bnQoJENbJ2FudGlfbGlua19zcGFtJ10pID09IDIKICAgICAmJiAoZW1wdHkoJENbJ2FudGlfbGlua19zcGFtJ11bMF0pCiAgICAgICAgIHx8IGhsX3JlZ2V4KCRDWydhbnRpX2xpbmtfc3BhbSddWzBdKSkKICAgICAmJiAoZW1wdHkoJENbJ2FudGlfbGlua19zcGFtJ11bMV0pCiAgICAgICAgIHx8IGhsX3JlZ2V4KCRDWydhbnRpX2xpbmtfc3BhbSddWzFdKSkpCiAgICAgID8gJENbJ2FudGlfbGlua19zcGFtJ10KICAgICAgOiAwOwogICRDWydhbnRpX21haWxfc3BhbSddID0gaXNzZXQoJENbJ2FudGlfbWFpbF9zcGFtJ10pID8gJENbJ2FudGlfbWFpbF9zcGFtJ10gOiAwOwogICRDWydhbnlfY3VzdG9tX2VsZW1lbnQnXSA9ICghaXNzZXQoJENbJ2FueV9jdXN0b21fZWxlbWVudCddKSB8fCAhZW1wdHkoJENbJ2FueV9jdXN0b21fZWxlbWVudCddKSkgPyAxIDogMDsKICAkQ1snYmFsYW5jZSddID0gaXNzZXQoJENbJ2JhbGFuY2UnXSkgPyAoYm9vbCkkQ1snYmFsYW5jZSddIDogMTsKICAkQ1snY2RhdGEnXSA9IGlzc2V0KCRDWydjZGF0YSddKSA/ICRDWydjZGF0YSddIDogKGVtcHR5KCRDWydzYWZlJ10pID8gMyA6IDApOwogICRDWydjbGVhbl9tc19jaGFyJ10gPSBlbXB0eSgkQ1snY2xlYW5fbXNfY2hhciddKSA/IDAgOiAkQ1snY2xlYW5fbXNfY2hhciddOwogICRDWydjb21tZW50J10gPSBpc3NldCgkQ1snY29tbWVudCddKSA/ICRDWydjb21tZW50J10gOiAoZW1wdHkoJENbJ3NhZmUnXSkgPyAzIDogMCk7CiAgJENbJ2Nzc19leHByZXNzaW9uJ10gPSBlbXB0eSgkQ1snY3NzX2V4cHJlc3Npb24nXSkgPyAwIDogMTsKICAkQ1snZGlyZWN0X2xpc3RfbmVzdCddID0gZW1wdHkoJENbJ2RpcmVjdF9saXN0X25lc3QnXSkgPyAwIDogMTsKICAkQ1snaGV4ZGVjX2VudGl0eSddID0gaXNzZXQoJENbJ2hleGRlY19lbnRpdHknXSkgPyAkQ1snaGV4ZGVjX2VudGl0eSddIDogMTsKICAkQ1snaG9vayddID0gKCFlbXB0eSgkQ1snaG9vayddKSAmJiBpc19jYWxsYWJsZSgkQ1snaG9vayddKSkgPyAkQ1snaG9vayddIDogMDsKICAkQ1snaG9va190YWcnXSA9ICghZW1wdHkoJENbJ2hvb2tfdGFnJ10pICYmIGlzX2NhbGxhYmxlKCRDWydob29rX3RhZyddKSkgPyAkQ1snaG9va190YWcnXSA6IDA7CiAgJENbJ2tlZXBfYmFkJ10gPSBpc3NldCgkQ1sna2VlcF9iYWQnXSkgPyAkQ1sna2VlcF9iYWQnXSA6IDY7CiAgJENbJ2xjX3N0ZF92YWwnXSA9IGlzc2V0KCRDWydsY19zdGRfdmFsJ10pID8gKGJvb2wpJENbJ2xjX3N0ZF92YWwnXSA6IDE7CiAgJENbJ21ha2VfdGFnX3N0cmljdCddID0gaXNzZXQoJENbJ21ha2VfdGFnX3N0cmljdCddKSA/ICRDWydtYWtlX3RhZ19zdHJpY3QnXSA6IDE7CiAgJENbJ25hbWVkX2VudGl0eSddID0gaXNzZXQoJENbJ25hbWVkX2VudGl0eSddKSA/IChib29sKSRDWyduYW1lZF9lbnRpdHknXSA6IDE7CiAgJENbJ25vX2RlcHJlY2F0ZWRfYXR0ciddID0gaXNzZXQoJENbJ25vX2RlcHJlY2F0ZWRfYXR0ciddKSA/ICRDWydub19kZXByZWNhdGVkX2F0dHInXSA6IDE7CiAgJENbJ3BhcmVudCddID0gaXNzZXQoJENbJ3BhcmVudCddWzBdKSA/IHN0cnRvbG93ZXIoJENbJ3BhcmVudCddKSA6ICdib2R5JzsKICAkQ1snc2hvd19zZXR0aW5nJ10gPSAhZW1wdHkoJENbJ3Nob3dfc2V0dGluZyddKSA/ICRDWydzaG93X3NldHRpbmcnXSA6IDA7CiAgJENbJ3N0eWxlX3Bhc3MnXSA9IGVtcHR5KCRDWydzdHlsZV9wYXNzJ10pID8gMCA6IDE7CiAgJENbJ3RpZHknXSA9IGVtcHR5KCRDWyd0aWR5J10pID8gMCA6ICRDWyd0aWR5J107CiAgJENbJ3VuaXF1ZV9pZHMnXSA9IGlzc2V0KCRDWyd1bmlxdWVfaWRzJ10pICYmICghcHJlZ19tYXRjaCgnYFxXYCcsICRDWyd1bmlxdWVfaWRzJ10pKSA/ICRDWyd1bmlxdWVfaWRzJ10gOiAxOwogICRDWyd4bWw6bGFuZyddID0gaXNzZXQoJENbJ3htbDpsYW5nJ10pID8gJENbJ3htbDpsYW5nJ10gOiAwOwogIAogIGlmIChpc3NldCgkR0xPQkFMU1snQyddKSkgewogICAgJG9sZEMgPSAkR0xPQkFMU1snQyddOwogIH0KICAkR0xPQkFMU1snQyddID0gJEM7CiAgCiAgLy8gU2V0ICRTIGFycmF5ICgkc3BlYykuCiAgCiAgJFMgPSBpc19hcnJheSgkUykgPyAkUyA6IGhsX3NwZWMoJFMpOwogIGlmIChpc3NldCgkR0xPQkFMU1snUyddKSkgewogICAgJG9sZFMgPSAkR0xPQkFMU1snUyddOwogIH0KICAkR0xPQkFMU1snUyddID0gJFM7CiAgCiAgLy8gSGFuZGxlIGNoYXJhY3RlcnMuCiAgCiAgJHQgPSBwcmVnX3JlcGxhY2UoJ2BbXHgwMC1ceDA4XHgwYi1ceDBjXHgwZS1ceDFmXWAnLCAnJywgJHQpOyAvLyBSZW1vdmUgaWxsZWdhbAogIGlmICgkQ1snY2xlYW5fbXNfY2hhciddKSB7IC8vIENvbnZlcnQgTVMgV2luZG93cyBDUC0xMjUyCiAgICAkeCA9IGFycmF5KCJceDdmIj0+JycsICJceDgwIj0+JyYjODM2NDsnLCAiXHg4MSI9PicnLCAiXHg4MyI9PicmIzQwMjsnLCAiXHg4NSI9PicmIzgyMzA7JywgIlx4ODYiPT4nJiM4MjI0OycsICJceDg3Ij0+JyYjODIyNTsnLCAiXHg4OCI9PicmIzcxMDsnLCAiXHg4OSI9PicmIzgyNDA7JywgIlx4OGEiPT4nJiMzNTI7JywgIlx4OGIiPT4nJiM4MjQ5OycsICJceDhjIj0+JyYjMzM4OycsICJceDhkIj0+JycsICJceDhlIj0+JyYjMzgxOycsICJceDhmIj0+JycsICJceDkwIj0+JycsICJceDk1Ij0+JyYjODIyNjsnLCAiXHg5NiI9PicmIzgyMTE7JywgIlx4OTciPT4nJiM4MjEyOycsICJceDk4Ij0+JyYjNzMyOycsICJceDk5Ij0+JyYjODQ4MjsnLCAiXHg5YSI9PicmIzM1MzsnLCAiXHg5YiI9PicmIzgyNTA7JywgIlx4OWMiPT4nJiMzMzk7JywgIlx4OWQiPT4nJywgIlx4OWUiPT4nJiMzODI7JywgIlx4OWYiPT4nJiMzNzY7Jyk7CiAgICAkeCA9ICR4CiAgICAgICAgICsgKCRDWydjbGVhbl9tc19jaGFyJ10gPT0gMQogICAgICAgID8gYXJyYXkoIlx4ODIiPT4nJiM4MjE4OycsICJceDg0Ij0+JyYjODIyMjsnLCAiXHg5MSI9PicmIzgyMTY7JywgIlx4OTIiPT4nJiM4MjE3OycsICJceDkzIj0+JyYjODIyMDsnLCAiXHg5NCI9PicmIzgyMjE7JykKICAgICAgICA6IGFycmF5KCJceDgyIj0+J1wnJywgIlx4ODQiPT4nIicsICJceDkxIj0+J1wnJywgIlx4OTIiPT4nXCcnLCAiXHg5MyI9PiciJywgIlx4OTQiPT4nIicpKTsKICAgICR0ID0gc3RydHIoJHQsICR4KTsKICB9CiAgCiAgLy8gSGFuZGxlIENEQVRBLCBjb21tZW50cywgYW5kIGVudGl0aWVzLgogIAogIGlmICgkQ1snY2RhdGEnXSB8fCAkQ1snY29tbWVudCddKSB7CiAgICAkdCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnYDwhKD86KD86LS0uKj8tLSl8KD86XFtDREFUQVxbLio/XF1cXSkpPmBzbScsICdobF9jb21tZW50Q2RhdGEnLCAkdCk7CiAgfQogICR0ID0KICAgIHByZWdfcmVwbGFjZV9jYWxsYmFjaygKICAgICAgJ2AmYW1wOyhbYS16QS1aXVthLXpBLVowLTldezEsMzB9fCMoPzpbMC05XXsxLDh9fFtYeF1bMC05QS1GYS1mXXsxLDd9KSk7YCcsCiAgICAgICdobF9lbnRpdHknLAogICAgICBzdHJfcmVwbGFjZSgnJicsICcmYW1wOycsICR0KSk7CiAgaWYgKCRDWyd1bmlxdWVfaWRzJ10gJiYgIWlzc2V0KCRHTE9CQUxTWydobF9JZHMnXSkpIHsKICAgICRHTE9CQUxTWydobF9JZHMnXSA9IGFycmF5KCk7CiAgfQogIAogIGlmICgkQ1snaG9vayddKSB7CiAgICAkdCA9IGNhbGxfdXNlcl9mdW5jKCRDWydob29rJ10sICR0LCAkQywgJFMpOwogIH0KICAKICAvLyBIYW5kbGUgcmVtYWluaW5nIHRleHQuCiAgCiAgJHQgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJ2A8KD86KD86XHN8JCl8KD86W14+XSooPzo+fCQpKSl8PmBtJywgJ2hsX3RhZycsICR0KTsKICAkdCA9ICRDWydiYWxhbmNlJ10gPyBobF9iYWxhbmNlKCR0LCAkQ1sna2VlcF9iYWQnXSwgJENbJ3BhcmVudCddKSA6ICR0OwogICR0ID0gKCgkQ1snY2RhdGEnXSB8fCAkQ1snY29tbWVudCddKSAmJiBzdHJwb3MoJHQsICJceDAxIikgIT09IGZhbHNlKQogICAgPyBzdHJfcmVwbGFjZShhcnJheSgiXHgwMSIsICJceDAyIiwgIlx4MDMiLCAiXHgwNCIsICJceDA1IiksIGFycmF5KCcnLCAnJywgJyYnLCAnPCcsICc+JyksICR0KQogICAgOiAkdDsKICAkdCA9ICRDWyd0aWR5J10gPyBobF90aWR5KCR0LCAkQ1sndGlkeSddLCAkQ1sncGFyZW50J10pIDogJHQ7CiAgCiAgLy8gQ2xlYW51cC4KICAKICBpZiAoJENbJ3Nob3dfc2V0dGluZyddICYmIHByZWdfbWF0Y2goJ2BeW2Etel1bYS16MC05X10qJGBpJywgJENbJ3Nob3dfc2V0dGluZyddKSkgewogICAgJEdMT0JBTFNbJENbJ3Nob3dfc2V0dGluZyddXSA9IGFycmF5KCdjb25maWcnPT4kQywgJ3NwZWMnPT4kUywgJ3RpbWUnPT5taWNyb3RpbWUodHJ1ZSksICd2ZXJzaW9uJz0+aGxfdmVyc2lvbigpKTsKICB9CiAgdW5zZXQoJEMsICRlbGVBcik7CiAgaWYgKGlzc2V0KCRvbGRDKSkgewogICAgJEdMT0JBTFNbJ0MnXSA9ICRvbGRDOwogIH0KICBpZiAoaXNzZXQoJG9sZFMpKSB7CiAgICAkR0xPQkFMU1snUyddID0gJG9sZFM7CiAgfQogIHJldHVybiAkdDsKfQoKLyoqCiAqIFZhbGlkYXRlIGF0dHJpYnV0ZSB2YWx1ZSBhbmQgcG9zc2libHkgcmVzZXQgdG8gYSBkZWZhdWx0LgogKgogKiBAcGFyYW0gIHN0cmluZyAgJGF0dHIgICBBdHRyaWJ1dGUgbmFtZS4KICogQHBhcmFtICBzdHJpbmcgICR2YWx1ZSAgQXR0cmlidXRlIHZhbHVlLgogKiBAcGFyYW0gIGFycmF5ICAgJHJ1bGVBciBBcnJheSBvZiBydWxlcyBkZXJpdmVkIGZyb20gJHNwZWMuCiAqIEBwYXJhbSAgc3RyaW5nICAkZWxlICAgIEVsZW1lbnQuCiAqIEByZXR1cm4gbWl4ZWQgICAgICAgICAgIDAgaWYgaW52YWxpZCAkdmFsdWUsCiAqICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHN0cmluZyB3aXRoIHZhbGlkYXRlZCBvciBkZWZhdWx0IHZhbHVlLgogKi8KZnVuY3Rpb24gaGxfYXR0cmlidXRlVmFsdWUoJGF0dHIsICR2YWx1ZSwgJHJ1bGVBciwgJGVsZSkKewogIHN0YXRpYyAkc3BhY2VkVmFsc0F0dHJBciA9IGFycmF5KCdhY2Nlc3NrZXknLCAnY2xhc3MnLCAnaXRlbXR5cGUnLCAncmVsJyk7IC8vIFNvbWUgYXR0cmlidXRlcyBoYXZlIG11bHRpcGxlIHZhbHVlcwogICR2YWxTZXAgPQogICAgKGluX2FycmF5KCRhdHRyLCAkc3BhY2VkVmFsc0F0dHJBcikgfHwgKCRhdHRyID09ICdhcmNoaXZlJyAmJiAkZWxlID09ICdvYmplY3QnKSkKICAgICAgPyAnICcKICAgICAgOiAoKCRhdHRyID09ICdzaXplcycgfHwgJGF0dHIgPT0gJ3NyY3NldCcgfHwgKCRhdHRyID09ICdhcmNoaXZlJyAmJiAkZWxlID09ICdhcHBsZXQnKSkKICAgICAgPyAnLCcKICAgICAgOiAnJyk7CiAgJG91dCA9IGFycmF5KCk7CiAgJHZhbEFyID0gIWVtcHR5KCR2YWxTZXApID8gZXhwbG9kZSgkdmFsU2VwLCAkdmFsdWUpIDogYXJyYXkoJHZhbHVlKTsKICBmb3JlYWNoICgkdmFsQXIgYXMgJHYpIHsKICAgICRvayA9IDE7CiAgICAkdiA9IHRyaW0oJHYpOwogICAgJGxlbmd0aFZhbCA9IHN0cmxlbigkdik7CiAgICBmb3JlYWNoICgkcnVsZUFyIGFzICRydWxlVHlwZT0+JHJ1bGVWYWwpIHsKICAgICAgaWYgKCEkbGVuZ3RoVmFsKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgc3dpdGNoICgkcnVsZVR5cGUpIHsKICAgICAgICBjYXNlICdtYXhsZW4nOiBpZiAoJGxlbmd0aFZhbCA+ICRydWxlVmFsKSB7CiAgICAgICAgICAkb2sgPSAwOwogICAgICAgIH0KICAgICAgICBicmVhazsgY2FzZSAnbWlubGVuJzogaWYgKCRsZW5ndGhWYWwgPCAkcnVsZVZhbCkgewogICAgICAgICRvayA9IDA7CiAgICAgIH0KICAgICAgYnJlYWs7IGNhc2UgJ21heHZhbCc6IGlmICgoZmxvYXQpKCR2KSA+ICRydWxlVmFsKSB7CiAgICAgICAgJG9rID0gMDsKICAgICAgfQogICAgICBicmVhazsgY2FzZSAnbWludmFsJzogaWYgKChmbG9hdCkoJHYpIDwgJHJ1bGVWYWwpIHsKICAgICAgICAkb2sgPSAwOwogICAgICB9CiAgICAgIGJyZWFrOyBjYXNlICdtYXRjaCc6IGlmICghcHJlZ19tYXRjaCgkcnVsZVZhbCwgJHYpKSB7CiAgICAgICAgJG9rID0gMDsKICAgICAgfQogICAgICBicmVhazsgY2FzZSAnbm9tYXRjaCc6IGlmIChwcmVnX21hdGNoKCRydWxlVmFsLCAkdikpIHsKICAgICAgICAkb2sgPSAwOwogICAgICB9CiAgICAgIGJyZWFrOyBjYXNlICdvbmVvZic6IGlmKCFpbl9hcnJheSgkdiwgZXhwbG9kZSgnfCcsICRydWxlVmFsKSkpIHsKICAgICAgICAkb2sgPSAwOwogICAgICB9CiAgICAgIGJyZWFrOyBjYXNlICdub25lb2YnOiBpZihpbl9hcnJheSgkdiwgZXhwbG9kZSgnfCcsICRydWxlVmFsKSkpIHsKICAgICAgICAkb2sgPSAwOwogICAgICB9CiAgICAgIGJyZWFrOyBkZWZhdWx0OgogICAgICBicmVhazsKICAgICAgfQogICAgICBpZiAoISRvaykgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAoJG9rKSB7CiAgICAgICRvdXRbXSA9ICR2OwogICAgfQogIH0KICAkb3V0ID0gaW1wbG9kZSgkdmFsU2VwID09ICcsJyA/ICcsICcgOiAnICcsICRvdXQpOwogIHJldHVybiAoaXNzZXQoJG91dFswXSkgPyAkb3V0IDogKGlzc2V0KCRydWxlQXJbJ2RlZmF1bHQnXSkgPyAkcnVsZUFyWydkZWZhdWx0J10gOiAwKSk7Cn0KCi8qCiAqIEVuZm9yY2UgcGFyZW50LWNoaWxkIHZhbGlkaXR5IG9mIGVsZW1lbnRzIGFuZCBiYWxhbmNlIHRhZ3MuCiAqCiAqIEBwYXJhbSAgc3RyaW5nICR0ICAgICAgICAgSFRNLiBQcmV2aW91c2x5IHBhcnRseSBzYW5pdGl6ZWQvZmlsdGVyZWQuIENEQVRBCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNvbW1lbnQgc2VjdGlvbnMgaGF2ZSA8Lz4gY2hhcmFjdGVycyBoaWRkZW4uCiAqIEBwYXJhbSAgaW50ICAgICRhY3QgICAgICAgJGNvbmZpZydzIGtlZXBfYmFkIHBhcmFtZXRlci4KICogQHBhcmFtICBzdHJpbmcgJHBhcmVudEVsZSAkdCdzIHBhcmVudCBlbGVtZW50IG9wdGlvbi4KICogQHJldHVybiBzdHJpbmcgICAgICAgICAgICAkdCB3aXRoIHZhbGlkIG5lc3RpbmcgYW5kIGJhbGFuY2VkIHRhZ3MuCiAqLwpmdW5jdGlvbiBobF9iYWxhbmNlKCR0LCAkYWN0PTEsICRwYXJlbnRFbGU9J2RpdicpCnsKICAvLyBHcm91cCBlbGVtZW50cyBpbiBkaWZmZXJlbnQgd2F5cy4KICAKICAkY2xvc2luZ1RhZ09taXRhYmxlRWxlQXIgPSBhcnJheSgnY2FwdGlvbic9PjEsICdjb2xncm91cCc9PjEsICdkZCc9PjEsICdkdCc9PjEsICdsaSc9PjEsICdvcHRncm91cCc9PjEsICdvcHRpb24nPT4xLCAncCc9PjEsICdycCc9PjEsICdydCc9PjEsICd0Ym9keSc9PjEsICd0ZCc9PjEsICd0Zm9vdCc9PjEsICd0aCc9PjEsICd0aGVhZCc9PjEsICd0cic9PjEpOwogIAogIC8vIC0tIEJsb2NrLCBpbmxpbmUsIGV0Yy4KICAKICAkYmxvY2tFbGVBciA9IGFycmF5KCdhJz0+MSwgJ2FkZHJlc3MnPT4xLCAnYXJ0aWNsZSc9PjEsICdhc2lkZSc9PjEsICdibG9ja3F1b3RlJz0+MSwgJ2NlbnRlcic9PjEsICdkZWwnPT4xLCAnZGV0YWlscyc9PjEsICdkaWFsb2cnPT4xLCAnZGlyJz0+MSwgJ2RsJz0+MSwgJ2Rpdic9PjEsICdmaWVsZHNldCc9PjEsICdmaWd1cmUnPT4xLCAnZm9vdGVyJz0+MSwgJ2Zvcm0nPT4xLCAnaW5zJz0+MSwgJ2gxJz0+MSwgJ2gyJz0+MSwgJ2gzJz0+MSwgJ2g0Jz0+MSwgJ2g1Jz0+MSwgJ2g2Jz0+MSwgJ2hlYWRlcic9PjEsICdocic9PjEsICdpc2luZGV4Jz0+MSwgJ21haW4nPT4xLCAnbWVudSc9PjEsICduYXYnPT4xLCAnbm9zY3JpcHQnPT4xLCAnb2wnPT4xLCAncCc9PjEsICdwcmUnPT4xLCAnc2VjdGlvbic9PjEsICdzbG90Jz0+MSwgJ3N0eWxlJz0+MSwgJ3RhYmxlJz0+MSwgJ3RlbXBsYXRlJz0+MSwgJ3VsJz0+MSk7CiAgJGlubGluZUVsZUFyID0gYXJyYXkoJyNwY2RhdGEnPT4xLCAnYSc9PjEsICdhYmJyJz0+MSwgJ2Fjcm9ueW0nPT4xLCAnYXBwbGV0Jz0+MSwgJ2F1ZGlvJz0+MSwgJ2InPT4xLCAnYmRpJz0+MSwgJ2Jkbyc9PjEsICdiaWcnPT4xLCAnYnInPT4xLCAnYnV0dG9uJz0+MSwgJ2NhbnZhcyc9PjEsICdjaXRlJz0+MSwgJ2NvZGUnPT4xLCAnY29tbWFuZCc9PjEsICdkYXRhJz0+MSwgJ2RhdGFsaXN0Jz0+MSwgJ2RlbCc9PjEsICdkZm4nPT4xLCAnZW0nPT4xLCAnZW1iZWQnPT4xLCAnZmlnY2FwdGlvbic9PjEsICdmb250Jz0+MSwgJ2knPT4xLCAnaWZyYW1lJz0+MSwgJ2ltZyc9PjEsICdpbnB1dCc9PjEsICdpbnMnPT4xLCAna2JkJz0+MSwgJ2xhYmVsJz0+MSwgJ2xpbmsnPT4xLCAnbWFwJz0+MSwgJ21hcmsnPT4xLCAnbWV0YSc9PjEsICdtZXRlcic9PjEsICdvYmplY3QnPT4xLCAnb3V0cHV0Jz0+MSwgJ3BpY3R1cmUnPT4xLCAncHJvZ3Jlc3MnPT4xLCAncSc9PjEsICdydWJ5Jz0+MSwgJ3MnPT4xLCAnc2FtcCc9PjEsICdzZWxlY3QnPT4xLCAnc2NyaXB0Jz0+MSwgJ3NtYWxsJz0+MSwgJ3NwYW4nPT4xLCAnc3RyaWtlJz0+MSwgJ3N0cm9uZyc9PjEsICdzdWInPT4xLCAnc3VtbWFyeSc9PjEsICdzdXAnPT4xLCAndGV4dGFyZWEnPT4xLCAndGltZSc9PjEsICd0dCc9PjEsICd1Jz0+MSwgJ3Zhcic9PjEsICd2aWRlbyc9PjEsICd3YnInPT4xKTsKICAkb3RoZXJFbGVBciA9IGFycmF5KCdhcmVhJz0+MSwgJ2NhcHRpb24nPT4xLCAnY29sJz0+MSwgJ2NvbGdyb3VwJz0+MSwgJ2NvbW1hbmQnPT4xLCAnZGQnPT4xLCAnZHQnPT4xLCAnaGdyb3VwJz0+MSwgJ2tleWdlbic9PjEsICdsZWdlbmQnPT4xLCAnbGknPT4xLCAnb3B0Z3JvdXAnPT4xLCAnb3B0aW9uJz0+MSwgJ3BhcmFtJz0+MSwgJ3JiJz0+MSwgJ3JiYyc9PjEsICdycCc9PjEsICdydCc9PjEsICdydGMnPT4xLCAnc2NyaXB0Jz0+MSwgJ3NvdXJjZSc9PjEsICd0Ym9keSc9PjEsICd0ZCc9PjEsICd0Zm9vdCc9PjEsICd0aGVhZCc9PjEsICd0aCc9PjEsICd0cic9PjEsICd0cmFjayc9PjEpOwogICRmbG93RWxlQXIgPSAkYmxvY2tFbGVBciArICRpbmxpbmVFbGVBcjsKICAKICAvLyAtLSBUeXBlIG9mIGNoaWxkIGFsbG93ZWQuCiAgCiAgJGJsb2NrS2lkRWxlQXIgPSBhcnJheSgnYmxvY2txdW90ZSc9PjEsICdmb3JtJz0+MSwgJ21hcCc9PjEsICdub3NjcmlwdCc9PjEpOwogICRmbG93S2lkRWxlQXIgPSBhcnJheSgnYSc9PjEsICdhcnRpY2xlJz0+MSwgJ2FzaWRlJz0+MSwgJ2F1ZGlvJz0+MSwgJ2J1dHRvbic9PjEsICdjYW52YXMnPT4xLCAnZGVsJz0+MSwgJ2RldGFpbHMnPT4xLCAnZGlhbG9nJz0+MSwgJ2Rpdic9PjEsICdkZCc9PjEsICdmaWVsZHNldCc9PjEsICdmaWd1cmUnPT4xLCAnZm9vdGVyJz0+MSwgJ2hlYWRlcic9PjEsICdpZnJhbWUnPT4xLCAnaW5zJz0+MSwgJ2xpJz0+MSwgJ21haW4nPT4xLCAnbWVudSc9PjEsICduYXYnPT4xLCAnbm9zY3JpcHQnPT4xLCAnb2JqZWN0Jz0+MSwgJ3NlY3Rpb24nPT4xLCAnc2xvdCc9PjEsICdzdHlsZSc9PjEsICd0ZCc9PjEsICd0ZW1wbGF0ZSc9PjEsICd0aCc9PjEsICd2aWRlbyc9PjEpOyAvLyBMYXRlciBjb250ZXh0LXdpc2UgZHluYW1pYyBtb3ZlIG9mIGlucyAmIGRlbCB0byAkaW5saW5lS2lkRWxlQXIKICAkaW5saW5lS2lkRWxlQXIgPSBhcnJheSgnYWJicic9PjEsICdhY3JvbnltJz0+MSwgJ2FkZHJlc3MnPT4xLCAnYic9PjEsICdiZGknPT4xLCAnYmRvJz0+MSwgJ2JpZyc9PjEsICdjYXB0aW9uJz0+MSwgJ2NpdGUnPT4xLCAnY29kZSc9PjEsICdkYXRhJz0+MSwgJ2RhdGFsaXN0Jz0+MSwgJ2Rmbic9PjEsICdkdCc9PjEsICdlbSc9PjEsICdmaWdjYXB0aW9uJz0+MSwgJ2ZvbnQnPT4xLCAnaDEnPT4xLCAnaDInPT4xLCAnaDMnPT4xLCAnaDQnPT4xLCAnaDUnPT4xLCAnaDYnPT4xLCAnaGdyb3VwJz0+MSwgJ2knPT4xLCAna2JkJz0+MSwgJ2xhYmVsJz0+MSwgJ2xlZ2VuZCc9PjEsICdtYXJrJz0+MSwgJ21ldGVyJz0+MSwgJ291dHB1dCc9PjEsICdwJz0+MSwgJ3BpY3R1cmUnPT4xLCAncHJlJz0+MSwgJ3Byb2dyZXNzJz0+MSwgJ3EnPT4xLCAncmInPT4xLCAncnQnPT4xLCAncnVieSc9PjEsICdzJz0+MSwgJ3NhbXAnPT4xLCAnc21hbGwnPT4xLCAnc3Bhbic9PjEsICdzdHJpa2UnPT4xLCAnc3Ryb25nJz0+MSwgJ3N1Yic9PjEsICdzdW1tYXJ5Jz0+MSwgJ3N1cCc9PjEsICd0aW1lJz0+MSwgJ3R0Jz0+MSwgJ3UnPT4xLCAndmFyJz0+MSk7CiAgJG5vS2lkRWxlQXIgPSBhcnJheSgnYXJlYSc9PjEsICdicic9PjEsICdjb2wnPT4xLCAnY29tbWFuZCc9PjEsICdlbWJlZCc9PjEsICdocic9PjEsICdpbWcnPT4xLCAnaW5wdXQnPT4xLCAnaXNpbmRleCc9PjEsICdrZXlnZW4nPT4xLCAnbGluayc9PjEsICdtZXRhJz0+MSwgJ3BhcmFtJz0+MSwgJ3NvdXJjZSc9PjEsICd0cmFjayc9PjEsICd3YnInPT4xKTsKICAKICAvLyBTcGVjaWFsIHBhcmVudC1jaGlsZCByZWxhdGlvbnMuCiAgCiAgJGludmFsaWRNb21LaWRBciA9IGFycmF5KCdhJz0+YXJyYXkoJ2EnPT4xLCAnYWRkcmVzcyc9PjEsICdidXR0b24nPT4xLCAnZGV0YWlscyc9PjEsICdlbWJlZCc9PjEsICdpZnJhbWUnPT4xLCAna2V5Z2VuJz0+MSwgJ2xhYmVsJz0+MSwgJ3NlbGVjdCc9PjEsICd0ZXh0YXJlYSc9PjEpLCAnYWRkcmVzcyc9PmFycmF5KCdhZGRyZXNzJz0+MSwgJ2FydGljbGUnPT4xLCAnYXNpZGUnPT4xLCAnZm9vdGVyJz0+MSwgJ2gxJz0+MSwgJ2gyJz0+MSwgJ2gzJz0+MSwgJ2g0Jz0+MSwgJ2g1Jz0+MSwgJ2g2Jz0+MSwgJ2hlYWRlcic9PjEsICdoZ3JvdXAnPT4xLCAna2V5Z2VuJz0+MSwgJ25hdic9PjEsICdzZWN0aW9uJz0+MSksICdhdWRpbyc9PmFycmF5KCdhdWRpbyc9PjEsICd2aWRlbyc9PjEpLCAnYnV0dG9uJz0+YXJyYXkoJ2EnPT4xLCAnYWRkcmVzcyc9PjEsICdidXR0b24nPT4xLCAnZGV0YWlscyc9PjEsICdlbWJlZCc9PjEsICdpZnJhbWUnPT4xLCAna2V5Z2VuJz0+MSwgJ2xhYmVsJz0+MSwgJ3NlbGVjdCc9PjEsICd0ZXh0YXJlYSc9PjEpLCAnZGZuJz0+YXJyYXkoJ2Rmbic9PjEpLCAnZmllbGRzZXQnPT5hcnJheSgnZmllbGRzZXQnPT4xKSwgJ2Zvb3Rlcic9PmFycmF5KCdmb290ZXInPT4xLCAnaGVhZGVyJz0+MSksICdmb3JtJz0+YXJyYXkoJ2Zvcm0nPT4xKSwgJ2hlYWRlcic9PmFycmF5KCdmb290ZXInPT4xLCAnaGVhZGVyJz0+MSksICdsYWJlbCc9PmFycmF5KCdsYWJlbCc9PjEpLCAnbWFpbic9PmFycmF5KCdtYWluJz0+MSksICdtZXRlcic9PmFycmF5KCdtZXRlcic9PjEpLCAnbm9zY3JpcHQnPT5hcnJheSgnc2NyaXB0Jz0+MSksICdwcm9ncmVzcyc9PmFycmF5KCdwcm9ncmVzcyc9PjEpLCAncmInPT5hcnJheSgncnVieSc9PjEpLCAncnQnPT5hcnJheSgncnVieSc9PjEpLCAncnVieSc9PmFycmF5KCdydWJ5Jz0+MSksICd0aW1lJz0+YXJyYXkoJ3RpbWUnPT4xKSwgJ3ZpZGVvJz0+YXJyYXkoJ2F1ZGlvJz0+MSwgJ3ZpZGVvJz0+MSkpOwogICRpbnZhbGlkS2lkRWxlQXIgPSBhcnJheSgnYSc9PjEsICdhZGRyZXNzJz0+MSwgJ2FydGljbGUnPT4xLCAnYXNpZGUnPT4xLCAnYXVkaW8nPT4xLCAnYnV0dG9uJz0+MSwgJ2RldGFpbHMnPT4xLCAnZGZuJz0+MSwgJ2VtYmVkJz0+MSwgJ2ZpZWxkc2V0Jz0+MSwgJ2Zvb3Rlcic9PjEsICdmb3JtJz0+MSwgJ2gxJz0+MSwgJ2gyJz0+MSwgJ2gzJz0+MSwgJ2g0Jz0+MSwgJ2g1Jz0+MSwgJ2g2Jz0+MSwgJ2hlYWRlcic9PjEsICdoZ3JvdXAnPT4xLCAnaWZyYW1lJz0+MSwgJ2tleWdlbic9PjEsICdsYWJlbCc9PjEsICdtYWluJz0+MSwgJ21ldGVyJz0+MSwgJ25hdic9PjEsICdwcm9ncmVzcyc9PjEsICdydWJ5Jz0+MSwgJ3NjcmlwdCc9PjEsICdzZWN0aW9uJz0+MSwgJ3NlbGVjdCc9PjEsICd0ZXh0YXJlYSc9PjEsICd0aW1lJz0+MSwgJ3ZpZGVvJz0+MSk7IC8vICRpbnZhbGlkTW9tS2lkQXIgdmFsdWVzCiAgJGludmFsaWRNb21FbGVBciA9IGFycmF5X2tleXMoJGludmFsaWRNb21LaWRBcik7CiAgJHZhbGlkTW9tS2lkQXIgPSBhcnJheSgnY29sZ3JvdXAnPT5hcnJheSgnY29sJz0+MSwgJ3RlbXBsYXRlJz0+MSksICdkYXRhbGlzdCc9PmFycmF5KCdvcHRpb24nPT4xLCAnc2NyaXB0Jz0+MSksICdkaXInPT5hcnJheSgnbGknPT4xKSwgJ2RsJz0+YXJyYXkoJ2RkJz0+MSwgJ2Rpdic9PjEsICdkdCc9PjEpLCAnaGdyb3VwJz0+YXJyYXkoJ2gxJz0+MSwgJ2gyJz0+MSwgJ2gzJz0+MSwgJ2g0Jz0+MSwgJ2g1Jz0+MSwgJ2g2Jz0+MSksICdtZW51Jz0+YXJyYXkoJ2xpJz0+MSwgJ3NjcmlwdCc9PjEsICd0ZW1wbGF0ZSc9PjEpLCAnb2wnPT5hcnJheSgnbGknPT4xLCAnc2NyaXB0Jz0+MSwgJ3RlbXBsYXRlJz0+MSksICdvcHRncm91cCc9PmFycmF5KCdvcHRpb24nPT4xLCAnc2NyaXB0Jz0+MSwgJ3RlbXBsYXRlJz0+MSksICdvcHRpb24nPT5hcnJheSgnI3BjZGF0YSc9PjEpLCAncGljdHVyZSc9PmFycmF5KCdpbWcnPT4xLCAnc2NyaXB0Jz0+MSwgJ3NvdXJjZSc9PjEsICd0ZW1wbGF0ZSc9PjEpLCAncmJjJz0+YXJyYXkoJ3JiJz0+MSksICdycCc9PmFycmF5KCcjcGNkYXRhJz0+MSksICdydGMnPT5hcnJheSgncnAnPT4xLCAncnQnPT4xKSwgJ3NlbGVjdCc9PmFycmF5KCdvcHRncm91cCc9PjEsICdvcHRpb24nPT4xKSwgJ3NjcmlwdCc9PmFycmF5KCcjcGNkYXRhJz0+MSksICd0YWJsZSc9PmFycmF5KCdjYXB0aW9uJz0+MSwgJ2NvbCc9PjEsICdjb2xncm91cCc9PjEsICdzY3JpcHQnPT4xLCAndGJvZHknPT4xLCAndGZvb3QnPT4xLCAndGhlYWQnPT4xLCAndHInPT4xLCAndGVtcGxhdGUnPT4xKSwgJ3Rib2R5Jz0+YXJyYXkoJ3NjcmlwdCc9PjEsICd0ZW1wbGF0ZSc9PjEsICd0cic9PjEpLCAndGZvb3QnPT5hcnJheSgndHInPT4xKSwgJ3RleHRhcmVhJz0+YXJyYXkoJyNwY2RhdGEnPT4xKSwgJ3RoZWFkJz0+YXJyYXkoJ3NjcmlwdCc9PjEsICd0ZW1wbGF0ZSc9PjEsICd0cic9PjEpLCAndHInPT5hcnJheSgnc2NyaXB0Jz0+MSwgJ3RkJz0+MSwgJ3RlbXBsYXRlJz0+MSwgJ3RoJz0+MSksICd1bCc9PmFycmF5KCdsaSc9PjEsICdzY3JpcHQnPT4xLCAndGVtcGxhdGUnPT4xKSk7IC8vIEltbWVkaWF0ZSBwYXJlbnQtY2hpbGQgcmVsYXRpb24KICBpZiAoJEdMT0JBTFNbJ0MnXVsnZGlyZWN0X2xpc3RfbmVzdCddKSB7CiAgICAkdmFsaWRNb21LaWRBclsnb2wnXSA9ICR2YWxpZE1vbUtpZEFyWyd1bCddID0gJHZhbGlkTW9tS2lkQXJbJ21lbnUnXSArPSBhcnJheSgnbWVudSc9PjEsICdvbCc9PjEsICd1bCc9PjEpOwogIH0KICAkb3RoZXJWYWxpZE1vbUtpZEFyID0gYXJyYXkoJ2FkZHJlc3MnPT5hcnJheSgncCc9PjEpLCAnYXBwbGV0Jz0+YXJyYXkoJ3BhcmFtJz0+MSksICdhdWRpbyc9PmFycmF5KCdzb3VyY2UnPT4xLCAndHJhY2snPT4xKSwgJ2Jsb2NrcXVvdGUnPT5hcnJheSgnc2NyaXB0Jz0+MSksICdmaWVsZHNldCc9PmFycmF5KCdsZWdlbmQnPT4xLCAnI3BjZGF0YSc9PjEpLCAgJ2ZpZ3VyZSc9PmFycmF5KCdmaWdjYXB0aW9uJz0+MSksJ2Zvcm0nPT5hcnJheSgnc2NyaXB0Jz0+MSksICdtYXAnPT5hcnJheSgnYXJlYSc9PjEpLCAnbGVnZW5kJz0+YXJyYXkoJ2gxJz0+MSwgJ2gyJz0+MSwgJ2gzJz0+MSwgJ2g0Jz0+MSwgJ2g1Jz0+MSwgJ2g2Jz0+MSksICdvYmplY3QnPT5hcnJheSgncGFyYW0nPT4xLCAnZW1iZWQnPT4xKSwgJ3J1YnknPT5hcnJheSgncmInPT4xLCAncmJjJz0+MSwgJ3JwJz0+MSwgJ3J0Jz0+MSwgJ3J0Yyc9PjEpLCAnc3VtbWFyeSc9PmFycmF5KCdoMSc9PjEsICdoMic9PjEsICdoMyc9PjEsICdoNCc9PjEsICdoNSc9PjEsICdoNic9PjEsICdoZ3JvdXAnPT4xKSwgJ3ZpZGVvJz0+YXJyYXkoJ3NvdXJjZSc9PjEsICd0cmFjayc9PjEpKTsKICAKICAvLyBWYWxpZCBlbGVtZW50cyBmb3IgdG9wLWxldmVsIHBhcmVudC4KICAKICAkbW9tID0gKChpc3NldCgkZmxvd0VsZUFyWyRwYXJlbnRFbGVdKSAmJiAkcGFyZW50RWxlICE9ICcjcGNkYXRhJykKICAgICAgICAgIHx8IGlzc2V0KCRvdGhlckVsZUFyWyRwYXJlbnRFbGVdKSkKICAgID8gJHBhcmVudEVsZQogICAgOiAnZGl2JzsKICBpZiAoaXNzZXQoJG5vS2lkRWxlQXJbJG1vbV0pKSB7CiAgICByZXR1cm4gKCEkYWN0ID8gJycgOiBzdHJfcmVwbGFjZShhcnJheSgnPCcsICc+JyksIGFycmF5KCcmbHQ7JywgJyZndDsnKSwgJHQpKTsKICB9CiAgaWYgKGlzc2V0KCR2YWxpZE1vbUtpZEFyWyRtb21dKSkgewogICAgJHZhbGlkSW5Nb21FbGVBciA9ICR2YWxpZE1vbUtpZEFyWyRtb21dOwogIH0gZWxzZWlmIChpc3NldCgkaW5saW5lS2lkRWxlQXJbJG1vbV0pKSB7CiAgICAkdmFsaWRJbk1vbUVsZUFyID0gJGlubGluZUVsZUFyOwogICAgJGlubGluZUtpZEVsZUFyWydkZWwnXSA9IDE7CiAgICAkaW5saW5lS2lkRWxlQXJbJ2lucyddID0gMTsKICB9IGVsc2VpZiAoaXNzZXQoJGZsb3dLaWRFbGVBclskbW9tXSkpIHsKICAgICR2YWxpZEluTW9tRWxlQXIgPSAkZmxvd0VsZUFyOwogICAgdW5zZXQoJGlubGluZUtpZEVsZUFyWydkZWwnXSwgJGlubGluZUtpZEVsZUFyWydpbnMnXSk7CiAgfSBlbHNlaWYgKGlzc2V0KCRibG9ja0tpZEVsZUFyWyRtb21dKSkgewogICAgJHZhbGlkSW5Nb21FbGVBciA9ICRibG9ja0VsZUFyOwogICAgdW5zZXQoJGlubGluZUtpZEVsZUFyWydkZWwnXSwgJGlubGluZUtpZEVsZUFyWydpbnMnXSk7CiAgfQogIGlmIChpc3NldCgkb3RoZXJWYWxpZE1vbUtpZEFyWyRtb21dKSkgewogICAgJHZhbGlkSW5Nb21FbGVBciA9ICR2YWxpZEluTW9tRWxlQXIgKyAkb3RoZXJWYWxpZE1vbUtpZEFyWyRtb21dOwogIH0KICBpZiAoaXNzZXQoJGludmFsaWRNb21LaWRBclskbW9tXSkpIHsKICAgICR2YWxpZEluTW9tRWxlQXIgPSBhcnJheV9kaWZmX2Fzc29jKCR2YWxpZEluTW9tRWxlQXIsICRpbnZhbGlkTW9tS2lkQXJbJG1vbV0pOwogIH0KICBpZiAoc3RycG9zKCRtb20sICctJykpIHsgLy8gQ3VzdG9tIGVsZW1lbnQKICAgICR2YWxpZEluTW9tRWxlQXIgPSBhcnJheSgnKicgPT4gMSwgJyNwY2RhdGEnID0+MSk7CiAgfQogIAogIC8vIExvb3Agb3ZlciBlbGVtZW50cy4KICAKICAkdCA9IGV4cGxvZGUoJzwnLCAkdCk7CiAgJHZhbGlkS2lkc09mTW9tID0gJG9wZW5FbGVRdWV1ZSA9IGFycmF5KCk7IC8vIFF1ZXVlIG9mIG9wZW5lZCBlbGVtZW50cwogIG9iX3N0YXJ0KCk7CiAgZm9yICgkaT0tMSwgJGVsZUNvdW50PWNvdW50KCR0KTsgKyskaTwkZWxlQ291bnQ7KSB7CiAgICAKICAgIC8vIENoZWNrIGVsZW1lbnQgdmFsaWRpdHkgYXMgY2hpbGQuIFNhbWUgY29kZSBhcyBzZWN0aW9uOiBGaW5pc2hpbmcgKGJlbG93KS4KICAgIAogICAgaWYgKCRxdWV1ZUxlbmd0aCA9IGNvdW50KCRvcGVuRWxlUXVldWUpKSB7CiAgICAgICRlbGVOb3cgPSBhcnJheV9wb3AoJG9wZW5FbGVRdWV1ZSk7CiAgICAgICRvcGVuRWxlUXVldWVbXSA9ICRlbGVOb3c7CiAgICAgIGlmIChpc3NldCgkdmFsaWRNb21LaWRBclskZWxlTm93XSkpIHsKICAgICAgICAkdmFsaWRLaWRzT2ZNb20gPSAkdmFsaWRNb21LaWRBclskZWxlTm93XTsKICAgICAgfSBlbHNlaWYgKGlzc2V0KCRpbmxpbmVLaWRFbGVBclskZWxlTm93XSkpIHsKICAgICAgICAkdmFsaWRLaWRzT2ZNb20gPSAkaW5saW5lRWxlQXI7CiAgICAgICAgJGlubGluZUtpZEVsZUFyWydkZWwnXSA9IDE7CiAgICAgICAgJGlubGluZUtpZEVsZUFyWydpbnMnXSA9IDE7CiAgICAgIH0gZWxzZWlmIChpc3NldCgkZmxvd0tpZEVsZUFyWyRlbGVOb3ddKSkgewogICAgICAgICR2YWxpZEtpZHNPZk1vbSA9ICRmbG93RWxlQXI7CiAgICAgICAgdW5zZXQoJGlubGluZUtpZEVsZUFyWydkZWwnXSwgJGlubGluZUtpZEVsZUFyWydpbnMnXSk7CiAgICAgIH0gZWxzZWlmIChpc3NldCgkYmxvY2tLaWRFbGVBclskZWxlTm93XSkpIHsKICAgICAgICAkdmFsaWRLaWRzT2ZNb20gPSAkYmxvY2tFbGVBcjsKICAgICAgICB1bnNldCgkaW5saW5lS2lkRWxlQXJbJ2RlbCddLCAkaW5saW5lS2lkRWxlQXJbJ2lucyddKTsKICAgICAgfQogICAgICBpZiAoaXNzZXQoJG90aGVyVmFsaWRNb21LaWRBclskZWxlTm93XSkpIHsKICAgICAgICAkdmFsaWRLaWRzT2ZNb20gPSAkdmFsaWRLaWRzT2ZNb20gKyAkb3RoZXJWYWxpZE1vbUtpZEFyWyRlbGVOb3ddOwogICAgICB9CiAgICAgIGlmIChpc3NldCgkaW52YWxpZE1vbUtpZEFyWyRlbGVOb3ddKSkgewogICAgICAgICR2YWxpZEtpZHNPZk1vbSA9IGFycmF5X2RpZmZfYXNzb2MoJHZhbGlkS2lkc09mTW9tLCAkaW52YWxpZE1vbUtpZEFyWyRlbGVOb3ddKTsKICAgICAgfQogICAgICBpZiAoc3RycG9zKCRlbGVOb3csICctJykpIHsgLy8gQ3VzdG9tIGVsZW1lbnQKICAgICAgICAkdmFsaWRLaWRzT2ZNb20gPSBhcnJheSgnKic9PjEsICcjcGNkYXRhJz0+MSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICR2YWxpZEtpZHNPZk1vbSA9ICR2YWxpZEluTW9tRWxlQXI7CiAgICAgIHVuc2V0KCRpbmxpbmVLaWRFbGVBclsnZGVsJ10sICRpbmxpbmVLaWRFbGVBclsnaW5zJ10pOwogICAgfQogICAgaWYgKAogICAgICBpc3NldCgkZWxlKQogICAgICAmJiAoJGFjdCA9PSAxCiAgICAgICAgICB8fCAoaXNzZXQoJHZhbGlkS2lkc09mTW9tWycjcGNkYXRhJ10pCiAgICAgICAgICAgICAgJiYgKCRhY3QgPT0gMwogICAgICAgICAgICAgICAgICB8fCAkYWN0ID09IDUpKSkKICAgICkgewogICAgICBlY2hvICcmbHQ7JywgJHNsYXNoLCAkZWxlLCAkYXR0cnMsICcmZ3Q7JzsKICAgIH0KICAgIGlmIChpc3NldCgkY29udGVudFswXSkpIHsKICAgICAgaWYgKHN0cmxlbih0cmltKCRjb250ZW50KSkKICAgICAgICAgICYmICgoJHF1ZXVlTGVuZ3RoICYmIGlzc2V0KCRibG9ja0tpZEVsZUFyWyRlbGVOb3ddKSkKICAgICAgICAgICAgICB8fCAoaXNzZXQoJGJsb2NrS2lkRWxlQXJbJG1vbV0pICYmICEkcXVldWVMZW5ndGgpKQogICAgICApIHsKICAgICAgICBlY2hvICc8ZGl2PicsICRjb250ZW50LCAnPC9kaXY+JzsKICAgICAgfSBlbHNlaWYgKCRhY3QgPCAzIHx8IGlzc2V0KCR2YWxpZEtpZHNPZk1vbVsnI3BjZGF0YSddKSkgewogICAgICAgIGVjaG8gJGNvbnRlbnQ7CiAgICAgIH0gZWxzZWlmIChzdHJwb3MoJGNvbnRlbnQsICJceDAyXHgwNCIpKSB7CiAgICAgICAgZm9yZWFjaCAoCiAgICAgICAgICBwcmVnX3NwbGl0KAogICAgICAgICAgICAnYChceDAxXHgwMlteXHgwMVx4MDJdK1x4MDJceDAxKWAnLCAkY29udGVudCwgLTEsIFBSRUdfU1BMSVRfREVMSU1fQ0FQVFVSRSB8IFBSRUdfU1BMSVRfTk9fRU1QVFkpIGFzICRtKSB7CiAgICAgICAgICBlY2hvKAogICAgICAgICAgc3Vic3RyKCRtLCAwLCAyKSA9PSAiXHgwMVx4MDIiCiAgICAgICAgICAgID8gJG0KICAgICAgICAgICAgOiAoJGFjdCA+IDQKICAgICAgICAgICAgPyBwcmVnX3JlcGxhY2UoJ2BcU2AnLCAnJywgJG0pCiAgICAgICAgICAgIDogJycpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZWlmICgkYWN0ID4gNCkgewogICAgICAgIGVjaG8gcHJlZ19yZXBsYWNlKCdgXFNgJywgJycsICRjb250ZW50KTsKICAgICAgfQogICAgfSAvLyBFbmQ6IENoZWNrIGVsZW1lbnQgdmFsaWRpdHkgYXMgY2hpbGQKICAgIAogICAgLy8gR2V0IHBhcnRzIG9mIGVsZW1lbnQuCiAgICAKICAgIGlmICghcHJlZ19tYXRjaCgnYF4oLz8pKFthLXpdW14gPl0qKShbXj5dKik+KC4qKWBzbScsICR0WyRpXSwgJG0pKSB7CiAgICAgICRjb250ZW50ID0gJHRbJGldOwogICAgICBjb250aW51ZTsKICAgIH0KICAgICRzbGFzaCA9IG51bGw7IC8vIENsb3NpbmcgdGFnJ3Mgc2xhc2gKICAgICRlbGUgPSBudWxsOyAvLyBOYW1lCiAgICAkYXR0cnMgPSBudWxsOyAvLyBBdHRyaWJ1dGUgc3RyaW5nCiAgICAkY29udGVudCA9IG51bGw7IC8vIENvbnRlbnQKICAgIGxpc3QoJGFsbCwgJHNsYXNoLCAkZWxlLCAkYXR0cnMsICRjb250ZW50KSA9ICRtOwogICAgCiAgICAvLyBIYW5kbGUgY2xvc2luZyB0YWcuCiAgICAKICAgIGlmICgkc2xhc2gpIHsKICAgICAgaWYgKGlzc2V0KCRub0tpZEVsZUFyWyRlbGVdKSB8fCAhaW5fYXJyYXkoJGVsZSwgJG9wZW5FbGVRdWV1ZSkpIHsgLy8gRWxlbWVudCBlbXB0eSB0eXBlIG9yIHVub3BlbmVkCiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKCRlbGVOb3cgPT0gJGVsZSkgeyAvLyBMYXN0IG9wZW4gdGFnCiAgICAgICAgYXJyYXlfcG9wKCRvcGVuRWxlUXVldWUpOwogICAgICAgIGVjaG8gJzwvJywgJGVsZSwgJz4nOwogICAgICAgIHVuc2V0KCRlbGUpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgICRjbG9zZWRUYWdzID0gJyc7IC8vIE5lc3RpbmcsIHNvIGNsb3NlIG9wZW4gZWxlbWVudHMgYXMgbmVjZXNzYXJ5CiAgICAgIGZvciAoJGo9LTEsICRjaj1jb3VudCgkb3BlbkVsZVF1ZXVlKTsgKyskajwkY2o7KSB7CiAgICAgICAgaWYgKCgkY2xvc2FibGVFbGUgPSBhcnJheV9wb3AoJG9wZW5FbGVRdWV1ZSkpID09ICRlbGUpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAkY2xvc2VkVGFncyAuPSAiPC97JGNsb3NhYmxlRWxlfT4iOwogICAgICAgIH0KICAgICAgfQogICAgICBlY2hvICRjbG9zZWRUYWdzLCAnPC8nLCAkZWxlLCAnPic7CiAgICAgIHVuc2V0KCRlbGUpOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIAogICAgLy8gSGFuZGxlIG9wZW5pbmcgdGFnLgogICAgCiAgICBpZiAoaXNzZXQoJGJsb2NrS2lkRWxlQXJbJGVsZV0pICYmIHN0cmxlbih0cmltKCRjb250ZW50KSkpIHsgLy8gJGJsb2NrS2lkRWxlQXIgZWxlbWVudCBuZWVkcyAkYmxvY2tFbGVBciBlbGVtZW50CiAgICAgICR0WyRpXSA9ICJ7JGVsZX17JGF0dHJzfT4iOwogICAgICBhcnJheV9zcGxpY2UoJHQsICRpKzEsIDAsICdkaXY+Jy4gJGNvbnRlbnQpOwogICAgICB1bnNldCgkZWxlLCAkY29udGVudCk7CiAgICAgICsrJGVsZUNvdW50OwogICAgICAtLSRpOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIGlmIChzdHJwb3MoJGVsZSwgJy0nKSkgeyAvLyBDdXN0b20gZWxlbWVudAogICAgICAkdmFsaWRLaWRzT2ZNb21bJGVsZV0gPSAxOwogICAgfQogICAgaWYgKCgoJHF1ZXVlTGVuZ3RoICYmIGlzc2V0KCRibG9ja0tpZEVsZUFyWyRlbGVOb3ddKSkKICAgICAgICAgfHwgKGlzc2V0KCRibG9ja0tpZEVsZUFyWyRtb21dKSAmJiAhJHF1ZXVlTGVuZ3RoKSkKICAgICAgICAmJiAhaXNzZXQoJGJsb2NrRWxlQXJbJGVsZV0pCiAgICAgICAgJiYgIWlzc2V0KCR2YWxpZEtpZHNPZk1vbVskZWxlXSkKICAgICAgICAmJiAhaXNzZXQoJHZhbGlkS2lkc09mTW9tWycqJ10pCiAgICApIHsKICAgICAgYXJyYXlfc3BsaWNlKCR0LCAkaSwgMCwgJ2Rpdj4nKTsKICAgICAgdW5zZXQoJGVsZSwgJGNvbnRlbnQpOwogICAgICArKyRlbGVDb3VudDsKICAgICAgLS0kaTsKICAgICAgY29udGludWU7CiAgICB9CiAgICBpZiAoCiAgICAgICEkcXVldWVMZW5ndGgKICAgICAgfHwgIWlzc2V0KCRpbnZhbGlkS2lkRWxlQXJbJGVsZV0pCiAgICAgIHx8ICFhcnJheV9pbnRlcnNlY3QoJG9wZW5FbGVRdWV1ZSwgJGludmFsaWRNb21FbGVBcikKICAgICkgeyAvLyBJZiBubyBvcGVuIGVsZW1lbnQ7IG1vc3RseSBpbW1lZGlhdGUgcGFyZW50LWNoaWxkIHJlbGF0aW9uIHNob3VsZCBob2xkCiAgICAgIGlmICghaXNzZXQoJHZhbGlkS2lkc09mTW9tWyRlbGVdKSAmJiAhaXNzZXQoJHZhbGlkS2lkc09mTW9tWycqJ10pKSB7CiAgICAgICAgaWYgKCRxdWV1ZUxlbmd0aCAmJiBpc3NldCgkY2xvc2luZ1RhZ09taXRhYmxlRWxlQXJbJGVsZU5vd10pKSB7CiAgICAgICAgICBlY2hvICc8LycsIGFycmF5X3BvcCgkb3BlbkVsZVF1ZXVlKSwgJz4nOwogICAgICAgICAgdW5zZXQoJGVsZSwgJGNvbnRlbnQpOwogICAgICAgICAgLS0kaTsKICAgICAgICB9CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKCFpc3NldCgkbm9LaWRFbGVBclskZWxlXSkpIHsKICAgICAgICAkb3BlbkVsZVF1ZXVlW10gPSAkZWxlOwogICAgICB9CiAgICAgIGVjaG8gJzwnLCAkZWxlLCAkYXR0cnMsICc+JzsKICAgICAgdW5zZXQoJGVsZSk7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKGlzc2V0KCR2YWxpZE1vbUtpZEFyWyRlbGVOb3ddWyRlbGVdKSkgeyAvLyBTcGVjaWZpYyBwYXJlbnQtY2hpbGQgcmVsYXRpb24KICAgICAgaWYgKCFpc3NldCgkbm9LaWRFbGVBclskZWxlXSkpIHsKICAgICAgICAkb3BlbkVsZVF1ZXVlW10gPSAkZWxlOwogICAgICB9CiAgICAgIGVjaG8gJzwnLCAkZWxlLCAkYXR0cnMsICc+JzsKICAgICAgdW5zZXQoJGVsZSk7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgJGNsb3NlZFRhZ3MgPSAnJzsgLy8gTmVzdGluZywgc28gY2xvc2Ugb3BlbiBlbGVtZW50cyBhcyBuZWVkZWQKICAgICRvcGVuRWxlUXVldWUyID0gYXJyYXkoKTsKICAgIGZvciAoJGs9LTEsICRrYz1jb3VudCgkb3BlbkVsZVF1ZXVlKTsgKyskazwka2M7KSB7CiAgICAgICRjbG9zYWJsZUVsZSA9ICRvcGVuRWxlUXVldWVbJGtdOwogICAgICAkdmFsaWRLaWRzMiA9IGFycmF5KCk7CiAgICAgIGlmIChpc3NldCgkdmFsaWRNb21LaWRBclskY2xvc2FibGVFbGVdKSkgewogICAgICAgICRvcGVuRWxlUXVldWUyW10gPSAkY2xvc2FibGVFbGU7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgJHZhbGlkS2lkczIgPSBpc3NldCgkaW5saW5lS2lkRWxlQXJbJGNsb3NhYmxlRWxlXSkgPyAkaW5saW5lRWxlQXIgOiAkZmxvd0VsZUFyOwogICAgICBpZiAoaXNzZXQoJG90aGVyVmFsaWRNb21LaWRBclskY2xvc2FibGVFbGVdKSkgewogICAgICAgICR2YWxpZEtpZHMyID0gJHZhbGlkS2lkczIgKyAkb3RoZXJWYWxpZE1vbUtpZEFyWyRjbG9zYWJsZUVsZV07CiAgICAgIH0KICAgICAgaWYgKGlzc2V0KCRpbnZhbGlkTW9tS2lkQXJbJGNsb3NhYmxlRWxlXSkpIHsKICAgICAgICAkdmFsaWRLaWRzMiA9IGFycmF5X2RpZmZfYXNzb2MoJHZhbGlkS2lkczIsICRpbnZhbGlkTW9tS2lkQXJbJGNsb3NhYmxlRWxlXSk7CiAgICAgIH0KICAgICAgaWYgKCFpc3NldCgkdmFsaWRLaWRzMlskZWxlXSkgJiYgIXN0cnBvcygkZWxlLCAnLScpKSB7CiAgICAgICAgaWYgKCEkayAmJiAhaXNzZXQoJHZhbGlkSW5Nb21FbGVBclskZWxlXSkgJiYgIWlzc2V0KCR2YWxpZEluTW9tRWxlQXJbJyonXSkpIHsKICAgICAgICAgIGNvbnRpbnVlIDI7CiAgICAgICAgfQogICAgICAgICRjbG9zZWRUYWdzID0gIjwveyRjbG9zYWJsZUVsZX0+IjsKICAgICAgICBmb3IgKDsrKyRrPCRrYzspIHsKICAgICAgICAgICRjbG9zZWRUYWdzID0gIjwveyRvcGVuRWxlUXVldWVbJGtdfT57JGNsb3NlZFRhZ3N9IjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgJG9wZW5FbGVRdWV1ZTJbXSA9ICRjbG9zYWJsZUVsZTsKICAgICAgfQogICAgfQogICAgJG9wZW5FbGVRdWV1ZSA9ICRvcGVuRWxlUXVldWUyOwogICAgaWYgKCFpc3NldCgkbm9LaWRFbGVBclskZWxlXSkpIHsKICAgICAgJG9wZW5FbGVRdWV1ZVtdID0gJGVsZTsKICAgIH0KICAgIGVjaG8gJGNsb3NlZFRhZ3MsICc8JywgJGVsZSwgJGF0dHJzLCAnPic7CiAgICB1bnNldCgkZWxlKTsKICAgIGNvbnRpbnVlOwogIH0gLy8gRW5kIG9mIEZvcjogbG9vcCBvdmVyIGVsZW1lbnRzCiAgCiAgLy8gRmluaXNoaW5nLiBTYW1lIGNvZGUgYXM6ICdDaGVjayBlbGVtZW50IHZhbGlkaXR5IGFzIGNoaWxkJy4KICAKICBpZiAoJHF1ZXVlTGVuZ3RoID0gY291bnQoJG9wZW5FbGVRdWV1ZSkpIHsKICAgICRlbGVOb3cgPSBhcnJheV9wb3AoJG9wZW5FbGVRdWV1ZSk7CiAgICAkb3BlbkVsZVF1ZXVlW10gPSAkZWxlTm93OwogICAgaWYgKGlzc2V0KCR2YWxpZE1vbUtpZEFyWyRlbGVOb3ddKSkgewogICAgICAkdmFsaWRLaWRzT2ZNb20gPSAkdmFsaWRNb21LaWRBclskZWxlTm93XTsKICAgIH0gZWxzZWlmIChpc3NldCgkaW5saW5lS2lkRWxlQXJbJGVsZU5vd10pKSB7CiAgICAgICR2YWxpZEtpZHNPZk1vbSA9ICRpbmxpbmVFbGVBcjsKICAgICAgJGlubGluZUtpZEVsZUFyWydkZWwnXSA9IDE7CiAgICAgICRpbmxpbmVLaWRFbGVBclsnaW5zJ10gPSAxOwogICAgfSBlbHNlaWYgKGlzc2V0KCRmbG93S2lkRWxlQXJbJGVsZU5vd10pKSB7CiAgICAgICR2YWxpZEtpZHNPZk1vbSA9ICRmbG93RWxlQXI7CiAgICAgIHVuc2V0KCRpbmxpbmVLaWRFbGVBclsnZGVsJ10sICRpbmxpbmVLaWRFbGVBclsnaW5zJ10pOwogICAgfSBlbHNlaWYgKGlzc2V0KCRibG9ja0tpZEVsZUFyWyRlbGVOb3ddKSkgewogICAgICAkdmFsaWRLaWRzT2ZNb20gPSAkYmxvY2tFbGVBcjsKICAgICAgdW5zZXQoJGlubGluZUtpZEVsZUFyWydkZWwnXSwgJGlubGluZUtpZEVsZUFyWydpbnMnXSk7CiAgICB9CiAgICBpZiAoaXNzZXQoJG90aGVyVmFsaWRNb21LaWRBclskZWxlTm93XSkpIHsKICAgICAgJHZhbGlkS2lkc09mTW9tID0gJHZhbGlkS2lkc09mTW9tICsgJG90aGVyVmFsaWRNb21LaWRBclskZWxlTm93XTsKICAgIH0KICAgIGlmIChpc3NldCgkaW52YWxpZE1vbUtpZEFyWyRlbGVOb3ddKSkgewogICAgICAkdmFsaWRLaWRzT2ZNb20gPSBhcnJheV9kaWZmX2Fzc29jKCR2YWxpZEtpZHNPZk1vbSwgJGludmFsaWRNb21LaWRBclskZWxlTm93XSk7CiAgICB9CiAgICBpZiAoc3RycG9zKCRlbGVOb3csICctJykpIHsgLy8gQ3VzdG9tIGVsZW1lbnQKICAgICAgJHZhbGlkS2lkc09mTW9tID0gYXJyYXkoJyonPT4xLCAnI3BjZGF0YSc9PjEpOwogICAgfQogIH0gZWxzZSB7CiAgICAkdmFsaWRLaWRzT2ZNb20gPSAkdmFsaWRJbk1vbUVsZUFyOwogICAgdW5zZXQoJGlubGluZUtpZEVsZUFyWydkZWwnXSwgJGlubGluZUtpZEVsZUFyWydpbnMnXSk7CiAgfQogIGlmICgKICAgIGlzc2V0KCRlbGUpCiAgICAmJiAoJGFjdCA9PSAxCiAgICAgICAgfHwgKGlzc2V0KCR2YWxpZEtpZHNPZk1vbVsnI3BjZGF0YSddKQogICAgICAgICAgICAmJiAoJGFjdCA9PSAzCiAgICAgICAgICAgICAgICB8fCAkYWN0ID09IDUpKSkKICApIHsKICAgIGVjaG8gJyZsdDsnLCAkc2xhc2gsICRlbGUsICRhdHRycywgJyZndDsnOwogIH0KICBpZiAoaXNzZXQoJGNvbnRlbnRbMF0pKSB7CiAgICBpZiAoCiAgICAgIHN0cmxlbih0cmltKCRjb250ZW50KSkKICAgICAgJiYgKCgkcXVldWVMZW5ndGggJiYgaXNzZXQoJGJsb2NrS2lkRWxlQXJbJGVsZU5vd10pKQogICAgICAgICAgfHwgKGlzc2V0KCRibG9ja0tpZEVsZUFyWyRtb21dKSAmJiAhJHF1ZXVlTGVuZ3RoKSkKICAgICkgewogICAgICBlY2hvICc8ZGl2PicsICRjb250ZW50LCAnPC9kaXY+JzsKICAgIH0gZWxzZWlmICgkYWN0IDwgMyB8fCBpc3NldCgkdmFsaWRLaWRzT2ZNb21bJyNwY2RhdGEnXSkpIHsKICAgICAgZWNobyAkY29udGVudDsKICAgIH0gZWxzZWlmIChzdHJwb3MoJGNvbnRlbnQsICJceDAyXHgwNCIpKSB7CiAgICAgIGZvcmVhY2ggKAogICAgICAgIHByZWdfc3BsaXQoCiAgICAgICAgICAnYChceDAxXHgwMlteXHgwMVx4MDJdK1x4MDJceDAxKWAnLCAkY29udGVudCwgLTEsIFBSRUdfU1BMSVRfREVMSU1fQ0FQVFVSRSB8IFBSRUdfU1BMSVRfTk9fRU1QVFkpIGFzICRtKSB7CiAgICAgICAgZWNobygKICAgICAgICBzdWJzdHIoJG0sIDAsIDIpID09ICJceDAxXHgwMiIKICAgICAgICAgID8gJG0KICAgICAgICAgIDogKCRhY3QgPiA0CiAgICAgICAgICA/IHByZWdfcmVwbGFjZSgnYFxTYCcsICcnLCAkbSkKICAgICAgICAgIDogJycpKTsKICAgICAgfQogICAgfSBlbHNlaWYgKCRhY3QgPiA0KSB7CiAgICAgIGVjaG8gcHJlZ19yZXBsYWNlKCdgXFNgJywgJycsICRjb250ZW50KTsKICAgIH0KICB9IC8vIEVuZDogRmluaXNoaW5nCiAgCiAgd2hpbGUgKCFlbXB0eSgkb3BlbkVsZVF1ZXVlKSAmJiAoJGVsZSA9IGFycmF5X3BvcCgkb3BlbkVsZVF1ZXVlKSkpIHsKICAgIGVjaG8gJzwvJywgJGVsZSwgJz4nOwogIH0KICAkbyA9IG9iX2dldF9jb250ZW50cygpOwogIG9iX2VuZF9jbGVhbigpOwogIHJldHVybiAkbzsKfQoKLyoqCiAqIEhhbmRsZSBjb21tZW50L0NEQVRBIHNlY3Rpb24uCiAqCiAqIEZpbHRlci9zYW5pdGl6ZSBhcyBwZXIgJGNvbmZpZyBhbmQgZGlzZ3Vpc2Ugc3BlY2lhbCBjaGFyYWN0ZXJzLgogKgogKiBAcGFyYW0gIGFycmF5ICAkdCBBcnJheSByZXN1bHQgb2YgcHJlZ19yZXBsYWNlLCB3aXRoIHBvdGVudGlhbCBjb21tZW50L0NEQVRBLgogKiBAcmV0dXJuIHN0cmluZyAgICBTYW5pdGl6ZWQgY29tbWVudC9DREFUQSB3aXRoIGhpZGRlbiBzcGVjaWFsIGNoYXJhY3RlcnMuCiAqLwpmdW5jdGlvbiBobF9jb21tZW50Q2RhdGEoJHQpCnsKICAkdCA9ICR0WzBdOwogIGdsb2JhbCAkQzsKICBpZiAoISgkcnVsZSA9ICRDWyR0eXBlID0gJHRbM10gPT0gJy0nID8gJ2NvbW1lbnQnIDogJ2NkYXRhJ10pKSB7CiAgICByZXR1cm4gJHQ7CiAgfQogIGlmICgkcnVsZSA9PSAxKSB7CiAgICByZXR1cm4gJyc7CiAgfQogIGlmICgkdHlwZSA9PSAnY29tbWVudCcpIHsKICAgIGlmIChzdWJzdHIoKCR0ID0gcHJlZ19yZXBsYWNlKCdgLS0rYCcsICctJywgc3Vic3RyKCR0LCA0LCAtMykpKSwgLTEpICE9ICcgJykgewogICAgICAkdCAuPSAkcnVsZSA9PSA0ID8gJycgOiAnICc7CiAgICB9CiAgfSBlbHNlIHsKICAgICR0ID0gc3Vic3RyKCR0LCAxLCAtMSk7CiAgfQogICR0ID0gJHJ1bGUgPT0gMiA/IHN0cl9yZXBsYWNlKGFycmF5KCcmJywgJzwnLCAnPicpLCBhcnJheSgnJmFtcDsnLCAnJmx0OycsICcmZ3Q7JyksICR0KSA6ICR0OwogIHJldHVybgogICAgc3RyX3JlcGxhY2UoCiAgICAgIGFycmF5KCcmJywgJzwnLCAnPicpLAogICAgICBhcnJheSgiXHgwMyIsICJceDA0IiwgIlx4MDUiKSwKICAgICAgKCR0eXBlID09ICdjb21tZW50JyA/ICJceDAxXHgwMlx4MDQhLS0kdC0tXHgwNVx4MDJceDAxIiA6ICJceDAxXHgwMVx4MDQkdFx4MDVceDAxXHgwMSIpKTsKfQoKLyoqCiAqIFRyYW5zZm9ybSBkZXByZWNhdGVkIGVsZW1lbnQsIHdpdGggYW55IGF0dHJpYnV0ZSwgaW50byBhIG5ldyBlbGVtZW50LgogKgogKgogKiBAcGFyYW0gIHN0cmluZyAkZWxlICAgICBEZXByZWNhdGVkIGVsZW1lbnQuCiAqIEBwYXJhbSAgc3RyaW5nICRhdHRyU3RyIEF0dHJpYnV0ZSBzdHJpbmcgb2YgZWxlbWVudC4KICogQHBhcmFtICBpbnQgICAgJGFjdCAgICAgTm8gdHJhbnNmb3JtYXRpb24gaWYgMi4KICogQHJldHVybiBtaXhlZCAgICAgICAgICAgTmV3IGF0dHJpYnV0ZSBzdHJpbmcgKG1heSBiZSBlbXB0eSkgb3IgMC4KICovCmZ1bmN0aW9uIGhsX2RlcHJlY2F0ZWRFbGVtZW50KCYkZWxlLCAmJGF0dHJTdHIsICRhY3Q9MSkKewogIGlmICgkZWxlID09ICdiaWcnKSB7CiAgICAkZWxlID0gJ3NwYW4nOwogICAgcmV0dXJuICdmb250LXNpemU6IGxhcmdlcjsnOwogIH0KICBpZiAoJGVsZSA9PSAncycgfHwgJGVsZSA9PSAnc3RyaWtlJykgewogICAgJGVsZSA9ICdzcGFuJzsKICAgIHJldHVybiAndGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7JzsKICB9CiAgaWYgKCRlbGUgPT0gJ3R0JykgewogICAgJGVsZSA9ICdjb2RlJzsKICAgIHJldHVybiAnJzsKICB9CiAgaWYgKCRlbGUgPT0gJ2NlbnRlcicpIHsKICAgICRlbGUgPSAnZGl2JzsKICAgIHJldHVybiAndGV4dC1hbGlnbjogY2VudGVyOyc7CiAgfQogIHN0YXRpYyAkZm9udFNpemVBciA9IGFycmF5KCcwJz0+J3h4LXNtYWxsJywgJzEnPT4neHgtc21hbGwnLCAnMic9PidzbWFsbCcsICczJz0+J21lZGl1bScsICc0Jz0+J2xhcmdlJywgJzUnPT4neC1sYXJnZScsICc2Jz0+J3h4LWxhcmdlJywgJzcnPT4nMzAwJScsICctMSc9PidzbWFsbGVyJywgJy0yJz0+JzYwJScsICcrMSc9PidsYXJnZXInLCAnKzInPT4nMTUwJScsICcrMyc9PicyMDAlJywgJys0Jz0+JzMwMCUnKTsKICBpZiAoJGVsZSA9PSAnZm9udCcpIHsKICAgICRhdHRyU3RyTmV3ID0gJyc7CiAgICB3aGlsZSAocHJlZ19tYXRjaCgnYChefFxzKShjb2xvcnxzaXplKVxzKj1ccyooXCd8Iik/KC4rPykoXFwzfFxzfCQpYGknLCAkYXR0clN0ciwgJG0pKSB7CiAgICAgICRhdHRyU3RyID0gc3RyX3JlcGxhY2UoJG1bMF0sICcgJywgJGF0dHJTdHIpIDsKICAgICAgJGF0dHJTdHJOZXcgLj0KICAgICAgICBzdHJ0b2xvd2VyKCRtWzJdKSA9PSAnY29sb3InCiAgICAgICAgICA/ICcgY29sb3I6ICcuIHN0cl9yZXBsYWNlKGFycmF5KCciJywgJzsnLCAnOicpLCAnXCcnLCB0cmltKCRtWzRdKSkuICc7JwogICAgICAgICAgOiAoaXNzZXQoJGZvbnRTaXplQXJbKCRtID0gdHJpbSgkbVs0XSkpXSkKICAgICAgICAgID8gJyBmb250LXNpemU6ICcuICRmb250U2l6ZUFyWyRtXS4gJzsnCiAgICAgICAgICA6ICcnKTsKICAgIH0KICAgIHdoaWxlICgKICAgICAgcHJlZ19tYXRjaCgnYChefFxzKWZhY2Vccyo9XHMqKFwnfCIpPyhbXj1dKz8pXFwyYGknLCAkYXR0clN0ciwgJG0pCiAgICAgIHx8IHByZWdfbWF0Y2goJ2AoXnxccylmYWNlXHMqPShccyopKFxTKylgaScsICRhdHRyU3RyLCAkbSkKICAgICkgewogICAgICAkYXR0clN0ciA9IHN0cl9yZXBsYWNlKCRtWzBdLCAnICcsICRhdHRyU3RyKSA7CiAgICAgICRhdHRyU3RyTmV3IC49ICcgZm9udC1mYW1pbHk6ICcuIHN0cl9yZXBsYWNlKGFycmF5KCciJywgJzsnLCAnOicpLCAnXCcnLCB0cmltKCRtWzNdKSkuICc7JzsKICAgIH0KICAgICRlbGUgPSAnc3Bhbic7CiAgICByZXR1cm4gbHRyaW0oc3RyX3JlcGxhY2UoJzwnLCAnJywgJGF0dHJTdHJOZXcpKTsKICB9CiAgaWYgKCRlbGUgPT0gJ2Fjcm9ueW0nKSB7CiAgICAkZWxlID0gJ2FiYnInOwogICAgcmV0dXJuICcnOwogIH0KICBpZiAoJGVsZSA9PSAnZGlyJykgewogICAgJGVsZSA9ICd1bCc7CiAgICByZXR1cm4gJyc7CiAgfQogIGlmICgkYWN0ID09IDIpIHsKICAgICRlbGUgPSAwOwogICAgcmV0dXJuIDA7CiAgfQogIHJldHVybiAnJzsKfQoKLyoqCiAqIEhhbmRsZSBlbnRpdHkuCiAqCiAqIEFzIG5lZWRlZCwgY29udmVydCB0byBuYW1lZC9oZXhhZGVjaW1hbCBmb3JtLCBvciBuZXV0cmFsaXplICcmJyBhcyAnJmFtcDsnLgogKgogKiBAcGFyYW0gIGFycmF5ICAkdCBBcnJheSByZXN1bHQgb2YgcHJlZ19yZXBsYWNlLCB3aXRoIHBvdGVudGlhbCBlbnRpdHkuCiAqIEByZXR1cm4gc3RyaW5nICAgIE5ldXRyYWxpemVkIG9yIGNvbnZlcnRlZCBlbnRpdHkuCiAqLwpmdW5jdGlvbiBobF9lbnRpdHkoJHQpCnsKICBnbG9iYWwgJEM7CiAgJHQgPSAkdFsxXTsKICBzdGF0aWMgJHJlc2VydmVkRW50QXIgPSBhcnJheSgnYW1wJz0+MSwgJ0FNUCc9PjEsICdndCc9PjEsICdHVCc9PjEsICdsdCc9PjEsICdMVCc9PjEsICdxdW90Jz0+MSwgJ1FVT1QnPT4xKTsKICBzdGF0aWMgJGNvbW1vbkVudE5hbWVBciA9IGFycmF5KCdBYWN1dGUnPT4nMTkzJywgJ2FhY3V0ZSc9PicyMjUnLCAnQWNpcmMnPT4nMTk0JywgJ2FjaXJjJz0+JzIyNicsICdhY3V0ZSc9PicxODAnLCAnQUVsaWcnPT4nMTk4JywgJ2FlbGlnJz0+JzIzMCcsICdBZ3JhdmUnPT4nMTkyJywgJ2FncmF2ZSc9PicyMjQnLCAnYWxlZnN5bSc9Pic4NTAxJywgJ0FscGhhJz0+JzkxMycsICdhbHBoYSc9Pic5NDUnLCAnYW5kJz0+Jzg3NDMnLCAnYW5nJz0+Jzg3MzYnLCAnYXBvcyc9PiczOScsICdBcmluZyc9PicxOTcnLCAnYXJpbmcnPT4nMjI5JywgJ2FzeW1wJz0+Jzg3NzYnLCAnQXRpbGRlJz0+JzE5NScsICdhdGlsZGUnPT4nMjI3JywgJ0F1bWwnPT4nMTk2JywgJ2F1bWwnPT4nMjI4JywgJ2JkcXVvJz0+JzgyMjInLCAnQmV0YSc9Pic5MTQnLCAnYmV0YSc9Pic5NDYnLCAnYnJ2YmFyJz0+JzE2NicsICdidWxsJz0+JzgyMjYnLCAnY2FwJz0+Jzg3NDUnLCAnQ2NlZGlsJz0+JzE5OScsICdjY2VkaWwnPT4nMjMxJywgJ2NlZGlsJz0+JzE4NCcsICdjZW50Jz0+JzE2MicsICdDaGknPT4nOTM1JywgJ2NoaSc9Pic5NjcnLCAnY2lyYyc9Pic3MTAnLCAnY2x1YnMnPT4nOTgyNycsICdjb25nJz0+Jzg3NzMnLCAnY29weSc9PicxNjknLCAnY3JhcnInPT4nODYyOScsICdjdXAnPT4nODc0NicsICdjdXJyZW4nPT4nMTY0JywgJ2RhZ2dlcic9Pic4MjI0JywgJ0RhZ2dlcic9Pic4MjI1JywgJ2RhcnInPT4nODU5NScsICdkQXJyJz0+Jzg2NTknLCAnZGVnJz0+JzE3NicsICdEZWx0YSc9Pic5MTYnLCAnZGVsdGEnPT4nOTQ4JywgJ2RpYW1zJz0+Jzk4MzAnLCAnZGl2aWRlJz0+JzI0NycsICdFYWN1dGUnPT4nMjAxJywgJ2VhY3V0ZSc9PicyMzMnLCAnRWNpcmMnPT4nMjAyJywgJ2VjaXJjJz0+JzIzNCcsICdFZ3JhdmUnPT4nMjAwJywgJ2VncmF2ZSc9PicyMzInLCAnZW1wdHknPT4nODcwOScsICdlbXNwJz0+JzgxOTUnLCAnZW5zcCc9Pic4MTk0JywgJ0Vwc2lsb24nPT4nOTE3JywgJ2Vwc2lsb24nPT4nOTQ5JywgJ2VxdWl2Jz0+Jzg4MDEnLCAnRXRhJz0+JzkxOScsICdldGEnPT4nOTUxJywgJ0VUSCc9PicyMDgnLCAnZXRoJz0+JzI0MCcsICdFdW1sJz0+JzIwMycsICdldW1sJz0+JzIzNScsICdldXJvJz0+JzgzNjQnLCAnZXhpc3QnPT4nODcwNycsICdmbm9mJz0+JzQwMicsICdmb3JhbGwnPT4nODcwNCcsICdmcmFjMTInPT4nMTg5JywgJ2ZyYWMxNCc9PicxODgnLCAnZnJhYzM0Jz0+JzE5MCcsICdmcmFzbCc9Pic4MjYwJywgJ0dhbW1hJz0+JzkxNScsICdnYW1tYSc9Pic5NDcnLCAnZ2UnPT4nODgwNScsICdoYXJyJz0+Jzg1OTYnLCAnaEFycic9Pic4NjYwJywgJ2hlYXJ0cyc9Pic5ODI5JywgJ2hlbGxpcCc9Pic4MjMwJywgJ0lhY3V0ZSc9PicyMDUnLCAnaWFjdXRlJz0+JzIzNycsICdJY2lyYyc9PicyMDYnLCAnaWNpcmMnPT4nMjM4JywgJ2lleGNsJz0+JzE2MScsICdJZ3JhdmUnPT4nMjA0JywgJ2lncmF2ZSc9PicyMzYnLCAnaW1hZ2UnPT4nODQ2NScsICdpbmZpbic9Pic4NzM0JywgJ2ludCc9Pic4NzQ3JywgJ0lvdGEnPT4nOTIxJywgJ2lvdGEnPT4nOTUzJywgJ2lxdWVzdCc9PicxOTEnLCAnaXNpbic9Pic4NzEyJywgJ0l1bWwnPT4nMjA3JywgJ2l1bWwnPT4nMjM5JywgJ0thcHBhJz0+JzkyMicsICdrYXBwYSc9Pic5NTQnLCAnTGFtYmRhJz0+JzkyMycsICdsYW1iZGEnPT4nOTU1JywgJ2xhcXVvJz0+JzE3MScsICdsYXJyJz0+Jzg1OTInLCAnbEFycic9Pic4NjU2JywgJ2xjZWlsJz0+Jzg5NjgnLCAnbGRxdW8nPT4nODIyMCcsICdsZSc9Pic4ODA0JywgJ2xmbG9vcic9Pic4OTcwJywgJ2xvd2FzdCc9Pic4NzI3JywgJ2xveic9Pic5Njc0JywgJ2xybSc9Pic4MjA2JywgJ2xzYXF1byc9Pic4MjQ5JywgJ2xzcXVvJz0+JzgyMTYnLCAnbWFjcic9PicxNzUnLCAnbWRhc2gnPT4nODIxMicsICdtaWNybyc9PicxODEnLCAnbWlkZG90Jz0+JzE4MycsICdtaW51cyc9Pic4NzIyJywgJ011Jz0+JzkyNCcsICdtdSc9Pic5NTYnLCAnbmFibGEnPT4nODcxMScsICduYnNwJz0+JzE2MCcsICduZGFzaCc9Pic4MjExJywgJ25lJz0+Jzg4MDAnLCAnbmknPT4nODcxNScsICdub3QnPT4nMTcyJywgJ25vdGluJz0+Jzg3MTMnLCAnbnN1Yic9Pic4ODM2JywgJ050aWxkZSc9PicyMDknLCAnbnRpbGRlJz0+JzI0MScsICdOdSc9Pic5MjUnLCAnbnUnPT4nOTU3JywgJ09hY3V0ZSc9PicyMTEnLCAnb2FjdXRlJz0+JzI0MycsICdPY2lyYyc9PicyMTInLCAnb2NpcmMnPT4nMjQ0JywgJ09FbGlnJz0+JzMzOCcsICdvZWxpZyc9PiczMzknLCAnT2dyYXZlJz0+JzIxMCcsICdvZ3JhdmUnPT4nMjQyJywgJ29saW5lJz0+JzgyNTQnLCAnT21lZ2EnPT4nOTM3JywgJ29tZWdhJz0+Jzk2OScsICdPbWljcm9uJz0+JzkyNycsICdvbWljcm9uJz0+Jzk1OScsICdvcGx1cyc9Pic4ODUzJywgJ29yJz0+Jzg3NDQnLCAnb3JkZic9PicxNzAnLCAnb3JkbSc9PicxODYnLCAnT3NsYXNoJz0+JzIxNicsICdvc2xhc2gnPT4nMjQ4JywgJ090aWxkZSc9PicyMTMnLCAnb3RpbGRlJz0+JzI0NScsICdvdGltZXMnPT4nODg1NScsICdPdW1sJz0+JzIxNCcsICdvdW1sJz0+JzI0NicsICdwYXJhJz0+JzE4MicsICdwYXJ0Jz0+Jzg3MDYnLCAncGVybWlsJz0+JzgyNDAnLCAncGVycCc9Pic4ODY5JywgJ1BoaSc9Pic5MzQnLCAncGhpJz0+Jzk2NicsICdQaSc9Pic5MjgnLCAncGknPT4nOTYwJywgJ3Bpdic9Pic5ODInLCAncGx1c21uJz0+JzE3NycsICdwb3VuZCc9PicxNjMnLCAncHJpbWUnPT4nODI0MicsICdQcmltZSc9Pic4MjQzJywgJ3Byb2QnPT4nODcxOScsICdwcm9wJz0+Jzg3MzMnLCAnUHNpJz0+JzkzNicsICdwc2knPT4nOTY4JywgJ3JhZGljJz0+Jzg3MzAnLCAncmFxdW8nPT4nMTg3JywgJ3JhcnInPT4nODU5NCcsICdyQXJyJz0+Jzg2NTgnLCAncmNlaWwnPT4nODk2OScsICdyZHF1byc9Pic4MjIxJywgJ3JlYWwnPT4nODQ3NicsICdyZWcnPT4nMTc0JywgJ3JmbG9vcic9Pic4OTcxJywgJ1Jobyc9Pic5MjknLCAncmhvJz0+Jzk2MScsICdybG0nPT4nODIwNycsICdyc2FxdW8nPT4nODI1MCcsICdyc3F1byc9Pic4MjE3JywgJ3NicXVvJz0+JzgyMTgnLCAnU2Nhcm9uJz0+JzM1MicsICdzY2Fyb24nPT4nMzUzJywgJ3Nkb3QnPT4nODkwMScsICdzZWN0Jz0+JzE2NycsICdzaHknPT4nMTczJywgJ1NpZ21hJz0+JzkzMScsICdzaWdtYSc9Pic5NjMnLCAnc2lnbWFmJz0+Jzk2MicsICdzaW0nPT4nODc2NCcsICdzcGFkZXMnPT4nOTgyNCcsICdzdWInPT4nODgzNCcsICdzdWJlJz0+Jzg4MzgnLCAnc3VtJz0+Jzg3MjEnLCAnc3VwJz0+Jzg4MzUnLCAnc3VwMSc9PicxODUnLCAnc3VwMic9PicxNzgnLCAnc3VwMyc9PicxNzknLCAnc3VwZSc9Pic4ODM5JywgJ3N6bGlnJz0+JzIyMycsICdUYXUnPT4nOTMyJywgJ3RhdSc9Pic5NjQnLCAndGhlcmU0Jz0+Jzg3NTYnLCAnVGhldGEnPT4nOTIwJywgJ3RoZXRhJz0+Jzk1MicsICd0aGV0YXN5bSc9Pic5NzcnLCAndGhpbnNwJz0+JzgyMDEnLCAnVEhPUk4nPT4nMjIyJywgJ3Rob3JuJz0+JzI1NCcsICd0aWxkZSc9Pic3MzInLCAndGltZXMnPT4nMjE1JywgJ3RyYWRlJz0+Jzg0ODInLCAnVWFjdXRlJz0+JzIxOCcsICd1YWN1dGUnPT4nMjUwJywgJ3VhcnInPT4nODU5MycsICd1QXJyJz0+Jzg2NTcnLCAnVWNpcmMnPT4nMjE5JywgJ3VjaXJjJz0+JzI1MScsICdVZ3JhdmUnPT4nMjE3JywgJ3VncmF2ZSc9PicyNDknLCAndW1sJz0+JzE2OCcsICd1cHNpaCc9Pic5NzgnLCAnVXBzaWxvbic9Pic5MzMnLCAndXBzaWxvbic9Pic5NjUnLCAnVXVtbCc9PicyMjAnLCAndXVtbCc9PicyNTInLCAnd2VpZXJwJz0+Jzg0NzInLCAnWGknPT4nOTI2JywgJ3hpJz0+Jzk1OCcsICdZYWN1dGUnPT4nMjIxJywgJ3lhY3V0ZSc9PicyNTMnLCAneWVuJz0+JzE2NScsICd5dW1sJz0+JzI1NScsICdZdW1sJz0+JzM3NicsICdaZXRhJz0+JzkxOCcsICd6ZXRhJz0+Jzk1MCcsICd6d2onPT4nODIwNScsICd6d25qJz0+JzgyMDQnKTsKICBzdGF0aWMgJHJhcmVFbnROYW1lQXIgPSBhcnJheSgnQWJyZXZlJz0+JzI1OCcsICdhYnJldmUnPT4nMjU5JywgJ2FjJz0+Jzg3NjYnLCAnYWNkJz0+Jzg3NjcnLCAnQWN5Jz0+JzEwNDAnLCAnYWN5Jz0+JzEwNzInLCAnYWYnPT4nODI4OScsICdBZnInPT4nMTIwMDY4JywgJ2Fmcic9PicxMjAwOTQnLCAnYWxlcGgnPT4nODUwMScsICdBbWFjcic9PicyNTYnLCAnYW1hY3InPT4nMjU3JywgJ2FtYWxnJz0+JzEwODE1JywgJ0FuZCc9PicxMDgzNScsICdhbmRhbmQnPT4nMTA4MzcnLCAnYW5kZCc9PicxMDg0NCcsICdhbmRzbG9wZSc9PicxMDg0MCcsICdhbmR2Jz0+JzEwODQyJywgJ2FuZ2UnPT4nMTA2NjAnLCAnYW5nbGUnPT4nODczNicsICdhbmdtc2QnPT4nODczNycsICdhbmdtc2RhYSc9PicxMDY2NCcsICdhbmdtc2RhYic9PicxMDY2NScsICdhbmdtc2RhYyc9PicxMDY2NicsICdhbmdtc2RhZCc9PicxMDY2NycsICdhbmdtc2RhZSc9PicxMDY2OCcsICdhbmdtc2RhZic9PicxMDY2OScsICdhbmdtc2RhZyc9PicxMDY3MCcsICdhbmdtc2RhaCc9PicxMDY3MScsICdhbmdydCc9Pic4NzM1JywgJ2FuZ3J0dmInPT4nODg5NCcsICdhbmdydHZiZCc9PicxMDY1MycsICdhbmdzcGgnPT4nODczOCcsICdhbmdzdCc9PicxOTcnLCAnYW5nemFycic9Pic5MDg0JywgJ0FvZ29uJz0+JzI2MCcsICdhb2dvbic9PicyNjEnLCAnQW9wZic9PicxMjAxMjAnLCAnYW9wZic9PicxMjAxNDYnLCAnYXAnPT4nODc3NicsICdhcGFjaXInPT4nMTA4NjMnLCAnYXBFJz0+JzEwODY0JywgJ2FwZSc9Pic4Nzc4JywgJ2FwaWQnPT4nODc3OScsICdBcHBseUZ1bmN0aW9uJz0+JzgyODknLCAnYXBwcm94Jz0+Jzg3NzYnLCAnYXBwcm94ZXEnPT4nODc3OCcsICdBc2NyJz0+JzExOTk2NCcsICdhc2NyJz0+JzExOTk5MCcsICdBc3NpZ24nPT4nODc4OCcsICdhc3QnPT4nNDInLCAnYXN5bXBlcSc9Pic4NzgxJywgJ2F3Y29uaW50Jz0+Jzg3NTUnLCAnYXdpbnQnPT4nMTA3NjknLCAnYmFja2NvbmcnPT4nODc4MCcsICdiYWNrZXBzaWxvbic9PicxMDE0JywgJ2JhY2twcmltZSc9Pic4MjQ1JywgJ2JhY2tzaW0nPT4nODc2NScsICdiYWNrc2ltZXEnPT4nODkwOScsICdCYWNrc2xhc2gnPT4nODcyNicsICdCYXJ2Jz0+JzEwOTgzJywgJ2JhcnZlZSc9Pic4ODkzJywgJ2JhcndlZCc9Pic4OTY1JywgJ0JhcndlZCc9Pic4OTY2JywgJ2JhcndlZGdlJz0+Jzg5NjUnLCAnYmJyayc9Pic5MTQxJywgJ2Jicmt0YnJrJz0+JzkxNDInLCAnYmNvbmcnPT4nODc4MCcsICdCY3knPT4nMTA0MScsICdiY3knPT4nMTA3MycsICdiZWNhdXMnPT4nODc1NycsICdiZWNhdXNlJz0+Jzg3NTcnLCAnQmVjYXVzZSc9Pic4NzU3JywgJ2JlbXB0eXYnPT4nMTA2NzInLCAnYmVwc2knPT4nMTAxNCcsICdiZXJub3UnPT4nODQ5MicsICdCZXJub3VsbGlzJz0+Jzg0OTInLCAnYmV0aCc9Pic4NTAyJywgJ2JldHdlZW4nPT4nODgxMicsICdCZnInPT4nMTIwMDY5JywgJ2Jmcic9PicxMjAwOTUnLCAnYmlnY2FwJz0+Jzg4OTgnLCAnYmlnY2lyYyc9Pic5NzExJywgJ2JpZ2N1cCc9Pic4ODk5JywgJ2JpZ29kb3QnPT4nMTA3NTInLCAnYmlnb3BsdXMnPT4nMTA3NTMnLCAnYmlnb3RpbWVzJz0+JzEwNzU0JywgJ2JpZ3NxY3VwJz0+JzEwNzU4JywgJ2JpZ3N0YXInPT4nOTczMycsICdiaWd0cmlhbmdsZWRvd24nPT4nOTY2MScsICdiaWd0cmlhbmdsZXVwJz0+Jzk2NTEnLCAnYmlndXBsdXMnPT4nMTA3NTYnLCAnYmlndmVlJz0+Jzg4OTcnLCAnYmlnd2VkZ2UnPT4nODg5NicsICdia2Fyb3cnPT4nMTA1MDknLCAnYmxhY2tsb3plbmdlJz0+JzEwNzMxJywgJ2JsYWNrc3F1YXJlJz0+Jzk2NDInLCAnYmxhY2t0cmlhbmdsZSc9Pic5NjUyJywgJ2JsYWNrdHJpYW5nbGVkb3duJz0+Jzk2NjInLCAnYmxhY2t0cmlhbmdsZWxlZnQnPT4nOTY2NicsICdibGFja3RyaWFuZ2xlcmlnaHQnPT4nOTY1NicsICdibGFuayc9Pic5MjUxJywgJ2JsazEyJz0+Jzk2MTgnLCAnYmxrMTQnPT4nOTYxNycsICdibGszNCc9Pic5NjE5JywgJ2Jsb2NrJz0+Jzk2MDgnLCAnYk5vdCc9PicxMDk4OScsICdibm90Jz0+Jzg5NzYnLCAnQm9wZic9PicxMjAxMjEnLCAnYm9wZic9PicxMjAxNDcnLCAnYm90Jz0+Jzg4NjknLCAnYm90dG9tJz0+Jzg4NjknLCAnYm93dGllJz0+Jzg5MDQnLCAnYm94Ym94Jz0+JzEwNjk3JywgJ2JveGRsJz0+Jzk0ODgnLCAnYm94ZEwnPT4nOTU1NycsICdib3hEbCc9Pic5NTU4JywgJ2JveERMJz0+Jzk1NTknLCAnYm94ZHInPT4nOTQ4NCcsICdib3hkUic9Pic5NTU0JywgJ2JveERyJz0+Jzk1NTUnLCAnYm94RFInPT4nOTU1NicsICdib3hoJz0+Jzk0NzInLCAnYm94SCc9Pic5NTUyJywgJ2JveGhkJz0+Jzk1MTYnLCAnYm94SGQnPT4nOTU3MicsICdib3hoRCc9Pic5NTczJywgJ2JveEhEJz0+Jzk1NzQnLCAnYm94aHUnPT4nOTUyNCcsICdib3hIdSc9Pic5NTc1JywgJ2JveGhVJz0+Jzk1NzYnLCAnYm94SFUnPT4nOTU3NycsICdib3htaW51cyc9Pic4ODYzJywgJ2JveHBsdXMnPT4nODg2MicsICdib3h0aW1lcyc9Pic4ODY0JywgJ2JveHVsJz0+Jzk0OTYnLCAnYm94dUwnPT4nOTU2MycsICdib3hVbCc9Pic5NTY0JywgJ2JveFVMJz0+Jzk1NjUnLCAnYm94dXInPT4nOTQ5MicsICdib3h1Uic9Pic5NTYwJywgJ2JveFVyJz0+Jzk1NjEnLCAnYm94VVInPT4nOTU2MicsICdib3h2Jz0+Jzk0NzQnLCAnYm94Vic9Pic5NTUzJywgJ2JveHZoJz0+Jzk1MzInLCAnYm94dkgnPT4nOTU3OCcsICdib3hWaCc9Pic5NTc5JywgJ2JveFZIJz0+Jzk1ODAnLCAnYm94dmwnPT4nOTUwOCcsICdib3h2TCc9Pic5NTY5JywgJ2JveFZsJz0+Jzk1NzAnLCAnYm94VkwnPT4nOTU3MScsICdib3h2cic9Pic5NTAwJywgJ2JveHZSJz0+Jzk1NjYnLCAnYm94VnInPT4nOTU2NycsICdib3hWUic9Pic5NTY4JywgJ2JwcmltZSc9Pic4MjQ1JywgJ2JyZXZlJz0+JzcyOCcsICdCcmV2ZSc9Pic3MjgnLCAnYnNjcic9PicxMTk5OTEnLCAnQnNjcic9Pic4NDkyJywgJ2JzZW1pJz0+JzgyNzEnLCAnYnNpbSc9Pic4NzY1JywgJ2JzaW1lJz0+Jzg5MDknLCAnYnNvbCc9Pic5MicsICdic29sYic9PicxMDY5MycsICdic29saHN1Yic9PicxMDE4NCcsICdidWxsZXQnPT4nODIyNicsICdidW1wJz0+Jzg3ODInLCAnYnVtcEUnPT4nMTA5MjYnLCAnYnVtcGUnPT4nODc4MycsICdCdW1wZXEnPT4nODc4MicsICdidW1wZXEnPT4nODc4MycsICdDYWN1dGUnPT4nMjYyJywgJ2NhY3V0ZSc9PicyNjMnLCAnQ2FwJz0+Jzg5MTQnLCAnY2FwYW5kJz0+JzEwODIwJywgJ2NhcGJyY3VwJz0+JzEwODI1JywgJ2NhcGNhcCc9PicxMDgyNycsICdjYXBjdXAnPT4nMTA4MjMnLCAnY2FwZG90Jz0+JzEwODE2JywgJ0NhcGl0YWxEaWZmZXJlbnRpYWxEJz0+Jzg1MTcnLCAnY2FyZXQnPT4nODI1NycsICdjYXJvbic9Pic3MTEnLCAnQ2F5bGV5cyc9Pic4NDkzJywgJ2NjYXBzJz0+JzEwODI5JywgJ0NjYXJvbic9PicyNjgnLCAnY2Nhcm9uJz0+JzI2OScsICdDY2lyYyc9PicyNjQnLCAnY2NpcmMnPT4nMjY1JywgJ0Njb25pbnQnPT4nODc1MicsICdjY3Vwcyc9PicxMDgyOCcsICdjY3Vwc3NtJz0+JzEwODMyJywgJ0Nkb3QnPT4nMjY2JywgJ2Nkb3QnPT4nMjY3JywgJ0NlZGlsbGEnPT4nMTg0JywgJ2NlbXB0eXYnPT4nMTA2NzQnLCAnY2VudGVyZG90Jz0+JzE4MycsICdDZW50ZXJEb3QnPT4nMTgzJywgJ2Nmcic9PicxMjAwOTYnLCAnQ2ZyJz0+Jzg0OTMnLCAnQ0hjeSc9PicxMDYzJywgJ2NoY3knPT4nMTA5NScsICdjaGVjayc9PicxMDAwMycsICdjaGVja21hcmsnPT4nMTAwMDMnLCAnY2lyJz0+Jzk2NzUnLCAnY2lyY2VxJz0+Jzg3OTEnLCAnY2lyY2xlYXJyb3dsZWZ0Jz0+Jzg2MzQnLCAnY2lyY2xlYXJyb3dyaWdodCc9Pic4NjM1JywgJ2NpcmNsZWRhc3QnPT4nODg1OScsICdjaXJjbGVkY2lyYyc9Pic4ODU4JywgJ2NpcmNsZWRkYXNoJz0+Jzg4NjEnLCAnQ2lyY2xlRG90Jz0+Jzg4NTcnLCAnY2lyY2xlZFInPT4nMTc0JywgJ2NpcmNsZWRTJz0+Jzk0MTYnLCAnQ2lyY2xlTWludXMnPT4nODg1NCcsICdDaXJjbGVQbHVzJz0+Jzg4NTMnLCAnQ2lyY2xlVGltZXMnPT4nODg1NScsICdjaXJFJz0+JzEwNjkxJywgJ2NpcmUnPT4nODc5MScsICdjaXJmbmludCc9PicxMDc2OCcsICdjaXJtaWQnPT4nMTA5OTEnLCAnY2lyc2Npcic9PicxMDY5MCcsICdDbG9ja3dpc2VDb250b3VySW50ZWdyYWwnPT4nODc1NCcsICdDbG9zZUN1cmx5RG91YmxlUXVvdGUnPT4nODIyMScsICdDbG9zZUN1cmx5UXVvdGUnPT4nODIxNycsICdjbHVic3VpdCc9Pic5ODI3JywgJ2NvbG9uJz0+JzU4JywgJ0NvbG9uJz0+Jzg3NTknLCAnQ29sb25lJz0+JzEwODY4JywgJ2NvbG9uZSc9Pic4Nzg4JywgJ2NvbG9uZXEnPT4nODc4OCcsICdjb21tYSc9Pic0NCcsICdjb21tYXQnPT4nNjQnLCAnY29tcCc9Pic4NzA1JywgJ2NvbXBmbic9Pic4NzI4JywgJ2NvbXBsZW1lbnQnPT4nODcwNScsICdjb21wbGV4ZXMnPT4nODQ1MCcsICdjb25nZG90Jz0+JzEwODYxJywgJ0NvbmdydWVudCc9Pic4ODAxJywgJ2NvbmludCc9Pic4NzUwJywgJ0NvbmludCc9Pic4NzUxJywgJ0NvbnRvdXJJbnRlZ3JhbCc9Pic4NzUwJywgJ2NvcGYnPT4nMTIwMTQ4JywgJ0NvcGYnPT4nODQ1MCcsICdjb3Byb2QnPT4nODcyMCcsICdDb3Byb2R1Y3QnPT4nODcyMCcsICdDT1BZJz0+JzE2OScsICdjb3B5c3InPT4nODQ3MScsICdDb3VudGVyQ2xvY2t3aXNlQ29udG91ckludGVncmFsJz0+Jzg3NTUnLCAnY3Jvc3MnPT4nMTAwMDcnLCAnQ3Jvc3MnPT4nMTA3OTknLCAnQ3Njcic9PicxMTk5NjYnLCAnY3Njcic9PicxMTk5OTInLCAnY3N1Yic9PicxMDk1OScsICdjc3ViZSc9PicxMDk2MScsICdjc3VwJz0+JzEwOTYwJywgJ2NzdXBlJz0+JzEwOTYyJywgJ2N0ZG90Jz0+Jzg5NDMnLCAnY3VkYXJybCc9PicxMDU1MicsICdjdWRhcnJyJz0+JzEwNTQ5JywgJ2N1ZXByJz0+Jzg5MjYnLCAnY3Vlc2MnPT4nODkyNycsICdjdWxhcnInPT4nODYzMCcsICdjdWxhcnJwJz0+JzEwNTU3JywgJ0N1cCc9Pic4OTE1JywgJ2N1cGJyY2FwJz0+JzEwODI0JywgJ2N1cGNhcCc9PicxMDgyMicsICdDdXBDYXAnPT4nODc4MScsICdjdXBjdXAnPT4nMTA4MjYnLCAnY3VwZG90Jz0+Jzg4NDUnLCAnY3Vwb3InPT4nMTA4MjEnLCAnY3VyYXJyJz0+Jzg2MzEnLCAnY3VyYXJybSc9PicxMDU1NicsICdjdXJseWVxcHJlYyc9Pic4OTI2JywgJ2N1cmx5ZXFzdWNjJz0+Jzg5MjcnLCAnY3VybHl2ZWUnPT4nODkxMCcsICdjdXJseXdlZGdlJz0+Jzg5MTEnLCAnY3VydmVhcnJvd2xlZnQnPT4nODYzMCcsICdjdXJ2ZWFycm93cmlnaHQnPT4nODYzMScsICdjdXZlZSc9Pic4OTEwJywgJ2N1d2VkJz0+Jzg5MTEnLCAnY3djb25pbnQnPT4nODc1NCcsICdjd2ludCc9Pic4NzUzJywgJ2N5bGN0eSc9Pic5MDA1JywgJ2RhbGV0aCc9Pic4NTA0JywgJ0RhcnInPT4nODYwOScsICdkYXNoJz0+JzgyMDgnLCAnRGFzaHYnPT4nMTA5ODAnLCAnZGFzaHYnPT4nODg2NycsICdkYmthcm93Jz0+JzEwNTExJywgJ2RibGFjJz0+JzczMycsICdEY2Fyb24nPT4nMjcwJywgJ2RjYXJvbic9PicyNzEnLCAnRGN5Jz0+JzEwNDQnLCAnZGN5Jz0+JzEwNzYnLCAnREQnPT4nODUxNycsICdkZCc9Pic4NTE4JywgJ2RkYWdnZXInPT4nODIyNScsICdkZGFycic9Pic4NjUwJywgJ0REb3RyYWhkJz0+JzEwNTEzJywgJ2Rkb3RzZXEnPT4nMTA4NzEnLCAnRGVsJz0+Jzg3MTEnLCAnZGVtcHR5dic9PicxMDY3MycsICdkZmlzaHQnPT4nMTA2MjMnLCAnRGZyJz0+JzEyMDA3MScsICdkZnInPT4nMTIwMDk3JywgJ2RIYXInPT4nMTA1OTcnLCAnZGhhcmwnPT4nODY0MycsICdkaGFycic9Pic4NjQyJywgJ0RpYWNyaXRpY2FsQWN1dGUnPT4nMTgwJywgJ0RpYWNyaXRpY2FsRG90Jz0+JzcyOScsICdEaWFjcml0aWNhbERvdWJsZUFjdXRlJz0+JzczMycsICdEaWFjcml0aWNhbEdyYXZlJz0+Jzk2JywgJ0RpYWNyaXRpY2FsVGlsZGUnPT4nNzMyJywgJ2RpYW0nPT4nODkwMCcsICdkaWFtb25kJz0+Jzg5MDAnLCAnRGlhbW9uZCc9Pic4OTAwJywgJ2RpYW1vbmRzdWl0Jz0+Jzk4MzAnLCAnZGllJz0+JzE2OCcsICdEaWZmZXJlbnRpYWxEJz0+Jzg1MTgnLCAnZGlnYW1tYSc9Pic5ODknLCAnZGlzaW4nPT4nODk0NicsICdkaXYnPT4nMjQ3JywgJ2RpdmlkZW9udGltZXMnPT4nODkwMycsICdkaXZvbngnPT4nODkwMycsICdESmN5Jz0+JzEwMjYnLCAnZGpjeSc9PicxMTA2JywgJ2RsY29ybic9Pic4OTkwJywgJ2RsY3JvcCc9Pic4OTczJywgJ2RvbGxhcic9PiczNicsICdEb3BmJz0+JzEyMDEyMycsICdkb3BmJz0+JzEyMDE0OScsICdEb3QnPT4nMTY4JywgJ2RvdCc9Pic3MjknLCAnRG90RG90Jz0+Jzg0MTInLCAnZG90ZXEnPT4nODc4NCcsICdkb3RlcWRvdCc9Pic4Nzg1JywgJ0RvdEVxdWFsJz0+Jzg3ODQnLCAnZG90bWludXMnPT4nODc2MCcsICdkb3RwbHVzJz0+Jzg3MjQnLCAnZG90c3F1YXJlJz0+Jzg4NjUnLCAnZG91YmxlYmFyd2VkZ2UnPT4nODk2NicsICdEb3VibGVDb250b3VySW50ZWdyYWwnPT4nODc1MScsICdEb3VibGVEb3QnPT4nMTY4JywgJ0RvdWJsZURvd25BcnJvdyc9Pic4NjU5JywgJ0RvdWJsZUxlZnRBcnJvdyc9Pic4NjU2JywgJ0RvdWJsZUxlZnRSaWdodEFycm93Jz0+Jzg2NjAnLCAnRG91YmxlTGVmdFRlZSc9PicxMDk4MCcsICdEb3VibGVMb25nTGVmdEFycm93Jz0+JzEwMjMyJywgJ0RvdWJsZUxvbmdMZWZ0UmlnaHRBcnJvdyc9PicxMDIzNCcsICdEb3VibGVMb25nUmlnaHRBcnJvdyc9PicxMDIzMycsICdEb3VibGVSaWdodEFycm93Jz0+Jzg2NTgnLCAnRG91YmxlUmlnaHRUZWUnPT4nODg3MicsICdEb3VibGVVcEFycm93Jz0+Jzg2NTcnLCAnRG91YmxlVXBEb3duQXJyb3cnPT4nODY2MScsICdEb3VibGVWZXJ0aWNhbEJhcic9Pic4NzQxJywgJ2Rvd25hcnJvdyc9Pic4NTk1JywgJ0Rvd25BcnJvdyc9Pic4NTk1JywgJ0Rvd25hcnJvdyc9Pic4NjU5JywgJ0Rvd25BcnJvd0Jhcic9PicxMDUxNScsICdEb3duQXJyb3dVcEFycm93Jz0+Jzg2OTMnLCAnRG93bkJyZXZlJz0+Jzc4NScsICdkb3duZG93bmFycm93cyc9Pic4NjUwJywgJ2Rvd25oYXJwb29ubGVmdCc9Pic4NjQzJywgJ2Rvd25oYXJwb29ucmlnaHQnPT4nODY0MicsICdEb3duTGVmdFJpZ2h0VmVjdG9yJz0+JzEwNTc2JywgJ0Rvd25MZWZ0VGVlVmVjdG9yJz0+JzEwNTkwJywgJ0Rvd25MZWZ0VmVjdG9yJz0+Jzg2MzcnLCAnRG93bkxlZnRWZWN0b3JCYXInPT4nMTA1ODInLCAnRG93blJpZ2h0VGVlVmVjdG9yJz0+JzEwNTkxJywgJ0Rvd25SaWdodFZlY3Rvcic9Pic4NjQxJywgJ0Rvd25SaWdodFZlY3RvckJhcic9PicxMDU4MycsICdEb3duVGVlJz0+Jzg4NjgnLCAnRG93blRlZUFycm93Jz0+Jzg2MTUnLCAnZHJia2Fyb3cnPT4nMTA1MTInLCAnZHJjb3JuJz0+Jzg5OTEnLCAnZHJjcm9wJz0+Jzg5NzInLCAnRHNjcic9PicxMTk5NjcnLCAnZHNjcic9PicxMTk5OTMnLCAnRFNjeSc9PicxMDI5JywgJ2RzY3knPT4nMTEwOScsICdkc29sJz0+JzEwNzQyJywgJ0RzdHJvayc9PicyNzInLCAnZHN0cm9rJz0+JzI3MycsICdkdGRvdCc9Pic4OTQ1JywgJ2R0cmknPT4nOTY2MycsICdkdHJpZic9Pic5NjYyJywgJ2R1YXJyJz0+Jzg2OTMnLCAnZHVoYXInPT4nMTA2MDcnLCAnZHdhbmdsZSc9PicxMDY2MicsICdEWmN5Jz0+JzEwMzknLCAnZHpjeSc9PicxMTE5JywgJ2R6aWdyYXJyJz0+JzEwMjM5JywgJ2Vhc3Rlcic9PicxMDg2MicsICdFY2Fyb24nPT4nMjgyJywgJ2VjYXJvbic9PicyODMnLCAnZWNpcic9Pic4NzkwJywgJ2Vjb2xvbic9Pic4Nzg5JywgJ0VjeSc9PicxMDY5JywgJ2VjeSc9PicxMTAxJywgJ2VERG90Jz0+JzEwODcxJywgJ0Vkb3QnPT4nMjc4JywgJ2Vkb3QnPT4nMjc5JywgJ2VEb3QnPT4nODc4NScsICdlZSc9Pic4NTE5JywgJ2VmRG90Jz0+Jzg3ODYnLCAnRWZyJz0+JzEyMDA3MicsICdlZnInPT4nMTIwMDk4JywgJ2VnJz0+JzEwOTA2JywgJ2Vncyc9PicxMDkwMicsICdlZ3Nkb3QnPT4nMTA5MDQnLCAnZWwnPT4nMTA5MDUnLCAnRWxlbWVudCc9Pic4NzEyJywgJ2VsaW50ZXJzJz0+JzkxOTEnLCAnZWxsJz0+Jzg0NjcnLCAnZWxzJz0+JzEwOTAxJywgJ2Vsc2RvdCc9PicxMDkwMycsICdFbWFjcic9PicyNzQnLCAnZW1hY3InPT4nMjc1JywgJ2VtcHR5c2V0Jz0+Jzg3MDknLCAnRW1wdHlTbWFsbFNxdWFyZSc9Pic5NzIzJywgJ2VtcHR5dic9Pic4NzA5JywgJ0VtcHR5VmVyeVNtYWxsU3F1YXJlJz0+Jzk2NDMnLCAnZW1zcDEzJz0+JzgxOTYnLCAnZW1zcDE0Jz0+JzgxOTcnLCAnRU5HJz0+JzMzMCcsICdlbmcnPT4nMzMxJywgJ0VvZ29uJz0+JzI4MCcsICdlb2dvbic9PicyODEnLCAnRW9wZic9PicxMjAxMjQnLCAnZW9wZic9PicxMjAxNTAnLCAnZXBhcic9Pic4OTE3JywgJ2VwYXJzbCc9PicxMDcyMycsICdlcGx1cyc9PicxMDg2NScsICdlcHNpJz0+Jzk0OScsICdlcHNpdic9PicxMDEzJywgJ2VxY2lyYyc9Pic4NzkwJywgJ2VxY29sb24nPT4nODc4OScsICdlcXNpbSc9Pic4NzcwJywgJ2Vxc2xhbnRndHInPT4nMTA5MDInLCAnZXFzbGFudGxlc3MnPT4nMTA5MDEnLCAnRXF1YWwnPT4nMTA4NjknLCAnZXF1YWxzJz0+JzYxJywgJ0VxdWFsVGlsZGUnPT4nODc3MCcsICdlcXVlc3QnPT4nODc5OScsICdFcXVpbGlicml1bSc9Pic4NjUyJywgJ2VxdWl2REQnPT4nMTA4NzInLCAnZXF2cGFyc2wnPT4nMTA3MjUnLCAnZXJhcnInPT4nMTA2MDknLCAnZXJEb3QnPT4nODc4NycsICdlc2NyJz0+Jzg0OTUnLCAnRXNjcic9Pic4NDk2JywgJ2VzZG90Jz0+Jzg3ODQnLCAnRXNpbSc9PicxMDg2NycsICdlc2ltJz0+Jzg3NzAnLCAnZXhjbCc9PiczMycsICdFeGlzdHMnPT4nODcwNycsICdleHBlY3RhdGlvbic9Pic4NDk2JywgJ2V4cG9uZW50aWFsZSc9Pic4NTE5JywgJ0V4cG9uZW50aWFsRSc9Pic4NTE5JywgJ2ZhbGxpbmdkb3RzZXEnPT4nODc4NicsICdGY3knPT4nMTA2MCcsICdmY3knPT4nMTA5MicsICdmZW1hbGUnPT4nOTc5MicsICdmZmlsaWcnPT4nNjQyNTknLCAnZmZsaWcnPT4nNjQyNTYnLCAnZmZsbGlnJz0+JzY0MjYwJywgJ0Zmcic9PicxMjAwNzMnLCAnZmZyJz0+JzEyMDA5OScsICdmaWxpZyc9Pic2NDI1NycsICdGaWxsZWRTbWFsbFNxdWFyZSc9Pic5NzI0JywgJ0ZpbGxlZFZlcnlTbWFsbFNxdWFyZSc9Pic5NjQyJywgJ2ZsYXQnPT4nOTgzNycsICdmbGxpZyc9Pic2NDI1OCcsICdmbHRucyc9Pic5NjQ5JywgJ0ZvcGYnPT4nMTIwMTI1JywgJ2ZvcGYnPT4nMTIwMTUxJywgJ0ZvckFsbCc9Pic4NzA0JywgJ2ZvcmsnPT4nODkxNicsICdmb3Jrdic9PicxMDk2OScsICdGb3VyaWVydHJmJz0+Jzg0OTcnLCAnZnBhcnRpbnQnPT4nMTA3NjUnLCAnZnJhYzEzJz0+Jzg1MzEnLCAnZnJhYzE1Jz0+Jzg1MzMnLCAnZnJhYzE2Jz0+Jzg1MzcnLCAnZnJhYzE4Jz0+Jzg1MzknLCAnZnJhYzIzJz0+Jzg1MzInLCAnZnJhYzI1Jz0+Jzg1MzQnLCAnZnJhYzM1Jz0+Jzg1MzUnLCAnZnJhYzM4Jz0+Jzg1NDAnLCAnZnJhYzQ1Jz0+Jzg1MzYnLCAnZnJhYzU2Jz0+Jzg1MzgnLCAnZnJhYzU4Jz0+Jzg1NDEnLCAnZnJhYzc4Jz0+Jzg1NDInLCAnZnJvd24nPT4nODk5NCcsICdmc2NyJz0+JzExOTk5NScsICdGc2NyJz0+Jzg0OTcnLCAnZ2FjdXRlJz0+JzUwMScsICdHYW1tYWQnPT4nOTg4JywgJ2dhbW1hZCc9Pic5ODknLCAnZ2FwJz0+JzEwODg2JywgJ0dicmV2ZSc9PicyODYnLCAnZ2JyZXZlJz0+JzI4NycsICdHY2VkaWwnPT4nMjkwJywgJ0djaXJjJz0+JzI4NCcsICdnY2lyYyc9PicyODUnLCAnR2N5Jz0+JzEwNDMnLCAnZ2N5Jz0+JzEwNzUnLCAnR2RvdCc9PicyODgnLCAnZ2RvdCc9PicyODknLCAnZ0UnPT4nODgwNycsICdnRWwnPT4nMTA4OTInLCAnZ2VsJz0+Jzg5MjMnLCAnZ2VxJz0+Jzg4MDUnLCAnZ2VxcSc9Pic4ODA3JywgJ2dlcXNsYW50Jz0+JzEwODc4JywgJ2dlcyc9PicxMDg3OCcsICdnZXNjYyc9PicxMDkyMScsICdnZXNkb3QnPT4nMTA4ODAnLCAnZ2VzZG90byc9PicxMDg4MicsICdnZXNkb3RvbCc9PicxMDg4NCcsICdnZXNsZXMnPT4nMTA5MDAnLCAnR2ZyJz0+JzEyMDA3NCcsICdnZnInPT4nMTIwMTAwJywgJ2dnJz0+Jzg4MTEnLCAnR2cnPT4nODkyMScsICdnZ2cnPT4nODkyMScsICdnaW1lbCc9Pic4NTAzJywgJ0dKY3knPT4nMTAyNycsICdnamN5Jz0+JzExMDcnLCAnZ2wnPT4nODgyMycsICdnbGEnPT4nMTA5MTcnLCAnZ2xFJz0+JzEwODk4JywgJ2dsaic9PicxMDkxNicsICdnbmFwJz0+JzEwODkwJywgJ2duYXBwcm94Jz0+JzEwODkwJywgJ2duZSc9PicxMDg4OCcsICdnbkUnPT4nODgwOScsICdnbmVxJz0+JzEwODg4JywgJ2duZXFxJz0+Jzg4MDknLCAnZ25zaW0nPT4nODkzNScsICdHb3BmJz0+JzEyMDEyNicsICdnb3BmJz0+JzEyMDE1MicsICdncmF2ZSc9Pic5NicsICdHcmVhdGVyRXF1YWwnPT4nODgwNScsICdHcmVhdGVyRXF1YWxMZXNzJz0+Jzg5MjMnLCAnR3JlYXRlckZ1bGxFcXVhbCc9Pic4ODA3JywgJ0dyZWF0ZXJHcmVhdGVyJz0+JzEwOTE0JywgJ0dyZWF0ZXJMZXNzJz0+Jzg4MjMnLCAnR3JlYXRlclNsYW50RXF1YWwnPT4nMTA4NzgnLCAnR3JlYXRlclRpbGRlJz0+Jzg4MTknLCAnR3Njcic9PicxMTk5NzAnLCAnZ3Njcic9Pic4NDU4JywgJ2dzaW0nPT4nODgxOScsICdnc2ltZSc9PicxMDg5NCcsICdnc2ltbCc9PicxMDg5NicsICdHdCc9Pic4ODExJywgJ2d0Y2MnPT4nMTA5MTknLCAnZ3RjaXInPT4nMTA4NzQnLCAnZ3Rkb3QnPT4nODkxOScsICdndGxQYXInPT4nMTA2NDUnLCAnZ3RxdWVzdCc9PicxMDg3NicsICdndHJhcHByb3gnPT4nMTA4ODYnLCAnZ3RyYXJyJz0+JzEwNjE2JywgJ2d0cmRvdCc9Pic4OTE5JywgJ2d0cmVxbGVzcyc9Pic4OTIzJywgJ2d0cmVxcWxlc3MnPT4nMTA4OTInLCAnZ3RybGVzcyc9Pic4ODIzJywgJ2d0cnNpbSc9Pic4ODE5JywgJ0hhY2VrJz0+JzcxMScsICdoYWlyc3AnPT4nODIwMicsICdoYWxmJz0+JzE4OScsICdoYW1pbHQnPT4nODQ1OScsICdIQVJEY3knPT4nMTA2NicsICdoYXJkY3knPT4nMTA5OCcsICdoYXJyY2lyJz0+JzEwNTY4JywgJ2hhcnJ3Jz0+Jzg2MjEnLCAnSGF0Jz0+Jzk0JywgJ2hiYXInPT4nODQ2MycsICdIY2lyYyc9PicyOTInLCAnaGNpcmMnPT4nMjkzJywgJ2hlYXJ0c3VpdCc9Pic5ODI5JywgJ2hlcmNvbic9Pic4ODg5JywgJ2hmcic9PicxMjAxMDEnLCAnSGZyJz0+Jzg0NjAnLCAnSGlsYmVydFNwYWNlJz0+Jzg0NTknLCAnaGtzZWFyb3cnPT4nMTA1MzMnLCAnaGtzd2Fyb3cnPT4nMTA1MzQnLCAnaG9hcnInPT4nODcwMycsICdob210aHQnPT4nODc2MycsICdob29rbGVmdGFycm93Jz0+Jzg2MTcnLCAnaG9va3JpZ2h0YXJyb3cnPT4nODYxOCcsICdob3BmJz0+JzEyMDE1MycsICdIb3BmJz0+Jzg0NjEnLCAnaG9yYmFyJz0+JzgyMTMnLCAnSG9yaXpvbnRhbExpbmUnPT4nOTQ3MicsICdoc2NyJz0+JzExOTk5NycsICdIc2NyJz0+Jzg0NTknLCAnaHNsYXNoJz0+Jzg0NjMnLCAnSHN0cm9rJz0+JzI5NCcsICdoc3Ryb2snPT4nMjk1JywgJ0h1bXBEb3duSHVtcCc9Pic4NzgyJywgJ0h1bXBFcXVhbCc9Pic4NzgzJywgJ2h5YnVsbCc9Pic4MjU5JywgJ2h5cGhlbic9Pic4MjA4JywgJ2ljJz0+JzgyOTEnLCAnSWN5Jz0+JzEwNDgnLCAnaWN5Jz0+JzEwODAnLCAnSWRvdCc9PiczMDQnLCAnSUVjeSc9PicxMDQ1JywgJ2llY3knPT4nMTA3NycsICdpZmYnPT4nODY2MCcsICdpZnInPT4nMTIwMTAyJywgJ0lmcic9Pic4NDY1JywgJ2lpJz0+Jzg1MjAnLCAnaWlpaW50Jz0+JzEwNzY0JywgJ2lpaW50Jz0+Jzg3NDknLCAnaWluZmluJz0+JzEwNzE2JywgJ2lpb3RhJz0+Jzg0ODknLCAnSUpsaWcnPT4nMzA2JywgJ2lqbGlnJz0+JzMwNycsICdJbSc9Pic4NDY1JywgJ0ltYWNyJz0+JzI5OCcsICdpbWFjcic9PicyOTknLCAnSW1hZ2luYXJ5SSc9Pic4NTIwJywgJ2ltYWdsaW5lJz0+Jzg0NjQnLCAnaW1hZ3BhcnQnPT4nODQ2NScsICdpbWF0aCc9PiczMDUnLCAnaW1vZic9Pic4ODg3JywgJ2ltcGVkJz0+JzQzNycsICdJbXBsaWVzJz0+Jzg2NTgnLCAnaW4nPT4nODcxMicsICdpbmNhcmUnPT4nODQ1MycsICdpbmZpbnRpZSc9PicxMDcxNycsICdpbm9kb3QnPT4nMzA1JywgJ0ludCc9Pic4NzQ4JywgJ2ludGNhbCc9Pic4ODkwJywgJ2ludGVnZXJzJz0+Jzg0ODQnLCAnSW50ZWdyYWwnPT4nODc0NycsICdpbnRlcmNhbCc9Pic4ODkwJywgJ0ludGVyc2VjdGlvbic9Pic4ODk4JywgJ2ludGxhcmhrJz0+JzEwNzc1JywgJ2ludHByb2QnPT4nMTA4MTInLCAnSW52aXNpYmxlQ29tbWEnPT4nODI5MScsICdJbnZpc2libGVUaW1lcyc9Pic4MjkwJywgJ0lPY3knPT4nMTAyNScsICdpb2N5Jz0+JzExMDUnLCAnSW9nb24nPT4nMzAyJywgJ2lvZ29uJz0+JzMwMycsICdJb3BmJz0+JzEyMDEyOCcsICdpb3BmJz0+JzEyMDE1NCcsICdpcHJvZCc9PicxMDgxMicsICdpc2NyJz0+JzExOTk5OCcsICdJc2NyJz0+Jzg0NjQnLCAnaXNpbmRvdCc9Pic4OTQ5JywgJ2lzaW5FJz0+Jzg5NTMnLCAnaXNpbnMnPT4nODk0OCcsICdpc2luc3YnPT4nODk0NycsICdpc2ludic9Pic4NzEyJywgJ2l0Jz0+JzgyOTAnLCAnSXRpbGRlJz0+JzI5NicsICdpdGlsZGUnPT4nMjk3JywgJ0l1a2N5Jz0+JzEwMzAnLCAnaXVrY3knPT4nMTExMCcsICdKY2lyYyc9PiczMDgnLCAnamNpcmMnPT4nMzA5JywgJ0pjeSc9PicxMDQ5JywgJ2pjeSc9PicxMDgxJywgJ0pmcic9PicxMjAwNzcnLCAnamZyJz0+JzEyMDEwMycsICdqbWF0aCc9Pic1NjcnLCAnSm9wZic9PicxMjAxMjknLCAnam9wZic9PicxMjAxNTUnLCAnSnNjcic9PicxMTk5NzMnLCAnanNjcic9PicxMTk5OTknLCAnSnNlcmN5Jz0+JzEwMzInLCAnanNlcmN5Jz0+JzExMTInLCAnSnVrY3knPT4nMTAyOCcsICdqdWtjeSc9PicxMTA4JywgJ2thcHBhdic9PicxMDA4JywgJ0tjZWRpbCc9PiczMTAnLCAna2NlZGlsJz0+JzMxMScsICdLY3knPT4nMTA1MCcsICdrY3knPT4nMTA4MicsICdLZnInPT4nMTIwMDc4JywgJ2tmcic9PicxMjAxMDQnLCAna2dyZWVuJz0+JzMxMicsICdLSGN5Jz0+JzEwNjEnLCAna2hjeSc9PicxMDkzJywgJ0tKY3knPT4nMTAzNicsICdramN5Jz0+JzExMTYnLCAnS29wZic9PicxMjAxMzAnLCAna29wZic9PicxMjAxNTYnLCAnS3Njcic9PicxMTk5NzQnLCAna3Njcic9PicxMjAwMDAnLCAnbEFhcnInPT4nODY2NicsICdMYWN1dGUnPT4nMzEzJywgJ2xhY3V0ZSc9PiczMTQnLCAnbGFlbXB0eXYnPT4nMTA2NzYnLCAnbGFncmFuJz0+Jzg0NjYnLCAnbGFuZyc9PicxMDIxNicsICdMYW5nJz0+JzEwMjE4JywgJ2xhbmdkJz0+JzEwNjQxJywgJ2xhbmdsZSc9PicxMDIxNicsICdsYXAnPT4nMTA4ODUnLCAnTGFwbGFjZXRyZic9Pic4NDY2JywgJ0xhcnInPT4nODYwNicsICdsYXJyYic9Pic4Njc2JywgJ2xhcnJiZnMnPT4nMTA1MjcnLCAnbGFycmZzJz0+JzEwNTI1JywgJ2xhcnJoayc9Pic4NjE3JywgJ2xhcnJscCc9Pic4NjE5JywgJ2xhcnJwbCc9PicxMDU1MycsICdsYXJyc2ltJz0+JzEwNjExJywgJ2xhcnJ0bCc9Pic4NjEwJywgJ2xhdCc9PicxMDkyMycsICdsYXRhaWwnPT4nMTA1MjEnLCAnbEF0YWlsJz0+JzEwNTIzJywgJ2xhdGUnPT4nMTA5MjUnLCAnbGJhcnInPT4nMTA1MDgnLCAnbEJhcnInPT4nMTA1MTAnLCAnbGJicmsnPT4nMTAwOTgnLCAnbGJyYWNlJz0+JzEyMycsICdsYnJhY2snPT4nOTEnLCAnbGJya2UnPT4nMTA2MzUnLCAnbGJya3NsZCc9PicxMDYzOScsICdsYnJrc2x1Jz0+JzEwNjM3JywgJ0xjYXJvbic9PiczMTcnLCAnbGNhcm9uJz0+JzMxOCcsICdMY2VkaWwnPT4nMzE1JywgJ2xjZWRpbCc9PiczMTYnLCAnbGN1Yic9PicxMjMnLCAnTGN5Jz0+JzEwNTEnLCAnbGN5Jz0+JzEwODMnLCAnbGRjYSc9PicxMDU1MCcsICdsZHF1b3InPT4nODIyMicsICdsZHJkaGFyJz0+JzEwNTk5JywgJ2xkcnVzaGFyJz0+JzEwNTcxJywgJ2xkc2gnPT4nODYyNicsICdsRSc9Pic4ODA2JywgJ0xlZnRBbmdsZUJyYWNrZXQnPT4nMTAyMTYnLCAnbGVmdGFycm93Jz0+Jzg1OTInLCAnTGVmdEFycm93Jz0+Jzg1OTInLCAnTGVmdGFycm93Jz0+Jzg2NTYnLCAnTGVmdEFycm93QmFyJz0+Jzg2NzYnLCAnTGVmdEFycm93UmlnaHRBcnJvdyc9Pic4NjQ2JywgJ2xlZnRhcnJvd3RhaWwnPT4nODYxMCcsICdMZWZ0Q2VpbGluZyc9Pic4OTY4JywgJ0xlZnREb3VibGVCcmFja2V0Jz0+JzEwMjE0JywgJ0xlZnREb3duVGVlVmVjdG9yJz0+JzEwNTkzJywgJ0xlZnREb3duVmVjdG9yJz0+Jzg2NDMnLCAnTGVmdERvd25WZWN0b3JCYXInPT4nMTA1ODUnLCAnTGVmdEZsb29yJz0+Jzg5NzAnLCAnbGVmdGhhcnBvb25kb3duJz0+Jzg2MzcnLCAnbGVmdGhhcnBvb251cCc9Pic4NjM2JywgJ2xlZnRsZWZ0YXJyb3dzJz0+Jzg2NDcnLCAnbGVmdHJpZ2h0YXJyb3cnPT4nODU5NicsICdMZWZ0UmlnaHRBcnJvdyc9Pic4NTk2JywgJ0xlZnRyaWdodGFycm93Jz0+Jzg2NjAnLCAnbGVmdHJpZ2h0YXJyb3dzJz0+Jzg2NDYnLCAnbGVmdHJpZ2h0aGFycG9vbnMnPT4nODY1MScsICdsZWZ0cmlnaHRzcXVpZ2Fycm93Jz0+Jzg2MjEnLCAnTGVmdFJpZ2h0VmVjdG9yJz0+JzEwNTc0JywgJ0xlZnRUZWUnPT4nODg2NycsICdMZWZ0VGVlQXJyb3cnPT4nODYxMicsICdMZWZ0VGVlVmVjdG9yJz0+JzEwNTg2JywgJ2xlZnR0aHJlZXRpbWVzJz0+Jzg5MDcnLCAnTGVmdFRyaWFuZ2xlJz0+Jzg4ODInLCAnTGVmdFRyaWFuZ2xlQmFyJz0+JzEwNzAzJywgJ0xlZnRUcmlhbmdsZUVxdWFsJz0+Jzg4ODQnLCAnTGVmdFVwRG93blZlY3Rvcic9PicxMDU3NycsICdMZWZ0VXBUZWVWZWN0b3InPT4nMTA1OTInLCAnTGVmdFVwVmVjdG9yJz0+Jzg2MzknLCAnTGVmdFVwVmVjdG9yQmFyJz0+JzEwNTg0JywgJ0xlZnRWZWN0b3InPT4nODYzNicsICdMZWZ0VmVjdG9yQmFyJz0+JzEwNTc4JywgJ2xFZyc9PicxMDg5MScsICdsZWcnPT4nODkyMicsICdsZXEnPT4nODgwNCcsICdsZXFxJz0+Jzg4MDYnLCAnbGVxc2xhbnQnPT4nMTA4NzcnLCAnbGVzJz0+JzEwODc3JywgJ2xlc2NjJz0+JzEwOTIwJywgJ2xlc2RvdCc9PicxMDg3OScsICdsZXNkb3RvJz0+JzEwODgxJywgJ2xlc2RvdG9yJz0+JzEwODgzJywgJ2xlc2dlcyc9PicxMDg5OScsICdsZXNzYXBwcm94Jz0+JzEwODg1JywgJ2xlc3Nkb3QnPT4nODkxOCcsICdsZXNzZXFndHInPT4nODkyMicsICdsZXNzZXFxZ3RyJz0+JzEwODkxJywgJ0xlc3NFcXVhbEdyZWF0ZXInPT4nODkyMicsICdMZXNzRnVsbEVxdWFsJz0+Jzg4MDYnLCAnTGVzc0dyZWF0ZXInPT4nODgyMicsICdsZXNzZ3RyJz0+Jzg4MjInLCAnTGVzc0xlc3MnPT4nMTA5MTMnLCAnbGVzc3NpbSc9Pic4ODE4JywgJ0xlc3NTbGFudEVxdWFsJz0+JzEwODc3JywgJ0xlc3NUaWxkZSc9Pic4ODE4JywgJ2xmaXNodCc9PicxMDYyMCcsICdMZnInPT4nMTIwMDc5JywgJ2xmcic9PicxMjAxMDUnLCAnbGcnPT4nODgyMicsICdsZ0UnPT4nMTA4OTcnLCAnbEhhcic9PicxMDU5NCcsICdsaGFyZCc9Pic4NjM3JywgJ2xoYXJ1Jz0+Jzg2MzYnLCAnbGhhcnVsJz0+JzEwNjAyJywgJ2xoYmxrJz0+Jzk2MDQnLCAnTEpjeSc9PicxMDMzJywgJ2xqY3knPT4nMTExMycsICdsbCc9Pic4ODEwJywgJ0xsJz0+Jzg5MjAnLCAnbGxhcnInPT4nODY0NycsICdsbGNvcm5lcic9Pic4OTkwJywgJ0xsZWZ0YXJyb3cnPT4nODY2NicsICdsbGhhcmQnPT4nMTA2MDMnLCAnbGx0cmknPT4nOTcyMicsICdMbWlkb3QnPT4nMzE5JywgJ2xtaWRvdCc9PiczMjAnLCAnbG1vdXN0Jz0+JzkxMzYnLCAnbG1vdXN0YWNoZSc9Pic5MTM2JywgJ2xuYXAnPT4nMTA4ODknLCAnbG5hcHByb3gnPT4nMTA4ODknLCAnbG5lJz0+JzEwODg3JywgJ2xuRSc9Pic4ODA4JywgJ2xuZXEnPT4nMTA4ODcnLCAnbG5lcXEnPT4nODgwOCcsICdsbnNpbSc9Pic4OTM0JywgJ2xvYW5nJz0+JzEwMjIwJywgJ2xvYXJyJz0+Jzg3MDEnLCAnbG9icmsnPT4nMTAyMTQnLCAnbG9uZ2xlZnRhcnJvdyc9PicxMDIyOScsICdMb25nTGVmdEFycm93Jz0+JzEwMjI5JywgJ0xvbmdsZWZ0YXJyb3cnPT4nMTAyMzInLCAnbG9uZ2xlZnRyaWdodGFycm93Jz0+JzEwMjMxJywgJ0xvbmdMZWZ0UmlnaHRBcnJvdyc9PicxMDIzMScsICdMb25nbGVmdHJpZ2h0YXJyb3cnPT4nMTAyMzQnLCAnbG9uZ21hcHN0byc9PicxMDIzNicsICdsb25ncmlnaHRhcnJvdyc9PicxMDIzMCcsICdMb25nUmlnaHRBcnJvdyc9PicxMDIzMCcsICdMb25ncmlnaHRhcnJvdyc9PicxMDIzMycsICdsb29wYXJyb3dsZWZ0Jz0+Jzg2MTknLCAnbG9vcGFycm93cmlnaHQnPT4nODYyMCcsICdsb3Bhcic9PicxMDYyOScsICdMb3BmJz0+JzEyMDEzMScsICdsb3BmJz0+JzEyMDE1NycsICdsb3BsdXMnPT4nMTA3OTcnLCAnbG90aW1lcyc9PicxMDgwNCcsICdsb3diYXInPT4nOTUnLCAnTG93ZXJMZWZ0QXJyb3cnPT4nODYwMScsICdMb3dlclJpZ2h0QXJyb3cnPT4nODYwMCcsICdsb3plbmdlJz0+Jzk2NzQnLCAnbG96Zic9PicxMDczMScsICdscGFyJz0+JzQwJywgJ2xwYXJsdCc9PicxMDY0MycsICdscmFycic9Pic4NjQ2JywgJ2xyY29ybmVyJz0+Jzg5OTEnLCAnbHJoYXInPT4nODY1MScsICdscmhhcmQnPT4nMTA2MDUnLCAnbHJ0cmknPT4nODg5NScsICdsc2NyJz0+JzEyMDAwMScsICdMc2NyJz0+Jzg0NjYnLCAnbHNoJz0+Jzg2MjQnLCAnTHNoJz0+Jzg2MjQnLCAnbHNpbSc9Pic4ODE4JywgJ2xzaW1lJz0+JzEwODkzJywgJ2xzaW1nJz0+JzEwODk1JywgJ2xzcWInPT4nOTEnLCAnbHNxdW9yJz0+JzgyMTgnLCAnTHN0cm9rJz0+JzMyMScsICdsc3Ryb2snPT4nMzIyJywgJ0x0Jz0+Jzg4MTAnLCAnbHRjYyc9PicxMDkxOCcsICdsdGNpcic9PicxMDg3MycsICdsdGRvdCc9Pic4OTE4JywgJ2x0aHJlZSc9Pic4OTA3JywgJ2x0aW1lcyc9Pic4OTA1JywgJ2x0bGFycic9PicxMDYxNCcsICdsdHF1ZXN0Jz0+JzEwODc1JywgJ2x0cmknPT4nOTY2NycsICdsdHJpZSc9Pic4ODg0JywgJ2x0cmlmJz0+Jzk2NjYnLCAnbHRyUGFyJz0+JzEwNjQ2JywgJ2x1cmRzaGFyJz0+JzEwNTcwJywgJ2x1cnVoYXInPT4nMTA1OTgnLCAnbWFsZSc9Pic5Nzk0JywgJ21hbHQnPT4nMTAwMTYnLCAnbWFsdGVzZSc9PicxMDAxNicsICdNYXAnPT4nMTA1MDEnLCAnbWFwJz0+Jzg2MTQnLCAnbWFwc3RvJz0+Jzg2MTQnLCAnbWFwc3RvZG93bic9Pic4NjE1JywgJ21hcHN0b2xlZnQnPT4nODYxMicsICdtYXBzdG91cCc9Pic4NjEzJywgJ21hcmtlcic9Pic5NjQ2JywgJ21jb21tYSc9PicxMDc5MycsICdNY3knPT4nMTA1MicsICdtY3knPT4nMTA4NCcsICdtRERvdCc9Pic4NzYyJywgJ21lYXN1cmVkYW5nbGUnPT4nODczNycsICdNZWRpdW1TcGFjZSc9Pic4Mjg3JywgJ01lbGxpbnRyZic9Pic4NDk5JywgJ01mcic9PicxMjAwODAnLCAnbWZyJz0+JzEyMDEwNicsICdtaG8nPT4nODQ4NycsICdtaWQnPT4nODczOScsICdtaWRhc3QnPT4nNDInLCAnbWlkY2lyJz0+JzEwOTkyJywgJ21pbnVzYic9Pic4ODYzJywgJ21pbnVzZCc9Pic4NzYwJywgJ21pbnVzZHUnPT4nMTA3OTQnLCAnTWludXNQbHVzJz0+Jzg3MjMnLCAnbWxjcCc9PicxMDk3MScsICdtbGRyJz0+JzgyMzAnLCAnbW5wbHVzJz0+Jzg3MjMnLCAnbW9kZWxzJz0+Jzg4NzEnLCAnTW9wZic9PicxMjAxMzInLCAnbW9wZic9PicxMjAxNTgnLCAnbXAnPT4nODcyMycsICdtc2NyJz0+JzEyMDAwMicsICdNc2NyJz0+Jzg0OTknLCAnbXN0cG9zJz0+Jzg3NjYnLCAnbXVsdGltYXAnPT4nODg4OCcsICdtdW1hcCc9Pic4ODg4JywgJ05hY3V0ZSc9PiczMjMnLCAnbmFjdXRlJz0+JzMyNCcsICduYXAnPT4nODc3NycsICduYXBvcyc9PiczMjknLCAnbmFwcHJveCc9Pic4Nzc3JywgJ25hdHVyJz0+Jzk4MzgnLCAnbmF0dXJhbCc9Pic5ODM4JywgJ25hdHVyYWxzJz0+Jzg0NjknLCAnbmNhcCc9PicxMDgxOScsICdOY2Fyb24nPT4nMzI3JywgJ25jYXJvbic9PiczMjgnLCAnTmNlZGlsJz0+JzMyNScsICduY2VkaWwnPT4nMzI2JywgJ25jb25nJz0+Jzg3NzUnLCAnbmN1cCc9PicxMDgxOCcsICdOY3knPT4nMTA1MycsICduY3knPT4nMTA4NScsICduZWFyaGsnPT4nMTA1MzInLCAnbmVhcnInPT4nODU5OScsICduZUFycic9Pic4NjYzJywgJ25lYXJyb3cnPT4nODU5OScsICdOZWdhdGl2ZU1lZGl1bVNwYWNlJz0+JzgyMDMnLCAnTmVnYXRpdmVUaGlja1NwYWNlJz0+JzgyMDMnLCAnTmVnYXRpdmVUaGluU3BhY2UnPT4nODIwMycsICdOZWdhdGl2ZVZlcnlUaGluU3BhY2UnPT4nODIwMycsICduZXF1aXYnPT4nODgwMicsICduZXNlYXInPT4nMTA1MzYnLCAnTmVzdGVkR3JlYXRlckdyZWF0ZXInPT4nODgxMScsICdOZXN0ZWRMZXNzTGVzcyc9Pic4ODEwJywgJ05ld0xpbmUnPT4nMTAnLCAnbmV4aXN0Jz0+Jzg3MDgnLCAnbmV4aXN0cyc9Pic4NzA4JywgJ05mcic9PicxMjAwODEnLCAnbmZyJz0+JzEyMDEwNycsICduZ2UnPT4nODgxNycsICduZ2VxJz0+Jzg4MTcnLCAnbmdzaW0nPT4nODgyMScsICduZ3QnPT4nODgxNScsICduZ3RyJz0+Jzg4MTUnLCAnbmhhcnInPT4nODYyMicsICduaEFycic9Pic4NjU0JywgJ25ocGFyJz0+JzEwOTk0JywgJ25pcyc9Pic4OTU2JywgJ25pc2QnPT4nODk1NCcsICduaXYnPT4nODcxNScsICdOSmN5Jz0+JzEwMzQnLCAnbmpjeSc9PicxMTE0JywgJ25sYXJyJz0+Jzg2MDInLCAnbmxBcnInPT4nODY1MycsICdubGRyJz0+JzgyMjknLCAnbmxlJz0+Jzg4MTYnLCAnbmxlZnRhcnJvdyc9Pic4NjAyJywgJ25MZWZ0YXJyb3cnPT4nODY1MycsICdubGVmdHJpZ2h0YXJyb3cnPT4nODYyMicsICduTGVmdHJpZ2h0YXJyb3cnPT4nODY1NCcsICdubGVxJz0+Jzg4MTYnLCAnbmxlc3MnPT4nODgxNCcsICdubHNpbSc9Pic4ODIwJywgJ25sdCc9Pic4ODE0JywgJ25sdHJpJz0+Jzg5MzgnLCAnbmx0cmllJz0+Jzg5NDAnLCAnbm1pZCc9Pic4NzQwJywgJ05vQnJlYWsnPT4nODI4OCcsICdOb25CcmVha2luZ1NwYWNlJz0+JzE2MCcsICdub3BmJz0+JzEyMDE1OScsICdOb3BmJz0+Jzg0NjknLCAnTm90Jz0+JzEwOTg4JywgJ05vdENvbmdydWVudCc9Pic4ODAyJywgJ05vdEN1cENhcCc9Pic4ODEzJywgJ05vdERvdWJsZVZlcnRpY2FsQmFyJz0+Jzg3NDInLCAnTm90RWxlbWVudCc9Pic4NzEzJywgJ05vdEVxdWFsJz0+Jzg4MDAnLCAnTm90RXhpc3RzJz0+Jzg3MDgnLCAnTm90R3JlYXRlcic9Pic4ODE1JywgJ05vdEdyZWF0ZXJFcXVhbCc9Pic4ODE3JywgJ05vdEdyZWF0ZXJMZXNzJz0+Jzg4MjUnLCAnTm90R3JlYXRlclRpbGRlJz0+Jzg4MjEnLCAnbm90aW52YSc9Pic4NzEzJywgJ25vdGludmInPT4nODk1MScsICdub3RpbnZjJz0+Jzg5NTAnLCAnTm90TGVmdFRyaWFuZ2xlJz0+Jzg5MzgnLCAnTm90TGVmdFRyaWFuZ2xlRXF1YWwnPT4nODk0MCcsICdOb3RMZXNzJz0+Jzg4MTQnLCAnTm90TGVzc0VxdWFsJz0+Jzg4MTYnLCAnTm90TGVzc0dyZWF0ZXInPT4nODgyNCcsICdOb3RMZXNzVGlsZGUnPT4nODgyMCcsICdub3RuaSc9Pic4NzE2JywgJ25vdG5pdmEnPT4nODcxNicsICdub3RuaXZiJz0+Jzg5NTgnLCAnbm90bml2Yyc9Pic4OTU3JywgJ05vdFByZWNlZGVzJz0+Jzg4MzInLCAnTm90UHJlY2VkZXNTbGFudEVxdWFsJz0+Jzg5MjgnLCAnTm90UmV2ZXJzZUVsZW1lbnQnPT4nODcxNicsICdOb3RSaWdodFRyaWFuZ2xlJz0+Jzg5MzknLCAnTm90UmlnaHRUcmlhbmdsZUVxdWFsJz0+Jzg5NDEnLCAnTm90U3F1YXJlU3Vic2V0RXF1YWwnPT4nODkzMCcsICdOb3RTcXVhcmVTdXBlcnNldEVxdWFsJz0+Jzg5MzEnLCAnTm90U3Vic2V0RXF1YWwnPT4nODg0MCcsICdOb3RTdWNjZWVkcyc9Pic4ODMzJywgJ05vdFN1Y2NlZWRzU2xhbnRFcXVhbCc9Pic4OTI5JywgJ05vdFN1cGVyc2V0RXF1YWwnPT4nODg0MScsICdOb3RUaWxkZSc9Pic4NzY5JywgJ05vdFRpbGRlRXF1YWwnPT4nODc3MicsICdOb3RUaWxkZUZ1bGxFcXVhbCc9Pic4Nzc1JywgJ05vdFRpbGRlVGlsZGUnPT4nODc3NycsICdOb3RWZXJ0aWNhbEJhcic9Pic4NzQwJywgJ25wYXInPT4nODc0MicsICducGFyYWxsZWwnPT4nODc0MicsICducG9saW50Jz0+JzEwNzcyJywgJ25wcic9Pic4ODMyJywgJ25wcmN1ZSc9Pic4OTI4JywgJ25wcmVjJz0+Jzg4MzInLCAnbnJhcnInPT4nODYwMycsICduckFycic9Pic4NjU1JywgJ25yaWdodGFycm93Jz0+Jzg2MDMnLCAnblJpZ2h0YXJyb3cnPT4nODY1NScsICducnRyaSc9Pic4OTM5JywgJ25ydHJpZSc9Pic4OTQxJywgJ25zYyc9Pic4ODMzJywgJ25zY2N1ZSc9Pic4OTI5JywgJ05zY3InPT4nMTE5OTc3JywgJ25zY3InPT4nMTIwMDAzJywgJ25zaG9ydG1pZCc9Pic4NzQwJywgJ25zaG9ydHBhcmFsbGVsJz0+Jzg3NDInLCAnbnNpbSc9Pic4NzY5JywgJ25zaW1lJz0+Jzg3NzInLCAnbnNpbWVxJz0+Jzg3NzInLCAnbnNtaWQnPT4nODc0MCcsICduc3Bhcic9Pic4NzQyJywgJ25zcXN1YmUnPT4nODkzMCcsICduc3FzdXBlJz0+Jzg5MzEnLCAnbnN1YmUnPT4nODg0MCcsICduc3Vic2V0ZXEnPT4nODg0MCcsICduc3VjYyc9Pic4ODMzJywgJ25zdXAnPT4nODgzNycsICduc3VwZSc9Pic4ODQxJywgJ25zdXBzZXRlcSc9Pic4ODQxJywgJ250Z2wnPT4nODgyNScsICdudGxnJz0+Jzg4MjQnLCAnbnRyaWFuZ2xlbGVmdCc9Pic4OTM4JywgJ250cmlhbmdsZWxlZnRlcSc9Pic4OTQwJywgJ250cmlhbmdsZXJpZ2h0Jz0+Jzg5MzknLCAnbnRyaWFuZ2xlcmlnaHRlcSc9Pic4OTQxJywgJ251bSc9PiczNScsICdudW1lcm8nPT4nODQ3MCcsICdudW1zcCc9Pic4MTk5JywgJ252ZGFzaCc9Pic4ODc2JywgJ252RGFzaCc9Pic4ODc3JywgJ25WZGFzaCc9Pic4ODc4JywgJ25WRGFzaCc9Pic4ODc5JywgJ252SGFycic9PicxMDUwMCcsICdudmluZmluJz0+JzEwNzE4JywgJ252bEFycic9PicxMDQ5OCcsICdudnJBcnInPT4nMTA0OTknLCAnbndhcmhrJz0+JzEwNTMxJywgJ253YXJyJz0+Jzg1OTgnLCAnbndBcnInPT4nODY2MicsICdud2Fycm93Jz0+Jzg1OTgnLCAnbnduZWFyJz0+JzEwNTM1JywgJ29hc3QnPT4nODg1OScsICdvY2lyJz0+Jzg4NTgnLCAnT2N5Jz0+JzEwNTQnLCAnb2N5Jz0+JzEwODYnLCAnb2Rhc2gnPT4nODg2MScsICdPZGJsYWMnPT4nMzM2JywgJ29kYmxhYyc9PiczMzcnLCAnb2Rpdic9PicxMDgwOCcsICdvZG90Jz0+Jzg4NTcnLCAnb2Rzb2xkJz0+JzEwNjg0JywgJ29mY2lyJz0+JzEwNjg3JywgJ09mcic9PicxMjAwODInLCAnb2ZyJz0+JzEyMDEwOCcsICdvZ29uJz0+JzczMScsICdvZ3QnPT4nMTA2ODknLCAnb2hiYXInPT4nMTA2NzcnLCAnb2htJz0+JzkzNycsICdvaW50Jz0+Jzg3NTAnLCAnb2xhcnInPT4nODYzNCcsICdvbGNpcic9PicxMDY4NicsICdvbGNyb3NzJz0+JzEwNjgzJywgJ29sdCc9PicxMDY4OCcsICdPbWFjcic9PiczMzInLCAnb21hY3InPT4nMzMzJywgJ29taWQnPT4nMTA2NzgnLCAnb21pbnVzJz0+Jzg4NTQnLCAnT29wZic9PicxMjAxMzQnLCAnb29wZic9PicxMjAxNjAnLCAnb3Bhcic9PicxMDY3OScsICdPcGVuQ3VybHlEb3VibGVRdW90ZSc9Pic4MjIwJywgJ09wZW5DdXJseVF1b3RlJz0+JzgyMTYnLCAnb3BlcnAnPT4nMTA2ODEnLCAnT3InPT4nMTA4MzYnLCAnb3JhcnInPT4nODYzNScsICdvcmQnPT4nMTA4NDUnLCAnb3JkZXInPT4nODUwMCcsICdvcmRlcm9mJz0+Jzg1MDAnLCAnb3JpZ29mJz0+Jzg4ODYnLCAnb3Jvcic9PicxMDgzOCcsICdvcnNsb3BlJz0+JzEwODM5JywgJ29ydic9PicxMDg0MycsICdvUyc9Pic5NDE2JywgJ09zY3InPT4nMTE5OTc4JywgJ29zY3InPT4nODUwMCcsICdvc29sJz0+Jzg4NTYnLCAnT3RpbWVzJz0+JzEwODA3JywgJ290aW1lc2FzJz0+JzEwODA2JywgJ292YmFyJz0+JzkwMjEnLCAnT3ZlckJhcic9Pic4MjU0JywgJ092ZXJCcmFjZSc9Pic5MTgyJywgJ092ZXJCcmFja2V0Jz0+JzkxNDAnLCAnT3ZlclBhcmVudGhlc2lzJz0+JzkxODAnLCAncGFyJz0+Jzg3NDEnLCAncGFyYWxsZWwnPT4nODc0MScsICdwYXJzaW0nPT4nMTA5OTUnLCAncGFyc2wnPT4nMTEwMDUnLCAnUGFydGlhbEQnPT4nODcwNicsICdQY3knPT4nMTA1NScsICdwY3knPT4nMTA4NycsICdwZXJjbnQnPT4nMzcnLCAncGVyaW9kJz0+JzQ2JywgJ3BlcnRlbmsnPT4nODI0MScsICdQZnInPT4nMTIwMDgzJywgJ3Bmcic9PicxMjAxMDknLCAncGhpdic9Pic5ODEnLCAncGhtbWF0Jz0+Jzg0OTknLCAncGhvbmUnPT4nOTc0MicsICdwaXRjaGZvcmsnPT4nODkxNicsICdwbGFuY2snPT4nODQ2MycsICdwbGFuY2toJz0+Jzg0NjInLCAncGxhbmt2Jz0+Jzg0NjMnLCAncGx1cyc9Pic0MycsICdwbHVzYWNpcic9PicxMDc4NycsICdwbHVzYic9Pic4ODYyJywgJ3BsdXNjaXInPT4nMTA3ODYnLCAncGx1c2RvJz0+Jzg3MjQnLCAncGx1c2R1Jz0+JzEwNzg5JywgJ3BsdXNlJz0+JzEwODY2JywgJ1BsdXNNaW51cyc9PicxNzcnLCAncGx1c3NpbSc9PicxMDc5MCcsICdwbHVzdHdvJz0+JzEwNzkxJywgJ3BtJz0+JzE3NycsICdQb2luY2FyZXBsYW5lJz0+Jzg0NjAnLCAncG9pbnRpbnQnPT4nMTA3NzMnLCAncG9wZic9PicxMjAxNjEnLCAnUG9wZic9Pic4NDczJywgJ1ByJz0+JzEwOTM5JywgJ3ByJz0+Jzg4MjYnLCAncHJhcCc9PicxMDkzNScsICdwcmN1ZSc9Pic4ODI4JywgJ3ByZSc9PicxMDkyNycsICdwckUnPT4nMTA5MzEnLCAncHJlYyc9Pic4ODI2JywgJ3ByZWNhcHByb3gnPT4nMTA5MzUnLCAncHJlY2N1cmx5ZXEnPT4nODgyOCcsICdQcmVjZWRlcyc9Pic4ODI2JywgJ1ByZWNlZGVzRXF1YWwnPT4nMTA5MjcnLCAnUHJlY2VkZXNTbGFudEVxdWFsJz0+Jzg4MjgnLCAnUHJlY2VkZXNUaWxkZSc9Pic4ODMwJywgJ3ByZWNlcSc9PicxMDkyNycsICdwcmVjbmFwcHJveCc9PicxMDkzNycsICdwcmVjbmVxcSc9PicxMDkzMycsICdwcmVjbnNpbSc9Pic4OTM2JywgJ3ByZWNzaW0nPT4nODgzMCcsICdwcmltZXMnPT4nODQ3MycsICdwcm5hcCc9PicxMDkzNycsICdwcm5FJz0+JzEwOTMzJywgJ3BybnNpbSc9Pic4OTM2JywgJ1Byb2R1Y3QnPT4nODcxOScsICdwcm9mYWxhcic9Pic5MDA2JywgJ3Byb2ZsaW5lJz0+Jzg5NzgnLCAncHJvZnN1cmYnPT4nODk3OScsICdQcm9wb3J0aW9uJz0+Jzg3NTknLCAnUHJvcG9ydGlvbmFsJz0+Jzg3MzMnLCAncHJvcHRvJz0+Jzg3MzMnLCAncHJzaW0nPT4nODgzMCcsICdwcnVyZWwnPT4nODg4MCcsICdQc2NyJz0+JzExOTk3OScsICdwc2NyJz0+JzEyMDAwNScsICdwdW5jc3AnPT4nODIwMCcsICdRZnInPT4nMTIwMDg0JywgJ3Fmcic9PicxMjAxMTAnLCAncWludCc9PicxMDc2NCcsICdxb3BmJz0+JzEyMDE2MicsICdRb3BmJz0+Jzg0NzQnLCAncXByaW1lJz0+JzgyNzknLCAnUXNjcic9PicxMTk5ODAnLCAncXNjcic9PicxMjAwMDYnLCAncXVhdGVybmlvbnMnPT4nODQ2MScsICdxdWF0aW50Jz0+JzEwNzc0JywgJ3F1ZXN0Jz0+JzYzJywgJ3F1ZXN0ZXEnPT4nODc5OScsICdyQWFycic9Pic4NjY3JywgJ1JhY3V0ZSc9PiczNDAnLCAncmFjdXRlJz0+JzM0MScsICdyYWVtcHR5dic9PicxMDY3NScsICdyYW5nJz0+JzEwMjE3JywgJ1JhbmcnPT4nMTAyMTknLCAncmFuZ2QnPT4nMTA2NDInLCAncmFuZ2UnPT4nMTA2NjEnLCAncmFuZ2xlJz0+JzEwMjE3JywgJ1JhcnInPT4nODYwOCcsICdyYXJyYXAnPT4nMTA2MTMnLCAncmFycmInPT4nODY3NycsICdyYXJyYmZzJz0+JzEwNTI4JywgJ3JhcnJjJz0+JzEwNTQ3JywgJ3JhcnJmcyc9PicxMDUyNicsICdyYXJyaGsnPT4nODYxOCcsICdyYXJybHAnPT4nODYyMCcsICdyYXJycGwnPT4nMTA1NjUnLCAncmFycnNpbSc9PicxMDYxMicsICdSYXJydGwnPT4nMTA1MTgnLCAncmFycnRsJz0+Jzg2MTEnLCAncmFycncnPT4nODYwNScsICdyYXRhaWwnPT4nMTA1MjInLCAnckF0YWlsJz0+JzEwNTI0JywgJ3JhdGlvJz0+Jzg3NTgnLCAncmF0aW9uYWxzJz0+Jzg0NzQnLCAncmJhcnInPT4nMTA1MDknLCAnckJhcnInPT4nMTA1MTEnLCAnUkJhcnInPT4nMTA1MTInLCAncmJicmsnPT4nMTAwOTknLCAncmJyYWNlJz0+JzEyNScsICdyYnJhY2snPT4nOTMnLCAncmJya2UnPT4nMTA2MzYnLCAncmJya3NsZCc9PicxMDYzOCcsICdyYnJrc2x1Jz0+JzEwNjQwJywgJ1JjYXJvbic9PiczNDQnLCAncmNhcm9uJz0+JzM0NScsICdSY2VkaWwnPT4nMzQyJywgJ3JjZWRpbCc9PiczNDMnLCAncmN1Yic9PicxMjUnLCAnUmN5Jz0+JzEwNTYnLCAncmN5Jz0+JzEwODgnLCAncmRjYSc9PicxMDU1MScsICdyZGxkaGFyJz0+JzEwNjAxJywgJ3JkcXVvcic9Pic4MjIxJywgJ3Jkc2gnPT4nODYyNycsICdSZSc9Pic4NDc2JywgJ3JlYWxpbmUnPT4nODQ3NScsICdyZWFscGFydCc9Pic4NDc2JywgJ3JlYWxzJz0+Jzg0NzcnLCAncmVjdCc9Pic5NjQ1JywgJ1JFRyc9PicxNzQnLCAnUmV2ZXJzZUVsZW1lbnQnPT4nODcxNScsICdSZXZlcnNlRXF1aWxpYnJpdW0nPT4nODY1MScsICdSZXZlcnNlVXBFcXVpbGlicml1bSc9PicxMDYwNycsICdyZmlzaHQnPT4nMTA2MjEnLCAncmZyJz0+JzEyMDExMScsICdSZnInPT4nODQ3NicsICdySGFyJz0+JzEwNTk2JywgJ3JoYXJkJz0+Jzg2NDEnLCAncmhhcnUnPT4nODY0MCcsICdyaGFydWwnPT4nMTA2MDQnLCAncmhvdic9PicxMDA5JywgJ1JpZ2h0QW5nbGVCcmFja2V0Jz0+JzEwMjE3JywgJ3JpZ2h0YXJyb3cnPT4nODU5NCcsICdSaWdodEFycm93Jz0+Jzg1OTQnLCAnUmlnaHRhcnJvdyc9Pic4NjU4JywgJ1JpZ2h0QXJyb3dCYXInPT4nODY3NycsICdSaWdodEFycm93TGVmdEFycm93Jz0+Jzg2NDQnLCAncmlnaHRhcnJvd3RhaWwnPT4nODYxMScsICdSaWdodENlaWxpbmcnPT4nODk2OScsICdSaWdodERvdWJsZUJyYWNrZXQnPT4nMTAyMTUnLCAnUmlnaHREb3duVGVlVmVjdG9yJz0+JzEwNTg5JywgJ1JpZ2h0RG93blZlY3Rvcic9Pic4NjQyJywgJ1JpZ2h0RG93blZlY3RvckJhcic9PicxMDU4MScsICdSaWdodEZsb29yJz0+Jzg5NzEnLCAncmlnaHRoYXJwb29uZG93bic9Pic4NjQxJywgJ3JpZ2h0aGFycG9vbnVwJz0+Jzg2NDAnLCAncmlnaHRsZWZ0YXJyb3dzJz0+Jzg2NDQnLCAncmlnaHRsZWZ0aGFycG9vbnMnPT4nODY1MicsICdyaWdodHJpZ2h0YXJyb3dzJz0+Jzg2NDknLCAncmlnaHRzcXVpZ2Fycm93Jz0+Jzg2MDUnLCAnUmlnaHRUZWUnPT4nODg2NicsICdSaWdodFRlZUFycm93Jz0+Jzg2MTQnLCAnUmlnaHRUZWVWZWN0b3InPT4nMTA1ODcnLCAncmlnaHR0aHJlZXRpbWVzJz0+Jzg5MDgnLCAnUmlnaHRUcmlhbmdsZSc9Pic4ODgzJywgJ1JpZ2h0VHJpYW5nbGVCYXInPT4nMTA3MDQnLCAnUmlnaHRUcmlhbmdsZUVxdWFsJz0+Jzg4ODUnLCAnUmlnaHRVcERvd25WZWN0b3InPT4nMTA1NzUnLCAnUmlnaHRVcFRlZVZlY3Rvcic9PicxMDU4OCcsICdSaWdodFVwVmVjdG9yJz0+Jzg2MzgnLCAnUmlnaHRVcFZlY3RvckJhcic9PicxMDU4MCcsICdSaWdodFZlY3Rvcic9Pic4NjQwJywgJ1JpZ2h0VmVjdG9yQmFyJz0+JzEwNTc5JywgJ3JpbmcnPT4nNzMwJywgJ3Jpc2luZ2RvdHNlcSc9Pic4Nzg3JywgJ3JsYXJyJz0+Jzg2NDQnLCAncmxoYXInPT4nODY1MicsICdybW91c3QnPT4nOTEzNycsICdybW91c3RhY2hlJz0+JzkxMzcnLCAncm5taWQnPT4nMTA5OTAnLCAncm9hbmcnPT4nMTAyMjEnLCAncm9hcnInPT4nODcwMicsICdyb2Jyayc9PicxMDIxNScsICdyb3Bhcic9PicxMDYzMCcsICdyb3BmJz0+JzEyMDE2MycsICdSb3BmJz0+Jzg0NzcnLCAncm9wbHVzJz0+JzEwNzk4JywgJ3JvdGltZXMnPT4nMTA4MDUnLCAnUm91bmRJbXBsaWVzJz0+JzEwNjA4JywgJ3JwYXInPT4nNDEnLCAncnBhcmd0Jz0+JzEwNjQ0JywgJ3JwcG9saW50Jz0+JzEwNzcwJywgJ3JyYXJyJz0+Jzg2NDknLCAnUnJpZ2h0YXJyb3cnPT4nODY2NycsICdyc2NyJz0+JzEyMDAwNycsICdSc2NyJz0+Jzg0NzUnLCAncnNoJz0+Jzg2MjUnLCAnUnNoJz0+Jzg2MjUnLCAncnNxYic9Pic5MycsICdyc3F1b3InPT4nODIxNycsICdydGhyZWUnPT4nODkwOCcsICdydGltZXMnPT4nODkwNicsICdydHJpJz0+Jzk2NTcnLCAncnRyaWUnPT4nODg4NScsICdydHJpZic9Pic5NjU2JywgJ3J0cmlsdHJpJz0+JzEwNzAyJywgJ1J1bGVEZWxheWVkJz0+JzEwNzQwJywgJ3J1bHVoYXInPT4nMTA2MDAnLCAncngnPT4nODQ3OCcsICdTYWN1dGUnPT4nMzQ2JywgJ3NhY3V0ZSc9PiczNDcnLCAnU2MnPT4nMTA5NDAnLCAnc2MnPT4nODgyNycsICdzY2FwJz0+JzEwOTM2JywgJ3NjY3VlJz0+Jzg4MjknLCAnc2NlJz0+JzEwOTI4JywgJ3NjRSc9PicxMDkzMicsICdTY2VkaWwnPT4nMzUwJywgJ3NjZWRpbCc9PiczNTEnLCAnU2NpcmMnPT4nMzQ4JywgJ3NjaXJjJz0+JzM0OScsICdzY25hcCc9PicxMDkzOCcsICdzY25FJz0+JzEwOTM0JywgJ3NjbnNpbSc9Pic4OTM3JywgJ3NjcG9saW50Jz0+JzEwNzcxJywgJ3Njc2ltJz0+Jzg4MzEnLCAnU2N5Jz0+JzEwNTcnLCAnc2N5Jz0+JzEwODknLCAnc2RvdGInPT4nODg2NScsICdzZG90ZSc9PicxMDg1NCcsICdzZWFyaGsnPT4nMTA1MzMnLCAnc2VhcnInPT4nODYwMCcsICdzZUFycic9Pic4NjY0JywgJ3NlYXJyb3cnPT4nODYwMCcsICdzZW1pJz0+JzU5JywgJ3Nlc3dhcic9PicxMDUzNycsICdzZXRtaW51cyc9Pic4NzI2JywgJ3NldG1uJz0+Jzg3MjYnLCAnc2V4dCc9PicxMDAzOCcsICdTZnInPT4nMTIwMDg2JywgJ3Nmcic9PicxMjAxMTInLCAnc2Zyb3duJz0+Jzg5OTQnLCAnc2hhcnAnPT4nOTgzOScsICdTSENIY3knPT4nMTA2NScsICdzaGNoY3knPT4nMTA5NycsICdTSGN5Jz0+JzEwNjQnLCAnc2hjeSc9PicxMDk2JywgJ1Nob3J0RG93bkFycm93Jz0+Jzg1OTUnLCAnU2hvcnRMZWZ0QXJyb3cnPT4nODU5MicsICdzaG9ydG1pZCc9Pic4NzM5JywgJ3Nob3J0cGFyYWxsZWwnPT4nODc0MScsICdTaG9ydFJpZ2h0QXJyb3cnPT4nODU5NCcsICdTaG9ydFVwQXJyb3cnPT4nODU5MycsICdzaWdtYXYnPT4nOTYyJywgJ3NpbWRvdCc9PicxMDg1OCcsICdzaW1lJz0+Jzg3NzEnLCAnc2ltZXEnPT4nODc3MScsICdzaW1nJz0+JzEwOTEwJywgJ3NpbWdFJz0+JzEwOTEyJywgJ3NpbWwnPT4nMTA5MDknLCAnc2ltbEUnPT4nMTA5MTEnLCAnc2ltbmUnPT4nODc3NCcsICdzaW1wbHVzJz0+JzEwNzg4JywgJ3NpbXJhcnInPT4nMTA2MTAnLCAnc2xhcnInPT4nODU5MicsICdTbWFsbENpcmNsZSc9Pic4NzI4JywgJ3NtYWxsc2V0bWludXMnPT4nODcyNicsICdzbWFzaHAnPT4nMTA4MDMnLCAnc21lcGFyc2wnPT4nMTA3MjQnLCAnc21pZCc9Pic4NzM5JywgJ3NtaWxlJz0+Jzg5OTUnLCAnc210Jz0+JzEwOTIyJywgJ3NtdGUnPT4nMTA5MjQnLCAnU09GVGN5Jz0+JzEwNjgnLCAnc29mdGN5Jz0+JzExMDAnLCAnc29sJz0+JzQ3JywgJ3NvbGInPT4nMTA2OTInLCAnc29sYmFyJz0+JzkwMjMnLCAnU29wZic9PicxMjAxMzgnLCAnc29wZic9PicxMjAxNjQnLCAnc3BhZGVzdWl0Jz0+Jzk4MjQnLCAnc3Bhcic9Pic4NzQxJywgJ3NxY2FwJz0+Jzg4NTEnLCAnc3FjdXAnPT4nODg1MicsICdTcXJ0Jz0+Jzg3MzAnLCAnc3FzdWInPT4nODg0NycsICdzcXN1YmUnPT4nODg0OScsICdzcXN1YnNldCc9Pic4ODQ3JywgJ3Nxc3Vic2V0ZXEnPT4nODg0OScsICdzcXN1cCc9Pic4ODQ4JywgJ3Nxc3VwZSc9Pic4ODUwJywgJ3Nxc3Vwc2V0Jz0+Jzg4NDgnLCAnc3FzdXBzZXRlcSc9Pic4ODUwJywgJ3NxdSc9Pic5NjMzJywgJ3NxdWFyZSc9Pic5NjMzJywgJ1NxdWFyZSc9Pic5NjMzJywgJ1NxdWFyZUludGVyc2VjdGlvbic9Pic4ODUxJywgJ1NxdWFyZVN1YnNldCc9Pic4ODQ3JywgJ1NxdWFyZVN1YnNldEVxdWFsJz0+Jzg4NDknLCAnU3F1YXJlU3VwZXJzZXQnPT4nODg0OCcsICdTcXVhcmVTdXBlcnNldEVxdWFsJz0+Jzg4NTAnLCAnU3F1YXJlVW5pb24nPT4nODg1MicsICdzcXVhcmYnPT4nOTY0MicsICdzcXVmJz0+Jzk2NDInLCAnc3JhcnInPT4nODU5NCcsICdTc2NyJz0+JzExOTk4MicsICdzc2NyJz0+JzEyMDAwOCcsICdzc2V0bW4nPT4nODcyNicsICdzc21pbGUnPT4nODk5NScsICdzc3RhcmYnPT4nODkwMicsICdTdGFyJz0+Jzg5MDInLCAnc3Rhcic9Pic5NzM0JywgJ3N0YXJmJz0+Jzk3MzMnLCAnc3RyYWlnaHRlcHNpbG9uJz0+JzEwMTMnLCAnc3RyYWlnaHRwaGknPT4nOTgxJywgJ3N0cm5zJz0+JzE3NScsICdTdWInPT4nODkxMicsICdzdWJkb3QnPT4nMTA5NDEnLCAnc3ViRSc9PicxMDk0OScsICdzdWJlZG90Jz0+JzEwOTQ3JywgJ3N1Ym11bHQnPT4nMTA5NDUnLCAnc3VibkUnPT4nMTA5NTUnLCAnc3VibmUnPT4nODg0MicsICdzdWJwbHVzJz0+JzEwOTQzJywgJ3N1YnJhcnInPT4nMTA2MTcnLCAnc3Vic2V0Jz0+Jzg4MzQnLCAnU3Vic2V0Jz0+Jzg5MTInLCAnc3Vic2V0ZXEnPT4nODgzOCcsICdzdWJzZXRlcXEnPT4nMTA5NDknLCAnU3Vic2V0RXF1YWwnPT4nODgzOCcsICdzdWJzZXRuZXEnPT4nODg0MicsICdzdWJzZXRuZXFxJz0+JzEwOTU1JywgJ3N1YnNpbSc9PicxMDk1MScsICdzdWJzdWInPT4nMTA5NjUnLCAnc3Vic3VwJz0+JzEwOTYzJywgJ3N1Y2MnPT4nODgyNycsICdzdWNjYXBwcm94Jz0+JzEwOTM2JywgJ3N1Y2NjdXJseWVxJz0+Jzg4MjknLCAnU3VjY2VlZHMnPT4nODgyNycsICdTdWNjZWVkc0VxdWFsJz0+JzEwOTI4JywgJ1N1Y2NlZWRzU2xhbnRFcXVhbCc9Pic4ODI5JywgJ1N1Y2NlZWRzVGlsZGUnPT4nODgzMScsICdzdWNjZXEnPT4nMTA5MjgnLCAnc3VjY25hcHByb3gnPT4nMTA5MzgnLCAnc3VjY25lcXEnPT4nMTA5MzQnLCAnc3VjY25zaW0nPT4nODkzNycsICdzdWNjc2ltJz0+Jzg4MzEnLCAnU3VjaFRoYXQnPT4nODcxNScsICdTdW0nPT4nODcyMScsICdzdW5nJz0+Jzk4MzQnLCAnU3VwJz0+Jzg5MTMnLCAnc3VwZG90Jz0+JzEwOTQyJywgJ3N1cGRzdWInPT4nMTA5NjgnLCAnc3VwRSc9PicxMDk1MCcsICdzdXBlZG90Jz0+JzEwOTQ4JywgJ1N1cGVyc2V0Jz0+Jzg4MzUnLCAnU3VwZXJzZXRFcXVhbCc9Pic4ODM5JywgJ3N1cGhzb2wnPT4nMTAxODUnLCAnc3VwaHN1Yic9PicxMDk2NycsICdzdXBsYXJyJz0+JzEwNjE5JywgJ3N1cG11bHQnPT4nMTA5NDYnLCAnc3VwbkUnPT4nMTA5NTYnLCAnc3VwbmUnPT4nODg0MycsICdzdXBwbHVzJz0+JzEwOTQ0JywgJ3N1cHNldCc9Pic4ODM1JywgJ1N1cHNldCc9Pic4OTEzJywgJ3N1cHNldGVxJz0+Jzg4MzknLCAnc3Vwc2V0ZXFxJz0+JzEwOTUwJywgJ3N1cHNldG5lcSc9Pic4ODQzJywgJ3N1cHNldG5lcXEnPT4nMTA5NTYnLCAnc3Vwc2ltJz0+JzEwOTUyJywgJ3N1cHN1Yic9PicxMDk2NCcsICdzdXBzdXAnPT4nMTA5NjYnLCAnc3dhcmhrJz0+JzEwNTM0JywgJ3N3YXJyJz0+Jzg2MDEnLCAnc3dBcnInPT4nODY2NScsICdzd2Fycm93Jz0+Jzg2MDEnLCAnc3dud2FyJz0+JzEwNTM4JywgJ1RhYic9Pic5JywgJ3RhcmdldCc9Pic4OTgyJywgJ3RicmsnPT4nOTE0MCcsICdUY2Fyb24nPT4nMzU2JywgJ3RjYXJvbic9PiczNTcnLCAnVGNlZGlsJz0+JzM1NCcsICd0Y2VkaWwnPT4nMzU1JywgJ1RjeSc9PicxMDU4JywgJ3RjeSc9PicxMDkwJywgJ3Rkb3QnPT4nODQxMScsICd0ZWxyZWMnPT4nODk4MScsICdUZnInPT4nMTIwMDg3JywgJ3Rmcic9PicxMjAxMTMnLCAndGhlcmVmb3JlJz0+Jzg3NTYnLCAnVGhlcmVmb3JlJz0+Jzg3NTYnLCAndGhldGF2Jz0+Jzk3NycsICd0aGlja2FwcHJveCc9Pic4Nzc2JywgJ3RoaWNrc2ltJz0+Jzg3NjQnLCAnVGhpblNwYWNlJz0+JzgyMDEnLCAndGhrYXAnPT4nODc3NicsICd0aGtzaW0nPT4nODc2NCcsICdUaWxkZSc9Pic4NzY0JywgJ1RpbGRlRXF1YWwnPT4nODc3MScsICdUaWxkZUZ1bGxFcXVhbCc9Pic4NzczJywgJ1RpbGRlVGlsZGUnPT4nODc3NicsICd0aW1lc2InPT4nODg2NCcsICd0aW1lc2Jhcic9PicxMDgwMScsICd0aW1lc2QnPT4nMTA4MDAnLCAndGludCc9Pic4NzQ5JywgJ3RvZWEnPT4nMTA1MzYnLCAndG9wJz0+Jzg4NjgnLCAndG9wYm90Jz0+JzkwMTQnLCAndG9wY2lyJz0+JzEwOTkzJywgJ1RvcGYnPT4nMTIwMTM5JywgJ3RvcGYnPT4nMTIwMTY1JywgJ3RvcGZvcmsnPT4nMTA5NzAnLCAndG9zYSc9PicxMDUzNycsICd0cHJpbWUnPT4nODI0NCcsICdUUkFERSc9Pic4NDgyJywgJ3RyaWFuZ2xlJz0+Jzk2NTMnLCAndHJpYW5nbGVkb3duJz0+Jzk2NjMnLCAndHJpYW5nbGVsZWZ0Jz0+Jzk2NjcnLCAndHJpYW5nbGVsZWZ0ZXEnPT4nODg4NCcsICd0cmlhbmdsZXEnPT4nODc5NicsICd0cmlhbmdsZXJpZ2h0Jz0+Jzk2NTcnLCAndHJpYW5nbGVyaWdodGVxJz0+Jzg4ODUnLCAndHJpZG90Jz0+Jzk3MDgnLCAndHJpZSc9Pic4Nzk2JywgJ3RyaW1pbnVzJz0+JzEwODEwJywgJ1RyaXBsZURvdCc9Pic4NDExJywgJ3RyaXBsdXMnPT4nMTA4MDknLCAndHJpc2InPT4nMTA3MDEnLCAndHJpdGltZSc9PicxMDgxMScsICd0cnBleml1bSc9Pic5MTg2JywgJ1RzY3InPT4nMTE5OTgzJywgJ3RzY3InPT4nMTIwMDA5JywgJ1RTY3knPT4nMTA2MicsICd0c2N5Jz0+JzEwOTQnLCAnVFNIY3knPT4nMTAzNScsICd0c2hjeSc9PicxMTE1JywgJ1RzdHJvayc9PiczNTgnLCAndHN0cm9rJz0+JzM1OScsICd0d2l4dCc9Pic4ODEyJywgJ3R3b2hlYWRsZWZ0YXJyb3cnPT4nODYwNicsICd0d29oZWFkcmlnaHRhcnJvdyc9Pic4NjA4JywgJ1VhcnInPT4nODYwNycsICdVYXJyb2Npcic9PicxMDU2OScsICdVYnJjeSc9PicxMDM4JywgJ3VicmN5Jz0+JzExMTgnLCAnVWJyZXZlJz0+JzM2NCcsICd1YnJldmUnPT4nMzY1JywgJ1VjeSc9PicxMDU5JywgJ3VjeSc9PicxMDkxJywgJ3VkYXJyJz0+Jzg2NDUnLCAnVWRibGFjJz0+JzM2OCcsICd1ZGJsYWMnPT4nMzY5JywgJ3VkaGFyJz0+JzEwNjA2JywgJ3VmaXNodCc9PicxMDYyMicsICdVZnInPT4nMTIwMDg4JywgJ3Vmcic9PicxMjAxMTQnLCAndUhhcic9PicxMDU5NScsICd1aGFybCc9Pic4NjM5JywgJ3VoYXJyJz0+Jzg2MzgnLCAndWhibGsnPT4nOTYwMCcsICd1bGNvcm4nPT4nODk4OCcsICd1bGNvcm5lcic9Pic4OTg4JywgJ3VsY3JvcCc9Pic4OTc1JywgJ3VsdHJpJz0+Jzk3MjAnLCAnVW1hY3InPT4nMzYyJywgJ3VtYWNyJz0+JzM2MycsICdVbmRlckJhcic9Pic5NScsICdVbmRlckJyYWNlJz0+JzkxODMnLCAnVW5kZXJCcmFja2V0Jz0+JzkxNDEnLCAnVW5kZXJQYXJlbnRoZXNpcyc9Pic5MTgxJywgJ1VuaW9uJz0+Jzg4OTknLCAnVW5pb25QbHVzJz0+Jzg4NDYnLCAnVW9nb24nPT4nMzcwJywgJ3VvZ29uJz0+JzM3MScsICdVb3BmJz0+JzEyMDE0MCcsICd1b3BmJz0+JzEyMDE2NicsICd1cGFycm93Jz0+Jzg1OTMnLCAnVXBBcnJvdyc9Pic4NTkzJywgJ1VwYXJyb3cnPT4nODY1NycsICdVcEFycm93QmFyJz0+JzEwNTE0JywgJ1VwQXJyb3dEb3duQXJyb3cnPT4nODY0NScsICd1cGRvd25hcnJvdyc9Pic4NTk3JywgJ1VwRG93bkFycm93Jz0+Jzg1OTcnLCAnVXBkb3duYXJyb3cnPT4nODY2MScsICdVcEVxdWlsaWJyaXVtJz0+JzEwNjA2JywgJ3VwaGFycG9vbmxlZnQnPT4nODYzOScsICd1cGhhcnBvb25yaWdodCc9Pic4NjM4JywgJ3VwbHVzJz0+Jzg4NDYnLCAnVXBwZXJMZWZ0QXJyb3cnPT4nODU5OCcsICdVcHBlclJpZ2h0QXJyb3cnPT4nODU5OScsICd1cHNpJz0+Jzk2NScsICdVcHNpJz0+Jzk3OCcsICdVcFRlZSc9Pic4ODY5JywgJ1VwVGVlQXJyb3cnPT4nODYxMycsICd1cHVwYXJyb3dzJz0+Jzg2NDgnLCAndXJjb3JuJz0+Jzg5ODknLCAndXJjb3JuZXInPT4nODk4OScsICd1cmNyb3AnPT4nODk3NCcsICdVcmluZyc9PiczNjYnLCAndXJpbmcnPT4nMzY3JywgJ3VydHJpJz0+Jzk3MjEnLCAnVXNjcic9PicxMTk5ODQnLCAndXNjcic9PicxMjAwMTAnLCAndXRkb3QnPT4nODk0NCcsICdVdGlsZGUnPT4nMzYwJywgJ3V0aWxkZSc9PiczNjEnLCAndXRyaSc9Pic5NjUzJywgJ3V0cmlmJz0+Jzk2NTInLCAndXVhcnInPT4nODY0OCcsICd1d2FuZ2xlJz0+JzEwNjYzJywgJ3ZhbmdydCc9PicxMDY1MicsICd2YXJlcHNpbG9uJz0+JzEwMTMnLCAndmFya2FwcGEnPT4nMTAwOCcsICd2YXJub3RoaW5nJz0+Jzg3MDknLCAndmFycGhpJz0+Jzk4MScsICd2YXJwaSc9Pic5ODInLCAndmFycHJvcHRvJz0+Jzg3MzMnLCAndmFycic9Pic4NTk3JywgJ3ZBcnInPT4nODY2MScsICd2YXJyaG8nPT4nMTAwOScsICd2YXJzaWdtYSc9Pic5NjInLCAndmFydGhldGEnPT4nOTc3JywgJ3ZhcnRyaWFuZ2xlbGVmdCc9Pic4ODgyJywgJ3ZhcnRyaWFuZ2xlcmlnaHQnPT4nODg4MycsICd2QmFyJz0+JzEwOTg0JywgJ1ZiYXInPT4nMTA5ODcnLCAndkJhcnYnPT4nMTA5ODUnLCAnVmN5Jz0+JzEwNDInLCAndmN5Jz0+JzEwNzQnLCAndmRhc2gnPT4nODg2NicsICd2RGFzaCc9Pic4ODcyJywgJ1ZkYXNoJz0+Jzg4NzMnLCAnVkRhc2gnPT4nODg3NScsICdWZGFzaGwnPT4nMTA5ODInLCAndmVlJz0+Jzg3NDQnLCAnVmVlJz0+Jzg4OTcnLCAndmVlYmFyJz0+Jzg4OTEnLCAndmVlZXEnPT4nODc5NCcsICd2ZWxsaXAnPT4nODk0MicsICd2ZXJiYXInPT4nMTI0JywgJ1ZlcmJhcic9Pic4MjE0JywgJ3ZlcnQnPT4nMTI0JywgJ1ZlcnQnPT4nODIxNCcsICdWZXJ0aWNhbEJhcic9Pic4NzM5JywgJ1ZlcnRpY2FsTGluZSc9PicxMjQnLCAnVmVydGljYWxTZXBhcmF0b3InPT4nMTAwNzInLCAnVmVydGljYWxUaWxkZSc9Pic4NzY4JywgJ1ZlcnlUaGluU3BhY2UnPT4nODIwMicsICdWZnInPT4nMTIwMDg5JywgJ3Zmcic9PicxMjAxMTUnLCAndmx0cmknPT4nODg4MicsICdWb3BmJz0+JzEyMDE0MScsICd2b3BmJz0+JzEyMDE2NycsICd2cHJvcCc9Pic4NzMzJywgJ3ZydHJpJz0+Jzg4ODMnLCAnVnNjcic9PicxMTk5ODUnLCAndnNjcic9PicxMjAwMTEnLCAnVnZkYXNoJz0+Jzg4NzQnLCAndnppZ3phZyc9PicxMDY1MCcsICdXY2lyYyc9PiczNzInLCAnd2NpcmMnPT4nMzczJywgJ3dlZGJhcic9PicxMDg0NycsICd3ZWRnZSc9Pic4NzQzJywgJ1dlZGdlJz0+Jzg4OTYnLCAnd2VkZ2VxJz0+Jzg3OTMnLCAnV2ZyJz0+JzEyMDA5MCcsICd3ZnInPT4nMTIwMTE2JywgJ1dvcGYnPT4nMTIwMTQyJywgJ3dvcGYnPT4nMTIwMTY4JywgJ3dwJz0+Jzg0NzInLCAnd3InPT4nODc2OCcsICd3cmVhdGgnPT4nODc2OCcsICdXc2NyJz0+JzExOTk4NicsICd3c2NyJz0+JzEyMDAxMicsICd4Y2FwJz0+Jzg4OTgnLCAneGNpcmMnPT4nOTcxMScsICd4Y3VwJz0+Jzg4OTknLCAneGR0cmknPT4nOTY2MScsICdYZnInPT4nMTIwMDkxJywgJ3hmcic9PicxMjAxMTcnLCAneGhhcnInPT4nMTAyMzEnLCAneGhBcnInPT4nMTAyMzQnLCAneGxhcnInPT4nMTAyMjknLCAneGxBcnInPT4nMTAyMzInLCAneG1hcCc9PicxMDIzNicsICd4bmlzJz0+Jzg5NTUnLCAneG9kb3QnPT4nMTA3NTInLCAnWG9wZic9PicxMjAxNDMnLCAneG9wZic9PicxMjAxNjknLCAneG9wbHVzJz0+JzEwNzUzJywgJ3hvdGltZSc9PicxMDc1NCcsICd4cmFycic9PicxMDIzMCcsICd4ckFycic9PicxMDIzMycsICdYc2NyJz0+JzExOTk4NycsICd4c2NyJz0+JzEyMDAxMycsICd4c3FjdXAnPT4nMTA3NTgnLCAneHVwbHVzJz0+JzEwNzU2JywgJ3h1dHJpJz0+Jzk2NTEnLCAneHZlZSc9Pic4ODk3JywgJ3h3ZWRnZSc9Pic4ODk2JywgJ1lBY3knPT4nMTA3MScsICd5YWN5Jz0+JzExMDMnLCAnWWNpcmMnPT4nMzc0JywgJ3ljaXJjJz0+JzM3NScsICdZY3knPT4nMTA2NycsICd5Y3knPT4nMTA5OScsICdZZnInPT4nMTIwMDkyJywgJ3lmcic9PicxMjAxMTgnLCAnWUljeSc9PicxMDMxJywgJ3lpY3knPT4nMTExMScsICdZb3BmJz0+JzEyMDE0NCcsICd5b3BmJz0+JzEyMDE3MCcsICdZc2NyJz0+JzExOTk4OCcsICd5c2NyJz0+JzEyMDAxNCcsICdZVWN5Jz0+JzEwNzAnLCAneXVjeSc9PicxMTAyJywgJ1phY3V0ZSc9PiczNzcnLCAnemFjdXRlJz0+JzM3OCcsICdaY2Fyb24nPT4nMzgxJywgJ3pjYXJvbic9PiczODInLCAnWmN5Jz0+JzEwNDcnLCAnemN5Jz0+JzEwNzknLCAnWmRvdCc9PiczNzknLCAnemRvdCc9PiczODAnLCAnemVldHJmJz0+Jzg0ODgnLCAnWmVyb1dpZHRoU3BhY2UnPT4nODIwMycsICd6ZnInPT4nMTIwMTE5JywgJ1pmcic9Pic4NDg4JywgJ1pIY3knPT4nMTA0NicsICd6aGN5Jz0+JzEwNzgnLCAnemlncmFycic9Pic4NjY5JywgJ3pvcGYnPT4nMTIwMTcxJywgJ1pvcGYnPT4nODQ4NCcsICdac2NyJz0+JzExOTk4OScsICd6c2NyJz0+JzEyMDAxNScpOwogIGlmICgkdFswXSAhPSAnIycpIHsKICAgIHJldHVybgogICAgICAoJENbJ2FuZF9tYXJrJ10gPyAiXHgwNiIgOiAnJicpCiAgICAgIC4gKGlzc2V0KCRyZXNlcnZlZEVudEFyWyR0XSkKICAgICAgICA/ICR0CiAgICAgICAgOiAoaXNzZXQoJGNvbW1vbkVudE5hbWVBclskdF0pCiAgICAgICAgICA/ICghJENbJ25hbWVkX2VudGl0eSddCiAgICAgICAgICAgID8gJyMnLiAoJENbJ2hleGRlY19lbnRpdHknXSA+IDEKICAgICAgICAgICAgICA/ICd4Jy4gZGVjaGV4KCRjb21tb25FbnROYW1lQXJbJHRdKQogICAgICAgICAgICAgIDogJGNvbW1vbkVudE5hbWVBclskdF0pCiAgICAgICAgICAgIDogJHQpCiAgICAgICAgICA6IChpc3NldCgkcmFyZUVudE5hbWVBclskdF0pCiAgICAgICAgICAgID8gKCEkQ1snbmFtZWRfZW50aXR5J10KICAgICAgICAgICAgICA/ICcjJy4gKCRDWydoZXhkZWNfZW50aXR5J10gPiAxCiAgICAgICAgICAgICAgICA/ICd4Jy4gZGVjaGV4KCRyYXJlRW50TmFtZUFyWyR0XSkKICAgICAgICAgICAgICAgIDogJHJhcmVFbnROYW1lQXJbJHRdKQogICAgICAgICAgICAgIDogJHQpCiAgICAgICAgICAgIDogJ2FtcDsnLiAkdCkpKQogICAgICAuICc7JzsKICB9CiAgaWYgKAogICAgKCRuID0gY3R5cGVfZGlnaXQoJHQgPSBzdWJzdHIoJHQsIDEpKSA/IGludHZhbCgkdCkgOiBoZXhkZWMoc3Vic3RyKCR0LCAxKSkpIDwgOQogICAgfHwgKCRuID4gMTMgJiYgJG4gPCAzMikKICAgIHx8ICRuID09IDExCiAgICB8fCAkbiA9PSAxMgogICAgfHwgKCRuID4gMTI2ICYmICRuIDwgMTYwICYmICRuICE9IDEzMykKICAgIHx8ICgkbiA+IDU1Mjk1CiAgICAgICAgJiYgKCRuIDwgNTczNDQKICAgICAgICAgICAgfHwgKCRuID4gNjQ5NzUgJiYgJG4gPCA2NDk5MikKICAgICAgICAgICAgfHwgJG4gPT0gNjU1MzQKICAgICAgICAgICAgfHwgJG4gPT0gNjU1MzUKICAgICAgICAgICAgfHwgJG4gPiAxMTE0MTExKSkKICApIHsKICAgIHJldHVybiAoJENbJ2FuZF9tYXJrJ10gPyAiXHgwNiIgOiAnJicpLiAiYW1wOyN7JHR9OyI7CiAgfQogIHJldHVybgogICAgKCRDWydhbmRfbWFyayddID8gIlx4MDYiIDogJyYnKQogICAgLiAnIycKICAgIC4gKCgoY3R5cGVfZGlnaXQoJHQpICYmICRDWydoZXhkZWNfZW50aXR5J10gPCAyKQogICAgICAgIHx8ICEkQ1snaGV4ZGVjX2VudGl0eSddKQogICAgICA/ICRuCiAgICAgIDogJ3gnLiBkZWNoZXgoJG4pKQogICAgLiAnOyc7Cn0KCi8qKgogKiBDaGVjayByZWdleCBwYXR0ZXJuIGZvciBQSFAgZXJyb3IuCiAqCiAqIEBwYXJhbSAgc3RyaW5nICR0IFBhdHRlcm4gaW5jbHVkaW5nIGxpbWl0ZXJzL21vZGlmaWVycy4KICogQHJldHVybiBpbnQgICAgICAgMCBvciAxIGlmIHBhdHRlcm4gaXMgaW52YWxpZCBvciB2YWxpZCwgcmVzcGVjdGl2ZWx5LgogKi8KZnVuY3Rpb24gaGxfcmVnZXgoJHQpCnsKICBpZiAoZW1wdHkoJHQpIHx8ICFpc19zdHJpbmcoJHQpKSB7CiAgICByZXR1cm4gMDsKICB9CiAgaWYgKCRmdW5jc0V4aXN0ID0gZnVuY3Rpb25fZXhpc3RzKCdlcnJvcl9jbGVhcl9sYXN0JykgJiYgZnVuY3Rpb25fZXhpc3RzKCdlcnJvcl9nZXRfbGFzdCcpKSB7CiAgICBlcnJvcl9jbGVhcl9sYXN0KCk7CiAgfSBlbHNlIHsKICAgIGlmICgkdmFsVHJhY2tFcnIgPSBpbmlfZ2V0KCd0cmFja19lcnJvcnMnKSkgewogICAgICAkdmFsTXNnRXJyID0gaXNzZXQoJHBocF9lcnJvcm1zZykgPyAkcGhwX2Vycm9ybXNnIDogbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIGluaV9zZXQoJ3RyYWNrX2Vycm9ycycsICcxJyk7CiAgICB9CiAgICB1bnNldCgkcGhwX2Vycm9ybXNnKTsKICB9CiAgaWYgKCgkdmFsU2hvd0VyciA9IGluaV9nZXQoJ2Rpc3BsYXlfZXJyb3JzJykpKSB7CiAgICBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsICcwJyk7CiAgfQogIHByZWdfbWF0Y2goJHQsICcnKTsKICBpZiAoJGZ1bmNzRXhpc3QpIHsKICAgICRvdXQgPSBlcnJvcl9nZXRfbGFzdCgpID09IG51bGwgPyAxIDogMDsKICB9IGVsc2UgewogICAgJG91dCA9IGlzc2V0KCRwaHBfZXJyb3Jtc2cpID8gMCA6IDE7CiAgICBpZiAoJHZhbFRyYWNrRXJyKSB7CiAgICAgICRwaHBfZXJyb3Jtc2cgPSBpc3NldCgkdmFsTXNnRXJyKSA/ICR2YWxNc2dFcnIgOiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgaW5pX3NldCgndHJhY2tfZXJyb3JzJywgJzAnKTsKICAgIH0KICB9CiAgaWYgKCR2YWxTaG93RXJyKSB7CiAgICBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsICcxJyk7CiAgfQogIHJldHVybiAkb3V0Owp9CgovKioKICogUGFyc2UgJHNwZWMgaHRtTGF3ZWQgYXJndW1lbnQgYXMgYXJyYXkuCiAqCiAqIEBwYXJhbSAgc3RyaW5nICR0IFZhbHVlIG9mICRzcGVjLgogKiBAcmV0dXJuIGFycmF5ICAgICBNdWx0aWRpbWVuc2lvbmFsIGFycmF5IG9mIGZvcm06IHRhZyAtPiBhdHRyaWJ1dGUgLT4gcnVsZS4KICovCmZ1bmN0aW9uIGhsX3NwZWMoJHQpCnsKICAkb3V0ICA9IGFycmF5KCk7CiAgCiAgLy8gSGlkZSBzcGVjaWFsIGNoYXJhY3RlcnMgdXNlZCBmb3IgcnVsZXMuCiAgCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2hsX2F1eDEnKSkgewogICAgZnVuY3Rpb24gaGxfYXV4MSgkeCkgewogICAgICByZXR1cm4KICAgICAgICBzdWJzdHIoCiAgICAgICAgICBzdHJfcmVwbGFjZSgKICAgICAgICAgICAgYXJyYXkoIjsiLCAifCIsICJ+IiwgIiAiLCAiLCIsICIvIiwgIigiLCAiKSIsICdgIicpLAogICAgICAgICAgICBhcnJheSgiXHgwMSIsICJceDAyIiwgIlx4MDMiLCAiXHgwNCIsICJceDA1IiwgIlx4MDYiLCAiXHgwNyIsICJceDA4IiwgJyInKSwKICAgICAgICAgICAgJHhbMF0pLAogICAgICAgICAgMSwgLTEpOwogICAgfQogIH0KICAkdCA9CiAgICBzdHJfcmVwbGFjZSgKICAgICAgYXJyYXkoIlx0IiwgIlxyIiwgIlxuIiwgJyAnKSwKICAgICAgJycsCiAgICAgIHByZWdfcmVwbGFjZV9jYWxsYmFjaygnLyIoPz4oYC58W14iXSkqKSIvc20nLCAnaGxfYXV4MScsIHRyaW0oJHQpKSk7CiAgCiAgLy8gVGFnLCBhdHRyaWJ1dGUsIGFuZCBydWxlIHNlcGFyYXRvcnM6IHNlbWktY29sb24sIGNvbW1hLCBhbmQgc2xhc2ggcmVzcGVjdGl2ZWx5LgogIAogIGZvciAoJGkgPSBjb3VudCgoJHQgPSBleHBsb2RlKCc7JywgJHQpKSk7IC0tJGk+PTA7KSB7CiAgICAkZWxlID0gJHRbJGldOwogICAgaWYgKAogICAgICBlbXB0eSgkZWxlKQogICAgICB8fCAoJHRhZ1BvcyA9IHN0cnBvcygkZWxlLCAnPScpKSA9PT0gZmFsc2UKICAgICAgfHwgIXN0cmxlbigoJHRhZ1NwZWMgPSBzdWJzdHIoJGVsZSwgJHRhZ1BvcyArIDEpKSkKICAgICkgewogICAgICBjb250aW51ZTsKICAgIH0KICAgICRydWxlQXIgPSAkZGVueUF0dHJBciA9IGFycmF5KCk7CiAgICBmb3JlYWNoIChleHBsb2RlKCcsJywgJHRhZ1NwZWMpIGFzICR2KSB7CiAgICAgIGlmICghcHJlZ19tYXRjaCgnYF4oLT9kYXRhLVteOj1dK3xbYS16OlwtXCpdKykoPzpcKCguKj8pXCkpP2BpJywgJHYsICRtKQogICAgICAgICAgfHwgcHJlZ19tYXRjaCgnYF4tP2RhdGEteG1sYGknLCAkbVsxXSkpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoKCRhdHRyID0gc3RydG9sb3dlcigkbVsxXSkpID09ICctKicpIHsKICAgICAgICAkZGVueUF0dHJBclsnKiddID0gMTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoJGF0dHJbMF0gPT0gJy0nKSB7CiAgICAgICAgJGRlbnlBdHRyQXJbc3Vic3RyKCRhdHRyLCAxKV0gPSAxOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmICghaXNzZXQoJG1bMl0pKSB7CiAgICAgICAgJHJ1bGVBclskYXR0cl0gPSAxOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGZvcmVhY2ggKGV4cGxvZGUoJy8nLCAkbVsyXSkgYXMgJG0pIHsKICAgICAgICBpZiAoZW1wdHkoJG0pCiAgICAgICAgICAgIHx8ICgkcnVsZVBvcyA9IHN0cnBvcygkbSwgJz0nKSkgPT09IDAKICAgICAgICAgICAgfHwgJHJ1bGVQb3MgPCA1IC8vIFNob3J0ZXN0IHJ1bGU6IG9uZW9mCiAgICAgICAgKSB7CiAgICAgICAgICAkcnVsZUFyWyRhdHRyXSA9IDE7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgJHJ1bGUgPSBzdHJ0b2xvd2VyKHN1YnN0cigkbSwgMCwgJHJ1bGVQb3MpKTsKICAgICAgICAkcnVsZUFyWyRhdHRyXVskcnVsZV0gPQogICAgICAgICAgc3RyX3JlcGxhY2UoCiAgICAgICAgICAgIGFycmF5KCJceDAxIiwgIlx4MDIiLCAiXHgwMyIsICJceDA0IiwgIlx4MDUiLCAiXHgwNiIsICJceDA3IiwgIlx4MDgiKSwKICAgICAgICAgICAgYXJyYXkoIjsiLCAifCIsICJ+IiwgIiAiLCAiLCIsICIvIiwgIigiLCAiKSIpLAogICAgICAgICAgICBzdWJzdHIoJG0sICRydWxlUG9zICsgMSkpOwogICAgICB9CiAgICAgIGlmIChpc3NldCgkcnVsZUFyWyRhdHRyXVsnbWF0Y2gnXSkgJiYgIWhsX3JlZ2V4KCRydWxlQXJbJGF0dHJdWydtYXRjaCddKSkgewogICAgICAgIHVuc2V0KCRydWxlQXJbJGF0dHJdWydtYXRjaCddKTsKICAgICAgfQogICAgICBpZiAoaXNzZXQoJHJ1bGVBclskYXR0cl1bJ25vbWF0Y2gnXSkgJiYgIWhsX3JlZ2V4KCRydWxlQXJbJGF0dHJdWydub21hdGNoJ10pKSB7CiAgICAgICAgdW5zZXQoJHJ1bGVBclskYXR0cl1bJ25vbWF0Y2gnXSk7CiAgICAgIH0KICAgIH0KICAgIAogICAgaWYgKCFjb3VudCgkcnVsZUFyKSAmJiAhY291bnQoJGRlbnlBdHRyQXIpKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgZm9yZWFjaCAoZXhwbG9kZSgnLCcsIHN1YnN0cigkZWxlLCAwLCAkdGFnUG9zKSkgYXMgJHRhZykgewogICAgICBpZiAoIXN0cmxlbigoJHRhZyA9IHN0cnRvbG93ZXIoJHRhZykpKSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChjb3VudCgkcnVsZUFyKSkgewogICAgICAgICRvdXRbJHRhZ10gPSAhaXNzZXQoJG91dFskdGFnXSkgPyAkcnVsZUFyIDogYXJyYXlfbWVyZ2UoJG91dFskdGFnXSwgJHJ1bGVBcik7CiAgICAgIH0KICAgICAgaWYgKGNvdW50KCRkZW55QXR0ckFyKSkgewogICAgICAgICRvdXRbJHRhZ11bJ2RlbnknXSA9ICFpc3NldCgkb3V0WyR0YWddWydkZW55J10pID8gJGRlbnlBdHRyQXIgOiBhcnJheV9tZXJnZSgkb3V0WyR0YWddWydkZW55J10sICRkZW55QXR0ckFyKTsKICAgICAgfQogICAgfQogIH0KICAKICByZXR1cm4gJG91dDsKfQoKLyoqCiAqIEhhbmRsZSB0YWcgdGV4dCB3aXRoIDwvPiBsaW1pdGVycywgYW5kIGF0dHJpYnV0ZXMgaW4gb3BlbmluZyB0YWdzLgogKgogKiBAcGFyYW0gIGFycmF5ICAgJHQgQXJyYXkgZnJvbSBwcmVnX3JlcGxhY2UgY2FsbC4KICogQHJldHVybiBzdHJpbmcgICAgIFRhZyB3aXRoIGFueSBhdHRyaWJ1dGUsCiAqICAgICAgICAgICAgICAgICAgICBvciB0ZXh0IHdpdGggPC8+IG5ldXRyYWxpemVkIGludG8gZW50aXRpZXMsIG9yIGVtcHR5LgogKi8KZnVuY3Rpb24gaGxfdGFnKCR0KQp7CiAgJHQgPSAkdFswXTsKICBnbG9iYWwgJEM7CiAgCiAgLy8gQ2hlY2sgaWYgPC8+IGNoYXJhY3RlciBub3QgaW4gdGFnLgogIAogIGlmICgkdCA9PSAnPCAnKSB7CiAgICByZXR1cm4gJyZsdDsgJzsKICB9CiAgaWYgKCR0ID09ICc+JykgewogICAgcmV0dXJuICcmZ3Q7JzsKICB9CiAgaWYgKCFwcmVnX21hdGNoKCdgXjwoLz8pKFthLXpBLVpdW15ccz5dKikoW14+XSo/KVxzPz4kYG0nLCAkdCwgJG0pKSB7IC8vIEdldCB0YWcgd2l0aCBlbGVtZW50IG5hbWUgYW5kIGF0dHJpYnV0ZXMKICAgIHJldHVybiBzdHJfcmVwbGFjZShhcnJheSgnPCcsICc+JyksIGFycmF5KCcmbHQ7JywgJyZndDsnKSwgJHQpOwogIH0KICAKICAvLyBDaGVjayBpZiBlbGVtZW50IG5vdCBwZXJtaXR0ZWQuIEN1c3RvbSBlbGVtZW50IG5hbWVzIGhhdmUgY2VydGFpbiByZXF1aXJlbWVudHMuCiAgCiAgJGVsZSA9IHJ0cmltKHN0cnRvbG93ZXIoJG1bMl0pLCAnLycpOwogIHN0YXRpYyAkaW52YWxpZEN1c3RvbUVsZUFyID0gYXJyYXkoJ2Fubm90YXRpb24teG1sJz0+MSwgJ2NvbG9yLXByb2ZpbGUnPT4xLCAnZm9udC1mYWNlJz0+MSwgJ2ZvbnQtZmFjZS1zcmMnPT4xLCAnZm9udC1mYWNlLXVyaSc9PjEsICdmb250LWZhY2UtZm9ybWF0Jz0+MSwgJ2ZvbnQtZmFjZS1uYW1lJz0+MSwgJ21pc3NpbmctZ2x5cGgnPT4xKTsKICBpZiAoCiAgICAoIXN0cnBvcygkZWxlLCAnLScpCiAgICAgJiYgIWlzc2V0KCRDWydlbGVtZW50cyddWyRlbGVdKSkgLy8gTm90IGN1c3RvbSBlbGVtZW50CiAgICB8fCAoc3RycG9zKCRlbGUsICctJykKICAgICAgICAmJiAoaXNzZXQoJENbJ2VsZW1lbnRzJ11bJy0nIC4gJGVsZV0pCiAgICAgICAgICAgIHx8ICghJENbJ2FueV9jdXN0b21fZWxlbWVudCddCiAgICAgICAgICAgICAgICAmJiAhaXNzZXQoJENbJ2VsZW1lbnRzJ11bJGVsZV0pKQogICAgICAgICAgICB8fCBpc3NldCgkaW52YWxpZEN1c3RvbUVsZUFyWyRlbGVdKQogICAgICAgICAgICB8fCBwcmVnX21hdGNoKAogICAgICAgICAgICAgICAgJ2BbXi0uXzAtOWEtelx4YjdceGMwLVx4ZDZceGQ4LVx4ZjZceGY4LVx4ezJmZn0nCiAgICAgICAgICAgICAgICAuICdceHszNzB9LVx4ezM3ZH1ceHszN2Z9LVx4ezFmZmZ9XHh7MjAwY30tXHh7MjAwZH1ceHsyMDcwfS1ceHsyMThmfScKICAgICAgICAgICAgICAgIC4gJ1x4ezJjMDB9LVx4ezJmZWZ9XHh7MzAwMX0tXHh7ZDdmZn1ceHtmOTAwfS1ceHtmZGNmfVx4e2ZkZjB9LVx4e2ZmZmR9XHh7MTAwMDB9LVx4e2VmZmZmfV1gdScKICAgICAgICAgICAgICAsICRlbGUpKSkKICApIHsKICAgIHJldHVybiAoKCRDWydrZWVwX2JhZCddJTIpID8gc3RyX3JlcGxhY2UoYXJyYXkoJzwnLCAnPicpLCBhcnJheSgnJmx0OycsICcmZ3Q7JyksICR0KSA6ICcnKTsKICB9CiAgCiAgLy8gQXR0cmlidXRlIHN0cmluZy4KICAKICAkYXR0clN0ciA9IHN0cl9yZXBsYWNlKGFycmF5KCJcbiIsICJcciIsICJcdCIpLCAnICcsIHRyaW0oJG1bM10pKTsKICAKICAvLyBUcmFuc2Zvcm0gZGVwcmVjYXRlZCBlbGVtZW50LgogIAogIHN0YXRpYyAkZGVwcmVjYXRlZEVsZUFyID0gYXJyYXkoJ2Fjcm9ueW0nPT4xLCAnYXBwbGV0Jz0+MSwgJ2JpZyc9PjEsICdjZW50ZXInPT4xLCAnZGlyJz0+MSwgJ2ZvbnQnPT4xLCAnaXNpbmRleCc9PjEsICdzJz0+MSwgJ3N0cmlrZSc9PjEsICd0dCc9PjEpOwogIGlmICgkQ1snbWFrZV90YWdfc3RyaWN0J10gJiYgaXNzZXQoJGRlcHJlY2F0ZWRFbGVBclskZWxlXSkpIHsKICAgICRlbGVUcmFuc2Zvcm1lZCA9IGhsX2RlcHJlY2F0ZWRFbGVtZW50KCRlbGUsICRhdHRyU3RyLCAkQ1snbWFrZV90YWdfc3RyaWN0J10pOyAvLyBobF9kZXByZWNhdGVkRWxlbWVudCB1c2VzIHJlZmVyZW5jaW5nCiAgICBpZiAoISRlbGUpIHsKICAgICAgcmV0dXJuICgoJENbJ2tlZXBfYmFkJ10gJSAyKSA/IHN0cl9yZXBsYWNlKGFycmF5KCc8JywgJz4nKSwgYXJyYXkoJyZsdDsnLCAnJmd0OycpLCAkdCkgOiAnJyk7CiAgICB9CiAgfQogIAogIC8vIEhhbmRsZSBjbG9zaW5nIHRhZy4KICAKICBzdGF0aWMgJGVtcHR5RWxlQXIgPSBhcnJheSgnYXJlYSc9PjEsICdicic9PjEsICdjb2wnPT4xLCAnY29tbWFuZCc9PjEsICdlbWJlZCc9PjEsICdocic9PjEsICdpbWcnPT4xLCAnaW5wdXQnPT4xLCAnaXNpbmRleCc9PjEsICdrZXlnZW4nPT4xLCAnbGluayc9PjEsICdtZXRhJz0+MSwgJ3BhcmFtJz0+MSwgJ3NvdXJjZSc9PjEsICd0cmFjayc9PjEsICd3YnInPT4xKTsKICBpZiAoIWVtcHR5KCRtWzFdKSkgewogICAgcmV0dXJuKAogICAgIWlzc2V0KCRlbXB0eUVsZUFyWyRlbGVdKQogICAgICA/IChlbXB0eSgkQ1snaG9va190YWcnXSkKICAgICAgPyAiPC8kZWxlPiIKICAgICAgOiBjYWxsX3VzZXJfZnVuYygkQ1snaG9va190YWcnXSwgJGVsZSwgMCkpCiAgICAgIDogKCRDWydrZWVwX2JhZCddICUgMgogICAgICA/IHN0cl9yZXBsYWNlKGFycmF5KCc8JywgJz4nKSwgYXJyYXkoJyZsdDsnLCAnJmd0OycpLCAkdCkKICAgICAgOiAnJykpOwogIH0KICAKICAvLyBIYW5kbGUgb3BlbmluZyB0YWcuCiAgCiAgLy8gLS0gU2V0cyBvZiBwb3NzaWJsZSBhdHRyaWJ1dGVzLgogIAogIC8vIC4uIEVsZW1lbnQtc3BlY2lmaWMgbm9uLWdsb2JhbC4KICAKICBzdGF0aWMgJGF0dHJFbGVBciA9IGFycmF5KCdhYmJyJz0+YXJyYXkoJ3RkJz0+MSwgJ3RoJz0+MSksICdhY2NlcHQnPT5hcnJheSgnZm9ybSc9PjEsICdpbnB1dCc9PjEpLCAnYWNjZXB0LWNoYXJzZXQnPT5hcnJheSgnZm9ybSc9PjEpLCAnYWN0aW9uJz0+YXJyYXkoJ2Zvcm0nPT4xKSwgJ2FsaWduJz0+YXJyYXkoJ2FwcGxldCc9PjEsICdjYXB0aW9uJz0+MSwgJ2NvbCc9PjEsICdjb2xncm91cCc9PjEsICdkaXYnPT4xLCAnZW1iZWQnPT4xLCAnaDEnPT4xLCAnaDInPT4xLCAnaDMnPT4xLCAnaDQnPT4xLCAnaDUnPT4xLCAnaDYnPT4xLCAnaHInPT4xLCAnaWZyYW1lJz0+MSwgJ2ltZyc9PjEsICdpbnB1dCc9PjEsICdsZWdlbmQnPT4xLCAnb2JqZWN0Jz0+MSwgJ3AnPT4xLCAndGFibGUnPT4xLCAndGJvZHknPT4xLCAndGQnPT4xLCAndGZvb3QnPT4xLCAndGgnPT4xLCAndGhlYWQnPT4xLCAndHInPT4xKSwgJ2FsbG93ZnVsbHNjcmVlbic9PmFycmF5KCdpZnJhbWUnPT4xKSwgJ2FsdCc9PmFycmF5KCdhcHBsZXQnPT4xLCAnYXJlYSc9PjEsICdpbWcnPT4xLCAnaW5wdXQnPT4xKSwgJ2FyY2hpdmUnPT5hcnJheSgnYXBwbGV0Jz0+MSwgJ29iamVjdCc9PjEpLCAnYXN5bmMnPT5hcnJheSgnc2NyaXB0Jz0+MSksICdhdXRvY29tcGxldGUnPT5hcnJheSgnZm9ybSc9PjEsICdpbnB1dCc9PjEpLCAnYXV0b2ZvY3VzJz0+YXJyYXkoJ2J1dHRvbic9PjEsICdpbnB1dCc9PjEsICdrZXlnZW4nPT4xLCAnc2VsZWN0Jz0+MSwgJ3RleHRhcmVhJz0+MSksICdhdXRvcGxheSc9PmFycmF5KCdhdWRpbyc9PjEsICd2aWRlbyc9PjEpLCAnYXhpcyc9PmFycmF5KCd0ZCc9PjEsICd0aCc9PjEpLCAnYmdjb2xvcic9PmFycmF5KCdlbWJlZCc9PjEsICd0YWJsZSc9PjEsICd0Ym9keSc9PjEsICd0ZCc9PjEsICd0Zm9vdCc9PjEsICd0aCc9PjEsICd0aGVhZCc9PjEsICd0cic9PjEpLCAnYm9yZGVyJz0+YXJyYXkoJ2ltZyc9PjEsICdvYmplY3QnPT4xLCAndGFibGUnPT4xKSwgJ2JvcmRlcmNvbG9yJz0+YXJyYXkoJ3RhYmxlJz0+MSwgJ3RkJz0+MSwgJ3RyJz0+MSksICdjZWxscGFkZGluZyc9PmFycmF5KCd0YWJsZSc9PjEpLCAnY2VsbHNwYWNpbmcnPT5hcnJheSgndGFibGUnPT4xKSwgJ2NoYWxsZW5nZSc9PmFycmF5KCdrZXlnZW4nPT4xKSwgJ2NoYXInPT5hcnJheSgnY29sJz0+MSwgJ2NvbGdyb3VwJz0+MSwgJ3Rib2R5Jz0+MSwgJ3RkJz0+MSwgJ3Rmb290Jz0+MSwgJ3RoJz0+MSwgJ3RoZWFkJz0+MSwgJ3RyJz0+MSksICdjaGFyb2ZmJz0+YXJyYXkoJ2NvbCc9PjEsICdjb2xncm91cCc9PjEsICd0Ym9keSc9PjEsICd0ZCc9PjEsICd0Zm9vdCc9PjEsICd0aCc9PjEsICd0aGVhZCc9PjEsICd0cic9PjEpLCAnY2hhcnNldCc9PmFycmF5KCdhJz0+MSwgJ3NjcmlwdCc9PjEpLCAnY2hlY2tlZCc9PmFycmF5KCdjb21tYW5kJz0+MSwgJ2lucHV0Jz0+MSksICdjaXRlJz0+YXJyYXkoJ2Jsb2NrcXVvdGUnPT4xLCAnZGVsJz0+MSwgJ2lucyc9PjEsICdxJz0+MSksICdjbGFzc2lkJz0+YXJyYXkoJ29iamVjdCc9PjEpLCAnY2xlYXInPT5hcnJheSgnYnInPT4xKSwgJ2NvZGUnPT5hcnJheSgnYXBwbGV0Jz0+MSksICdjb2RlYmFzZSc9PmFycmF5KCdhcHBsZXQnPT4xLCAnb2JqZWN0Jz0+MSksICdjb2RldHlwZSc9PmFycmF5KCdvYmplY3QnPT4xKSwgJ2NvbG9yJz0+YXJyYXkoJ2ZvbnQnPT4xKSwgJ2NvbHMnPT5hcnJheSgndGV4dGFyZWEnPT4xKSwgJ2NvbHNwYW4nPT5hcnJheSgndGQnPT4xLCAndGgnPT4xKSwgJ2NvbXBhY3QnPT5hcnJheSgnZGlyJz0+MSwgJ2RsJz0+MSwgJ21lbnUnPT4xLCAnb2wnPT4xLCAndWwnPT4xKSwgJ2NvbnRlbnQnPT5hcnJheSgnbWV0YSc9PjEpLCAnY29udHJvbHMnPT5hcnJheSgnYXVkaW8nPT4xLCAndmlkZW8nPT4xKSwgJ2Nvb3Jkcyc9PmFycmF5KCdhJz0+MSwgJ2FyZWEnPT4xKSwgJ2Nyb3Nzb3JpZ2luJz0+YXJyYXkoJ2ltZyc9PjEpLCAnZGF0YSc9PmFycmF5KCdvYmplY3QnPT4xKSwgJ2RhdGV0aW1lJz0+YXJyYXkoJ2RlbCc9PjEsICdpbnMnPT4xLCAndGltZSc9PjEpLCAnZGVjbGFyZSc9PmFycmF5KCdvYmplY3QnPT4xKSwgJ2RlZmF1bHQnPT5hcnJheSgndHJhY2snPT4xKSwgJ2RlZmVyJz0+YXJyYXkoJ3NjcmlwdCc9PjEpLCAnZGlybmFtZSc9PmFycmF5KCdpbnB1dCc9PjEsICd0ZXh0YXJlYSc9PjEpLCAnZGlzYWJsZWQnPT5hcnJheSgnYnV0dG9uJz0+MSwgJ2NvbW1hbmQnPT4xLCAnZmllbGRzZXQnPT4xLCAnaW5wdXQnPT4xLCAna2V5Z2VuJz0+MSwgJ29wdGdyb3VwJz0+MSwgJ29wdGlvbic9PjEsICdzZWxlY3QnPT4xLCAndGV4dGFyZWEnPT4xKSwgJ2Rvd25sb2FkJz0+YXJyYXkoJ2EnPT4xKSwgJ2VuY3R5cGUnPT5hcnJheSgnZm9ybSc9PjEpLCAnZmFjZSc9PmFycmF5KCdmb250Jz0+MSksICdmbGFzaHZhcnMnPT5hcnJheSgnZW1iZWQnPT4xKSwgJ2Zvcic9PmFycmF5KCdsYWJlbCc9PjEsICdvdXRwdXQnPT4xKSwgJ2Zvcm0nPT5hcnJheSgnYnV0dG9uJz0+MSwgJ2ZpZWxkc2V0Jz0+MSwgJ2lucHV0Jz0+MSwgJ2tleWdlbic9PjEsICdsYWJlbCc9PjEsICdvYmplY3QnPT4xLCAnb3V0cHV0Jz0+MSwgJ3NlbGVjdCc9PjEsICd0ZXh0YXJlYSc9PjEpLCAnZm9ybWFjdGlvbic9PmFycmF5KCdidXR0b24nPT4xLCAnaW5wdXQnPT4xKSwgJ2Zvcm1lbmN0eXBlJz0+YXJyYXkoJ2J1dHRvbic9PjEsICdpbnB1dCc9PjEpLCAnZm9ybW1ldGhvZCc9PmFycmF5KCdidXR0b24nPT4xLCAnaW5wdXQnPT4xKSwgJ2Zvcm1ub3ZhbGlkYXRlJz0+YXJyYXkoJ2J1dHRvbic9PjEsICdpbnB1dCc9PjEpLCAnZm9ybXRhcmdldCc9PmFycmF5KCdidXR0b24nPT4xLCAnaW5wdXQnPT4xKSwgJ2ZyYW1lJz0+YXJyYXkoJ3RhYmxlJz0+MSksICdmcmFtZWJvcmRlcic9PmFycmF5KCdpZnJhbWUnPT4xKSwgJ2hlYWRlcnMnPT5hcnJheSgndGQnPT4xLCAndGgnPT4xKSwgJ2hlaWdodCc9PmFycmF5KCdhcHBsZXQnPT4xLCAnY2FudmFzJz0+MSwgJ2VtYmVkJz0+MSwgJ2lmcmFtZSc9PjEsICdpbWcnPT4xLCAnaW5wdXQnPT4xLCAnb2JqZWN0Jz0+MSwgJ3RkJz0+MSwgJ3RoJz0+MSwgJ3ZpZGVvJz0+MSksICdoaWdoJz0+YXJyYXkoJ21ldGVyJz0+MSksICdocmVmJz0+YXJyYXkoJ2EnPT4xLCAnYXJlYSc9PjEsICdsaW5rJz0+MSksICdocmVmbGFuZyc9PmFycmF5KCdhJz0+MSwgJ2FyZWEnPT4xLCAnbGluayc9PjEpLCAnaHNwYWNlJz0+YXJyYXkoJ2FwcGxldCc9PjEsICdlbWJlZCc9PjEsICdpbWcnPT4xLCAnb2JqZWN0Jz0+MSksICdpY29uJz0+YXJyYXkoJ2NvbW1hbmQnPT4xKSwgJ2lzbWFwJz0+YXJyYXkoJ2ltZyc9PjEsICdpbnB1dCc9PjEpLCAna2V5cGFyYW1zJz0+YXJyYXkoJ2tleWdlbic9PjEpLCAna2V5dHlwZSc9PmFycmF5KCdrZXlnZW4nPT4xKSwgJ2tpbmQnPT5hcnJheSgndHJhY2snPT4xKSwgJ2xhYmVsJz0+YXJyYXkoJ2NvbW1hbmQnPT4xLCAnbWVudSc9PjEsICdvcHRpb24nPT4xLCAnb3B0Z3JvdXAnPT4xLCAndHJhY2snPT4xKSwgJ2xhbmd1YWdlJz0+YXJyYXkoJ3NjcmlwdCc9PjEpLCAnbGlzdCc9PmFycmF5KCdpbnB1dCc9PjEpLCAnbG9uZ2Rlc2MnPT5hcnJheSgnaW1nJz0+MSwgJ2lmcmFtZSc9PjEpLCAnbG9vcCc9PmFycmF5KCdhdWRpbyc9PjEsICd2aWRlbyc9PjEpLCAnbG93Jz0+YXJyYXkoJ21ldGVyJz0+MSksICdtYXJnaW5oZWlnaHQnPT5hcnJheSgnaWZyYW1lJz0+MSksICdtYXJnaW53aWR0aCc9PmFycmF5KCdpZnJhbWUnPT4xKSwgJ21heCc9PmFycmF5KCdpbnB1dCc9PjEsICdtZXRlcic9PjEsICdwcm9ncmVzcyc9PjEpLCAnbWF4bGVuZ3RoJz0+YXJyYXkoJ2lucHV0Jz0+MSwgJ3RleHRhcmVhJz0+MSksICdtZWRpYSc9PmFycmF5KCdhJz0+MSwgJ2FyZWEnPT4xLCAnbGluayc9PjEsICdzb3VyY2UnPT4xLCAnc3R5bGUnPT4xKSwgJ21lZGlhZ3JvdXAnPT5hcnJheSgnYXVkaW8nPT4xLCAndmlkZW8nPT4xKSwgJ21ldGhvZCc9PmFycmF5KCdmb3JtJz0+MSksICdtaW4nPT5hcnJheSgnaW5wdXQnPT4xLCAnbWV0ZXInPT4xKSwgJ21vZGVsJz0+YXJyYXkoJ2VtYmVkJz0+MSksICdtdWx0aXBsZSc9PmFycmF5KCdpbnB1dCc9PjEsICdzZWxlY3QnPT4xKSwgJ211dGVkJz0+YXJyYXkoJ2F1ZGlvJz0+MSwgJ3ZpZGVvJz0+MSksICduYW1lJz0+YXJyYXkoJ2EnPT4xLCAnYXBwbGV0Jz0+MSwgJ2J1dHRvbic9PjEsICdlbWJlZCc9PjEsICdmaWVsZHNldCc9PjEsICdmb3JtJz0+MSwgJ2lmcmFtZSc9PjEsICdpbWcnPT4xLCAnaW5wdXQnPT4xLCAna2V5Z2VuJz0+MSwgJ21hcCc9PjEsICdvYmplY3QnPT4xLCAnb3V0cHV0Jz0+MSwgJ3BhcmFtJz0+MSwgJ3NlbGVjdCc9PjEsICdzbG90Jz0+MSwgJ3RleHRhcmVhJz0+MSksICdub2hyZWYnPT5hcnJheSgnYXJlYSc9PjEpLCAnbm9zaGFkZSc9PmFycmF5KCdocic9PjEpLCAnbm92YWxpZGF0ZSc9PmFycmF5KCdmb3JtJz0+MSksICdub3dyYXAnPT5hcnJheSgndGQnPT4xLCAndGgnPT4xKSwgJ29iamVjdCc9PmFycmF5KCdhcHBsZXQnPT4xKSwgJ29wZW4nPT5hcnJheSgnZGV0YWlscyc9PjEsICdkaWFsb2cnPT4xKSwgJ29wdGltdW0nPT5hcnJheSgnbWV0ZXInPT4xKSwgJ3BhdHRlcm4nPT5hcnJheSgnaW5wdXQnPT4xKSwgJ3BpbmcnPT5hcnJheSgnYSc9PjEsICdhcmVhJz0+MSksICdwbGFjZWhvbGRlcic9PmFycmF5KCdpbnB1dCc9PjEsICd0ZXh0YXJlYSc9PjEpLCAncGx1Z2luc3BhZ2UnPT5hcnJheSgnZW1iZWQnPT4xKSwgJ3BsdWdpbnVybCc9PmFycmF5KCdlbWJlZCc9PjEpLCAncG9zdGVyJz0+YXJyYXkoJ3ZpZGVvJz0+MSksICdwcWcnPT5hcnJheSgna2V5Z2VuJz0+MSksICdwcmVsb2FkJz0+YXJyYXkoJ2F1ZGlvJz0+MSwgJ3ZpZGVvJz0+MSksICdwcm9tcHQnPT5hcnJheSgnaXNpbmRleCc9PjEpLCAncHViZGF0ZSc9PmFycmF5KCd0aW1lJz0+MSksICdyYWRpb2dyb3VwJz0+YXJyYXkoJ2NvbW1hbmQnPT4xKSwgJ3JlYWRvbmx5Jz0+YXJyYXkoJ2lucHV0Jz0+MSwgJ3RleHRhcmVhJz0+MSksICdyZWwnPT5hcnJheSgnYSc9PjEsICdhcmVhJz0+MSwgJ2xpbmsnPT4xKSwgJ3JlcXVpcmVkJz0+YXJyYXkoJ2lucHV0Jz0+MSwgJ3NlbGVjdCc9PjEsICd0ZXh0YXJlYSc9PjEpLCAncmV2Jz0+YXJyYXkoJ2EnPT4xKSwgJ3JldmVyc2VkJz0+YXJyYXkoJ29sJz0+MSksICdyb3dzJz0+YXJyYXkoJ3RleHRhcmVhJz0+MSksICdyb3dzcGFuJz0+YXJyYXkoJ3RkJz0+MSwgJ3RoJz0+MSksICdydWxlcyc9PmFycmF5KCd0YWJsZSc9PjEpLCAnc2FuZGJveCc9PmFycmF5KCdpZnJhbWUnPT4xKSwgJ3Njb3BlJz0+YXJyYXkoJ3RkJz0+MSwgJ3RoJz0+MSksICdzY29wZWQnPT5hcnJheSgnc3R5bGUnPT4xKSwgJ3Njcm9sbGluZyc9PmFycmF5KCdpZnJhbWUnPT4xKSwgJ3NlYW1sZXNzJz0+YXJyYXkoJ2lmcmFtZSc9PjEpLCAnc2VsZWN0ZWQnPT5hcnJheSgnb3B0aW9uJz0+MSksICdzaGFwZSc9PmFycmF5KCdhJz0+MSwgJ2FyZWEnPT4xKSwgJ3NpemUnPT5hcnJheSgnZm9udCc9PjEsICdocic9PjEsICdpbnB1dCc9PjEsICdzZWxlY3QnPT4xKSwgJ3NpemVzJz0+YXJyYXkoJ2ltZyc9PjEsICdsaW5rJz0+MSwgJ3NvdXJjZSc9PjEpLCAnc3Bhbic9PmFycmF5KCdjb2wnPT4xLCAnY29sZ3JvdXAnPT4xKSwgJ3NyYyc9PmFycmF5KCdhdWRpbyc9PjEsICdlbWJlZCc9PjEsICdpZnJhbWUnPT4xLCAnaW1nJz0+MSwgJ2lucHV0Jz0+MSwgJ3NjcmlwdCc9PjEsICdzb3VyY2UnPT4xLCAndHJhY2snPT4xLCAndmlkZW8nPT4xKSwgJ3NyY2RvYyc9PmFycmF5KCdpZnJhbWUnPT4xKSwgJ3NyY2xhbmcnPT5hcnJheSgndHJhY2snPT4xKSwgJ3NyY3NldCc9PmFycmF5KCdpbWcnPT4xLCAnbGluayc9PjEsICdzb3VyY2UnPT4xKSwgJ3N0YW5kYnknPT5hcnJheSgnb2JqZWN0Jz0+MSksICdzdGFydCc9PmFycmF5KCdvbCc9PjEpLCAnc3RlcCc9PmFycmF5KCdpbnB1dCc9PjEpLCAnc3VtbWFyeSc9PmFycmF5KCd0YWJsZSc9PjEpLCAndGFyZ2V0Jz0+YXJyYXkoJ2EnPT4xLCAnYXJlYSc9PjEsICdmb3JtJz0+MSksICd0eXBlJz0+YXJyYXkoJ2EnPT4xLCAnYXJlYSc9PjEsICdidXR0b24nPT4xLCAnY29tbWFuZCc9PjEsICdlbWJlZCc9PjEsICdpbnB1dCc9PjEsICdsaSc9PjEsICdsaW5rJz0+MSwgJ21lbnUnPT4xLCAnb2JqZWN0Jz0+MSwgJ29sJz0+MSwgJ3BhcmFtJz0+MSwgJ3NjcmlwdCc9PjEsICdzb3VyY2UnPT4xLCAnc3R5bGUnPT4xLCAndWwnPT4xKSwgJ3R5cGVtdXN0bWF0Y2gnPT5hcnJheSgnb2JqZWN0Jz0+MSksICd1c2VtYXAnPT5hcnJheSgnaW1nJz0+MSwgJ2lucHV0Jz0+MSwgJ29iamVjdCc9PjEpLCAndmFsaWduJz0+YXJyYXkoJ2NvbCc9PjEsICdjb2xncm91cCc9PjEsICd0Ym9keSc9PjEsICd0ZCc9PjEsICd0Zm9vdCc9PjEsICd0aCc9PjEsICd0aGVhZCc9PjEsICd0cic9PjEpLCAndmFsdWUnPT5hcnJheSgnYnV0dG9uJz0+MSwgJ2RhdGEnPT4xLCAnaW5wdXQnPT4xLCAnbGknPT4xLCAnbWV0ZXInPT4xLCAnb3B0aW9uJz0+MSwgJ3BhcmFtJz0+MSwgJ3Byb2dyZXNzJz0+MSksICd2YWx1ZXR5cGUnPT5hcnJheSgncGFyYW0nPT4xKSwgJ3ZzcGFjZSc9PmFycmF5KCdhcHBsZXQnPT4xLCAnZW1iZWQnPT4xLCAnaW1nJz0+MSwgJ29iamVjdCc9PjEpLCAnd2lkdGgnPT5hcnJheSgnYXBwbGV0Jz0+MSwgJ2NhbnZhcyc9PjEsICdjb2wnPT4xLCAnY29sZ3JvdXAnPT4xLCAnZW1iZWQnPT4xLCAnaHInPT4xLCAnaWZyYW1lJz0+MSwgJ2ltZyc9PjEsICdpbnB1dCc9PjEsICdvYmplY3QnPT4xLCAncHJlJz0+MSwgJ3RhYmxlJz0+MSwgJ3RkJz0+MSwgJ3RoJz0+MSwgJ3ZpZGVvJz0+MSksICd3bW9kZSc9PmFycmF5KCdlbWJlZCc9PjEpLCAnd3JhcCc9PmFycmF5KCd0ZXh0YXJlYSc9PjEpKTsKICAKICAvLyAuLiBFbXB0eS4KICAKICBzdGF0aWMgJGVtcHR5QXR0ckFyID0gYXJyYXkoJ2FsbG93ZnVsbHNjcmVlbic9PjEsICdjaGVja2JveCc9PjEsICdjaGVja2VkJz0+MSwgJ2NvbW1hbmQnPT4xLCAnY29tcGFjdCc9PjEsICdkZWNsYXJlJz0+MSwgJ2RlZmVyJz0+MSwgJ2RlZmF1bHQnPT4xLCAnZGlzYWJsZWQnPT4xLCAnaGlkZGVuJz0+MSwgJ2luZXJ0Jz0+MSwgJ2lzbWFwJz0+MSwgJ2l0ZW1zY29wZSc9PjEsICdtdWx0aXBsZSc9PjEsICdub2hyZWYnPT4xLCAnbm9yZXNpemUnPT4xLCAnbm9zaGFkZSc9PjEsICdub3dyYXAnPT4xLCAnb3Blbic9PjEsICdyYWRpbyc9PjEsICdyZWFkb25seSc9PjEsICdyZXF1aXJlZCc9PjEsICdyZXZlcnNlZCc9PjEsICdzZWxlY3RlZCc9PjEpOwogIAogIC8vIC4uIEdsb2JhbC4KICAKICBzdGF0aWMgJGdsb2JhbEF0dHJBciA9IGFycmF5KAogICAgCiAgICAvLyAuLi4uIEdlbmVyYWwuCiAgICAKICAgICdhY2Nlc3NrZXknPT4xLCAnYXV0b2NhcGl0YWxpemUnPT4xLCAnYXV0b2ZvY3VzJz0+MSwgJ2NsYXNzJz0+MSwgJ2NvbnRlbnRlZGl0YWJsZSc9PjEsICdjb250ZXh0bWVudSc9PjEsICdkaXInPT4xLCAnZHJhZ2dhYmxlJz0+MSwgJ2Ryb3B6b25lJz0+MSwgJ2VudGVya2V5aGludCc9PjEsICdoaWRkZW4nPT4xLCAnaWQnPT4xLCAnaW5lcnQnPT4xLCAnaW5wdXRtb2RlJz0+MSwgJ2lzJz0+MSwgJ2l0ZW1pZCc9PjEsICdpdGVtcHJvcCc9PjEsICdpdGVtcmVmJz0+MSwgJ2l0ZW1zY29wZSc9PjEsICdpdGVtdHlwZSc9PjEsICdsYW5nJz0+MSwgJ25vbmNlJz0+MSwgJ3JvbGUnPT4xLCAnc2xvdCc9PjEsICdzcGVsbGNoZWNrJz0+MSwgJ3N0eWxlJz0+MSwgJ3RhYmluZGV4Jz0+MSwgJ3RpdGxlJz0+MSwgJ3RyYW5zbGF0ZSc9PjEsICd4bWxucyc9PjEsICd4bWw6YmFzZSc9PjEsICd4bWw6bGFuZyc9PjEsICd4bWw6c3BhY2UnPT4xLAogICAgCiAgICAvLyAuLi4uIEV2ZW50LgogICAgCiAgICAnb25hYm9ydCc9PjEsICdvbmF1eGNsaWNrJz0+MSwgJ29uYmx1cic9PjEsICdvbmNhbmNlbCc9PjEsICdvbmNhbnBsYXknPT4xLCAnb25jYW5wbGF5dGhyb3VnaCc9PjEsICdvbmNoYW5nZSc9PjEsICdvbmNsaWNrJz0+MSwgJ29uY2xvc2UnPT4xLCAnb25jb250ZXh0bG9zdCc9PjEsICdvbmNvbnRleHRtZW51Jz0+MSwgJ29uY29udGV4dHJlc3RvcmVkJz0+MSwgJ29uY29weSc9PjEsICdvbmN1ZWNoYW5nZSc9PjEsICdvbmN1dCc9PjEsICdvbmRibGNsaWNrJz0+MSwgJ29uZHJhZyc9PjEsICdvbmRyYWdlbmQnPT4xLCAnb25kcmFnZW50ZXInPT4xLCAnb25kcmFnbGVhdmUnPT4xLCAnb25kcmFnb3Zlcic9PjEsICdvbmRyYWdzdGFydCc9PjEsICdvbmRyb3AnPT4xLCAnb25kdXJhdGlvbmNoYW5nZSc9PjEsICdvbmVtcHRpZWQnPT4xLCAnb25lbmRlZCc9PjEsICdvbmVycm9yJz0+MSwgJ29uZm9jdXMnPT4xLCAnb25mb3JtY2hhbmdlJz0+MSwgJ29uZm9ybWRhdGEnPT4xLCAnb25mb3JtaW5wdXQnPT4xLCAnb25nb3Rwb2ludGVyY2FwdHVyZSc9PjEsICdvbmlucHV0Jz0+MSwgJ29uaW52YWxpZCc9PjEsICdvbmtleWRvd24nPT4xLCAnb25rZXlwcmVzcyc9PjEsICdvbmtleXVwJz0+MSwgJ29ubG9hZCc9PjEsICdvbmxvYWRlZGRhdGEnPT4xLCAnb25sb2FkZWRtZXRhZGF0YSc9PjEsICdvbmxvYWRlbmQnPT4xLCAnb25sb2Fkc3RhcnQnPT4xLCAnb25sb3N0cG9pbnRlcmNhcHR1cmUnPT4xLCAnb25tb3VzZWRvd24nPT4xLCAnb25tb3VzZWVudGVyJz0+MSwgJ29ubW91c2VsZWF2ZSc9PjEsICdvbm1vdXNlbW92ZSc9PjEsICdvbm1vdXNlb3V0Jz0+MSwgJ29ubW91c2VvdmVyJz0+MSwgJ29ubW91c2V1cCc9PjEsICdvbm1vdXNld2hlZWwnPT4xLCAnb25wYXN0ZSc9PjEsICdvbnBhdXNlJz0+MSwgJ29ucGxheSc9PjEsICdvbnBsYXlpbmcnPT4xLCAnb25wb2ludGVyY2FuY2VsJz0+MSwgJ29ucG9pbnRlcmRvd24nPT4xLCAnb25wb2ludGVyZW50ZXInPT4xLCAnb25wb2ludGVybGVhdmUnPT4xLCAnb25wb2ludGVybW92ZSc9PjEsICdvbnBvaW50ZXJvdXQnPT4xLCAnb25wb2ludGVyb3Zlcic9PjEsICdvbnBvaW50ZXJ1cCc9PjEsICdvbnByb2dyZXNzJz0+MSwgJ29ucmF0ZWNoYW5nZSc9PjEsICdvbnJlYWR5c3RhdGVjaGFuZ2UnPT4xLCAnb25yZXNldCc9PjEsICdvbnJlc2l6ZSc9PjEsICdvbnNjcm9sbCc9PjEsICdvbnNlYXJjaCc9PjEsICdvbnNlY3VyaXR5cG9saWN5dmlvbGF0aW9uJz0+MSwgJ29uc2Vla2VkJz0+MSwgJ29uc2Vla2luZyc9PjEsICdvbnNlbGVjdCc9PjEsICdvbnNob3cnPT4xLCAnb25zbG90Y2hhbmdlJz0+MSwgJ29uc3RhbGxlZCc9PjEsICdvbnN1Ym1pdCc9PjEsICdvbnN1c3BlbmQnPT4xLCAnb250aW1ldXBkYXRlJz0+MSwgJ29udG9nZ2xlJz0+MSwgJ29udG91Y2hjYW5jZWwnPT4xLCAnb250b3VjaGVuZCc9PjEsICdvbnRvdWNobW92ZSc9PjEsICdvbnRvdWNoc3RhcnQnPT4xLCAnb252b2x1bWVjaGFuZ2UnPT4xLCAnb253YWl0aW5nJz0+MSwgJ29ud2hlZWwnPT4xLAogICAgCiAgICAvLyAuLi4uIEFyaWEuCiAgICAKICAgICdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnPT4xLCAnYXJpYS1hdG9taWMnPT4xLCAnYXJpYS1hdXRvY29tcGxldGUnPT4xLCAnYXJpYS1icmFpbGxlbGFiZWwnPT4xLCAnYXJpYS1icmFpbGxlcm9sZWRlc2NyaXB0aW9uJz0+MSwgJ2FyaWEtYnVzeSc9PjEsICdhcmlhLWNoZWNrZWQnPT4xLCAnYXJpYS1jb2xjb3VudCc9PjEsICdhcmlhLWNvbGluZGV4Jz0+MSwgJ2FyaWEtY29saW5kZXh0ZXh0Jz0+MSwgJ2FyaWEtY29sc3Bhbic9PjEsICdhcmlhLWNvbnRyb2xzJz0+MSwgJ2FyaWEtY3VycmVudCc9PjEsICdhcmlhLWRlc2NyaWJlZGJ5Jz0+MSwgJ2FyaWEtZGVzY3JpcHRpb24nPT4xLCAnYXJpYS1kZXRhaWxzJz0+MSwgJ2FyaWEtZGlzYWJsZWQnPT4xLCAnYXJpYS1kcm9wZWZmZWN0Jz0+MSwgJ2FyaWEtZXJyb3JtZXNzYWdlJz0+MSwgJ2FyaWEtZXhwYW5kZWQnPT4xLCAnYXJpYS1mbG93dG8nPT4xLCAnYXJpYS1ncmFiYmVkJz0+MSwgJ2FyaWEtaGFzcG9wdXAnPT4xLCAnYXJpYS1oaWRkZW4nPT4xLCAnYXJpYS1pbnZhbGlkJz0+MSwgJ2FyaWEta2V5c2hvcnRjdXRzJz0+MSwgJ2FyaWEtbGFiZWwnPT4xLCAnYXJpYS1sYWJlbGxlZGJ5Jz0+MSwgJ2FyaWEtbGV2ZWwnPT4xLCAnYXJpYS1saXZlJz0+MSwgJ2FyaWEtbXVsdGlsaW5lJz0+MSwgJ2FyaWEtbXVsdGlzZWxlY3RhYmxlJz0+MSwgJ2FyaWEtb3JpZW50YXRpb24nPT4xLCAnYXJpYS1vd25zJz0+MSwgJ2FyaWEtcGxhY2Vob2xkZXInPT4xLCAnYXJpYS1wb3NpbnNldCc9PjEsICdhcmlhLXByZXNzZWQnPT4xLCAnYXJpYS1yZWFkb25seSc9PjEsICdhcmlhLXJlbGV2YW50Jz0+MSwgJ2FyaWEtcmVxdWlyZWQnPT4xLCAnYXJpYS1yb2xlZGVzY3JpcHRpb24nPT4xLCAnYXJpYS1yb3djb3VudCc9PjEsICdhcmlhLXJvd2luZGV4Jz0+MSwgJ2FyaWEtcm93aW5kZXh0ZXh0Jz0+MSwgJ2FyaWEtcm93c3Bhbic9PjEsICdhcmlhLXNlbGVjdGVkJz0+MSwgJ2FyaWEtc2V0c2l6ZSc9PjEsICdhcmlhLXNvcnQnPT4xLCAnYXJpYS12YWx1ZW1heCc9PjEsICdhcmlhLXZhbHVlbWluJz0+MSwgJ2FyaWEtdmFsdWVub3cnPT4xLCAnYXJpYS12YWx1ZXRleHQnPT4xKTsKICAKICBzdGF0aWMgJHVybEF0dHJBciA9IGFycmF5KCdhY3Rpb24nPT4xLCAnYXJjaGl2ZSc9PjEsICdjaXRlJz0+MSwgJ2NsYXNzaWQnPT4xLCAnY29kZWJhc2UnPT4xLCAnZGF0YSc9PjEsICdmb3JtYWN0aW9uJz0+MSwgJ2hyZWYnPT4xLCAnaXRlbXR5cGUnPT4xLCAnbG9uZ2Rlc2MnPT4xLCAnbW9kZWwnPT4xLCAncGx1Z2luc3BhZ2UnPT4xLCAncGx1Z2ludXJsJz0+MSwgJ3Bvc3Rlcic9PjEsICdzcmMnPT4xLCAnc3Jjc2V0Jz0+MSwgJ3VzZW1hcCc9PjEpOyAvLyBFeGNsdWRlcyBzdHlsZSBhbmQgb24qCiAgCiAgLy8gLi4gRGVwcmVjYXRlZC4KICAKICAkYWx0ZXJEZXByZWNBdHRyID0gMDsKICBpZiAoJENbJ25vX2RlcHJlY2F0ZWRfYXR0ciddKSB7CiAgICBzdGF0aWMgJGRlcHJlY0F0dHJFbGVBciA9IGFycmF5KCdhbGlnbic9PmFycmF5KCdjYXB0aW9uJz0+MSwgJ2Rpdic9PjEsICdoMSc9PjEsICdoMic9PjEsICdoMyc9PjEsICdoNCc9PjEsICdoNSc9PjEsICdoNic9PjEsICdocic9PjEsICdpbWcnPT4xLCAnaW5wdXQnPT4xLCAnbGVnZW5kJz0+MSwgJ29iamVjdCc9PjEsICdwJz0+MSwgJ3RhYmxlJz0+MSksICdiZ2NvbG9yJz0+YXJyYXkoJ3RhYmxlJz0+MSwgJ3Rib2R5Jz0+MSwgJ3RkJz0+MSwgJ3Rmb290Jz0+MSwgJ3RoJz0+MSwgJ3RoZWFkJz0+MSwgJ3RyJz0+MSksICdib3JkZXInPT5hcnJheSgnb2JqZWN0Jz0+MSksICdib3JkZXJjb2xvcic9PmFycmF5KCd0YWJsZSc9PjEsICd0ZCc9PjEsICd0cic9PjEpLCAnY2VsbHNwYWNpbmcnPT5hcnJheSgndGFibGUnPT4xKSwgJ2NsZWFyJz0+YXJyYXkoJ2JyJz0+MSksICdjb21wYWN0Jz0+YXJyYXkoJ2RsJz0+MSwgJ29sJz0+MSwgJ3VsJz0+MSksICdoZWlnaHQnPT5hcnJheSgndGQnPT4xLCAndGgnPT4xKSwgJ2hzcGFjZSc9PmFycmF5KCdpbWcnPT4xLCAnb2JqZWN0Jz0+MSksICdsYW5ndWFnZSc9PmFycmF5KCdzY3JpcHQnPT4xKSwgJ25hbWUnPT5hcnJheSgnYSc9PjEsICdmb3JtJz0+MSwgJ2lmcmFtZSc9PjEsICdpbWcnPT4xLCAnbWFwJz0+MSksICdub3NoYWRlJz0+YXJyYXkoJ2hyJz0+MSksICdub3dyYXAnPT5hcnJheSgndGQnPT4xLCAndGgnPT4xKSwgJ3NpemUnPT5hcnJheSgnaHInPT4xKSwgJ3ZzcGFjZSc9PmFycmF5KCdpbWcnPT4xLCAnb2JqZWN0Jz0+MSksICd3aWR0aCc9PmFycmF5KCdocic9PjEsICdwcmUnPT4xLCAndGFibGUnPT4xLCAndGQnPT4xLCAndGgnPT4xKSk7CiAgICBzdGF0aWMgJGRlcHJlY0F0dHJQb3NzaWJsZUVsZUFyID0gYXJyYXkoJ2EnPT4xLCAnYnInPT4xLCAnY2FwdGlvbic9PjEsICdkaXYnPT4xLCAnZGwnPT4xLCAnZm9ybSc9PjEsICdoMSc9PjEsICdoMic9PjEsICdoMyc9PjEsICdoNCc9PjEsICdoNSc9PjEsICdoNic9PjEsICdocic9PjEsICdpZnJhbWUnPT4xLCAnaW1nJz0+MSwgJ2lucHV0Jz0+MSwgJ2xlZ2VuZCc9PjEsICdtYXAnPT4xLCAnb2JqZWN0Jz0+MSwgJ29sJz0+MSwgJ3AnPT4xLCAncHJlJz0+MSwgJ3NjcmlwdCc9PjEsICd0YWJsZSc9PjEsICd0ZCc9PjEsICd0aCc9PjEsICd0cic9PjEsICd1bCc9PjEpOwogICAgJGFsdGVyRGVwcmVjQXR0ciA9IGlzc2V0KCRkZXByZWNBdHRyUG9zc2libGVFbGVBclskZWxlXSkgPyAxIDogMDsKICB9CiAgCiAgLy8gLS0gU3RhbmRhcmQgYXR0cmlidXRlIHZhbHVlcyB0aGF0IG1heSBuZWVkIGxvd2VyY2FzaW5nLgogIAogIGlmICgkQ1snbGNfc3RkX3ZhbCddKSB7CiAgICBzdGF0aWMgJGxDYXNlU3RkQXR0clZhbEFyID0gYXJyYXkoJ2FsbCc9PjEsICdhdXRvJz0+MSwgJ2Jhc2VsaW5lJz0+MSwgJ2JvdHRvbSc9PjEsICdidXR0b24nPT4xLCAnY2FwdGlvbnMnPT4xLCAnY2VudGVyJz0+MSwgJ2NoYXB0ZXJzJz0+MSwgJ2NoYXInPT4xLCAnY2hlY2tib3gnPT4xLCAnY2lyY2xlJz0+MSwgJ2NvbCc9PjEsICdjb2xncm91cCc9PjEsICdjb2xvcic9PjEsICdjb2xzJz0+MSwgJ2RhdGEnPT4xLCAnZGF0ZSc9PjEsICdkYXRldGltZSc9PjEsICdkYXRldGltZS1sb2NhbCc9PjEsICdkZWZhdWx0Jz0+MSwgJ2Rlc2NyaXB0aW9ucyc9PjEsICdlbWFpbCc9PjEsICdmaWxlJz0+MSwgJ2dldCc9PjEsICdncm91cHMnPT4xLCAnaGlkZGVuJz0+MSwgJ2ltYWdlJz0+MSwgJ2p1c3RpZnknPT4xLCAnbGVmdCc9PjEsICdsdHInPT4xLCAnbWV0YWRhdGEnPT4xLCAnbWlkZGxlJz0+MSwgJ21vbnRoJz0+MSwgJ25vbmUnPT4xLCAnbnVtYmVyJz0+MSwgJ29iamVjdCc9PjEsICdwYXNzd29yZCc9PjEsICdwb2x5Jz0+MSwgJ3Bvc3QnPT4xLCAncHJlc2VydmUnPT4xLCAncmFkaW8nPT4xLCAncmFuZ2UnPT4xLCAncmVjdCc9PjEsICdyZWYnPT4xLCAncmVzZXQnPT4xLCAncmlnaHQnPT4xLCAncm93Jz0+MSwgJ3Jvd2dyb3VwJz0+MSwgJ3Jvd3MnPT4xLCAncnRsJz0+MSwgJ3NlYXJjaCc9PjEsICdzdWJtaXQnPT4xLCAnc3VidGl0bGVzJz0+MSwgJ3RlbCc9PjEsICd0ZXh0Jz0+MSwgJ3RpbWUnPT4xLCAndG9wJz0+MSwgJ3VybCc9PjEsICd3ZWVrJz0+MSk7CiAgICBzdGF0aWMgJGxDYXNlU3RkQXR0clZhbFBvc3NpYmxlRWxlQXIgPSBhcnJheSgnYSc9PjEsICdhcmVhJz0+MSwgJ2Jkbyc9PjEsICdidXR0b24nPT4xLCAnY29sJz0+MSwgJ2ZpZWxkc2V0Jz0+MSwgJ2Zvcm0nPT4xLCAnaW1nJz0+MSwgJ2lucHV0Jz0+MSwgJ29iamVjdCc9PjEsICdvbCc9PjEsICdvcHRncm91cCc9PjEsICdvcHRpb24nPT4xLCAncGFyYW0nPT4xLCAnc2NyaXB0Jz0+MSwgJ3NlbGVjdCc9PjEsICd0YWJsZSc9PjEsICd0ZCc9PjEsICd0ZXh0YXJlYSc9PjEsICd0Zm9vdCc9PjEsICd0aCc9PjEsICd0aGVhZCc9PjEsICd0cic9PjEsICd0cmFjayc9PjEsICd4bWw6c3BhY2UnPT4xKTsKICAgICRsQ2FzZVN0ZEF0dHJWYWwgPSBpc3NldCgkbENhc2VTdGRBdHRyVmFsUG9zc2libGVFbGVBclskZWxlXSkgPyAxIDogMDsKICB9CiAgCiAgLy8gLS0gR2V0IGF0dHJpYnV0ZSBuYW1lLXZhbHVlIHBhaXJzLgogIAogIGlmIChzdHJwb3MoJGF0dHJTdHIsICJceDAxIikgIT09IGZhbHNlKSB7IC8vIFJlbW92ZSBDREFUQS9jb21tZW50CiAgICAkYXR0clN0ciA9IHByZWdfcmVwbGFjZSgnYFx4MDFbXlx4MDFdKlx4MDFgJywgJycsICRhdHRyU3RyKTsKICB9CiAgJGF0dHJTdHIgPSB0cmltKCRhdHRyU3RyLCAnIC8nKTsKICAkYXR0ckFyID0gYXJyYXkoKTsKICAkc3RhdGUgPSAwOwogIHdoaWxlIChzdHJsZW4oJGF0dHJTdHIpKSB7CiAgICAkb2sgPSAwOyAvLyBGb3IgcGFyc2luZyBlcnJvcnMsIHRvIGRlYWwgd2l0aCBzcGFjZSwgIiwgYW5kICcgY2hhcmFjdGVycwogICAgc3dpdGNoICgkc3RhdGUpIHsKICAgICAgY2FzZSAwOiBpZiAocHJlZ19tYXRjaCgnYF5bXj1ccy9ceDdmLVx4OWZdK2AnLCAkYXR0clN0ciwgJG0pKSB7IC8vIE5hbWUKICAgICAgICAkYXR0ciA9IHN0cnRvbG93ZXIoJG1bMF0pOwogICAgICAgICRvayA9ICRzdGF0ZSA9IDE7CiAgICAgICAgJGF0dHJTdHIgPSBsdHJpbShzdWJzdHJfcmVwbGFjZSgkYXR0clN0ciwgJycsIDAsIHN0cmxlbigkbVswXSkpKTsKICAgICAgfQogICAgICBicmVhazsgY2FzZSAxOiBpZiAoJGF0dHJTdHJbMF0gPT0gJz0nKSB7CiAgICAgICRvayA9IDE7CiAgICAgICRzdGF0ZSA9IDI7CiAgICAgICRhdHRyU3RyID0gbHRyaW0oJGF0dHJTdHIsICc9ICcpOwogICAgfSBlbHNlIHsgLy8gTm8gdmFsdWUKICAgICAgJG9rID0gMTsKICAgICAgJHN0YXRlID0gMDsKICAgICAgJGF0dHJTdHIgPSBsdHJpbSgkYXR0clN0cik7CiAgICAgICRhdHRyQXJbJGF0dHJdID0gJyc7CiAgICB9CiAgICBicmVhazsgY2FzZSAyOiBpZiAocHJlZ19tYXRjaCgnYF4oKD86IlteIl0qIil8KD86XCdbXlwnXSpcJyl8KD86XHMqW15ccyJcJ10rKSkoLiopYCcsICRhdHRyU3RyLCAkbSkpIHsgLy8gVmFsdWUKICAgICAgJGF0dHJTdHIgPSBsdHJpbSgkbVsyXSk7CiAgICAgICRtID0gJG1bMV07CiAgICAgICRvayA9IDE7CiAgICAgICRzdGF0ZSA9IDA7CiAgICAgICRhdHRyQXJbJGF0dHJdID0KICAgICAgICB0cmltKAogICAgICAgICAgc3RyX3JlcGxhY2UoJzwnLCAnJmx0OycsCiAgICAgICAgICAgICAgICAgICAgICAoJG1bMF0gPT0gJyInIHx8ICRtWzBdID09ICdcJycpCiAgICAgICAgICAgICAgICAgICAgICAgID8gc3Vic3RyKCRtLCAxLCAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgOiAkbSkpOwogICAgfQogICAgYnJlYWs7CiAgICB9CiAgICBpZiAoISRvaykgewogICAgICAkYXR0clN0ciA9IHByZWdfcmVwbGFjZSgnYF4oPzoiW14iXSooInwkKXxcJ1teXCddKihcJ3wkKXxcUykqXHMqYCcsICcnLCAkYXR0clN0cik7CiAgICAgICRzdGF0ZSA9IDA7CiAgICB9CiAgfQogIGlmICgkc3RhdGUgPT0gMSkgewogICAgJGF0dHJBclskYXR0cl0gPSAnJzsKICB9CiAgCiAgLy8gLS0gQ2xlYW4gYXR0cmlidXRlcy4KICAKICBnbG9iYWwgJFM7CiAgJGVsZVNwZWMgPSBpc3NldCgkU1skZWxlXSkgPyAkU1skZWxlXSA6IGFycmF5KCk7CiAgJGZpbHRBdHRyQXIgPSBhcnJheSgpOyAvLyBGaW5hbGl6ZWQgYXR0cmlidXRlcwogICRkZW5pZWRBdHRyQXIgPSAkQ1snZGVueV9hdHRyaWJ1dGUnXTsKICAKICBmb3JlYWNoICgkYXR0ckFyIGFzICRhdHRyPT4kdikgewogICAgCiAgICAvLyAuLiBDaGVjayBpZiBhdHRyaWJ1dGUgaXMgcGVybWl0dGVkLgogICAgCiAgICBpZiAoCiAgICAgIAogICAgICAvLyAuLi4uIFZhbGlkIGF0dHJpYnV0ZS4KICAgICAgCiAgICAgICgoaXNzZXQoJGF0dHJFbGVBclskYXR0cl1bJGVsZV0pCiAgICAgICAgfHwgaXNzZXQoJGdsb2JhbEF0dHJBclskYXR0cl0pCiAgICAgICAgfHwgcHJlZ19tYXRjaCgnYGRhdGEtKCg/IXhtbClbXjpdKyQpYCcsICRhdHRyKQogICAgICAgIHx8IChzdHJwb3MoJGVsZSwgJy0nKQogICAgICAgICAgICAmJiBzdHJwb3MoJGF0dHIsICdkYXRhLXhtbCcpICE9PSAwKSkKICAgICAgIAogICAgICAgLy8gLi4uLiBObyBkZW5pYWwgdGhyb3VnaCAkc3BlYy4KICAgICAgIAogICAgICAgJiYgKGVtcHR5KCRlbGVTcGVjKQogICAgICAgICAgIHx8ICghaXNzZXQoJGVsZVNwZWNbJ2RlbnknXSkKICAgICAgICAgICAgICAgfHwgKCFpc3NldCgkZWxlU3BlY1snZGVueSddWycqJ10pCiAgICAgICAgICAgICAgICAgICAmJiAhaXNzZXQoJGVsZVNwZWNbJ2RlbnknXVskYXR0cl0pCiAgICAgICAgICAgICAgICAgICAmJiAhaXNzZXQoJGVsZVNwZWNbJ2RlbnknXVtwcmVnX3JlcGxhY2UoJ2BeKG9ufGFyaWF8ZGF0YSkuK2AnLCAnXFwxJywgJGF0dHIpLiAnKiddKSkpKQogICAgICAgCiAgICAgICAvLyAuLi4uIE5vIGRlbmlhbCB0aHJvdWdoICRjb25maWcuCiAgICAgICAKICAgICAgICYmIChlbXB0eSgkZGVuaWVkQXR0ckFyKQogICAgICAgICAgIHx8IChpc3NldCgkZGVuaWVkQXR0ckFyWycqJ10pCiAgICAgICAgICAgID8gKGlzc2V0KCRkZW5pZWRBdHRyQXJbIi0kYXR0ciJdKQogICAgICAgICAgICAgICB8fCBpc3NldCgkZGVuaWVkQXR0ckFyWyctJy4gcHJlZ19yZXBsYWNlKCdgXihvbnxhcmlhfGRhdGEpLi4rYCcsICdcXDEnLCAkYXR0cikuICcqJ10pKQogICAgICAgICAgICA6ICghaXNzZXQoJGRlbmllZEF0dHJBclskYXR0cl0pCiAgICAgICAgICAgICAgICYmICFpc3NldCgkZGVuaWVkQXR0ckFyW3ByZWdfcmVwbGFjZSgnYF4ob258YXJpYXxkYXRhKS4rYCcsICdcXDEnLCAkYXR0cikuICcqJ10pKSkpKQogICAgICAKICAgICAgLy8gLi4uLiBQZXJtaXQgaWYgcGVybWlzc2lvbiB0aHJvdWdoICRzcGVjLgogICAgICAKICAgICAgfHwgKCFlbXB0eSgkZWxlU3BlYykKICAgICAgICAgICYmIChpc3NldCgkZWxlU3BlY1skYXR0cl0pCiAgICAgICAgICAgICAgfHwgKGlzc2V0KCRnbG9iYWxBdHRyQXJbJGF0dHJdKQogICAgICAgICAgICAgICAgICAmJiBpc3NldCgkZWxlU3BlY1twcmVnX3JlcGxhY2UoJ2BeKG9ufGFyaWF8ZGF0YSkuK2AnLCAnXFwxJywgJGF0dHIpLiAnKiddKSkpKQogICAgKSB7CiAgICAgIAogICAgICAvLyAuLiBBdHRyaWJ1dGUgd2l0aCBubyB2YWx1ZSBvciBzdGFuZGFyZCB2YWx1ZS4KICAgICAgCiAgICAgIGlmIChpc3NldCgkZW1wdHlBdHRyQXJbJGF0dHJdKSkgewogICAgICAgICR2ID0gJGF0dHI7CiAgICAgIH0gZWxzZWlmICgKICAgICAgICAhZW1wdHkoJGxDYXNlU3RkQXR0clZhbCkgIC8vICEgUmF0aGVyIGxvb3NlIGJ1dCBzaG91bGQgYmUgb2sKICAgICAgICAmJiAoKCRlbGUgIT0gJ2J1dHRvbicgfHwgJGVsZSAhPSAnaW5wdXQnKQogICAgICAgICAgICB8fCAkYXR0ciA9PSAndHlwZScpCiAgICAgICkgewogICAgICAgICR2ID0gKGlzc2V0KCRsQ2FzZVN0ZEF0dHJWYWxBclsoJHZOZXcgPSBzdHJ0b2xvd2VyKCR2KSldKSkgPyAkdk5ldyA6ICR2OwogICAgICB9CiAgICAgIAogICAgICAvLyAuLiBVUkxzIGFuZCBDU1MgZXhwcmVzc2lvbnMgaW4gc3R5bGUgYXR0cmlidXRlLgogICAgICAKICAgICAgaWYgKCRhdHRyID09ICdzdHlsZScgJiYgISRDWydzdHlsZV9wYXNzJ10pIHsKICAgICAgICBpZiAoZmFsc2UgIT09IHN0cnBvcygkdiwgJyYjJykpIHsgLy8gQ2hhbmdlIGFueSBlbnRpdHkgdG8gY2hhcmFjdGVyCiAgICAgICAgICBzdGF0aWMgJGVudGl0eUFyID0gYXJyYXkoJyYjMzI7Jz0+JyAnLCAnJiN4MjA7Jz0+JyAnLCAnJiM1ODsnPT4nOicsICcmI3gzYTsnPT4nOicsICcmIzM0Oyc9PiciJywgJyYjeDIyOyc9PiciJywgJyYjNDA7Jz0+JygnLCAnJiN4Mjg7Jz0+JygnLCAnJiM0MTsnPT4nKScsICcmI3gyOTsnPT4nKScsICcmIzQyOyc9PicqJywgJyYjeDJhOyc9PicqJywgJyYjNDc7Jz0+Jy8nLCAnJiN4MmY7Jz0+Jy8nLCAnJiM5MjsnPT4nXFwnLCAnJiN4NWM7Jz0+J1xcJywgJyYjMTAxOyc9PidlJywgJyYjNjk7Jz0+J2UnLCAnJiN4NDU7Jz0+J2UnLCAnJiN4NjU7Jz0+J2UnLCAnJiMxMDU7Jz0+J2knLCAnJiM3MzsnPT4naScsICcmI3g0OTsnPT4naScsICcmI3g2OTsnPT4naScsICcmIzEwODsnPT4nbCcsICcmIzc2Oyc9PidsJywgJyYjeDRjOyc9PidsJywgJyYjeDZjOyc9PidsJywgJyYjMTEwOyc9PiduJywgJyYjNzg7Jz0+J24nLCAnJiN4NGU7Jz0+J24nLCAnJiN4NmU7Jz0+J24nLCAnJiMxMTE7Jz0+J28nLCAnJiM3OTsnPT4nbycsICcmI3g0ZjsnPT4nbycsICcmI3g2ZjsnPT4nbycsICcmIzExMjsnPT4ncCcsICcmIzgwOyc9PidwJywgJyYjeDUwOyc9PidwJywgJyYjeDcwOyc9PidwJywgJyYjMTE0Oyc9PidyJywgJyYjODI7Jz0+J3InLCAnJiN4NTI7Jz0+J3InLCAnJiN4NzI7Jz0+J3InLCAnJiMxMTU7Jz0+J3MnLCAnJiM4MzsnPT4ncycsICcmI3g1MzsnPT4ncycsICcmI3g3MzsnPT4ncycsICcmIzExNzsnPT4ndScsICcmIzg1Oyc9Pid1JywgJyYjeDU1Oyc9Pid1JywgJyYjeDc1Oyc9Pid1JywgJyYjMTIwOyc9Pid4JywgJyYjODg7Jz0+J3gnLCAnJiN4NTg7Jz0+J3gnLCAnJiN4Nzg7Jz0+J3gnLCAnJiMzOTsnPT4iJyIsICcmI3gyNzsnPT4iJyIpOwogICAgICAgICAgJHYgPSBzdHJ0cigkdiwgJGVudGl0eUFyKTsKICAgICAgICB9CiAgICAgICAgJHYgPQogICAgICAgICAgcHJlZ19yZXBsYWNlX2NhbGxiYWNrKAogICAgICAgICAgICAnYCh1cmwoPzpcKCkoPzogKSooPzpcJ3wifCYoPzpxdW90fGFwb3MpOyk/KSguKz8pKCg/OlwnfCJ8Jig/OnF1b3R8YXBvcyk7KT8oPzogKSooPzpcKSkpYGlTJywKICAgICAgICAgICAgJ2hsX3VybCcsCiAgICAgICAgICAgICR2KTsKICAgICAgICAkdiA9ICEkQ1snY3NzX2V4cHJlc3Npb24nXQogICAgICAgICAgPyBwcmVnX3JlcGxhY2UoJ2BleHByZXNzaW9uYGknLCAnICcsIHByZWdfcmVwbGFjZSgnYFxcXFxcU3woL3woJTJmKSkoXCp8KCUyYSkpYGknLCAnICcsICR2KSkKICAgICAgICAgIDogJHY7CiAgICAgICAgCiAgICAgICAgLy8gLi4gVVJMcyBpbiBvdGhlciBhdHRyaWJ1dGVzLgogICAgICAgIAogICAgICB9IGVsc2VpZiAoaXNzZXQoJHVybEF0dHJBclskYXR0cl0pIHx8IChpc3NldCgkZ2xvYmFsQXR0ckFyWyRhdHRyXSkgJiYgc3RycG9zKCRhdHRyLCAnb24nKSA9PT0gMCkpIHsKICAgICAgICAkdiA9CiAgICAgICAgICBzdHJfcmVwbGFjZSgiwq0iLCAnICcsCiAgICAgICAgICAgIChzdHJwb3MoJHYsICcmJykgIT09IGZhbHNlICAvLyAhIERvdWJsZS1xdW90ZWQgY2hhcmFjdGVyID0gc29mdC1oeXBoZW4KICAgICAgICAgICAgICA/IHN0cl9yZXBsYWNlKGFycmF5KCcmI3hhZDsnLCAnJiMxNzM7JywgJyZzaHk7JyksICcgJywgJHYpCiAgICAgICAgICAgICAgOiAkdikpOwogICAgICAgIGlmICgkYXR0ciA9PSAnc3Jjc2V0JyB8fCAoJGF0dHIgPT0gJ2FyY2hpdmUnICYmICRlbGUgPT0gJ2FwcGxldCcpKSB7CiAgICAgICAgICAkdk5ldyA9ICcnOwogICAgICAgICAgZm9yZWFjaCAoZXhwbG9kZSgnLCcsICR2KSBhcyAkaz0+JHgpIHsKICAgICAgICAgICAgJHggPSBleHBsb2RlKCcgJywgbHRyaW0oJHgpLCAyKTsKICAgICAgICAgICAgJGsgPSBpc3NldCgkeFsxXSkgPyB0cmltKCR4WzFdKSA6ICcnOwogICAgICAgICAgICAkeCA9IHRyaW0oJHhbMF0pOwogICAgICAgICAgICBpZiAoaXNzZXQoJHhbMF0pKSB7CiAgICAgICAgICAgICAgJHZOZXcgLj0gaGxfdXJsKCR4LCAkYXR0cikuIChlbXB0eSgkaykgPyAnJyA6ICcgJy4gJGspLiAnLCAnOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICAkdiA9IHRyaW0oJHZOZXcsICcsICcpOwogICAgICAgIH0KICAgICAgICBpZiAoJGF0dHIgPT0gJ2l0ZW10eXBlJyB8fCAoJGF0dHIgPT0gJ2FyY2hpdmUnICYmICRlbGUgPT0gJ29iamVjdCcpKSB7CiAgICAgICAgICAkdk5ldyA9ICcnOwogICAgICAgICAgZm9yZWFjaCAoZXhwbG9kZSgnICcsICR2KSBhcyAkeCkgewogICAgICAgICAgICBpZiAoaXNzZXQoJHhbMF0pKSB7CiAgICAgICAgICAgICAgJHZOZXcgLj0gaGxfdXJsKCR4LCAkYXR0cikuICcgJzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgJHYgPSB0cmltKCR2TmV3LCAnICcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAkdiA9IGhsX3VybCgkdiwgJGF0dHIpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBBbnRpLXNwYW0gbWVhc3VyZS4KICAgICAgICAKICAgICAgICBpZiAoJGF0dHIgPT0gJ2hyZWYnKSB7CiAgICAgICAgICBpZiAoJENbJ2FudGlfbWFpbF9zcGFtJ10gJiYgc3RycG9zKCR2LCAnbWFpbHRvOicpID09PSAwKSB7CiAgICAgICAgICAgICR2ID0gc3RyX3JlcGxhY2UoJ0AnLCBodG1sc3BlY2lhbGNoYXJzKCRDWydhbnRpX21haWxfc3BhbSddKSwgJHYpOwogICAgICAgICAgfSBlbHNlaWYgKCRDWydhbnRpX2xpbmtfc3BhbSddKSB7CiAgICAgICAgICAgICR4ID0gJENbJ2FudGlfbGlua19zcGFtJ11bMV07CiAgICAgICAgICAgIGlmICghZW1wdHkoJHgpICYmIHByZWdfbWF0Y2goJHgsICR2KSkgewogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR4ID0gJENbJ2FudGlfbGlua19zcGFtJ11bMF07CiAgICAgICAgICAgIGlmICghZW1wdHkoJHgpICYmIHByZWdfbWF0Y2goJHgsICR2KSkgewogICAgICAgICAgICAgIGlmIChpc3NldCgkZmlsdEF0dHJBclsncmVsJ10pKSB7CiAgICAgICAgICAgICAgICBpZiAoIXByZWdfbWF0Y2goJ2BcYm5vZm9sbG93XGJgaScsICRmaWx0QXR0ckFyWydyZWwnXSkpIHsKICAgICAgICAgICAgICAgICAgJGZpbHRBdHRyQXJbJ3JlbCddIC49ICcgbm9mb2xsb3cnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gZWxzZWlmIChpc3NldCgkYXR0ckFyWydyZWwnXSkpIHsKICAgICAgICAgICAgICAgIGlmICghcHJlZ19tYXRjaCgnYFxibm9mb2xsb3dcYmBpJywgJGF0dHJBclsncmVsJ10pKSB7CiAgICAgICAgICAgICAgICAgICRhZGROb2ZvbGxvdyA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRmaWx0QXR0ckFyWydyZWwnXSA9ICdub2ZvbGxvdyc7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICAvLyAuLiBDaGVjayBhdHRyaWJ1dGUgdmFsdWUgYWdhaW5zdCBhbnkgJHNwZWMgcnVsZS4KICAgICAgCiAgICAgIGlmIChpc3NldCgkZWxlU3BlY1skYXR0cl0pCiAgICAgICAgICAmJiBpc19hcnJheSgkZWxlU3BlY1skYXR0cl0pCiAgICAgICAgICAmJiAoJHYgPSBobF9hdHRyaWJ1dGVWYWx1ZSgkYXR0ciwgJHYsICRlbGVTcGVjWyRhdHRyXSwgJGVsZSkpID09PSAwKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgCiAgICAgICRmaWx0QXR0ckFyWyRhdHRyXSA9IHN0cl9yZXBsYWNlKCciJywgJyZxdW90OycsICR2KTsKICAgIH0KICB9CiAgCiAgLy8gLS0gQWRkIG5vZm9sbG93LgogIAogIGlmIChpc3NldCgkYWRkTm9mb2xsb3cpKSB7CiAgICAkZmlsdEF0dHJBclsncmVsJ10gPSBpc3NldCgkZmlsdEF0dHJBclsncmVsJ10pID8gJGZpbHRBdHRyQXJbJ3JlbCddLiAnIG5vZm9sbG93JyA6ICdub2ZvbGxvdyc7CiAgfQogIAogIC8vIC0tIEFkZCByZXF1aXJlZCBhdHRyaWJ1dGVzLgogIAogIHN0YXRpYyAkcmVxdWlyZWRBdHRyQXIgPSBhcnJheSgnYXJlYSc9PmFycmF5KCdhbHQnPT4nYXJlYScpLCAnYmRvJz0+YXJyYXkoJ2Rpcic9PidsdHInKSwgJ2NvbW1hbmQnPT5hcnJheSgnbGFiZWwnPT4nJyksICdmb3JtJz0+YXJyYXkoJ2FjdGlvbic9PicnKSwgJ2ltZyc9PmFycmF5KCdzcmMnPT4nJywgJ2FsdCc9PidpbWFnZScpLCAnbWFwJz0+YXJyYXkoJ25hbWUnPT4nJyksICdvcHRncm91cCc9PmFycmF5KCdsYWJlbCc9PicnKSwgJ3BhcmFtJz0+YXJyYXkoJ25hbWUnPT4nJyksICdzdHlsZSc9PmFycmF5KCdzY29wZWQnPT4nJyksICd0ZXh0YXJlYSc9PmFycmF5KCdyb3dzJz0+JzEwJywgJ2NvbHMnPT4nNTAnKSk7CiAgaWYgKGlzc2V0KCRyZXF1aXJlZEF0dHJBclskZWxlXSkpIHsKICAgIGZvcmVhY2ggKCRyZXF1aXJlZEF0dHJBclskZWxlXSBhcyAkaz0+JHYpIHsKICAgICAgaWYgKCFpc3NldCgkZmlsdEF0dHJBclska10pKSB7CiAgICAgICAgJGZpbHRBdHRyQXJbJGtdID0gaXNzZXQoJHZbMF0pID8gJHYgOiAkazsKICAgICAgfQogICAgfQogIH0KICAKICAvLyAtLSBUcmFuc2Zvcm0gZGVwcmVjYXRlZCBhdHRyaWJ1dGVzIGludG8gQ1NTIGRlY2xhcmF0aW9ucyBpbiBzdHlsZSBhdHRyaWJ1dGUuCiAgCiAgaWYgKCRhbHRlckRlcHJlY0F0dHIpIHsKICAgICRjc3MgPSBhcnJheSgpOwogICAgZm9yZWFjaCAoJGZpbHRBdHRyQXIgYXMgJG5hbWU9PiR2YWwpIHsKICAgICAgaWYgKCRuYW1lID09ICdzdHlsZScgfHwgIWlzc2V0KCRkZXByZWNBdHRyRWxlQXJbJG5hbWVdWyRlbGVdKSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgICR2YWwgPSBzdHJfcmVwbGFjZShhcnJheSgnXFwnLCAnOicsICc7JywgJyYjJyksICcnLCAkdmFsKTsKICAgICAgaWYgKCRuYW1lID09ICdhbGlnbicpIHsKICAgICAgICB1bnNldCgkZmlsdEF0dHJBclsnYWxpZ24nXSk7CiAgICAgICAgaWYgKCRlbGUgPT0gJ2ltZycgJiYgKCR2YWwgPT0gJ2xlZnQnIHx8ICR2YWwgPT0gJ3JpZ2h0JykpIHsKICAgICAgICAgICRjc3NbXSA9ICdmbG9hdDogJy4gJHZhbDsKICAgICAgICB9IGVsc2VpZiAoKCRlbGUgPT0gJ2RpdicgfHwgJGVsZSA9PSAndGFibGUnKSAmJiAkdmFsID09ICdjZW50ZXInKSB7CiAgICAgICAgICAkY3NzW10gPSAnbWFyZ2luOiBhdXRvJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgJGNzc1tdID0gJ3RleHQtYWxpZ246ICcuICR2YWw7CiAgICAgICAgfQogICAgICB9IGVsc2VpZiAoJG5hbWUgPT0gJ2JnY29sb3InKSB7CiAgICAgICAgdW5zZXQoJGZpbHRBdHRyQXJbJ2JnY29sb3InXSk7CiAgICAgICAgJGNzc1tdID0gJ2JhY2tncm91bmQtY29sb3I6ICcuICR2YWw7CiAgICAgIH0gZWxzZWlmICgkbmFtZSA9PSAnYm9yZGVyJykgewogICAgICAgIHVuc2V0KCRmaWx0QXR0ckFyWydib3JkZXInXSk7CiAgICAgICAgJGNzc1tdID0gImJvcmRlcjogeyR2YWx9cHgiOwogICAgICB9IGVsc2VpZiAoJG5hbWUgPT0gJ2JvcmRlcmNvbG9yJykgewogICAgICAgIHVuc2V0KCRmaWx0QXR0ckFyWydib3JkZXJjb2xvciddKTsKICAgICAgICAkY3NzW10gPSAnYm9yZGVyLWNvbG9yOiAnLiAkdmFsOwogICAgICB9IGVsc2VpZiAoJG5hbWUgPT0gJ2NlbGxzcGFjaW5nJykgewogICAgICAgIHVuc2V0KCRmaWx0QXR0ckFyWydjZWxsc3BhY2luZyddKTsKICAgICAgICAkY3NzW10gPSAiYm9yZGVyLXNwYWNpbmc6IHskdmFsfXB4IjsKICAgICAgfSBlbHNlaWYgKCRuYW1lID09ICdjbGVhcicpIHsKICAgICAgICB1bnNldCgkZmlsdEF0dHJBclsnY2xlYXInXSk7CiAgICAgICAgJGNzc1tdID0gJ2NsZWFyOiAnLiAoJHZhbCAhPSAnYWxsJyA/ICR2YWwgOiAnYm90aCcpOwogICAgICB9IGVsc2VpZiAoJG5hbWUgPT0gJ2NvbXBhY3QnKSB7CiAgICAgICAgdW5zZXQoJGZpbHRBdHRyQXJbJ2NvbXBhY3QnXSk7CiAgICAgICAgJGNzc1tdID0gJ2ZvbnQtc2l6ZTogODUlJzsKICAgICAgfSBlbHNlaWYgKCRuYW1lID09ICdoZWlnaHQnIHx8ICRuYW1lID09ICd3aWR0aCcpIHsKICAgICAgICB1bnNldCgkZmlsdEF0dHJBclskbmFtZV0pOwogICAgICAgICRjc3NbXSA9CiAgICAgICAgICAkbmFtZQogICAgICAgICAgLiAnOiAnCiAgICAgICAgICAuICgoaXNzZXQoJHZhbFswXSkgJiYgJHZhbFswXSAhPSAnKicpCiAgICAgICAgICAgID8gJHZhbC4gKGN0eXBlX2RpZ2l0KCR2YWwpID8gJ3B4JyA6ICcnKQogICAgICAgICAgICA6ICdhdXRvJyk7CiAgICAgIH0gZWxzZWlmICgkbmFtZSA9PSAnaHNwYWNlJykgewogICAgICAgIHVuc2V0KCRmaWx0QXR0ckFyWydoc3BhY2UnXSk7CiAgICAgICAgJGNzc1tdID0gIm1hcmdpbi1sZWZ0OiB7JHZhbH1weDsgbWFyZ2luLXJpZ2h0OiB7JHZhbH1weCI7CiAgICAgIH0gZWxzZWlmICgkbmFtZSA9PSAnbGFuZ3VhZ2UnICYmICFpc3NldCgkZmlsdEF0dHJBclsndHlwZSddKSkgewogICAgICAgIHVuc2V0KCRmaWx0QXR0ckFyWydsYW5ndWFnZSddKTsKICAgICAgICAkZmlsdEF0dHJBclsndHlwZSddID0gJ3RleHQvJy4gc3RydG9sb3dlcigkdmFsKTsKICAgICAgfSBlbHNlaWYgKCRuYW1lID09ICduYW1lJykgewogICAgICAgIGlmICgkQ1snbm9fZGVwcmVjYXRlZF9hdHRyJ10gPT0gMiB8fCAoJGVsZSAhPSAnYScgJiYgJGVsZSAhPSAnbWFwJykpIHsKICAgICAgICAgIHVuc2V0KCRmaWx0QXR0ckFyWyduYW1lJ10pOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzc2V0KCRmaWx0QXR0ckFyWydpZCddKSAmJiAhcHJlZ19tYXRjaCgnYFxXYCcsICR2YWwpKSB7CiAgICAgICAgICAkZmlsdEF0dHJBclsnaWQnXSA9ICR2YWw7CiAgICAgICAgfQogICAgICB9IGVsc2VpZiAoJG5hbWUgPT0gJ25vc2hhZGUnKSB7CiAgICAgICAgdW5zZXQoJGZpbHRBdHRyQXJbJ25vc2hhZGUnXSk7CiAgICAgICAgJGNzc1tdID0gJ2JvcmRlci1zdHlsZTogbm9uZTsgYm9yZGVyOiAwOyBiYWNrZ3JvdW5kLWNvbG9yOiBncmF5OyBjb2xvcjogZ3JheSc7CiAgICAgIH0gZWxzZWlmICgkbmFtZSA9PSAnbm93cmFwJykgewogICAgICAgIHVuc2V0KCRmaWx0QXR0ckFyWydub3dyYXAnXSk7CiAgICAgICAgJGNzc1tdID0gJ3doaXRlLXNwYWNlOiBub3dyYXAnOwogICAgICB9IGVsc2VpZiAoJG5hbWUgPT0gJ3NpemUnKSB7CiAgICAgICAgdW5zZXQoJGZpbHRBdHRyQXJbJ3NpemUnXSk7CiAgICAgICAgJGNzc1tdID0gJ3NpemU6ICcuICR2YWwuICdweCc7CiAgICAgIH0gZWxzZWlmICgkbmFtZSA9PSAndnNwYWNlJykgewogICAgICAgIHVuc2V0KCRmaWx0QXR0ckFyWyd2c3BhY2UnXSk7CiAgICAgICAgJGNzc1tdID0gIm1hcmdpbi10b3A6IHskdmFsfXB4OyBtYXJnaW4tYm90dG9tOiB7JHZhbH1weCI7CiAgICAgIH0KICAgIH0KICAgIGlmIChjb3VudCgkY3NzKSkgewogICAgICAkY3NzID0gaW1wbG9kZSgnOyAnLCAkY3NzKTsKICAgICAgJGZpbHRBdHRyQXJbJ3N0eWxlJ10gPQogICAgICAgIGlzc2V0KCRmaWx0QXR0ckFyWydzdHlsZSddKQogICAgICAgICAgPyBydHJpbSgkZmlsdEF0dHJBclsnc3R5bGUnXSwgJyA7JykuICc7ICcuICRjc3MuICc7JwogICAgICAgICAgOiAkY3NzLiAnOyc7CiAgICB9CiAgfQogIAogIC8vIC0tIEVuZm9yY2UgdW5pcXVlIGlkIGF0dHJpYnV0ZSB2YWx1ZXMuCiAgCiAgaWYgKCRDWyd1bmlxdWVfaWRzJ10gJiYgaXNzZXQoJGZpbHRBdHRyQXJbJ2lkJ10pKSB7CiAgICBpZiAocHJlZ19tYXRjaCgnYFxzYCcsICgkaWQgPSAkZmlsdEF0dHJBclsnaWQnXSkpIHx8IChpc3NldCgkR0xPQkFMU1snaGxfSWRzJ11bJGlkXSkgJiYgJENbJ3VuaXF1ZV9pZHMnXSA9PSAxKSkgewogICAgICB1bnNldCgkZmlsdEF0dHJBclsnaWQnXSk7CiAgICB9IGVsc2UgewogICAgICB3aGlsZSAoaXNzZXQoJEdMT0JBTFNbJ2hsX0lkcyddWyRpZF0pKSB7CiAgICAgICAgJGlkID0gJENbJ3VuaXF1ZV9pZHMnXS4gJGlkOwogICAgICB9CiAgICAgICRHTE9CQUxTWydobF9JZHMnXVsoJGZpbHRBdHRyQXJbJ2lkJ10gPSAkaWQpXSA9IDE7CiAgICB9CiAgfQogIAogIC8vIC0tIEhhbmRsZSBsYW5nIGF0dHJpYnV0ZXMuCiAgCiAgaWYgKCRDWyd4bWw6bGFuZyddICYmIGlzc2V0KCRmaWx0QXR0ckFyWydsYW5nJ10pKSB7CiAgICAkZmlsdEF0dHJBclsneG1sOmxhbmcnXSA9IGlzc2V0KCRmaWx0QXR0ckFyWyd4bWw6bGFuZyddKSA/ICRmaWx0QXR0ckFyWyd4bWw6bGFuZyddIDogJGZpbHRBdHRyQXJbJ2xhbmcnXTsKICAgIGlmICgkQ1sneG1sOmxhbmcnXSA9PSAyKSB7CiAgICAgIHVuc2V0KCRmaWx0QXR0ckFyWydsYW5nJ10pOwogICAgfQogIH0KICAKICAvLyAtLSBJZiB0cmFuc2Zvcm1lZCBlbGVtZW50LCBtb2RpZnkgc3R5bGUgYXR0cmlidXRlLgogIAogIGlmICghZW1wdHkoJGVsZVRyYW5zZm9ybWVkKSkgewogICAgJGZpbHRBdHRyQXJbJ3N0eWxlJ10gPQogICAgICBpc3NldCgkZmlsdEF0dHJBclsnc3R5bGUnXSkKICAgICAgICA/IHJ0cmltKCRmaWx0QXR0ckFyWydzdHlsZSddLCAnIDsnKS4gJzsgJy4gJGVsZVRyYW5zZm9ybWVkCiAgICAgICAgOiAkZWxlVHJhbnNmb3JtZWQ7CiAgfQogIAogIC8vIC0tIFJldHVybiBvcGVuaW5nIHRhZyB3aXRoIGF0dHJpYnV0ZXMuCiAgCiAgaWYgKGVtcHR5KCRDWydob29rX3RhZyddKSkgewogICAgJGF0dHJTdHIgPSAnJzsKICAgIGZvcmVhY2ggKCRmaWx0QXR0ckFyIGFzICRrPT4kdikgewogICAgICAkYXR0clN0ciAuPSAiIHska309XCJ7JHZ9XCIiOwogICAgfQogICAgcmV0dXJuICI8eyRlbGV9eyRhdHRyU3RyfSIuIChpc3NldCgkZW1wdHlFbGVBclskZWxlXSkgPyAnIC8nIDogJycpLiAnPic7CiAgfSBlbHNlIHsKICAgIHJldHVybiBjYWxsX3VzZXJfZnVuYygkQ1snaG9va190YWcnXSwgJGVsZSwgJGZpbHRBdHRyQXIpOwogIH0KfQoKLyoqCiAqIFRpZHkvYmVhdXRpZnkgSFRNIGJ5IGFkZGluZyBuZXdsaW5lIGFuZCBvdGhlciBzcGFjZXMgKHBhZGRpbmcpLAogKiBvciBjb21wYWN0IGJ5IHJlbW92aW5nIHVubmVjZXNzYXJ5IHNwYWNlcy4KICoKICogQHBhcmFtICBzdHJpbmcgJHQgICAgICAgICBIVE0uCiAqIEBwYXJhbSAgbWl4ZWQgICRmb3JtYXQgICAgLTEgKGNvbXBhY3QpIG9yIHN0cmluZyAodHlwZSBvZiBwYWRkaW5nKS4KICogQHBhcmFtICBzdHJpbmcgJHBhcmVudEVsZSBQYXJlbnQgZWxlbWVudCBvZiAkdC4KICogQHJldHVybiBtaXhlZCAgICAgICAgICAgICBUcmFuc2Zvcm1lZCBhdHRyaWJ1dGUgc3RyaW5nIChtYXkgYmUgZW1wdHkpIG9yIDAuCiAqLwpmdW5jdGlvbiBobF90aWR5KCR0LCAkZm9ybWF0LCAkcGFyZW50RWxlKQp7CiAgaWYgKHN0cnBvcygnIHByZSxzY3JpcHQsdGV4dGFyZWEnLCAiJHBhcmVudEVsZSwiKSkgewogICAgcmV0dXJuICR0OwogIH0KICAKICAvLyBIaWRlIENEQVRBL2NvbW1lbnQuCiAgCiAgaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2hsX2F1eDInKSkgewogICAgZnVuY3Rpb24gaGxfYXV4MigkeCkgewogICAgICByZXR1cm4KICAgICAgICAkeFsxXQogICAgICAgIC4gc3RyX3JlcGxhY2UoCiAgICAgICAgICBhcnJheSgiPCIsICI+IiwgIlxuIiwgIlxyIiwgIlx0IiwgJyAnKSwKICAgICAgICAgIGFycmF5KCJceDAxIiwgIlx4MDIiLCAiXHgwMyIsICJceDA0IiwgIlx4MDUiLCAiXHgwNyIpLAogICAgICAgICAgJHhbM10pCiAgICAgICAgLiAkeFs0XTsKICAgIH0KICB9CiAgJHQgPQogICAgcHJlZ19yZXBsYWNlKAogICAgICBhcnJheSgnYCg8XHdbXj5dKig/PCEvKT4pXHMrYCcsICdgXHMrYCcsICdgKDxcd1tePl0qKD88IS8pPikgYCcpLAogICAgICBhcnJheSgnICQxJywgJyAnLCAnJDEnKSwKICAgICAgcHJlZ19yZXBsYWNlX2NhbGxiYWNrKAogICAgICAgIGFycmF5KCdgKDwoIVxbQ0RBVEFcWykpKC4rPykoXF1cXT4pYHNtJywgJ2AoPCghLS0pKSguKz8pKC0tPilgc20nLCAnYCg8KHByZXxzY3JpcHR8dGV4dGFyZWEpW14+XSo/PikoLis/KSg8L1wyPilgc20nKSwKICAgICAgICAnaGxfYXV4MicsCiAgICAgICAgJHQpKTsKICAKICBpZiAoKCRmb3JtYXQgPSBzdHJ0b2xvd2VyKCRmb3JtYXQpKSA9PSAtMSkgewogICAgcmV0dXJuCiAgICAgIHN0cl9yZXBsYWNlKGFycmF5KCJceDAxIiwgIlx4MDIiLCAiXHgwMyIsICJceDA0IiwgIlx4MDUiLCAiXHgwNyIpLCBhcnJheSgnPCcsICc+JywgIlxuIiwgIlxyIiwgIlx0IiwgJyAnKSwgJHQpOwogIH0KICAkcGFkQ2hhciA9IHN0cnBvcygiICRmb3JtYXQiLCAndCcpID8gIlx0IiA6ICcgJzsKICAkcGFkU3RyID0KICAgIHByZWdfbWF0Y2goJ2BcZGAnLCAkZm9ybWF0LCAkbSkKICAgICAgPyBzdHJfcmVwZWF0KCRwYWRDaGFyLCBpbnR2YWwoJG1bMF0pKQogICAgICA6IHN0cl9yZXBlYXQoJHBhZENoYXIsICgkcGFkQ2hhciA9PSAiXHQiID8gMSA6IDIpKTsKICAkbGVhZE4gPSBwcmVnX21hdGNoKCdgW3RzXShbMS05XSlgJywgJGZvcm1hdCwgJG0pID8gaW50dmFsKCRtWzFdKSA6IDA7CiAgCiAgLy8gR3JvdXAgZWxlbWVudHMgYnkgbGluZS1icmVhayByZXF1aXJlbWVudC4KICAKICAkcG9zdENsb3NlRWxlQXIgPSBhcnJheSgnYnInPT4xKTsgLy8gQWZ0ZXIgY2xvc2luZwogICRwcmVFbGVBciA9IGFycmF5KCdidXR0b24nPT4xLCAnY29tbWFuZCc9PjEsICdpbnB1dCc9PjEsICdvcHRpb24nPT4xLCAncGFyYW0nPT4xLCAndHJhY2snPT4xKTsgLy8gQmVmb3JlIG9wZW5pbmcgb3IgY2xvc2luZwogICRwcmVPcGVuUG9zdENsb3NlRWxlQXIgPSBhcnJheSgnYXVkaW8nPT4xLCAnY2FudmFzJz0+MSwgJ2NhcHRpb24nPT4xLCAnZGQnPT4xLCAnZHQnPT4xLCAnZmlnY2FwdGlvbic9PjEsICdoMSc9PjEsICdoMic9PjEsICdoMyc9PjEsICdoNCc9PjEsICdoNSc9PjEsICdoNic9PjEsICdpc2luZGV4Jz0+MSwgJ2xhYmVsJz0+MSwgJ2xlZ2VuZCc9PjEsICdsaSc9PjEsICdvYmplY3QnPT4xLCAncCc9PjEsICdwcmUnPT4xLCAnc3R5bGUnPT4xLCAnc3VtbWFyeSc9PjEsICd0ZCc9PjEsICd0ZXh0YXJlYSc9PjEsICd0aCc9PjEsICd2aWRlbyc9PjEpOyAvLyBCZWZvcmUgb3BlbmluZyBhbmQgYWZ0ZXIgY2xvc2luZwogICRwcmVQb3N0RWxlQXIgPSBhcnJheSgnYWRkcmVzcyc9PjEsICdhcnRpY2xlJz0+MSwgJ2FzaWRlJz0+MSwgJ2Jsb2NrcXVvdGUnPT4xLCAnY2VudGVyJz0+MSwgJ2NvbGdyb3VwJz0+MSwgJ2RhdGFsaXN0Jz0+MSwgJ2RldGFpbHMnPT4xLCAnZGlhbG9nJz0+MSwgJ2Rpcic9PjEsICdkaXYnPT4xLCAnZGwnPT4xLCAnZmllbGRzZXQnPT4xLCAnZmlndXJlJz0+MSwgJ2Zvb3Rlcic9PjEsICdmb3JtJz0+MSwgJ2hlYWRlcic9PjEsICdoZ3JvdXAnPT4xLCAnaHInPT4xLCAnaWZyYW1lJz0+MSwgJ21haW4nPT4xLCAnbWFwJz0+MSwgJ21lbnUnPT4xLCAnbmF2Jz0+MSwgJ25vc2NyaXB0Jz0+MSwgJ29sJz0+MSwgJ29wdGdyb3VwJz0+MSwgJ3BpY3R1cmUnPT4xLCAncmJjJz0+MSwgJ3J0Yyc9PjEsICdydWJ5Jz0+MSwgJ3NjcmlwdCc9PjEsICdzZWN0aW9uJz0+MSwgJ3NlbGVjdCc9PjEsICd0YWJsZSc9PjEsICd0Ym9keSc9PjEsICd0ZW1wbGF0ZSc9PjEsICd0Zm9vdCc9PjEsICd0aGVhZCc9PjEsICd0cic9PjEsICd1bCc9PjEpOyAvLyBCZWZvcmUgYW5kIGFmdGVyIG9wZW5pbmcgYW5kIGNsb3NpbmcKICAKICAkZG9QYWQgPSAxOwogICR0ID0gZXhwbG9kZSgnPCcsICR0KTsKICB3aGlsZSAoJGRvUGFkKSB7CiAgICAkbiA9ICRsZWFkTjsKICAgICRlbGVBciA9ICR0OwogICAgb2Jfc3RhcnQoKTsKICAgIGlmIChpc3NldCgkcHJlUG9zdEVsZUFyWyRwYXJlbnRFbGVdKSkgewogICAgICBlY2hvIHN0cl9yZXBlYXQoJHBhZFN0ciwgKyskbik7CiAgICB9CiAgICBlY2hvIGx0cmltKGFycmF5X3NoaWZ0KCRlbGVBcikpOwogICAgZm9yICgkaT0tMSwgJGo9Y291bnQoJGVsZUFyKTsgKyskaTwkajspIHsKICAgICAgJHJlc3QgPSAnJzsKICAgICAgbGlzdCgkdGFnLCAkcmVzdCkgPSBleHBsb2RlKCc+JywgJGVsZUFyWyRpXSk7CiAgICAgICRvcGVuID0gJHRhZ1swXSA9PSAnLycgPyAwIDogKHN1YnN0cigkdGFnLCAtMSkgPT0gJy8nID8gMSA6ICgkdGFnWzBdICE9ICchJyA/IDIgOiAtMSkpOwogICAgICAkZWxlID0gISRvcGVuID8gbHRyaW0oJHRhZywgJy8nKSA6ICgkb3BlbiA+IDAgPyBzdWJzdHIoJHRhZywgMCwgc3RyY3NwbigkdGFnLCAnICcpKSA6IDApOwogICAgICAkdGFnID0gIjwkdGFnPiI7CiAgICAgIGlmIChpc3NldCgkcHJlUG9zdEVsZUFyWyRlbGVdKSkgewogICAgICAgIGlmICghJG9wZW4pIHsKICAgICAgICAgIGlmICgkbikgewogICAgICAgICAgICBlY2hvICJcbiIsIHN0cl9yZXBlYXQoJHBhZFN0ciwgLS0kbiksICIkdGFnXG4iLCBzdHJfcmVwZWF0KCRwYWRTdHIsICRuKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICsrJGxlYWROOwogICAgICAgICAgICBvYl9lbmRfY2xlYW4oKTsKICAgICAgICAgICAgY29udGludWUgMjsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgZWNobyAiXG4iLCBzdHJfcmVwZWF0KCRwYWRTdHIsICRuKSwgIiR0YWdcbiIsIHN0cl9yZXBlYXQoJHBhZFN0ciwgKCRvcGVuICE9IDEgPyArKyRuIDogJG4pKTsKICAgICAgICB9CiAgICAgICAgZWNobyAkcmVzdDsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICAkcGFkID0gIlxuIi4gc3RyX3JlcGVhdCgkcGFkU3RyLCAkbik7CiAgICAgIGlmIChpc3NldCgkcHJlT3BlblBvc3RDbG9zZUVsZUFyWyRlbGVdKSkgewogICAgICAgIGlmICghJG9wZW4pIHsKICAgICAgICAgIGVjaG8gJHRhZywgJHBhZCwgJHJlc3Q7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVjaG8gJHBhZCwgJHRhZywgJHJlc3Q7CiAgICAgICAgfQogICAgICB9IGVsc2VpZiAoaXNzZXQoJHByZUVsZUFyWyRlbGVdKSkgewogICAgICAgIGVjaG8gJHBhZCwgJHRhZywgJHJlc3Q7CiAgICAgIH0gZWxzZWlmIChpc3NldCgkcG9zdENsb3NlRWxlQXJbJGVsZV0pKSB7CiAgICAgICAgZWNobyAkdGFnLCAkcGFkLCAkcmVzdDsKICAgICAgfSBlbHNlaWYgKCEkZWxlKSB7CiAgICAgICAgZWNobyAkcGFkLCAkdGFnLCAkcGFkLCAkcmVzdDsKICAgICAgfSBlbHNlIHsKICAgICAgICBlY2hvICR0YWcsICRyZXN0OwogICAgICB9CiAgICB9CiAgICAkZG9QYWQgPSAwOwogIH0KICAkdCA9IHN0cl9yZXBsYWNlKGFycmF5KCJcbiAiLCAiIFxuIiksICJcbiIsIHByZWdfcmVwbGFjZSgnYFtcbl1ccyo/W1xuXStgJywgIlxuIiwgb2JfZ2V0X2NvbnRlbnRzKCkpKTsKICBvYl9lbmRfY2xlYW4oKTsKICBpZiAoKCRuZXdsaW5lID0gc3RycG9zKCIgJGZvcm1hdCIsICdyJykgPyAoc3RycG9zKCIgJGZvcm1hdCIsICduJykgPyAiXHJcbiIgOiAiXHIiKSA6IDApKSB7CiAgICAkdCA9IHN0cl9yZXBsYWNlKCJcbiIsICRuZXdsaW5lLCAkdCk7CiAgfQogIHJldHVybiBzdHJfcmVwbGFjZShhcnJheSgiXHgwMSIsICJceDAyIiwgIlx4MDMiLCAiXHgwNCIsICJceDA1IiwgIlx4MDciKSwgYXJyYXkoJzwnLCAnPicsICJcbiIsICJcciIsICJcdCIsICcgJyksICR0KTsKfQoKLyoqCiAqIEhhbmRsZSBVUkwgdG8gY29udmVydCB0byByZWxhdGl2ZS9hYnNvbHV0ZSB0eXBlLAogKiBibG9jayBzY2hlbWUsIG9yIGFkZCBhbnRpLXNwYW0gdGV4dC4KICoKICogQHBhcmFtICBtaXhlZCAgJHVybCAgVVJMIHN0cmluZywgb3IgYXJyYXkgd2l0aCBVUkwgdmFsdWUgKGlmICRhdHRyIGlzIG51bGwpLgogKiBAcGFyYW0gIG1peGVkICAkYXR0ciBBdHRyaWJ1dGUgbmFtZSBzdHJpbmcsIG9yIG51bGwgKGlmICR1cmwgaXMgYXJyYXkpLgogKiBAcmV0dXJuIHN0cmluZyAgICAgICBXaXRoIFVSTCBhZnRlciBhbnkgY29udmVyc2lvbi9vYmZ1c2NhdGlvbi4KICovCmZ1bmN0aW9uIGhsX3VybCgkdXJsLCAkYXR0cj1udWxsKQp7CiAgZ2xvYmFsICRDOwogICRwcmVVcmwgPSAkcG9zdFVybCA9ICcnOwogIHN0YXRpYyAkYmxvY2tlciA9ICdkZW5pZWQ6JzsKICBpZiAoJGF0dHIgPT0gbnVsbCkgeyAvLyBzdHlsZSBhdHRyaWJ1dGUgdmFsdWUKICAgICRhdHRyID0gJ3N0eWxlJzsKICAgICRwcmVVcmwgPSAkdXJsWzFdOwogICAgJHBvc3RVcmwgPSAkdXJsWzNdOwogICAgJHVybCA9IHRyaW0oJHVybFsyXSk7CiAgfQogICRva1NjaGVtZUFyID0gaXNzZXQoJENbJ3NjaGVtZXMnXVskYXR0cl0pID8gJENbJ3NjaGVtZXMnXVskYXR0cl0gOiAkQ1snc2NoZW1lcyddWycqJ107CiAgaWYgKGlzc2V0KCRva1NjaGVtZUFyWychJ10pICYmIHN1YnN0cigkdXJsLCAwLCA3KSAhPSAkYmxvY2tlcikgewogICAgJHVybCA9ICJ7JGJsb2NrZXJ9eyR1cmx9IjsKICB9CiAgaWYgKGlzc2V0KCRva1NjaGVtZUFyWycqJ10pCiAgICAgIHx8ICFzdHJjc3BuKCR1cmwsICcjPzsnKQogICAgICB8fCBzdWJzdHIoJHVybCwgMCwgc3RybGVuKCRibG9ja2VyKSkgPT0gJGJsb2NrZXIKICApIHsKICAgIHJldHVybiAieyRwcmVVcmx9eyR1cmx9eyRwb3N0VXJsfSI7CiAgfQogIGlmIChwcmVnX21hdGNoKCdgXihbXjo/W0AhJCgpKiw9L1wnXF1dKz8pKDp8JigjKDU4fHgzYSl8Y29sb24pO3wlM2F8XFxcXDB7MCw0fTNhKS5gaScsICR1cmwsICRtKQogICAgICAmJiAhaXNzZXQoJG9rU2NoZW1lQXJbc3RydG9sb3dlcigkbVsxXSldKSAvLyBTcGVjaWFsIGNyYWZ0aW5nIHN1Z2dlc3RzIG1hbGljZQogICkgewogICAgcmV0dXJuICJ7JHByZVVybH17JGJsb2NrZXJ9eyR1cmx9eyRwb3N0VXJsfSI7CiAgfQogIGlmICgkQ1snYWJzX3VybCddKSB7CiAgICBpZiAoJENbJ2Fic191cmwnXSA9PSAtMSAmJiBzdHJwb3MoJHVybCwgJENbJ2Jhc2VfdXJsJ10pID09PSAwKSB7IC8vIE1ha2UgVVJMIHJlbGF0aXZlCiAgICAgICR1cmwgPSBzdWJzdHIoJHVybCwgc3RybGVuKCRDWydiYXNlX3VybCddKSk7CiAgICB9IGVsc2VpZiAoZW1wdHkoJG1bMV0pKSB7IC8vIE1ha2UgVVJMIGFic29sdXRlCiAgICAgIGlmIChzdWJzdHIoJHVybCwgMCwgMikgPT0gJy8vJykgewogICAgICAgICR1cmwgPSBzdWJzdHIoJENbJ2Jhc2VfdXJsJ10sIDAsIHN0cnBvcygkQ1snYmFzZV91cmwnXSwgJzonKSArIDEpLiAkdXJsOwogICAgICB9IGVsc2VpZiAoJHVybFswXSA9PSAnLycpIHsKICAgICAgICAkdXJsID0gcHJlZ19yZXBsYWNlKCdgKF4uKz86Ly9bXi9dKykoLiopYCcsICckMScsICRDWydiYXNlX3VybCddKS4gJHVybDsKICAgICAgfSBlbHNlaWYgKHN0cmNzcG4oJHVybCwgJy4vJykpIHsKICAgICAgICAkdXJsID0gJENbJ2Jhc2VfdXJsJ10uICR1cmw7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcHJlZ19tYXRjaCgnYF4oW2EtekEtWlxkXC0rLl0rOi8vW14vXSspKC4qKWAnLCAkQ1snYmFzZV91cmwnXSwgJG0pOwogICAgICAgICR1cmwgPSBwcmVnX3JlcGxhY2UoJ2AoPzw9LylcLi9gJywgJycsICRtWzJdLiAkdXJsKTsKICAgICAgICB3aGlsZSAocHJlZ19tYXRjaCgnYCg/PD0vKShbXi9dezMsfXxbXi8uXSs/fFwuW14vLl18W14vLl1cLikvXC5cLi9gJywgJHVybCkpIHsKICAgICAgICAgICR1cmwgPSBwcmVnX3JlcGxhY2UoJ2AoPzw9LykoW14vXXszLH18W14vLl0rP3xcLlteLy5dfFteLy5dXC4pL1wuXC4vYCcsICcnLCAkdXJsKTsKICAgICAgICB9CiAgICAgICAgJHVybCA9ICRtWzFdLiAkdXJsOwogICAgICB9CiAgICB9CiAgfQogIHJldHVybiAieyRwcmVVcmx9eyR1cmx9eyRwb3N0VXJsfSI7Cn0KCi8qKgogKiBSZXBvcnQgdmVyc2lvbi4KICoKICogQHJldHVybiBzdHJpbmcgVmVyc2lvbi4KICovCmZ1bmN0aW9uIGhsX3ZlcnNpb24oKQp7CiAgcmV0dXJuICcxLjIuMTUnOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/http</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/http/class.http.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBIVFRQIENsYXNzCiAqCiAqIFRoaXMgaXMgYSB3cmFwcGVyIEhUVFAgY2xhc3MgdGhhdCB1c2VzIGVpdGhlciBjVVJMIG9yIGZzb2Nrb3BlbiB0bwogKiBoYXJ2ZXN0IHJlc291cmNlcyBmcm9tIHdlYi4gVGhpcyBjYW4gYmUgdXNlZCB3aXRoIHNjcmlwdHMgdGhhdCBuZWVkCiAqIGEgd2F5IHRvIGNvbW11bmljYXRlIHdpdGggdmFyaW91cyBBUElzIHdobyBzdXBwb3J0IFJFU1QuCiAqCiAqIEBhdXRob3IgICAgICBNZCBFbXJhbiBIYXNhbiA8cGhwZm91ckBnbWFpbC5jb20+CiAqIEBwYWNrYWdlICAgICBIVFRQIExpYnJhcnkKICogQGNvcHlyaWdodCAgIDIwMDctMjAwOCBNZCBFbXJhbiBIYXNhbgogKiBAbGluayAgICAgICAgaHR0cDovL3d3dy5waHBmb3VyLmNvbS9saWIvaHR0cAogKiBAc2luY2UgICAgICAgVmVyc2lvbiAwLjEKICoKICogTW9kaWZpZWQgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQogKiBSZW5hbWVkIHRoZSBjbGFzcyB0byBjbXNfaHR0cF9yZXF1ZXN0CiAqIEZpeGVkIHNvbWUgYnVncy4KICogaW5kZW50YXRpb24gdG8gbXkgc3R5bGUKICogbW9kaWZpZWQgc28gdGhhdCB3aGVuIHVzaW5nIGN1cmwgYSB0bXAgZmlsZSBpcyB1c2VkIChsb2NhdGlvbiBpcyBDTVNNUyBzcGVjaWZpYykgdG8gYmV0dGVyIGhhbmRsZSBsb2FkaW5nIGxhcmdlciBmaWxlcy4KICogdGhvdWdoIHRoaXMgY2xhc3MgaXMgc3RpbGwgc3ViamVjdCB0byBtZW1vcnkgbGltaXRhdGlvbnMuCiAqLwoKY2xhc3MgSHR0cAp7CiAgICAvKioKICAgICAqIENvbnRhaW5zIHRoZSB0YXJnZXQgVVJMCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkdGFyZ2V0OwoKICAgIC8qKgogICAgICogc29ja2V0CiAgICAgKgogICAgICovCiAgICBwcml2YXRlICRfc29ja2V0OwoKICAgIC8qKgogICAgICogQ29udGFpbnMgdGhlIHRhcmdldCBob3N0CiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkaG9zdDsKCiAgICAvKioKICAgICAqIENvbnRhaW5zIHRoZSB0YXJnZXQgcG9ydAogICAgICoKICAgICAqIEB2YXIgaW50ZWdlcgogICAgICovCiAgICBwcml2YXRlICRwb3J0OwoKICAgIC8qKgogICAgICogQ29udGFpbnMgdGhlIHRhcmdldCBwYXRoCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkcGF0aDsKCiAgICAvKioKICAgICAqIENvbnRhaW5zIHRoZSB0YXJnZXQgc2NoZW1hCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkc2NoZW1hOwoKICAgIC8qKgogICAgICogQ29udGFpbnMgdGhlIGh0dHAgbWV0aG9kIChHRVQgb3IgUE9TVCkKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRtZXRob2Q7CgogICAgLyoqCiAgICAgKiBDb250YWlucyByYXcgcG9zdCBkYXRhCiAgICAgKgogICAgICogQHZhciBzdHIKICAgICAqLwogICAgcHJpdmF0ZSAkcmF3UG9zdERhdGE7CgogICAgLyoqCiAgICAgKiBDb250YWlucyB0aGUgcGFyYW1ldGVycyBmb3IgcmVxdWVzdAogICAgICoKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkcGFyYW1zOwoKICAgIC8qKgogICAgICogQ29udGFpbnMgdGhlIGNvb2tpZXMgZm9yIHJlcXVlc3QKICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJGNvb2tpZXM7CgogICAgLyoqCiAgICAgKiBDb250YWlucyB0aGUgY29va2llcyByZXRyaWV2ZWQgZnJvbSByZXNwb25zZQogICAgICoKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkX2Nvb2tpZXM7CgogICAgLyoqCiAgICAgKiBOdW1iZXIgb2Ygc2Vjb25kcyB0byB0aW1lb3V0CiAgICAgKgogICAgICogQHZhciBpbnRlZ2VyCiAgICAgKi8KICAgIHByaXZhdGUgJHRpbWVvdXQ7CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIHRvIHVzZSBjVVJMIG9yIG5vdAogICAgICoKICAgICAqIEB2YXIgYm9vbGVhbgogICAgICovCiAgICBwcml2YXRlICR1c2VDdXJsOwoKICAgIC8qKgogICAgICogQ29udGFpbnMgdGhlIHJlZmVycmVyIFVSTAogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJHJlZmVycmVyOwoKICAgIC8qKgogICAgICogQ29udGFpbnMgdGhlIFVzZXIgYWdlbnQgc3RyaW5nCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkdXNlckFnZW50OwoKICAgIC8qKgogICAgICogQ29udGFpbnMgdGhlIGNvb2tpZSBwYXRoICh0byBiZSB1c2VkIHdpdGggY1VSTCkKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRjb29raWVQYXRoOwoKICAgIC8qKgogICAgICogV2hldGhlciB0byB1c2UgY29va2llIGF0IGFsbAogICAgICoKICAgICAqIEB2YXIgYm9vbGVhbgogICAgICovCiAgICBwcml2YXRlICR1c2VDb29raWU7CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIHRvIHN0b3JlIGNvb2tpZSBmb3Igc3Vic2VxdWVudCByZXF1ZXN0cwogICAgICoKICAgICAqIEB2YXIgYm9vbGVhbgogICAgICovCiAgICBwcml2YXRlICRzYXZlQ29va2llOwoKICAgIC8qKgogICAgICogQ29udGFpbnMgdGhlIFVzZXJuYW1lIChmb3IgYXV0aGVudGljYXRpb24pCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkdXNlcm5hbWU7CgogICAgLyoqCiAgICAgKiBDb250YWlucyB0aGUgUGFzc3dvcmQgKGZvciBhdXRoZW50aWNhdGlvbikKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRwYXNzd29yZDsKCiAgICAvKioKICAgICAqIENvbnRhaW5zIHRoZSBmZXRjaGVkIHdlYiBzb3VyY2UKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRyZXN1bHQ7CgogICAgLyoqCiAgICAgKiBDb250YWlucyB0aGUgbGFzdCBoZWFkZXJzCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkaGVhZGVyczsKCiAgICAvKioKICAgICAqIENvbnRhaW5zIHRoZSBsYXN0IGNhbGwncyBodHRwIHN0YXR1cyBjb2RlCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkc3RhdHVzOwoKICAgIC8qKgogICAgICogV2hldGhlciB0byBmb2xsb3cgaHR0cCByZWRpcmVjdCBvciBub3QKICAgICAqCiAgICAgKiBAdmFyIGJvb2xlYW4KICAgICAqLwogICAgcHJpdmF0ZSAkcmVkaXJlY3Q7CgogICAgLyoqCiAgICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcmVkaXJlY3QgdG8gZm9sbG93CiAgICAgKgogICAgICogQHZhciBpbnRlZ2VyCiAgICAgKi8KICAgIHByaXZhdGUgJG1heFJlZGlyZWN0OwoKICAgIC8qKgogICAgICogVGhlIGN1cnJlbnQgbnVtYmVyIG9mIHJlZGlyZWN0cwogICAgICoKICAgICAqIEB2YXIgaW50ZWdlcgogICAgICovCiAgICBwcml2YXRlICRjdXJSZWRpcmVjdDsKCiAgICAvKioKICAgICAqIENvbnRhaW5zIGFueSBlcnJvciBvY2N1cnJlZAogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGVycm9yOwoKICAgIC8qKgogICAgICogU3RvcmUgdGhlIG5leHQgdG9rZW4KICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRuZXh0VG9rZW47CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIHRvIGtlZXAgZGVidWcgbWVzc2FnZXMKICAgICAqCiAgICAgKiBAdmFyIGJvb2xlYW4KICAgICAqLwogICAgcHJpdmF0ZSAkZGVidWc7CgogICAgLyoqCiAgICAgKiBTdG9yZXMgb3B0aW9uYWwgaHR0cCBoZWFkZXJzCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRoZWFkZXJBcnJheTsKCiAgICAvKioKICAgICAqIFN0b3JlcyB0aGUgZGVidWcgbWVzc2FnZXMKICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKiBAdG9kbyB3aWxsIGtlZXAgZGVidWcgbWVzc2FnZXMKICAgICAqLwogICAgcHJpdmF0ZSAkZGVidWdNc2c7CgogICAgLyoqCiAgICAgKiBTdG9yZXMgcHJveHkgaW5mb3JtYXRpb24gKGhvc3Q6cG9ydCkKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICRwcm94eTsKCiAgICAvKioKICAgICAqIFN0b3JlcyBvcHRpb25zCiAgICAgKgogICAgICogQGlnbm9yZQogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcml2YXRlICRfb3B0aW9uczsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdG9yIGZvciBpbml0aWFsaXppbmcgdGhlIGNsYXNzIHdpdGggZGVmYXVsdCB2YWx1ZXMuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkb3B0cyA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPmNsZWFyKCk7CiAgICAgICAgaWYoIGlzX2FycmF5KCRvcHRzKSAmJiBjb3VudCgkb3B0cykgKSAkdGhpcy0+aW5pdGlhbGl6ZSgkb3B0cyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBJbml0aWFsaXplIHByZWZlcmVuY2VzCiAgICAgKgogICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgY29uZmlnIHZhbHVlcyBhbmQKICAgICAqIHdpbGwgaW5pdGlhbGl6ZSB0aGUgY2xhc3MgdmFyaWFibGVzIHVzaW5nIHRoZW0uCiAgICAgKgogICAgICogRXhhbXBsZSB1c2U6CiAgICAgKgogICAgICogPHByZT4KICAgICAqICRodHRwQ29uZmlnWydtZXRob2QnXSAgICAgPSAnR0VUJzsKICAgICAqICRodHRwQ29uZmlnWyd0YXJnZXQnXSAgICAgPSAnaHR0cDovL3d3dy5zb21lZG9tYWluLmNvbS9pbmRleC5odG1sJzsKICAgICAqICRodHRwQ29uZmlnWydyZWZlcnJlciddICAgPSAnaHR0cDovL3d3dy5zb21lZG9tYWluLmNvbSc7CiAgICAgKiAkaHR0cENvbmZpZ1sndXNlcl9hZ2VudCddID0gJ015IENyYXdsZXInOwogICAgICogJGh0dHBDb25maWdbJ3RpbWVvdXQnXSAgICA9ICczMCc7CiAgICAgKiAkaHR0cENvbmZpZ1sncGFyYW1zJ10gICAgID0gYXJyYXkoJ3ZhcjEnID0+ICd0ZXN0dmFsdWUnLCAndmFyMicgPT4gJ3NvbWV2YWx1ZScpOwogICAgICoKICAgICAqICRodHRwID0gbmV3IEh0dHAoKTsKICAgICAqICRodHRwLT5pbml0aWFsaXplKCRodHRwQ29uZmlnKTsKICAgICAqIDwvcHJlPgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSBDb25maWcgdmFsdWVzIGFzIGFzc29jaWF0aXZlIGFycmF5CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgkY29uZmlnID0gYXJyYXkoKSkKICAgIHsKICAgICAgICAkdGhpcy0+Y2xlYXIoKTsKICAgICAgICBmb3JlYWNoICgkY29uZmlnIGFzICRrZXkgPT4gJHZhbCkgewogICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPiRrZXkpKSB7CiAgICAgICAgICAgICAgICAkbWV0aG9kID0gJ3NldCcgLiB1Y2ZpcnN0KHN0cl9yZXBsYWNlKCdfJywgJycsICRrZXkpKTsKCiAgICAgICAgICAgICAgICBpZiAobWV0aG9kX2V4aXN0cygkdGhpcywgJG1ldGhvZCkpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+JG1ldGhvZCgkdmFsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYoIHByb3BlcnR5X2V4aXN0cygkdGhpcywka2V5KSApIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+JGtleSA9ICR2YWw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X29wdGlvbnNbJGtleV0gPSAkdmFsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ2xlYXIgRXZlcnl0aGluZwogICAgICoKICAgICAqIENsZWFycyBhbGwgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGNsYXNzIGFuZCBzZXRzIHRoZSBvYmplY3QgdG8KICAgICAqIHRoZSBiZWdpbm5pbmcgc3RhdGUuIFZlcnkgaGFuZHkgaWYgeW91IGFyZSBkb2luZyBzdWJzZXF1ZW50IGNhbGxzCiAgICAgKiB3aXRoIGRpZmZlcmVudCBkYXRhLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBmdW5jdGlvbiBjbGVhcigpCiAgICB7CiAgICAgICAgLy8gU2V0IHRoZSByZXF1ZXN0IGRlZmF1bHRzCiAgICAgICAgJHRoaXMtPmhvc3QgICAgICAgICA9ICcnOwogICAgICAgICR0aGlzLT5wb3J0ICAgICAgICAgPSAwOwogICAgICAgICR0aGlzLT5wYXRoICAgICAgICAgPSAnJzsKICAgICAgICAkdGhpcy0+dGFyZ2V0ICAgICAgID0gJyc7CiAgICAgICAgJHRoaXMtPm1ldGhvZCAgICAgICA9ICdHRVQnOwogICAgICAgICR0aGlzLT5zY2hlbWEgICAgICAgPSAnaHR0cCc7CiAgICAgICAgJHRoaXMtPnBhcmFtcyAgICAgICA9IGFycmF5KCk7CiAgICAgICAgJHRoaXMtPmhlYWRlcnMgICAgICA9IGFycmF5KCk7CiAgICAgICAgJHRoaXMtPmNvb2tpZXMgICAgICA9IGFycmF5KCk7CiAgICAgICAgJHRoaXMtPl9jb29raWVzICAgICA9IGFycmF5KCk7CiAgICAgICAgJHRoaXMtPmhlYWRlckFycmF5ICA9IGFycmF5KCk7CiAgICAgICAgJHRoaXMtPnByb3h5ICAgICAgICA9IG51bGw7CgogICAgICAgIC8vIFNldCB0aGUgY29uZmlnIGRldGFpbHMKICAgICAgICAkdGhpcy0+ZGVidWcgICAgICAgID0gRkFMU0U7CiAgICAgICAgJHRoaXMtPmVycm9yICAgICAgICA9ICcnOwogICAgICAgICR0aGlzLT5zdGF0dXMgICAgICAgPSAwOwogICAgICAgICR0aGlzLT50aW1lb3V0ICAgICAgPSAnMjUnOwogICAgICAgICR0aGlzLT51c2VDdXJsICAgICAgPSBUUlVFOwogICAgICAgICR0aGlzLT5yZWZlcnJlciAgICAgPSAnJzsKICAgICAgICAkdGhpcy0+dXNlcm5hbWUgICAgID0gJyc7CiAgICAgICAgJHRoaXMtPnBhc3N3b3JkICAgICA9ICcnOwogICAgICAgICR0aGlzLT5yZWRpcmVjdCAgICAgPSBGQUxTRTsKICAgICAgICAkdGhpcy0+cmVzdWx0ICAgICAgID0gbnVsbDsKCiAgICAgICAgLy8gU2V0IHRoZSBjb29raWUgYW5kIGFnZW50IGRlZmF1bHRzCiAgICAgICAgJHRoaXMtPm5leHRUb2tlbiAgICA9ICcnOwogICAgICAgICR0aGlzLT51c2VDb29raWUgICAgPSBUUlVFOwogICAgICAgICR0aGlzLT5zYXZlQ29va2llICAgPSBUUlVFOwogICAgICAgICR0aGlzLT5tYXhSZWRpcmVjdCAgPSAzOwogICAgICAgICR0aGlzLT5jb29raWVQYXRoICAgPSBUTVBfQ0FDSEVfTE9DQVRJT04uJy9jbycubWQ1KGdldF9jbGFzcygpLnNlc3Npb25faWQoKSkuJy5kYXQnOyAvLyBieSBkZWZhdWx0LCB1c2UgYSBjb29raWUgZmlsZSB0aGF0IGlzIHVuaXF1ZSBvbmx5IHRvIHRoaXMgc2Vzc2lvbi4KICAgICAgICAkdGhpcy0+dXNlckFnZW50ICAgID0gJ01vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsgZW4tVVM7IHJ2OjEuOC4xLjYpIEdlY2tvLzIwMDcwNzI1IEZpcmVmb3gvMi4wLjAuOSc7CgogICAgICAgICR0aGlzLT5vcHRpb25zID0gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIENsZWFyIGFsbCBjb29raWVzCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAYXV0aG9yIFJvYmVydCBDYW1wYmVsbCAoY2FsZ3V5MTAwMEBnbWFpbC5jb20pCiAgICAgKi8KICAgIGZ1bmN0aW9uIHJlc2V0Q29va2llcygpCiAgICB7CiAgICAgIGlmKCAkdGhpcy0+Y29va2llUGF0aCApIEB1bmxpbmsoJHRoaXMtPmNvb2tpZVBhdGgpOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRhcmdldCBVUkwKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIFVSTCBvZiB0YXJnZXQgcmVzb3VyY2UKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBmdW5jdGlvbiBzZXRUYXJnZXQoJHVybCkKICAgIHsKICAgICAgICBpZiAoJHVybCkKICAgICAgICB7CiAgICAgICAgICAgICR0aGlzLT50YXJnZXQgPSAkdXJsOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNldCBodHRwIG1ldGhvZAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgSFRUUCBtZXRob2QgdG8gdXNlIChHRVQgb3IgUE9TVCkKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBmdW5jdGlvbiBzZXRNZXRob2QoJG1ldGhvZCkKICAgIHsKICAgICAgICBpZiAoJG1ldGhvZCA9PSAnR0VUJyB8fCAkbWV0aG9kID09ICdQT1NUJykKICAgICAgICB7CiAgICAgICAgICAgICR0aGlzLT5tZXRob2QgPSAkbWV0aG9kOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNldCByZWZlcnJlciBVUkwKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIFVSTCBvZiByZWZlcnJlciBwYWdlCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgZnVuY3Rpb24gc2V0UmVmZXJyZXIoJHJlZmVycmVyKQogICAgewogICAgICAgIGlmICgkcmVmZXJyZXIpCiAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+cmVmZXJyZXIgPSAkcmVmZXJyZXI7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogU2V0IFVzZXIgYWdlbnQgc3RyaW5nCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyBGdWxsIHVzZXIgYWdlbnQgc3RyaW5nCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgZnVuY3Rpb24gc2V0VXNlcmFnZW50KCRhZ2VudCkKICAgIHsKICAgICAgICBpZiAoJGFnZW50KQogICAgICAgIHsKICAgICAgICAgICAgJHRoaXMtPnVzZXJBZ2VudCA9ICRhZ2VudDsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGltZW91dCBvZiBleGVjdXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ZWdlciBUaW1lb3V0IGRlbGF5IGluIHNlY29uZHMKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBmdW5jdGlvbiBzZXRUaW1lb3V0KCRzZWNvbmRzKQogICAgewogICAgICAgIGlmICgkc2Vjb25kcyA+IDApCiAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+dGltZW91dCA9ICRzZWNvbmRzOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNldCBjb29raWUgcGF0aCAoY1VSTCBvbmx5KQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgRmlsZSBsb2NhdGlvbiBvZiBjb29raWVqYXIKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBmdW5jdGlvbiBzZXRDb29raWVwYXRoKCRwYXRoKQogICAgewogICAgICAgIGlmICgkcGF0aCkgJHRoaXMtPmNvb2tpZVBhdGggPSAkcGF0aDsKICAgIH0KCiAgICBmdW5jdGlvbiBzZXRSYXdQb3N0RGF0YSgkZGF0YSkKICAgIHsKICAgICAgICAkdGhpcy0+cmF3UG9zdERhdGEgPSAkZGF0YTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCByZXF1ZXN0IHBhcmFtZXRlcnMKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgQWxsIHRoZSBwYXJhbWV0ZXJzIGZvciBHRVQgb3IgUE9TVAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldFBhcmFtcygkZGF0YUFycmF5KQogICAgewogICAgICAgIGlmKCAhaXNfYXJyYXkoJGRhdGFBcnJheSkgKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRSYXdQb3N0RGF0YSgkZGF0YUFycmF5KTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoaXNfYXJyYXkoJGRhdGFBcnJheSkpIHsKICAgICAgICAgICAgJHRoaXMtPnBhcmFtcyA9IGFycmF5X21lcmdlKCR0aGlzLT5wYXJhbXMsICRkYXRhQXJyYXkpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNldCBiYXNpYyBodHRwIGF1dGhlbnRpY2F0aW9uIHJlYWxtCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyBVc2VybmFtZSBmb3IgYXV0aGVudGljYXRpb24KICAgICAqIEBwYXJhbSBzdHJpbmcgUGFzc3dvcmQgZm9yIGF1dGhlbnRpY2F0aW9uCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgZnVuY3Rpb24gc2V0QXV0aCgkdXNlcm5hbWUsICRwYXNzd29yZCkKICAgIHsKICAgICAgICBpZiAoIWVtcHR5KCR1c2VybmFtZSkgJiYgIWVtcHR5KCRwYXNzd29yZCkpIHsKICAgICAgICAgICAgJHRoaXMtPnVzZXJuYW1lID0gJHVzZXJuYW1lOwogICAgICAgICAgICAkdGhpcy0+cGFzc3dvcmQgPSAkcGFzc3dvcmQ7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogU2V0IG1heGltdW0gbnVtYmVyIG9mIHJlZGlyZWN0aW9uIHRvIGZvbGxvdwogICAgICoKICAgICAqIEBwYXJhbSBpbnRlZ2VyIE1heGltdW0gbnVtYmVyIG9mIHJlZGlyZWN0cwogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldE1heHJlZGlyZWN0KCR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoIWVtcHR5KCR2YWx1ZSkpICR0aGlzLT5tYXhSZWRpcmVjdCA9ICR2YWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCByZXF1ZXN0IHBhcmFtZXRlcnMKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIE5hbWUgb2YgdGhlIHBhcmFtZXRlcgogICAgICogQHBhcmFtIHN0cmluZyBWYWx1ZSBvZiB0aGUgcGFyYW1ldGVyCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgZnVuY3Rpb24gYWRkUGFyYW0oJG5hbWUsICR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoIWVtcHR5KCRuYW1lKSAmJiAhZW1wdHkoJHZhbHVlKSkgJHRoaXMtPnBhcmFtc1skbmFtZV0gPSAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgYSBjb29raWUgdG8gdGhlIHJlcXVlc3QKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIE5hbWUgb2YgY29va2llCiAgICAgKiBAcGFyYW0gc3RyaW5nIFZhbHVlIG9mIGNvb2tpZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkZENvb2tpZSgkbmFtZSwgJHZhbHVlKQogICAgewogICAgICAgIGlmICghZW1wdHkoJG5hbWUpICYmICFlbXB0eSgkdmFsdWUpKQogICAgICAgIHsKICAgICAgICAgICAgJHRoaXMtPmNvb2tpZXNbJG5hbWVdID0gJHZhbHVlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFdoZXRoZXIgdG8gdXNlIGNVUkwgb3Igbm90CiAgICAgKgogICAgICogQHBhcmFtIGJvb2xlYW4gV2hldGhlciB0byB1c2UgY1VSTCBvciBub3QKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBmdW5jdGlvbiB1c2VDdXJsKCR2YWx1ZSA9IFRSVUUpCiAgICB7CiAgICAgICAgaWYgKGlzX2Jvb2woJHZhbHVlKSkKICAgICAgICB7CiAgICAgICAgICAgICR0aGlzLT51c2VDdXJsID0gJHZhbHVlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFdoZXRoZXIgdG8gdXNlIGNvb2tpZXMgb3Igbm90CiAgICAgKgogICAgICogQHBhcmFtIGJvb2xlYW4gV2hldGhlciB0byB1c2UgY29va2llcyBvciBub3QKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBmdW5jdGlvbiB1c2VDb29raWUoJHZhbHVlID0gVFJVRSkKICAgIHsKICAgICAgICBpZiAoaXNfYm9vbCgkdmFsdWUpKQogICAgICAgIHsKICAgICAgICAgICAgJHRoaXMtPnVzZUNvb2tpZSA9ICR2YWx1ZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIHRvIHNhdmUgcGVyc2lzdGVudCBjb29raWVzIGluIHN1YnNlcXVlbnQgY2FsbHMKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbGVhbiBXaGV0aGVyIHRvIHNhdmUgcGVyc2lzdGVudCBjb29raWVzIG9yIG5vdAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNhdmVDb29raWUoJHZhbHVlID0gVFJVRSkKICAgIHsKICAgICAgICBpZiAoaXNfYm9vbCgkdmFsdWUpKQogICAgICAgIHsKICAgICAgICAgICAgJHRoaXMtPnNhdmVDb29raWUgPSAkdmFsdWU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogV2hldGhlciB0byBmb2xsb3cgSFRUUCByZWRpcmVjdHMKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbGVhbiBXaGV0aGVyIHRvIGZvbGxvdyBIVFRQIHJlZGlyZWN0cyBvciBub3QKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBmdW5jdGlvbiBmb2xsb3dSZWRpcmVjdHMoJHZhbHVlID0gVFJVRSkKICAgIHsKICAgICAgICBpZiAoaXNfYm9vbCgkdmFsdWUpKQogICAgICAgIHsKICAgICAgICAgICAgJHRoaXMtPnJlZGlyZWN0ID0gJHZhbHVlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdldCBleGVjdXRpb24gcmVzdWx0IGJvZHkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBvdXRwdXQgb2YgZXhlY3V0aW9uCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFJlc3VsdCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgZXhlY3V0aW9uIHJlc3VsdCBoZWFkZXJzCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBsYXN0IGhlYWRlcnMgb2YgZXhlY3V0aW9uCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldEhlYWRlcnMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aGVhZGVyczsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBleGVjdXRpb24gc3RhdHVzIGNvZGUKICAgICAqCiAgICAgKiBAcmV0dXJuIGludGVnZXIgbGFzdCBodHRwIHN0YXR1cyBjb2RlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFN0YXR1cygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdGF0dXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgbGFzdCBleGVjdXRpb24gZXJyb3IKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBsYXN0IGVycm9yIG1lc3NhZ2UgKGlmIGFueSkKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0RXJyb3IoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZXJyb3I7CiAgICB9CgogICAgLyoqCiAgICAgKiByZXF1ZXN0IEhlYWRlciBFeGlzdHM/CiAgICAgKi8KICAgIGZ1bmN0aW9uIHJlcXVlc3RIZWFkZXJFeGlzdHMoJGtleSkKICAgIHsKICAgICAgICBpZiggIWlzX2FycmF5KCR0aGlzLT5oZWFkZXJBcnJheSkgKSAkdGhpcy0+aGVhZGVyQXJyYXkgPSBhcnJheSgpOwogICAgICAgIGlmKCBzdHJwb3MoJGtleSwnOicpICE9PSBGQUxTRSApIHsKICAgICAgICAgICAgJHRtcCA9IGV4cGxvZGUoJzonLCRrZXkpOwogICAgICAgICAgICAka2V5ID0gdHJpbSgkdG1wWzBdKTsKICAgICAgICB9CiAgICAgICAgZm9yKCAkaSA9IDAsICRuID0gY291bnQoJHRoaXMtPmhlYWRlckFycmF5KTsgJGkgPCAkbjsgJGkrKyApIHsKICAgICAgICAgICAgJHRtcCA9IGV4cGxvZGUoJzonLCR0aGlzLT5oZWFkZXJBcnJheVskaV0sMSk7CiAgICAgICAgICAgICRrZXkyID0gdHJpbSgkdG1wWzBdKTsKICAgICAgICAgICAgaWYoICRrZXkyID09ICRrZXkgKSByZXR1cm4gVFJVRTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIGEgcmVxdWVzdCBoZWFkZXIKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkZFJlcXVlc3RIZWFkZXIoJHN0ciwkcHJlcGVuZCA9IGZhbHNlKQogICAgewogICAgICAgIGlmKCAhaXNfYXJyYXkoJHRoaXMtPmhlYWRlckFycmF5KSApICR0aGlzLT5oZWFkZXJBcnJheSA9IGFycmF5KCk7CgogICAgICAgICRmID0gMDsKICAgICAgICBpZiggc3RycG9zKCRzdHIsJzonKSAhPT0gRkFMU0UgKSB7CiAgICAgICAgICAgICR0bXAgPSBleHBsb2RlKCc6Jywkc3RyLDEpOwogICAgICAgICAgICAka2V5ID0gdHJpbSgkdG1wWzBdKTsKICAgICAgICAgICAgZm9yKCAkaSA9IDAsICRuID0gY291bnQoJHRoaXMtPmhlYWRlckFycmF5KTsgJGkgPCAkbjsgJGkrKyApIHsKICAgICAgICAgICAgICAgICR0bXAgPSBleHBsb2RlKCc6JywkdGhpcy0+aGVhZGVyQXJyYXlbJGldLDEpOwogICAgICAgICAgICAgICAgJGtleTIgPSB0cmltKCR0bXBbMF0pOwogICAgICAgICAgICAgICAgaWYoICRrZXkyID09ICRrZXkgKQl7CiAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgYSBkdXBsaWNhdGUuCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmhlYWRlckFycmF5WyRpXSA9ICRzdHI7CiAgICAgICAgICAgICAgICAgICAgJGYgPSAxOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCAhJGYgKQl7CiAgICAgICAgICAgIGlmKCAkcHJlcGVuZCApIHsKICAgICAgICAgICAgICAgIGFycmF5X3Vuc2hpZnQoJHRoaXMtPmhlYWRlckFycmF5LCRzdHIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPmhlYWRlckFycmF5W10gPSAkc3RyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9pc0N1cmxTdWl0YWJsZSgpCiAgICB7CiAgICAgICAgc3RhdGljICRfY3VybGdvb2QgPSAtMTsKCiAgICAgICAgaWYoICRfY3VybGdvb2QgPT0gLTEgKSB7CiAgICAgICAgICAgICRfY3VybGdvb2QgPSAwOwogICAgICAgICAgICBpZiggaW5fYXJyYXkoJ2N1cmwnLGdldF9sb2FkZWRfZXh0ZW5zaW9ucygpKSApIHsKICAgICAgICAgICAgICAgIGlmKCBmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpICkJewogICAgICAgICAgICAgICAgICAgICR0bXAgPSBjdXJsX3ZlcnNpb24oKTsKICAgICAgICAgICAgICAgICAgICBpZiggaXNzZXQoJHRtcFsndmVyc2lvbiddKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHZlcnNpb25fY29tcGFyZSgkdG1wWyd2ZXJzaW9uJ10sJzcuMTkuNycpID49IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkX2N1cmxnb29kID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRfY3VybGdvb2Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlIGEgSFRUUCByZXF1ZXN0CiAgICAgKgogICAgICogRXhlY3V0ZXMgdGhlIGh0dHAgZmV0Y2ggdXNpbmcgYWxsIHRoZSBzZXQgcHJvcGVydGllcy4gSW50ZWxsZWdlbnRseQogICAgICogc3dpdGNoIHRvIGZzb2Nrb3BlbiBpZiBjVVJMIGlzIG5vdCBwcmVzZW50LiBBbmQgYmUgc21hcnQgdG8gZm9sbG93CiAgICAgKiByZWRpcmVjdHMgKGlmIGFza2VkIHNvKS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIFVSTCBvZiB0aGUgdGFyZ2V0IHBhZ2UgKG9wdGlvbmFsKQogICAgICogQHBhcmFtIHN0cmluZyBVUkwgb2YgdGhlIHJlZmVycmVyIHBhZ2UgKG9wdGlvbmFsKQogICAgICogQHBhcmFtIHN0cmluZyBUaGUgaHR0cCBtZXRob2QgKEdFVCBvciBQT1NUKSAob3B0aW9uYWwpCiAgICAgKiBAcGFyYW0gYXJyYXkgUGFyYW1ldGVyIGFycmF5IGZvciBHRVQgb3IgUE9TVCAob3B0aW9uYWwpCiAgICAgKiBAcmV0dXJuIHN0cmluZyByZXNwb25zZSBib2R5IG9mIHRoZSB0YXJnZXQgcGFnZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgkdGFyZ2V0ID0gJycsICRyZWZlcnJlciA9ICcnLCAkbWV0aG9kID0gJycsICRkYXRhID0gYXJyYXkoKSkKICAgIHsKICAgICAgICAvLyBQb3B1bGF0ZSB0aGUgcHJvcGVydGllcwogICAgICAgICR0aGlzLT50YXJnZXQgPSAoJHRhcmdldCkgPyAkdGFyZ2V0IDogJHRoaXMtPnRhcmdldDsKICAgICAgICAkdGhpcy0+bWV0aG9kID0gKCRtZXRob2QpID8gJG1ldGhvZCA6ICR0aGlzLT5tZXRob2Q7CgogICAgICAgICR0aGlzLT5yZWZlcnJlciA9ICgkcmVmZXJyZXIpID8gJHJlZmVycmVyIDogJHRoaXMtPnJlZmVycmVyOwoKICAgICAgICAvLyBBZGQgdGhlIG5ldyBwYXJhbXMKICAgICAgICBpZiAoaXNfYXJyYXkoJGRhdGEpICYmIGNvdW50KCRkYXRhKSA+IDApICR0aGlzLT5wYXJhbXMgPSBhcnJheV9tZXJnZSgkdGhpcy0+cGFyYW1zLCAkZGF0YSk7CgogICAgICAgIC8vIFByb2Nlc3MgZGF0YSwgaWYgcHJlc2VudGVkCiAgICAgICAgJHF1ZXJ5U3RyaW5nID0gJyc7CiAgICAgICAgaWYoJHRoaXMtPnJhd1Bvc3REYXRhKSB7CiAgICAgICAgICAgICRxdWVyeVN0cmluZyA9ICR0aGlzLT5yYXdQb3N0RGF0YTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZihpc19hcnJheSgkdGhpcy0+cGFyYW1zKSAmJiBjb3VudCgkdGhpcy0+cGFyYW1zKSA+IDApIHsKICAgICAgICAgICAgJHF1ZXJ5U3RyaW5nID0gaHR0cF9idWlsZF9xdWVyeSgkdGhpcy0+cGFyYW1zLCcnLCcmJyk7CiAgICAgICAgfQoKICAgICAgICAvLyBJZiBjVVJMIGlzIG5vdCBpbnN0YWxsZWQsIHdlJ2xsIGZvcmNlIGZzY29rb3BlbgogICAgICAgICR0aGlzLT51c2VDdXJsID0gJHRoaXMtPnVzZUN1cmwgJiYgJHRoaXMtPl9pc0N1cmxTdWl0YWJsZSgpOwoKICAgICAgICAvLyBHRVQgbWV0aG9kIGNvbmZpZ3VyYXRpb24KICAgICAgICBpZigkdGhpcy0+bWV0aG9kID09ICdHRVQnKSB7CiAgICAgICAgICAgIGlmKCRxdWVyeVN0cmluZyAhPSAnJykgJHRoaXMtPnRhcmdldCA9ICR0aGlzLT50YXJnZXQgLiAiPyIgLiAkcXVlcnlTdHJpbmc7CiAgICAgICAgfQoKICAgICAgICAvLyBQYXJzZSB0YXJnZXQgVVJMCiAgICAgICAgJHVybFBhcnNlZCA9IHBhcnNlX3VybCgkdGhpcy0+dGFyZ2V0KTsKICAgICAgICBpZiggJHRoaXMtPnBvcnQgPT0gMCAmJiBpc3NldCgkdXJsUGFyc2VkWydwb3J0J10pICYmICR1cmxQYXJzZWRbJ3BvcnQnXSA+IDAgKSAkdGhpcy0+cG9ydCA9ICR1cmxQYXJzZWRbJ3BvcnQnXTsKCiAgICAgICAgLy8gSGFuZGxlIFNTTCBjb25uZWN0aW9uIHJlcXVlc3QKICAgICAgICBpZiAoJHVybFBhcnNlZFsnc2NoZW1lJ10gPT0gJ2h0dHBzJykgewogICAgICAgICAgICAkdGhpcy0+aG9zdCA9ICR1cmxQYXJzZWRbJ2hvc3QnXTsKICAgICAgICAgICAgJHRoaXMtPnBvcnQgPSAoJHRoaXMtPnBvcnQgIT0gMCkgPyAkdGhpcy0+cG9ydCA6IDQ0MzsKICAgICAgICAgICAgJHRoaXMtPl9zb2NrZXQgPSAnc3NsOi8vJy4kdXJsUGFyc2VkWydob3N0J10uJzonLiR0aGlzLT5wb3J0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPmhvc3QgPSAkdXJsUGFyc2VkWydob3N0J107CiAgICAgICAgICAgICR0aGlzLT5wb3J0ID0gKCR0aGlzLT5wb3J0ICE9IDApID8gJHRoaXMtPnBvcnQgOiA4MDsKICAgICAgICAgICAgJHRoaXMtPl9zb2NrZXQgPSAndGNwOi8vJy4kdXJsUGFyc2VkWydob3N0J10uJzonLiR0aGlzLT5wb3J0OwogICAgICAgIH0KCiAgICAgICAgLy8gRmluYWxpemUgdGhlIHRhcmdldCBwYXRoCiAgICAgICAgJHRoaXMtPnBhdGggICA9IChpc3NldCgkdXJsUGFyc2VkWydwYXRoJ10pID8gJHVybFBhcnNlZFsncGF0aCddIDogJy8nKSAuIChpc3NldCgkdXJsUGFyc2VkWydxdWVyeSddKSA/ICc/JyAuICR1cmxQYXJzZWRbJ3F1ZXJ5J10gOiAnJyk7CiAgICAgICAgJHRoaXMtPnNjaGVtYSA9ICR1cmxQYXJzZWRbJ3NjaGVtZSddOwoKICAgICAgICAvLyBQYXNzIHRoZSByZXF1cmVkIGNvb2tpZXMKICAgICAgICAkdGhpcy0+X3Bhc3NDb29raWVzKCk7CgogICAgICAgIC8vIFByb2Nlc3MgY29va2llcywgaWYgcmVxdWVzdGVkCiAgICAgICAgJGNvb2tpZVN0cmluZyA9ICcnOwogICAgICAgIGlmKGlzX2FycmF5KCR0aGlzLT5jb29raWVzKSAmJiBjb3VudCgkdGhpcy0+Y29va2llcykgPiAwKSB7CiAgICAgICAgICAgIC8vIEdldCBhIGJsYW5rIHNsYXRlCiAgICAgICAgICAgICR0ZW1wU3RyaW5nICAgPSBhcnJheSgpOwoKICAgICAgICAgICAgLy8gQ29udmVydCBjb29raWVzYSBhcnJheSBpbnRvIGEgcXVlcnkgc3RyaW5nIChpZSBhbmltYWw9ZG9nJnNwb3J0PWJhc2ViYWxsKQogICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+Y29va2llcyBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgICAgICAgaWYoc3RybGVuKHRyaW0oJHZhbHVlKSkgPiAwKSAkdGVtcFN0cmluZ1tdID0gJGtleSAuICI9IiAuIHVybGVuY29kZSgkdmFsdWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkY29va2llU3RyaW5nID0gam9pbignJicsICR0ZW1wU3RyaW5nKTsKICAgICAgICB9CgogICAgICAgIC8vIERvIHdlIG5lZWQgdG8gdXNlIGNVUkwKICAgICAgICBpZiAoJHRoaXMtPnVzZUN1cmwpIHsKICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBQSFAgY1VSTCBoYW5kbGUKICAgICAgICAgICAgJGNoID0gY3VybF9pbml0KCk7CgogICAgICAgICAgICAvLyBHRVQgbWV0aG9kIGNvbmZpZ3VyYXRpb24KICAgICAgICAgICAgaWYoJHRoaXMtPm1ldGhvZCA9PSAnR0VUJykgewogICAgICAgICAgICAgICAgY3VybF9zZXRvcHQgKCRjaCwgQ1VSTE9QVF9IVFRQR0VULCBUUlVFKTsKICAgICAgICAgICAgICAgIGN1cmxfc2V0b3B0ICgkY2gsIENVUkxPUFRfUE9TVCwgRkFMU0UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFBPU1QgbWV0aG9kIGNvbmZpZ3VyYXRpb24KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBjdXJsX3NldG9wdCAoJGNoLCBDVVJMT1BUX1BPU1QsIFRSVUUpOwogICAgICAgICAgICAgICAgY3VybF9zZXRvcHQgKCRjaCwgQ1VSTE9QVF9IVFRQR0VULCBGQUxTRSk7CiAgICAgICAgICAgICAgICBjdXJsX3NldG9wdCAoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCBUUlVFKTsKICAgICAgICAgICAgICAgIGlmKCRxdWVyeVN0cmluZykgY3VybF9zZXRvcHQgKCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCAkcXVlcnlTdHJpbmcpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBCYXNpYyBBdXRoZW50aWNhdGlvbiBjb25maWd1cmF0aW9uCiAgICAgICAgICAgIGlmICgkdGhpcy0+dXNlcm5hbWUgJiYgJHRoaXMtPnBhc3N3b3JkKSBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVNFUlBXRCwgJHRoaXMtPnVzZXJuYW1lIC4gJzonIC4gJHRoaXMtPnBhc3N3b3JkKTsKCiAgICAgICAgICAgIGlmICgkdGhpcy0+cHJveHkpIGN1cmxfc2V0b3B0KCRjaCxDVVJMX1BST1hZLCR0aGlzLT5wcm94eSk7CgogICAgICAgICAgICAvLyBDdXN0b20gY29va2llIGNvbmZpZ3VyYXRpb24KICAgICAgICAgICAgaWYoJHRoaXMtPnVzZUNvb2tpZSkgewogICAgICAgICAgICAgICAgLy8gd2UgYXJlIHNlbmRpbmcgY29va2llcy4KICAgICAgICAgICAgICAgIGlmKCRjb29raWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICAgICBjdXJsX3NldG9wdCAoJGNoLCBDVVJMT1BUX0NPT0tJRSwgJGNvb2tpZVN0cmluZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09PS0lFRklMRSwgJHRoaXMtPmNvb2tpZVBhdGgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKCR0aGlzLT5zYXZlQ29va2llKSBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09PS0lFSkFSLCAgICAgICR0aGlzLT5jb29raWVQYXRoKTsgICAgLy8gU2F2ZSBjb29raWVzIGhlcmUuCgogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSEVBREVSLCAgICAgVFJVRSk7ICAgICAgICAgICAgICAgICAvLyBObyBuZWVkIG9mIGhlYWRlcnMKICAgICAgICAgICAgaWYoIGlzX2FycmF5KCR0aGlzLT5oZWFkZXJBcnJheSkgKSB7CiAgICAgICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsQ1VSTE9QVF9IVFRQSEVBREVSLCR0aGlzLT5oZWFkZXJBcnJheSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSEVBREVSLCAgICAgVFJVRSk7ICAgICAgICAgICAgICAgICAvLyBObyBuZWVkIG9mIGhlYWRlcnMKICAgICAgICAgICAgfQogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfTk9CT0RZLCAgICAgICAgIEZBTFNFKTsgICAgICAgICAgICAgICAgLy8gUmV0dXJuIGJvZHkKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1RJTUVPVVQsICAgICAgICAkdGhpcy0+dGltZW91dCk7ICAgICAgIC8vIFRpbWVvdXQKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgICAgICAkdGhpcy0+dXNlckFnZW50KTsgICAgIC8vIFdlYmJvdCBuYW1lCiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICAgICAgICAgICAgJHRoaXMtPnRhcmdldCk7ICAgICAgICAvLyBUYXJnZXQgc2l0ZQogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVGRVJFUiwgICAgICAgICR0aGlzLT5yZWZlcnJlcik7ICAgICAgLy8gUmVmZXJlciB2YWx1ZQoKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1ZFUkJPU0UsICAgICAgICBGQUxTRSk7ICAgICAgICAgICAgICAgIC8vIE1pbmltaXplIGxvZ3MKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBGQUxTRSk7ICAgICAgICAgICAgICAgIC8vIE5vIGNlcnRpZmljYXRlCiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgJHRoaXMtPnJlZGlyZWN0KTsgICAgICAvLyBGb2xsb3cgcmVkaXJlY3RzCiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9NQVhSRURJUlMsICAgICAgJHRoaXMtPm1heFJlZGlyZWN0KTsgICAvLyBMaW1pdCByZWRpcmVjdGlvbnMgdG8gZm91cgoKICAgICAgICAgICAgJHRtcG5hbSA9IHRlbXBuYW0oVE1QX0NBQ0hFX0xPQ0FUSU9OLCdDJy5tZDUoX19ESVJfXykpOwogICAgICAgICAgICAkdG1wX2ZwID0gZm9wZW4oJHRtcG5hbSwndycpOwogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRklMRSwgJHRtcF9mcCk7CgogICAgICAgICAgICAvLyBHZXQgdGhlIHRhcmdldCBjb250ZW50cwogICAgICAgICAgICAkcmVzID0gY3VybF9leGVjKCRjaCk7CiAgICAgICAgICAgICRzdGF0dXMgID0gY3VybF9nZXRpbmZvKCRjaCk7CiAgICAgICAgICAgIGZjbG9zZSgkdG1wX2ZwKTsKICAgICAgICAgICAgaWYoICRyZXMgKSB7CiAgICAgICAgICAgICAgICAkdG1wX2ZwID0gZm9wZW4oJHRtcG5hbSwncicpOwogICAgICAgICAgICAgICAgJGhlYWRlciA9IGZyZWFkKCR0bXBfZnAsJHN0YXR1c1snaGVhZGVyX3NpemUnXSk7CiAgICAgICAgICAgICAgICAkYm9keSA9IGZyZWFkKCR0bXBfZnAsZmlsZXNpemUoJHRtcG5hbSkpOwogICAgICAgICAgICAgICAgZmNsb3NlKCR0bXBfZnApOwoKICAgICAgICAgICAgICAgIGlmKCAhZW1wdHkoJGJvZHkpICkgewogICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBjb250ZW50cwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5yZXN1bHQgPSAkYm9keTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBQYXJzZSB0aGUgaGVhZGVycwogICAgICAgICAgICAgICAgJHRoaXMtPl9wYXJzZUhlYWRlcnMoJGhlYWRlcik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIEdldCB0aGUgcmVxdWVzdCBpbmZvCgogICAgICAgICAgICAvLyBTdG9yZSB0aGUgZXJyb3IgKGlzIGFueSkKICAgICAgICAgICAgQHVubGluaygkdG1wbmFtKTsKICAgICAgICAgICAgJHRoaXMtPl9zZXRFcnJvcihjdXJsX2Vycm9yKCRjaCkpOwoKICAgICAgICAgICAgLy8gQ2xvc2UgUEhQIGNVUkwgaGFuZGxlCiAgICAgICAgICAgIGN1cmxfY2xvc2UoJGNoKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIC8vIEdldCBhIGZpbGUgcG9pbnRlcgogICAgICAgICAgICAkZmlsZVBvaW50ZXIgPSBAc3RyZWFtX3NvY2tldF9jbGllbnQoJHRoaXMtPl9zb2NrZXQsICRlcnJvck51bWJlciwgJGVycm9yU3RyaW5nLCAkdGhpcy0+dGltZW91dCk7CgogICAgICAgICAgICAvLyBXZSBoYXZlIGFuIGVycm9yIGlmIHBvaW50ZXIgaXMgbm90IHRoZXJlCiAgICAgICAgICAgIGlmICghJGZpbGVQb2ludGVyKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X3NldEVycm9yKCdGYWlsZWQgb3BlbmluZyBodHRwIHNvY2tldCBjb25uZWN0aW9uOiAnIC4gJGVycm9yU3RyaW5nIC4gJyAoJyAuICRlcnJvck51bWJlciAuICcpJyk7CiAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFNldCBodHRwIGhlYWRlcnMgd2l0aCBob3N0LCB1c2VyLWFnZW50IGFuZCBjb250ZW50IHR5cGUKICAgICAgICAgICAgJHRoaXMtPmFkZFJlcXVlc3RIZWFkZXIoJHRoaXMtPm1ldGhvZCAuJyAnLiAkdGhpcy0+cGF0aC4gIiAgSFRUUC8xLjEiLHRydWUpOwogICAgICAgICAgICAkdGhpcy0+YWRkUmVxdWVzdEhlYWRlcigiSG9zdDogIiAuICR0aGlzLT5ob3N0KTsKICAgICAgICAgICAgJHRoaXMtPmFkZFJlcXVlc3RIZWFkZXIoJ0FjY2VwdDogKi8qJyk7CiAgICAgICAgICAgICR0aGlzLT5hZGRSZXF1ZXN0SGVhZGVyKCJVc2VyLUFnZW50OiAiIC4gJHRoaXMtPnVzZXJBZ2VudCk7CiAgICAgICAgICAgIGlmKCAhJHRoaXMtPnJlcXVlc3RIZWFkZXJFeGlzdHMoJ0NvbnRlbnQtVHlwZScpICkgJHRoaXMtPmFkZFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7CgogICAgICAgICAgICAvLyBTcGVjaWZ5IHRoZSBjdXN0b20gY29va2llcwogICAgICAgICAgICBpZiAoJHRoaXMtPnVzZUNvb2tpZSAmJiAkY29va2llU3RyaW5nICE9ICcnKSAkdGhpcy0+YWRkUmVxdWVzdEhlYWRlcigiQ29va2llOiAiIC4gJGNvb2tpZVN0cmluZyk7CgogICAgICAgICAgICAvLyBQT1NUIG1ldGhvZCBjb25maWd1cmF0aW9uCiAgICAgICAgICAgIGlmICgkdGhpcy0+bWV0aG9kID09ICJQT1NUIikgJHRoaXMtPmFkZFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtTGVuZ3RoOiAiIC4gc3RybGVuKCRxdWVyeVN0cmluZykpOwoKICAgICAgICAgICAgLy8gU3BlY2lmeSB0aGUgcmVmZXJyZXIKICAgICAgICAgICAgJHRoaXMtPmFkZFJlcXVlc3RIZWFkZXIoIlJlZmVyZXI6ICIgLiAkdGhpcy0+cmVmZXJyZXIpOwogICAgICAgICAgICBpZiAoJHRoaXMtPnJlZmVycmVyICE9ICcnKSAkdGhpcy0+YWRkUmVxdWVzdEhlYWRlcigiUmVmZXJlcjogIiAuICR0aGlzLT5yZWZlcnJlcik7CgogICAgICAgICAgICAvLyBTcGVjaWZ5IGh0dHAgYXV0aGVudGljYXRpb24gKGJhc2ljKQogICAgICAgICAgICBpZiAoJHRoaXMtPnVzZXJuYW1lICYmICR0aGlzLT5wYXNzd29yZCkgJHRoaXMtPmFkZFJlcXVlc3RoZWFkZXIoIkF1dGhvcml6YXRpb246IEJhc2ljICIgLiBiYXNlNjRfZW5jb2RlKCR0aGlzLT51c2VybmFtZSAuICc6JyAuICR0aGlzLT5wYXNzd29yZCkpOwoKICAgICAgICAgICAgJHRoaXMtPmFkZFJlcXVlc3RIZWFkZXIoIkNvbm5lY3Rpb246IGNsb3NlIik7CgogICAgICAgICAgICAvLyBQT1NUIG1ldGhvZCBjb25maWd1cmF0aW9uCiAgICAgICAgICAgICRyZXF1ZXN0SGVhZGVyID0gaW1wbG9kZSgiXHJcbiIsJHRoaXMtPmhlYWRlckFycmF5KS4iXHJcblxyXG4iOwogICAgICAgICAgICBpZiAoJHRoaXMtPm1ldGhvZCA9PSAiUE9TVCIpICRyZXF1ZXN0SGVhZGVyIC49ICRxdWVyeVN0cmluZzsKCiAgICAgICAgICAgIC8vIFdlJ3JlIHJlYWR5IHRvIGxhdW5jaAogICAgICAgICAgICBmd3JpdGUoJGZpbGVQb2ludGVyLCAkcmVxdWVzdEhlYWRlcik7CgogICAgICAgICAgICAvLyBDbGVhbiB0aGUgc2xhdGUKICAgICAgICAgICAgJHJlc3BvbnNlSGVhZGVyID0gJyc7CiAgICAgICAgICAgICRyZXNwb25zZUNvbnRlbnQgPSAnJzsKCiAgICAgICAgICAgIC8vIDMuLi4yLi4uMS4uLkxhdW5jaCAhCiAgICAgICAgICAgICRuID0gMDsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgJHJlc3BvbnNlSGVhZGVyIC49IGZyZWFkKCRmaWxlUG9pbnRlciwgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUgKCFwcmVnX21hdGNoKCcvXFxyXFxuXFxyXFxuJC8nLCAkcmVzcG9uc2VIZWFkZXIpICYmICFmZW9mKCRmaWxlUG9pbnRlcikpOwoKICAgICAgICAgICAgLy8gUGFyc2UgdGhlIGhlYWRlcnMKICAgICAgICAgICAgJHRoaXMtPl9wYXJzZUhlYWRlcnMoJHJlc3BvbnNlSGVhZGVyKTsKCiAgICAgICAgICAgIC8vIERvIHdlIGhhdmUgYSAzMDEvMzAyIHJlZGlyZWN0ID8KICAgICAgICAgICAgaWYgKCgkdGhpcy0+c3RhdHVzID09ICczMDEnIHx8ICR0aGlzLT5zdGF0dXMgPT0gJzMwMicpICYmICR0aGlzLT5yZWRpcmVjdCA9PSBUUlVFKSB7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmN1clJlZGlyZWN0IDwgJHRoaXMtPm1heFJlZGlyZWN0KSB7CiAgICAgICAgICAgICAgICAgICAgLy8gTGV0J3MgZmluZCBvdXQgdGhlIG5ldyByZWRpcmVjdCBVUkwKICAgICAgICAgICAgICAgICAgICAkbmV3VXJsUGFyc2VkID0gcGFyc2VfdXJsKCR0aGlzLT5oZWFkZXJzWydsb2NhdGlvbiddKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCRuZXdVcmxQYXJzZWRbJ2hvc3QnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAkbmV3VGFyZ2V0ID0gJHRoaXMtPmhlYWRlcnNbJ2xvY2F0aW9uJ107CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkbmV3VGFyZ2V0ID0gJHRoaXMtPnNjaGVtYSAuICc6Ly8nIC4gJHRoaXMtPmhvc3QgLiAnLycgLiAkdGhpcy0+aGVhZGVyc1snbG9jYXRpb24nXTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHNvbWUgb2YgdGhlIHByb3BlcnRpZXMKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cG9ydCAgID0gMDsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c3RhdHVzID0gMDsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cGFyYW1zID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bWV0aG9kID0gJ1BPU1QnOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5yZWZlcnJlciA9ICR0aGlzLT50YXJnZXQ7CgogICAgICAgICAgICAgICAgICAgIC8vIEluY3JlYXNlIHRoZSByZWRpcmVjdCBjb3VudGVyCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmN1clJlZGlyZWN0Kys7CgogICAgICAgICAgICAgICAgICAgIC8vIExldCdzIGdvLCBnbywgZ28gIQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5yZXN1bHQgPSAkdGhpcy0+ZXhlY3V0ZSgkbmV3VGFyZ2V0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5fc2V0RXJyb3IoJ1RvbyBtYW55IHJlZGlyZWN0cy4nKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBOb3BlLi4uc28gbGV0cyBnZXQgdGhlIHJlc3Qgb2YgdGhlIGNvbnRlbnRzIChub24tY2h1bmtlZCkKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmhlYWRlcnNbJ3RyYW5zZmVyLWVuY29kaW5nJ10pIHx8ICR0aGlzLT5oZWFkZXJzWyd0cmFuc2Zlci1lbmNvZGluZyddICE9ICdjaHVua2VkJykgewogICAgICAgICAgICAgICAgICAgIHdoaWxlICghZmVvZigkZmlsZVBvaW50ZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZUNvbnRlbnQgLj0gZmdldHMoJGZpbGVQb2ludGVyLCAxMjgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgY29udGVudHMgKGNodW5rZWQpCiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCFmZW9mKCRmaWxlUG9pbnRlcikgJiYgJGNodW5rTGVuZ3RoID0gaGV4ZGVjKGZnZXRzKCRmaWxlUG9pbnRlcikpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZUNvbnRlbnRDaHVuayA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAkcmVhZExlbmd0aCA9IDA7CgogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoJHJlYWRMZW5ndGggPCAkY2h1bmtMZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZUNvbnRlbnRDaHVuayAuPSBmcmVhZCgkZmlsZVBvaW50ZXIsICRjaHVua0xlbmd0aCAtICRyZWFkTGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWFkTGVuZ3RoID0gc3RybGVuKCRyZXNwb25zZUNvbnRlbnRDaHVuayk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZUNvbnRlbnQgLj0gJHJlc3BvbnNlQ29udGVudENodW5rOwogICAgICAgICAgICAgICAgICAgICAgICBmZ2V0cygkZmlsZVBvaW50ZXIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgdGFyZ2V0IGNvbnRlbnRzCiAgICAgICAgICAgICAgICAkdGhpcy0+cmVzdWx0ID0gY2hvcCgkcmVzcG9uc2VDb250ZW50KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gVGhlcmUgaXQgaXMhIFdlIGhhdmUgaXQhISBSZXR1cm4gdG8gYmFzZSAhISEKICAgICAgICByZXR1cm4gJHRoaXMtPnJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIEhlYWRlcnMgKGludGVybmFsKQogICAgICoKICAgICAqIFBhcnNlIHRoZSByZXNwb25zZSBoZWFkZXJzIGFuZCBzdG9yZSB0aGVtIGZvciBmaW5kaW5nIHRoZSByZXNwb3NuZQogICAgICogc3RhdHVzLCByZWRpcmVjdGlvbiBsb2NhdGlvbiwgY29va2llcywgZXRjLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgUmF3IGhlYWRlciByZXNwb25zZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX3BhcnNlSGVhZGVycygkcmVzcG9uc2VIZWFkZXIpCiAgICB7CiAgICAgICAgLy8gQnJlYWsgdXAgdGhlIGhlYWRlcnMKICAgICAgICAkaGVhZGVycyA9IGV4cGxvZGUoIlxyXG4iLCAkcmVzcG9uc2VIZWFkZXIpOwoKICAgICAgICAvLyBDbGVhciB0aGUgaGVhZGVyIGFycmF5CiAgICAgICAgJHRoaXMtPl9jbGVhckhlYWRlcnMoKTsKCiAgICAgICAgLy8gR2V0IHJlc3Bvc25lIHN0YXR1cwogICAgICAgIGlmKCR0aGlzLT5zdGF0dXMgPT0gMCkgewogICAgICAgICAgICAvLyBPb29vcHMgIQogICAgICAgICAgICBpZighcHJlZ19tYXRjaCgiL2h0dHBcL1swLTldK1wuWzAtOV0rWyBcdF0rKFswLTldKylbIFx0XSooLiopXCQvaSIsICRoZWFkZXJzWzBdLCAkbWF0Y2hlcykpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5fc2V0RXJyb3IoJ1VuZXhwZWN0ZWQgSFRUUCByZXNwb25zZSBzdGF0dXMnKTsKICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gR290Y2hhIQogICAgICAgICAgICAkdGhpcy0+c3RhdHVzID0gJG1hdGNoZXNbMV07CiAgICAgICAgICAgIGFycmF5X3NoaWZ0KCRoZWFkZXJzKTsKICAgICAgICB9CgogICAgICAgIC8vIFByZXBhcmUgYWxsIHRoZSBvdGhlciBoZWFkZXJzCiAgICAgICAgZm9yZWFjaCAoJGhlYWRlcnMgYXMgJGhlYWRlcikgewogICAgICAgICAgICAvLyBHZXQgbmFtZSBhbmQgdmFsdWUKICAgICAgICAgICAgJGhlYWRlck5hbWUgID0gc3RydG9sb3dlcigkdGhpcy0+X3Rva2VuaXplKCRoZWFkZXIsICc6JykpOwogICAgICAgICAgICAkaGVhZGVyVmFsdWUgPSB0cmltKGNob3AoJHRoaXMtPl90b2tlbml6ZSgiXHJcbiIpKSk7CgogICAgICAgICAgICAvLyBJZiBpdHMgYWxyZWFkeSB0aGVyZSwgdGhlbiBhZGQgYXMgYW4gYXJyYXkuIE90aGVyd2lzZSwganVzdCBrZWVwIHRoZXJlCiAgICAgICAgICAgIGlmKGlzc2V0KCR0aGlzLT5oZWFkZXJzWyRoZWFkZXJOYW1lXSkpIHsKICAgICAgICAgICAgICAgIGlmKGdldHR5cGUoJHRoaXMtPmhlYWRlcnNbJGhlYWRlck5hbWVdKSA9PSAic3RyaW5nIikgJHRoaXMtPmhlYWRlcnNbJGhlYWRlck5hbWVdID0gYXJyYXkoJHRoaXMtPmhlYWRlcnNbJGhlYWRlck5hbWVdKTsKCiAgICAgICAgICAgICAgICAkdGhpcy0+aGVhZGVyc1skaGVhZGVyTmFtZV1bXSA9ICRoZWFkZXJWYWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5oZWFkZXJzWyRoZWFkZXJOYW1lXSA9ICRoZWFkZXJWYWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gU2F2ZSBjb29raWVzIGlmIGFza2VkCiAgICAgICAgaWYgKCR0aGlzLT5zYXZlQ29va2llICYmIGlzc2V0KCR0aGlzLT5oZWFkZXJzWydzZXQtY29va2llJ10pKSAkdGhpcy0+X3BhcnNlQ29va2llKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDbGVhciB0aGUgaGVhZGVycyBhcnJheSAoaW50ZXJuYWwpCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqLwogICAgZnVuY3Rpb24gX2NsZWFySGVhZGVycygpCiAgICB7CiAgICAgICAgJHRoaXMtPmhlYWRlcnMgPSBhcnJheSgpOwogICAgfQoKICAgIC8qKgogICAgICogUGFyc2UgQ29va2llcyAoaW50ZXJuYWwpCiAgICAgKgogICAgICogUGFyc2UgdGhlIHNldC1jb29raWUgaGVhZGVycyBmcm9tIHJlc3BvbnNlIGFuZCBhZGQgdGhlbSBmb3IgaW5jbHVzaW9uLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9wYXJzZUNvb2tpZSgpCiAgICB7CiAgICAgICAgLy8gR2V0IHRoZSBjb29raWUgaGVhZGVyIGFzIGFycmF5CiAgICAgICAgaWYoZ2V0dHlwZSgkdGhpcy0+aGVhZGVyc1snc2V0LWNvb2tpZSddKSA9PSAiYXJyYXkiKSB7CiAgICAgICAgICAgICRjb29raWVIZWFkZXJzID0gJHRoaXMtPmhlYWRlcnNbJ3NldC1jb29raWUnXTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRjb29raWVIZWFkZXJzID0gYXJyYXkoJHRoaXMtPmhlYWRlcnNbJ3NldC1jb29raWUnXSk7CiAgICAgICAgfQoKICAgICAgICAvLyBMb29wIHRocm91Z2ggdGhlIGNvb2tpZXMKICAgICAgICBmb3IgKCRjb29raWUgPSAwOyAkY29va2llIDwgY291bnQoJGNvb2tpZUhlYWRlcnMpOyAkY29va2llKyspIHsKICAgICAgICAgICAgJGNvb2tpZU5hbWUgID0gdHJpbSgkdGhpcy0+X3Rva2VuaXplKCRjb29raWVIZWFkZXJzWyRjb29raWVdLCAiPSIpKTsKICAgICAgICAgICAgJGNvb2tpZVZhbHVlID0gJHRoaXMtPl90b2tlbml6ZSgiOyIpOwoKICAgICAgICAgICAgJHVybFBhcnNlZCAgID0gcGFyc2VfdXJsKCR0aGlzLT50YXJnZXQpOwoKICAgICAgICAgICAgJGRvbWFpbiAgICAgID0gJHVybFBhcnNlZFsnaG9zdCddOwogICAgICAgICAgICAkc2VjdXJlICAgICAgPSAnMCc7CgogICAgICAgICAgICAkcGF0aCAgICAgICAgPSAiLyI7CiAgICAgICAgICAgICRleHBpcmVzICAgICA9ICIiOwoKICAgICAgICAgICAgd2hpbGUoKCRuYW1lID0gdHJpbSh1cmxkZWNvZGUoJHRoaXMtPl90b2tlbml6ZSgiPSIpKSkpICE9ICIiKSB7CiAgICAgICAgICAgICAgICAkdmFsdWUgPSB1cmxkZWNvZGUoJHRoaXMtPl90b2tlbml6ZSgiOyIpKTsKCiAgICAgICAgICAgICAgICBzd2l0Y2goJG5hbWUpIHsKICAgICAgICAgICAgICAgIGNhc2UgInBhdGgiICAgICA6ICRwYXRoICAgICA9ICR2YWx1ZTsgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJkb21haW4iICAgOiAkZG9tYWluICAgPSAkdmFsdWU7IGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAic2VjdXJlIiAgIDogJHNlY3VyZSAgID0gKCR2YWx1ZSAhPSAnJykgPyAnMScgOiAnMCc7IGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkdGhpcy0+X3NldENvb2tpZSgkY29va2llTmFtZSwgJGNvb2tpZVZhbHVlLCAkZXhwaXJlcywgJHBhdGggLCAkZG9tYWluLCAkc2VjdXJlKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgY29va2llIChpbnRlcm5hbCkKICAgICAqCiAgICAgKiBQb3B1bGF0ZSB0aGUgaW50ZXJuYWwgX2Nvb2tpZXMgYXJyYXkgZm9yIGZ1dHVyZSBpbmNsdXNpb24gaW4KICAgICAqIHN1YnNlcXVlbnQgcmVxdWVzdHMuIFRoaXMgYWN0dWFsbHkgdmFsaWRhdGVzIGFuZCB0aGVuIHBvcHVsYXRlcwogICAgICogdGhlIG9iamVjdCBwcm9wZXJ0aWVzIHdpdGggYSBkaW1lbnNpb25hbCBlbnRyeSBmb3IgY29va2llLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgQ29va2llIG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgQ29va2llIHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nIENvb2tpZSBleHBpcmUgZGF0ZQogICAgICogQHBhcmFtIHN0cmluZyBDb29raWUgcGF0aAogICAgICogQHBhcmFtIHN0cmluZyBDb29raWUgZG9tYWluCiAgICAgKiBAcGFyYW0gc3RyaW5nIENvb2tpZSBzZWN1cml0eSAoMCA9IG5vbi1zZWN1cmUsIDEgPSBzZWN1cmUpCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfc2V0Q29va2llKCRuYW1lLCAkdmFsdWUsICRleHBpcmVzID0gIiIgLCAkcGF0aCA9ICIvIiAsICRkb21haW4gPSAiIiAsICRzZWN1cmUgPSAwKQogICAgewogICAgICAgIGlmKHN0cmxlbigkbmFtZSkgPT0gMCkgcmV0dXJuKCR0aGlzLT5fc2V0RXJyb3IoIk5vIHZhbGlkIGNvb2tpZSBuYW1lIHdhcyBzcGVjaWZpZWQuIikpOwogICAgICAgIGlmKHN0cmxlbigkcGF0aCkgPT0gMCB8fCBzdHJjbXAoJHBhdGhbMF0sICIvIikpIHJldHVybigkdGhpcy0+X3NldEVycm9yKCIkcGF0aCBpcyBub3QgYSB2YWxpZCBwYXRoIGZvciBzZXR0aW5nIGNvb2tpZSAkbmFtZS4iKSk7CiAgICAgICAgaWYoJGRvbWFpbiA9PSAiIiB8fCAhc3RycG9zKCRkb21haW4sICIuIiwgJGRvbWFpblswXSA9PSAiLiIgPyAxIDogMCkpIHsKICAgICAgICAgICAgcmV0dXJuKCR0aGlzLT5fc2V0RXJyb3IoIiRkb21haW4gaXMgbm90IGEgdmFsaWQgZG9tYWluIGZvciBzZXR0aW5nIGNvb2tpZSAkbmFtZS4iKSk7CiAgICAgICAgfQoKICAgICAgICAkZG9tYWluID0gc3RydG9sb3dlcigkZG9tYWluKTsKICAgICAgICBpZighc3RyY21wKCRkb21haW5bMF0sICIuIikpICRkb21haW4gPSBzdWJzdHIoJGRvbWFpbiwgMSk7CgogICAgICAgICRuYW1lICA9ICR0aGlzLT5fZW5jb2RlQ29va2llKCRuYW1lLCB0cnVlKTsKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+X2VuY29kZUNvb2tpZSgkdmFsdWUsIGZhbHNlKTsKCiAgICAgICAgJHNlY3VyZSA9IGludHZhbCgkc2VjdXJlKTsKCiAgICAgICAgJHRoaXMtPl9jb29raWVzW10gPSBhcnJheSggIm5hbWUiICAgICAgPT4gICRuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgICAgID0+ICAkdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRvbWFpbiIgICAgPT4gICRkb21haW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhdGgiICAgICAgPT4gICRwYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBpcmVzIiAgID0+ICAkZXhwaXJlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VjdXJlIiAgICA9PiAgJHNlY3VyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogRW5jb2RlIGNvb2tpZSBuYW1lL3ZhbHVlIChpbnRlcm5hbCkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIFZhbHVlIG9mIGNvb2tpZSB0byBlbmNvZGUKICAgICAqIEBwYXJhbSBzdHJpbmcgTmFtZSBvZiBjb29raWUgdG8gZW5jb2RlCiAgICAgKiBAcmV0dXJuIHN0cmluZyBlbmNvZGVkIHN0cmluZwogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9lbmNvZGVDb29raWUoJHZhbHVlLCAkbmFtZSkKICAgIHsKICAgICAgICByZXR1cm4oJG5hbWUgPyBzdHJfcmVwbGFjZSgiPSIsICIlMjUiLCAkdmFsdWUpIDogc3RyX3JlcGxhY2UoIjsiLCAiJTNCIiwgJHZhbHVlKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBQYXNzIENvb2tpZXMgKGludGVybmFsKQogICAgICoKICAgICAqIEdldCB0aGUgY29va2llcyB3aGljaCBhcmUgdmFsaWQgZm9yIHRoZSBjdXJyZW50IHJlcXVlc3QuIENoZWNrcwogICAgICogZG9tYWluIGFuZCBwYXRoIHRvIGRlY2lkZSB0aGUgcmV0dXJuLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9wYXNzQ29va2llcygpCiAgICB7CiAgICAgICAgaWYgKGlzX2FycmF5KCR0aGlzLT5fY29va2llcykgJiYgY291bnQoJHRoaXMtPl9jb29raWVzKSA+IDApIHsKICAgICAgICAgICAgJHVybFBhcnNlZCA9IHBhcnNlX3VybCgkdGhpcy0+dGFyZ2V0KTsKICAgICAgICAgICAgJHRlbXBDb29raWVzID0gYXJyYXkoKTsKCiAgICAgICAgICAgIGZvcmVhY2goJHRoaXMtPl9jb29raWVzIGFzICRjb29raWUpIHsKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+X2RvbWFpbk1hdGNoKCR1cmxQYXJzZWRbJ2hvc3QnXSwgJGNvb2tpZVsnZG9tYWluJ10pICYmICgwID09PSBzdHJwb3MoJHVybFBhcnNlZFsncGF0aCddLCAkY29va2llWydwYXRoJ10pKQogICAgICAgICAgICAgICAgICAgICYmIChlbXB0eSgkY29va2llWydzZWN1cmUnXSkgfHwgJHVybFBhcnNlZFsncHJvdG9jb2wnXSA9PSAnaHR0cHMnKSkgewogICAgICAgICAgICAgICAgICAgICR0ZW1wQ29va2llc1skY29va2llWyduYW1lJ11dW3N0cmxlbigkY29va2llWydwYXRoJ10pXSA9ICRjb29raWVbJ3ZhbHVlJ107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGNvb2tpZXMgd2l0aCBsb25nZXIgcGF0aHMgZ28gZmlyc3QKICAgICAgICAgICAgZm9yZWFjaCAoJHRlbXBDb29raWVzIGFzICRuYW1lID0+ICR2YWx1ZXMpIHsKICAgICAgICAgICAgICAgIGtyc29ydCgkdmFsdWVzKTsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR2YWx1ZXMgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmFkZENvb2tpZSgkbmFtZSwgJHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICogQ2hlY2tzIGlmIGNvb2tpZSBkb21haW4gbWF0Y2hlcyBhIHJlcXVlc3QgaG9zdCAoaW50ZXJuYWwpCiAgICAqCiAgICAqIENvb2tpZSBkb21haW4gY2FuIGJlZ2luIHdpdGggYSBkb3QsIGl0IGFsc28gbXVzdCBjb250YWluIGF0IGxlYXN0CiAgICAqIHR3byBkb3RzLgogICAgKgogICAgKiBAcGFyYW0gc3RyaW5nIHJlcXVlc3QgaG9zdAogICAgKiBAcGFyYW0gc3RyaW5nIENvb2tpZSBkb21haW4KICAgICogQHJldHVybiBib29sIE1hdGNoIHN1Y2Nlc3MKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgKi8KICAgIGZ1bmN0aW9uIF9kb21haW5NYXRjaCgkcmVxdWVzdEhvc3QsICRjb29raWVEb21haW4pCiAgICB7CiAgICAgICAgaWYgKCcuJyAhPSAkY29va2llRG9tYWluWzBdKSB7CiAgICAgICAgICAgIHJldHVybiAkcmVxdWVzdEhvc3QgPT0gJGNvb2tpZURvbWFpbjsKICAgICAgICB9CiAgICAgICAgZWxzZWlmIChzdWJzdHJfY291bnQoJGNvb2tpZURvbWFpbiwgJy4nKSA8IDIpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHN1YnN0cignLicuICRyZXF1ZXN0SG9zdCwgLSBzdHJsZW4oJGNvb2tpZURvbWFpbikpID09ICRjb29raWVEb21haW47CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogVG9rZW5pemUgU3RyaW5nIChpbnRlcm5hbCkKICAgICAqCiAgICAgKiBUb2tlbml6ZSBzdHJpbmcgZm9yIHZhcmlvdXMgaW50ZXJuYWwgdXNhZ2UuIE9taXQgdGhlIHNlY29uZCBwYXJhbWV0ZXIKICAgICAqIHRvIHRva2VuaXplIHRoZSBwcmV2aW91cyBzdHJpbmcgdGhhdCB3YXMgcHJvdmlkZWQgaW4gdGhlIHByaW9yIGNhbGwgdG8KICAgICAqIHRoZSBmdW5jdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIFRoZSBzdHJpbmcgdG8gdG9rZW5pemUKICAgICAqIEBwYXJhbSBzdHJpbmcgVGhlIHNlcGVyYXRvciB0byB1c2UKICAgICAqIEByZXR1cm4gc3RyaW5nIFRva2VuaXplZCBzdHJpbmcKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfdG9rZW5pemUoJHN0cmluZywgJHNlcGFyYXRvciA9ICcnKQogICAgewogICAgICAgIGlmKCFzdHJjbXAoJHNlcGFyYXRvciwgJycpKSB7CiAgICAgICAgICAgICRzZXBhcmF0b3IgPSAkc3RyaW5nOwogICAgICAgICAgICAkc3RyaW5nID0gJHRoaXMtPm5leHRUb2tlbjsKICAgICAgICB9CgogICAgICAgIGZvcigkY2hhcmFjdGVyID0gMCwgJG4gPSBzdHJsZW4oJHNlcGFyYXRvcik7ICRjaGFyYWN0ZXIgPCAkbjsgJGNoYXJhY3RlcisrKSB7CiAgICAgICAgICAgIGlmKGdldHR5cGUoJHBvc2l0aW9uID0gc3RycG9zKCRzdHJpbmcsICRzZXBhcmF0b3JbJGNoYXJhY3Rlcl0pKSA9PSAiaW50ZWdlciIpIHsKICAgICAgICAgICAgICAgICRmb3VuZCA9IChpc3NldCgkZm91bmQpID8gbWluKCRmb3VuZCwgJHBvc2l0aW9uKSA6ICRwb3NpdGlvbik7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmKGlzc2V0KCRmb3VuZCkpIHsKICAgICAgICAgICAgJHRoaXMtPm5leHRUb2tlbiA9IHN1YnN0cigkc3RyaW5nLCAkZm91bmQgKyAxKTsKICAgICAgICAgICAgcmV0dXJuKHN1YnN0cigkc3RyaW5nLCAwLCAkZm91bmQpKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5uZXh0VG9rZW4gPSAnJzsKICAgICAgICAgICAgcmV0dXJuKCRzdHJpbmcpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNldCBlcnJvciBtZXNzYWdlIChpbnRlcm5hbCkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIEVycm9yIG1lc3NhZ2UKICAgICAqIEByZXR1cm4gc3RyaW5nIEVycm9yIG1lc3NhZ2UKICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBfc2V0RXJyb3IoJGVycm9yKQogICAgewogICAgICAgIGlmICgkZXJyb3IgIT0gJycpIHsKICAgICAgICAgICAgJHRoaXMtPmVycm9yID0gJGVycm9yOwogICAgICAgICAgICByZXR1cm4gJGVycm9yOwogICAgICAgIH0KICAgIH0KfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/http/license.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDA4IE1kIEVtcmFuIEhhc2FuIDxwaHBmb3VyQGdtYWlsLmNvbT4NCg0KUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24NCm9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uDQpmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0DQpyZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwNCmNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsDQpjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUNClNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nDQpjb25kaXRpb25zOg0KDQpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQ0KaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQoNClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELA0KRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTDQpPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORA0KTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQNCkhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLA0KV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HDQpGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SDQpPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUu]]></data>
	</file>
	<file>
	  <filename>/lib/http/test_basecamp.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLy8gSW5jbHVkZSB0aGUgSHR0cCBDbGFzcw0KaW5jbHVkZV9vbmNlKCdjbGFzcy5odHRwLnBocCcpOw0KDQovLyBJbnN0YW50aWF0ZSBpdA0KJGh0dHAgPSBuZXcgSHR0cCgpOw0KDQovLyBMZXQncyBub3QgdXNlIGNVUkwNCiRodHRwLT51c2VDdXJsKGZhbHNlKTsNCg0KLy8gUE9TVCBtZXRob2QNCiRodHRwLT5zZXRNZXRob2QoJ1BPU1QnKTsNCg0KLy8gUE9TVCBwYXJhbWV0ZXJzDQokaHR0cC0+YWRkUGFyYW0oJ3VzZXJfbmFtZScgLCAneW91cnVzZXJuYW1lJyk7DQokaHR0cC0+YWRkUGFyYW0oJ3Bhc3N3b3JkJyAgLCAneW91cnBhc3N3b3JkJyk7DQoNCi8vIFJlZmVycmVyDQokaHR0cC0+c2V0UmVmZXJyZXIoJ2h0dHBzOi8veW91cnByb2plY3QucHJvamVjdHBhdGguY29tL2xvZ2luJyk7DQoNCi8vIEdldCBiYXNlY2FtcCBkYXNoYm9hcmQgKEhUVFBTKQ0KJGh0dHAtPmV4ZWN1dGUoJ2h0dHBzOi8veW91cnByb2plY3QucHJvamVjdHBhdGguY29tL2xvZ2luL2F1dGhlbnRpY2F0ZScpOw0KDQovLyBTaG93IHJlc3VsdCBwYWdlIG9yIGVycm9yIGlmIG9jY3VycmVkDQplY2hvICgkaHR0cC0+ZXJyb3IpID8gJGh0dHAtPmVycm9yIDogJGh0dHAtPnJlc3VsdDsNCg0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/lib/http/test_fbapp.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLy8gSW5jbHVkZSB0aGUgSHR0cCBDbGFzcw0KaW5jbHVkZV9vbmNlKCdjbGFzcy5odHRwLnBocCcpOw0KDQovLyBJbnN0YW50aWF0ZSBpdA0KJGh0dHAgPSBuZXcgSHR0cCgpOw0KDQovLyBHZXQgRmFjZWJvb2sgQXBwbGljYXRpb24gcGFnZQ0KJGh0dHAtPmV4ZWN1dGUoJ2h0dHA6Ly93d3cuZmFjZWJvb2suY29tL2FwcHMvaW5kZXgucGhwJyk7DQoNCi8vIFNob3cgcmVzdWx0IHBhZ2Ugb3IgZXJyb3IgaWYgb2NjdXJyZWQNCmVjaG8gKCRodHRwLT5lcnJvcikgPyAkaHR0cC0+ZXJyb3IgOiAkaHR0cC0+cmVzdWx0Ow0KDQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/lib/http/test_feed.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLy8gSW5jbHVkZSB0aGUgSHR0cCBDbGFzcw0KaW5jbHVkZV9vbmNlKCdjbGFzcy5odHRwLnBocCcpOw0KDQovLyBJbnN0YW50aWF0ZSBpdA0KJGh0dHAgPSBuZXcgSHR0cCgpOw0KDQovLyBTZXQgSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvbiByZWFsbXMNCiRodHRwLT5zZXRBdXRoKCd5b3VydXNlcm5hbWUnLCAneW91cnBhc3N3b3JkJyk7DQoNCi8vIEdldCB0aGUgcHJvdGVjdGVkIGZlZWQNCiRodHRwLT5leGVjdXRlKCdodHRwOi8vd3d3LnNvbWVibG9nLmNvbS9wcm90ZWN0ZWQvZmVlZC54bWwnKTsNCg0KLy8gU2hvdyByZXN1bHQgZmVlZCBvciBlcnJvciBpZiBvY2N1cnJlZA0KZWNobyAoJGh0dHAtPmVycm9yKSA/ICRodHRwLT5lcnJvciA6ICRodHRwLT5yZXN1bHQ7DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/http/test_term_extract.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLy8gSW5jbHVkZSB0aGUgSHR0cCBDbGFzcw0KaW5jbHVkZV9vbmNlKCdjbGFzcy5odHRwLnBocCcpOw0KDQovLyBJbnN0YW50aWF0ZSBpdA0KJGh0dHAgPSBuZXcgSHR0cCgpOw0KDQovLyBTZXQgQVBJIHBhcmFtZXRlcnMNCiRodHRwLT5hZGRQYXJhbSgnYXBwaWQnICAgLCAnYV9yZWFsbHlfcmFuZG9tX3lhaG9vX2FwcF9pZCcpOw0KJGh0dHAtPmFkZFBhcmFtKCdjb250ZXh0JyAsICdJIGFtIGhhcHB5IGJlY2F1c2UgSSBib3VnaHQgYSBuZXcgY2FyJyk7DQokaHR0cC0+YWRkUGFyYW0oJ291dHB1dCcgICwgJ3htbCcpOw0KDQovLyBHZXQgdGhlIGV4dHJhY3RlZCB0ZXJtDQokaHR0cC0+ZXhlY3V0ZSgnaHR0cDovL3NlYXJjaC55YWhvb2FwaXMuY29tL0NvbnRlbnRBbmFseXNpc1NlcnZpY2UvVjEvdGVybUV4dHJhY3Rpb24nKTsNCg0KLy8gU2hvdyByZXN1bHQgeG1sIG9yIGVycm9yIGlmIG9jY3VycmVkDQovL2VjaG8gKCRodHRwLT5lcnJvcikgPyAkaHR0cC0+ZXJyb3IgOiAkaHR0cC0+cmVzdWx0Ow0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/interface.ITranslator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENNU01TRXh0OwoKaW50ZXJmYWNlIElUcmFuc2xhdG9yCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2ludm9rZSgvKiB2YXIgYXJncyAqLyk7Cn0gLy8gY2xhc3M=]]></data>
	</file>
	<file>
	  <filename>/lib/internal</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/internal/class.IUA.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogSW50ZXJuYWwgY2xhc3MgZm9yIENNU01TRXh0DQogKiBJbnN0YWxsL1VwZGF0ZS9Vbmluc3RhbGwgYXNzaXN0YW50DQogKiBAcGFja2FnZSBjbXNtc2V4dA0KICoNCiAqLw0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcaW50ZXJuYWw7DQoNCg0KY2xhc3MgSVVBDQp7DQogIHVzZSBcQ01TTVNFeHRcY29yZVxUU2luZ2xldG9uOw0KICANCiAgLyoqDQogICAqIENsZWFycyB0ZW1wb3JhcnkgZmlsZXMgYmFzZWQgb24gdGhlIHNlc3Npb24gZHVyYXRpb24uDQogICAqDQogICAqIEBwYXJhbSBhcnJheSAmJGFyZ3MgVGhlIGFyZ3VtZW50cyBwYXNzZWQgYnkgcmVmZXJlbmNlLg0KICAgKiBAcmV0dXJuICR0aGlzIFJldHVybnMgdGhlIGN1cnJlbnQgb2JqZWN0IGZvciBtZXRob2QgY2hhaW5pbmcuDQogICAqLw0KICBwcml2YXRlIGZ1bmN0aW9uIF9jbGVhcl90ZW1wb3JhcnlfZmlsZXMoJiRhcmdzKQ0KICB7DQogICAgJG1vZCAgICAgICAgICAgICAgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdDTVNNU0V4dCcpOw0KICAgICRjb25maWcgICAgICAgICAgID0gJG1vZC0+R2V0RXh0ZW5kZWRDb25maWcoKTsNCiAgICAkdG1wX2RpciAgICAgICAgICA9IFxzdHJfcmVwbGFjZSgnY2FjaGUnLCAnJywgJGNvbmZpZ1sndG1wX2NhY2hlX2xvY2F0aW9uJ10pIC4gJ2Ntc21zZXh0Lyc7DQogICAgJHNlc3Npb25fZHVyYXRpb24gPSBcaW5pX2dldCgnc2Vzc2lvbi5nY19tYXhsaWZldGltZScpOw0KICAgICRyZXQgICAgICAgICAgICAgID0gRkFMU0U7DQogICAgDQogICAgJGZpbGVzID0gXGdsb2IoJHRtcF9kaXIgLiAnLyouKicpOw0KICAgIA0KICAgICRjdXJyZW50VGltZXN0YW1wID0gXHRpbWUoKTsNCiAgICANCiAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGUpDQogICAgew0KICAgICAgJGxhc3RBY2Nlc3NUaW1lID0gXGZpbGVtdGltZSgkZmlsZSk7DQogICAgICANCiAgICAgIGlmICgoJGN1cnJlbnRUaW1lc3RhbXAgLSAkbGFzdEFjY2Vzc1RpbWUpID4gJHNlc3Npb25fZHVyYXRpb24pDQogICAgICB7DQogICAgICAgICMgd2hpbGUgcmVtb3ZpbmcgdGhlIGZpbGUsIHNldCB0aGUgcmV0dXJuIHZhbHVlIHRvIHRydWUgaWYgYXQgbGVhc3Qgb25lIGlzIHJlbW92ZWQNCiAgICAgICAgJHJldCA9IFx1bmxpbmsoJGZpbGUpIHx8ICRyZXQ7DQogICAgICB9DQogICAgfQ0KICAgIA0KICAgIGlmKFxpc19hcnJheSgkYXJncykgJiYgaXNzZXQoJGFyZ3NbJ3JldHVybiddKSkgeyAkYXJnc1sncmV0dXJuJ10gPSAkcmV0OyB9DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICAvKioNCiAgICogRnVuY3Rpb24gdG8gcGVyZm9ybSBhbnkgdXBncmFkZSBwcm9jZWR1cmVzLiBUaGlzIGlzIG1vc3RseSB1c2VkIHRvIGZvcg0KICAgKiB1cGRhdGluZyBkYXRhYnNhZSB0YWJsZXMsIGJ1dCBjYW4gZG8gb3RoZXIgZHV0aWVzIGFzIHdlbGwuIEl0IHNob3VsZA0KICAgKiByZXR1cm4gYSBzdHJpbmcgbWVzc2FnZSBpZiB0aGVyZSBpcyBhIGZhaWx1cmUuIFJldHVybmluZyBub3RoaW5nIChGQUxTRSkNCiAgICogd2lsbCBhbGxvdyB0aGUgdXBncmFkZSBwcm9jZWR1cmUgdG8gcHJvY2VlZC4gVXBncmFkZXMgc2hvdWxkIGhhdmUgYSBwYXRoDQogICAqIHNvIHRoYXQgdGhleSBjYW4gYmUgdXBncmFkZWQgZnJvbSBtb3JlIHRoYW4gb25lIHZlcnNpb24gYmFjay4gIFdoaWxlIG5vdA0KICAgKiBhIHJlcXVpcmVtZW50LCBpdCBtYWtlcyBsaWZlIGVhc3kgZm9yIHlvdXIgdXNlcnMuDQogICAqDQogICAqIFRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoaXMgbWV0aG9kIGlzIHRvIGNhbGwgYSBmdW5jdGlvbiBjYWxsZWQgbWV0aG9kLnVwZ3JhZGUucGhwDQogICAqIGluIHlvdXIgbW9kdWxlIGRpcmVjdG9yeSwgaWYgaXQgZXhpc3RzLg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRvbGR2ZXJzaW9uIFRoZSB2ZXJzaW9uIHdlIGFyZSB1cGdyYWRpbmcgZnJvbQ0KICAgKiBAcGFyYW0gc3RyaW5nICRuZXd2ZXJzaW9uIFRoZSB2ZXJzaW9uIHdlIGFyZSB1cGdyYWRpbmcgdG8NCiAgICogQHJldHVybiBib29sDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gVXBncmFkZSgkb2xkdmVyc2lvbiwgJG5ld3ZlcnNpb24pDQogIHsNCiAgICB0cnkNCiAgICB7DQogICAgICAjIHNwZWNpZmljIGZvciBvbGQgdmVyc2lvbnMgYW5kIG5ldyB2ZXJzaW9ucyBzaW11bHRhbmVvdXMgY29tcGFyaXNvbnMNCiAgICAgIC8vICAgIGlmKCRvbGR2ZXJzaW9uIDwgJzEuMC4wJyAmJiAkbmV3dmVyc2lvbiA+PSAnMS4wLjAnKQ0KICAgICAgLy8gICAgew0KICAgICAgLy8gICAgICAjIGRvIHNvbWV0aGluZw0KICAgICAgLy8gICAgfQ0KICAgICAgDQogICAgICAjIHNwZWNpZmljIGZvciBvbGQgdmVyc2lvbnMgY29tcGFyaXNvbg0KICAgICAgLy8gICAgaWYoJG9sZHZlcnNpb24gPCAnMS4wLjAnKQ0KICAgICAgLy8gICAgew0KICAgICAgLy8gICAgICAjIGRvIHNvbWV0aGluZw0KICAgICAgLy8gICAgfQ0KICAgICAgDQogICAgICAjIHNwZWNpZmljIGZvciBuZXcgdmVyc2lvbnMgY29tcGFyaXNvbg0KICAgICAgLy8gICAgaWYoJG5ld3ZlcnNpb24gPj0gJzEuMC4wJykNCiAgICAgIC8vICAgIHsNCiAgICAgIC8vICAgICAgIyBkbyBzb21ldGhpbmcNCiAgICAgIC8vICAgIH0NCiAgICAgIA0KICAgICAgIyBzcGVjaWZpYyBmb3Igb2xkIHZlcnNpb25zIHVwZ3JhZGUgcGF0aA0KICAgICAgLy8gc3dpdGNoKCRvbGR2ZXJzaW9uKQ0KICAgICAgLy8gew0KICAgICAgLy8gICBjYXNlICcxLjAuMCc6DQogICAgICAvLyAgICAgIyBkbyBzb21ldGhpbmcNCiAgICAgIC8vICAgY2FzZSAnMS4wLjEnOg0KICAgICAgLy8gICAgICMgZG8gc29tZXRoaW5nDQogICAgICAvLyB9DQogICAgICANCiAgICAgICMgc3BlY2lmaWMgZm9yIG5ldyB2ZXJzaW9ucyB1cGdyYWRlIHBhdGgNCiAgICAgIC8vIHN3aXRjaCgkbmV3dmVyc2lvbikNCiAgICAgIC8vIHsNCiAgICAgIC8vICAgY2FzZSAnMS4wLjAnOg0KICAgICAgLy8gICAgICMgZG8gc29tZXRoaW5nDQogICAgICAvLyAgIGNhc2UgJzEuMC4xJzoNCiAgICAgIC8vICAgICAjIGRvIHNvbWV0aGluZw0KICAgICAgLy8gfQ0KICAgICAgDQogICAgICANCiAgICAgICMgbWFuZGF0b3J5IGZvciBhbGwgdmVyc2lvbnMNCiAgICAgIA0KICAgICAgJHRoaXMtPl9jbGVhcl90ZW1wb3JhcnlfZmlsZXMoJGFyZ3MpOw0KICAgICAgcmV0dXJuIEZBTFNFOw0KICAgIA0KICAgIH0NCiAgICBjYXRjaChcRXhjZXB0aW9uICRlKQ0KICAgIHsNCiAgICAgIHJldHVybiAkZS0+Z2V0TWVzc2FnZSgpOw0KICAgIH0NCiAgDQogIH0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/internal/class.ModuleIntegrityBase.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgc2V0IG9mIGhpZ2ggbGV2ZWwgaW50ZXJuYWwgdXRpbGl0aWVzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dC9pbnRlcm5hbAogKiBAY2F0ZWdvcnkgSW50ZXJuYWwKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxMCBieSBSb2JlcnQgQ2FtcGJlbGwKICogQGlnbm9yZQogKi8KCi8qKgogKiBBIHRvb2wgdGhhdCBjYW4gdmFsaWRhdGUgdGhlIGZpbGUgaW50ZWdyaXR5IG9mIGEgbW9kdWxlIChnaXZlbiBfYzEuZGF0IGFuZCBfYzIuZGF0IGZpbGVzIGluIHRoZSBtb2R1bGUgZGlyZWN0b3J5LikKICoKICogQHBhY2thZ2UgQ01TTVNFeHQvaW50ZXJuYWwKICogQGlnbm9yZQogKi8KCm5hbWVzcGFjZSBDTVNNU0V4dFxpbnRlcm5hbDsKCmFic3RyYWN0IGNsYXNzIE1vZHVsZUludGVncml0eUJhc2UKewogICAgcHJvdGVjdGVkICRfbW9kOwogICAgcHJpdmF0ZSAkX2V4Y2x1ZGVzID0gYXJyYXkoJyp+JywnIyojJywnLiMqJywnLnN2bicsJ0NWUycsJyouYmFrJywnLmdpdConLCcqLnRtcCcsJy5jbXNfaWdub3JlJywnKi5zd3AnLCdfaW50ZXJuYWwgcGhwZG9jLnhtbCcsJyoubG9jaycsJyoucGFydCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2MuZGF0JywnX2QuZGF0JywnX2MxLmRhdCcsJ19kMS5kYXQnKTsKCiAgICBwcm90ZWN0ZWQgZmluYWwgZnVuY3Rpb24gZ2V0X3NhbHQoKQogICAgewogICAgICAgICRzYWx0ID0gJHRoaXMtPl9tb2QtPkdldE5hbWUoKS4nOjonLiR0aGlzLT5fbW9kLT5HZXRWZXJzaW9uKCk7CiAgICAgICAgcmV0dXJuICRzYWx0OwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBpc19leGNsdWRlZCgkZmlsZW5hbWUpCiAgICB7CiAgICAgICAgZm9yZWFjaCggJHRoaXMtPl9leGNsdWRlcyBhcyAkZXggKSB7CiAgICAgICAgICAgIGlmKCAkZmlsZW5hbWUgPT0gJGV4ICkgcmV0dXJuIFRSVUU7CiAgICAgICAgICAgIGlmKCBmbm1hdGNoKCRleCwkZmlsZW5hbWUpICkgcmV0dXJuIFRSVUU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZmluYWwgZnVuY3Rpb24gZ2V0X2NoZWNrc3VtX2tleSgkZmlsZW5hbWUpCiAgICB7CiAgICAgICAgaWYoICFpc19maWxlKCRmaWxlbmFtZSkgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKHh0X2xhbmcoJ2Vycl92cmZ5X2ZpbGVub3Rmb3VuZCcsJGZpbGVuYW1lKSk7CgogICAgICAgICRkaXIgPSAkdGhpcy0+X21vZC0+R2V0TW9kdWxlUGF0aCgpOwogICAgICAgIGlmKCAhc3RhcnRzd2l0aCgkZmlsZW5hbWUsJGRpcikgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKHh0X2xhbmcoJ2Vycl92cmZ5X3Jvb3RwYXRoJywkZmlsZW5hbWUpKTsKCiAgICAgICAgLy8gbWFrZSBpbnRvIHJlbGF0aXZlIGZpbGVuYW1lCiAgICAgICAgJHJlbCA9IHN1YnN0cigkZmlsZW5hbWUsc3RybGVuKCRkaXIpKTsKICAgICAgICB3aGlsZSggc3RhcnRzd2l0aCgkcmVsLCcvJykgKSAkcmVsID0gc3Vic3RyKCRyZWwsMSk7CgogICAgICAgICRzYWx0ID0gJHRoaXMtPmdldF9zYWx0KCk7CiAgICAgICAgJG1kNXN1bSA9IG1kNV9maWxlKCRmaWxlbmFtZSk7CiAgICAgICAgJGlucCA9ICJ7JHNhbHR9Ojp7JHJlbH1cbiI7CiAgICAgICAgJGtleSA9IG1kNSgkaW5wKTsKICAgICAgICByZXR1cm4gJGtleTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZmluYWwgZnVuY3Rpb24gZ2V0X2NoZWNrc3VtX3ZhbHVlKCRmaWxlbmFtZSkKICAgIHsKICAgICAgICBpZiggIWlzX2ZpbGUoJGZpbGVuYW1lKSApIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oeHRfbGFuZygnZXJyX3ZyZnlfZmlsZW5vdGZvdW5kJywkZmlsZW5hbWUpKTsKCiAgICAgICAgJGRpciA9ICR0aGlzLT5fbW9kLT5HZXRNb2R1bGVQYXRoKCk7CiAgICAgICAgaWYoICFzdGFydHN3aXRoKCRmaWxlbmFtZSwkZGlyKSApIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oeHRfbGFuZygnZXJyX3ZyZnlfcm9vdHBhdGgnLCRmaWxlbmFtZSkpOwoKICAgICAgICAkc2FsdCA9ICR0aGlzLT5nZXRfc2FsdCgpOwogICAgICAgICRtZDUgPSBtZDVfZmlsZSgkZmlsZW5hbWUpOwogICAgICAgICRpbnAgPSAieyRzYWx0fTo6eyRtZDV9XG4iOwogICAgICAgICR2YWwgPSBtZDUoJGlucCk7CiAgICAgICAgcmV0dXJuICR2YWw7CiAgICB9CgogICAgcHJvdGVjdGVkIGZpbmFsIGZ1bmN0aW9uIGdldF9jaGVja3N1bV9zaWduYXR1cmUoJGtleSwkdmFsKQogICAgewogICAgICAgICRzYWx0ID0gJHRoaXMtPmdldF9zYWx0KCk7CiAgICAgICAgJG1kNSA9IG1kNSgka2V5Lic6OicuJHZhbC4nOjonLiRzYWx0LiJcbiIpOwogICAgICAgIHJldHVybiAkbWQ1OwogICAgfQoKICAgIC8vIHJlY3Vyc2l2ZSBmdW5jdGlvbiB0byB3YWxrIGRpcmVjdG9yaWVzCiAgICBwcm90ZWN0ZWQgZmluYWwgZnVuY3Rpb24gd2Fsa19kaXJlY3RvcnkoJGRpciwkY2FsbGJhY2spCiAgICB7CiAgICAgICAgJGRoID0gb3BlbmRpcigkZGlyKTsKICAgICAgICB3aGlsZSggZmFsc2UgIT09ICgkZW50cnkgPSByZWFkZGlyKCRkaCkpICkgewogICAgICAgICAgICBpZiggc3RhcnRzd2l0aCgkZW50cnksJy4nKSApIGNvbnRpbnVlOyAgIC8vIGlnbm9yZSBkb3QgZmlsZXMKICAgICAgICAgICAgaWYoICR0aGlzLT5pc19leGNsdWRlZCgkZW50cnkpICkgY29udGludWU7CgogICAgICAgICAgICAkcGF0aCA9ICRkaXIuJy8nLiRlbnRyeTsKICAgICAgICAgICAgaWYoIGlzX2RpcigkcGF0aCkgKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+d2Fsa19kaXJlY3RvcnkoJHBhdGgsJGNhbGxiYWNrKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRjYWxsYmFjaygkcGF0aCk7CiAgICAgICAgICAgICAgICAvLyB3ZSBvbmx5IGRlYWwgd2l0aCBmaWxlcwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNsb3NlZGlyKCRkaCk7CiAgICB9Cgp9IC8vIGVuZCBvZiBjbGFzcwoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/internal/class.ModuleIntegrityCodeGenerator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgc2V0IG9mIGhpZ2ggbGV2ZWwgaW50ZXJuYWwgdXRpbGl0aWVzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dC9pbnRlcm5hbAogKiBAY2F0ZWdvcnkgSW50ZXJuYWwKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxMCBieSBSb2JlcnQgQ2FtcGJlbGwKICogQGlnbm9yZQogKi8KCi8qKgogKiBUb29scyBmb3IgY2hlY2tpbmcgdGhlIGludGVncml0eSBvZiBvbmUgb3IgbW9yZSBtb2R1bGVzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dC9pbnRlcm5hbAogKiBAaWdub3JlCiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XGludGVybmFsOwoKZmluYWwgY2xhc3MgTW9kdWxlSW50ZWdyaXR5Q29kZUdlbmVyYXRvciBleHRlbmRzIE1vZHVsZUludGVncml0eUJhc2UKewogICAgcHJpdmF0ZSAkX21vZHVsZV9uYW1lOwogICAgcHJpdmF0ZSAkX2MxZGF0OwogICAgcHJpdmF0ZSAkX2QxZGF0OwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbW9kdWxlX25hbWUpCiAgICB7CiAgICAgICAgJHRoaXMtPl9tb2R1bGVfbmFtZSA9IHRyaW0oJG1vZHVsZV9uYW1lKTsKICAgICAgICAkdGhpcy0+X21vZCA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJG1vZHVsZV9uYW1lKTsKICAgICAgICBpZiggISR0aGlzLT5fbW9kICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKHh0X2xhbmcoJ2Vycl9tb2R1bGVub3Rmb3VuZCcsJG1vZHVsZV9uYW1lKSk7CgogICAgICAgICRkaXIgPSAkdGhpcy0+X21vZC0+R2V0TW9kdWxlUGF0aCgpOwogICAgICAgICR0aGlzLT5fYzFkYXQgPSAkZGlyLicvX2MxLmRhdCc7CiAgICAgICAgJHRoaXMtPl9kMWRhdCA9ICRkaXIuJy9fZDEuZGF0JzsKICAgICAgICBpZiggIWlzX3dyaXRhYmxlKCRkaXIpICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKHh0X2xhbmcoJ2Vycl92cmZ5X2RpcndyaXRhYmxlJywkbW9kdWxlX25hbWUpKTsKCiAgICAgICAgaWYoIGlzX2ZpbGUoJHRoaXMtPl9jMWRhdCkgJiYgIWlzX3dyaXRhYmxlKCR0aGlzLT5fYzFkYXQpICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKHh0X2xhbmcoJ2Vycl92cmZ5X2ZpbGV3cml0YWJsZScsJHRoaXMtPl9jMWRhdCkpOwogICAgICAgIGlmKCBpc19maWxlKCR0aGlzLT5fZDFkYXQpICYmICFpc193cml0YWJsZSgkdGhpcy0+X2QxZGF0KSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbih4dF9sYW5nKCdlcnJfdnJmeV9maWxld3JpdGFibGUnLCR0aGlzLT5fZDFkYXQpKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdlbmVyYXRlX2MxZGF0KCkKICAgIHsKICAgICAgICAkdG1wZGF0YSA9IGFycmF5KCk7CiAgICAgICAgJGRpciA9ICR0aGlzLT5fbW9kLT5HZXRNb2R1bGVQYXRoKCk7CiAgICAgICAgJHRoaXMtPndhbGtfZGlyZWN0b3J5KCRkaXIsZnVuY3Rpb24oJHBhdGgpIHVzZSAoJiR0bXBkYXRhKSB7CiAgICAgICAgICAgICAgICAka2V5ID0gJHRoaXMtPmdldF9jaGVja3N1bV9rZXkoJHBhdGgpOwogICAgICAgICAgICAgICAgJHZhbCA9ICR0aGlzLT5nZXRfY2hlY2tzdW1fdmFsdWUoJHBhdGgpOwogICAgICAgICAgICAgICAgJHNpZyA9ICR0aGlzLT5nZXRfY2hlY2tzdW1fc2lnbmF0dXJlKCRrZXksJHZhbCk7CiAgICAgICAgICAgICAgICAkbGluZSA9ICJ7JGtleX06OnskdmFsfTo6eyRzaWd9IjsKICAgICAgICAgICAgICAgICR0bXBkYXRhW10gPSAkbGluZTsKICAgICAgICAgICAgfSk7CiAgICAgICAgc29ydCgkdG1wZGF0YSk7CiAgICAgICAgJHRtcGRhdGEgPSBpbXBsb2RlKCJcbiIsJHRtcGRhdGEpLiJcbiI7CiAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJHRoaXMtPl9jMWRhdCwkdG1wZGF0YSk7CiAgICAgICAgcmV0dXJuIG1kNSgkdG1wZGF0YSk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZW5lcmF0ZV9kMWRhdCgkbWQ1KQogICAgewogICAgICAgICRkMW1kNSA9IG1kNSgieyR0aGlzLT5nZXRfc2FsdCgpfTo6JG1kNVxuIik7CiAgICAgICAgJGxpbmUgPSAieyRkMW1kNX0gKi4iOwogICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCR0aGlzLT5fZDFkYXQsJGxpbmUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5lcmF0ZSgpCiAgICB7CiAgICAgICAgJG1kNSA9ICR0aGlzLT5nZW5lcmF0ZV9jMWRhdCgpOwogICAgICAgICR0aGlzLT5nZW5lcmF0ZV9kMWRhdCgkbWQ1KTsKICAgIH0KfQ==]]></data>
	</file>
	<file>
	  <filename>/lib/internal/class.ModuleIntegrityTools.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgc2V0IG9mIGhpZ2ggbGV2ZWwgaW50ZXJuYWwgdXRpbGl0aWVzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dC9pbnRlcm5hbAogKiBAY2F0ZWdvcnkgSW50ZXJuYWwKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxMCBieSBSb2JlcnQgQ2FtcGJlbGwKICogQGlnbm9yZQogKi8KCi8qKgogKiBUb29scyBmb3IgY2hlY2tpbmcgdGhlIGludGVncml0eSBvZiBvbmUgb3IgbW9yZSBtb2R1bGVzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dC9pbnRlcm5hbAogKiBAaWdub3JlCiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XGludGVybmFsOwoKZmluYWwgY2xhc3MgTW9kdWxlSW50ZWdyaXR5VG9vbHMKewogICAgcHJpdmF0ZSBzdGF0aWMgJF9fbW9kOwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gbGFuZygpCiAgICB7CiAgICAgICAgaWYoICFzZWxmOjokX19tb2QgKSBzZWxmOjokX19tb2QgPSBceHRfdXRpbHM6OmdldF9tb2R1bGUoJ0NNU01TRXh0Jyk7CgogICAgICAgICRhcmdzID0gZnVuY19nZXRfYXJncygpOwogICAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuY19hcnJheShhcnJheShzZWxmOjokX19tb2QsJ0xhbmcnKSwkYXJncyk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY2hlY2tfbW9kdWxlKCRtb2R1bGVfbmFtZSkKICAgIHsKICAgICAgICAkcmVjID0gYXJyYXkoJ21vZHVsZSc9PiRtb2R1bGVfbmFtZSwnc3RhdHVzJz0+LTIsJ2NoZWNrc3VtJz0+bnVsbCwnbWVzc2FnZSc9Pm51bGwpOwogICAgICAgICRtb2QgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRtb2R1bGVfbmFtZSk7CiAgICAgICAgaWYoICEkbW9kICkgdGhyb3cgbmV3IFx4dF9ub3Rmb3VuZEV4Y2VwdGlvbigkbW9kdWxlX25hbWUuJyBjb3VsZCBub3QgYmUgbG9hZGVkJyk7CiAgICAgICAgJHJlY1sndmVyc2lvbiddID0gJG1vZC0+R2V0VmVyc2lvbigpOwoKICAgICAgICB0cnkgewogICAgICAgICAgICAkY2hlY2tlciA9IG5ldyBcQ01TTVNFeHRcaW50ZXJuYWxcTW9kdWxlSW50ZWdyaXR5VmFsaWRhdG9yKCRtb2R1bGVfbmFtZSk7CiAgICAgICAgICAgICRyZWNbJ2NoZWNrc3VtJ10gPSAkY2hlY2tlci0+Z2V0X3NpZ25hdHVyZSgpOwogICAgICAgICAgICAkcmVjWydzdGF0dXMnXSA9IDA7CiAgICAgICAgICAgIGlmKCAkY2hlY2tlci0+Y2hlY2tfbW9kdWxlX2ludGVncml0eSgpKSB7CiAgICAgICAgICAgICAgICAkcmVjWydzdGF0dXMnXSA9IDE7CiAgICAgICAgICAgICAgICAkcmVjWydtZXNzYWdlJ10gPSBzZWxmOjpsYW5nKCdtc2dfdnJmeV9pbnRlZ3JpdHl2ZXJpZmllZCcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYoICRjaGVja2VyLT5jaGVja19leHRyYWZpbGVzKCkgKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlY1snbWVzc2FnZSddID0gc2VsZjo6bGFuZygnZXJyX3ZyZnlfZXh0cmFmaWxlcycpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkcmVjWydtZXNzYWdlJ10gPSBzZWxmOjpsYW5nKCdzdGF0X3ZyZnlfcGFzc2VkJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2goIFx4dF9ub3Rmb3VuZGV4Y2VwdGlvbiAkZSApIHsKICAgICAgICAgICAgJHJlY1snc3RhdHVzJ10gPSAtMTsKICAgICAgICAgICAgJHJlY1snbWVzc2FnZSddID0gJGUtPkdldE1lc3NhZ2UoKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2goIFxFeGNlcHRpb24gJGUgKSB7CiAgICAgICAgICAgICRyZWNbJ3N0YXR1cyddID0gMDsKICAgICAgICAgICAgJHJlY1snbWVzc2FnZSddID0gJGUtPkdldE1lc3NhZ2UoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVjOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tfbm9uY29yZV9tb2R1bGVzKCkKICAgIHsKICAgICAgICAkbW9kdWxlX25hbWVzID0gXE1vZHVsZU9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpLT5HZXRJbnN0YWxsZWRNb2R1bGVzKCk7CiAgICAgICAgaWYoICFjb3VudCgkbW9kdWxlX25hbWVzKSApIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0NvdWxkIG5vdCBnZXQgYSBsaXN0IG9mIGluc3RhbGxlZCBtb2R1bGVzJyk7CgogICAgICAgICRvdXQgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2goICRtb2R1bGVfbmFtZXMgYXMgJG1vZHVsZV9uYW1lICkgewogICAgICAgICAgICBpZiggXE1vZHVsZU9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpLT5Jc1N5c3RlbU1vZHVsZSgkbW9kdWxlX25hbWUpICkgY29udGludWU7IC8vIGlnbm9yZSBzeXN0ZW0gbW9kdWxlcy4KCiAgICAgICAgICAgICRvdXRbXSA9IHNlbGY6OmNoZWNrX21vZHVsZSgkbW9kdWxlX25hbWUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrX3h0X21vZHVsZXMoKQogICAgewogICAgICAgICRtb2R1bGVfbmFtZXMgPSBNb2R1bGVPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKS0+R2V0SW5zdGFsbGVkTW9kdWxlcygpOwogICAgICAgIGlmKCAhY291bnQoJG1vZHVsZV9uYW1lcykgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdDb3VsZCBub3QgZ2V0IGEgbGlzdCBvZiBpbnN0YWxsZWQgbW9kdWxlcycpOwoKICAgICAgICAkb3V0ID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoKCAkbW9kdWxlX25hbWVzIGFzICRtb2R1bGVfbmFtZSApIHsKICAgICAgICAgICAgaWYoIE1vZHVsZU9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpLT5Jc1N5c3RlbU1vZHVsZSgkbW9kdWxlX25hbWUpICkgY29udGludWU7IC8vIGlnbm9yZSBzeXN0ZW0gbW9kdWxlcy4KCiAgICAgICAgICAgICRtb2QgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRtb2R1bGVfbmFtZSk7CiAgICAgICAgICAgIGlmKCAhJG1vZCApIHRocm93IG5ldyBceHRfbm90Zm91bmRFeGNlcHRpb24oJG1vZHVsZV9uYW1lLicgY291bGQgbm90IGJlIGxvYWRlZCcpOwogICAgICAgICAgICBpZiggISRtb2QgaW5zdGFuY2VvZiBDTVNNU0V4dCApIGNvbnRpbnVlOwoKICAgICAgICAgICAgJG91dFtdID0gc2VsZjo6Y2hlY2tfbW9kdWxlKCRtb2R1bGVfbmFtZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFzX2NoZWNrc3VtX2RhdGEoJG1vZCkKICAgIHsKICAgICAgICBpZiggaXNfc3RyaW5nKCRtb2QpICkgJG1vZCA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJG1vZCk7CiAgICAgICAgaWYoICFpc19vYmplY3QoJG1vZCkgfHwgISRtb2QgaW5zdGFuY2VvZiBcQ01TTW9kdWxlICkgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignSW52YWxpZCBkYXRhIHBhc3NlZCB0byAnLl9fTUVUSE9EX18pOwoKICAgICAgICAkZGlyID0gJG1vZC0+R2V0TW9kdWxlUGF0aCgpOwogICAgICAgIGlmKCBpc19maWxlKCIkZGlyL19jMS5kYXQiKSAmJiBpc19maWxlKCIkZGlyL19kMS5kYXQiKSApIHJldHVybiBUUlVFOwogICAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9jYWNoZWRfc3RhdHVzKCRtb2R1bGVfbmFtZSkKICAgIHsKICAgICAgICAkZHJpdmVyID0gbmV3IFxjbXNfZmlsZWNhY2hlX2RyaXZlcihhcnJheSgnY2FjaGVfZGlyJz0+VE1QX0NBQ0hFX0xPQ0FUSU9OLCdsaWZldGltZSc9PjI0KjM2MDApKTsKICAgICAgICAkdmFsID0gJGRyaXZlci0+Z2V0KCRtb2R1bGVfbmFtZSxfX0NMQVNTX18pOwogICAgICAgIGlmKCAhJHZhbCApIHsKICAgICAgICAgICAgLy8gZ290dGEgZG8gaXQgb3Vyc2VsdmVzCiAgICAgICAgICAgICR2YWwgPSBzZWxmOjpjaGVja19tb2R1bGUoJG1vZHVsZV9uYW1lKTsKICAgICAgICAgICAgJGRyaXZlci0+c2V0KCRtb2R1bGVfbmFtZSxzZXJpYWxpemUoJHZhbCksX19DTEFTU19fKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICR2YWwgPSB1bnNlcmlhbGl6ZSgkdmFsKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR2YWw7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjbGVhcl9jYWNoZWRfY2hlY2tzKCkKICAgIHsKICAgICAgICAkZHJpdmVyID0gbmV3IFxjbXNfZmlsZWNhY2hlX2RyaXZlcihhcnJheSgnY2FjaGVfZGlyJz0+VE1QX0NBQ0hFX0xPQ0FUSU9OLCdsaWZldGltZSc9PjI0KjM2MDApKTsKICAgICAgICAkZHJpdmVyLT5jbGVhcihfX0NMQVNTX18pOwogICAgfQp9]]></data>
	</file>
	<file>
	  <filename>/lib/internal/class.ModuleIntegrityValidator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgc2V0IG9mIGhpZ2ggbGV2ZWwgaW50ZXJuYWwgdXRpbGl0aWVzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dC9pbnRlcm5hbAogKiBAY2F0ZWdvcnkgSW50ZXJuYWwKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxMCBieSBSb2JlcnQgQ2FtcGJlbGwKICogQGlnbm9yZQogKi8KCi8qKgogKiBBIHRvb2wgdGhhdCBjYW4gdmFsaWRhdGUgdGhlIGZpbGUgaW50ZWdyaXR5IG9mIGEgbW9kdWxlIChnaXZlbiBfYzEuZGF0IGFuZCBfYzIuZGF0IGZpbGVzIGluIHRoZSBtb2R1bGUgZGlyZWN0b3J5LikKICoKICogQHBhY2thZ2UgQ01TTVNFeHQvaW50ZXJuYWwKICogQGlnbm9yZQogKi8KCm5hbWVzcGFjZSBDTVNNU0V4dFxpbnRlcm5hbDsKCmZpbmFsIGNsYXNzIE1vZHVsZUludGVncml0eVZhbGlkYXRvciBleHRlbmRzIE1vZHVsZUludGVncml0eUJhc2UKewogICAgcHJpdmF0ZSAkX21vZHVsZV9uYW1lOwogICAgcHJpdmF0ZSAkX2NkYXQ7CiAgICBwcml2YXRlICRfZGRhdDsKICAgIHByaXZhdGUgJF92ZXJpZnlfY29kZTsKICAgIHByaXZhdGUgJF9zaWduYXR1cmU7CiAgICBwcml2YXRlIHN0YXRpYyAkX19tb2Q7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtb2R1bGVfbmFtZSkKICAgIHsKICAgICAgICAkdGhpcy0+X21vZHVsZV9uYW1lID0gdHJpbSgkbW9kdWxlX25hbWUpOwogICAgICAgICR0aGlzLT5fbW9kID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgkbW9kdWxlX25hbWUpOwogICAgICAgIGlmKCAhJHRoaXMtPl9tb2QgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oeHRfbGFuZygnZXJyX21vZHVsZW5vdGZvdW5kJywkbW9kdWxlX25hbWUpKTsKICAgICAgICAkZGlyID0gJHRoaXMtPl9tb2QtPkdldE1vZHVsZVBhdGgoKTsKICAgICAgICAkdGhpcy0+X2NkYXQgPSAkZGlyLicvX2MxLmRhdCc7CiAgICAgICAgJHRoaXMtPl9kZGF0ID0gJGRpci4nL19kMS5kYXQnOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0X3ZlcmlmeV9jb2RlKCkKICAgIHsKICAgICAgICBpZiggISR0aGlzLT5fdmVyaWZ5X2NvZGUgKSB7CiAgICAgICAgICAgICRfZGRhdF9jb250ZW50cyA9IGZpbGUoJHRoaXMtPl9kZGF0KTsKICAgICAgICAgICAgJHRoaXMtPl92ZXJpZnlfY29kZSA9IHN1YnN0cigkX2RkYXRfY29udGVudHNbMF0sMCwzMik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdGhpcy0+X3ZlcmlmeV9jb2RlOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gY2hlY2tfY2hlY2tzdW1faW50ZWdyaXR5KCkKICAgIHsKICAgICAgICAkc2FsdCA9ICR0aGlzLT5nZXRfc2FsdCgpOwogICAgICAgICRiZWZvcmUgPSBtZDVfZmlsZSgkdGhpcy0+X2NkYXQpOwogICAgICAgICRiZWZvcmUgPSAkc2FsdC4nOjonLiRiZWZvcmUuIlxuIjsKICAgICAgICAkbWQ1c3VtID0gbWQ1KCRiZWZvcmUpOwogICAgICAgIGlmKCAkbWQ1c3VtICE9ICR0aGlzLT5nZXRfdmVyaWZ5X2NvZGUoKSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ291bGQgbm90IHZlcmlmeSBpbnRlZ3JpdHkgb2YgdGhlIGNoZWNrc3VtIGZpbGUnKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHBhcnNlX2NkYXQoKQogICAgewogICAgICAgICRzYWx0ID0gJHRoaXMtPmdldF9zYWx0KCk7CiAgICAgICAgJG91dCA9IGFycmF5KCk7CiAgICAgICAgJGxpbmVzID0gZmlsZSgkdGhpcy0+X2NkYXQpOwogICAgICAgIGZvcmVhY2goICRsaW5lcyBhcyAkbGluZSApIHsKICAgICAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnOjonLHRyaW0oJGxpbmUpKTsKICAgICAgICAgICAgaWYoIGNvdW50KCRwYXJ0cykgIT0gMyApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbih4dF9sYW5nKCdlcnJfdnJpZnlfYzFmaWxlYmFkJykpOwoKICAgICAgICAgICAgJHJlYyA9IGFycmF5KCk7CiAgICAgICAgICAgICRyZWNbJ2ZpbGUnXSA9ICRwYXJ0c1swXTsKICAgICAgICAgICAgJHJlY1snZmlsZWRhdGEnXSA9ICRwYXJ0c1sxXTsKICAgICAgICAgICAgaWYoICRwYXJ0c1syXSAhPSBtZDUoJHJlY1snZmlsZSddLic6OicuJHJlY1snZmlsZWRhdGEnXS4iOjp7JHNhbHR9XG4iKSApIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbih4dF9sYW5nKCdlcnJfdnJpZnlfYzFmaWxkYmFkJykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRvdXRbXSA9ICRyZWM7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfc2lnbmF0dXJlKCkKICAgIHsKICAgICAgICBpZiggISR0aGlzLT5fc2lnbmF0dXJlICkgewogICAgICAgICAgICAkZGlyID0gJHRoaXMtPl9tb2QtPkdldE1vZHVsZVBhdGgoKTsKICAgICAgICAgICAgJHRtcGRhdGEgPSBhcnJheSgpOwogICAgICAgICAgICAkdGhpcy0+d2Fsa19kaXJlY3RvcnkoJGRpcixmdW5jdGlvbigkcGF0aCkgdXNlICgmJHRtcGRhdGEpIHsKICAgICAgICAgICAgICAgICRrZXkgPSAkdGhpcy0+Z2V0X2NoZWNrc3VtX2tleSgkcGF0aCk7CiAgICAgICAgICAgICAgICAkdmFsID0gJHRoaXMtPmdldF9jaGVja3N1bV92YWx1ZSgkcGF0aCk7CiAgICAgICAgICAgICAgICAkc2lnID0gJHRoaXMtPmdldF9jaGVja3N1bV9zaWduYXR1cmUoJGtleSwkdmFsKTsKICAgICAgICAgICAgICAgICRsaW5lID0gInska2V5fTo6eyR2YWx9Ojp7JHNpZ30iOwogICAgICAgICAgICAgICAgJHRtcGRhdGFbXSA9ICRsaW5lOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHNvcnQoJHRtcGRhdGEpOwogICAgICAgICAgICAkdG1wZGF0YSA9IGltcGxvZGUoIlxuIiwkdG1wZGF0YSkuIlxuIjsKCiAgICAgICAgICAgICRzYWx0ID0gJHRoaXMtPmdldF9zYWx0KCk7CiAgICAgICAgICAgICRtZDUgPSBtZDUoJHRtcGRhdGEpOwogICAgICAgICAgICAkdGhpcy0+X3NpZ25hdHVyZSA9IG1kNSgieyRzYWx0fTo6eyRtZDV9XG4iKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0aGlzLT5fc2lnbmF0dXJlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja19leHRyYWZpbGVzKCkKICAgIHsKICAgICAgICAvLyB3YWxrIHRoZSBkaXJlY3RvcnksIGdlbmVyYXRlIHRoZSBrZXksIHNlZSBpZiB0aGVyZSBhcmUgYW55IGV4dHJhIGZpbGVzCiAgICAgICAgJGRpciA9ICR0aGlzLT5fbW9kLT5HZXRNb2R1bGVQYXRoKCk7CiAgICAgICAgJGNkYXRhID0gJHRoaXMtPnBhcnNlX2NkYXQoKTsKICAgICAgICAkY2RhdGEgPSBceHRfYXJyYXk6OnRvX2hhc2goJGNkYXRhLCdmaWxlJyk7CiAgICAgICAgJHRtcGRhdGEgPSBhcnJheSgpOwogICAgICAgICR0aGlzLT53YWxrX2RpcmVjdG9yeSgkZGlyLGZ1bmN0aW9uKCRwYXRoKSB1c2UgKCYkdG1wZGF0YSwkY2RhdGEpIHsKICAgICAgICAgICAgICAgICRrZXkgPSAkdGhpcy0+Z2V0X2NoZWNrc3VtX2tleSgkcGF0aCk7CiAgICAgICAgICAgICAgICBpZiggIWlzc2V0KCRjZGF0YVska2V5XSkgKSB7CiAgICAgICAgICAgICAgICAgICAgJHRtcGRhdGFbXSA9ICRwYXRoOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICBpZiggY291bnQoJHRtcGRhdGEpICkgcmV0dXJuICR0bXBkYXRhOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja19tb2R1bGVfaW50ZWdyaXR5KCkKICAgIHsKICAgICAgICBpZiggIWlzX2ZpbGUoJHRoaXMtPl9jZGF0KSB8fCAhaXNfZmlsZSgkdGhpcy0+X2RkYXQpICkgewogICAgICAgICAgICB0aHJvdyBuZXcgXHh0X25vdGZvdW5kZXhjZXB0aW9uKHh0X2xhbmcoJ2Vycl92cmZ5X25vY2hlY2tzdW1kYXRhJywkdGhpcy0+X21vZHVsZV9uYW1lKSk7CiAgICAgICAgfQoKICAgICAgICAvLyBub3cgdmFsaWRhdGUgdGhlIF9jLmRhdCB3aXRoIHRoZSBfZC5kYXQKICAgICAgICAkdGhpcy0+Y2hlY2tfY2hlY2tzdW1faW50ZWdyaXR5KCk7CgogICAgICAgIGlmKCAkdGhpcy0+Z2V0X3ZlcmlmeV9jb2RlKCkgIT0gJHRoaXMtPmdldF9zaWduYXR1cmUoKSApIHJldHVybiBGQUxTRTsKICAgICAgICByZXR1cm4gVFJVRTsKICAgIH0KCn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/internal/class.settings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRvIGNoYW5nZSB0aGlzIGxpY2Vuc2UgaGVhZGVyLCBjaG9vc2UgTGljZW5zZSBIZWFkZXJzIGluIFByb2plY3QgUHJvcGVydGllcy4KICogVG8gY2hhbmdlIHRoaXMgdGVtcGxhdGUgZmlsZSwgY2hvb3NlIFRvb2xzIHwgVGVtcGxhdGVzCiAqIGFuZCBvcGVuIHRoZSB0ZW1wbGF0ZSBpbiB0aGUgZWRpdG9yLgogKi8KCm5hbWVzcGFjZSBDTVNNU0V4dFxpbnRlcm5hbDsKCnVzZSBjbXNfY29uZmlnOwp1c2UgeHRfcGFyYW07CgovKioKICogRGVzY3JpcHRpb24gb2YgY2xhc3MKICoKICogQGF1dGhvciByb2IKICovCmNsYXNzIHNldHRpbmdzCnsKICAKICBwcml2YXRlICRfZGF0YSA9IFtdOwogIAogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY29uZmlnKQogIHsKICAgICR0aGlzLT5fZGF0YVsnd2F0ZXJtYXJrX3RleHQnXSAgICAgICAgICAgPSB4dF9wYXJhbTo6Z2V0X3N0cmluZygKICAgICAgJGNvbmZpZywgJ3h0X3dhdGVybWFya190ZXh0JywKICAgICAgZ2V0X3NpdGVfcHJlZmVyZW5jZSgnc2l0ZW5hbWUnLCAnQ01TTVMgU2l0ZScpCiAgICApOwogICAgJHRoaXMtPl9kYXRhWyd3YXRlcm1hcmtfdGV4dHNpemUnXSAgICAgICA9IHh0X3BhcmFtOjpnZXRfaW50KCRjb25maWcsICd4dF93YXRlcm1hcmtfdGV4dHNpemUnLCAxNCk7CiAgICAkdmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0geHRfcGFyYW06OmdldF9pbnQoJGNvbmZpZywgJ3h0X3dhdGVybWFya19hbmdsZScpOwogICAgJHRoaXMtPl9kYXRhWyd3YXRlcm1hcmtfdGV4dGFuZ2xlJ10gICAgICA9IG1heCgzNjAsIG1pbigwLCAkdmFsKSk7CiAgICAkdGhpcy0+X2RhdGFbJ3dhdGVybWFya19mb250J10gICAgICAgICAgID0geHRfcGFyYW06OmdldF9zdHJpbmcoJGNvbmZpZywgJ3h0X3dhdGVybWFya19mb250JywgJ0FSSUFMLlRURicpOwogICAgJHRoaXMtPl9kYXRhWyd3YXRlcm1hcmtfdGV4dGNvbG9yJ10gICAgICA9IHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRjb25maWcsICd4dF93YXRlcm1hcmtfdGV4dGNvbG9yJywgJyNGRkZGRkYnKTsKICAgICR0aGlzLT5fZGF0YVsnd2F0ZXJtYXJrX2JnY29sb3InXSAgICAgICAgPSB4dF9wYXJhbTo6Z2V0X3N0cmluZygkY29uZmlnLCAneHRfd2F0ZXJtYXJrX2JnY29sb3InLCAnIzAwMDAwMCcpOwogICAgJHRoaXMtPl9kYXRhWyd3YXRlcm1hcmtfdHJhbnNwYXJlbnQnXSAgICA9IHh0X3BhcmFtOjpnZXRfYm9vbCgkY29uZmlnLCAneHRfd2F0ZXJtYXJrX3RyYW5zcGFyZW50JywgVFJVRSk7CiAgICAkdGhpcy0+X2RhdGFbJ3dhdGVybWFya19maWxlJ10gICAgICAgICAgID0geHRfcGFyYW06OmdldF9zdHJpbmcoJGNvbmZpZywgJ3h0X3dhdGVybWFya19maWxlJyk7CiAgICAkdGhpcy0+X2RhdGFbJ3dhdGVybWFya19hbGlnbm1lbnQnXSAgICAgID0geHRfcGFyYW06OmdldF9pbnQoJGNvbmZpZywgJ3h0X3dhdGVybWFya19hbGlnbm1lbnQnLCAwKTsKICAgICR0aGlzLT5fZGF0YVsnd2F0ZXJtYXJrX3RyYW5zbHVjZW5jeSddICAgPSB4dF9wYXJhbTo6Z2V0X3N0cmluZygkY29uZmlnLCAneHRfd2F0ZXJtYXJrX3RyYW5zbHVjZW5jeScsIDEwMCk7CiAgICAkdGhpcy0+X2RhdGFbJ3RodW1ibmFpbHNpemUnXSAgICAgICAgICAgID0geHRfcGFyYW06OmdldF9pbnQoJGNvbmZpZywgJ3h0X3RodW1ibmFpbF9zaXplJywgNzUpOwogICAgJHRoaXMtPl9kYXRhWydpbWFnZXh0ZW5zaW9ucyddICAgICAgICAgICA9IHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRjb25maWcsICd4dF9pbWFnZXh0ZW5zaW9ucycgLiAianBnLGpwZWcscG5nIik7CiAgICAkdGhpcy0+X2RhdGFbJ2FsbG93X3dhdGVybWFya2luZyddICAgICAgID0geHRfcGFyYW06OmdldF9ib29sKCRjb25maWcsICd4dF9hbGxvd193YXRlcm1hcmtpbmcnKTsKICAgICR0aGlzLT5fZGF0YVsnYWxsb3dfcmVzaXppbmcnXSAgICAgICAgICAgPSB4dF9wYXJhbTo6Z2V0X2Jvb2woJGNvbmZpZywgJ3h0X2FsbG93X3ByZXZpZXcnKTsKICAgICR0aGlzLT5fZGF0YVsncHJldmlld19zaXplJ10gICAgICAgICAgICAgPSB4dF9wYXJhbTo6Z2V0X2ludCgkY29uZmlnLCAneHRfcHJldmlld19zaXplJywgODAwKTsKICAgICR0aGlzLT5fZGF0YVsnZGVsZXRlX29yaWdfaW1hZ2UnXSAgICAgICAgPSB4dF9wYXJhbTo6Z2V0X2Jvb2woJGNvbmZpZywgJ3h0X2RlbGV0ZV9vcmlnX2ltYWdlJyk7CiAgICAkdGhpcy0+X2RhdGFbJ2FsbG93X3RodW1ibmFpbGluZyddICAgICAgID0geHRfcGFyYW06OmdldF9ib29sKCRjb25maWcsICd4dF9hbGxvd190aHVtYm5haWxpbmcnKTsKICAgICR0aGlzLT5fZGF0YVsndXBsb2FkX2FsbG93ZWRfZmlsZXR5cGVzJ10gPSB4dF9wYXJhbTo6Z2V0X2Jvb2woJGNvbmZpZywgJ3h0X3VwbG9hZF9hbGxvd2VkX2ZpbGV0eXBlcycpOwogICAgJHRoaXMtPl9kYXRhWydyZXNpemVpbWFnZSddICAgICAgICAgICAgICA9IHh0X3BhcmFtOjpnZXRfYm9vbCgkY29uZmlnLCAneHRfcmVzaXplX2ltYWdlcycpOyAvLyBkb2N1bWVudCB0aGlzLgogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoc3RyaW5nICRrZXkpCiAgewogICAgc3dpdGNoKCRrZXkpCiAgICB7CiAgICAgIGNhc2UgJ3dhdGVybWFya190ZXh0JzoKICAgICAgY2FzZSAnd2F0ZXJtYXJrX2ZvbnQnOgogICAgICBjYXNlICd3YXRlcm1hcmtfdGV4dGNvbG9yJzoKICAgICAgY2FzZSAnd2F0ZXJtYXJrX2JnY29sb3InOgogICAgICBjYXNlICd3YXRlcm1hcmtfZmlsZSc6CiAgICAgIGNhc2UgJ3dhdGVybWFya19hbGlnbm1lbnQnOgogICAgICBjYXNlICdpbWFnZXh0ZW5zaW9ucyc6CiAgICAgIGNhc2UgJ3VwbG9hZF9hbGxvd2VkX2ZpbGV0eXBlcyc6CiAgICAgICAgcmV0dXJuIHRyaW0oJHRoaXMtPl9kYXRhWyRrZXldKTsKICAgICAgY2FzZSAncmVzaXplaW1hZ2UnOgogICAgICBjYXNlICd0aHVtYm5haWxzaXplJzoKICAgICAgY2FzZSAnd2F0ZXJtYXJrX3RleHRzaXplJzoKICAgICAgY2FzZSAnd2F0ZXJtYXJrX3RleHRhbmdsZSc6CiAgICAgIGNhc2UgJ3dhdGVybWFya190cmFuc2x1Y2VuY3knOgogICAgICAgIHJldHVybiAoaW50KSR0aGlzLT5fZGF0YVska2V5XTsKICAgICAgY2FzZSAnYWxsb3dfdGh1bWJuYWlsaW5nJzoKICAgICAgY2FzZSAnYWxsb3dfd2F0ZXJtYXJraW5nJzoKICAgICAgY2FzZSAnYWxsb3dfcmVzaXppbmcnOgogICAgICBjYXNlICdkZWxldGVfb3JpZ19pbWFnZSc6CiAgICAgIGNhc2UgJ3dhdGVybWFya190cmFuc3BhcmVudCc6CiAgICAgICAgcmV0dXJuIChib29sKSR0aGlzLT5fZGF0YVska2V5XTsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiJGtleSBpcyBub3QgYSBnZXR0YWJsZSBwcm9wZXJ0eSBvZiAiIC4gX19DTEFTU19fKTsKICAgIH0KICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIF9fc2V0KHN0cmluZyAka2V5LCAkdmFsKQogIHsKICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oIiRrZXkgaXMgbm90IGEgc2V0dGFibGUgcHJvcGVydHkgb2YgIiAuIF9fQ0xBU1NfXyk7CiAgfQogIAp9IC8vIGNsYXNzCg==]]></data>
	</file>
	<file>
	  <filename>/lib/internal/class.utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgc2V0IG9mIGhpZ2ggbGV2ZWwgaW50ZXJuYWwgdXRpbGl0aWVzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dC9pbnRlcm5hbAogKiBAY2F0ZWdvcnkgSW50ZXJuYWwKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxMCBieSBSb2JlcnQgQ2FtcGJlbGwKICogQGlnbm9yZQogKi8KCm5hbWVzcGFjZSBDTVNNU0V4dFxpbnRlcm5hbDsKCi8qKgogKiBBIHNldCBvZiBoaWdoIGxldmVsIGNvbnZlbmllbmNlIG1ldGhvZHMuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0L2ludGVybmFsCiAqIEBpZ25vcmUKICovCgoKZmluYWwgY2xhc3MgTW9kdWxlSW50ZWdyaXR5VmFsaWRhdG9yCnsKICAgIHByaXZhdGUgJF9tb2R1bGVfbmFtZTsKICAgIHByaXZhdGUgJF9tb2Q7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtb2R1bGVfbmFtZSkKICAgIHsKICAgICAgICAkdGhpcy0+X21vZHVsZV9uYW1lID0gdHJpbSgkbW9kdWxlX25hbWUpOwogICAgICAgICR0aGlzLT5fbW9kID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgkbW9kdWxlX25hbWUpOwogICAgICAgIGlmKCAhJHRoaXMtPl9tb2QgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0Nhbm5vdCBnZXQgbW9kdWxlIGluc3RhbmNlIGZvciAnLiRtb2R1bGVfbmFtZSk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja19jaGVja3N1bV9pbnRlZ3JpdHkoJG1vZHVsZV9uYW1lLCRfY2RhdCwkX2RkYXQpCiAgICB7CiAgICAgICAgJHNhbHQgPSAkdGhpcy0+X21vZC0+R2V0TmFtZSgpLic6OicuJHRoaXMtPl9tb2QtPkdldFZlcnNpb24oKTsKICAgICAgICAkbWQ1c3VtID0gbWQ1KCRzYWx0Lic6OicubWQ1X2ZpbGUoJF9jZGF0KSk7CiAgICAgICAgJF9kZGF0X2NvbnRlbnRzID0gZmlsZSgkZGRhdCk7CiAgICAgICAgJF9kZGF0X2NvbnRlbnRzID0gJF9kZGF0X2NvbnRlbnRzWzBdOwogICAgICAgIGxpc3QoJHZlcmlmeV9jb2RlLCRqdW5rKSA9IGV4cGxvZGUoJyAnLCRfZGRhdF9jb250ZW50cywyKTsKICAgICAgICBpZiggJG1kNXN1bSAhPSAkdmVyaWZ5X2NvZGUgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0NvdWxkIG5vdCB2ZXJpZnkgaW50ZWdyaXR5IG9mIHRoZSBjaGVja3N1bSBmaWxlJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNoZWNrX21vZHVsZV9pbnRlZ3JpdHkoKQogICAgewogICAgICAgICRkaXIgPSAkdGhpcy0+X21vZC0+R2V0TW9kdWxlUGF0aCgpOwogICAgICAgICRfY2RhdCA9ICRkaXIuJy9fYzEuZGF0JzsKICAgICAgICAkX2RkYXQgPSAkZGlyLicvX2QxLmRhdCc7CiAgICAgICAgaWYoICFpc19maWxlKCRfY2RhdCkgfHwgIWlzX2ZpbGUoJF9kZGF0KSApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdDYW5ub3QgdmFsaWRhdGUgZmlsZXMgZm9yICcuJG1vZHVsZV9uYW1lLicgKGNoZWNrc3VtIGZpbGVzIGRvIG5vdCBleGlzdCknKTsKICAgICAgICB9CgogICAgICAgIC8vIG5vdyB2YWxpZGF0ZSB0aGUgX2MuZGEgd2l0aCB0aGUgX2QuZGF0CiAgICAgICAgc2VsZjo6Y2hlY2tfY2hlY2tzdW1faW50ZWdyaXR5KCRfY2RhdCwkX2RkYXQpOwoKICAgICAgICAvLyBnZXQgb3VyIGNkYXQgZGF0YSBhbmQgcGFyc2UgaXQgaW50byB0aGUgdHdvIGNoZWNrc3VtcyBhbmQgYSB2ZXJpZmllZCBmbGFnCiAgICAgICAgLy8gbm93IHZhbGlkYXRlIGFsbCBvZiB0aGUgZmlsZXMgd2l0aGluIHRoZSBtb2R1bGUgZGlyZWN0b3J5IChleGNlcHQgc3BlY2lhbCBmaWxlcykKICAgICAgICAvLyBub3cgc2VlIGlmIHRoZXJlIGFyZSBhbnkgY2hlY2tzdW0gcmVjb3JkcyBsZWZ0IHRoYXQgaGF2ZSBub3QgYmVlbiB2YWxpZGF0ZWQKICAgIH0KfSAvLyBlbmQgb2YgY2xhc3MKCiMKIyBFT0YKIwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/internal_plugins</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/internal_plugins/block.restrict_content.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogUmVzdHJpY3RzIGFjY2VzcyB0byB0aGUgYmxvY2tlZCBjb250ZW50IGJ5IElQIGFkZHJlc3Mgb3IgYnkgYmFja2VuZCB1c2VycyBhY2Nlc3MuDQogKg0KKiBAcGFyYW0gIGFycmF5ICAgICAgICAgICAgICAgICAgICAgJHBhcmFtcw0KICogICAgICAgICAgICAgICAgICAgICAgLSBieTogaXAsIHVzZXIgb3Igc3VwZXJ1c2VyIChkZWZhdWx0OiB1c2VyKTsNCiAqICAgICAgICAgICAgICAgICAgICAgIC0gbGlzdDogQW4gYXJyYXkgb2YgSVAgYWRkcmVzc2VzIG9yIGEgc2luZ2xlIElQIGFkZHJlc3MNCiAqICAgICAgICAgICAgICAgICAgICAgIChpZiBlbXB0eSwgbm8gSVBzIHdpbGwgYmUgcmVzdHJpY3RlZCk7DQogKiAgICAgICAgICAgICAgICAgICAgICAtIGdyb3VwczogQW4gYXJyYXkgb2YgZ3JvdXAgaWRzIG9yIGEgc2luZ2xlIGdyb3VwIGlkDQogKiAgICAgICAgICAgICAgICAgICAgICAoaWYgZW1wdHksIG5vIGdyb3VwcyB3aWxsIGJlIHJlc3RyaWN0ZWQpOw0KICoNCiAqICAgICAgICAgICAgICAgVGhlIHJlc3RyaWN0aW9uIHdpbGwgYmUgaW4gZWZmZWN0IG9ubHkgZm9yIG9uZSBvZiB0aGUgdGhyZWUgJ2J5JyBtb2Rlcy4NCiAqICAgICAgICAgICAgICAgV2lob3V0IHBhcmFtZXRlcnMgYW55IGJhY2tlbmQgbG9nZ2VkLWluIHVzZXIgd2lsbCBiZSBhbGxvd2VkIHRvIGFjY2VzcyB0aGUgZGF0YS4NCiAqICAgICAgICAgICAgICAgQnkgc3VwZXJ1c2VyIG1vZGUgc3VwZXJjZWRlcyBhbGwgb3RoZXIgc2V0dGluZ3MuDQogKg0KICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQNCiAqIEBwYXJhbSBcU21hcnR5X0ludGVybmFsX1RlbXBsYXRlICR0ZW1wbGF0ZQ0KICogQHBhcmFtICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlcGVhdA0KICoNCiAqIEByZXR1cm4gc3RyaW5nDQogKi8NCmZ1bmN0aW9uIHNtYXJ0eV9ibG9ja19yZXN0cmljdF9jb250ZW50KCRwYXJhbXMsICRjb250ZW50LCBTbWFydHlfSW50ZXJuYWxfVGVtcGxhdGUgJHRlbXBsYXRlLCAmJHJlcGVhdCkgOiBzdHJpbmcNCnsNCiAgaWYoISRyZXBlYXQgJiYgaXNzZXQoJGNvbnRlbnQpKQ0KICB7DQogICAgJGlzX3N1cGVydXNlciA9IGZ1bmN0aW9uKCR1aWQpDQogICAgew0KICAgICAgIyB3ZSBoYXZlIGEgYnVnIGluIHRoZSBVc2VyT3BlcmF0aW9uczo6SXNTdXBlcnVzZXIoKSBmdW5jdGlvbg0KICAgICAgIyBpZiBpdCBmYWlscyBpdCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiB3aGljaCBtZWFucyB0aGUgdXNlciBpcyBub3QgYSBzdXBlcnVzZXIgYW55d2F5DQogICAgICB0cnkNCiAgICAgIHsNCiAgICAgICAgJHVwID0gVXNlck9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpOw0KICAgICAgICAkcmV0ID0gJHVwLT5Jc1N1cGVydXNlcigkdWlkKTsNCiAgICAgIH0NCiAgICAgIGNhdGNoKFxBcmd1bWVudENvdW50RXJyb3IgJGUpDQogICAgICB7DQogICAgICAgICRyZXQgPSAoMSA9PT0gKGludCkkdWlkKTsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgcmV0dXJuICRyZXQ7DQogICAgfTsNCiAgICANCiAgICAkYnkgPSAkcGFyYW1zWydieSddID8/ICd1c2VyJzsNCiAgICANCiAgICBpZignc3VwZXJ1c2VyJyA9PSAkYnkpDQogICAgew0KICAgICAgJHVpZCA9IGdldF91c2VyaWQoRkFMU0UpOw0KICAgICAgaWYoISRpc19zdXBlcnVzZXIoJHVpZCkpIHsgcmV0dXJuICcnOyB9DQogICAgfQ0KICAgIA0KICAgIGlmKCdpcCcgPT0gJGJ5KQ0KICAgIHsNCiAgICAgICRsaXN0ID0gJHBhcmFtc1snbGlzdCddID8/IFtdOw0KICAgICAgJGxpc3QgPSBpc19hcnJheSgkbGlzdCkgPyAkbGlzdCA6IFskbGlzdF07DQogICAgICANCiAgICAgIGlmKCFlbXB0eSgkbGlzdCkpDQogICAgICB7DQogICAgICAgICRjdXJyZW50X2lwID0geHRfdXRpbHM6OmdldF9yZWFsX2lwKCk7DQogICAgICAgIA0KICAgICAgICBmb3JlYWNoKCRsaXN0IGFzICRpcFBhdHRlcm4pDQogICAgICAgIHsNCiAgICAgICAgICAvLyBFc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuIGFuZCByZXBsYWNlIHdpbGRjYXJkcw0KICAgICAgICAgICRpcFBhdHRlcm4gPSBwcmVnX3F1b3RlKCRpcFBhdHRlcm4sICcvJyk7DQogICAgICAgICAgJGlwUGF0dGVybiA9IHN0cl9yZXBsYWNlKFsnXConLCAnXD8nXSwgWycuKicsICcuJ10sICRpcFBhdHRlcm4pOw0KICAgICAgICAgIA0KICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBJUCBtYXRjaGVzIHRoZSBwYXR0ZXJuDQogICAgICAgICAgaWYocHJlZ19tYXRjaCgiL14kaXBQYXR0ZXJuJC8iLCAkY3VycmVudF9pcCkpIHsgcmV0dXJuICcnOyB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIA0KICAgICAgcmV0dXJuICRjb250ZW50Ow0KICAgIH0NCiAgICANCiAgICAkZ3JvdXBzID0gJHBhcmFtc1snZ3JvdXBzJ10gPz8gW107DQogICAgDQogICAgJGdyb3VwcyA9IGlzX2FycmF5KCRncm91cHMpID8gJGdyb3VwcyA6IFskZ3JvdXBzXTsNCiAgICANCiAgICAkdXAgPSBVc2VyT3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCk7DQogICAgDQogICAgJHVpZCA9IGdldF91c2VyaWQoRkFMU0UpOw0KICAgIA0KICAgIGlmKCR1aWQpDQogICAgew0KICAgICAgaWYoISRpc19zdXBlcnVzZXIoJHVpZCkpDQogICAgICB7DQogICAgICAgIGlmKCFlbXB0eSgkZ3JvdXBzKSkNCiAgICAgICAgew0KICAgICAgICAgICMgY2hlY2sgaWYgdGhlIGdyb3VwcyBhcnJheSBhcyBvbmx5IGludGVnZXJzDQogICAgICAgICAgJGdyb3VwcyA9IGFycmF5X21hcCgnXGludHZhbCcsICRncm91cHMpOw0KICAgICAgICAgIA0KICAgICAgICAgIGlmKCFpc19hcnJheSgkZ3JvdXBzKSkNCiAgICAgICAgICB7DQogICAgICAgICAgICAjIHdlIG11c3QgaGF2ZSBhbiBhcnJheSBvZiBnaWRzIGlmIHNvbWV0aGluZyB3ZW50IHdyb25nIHdlIGp1c3QgcmV0dXJuIGFuIGVtcHR5IHN0cmluZw0KICAgICAgICAgICAgIyBldmVuIHRob3VnaCB0aGUgZXJyb3IgaXMgYSBydW50aW1lIGVycm9yIChmcm9udGVuZCB1c2VycyBzaG91bGQgbmV2ZXIgc2VlIHRoYXQgYW55d2F5KQ0KICAgICAgICAgICAgXGF1ZGl0KCR1aWQsICdyZXN0cmljdF9ieV9iYWNrZW5kJywgJ0Vycm9yOiBncm91cHMgaXMgbm90IGFuIGFycmF5IG9mIGdpZHMnKTsNCiAgICAgICAgICAgIHJldHVybiAnJzsNCiAgICAgICAgICB9DQogICAgICAgICAgDQogICAgICAgICAgJHVzZXJfZ3JvdXBzID0gJHVwLT5HZXRNZW1iZXJHcm91cHMoJHVpZCk7DQogICAgICAgICAgDQogICAgICAgICAgJGlzX2luX2dyb3VwID0gRkFMU0U7DQogICAgICAgICAgZm9yZWFjaCgkZ3JvdXBzIGFzICRncm91cCkNCiAgICAgICAgICB7DQogICAgICAgICAgICBpZihpbl9hcnJheSgkZ3JvdXAsICR1c2VyX2dyb3VwcykpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICRpc19pbl9ncm91cCA9IFRSVUU7DQogICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgICANCiAgICAgICAgICBpZighJGlzX2luX2dyb3VwKSB7IHJldHVybiAnJzsgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgICMgc3VwZXJ1c2VyDQogICAgICAgIHJldHVybiAkY29udGVudDsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgIyBvaywgd2UgYXJlIGFsbG93ZWQNCiAgICAgIHJldHVybiAkY29udGVudDsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICcnOw0KICAgIA0KICB9DQogIA0KICByZXR1cm4gJyc7DQp9DQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/internal_plugins/function.2fa.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ01TTVMgMkZBIFBsdWdpbiB3aXRoIEV4Y2VwdGlvbiBIYW5kbGluZyBhbmQgU3VjY2VzcyBGbGFnDQogKg0KICogQHBhcmFtIGFycmF5ICRwYXJhbXMNCiAqICAgICAgICAgICAgICAgICAgICAgLSBlbWFpbDogZW1haWwgYWRkcmVzcyB0byB2YWxpZGF0ZSAobWFuZGF0b3J5KQ0KICogICAgICAgICAgICAgICAgICAgICAtIHJlc2VuZDogd2hldGhlciB0byByZS1zZW5kIHRoZSBjb2RlIChvcHRpb25hbCkNCiAqICAgICAgICAgICAgICAgICAgICAgLSBzZWNyZXQ6IGVuY3J5cHRpb24ga2V5IChvcHRpb25hbCwgZGVmYXVsdHMgdG8gc2l0ZSBzaWduYXR1cmUpDQogKiAgICAgICAgICAgICAgICAgICAgIC0gY29kZV9sZW5ndGg6IGxlbmd0aCBvZiB0aGUgY29kZSB0byBnZW5lcmF0ZSAoZGVmYXVsdDogNikNCiAqICAgICAgICAgICAgICAgICAgICAgLSBjb2RlX2V4cGlyYXRpb246IGV4cGlyYXRpb24gdGltZSBvZiB0aGUgY29kZSBpbiBzZWNvbmRzIChkZWZhdWx0OiAzMDApDQogKiAgICAgICAgICAgICAgICAgICAgIC0gZW1haWxfc3ViamVjdDogc3ViamVjdCBvZiB0aGUgY29kZSBlbWFpbCAob3B0aW9uYWwpDQogKiAgICAgICAgICAgICAgICAgICAgIC0gZW1haWxfdGVtcGxhdGU6IHRlbXBsYXRlIGZvciB0aGUgZW1haWwgYm9keSAob3B0aW9uYWwpDQogKiAgICAgICAgICAgICAgICAgICAgIC0gZW1haWxfdGVtcGxhdGVfbmFtZTogRGVzaWduIE1hbmFnZXIgdGVtcGxhdGUgbmFtZSAob3B0aW9uYWwpDQogKiAgICAgICAgICAgICAgICAgICAgIC0gcmVkaXJlY3RfdG86IHBhZ2UgdG8gcmVkaXJlY3QgYWZ0ZXIgc3VjY2Vzc2Z1bCB2YWxpZGF0aW9uIChvcHRpb25hbCkNCiAqICAgICAgICAgICAgICAgICAgICAgLSBzdWNjZXNzX2ZsYWc6IHNlc3Npb24gZmxhZyBmb3IgdmFsaWRhdGlvbiBzdWNjZXNzIHN0YXR1cyAob3B0aW9uYWwsIGRlZmF1bHRzIHRvICcyZmEtdmFsaWRhdGVkJykNCiAqLw0KZnVuY3Rpb24gc21hcnR5X2Z1bmN0aW9uXzJmYSgkcGFyYW1zLCAkc21hcnR5KQ0Kew0KICAkZW1haWwgPSAkcGFyYW1zWydlbWFpbCddID8/ICcnOw0KICBpZiAoZW1wdHkoJGVtYWlsKSkNCiAgew0KICAgIHNldF8yZmFfbWVzc2FnZSgnRXJyb3IgLSBFbWFpbCBhZGRyZXNzIG5vdCBwcm92aWRlZCcsICcwMScpOw0KICAgIHJldHVybjsNCiAgfQ0KICANCiAgJHJlc2VuZCAgICAgICAgICA9ICRwYXJhbXNbJ3Jlc2VuZCddID8/IGZhbHNlOw0KICAkY29kZV9sZW5ndGggICAgID0gJHBhcmFtc1snY29kZV9sZW5ndGgnXSA/PyA2Ow0KICAkY29kZV9leHBpcmF0aW9uID0gJHBhcmFtc1snY29kZV9leHBpcmF0aW9uJ10gPz8gMzAwOw0KICAkcmVkaXJlY3RfdG8gICAgID0gJHBhcmFtc1sncmVkaXJlY3RfdG8nXSA/PyAnMmZhLXZhbGlkYXRlZCc7DQogICRzdWNjZXNzX2ZsYWcgICAgPSAkcGFyYW1zWydzdWNjZXNzX2ZsYWcnXSA/PyAnMmZhLXZhbGlkYXRlZCc7DQogICRlbmNyeXB0aW9uX2tleSAgPSAkcGFyYW1zWydzZWNyZXQnXSA/PyBnZXRfY21zbXNfc2lnbmF0dXJlKCk7IC8vIFVzZSBDTVNNUyBzaWduYXR1cmUgb3IgcHJvdmlkZWQga2V5DQogICRpdiAgICAgICAgICAgICAgPSAnMTIzNDU2Nzg5MTAxMTEyMSc7IC8vIEZpeGVkIElWIGZvciBDTVNNUyBkaXN0aW5jdGlvbg0KICANCiAgLy8gSW5pdGlhbGl6ZSB0aGUgZGF0YXN0b3JlIHdpdGggZXhwaXJhdGlvbiBpbnRlcnZhbA0KICAkdG1wX2RhdGEgPSBuZXcgeHRfZGF0YXN0b3JlKCRjb2RlX2V4cGlyYXRpb24pOw0KICANCiAgLy8gSGFuZGxlIGZvcm0gc3VibWlzc2lvbiB2aWEgJF9QT1NUDQogIGlmICgkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSA9PT0gJ1BPU1QnICYmIGlzc2V0KCRfUE9TVFsnMmZhX2NvZGUnXSkpDQogIHsNCiAgICAkaW5wdXRfY29kZSA9ICRfUE9TVFsnMmZhX2NvZGUnXTsNCiAgICB2YWxpZGF0ZV8yZmFfY29kZSgkaW5wdXRfY29kZSwgJGVtYWlsLCAkdG1wX2RhdGEsICRlbmNyeXB0aW9uX2tleSwgJGl2LCAkcmVkaXJlY3RfdG8sICRzdWNjZXNzX2ZsYWcpOw0KICAgIHJldHVybjsNCiAgfQ0KICANCiAgLy8gQ2hlY2sgaWYgYSB2YWxpZCBjb2RlIGFscmVhZHkgZXhpc3RzIHRvIHByZXZlbnQgcmVzZW5kaW5nDQogIGlmICghJHJlc2VuZCkNCiAgew0KICAgICRleGlzdGluZ19jb2RlICA9ICR0bXBfZGF0YS0+Z2V0KCd0d29fZmFjdG9yX2F1dGgnLCAkZW1haWwsICdjb2RlJyk7DQogICAgJGNvZGVfdGltZXN0YW1wID0gJHRtcF9kYXRhLT5nZXQoJ3R3b19mYWN0b3JfYXV0aCcsICRlbWFpbCwgJ3RpbWVzdGFtcCcpOw0KICAgIA0KICAgIGlmICgkZXhpc3RpbmdfY29kZSAmJiAodGltZSgpIC0gJGNvZGVfdGltZXN0YW1wKSA8ICRjb2RlX2V4cGlyYXRpb24pDQogICAgew0KICAgICAgc2V0XzJmYV9tZXNzYWdlKCdDb2RlIGhhcyBhbHJlYWR5IGJlZW4gc2VudC4gUGxlYXNlIGNoZWNrIHlvdXIgZW1haWwgb3IgcmVxdWVzdCBhIHJlc2VuZC4nLCAnMDQnKTsNCiAgICAgIHJldHVybjsNCiAgICB9DQogIH0NCiAgDQogIC8vIEdlbmVyYXRlIGEgbmV3IGNvZGUgd2l0aCBleGNlcHRpb24gaGFuZGxpbmcNCiAgdHJ5DQogIHsNCiAgICAkYXV0aF9jb2RlID0gcmFuZG9tX2ludCgxMCAqKiAoJGNvZGVfbGVuZ3RoIC0gMSksICgxMCAqKiAkY29kZV9sZW5ndGgpIC0gMSk7DQogIH0NCiAgY2F0Y2ggKEV4Y2VwdGlvbiAkZSkNCiAgew0KICAgIHNldF8yZmFfbWVzc2FnZSgnRXJyb3IgZ2VuZXJhdGluZyAyRkEgY29kZS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nLCAnMDMnKTsNCiAgICAkX1NFU1NJT05bJHN1Y2Nlc3NfZmxhZ10gPSAwOw0KICAgIHJldHVybjsNCiAgfQ0KICANCiAgJGVuY3J5cHRlZF9jb2RlID0gb3BlbnNzbF9lbmNyeXB0KCRhdXRoX2NvZGUsICdBRVMtMTI4LUNUUicsICRlbmNyeXB0aW9uX2tleSwgMCwgJGl2KTsNCiAgDQogIC8vIFN0b3JlIHRoZSBjb2RlIGFuZCB0aW1lc3RhbXAgaW4geHRfZGF0YXN0b3JlDQogICR0bXBfZGF0YS0+c3RvcmUoJGF1dGhfY29kZSwgJ3R3b19mYWN0b3JfYXV0aCcsICRlbWFpbCwgJ2NvZGUnKTsNCiAgJHRtcF9kYXRhLT5zdG9yZSh0aW1lKCksICd0d29fZmFjdG9yX2F1dGgnLCAkZW1haWwsICd0aW1lc3RhbXAnKTsNCiAgJF9TRVNTSU9OWyd0d29fZmFjdG9yX2F1dGgnXSA9IFsNCiAgICAnZW5jcnlwdGVkX2NvZGUnID0+ICRlbmNyeXB0ZWRfY29kZSwNCiAgICAnZXhwaXJlc19hdCcgICAgID0+IHRpbWUoKSArICRjb2RlX2V4cGlyYXRpb24sIC8vIEV4cGxpY2l0IGV4cGlyYXRpb24gdGltZXN0YW1wIGZvciBzZXNzaW9uIGNvbXBhcmlzb24NCiAgXTsNCiAgDQogIC8vIFNlbmQgdGhlIGF1dGhlbnRpY2F0aW9uIGNvZGUgZW1haWwNCiAgc2VuZF9hdXRoX2NvZGVfZW1haWwoJGVtYWlsLCAkYXV0aF9jb2RlLCAkcGFyYW1zLCAkc21hcnR5KTsNCiAgc2V0XzJmYV9tZXNzYWdlKCdBIGNvZGUgaGFzIGJlZW4gc2VudCB0byB5b3VyIGVtYWlsLicsICcwMCcpOw0KfQ0KDQovLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIDJGQSBjb2RlIGFuZCBoYW5kbGUgc3VjY2VzcyBjbGVhbnVwDQpmdW5jdGlvbiB2YWxpZGF0ZV8yZmFfY29kZSgkaW5wdXRfY29kZSwgJGVtYWlsLCAkdG1wX2RhdGEsICRlbmNyeXB0aW9uX2tleSwgJGl2LCAkcmVkaXJlY3RfdG8sICRzdWNjZXNzX2ZsYWcpDQp7DQogIC8vIFJldHJpZXZlIHN0b3JlZCBjb2RlIGFuZCB0aW1lc3RhbXANCiAgJHN0b3JlZF9jb2RlID0gJHRtcF9kYXRhLT5nZXQoJ3R3b19mYWN0b3JfYXV0aCcsICRlbWFpbCwgJ2NvZGUnKTsNCiAgJHRpbWVzdGFtcCA9ICR0bXBfZGF0YS0+Z2V0KCd0d29fZmFjdG9yX2F1dGgnLCAkZW1haWwsICd0aW1lc3RhbXAnKTsNCiAgDQogIC8vIFZhbGlkYXRlIHN0b3JlZCB2YWx1ZXMNCiAgaWYgKCEkc3RvcmVkX2NvZGUgfHwgISR0aW1lc3RhbXApDQogIHsNCiAgICBzZXRfMmZhX21lc3NhZ2UoJ0Vycm9yIC0gTm8gY29kZSBmb3VuZCBvciBjb2RlIGV4cGlyZWQnLCAnMDInKTsNCiAgICAkX1NFU1NJT05bJHN1Y2Nlc3NfZmxhZ10gPSAwOw0KICAgIHJldHVybjsNCiAgfQ0KICANCiAgLy8gQ2hlY2sgZXhwaXJhdGlvbiB0aW1lDQogICRleHBpcmF0aW9uX3RpbWUgPSAkX1NFU1NJT05bJ3R3b19mYWN0b3JfYXV0aCddWydleHBpcmVzX2F0J107DQogIGlmICh0aW1lKCkgPiAkZXhwaXJhdGlvbl90aW1lKQ0KICB7DQogICAgc2V0XzJmYV9tZXNzYWdlKCdFcnJvciAtIFRoZSBjb2RlIGhhcyBleHBpcmVkJywgJzA1Jyk7DQogICAgJHRtcF9kYXRhLT5lcmFzZSgndHdvX2ZhY3Rvcl9hdXRoJywgJGVtYWlsLCAnY29kZScpOyAvLyBSZW1vdmUgZXhwaXJlZCBjb2RlDQogICAgJHRtcF9kYXRhLT5lcmFzZSgndHdvX2ZhY3Rvcl9hdXRoJywgJGVtYWlsLCAndGltZXN0YW1wJyk7IC8vIFJlbW92ZSB0aW1lc3RhbXAgYXMgd2VsbA0KICAgICRfU0VTU0lPTlskc3VjY2Vzc19mbGFnXSA9IDA7DQogICAgcmV0dXJuOw0KICB9DQogIA0KICAvLyBEZWNyeXB0IHRoZSBzZXNzaW9uIGNvZGUgZm9yIGNvbXBhcmlzb24NCiAgJGRlY3J5cHRlZF9jb2RlID0gb3BlbnNzbF9kZWNyeXB0KCRfU0VTU0lPTlsndHdvX2ZhY3Rvcl9hdXRoJ11bJ2VuY3J5cHRlZF9jb2RlJ10sICdBRVMtMTI4LUNUUicsICRlbmNyeXB0aW9uX2tleSwgMCwgJGl2KTsNCiAgDQogIC8vIFZhbGlkYXRlIGFsbCBjb25kaXRpb25zIGZvciBhIHN1Y2Nlc3NmdWwgbWF0Y2gNCiAgaWYgKCRzdG9yZWRfY29kZSA9PT0gJGlucHV0X2NvZGUgJiYgJGRlY3J5cHRlZF9jb2RlID09PSAkaW5wdXRfY29kZSkNCiAgew0KICAgIHNldF8yZmFfbWVzc2FnZSgnMkZBIGNvZGUgc3VjY2Vzc2Z1bGx5IHZhbGlkYXRlZCEnLCAnMDAnKTsNCiAgICAkdG1wX2RhdGEtPmVyYXNlKCd0d29fZmFjdG9yX2F1dGgnLCAkZW1haWwsICdjb2RlJyk7ICAgICAgLy8gRXJhc2UgdGhlIGNvZGUgZnJvbSBkYg0KICAgICR0bXBfZGF0YS0+ZXJhc2UoJ3R3b19mYWN0b3JfYXV0aCcsICRlbWFpbCwgJ3RpbWVzdGFtcCcpOyAvLyBFcmFzZSB0aGUgdGltZXN0YW1wIGFzIHdlbGwNCiAgICAkdG1wX2RhdGEtPnJlbW92ZV9leHBpcmVkKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYW51cCBleHBpcmVkIGVudHJpZXMNCiAgICAkX1NFU1NJT05bJHN1Y2Nlc3NfZmxhZ10gPSAxOw0KICAgIHJlZGlyZWN0X3RvX2FsaWFzKCRyZWRpcmVjdF90byk7DQogIH0NCiAgZWxzZQ0KICB7DQogICAgc2V0XzJmYV9tZXNzYWdlKCdFcnJvciAtIEludmFsaWQgMkZBIGNvZGUnLCAnMDInKTsNCiAgICAkX1NFU1NJT05bJHN1Y2Nlc3NfZmxhZ10gPSAwOw0KICB9DQp9DQoNCi8vIEhlbHBlciBmdW5jdGlvbiB0byBzZW5kIHRoZSBhdXRoZW50aWNhdGlvbiBjb2RlIGVtYWlsDQpmdW5jdGlvbiBzZW5kX2F1dGhfY29kZV9lbWFpbCgkZW1haWwsICRhdXRoX2NvZGUsICRwYXJhbXMsICRzbWFydHkpDQp7DQogICRlbWFpbF9zdWJqZWN0ICAgICAgID0gJHBhcmFtc1snZW1haWxfc3ViamVjdCddID8/ICdZb3VyIEF1dGhlbnRpY2F0aW9uIENvZGUnOw0KICAkZW1haWxfdGVtcGxhdGUgICAgICA9ICRwYXJhbXNbJ2VtYWlsX3RlbXBsYXRlJ10gPz8gJzxwPllvdXIgYXV0aGVudGljYXRpb24gY29kZSBpczogPHN0cm9uZz57JGNvZGV9PC9zdHJvbmc+PC9wPic7DQogICRlbWFpbF90ZW1wbGF0ZV9uYW1lID0gJHBhcmFtc1snZW1haWxfdGVtcGxhdGVfbmFtZSddID8/ICcnOw0KICANCiAgaWYgKCFlbXB0eSgkZW1haWxfdGVtcGxhdGVfbmFtZSkpDQogIHsNCiAgICB0cnkNCiAgICB7DQogICAgICAkdGVtcGxhdGVfcmVzb3VyY2UgPSAnY21zX3RlbXBsYXRlOicgLiAkZW1haWxfdGVtcGxhdGVfbmFtZTsNCiAgICAgICR0cGwgPSAkc21hcnR5LT5DcmVhdGVUZW1wbGF0ZSgkdGVtcGxhdGVfcmVzb3VyY2UpOw0KICAgIH0NCiAgICBjYXRjaCAoQ21zRGF0YU5vdEZvdW5kRXhjZXB0aW9uICRlKQ0KICAgIHsNCiAgICAgIHNldF8yZmFfbWVzc2FnZSgnRXJyb3IgLSBGYWlsZWQgdG8gbG9hZCBlbWFpbCB0ZW1wbGF0ZTogJyAuICRlLT5nZXRNZXNzYWdlKCksICcwNicpOw0KICAgICAgcmV0dXJuOw0KICAgIH0NCiAgfQ0KICBlbHNlDQogIHsNCiAgICAkdHBsID0gJHNtYXJ0eS0+Q3JlYXRlVGVtcGxhdGUoJ3N0cmluZzonIC4gJGVtYWlsX3RlbXBsYXRlKTsNCiAgfQ0KICANCiAgJHRwbC0+YXNzaWduKCdjb2RlJywgJGF1dGhfY29kZSk7DQogICRib2R5ID0gJHRwbC0+ZmV0Y2goKTsNCiAgDQogIHRyeQ0KICB7DQogICAgJG1haWxlciA9IG5ldyBjbXNfbWFpbGVyKHRydWUpOw0KICAgICRtYWlsZXItPlNldFN1YmplY3QoJGVtYWlsX3N1YmplY3QpOw0KICAgICRtYWlsZXItPkFkZEFkZHJlc3MoJGVtYWlsKTsNCiAgICAkbWFpbGVyLT5Jc0hUTUwodHJ1ZSk7DQogICAgJG1haWxlci0+U2V0Qm9keSgkYm9keSk7DQogICAgJG1haWxlci0+U2VuZCgpOw0KICB9DQogIGNhdGNoIChFeGNlcHRpb24gJGUpDQogIHsNCiAgICBlcnJvcl9sb2coJzJGQSBFbWFpbCBzZW5kaW5nIGZhaWxlZDogJyAuICRlLT5nZXRNZXNzYWdlKCkpOw0KICB9DQp9DQoNCi8vIEhlbHBlciBmdW5jdGlvbiB0byBzZXQgMkZBIG1lc3NhZ2UgaW4gdGhlIHNlc3Npb24NCmZ1bmN0aW9uIHNldF8yZmFfbWVzc2FnZSgkbWVzc2FnZSwgJGNvZGUpDQp7DQogICRfU0VTU0lPTlsndHdvX2ZhY3Rvcl9hdXRoJ11bJ21zZyddICAgPSAkbWVzc2FnZTsNCiAgJF9TRVNTSU9OWyd0d29fZmFjdG9yX2F1dGgnXVsnZXJyb3InXSA9ICRjb2RlOw0KfQ0KDQovLyBSZXRyaWV2ZSBhIHVuaXF1ZSBDTVNNUyBzaXRlIHNpZ25hdHVyZQ0KZnVuY3Rpb24gZ2V0X2Ntc21zX3NpZ25hdHVyZSgpDQp7DQogIGdsb2JhbCAkY29uZmlnOw0KICByZXR1cm4gJGNvbmZpZ1snc2l0ZV9pZCddID8/ICdkZWZhdWx0LWNtc21zLWtleSc7DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/internal_plugins/function.check_session_status.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyoqDQogKiBBIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHRoZSBzZXNzaW9uIHN0YXR1cy4NCiAqDQogKiBAcGFyYW0gYXJyYXkgJHBhcmFtcyBBbiBhcnJheSBvZiBwYXJhbWV0ZXJzLg0KICogQHBhcmFtIG9iamVjdCAkc21hcnR5IEFuIGluc3RhbmNlIG9mIHRoZSBTbWFydHkgdGVtcGxhdGUgZW5naW5lLg0KICogQHJldHVybiBzdHJpbmcgVGhlIGZ1bmN0aW9uIGNvbW1lbnQuDQogKi8NCmZ1bmN0aW9uIHNtYXJ0eV9mdW5jdGlvbl9jaGVja19zZXNzaW9uX3N0YXR1cygkcGFyYW1zLCAkc21hcnR5KQ0Kew0KICAvKioNCiAgICogc2hvd3N0b3BwZXINCiAgICovDQogICMgaWYsIGZvciBzb21lIG9kZCByZWFzb24sIHdlIGRvbid0IGhhdmUgQ01TTVNFeHQsIGRvbid0IGRvIGFueXRoaW5nDQogICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0NNU01TRXh0Jyk7DQogIA0KICBpZighJG1vZCkgeyByZXR1cm4gJyc7IH0NCiAgDQogIC8qKg0KICAgKiBwYXJhbWV0ZXJzIGRlZmF1bHRzDQogICAqLw0KICAkY291bnRkb3duX3N0cmluZyAgICAgICA9ICdUaW1lIGxlZnQnOw0KICAkY291bnRkb3duX3VuaXRzX3N0cmluZyA9ICdzZWNvbmRzJzsNCiAgJHVzZV90b2FzdCAgICAgICAgICAgICAgPSAxOw0KICAkdXNlX2N1c3RvbV9odG1sICAgICAgICA9IDA7DQogICR1c2VfY3VzdG9tX2NzcyAgICAgICAgID0gMDsNCiAgJGNvdW50ZXJfaWQgICAgICAgICAgICAgPSAnc2Vzc2lvbl9zdGF0dXNfY291bnRkb3duJzsNCiAgJGNvdW50ZXJfY2xhc3MgICAgICAgICAgPSAnc2Vzc2lvbl9zdGF0dXNfY291bnRkb3duJzsNCiAgJGNvdW50ZXJfc3Bhbl9pZCAgICAgICAgPSAnc2Vzc2lvbl9zdGF0dXNfY291bnRkb3duX3NwYW4nOw0KICAkY291bnRlcl9zcGFuX2NsYXNzICAgICA9ICdzZXNzaW9uX3N0YXR1c19jb3VudGRvd25fc3Bhbic7DQogICR0b2FzdF9pZCAgICAgICAgICAgICAgID0gJ3Nlc3Npb25fc3RhdHVzX3RvYXN0JzsNCiAgJHRvYXN0X2NsYXNzICAgICAgICAgICAgPSAnc2Vzc2lvbl9zdGF0dXNfdG9hc3QnOw0KICAkbm90aWZpY2F0aW9uX2lkICAgICAgICA9ICdzZXNzaW9uX3N0YXR1c19leHBpcmVkX2FsZXJ0JzsNCiAgJG5vdGlmaWNhdGlvbl9jbGFzcyAgICAgPSAnc2Vzc2lvbl9zdGF0dXNfYWxlcnQnOw0KICAkYWxlcnRfbWVzc2FnZV9pZCAgICAgICA9ICdhbGVydF9tZXNzYWdlJzsNCiAgJGVuZF9zZXNzaW9uX21lc3NhZ2UgICAgPSAnWW91ciBzZXNzaW9uIGhhcyBleHBpcmVkLiBQbGVhc2UgcmVmcmVzaCB0aGUgcGFnZSB0byBjb250aW51ZS4nOw0KICAkY3VzdG9tX2NhbGxiYWNrICAgICAgICA9ICcnOw0KICANCiAgJHRvYXN0X2Nzc19kZWZhdWx0ID0gIg0KPHN0eWxlPg0KICAuJHRvYXN0X2NsYXNzIHsNCiAgICBwb3NpdGlvbjogZml4ZWQ7DQogICAgYm90dG9tOiAyMHB4Ow0KICAgIHJpZ2h0OiAyMHB4Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQogICAgY29sb3I6ICNmZmY7DQogICAgcGFkZGluZzogMTBweCAyMHB4Ow0KICAgIGJvcmRlci1yYWRpdXM6IDVweDsNCiAgICBkaXNwbGF5OiBub25lOw0KICAgIHotaW5kZXg6IDk5OTk7DQogIH0NCjwvc3R5bGU+DQogICI7DQogIA0KICAkdG9hc3RfaHRtbF9kZWZhdWx0ID0gIg0KPGRpdiBpZD0nJHRvYXN0X2lkJyBjbGFzcz0nJHRvYXN0X2NsYXNzJz48L2Rpdj4NCiI7DQogIA0KICAkbm90aWZpY2F0aW9uX2Nzc19kZWZhdWx0ID0gIg0KPHN0eWxlPg0KICAuJG5vdGlmaWNhdGlvbl9jbGFzcyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2Y0NDMzNjsgLyogUmVkIGNvbG9yIGZvciBlcnJvciAqLw0KICAgIGJvcmRlcjogMXB4IHNvbGlkICNjMDM2Mjc7IC8qIEJvcmRlciBzdHlsZSAqLw0KICAgIGJvcmRlci1yYWRpdXM6IDVweDsgLyogUm91bmRlZCBjb3JuZXJzICovDQogICAgcGFkZGluZzogMTBweDsgLyogUGFkZGluZyBpbnNpZGUgdGhlIGJveCAqLw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsgLyogQ2VudGVyIHRoZSB0ZXh0IGhvcml6b250YWxseSAqLw0KICAgIGJveC1zaGFkb3c6IDBweCAwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4zKTsgLyogQm94IHNoYWRvdyBmb3IgYSBzdWJ0bGUgZWxldmF0aW9uIGVmZmVjdCAqLw0KICAgIGNvbG9yOiB3aGl0ZTsNCiAgICBtYXJnaW4tdG9wOiA1cHg7DQogICAgei1pbmRleDogOTk5OTsgLyogRW5zdXJlIGl0J3Mgb24gdG9wIG9mIG90aGVyIGNvbnRlbnQgKi8NCn0NCg0KLmNsb3NlLWJ1dHRvbiB7DQogICAgY29sb3I6ICNjMDM2Mjc7DQogICAgZmxvYXQ6IGxlZnQ7IC8qIEFsaWduIHRvIHRoZSBsZWZ0ICovDQogICAgY3Vyc29yOiBwb2ludGVyOyAvKiBDaGFuZ2UgY3Vyc29yIHRvIHBvaW50ZXIgb24gaG92ZXIgKi8NCiAgICBtYXJnaW4tcmlnaHQ6IDVweDsgLyogQWRkIHNvbWUgc3BhY2luZyB0byB0aGUgcmlnaHQgb2YgdGhlIGJ1dHRvbiAqLw0KfQ0KDQovKiBTdHlsZSBmb3IgaG92ZXIgc3RhdGUgKi8NCi5jbG9zZS1idXR0b246aG92ZXIgew0KICAgIGNvbG9yOiBncmV5OyAvKiBDaGFuZ2UgdGV4dCBjb2xvciBvbiBob3ZlciAob3B0aW9uYWwpICovDQp9DQo8L3N0eWxlPg0KIjsNCiAgDQogICRub3RpZmljYXRpb25faHRtbF9kZWZhdWx0ID0gIg0KPGRpdiBpZD0nJG5vdGlmaWNhdGlvbl9pZCcgY2xhc3M9JyRub3RpZmljYXRpb25fY2xhc3MnIHN0eWxlPSdkaXNwbGF5OiBub25lOyc+DQogPHNwYW4gaWQ9J2Rpc21pc3MtYnV0dG9uJyBjbGFzcz0nY2xvc2UtYnV0dG9uJyBvbmNsaWNrPSdkaXNtaXNzQWxlcnQoKSc+w5c8L3NwYW4+DQogIDxzcGFuIGlkPSdhbGVydF9tZXNzYWdlJz48L3NwYW4+DQo8L2Rpdj4NCiI7DQogIA0KICAkY291bnRkb3duX2Nzc19kZWZhdWx0ID0gIg0KIDxzdHlsZT4NCiAgIyRjb3VudGVyX2lkIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwOyAvKiBCYWNrZ3JvdW5kIGNvbG9yIChncmF5IHNoYWRlKSAqLw0KICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IC8qIEJvcmRlciBzdHlsZSAqLw0KICAgIGJvcmRlci1yYWRpdXM6IDVweDsgLyogUm91bmRlZCBjb3JuZXJzICovDQogICAgcGFkZGluZzogMTBweDsgLyogUGFkZGluZyBpbnNpZGUgdGhlIGJveCAqLw0KICAgIHRleHQtYWxpZ246IGNlbnRlcjsgLyogQ2VudGVyIHRoZSB0ZXh0IGhvcml6b250YWxseSAqLw0KICAgIGJveC1zaGFkb3c6IDBweCAwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4zKTsgLyogQm94IHNoYWRvdyBmb3IgYSBzdWJ0bGUgZWxldmF0aW9uIGVmZmVjdCAqLw0KfQ0KDQogICMkY291bnRlcl9zcGFuX2lkIHsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICBmb250LXNpemU6IDE4cHg7DQogICAgbWFyZ2luLWxlZnQ6IDVweDsNCiAgICB3aWR0aDogNjBweDsgLyogRml4ZWQgd2lkdGggZm9yIDYgZGlnaXRzICovDQogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyAvKiBFbnN1cmVzIGZpeGVkIHdpZHRoIGRvZXNuJ3Qgb3ZlcmZsb3cgKi8NCiAgICB0ZXh0LWFsaWduOiByaWdodDsgLyogUmlnaHQtYWxpZ24gdGhlIHRleHQgd2l0aGluIHRoZSBmaXhlZCB3aWR0aCAqLw0KICAgIH0NCjwvc3R5bGU+DQoiOw0KICAkY291bnRkb3duX2h0bWxfZGVmYXVsdCA9ICINCiAgPGRpdiBpZD0nJGNvdW50ZXJfaWQnIGNsYXNzPSckY291bnRlcl9jbGFzcyc+JGNvdW50ZG93bl9zdHJpbmc6IDxzcGFuIGlkPSckY291bnRlcl9zcGFuX2lkJyBjbGFzcz0nJGNvdW50ZXJfc3Bhbl9jbGFzcyc+MDwvc3Bhbj4gJGNvdW50ZG93bl91bml0c19zdHJpbmc8L2Rpdj4NCiAgIjsNCiAgDQogIA0KICAvKioNCiAgICogaW5pdGlhbGl6ZSBhIGZldyB2YXJpYWJsZXMNCiAgICovDQogICMgZ2V0IHRoZSBzZXNzaW9uIGNoZWNrIGludGVydmFsDQogICRzZXNzaW9uX2NoZWNrX2ludGVydmFsID0gKHN0cmluZykoJHBhcmFtc1snc2Vzc2lvbl9jaGVja19pbnRlcnZhbCddID8/IDEpICogMTAwMDsNCiAgIyBnZXQgdGhlIHRvYXN0IGRpc3BsYXkgaW50ZXJ2YWwNCiAgJHRvYXN0X2Rpc3BsYXlfaW50ZXJ2YWwgPSAoc3RyaW5nKSgkcGFyYW1zWyckdG9hc3RfZGlzcGxheV9pbnRlcnZhbCddID8/IDEwKSAqIDEwMDA7DQogICRkdXJhdGlvbiAgICAgICAgICAgICAgID0gaW5pX2dldCgnc2Vzc2lvbi5nY19tYXhsaWZldGltZScpOw0KICAvLyAkZHVyYXRpb24gICAgICAgICAgICAgICA9IDMwOw0KICANCiAgLyoqDQogICAqIGdyYWIgdGhlIHBhcmFtZXRlcnMNCiAgICovDQogICR1c2VfdG9hc3QgICAgICAgICAgID0gJHBhcmFtc1sndXNlX3RvYXN0J10gPz8gJHVzZV90b2FzdDsNCiAgJHVzZV9jdXN0b21faHRtbCAgICAgPSAkcGFyYW1zWyd1c2VfY3VzdG9tX2h0bWwnXSA/PyAkdXNlX2N1c3RvbV9odG1sOw0KICAkdXNlX2N1c3RvbV9jc3MgICAgICA9ICRwYXJhbXNbJ3VzZV9jdXN0b21fY3NzJ10gPz8gJHVzZV9jdXN0b21fY3NzOw0KICAkY291bnRlcl9pZCAgICAgICAgICA9ICRwYXJhbXNbJ2NvdW50ZXJfaWQnXSA/PyAkY291bnRlcl9pZDsNCiAgJGNvdW50ZXJfY2xhc3MgICAgICAgPSAkcGFyYW1zWydjb3VudGVyX2NsYXNzJ10gPz8gJGNvdW50ZXJfY2xhc3M7DQogICRjb3VudGVyX3NwYW5faWQgICAgID0gJHBhcmFtc1snY291bnRlcl9zcGFuX2lkJ10gPz8gJGNvdW50ZXJfc3Bhbl9pZDsNCiAgJGNvdW50ZXJfc3Bhbl9jbGFzcyAgPSAkcGFyYW1zWydjb3VudGVyX3NwYW5fY2xhc3MnXSA/PyAkY291bnRlcl9zcGFuX2NsYXNzOw0KICAkdG9hc3RfaWQgICAgICAgICAgICA9ICRwYXJhbXNbJ3RvYXN0X2lkJ10gPz8gJHRvYXN0X2lkOw0KICAkdG9hc3RfY2xhc3MgICAgICAgICA9ICRwYXJhbXNbJ3RvYXN0X2NsYXNzJ10gPz8gJHRvYXN0X2NsYXNzOw0KICAkbm90aWZpY2F0aW9uX2lkICAgICA9ICRwYXJhbXNbJ25vdGlmaWNhdGlvbl9pZCddID8/ICRub3RpZmljYXRpb25faWQ7DQogICRub3RpZmljYXRpb25fY2xhc3MgID0gJHBhcmFtc1snbm90aWZpY2F0aW9uX2NsYXNzJ10gPz8gJG5vdGlmaWNhdGlvbl9jbGFzczsNCiAgJGFsZXJ0X21lc3NhZ2VfaWQgICAgPSAkcGFyYW1zWydhbGVydF9tZXNzYWdlX2lkJ10gPz8gJGFsZXJ0X21lc3NhZ2VfaWQ7DQogICR0b2FzdF9jc3MgICAgICAgICAgID0gJHBhcmFtc1sndG9hc3RfY3NzJ10gPz8gJHRvYXN0X2Nzc19kZWZhdWx0Ow0KICAkdG9hc3RfaHRtbCAgICAgICAgICA9ICRwYXJhbXNbJ3RvYXN0X2h0bWwnXSA/PyAkdG9hc3RfaHRtbF9kZWZhdWx0Ow0KICAkbm90aWZpY2F0aW9uX2NzcyAgICA9ICRwYXJhbXNbJ25vdGlmaWNhdGlvbl9jc3MnXSA/PyAkbm90aWZpY2F0aW9uX2Nzc19kZWZhdWx0Ow0KICAkbm90aWZpY2F0aW9uX2h0bWwgICA9ICRwYXJhbXNbJ25vdGlmaWNhdGlvbl9odG1sJ10gPz8gJG5vdGlmaWNhdGlvbl9odG1sX2RlZmF1bHQ7DQogICRjb3VudGRvd25fY3NzICAgICAgID0gJHBhcmFtc1snY291bnRkb3duX2NzcyddID8/ICRjb3VudGRvd25fY3NzX2RlZmF1bHQ7DQogICRjb3VudGRvd25faHRtbCAgICAgID0gJHBhcmFtc1snY291bnRkb3duX2h0bWwnXSA/PyAkY291bnRkb3duX2h0bWxfZGVmYXVsdDsNCiAgJGVuZF9zZXNzaW9uX21lc3NhZ2UgPSAkcGFyYW1zWydlbmRfc2Vzc2lvbl9tZXNzYWdlJ10gPz8gJGVuZF9zZXNzaW9uX21lc3NhZ2U7DQogICRjdXN0b21fY2FsbGJhY2sgICAgID0gJHBhcmFtc1snY3VzdG9tX2NhbGxiYWNrJ10gPz8gJGN1c3RvbV9jYWxsYmFjazsNCiAgDQogICMgbm9uIHBhcmFtZXRlcnMNCiAgJHNtYW5hZ2VyICAgICAgICAgICAgID0gIFxDTVNNU0V4dFxzZXNzaW9uXE1hbmFnZXI6OmdldEluc3RhbmNlKCk7DQogICRhamF4X3VybCAgICAgICAgICAgICA9ICRzbWFuYWdlci0+Z2V0RmlsZVVybCgpOw0KICANCiAgJGh0bWwgICAgICAgICAgICAgICAgID0gJHVzZV9jdXN0b21fY3NzID8gJycgOiAkdG9hc3RfY3NzIC4gJGNvdW50ZG93bl9jc3MgLiAkbm90aWZpY2F0aW9uX2NzczsNCiAgDQogICRzY3JpcHRfaHRtbCA9ICINCjxzY3JpcHQ+DQp2YXIgc2Vzc2lvbkR1cmF0aW9uID0gJGR1cmF0aW9uOw0KdmFyIHJlbWFpbmluZ1RpbWUgPSAwOw0KdmFyIHVzZVRvYXN0ID0gJHVzZV90b2FzdDsNCnZhciBhamF4VXJsID0gJyRhamF4X3VybCc7DQp2YXIgY291bnRlclNwYW5JZCA9ICckY291bnRlcl9zcGFuX2lkJzsNCnZhciBub3RpZmljYXRpb25JZCA9ICckbm90aWZpY2F0aW9uX2lkJzsNCnZhciB0b2FzdElkID0gJyR0b2FzdF9pZCc7DQp2YXIgc2Vzc2lvbl9jaGVja19pbnRlcnZhbCA9ICRzZXNzaW9uX2NoZWNrX2ludGVydmFsOw0KdmFyIHRvYXN0X2Rpc3BsYXlfaW50ZXJ2YWwgPSAkdG9hc3RfZGlzcGxheV9pbnRlcnZhbDsNCnZhciBlbmRfc2Vzc2lvbl9tZXNzYWdlID0gJyRlbmRfc2Vzc2lvbl9tZXNzYWdlJzsNCnZhciBjdXN0b21DYWxsYmFjayA9ICckY3VzdG9tX2NhbGxiYWNrJzsNCg0KZnVuY3Rpb24gZ2V0U2Vzc2lvblN0YXJ0VGltZShjYWxsYmFjaykNCnsNCiAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOw0KICAvLyBBcHBlbmQgdGhlIGNhY2hlLWJ1c3RlciB0byB0aGUgVVJMDQogIHZhciB1cmxXaXRoQ2FjaGVCdXN0ZXIgPSBhamF4VXJsICsgKGFqYXhVcmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyAnY2FjaGU9JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpOw0KICANCiAgeGhyLm9wZW4oJ0dFVCcsIHVybFdpdGhDYWNoZUJ1c3RlciwgdHJ1ZSk7DQogIHhoci5yZXNwb25zZVR5cGUgPSAndGV4dCc7DQoNCiAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkNCiAgew0KICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApDQogICAgew0KICAgICAgdmFyIHNlc3Npb25TdGFydFRpbWUgPSBwYXJzZUludCh4aHIucmVzcG9uc2VUZXh0LCAxMCk7DQogICAgICBjYWxsYmFjayhzZXNzaW9uU3RhcnRUaW1lKTsNCiAgICB9DQogIH07DQoNCiAgeGhyLnNlbmQoKTsNCn0NCg0KZnVuY3Rpb24gY2FsY3VsYXRlUmVtYWluaW5nVGltZShzZXNzaW9uU3RhcnRUaW1lLCBzZXNzaW9uRHVyYXRpb24pDQp7DQogIHZhciBjdXJyZW50VGltZSA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApOyAvLyBDb252ZXJ0IHRvIHNlY29uZHMNCiAgdmFyIGVsYXBzZWRUaW1lID0gY3VycmVudFRpbWUgLSBzZXNzaW9uU3RhcnRUaW1lOw0KICB2YXIgcmVtYWluaW5nVGltZSA9IHNlc3Npb25EdXJhdGlvbiAtIGVsYXBzZWRUaW1lOw0KIA0KICByZXR1cm4gcmVtYWluaW5nVGltZSA+IDAgPyByZW1haW5pbmdUaW1lIDogMDsNCn0NCg0KZnVuY3Rpb24gdXBkYXRlVGltZXJEaXNwbGF5KHRpbWVMZWZ0KQ0Kew0KICB2YXIgdGltZXJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY291bnRlclNwYW5JZCk7DQogIHRpbWVyRWxlbWVudC50ZXh0Q29udGVudCA9IHRpbWVMZWZ0Ow0KfQ0KDQpmdW5jdGlvbiBkaXNwbGF5U2Vzc2lvbkV4cGlyZWRBbGVydChtZXNzYWdlKQ0Kew0KICB2YXIgc2Vzc2lvbkV4cGlyZWRBbGVydCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG5vdGlmaWNhdGlvbklkKTsNCiAgdmFyIHNlc3Npb25FeHBpcmVkQWxlcnRNZXNzYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyRhbGVydF9tZXNzYWdlX2lkJyk7DQogIHNlc3Npb25FeHBpcmVkQWxlcnRNZXNzYWdlLnRleHRDb250ZW50ID0gbWVzc2FnZTsNCiAgc2Vzc2lvbkV4cGlyZWRBbGVydC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCn0NCg0KZnVuY3Rpb24gZGlzbWlzc0FsZXJ0KCkNCnsNCiAgdmFyIGFsZXJ0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCckbm90aWZpY2F0aW9uX2lkJyk7DQogIGFsZXJ0RWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KfQ0KDQpmdW5jdGlvbiBkaXNwbGF5U2Vzc2lvbkV4cGlyZWRUb2FzdChtZXNzYWdlKQ0Kew0KICAgIHZhciB0b2FzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRvYXN0SWQpOw0KICAgIHRvYXN0LnRleHRDb250ZW50ID0gbWVzc2FnZTsNCiAgICB0b2FzdC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCiAgDQogICAgc2V0VGltZW91dChmdW5jdGlvbigpDQogICAgew0KICAgICAgICB0b2FzdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgIH0sIHRvYXN0X2Rpc3BsYXlfaW50ZXJ2YWwpOyAvLyBEaXNwbGF5IGZvciAkdG9hc3RfZGlzcGxheV9pbnRlcnZhbCBzZWNvbmRzLCBhZGp1c3QgYXMgbmVlZGVkDQp9DQoNCmZ1bmN0aW9uIHN0YXJ0Q291bnRkb3duKHJlbWFpbmluZ1RpbWUpDQp7DQogICAgdmFyIGludGVydmFsSWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpDQogICAgew0KICAgICAgICBpZiAocmVtYWluaW5nVGltZSA+IDApDQogICAgICAgIHsNCiAgICAgICAgICB1cGRhdGVUaW1lckRpc3BsYXkocmVtYWluaW5nVGltZSk7DQogICAgICAgICAgcmVtYWluaW5nVGltZS0tOw0KICAgIA0KICAgICAgICAgIC8vIENoZWNrIHNlc3Npb24gdGltZXN0YW1wIGV2ZXJ5IDYwIHNlY29uZHMNCiAgICAgICAgICBpZiAocmVtYWluaW5nVGltZSAlIDYwID09PSAwKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIGdldFNlc3Npb25TdGFydFRpbWUoZnVuY3Rpb24gKHNlc3Npb25TdGFydFRpbWUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHJlbWFpbmluZ1RpbWUgPSBjYWxjdWxhdGVSZW1haW5pbmdUaW1lKHNlc3Npb25TdGFydFRpbWUsIHNlc3Npb25EdXJhdGlvbik7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpOw0KICAgICAgICAgICAgdXBkYXRlVGltZXJEaXNwbGF5KDApOw0KICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBlbmRfc2Vzc2lvbl9tZXNzYWdlOw0KICANCiAgICAgICAgICAgIGlmICh1c2VUb2FzdCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgZGlzcGxheVNlc3Npb25FeHBpcmVkVG9hc3QobWVzc2FnZSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGRpc3BsYXlTZXNzaW9uRXhwaXJlZEFsZXJ0KG1lc3NhZ2UpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvd1tjdXN0b21DYWxsYmFja10gPT09ICdmdW5jdGlvbicpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIC8vIENhbGwgdGhlIGN1c3RvbSBjYWxsYmFjayBmdW5jdGlvbiBieSBpdHMgbmFtZQ0KICAgICAgICAgICAgICB3aW5kb3dbY3VzdG9tQ2FsbGJhY2tdKCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfQ0KICAgIH0sIHNlc3Npb25fY2hlY2tfaW50ZXJ2YWwpOyAvLyBVcGRhdGUgZXZlcnkgJHNlc3Npb25fY2hlY2tfaW50ZXJ2YWwgbWlsbGlzZWNvbmRzDQp9DQoNCi8vIEdldCBzZXNzaW9uIHN0YXJ0IHRpbWUgYW5kIHN0YXJ0IHRoZSBjb3VudGRvd24NCmdldFNlc3Npb25TdGFydFRpbWUoZnVuY3Rpb24oc2Vzc2lvblN0YXJ0VGltZSkNCnsNCiAgcmVtYWluaW5nVGltZSA9IGNhbGN1bGF0ZVJlbWFpbmluZ1RpbWUoc2Vzc2lvblN0YXJ0VGltZSwgc2Vzc2lvbkR1cmF0aW9uKTsNCiAgdXBkYXRlVGltZXJEaXNwbGF5KHJlbWFpbmluZ1RpbWUpOw0KICBzdGFydENvdW50ZG93bihyZW1haW5pbmdUaW1lKTsNCn0pOw0KDQoNCg0KPC9zY3JpcHQ+DQoiOw0KICANCiAgJGh0bWwgLj0gICR1c2VfY3VzdG9tX2h0bWwgPyAkc2NyaXB0X2h0bWwgOiAkY291bnRkb3duX2h0bWwgLiAkdG9hc3RfaHRtbCAuICRub3RpZmljYXRpb25faHRtbCAuICAkc2NyaXB0X2h0bWw7DQoNCiAgcmV0dXJuICRodG1sOw0KfQ0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/internal_plugins/function.form_handler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KZnVuY3Rpb24gc21hcnR5X2Z1bmN0aW9uX2Zvcm1faGFuZGxlcigkcGFyYW1zLCAmJHNtYXJ0eSkNCnsNCiAgLy8gQ2hlY2sgaWYgdGhlIGZvcm0gd2FzIHN1Ym1pdHRlZCB2aWEgUE9TVA0KICBpZignUE9TVCcgPT0gJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gJiYgaXNzZXQoJF9QT1NUWydmb3JtX2lkJ10pKQ0KICB7DQogICAgJGZvcm1faWQgPSAkX1BPU1RbJ2Zvcm1faWQnXTsNCiAgICANCiAgICAvLyBJbml0aWFsaXplIGFuIGFycmF5IHRvIGNvbGxlY3QgZXJyb3JzDQogICAgJGVycm9ycyA9IFtdOw0KICAgIA0KICAgIC8vIFZhbGlkYXRlIGZvcm0gZGF0YSBpZiB2YWxpZGF0aW9uIHJ1bGVzIGFyZSBwcm92aWRlZA0KICAgIGlmKGlzc2V0KCRwYXJhbXNbJ3ZhbGlkYXRlJ10pICYmIGlzX2FycmF5KCRwYXJhbXNbJ3ZhbGlkYXRlJ10pKQ0KICAgIHsNCiAgICAgIGZvcmVhY2goJHBhcmFtc1sndmFsaWRhdGUnXSBhcyAkZmllbGRfcnVsZXMpDQogICAgICB7DQogICAgICAgICRmaWVsZCA9ICRmaWVsZF9ydWxlc1snbmFtZSddOw0KICAgICAgICAkcnVsZXMgPSAkZmllbGRfcnVsZXNbJ3J1bGVzJ10gPz8gW107DQogICAgICAgIA0KICAgICAgICAvLyBDaGVjayByZXF1aXJlZCBmaWVsZHMNCiAgICAgICAgaWYoaXNzZXQoJHJ1bGVzWydyZXF1aXJlZCddKSAmJiAkcnVsZXNbJ3JlcXVpcmVkJ10gJiYgZW1wdHkoJF9QT1NUWyRmaWVsZF0pKQ0KICAgICAgICB7DQogICAgICAgICAgJGVycm9yc1skZmllbGRdID0gJ3JlcXVpcmVkJzsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8gUmVnZXggdmFsaWRhdGlvbg0KICAgICAgICBpZihpc3NldCgkcnVsZXNbJ3JlZ2V4J10pICYmICFlbXB0eSgkX1BPU1RbJGZpZWxkXSkgJiYgIXByZWdfbWF0Y2goJHJ1bGVzWydyZWdleCddLCAkX1BPU1RbJGZpZWxkXSkpDQogICAgICAgIHsNCiAgICAgICAgICAkZXJyb3JzWyRmaWVsZF0gPSAnaW52YWxpZF9mb3JtYXQnOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLyBBZGQgb3RoZXIgdmFsaWRhdGlvbnMgaGVyZSBpZiBuZWVkZWQNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgLy8gSWYgdGhlcmUgYXJlIGVycm9ycywgYXNzaWduIHRoZW0gdG8gdGhlIHNwZWNpZmllZCBTbWFydHkgdmFyaWFibGUNCiAgICBpZighZW1wdHkoJGVycm9ycykpDQogICAgew0KICAgICAgJGFzc2lnbiA9ICRwYXJhbXNbJ2Vycm9yX3ZhciddID8gOiAkZm9ybV9pZCAuICdfZXJyb3JzJzsNCiAgICAgICRzbWFydHktPmFzc2lnbigkYXNzaWduLCAkZXJyb3JzKTsNCiAgICAgICRzbWFydHktPmFzc2lnbigkZm9ybV9pZCAuICdfZGF0YScsICRfUE9TVCk7IC8vIEFzc2lnbiB0aGUgZm9ybSBkYXRhIHRvIGEgU21hcnR5IHZhcmlhYmxlDQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAvLyBJZiBubyBlcnJvcnMsIHByb2NlZWQgd2l0aCBzdG9yaW5nIHRoZSBmb3JtIGRhdGENCiAgICAgICRmb3JtRGF0YSA9ICRfUE9TVDsNCiAgICAgIHVuc2V0KCRmb3JtRGF0YVsnZm9ybV9pZCddKTsgLy8gUmVtb3ZlIGZvcm1faWQgZnJvbSB0aGUgZGF0YSB0byBzdG9yZQ0KICAgICAgDQogICAgICAvLyBTdG9yZSB0aGUgZGF0YSBpbiB0aGUgc2Vzc2lvbg0KICAgICAgJF9TRVNTSU9OWyRmb3JtX2lkIC4gJ19kYXRhJ10gPSAkZm9ybURhdGE7DQogICAgICANCiAgICAgIC8vIEhhbmRsZSByZWRpcmVjdGlvbiBpZiBwcm92aWRlZA0KICAgICAgaWYoaXNzZXQoJHBhcmFtc1sncmVkaXJlY3RfdXJsJ10pKQ0KICAgICAgew0KICAgICAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHBhcmFtc1sncmVkaXJlY3RfdXJsJ10pOw0KICAgICAgICBleGl0Ow0KICAgICAgfQ0KICAgICAgZWxzZSBpZihpc3NldCgkcGFyYW1zWydhbGlhcyddKSkNCiAgICAgIHsNCiAgICAgICAgJGFsaWFzID0gJHBhcmFtc1snYWxpYXMnXTsNCiAgICAgICAgXHJlZGlyZWN0X3RvX2FsaWFzKCRhbGlhcyk7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgIC8vIE9wdGlvbmFsOiBSZWRpcmVjdCB0byB0aGUgc2FtZSBwYWdlIHRvIGF2b2lkIHJlc3VibWlzc2lvbg0KICAgICAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pOw0KICAgICAgICBleGl0Ow0KICAgICAgfQ0KICAgIH0NCiAgfQ0KICBlbHNlDQogIHsNCiAgICAvLyBJZiBmb3JtIHdhcyBub3Qgc3VibWl0dGVkLCBjbGVhciB0aGUgc3RvcmVkIGRhdGEgZnJvbSB0aGUgU21hcnR5IHZhcmlhYmxlDQogICAgaWYoJHNtYXJ0eS0+Z2V0VGVtcGxhdGVWYXJzKCRwYXJhbXNbJ2lkJ10gLiAnX2RhdGEnKSkNCiAgICB7DQogICAgICAkc21hcnR5LT5hc3NpZ24oJHBhcmFtc1snaWQnXSAuICdfZGF0YScsIFtdKTsNCiAgICB9DQogIH0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/internal_plugins/function.js_redirect.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmZ1bmN0aW9uIHNtYXJ0eV9mdW5jdGlvbl9qc19yZWRpcmVjdCgkcGFyYW1zLCBTbWFydHlfSW50ZXJuYWxfVGVtcGxhdGUgJHRlbXBsYXRlKQ0Kew0KICAkYWxpYXMgPSAkcGFyYW1zWydhbGlhcyddID8/ICcnOw0KICAkdXJsID0gJHBhcmFtc1sndXJsJ10gPz8gJy8nOw0KICAkYWxsb3dfY2FuY2VsID0gJHBhcmFtc1snYWxsb3dfY2FuY2VsJ10gPz8gZmFsc2U7DQogICRyZWRpcmVjdF9jYW5jZWxfbWVzc2FnZSA9ICRwYXJhbXNbJ3JlZGlyZWN0X2NhbmNlbF9tZXNzYWdlJ10gPz8gJ1JlZGlyZWN0aW9uIGNhbmNlbGxlZCc7DQogIA0KICBpZiggIWVtcHR5KCRhbGlhcykgKQ0KICB7DQogICAgJGNvYmogPSBDb250ZW50T3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCktPkxvYWRDb250ZW50RnJvbUFsaWFzKCRhbGlhcyk7DQogICAgDQogICAgaWYoICFpc19vYmplY3QoJGNvYmopICkNCiAgICB7DQogICAgICByZXR1cm4gJ0Vycm9yOiBDb3VsZCBub3QgZmluZCBjb250ZW50IG9iamVjdCBmb3IgYWxpYXMgJyAuICRhbGlhczsNCiAgICB9DQogICAgDQogICAgJHVybCA9ICRjb2JqLT5HZXRVUkwoVFJVRSk7DQogIH0NCiAgZWxzZSBpZiggZW1wdHkoJHVybCkgKQ0KICB7DQogICAgcmV0dXJuICdFcnJvcjogWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgInVybCIgb3IgImFsaWFzIic7DQogIH0NCiAgDQogIC8vIEdldCBjb3VudGRvd24gZHVyYXRpb24gYW5kIGRlZmF1bHQgdG8gNSBzZWNvbmRzDQogICRzZWNvbmRzID0gaXNzZXQoJHBhcmFtc1snc2Vjb25kcyddKSA/IChpbnQpJHBhcmFtc1snc2Vjb25kcyddIDogNTsNCiAgDQogICRjYW5jZWxfbWVzc2FnZSA9ICcnOw0KICBpZigkYWxsb3dfY2FuY2VsKQ0KICB7DQogICAgLy8gRmV0Y2ggdGhlIGNhbmNlbCBidXR0b24vbGluayB0ZW1wbGF0ZSwgb3IgdXNlIGRlZmF1bHQNCiAgICAkY2FuY2VsX3RlbXBsYXRlID0gJHBhcmFtc1snY2FuY2VsX3RlbXBsYXRlJ10gPz8gJzxidXR0b24gaWQ9ImNhbmNlbC1yZWRpcmVjdCI+Q2FuY2VsPC9idXR0b24+JzsNCiAgICAkY2FuY2VsX21lc3NhZ2UgID0gJHRlbXBsYXRlLT5mZXRjaCgnc3RyaW5nOicgLiAkY2FuY2VsX3RlbXBsYXRlKTsNCiAgfQ0KICANCiAgLy8gRmV0Y2ggdGhlIGNvdW50ZG93biBtZXNzYWdlIGZyb20gYSB0ZW1wbGF0ZSwgb3IgdXNlIGRlZmF1bHQNCiAgJGNvdW50ZG93bl90ZW1wbGF0ZSA9ICRwYXJhbXNbJ3RlbXBsYXRlJ10gPz8gIllvdSB3aWxsIGJlIHJlZGlyZWN0ZWQgaW4gW1tzZWNvbmRzXV0gc2Vjb25kcy4iOw0KICAkY291bnRkb3duX21lc3NhZ2UgPSAkdGVtcGxhdGUtPmZldGNoKCdzdHJpbmc6JyAuICRjb3VudGRvd25fdGVtcGxhdGUpOw0KICANCiAgLy8gRXNjYXBlIHRoZSBVUkwgZm9yIHNhZmV0eQ0KICAkdXJsID0gaHRtbHNwZWNpYWxjaGFycygkdXJsLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsNCiAgDQogIC8vIEdlbmVyYXRlIEhUTUwgYW5kIEphdmFTY3JpcHQgZm9yIHRoZSBjb3VudGRvd24sIHJlZGlyZWN0LCBhbmQgY2FuY2VsIGZ1bmN0aW9uYWxpdHkNCiAgcmV0dXJuIDw8PEhUTUwNCjxkaXYgaWQ9InJlZGlyZWN0LW1lc3NhZ2UiPjwvZGl2Pg0KPGRpdiBpZD0iY2FuY2VsLW1lc3NhZ2UiPiRjYW5jZWxfbWVzc2FnZTwvZGl2Pg0KPHNjcmlwdD4NCiAgICB2YXIgY291bnRkb3duID0gJHNlY29uZHM7DQogICAgdmFyIG1lc3NhZ2UgPSBgJGNvdW50ZG93bl9tZXNzYWdlYC5yZXBsYWNlKCdbW3NlY29uZHNdXScsIGNvdW50ZG93bik7DQogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlZGlyZWN0LW1lc3NhZ2UnKS5pbm5lckhUTUwgPSBtZXNzYWdlOw0KDQogICAgdmFyIGNvdW50ZG93bkludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7DQogICAgICAgIGNvdW50ZG93bi0tOw0KICAgICAgICBpZiAoY291bnRkb3duIDw9IDApIHsNCiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY291bnRkb3duSW50ZXJ2YWwpOw0KICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAiJHVybCI7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBtZXNzYWdlID0gYCRjb3VudGRvd25fbWVzc2FnZWAucmVwbGFjZSgnW1tzZWNvbmRzXV0nLCBjb3VudGRvd24pOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlZGlyZWN0LW1lc3NhZ2UnKS5pbm5lckhUTUwgPSBtZXNzYWdlOw0KICAgICAgICB9DQogICAgfSwgMTAwMCk7DQoNCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FuY2VsLXJlZGlyZWN0JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsNCiAgICAgICAgY2xlYXJJbnRlcnZhbChjb3VudGRvd25JbnRlcnZhbCk7DQogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZWRpcmVjdC1tZXNzYWdlJykuaW5uZXJIVE1MID0gIiRyZWRpcmVjdF9jYW5jZWxfbWVzc2FnZS4iOw0KICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FuY2VsLW1lc3NhZ2UnKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOw0KICAgIH0pOw0KPC9zY3JpcHQ+DQpIVE1MOw0KfQ0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/internal_plugins/function.restrict_by_backend.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogUmVzdHJpY3RzIGFjY2VzcyB0byB0aGUgU21hcnR5IGJ5IENNU01TIGJhY2tlbmQgdXNlciBhY2Nlc3MuDQogKg0KICogQHBhcmFtIGFycmF5ICRwYXJhbXMgQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLg0KICogICAgICAgICAgICAgICAgICAgICAtIGdyb3VwczogQW4gYXJyYXkgb2YgZ3JvdXAgaWRzIG9yIGEgc2luZ2xlIGdyb3VwIGlkDQogKiAgICAgICAgICAgICAgICAgICAgICAoaWYgZW1wdHksIG5vIGdyb3VwcyB3aWxsIGJlIHJlc3RyaWN0ZWQsIGlmIDAgb25seSBzdXBlcnVzZXIgd2lsbCBiZSBhbGxvd2VkKTsNCiAqDQogKiBAcGFyYW0gb2JqZWN0ICRzbWFydHkgVGhlIFNtYXJ0eSBvYmplY3QuDQogKg0KICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuDQogKiBAdGhyb3dzIENtc0Vycm9yNDAzRXhjZXB0aW9uIFRocm93cyBhIENtc0Vycm9yNDAzRXhjZXB0aW9uIGV4Y2VwdGlvbg0KICoNCiAqIC0gaWYgdXNlciBpcyBhIHN1cGVydXNlcjogYWxsb3cgYWNjZXNzOw0KICogLSBpZiB1c2VyIGlzIG5vdCBhIHN1cGVydXNlciBidXQgbG9nZ2VkIGluOiBhbGxvdyBhY2Nlc3MgaWYgZ3JvdXBzIGFyZSBlbXB0eTsNCiAqIC0gaWYgdXNlciBub3QgYSBzdXBlcnVzZXIgYnV0IGxvZ2dlZCBpbiBhbmQgZ3JvdXBzIGFyZSBub3QgZW1wdHk6IGFsbG93IGFjY2VzcyBpZiB1c2VyIGlzIGluIGFueSBvZiBncm91cHM7DQogKg0KICogIG90aGVyd2lzZSB0aHJvdyBhIENtc0Vycm9yNDAzRXhjZXB0aW9uIGV4Y2VwdGlvbg0KICoNCiAqIEBhdXRob3IgRmVybmFuZG8gTW9yZ2FkbyBha2EgSm9Nb3JnDQogKiBAc2luY2UgMS41LjENCiAqIEBwYWNrYWdlIENNU01TRXh0DQogKi8NCmZ1bmN0aW9uIHNtYXJ0eV9mdW5jdGlvbl9yZXN0cmljdF9ieV9iYWNrZW5kKCRwYXJhbXMsICRzbWFydHkpDQp7DQogICRncm91cHMgPSAkcGFyYW1zWydncm91cHMnXSA/PyBbXTsNCiAgJHN1cGVydXNlciA9IDAgPT09IChpbnQpJHBhcmFtc1snZ3JvdXBzJ107DQogICRncm91cHMgPSBpc19hcnJheSgkZ3JvdXBzKSA/ICRncm91cHMgOiBbJGdyb3Vwc107DQogIA0KICAkdXAgPSBVc2VyT3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCk7DQogIA0KICAkdWlkID0gZ2V0X3VzZXJpZChGQUxTRSk7DQogIA0KICBpZigkdWlkKQ0KICB7DQogICAgaWYoICEkdXAtPklzU3VwZXJ1c2VyKCR1aWQpICkNCiAgICB7DQogICAgICBpZiggIWVtcHR5KCRncm91cHMpICYmICEkc3VwZXJ1c2VyICkNCiAgICAgIHsNCiAgICAgICAgIyBjaGVjayBpZiB0aGUgZ3JvdXBzIGFycmF5IGFzIG9ubHkgaW50ZWdlcnMNCiAgICAgICAgJGdyb3VwcyA9IGFycmF5X21hcCgnXGludHZhbCcsICRncm91cHMpOw0KICAgICAgICANCiAgICAgICAgaWYoICFpc19hcnJheSgkZ3JvdXBzKSApDQogICAgICAgIHsNCiAgICAgICAgICAjIHdlIG11c3QgaGF2ZSBhbiBhcnJheSBvZiBnaWRzIGlmIHNvbWV0aGluZyB3ZW50IHdyb25nIHdlIGp1c3QgdGhyb3cgYSA0MDMgZXhjZXB0aW9uDQogICAgICAgICAgIyBldmVuIHRob3VnaCB0aGUgZXJyb3IgaXMgYSBydW50aW1lIGVycm9yIChmcm9udGVuZCB1c2VycyBzaG91bGQgbmV2ZXIgc2VlIHRoYXQgYW55d2F5KQ0KICAgICAgICAgIFxhdWRpdCgkdWlkLCAncmVzdHJpY3RfYnlfYmFja2VuZCcsICdFcnJvcjogZ3JvdXBzIGlzIG5vdCBhbiBhcnJheSBvZiBnaWRzJyk7DQogICAgICAgICAgdGhyb3cgbmV3IENtc0Vycm9yNDAzRXhjZXB0aW9uKCk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICR1c2VyX2dyb3VwcyA9ICR1cC0+R2V0TWVtYmVyR3JvdXBzKCR1aWQpOw0KICAgICAgICANCiAgICAgICAgJGlzX2luX2dyb3VwID0gRkFMU0U7DQogICAgICAgIGZvcmVhY2goJGdyb3VwcyBhcyAkZ3JvdXApDQogICAgICAgIHsNCiAgICAgICAgICBpZiggaW5fYXJyYXkoJGdyb3VwLCAkdXNlcl9ncm91cHMpICkNCiAgICAgICAgICB7DQogICAgICAgICAgICAkaXNfaW5fZ3JvdXAgPSBUUlVFOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBpZiggISRpc19pbl9ncm91cCApDQogICAgICAgIHsNCiAgICAgICAgICB0aHJvdyBuZXcgQ21zRXJyb3I0MDNFeGNlcHRpb24oKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgIyBzdXBlcnVzZXINCiAgICAgIHJldHVybiAnJzsNCiAgICB9DQogICAgDQogICAgIyBvaywgd2UgYXJlIGFsbG93ZWQNCiAgICByZXR1cm4gJyc7DQogIH0NCiAgDQogIHRocm93IG5ldyBDbXNFcnJvcjQwM0V4Y2VwdGlvbigpOw0KfQ0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/internal_plugins/function.restrict_by_ip_list.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogUmVzdHJpY3RzIGFjY2VzcyB0byB0aGUgU21hcnR5IHRlbXBsYXRlIGJ5IElQIGFkZHJlc3MuDQogKg0KICogQHBhcmFtIGFycmF5ICRwYXJhbXMgQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLg0KICogICAgICAgICAgICAgICAgICAgICAtIGxpc3Q6IEFuIGFycmF5IG9mIElQIGFkZHJlc3NlcyBvciBhIHNpbmdsZSBJUCBhZGRyZXNzLg0KICogQHBhcmFtIG9iamVjdCAkc21hcnR5IFRoZSBTbWFydHkgb2JqZWN0Lg0KICoNCiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYW4gZW1wdHkgc3RyaW5nLg0KICogQHRocm93cyBDbXNFcnJvcjQwM0V4Y2VwdGlvbiBUaHJvd3MgYSBDbXNFcnJvcjQwM0V4Y2VwdGlvbiBleGNlcHRpb24NCiAqIGlmIHRoZSBjdXJyZW50IElQIGFkZHJlc3MgbWF0Y2hlcyBhbnkgb2YgdGhlIElQIHBhdHRlcm5zIGluIHRoZSBsaXN0Lg0KICogSWYgdGhlIGN1c3RvbSA0MDMgZXJyb3IgcGFnZSBpcyBzZXQsIGl0IHdpbGwgYmUgcmV0dXJuZWQNCiAqIG90aGVyd2lzZSB0aGUgc3lzdGVtIDQwMyBlcnJvciBwYWdlIHdpbGwgYmUgcmV0dXJuZWQuDQogKiBAYXV0aG9yIEZlcm5hbmRvIE1vcmdhZG8gYWthIEpvTW9yZw0KICogQHNpbmNlIDEuNC4zDQogKiBAcGFja2FnZSBDTVNNU0V4dA0KICovDQpmdW5jdGlvbiBzbWFydHlfZnVuY3Rpb25fcmVzdHJpY3RfYnlfaXBfbGlzdCgkcGFyYW1zLCAkc21hcnR5KQ0Kew0KICAkbGlzdCA9ICRwYXJhbXNbJ2xpc3QnXSA/PyBbXTsNCiAgJGxpc3QgPSBpc19hcnJheSgkbGlzdCkgPyAkbGlzdCA6IFskbGlzdF07DQogIA0KICBpZighZW1wdHkoJGxpc3QpKQ0KICB7DQogICAgJGN1cnJlbnRfaXAgPSB4dF91dGlsczo6Z2V0X3JlYWxfaXAoKTsNCiAgICANCiAgICBmb3JlYWNoKCRsaXN0IGFzICRpcFBhdHRlcm4pDQogICAgew0KICAgICAgLy8gRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgcGF0dGVybiBhbmQgcmVwbGFjZSB3aWxkY2FyZHMNCiAgICAgICRpcFBhdHRlcm4gPSBwcmVnX3F1b3RlKCRpcFBhdHRlcm4sICcvJyk7DQogICAgICAkaXBQYXR0ZXJuID0gc3RyX3JlcGxhY2UoJ1wqJywgJy4qJywgJGlwUGF0dGVybik7DQogICAgICAkaXBQYXR0ZXJuID0gc3RyX3JlcGxhY2UoJ1w/JywgJy4nLCAkaXBQYXR0ZXJuKTsNCiAgICAgIA0KICAgICAgLy8gQ2hlY2sgaWYgdGhlIElQIG1hdGNoZXMgdGhlIHBhdHRlcm4NCiAgICAgIGlmKCBwcmVnX21hdGNoKCIvXiRpcFBhdHRlcm4kLyIsICRjdXJyZW50X2lwKSApDQogICAgICB7DQogICAgICAgIHRocm93IG5ldyBDbXNFcnJvcjQwM0V4Y2VwdGlvbigpOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KICByZXR1cm4gJyc7DQp9DQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/internal_plugins/function.Simple_reCAPTCHA_Redirect.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQHBhcmFtICRwYXJhbXMNCiAqIEBwYXJhbSAkc21hcnR5DQogKg0KICogQHJldHVybiB2b2lkDQogKiBAdGhyb3dzIFxFeGNlcHRpb24NCiAqDQogKiAgICAgICAgICAgICAgICAgICBzYW1wbGUgdXNhZ2U6DQogKiAge1NpbXBsZV9yZUNBUFRDSEFfUmVkaXJlY3QNCiAqICAgIHNpdGVfa2V5PSJ5b3VyX3NpdGVfa2V5Ig0KICogICAgc2VjcmV0X2tleT0ieW91cl9zZWNyZXRfa2V5Ig0KICogICAgWw0KICogICAgICByZWRpcmVjdF91cmw9InlvdXJfcmVkaXJlY3RfdXJsIg0KICogICAgICAgICAgICAgICAgICAgb3INCiAqICAgICAgYWxpYXMgPSB5b3VyX3BhZ2VfYWxpYXMNCiAqICAgIF0NCiAqICAgIHNlc3Npb25fdmFyaWFibGUgPSB5b3VyX3Nlc3Npb25fdmFyaWFibGUgZGVmYXVsdHMgdG8gcmVjYXB0Y2hhX3N1Y2Nlc3MNCiAqICAgIHZlcnNpb24gPSBbMiB8IDNdIDwtIGRlZmF1bHQgaXMgMw0KICogfQ0KICoNCiAqIHtpZiBpc3NldCgkcmVjYXB0Y2hhX2ZhaWx1cmVfY29kZXMpICYmIGlzX2FycmF5KCRyZWNhcHRjaGFfZmFpbHVyZV9jb2Rlcyl9DQogKiAgIHtmb3JlYWNoICRyZWNhcHRjaGFfZmFpbHVyZV9jb2RlcyBhcyAkY29kZX0NCiAqICAgICA8cD57JGNvZGV9PC9wPg0KICogICB7L2ZvcmVhY2h9DQogKiB7L2lmfQ0KICovDQpmdW5jdGlvbiBzbWFydHlfZnVuY3Rpb25fU2ltcGxlX3JlQ0FQVENIQV9SZWRpcmVjdCgkcGFyYW1zLCAkc21hcnR5KQ0Kew0KICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcmV0dXJuIHJlQ0FQVENIQSBlcnJvciBjb2Rlcw0KICAkcmV0dXJuX2Vycm9yX2NvZGUgPSBmdW5jdGlvbiAoJHJlc3VsdERhdGEpDQogIHsNCiAgICByZXR1cm4gaXNzZXQoJHJlc3VsdERhdGFbJ2Vycm9yLWNvZGVzJ10pID8gJHJlc3VsdERhdGFbJ2Vycm9yLWNvZGVzJ10gOiBbJ1Vua25vd24gZXJyb3InXTsNCiAgfTsNCiAgDQogIC8vIFZhbGlkYXRlIHJlcXVpcmVkIHBhcmFtZXRlcnMNCiAgaWYgKEZBTFNFID09PSBpc3NldCgkcGFyYW1zWydzaXRlX2tleSddKSB8fCBGQUxTRSA9PT0gaXNzZXQoJHBhcmFtc1snc2VjcmV0X2tleSddKSkNCiAgew0KICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiQm90aCAnc2l0ZV9rZXknIGFuZCAnc2VjcmV0X2tleScgcGFyYW1ldGVycyBhcmUgcmVxdWlyZWQgZm9yIHJlQ0FQVENIQSIpOw0KICB9DQogIA0KICAkc2l0ZUtleSAgICAgPSAkcGFyYW1zWydzaXRlX2tleSddOw0KICAkc2VjcmV0S2V5ICAgPSAkcGFyYW1zWydzZWNyZXRfa2V5J107DQogICRyZWRpcmVjdFVybCA9ICRwYXJhbXNbJ3JlZGlyZWN0X3VybCddID8/IE5VTEw7DQogICRhbGlhcyAgICAgICA9ICRwYXJhbXNbJ2FsaWFzJ10gPz8gTlVMTDsNCiAgJHZlcnNpb24gICAgID0gJHBhcmFtc1sndmVyc2lvbiddID8/IDM7DQogICR2ZXJzaW9uICAgICA9IGluX2FycmF5KChpbnQpICR2ZXJzaW9uLCBbMiwgM10pID8gJHZlcnNpb24gOiAzOyAvLyBEZWZhdWx0IHRvIHZlcnNpb24gMw0KICAkdXJsICAgICAgICAgPSAnaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9yZWNhcHRjaGEvYXBpL3NpdGV2ZXJpZnknOw0KICAkc2Vzc2lvblZhciAgPSAkcGFyYW1zWydzZXNzaW9uX3ZhcmlhYmxlJ10gPz8gJ3JlY2FwdGNoYV9zdWNjZXNzJzsgLy8gZGVmYXVsdCBzZXNzaW9uIHZhcmlhYmxlDQogIA0KICAvLyBIYW5kbGUgZm9ybSBzdWJtaXNzaW9uIGZvciByZUNBUFRDSEEgdjINCiAgaWYgKDIgPT09ICR2ZXJzaW9uKQ0KICB7DQogICAgaWYgKCdQT1NUJyA9PT0gJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10pDQogICAgew0KICAgICAgJHJlY2FwdGNoYVJlc3BvbnNlID0gJF9QT1NUWydnLXJlY2FwdGNoYS1yZXNwb25zZSddID8/ICcnOw0KICAgICAgJGRhdGEgICAgICAgICAgICAgID0gWw0KICAgICAgICAnc2VjcmV0JyAgID0+ICRzZWNyZXRLZXksDQogICAgICAgICdyZXNwb25zZScgPT4gJHJlY2FwdGNoYVJlc3BvbnNlLA0KICAgICAgICAncmVtb3RlaXAnID0+ICRfU0VSVkVSWydSRU1PVEVfQUREUiddLA0KICAgICAgXTsNCiAgICAgIA0KICAgICAgJG9wdGlvbnMgPSBbDQogICAgICAgICdodHRwJyA9PiBbDQogICAgICAgICAgJ2hlYWRlcicgID0+ICJDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxyXG4iLA0KICAgICAgICAgICdtZXRob2QnICA9PiAnUE9TVCcsDQogICAgICAgICAgJ2NvbnRlbnQnID0+IGh0dHBfYnVpbGRfcXVlcnkoJGRhdGEpLA0KICAgICAgICBdLA0KICAgICAgXTsNCiAgICAgIA0KICAgICAgJGNvbnRleHQgICAgPSBzdHJlYW1fY29udGV4dF9jcmVhdGUoJG9wdGlvbnMpOw0KICAgICAgJHJlc3VsdCAgICAgPSBmaWxlX2dldF9jb250ZW50cygkdXJsLCBGQUxTRSwgJGNvbnRleHQpOw0KICAgICAgJHJlc3VsdERhdGEgPSBqc29uX2RlY29kZSgkcmVzdWx0LCBUUlVFKTsNCiAgICAgIA0KICAgICAgaWYgKFRSVUUgPT09IGlzc2V0KCRyZXN1bHREYXRhWydzdWNjZXNzJ10pICYmIFRSVUUgPT09ICRyZXN1bHREYXRhWydzdWNjZXNzJ10pDQogICAgICB7DQogICAgICAgIC8vIFNldCBzZXNzaW9uIHZhcmlhYmxlDQogICAgICAgICRfU0VTU0lPTlskc2Vzc2lvblZhcl0gPSBUUlVFOw0KICAgICAgICANCiAgICAgICAgLy8gUmVkaXJlY3Qgb24gc3VjY2Vzcw0KICAgICAgICBpZihGQUxTRSA9PT0gZW1wdHkoJHJlZGlyZWN0VXJsKSkNCiAgICAgICAgew0KICAgICAgICAgIGhlYWRlcignTG9jYXRpb246ICcgLiAkcmVkaXJlY3RVcmwpOw0KICAgICAgICAgIGV4aXQ7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGlmIChGQUxTRSA9PT0gZW1wdHkoJGFsaWFzKSkNCiAgICAgICAgew0KICAgICAgICAgIHJlZGlyZWN0X3RvX2FsaWFzKCRhbGlhcyk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgLy8gQXNzaWduIGVycm9yIGNvZGVzIHRvIFNtYXJ0eSBpZiB2YWxpZGF0aW9uIGZhaWxzDQogICAgICAgICRlcnJvcl9jb2RlcyA9ICRyZXR1cm5fZXJyb3JfY29kZSgkcmVzdWx0RGF0YSk7DQogICAgICAgICRzbWFydHktPmFzc2lnbigncmVjYXB0Y2hhX2ZhaWx1cmVfY29kZXMnLCAkZXJyb3JfY29kZXMpOw0KICAgICAgICByZXR1cm47DQogICAgICB9DQogICAgfQ0KICAgIA0KICAgIC8vIEdlbmVyYXRlIHRoZSByZUNBUFRDSEEgdjIgZm9ybQ0KICAgIGVjaG8gJzxmb3JtIGlkPSJyZWNhcHRjaGEtZm9ybSIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiI+JzsNCiAgICBlY2hvICc8ZGl2IGNsYXNzPSJnLXJlY2FwdGNoYSIgZGF0YS1zaXRla2V5PSInIC4gaHRtbHNwZWNpYWxjaGFycygkc2l0ZUtleSkgLiAnIj48L2Rpdj4nOw0KICAgIGVjaG8gJzwvZm9ybT4nOw0KICAgIA0KICAgIC8vIEVtYmVkIHRoZSByZUNBUFRDSEEgdjIgSmF2YVNjcmlwdA0KICAgIGVjaG8gJzxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL3JlY2FwdGNoYS9hcGkuanMiIGFzeW5jIGRlZmVyPjwvc2NyaXB0Pic7DQogICAgDQogICAgLy8gQXV0by1zdWJtaXQgYWZ0ZXIgc3VjY2Vzc2Z1bCB2YWxpZGF0aW9uDQogICAgZWNobyAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlY2FwdGNoYUNhbGxiYWNrKCkgew0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVjYXB0Y2hhLWZvcm0iKS5zdWJtaXQoKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIDwvc2NyaXB0Pic7DQogICAgZWNobyAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHJlY2FwdGNoYUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZy1yZWNhcHRjaGEiKTsNCiAgICAgICAgICAgICAgICAgICAgcmVjYXB0Y2hhRWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtY2FsbGJhY2siLCAicmVjYXB0Y2hhQ2FsbGJhY2siKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgPC9zY3JpcHQ+JzsNCiAgfQ0KICANCiAgLy8gSGFuZGxlIGZvcm0gc3VibWlzc2lvbiBmb3IgcmVDQVBUQ0hBIHYzDQogIGlmICgzID09PSAkdmVyc2lvbikNCiAgew0KICAgIGlmICgnUE9TVCcgPT09ICRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddKQ0KICAgIHsNCiAgICAgICRyZWNhcHRjaGFUb2tlbiA9ICRfUE9TVFsncmVjYXB0Y2hhX3Rva2VuJ10gPz8gJyc7DQogICAgICAkZGF0YSAgICAgICAgICAgPSBbDQogICAgICAgICdzZWNyZXQnICAgPT4gJHNlY3JldEtleSwNCiAgICAgICAgJ3Jlc3BvbnNlJyA9PiAkcmVjYXB0Y2hhVG9rZW4sDQogICAgICAgICdyZW1vdGVpcCcgPT4gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10sDQogICAgICBdOw0KICAgICAgDQogICAgICAkb3B0aW9ucyA9IFsNCiAgICAgICAgJ2h0dHAnID0+IFsNCiAgICAgICAgICAnaGVhZGVyJyAgPT4gIkNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXHJcbiIsDQogICAgICAgICAgJ21ldGhvZCcgID0+ICdQT1NUJywNCiAgICAgICAgICAnY29udGVudCcgPT4gaHR0cF9idWlsZF9xdWVyeSgkZGF0YSksDQogICAgICAgIF0sDQogICAgICBdOw0KICAgICAgDQogICAgICAkY29udGV4dCAgICA9IHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgkb3B0aW9ucyk7DQogICAgICAkcmVzdWx0ICAgICA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR1cmwsIEZBTFNFLCAkY29udGV4dCk7DQogICAgICAkcmVzdWx0RGF0YSA9IGpzb25fZGVjb2RlKCRyZXN1bHQsIFRSVUUpOw0KICAgICAgDQogICAgICBpZiAoVFJVRSA9PT0gaXNzZXQoJHJlc3VsdERhdGFbJ3N1Y2Nlc3MnXSkgJiYgVFJVRSA9PT0gJHJlc3VsdERhdGFbJ3N1Y2Nlc3MnXSkNCiAgICAgIHsNCiAgICAgICAgLy8gU2V0IHNlc3Npb24gdmFyaWFibGUNCiAgICAgICAgJF9TRVNTSU9OWyRzZXNzaW9uVmFyXSA9IFRSVUU7DQogICAgICAgIA0KICAgICAgICAvLyBSZWRpcmVjdCBvbiBzdWNjZXNzDQogICAgICAgIGlmKEZBTFNFID09PSBlbXB0eSgkcmVkaXJlY3RVcmwpKQ0KICAgICAgICB7DQogICAgICAgICAgaGVhZGVyKCdMb2NhdGlvbjogJyAuICRyZWRpcmVjdFVybCk7DQogICAgICAgICAgZXhpdDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgaWYgKEZBTFNFID09PSBlbXB0eSgkYWxpYXMpKQ0KICAgICAgICB7DQogICAgICAgICAgcmVkaXJlY3RfdG9fYWxpYXMoJGFsaWFzKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAvLyBBc3NpZ24gZXJyb3IgY29kZXMgdG8gU21hcnR5IGlmIHZhbGlkYXRpb24gZmFpbHMNCiAgICAgICAgJGVycm9yX2NvZGVzID0gJHJldHVybl9lcnJvcl9jb2RlKCRyZXN1bHREYXRhKTsNCiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdyZWNhcHRjaGFfZmFpbHVyZV9jb2RlcycsICRlcnJvcl9jb2Rlcyk7DQogICAgICAgIHJldHVybjsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgLy8gR2VuZXJhdGUgdGhlIHJlQ0FQVENIQSB2MyBmb3JtDQogICAgZWNobyAnPGZvcm0gaWQ9InJlY2FwdGNoYS1mb3JtIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iIj4nOw0KICAgIGVjaG8gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJyZWNhcHRjaGEtdG9rZW4iIG5hbWU9InJlY2FwdGNoYV90b2tlbiIgdmFsdWU9IiI+JzsNCiAgICBlY2hvICc8L2Zvcm0+JzsNCiAgICANCiAgICAvLyBFbWJlZCB0aGUgcmVDQVBUQ0hBIHYzIEphdmFTY3JpcHQNCiAgICBlY2hvICc8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9yZWNhcHRjaGEvYXBpLmpzP3JlbmRlcj0nIC4gaHRtbHNwZWNpYWxjaGFycygkc2l0ZUtleSkgLiAnIj48L3NjcmlwdD4nOw0KICAgIGVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCiAgICAgICAgICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZVJlY2FwdGNoYUFuZFN1Ym1pdCgpIHsNCiAgICAgICAgICAgICAgICAgICAgZ3JlY2FwdGNoYS5yZWFkeShmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGdyZWNhcHRjaGEuZXhlY3V0ZSgiJyAuIGh0bWxzcGVjaWFsY2hhcnMoJHNpdGVLZXkpIC4gJyIsIHthY3Rpb246ICJzdWJtaXQifSkudGhlbihmdW5jdGlvbih0b2tlbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZWNhcHRjaGEtdG9rZW4iKS52YWx1ZSA9IHRva2VuOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZWNhcHRjaGEtZm9ybSIpLnN1Ym1pdCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgPC9zY3JpcHQ+JzsNCiAgICBlY2hvICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVJlY2FwdGNoYUFuZFN1Ym1pdCgpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICA8L3NjcmlwdD4nOw0KICB9DQp9DQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/internal_plugins/modifier.dbg.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyoNCiAqIFNtYXJ0eSBwbHVnaW4NCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAqIEZpbGU6ICAgICBtb2RpZmllci5kYmcucGhwDQogKiBUeXBlOiAgICAgbW9kaWZpZXINCiAqIE5hbWU6ICAgICBkYmcNCiAqIFB1cnBvc2U6ICByZXR1cm4gYSAncHJldHR5ZmllZCcgZHVtcCBvZiBhIHZhcmlhYmxlDQogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogKi8NCg0KdXNlIENNU01TRXh0XGNvcmVcVmFyRHVtcGVyOw0KDQpmdW5jdGlvbiBzbWFydHlfbW9kaWZpZXJfZGJnKCR2YXIsICRkZXB0aCA9IDUsICRoaWdobGlnaHQgPSBUUlVFKSA6IHN0cmluZw0Kew0KICAkb3V0ID0gJzxwcmUgc3R5bGU9IndvcmQtd3JhcDogYnJlYWstd29yZDsiPicNCiAgICAgICAgIC4gJ3NtYXJ0eSBtb2RpZmllcicNCiAgICAgICAgIC4gJzxkaXYgc3R5bGU9IndvcmQtd3JhcDogYnJlYWstd29yZDsiPicNCiAgICAgICAgIC4gVmFyRHVtcGVyOjpkdW1wKCR2YXIsICRkZXB0aCwgJGhpZ2hsaWdodCkNCiAgICAgICAgIC4gJzwvZGl2PicNCiAgICAgICAgIC4gJzwvcHJlPic7DQogIA0KICByZXR1cm4gJG91dDsNCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/jsloader</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/jsloader/class.jsloader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBjb250YWlucyBjbGFzc2VzIGZvciBkZWZpbmluZyBhIGphdmFzY3JpcHQgbGlicmFyeS4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IGpzbG9hZGVyCiAqIEBhdXRob3IgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTQgYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XGpzbG9hZGVyOwp1c2UgQ21zQXBwOwp1c2UgQ01TTVNcSG9va01hbmFnZXI7CnVzZSBjbXNfc2l0ZXByZWZzOwp1c2UgY21zX2NvbmZpZzsKdXNlIHh0X3V0aWxzOwp1c2UgQ01TTVNFeHRcanNsb2FkZXJcbGliZGVmbjsKCi8qKgogKiBBIHV0aWxpdHkgY2xhc3MgdG8gbWFuYWdlIGxvYWRpbmcgYW5kIGNvbWJpbmluZyBqYXZhc2NyaXB0IGxpYnJhcmllcyBhbmQgYXNzb2NpYXRlZCBzdHlsZXNoZWV0cy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGRlcHJlY3RlZAogKi8KZmluYWwgY2xhc3MganNsb2FkZXIKewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9ybGlicyA9IFtdOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfcmVxdWlyZWQgPSBbXTsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2NhY2hlOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfcmVzb2x2ZWQ7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9jb25maWc7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9rZXk7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9yZW5kZXJfb3B0czsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2FkbWluX3JlbmRlcl9vcHRzOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkX2luc3RhbmNlX2NudCA9IDA7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RvcgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBBIHN0YXRpYyBrZXkgdGhhdCBpcyB1c2VkIGluIHRoZSB1bmlxdWUgbmFtaW5nIG9mIGdlbmVyYXRlZCBmaWxlcy4KICAgICAqIEBwYXJhbSBhcnJheSAkY29uZmlnIFRoZSBjbXMgY29uZmlnIGluc3RhbmNlIHRvIHVzZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAka2V5LCAkY29uZmlnICkKICAgIHsKICAgICAgICBpZiggISRrZXkgKSB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBrZXkgcGFzc2VkIHRvICcuX19NRVRIT0RfXyk7CiAgICAgICAgJHRoaXMtPl9rZXkgPSAka2V5OwogICAgICAgIHNlbGY6OiRfaW5zdGFuY2VfY250Kys7CiAgICAgICAgJHRoaXMtPl9jb25maWcgPSAkY29uZmlnOwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgcHVibGljIGZ1bmN0aW9uIF9sb2FkX2NhY2hlKCkKICB7CiAgICBcY2xhc3NfZXhpc3RzKGxpYmRlZm46OmNsYXNzKTsKICAgIAogICAgaWYoIVxpc19hcnJheSgkdGhpcy0+X2NhY2hlKSkKICAgIHsKICAgICAgJGNhY2hlICAgICA9IFtdOwogICAgICAkY2FjaGVfa2V5ID0gJ2MnIC4gXG1kNShfX0NMQVNTX18pOwogICAgICAkdG1wICAgICAgID0gY21zX3NpdGVwcmVmczo6Z2V0KCRjYWNoZV9rZXkpOwogICAgICBpZigkdG1wKQogICAgICB7CiAgICAgICAgJGNhY2hlID0gXHVuc2VyaWFsaXplKCR0bXApOwogICAgICB9CiAgICAgICR0aGlzLT5fY2FjaGUgPSAkY2FjaGU7CiAgICB9CiAgfQogIAogIAogIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgcHJpdmF0ZSBmdW5jdGlvbiBfc2F2ZV9jYWNoZSgpCiAgewogICAgJGNhY2hlX2tleSA9ICdjJyAuIFxtZDUoX19DTEFTU19fKTsKICAgIGNtc19zaXRlcHJlZnM6OnNldCgkY2FjaGVfa2V5LCBcc2VyaWFsaXplKCR0aGlzLT5fY2FjaGUpKTsKICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX2V4cGFuZF9maWxlbmFtZShzdHJpbmcgJGluKQogICAgewogICAgICAgICRzbWFydHkgPSBcY21zbXMoKS0+R2V0U21hcnR5KCk7CiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdyb290X3VybCcsIFxDTVNfUk9PVF9VUkwpOwogICAgICAgICRzbWFydHktPmFzc2lnbigncm9vdF9wYXRoJywgXENNU19ST09UX1BBVEgpOwogICAgICAgIHJldHVybiB0cmltKCRzbWFydHktPmZldGNoKCdzdHJpbmc6Jy4kaW4pKTsKICAgIH0KICAKICAvKioKICAgKiBSZWdpc3RlciBhIGxpYnJhcnkgZGVmaW5pdGlvbgogICAqCiAgICogQHBhcmFtIGxpYmRlZm4gJHJlYyAgIFRoZSBsaWJyYXJ5IGRlZmluaXRpb24gdG8gcmVnaXN0ZXIuCiAgICogQHBhcmFtIGJvb2wgICAgJGZvcmNlIEZvcmNlIHRoZSBsaWJkZWZuIHRvIGJlIHJlZ2lzdGVyZWQgZXZlbiBpZiBpdCBhbHJlYWR5IGhhcyBiZWVuLgogICAqCiAgICogQHRocm93cyBcQ21zSW52YWxpZERhdGFFeGNlcHRpb24KICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWdpc3RlcihsaWJkZWZuICRyZWMsICRmb3JjZSA9IEZBTFNFKQogICAgewogICAgICAgIGlmKCAhJHJlYy0+dmFsaWQoKSApIHRocm93IG5ldyBcQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJ2F0dGVtcHQgdG8gcmVnaXN0ZXIganMgbGliIHdpdGggaW52YWxpZCBsaWJkZWZuIG9iamVjdCcpOwoKICAgICAgICAkbGliID0gJHRoaXMtPl9maW5kX2xpYigkcmVjLT5uYW1lKTsKICAgICAgICBpZiggISRmb3JjZSAmJiBpc19vYmplY3QoJGxpYikgJiYgJGxpYiA9PSAkcmVjICkgewogICAgICAgICAgICByZXR1cm47IC8vIG5vdGhpbmcgdG8gZG8uCiAgICAgICAgfQoKICAgICAgICAvLyBhZGQgdGhpcyBpdGVtCiAgICAgICAgJHRoaXMtPl9sb2FkX2NhY2hlKCk7CiAgICAgICAgJHRoaXMtPl9jYWNoZVskcmVjLT5uYW1lXSA9ICRyZWM7CiAgICAgICAgJHRoaXMtPl9zYXZlX2NhY2hlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBVbnJlZ2lzdGVyIGFsbCBqYXZhc2NyaXB0IGxpYnJhcmllcyBhc3NvY2lhdGVkIHdpdGggYSBtb2R1bGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbW9kdWxlX25hbWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVucmVnaXN0ZXJfYnlfbW9kdWxlKHN0cmluZyAkbW9kdWxlX25hbWUpCiAgICB7CiAgICAgICAgJHRoaXMtPl9sb2FkX2NhY2hlKCk7CiAgICAgICAgJG91dCA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCggJHRoaXMtPl9jYWNoZSBhcyAka2V5ID0+ICRyZWMgKSB7CiAgICAgICAgICAgIGlmKCAkcmVjLT5tb2R1bGUgIT0gJG1vZHVsZV9uYW1lICkgJG91dFska2V5XSA9ICRyZWM7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPl9jYWNoZSA9ICRvdXQ7CiAgICAgICAgJHRoaXMtPl9zYXZlX2NhY2hlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGb3IgdGhpcyByZXF1ZXN0LCBpbmRpY2F0ZSB0aGF0IGEgamF2YXNjcmlwdCBsaWJyYXJ5IGlzIHJlcXVpcmVkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBib29sICRub21pbmlmeSBJZiB0cnVlLCB0aGUgbGlicmFyeSBjb2RlIHdpbGwgbm90IGJlIG1pbmlmaWVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVxdWlyZV9saWIoc3RyaW5nICRuYW1lLGJvb2wgJG5vbWluaWZ5ID0gZmFsc2UpCiAgICB7CiAgICAgICAgaWYoICFpc19hcnJheSgkbmFtZSkgKSAkbmFtZSA9IGV4cGxvZGUoJywnLCRuYW1lKTsKICAgICAgICBmb3JlYWNoKCAkbmFtZSBhcyAkb25lX25hbWUgKSB7CgkgICAgJG9uZV9uYW1lID0gdHJpbSgkb25lX25hbWUpOwogICAgICAgICAgICAkbGliID0gJHRoaXMtPl9maW5kX2xpYigkb25lX25hbWUpOwogICAgICAgICAgICBpZiggISRsaWIgKSB0aHJvdyBuZXcgXEV4Y2VwdGlvbigiVW5rbm93biByZXF1aXJlZCBqcyBsaWIgJG9uZV9uYW1lIik7CiAgICAgICAgICAgICRvYmogPSAkbGliOwogICAgICAgICAgICBpZiggJG5vbWluaWZ5ICkgewogICAgICAgICAgICAgICAgJG9iai0+anNfbm9taW5pZnkgPSB0cnVlOwogICAgICAgICAgICAgICAgJG9iai0+Y3NzX25vbWluaWZ5ID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+X3JsaWJzW10gPSAkb2JqOwogICAgICAgICAgICAkdGhpcy0+X3Jlc29sdmVkID0gbnVsbDsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgYW4gZXh0ZXJuYWwgamF2YXNjcmlwdCBsaWJyYXJ5LgogICAgICogW2V4cGVyaW1lbnRhbF0KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cmwKICAgICAqIEBwYXJhbSBib29sICRub21pbmlmeSBJZiB0cnVlLCB0aGUgbGlicmFyeSBjb2RlIHdpbGwgbm90IGJlIG1pbmlmaWVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkX2pzZXh0KHN0cmluZyAkdXJsLGJvb2wgJG5vbWluaWZ5ID0gZmFsc2UpCiAgICB7CiAgICAgICAgLy8gZXh0ZXJuYWxzIGNhbm5vdCBoYXZlIGRlcGVuZGVuY2llcy4uLgogICAgICAgICRvYmogPSBuZXcgXHN0ZENsYXNzOwogICAgICAgICRvYmotPmpzdXJsID0gJHVybDsKICAgICAgICBpZiggJG5vbWluaWZ5ICkgJG9iai0+anNfbm9taW5pZnkgPSB0cnVlOwogICAgICAgICR0aGlzLT5fcmVzb2x2ZWQgPSBudWxsOwogICAgICAgICR0aGlzLT5fcmVxdWlyZWRbXSA9ICRvYmo7CiAgICB9CgogICAgLyoqCiAgICAgKiBGb3IgdGhpcyByZXF1ZXN0LCBhZGQgYSBzcGVjaWZpZWQgamF2YXNjcmlwdCBmaWxlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgVGhlIGNvbXBsZXRlIHBhdGhuYW1lIHRvIHRoZSBqYXZhc2NyaXB0IGZpbGUuCiAgICAgKiBAcGFyYW0gbnVsbHxzdHJpbmdbXSAkZGVwZW5kcyBhcnJheSBvZiBsaWJyYXJ5IG5hbWVzIChtdXN0IGFscmVhZHkgYmUgcmVnaXN0ZXJlZCkgdGhhdCB0aGlzIGZpbGUgZGVwZW5kcyB1cG9uLgogICAgICogQHBhcmFtIGJvb2wgJG5vbWluaWZ5IElmIHRydWUsIHRoZSBsaWJyYXJ5IGNvZGUgd2lsbCBub3QgYmUgbWluaWZpZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRfanNmaWxlKHN0cmluZyAkZmlsZSxhcnJheSAkZGVwZW5kcyA9IG51bGwsYm9vbCAkbm9taW5pZnkgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiggISRmaWxlIHx8ICFcaXNfc3RyaW5nKCRmaWxlKSApIHsgcmV0dXJuOyB9CgogICAgICAgIC8vIGFzc3VtZSBmdWxsIHBhdGgKICAgICAgICAkdHJ5ZmlsZXMgPSBbJGZpbGVdOwoKICAgICAgICAvLyBhc3N1bWUgcmVsYXRpdmUgdG8gbW9kdWxlIGRpcmVjdG9yeQogICAgICAgICRtb2R1bGVfbmFtZSA9IFx4dF90bXBkYXRhOjpnZXQoJ21vZHVsZScpOwogICAgICAgIGlmKCAkbW9kdWxlX25hbWUgKSB7CiAgICAgICAgICAgICRtb2QgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRtb2R1bGVfbmFtZSk7CiAgICAgICAgICAgIGlmKCAkbW9kICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICR0cnlmaWxlc1tdID0gJG1vZC0+R2V0TW9kdWxlUGF0aCgpIC4gIi8kZmlsZSI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIGFzc3VtZSByZWxhdGl2ZSB0byB1cGxvYWRzIHBhdGgKICAgICAgICAkdHJ5ZmlsZXNbXSA9ICR0aGlzLT5fY29uZmlnWyd1cGxvYWRzX3BhdGgnXS4iLyRmaWxlIjsKCiAgICAgICAgLy8gYXNzdW1lIHJlbGF0aXZlIHRvIHJvb3QgcGF0aAogICAgICAgICR0cnlmaWxlc1tdID0gQ01TX1JPT1RfUEFUSC4iLyRmaWxlIjsKICAgICAgICAKCiAgICAgICAgJGZuZCA9IG51bGw7CiAgICAgICAgZm9yZWFjaCggJHRyeWZpbGVzIGFzICRmbiApIHsKICAgICAgICAgICAgaWYoIGZpbGVfZXhpc3RzKCRmbikgKSB7CiAgICAgICAgICAgICAgICAkZm5kID0gJGZuOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoICEkZm5kICkgdGhyb3cgbmV3IFxDbXNJbnZhbGlkRGF0YUV4Y2VwdGlvbigiY291bGQgbm90IGZpbmQganNmaWxlICRmaWxlIGluIGFueSBvZiB0aGUgc2VhcmNoZWQgZGlyZWN0b3JpZXMiKTsKCiAgICAgICAgJG9iaiA9IG5ldyBcU3RkQ2xhc3M7CiAgICAgICAgJG9iai0+anNmaWxlID0gJGZuZDsKICAgICAgICBpZiggJGRlcGVuZHMgKSB7CiAgICAgICAgICAgIGlmKCAhaXNfYXJyYXkoJGRlcGVuZHMpICkgJGRlcGVuZHMgPSBhcnJheSgkZGVwZW5kcyk7CiAgICAgICAgICAgICRvYmotPmRlcGVuZHMgPSAkZGVwZW5kczsKICAgICAgICB9CiAgICAgICAgaWYoICRub21pbmlmeSApICRvYmotPmpzX25vbWluaWZ5ID0gdHJ1ZTsKICAgICAgICAkdGhpcy0+X3Jlc29sdmVkID0gbnVsbDsKICAgICAgICAkdGhpcy0+X3JlcXVpcmVkW10gPSAkb2JqOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIGphdmFzY3JpcHQgY29kZSB0byB0aGUgb3V0cHV0IGZvciB0aGlzIHJlcXVlc3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY29kZSBUaGUgamF2YXNjcmlwdCBjb2RlIChzY3JpcHQgdGFncyBhcmUgbm90IHJlcXVpcmVkKQogICAgICogQHBhcmFtIG51bGx8c3RyaW5nW10gJGRlcGVuZHMgQXJyYXkgb2YgcmVxdWlyZWQgamF2YXNjcmlwdCBsaWJyYXJpZXMuCiAgICAgKiBAcGFyYW0gYm9vbCAkbm9taW5pZnkgSWYgdHJ1ZSwgdGhlIGxpYnJhcnkgY29kZSB3aWxsIG5vdCBiZSBtaW5pZmllZC4KICAgICAqIEBwYXJhbSBib29sICRhcHBlbmQgSWYgdHJ1ZSwgdGhpcyBjb2RlIHdpbGwgYmUgYXBwZW5kZWQgYWZ0ZXIgYWxsIG90aGVyIHNjcmlwdHMuLiBvdGhlcndpc2UgaW5jbHVkZWQgaW4gb3JkZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZF9qcyhzdHJpbmcgJGNvZGUsYXJyYXkgJGRlcGVuZHMgPSBudWxsLGJvb2wgJG5vbWluaWZ5ID0gdHJ1ZSxib29sICRhcHBlbmQgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiggISRjb2RlIHx8ICFpc19zdHJpbmcoJGNvZGUpICkgcmV0dXJuOwoKICAgICAgICAvLyB0b2RvOiByZW1vdmUgc2NyaXB0IHRhZ3MKICAgICAgICAkb2JqID0gbmV3IFxTdGRDbGFzczsKICAgICAgICAkb2JqLT5hcHBlbmQgPSAkYXBwZW5kOwogICAgICAgICRvYmotPmNvZGUgPSAkY29kZTsKICAgICAgICBpZiggJGRlcGVuZHMgKSB7CiAgICAgICAgICAgIGlmKCAhaXNfYXJyYXkoJGRlcGVuZHMpICkgJGRlcGVuZHMgPSBhcnJheSgkZGVwZW5kcyk7CiAgICAgICAgICAgICRvYmotPmRlcGVuZHMgPSAkZGVwZW5kczsKICAgICAgICB9CiAgICAgICAgaWYoICRub21pbmlmeSApICRvYmotPmpzX25vbWluaWZ5ID0gdHJ1ZTsKICAgICAgICAkdGhpcy0+X3Jlc29sdmVkID0gbnVsbDsKICAgICAgICAkdGhpcy0+X3JlcXVpcmVkW10gPSAkb2JqOwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVxdWlyZV9jc3Moc3RyaW5nICRuYW1lLGFycmF5ICRkZXBlbmRzID0gbnVsbCxib29sICRub21pbmlmeSA9IGZhbHNlKQogICAgewogICAgICAgICRvYmogPSBuZXcgXHN0ZENsYXNzOwogICAgICAgICRvYmotPmNzc25hbWUgPSB0cmltKCRuYW1lKTsKICAgICAgICBpZiggJG5vbWluaWZ5ICkgJG9iai0+Y3NzX25vbWluaWZ5ID0gdHJ1ZTsKICAgICAgICBpZiggJGRlcGVuZHMgKSB7CiAgICAgICAgICAgIGlmKCAhaXNfYXJyYXkoJGRlcGVuZHMpICkgJGRlcGVuZHMgPSBhcnJheSgkZGVwZW5kcyk7CiAgICAgICAgICAgICRvYmotPmRlcGVuZHMgPSAkZGVwZW5kczsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPl9yZXNvbHZlZCA9IG51bGw7CiAgICAgICAgJHRoaXMtPl9yZXF1aXJlZFtdID0gJG9iajsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZF9jc3NleHQoc3RyaW5nICR1cmwsYm9vbCAkbm9taW5pZnkgPSBmYWxzZSxib29sICRhcHBlbmQgPSBmYWxzZSkKICAgIHsKICAgICAgICAvLyBleHRlcm5hbHMgY2Fubm90IGhhdmUgZGVwZW5kZW5jaWVzLi4uCiAgICAgICAgJG9iaiA9IG5ldyBcc3RkQ2xhc3M7CiAgICAgICAgJG9iai0+YXBwZW5kID0gJGFwcGVuZDsKICAgICAgICAkb2JqLT5jc3N1cmwgPSAkdXJsOwogICAgICAgICRvYmotPmNzc19ub21pbmlmeSA9IHRydWU7IC8vIG9kZHMgYXJlIGV4dGVybmFsIGNzcyBpcyBhbHJlYWR5IG1pbmlmaWVkCiAgICAgICAgaWYoICRub21pbmlmeSApICRvYmotPmNzc19ub21pbmlmeSA9IHRydWU7CiAgICAgICAgJHRoaXMtPl9yZXNvbHZlZCA9IG51bGw7CiAgICAgICAgJHRoaXMtPl9yZXF1aXJlZFtdID0gJG9iajsKICAgIH0KCgogICAgLyoqCiAgICAgKiBBZGQgYSBjc3MgZmlsZSB0byB0aGUgb3V0cHV0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgVGhlIGZpbGVuYW1lLiAgSWYgbm90IGFuIGFic29sdXRlIHBhdGgsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlsZSB3aXRoaW4gdGhlIGN1cnJlbnQgbW9kdWxlIGRpcmVjdG9yeSAoaWYgYW55KSwgdGhlIHVwbG9hZHMgcGF0aCwgYW5kIHRoZW4gdGhlIHJvb3QgcGF0aC4KICAgICAqIEBwYXJhbSBudWxsfHN0cmluZ1tdICRkZXBlbmRzIEFycmF5IG9mIGxpYnJhcmllcyB0aGF0IHRoaXMgY3NzIGZpbGUgZGVwZW5kcyB1cG9uLgogICAgICogQHBhcmFtIGJvb2wgJG5vbWluaWZ5IElmIHRydWUsIHRoZSBsaWJyYXJ5IGNvZGUgd2lsbCBub3QgYmUgbWluaWZpZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRfY3NzZmlsZShzdHJpbmcgJGZpbGUsYm9vbCAkZGVwZW5kcyA9IG51bGwsYm9vbCAkbm9taW5pZnkgPSB0cnVlKQogICAgewogICAgICAgIGlmKCAhJGZpbGUgfHwgIWlzX3N0cmluZygkZmlsZSkgKSByZXR1cm47CgogICAgICAgIC8vIGFzc3VtZSBmdWxsIHBhdGgKICAgICAgICAkdHJ5ZmlsZXMgPSBhcnJheSgkZmlsZSk7CgogICAgICAgIC8vIGFzc3VtZSByZWxhdGl2ZSB0byBtb2R1bGUgZGlyZWN0b3J5CiAgICAgICAgJG1vZHVsZV9uYW1lID0gXHh0X3RtcGRhdGE6OmdldCgnbW9kdWxlJyk7CiAgICAgICAgaWYoICRtb2R1bGVfbmFtZSApIHsKICAgICAgICAgICAgJG1vZCA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJG1vZHVsZV9uYW1lKTsKICAgICAgICAgICAgaWYoICRtb2QgKSAkdHJ5ZmlsZXNbXSA9ICRtb2QtPkdldE1vZHVsZVBhdGgoKS4iLyRmaWxlIjsKICAgICAgICB9CgogICAgICAgIC8vIGFzc3VtZSByZWxhdGl2ZSB0byB1cGxvYWRzIHBhdGgKICAgICAgICAkdHJ5ZmlsZXNbXSA9ICR0aGlzLT5fY29uZmlnWyd1cGxvYWRzX3BhdGgnXS4iLyRmaWxlIjsKICAgICAgICAkdHJ5ZmlsZXNbXSA9IENNU19ST09UX1BBVEguIi8kZmlsZSI7CgogICAgICAgICRmbmQgPSBudWxsOwogICAgICAgIGZvcmVhY2goICR0cnlmaWxlcyBhcyAkZm4gKSB7CiAgICAgICAgICAgIGlmKCBmaWxlX2V4aXN0cygkZm4pICkgewogICAgICAgICAgICAgICAgJGZuZCA9ICRmbjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCAhJGZuZCApIHRocm93IG5ldyBcQ21zSW52YWxpZERhdGFFeGNlcHRpb24oImNvdWxkIG5vdCBmaW5kIGpzZmlsZSAkZmlsZSBpbiBhbnkgb2YgdGhlIHNlYXJjaGVkIGRpcmVjdG9yaWVzIik7CgogICAgICAgICRvYmogPSBuZXcgXFN0ZENsYXNzOwogICAgICAgICRvYmotPmNzc2ZpbGUgPSAkZm5kOwogICAgICAgIGlmKCAkZGVwZW5kcyApIHsKICAgICAgICAgICAgaWYoICFpc19hcnJheSgkZGVwZW5kcykgKSAkZGVwZW5kcyA9IGFycmF5KCRkZXBlbmRzKTsKICAgICAgICAgICAgJG9iai0+ZGVwZW5kcyA9ICRkZXBlbmRzOwogICAgICAgIH0KICAgICAgICBpZiggJG5vbWluaWZ5ICkgJG9iai0+Y3NzX25vbWluaWZ5ID0gdHJ1ZTsKICAgICAgICAkdGhpcy0+X3Jlc29sdmVkID0gbnVsbDsKICAgICAgICAkdGhpcy0+X3JlcXVpcmVkW10gPSAkb2JqOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIHN0YXRpYyBjc3MgdGV4dCB0byB0aGUgb3V0cHV0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0eWxlcyBUaGUgc3RhdGljIENTUyB0ZXh0IChzdHlsZSB0YWdzIGFyZSBub3QgbmVlZGVkKS4KICAgICAqIEBwYXJhbSBhcnJheSAkZGVwZW5kcyBBIGxpc3Qgb2YgbGlicmFyaWVzIHRoYXQgdGhpcyBjc3MgZGVwZW5kcyB1cG9uLgogICAgICogQHBhcmFtIGJvb2wgJG5vbWluaWZ5IElmIHRydWUsIHRoZSBsaWJyYXJ5IGNvZGUgd2lsbCBub3QgYmUgbWluaWZpZWQuCiAgICAgKiBAcGFyYW0gYm9vbCAkYXBwZW5kIElmIHRydWUsIHRoaXMgY29kZSB3aWxsIGJlIGFwcGVuZGVkIGFmdGVyIGFsbCBvdGhlciBzY3JpcHRzLi4gb3RoZXJ3aXNlIGluY2x1ZGVkIGluIG9yZGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRfY3NzKHN0cmluZyAkc3R5bGVzLGFycmF5ICRkZXBlbmRzID0gbnVsbCxib29sICRub21pbmlmeSA9IHRydWUsYm9vbCAkYXBwZW5kID0gZmFsc2UpCiAgICB7CiAgICAgICAgaWYoICEkc3R5bGVzIHx8ICFpc19zdHJpbmcoJHN0eWxlcykgKSByZXR1cm47CgogICAgICAgIC8vIHRvZG86IHJlbW92ZSBzY3JpcHQgdGFncwogICAgICAgICRvYmogPSBuZXcgXFN0ZENsYXNzOwogICAgICAgICRvYmotPmFwcGVuZCA9ICRhcHBlbmQ7CiAgICAgICAgJG9iai0+c3R5bGVzID0gJHN0eWxlczsKICAgICAgICBpZiggJGRlcGVuZHMgKSB7CiAgICAgICAgICAgIGlmKCAhaXNfYXJyYXkoJGRlcGVuZHMpICkgJGRlcGVuZHMgPSBhcnJheSgkZGVwZW5kcyk7CiAgICAgICAgICAgICRvYmotPmRlcGVuZHMgPSAkZGVwZW5kczsKICAgICAgICB9CiAgICAgICAgaWYoICRub21pbmlmeSApICRvYmotPmNzc19ub21pbmlmeSA9IHRydWU7CiAgICAgICAgJHRoaXMtPl9yZXNvbHZlZCA9IG51bGw7CiAgICAgICAgJHRoaXMtPl9yZXF1aXJlZFtdID0gJG9iajsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfZmluZF9saWIoc3RyaW5nICRuYW1lKQogICAgewogICAgICAgICR0aGlzLT5fbG9hZF9jYWNoZSgpOwogICAgICAgIGlmKCBpc3NldCgkdGhpcy0+X2NhY2hlWyRuYW1lXSkgKSByZXR1cm4gJHRoaXMtPl9jYWNoZVskbmFtZV07CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX2dldF9zb3J0ZWRfcmVxdWlyZWQoKQogICAgewogICAgICAgICRvdXQgPSAkYXBwZW5kID0gW107CiAgICAgICAgZm9yZWFjaCggJHRoaXMtPl9yZXF1aXJlZCBhcyAkb25lICkgewogICAgICAgICAgICBpZiggIWlzc2V0KCRvbmUtPmFwcGVuZCkgfHwgISRvbmUtPmFwcGVuZCApIHsKICAgICAgICAgICAgICAgICRvdXRbXSA9ICRvbmU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkYXBwZW5kW10gPSAkb25lOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBhcnJheV9tZXJnZSggJG91dCwgJGFwcGVuZCApOwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9yZXNvbHZlX2RlcGVuZGVuY2llcygkcmVjLCYkb3V0LCRleGNsdWRlcykKICAgIHsKICAgICAgICAkdGhpcy0+X2xvYWRfY2FjaGUoKTsKICAgICAgICBpZiggaXNzZXQoJHJlYy0+bGliKSAmJiBpbl9hcnJheSgkcmVjLT5saWIsJGV4Y2x1ZGVzKSApIHJldHVybjsKICAgICAgICBpZiggaXNzZXQoJHJlYy0+bmFtZSkgJiYgaW5fYXJyYXkoJHJlYy0+bmFtZSwkZXhjbHVkZXMpICkgcmV0dXJuOwogICAgICAgIGlmKCAkcmVjLT5tb2R1bGUgKSB7CiAgICAgICAgICAgICRtb2QgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRyZWMtPm1vZHVsZSk7CiAgICAgICAgICAgIGlmKCAhJG1vZCApIHRocm93IG5ldyBcRXhjZXB0aW9uKCdNaXNzaW5nIHJlcXVpcmVkIG1vZHVsZSAnLiRyZWMtPm1vZHVsZSk7CiAgICAgICAgfQoKICAgICAgICAvLyBpZiB0aGlzIHJlYyBkZXBlbmRzIG9uIHNvbWV0aGluZyBlbHNlCiAgICAgICAgaWYoIGlzc2V0KCRyZWMtPmRlcGVuZHMpICkgewogICAgICAgICAgICAkZGVwZW5kcyA9ICRyZWMtPmRlcGVuZHM7CiAgICAgICAgICAgIGlmKCAhaXNfYXJyYXkoJGRlcGVuZHMpICkgJGRlcGVuZHMgPSBleHBsb2RlKCcsJywkZGVwZW5kcyk7CiAgICAgICAgICAgIGZvcmVhY2goICRkZXBlbmRzIGFzICRkZXBlbmRlbmN5ICkgewogICAgICAgICAgICAgICAgJGRlcCA9ICR0aGlzLT5fZmluZF9saWIoJGRlcGVuZGVuY3kpOwogICAgICAgICAgICAgICAgaWYoICEkZGVwICkgdGhyb3cgbmV3IFxFeGNlcHRpb24oJ01pc3NpbmcganMgZGVwZW5kZW5jeTogJy4kZGVwZW5kZW5jeSk7CiAgICAgICAgICAgICAgICAkdGhpcy0+X3Jlc29sdmVfZGVwZW5kZW5jaWVzKCRkZXAsJG91dCwkZXhjbHVkZXMpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBub3cgaGFuZGxlIHRoaXMgaXRlbS4KICAgICAgICAkc2lnID0gbWQ1KCR0aGlzLT5fa2V5LHNlcmlhbGl6ZSgkcmVjKSk7CiAgICAgICAgaWYoICFpc3NldCgkb3V0WyRzaWddKSApICRvdXRbJHNpZ10gPSAkcmVjOwogICAgfQoKICAgIC8qKgogICAgICogUmVuZGVyIHRoZSBvdXRwdXQgamF2YXNjcmlwdCBhbmQgc3R5bGVzaGVldHMgaW50byBjYWNoYWJsZSBmaWxlcyBhbmQgb3V0cHV0IHRoZSBhcHByb3ByaWF0ZSBIVE1MIHRhZ3MuCiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGFkZHMgYXBwcm9wcmlhdGUgaG9vayBoYW5kbGVycyB0byBwcm9jZXNzIHRoZSByZW5kZXJpbmcgb2YgY3NzIGFuZCBqcyB0YWdzIGR1cmluZyB0aGUgZmluYWwgcHJvY2VzcyBvZiBIVE1MIHJlbmRlcmluZwogICAgICogdGhpcyByZW1vdmVzIGFsbCBwcm9ibGVtcyB3aXRoIHNtYXJ0eSBwcm9jZXNzaW5nIG9yZGVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdHMgT3B0aW9ucyBmb3IgdGhpcyBtZXRob2QgKGZvciBmdXJ0aGVyIHJlZmVyZW5jZSwgc2VlIHRoZSB7eHRqc19yZW5kZXJ9IHNtYXJ0eSB0YWcuCiAgICAgKiBAcmV0dXJuIHN0cmluZyBIVE1MIG91dHB1dCBjb2RlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVuZGVyKGFycmF5ICRvcHRzID0gbnVsbCkKICAgIHsKICAgICAgICAvLyBhZGQgYSBwb3N0cmVuZGVyIGhvb2sgZm9yIGZyb250ZW5kIHJlcXVlc3RzCiAgICAgICAgc3RhdGljICRfaG9va19hZGRlZDsKICAgICAgICBpZiggY21zbXMoKS0+aXNfZnJvbnRlbmRfcmVxdWVzdCgpICkgewogICAgICAgICAgICAkc2lnID0gc2hhMSgkdGhpcy0+X2tleS5zZWxmOjokX2luc3RhbmNlX2NudC5zZXJpYWxpemUoJG9wdHMpLnJhbmQoKS50aW1lKCkpOwogICAgICAgICAgICAkdGhpcy0+X3JlbmRlcl9vcHRzWyRzaWddID0gJG9wdHM7CiAgICAgICAgICAgIGlmKCAhJF9ob29rX2FkZGVkICkgewogICAgICAgICAgICAgICAgSG9va01hbmFnZXI6OmFkZF9ob29rKCdDb3JlOjpDb250ZW50UG9zdFJlbmRlcicsWyR0aGlzLCAnX2Zyb250ZW5kUHJvY2Vzc29yJ10sIEhvb2tNYW5hZ2VyOjpQUklPUklUWV9OT1JNQUwpOwogICAgICAgICAgICAgICAgJF9ob29rX2FkZGVkKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHJlbmRlcl9zdHIgPSAiPCEtLSBqc2xvYWRlcl9yZW5kZXI6eyRzaWd9IC0tPiI7CiAgICAgICAgICAgIHJldHVybiAkcmVuZGVyX3N0cjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5fYWRtaW5fcmVuZGVyX29wdHMgPSAkb3B0czsKICAgICAgICAgICAgaWYoICEkX2hvb2tfYWRkZWQgKSB7CiAgICAgICAgICAgICAgICBIb29rTWFuYWdlcjo6YWRkX2hvb2soJ2FkbWluX2FkZF9oZWFkdGV4dCcsWyR0aGlzLCAnX2FkbWluUHJvY2Vzc29yJ10sIEhvb2tNYW5hZ2VyOjpQUklPUklUWV9OT1JNQUwpOwogICAgICAgICAgICAgICAgJF9ob29rX2FkZGVkKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gX2Zyb250ZW5kUHJvY2Vzc29yKCRwYXJtcykKICB7CiAgICBpZihlbXB0eSgkdGhpcy0+X3JlbmRlcl9vcHRzKSkgeyByZXR1cm47IH0KICAgIAogICAgZm9yZWFjaCgkdGhpcy0+X3JlbmRlcl9vcHRzIGFzICRzaWcgPT4gJG9wdHMpCiAgICB7CiAgICAgICRyZW5kZXJfc3RyICAgICAgID0gIjwhLS0ganNsb2FkZXJfcmVuZGVyOnskc2lnfSAtLT4iOwogICAgICAkb3V0X2h0bWwgICAgICAgICA9IChzdHJpbmcpJHRoaXMtPmRvX3JlbmRlcigkb3B0cyk7CiAgICAgICRwYXJtc1snY29udGVudCddID0gXHN0cl9yZXBsYWNlKCRyZW5kZXJfc3RyLCAkb3V0X2h0bWwsICRwYXJtc1snY29udGVudCddKTsKICAgIH0KICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfYWRtaW5Qcm9jZXNzb3IoKQogICAgewogICAgICAgIC8vIHRoaXMgaXMgYW4gYWNjdW11bGF0ZSBob29rCiAgICAgICAgcmV0dXJuICR0aGlzLT5kb19yZW5kZXIoJHRoaXMtPl9hZG1pbl9yZW5kZXJfb3B0cyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBkb19yZW5kZXIoJG9wdHMpCiAgICB7CiAgICAgIGlmKDAgPT0gXGNvdW50KCR0aGlzLT5fcmxpYnMpICYmIDAgPT0gXGNvdW50KCR0aGlzLT5fcmVxdWlyZWQpKSB7IHJldHVybiAnJzsgfSAvLyBub3RoaW5nIHRvIGRvLgogICAgICAKICAgICAgLy8gYWRkIGFuIGFkbWluX2FkZF9mb290ZXJ0ZXh0IGhvb2sgaGFuZGxlciBmb3IgYWRtaW4gcmVxdWVzdHMKICAgICAgLy8gcHJvY2VzcyBvcHRpb25zCiAgICAgICRvcHRpb25zICAgICAgICAgICAgID0gW107CiAgICAgICRvcHRpb25zWydleGNsdWRlcyddID0gW107CiAgICAgIGlmKCFjbXNtcygpLT5pc19mcm9udGVuZF9yZXF1ZXN0KCkpCiAgICAgIHsKICAgICAgICAvLyB0aGUgY21zbXMgYWRtaW4gY29uc29sZSBpbmNsdWRlcyB2ZXJzaW9ucyBvZiB0aGVzZS4KICAgICAgICAkZXhjbHVkZXMgICA9IFtdOwogICAgICAgICRleGNsdWRlc1tdID0gJ2pxdWVyeSc7CiAgICAgICAgJGV4Y2x1ZGVzW10gPSAndWknOwogICAgICAgIGlmKFx2ZXJzaW9uX2NvbXBhcmUoQ01TX1ZFUlNJT04sICcyLjEuOTknKSA8IDApICRleGNsdWRlc1tdID0gJ2ZpbGV1cGxvYWQnOwogICAgICAgICRvcHRpb25zWydleGNsdWRlcyddID0gJGV4Y2x1ZGVzOwogICAgICB9CiAgCiAgICAgIGlmKFxpc19hcnJheSgkb3B0cykpCiAgICAgIHsKICAgICAgICAkb3B0aW9ucyA9IFxhcnJheV9tZXJnZV9yZWN1cnNpdmUoJG9wdGlvbnMsICRvcHRzKTsKICAgICAgfQogICAgICAKICAgICAgaWYoaXNzZXQoJG9wdGlvbnNbJ25vX2pxdWVyeSddKSAmJiAhXGluX2FycmF5KCdqcXVlcnknLCAkb3B0aW9uc1snZXhjbHVkZXMnXSkpCiAgICAgIHsKICAgICAgICAkb3B0aW9uc1snZXhjbHVkZXMnXVtdID0gJ2pxdWVyeSc7CiAgICAgIH0KICAKICAgICAgaWYoaXNzZXQoJG9wdGlvbnNbJ2V4Y2x1ZGVzJ10pICYmIFxjb3VudCgkb3B0aW9uc1snZXhjbHVkZXMnXSkpCiAgICAgIHsKICAgICAgICAvLyBjbGVhbiB1cCB0aGUgZXhjbHVkZXMKICAgICAgICAkb3V0ID0gW107CiAgICAgICAgCiAgICAgICAgZm9yZWFjaCgkb3B0aW9uc1snZXhjbHVkZXMnXSBhcyAmJHN0cikKICAgICAgICB7CiAgICAgICAgICAkc3RyID0gXHN0cnRvbG93ZXIoXHRyaW0oJHN0cikpOwogICAgICAgICAgaWYoISRzdHIpeyBjb250aW51ZTsgfQogICAgICAgICAgaWYoIVxpbl9hcnJheSgkc3RyLCAkb3V0KSkgeyAkb3V0W10gPSAkc3RyOyB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRvcHRpb25zWydleGNsdWRlcyddID0gJG91dDsKICAgICAgfQogIAogICAgICAkb3B0aW9uc1snbGFuZyddID0gXENtc05sc09wZXJhdGlvbnM6OmdldF9jdXJyZW50X2xhbmd1YWdlKCk7CiAgCiAgICAgIC8vIGV4cGFuZCBzb21lIG9wdGlvbnMgdG8gc2ltcGxlIHZhcmlhYmxlcy4KICAgICAgJGNhY2hlX2xpZmV0aW1lID0gKGlzc2V0KCRvcHRpb25zWydjYWNoZV9saWZldGltZSddKSkgPyAoaW50KSRvcHRpb25zWydjYWNoZV9saWZldGltZSddIDogMjQ7CiAgICAgICR0bXAgICAgICAgICAgICA9IChpbnQpeHRfdXRpbHM6OmdldF9wYXJhbSgkdGhpcy0+X2NvbmZpZywgJ3h0anNfY2FjaGVsaWZlJykgKiAzNjAwOwogICAgICAKICAgICAgaWYoJHRtcCkgeyAkY2FjaGVfbGlmZXRpbWUgPSAkdG1wOyB9CiAgICAgIAogICAgICAkY29uZiA9ICR0aGlzLT5fY29uZmlnOwogIAogICAgICAkY2FjaGVfbGlmZXRpbWUgPSBcbWF4KCRjYWNoZV9saWZldGltZSwgMCk7CiAgICAgICRub2NhY2hlICAgICAgICA9IGlzc2V0KCRvcHRpb25zWydub19jYWNoZSddKTsKICAgICAgJG5vY2FjaGUgICAgICAgID0geHRfdXRpbHM6OmdldF9wYXJhbSgkdGhpcy0+X2NvbmZpZywgJ3h0anNfbm9jYWNoZScsICRub2NhY2hlKTsKICAgICAgJG5vbWluaWZ5ICAgICAgID0gKGlzc2V0KCRvcHRpb25zWydub21pbmlmeSddKSkgPyBUUlVFIDogRkFMU0U7ICAvLyBvdmVycmlkZXMgYW55dGhpbmcgaW4gbGlicy4KICAgICAgJG5vbWluaWZ5ICAgICAgID0geHRfdXRpbHM6OmdldF9wYXJhbSgkdGhpcy0+X2NvbmZpZywgJ3h0anNfbm9taW5pZnknLCAkbm9taW5pZnkpOwogICAgICAkbm9jc3NzbWFydHkgPSAoaXNzZXQoJG9wdGlvbnNbJ25vY3Nzc21hcnR5J10pIHx8ICRub21pbmlmeSkgPyBUUlVFIDogJG5vY2FjaGU7CiAgICAgICRhZGRrZXkgPSB4dF91dGlsczo6Z2V0X3BhcmFtKCRvcHRpb25zLCAnYWRka2V5Jyk7CiAgICAgICRkb19qcyA9ICFpc3NldCgkb3B0aW9uc1snbm9fanMnXSk7CiAgICAgICRkb19jc3MgPSAhaXNzZXQoJG9wdGlvbnNbJ25vX2NzcyddKTsKICAgICAgCiAgICAgIGlmKCRjb25mWyd4dF9kZWZlcl9qcyddIHx8ICRvcHRzWydkZWZlcl9qcyddKQogICAgICB7CiAgICAgICAgJGpzX2ZtdCA9ICc8c2NyaXB0IGRlZmVyIHNyYz0iJXMiPjwvc2NyaXB0Pic7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgJGpzX2ZtdCA9ICc8c2NyaXB0IHNyYz0iJXMiPjwvc2NyaXB0Pic7CiAgICAgIH0KICAKICAgICAgaWYoJGNvbmZbJ3h0X3ByZWxvYWRfY3NzJ10pCiAgICAgIHsKICAgICAgICAkY3NzX3ByZWxvYWQgPSAnPGxpbmsgcmVsPSJwcmVsb2FkIiBocmVmPSIlcyIgYXM9InN0eWxlIj4nOwogICAgICB9CiAgICAgIAogICAgICAkY3NzX2ZtdCA9ICc8bGluayB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIlcyIvPic7CiAgICAgIAogICAgICBpZiggJG5vY2FjaGUgKSAkbm9taW5pZnkgPSB0cnVlOwogICAgICAgIGlmKCAhJG5vbWluaWZ5ICkgcmVxdWlyZV9vbmNlKFxkaXJuYW1lKF9fRElSX18pIC4gJy9qc21pbi5waHAnKTsKCiAgICAgICAgJGdldF9yZWxhdGl2ZV91cmwgPSBmdW5jdGlvbigkZmlsZW5hbWUpIHsKICAgICAgICAgICAgLy8gY29udmVydHMgYSBmaWxlbmFtZSBpbnRvIGEgcHJvdG9jb2wgcmVsYXRpdmUgVVJMIChwYXRoIG9ubHksIG5vIGZpbGVuYW1lKQogICAgICAgICAgICAkcmVsYXRpdmVfdXJsID0gJyc7CiAgICAgICAgICAgIGlmKCBzdGFydHN3aXRoKCRmaWxlbmFtZSxDTVNfUk9PVF9QQVRIKSApIHsKICAgICAgICAgICAgICAgICRyZWxhdGl2ZV91cmwgPSBcc3RyX3JlcGxhY2UoQ01TX1JPT1RfUEFUSCwgQ01TX1JPT1RfVVJMLCBcZGlybmFtZSgkZmlsZW5hbWUpKTsKICAgICAgICAgICAgICAgIGlmKCAhZW5kc3dpdGgoJHJlbGF0aXZlX3VybCwnLycpICkgJHJlbGF0aXZlX3VybCAuPSAnLyc7CiAgICAgICAgICAgICAgICBpZiggc3RhcnRzd2l0aCgkcmVsYXRpdmVfdXJsLCdodHRwOicpICkgJHJlbGF0aXZlX3VybCA9IFxzdWJzdHIoJHJlbGF0aXZlX3VybCwgNSk7CiAgICAgICAgICAgICAgICBpZiggc3RhcnRzd2l0aCgkcmVsYXRpdmVfdXJsLCdodHRwczonKSApICRyZWxhdGl2ZV91cmwgPSBcc3Vic3RyKCRyZWxhdGl2ZV91cmwsIDYpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAkcmVsYXRpdmVfdXJsOwogICAgICAgIH07CgogICAgICAgICRmaXhfY3NzX3VybHMgPSBmdW5jdGlvbigkY3NzLCR1cmxfcHJlZml4KSB7CiAgICAgICAgICAgIC8vIHRoaXMgZml4ZXMgcmVsYXRpdmUgVVJMUyBpbiBDU1MgdXJsIHN0YXRlbWVudHMgdG8gcHJlcGVuZCBhIHByZWZpeAogICAgICAgICAgICAkY3NzX3NlYXJjaCA9ICcjdXJsXChccypbXCciXT8oLio/KVtcJyJdP1xzKlwpIyc7CiAgICAgICAgICAgICRjc3NfdXJsX2ZpeCA9IGZ1bmN0aW9uKCRtYXRjaGVzKSB1c2UgKCR1cmxfcHJlZml4KSB7CiAgICAgICAgICAgICAgICBpZiggc3RhcnRzd2l0aCgkbWF0Y2hlc1sxXSwnZGF0YTonKSApIHJldHVybiAkbWF0Y2hlc1swXTsKICAgICAgICAgICAgICAgIGlmKCBzdGFydHN3aXRoKCRtYXRjaGVzWzFdLCdodHRwOicpICkgcmV0dXJuICRtYXRjaGVzWzBdOwogICAgICAgICAgICAgICAgaWYoIHN0YXJ0c3dpdGgoJG1hdGNoZXNbMV0sJ2h0dHBzOicpICkgcmV0dXJuICRtYXRjaGVzWzBdOwogICAgICAgICAgICAgICAgaWYoIHN0YXJ0c3dpdGgoJG1hdGNoZXNbMV0sJy8vJykgKSByZXR1cm4gJG1hdGNoZXNbMF07CiAgICAgICAgICAgICAgICAvLyRzdHIgPSBzdWJzdHIoJG1hdGNoZXNbMV0sMCwtMSk7CiAgICAgICAgICAgICAgICAkc3RyID0gJG1hdGNoZXNbMV07CiAgICAgICAgICAgICAgICByZXR1cm4gInVybCgneyR1cmxfcHJlZml4fXskc3RyfScpIjsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgJG91dCA9IFxwcmVnX3JlcGxhY2VfY2FsbGJhY2soJGNzc19zZWFyY2gsICRjc3NfdXJsX2ZpeCwgJGNzcyk7CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gJG91dDsKICAgICAgICB9OwoKICAgICAgICAkZ2V0X2NvZGUgPSBmdW5jdGlvbigkcmVjLCR0eXBlKSB1c2UgKCYkZ2V0X3JlbGF0aXZlX3VybCwmJGZpeF9jc3NfdXJscykgewogICAgICAgICAgJHRtcCA9ICcnOwogICAgICAgICAgICBpZignanMnID09PSAkdHlwZSkgewogICAgICAgICAgICAgICAgJGpzID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKCBpc3NldCgkcmVjLT5qc2ZpbGUpICkgewogICAgICAgICAgICAgICAgICAgICRqc2ZpbGUgPSAkcmVjLT5qc2ZpbGU7CiAgICAgICAgICAgICAgICAgICAgaWYoICFcaXNfYXJyYXkoJGpzZmlsZSkgKSAkanNmaWxlID0gWyRqc2ZpbGVdOwogICAgICAgICAgICAgICAgICAgICRqcyA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCggJGpzZmlsZSBhcyAkb25lX2ZpbGUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRvbmVfZmlsZSA9ICR0aGlzLT5fZXhwYW5kX2ZpbGVuYW1lKCRvbmVfZmlsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRqcyAuPSAiXG4vKiBqc2xvYWRlciAvLyBqYXZhc2NyaXB0IGZpbGUgJG9uZV9maWxlICovXG4iOwogICAgICAgICAgICAgICAgICAgICAgICBpZiggXGlzX2ZpbGUoJG9uZV9maWxlKSApICRqcyAuPSBAXGZpbGVfZ2V0X2NvbnRlbnRzKCRvbmVfZmlsZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiggaXNzZXQoJHJlYy0+anN1cmwpICkgewogICAgICAgICAgICAgICAgICAgIC8vIGNhY2hlIHRoaXMgZm9yIGF0IGxlYXN0IDI0IGhvdXJzCiAgICAgICAgICAgICAgICAgICAgaWYoIHN0YXJ0c3dpdGgoJHJlYy0+anN1cmwsQ01TX1JPT1RfVVJMKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGZuID0gXHN0cl9yZXBsYWNlKENNU19ST09UX1VSTCwgQ01TX1JPT1RfUEFUSCwgJHJlYy0+anN1cmwpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiggXGlzX2ZpbGUoJGZuKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAhZW5kc3dpdGgoJGpzLCJcbiIpICkgJGpzIC49ICJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkanMgLj0gIi8qIGpzbG9hZGVyIC8vIGphdmFzY3JpcHQgbG9jYWwgZmlsZSBmcm9tIHVybCB7JGZufSAqL1xuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRqcyAuPSBcZmlsZV9nZXRfY29udGVudHMoJGZuKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjcmYgPSBuZXcgXHh0X2NhY2hlZF9yZW1vdGVfZmlsZSgkcmVjLT5qc3VybCw0OCo2MCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAkY3JmLT5zaXplKCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggIWVuZHN3aXRoKCRqcywiXG4iKSApICRqcyAuPSAiXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGpzIC49ICIvKiBqc2xvYWRlciAvLyBqYXZhc2NyaXB0IHJlbW90ZSB7JHJlYy0+anN1cmx9ICovXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGpzIC49ICRjcmYtPmZpbGVfZ2V0X2NvbnRlbnRzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmKCBpc3NldCgkcmVjLT5jb2RlKSApIHsKICAgICAgICAgICAgICAgICAgICAkanMgLj0gIi8qIGpzbG9hZGVyIC8vIGphdmFzY3JpcHQgaW5saW5lIGNvZGUgKi9cbiI7CiAgICAgICAgICAgICAgICAgICAgJGpzIC49ICRyZWMtPmNvZGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJGpzOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgLy8gY3NzCiAgICAgICAgICAgICAgICAkY3NzID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmKCBpc3NldCgkcmVjLT5jc3NmaWxlKSApIHsKICAgICAgICAgICAgICAgICAgICAkY3NzZmlsZSA9ICRyZWMtPmNzc2ZpbGU7CiAgICAgICAgICAgICAgICAgICAgaWYoICFcaXNfYXJyYXkoJGNzc2ZpbGUpICkgJGNzc2ZpbGUgPSBbJGNzc2ZpbGVdOwogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goICRjc3NmaWxlIGFzICRvbmVfZmlsZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG9uZV9maWxlID0gJHRoaXMtPl9leHBhbmRfZmlsZW5hbWUoJG9uZV9maWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHRtcCA9IFxmaWxlX2dldF9jb250ZW50cygkb25lX2ZpbGUpOwogICAgICAgICAgICAgICAgICAgICAgICAkY3NzIC49ICJcbi8qIGpzbG9hZGVyLy9jc3MgZmlsZTogJG9uZV9maWxlICovXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAkcmVsYXRpdmVfdXJsID0gJGdldF9yZWxhdGl2ZV91cmwoJG9uZV9maWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHRtcCA9ICRmaXhfY3NzX3VybHMoJHRtcCwkcmVsYXRpdmVfdXJsKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNzcyAuPSAkdG1wOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYoIGlzc2V0KCRyZWMtPmNzc25hbWUpICkgewogICAgICAgICAgICAgICAgICAgIGlmKFx2ZXJzaW9uX2NvbXBhcmUoQ01TX1ZFUlNJT04sICcxLjk5LWFscGhhMCcpIDwgMCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCBjc3NfaWQsIGNzc19uYW1lLCBjc3NfdGV4dCBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidjc3MgV0hFUkUgY3NzX25hbWUgPSA/JzsKICAgICAgICAgICAgICAgICAgICAgICAgJGRiID0gQ21zQXBwOjpnZXRfaW5zdGFuY2UoKS0+R2V0RGIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHJvdyA9ICRkYi0+R2V0Um93KCRxdWVyeSxhcnJheSgkcmVjLT5jc3NuYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAhXGlzX2FycmF5KCRyb3cpICkgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAkY3NzID0gXHRyaW0oJHJvd1snY3NzX3RleHQnXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkY3NzID0gXENtc0xheW91dFN0eWxlc2hlZXQ6OmxvYWQoJHJlYy0+Y3NzbmFtZSktPmdldF9jb250ZW50KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiggaXNzZXQoJHJlYy0+Y3NzdXJsKSApIHsKICAgICAgICAgICAgICAgICAgICBpZiggc3RhcnRzd2l0aCgkcmVjLT5jc3N1cmwsQ01TX1JPT1RfVVJMKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGZuID0gXHN0cl9yZXBsYWNlKENNU19ST09UX1VSTCwgQ01TX1JPT1RfUEFUSCwgJHJlYy0+Y3NzdXJsKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIFxpc19maWxlKCRmbikgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVsYXRpdmVfdXJsID0gJGdldF9yZWxhdGl2ZV91cmwoJGZuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0bXAgLj0gXGZpbGVfZ2V0X2NvbnRlbnRzKCRmbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG1wID0gJGZpeF9jc3NfdXJscygkdG1wLCRyZWxhdGl2ZV91cmwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICFlbmRzd2l0aCgkY3NzLCJcbiIpICkgJGNzcyAuPSAiXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNzcyAuPSAiLyoganNsb2FkZXIgLy9jc3MgbG9jYWwgZmlsZSBmcm9tIHVybCB7JGZufSAqL1xuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjc3MgLj0gJHRtcDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjcmYgPSBuZXcgXHh0X2NhY2hlZF9yZW1vdGVfZmlsZSgkcmVjLT5jc3N1cmwsNDgqNjApOwogICAgICAgICAgICAgICAgICAgICAgICBpZiggJGNyZi0+c2l6ZSgpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICFlbmRzd2l0aCgkY3NzLCJcbiIpICkgJGNzcyAuPSAiXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNzcyAuPSAiLyoganNsb2FkZXIvL2NzcyByZW1vdGUgeyRyZWMtPmNzc3VybH0gKi9cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY3NzIC49ICRjcmYtPmZpbGVfZ2V0X2NvbnRlbnRzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmKCBpc3NldCgkcmVjLT5zdHlsZXMpICkgewogICAgICAgICAgICAgICAgICAgICRjc3MgLj0gIi8qIGpzbG9hZGVyLy9jc3MgaW5saW5lIGNvZGUgKi9cbiI7CiAgICAgICAgICAgICAgICAgICAgJGNzcyAuPSAkcmVjLT5zdHlsZXM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJGNzczsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgICRnZXRfbWluaWZpZWRfY29kZSA9IGZ1bmN0aW9uKCRyZWMsJHR5cGUpIHVzZSAoJiRnZXRfY29kZSkgewogICAgICAgICAgICAvKiBjaGVjayBmb3IgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGlzIGNvZGUgKi8KICAgICAgICAgICAgJGZuID0gUFVCTElDX0NBQ0hFX0xPQ0FUSU9OLicveHRqc18nIC4gXG1kNShfX0ZJTEVfXyAuIFxzZXJpYWxpemUoJHJlYykgLiAkdHlwZSkgLiAnLmNhY2hlJzsKICAgICAgICAgICAgaWYoIFxpc19maWxlKCRmbikgKSByZXR1cm4gXGZpbGVfZ2V0X2NvbnRlbnRzKCRmbik7CgogICAgICAgICAgICAvLyBub3QgaW4gY2FjaGUKICAgICAgICAgICAgLy8gY2FsY3VsYXRlIGEgcHJlZml4IHRvIGdvIG9uIHRvcCBvZiB0aGUgY2FjaGUgZmlsZSwgYW5kIHRlc3QgaWYgd2UgYXJlIHJlYWxseSBtaW5pZnlpbmcKICAgICAgICAgICRwcmVmaXggICAgPSBOVUxMOwogICAgICAgICAgJGNvZGUgICAgICA9IG51bGw7CiAgICAgICAgICAkZG9fbWluaWZ5ID0gVFJVRTsKICAgICAgICAgIAogICAgICAgICAgICBpZignanMnID09PSAkdHlwZSkgewogICAgICAgICAgICAgICAgaWYoIGlzc2V0KCRyZWMtPmpzX25vbWluaWZ5KSAmJiAkcmVjLT5qc19ub21pbmlmeSApICRkb19taW5pZnkgPSBGQUxTRTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYoICRkb19taW5pZnkgJiYgaXNzZXQoJHJlYy0+anNmaWxlKSApIHsKICAgICAgICAgICAgICAgICAgICAkanNmaWxlID0gJHJlYy0+anNmaWxlOwogICAgICAgICAgICAgICAgICAgIGlmKCAhXGlzX2FycmF5KCRqc2ZpbGUpICkgJGpzZmlsZSA9IGFycmF5KCRqc2ZpbGUpOwogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCAkanNmaWxlIGFzICRvbmUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBzdHJwb3MoJG9uZSwnLm1pbicpICE9PSBGQUxTRSB8fCBzdHJwb3MoJG9uZSwnLnBhY2snKSAhPT0gRkFMU0UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZG9fbWluaWZ5ID0gRkFMU0U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKCAkZG9fbWluaWZ5ICYmIGlzc2V0KCRyZWMtPmpzdXJsKSApIHsKICAgICAgICAgICAgICAgICAgICBpZiggc3RycG9zKCRyZWMtPmpzdXJsLCcubWluJykgIT09IEZBTFNFIHx8IHN0cnBvcygkcmVjLT5qc3VybCwnLnBhY2snKSAhPT0gRkFMU0UgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRkb19taW5pZnkgPSBGQUxTRTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHByZWZpeCA9ICIvKiBqc2xvYWRlciAvLyBjYWNoZWQgamF2YXNjcmlwdCAvLyAiOwogICAgICAgICAgICAgICAgaWYoIGlzc2V0KCRyZWMtPm5hbWUpICkgewogICAgICAgICAgICAgICAgICAgICRwcmVmaXggLj0gJHJlYy0+bmFtZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYoIGlzc2V0KCRyZWMtPmpzZmlsZSkgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoIGlzX3N0cmluZygkcmVjLT5qc2ZpbGUpICkgewogICAgICAgICAgICAgICAgICAgICAgICAkcHJlZml4IC49ICRyZWMtPmpzZmlsZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkcHJlZml4IC49ICRyZWMtPmpzZmlsZVswXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmKCBpc3NldCgkcmVjLT5jb2RlKSApIHsKICAgICAgICAgICAgICAgICAgICAkcHJlZml4IC49ICdpbmxpbmUgY29kZSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkcHJlZml4IC49ICIgKi9cbiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBDU1MKICAgICAgICAgICAgICAgIGlmKCBpc3NldCgkcmVjLT5jc3Nfbm9taW5pZnkpICYmICRyZWMtPmNzc19ub21pbmlmeSApICRkb19taW5pZnkgPSBGQUxTRTsKICAgICAgICAgICAgICAgIGlmKCAkZG9fbWluaWZ5ICYmIGlzc2V0KCRyZWMtPmNzc2ZpbGUpICkgewogICAgICAgICAgICAgICAgICAgICRjc3NmaWxlID0gJHJlYy0+Y3NzZmlsZTsKICAgICAgICAgICAgICAgICAgICBpZiggIWlzX2FycmF5KCRjc3NmaWxlKSApICRjc3NmaWxlID0gYXJyYXkoJGNzc2ZpbGUpOwogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCAkY3NzZmlsZSBhcyAkb25lICkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiggc3RycG9zKCRvbmUsJy5taW4nKSAhPT0gRkFMU0UgfHwgc3RycG9zKCRvbmUsJy5wYWNrJykgIT09IEZBTFNFICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRvX21pbmlmeSA9IEZBTFNFOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiggJGRvX21pbmlmeSAmJiBpc3NldCgkcmVjLT5jc3N1cmwpICkgewogICAgICAgICAgICAgICAgICAgIGlmKCBzdHJwb3MoJHJlYy0+Y3NzdXJsLCcubWluJykgIT09IEZBTFNFIHx8IHN0cnBvcygkcmVjLT5jc3N1cmwsJy5wYWNrJykgIT09IEZBTFNFICkgewogICAgICAgICAgICAgICAgICAgICAgICAkZG9fbWluaWZ5ID0gRkFMU0U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRwcmVmaXggPSAiLyoganNsb2FkZXIgLy8gY2FjaGVkIGNzcyAvLyAiOwogICAgICAgICAgICAgICAgaWYoIGlzc2V0KCRyZWMtPm5hbWUpICkgewogICAgICAgICAgICAgICAgICAgICRwcmVmaXggLj0gJHJlYy0+bmFtZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYoIGlzc2V0KCRyZWMtPmNzc2ZpbGUpICkgewogICAgICAgICAgICAgICAgICAgIGlmKCBpc19zdHJpbmcoJHJlYy0+Y3NzZmlsZSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwcmVmaXggLj0gJHJlYy0+Y3NzZmlsZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkcHJlZml4IC49ICRyZWMtPmNzc2ZpbGVbMF07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHByZWZpeCAuPSAnaW5saW5lIGNvZGUnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHByZWZpeCAuPSAiICovXG4iOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBnZXQgdGhlIGNvZGUuCiAgICAgICAgICAgICRjb2RlID0gJGdldF9jb2RlKCRyZWMsJHR5cGUpOwogICAgICAgICAgICBpZiggJGNvZGUgKSB7CiAgICAgICAgICAgICAgICAvLyBnb3QgY29kZS4uLiBhcmUgd2UgbWluaWZ5aW5nIGFuZCBjYWNoaW5nIGl0PwogICAgICAgICAgICAgICAgaWYoICRkb19taW5pZnkgKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvZGUgPSBcSlNNaW46Om1pbmlmeSgkY29kZSk7CiAgICAgICAgICAgICAgICAgICAgJGNvZGUgPSAkcHJlZml4LiRjb2RlOwogICAgICAgICAgICAgICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRmbiwkY29kZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJGNvZGU7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICAvLyBkZXRlcm1pbmUgaWYgd2UgaGF2ZSB0byBwcm9jZXNzIGFsbCB0aGlzIGNydWZ0ICh3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBiZSB2ZXJ5IGV4cGVuc2l2ZSkKICAgICAgICAkc2lnICAgICAgICAgPSBcc2hhMSgkYWRka2V5IC4gJHRoaXMtPl9rZXkgLiBzZWxmOjokX2luc3RhbmNlX2NudCAuIHNlcmlhbGl6ZSgkdGhpcy0+X3JsaWJzKSAuIHNlcmlhbGl6ZSgkdGhpcy0+X3JlcXVpcmVkKSAuIHNlcmlhbGl6ZSgkb3B0aW9ucykgLiAkbm9jYWNoZSAuICRub21pbmlmeSAuICRjYWNoZV9saWZldGltZSk7CiAgICAgICAgJGNhY2hlX2pzICAgID0gUFVCTElDX0NBQ0hFX0xPQ0FUSU9OLiIveHRqc197JHNpZ30uanMiOwogICAgICAgICRjYWNoZV9jc3MgICA9IFBVQkxJQ19DQUNIRV9MT0NBVElPTi4iL3h0anNfeyRzaWd9LmNzcyI7CiAgICAgICRkb19jc3NfdGFnICAgID0gRkFMU0U7CiAgICAgICRkb19qc190YWcgICAgID0gRkFMU0U7CiAgICAgICRkb19jc3MyICAgICAgID0gRkFMU0U7CiAgICAgICRkb19qczIgICAgICAgID0gRkFMU0U7CiAgICAgICRkb19wcm9jZXNzaW5nID0gVFJVRTsKICAgICAgCiAgICAgICAgaWYoICRub2NhY2hlICkgewogICAgICAgICAgICAvLyBmb3JjZWQgdG8gcmVnZW5lcmF0ZS4KICAgICAgICAgICRkb19jc3MyID0gVFJVRTsKICAgICAgICAgICRkb19qczIgID0gVFJVRTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIC8vIHdlIGNhbiBjYWNoZSwgY2hlY2sgaWYgd2UgbmVlZCB0byByZWZyZXNoIHRoZSBjYWNoZSAqLwogICAgICAgICAgICAkZXRpbWUgPSBcdGltZSgpIC0gJGNhY2hlX2xpZmV0aW1lICogMzYwMDsKICAgICAgICAgICAgaWYoIFxpc19maWxlKCRjYWNoZV9qcykgKSB7CiAgICAgICAgICAgICAgICAkbXRpbWUxID0gQFxmaWxlbXRpbWUoJGNhY2hlX2pzKTsKICAgICAgICAgICAgICAgICRkb19qc190YWcgPSBUUlVFOwogICAgICAgICAgICAgICAgaWYoICRtdGltZTEgPCAkZXRpbWUgKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gY2FjaGUgdG9vIG9sbywgZm9yY2VkIHRvIHJlYnVpbGQKICAgICAgICAgICAgICAgICAgICAkZG9fanMyID0gVFJVRTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIG5vIGZpbGUsIGdvdHRhIHByb2Nlc3MuCiAgICAgICAgICAgICAgICAkZG9fanMyID0gVFJVRTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYoIFxpc19maWxlKCRjYWNoZV9jc3MpICkgewogICAgICAgICAgICAgICAgJG10aW1lMiA9IEBcZmlsZW10aW1lKCRjYWNoZV9jc3MpOwogICAgICAgICAgICAgICAgJGRvX2Nzc190YWcgPSBUUlVFOwogICAgICAgICAgICAgICAgaWYoICRtdGltZTIgPCAkZXRpbWUgKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gY2FjaGUgdG9vIG9sZCwgZm9yY2VkIHRvIHJlYnVpbGQKICAgICAgICAgICAgICAgICAgICAkZG9fY3NzMiA9IFRSVUU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBubyBmaWxlLCBnb3R0YSBwcm9jZXNzLgogICAgICAgICAgICAgICAgJGRvX2NzczIgPSBUUlVFOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiggJGRvX2pzMiB8fCAkZG9fY3NzMiApIHsKICAgICAgICAgICAgLy8gb2theSwgd2UgaGF2ZSB3b3JrIHRvIGRvLgogICAgICAgICAgICBpZihOVUxMID09PSAkdGhpcy0+X3Jlc29sdmVkKSB7CiAgICAgICAgICAgICAgICAvLyBub3cgZXhwYW5kIGFsbCBvdXIgZGVwZW5kZW5jaWVzLgogICAgICAgICAgICAgICAgJGxpc3RfMCA9IFtdOwogICAgICAgICAgICAgICAgJHJlcXVpcmVkID0gXGFycmF5X21lcmdlKCR0aGlzLT5fcmxpYnMsICR0aGlzLT5fZ2V0X3NvcnRlZF9yZXF1aXJlZCgpKTsKICAgICAgICAgICAgICAgIGZvcmVhY2goICRyZXF1aXJlZCBhcyAkcmVjICkgewogICAgICAgICAgICAgICAgICAgIGlmKCBpc3NldCgkcmVjLT5kZXBlbmRzKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9yZXNvbHZlX2RlcGVuZGVuY2llcygkcmVjLCRsaXN0XzAsJG9wdGlvbnNbJ2V4Y2x1ZGVzJ10pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkc2lnID0gXG1kNShcc2VyaWFsaXplKCRyZWMpKTsKICAgICAgICAgICAgICAgICAgICAkbGlzdF8wWyRzaWddID0gJHJlYzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gbm93IGNoZWNrIGZvciBjYWxsYmFjayBpdGVtcwogICAgICAgICAgICAgICAgLy8gYW5kIGdldCB0aGVpciBjb2RlLi4uIHRoaXMgbWF5IGJlIGFuIGV4cGVuc2l2ZSBwcm9jZXNzCiAgICAgICAgICAgICAgICAvLyBub3RlOiBtYXkgYWxzbyBoYXZlIGRlcGVuZGVuY2llcwogICAgICAgICAgICAgICAgJHRoaXMtPl9yZXNvbHZlZCA9IFtdOwogICAgICAgICAgICAgICAgZm9yZWFjaCggJGxpc3RfMCBhcyAkcmVjICkgewogICAgICAgICAgICAgICAgICAgIGlmKCBpc3NldCgkcmVjLT5jYWxsYmFjaykgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0bXAgPSBcY2FsbF91c2VyX2Z1bmMoJHJlYy0+Y2FsbGJhY2ssICRyZWMtPm5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICBpZihcaXNfb2JqZWN0KCR0bXApICYmIChpc3NldCgkdG1wLT5jb2RlKSB8fCBpc3NldCgkdG1wLT5zdHlsZXMpKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5fcmVzb2x2ZWRbXSA9ICR0bXA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5fcmVzb2x2ZWRbXSA9ICRyZWM7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdW5zZXQoJHJlcXVpcmVkLCRsaXN0XzApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLwogICAgICAgICAgICAvLyBwcm9jZXNzIGpzCiAgICAgICAgICAgIC8vCiAgICAgICAgICAgIGlmKCAkZG9fanMgJiYgJGRvX2pzMiAmJiAkdGhpcy0+X3Jlc29sdmVkICYmIFxjb3VudCgkdGhpcy0+X3Jlc29sdmVkKSApIHsKICAgICAgICAgICAgICAgICR0eHQgPSBudWxsOwogICAgICAgICAgICAgICAgZm9yZWFjaCggJHRoaXMtPl9yZXNvbHZlZCBhcyAkcmVjICkgewogICAgICAgICAgICAgICAgICAgIGlmKCAkbm9taW5pZnkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0eHQgLj0gJGdldF9jb2RlKCRyZWMsICdqcycpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0eHQgLj0gJGdldF9taW5pZmllZF9jb2RlKCRyZWMsICdqcycpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYoICR0eHQgKSB7CiAgICAgICAgICAgICAgICAgICAgJGRvX2pzX3RhZyA9IFRSVUU7CiAgICAgICAgICAgICAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJGNhY2hlX2pzLCR0eHQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLwogICAgICAgICAgICAvLyBwcm9jZXNzIGNzcwogICAgICAgICAgICAvLwogICAgICAgICAgICBpZiggJGRvX2NzcyAmJiAkZG9fY3NzMiAmJiAkdGhpcy0+X3Jlc29sdmVkICYmIGNvdW50KCR0aGlzLT5fcmVzb2x2ZWQpICkgewogICAgICAgICAgICAgICAgJHR4dCA9IG51bGw7CiAgICAgICAgICAgICAgICBmb3JlYWNoKCAkdGhpcy0+X3Jlc29sdmVkIGFzICRyZWMgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoICRub21pbmlmeSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHR4dCAuPSAkZ2V0X2NvZGUoJHJlYywnY3NzJyk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHR4dCAuPSAkZ2V0X21pbmlmaWVkX2NvZGUoJHJlYywnY3NzJyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmKCAkdHh0ICkgewogICAgICAgICAgICAgICAgICAgICRkb19jc3NfdGFnID0gVFJVRTsKICAgICAgICAgICAgICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkY2FjaGVfY3NzLCR0eHQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSAvLyBkb19jc3MKICAgICAgICB9IC8vIGRvIHByb2Nlc3NpbmcKCiAgICAgICAgLy8gZG8gdGhlIG91dHB1dC4KICAgICAgICBpZiggJG5vY2FjaGUgKSB7CiAgICAgICAgICAgICRjYWNoZV9qcyAuPSAnP190PScudGltZSgpOwogICAgICAgICAgICAkY2FjaGVfY3NzIC49ICc/X3Q9Jy50aW1lKCk7CiAgICAgICAgfQoKICAgICAgICAkb3V0ID0gbnVsbDsKICAgICAgICBpZiggJGRvX2pzX3RhZyApIHsKICAgICAgICAgICAgJGNhY2hlX3VybCA9IENNU19ST09UX1VSTC4nL3RtcC9jYWNoZS8nLmJhc2VuYW1lKCRjYWNoZV9qcyk7CiAgICAgICAgICAgICRvdXQgLj0gdHJpbShzcHJpbnRmKCRqc19mbXQsJGNhY2hlX3VybCkpLiJcbiI7CiAgICAgICAgfQoKICAgICAgICBpZiggJGRvX2Nzc190YWcgKQogICAgICAgIHsKICAgICAgICAgICRjYWNoZV91cmwgPSBDTVNfUk9PVF9VUkwuJy90bXAvY2FjaGUvJy5iYXNlbmFtZSgkY2FjaGVfY3NzKTsKICAgICAgICAgIAogICAgICAgICAgaWYoJGNvbmZbJ3h0X3ByZWxvYWRfY3NzJ10pCiAgICAgICAgICB7CiAgICAgICAgICAgICRvdXQgLj0gdHJpbShzcHJpbnRmKCRjc3NfcHJlbG9hZCwgJGNhY2hlX3VybCkpOwogICAgICAgICAgfQoKICAgICAgICAgICRvdXQgLj0gdHJpbShzcHJpbnRmKCRjc3NfZm10LCRjYWNoZV91cmwpKS4iXG4iOwoKICAgICAgICB9CgogICAgICAgIC8vIGFsbCBmcmVha2luZyBkb25lCiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9Cn0gLy8gY2xhc3MK]]></data>
	</file>
	<file>
	  <filename>/lib/jsloader/class.libdefn.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBjb250YWlucyBjbGFzc2VzIGZvciBkZWZpbmluZyBhIGphdmFzY3JpcHQgbGlicmFyeS4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IGpzbG9hZGVyCiAqIEBhdXRob3IgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTQgYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XGpzbG9hZGVyOwoKLyoqCiAqIEEgY2xhc3MgdG8gZGVmaW5lIGEgamF2YXNjcmlwdCBsaWJyYXJ5LgogKgogKiBAcHJvcGVydHkgc3RyaW5nICRuYW1lIFRoZSBsaWJyYXJ5IG5hbWUKICogQHByb3BlcnR5IGNhbGxhYmxlICRjYWxsYmFjayBBbiBvcHRpb25hbCBjYWxsYmFjayBvZiB0aGUgZm9ybSAgZnVuY3Rpb24oJG5hbWUpIHRvIHJldHVybiBqYXZhc2NyaXB0IGNvZGUuICBPbmx5IG9uZSBvZiB0aGUganNmaWxlLCBqc3VybCwgY2FsbGJhY2ssIG9yIG1vZHVsZSBwcm9wZXJ0aWVzIG11c3QgYmUgc3BlY2lmaWVkLgogKiBAcHJvcGVydHkgc3RyaW5nW10gJGRlcGVuZHMgQW4gYXJyYXkgb2YgbGlicmFyeSBuYW1lcyB0aGF0IHRoaXMgbGlicmFyeSBkZXBlbmRzIHVwb24uCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJGpzZmlsZSBUaGUgY29tcGxldGUgcGF0aG5hbWUgdG8gdGhlIGphdmFzY3JpcHQgZmlsZSBmb3IgdGhpcyBsaWJyYXJ5LiAgT25seSBvbmUgb2YgdGhlIGpzZmlsZSwganN1cmwsIGNhbGxiYWNrLCBvciBtb2R1bGUgcHJvcGVydGllcyBtdXN0IGJlIHNwZWNpZmllZC4KICogQHByb3BlcnR5IHN0cmluZyAkY3NzZmlsZSBUaGUgY29tcGxldGUgcGF0aG5hbWUgdG8gYSBjc3MgZmlsZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIGxpYmFyYXJ5CiAqIEBwcm9wZXJ0eSBzdHJpbmcgJGpzdXJsIEEgVVJMIHRvIGEgcmVtb3RlIGphdmFzY3JpcHQgbGlicmFyeS4gIE9ubHkgb25lIG9mIHRoZSBqc2ZpbGUsIGpzdXJsLCBjYWxsYmFjaywgb3IgbW9kdWxlIHByb3BlcnRpZXMgY2FuIGJlIHNwZWNpZmllZC4KICogQHByb3BlcnR5IHN0cmluZyAkY3NzdXJsIEEgY29tcGxldGUgVVJMIHRvIGEgcmVtb3RlIENTUyBsaWJyYXJ5LgogKiBAcHJvcGVydHkgc3RyaW5nICRtb2R1bGUgVGhlIG5hbWUgb2YgYSBtb2R1bGUgdG8gcXVlcnkgdG8gZ2V0IGphdmFzY3JpcHQgY29kZS4KICogQHByb3BlcnR5IGJvb2wgICAkanNfbm9taW5pZnkgUHJldmVudCBtaW5pZnlpbmcgb2YgdGhlIGxpYnJhcnkganMgY29kZS4KICogQHByb3BlcnR5IGJvb2wgICAkY3NzX25vbWluaWZ5IFByZXZlbnQgbWluaWZ5aW5nIG9mIHRoZSBsaWJyYXJ5IGNzcyBjb2RlLgogKi8KY2xhc3MgbGliZGVmbgp7CiAgLyoqCiAgICogQGlnbm9yZQogICAqLwogIHByaXZhdGUgJF9kYXRhID0gYXJyYXkoKTsKICAKICAvKioKICAgKiBDb25zdHJ1Y3RvcgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBvZiB0aGUgamF2YXNjcmlwdCBsaWJyYXJ5IHdlIGFyZSBkZWZpaW5nIChzaG91bGQgbm90IGNvbnRhaW4gc3BhY2VzIG9yIG90aGVyIGNoYXJhY3RlcnMgdGhhdCByZXF1aXJlIGVuY29kaW5nKQogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbmFtZSkKICB7CiAgICAkdGhpcy0+bmFtZSA9IHRyaW0oJG5hbWUpOwogIH0KICAKICAvKioKICAgKiBAaWdub3JlCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIF9fZ2V0KCRrZXkpCiAgewogICAgJGtleSA9IHN0cnRvbG93ZXIoJGtleSk7CiAgICBzd2l0Y2goICRrZXkgKSB7CiAgICAgIGNhc2UgJ25hbWUnOgogICAgICBjYXNlICdjYWxsYmFjayc6CiAgICAgIGNhc2UgJ2RlcGVuZHMnOgogICAgICBjYXNlICdqc2ZpbGUnOgogICAgICBjYXNlICdjc3NmaWxlJzoKICAgICAgY2FzZSAnanN1cmwnOgogICAgICBjYXNlICdjc3N1cmwnOgogICAgICBjYXNlICdtb2R1bGUnOgogICAgICBjYXNlICdqc19ub21pbmlmeSc6CiAgICAgIGNhc2UgJ2Nzc19ub21pbmlmeSc6CiAgICAgICAgaWYoIGlzc2V0KCR0aGlzLT5fZGF0YVska2V5XSkpIHJldHVybiAkdGhpcy0+X2RhdGFbJGtleV07CiAgICAgIGJyZWFrOwogICAgICAKICAgICAgY2FzZSAnbWluaWZ5X2pzJzoKICAgICAgICByZXR1cm4gISR0aGlzLT5qc19ub21pbmlmeTsKICAgICAgCiAgICAgIGNhc2UgJ21pbmlmeV9jc3MnOgogICAgICAgIHJldHVybiAhJHRoaXMtPmNzc19ub21pbmlmeTsKICAgICAgCiAgICAgIGRlZmF1bHQ6CiAgICAgICAgc3RhY2tfdHJhY2UoKTsgZGllKCk7CiAgICAgICAgdGhyb3cgbmV3IFxDbXNJbnZhbGlkRGF0YUV4Y2VwdGlvbigka2V5LicgaXMgbm90IGEgdmFsaWQgbWVtYmVyIG9mIGEgJy5fX0NMQVNTX18uJyBvYmplY3QnKTsKICAgIH0KICB9CiAgCiAgLyoqCiAgICogQGlnbm9yZQogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBfX2lzc2V0KCRrZXkpCiAgewogICAgJGtleSA9IHN0cnRvbG93ZXIoJGtleSk7CiAgICBzd2l0Y2goICRrZXkgKSB7CiAgICAgIGNhc2UgJ25hbWUnOgogICAgICBjYXNlICdjYWxsYmFjayc6CiAgICAgIGNhc2UgJ2RlcGVuZHMnOgogICAgICBjYXNlICdqc2ZpbGUnOgogICAgICBjYXNlICdjc3NmaWxlJzoKICAgICAgY2FzZSAnanN1cmwnOgogICAgICBjYXNlICdjc3N1cmwnOgogICAgICBjYXNlICdjb2RlJzoKICAgICAgY2FzZSAnY3NzbmFtZSc6CiAgICAgIGNhc2UgJ3N0eWxlcyc6CiAgICAgIGNhc2UgJ2xpYic6CiAgICAgIGNhc2UgJ21vZHVsZSc6CiAgICAgIGNhc2UgJ2pzX25vbWluaWZ5JzoKICAgICAgY2FzZSAnY3NzX25vbWluaWZ5JzoKICAgICAgICByZXR1cm4gaXNzZXQoJHRoaXMtPl9kYXRhWyRrZXldKTsKICAgICAgCiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IFxDbXNJbnZhbGlkRGF0YUV4Y2VwdGlvbigka2V5LicgaXMgbm90IGEgdmFsaWQgbWVtYmVyIG9mIGEgJy5fX0NMQVNTX18uJyBvYmplY3QnKTsKICAgIH0KICB9CiAgCiAgLyoqCiAgICogQGlnbm9yZQogICAqLwogIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIF9leHBhbmRfZmlsZW5hbWUoJGluKQogIHsKICAgICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKICAgIC8vJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwogICAgJGNvbmZpZyA9IFxDTVNNU0V4dFxjb25maWc6OkdldEluc3RhbmNlKCk7CiAgICAKICAgICRzbWFydHktPmFzc2lnbigncm9vdF91cmwnLCRjb25maWdbJ3Jvb3RfdXJsJ10pOwogICAgJHNtYXJ0eS0+YXNzaWduKCdyb290X3BhdGgnLCRjb25maWdbJ3Jvb3RfcGF0aCddKTsKICAgIHJldHVybiB0cmltKCRzbWFydHktPmZldGNoKCdzdHJpbmc6Jy4kaW4pKTsKICB9CiAgCiAgLyoqCiAgICogQGlnbm9yZQogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBfX3NldCgka2V5LCR2YWwpCiAgewogICAgJGtleSA9IHN0cnRvbG93ZXIoJGtleSk7CiAgICBzd2l0Y2goICRrZXkgKSB7CiAgICAgIGNhc2UgJ25hbWUnOgogICAgICAgICR2YWwgPSBzdHJ0b2xvd2VyKHRyaW0oJHZhbCkpOwogICAgICAgIGlmKCAhJHZhbCApIHRocm93IG5ldyBcQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJ25hbWUgY2Fubm90IGJlIGVtcHR5IGluIGEgJy5fX0NMQVNTX18uJyBvYmplY3QnKTsKICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSAkdmFsOwogICAgICBicmVhazsKICAgICAgCiAgICAgIGNhc2UgJ2NhbGxiYWNrJzoKICAgICAgICBpZiggaXNfc3RyaW5nKCR2YWwpKSAkdmFsID0gdHJpbSgkdmFsKTsKICAgICAgICBpZiggJHZhbCAmJiAhaXNfY2FsbGFibGUoJHZhbCkgKSB0aHJvdyBuZXcgXENtc0ludmFsaWREYXRhRXhjZXB0aW9uKCdjYWxsYmFjayBub3QgY2FsbGFibGUgZm9yIGEgJy5fX0NMQVNTX18uJyBvYmplY3QnKTsKICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSAkdmFsOwogICAgICBicmVhazsKICAgICAgCiAgICAgIGNhc2UgJ2Nzc2ZpbGUnOgogICAgICAgIGlmKCAhJHZhbCApIHRocm93IG5ldyBcQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJ2NzcyB2YWx1ZSBtdXN0IGJlIHZhbGlkLCBpZiBzcGVjaWZpZWQgZm9yIGEgJy5fX0NMQVNTX18uJyBvYmplY3QnKTsKICAgICAgICBpZiggIWlzX2FycmF5KCR2YWwpICkgJHZhbCA9IGFycmF5KCR2YWwpOwogICAgICAgIGZvcmVhY2goICR2YWwgYXMgJG9uZSApIHsKICAgICAgICAgICRvbmUgPSBzZWxmOjpfZXhwYW5kX2ZpbGVuYW1lKCRvbmUpOwogICAgICAgICAgaWYoICFpc19maWxlKCRvbmUpICkgdGhyb3cgbmV3IFxDbXNJbnZhbGlkRGF0YUV4Y2VwdGlvbignQWxsIENTUyBmaWxlcyBtdXN0IGV4aXN0IGlmIHNwZWNpZmllZCBmb3IgYSAnLl9fQ0xBU1NfXy4nIG9iamVjdCcpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSAkdmFsOwogICAgICBicmVhazsKICAgICAgCiAgICAgIGNhc2UgJ2Nzc3VybCc6CiAgICAgICAgaWYoICEkdmFsICkgdGhyb3cgbmV3IFxDbXNJbnZhbGlkRGF0YUV4Y2VwdGlvbignY3NzIHZhbHVlIG11c3QgYmUgdmFsaWQsIGlmIHNwZWNpZmllZCBmb3IgYSAnLl9fQ0xBU1NfXy4nIG9iamVjdCcpOwogICAgICAgIGlmKCAhaXNfYXJyYXkoJHZhbCkgKSAkdmFsID0gYXJyYXkoJHZhbCk7CiAgICAgICAgZm9yZWFjaCggJHZhbCBhcyAkb25lICkgewogICAgICAgICAgJG9uZSA9IHNlbGY6Ol9leHBhbmRfZmlsZW5hbWUoJG9uZSk7CiAgICAgICAgICBpZiggIXN0YXJ0c3dpdGgoJG9uZSwnaHR0cCcpICYmICFzdGFydHN3aXRoKCRvbmUsJy8vJykgKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJ0FsbCBDU1MgZmlsZXMgbXVzdCBleGlzdCBpZiBzcGVjaWZpZWQgZm9yIGEgJy5fX0NMQVNTX18uJyBvYmplY3QnKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJHRoaXMtPl9kYXRhWyRrZXldID0gJHZhbDsKICAgICAgYnJlYWs7CiAgICAgIAogICAgICBjYXNlICdqc2ZpbGUnOgogICAgICAgIGlmKCAhJHZhbCApIHRocm93IG5ldyBcQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJ2pzIHZhbHVlIG11c3QgYmUgdmFsaWQsIGlmIHNwZWNpZmllZCBmb3IgYSAnLl9fQ0xBU1NfXy4nIG9iamVjdCcpOwogICAgICAgIGlmKCAhaXNfYXJyYXkoJHZhbCkgKSAkdmFsID0gYXJyYXkoJHZhbCk7CiAgICAgICAgZm9yZWFjaCggJHZhbCBhcyAkb25lICkgewogICAgICAgICAgJG9uZSA9IHNlbGY6Ol9leHBhbmRfZmlsZW5hbWUoJG9uZSk7CiAgICAgICAgICBpZiggIWlzX2ZpbGUoJG9uZSkgKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJ0FsbCBKUyBmaWxlcyBtdXN0IGV4aXN0IGlmIHNwZWNpZmllZCBmb3IgYSAnLl9fQ0xBU1NfXy4nIG9iamVjdCcpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSAkdmFsOwogICAgICBicmVhazsKICAgICAgCiAgICAgIGNhc2UgJ2pzdXJsJzoKICAgICAgICBpZiggISR2YWwgKSB0aHJvdyBuZXcgXENtc0ludmFsaWREYXRhRXhjZXB0aW9uKCdqcyB2YWx1ZSBtdXN0IGJlIHZhbGlkLCBpZiBzcGVjaWZpZWQgZm9yIGEgJy5fX0NMQVNTX18uJyBvYmplY3QnKTsKICAgICAgICBpZiggIWlzX2FycmF5KCR2YWwpICkgJHZhbCA9IGFycmF5KCR2YWwpOwogICAgICAgIGZvcmVhY2goICR2YWwgYXMgJG9uZSApIHsKICAgICAgICAgIGlmKCAhc3RhcnRzd2l0aCgkb25lLCdodHRwJykgJiYgIXN0YXJ0c3dpdGgoJG9uZSwnLy8nKSApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxDbXNJbnZhbGlkRGF0YUV4Y2VwdGlvbignQWxsIENTUyBmaWxlcyBtdXN0IGV4aXN0IGlmIHNwZWNpZmllZCBmb3IgYSAnLl9fQ0xBU1NfXy4nIG9iamVjdCcpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSAkdmFsOwogICAgICBicmVhazsKICAgICAgCiAgICAgIGNhc2UgJ2pzX25vbWluaWZ5JzoKICAgICAgY2FzZSAnY3NzX25vbWluaWZ5JzoKICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSBceHRfdXRpbHM6OnRvX2Jvb2woJHZhbCk7CiAgICAgIGJyZWFrOwogICAgICAKICAgICAgY2FzZSAnZGVwZW5kcyc6CiAgICAgICAgaWYoICR2YWwgKSB7CiAgICAgICAgICBpZiggIWlzX2FycmF5KCR2YWwpICkgJHZhbCA9IGV4cGxvZGUoJywnLCR2YWwpOwogICAgICAgICAgJHRtcCA9IGFycmF5KCk7CiAgICAgICAgICBmb3JlYWNoKCAkdmFsIGFzICRvbmUgKSB7CiAgICAgICAgICAgICR0bXBbXSA9IHRyaW0oJG9uZSk7CiAgICAgICAgICB9CiAgICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSAkdG1wOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICR0aGlzLT5fZGF0YVska2V5XSA9ICR2YWw7CiAgICAgICAgfQogICAgICBicmVhazsKICAgICAgCiAgICAgIGNhc2UgJ21vZHVsZSc6CiAgICAgICAgJHRoaXMtPl9kYXRhWyRrZXldID0gdHJpbSgkdmFsKTsKICAgICAgYnJlYWs7CiAgICAgIAogICAgICBkZWZhdWx0OgogICAgICAgIHRocm93IG5ldyBcQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJGtleS4nIGlzIG5vdCBhIHZhbGlkIG1lbWJlciBvZiBhICcuX19DTEFTU19fLicgb2JqZWN0Jyk7CiAgICB9CiAgfQogIAogIC8qKgogICAqIFRlc3QgaWYgdGhpcyBvYmplY3QgaXMgdmFsaWQuCiAgICoKICAgKiBAcmV0dXJuIGJvb2wKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKQogIHsKICAgIGlmKCAkdGhpcy0+bmFtZSA9PSAnJyApIHJldHVybiBGQUxTRTsKICAgIGlmKCAhJHRoaXMtPmpzZmlsZSAmJiAhJHRoaXMtPmNhbGxiYWNrICYmICEkdGhpcy0+bW9kdWxlICkgcmV0dXJuIEZBTFNFOwogICAgcmV0dXJuIFRSVUU7CiAgfQp9IC8vIGVuZCBvZiBjbGFzcwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/jsmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQojbmFtZXNwYWNlIEpTTWluOwoKLyoqCiAqIEpTTWluLnBocCAtIG1vZGlmaWVkIFBIUCBpbXBsZW1lbnRhdGlvbiBvZiBEb3VnbGFzIENyb2NrZm9yZCdzIEpTTWluLgogKgogKiA8Y29kZT4KICogJG1pbmlmaWVkSnMgPSBKU01pbjo6bWluaWZ5KCRqcyk7CiAqIDwvY29kZT4KICoKICogVGhpcyBpcyBhIG1vZGlmaWVkIHBvcnQgb2YganNtaW4uYy4gSW1wcm92ZW1lbnRzOgogKgogKiBEb2VzIG5vdCBjaG9rZSBvbiBzb21lIHJlZ2V4cCBsaXRlcmFscyBjb250YWluaW5nIHF1b3RlIGNoYXJhY3RlcnMuIEUuZy4gLycvCiAqCiAqIFNwYWNlcyBhcmUgcHJlc2VydmVkIGFmdGVyIHNvbWUgYWRkL3N1YiBvcGVyYXRvcnMsIHNvIHRoZXkgYXJlIG5vdCBtaXN0YWtlbmx5CiAqIGNvbnZlcnRlZCB0byBwb3N0LWluYy9kZWMuIEUuZy4gYSArICsrYiAtPiBhKyArK2IKICoKICogUHJlc2VydmVzIG11bHRpLWxpbmUgY29tbWVudHMgdGhhdCBiZWdpbiB3aXRoIC8qIQogKgogKiBQSFAgNSBvciBoaWdoZXIgaXMgcmVxdWlyZWQuCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gdXNlIHRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSB1bmRlciB0aGUKICogc2FtZSB0ZXJtcyBhcyBqc21pbi5jLCB3aGljaCBoYXMgdGhlIGZvbGxvd2luZyBsaWNlbnNlOgogKgogKiAtLQogKiBDb3B5cmlnaHQgKGMpIDIwMDIgRG91Z2xhcyBDcm9ja2ZvcmQgICh3d3cuY3JvY2tmb3JkLmNvbSkKICoKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgogKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgogKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCiAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCiAqIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwogKiBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAogKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogKgogKiBUaGUgU29mdHdhcmUgc2hhbGwgYmUgdXNlZCBmb3IgR29vZCwgbm90IEV2aWwuCiAqCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAogKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQogKiBTT0ZUV0FSRS4KICogLS0KICoKICogQHBhY2thZ2UgSlNNaW4KICogQGF1dGhvciBSeWFuIEdyb3ZlIDxyeWFuQHdvbmtvLmNvbT4gKFBIUCBwb3J0KQogKiBAYXV0aG9yIFN0ZXZlIENsYXkgPHN0ZXZlQG1yY2xheS5vcmc+IChtb2RpZmljYXRpb25zICsgY2xlYW51cCkKICogQGF1dGhvciBBbmRyZWEgR2lhbW1hcmNoaSA8aHR0cDovL3d3dy4zc2l0ZS5ldT4gKHNwYWNlQmVmb3JlUmVnRXhwKQogKiBAY29weXJpZ2h0IDIwMDIgRG91Z2xhcyBDcm9ja2ZvcmQgPGRvdWdsYXNAY3JvY2tmb3JkLmNvbT4gKGpzbWluLmMpCiAqIEBjb3B5cmlnaHQgMjAwOCBSeWFuIEdyb3ZlIDxyeWFuQHdvbmtvLmNvbT4gKFBIUCBwb3J0KQogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwIE1JVCBMaWNlbnNlCiAqIEBsaW5rIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9qc21pbi1waHAvCiAqLwogLyoqIHRvIGF2b2lkIGNvbmZsaWN0cyAqLwppZiggIWNsYXNzX2V4aXN0cygnSlNNaW4nKSApCnsKICBjbGFzcyBKU01pbiB7CiAgICAgIGNvbnN0IEFDVElPTl9LRUVQX0EgICAgID0gMTsKICAgICAgY29uc3QgQUNUSU9OX0RFTEVURV9BICAgPSAyOwogICAgICBjb25zdCBBQ1RJT05fREVMRVRFX0FfQiA9IDM7CiAgCiAgICAgIHByb3RlY3RlZCAkYSAgICAgICAgICAgPSAiXG4iOwogICAgICBwcm90ZWN0ZWQgJGIgICAgICAgICAgID0gJyc7CiAgICAgIHByb3RlY3RlZCAkaW5wdXQgICAgICAgPSAnJzsKICAgICAgcHJvdGVjdGVkICRpbnB1dEluZGV4ICA9IDA7CiAgICAgIHByb3RlY3RlZCAkaW5wdXRMZW5ndGggPSAwOwogICAgICBwcm90ZWN0ZWQgJGxvb2tBaGVhZCAgID0gbnVsbDsKICAgICAgcHJvdGVjdGVkICRvdXRwdXQgICAgICA9ICcnOwogICAgICBwcm90ZWN0ZWQgJGxhc3RCeXRlT3V0ICA9ICcnOwogICAgICBwcm90ZWN0ZWQgJGtlcHRDb21tZW50ID0gJyc7CiAgCiAgICAgIC8qKgogICAgICAgKiBNaW5pZnkgSmF2YXNjcmlwdC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHN0cmluZyAkanMgSmF2YXNjcmlwdCB0byBiZSBtaW5pZmllZAogICAgICAgKgogICAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICAgKi8KICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtaW5pZnkoJGpzKQogICAgICB7CiAgICAgICAgICAkanNtaW4gPSBuZXcgSlNNaW4oJGpzKTsKICAgICAgICAgIHJldHVybiAkanNtaW4tPm1pbigpOwogICAgICB9CiAgCiAgICAgIC8qKgogICAgICAgKiBAcGFyYW0gc3RyaW5nICRpbnB1dAogICAgICAgKi8KICAgICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRpbnB1dCkKICAgICAgewogICAgICAgICAgJHRoaXMtPmlucHV0ID0gJGlucHV0OwogICAgICB9CiAgCiAgICAgIC8qKgogICAgICAgKiBQZXJmb3JtIG1pbmlmaWNhdGlvbiwgcmV0dXJuIHJlc3VsdAogICAgICAgKgogICAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICAgKi8KICAgICAgcHVibGljIGZ1bmN0aW9uIG1pbigpCiAgICAgIHsKICAgICAgICAgIGlmICgkdGhpcy0+b3V0cHV0ICE9PSAnJykgeyAvLyBtaW4gYWxyZWFkeSBydW4KICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPm91dHB1dDsKICAgICAgICAgIH0KICAKICAgICAgICAgICRtYkludEVuYyA9IG51bGw7CiAgICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9zdHJsZW4nKSAmJiAoKGludClpbmlfZ2V0KCdtYnN0cmluZy5mdW5jX292ZXJsb2FkJykgJiAyKSkgewogICAgICAgICAgICAgICRtYkludEVuYyA9IG1iX2ludGVybmFsX2VuY29kaW5nKCk7CiAgICAgICAgICAgICAgbWJfaW50ZXJuYWxfZW5jb2RpbmcoJzhiaXQnKTsKICAgICAgICAgIH0KICAKICAgICAgICAgIGlmIChpc3NldCgkdGhpcy0+aW5wdXRbMF0pICYmICR0aGlzLT5pbnB1dFswXSA9PT0gIlx4ZWYiKSB7CiAgICAgICAgICAgICAgJHRoaXMtPmlucHV0ID0gc3Vic3RyKCR0aGlzLT5pbnB1dCwgMyk7CiAgICAgICAgICB9CiAgCiAgICAgICAgICAkdGhpcy0+aW5wdXQgPSBzdHJfcmVwbGFjZSgiXHJcbiIsICJcbiIsICR0aGlzLT5pbnB1dCk7CiAgICAgICAgICAkdGhpcy0+aW5wdXRMZW5ndGggPSBzdHJsZW4oJHRoaXMtPmlucHV0KTsKICAKICAgICAgICAgICR0aGlzLT5hY3Rpb24oc2VsZjo6QUNUSU9OX0RFTEVURV9BX0IpOwogIAogICAgICAgICAgd2hpbGUgKCR0aGlzLT5hICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIG5leHQgY29tbWFuZAogICAgICAgICAgICAgICRjb21tYW5kID0gc2VsZjo6QUNUSU9OX0tFRVBfQTsgLy8gZGVmYXVsdAogICAgICAgICAgICAgIGlmICgkdGhpcy0+aXNXaGl0ZVNwYWNlKCR0aGlzLT5hKSkgewogICAgICAgICAgICAgICAgICBpZiAoKCR0aGlzLT5sYXN0Qnl0ZU91dCA9PT0gJysnIHx8ICR0aGlzLT5sYXN0Qnl0ZU91dCA9PT0gJy0nKQogICAgICAgICAgICAgICAgICAgICAgICAgICYmICgkdGhpcy0+YiA9PT0gJHRoaXMtPmxhc3RCeXRlT3V0KSkgewogICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZGVsZXRlIHRoaXMgc3BhY2UuIElmIHdlIGRvLCB0aGUgYWRkaXRpb24vc3VidHJhY3Rpb24KICAgICAgICAgICAgICAgICAgICAgIC8vIGNvdWxkIGJlIHBhcnNlZCBhcyBhIHBvc3QtaW5jcmVtZW50CiAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICghICR0aGlzLT5pc0FscGhhTnVtKCR0aGlzLT5iKSkgewogICAgICAgICAgICAgICAgICAgICAgJGNvbW1hbmQgPSBzZWxmOjpBQ1RJT05fREVMRVRFX0E7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2VpZiAoJHRoaXMtPmlzTGluZVRlcm1pbmF0b3IoJHRoaXMtPmEpKSB7CiAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+aXNXaGl0ZVNwYWNlKCR0aGlzLT5iKSkgewogICAgICAgICAgICAgICAgICAgICAgJGNvbW1hbmQgPSBzZWxmOjpBQ1RJT05fREVMRVRFX0FfQjsKICAKICAgICAgICAgICAgICAgICAgICAgIC8vIGluIGNhc2Ugb2YgbWJzdHJpbmcuZnVuY19vdmVybG9hZCAmIDIsIG11c3QgY2hlY2sgZm9yIG51bGwgYiwKICAgICAgICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBtYl9zdHJwb3Mgd2lsbCBnaXZlIFdBUk5JTkcKICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCR0aGlzLT5iID09PSBudWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoZmFsc2UgPT09IHN0cnBvcygne1soKy0hfiMnLCAkdGhpcy0+YikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhICR0aGlzLT5pc0FscGhhTnVtKCR0aGlzLT5iKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICRjb21tYW5kID0gc2VsZjo6QUNUSU9OX0RFTEVURV9BOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBlbHNlaWYgKCEgJHRoaXMtPmlzQWxwaGFOdW0oJHRoaXMtPmEpKSB7CiAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+aXNXaGl0ZVNwYWNlKCR0aGlzLT5iKQogICAgICAgICAgICAgICAgICAgICAgfHwgKCR0aGlzLT5pc0xpbmVUZXJtaW5hdG9yKCR0aGlzLT5iKQogICAgICAgICAgICAgICAgICAgICAgICAgICYmIChmYWxzZSA9PT0gc3RycG9zKCd9XSkrLSJcJ2AnLCAkdGhpcy0+YSkpKSkgewogICAgICAgICAgICAgICAgICAgICAgJGNvbW1hbmQgPSBzZWxmOjpBQ1RJT05fREVMRVRFX0FfQjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAkdGhpcy0+YWN0aW9uKCRjb21tYW5kKTsKICAgICAgICAgIH0KICAgICAgICAgICR0aGlzLT5vdXRwdXQgPSB0cmltKCR0aGlzLT5vdXRwdXQpOwogIAogICAgICAgICAgaWYgKCRtYkludEVuYyAhPT0gbnVsbCkgewogICAgICAgICAgICAgIG1iX2ludGVybmFsX2VuY29kaW5nKCRtYkludEVuYyk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gJHRoaXMtPm91dHB1dDsKICAgICAgfQogIAogICAgICAvKioKICAgICAgICogQUNUSU9OX0tFRVBfQSA9IE91dHB1dCBBLiBDb3B5IEIgdG8gQS4gR2V0IHRoZSBuZXh0IEIuCiAgICAgICAqIEFDVElPTl9ERUxFVEVfQSA9IENvcHkgQiB0byBBLiBHZXQgdGhlIG5leHQgQi4KICAgICAgICogQUNUSU9OX0RFTEVURV9BX0IgPSBHZXQgdGhlIG5leHQgQi4KICAgICAgICoKICAgICAgICogQHBhcmFtIGludCAkY29tbWFuZAogICAgICAgKiBAdGhyb3dzIFVudGVybWluYXRlZFJlZ0V4cEV4Y2VwdGlvbnxVbnRlcm1pbmF0ZWRTdHJpbmdFeGNlcHRpb24KICAgICAgICovCiAgICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhY3Rpb24oJGNvbW1hbmQpCiAgICAgIHsKICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBjb21wcmVzcyAiYSArICsrYiIgdG8gImErKytiIiwgZXRjLgogICAgICAgICAgaWYgKCRjb21tYW5kID09PSBzZWxmOjpBQ1RJT05fREVMRVRFX0FfQgogICAgICAgICAgICAgICYmICR0aGlzLT5iID09PSAnICcKICAgICAgICAgICAgICAmJiAoJHRoaXMtPmEgPT09ICcrJyB8fCAkdGhpcy0+YSA9PT0gJy0nKSkgewogICAgICAgICAgICAgIC8vIE5vdGU6IHdlJ3JlIGF0IGFuIGFkZGl0aW9uL3N1YnN0cmFjdGlvbiBvcGVyYXRvcjsgdGhlIGlucHV0SW5kZXgKICAgICAgICAgICAgICAvLyB3aWxsIGNlcnRhaW5seSBiZSBhIHZhbGlkIGluZGV4CiAgICAgICAgICAgICAgaWYgKCR0aGlzLT5pbnB1dFskdGhpcy0+aW5wdXRJbmRleF0gPT09ICR0aGlzLT5hKSB7CiAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgIisgKyIgb3IgIi0gLSIuIERvbid0IGRlbGV0ZSB0aGUgc3BhY2UuCiAgICAgICAgICAgICAgICAgICRjb21tYW5kID0gc2VsZjo6QUNUSU9OX0tFRVBfQTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgCiAgICAgICAgICBzd2l0Y2ggKCRjb21tYW5kKSB7CiAgICAgICAgICAgICAgY2FzZSBzZWxmOjpBQ1RJT05fS0VFUF9BOiAvLyAxCiAgICAgICAgICAgICAgICAgICR0aGlzLT5vdXRwdXQgLj0gJHRoaXMtPmE7CiAgCiAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+a2VwdENvbW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5vdXRwdXQgPSBydHJpbSgkdGhpcy0+b3V0cHV0LCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5vdXRwdXQgLj0gJHRoaXMtPmtlcHRDb21tZW50OwogICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmtlcHRDb21tZW50ID0gJyc7CiAgICAgICAgICAgICAgICAgIH0KICAKICAgICAgICAgICAgICAgICAgJHRoaXMtPmxhc3RCeXRlT3V0ID0gJHRoaXMtPmE7CiAgCiAgICAgICAgICAgICAgICAgIC8vIGZhbGx0aHJvdWdoIGludGVudGlvbmFsCiAgICAgICAgICAgICAgY2FzZSBzZWxmOjpBQ1RJT05fREVMRVRFX0E6IC8vIDIKICAgICAgICAgICAgICAgICAgJHRoaXMtPmEgPSAkdGhpcy0+YjsKICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5hID09PSAiJyIgfHwgJHRoaXMtPmEgPT09ICciJyB8fCAkdGhpcy0+YSA9PT0gJ2AnKSB7IC8vIHN0cmluZy90ZW1wbGF0ZSBsaXRlcmFsCiAgICAgICAgICAgICAgICAgICAgICAkZGVsaW1pdGVyID0gJHRoaXMtPmE7CiAgICAgICAgICAgICAgICAgICAgICAkc3RyID0gJHRoaXMtPmE7IC8vIGluIGNhc2UgbmVlZGVkIGZvciBleGNlcHRpb24KICAgICAgICAgICAgICAgICAgICAgIGZvcig7OykgewogICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5vdXRwdXQgLj0gJHRoaXMtPmE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmxhc3RCeXRlT3V0ID0gJHRoaXMtPmE7CiAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmEgPSAkdGhpcy0+Z2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5hID09PSAkdGhpcy0+YikgeyAvLyBlbmQgcXVvdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZGVsaW1pdGVyID09PSAnYCcgJiYgJHRoaXMtPmlzTGluZVRlcm1pbmF0b3IoJHRoaXMtPmEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlYXZlIHRoZSBuZXdsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCR0aGlzLT5pc0VPRigkdGhpcy0+YSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJ5dGUgPSAkdGhpcy0+aW5wdXRJbmRleCAtIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnRlcm1pbmF0ZWRTdHJpbmdFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSlNNaW46IFVudGVybWluYXRlZCBTdHJpbmcgYXQgYnl0ZSB7JGJ5dGV9OiB7JHN0cn0iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0ciAuPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmEgPT09ICdcXCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm91dHB1dCAuPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmxhc3RCeXRlT3V0ID0gJHRoaXMtPmE7CiAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5hID0gJHRoaXMtPmdldCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RyIC49ICR0aGlzLT5hOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogIAogICAgICAgICAgICAgICAgICAvLyBmYWxsdGhyb3VnaCBpbnRlbnRpb25hbAogICAgICAgICAgICAgIGNhc2Ugc2VsZjo6QUNUSU9OX0RFTEVURV9BX0I6IC8vIDMKICAgICAgICAgICAgICAgICAgJHRoaXMtPmIgPSAkdGhpcy0+bmV4dCgpOwogICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmIgPT09ICcvJyAmJiAkdGhpcy0+aXNSZWdleHBMaXRlcmFsKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5vdXRwdXQgLj0gJHRoaXMtPmEgLiAkdGhpcy0+YjsKICAgICAgICAgICAgICAgICAgICAgICRwYXR0ZXJuID0gJy8nOyAvLyBrZWVwIGVudGlyZSBwYXR0ZXJuIGluIGNhc2Ugd2UgbmVlZCB0byByZXBvcnQgaXQgaW4gdGhlIGV4Y2VwdGlvbgogICAgICAgICAgICAgICAgICAgICAgZm9yKDs7KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmEgPSAkdGhpcy0+Z2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhdHRlcm4gLj0gJHRoaXMtPmE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5hID09PSAnWycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKDs7KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+b3V0cHV0IC49ICR0aGlzLT5hOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmEgPSAkdGhpcy0+Z2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGF0dGVybiAuPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+YSA9PT0gJ10nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmEgPT09ICdcXCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+b3V0cHV0IC49ICR0aGlzLT5hOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5hID0gJHRoaXMtPmdldCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXR0ZXJuIC49ICR0aGlzLT5hOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5pc0VPRigkdGhpcy0+YSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW50ZXJtaW5hdGVkUmVnRXhwRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSlNNaW46IFVudGVybWluYXRlZCBzZXQgaW4gUmVnRXhwIGF0IGJ5dGUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkdGhpcy0+aW5wdXRJbmRleCAuIjogeyRwYXR0ZXJufSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogIAogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+YSA9PT0gJy8nKSB7IC8vIGVuZCBwYXR0ZXJuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyB3aGlsZSAodHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJHRoaXMtPmEgPT09ICdcXCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm91dHB1dCAuPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmEgPSAkdGhpcy0+Z2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXR0ZXJuIC49ICR0aGlzLT5hOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkdGhpcy0+aXNFT0YoJHRoaXMtPmEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRieXRlID0gJHRoaXMtPmlucHV0SW5kZXggLSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW50ZXJtaW5hdGVkUmVnRXhwRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkpTTWluOiBVbnRlcm1pbmF0ZWQgUmVnRXhwIGF0IGJ5dGUgeyRieXRlfTogeyRwYXR0ZXJufSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+b3V0cHV0IC49ICR0aGlzLT5hOwogICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5sYXN0Qnl0ZU91dCA9ICR0aGlzLT5hOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmIgPSAkdGhpcy0+bmV4dCgpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgLy8gZW5kIGNhc2UgQUNUSU9OX0RFTEVURV9BX0IKICAgICAgICAgIH0KICAgICAgfQogIAogICAgICAvKioKICAgICAgICogQHJldHVybiBib29sCiAgICAgICAqLwogICAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gaXNSZWdleHBMaXRlcmFsKCkKICAgICAgewogICAgICAgICAgaWYgKGZhbHNlICE9PSBzdHJwb3MoIigsPTpbISZ8Pystfip7OyIsICR0aGlzLT5hKSkgewogICAgICAgICAgICAgIC8vIHdlIGNhbid0IGRpdmlkZSBhZnRlciB0aGVzZSB0b2tlbnMKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0KICAKICAgICAgICAgIC8vIGNoZWNrIGlmIGZpcnN0IG5vbi13cyB0b2tlbiBpcyAiLyIgKHNlZSBzdGFydHMtcmVnZXguanMpCiAgICAgICAgICAkbGVuZ3RoID0gc3RybGVuKCR0aGlzLT5vdXRwdXQpOwogICAgICAgICAgaWYgKCR0aGlzLT5pc1doaXRlU3BhY2UoJHRoaXMtPmEpIHx8ICR0aGlzLT5pc0xpbmVUZXJtaW5hdG9yKCR0aGlzLT5hKSkgewogICAgICAgICAgICAgIGlmICgkbGVuZ3RoIDwgMikgeyAvLyB3ZWlyZCBlZGdlIGNhc2UKICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogIAogICAgICAgICAgLy8gaWYgdGhlICIvIiBmb2xsb3dzIGEga2V5d29yZCwgaXQgbXVzdCBiZSBhIHJlZ2V4cCwgb3RoZXJ3aXNlIGl0J3MgYmVzdCB0byBhc3N1bWUgZGl2aXNpb24KICAKICAgICAgICAgICRzdWJqZWN0ID0gJHRoaXMtPm91dHB1dCAuIHRyaW0oJHRoaXMtPmEpOwogICAgICAgICAgaWYgKCFwcmVnX21hdGNoKCcvKD86Y2FzZXxlbHNlfGlufHJldHVybnx0eXBlb2YpJC8nLCAkc3ViamVjdCwgJG0pKSB7CiAgICAgICAgICAgICAgLy8gbm90IGEga2V5d29yZAogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAKICAgICAgICAgIC8vIGNhbid0IGJlIHN1cmUgaXQncyBhIGtleXdvcmQgeWV0IChzZWUgbm90LXJlZ2V4cC5qcykKICAgICAgICAgICRjaGFyQmVmb3JlS2V5d29yZCA9IHN1YnN0cigkc3ViamVjdCwgMCAtIHN0cmxlbigkbVswXSkgLSAxLCAxKTsKICAgICAgICAgIGlmICgkdGhpcy0+aXNBbHBoYU51bSgkY2hhckJlZm9yZUtleXdvcmQpKSB7CiAgICAgICAgICAgICAgLy8gdGhpcyBpcyByZWFsbHkgYW4gaWRlbnRpZmllciBlbmRpbmcgaW4gYSBrZXl3b3JkLCBlLmcuICJ4cmV0dXJuIgogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAKICAgICAgICAgIC8vIGl0J3MgYSByZWdleHAuIFJlbW92ZSB1bm5lZWRlZCB3aGl0ZXNwYWNlIGFmdGVyIGtleXdvcmQKICAgICAgICAgIGlmICgkdGhpcy0+aXNXaGl0ZVNwYWNlKCR0aGlzLT5hKSB8fCAkdGhpcy0+aXNMaW5lVGVybWluYXRvcigkdGhpcy0+YSkpIHsKICAgICAgICAgICAgICAkdGhpcy0+YSA9ICcnOwogICAgICAgICAgfQogIAogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAKICAgICAgLyoqCiAgICAgICAqIFJldHVybiB0aGUgbmV4dCBjaGFyYWN0ZXIgZnJvbSBzdGRpbi4gV2F0Y2ggb3V0IGZvciBsb29rYWhlYWQuIElmIHRoZSBjaGFyYWN0ZXIgaXMgYSBjb250cm9sIGNoYXJhY3RlciwKICAgICAgICogdHJhbnNsYXRlIGl0IHRvIGEgc3BhY2Ugb3IgbGluZWZlZWQuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgICAqLwogICAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0KCkKICAgICAgewogICAgICAgICAgJGMgPSAkdGhpcy0+bG9va0FoZWFkOwogICAgICAgICAgJHRoaXMtPmxvb2tBaGVhZCA9IG51bGw7CiAgICAgICAgICBpZiAoJGMgPT09IG51bGwpIHsKICAgICAgICAgICAgICAvLyBnZXRjKHN0ZGluKQogICAgICAgICAgICAgIGlmICgkdGhpcy0+aW5wdXRJbmRleCA8ICR0aGlzLT5pbnB1dExlbmd0aCkgewogICAgICAgICAgICAgICAgICAkYyA9ICR0aGlzLT5pbnB1dFskdGhpcy0+aW5wdXRJbmRleF07CiAgICAgICAgICAgICAgICAgICR0aGlzLT5pbnB1dEluZGV4ICs9IDE7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgJGMgPSBudWxsOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmICgkYyA9PT0gIlxyIikgewogICAgICAgICAgICAgIHJldHVybiAiXG4iOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuICRjOwogICAgICB9CiAgCiAgICAgIC8qKgogICAgICAgKiBEb2VzICRhIGluZGljYXRlIGVuZCBvZiBpbnB1dD8KICAgICAgICoKICAgICAgICogQHBhcmFtIHN0cmluZyAkYQogICAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAgICovCiAgICAgIHByb3RlY3RlZCBmdW5jdGlvbiBpc0VPRigkYSkKICAgICAgewogICAgICAgICAgcmV0dXJuICRhID09PSBudWxsIHx8ICR0aGlzLT5pc0xpbmVUZXJtaW5hdG9yKCRhKTsKICAgICAgfQogIAogICAgICAvKioKICAgICAgICogR2V0IG5leHQgY2hhciAod2l0aG91dCBnZXR0aW5nIGl0KS4gSWYgaXMgY3RybCBjaGFyYWN0ZXIsIHRyYW5zbGF0ZSB0byBhIHNwYWNlIG9yIG5ld2xpbmUuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgICAqLwogICAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcGVlaygpCiAgICAgIHsKICAgICAgICAgICR0aGlzLT5sb29rQWhlYWQgPSAkdGhpcy0+Z2V0KCk7CiAgICAgICAgICByZXR1cm4gJHRoaXMtPmxvb2tBaGVhZDsKICAgICAgfQogIAogICAgICAvKioKICAgICAgICogUmV0dXJuIHRydWUgaWYgdGhlIGNoYXJhY3RlciBpcyBhIGxldHRlciwgZGlnaXQsIHVuZGVyc2NvcmUsIGRvbGxhciBzaWduLCBvciBub24tQVNDSUkgY2hhcmFjdGVyLgogICAgICAgKgogICAgICAgKiBAcGFyYW0gc3RyaW5nICRjCiAgICAgICAqCiAgICAgICAqIEByZXR1cm4gYm9vbAogICAgICAgKi8KICAgICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGlzQWxwaGFOdW0oJGMpCiAgICAgIHsKICAgICAgICAgIHJldHVybiAocHJlZ19tYXRjaCgnL15bYS16MC05QS1aX1xcJFxcXFxdJC8nLCAkYykgfHwgb3JkKCRjKSA+IDEyNik7CiAgICAgIH0KICAKICAgICAgLyoqCiAgICAgICAqIENvbnN1bWUgYSBzaW5nbGUgbGluZSBjb21tZW50IGZyb20gaW5wdXQgKHBvc3NpYmx5IHJldGFpbmluZyBpdCkKICAgICAgICovCiAgICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjb25zdW1lU2luZ2xlTGluZUNvbW1lbnQoKQogICAgICB7CiAgICAgICAgICAkY29tbWVudCA9ICcnOwogICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAkZ2V0ID0gJHRoaXMtPmdldCgpOwogICAgICAgICAgICAgICRjb21tZW50IC49ICRnZXQ7CiAgICAgICAgICAgICAgaWYgKCR0aGlzLT5pc0VPRigkZ2V0KSkgewogICAgICAgICAgICAgICAgICAvLyBpZiBJRSBjb25kaXRpb25hbCBjb21tZW50CiAgICAgICAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCcvXlxcL0AoPzpjY19vbnxpZnxlbGlmfGVsc2V8ZW5kKVxcYi8nLCAkY29tbWVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5rZXB0Q29tbWVudCAuPSAiL3skY29tbWVudH0iOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgIH0KICAKICAgICAgLyoqCiAgICAgICAqIENvbnN1bWUgYSBtdWx0aXBsZSBsaW5lIGNvbW1lbnQgZnJvbSBpbnB1dCAocG9zc2libHkgcmV0YWluaW5nIGl0KQogICAgICAgKgogICAgICAgKiBAdGhyb3dzIFVudGVybWluYXRlZENvbW1lbnRFeGNlcHRpb24KICAgICAgICovCiAgICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjb25zdW1lTXVsdGlwbGVMaW5lQ29tbWVudCgpCiAgICAgIHsKICAgICAgICAgICR0aGlzLT5nZXQoKTsKICAgICAgICAgICRjb21tZW50ID0gJyc7CiAgICAgICAgICBmb3IoOzspIHsKICAgICAgICAgICAgICAkZ2V0ID0gJHRoaXMtPmdldCgpOwogICAgICAgICAgICAgIGlmICgkZ2V0ID09PSAnKicpIHsKICAgICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5wZWVrKCkgPT09ICcvJykgeyAvLyBlbmQgb2YgY29tbWVudCByZWFjaGVkCiAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Z2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gc3RycG9zKCRjb21tZW50LCAnIScpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJlc2VydmVkIGJ5IFlVSSBDb21wcmVzc29yCiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+a2VwdENvbW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgcHJlcGVuZCBhIG5ld2xpbmUgaWYgdHdvIGNvbW1lbnRzIHJpZ2h0IGFmdGVyIG9uZSBhbm90aGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5rZXB0Q29tbWVudCA9ICJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5rZXB0Q29tbWVudCAuPSAiLyohIiAuIHN1YnN0cigkY29tbWVudCwgMSkgLiAiKi9cbiI7CiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByZWdfbWF0Y2goJy9eQCg/OmNjX29ufGlmfGVsaWZ8ZWxzZXxlbmQpXFxiLycsICRjb21tZW50KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElFIGNvbmRpdGlvbmFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmtlcHRDb21tZW50IC49ICIvKnskY29tbWVudH0qLyI7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2VpZiAoJGdldCA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW50ZXJtaW5hdGVkQ29tbWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgICJKU01pbjogVW50ZXJtaW5hdGVkIGNvbW1lbnQgYXQgYnl0ZSB7JHRoaXMtPmlucHV0SW5kZXh9OiAvKnskY29tbWVudH0iKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgJGNvbW1lbnQgLj0gJGdldDsKICAgICAgICAgIH0KICAgICAgfQogIAogICAgICAvKioKICAgICAgICogR2V0IHRoZSBuZXh0IGNoYXJhY3Rlciwgc2tpcHBpbmcgb3ZlciBjb21tZW50cy4gU29tZSBjb21tZW50cyBtYXkgYmUgcHJlc2VydmVkLgogICAgICAgKgogICAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICAgKi8KICAgICAgcHJvdGVjdGVkIGZ1bmN0aW9uIG5leHQoKQogICAgICB7CiAgICAgICAgICAkZ2V0ID0gJHRoaXMtPmdldCgpOwogICAgICAgICAgaWYgKCRnZXQgPT09ICcvJykgewogICAgICAgICAgICAgIHN3aXRjaCAoJHRoaXMtPnBlZWsoKSkgewogICAgICAgICAgICAgICAgICBjYXNlICcvJzoKICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5jb25zdW1lU2luZ2xlTGluZUNvbW1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICRnZXQgPSAiXG4iOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIGNhc2UgJyonOgogICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNvbnN1bWVNdWx0aXBsZUxpbmVDb21tZW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAkZ2V0ID0gJyAnOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuICRnZXQ7CiAgICAgIH0KICAKICAgICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGlzV2hpdGVTcGFjZSgkcykgewogICAgICAgICAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8jc2VjLXdoaXRlLXNwYWNlCiAgICAgICAgICByZXR1cm4gJHMgIT09IG51bGwgJiYgc3RycG9zKCIgXHRcdlxmIiwgJHMpICE9PSBmYWxzZTsKICAgICAgfQogIAogICAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gaXNMaW5lVGVybWluYXRvcigkcykgewogICAgICAgICAgLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8jc2VjLWxpbmUtdGVybWluYXRvcnMKICAgICAgICAgIHJldHVybiAkcyAhPT0gbnVsbCAmJiBzdHJwb3MoIlxuXHIiLCAkcykgIT09IGZhbHNlOwogICAgICB9CiAgfQp9CgoKLy8gLS0gRXhjZXB0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLyoqIHRvIGF2b2lkIGNvbmZsaWN0cyAqLwppZiggIWNsYXNzX2V4aXN0cygnSlNNaW5FeGNlcHRpb24nKSApCnsKICBjbGFzcyBKU01pbkV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7fQp9]]></data>
	</file>
	<file>
	  <filename>/lib/l10n</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/l10n/GetText.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcbDEwbjsNCg0KDQpjbGFzcyBHZXRUZXh0DQp7DQogIHByb3RlY3RlZCAkX21vZCA9IG51bGw7DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoIFxDTVNNb2R1bGUgJG1vZCApICB7ICR0aGlzLT5fbW9kID0gJG1vZDsgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIHN0cigvKiB2YXIgYXJncyAqLykNCiAgew0KICAgICRhcmdzID0gXGZ1bmNfZ2V0X2FyZ3MoKTsNCiAgICBpZigxID09PSBcY291bnQoJGFyZ3MpICYmIFxpc19hcnJheSgkYXJnc1swXSkpIHsgJGFyZ3MgPSAkYXJnc1swXTsgfQ0KICAgIA0KICAgIHJldHVybiBcY2FsbF91c2VyX2Z1bmNfYXJyYXkoWyR0aGlzLT5fbW9kLCAnTGFuZyddLCAkYXJncyk7DQogIH0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/LinkDefinition</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/LinkDefinition/class.CoreLinkDefinitionGenerator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIGEgTGluayBEZWZpbml0aW9uIEdlbmVyYXRvciBmb3IgY29yZSBEYXRhUmVmcy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IENvbW11bmljYXRpb25zCiAqIEBhdXRob3IgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTQgYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XExpbmtEZWZpbml0aW9uOwoKLyoqCiAqIEEgY2xhc3MgZm9yIGdlbmVyYXRpbmcgbGlua2RlZmluaXRpb24gb2JqZWN0cyBnaXZlbiBkYXRhcmVmcyB0aGF0IG1hdGNoIGFyZSBmb3IgdGhlIGNvcmUKICogaS5lOiBwYWdlcywgc3R5bGVzaGVldHMsIGV0YwogKi8KY2xhc3MgQ29yZUxpbmtEZWZpbml0aW9uR2VuZXJhdG9yCnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfZGF0YXJlZjsKCiAgICAvKioKICAgICAqIFNldCB0aGUgRGF0YVJlZiBmb3IgdGhpcyBnZW5lcmF0b3IuCiAgICAgKgogICAgICogQHBhcmFtIERhdGFSZWYgJGRhdGFyZWYKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF9kYXRhcmVmKERhdGFSZWYgJGRhdGFyZWYpCiAgICB7CiAgICAgICAgJHRoaXMtPl9kYXRhcmVmID0gJGRhdGFyZWY7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBsaW5rIGRlZmluaXRpb24gZm9yIHRoZSBwcm92aWRlZCBkYXRhcmVmLgogICAgICoKICAgICAqIEByZXR1cm4gTGlua0RlZmluaXRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9saW5rZGVmaW5pdGlvbigpCiAgICB7CiAgICAgICAgaWYoICFpc19hKCR0aGlzLT5fZGF0YXJlZiwnXENNU01TRXh0XExpbmtEZWZpbml0aW9uXERhdGFSZWYnKSApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdEYXRhIHBhc3NlZCB0byAnLl9fQ0xBU1NfXy4nIGlzIG5vdCBhIERhdGFSZWYnKTsKICAgICAgICB9CgogICAgICAgICRrZXkyID0gJHRoaXMtPl9kYXRhcmVmLT5rZXkyOwogICAgICAgICRrZXkzID0gJHRoaXMtPl9kYXRhcmVmLT5rZXkzOwogICAgICAgIGlmKCAoaW50KSAka2V5MiA+IDAgKSB7CiAgICAgICAgICAgICRrZXkzID0gJGtleTI7CiAgICAgICAgICAgICRrZXkyID0gJ3BhZ2UnOwogICAgICAgIH0KCiAgICAgICAgc3dpdGNoKCBzdHJ0b2xvd2VyKCRrZXkyKSApIHsKICAgICAgICBjYXNlICdwYWdlJzoKICAgICAgICAgICAgLy8gZ2V0IHRoZSBjb250ZW50IG9iamVjdCBzcGVjaWZpZWQgYnkga2V5MwogICAgICAgICAgICAka2V5MyA9IChpbnQpJGtleTM7CiAgICAgICAgICAgIGlmKCAka2V5MyA8IDEgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0ludmFsaWQgQ29yZSBEYXRhUmVmIGtleTMgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsaWQgcGFnZSBpZCcpOwogICAgICAgICAgICAkY29udGVudCA9IFxDb250ZW50T3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCktPkxvYWRDb250ZW50RnJvbUlkKCRrZXkzKTsKICAgICAgICAgICAgaWYoICFpc19vYmplY3QoJGNvbnRlbnQpICkgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ291bGQgbm90IGZpbmQgY29udGVudCBvYmplY3Qgc3BlY2lmaWVkIGluIERhdGFSZWYgb2JqZWN0Jyk7CgogICAgICAgICAgICAvLyBub3csIGlmIHRoaXMgaXMgYSBmcm9udGVuZCByZXF1ZXN0LCBvYnZpb3VzbHkgd2Ugc2hvdWxkIGp1c3QgZXhwb3J0IHRoZSBwcm9wZXIgVVJMIGZvciB0aGlzIGNvbnRlbnQgb2JqZWN0CiAgICAgICAgICAgIGlmKCBjbXNtcygpLT5pc19mcm9udGVuZF9yZXF1ZXN0KCkgKSB7CiAgICAgICAgICAgICAgICBpZiggISRjb250ZW50LT5IYXNVc2FibGVMaW5rKCkgKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdDYW5ub3QgY3JlYXRlIGEgTGlua0RlZmluaXRpb24gdG8gYSBjb250ZW50IHR5cGUgdGhhdCBoYXMgbm8gdXNhYmxlIGxpbmsnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKCAhJGNvbnRlbnQtPkFjdGl2ZSgpICkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ2Fubm90IGNyZWF0ZSBhIExpbmtEZWZpbml0aW9uIHRvIGEgY29udGVudCBwYWdlIHRoYXQgaXMgaW5hY3RpdmUnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRsaW5rZGVmbiA9IG5ldyBMaW5rRGVmaW5pdGlvbigpOwogICAgICAgICAgICAgICAgJGxpbmtkZWZuLT5ocmVmID0gJGNvbnRlbnQtPkdldFVSTCgpOwogICAgICAgICAgICAgICAgJGxpbmtkZWZuLT50ZXh0ID0gJGNvbnRlbnQtPk5hbWUoKTsKICAgICAgICAgICAgICAgICRsaW5rZGVmbi0+dGl0bGUgPSAkY29udGVudC0+VGl0bGVBdHRyaWJ1dGUoKTsKICAgICAgICAgICAgICAgIHJldHVybiAkbGlua2RlZm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBpZiBpdCBpcyBhbiBhZG1pbiByZXF1ZXN0IHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBwYWdlIGlzIGFjdGl2ZSwgb3IgaGFzIGEgdXNhYmxlIGxpbmsKICAgICAgICAgICAgICAgIC8vIGJ1dCB3ZSBtYXkgbmVlZCB0byBrbm93IGlmIHRoZSBhcGdlIGlzIGVkaXRhYmxlIGJ5IHRoaXMgdXNlciAoZG8gdGhpcyBsYXRlcikKICAgICAgICAgICAgICAgIGlmKCB2ZXJzaW9uX2NvbXBhcmUoQ01TX1ZFUlNJT04sJzEuOTknKSA8IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gMS54IHVzZXMgYWRtaW4vZWRpdGNvbnRlbnQucGhwP2NvbnRlbnRfaWQ9IyMKICAgICAgICAgICAgICAgICAgICAvLyRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsKICAgICAgICAgICAgICAgICAgICAkY29uZmlnID0gXENNU01TRXh0XGNvbmZpZzo6R2V0SW5zdGFuY2UoKTsKICAgICAgICAgICAgICAgICAgICAkbGlua2RlZm4gPSBuZXcgTGlua0RlZm4oKTsKICAgICAgICAgICAgICAgICAgICAkbGlua2RlZm4tPmhyZWYgPSAkY29uZmlnWydhZG1pbl91cmwnXS4nL2VkaXRjb250ZW50LnBocD9jb250ZW50X2lkPScuJGNvbnRlbnQtPklkKCk7CiAgICAgICAgICAgICAgICAgICAgJGxpbmtkZWZuLT50ZXh0ID0gJGNvbnRlbnQtPkdldE5hbWUoKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGxpbmtkZWZuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy8gMi54IHVzZXMgQ21zQ29udGVudE1hbmFnZXIsIHRoZXJlIGlzIG5vIGFic3RyYWN0ZWQgbWV0aG9kIHRvIGdldCB0aGUgZWRpdCB1cmwuCiAgICAgICAgICAgICAgICAgICAgLy8gc28gd2UgZ2V0IHRoZSBjb250ZW50IG1hbmFnZXIgbW9kdWxlCiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHVzIGl0J3MgY3JlYXRlIHVybCBtZXRob2Qgd2l0aCB0aGUgYWRtaW5fZWRpdGNvbnRlbnQgYWN0aW9uLCBhbmQgYSBjb250ZW50X2lkIHBhcmFtCiAgICAgICAgICAgICAgICAgICAgJG1vZCA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0NNU0NvbnRlbnRNYW5hZ2VyJyk7CiAgICAgICAgICAgICAgICAgICAgJGxpbmtkZWZuID0gbmV3IExpbmtEZWZuKCk7CiAgICAgICAgICAgICAgICAgICAgJGxpbmtkZWZuLT5ocmVmID0gJG1vZC0+Y3JlYXRlX3VybCgnbTFfJywnYWRtaW5fZWRpdGNvbnRlbnQnLCcnLGFycmF5KCdjb250ZW50X2lkJz0+JGtleTMpKTsKICAgICAgICAgICAgICAgICAgICAkbGlua2VkZm4tPnRleHQgPSAkY29udGVudC0+R2V0TmFtZSgpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAkbGlua2RlZm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ3N0eWxlc2hlZXQnOgogICAgICAgIGNhc2UgJ3RlbXBsYXRlJzoKICAgICAgICAgICAgc3RhY2tfdHJhY2UoKTsKICAgICAgICAgICAgZGllKCdpbmNvbXBsZXRlJyk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oX19DTEFTU19fLicgZG9lcyBub3Qga25vdyBob3cgdG8gaGFuZGxlIGNvcmUgZGF0YXJlZnMgd2hlcmUga2V5MiBpcyAnLiRrZXkyKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgIH0KfQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/LinkDefinition/class.DataRef.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBEYXRhUmVmIHBhcnQgb2YgYSBsaW5rIGRlZmluaXRpb24uCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBDb21tdW5pY2F0aW9ucwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCm5hbWVzcGFjZSBDTVNNU0V4dFxMaW5rRGVmaW5pdGlvbjsKCi8qKgogKiBBIGNsYXNzIHRvIGFic3RyYWN0IGEgZGF0YSByZWZlcmVuY2UKICogaS5lOiBhIGNvbnRlbnQgcGFnZSwgc3R5bGVzaGVldCwgb3IgYSBtb2R1bGUgZGF0YSBpdGVtCiAqIHRoaXMgY2FuIHRoZW4gYmUgdXNlZCBieSB0aGUgRGF0YVJlZmVyZW5jZUxpbmtHZW5lcmF0b3Igc3R1ZmYKICogdG8gZ2VuZXJhdGUgbGlua3MgdG8gdGhlc2UgZGF0YSBpdGVtcwogKi8KY2xhc3MgRGF0YVJlZgp7CiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2RhdGEgPSBhcnJheSgna2V5MSc9Pm51bGwsJ2tleTInPT5udWxsLCdrZXkzJz0+bnVsbCwna2V5NCc9Pm51bGwpOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0b3IKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhcm1zIEFuIGFzc29jaWF0aXZlIGFycmF5IG9mIHBhcmFtZXRlcnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRwYXJtcyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgZm9yZWFjaCggJHBhcm1zIGFzICRrZXkgPT4gJHZhbCApIHsKICAgICAgICAgICAgJHRoaXMtPiRrZXkgPSAkdmFsOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fZ2V0KCRrZXkpCiAgICB7CiAgICAgICAgaWYoIGFycmF5X2tleV9leGlzdHMoJGtleSwkdGhpcy0+X2RhdGEpICkgcmV0dXJuICR0aGlzLT5fZGF0YVska2V5XTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fc2V0KCRrZXksJHZhbCkKICAgIHsKICAgICAgICBpZiggIWFycmF5X2tleV9leGlzdHMoJGtleSwkdGhpcy0+X2RhdGEpICkgdGhyb3cgbmV3IFxFeGNlcHRpb24oJGtleS4nIGlzIG5vdCBhbiBpbnZhbGlkIG1lbWJlciBvZiAnLl9fQ0xBU1NfXyk7CiAgICAgICAgJHRoaXMtPl9kYXRhWyRrZXldID0gJHZhbDsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9faXNzZXQoJGtleSkKICAgIHsKICAgICAgICByZXR1cm4gaXNzZXQoJHRoaXMtPl9kYXRhWyRrZXldKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdW5zZXQoJGtleSkKICAgIHsKICAgICAgICBpZiggYXJyYXlfa2V5X2V4aXN0cygka2V5LCR0aGlzLT5fZGF0YSkgKSAkdGhpcy0+X2RhdGFbJGtleV0gPSBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICB7CiAgICAgICAgcmV0dXJuICdfX0RhdGFSZWY6OicuaW1wbG9kZSgnOjonLGFycmF5X3ZhbHVlcygkdGhpcy0+X2RhdGEpKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBkYXRhcmVmIG9iamVjdCBmcm9tIGEgc3RyaW5nCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHIgSW5wdXQgc3RyaW5nIG9mIHRoZSBmb3JtYXQgX19EYXRhUmVmOjprZXkxdmFsOjprZXkydmFsOjprZXkzdmFsOjprZXk0dmFsCiAgICAgKiBAcmV0dXJuIERhdGFSZWYKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tU3RyaW5nKCRzdHIpCiAgICB7CiAgICAgICAgaWYoICFzdGFydHN3aXRoKCRzdHIsJ19fRGF0YVJlZjo6JykgKSB0aHJvdyBuZXcgXEV4Y2VwdGlvbignU3RyaW5nIHByb3ZpZGVkIGlzIG5vdCBhIHZhbGlkIGRhdGFyZWYnKTsKICAgICAgICAkcGFydHMgPSBleHBsb2RlKCc6OicsJHN0cik7CiAgICAgICAgaWYoIGNvdW50KCRwYXJ0cykgPCAyIHx8IGNvdW50KCRwYXJ0cykgPiA1ICkgIHRocm93IG5ldyBcRXhjZXB0aW9uKCdTdHJpbmcgcHJvdmlkZWQgaXMgbm90IGEgdmFsaWQgZGF0YXJlZicpOwoKICAgICAgICAkb2JqID0gbmV3IHNlbGYoKTsKICAgICAgICBmb3IoICRpID0gMTsgJGkgPCBjb3VudCgkcGFydHMpOyAkaSsrICkgewogICAgICAgICAgICAka2V5ID0gJ2tleScuJGk7CiAgICAgICAgICAgICRvYmotPiRrZXkgPSAkcGFydHNbJGldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KfSAvLyBlbmQgb2YgY2xhc3MKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/LinkDefinition/class.LinkDefinition.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIGEgTGluayBEZWZpbml0aW9uCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBDb21tdW5pY2F0aW9ucwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCm5hbWVzcGFjZSBDTVNNU0V4dFxMaW5rRGVmaW5pdGlvbjsKCi8qKgogKiBBIGNsYXNzIHdpdGggYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8gY3JlYXRlIGEgbGluayBkZWZpbml0aW9uIDxhPiB0YWcuCiAqCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJGRvd25sb2FkCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJGhyZWYKICogQHByb3BlcnR5IHN0cmluZyAkaHJlZmxhbmcKICogQHByb3BlcnR5IHN0cmluZyAkbWVkaWEKICogQHByb3BlcnR5IHN0cmluZyAkaWQKICogQHByb3BlcnR5IHN0cmluZyAkbmFtZQogKiBAcHJvcGVydHkgc3RyaW5nICRyZWwKICogQHByb3BlcnR5IHN0cmluZyAkdGFyZ2V0CiAqIEBwcm9wZXJ0eSBzdHJpbmcgJHR5cGUKICogQHByb3BlcnR5IHN0cmluZyAkY2xhc3MKICogQHByb3BlcnR5IHN0cmluZyAkYWNjZXNza2V5CiAqIEBwcm9wZXJ0eSBzdHJpbmcgJGNvbnRlbnRlZGl0YWJsZQogKiBAcHJvcGVydHkgc3RyaW5nICRjb250ZXh0bWVudQogKiBAcHJvcGVydHkgc3RyaW5nICRkaXIKICogQHByb3BlcnR5IHN0cmluZyAkZHJhZ2dhYmxlCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJGRyb3B6b25lCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJGhpZGRlbgogKiBAcHJvcGVydHkgc3RyaW5nICRsYW5nCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJHNwZWxsY2hlY2sKICogQHByb3BlcnR5IHN0cmluZyAkc3R5bGUKICogQHByb3BlcnR5IHN0cmluZyAkdGFiaW5kZXgKICogQHByb3BlcnR5IHN0cmluZyAkdGl0bGUKICogQHByb3BlcnR5IHN0cmluZyAkdHJhbnNsYXRlCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJHRleHQgVGhlIHRleHQgdG8gZGlzcGxheSBpbiB0aGUgbGluay4KICovCmNsYXNzIExpbmtEZWZpbml0aW9uCnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfZGF0YSA9IGFycmF5KCk7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RvcgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcGFybXMgQW4gYXJyYXkgb2YgaW5wdXQgcHJvcGVydGllcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRwYXJtcyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgZm9yZWFjaCggJHBhcm1zIGFzICRrZXkgPT4gJHZhbCApIHsKICAgICAgICAgICAgJHRoaXMtPiRrZXkgPSAkdmFsOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfaXNfdmFsaWRfa2V5KCRrZXkpCiAgICB7CiAgICAgICAgc3dpdGNoKCAka2V5ICkgewogICAgICAgIGNhc2UgJ2Rvd25sb2FkJzoKICAgICAgICBjYXNlICdocmVmJzoKICAgICAgICBjYXNlICdocmVmbGFuZyc6CiAgICAgICAgY2FzZSAnbWVkaWEnOgogICAgICAgIGNhc2UgJ2lkJzoKICAgICAgICBjYXNlICduYW1lJzogLy8gZGVwcmVjYXRlZAogICAgICAgIGNhc2UgJ3JlbCc6CiAgICAgICAgY2FzZSAndGFyZ2V0JzoKICAgICAgICBjYXNlICd0eXBlJzoKICAgICAgICBjYXNlICdjbGFzcyc6CiAgICAgICAgY2FzZSAnYWNjZXNza2V5JzoKICAgICAgICBjYXNlICdjb250ZW50ZWRpdGFibGUnOgogICAgICAgIGNhc2UgJ2NvbnRleHRtZW51JzoKICAgICAgICBjYXNlICdkaXInOgogICAgICAgIGNhc2UgJ2RyYWdnYWJsZSc6CiAgICAgICAgY2FzZSAnZHJvcHpvbmUnOgogICAgICAgIGNhc2UgJ2hpZGRlbic6CiAgICAgICAgY2FzZSAnbGFuZyc6CiAgICAgICAgY2FzZSAnc3BlbGxjaGVjayc6CiAgICAgICAgY2FzZSAnc3R5bGUnOgogICAgICAgIGNhc2UgJ3RhYmluZGV4JzoKICAgICAgICBjYXNlICd0aXRsZSc6CiAgICAgICAgY2FzZSAndHJhbnNsYXRlJzoKICAgICAgICBjYXNlICd0ZXh0JzogLy8gbWFnaWMuLi4gaXQncyB0aGUgdGV4dCBvZiB0aGUgbGluay4KICAgICAgICAgICAgcmV0dXJuIFRSVUU7CgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGlmKCBzdGFydHN3aXRoKCRrZXksJ2RhdGEnKSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYoIHN0YXJ0c3dpdGgoJGtleSwnb24nKSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgka2V5KQogICAgewogICAgICAgIGlmKCAhJHRoaXMtPl9pc192YWxpZF9rZXkoJGtleSkgKSB0aHJvdyBuZXcgXEV4Y2VwdGlvbigka2V5LicgaXMgbm90IGEgdmFsaWQgbWVtYmVyIGZvciAnLl9fQ0xBU1NfXyk7CiAgICAgICAgaWYoIGFycmF5X2tleV9leGlzdHMoJGtleSwkdGhpcy0+X2RhdGEpICkgcmV0dXJuICR0aGlzLT5fZGF0YVska2V5XTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fc2V0KCRrZXksJHZhbCkKICAgIHsKICAgICAgICAvLyBhbnl0aGluZyBzZXQgaGVyZSBtdXN0IGJlIHJlcHJlc2VudGFibGUgYXMgYSBzdHJpbmcKICAgICAgICAkdmFsID0gKHN0cmluZykgJHZhbDsKICAgICAgICBpZiggISR0aGlzLT5faXNfdmFsaWRfa2V5KCRrZXkpICkgdGhyb3cgbmV3IFxFeGNlcHRpb24oJGtleS4nIGlzIG5vdCBhIHZhbGlkIG1lbWJlciBmb3IgJy5fX0NMQVNTX18pOwogICAgICAgICR2YWwgPSAoc3RyaW5nKSAkdmFsOwogICAgICAgICR0aGlzLT5fZGF0YVska2V5XSA9ICR2YWw7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2lzc2V0KCRrZXkpCiAgICB7CiAgICAgICAgaWYoICEkdGhpcy0+X2lzX3ZhbGlkX2tleSgka2V5KSApIHRocm93IG5ldyBcRXhjZXB0aW9uKCRrZXkuJyBpcyBub3QgYSB2YWxpZCBtZW1iZXIgZm9yICcuX19DTEFTU19fKTsKICAgICAgICByZXR1cm4gYXJyYXlfa2V5X2V4aXN0cygka2V5LCR0aGlzLT5fZGF0YSkgJiYgJHRoaXMtPl9kYXRhWyRrZXldICE9IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3Vuc2V0KCRrZXkpCiAgICB7CiAgICAgICAgaWYoICEkdGhpcy0+X2lzX3ZhbGlkX2tleSgka2V5KSApIHRocm93IG5ldyBcRXhjZXB0aW9uKCRrZXkuJyBpcyBub3QgYSB2YWxpZCBtZW1iZXIgZm9yICcuX19DTEFTU19fKTsKICAgICAgICB1bnNldCgkdGhpcy0+X2RhdGFbJGtleV0pOwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kcmF3KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBIHNpbXBsZSBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgY29udGVudHMgb2YgdGhpcyBsaW5rLgogICAgICoKICAgICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWRhdGUoKQogICAgewogICAgICAgIC8vIG9ubHkgcmVxdWlyZWQgcG9ydGlvbiBpcyB0aGUgaHJlZgogICAgICAgIGlmKCAhaXNzZXQoJHRoaXMtPmhyZWYpICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdUaGlzIGxpbmsgZGVmaW5pdGlvbiBpcyBpbnZhbGlkIChubyBocmVmIGF0dHJpYnV0ZSknKTsKICAgICAgICBpZiggIWlzc2V0KCR0aGlzLT50ZXh0KSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVGhpcyBsaW5rIGRlZmluaXRpb24gaXMgaW52YWxpZCAobm8gdGV4dCBhdHRyaWJ1dGUpJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBEcmF3IHRoZSBsaW5rLgogICAgICogQWN0dWFsbHkgaXQganVzdCBvdXRwdXRzIGFuICZsdDthJmd0OyB0YWcuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRyYXcoKQogICAgewogICAgICAgICR0aGlzLT52YWxpZGF0ZSgpOwoKICAgICAgICAkdG1wID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoKCAkdGhpcy0+X2RhdGEgYXMgJGtleSA9PiAkdmFsICkgewogICAgICAgICAgICBpZiggJGtleSA9PSAndGV4dCcgKSBjb250aW51ZTsKICAgICAgICAgICAgJHRtcFtdID0gJGtleS4nPSInLiR2YWwuJyInOwogICAgICAgIH0KICAgICAgICAkb3V0ID0gJzxhICcuaW1wbG9kZSgnICcsJHRtcCkuJz4nLmh0bWxlbnRpdGllcygkdGhpcy0+dGV4dCkuJzwvYT4nOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQp9Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/LinkDefinition/class.LinkDefinitionGeneratorFactory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIGEgTGluayBEZWZpbml0aW9uIEEgZmFjdG9yeSBmb3IgbGluayBkZWZpbml0aW9uIGdlbmVyYXRvcnMuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBDb21tdW5pY2F0aW9ucwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCm5hbWVzcGFjZSBDTVNNU0V4dFxMaW5rRGVmaW5pdGlvbjsKCi8qKgogKiBUaGlzIGlzIGEgZmFjdG9yeSBjbGFzcyB0aGF0IGNhbiBnZW5lcmF0ZSBhIExpbmtEZWZpbml0aW9uR2VuZXJhdG9yIGZvciBhIERhdGFSZWYKICovCmNsYXNzIExpbmtEZWZpbml0aW9uR2VuZXJhdG9yRmFjdG9yeQp7CiAgICAvKioKICAgICAqIEdpdmVuIGEgZGF0YXJlZiBvYmplY3QsIGZpbmQgYW5kIGluc3RhbnRpYXRlIGEgTGlua0RlZmluaXRpb25HZW5lcmF0b3IKICAgICAqIHRoYXQgY2FuIGdlbmVyYXRlIGxpbmtzIGZvciB0aGlzIHR5cGUgb2YgZGF0YXJlZgogICAgICoKICAgICAqIEBwYXJhbSBEYXRhUmVmICRkYXRhcmVmCiAgICAgKiBAcmV0dXJuIExpbmtEZWZpbml0aW9uR2VuZXJhdG9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZ2VuZXJhdG9yKERhdGFSZWYgJGRhdGFyZWYpCiAgICB7CiAgICAgICAgaWYoIHN0cnRvbG93ZXIoJGRhdGFyZWYtPmtleTEpID09ICdwYWdlJyAmJiAoaW50KSAkZGF0YXJlZi0+a2V5MiA+IDAgKSB7CiAgICAgICAgICAgICRkYXRhcmVmLT5rZXkzID0gJGRhdGFyZWYtPmtleTI7CiAgICAgICAgICAgICRkYXRhcmVmLT5rZXkyID0gJ1BhZ2UnOwogICAgICAgICAgICAkZGF0YXJlZi0+a2V5MSA9ICdDb3JlJzsKICAgICAgICB9CgogICAgICAgIGlmKCBpbl9hcnJheSgkZGF0YXJlZi0+a2V5MSxhcnJheSgnQ29yZScsJ2NvcmUnLCdDT1JFJywnQ01TTVMnKSkgKSB7CiAgICAgICAgICAgICRvYmogPSBuZXcgQ29yZUxpbmtEZWZpbml0aW9uR2VuZXJhdG9yOwogICAgICAgICAgICAkb2JqLT5zZXRfZGF0YXJlZigkZGF0YXJlZik7CiAgICAgICAgICAgIHJldHVybiAkb2JqOwogICAgICAgIH0KCiAgICAgICAgLy8gYXNzdW1lIGtleTEgaXMgYSBtb2R1bGUgbmFtZQogICAgICAgICRtb2QgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRkYXRhcmVmLT5rZXkxKTsKICAgICAgICBpZiggaXNfb2JqZWN0KCRtb2QpICkgewogICAgICAgICAgICBpZiggbWV0aG9kX2V4aXN0cyggJG1vZCwgJ2dldERlZmluaXRpb25HZW5lcmF0b3InICkgKSB7CiAgICAgICAgICAgICAgICAkb2JqID0gJG1vZC0+Z2V0RGVmaW5pdGlvbkdlbmVyYXRvciggJGRhdGFyZWYgKTsKICAgICAgICAgICAgICAgIHJldHVybiAkb2JqOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkc3RyID0gJGRhdGFyZWYtPmtleTEuJ1xMaW5rRGVmaW5pdGlvbkdlbmVyYXRvcic7CiAgICAgICAgICAgIGlmKCBjbGFzc19leGlzdHMoJHN0cikgKSB7CiAgICAgICAgICAgICAgICAkb2JqID0gbmV3ICRzdHI7CiAgICAgICAgICAgICAgICAkb2JqLT5zZXRfZGF0YXJlZigkZGF0YXJlZik7CiAgICAgICAgICAgICAgICByZXR1cm4gJG9iajsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHN0ciA9ICRkYXRhcmVmLT5rZXkxLidfTGlua0RlZmluaXRpb25HZW5lcmF0b3InOwogICAgICAgICAgICBpZiggY2xhc3NfZXhpc3RzKCRzdHIpICkgewogICAgICAgICAgICAgICAgJG9iaiA9IG5ldyAkc3RyOwogICAgICAgICAgICAgICAgJG9iai0+c2V0X2RhdGFyZWYoJGRhdGFyZWYpOwogICAgICAgICAgICAgICAgcmV0dXJuICRvYmo7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ291bGQgbm90IGZpbmQgYW4gYXBwcm9wcmlhdGUgbGluayBnZW5lcmF0b3IgZm9yIGRhdGEgZGVmaW5pdGlvbnMgb2YgdHlwZSAnLiRkYXRhcmVmLT5rZXkxKTsKICAgIH0KfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/LinkDefinition/interface.LinkDefinitionGenerator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIGFuIGludGVyZmFjZSB0byBjbGFzc2VzIHRoYXQgY3JlYXRlIGxpbmsgZGVmaW5pdGlvbnMuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBDb21tdW5pY2F0aW9ucwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCm5hbWVzcGFjZSBDTVNNU0V4dFxMaW5rRGVmaW5pdGlvbjsKCi8qKgogKiBBbiBpbnRlcmZhY2UgZGVmaW5pdGlvbiB0byBjbGFzc2VzIHRoYXQgY3JlYXRlIGxpbmsgZGVmaW5pdGlvbnMuCiAqLwppbnRlcmZhY2UgTGlua0RlZmluaXRpb25HZW5lcmF0b3IKewogICAgLyoqCiAgICAgKiBTZXQgdGhlIERhdGEgcmVmZXJlbmNlIGludG8gdGhlIG9iamVjdAogICAgICoKICAgICAqIEBwYXJhbSBcQ01TTVNFeHRcRGF0YVJlZiAkZGF0YXJlZgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfZGF0YXJlZihEYXRhUmVmICRkYXRhcmVmKTsKCiAgICAvKioKICAgICAqIEdldCBhIGxpbmsgZGVmaW5pdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIFxDTVNNU0V4dFxMaW5rRGVmaW5pdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2xpbmtkZWZpbml0aW9uKCk7Cn0KCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/module</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/module/abstract.action.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KbmFtZXNwYWNlIENNU01TRXh0XG1vZHVsZTsNCg0KdXNlIENNU01TRXh0XFhUTW9kdWxlOw0KDQovKioNCiAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIG1vZHVsZSBhY3Rpb25zLg0KICoNCiAqIEBwcm9wZXJ0eSBYVE1vZHVsZSAkbW9kdWxlIFRoZSBYVE1vZHVsZSBpbnN0YW5jZSBmb3IgYWNjZXNzaW5nIG1vZHVsZS1zcGVjaWZpYyBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzLg0KICogQG1ldGhvZCBtaXhlZCBnZXQ8bmFtZT4oKSBNYWdpYyBtZXRob2QgdG8gZ2V0IGEgcHJvcGVydHkgZnJvbSB0aGUgbW9kdWxlIGJ5IGNhbGxpbmcgYSBnZXR0ZXIgbWV0aG9kLg0KICogQG1ldGhvZCB2b2lkIHNldDxuYW1lPihtaXhlZCAkdmFsdWUpIE1hZ2ljIG1ldGhvZCB0byBzZXQgYSBwcm9wZXJ0eSBpbiB0aGUgbW9kdWxlIGJ5IGNhbGxpbmcgYSBzZXR0ZXIgbWV0aG9kLg0KICovDQphYnN0cmFjdCBjbGFzcyBhY3Rpb24NCnsNCiAgcHJvdGVjdGVkIFhUTW9kdWxlICRfbW9kdWxlOw0KICANCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFhUTW9kdWxlICRtb2R1bGUpDQogIHsNCiAgICAkdGhpcy0+X21vZHVsZSA9ICRtb2R1bGU7DQogICAgJHRoaXMtPl9tb2R1bGUtPmFjdGlvbl9jbGFzc19jYWxsZWQgPSBUUlVFOw0KICB9DQogIA0KICAvKioNCiAgICogTWFnaWMgbWV0aG9kIHRvIGdldCBhIHByb3BlcnR5IGZyb20gdGhlIG1vZHVsZS4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuDQogICAqIEByZXR1cm4gbWl4ZWQgVGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBvciByZXN1bHQgb2YgdGhlIGdldHRlciBtZXRob2QuDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJG5hbWUpDQogIHsNCiAgICBpZiAoJ21vZHVsZScgPT09ICRuYW1lKQ0KICAgIHsNCiAgICAgIHJldHVybiAkdGhpcy0+X21vZHVsZTsNCiAgICB9DQogICAgDQogICAgJG1ldGhvZCA9ICdnZXQnIC4gXHVjZmlyc3QoJG5hbWUpOw0KICAgIHJldHVybiAkdGhpcy0+X21vZHVsZS0+eyRtZXRob2R9KCk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBNYWdpYyBtZXRob2QgdG8gc2V0IGEgcHJvcGVydHkgaW4gdGhlIG1vZHVsZS4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuDQogICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgVGhlIHZhbHVlIHRvIHNldC4NCiAgICogQHRocm93cyBcTG9naWNFeGNlcHRpb24gaWYgdHJ5aW5nIHRvIHNldCB0aGUgJ21vZHVsZScgcHJvcGVydHkuDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gX19zZXQoJG5hbWUsICR2YWx1ZSkNCiAgew0KICAgIGlmICgnbW9kdWxlJyA9PT0gJG5hbWUpDQogICAgew0KICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignbW9kdWxlIGlzIG5vdCBhIHNldHRhYmxlIG1lbWJlciBvZiAnIC4gX19DTEFTU19fKTsNCiAgICB9DQogICAgDQogICAgJG1ldGhvZCA9ICdzZXQnIC4gXHVjZmlyc3QoJG5hbWUpOw0KICAgICR0aGlzLT5fbW9kdWxlLT57JG1ldGhvZH0oJHZhbHVlKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXMtPl9tb2R1bGU7DQogIH0NCiAgDQogIC8qKg0KICAgKiBNYWdpYyBtZXRob2QgdG8gY2hlY2sgaWYgYSBwcm9wZXJ0eSBpcyBzZXQuDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5Lg0KICAgKiBAcmV0dXJuIGJvb2wgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgc2V0LCBmYWxzZSBvdGhlcndpc2UuDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gX19pc3NldCgkbmFtZSkNCiAgew0KICAgIHJldHVybiBpc3NldCgkdGhpcy0+X21vZHVsZS0+eyRuYW1lfSk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBEeW5hbWljYWxseSBzZXRzIHByb3BlcnRpZXMgZnJvbSB0aGUgJGFyZ3MgYXJyYXkgZm9yIGVhc3kgYWNjZXNzIHdpdGhpbiB0aGUgY2xhc3MuDQogICAqDQogICAqIEBwYXJhbSBhcnJheSAkYXJncyBUaGUgYXJndW1lbnRzIHRvIHBvcHVsYXRlIGFzIHByb3BlcnRpZXMuDQogICAqLw0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gcG9wdWxhdGVQcm9wZXJ0aWVzKGFycmF5ICRhcmdzKQ0KICB7DQogICAgZm9yZWFjaCAoJGFyZ3MgYXMgJGtleSA9PiAkdmFsdWUpDQogICAgew0KICAgICAgLy8gQXZvaWQgb3ZlcndyaXRpbmcgZXhpc3RpbmcgcHJvdGVjdGVkIHByb3BlcnRpZXMgbGlrZSAkX21vZHVsZQ0KICAgICAgaWYgKCFccHJvcGVydHlfZXhpc3RzKCR0aGlzLCAka2V5KSkNCiAgICAgIHsNCiAgICAgICAgJHRoaXMtPiRrZXkgPSAkdmFsdWU7DQogICAgICB9DQogICAgfQ0KICB9DQogIA0KICAvKioNCiAgICogQmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBfX2ludm9rZSB0byBwb3B1bGF0ZSBwcm9wZXJ0aWVzLg0KICAgKiBEZXJpdmVkIGNsYXNzZXMgc2hvdWxkIGNhbGwgcGFyZW50OjpfX2ludm9rZSgkYXJncykgZm9yIGNvbnNpc3RlbmN5Lg0KICAgKg0KICAgKiBAcGFyYW0gYXJyYXkgJGFyZ3MgVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGFjdGlvbi4NCiAgICogQHJldHVybiB2b2lkDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gX19pbnZva2UoYXJyYXkgJGFyZ3MpDQogIHsNCiAgICAkdGhpcy0+cG9wdWxhdGVQcm9wZXJ0aWVzKCRhcmdzKTsNCiAgfQ0KfQ0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/module/abstract.module_data.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcbW9kdWxlOw0KDQoNCnVzZSBDTVNNU0V4dFxYVE1vZHVsZTsNCg0KYWJzdHJhY3QgY2xhc3MgbW9kdWxlX2RhdGENCnsNCiAgcHVibGljIGZ1bmN0aW9uIGdldFByb3BlcnR5KFhUTW9kdWxlICRtb2R1bGUpDQogIHsNCiAgICAkcHJvcGVydHlfbmFtZSA9ICR0aGlzLT5fZ2V0X3Byb3BlcnR5X25hbWUoKTsNCiAgICByZXR1cm4gJG1vZHVsZS0+eyRwcm9wZXJ0eV9uYW1lfTsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIHNldFByb3BlcnR5KFhUTW9kdWxlICRtb2R1bGUsICR2YWx1ZSkNCiAgew0KICAgICRwcm9wZXJ0eV9uYW1lID0gJHRoaXMtPl9nZXRfcHJvcGVydHlfbmFtZSgpOw0KICAgICRtb2R1bGUtPnskcHJvcGVydHlfbmFtZX0gPSAkdmFsdWU7DQogICAgDQogICAgcmV0dXJuICRtb2R1bGU7DQogIH0NCiAgDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfZ2V0X3Byb3BlcnR5X25hbWUoKQ0KICB7DQogICAgLy8gR2V0IHRoZSBmdWxseSBxdWFsaWZpZWQgY2xhc3MgbmFtZQ0KICAgICRjbGFzc05hbWUgICAgICA9IHN0YXRpYzo6Y2xhc3M7DQogICAgLy8gU3BsaXQgYnkgdW5kZXJzY29yZQ0KICAgICRjbGFzc05hbWVQYXJ0cyA9IFxleHBsb2RlKCdfJywgJGNsYXNzTmFtZSk7DQogICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBhcnJheTogc2hvdWxkIGJlICdtZCcgdG8gcmVtb3ZlIHRoZSBmdWxsICdtZF8nDQogICAgXGFycmF5X3NoaWZ0KCRjbGFzc05hbWVQYXJ0cyk7DQogICAgDQogICAgLy8gUmVjb25zdHJ1Y3QgdGhlIHJlbWFpbmluZyBwYXJ0cw0KICAgIHJldHVybiBcaW1wbG9kZSgnXycsICRjbGFzc05hbWVQYXJ0cyk7DQogIH0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/module/class.actions_handler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcbW9kdWxlOw0KDQoNCnVzZSBDTVNNU0V4dFxYVE1vZHVsZTsNCg0KY2xhc3MgYWN0aW9uc19oYW5kbGVyDQp7DQogIHZhciBYVE1vZHVsZSAkX21vZHVsZTsNCiAgDQogIC8qKg0KICAgKiBAcGFyYW0gWFRNb2R1bGUgJG1vZHVsZQ0KICAgKi8NCiAgZnVuY3Rpb24gX19jb25zdHJ1Y3QoWFRNb2R1bGUgJG1vZHVsZSkgIHsgJHRoaXMtPl9tb2R1bGUgPSAkbW9kdWxlOyB9DQogIA0KICAvKioNCiAgICogR2V0dGVyOiBpZiB0aGUgbmFtZSBpcyAnbW9kdWxlJyBpdCByZXR1cm5zIHRoZSBtb2R1bGUgaW5zdGFuY2UNCiAgICogb3RoZXJ3aXNlIHBhc3NlcyB0aGUgY2FsbCB0byB0aGUgbW9kdWxlDQogICAqIHR1cm5zIHRoZSBwcm9wZXJ0eSBpbnRvIGEgbWV0aG9kIGNhbGwgaWYgaXQgZXhpc3RzDQogICAqIG90aGVyd2lzZSBpdCBmb3JjZXMgdGhlIF9jYWxsRXh0ZXJuYWxNZXRob2QgdG8gYmUgY2FsbGVkIG9uIHRoZSBtb2R1bGUgZGF0YQ0KICAgKiB3aGljaCBjYW4gYmUgdmFsaWRhdGVkIGluIG11bHRpcGxlIHdheXMgb24gdGhlIG1vZHVsZV9kYXRhIGRlcml2ZWQgY2xhc3MNCiAgICogQHNlZSBfY2FsbEV4dGVybmFsTWV0aG9kDQogICAqDQogICAqIEBwYXJhbSAkbmFtZQ0KICAgKg0KICAgKiBAcmV0dXJuIFxDTVNNU0V4dFxYVE1vZHVsZXxtaXhlZA0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIF9fZ2V0KCRuYW1lKQ0KICB7DQogICAgaWYoJ21vZHVsZScgPT09ICRuYW1lKSB7IHJldHVybiAkdGhpcy0+X21vZHVsZTsgfQ0KICAgIA0KICAgICRtZXRob2QgPSAnZ2V0JyAuIFx1Y2ZpcnN0KCRuYW1lKTsNCiAgICANCiAgICBpZihcbWV0aG9kX2V4aXN0cygkdGhpcy0+X21vZHVsZSwgJG1ldGhvZCkpDQogICAgew0KICAgICAgcmV0dXJuIFxjYWxsX3VzZXJfZnVuY19hcnJheShbJHRoaXMtPl9tb2R1bGUsICRtZXRob2RdLCBbXSk7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkdGhpcy0+X21vZHVsZS0+eyRtZXRob2R9KCk7DQogIH0NCg0KICAvKioNCiAgICogY2hhaW5hYmxlIHNldHRlciBmb3IgdGhlIG1vZHVsZQ0KICAgKiB0dXJucyB0aGUgcHJvcGVydHkgaW50byBhIG1ldGhvZCBjYWxsIGlmIGl0IGV4aXN0cw0KICAgKiBvdGhlcndpc2UgaXQgZm9yY2VzIHRoZSBfY2FsbEV4dGVybmFsTWV0aG9kIHRvIGJlIGNhbGxlZCBvbiB0aGUgbW9kdWxlIGRhdGENCiAgICogd2hpY2ggY2FuIGJlIHZhbGlkYXRlZCBpbiBtdWx0aXBsZSB3YXlzIG9uIHRoZSBtb2R1bGVfZGF0YSBkZXJpdmVkIGNsYXNzDQogICAqIEBzZWUgX2NhbGxFeHRlcm5hbE1ldGhvZA0KICAgKg0KICAgKiBAcGFyYW0gJG5hbWUNCiAgICogQHBhcmFtICR2YWx1ZQ0KICAgKg0KICAgKiBAcmV0dXJuIG1peGVkDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gX19zZXQoJG5hbWUsICR2YWx1ZSkNCiAgew0KICAgICRtZXRob2QgPSAnc2V0JyAuIFx1Y2ZpcnN0KCRuYW1lKTsNCiAgICANCiAgICBpZihcbWV0aG9kX2V4aXN0cygkdGhpcy0+X21vZHVsZSwgJG1ldGhvZCkpDQogICAgew0KICAgICAgcmV0dXJuIFxjYWxsX3VzZXJfZnVuYyhbJHRoaXMtPl9tb2R1bGUsICRtZXRob2RdLCAkdmFsdWUpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHRoaXMtPl9tb2R1bGUtPnskbWV0aG9kfSgkdmFsdWUpOw0KICB9DQoNCiAgcHVibGljIGZ1bmN0aW9uIF9faXNzZXQoJG5hbWUpDQogIHsNCiAgICByZXR1cm4gaXNzZXQoJHRoaXMtPl9tb2R1bGUtPnskbmFtZX0pOw0KICB9DQogIA0KICANCiAgLyoqDQogICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgJG5hbWUgICB0aGUgbmFtZSBvZiB0aGUgYWN0aW9uDQogICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgJGFyZ3MgICB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgYWN0aW9uDQogICAqDQogICAqIEByZXR1cm4gJHRoaXN8bWl4ZWQNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBfY2FsbEV4dGVybmFsTWV0aG9kKCRuYW1lLCAkYXJncykNCiAgew0KICAgICMgbWV0aG9kcyAtIGlmIHRoZXkgZXhpc3Qgb24gdGhlICRtb2R1bGUgb2JqZWN0IGNhbGwgdGhlbQ0KICAgIGlmKFxtZXRob2RfZXhpc3RzKCR0aGlzLT5fbW9kdWxlLCAkbmFtZSkpDQogICAgew0KICAgICAgcmV0dXJuIFxjYWxsX3VzZXJfZnVuY19hcnJheShbJHRoaXMtPl9tb2R1bGUsICRuYW1lXSwgJGFyZ3MpOw0KICAgIH0NCiAgICANCiAgICAkbmFtZXNwYWNlID0gJHRoaXMtPl9tb2R1bGUtPkdldE5hbWUoKTsNCiAgICANCiAgICAjIG90aGVyd2lzZSAgZ28gZm9yIGFuIGFjdGlvbiBjbGFzcyBhbmQgY2FsbCBpdCBpZiBpdCBleGlzdHMNCiAgICAkY2xhc3MgICAgPSAkbmFtZXNwYWNlIC4gJ1xcYWN0aW9uXycgLiAkbmFtZTsNCg0KICAgIGlmKFxjbGFzc19leGlzdHMoJGNsYXNzKSkNCiAgICB7DQogICAgICAkb2JqID0gbmV3ICRjbGFzcygkdGhpcy0+X21vZHVsZSk7DQogICAgICANCiAgICAgICNyZXR1cm4gXGNhbGxfdXNlcl9mdW5jX2FycmF5KFskb2JqLCAnZG8nXSwgJGFyZ3MpOw0KICAgICAgcmV0dXJuICRvYmooLi4uJGFyZ3MpOw0KICAgIH0NCiAgICANCiAgICAjIGlmIGl0IGRvZXNuJ3QgaXQgbWF5IGp1c3QgYmUgYSBnZXR0ZXIgb3Igc2V0dGVyIG1ldGhvZCBzby4uLg0KICAgICMgQ2hlY2sgaWYgdGhlIG1ldGhvZCBtYXRjaGVzIHRoZSBwYXR0ZXJuIGZvciBnZXR0ZXIgb3Igc2V0dGVyDQogICAgaWYoXHByZWdfbWF0Y2goJy9eKHNldHxnZXQpKFtBLVpdLiopJC8nLCAkbmFtZSwgJG1hdGNoZXMpKQ0KICAgIHsNCiAgICAgICRwcm9wZXJ0eSA9IFxsY2ZpcnN0KCRtYXRjaGVzWzJdKTsNCg0KICAgICAgJGNsYXNzICAgID0gJG5hbWVzcGFjZSAuICdcXG1kXycgLiBcdWNmaXJzdCgkcHJvcGVydHkpOw0KICAgICAgDQogICAgICBpZihcY2xhc3NfZXhpc3RzKCRjbGFzcykpDQogICAgICB7DQogICAgICAgICRvYmogPSBuZXcgJGNsYXNzKCk7DQogICAgICAgIA0KICAgICAgICBpZignZ2V0JyA9PT0gJG1hdGNoZXNbMV0pDQogICAgICAgIHsNCiAgICAgICAgICByZXR1cm4gJG9iai0+Z2V0UHJvcGVydHkoJHRoaXMtPl9tb2R1bGUpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBpZignc2V0JyA9PT0gJG1hdGNoZXNbMV0gJiYgaXNzZXQoJGFyZ3NbMF0pKQ0KICAgICAgICB7DQogICAgICAgICAgJG9iai0+c2V0UHJvcGVydHkoJHRoaXMtPl9tb2R1bGUsICRhcmdzWzBdKTsNCiAgICAgICAgICANCiAgICAgICAgICByZXR1cm4gJHRoaXMtPl9tb2R1bGU7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIA0KICAgICAgaWYoJ2dldCcgPT09ICRtYXRjaGVzWzFdKQ0KICAgICAgew0KICAgICAgICByZXR1cm4gJHRoaXMtPl9tb2R1bGUtPiRwcm9wZXJ0eTsgIC8vIFVzZSB0aGUgc3RhbmRhcmQgcHJvcGVydHkgYWNjZXNzDQogICAgICB9DQogICAgICANCiAgICAgIGlmKCdzZXQnID09PSAkbWF0Y2hlc1sxXSAmJiBpc3NldCgkYXJnc1swXSkpDQogICAgICB7DQogICAgICAgICR0aGlzLT5fbW9kdWxlLT4kcHJvcGVydHkgPSAkYXJnc1swXTsgIC8vIFVzZSB0aGUgc3RhbmRhcmQgcHJvcGVydHkgYWNjZXNzDQogICAgICAgIA0KICAgICAgICByZXR1cm4gJHRoaXMtPl9tb2R1bGU7DQogICAgICB9DQogICAgfQ0KICAgIA0KICAgIHJldHVybiBudWxsOw0KICB9DQogIA0KDQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/module/class.api.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcbW9kdWxlOw0KDQoNCmNsYXNzIGFwaSBleHRlbmRzIHJlZmVyZW5jZQ0Kew0KICAvKioNCiAgICogTWFnaWMgbWV0aG9kIHRvIGNhbGwgbWV0aG9kcyBvbiB0aGUgbW9kdWxlIGluc3RhbmNlIHVzaW5nIHJlZmxlY3Rpb24uDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZCBUaGUgbWV0aG9kIG5hbWUuDQogICAqIEBwYXJhbSBhcnJheSAgJGFyZ3MgICBUaGUgbWV0aG9kIGFyZ3VtZW50cy4NCiAgICoNCiAgICogQHJldHVybiBtaXhlZCBUaGUgbWV0aG9kIHJlc3VsdC4NCiAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBJZiB0aGUgbWV0aG9kIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBpbmNsdWRlZCBiYXNlZCBvbiBkb2NzdHJpbmcuDQogICAqIEB0aHJvd3MgXFJlZmxlY3Rpb25FeGNlcHRpb24NCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBfX2NhbGwoJG1ldGhvZCwgJGFyZ3MpDQogIHsNCiAgICAkbW9kID0gJHRoaXMtPl9nZXRfbW9kKCk7DQogICAgDQogICAgaWYoIVxtZXRob2RfZXhpc3RzKCRtb2QsICRtZXRob2QpKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiTWV0aG9kICRtZXRob2QgZG9lcyBub3QgZXhpc3Qgb24gbW9kdWxlIHskdGhpcy0+X21vZHVsZV9uYW1lfSIpOw0KICAgIH0NCiAgICANCiAgICAkcmVmbGVjdGlvbkNsYXNzICA9IG5ldyBcUmVmbGVjdGlvbkNsYXNzKCRtb2QpOw0KICAgICRyZWZsZWN0aW9uTWV0aG9kID0gJHJlZmxlY3Rpb25DbGFzcy0+Z2V0TWV0aG9kKCRtZXRob2QpOw0KICAgIA0KICAgIGlmKCEkdGhpcy0+aXNNZXRob2RJbmNsdWRlZCgkcmVmbGVjdGlvbk1ldGhvZCkpDQogICAgew0KICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCJNZXRob2QgJG1ldGhvZCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIEFQSSBvZiBtb2R1bGUgeyR0aGlzLT5fbW9kdWxlX25hbWV9LiIpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHJlZmxlY3Rpb25NZXRob2QtPmludm9rZUFyZ3MoJG1vZCwgJGFyZ3MpOw0KICB9DQogIA0KICAvKioNCiAgICogQ2hlY2sgaWYgYSBtZXRob2QgaXMgaW5jbHVkZWQgYmFzZWQgb24gaXRzIGRvY3N0cmluZy4NCiAgICoNCiAgICogQHBhcmFtIFxSZWZsZWN0aW9uTWV0aG9kICRtZXRob2QgVGhlIG1ldGhvZCB0byBjaGVjay4NCiAgICoNCiAgICogQHJldHVybiBib29sIFRydWUgaWYgdGhlIG1ldGhvZCBpcyBpbmNsdWRlZCwgZmFsc2Ugb3RoZXJ3aXNlLg0KICAgKi8NCiAgcHJpdmF0ZSBmdW5jdGlvbiBpc01ldGhvZEluY2x1ZGVkKFxSZWZsZWN0aW9uTWV0aG9kICRtZXRob2QpDQogIHsNCiAgICAkZG9jQ29tbWVudCA9ICRtZXRob2QtPmdldERvY0NvbW1lbnQoKTsNCiAgICANCiAgICBpZihGQUxTRSA9PT0gJGRvY0NvbW1lbnQpIHsgcmV0dXJuIEZBTFNFOyB9DQogICAgDQogICAgLy8gQ2hlY2sgZm9yIGEgc3BlY2lmaWMgdGFnIGluIHRoZSBkb2NzdHJpbmcsIGUuZy4sIEBhcGkNCiAgICByZXR1cm4gRkFMU0UgIT09IFxzdHJwb3MoJGRvY0NvbW1lbnQsICdAYXBpJyk7DQogIH0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/module/class.backend_css_manager.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcbW9kdWxlOw0KDQoNCmNsYXNzIGJhY2tlbmRfY3NzX21hbmFnZXINCnsNCiAgcHJpdmF0ZSAkX2NvbmZpZyA9IE5VTEw7DQogIA0KICBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY29uZmlnID0gTlVMTCkNCiAgew0KICAgICR0aGlzLT5fc2V0X2NvbmZpZ19kZWZhdWx0KCk7DQogICAgDQogICAgaWYoIFxpc19hcnJheSgkY29uZmlnKSApDQogICAgew0KICAgICAgJHRoaXMtPl9jb25maWcgPSBcYXJyYXlfbWVyZ2UoJHRoaXMtPl9jb25maWcsICRjb25maWcpOw0KICAgIH0NCiAgICANCiAgICAkdGhpcy0+X3ZhbGlkYXRlX2NvbmZpZygpOw0KICAgIA0KICB9DQogIA0KICBwcml2YXRlIGZ1bmN0aW9uIF9zZXRfY29uZmlnX2RlZmF1bHQoKSA6IHZvaWQNCiAgew0KICAgICR0aGlzLT5fY29uZmlnID0gWw0KICAgICAgJ21vZCcgPT4gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnJyksDQogICAgXTsNCiAgfQ0KICANCiAgcHJpdmF0ZSBmdW5jdGlvbiBfdmFsaWRhdGVfY29uZmlnKCkgOiB2b2lkDQogIHsNCiAgICBpZiggIVxpc19hcnJheSgkdGhpcy0+X2NvbmZpZykgKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbihfX0NMQVNTX18gLiAnOiBjb25maWcgbXVzdCBiZSBhbiBhcnJheScpOw0KICAgIH0NCiAgICANCiAgICBpZiggIVxhcnJheV9rZXlfZXhpc3RzKCdtb2QnLCAkdGhpcy0+X2NvbmZpZykgKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbihfX0NMQVNTX18gLiAnOiBjb25maWcgbXVzdCBjb250YWluIG1vZCcpOw0KICAgIH0NCiAgICANCiAgICBpZiggIVxpc19hKCR0aGlzLT5fY29uZmlnWydtb2QnXSwgJ1xDTVNNU0V4dFxYVE1vZHVsZScpKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbihfX0NMQVNTX18NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICc6IGNvbmZpZ1ttb2RdIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgXENNU01TRXh0XFhUTW9kdWxlLCAnDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiBcZ2V0X2NsYXNzKCR0aGlzLT5fY29uZmlnWydtb2QnXSkgLiAnIGdpdmVuIHdoaWNoIGV4dGVuZHMgJw0KICAgICAgLiBcYXJyYXlfa2V5cyhcY2xhc3NfcGFyZW50cygkdGhpcy0+X2NvbmZpZ1snbW9kJ10pKVswXSk7DQogICAgfQ0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3RhZ3MoKSA6IHN0cmluZw0KICB7DQogICAgJG91dCA9ICcnOw0KICAgIA0KICAgICRtb2QgPSAkdGhpcy0+X2NvbmZpZ1snbW9kJ107DQogICAgJGNtc2V4dCA9ICRtb2QtPmdldF94dCgpOw0KICAgIA0KICAgICRmbiA9ICRjbXNleHQtPmZpbmRfbW9kdWxlX2ZpbGUoJ2Nzcy9hZG1pbl9zdHlsZXMuY3NzJyk7DQogICAgDQogICAgaWYoJGZuKQ0KICAgIHsNCiAgICAgICRjc3MgPSBcc3RyX3JlcGxhY2UoXENNU19ST09UX1BBVEgsIFxDTVNfUk9PVF9VUkwsICRmbik7DQogICAgICAkb3V0IC49ICc8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IicgLiAkY3NzIC4gJyIvPicgLiAiXG4iOw0KICAgIH0NCiAgICANCiAgICAkZm4gPSAkbW9kLT5maW5kX21vZHVsZV9maWxlKCdjc3MvJyAuICRtb2QtPmdldF9hY3Rpb25fbmFtZSgpIC4gJy5jc3MnKTsNCiAgICANCiAgICBpZigkZm4pDQogICAgew0KICAgICAgJGNzcyA9IFxzdHJfcmVwbGFjZShcQ01TX1JPT1RfUEFUSCwgXENNU19ST09UX1VSTCwgJGZuKTsNCiAgICAgICRvdXQgLj0gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iJyAuICRjc3MgLiAnIi8+JyAuICJcbiI7DQogICAgfQ0KICAgIA0KICAgICRtb2RfY29uZmlnID0gJG1vZC0+R2V0RXh0ZW5kZWRDb25maWcoKTsNCiAgICANCiAgICBpZigkbW9kX2NvbmZpZ1snYWRkX2JhY2tzbGFzaCddKQ0KICAgIHsNCiAgICAgICMgYWRkIG91ciBjc3MgdG9vbGtpdA0KICAgICAgJGZuID0gJGNtc2V4dC0+R2V0TW9kdWxlVVJMUGF0aCgpIC4gJy9jc3MvYmFja3NsYXNoL2JhY2tzbGFzaC5jc3MnOw0KICAgICAgDQogICAgICBpZigkZm4pDQogICAgICB7DQogICAgICAgICRjc3MgPSBcc3RyX3JlcGxhY2UoXENNU19ST09UX1BBVEgsIFxDTVNfUk9PVF9VUkwsICRmbik7DQogICAgICAgICRvdXQgLj0gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iJyAuICRjc3MgLiAnIi8+JyAuICJcbiI7DQogICAgICB9DQogICAgfQ0KICAgIA0KICAgIGlmKCRtb2RfY29uZmlnWydhZGRfdWlraXQnXSkNCiAgICB7DQogICAgICAjIGFkZCB1aWtpdCBjc3MgdG9vbGtpdA0KICAgICAgJGZuID0gJGNtc2V4dC0+R2V0TW9kdWxlVVJMUGF0aCgpIC4gJy9jc3MvdWlraXQvdWlraXQuY3NzJzsNCiAgICAgIA0KICAgICAgaWYoJGZuKQ0KICAgICAgew0KICAgICAgICAkY3NzID0gXHN0cl9yZXBsYWNlKFxDTVNfUk9PVF9QQVRILCBcQ01TX1JPT1RfVVJMLCAkZm4pOw0KICAgICAgICAkb3V0IC49ICc8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IicgLiAkY3NzIC4gJyIvPicgLiAiXG4iOw0KICAgICAgfQ0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJG91dDsNCiAgfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/module/class.backend_js_manager.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcbW9kdWxlOw0KDQoNCmNsYXNzIGJhY2tlbmRfanNfbWFuYWdlcg0Kew0KICBwcml2YXRlICRfY29uZmlnID0gTlVMTDsNCiAgDQogIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb25maWcgPSBOVUxMKQ0KICB7DQogICAgJHRoaXMtPl9zZXRfY29uZmlnX2RlZmF1bHQoKTsNCiAgICANCiAgICBpZiggXGlzX2FycmF5KCRjb25maWcpICkNCiAgICB7DQogICAgICAkdGhpcy0+X2NvbmZpZyA9IFxhcnJheV9tZXJnZSgkdGhpcy0+X2NvbmZpZywgJGNvbmZpZyk7DQogICAgfQ0KICAgIA0KICAgICR0aGlzLT5fdmFsaWRhdGVfY29uZmlnKCk7DQogICAgDQogIH0NCiAgDQogIHByaXZhdGUgZnVuY3Rpb24gX3NldF9jb25maWdfZGVmYXVsdCgpIDogdm9pZA0KICB7DQogICAgJHRoaXMtPl9jb25maWcgPSBbDQogICAgICAnbW9kJyA9PiBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCcnKSwNCiAgICBdOw0KICB9DQogIA0KICBwcml2YXRlIGZ1bmN0aW9uIF92YWxpZGF0ZV9jb25maWcoKSA6IHZvaWQNCiAgew0KICAgIGlmKCAhXGlzX2FycmF5KCR0aGlzLT5fY29uZmlnKSApDQogICAgew0KICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKF9fQ0xBU1NfXyAuICc6IGNvbmZpZyBtdXN0IGJlIGFuIGFycmF5Jyk7DQogICAgfQ0KICAgIA0KICAgIGlmKCAhXGFycmF5X2tleV9leGlzdHMoJ21vZCcsICR0aGlzLT5fY29uZmlnKSApDQogICAgew0KICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKF9fQ0xBU1NfXyAuICc6IGNvbmZpZyBtdXN0IGNvbnRhaW4gbW9kJyk7DQogICAgfQ0KICAgIA0KICAgIGlmKCAhXGlzX2EoJHRoaXMtPl9jb25maWdbJ21vZCddLCAnXENNU01TRXh0XFhUTW9kdWxlJykpDQogICAgew0KICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKF9fQ0xBU1NfXw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJzogY29uZmlnW21vZF0gbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBcQ01TTVNFeHRcWFRNb2R1bGUsICcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuIFxnZXRfY2xhc3MoJHRoaXMtPl9jb25maWdbJ21vZCddKSAuICcgZ2l2ZW4gd2hpY2ggZXh0ZW5kcyAnDQogICAgICAuIFxhcnJheV9rZXlzKFxjbGFzc19wYXJlbnRzKCR0aGlzLT5fY29uZmlnWydtb2QnXSkpWzBdKTsNCiAgICB9DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBnZXRfdGFncygpIDogc3RyaW5nDQogIHsNCiAgICAkb3V0ICAgICAgICA9ICcnOw0KICAgIC8qKiBAdmFyIFxDTVNNU0V4dFxYVE1vZHVsZSAkbW9kICovDQogICAgJG1vZCAgICAgICAgPSAkdGhpcy0+X2NvbmZpZ1snbW9kJ107DQogICAgJGNtc2V4dCAgICAgPSAkbW9kLT5nZXRfeHQoKTsNCiAgICAkbW9kX2NvbmZpZyA9ICRtb2QtPkdldEV4dGVuZGVkQ29uZmlnKCk7DQogICAgDQogICAgaWYoJG1vZF9jb25maWdbJ2FkZF91aWtpdCddKQ0KICAgIHsNCiAgICAgICNhbmQgdWlraXQganMgdG9vbHMNCiAgICAgICRmbiA9ICRjbXNleHQtPkdldE1vZHVsZVBhdGgoKSAuICcvanMvdWlraXQvdWlraXQuanMnOw0KICAgICAgDQogICAgICBpZigkZm4pDQogICAgICB7DQogICAgICAgICRtb2QtPmdldF9qc2xvYWRlcigpLT5hZGRfanNmaWxlKCRmbik7DQogICAgICB9DQogICAgICANCiAgICAgICRmbiA9ICRjbXNleHQtPkdldE1vZHVsZVBhdGgoKSAuICcvanMvdWlraXQvdWlraXQtaWNvbnMuanMnOw0KICAgICAgDQogICAgICBpZigkZm4pDQogICAgICB7DQogICAgICAgICRtb2QtPmdldF9qc2xvYWRlcigpLT5hZGRfanNmaWxlKCRmbik7DQogICAgICB9DQogICAgICANCiAgICB9DQogICAgDQogICAgaWYoJG1vZF9jb25maWdbJ2FkZF9yaW90J10pDQogICAgew0KICAgICAgIyBhZGQganMNCiAgICAgICRmbiA9ICRjbXNleHQtPkdldE1vZHVsZVBhdGgoKSAuICcvanMvcmlvdC5qcyc7DQogICAgICANCiAgICAgIGlmKCRmbikNCiAgICAgIHsNCiAgICAgICAgJG1vZC0+Z2V0X2pzbG9hZGVyKCktPmFkZF9qc2ZpbGUoJGZuKTsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgaWYoJG1vZF9jb25maWdbJ2FkZF91bmRlcnNjb3JlJ10pDQogICAgew0KICAgICAgIyBhZGQganMNCiAgICAgICRmbiA9ICRjbXNleHQtPkdldE1vZHVsZVBhdGgoKSAuICcvanMvdW5kZXJzY29yZS1taW4uanMnOw0KICAgICAgDQogICAgICBpZigkZm4pDQogICAgICB7DQogICAgICAgICRtb2QtPmdldF9qc2xvYWRlcigpLT5hZGRfanNmaWxlKCRmbik7DQogICAgICB9DQogICAgfQ0KICAgIA0KICAgIGlmKCRtb2RfY29uZmlnWydhZGRfbG9kYXNoJ10pDQogICAgew0KICAgICAgIyBhZGQganMNCiAgICAgICRmbiA9ICRjbXNleHQtPkdldE1vZHVsZVBhdGgoKSAuICcvanMvbG9kYXNoLm1pbi5qcyc7DQogICAgICANCiAgICAgIGlmKCRmbikNCiAgICAgIHsNCiAgICAgICAgJG1vZC0+Z2V0X2pzbG9hZGVyKCktPmFkZF9qc2ZpbGUoJGZuKTsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgaWYoJG1vZF9jb25maWdbJ2FkZF9iYWNrYm9uZSddKQ0KICAgIHsNCiAgICAgICMgYWRkIGpzDQogICAgICAkZm4gPSAkY21zZXh0LT5HZXRNb2R1bGVQYXRoKCkgLiAnL2pzL2JhY2tib25lLW1pbi5qcyc7DQogICAgICANCiAgICAgIGlmKCRmbikNCiAgICAgIHsNCiAgICAgICAgJG1vZC0+Z2V0X2pzbG9hZGVyKCktPmFkZF9qc2ZpbGUoJGZuKTsNCiAgICAgIH0NCiAgICAgIA0KICAgIH0NCiAgICANCiAgICAkZm4gPSAkbW9kLT5maW5kX21vZHVsZV9maWxlKCdqcy8nIC4gJG1vZC0+Z2V0X2FjdGlvbl9uYW1lKCkgLiAnLmpzJyk7DQogICAgDQogICAgaWYoJGZuKQ0KICAgIHsNCiAgICAgICRtb2QtPmdldF9qc2xvYWRlcigpLT5hZGRfanNmaWxlKCRmbik7DQogICAgfQ0KICAgIA0KICAgICRvdXQgLj0gJG1vZC0+Z2V0X2pzbG9hZGVyKCktPnJlbmRlcihbDQogICAgICAnYWRka2V5JyA9PiBcc2Vzc2lvbl9pZCgpLA0KICAgICAgJ25vX2NhY2hlJyA9PiAkbW9kX2NvbmZpZ1snbm9fanNfY2FjaGUnXSwNCiAgICAgICdkZWZlcl9qcycgPT4gJG1vZF9jb25maWdbJ2RlZmVyX2pzJ10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOw0KICAgIA0KICAgIHJldHVybiAkb3V0Ow0KICB9DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/module/class.reference.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcbW9kdWxlOw0KDQpjbGFzcyByZWZlcmVuY2UNCnsNCiAgcHJvdGVjdGVkICRfbW9kdWxlX25hbWU7DQogIA0KICAvKioNCiAgICogQ29uc3RydWN0b3INCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkbW9kX25hbWUgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byByZWZlcmVuY2UuDQogICAqIEB0aHJvd3MgXExvZ2ljRXhjZXB0aW9uIElmIHRoZSBtb2R1bGUgbmFtZSBpcyBlbXB0eS4NCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbW9kX25hbWUpDQogIHsNCiAgICAkdGhpcy0+X21vZHVsZV9uYW1lID0gXHRyaW0oJG1vZF9uYW1lKTsNCiAgICANCiAgICBpZighJHRoaXMtPl9tb2R1bGVfbmFtZSkgeyB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdDYW5ub3QgaW5pdGlhbGl6ZSAnIC4gX19DTEFTU19fIC4gJyB3aXRoIGFuIGVtcHR5IHZhbHVlJyk7IH0NCiAgICANCiAgICAkdGhpcy0+X2dldF9tb2QoKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEdldCB0aGUgbW9kdWxlIGluc3RhbmNlLg0KICAgKg0KICAgKiBAcmV0dXJuIG9iamVjdCBUaGUgbW9kdWxlIGluc3RhbmNlLg0KICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIElmIHRoZSBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZS4NCiAgICovDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfZ2V0X21vZCgpDQogIHsNCiAgICAkbW9kID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgkdGhpcy0+X21vZHVsZV9uYW1lKTsNCiAgICANCiAgICBpZighJG1vZCkgeyB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIk1vZHVsZSB7JHRoaXMtPl9tb2R1bGVfbmFtZX0gaXMgcmVmZXJlbmNlZCBidXQgbm90IGF2YWlsYWJsZSIpOyB9DQogICAgDQogICAgcmV0dXJuICRtb2Q7DQogIH0NCiAgDQogIC8qKg0KICAgKiBNYWdpYyBtZXRob2QgdG8gZ2V0IHByb3BlcnRpZXMuDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgcHJvcGVydHkgbmFtZS4NCiAgICogQHJldHVybiBtaXhlZCBUaGUgcHJvcGVydHkgdmFsdWUuDQogICAqIEB0aHJvd3MgXExvZ2ljRXhjZXB0aW9uIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZ2V0dGFibGUuDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJGtleSkNCiAgew0KICAgIGlmKCduYW1lJyA9PT0gJGtleSkgeyByZXR1cm4gJHRoaXMtPl9tb2R1bGVfbmFtZTsgfQ0KICAgIA0KICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oIiRrZXkgaXMgbm90IGEgZ2V0dGFibGUgbWVtYmVyIG9mICIgLiBfX0NMQVNTX18pOw0KICB9DQogIA0KICAvKioNCiAgICogTWFnaWMgbWV0aG9kIHRvIHNldCBwcm9wZXJ0aWVzLg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIHByb3BlcnR5IG5hbWUuDQogICAqIEBwYXJhbSBtaXhlZCAkdmFsIFRoZSBwcm9wZXJ0eSB2YWx1ZS4NCiAgICogQHRocm93cyBcTG9naWNFeGNlcHRpb24gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCBzZXR0YWJsZS4NCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBfX3NldCgka2V5LCAkdmFsKQ0KICB7DQogICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiJGtleSBpcyBub3QgYSBzZXR0YWJsZSBtZW1iZXIgb2YgIiAuIF9fQ0xBU1NfXyk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBNYWdpYyBtZXRob2QgdG8gaW52b2tlIHRoZSBjbGFzcyBhcyBhIGZ1bmN0aW9uLg0KICAgKg0KICAgKiBAcGFyYW0gYXJyYXkgJGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBwYXNzLg0KICAgKiBAcmV0dXJuIG9iamVjdCBUaGUgbW9kdWxlIGluc3RhbmNlLg0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKC4uLiRhcmdzKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5fZ2V0X21vZCgpOw0KICB9DQogIA0KICAvKioNCiAgICogTWFnaWMgbWV0aG9kIHRvIGNhbGwgbWV0aG9kcyBvbiB0aGUgbW9kdWxlIGluc3RhbmNlLg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRtZXRob2QgVGhlIG1ldGhvZCBuYW1lLg0KICAgKiBAcGFyYW0gYXJyYXkgJGFyZ3MgVGhlIG1ldGhvZCBhcmd1bWVudHMuDQogICAqIEByZXR1cm4gbWl4ZWQgVGhlIG1ldGhvZCByZXN1bHQuDQogICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gSWYgdGhlIG1ldGhvZCBkb2VzIG5vdCBleGlzdCBvbiB0aGUgbW9kdWxlLg0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIF9fY2FsbCgkbWV0aG9kLCAkYXJncykNCiAgew0KICAgICRtb2QgPSAkdGhpcy0+X2dldF9tb2QoKTsNCiAgICANCiAgICBpZighXG1ldGhvZF9leGlzdHMoJG1vZCwgJG1ldGhvZCkpDQogICAgew0KICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCJNZXRob2QgJG1ldGhvZCBkb2VzIG5vdCBleGlzdCBvbiBtb2R1bGUgeyR0aGlzLT5fbW9kdWxlX25hbWV9Iik7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiBcY2FsbF91c2VyX2Z1bmNfYXJyYXkoWyRtb2QsICRtZXRob2RdLCAkYXJncyk7DQogIH0NCn0NCg0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/lib/module/trait.actions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQWN0aW9ucyB0cmFpdA0KICoNCiAqIGhhbmRsZXMgYWN0aW9uIG1ldGhvZHMgYW5kIE1vZHVsZSBEYXRhDQogKg0KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpMjAyMiBGZXJuYW5kbyBNb3JnYWRvDQogKiBAcGFja2FnZSBDTVNNU0V4dA0KICogQGZpbGUgdHJhaXQuYWN0aW9ucy5waHANCiAqLw0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcbW9kdWxlOw0KDQoNCnRyYWl0IGFjdGlvbnMNCnsNCiAgcHJpdmF0ZSAgICAgICAkX2ludGVybmFsX2FjdGlvbnNfaGFuZGxlciA9IE5VTEw7DQogIHByaXZhdGUgYXJyYXkgJF9tb2R1bGVfZGF0YSAgICAgICAgICAgICAgPSBbXTsNCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBfX2NhbGwoJG5hbWUsICRhcmdzKQ0KICB7DQogICAgIyB0YWtlIGNhcmUgb2YgaW50ZXJuYWwgaGlkZGVuIG1ldGhvZHMNCiAgICBpZihcbWV0aG9kX2V4aXN0cygkdGhpcywgJG5hbWUpKQ0KICAgIHsNCiAgICAgIHJldHVybiBcY2FsbF91c2VyX2Z1bmNfYXJyYXkoWyR0aGlzLCAkbmFtZV0sICRhcmdzKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICR0aGlzLT5faW50ZXJuYWxfYWN0aW9uc19oYW5kbGVyLT5fY2FsbEV4dGVybmFsTWV0aG9kKCRuYW1lLCAkYXJncyk7DQogIH0NCiAgDQogIA0KICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJG5hbWUpDQogIHsNCiAgICAkcmV0ID0gcGFyZW50OjpfX2dldCgkbmFtZSk7DQogICAgDQogICAgaWYoTlVMTCAhPT0gJHJldCkgeyByZXR1cm4gJHJldDsgfQ0KICAgIA0KICAgIGlmKFxwcm9wZXJ0eV9leGlzdHMoJHRoaXMsICRuYW1lKSkgeyByZXR1cm4gJHRoaXMtPiRuYW1lOyB9DQogICAgDQogICAgaWYoXGFycmF5X2tleV9leGlzdHMoJG5hbWUsICR0aGlzLT5fbW9kdWxlX2RhdGEpKSB7IHJldHVybiAkdGhpcy0+X21vZHVsZV9kYXRhWyRuYW1lXTsgfQ0KICAgIA0KICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiUHJvcGVydHkgJyRuYW1lJyBkb2VzIG5vdCBleGlzdC4iKTsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIF9fc2V0KCRuYW1lLCAkdmFsdWUpDQogIHsNCiAgICBpZihccHJvcGVydHlfZXhpc3RzKCR0aGlzLCAkbmFtZSkpDQogICAgew0KICAgICAgJHRoaXMtPiRuYW1lID0gJHZhbHVlOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJHRoaXMtPl9tb2R1bGVfZGF0YVskbmFtZV0gPSAkdmFsdWU7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIF9faXNzZXQoJG5hbWUpDQogIHsNCiAgICBpZihcYXJyYXlfa2V5X2V4aXN0cygkbmFtZSwgJHRoaXMtPl9tb2R1bGVfZGF0YSkpDQogICAgew0KICAgICAgcmV0dXJuIGlzc2V0KCR0aGlzLT5fbW9kdWxlX2RhdGFbJG5hbWVdKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuIFxwcm9wZXJ0eV9leGlzdHMoJHRoaXMsICRuYW1lKTsNCiAgfQ0KICANCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/module/trait.CMSModuleMethods.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcbW9kdWxlOw0KDQp0cmFpdCBDTVNNb2R1bGVNZXRob2RzDQp7DQogIC8qKg0KICAgKiBSZXR1cm4gdGhlIGhlbHAgb2YgdGhpcyBtb2R1bGUuDQogICAqIFRoaXMgbWV0aG9kIHdpbGwgbG9vayBpbiBhIHNlcmllcyBvZiBmaWxlcyB0byB0cnkgdG8gZmluZCB0aGUgaGVscCBmb3IgYSBtb2R1bGUuDQogICAqICAgIGRvYy9oZWxwLmluYywgZG9jcy9oZWxwLmluYywgZG9jL2hlbHAuaHRtbCwgZG9jcy9oZWxwLmh0bWwsIGhlbHAuaW5jIGFuZCBoZWxwLmh0bWwgaW4gdGhhdCBvcmRlcg0KICAgKiBUaGlzIG1ldGhvZCB3aWxsIGFsc28gdHJ5IHRvIGZpbmQgQVBJIGRvY3VtZW50YXRpb24gSFRNTCBmaWxlcyBpbiBudW1lcm91cyBkaXJlY3RvcmllczoNCiAgICogICAgZG9jL2FwaWRvYywgZG9jL2FwaWRvY3MsIGRvY3MvYXBpZG9jIGFuZCBkb2NzL2FwaWRvY3MgaW4gdGhhdCBvcmRlci4NCiAgICogSWYgQVBJIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kLCB0aGVuIHRoZSB0b3Agb2YgdGhlIGhlbHAgd2lsbCBiZSBtb2RpZmllZCB0byBpbmNsdWRlIGEgbGluayB0byB0aGUgQVBJIGRvY3MuDQogICAqDQogICAqIEByZXR1cm4gc3RyaW5nDQogICAqIEBzZWUgQ01TTW9kdWxlOjpHZXRIZWxwKCkNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBHZXRIZWxwKCkNCiAgew0KICAgICRkaXIgID0gJHRoaXMtPkdldE1vZHVsZVBhdGgoKTsNCiAgICANCiAgICAkZm4gPSBcY21zX2pvaW5fcGF0aCgkZGlyLCAndGVtcGxhdGVzJywgJ2hlbHAudHBsJyk7DQogICAgDQogICAgaWYoIFxpc19maWxlKCRmbikgKQ0KICAgIHsNCiAgICAgICRzbWFydHkgPSBcY21zX3V0aWxzOjpnZXRfc21hcnR5KCk7DQogICAgICAkY29uZmlnID0gXGNtc191dGlsczo6Z2V0X2NvbmZpZygpOw0KICAgICAgJHZhcnMgPSBbDQogICAgICAgICdyb290X3VybCcgPT4gJGNvbmZpZ1sncm9vdF91cmwnXSwNCiAgICAgICAgJ2NvbmZpZycgPT4gJGNvbmZpZywNCiAgICAgICAgJ21vZCcgPT4gJHRoaXMsDQogICAgICAgICd4dCcgPT4gJHRoaXMtPmdldF94dCgpLA0KICAgICAgXTsNCiAgICAgIA0KICAgICAgJHNtYXJ0eS0+YXNzaWduKCR2YXJzKTsNCiAgICAgIA0KICAgICAgcmV0dXJuICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2hlbHAudHBsJyk7DQogICAgfQ0KICAgIA0KICAgICRmaWxlcyA9IFsNCiAgICAgICdkb2MvaGVscC5pbmMnLA0KICAgICAgJ2RvY3MvaGVscC5pbmMnLA0KICAgICAgJ2RvYy9oZWxwLmh0bWwnLA0KICAgICAgJ2RvY3MvaGVscC5odG1sJywNCiAgICAgICdoZWxwLmluYycsDQogICAgICAnaGVscC5odG1sJw0KICAgIF07DQogICAgDQogICAgZm9yZWFjaCgkZmlsZXMgYXMgJGZpbGUpDQogICAgew0KICAgICAgJHRlc3QgPSBcY21zX2pvaW5fcGF0aCgkZGlyLCAkZmlsZSk7DQogICAgICANCiAgICAgIGlmKCBcaXNfZmlsZSgkdGVzdCkgKSB7IHJldHVybiBcZmlsZV9nZXRfY29udGVudHMoJHRlc3QpOyB9DQogICAgfQ0KICAgIA0KICAgICMgYWxsIGVsc2UgZmFpbHMuLi4NCiAgICByZXR1cm4gJzwhLS0gZXJyb3I6IG1pc3NpbmcgaGVscCBmaWxlISAtLT4nOw0KICB9DQogIA0KICAvKioNCiAgICogUmV0dXJuIHRoZSBjaGFuZ2Vsb2cgZm9yIHRoaXMgbW9kdWxlLg0KICAgKg0KICAgKiBAcmV0dXJuIHN0cmluZw0KICAgKiBAc2VlIENNU01vZHVsZTo6R2V0Q2hhbmdlTG9nKCkNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKQ0KICB7DQogICAgJGRpciAgID0gJHRoaXMtPkdldE1vZHVsZVBhdGgoKTsNCiAgICANCiAgICAkZm4gPSBcY21zX2pvaW5fcGF0aCgkZGlyLCAndGVtcGxhdGVzJywgJ2NoYW5nZWxvZy50cGwnKTsNCiAgICANCiAgICBpZiggXGlzX2ZpbGUoJGZuKSApDQogICAgew0KICAgICAgJHNtYXJ0eSA9IFxjbXNfdXRpbHM6OmdldF9zbWFydHkoKTsNCiAgICAgICRjb25maWcgPSBcY21zX3V0aWxzOjpnZXRfY29uZmlnKCk7DQogICAgICAkdmFycyA9IFsNCiAgICAgICAgJ3Jvb3RfdXJsJyA9PiAkY29uZmlnWydyb290X3VybCddLA0KICAgICAgICAnY29uZmlnJyA9PiAkY29uZmlnLA0KICAgICAgICAnbW9kJyA9PiAkdGhpcywNCiAgICAgICAgJ3h0JyA9PiAkdGhpcy0+Z2V0X3h0KCksDQogICAgICBdOw0KICAgICAgDQogICAgICAkc21hcnR5LT5hc3NpZ24oJHZhcnMpOw0KICAgICAgDQogICAgICByZXR1cm4gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnY2hhbmdlbG9nLnRwbCcpOw0KICAgIH0NCiAgICANCiAgICAkZmlsZXMgPSBbDQogICAgICAnZG9jcy9jaGFuZ2Vsb2cuaW5jJywNCiAgICAgICdkb2MvY2hhbmdlbG9nLmluYycsDQogICAgICAnZG9jcy9jaGFuZ2Vsb2cuaHRtbCcsDQogICAgICAnZG9jL2NoYW5nZWxvZy5odG1sJywNCiAgICAgICdjaGFuZ2Vsb2cuaW5jJw0KICAgIF07DQogICAgDQogICAgZm9yZWFjaCgkZmlsZXMgYXMgJGZpbGUpDQogICAgew0KICAgICAgJGZuID0gXGNtc19qb2luX3BhdGgoJGRpciwgJGZpbGUpOw0KICAgICAgDQogICAgICBpZiggXGlzX2ZpbGUoJGZuKSApIHsgcmV0dXJuIFxmaWxlX2dldF9jb250ZW50cygkZm4pOyB9DQogICAgfQ0KICAgIA0KICAgICMgYWxsIGVsc2UgZmFpbHMuLi4NCiAgICByZXR1cm4gJzwhLS0gZXJyb3I6IG1pc3NpbmcgY2hhbmdlbG9nIGZpbGUhIC0tPic7DQogIH0NCiAgDQogIA0KICAvKioNCiAgICogVGhlIEZyaWVuZGx5IG5hbWUgZm9yIHRoaXMgbW9kdWxlLiAgRm9yIHVzZSBpbiB0aGUgYWRtaW4gbmF2aWdhdGlvbi4NCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICogQHNlZSBDTVNNb2R1bGU6OkdldEZyaWVuZGx5TmFtZSgpDQogICAqIEBhYnN0cmFjdA0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpDQogIHsNCiAgICBpZiggIWVtcHR5KCR0aGlzLT5faW5pX2RhdGEpICkNCiAgICB7DQogICAgICByZXR1cm4gJHRoaXMtPl9pbmlfZGF0YS0+R2V0KCdNb2R1bGUnLCAnRnJpZW5kbHlOYW1lJyk7DQogICAgfQ0KICAgIA0KICAgIGlmKFxDbXNMYW5nT3BlcmF0aW9uczo6bGFuZ19rZXlfZXhpc3RzKCR0aGlzLT5HZXROYW1lKCksICdmcmllbmRseW5hbWUnKSkNCiAgICB7DQogICAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gcGFyZW50OjpHZXRGcmllbmRseU5hbWUoKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIFJldHVybiB0aGUgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZS4NCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICogQHNlZSBDTVNNb2R1bGU6OkdldFZlcnNpb24oKQ0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIEdldFZlcnNpb24oKQ0KICB7DQogICAgaWYoICFlbXB0eSgkdGhpcy0+X2luaV9kYXRhKSApDQogICAgew0KICAgICAgcmV0dXJuICR0aGlzLT5faW5pX2RhdGEtPkdldCgnTW9kdWxlJywgJ1ZlcnNpb24nKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICcwLjAuMSc7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpDQogIHsNCiAgICBpZiggIWVtcHR5KCR0aGlzLT5faW5pX2RhdGEpICkNCiAgICB7DQogICAgICByZXR1cm4gJHRoaXMtPl9pbmlfZGF0YS0+R2V0KCdNb2R1bGUnLCAnTWluaW11bUNNU1ZlcnNpb24nKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuIHBhcmVudDo6TWluaW11bUNNU1ZlcnNpb24oKTsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIEdldERlc2NyaXB0aW9uKCkNCiAgew0KICAgIGlmKCAhZW1wdHkoJHRoaXMtPl9pbmlfZGF0YSkgKQ0KICAgIHsNCiAgICAgIHJldHVybiAkdGhpcy0+X2luaV9kYXRhLT5HZXQoJ01vZHVsZScsICdEZXNjcmlwdGlvbicpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gcGFyZW50OjpHZXREZXNjcmlwdGlvbigpOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gSXNBZG1pbk9ubHkoKQ0KICB7DQogICAgaWYoICFlbXB0eSgkdGhpcy0+X2luaV9kYXRhKSApDQogICAgew0KICAgICAgcmV0dXJuICR0aGlzLT5faW5pX2RhdGEtPkdldCgnTW9kdWxlJywgJ0FkbWluT25seScpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gcGFyZW50OjpJc0FkbWluT25seSgpOw0KICB9DQogIA0KICANCiAgLyoqDQogICAqIERpc3BsYXkgYSBjdXN0b20gbWVzc2FnZSBhZnRlciB0aGUgbW9kdWxlIGhhcyBiZWVuIGluc3RhbGxlZC4NCiAgICoNCiAgICogQGFic3RyYWN0DQogICAqIEByZXR1cm4gc3RyaW5nDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIFJldHVybiBpZiB0aGlzIGlzIGEgcGx1Z2luIG1vZHVsZSAoZm9yIHRoZSBmcm9udGVuZCBvZiB0aGUgd2Vic2l0ZSkgb3Igbm90Lg0KICAgKg0KICAgKiBAcmV0dXJuIGJvb2wNCiAgICogQHNlZSBDTVNNb2R1bGU6OklzUGx1Z2luTW9kdWxlKCkNCiAgICogQGFic3RyYWN0DQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKQ0KICB7DQogICAgaWYoICFlbXB0eSgkdGhpcy0+X2luaV9kYXRhKSApDQogICAgew0KICAgICAgcmV0dXJuICR0aGlzLT5faW5pX2RhdGEtPkdldCgnTW9kdWxlJywgJ1BsdWdpbk1vZHVsZScpOw0KICAgIH0NCiAgICByZXR1cm4gcGFyZW50OjpJc1BsdWdpbk1vZHVsZSgpOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yKCkNCiAgew0KICAgIGlmKCAhZW1wdHkoJHRoaXMtPl9pbmlfZGF0YSkgKQ0KICAgIHsNCiAgICAgIHJldHVybiAkdGhpcy0+X2luaV9kYXRhLT5HZXQoJ01vZHVsZScsICdBdXRob3InKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuIHBhcmVudDo6R2V0QXV0aG9yKCk7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpDQogIHsNCiAgICBpZiggIWVtcHR5KCR0aGlzLT5faW5pX2RhdGEpICkNCiAgICB7DQogICAgICByZXR1cm4gJHRoaXMtPl9pbmlfZGF0YS0+R2V0KCdNb2R1bGUnLCAnQXV0aG9yRW1haWwnKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuIHBhcmVudDo6R2V0QXV0aG9yRW1haWwoKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEBpZ25vcmUNCiAgICovDQogIGZ1bmN0aW9uIEhhc0NhcGFiaWxpdHkoJGNhcGFiaWxpdHksICRwYXJhbXMgPSBbXSkNCiAgew0KICAgIHN3aXRjaCgkY2FwYWJpbGl0eSkNCiAgICB7DQogICAgICBjYXNlICd0YXNrcyc6DQogICAgICAgIHJldHVybiBUUlVFOw0KICAgICAgZGVmYXVsdDoNCiAgICAgICAgcmV0dXJuIEZBTFNFOw0KICAgIH0NCiAgfQ0KICANCiAgLyoqDQogICAqIFJldHVybiBpZiB0aGlzIG1vZHVsZSBoYXMgYW4gYWRtaW4gc2VjdGlvbi4NCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICogQHNlZSBDTVNNb2R1bGU6Okhhc0FkbWluKCkNCiAgICogQGFic3RyYWN0DQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gSGFzQWRtaW4oKQ0KICB7DQogICAgaWYoICFlbXB0eSgkdGhpcy0+X2luaV9kYXRhKSApDQogICAgew0KICAgICAgcmV0dXJuICR0aGlzLT5faW5pX2RhdGEtPkdldCgnTW9kdWxlJywgJ0hhc0FkbWluJyk7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiBwYXJlbnQ6Okhhc0FkbWluKCk7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBMYXp5TG9hZEZyb250ZW5kKCkNCiAgew0KICAgIGlmKCAhZW1wdHkoJHRoaXMtPl9pbmlfZGF0YSkgKQ0KICAgIHsNCiAgICAgIHJldHVybiAkdGhpcy0+X2luaV9kYXRhLT5HZXQoJ01vZHVsZScsICdMYXp5TG9hZEZyb250ZW5kJyk7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiBwYXJlbnQ6OkxhenlMb2FkRnJvbnRlbmQoKTsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIExhenlMb2FkQWRtaW4oKQ0KICB7DQogICAgaWYoICFlbXB0eSgkdGhpcy0+X2luaV9kYXRhKSApDQogICAgew0KICAgICAgcmV0dXJuICR0aGlzLT5faW5pX2RhdGEtPkdldCgnTW9kdWxlJywgJ0xhenlMb2FkQWRtaW4nKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuIHBhcmVudDo6TGF6eUxvYWRBZG1pbigpOw0KICB9DQogIC8qKg0KICAgKiBSZXR1cm4gYSBtZXNzYWdlIHRvIGRpc3BsYXkgYWZ0ZXIgdGhlIG1vZHVsZSBoYXMgYmVlbiB1bmluc3RhbGxlZC4NCiAgICoNCiAgICogQGFic3RyYWN0DQogICAqIEByZXR1cm4gc3RyaW5nDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0dW5pbnN0YWxsJyk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBUZXN0IGlmIHRoaXMgbW9kdWxlIGlzIHZpc2libGUgaW4gdGhlIGFkbWluIG5hdmlnYXRpb24gdG8gdGhlIGN1cnJlbnRseSBsb2dnZWQgaW4gYWRtaW4gdXNlci4NCiAgICoNCiAgICogQGFic3RyYWN0DQogICAqIEByZXR1cm4gYm9vbA0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpDQogIHsNCiAgICByZXR1cm4gKA0KICAgICAgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKQ0KICAgICAgfHwgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpDQogICAgKTsNCiAgICAvLyYmICR0aGlzLT5faGFzX2RlZmF1bHRfcGVybWlzc2lvbigpOyAjIFRPRE86IHRlc3QgdGhpcyB0aG9yb3VnaGx5IQ0KICB9DQogIA0KICAvKioNCiAgICogUmV0cmlldmUgc29tZSBIVE1MIHRvIGJlIG91dHB1dCBpbiBhbGwgYWRtaW4gcmVxdWVzdHMgZm9yIHRoaXMgbW9kdWxlIChhbmQgaXRzIGRlc2NlbmRhbnRzKS4NCiAgICogQnkgZGVmYXVsdCwgdGhpcyBjbGFzcyBjYWxscyB0aGUganNsb2FkZXI6OnJlbmRlciBtZXRob2QsICBhbmQgaW5jbHVkZXMgc29tZSBzdGFuZGFyZCBzdHlsZXMNCiAgICogSWYgYSBmaWxlIGVudGl0bGVkIGNzcy9hZG1pbl9zdHlsZXMuY3NzIGV4aXN0cyBpbiBhIGRlcml2ZWQgbW9kdWxlJ3Mgcm9vdCBkaXJlY3RvcnkgdGhlbiB0aGlzIHN0eWxlc2hlZXQNCiAgICogd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgaGVhZGVyIGh0bWwuDQogICAqDQogICAqIEBhYnN0cmFjdA0KICAgKiBAcmV0dXJuIGJvb2wNCiAgICogQHRocm93cyBcQ21zSW52YWxpZERhdGFFeGNlcHRpb24NCiAgICoNCiAgICogQHNlZSBcQ01TTVNFeHRcanNsb2FkZXJcanNsb2FkZXI6OnJlbmRlcigpOw0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIEdldEhlYWRlckhUTUwoKQ0KICB7DQogICAgJG91dCA9ICcnOw0KICAgIA0KICAgICRvdXQgLj0gKCBuZXcgYmFja2VuZF9jc3NfbWFuYWdlcihbJ21vZCcgPT4gJHRoaXNdKSApLT5nZXRfdGFncygpOw0KICAgICRvdXQgLj0gKCBuZXcgYmFja2VuZF9qc19tYW5hZ2VyKFsnbW9kJyA9PiAkdGhpc10pICktPmdldF90YWdzKCk7DQogICAgDQogICAgcmV0dXJuICRvdXQ7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBHZXRQYXJlbnRQYXRoKCkNCiAgew0KICAgICRjb25maWcgPSBcY21zbXMoKS0+R2V0Q29uZmlnKCk7DQogICAgDQogICAgcmV0dXJuIFxjbXNfam9pbl9wYXRoKCRjb25maWdbJ3Jvb3RfcGF0aCddLCAnbW9kdWxlcycsIFxNT0RfQ01TTVNFWFQpOw0KICB9DQogIA0KICAvKioNCiAgICogQGlnbm9yZQ0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIEluaXRpYWxpemVGcm9udGVuZCgpDQogIHsNCiAgICBwYXJlbnQ6OkluaXRpYWxpemVGcm9udGVuZCgpOw0KICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd4dF9tc2cnLCBcQ0xFQU5fU1RSSU5HKTsNCiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgneHRfbXNna2V5JywgXENMRUFOX1NUUklORyk7DQogICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3h0X2Vycm9yJywgXENMRUFOX0lOVCk7DQogICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ25vY2FjaGUnLCBcQ0xFQU5fSU5UKTsNCiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgneHRfYWN0aXZldGFiJywgXENMRUFOX1NUUklORyk7DQogICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ19kJywgXENMRUFOX1NUUklORyk7DQogICAgDQogICAgaWYoISR0aGlzIGluc3RhbmNlb2YgXENNU01TRXh0KSB7IHJldHVybjsgfQ0KICAgIA0KICAgICR0aGlzLT5SZXN0cmljdFVua25vd25QYXJhbXMoKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEdldCBhIGhhc2ggY29udGFpbmluZyBkZXBlbmRlbnQgbW9kdWxlcywgYW5kIHRoZWlyIG1pbmltdW0gdmVyc2lvbnMuDQogICAqIGlmIGEgbW9kdWxlLmluaSBmaWxlIGlzIHByZXNlbnQgaW4gdGhlIG1vZHVsZSBkYXRhIGRpcmVjdG9yeSwNCiAgICogYW5kIGl0IGhhcyBhICdEZXBlbmRlbmNpZXMnIGtleSwNCiAgICogdGhlbiBpdCB3aWxsIGJlIG1lcmdlZC4NCiAgICogQSBtYW5kYXRvcnkgZGVwZW5kZW5jeSBpcyB0aGUgQ01TTVNFeHQgbW9kdWxlLg0KICAgKg0KICAgKiBAYWJzdHJhY3QNCiAgICogQHJldHVybiBhcnJheQ0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpDQogIHsNCiAgICAkZGVwcyA9IFsnQ01TTVNFeHQnID0+ICR0aGlzLT5nZXRfeHQoKS0+R2V0VmVyc2lvbigpXTsNCiAgICANCiAgICBpZiggIWVtcHR5KCR0aGlzLT5faW5pX2RhdGEpICkNCiAgICB7DQogICAgICAkZXh0cmFfZGVwcyA9ICR0aGlzLT5faW5pX2RhdGEtPkdldCgnTW9kdWxlJywgJ0RlcGVuZGVuY2llcycpOw0KICAgICAgDQogICAgICBpZiggIVxpc19hcnJheSgkZXh0cmFfZGVwcykgKSB7ICRleHRyYV9kZXBzID0gW107IH0NCiAgICAgIA0KICAgICAgcmV0dXJuIFxhcnJheV9tZXJnZSgkZGVwcywgJGV4dHJhX2RlcHMgKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICRkZXBzOw0KICB9DQogIA0KICAvKioNCiAgICogR2V0IHRoZSBzZWN0aW9uIG9mIHRoZSBhZG1pbiBuYXZpZ2F0aW9uIHRoYXQgdGhpcyBtb2R1bGUgYmVsb25ncyB0by4NCiAgICoNCiAgICogQGFic3RyYWN0DQogICAqIEByZXR1cm4gc3RyaW5nDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uKCkNCiAgew0KICAgICRuYW1lID0gXHN0cnRvbG93ZXIoJHRoaXMtPkdldE5hbWUoKSAuICdfYWRtaW5zZWN0aW9uJyk7DQogICAgDQogICAgcmV0dXJuIFx4dF9wYXJhbTo6Z2V0X3N0cmluZyggKGFycmF5KSR0aGlzLT5jb25maWcsICRuYW1lLCAnZXh0ZW5zaW9ucycgKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEdldCBhIGh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aW9uIGZvciB0aGlzIG1vZHVsZS4NCiAgICoNCiAgICogQGFic3RyYWN0DQogICAqIEByZXR1cm4gc3RyaW5nDQogICAqLw0KICBwdWJsaWMgZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpDQogIHsNCiAgICBpZiggIWVtcHR5KCR0aGlzLT5faW5pX2RhdGEpICkNCiAgICB7DQogICAgICByZXR1cm4gJHRoaXMtPl9pbmlfZGF0YS0+R2V0KCdNb2R1bGUnLCAnRGVzY3JpcHRpb24nKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpOw0KICB9DQogIA0KICANCiAgDQogIC8qKg0KICAgKiBBIHJlcGxhY2VtZW50IGZvciB0aGUgYnVpbHQtaW4gRG9BY3Rpb24gbWV0aG9kDQogICAqIEZvciBDTVNNU0V4dCBkZXJpdmVkIG1vZHVsZXMgc29tZSAgYnVpbHRpbiBzbWFydHkgdmFyaWFibGVzIGFyZSBjcmVhdGVkDQogICAqIG1vZHVsZSBoaW50cyBhcmUgaGFuZGxlZCwgIGFuZCBpbnB1dCB0eXBlPWltYWdlIHZhbHVlcyBhcmUgY29ycmVjdGVkIGluIGlucHV0IHBhcmFtZXRlcnMuDQogICAqDQogICAqIHRoaXMgbWV0aG9kIGFsc28gaGFuZGxlcyBzZXR0aW5nIHRoZSBhY3RpdmUgdGFiLCBhbmQgZGlzcGxheWluZyBhbnkgbWVzc2FnZXMgb3IgZXJyb3JzDQogICAqIHNldCB3aXRoIHRoZSBTZXRFcnJvciBvciBTZXRNZXNzYWdlIG1ldGhvZHMuDQogICAqDQogICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBzeXN0ZW0gYmFzZWQgb24gdGhlIGluY29taW5nIHJlcXVlc3QsIGFuZCB0aGUgcGFnZSB0ZW1wbGF0ZS4NCiAgICogSXQgc2hvdWxkIGFsbW9zdCBuZXZlciBiZSBjYWxsZWQgbWFudWFsbHkuDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgICAgIHRoZSBhY3Rpb24gbmFtZQ0KICAgKiBAcGFyYW0gc3RyaW5nICRpZCAgICAgICBUaGUgbW9kdWxlIGFjdGlvbiBpZA0KICAgKiBAcGFyYW0gYXJyYXkgICRwYXJhbXMgICBUaGUgbW9kdWxlIHBhcmFtZXRlcnMNCiAgICogQHBhcmFtIHN0cmluZyAkcmV0dXJuaWQgVGhlIHBhZ2UgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIEhUTUwgcmVzdWx0cy4gIFRoaXMgaXMgZW1wdHkgZm9yIGFkbWluIHJlcXVlc3RzLg0KICAgKg0KICAgKiBAdGhyb3dzIFxDbXNFcnJvcjQwNEV4Y2VwdGlvbg0KICAgKiBAc2VlIFNldEVycm9yKCkNCiAgICogQHNlZSBTZXRNZXNzYWdlKCkNCiAgICogQHNlZSBTZXRDdXJyZW50VGFiKCkNCiAgICogQHNlZSBSZWRpcmVjdFRvVGFiKCkNCiAgICoNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBEb0FjdGlvbigkbmFtZSwgJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgPSAnJykNCiAgew0KICAgICR0aGlzLT5zZXRfYWN0aW9uX2lkKCRpZCk7DQogICAgJHRoaXMtPnNldF9hY3Rpb25fbmFtZSgkbmFtZSk7DQogICAgDQogICAgJGFjdGl2ZV90YWIgICAgPSBceHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywgJ3h0X2FjdGl2ZXRhYicpOw0KICAgICRjb25maWcgICAgICAgID0gJHRoaXMtPkdldEV4dGVuZGVkQ29uZmlnKCk7DQogICAgJHRlbXBsYXRlX25hbWUgPSAkbmFtZSAuICcudHBsJzsNCiAgICANCiAgICBpZigkYWN0aXZlX3RhYikgeyAkdGhpcy0+U2V0Q3VycmVudFRhYigkYWN0aXZlX3RhYik7IH0NCiAgICANCiAgICAvLyBoYW5kbGUgdGhlIHN0dXBpZCBpbnB1dCB0eXBlPSdpbWFnZScgcHJvYmxlbS4gVE9ETzogUmV2aXNpdC4uLiBKTQ0KICAgIGZvcmVhY2goJHBhcmFtcyBhcyAka2V5ID0+ICR2YWx1ZSkNCiAgICB7DQogICAgICBpZiggXGVuZHN3aXRoKCRrZXksICdfeCcpICkNCiAgICAgIHsNCiAgICAgICAgJGJhc2UgPSBcc3Vic3RyKCRrZXksIDAsIC0yKTsNCiAgICAgICAgJGsgPSAkYmFzZSAuICdfeSc7DQogICAgICAgIA0KICAgICAgICBpZihpc3NldCgkcGFyYW1zWyRrXSkgJiYgIWlzc2V0KCRwYXJhbXNbJGJhc2VdKSkNCiAgICAgICAgew0KICAgICAgICAgICRwYXJhbXNbJGJhc2VdID0gJGJhc2U7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgLy8gaGFuZGxlIG1vZHVsZSBoaW50cyBub3RlOiBkZXByZWNhdGVkIGFzIHRoZSBjb3JlIGFscmVhZHkgaGFzIHRoaXMgZmVhdHVyZQ0KICAgICRoaW50cyA9IFxjbXNfdXRpbHM6OmdldF9hcHBfZGF0YSgnX19NT0RVTEVfSElOVF9fJyAuICR0aGlzLT5HZXROYW1lKCkpOw0KICAgIA0KICAgIGlmKFxpc19hcnJheSgkaGludHMpKQ0KICAgIHsNCiAgICAgIGZvcmVhY2goJGhpbnRzIGFzICRrZXkgPT4gJHZhbHVlKQ0KICAgICAgew0KICAgICAgICBpZihpc3NldCgkcGFyYW1zWyRrZXldKSkgeyBjb250aW51ZTsgfQ0KICAgICAgICANCiAgICAgICAgJHBhcmFtc1ska2V5XSA9ICR2YWx1ZTsNCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgLy8gcmVkdW5kYW50IGZvciBjbXNtcyAyLjArDQogICAgJHNtYXJ0eSA9ICR0aGlzLT5HZXRBY3Rpb25UZW1wbGF0ZU9iamVjdCgpOw0KICAgIA0KICAgIGlmKCEkc21hcnR5KSB7ICRzbWFydHkgPSAkdGhpcy0+Y21zLT5HZXRTbWFydHkoKTsgfQ0KICAgIA0KICAgICRkYiAgICAgICA9IFxjbXNfdXRpbHM6OmdldF9kYigpOw0KICAgICRnQ21zICAgICA9IFxjbXNtcygpOyAjIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBidXQgZGVwcmVjYXRlZA0KICAgICRDTVNNU0V4dCA9IFx4dF91dGlsczo6Z2V0X3h0KCk7DQogICAgDQogICAgJHNtYXJ0eS0+YXNzaWduKCdhY3Rpb25pZCcsICRpZCk7DQogICAgJHNtYXJ0eS0+YXNzaWduKCdhY3Rpb25wYXJhbXMnLCAkcGFyYW1zKTsNCiAgICAkc21hcnR5LT5hc3NpZ24oJ3JldHVybmlkJywgJHJldHVybmlkKTsNCiAgICAkc21hcnR5LT5hc3NpZ24oJ21vZCcsICR0aGlzKTsNCiAgICAkc21hcnR5LT5hc3NpZ24oJ3h0JywgJENNU01TRXh0KTsNCiAgICAkc21hcnR5LT5hc3NpZ24oJ2FjdGlvbm5hbWUnLCAkbmFtZSk7DQogICAgJHNtYXJ0eS0+YXNzaWduKCR0aGlzLT5HZXROYW1lKCksICR0aGlzKTsNCiAgICBceHRfdG1wZGF0YTo6c2V0KCAnbW9kdWxlJywgJHRoaXMtPkdldE5hbWUoKSApOw0KICAgIA0KICAgIGlmKCRyZXR1cm5pZCA9PSAnJykNCiAgICB7DQogICAgICAkZXJyb3JzID0gJG1lc3NhZ2VzID0gTlVMTDsNCiAgICAgIA0KICAgICAgaWYoaXNzZXQoJHBhcmFtc1snX19hY3RpdmV0YWInXSkpDQogICAgICB7DQogICAgICAgICR0aGlzLT5TZXRDdXJyZW50VGFiKFx0cmltKFxjbGVhblZhbHVlKCRwYXJhbXNbJ19fYWN0aXZldGFiJ10pKSk7DQogICAgICB9DQogICAgICANCiAgICAgICRlX2tleSA9ICR0aGlzLT5HZXROYW1lKCkgLiAnX2Vycm9ycyc7DQogICAgICAkbV9rZXkgPSAkdGhpcy0+R2V0TmFtZSgpIC4gJ19tZXNzYWdlcyc7DQogICAgICANCiAgICAgIGlmKGlzc2V0KCRfU0VTU0lPTlskZV9rZXldKSkgeyAkZXJyb3JzID0gJF9TRVNTSU9OWyRlX2tleV07IH0NCiAgICAgIA0KICAgICAgaWYoaXNzZXQoJF9TRVNTSU9OWyRtX2tleV0pKSB7ICRtZXNzYWdlcyA9ICRfU0VTU0lPTlskbV9rZXldOyB9DQogICAgICANCiAgICAgIHVuc2V0KCRfU0VTU0lPTlskZV9rZXldLCAkX1NFU1NJT05bJG1fa2V5XSk7DQogICAgICANCiAgICAgIGlmKFxpc19hcnJheSgkZXJyb3JzKSAmJiBcY291bnQoJGVycm9ycykpIHsgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkZXJyb3JzKTsgfQ0KICAgICAgDQogICAgICBpZihcaXNfYXJyYXkoJG1lc3NhZ2VzKSAmJiBcY291bnQoJG1lc3NhZ2VzKSkgeyBlY2hvICR0aGlzLT5TaG93TWVzc2FnZSgkbWVzc2FnZXNbMF0pOyB9DQogICAgfQ0KICAgIA0KICAgIGlmKCcnICE9PSAkbmFtZSkNCiAgICB7DQogICAgICAkbmFtZSAgICAgICAgID0gXHByZWdfcmVwbGFjZSgnL1teQS1aYS16MC05XC1fK10vJywgJycsICRuYW1lKTsNCiAgICAgIA0KICAgICAgJGdvdF9jb250ZW50cyA9IEZBTFNFOw0KICAgICAgJGNvbnRlbnRzICAgICA9ICcnOw0KICAgICAgDQogICAgICAjIENoZWNrICJhc3NldHMvbW9kdWxlX2N1c3RvbS88bW9kdWxlX25hbWU+L2FjdGlvbiINCiAgICAgICRmaWxlbmFtZSA9IFxjbXNfam9pbl9wYXRoKA0KICAgICAgICAkY29uZmlnWydyb290X3BhdGgnXSwNCiAgICAgICAgJ2Fzc2V0cycsDQogICAgICAgICdtb2R1bGVfY3VzdG9tJywNCiAgICAgICAgJHRoaXMtPkdldE5hbWUoKSwNCiAgICAgICAgJ2FjdGlvbicsDQogICAgICAgICdhY3Rpb24uJyAuICRuYW1lIC4gJy5waHAnDQogICAgICApOw0KICAgICAgDQogICAgICBpZiggISRnb3RfY29udGVudHMgJiYgQFxpc19maWxlKCRmaWxlbmFtZSkgKQ0KICAgICAgew0KICAgICAgICBcb2Jfc3RhcnQoKTsNCiAgICAgICAgaW5jbHVkZSgkZmlsZW5hbWUpOw0KICAgICAgICAkY29udGVudHMgLj0gXG9iX2dldF9jbGVhbigpOw0KICAgICAgICAkZ290X2NvbnRlbnRzID0gVFJVRTsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgaWYoJGdvdF9jb250ZW50cykNCiAgICAgIHsNCiAgICAgICAgaWYoZW1wdHkoJGNvbnRlbnRzKSkNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICRjb250ZW50cyA9ICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJHRlbXBsYXRlX25hbWUpOw0KICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChcRXhjZXB0aW9uICRlKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIC8vIGRvbid0IHdvcnJ5IGFib3V0IGl0DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBlY2hvICRjb250ZW50czsNCiAgICAgICAgcmV0dXJuOw0KICAgICAgfQ0KICAgICAgDQogICAgICAjIENoZWNrICJtb2R1bGVfY3VzdG9tLzxtb2R1bGVfbmFtZT4vYWN0aW9uIiBpZiB3ZSBkb24ndA0KICAgICAgJGZpbGVuYW1lID0gXGNtc19qb2luX3BhdGgoDQogICAgICAgICRjb25maWdbJ3Jvb3RfcGF0aCddLA0KICAgICAgICAnbW9kdWxlX2N1c3RvbScsDQogICAgICAgICR0aGlzLT5HZXROYW1lKCksDQogICAgICAgICdhY3Rpb24nLA0KICAgICAgICAnYWN0aW9uLicgLiAkbmFtZSAuICcucGhwJw0KICAgICAgKTsNCiAgICAgIA0KICAgICAgaWYoICEkZ290X2NvbnRlbnRzICYmIEBcaXNfZmlsZSgkZmlsZW5hbWUpICkNCiAgICAgIHsNCiAgICAgICAgXG9iX3N0YXJ0KCk7DQogICAgICAgIGluY2x1ZGUoJGZpbGVuYW1lKTsNCiAgICAgICAgJGNvbnRlbnRzIC49IFxvYl9nZXRfY2xlYW4oKTsNCiAgICAgICAgJGdvdF9jb250ZW50cyA9IFRSVUU7DQogICAgICB9DQogICAgICANCiAgICAgIGlmKCRnb3RfY29udGVudHMpDQogICAgICB7DQogICAgICAgIGlmKGVtcHR5KCRjb250ZW50cykpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICB7DQogICAgICAgICAgICAkY29udGVudHMgPSAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCR0ZW1wbGF0ZV9uYW1lKTsNCiAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goXEV4Y2VwdGlvbiAkZSkNCiAgICAgICAgICB7DQogICAgICAgICAgICAvLyBkb24ndCB3b3JyeSBhYm91dCBpdA0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgZWNobyAkY29udGVudHM7DQogICAgICAgIHJldHVybjsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgLy8gQ2hlY2sgbW9kdWxlIG93biBhY3Rpb24gZmlsZSBpZiB3ZSBkb24ndA0KICAgICAgJGZpbGVuYW1lID0gXGNtc19qb2luX3BhdGgoDQogICAgICAgICR0aGlzLT5HZXRNb2R1bGVQYXRoKCksDQogICAgICAgICdhY3Rpb24uJyAuICRuYW1lIC4gJy5waHAnDQogICAgICApOw0KICAgICAgDQogICAgICBpZiggISRnb3RfY29udGVudHMgJiYgQFxpc19maWxlKCRmaWxlbmFtZSkgKQ0KICAgICAgew0KICAgICAgICBcb2Jfc3RhcnQoKTsNCiAgICAgICAgaW5jbHVkZSgkZmlsZW5hbWUpOw0KICAgICAgICAkY29udGVudHMgLj0gXG9iX2dldF9jbGVhbigpOw0KICAgICAgICAkZ290X2NvbnRlbnRzID0gVFJVRTsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgaWYoJGdvdF9jb250ZW50cykNCiAgICAgIHsNCiAgICAgICAgaWYoZW1wdHkoJGNvbnRlbnRzKSkNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICRjb250ZW50cyA9ICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJHRlbXBsYXRlX25hbWUpOw0KICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChcRXhjZXB0aW9uICRlKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIC8vIGRvbid0IHdvcnJ5IGFib3V0IGl0DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBlY2hvICRjb250ZW50czsNCiAgICAgICAgcmV0dXJuOw0KICAgICAgfQ0KICAgICAgDQogICAgICAjIENoZWNrIGZyYW1ld29yayBpZiB3ZSBkb24ndA0KICAgICAgJGZpbGVuYW1lID0gXGNtc19qb2luX3BhdGgoDQogICAgICAgICR0aGlzLT5HZXRQYXJlbnRQYXRoKCksDQogICAgICAgICdmcmFtZXdvcmsnLA0KICAgICAgICAnYWN0aW9uLicgLiAkbmFtZSAuICcucGhwJw0KICAgICAgKTsNCiAgICAgIA0KICAgICAgaWYoICEkZ290X2NvbnRlbnRzICYmIEBcaXNfZmlsZSgkZmlsZW5hbWUpICkNCiAgICAgIHsNCiAgICAgICAgXG9iX3N0YXJ0KCk7DQogICAgICAgIGluY2x1ZGUoJGZpbGVuYW1lKTsNCiAgICAgICAgJGNvbnRlbnRzIC49IFxvYl9nZXRfY2xlYW4oKTsNCiAgICAgICAgJGdvdF9jb250ZW50cyA9IFRSVUU7DQogICAgICB9DQogICAgICANCiAgICAgIGlmKCRnb3RfY29udGVudHMpDQogICAgICB7DQogICAgICAgIGlmKGVtcHR5KCRjb250ZW50cykpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICB7DQogICAgICAgICAgICAkY29udGVudHMgPSAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCR0ZW1wbGF0ZV9uYW1lKTsNCiAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goXEV4Y2VwdGlvbiAkZSkNCiAgICAgICAgICB7DQogICAgICAgICAgICAvLyBkb24ndCB3b3JyeSBhYm91dCBpdA0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgZWNobyAkY29udGVudHM7DQogICAgICAgIHJldHVybjsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgIyBmaW5hbGx5IGxldCdzIHRyeSBhbiBhY3Rpb24gbWV0aG9kIGNsYXNzDQogICAgICB0cnkNCiAgICAgIHsNCiAgICAgICAgIyBzZXQgaXQgdG8gZmFsc2UgaGVyZSwgaWYgYW4gYWN0aW9uIGNsYXNzIGlzIGNhbGxlZCBpdCB3aWxsIGJlIHNldCB0byBUUlVFIG9uIHRoZSBjbGFzcyBpdHNlbGYNCiAgICAgICAgJHRoaXMtPmFjdGlvbl9jbGFzc19jYWxsZWQgPSBGQUxTRTsNCiAgICAgICAgJHBhc3N0aHJvdWdoX3Zhcl9uYW1lcyA9IFsNCiAgICAgICAgICAnZGInLA0KICAgICAgICAgICd0ZW1wbGF0ZV9uYW1lJywNCiAgICAgICAgICAnaWQnLA0KICAgICAgICAgICduYW1lJywNCiAgICAgICAgICAncGFyYW1zJywNCiAgICAgICAgICAncmV0dXJuaWQnLA0KICAgICAgICAgICdhY3RpdmVfdGFiJywNCiAgICAgICAgICAnY29uZmlnJywNCiAgICAgICAgICAnc21hcnR5JywNCiAgICAgICAgXTsNCiAgICAgICAgDQogICAgICAgICRhcmdzID0gXGNvbXBhY3QoJHBhc3N0aHJvdWdoX3Zhcl9uYW1lcyk7DQogICAgICAgIFxvYl9zdGFydCgpOw0KICAgICAgICAkdGhpcy0+JG5hbWUoJGFyZ3MpOw0KICAgICAgICAkY29udGVudHMgLj0gXG9iX2dldF9jbGVhbigpOw0KICAgICAgICAkZ290X2NvbnRlbnRzID0gJHRoaXMtPmFjdGlvbl9jbGFzc19jYWxsZWQ7DQogICAgICB9DQogICAgICBjYXRjaChcRXhjZXB0aW9uICRlKQ0KICAgICAgew0KICAgICAgICBcYXVkaXQoJGlkLCAkbmFtZSwgJ0Vycm9yOiAnIC4gJGUtPmdldE1lc3NhZ2UoKSk7DQogICAgICB9DQogICAgICANCiAgICAgIGlmKCRnb3RfY29udGVudHMpDQogICAgICB7DQogICAgICAgIGlmKGVtcHR5KCRjb250ZW50cykpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICB7DQogICAgICAgICAgICAkY29udGVudHMgPSAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCR0ZW1wbGF0ZV9uYW1lKTsNCiAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goXEV4Y2VwdGlvbiAkZSkNCiAgICAgICAgICB7DQogICAgICAgICAgICAvLyBkb24ndCB3b3JyeSBhYm91dCBpdA0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgZWNobyAkY29udGVudHM7DQogICAgICAgIHJldHVybjsNCiAgICAgIH0NCiAgICAgIA0KDQogICAgfQ0KICAgIA0KICAgICR0ZW1wbGF0ZV9uYW1lID0gJG5hbWUgLiAnLnRwbCc7DQogICAgaWYoJGdvdF9jb250ZW50cykNCiAgICB7DQogICAgICBpZihlbXB0eSgkY29udGVudHMpKQ0KICAgICAgew0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICRjb250ZW50cyA9ICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJHRlbXBsYXRlX25hbWUpOw0KICAgICAgICB9DQogICAgICAgIGNhdGNoKFxFeGNlcHRpb24gJGUpDQogICAgICAgIHsNCiAgICAgICAgICAvLyBkb24ndCB3b3JyeSBhYm91dCBpdA0KICAgICAgICB9DQogICAgICB9DQogICAgICANCiAgICAgIGVjaG8gJGNvbnRlbnRzOw0KICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICANCiAgICAjIGFsbCBlbHNlIGZhaWxzIGp1c3QgZ28gd2l0aCB0aGUgcGFyZW50J3MgYWN0aW9uDQogICAgcGFyZW50OjpEb0FjdGlvbigkbmFtZSwgJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQpOw0KICB9DQogIA0KICAvKioNCiAgICogUmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyB0cmFuc2xhdGVkIHN0cmluZyBmb3IgdGhlIGlkIGdpdmVuLg0KICAgKiBUaGlzIG1ldGhvZCBhY2NlcHRzIHZhcmlhYmxlIGFyZ3VtZW50cy4gIFRoZSBmaXJzdCBhcmd1bWVudCAocmVxdWlyZWQpIGlzIHRoZSBsYW5ndWFnZSBzdHJpbmcga2V5IChhIHN0cmluZykNCiAgICogRnVydGhlciBhcmd1bWVudHMgbWF5IGJlIHNwcmludGYgYXJndW1lbnRzIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQga2V5Lg0KICAgKg0KICAgKiBvdmVycmlkZXMgQ01TTW9kdWxlOjpMYW5nIHRvIGFjY29tbW9kYXRlIENNU01TRXh0IHNwZWNpZmljIGxhbmd1YWdlIHN0cmluZ3MNCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICovDQogIA0KICBwdWJsaWMgZnVuY3Rpb24gTGFuZygpDQogIHsNCiAgICAvL1B1c2ggbW9kdWxlIG5hbWUgb250byBmcm9udCBvZiBhcnJheQ0KICAgICRhcmdzID0gXGZ1bmNfZ2V0X2FyZ3MoKTsNCiAgICBcYXJyYXlfdW5zaGlmdCgkYXJncywgJycpOw0KICAgICRhcmdzWzBdID0gJHRoaXMtPkdldE5hbWUoKTsNCiAgICANCiAgICAkcmV0ID0gXENtc0xhbmdPcGVyYXRpb25zOjpsYW5nX2Zyb21fcmVhbG0oJGFyZ3MpOw0KICAgIA0KICAgIGlmKCBcc3RhcnRzd2l0aCgkcmV0LCAnLS0gTWlzc2luZyBMYW5ndWFnZXN0cmluZzogJykgKQ0KICAgIHsNCiAgICAgICRhcmdzWzBdID0gJ0NNU01TRXh0JzsNCiAgICAgICRyZXQgPSBcQ21zTGFuZ09wZXJhdGlvbnM6OmxhbmdfZnJvbV9yZWFsbSgkYXJncyk7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkcmV0Ow0KICB9DQogIA0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/module/trait.deprecated_methods.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcbW9kdWxlOw0KDQoNCnRyYWl0IGRlcHJlY2F0ZWRfbWV0aG9kcw0Kew0KICAvKioNCiAgICogQSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0byBjcmVhdGUgYSB1cmwgZm9yIGEgbW9kdWxlIGFjdGlvbi4NCiAgICogVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZCBhcyB0aGUgQ01TTW9kdWxlOjpjcmVhdGVfdXJsIG1ldGhvZCByZXBsYWNlcyBpdC4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkaWQgICAgICAgdGhlIG1vZHVsZSBhY3Rpb24gaWQNCiAgICogQHBhcmFtIHN0cmluZyAkYWN0aW9uICAgVGhlIG1vZHVsZSBhY3Rpb24NCiAgICogQHBhcmFtIHN0cmluZyAkcmV0dXJuaWQgVGhlIHBhZ2UgdGhhdCB0aGUgdXJsIHdpbGwgcmVmZXIgdG8uICBUaGlzIGlzIGVtcHR5IGZvciBhZG1pbiByZXF1ZXN0cw0KICAgKiBAcGFyYW0gYXJyYXkgICRwYXJhbXMgICBNb2R1bGUgcGFyYW1ldGVycw0KICAgKiBAcGFyYW0gYm9vbCAgICRpbmxpbmUgICBGb3IgZnJvbnRlbmQgcmVxdWVzdHMgb25seSBkaWN0YXRlcyB3aGV0aGVyIHRoaXMgdXJsIHNob3VsZCBiZSBpbmxpbmUgb25seS4NCiAgICogQHBhcmFtIHN0cmluZyAkcHJldHR5dXJsDQogICAqDQogICAqIEBkZXByZWNhdGVkDQogICAqLw0KICBmdW5jdGlvbiBDcmVhdGVVUkwoJGlkLCAkYWN0aW9uLCAkcmV0dXJuaWQsICRwYXJhbXMgPSBhcnJheSgpLCAkaW5saW5lID0gRkFMU0UsICRwcmV0dHl1cmwgPSAnJykNCiAgew0KICAgIFx0cmlnZ2VyX2Vycm9yKCdEZXByZWNhdGVkIHVzYWdlIG9mICcgLiBfX01FVEhPRF9fLCBcRV9VU0VSX0RFUFJFQ0FURUQgKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXMtPmNyZWF0ZV91cmwoJGlkLCAkYWN0aW9uLCAkcmV0dXJuaWQsICRwYXJhbXMsICRpbmxpbmUsIEZBTFNFLCAkcHJldHR5dXJsKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGNyZWF0ZSBhbiBpbWFnZSB0YWcuDQogICAqIFRoaXMgbWV0aG9kIHdpbGwgYXV0b21hdGljYWxseSBzZWFyY2ggdGhyb3VnaCBhZGRlZCBpbWFnZSBkaXJzIGZvciBmcm9udGVuZCBhbmQgYWRtaW4gcmVxdWVzdHMNCiAgICogYW5kIHRocm91Z2ggdGhlIGFkbWluIHRoZW1lIGRpcmVjdG9yaWVzIGZvciBhZG1pbiByZXF1ZXN0cy4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkaWQgICAgICBUaGUgbW9kdWxlIGFjdGlvbiBpZA0KICAgKiBAcGFyYW0gc3RyaW5nICRhbHQgICAgIFRoZSBhbHQgYXR0cmlidXRlIGZvciB0aGUgdGFnDQogICAqIEBwYXJhbSBpbnQgICAgJHdpZHRoICAgV2lkdGggaW4gcGl4ZWxzDQogICAqIEBwYXJhbSBpbnQgICAgJGhlaWdodCAgSGVpZ2h0IGluIHBpeGVscw0KICAgKiBAcGFyYW0gc3RyaW5nICRjbGFzcyAgIFZhbHVlIGZvciB0aGUgY2xhc3MgYXR0cmlidXRlDQogICAqIEBwYXJhbSBzdHJpbmcgJGFkZHRleHQgQWRkaXRpb25hbCB0ZXh0IGZvciB0aGUgaW1nIHRhZy4NCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICogQGRlcHJlY2F0ZWQNCiAgICogQHNlZSB4dF90YWdzOjpjcmVhdGVfaW1hZ2UNCiAgICogQHNlZSBBZGRJbWFnZURpci4NCiAgICovDQogIGZ1bmN0aW9uIENyZWF0ZUltYWdlVGFnKA0KICAgIHN0cmluZyAkaWQsIHN0cmluZyAkYWx0ID0gJycsIGludCAkd2lkdGggPSBOVUxMLCBpbnQgJGhlaWdodCA9IE5VTEwsIHN0cmluZyAkY2xhc3MgPSAnJywgc3RyaW5nICRhZGR0ZXh0ID0gJycNCiAgKQ0KICB7DQogICAgQFx0cmlnZ2VyX2Vycm9yKCdEZXByZWNhdGVkIHVzYWdlIG9mICcgLiBfX01FVEhPRF9fLCBcRV9VU0VSX0RFUFJFQ0FURUQpOw0KICAgIA0KICAgIHJldHVybiAkdGhpcy0+Z2V0X3V0aWxzKCktPkNyZWF0ZUltYWdlVGFnKCRpZCwgJGFsdCwgJHdpZHRoLCAkaGVpZ2h0LCAkY2xhc3MsICRhZGR0ZXh0KTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGNyZWF0ZSBhIGxpbmsgdG8gYSBtb2R1bGUgYWN0aW9uIGNvbnRhaW5pbmcgYW4gaW1hZ2UgYW5kIG9wdGlvbmFsbHkgc29tZSB0ZXh0Lg0KICAgKg0KICAgKiBUaGlzIG1ldGhvZCB3aWxsIGF1dG9tYXRpY2FsbHkgc2VhcmNoIHRocm91Z2ggYWRkZWQgaW1hZ2UgZGlycyBmb3IgZnJvbnRlbmQgYW5kIGFkbWluIHJlcXVlc3RzDQogICAqIGFuZCB0aHJvdWdoIHRoZSBhZG1pbiB0aGVtZSBkaXJlY3RvcmllcyBmb3IgYWRtaW4gcmVxdWVzdHMuDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJGlkICAgICAgICAgICBUaGUgbW9kdWxlIGFjdGlvbiBpZA0KICAgKiBAcGFyYW0gc3RyaW5nICRhY3Rpb24gICAgICAgVGhlIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uIGFjdGlvbg0KICAgKiBAcGFyYW0gaW50ICAgICRyZXR1cm5pZCAgICAgVGhlIHBhZ2UgZm9yIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgcmVxdWVzdC4gIEVtcHR5IGZvciBhZG1pbiByZXF1ZXN0cy4NCiAgICogQHBhcmFtIHN0cmluZyAkY29udGVudHMgICAgIFRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGltYWdlLg0KICAgKiBAcGFyYW0gc3RyaW5nICRpbWFnZSAgICAgICAgVGhlIGJhc2VuYW1lIG9mIHRoZSBpbWFnZSB0byBkaXNwbGF5Lg0KICAgKiBAcGFyYW0gYXJyYXkgICRwYXJhbXMgICAgICAgQWRkaXRpb25hbCBsaW5rIHBhcmFtZXRlcnMNCiAgICogQHBhcmFtIHN0cmluZyAkY2xhc3NuYW1lICAgIENsYXNzIGZvciB0aGUgaW1nIHRhZy4NCiAgICogQHBhcmFtIHN0cmluZyAkd2Fybl9tZXNzYWdlIEFuIG9wdGlvbmFsIGNvbmZpcm1hdGlvbiBtZXNzYWdlDQogICAqIEBwYXJhbSBib29sICAgJGltYWdlb25seSAgICBXZXRoZXIgdGhlIGNvbnRlbnRzIChpZiBzcGVjaWZpZWQpIHNob3VsZCBiZSBpZ25vcmVkLg0KICAgKiBAcGFyYW0gYm9vbCAgICRpbmxpbmUNCiAgICogQHBhcmFtIHN0cmluZyAkYWRkdGV4dA0KICAgKiBAcGFyYW0gYm9vbCAgICR0YXJnZXRjb250ZW50b25seQ0KICAgKiBAcGFyYW0gc3RyaW5nICRwcmV0dHl1cmwgICAgQW4gb3B0aW9uYWwgcHJldHR5IHVybCBzbHVnLg0KICAgKg0KICAgKiBAcmV0dXJuIHN0cmluZw0KICAgKiBAZGVwcmVjYXRlZA0KICAgKiBAc2VlIENyZWF0ZUxpbmsNCiAgICogQHNlZSBDcmVhdGVVUkwoKSkNCiAgICogQHNlZSB4dF90YWdzOjpjcmVhdGVfaW1hZ2UNCiAgICogQHNlZSBBZGRJbWFnZURpcigpKQ0KICAgKiBAc2VlIERpc3BsYXlJbWFnZSgpDQogICAqLw0KICBmdW5jdGlvbiBDcmVhdGVJbWFnZUxpbmsoDQogICAgJGlkLCAkYWN0aW9uLCAkcmV0dXJuaWQsICRjb250ZW50cywgJGltYWdlLCAkcGFyYW1zID0gYXJyYXkoKSwgJGNsYXNzbmFtZSA9ICcnLA0KICAgICR3YXJuX21lc3NhZ2UgPSAnJywgJGltYWdlb25seSA9IFRSVUUsICRpbmxpbmUgPSBGQUxTRSwNCiAgICAkYWRkdGV4dCA9ICcnLCAkdGFyZ2V0Y29udGVudG9ubHkgPSBGQUxTRSwgJHByZXR0eXVybCA9ICcnDQogICkNCiAgew0KICAgIEBcdHJpZ2dlcl9lcnJvcignRGVwcmVjYXRlZCB1c2FnZSBvZiAnIC4gX19NRVRIT0RfXywgXEVfVVNFUl9ERVBSRUNBVEVEKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXMtPmdldF91dGlscygpLT5DcmVhdGVJbWFnZUxpbmsoDQogICAgICAkdGhpcywgJGlkLCAkYWN0aW9uLCAkcmV0dXJuaWQsICRjb250ZW50cywgJGltYWdlLCAkcGFyYW1zLCAkY2xhc3NuYW1lLCAkd2Fybl9tZXNzYWdlLA0KICAgICAgJGltYWdlb25seSwgJGlubGluZSwgJGFkZHRleHQsICR0YXJnZXRjb250ZW50b25seSwgJHByZXR0eXVybA0KICAgICk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBMaXN0IGFsbCB0ZW1wbGF0ZXMgc3RvcmVkIHdpdGggdGhpcyBtb2R1bGUgdGhhdCBiZWdpbiB3aXRoIHRoZSBzYW1lIHByZWZpeC4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkcHJlZml4IFRoZSBvcHRpb25hbCBwcmVmaXgNCiAgICogQHBhcmFtIGJvb2wgICAkdHJpbQ0KICAgKg0KICAgKiBAcmV0dXJuIGFycmF5DQogICAqIEBzZWUgeHRfdGVtcGxhdGVfdXRpbHM6OmdldF90ZW1wbGF0ZXNfYnlfcHJlZml4KCkNCiAgICogQGRlcHJlY2F0ZWQNCiAgICovDQogIGZ1bmN0aW9uIExpc3RUZW1wbGF0ZXNXaXRoUHJlZml4KHN0cmluZyAkcHJlZml4ID0gJycsIGJvb2wgJHRyaW0gPSBGQUxTRSkNCiAgew0KICAgIEBcdHJpZ2dlcl9lcnJvcignRGVwcmVjYXRlZCB1c2FnZSBvZiAnIC4gX19NRVRIT0RfXywgXEVfVVNFUl9ERVBSRUNBVEVEKTsNCiAgICANCiAgICByZXR1cm4gXHh0X3RlbXBsYXRlX3V0aWxzOjpnZXRfdGVtcGxhdGVzX2J5X3ByZWZpeCgkdGhpcywgJHByZWZpeCwgJHRyaW0pOw0KICB9DQogIA0KICAvKioNCiAgICogR2V0IHRoZSB1c2VybmFtZSBvZiB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiBhZG1pbiB1c2VyLg0KICAgKg0KICAgKiBAcGFyYW0gaW50ICR1aWQNCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICogQGRlcHJlY2F0ZWQNCiAgICovDQogIGZ1bmN0aW9uIEdldEFkbWluVXNlcm5hbWUoaW50ICR1aWQpDQogIHsNCiAgICBAXHRyaWdnZXJfZXJyb3IoJ0RlcHJlY2F0ZWQgdXNhZ2Ugb2YgJyAuIF9fTUVUSE9EX18sIFxFX1VTRVJfREVQUkVDQVRFRCk7DQogICAgDQogICAgcmV0dXJuIFxVc2VyT3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCktPkxvYWRVc2VyQnlJRCgkdWlkKS0+dXNlcm5hbWU7DQogIH0NCiAgDQogIC8qKg0KICAgKiBBbiBhZHZhbmNlZCBtZXRob2QgdG8gcHJvY2VzcyBlaXRoZXIgYSBmaWxlLCBvciBkYXRhYmFzZSB0ZW1wbGF0ZSBmb3IgdGhpcyBtb2R1bGUNCiAgICogdGhyb3VnaCBzbWFydHkNCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkdGVtcGxhdGVfbmFtZSBUaGUgdGVtcGxhdGUgbmFtZS4gIElmIHRoZSB2YWx1ZSBvZiB0aGlzIHBhcmFtZXRlciBlbmRzIHdpdGggLnRwbCB0aGVuIGEgZmlsZQ0KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlIGlzIGFzc3VtZWQuICBPdGhlcndpc2UgYSBkYXRhYmFzZSB0ZW1wbGF0ZSBpcyBhc3N1bWVkLg0KICAgKiBAcGFyYW0gc3RyaW5nICRwcmVmaXggICAgICAgIEZvciBkYXRhYmFzZSB0ZW1wbGF0ZXMsIG9wdGlvbmFsbHkgcHJlZml4IHRoaWUgdGVtcGxhdGUgbmFtZSB3aXRoIHRoaXMgdmFsdWUuDQogICAqDQogICAqIEByZXR1cm4gc3RyaW5nIFRoZSBvdXRwdXQgZnJvbSB0aGUgcHJvY2Vzc2VkIHNtYXJ0eSB0ZW1wbGF0ZS4NCiAgICogQGRlcHJlY2F0ZWQNCiAgICovDQogIHB1YmxpYyBmdW5jdGlvbiBYVFByb2Nlc3NUZW1wbGF0ZShzdHJpbmcgJHRlbXBsYXRlX25hbWUsIHN0cmluZyAkcHJlZml4ID0gTlVMTCkNCiAgew0KICAgIFx0cmlnZ2VyX2Vycm9yKCdEZXByZWNhdGVkIHVzYWdlIG9mICcgLiBfX01FVEhPRF9fLCBcRV9VU0VSX0RFUFJFQ0FURUQgKTsNCiAgICAkcnNyYyAgID0gJHRoaXMtPlhUR2V0VGVtcGxhdGVSZXNvdXJjZSgkdGVtcGxhdGVfbmFtZSwgJHByZWZpeCk7DQogICAgJHNtYXJ0eSA9ICR0aGlzLT5HZXRBY3Rpb25UZW1wbGF0ZU9iamVjdCgpOw0KICAgIGlmKCEkc21hcnR5KQ0KICAgIHsNCiAgICAgICRzbWFydHkgPSAkdGhpcy0+Y21zLT5HZXRTbWFydHkoKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICRzbWFydHktPmZldGNoKCRyc3JjKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEEgZnVuY3Rpb24gdG8gaW50ZWxsaWdlbnRseSBkZXRlcm1pbmUgd2hpY2ggdGVtcGxhdGUgdG8gdXNlIGdpdmVuIHBhcmFtZXRlcnMsIGEgcGFyYW1ldGVyIG5hbWUsIGFuZCBhIHR5cGUgbmFtZS4NCiAgICogVGhpcyBtZXRob2Qgd2lsbCBlaXRoZXIgcmV0dXJuIGEgdGVtcGxhdGUgbmFtZSAoc3RyaW5nKSBvciBudWxsIGlmIG5vdGhpbmcgY2FuIGJlIGZvdW5kLg0KICAgKg0KICAgKiBUaGlzIG1ldGhvZCB1c2VzIHRoZSBMYXlvdXRUZW1wbGF0ZSBBUEkNCiAgICoNCiAgICogQHBhcmFtIGFycmF5ICAkcGFyYW1zICAgIElucHV0IG1vZHVsZSBhY3Rpb24gcGFyYW1ldGVycyBhcnJheS4NCiAgICogQHBhcmFtIHN0cm5nICAkcGFyYW1uYW1lIFRoZSBwYXJhbSBuYW1lIHRoYXQgbWF5IGhvbGQgYSB0ZW1wbGF0ZSBuYW1lLg0KICAgKiBAcGFyYW0gc3RyaW5nICR0eXBlbmFtZSAgVGhlIGNvbXBsZXRlIHRlbXBsYXRlIFR5cGVOYW1lIGkuZTogIFVwbG9hZHM6OlN1bW1hcnkNCiAgICoNCiAgICogQHJldHVybiBzdHJpbmd8bnVsbA0KICAgKiBAZGVwcmVjYXRlZA0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIGZpbmRfbGF5b3V0X3RlbXBsYXRlKGFycmF5ICRwYXJhbXMsIHN0cmluZyAkcGFyYW1uYW1lLCBzdHJpbmcgJHR5cGVuYW1lKQ0KICB7DQogICAgXHRyaWdnZXJfZXJyb3IoJ0RlcHJlY2F0ZWQgdXNhZ2Ugb2YgJyAuIF9fTUVUSE9EX18sIFxFX1VTRVJfREVQUkVDQVRFRCApOw0KICAgICR0aGV0ZW1wbGF0ZSA9IE5VTEw7DQogICAgaWYoIVxpc19hcnJheSgkcGFyYW1zKSB8fCAhKCR0aGV0ZW1wbGF0ZSA9IFx4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCAkcGFyYW1uYW1lKSkpDQogICAgew0KICAgICAgJHRwbCA9IFxDbXNMYXlvdXRUZW1wbGF0ZTo6bG9hZF9kZmx0X2J5X3R5cGUoJHR5cGVuYW1lKTsNCiAgICAgIGlmKCFcaXNfb2JqZWN0KCR0cGwpKQ0KICAgICAgew0KICAgICAgICBcYXVkaXQoJycsICR0aGlzLT5HZXROYW1lKCksICdObyBkZWZhdWx0ICcgLiAkdHlwZW5hbWUgLiAnIHRlbXBsYXRlIGZvdW5kJyk7DQogICAgICAgIA0KICAgICAgICByZXR1cm47DQogICAgICB9DQogICAgICAkdGhldGVtcGxhdGUgPSAkdHBsLT5nZXRfbmFtZSgpOw0KICAgICAgdW5zZXQoJHRwbCk7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkdGhldGVtcGxhdGU7DQogIH0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/module/trait.encryption_methods.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcbW9kdWxlOw0KDQoNCnRyYWl0IGVuY3J5cHRpb25fbWV0aG9kcw0Kew0KICAvKioNCiAgICogQSBjb252ZW5pZW5jZSBtZXRob2QgdG8gZW5jcnlwdCBzb21lIGRhdGENCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAka2V5ICBUaGUgZW5jcnlwdGlvbiBrZXkNCiAgICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgZGF0YSB0byBlbmNyeXB0DQogICAqDQogICAqIEByZXR1cm4gc3RyaW5nIFRoZSBlbmNyeXB0ZWQgZGF0YQ0KICAgKiBAc2VlIHh0X2VuY3J5cHQNCiAgICovDQogIGZ1bmN0aW9uIGVuY3J5cHQoc3RyaW5nICRrZXksICRkYXRhKQ0KICB7DQogICAgcmV0dXJuIFx4dF9lbmNyeXB0OjplbmNyeXB0KCRrZXksICRkYXRhKTsNCiAgfQ0KICANCiAgDQogIC8qKg0KICAgKiBBIGNvbnZlbmllbmNlIG1ldGhvZCB0byBkZWNyeXB0IHNvbWUgZGF0YQ0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgIFRoZSBlbmNyeXB0aW9uIGtleQ0KICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSBkYXRhIHRvIGRlY3J5cHQNCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcgVGhlIGRlcnlwdGVkIGRhdGENCiAgICogQHNlZSB4dF9lbmNyeXB0DQogICAqLw0KICBmdW5jdGlvbiBkZWNyeXB0KHN0cmluZyAka2V5LCBzdHJpbmcgJGRhdGEpDQogIHsNCiAgICByZXR1cm4gXHh0X2VuY3J5cHQ6OmRlY3J5cHQoJGtleSwgJGRhdGEpOw0KICB9DQogIA0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/module/trait.form_methods.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcbW9kdWxlOw0KDQoNCnRyYWl0IGZvcm1fbWV0aG9kcw0Kew0KICANCiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KICAvKiBGT1JNIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCiAgDQogIC8qKg0KICAgKiBBIGNvbnZlbmllbmNlIG1ldGhvZCB0byBjcmVhdGUgYSBjb250cm9sIHRoYXQgY29udGFpbnMgYSAnc29ydGFibGUgbGlzdCcuDQogICAqIFRoZSBvdXRwdXQgY29udHJvbCBpcyB0cmFuc2xhdGVkLCBhbmQgaW50ZXJhY3RpdmUgYW5kIHN1aXRhYmxlIGZvciB1c2UgaW4gZm9ybXMuDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJGlkICAgICAgICAgICBUaGUgbW9kdWxlIGFjdGlvbiBpZA0KICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lICAgICAgICAgVGhlIGlucHV0IGVsZW1lbnQgbmFtZQ0KICAgKiBAcGFyYW0gYXJyYXkgICRpdGVtcyAgICAgICAgQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgdGhlIGl0ZW1zIGZvciB0aGlzIGxpc3QuDQogICAqIEBwYXJhbSBzdHJpbmcgJHNlbGVjdGVkICAgICBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2Ygc2VsZWN0ZWQgaXRlbSBrZXlzDQogICAqIEBwYXJhbSBib29sICAgJGFsbG93ZHVwbGljYXRlcw0KICAgKiBAcGFyYW0gaW50ICAgICRtYXhfc2VsZWN0ZWQgVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIHNlbGVjdGVkDQogICAqIEBwYXJhbSBzdHJpbmcgJHRlbXBsYXRlICAgICBTcGVjaWZ5IGFuIGFsdGVybmF0ZSB0ZW1wbGF0ZSBmZm9yIHRoZSBzb3J0YWJsZSBsaXN0IGNvbnRyb2wuICBTbWFydHkgcmVzb3VyY2VzIGFyZQ0KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWl0dGVkLiAgQnV0IGlmIG5vIHJlc291cmNlIGlzIHNwZWNpZmllZCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHRlbXBsYXRlIGJlbG9uZ3MgdG8NCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENNU01TRXh0Lg0KICAgKiBAcGFyYW0gc3RyaW5nICRsYWJlbF9sZWZ0ICAgQSBsYWJlbCBmb3IgdGhlIGxlZnQgY29sdW1uLg0KICAgKiBAcGFyYW0gc3RyaW5nICRsYWJlbF9yaWdodCAgQSBsYWJlbCBmb3IgdGhlIHJpZ2h0IGNvbHVtbi4NCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICogQHRocm93cyBcU21hcnR5RXhjZXB0aW9uDQogICAqIEBkZXByZWNhdGVkDQogICAqLw0KICBmdW5jdGlvbiBDcmVhdGVTb3J0YWJsZUxpc3RBcmVhKA0KICAgICRpZCwgJG5hbWUsICRpdGVtcywgJHNlbGVjdGVkID0gJycsICRhbGxvd2R1cGxpY2F0ZXMgPSBUUlVFLCAkbWF4X3NlbGVjdGVkID0gLTEsDQogICAgJHRlbXBsYXRlID0gJycsICRsYWJlbF9sZWZ0ID0gJycsICRsYWJlbF9yaWdodCA9ICcnDQogICkNCiAgew0KICAgICR4dCA9ICR0aGlzLT5nZXRfeHQoKTsNCiAgICBpZihlbXB0eSgkbGFiZWxfbGVmdCkpDQogICAgew0KICAgICAgJGxhYmVsX2xlZnQgPSAkeHQtPkxhbmcoJ3NlbGVjdGVkJyk7DQogICAgfQ0KICAgIGlmKGVtcHR5KCRsYWJlbF9yaWdodCkpDQogICAgew0KICAgICAgJGxhYmVsX3JpZ2h0ID0gJHh0LT5MYW5nKCdhdmFpbGFibGUnKTsNCiAgICB9DQogICAgaWYoISR0ZW1wbGF0ZSkNCiAgICB7DQogICAgICAkdGVtcGxhdGUgPSAnc29ydGFibGVsaXN0LnRwbCc7DQogICAgfQ0KICAgIA0KICAgICR0cGwgPSAkeHQtPkNyZWF0ZVNtYXJ0eVRlbXBsYXRlKCR0ZW1wbGF0ZSk7DQogICAgJHRwbC0+YXNzaWduKCdzZWxlY3RhcmVhX3NlbGVjdGVkX3N0cicsIE5VTEwpOw0KICAgICR0cGwtPmFzc2lnbignc2VsZWN0YXJlYV9zZWxlY3RlZCcsIFtdKTsNCiAgICANCiAgICBpZighZW1wdHkoJHNlbGVjdGVkKSkNCiAgICB7DQogICAgICAkc2VsID0gXGV4cGxvZGUoJywnLCAkc2VsZWN0ZWQpOw0KICAgICAgJHRtcCA9IFtdOw0KICAgICAgZm9yZWFjaCgkc2VsIGFzICR0aGVpZCkNCiAgICAgIHsNCiAgICAgICAgaWYoXGFycmF5X2tleV9leGlzdHMoJHRoZWlkLCAkaXRlbXMpKQ0KICAgICAgICB7DQogICAgICAgICAgJHRtcFskdGhlaWRdID0gJGl0ZW1zWyR0aGVpZF07DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgICR0cGwtPmFzc2lnbignc2VsZWN0YXJlYV9zZWxlY3RlZF9zdHInLCAkc2VsZWN0ZWQpOw0KICAgICAgJHRwbC0+YXNzaWduKCdzZWxlY3RhcmVhX3NlbGVjdGVkJywgJHRtcCk7DQogICAgfQ0KICAgIA0KICAgICR0cGwtPmFzc2lnbigneHQnLCAkeHQpOw0KICAgICR0cGwtPmFzc2lnbignbWF4X3NlbGVjdGVkJywgJG1heF9zZWxlY3RlZCk7DQogICAgJHRwbC0+YXNzaWduKCdsYWJlbF9sZWZ0JywgJGxhYmVsX2xlZnQpOw0KICAgICR0cGwtPmFzc2lnbignbGFiZWxfcmlnaHQnLCAkbGFiZWxfcmlnaHQpOw0KICAgICR0cGwtPmFzc2lnbignc2VsZWN0YXJlYV9tYXN0ZXJsaXN0JywgJGl0ZW1zKTsNCiAgICAkdHBsLT5hc3NpZ24oJ3NlbGVjdGFyZWFfcHJlZml4JywgJGlkIC4gJG5hbWUpOw0KICAgIA0KICAgIGlmKCRhbGxvd2R1cGxpY2F0ZXMpDQogICAgew0KICAgICAgJGFsbG93ZHVwbGljYXRlcyA9IDE7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkYWxsb3dkdXBsaWNhdGVzID0gMDsNCiAgICB9DQogICAgDQogICAgJHRwbC0+YXNzaWduKCdhbGxvd2R1cGxpY2F0ZXMnLCAkYWxsb3dkdXBsaWNhdGVzKTsNCiAgICAkdHBsLT5hc3NpZ24oJ3Vwc3RyJywgJHh0LT5MYW5nKCd1cCcpKTsNCiAgICAkdHBsLT5hc3NpZ24oJ2Rvd25zdHInLCAkeHQtPkxhbmcoJ2Rvd24nKSk7DQogICAgDQogICAgcmV0dXJuICR0cGwtPmZldGNoKCk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBDcmVhdGUgYSB0cmFuc2xhdGVkIFllcy9ObyBkcm9wZG93bi4NCiAgICogVGhlIG91dHB1dCBjb250cm9sIGlzIHRyYW5zbGF0ZWQsIGFuZCBzdWl0YWJsZSBmb3IgdXNlIGluIGZvcm1zLg0KICAgKiBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiAgSXQgaXMgYmVzdCB0byBhc3NpZ24gYWxsIGRhdGEgdG8gc21hcnR5IGFuZCB0aGVuIGNyZWF0ZSBpbnB1dCBlbGVtZW50cyBhcyBuZWNlc3NhcnkgaW4NCiAgICogdGhlIHNtYXJ0eSB0ZW1wbGF0ZS4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkaWQgICAgICAgICAgICB0aGUgbW9kdWxlIGFjdGlvbiBpZA0KICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lICAgICAgICAgIFRoZSBuYW1lIGZvciB0aGUgaW5wdXQgZWxlbWVudA0KICAgKiBAcGFyYW0gaW50ICAgICRzZWxlY3RlZHZhbHVlIFRoZSBzZWxlY3RlZCB2YWx1ZSAoMCA9PSBubywgMSA9PSB5ZXMpDQogICAqIEBwYXJhbSBzdHJpbmcgJGFkZHRleHQNCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICogQGRlcHJlY2F0ZWQNCiAgICovDQogIGZ1bmN0aW9uIENyZWF0ZUlucHV0WWVzTm9Ecm9wZG93bigkaWQsICRuYW1lLCAkc2VsZWN0ZWR2YWx1ZSA9ICcnLCAkYWRkdGV4dCA9ICcnKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5nZXRfdXRpbHMoKS0+eHRfQ3JlYXRlSW5wdXRZZXNOb0Ryb3Bkb3duKCRpZCwgJG5hbWUsICRzZWxlY3RlZHZhbHVlLCAkYWRkdGV4dCk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBDcmVhdGUgYSBjdXN0b20gc3VibWl0IGJ1dHRvbi4NCiAgICogVGhlIG91dHB1dCBjb250cm9sIGlzIHRyYW5zbGF0ZWQsIGFuZCBzdWl0YWJsZSBmb3IgdXNlIGluIGZvcm1zLg0KICAgKiBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiAgSXQgaXMgYmVzdCB0byBhc3NpZ24gYWxsIGRhdGEgdG8gc21hcnR5IGFuZCB0aGVuIGNyZWF0ZSBpbnB1dCBlbGVtZW50cyBhcyBuZWNlc3NhcnkgaW4NCiAgICogdGhlIHNtYXJ0eSB0ZW1wbGF0ZS4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkaWQgICAgICAgICAgdGhlIG1vZHVsZSBhY3Rpb24gaWQNCiAgICogQHBhcmFtIHN0cmluZyAkbmFtZSAgICAgICAgVGhlIG5hbWUgZm9yIHRoZSBpbnB1dCBlbGVtZW50DQogICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlICAgICAgIFRoZSB2YWx1ZSBmb3IgdGhlIHN1Ym1pdCBidXR0b24NCiAgICogQHBhcmFtIHN0cmluZyAkYWRkdGV4dCAgICAgQWRkaXRpb25hbCB0ZXh0IGZvciB0aGUgdGFnDQogICAqIEBwYXJhbSBzdHJpbmcgJGltYWdlICAgICAgIGFuIG9wdGlvbmFsIGltYWdlIHBhdGgNCiAgICogQHBhcmFtIHN0cmluZyAkY29uZmlybXRleHQgT3B0aW9uYWwgY29uZmlybWF0aW9uIHRleHQNCiAgICogQHBhcmFtIHN0cmluZyAkY2xhc3MgICAgICAgT3B0aW9uYWwgdmFsdWUgZm9yIHRoZSBjbGFzcyBhdHRyaWJ1dGUNCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICogZnVuY3Rpb24geHRDcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJG5hbWUsJHZhbHVlPScnLCRhZGR0ZXh0PScnLCRpbWFnZT0nJywgJGNvbmZpcm10ZXh0PScnLCRjbGFzcz0nJykNCiAgICogew0KICAgKiAkdGhpcy0+X2xvYWRfZm9ybSgpOw0KICAgKiByZXR1cm4geHRfQ3JlYXRlSW5wdXRTdWJtaXQoJHRoaXMsJGlkLCRuYW1lLCR2YWx1ZSwkYWRkdGV4dCwkaW1hZ2UsJGNvbmZpcm10ZXh0LCRjbGFzcyk7DQogICAqIH0NCiAgICogQGRlcHJlY2F0ZWQNCiAgICovDQogIA0KICANCiAgLyoqDQogICAqIENyZWF0ZSBhIGN1c3RvbSBjaGVja2JveC4NCiAgICogVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBzdGFuZGFyZCBjaGVja2JveCBidXQgaGFzIGEgaGlkZGVuIGZpZWxkIHdpdGggdGhlIHNhbWUgbmFtZQ0KICAgKiBiZWZvcmUgaXQgc28gdGhhdCBzb21lIHZhbHVlIGZvciB0aGlzIGZpZWxkIGlzIGFsd2F5cyByZXR1cm5lZCB0byB0aGUgZm9ybSBoYW5kbGVyLg0KICAgKiBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiAgSXQgaXMgYmVzdCB0byBhc3NpZ24gYWxsIGRhdGEgdG8gc21hcnR5IGFuZCB0aGVuIGNyZWF0ZSBpbnB1dCBlbGVtZW50cyBhcyBuZWNlc3NhcnkgaW4NCiAgICogdGhlIHNtYXJ0eSB0ZW1wbGF0ZS4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkaWQgICAgICAgICAgICB0aGUgbW9kdWxlIGFjdGlvbiBpZA0KICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lICAgICAgICAgIFRoZSBuYW1lIGZvciB0aGUgaW5wdXQgZWxlbWVudA0KICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSAgICAgICAgIFRoZSB2YWx1ZSBmb3IgdGhlIGNoZWNrYm94DQogICAqIEBwYXJhbSBzdHJpbmcgJHNlbGVjdGVkdmFsdWUgVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGZpZWxkLg0KICAgKiBAcGFyYW0gc3RyaW5nICRhZGR0ZXh0ICAgICAgIEFkZGl0aW9uYWwgdGV4dCBmb3IgdGhlIHRhZw0KICAgKg0KICAgKiBAcmV0dXJuIHN0cmluZw0KICAgKiBAZGVwcmVjYXRlZA0KICAgKi8NCiAgZnVuY3Rpb24gQ3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICRuYW1lLCAkdmFsdWUgPSAnJywgJHNlbGVjdGVkdmFsdWUgPSAnJywgJGFkZHRleHQgPSAnJykNCiAgew0KICAgIEBcdHJpZ2dlcl9lcnJvcignRGVwcmVjYXRlZCB1c2FnZSBvZiAnIC4gX19NRVRIT0RfXyk7DQogICAgJHRoaXMtPl9sb2FkX2Zvcm0oKTsNCiAgICANCiAgICByZXR1cm4gXHh0X0NyZWF0ZUlucHV0Q2hlY2tib3goJHRoaXMsICRpZCwgJG5hbWUsICR2YWx1ZSwgJHNlbGVjdGVkdmFsdWUsICRhZGR0ZXh0KTsNCiAgfQ0KICANCiAgDQogIC8qKg0KICAgKiBBIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBjcmVhdGluZyBmb3JtIHRhZ3MuDQogICAqIFRoaXMgbWV0aG9kIHJlLW9yZ2FuaXNlcyBzb21lIG9mIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBvcmlnaW5hbCBDcmVhdGVGb3JtU3RhcnQgbWV0aG9kDQogICAqIGFuZCBoYW5kbGVzIGN1cnJlbnQgdGFiIGZ1bmN0aW9uYWx0eSwgYW5kIHNldHMgdGhlIGVuY29kaW5nIHR5cGUgb2YgdGhlIGZvcm0gdG8gbXVsdGlwYXJ0L2Zvcm0tZGF0YQ0KICAgKg0KICAgKiBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlcGxhY2VkIGluIENNU01TIDIuMCBieSB0aGUgY29yZSB7Zm9ybV9zdGFydH0gdGFnLg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICRpZCAgICAgICB0aGUgbW9kdWxlIGFjdGlvbiBpZA0KICAgKiBAcGFyYW0gc3RyaW5nICRhY3Rpb24gICB0aGUgZGVzdGluYXRpb24gYWN0aW9uDQogICAqIEBwYXJhbSBzdHJpbmcgJHJldHVybmlkIFRoZSBkZXN0aW5hdGlvbiBwYWdwZSBmb3IgdGhlIGFjdGlvbiBoYW5kbGVyLiAgRW1wdHkgZm9yIGFkbWluIHJlcXVlc3RzDQogICAqIEBwYXJhbSBhcnJheSAgJHBhcmFtcyAgIGFkZGl0aW9uYWwgcGFyYW1ldGVycyB0byBiZSBwYXNzZWQgd2l0aCB0aGUgZm9ybQ0KICAgKiBAcGFyYW0gYm9vbCAgICRpbmxpbmUgICB3ZXRoZXIgdGhpcyBpcyBhbiBpbmxpbmUgZm9ybSByZXF1ZXN0IChvdXRwdXQgd2lsbCByZXBsYWNlIG1vZHVsZSB0YWcgcmF0aGVyIHRoYW4gdGhlDQogICAqICAgICAgICAgICAgICAgICAgICAgICAgIGVudGlyZSBjb250ZW50IHNlY3Rpb24gb2YgdGhlIHRlbXBsYXRlLg0KICAgKiBAcGFyYW0gc3RyaW5nICRtZXRob2QgICBUaGUgZm9ybSBtZXRob2QuDQogICAqIEBwYXJhbSBzdHJpbmcgJGVuY3R5cGUgIFRoZSBmb3JtIGVuY29kaW5nIHR5cGUNCiAgICogQHBhcmFtIHN0cmluZyAkaWRzdWZmaXgNCiAgICogQHBhcmFtIHN0cmluZyAkZXh0cmEgICAgRXh0cmEgdGV4dCBmb3IgdGhoZSBmb3JtIHRhZw0KICAgKg0KICAgKiBAcmV0dXJuIHN0cmluZw0KICAgKiBAZGVwcmVjYXRlZA0KICAgKi8NCiAgZnVuY3Rpb24gWFRDcmVhdGVGb3JtU3RhcnQoDQogICAgJGlkLCAkYWN0aW9uID0gJ2RlZmF1bHQnLCAkcmV0dXJuaWQgPSAnJywgJHBhcmFtcyA9IGFycmF5KCksICRpbmxpbmUgPSBGQUxTRSwgJG1ldGhvZCA9ICdwb3N0JywNCiAgICAkZW5jdHlwZSA9ICcnLCAkaWRzdWZmaXggPSAnJywgJGV4dHJhID0gJycNCiAgKQ0KICB7DQogICAgQFx0cmlnZ2VyX2Vycm9yKCdEZXByZWNhdGVkIHVzYWdlIG9mICcgLiBfX01FVEhPRF9fKTsNCiAgICBpZignJyA9PSAkZW5jdHlwZSkNCiAgICB7DQogICAgICAkZW5jdHlwZSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhJzsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAkYWN0aW9uLCAkcmV0dXJuaWQsICRtZXRob2QsICRlbmN0eXBlLCAkaW5saW5lLCAkaWRzdWZmaXgsICRwYXJhbXMsICRleHRyYSk7DQogIH0NCiAgDQogIA0KICAvKioNCiAgICogQSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBmcm9udGVuZCBmb3JtDQogICAqIFRoaXMgbWV0aG9kIHJlLW9yZ2FuaXNlcyBzb21lIG9mIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBvcmlnaW5hbCBDcmVhdGVGb3JtU3RhcnQgbWV0aG9kDQogICAqIGFuZCBzZXRzIHRoZSBlbmNvZGluZyB0eXBlIG9mIHRoZSBmb3JtIHRvIG11bHRpcGFydC9mb3JtLWRhdGENCiAgICoNCiAgICogVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZXBsYWNlZCBpbiBDTVNNUyAyLjAgYnkgdGhlIGNvcmUge2Zvcm1fc3RhcnR9IHRhZy4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkaWQgICAgICAgdGhlIG1vZHVsZSBhY3Rpb24gaWQNCiAgICogQHBhcmFtIHN0cmluZyAkYWN0aW9uICAgdGhlIGRlc3RpbmF0aW9uIGFjdGlvbg0KICAgKiBAcGFyYW0gc3RyaW5nICRyZXR1cm5pZCBUaGUgZGVzdGluYXRpb24gcGFncGUgZm9yIHRoZSBhY3Rpb24gaGFuZGxlci4gIEVtcHR5IGZvciBhZG1pbiByZXF1ZXN0cw0KICAgKiBAcGFyYW0gYXJyYXkgICRwYXJhbXMgICBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIHdpdGggdGhlIGZvcm0NCiAgICogQHBhcmFtIGJvb2wgICAkaW5saW5lICAgd2V0aGVyIHRoaXMgaXMgYW4gaW5saW5lIGZvcm0gcmVxdWVzdCAob3V0cHV0IHdpbGwgcmVwbGFjZSBtb2R1bGUgdGFnIHJhdGhlciB0aGFuIHRoZQ0KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpcmUgY29udGVudCBzZWN0aW9uIG9mIHRoZSB0ZW1wbGF0ZS4NCiAgICogQHBhcmFtIHN0cmluZyAkbWV0aG9kICAgVGhlIGZvcm0gbWV0aG9kLg0KICAgKiBAcGFyYW0gc3RyaW5nICRlbmN0eXBlICBUaGUgZm9ybSBlbmNvZGluZyB0eXBlDQogICAqIEBwYXJhbSBzdHJpbmcgJGlkc3VmZml4DQogICAqIEBwYXJhbSBzdHJpbmcgJGV4dHJhICAgIEV4dHJhIHRleHQgZm9yIHRoaGUgZm9ybSB0YWcNCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICogQGRlcHJlY2F0ZWQNCiAgICovDQogIGZ1bmN0aW9uIFhUQ3JlYXRlRnJvbnRlbmRGb3JtU3RhcnQoDQogICAgJGlkLCAkYWN0aW9uID0gJ2RlZmF1bHQnLCAkcmV0dXJuaWQgPSAnJywgJHBhcmFtcyA9IGFycmF5KCksICRpbmxpbmUgPSBUUlVFLCAkbWV0aG9kID0gJ3Bvc3QnLA0KICAgICRlbmN0eXBlID0gJycsICRpZHN1ZmZpeCA9ICcnLCAkZXh0cmEgPSAnJw0KICApDQogIHsNCiAgICBAXHRyaWdnZXJfZXJyb3IoJ0RlcHJlY2F0ZWQgdXNhZ2Ugb2YgJyAuIF9fTUVUSE9EX18pOw0KICAgICR0aGlzLT5fbG9hZF9mb3JtKCk7DQogICAgDQogICAgcmV0dXJuICR0aGlzLT5DcmVhdGVGcm9udGVuZEZvcm1TdGFydCgNCiAgICAgICRpZCwgJHJldHVybmlkLCAkYWN0aW9uLCAkbWV0aG9kLCAkZW5jdHlwZSwgJGlubGluZSwgJGlkc3VmZml4LCAkcGFyYW1zLCAkZXh0cmENCiAgICApOw0KICB9DQogIA0KICANCiAgLyoqDQogICAqIEEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGNyZWF0ZSBhIGhpZGRlbiBpbnB1dCBlbGVtZW50IGZvciBmb3Jtcy4NCiAgICogVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIEl0IGlzIGJlc3QgdG8gYXNzaWduIGFsbCBkYXRhIHRvIHNtYXJ0eSBhbmQgdGhlbiBjcmVhdGUgaW5wdXQgZWxlbWVudHMgYXMgbmVjZXNzYXJ5IGluDQogICAqIHRoZSBzbWFydHkgdGVtcGxhdGUuDQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJGlkICAgICAgdGhlIG1vZHVsZSBhY3Rpb24gaWQNCiAgICogQHBhcmFtIHN0cmluZyAkbmFtZSAgICBUaGUgbmFtZSBvZiB0aGUgaW5wdXQgZWxlbWVudA0KICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSAgIFRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgZWxlbWVudA0KICAgKiBAcGFyYW0gc3RyaW5nICRhZGR0ZXh0IEFkZGl0aW9uYWwgdGV4dCBmb3IgdGhlIHRhZw0KICAgKiBAcGFyYW0gc3RyaW5nICRkZWxpbSAgIHRoZSBkZWxpbWl0ZXIgZm9yIHZhbHVlIHNlcGFyYXRpb24uDQogICAqDQogICAqIEByZXR1cm4gc3RyaW5nDQogICAqIEBkZXByZWNhdGVkDQogICAqLw0KICBmdW5jdGlvbiBDcmVhdGVJbnB1dEhpZGRlbigkaWQsICRuYW1lLCAkdmFsdWUgPSAnJywgJGFkZHRleHQgPSAnJywgJGRlbGltID0gJywnKQ0KICB7DQogICAgQFx0cmlnZ2VyX2Vycm9yKCdEZXByZWNhdGVkIHVzYWdlIG9mICcgLiBfX01FVEhPRF9fKTsNCiAgICAkdGhpcy0+X2xvYWRfZm9ybSgpOw0KICAgIA0KICAgIHJldHVybiBceHRfQ3JlYXRlSW5wdXRIaWRkZW4oJHRoaXMsICRpZCwgJG5hbWUsICR2YWx1ZSwgJGFkZHRleHQsICRkZWxpbSk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbiBpbWFnZSBkcm9wZG93biBmcm9tIGFsbCBvZiB0aGUgaW1hZ2UgZmlsZXMgaW4gYSBzcGVjaWZpZWQgZGlyZWN0b3J5Lg0KICAgKiBUaGlzIG1ldGhvZCB3aWxsIG5vdCBpZ25vcmUgdGh1bWJuYWlscy4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkaWQgICAgICAgICAgIFRoZSBtb2R1bGUgYWN0aW9uIGlkDQogICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgICAgICAgICB0aGUgbmFtZSBmb3IgdGhlIGRyb3Bkb3duLg0KICAgKiBAcGFyYW0gc3RyaW5nICRzZWxlY3RlZGZpbGUgVGhlIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBkcm9wZG93biAoYW4gaW1hZ2UgZmlsZW5hbWUpDQogICAqIEBwYXJhbSBzdHJpbmcgJGRpciAgICAgICAgICBUaGUgcGF0aCAocmVsYXRpdmUgdG8gdGhlIHVwbG9hZHMgcGF0aCkgdG8gdGhlIGRpcmVjdG9yeSB0byBwdWxsIGltYWdlcyBmcm9tLiAgSWYgbm90DQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQsIHRoZSBpbWFnZSB1cGxvYWRzIHBhdGggd2lsbCBiZSB1c2VkLg0KICAgKiBAcGFyYW0gbWl4ZWQgICRub25lICAgICAgICAgSWYgdHJ1ZSwgdGhlbiAnTm9uZScgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhlIGxpc3Qgb2Ygb3V0cHV0IGltYWdlcy4gIElmIGEgc3RyaW5nIGl0J3MNCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHdpbGwgYmUgdXNlZC4NCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcuDQogICAqIEBkZXByZWNhdGVkDQogICAqLw0KICBmdW5jdGlvbiBDcmVhdGVJbWFnZURyb3Bkb3duKCRpZCwgJG5hbWUsICRzZWxlY3RlZGZpbGUsICRkaXIgPSAnJywgJG5vbmUgPSAnJykNCiAgew0KICAgIC8vdHJpZ2dlcl9lcnJvcignRGVwcmVjYXRlZCB1c2FnZSBvZiAnIC4gX19NRVRIT0RfXyk7DQogICAgJGNvbmZpZyA9ICR0aGlzLT5jb25maWc7DQogICAgDQogICAgaWYoc3RhcnRzd2l0aCgkZGlyLCAnLicpKSB7ICRkaXIgPSAnJzsgfQ0KICAgIA0KICAgIGlmKCcnID09ICRkaXIpDQogICAgew0KICAgICAgJGRpciA9ICRjb25maWdbJ2ltYWdlX3VwbG9hZHNfcGF0aCddOw0KICAgIH0NCiAgICANCiAgICBpZighXGlzX2RpcigkZGlyKSkNCiAgICB7DQogICAgICAkZGlyID0gXGNtc19qb2luX3BhdGgoJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ10sICRkaXIpOw0KICAgIH0NCiAgICANCiAgICANCiAgICAkZXh0ZW5zaW9ucyA9ICR0aGlzLT54dF9zZXR0aW5ncygpLT5pbWFnZWV4dGVuc2lvbnM7DQogICAgJGZpbGVsaXN0ICAgPSBceHRfZGlyOjpnZXRfZmlsZV9saXN0KCRkaXIsICRleHRlbnNpb25zKTsNCiAgICANCiAgICBpZigkbm9uZSkNCiAgICB7DQogICAgICBpZighXGlzX3N0cmluZygkbm9uZSkpDQogICAgICB7DQogICAgICAgICR4dCAgPSAkdGhpcy0+Z2V0X3h0KCk7DQogICAgICAgICRub25lID0gJHh0LT5MYW5nKCdub25lJyk7DQogICAgICB9DQogICAgICANCiAgICAgICRmaWxlbGlzdCA9IFxhcnJheV9tZXJnZShbJG5vbmUgPT4gJyddLCAkZmlsZWxpc3QpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAkbmFtZSwgJGZpbGVsaXN0LCAtMSwgJHNlbGVjdGVkZmlsZSk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGxpc3Qgb2YgZmlsZW5hbWVzIGluIGEgc3BlY2lmaWVkIGRpcmVjdG9yeS4NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkaWQgICAgICAgICAgICBUaGUgbW9kdWxlIGFjdGlvbiBpZA0KICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lICAgICAgICAgIHRoZSBuYW1lIGZvciB0aGUgZHJvcGRvd24uDQogICAqIEBwYXJhbSBzdHJpbmcgJHNlbGVjdGVkZmlsZSAgVGhlIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBkcm9wZG93biAoYW4gaW1hZ2UgZmlsZW5hbWUpDQogICAqIEBwYXJhbSBzdHJpbmcgJGRpciAgICAgICAgICAgVGhlIHBhdGggKHJlbGF0aXZlIHRvIHRoZSB1cGxvYWRzIHBhdGgpIHRvIHRoZSBkaXJlY3RvcnkgdG8gcHVsbCBpbWFnZXMgZnJvbS4gIElmIG5vdA0KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCwgdGhlIGltYWdlIHVwbG9hZHMgcGF0aCB3aWxsIGJlIHVzZWQuDQogICAqIEBwYXJhbSBzdHJpbmcgJGV4dGVuc2lvbnMgICAgQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBmaWxlbmFtZSBleHRlbnNpb25zIHRvIGluY2x1ZGUgaW4gdGhlIGxpc3QuICBJZiBub3QNCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgdGhlIG1vZHVsZSBwcmVmZXJlbmNlIHdpbGwgYmUgdXNlZC4NCiAgICogQHBhcmFtIGJvb2wgICAkYWxsb3dub25lICAgICBBbGxvdyBubyBmaWxlcyB0byBiZSBzZWxlY3RlZC4NCiAgICogQHBhcmFtIGJvb2wgICAkYWxsb3dtdWx0aXBsZSBUbyBhbGxvdyBzZWxlY3RpbmcgbXVsdGlwbGUgZmlsZXMuDQogICAqIEBwYXJhbSBpbnQgICAgJHNpemUgICAgICAgICAgVGhlIHNpemUgb2YgdGhlIGRyb3Bkb3duLg0KICAgKg0KICAgKiBAcmV0dXJuIHN0cmluZy4NCiAgICogQGRlcHJlY2F0ZWQNCiAgICovDQogIGZ1bmN0aW9uIENyZWF0ZUZpbGVEcm9wZG93bigNCiAgICAkaWQsICRuYW1lLCAkc2VsZWN0ZWRmaWxlID0gJycsICRkaXIgPSAnJywgJGV4dGVuc2lvbnMgPSAnJywgJGFsbG93bm9uZSA9ICcnLCAkYWxsb3dtdWx0aXBsZSA9IEZBTFNFLCAkc2l6ZSA9IDMNCiAgKQ0KICB7DQogICAgLy90cmlnZ2VyX2Vycm9yKCdEZXByZWNhdGVkIHVzYWdlIG9mICcgLiBfX01FVEhPRF9fKTsNCiAgICAkY29uZmlnID0gJHRoaXMtPmNvbmZpZzsNCiAgICBpZignJyA9PSAkZGlyKQ0KICAgIHsNCiAgICAgICRkaXIgPSAkY29uZmlnWyd1cGxvYWRzX3BhdGgnXTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgIHdoaWxlKHN0YXJ0c3dpdGgoJGRpciwgJy8nKSAmJiAnJyAhPSAkZGlyKQ0KICAgICAgew0KICAgICAgICAkZGlyID0gXHN1YnN0cigkZGlyLCAxKTsNCiAgICAgIH0NCiAgICAgICRkaXIgPSAkY29uZmlnWyd1cGxvYWRzX3BhdGgnXSAuICRkaXI7DQogICAgfQ0KICAgIA0KICAgICR0bXAgID0gXHh0X2Rpcjo6Z2V0X2ZpbGVfbGlzdCgkZGlyLCAkZXh0ZW5zaW9ucyk7DQogICAgJHRtcDIgPSBbXTsNCiAgICBpZighZW1wdHkoJGFsbG93bm9uZSkpDQogICAgew0KICAgICAgJHh0ICAgICAgICAgICAgICAgICAgICAgID0gJHRoaXMtPmdldF94dCgpOw0KICAgICAgJHRtcDJbJHh0LT5MYW5nKCdub25lJyldID0gJyc7DQogICAgfQ0KICAgICRmaWxlbGlzdCA9IFxhcnJheV9tZXJnZSgkdG1wMiwgJHRtcCk7DQogICAgDQogICAgaWYoJGFsbG93bXVsdGlwbGUpDQogICAgew0KICAgICAgaWYoIWVuZHN3aXRoKCRuYW1lLCAnW10nKSkNCiAgICAgIHsNCiAgICAgICAgJG5hbWUgLj0gJ1tdJzsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgcmV0dXJuICR0aGlzLT5DcmVhdGVJbnB1dFNlbGVjdExpc3QoJGlkLCAkbmFtZSwgJGZpbGVsaXN0LCBbXSwgJHNpemUpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAkbmFtZSwgJGZpbGVsaXN0LCAtMSwgJHNlbGVjdGVkZmlsZSk7DQogIH0NCiAgDQogIA0KICAvKioNCiAgICogQSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0byBjcmVhdGUgYSBjb2xvciBzZWxlY3Rpb24gZHJvcGRvd24NCiAgICoNCiAgICogQHBhcmFtIHN0cmluZyAkaWQgICAgICAgICAgICBUaGUgbW9kdWxlIGFjdGlvbiBpZA0KICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lICAgICAgICAgIHRoZSBuYW1lIGZvciB0aGUgZHJvcGRvd24uDQogICAqIEBwYXJhbSBzdHJpbmcgJHNlbGVjdGVkdmFsdWUgVGhlIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBpbnB1dCBmaWVsZC4NCiAgICoNCiAgICogQHJldHVybiBzdHJpbmcNCiAgICogQGRlcHJlY2F0ZWQNCiAgICovDQogIGZ1bmN0aW9uIENyZWF0ZUNvbG9yRHJvcGRvd24oJGlkLCAkbmFtZSwgJHNlbGVjdGVkdmFsdWUgPSAnJykNCiAgew0KICAgIC8vdHJpZ2dlcl9lcnJvcignRGVwcmVjYXRlZCB1c2FnZSBvZiAnIC4gX19NRVRIT0RfXyk7DQogICAgDQogICAgJHRoaXMtPl9sb2FkX2Zvcm0oKTsNCiAgICAkZXh0ZW5zaW9ucyA9ICR0aGlzLT5nZXRfeHQoKTsNCiAgICANCiAgICByZXR1cm4gXHh0X0NyZWF0ZUNvbG9yRHJvcGRvd24oJGV4dGVuc2lvbnMsICRpZCwgJG5hbWUsICRzZWxlY3RlZHZhbHVlKTsNCiAgfQ0KICANCiAgDQogIC8qKg0KICAgKiBDcmVhdGUgYSBkcm9wZG93biBvZiBhbGwgdGVtcGxhdGVzIGJlZ2lubmluZyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4DQogICAqDQogICAqIEBwYXJhbSBzdHJpbmcgJGlkICAgICAgICAgICAgVGhlIG1vZHVsZSBhY3Rpb24gaWQNCiAgICogQHBhcmFtIHN0cmluZyAkbmFtZSAgICAgICAgICBUaGUgbmFtZSBmb3IgdGhlIGlucHV0IGVsZW1lbnQuDQogICAqIEBwYXJhbSBzdHJpbmcgJHByZWZpeCAgICAgICAgVGhlIG9wdGlvbmFsIHByZWZpeA0KICAgKiBAcGFyYW0gc3RyaW5nICRzZWxlY3RlZHZhbHVlIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgaW5wdXQgZWxlbWVudA0KICAgKiBAcGFyYW0gc3RyaW5nICRhZGR0ZXh0DQogICAqDQogICAqIEByZXR1cm4gc3RyaW5nDQogICAqIEBkZXByZWNhdGVkDQogICAqLw0KICBmdW5jdGlvbiBDcmVhdGVUZW1wbGF0ZURyb3Bkb3duKCRpZCwgJG5hbWUsICRwcmVmaXggPSAnJywgJHNlbGVjdGVkdmFsdWUgPSAtMSwgJGFkZHRleHQgPSAnJykNCiAgew0KICAgIEBcdHJpZ2dlcl9lcnJvcignRGVwcmVjYXRlZCB1c2FnZSBvZiAnIC4gX19NRVRIT0RfXyk7DQogICAgDQogICAgcmV0dXJuIFx4dF90ZW1wbGF0ZV91dGlsczo6Y3JlYXRlX3RlbXBsYXRlX2Ryb3Bkb3duKCRpZCwgJG5hbWUsICRwcmVmaXgsICRzZWxlY3RlZHZhbHVlLCAkYWRkdGV4dCk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBHZXREZWZhdWx0VGVtcGxhdGVGb3JtLg0KICAgKiBBIGZ1bmN0aW9uIHRvIHJldHVybiBhIGZvcm0gc3VpdGFibGUgZm9yIGVkaXRpbmcgYSBzaW5nbGUgdGVtcGxhdGUuDQogICAqDQogICAqIEBwYXJhbSBDTVNNU0V4dCAkbW9kdWxlIEEgQ01TTVNFeHQgZGVyaXZlZCBtb2R1bGUgcmVmZXJlbmNlDQogICAqIEBwYXJhbSBzdHJpbmcgICAgICAkaWQNCiAgICogQHBhcmFtIHN0cmluZyAgICAgICRyZXR1cm5pZA0KICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJHByZWZuYW1lDQogICAqIEBwYXJhbSBzdHJpbmcgICAgICAkYWN0aW9uDQogICAqIEBwYXJhbSBzdHJpbmcgICAgICAkYWN0aXZlX3RhYg0KICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJHRpdGxlDQogICAqIEBwYXJhbSBzdHJpbmcgICAgICAkZmlsZW5hbWUNCiAgICogQHBhcmFtIHN0cmluZyAgICAgICRpbmZvDQogICAqDQogICAqIEByZXR1cm4gc3RyaW5nDQogICAqIEBkZXByZWNhdGVkICh0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgaXJyZWxldmFudCBpbiBDTVNNUyAyLjApDQogICAqIEBzZWUgeHRfdGVtcGxhdGVfYWRtaW46OmdldF9zdGFydF90ZW1wbGF0ZV9mb3JtDQogICAqLw0KICBmdW5jdGlvbiBHZXREZWZhdWx0VGVtcGxhdGVGb3JtKA0KICAgICYkbW9kdWxlLCAkaWQsICRyZXR1cm5pZCwgJHByZWZuYW1lLCAkYWN0aW9uLCAkYWN0aXZlX3RhYiwgJHRpdGxlLCAkZmlsZW5hbWUsICRpbmZvID0gJycNCiAgKQ0KICB7DQogICAgcmV0dXJuIFx4dF90ZW1wbGF0ZV9hZG1pbjo6Z2V0X3N0YXJ0X3RlbXBsYXRlX2Zvcm0oDQogICAgICAkbW9kdWxlLCAkaWQsICRyZXR1cm5pZCwgJHByZWZuYW1lLCAkYWN0aW9uLCAkYWN0aXZlX3RhYiwgJHRpdGxlLA0KICAgICAgJGZpbGVuYW1lLCAkaW5mbw0KICAgICk7DQogIH0NCiAgDQogIA0KICAvKioNCiAgICogRWRpdERlZmF1bHRUZW1wbGF0ZUZvcm0NCiAgICoNCiAgICogQSBmdW5jdGlvbiB0byByZXR1cm4gYSBmb3JtIHN1aXRhYmxlIGZvciBlZGl0aW5nIGEgc2luZ2xlIHRlbXBsYXRlLg0KICAgKg0KICAgKiBAcGFyYW0gQ01TTVNFeHQgJG1vZHVsZSBBIENNU01TRXh0IGRlcml2ZWQgbW9kdWxlIHJlZmVyZW5jZQ0KICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJGlkDQogICAqIEBwYXJhbSBzdHJpbmcgICAgICAkcmV0dXJuaWQNCiAgICogQHBhcmFtIHN0cmluZyAgICAgICRwcmVmbmFtZQ0KICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJGFjdGl2ZV90YWINCiAgICogQHBhcmFtIHN0cmluZyAgICAgICR0aXRsZQ0KICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJGZpbGVuYW1lDQogICAqIEBwYXJhbSBzdHJpbmcgICAgICAkaW5mbw0KICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJGFjdGlvbg0KICAgKg0KICAgKiBAcmV0dXJuIHN0cmluZw0KICAgKiBAZGVwcmVjYXRlZCAodGhpcyBmdW5jdGlvbmFsaXR5IGlzIGlycmVsZXZhbnQgaW4gQ01TTVMgMi4wKQ0KICAgKiBAc2VlIHh0X3RlbXBsYXRlX2FkbWluOjpnZXRfc3RhcnRfdGVtcGxhdGVfZm9ybQ0KICAgKi8NCiAgZnVuY3Rpb24gRWRpdERlZmF1bHRUZW1wbGF0ZUZvcm0oDQogICAgJiRtb2R1bGUsICRpZCwgJHJldHVybmlkLCAkcHJlZm5hbWUsICRhY3RpdmVfdGFiLCAkdGl0bGUsICRmaWxlbmFtZSwgJGluZm8gPSAnJywgJGFjdGlvbiA9ICdkZWZhdWx0YWRtaW4nDQogICkNCiAgew0KICAgIGVjaG8gXHh0X3RlbXBsYXRlX2FkbWluOjpnZXRfc3RhcnRfdGVtcGxhdGVfZm9ybSgNCiAgICAgICRtb2R1bGUsICRpZCwgJHJldHVybmlkLCAkcHJlZm5hbWUsICRhY3Rpb24sICRhY3RpdmVfdGFiLCAkdGl0bGUsICRmaWxlbmFtZSwgJGluZm8NCiAgICApOw0KICB9DQogIA0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/ModuleFunctions</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/ModuleFunctions/class.InstallAssistant.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcTW9kdWxlRnVuY3Rpb25zOw0KDQp1c2UgQ21zRXhjZXB0aW9uOw0KdXNlIEV4Y2VwdGlvbjsNCg0KY2xhc3MgSW5zdGFsbEFzc2lzdGFudA0Kew0KICBwcm90ZWN0ZWQgc3RyaW5nICRfbW9kdWxlX25hbWUgPSAnJzsNCiAgDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfbW9kKCkNCiAgew0KICAgIHJldHVybiBcTW9kdWxlT3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCktPmdldF9tb2R1bGVfaW5zdGFuY2UoJHRoaXMtPl9tb2R1bGVfbmFtZSk7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChcQ01TTW9kdWxlICRtb2R1bGUpDQogIHsNCiAgICAkdGhpcy0+X21vZHVsZV9uYW1lID0gJG1vZHVsZS0+R2V0TmFtZSgpOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gSW5zdGFsbCgpDQogIHsNCiAgICAkdGhpcy0+X21vZCgpLT5DcmVhdGVQZXJtaXNzaW9uKCdhZG1pbl8nIC4gJHRoaXMtPl9tb2R1bGVfbmFtZSwgJ0FkbWluaXN0ZXInIC4gJHRoaXMtPl9tb2R1bGVfbmFtZSk7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBVcGdyYWRlKCkNCiAgew0KICAgIC8vJHRoaXMtPl9tb2QoKQ0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gVW5pc3RhbGwoKQ0KICB7DQogICAgJHRoaXMtPl9tb2QoKS0+UmVtb3ZlUGVybWlzc2lvbignYWRtaW5fJyAuICR0aGlzLT5fbW9kdWxlX25hbWUpOw0KICB9DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/ModuleFunctions/class.preference.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogLy8gRXhhbXBsZXMgZm9yIGVhY2ggdHlwZSBvZiB2YWx1ZToNCiAqDQogKiAkaW50UHJpbnRhYmxlID0gbmV3IHByZWZlcmVuY2UoNDIpOw0KICogZWNobyAkaW50UHJpbnRhYmxlOyAvLyBPdXRwdXRzOiA0Mg0KICoNCiAqICRzdHJpbmdQcmludGFibGUgPSBuZXcgcHJlZmVyZW5jZSgnSGVsbG8sIFdvcmxkIScpOw0KICogZWNobyAkc3RyaW5nUHJpbnRhYmxlOyAvLyBPdXRwdXRzOiAnSGVsbG8sIFdvcmxkIScNCiAqDQogKiAkZmxvYXRQcmludGFibGUgPSBuZXcgcHJlZmVyZW5jZSgzLjE0KTsNCiAqIGVjaG8gJGZsb2F0UHJpbnRhYmxlOyAvLyBPdXRwdXRzOiAzLjE0DQogKg0KICogJGJvb2xQcmludGFibGUgPSBuZXcgcHJlZmVyZW5jZSh0cnVlKTsNCiAqIGVjaG8gJGJvb2xQcmludGFibGU7IC8vIE91dHB1dHM6IHRydWUNCiAqDQogKiAkYXJyYXlQcmludGFibGUgPSBuZXcgcHJlZmVyZW5jZShbMSwgMiwgM10pOw0KICogZWNobyAkYXJyYXlQcmludGFibGU7IC8vIE91dHB1dHM6IFsxLCAyLCAzXQ0KICoNCiAqICRvYmplY3RQcmludGFibGUgPSBuZXcgcHJlZmVyZW5jZShuZXcgc3RkQ2xhc3MoKSk7DQogKiBlY2hvICRvYmplY3RQcmludGFibGU7IC8vIE91dHB1dHM6IHt9DQogKg0KICogJG51bGxQcmludGFibGUgPSBuZXcgcHJlZmVyZW5jZShudWxsKTsNCiAqIGVjaG8gJG51bGxQcmludGFibGU7IC8vIE91dHB1dHM6IE5VTEwNCiAqDQogKiAvLyBFeGFtcGxlIHVzYWdlIGFzIGFuIGFycmF5Og0KICogJGFycmF5ID0gJGFycmF5UHJpbnRhYmxlLT5nZXRBcnJheUNvcHkoKTsNCiAqIHByaW50X3IoJGFycmF5KTsNCiAqLw0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcTW9kdWxlRnVuY3Rpb25zOw0KDQoNCnVzZSBBcnJheU9iamVjdDsNCnVzZSBDTVNNU0V4dFxjb3JlXG1vcnBoYWJsZTsNCg0KY2xhc3MgcHJlZmVyZW5jZSBleHRlbmRzIG1vcnBoYWJsZQ0Kew0KICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlKQ0KICB7DQogICAgaWYoXGlzX3NjYWxhcigkdmFsdWUpIHx8IE5VTEwgPT09ICR2YWx1ZSkNCiAgICB7DQogICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KFskdmFsdWVdLCBBcnJheU9iamVjdDo6QVJSQVlfQVNfUFJPUFMgfCBBcnJheU9iamVjdDo6U1REX1BST1BfTElTVCk7DQogICAgfQ0KICAgIGVsc2UgaWYoXGlzX2FycmF5KCR2YWx1ZSkgfHwgKFxpc19vYmplY3QoJHZhbHVlKSAmJiAkdmFsdWUgaW5zdGFuY2VvZiBcc3RkQ2xhc3MpKQ0KICAgIHsNCiAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJHZhbHVlLCBBcnJheU9iamVjdDo6QVJSQVlfQVNfUFJPUFMgfCBBcnJheU9iamVjdDo6U1REX1BST1BfTElTVCk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KFsnVW5zdXBwb3J0ZWQgdHlwZSddLCBBcnJheU9iamVjdDo6QVJSQVlfQVNfUFJPUFMgfCBBcnJheU9iamVjdDo6U1REX1BST1BfTElTVCk7DQogICAgfQ0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpDQogIHsNCiAgICBpZiggMSA9PT0gJHRoaXMtPmNvdW50KCkgKQ0KICAgIHsNCiAgICAgIHJldHVybiAoc3RyaW5nKVx2YXJfZXhwb3J0KCR0aGlzWzBdLCBUUlVFKTsNCiAgICB9DQogICAgDQogICAgaWYoJHRoaXMtPmNvdW50KCkgPiAxKQ0KICAgIHsNCiAgICAgIHJldHVybiAoc3RyaW5nKVxqc29uX2VuY29kZSgkdGhpcy0+Z2V0QXJyYXlDb3B5KCksIFxKU09OX1BSRVRUWV9QUklOVCk7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAnVW5zdXBwb3J0ZWQgdHlwZSc7DQogIH0NCn0NCj8+DQoNCg==]]></data>
	</file>
	<file>
	  <filename>/lib/ModuleFunctions/class.preferences.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KbmFtZXNwYWNlIENNU01TRXh0XE1vZHVsZUZ1bmN0aW9uczsNCg0KdXNlIENNU01TRXh0XGNvcmVcbW9ycGhhYmxlOw0KDQpjbGFzcyBwcmVmZXJlbmNlcyBleHRlbmRzIG1vcnBoYWJsZQ0Kew0KICANCiAgcHJvdGVjdGVkICRfbW9kdWxlOw0KICAvL3Byb3RlY3RlZCAkX2RlZmF1bHRzID0gW107DQogIGZ1bmN0aW9uIF9fY29uc3RydWN0KFxDTVNNU0V4dFxYVE1vZHVsZSAgJG1vZHVsZSA9IG51bGwsICRwcmVmZXJlbmNlcyA9IFtdLCAkZGVmYXVsdHMgPSBbXSkNCiAgew0KICAgIGlmKCEkbW9kdWxlKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignbm8gbW9kdWxlIHNldCcpOw0KICAgIH0NCiAgICANCiAgICAkdGhpcy0+X21vZHVsZSA9ICRtb2R1bGU7DQogICAgDQogICAgaWYoICR0aGlzLT5faXNBc3NvYygkZGVmYXVsdHMpICYmICR0aGlzLT5faXNBc3NvYygkcHJlZmVyZW5jZXMpICkNCiAgICB7DQogICAgICAkcHJlZmVyZW5jZXMgPSBcYXJyYXlfbWVyZ2UoJGRlZmF1bHRzLCAkcHJlZmVyZW5jZXMpOw0KICAgIH0NCg0KICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJHByZWZlcmVuY2VzKTsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIGFkZCgka2V5LCAkcHJlZmVyZW5jZSkgOiBwcmVmZXJlbmNlcw0KICB7DQogICAgJHRoaXMtPm9mZnNldFNldCgka2V5LCAkcHJlZmVyZW5jZSk7DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlKCRrZXkpIDogcHJlZmVyZW5jZXMNCiAgew0KICAgICR0aGlzLT5vZmZzZXRVbnNldCgka2V5KTsNCiAgICAkdGhpcy0+X21vZHVsZS0+UmVtb3ZlUHJlZmVyZW5jZSgka2V5KTsNCiAgICANCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIC8qKg0KICAgKiBSZXRyaWV2ZXMgdGhlIHByZWZlcmVuY2UgdmFsdWUgb3IgZnJvbSB0aGUgbW9kdWxlIGNvbmZpZyBpZiBlaXRoZXIgZXhpc3QuDQogICAqIE90aGVyd2lzZSwgcmV0dXJucyB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBwcm92aWRlZC4NCiAgICoNCiAgICogQHBhcmFtIG1peGVkICRrZXkgVGhlIGtleSB0byByZXRyaWV2ZSB0aGUgdmFsdWUgZm9yLg0KICAgKiBAcGFyYW0gbWl4ZWQgJGRlZmF1bHQgVGhlIGRlZmF1bHQgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBrZXkgaXMgbm90IGZvdW5kLg0KICAgKg0KICAgKiBAcmV0dXJuIG1peGVkIFRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSwgb3IgdGhlIGRlZmF1bHQgdmFsdWUgaWYgdGhlIGtleSBpcyBub3QgZm91bmQuDQogICAqLw0KICAjW1xSZXR1cm5UeXBlV2lsbENoYW5nZV0NCiAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEdldCgka2V5LCAkZGVmYXVsdCA9IG51bGwpDQogIHsNCiAgICAkbW9kdWxlQ29uZmlnICAgICA9ICR0aGlzLT5fbW9kdWxlLT5HZXRFeHRlbmRlZENvbmZpZygpOw0KICAgICRtb2R1bGVQcmVmZXJlbmNlID0gJHRoaXMtPl9tb2R1bGUtPkdldFByZWZlcmVuY2UoJGtleSk7DQogICAgJGxvY2FsVmFsdWUgICAgICAgPSBwYXJlbnQ6Om9mZnNldEV4aXN0cygka2V5KSA/IHBhcmVudDo6b2Zmc2V0R2V0KCRrZXkpIDogbnVsbDsNCiAgICANCiAgICBpZihOVUxMICE9PSAkbW9kdWxlUHJlZmVyZW5jZSAmJiAnJyAhPT0gJG1vZHVsZVByZWZlcmVuY2UpDQogICAgew0KICAgICAgJHJlc3VsdCA9ICRtb2R1bGVQcmVmZXJlbmNlOw0KICAgIH0NCiAgICBlbHNlIGlmKE5VTEwgIT09ICRsb2NhbFZhbHVlICYmICcnICE9PSAkbG9jYWxWYWx1ZSkNCiAgICB7DQogICAgICAkcmVzdWx0ID0gJGxvY2FsVmFsdWU7DQogICAgfQ0KICAgIGVsc2UgaWYoaXNzZXQoJG1vZHVsZUNvbmZpZ1ska2V5XSkgJiYgJycgIT09ICRtb2R1bGVDb25maWdbJGtleV0pDQogICAgew0KICAgICAgJHJlc3VsdCA9ICRtb2R1bGVDb25maWdbJGtleV07DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkcmVzdWx0ID0gJGRlZmF1bHQ7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkcmVzdWx0Ow0KICB9DQogIA0KICAjW1xSZXR1cm5UeXBlV2lsbENoYW5nZV0NCiAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgka2V5LCAkdmFsdWUpIDogcHJlZmVyZW5jZXMNCiAgew0KICAgICR0aGlzLT5fbW9kdWxlLT5TZXRQcmVmZXJlbmNlKCRrZXksICR2YWx1ZSk7DQogICAgDQogICAgcGFyZW50OjpvZmZzZXRTZXQoJGtleSwgbmV3IHByZWZlcmVuY2UoJHZhbHVlKSk7DQoNCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCn0NCg0KDQoNCj8+DQo=]]></data>
	</file>
	<file>
	  <filename>/lib/ModuleFunctions/manifest_reader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcTW9kdWxlRnVuY3Rpb25zOw0KDQoNCmNsYXNzIG1hbmlmZXN0X3JlYWRlcg0Kew0KICBwcml2YXRlICRfZmlsZW5hbWU7DQogIHByaXZhdGUgJF9jb21wcmVzc2VkOw0KICBwcml2YXRlICRfZ2VuZXJhdGVkOw0KICBwcml2YXRlICRfZnJvbV92ZXJzaW9uOw0KICBwcml2YXRlICRfZnJvbV9uYW1lOw0KICBwcml2YXRlICRfdG9fdmVyc2lvbjsNCiAgcHJpdmF0ZSAkX3RvX25hbWU7DQogIHByaXZhdGUgJF9oYXNfcmVhZCA9IEZBTFNFOw0KICBwcml2YXRlICRfYWRkZWQgICAgPSBbXTsNCiAgcHJpdmF0ZSAkX2NoYW5nZWQgID0gW107DQogIHByaXZhdGUgJF9kZWxldGVkICA9IFtdOw0KICANCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRkaXIgPSBOVUxMKQ0KICB7DQogICAgaWYoTlVMTCA9PT0gJGRpcikNCiAgICB7DQogICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ05vIGRpcmVjdG9yeSBnaXZlbicpOw0KICAgIH0NCiAgICANCiAgICBpZighXGlzX2RpcigkZGlyKSkNCiAgICB7DQogICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0RpcmVjdG9yeSAiJyAuICRkaXIgLiAnIiBub3QgZm91bmQnKTsNCiAgICB9DQogICAgDQogICAgIyB3ZSBjYW4gZGV0ZXJtaW5lIGlmIHRoZSBtYW5pZmVzdCBpcyBjb21wcmVzc2VkIG9yIG5vdCBieSBsb29raW5nIGZvciBhIE1BTklGRVNULkRBVC5neiBmaWxlDQogICAgJGZuID0gIiRkaXIvTUFOSUZFU1QuREFULmd6IjsNCiAgICANCiAgICBpZihcZmlsZV9leGlzdHMoJGZuKSkNCiAgICB7DQogICAgICAkdGhpcy0+X2ZpbGVuYW1lICAgPSAkZm47DQogICAgICAkdGhpcy0+X2NvbXByZXNzZWQgPSBUUlVFOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgJGZuID0gIiRkaXIvTUFOSUZFU1QuREFUIjsNCiAgICAgIGlmKFxmaWxlX2V4aXN0cygkZm4pKQ0KICAgICAgew0KICAgICAgICAkdGhpcy0+X2ZpbGVuYW1lICAgPSAkZm47DQogICAgICAgICR0aGlzLT5fY29tcHJlc3NlZCA9IEZBTFNFOw0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0ZpbGUgIicgLiAkZm4gLiAnIiBub3QgZm91bmQnKTsNCiAgICAgIH0NCiAgICB9DQogIH0NCiAgDQogIHByb3RlY3RlZCBmdW5jdGlvbiBoYW5kbGVfaGVhZGVyKCRsaW5lKSA6IHZvaWQNCiAgew0KICAgICRjb2xzID0gXGV4cGxvZGUoJzonLCAkbGluZSk7DQogICAgZm9yZWFjaCgkY29scyBhcyAmJGNvbCkgeyAkY29sID0gXHRyaW0oJGNvbCk7IH0NCiAgICANCiAgICBpZigyICE9IFxjb3VudCgkY29scykpDQogICAgew0KICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCAnSW52YWxpZCBoZWFkZXIgJyk7DQogICAgfQ0KICAgIA0KICAgIHN3aXRjaCgkY29sc1swXSkNCiAgICB7DQogICAgICBjYXNlICdNQU5JRkVTVF9HRU5FUkFURUQnOg0KICAgICAgICAkdGhpcy0+X2dlbmVyYXRlZCA9IChpbnQpJGNvbHNbMV07DQogICAgICBicmVhazsNCiAgICAgIGNhc2UgJ01BTklGRVNUIEZST00gVkVSU0lPTic6DQogICAgICAgICR0aGlzLT5fZnJvbV92ZXJzaW9uID0gJGNvbHNbMV07DQogICAgICBicmVhazsNCiAgICAgIGNhc2UgJ01BTklGRVNUIFRPIFZFUlNJT04nOg0KICAgICAgICAkdGhpcy0+X3RvX3ZlcnNpb24gPSAkY29sc1sxXTsNCiAgICAgIGJyZWFrOw0KICAgIH0NCiAgfQ0KICANCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIGhhbmRsZV9hZGRlZCgkZmllbGRzKQ0KICB7DQogICAgJHRoaXMtPl9hZGRlZFtdID0gWydmaWxlbmFtZScgPT4gJGZpZWxkc1syXSwgJ2NoZWNrc3VtJyA9PiAkZmllbGRzWzFdXTsNCiAgfQ0KICANCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIGhhbmRsZV9jaGFuZ2VkKCRmaWVsZHMpDQogIHsNCiAgICAkdGhpcy0+X2NoYW5nZWRbXSA9IFsnZmlsZW5hbWUnID0+ICRmaWVsZHNbMl0sICdjaGVja3N1bScgPT4gJGZpZWxkc1sxXV07DQogIH0NCiAgDQogIHByb3RlY3RlZCBmdW5jdGlvbiBoYW5kbGVfZGVsZXRlZCgkZmllbGRzKQ0KICB7DQogICAgJHRoaXMtPl9kZWxldGVkW10gPSBbJ2ZpbGVuYW1lJyA9PiAkZmllbGRzWzJdLCAnY2hlY2tzdW0nID0+ICRmaWVsZHNbMV1dOw0KICB9DQogIA0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gaGFuZGxlX2xpbmUoJGxpbmUpICM6IHZvaWQNCiAgew0KICAgIGlmKCEkbGluZSkgeyByZXR1cm47IH0NCiAgICANCiAgICBpZihcc3RhcnRzd2l0aCgkbGluZSwgJ01BTklGRVNUJykpDQogICAgew0KICAgICAgJHRoaXMtPmhhbmRsZV9oZWFkZXIoJGxpbmUpOw0KICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICANCiAgICAkZmllbGRzID0gXGV4cGxvZGUoJyA6OiAnLCAkbGluZSk7DQogICAgDQogICAgaWYoMyAhPSBcY291bnQoJGZpZWxkcykpDQogICAgew0KICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCAnSW52YWxpZCBsaW5lICcgLiAkbGluZSk7DQogICAgfQ0KICAgIA0KICAgIHN3aXRjaCgkZmllbGRzWzBdKQ0KICAgIHsNCiAgICAgIGNhc2UgJ0FEREVEJzoNCiAgICAgICAgJHRoaXMtPmhhbmRsZV9hZGRlZCgkZmllbGRzKTsNCiAgICAgICAgcmV0dXJuOw0KICAgICAgYnJlYWs7DQogICAgICBjYXNlICdDSEFOR0VEJzoNCiAgICAgICAgcmV0dXJuICR0aGlzLT5oYW5kbGVfY2hhbmdlZCgkZmllbGRzKTsNCiAgICAgIGJyZWFrOw0KICAgICAgY2FzZSAnREVMRVRFRCc6DQogICAgICAgIHJldHVybiAkdGhpcy0+aGFuZGxlX2RlbGV0ZWQoJGZpZWxkcyk7DQogICAgICBicmVhazsNCiAgICAgIGRlZmF1bHQ6DQogICAgICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKFxfX2FwcGJhc2VcbGFuZygnZXJyb3JfaW50ZXJuYWwnLCAnbXIxMDQnKSk7DQogICAgfQ0KICB9DQogIA0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gcmVhZCgpDQogIHsNCiAgICBpZighJHRoaXMtPl9oYXNfcmVhZCkNCiAgICB7DQogICAgICAkZm9wZW4gPSAkZmNsb3NlID0gJGZnZXRzID0gJGZlb2YgPSBOVUxMOw0KICAgICAgaWYoJHRoaXMtPl9jb21wcmVzc2VkKQ0KICAgICAgew0KICAgICAgICAkZm9wZW4gID0gJ2d6b3Blbic7DQogICAgICAgICRmY2xvc2UgPSAnZ3pjbG9zZSc7DQogICAgICAgICRmZ2V0cyAgPSAnZ3pnZXRzJzsNCiAgICAgICAgJGZlb2YgICA9ICdnemVvZic7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgICRmb3BlbiAgPSAnZm9wZW4nOw0KICAgICAgICAkZmNsb3NlID0gJ2ZjbG9zZSc7DQogICAgICAgICRmZ2V0cyAgPSAnZmdldHMnOw0KICAgICAgICAkZmVvZiAgID0gJ2Zlb2YnOw0KICAgICAgfQ0KICAgICAgDQogICAgICAvLyBjb3B5IHRoZSBtYW5pZmVzdCBmaWxlIHRvIGEgdGVtcG9yYXJ5IGxvY2F0aW9uDQogICAgICAkdG1wZGlyICA9IFxfX2FwcGJhc2VcZ2V0X2FwcCgpLT5nZXRfdG1wZGlyKCk7DQogICAgICAkdG1wbmFtZSA9IHRlbXBuYW0oJHRtcGRpciwgJ21hbicpOw0KICAgICAgQGNvcHkoJHRoaXMtPl9maWxlbmFtZSwgJHRtcG5hbWUpOw0KICAgICAgJGZoID0gJGZvcGVuKCR0bXBuYW1lLCAncicpOw0KICAgICAgaWYoISRmaCkNCiAgICAgIHsNCiAgICAgICAgZWNobyAiREVCVUc6ICRmb3BlbiBvbiAiIC4gJHRoaXMtPl9maWxlbmFtZSAuICI8YnIvPiI7DQogICAgICAgIGRpZSgpOw0KICAgICAgICB0aHJvdyBuZXcgXEV4Y2VwdGlvbihcX19hcHBiYXNlXGxhbmcoJ2Vycm9yX2ludGVybmFsJywgJ21yMTAyJykpOw0KICAgICAgfQ0KICAgICAgd2hpbGUoISRmZW9mKCRmaCkpDQogICAgICB7DQogICAgICAgICRsaW5lID0gJGZnZXRzKCRmaCk7DQogICAgICAgICRsaW5lID0gdHJpbSgkbGluZSk7DQogICAgICAgICR0aGlzLT5oYW5kbGVfbGluZSgkbGluZSk7DQogICAgICB9DQogICAgICAkZmNsb3NlKCRmaCk7DQogICAgICAkdGhpcy0+X2hhc19yZWFkID0gVFJVRTsNCiAgICB9DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBnZXRfZ2VuZXJhdGVkKCkNCiAgew0KICAgICR0aGlzLT5yZWFkKCk7DQogICAgDQogICAgcmV0dXJuICR0aGlzLT5fZ2VuZXJhdGVkOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gdG9fdmVyc2lvbigpDQogIHsNCiAgICAkdGhpcy0+cmVhZCgpOw0KICAgIA0KICAgIHJldHVybiAkdGhpcy0+X3RvX3ZlcnNpb247DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiB0b19uYW1lKCkNCiAgew0KICAgICR0aGlzLT5yZWFkKCk7DQogICAgDQogICAgcmV0dXJuICR0aGlzLT5fdG9fbmFtZTsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIGZyb21fdmVyc2lvbigpDQogIHsNCiAgICAkdGhpcy0+cmVhZCgpOw0KICAgIA0KICAgIHJldHVybiAkdGhpcy0+X2Zyb21fdmVyc2lvbjsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIGZyb21fbmFtZSgpDQogIHsNCiAgICAkdGhpcy0+cmVhZCgpOw0KICAgIA0KICAgIHJldHVybiAkdGhpcy0+X2Zyb21fbmFtZTsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIGdldF9hZGRlZCgpDQogIHsNCiAgICAkdGhpcy0+cmVhZCgpOw0KICAgIA0KICAgIHJldHVybiAkdGhpcy0+X2FkZGVkOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2NoYW5nZWQoKQ0KICB7DQogICAgJHRoaXMtPnJlYWQoKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXMtPl9jaGFuZ2VkOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2RlbGV0ZWQoKQ0KICB7DQogICAgJHRoaXMtPnJlYWQoKTsNCiAgICANCiAgICByZXR1cm4gJHRoaXMtPl9kZWxldGVkOw0KICB9DQogIA0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/Progress2_Lite.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDcsIExhdXJlbnQgTGF2aWxsZSA8cGVhckBsYXVyZW50LWxhdmlsbGUub3JnPg0KICoNCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQogKg0KICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCiAqIGFyZSBtZXQ6DQogKg0KICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCiAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQogKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQogKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9ycyBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMNCiAqICAgICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQ0KICogICAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQogKg0KICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQogKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQogKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0KICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTDQogKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SDQogKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRg0KICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTDQogKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTg0KICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkNCiAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQogKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCiAqDQogKiBAY2F0ZWdvcnkgICBIVE1MDQogKiBAcGFja2FnZSAgICBIVE1MX1Byb2dyZXNzMg0KICogQGF1dGhvciAgICAgTGF1cmVudCBMYXZpbGxlIDxwZWFyQGxhdXJlbnQtbGF2aWxsZS5vcmc+DQogKiBAY29weXJpZ2h0ICAyMDA1LTIwMDcgTGF1cmVudCBMYXZpbGxlDQogKiBAbGljZW5zZSAgICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCAgTmV3IEJTRCBMaWNlbnNlDQogKiBAdmVyc2lvbiAgICBDVlM6ICRJZDogUHJvZ3Jlc3MyX0xpdGUucGhwLHYgMS45IDIwMDcvMDQvMDggMTQ6NTU6NTYgZmFyZWxsIEV4cCAkDQogKiBAbGluayAgICAgICBodHRwOi8vcGVhci5waHAubmV0L3BhY2thZ2UvSFRNTF9Qcm9ncmVzczINCiAqIEBzaW5jZSAgICAgIEZpbGUgYXZhaWxhYmxlIHNpbmNlIFJlbGVhc2UgMi4wLjBSQzENCiAqLw0KDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnb2JfZ2V0X2NsZWFuJykpIHsNCiAgICBmdW5jdGlvbiBvYl9nZXRfY2xlYW4oKQ0KICAgIHsNCiAgICAgICAgJGNvbnRlbnRzID0gb2JfZ2V0X2NvbnRlbnRzKCk7DQoNCiAgICAgICAgaWYgKCRjb250ZW50cyAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgIG9iX2VuZF9jbGVhbigpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuICRjb250ZW50czsNCiAgICB9DQp9DQoNCmlmICghZGVmaW5lZCgnUEhQX0VPTCcpKSB7DQogICAgc3dpdGNoIChzdHJ0b3VwcGVyKHN1YnN0cihQSFBfT1MsIDAsIDMpKSkgew0KICAgICAgICAvLyBXaW5kb3dzDQogICAgICAgIGNhc2UgJ1dJTic6DQogICAgICAgICAgICBkZWZpbmUoJ1BIUF9FT0wnLCAiXHJcbiIpOw0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgLy8gTWFjDQogICAgICAgIGNhc2UgJ0RBUic6DQogICAgICAgICAgICBkZWZpbmUoJ1BIUF9FT0wnLCAiXHIiKTsNCiAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgIC8vIFVuaXgNCiAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgIGRlZmluZSgnUEhQX0VPTCcsICJcbiIpOw0KICAgIH0NCn0NCg0KLyoqDQogKiBTdGFuZGFsb25lIEhUTUwgbG9hZGluZyBiYXIgd2l0aCBvbmx5IFBIUCBhbmQgSlMgaW50ZXJmYWNlLg0KICoNCiAqIFRoZSBIVE1MX1Byb2dyZXNzMl9MaXRlIGNsYXNzIGFsbG93IHlvdSB0byBhZGQgYSBxdWljaw0KICogaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBsb2FkaW5nIGJhciB0byBhbnkgb2YgeW91ciB4aHRtbCBkb2N1bWVudC4NCiAqIFlvdSBzaG91bGQgaGF2ZSBhIGJyb3dzZXIgdGhhdCBhY2NlcHQgREhUTUwgZmVhdHVyZS4NCiAqDQogKiBUaGlzIGNsYXNzIGhhcyBubyBkZXBlbmRlbmN5IGFuZCBjYW4gYmUgdXNlZCBjb21wbGV0ZWx5IG91dHNpZGUNCiAqIHRoZSBQRUFSIGluZnJhc3RydWN0dXJlLg0KICoNCiAqIEhlcmUgaXMgYSBiYXNpYyBleGFtcGxlOg0KICogPGNvZGU+DQogKiA8aHRtbD4NCiAqIDxib2R5Pg0KICogPD9waHANCiAqIHJlcXVpcmVfb25jZSAnSFRNTC9Qcm9ncmVzczJfTGl0ZS5waHAnOw0KICoNCiAqIGZ1bmN0aW9uIG15UHJvY2VzcygpDQogKiB7DQogKiAgICAgZm9yICgkaT0wOyAkaTwxMDAwMDA7ICRpKyspIHsgfQ0KICogfQ0KICoNCiAqICRwYmwgPSBuZXcgSFRNTF9Qcm9ncmVzczJfTGl0ZSgpOw0KICogJHBibC0+YWRkTGFiZWwoJ3RleHQnLCd0eHQxJywnUHJvZ3Jlc3MyIExpdGUgLSBCYXNpYyBFeGFtcGxlJyk7DQogKiAkcGJsLT5kaXNwbGF5KCk7DQogKg0KICogZm9yKCRpPTE7ICRpPD0xMDA7ICRpKyspIHsNCiAqICAgICAkcGJsLT5tb3ZlU3RlcCgkaSk7DQogKiAgICAgbXlQcm9jZXNzKCk7DQogKiB9DQogKiA/Pg0KICogPC9ib2R5Pg0KICogPC9odG1sPg0KICogPC9jb2RlPg0KICoNCiAqIEBjYXRlZ29yeSAgIEhUTUwNCiAqIEBwYWNrYWdlICAgIEhUTUxfUHJvZ3Jlc3MyDQogKiBAYXV0aG9yICAgICBMYXVyZW50IExhdmlsbGUgPHBlYXJAbGF1cmVudC1sYXZpbGxlLm9yZz4NCiAqIEBhdXRob3IgICAgIE1pa2EgVHVyaW4gPHR1cmluQGluYm94Lmx2Pg0KICogQGF1dGhvciAgICAgR2VyZCBXZWl0ZW5iZXJnIDxoYWhuZWJ1ZWNoZW5Ad2ViLmRlPg0KICogQGNvcHlyaWdodCAgMjAwNS0yMDA3IExhdXJlbnQgTGF2aWxsZQ0KICogQGxpY2Vuc2UgICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAgIE5ldyBCU0QgTGljZW5zZQ0KICogQHZlcnNpb24gICAgUmVsZWFzZTogMi4zLjANCiAqIEBsaW5rICAgICAgIGh0dHA6Ly9wZWFyLnBocC5uZXQvcGFja2FnZS9IVE1MX1Byb2dyZXNzMg0KICogQGxpbmsgICAgICAgaHR0cDovL3d3dy5waHBjbGFzc2VzLm9yZy9icm93c2UvcGFja2FnZS8xMjIyLmh0bWwNCiAqICAgICAgICAgICAgIEZyb20gYW4gb3JpZ2luYWwgaWRlYSBvZiBNaWtlIFR1cmluDQogKiBAbGluayAgICAgICBodHRwOi8vd3d3LnBocGNsYXNzZXMub3JnL2Jyb3dzZS9wYWNrYWdlLzE5NjQuaHRtbA0KICogICAgICAgICAgICAgSW1wcm92ZSB2ZXJzaW9uIG9mIEdlcmQgV2VpdGVuYmVyZw0KICogQHNpbmNlICAgICAgQ2xhc3MgYXZhaWxhYmxlIHNpbmNlIFJlbGVhc2UgMi4wLjBSQzENCiAqLw0KDQpjbGFzcyBIVE1MX1Byb2dyZXNzMl9MaXRlDQp7DQogICAgLyoqDQogICAgICogTGFiZWwgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSBwcm9ncmVzcyBiYXIuDQogICAgICoNCiAgICAgKiBAdmFyICAgICAgICBzdHJpbmcNCiAgICAgKiBAc2luY2UgICAgICAyLjAuMA0KICAgICAqIEBhY2Nlc3MgICAgIHByaXZhdGUNCiAgICAgKi8NCiAgICB2YXIgJF9pZGVudDsNCg0KICAgIC8qKg0KICAgICAqIFN0YXR1cyBvZiB0aGUgcHJvZ3Jlc3MgYmFyIChuZXcsIHNob3csIGhpZGUpLg0KICAgICAqDQogICAgICogQHZhciAgICAgICAgc3RyaW5nDQogICAgICogQHNpbmNlICAgICAgMi4wLjANCiAgICAgKiBAYWNjZXNzICAgICBwcml2YXRlDQogICAgICovDQogICAgdmFyICRfc3RhdHVzID0gJ25ldyc7DQoNCiAgICAvKioNCiAgICAgKiBTdGVwcyBvZiB0aGUgcHJvZ3Jlc3MgYmFyLg0KICAgICAqDQogICAgICogQHZhciAgICAgICAgaW50ZWdlcg0KICAgICAqIEBzaW5jZSAgICAgIDIuMC4wDQogICAgICogQGFjY2VzcyAgICAgcHJpdmF0ZQ0KICAgICAqLw0KICAgIHZhciAkX3N0ZXAgPSAwOw0KDQogICAgLyoqDQogICAgICogTWluaW11bSBzdGVwcyBvZiB0aGUgcHJvZ3Jlc3MgYmFyLg0KICAgICAqDQogICAgICogQHZhciAgICAgICAgaW50ZWdlcg0KICAgICAqIEBzaW5jZSAgICAgIDIuMC4wDQogICAgICogQGFjY2VzcyAgICAgcHVibGljDQogICAgICovDQogICAgdmFyICRtaW47DQoNCiAgICAvKioNCiAgICAgKiBNYXhpbXVtIHN0ZXBzIG9mIHRoZSBwcm9ncmVzcyBiYXIuDQogICAgICoNCiAgICAgKiBAdmFyICAgICAgICBpbnRlZ2VyDQogICAgICogQHNpbmNlICAgICAgMi4wLjANCiAgICAgKiBAYWNjZXNzICAgICBwdWJsaWMNCiAgICAgKi8NCiAgICB2YXIgJG1heDsNCg0KICAgIC8qKg0KICAgICAqIFByb2dyZXNzIGJhciBwb3NpdGlvbiAoYWJzb2x1dGUsIHJlbGF0aXZlKS4NCiAgICAgKg0KICAgICAqIEB2YXIgICAgICAgIHN0cmluZw0KICAgICAqIEBzaW5jZSAgICAgIDIuMC4wDQogICAgICogQGFjY2VzcyAgICAgcHVibGljDQogICAgICovDQogICAgdmFyICRwb3NpdGlvbjsNCg0KICAgIC8qKg0KICAgICAqIFByb2dyZXNzIGJhciBwb3NpdGlvbiBmcm9tIGxlZnQuDQogICAgICoNCiAgICAgKiBAdmFyICAgICAgICBpbnRlZ2VyDQogICAgICogQHNpbmNlICAgICAgMi4wLjANCiAgICAgKiBAYWNjZXNzICAgICBwdWJsaWMNCiAgICAgKi8NCiAgICB2YXIgJGxlZnQ7DQoNCiAgICAvKioNCiAgICAgKiBQcm9ncmVzcyBiYXIgcG9zaXRpb24gZnJvbSB0b3AuDQogICAgICoNCiAgICAgKiBAdmFyICAgICAgICBpbnRlZ2VyDQogICAgICogQHNpbmNlICAgICAgMi4wLjANCiAgICAgKiBAYWNjZXNzICAgICBwdWJsaWMNCiAgICAgKi8NCiAgICB2YXIgJHRvcDsNCg0KICAgIC8qKg0KICAgICAqIFByb2dyZXNzIGJhciB3aWR0aCBpbiBwaXhlbC4NCiAgICAgKg0KICAgICAqIEB2YXIgICAgICAgIGludGVnZXINCiAgICAgKiBAc2luY2UgICAgICAyLjAuMA0KICAgICAqIEBhY2Nlc3MgICAgIHB1YmxpYw0KICAgICAqLw0KICAgIHZhciAkd2lkdGg7DQoNCiAgICAvKioNCiAgICAgKiBQcm9ncmVzcyBiYXIgaGVpZ2h0IGluIHBpeGVsLg0KICAgICAqDQogICAgICogQHZhciAgICAgICAgaW50ZWdlcg0KICAgICAqIEBzaW5jZSAgICAgIDIuMC4wDQogICAgICogQGFjY2VzcyAgICAgcHVibGljDQogICAgICovDQogICAgdmFyICRoZWlnaHQ7DQoNCiAgICAvKioNCiAgICAgKiBQcm9ncmVzcyBiYXIgcGFkZGluZyBpbiBwaXhlbC4NCiAgICAgKg0KICAgICAqIEB2YXIgICAgICAgIGludGVnZXINCiAgICAgKiBAc2luY2UgICAgICAyLjAuMA0KICAgICAqIEBhY2Nlc3MgICAgIHB1YmxpYw0KICAgICAqLw0KICAgIHZhciAkcGFkZGluZzsNCg0KICAgIC8qKg0KICAgICAqIFByb2dyZXNzIGJhciBmb3JlZ3JvdW5kIGNvbG9yLg0KICAgICAqDQogICAgICogQHZhciAgICAgICAgc3RyaW5nDQogICAgICogQHNpbmNlICAgICAgMi4wLjANCiAgICAgKiBAYWNjZXNzICAgICBwdWJsaWMNCiAgICAgKi8NCiAgICB2YXIgJGZvcmVncm91bmRfY29sb3IgPSAnIzAwMzNGRic7DQoNCiAgICAvKioNCiAgICAgKiBQcm9ncmVzcyBiYXIgZm9yZWdyb3VuZCBjb2xvci4NCiAgICAgKg0KICAgICAqIEB2YXIgICAgICAgIHN0cmluZw0KICAgICAqIEBzaW5jZSAgICAgIDIuMC4wDQogICAgICogQGFjY2VzcyAgICAgcHVibGljDQogICAgICovDQogICAgdmFyICRiYWNrZ3JvdW5kX2NvbG9yID0gJyNDMEMwQzAnOw0KDQogICAgLyoqDQogICAgICogUHJvZ3Jlc3MgYmFyIGJvcmRlciBwcm9wZXJ0aWVzDQogICAgICoNCiAgICAgKiA8Y29kZT4NCiAgICAgKiAkYm9yZGVyID0gYXJyYXkoDQogICAgICogICAgJ3dpZHRoJyA9PiAxICAgICAgICAgICMgd2lkdGggc2l6ZSBpbiBwaXhlbA0KICAgICAqICAgICdzdHlsZScgPT4gJ3NvbGlkJyAgICAjIHN0eWxlIChzb2xpZCwgZGFzaGVkLCBkb3R0ZWQgLi4uKQ0KICAgICAqICAgICdjb2xvcicgPT4gJyMwMDAwMDAnICAjIGNvbG9yDQogICAgICogKTsNCiAgICAgKiA8L2NvZGU+DQogICAgICoNCiAgICAgKiBAdmFyICAgICAgICBhcnJheQ0KICAgICAqIEBzaW5jZSAgICAgIDIuMC4wDQogICAgICogQGFjY2VzcyAgICAgcHVibGljDQogICAgICovDQogICAgdmFyICRib3JkZXIgPSBhcnJheSgnd2lkdGgnID0+IDEsICdzdHlsZScgPT4gJ3NvbGlkJywgJ2NvbG9yJyA9PiAnIzAwMDAwMCcpOw0KDQogICAgLyoqDQogICAgICogRGlyZWN0aW9uIG9mIG1vdGlvbiAocmlnaHQsIGxlZnQsIHVwLCBkb3duKS4NCiAgICAgKg0KICAgICAqIEB2YXIgICAgICAgIHN0cmluZw0KICAgICAqIEBzaW5jZSAgICAgIDIuMC4wDQogICAgICogQGFjY2VzcyAgICAgcHVibGljDQogICAgICovDQogICAgdmFyICRkaXJlY3Rpb24gPSAncmlnaHQnOw0KDQogICAgLyoqDQogICAgICogUHJvZ3Jlc3MgYmFyIGZyYW1lIHByb3BlcnRpZXMNCiAgICAgKg0KICAgICAqIDxjb2RlPg0KICAgICAqICRmcmFtZSA9IGFycmF5KA0KICAgICAqICAgICdzaG93JyA9PiBmYWxzZSwgICAgICAjIGZyYW1lIHNob3cgKHRydWUvZmFsc2UpDQogICAgICogICAgJ2xlZnQnID0+IDIwMCwgICAgICAgICMgZnJhbWUgcG9zaXRpb24gZnJvbSBsZWZ0DQogICAgICogICAgJ3RvcCcgPT4gMTAwLCAgICAgICAgICMgZnJhbWUgcG9zaXRpb24gZnJvbSB0b3ANCiAgICAgKiAgICAnd2lkdGgnID0+IDMyMCwgICAgICAgIyBmcmFtZSB3aWR0aA0KICAgICAqICAgICdoZWlnaHQnID0+IDkwLCAgICAgICAjIGZyYW1lIGhlaWdodA0KICAgICAqICAgICdjb2xvcicgPT4gJyNDMEMwQzAnLCAjIGZyYW1lIGNvbG9yDQogICAgICogICAgJ2JvcmRlci13aWR0aCcgPT4gMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZnJhbWUgYm9yZGVyIHdpZHRoDQogICAgICogICAgJ2JvcmRlci1zdHlsZScgPT4gJ3NvbGlkJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZnJhbWUgYm9yZGVyIHN0eWxlIChzb2xpZCwNCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkYXNoZWQsIGRvdHRlZCwgaW5zZXQgLi4uKQ0KICAgICAqICAgICdib3JkZXItY29sb3InID0+ICcjREZERkRGICM0MDQwNDAgIzQwNDA0MCAjREZERkRGJyAgICAjIGZyYW1lIGJvcmRlciBjb2xvciAoM2RmeCkNCiAgICAgKiApOw0KICAgICAqIDwvY29kZT4NCiAgICAgKg0KICAgICAqIEB2YXIgICAgICAgIGFycmF5DQogICAgICogQHNpbmNlICAgICAgMi4wLjANCiAgICAgKiBAYWNjZXNzICAgICBwdWJsaWMNCiAgICAgKiBAc2VlICAgICAgICBzZXRGcmFtZUF0dHJpYnV0ZXMoKQ0KICAgICAqLw0KICAgIHZhciAkZnJhbWUgPSBhcnJheSgnc2hvdycgPT4gZmFsc2UpOw0KDQogICAgLyoqDQogICAgICogUHJvZ3Jlc3MgYmFyIGxhYmVscyBwcm9wZXJ0aWVzDQogICAgICoNCiAgICAgKiA8Y29kZT4NCiAgICAgKiAkbGFiZWwgPSBhcnJheSgNCiAgICAgKiAgICAnbmFtZScgPT4gYXJyYXkoICAgICAgICAgICAgICAgICAgIyBsYWJlbCBuYW1lDQogICAgICogICAgICAndHlwZScgPT4gJ3RleHQnLCAgICAgICAgICAgICAgICMgbGFiZWwgdHlwZQ0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICh0ZXh0LGJ1dHRvbixzdGVwLHBlcmNlbnQsY3Jvc3NiYXIpDQogICAgICogICAgICAndmFsdWUnID0+ICcmbmJzcDsnLCAgICAgICAgICAgICMgbGFiZWwgdmFsdWUNCiAgICAgKiAgICAgICdsZWZ0JyA9PiAoJGxlZnQpLCAgICAgICAgICAgICAgIyBsYWJlbCBwb3NpdGlvbiBmcm9tIGxlZnQNCiAgICAgKiAgICAgICd0b3AnID0+ICgkdG9wIC0gMTYpLCAgICAgICAgICAgIyBsYWJlbCBwb3NpdGlvbiBmcm9tIHRvcA0KICAgICAqICAgICAgJ3dpZHRoJyA9PiAwLCAgICAgICAgICAgICAgICAgICAjIGxhYmVsIHdpZHRoDQogICAgICogICAgICAnaGVpZ2h0JyA9PiAwLCAgICAgICAgICAgICAgICAgICMgbGFiZWwgaGVpZ2h0DQogICAgICogICAgICAnYWxpZ24nID0+ICdsZWZ0JywgICAgICAgICAgICAgICMgbGFiZWwgYWxpZ24NCiAgICAgKiAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJyA9PiAndHJhbnNwYXJlbnQnLCAgICAgICAgICAjIGxhYmVsIGJhY2tncm91bmQgY29sb3INCiAgICAgKiAgICAgICdmb250LWZhbWlseScgPT4gJ1ZlcmRhbmEsIFRhaG9tYSwgQXJpYWwnLCAgICAjIGxhYmVsIGZvbnQgZmFtaWx5DQogICAgICogICAgICAnZm9udC1zaXplJyA9PiAxMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsYWJlbCBmb250IHNpemUNCiAgICAgKiAgICAgICdmb250LXdlaWdodCcgPT4gJ25vcm1hbCcsICAgICAgICAgICAgICAgICAgICAjIGxhYmVsIGZvbnQgd2VpZ2h0DQogICAgICogICAgICAnZm9udC1zdHlsZScgPT4gJ25vcm1hbCcsICAgICAgICAgICAgICAgICAgICAgIyBsYWJlbCBmb250IHN0eWxlDQogICAgICogICAgICAnY29sb3InID0+ICcjMDAwMDAwJyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsYWJlbCBmb250IGNvbG9yDQogICAgICogKTsNCiAgICAgKiA8L2NvZGU+DQogICAgICoNCiAgICAgKiBAdmFyICAgICAgICBhcnJheQ0KICAgICAqIEBzaW5jZSAgICAgIDIuMC4wDQogICAgICogQGFjY2VzcyAgICAgcHVibGljDQogICAgICogQHNlZSAgICAgICAgYWRkTGFiZWwoKSwgc2V0TGFiZWxBdHRyaWJ1dGVzKCkNCiAgICAgKi8NCiAgICB2YXIgJGxhYmVsID0gYXJyYXkoKTsNCg0KICAgIC8qKg0KICAgICAqIENvbnN0cnVjdG9yIChaRTEpDQogICAgICoNCiAgICAgKiBAc2luY2UgICAgICAyLjAuMA0KICAgICAqIEBhY2Nlc3MgICAgIHB1YmxpYw0KICAgICAqLw0KLy8gICAgIGZ1bmN0aW9uIEhUTUxfUHJvZ3Jlc3MyX0xpdGUoJG9wdGlvbnMgPSBhcnJheSgpLCAkaWQgPSBudWxsKQ0KLy8gICAgIHsNCi8vICAgICAgICAgJHRoaXMtPl9fY29uc3RydWN0KCRvcHRpb25zLCAkaWQpOw0KLy8gICAgIH0NCg0KICAgIC8qKg0KICAgICAqIENvbnN0cnVjdG9yIChaRTIpIFN1bW1hcnkuDQogICAgICoNCiAgICAgKiBAcGFyYW0gICAgICBhcnJheSAgICAgJG9wdGlvbnMgICAgICAgKG9wdGlvbmFsKSBoYXMgb2Ygc3R5bGUgcGFyYW1ldGVycw0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgcHJvZ3Jlc3MgYmFyDQogICAgICogQHBhcmFtICAgICAgc3RyaW5nICAgICRpZCAgICAgICAgICAgIChvcHRpb25hbCkgcHJvZ3Jlc3MgYmFyIHVuaXF1ZSBpZGVudGlmaWVyDQogICAgICoNCiAgICAgKiBAcmV0dXJuICAgICBvYmplY3QNCiAgICAgKiBAc2luY2UgICAgICAyLjAuMA0KICAgICAqIEBhY2Nlc3MgICAgIHByb3RlY3RlZA0KICAgICAqLw0KICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRvcHRpb25zID0gYXJyYXkoKSwgJGlkID0gbnVsbCkNCiAgICB7DQogICAgICAgIGlmIChpc19udWxsKCRpZCkpIHsNCiAgICAgICAgICAgICR0aGlzLT5faWRlbnQgPSBzdWJzdHIobWQ1KG1pY3JvdGltZSgpKSwgMCwgNik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkdGhpcy0+X2lkZW50ID0gJGlkOw0KICAgIH0NCg0KICAgICAgICAkZGVmYXVsdF9vcHRpb25zID0gYXJyYXkoDQogICAgICAgICAgICAncG9zaXRpb24nID0+ICdhYnNvbHV0ZScsDQogICAgICAgICAgICAnbGVmdCcgPT4gMTAsDQogICAgICAgICAgICAndG9wJyA9PiAyNSwNCiAgICAgICAgICAgICd3aWR0aCcgPT4gMzAwLA0KICAgICAgICAgICAgJ2hlaWdodCcgPT4gMjUsDQogICAgICAgICAgICAncGFkZGluZycgPT4gMCwNCiAgICAgICAgICAgICdtaW4nID0+IDAsDQogICAgICAgICAgICAnbWF4JyA9PiAxMDANCiAgICAgICAgKTsNCiAgICAgICAgJGFsbG93ZWRfb3B0aW9ucyA9IGFycmF5X2tleXMoJGRlZmF1bHRfb3B0aW9ucyk7DQoNCiAgICAgICAgJG9wdGlvbnMgPSBhcnJheV9tZXJnZSgkZGVmYXVsdF9vcHRpb25zLCAkb3B0aW9ucyk7DQoNCiAgICAgICAgZm9yZWFjaCgkb3B0aW9ucyBhcyAkcHJvcCA9PiAkdmFsKSB7DQogICAgICAgICAgICBpZiAoaW5fYXJyYXkoJHByb3AsICRhbGxvd2VkX29wdGlvbnMpKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPnskcHJvcH0gPSAkdmFsOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0cmlnZ2VyX2Vycm9yKCJvcHRpb24gJyRwcm9wJyBpcyBub3QgYWxsb3dlZCIsIEVfVVNFUl9XQVJOSU5HKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkdGhpcy0+X3NldFN0ZXAoMCk7DQoNCiAgICAgICAgb2JfaW1wbGljaXRfZmx1c2goMSk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogTW92ZXMgdGhlIHByb2dyZXNzIGJhciBpbiBhbGwgZGlyZWN0aW9ucyAobGVmdCwgcmlnaHQsIHVwICwgZG93bikuDQogICAgICoNCiAgICAgKiBAcGFyYW0gICAgICBzdHJpbmcgICAgJGRpcmVjdGlvbiAgICAgZmlsbCB3YXkgb2YgdGhlIHByb2dyZXNzIGJhcg0KICAgICAqDQogICAgICogQHJldHVybiAgICAgdm9pZA0KICAgICAqIEBzaW5jZSAgICAgIDIuMC4wDQogICAgICogQGFjY2VzcyAgICAgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gc2V0RGlyZWN0aW9uKCRkaXJlY3Rpb24pDQogICAgew0KICAgICAgICAkdGhpcy0+ZGlyZWN0aW9uID0gJGRpcmVjdGlvbjsNCg0KICAgICAgICBpZiAoJHRoaXMtPl9zdGF0dXMgIT0gJ25ldycpIHsNCiAgICAgICAgICAgICRiYXIgPSBvYl9nZXRfY2xlYW4oKTsNCiAgICAgICAgICAgICRwb3NpdGlvbiA9ICR0aGlzLT5fY29tcHV0ZVBvc2l0aW9uKCk7DQoNCiAgICAgICAgICAgICRjc3NUZXh0ICA9ICdsZWZ0OicgLiAkcG9zaXRpb25bJ2xlZnQnXSAuICdweDsnOw0KICAgICAgICAgICAgJGNzc1RleHQgLj0gJ3RvcDonIC4gJHBvc2l0aW9uWyd0b3AnXSAuICdweDsnOw0KICAgICAgICAgICAgJGNzc1RleHQgLj0gJ3dpZHRoOicgLiAkcG9zaXRpb25bJ3dpZHRoJ10gLiAncHg7JzsNCiAgICAgICAgICAgICRjc3NUZXh0IC49ICdoZWlnaHQ6JyAuICRwb3NpdGlvblsnaGVpZ2h0J10gLiAncHg7JzsNCg0KICAgICAgICAgICAgJGJhciAuPSAkdGhpcy0+X2NoYW5nZUVsZW1lbnRTdHlsZSgncGJhcicsICcnLCAkY3NzVGV4dCk7DQoNCiAgICAgICAgICAgIGVjaG8gJGJhciAuIFBIUF9FT0w7DQogICAgICAgICAgICBvYl9zdGFydCgpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQWRkIGEgbmV3IGxhYmVsIHRvIHRoZSBwcm9ncmVzcyBiYXIuDQogICAgICoNCiAgICAgKiBAcGFyYW0gICAgICBzdHJpbmcgICAgJHR5cGUgICAgICAgICAgTGFiZWwgdHlwZSAodGV4dCxidXR0b24sc3RlcCxwZXJjZW50LGNyb3NzYmFyKQ0KICAgICAqIEBwYXJhbSAgICAgIHN0cmluZyAgICAkbmFtZSAgICAgICAgICBMYWJlbCBuYW1lDQogICAgICogQHBhcmFtICAgICAgc3RyaW5nICAgICR2YWx1ZSAgICAgICAgIChvcHRpb25hbCkgZGVmYXVsdCBsYWJlbCB2YWx1ZQ0KICAgICAqDQogICAgICogQHJldHVybiAgICAgdm9pZA0KICAgICAqIEBzaW5jZSAgICAgIDIuMC4wDQogICAgICogQGFjY2VzcyAgICAgcHVibGljDQogICAgICogQHNlZSAgICAgICAgc2V0TGFiZWxBdHRyaWJ1dGVzKCksIHJlbW92ZUxhYmVsKCkNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBhZGRMYWJlbCgkdHlwZSwgJG5hbWUsICR2YWx1ZSA9ICcmbmJzcDsnKQ0KICAgIHsNCiAgICAgICAgc3dpdGNoKCR0eXBlKSB7DQogICAgICAgIGNhc2UgJ3RleHQnOg0KICAgICAgICAgICAgJHRoaXMtPmxhYmVsWyRuYW1lXSA9IGFycmF5KA0KICAgICAgICAgICAgICAgICd0eXBlJyA9PiAkdHlwZSwNCiAgICAgICAgICAgICAgICAndmFsdWUnID0+ICR2YWx1ZSwNCiAgICAgICAgICAgICAgICAnbGVmdCcgPT4gJHRoaXMtPmxlZnQsDQogICAgICAgICAgICAgICAgJ3RvcCcgPT4gJHRoaXMtPnRvcCAtIDE2LA0KICAgICAgICAgICAgICAgICd3aWR0aCcgPT4gMCwNCiAgICAgICAgICAgICAgICAnaGVpZ2h0JyA9PiAwLA0KICAgICAgICAgICAgICAgICdhbGlnbicgPT4gJ2xlZnQnLA0KICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJyA9PiAndHJhbnNwYXJlbnQnLA0KICAgICAgICAgICAgICAgICdmb250LXNpemUnID0+IDExLA0KICAgICAgICAgICAgICAgICdmb250LWZhbWlseScgPT4gJ1ZlcmRhbmEsIFRhaG9tYSwgQXJpYWwnLA0KICAgICAgICAgICAgICAgICdmb250LXdlaWdodCcgPT4gJ25vcm1hbCcsDQogICAgICAgICAgICAgICAgJ2ZvbnQtc3R5bGUnID0+ICdub3JtYWwnLA0KICAgICAgICAgICAgICAgICdjb2xvcicgPT4gJyMwMDAwMDAnDQogICAgICAgICAgICApOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJ2J1dHRvbic6DQogICAgICAgICAgICAkdGhpcy0+bGFiZWxbJG5hbWVdID0gYXJyYXkoDQogICAgICAgICAgICAgICAgJ3R5cGUnID0+ICR0eXBlLA0KICAgICAgICAgICAgICAgICd2YWx1ZScgPT4gJHZhbHVlLA0KICAgICAgICAgICAgICAgICdhY3Rpb24nID0+ICcnLA0KICAgICAgICAgICAgICAgICd0YXJnZXQnID0+ICdzZWxmJywNCiAgICAgICAgICAgICAgICAnbGVmdCcgPT4gJHRoaXMtPmxlZnQsDQogICAgICAgICAgICAgICAgJ3RvcCcgPT4gJHRoaXMtPnRvcCArICR0aGlzLT5oZWlnaHQgKyAxMCwNCiAgICAgICAgICAgICAgICAnd2lkdGgnID0+IDAsDQogICAgICAgICAgICAgICAgJ2hlaWdodCcgPT4gMCwNCiAgICAgICAgICAgICAgICAnYWxpZ24nID0+ICdjZW50ZXInLA0KICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJyA9PiAndHJhbnNwYXJlbnQnLA0KICAgICAgICAgICAgICAgICdmb250LXNpemUnID0+IDExLA0KICAgICAgICAgICAgICAgICdmb250LWZhbWlseScgPT4gJ1ZlcmRhbmEsIFRhaG9tYSwgQXJpYWwnLA0KICAgICAgICAgICAgICAgICdmb250LXdlaWdodCcgPT4gJ25vcm1hbCcsDQogICAgICAgICAgICAgICAgJ2ZvbnQtc3R5bGUnID0+ICdub3JtYWwnLA0KICAgICAgICAgICAgICAgICdjb2xvcicgPT4gJyMwMDAwMDAnDQogICAgICAgICAgICApOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJ3N0ZXAnOg0KICAgICAgICAgICAgJHRoaXMtPmxhYmVsWyRuYW1lXSA9IGFycmF5KA0KICAgICAgICAgICAgICAgICd0eXBlJyA9PiAkdHlwZSwNCiAgICAgICAgICAgICAgICAndmFsdWUnID0+ICR2YWx1ZSwNCiAgICAgICAgICAgICAgICAnbGVmdCcgPT4gJHRoaXMtPmxlZnQgKyA1LA0KICAgICAgICAgICAgICAgICd0b3AnID0+ICR0aGlzLT50b3AgKyA1LA0KICAgICAgICAgICAgICAgICd3aWR0aCcgPT4gMTAsDQogICAgICAgICAgICAgICAgJ2hlaWdodCcgPT4gMCwNCiAgICAgICAgICAgICAgICAnYWxpZ24nID0+ICdyaWdodCcsDQogICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InID0+ICd0cmFuc3BhcmVudCcsDQogICAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZScgPT4gMTEsDQogICAgICAgICAgICAgICAgJ2ZvbnQtZmFtaWx5JyA9PiAnVmVyZGFuYSwgVGFob21hLCBBcmlhbCcsDQogICAgICAgICAgICAgICAgJ2ZvbnQtd2VpZ2h0JyA9PiAnbm9ybWFsJywNCiAgICAgICAgICAgICAgICAnZm9udC1zdHlsZScgPT4gJ25vcm1hbCcsDQogICAgICAgICAgICAgICAgJ2NvbG9yJyA9PiAnIzAwMDAwMCcNCiAgICAgICAgICAgICk7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAncGVyY2VudCc6DQogICAgICAgICAgICAkdGhpcy0+bGFiZWxbJG5hbWVdID0gYXJyYXkoDQogICAgICAgICAgICAgICAgJ3R5cGUnID0+ICR0eXBlLA0KICAgICAgICAgICAgICAgICd2YWx1ZScgPT4gJHZhbHVlLA0KICAgICAgICAgICAgICAgICdsZWZ0JyA9PiAkdGhpcy0+bGVmdCArICR0aGlzLT53aWR0aCAtIDUwLA0KICAgICAgICAgICAgICAgICd0b3AnID0+ICR0aGlzLT50b3AgLSAxNiwNCiAgICAgICAgICAgICAgICAnd2lkdGgnID0+IDUwLA0KICAgICAgICAgICAgICAgICdoZWlnaHQnID0+IDAsDQogICAgICAgICAgICAgICAgJ2FsaWduJyA9PiAncmlnaHQnLA0KICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJyA9PiAndHJhbnNwYXJlbnQnLA0KICAgICAgICAgICAgICAgICdmb250LXNpemUnID0+IDExLA0KICAgICAgICAgICAgICAgICdmb250LWZhbWlseScgPT4gJ1ZlcmRhbmEsIFRhaG9tYSwgQXJpYWwnLA0KICAgICAgICAgICAgICAgICdmb250LXdlaWdodCcgPT4gJ25vcm1hbCcsDQogICAgICAgICAgICAgICAgJ2ZvbnQtc3R5bGUnID0+ICdub3JtYWwnLA0KICAgICAgICAgICAgICAgICdjb2xvcicgPT4gJyMwMDAwMDAnDQogICAgICAgICAgICApOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJ2Nyb3NzYmFyJzoNCiAgICAgICAgICAgICR0aGlzLT5sYWJlbFskbmFtZV0gPSBhcnJheSgNCiAgICAgICAgICAgICAgICAndHlwZScgPT4gJHR5cGUsDQogICAgICAgICAgICAgICAgJ3ZhbHVlJyA9PiAkdmFsdWUsDQogICAgICAgICAgICAgICAgJ2xlZnQnID0+ICR0aGlzLT5sZWZ0ICsgKCR0aGlzLT53aWR0aCAvIDIpLA0KICAgICAgICAgICAgICAgICd0b3AnID0+ICR0aGlzLT50b3AgLSAxNiwNCiAgICAgICAgICAgICAgICAnd2lkdGgnID0+IDEwLA0KICAgICAgICAgICAgICAgICdoZWlnaHQnID0+IDAsDQogICAgICAgICAgICAgICAgJ2FsaWduJyA9PiAnY2VudGVyJywNCiAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcicgPT4gJ3RyYW5zcGFyZW50JywNCiAgICAgICAgICAgICAgICAnZm9udC1zaXplJyA9PiAxMSwNCiAgICAgICAgICAgICAgICAnZm9udC1mYW1pbHknID0+ICdWZXJkYW5hLCBUYWhvbWEsIEFyaWFsJywNCiAgICAgICAgICAgICAgICAnZm9udC13ZWlnaHQnID0+ICdub3JtYWwnLA0KICAgICAgICAgICAgICAgICdmb250LXN0eWxlJyA9PiAnbm9ybWFsJywNCiAgICAgICAgICAgICAgICAnY29sb3InID0+ICcjMDAwMDAwJw0KICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUmVtb3ZlcyBhIGxhYmVsIHRvIHRoZSBwcm9ncmVzcyBiYXIuDQogICAgICoNCiAgICAgKiBAcGFyYW0gICAgICBzdHJpbmcgICAgJG5hbWUgICAgICAgICAgTGFiZWwgbmFtZQ0KICAgICAqDQogICAgICogQHJldHVybiAgICAgdm9pZA0KICAgICAqIEBzaW5jZSAgICAgIDIuMC4wDQogICAgICogQGFjY2VzcyAgICAgcHVibGljDQogICAgICogQHNlZSAgICAgICAgYWRkTGFiZWwoKQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHJlbW92ZUxhYmVsKCRuYW1lKQ0KICAgIHsNCiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5sYWJlbFskbmFtZV0pICYmICR0aGlzLT5sYWJlbFskbmFtZV1bJ3R5cGUnXSAhPSAnYnV0dG9uJykgew0KICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmxhYmVsWyRuYW1lXSk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBBZGQgYSBuZXcgYnV0dG9uIHdpdGggdGhlIHByb2dyZXNzIGJhci4NCiAgICAgKg0KICAgICAqIEBwYXJhbSAgICAgIHN0cmluZyAgICAkbmFtZSAgICAgICAgICBCdXR0b24gbmFtZQ0KICAgICAqIEBwYXJhbSAgICAgIHN0cmluZyAgICAkdmFsdWUgICAgICAgICBMYWJlbCB2YWx1ZQ0KICAgICAqIEBwYXJhbSAgICAgIHN0cmluZyAgICAkYWN0aW9uICAgICAgICBBY3Rpb24gdG8gZG8gKHNlZSBRVUVSWV9TVFJJTkcpDQogICAgICogQHBhcmFtICAgICAgc3RyaW5nICAgICR0YXJnZXQgICAgICAgIChvcHRpb25hbCkgRnJhbWUgdGFyZ2V0IChkZWZhdWx0IGlzIHNlbGYpDQogICAgICoNCiAgICAgKiBAcmV0dXJuICAgICB2b2lkDQogICAgICogQHNpbmNlICAgICAgMi4wLjANCiAgICAgKiBAYWNjZXNzICAgICBwdWJsaWMNCiAgICAgKiBAc2VlICAgICAgICByZW1vdmVCdXR0b24oKSwgYWRkTGFiZWwoKQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGFkZEJ1dHRvbigkbmFtZSwgJHZhbHVlLCAkYWN0aW9uLCAkdGFyZ2V0ID0gJ3NlbGYnKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPmFkZExhYmVsKCdidXR0b24nLCAkbmFtZSwgJHZhbHVlKTsNCiAgICAgICAgJHRoaXMtPmxhYmVsWyRuYW1lXVsnYWN0aW9uJ10gPSAkYWN0aW9uOw0KICAgICAgICAkdGhpcy0+bGFiZWxbJG5hbWVdWyd0YXJnZXQnXSA9ICR0YXJnZXQ7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUmVtb3ZlcyBhIGJ1dHRvbiB0byB0aGUgcHJvZ3Jlc3MgYmFyLg0KICAgICAqDQogICAgICogQHBhcmFtICAgICAgc3RyaW5nICAgICRuYW1lICAgICAgICAgIExhYmVsIG5hbWUNCiAgICAgKg0KICAgICAqIEByZXR1cm4gICAgIHZvaWQNCiAgICAgKiBAc2luY2UgICAgICAyLjAuMA0KICAgICAqIEBhY2Nlc3MgICAgIHB1YmxpYw0KICAgICAqIEBzZWUgICAgICAgIGFkZEJ1dHRvbigpDQogICAgICovDQogICAgZnVuY3Rpb24gcmVtb3ZlQnV0dG9uKCRuYW1lKQ0KICAgIHsNCiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5sYWJlbFskbmFtZV0pICYmICR0aGlzLT5sYWJlbFskbmFtZV1bJ3R5cGUnXSA9PSAnYnV0dG9uJykgew0KICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmxhYmVsWyRuYW1lXSk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBCdWlsZCBhIGZyYW1lIGFyb3VuZCB0aGUgcHJvZ3Jlc3MgYmFyLg0KICAgICAqDQogICAgICogQHBhcmFtICAgICAgYXJyYXkgICAgICRhdHRyaWJ1dGVzICAgIChvcHRpb25hbCkgaGFzaCBvZiBzdHlsZSBwYXJhbWV0ZXJzDQogICAgICoNCiAgICAgKiBAcmV0dXJuICAgICB2b2lkDQogICAgICogQHNpbmNlICAgICAgMi4wLjANCiAgICAgKiBAYWNjZXNzICAgICBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBzZXRGcmFtZUF0dHJpYnV0ZXMoJGF0dHJpYnV0ZXMgPSBhcnJheSgpKQ0KICAgIHsNCiAgICAgICAgJGRlZmF1bHQgPSBhcnJheSgNCiAgICAgICAgICAgICdzaG93JyA9PiB0cnVlLA0KICAgICAgICAgICAgJ2xlZnQnID0+IDIwMCwNCiAgICAgICAgICAgICd0b3AnID0+IDEwMCwNCiAgICAgICAgICAgICd3aWR0aCcgPT4gMzIwLA0KICAgICAgICAgICAgJ2hlaWdodCcgPT4gOTAsDQogICAgICAgICAgICAnY29sb3InID0+ICcjQzBDMEMwJywNCiAgICAgICAgICAgICdib3JkZXItd2lkdGgnID0+IDIsDQogICAgICAgICAgICAnYm9yZGVyLXN0eWxlJyA9PiAnc29saWQnLA0KICAgICAgICAgICAgJ2JvcmRlci1jb2xvcicgPT4gJyNERkRGREYgIzQwNDA0MCAjNDA0MDQwICNERkRGREYnDQogICAgICAgICk7DQogICAgICAgICRhbGxvd2VkX29wdGlvbnMgPSBhcnJheV9rZXlzKCRkZWZhdWx0KTsNCg0KICAgICAgICAkb3B0aW9ucyA9IGFycmF5X21lcmdlKCRkZWZhdWx0LCAkYXR0cmlidXRlcyk7DQoNCiAgICAgICAgZm9yZWFjaCgkb3B0aW9ucyBhcyAkcHJvcCA9PiAkdmFsKSB7DQogICAgICAgICAgICBpZiAoaW5fYXJyYXkoJHByb3AsICRhbGxvd2VkX29wdGlvbnMpKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPmZyYW1lWyRwcm9wXSA9ICR2YWw7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRyaWdnZXJfZXJyb3IoImZyYW1lIG9wdGlvbiAnJHByb3AnIGlzIG5vdCBhbGxvd2VkIiwgRV9VU0VSX1dBUk5JTkcpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRGVmaW5lcyBtYWluIHN0eWxlIG9mIGEgcHJvZ3Jlc3MgYmFyLg0KICAgICAqDQogICAgICogQHBhcmFtICAgICAgYXJyYXkgICAgICRhdHRyaWJ1dGVzICAgIChvcHRpb25hbCkgaGFzaCBvZiBzdHlsZSBwYXJhbWV0ZXJzDQogICAgICoNCiAgICAgKiBAcmV0dXJuICAgICB2b2lkDQogICAgICogQHNpbmNlICAgICAgMi4wLjANCiAgICAgKiBAYWNjZXNzICAgICBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBzZXRCYXJBdHRyaWJ1dGVzKCRhdHRyaWJ1dGVzID0gYXJyYXkoKSkNCiAgICB7DQogICAgICAgICRjc3NUZXh0ID0gJGNzc1RleHRfYm9yZGVyID0gJyc7DQogICAgICAgICRiYXIgID0gb2JfZ2V0X2NsZWFuKCk7DQoNCiAgICAgICAgZm9yZWFjaCAoJGF0dHJpYnV0ZXMgYXMgJGF0dHJOYW1lID0+ICRhdHRyVmFsKSB7DQogICAgICAgICAgICBpZiAoJGF0dHJOYW1lID09ICdib3JkZXItc3R5bGUnKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPmJvcmRlclsnc3R5bGUnXSA9ICRhdHRyVmFsOw0KICAgICAgICAgICAgICAgICRjc3NUZXh0X2JvcmRlciAuPSAnYm9yZGVyU3R5bGU6JyAuICR0aGlzLT5ib3JkZXJbJ3N0eWxlJ10gLiAnOyc7DQoNCiAgICAgICAgICAgIH0gZWxzZWlmICgkYXR0ck5hbWUgPT0gJ2JvcmRlci13aWR0aCcpIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+Ym9yZGVyWyd3aWR0aCddID0gJGF0dHJWYWw7DQogICAgICAgICAgICAgICAgJGNzc1RleHRfYm9yZGVyIC49ICdib3JkZXJXaWR0aDonIC4gJHRoaXMtPmJvcmRlclsnd2lkdGgnXSAuICdweDsnOw0KDQogICAgICAgICAgICB9IGVsc2VpZiAoJGF0dHJOYW1lID09ICdib3JkZXItY29sb3InKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPmJvcmRlclsnY29sb3InXSA9ICRhdHRyVmFsOw0KICAgICAgICAgICAgICAgICRjc3NUZXh0X2JvcmRlciAuPSAnYm9yZGVyQ29sb3I6JyAuICR0aGlzLT5ib3JkZXJbJ2NvbG9yJ10gLiAnOyc7DQoNCiAgICAgICAgICAgIH0gZWxzZWlmICgkYXR0ck5hbWUgPT0gJ2JhY2tncm91bmQtY29sb3InKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPmJhY2tncm91bmRfY29sb3IgPSAkYXR0clZhbDsNCiAgICAgICAgICAgICAgICAkY3NzVGV4dF9ib3JkZXIgLj0gJ2JhY2tncm91bmRDb2xvcjonIC4gJHRoaXMtPmJhY2tncm91bmRfY29sb3IgLiAnOyc7DQoNCiAgICAgICAgICAgIH0gZWxzZWlmICgkYXR0ck5hbWUgPT0gJ2NvbG9yJykgew0KICAgICAgICAgICAgICAgICR0aGlzLT5mb3JlZ3JvdW5kX2NvbG9yID0gJGF0dHJWYWw7DQogICAgICAgICAgICAgICAgJGNzc1RleHQgLj0gJ2JhY2tncm91bmRDb2xvcjonIC4gJHRoaXMtPmZvcmVncm91bmRfY29sb3IgLiAnOyc7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoJHRoaXMtPl9zdGF0dXMgIT0gJ25ldycpIHsNCiAgICAgICAgICAgIGlmICghZW1wdHkoJGNzc1RleHRfYm9yZGVyKSkgew0KICAgICAgICAgICAgICAgICRiYXIgLj0gJHRoaXMtPl9jaGFuZ2VFbGVtZW50U3R5bGUoJ3BicmQnLCAnJywgJGNzc1RleHRfYm9yZGVyKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICghZW1wdHkoJGNzc1RleHQpKSB7DQogICAgICAgICAgICAgICAgJGJhciAuPSAkdGhpcy0+X2NoYW5nZUVsZW1lbnRTdHlsZSgncGJhcicsICcnLCAkY3NzVGV4dCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBlY2hvICRiYXIgLiBQSFBfRU9MOw0KICAgICAgICBvYl9zdGFydCgpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERlZmluZXMgc3R5bGUgb2YgYSBwcm9ncmVzcyBiYXIgbGFiZWwuDQogICAgICoNCiAgICAgKiBAcGFyYW0gICAgICBzdHJpbmcgICAgJG5hbWUgICAgICAgICAgTGFiZWwgaWRlbnRpZmllcg0KICAgICAqIEBwYXJhbSAgICAgIGFycmF5ICAgICAkYXR0cmlidXRlcyAgICAob3B0aW9uYWwpIGhhc2ggb2Ygc3R5bGUgcGFyYW1ldGVycw0KICAgICAqDQogICAgICogQHJldHVybiAgICAgdm9pZA0KICAgICAqIEBzaW5jZSAgICAgIDIuMC4wDQogICAgICogQGFjY2VzcyAgICAgcHVibGljDQogICAgICogQHNlZSAgICAgICAgYWRkTGFiZWwoKQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHNldExhYmVsQXR0cmlidXRlcygkbmFtZSwgJGF0dHJpYnV0ZXMgPSBhcnJheSgpKQ0KICAgIHsNCiAgICAgICAgJGZvbnRmYW1pbHkgPSAkZm9udHdlaWdodCA9ICcnOw0KDQogICAgICAgICRiYXIgPSBvYl9nZXRfY2xlYW4oKTsNCg0KICAgICAgICBmb3JlYWNoICgkYXR0cmlidXRlcyBhcyAkYXR0ck5hbWUgPT4gJGF0dHJWYWwpIHsNCiAgICAgICAgICAgIGlmICgkYXR0ck5hbWUgPT0gJ2NvbG9yJykgew0KICAgICAgICAgICAgICAgICR0aGlzLT5sYWJlbFskbmFtZV1bJ2NvbG9yJ10gPSAkYXR0clZhbDsNCiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPl9zdGF0dXMgIT0gJ25ldycpIHsNCiAgICAgICAgICAgICAgICAgICAgJGNzc1RleHQgPSAnY29sb3I6JyAuICR0aGlzLT5sYWJlbFskbmFtZV1bJ2NvbG9yJ10gLiAnOyc7DQogICAgICAgICAgICAgICAgICAgICRiYXIgLj0gJHRoaXMtPl9jaGFuZ2VFbGVtZW50U3R5bGUoJ3BsYmwnLCAkbmFtZSwgJGNzc1RleHQpOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgfSBlbHNlaWYgKCRhdHRyTmFtZSA9PSAnYmFja2dyb3VuZC1jb2xvcicpIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+bGFiZWxbJG5hbWVdWydiYWNrZ3JvdW5kLWNvbG9yJ10gPSAkYXR0clZhbDsNCiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPl9zdGF0dXMgIT0gJ25ldycpIHsNCiAgICAgICAgICAgICAgICAgICAgJGNzc1RleHQgPSAnYmFja2dyb3VuZENvbG9yOicgLiAkdGhpcy0+bGFiZWxbJG5hbWVdWydiYWNrZ3JvdW5kLWNvbG9yJ10gLiAnOyc7DQogICAgICAgICAgICAgICAgICAgICRiYXIgLj0gJHRoaXMtPl9jaGFuZ2VFbGVtZW50U3R5bGUoJ3BsYmwnLCAkbmFtZSwgJGNzc1RleHQpOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgfSBlbHNlaWYgKCRhdHRyTmFtZSA9PSAnZm9udC1zaXplJykgew0KICAgICAgICAgICAgICAgICR0aGlzLT5sYWJlbFskbmFtZV1bJ2ZvbnQtc2l6ZSddID0gJGZvbnQgPSAkYXR0clZhbDsNCiAgICAgICAgICAgIH0gZWxzZWlmICgkYXR0ck5hbWUgPT0gJ2ZvbnQtZmFtaWx5Jykgew0KICAgICAgICAgICAgICAgICR0aGlzLT5sYWJlbFskbmFtZV1bJ2ZvbnQtZmFtaWx5J10gPSAkZm9udCA9ICRhdHRyVmFsOw0KICAgICAgICAgICAgfSBlbHNlaWYgKCRhdHRyTmFtZSA9PSAnZm9udC13ZWlnaHQnKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPmxhYmVsWyRuYW1lXVsnZm9udC13ZWlnaHQnXSA9ICRmb250ID0gJGF0dHJWYWw7DQogICAgICAgICAgICB9IGVsc2VpZiAoJGF0dHJOYW1lID09ICdmb250LXN0eWxlJykgew0KICAgICAgICAgICAgICAgICR0aGlzLT5sYWJlbFskbmFtZV1bJ2ZvbnQtc3R5bGUnXSA9ICRmb250ID0gJGF0dHJWYWw7DQoNCiAgICAgICAgICAgIH0gZWxzZWlmICgkYXR0ck5hbWUgPT0gJ3ZhbHVlJykgew0KICAgICAgICAgICAgICAgICR0aGlzLT5sYWJlbFskbmFtZV1bJ3ZhbHVlJ10gPSAkYXR0clZhbDsNCiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPl9zdGF0dXMgIT0gJ25ldycpIHsNCiAgICAgICAgICAgICAgICAgICAgJGJhciAuPSAkdGhpcy0+X2NoYW5nZUxhYmVsVGV4dCgkbmFtZSwgJHRoaXMtPmxhYmVsWyRuYW1lXVsndmFsdWUnXSk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB9IGVsc2VpZiAoJGF0dHJOYW1lID09ICdsZWZ0Jykgew0KICAgICAgICAgICAgICAgICR0aGlzLT5sYWJlbFskbmFtZV1bJ2xlZnQnXSA9ICRhdHRyVmFsOw0KICAgICAgICAgICAgfSBlbHNlaWYgKCRhdHRyTmFtZSA9PSAndG9wJykgew0KICAgICAgICAgICAgICAgICR0aGlzLT5sYWJlbFskbmFtZV1bJ3RvcCddID0gJGF0dHJWYWw7DQogICAgICAgICAgICB9IGVsc2VpZiAoJGF0dHJOYW1lID09ICd3aWR0aCcpIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+bGFiZWxbJG5hbWVdWyd3aWR0aCddID0gJGF0dHJWYWw7DQogICAgICAgICAgICB9IGVsc2VpZiAoJGF0dHJOYW1lID09ICdoZWlnaHQnKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPmxhYmVsWyRuYW1lXVsnaGVpZ2h0J10gPSAkYXR0clZhbDsNCiAgICAgICAgICAgIH0gZWxzZWlmICgkYXR0ck5hbWUgPT0gJ2FsaWduJykgew0KICAgICAgICAgICAgICAgICR0aGlzLT5sYWJlbFskbmFtZV1bJ2FsaWduJ10gPSAkYXR0clZhbDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBpZiAoaXNzZXQoJGZvbnQpKSB7DQogICAgICAgICAgICBpZiAoJHRoaXMtPl9zdGF0dXMgIT0gJ25ldycpIHsNCiAgICAgICAgICAgICAgICAkY3NzVGV4dCA9ICdmb250U2l6ZTonIC4gJHRoaXMtPmxhYmVsWyRuYW1lXVsnZm9udC1zaXplJ10gLiAncHg7Jw0KICAgICAgICAgICAgICAgICAgICAgICAgIC4gJ2ZvbnRGYW1pbHk6JyAuICR0aGlzLT5sYWJlbFskbmFtZV1bJ2ZvbnQtZmFtaWx5J10gLiAnOycNCiAgICAgICAgICAgICAgICAgICAgICAgICAuICdmb250V2VpZ2h0OicgLiAkdGhpcy0+bGFiZWxbJG5hbWVdWydmb250LXdlaWdodCddIC4gJzsnDQogICAgICAgICAgICAgICAgICAgICAgICAgLiAnZm9udFN0eWxlOicgLiAkdGhpcy0+bGFiZWxbJG5hbWVdWydmb250LXN0eWxlJ10gLiAnOyc7DQoNCiAgICAgICAgICAgICAgICAkYmFyIC49ICR0aGlzLT5fY2hhbmdlRWxlbWVudFN0eWxlKCdwbGJsJywgJG5hbWUsICRjc3NUZXh0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGlmICgkdGhpcy0+X3N0YXR1cyAhPSAnbmV3Jykgew0KICAgICAgICAgICAgJGNzc1RleHQgPSAndG9wOicgLiAkdGhpcy0+bGFiZWxbJG5hbWVdWyd0b3AnXSAuICdweDsnDQogICAgICAgICAgICAgICAgICAgICAuICdsZWZ0OicgLiAkdGhpcy0+bGFiZWxbJG5hbWVdWydsZWZ0J10gLiAncHg7JzsNCg0KICAgICAgICAgICAgaWYoJHRoaXMtPmxhYmVsWyRuYW1lXVsnd2lkdGgnXSA+IDApIHsNCiAgICAgICAgICAgICAgICAkY3NzVGV4dCAuPSAnd2lkdGg6JyAuICR0aGlzLT5sYWJlbFskbmFtZV1bJ3dpZHRoJ10gLiAncHg7JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmKCR0aGlzLT5sYWJlbFskbmFtZV1bJ2hlaWdodCddID4gMCkgew0KICAgICAgICAgICAgICAgICRjc3NUZXh0IC49ICdoZWlnaHQ6JyAuICR0aGlzLT5sYWJlbFskbmFtZV1bJ2hlaWdodCddIC4gJ3B4Oyc7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkY3NzVGV4dCAuPSAndGV4dEFsaWduOicgLiAkdGhpcy0+bGFiZWxbJG5hbWVdWydhbGlnbiddIC4nOyc7DQoNCiAgICAgICAgICAgICRiYXIgLj0gJHRoaXMtPl9jaGFuZ2VFbGVtZW50U3R5bGUoJ3BsYmwnLCAkbmFtZSwgJGNzc1RleHQpOw0KICAgICAgICB9DQoNCiAgICAgICAgZWNobyAkYmFyIC4gUEhQX0VPTDsNCiAgICAgICAgb2Jfc3RhcnQoKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBDaGFuZ2VzIG5ldyBzdGVwIHZhbHVlIG9mIHRoZSBwcm9ncmVzcyBiYXIuDQogICAgICoNCiAgICAgKiBAcGFyYW0gICAgICBpbnRlZ2VyICAgJHN0ZXAgICAgICAgICAgbmV3IHN0ZXAgdmFsdWUNCiAgICAgKg0KICAgICAqIEByZXR1cm4gICAgIHZvaWQNCiAgICAgKiBAc2luY2UgICAgICAyLjAuMA0KICAgICAqIEBhY2Nlc3MgICAgIHB1YmxpYw0KICAgICAqLw0KICAgIGZ1bmN0aW9uIG1vdmVTdGVwKCRzdGVwKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9zZXRTdGVwKCRzdGVwKTsNCiAgICAgICAgJHBvc2l0aW9uID0gJHRoaXMtPl9jb21wdXRlUG9zaXRpb24oKTsNCiAgICAgICAgJGJhciA9IG9iX2dldF9jbGVhbigpOw0KDQogICAgICAgICRjc3NUZXh0ID0gJyc7DQogICAgICAgIGlmICgkdGhpcy0+ZGlyZWN0aW9uID09ICdyaWdodCcgfHwgJHRoaXMtPmRpcmVjdGlvbiA9PSAnbGVmdCcpIHsNCiAgICAgICAgICAgIGlmICgkdGhpcy0+ZGlyZWN0aW9uID09ICdsZWZ0Jykgew0KICAgICAgICAgICAgICAgICRjc3NUZXh0IC49ICdsZWZ0OicgLiAkcG9zaXRpb25bJ2xlZnQnXSAuICdweDsnOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGNzc1RleHQgLj0gJ3dpZHRoOicgLiAkcG9zaXRpb25bJ3dpZHRoJ10gLiAncHg7JzsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoJHRoaXMtPmRpcmVjdGlvbiA9PSAndXAnIHx8ICR0aGlzLT5kaXJlY3Rpb24gPT0gJ2Rvd24nKSB7DQogICAgICAgICAgICBpZiAoJHRoaXMtPmRpcmVjdGlvbiA9PSAndXAnKSB7DQogICAgICAgICAgICAgICAgJGNzc1RleHQgLj0gJ3RvcDonIC4gJHBvc2l0aW9uWyd0b3AnXSAuICdweDsnOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGNzc1RleHQgLj0gJ2hlaWdodDonIC4gJHBvc2l0aW9uWydoZWlnaHQnXSAuICdweDsnOw0KICAgICAgICB9DQogICAgICAgICRiYXIgLj0gJHRoaXMtPl9jaGFuZ2VFbGVtZW50U3R5bGUoJ3BiYXInLCAnJywgJGNzc1RleHQpOw0KDQogICAgICAgIGZvcmVhY2goJHRoaXMtPmxhYmVsIGFzICRuYW1lID0+ICRkYXRhKSB7DQogICAgICAgICAgICBzd2l0Y2goJGRhdGFbJ3R5cGUnXSkgew0KICAgICAgICAgICAgY2FzZSAnc3RlcCc6DQogICAgICAgICAgICAgICAgJGJhciAuPSAkdGhpcy0+X2NoYW5nZUxhYmVsVGV4dCgkbmFtZSwgJHRoaXMtPl9zdGVwLicvJy4kdGhpcy0+bWF4KTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ3BlcmNlbnQnOg0KICAgICAgICAgICAgICAgICRiYXIgLj0gJHRoaXMtPl9jaGFuZ2VMYWJlbFRleHQoJG5hbWUsICR0aGlzLT5fY29tcHV0ZVBlcmNlbnQoKSAuICclJyk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdjcm9zc2Jhcic6DQogICAgICAgICAgICAgICAgJGJhciAuPSAkdGhpcy0+X2NoYW5nZUNyb3NzSXRlbSgkbmFtZSk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBlY2hvICRiYXIgLiBQSFBfRU9MOw0KICAgICAgICBvYl9zdGFydCgpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIENoYW5nZXMgdmFsdWUgb2YgdGhlIHByb2dyZXNzIGJhciB0byB0aGUgbmV4dCBzdGVwLg0KICAgICAqDQogICAgICogQHJldHVybiAgICAgdm9pZA0KICAgICAqIEBzaW5jZSAgICAgIDIuMC4wDQogICAgICogQGFjY2VzcyAgICAgcHVibGljDQogICAgICogQHNlZSAgICAgICAgbW92ZVN0ZXAoKQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIG1vdmVOZXh0KCkNCiAgICB7DQogICAgICAgICR0aGlzLT5tb3ZlU3RlcCgkdGhpcy0+X3N0ZXAgKyAxKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBDaGFuZ2VzIHZhbHVlIG9mIHRoZSBwcm9ncmVzcyBiYXIgdG8gdGhlIG1pbmltdW0gc3RlcC4NCiAgICAgKg0KICAgICAqIEByZXR1cm4gICAgIHZvaWQNCiAgICAgKiBAc2luY2UgICAgICAyLjAuMA0KICAgICAqIEBhY2Nlc3MgICAgIHB1YmxpYw0KICAgICAqIEBzZWUgICAgICAgIG1vdmVTdGVwKCkNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBtb3ZlTWluKCkNCiAgICB7DQogICAgICAgICR0aGlzLT5tb3ZlU3RlcCgkdGhpcy0+bWluKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBSZXR1cm5zIHRoZSBwcm9ncmVzcyBiYXIgc3RydWN0dXJlIGFzIEhUTUwuDQogICAgICoNCiAgICAgKiBAcmV0dXJuICAgICBzdHJpbmcNCiAgICAgKiBAc2luY2UgICAgICAyLjAuMA0KICAgICAqIEBhY2Nlc3MgICAgIHB1YmxpYw0KICAgICAqIEBzZWUgICAgICAgIGRpc3BsYXkoKQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHRvSHRtbCgpDQogICAgew0KICAgICAgICAkaHRtbCA9ICcnOw0KICAgICAgICAkanMgPSAnJzsNCg0KICAgICAgICAvLyR0aGlzLT5fc2V0U3RlcCgkdGhpcy0+X3N0ZXApOw0KICAgICAgICAkcG9zaXRpb24gPSAkdGhpcy0+X2NvbXB1dGVQb3NpdGlvbigpOw0KDQogICAgICAgICRzdHlsZV9icmQgPSAncG9zaXRpb246YWJzb2x1dGU7Jw0KICAgICAgICAgICAgICAgICAgIC4gJ3RvcDonIC4gJHRoaXMtPnRvcCAuICdweDsnDQogICAgICAgICAgICAgICAgICAgLiAnbGVmdDonIC4gJHRoaXMtPmxlZnQgLiAncHg7Jw0KICAgICAgICAgICAgICAgICAgIC4gJ3dpZHRoOicgLiAkdGhpcy0+d2lkdGggLiAncHg7Jw0KICAgICAgICAgICAgICAgICAgIC4gJ2hlaWdodDonIC4gJHRoaXMtPmhlaWdodCAuICdweDsnDQogICAgICAgICAgICAgICAgICAgLiAnYmFja2dyb3VuZC1jb2xvcjonIC4gJHRoaXMtPmJhY2tncm91bmRfY29sb3IgLiAnOyc7DQoNCiAgICAgICAgaWYgKCR0aGlzLT5ib3JkZXJbJ3dpZHRoJ10gPiAwICkgew0KICAgICAgICAgICAgJHN0eWxlX2JyZCAuPSAnYm9yZGVyLXdpZHRoOicgLiAkdGhpcy0+Ym9yZGVyWyd3aWR0aCddIC4gJ3B4OycNCiAgICAgICAgICAgICAgICAgICAgICAgLiAgJ2JvcmRlci1zdHlsZTonIC4gJHRoaXMtPmJvcmRlclsnc3R5bGUnXSAuICc7Jw0KICAgICAgICAgICAgICAgICAgICAgICAuICAnYm9yZGVyLWNvbG9yOicgLiAkdGhpcy0+Ym9yZGVyWydjb2xvciddIC4gJzsnOw0KICAgICAgICB9DQogICAgICAgICRzdHlsZV9iYXIgPSAncG9zaXRpb246YWJzb2x1dGU7Jw0KICAgICAgICAgICAgICAgICAgIC4gJ3RvcDonIC4gJHBvc2l0aW9uWyd0b3AnXSAuICdweDsnDQogICAgICAgICAgICAgICAgICAgLiAnbGVmdDonIC4gJHBvc2l0aW9uWydsZWZ0J10gLiAncHg7Jw0KICAgICAgICAgICAgICAgICAgIC4gJ3dpZHRoOicgLiAkcG9zaXRpb25bJ3dpZHRoJ10gLiAncHg7Jw0KICAgICAgICAgICAgICAgICAgIC4gJ2hlaWdodDonIC4gJHBvc2l0aW9uWydoZWlnaHQnXSAuICdweDsnDQogICAgICAgICAgICAgICAgICAgLiAnYmFja2dyb3VuZC1jb2xvcjonIC4gJHRoaXMtPmZvcmVncm91bmRfY29sb3IgLiAnOyc7DQoNCiAgICAgICAgaWYgKCR0aGlzLT5mcmFtZVsnc2hvdyddKSB7DQogICAgICAgICAgICBpZiAoJHRoaXMtPmZyYW1lWydib3JkZXItd2lkdGgnXSA+IDApIHsNCiAgICAgICAgICAgICAgICAkYm9yZGVyID0gJ2JvcmRlci13aWR0aDonIC4gJHRoaXMtPmZyYW1lWydib3JkZXItd2lkdGgnXSAuICdweDsnDQogICAgICAgICAgICAgICAgICAgICAgICAuICdib3JkZXItc3R5bGU6JyAuICR0aGlzLT5mcmFtZVsnYm9yZGVyLXN0eWxlJ10gLiAnOycNCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJ2JvcmRlci1jb2xvcjonIC4gJHRoaXMtPmZyYW1lWydib3JkZXItY29sb3InXSAuICc7JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkdGhpcy0+cG9zaXRpb24gPT0gJ3JlbGF0aXZlJykgew0KICAgICAgICAgICAgICAgICRodG1sID0gJzxkaXYgaWQ9InRmcm0nIC4gJHRoaXMtPl9pZGVudCAuICciJw0KICAgICAgICAgICAgICAgICAgICAgIC4gJyBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7dG9wOjA7bGVmdDowOyI+Jw0KICAgICAgICAgICAgICAgICAgICAgIC4gUEhQX0VPTDsNCiAgICAgICAgICAgICAgICAkdG9wID0gJGxlZnQgPSAwOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkdG9wID0gJHRoaXMtPmZyYW1lWyd0b3AnXTsNCiAgICAgICAgICAgICAgICAkbGVmdCA9ICR0aGlzLT5mcmFtZVsnbGVmdCddOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGh0bWwgLj0gJzxkaXYgaWQ9InBmcm0nIC4gJHRoaXMtPl9pZGVudCAuJyIgc3R5bGU9IicNCiAgICAgICAgICAgICAgICAgIC4gICdwb3NpdGlvbjphYnNvbHV0ZTsnDQogICAgICAgICAgICAgICAgICAuICAndG9wOicgLiAkdG9wIC4gJ3B4OycNCiAgICAgICAgICAgICAgICAgIC4gICdsZWZ0OicgLiAkbGVmdCAuICdweDsnDQogICAgICAgICAgICAgICAgICAuICAnd2lkdGg6JyAuICR0aGlzLT5mcmFtZVsnd2lkdGgnXSAuICdweDsnDQogICAgICAgICAgICAgICAgICAuICAnaGVpZ2h0OicgLiAkdGhpcy0+ZnJhbWVbJ2hlaWdodCddIC4gJ3B4OycNCiAgICAgICAgICAgICAgICAgIC4gICRib3JkZXINCiAgICAgICAgICAgICAgICAgIC4gICdiYWNrZ3JvdW5kLWNvbG9yOicgLiAkdGhpcy0+ZnJhbWVbJ2NvbG9yJ10gLiAnOyI+Jw0KICAgICAgICAgICAgICAgICAgLiAgUEhQX0VPTDsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGlmICgkdGhpcy0+cG9zaXRpb24gPT0gJ3JlbGF0aXZlJykgew0KICAgICAgICAgICAgICAgICRodG1sID0gJzxkaXYgaWQ9InRmcm0nIC4gJHRoaXMtPl9pZGVudCAuICciJw0KICAgICAgICAgICAgICAgICAgICAgIC4gJyBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7dG9wOjA7bGVmdDowOyI+Jw0KICAgICAgICAgICAgICAgICAgICAgIC4gUEhQX0VPTDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgICRodG1sIC49ICc8ZGl2IGlkPSJwYnJkJy4kdGhpcy0+X2lkZW50LiciIHN0eWxlPSInLiRzdHlsZV9icmQuJyI+Jy5QSFBfRU9MOw0KICAgICAgICAkaHRtbCAuPSAnPGRpdiBpZD0icGJhcicuJHRoaXMtPl9pZGVudC4nIiBzdHlsZT0iJy4kc3R5bGVfYmFyLiciPjwvZGl2PjwvZGl2PicuUEhQX0VPTDsNCg0KICAgICAgICBmb3JlYWNoICgkdGhpcy0+bGFiZWwgYXMgJG5hbWUgPT4gJGRhdGEpIHsNCiAgICAgICAgICAgICRzdHlsZV9sYmwgPSAncG9zaXRpb246YWJzb2x1dGU7Jw0KICAgICAgICAgICAgICAgICAgICAgICAuICd0b3A6JyAuICRkYXRhWyd0b3AnXSAuICdweDsnDQogICAgICAgICAgICAgICAgICAgICAgIC4gJ2xlZnQ6JyAuICRkYXRhWydsZWZ0J10gLiAncHg7Jw0KICAgICAgICAgICAgICAgICAgICAgICAuICd0ZXh0LWFsaWduOicgLiAkZGF0YVsnYWxpZ24nXSAuICc7JzsNCg0KICAgICAgICAgICAgaWYgKCRkYXRhWyd3aWR0aCddID4gMCkgew0KICAgICAgICAgICAgICAgICRzdHlsZV9sYmwgLj0gJ3dpZHRoOicgLiAkZGF0YVsnd2lkdGgnXSAuICdweDsnOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRkYXRhWydoZWlnaHQnXSA+IDApIHsNCiAgICAgICAgICAgICAgICAkc3R5bGVfbGJsIC49ICdoZWlnaHQ6JyAuICRkYXRhWydoZWlnaHQnXSAuICdweDsnOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHN0eWxlX2xibCAuPSAnY29sb3I6JyAuICRkYXRhWydjb2xvciddIC4nOycNCiAgICAgICAgICAgICAgICAgICAgICAgLiAgJ2ZvbnQtc2l6ZTonIC4gJGRhdGFbJ2ZvbnQtc2l6ZSddIC4gJ3B4OycNCiAgICAgICAgICAgICAgICAgICAgICAgLiAgJ2ZvbnQtZmFtaWx5OicgLiAkZGF0YVsnZm9udC1mYW1pbHknXSAuICc7Jw0KICAgICAgICAgICAgICAgICAgICAgICAuICAnZm9udC13ZWlnaHQ6JyAuICRkYXRhWydmb250LXdlaWdodCddIC4gJzsnOw0KDQogICAgICAgICAgICBpZiAoJGRhdGFbJ2JhY2tncm91bmQtY29sb3InXSAhPSAnJykgew0KICAgICAgICAgICAgICAgICRzdHlsZV9sYmwgLj0gJ2JhY2tncm91bmQtY29sb3I6JyAuICRkYXRhWydiYWNrZ3JvdW5kLWNvbG9yJ10gLiAnOyc7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHN3aXRjaCgkZGF0YVsndHlwZSddKSB7DQogICAgICAgICAgICBjYXNlICdidXR0b24nOg0KICAgICAgICAgICAgICAgICRodG1sIC49ICc8ZGl2PjxpbnB1dCBpZD0icGxibCcgLiAkbmFtZSAuICR0aGlzLT5faWRlbnQNCiAgICAgICAgICAgICAgICAgICAgICAuICAnIiB0eXBlPSJidXR0b24iIHZhbHVlPSInIC4gJGRhdGFbJ3ZhbHVlJ10NCiAgICAgICAgICAgICAgICAgICAgICAuICAnIiBzdHlsZT0iJyAuICRzdHlsZV9sYmwNCiAgICAgICAgICAgICAgICAgICAgICAuICAnIiBvbmNsaWNrPSInIC4gJGRhdGFbJ3RhcmdldCddDQogICAgICAgICAgICAgICAgICAgICAgLiAgJy5sb2NhdGlvbi5ocmVmPVwnJyAuICRkYXRhWydhY3Rpb24nXSAuICdcJyIgLz48L2Rpdj4nDQogICAgICAgICAgICAgICAgICAgICAgLiAgUEhQX0VPTDsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ3N0ZXAnOg0KICAgICAgICAgICAgICAgICRodG1sIC49ICc8ZGl2IGlkPSJwbGJsJyAuICRuYW1lIC4gJHRoaXMtPl9pZGVudA0KICAgICAgICAgICAgICAgICAgICAgIC4gICciIHN0eWxlPSInIC4gJHN0eWxlX2xibCAuICciPicNCiAgICAgICAgICAgICAgICAgICAgICAuICAkdGhpcy0+X3N0ZXANCiAgICAgICAgICAgICAgICAgICAgICAuICAnPC9kaXY+Jw0KICAgICAgICAgICAgICAgICAgICAgIC4gIFBIUF9FT0w7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdwZXJjZW50JzoNCiAgICAgICAgICAgICAgICAkaHRtbCAuPSAnPGRpdiBpZD0icGxibCcgLiAkbmFtZSAuICR0aGlzLT5faWRlbnQNCiAgICAgICAgICAgICAgICAgICAgICAuICAnIiBzdHlsZT0iJyAuICRzdHlsZV9sYmwgLiAnIj4nDQogICAgICAgICAgICAgICAgICAgICAgLiAgJHRoaXMtPl9jb21wdXRlUGVyY2VudCgpIC4gJyUnDQogICAgICAgICAgICAgICAgICAgICAgLiAgJzwvZGl2PicNCiAgICAgICAgICAgICAgICAgICAgICAuICBQSFBfRU9MOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAndGV4dCc6DQogICAgICAgICAgICBjYXNlICdjcm9zc2Jhcic6DQogICAgICAgICAgICAgICAgJGh0bWwgLj0gJzxkaXYgaWQ9InBsYmwnIC4gJG5hbWUgLiAkdGhpcy0+X2lkZW50DQogICAgICAgICAgICAgICAgICAgICAgLiAgJyIgc3R5bGU9IicgLiAkc3R5bGVfbGJsIC4gJyI+Jw0KICAgICAgICAgICAgICAgICAgICAgIC4gICRkYXRhWyd2YWx1ZSddDQogICAgICAgICAgICAgICAgICAgICAgLiAgJzwvZGl2PicNCiAgICAgICAgICAgICAgICAgICAgICAuICBQSFBfRU9MOw0KICAgICAgICAgICAgICAgIGlmICgkZGF0YVsndHlwZSddID09ICdjcm9zc2JhcicpIHsNCiAgICAgICAgICAgICAgICAgICAgJGpzIC49ICdmdW5jdGlvbiBzZXRSb3RhcnlDcm9zcycuJG5hbWUuJHRoaXMtPl9pZGVudC4nKCkgeycuUEhQX0VPTDsNCiAgICAgICAgICAgICAgICAgICAgJGpzIC49ICcgY3Jvc3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGxibCcuJG5hbWUuJHRoaXMtPl9pZGVudC4nIikuZmlyc3RDaGlsZC5ub2RlVmFsdWU7Jy5QSFBfRU9MOw0KICAgICAgICAgICAgICAgICAgICAkanMgLj0gJyBzd2l0Y2goY3Jvc3MpIHsnLlBIUF9FT0w7DQogICAgICAgICAgICAgICAgICAgICRqcyAuPSAnICBjYXNlICItLSI6IGNyb3NzID0gIlxcXFwiOyBicmVhazsnLlBIUF9FT0w7DQogICAgICAgICAgICAgICAgICAgICRqcyAuPSAnICBjYXNlICJcXFxcIjogY3Jvc3MgPSAifCI7IGJyZWFrOycuUEhQX0VPTDsNCiAgICAgICAgICAgICAgICAgICAgJGpzIC49ICcgIGNhc2UgInwiOiBjcm9zcyA9ICIvIjsgYnJlYWs7Jy5QSFBfRU9MOw0KICAgICAgICAgICAgICAgICAgICAkanMgLj0gJyAgZGVmYXVsdDogY3Jvc3MgPSAiLS0iOyBicmVhazsnLlBIUF9FT0w7DQogICAgICAgICAgICAgICAgICAgICRqcyAuPSAnIH0nLlBIUF9FT0w7DQogICAgICAgICAgICAgICAgICAgICRqcyAuPSAnIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwbGJsJy4kbmFtZS4kdGhpcy0+X2lkZW50LiciKS5maXJzdENoaWxkLm5vZGVWYWx1ZSA9IGNyb3NzOycuUEhQX0VPTDsNCiAgICAgICAgICAgICAgICAgICAgJGpzIC49ICd9Jy5QSFBfRU9MOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChjb3VudCgkdGhpcy0+bGFiZWwpID4gMCkgew0KICAgICAgICAgICAgJGpzIC49ICdmdW5jdGlvbiBzZXRMYWJlbFRleHQnLiR0aGlzLT5faWRlbnQuJyhuYW1lLHRleHQpIHsnLlBIUF9FT0w7DQogICAgICAgICAgICAkanMgLj0gJyBuYW1lID0gInBsYmwiICsgbmFtZSArICInLiR0aGlzLT5faWRlbnQuJyI7Jy5QSFBfRU9MOw0KICAgICAgICAgICAgJGpzIC49ICcgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobmFtZSkuZmlyc3RDaGlsZC5ub2RlVmFsdWU9dGV4dDsnLlBIUF9FT0w7DQogICAgICAgICAgICAkanMgLj0gJ30nLlBIUF9FT0w7DQogICAgICAgIH0NCg0KICAgICAgICAkanMgLj0gJ2Z1bmN0aW9uIHNldEVsZW1lbnRTdHlsZScuJHRoaXMtPl9pZGVudC4nKHByZWZpeCxuYW1lLHN0eWxlcykgeycuUEhQX0VPTDsNCiAgICAgICAgJGpzIC49ICcgbmFtZSA9IHByZWZpeCArIG5hbWUgKyAiJy4kdGhpcy0+X2lkZW50LiciOycuUEhQX0VPTDsNCiAgICAgICAgJGpzIC49ICcgc3R5bGVzID0gc3R5bGVzLnNwbGl0KCI7Iik7Jy5QSFBfRU9MOw0KICAgICAgICAkanMgLj0gJyBzdHlsZXMucG9wKCk7Jy5QSFBfRU9MOw0KICAgICAgICAkanMgLj0gJyBmb3IodmFyIGk9MDsgaTxzdHlsZXMubGVuZ3RoOyBpKyspJy5QSFBfRU9MOw0KICAgICAgICAkanMgLj0gJyB7Jy5QSFBfRU9MOw0KICAgICAgICAkanMgLj0gJyAgIHMgPSBzdHlsZXNbaV0uc3BsaXQoIjoiKTsnLlBIUF9FT0w7DQogICAgICAgICRqcyAuPSAnICAgYyA9ICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuYW1lKS5zdHlsZS4iK3NbMF0rIj1cIiIrc1sxXSsiXCIiOycuUEhQX0VPTDsNCiAgICAgICAgJGpzIC49ICcgICBldmFsKGMpOycuUEhQX0VPTDsNCiAgICAgICAgJGpzIC49ICcgfScuUEhQX0VPTDsNCiAgICAgICAgJGpzIC49ICd9Jy5QSFBfRU9MOw0KDQogICAgICAgIGlmICgkdGhpcy0+ZnJhbWVbJ3Nob3cnXSkgew0KICAgICAgICAgICAgJGh0bWwgLj0gJzwvZGl2PicuUEhQX0VPTDsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoJHRoaXMtPnBvc2l0aW9uID09ICdyZWxhdGl2ZScpIHsNCiAgICAgICAgICAgICRodG1sIC49ICc8L2Rpdj4nLlBIUF9FT0w7DQogICAgICAgIH0NCg0KICAgICAgICAkaHRtbCAuPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L0phdmFTY3JpcHQiPicuUEhQX0VPTDsNCiAgICAgICAgJGh0bWwgLj0gJGpzOw0KICAgICAgICAkaHRtbCAuPSAnPC9zY3JpcHQ+Jy5QSFBfRU9MOw0KDQogICAgICAgIHJldHVybiAkaHRtbDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTaG93IHRoZSByZW5kZXJzIG9mIHRoZSBwcm9ncmVzcyBiYXIuDQogICAgICoNCiAgICAgKiBAcmV0dXJuICAgICB2b2lkDQogICAgICogQHNpbmNlICAgICAgMi4wLjANCiAgICAgKiBAYWNjZXNzICAgICBwdWJsaWMNCiAgICAgKiBAc2VlICAgICAgICB0b0h0bWwoKQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGRpc3BsYXkoKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9zdGF0dXMgPSAnc2hvdyc7DQogICAgICAgIGVjaG8gJHRoaXMtPnRvSHRtbCgpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEhpZGVzIHRoZSBwcm9ncmVzcyBiYXIuDQogICAgICoNCiAgICAgKiBAcmV0dXJuICAgICB2b2lkDQogICAgICogQHNpbmNlICAgICAgMi4wLjANCiAgICAgKiBAYWNjZXNzICAgICBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBoaWRlKCkNCiAgICB7DQogICAgICAgIGlmICgkdGhpcy0+X3N0YXR1cz09J3Nob3cnKSB7DQogICAgICAgICAgICAkdGhpcy0+X3N0YXR1cyA9ICdoaWRlJzsNCiAgICAgICAgICAgICR0aGlzLT5faGlkZSgpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU2hvd3MgYSBwcm9ncmVzcyBiYXIgaGlkZGVuLg0KICAgICAqDQogICAgICogQHJldHVybiAgICAgdm9pZA0KICAgICAqIEBzaW5jZSAgICAgIDIuMC4wDQogICAgICogQGFjY2VzcyAgICAgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gc2hvdygpDQogICAgew0KICAgICAgICBpZiAoJHRoaXMtPl9zdGF0dXM9PSdoaWRlJykgew0KICAgICAgICAgICAgJHRoaXMtPl9zdGF0dXMgPSAnc2hvdyc7DQogICAgICAgICAgICAkdGhpcy0+X2hpZGUoKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFNob3cgb3IgSGlkZSBhIHByb2dyZXNzIGJhciBkZXBlbmRpbmcgb2YgaXRzIGN1cnJlbnQgc3RhdHVzLg0KICAgICAqDQogICAgICogQHJldHVybiAgICAgdm9pZA0KICAgICAqIEBzaW5jZSAgICAgIDIuMC4wDQogICAgICogQGFjY2VzcyAgICAgcHJpdmF0ZQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIF9oaWRlKCkNCiAgICB7DQogICAgICAgIGlmICgkdGhpcy0+X3N0YXR1cyA9PSAnaGlkZScpIHsNCiAgICAgICAgICAgICRjc3NUZXh0ID0gJ3Zpc2liaWxpdHk6aGlkZGVuOyc7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkY3NzVGV4dCA9ICd2aXNpYmlsaXR5OnZpc2libGU7JzsNCiAgICB9DQogICAgICAgICRiYXIgID0gb2JfZ2V0X2NsZWFuKCk7DQoNCiAgICAgICAgJGJhciAuPSAkdGhpcy0+X2NoYW5nZUVsZW1lbnRTdHlsZSgncGJyZCcsICcnLCAkY3NzVGV4dCk7DQogICAgICAgICRiYXIgLj0gJHRoaXMtPl9jaGFuZ2VFbGVtZW50U3R5bGUoJ3BiYXInLCAnJywgJGNzc1RleHQpOw0KDQogICAgICAgIGlmICgkdGhpcy0+ZnJhbWVbJ3Nob3cnXSkgew0KICAgICAgICAgICAgJGJhciAuPSAkdGhpcy0+X2NoYW5nZUVsZW1lbnRTdHlsZSgncGZybScsICcnLCAkY3NzVGV4dCk7DQogICAgICAgIH0NCiAgICAgICAgZm9yZWFjaCgkdGhpcy0+bGFiZWwgYXMgJG5hbWUgPT4gJGRhdGEpIHsNCiAgICAgICAgICAgICRiYXIgLj0gJHRoaXMtPl9jaGFuZ2VFbGVtZW50U3R5bGUoJ3BsYmwnLCAkbmFtZSwgJGNzc1RleHQpOw0KICAgICAgICB9DQoNCiAgICAgICAgZWNobyAkYmFyIC4gUEhQX0VPTDsNCiAgICAgICAgb2Jfc3RhcnQoKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBDYWxjdWxhdGUgdGhlIGN1cnJlbnQgcGVyY2VudCBvZiBwcm9ncmVzcy4NCiAgICAgKg0KICAgICAqIEByZXR1cm4gICAgIGludGVnZXINCiAgICAgKiBAc2luY2UgICAgICAyLjAuMA0KICAgICAqIEBhY2Nlc3MgICAgIHByaXZhdGUNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBfY29tcHV0ZVBlcmNlbnQoKQ0KICAgIHsNCiAgICAgICAgJHBlcmNlbnQgPSByb3VuZCgoJHRoaXMtPl9zdGVwIC0gJHRoaXMtPm1pbikgLyAoJHRoaXMtPm1heCAtICR0aGlzLT5taW4pICogMTAwKTsNCiAgICAgICAgaWYgKCRwZXJjZW50ID4gMTAwKSB7DQogICAgICAgICAgICAkcGVyY2VudCA9IDEwMDsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gJHBlcmNlbnQ7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQ2FsY3VsYXRlIHRoZSBuZXcgcG9zaXRpb24gaW4gcGl4ZWwgb2YgdGhlIHByb2dyZXNzIGJhciB2YWx1ZS4NCiAgICAgKg0KICAgICAqIEByZXR1cm4gICAgIHZvaWQNCiAgICAgKiBAc2luY2UgICAgICAyLjAuMA0KICAgICAqIEBhY2Nlc3MgICAgIHByaXZhdGUNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBfY29tcHV0ZVBvc2l0aW9uKCkNCiAgICB7DQogICAgICAgIHN3aXRjaCAoJHRoaXMtPmRpcmVjdGlvbikgew0KICAgICAgICBjYXNlICdyaWdodCc6DQogICAgICAgIGNhc2UgJ2xlZnQnOg0KICAgICAgICAgICAgJGJhciA9ICR0aGlzLT53aWR0aDsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICdkb3duJzoNCiAgICAgICAgY2FzZSAndXAnOg0KICAgICAgICAgICAgJGJhciA9ICR0aGlzLT5oZWlnaHQ7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgICAgICAkcGl4ZWwgPSByb3VuZCggICgkdGhpcy0+X3N0ZXAgLSAkdGhpcy0+bWluKSAqICgkYmFyIC0gKCR0aGlzLT5wYWRkaW5nICogMikpDQogICAgICAgICAgICAgICAgICAgICAgIC8gKCR0aGlzLT5tYXggLSAkdGhpcy0+bWluKSApOw0KICAgICAgICBpZiAoJHRoaXMtPl9zdGVwIDw9ICR0aGlzLT5taW4pIHsNCiAgICAgICAgICAgICRwaXhlbCA9IDA7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCR0aGlzLT5fc3RlcCA+PSAkdGhpcy0+bWF4KSB7DQogICAgICAgICAgICAkcGl4ZWwgPSAkYmFyIC0gKCR0aGlzLT5wYWRkaW5nICogMik7DQogICAgICAgIH0NCg0KICAgICAgICBzd2l0Y2ggKCR0aGlzLT5kaXJlY3Rpb24pIHsNCiAgICAgICAgY2FzZSAncmlnaHQnOg0KICAgICAgICAgICAgJHBvc2l0aW9uWydsZWZ0J10gPSAkdGhpcy0+cGFkZGluZzsNCiAgICAgICAgICAgICRwb3NpdGlvblsndG9wJ10gPSAkdGhpcy0+cGFkZGluZzsNCiAgICAgICAgICAgICRwb3NpdGlvblsnd2lkdGgnXSA9ICRwaXhlbDsNCiAgICAgICAgICAgICRwb3NpdGlvblsnaGVpZ2h0J10gPSAkdGhpcy0+aGVpZ2h0IC0gKCR0aGlzLT5wYWRkaW5nICogMik7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAnbGVmdCc6DQogICAgICAgICAgICAkcG9zaXRpb25bJ2xlZnQnXSA9ICR0aGlzLT53aWR0aCAtICR0aGlzLT5wYWRkaW5nIC0gJHBpeGVsOw0KICAgICAgICAgICAgJHBvc2l0aW9uWyd0b3AnXSA9ICR0aGlzLT5wYWRkaW5nOw0KICAgICAgICAgICAgJHBvc2l0aW9uWyd3aWR0aCddID0gJHBpeGVsOw0KICAgICAgICAgICAgJHBvc2l0aW9uWydoZWlnaHQnXSA9ICR0aGlzLT5oZWlnaHQgLSAoJHRoaXMtPnBhZGRpbmcgKiAyKTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICdkb3duJzoNCiAgICAgICAgICAgICRwb3NpdGlvblsnbGVmdCddID0gJHRoaXMtPnBhZGRpbmc7DQogICAgICAgICAgICAkcG9zaXRpb25bJ3RvcCddID0gJHRoaXMtPnBhZGRpbmc7DQogICAgICAgICAgICAkcG9zaXRpb25bJ3dpZHRoJ10gPSAkdGhpcy0+d2lkdGggLSAoJHRoaXMtPnBhZGRpbmcgKiAyKTsNCiAgICAgICAgICAgICRwb3NpdGlvblsnaGVpZ2h0J10gPSAkcGl4ZWw7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAndXAnOg0KICAgICAgICAgICAgJHBvc2l0aW9uWydsZWZ0J10gPSAkdGhpcy0+cGFkZGluZzsNCiAgICAgICAgICAgICRwb3NpdGlvblsndG9wJ10gPSAkdGhpcy0+aGVpZ2h0IC0gJHRoaXMtPnBhZGRpbmcgLSAkcGl4ZWw7DQogICAgICAgICAgICAkcG9zaXRpb25bJ3dpZHRoJ10gPSAkdGhpcy0+d2lkdGggLSAoJHRoaXMtPnBhZGRpbmcgKiAyKTsNCiAgICAgICAgICAgICRwb3NpdGlvblsnaGVpZ2h0J10gPSAkcGl4ZWw7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gJHBvc2l0aW9uOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFNldHMgdGhlIG5ldyBzdGVwIHZhbHVlIG9mIHRoZSBwcm9ncmVzcyBiYXIuDQogICAgICoNCiAgICAgKiBAcGFyYW0gICAgICBpbnRlZ2VyICAgJHN0ZXAgICAgICAgICAgbmV3IHN0ZXAgdmFsdWUNCiAgICAgKg0KICAgICAqIEByZXR1cm4gICAgIHZvaWQNCiAgICAgKiBAc2luY2UgICAgICAyLjAuMA0KICAgICAqIEBhY2Nlc3MgICAgIHByaXZhdGUNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBfc2V0U3RlcCgkc3RlcCkNCiAgICB7DQogICAgICAgIGlmKCRzdGVwID4gJHRoaXMtPm1heCkgew0KICAgICAgICAgICAgJHN0ZXAgPSAkdGhpcy0+bWF4Ow0KICAgICAgICB9DQogICAgICAgIGlmKCRzdGVwIDwgJHRoaXMtPm1pbikgew0KICAgICAgICAgICAgJHN0ZXAgPSAkdGhpcy0+bWluOw0KICAgICAgICB9DQogICAgICAgICR0aGlzLT5fc3RlcCA9ICRzdGVwOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFNlbmRzIGEgRE9NIGNvbW1hbmQgKGVtdWxhdGUgY3NzVGV4dCBhdHRyaWJ1dGUpIHRocm91Z2ggYSBqYXZhc2NyaXB0IGZ1bmN0aW9uDQogICAgICogdG8gY2hhbmdlIHN0eWxlcyBvZiBhIHByb2dyZXNzIGJhcidzIGVsZW1lbnQuDQogICAgICoNCiAgICAgKiBAcGFyYW0gICAgICBzdHJpbmcgICAgJHByZWZpeCAgICAgICAgcHJlZml4IGlkZW50aWZpZXIgb2YgdGhlIGVsZW1lbnQNCiAgICAgKiBAcGFyYW0gICAgICBzdHJpbmcgICAgJGVsZW1lbnQgICAgICAgZWxlbWVudCBuYW1lIChsYWJlbCBpZC4pDQogICAgICogQHBhcmFtICAgICAgc3RyaW5nICAgICRzdHlsZXMgICAgICAgIHN0eWxlcyBvZiBhIERPTSBlbGVtZW50DQogICAgICoNCiAgICAgKiBAcmV0dXJuICAgICBzdHJpbmcNCiAgICAgKiBAc2luY2UgICAgICAyLjAuMA0KICAgICAqIEBhY2Nlc3MgICAgIHByaXZhdGUNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBfY2hhbmdlRWxlbWVudFN0eWxlKCRwcmVmaXgsICRlbGVtZW50LCAkc3R5bGVzKQ0KICAgIHsNCiAgICAgICAgJGNtZCA9ICc8c2NyaXB0IHR5cGU9InRleHQvSmF2YVNjcmlwdCI+Jw0KICAgICAgICAgICAgIC4gJ3NldEVsZW1lbnRTdHlsZScgLiAkdGhpcy0+X2lkZW50DQogICAgICAgICAgICAgLiAnKCInIC4gJHByZWZpeCAuICciLCInIC4gJGVsZW1lbnQgLiAnIiwiJyAuICRzdHlsZXMgLiAnIik7Jw0KICAgICAgICAgICAgIC4gJzwvc2NyaXB0Pic7DQoNCiAgICAgICAgcmV0dXJuICRjbWQ7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU2VuZHMgYSBET00gY29tbWFuZCAoZW11bGF0ZSBmaXJzdENoaWxkLm5vZGVWYWx1ZSkgdGhyb3VnaCBhIGphdmFzY3JpcHQgZnVuY3Rpb24NCiAgICAgKiB0byBjaGFuZ2UgbGFiZWwgdmFsdWUgb2YgYSBwcm9ncmVzcyBiYXIncyBlbGVtZW50Lg0KICAgICAqDQogICAgICogQHBhcmFtICAgICAgc3RyaW5nICAgICRlbGVtZW50ICAgICAgIGVsZW1lbnQgbmFtZSAobGFiZWwgaWQuKQ0KICAgICAqIEBwYXJhbSAgICAgIHN0cmluZyAgICAkdGV4dCAgICAgICAgICBlbGVtZW50IHZhbHVlIChsYWJlbCBjb250ZW50KQ0KICAgICAqDQogICAgICogQHJldHVybiAgICAgc3RyaW5nDQogICAgICogQHNpbmNlICAgICAgMi4wLjANCiAgICAgKiBAYWNjZXNzICAgICBwcml2YXRlDQogICAgICovDQogICAgZnVuY3Rpb24gX2NoYW5nZUxhYmVsVGV4dCgkZWxlbWVudCwgJHRleHQpDQogICAgew0KICAgICAgICAkY21kID0gJzxzY3JpcHQgdHlwZT0idGV4dC9KYXZhU2NyaXB0Ij4nDQogICAgICAgICAgICAgLiAnc2V0TGFiZWxUZXh0JyAuICR0aGlzLT5faWRlbnQNCiAgICAgICAgICAgICAuICcoIicgLiAkZWxlbWVudCAuICciLCInIC4gJHRleHQgLiAnIik7Jw0KICAgICAgICAgICAgIC4gJzwvc2NyaXB0Pic7DQoNCiAgICAgICAgcmV0dXJuICRjbWQ7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU2VuZHMgYSBET00gY29tbWFuZCB0aHJvdWdoIGEgamF2YXNjcmlwdCBmdW5jdGlvbg0KICAgICAqIHRvIGNoYW5nZSB0aGUgbmV4dCBmcmFtZSBhbmltYXRpb24gb2YgYSBjcm9zcyBiYXIncyBlbGVtZW50Lg0KICAgICAqDQogICAgICogQHBhcmFtICAgICAgc3RyaW5nICAgICRlbGVtZW50ICAgICAgIGVsZW1lbnQgbmFtZSAoY3Jvc3MgaWQuKQ0KICAgICAqDQogICAgICogQHJldHVybiAgICAgc3RyaW5nDQogICAgICogQHNpbmNlICAgICAgMi4wLjANCiAgICAgKiBAYWNjZXNzICAgICBwcml2YXRlDQogICAgICovDQogICAgZnVuY3Rpb24gX2NoYW5nZUNyb3NzSXRlbSgkZWxlbWVudCkNCiAgICB7DQogICAgICAgICRjbWQgPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L0phdmFTY3JpcHQiPicNCiAgICAgICAgICAgICAuICdzZXRSb3RhcnlDcm9zcycgLiAkZWxlbWVudCAuICR0aGlzLT5faWRlbnQgLiAnKCk7Jw0KICAgICAgICAgICAgIC4gJzwvc2NyaXB0Pic7DQoNCiAgICAgICAgcmV0dXJuICRjbWQ7DQogICAgfQ0KfQ0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/query</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/query/class.array_query.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIEEgc2V0IG9mIGhpZ2ggbGV2ZWwgY29udmVuaWVuY2UgbWV0aG9kcy4KICoKICogQHBhY2thZ2UgICBDTVNNU0V4dAogKiBAY2F0ZWdvcnkgIFF1ZXJ5CiAqIEBhdXRob3IgICAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCgpuYW1lc3BhY2UgQ01TTVNFeHRccXVlcnk7CgovKioKICogQSBzaW1wbGUgcXVlcnkgb2JqZWN0IHRoYXQgYWNjZXB0cyBhbmQgbWFuYWdlcyBhbiBhcnJheSBvZiBwYXJhbWV0ZXJzLgogKiBPbmx5IGZvciBpbnRlcm5hbCB1c2UuCiAqCiAqIEBpbnRlcm5hbAogKi8KY2xhc3MgYXJyYXlfcXVlcnkgZXh0ZW5kcyBxdWVyeQp7CiAgLyoqCiAgICogQGlnbm9yZQogICAqLwogIHByaXZhdGUgJF9kYXRhOwogIAogIC8qKgogICAqIENvbnN0cnVjdCBhbiBhcnJheV9xdWVyeSBmcm9tIGFuIGFycmF5IG9mIGRhdGEuCiAgICoKICAgKiBAcGFyYW0gYXJyYXkgJGRhdGEgSW5wdXQgZGF0YS4KICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGRhdGEgPSBbXSkKICB7CiAgICAvLyBpbiB0aGlzIGluc3RhbmNlLCB0aGUgZGF0YSBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yIElTIHRoZSBxdWVyeSBkYXRhCiAgICBpZighaXNfYXJyYXkoJGRhdGEpKQogICAgewogICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0ludmFsaWQgZGF0YSBwYXNzZWQgdG8gJyAuIF9fTUVUSE9EX18pOwogICAgfQogICAgCiAgICAkdGhpcy0+X2RhdGEgPSAkZGF0YTsKICB9CiAgCiAgLyoqCiAgICogQGlnbm9yZQogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBPZmZzZXRHZXQoJGtleSkKICB7CiAgICByZXR1cm47IC8vIGRvIG5vdGhpbmcKICB9CiAgCiAgLyoqCiAgICogQGlnbm9yZQogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBPZmZzZXRTZXQoJGtleSwgJHZhbCkKICB7CiAgICByZXR1cm47IC8vIGRvIG5vdGhpbmcKICB9CiAgCiAgLyoqCiAgICogQGlnbm9yZQogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBPZmZzZXRFeGlzdHMoJGtleSkgIHsgcmV0dXJuIFRSVUU7IH0KICAKICAvKioKICAgKiBAaWdub3JlCiAgICovCiAgcHVibGljIGZ1bmN0aW9uICZleGVjdXRlKCkKICB7CiAgICAkb2JqID0gbmV3IGFycmF5X3Jlc3VsdHNldCgkdGhpcyk7CiAgICAKICAgIHJldHVybiAkb2JqOwogIH0KICAKICAvKioKICAgKiBAaWdub3JlCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGRhdGEoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X2RhdGE7CiAgfQp9IC8vIGVuZCBvZiBjbGFzcwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/query/class.array_resultset.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgYXJyYXlfcmVzdWx0c2V0IGNsYXNzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKiBAY2F0ZWdvcnkgUXVlcnkKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCgpuYW1lc3BhY2UgQ01TTVNFeHRccXVlcnk7CgovKioKICogVGhlIGFycmF5IHJlc3VsdHNldCBjbGFzcyBzaW11bGF0ZXMgYSByZXN1bHRzZXQgb2JqZWN0IGZyb20gYSBmbGF0IGFycmF5LgogKiBUaGlzIGlzIHVzZWZ1bCBmb3IgdXNpbmcgYW4gYXJyYXkgb2YgbG9hZGVkIGRhdGEgaW4gdGhlIHJlcG9ydGluZyBjbGFzc2VzLgogKgogKiBUaGlzIGNsYXNzIGRvZXMgbm90IHN1cHBvcnQgYSBsaW1pdCBvciBwYWdpbmF0aW9uLgogKgogKiBAcHJvcGVydHktcmVhZCBib29sICRFT0YgQWxpYXMgZm9yIHRoZSBFT0YoKSBtZXRob2QuCiAqIEBwcm9wZXJ0eS1yZWFkIGFycmF5ICRmaWVsZHMgQW4gYXJyYXkgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHJvdyBpbiB0aGUgcmVzdWx0IHNldC4KICovCmNsYXNzIGFycmF5X3Jlc3VsdHNldCBleHRlbmRzIGJhc2VfcmVzdWx0c2V0CnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfcG9zID0gMDsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdCBhIG5ldyBhcnJheV9yZXN1bHRzZXQgZnJvbSBhbiBhcnJheV9xdWVyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXlfcXVlcnkgJHF1ZXJ5CiAgICAgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheV9xdWVyeSAkcXVlcnkpCgl7CgkJJHRoaXMtPl9maWx0ZXIgPSAkcXVlcnktPmRhdGEoKTsKCX0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9xdWVyeSgpCiAgICB7CiAgICAgICAgLy8gZG8gbm90aGluZwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgcmVjb3JkcyBpbiB0aGUgYXJyYXkuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIFJlY29yZENvdW50KCkKICAgIHsKICAgICAgICByZXR1cm4gY291bnQoJHRoaXMtPl9maWx0ZXIpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgcmVjb3JkcyBpbiB0aGUgYXJyYXkuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIFRvdGFsTWF0Y2hlcygpCiAgICB7CiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5fZmlsdGVyKTsKICAgIH0KCiAgICAvKioKICAgICAqIE1vdmUgdG8gdGhlIG5leHQgcmVjb3JkIGluIHRoZSByZXN1bHQgc2V0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gTW92ZU5leHQoKQogICAgewogICAgICAgICR0aGlzLT5fcG9zKys7CiAgICB9CgogICAgLyoqCiAgICAgKiBNb3ZlIHRvIHRoZSBmaXJzdCByZWNvcmQgaW4gdGhlIHJlc3VsdCBzZXQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBNb3ZlRmlyc3QoKQogICAgewogICAgICAgICR0aGlzLT5fcG9zPTA7CiAgICB9CgogICAgLyoqCiAgICAgKiBNb3ZlIHRvIHRoZSBmaXJzdCByZWNvcmQgaW4gdGhlIHJlc3VsdCBzZXQuCiAgICAgKgogICAgICogQHNlZSBNb3ZlRmlyc3QoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gUmV3aW5kKCkKICAgIHsKICAgICAgICAkdGhpcy0+X3Bvcz0wOwogICAgfQoKICAgIC8qKgogICAgICogTW92ZSB0byB0aGUgbGFzdCByZWNvcmQgaW4gdGhlIHJlc3VsdCBzZXQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBNb3ZlTGFzdCgpCiAgICB7CiAgICAgICAgJHRoaXMtPl9wb3MgPSAkdGhpcy0+UmVjb3JkQ291bnQoKSAtIDE7CiAgICB9CgogICAgLyoqCiAgICAgKiBUZXN0IGlmIGJleW9uZCB0aGUgbGFzdCByZWNvcmQgaW4gdGhlIHJlc3VsdCBzZXQuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBFT0YoKQogICAgewogICAgICAgICR0bXAgPSAoJHRoaXMtPl9wb3MgPj0gJHRoaXMtPlJlY29yZENvdW50KCkpOwogICAgICAgIHJldHVybiAkdG1wOwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gQ2xvc2UoKQogICAgewogICAgICAgIC8vIGRvIG5vdGhpbmcKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgY3VycmVudCByb3cgZnJvbSB0aGUgcmVzdWx0IHNldC4KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiAmZ2V0X29iamVjdCgpCiAgICB7CiAgICAgICAgJGtleXMgPSBhcnJheV9rZXlzKCR0aGlzLT5fZmlsdGVyKTsKICAgICAgICAka2V5ID0gJGtleXNbJHRoaXMtPl9wb3NdOwogICAgICAgIHJldHVybiAkdGhpcy0+X2ZpbHRlclska2V5XTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uICZnZXRfcGFnaW5hdGlvbigpCiAgICB7CiAgICAgICAgZGllKCdub3QgaW1wbGVtZW50ZWQ6ICcuX19NRVRIT0RfXyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGZXRjaCBhbGwgb2YgdGhlIHJlc3VsdHMuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gRmV0Y2hBbGwoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2ZpbHRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fZ2V0KCRrZXkpCiAgICB7CiAgICAgICAgc3dpdGNoKCAka2V5ICkgewogICAgICAgIGNhc2UgJ0VPRic6CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+RU9GKCk7CgogICAgICAgIGNhc2UgJ2ZpZWxkcyc6CiAgICAgICAgICAgICRrZXlzID0gYXJyYXlfa2V5cygkdGhpcy0+X2ZpbHRlcik7CiAgICAgICAgICAgICRrZXkgPSAka2V5c1skdGhpcy0+X3Bvc107CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X2ZpbHRlclska2V5XTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmZpZWxkczsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5leHQoKQogICAgewogICAgICAgICR0aGlzLT5Nb3ZlTmV4dCgpOwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9wb3M7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fcG9zID49IDAgJiYgJHRoaXMtPkVPRigpOzsKICAgIH0KCn0gLy8gZW5kIG9mIGNsYXNz]]></data>
	</file>
	<file>
	  <filename>/lib/query/class.base_resultset.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgYWJzdHJhY3QgcmVzdWx0c2V0IGNsYXNzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKiBAY2F0ZWdvcnkgUXVlcnkKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCgpuYW1lc3BhY2UgQ01TTVNFeHRccXVlcnk7CgovKioKICogQW4gYWJzdHJhY3QgY2xhc3MgdG8gcXVlcnkgdGhlIGRhdGFiYXNlIGFuZCBtYW5hZ2UgdGhlIHJlc3VsdHMuCiAqLwphYnN0cmFjdCBjbGFzcyBiYXNlX3Jlc3VsdHNldCBpbXBsZW1lbnRzIFxpdGVyYXRvcgp7CiAgICAvKioKICAgICAqIFRoZSBjdXJyZW50IGZpbHRlciBvYmplY3QuCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2ZpbHRlcjsKCiAgICAvKioKICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgcmVjb3JkcyBtYXRjaGluZyB0aGUgcXVlcnkgKGluZGVwZW5kZW50IG9mIGxpbWl0IGFuZCBvZmZzZXQpCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3RvdGFsbWF0Y2hpbmc7CgogICAgLyoqCiAgICAgKiBUaGUgY29uc3RydWN0b3IKICAgICAqCiAgICAgKiBAcGFyYW0gcXVlcnkgJHF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChxdWVyeSAkcXVlcnkpCiAgICB7CiAgICAgICAgJHRoaXMtPl9maWx0ZXIgPSAkcXVlcnk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIHF1ZXJ5IG9iamVjdAogICAgICoKICAgICAqIEByZXR1cm4gcXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uICZnZXRfcXVlcnkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2ZpbHRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCkge30KCiAgICAvKioKICAgICAqIFVzZSB0aGUgZGF0YSBmcm9tIHRoZSBxdWVyeSBvYmplY3QsIHBlcmZvcm0gdGhlIGRhdGFiYXNlIHF1ZXJ5IGFuZCBzZXQgdGhlIHJlY29yZHNldCBtZW1iZXIuCiAgICAgKgogICAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGZpcnN0IHNlZSBpZiB0aGUgcmVjb3Jkc2V0IGhhcyBiZWVuIHNldCBhbmQgbm90IHJlcGVhdCB0aGUgcXVlcnkuLi4gZm9yIHRoZSBzYW1lIG9mIG9wdGltYWwgYmVoYXZpb3IuCiAgICAgKi8KICAgIGFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBfcXVlcnkoKTsKCiAgICAvKioKICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIHJlY29yZHMgcmV0dXJuZWQgaW4gdGhpcyByZWNvcmRzZXQuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIFJlY29yZENvdW50KCk7CgogICAgLyoqCiAgICAgKiBNb3ZlIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IG1hdGNoaW5nIHJvdyBpbiB0aGUgcmVjb3Jkc2V0LgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gTW92ZU5leHQoKTsKCiAgICAvKioKICAgICAqIE1vdmUgdGhlIHBvaW50ZXIgIHRvIHRoZSBmaXJzdCBtYXRjaGluZyByb3cgaW4gdGhlIHJlY29yZHNldC4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIE1vdmVGaXJzdCgpOwoKICAgIC8qKgogICAgICogTW92ZSB0aGUgcG9pbnRlciB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgcm93IGluIHRoZSByZWNvcmRzZXQuCiAgICAgKi8KLy8gICAgI1tSZXR1cm5UeXBlV2lsbENoYW5nZV0KLy8gICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpOwoKICAgIC8qKgogICAgICogTW92ZSB0aGUgcG9pbnRlciB0byB0aGUgbGFzdCBtYXRjaGluZyByb3cgaW4gdGhlIHJlY29yZHNldC4KICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIE1vdmVMYXN0KCk7CgogICAgLyoqCiAgICAgKiBUZXN0IGlmIHRoZSBwb2ludGVyIGlzIGF0IHRoZSBlbmQgb2YgdGhlIHJlY29yZHNldCAodGhlcmUgYXJlIG5vIG1vcmUgcmVjb3JkcykKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIEVPRigpOwoKICAgIC8qKgogICAgICogQ2xvc2UgdGhlIHJlY29yZHNldCwgYW5kIGZyZWUgcmVzb3VyY2VzLgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gQ2xvc2UoKTsKCiAgICAvKioKICAgICAqIHJldHVybiB0aGUgdG90YWwgbnVtYmVyIG9mIG1hdGNoZXMgKGluZGVwZW5kZW50IG9mIGxpbWl0IGFuZCBvZmZzZXQpCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIFRvdGFsTWF0Y2hlcygpOwoKICAgIC8qKgogICAgICogR2V0IGFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGRhdGEgYXQgdGhlIGN1cnJlbnQgcG9pbnRlciBwb3NpdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gb2JqZWN0CiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiAmZ2V0X29iamVjdCgpOwoKICAgIC8qKgogICAgICogR2V0IGEgcGFnaW5hdGlvbiBvYmplY3QgZm9yIHRoaXMgcXVlcnkgYW5kIHJlc3VsdHNldAogICAgICoKICAgICAqIEByZXR1cm4gcGFnaW5hdGlvbgogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gJmdldF9wYWdpbmF0aW9uKCk7CgogICAgLyoqCiAgICAgKiBGZXRjaCBhbGwgb2YgdGhlIHJlY29yZHMgaW4gdGhpcyByZXN1bHRzZXQgYXMgYW4gYXJyYXkgb2Ygb2JqZWN0cy4KICAgICAqCiAgICAgKiBAcmV0dXJuIG9iamVjdFtdCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBGZXRjaEFsbCgpOwp9IC8vIGVuZCBvZiBjbGFzcwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/query/class.csvfilequery.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgY3N2ZmlsZXF1ZXJ5IGNsYXNzCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBRdWVyeQogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCm5hbWVzcGFjZSBDTVNNU0V4dFxxdWVyeTsKCi8qKgogKiBBIGNsYXNzIHRoYXQgcmVwcmVzZW50cyB0aGUgY29udGVudHMgb2YgYSBjc3YgZmlsZSBhcyBhIHF1ZXJ5LgogKiBUaGlzIGNsYXNzIGRvZXMgbm90IHByb3ZpZGUgZm9yIGZpbHRlcmluZyBvZiB0aGUgY29udGVudHMgb2YgdGhlIGNzdiBmaWxlCiAqCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJGRlbGltaXRlciBUaGUgZmllbGQgZGVsaW1pdGVyIGZvciB0aGUgY3N2IGZpbGUuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBhIGNvbW1tYSAoLCkKICogQHByb3BlcnR5IHN0cmluZyAkZW5jbG9zdXJlIFRoZSBlbmNsb3N1cmUgdGhhdCBmaWVsZCBjb250ZW50cyBtYXkgYmUgZW5jbG9zZWQgaW4gKHBhcnRpY3VsYXJseSBpZiB0aGUgZGVsaW1pdGVyIG1heSBiZSBwcmVzZW50IGluIHRoZSBmaWVsZCBjb250ZW50cykuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgZG91YmxlIHF1b3RlICgiKQogKiBAcHJvcGVydHkgYXJyYXkgJG1hcCBBbiBhcnJheSB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlbmFtZSBhbGwgb2YgdGhlIGNvbHVtbnMgb2YgdGhlIGlucHV0IGZpbGUgZnJvbSB0aGUgc3RhbmRhcmQgY29sXzxpbmRleD4gZm9ybWF0IHRvIHJlYWwgbmFtZXMuCiAqLwpjbGFzcyBjc3ZmaWxlcXVlcnkgZXh0ZW5kcyB0eHRmaWxlcXVlcnkKewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9kYXRhID0gYXJyYXkoJ2RlbGltaXRlcic9PicsJywnZW5jbG9zdXJlJz0+JyInLCdtYXAnPT5udWxsKTsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdG9yCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRwYXJhbXMgVGhlIGRlZmF1bHQgcHJvcGVydGllcyBmb3IgdGhpcyBxdWVyeS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRwYXJhbXMgPSBhcnJheSgpKQogICAgewogICAgICAgIGZvcmVhY2goICRwYXJhbXMgYXMgJGtleSA9PiAkdmFsICkgewogICAgICAgICAgICBzd2l0Y2goICRrZXkgKSB7CiAgICAgICAgICAgIGNhc2UgJ2RlbGltaXRlcic6CiAgICAgICAgICAgIGNhc2UgJ2VuY2xvc3VyZSc6CiAgICAgICAgICAgIGNhc2UgJ21hcCc6CiAgICAgICAgICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSAkdmFsOwogICAgICAgICAgICAgICAgdW5zZXQoJHBhcmFtc1ska2V5XSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRwYXJhbXMpOwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gT2Zmc2V0R2V0KCRrZXkpCiAgICB7CiAgICAgICAgaWYoIGFycmF5X2tleV9leGlzdHMoJGtleSwkdGhpcy0+X2RhdGEpICkgcmV0dXJuICR0aGlzLT5fZGF0YVska2V5XTsKICAgICAgICByZXR1cm4gcGFyZW50OjpPZmZzZXRHZXQoJGtleSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBPZmZzZXRTZXQoJGtleSwkdmFsdWUpCiAgICB7CiAgICAgICAgc3dpdGNoKCAka2V5ICkgewogICAgICAgIGNhc2UgJ2RlbGltaXRlcic6CiAgICAgICAgY2FzZSAnZW5jbG9zdXJlJzoKICAgICAgICAgICAgJHRoaXMtPl9kYXRhWyRrZXldID0gJHZhbHVlOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcGFyZW50OjpPZmZzZXRTZXQoJGtleSwkdmFsdWUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIE9mZnNldEV4aXN0cygka2V5KQogICAgewogICAgICAgIGlmKCBhcnJheV9rZXlfZXhpc3RzKCRrZXksJHRoaXMtPl9kYXRhKSApIHJldHVybiBUUlVFOwogICAgICAgIHJldHVybiBwYXJlbnQ6Ok9mZnNldEV4aXN0cygka2V5KTsKICAgIH0KCiAgICAvKioKICAgICAqIEV4ZWN1dGUgdGhlIHF1ZXJ5IGFuZCBnZW5lcmF0ZSBhIHJlc3VsdHNldC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGNzdmZpbGVyZXN1bHRzZXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uICZleGVjdXRlKCkKICAgIHsKICAgICAgICAkb2JqID0gbmV3IGNzdmZpbGVyZXN1bHRzZXQoJHRoaXMpOwogICAgICAgIHJldHVybiAkb2JqOwogICAgfQp9]]></data>
	</file>
	<file>
	  <filename>/lib/query/class.csvfileresultset.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBjc3ZmaWxlcmVzdWx0c2V0IGNsYXNzCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBRdWVyeQogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCm5hbWVzcGFjZSBDTVNNU0V4dFxxdWVyeTsKCi8qKgogKiBBIGNsYXNzIHRvIHJldHVybiByZWNvcmRzIG91dCBvZiBhIGNzdiBmaWxlLCBzdWl0YWJsZSBmb3IgdXNpbmcgaW4gc29tZSByZXBvcnRzLgogKgogKiBAcHJvcGVydHkgc3RyaW5nICRmaWVsZHMgR2V0IHRoZSBjdXJyZW50IHJlY29yZCAoaW4gdGhpcyBjYXNlIGEgbGluZSkuCiAqIEBzZWUgY3N2ZmlsZXF1ZXJ5CiAqLwpjbGFzcyBjc3ZmaWxlcmVzdWx0c2V0IGV4dGVuZHMgdHh0ZmlsZXJlc3VsdHNldAp7CiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2xvYWRlZDsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9xdWVyeSgpCiAgICB7CiAgICAgICAgcGFyZW50OjpfcXVlcnkoKTsKICAgICAgICBpZiggJHRoaXMtPl9sb2FkZWQgKSByZXR1cm47CiAgICAgICAgJHRoaXMtPl9sb2FkZWQgPSAxOwoKICAgICAgICAkb2JqID0gJHRoaXMtPmdldF9maWxlb2JqZWN0KCk7CiAgICAgICAgJG9iai0+U2V0RmxhZ3MoXFNwbEZpbGVPYmplY3Q6OlJFQURfQ1NWKTsKICAgICAgICAkb2JqLT5zZXRDc3ZDb250cm9sKCR0aGlzLT5fZmlsdGVyWydkZWxpbWl0ZXInXSwkdGhpcy0+X2ZpbHRlclsnZW5jbG9zdXJlJ10pOwogICAgICAgICRvYmotPnNlZWsoJHRoaXMtPl9maWx0ZXJbJ29mZnNldCddKTsgLy8ganVzdCBpbiBjYXNlCiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgka2V5KQogICAgewogICAgICAgIGlmKCAka2V5ID09ICdmaWVsZHMnICkgewogICAgICAgICAgICAkcmVjID0gYXJyYXkoKTsKICAgICAgICAgICAgJHJlY1snbGluZSddID0gJHRoaXMtPmdldF9maWxlb2JqZWN0KCktPmtleSgpICsgMTsKICAgICAgICAgICAgJGN1ciA9ICR0aGlzLT5nZXRfZmlsZW9iamVjdCgpLT5jdXJyZW50KCk7CiAgICAgICAgICAgICRtYXAgPSAkdGhpcy0+X2ZpbHRlclsnbWFwJ107CiAgICAgICAgICAgIGlmKCBpc19hcnJheSgkbWFwKSApIHsKICAgICAgICAgICAgICAgIGZvcmVhY2goICRtYXAgYXMgJGNvbCA9PiAkZmxkbmFtZSApIHsKICAgICAgICAgICAgICAgICAgICAkcmVjWyRmbGRuYW1lXSA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgaWYoIGlzc2V0KCRjdXJbJGNvbF0pICkgJHJlY1skZmxkbmFtZV0gPSAkY3VyWyRjb2xdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgZm9yZWFjaCggJGN1ciBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlY1snY29sXycuJGtleV0gPSAkdmFsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAkcmVjOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGFyZW50OjpfX2dldCgka2V5KTsKICAgIH0KCn0gLy8gZW5kIG9mIGNsYXNzCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/query/class.pagination.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgcGFnaW5hdGlvbiBjbGFzcy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IFF1ZXJ5CiAqIEBhdXRob3IgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XHF1ZXJ5OwoKdXNlIFJldHVyblR5cGVXaWxsQ2hhbmdlOwoKLyoqCiAqIEEgY2xhc3MgdG8gYXNzaXN0IGluIGJ1aWxkaW5nIGEgcGFnaW5hdG9yIG5hdmlnYXRpb24gZm9yIHRoZSByZXN1bHRzIG9mIGEgcXVlcnkuCiAqCiAqIEBwcm9wZXJ0eS1yZWFkIGludCAkcGFnZWNvdW50IFRoZSBudW1iZXIgb2YgcGFnZXMKICogQHByb3BlcnR5LXJlYWQgaW50ICRwYWdlIFRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyIChvbmUgYmFzZWQpCiAqIEBwcm9wZXJ0eS1yZWFkIGludCBwYWdlbGltaXQgVGhlIHBhZ2UgbGltaXQgZnJvbSB0aGUgcXVlcnkgb2JqZWN0CiAqIEBwcm9wZXJ0eS1yZWFkIGludCB0b3RhbHJvYXMgVGhlIHRvdGFsIG1hdGNoaW5nIHJvd3MgZm9yIHRoZSByZXN1bHRzZXQgKGluZGVwZW5kZW50IG9mIGxpbWl0IG9yIG9mZnNldCkKICovCmNsYXNzIHBhZ2luYXRpb24gaW1wbGVtZW50cyBcQXJyYXlBY2Nlc3MKewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9yczsKCiAgICAvKioKICAgICAqIFRoZSBjb25zdHJ1Y3RvcgogICAgICoKICAgICAqIEBzZWUgcmVzdWx0c2V0CiAgICAgKiBAc2VlIHF1ZXJ5CiAgICAgKiBAcGFyYW0gcmVzdWx0c2V0ICRycyBBIHJlc3VsdHNldCBvYmplY3QgKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QocmVzdWx0c2V0ICRycykKICAgIHsKICAgICAgICAkdGhpcy0+X3JzID0gJHJzOwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICAjW1JldHVyblR5cGVXaWxsQ2hhbmdlXQogICAgcHVibGljIGZ1bmN0aW9uIE9mZnNldEdldCgka2V5KQogICAgewogICAgICAgIHN3aXRjaCggJGtleSApIHsKICAgICAgICBjYXNlICdwYWdlY291bnQnOgogICAgICAgICAgICAkbiA9ICR0aGlzLT5fcnMtPlRvdGFsTWF0Y2hlcygpOwogICAgICAgICAgICAkcCA9IChpbnQpIGNlaWwoJG4gLyAkdGhpcy0+X3JzLT5nZXRfcXVlcnkoKVsnbGltaXQnXSk7CiAgICAgICAgICAgIHJldHVybiAkcDsKCiAgICAgICAgY2FzZSAncGFnZSc6CiAgICAgICAgICAgICRwID0gKGludCkoJHRoaXMtPl9ycy0+Z2V0X3F1ZXJ5KClbJ29mZnNldCddIC8gJHRoaXMtPl9ycy0+Z2V0X3F1ZXJ5KClbJ2xpbWl0J10pICsgMTsKICAgICAgICAgICAgJHAgPSBtYXgoMSxtaW4oJHRoaXNbJ3BhZ2Vjb3VudCddLTEsJHApKTsKICAgICAgICAgICAgcmV0dXJuICRwOwoKICAgICAgICBjYXNlICdwYWdlbGltaXQnOgogICAgICAgICAgICByZXR1cm4gJHRoaXMtPl9ycy0+Z2V0X3F1ZXJ5KClbJ2xpbWl0J107CgogICAgICAgIGNhc2UgJ3RvdGFscm93cyc6CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X3JzLT5Ub3RhbE1hdGNoZXMoKTsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCRrZXkuJyBpcyBub3QgYSBtZW1iZXIgb2YgJy5fX0NMQVNTX18pOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgI1tSZXR1cm5UeXBlV2lsbENoYW5nZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBPZmZzZXRTZXQoJGtleSwkdmFsdWUpCiAgICB7CiAgICAgICAgLy8gZG8gbm90aGluZwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICAgI1tSZXR1cm5UeXBlV2lsbENoYW5nZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBPZmZzZXRFeGlzdHMoJGtleSkKICAgIHsKICAgICAgICAvLyBkbyBub3RoaW5nCiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgICNbUmV0dXJuVHlwZVdpbGxDaGFuZ2VdCiAgICBwdWJsaWMgZnVuY3Rpb24gT2Zmc2V0VW5zZXQoJGtleSkKICAgIHsKICAgICAgICAvLyBkbyBub3RoaW5nCiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBsaXN0IG9mIHBhZ2UgbnVtYmVycyBzdWl0YWJsZSBmb3IgdXNpbmcgaW4gYSBsb29wIHRvIGJ1aWxkIGEgbmF2aWdhdGlvbiBsaXN0LgogICAgICogVGhpcyBtZXRob2Qgd2lsbCB1c2Ugb3B0aW1pemF0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBudW1iZXIgb2YgaXRlbXMgcmV0dXJuZWQgaW4gdGhlIGxpc3Qgd2lsbCBuZXZlciBncm93IHRvbyBsYXJnZQogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHN1cnJvdW5kIC0gVGhlIG51bWJlciBvZiBwYWdlIG51bWJlcnMgdG8gc3Vycm91bmQgdGhlIGN1cnJlbnQgcGFnZSB3aXRoLgogICAgICogQHJldHVybiBpbnRbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3BhZ2VsaXN0KCRzdXJyb3VuZCA9IDUpCiAgICB7CiAgICAgICAgJGxpc3QgPSBhcnJheSgpOwogICAgICAgIGZvciggJGkgPSAxOyAkaSA8PSBtaW4oJHN1cnJvdW5kLCR0aGlzWydwYWdlY291bnQnXSk7ICRpKysgKSB7CiAgICAgICAgICAgICRsaXN0W10gPSAoaW50KSRpOwogICAgICAgIH0KCiAgICAgICAgJHgxID0gbWF4KDEsKGludCkoJHRoaXNbJ3BhZ2UnXSAtICRzdXJyb3VuZCAvIDIpKTsKICAgICAgICAkeDIgPSBtaW4oJHRoaXNbJ3BhZ2Vjb3VudCddIC0gMSwoaW50KSgkdGhpc1sncGFnZSddICsgJHN1cnJvdW5kIC8gMikgKTsKICAgICAgICBmb3IoICRpID0gJHgxOyAkaSA8PSAkeDI7ICRpKysgKSB7CiAgICAgICAgICAgICRsaXN0W10gPSAoaW50KSRpOwogICAgICAgIH0KCiAgICAgICAgZm9yKCAkaSA9IG1heCgxLCR0aGlzWydwYWdlY291bnQnXSAtICRzdXJyb3VuZCk7ICRpIDwgJHRoaXNbJ3BhZ2Vjb3VudCddOyAkaSsrKSB7CiAgICAgICAgICAgICRsaXN0W10gPSAoaW50KSRpOwogICAgICAgIH0KCiAgICAgICAgJGxpc3QgPSBhcnJheV91bmlxdWUoJGxpc3QpOwogICAgICAgIHNvcnQoJGxpc3QpOwogICAgICAgIHJldHVybiAkbGlzdDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhIGhhc2ggb2YgcGFnZSBudW1iZXJzIHN1aXRhYmxlIGZvciB1c2luZyBpbiBhIGxvb3AgdG8gYnVpbGQgYSBuYXZpZ2F0aW9uIGxpc3QuCiAgICAgKgogICAgICogQHNlZSBnZXRfcGFnZWxpdAogICAgICogQHBhcmFtIGludCAkc3Vycm91bmQgVGhlIG51bWJlciBvZiBwYWdlcyBhcm91bmQgdGhlIGN1cnJlbnQgcGFnZSAoYW5kIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCkgdG8gcmV0dXJuLgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3BhZ2VoYXNoKCRzdXJyb3VuZCA9IDUpCiAgICB7CiAgICAgICAgJGxpc3QgPSAkdGhpcy0+Z2V0X3BhZ2VsaXN0KCRzdXJyb3VuZCk7CiAgICAgICAgJG91dCA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCggJGxpc3QgYXMgJG9uZSApIHsKICAgICAgICAgICAgJG91dFskb25lXSA9ICRvbmU7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0OwogICAgfQp9IC8vIGVuZCBvZiBjbGFzcwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/query/class.query.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgYWJzdHJhY3QgcXVlcnkgY2xhc3MuCiAqCiAqIEBwYWNrYWdlICAgQ01TTVNFeHQKICogQGNhdGVnb3J5ICBRdWVyeQogKiBAYXV0aG9yICAgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XHF1ZXJ5OwoKdXNlIFJldHVyblR5cGVXaWxsQ2hhbmdlOwoKLyoqCiAqIEFuIGFic3RyYWN0IGNsYXNzIHRvIHByb3ZpZGUgdGhlIGJhc2ljIGludGVyZmFjZSBmb3IgYSBxdWVyeSBjbGFzcy4KICogZGVzY2VuZGVudHMgb2YgdGhpcyBjbGFzcyBzaG91bGQgaW1wbGVtZW50IGF0IGxlYXN0IHRoZSBsaW1pdCwgYW5kIG9mZnNldCBwYXJhbWV0ZXJzCiAqIHRvIGFsbG93IHRoZSBwYWdpbmF0aW9uIGNsYXNzIHRvIHdvcmsuCiAqCiAqIFRoaXMgY2xhc3Mgc3VwcG9ydHMgYWNjZXNzaW5nIG1lbWJlcnMgYXMgZWl0aGVyIG9iamVjdCBtZW1iZXJzIHdpdGggdGhlIC0+IG9wZXJhdG9yLCBvciBhcyBhcnJheSBtZW1iZXJzIHdpdGggdGhlIFtdCiAqIG9wZXJhdG9yLgogKi8KYWJzdHJhY3QgY2xhc3MgcXVlcnkgaW1wbGVtZW50cyBcQXJyYXlBY2Nlc3MKewogIC8qKgogICAqIENvbnN0cnVjdG9yLgogICAqIFRoaXMgbWV0aG9kIGFjY2VwdHMgYW4gYXJyYXkgb2YgcGFyYW1ldGVycywgYW5kIHNldHMgaW50ZXJuYWwgZGF0YSBmb3IgdGhlIHF1ZXJ5IG9iamVjdC4KICAgKiBJZGVudGljYWxseSB0byBjYWxsaW5nICR0aGlzWydrZXknXSA9ICR2YWwgbXVsdGlwbGUgdGltZXMuCiAgICoKICAgKiBAcGFyYW0gYXJyYXkgJHBhcm1zCiAgICovCiAgCiAgLyoqCiAgICogQGlnbm9yZQogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgka2V5KQogIHsKICAgIHJldHVybiAkdGhpcy0+T2Zmc2V0R2V0KCRrZXkpOwogIH0KICAKICAvKioKICAgKiBAaWdub3JlCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIF9fc2V0KCRrZXksICR2YWx1ZSkKICB7CiAgICByZXR1cm4gJHRoaXMtPk9mZnNldFNldCgka2V5LCAkdmFsdWUpOwogIH0KICAKICAvKioKICAgKiBAaWdub3JlCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIF9faXNzZXQoJGtleSkKICB7CiAgICByZXR1cm4gJHRoaXMtPk9mZnNldEV4aXN0cygka2V5KTsKICB9CiAgCiAgLyoqCiAgICogQGlnbm9yZQogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBfX3Vuc2V0KCRrZXkpCiAgewogICAgcmV0dXJuICR0aGlzLT5PZmZzZXRVbnNldCgka2V5KTsKICB9CiAgCiAgLyoqCiAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiBhIGN1cnJlbnRseSBzZXQgdmFyaWFibGUuCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgKgogICAqIEBpZ25vcmUKICAgKi8KICAjW1JldHVyblR5cGVXaWxsQ2hhbmdlXQogIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBPZmZzZXRHZXQoJGtleSk7CiAgCiAgLyoqCiAgICogU2V0IGEgdmFsdWUgaW50byB0aGUgcXVlcnkgb2JqZWN0LgogICAqCiAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICogQHBhcmFtIG1peGVkICAkdmFsdWUKICAgKi8KICAjW1JldHVyblR5cGVXaWxsQ2hhbmdlXQogIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBPZmZzZXRTZXQoJGtleSwgJHZhbHVlKTsKICAKICAvKioKICAgKiBUZXN0IGlmIHRoZSBrZXkgaXMgc2V0IGluIHRoZSBkYXRhIG9iamVjdC4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAqCiAgICogQHJldHVybiBib29sCiAgICovCiAgI1tSZXR1cm5UeXBlV2lsbENoYW5nZV0KICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gT2Zmc2V0RXhpc3RzKCRrZXkpIDsKICAKICAvKioKICAgKiBVbnNldCBhIHZhcmlhYmxlIGluIHRoZSBvYmplY3QKICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAqLwogICNbUmV0dXJuVHlwZVdpbGxDaGFuZ2VdCiAgcHVibGljIGZ1bmN0aW9uIE9mZnNldFVuc2V0KCRrZXkpCiAgewogICAgLy8gZG8gbm90aGluZwogIH0KICAKICAvKioKICAgKiBFeGVjdXRlIHRoZSBxdWVyeSBhbmQgcmV0dXJuIHRoZSByZXN1bHRzZXQKICAgKgogICAqIEByZXR1cm4gcmVzdWx0c2V0CiAgICovCiAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uICZleGVjdXRlKCk7Cn0KCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/query/class.resultset.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgYWJzdHJhY3QgcmVzdWx0c2V0IGNsYXNzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKiBAY2F0ZWdvcnkgUXVlcnkKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCgpuYW1lc3BhY2UgQ01TTVNFeHRccXVlcnk7Cgp1c2UgUmV0dXJuVHlwZVdpbGxDaGFuZ2U7CgovKioKICogQW4gYWJzdHJhY3QgY2xhc3MgdG8gcXVlcnkgdGhlIGRhdGFiYXNlIGFuZCBtYW5hZ2UgdGhlIHJlc3VsdHMuCiAqLwphYnN0cmFjdCBjbGFzcyByZXN1bHRzZXQgZXh0ZW5kcyBiYXNlX3Jlc3VsdHNldCBpbXBsZW1lbnRzIFxJdGVyYXRvcgp7CiAgICAvKioKICAgICAqIEEgbWVtYmVyIHRvIHN0b3JlIHRoZSBkYXRhYmFzZSByZWNvcmRzZXQuCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3JzOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfcG9zOwoKICAgIC8qKgogICAgICogVGhlIGNvbnN0cnVjdG9yCiAgICAgKgogICAgICogQHBhcmFtIHF1ZXJ5ICRxdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QocXVlcnkgJHF1ZXJ5KQogICAgewogICAgICAgICR0aGlzLT5fZmlsdGVyID0gJHF1ZXJ5OwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBxdWVyeSBvYmplY3QKICAgICAqCiAgICAgKiBAcmV0dXJuIHF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiAmZ2V0X3F1ZXJ5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9maWx0ZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBVc2UgdGhlIGRhdGEgZnJvbSB0aGUgcXVlcnkgb2JqZWN0LCBwZXJmb3JtIHRoZSBkYXRhYmFzZSBxdWVyeSBhbmQgc2V0IHRoZSByZWNvcmRzZXQgbWVtYmVyLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIHNob3VsZCBmaXJzdCBzZWUgaWYgdGhlIHJlY29yZHNldCBoYXMgYmVlbiBzZXQgYW5kIG5vdCByZXBlYXQgdGhlIHF1ZXJ5Li4uIGZvciB0aGUgc2FtZSBvZiBvcHRpbWFsIGJlaGF2aW9yLgogICAgICovCiAgICAvL2Fic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBfcXVlcnkoKTsKCiAgICAvKioKICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIHJlY29yZHMgcmV0dXJuZWQgaW4gdGhpcyByZWNvcmRzZXQuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICNbUmV0dXJuVHlwZVdpbGxDaGFuZ2VdCiAgICBwdWJsaWMgZnVuY3Rpb24gUmVjb3JkQ291bnQoKQogICAgewogICAgICAgICR0aGlzLT5fcXVlcnkoKTsKICAgICAgICBpZiggJHRoaXMtPl9ycyApIHJldHVybiAkdGhpcy0+X3JzLT5SZWNvcmRDb3VudCgpOwogICAgfQoKICAgIC8qKgogICAgICogTW92ZSB0aGUgcG9pbnRlciB0byB0aGUgbmV4dCBtYXRjaGluZyByb3cgaW4gdGhlIHJlY29yZHNldC4KICAgICAqLwogICNbUmV0dXJuVHlwZVdpbGxDaGFuZ2VdCiAgICBwdWJsaWMgZnVuY3Rpb24gTW92ZU5leHQoKQogICAgewogICAgICAgICR0aGlzLT5fcXVlcnkoKTsKICAgICAgICBpZiggJHRoaXMtPl9ycyApIHsKICAgICAgICAgICAgJHRoaXMtPl9wb3MrKzsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5fcnMtPk1vdmVOZXh0KCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogTW92ZSB0aGUgcG9pbnRlciAgdG8gdGhlIGZpcnN0IG1hdGNoaW5nIHJvdyBpbiB0aGUgcmVjb3Jkc2V0LgogICAgICovCiAgI1tSZXR1cm5UeXBlV2lsbENoYW5nZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBNb3ZlRmlyc3QoKQogICAgewogICAgICAgICR0aGlzLT5fcXVlcnkoKTsKICAgICAgICAkdGhpcy0+X3BvcyA9IDA7CiAgICAgICAgaWYoICR0aGlzLT5fcnMgKSByZXR1cm4gJHRoaXMtPl9ycy0+TW92ZUZpcnN0KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBNb3ZlIHRoZSBwb2ludGVyIHRvIHRoZSBsYXN0IG1hdGNoaW5nIHJvdyBpbiB0aGUgcmVjb3Jkc2V0LgogICAgICovCiAgI1tSZXR1cm5UeXBlV2lsbENoYW5nZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBNb3ZlTGFzdCgpCiAgICB7CiAgICAgICAgJHRoaXMtPl9xdWVyeSgpOwogICAgICAgIGlmKCAkdGhpcy0+X3JzICkgewogICAgICAgICAgICAkdGhpcy0+X3BvcyA9IG1heCgwLCR0aGlzLT5SZWNvcmRDb3VudCgpIC0gMSk7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X3JzLT5Nb3ZlTGFzdCgpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgY3VycmVudCBvYmplY3QuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgI1tSZXR1cm5UeXBlV2lsbENoYW5nZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldF9vYmplY3QoKTsKICAgIH0KCiAgICAvKioKICAgICAqIE1vdmUgdGhlIHBvaW50ZXIgdG8gdGhlIG5leHQgb2JqZWN0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAjW1JldHVyblR5cGVXaWxsQ2hhbmdlXQogICAgcHVibGljIGZ1bmN0aW9uIG5leHQoKQogICAgewogICAgICAgICR0aGlzLT5Nb3ZlTmV4dCgpOwogICAgfQoKICAgIC8qKgogICAgICogUmV3aW5kIHRoZSBwb2ludGVyIHRvIHRoZSBmaXJzdCBvYmplY3QuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAjW1JldHVyblR5cGVXaWxsQ2hhbmdlXQogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpCiAgICB7CiAgICAgICAgJHRoaXMtPk1vdmVGaXJzdCgpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBrZXkgKHBvc2l0aW9uKSBvZiB0aGUgY3VycmVudCBvYmplY3Qgd2l0aGluIHRoZSByZXN1bHRzZXQuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICNbUmV0dXJuVHlwZVdpbGxDaGFuZ2VdCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9wb3M7CiAgICB9CgogICAgLyoqCiAgICAgKiBUZXN0IGlmIHRoZSBjdXJyZW50IHBvaW50ZXIgcG9pbnRzIHRvIGEgdmFsaWQgb2JqZWN0LgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgI1tSZXR1cm5UeXBlV2lsbENoYW5nZV0KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+X3BvcyA+PSAwICYmICEkdGhpcy0+RU9GKCkpID8gVFJVRSA6IEZBTFNFOzsKICAgIH0KCiAgICAvKioKICAgICAqIFRlc3QgaWYgdGhlIHBvaW50ZXIgaXMgYXQgdGhlIGVuZCBvZiB0aGUgcmVjb3Jkc2V0ICh0aGVyZSBhcmUgbm8gbW9yZSByZWNvcmRzKQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgI1tSZXR1cm5UeXBlV2lsbENoYW5nZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBFT0YoKQogICAgewogICAgICAgICR0aGlzLT5fcXVlcnkoKTsKICAgICAgICBpZiggJHRoaXMtPl9ycyApIHJldHVybiAkdGhpcy0+X3JzLT5FT0YoKTsKICAgICAgICByZXR1cm4gVFJVRTsKICAgIH0KCiAgICAvKioKICAgICAqIENsb3NlIHRoZSByZWNvcmRzZXQsIGFuZCBmcmVlIHJlc291cmNlcy4KICAgICAqLwogICNbUmV0dXJuVHlwZVdpbGxDaGFuZ2VdCiAgICBwdWJsaWMgZnVuY3Rpb24gQ2xvc2UoKQogICAgewogICAgICAgIGlmKCAkdGhpcy0+X3JzICkgcmV0dXJuICR0aGlzLT5fcnMtPkNsb3NlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgka2V5KQogICAgewogICAgICAgIGlmKCAka2V5ID09ICdFT0YnICkgcmV0dXJuICR0aGlzLT5FT0YoKTsKICAgICAgICBpZiggJGtleSA9PSAnZmllbGRzJyAmJiAkdGhpcy0+X3JzICkgewogICAgICAgICAgICBpZiggISR0aGlzLT5fcnMtPkVPRigpICkgcmV0dXJuICR0aGlzLT5fcnMtPmZpZWxkczsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IFxDbXNJbnZhbGlkRGF0YUV4Y2VwdGlvbigiJGtleSBpcyBub3QgYSBnZXR0YWJsZSBtZW1iZXIgb2YgIi5fX0NMQVNTX18pOwogICAgfQoKICAgIC8qKgogICAgICogcmV0dXJuIHRoZSB0b3RhbCBudW1iZXIgb2YgbWF0Y2hlcyAoaW5kZXBlbmRlbnQgb2YgbGltaXQgYW5kIG9mZnNldCkKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgI1tSZXR1cm5UeXBlV2lsbENoYW5nZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBUb3RhbE1hdGNoZXMoKQogICAgewogICAgICAgICR0aGlzLT5fcXVlcnkoKTsKICAgICAgICByZXR1cm4gJHRoaXMtPl90b3RhbG1hdGNoaW5nOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGEgcGFnaW5hdGlvbiBvYmplY3QgZm9yIHRoaXMgcXVlcnkgYW5kIHJlc3VsdHNldAogICAgICoKICAgICAqIEByZXR1cm4gcGFnaW5hdGlvbgogICAgICovCiAgI1tSZXR1cm5UeXBlV2lsbENoYW5nZV0KICAgIHB1YmxpYyBmdW5jdGlvbiAmZ2V0X3BhZ2luYXRpb24oKQogICAgewogICAgICAgICRwYWdpbmF0aW9uID0gbmV3IHBhZ2luYXRpb24oJHRoaXMpOwogICAgICAgIHJldHVybiAkcGFnaW5hdGlvbjsKICAgIH0KCiAgICAvKioKICAgICAqIEZldGNoIGFsbCBvZiB0aGUgcmVjb3JkcyBpbiB0aGlzIHJlc3VsdHNldCBhcyBhbiBhcnJheSBvZiBvYmplY3RzLgogICAgICoKICAgICAqIEByZXR1cm4gb2JqZWN0W10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIEZldGNoQWxsKCkKICAgIHsKICAgICAgICAkb3V0ID0gYXJyYXkoKTsKICAgICAgICAkdGhpcy0+TW92ZUZpcnN0KCk7CiAgICAgICAgd2hpbGUoICEkdGhpcy0+RU9GKCkgKSB7CiAgICAgICAgICAgICRvdXRbXSA9ICR0aGlzLT5nZXRfb2JqZWN0KCk7CiAgICAgICAgICAgICR0aGlzLT5Nb3ZlTmV4dCgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICAvKioKICAgICAqIEEgY29udmVuaWVuY2UgbWV0aG9kIHVzZWQgdG8gYWlkZSBpbiBjb252ZXJ0aW5nIGEgc3RyaW5nIHRoYXQgbWF5IChvciBtYXkgbm90KSBjb250YWluIHdpbGRjYXJkICgqKSBjaGFyYWN0ZXJzCiAgICAgKiBpbnRvIGEgc3RyaW5nIHN1aXRhYmxlIGZvciB1c2UgaW4gYSBzdWJzdHJpbmcgbWF0Y2gKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHIgVGhlIHN0cmluZyB0byBwYXJzZSBmb3Igd2lsZGNhcmRzLgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gd2lsZGNhcmQoJHN0cikKICAgIHsKICAgICAgICBpZiggc3RycG9zKCRzdHIsJyonKSAhPSBGQUxTRSApIHsKICAgICAgICAgICAgJHN0ciA9IHN0cl9yZXBsYWNlKCcqJywnJScsJHN0cik7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYoIHN0cnBvcygkc3RyLCclJykgPT09IEZBTFNFICkgewogICAgICAgICAgICAkc3RyID0gJyUnLiRzdHIuJyUnOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHN0cjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/query/class.sql_query.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc3FsX3F1ZXJ5IGNsYXNzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKiBAY2F0ZWdvcnkgUXVlcnkKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCm5hbWVzcGFjZSBDTVNNU0V4dFxxdWVyeTsKCgovKioKICogQSBzaW1wbGUgcXVlcnkgY2xhc3MgdGhhdCBnZW5lcmljYWxseSBhY2NlcHRzIGFueSBTUUwgcXVlcnkuCiAqCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJHNxbCAtIFRoZSBTUUwgcXVlcnkgdG8gZXhlY3V0ZQogKiBAcHJvcGVydHkgaW50ICAgICRsaW1pdCAtIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gcmV0dXJuIGluIG9uZSByZWNvcmRzZXQKICogQHByb3BlcnR5IGludCAgICAkb2Zmc2V0IC0gVGhlIG9mZnNldCB0byBiZWdpbiByZXR1cm5pbmcgZWxlbWVudHMKICogQHByb3BlcnR5IGFycmF5ICAkcGFybXMgU1FMIFF1ZXJ5IHBhcmFtZXRlcnMgKG11c3QgYmUgc3BlY2lmaWVkIGluIHRoZSBwcm9wZXIgb3JkZXIpCiAqLwpjbGFzcyBzcWxfcXVlcnkgZXh0ZW5kcyBxdWVyeQp7CiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2RhdGEgPSBhcnJheSgnc3FsJz0+bnVsbCwnbGltaXQnPT4xMDAwLCdvZmZzZXQnPT4wLCdwYXJtcyc9PmFycmF5KCkpOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0b3IKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhcm1zIENvbnN0cnVjdGlvbiBwYXJhbWV0ZXJzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHBhcm1zID0gYXJyYXkoKSkKICAgIHsKICAgICAgICBmb3JlYWNoKCAkcGFybXMgYXMgJGtleSA9PiAkdmFsICkgewogICAgICAgICAgICBpZiggYXJyYXlfa2V5X2V4aXN0cygka2V5LCR0aGlzLT5fZGF0YSkgKSAkdGhpc1ska2V5XSA9ICR2YWw7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gT2Zmc2V0R2V0KCRrZXkpCiAgICB7CiAgICAgICAgaWYoIGlzc2V0KCR0aGlzLT5fZGF0YVska2V5XSkgKSByZXR1cm4gJHRoaXMtPl9kYXRhWyRrZXldOwogICAgICAgIHRocm93IG5ldyBcQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJGtleS4nIGlzIG5vdCBhIHZhbGlkIG1lbWJlciBvZiAnLl9fQ0xBU1NfXyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBPZmZzZXRTZXQoJGtleSwkdmFsdWUpCiAgICB7CiAgICAgICAgaWYoICFhcnJheV9rZXlfZXhpc3RzKCRrZXksJHRoaXMtPl9kYXRhKSApIHRocm93IG5ldyBcQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJGtleS4nIGlzIG5vdCBhIHZhbGlkIG1lbWJlciBvZiAnLl9fQ0xBU1NfXyk7CiAgICAgICAgc3dpdGNoKCAka2V5ICkgewogICAgICAgIGNhc2UgJ3NxbCc6CiAgICAgICAgICAgICR0aGlzLT5fZGF0YVska2V5XSA9ICR2YWx1ZTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2xpbWl0JzoKICAgICAgICAgICAgJHZhbHVlID0gbWF4KDEsbWluKDEwMDAsKGludCkkdmFsdWUpKTsKICAgICAgICAgICAgJHRoaXMtPl9kYXRhWyRrZXldID0gJHZhbHVlOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnb2Zmc2V0JzoKICAgICAgICAgICAgJHZhbCA9IG1heCgwLG1pbig5MDAwMDAwLChpbnQpJHZhbHVlKSk7CiAgICAgICAgICAgICR0aGlzLT5fZGF0YVska2V5XSA9ICR2YWx1ZTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ3Bhcm1zJzoKICAgICAgICAgICAgaWYoIGlzX251bGwoJHZhbHVlKSB8fCBjb3VudCgkdmFsdWUpID09IDAgKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSBhcnJheSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYoIGlzX2FycmF5KCR2YWx1ZSkgJiYgY291bnQoJHZhbHVlKSA+IDAgKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKCiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBPZmZzZXRFeGlzdHMoJGtleSkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfa2V5X2V4aXN0cygka2V5LCR0aGlzLT5fZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlIHRoZSBxdWVyeSBhbmQgcmV0dXJuIGEgcmVzdWx0c2V0CiAgICAgKgogICAgICogQHJldHVybiBzcWxfcmVzdWx0c2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiAmZXhlY3V0ZSgpCiAgICB7CiAgICAgICAgJHJzID0gbmV3IHNxbF9yZXN1bHRzZXQoJHRoaXMpOwogICAgICAgIHJldHVybiAkcnM7CiAgICB9Cn0gLy8gZW5kIG9mIGNsYXNzCgoKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/query/class.sql_resultset.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc3FsX3Jlc3VsdHNldCBjbGFzcy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IFF1ZXJ5CiAqIEBhdXRob3IgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTQgYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XHF1ZXJ5OwoKLyoqCiAqIEEgY2xhc3MgdG8gYWxsb3cgaXRlcmF0aW5nIGFuZCBmZXRjaGluZyB0aGUgcmVzdWx0cyBmcm9tIGFuIFNRTCBxdWVyeS4KICovCmNsYXNzIHNxbF9yZXN1bHRzZXQgZXh0ZW5kcyByZXN1bHRzZXQKewogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RvcgogICAgICoKICAgICAqIEBwYXJhbSBzcWxfcXVlcnkgJHF1ZXJ5IFRoZSBpbnB1dCBxdWVyeSBvYmplY3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHNxbF9xdWVyeSAkcXVlcnkpCiAgICB7CiAgICAgICAgJHRoaXMtPl9maWx0ZXIgPSAkcXVlcnk7CiAgICAgICAgJHRoaXMtPl9xdWVyeSgpOwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICogQGludGVybmFsCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfcXVlcnkoKQogICAgewogICAgICAgIGlmKCAkdGhpcy0+X3JzICkgcmV0dXJuOwoKICAgICAgICAkc3FsID0gJHRoaXMtPl9maWx0ZXJbJ3NxbCddOwogICAgICAgIC8vIGdldCB0aGUgZmlyc3QgdHdvIHdvcmRzIG91dCBvZiB0aGUgcXVlcnkKICAgICAgICBsaXN0KCR3MSwkdzIsJGp1bmspID0gZXhwbG9kZSgnICcsJHNxbCk7CiAgICAgICAgaWYoIHN0cnRvdXBwZXIoJHcxKSA9PSAnU0VMRUNUJyApIHsKICAgICAgICAgICAgaWYoIHN0cnRvdXBwZXIoJHcyKSAhPSAnU1FMX0NBTENfRk9VTkRfUk9XUycpIHsKICAgICAgICAgICAgICAgIC8vIGluamVjdCBTUUxfQ0FMQ19GT1VORF9ST1dTCiAgICAgICAgICAgICAgICAkc3FsID0gc3Vic3RyX3JlcGxhY2UoJHNxbCwnU0VMRUNUIFNRbF9DQUxDX0ZPVU5EX1JPV1MnLDAsc3RybGVuKCdTRUxFQ1QnKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRkYiA9IFx4dF91dGlsczo6Z2V0X2RiKCk7CiAgICAgICAgJHRoaXMtPl9ycyA9ICRkYi0+U2VsZWN0TGltaXQoJHNxbCwgJHRoaXMtPl9maWx0ZXJbJ2xpbWl0J10sICR0aGlzLT5fZmlsdGVyWydvZmZzZXQnXSwgJHRoaXMtPl9maWx0ZXJbJ3Bhcm1zJ10pOwogICAgICAgICR0aGlzLT5fdG90YWxtYXRjaGluZyA9IChpbnQpICRkYi0+R2V0T25lKCdTRUxFQ1QgRk9VTkRfUk9XUygpJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc3VsdHNldC4KICAgICAqCiAgICAgKiBJbiB0aGlzIGNsYXNzLCB0aGUgbWV0aG9kIHJldHVybnMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgcmVwcmVzZW50aW5nIGEgc2luZ2xlIHJvdy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uICZnZXRfb2JqZWN0KCkKICAgIHsKICAgICAgICAkcm93ID0gJHRoaXMtPmZpZWxkczsKICAgICAgICByZXR1cm4gJHJvdzsKICAgIH0KfSAvLyBlbmQgb2YgY2xhc3MKCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/query/class.txtfilequery.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB0eHRmaWxlcXVlcnkgY2xhc3MKICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IFF1ZXJ5CiAqIEBhdXRob3IgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XHF1ZXJ5OwoKLyoqCiAqIEEgY2xhc3MgdG8gZ2VuZXJhdGUgYSBxdWVyeSBvYmplY3QgZnJvbSBhIHRleHQgZmlsZS4KICoKICogQHByb3BlcnR5IGludCAkbGltaXQgVGhlIGxpbWl0IG9mIHJlY29yZHMgdG8gdXNlCiAqIEBwcm9wZXJ0eSBpbnQgJG9mZnNldCBUaGUgc3RhcnQgcmVjb3JkIChsaW5lKSB0byB1c2UgaW4gdGhlIHJlcG9ydC4KICogQHByb3BlcnR5IHN0cmluZyAkZmlsZW5hbWUgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGZpbGUgdG8gdXNlIGluIHRoZSByZXBvcnQuCiAqLwpjbGFzcyB0eHRmaWxlcXVlcnkgZXh0ZW5kcyBxdWVyeQp7CiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2RhdGEgPSBhcnJheSgnbGltaXQnPT41MDAsJ29mZnNldCc9PjAsJ2ZpbGVuYW1lJz0+bnVsbCk7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RvcgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcGFybXMgVGhlIGRlZmF1bHQgcHJvcGVydGllcyBmb3IgdGhpcyBvYmplY3QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcGFybXMgPSBhcnJheSgpKQogICAgewogICAgICAgIGZvcmVhY2goICRwYXJtcyBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgICAgICR0aGlzLT5PZmZzZXRTZXQoJGtleSwkdmFsKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBPZmZzZXRHZXQoJGtleSkKICAgIHsKICAgICAgICBpZiggYXJyYXlfa2V5X2V4aXN0cygka2V5LCR0aGlzLT5fZGF0YSkgKSByZXR1cm4gJHRoaXMtPl9kYXRhWyRrZXldOwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gT2Zmc2V0U2V0KCRrZXksJHZhbCkKICAgIHsKICAgICAgICBzd2l0Y2goICRrZXkgKSB7CiAgICAgICAgY2FzZSAnbGltaXQnOgogICAgICAgICAgICAkdmFsID0gKGludCkkdmFsOwogICAgICAgICAgICAkdmFsID0gbWF4KDEsJHZhbCk7CiAgICAgICAgICAgICR2YWwgPSBtaW4oMTAwMCwkdmFsKTsKICAgICAgICAgICAgJHRoaXMtPl9kYXRhWyRrZXldID0gJHZhbDsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ29mZnNldCc6CiAgICAgICAgICAgICR2YWwgPSAoaW50KSR2YWw7CiAgICAgICAgICAgICR2YWwgPSBtYXgoMCwkdmFsKTsKICAgICAgICAgICAgJHRoaXMtPl9kYXRhWyRrZXldID0gJHZhbDsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2ZpbGVuYW1lJzoKICAgICAgICAgICAgJHZhbCA9IHRyaW0oJHZhbCk7CiAgICAgICAgICAgIGlmKCAhaXNfcmVhZGFibGUoJHZhbCkgKSB0aHJvdyBuZXcgXENtc0ludmFsaWREYXRhRXhjZXB0aW9uKCdGaWxlICcuJHZhbC4nIGRvZXMgbm90IGV4aXN0IGZvciAnLl9fQ0xBU1NfXyk7CiAgICAgICAgICAgICR0aGlzLT5fZGF0YVska2V5XSA9ICR2YWw7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgXENtc0ludmFsaWREYXRhRXhjZXB0aW9uKCRrZXkuJyBpcyBub3QgYSB2YWxpZCBwcm9wZXJ0eSBmb3IgYSAnLl9fQ0xBU1NfXy4nIG9iamVjdCcpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIE9mZnNldEV4aXN0cygka2V5KQogICAgewogICAgICAgIGlmKCBhcnJheV9rZXlfZXhpc3RzKCRrZXksJHRoaXMtPl9kYXRhKSApIHJldHVybiBUUlVFOwogICAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KCiAgICAvKioKICAgICAqIEV4ZWN1dGUgdGhlIHF1ZXJ5IGFuZCByZXR1cm4gYSByZXN1bHRzZXQuCiAgICAgKgogICAgICogQHJldHVybiB0eHRmaWxlcmVzdWx0c2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiAmZXhlY3V0ZSgpCiAgICB7CiAgICAgICAgJG9iaiA9IG5ldyB0eHRmaWxlcmVzdWx0c2V0KCR0aGlzKTsKICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KfQ==]]></data>
	</file>
	<file>
	  <filename>/lib/query/class.txtfileresultset.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB0eHRmaWxlcmVzdWx0c2V0IGNsYXNzCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBRdWVyeQogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCm5hbWVzcGFjZSBDTVNNU0V4dFxxdWVyeTsKCi8qKgogKiBBIGNsYXNzIHRvIHJldHVybiBsaW5lcyBvdXQgb2YgYSB0ZXh0IGZpbGUsIHN1aXRhYmxlIGZvciB1c2luZyBpbiBzb21lIHJlcG9ydHMuCiAqIG5vdGU6IGl0IG1heSBub3QgYmUgc3VpdGFibGUgdG8gdXNlIGEgdGV4dCBmaWxlIGluIGEgdGFidWxhciByZXBvcnQuCiAqCiAqIEBwcm9wZXJ0eSBzdHJpbmcgJGZpZWxkcyBHZXQgdGhlIGN1cnJlbnQgcmVjb3JkIChpbiB0aGlzIGNhc2UgYSBsaW5lKS4KICogQHNlZSB0eHRmaWxlcXVlcnkKICovCmNsYXNzIHR4dGZpbGVyZXN1bHRzZXQgZXh0ZW5kcyByZXN1bHRzZXQKewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9maWxlb2JqOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3F1ZXJ5KCkKICAgIHsKICAgICAgICBpZiggaXNfb2JqZWN0KCR0aGlzLT5fZmlsZW9iaikgKSByZXR1cm47CgogICAgICAgICR0aGlzLT5fZmlsZW9iaiA9IG5ldyBcU3BsRmlsZU9iamVjdCgkdGhpcy0+X2ZpbHRlclsnZmlsZW5hbWUnXSk7CiAgICAgICAgJHRoaXMtPl9maWxlb2JqLT5zZWVrKCR0aGlzLT5fZmlsdGVyWydvZmZzZXQnXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgka2V5KQogICAgewogICAgICAgIGlmKCAka2V5ID09ICdmaWVsZHMnICkgewogICAgICAgICAgICAkcmVjID0gYXJyYXkoKTsKICAgICAgICAgICAgJHJlY1snbGluZSddID0gJHRoaXMtPl9maWxlb2JqLT5rZXkoKSArIDE7CiAgICAgICAgICAgICRyZWNbJ3RleHQnXSA9ICR0aGlzLT5fZmlsZW9iai0+Y3VycmVudCgpOwogICAgICAgICAgICByZXR1cm4gJHJlYzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBhcmVudDo6X19nZXQoJGtleSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGZpbGUgb2JqZWN0IHVzZWQgaW4gdGhpcyBxdWVyeS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFxTcGxGaWxlT2JqZWN0CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiAmZ2V0X2ZpbGVvYmplY3QoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2ZpbGVvYmo7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiByZWNvcmRzIHRoYXQgbWF0Y2ggdGhpcyBxdWVyeS4KICAgICAqIGluIHRoZSBjYXNlIG9mIHRoaXMgb2JqZWN0LCBhcyBubyBsaW5lIGNvdW50aW5nIGlzIHBlcmZvcm1lZCwgdGhpcyBtZXRob2QgYWx3YXlzIHJldHVybnMgdGhlIGxpbWl0IHByb3BlcnR5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gUmVjb3JkQ291bnQoKQogICAgewogICAgICAgICRoaXMtPl9xdWVyeSgpOwogICAgICAgIHJldHVybiAkdGhpcy0+X2ZpbHRlclsnbGltaXQnXTsKICAgIH0KCiAgICAvKioKICAgICAqIE1vdmUgdG8gdGhlIG5leHQgcmVjb3JkIChsaW5lKSB0aGF0IG1hdGNoZXMgdGhlIHF1ZXJ5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gTW92ZU5leHQoKQogICAgewogICAgICAgICR0aGlzLT5fcXVlcnkoKTsKICAgICAgICAkbGluZV9udW0gPSAkdGhpcy0+X2ZpbGVvYmotPmtleSgpOwogICAgICAgICR0aGlzLT5fZmlsZW9iai0+c2VlaygkbGluZV9udW0rMSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBNb3ZlIHRvIHRoZSBmaXJzdCByZWNvcmQgKGxpbmUpIHRoYXQgbWF0Y2hlcyB0aGUgcXVlcnkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBNb3ZlRmlyc3QoKQogICAgewogICAgICAgICR0aGlzLT5fcXVlcnkoKTsKICAgICAgICAkdGhpcy0+X2ZpbGVvYmotPnNlZWsoJHRoaXMtPl9maWx0ZXJbJ29mZnNldCddKTsKICAgIH0KCiAgICAvKioKICAgICAqIFRlc3QgaWYgd2UgYXJlIGF0IHRoZSBlbmQgb2Ygb3VyIHF1ZXJ5IG1hdGNoZXMuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBFT0YoKQogICAgewogICAgICAgICR0aGlzLT5fcXVlcnkoKTsKICAgICAgICAkbGluZSA9ICR0aGlzLT5fZmlsZW9iai0+a2V5KCk7CiAgICAgICAgaWYoICR0aGlzLT5fZmlsZW9iai0+ZW9mKCkgfHwgJGxpbmUgPj0gJHRoaXMtPl9maWx0ZXJbJ29mZnNldCddICsgJHRoaXMtPl9maWx0ZXJbJ2xpbWl0J10gKSByZXR1cm4gVFJVRTsKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICB9CgogICAgLyoqCiAgICAgKiBDbG9zZSB0aGUgZmlsZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gQ2xvc2UoKSB7IH0KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgdG90YWwgbnVtYmVyIG9mIHJlY29yZHMgKGxpbmVzKSB0aGF0IG1hdGNoIG91ciBxdWVyeS4KICAgICAqIEFzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhcmUgbm90IHNjYW5uZWQsIHRoaXMgbWV0aG9kIGFsd2F5cyByZXR1cm5zIC0xCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBUb3RhbE1hdGNoZXMoKQogICAgewogICAgICAgIHJldHVybiAtMTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIGNsYXNzCiAgICAgKgogICAgICogQHJldHVybiBcU3RkQ2xhc3MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uICZnZXRfb2JqZWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+X3F1ZXJ5KCk7CiAgICAgICAgJGZpZWxkcyA9ICR0aGlzLT5maWVsZHM7CiAgICAgICAgJG9iaiA9IG5ldyBcU3RkY2xhc3M7CiAgICAgICAgZm9yZWFjaCggJGZpZWxkcyBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgICAgICRvYmotPiRrZXkgPSAkdmFsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KCn0gLy8gZW5kIG9mIGNsYXNzCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/reports</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/reports/class.data_report_generator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBkYXRhIHJlcG9ydCBnZW5lcmF0b3IgY2xhc3MuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBSZXBvcnRzCiAqIEBhdXRob3IgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XHJlcG9ydHM7CgovKioKICogVGhpcyBjbGFzcyBkZWZpbmVzIGEgcmVwb3J0IGdlbmVyYXRvciB0aGF0IHdpbGwgb3V0cHV0IGFuIGFycmF5IG9mIGRhdGEgcmF0aGVyIHRoYW4gYW55IGZvcm1hdHRlZCBvdXRwdXQuCiAqIGZvb3RlcnMgYW5kIGhlYWRlcnMgY2FuIHN0aWxsIGJlIHVzZWQgdG8gZ2F0aGVyIHRvdGFscywgZXRjLgogKi8KY2xhc3MgZGF0YV9yZXBvcnRfZ2VuZXJhdG9yIGV4dGVuZHMgdGFidWxhcl9yZXBvcnRfZ2VuZXJhdG9yCnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfZGF0YSA9IGFycmF5KCdzdHJ1Y3R1cmUnPT5hcnJheSgpKTsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX3JlYzsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHN0YXJ0KCkKICAgIHsKICAgICAgICAkdGhpcy0+X2RhdGFbJ3RpdGxlJ10gPSAkdGhpcy0+cmVwb3J0KCktPmdldF90aXRsZSgpOwogICAgICAgICR0aGlzLT5fZGF0YVsnZGVzY3JpcHRpb24nXSA9ICR0aGlzLT5yZXBvcnQoKS0+Z2V0X2Rlc2NyaXB0aW9uKCk7CiAgICAgICAgJHRoaXMtPl9kYXRhWydnZW5lcmF0ZWQnXSA9IHRpbWUoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJlZm9yZV9ncm91cF9oZWFkZXJzKCkKICAgIHsKICAgICAgICAkdGhpcy0+X3JlYyA9IGFycmF5KCdoZWFkZXJzJz0+YXJyYXkoKSwnZm9vdGVycyc9PmFycmF5KCksJ2JvZHknPT5hcnJheSgpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGRvX2dyb3VwX2hlYWRlcih0YWJ1bGFyX3JlcG9ydF9kZWZuX2dyb3VwICRncnApCiAgICB7CiAgICAgICAgLy8gdGhpcyBtZXRob2QgZG9lcyBub3QgY2FsbCB0aGUgcGFyZW50IG1ldGhvZAogICAgICAgICRsaW5lcyA9ICRncnAtPmdldF9oZWFkZXJfbGluZXMoKTsKICAgICAgICBpZiggY291bnQoJGxpbmVzKSApIHsKICAgICAgICAgICAgZm9yZWFjaCggJGxpbmVzIGFzICRsaW5lICkgewogICAgICAgICAgICAgICAgJHJlYyA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICBmb3JlYWNoKCAkdGhpcy0+cmVwb3J0KCktPmdldF9jb2x1bW5zKCkgYXMgJGtleSA9PiAkY29sICkgewogICAgICAgICAgICAgICAgICAgICR2YWwgPSAkbGluZS0+Z2V0X2NvbHVtbl92YWx1ZSgka2V5KTsKICAgICAgICAgICAgICAgICAgICAkcmVjWyRrZXldID0gJHRoaXMtPmdldF9ncm91cF9jb2x1bW5fZGlzcGxheV92YWx1ZSgka2V5LCRncnAtPmdldF9jb2x1bW4oKSwkdmFsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR0aGlzLT5fcmVjWydoZWFkZXJzJ11bXSA9ICRyZWM7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRvX2dyb3VwX2Zvb3Rlcih0YWJ1bGFyX3JlcG9ydF9kZWZuX2dyb3VwICRncnApCiAgICB7CiAgICAgICAgLy8gdGhpcyBtZXRob2QgZG9lcyBub3QgY2FsbCB0aGUgcGFyZW50IG1ldGhvZAogICAgICAgICRsaW5lcyA9ICRncnAtPmdldF9mb290ZXJfbGluZXMoKTsKICAgICAgICBpZiggY291bnQoJGxpbmVzKSApIHsKICAgICAgICAgICAgZm9yZWFjaCggJGxpbmVzIGFzICRsaW5lICkgewogICAgICAgICAgICAgICAgJHJlYyA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICBmb3JlYWNoKCAkdGhpcy0+cmVwb3J0KCktPmdldF9jb2x1bW5zKCkgYXMgJGtleSA9PiAkY29sICkgewogICAgICAgICAgICAgICAgICAgICR2YWwgPSAkbGluZS0+Z2V0X2NvbHVtbl92YWx1ZSgka2V5KTsKICAgICAgICAgICAgICAgICAgICAkcmVjWyRrZXldID0gJHRoaXMtPmdldF9ncm91cF9jb2x1bW5fZGlzcGxheV92YWx1ZSgka2V5LCRncnAtPmdldF9jb2x1bW4oKSwkdmFsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR0aGlzLT5fcmVjWydmb290ZXJzJ11bXSA9ICRyZWM7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gdGhpcyBncm91cCBoYXMgY2hhbmdlZCwgZ28gdGhyb3VnaCBhbGwgY29sdW1ucyBhbmQgcmVzZXQgdGhpcyBncm91cAogICAgICAgIGZvcmVhY2goICR0aGlzLT5yZXBvcnQoKS0+Z2V0X2NvbHVtbnMoKSBhcyAka2V5ID0+ICRjb2wgKSB7CiAgICAgICAgICAgICRjb2wtPnJlc2V0X2dyb3VwKCRncnAtPmdldF9jb2x1bW4oKSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBmdW5jdGlvbiBhZnRlcl9ncm91cF9mb290ZXJzKCkKICAgIHsKICAgICAgICAkdGhpcy0+X2RhdGFbJ3N0cnVjdHVyZSddW10gPSAkdGhpcy0+X3JlYzsKICAgICAgICAkdGhpcy0+X3JlYyA9IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBzZXRfcm93KCRyb3cpCiAgICB7CiAgICAgICAgcGFyZW50OjpzZXRfcm93KCRyb3cpOwogICAgICAgICR0aGlzLT5fcmVjWydib2R5J11bXSA9ICRyb3c7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBkcmF3X2NlbGwodGFidWxhcl9yZXBvcnRfY2VsbGZtdCAkY29sLCR2YWwpCiAgICB7CiAgICAgICAgLy8gbm90aGluZyB0byBkbyBoZXJlLgogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBvdXRwdXQgZGF0YSBmcm9tIHRoaXMgcmVwb3J0LgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9vdXRwdXQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2RhdGE7CiAgICB9Cn0gLy8gZW5kIG9mIGNsYXNzCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/reports/class.formatted_report_defn.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBhYnN0cmFjdCByZXBvcnQgZGVmaW5pdGlvbiBjbGFzcy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IFJlcG9ydHMKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCgpuYW1lc3BhY2UgQ01TTVNFeHRccmVwb3J0czsKCi8qKgogKiBBIHNpbXBsZSBjbGFzcyB0aGF0IGdlbmVyYXRlcyBhIHJlcG9ydCB1c2luZyBhIHRlbXBsYXRlIHRvIGZvcm1hdCB0aGUgbGF5b3V0IG9mIGVhY2ggaXRlbSBvciByb3cuCiAqIFRoaXMgY2xhc3MgaXMgdXNlZCBieSB0aGUgZm9ybWF0dGVkX3JlcG9ydF9nZW5lcmF0b3IgdG8gZ2VuZXJhdGUgb3V0cHV0LgogKgogKiBAc2VlIGZvcm1hdHRlZF9yZXBvcnRfZ2VuZXJhdG9yCiAqLwpjbGFzcyBmb3JtYXR0ZWRfcmVwb3J0X2RlZm4gZXh0ZW5kcyByZXBvcnRfZGVmbgp7CiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2l0ZW1fdGVtcGxhdGU7CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGl0ZW0gdGVtcGxhdGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdHBsIFRoZSBuYW1lIG9mIHRoZSBpdGVtIHRlbXBsYXRlLiBJZiB0aGUgcGFyYW1ldGVyIGVuZHMgd2l0aCAudHBsIGEgZmlsZSB0ZW1wbGF0ZSB3aWxsIGJlIGFzc3VtZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfaXRlbV90ZW1wbGF0ZSgkdHBsKQogICAgewogICAgICAgICR0cGwgPSB0cmltKCR0cGwpOwogICAgICAgIGlmKCAkdHBsICkgJHRoaXMtPl9pdGVtX3RlbXBsYXRlID0gJHRwbDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgbmFtZSBvZiB0aGUgaXRlbSB0ZW1wbGF0ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2l0ZW1fdGVtcGxhdGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2l0ZW1fdGVtcGxhdGU7CiAgICB9Cgp9IC8vIGVuZCBvZiBjbGFzcwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/reports/class.formatted_report_generator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBhYnN0cmFjdCByZXBvcnQgZ2VuZXJhdG9yIGNsYXNzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKiBAY2F0ZWdvcnkgUmVwb3J0cwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCm5hbWVzcGFjZSBDTVNNU0V4dFxyZXBvcnRzOwoKLyoqCiAqIEEgY2xhc3MgdG8gZ2VuZXJhdGUgYSByZXBvcnQgdXNpbmcgYSBzcGVjaWFsIHRlbXBsYXRlIGZvciBlYWNoIHJvdyBvciBpdGVtLgogKi8KY2xhc3MgZm9ybWF0dGVkX3JlcG9ydF9nZW5lcmF0b3IgZXh0ZW5kcyByZXBvcnRfZ2VuZXJhdG9yCnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfcmVwb3J0ID0gYXJyYXkoKTsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX291dDsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2RvY190ZW1wbGF0ZTsKCiAgICAvKioKICAgICAqIE9iamVjdCBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBAcGFyYW0gZm9ybWF0dGVkX3JlcG9ydF9kZWZuICRycHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGZvcm1hdHRlZF9yZXBvcnRfZGVmbiAkcnB0KQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJHJwdCk7CgogICAgICAgICR0bXAgPSBhcnJheSgpOwogICAgICAgICR0bXBbJ3RpdGxlJ10gPSAkdGhpcy0+cmVwb3J0KCktPmdldF90aXRsZSgpOwogICAgICAgICR0bXBbJ2Rlc2NyaXB0aW9uJ10gPSAkdGhpcy0+cmVwb3J0KCktPmdldF9kZXNjcmlwdGlvbigpOwogICAgICAgICR0bXBbJ2dlbmVyYXRlZCddID0gdGltZSgpOwogICAgICAgICR0bXBbJ2l0ZW1zJ10gPSBhcnJheSgpOwogICAgICAgICR0aGlzLT5fcmVwb3J0ID0gJHRtcDsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgdGVtcGxhdGUgdG8gYmUgdXNlZCBmb3IgZm9ybWF0dGluZyB0aGUgZG9jdW1lbnQuCiAgICAgKiBUaGUgZG9jdW1lbnQgdGVtcGxhdGUgaXMgYSBzbWFydHkgdGVtcGxhdGUgdGhhdCBzaG91bGQgYXQgdGhlIG1pbmltdW0gY29uc2lzdCBvZiBhIHtmb3JlYWNoICRpdGVtcyBhcyAkaXRlbX0uLi57L2ZvcmVhY2h9IGxvb3AuCiAgICAgKiBFYWNoIGl0ZW0gaW4gdGhlIGxvb3Agd2lsbCBiZSBhbiBIVE1MIHN0cmluZyByZXByZXNlbnRpbmcgZWFjaCBmb3JtYXR0ZWQgaXRlbS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0cGwgVGhlIHRlbXBsYXRlIGNvbnRlbnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X3RlbXBsYXRlKCR0cGwpCiAgICB7CiAgICAgICAgJHRoaXMtPl9kb2NfdGVtcGxhdGUgPSB0cmltKCR0cGwpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBkb2N1bWVudCB0ZW1wbGF0ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0X3RlbXBsYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9kb2NfdGVtcGxhdGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBQcm9jZXNzIHRoZSBzcGVjaWZpZmVkIHRlbXBsYXRlIHRocm91Z2ggc21hcnR5LgogICAgICogVGhpcyBtZXRob2Qgd2lsbCBhdHRlbXB0IHRvIGZpbmQgdGhlIGN1cnJlbnQgYWN0aW9uIG1vZHVsZSwgYW5kIGdpdmVuIHRoYXQgYW5kIHRoZSBuYW1lIG9mIHRoZSB0ZW1wbGF0ZSBmaW5kIHRoZSB0ZW1wbGF0ZSBjb250ZW50cy4KICAgICAqIGlmIHRoZSB0ZW1wbGF0ZSBuYW1lIGVuZHMgd2l0aCAudHBsIGEgbW9kdWxlIGZpbGUgdGVtcGxhdGUgaXMgYXNzdW1lZC4gIE90aGVyd2lzZSwgYSBtb2R1bGUgZGF0YWJhc2UgdGVtcGxhdGUgd2lsbCBiZSBhc3N1bWVkLgogICAgICogSWYgYSBtb2R1bGUgY2Fubm90IGJlIGRldGVybWluZWQsIHRoZW4gYSBmaWxlIHRlbXBsYXRlIGlzIGFzc3VtZWQsIHVzaW5nIHRoZSAnZmlsZScgc21hcnR5IHJlc291cmNlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRwbCBUaGUgbmFtZSBvZiB0aGUgdGVtcGxhdGUgdG8gcHJvY2Vzcy4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHByb2Nlc3NfdGVtcGxhdGUoJHRwbCkKICAgIHsKICAgICAgICAkc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7CiAgICAgICAgJGFjdGlvbm1vZHVsZSA9ICRzbWFydHktPmdldF90ZW1wbGF0ZV92YXJzKCdhY3Rpb25tb2R1bGUnKTsKICAgICAgICBpZiggJGFjdGlvbm1vZHVsZSApIHsKICAgICAgICAgICAgJG1vZCA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJGFjdGlvbm1vZHVsZSk7CiAgICAgICAgICAgIGlmKCBpc19vYmplY3QoJG1vZCkgKSB7CiAgICAgICAgICAgICAgICBpZiggZW5kc3dpdGgoJHRwbCwnLnRwbCcpICkgewogICAgICAgICAgICAgICAgICAgICRvdXQgPSAkbW9kLT5Qcm9jZXNzVGVtcGxhdGUoJHRwbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkb3V0ID0gJG1vZC0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCR0cGwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkb3V0ID0gJHNtYXJ0eS0+ZmV0Y2goJ2ZpbGU6Jy4kdHBsKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBBIGNhbGxiYWNrIG1ldGhvZCBmb3IgcHJvY2Vzc2luZyBlYWNoIHJvdy4KICAgICAqIEJ5IGRlZmF1bHQsIHRoaXMgbWV0aG9kIGdpdmVzIHRoZSBpdGVtL3JvdyB0byBzbWFydHkgYW5kIGNhbGxzIHRoZSBpdGVtIHRlbXBsYXRlIHNwZWNpZmllZCBpbiB0aGUgcmVwb3J0IGRlZmluaXRpb24uCiAgICAgKgogICAgICogQGFic3RyYWN0CiAgICAgKiBAcGFyYW0gbWl4ZWQgJGl0ZW0gVGhlIGl0ZW0gdG8gYmUgcHJvY2Vzc2VkLgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBlYWNoX3JvdygkaXRlbSkKICAgIHsKICAgICAgICAkdHBsID0gJHRoaXMtPnJlcG9ydCgpLT5nZXRfaXRlbV90ZW1wbGF0ZSgpOwogICAgICAgIGlmKCAhJHRwbCApIHJldHVybjsKCiAgICAgICAgJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOwogICAgICAgICRzbWFydHktPmFzc2lnbignaXRlbScsJGl0ZW0pOwogICAgICAgICR0aGlzLT5fcmVwb3J0WydpdGVtcyddW10gPSAkdGhpcy0+cHJvY2Vzc190ZW1wbGF0ZSgkdHBsKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlIHRoZSBvdXRwdXQgb2YgdGhpcyByZXBvcnQuCiAgICAgKgogICAgICogQGFic3RyYWN0CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdlbmVyYXRlKCkKICAgIHsKICAgICAgICAkdGhpcy0+c3RhcnQoKTsKICAgICAgICAkcnMgPSAkdGhpcy0+cmVwb3J0KCktPmdldF9yZXN1bHRzZXQoKTsKICAgICAgICB3aGlsZSggISRycy0+RU9GICkgewogICAgICAgICAgICAkdGhpcy0+ZWFjaF9yb3coJHJzLT5nZXRfb2JqZWN0KCkpOwogICAgICAgICAgICAkcnMtPk1vdmVOZXh0KCk7CiAgICAgICAgfQogICAgICAgIHVuc2V0KCRycyk7CiAgICAgICAgJHRoaXMtPmZpbmlzaCgpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBvdXRwdXQgb2YgdGhlIHJlcG9ydCwgYWZ0ZXIgZ2VuZXJhdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkIFRoZSBvdXRwdXQgb2YgdGhpcyBjbGFzcyBkZXBlbmRzIHVwb24gdGhlIGNvbnRlbnQgb2YgdGhlIHJlcG9ydCwgYW5kIGl0ZW0gdGVtcGxhdGVzIHBhc3NlZCB0byB0aGlzIG9iamVjdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9vdXRwdXQoKQogICAgewogICAgICAgIGlmKCAhY291bnQoJHRoaXMtPl9yZXBvcnRbJ2l0ZW1zJ10pICkgcmV0dXJuOwoKICAgICAgICAkc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7CiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdyZXBvcnQnLCR0aGlzLT5fcmVwb3J0KTsKICAgICAgICByZXR1cm4gJHRoaXMtPnByb2Nlc3NfdGVtcGxhdGUoJHRoaXMtPmdldF90ZW1wbGF0ZSgpKTsKICAgIH0KfSAvLyBlbmQgb2YgY2xhc3MKCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/reports/class.html_report_generator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBhYnN0cmFjdCB0YWJ1bGFyIHJlcG9ydCBnZW5lcmF0b3IgY2xhc3MuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBSZXBvcnRzCiAqIEBhdXRob3IgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XHJlcG9ydHM7CgovKioKICogQW4gYWJzdHJhY3QgY2xhc3MgdG8gcHJvdmlkZSB0aGUgYmFzaWNzIGZvciBvdXRwdXR0aW5nIGFuIEhUTUwgcmVwb3J0LgogKi8KYWJzdHJhY3QgY2xhc3MgaHRtbF9yZXBvcnRfZ2VuZXJhdG9yIGV4dGVuZHMgdGFidWxhcl9yZXBvcnRfZ2VuZXJhdG9yCnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfaW5fdGFibGU7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9zdGF0dXM7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9vdXQ7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9hbGlhczsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2N1cmdyb3VwOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfc3R5bGVzaGVldHMgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfaWR4OwoKICAgIC8qKgogICAgICogQW4gYWJzdHJhY3QgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgbyBvdXRwdXQgSFRNTCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQuCiAgICAgKiBkb2VzIG5vdCBpbmNsdWRlIHRoZSBlbmRpbmcgYm9keSBvciBodG1sIHRhZ3MuCiAgICAgKgogICAgICogQGFic3RyYWN0CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZG9faGVhZGVyKCkKICAgIHsKICAgICAgICAkb3V0ID0gbnVsbDsKICAgICAgICAkdGl0bGUgPSAkdGhpcy0+cmVwb3J0KCktPmdldF90aXRsZSgpOwogICAgICAgIGlmKCAkdGl0bGUgKSAkb3V0IC49ICc8aDE+Jy5odG1sZW50aXRpZXMoJHRpdGxlLEVOVF9RVU9URVMpLic8L2gxPic7CiAgICAgICAgJGRlc2MgPSAkdGhpcy0+cmVwb3J0KCktPmdldF9kZXNjcmlwdGlvbigpOwogICAgICAgIGlmKCAkZGVzYyApICRvdXQgLj0gJzxwIGNsYXNzPSJkZXNjcmlwdGlvbiI+Jy4kZGVzYy4nPC9wPic7CiAgICAgICAgJG91dCAuPSAnPHRhYmxlIGlkPSJyZXBvcnRfZGF0YSI+JzsKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICAvKioKICAgICAqIEFuIGFic3RyYWN0IGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG8gb3V0cHV0IEhUTUwgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50LgogICAgICogZG9lcyBub3QgaW5jbHVkZSB0aGUgZW5kaW5nIGJvZHkgb3IgaHRtbCB0YWdzLgogICAgICoKICAgICAqIEBhYnN0cmFjdAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGRvX2Zvb3RlcigpCiAgICB7CiAgICAgICAgcmV0dXJuICc8L3RhYmxlPic7CiAgICB9CgogICAgLyoqCiAgICAgKiBBbiBhYnN0cmFjdCBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB0byBvdXRwdXQgdGhlIGhlYWQgKGFuZCBiZWdpbm5pbmcgYm9keSB0YWcpIG9mIHRoZSBIVE1MIHJlcG9ydC4KICAgICAqCiAgICAgKiBAYWJzdHJhY3QKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBkb19oZWFkKCkKICAgIHsKICAgICAgICAkb3V0ID0gJzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4nOwogICAgICAgICRvdXQgLj0gJzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBkaXI9Imx0ciIgbGFuZz0iZW4tZ2IiIHhtbDpsYW5nPSJlbi1nYiI+JzsKICAgICAgICAkb3V0IC49ICc8aGVhZD4nOwogICAgICAgICRvdXQgLj0gJzxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPic7CiAgICAgICAgJHRtcCA9ICR0aGlzLT5nZXRfaGVhZF9jb250ZW50cygpOwogICAgICAgIGlmKCAkdG1wICkgJG91dCAuPSAkdG1wLiJcbiI7CiAgICAgICAgJHRpdGxlID0gJHRoaXMtPnJlcG9ydCgpLT5nZXRfdGl0bGUoKTsKICAgICAgICBpZiggJHRpdGxlICkgJG91dCAuPSAnPHRpdGxlPicuaHRtbGVudGl0aWVzKCR0aXRsZSxFTlRfUVVPVEVTKS4nPC90aXRsZT4nOwogICAgICAgICRkZXNjID0gc3RyaXBfdGFncygkdGhpcy0+cmVwb3J0KCktPmdldF9kZXNjcmlwdGlvbigpKTsKICAgICAgICBpZiggJGRlc2MgKSAkb3V0IC49IHNwcmludGYoJzxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSIlcyIvPicsaHRtbGVudGl0aWVzKCRkZXNjLEVOVF9RVU9URVMpKTsKICAgICAgICAkb3V0IC49ICI8L2hlYWQ+XG4iOwogICAgICAgICRvdXQgLj0gJzxib2R5IGlkPSInLiR0aGlzLT5nZXRfYWxpYXMoKS4nIj4nOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gc3RhcnQoKQogICAgewogICAgICAgICRvdXQgPSAkdGhpcy0+ZG9faGVhZCgpOwogICAgICAgICRvdXQgLj0gJHRoaXMtPmRvX2hlYWRlcigpOwoKICAgICAgICAkdGhpcy0+X2luX3RhYmxlID0gVFJVRTsKICAgICAgICAkdGhpcy0+X291dCAuPSAkb3V0OwogICAgICAgIHBhcmVudDo6c3RhcnQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdlZXJhdGUgdGFncyAoc3VjaCBhcyBzdHlsZXNoZWV0IHRhZ3MpIHRoYXQgYXJlIHJlcXVpcmVkIGZvciB0aGUgSEVBRCBwb3J0aW9uIG9mIHRoZSBIVE1MIG91dHB1dC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgSFRNTCB0YWdzIHRvIGdvIGludG8gdGhlIEhFQUQgcG9ydGlvbi4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldF9oZWFkX2NvbnRlbnRzKCkKICAgIHsKICAgICAgICAkb3V0ID0gJyc7CiAgICAgICAgaWYoIGNvdW50KCR0aGlzLT5fc3R5bGVzaGVldHMpICkgewogICAgICAgICAgICAkbW9kID0gXHh0X3V0aWxzOjpnZXRfeHQoKTsKICAgICAgICAgICAgZm9yZWFjaCggJHRoaXMtPl9zdHlsZXNoZWV0cyBhcyAkb25lICkgewogICAgICAgICAgICAgICAgaWYoICFmaWxlX2V4aXN0cygkb25lKSApIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgJHVybCA9IFx4dF91dGlsczo6ZmlsZV90b191cmwoJG9uZSk7CiAgICAgICAgICAgICAgICBpZiggISR1cmwgKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICRvdXQgLj0gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuJHVybC4nIj4nOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmVmb3JlX2xpbmUoKQogICAgewogICAgICAgIHBhcmVudDo6YmVmb3JlX2xpbmUoKTsKICAgICAgICBpZiggJHRoaXMtPl9pbl90YWJsZSApIHsKICAgICAgICAgICAgLy8gc3RhcnQgYSByb3cKICAgICAgICAgICAgJGNsYXNzZXMgPSBhcnJheSgpOwoKICAgICAgICAgICAgc3dpdGNoKCAkdGhpcy0+X3N0YXR1cyApIHsKICAgICAgICAgICAgY2FzZSAnUlBUSEVBREVSJzoKICAgICAgICAgICAgICAgICRjbGFzc2VzW10gPSAncnB0aGVhZGVyJzsKICAgICAgICAgICAgICAgICR0aGlzLT5faWR4Kys7CiAgICAgICAgICAgICAgICAkY2xhc3Nlc1tdID0gJ3JwdGhlYWRlcicuJHRoaXMtPl9pZHg7CiAgICAgICAgICAgICAgICAkdGhpcy0+X291dCAuPSAnPHRyIGNsYXNzPSInLmltcGxvZGUoJyAnLCRjbGFzc2VzKS4nIj4nOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlICdIRUFERVInOgogICAgICAgICAgICAgICAgJGNsYXNzZXNbXSA9ICdoZWFkZXInOwogICAgICAgICAgICAgICAgJHRoaXMtPl9pZHgrKzsKICAgICAgICAgICAgICAgIGlmKCAkdGhpcy0+X2N1cmdyb3VwICkgJGNsYXNzZXNbXSA9ICdoZHItJy5tdW5nZV9zdHJpbmdfdG9fdXJsKCR0aGlzLT5fY3VyZ3JvdXAtPmdldF9jb2x1bW4oKSkuJHRoaXMtPl9pZHg7CiAgICAgICAgICAgICAgICAkdGhpcy0+X291dCAuPSAnPHRyIGNsYXNzPSInLmltcGxvZGUoJyAnLCRjbGFzc2VzKS4nIj4nOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlICdGT09URVInOgogICAgICAgICAgICAgICAgJGNsYXNzZXNbXSA9ICdmb290ZXInOwogICAgICAgICAgICAgICAgJHRoaXMtPl9pZHgrKzsKICAgICAgICAgICAgICAgIGlmKCAkdGhpcy0+X2N1cmdyb3VwICkgJGNsYXNzZXNbXSA9ICdmdHItJy5tdW5nZV9zdHJpbmdfdG9fdXJsKCR0aGlzLT5fY3VyZ3JvdXAtPmdldF9jb2x1bW4oKSkuJHRoaXMtPl9pZHg7CiAgICAgICAgICAgICAgICAkdGhpcy0+X291dCAuPSAnPHRyIGNsYXNzPSInLmltcGxvZGUoJyAnLCRjbGFzc2VzKS4nIj4nOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlICdSUFRGT09URVInOgogICAgICAgICAgICAgICAgJGNsYXNzZXNbXSA9ICdycHRmb290ZXInOwogICAgICAgICAgICAgICAgJHRoaXMtPl9pZHgrKzsKICAgICAgICAgICAgICAgICRjbGFzc2VzW10gPSAncnB0Zm9vdGVyJy4kdGhpcy0+X2lkeDsKICAgICAgICAgICAgICAgICR0aGlzLT5fb3V0IC49ICc8dHIgY2xhc3M9IicuaW1wbG9kZSgnICcsJGNsYXNzZXMpLiciPic7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAkdGhpcy0+X291dCAuPSAnPHRyPic7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGFmdGVyX2xpbmUoKQogICAgewogICAgICAgIHBhcmVudDo6YWZ0ZXJfbGluZSgpOwogICAgICAgIGlmKCAkdGhpcy0+X2luX3RhYmxlICkgewogICAgICAgICAgICAvLyBlbmQgYSByb3cKICAgICAgICAgICAgJHRoaXMtPl9vdXQgLj0gIjwvdHI+XG4iOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGFmdGVyX2dyb3VwX2Zvb3RlcnMoKQogICAgewogICAgICAgICR0aGlzLT5fY3VyZ3JvdXAgPSBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmVmb3JlX2dyb3VwX2hlYWRlcih0YWJ1bGFyX3JlcG9ydF9kZWZuX2dyb3VwICRncnAsJGlzX2ZpcnN0ID0gRkFMU0UpCiAgICB7CiAgICAgICAgJHRoaXMtPl9zdGF0dXMgPSAnSEVBREVSJzsKICAgICAgICBpZiggJGdycC0+aXNfcmVwb3J0X2dyb3VwKCkgKSAkdGhpcy0+X3N0YXR1cyA9ICdSUFRIRUFERVInOwogICAgICAgICR0aGlzLT5faWR4ID0gMDsKICAgICAgICAkdGhpcy0+X2N1cmdyb3VwID0gJGdycDsKCiAgICAgICAgaWYoICRncnAtPmlzX3JlcG9ydF9ncm91cCgpIHx8ICR0aGlzLT5fcmVjb3JkX251bWJlciA9PSAwICkgcmV0dXJuOyAvLyBhZnRlciBhbmQgYmVmb3JlIGFjdGlvbnMgYXJlIGlnbm9yZWQgZm9yIHJlcG9ydCBncm91cHMuCiAgICAgICAgaWYoICgkYWN0ID0gJGdycC0+Z2V0X2JlZm9yZV9hY3Rpb24oKSApICkgewogICAgICAgICAgICBzd2l0Y2goICRhY3QgKSB7CiAgICAgICAgICAgIGNhc2UgJGdycDo6QUNUX1BBR0U6CiAgICAgICAgICAgICAgICAkdGhpcy0+X291dCAuPSAnPHRyIGNsYXNzPSJwYWdlYnJlYWsiIHN0eWxlPSJkaXNwbGF5OiBibG9jazsgcGFnZS1icmVhay1hZnRlcjogYWx3YXlzOyI+PHRkPjwvdGQ+PC90cj4nOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYWZ0ZXJfZ3JvdXBfaGVhZGVyKHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXAgJGdycCkKICAgIHsKICAgICAgICBpZiggJGdycC0+aXNfcmVwb3J0X2dyb3VwKCkgKSAkdGhpcy0+X3N0YXR1cyA9IE5VTEw7CiAgICAgICAgJHRoaXMtPl9jdXJncm91cCA9IG51bGw7CiAgICAgICAgJHRoaXMtPl9zdGF0dXMgPSBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmVmb3JlX2dyb3VwX2Zvb3Rlcih0YWJ1bGFyX3JlcG9ydF9kZWZuX2dyb3VwICRncnApCiAgICB7CiAgICAgICAgJHRoaXMtPl9zdGF0dXMgPSAnRk9PVEVSJzsKICAgICAgICBpZiggJGdycC0+aXNfcmVwb3J0X2dyb3VwKCkgKSB7CiAgICAgICAgICAgICR0aGlzLT5fc3RhdHVzID0gJ1JQVEZPT1RFUic7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5faWR4ID0gMDsKICAgICAgICAkdGhpcy0+X2N1cmdyb3VwID0gJGdycDsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGFmdGVyX2dyb3VwX2Zvb3Rlcih0YWJ1bGFyX3JlcG9ydF9kZWZuX2dyb3VwICRncnApCiAgICB7CiAgICAgICAgJHRoaXMtPl9zdGF0dXMgPSBudWxsOwogICAgICAgICR0aGlzLT5fY3VyZ3JvdXAgPSBudWxsOwogICAgICAgIGlmKCAkZ3JwLT5pc19yZXBvcnRfZ3JvdXAoKSApIHJldHVybjsgLy8gYWZ0ZXIgYW5kIGJlZm9yZSBhY3Rpb25zIGFyZSBpZ25vcmVkIGZvciByZXBvcnQgZ3JvdXBzLgogICAgICAgICR0bSA9ICR0aGlzLT5yZXBvcnQoKS0+Z2V0X3Jlc3VsdHNldCgpLT5Ub3RhbE1hdGNoZXMoKTsKICAgICAgICBpZiggKCRhY3QgPSAkZ3JwLT5nZXRfYWZ0ZXJfYWN0aW9uKCkgKSApIHsKICAgICAgICAgICAgc3dpdGNoKCAkYWN0ICkgewogICAgICAgICAgICBjYXNlICRncnA6OkFDVF9QQUdFOgogICAgICAgICAgICAgICAgaWYoICR0bSA+PSAwICYmICR0dGhpcy0+X3JlY29yZF9udW0gPj0gJHRtICkgcmV0dXJuOyAvLyBpZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSByZXBvcnQsIGRvaW5nIGdyb3VwIGZvb3RlcnMgd2Ugc2tpcCBwYWdlIGJyZWFrcy4KICAgICAgICAgICAgICAgICAkdGhpcy0+X291dCAuPSAnPHRyIGNsYXNzPSJwYWdlYnJlYWsiIHN0eWxlPSJkaXNwbGF5OiBibG9jazsgcGFnZS1icmVhay1hZnRlcjogYWx3YXlzOyI+PHRkPjwvdGQ+PC90cj4nOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZHJhd19jZWxsKHRhYnVsYXJfcmVwb3J0X2NlbGxmbXQgJGNvbCwkdmFsKQogICAgewogICAgICAgICRhdHRycyA9IGFycmF5KCk7CiAgICAgICAgJGF0dHJzWydjbGFzcyddID0gYXJyYXkoJGNvbC0+Z2V0X2tleSgpKTsKICAgICAgICBpZiggKCRjbGFzcyA9ICRjb2wtPmdldF9jbGFzcygpKSApICRhdHRyc1snY2xhc3MnXVtdID0gJGNsYXNzOwogICAgICAgIGlmKCAoJGF2YWwgPSAkY29sLT5nZXRfYWxpZ25tZW50KCkpICkgJGF0dHJzWydzdHlsZSddW10gPSAidGV4dC1hbGlnbjogJGF2YWwiOwogICAgICAgIGlmKCAkY29sLT5nZXRfc3BhbigpID4gMSApICRhdHRyc1snY29sc3BhbiddID0gJGNvbC0+Z2V0X3NwYW4oKTsKCiAgICAgICAgaWYoICR0aGlzLT5fc3RhdHVzID09ICdIRUFERVInIHx8ICR0aGlzLT5fc3RhdHVzID09ICdSUFRIRUFERVInICkgewogICAgICAgICAgICAkZWwgPSAndGgnOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJGVsID0gJ3RkJzsKICAgICAgICB9CgogICAgICAgIGlmKCBpc3NldCgkYXR0cnNbJ2NsYXNzJ10pICYmIGNvdW50KCRhdHRyc1snY2xhc3MnXSkgKSAkYXR0cnNbJ2NsYXNzJ10gPSBpbXBsb2RlKCcgJywkYXR0cnNbJ2NsYXNzJ10pOwogICAgICAgIGlmKCBpc3NldCgkYXR0cnNbJ3N0eWxlJ10pICYmIGNvdW50KCRhdHRyc1snc3R5bGUnXSkgKSAkYXR0cnNbJ3N0eWxlJ10gPSBpbXBsb2RlKCc7ICcsJGF0dHJzWydzdHlsZSddKTsKICAgICAgICAkb3V0ID0gbnVsbDsKICAgICAgICBmb3JlYWNoKCAkYXR0cnMgYXMgJGFrZXkgPT4gJGF2YWwgKSB7CiAgICAgICAgICAgICRvdXQgLj0gIiAkYWtleT1cInskYXZhbH1cIiI7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+X291dCAuPSAiPHskZWx9eyRvdXR9PjxzcGFuPnskdmFsfTwvc3Bhbj48L3skZWx9PiI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBmaW5pc2goKQogICAgewogICAgICAgIHBhcmVudDo6ZmluaXNoKCk7CiAgICAgICAgLy8gY2xvc2Ugb2ZmIHRoZSBib2R5IGFuZCBodG1sIHRhZ3MKICAgICAgICAkb3V0ID0gJHRoaXMtPmRvX2Zvb3RlcigpOwogICAgICAgICRvdXQgLj0gJzwhLS0gZ2VuZXJhdGVkIG9uICcuc3RyZnRpbWUoJyV4ICVIOiVNJykuJyAtLT4nOwogICAgICAgICRvdXQgLj0gJzwvYm9keT48L2h0bWw+Jy4iXG4iOwogICAgICAgICR0aGlzLT5fb3V0IC49ICRvdXQ7CiAgICAgICAgJHRoaXMtPl9pbl90YWJsZSA9IEZBTFNFOwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X291dHB1dCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fb3V0OwogICAgfQoKICAgIC8qKgogICAgICogU2V0IGFuIGFsaWFzIGZvciB0aGlzIHJlcG9ydC4KICAgICAqIFRoZSBhbGlhcyBjYW4gYmUgdXNlZCBmb3IgbG9jYXRpbmcgc3R5bGVzaGVldHMgb3Igb3RoZXIgZmlsZXMgdW5pcXVlIHRvIHRoaXMgcmVwb3J0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfYWxpYXMoJHN0cikKICAgIHsKICAgICAgICAkc3RyID0gdHJpbSgoc3RyaW5nKSAkc3RyKTsKICAgICAgICAkdGhpcy0+X2FsaWFzID0gJHN0cjsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGlzIG9iamVjdCdzIGFsaWFzCiAgICAgKiBJZiBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQsIGFuIGFsaWFzIHdpbGwgYmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9hbGlhcygpCiAgICB7CiAgICAgICAgJGFsaWFzID0gJHRoaXMtPl9hbGlhczsKICAgICAgICBpZiggISRhbGlhcyApIHsKICAgICAgICAgICAgJGFsaWFzID0gJHRoaXMtPnJlcG9ydCgpLT5nZXRfdGl0bGUoKTsKICAgICAgICAgICAgJGFsaWFzID0gbXVuZ2Vfc3RyaW5nX3RvX3VybCgkYWxpYXMpOwogICAgICAgICAgICAkdGhpcy0+c2V0X2FsaWFzKCRhbGlhcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkYWxpYXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgYSBzdHlsZXNoZWV0IHRvIHRoZSBvdXRwdXQuCiAgICAgKiBNdWx0aXBsZSBzdHlsZXNoZWV0cyBhcmUgcGVybWl0dGVkLgogICAgICogQnkgZGVmYXVsdCwgdGhlIGdldF9oZWFkX2NvbnRlbnRzKCkgbWV0aG9kIHdpbGwgcmVhZCB0aGlzIGxpc3QgYW5kIGdlbmVyYXRlIHN0eWxlc2hlZXQgbGlua3MuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgVGhlIGNvbXBsZXRlIGZpbGVuYW1lIHRvIHRoZSBjc3MgZmlsZS4gTXVzdCBiZSByZWxhdGl2ZSB0byB0aGUgd2Vic2l0ZSByb290IHVybCBvciB1cGxvYWRzIHVybC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZF9zdHlsZXNoZWV0KCRmaWxlbmFtZSkKICAgIHsKICAgICAgICAkZmlsZW5hbWUgPSB0cmltKCRmaWxlbmFtZSk7CiAgICAgICAgaWYoICEkZmlsZW5hbWUgKSByZXR1cm47CiAgICAgICAgaWYoICFpbl9hcnJheSgkZmlsZW5hbWUsJHRoaXMtPl9zdHlsZXNoZWV0cykgKSAkdGhpcy0+X3N0eWxlc2hlZXRzW10gPSAkZmlsZW5hbWU7CiAgICB9Cn0gLy8gZW5kIG9mIGNsYXNzCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/reports/class.report_defn.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBhYnN0cmFjdCByZXBvcnQgZGVmaW5pdGlvbiBjbGFzcy4KICoKICogQHBhY2thZ2UgQ01TTVNFeHQKICogQGNhdGVnb3J5IFJlcG9ydHMKICogQGF1dGhvciAgY2FsZ3V5MTAwMCA8Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz4KICogQGNvcHlyaWdodCBDb3B5cmlnaHQgMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKICovCgpuYW1lc3BhY2UgQ01TTVNFeHRccmVwb3J0czsKCi8qKgogKiBBbiBhYnN0cmF0IGNsYXNzIHRvIGRlZmluZSBhIHJlcG9ydCBkZWZpbml0aW9uLgogKi8KYWJzdHJhY3QgY2xhc3MgcmVwb3J0X2RlZm4KewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9xdWVyeTsgICAgICAgICAgIC8vIG9iamVjdCBvZiB0eXBlIHF1ZXJ5CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9yczsgICAgICAgICAgICAgIC8vIG9iamVjdCBvZiB0eXBlIHJlc3VsdHNldAoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfdGl0bGU7ICAgICAgICAgICAvLyBzdHJpbmcKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2Rlc2M7ICAgICAgICAgICAgLy8gc3RyaW5nCgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHF1ZXJ5IHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGlzIHJlcG9ydC4KICAgICAqCiAgICAgKiBAcGFyYW0gXENNU01TRXh0XHF1ZXJ5XHF1ZXJ5ICRxdWVyeSBUaGUgcXVlcnkgb2JqZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfcXVlcnkoXENNU01TRXh0XHF1ZXJ5XHF1ZXJ5ICRxdWVyeSkKICAgIHsKICAgICAgICAkdGhpcy0+X3F1ZXJ5ID0gJHF1ZXJ5OwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBxdWVyeSBvYmplY3QgdXNlZCBmb3IgdGhpcyByZXBvcnQuCiAgICAgKgogICAgICogQHJldHVybiBcQ01TTVNFeHRccXVlcnlccXVlcnkmIFRoZSBxdWVyeSBvYmplY3QuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiAmZ2V0X3F1ZXJ5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9xdWVyeTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgcmVzdWx0c2V0IG9iamVjdCB0aGF0IHdpbGwgYmUgdXNlZCB0byBwcm92aWRlIGRhdGEgZm9yIHRoaXMgcmVwb3J0LgogICAgICoKICAgICAqIEByZXR1cm4gXENNU01TRXh0XHF1ZXJ5XHJlc3VsdHNldCYgVGhlIHJlc3VsdHNldCBvYmplY3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uICZnZXRfcmVzdWx0c2V0KCkKICAgIHsKICAgICAgICBpZiggIWlzX29iamVjdCgkdGhpcy0+X3JzKSApIHsKICAgICAgICAgICAgaWYoICFpc19vYmplY3QoJHRoaXMtPl9xdWVyeSkgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdObyBxdWVyeSBzdXBwbGllZCB0byByZXBvcnQgZGVmaW5pdGlvbicpOwogICAgICAgICAgICAkdGhpcy0+X3JzID0gJHRoaXMtPl9xdWVyeS0+ZXhlY3V0ZSgpOwogICAgICAgICAgICAkdGhpcy0+X3JzLT5Nb3ZlRmlyc3QoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0aGlzLT5fcnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHRpdGxlIG9mIHRoaXMgcmVwb3J0LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfdGl0bGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3RpdGxlOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSB0aXRsZSBvZiB0aGlzIHJlcG9ydC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHIgVGhlIHRpdGxlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfdGl0bGUoJHN0cikKICAgIHsKICAgICAgICAkdGhpcy0+X3RpdGxlID0gdHJpbSgkc3RyKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgZGVzY3JpcHRpb24gb2YgdGhpcyByZXBvcnQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9kZXNjcmlwdGlvbigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fZGVzYzsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoaXMgcmVwb3J0CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyIFRoZSBkZXNjcmlwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2Rlc2NyaXB0aW9uKCRzdHIpCiAgICB7CiAgICAgICAgJHRoaXMtPl9kZXNjID0gdHJpbSgkc3RyKTsKICAgIH0KCn0gLy8gZW5kIG9mIGNsYXNzCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/reports/class.report_generator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBhYnN0cmFjdCByZXBvcnQgZ2VuZXJhdG9yIGNsYXNzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKiBAY2F0ZWdvcnkgUmVwb3J0cwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCm5hbWVzcGFjZSBDTVNNU0V4dFxyZXBvcnRzOwoKLyoqCiAqIEFuIGFic3RyYWN0IGNsYXNzIGZvciBhIHJlcG9ydCBnZW5lcmF0b3IuCiAqLwphYnN0cmFjdCBjbGFzcyByZXBvcnRfZ2VuZXJhdG9yCnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICogQHZhciBcQ01TTVNFeHRccmVwb3J0c1xyZXBvcnRfZGVmbiAkX3JlcG9ydF9kZWZuIEEgcmVmZXJlbmNlIHRvIHRoZSByZXBvcnQgZGVmaW5pdGlvbi4KICAgICAqLwogICAgcHJpdmF0ZSAkX3JlcG9ydF9kZWZuOyAvLyBcQ0dccmVwb3J0X2RlZm47CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBAcGFyYW0gXENNU01TRXh0XHJlcG9ydHNccmVwb3J0X2RlZm4gJHJwdCBUaGUgcmVwb3J0IGRlZmluaXRpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChyZXBvcnRfZGVmbiAkcnB0KQogICAgewogICAgICAgICR0aGlzLT5fcmVwb3J0X2RlZm4gPSAkcnB0OwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSByZXBvcnQgZGVmaW5pdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIFxDTVNNU0V4dFxyZXBvcnRzXHJlcG9ydF9kZWZuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiByZXBvcnQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3JlcG9ydF9kZWZuOwogICAgfQoKICAgIC8qKgogICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIHRoZSByZXBvcnQgaXMgc3RhcnRlZC4KICAgICAqCiAgICAgKiBAYWJzdHJhY3QKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gc3RhcnQoKSB7fQoKICAgIC8qKgogICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igd2hlbiB0aGUgcmVwb3J0IGlzIGZpbmlzaGVkLgogICAgICoKICAgICAqIEBhYnN0cmFjdAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBmaW5pc2goKSB7fQoKICAgIC8qKgogICAgICogQSBjYWxsYmFjayBmdW5jdG9uIGZvciBlYWNoIGRhdGEgcm93LgogICAgICoKICAgICAqIEBhYnN0cmFjdAogICAgICogQHBhcmFtIGFycmF5ICRyb3cgVGhlIHJvdyByZXR1cm5lZCBmcm9tIHRoZSBxdWVyeS4KICAgICAqLwogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGVhY2hfcm93KCRyb3cpOwoKICAgIC8qKgogICAgICogR2VuZXJhdGUgdGhlIHJlcG9ydCBvdXRwdXQuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5lcmF0ZSgpCiAgICB7CiAgICAgICAgJHRoaXMtPnN0YXJ0KCk7CiAgICAgICAgJHJzID0gJHRoaXMtPnJlcG9ydCgpLT5nZXRfcmVzdWx0c2V0KCk7CiAgICAgICAgd2hpbGUoICEkcnMtPkVPRigpICkgewogICAgICAgICAgICAkdGhpcy0+ZWFjaF9yb3coJHJzLT5maWVsZHMpOwogICAgICAgICAgICAkcnMtPk1vdmVOZXh0KCk7CiAgICAgICAgfQogICAgICAgIHVuc2V0KCRycyk7CiAgICAgICAgJHRoaXMtPmZpbmlzaCgpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBnZW5lcmF0ZWQgb3V0cHV0LgogICAgICogVGhpcyBtZXRob2QgbWF5IHJldHVybiB0ZXh0dWFsIGRhdGEgc3VpdGFibGUgZm9yIGVjaG9pbmcvZGlzcGxheWluZy4gIE9yIGl0IGl0IG1heSBnZW5lcmF0ZSBhIHN0YXRpYyBmaWxlIGFuZCByZXR1cm4gbm90aGluZy4KICAgICAqCiAgICAgKiBAYWJzdHJhY3QKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGdldF9vdXRwdXQoKTsKfSAvLyBlbmQgb2YgY2xhc3MKCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/reports/class.tabular_report_defn.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB0YWJ1bGFyIHJlcG9ydCBkZWZpbml0aW9uIGNsYXNzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKiBAY2F0ZWdvcnkgUmVwb3J0cwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCm5hbWVzcGFjZSBDTVNNU0V4dFxyZXBvcnRzOwoKLyoqCiAqIFRoaXMgY2xhc3MgaXMgdXNlZCBmb3IgcmVwb3J0cyB0aGF0IGdlbmVyYXRlIHRhYnVsYXIgZGF0YSAod2hpY2ggaXMgbW9zdCB0eXBlcyBvZiBmaW5hbmNpYWwgcmVwb3J0cywgZXRjLikuCiAqIFRoaXMgY2xhc3Mgc3VwcG9ydHMgZ3JvdXBpbmcsIGFuZCBncm91cCBvcGVyYXRpb25zIGxpa2UgbWluLCBtYXgsIHN1bSwgYXZlcmFnZSBldGMuCiAqLwpjbGFzcyB0YWJ1bGFyX3JlcG9ydF9kZWZuIGV4dGVuZHMgcmVwb3J0X2RlZm4KewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9ncm91cHM7ICAgICAgICAgIC8vIGFycmF5IG9mIHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXAgb2JqZWN0cwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfcmVwb3J0X2dyb3VwOyAgICAvLyBhIHNpbmdsZSB0YWJ1bGFyX3JlcG9ydF9kZWZuX2dyb3VwIG9iamVjdCB0byBkZWZpbmUgcmVwb3J0IGhlYWRlcnMgYW5kIGZvb3RlcnMuCgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9jb2x1bW5zOyAgICAgICAgIC8vIGhhc2ggb2YgY29sdW1uIGtleSwgYW5kIHRhYnVsYXJfcmVwb3J0X2RlZm5fY29sdW1uIG9iamVjdHMKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2NvbnRlbnRfY29sdW1uczsgLy8gYXJyYXkgb2YgY29sdW1uIGtleXMKCiAgICAvKioKICAgICAqIEdldCB0aGUgcmVzdWx0c2V0IGZvciB0aGlzIHJlcG9ydC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFxDTVNNU0V4dFxyZXBvcnRzXHJlc3VsdHNldAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gJmdldF9yZXN1bHRzZXQoKQogICAgewogICAgICAgICRycyA9IHBhcmVudDo6Z2V0X3Jlc3VsdHNldCgpOwogICAgICAgIGlmKCAhJHRoaXMtPl9jb2x1bW5zICYmICEkcnMtPkVPRigpICkgewogICAgICAgICAgICAvLyBhdXRvIGFkZCBjb2x1bW4gZGVmaW5pdGlvbnMgaWYgbm9uZSBkZWZpbmVkCiAgICAgICAgICAgICRjb2xzID0gYXJyYXlfa2V5cygkcnMtPmZpZWxkcyk7CiAgICAgICAgICAgIGZvcmVhY2goICRjb2xzIGFzICRvbmUgKSB7CiAgICAgICAgICAgICAgICAkY29sb2JqID0gbmV3IHJlcG9ydF9kZWZuX2NvbHVtbigkb25lLHVjd29yZHMoJG9uZSksJ3skdmFsfScpOwogICAgICAgICAgICAgICAgJHRoaXMtPmRlZmluZV9jb2x1bW4oJGNvbG9iaik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGVudCBjb2x1bW5zCiAgICAgICAgaWYoICFpc19hcnJheSgkdGhpcy0+X2NvbnRlbnRfY29sdW1ucykpICR0aGlzLT5fY29udGVudF9jb2x1bW5zID0gYXJyYXlfa2V5cygkdGhpcy0+X2NvbHVtbnMpOwogICAgICAgIHJldHVybiAkcnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHJlZ3VsYXIgZ3JvdXBzIGRlZmluZWQgZm9yIHRoaXMgcmVwb3J0LgogICAgICoKICAgICAqIEByZXR1cm4gdGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZ3JvdXBzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9ncm91cHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYWxsIGdyb3VwcyBkZWZpbmVkIGZvciB0aGlzIHJlcG9ydCwgaW5jbHVkaW5nIHJlcG9ydCBncm91cHMuCiAgICAgKgogICAgICogQHJldHVybiB0YWJ1bGFyX3JlcG9ydF9kZWZuX2dyb3VwW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9hbGxfZ3JvdXBzKCkKICAgIHsKICAgICAgICAkb3V0ID0gJHRoaXMtPmdldF9ncm91cHMoKTsKICAgICAgICBpZiggaXNfb2JqZWN0KCR0aGlzLT5fcmVwb3J0X2dyb3VwKSApICRvdXRbXSA9ICR0aGlzLT5fcmVwb3J0X2dyb3VwOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBjb2x1bW5zIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgZm9yIGVhY2ggZGF0YSByb3cgKG91dHB1dCByb3cgdGhhdCBpcyBub3QgZnJvbSBhIGdyb3VwIGhlYWRlciBvciBmb290ZXIpLgogICAgICogVGhlIGNvbHVtbnMgbXVzdCBiZSBwcmV2aW91c2x5IGRlZmluZWQgd2l0aCBkZWZpbmVfY29sdW1uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkbGluZSBBbiBhcnJheSBvZiBjb2x1bW4gbmFtZXMuCiAgICAgKiBAc2VlIGRlZmluZV9jb2x1bW4oKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2NvbnRlbnRfY29sdW1ucyhhcnJheSAkbGluZSkKICAgIHsKICAgICAgICAkdGhpcy0+X2NvbnRlbnRfY29sdW1ucyA9ICRsaW5lOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb2x1bW5zIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgZm9yIGVhY2ggZGF0YSByb3cuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2NvbnRlbnRfY29sdW1ucygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fY29udGVudF9jb2x1bW5zOwogICAgfQoKICAgIC8qKgogICAgICogRGVmaW5lIGEgY29sdW1uIGZvciB0aGUgdGFidWxhciByZXBvcnQuCiAgICAgKiBUaGlzIGRlZmluZXMgdGhlIG1ham9yIGNvbHVtbnMgZm9yIHRoZSByZXBvcnQsIGFuZCBpbmNsdWRlcyBmb3JtYXR0aW5nIGluZm9ybWF0aW9uLgogICAgICogVGhlIGNvbHVtbnMgZGVmaW5lZCBtdXN0IG1hdGNoIHRob3NlIHJldHVybmVkIGJ5IHRoZSByZXN1bHRzZXQgb2JqZWN0IChvciB5b3UgbXVzdCBkZWZpbmUgYSBmdW5jdGlvbiBmb3IgZG9pbmcgdmFsdWUgcHJvY2Vzc2luZykuCiAgICAgKgogICAgICogQHBhcmFtIHRhYnVsYXJfcmVwb3J0X2RlZm5fY29sdW1uICRjb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlZmluZV9jb2x1bW4odGFidWxhcl9yZXBvcnRfZGVmbl9jb2x1bW4gJGNvbCkKICAgIHsKICAgICAgICAka2V5ID0gJGNvbC0+Z2V0X2tleSgpOwogICAgICAgICR0aGlzLT5fY29sdW1uc1ska2V5XSA9ICRjb2w7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGNvbHVtbnMgZGVmaW5lZCBmb3IgdGhpcyByZXBvcnQgaW4gb3JkZXIgYnkgdGhlaXIgd2VpZ2ludCwgb3IgdGhlaXIga2V5LgogICAgICoKICAgICAqIElmIGEgc29ydGluZyB2YWx1ZSBpcyBzcGVjaWZpZWQgZm9yIGFueSBjb2x1bW4gdGhlbiBhbGwgY29sdW1ucyBhcmUgc29ydGVkIGJ5IHRoZSBzb3J0aW5nIHZhbHVlIGFuZCB0aGVuIHRoZSBsYWJlbC4KICAgICAqIG90aGVyd2lzZSB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgYWRkZWQgaXMgcmV0YWluZWQuCiAgICAgKgogICAgICogQHJldHVybiB0YWJ1bGFyX3JlcG9ydF9kZWZuX2NvbHVtbltdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfY29sdW1ucygpCiAgICB7CiAgICAgICAgc3RhdGljICRvdXQgPSBudWxsOwogICAgICAgIGlmKCAhJG91dCApIHsKICAgICAgICAgICAgJG91dCA9ICR0aGlzLT5fY29sdW1uczsKICAgICAgICAgICAgJGhhdmVfc29ydGluZyA9IGZhbHNlOwogICAgICAgICAgICBmb3JlYWNoKCAkb3V0IGFzICRrZXkgPT4gJGNvbCApIHsKICAgICAgICAgICAgICAgIGlmKCAkY29sLT5nZXRfc29ydGluZygpICE9IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgJGhhdmVfc29ydGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoICRoYXZlX3NvcnRpbmcgKSB7CiAgICAgICAgICAgICAgICB1YXNvcnQoJG91dCxmdW5jdGlvbigkYSwkYil7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAkYS0+Z2V0X3NvcnRpbmcoKSA8ICRiLT5nZXRfc29ydGluZygpICkgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgICAgICAgICBpZiggJGEtPmdldF9zb3J0aW5nKCkgPiAkYi0+Z2V0X3NvcnRpbmcoKSApIHJldHVybiAxOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyY21wKCRhLT5nZXRfbGFiZWwoKSwkYi0+Z2V0X2xhYmVsKCkpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb2x1bW4gc3BlY2lmaWVkIGJ5IHRoZSBjb2x1bW4gbmFtZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gdGFidWxhcl9yZXBvcnRfZGVmbl9jb2x1bW58bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2NvbHVtbigka2V5KQogICAgewogICAgICAgIGlmKCBhcnJheV9rZXlfZXhpc3RzKCRrZXksJHRoaXMtPl9jb2x1bW5zKSApIHJldHVybiAkdGhpcy0+X2NvbHVtbnNbJGtleV07CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgYSBncm91cGluZyB0byB0aGlzIHJlcG9ydC4KICAgICAqIEdyb3VwaW5ncyBhbGxvdyBoZWFkZXIgYW5kIGZvb3RlciBsaW5lcywgYW5kIG1hdGhlbWF0aWMgb24gdGhlIHZhbHVlcyBkaXNwbGF5ZWQgd2l0aGluIHRoYXQgZ3JvdXAuCiAgICAgKgogICAgICogQHBhcmFtIHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXAgJGdycCBUaGUgZ3JvdXAgb2JqZWN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkX2dyb3VwKHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXAgJGdycCkKICAgIHsKICAgICAgICAkZ3JwLT5zZXRfcmVwb3J0KCR0aGlzKTsKICAgICAgICAkdGhpcy0+X2dyb3Vwc1tdID0gJGdycDsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgcmVwb3J0IGdyb3VwIGZvciB0aGlzIHJlcG9ydC4KICAgICAqIFRoZSByZXBvcnQgZ3JvdXBzIGhlYWRlcnMgYW5kIGZvb3RlciBsaW5lcyBhcmUgdXNlZCBmb3IgcmVwb3J0IGxldmVsIGhlYWRlcnMgYW5kIGZvb3RlcnMuCiAgICAgKgogICAgICogQHBhcmFtIHRhYnVsYXItcmVwb3J0X2RlZm5fZ3JvdXAgJGdycCBUaGUgZ3JvdXAgb2JqZWN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X3JlcG9ydF9ncm91cCh0YWJ1bGFyX3JlcG9ydF9kZWZuX2dyb3VwICRncnApCiAgICB7CiAgICAgICAgJGdycC0+c2V0X3JlcG9ydCgkdGhpcyk7CiAgICAgICAgJGdycC0+c2V0X3JlcG9ydF9ncm91cF9mbGFnKFRSVUUpOwogICAgICAgICR0aGlzLT5fcmVwb3J0X2dyb3VwID0gJGdycDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgcmVwb3J0IGdyb3VwIGZvciB0aGlzIHJlcG9ydCAoaWYgdGhlcmUgaXMgb25lKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXB8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3JlcG9ydF9ncm91cCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fcmVwb3J0X2dyb3VwOwogICAgfQp9IC8vIGVuZCBvZiBjbGFzcwoKLyoqCiAqIEEgY2xhc3MgdGhhdCBkZWZpbmVzIGEgY2VsbCBmb3JtYXQgZm9yIGEgdGFidWxhciByZXBvcnQuCiAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBpbmRpY2F0ZSBob3cgdG8gZGlzcGxheSBhIHZhbHVlIGZvciBhIGNlcnRhaW4gY2VsbC4KICovCmNsYXNzIHRhYnVsYXJfcmVwb3J0X2NlbGxmbXQKewogICAgY29uc3QgQUxJR05fTEVGVCA9ICdsZWZ0JzsKICAgIGNvbnN0IEFMSUdOX1JJR0hUID0gJ3JpZ2h0JzsKICAgIGNvbnN0IEFMSUdOX0NFTlRFUiA9ICdjZW50ZXInOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfa2V5OwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfdGVtcGxhdGU7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9hbGlnbjsgLy8gbnVsbCwgbGVmdCwgY2VudGVyLCByaWdodAoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfc3BhbiA9IDE7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9jbGFzczsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdCBhIG5ldyB0YWJ1bGFyX3JlcG9ydF9jZWxsZm10LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgbmFtZSBvZiB0aGUgY29sdW1uIChtdXN0IG1hdGNoIGEgZGVmaW5lZCBjb2x1bW4pLgogICAgICogQHBhcmFtIHN0cmluZyAkdHBsIFRoZSBzbWFydHkgdGVtcGxhdGUgZm9yIGRpc3BsYXlpbmcgdmFsdWVzIGZvciB0aGlzIGNlbGwuICBEZWZhdWx0IHZhbHVlIGlzICd7JHZhbH0nLgogICAgICogQHBhcmFtIHN0cmluZyAkYWxpZ24gVGhlIGFsaWdubWVudCBmb3IgdGhpcyBjZWxsLiAgU2VlIHRoZSBBTElHTiBjb25zdGFudHMgaW4gdGhpcyBjbGFzcy4KICAgICAqIEBwYXJhbSBpbnQgICAgJHNwYW4gVGhlIG51bWJlciBvZiBjb2x1bW5zIHRoaXMgY2VsbCBzaG91bGQgc3Bhbi4gIFNvbWUgZ2VuZXJhdG9ycyBtYXkgaWdub3JlIHRoaXMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgka2V5LHN0cmluZyAkdHBsID0gJ3skdmFsfScsc3RyaW5nICRhbGlnbiA9IG51bGwsaW50ICRzcGFuID0gMSkKICAgIHsKICAgICAgICAvLyBkb24ndCBzZXQgYSBkZWZhdWx0IGZvciBmbXQgYXMgJ251bGwnIGlzIHZhbGlkIHdoZW4gdXNlZCBpbiBhIGhlYWRlci4KICAgICAgICAkdGhpcy0+X2tleSA9IHRyaW0oJGtleSk7IC8vIHRvZG86IHRlc3QgdGhpcy4KCiAgICAgICAgJHRoaXMtPnNldF90ZW1wbGF0ZSgkdHBsKTsKCiAgICAgICAgc3dpdGNoKCAkYWxpZ24gKSB7CiAgICAgICAgY2FzZSBzZWxmOjpBTElHTl9MRUZUOgogICAgICAgIGNhc2Ugc2VsZjo6QUxJR05fUklHSFQ6CiAgICAgICAgY2FzZSBzZWxmOjpBTElHTl9DRU5URVI6CiAgICAgICAgICAgICR0aGlzLT5fYWxpZ24gPSAkYWxpZ247CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICR0aGlzLT5fYWxpZ24gPSBudWxsOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPl9zcGFuID0gbWF4KDEsKGludCkkc3Bhbik7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGtleSAoY29sdW1uIG5hbWUpIGZvciB0aGlzIG9iamVjdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2tleSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fa2V5OwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSB0ZW1wbGF0ZSBmb3IgdmFsdWVzIGluIHRoaXMgY2VsbCBmb3JtYXQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3RlbXBsYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl90ZW1wbGF0ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgdGVtcGxhdGUgZm9yIHZhbHVlcyBpbiB0aGlzIGNlbGwgZm9ybWF0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRwbCBTbWFydHkgdGVtcGxhdGUuICBJdCBzaG91bGQgYmUgc2ltcGxlLCBhbmQgdXNlZCBmb3IgZGlzcGxheWluZyBhIHNpbmdsZSB2YWx1ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF90ZW1wbGF0ZSgkdHBsKQogICAgewogICAgICAgICR0cGwgPSB0cmltKCR0cGwpOwogICAgICAgIGlmKCAhJHRwbCApICR0cGwgPSAneyR2YWx9JzsKICAgICAgICAkdGhpcy0+X3RlbXBsYXRlID0gJHRwbDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgYWxpZ25tZW50IGZvciBjZWxscyB1c2luZyB0aGlzIGZvcm1hdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2FsaWdubWVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fYWxpZ247CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGNlbGwgc3BhbiBmb3IgY2VsbHMgdXNpbmcgdGhpcyBmb3JtYXQuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9zcGFuKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9zcGFuOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjbGFzcyBuYW1lIChpZiBhbnkpIGFzc2lnbmVkIHRvIHRoaXMgY2VsbCBmb3JtYXQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2NsYXNzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9jbGFzczsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCBhIGNsYXNzIG5hbWUgdG8gdXNlIHdoZW4gb3V0cHV0dGluZyBjZWxscyB1c2luZyB0aGlzIGZvcm1hdC4KICAgICAqIFNvbWUgZ2VuZXJhdG9ycyBtYXkgaWdub3JlIHRoaXMgdmFsdWUuIEJ1dCBIVE1MIHR5cGUgZ2VuZXJhdG9ycyB3aWxsIHR5cGljYWxseSB1c2UgdGhpcyBhcyBhIGNsYXNzIG5hbWUgZm9yIHRoZSB0YWJsZSBjZWxsLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfY2xhc3MoJGNsYXNzKQogICAgewogICAgICAgICRjbGFzcyA9IHRyaW0oKHN0cmluZykgJGNsYXNzKTsKICAgICAgICAkdGhpcy0+X2NsYXNzID0gJGNsYXNzOwogICAgfQp9IC8vIGVuZCBvZiBjbGFzcwoKCi8qKgogKiBBIGNvbHVtbiBkZWZpbml0aW9uIGZvciBhIHRhYnVsYXIgcmVwb3J0LgogKi8KY2xhc3MgdGFidWxhcl9yZXBvcnRfZGVmbl9jb2x1bW4gZXh0ZW5kcyB0YWJ1bGFyX3JlcG9ydF9jZWxsZm10CnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfZ2xvYmFsX3ZhbHVlczsgLy8gYXJyYXk6IGFsbCB2YWx1ZXMgZm9yIHRoaXMgY29sdW1uIGZvciB0aGUgZW50aXJlIHJlcG9ydAoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfZ3JvdXBfdmFsdWVzOyAvLyBoYXNoIG9mIGdyb3VwIGNvbHVtbiBhbmQgdG90YWxzLgoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfc29ydGluZzsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2xhYmVsOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfcHJvY2Vzc29yX2NiOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0IGEgbmV3IGNvbHVtbiBkZWZpbml0aW9uLgogICAgICogQSBjb2x1bW4gZGVmaW5pdGlvbiBkZWZpbmVzIGhvdyB2YWx1ZXMgaW4gYW4gZW50aXJlIGNvbHVtbiB3aWxsIGJlIHRyZWF0ZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBuYW1lIG9mIHRoZSBjb2x1bW4gKG11c3QgbWF0Y2ggdGhlIGRlZmluZWQgY29sdW1ucyBpbiB0aGUgcmVwb3J0IGRlZmluaXRpb24pLgogICAgICogQHBhcmFtIHN0cmluZyAkbGFiZWwgVGhlIGRpc3BsYXlhYmxlIGxhYmVsIGZvciB0aGlzIGNvbHVtbi4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGZtdCBUaGUgc21hcnR5IHRlbXBhbHRlIHRoYXQgZGVmaW5lcyBob3cgdmFsdWVzIGluIHRoaXMgY29sdW1uIHdpbGwgYmUgZGlzcGxheWVkLgogICAgICogQHBhcmFtIHN0cmluZyAkYWxpZ24gVGhlIGFsaWdubWVudCBmb3IgY2VsbHMgaW4gdGhpcyBjb2x1bW4uCiAgICAgKiBAcGFyYW0gaW50ICRzb3J0aW5nIEEgc29ydGluZyBwcmlvcmlpdHkgZm9yIHRoZSBjb2x1bW4uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGtleSxzdHJpbmcgJGxhYmVsLHN0cmluZyAkZm10ID0gbnVsbCxzdHJpbmcgJGFsaWduID0gbnVsbCxpbnQgJHNvcnRpbmcgPSBudWxsKQogICAgewogICAgICAgIGlmKCAhJGZtdCApICRmbXQgPSAneyR2YWx9JzsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRrZXksJGZtdCwkYWxpZ24pOwogICAgICAgICR0aGlzLT5fbGFiZWwgPSAkbGFiZWw7CiAgICAgICAgJHRoaXMtPl9zb3J0aW5nID0gKGludCkgJHNvcnRpbmc7CiAgICAgICAgJHRoaXMtPl9nbG9iYWxfdmFsdWVzID0gYXJyYXkoKTsKICAgICAgICAkdGhpcy0+X2dyb3VwX3ZhbHVlcyA9IGFycmF5KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGxhYmVsIGZvciB0aGlzIGNvbHVtbiBkZWZpbml0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfbGFiZWwoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2xhYmVsOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBsYWJlbCBvciB0aGlzIGNvbHVtbiBkZWZpbml0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbGFiZWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF9sYWJlbChzdHJpbmcgJGxhYmVsKQogICAgewogICAgICAgICR0aGlzLT5fbGFiZWwgPSAoc3RyaW5nKSAkbGFiZWw7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHNvcnRpbmcgZm9yIHRoaXMgY29sdW1uIGRlZmluaXRpb24uCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9zb3J0aW5nKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9zb3J0aW5nOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBzb3J0aW5nIGZvciB0aGlzIGNvbHVtbiBkZWZpbml0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkc29ydGluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X3NvcnRpbmcoJHNvcnRpbmcpCiAgICB7CiAgICAgICAgJHRoaXMtPl9zb3J0aW5nID0gKGludCkgJHNvcnRpbmc7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgYW4gb3B0aW9uYWwgbWVjaGFuaXNtIHRvIGFkanVzdCwgcHJvY2Vzcywgb3IgcmV0dXJuIGEgZGlmZmVyZW50IHZhbHVlIGZvciB2YWx1ZXMgaW4gdGhpcyBjb2x1bW4uCiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIGZvciBkb2luZyBtYXRoZW1hdGljYWwgZm9ybXVsYXMgb24gdmFsdWVzLCBvciByZXRyaWV2aW5nIGZvcmVpZ24ga2V5IHJlbGF0ZWQgZGF0YSBmcm9tIHRoZSBkYXRhYmFzZQogICAgICogb3Igb3RoZXJ3aXNlIHRyYW5zbGF0aW5nIGlucHV0IGRhdGEuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRmbiBBIGNhbGxhYmxlIGZ1bmN0aW9uIHRoYXQgaXMgb2YgdGhlIGZvcm0gIGZ1bmMoc3RyaW5nICR2YWx1ZSxcQ01TTVNFeHRccXVlcnlccmVzdWx0c2V0KQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X3ZhbHVlX3Byb2Nlc3NvcihjYWxsYWJsZSAkZm4pCiAgICB7CiAgICAgICAgaWYoICFpc19jYWxsYWJsZSgkZm4pICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdwcm9jZXNzb3Igc3VwcGxpZWQgaXMgbm90IGNhbGxhYmxlJyk7CiAgICAgICAgJHRoaXMtPl9wcm9jZXNzb3JfY2IgPSAkZm47CiAgICB9CgogICAgLyoqCiAgICAgKiBBIGNhbGxiYWNrIG1ldGhvZCB0byBwcm9jZXNzIGEgdmFsdWUgaW4gdGhpcyBjb2x1bW4uCiAgICAgKiBieSBkZWZhdWx0IHRoaXMgbWV0aG9kIHdpbGwgY2FsbCB0aGUgdmFsdWUgcHJvY2Vzc29yIGNhbGxiYWNrIChpZiBkZWZpbmVkKSwgb3RoZXJ3aXNlIGl0IHdpbGwgZG8gbm90aGluZy4KICAgICAqIFRoaXMgbWV0aG9kIGlzIG5vcm1hbGx5IGNhbGxlZCBieSB0aGUgcmVwb3J0IGdlbmVyYXRvciB0byBkZXRlcm1pbmUgdGhlIG91dHB1dCB2YWx1ZSAoYnV0IG5vdCB0aGUgZGlzcGxheWVkIHN0cmluZykgZm9yIHRoZSBjb2x1bW4uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsIFRoZSBjdXJyZW50IHZhbHVlIGZvciB0aGlzIGNvbHVtbi4KICAgICAqIEBwYXJhbSBcQ01TTVNFeHRccXVlcnlccmVzdWx0c2V0ICRycyBUaGUgcmVzdWx0c2V0IG9iamVjdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByb2Nlc3NfdmFsdWUoJHZhbCxcQ01TTVNFeHRccXVlcnlcYmFzZV9yZXN1bHRzZXQgJHJzKQogICAgewogICAgICAgIGlmKCBpc19jYWxsYWJsZSgkdGhpcy0+X3Byb2Nlc3Nvcl9jYikgKSB7CiAgICAgICAgICAgICRmbiA9ICR0aGlzLT5fcHJvY2Vzc29yX2NiOwogICAgICAgICAgICAkdmFsID0gJGZuKCR2YWwsJHJzKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR2YWw7CiAgICB9CgogICAgLyoqCiAgICAgKiBTYXZlIGEgdmFsdWUgZm9yIHRoaXMgY29sdW1uLiAgVXNlZnVsIGluIGNhbGN1YWx0aW5nIHN0YXRpc3RpY3MgdGhhdCBhcmUgZ2xvYmFsIHRvIHRoZSBlbnRpcmUgcmVwb3J0LgogICAgICogVGhpcyBtZXRob2QgaXMgbm9ybWFsbHkgY2FsbGVkIGJ5IHRoZSByZXBvcnQgZ2VuZXJhdG9yLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkX2hpc3RvcnlfdmFsdWUoJHZhbCkKICAgIHsKICAgICAgICAkdGhpcy0+X2dsb2JhbF92YWx1ZXNbXSA9ICR2YWw7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgYSBncm91cCBoaXN0b3J5IHZhbHVlLiAgVXNlZnVsIGluIGNhbGN1bGF0aW5nIHN0YXRpc3RpY3MgZm9yIGEgc3BlY2lmaWMgZ3JvdXAuCiAgICAgKiBUaGlzIG1ldGhvZCBpcyBub3JtYWxseSBjYWxsZWQgYnkgdGhlIHJlcG9ydCBnZW5lcmF0b3IuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZ3JwX2tleSBUaGUgbmFtZSBvZiB0aGUgZ3JvdXAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkX2dyb3VwX2hpc3RvcnlfdmFsdWUoJGdycF9rZXksJHZhbCkKICAgIHsKICAgICAgICBpZiggJGdycF9rZXkgKSB7CiAgICAgICAgICAgIGlmKCAhaXNzZXQoJHRoaXMtPl9ncm91cF92YWx1ZXNbJGdycF9rZXldKSApICR0aGlzLT5fZ3JvdXBfdmFsdWVzWyRncnBfa2V5XSA9IGFycmF5KCk7CiAgICAgICAgICAgICR0aGlzLT5fZ3JvdXBfdmFsdWVzWyRncnBfa2V5XVtdID0gJHZhbDsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBBIGZ1bmN0aW9uIHRvIHRlc3QgaWYgdGhlIHN1cHBsaWVkIHZhbHVlIGZvciB0aGlzIGNvbHVtbiBoYXMgY2hhbmdlZCBmcm9tIHRoZSBwcmV2aW91cwogICAgICogZ2xvYmFsIHZhbHVlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBkZXRlY3RpbmcgaWYgYSBncm91cCBoYXMgY2hhbmdlZC4KICAgICAqIFRoaXMgbWV0aG9kIGlzIG5vcm1hbGx5IGNhbGxlZCBieSB0aGUgcmVwb3J0IGdlbmVyYXRvci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWwKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hhbmdlZCgkdmFsKQogICAgewogICAgICAgICRjbnQgPSBjb3VudCgkdGhpcy0+X2dsb2JhbF92YWx1ZXMpOwogICAgICAgIGlmKCAkY250ID09IDAgKSByZXR1cm4gVFJVRTsgLy8gbm8gaGlzdG9yeQogICAgICAgICRsYXN0ID0gJHRoaXMtPl9nbG9iYWxfdmFsdWVzWyRjbnQtMV07CiAgICAgICAgcmV0dXJuIChib29sKSgkbGFzdCAhPSAkdmFsKTsKICAgIH0KCiAgICAvKioKICAgICAqIENsZWFyIGFsbCBjYWNoZWQgdmFsdWVzIGZvciBhIHNwZWNpZmllZCBncm91cAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGdycF9rZXkgVGhlIG5hbWUgb2YgdGhlIGdyb3VwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXNldF9ncm91cCgkZ3JwX2tleSkKICAgIHsKICAgICAgICAkdGhpcy0+X2dyb3VwX3ZhbHVlc1skZ3JwX2tleV0gPSBhcnJheSgpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb3VudCBvZiB2YWx1ZXMgc3RvcmVkIGZvciB0aGlzIGNvbHVtbi4KICAgICAqCiAgICAgKiBAc2VlIHNlbGY6OmFkZF9oaXN0b3J5X3ZhbHVlKCkKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfY291bnQoKQogICAgewogICAgICAgIHJldHVybiBjb3VudCgkdGhpcy0+X2dsb2JhbF92YWx1ZXMpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBtaW5pbXVtIG9mIGFsbCB2YWx1ZXMgc3RvcmVkIGZvciB0aGlzIGNvbHVtbi4KICAgICAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCB0aGUgZGF0YSBzdG9yZWQgaXMgaW4gc29tZXdheSBudW1lcmljLCBhbmQgY2FuIGJlCiAgICAgKiBjb21wYXJlZCB1c2luZyBudW1lcmljIG9wZXJhdG9ycy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X21pbigpCiAgICB7CiAgICAgICAgJG1pbiA9IG51bGw7CiAgICAgICAgZm9yZWFjaCggJHRoaXMtPl9nbG9iYWxfdmFsdWVzIGFzICR2YWwgKSB7CiAgICAgICAgICAgIGlmKCAkbWluID09IG51bGwgfHwgJHZhbCA8ICRtaW4gKSAkbWluID0gJHZhbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRtaW47CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG1heGltdW0gb2YgYWxsIHZhbHVlcyBzdG9yZWQgZm9yIHRoaXMgY29sdW1uLgogICAgICogVGhpcyBtZXRob2QgYXNzdW1lcyB0aGF0IHRoZSBkYXRhIHN0b3JlZCBpcyBpbiBzb21ld2F5IG51bWVyaWMsIGFuZCBjYW4gYmUKICAgICAqIGNvbXBhcmVkIHVzaW5nIG51bWVyaWMgb3BlcmF0b3JzLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfbWF4KCkKICAgIHsKICAgICAgICAkbWF4ID0gbnVsbDsKICAgICAgICBmb3JlYWNoKCAkdGhpcy0+X2dsb2JhbF92YWx1ZXMgYXMgJHZhbCApIHsKICAgICAgICAgICAgaWYoICRtYXggPT0gbnVsbCB8fCAkdmFsID4gJG1heCApICRtYXggPSAkdmFsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG1heDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgc3VtIG9mIGFsbCB2YWx1ZXMgc3RvcmVkIGZvciB0aGlzIGNvbHVtbi4KICAgICAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCB0aGUgZGF0YSBzdG9yZWQgaXMgaW4gc29tZXdheSBudW1lcmljLCBhbmQgY2FuIGJlCiAgICAgKiBjb21wYXJlZCB1c2luZyBudW1lcmljIG9wZXJhdG9ycy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3N1bSgpCiAgICB7CiAgICAgICAgJHN1bSA9IDA7CiAgICAgICAgZm9yZWFjaCggJHRoaXMtPl9nbG9iYWxfdmFsdWVzIGFzICR2YWwgKSB7CiAgICAgICAgICAgICRzdW0gKz0gJHZhbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRzdW07CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG1lYW4vYXZlcmFnZSBvZiBhbGwgdmFsdWVzIHN0b3JlZCBmb3IgdGhpcyBjb2x1bW4uCiAgICAgKiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgdGhlIGRhdGEgc3RvcmVkIGlzIGluIHNvbWV3YXkgbnVtZXJpYywgYW5kIGNhbiBiZQogICAgICogY29tcGFyZWQgdXNpbmcgbnVtZXJpYyBvcGVyYXRvcnMuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9tZWFuKCkKICAgIHsKICAgICAgICBpZiggJHRoaXMtPmdldF9jb3VudCgpID09IDAgKSByZXR1cm4gMDsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldF9zdW0oKSAvICR0aGlzLT5nZXRfY291bnQoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgbWVkaWFuL21pZGRsZSBvZiBhbGwgdmFsdWVzIHN0b3JlZCBmb3IgdGhpcyBjb2x1bW4uCiAgICAgKiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgdGhlIGRhdGEgc3RvcmVkIGlzIGluIHNvbWV3YXkgbnVtZXJpYywgYW5kIGNhbiBiZQogICAgICogY29tcGFyZWQgdXNpbmcgbnVtZXJpYyBvcGVyYXRvcnMuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9tZWRpYW4oKQogICAgewogICAgICAgIGlmKCAkdGhpcy0+Z2V0X2NvdW50KCkgPT0gMCApIHJldHVybiAwOwogICAgICAgICR0bXAgPSAkdGhpcy0+X2dsb2JhbF92YWx1ZXM7CiAgICAgICAgc29ydCgkdG1wKTsKICAgICAgICAkaWR4ID0gKGludCkgKCR0aGlzLT5nZXRfY291bnQoKSAvIDIpOwogICAgICAgIHJldHVybiAkdG1wWyRpZHhdOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGFsbCBvZiB0aGUgdmFsdWVzIHN0b3JlZCBmb3IgdGhpcyBjb2x1bW4gZm9yIHRoZSBuYW1lZCBncm91cC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRncnBfa2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRfZ3JwX3ZhbHVlcygkZ3JwX2tleSkKICAgIHsKICAgICAgICAkZ3JwX2tleSA9IHRyaW0oJGdycF9rZXkpOwogICAgICAgIGlmKCAhJGdycF9rZXkgKSByZXR1cm47CiAgICAgICAgaWYoIGlzc2V0KCR0aGlzLT5fZ3JvdXBfdmFsdWVzWyRncnBfa2V5XSkgKSByZXR1cm4gJHRoaXMtPl9ncm91cF92YWx1ZXNbJGdycF9rZXldOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb3VudCBvZiBhbGwgdmFsdWVzIHN0b3JlZCBmb3IgdGhpcyBjb2x1bW4gZm9yIHRoZSBzcGVjaWZpZWQgZ3JvdXAuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZ3JwX2tleQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9ncnBfY291bnQoJGdycF9rZXkpCiAgICB7CiAgICAgICAgJHZhbHMgPSAkdGhpcy0+Z2V0X2dycF92YWx1ZXMoJGdycF9rZXkpOwogICAgICAgIGlmKCAhaXNfYXJyYXkoJHZhbHMpIHx8IGNvdW50KCR2YWxzKSA9PSAwICkgcmV0dXJuOwogICAgICAgIHJldHVybiBjb3VudCgkdmFscyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG1pbmltdW0gb2YgYWxsIHZhbHVlcyBzdG9yZWQgZm9yIHRoaXMgY29sdW1uIGZvciB0aGUgc3BlY2lmaWVkIGdyb3VwCiAgICAgKiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgdGhlIGRhdGEgc3RvcmVkIGlzIGluIHNvbWV3YXkgbnVtZXJpYywgYW5kIGNhbiBiZQogICAgICogY29tcGFyZWQgdXNpbmcgbnVtZXJpYyBvcGVyYXRvcnMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZ3JwX2tleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9ncnBfbWluKCRncnBfa2V5KQogICAgewogICAgICAgICR2YWxzID0gJHRoaXMtPmdldF9ncnBfdmFsdWVzKCRncnBfa2V5KTsKICAgICAgICBpZiggIWlzX2FycmF5KCR2YWxzKSB8fCBjb3VudCgkdmFscykgPT0gMCApIHJldHVybjsKCiAgICAgICAgJG1pbiA9IG51bGw7CiAgICAgICAgZm9yZWFjaCggJHZhbHMgYXMgJG9uZSApIHsKICAgICAgICAgICAgaWYoICRtaW4gPT0gbnVsbCB8fCAkb25lIDwgJG1pbiApICRtaW4gPSAkb25lOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG1pbjsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgbWF4aW11bSBvZiBhbGwgdmFsdWVzIHN0b3JlZCBmb3IgdGhpcyBjb2x1bW4gZm9yIHRoZSBzcGVjaWZpZWQgZ3JvdXAKICAgICAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCB0aGUgZGF0YSBzdG9yZWQgaXMgaW4gc29tZXdheSBudW1lcmljLCBhbmQgY2FuIGJlCiAgICAgKiBjb21wYXJlZCB1c2luZyBudW1lcmljIG9wZXJhdG9ycy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRncnBfa2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2dycF9tYXgoJGdycF9rZXkpCiAgICB7CiAgICAgICAgJHZhbHMgPSAkdGhpcy0+Z2V0X2dycF92YWx1ZXMoJGdycF9rZXkpOwogICAgICAgIGlmKCAhaXNfYXJyYXkoJHZhbHMpIHx8IGNvdW50KCR2YWxzKSA9PSAwICkgcmV0dXJuOwoKICAgICAgICAkbWF4ID0gbnVsbDsKICAgICAgICBmb3JlYWNoKCAkdmFscyBhcyAkb25lICkgewogICAgICAgICAgICBpZiggJG1heCA9PSBudWxsIHx8ICRvbmUgPiAkbWF4ICkgJG1heCA9ICRvbmU7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkbWF4OwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBzdW0gb2YgYWxsIHZhbHVlcyBzdG9yZWQgZm9yIHRoaXMgY29sdW1uIGZvciB0aGUgc3BlY2lmaWVkIGdyb3VwCiAgICAgKiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgdGhlIGRhdGEgc3RvcmVkIGlzIGluIHNvbWV3YXkgbnVtZXJpYywgYW5kIGNhbiBiZQogICAgICogY29tcGFyZWQgdXNpbmcgbnVtZXJpYyBvcGVyYXRvcnMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZ3JwX2tleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9ncnBfc3VtKCRncnBfa2V5KQogICAgewogICAgICAgICR2YWxzID0gJHRoaXMtPmdldF9ncnBfdmFsdWVzKCRncnBfa2V5KTsKICAgICAgICBpZiggIWlzX2FycmF5KCR2YWxzKSB8fCBjb3VudCgkdmFscykgPT0gMCApIHJldHVybjsKCiAgICAgICAgJHN1bSA9IDA7CiAgICAgICAgZm9yZWFjaCggJHZhbHMgYXMgJG9uZSApIHsKICAgICAgICAgICAgJHN1bSArPSAkb25lOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHN1bTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgbWVhbi9hdmVyYWdlIG9mIGFsbCB2YWx1ZXMgc3RvcmVkIGZvciB0aGlzIGNvbHVtbiBmb3IgdGhlIHNwZWNpZmllZCBncm91cAogICAgICogVGhpcyBtZXRob2QgYXNzdW1lcyB0aGF0IHRoZSBkYXRhIHN0b3JlZCBpcyBpbiBzb21ld2F5IG51bWVyaWMsIGFuZCBjYW4gYmUKICAgICAqIGNvbXBhcmVkIHVzaW5nIG51bWVyaWMgb3BlcmF0b3JzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGdycF9rZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZ3JwX21lYW4oJGdycF9rZXkpCiAgICB7CiAgICAgICAgJGNvdW50ID0gJHRoaXMtPmdldF9ncnBfY291bnQoJGdycF9rZXkpOwogICAgICAgICRzdW0gPSAkdGhpcy0+Z2V0X2dycF9zdW0oJGdycF9rZXkpOwogICAgICAgIGlmKCAkY291bnQgPiAwICkgcmV0dXJuICRzdW0gLyAkY291bnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG1lZGlhbi9taWRkbGUgb2YgYWxsIHZhbHVlcyBzdG9yZWQgZm9yIHRoaXMgY29sdW1uIGZvciB0aGUgc3BlY2lmaWVkIGdyb3VwCiAgICAgKiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgdGhlIGRhdGEgc3RvcmVkIGlzIGluIHNvbWV3YXkgbnVtZXJpYywgYW5kIGNhbiBiZQogICAgICogY29tcGFyZWQgdXNpbmcgbnVtZXJpYyBvcGVyYXRvcnMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZ3JwX2tleQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9ncnBfbWVkaWFuKCRncnBfa2V5KQogICAgewogICAgICAgICR2YWxzID0gJHRoaXMtPmdldF9ncnBfdmFsdWVzKCRncnBfa2V5KTsKICAgICAgICBpZiggIWlzX2FycmF5KCR2YWxzKSB8fCBjb3VudCgkdmFscykgPT0gMCApIHJldHVybjsKCiAgICAgICAgJGlkeCA9IChpbnQpIGNvdW50KCR2YWxzKSAvIDI7CiAgICAgICAgc29ydCgkdmFscyk7CiAgICAgICAgcmV0dXJuICR2YWxzWyRpZHhdOwogICAgfQp9CgovKioKICogQSBjbGFzcyB0byBkZWZpbmUgYSBncm91cGluZyB3aXRoaW4gYSB0YWJ1bGFyIHJlcG9ydC4KICogR3JvdXBzIGNhbiBjcmVhdGUgbXVsdGlwbGUgaGVhZGVyIGFuZCBmb290ZXIgbGluZXMgdG8gZGlzcGxheSBsYWJlbHMgb3IgY2FsY3VsYXRlZCB2YWx1ZXMuCiAqIEVhY2ggY29sdW1uIGluc2lkZSBhIGdyb3VwIGNhbiBkaXNwbGF5IGEgZGlmZmVyZW50IHZhbHVlIChzdWNoIGFzIGEgY291bnQsIG1pbi9tYXgvYXZlcmFnZS9tZWFuL3N1bSkgb2YgZ3JvdXBlZCB2YWx1ZXMuCiAqLwpjbGFzcyB0YWJ1bGFyX3JlcG9ydF9kZWZuX2dyb3VwCnsKICAgIGNvbnN0IEFDVF9QQUdFID0gJ19fUEFHRV9fJzsKICAgIGNvbnN0IEFDVF9MSU5FID0gJ19fTElORV9fJzsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX3JlcG9ydDsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX29sZF92YWx1ZTsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2NvbHVtbjsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2hlYWRlcl9saW5lczsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2Zvb3Rlcl9saW5lczsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2FmdGVyX2FjdGlvbjsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2JlZm9yZV9hY3Rpb247CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9pc19yZXBvcnRfZ3JvdXA7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgZ3JvdXAgZGVmaW5pdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb2wgVGhlIGNvbHVtbiB0aGF0IHRoaXMgZ3JvdXAgaXMgYmFzZWQgb24gKFRoaXMgY29sdW1uIHdpbGwgYmUgdHJhY2tlZCBmb3IgY2hhbmdlcyBpbiB2YWx1ZSkuICBUaGUgY29sdW1uIG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgcmVwb3J0IGRlZmluaXRpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY29sKQogICAgewogICAgICAgICR0aGlzLT5fY29sdW1uID0gdHJpbSgkY29sKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgY29sdW1uIHRoYXQgdGhpcyBncm91cCB3YXRjaGVzLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfY29sdW1uKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9jb2x1bW47CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGNvbHVtbiB0aGF0IHRoaXMgZ3JvdXAgd2F0Y2hlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHIgVGhlIGNvbHVtbiBuYW1lICh0aGUgY29sdW1uIG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgcmVwb3J0IGRlZmluaXRpb24pLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2NvbHVtbigkc3RyKQogICAgewogICAgICAgICRzdHIgPSB0cmltKCRzdHIpOwogICAgICAgIGlmKCAkc3RyICkgJHRoaXMtPl9jb2x1bW4gPSAkc3RyOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBoZWFkZXIgbGluZXMgZm9yIHRoaXMgcmVwb3J0LgogICAgICoKICAgICAqIEByZXR1cm4gdGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cF9saW5lW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9oZWFkZXJfbGluZXMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2hlYWRlcl9saW5lczsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBhIGhlYWRlciBsaW5lIHRvIHRoaXMgcmVwb3J0LgogICAgICoKICAgICAqIEBwYXJhbSB0YWJ1bGFyX3JlcG9ydF9kZWZuX2dyb3VwX2xpbmUgJGxpbmUgVGhlIGxpbmUgZGVmaW5pdGlvbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZF9oZWFkZXJfbGluZSh0YWJ1bGFyX3JlcG9ydF9kZWZuX2dyb3VwX2xpbmUgJGxpbmUpCiAgICB7CiAgICAgICAgJGxpbmUtPnNldF9ncm91cCgkdGhpcyk7CiAgICAgICAgJHRoaXMtPl9oZWFkZXJfbGluZXNbXSA9ICRsaW5lOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBmb290ZXIgbGluZXMgZm9yIHRoaXMgcmVwb3J0LgogICAgICoKICAgICAqIEByZXR1cm4gdGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cF9saW5lW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9mb290ZXJfbGluZXMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2Zvb3Rlcl9saW5lczsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBhIGZvb3RlciBsaW5lIHRvIHRoaXMgcmVwb3J0LgogICAgICoKICAgICAqIEBwYXJhbSB0YWJ1bGFyX3JlcG9ydF9kZWZuX2dyb3VwX2xpbmUgJGxpbmUgVGhlIGxpbmUgZGVmaW5pdGlvbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZF9mb290ZXJfbGluZSh0YWJ1bGFyX3JlcG9ydF9kZWZuX2dyb3VwX2xpbmUgJGxpbmUpCiAgICB7CiAgICAgICAgJGxpbmUtPnNldF9ncm91cCgkdGhpcyk7CiAgICAgICAgJHRoaXMtPl9mb290ZXJfbGluZXNbXSA9ICRsaW5lOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IGFuIGFjdGlvbiB0byBwZXJmb3JtIGFmdGVyIGdyb3VwIGZvb3RlcnMgYXJlIG91dHB1dCAoaWYgYW55KS4KICAgICAqIFNvbWUgZ2VuZXJhdG9ycyAoZm9yIGV4YW1wbGUgUERGKSBtYXkgYmUgYWJsZSB0byBkbyBjZXJ0YWluIGFjdGlvbnMKICAgICAqIGxpa2UgZ2VuZXJhdGUgYSBuZXcgcGFnZSBhZnRlciB0aGUgZ3JvdXAuICBUaGlzIGZsYWcgaW5kaWNhdGVzIHRoZQogICAgICogcHJlZmVycmVkIGJlaGF2aW9yIGZvciB0aGlzIGdyb3VwLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRtcCBUaGUgYmVoYXZpb3IuIFRoZXJlIGFyZSBjb25zdGFudHMgZm9yIHRoaXMgYmVoYXZpb3IgZGVmaW5lZCBpbiB0aGlzIGNsYXNzLiAgdW5rbm93biB2YWx1ZXMgd2lsbCBiZSBpZ25vcmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2FmdGVyX2FjdGlvbigkdG1wKQogICAgewogICAgICAgIHN3aXRjaCggc3RydG91cHBlcigkdG1wKSApIHsKICAgICAgICBjYXNlIHNlbGY6OkFDVF9QQUdFOgogICAgICAgIGNhc2Ugc2VsZjo6QUNUX0xJTkU6CiAgICAgICAgICAgICR0aGlzLT5fYWZ0ZXJfYWN0aW9uID0gJHRtcDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBwcmVmZXJyZWQgYWN0aW9uIHRvIHBlcmZvcm0gYWZ0ZXIgZ3JvdXAgZm9vdGVycyBhcmUgb3V0cHV0IChpZiBhbnkpCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9hZnRlcl9hY3Rpb24oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2FmdGVyX2FjdGlvbjsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCBhbiBhY3Rpb24gdG8gcGVyZm9ybSBiZWZvcmUgZ3JvdXAgaGVhZGVycyBhcmUgb3V0cHV0IChpZiBhbnkpLgogICAgICogU29tZSBnZW5lcmF0b3JzIChmb3IgZXhhbXBsZSBQREYpIG1heSBiZSBhYmxlIHRvIGRvIGNlcnRhaW4gYWN0aW9ucwogICAgICogbGlrZSBnZW5lcmF0ZSBhIG5ldyBwYWdlIGFmdGVyIHRoZSBncm91cC4gIFRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhlCiAgICAgKiBwcmVmZXJyZWQgYmVoYXZpb3IgZm9yIHRoaXMgZ3JvdXAuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdG1wIFRoZSBiZWhhdmlvci4gVGhlcmUgYXJlIGNvbnN0YW50cyBmb3IgdGhpcyBiZWhhdmlvciBkZWZpbmVkIGluIHRoaXMgY2xhc3MuICB1bmtub3duIHZhbHVlcyB3aWxsIGJlIGlnbm9yZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfYmVmb3JlX2FjdGlvbigkdG1wKQogICAgewogICAgICAgIHN3aXRjaCggc3RydG91cHBlcigkdG1wKSApIHsKICAgICAgICBjYXNlIHNlbGY6OkFDVF9QQUdFOgogICAgICAgIGNhc2Ugc2VsZjo6QUNUX0xJTkU6CiAgICAgICAgICAgICR0aGlzLT5fYmVmb3JlX2FjdGlvbiA9ICR0bXA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgcHJlZmVycmVkIGFjdGlvbiB0byBwZXJmb3JtIGJlZm9yZSBncm91cCBoZWFkZXJzIGFyZSBvdXRwdXQgKGlmIGFueSkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2JlZm9yZV9hY3Rpb24oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2JlZm9yZV9hY3Rpb247CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHJlcG9ydCBmb3IgdGhpcyBncm91cAogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICogQHBhcmFtIHJlcG9ydF9kZWZuICRycHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF9yZXBvcnQocmVwb3J0X2RlZm4gJHJwdCkKICAgIHsKICAgICAgICAkdGhpcy0+X3JlcG9ydCA9ICRycHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHJlcG9ydCBmb3IgdGhpcyBncm91cAogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICogQHJldHVybiB0YWJ1bGFyX3JlcG9ydF9kZWZuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfcmVwb3J0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9yZXBvcnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHdldGhlciB0aGlzIGdyb3VwIGlzIGEgcmVwb3J0IGxldmVsIGdyb3VwLgogICAgICogRm9yIGludGVybmFsIHVzZSBvbmx5LgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICogQHBhcmFtIGJvb2wgJHNldF9yZXBvcnRfZ3JvdXBfZmxhZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X3JlcG9ydF9ncm91cF9mbGFnKCRmbGFnID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+X2lzX3JlcG9ydF9ncm91cCA9IChib29sKSAkZmxhZzsKICAgIH0KCiAgICAvKioKICAgICAqIFRlc3Qgd2V0aGVyIHRoaXMgZ3JvdXAgaXMgYSByZXBvcnQgZ3JvdXAuCiAgICAgKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCiAgICAgKgogICAgICogQGludGVybmFsCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzX3JlcG9ydF9ncm91cCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5faXNfcmVwb3J0X2dyb3VwOwogICAgfQp9IC8vIGVuZCBvZiBjbGFzcwoKCi8qKgogKiBBIGNsYXNzIHRvIGRlZmluZSBhIGdyb3VwIGhlYWRlciBvciBmb290ZXIgbGluZS4KICovCmNsYXNzIHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXBfbGluZQp7CiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2NvbHVtbnM7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9ncm91cDsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdCBhIG5ldyBncm91cCBsaW5lIGZvciB0YWJ1bGFyIHJlcG9ydCBncm91cHMuCiAgICAgKiBUaGVzZSBsaW5lcyBjYW4gYmUgdXNlZCBmb3IgZWl0aGVyIGhlYWRlcnMgb3IgZm9vdGVycy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBhY2NlcHRzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGVpdGhlciBzdHJpbmdzIG9yIHRhYnVsYXJfcmVwb3J0X2NlbGxmbXQgb2JqZWN0cy4KICAgICAqIElmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZywgaXQgaXMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvciBvZiB0YWJ1bGFyX3JlcG9ydF9jZWxsZm10LgogICAgICogVGhlIGtleXMgb2YgdGhlIGFzc29jaWF0aXZlIGFycmF5IG11c3QgbWF0Y2ggZGVmaW5lZCByZXBvcnQgY29sdW1ucy4KICAgICAqCiAgICAgKiBJdCBpcyBwb3NzaWJsZSB0byBkZWZpbmUgbm90aGluZyBmb3IgYSBwYXJ0aWN1bGFyIGNvbHVtbiBpbiBhIGdyb3VwIGxpbmUuCiAgICAgKiBpbiB3aGljaCBjYXNlIG5vdGhpbmcgd2lsbCBiZSBvdXRwdXQgZm9yIHRoYXQgcGFydGljdWxhciBjb2x1bW4gaW4gdGhhdCBwYXJ0aWN1bGFyCiAgICAgKiBoZWFkZXIgb3IgZm9vdGVyIGxpbmUuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRoYXNoIEFuIGFzc29jaWF0aXZlIGFycmF5IG9mIHN0cmluZ3Mgb3IgdGFidWxhcl9yZXBvcnRfY2VsbGZtdCBvYmplY3RzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGhhc2gpCiAgICB7CiAgICAgICAgZm9yZWFjaCggJGhhc2ggYXMgJGtleSA9PiAkdG1wICkgewogICAgICAgICAgICBpZiggISRrZXkgfHwgISR0bXAgKSBjb250aW51ZTsKCiAgICAgICAgICAgICR0cGwgPSBudWxsOwogICAgICAgICAgICBpZiggaXNfc3RyaW5nKCR0bXApICYmICR0bXAgIT09ICcnICkgewogICAgICAgICAgICAgICAgLy8gdHJlYXQgdGhlIHZhbHVlIGFzIGEgdGVtcGxhdGUgZm9yIGRpc3BsYXkuCiAgICAgICAgICAgICAgICAvLyBoZXJlIHdlIHNob3VsZCBnZXQgdGhlIGNvbHVtbiBmcm9tIHRoZSByZXBvcnQKICAgICAgICAgICAgICAgIC8vIGFuZCBqdXN0IGFkanVzdCBpdCdzIHRlbXBsYXRlLgogICAgICAgICAgICAgICAgJHRwbCA9ICR0bXA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiggaXNfb2JqZWN0KCR0bXApICYmIGlzX2EoJHRtcCwnQ01TTVNFeHRccmVwb3J0c1x0YWJ1bGFyX3JlcG9ydF9jZWxsZm10JyApICkgewogICAgICAgICAgICAgICAgLy8gd2UgcGFzc2VkIGluIGFuIGFic29sdXRlIGNlbGxmbXQsIHNvIHdlIHVzZSB0aGF0LgogICAgICAgICAgICAgICAgJHRwbCA9ICR0bXA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPl9jb2x1bW5zWyRrZXldID0gJHRwbDsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGNlbGwgZm9ybWF0IGZvciBhIHNwZWNpZmljIGNvbHVtbiBmb3IgdGhpcyBncm91cCBsaW5lCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBjb2x1bW4ga2V5LgogICAgICogQHJldHVybiB0YWJ1bGFyX3JlcG9ydF9jZWxsZm10fG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9jZWxsX2Zvcm1hdCgka2V5KQogICAgewogICAgICAgIGlmKCAhYXJyYXlfa2V5X2V4aXN0cygka2V5LCR0aGlzLT5fY29sdW1ucykgKSByZXR1cm47CiAgICAgICAgJHRtcCA9ICR0aGlzLT5fY29sdW1uc1ska2V5XTsKICAgICAgICBpZiggaXNfb2JqZWN0KCR0bXApICkgewogICAgICAgICAgICByZXR1cm4gJHRtcDsKICAgICAgICB9CiAgICAgICAgJHJlcG9ydCA9ICR0aGlzLT5fZ3JvdXAtPmdldF9yZXBvcnQoKTsKICAgICAgICAkb3JpZyA9ICRyZXBvcnQtPmdldF9jb2x1bW4oJGtleSk7CiAgICAgICAgJHRwbCA9IGNsb25lKCRvcmlnKTsKICAgICAgICAkdHBsLT5zZXRfdGVtcGxhdGUoJHRtcCk7CiAgICAgICAgJHRoaXMtPl9jb2x1bW5zWyRrZXldID0gJHRwbDsKICAgICAgICByZXR1cm4gJHRwbDsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgZ3JvdXAgZm9yIHRoaXMgZ3JvdXAgbGluZS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqIEBwYXJhbSB0YWJ1bGFyX3JlcG9ydF9kZWZuX2dyb3VwICRncnAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF9ncm91cCh0YWJ1bGFyX3JlcG9ydF9kZWZuX2dyb3VwICRncnApCiAgICB7CiAgICAgICAgJHRoaXMtPl9ncm91cCA9ICRncnA7CiAgICB9Cn0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/reports/class.tabular_report_generator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBhYnN0cmFjdCB0YWJ1bGFyIHJlcG9ydCBnZW5lcmF0b3IgY2xhc3MuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBSZXBvcnRzCiAqIEBhdXRob3IgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XHJlcG9ydHM7CgovKioKICogQW4gYWJzdHJhY3QgY2xhc3MgdG8gYWlkZSBpbiBnZW5lcmF0aW5nIGEgdGFidWxhciByZXBvcnQuCiAqLwphYnN0cmFjdCBjbGFzcyB0YWJ1bGFyX3JlcG9ydF9nZW5lcmF0b3IgZXh0ZW5kcyByZXBvcnRfZ2VuZXJhdG9yCnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICAgJF9yb3c7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgICAkX3ByZXZfcm93OwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcm90ZWN0ZWQgJF9yZWNvcmRfbnVtYmVyID0gMDsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHNldF9yb3coJGlucHV0X3JvdykKICAgIHsKICAgICAgICAvLyBwcmVwcm9jZXNzIHRoZSBkYXRhLiBzbyB0aGF0IHdlIGhhdmUgdmFsdWVzIGZvciBhbGwgb2Ygb3VyIGNvbHVtbiBrZXlzCiAgICAgICAgLy8gZXZlbiBpZiB0aGUgdmFsdWVzIGFyZSBlbXB0eS4KICAgICAgICAkcnMgPSAkdGhpcy0+cmVwb3J0KCktPmdldF9yZXN1bHRzZXQoKTsKICAgICAgICAkc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7CiAgICAgICAgJHJvdyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCggJGlucHV0X3JvdyBhcyAkY29sbmFtZSA9PiAkdmFsICkgewogICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oJGNvbG5hbWUsJHZhbCk7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2goICR0aGlzLT5yZXBvcnQoKS0+Z2V0X2NvbHVtbnMoKSBhcyAka2V5ID0+ICRjb2wgKSB7CiAgICAgICAgICAgICR2YWwgPSAnJzsKICAgICAgICAgICAgaWYoIGlzc2V0KCRpbnB1dF9yb3dbJGtleV0pICkgJHZhbCA9ICRpbnB1dF9yb3dbJGtleV07CiAgICAgICAgICAgICRyb3dbJGtleV0gPSAkY29sLT5wcm9jZXNzX3ZhbHVlKCR2YWwsJHJzKTsKICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCRrZXksJHJvd1ska2V5XSk7CiAgICAgICAgfQoKICAgICAgICBpZiggaXNfYXJyYXkoJHRoaXMtPl9yb3cpICkgJHRoaXMtPl9wcmV2X3JvdyA9ICR0aGlzLT5fcm93OwogICAgICAgICR0aGlzLT5fcm93ID0gJHJvdzsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGZpbmlzaCgpCiAgICB7CiAgICAgICAgJHRoaXMtPmRvX2dyb3VwX2Zvb3RlcnMoVFJVRSk7CiAgICAgICAgaWYoICgkZ3JwID0gJHRoaXMtPnJlcG9ydCgpLT5nZXRfcmVwb3J0X2dyb3VwKCkpICkgewogICAgICAgICAgICAkdGhpcy0+ZG9fZ3JvdXBfZm9vdGVyKCRncnApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgYmVmb3JlIGVhY2ggYW5kIGV2ZXJ5IGxpbmUuCiAgICAgKgogICAgICogQGFic3RyYWN0CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJlZm9yZV9saW5lKCkge30KCiAgICAvKioKICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgZWFjaCBhbmQgZXZlcnkgbGluZS4KICAgICAqCiAgICAgKiBAYWJzdHJhY3QKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYWZ0ZXJfbGluZSgpIHt9CgogICAgLyoqCiAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGJlZm9yZSB0aGUgc3RhcnQgb2Ygb3V0cHV0aW5nIGdyb3VwIGZvb3RlcnMuCiAgICAgKgogICAgICogQGFic3RyYWN0CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJlZm9yZV9ncm91cF9mb290ZXJzKCkge30KCiAgICAvKioKICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIG91dHB1dGluZyBncm91cCBmb290ZXJzLgogICAgICoKICAgICAqIEBhYnN0cmFjdAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhZnRlcl9ncm91cF9mb290ZXJzKCkge30KCiAgICAvKioKICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBvdXRwdXRpbmcgZ3JvdXAgaGVhZGVycy4KICAgICAqCiAgICAgKiBAYWJzdHJhY3QKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYmVmb3JlX2dyb3VwX2hlYWRlcnMoKSB7fQoKICAgIC8qKgogICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBhZnRlciB0aGUgb3V0cHV0aW5nIGdyb3VwIGhlYWRlcnMuCiAgICAgKgogICAgICogQGFic3RyYWN0CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGFmdGVyX2dyb3VwX2hlYWRlcnMoKSB7fQoKICAgIC8qKgogICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0byBkcmF3IGEgY2VsbC4KICAgICAqCiAgICAgKiBAYWJzdHJhY3QKICAgICAqIEBwYXJhbSB0YWJ1bGFyX3JlcG9ydF9jZWxsZm10ICRjZWxsCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb250ZW50cyB0aGUgY2VsbCBjb250ZW50cy4KICAgICAqLwogICAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGRyYXdfY2VsbCh0YWJ1bGFyX3JlcG9ydF9jZWxsZm10ICRjZWxsLCRjb250ZW50cyk7CgogICAgLyoqCiAgICAgKiBBIGZ1bmN0aW9uIHRvIGdldCBjZWxsIGNvbnRlbnRzIGZvciB0aGUgc3BlY2lmaWVkIGNvbHVtbiBvZiB0aGUgY3VycmVudCByb3cuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY29sX2tleSBUaGUgY29sdW1uIGtleSAobXVzdCBiZSBhIHJlZ2lzdGVyZWQgY29sdW1uKQogICAgICogQHBhcmFtIHN0cmluZyAkdHBsIFRoZSBjZWxsIHRlbXBsYXRlLgogICAgICogQHBhcmFtIGFycmF5ICRyb3cgVGhlIGN1cnJlbnQgcm93IGFycmF5ICh1c3VhbGx5IHVzZWQgaW50ZXJuYWxseSkKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBmb3JtYXR0ZWQgY2VsbCBjb250ZW50cy4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldF9jZWxsX2NvbnRlbnRzKCRjb2xfa2V5LCR0cGwgPSBudWxsLCRyb3cgPSBudWxsKQogICAgewogICAgICAgICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKCiAgICAgICAgJHZhbCA9ICcnOwogICAgICAgIGlmKCAhJHJvdyApICRyb3cgPSAkdGhpcy0+X3JvdzsKICAgICAgICBpZiggaXNzZXQoJHJvd1skY29sX2tleV0pICkgJHZhbCA9ICRyb3dbJGNvbF9rZXldOwogICAgICAgICRjb2wgPSAkdGhpcy0+cmVwb3J0KCktPmdldF9jb2x1bW4oJGNvbF9rZXkpOwoKICAgICAgICAvLyBjaGFuZ2VkdmFsLCBnZXRzIHRoZSBwcmV2aW91cyB2YWx1ZS4gaWYgaXQgaXMgbm90IGVxdWFsIHRvIHRoaXMgdmFsdWUKICAgICAgICAvLyB0aGVuIHJldHVybiB0aGUgc3RyaW5nLCBvdGhlcndpc2UgZW1wdHkKICAgICAgICAkY2hhbmdlZHZhbCA9ICgkY29sLT5jaGFuZ2VkKCR2YWwpKSA/ICR2YWwgOiAnJzsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ2NoYW5nZWQnLCRjaGFuZ2VkdmFsKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ3ZhbCcsJHZhbCk7CiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCd2YWx1ZScsJHZhbCk7CgogICAgICAgICRzbWFydHktPmFzc2lnbignbWluJywkY29sLT5nZXRfbWluKCkpOwogICAgICAgICRzbWFydHktPmFzc2lnbignbWF4JywkY29sLT5nZXRfbWF4KCkpOwogICAgICAgICRzbWFydHktPmFzc2lnbignY291bnQnLCRjb2wtPmdldF9jb3VudCgpKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ3N1bScsJGNvbC0+Z2V0X3N1bSgpKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ21lYW4nLCRjb2wtPmdldF9tZWFuKCkpOwogICAgICAgICRzbWFydHktPmFzc2lnbignbWVkaWFuJywkY29sLT5nZXRfbWVkaWFuKCkpOwogICAgICAgICR0bXAgPSBudWxsOwogICAgICAgIGlmKCAkdHBsICkgJHRtcCA9ICRzbWFydHktPmZldGNoKCdzdHJpbmc6Jy4kdHBsKTsKICAgICAgICByZXR1cm4gJHRtcDsKICAgIH0KCiAgICAvKioKICAgICAqIEEgZnVuY3Rpb24gdG8gZ2V0IGNlbGwgY29udGVudHMgZm9yIGEgZ3JvdXAgaGVhZGVyIG9yIGZvb3RlciBjZWxsLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbF9rZXkgVGhlIGNvbHVtbiBrZXkgKG11c3QgYmUgYSByZWdpc3RlcmVkIGNvbHVtbikKICAgICAqIEBwYXJhbSBzdHJpbmcgJGdycF9rZXkgVGhlIGdyb3VwIGtleS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHRwbCBUaGUgY2VsbCB0ZW1wbGF0ZS4KICAgICAqIEBwYXJhbSBhcnJheSAkcm93IFRoZSBjdXJyZW50IHJlc3VsdHNldCByb3cuICBPbmx5IGZvciBpbnRlcm5hbCB1c2UuCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgZm9ybWF0dGVkIGNlbGwgY29udGVudHMuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRfZ3JvdXBfY2VsbF9jb250ZW50cygkY29sX2tleSwkZ3JwX2tleSwkdHBsLCRyb3cgPSBudWxsKQogICAgewogICAgICAgICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKICAgICAgICAkY29sID0gJHRoaXMtPnJlcG9ydCgpLT5nZXRfY29sdW1uKCRjb2xfa2V5KTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ2xhYmVsJywkY29sLT5nZXRfbGFiZWwoKSk7CiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdncnBfbWluJywkY29sLT5nZXRfZ3JwX21pbigkZ3JwX2tleSkpOwogICAgICAgICRzbWFydHktPmFzc2lnbignZ3JwX21heCcsJGNvbC0+Z2V0X2dycF9tYXgoJGdycF9rZXkpKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ2dycF9jb3VudCcsJGNvbC0+Z2V0X2dycF9jb3VudCgkZ3JwX2tleSkpOwogICAgICAgICRzbWFydHktPmFzc2lnbignZ3JwX3N1bScsJGNvbC0+Z2V0X2dycF9zdW0oJGdycF9rZXkpKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ2dycF9tZWFuJywkY29sLT5nZXRfZ3JwX21lYW4oJGdycF9rZXkpKTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ2dycF9tZWRpYW4nLCRjb2wtPmdldF9ncnBfbWVkaWFuKCRncnBfa2V5KSk7CiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdsYXN0X3ZhbCcsJHRoaXMtPl9wcmV2X3Jvd1skY29sX2tleV0pOwogICAgICAgICRjb250ZW50cyA9ICR0aGlzLT5nZXRfY2VsbF9jb250ZW50cygkY29sX2tleSwkdHBsLCRyb3cpOwogICAgICAgIHJldHVybiAkY29udGVudHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCBiZWZvcmUgZWFjaCByb3cuCiAgICAgKgogICAgICogQGFic3RyYWN0CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJlZm9yZV9yb3coKQogICAgewogICAgICAgICR0aGlzLT5kb19ncm91cF9mb290ZXJzKCk7CiAgICAgICAgJHRoaXMtPmRvX2dyb3VwX2hlYWRlcnMoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIGFmdGVyIGVhY2ggcm93LgogICAgICoKICAgICAqIEBhYnN0cmFjdAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhZnRlcl9yb3coKQogICAgewogICAgICAgICR0aGlzLT5hZGRfY29sdW1uX2hpc3RvcmllcygkdGhpcy0+X3Jvdyk7CiAgICAgICAgJHRoaXMtPl9yZWNvcmRfbnVtYmVyKys7CiAgICB9CgogICAgLyoqCiAgICAgKiBUZXN0IGlmIHRoZSB2YWx1ZSBmb3IgYSBzcGVjaWZpZWQgZ3JvdXAgaGFzIGNoYW5nZWQuCiAgICAgKgogICAgICogQHBhcmFtIHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXAgJGdycCBUaGUgZ3JvdXAgdGhhdCByZWZlcmVuY2VzIHRoZSB3YXRjaGVkIGNvbHVtbi4KICAgICAqIEBwYXJhbSBhcnJheSAkcm93IFRoZSBkYXRhIHJvdy4KICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hhbmdlZCh0YWJ1bGFyX3JlcG9ydF9kZWZuX2dyb3VwICRncnAsJHJvdykKICAgIHsKICAgICAgICAkY29sX2tleSA9ICRncnAtPmdldF9jb2x1bW4oKTsKICAgICAgICBpZiggYXJyYXlfa2V5X2V4aXN0cygkY29sX2tleSwkcm93KSApIHsKICAgICAgICAgICAgJHZhbCA9ICRyb3dbJGNvbF9rZXldOwogICAgICAgICAgICAkY29sID0gJHRoaXMtPnJlcG9ydCgpLT5nZXRfY29sdW1uKCRjb2xfa2V5KTsKICAgICAgICAgICAgcmV0dXJuICRjb2wtPmNoYW5nZWQoJHZhbCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KCiAgICAvKioKICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgYmVmb3JlIGEgc2luZ2xlIGdyb3VwIGhlYWRlciBpcyBvdXRwdXQuCiAgICAgKgogICAgICogQGFic3RyYWN0CiAgICAgKiBAcGFyYW0gdGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cCAkZ3JwCiAgICAgKiBAcGFyYW0gYm9vbCAkaXNfZmlyc3QgVHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBvZiBhbGwgZ3JvdXAgaGVhZGVycyAoc3ViamVjdCB0byBjaGFuZ2UpCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJlZm9yZV9ncm91cF9oZWFkZXIodGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cCAkZ3JwLCRpc19maXJzdCA9IEZBTFNFKSB7fQoKICAgIC8qKgogICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBhZnRlciBhIHNpbmdsZSBncm91cCBoZWFkZXIgaXMgb3V0cHV0LgogICAgICoKICAgICAqIEBhYnN0cmFjdAogICAgICogQHBhcmFtIHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXAgJGdycAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhZnRlcl9ncm91cF9oZWFkZXIodGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cCAkZ3JwKSB7fQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZG9fZ3JvdXBfaGVhZGVyKHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXAgJGdycCwkaXNfZmlyc3QgPSBGQUxTRSkKICAgIHsKICAgICAgICAkbGluZXMgPSAkZ3JwLT5nZXRfaGVhZGVyX2xpbmVzKCk7CiAgICAgICAgaWYoIGNvdW50KCRsaW5lcykgKSB7CiAgICAgICAgICAgICR0aGlzLT5iZWZvcmVfZ3JvdXBfaGVhZGVyKCRncnAsJGlzX2ZpcnN0KTsKICAgICAgICAgICAgZm9yZWFjaCggJGxpbmVzIGFzICRsaW5lICkgewogICAgICAgICAgICAgICAgJHRoaXMtPmJlZm9yZV9saW5lKCk7CiAgICAgICAgICAgICAgICAkY29sdW1ucyA9ICR0aGlzLT5yZXBvcnQoKS0+Z2V0X2NvbHVtbnMoKTsKICAgICAgICAgICAgICAgICRrZXlzID0gYXJyYXlfa2V5cygkY29sdW1ucyk7CiAgICAgICAgICAgICAgICBmb3IoICRjb2xfaWR4ID0gMDsgJGNvbF9pZHggPCBjb3VudCgka2V5cyk7ICkgewogICAgICAgICAgICAgICAgICAgICRrZXkgPSAka2V5c1skY29sX2lkeF07CiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnRzID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAkZm10ID0gJGxpbmUtPmdldF9jZWxsX2Zvcm1hdCgka2V5KTsKICAgICAgICAgICAgICAgICAgICBpZiggaXNfb2JqZWN0KCRmbXQpICkgewogICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudHMgPSAkdGhpcy0+Z2V0X2dyb3VwX2NlbGxfY29udGVudHMoJGtleSwkZ3JwLT5nZXRfY29sdW1uKCksJGZtdC0+Z2V0X3RlbXBsYXRlKCkpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlIGlzIG5vIGZvcm1hdCBpbmZvcm1hdGlvbiBzcGVjaWZpZWQgaW4gdGhlIGhlYWRlciBsaW5lCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIGtub3cgc3R1ZmYgbGlrZSAobWF5YmUgYmFja2dyb3VuZCBjb2xvciwgYWxpZ25tZW50LCBjb2xvciBldGMpCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvIGdldCBhIGZvcm1hdCBmcm9tIHRoZSByZXBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgJGZtdCA9ICR0aGlzLT5yZXBvcnQoKS0+Z2V0X2NvbHVtbigka2V5KTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnRzID0gJHRoaXMtPmdldF9ncm91cF9jZWxsX2NvbnRlbnRzKCRrZXksJGdycC0+Z2V0X2NvbHVtbigpLCcnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRyYXdfY2VsbCgkZm10LCRjb250ZW50cyk7CiAgICAgICAgICAgICAgICAgICAgJGNvbF9pZHggKz0gbWF4KDEsJGZtdC0+Z2V0X3NwYW4oKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdGhpcy0+YWZ0ZXJfbGluZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5hZnRlcl9ncm91cF9oZWFkZXIoJGdycCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZG9fZ3JvdXBfaGVhZGVycygkZG9faGVhZGVycyA9IGZhbHNlKQogICAgewogICAgICAgICRncnBzID0gJHRoaXMtPnJlcG9ydCgpLT5nZXRfZ3JvdXBzKCk7CiAgICAgICAgJGdycF9oZWFkZXJfbnVtID0gMDsKICAgICAgICBpZiggY291bnQoJGdycHMpICkgewogICAgICAgICAgICBmb3JlYWNoKCAkZ3JwcyBhcyAkZ3JwICkgewogICAgICAgICAgICAgICAgaWYoICRkb19oZWFkZXJzIHx8ICR0aGlzLT5fcmVjb3JkX251bWJlciA9PSAwIHx8ICR0aGlzLT5jaGFuZ2VkKCRncnAsJHRoaXMtPl9yb3cpICkgewogICAgICAgICAgICAgICAgICAgIGlmKCAkZ3JwX2hlYWRlcl9udW0gPT0gMCApICR0aGlzLT5iZWZvcmVfZ3JvdXBfaGVhZGVycygpOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5kb19ncm91cF9oZWFkZXIoJGdycCwoJGdycF9oZWFkZXJfbnVtID09IDApKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRncnBfaGVhZGVyX251bSsrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCAkZ3JwX2hlYWRlcl9udW0gPiAwICkgJHRoaXMtPmFmdGVyX2dyb3VwX2hlYWRlcnMoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgYmVmb3JlIGEgc2luZ2xlIGdyb3VwIGZvb3RlciBpcyBnZW5lcmF0ZWQuCiAgICAgKgogICAgICogQGFic3RyYWN0CiAgICAgKiBAcGFyYW0gdGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cCAkZ3JwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJlZm9yZV9ncm91cF9mb290ZXIodGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cCAkZ3JwKSB7fQoKICAgIC8qKgogICAgICogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBhZnRlciBhIHNpbmdsZSBncm91cCBmb290ZXIgaXMgZ2VuZXJhdGVkLgogICAgICoKICAgICAqIEBhYnN0cmFjdAogICAgICogQHBhcmFtIHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXAgJGdycAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhZnRlcl9ncm91cF9mb290ZXIodGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cCAkZ3JwKSB7fQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZG9fZ3JvdXBfZm9vdGVyKHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXAgJGdycCkKICAgIHsKICAgICAgICAkbGluZXMgPSAkZ3JwLT5nZXRfZm9vdGVyX2xpbmVzKCk7CiAgICAgICAgaWYoIGNvdW50KCRsaW5lcykgKSB7CiAgICAgICAgICAgICR0aGlzLT5iZWZvcmVfZ3JvdXBfZm9vdGVyKCRncnApOwogICAgICAgICAgICBmb3JlYWNoKCAkbGluZXMgYXMgJGxpbmUgKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+YmVmb3JlX2xpbmUoKTsKICAgICAgICAgICAgICAgICRjb2x1bW5zID0gJHRoaXMtPnJlcG9ydCgpLT5nZXRfY29sdW1ucygpOwogICAgICAgICAgICAgICAgJGtleXMgPSBhcnJheV9rZXlzKCRjb2x1bW5zKTsKICAgICAgICAgICAgICAgIGZvciggJGNvbF9pZHggPSAwOyAkY29sX2lkeCA8IGNvdW50KCRrZXlzKTsgKSB7CiAgICAgICAgICAgICAgICAgICAgJGtleSA9ICRrZXlzWyRjb2xfaWR4XTsKICAgICAgICAgICAgICAgICAgICAkY29udGVudHMgPSBudWxsOwogICAgICAgICAgICAgICAgICAgICRmbXQgPSAkbGluZS0+Z2V0X2NlbGxfZm9ybWF0KCRrZXkpOwogICAgICAgICAgICAgICAgICAgIGlmKCBpc19vYmplY3QoJGZtdCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50cyA9ICR0aGlzLT5nZXRfZ3JvdXBfY2VsbF9jb250ZW50cygka2V5LCRncnAtPmdldF9jb2x1bW4oKSwkZm10LT5nZXRfdGVtcGxhdGUoKSwkdGhpcy0+X3ByZXZfcm93KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVyZSBpcyBubyBmb3JtYXQgaW5mb3JtYXRpb24gc3BlY2lmaWVkIGluIHRoZSBmb290ZXIgbGluZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgd2UgbmVlZCB0byBrbm93IHN0dWZmIGxpa2UgKG1heWJlIGJhY2tncm91bmQgY29sb3IsIGFsaWdubWVudCwgY29sb3IgZXRjKQogICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyBnZXQgYSBmb3JtYXQgZnJvbSB0aGUgcmVwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICRmbXQgPSAkdGhpcy0+cmVwb3J0KCktPmdldF9jb2x1bW4oJGtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50cyA9ICR0aGlzLT5nZXRfZ3JvdXBfY2VsbF9jb250ZW50cygka2V5LCRncnAtPmdldF9jb2x1bW4oKSwnJywkdGhpcy0+X3ByZXZfcm93KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRyYXdfY2VsbCgkZm10LCRjb250ZW50cyk7CiAgICAgICAgICAgICAgICAgICAgJGNvbF9pZHggKz0gbWF4KDEsJGZtdC0+Z2V0X3NwYW4oKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdGhpcy0+YWZ0ZXJfbGluZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5hZnRlcl9ncm91cF9mb290ZXIoJGdycCk7CiAgICAgICAgfQogICAgICAgIC8vIHRoaXMgZ3JvdXAgaGFzIGNoYW5nZWQsIGdvIHRocm91Z2ggYWxsIGNvbHVtbnMgYW5kIHJlc2V0IHRoaXMgZ3JvdXAKICAgICAgICBmb3JlYWNoKCAkdGhpcy0+cmVwb3J0KCktPmdldF9jb2x1bW5zKCkgYXMgJGtleSA9PiAkY29sICkgewogICAgICAgICAgICAkY29sLT5yZXNldF9ncm91cCgkZ3JwLT5nZXRfY29sdW1uKCkpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGRvX2dyb3VwX2Zvb3RlcnMoJGRvX2Zvb3RlcnMgPSBmYWxzZSkKICAgIHsKICAgICAgICAkZ3JwX2Zvb3Rlcl9udW0gPSAwOwogICAgICAgIGlmKCAkZG9fZm9vdGVycyB8fCAkdGhpcy0+X3JlY29yZF9udW1iZXIgPiAwICkgewogICAgICAgICAgICAvLyBjaGVjayBmb3IgY29sdW1uIGNoYW5nZXMKICAgICAgICAgICAgJGdycHMgPSAkdGhpcy0+cmVwb3J0KCktPmdldF9ncm91cHMoKTsKICAgICAgICAgICAgaWYoIGNvdW50KCRncnBzKSApIHsKICAgICAgICAgICAgICAgIGVuZCgkZ3Jwcyk7CiAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgJGdycCA9IGN1cnJlbnQoJGdycHMpOwogICAgICAgICAgICAgICAgICAgIGlmKCAkZG9fZm9vdGVycyB8fCAkdGhpcy0+Y2hhbmdlZCgkZ3JwLCR0aGlzLT5fcm93KSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoICRncnBfZm9vdGVyX251bSA9PSAwICkgJHRoaXMtPmJlZm9yZV9ncm91cF9mb290ZXJzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kb19ncm91cF9mb290ZXIoJGdycCk7CiAgICAgICAgICAgICAgICAgICAgICAgICRncnBfZm9vdGVyX251bSsrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHdoaWxlKCBwcmV2KCRncnBzKSApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCAkZ3JwX2Zvb3Rlcl9udW0gPiAwICkgJHRoaXMtPmFmdGVyX2dyb3VwX2Zvb3RlcnMoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGFkZF9jb2x1bW5faGlzdG9yaWVzKCRyb3cpCiAgICB7CiAgICAgICAgZm9yZWFjaCggJHRoaXMtPnJlcG9ydCgpLT5nZXRfY29sdW1ucygpIGFzICRrZXkgPT4gJiRjb2wgKSB7CiAgICAgICAgICAgIGlmKCBhcnJheV9rZXlfZXhpc3RzKCRrZXksJHJvdykgKSB7CiAgICAgICAgICAgICAgICAkdmFsID0gJHJvd1ska2V5XTsKICAgICAgICAgICAgICAgICRjb2wtPmFkZF9oaXN0b3J5X3ZhbHVlKCR2YWwpOwogICAgICAgICAgICAgICAgJGdycHMgPSAkdGhpcy0+cmVwb3J0KCktPmdldF9hbGxfZ3JvdXBzKCk7CiAgICAgICAgICAgICAgICBpZiggY291bnQoJGdycHMpICkgewogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goICRncnBzIGFzICYkZ3JwICkgewogICAgICAgICAgICAgICAgICAgICAgICAkY29sLT5hZGRfZ3JvdXBfaGlzdG9yeV92YWx1ZSgkZ3JwLT5nZXRfY29sdW1uKCksICR2YWwpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHN0YXJ0KCkKICAgIHsKICAgICAgICBpZiggKCRncnAgPSAkdGhpcy0+cmVwb3J0KCktPmdldF9yZXBvcnRfZ3JvdXAoKSkgKSB7CiAgICAgICAgICAgICR0aGlzLT5kb19ncm91cF9oZWFkZXIoJGdycCxUUlVFKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBlYWNoX3Jvdygkcm93KQogICAgewogICAgICAgICR0aGlzLT5zZXRfcm93KCRyb3cpOwogICAgICAgICR0aGlzLT5iZWZvcmVfcm93KCk7CiAgICAgICAgJHRoaXMtPmJlZm9yZV9saW5lKCk7CiAgICAgICAgJGNvbnRlbnRfY29sdW1ucyA9ICR0aGlzLT5yZXBvcnQoKS0+Z2V0X2NvbnRlbnRfY29sdW1ucygpOwogICAgICAgIGZvcmVhY2goICR0aGlzLT5yZXBvcnQoKS0+Z2V0X2NvbHVtbnMoKSBhcyAka2V5ID0+ICRjb2wgKSB7CiAgICAgICAgICAgIGlmKCBpbl9hcnJheSgka2V5LCRjb250ZW50X2NvbHVtbnMpICkgewogICAgICAgICAgICAgICAgLy8gdGhpcyBjb2x1bW4gaXMgaW4gdGhlIG1haW4gY29udGVudCByb3cKICAgICAgICAgICAgICAgIC8vIHRob3VnaCB0aGUgdmFsdWUgbWF5IHN0aWxsIGJlIG51bGwuCiAgICAgICAgICAgICAgICAkdHBsID0gJHRoaXMtPnJlcG9ydCgpLT5nZXRfY29sdW1uKCRrZXkpLT5nZXRfdGVtcGxhdGUoKTsKICAgICAgICAgICAgICAgIGlmKCAhJHRwbCApICR0cGwgPSAneyR2YWx9JzsKICAgICAgICAgICAgICAgICR0aGlzLT5kcmF3X2NlbGwoJGNvbCwkdGhpcy0+Z2V0X2NlbGxfY29udGVudHMoJGtleSwkdHBsKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAvLyB0aGlzIGNvbHVtbiBpcyBub3QgaW4gdGhlIG1haW4gY29udGVudCByb3cKICAgICAgICAgICAgICAgIC8vIHNvIGRyYXcgYSBudWxsIHZhbHVlCiAgICAgICAgICAgICAgICAkdGhpcy0+ZHJhd19jZWxsKCRjb2wsbnVsbCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJHRoaXMtPmFmdGVyX2xpbmUoKTsKICAgICAgICAkdGhpcy0+YWZ0ZXJfcm93KCk7CiAgICB9Cgp9IC8vIGVuZCBvZiBjbGFzcwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/reports/class.template_report_generator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB0ZW1wbGF0ZSByZXBvcnQgZ2VuZXJhdG9yIGNsYXNzLgogKgogKiBAcGFja2FnZSBDTVNNU0V4dAogKiBAY2F0ZWdvcnkgUmVwb3J0cwogKiBAYXV0aG9yICBjYWxndXkxMDAwIDxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPgogKiBAY29weXJpZ2h0IENvcHlyaWdodCAyMDEwIGJ5IFJvYmVydCBDYW1wYmVsbAogKi8KCm5hbWVzcGFjZSBDTVNNU0V4dFxyZXBvcnRzOwoKLyoqCiAqIFRoaXMgY2xhc3MgZ2VuZXJhdGVzIGEgcmVwb3J0IGJ5IGZpcnN0IGdlbmVyYXRpbmcgYSBzZXJpZXMgb2Ygc3RydWN0dXJlZCBkYXRhCiAqIHRoZW4gcGFzc2luZyB0aGUgZW50aXJlIHJlcG9ydCBvdXRwdXQgdGhyb3VnaCB0byBhIHNpbmdsZSBzbWFydHkgdGVtcGxhdGUuCiAqLwpjbGFzcyB0ZW1wbGF0ZV9yZXBvcnRfZ2VuZXJhdG9yIGV4dGVuZHMgZGF0YV9yZXBvcnRfZ2VuZXJhdG9yCnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfdGVtcGxhdGU7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9kYXRhID0gYXJyYXkoJ3N0cnVjdHVyZSc9PmFycmF5KCkpOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfcmVjOwoKICAgIC8qKgogICAgICogU2V0IHRoZSB0ZW1wbGF0ZSB0byB1c2UgZm9yIGZvcm1hdHRpbmcgdGhlIHJlcG9ydC4KICAgICAqCiAgICAgKiBJZiBhIHN0cmluZyBlbmRpbmcgd2l0aCAudHBsIGlzIHByb3ZpZGVkIHRoZW4gYSBmaWxlIHRlbXBsYXRlIGZvciB0aGUgY3VycmVudCBtb2R1bGUgaXMgYXNzdW1lZC4KICAgICAqIE90aGVyd2lzZSwgYSBkYXRhYmFzZSB0ZW1wbGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9kdWxlIGlzIGFzc3VtZWQuCiAgICAgKiBJZiBubyBjdXJyZW50IG1vZHVsZSAoaS5lOiB0aGUgcmVxdWVzdCBpcyBub3QgZm9yIGEgbW9kdWxlIGFjdGlvbikgY2FuIGJlIGRldGVybWluZWQsIHRoZW4KICAgICAqIFRoZSBzbWFydHkgJ2ZpbGUnIHJlc291cmNlIGlzIGFzc3VtZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdHBsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfdGVtcGxhdGUoJHRwbCkKICAgIHsKICAgICAgICAkdGhpcy0+X3RlbXBsYXRlID0gdHJpbSgkdHBsKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgdGVtcGxhdGUgdG8gdXNlIGZvciBmb3JtYXR0aW5nIHRoZSByZXBvcnQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldF90ZW1wbGF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fdGVtcGxhdGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBzdGFydCgpCiAgICB7CiAgICAgICAgLy8gdG9kbzogdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZXJlIGlzIG5vIHRlbXBsYXRlCiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG91dHB1dCBvZiB0aGUgcmVwb3J0LgogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQgdGhlIGFjdHVhbCBvdXRwdXQgZm9ybWF0IGRlcGVuZHMgdXBvbiB0aGUgdGVtcGxhdGUgdGhhdCBpcyBwcm92aWRlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9vdXRwdXQoKQogICAgewogICAgICAgICRvdXQgPSBudWxsOwogICAgICAgICRkYXRhID0gcGFyZW50OjpnZXRfb3V0cHV0KCk7CiAgICAgICAgaWYoICFpc19hcnJheSgkZGF0YSkgKSByZXR1cm4gJG91dDsKCiAgICAgICAgJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOwogICAgICAgICRzbWFydHktPmFzc2lnbigncmVwb3J0X2RhdGEnLCRkYXRhKTsKICAgICAgICAkYWN0aW9ubW9kdWxlID0gJHNtYXJ0eS0+Z2V0X3RlbXBsYXRlX3ZhcnMoJ2FjdGlvbm1vZHVsZScpOwogICAgICAgIGlmKCAkYWN0aW9ubW9kdWxlICkgewogICAgICAgICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRhY3Rpb25tb2R1bGUpOwogICAgICAgICAgICBpZiggaXNfb2JqZWN0KCRtb2QpICkgewogICAgICAgICAgICAgICAgaWYoIGVuZHN3aXRoKCR0aGlzLT5nZXRfdGVtcGxhdGUoKSwnLnRwbCcpICkgewogICAgICAgICAgICAgICAgICAgICRvdXQgPSAkbW9kLT5Qcm9jZXNzVGVtcGxhdGUoJHRoaXMtPmdldF90ZW1wbGF0ZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRvdXQgPSAkbW9kLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJHRoaXMtPmdldF90ZW1wbGF0ZSgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJG91dCA9ICRzbWFydHktPmZldGNoKCdmaWxlOicuJHRlbXBsYXRlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9Cn0gLy8gZW5kIG9mIGNsYXNzCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/reports/class.text_report_generator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBkYXRhIHJlcG9ydCBnZW5lcmF0b3IgY2xhc3MuCiAqCiAqIEBwYWNrYWdlIENNU01TRXh0CiAqIEBjYXRlZ29yeSBSZXBvcnRzCiAqIEBhdXRob3IgIGNhbGd1eTEwMDAgPGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+CiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IDIwMTAgYnkgUm9iZXJ0IENhbXBiZWxsCiAqLwoKbmFtZXNwYWNlIENNU01TRXh0XHJlcG9ydHM7CgovKioKICogVGhpcyBjbGFzcyB3aWxsIHRha2UgYSByZXBvcnQgZGVmaW5pdGlvbiBhbmQgb3V0cHV0IGEgdGV4dCBmaWxlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXBvcnQuCiAqLwpjbGFzcyB0ZXh0X3JlcG9ydF9nZW5lcmF0b3IgZXh0ZW5kcyB0YWJ1bGFyX3JlcG9ydF9nZW5lcmF0b3IKewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByaXZhdGUgJF9jb2xfd2lkdGggPSAxNTsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX291dDsKCiAgICAvKioKICAgICAqIFNldCB0aGUgd2lkdGggb2YgZWFjaCBjb2x1bW4gKGluIGNoYXJhY3RlcnMpCiAgICAgKgogICAgICogQHBhcmFtIGludCAkdmFsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfY29sdW1uX3dpZHRoKCR2YWwpCiAgICB7CiAgICAgICAgJHRoaXMtPl9jb2xfd2lkdGggPSBtYXgoMSxtaW4oMjAwLChpbnQpJHZhbCkpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb2x1bW4gd2lkdGggKGluIGNoYXJhY3RlcnMpCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldF9jb2x1bW5fd2lkdGgoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2NvbF93aWR0aDsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHN0YXJ0KCkKICAgIHsKICAgICAgICBwYXJlbnQ6OnN0YXJ0KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBmaW5pc2goKQogICAgewogICAgICAgIHBhcmVudDo6ZmluaXNoKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhZnRlcl9saW5lKCkKICAgIHsKICAgICAgICBwYXJlbnQ6OmFmdGVyX2xpbmUoKTsKICAgICAgICAkdGhpcy0+X291dCAuPSAiXG4iOwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYWZ0ZXJfZ3JvdXBfZm9vdGVycygpCiAgICB7CiAgICAgICAgcGFyZW50OjphZnRlcl9ncm91cF9mb290ZXJzKCk7CiAgICAgICAgJHRoaXMtPl9vdXQgLj0gIlxuIjsKICAgIH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGRyYXdfY2VsbCh0YWJ1bGFyX3JlcG9ydF9jZWxsZm10ICRjb2wsJHZhbCkKICAgIHsKICAgICAgICAkdGhpcy0+X291dCAuPSBzdHJfcGFkKCR2YWwsJHRoaXMtPmdldF9jb2x1bW5fd2lkdGgoKSwnICcsU1RSX1BBRF9MRUZUKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgb3V0cHV0IG9mIHRoZSByZXBvcnQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgT3V0cHV0IHN1aXRhYmxlIGZvciBzYXZpbmcgdG8gYSB0ZXh0IGZpbGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfb3V0cHV0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9vdXQ7CiAgICB9Cn0gLy8gZW5kIG9mIGNsYXNzCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/session</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/session/class.Manager.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcc2Vzc2lvbjsNCg0KdXNlIENNU01TRXh0XGNvcmVcVFNpbmdsZXRvbjsNCg0KY2xhc3MgTWFuYWdlcg0Kew0KICB1c2UgVFNpbmdsZXRvbjsNCiAgDQogIHZhciAkc2Vzc2lvbl9zdGFydF90aW1lID0gTlVMTDsNCiAgdmFyICR0bXBfZGlyICAgICAgICAgICAgPSBOVUxMOw0KICB2YXIgJG1heEF0dGVtcHRzICAgICAgICA9IDEwOw0KICB2YXIgJHJldHJ5RGVsYXkgICAgICAgICA9IDEwMDsNCiAgdmFyICRhdHRlbXB0cyAgICAgICAgICAgPSAwOw0KICB2YXIgJHN1Y2Nlc3MgICAgICAgICAgICA9IEZBTFNFOw0KICB2YXIgJGZuICAgICAgICAgICAgICAgICA9IE5VTEw7DQogIHZhciAkZnVybCAgICAgICAgICAgICAgID0gTlVMTDsNCiAgdmFyICR1bmlxdWVJZCAgICAgICAgICAgPSBOVUxMOw0KICB2YXIgJHNlc3Npb25fZHVyYXRpb24gICAgPSBOVUxMOw0KICANCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpDQogIHsNCiAgICAkdGhpcy0+c2Vzc2lvbl9zdGFydF90aW1lID0gXHRpbWUoKTsNCiAgICAkdGhpcy0+c2Vzc2lvbl9kdXJhdGlvbiAgID0gXGluaV9nZXQoJ3Nlc3Npb24uZ2NfbWF4bGlmZXRpbWUnKTsNCiAgICAkbW9kICAgICAgICAgICAgICAgICAgICAgID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnQ01TTVNFeHQnKTsNCiAgICAjIGNoZWNrIGlmIHRoZSBtb2R1bGUgaXMgYWN0aXZlIG90aGVyd2lzZSByZXR1cm4uIE5vdCBkb2luZyB0aGlzIGNoZWNrIHdpbGwgY2F1c2UgYSBmYXRhbCBlcnJvciBvbiB0aGUgZnJvbnQgZW5kLg0KICAgIGlmKCEkbW9kKSB7IHJldHVybjsgfQ0KICAgICRjb25maWcgICAgICAgICAgICAgICAgICAgPSAkbW9kLT5HZXRFeHRlbmRlZENvbmZpZygpOw0KICAgICR0aGlzLT50bXBfZGlyICAgICAgICAgICAgPSBcc3RyX3JlcGxhY2UoJ2NhY2hlJywgJycsICRjb25maWdbJ3RtcF9jYWNoZV9sb2NhdGlvbiddKSAuICdjbXNtc2V4dC8nOw0KICAgICR0aGlzLT51bmlxdWVJZCAgICAgICAgICAgPSBcZ2V0bXlwaWQoKSAuICdfJyAuIFxzZXNzaW9uX2lkKCk7DQogICAgJHRoaXMtPmZuICAgICAgICAgICAgICAgICA9ICR0aGlzLT50bXBfZGlyIC4gJHRoaXMtPnVuaXF1ZUlkIC4gJy5jbXNleHRzZXNzaW9uJzsNCiAgICAkdGhpcy0+ZnVybCAgICAgICAgICAgICAgID0gXHN0cl9yZXBsYWNlKCdjYWNoZScsICcnLCAkY29uZmlnWydwdWJsaWNfY2FjaGVfdXJsJ10pIC4gJ2Ntc21zZXh0LycgLiAkdGhpcy0+dW5pcXVlSWQgLiAnLmNtc2V4dHNlc3Npb24nOw0KICAgIA0KICAgICMgZG8gdGhlIHByb2Nlc3NpbmcNCiAgICAkdGhpcy0+Y3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5KCk7DQogICAgJHRoaXMtPnJlc2V0KCk7DQogICAgJHRoaXMtPmdhcmJhZ2VDb2xsZWN0KCk7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiByZXNldCgpIDogYm9vbA0KICB7DQogICAgcmV0dXJuICAoYm9vbCkgXGZpbGVfcHV0X2NvbnRlbnRzKCR0aGlzLT5mbiwgJHRoaXMtPnNlc3Npb25fc3RhcnRfdGltZSk7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBnYXJiYWdlQ29sbGVjdCgkcGF0dGVybiA9IE5VTEwpIDogdm9pZA0KICB7DQogICAgJGZpbGVzID0gXGdsb2IoJHRoaXMtPnRtcF9kaXIgLiAnLyouY21zZXh0c2Vzc2lvbicpOw0KICAgICRjdXJyZW50VGltZXN0YW1wID0gXHRpbWUoKTsNCiAgICANCiAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGUpDQogICAgew0KICAgICAgJGxhc3RBY2Nlc3NUaW1lID0gXGZpbGVtdGltZSgkZmlsZSk7DQogICAgICANCiAgICAgIGlmICgoJGN1cnJlbnRUaW1lc3RhbXAgLSAkbGFzdEFjY2Vzc1RpbWUpID4gJHRoaXMtPnNlc3Npb25fZHVyYXRpb24pDQogICAgICB7DQogICAgICAgIFx1bmxpbmsoJGZpbGUpOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeSgpIDogdm9pZA0KICB7DQogICAgaWYoICFAXG1rZGlyKCR0aGlzLT50bXBfZGlyLCAwNzc3KSAmJiAhXGlzX2RpcigkdGhpcy0+dG1wX2RpcikgKQ0KICAgIHsNCiAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbihcc3ByaW50ZignRGlyZWN0b3J5ICIlcyIgd2FzIG5vdCBjcmVhdGVkJywgJHRoaXMtPnRtcF9kaXIpKTsNCiAgICB9DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWxlUGF0aCgpDQogIHsNCiAgICByZXR1cm4gJHRoaXMtPmZuOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gZ2V0VW5pcXVlSWQoKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT51bmlxdWVJZDsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIGdldEZpbGVVcmwoKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5mdXJsOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2Vzc2lvbkR1cmF0aW9uKCkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+c2Vzc2lvbl9kdXJhdGlvbjsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIGlzU2Vzc2lvbkV4cGlyZWQoKSA6IGJvb2wNCiAgew0KICAgIHJldHVybiBcdGltZSgpIC0gJHRoaXMtPnNlc3Npb25fc3RhcnRfdGltZSA+ICR0aGlzLT5zZXNzaW9uX2R1cmF0aW9uOw0KICB9DQoNCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/Smarty</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/Smarty/class.mini_parser.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KDQpuYW1lc3BhY2UgQ01TTVNFeHRcU21hcnR5Ow0KDQoNCnVzZSBcU21hcnR5X0ludGVybmFsX1RlbXBsYXRlOw0KDQpjbGFzcyBtaW5pX3BhcnNlcg0Kew0KICAjIHNldHRpbmdzIGZsYWdzDQogIHB1YmxpYyBjb25zdCBTRVRfSUdOT1JFX1VOS05PV05fVEFHUyA9IDE7ICMgMDAwMDAwMDENCiAgDQogIC8qKg0KICAgKiBwcml2YXRlIHByb3BzDQogICAqLw0KICBwcml2YXRlID9cU21hcnR5ICRfc21hcnR5ICAgICAgICAgPSBOVUxMOw0KICBwcml2YXRlIGludCAgICAgICRfc2V0dGluZ3NfZmxhZ3MgPSBzZWxmOjpTRVRfSUdOT1JFX1VOS05PV05fVEFHUzsNCiAgcHJpdmF0ZSBzdHJpbmcgICAkX2J1ZmZlciAgICAgICAgID0gJyc7DQogIHByaXZhdGUgc3RyaW5nICAgJF9zb3VyY2UgICAgICAgICA9ICcnOw0KICBwcml2YXRlIHN0cmluZyAgICRfb3V0ICAgICAgICAgICAgPSAnJzsNCiAgcHJpdmF0ZSBzdHJpbmcgICAkX2xlZnRfZGVsICAgICAgID0gJ3snOw0KICBwcml2YXRlIHN0cmluZyAgICRfcmlnaHRfZGVsICAgICAgPSAnfSc7DQogIHByaXZhdGUgYXJyYXkgICAgJF90b2tlbnMgICAgICAgICA9IFtdOw0KICANCiAgDQogIC8qKg0KICAgKiBwdWJsaWMgcHJvcHMNCiAgICovDQogIA0KICAvKioNCiAgICogcHJpdmF0ZSBtZXRob2RzDQogICAqLw0KICANCiAgcHJpdmF0ZSBmdW5jdGlvbiBfY2xlYXJfYnVmZmVyKCkgOiB2b2lkICB7ICR0aGlzLT5fYnVmZmVyID0gJyc7IH0NCiAgcHJpdmF0ZSBmdW5jdGlvbiBfY2xlYXJfdG9rZW5zKCkgOiB2b2lkICB7ICR0aGlzLT5fdG9rZW5zID0gW107IH0NCiAgcHJpdmF0ZSBmdW5jdGlvbiBfY2xlYXJfb3V0KCkgOiB2b2lkICB7ICR0aGlzLT5fb3V0ID0gJyc7IH0NCiAgDQogIHByaXZhdGUgZnVuY3Rpb24gX3Jlc2V0KCkgOiB2b2lkDQogIHsNCiAgICAkdGhpcy0+X2NsZWFyX3Rva2VucygpOw0KICAgICR0aGlzLT5fY2xlYXJfb3V0KCk7DQogIH0NCg0KICANCiAgcHJpdmF0ZSBmdW5jdGlvbiBfcGFyc2UoKSA6IHZvaWQNCiAgew0KICAgICR0aGlzLT5fcmVzZXQoKTsNCiAgICAvLyR0aGlzLT5fc291cmNlID0gJHRoaXMtPl9idWZmZXI7DQogICAgJHRoaXMtPl9vdXQgPSAkdGhpcy0+X3NtYXJ0eS0+ZmV0Y2goJ2V2YWw6JyAuICR0aGlzLT5fYnVmZmVyKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIHB1YmxpYyBtZXRob2RzDQogICAqDQogICAqIEB0aHJvd3MgXFNtYXJ0eUV4Y2VwdGlvbg0KICAgKi8NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpDQogIHsNCiAgICAkdGhpcy0+X3NtYXJ0eSA9IG5ldyBcU21hcnR5KCk7DQogICAgJHRoaXMtPl9zbWFydHktPnNldENvbXBpbGVEaXIoXFRNUF9URU1QTEFURVNfQ19MT0NBVElPTik7DQogICAgJHRoaXMtPl9zbWFydHktPnNldENhY2hlRGlyKFxUTVBfQ0FDSEVfTE9DQVRJT04pOw0KICAgIA0KICAgIC8vIGFsbG93IHRvIHVzZSBDTVNNUyBjb3JlIHBsdWdpbnMNCiAgICAkdGhpcy0+X3NtYXJ0eS0+YWRkUGx1Z2luc0RpciggXGNtc19qb2luX3BhdGgoXENNU19ST09UX1BBVEgsICdsaWInLCAncGx1Z2lucycpICk7DQogICAgDQogICAgLy8gcmVnaXN0ZXIgZGVmYXVsdCBwbHVnaW4gaGFuZGxlcg0KICAgICR0aGlzLT5fc21hcnR5LT5yZWdpc3RlckRlZmF1bHRQbHVnaW5IYW5kbGVyKFskdGhpcywgJ0RlZmF1bHRQbHVnaW5IYW5kbGVyJ10pOw0KICANCiAgICAkc2VjdXJpdHlfcG9saWN5ID0gbmV3IFxTbWFydHlfU2VjdXJpdHkoJHRoaXMtPl9zbWFydHkpOw0KICAgIA0KICAgICRtcCA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0NNU01TRXh0JyktPkdldE1vZHVsZVBhdGgoKTsNCiAgICANCiAgICAkZGF0X2ZuID0gXGNtc19qb2luX3BhdGgoJG1wLCAnZGF0YScsICdzbWFydHlzYWZlbGlzdC5kYXQnKTsNCiAgICAkZnVuY3Rpb25zID0gXGZpbGUoJGRhdF9mbiwgXEZJTEVfSUdOT1JFX05FV19MSU5FUyB8IFxGSUxFX1NLSVBfRU1QVFlfTElORVMpOw0KICAgIA0KICAgIC8vIGFsbG93IFBIUCBmdW5jdGlvbnMNCiAgICAkc2VjdXJpdHlfcG9saWN5LT5waHBfZnVuY3Rpb25zID0gJGZ1bmN0aW9uczsNCiAgICBpZihcdmVyc2lvbl9jb21wYXJlKFxTbWFydHk6OlNNQVJUWV9WRVJTSU9OLCAnNC4wLjAnKSA8IDEpDQogICAgew0KICAgICAgLy8gcmVtb3ZlIFBIUCB0YWdzDQogICAgICAkc2VjdXJpdHlfcG9saWN5LT5waHBfaGFuZGxpbmcgPSBcU21hcnR5OjpQSFBfUkVNT1ZFOw0KICAgIH0NCiAgICAvLyBhbGxvdyBQSFAgZnVuY3Rpb25zIGFzIG1vZGlmaWVyDQogICAgJHNlY3VyaXR5X3BvbGljeS0+cGhwX21vZGlmaWVycyAgPSAkZnVuY3Rpb25zOw0KICAgIA0KICAgIC8vIGVuYWJsZSBzZWN1cml0eQ0KICAgICR0aGlzLT5fc21hcnR5LT5lbmFibGVTZWN1cml0eSgkc2VjdXJpdHlfcG9saWN5KTsNCiAgICANCiAgfQ0KICANCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBfZGZsdF9wbHVnaW4oJHBhcmFtcywgJHNtYXJ0eSkgOiBzdHJpbmcgeyByZXR1cm4gJyc7IH0NCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBfZGZsdF9ibG9ja19wbHVnaW4oJHBhcmFtcywgJGNvbnRlbnQsICRzbWFydHksICYkcmVwZWF0LCAkdGVtcGxhdGUpIDogc3RyaW5nIHsgcmV0dXJuICcnOyB9DQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX2RmbHRfbW9kKCkgOiBzdHJpbmcgeyByZXR1cm4gJyc7IH0NCiAgDQogIA0KICAvKioNCiAgICogRGVmYXVsdCBQbHVnaW4gSGFuZGxlcg0KICAgKg0KICAgKiBjYWxsZWQgd2hlbiBTbWFydHkgZW5jb3VudGVycyBhbiB1bmRlZmluZWQgdGFnIGR1cmluZyBjb21waWxhdGlvbg0KICAgKg0KICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICRuYW1lICAgICAgbmFtZSBvZiB0aGUgdW5kZWZpbmVkIHRhZw0KICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICR0eXBlICAgICAgdGFnIHR5cGUgKGUuZy4gU21hcnR5OjpQTFVHSU5fRlVOQ1RJT04sIFNtYXJ0eTo6UExVR0lOX0JMT0NLLA0KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU21hcnR5OjpQTFVHSU5fQ09NUElMRVIsIFNtYXJ0eTo6UExVR0lOX01PRElGSUVSLA0KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU21hcnR5OjpQTFVHSU5fTU9ESUZJRVJDT01QSUxFUikNCiAgICogQHBhcmFtIFNtYXJ0eV9JbnRlcm5hbF9UZW1wbGF0ZSAgICAkdGVtcGxhdGUgIHRlbXBsYXRlIG9iamVjdA0KICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICAgICAgJiRjYWxsYmFjayAgcmV0dXJuZWQgZnVuY3Rpb24gbmFtZQ0KICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICAgICAgJiRzY3JpcHQgICAgb3B0aW9uYWwgcmV0dXJuZWQgc2NyaXB0IGZpbGVwYXRoIGlmIGZ1bmN0aW9uIGlzIGV4dGVybmFsDQogICAqIEBwYXJhbSBib29sICAgICAgICAgICAgICAgICAgICAgICAmJGNhY2hlYWJsZSB0cnVlIGJ5IGRlZmF1bHQsIHNldCB0byBGQUxTRSBpZiBwbHVnaW4gaXMgbm90IGNhY2hlYWJsZQ0KICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNtYXJ0eSA+PSAzLjEuOCkNCiAgICoNCiAgICogQHJldHVybiBib29sICAgICAgICAgICAgICAgICAgICAgIHRydWUgaWYgc3VjY2Vzc2Z1bA0KICAgKi8NCiAgcHVibGljIGZ1bmN0aW9uIERlZmF1bHRQbHVnaW5IYW5kbGVyICgkbmFtZSwgJHR5cGUsICR0ZW1wbGF0ZSwgJiRjYWxsYmFjaywgJiRzY3JpcHQsICYkY2FjaGVhYmxlKSA6IGJvb2wNCiAgew0KICAgIHN3aXRjaCgkdHlwZSkNCiAgICB7DQogICAgICBjYXNlIFxTbWFydHk6OlBMVUdJTl9DT01QSUxFUjoNCiAgICAgIGNhc2UgXFNtYXJ0eTo6UExVR0lOX0ZVTkNUSU9OOg0KICAgICAgICAkY2FsbGJhY2sgPSBbX19DTEFTU19fLCAnX2RmbHRfcGx1Z2luJ107DQogICAgICAgICRjYWNoYWJsZSA9IEZBTFNFOw0KICAgICAgDQogICAgICAgIHJldHVybiBUUlVFOw0KICANCiAgICAgIGNhc2UgXFNtYXJ0eTo6UExVR0lOX0JMT0NLOg0KICAgICAgICAkY2FsbGJhY2sgPSBbX19DTEFTU19fLCAnX2RmbHRfYmxvY2tfcGx1Z2luJ107DQogICAgICAgICRjYWNoYWJsZSA9IEZBTFNFOw0KICAgICAgDQogICAgICAgIHJldHVybiBUUlVFOw0KICAgIA0KICAgICAgY2FzZSBcU21hcnR5OjpQTFVHSU5fTU9ESUZJRVI6DQogICAgICAgICRjYWxsYmFjayA9IFtfX0NMQVNTX18sICdfZGZsdF9tb2QnXTsNCiAgICAgICAgJGNhY2hhYmxlID0gRkFMU0U7DQogICAgICANCiAgICAgICAgcmV0dXJuIFRSVUU7DQogICAgDQogICAgICBkZWZhdWx0Og0KICAgICAgICByZXR1cm4gRkFMU0U7DQogICAgfQ0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gR2V0Q3VzdG9tU21hcnR5T2JqZWN0KCkgOiBcU21hcnR5DQogIHsNCiAgICByZXR1cm4gJHRoaXMtPl9zbWFydHk7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBSZWdpc3RlclRhZygkdHlwZSwgJG5hbWUsICRjYWxsYWJsZSkgOiBtaW5pX3BhcnNlcg0KICB7DQogICAgJHRoaXMtPl9zbWFydHktPnJlZ2lzdGVyUGx1Z2luKCR0eXBlLCAkbmFtZSwgJGNhbGxhYmxlKTsNCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBSZWdpc3RlclRhZ3MoJHRhZ3MpIDogbWluaV9wYXJzZXINCiAgew0KICAgIGZvcmVhY2goJHRhZ3MgYXMgJG5hbWUgPT4gJGRlZikNCiAgICB7DQogICAgICBbJHR5cGUsICRjYWxsYWJsZV0gPSAkZGVmOw0KICAgICAgJHRoaXMtPlJlZ2lzdGVyVGFnKCR0eXBlLCAkbmFtZSwgJGNhbGxhYmxlKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICR0aGlzOw0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gTG9hZCgkbGluZXMgPSAnJykNCiAgew0KICAgICR0aGlzLT5fYnVmZmVyID0gJGxpbmVzOw0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KICANCiAgcHVibGljIGZ1bmN0aW9uIFBhcnNlKCkgOiBzdHJpbmcNCiAgew0KICAgICR0aGlzLT5fcGFyc2UoKTsNCiAgICByZXR1cm4gJHRoaXMtPl9vdXQ7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBTZXRMZWZ0RGVsKCRkZWxpbSkgOiBtaW5pX3BhcnNlcg0KICB7DQogICAgJHRoaXMtPl9sZWZ0X2RlbCA9ICRkZWxpbTsNCiAgICByZXR1cm4gJHRoaXM7DQogIH0NCiAgDQogIHB1YmxpYyBmdW5jdGlvbiBTZXRSaWdodERlbCgkZGVsaW0pIDogbWluaV9wYXJzZXINCiAgew0KICAgICR0aGlzLT5fcmlnaHRfZGVsID0gJGRlbGltOw0KICAgIHJldHVybiAkdGhpczsNCiAgfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKaWYodmVyc2lvbl9jb21wYXJlKHBocHZlcnNpb24oKSwgJzcuMi4xJykgPCAwKQp7CiAgcmV0dXJuICJNaW5pbXVtIFBIUCB2ZXJzaW9uIG9mIDcuMi4xIHJlcXVpcmVkIjsKfQoKJGRiICAgICAgICAgID0gXHh0X3V0aWxzOjpnZXRfZGIoKTsKJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsKJGRpY3QgPSAkZGItPk5ld0RhdGFEaWN0aW9uYXJ5KCk7CgokZmxkcyA9ICJpZCBJIEtFWSBBVVRPLAogICAgICAgICBrZXkxIEMoMjU1KSwKICAgICAgICAga2V5MiBDKDI1NSksCiAgICAgICAgIGtleTMgQygyNTUpLAogICAgICAgICBrZXk0IEMoMjU1KSwKICAgICAgICAgZGF0YSBYLAogICAgICAgICB0eXBlIEMoMjApLAogICAgICAgICBleHBpcnkgQygyMCksCiAgICAgICAgIGNyZWF0ZV9kYXRlICIgLiBDTVNfQURPREJfRFQgLiAiLAogICAgICAgICBtb2RpZmllZF9kYXRlICIgLiBDTVNfQURPREJfRFQ7Cgokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoQ01TTVNFWFRfVEFCTEVfQVNTT0NEQVRBLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKJGxpYmRlZm4gICAgICAgICAgID0gbmV3IENNU01TRXh0XGpzbG9hZGVyXGxpYmRlZm4oJ3h0X2Ntc21zJyk7CiRsaWJkZWZuLT5jYWxsYmFjayA9IFsneHRfanNoYW5kbGVyJywgJ2xvYWQnXTsKJHRoaXMtPmdldF9qc2xvYWRlcigpLT5yZWdpc3RlcigkbGliZGVmbik7CgojIG1pZ3JhdGUgY2dlIGNvbmZpZ19lbnRyaWVzIGlmIHRoZXkgZXhpc3QKXENNU01TRXh0XGNnZV9taWdyYXRpb25fdG9vbHM6OkdldEluc3RhbmNlKCktPm1pZ3JhdGVfY29uZmlnX2VudHJpZXMoKTsK]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKJGRiID0geHRfdXRpbHM6OmdldF9kYigpOwokdGFib3B0YXJyYXkgPSBhcnJheSggJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nICk7CiRkaWN0ID0gJGRiLT5OZXdEYXRhRGljdGlvbmFyeSgpOwoKJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCk7CiR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCk7CgokdG1wID0gJGRpY3QtPkRyb3BUYWJsZVNRTChDTVNNU0VYVF9UQUJMRV9BU1NPQ0RBVEEpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCR0bXApOwoKJHRoaXMtPmdldF9qc2xvYWRlcigpLT51bnJlZ2lzdGVyX2J5X21vZHVsZSgkdGhpcy0+R2V0TmFtZSgpKTsKCiMKIyBFT0YKIwo=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENNU01TRXh0IChjKSAyMDIwLTIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyAgQW4gYWRkLW9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIHByb3ZpZGUgdXNlZnVsIGZ1bmN0aW9ucwojICBhbmQgY29tbW9ubHkgdXNlZCBndWkgY2FwYWJpbGl0aWVzIHRvIG90aGVyIG1vZHVsZXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mOgojCiMgTW9kdWxlOiBDR0V4dGVuc2lvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQovKioKICogQHZhciBzdHJpbmcgJG9sZHZlcnNpb24gVGhlIHZlcnNpb24gd2UgYXJlIHVwZ3JhZGluZyBmcm9tCiAqIEB2YXIgc3RyaW5nICRuZXd2ZXJzaW9uIFRoZSB2ZXJzaW9uIHdlIGFyZSB1cGdyYWRpbmcgdG8KICovCmlmKCAhZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSApIHsgZXhpdDsgfQoKdHJ5CnsKICByZXR1cm4gXENNU01TRXh0XGludGVybmFsXElVQTo6Z2V0SW5zdGFuY2UoKS0+VXBncmFkZSgkb2xkdmVyc2lvbiwgJG5ld3ZlcnNpb24pOwp9CmNhdGNoKFxFeGNlcHRpb24gJGUpCnsKICByZXR1cm4gJGUtPmdldE1lc3NhZ2UoKTsKfQ==]]></data>
	</file>
	<file>
	  <filename>/templates</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin_lkp_edititem.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGV9PC9oMz4Ke2lmICRzdWJ0aXRsZX08aDQ+eyRzdWJ0aXRsZX08L2g0PnsvaWZ9Cgp7JGZvcm1zdGFydH0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c3VibWl0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ3N1Ym1pdCcpfSIvPgogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1jYW5jZWwiIHZhbHVlPSJ7JG1vZC0+TGFuZygnY2FuY2VsJyl9Ii8+CiAgPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPip7eHR4X2xhbmcoJ25hbWUnKX06PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9bmFtZSIgdmFsdWU9InskaXRlbS0+bmFtZX0iIHNpemU9IjgwIi8+CiAgPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnt4dHhfbGFuZygnZGVzY3JpcHRpb24nKX08L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICB7eHRfd3lzaXd5ZyBwcmVmaXg9JGFjdGlvbmlkIG5hbWU9ZGVzY3JpcHRpb24gdmFsdWU9JGl0ZW0tPmRlc2NyaXB0aW9uIHJvd3M9NH0KICA8L3A+CjwvZGl2Pgp7JGZvcm1lbmR9]]></data>
	</file>
	<file>
	  <filename>/templates/changelog.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHN0eWxlPg0KICBzZWN0aW9uIGNvZGUNCiAgew0KICAgIGJvcmRlci1yYWRpdXM6IDAuMzE1ZW07DQogICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsNCiAgICBwYWRkaW5nOiAwIDAuM2VtIDAuMDQwZW07DQogICAgZm9udC1zaXplOiAwLjllbTsNCiAgfQ0KPC9zdHlsZT4NCjxzZWN0aW9uPg0KICA8aDQ+LSBWZXJzaW9uIDxjb2RlPjEuNS4xOjwvY29kZT4gPGNvZGU+MjAyMy0wOC0wNzwvY29kZT48L2g0Pg0KICA8dWw+DQogICAgPGxpPjxjb2RlPkZpeGVkOjwvY29kZT4gQSBidWcgcmVsYXRlZCB3aXRoIE1BTVMgZnJvbnRlbmQgYWN0aW9uczs8L2xpPg0KICA8L3VsPg0KICA8aDQ+LSBWZXJzaW9uIDxjb2RlPjEuNS4wOjwvY29kZT4gPGNvZGU+MjAyMy0wNy0zMDwvY29kZT48L2g0Pg0KICAgIDx1bD4NCiAgICAgIDxsaT48Y29kZT5DaGFuZ2VkOjwvY29kZT4gbW9yZSBzdGFiaWxpdHkgaW1wcm92ZW1lbnRzOzwvbGk+DQogICAgICA8bGk+PGNvZGU+QWRkZWQ6PC9jb2RlPiBhIG51bWJlciBvZiBuZXcgY2xhc3NlcyB0byB0aGUgZGV2ZWxvcGVyIHRvb2xzIHBhbGV0dGU7PC9saT4NCiAgICAgIDxsaT48Y29kZT5BZGRlZDo8L2NvZGU+IGFuIGV4dHJhIGRiIGxpYiB0byBzdGFydCBpbXBsZW1lbnRpbmcgc29tZSBvZiB0aGUgZmVhdHVyZXMgdGhhdCBtYXkgYmUgcG9ydGVkIHRvIHRoZSBjb3JlOzwvbGk+DQogICAgICAgIDxsaT48Y29kZT5VcGRhdGVkOjwvY29kZT4gSlNNaW4gbGlicmFyeToNCiAgICAgICAgICA8dWw+DQogICAgICAgICAgICA8bGk+RG9lcyBub3QgY2hva2Ugb24gc29tZSByZWdleHAgbGl0ZXJhbHMgY29udGFpbmluZyBxdW90ZSBjaGFyYWN0ZXJzLiBFLmcuIC8nLzwvbGk+DQogICAgICAgICAgICA8bGk+U3BhY2VzIGFyZSBwcmVzZXJ2ZWQgYWZ0ZXIgc29tZSBhZGQvc3ViIG9wZXJhdG9ycywgc28gdGhleSBhcmUgbm90IG1pc3Rha2VubHkgY29udmVydGVkIHRvIHBvc3QtaW5jL2RlYy4gRS5nLiBhICsgKytiIC0+IGErICsrYjwvbGk+DQogICAgICAgICAgPC91bD4NCiAgICAgICAgPC9saT4NCiAgICAgIDxsaT48Y29kZT5OZXc6PC9jb2RlPiB0aGVyZSBpcyBub3cgYSBtb2R1bGUgQVBJIGNsYXNzIHdoaWNoIGV4dGVuZHMgYW5kIG92ZXJyaWRlcyAgdGggTW9kdWxlIFJlZmVyZW5jZSBjbGFzcyBzbyB0aGF0IG9ubHkgcHVibGljIG1ldGhvZHMgd2l0aCBhbiBAYXBpIGFubm90YXRpb24gYXJlIGV4cG9zZWQuPC9saT4NCiAgICAgIDxsaT48Y29kZT5OZXc6PC9jb2RlPiB0aGVyZSBpcyBub3cgYSBNb2R1bGUgUmVmZXJlbmNlIGNsYXNzIHRvIHJlZHVjZSB0aGUgZm9vdHByaW50IG9mIHRoZSBtb2R1bGVzIHdoZW4gY2FsbGVkIGFzIGFuIEFQSSB0byB0aGUgbW9kdWxlLjwvbGk+DQogICAgICA8bGk+PGNvZGU+TmV3OjwvY29kZT4gdGhlIG1vZHVsZXMnIGFjdGlvbnMgY2FuIG5vdyBiZSBjbGFzc2VzIG9uIG1vZHVsZV9kYXRhIGZvbGRlciBpbiB0aGUgbW9kdWxlcyBmb2xkZXI7PC9saT4NCiAgICAgIDxsaT48Y29kZT5DaGFuZ2VkOjwvY29kZT4gdGhlIFhUTW9kdWxlIGNsYXNzIGhhcyBiZWVuIHNwbGl0IGludG8gdHJhaXRzIGZvciB0aGUgbW9zdCBwYXJ0LCBzdGlsbCBhIFdJUCwgYnV0IGFkZHMgZmxleGliaWxpdHkgYW5kIHNvbWUgbW9yZSBmZWF0dXJlczs8L2xpPjwvbGk+DQogICAgICA8bGk+PGNvZGU+Rml4ZWQ6PC9jb2RlPiBhIGZldyBtb3JlIGJ1Z3MgYW5kIHNvbWUgbW9yZSBQSFAgOC4zIGNvbXBhdGliaWxpdHkgaXNzdWVzOzwvbGk+DQogICAgICA8bGk+PGNvZGU+Rml4ZWQ6PC9jb2RlPiBhbiBpc3N1ZSB3aXRoIHRoZSBzZXNzaW9uIG1hbmFnZXIgZmlsZXMgcGVybWlzc2lvbnM7PC9saT4NCiAgICAgIDxsaT48Y29kZT5GaXhlZDo8L2NvZGU+IEJSIzEyNTY4OzwvbGk+DQogICAgICA8bGk+PGNvZGU+VXBkYXRlZDo8L2NvZGU+IGh0bUxhd2VkIHRvIDEuMi4xNTs8L2xpPg0KICA8L3VsPg0KICA8aDQ+LSBWZXJzaW9uIDxjb2RlPjEuNC41OjwvY29kZT4gPGNvZGU+MjAyMy0xMS0yNTwvY29kZT48L2g0Pg0KICAgIDx1bD4NCiAgICA8bGk+PGNvZGU+Q2hhbmdlZDo8L2NvZGU+IGEgZmV3IHN0YWJpbGl0eSBpbXByb3ZlbWVudHM7PC9saT4NCiAgICA8bGk+PGNvZGU+QWRkZWQ6PC9jb2RlPiBhIG51bWJlciBvZiBuZXcgY2xhc3NlcyB0byB0aGUgZGV2ZWxvcGVyIHRvb2xzIHBhbGV0dGU7PC9saT4NCiAgICA8bGk+PGNvZGU+Rml4ZWQ6PC9jb2RlPiBnYXJiYWdlIGNvbGxlY3RvciBvbiB0aGUgc2Vzc2lvbiBtYW5hZ2VyOzwvbGk+DQogIDwvdWw+DQogIDxoND4tIFZlcnNpb24gPGNvZGU+MS40LjQ6PC9jb2RlPiA8Y29kZT4yMDIzLTEwLTA1PC9jb2RlPjwvaDQ+DQogICAgPHVsPg0KICAgIDxsaT48Y29kZT5DaGFuZ2VkOjwvY29kZT4gYSBmZXcgc3RhYmlsaXR5IGltcHJvdmVtZW50czs8L2xpPg0KICAgIDxsaT48Y29kZT5BZGRlZDo8L2NvZGU+IGEgbnVtYmVyIG9mIG5ldyBjbGFzc2VzIHRvIHRoZSBkZXZlbG9wZXIgdG9vbHMgcGFsZXR0ZTs8L2xpPg0KICAgICAgPGxpPjxjb2RlPkZpeGVkOjwvY29kZT4gbWlzc2luZyBjaGFuZ2Vsb2cgZW50cmllcyBhbmQgYSBmZXcgb3RoZXIgZml4ZXM7PC9saT4NCiAgICA8bGk+PGNvZGU+QWRkZWQ6PC9jb2RlPiBkYmcoKS0+ZHVtcCg8ZW0+W3ZhcnMuLi5dPC9lbT4pIGFuZCBhIGZldyBvdGhlciBkZWJ1ZyBoZWxwZXIgZnVuY3Rpb25zIGNhbGxlZCB2aWEgZGJnKCktPjs8L2xpPg0KICA8L3VsPg0KICA8aDQ+LSBWZXJzaW9uIDxjb2RlPjEuNC4zOjwvY29kZT4gPGNvZGU+MjAyMy0wOS0xMDwvY29kZT48L2g0Pg0KICAgIDx1bD4NCiAgICA8bGk+PGNvZGU+Q2hhbmdlZDo8L2NvZGU+IGEgZmV3IHN0YWJpbGl0eSBpbXByb3ZlbWVudHM7PC9saT4NCiAgICA8bGk+PGNvZGU+QWRkZWQ6PC9jb2RlPiBzbWFydHkgcGx1Z2luIHRvIHJlc3RyaWN0IGFjY2VzcyB0byBwYWdlcyBieSBJUDs8L2xpPg0KICAgIDxsaT48Y29kZT5BZGRlZDo8L2NvZGU+IHNtYXJ0eSBwbHVnaW4gdG8gc2hvdyBhIGNvdW50ZG93biB1bnRpbCBwaHAgc2Vzc2lvbiBleHBpcmVzPC9saT4NCiAgICA8bGk+PGNvZGU+Rml4ZWQ6PC9jb2RlPiBQSFAgOC4xIGNvbXBhdGliaWxpdHkgZml4ZXMgYXJlIHN0aWxsIHVuZGVyd2F5IGFzIHdlIGZpbmQgdGhlbTs8L2xpPg0KICA8L3VsPg0KICA8aDQ+LSBWZXJzaW9uIDxjb2RlPjEuNC4yOjwvY29kZT4gPGNvZGU+MjAyMy0wOC0yMTwvY29kZT48L2g0Pg0KICAgIDx1bD4NCiAgICA8bGk+PGNvZGU+Q2hhbmdlZDo8L2NvZGU+IGEgZmV3IHN0YWJpbGl0eSBpbXByb3ZlbWVudHM7PC9saT4NCiAgICA8bGk+PGNvZGU+QWRkZWQ6PC9jb2RlPiBhIGZldyBXSVAgZnVuY3Rpb25zIChzdGlsbCB1bmRlciBkZXZlbG9wbWVudCk7PC9saT4NCiAgICA8bGk+PGNvZGU+Rml4ZWQ6PC9jb2RlPiBQSFAgOC4xIGNvbXBhdGliaWxpdHkgZml4ZXMgYXJlIHN0aWxsIHVuZGVyd2F5IGFzIHdlIGZpbmQgdGhlbTs8L2xpPg0KICA8L3VsPg0KICA8aDQ+LSBWZXJzaW9uIDxjb2RlPjEuNC4xPC9jb2RlPiA6IDxjb2RlPjIwMjMtMDMtMDQ8L2NvZGU+PC9oND4NCiAgPHVsPg0KICAgIDxsaT48Y29kZT5DaGFuZ2VkOjwvY29kZT4gaGVscCBpcyBiZXR0ZXIgb3JnYW5pemVkIGFuZCB0aGUgY29kZSBzbmlwcGV0cyA8c3Ryb25nPmNsaWNrIHRvIGNvcHk8L3N0cm9uZz4gZmVhdHVyZSBoYXMgYmVlbiBpbXBsZW1lbnRlZDs8L2xpPg0KICAgIDxsaT48Y29kZT5BZGRlZDo8L2NvZGU+IFNtYXJ0eSBwbHVnaW4gdG8gc2V0IGNvb2tpZXMgZnJvbSB0ZW1wbGF0ZXM7PC9saT4NCiAgICA8bGk+PGNvZGU+Rml4ZWQ6PC9jb2RlPiBjZmcuaW5jIHdpbGwgbm8gbG9uZ2VyIGJlIGRpc3RyaWJ1dGVkIChpdCB3YXMgYnkgbWlzdGFrZSBsYXN0IHJlbGVhc2UpOzwvbGk+DQogICAgPGxpPjxjb2RlPkFkZGVkOjwvY29kZT4gY2ZnX3NhbXBsZS5pbmMgaXMgbm93IHRoZSBtZWFucyBieSB3aGljaCBjZmcuaW5jIGlzIGRvY3VtZW50ZWQgYW5kIHNlcnZlcyBhcyBhIGRlZmF1bHQgY2ZnLmluYyBmb3IgbmV3IGluc3RhbGxhdGlvbnM7PC9saT4NCiAgICA8bGk+PGNvZGU+Rml4ZWQ6PC9jb2RlPiBQSFAgOC4xIGNvbXBhdGliaWxpdHkgZml4ZXMgYXJlIHN0aWxsIHVuZGVyd2F5IGFzIHdlIGZpbmQgdGhlbTs8L2xpPg0KICA8L3VsPg0KICA8aDQ+LSBWZXJzaW9uIDxjb2RlPjEuNDwvY29kZT4gOiA8Y29kZT4yMDIzLTAxLTIyPC9jb2RlPjwvaDQ+DQogIDx1bD4NCiAgICA8bGk+PGNvZGU+Q2hhbmdlZDo8L2NvZGU+IHNvbWUgb2YgdGhlIGNvZGUgYmFzZSBoYXMgYmVlbiBvcHRpbWl6ZWQgKHRoaXMgc2hvdWxkIGJlIHJlY3VycmVudCBmb3IgYSB3aGlsZSBhcyBpdCBpcyBzdGlsbCBXSVApOzwvbGk+DQogICAgPGxpPjxjb2RlPkFkZGVkPC9jb2RlPiBuZXcgZnVuY3Rpb25hbGl0eSB0byBtb2R1bGVfbWlncmF0b3IsIHN0aWxsIHdpcCBidXQgYWxyZWFkeSB2ZXJ5IHBvd2VyZnVsIChzZWUgY29kZSBhbmQgbW9kdWxlcyBzdWNoIGFzIFVwTWFuIGFuZCBTbWFydEZvcm1zIG9yIFNtYXJ0Rm9ybXNBY2Nlc3MgZm9yIHNvbWUgc29ydCBvZiBleGFtcGxlcyBvZiBpbXBsZW1lbnRhdGlvbik7PC9saT4NCiAgICA8bGk+PGNvZGU+QWRkZWQ8L2NvZGU+IDxjb2RlPmNvbnZlcnRfb2JqX2NsYXNzKCk8L2NvZGU+IHRvIGNsYXNzIHh0X3V0aWxzLCBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNvbnZlcnQgc2ltcGxlIHNoYWxsb3cgb2JqZXRzIGZyb20gb25lIGNsYXNzIHRvIGFub3RoZXI7PC9saT4NCiAgICA8bGk+PGNvZGU+Rml4ZWQ8L2NvZGU+IGEgZmV3IG1vcmUgYnVncyBhbmQgc29tZSBtb3JlIFBIUCA4LjEgY29tcGF0aWJpbGl0eSBpc3N1ZXM7PC9saT4NCiAgPC91bD4NCiAgPGg0Pi0gVmVyc2lvbiA8Y29kZT4xLjM8L2NvZGU+IDogPGNvZGU+MjAyMi0xMi0xNTwvY29kZT48L2g0Pg0KICA8dWw+DQogICAgPGxpPjxjb2RlPkNoYW5nZWQ8L2NvZGU+IG9mZmljaWFsbHkgYWRvcHRlZCBzZW1hbnRpYyB2ZXJzaW9uaW5nOzwvbGk+DQogICAgPGxpPjxjb2RlPkFkZGVkPC9jb2RlPiBhIFNtYXJ0eSBtaW5pIHBhcnNlciB0aGF0IHNob3VsZCBhbGxvdyBvdGhlciBtb2R1bGVzIHRvIHBhcnNlIG11bHRpcGxlIHR5cGVzIG9mIGlucHV0czs8L2xpPg0KICAgIDxsaT48Y29kZT5GaXhlZDwvY29kZT4gYSBmZXcgYnVncyBhbmQgc29tZSBtb3JlIFBIUCA4LjEgY29tcGF0aWJpbGl0eSBpc3N1ZXM7PC9saT4NCiAgPC91bD4NCiAgPGg0Pi0gVmVyc2lvbiA8Y29kZT4xLjIuMTwvY29kZT4gOiA8Y29kZT4yMDIyLTExLTIyPC9jb2RlPjwvaDQ+DQogIDx1bD4NCiAgICA8bGk+PGNvZGU+Rml4ZWQ8L2NvZGU+IGEgZmV3IGJ1Z3MgYW5kIHNvbWUgbW9yZSBQSFAgOC4xIGNvbXBhdGliaWxpdHkgaXNzdWVzOzwvbGk+DQogIDwvdWw+DQogIDxoND4tIFZlcnNpb24gPGNvZGU+MS4yPC9jb2RlPiA6IDxjb2RlPjIwMjItMDgtMjE8L2NvZGU+PC9oND4NCiAgPHVsPg0KICAgIDxsaT48Y29kZT5BZGRlZDwvY29kZT4gYSBmZXcgdXRpbGl0eSBjbGFzc2VzIHRoYXQgb25seSBoYXZlIGltcG9ydGFuY2UgZm9yIGNvZGVycyAobmVlZHMgZG9jdW1lbnRhdGlvbik7PC9saT4NCiAgICA8bGk+PGNvZGU+QWRkZWQ8L2NvZGU+IGEgZmV3IHV0aWxpdHkgY2xhc3NlcyB0aGF0IG9ubHkgaGF2ZSBzb21lIHVuZGVyIHRoZSBob29kIGltcG9ydGFuY2U7PC9saT4NCiAgICA8bGk+PGNvZGU+Rml4ZWQ8L2NvZGU+IGEgZmV3IGJ1Z3MgYW5kIHNvbWUgbW9yZSBQSFAgOC4xIGNvbXBhdGliaWxpdHkgaXNzdWVzOzwvbGk+DQogIDwvdWw+DQogIDxoND4tIFZlcnNpb24gPGNvZGU+MS4xLjAuMTwvY29kZT4gOiA8Y29kZT4yMDIyLTA4LTIxPC9jb2RlPjwvaDQ+DQogIDx1bD4NCiAgICA8bGk+PGNvZGU+Rml4ZWQ8L2NvZGU+IHRoZSByZWxlYXNlIFhNTCBmaWxlIG9mIDEuMSwgb3RoZXJ3aXNlIGlzIHRoZSBzYW1lIHJlbGVhc2U7PC9saT4NCiAgPC91bD4NCiAgPGg0Pi0gVmVyc2lvbiA8Y29kZT4xLjE8L2NvZGU+IDogPGNvZGU+MjAyMi0wOC0yMTwvY29kZT48L2g0Pg0KICAgIDx1bD4NCiAgICA8bGk+PGNvZGU+QWRkZWQ8L2NvZGU+ICBBIFBIUCBoZWxwZXIgY2xhc3MgZm9yIG1pZ3JhdGluZyBzZXR0aW5ncyBhbmQgZGF0YSBiZXR3ZWVuIG1vZHVsZXMgKHRvIGhlbHAgd2l0aCBmb3JrcyBtaWdyYXRpb25zKTs8L2xpPg0KICAgIDxsaT48Y29kZT5BZGRlZDwvY29kZT4gU21hcnQganMgKGEganMgdGVtcGxhdGluZyBlbmdpbmUgdGhhdCBtaW1pY3MgUEhQIFNtYXJ0eSB0ZW1wbGF0aW5nIGVuZ2luZSk7PC9saT4NCiAgICA8bGk+PGNvZGU+QWRkZWQ8L2NvZGU+IEJhY2tib25lIGpzOzwvbGk+DQogICAgPGxpPjxjb2RlPkFkZGVkPC9jb2RlPiBTb21lIGNzcyBhZGRvbnMgZm9yIGJhY2tlbmQgbW9kdWxlIHN0eWxpbmc7PC9saT4NCiAgICA8bGk+PGNvZGU+QWRkZWQ8L2NvZGU+IEEgbnVtYmVyIG9mIG5ldyBmZWF0dXJlcyBhbmQgZGV2ZWxvcGVyIFBIUCBjbGFzc2VzOzwvbGk+DQogICAgPGxpPjxjb2RlPkZpeGVkPC9jb2RlPiBBIG51bWJlciBvZiBmaXhlcyBmb3IgUEhQIDguMSBjb21wYXRpYmlsaXR5ICh3b3JrIGluIHByb2dyZXNzKTs8L2xpPg0KICA8L3VsPg0KICA8aDQ+LSBWZXJzaW9uIDxjb2RlPjEuMC4xPC9jb2RlPiA6IDxjb2RlPjIwMjEtMDMtMDE8L2NvZGU+PC9oND4NCiAgPHA+QSBmZXcgaW1wb3J0YW50IGZpeGVzIG5hbWVseTo8L3A+DQogIDx1bD4NCiAgICA8bGk+PGNvZGU+Rml4ZWQ8L2NvZGU+IEVkaXRpbmcgdGVtcGxhdGVzIGluIGRlcGVuZGVudCBtb2R1bGVzIGRvZXNuJ3QganVtcCB0byBhIENNU01TRXh0IGFjdGlvbjs8L2xpPg0KICAgIDxsaT48Y29kZT5GaXhlZDwvY29kZT4gRml4ZXMgdG8gdGhlIGFjdGlvbiBmaWxlcyBzaGFyZWQgYmV0d2VlbiBYVE1vZHVsZSBhbmQgaXRzIGRlc2NlbmRhbnRzOzwvbGk+DQogIDwvdWw+DQogIDxoND4tIFZlcnNpb24gPGNvZGU+MS4wLjA8L2NvZGU+IDogPGNvZGU+MjAyMS0wMy0wODwvY29kZT48L2g0Pg0KICA8dWw+DQogICAgPGxpPkluaXRpYWwgUHVibGljIFJlbGVhc2U7PC9saT4NCiAgPC91bD4NCjwvc2VjdGlvbj4NCg==]]></data>
	</file>
	<file>
	  <filename>/templates/default_admin.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPg0KICA8aDM+R2VuZXJhbCBOb3RlczwvaDM+DQogIDxwPg0KICAgIFRoaXMgbW9kdWxlIGlzIGEgZm9yayBvZiA8Yj5DR0V4dGVuc2lvbnM8L2I+IGRldmVsb3BlZCBieSA8Yj5Sb2JlcnQgQ2FtcGJlbGwgPGNhbGd1eTEwMDA+PC9iPi4gRm9yIHRoZSBtb3N0IHBhcnQgdGhlcmUgaGF2ZSBub3QgYmVlbiBhbnkgbWFqb3IgY2hhbmdlcyB0byBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgZmVhdHVyZXMgZXhjZXB0IHRoZSByZW5hbWluZyBvZiBpdHMgZnVuY3Rpb25zIGFuZCBTbWFydHkgcGx1Z2lucyAocGxlYXNlIGNvbnN1bHQgdGhlIG1vZHVsZSdzIDxiPmhlbHAgcGFnZTwvYj4pIGluIGEgd2F5IHRoYXQgc2hvdWxkIGZhY2lsaXRhdGUgYSBzZWFyY2ggYW5kIHJlcGxhY2UgdG8gYW55IGZpbGVzIG9yIHRlbXBsYXRlcyB1c2luZyB0aGVtIG1ha2luZyBpdHMgcmVwbGFjZW1lbnQgYSBzdHJhaWdodCBmb3J3YXJkIHByb2NlZHVyZS4NCiAgPC9wPg0KICA8cD5Cb3RoIG1vZHVsZXMgc2hvdWxkIGJlIGFibGUgdG8gYmUgaW5zdGFsbGVkIHNpZGUgYnkgc2lkZSB3aXRob3V0IGNvbmZsaWN0cywgYnV0IHdlIHN0cm9uZ2x5IGFkdmlzZSB5b3UgdG8gb25seSBoYXZlIG9uZSBpbnN0YWxsZWQgaWYgcG9zc2libGU6IHRvbyBtYW55IG1vZHVsZXMgbWF5IHNsb3cgZG93biB5b3VyIHNpdGUuPC9wPg0KICAgIDxwPg0KICAgIEFsdGhvdWdoIGV2ZXJ5IGVmZm9ydCBoYXMgYmVlbiBtYWRlIHRvIHRlc3QgYW5kIG1ha2Ugc3VyZSB0aGUgbW9kdWxlIHdpbGwgcmVwbGFjZSBzZWFtbGVzc2x5IDxiPkNHRXh0ZW5zaW9uczwvYj4sIHRoZXJlIGlzIG5vIHdheSB0byBiZSBzdXJlIHRoZXJlIHdvbid0IGJlIGFueSBidWdzIGludHJvZHVjZWQgaW4gdGhlIGZvcmtpbmcgcHJvY2VzcyBvciBpbmhlcml0ZWQgZnJvbSB0aGUgc291cmNlIG1vZHVsZS4gSWYgeW91IHJ1biBhY3Jvc3MgYW55LCBwbGVhc2UgcG9zdCBhIGJ1ZyByZXBvcnQgdmlhIHRoZSB1c3VhbCBtZWFucyAoc2VlIGhlbHAgZG9jdW1lbnRhdGlvbjogPGI+QWJvdXQ8L2I+IHRhYikuDQogIDwvcD4NCiAgPGg0Pk5vdGVzIGZvciB0aGUgRnJvbnRlbmQgRGV2ZWxvcGVyczwvaDQ+DQogIDxwPg0KICAgIElmIHlvdSBoYWQgPGI+Q0dFeHRlbnNpb25zPC9iPiBpbnN0YWxsZWQgYnkgdGhlIHRpbWUgPGI+Q01TTVNFeHQ8L2I+IHdhcyBpbnN0YWxsZWQsIHRoZSBlbnRyaWVzIGluIDxiPmNvbmZpZy5waHA8L2I+IGZpbGUgd2lsbCBoYXZlIGJlZW4gY29waWVkIHRvIHRoZWlyIGVxdWl2YWxlbnQgaW4gYSBzZXBhcmF0ZSA8Yj5jb25maWcuaW5jPC9iPiBmaWxlIHNpdHVhdGVkIG9uIGl0cyA8Yj5kYXRhPC9iPiBmb2xkZXIuIFVzaW5nIHRoZSA8Yj5DTVNNUyBjb3JlPC9iPiBvd24gPGI+Y29uZmlnLnBocDwvYj4gZmlsZSBoYXMgYmVlbiA8Yj48dT5kZXByZWNhdGVkPC91PjwvYj4uIEluIHRoZSBmdXR1cmUgdGhlc2Ugc2V0dGluZ3Mgd2lsbCBiZSBhbHNvIGFjY2Vzc2libGUgb24gdGhpcyBwYWdlIG9mIHRoZSBtb2R1bGUgZXhjZXB0IGZvciA8Yj5kZXByZWNhdGVkIHNldHRpbmdzPC9iPiwgPGI+cmFyZWx5IHVzZWQgc2V0dGluZ3M8L2I+LCBvciA8Yj5jcml0aWNhbCBzZXR0aW5nczwvYj4gdGhhdCBzaG91bGQgbm90IGJlIGVhc2lseSBhY2Nlc3NpYmxlLg0KICA8L3A+DQoNCiAgPGg0Pk5vdGVzIGZvciB0aGUgTW9kdWxlIERldmVsb3BlcnM8L2g0Pg0KICA8cD4NCiAgICBJZiB5b3UgaW50ZW5kIHRvIG1pZ3JhdGUgeW91ciBtb2R1bGVzLCB3aGljaCBtYXkgaGF2ZSBoYWQgPGI+Q0dFeHRlbnNpb25zPC9iPiBhcyBhIGRlcGVuZGVuY3ksIHRvIGV4dGVuZCA8Yj5DTVNNU0V4dDwvYj4gaW5zdGVhZCwgcGxlYXNlIG5vdGUgdGhhdCBhbHRob3VnaCBoYXZpbmcgeW91ciBtb2R1bGUgZXh0ZW5kIDxiPkNNU01TRXh0PC9iPiwgYXMgd2FzIHRoZSBjYXNlIHdpdGggPGI+Q0dFeHRlbnNpb25zPC9iPiwgbWF5IHdvcmsgZmluZSwgPGI+PGk+aXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGRvIHNvPC9pPjwvYj4uIFRoZSBwcmVmZXJyZWQgbWV0aG9kIGlzIHRvIGV4dGVuZCB0aGUgPGI+XENNU01TRXh0XFhUTW9kdWxlPC9iPiBjbGFzcyAoc2VlIEhlbHApLiBFYWNoIGNsYXNzIG1heSBkaXZlcmdlIGVub3VnaCBpbiBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgZnV0dXJlIHRvIG1ha2UgaXQgcHJvYmxlbWF0aWMgdXNpbmcgdGhlIGZvcm1lciBtZXRob2RvbG9neS4NCiAgPC9wPg0KPC9kaXY+]]></data>
	</file>
	<file>
	  <filename>/templates/dflt_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF90ZW1wbGF0ZX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF90ZW1wbGF0ZX08L3A+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fSZuYnNwO3skcmVzZXR9PC9wPgogIDwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/editdefaulttemplate.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e3h0Y3NzX2FkZH0KaDQgewogIG1hcmdpbi1ib3R0b206IDAuMmVtOwp9CnsveHRjc3NfYWRkfQp7aWYgaXNzZXQoJHNpbXBsZSkgJiYgISRzaW1wbGUgJiYgaXNzZXQoJGRmbHRfdHBsX2NvdW50ZXIpICYmICRkZmx0X3RwbF9jb3VudGVyID09IDB9CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKICAkKCdoNC54dF9kZmx0X3RlbXBsYXRlX2hkcicpLmNsaWNrKGZ1bmN0aW9uKCl7CiAgICAkKCcueHRfZGZsdF90ZW1wbGF0ZScpLmhpZGUoKTsKICAgICQodGhpcykubmV4dCgnLnh0X2RmbHRfdGVtcGxhdGUnKS5zaG93KCk7CiAgICAkKCdodG1sLGJvZHknKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiAkKHRoaXMpLm9mZnNldCgpLnRvcCB9KTsKICB9KTsKICAkKCcueHRfZGZsdF90ZW1wbGF0ZScpLmhpZGUoKTsKICAkKCcueHRfZGZsdF90ZW1wbGF0ZScpLmZpcnN0KCkuc2hvdygpOwp9KTsKPC9zY3JpcHQ+CnsvaWZ9Cgp7aWYgaXNzZXQoJGRlZmF1bHR0ZW1wbGF0ZWZvcm1fdGl0bGUpfQogIHtpZiBpc3NldCgkc2ltcGxlKSAmJiAkc2ltcGxlfQogICAgPGg0PnskZGVmYXVsdHRlbXBsYXRlZm9ybV90aXRsZX08L2g0PgogIHtlbHNlfQogICAgPGg0IGlkPSJ7JHByZWZuYW1lfSIgY2xhc3M9Inh0X2RmbHRfdGVtcGxhdGVfaGRyIj48YSBocmVmPSJqYXZhc2NyaXB0OnJldHVybiBmYWxzZTsiPjxzcGFuIGNsYXNzPSJ4dF90b2dnbGUiPis8L3NwYW4+Jm5ic3A7eyRkZWZhdWx0dGVtcGxhdGVmb3JtX3RpdGxlfTwvYT48L2g0PgogIHsvaWZ9CnsvaWZ9Cgo8ZGl2IGNsYXNzPSJ4dF9kZmx0X3RlbXBsYXRlIj4KeyRzdGFydGZvcm19CntpZiBpc3NldCgkaW5mb190aXRsZSkgJiYgJGluZm9fdGl0bGV9CiAgPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPnskaW5mb190aXRsZX08L2Rpdj4Key9pZn0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IiBpZD0ieyRwcmVmbmFtZX1fdHBsIj4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X3RlbXBsYXRlfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICB7eHRfdGV4dGFyZWEgc3ludGF4PTEgcHJlZml4PSRhY3Rpb25pZCBuYW1lPWlucHV0X3RlbXBsYXRlIHZhbHVlPSR0ZW1wbGF0ZV9zcmN9CiAgICB7JHN1Ym1pdH17JHJlc2V0fQogIDwvcD4KPC9kaXY+CnskZW5kZm9ybX0KPC9kaXY+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/edittemplate.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kbmFtZX0ge2lmICFlbXB0eSgkdGl0bGUpfS0geyR0aXRsZX17L2lmfTwvaDM+CntpZiAhZW1wdHkoJGluZm8pfTxkaXYgY2xhc3M9ImluZm9ybWF0aW9uIj57JGluZm99PC9kaXY+ey9pZn0KCnskZm9ybXN0YXJ0fXskaGlkZGVufGRlZmF1bHQ6Jyd9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4qeyRwcm9tcHRfdGVtcGxhdGVuYW1lfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH10ZW1wbGF0ZSIgdmFsdWU9InskdGVtcGxhdGVuYW1lfSIgcmVxdWlyZWQvPgogIDwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF90ZW1wbGF0ZX06PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAge3h0X3RleHRhcmVhIHN5bnRheD0xIHByZWZpeD0kYWN0aW9uaWQgbmFtZT10ZW1wbGF0ZWNvbnRlbnQgY29udGVudD0kdGVtcGxhdGVjb250ZW50IHJvd3M9MjB9CiAgPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9eHRfc3VibWl0IiB2YWx1ZT0ieyR4dC0+TGFuZygnc3VibWl0Jyl9Ii8+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXh0X2NhbmNlbCIgdmFsdWU9InskeHQtPkxhbmcoJ2NhbmNlbCcpfSIgZm9ybW5vdmFsaWRhdGUvPgogICAge2lmICRtb2RlID09ICdlZGl0J30KICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH14dF9hcHBseSIgdmFsdWU9InskeHQtPkxhbmcoJ2FwcGx5Jyl9Ii8+CiAgICB7L2lmfQogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH14dF9yZXNldCIgdmFsdWU9InskeHQtPkxhbmcoJ3Jlc2V0Jyl9Ii8+CiAgPC9wPgo8L2Rpdj4KeyRmb3JtZW5kfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogb3JpZ2luYWwgdGVtcGxhdGUgZm9yIGRpc3BsYXlpbmcgZnJvbnRlbmQgZXJyb3JzICp9CjxkaXYgY2xhc3M9InskeHRfZXJyb3JjbGFzc30iPnskeHRfZXJyb3Jtc2d9PC9kaXY+]]></data>
	</file>
	<file>
	  <filename>/templates/generate_module_checksums.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdnZW5lcmF0ZV9tb2R1bGVfY2hlY2tzdW1zJyl9PC9oMz4KCjx0YWJsZSBjbGFzcz0icGFnZXRhYmxlIj4KICA8dGhlYWQ+CiAgICA8dHI+CiAgICAgIDx0aD57bGFuZygnbmFtZScpfTo8L3RoPgogICAgICA8dGg+e2xhbmcoJ3ZlcnNpb24nKX06PC90aD4KICAgICAgPHRoPnskbW9kLT5MYW5nKCdoYXNfY2hlY2tzdW1fZGF0YScpfTwvdGg+CiAgICAgIDx0aCBjbGFzcz0icGFnZWljb24iPjwvdGg+CiAgICA8L3RyPgogIDwvdGhlYWQ+CiAgPHRib2R5PgogIHtmb3JlYWNoICRtb2R1bGVfbGlzdCBhcyAkcmVjfQogICAgPHRyPgogICAgICA8dGQ+eyRyZWMubmFtZX08L3RkPgogICAgICA8dGQ+eyRyZWMudmVyc2lvbn08L3RkPgogICAgICA8dGQ+CiAgICAgICAge2lmICRyZWMuaGFzX2NoZWNrc3VtfXt4dGltYWdlIGltYWdlPSdpY29ucy9zeXN0ZW0vdHJ1ZS5naWYnfXsvaWZ9CiAgICAgIDwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICB7aWYgJHJlYy5oYXNfY2hlY2tzdW19Cgl7ZWxzZX0KCSAgPGEgaHJlZj0ieyRyZWMuZ2VuZXJhdGVfdXJsfSI+e3h0aW1hZ2UgaW1hZ2U9J2ljb25zL3N5c3RlbS9ydW4uZ2lmJyBhbHQ9JG1vZC0+TGFuZygnZ2VuZXJhdGUnKX08L2E+Cgl7L2lmfQogICAgICA8L3RkPgogICAgPC90cj4KICB7L2ZvcmVhY2h9CiAgPC90Ym9keT4KPC90YWJsZT4=]]></data>
	</file>
	<file>
	  <filename>/templates/help.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2luY2x1ZGUgZmlsZT0nbW9kdWxlX2ZpbGVfdHBsOkNNU01TRXh0O2hlbHBfaGVhZGVyLnRwbCd9DQoNCjxkaXYgY2xhc3M9ImNsZWFyIj48L2Rpdj4NCg0KPGRpdiBpZD0icGFnZV90YWJzIj4NCg0KICA8ZGl2ICBpZD0iZ2VuZXJhbCI+DQogICAgR2VuZXJhbA0KICA8L2Rpdj4NCiAgPGRpdiBpZD0idXNpbmciPg0KICAgIEhvdyBEbyBJIFVzZSBJdA0KICA8L2Rpdj4NCiAgPGRpdiBpZD0ic21hcnR5X2FkZG9ucyI+DQogICAgU21hcnR5IEFkZG9ucw0KICA8L2Rpdj4NCiAgPGRpdiBpZD0ic21hcnR5X3Jlc291cmNlcyI+DQogICAgU21hcnR5IFJlc291cmNlcw0KICA8L2Rpdj4NCiAgPGRpdiBpZD0iZHluX2Nzc19qcyI+DQogICAgRHluYW1pYyBDU1MgYW5kIEphdmFzY3JpcHQNCiAgPC9kaXY+DQogIDxkaXYgaWQ9Imhvb2tzIj4NCiAgICBIb29rcw0KICA8L2Rpdj4NCiAgPGRpdiBpZD0ibWlzYyI+DQogICAgTWlzYw0KICA8L2Rpdj4NCiAgPGRpdiBpZD0ibmV3Ij4NCiAgICBXaGF0J3MgTmV3DQogIDwvZGl2Pg0KICA8ZGl2IGlkPSJhYm91dCI+DQogICAgQWJvdXQNCiAgPC9kaXY+DQoNCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJjbGVhcmIiPjwvZGl2Pg0KPGRpdiBpZD0icGFnZV9jb250ZW50Ij4NCg0KICA8ZGl2IGlkPSJnZW5lcmFsX2MiPg0KICAgIHtpbmNsdWRlIGZpbGU9J21vZHVsZV9maWxlX3RwbDpDTVNNU0V4dDtoZWxwX2dlbmVyYWxfdGFiLnRwbCd9DQogIDwvZGl2Pg0KICA8ZGl2IGlkPSJ1c2luZ19jIj4NCiAgICB7aW5jbHVkZSBmaWxlPSdtb2R1bGVfZmlsZV90cGw6Q01TTVNFeHQ7aGVscF91c2luZ190YWIudHBsJ30NCiAgPC9kaXY+DQogIDxkaXYgaWQ9InNtYXJ0eV9hZGRvbnNfYyI+DQogICAge2luY2x1ZGUgZmlsZT0nbW9kdWxlX2ZpbGVfdHBsOkNNU01TRXh0O2hlbHBfc21hcnR5X2FkZG9uc190YWIudHBsJ30NCiAgPC9kaXY+DQogIDxkaXYgaWQ9InNtYXJ0eV9yZXNvdXJjZXNfYyI+DQogICAge2luY2x1ZGUgZmlsZT0nbW9kdWxlX2ZpbGVfdHBsOkNNU01TRXh0O2hlbHBfc21hcnR5X3Jlc291cmNlc190YWIudHBsJ30NCiAgPC9kaXY+DQogIDxkaXYgaWQ9ImR5bl9jc3NfanNfYyI+DQogICAge2luY2x1ZGUgZmlsZT0nbW9kdWxlX2ZpbGVfdHBsOkNNU01TRXh0O2hlbHBfZHluX2Nzc19qc190YWIudHBsJ30NCiAgPC9kaXY+DQogIDxkaXYgaWQ9Imhvb2tzX2MiPg0KICAgIHtpbmNsdWRlIGZpbGU9J21vZHVsZV9maWxlX3RwbDpDTVNNU0V4dDtoZWxwX2hvb2tzX3RhYi50cGwnfQ0KICA8L2Rpdj4NCiAgPGRpdiBpZD0ibWlzY19jIj4NCiAgICB7aW5jbHVkZSBmaWxlPSdtb2R1bGVfZmlsZV90cGw6Q01TTVNFeHQ7aGVscF9taXNjX3RhYi50cGwnfQ0KICA8L2Rpdj4NCiAgPGRpdiBpZD0ibmV3X2MiPg0KICAgIHtpbmNsdWRlIGZpbGU9J21vZHVsZV9maWxlX3RwbDpDTVNNU0V4dDtoZWxwX3doYXRfaXNfbmV3X3RhYi50cGwnfQ0KICA8L2Rpdj4NCiAgPGRpdiBpZD0iYWJvdXRfYyI+DQogICAge2luY2x1ZGUgZmlsZT0nbW9kdWxlX2ZpbGVfdHBsOkNNU01TRXh0O2hlbHBfYWJvdXRfdGFiLnRwbCd9DQogIDwvZGl2Pg0KDQogIDxkaXYgY2xhc3M9ImNsZWFyYiI+PC9kaXY+DQo8L2Rpdj4=]]></data>
	</file>
	<file>
	  <filename>/templates/help_about_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPkFib3V0IHRoaXMgbW9kdWxlPC9oMz4NCiAgICAgIDxwPlRoaXMgbW9kdWxlIGlzIGEgZm9yayBvZiA8c3Ryb25nPkNHRXh0ZW5zaW9uczwvc3Ryb25nPiBkZXZlbG9wZWQgYnkgPHN0cm9uZz5Sb2JlcnQgQ2FtcGJlbGwgJmx0O2NhbGd1eTEwMDAmZ3Q7PC9zdHJvbmc+LjxiciAvPg0KCQkJICAgIFRoaXMgaXMgYSAxc3QgZ2VuZXJhdGlvbiBmb3JrIG9mIHRoZSBtb2R1bGUuIENvbnNpZGVyIHRoaXMgYXMgYW5vdGhlciBmbGF2b3VyIG9mIHRoZSBvcmlnaW5hbCBtb2R1bGUuPGJyIC8+DQoNCgkJCUlmIHlvdSBmaW5kIGFueSBidWdzIHBsZWFzZSBmZWVsIGZyZWUgdG8gc3VibWl0IGEgYnVnIHJlcG9ydCA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL2J1Zy9saXN0LzE0NjIiIHRhcmdldD0iX2JsYW5rIj5oZXJlPC9hPiBvciBmb3IgYW55IGdvb2QgaWRlYXMgY29uc2lkZXIgc3VibWl0aW5nIGEgZmVhdHVyZSByZXF1ZXN0IDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvZmVhdHVyZV9yZXF1ZXN0L2xpc3QvMTQ2MiIgdGFyZ2V0PSJfYmxhbmsiPmhlcmU8L2E+LjwvcD4NCgkJCTxwPlBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCBkZXZlbG9wZXJzIGRvIGhhdmUgdGhlaXIgZGFpbHkgam9icyB3aGljaCBtZWFucyB0aGF0IGZlYXR1cmUgcmVxdWVzdHMgYXJlIGNvbnNpZGVyZWQgYW5kIGRvbmUgYXMgdGltZSBhbGxvd3MuIElmIHlvdSBuZWVkIGEgZmVhdHVyZSByZWFsbHkgYmFkbHkgY29uc2lkZXIgY29udGFjdGluZyBvbmUgb2YgdGhlIGRldmVsb3BlcnMgZm9yIGEgc3BvbnNvcmVkIGRldmVsb3BtZW50Lg0KCQkJPC9wPg0KDQoNCjxoMz5TdXBwb3J0PC9oMz4NCjxwPlRoZSBtb2R1bGUgYXV0aG9yIC8gbWFpbnRhaW5lcnMgb3IgcHJvamVjdCBtYW5hZ2VycyBhcmUgaW4gbm8gd2F5IG9ibGlnYXRlZCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoaXMgY29kZSBpbiBhbnkgZmFzaGlvbi4gIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPg0KPHVsPg0KPGxpPkEgYnVnIHRyYWNraW5nIGFuZCBmZWF0dXJlIHJlcXVlc3Qgc3lzdGVtIGhhcyBiZWVuIGNyZWF0ZWQgZm9yIHRoaXMgbW9kdWxlIDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvY21zbXNleHQiPmhlcmU8L2E+LiBQbGVhc2UgYmUgdmVyYm9zZSBhbmQgZGVzY3JpcHRpdmUgd2hlbiBzdWJtaXR0aW5nIGJ1ZyByZXBvcnRzIGFuZCBmZWF0dXJlIHJlcXVlc3RzLCBhbmQgZm9yIGJ1ZyByZXBvcnRzIGVuc3VyZSB0aGF0IHlvdSBoYXZlIHByb3ZpZGVkIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24gdG8gcmVsaWFibHkgcmVwcm9kdWNlIHRoZSBpc3N1ZS48L2xpPg0KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi4gIFdoZW4gZGVzY3JpYmluZyBhbiBpc3N1ZSBwbGVhc2UgbWFrZSBhbiBlZmZvcnQgdG8gcHJvdmlkZSBhbGwgcmVsZXZhbnQgaW5mb3JtYXRpb24sIGEgdGhvcm91Z2ggZGVzY3JpcHRpb24gb2YgeW91ciBpc3N1ZSwgYW5kIHN0ZXBzIHRvIHJlcHJvZHVjZSBpdCBvciB5b3VyIGRpc2N1c3Npb24gbWF5IGJlIGlnbm9yZWQuPC9saT4NCjwvdWw+DQoNCjxwPlRoZSBtYWludGFpbmVycyB3aWxsIGRvIHRoZWlyIGJlc3QgdG8ga2VlcCB0aGUgbW9kdWxlIGFuZCBhbGwgdGhlIGxpYnJhcmllcyBpdCB1c2VzIHVwIHRvIGRhdGUuPC9wPg0KDQo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4NCntpZiAkc21hcnR5Lm5vd3xkYXRlX2Zvcm1hdDoiJVkiID09ICcyMDIwJ317JGNyID0gJzIwMjAnfXtlbHNlfXskY3IgPSAiMjAyMCAtIHskc21hcnR5Lm5vd3xkYXRlX2Zvcm1hdDonJVknfSJ9ey9pZn0NCjxwPkNvcHlyaWdodCAmY29weTsgeyRjcn0sIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDxhIGhyZWY9Im1haWx0bzppbmZvQGNtc21hZGVzaW1wbGUub3JnIj4mbHQ7aW5mb0BjbXNtYWRlc2ltcGxlLm9yZyZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDgsIFJvYmVydCBDYW1wYmVsbCAmbHQ7Y2FsZ3V5MTAwMCZndDsuIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4NCjxocj4NCjxwPjxzdHJvbmc+Q01TTVNFeHQ8L3N0cm9uZz4gaXMgZnJlZSBzb2Z0d2FyZTs8YnIgLz4geW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIDxzdHJvbmc+R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2U8L3N0cm9uZz4gYXMgcHVibGlzaGVkIGJ5IHRoZSA8c3Ryb25nPkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjwvc3Ryb25nPjs8YnIgLz4gZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi48L3A+DQo8cD48c3Ryb25nPkNNU01TRXh0PC9zdHJvbmc+IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCA8c3Ryb25nPldJVEhPVVQgQU5ZIFdBUlJBTlRZPC9zdHJvbmc+OzxiciAvPiB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgPHN0cm9uZz5NRVJDSEFOVEFCSUxJVFk8L3N0cm9uZz4gb3IgPHN0cm9uZz5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRTwvc3Ryb25nPi48L3A+DQo8cD5TZWUgdGhlR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy48L3A+DQogPHA+WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgPHN0cm9uZz5HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZTwvc3Ryb25nPiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTs8YnIgLz4gaWYgbm90LCB3cml0ZSB0byB0aGUgPHN0cm9uZz5GcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBPC9zdHJvbmc+IG9yIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPnJlYWQgaXQgb25saW5lPC9hPi48L3A+DQo8cD48c3Ryb25nPllvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgPHN0cm9uZz5DTVNNU0V4dDwvc3Ryb25nPi48L3N0cm9uZz48L3A+DQo8aHI+DQo8aDQ+Q3VycmVudCBNYWludGFpbmVyczwvaDQ+DQo8dWw+DQogIDxsaSBjbGFzcz0icF9ib3R0b21fMTUiPjxzdHJvbmc+RmVybmFuZG8gTW9yZ2FkbyAoSm8gTW9yZyk8L3N0cm9uZz48L2xpPg0KICA8bGkgY2xhc3M9InBfYm90dG9tXzE1Ij48c3Ryb25nPlJvbGYgVGphc3NlbnMgKFJvbGZUaik8L3N0cm9uZz48L2xpPg0KPC91bD4NCg0KPGg0PlBhc3QgTWFpbnRhaW5lcnM8L2g0Pg0KPHVsPg0KICA8bGk+PHN0cm9uZz5Sb2JlcnQgQ2FtcGJlbGwgKGNhbGd1eTEwMDApPC9zdHJvbmc+IDxiciAvPnd3dy5jYWxndXkxMDAwLmNvbTwvbGk+DQo8L3VsPg0KDQo8aDQ+S25vd24gQ29udHJpYnV0b3JzPC9oND4NCjx1bD4NCiAgPGxpPjxzdHJvbmc+Um9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwKTwvc3Ryb25nPjxiciAvPnd3dy5jYWxndXkxMDAwLmNvbTwvbGk+DQogIDxsaT48c3Ryb25nPlJvbGYgVGphc3NlbnM8L3N0cm9uZz48YnIgLz53d3cuY21zY2FuYmVzaW1wbGUub3JnPC9saT4NCjwvdWw+DQoNCnsqDQpUT0RPOiBuZWVkIGFuIHVwZGF0ZWQgbGlzdCBvZiBzcG9uc29ycyA6fCAoSk0pDQo8aDQ+S25vd24gU3BvbnNvcnM8L2g0Pg0KPHVsPg0KICA8bGk+PHN0cm9uZz5NYXR0IEhvcm5zYnkgKERJR0kzKTwvc3Ryb25nPjxiciAvPnd3dy5tYXR0aG9ybnNieS5jYTwvbGk+DQogIDxsaT48c3Ryb25nPkdyZWdvcnkgUHJvc3NlciAoZ2VlcGVycyk8L3N0cm9uZz48YnIgLz53d3cuc3RpY2t5d2lja2V0ZGVzaWducy5jb208L2xpPg0KPC91bD4NCip9]]></data>
	</file>
	<file>
	  <filename>/templates/help_dyn_css_js_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPkR5bmFtaWMgQ1NTIGFuZCBKYXZhc2NyaXB0PC9oMz4NCjxwPkZyZXF1ZW50bHkgd2hlbiBkb2luZyBzaXRlIGRlc2lnbiwgc29tZSBqYXZhc2NyaXB0IHBsdWdpbnMgYW5kIGN1c3RvbSBjc3MgYXJlIG5lZWRlZCBleHBsaWNpdGlseSBmb3IgYSBzaW5nbGUgcGFnZSwgb3IgYSBzaW5nbGUgZm9ybS4gIFlvdSBvZnRlbiBuZWVkIHRvIGluY2x1ZGUgc29tZSBqYXZhc2NyaXB0IGNvZGUgdGhhdCBpcyB1bmlxdWUgdG8gdGhhdCBwYWdlIG9yIGZvcm0gdG8gaW5pdGlhbGl6ZSBvciBhY3RpdmF0ZSBqcXVlcnkgcGx1Z2lucy4gICBOZXh0IHlvdSBtYXkgbmVlZCB0byBhZGQgc29tZSBzcGVjaWZpYyBjc3Mgc3R5bGVzIHRoYXQgd2lsbCBvbmx5IGJlIHVzZWQgb24gdGhpcyBwYWdlIG9yIGZvciB0aGlzIGZvcm0uICBJdCB3b3VsZCBiZSBiZXN0IChmb3IgbWFuYWdlbWVudCByZWFzb25zKSBpZiBhbGwgb2YgdGhhdCBjb2RlIChyZXF1ZXN0aW5nIHRoZSBqYXZhc2NyaXB0IGxpYnJhcmllcywgaW5jbHVkaW5nIGV4dHJhIGphdmFzY3JpcHQgYW5kL29yIGNzcykgY291bGQgYmUgbWFpbnRhaW5lZCBmcm9tIHdpdGhpbiB0aGUgc2luZ2xlIHRlbXBsYXRlIHdoZXJlIGl0IHdpbGwgYmUgdXNlZC4gICBIb3dldmVyLCBpbmNsdWRpbmcgamF2YXNjcmlwdCBpbmxpbmUgY2FuIGltcGVkZSBwZXJmb3JtYW5jZSwgaXQgaXMgYmFkIGZvcm0gdG8gaW5jbHVkZSBqYXZhc2NyaXB0IGxpYnJhcmllcyBmcm9tIHdpdGhpbiB0aGUgKG1pZGRsZSkgb2YgdGhlIGh0bWwgcGFnZSwgYW5kIGl0IGlzIGJhZCBmb3JtIGFuZCBwcm9ibGVtYXRpYyB0byBlbWJlZCBpbmxpbmUgc3R5bGVzaGVldHMgaW50byBodG1sIG91dHB1dC4gVGhlIENNU01TRXh0IG1vZHVsZSA8ZW0+KHYgMS4zOSspPC9lbT4gSW50cm9kdWNlcyBhIGZldyBuZXcgdGFncyB0byBhbGxvdyBpbnNlcnRpbmcgamF2YXNjcmlwdCBhbmQgc3R5bGVzaGVldHMgaW4gYSAmcXVvdDtyZWFzb25hYmx5JnF1b3Q7IGNhY2hlIGVmZmljaWVudCwgYW5kIGNvbnZlbmllbnQgdG8gdXNlIG1lY2hhbmlzbS48L3A+DQoNCjxwPlRoZSBDTVNNU0V4dCBwbHVnaW5zICZsYnJhY2U7eHRqc19yZXF1aXJlfSwgJmxicmFjZTt4dGpzX2FkZH0sICZsYnJhY2U7eHRjc3NfYWRkfSBhbmQgJmxicmFjZTt4dGpzX3JlbmRlcn0gYWxsb3cgcXVlaW5nIGphdmFzY3JpcHQgbGlicmFyaWVzICh3aXRoIHRoZWlyIGRlcGVuZGVuY2llcyksIHNpbmdsZSBqYXZhc2NyaXB0IGFuZCBjc3MgZmlsZXMsIGFuZCBpbmxpbmUgY3NzIGFuZCBqcyBpbnRvIHNpbmdsZSBtaW5pZmllZCB1cmxzIChvbmUgZm9yIGphdmFzY3JpcHQsIGFuZCBvbmUgZm9yIGNzcykuICBUaGlzIGFpZGVzIGluIHBlcmZvcm1hbmNlIChhcyBtdWx0aXBsZSBqYXZhc2NyaXB0IGFuZCBjc3MgZmlsZXMgYXJlIGNvbmNhdGVuYXRlZCBhbmQgbWluaWZpZWQpLCBrZWVwcyBhbGwgcmVsZXZhbnQgY29kZSAoc21hcnR5LiBqYXZhc2NyaXB0LCBhbmQgY3NzKSB0b2dldGhlciwgYW5kIGVsaW1pbmF0ZXMgdGhlIGlzc3VlZXMgb2YgaW5saW5lIGNvZGUuPC9wPg0KDQo8aDQ+SmF2YXNjcmlwdCBMaWJyYXJpZXM8L2g0Pg0KPHA+TnVtZXJvdXMgQ01TTVNFeHQgZGVyaXZlZCBtb2R1bGVzIChNQU1TLCBNQU1TUmVnaXN0cmF0aW9uLCBldGMpIHNoYXJlIHZhcmlvdXMgamF2YXNjcmlwdCBsaWJyYXJpZXMuIFJlcXVpcmluZyB0aGF0IHRoZXNlIGxpYnJhcmllcyBiZSBpbmNsdWRlZCBpbiB5b3VyIG91dHB1dCBodG1sIGNvZGUgaXMgYXMgc2ltcGxlIGFzIHVzaW5nIHRoZSA8Y29kZT4mbGJyYWNlO3h0anNfcmVxdWlyZSBsaWI9Jmx0O2xpYm5hbWUmZ3Q7fTwvY29kZT4gdGFnIGluIHRoZSByZWxhdmVudCB0ZW1wbGF0ZS48L3A+DQoNCjxoND5SZW5kZXJpbmcgT3V0cHV0PC9oND4NCjxwPlRoZSA8Y29kZT4mbGJyYWNlO3h0anNfcmVuZGVyfTwvY29kZT4gdGFnIHdpbGwgb3BlbiBhbGwgcmVxdWlyZWQgbGlicmFyaWVzIDxlbT4oYW5kIHRoZWlyIGRlcGVuZGVuY2llcyk8L2VtPiwgYWxsIHJlcXVpcmVkIGphdmFzY3JpcHQgYW5kIGNzcyBmaWxlcywgYW5kIGFsbCBpbmxpbmUgamF2YXNjcmlwdCBhbmQgY3NzIGZpbGVzLCBjb25jYXRlbmF0ZSB0aGVtIGludG8gYSBzaW5nbGUgamF2YXNjcmlwdCBmaWxlLCBhbmQgYSBzaW5nbGUgY3NzIGZpbGUuICBFYWNoIHVuaXF1ZSBjb21iaW5hdGlvbiBvZiByZXF1ZXN0ZWQgbGlicmFyaWVzLCBqYXZhc2NyaXB0LCBhbmQgY3NzIGZpbGVzLCBhbmQgaW5saW5lZCBjb2RlIGlzIGhhc2hlZCBpbnRvIGEgc2luZ2xlICdzaWduYXR1cmUnLCB3aGljaCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgb3V0cHV0IGphdmFzY3JpcHQgYW5kIGNzcyBmaWxlbmFtZXMuICBUaGUgdGFnIHdpbGwgdGhlbiBjb25jYXRlbmF0ZSBhbGwgb2YgdGhlIGphdmFzY3JpcHQsIG1pbmlmeSBpdCwgYW5kIG91dHB1dCB0byBhIHNpbmdsZSBqYXZhc2NyaXB0IGZpbGUuICBTaW1pbGFybHkgY3NzIGlzIG91dHB1dCB0byBhIHNpbmdsZSBtaW5pbWl6ZWQgY3NzIGZpbGUuICAgVG8gaW1wcm92ZSBzZXJ2ZXIgc2lkZSBwZXJmb3JtYW5jZSwgdGhlIHJlbmRlciBmdW5jdGlvbmFsaXR5IHdpbGwgbm90IHJlc29sdmUgZGVwZW5kZW5jaWVzLCBvciBnZW5lcmF0ZSB0aGUgcmVzdWx0aW5nIGphdmFzY3JpcHQgYW5kIGNzcyBmaWxlcyBpZiB0aGUgb3V0cHV0IGZpbGVzIGFscmVhZHkgZXhpc3QgKHVubGVzcyB0aGV5IGFyZSBvbGRlciB0aGFuIHRoZSBwcmVzZXQgZXhwaXJ5IGFnZSkuPC9wPg0KPHA+VGhlIDxjb2RlPiZsYnJhY2U7eHRqc19yZW5kZXJ9PC9jb2RlPiB0YWcgc2hvdWxkICh0eXBpY2FsbHkpIGJlIHB1dCBqdXN0IGJlZm9yZSB0aGUgZW5kIG9mIHRoZSAmbHQ7aGVhZCZndDsgc2VjdGlvbiBvZiB0aGUgcGFnZSB0ZW1wbGF0ZS4gVGhpcyBpcyBiZWNhdXNlIGl0IHJlbmRlcnMgamF2YXNjcmlwdCBhbmQgc3R5bGVzaGVldHMuPC9wPg0KDQo8aDQ+QWRtaW4gVGVtcGxhdGVzPC9oND4NCjxwPlRoZSA8Y29kZT54dF9qc2xvYWRlcjo6cmVuZGVyKCk8L2NvZGU+IGZ1bmN0aW9uIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGZvciBlYWNoIENNU01TRXh0IGRlcml2ZWQgYWRtaW4gYWN0aW9uLiAgVGhpcyBtZWFucyB0aGF0IHRoZSAmbGJyYWNlO3h0anNfcmVxdWlyZX0sICZsYnJhY2U7eHRqc19hZGR9IGFuZCAmbGJyYWNlO3h0Y3NzX2FkZH0gcGx1Z2lucyBjYW4gYWxsIGJlIHVzZWQgZnJvbSB3aXRoaW4gYWN0aW9uIHRlbXBsYXRlcyBmb3IgQ01TTVNFeHQgZGVyaXZlZCBtb2R1bGVzLjwvcD4NCg0KPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBJbiBhZG1pbiByZXF1ZXN0cywgYmVjYXVzZSB0aGUgQ01TTVMgc3RhbmRhcmQgT25lRWxldmVuIGFkbWluIHRoZW1lIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGpxdWVyeSwgYW5kIGpxdWVyeSB1aSBwbHVnaW5zLCB0aGVzZSBwbHVnaW5zIGFyZSBhdXRvbWF0aWNhbGx5IGV4Y2x1ZGVkIGZyb20gcmVuZGVyZWQgb3V0cHV0LjwvcD4=]]></data>
	</file>
	<file>
	  <filename>/templates/help_general_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+DQo8cD5UaGlzIG1vZHVsZSBwcm92aWRlcyBjb252ZW5pZW5jZSBBUElzLCByZS11c2FibGUgZm9ybXMsIGFuZCBTbWFydHkgdGFncyBmb3IgdXNlIGluIG90aGVyIG1vZHVsZXMuICBJdCBpcyBtZWFudCB0byBiZSBhIHN0YXJ0aW5nIHBvaW50IGZyb20gd2hpY2ggdG8gYnVpbGQgb3RoZXIgbW9kdWxlcy4gSWYgeW91IGFyZSBub3QgYSBwcm9ncmFtbWVyIHlvdSBwcm9iYWJseSB3b24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhpcyBtb2R1bGUgYmVzaWRlcyBhZGp1c3Qgc29tZSBwcmVmZXJlbmNlcy48L3A+DQo8cD5PbmUgb2YgdGhlIG1haW4gYXNwZWN0cyBvZiB0aGlzIG1vZHVsZSBpcyB0aGUgbnVtYmVyIG9mIGF1dG9tYXRlZCBvciBzaW1wbGlmaWVkIHRhc2tzIGZvciBtb2R1bGVzIHRoYXQgZXh0ZW5kIHRoZSA8c3Ryb25nPlhUTW9kdWxlPC9zdHJvbmc+IG1haW4gY2xhc3MuIFRoZSBtaW5pbXVtIHJlcXVpcmVtZW50cyBhcmUgYWxyZWFkeSBpbXBsZW1lbnRlZCBmb3IgeW91IGFuZCB0aGVyZSB3aWxsIGJlIHNvbWUgZXh0ZW5kZWQgZnVuY3Rpb25hbGl0eSBvbiB0b3Agb2YgdGhlIGNvcmUgdXN1YWwgPHN0cm9uZz5DTVNNb2R1bGU8L3N0cm9uZz4gY2xhc3MgZnVuY3Rpb25hbGl0eTwvcD4NCjxwPlRoZSBtb2R1bGUgaW5jbHVkZXMgYSBudW1iZXIgb2YgbGlicmFyaWVzIGZvciBkaWZmZXJlbnQgdXNlcyBpbjo8L3A+DQo8dWw+DQogIDxsaT5QSFA7PC9saT4NCiAgPGxpPkpTIGluY2x1ZGluZyBhIHJ1ZGltZW50YXJ5IGFwcCBkZXZlbG9wbWVudCBmcmFtZXdvcmsgKGJhY2tib25lKSBhbmQgYSBmZXcgdXNlZnVsIGxpYnJhcmllczs8L2xpPg0KICA8bGk+SlF1ZXJ5LCBpbmNsdWRpbmcgc29tZSBwbHVnaW5zOzwvbGk+DQogIDxsaT5DU1MgZXh0ZW5zaW9ucyAoZXhwZXJpbWVudGFsKSB0aGF0IHNob3VsZCBhbGxvdyBzb21lIG1vcmUgY29udHJvbCBvbiB5b3VyIG1vZHVsZXMgYmVoYXZpb3IgYW5kIGxvb2sgaW4gYSBtb3JlIGNvbnNpc3RlbnQgd2F5OzwvbGk+DQo8L3VsPg0KDQo8cD5HaXZlbiB0aGUgZXh0ZW5zaXZlIHJhbmdlIG9mIGZlYXR1cmVzIGFuZCBsaWJyYXJpZXMgaW5jbHVkZWQsIHRoZXJlIGlzIHNvbWUgZGlmZmljdWx0eSBpbiBkb2N1bWVudGluZyBpdCBhbGwsIGFuZCBwcm9iYWJseSBpdCB3aWxsIGJlIGRvbmUgaW4gYW4gZXh0ZXJuYWwgc2l0ZSBzb29uLiBUaGUgaW5jbHVkZWQgZG9jdW1lbnRhdGlvbiB0cmllcyB0byBiZSBhcyB0aG9yb3VnaCBhcyBwb3NzaWJsZSBvbiBzb21lIG9mIHRoZSBtb3N0IHBvcHVsYXIgZmVhdHVyZXMsIHBsdWdpbnMgYW5kIEFQSSBmdW5jdGlvbnMsIGJ1dCBpdCdzIGJvdW5kIHRvIGJlIGZhdWx0eSBvbiBzb21lIGFzcGVjdHM8L3A+DQo8cD5XZSdsbCB0cnkgb3VyIGJlc3QgdG8ga2VlcCB0aGUgZG9jdW1lbnRhdGlvbiB1cGRhdGVkLjwvcD4=]]></data>
	</file>
	<file>
	  <filename>/templates/help_header.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHN0eWxlPg0KKg0Kew0KICBib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KfQ0KDQouY2xpY2stdG8tY29weQ0Kew0KICBjdXJzb3I6cG9pbnRlcjsNCn0NCg0KLnNtYWxsDQp7DQogIGZvbnQtc2l6ZTogODUlOw0KICBtYXJnaW46IDAgMCAwIDE1cHg7DQp9DQoNCnVsLmFjY29yZGlvbi1saXN0DQp7DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgZGlzcGxheTogYmxvY2s7DQogIHdpZHRoOiA5NiUgIWltcG9ydGFudDsNCiAgaGVpZ2h0OiBhdXRvOw0KICBwYWRkaW5nOiAyMHB4Ow0KICBtYXJnaW46IDA7DQogIGxpc3Qtc3R5bGU6IG5vbmU7DQogIGJhY2tncm91bmQtY29sb3I6ICNmOWY5ZkE7DQp9DQoNCnVsLmFjY29yZGlvbi1saXN0IC5hY2NvcmRpb24tbGlzdC1pdGVtDQp7DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgZGlzcGxheTogYmxvY2s7DQogIHdpZHRoOiAxMDAlOw0KICBoZWlnaHQ6IGF1dG87DQogIGJhY2tncm91bmQtY29sb3I6ICNGRkY7DQogIHBhZGRpbmc6IDIwcHg7DQogIG1hcmdpbjogMCBhdXRvIDE1cHggYXV0bzsNCiAgYm9yZGVyOiAxcHggc29saWQgI2VlZTsNCiAgYm9yZGVyLXJhZGl1czogNXB4Ow0KfQ0KDQp1bC5hY2NvcmRpb24tbGlzdCAuYWNjb3JkaW9uLWxpc3QtaXRlbS5hY3RpdmUgaDMuYWw6YWZ0ZXINCnsNCiAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOw0KfQ0KDQp1bC5hY2NvcmRpb24tbGlzdCAuYWNjb3JkaW9uLWxpc3QtaXRlbSBoMy5hbA0Kew0KICBmb250LXdlaWdodDogNzAwOw0KICAvKnRleHQtZGVjb3JhdGlvbi1saW5lOiB1bmRlcmxpbmU7Ki8NCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICBkaXNwbGF5OiBibG9jazsNCiAgd2lkdGg6IDEwMCU7DQogIGhlaWdodDogYXV0bzsNCiAgcGFkZGluZzogMCAwIDAgMDsNCiAgbWFyZ2luOiAwOw0KICBmb250LXNpemU6IDE1cHg7DQogIGxldHRlci1zcGFjaW5nOiAwLjAxZW07DQogIGN1cnNvcjogcG9pbnRlcjsNCn0NCg0KdWwuYWNjb3JkaW9uLWxpc3QgLmFjY29yZGlvbi1saXN0LWl0ZW0gaDMuYWw6YWZ0ZXINCnsNCiAgY29udGVudDogIisiOw0KLyAvIGZvbnQtZmFtaWx5OiAibWF0ZXJpYWwtZGVzaWduLWljb25pYy1mb250IjsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICByaWdodDogMDsNCiAgdG9wOiAwOw0KICBjb2xvcjogIzE0N2ZkYjsNCiAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1pbi1vdXQ7DQogIGZvbnQtc2l6ZTogMThweDsNCn0NCg0KdWwuYWNjb3JkaW9uLWxpc3QgLmFjY29yZGlvbi1saXN0LWl0ZW0gZGl2LmFjY29yZGlvbi1saXN0LWl0ZW0tYm9keQ0Kew0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIGRpc3BsYXk6IGJsb2NrOw0KICB3aWR0aDogMTAwJTsNCiAgaGVpZ2h0OiBhdXRvOw0KICBtYXJnaW46IDM1cHggMCAxNXB4IDA7DQogIHBhZGRpbmc6IDA7DQp9DQoNCnVsLmFjY29yZGlvbi1saXN0IC5hY2NvcmRpb24tbGlzdC1pdGVtIGRpdi5hY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkgcA0Kew0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBmb250LXdlaWdodDogMzAwOw0KICBwYWRkaW5nOiAwIDAgMCAwOw0KICBsaW5lLWhlaWdodDogMTUwJTsNCiAgbWFyZ2luOiAwIDAgMCAwOw0KICBmb250LXNpemU6IDE0cHg7DQp9DQp1bC5oaWdobGlnaHQtbGlzdA0Kew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlOw0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIGRpc3BsYXk6IGJsb2NrOw0KICB3aWR0aDogODAlOw0KICBoZWlnaHQ6IGF1dG87DQogIG1hcmdpbjogMTVweDsNCiAgcGFkZGluZzogMjVweDsNCn0NCg0KaDV7DQogIG1hcmdpbi10b3A6IDAuNzVlbTsNCiAgbWFyZ2luLWJvdHRvbTogMC43NWVtOw0KfQ0KbGkudG9wIHsNCiAgbWFyZ2luLXRvcDogM2VtOw0KICBtYXJnaW4tYm90dG9tOiAyZW07DQogIGxpc3Qtc3R5bGU6IG5vbmU7DQp9DQpjb2RlLnRhZyB7DQogIHBhZGRpbmctbGVmdDogMWVtOw0KICBmb250LXNpemU6IDE2cHg7DQogIGZvbnQtc3R5bGU6IG9ibGlxdWU7DQogIGZvbnQtd2VpZ2h0OiBib2xkZXI7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWZlZmVmOw0KICBib3JkZXItbGVmdDogM3B4IHNvbGlkICNjZWNlY2U7DQogIGJvcmRlci1yaWdodDogM3B4IHNvbGlkICNjZWNlY2U7DQp9DQo8L3N0eWxlPg0KDQo8c2NyaXB0IHNyYz0ieyRtb2QtPkdldE1vZHVsZVVSTFBhdGgoKX0vanMvanMuY29va2llLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgc3JjPSJ7JG1vZC0+R2V0TW9kdWxlVVJMUGF0aCgpfS9qcy9qcy5mdW5jdGlvbnMuanMiPjwvc2NyaXB0Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/help_hooks_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPkhvb2tzPC9oMz4NCjxwPlRoaXMgbW9kdWxlIGVtaXRzIHNldmVyYWwgZGlmZmVyZW50IGhvb2tzOjwvcD4NCjx1bD4NCiAgICA8bGk+Q01TTVNFeHQ6OkhvdXJseVRhc2sNCgk8cD5UaGlzIGhvb2sgaXMgc2VudCBhdCBhIG1heGltdW0gb2Ygb25jZSBwZXIgaG91ci4gIEl0IGNhbiBiZSB1c2VkIGJ5IHRoaXJkIHBhcnR5IGNvZGUgdG8gZXhlY3V0ZSBjb2RlIHJvdWdobHkgb25jZSBwZXIgaG91ci48L3A+DQoJPHA+VGhpcyBob29rIGlzIHNlbnQgZnJvbSBhIENNU01TIENyb24gam9iIHRoYXQgaXMgcmVxdWVzdCBiYXNlZC4gIFNvIGlmIG5vIHJlcXVlc3RzIGFyZSBjb21pbmcgdG8geW91ciBhcHBsaWNhdGlvbiwgb3IgeW91ciBjcm9uIGpvYiBzZXR0aW5ncyBhcmUgZGlmZmVyZW50IHRoYW4gdGhlIGRlZmF1bHQsIHRoaXMgaG9vayBtYXkgbm90IGJlIHRyaWdnZXJlZCByZWd1bGFybHkuICBBZGRpdGlvbmFsbHksIHlvdSBjYW5ub3QgY291bnQgb24gdGhlIGhvb2sgYmVpbmcgZXhlY3V0ZWQgZXhhY3RseSBldmVyeSBzaXh0eSBtaW51dGVzLjwvcD4NCiAgICA8L2xpPg0KICAgIDxsaT5DTVNNU0V4dDo6RGFpbHlUYXNrDQogICAgICAgIDxwPlRoaXMgaG9vayBpcyBzZW50IGF0IGEgbWF4aW11bSBvZiBvbmNlIHBlciBkYXkuICBJdCBjYW4gYmUgdXNlZCBieSB0aGlyZCBwYXJ0eSBjb2RlIHRvIGV4ZWN1dGUgY29kZSByb3VnaGx5IG9uY2UgcGVyIGRheS48L3A+DQoJPHA+VGhpcyBob29rIGlzIHNlbnQgZnJvbSBhIENNU01TIENyb24gam9iIHRoYXQgaXMgcmVxdWVzdCBiYXNlZC4gIFNvIGlmIG5vIHJlcXVlc3RzIGFyZSBjb21pbmcgdG8geW91ciBhcHBsaWNhdGlvbiwgb3IgeW91ciBjcm9uIGpvYiBzZXR0aW5ncyBhcmUgZGlmZmVyZW50IHRoYW4gdGhlIGRlZmF1bHQsIHRoaXMgaG9vayBtYXkgbm90IGJlIHRyaWdnZXJlZCByZWd1bGFybHkuICBBZGRpdGlvbmFsbHksIHlvdSBjYW5ub3QgY291bnQgb24gdGhlIGhvb2sgYmVpbmcgZXhlY3V0ZWQgZXhhY3RseSBldmVyeSB0d2VudHkgZm91ciBob3Vycy48L3A+DQogICAgPC9saT4NCjwvdWw+]]></data>
	</file>
	<file>
	  <filename>/templates/help_misc_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGg0PkNvbmZpZyBWYXJpYWJsZXM8L2g0Pg0KDQo8ZGl2IGNsYXNzPSJpbmZvcm1hdGlvbiI+DQogIDxwPjxiPk5vdGU6PC9iPiBvbiBpbnN0YWxsIDxiPkNNU01TRXh0PC9iPiBjb3BpZXMgZXhpc3RpbmcgPGI+Y29uZmlnLnBocDwvYj4gZW50cmllcyBmcm9tIDxiPkNHRXh0ZW5zaW9uczwvYj4gdG8gYSA8Yj5jb25maWcuaW5jPC9iPiBzaXR1YXRlZCBvbiBpdHMgPGI+ZGF0YTwvYj4gZm9sZGVyLjwvcD4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPg0KICA8cD48Yj5Ob3RlOjwvYj4gaW4gdGhlIGZ1dHVyZSB0aGVzZSBzZXR0aW5ncyB3aWxsIGJlIGFsc28gYWNjZXNzaWJsZSB2aWEgdGhpcyBtb2R1bGUgc2V0dGluZ3MgcGFnZSBleGNlcHQgZm9yIDxiPmRlcHJlY2F0ZWQgc2V0dGluZ3M8L2I+LCA8Yj5yYXJlbHkgdXNlZCBzZXR0aW5nczwvYj4sIG9yIDxiPmNyaXRpY2FsIHNldHRpbmdzPC9iPiB0aGF0IHNob3VsZCBub3QgYmUgZWFzaWx5IGFjY2Vzc2libGUuPC9wPg0KPC9kaXY+DQoNCjxwPlRoaXMgZnVuY3Rpb25hbGl0eSBsaXN0ZW5zIHRvIGEgZmV3IGRpZmZlcmVudCA8ZW0+KG9wdGlvbmFsKTwvZW0+IHZhcmlhYmxlcyBpbiB0aGUgPGI+Y29uZmlnLmluYzwvYj4gZmlsZTo8L3A+DQo8dWw+DQogIDxsaT48Y29kZT4kY29uZmlnWyd4dF9wcmV0dHlodG1sJ108L2NvZGU+ID0gKGJvb2w6ZmFsc2UpDQogICAgPHA+QSBmbGFnIGluZGljYXRpbmcgd2V0aGVyIHRvIHByZXR0aWZ5IHRoZSBIVE1MIG91dHB1dCBhZnRlciByZW5kZXJpbmcuICBOb3RlOiAgVGhlIGhlYWQgc2VjdGlvbiBpcyBub3QgZm9ybWF0dGVkLjwvcD4NCiAgPC9saT4NCiAgPGxpPjxjb2RlPiRjb25maWdbJ3h0X21pbmh0bWwnXTwvY29kZT4gPSAoYm9vbDpmYWxzZSkNCiAgICA8cD5BIGZsYWcgaW5kaWNhdGluZyB3ZXRoZXIgdG8gbWluaWZ5IHRoZSBIVE1MIG91dHB1dCBhZnRlciByZW5kZXJpbmcuICAgSWYgYm90aCB4dF9wcmV0dHlodG1sIGFuZCB4dF9taW5odG1sIGFyZSBzcGVjaWZpZWQsIHh0X3ByZXR0eWh0bWwgd2lsbCBoYXZlIHByZWNlZGVuY2UuPC9wPg0KICA8L2xpPg0KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHRqc19jYWNoZWxpZmUnXTwvY29kZT4gPSAoaW50OjI0KQ0KICAgIDxwPlRoZSBudW1iZXIgb2YgaG91cnMgdGhhdCBlYWNoIHNpZ25hdHVyZSBqcyBhbmQvb3IgY3NzIGZpbGUgc2hvdWxkIGJlIGNhY2hlZCBmb3IsIGJlZm9yZSBiZWluZyByZWdlbmVyYXRlZC4gIFRoZSBkZWZhdWx0IGlzIDI0IGhvdXJzLjwvcD4NCiAgPC9saT4NCiAgPGxpPjxjb2RlPiRjb25maWdbJ3h0anNfbm9jYWNoZSddPC9jb2RlPiA9IChib29sOmZhbHNlKQ0KICAgIDxwPlRoaXMgY29uZmlnIGVudHJ5LCBpZiBzZXQsIGFuZCB0cnVlIGV4cGxpY2l0bHkgZGlzYWJsZXMgY2FjaGluZy4gIFRoZSBjb21iaW5lZCBjc3MgYW5kIGpzIGZpbGVzIHdpbGwgYmUgcmVnZW5lcmF0ZWQgZm9yIGVhY2ggcmVxdWVzdC48L3A+DQogIDwvbGk+DQogIDxsaT48Y29kZT4kY29uZmlnWyd4dGpzX25vbWluaWZ5J108L2NvZGU+ID0gKGJvb2w6ZmFsc2UpDQogICAgPHA+VGhpcyBjb25maWcgZW50cnksIGlmIHNldCwgYW5kIHRydWUgZXhwbGljaXRseSBkaXNhYmxlcyBtaW5pZnlpbmcgb2YgamF2YXNjcmlwdCBvciBDU1MgY29kZSwgaW5kZXBlbmRlbnQgb2Ygb3RoZXIgcGFyYW1zIG9yIGZsYWdzLjwvcD4NCiAgPC9saT4NCiAgPGxpPjxjb2RlPiRjb25maWdbJ2RldmVsb3Blcl9tb2RlJ108L2NvZGU+ID0gKGJvb2w6ZmFsc2UpDQogICAgPHA+VGhpcyBjb25maWcgZW50cnksIGlmIHNldCwgYW5kIHRydWUgZXhwbGljaXRseSBkaXNhYmxlcyB0aGUgYmVoYXZpb3Igb2YgdGhlICZsYnJhY2U7eHRfY2FjaGV9IGFuZCAmbGJyYWNlO3h0X2NhY2hlX2Jsb2NrfSBwbHVnaW5zLjwvcD4NCiAgPC9saT4NCiAgPGxpPjxjb2RlPiRjb25maWdbJ3h0X3JlbGF4X3NxbCddPC9jb2RlPiA9IChib29sOmZhbHNlKQ0KICAgIDxwPlRoaXMgY29uZmlnIGVudHJ5LCBpZiBzZXQsIGFuZCB0cnVlIGF0dGVtcHRzIHRvIHNldCB0aGUgbXlzcWwgc3FsX21vZGUgdG8gVFJBRElUSU9OQUwgdG8gZml4IHNvbWUgZXJyb3JzIGNyb3BwaW5nIHVwIGluIHF1ZXJpZXMgZm9yIHVzZXJzIHJ1bm5pbmcgbXlzcWwgNS43KzwvcD4NCiAgPC9saT4NCiAgPGxpPjxjb2RlPiRjb25maWdbJ3h0X2lnbm9yZV9jc3JmJ108L2NvZGU+ID0gKGJvb2w6ZmFsc2UpDQogICAgIDxwPlRoaXMgY29uZmlnIGVudHJ5LCBpZiBzZXQgYW5kIHRydWUgaW5kaWNhdGVzIHRoYXQgQ1NSRiB0b2tlbnMgc2V0IGJ5IHRoZSAmbGJyYWNlO3h0X2Zvcm1fY3NyZn0gdGFnIHNob3VsZCBiZSBpZ25vcmVkLiAgVGhpcyBpcyBub3QgcmVjb21tZW5kZWQuPC9wPg0KICA8L2xpPg0KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHRfdXBsb2FkX2FsbG93ZWRfZmlsZXR5cGVzJ108L2NvZGU+ID0gKHN0cmluZykNCiAgICAgPHA+VGhpcyBjb25maWcgZW50cnksIGlmIHNldCBpbmRpY2F0ZXMgYSBsaXN0IG9mIGZpbGUgdHlwZXMgdGhhdCBjYW4gYmUgdXBsb2FkZWQgYnkgbW9kdWxlcyB0aGF0IHVzZSB0aGUgeHRfZmlsZXVwbG9hZCBmdW5jdGlvbmFsaXR5LiAgSWYgbm90IHNwZWNpZmllZCBubyBmaWx0ZXJpbmcgaXMgZG9uZS48L3A+DQogICAgIDxwPlRoaXMgY29uZmlnIGVudHJ5LCBpZiBzcGVjaWZpZWQgc2hvdWxkIGNvbnRhaW4gYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBmaWxlIGV4dGVuc2lvbnMgKGNhc2UgaW5zZW5zaXRpdmUpLjwvcD4NCiAgPC9saT4NCiAgPGxpPjxjb2RlPiRjb25maWdbJ3h0X2ltYWdlZXh0ZW5zaW9ucyddPC9jb2RlPiA9IChzdHJpbmc6anBnLGpwZWcscG5nKQ0KICA8L2xpPg0KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHRfYWxsb3dfd2F0ZXJtYXJraW5nJ108L2NvZGU+ID0gKGJvb2w6ZmFsc2UpDQogIDwvbGk+DQogIDxsaT48Y29kZT4kY29uZmlnWyd4dF93YXRlcm1hcmtfdGV4dCddPC9jb2RlPiA9IChzdHJpbmc6Q01TTVMgU0lURSBOQU1FKQ0KICA8L2xpPg0KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHRfd2F0ZXJtYXJrX3RleHRzaXplJ108L2NvZGU+ID0gKGludDoxMikNCiAgPC9saT4NCiAgPGxpPjxjb2RlPiRjb25maWdbJ3h0X3dhdGVybWFya19hbmdsZSddPC9jb2RlPiA9IChpbnQ6MCkNCiAgPC9saT4NCiAgPGxpPjxjb2RlPiRjb25maWdbJ3h0X3dhdGVybWFya19mb250J108L2NvZGU+ID0gKHN0cmluZzpBUklBTC5UVEYpDQogIDwvbGk+DQogIDxsaT48Y29kZT4kY29uZmlnWyd4dF93YXRlcm1hcmtfdGV4dGNvbG9yJ108L2NvZGU+ID0gKHN0cmluZzojRkZGRkZGKQ0KICA8L2xpPg0KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHRfd2F0ZXJtYXJrX2JnY29sb3InXTwvY29kZT4gPSAoc3RyaW5nOiMwMDAwMDApDQogIDwvbGk+DQogIDxsaT48Y29kZT4kY29uZmlnWyd4dF93YXRlcm1hcmtfdHJhbnNwYXJlbnQnXTwvY29kZT4gPSAoYm9vbDp0cnVlKQ0KICA8L2xpPg0KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHRfd2F0ZXJtYXJrX2ZpbGUnXTwvY29kZT4gPSAoc3RyaW5nOm51bGwpDQogICAgICA8cD5UaGUgbmFtZSBvZiBhbiBpbWFnZSBmaWxlLCByZWxhdGl2ZSB0byBlaXRoZXIgdGhlIHVwbG9hZHMgZGlyZWN0b3J5IG9yIHRoZSBhc3NldHMgcGF0aCB0byB1c2Ugd2hlbiB3YXRlcm1hcmtpbmcgaW1hZ2VzLjwvcD4NCiAgPC9saT4NCiAgPGxpPjxjb2RlPiRjb25maWdbJ3h0X3dhdGVybWFya19hbGlnbm1lbnQnXTwvY29kZT4gPSAoaW50OjApDQogICAgICA8dWw+DQogICAgICAgICAgPGxpPjAgPSBVcHBlciBMZWZ0PC9saT4NCiAgICAgICAgICA8bGk+MSA9IFVwcGVyIENlbnRlcjwvbGk+DQogICAgICAgICAgPGxpPjIgPSBVcHBlciBSaWdodDwvbGk+DQogICAgICAgICAgPGxpPjMgPSBNaWRkbGUgTGVmdDwvbGk+DQogICAgICAgICAgPGxpPjQgPSBNaWRkbGUgQ2VudGVyPC9saT4NCiAgICAgICAgICA8bGk+NSA9IE1pZGRsZSBSaWdodDwvbGk+DQogICAgICAgICAgPGxpPjYgPSBMb3dlciBMZWZ0PC9saT4NCiAgICAgICAgICA8bGk+NyA9IExvd2VyIENlbnRlcjwvbGk+DQogICAgICAgICAgPGxpPjggPSBMb3dlciBSaWdodDwvbGk+DQogICAgICA8L3VsPg0KICA8L2xpPg0KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHRfd2F0ZXJtYXJrX3RyYW5zbHVjZW5jeSddPC9jb2RlPiA9IChpbnQ6MTAwKQ0KICA8L2xpPg0KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHRfYWxsb3dfcHJldmlldyddPC9jb2RlPiA9IChib29sOmZhbHNlKQ0KICA8L2xpPg0KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHRfcHJldmlld19zaXplJ108L2NvZGU+ID0gKGludDo4MDApDQogIDwvbGk+DQogIDxsaT48Y29kZT4kY29uZmlnWyd4dF9kZWxldGVfb3JpZ19pbWFnZSddPC9jb2RlPiA9IChib29sOmZhbHNlKQ0KICA8L2xpPg0KICA8bGk+PGNvZGU+JGNvbmZpZ1sneHRfYWxsb3dfdGh1bWJuYWlsaW5nJ108L2NvZGU+ID0gKGJvb2w6ZmFsc2UpDQogIDwvbGk+DQogIDxsaT48Y29kZT4kY29uZmlnWyd4dF90aHVtYm5haWxfc2l6ZSddPC9jb2RlPiA9IChpbnQ6NzUpDQogIDwvbGk+DQogIDxsaT48Y29kZT4kY29uZmlnWyd4eHh4eHh4eHhfYWRtaW5zZWN0aW9uJ108L2NvZGU+ID0gKHN0cmluZzpleHRlbnNpb25zKQ0KICAgICAgPHA+Rm9yIHNvbWUgbW9kdWxlcyBkZXJpdmVkIGZyb20gQ01TTVNFeHQsIENvbmZpZyBlbnRyaWVzIHRoYXQgYmVnaW4gd2l0aCB0aGUgbW9kdWxlIG5hbWUgaW4gbG93ZXJjYXNlLCBhbmQgZm9sbG93ZWQgYnkgX2FkbWluc2VjdGlvbiBhbGxvdw0KICAgICAgICAgc3BlY2lmeWluZyB0aGUgc2VjdGlvbiBvZiB0aGUgYWRtaW4gbmF2aWdhdGlvbiB0aGF0IHRoZSBtb2R1bGUgd2lsbCBhcHBlYXIgaW4uICBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBjb250ZW50LCBsYXlvdXQsIGZpbGVzLCB1c2VyZ3JvdXBzLCBleHRlbnNpb25zLCBwcmVmZXJlbmNlcywgc2l0ZWFkbWluLCBteXByZWZzLCBlY29tbWVyY2UuPC9wPg0KICAgICAgPHA+aS5lOiA8Y29kZT4kY29uZmlnWydjZ2Jsb2dfYWRtaW5zZWN0aW9uJ10gPSAnY29udGVudCc7PC9jb2RlPjwvcD4NCiAgICA8ZGl2IGNsYXNzPSJpbmZvcm1hdGlvbiI+DQogICAgICA8cD48Yj5Ob3RlOjwvYj4gdGhpcyBmdW5jdGlvbmFsaXR5IGRvZXMgbm90IHdvcmsgZm9yIGFsbCBtb2R1bGVzLiAgT25seSBtb2R1bGVzIHRoYXQgd2VyZSB1cGRhdGVkIGluIHRoZSBsYXRlciBoYWxmIG9mIDIwMTkgb3IgbGF0ZXIuIE90aGVyIG1vZHVsZXMgbWF5IGhhdmUgb3RoZXIgbWVhbnMgb2YgY2hhbmdpbmcgdGhlIGFkbWluIHNlY3Rpb24uPC9wPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KPC91bD4NCg0KPGgzPkFkbWluIFN0eWxlczwvaDM+DQo8cD5UaGlzIG1vZHVsZSwgYW5kIGFsbCBtb2R1bGVzIGRlcml2ZWQgZnJvbSBDTVNNU0V4dCBzdXBwb3J0IGxvYWRpbmcgYSBzZXBhcmF0ZSBzdHlsZXNoZWV0IGZvciB1c2UgaW4gYWRtaW4gcmVxdWVzdHMgZm9yIHRoYXQgbW9kdWxlLiAgVGhpcyBhbGxvd3MgYWRqdXN0aW5nIHN0eWxlcyBvbiBhIHBlci1tb2R1bGUgYmFzaXMgd2l0aGluIHRoZSBhZG1pbiBjb25zb2xlLjwvcD4NCjxwPlRvIHVzZSB0aGlzLCBwbGFzZSBhIGZpbGUgbmFtZWQgYWRtaW5fc3R5bGVzLmNzcyBpbiB0aGUgPHJvb3Q+L21vZHVsZV9jdXN0b20vPG1vZHVsZW5hbWU+L2NzcyBkaXJlY3RvcnksIHdpdGggdGhlIGNzcyB0aGF0IHlvdSB3YW50IHRvIGFkanVzdCBvciBvdmVycmlkZS4gIGkuZTogIGZvciB0aGUgRnJvbnRFbmRVc2VycyBtb2R1bGUgeW91IHdvdWxkOjwvcD4NCjxwPjxwcmU+PGNvZGU+bWtkaXIgLXAgbW9kdWxlX2N1c3RvbS9Gcm9udEVuZFVzZXJzL2Nzcw0KdmkgbW9kdWxlX2N1c3RvbS9Gcm9udEVuZFVzZXJzL2Nzcy9hZG1pbl9zdHlsZXMuY3NzPC9jb2RlPjwvcHJlPjwvcD4NCg0KPGgzPkVtYWlsIGFuZCBFbWFpbCBUZW1wbGF0ZXM8L2gzPg0KPHA+VGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBzZXQgb2YgY2xhc3NlcyB0byBhbGxvdyBzdG9yaW5nIGVtYWlsIHRlbXBsYXRlcywgYW5kIGRlc3RpbmF0aW9uIGVtYWlsIGFkZHJlc3MgY29uZmlndXJhdGlvbnMgaW4gZmlsZXMuICBUaGlzIGlzIHBlcmZlY3QgZm9yIGFwcGxpY2F0aW9ucyB3aGVyZSBhcyBtdWNoIGFzIHBvc3NpYmxlIHNob3VsZCBiZSBzdG9yZWQgaW4gZmlsZXMgdG8gYWxsb3cgZm9yIHJldmlzaW9uIGNvbnRyb2wsIGFuZCB0byBhbGxvdyBmb3IgZWFzaWVyIG1pZ3JhdGlvbiBiZXR3ZWVuIGRldmVsb3BtZW50LCBzdGFnaW5nLCBhbmQgbGl2ZSBlbnZpcm9ubWVudHMuPC9wPg0KPHA+VGhlIEVtYWlsIEFQSSdzIG11c3QgYmUgdXRpbGl6ZWQgYnkgb3RoZXIgdGhpcmQgcGFydHkgbW9kdWxlcyB0aGF0IHdpc2ggdG8gc2VuZCBtYWlscy48L3A+DQo8aDQ+RmlsZSBsb2NhdGlvbjo8L2g0Pg0KPHA+VGhlIEVtYWlsIGZ1bmN0aW9uYWxpdHkgbG9va3MgZm9yIGZpbGVzIGVuZGluZyB3aXRoIC5lbWwgZmlyc3QgaW4geW91ciA8Y29kZT4kY29uZmlnWydhc3NldHNfcGF0aCddL2VtYWlsczwvY29kZT4uICBXaGljaCBpcyBieSBkZWZhdWx0IDxjb2RlPiZsdDtjbXNtcyByb290Jmd0Oy9hc3NldHMvZW1haWxzPC9jb2RlPi48L3A+DQo8cD5OZXh0IHRoaXMgZnVuY3Rpb25hbGl0eSB3aWxsIGxvb2sgaW4gPGNvZGU+JGNvbmZpZ1snYXNzZXRzX3BhdGgnXS9tb2R1bGVfY3VzdG9tLyZsdDttb2R1bGUgbmFtZSZndDsvZW1haWxzPC9jb2RlPi48L3A+DQo8cD5MYXN0bHkgdGhpcyBmdW5jdGlvbmFsaXR5IHdpbGwgbG9vayBmb3IgdGhlIC5lbWwgZmlsZSBpbiB0aGUgbW9kdWxlJ3MgZW1haWwgZGlyZWN0b3J5LCBpbiB0aGUgbW9kdWxlIHNvdXJjZSBkaXJlY3RvcnkuICBZb3Ugc2hvdWxkIG5ldmVyIG1vZGlmeSB0aGVzZSBmaWxlcyBkaXJlY3RseS48L3A+DQo8aDQ+RmlsZSBmb3JtYXQ6PC9oND4NCjxwPlRoZSBmaWxlcyBtdXN0IGVuZCBpbiBhIDxjb2RlPi5lbWw8L2NvZGU+IGV4dGVuc2lvbiwgYW5kIGJlIEFTQ0lJIGZpbGVzLiAgVGhlIGZpbGUgaXMgZGl2aWRlZCBpbnRvIDMgcHJpbWFyeSBwYXJ0cyBzZXBhcmF0ZWQgYnkgbGluZXMgc3RhcnRpbmcgd2l0aCBhbmQgZW5kaW5nIHdpdGggPT09PS48L3A+DQo8dWw+DQogICA8bGk+VGhlIHRvcCBjb25maWd1cmF0aW9uIHNlY3Rpb24gKGluIGluaSBmaWxlIGZvcm1hdDwvbGk+DQogICA8bGk+VGhlIHNtYXJ0eSB0ZW1wbGF0ZSBmb3IgdGhlIGVtYWlsIHN1YmplY3QuPC9saT4NCiAgIDxsaT5UaGUgc21hcnR5IHRlbXBsYXRlIGZvciB0aGUgZW1haWwgYm9keS48L2xpPg0KPC91bD4NCjxoND5FeGFtcGxlOiA8Y29kZT5hc3NldHMvZW1haWxzL2ZldV9vbmxvZ2luZmFpbGVkLmVtbDwvY29kZT48L2g0Pg0KPHByZT5bZW1haWxdDQp0b19hZG1pbl9ncm91cHM9QWRtaW4NCnRvX2ZldV9ncm91cHM9DQp0b19jdXJyZW50X2FkbWluPTANCnRvX2N1cnJlbnRfZmV1PTANCnRvX2FkZHI9c29tZS5lbWFpbEBkb21haW4uY29tDQp0b19hZGRyPWFub3RoZXIuZW1haWxAZG9tYWluLmNvbQ0KPT09PSBzdWJqZWN0ID09PT0NClVzZXIgbG9naW4gZmFpbGVkIGZvciAmbGJyYWNlOyR1c2VybmFtZX0NCg0KPT09PSBib2R5ID09PT0NCkEgdXNlciBsb2dpbiBhdCAmbGJyYWNlOyRpcH0gYXR0ZW1wdGVkIHRvIGxvZ2luIGF0ICZsYnJhY2U7c2l0ZW5hbWV9IHdpdGggdXNlcm5hbWUgJmxicmFjZTskdXNlcm5hbWV9IGFuZCBmYWlsZWQuDQoNCjwvcHJlPg0KPGg0PkFjY2VwdGVkIGluaSBrZXlzPC9oND4NCjx1bD4NCiAgICA8bGk+PGNvZGU+dG9fYWRtaW5fZ3JvdXBzPC9jb2RlPiA6IHN0cmluZyBhcnJheSAtIEFuIGFycmF5IG9mIGFkbWluIGdyb3VwIGlkcyBvciBuYW1lcyB0byB3aGljaCB0aGlzIGVtYWlsIHNob3VsZCBiZSBzZW50LiBTZXBhcmF0ZWQgYnkgY29tbWFzLjwvbGk+DQogICAgPGxpPjxjb2RlPnRvX2ZldV9ncm91cHM8L2NvZGU+IDogc3RyaW5nIGFycmF5IC0gQW4gYXJyYXkgb2YgRkVVIGdyb3VwIGlkcyBvciBuYW1lcyB0byB3aGljaCB0aGlzIGVtYWlsIHNob3VsZCBiZSBzZW50LiBTZXBhcmF0ZWQgYnkgY29tbWFzLjwvbGk+DQogICAgPGxpPjxjb2RlPnRvX2N1cnJlbnRfYWRtaW48L2NvZGU+IDogYm9vbCAtIEluZGljYXRlcyB0aGF0IHRoaXMgZW1haWwgc2hvdWxkIGJlIHNlbnQgdG8gdGhlIGN1cnJlbnRseSBsb2dnZWQgaW4gYWRtaW4gdXNlciAoaWYgYXZhaWxhYmxlKS48L2xpPg0KICAgIDxsaT48Y29kZT50b19jdXJyZW50X2ZldTwvY29kZT4gOiBib29sIC0gSW5kaWNhdGVzIHRoYXQgdGhpcyBlbWFpbCBzaG91bGQgYmUgc2VudCB0byB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiBGRVUgdXNlciAoaWYgYXZhaWxhYmxlKS48L2xpPg0KICAgIDxsaT48Y29kZT50b19hZGRyPC9jb2RlPiA6IHN0cmluZyBhcnJheSAtIEFuIGFycmF5IG9mIGZpeGVkIGVtYWlsIGFkZHJlc3NlcyB0byByZWNlaXZlIHRoaXMgbWVzc2FnZS48L2xpPg0KICAgIDxsaT48Y29kZT5jY19hZGRyPC9jb2RlPiA6IHN0cmluZyBhcnJheSAtIEFuIGFycmF5IG9mIGZpeGVkIGVtYWlsIGFkZHJlc3NlcyB0byBiZSBjYXJib24gY29waWVkIG9uIHRoaXMgbWVzc2FnZS48L2xpPg0KICAgIDxsaT48Y29kZT5iY2NfYWRkcjwvY29kZT4gOiBzdHJpbmcgYXJyYXkgLSBBbiBhcnJheSBvZiBmaXhlZCBlbWFpbCBhZGRyZXNzZXMgdG8gYmUgYmxpbmQgY2FyYm9uIGNvcGllZCBvbiB0aGlzIG1lc3NhZ2UuPC9saT4NCiAgICA8bGk+PGNvZGU+cHJpb3JpdHk8L2NvZGU+IDogaW50IFsxLTVdIC0gQW4gaW50ZWdlciBwcmlvcml0eSBmb3IgdGhlIGVtYWlsIHN5c3RlbSAoY2xpZW50cyBtYXkgaWdub3JlIHRoaXMpLiAgMSA9IEhpZ2ggUHJpb3JpdHksICA1ID0gbG93IHByaW9yaXR5LiAgIDMgaXMgdGhlIGRlZmF1bHQuPC9saT4NCiAgICA8bGk+PGNvZGU+ZW5jb2RlX3N1YmplY3Q8L2NvZGU+IDogYm9vbCAtIEluZGljYXRlcyB0aGF0IHRoZSBzdWJqZWN0IGZvciB0aGlzIGVtYWlsIHNob3VsZCBiZSBiYXNlNjQgZW5jb2RlZC48L2xpPg0KPC91bD4NCjxoND5Ob3Rlczo8L2g0Pg0KPHVsPg0KICA8bGk+T25seSBBU0NJSSBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkIGluIHRoZSBlbWFpbCBzdWJqZWN0IGxpbmUsIHRoZXJlZm9yZSB5b3UgbWF5IG5lZWQgdG8gZGVjb2RlIGVudGl0aWVzIGZyb20gc29tZSBwbHVnaW5zIGZvciB1c2UgaW4gdGhlIHN1YmplY3QsIG9yIGJhc2U2NCBlbmNvZGUgdGhlIHN1YmplY3QgdXNpbmcgdGhlIGVuY29kZV9zdWJqZWN0IGZsYWcgaW4gdGhlIGluaSBzZWN0aW9uLjwvbGk+DQogIDxsaT5UcmFuc2xhdGlvbiBpbiBlbWFpbHMgaXMgbm90IGEgc3RyYWlnaHRmb3J3YXJkIHByb2Nlc3MuDQogICAgICA8cD5QcmltYXJpbHkgYmVjYXVzZSBkaWZmZXJlbnQgZW1haWxzIGNhbiBiZSB0cmlnZ2VyZXJkIGZyb20gZGlmZmVyZW50IHByb2Nlc3NlcyBhbmQgaXQgbWF5IG5vdCBiZSBwb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIGxhbmd1YWdlIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGEgcGFydGljdWxhciB1c2VyLiBJdCBpcyB1c3VhbGx5IGJlc3QgdG8gYmVnaW4gd2l0aCBoYXJkY29kaW5nIHRoZSBsYW5ndWFnZSBpbiB0aGUgZW1haWwgY29udGVudCB1bnRpbCB5b3Uga25vdyBiZXR0ZXIgaG93IHRoZSBtZXNzYWdlcyB3b3JrLjwvcD4NCiAgICAgIDxwPkZvciBleGFtcGxlOiBpdCBpcyBkaWZmaWN1bHQgdG8ga25vdyB3aGF0IGxhbmd1YWdlIHRvIHVzZSB3aGVuIGFuIGVtYWlsIGlzIHNlbnQgdG8gYSBzaXRlIHZpc2l0b3IgdHJpZ2dlcmVkIGJ5IGEgYmFja2dyb3VuZCB0YXNrIG9yIGFuIGFkbWluIGFjdGlvbi4gIEl0IGlzIGFsc28gZGlmZmljdWx0IHRvIGtub3cgd2hhdCBsYW5ndWFnZSB0byB1c2Ugd2hlbiBhbiBlbWFpbCBpcyBzZW50IHRvIG11bHRpcGxlIGFkbWluIHVzZXJzLjwvcD4NCiAgICAgIDxwPklmIHlvdSB3b3VsZCBsaWtlIHRoZSBhYmlsaXR5IHRvIHRyYW5zbGF0ZSBlbWFpbHMgZm9yIGVhY2ggcGFydGljdWxhciB1c2VyLCBBTkQgY2FuIGRldGVybWluZSB3aGF0IHRoYXQgbGFuZ3VhZ2Ugc2hvdWxkIGJlLCB0aGVuIHlvdSBtYXkgd2FudCB0byB1c2UgdGhlIENHbWwgYW5kIENHbWxHVUkgbW9kdWxlcyBmb3IgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIHRyYW5zbGF0aW9ucyB0aGF0IGFyZSBzZXBhcmF0ZSBmcm9tIHRoZSBtb2R1bGVzIHlvdSBhcmUgdXNpbmcuPC9wPg0KICA8L2xpPg0KICA8bGk+U2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgQ01TTVNFeHRcRW1haWxcRW1haWwsIENNU01TRXh0XEVtYWlsXEZpbGVFbWFpbFN0b3JhZ2UsIGFuZCBDTVNNU0V4dFxFbWFpbFxTaW1wbGVFbWFpbFByb2Nlc3NvciBjbGFzc2VzIGluIHRoZUFQSSBkb2N1bWVudGF0aW9uIGZvciB0aGUgbWV0aG9kcyB0aGF0IGFyZSBhdmFpbGFibGUuPC9saT4NCjwvdWw+DQoNCjxoND5BZGRpdGlvbmFsIHNtYXJ0eSBkYXRhLjwvaDQ+DQo8cD5UaGUgPGNvZGU+XENNU01TRXh0XEVtYWlsXEVtYWlsPC9jb2RlPiBjbGFzcyBoYXMgbWV0aG9kcyB0byBhZGQgYWRkaXRpb25hbCBzbWFydHkgdmFyaWFibGVzIHRvIHRoZSBlbWFpbCBiZWZvcmUgdGVtcGxhdGUgcHJvY2Vzc2luZy4gIFRoaXMgaXMgZG9uZSBpbiBjb2RlLiBJbiBjb2RlIGZpbGUgYXR0YWNobWVudHMgY2FuIGFsc28gYmUgcHJvdmlkZWQuICBUaGUgZXhhbXBsZSBhYm92ZSBhc3N1bWVzIHRoYXQgdGhlIGNvZGUgdGhhdCB0cmlnZ2VycyB0aGlzIGVtYWlsIHdpbGwgYWRkIHRoZSAmbGJyYWNlOyRpcH0gYW5kICZsYnJhY2U7JHVzZXJuYW1lfSB2YXJhaWJsZXMuPC9wPg0KPGg0PlNhbXBsZTo8L2g0Pg0KPHA+VGhpcyBjb2RlIGlsbHVzdHJhdGVzIGEgcG90ZW50aWFsIGhhbmRsZXIgZm9yIHRoZSBGcm9udEVuZFVzZXJzIG1vZHVsZXMncyBvbkxvZ2luRmFpbGVkIEV2ZW50LiAgVGhpcyBjb2RlIHdvdWxkIHBvdGVudGlhbGx5IGdvIGludG8gYSB0aGlyZCBwYXJ0eSBtb2R1bGUncyBjb25zdHJ1Y3Rvci48L3A+DQo8cHJlPjxjb2RlPg0KXENNU01TXEhvb2tNYW5hZ2VyOjphZGRfaG9vayggJ0Zyb250RW5kVXNlcnM6Om9uTG9naW5GYWlsZWQnLCBmdW5jdGlvbiggJHBhcmFtcyApICZsYnJhY2U7DQogICAgLy8gdGhpcyBtZXRob2QgcHJvdmlkZWQgYnkgQ01TTVNFeHQgbG9hZHMgdGhlIGVtYWlsIG9iamVjdC4NCiAgICAkZW1sID0gJHRoaXMtPmdldF9lbWFpbF9zdG9yYWdlKCktPmxvYWQoJ2ZldV9vbmxvZ2luZmFpbGVkLmVtbCcpOw0KICAgIC8vIGFkZCBkYXRhIHNwZWNpZmljIGZvciB0aGlzIGhvb2suDQogICAgJGVtbCA9ICRlbWwtPmFkZF9kYXRhKCdpcCcsJHBhcmFtc1snaXAnXSktPmFkZF9kYXRhKCd1c2VybmFtZScsJHBhcmFtc1sndXNlcm5hbWUnXSk7DQoNCiAgICAkbWFpbGVyID0gbmV3IFxjbXNfbWFpbGVyOw0KICAgICRzZW5kZXIgPSBuZXcgXENNU01TRXh0XEVtYWlsXFNpbXBsZUVtYWlsUHJvY2Vzc29yKCAkZW1sLCAkbWFpbGVyICk7DQogICAgJHNlbmRlci0+c2VuZCgpDQp9KTsNCjwvY29kZT48L3ByZT4NCg0KPGgzPkZpbGUgVGVtcGxhdGVzPC9oMz4NCjx1bD4NCiAgICA8bGk+c29ydGFibGUgbGlzdCB0ZW1wbGF0ZSAtIDxjb2RlPnNvcnRhYmxlbGlzdC50cGw8L2NvZGU+DQogICAgPC9saT4NCiAgICA8bGk+ZXJyb3IgdGVtcGxhdGUgLSA8Y29kZT5lcnJvci50cGw8L2NvZGU+DQogICAgPC9saT4NCjwvdWw+DQoNCjxoMz5BZG1pbiBzaWRlIGphdmFzY3JpcHQ8L2gzPg0KPHA+VGhpcyBtb2R1bGUgdXRpbGl6ZXMgdGhlIEdldEhlYWRlckhUTUwoKSBtZXRob2QgdG8gaW5qZWN0IHNvbWUgamF2YXNjcmlwdCB1dGlsaXRpZXMgdGhhdCBjYW4gYmUgdXNlZCBieSBhbnkgbW9kdWxlIHRoYXQgZXh0ZW5kcyBcQ01TTVNFeHRcWFRNb2R1bGUgaW4gdGhlaXIgYWRtaW4gcGFuZWwuPC9wPg0KPHVsPg0KICAgIDxsaT5NYWtlIGJ1dHRvbnMgd29yayBsaWtlIGxpbmtzDQogICAgICAgIDxwPkNyZWF0aW5nIGEgYnV0dG9uIHdpdGggYSBkYXRhLWhyZWYgYXR0cmlidXRlIHRoYXQgaGFzIGEgVVJJIGluIGl0IHdpbGwgY2F1c2UgdGhlIGJ1dHRvbiB0byByZWRpcmVjdCB0byB0aGUgVVJJIHdoZW4gY2xpY2tlZC48L3A+DQoJPHByZT4mbHQ7YnV0dG9uIGRhdGEtaHJlZj0iaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZyImZ3Q7Z28mbHQ7YnV0dG9uJmd0OzwvcHJlPg0KICAgIDwvbGk+DQo8L3VsPg==]]></data>
	</file>
	<file>
	  <filename>/templates/help_smarty_addons_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgyPlNtYXJ0eSBBZGRvbnM8L2gyPg0KPHA+VGhpcyBtb2R1bGUgYWRkcyBhIGZldyBzbWFydHkgY29udmVuaWVuY2UgYWRkb25zIGZvciB1c2Ugd2l0aCBvdGhlciBtb2R1bGVzLiBUaGV5IGFyZSBsaXN0ZWQgYW5kIGRlc2NyaWJlZCBoZXJlOjwvcD4NCg0KPHVsIGNsYXNzPSJhY2NvcmRpb24tbGlzdCI+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiYjMTIzeHRfbW9kdWxlX2hpbnR9IDxzcGFuIGNsYXNzPSJzbWFsbCI+Q3JlYXRlIGhpbnQgcGFyYW1ldGVycyB0byBtb2R1bGUgYWN0aW9uczwvc3Bhbj48L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD5UaGlzIGZ1bmN0aW9uIHBsdWdpbiBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGhpbnRzIGZvciBtb2R1bGUgYmVoYXZpb3IgYmVmb3JlIHRoZSBtb2R1bGUgaXMgY2FsbGVkIG9yIGZvciBwYXJhbWV0ZXJzIHRoYXQgY2Fubm90IG9yIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIGluIHRoZSBVUkwuICBJLmU6IEluIGEgc2l0dWF0aW9uIHdoZW4gYSBzaXRlIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHByZXR0eSB1cmxzIGZvciBTRU8gcHVycG9zZXMgaXQgaXMgb2Z0ZW4gaW1wb3NzaWJsZSB0byBwcm92aWRlIGFkZGl0aW9uYWwgbW9kdWxlIHBhcmFtZXRlcnMgbGlrZSBhIGRldGFpbHRlbXBsYXRlIG9yIHNvcnQgb3JkZXIgb24gYSBVUkwuICBUaGlzIHBsdWdpbiBjYW4gYmUgdXNlZCBpbiBhbnkgdGVtcGxhdGVzIG9yIGluIGEgcGFnZSBzcGVjaWZpYyB3YXkgdG8gZ2l2ZSBoaW50cyBhcyB0byBob3cgbW9kdWxlcyBzaG91bGQgYmVoYXZlLjwvcD4NCiAgICAgIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gQW55IHBhcmFtZXRlcnMgdGhhdCBhcmUgc3BlY2lmaWVkIG9uIHRoZSBVUkwgb3IgbW9kdWxlIHRhZyB3aWxsIG92ZXJyaWRlIG1hdGNoaW5nIG1vZHVsZSBoaW50cy4gSS5lOiBXaGVuIHVzaW5nIE5ld3MgYW5kIGEgZGV0YWlsdGVtcGxhdGUgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBvbiBhIE5ld3MgZGV0YWlsIHVybCwgYW55IGRldGFpbHRlbXBsYXRlIGhpbnRzIHdpbGwgaGF2ZSBubyBlZmZlY3QuPC9wPg0KICAgICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBJbiBvcmRlciB0byBlbnN1cmUgcHJvcGVyIGJlaGF2aW9yLCBtb2R1bGUgaGludHMgbXVzdCBiZSBjcmVhdGVkIGJlZm9yZSB0aGUgbW9kdWxlIGlzIGNhbGxlZCwgYW5kIHVzdWFsbHkgYmVmb3JlIHRoZSAmbGJyYWNlO2NvbnRlbnR9IHRhZyBpcyBleGVjdXRlZCBpbiB0aGUgQ01TTVMgcGFnZSB0ZW1wbGF0ZS4gIFRoZXJlZm9yZSwgdGhleSBzaG91bGQgKG5vcm1hbGx5KSBiZSBjcmVhdGVkIHZlcnkgZWFybHkgaW4gdGhlIHBhZ2UgdGVtcGxhdGUgcHJvY2Vzcy4gIEFuIGlkZWFsIGxvY2F0aW9uIGZvciBwYWdlIHNwZWNpZmljIGhpbnRzIGlzIGluIHRoZSAmcXVvdDtTbWFydHkgZGF0YSBvciBsb2dpYyB0aGF0IGlzIHNwZWNpZmljIHRvIHRoaXMgcGFnZTomcXVvdDsgdGV4dGFyZWEgb24gdGhlIGVkaXRjb250ZW50IGZvcm0uPC9wPg0KDQogICAgICA8aDQ+RXhhbXBsZTo8L2g0Pg0KICAgICAgPHA+V2hlbiB1c2luZyB0aGUgTmV3cyBtb2R1bGUsIGFuZCBwcmV0dHkgdXJscy4gIFlvdSB3aXNoIHRvIGRpc3BsYXkgbmV3cyBhcnRpY2xlcyBmb3IgYSBzcGVjaWZpYyBjYXRlZ29yeSBvbiBvbmUgcGFnZSwgYW5kIHdvdWxkIGxpa2UgdG8gdXNlIGEgbm9uLXN0YW5kYXJkIGRldGFpbCB0ZW1wbGF0ZSB0byBkaXNwbGF5IHRoZSBpbmRpdmlkdWFsIGFydGljbGVzIG9uIGEgZGlmZmVyZXJudCBwYWdlLiAgSS5lOiBwZXJoYXBzIG9uIHlvdXIgJnF1b3Q7U3BvcnRzJnF1b3Q7IHBhZ2UgeW91IGFyZSBjYWxsaW5nIE5ld3MgbGlrZTogPHN0cm9uZz48Y29kZT4mbGJyYWNlO05ld3MgY2F0ZWdvcnk9c3BvcnRzIGRldGFpbHBhZ2U9c3BvcnRzX2RldGFpbH08L2NvZGU+PC9zdHJvbmc+LiBIb3dldmVyLCB1c2luZyBwcmV0dHkgdXJscyBpdCBpcyBpbXBvc3NpYmxlIHRvIHNwZWNpZnkgYSBkZXRhaWx0ZW1wbGF0ZSBvbiB0aGUgbGlua3MgdGhhdCB3aWxsIGdlbmVyYXRlIHRoZSBkZXRhaWwgdmlld3MuICBUaGUgc29sdXRpb24gaXMgdG8gdXNlIHRoZSA8c3Ryb25nPjxjb2RlPiZsYnJhY2U7eHRfbW9kdWxlX2hpbnR9PC9jb2RlPjwvc3Ryb25nPiB0YWcgb24gdGhlIDx1PnNwb3J0c19kZXRhaWw8L3U+IHBhZ2UgdG8gcHJvdmlkZSBzb21lIGhpbnRzIGFzIHRvIGhvdyBOZXdzIHNob3VsZCBiZWhhdmUgb24gdGhhdCBwYWdlLjwvcD4NCiAgICAgIDxwPldoZW4gZWRpdGluZyB0aGUgPHU+c3BvcnRzX2RldGFpbDwvdT4gcGFnZSBvbiB0aGUgb3B0aW9ucyB0YWIsIGluIHRoZSB0ZXh0YXJlYSBlbnRpdGxlZCAmcXVvdDtTbWFydHkgZGF0YSBvciBsb2dpYyB0aGF0IGlzIHNwZWNpZmljIHRvIHRoaXMgcGFnZTomcXVvdDsgeW91IGNvdWxkIGVudGVyIGEgdGFnIHN1Y2ggYXM6IDxzdHJvbmc+PGNvZGU+JmxicmFjZTt4dF9tb2R1bGVfaGludCBtb2R1bGU9TmV3cyBkZXRhaWx0ZW1wbGF0ZT1zcG9ydHN9PC9jb2RlPjwvc3Ryb25nPi4gIE5vdyB3aGVuIGEgdXNlciBjbGlja3Mgb24gYSBsaW5rIGZyb20gdGhlIE5ld3MgZGlzcGxheSBvbiB5b3VyICZxdW90O3Nwb3J0cyZxdW90OyBwYWdlIGhlIHdpbGwgYmUgZGlyZWN0ZWQgdG8gdGhlIDx1PnNwb3J0c19kZXRhaWw8L3U+IHBhZ2UsIGFuZCB0aGUgTmV3cyBkZXRhaWwgdGVtcGxhdGUgZW50aXRsZWQgJnF1b3Q7c3BvcnRzJnF1b3Q7IHdpbGwgYmUgdXNlZCB0byBkaXNwbGF5IHRoZSBhcnRpY2xlLjwvcD4NCiAgICAgIDxwPk5vdGU6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+SXQgaXMgcG9zc2libGUgdG8gc3BlY2lmeSBtdWx0aXBsZSBwYXJhbWV0ZXIgaGludHMgdG8gYSBzaW5nbGUgbW9kdWxlIGluIG9uZSBjYWxsIHRvIHRoaXMgcGx1Z2luLjwvbGk+DQogICAgICAgIDxsaT5JdCBpcyBwb3NzaWJsZSB0byBjYWxsIHRoaXMgbW9kdWxlIG11bHRpcGxlIHRpbWVzIGluIGEgcmVxdWVzdCB0byBwcm92aWRlIGhpbnRzIHRvIGRpZmZlcmVudCBtb2R1bGVzLjwvbGk+DQogICAgICA8L3VsPg0KDQogICAgICA8aDQ+VXNhZ2U6PC9oND4NCiAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICZsYnJhY2U7eHRfbW9kdWxlX2hpbnQgbW9kdWxlPU5ld3Mgc3VtbWFyeXRlbXBsYXRlPXNvbWV0aGluZyBkZXRhaWxwYWdlPWhvbWV9DQogICZsYnJhY2U7eHRfbW9kdWxlX2hpbnQgbW9kdWxlPVNtYXJ0SW1hZ2Ugbm9lbWJlZD0xfTwvcHJlPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X2Vycm9yfS4uLiZsYnJhY2U7L3h0X2Vycm9yfSA8c3BhbiBjbGFzcz0ic21hbGwiPkRpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSA8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPihuZXcpPC9zcGFuPjwvc3Bhbj48L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD5hbGlhcyBvZiB4dGVycm9yIGZvciBjb25zaXN0ZW5jeTwvcD4NCg0KICAgICAgPHA+QSBibG9jayBwbHVnaW4gdGhhdCB1c2VzIHRoZSBlcnJvciB0ZW1wbGF0ZSAoY29uZmlndXJhYmxlIGZyb20gdGhlIENNU01TRXh0IGFkbWluIGludGVyZmFjZSkgdG8gZGlzcGxheSBhbiBlcnJvciBtZXNzYWdlLjwvcD4NCiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+PGI+ZXJyb3JjbGFzczwvYj4gLSAoc3RyaW5nKSBvdmVycmlkZSB0aGUgZGVmYXVsdCBjbGFzcyBuYW1lIGluIHRoZSB0ZW1wbGF0ZS48L2xpPg0KICAgICAgPC91bD4NCiAgICAgIDxwPlVzYWdlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JmxicmFjZTt4dF9lcnJvcn1UaGlzIGlzIGVycm9yIHRleHQmbGJyYWNlOy94dF9lcnJvcn08L3ByZT4NCg0KICAgICAgPHByZT4mbGJyYWNlO3h0ZXJyb3IgW2Vycm9yY2xhc3M9c3RyaW5nXX0uLi4mbGJyYWNlOy94dGVycm9yfSA8c3BhbiBzdHlsZT0iY29sb3I6b3JhbmdlIj4mbGJyYWNlOyogZGVwcmVjYXRlZDogdXNlIHh0X2Vycm9yIGluc3RlYWQuIFRoaXMgdGFnIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlICp9PC9zcGFuPjwvcHJlPg0KDQogICAgPC9kaXY+DQogIDwvbGk+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfY29udGVudF90eXBlfSA8c3BhbiBjbGFzcz0ic21hbGwiPmNoYW5nZSB0aGUgbWltZS10eXBlIG9mIGFuIGFjdGlvbjwvc3Bhbj48L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD5UaGlzIHBsdWdpbiBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgbWltZS10eXBlIG9mIGFuIGFjdGlvbi4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGluIHRlbXBsYXRlcyB0aGF0IGFyZSBpbiByZXNwb25zZSB0byBhamF4IHJlcXVlc3RzLjwvcD4NCiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICAgPGxpPjxiPnR5cGU8L2I+IC0gKHN0cmluZykgVGhlIGRlc2lyZWQgb3V0cHV0IG1pbWUgdHlwZS48L2xpPg0KICAgICAgPC91bD4NCiAgICA8L2Rpdj4NCiAgPC9saT4NCiAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dF9jYWNoZWRfdXJsfSA8c3BhbiBjbGFzcz0ic21hbGwiPlJldHJpZXZlIHRoZSBjb250ZW50cyBvZiBhIHJlbW90ZSBVUkwgYW5kIGNhY2hlIGl0PC9zcGFuPjwvaDM+DQogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4NCiAgICAgIDxwPlRoaXMgcGx1Z2luIGNhbiByZXRyaWV2ZSB0aGUgY29udGVudHMgb2YgYSByZW1vdGUgVVJMIGFuZCBjYWNoZSB0aGUgY29udGVudHMgZm9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBtaW51dGVzLiAgVGhlbiByZXR1cm5zIHRob3NlLiAgVGhpcyBwbHVnaW4gaXMgdXNlZnVsIGZvciByZXRyaWV2aW5nIHRoZSBjb250ZW50cyBvZiByZW1vdGUgVVJMUywgb3Igb2YgbG9jYWwgdXJscyB0aGF0IHJlcHJlc2VudCBleHBlbnNpdmUgb3BlcmF0aW9ucyBidXQgY2FuIGJlIGNhY2hlZC48L3A+DQogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPjxiPnVybDwvYj4gLSAoc3RyaW5nKSAtIFRoZSBVUkwgdG8gZmV0Y2ggYW5kIGNhY2hlPC9saT4NCiAgICAgICAgPGxpPjxiPnRpbWU8L2I+IC0gKGludCkgLSBUaGUgbnVtYmVyIG9mIG1pbnV0ZXMgdG8gY2FjaGUgdGhpcyB1cmwgZm9yLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMjA8L2xpPg0KICAgICAgICA8bGk+PGI+YXNzaWduPC9iPiAtIChzdHJpbmcpIC0gQXNzaWduIHRoZSBvdXRwdXQgb2YgdGhpcyBwbHVnaW4gdG8gdGhlIG5hbWVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPg0KICAgICAgPC91bD4NCiAgICAgIDxwPlVzYWdlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+Jmx0O2RpdiBpZD0ic29tZXRoaW5nIiZndDsmbGJyYWNlO3h0X2NhY2hlZF91cmwgdXJsPXNvbWV0aGluZ30mbHQ7L2RpdiZndDs8L3ByZT4NCiAgICAgIDxwPlRpcDogIEl0IGlzIHBvc3NpYmxlIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNhY2hlIGV4cGVuc2l2ZSBvcGVyYXRpb25zOjwvcD4NCiAgICAgIDxvbD4NCiAgICAgICAgPGxpPkNyZWF0ZSBhIG5ldyBwYWdlIHRlbXBsYXRlIHdpdGgganVzdCA8Y29kZT4mbGJyYWNlO2NvbnRlbnR9PC9jb2RlPiBpbiBpdC4gTmFtZSB0aGUgcGFnZSB0ZW1wbGF0ZSBzb21ldGhpbmcgbGlrZSBjb250ZW50X29ubHk8L2xpPg0KICAgICAgICA8bGk+Q3JlYXRlIGEgbmV3IGNvbnRlbnQgcGFnZSB1c2luZyB0aGUgbmV3IGNvbnRlbnRfb25seSBwYWdlIHRlbXBsYXRlLiAgRW5zdXJlIHRoYXQgaXQgd2lsbCBub3QgYmUgc2hvd24gaW4gdGhlIG1lbnUuIEluIHRoZSBjb250ZW50IGFyZWEgb2YgdGhpcyBwYWdlIHBsYWNlIHNtYXJ0eSB0YWdzIG9yIG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBxdWl0ZSBleHBlbnNpdmUgaW4gcHJvY2Vzc2luZyBidXQgZG8gbm90IG5lZWQgdG8gYmUgcmVmcmVzaGVkIHJlZ3VsYXJseS4gIFJlbWVtYmVyIHRoZSBwYWdlIGFsaWFzIGZvciB0aGlzIG5ldyBwYWdlLjwvbGk+DQogICAgICAgIDxsaT5PbiB5b3VyIG5vcm1hbCBwYWdlIHRlbXBsYXRlKHMpIGNhbGwgPGNvZGU+JmxicmFjZTt4dF9jYWNoZWRfdXJsIHVybD0iJmxicmFjZTtjbXNfc2VsZmxpbmsgaHJlZj0kcGFnZV9hbGlhc30ifTwvY29kZT48L2xpPg0KICAgICAgPC9vbD4NCiAgICA8L2Rpdj4NCiAgPC9saT4NCiAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dF9pc2JvdH0gPHNwYW4gY2xhc3M9InNtYWxsIj5XaGV0aGVyIHRoZSB1c2VyIGFnZW50IG9mIHRoZSByZXF1ZXN0IGhhcyBiZWVuIGlkZW50aWZpZWQgdG8gYmUgYSByb2JvdDwvc3Bhbj48L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD5UaGlzIHBsdWdpbiByZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHVzZXIgYWdlbnQgb2YgdGhlIHJlcXVlc3QgaGFzIGJlZW4gaWRlbnRpZmllZCB0byBiZSBhIHJvYm90LjwvcD4NCiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+PGI+YXNzaWduPC9iPiAtIChzdHJpbmcpIC0gQXNzaWduIHRoZSBvdXRwdXQgb2YgdGhpcyBwbHVnaW4gdG8gdGhlIG5hbWVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPg0KICAgICAgPC91bD4NCiAgICAgIDxwPlVzYWdlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JmxicmFjZTt4dF9pc2JvdCBhc3NpZ249J2lzYm90J30mbGJyYWNlO2lmICRpc2JvdH0mbHQ7aDMmZ3Q7WW91IGFyZSBhIGJvdCZsdDsvaDMmZ3Q7JmxicmFjZTsvaWZ9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfaXNfc21hcnRwaG9uZX0gPHNwYW4gY2xhc3M9InNtYWxsIj5XaGV0aGVyIHRoZSByZXF1ZXN0IGlzIGZyb20gYSBzbWFydHBob25lPC9zcGFuPjwvaDM+DQogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4NCiAgICAgIDxwPlRoaXMgcGx1Z2luIGRldGVybWluZXMgd2hldGhlciB0aGUgcmVxdWVzdCBpcyBmcm9tIGEgc21hcnRwaG9uZSBzdWNoIGFzIGFuIGlwaG9uZSBvciBhbmRyb2lkLjxwPg0KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgICA8dWw+DQogICAgICAgIDxsaT48Yj5hc3NpZ248L2I+IC0gKHN0cmluZykgLSBBc3NpZ24gdGhlIG91dHB1dCBvZiB0aGlzIHBsdWdpbiB0byB0aGUgbmFtZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+DQogICAgICA8L3VsPg0KICAgICAgPHA+VXNhZ2U6PC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mbGJyYWNlO3h0X2lzX3NtYXJ0cGhvbmUgYXNzaWduPSdpc3Bob25lJ30mbGJyYWNlO2lmICEkaXNwaG9uZX0mbGJyYWNlOyogZGlzcGxheSBtb3JlIHN0dWZmICp9JmxicmFjZTsvaWZ9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfZ2V0YnJvd3Nlcn0gPHNwYW4gY2xhc3M9InNtYWxsIj5SZXR1cm5zIGEgc2hvcnQgc3RyaW5nIGluZGljYXRpbmcgdGhlIGJyb3dzZXIgdHlwZTwvc3Bhbj48L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD5UaGlzIHBsdWdpbiByZXR1cm5zIGEgc2hvcnQgc3RyaW5nIGluZGljYXRpbmcgdGhlIGJyb3dzZXIgdHlwZS48L3A+DQogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPjxiPmFzc2lnbjwvYj4gLSAoc3RyaW5nKSAtIEFzc2lnbiB0aGUgb3V0cHV0IG9mIHRoaXMgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4NCiAgICAgIDwvdWw+DQogICAgICA8cD5Vc2FnZTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiZsYnJhY2U7eHRfZ2V0YnJvd3NlciBhc3NpZ249J2Jyb3dzZXInfSZsYnJhY2U7aWYgJGJyb3dzZXIgPT0gJ2Nocm9tZSd9JmxicmFjZTsqIGRpc3BsYXkgbW9yZSBzdHVmZiAqfSZsYnJhY2U7L2lmfTwvcHJlPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X2lzYW5kcm9pZH0gPHNwYW4gY2xhc3M9InNtYWxsIj5XaGV0aGVyIHRoZSBjdXJyZW50IHJlcXVlc3Qgd2FzIG1hZGUgZnJvbSBhbiBhbmRyb2lkIHBsYXRmb3JtPC9zcGFuPjwvaDM+DQogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4NCiAgICAgIDxwPlRoaXMgcGx1Z2luIHJldHVybnMgd2hldGhlciB0aGUgY3VycmVudCByZXF1ZXN0IHdhcyBtYWRlIGZyb20gYW4gYW5kcm9pZCBwbGF0Zm9ybSBvciBub3QuPC9wPg0KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgICA8dWw+DQogICAgICAgIDxsaT48Yj5hc3NpZ248L2I+IC0gKHN0cmluZykgLSBBc3NpZ24gdGhlIG91dHB1dCBvZiB0aGlzIHBsdWdpbiB0byB0aGUgbmFtZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+DQogICAgICA8L3VsPg0KICAgICAgPHA+VXNhZ2U6PC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mbGJyYWNlO3h0X2lzYW5kcm9pZCBhc3NpZ249J2FuZHJvaWQnfSZsYnJhY2U7aWYgJGFuZHJvaWR9Jmx0O2gzIHN0eWxlPSJjb2xvcjogZ3JlZW47IiZndDtXb290ISEhJmx0Oy9oMyZndDsmbGJyYWNlOy9pZn08L3ByZT4NCiAgICA8L2Rpdj4NCiAgPC9saT4NCiAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dF9pc2lvc30gPHNwYW4gY2xhc3M9InNtYWxsIj5XaGV0aGVyIHRoZSBjdXJyZW50IHJlcXVlc3Qgd2FzIG1hZGUgZnJvbSBhbiBpb3MgcGxhdGZvcm08L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+VGhpcyBwbHVnaW4gcmV0dXJucyB3aGV0aGVyIHRoZSBjdXJyZW50IHJlcXVlc3Qgd2FzIG1hZGUgZnJvbSBhbiBpb3MgcGxhdGZvcm0gb3Igbm90LjwvcD4NCiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+PGI+YXNzaWduPC9iPiAtIChzdHJpbmcpIC0gQXNzaWduIHRoZSBvdXRwdXQgb2YgdGhpcyBwbHVnaW4gdG8gdGhlIG5hbWVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPg0KICAgICAgPC91bD4NCiAgICAgIDxwPlVzYWdlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JmxicmFjZTt4dF9pc2lvcyBhc3NpZ249J2lvcyd9JmxicmFjZTtpZiAkaW9zfSZsdDtoMyBzdHlsZT0iY29sb3I6IG9yYW5nZTsiJmd0O05vdGU6IFBXQXMgaGF2ZSBwcm9ibGVtcyEhISZsdDsvaDMmZ3Q7JmxicmFjZTsvaWZ9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfaXNpZX0gPHNwYW4gY2xhc3M9InNtYWxsIj53aGV0aGVyIHRoZSBjdXJyZW50IHJlcXVlc3Qgd2FzIG1hZGUgYnkgSW50ZXJuZXQgRXhwbG9kZXI8L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+VGhpcyBwbHVnaW4gcmV0dXJucyB3aGV0aGVyIHRoZSBjdXJyZW50IHJlcXVlc3Qgd2FzIG1hZGUgYnkgSW50ZXJuZXQgRXhwbG9kZXIuIEl0IHJldHVybnMgMCBvciAxLjwvcD4NCiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+PGI+YXNzaWduPC9iPiAtIChzdHJpbmcpIC0gQXNzaWduIHRoZSBvdXRwdXQgb2YgdGhpcyBwbHVnaW4gdG8gdGhlIG5hbWVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPg0KICAgICAgPC91bD4NCiAgICAgIDxwPlVzYWdlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JmxicmFjZTt4dF9pc2llIGFzc2lnbj0naWUnfSZsYnJhY2U7aWYgJGllfSZsdDtoMyBzdHlsZT0iY29sb3I6IHJlZDsiJmd0O2J1bW1lciEhISZsdDsvaDMmZ3Q7JmxicmFjZTsvaWZ9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfc3RhdGVfb3B0aW9uc30gPHNwYW4gY2xhc3M9InNtYWxsIj5PdXRwdXQgYSBzZXQgb2YgJmx0O29wdGlvbiZndDsgdGFncyBmb3IgVVMvQ2FuYWRhIHN0YXRlczwvc3Bhbj48L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD5PdXRwdXQgYSBzZXQgb2YgJmx0O29wdGlvbiZndDsgdGFncyBmb3Igc3RhdGVzLiAgVGhlIHZhbHVlcyBhcmUgVVMvQ2FuYWRhIFN0YXRlL1Byb3ZpbmNlIGFiYnJldmlhdGlvbnMsIHRoZSBsYWJlbHMgYXJlIHRoZSBmdWxsIGxlbmd0aCBuYW1lcyBpbiBFbmdsaXNoLiAgVGhpcyBtZXRob2QgcmVhZHMgdGhlIGRlZmluZWQgc3RhdGUgbGlzdCBhcyBkZWZpbmVkIGluIHRoZSBkYXRhYmFzZS48L3A+DQogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPjxiPnNlbGVjdGVkPC9iPiAtIChzdHJpbmcpIC0gSW5kaWNhdGVzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgb3B0aW9uLiAgU2hvdWxkIGJlIGEgc3RhdGUgb3IgcHJvdmluY2UgYWJicmV2aWF0aW9uLjwvbGk+DQogICAgICAgIDxsaT48Yj5zZWxlY3RvbmU8L2I+IC0gKHN0cmluZykgLSBBZGRzIGFuIG9wdGlvbiB0byB0aGUgdG9wIG9mIHRoZSBkcm9wZG93biBpbmRpY2F0aW5nIHRoYXQgbm8gdmFsdWUgaGFzIGJlZW4gc2VsZWN0ZWQuPC9saT4NCiAgICAgIDwvdWw+DQogICAgICA8cD5Vc2FnZTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiZsdDtzZWxlY3QgbmFtZT0ic3RhdGUiJmd0OyZsYnJhY2U7eHRfc3RhdGVfb3B0aW9ucyBzZWxlY3RlZD0kbXlzdGF0ZX0mbHQ7L3NlbGVjdCZndDs8L3ByZT4NCiAgICA8L2Rpdj4NCiAgPC9saT4NCiAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dF9jb3VudHJ5X29wdGlvbnN9IDxzcGFuIGNsYXNzPSJzbWFsbCI+T3V0cHV0IGEgc2V0IG9mICZsdDtvcHRpb25zJmd0OyB0YWdzIGZvciBjb3VudHJpZXM8L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+T3V0cHV0IGEgc2V0IG9mICZsdDtvcHRpb25zJmd0OyB0YWdzIGZvciBjb3VudHJpZXMuICBUaGUgdmFsdWVzIGFyZSBhcHByb3ZlZCBjb3VudHJ5IGNvZGVzLCB0aGUgbGFiZWxzIGFyZSB0aGUgZnVsbCBsZW5ndGggbmFtZXMgKGluIGVuZ2xpc2gpLiAgVGhpcyBtZXRob2QgcmVhZHMgdGhlIGNvdW50cnkgbGlzdCBhcyBkZWZpbmVkIGluIHRoZSBkYXRhYmFzZSwgYW5kIHRha2VzIGludG8gYWNjb3VudCB0aGUgcHJpb3JpdHkgY291bnRyaWVzIGFzIGRlZmluZWQgaW4gdGhlIENNU01TRXh0IGFkbWluIGNvbnNvbGUuPC9wPg0KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgICA8dWw+DQogICAgICAgIDxsaT48Yj5zZWxlY3RlZDwvYj4gLSAoc3RyaW5nKSAtIEluZGljYXRlcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9wdGlvbi4gIFNob3VsZCBiZSBhIGNvdW50cnkgYWJicmV2aWF0aW9uLjwvbGk+DQogICAgICAgIDxsaT48Yj5zZWxlY3RvbmU8L2I+IC0gKHN0cmluZykgLSBBZGRzIGFuIG9wdGlvbiB0byB0aGUgdG9wIG9mIHRoZSBkcm9wZG93biBpbmRpY2F0aW5nIHRoYXQgbm8gdmFsdWUgaGFzIGJlZW4gc2VsZWN0ZWQuPC9saT4NCiAgICAgIDwvdWw+DQogICAgICA8cD5Vc2FnZTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiZsdDtzZWxlY3QgbmFtZT0ic3RhdGUiJmd0OyZsYnJhY2U7eHRfY291bnRyeV9vcHRpb25zIHNlbGVjdGVkPSRteXN0YXRlfSZsdDsvc2VsZWN0Jmd0OzwvcHJlPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO2dldF9jdXJyZW50X3VybH0gPHNwYW4gY2xhc3M9InNtYWxsIj5SZXR1cm4gdGhlIGN1cnJlbnQgcmVxdWVzdCB1cmw8L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+UmV0dXJuIHRoZSBjdXJyZW50IHJlcXVlc3QgdXJsICh3aXRob3V0IGZyYWdtZW50LCBvciBxdWVyeSBhcmd1bWVudHMpLiAgVGhpcyBwbHVnaW4gaXMgdXNlZnVsIHRvIGJ1aWxkIGZvcm0gb3IgYW5jaG9yIGxpbmtzIG9yIGZvciBhbnkgb3RoZXIgdGFnIHRoYXQgcmVxdWlyZXMga25vd2luZyB0aGUgY3VycmVudCBwYWdlIFVSTC48L3A+DQogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPjxiPmFzc2lnbjwvYj4gLSAoc3RyaW5nKSAtIEFzc2lnbiB0aGUgb3V0cHV0IG9mIHRoaXMgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4NCiAgICAgIDwvdWw+DQogICAgICA8cD5Vc2FnZTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiZsdDthIGhyZWY9IiZsYnJhY2U7Z2V0X2N1cnJlbnRfdXJsfSNhbmNob3IiJmd0O0dvIHRvIEFuY2hvciZsdDsvYSZndDs8L3ByZT4NCiAgICA8L2Rpdj4NCiAgPC9saT4NCiAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dF9zZXRsaXN0fSA8c3BhbiBjbGFzcz0ic21hbGwiPiA8c3BhbiBzdHlsZT0iY29sb3I6b3JhbmdlIj4oZGVwcmVjYXRlZCk8L3NwYW4+PC9zcGFuPjwvaDM+DQogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4NCiAgICAgIDxwIHN0eWxlPSJjb2xvcjogcmVkOyI+RGVwcmVjYXRlZC4uLiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYXZhaWxhYmxlIG5hdGl2ZWx5IGluIFNtYXJ0eSBub3cuPC9wPg0KICAgICAgPHA+QWxsb3dzIGFkZGluZyBpdGVtcyB0byBmbGF0IHNtYXJ0eSBhcnJheXMuIFRoaXMgcGx1Z2luIHJldHVybnMgbm8gb3V0cHV0PC9wPg0KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgICA8dWw+DQogICAgICAgIDxsaT48Yj5uYW1lPC9iPiAtIFRoZSBuYW1lIG9mIHRoZSBzbWFydHkgYXJyYXkuPC9saT4NCiAgICAgICAgPGxpPjxiPmtleTwvYj4gLSBUaGUgYXJyYXkga2V5LjwvbGk+DQogICAgICAgIDxsaT48Yj52YWx1ZTwvYj4gLSBUaGUgYXJyYXkgdmFsdWUuPC9saT4NCiAgICAgIDwvdWw+DQogICAgICA8cD5Vc2FnZTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiZsYnJhY2U7eHRfc2V0bGlzdCBuYW1lPWl0ZW1zIGtleT1pdGVtMSB2YWx1ZT0ndmFsdWUxJ308L3ByZT4NCiAgICA8L2Rpdj4NCiAgPC9saT4NCiAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dF91bnNldGxpc3R9IDxzcGFuIGNsYXNzPSJzbWFsbCI+IDxzcGFuIHN0eWxlPSJjb2xvcjpvcmFuZ2UiPihkZXByZWNhdGVkKTwvc3Bhbj48L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHAgc3R5bGU9ImNvbG9yOiByZWQ7Ij5EZXByZWNhdGVkLi4uIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBhdmFpbGFibGUgbmF0aXZlbHkgaW4gU21hcnR5IG5vdy48L3A+DQogICAgICA8cD5SZW1vdmluZyBpdGVtcyBmcm9tIGZsYXQgc21hcnR5IGFycmF5cy4gVGhpcyBwbHVnaW4gcmV0dXJucyBubyBvdXRwdXQ8L3A+DQogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPjxiPm5hbWU8L2I+IC0gVGhlIG5hbWUgb2YgdGhlIHNtYXJ0eSBhcnJheS48L2xpPg0KICAgICAgICA8bGk+PGI+a2V5PC9iPiAtIFRoZSBhcnJheSBrZXkuPC9saT4NCiAgICAgIDwvdWw+DQogICAgICA8cD5Vc2FnZTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiZsYnJhY2U7eHRfdW5zZXRsaXN0IG5hbWU9aXRlbXMga2V5PWl0ZW0xfTwvcHJlPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X3llc25vX29wdGlvbnN9IDxzcGFuIGNsYXNzPSJzbWFsbCI+RHJvcGRvd24gbGlzdCB0aGF0IGFsbG93cyBzZWxlY3RpbmcgdHdvIG9wdGlvbnM8L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+T3V0cHV0IG9wdGlvbnMgZm9yIGEgZHJvcGRvd24gbGlzdCB0aGF0IGFsbG93cyBzZWxlY3RpbmcgdHdvIG9wdGlvbnMsICZxdW90O1llcyZxdW90OyBvciAmcXVvdDtObyZxdW90Oy4gIFRoaXMgcGx1Z2luIHdpbGwgb3V0cHV0IHRoZSAmbHQ7b3B0aW9uJmd0OyB0YWdzIHVzaW5nIGxvY2FsaXplZCBzdHJpbmdzIGZvciB0aGUgbGFiZWxzLCBhbmQgaW50ZWdlcnMgZm9yIHRoZSB2YWx1ZXMuPC9wPg0KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgICA8dWw+DQogICAgICAgIDxsaT48Yj5wcmVmaXg8L2I+IC0gKHN0cmluZykgQSBwcmVmaXggdG8gcGxhY2UgYmVmb3JlIHRoZSBuYW1lIGF0dHJpYnV0ZSBvbiB0aGUgdGFnLiAgaS5lOiBwcmVmaXg9JGFjdGlvbmlkPC9saT4NCiAgICAgICAgPGxpPjxiPm5hbWU8L2I+IC0gKHN0cmluZykgQSBuYW1lIGZvciB0aGUgc2VsZWN0IGxpc3QsIGlmIHRoaXMgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCB0aGUgc3lzdGVtIHdpbGwgZ2VuZXJhdGUgYSBjb21wbGV0ZSAmbHQ7c2VsZWN0Jmd0OyB0YWcuICBPdGhlcndpc2UsIG9ubHkgJmx0O29wdGlvbiZndDsgdGFncyB3aWxsIGJlIGdlbmVyYXRlZC48L2xpPg0KICAgICAgICA8bGk+PGI+aWQ8L2I+IC0gKHN0cmluZykgQW4gaWQgYXR0cmlidXRlIGZvciB0aGUgc2VsZWN0IGxpc3QuICBPbmx5IHVzZWZ1bCBpZiB0aGUgbmFtZSBpcyBhbHNvIHNwZWNpZmllZC48L2xpPg0KICAgICAgICA8bGk+PGI+Y2xhc3M8L2I+IC0gKHN0cmluZykgQSBjbGFzcyBhdHRyaWJ1dGUgZm9yIHRoZSBzZWxlY3QgbGlzdC4gIE9ubHkgdXNlZnVsIGlmIHRoZSBuYW1lIGlzIGFsc28gc3BlY2lmaWVkLjwvbGk+DQogICAgICAgIDxsaT48Yj5zZWxlY3RlZDwvYj4gLSAoc3RyaW5nKSBUaGUgdmFsdWUgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBlbGVtZW50IChlaXRoZXIgMCBvciAxKTwvbGk+DQogICAgICAgIDxsaT48Yj5hc3NpZ248L2I+IC0gKHN0cmluZykgQXNzaWduIHRoZSBvdXRwdXQgaHRtbCBjb2RlIHRvIGEgbmV3bHkgZ2VuZXJhdGVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPg0KICAgICAgPC91bD4NCiAgICAgIDxwPlVzYWdlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JmxicmFjZTt4dF95ZXNub19vcHRpb25zIG5hbWU9ZmxhZyBzZWxlY3RlZD0kbXlmbGFnfTwvcHJlPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X2hhdmVfbW9kdWxlfSA8c3BhbiBjbGFzcz0ic21hbGwiPklzIHRoZSBzcGVjaWZpZWQgbW9kdWxlIGlzIGluc3RhbGxlZCBhbmQgcmVhZHkgdG8gdXNlPC9zcGFuPjwvaDM+DQogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4NCiAgICAgIDxwPk91dHB1dCBhIGJvb2xlYW4gKDAgb3IgMSkgdmFsdWUgaWYgdGhlIHNwZWNpZmllZCBtb2R1bGUgaXMgaW5zdGFsbGVkIGFuZCByZWFkeSB0byB1c2UuPC9wPg0KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgICA8dWw+DQogICAgICAgIDxsaT48Yj5tPC9iPnw8Yj5tb2Q8L2I+fDxiPm1vZHVsZTwvYj4gLSAoc3RyaW5nKSBTcGVjaWZ5IHRoZSBtb2R1bGUgbmFtZTwvbGk+DQogICAgICAgIDxsaT48Yj5hc3NpZ248L2I+IC0gKHN0cmluZykgQXNzaWduIHRoZSBvdXRwdXQgaHRtbCBjb2RlIHRvIGEgbmV3bHkgZ2VuZXJhdGVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPg0KICAgICAgPC91bD4NCiAgICAgIDxwPlVzYWdlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JmxicmFjZTt4dF9oYXZlX21vZHVsZSBtb2R1bGU9J0NhcnQyJyBhc3NpZ249J2NhcnQyJ30mbGJyYWNlO2lmICRoYXZlX2NhcnQyfSZsYnJhY2U7Q2FydDJ9JmxicmFjZTsvaWZ9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfaW1hZ2V9IDxzcGFuIGNsYXNzPSJzbWFsbCI+T3V0cHV0IGFuIGltYWdlIHRhZyAgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZWVuIj4obmV3KTwvc3Bhbj48L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+PHNwYW4gc3R5bGU9ImNvbG9yOmdyZWVuIj4obmV3KSBhbGlhcyBvZiB4dGltYWdlIGZvciBjb25zaXN0ZW5jeS4gPC9zcGFuPg0KICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOm9yYW5nZSI+eHRpbWFnZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuPC9zcGFuPjwvcD4NCiAgICAgIDxjb2RlPiZsYnJhY2U7eHRfaW1hZ2UgaW1hZ2U9c3RyaW5nIFthbHQ9c3RyaW5nXSBbY2xhc3M9c3RyaW5nXSBbd2lkdGg9aW50XSBbaGVpZ2h0PWludF0gW2Fzc2lnbj1zdHJpbmddfSA8L2NvZGU+DQogICAgICA8cD5PdXRwdXQgYW4gaW1hZ2UgdGFnLCBUaGlzIHBsdWdpbiBpcyB0eXBpY2FsbHkgdXNlZCBpbiBhZG1pbiB0ZW1wbGF0ZXMsIGFzIGl0IGF1dG9tYXRpY2FsbHkgc2VhcmNoZXMgaW4gdGhlIGFkbWluIHRoZW1lLCBhbmQgaW4gcmVnaXN0ZXJlZCBpY29uIGRpcmVjdG9yaWVzLjwvcD4NCiAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+PGI+aW1hZ2U8L2I+IC0gVGhlIGZpbGVuYW1lIG9mIHRoZSBpbWFnZS4gIFlvdSBtYXkgc3BlY2lmeSBhIGZpbGVuYW1lLCBvciBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIGFkbWluIHRoZW1lJnF1b3Q7cyBpbWFnZXMgZGlyZWN0b3J5LjwvbGk+DQogICAgICAgIDxsaT48Yj5hbHQ8L2I+IC0gU3BlY2lmeSBhbHQgdGV4dCBmb3IgdGhlIGltYWdlLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlIHZhbHVlIG9mIHRoZSBpbWFnZSBwYXJhbWV0ZXIgd2lsbCBiZSB1c2VkLjwvbGk+DQogICAgICAgIDxsaT48Yj5jbGFzczwvYj4gLSBTcGVjaWZ5IGEgY2xhc3MgZm9yIHRoZSBpbWFnZSB0YWcuPC9saT4NCiAgICAgICAgPGxpPjxiPndpZHRoPC9iPiAtIFNwZWNpZnkgYW4gaW50ZWdlciB3aWR0aCBmb3IgdGhlIGltYWdlIHRhZy48L2xpPg0KICAgICAgICA8bGk+PGI+aGVpZ2h0PC9iPiAtIFNwZWNpZnkgYW4gaW50ZWdlciBoZWlnaHQgZm9yIHRoZSBpbWFnZSB0YWcuPC9saT4NCiAgICAgICAgPGxpPjxiPmFzc2lnbjwvYj4gLSBBc3NpZ24gdGhlIG91dHB1dCBodG1sIGNvZGUgdG8gYSBuZXdseSBnZW5lcmF0ZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+DQogICAgICA8L3VsPg0KICAgICAgPHA+VXNhZ2U6PC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICZsYnJhY2U7eHRfaW1hZ2UgaW1hZ2U9J2ljb25zL3N5c3RlbS9uZXdvYmplY3QuZ2lmJyBhbHQ9J0NyZWF0ZSBuZXcgaXRlbSd9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7Li4ufHJmY19kYXRlfSA8c3BhbiBjbGFzcz0ic21hbGwiPkZvcm1hdCB0aW1lIHN0cmluZ3MgY29uc2lzdGVudCB3aXRoIFJGQzwvc3Bhbj48L2gzPg0KICAgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4gLSA8ZW0+bW9kaWZpZXI8L2VtPg0KICAgICAgPHA+Rm9ybWF0IGEgc3VwcGxpZWQgdGltZSBpbiBhbiBSRkMgY29uc2lzdGVudCBtYW5uZXIuICBUaGlzIG1vZGlmaWVyIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgd2hlbiBnZW5lcmF0aW5nIFJTUyBmZWVkcy48L3A+DQogICAgICA8cD5Vc2FnZTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiZsYnJhY2U7JHNtYXJ0eS5ub3d8cmZjX2RhdGV9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7anNtaW59Li4uJmxicmFjZTsvanNtaW59IDxzcGFuIGNsYXNzPSJzbWFsbCI+amF2YXNjcmlwdCBtaW5pZmllcjwvc3Bhbj48L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD5QYXNzIGNvbnRlbnQgdGhyb3VnaCB0aGUgamF2YXNjcmlwdCBtaW5pZmllci48L3A+DQogICAgICA8cD5Vc2FnZTo8L3A+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJmxicmFjZTtqc21pbn0NCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpJmxicmFjZTsNCiAgICAgICQoZG9jdW1lbnQpLnRvb2x0aXAoKTsNCiAgICB9KQ0KICAgICZsYnJhY2U7L2pzbWlufTwvcHJlPg0KICAgICAgPHA+Tm90ZTogWW91IG11c3Qgc3BlY2lmeSB0aGUgYXBwcm9wcmlhdGUgJmxicmFjZTtsaXRlcmFsfSwmbGJyYWNlOy9saXRlcmFsfSwmbGJyYWNlO2xkZWxpbXwsIGFuZCAmbGJyYWNlO3JkZWxpbX0gaW5zaWRlIHRoZSBibG9jayB0byBhbGxvdyBzbWFydHkgdG8gcHJvY2VzcyBvciBpZ25vcmUgdGhlIGNvZGUuPC9wPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X3RleHRhcmVhfSA8c3BhbiBjbGFzcz0ic21hbGwiPlRleHQgYXJlYSB0YWcgd2l0aCBzdXBwb3J0IGZvciBXWVNJV1lHIG9yIHN5bnRheCBoaWdobGlnaHRlcjwvc3Bhbj48L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cD5DcmVhdGUgYSB0ZXh0IGFyZWEgdGFnLCB3aXRoIG9wdGlvbmFsIHN1cHBvcnQgZm9yIFdZU0lXWUcgZWRpdG9yIG9yIHN5bnRheCBoaWdobGlnaHRlci4gIFRoaXMgdGFnIGlzIHR5cGljYWxseSB1c2VkIGluIGFkbWluIHRlbXBsYXRlcyB0byBjcmVhdGUgdGV4dCBhcmVhcy48L3A+DQogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4NCiAgICAgICAgPHVsPg0KICAgICAgICAgIDxsaT48Yj5wcmVmaXg8L2I+IC0gKHN0cmluZykgQSBzdHJpbmcgdG8gcHJlZml4IHRoZSB0ZXh0YXJlYSBlbGVtZW50IG5hbWUuICBpLmU6ICZsYnJhY2U7JGFjdGlvbmlkfTwvbGk+DQogICAgICAgICAgPGxpPjxiPm5hbWU8L2I+IC0gKHN0cmluZywgPHN0cm9uZz5yZXF1aXJlZDwvc3Ryb25nPikgVGhlIGVsZW1lbnQgbmFtZS48L2xpPg0KICAgICAgICAgIDxsaT48Yj53eXNpd3lnPC9iPiAtIChib29sKSBJbmRpY2F0ZXMgd2hldGhlciBhIFdZU0lXWUcgc2hvdWxkIGJlIGFwcGxpZWQgKHRoZSBhY3R1YWwgV1lTSVdZRyB0aGF0IGlzIHVzZWQgZGVwZW5kcyBvbiBDTVNNUyBzaXRlIHByZWZlcmVuY2VzIGFuZCB1c2VyIHByZWZlcmVuY2VzLjwvbGk+DQogICAgICAgICAgPGxpPjxiPnN5bnRheDwvYj4gLSAoYm9vbCkgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByZWZlcnJlZCBzeW50YXggaGlnaGxpZ2h0ZXIgKGlmIGFueSBhcmUgYXZhaWxhYmxlIGFuZCBzZWxlY3RlZCkgc2hvdWxkIGJlIGFwcGxpZWQuIElmIGJvdGggV1lTSVdZRyBhbmQgc3ludGF4IGFyZSB0cnVlLCB0aGVuIHd5c2l3eWcgaXMgcHJlZmVycmVkLiAgTm8gY2hlY2sgaXMgZG9uZSB0byBzZWUgaWYgYSBXWVNJV1lHIG1vZHVsZSBpcyBhY3R1YWxseSBhdmFpbGFibGUuICBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIHdoZW4gdGhpcyB0YWcgaXMgdXNlZCBmb3IgZnJvbnRlbmQgcmVxdWVzdHMuPC9saT4NCiAgICAgICAgICA8bGk+PGI+Y29udGVudDwvYj4gLSAoc3RyaW5nKSApVGhlIGNvbnRlbnQgZm9yIHRoZSB0ZXh0IGFyZWEuPC9saT4NCiAgICAgICAgICA8bGk+PGI+Y2xhc3M8L2I+IC0gKHN0cmluZykgQW4gb3B0aW9uYWwgY2xhc3MgdG8gc3VwcGx5IHRvIHRoZSB0ZXh0IGFyZWEgdGFnLjwvbGk+DQogICAgICAgICAgPGxpPjxiPmlkPC9iPiAtIChzdHJpbmcpIEFuIG9wdGlvbmFsIGlkIGF0dHJpYnV0ZSBmb3IgdGhlIHRleHQgYXJlYSB0YWcuPC9saT4NCiAgICAgICAgICA8bGk+PGI+cm93czwvYj4gLSAoaW50KSBBbiBvcHRpb25hbCByb3dzIGF0dHJpYnV0ZSBmb3IgdGhlIHRleHQgYXJlYSB0YWcuPC9saT4NCiAgICAgICAgICA8bGk+PGI+Y29sczwvYj4gLSAoaW50KSBBbiBvcHRpb25hbCBjb2xzIGF0dHJpYnV0ZSBmb3IgdGhlIHRleHQgYXJlYSB0YWcuPC9saT4NCiAgICAgICAgICA8bGk+PGI+YXNzaWduPC9iPiAtIChpbnQpIEFzc2lnbiB0aGUgb3V0cHV0IGh0bWwgY29kZSB0byBhIG5ld2x5IGdlbmVyYXRlZCBzbWFydHkgdmFyaWFibGUuPC9saT4NCiAgICAgICAgPC91bD4NCiAgICAgIDxwPlVzYWdlOjwvcD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JmxicmFjZTt4dF90ZXh0YXJlYSBwcmVmaXg9JGFjdGlvbmlkIG5hbWU9ZGVzY3JpcHRpb24gY29udGVudD0kZGVzY3JpcHRpb24gd3lzaXd5Zz0xfTwvcHJlPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X3N0cl90b19hc3NvY30gPHNwYW4gY2xhc3M9InNtYWxsIj4gPHNwYW4gc3R5bGU9ImNvbG9yOm9yYW5nZSI+KGRlcHJlY2F0ZWQpPC9zcGFuPjwvc3Bhbj48L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICA8cCBzdHlsZT0iY29sb3I6IHJlZDsiPkRlcHJlY2F0ZWQ8L3A+DQogICAgICA8cD5Db252ZXJ0IGEgVVJMIHBhcmFtZXRlciB0eXBlIHN0cmluZyB0byBhbiBhc3NvY2lhdGl2ZSBhcnJheS48L3A+DQogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4NCiAgICAgICAgPHVsPg0KICAgICAgICAgIDxsaT48Yj5pbnB1dDwvYj4gLSAoc3RyaW5nLDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz4gVGhlIGlucHV0IHN0cmluZzwvbGk+DQogICAgICAgICAgPGxpPjxiPmRlbGltMTwvYj4gLSAoc3RyaW5nKSApRGVsaW1pdGVyIGZvciBzZXBhcmF0aW5nIHRoZSBzdHJpbmcgaW50byBhIGxpc3Qgb2YgdmFyaWFibGVzLiAgRGVmYXVsdHMgdG8gJnF1b3Q7LCZxdW90OzwvbGk+DQogICAgICAgICAgPGxpPjxiPmRlbGltMjwvYj4gLSAoc3RyaW5nKSBEZWxpbWl0ZXIgZm9yIHNlcGFyYXRpbmcgdmFyaWFibGUgaW50byBhIHZhcmlhYmxlIG5hbWUgYW5kIHZhbHVlLiAgRGVmYXVsdHMgdG8gJnF1b3Q7PSZxdW90OzwvbGk+DQogICAgICAgICAgPGxpPjxiPmFzc2lnbjwvYj4gLSAoc3RyaW5nKSBBc3NpZ24gdGhlIG91dHB1dCBodG1sIGNvZGUgdG8gYSBuZXdseSBnZW5lcmF0ZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+DQogICAgICAgIDwvdWw+DQogICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiZsYnJhY2U7eHRfc3RyX3RvX2Fzc29jIGlucHV0PSZxdW90O3ZhcjE9dmFsMSx2YXIyPXZhbDIsdmFyMz12YWwzJnF1b3Q7IGFzc2lnbj0mcXVvdDt0bXAmcXVvdDt9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfd3lzaXd5Z30gPHNwYW4gY2xhc3M9InNtYWxsIj4gLi4uLiA8L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+QW4gYWxpYXMgZm9yIHRoZSAmbGJyYWNlO3h0X3RleHRhcmVhfSBwbHVnaW4uPC9wPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X2NhY2hlfS4uLiZsYnJhY2U7L3h0X2NhY2hlfSA8c3BhbiBjbGFzcz0ic21hbGwiPiA8c3BhbiBzdHlsZT0iY29sb3I6b3JhbmdlIj4oZGVwcmVjYXRlZDogc2VlICZsYnJhY2U7eHRfY2FjaGVfYmxvY2t9KTwvc3Bhbj48L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgIDxwIHN0eWxlPSJjb2xvcjogcmVkOyI+RGVwcmVjYXRlZC4uLiBTZWUgdGhlICZsYnJhY2U7eHRfY2FjaGVfYmxvY2t9IHBsdWdpbiBpbnN0ZWFkLjwvcD4NCiAgICA8cD5UaGlzIGNvbXBpbGVyIHBsdWdpbiBhbGxvd3MgY2FjaGluZyBIVE1MIG91dHB1dCBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgYmxvY2tzIGZvciBwZXJmb3JtYW5jZS4gQnkgZGVmYXVsdCwgY29udGVudCBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIHRhZ3MgaXMgY2FjaGVkIHRvIGZpbGVzIGluIHRoZSB0bXAvY2FjaGUgZGlyZWN0b3J5IGZvciBhIHBlcmlvZCBvZiBmaXZlIG1pbnV0ZXMuICBMYXRlciB2ZXJzaW9ucyBvZiB0aGlzIHBsdWdpbiB3aWxsIGFsbG93IGV4dGVuZGluZyB0aGUgY2FjaGUgbGlmZXRpbWUuPC9wPg0KICAgIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhpcyBpcyBub3QgdGVjaG5pY2FsbHkgYSBibG9jayBwbHVnaW4sIGJ1dCBkb2VzIGJlaGF2ZSBsaWtlIG9uZS48L3A+DQogICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGlzIGlzIGFuIGFkdmFuY2VkIHBsdWdpbiB0aGF0IGNhbiBkcmFtYXRpY2FsbHkgaW1wcm92ZSB0aGUgYXZlcmFnZSBwZXJmb3JtYW5jZSBvZiB5b3VyIChwcmltYXJpbHkgc3RhdGljKSB3ZWJzaXRlLCB0aG91Z2ggaXQgc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uIGFzIHVzaW5nIGl0IGluY29ycmVjdGx5IGNhbiBjYXVzZSBzdHJhbmdlIGJlaGF2aW91ciBvbiB5b3VyIHNpdGUuICBUaGlzIGZ1bmN0aW9uYWxpdHkgd29ya3MgYmVzdCB3aGVuIHdyYXBwZWQgYXJvdW5kIHNtYXJ0eSB0YWdzIHRoYXQgcXVlcnkgdGhlIGRhdGFiYXNlIGFuZCBnZW5lcmF0ZSBzdGF0aWMgaHRtbCBjb250ZW50LiAgVGhpcyBwbHVnaW4gc2hvdWxkIG5vdCBiZSB1c2VkIGFyb3VuZCBkeW5hbWljIGZ1bmN0aW9uYWxpdHkgb3IgZm9ybXMuPC9wPg0KICAgIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhpcyBwbHVnaW4gdXRpbGl6ZXMgZmlsZSBsb2NraW5nIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiAgVGhpcyBtYXkgcHJlc2VudCBwcm9ibGVtcyBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zLiAgVXNlIHRoaXMgcGx1Z2luIHdpdGggY2F1dGlvbi48L3A+DQogICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgICA8dWw+DQogICAgICAgIDxsaT48Yj5rZXk8L2I+IC0gKHN0cmluZykgQW4gb3B0aW9uYWwgdW5pcXVlIGtleSB0byBpZGVudGlmeSB0aGlzIGNhY2hlIGJsb2NrLiAgTXVzdCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuPC9saT4NCiAgICAgIDwvdWw+DQogICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mbGJyYWNlO3h0X2NhY2hlfSZsYnJhY2U7UHJvZHVjdHN9JmxicmFjZTsveHRfY2FjaGV9PC9wcmU+DQogIDwvZGl2Pg0KICA8L2xpPg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X2NhY2hlX2Jsb2NrfSA8c3BhbiBjbGFzcz0ic21hbGwiPkNhY2hlcyBvdXRwdXQgb2YgdGhlIHNwZWNpZmllZCBibG9jayB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZTwvc3Bhbj48L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICAgPHA+VGhpcyBibG9jayBwbHVnaW4gYWxsb3dzIGNhY2hpbmcgSFRNTCBvdXRwdXQgb2YgdGhlIHNwZWNpZmllZCBibG9jayB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZS4gVGhpcyBwbHVnaW4gaXMgcGFydGljdWxhcmx5IGhhbmR5IGZvciBibG9ja3Mgb2YgSFRNTCB0aGF0IGFyZSBzdGF0aWMgaW4gbmF0dXJlIChkb24ndCBjaGFuZ2Ugb2Z0ZW4pIGJ1dCByZXF1aXJlIHNpZ25pZmljYW50IHNlcnZlciByZXNvdXJjZXMgdG8gZ2VuZXJhdGUuPC9wPg0KICAgICAgIDxwPlRoaXMgYmxvY2sgcGx1Z2luIGNhY2hlcyB0aGUgSFRNTCBvdXRwdXQuICBJdCBpcyBpbnRlbmRlZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLiAgSXQgd2lsbCBub3QgY2hlY2sgaWYgdGhlIGNvbnRlbnQgaW5zaWRlIHRoZSBibG9jayBoYXMgY2hhbmdlZCwgaXQgbWVyZWx5IGNhY2hlcyB0aGUgSFRNTCBmb3IgYSBzcGVjaWZpZWQgYW1vdW50IG9mIHRpbWUgKDEgaG91ciBieSBkZWZhdWx0KS48L3A+DQogICAgICAgPHA+QnkgZGVmYXVsdCwgdGhpcyBwbHVnaW4gYWRkcyBlbnRyb3B5IHRvIHRoZSBrZXkgKGV2ZW4gaWYgaXQgaXMgYXV0byBnZW5lcmF0ZWQpIHRvIGVuc3VyZSB0aGF0IHRoZSBwYXJ0aWN1bGFyIGJsb2NrIGlzIGNhY2hlZCBvbmNlIHBlciBDTVNNUyBwYWdlLiAgVGhpcyBhbGxvd3MgdXNlIG9mICZsYnJhY2U7eHRfY2FjaGVfYmxvY2t9IGFyb3VuZCBuYXZpZ2F0aW9ucyBhbmQgb3RoZXIgYmxvY2tzIG9mIGNvZGUgdGhhdCBjaGFuZ2UgZm9yIGVhY2ggcGFnZSwgYnV0IGZvciB3aGljaCB0aGUgdGVtcGxhdGUgc3ludGF4IGlzIGVudGlyZWx5IHRoZSBzYW1lLjwvcD4NCiAgICAgICA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoaXMgcGx1Z2luIHNob3VsZCBub3QgYmUgdXNlZCBhcm91bmQgZHluYW1pYyBmdW5jdGlvbmFsaXR5LCBvciBmb3Jtcy48L3A+DQogICAgICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGlzIHBsdWdpbiBoYXMgbm8gZWZmZWN0IHdoZW4gbG9nZ2VkIGluIHRvIHRoZSBDTVNNUyBhZG1pbiBjb25zb2xlLiAgRm9yIHRlc3RpbmcsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSBhbiBpbmNvZ25pdG8gb3IgcHJpdmF0ZSB3aW5kb3csIG9yIGEgZGlmZmVyZW50IGJyb3dzZXIuPC9wPg0KICAgICAgIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhpcyBwbHVnaW4gdXRpbGl6ZXMgZmlsZSBsb2NraW5nIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiAgVGhpcyBtYXkgcHJlc2VudCBwcm9ibGVtcyBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zLiAgVXNlIHRoaXMgcGx1Z2luIHdpdGggY2F1dGlvbi48L3A+DQogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4NCiAgICAgICAgPHVsPg0KICAgICAgICAgIDxsaT48Yj5rZXk8L2I+IC0gKHN0cmluZykgQW4gb3B0aW9uYWwgdW5pcXVlIGtleSB0byBpZGVudGlmeSB0aGlzIGNhY2hlIGJsb2NrLiAgTXVzdCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuPC9saT4NCiAgICAgICAgICA8bGk+PGI+ZXhwaXJlczwvYj4gLSAoaW50ZWdlcikgVGhlIGV4cGlyeSB0aW1lIGZvciB0aGlzIGJsb2NrIChpbiBtaW51dGVzKS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEyMCBtaW51dGVzLjwvbGk+DQogICAgICAgICAgPGxpPjxiPmxvd2VudHJvcHk8L2I+IC0gKGJvb2xlYW4pIFByZXZlbnQgYWRkaW5nIGVudHJvcHkgdG8gdGhlIGtleS4gIFRoaXMgYWxsb3dzIHRoZSBzYW1lIGJsb2NrIG9mIEhUTUwgdG8gYmUgY2FjaGVkIGFjcm9zcyBtdWx0aXBsZSBkaWZmZXJlbnQgcGFnZXMuPC9saT4NCiAgICAgICAgPC91bD4NCiAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+JmxicmFjZTt4dF9jYWNoZV9ibG9ja30mbGJyYWNlO1Byb2R1Y3RzfSZsYnJhY2U7L3h0X2NhY2hlX2Jsb2NrfTwvcHJlPg0KICAgICAgPHA+PHN0cm9uZz5UaXA6PC9zdHJvbmc+IE5ldmVyIHBsYWNlIHRoZSAmbGJyYWNlO3h0X2NhY2hlX2Jsb2NrfSB0YWdzIGFyb3VuZCB0aGUgZGVmYXVsdCBjb250ZW50IGJsb2NrLjwvcD4NCiAgICAgIDxwPjxzdHJvbmc+VGlwOjwvc3Ryb25nPiBVc2UgY2F1dGlvbiB3aXRoIHNtYXJ0eSBsb2dpYyBhbmQgdGhlIGFzc2lnbm1lbnQgb2YgdmFyaWFibGVzIHdpdGhpbiAmbGJyYWNlO3h0X2NhY2hlX2Jsb2NrfSBjYWxscy4gIERvIG5vdCBjcmVhdGUgc21hcnR5IHZhcmlhYmxlcyB3aXRoaW4gdGhlIGJsb2NrIHRoYXQgd2lsbCBiZSB1c2VkIG91dHNpZGUuPC9wPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X2Nvb2tpZV9zZXR9IDxzcGFuIGNsYXNzPSJzbWFsbCI+U2F2ZXMgdmFsdWVzIHRvIGNvb2tpZXMgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZWVuIj4obmV3KTwvc3Bhbj48L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+PHNwYW4gY2xhc3M9ImdyZWVuIj5ORVc8L3NwYW4+IFRoaXMgZnVuY3Rpb24gcGx1Z2luIGFsbG93cyBzYXZpbmcgdmFsdWVzIHRvIGNvb2tpZXMgYXMgeW91IHdvdWxkIGluIFBIUC4gSXQgaGFzIGFsbCB0aGUgcGFyYW1ldGVycyB0eXBpY2FsbHkgdXNlZCB3aXRoIFBIUCBmdW5jdGlvbiA8Yj5zZXRjb29raWUoLi4uKTwvYj48L3A+DQogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4NCiAgICAgICAgPHVsPg0KICAgICAgICAgIDxsaT48Yj5uYW1lPC9iPiAtIChzdHJpbmcpIEEgcmVxdWlyZWQgbmFtZSB0byB0aGUgY29va2llLjwvbGk+DQogICAgICAgICAgPGxpPjxiPnZhbHVlPC9iPiAtIChzdHJpbmcpIChvcHRpb25hbCkgQW4gb3B0aW9uYWwgdmFsdWUuPC9saT4NCiAgICAgICAgICA8bGk+PGI+ZXhwaXJlPC9iPiAtIChpbnRlZ2VyKSAob3B0aW9uYWwpIFRoZSB0aW1lIHRoZSBjb29raWUgZXhwaXJlcy4gVGhpcyBpcyBhIFVuaXggdGltZXN0YW1wIHNvIGlzIGluIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaC4gVGhlIGV4cHJlc3Npb24gPGk+dGltZSgpKyg4NjQwMCozMCk8L2k+IGNhbiBiZSB1c2VkIGFzIGFuIGV4YW1wbGUgdG8gY2FsY3VsYXRlIDMwIGRheXMgZnJvbSBjdXJyZW50IHRpbWUuIE9taXNzaW9uIHdpbGwgc2V0IHRoZSBleHBpcnkgdGltZSB0byB0aGUgZW5kIG9mIHRoZSBicm93c2luZyBzZXNzaW9uLjwvbGk+DQogICAgICAgICAgPGxpPjxiPnBhdGg8L2I+IC0gKHN0cmluZykgKG9wdGlvbmFsKSBUaGUgcGF0aCBvbiB0aGUgc2VydmVyIGluIHdoaWNoIHRoZSBjb29raWUgd2lsbCBiZSBhdmFpbGFibGUgb24uIElmIHNldCB0byAnLycsIHRoZSBjb29raWUgd2lsbCBiZSBhdmFpbGFibGUgd2l0aGluIHRoZSBlbnRpcmUgZG9tYWluLjwvbGk+DQogICAgICAgICAgPGxpPjxiPmRvbWFpbjwvYj4gLSAoc3RyaW5nKSAob3B0aW9uYWwpIFRoZSAoc3ViKWRvbWFpbiB0aGF0IHRoZSBjb29raWUgaXMgYXZhaWxhYmxlIHRvLjwvbGk+DQogICAgICAgICAgPGxpPjxiPnNlY3VyZTwvYj4gLSAoYm9vbGVhbikgKG9wdGlvbmFsKSBJbmRpY2F0ZXMgdGhhdCB0aGUgY29va2llIHNob3VsZCBvbmx5IGJlIHRyYW5zbWl0dGVkIG92ZXIgYSBzZWN1cmUgSFRUUFMgY29ubmVjdGlvbiBmcm9tIHRoZSBjbGllbnQuIFdoZW4gc2V0IHRvIHRydWUsIHRoZSBjb29raWUgd2lsbCBvbmx5IGJlIHNldCBpZiBhIHNlY3VyZSBjb25uZWN0aW9uIGV4aXN0cy48L2xpPg0KICAgICAgICAgIDxsaT48Yj5odHRwb25seTwvYj4gLSAoYm9vbGVhbikgKG9wdGlvbmFsKSBXaGVuIHRydWUgdGhlIGNvb2tpZSB3aWxsIGJlIG1hZGUgYWNjZXNzaWJsZSBvbmx5IHRocm91Z2ggdGhlIEhUVFAgcHJvdG9jb2wuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29va2llIHdvbid0IGJlIGFjY2Vzc2libGUgYnkgc2NyaXB0aW5nIGxhbmd1YWdlcywgc3VjaCBhcyBKYXZhU2NyaXB0LjwvbGk+DQogICAgICAgIDwvdWw+DQogICAgICA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IEZvciBtb3JlIGRvY3VtZW50YXRpb24gYW5kIHNwZWNpZmljcyBwbGVhc2UgY29uc3VsdCBQSFAgc2l0ZSBkb2N1bWVudGF0aW9uIGFib3V0IHRoZSA8Yj5zZXRjb29raWUoLi4uKTwvYj4gZnVuY3Rpb24uPC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mbGJyYWNlO3h0X2Nvb2tpZV9zZXQgbmFtZT1teWNvb2tpZSB2YWx1ZT0nY2hvY29sYXRlJ308L3ByZT4NCiAgICA8L2Rpdj4NCiAgPC9saT4NCiAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dF9maWxlX2xpc3R9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UmV0cmlldmUgYSBsaXN0IG9mIGZpbGVzIHRoYXQgbWF0Y2ggYSBjcml0ZXJpYTwvc3Bhbj48L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgICAgPHA+QSBTbWFydHkgcGx1Z2luIHRvIHJldHJpZXZlIGEgbGlzdCBvZiBmaWxlcyB0aGF0IG1hdGNoIGEgY3JpdGVyaWEsIGFuZCBvcHRpb25hbGx5IHRvIGJ1aWxkIGEgbGlzdCBvZiBIVE1MIG9wdGlvbnMgZnJvbSB0aGUgcmVzdWx0cyBmb3IgdXNlIGluIGEgZHJvcGRvd248L3A+DQogICAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgICAgIDx1bD4NCiAgICAgICAgIDxsaT48Yj5kaXI8L2I+IC0gKHN0cmluZykgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSA8ZW0+KHJlbGF0aXZlIHRvIHRoZSB1cGxvYWRzIHBhdGgpPC9lbT4gdG8gc2VhcmNoLjwvbGk+DQogICAgICAgICA8bGk+PGI+cGF0dGVybjwvYj4gLSAoc3RyaW5nKSBBIGxpc3Qgb2YgZmlsZSBwYXR0ZXJucyBzZXBhcmF0ZWQgYnkgfHwgdG8gc2VhcmNoIGZvci4gIGkuZTogKi5wZGZ8fCouZG9jPC9saT4NCiAgICAgICAgIDxsaT48Yj5leGNsdWRlczwvYj4gLSAoc3RyaW5nKSBBIGxpc3Qgb2YgZmlsZSBwYXR0ZXJucyBzZXBhcmF0ZWQgYnkgfHwgdG8gZXhjbHVkZSBmcm9tIHRoZSByZXR1cm5lZCBsaXN0LiAgaS5lOiBaKjwvbGk+DQogICAgICAgICA8bGk+PGI+bWF4ZGVwdGg8L2I+IC0gKGludCkgQSBwb3NpdGl2ZSBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgbWF4aW11bSBkZXB0aCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2guICBEZWZhdWx0IGlzIHRvIHB1dCBubyBsaW1pdCBvbiBkaXJlY3RvcnkgZGVwdGguPC9saT4NCiAgICAgICAgIDxsaT48Yj5hYnNvbHV0ZTwvYj4gLSAoYm9vbCkgQSBib29sZWFuIG9wdGlvbiBpbmRpY2F0aW5nIHRoYXQgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGZpbGVzIHNob3VsZCBiZSB1c2VkIGluIHRoZSByZXR1cm5lZCB2YWx1ZXMuPC9saT4NCiAgICAgICAgIDxsaT48Yj5vcHRpb25zPC9iPiAtIChib29sKSBBIGJvb2xlYW4gb3B0aW9uIGluZGljYXRpbmcgdGhhdCB0aGUgb3V0cHV0IHNob3VsZCBiZSBhIHN0cmluZyBvZiBodG1sIG9wdGlvbnMuPC9saT4NCiAgICAgICAgIDxsaT48Yj5zZWxlY3RlZDwvYj4gLSAoc3RyaW5nKSBJZiBvcHRpb25zIGlzIHNwZWNpZmllZCwgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9wdGlvbi48L2xpPg0KICAgICAgICAgPGxpPjxiPm5vdmFsdWU8L2I+IC0gKHN0cmluZykgaWYgdGhlICZxdW90O29wdGlvbnMmcXVvdDsgYXR0cmlidXRlIGlzIHNwZWNpZmllZCwgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgc3RyaW5nIHVzZWQgdG8gaW5kaWNhdGUgaW4gdGhlIGdlbmVyYXRlZCBkcm9wZG93biBvciBtdWx0aSBzZWxlY3QgbGlzdCB0byBpbmRpY2F0ZSB0aGF0IG5vIHZhbHVlIGhhcyBiZWVuIHNlbGVjdGVkLiAgQnkgZGVmYXVsdCwgdGhlcmUgaXMgbm8gb3B0aW9uIGluZGljYXRpbmcgbm92YWx1ZS48L2xpPg0KICAgICAgICAgPGxpPjxiPmFzc2lnbjwvYj4gLSAoc3RyaW5nKSBBc3NpZ24gdGhlIG91dHB1dCBvZiB0aGlzIHBsdWdpbiB0byB0aGUgbmFtZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+DQogICAgICAgIDwvdWw+DQogICAgICAgPHA+RXhhbXBsZSBPbmU6IENyZWF0ZSBhIGRyb3Bkb3duIG9mIFBERiBmaWxlcyBpbiB0aGUgdXBsb2Fkcy9kb2NzIGRpcmVjdG9yeTo8L3A+DQogICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mbHQ7c2VsZWN0IG5hbWU9IiZsYnJhY2U7JGFjdGlvbmlkfXBkZl9maWxlIj4mbGJyYWNlO3h0X2ZpbGVfbGlzdCBkaXI9ZG9jcyBvcHRpb25zPTEgbm92YWx1ZT0iTm9uZSIgcGF0dGVybj0nKi5wZGYnIHNlbGVjdGVkPSRzb21ldmFyfSZsdDtzZWxlY3QmZ3Q7PC9wcmU+DQogICAgICAgPHA+RXhhbXBsZSBUd286IENyZWF0ZSBhbiBhcnJheSBvZiBQREYgRmlsZXMgaW4gdGhlIHVwbG9hZHMvZG9jcyBkaXJlY3Rvcnk6PC9wPg0KICAgICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mbGJyYWNlO3h0X2ZpbGVfbGlzdCBkaXI9ZG9jcyBwYXR0ZXJuPScqLnBkZicgYXNzaWduPSdwZGZfZmlsZXMnfTwvcHJlPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X2ltYWdlX2xpc3R9IDxzcGFuIGNsYXNzPSJzbWFsbCI+UmV0cmlldmVzIGEgbGlzdCBvZiBpbWFnZXMgdGhhdCBtYXRjaCBhIGNyaXRlcmlhIGZyb20gYSBkaXJlY3Rvcnk8L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgIDxwPkEgc21hcnR5IHBsdWdpbiB0byByZXRyaWV2ZSBhIGxpc3Qgb2YgaW1hZ2VzIHRoYXQgbWF0Y2ggYSBjcml0ZXJpYSBmcm9tIGEgZGlyZWN0b3J5LCBhbmQgb3B0aW9uYWxseSB0byBidWlsZCBhIGxpc3Qgb2YgaHRtbCBvcHRpb25zIGZyb20gdGhlIHJlc3VsdHMuICBUaGlzIHBsdWdpbiBpcyBzaW1wbHkgYSB3cmFwcGVyIGFyb3VuZCB0aGUgJmxicmFjZTt4dF9maWxlX2xpc3R9IHBsdWdpbiBkZXNjcmliZWQgYWJvdmUuPC9wPg0KICAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPg0KICAgICAgIDx1bD4NCiAgICAgICAgIDxsaT48Yj5kaXI8L2I+IC0gKHN0cmluZykgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSA8ZW0+KHJlbGF0aXZlIHRvIHRoZSB1cGxvYWRzIHBhdGgpPC9lbT4gdG8gc2VhcmNoLjwvbGk+DQogICAgICAgICA8bGk+PGI+ZXh0ZW5zaW9uczwvYj4gLSAoc3RyaW5nKSBBIGxpc3Qgb2YgZmlsZSBwYXR0ZXJucyBzZXBhcmF0ZWQgYnkgfHwgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcGF0dGVybiBvZiAqLmpwZ3x8Ki5qcGVnfHwqLnBuZ3x8Ki5naWZ8fCouYm1wfHwqLmljbzwvbGk+DQogICAgICAgICA8bGk+PGI+ZXhjbHVkZXM8L2I+IC0gKHN0cmluZykgQSBsaXN0IG9mIGZpbGUgcGF0dGVybnMgc2VwYXJhdGVkIGJ5IHx8IHRvIGV4Y2x1ZGUgZnJvbSB0aGUgcmV0dXJuZWQgbGlzdC4gIGkuZTogWip8fGEqPC9saT4NCiAgICAgICAgIDxsaT48Yj5tYXhkZXB0aDwvYj4gLSAoaW50KSBBIHBvc2l0aXZlIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBtYXhpbXVtIGRlcHRoIG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaC4gIERlZmF1bHQgaXMgdG8gcHV0IG5vIGxpbWl0IG9uIGRpcmVjdG9yeSBkZXB0aC48L2xpPg0KICAgICAgICAgPGxpPjxiPmFic29sdXRlPC9iPiAtIChib29sKSBBIGJvb2xlYW4gb3B0aW9uIGluZGljYXRpbmcgdGhhdCB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZmlsZXMgc2hvdWxkIGJlIHVzZWQgaW4gdGhlIHJldHVybmVkIHZhbHVlcy48L2xpPg0KICAgICAgICAgPGxpPjxiPm9wdGlvbnM8L2I+IC0gKGJvb2wpIEEgYm9vbGVhbiBvcHRpb24gaW5kaWNhdGluZyB0aGF0IHRoZSBvdXRwdXQgc2hvdWxkIGJlIGEgc3RyaW5nIG9mIGh0bWwgb3B0aW9ucy48L2xpPg0KICAgICAgICAgPGxpPjxiPnNlbGVjdGVkPC9iPiAtIChzdHJpbmcpIElmIG9wdGlvbnMgaXMgc3BlY2lmaWVkLCB0aGlzIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgb3B0aW9uLjwvbGk+DQogICAgICAgICA8bGk+PGI+bm92YWx1ZTwvYj4gLSAoc3RyaW5nKSBpZiB0aGUgJnF1b3Q7b3B0aW9ucyZxdW90OyBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLCB0aGlzIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBzdHJpbmcgdXNlZCB0byBpbmRpY2F0ZSBpbiB0aGUgZ2VuZXJhdGVkIGRyb3Bkb3duIG9yIG11bHRpIHNlbGVjdCBsaXN0IHRvIGluZGljYXRlIHRoYXQgbm8gdmFsdWUgaGFzIGJlZW4gc2VsZWN0ZWQuICBCeSBkZWZhdWx0LCB0aGVyZSBpcyBubyBvcHRpb24gaW5kaWNhdGluZyBub3ZhbHVlLjwvbGk+DQogICAgICAgICA8bGk+PGI+YXNzaWduPC9iPiAtIChzdHJpbmcpIEFzc2lnbiB0aGUgb3V0cHV0IG9mIHRoaXMgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4NCiAgICAgICA8L3VsPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X21lc3NhZ2V9IDxzcGFuIGNsYXNzPSJzbWFsbCI+U3RvcmUgYW5kIHJldHJpZXZlIG1lc3NhZ2VzIGluIHRoZSBzZXNzaW9uPC9zcGFuPjwvaDM+DQogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4NCiAgICAgICA8cD5BIHNpbXBsZSBjb252ZW5pZW5jZSBwbHVnaW4gdG8gc3RvcmUgbWVzc2FnZXMgaW4gdGhlIHNlc3Npb24gYW5kIHJldHJpZXZlIHRoZW0uIE1lc3NhZ2VzIGFyZSBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgZnJvbSB0aGUgc2Vzc2lvbiBvbmNlIHJldHJpZXZlZC48L3A+DQogICAgICAgPHA+U2VlIGFsc286IGNsYXNzIHh0X21lc3NhZ2U8L3A+DQogICAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgICAgPHVsPg0KICAgICAgICAgPGxpPjxiPmtleTwvYj4gLSAoc3RyaW5nKSBUaGUgbWVzc2FnZSBrZXkuPC9saT4NCiAgICAgICAgIDxsaT48Yj52YWx1ZTwvYj4gLSAoc3RyaW5nKSBPcHRpb25hbGx5IGNyZWF0ZSBhIG5ldyBtZXNzYWdlIHZhcmlhYmxlLjwvbGk+DQogICAgICAgICA8bGk+PGI+YXNzaWduPC9iPiAtIChzdHJpbmcpIEFzc2lnbiB0aGUgb3V0cHV0IG9mIHRoaXMgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4NCiAgICAgICA8L3VsPg0KICAgICAgIDxwPlVzYWdlOjwvcD4NCiAgICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICZsYnJhY2U7eHRfbWVzc2FnZSBrZXk9J3NhbXBsZSd9ICZsYnJhY2U7KiBnZXQsIGVyYXNlLCBhbmQgb3V0cHV0IHRoZSB2YWx1ZSBvZiAmcXVvdDtzYW1wbGUmcXVvdDsgaWYgaXQgZXhpc3RzICp9PC9wcmU+DQogICAgICAgIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+ICAmbGJyYWNlO3h0X21lc3NhZ2Uga2V5PSdzYW1wbGUnIGFzc2lnbj0nZm9vJ30gJmxicmFjZTsqIGdldCwgZXJhc2UsIGFuZCBhc3NpZ24gdGhlIHZhbHVlIG9mICZxdW90O3NhbXBsZSZxdW90OyBpZiBpdCBleGlzdHMgdG8gdGhlIHNtYXJ0eSB2YXJpYWJsZSBmb28uKn08L3ByZT4NCiAgICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICZsYnJhY2U7eHRfbWVzc2FnZSBrZXk9J3NhbXBsZScgdmFsdWU9J2Jhcid9ICZsYnJhY2U7KiBzZXQgdGhlIHZhbHVlIG9mIHRoZSBrZXkgJnF1b3Q7c2FtcGxlJnF1b3Q7IHRvICZxdW90O2JhciZxdW90OyAqfTwvcHJlPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X3BhZ2VvcHRpb25zfSA8c3BhbiBjbGFzcz0ic21hbGwiPkdlbmVyYXRlIGEgbGlzdCBvZiBvcHRpb25zIGZvciBhIHNlbGVjdCBzdGF0ZW1lbnQgY29uc2lzdGluZyBvZiBtYXRjaGluZyBjb250ZW50IHBhZ2VzPC9zcGFuPjwvaDM+DQogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4NCiAgICAgICA8cD5HZW5lcmF0ZSBhIGxpc3Qgb2Ygb3B0aW9ucyBmb3IgYSBzZWxlY3Qgc3RhdGVtZW50IGNvbnNpc3Rpbmcgb2YgbWF0Y2hpbmcgY29udGVudCBwYWdlcy4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IGEgcGFnZSBhcyBhIG1vZHVsZSBwcmVmZXJlbmNlIGV0Yy48L3A+DQogICAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgICAgIDx1bD4NCiAgICAgICAgIDxsaT48Yj5zdGFydF9wYWdlPC9iPiAtIChpbnR8c3RyaW5nKSBUaGUgcGFnZSBpZCBvciBhbGlhcyBvZiB0aGUgcGFyZW50IHBhZ2UuICBPbmx5IHRoZSBkZXNjZW5kZW50cyBvZiB0aGlzIHBhZ2Ugd2lsbCBiZSB1c2VkIGluIHRoZSBvdXRwdXQuPC9saT4NCiAgICAgICAgIDxsaT48Yj5zZWxlY3RlZDwvYj4gLSAoaW50fHN0cmluZykgVGhlIHBhZ2UgaWQgb3IgYWxpYXMgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwYWdlLjwvbGk+DQogICAgICAgICA8bGk+PGI+c2hvd19uYXZoaWRkZW48L2I+IC0gKGJvb2wpIFdoZXRoZXIgb3Igbm90IHRvIHNob3cgY29udGVudCBpdGVtcyB0aGF0IGFyZSBtYXJrZWQgYXMgbm90IHNob3duIGluIG1lbnUuPC9saT4NCiAgICAgICAgIDxsaT48Yj5ub25lPC9iPiAtIChib29sKSBXaGV0aGVyIG9yIG5vdCB0byBzaG93IGEgJnF1b3Q7Tm9uZSZxdW90OyBvcHRpb24gYXQgdGhlIHRvcCBvZiB0aGUgbGlzdC48L2xpPg0KICAgICAgICA8L3VsPg0KICAgICAgIDxwPlVzYWdlOjwvcD4NCiAgICAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJmx0O3NlbGVjdCBuYW1lPSImbGJyYWNlOyRhY3Rpb25pZH1zb21ldGhpbmciJmd0Ow0KICAgICZsYnJhY2U7eHRfcGFnZW9wdGlvbnMgc2VsZWN0ZWQ9JHNvbWVfcHJlZmVyZW5jZX0NCiAgJmx0Oy9zZWxlY3QmZ3Q7PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfZmlsZV9saW5rfSA8c3BhbiBjbGFzcz0ic21hbGwiPkdlbmVyYXRlIGFuIG9iZnVzY2F0ZWQgbGluayB0byBhIGZpbGU8L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+R2VuZXJhdGUgYW4gb2JmdXNjYXRlZCBsaW5rIHRvIGEgZmlsZSB0byBhbGxvdyB2aWV3aW5nIG9yIGRvd25sb2FkaW5nIHRoZSBmaWxlIHdpdGhvdXQgcHJvdmlkaW5nIHBhdGggaW5mb3JtYXRpb24uICBGb3IgbGlua3MgdG8gaW1hZ2VzIG9wdGlvbmFsbHkgZ2VuZXJhdGUgYW5kIGRpc3BsYXkgYSB0aHVtYm5haWwsIGFuZCAoYnkgZGVmYXVsdCkgYWxsb3cgb3BlbmluZyB0aGUgaW1hZ2UgaW4gdGhlIGJyb3dzZXIuPC9wPg0KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgICA8dWw+DQogICAgICAgICA8bGk+PGI+aW48L2I+IC0gKHN0cmluZykgVGhlIGZpbGUgcGF0aCBvciBVUkwgdG8gdGhlIGl0ZW0uICBJbnB1dCBtdXN0IGJlIHdpdGhpbiB0aGUgQ01TTVMgcm9vdCBwYXRoIGV2ZW4gaWYgc3BlY2lmeWluZyBhbiBhYnNvbHV0ZSBmaWxlIGxvY2F0aW9uLiAgZmlsZSBwYXRocyByZWxhdGl2ZSB0byB0aGUgaW1hZ2VfdXBsb2Fkc19wYXRoLCBvciB0aGUgcm9vdCBwYXRoIGFyZSBhbHNvIGFjY2VwdGFibGUuIFVSTFMgbXVzdCBiZSBjb21wbGV0ZSBVUkxTLiBQcm90b2NvbCBzcGVjaWZpYyBVUkxTIG1heSBhbHNvIHdvcmsgYnV0IG11c3Qgc3BlY2lmeSB0aGUgY29tcGxldGUgZG9tYWluIG5hbWUgYW5kIHBhdGguPC9saT4NCiAgICAgICAgIDxsaT48Yj5wYWdlPC9iPiAtIChpbnR8c3RyaW5nKSAtIEEgcGFnZSBpZCBvciBhbGlhcyB0byBhIHB1YmxpYy91bnByb3RlY3RlZCBwYWdlIGZvciB0aGUgVVJMIHRvIGFsbG93IHNoYXJpbmcuICBJZiBub3Qgc3BlY2lmaWVkIHRoZSBjdXJyZW50IHBhZ2UgaWQgd2lsbCBiZSB1c2VkLjwvbGk+DQogICAgICAgICA8bGk+PGI+dXJsb25seTwvYj4gLSAoYm9vbCkgT3V0cHV0IG9ubHkgdGhlIFVSTCB0byB0aGUgb2JmdXNjYXRlZCBmaWxlLCBubyBsaW5rIG9yIHRodW1ibmFpbC4gT2ZmIGJ5IGRlZmF1bHQ8L2xpPg0KICAgICAgICAgPGxpPjxiPmRvd25sb2FkPC9iPiAtIChib29sKSBGb3IgbGlua3MgdG8gaW1hZ2UgZmlsZXMgZm9yY2UgdGhlIGltYWdlIHRvIGJlIGRvd25sb2FkZWQgb24gY2xpY2sgcmF0aGVyIHRoYW4gb3BlbmluZyBpbiB0aGUgYnJvd3Nlci4gT2ZmIGJ5IGRlZmF1bHQ8L2xpPg0KICAgICAgICAgPGxpPjxiPnRodW1ibmFpbDwvYj4gLSAoYm9vbCkgRm9yIGxpbmtzIHRvIGltYWdlIGZpbGVzIG9wdGlvbmFsbHkgZGlzcGxheSBhIHRodW1ibmFpbCBmb3IgdGhlIGltYWdlLi4uIGdlbmVyYXRpbmcgb25lIGlmIG5lY2Vzc2FyeS4gIE9uIGJ5IGRlZmF1bHQ8L2xpPg0KICAgICAgPC91bD4NCiAgICAgIDxwPlVzYWdlOjwvcD4NCiAgICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJmxicmFjZTt4dF9maWxlX2xpbmsgaW49J3VwbG9hZHMvdGVybXMucGRmJ30NCiAgJmxicmFjZTt4dF9maWxlX2xpbmsgaW49J3VwbG9hZHMvaW1hZ2VzL2Fib3V0LmpwZyd9PC9wcmU+DQogIDwvZGl2Pg0KICA8L2xpPg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X2h0bWxfb3B0aW9uc30gPHNwYW4gY2xhc3M9InNtYWxsIj5IVE1MICZsdDtvcHRpb24mZ3Q7IHRhZ3Mgc3VpdGFibGUgZm9yIHVzZSBpbiBhIHNlbGVjdCBzdGF0ZW1lbnQ8L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+R2l2ZW4gYW4gYXJyYXkgb2Ygb3B0aW9uIGRlZmluaXRpb25zIGNyZWF0ZSBIVE1MICZsdDtvcHRpb24mZ3Q7IHRhZ3Mgc3VpdGFibGUgZm9yIHVzZSBpbiBhIHNlbGVjdCBzdGF0ZW1lbnQuPC9wPg0KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgICA8dWw+DQogICAgICAgIDxsaT48Yj5vcHRpb25zPC9iPiAtIChhcnJheSkgQW4gYXJyYXkgb2Yga2V5L3ZhbHVlIHBhaXJzIG9yIGFuIGFycmF5IG9mIGxhYmVsIGFuZCB2YWx1ZSBhdHRyaWJ1dGVzLg0KICAgICAgICAgICAgPHA+V2hlbiBwYXNzaW5nIGFuIGFycmF5IG9mIGxhYmVsIGFuZCB2YWx1ZSByZWNvcmRzLCB0aGlzIG1vZHVsZSB3aWxsIGFsc28gYWNjZXB0IGEgJnF1b3Q7ZGlzYWJsZSZxdW90OywgJnF1b3Q7Y2xhc3MmcXVvdDssICZxdW90O3NlbGVjdGVkJnF1b3Q7IGFuZCAmcXVvdDtpZCZxdW90OyBhdHRyaWJ1dGVzLiAgaS5lLjo8L3A+DQogICAgICAgIDxwcmU+JmxicmFjZTskb3B0aW9ucyA9IFsNCiAgICAgICBbDQogICAgICAgICAgICdsYWJlbCcgPSZndDsgJ0NhbmFkYScsDQogICAgICAgICAgICd2YWx1ZScgPSZndDsgJ1VTJywNCiAgICAgICBdLA0KICAgICAgIFsNCiAgICAgICAgICAgJ2xhYmVsJyA9Jmd0OyAnVW5pdGVkIFN0YXRlcycsDQogICAgICAgICAgICd2YWx1ZScgPSZndDsgJ1VTJywNCiAgICAgICAgICAgJ2Rpc2FibGVkJyA9Jmd0OyAxLA0KICAgICAgIF0sDQogICAgICAgWw0KICAgICAgICAgICAnbGFiZWwnID0mZ3Q7ICdGcmFuY2UnLA0KICAgICAgICAgICAndmFsdWUnID0mZ3Q7ICdGUicsDQogICAgICAgICAgICdpZCcgPSZndDsgJ0ZSJywNCiAgICAgICAgICAgJ2NsYXNzJyA9Jmd0OyAnY29vbCcNCiAgICAgICBdLA0KICAgICAgIFsNCiAgICAgICAgICAgJ2xhYmVsJyA9Jmd0OyAnTmV0aGVybGFuZHMnLA0KICAgICAgICAgICAndmFsdWUnID0mZ3Q7ICdOTCcsDQogICAgICAgICAgICdzZWxlY3RlZCcgPSZndDsgMQ0KICAgICAgIF0sDQogICAgXX08L3ByZT4NCiAgICAgICAgICA8L2xpPg0KICAgICAgICAgIDxsaT48Yj5zZWxlY3RlZDwvYj4gLSAoc3RyaW5nfGFycmF5KSBUaGUgdmFsdWUgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQocykuPC9saT4NCiAgICAgICAgICA8bGk+PGI+YXNzaWduPC9iPiAtIChzdHJpbmcpIEFzc2lnbiB0aGUgb3V0cHV0IG9mIHRoaXMgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4NCiAgICAgICAgPC91bD4NCiAgICAgIDxwPkV4YW1wbGU6PC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4mbHQ7c2VsZWN0IG5hbWU9InNvbWV0aGluZyImZ3Q7JmxicmFjZTt4dF9odG1sX29wdGlvbnMgb3B0aW9ucz0kbXlfb3B0aW9uc30mbHQ7L3NlbGVjdCZndDs8L3ByZT4NCiAgICA8L2Rpdj4NCiAgPC9saT4NCiAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dF9mb3JtX2NzcmZ9IDxzcGFuIGNsYXNzPSJzbWFsbCI+R2VuZXJhdGUgYSBDU1JGIHRva2VuIGZvciBtb2R1bGUgZm9ybXM8L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICAgPHA+R2VuZXJhdGUgYSBDU1JGIHRva2VuIGFuZCBlbWJlZCBpdCBhcyBoaWRkZW4gaW5wdXRzIGludG8gYSBmb3JtLjwvcD4NCiAgICAgIDxwPlRoaXMgdG9vbCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgdG9rZW5zIHRvIHByZXZlbnQgQ3Jvc3MtU2l0ZS1SZXF1ZXN0LUZvcmdlcnkgYXR0YWNrcyBvbiBmb3JtIHN1Ym1pc3Npb25zLjwvcD4NCiAgICAgIDxwPlNlZSB0aGUgPGNvZGU+XHh0X3V0aWxzOjp2YWxpZGF0ZV9mb3JtX2NzcmYoKTwvY29kZT4gY29tcGFuaW9uIG1ldGhvZC48L3A+DQogICAgICA8cD5TZWUgdGhlIDxjb2RlPnh0X2lnbm9yZV9jc3JmPC9jb2RlPiBjb25maWcgZW50cnkgYmVsb3cuPC9wPg0KICAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgICA8dWw+DQogICAgICAgIDxsaT48Yj5hc3NpZ248L2I+IC0gKHN0cmluZykgQXNzaWduIHRoZSBvdXRwdXQgb2YgdGhpcyBwbHVnaW4gdG8gdGhlIG5hbWVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPg0KICAgICAgPC91bD4NCiAgICA8L2Rpdj4NCiAgPC9saT4NCiAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dGNzc19hZGR9Li4uJmxicmFjZTsveHRjc3NfYWRkfSA8c3BhbiBjbGFzcz0ic21hbGwiPkNhY2hlIGFuZCBtaW5pZnkgc3R5bGVzaGVldHM8L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgIDxwPlRoaXMgcGx1Z2luIGFsbG93cyBhZGRpbmcgQ1NTIHRvIHRoZSBjYWNoZWQgc3R5bGVzaGVldHMgZ2VuZXJhdGVkIGJ5IDxjb2RlPiZsYnJhY2U7eHRqc19yZW5kZXJ9PC9jb2RlPi4gVGhpcyBpcyBzaW1pbGFyIHRvIChidXQgYmV0dGVyIHRoYW4pIGVtYmVkZGVkIENTUyAmbHQ7c3R5bGUmZ3Q7IHRhZ3MgYmVjYXVzZSB0aGUgY3NzIGlzIGNvbmNhdGVuYXRlZCB0byBhIG1pbmltaXplZCwgYW5kIGNhY2hlZCBzdHlsZXNoZWV0IHRoYXQgaXMgZG93bmxvYWRlZCBieSB0aGUgdXNlciBvbmNlLjwvcD4NCiAgICA8cD5TZWUgQWxzbzogPGNvZGU+JmxicmFjZTt4dGpzX3JlbmRlcn08L2NvZGU+PC9wPg0KICAgIDxwPlBhcmFtZXRlcnM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICAgPGxpPjxiPmRlcGVuZHM8L2I+IC0gKG1peGVkKSBFaXRoZXIgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nLCBvciBhbiBhcnJheSBvZiByZXF1aXJlZCBsaWJyYXJ5IG5hbWVzLiAgVGhlc2UgbGlicmFyaWVzIChhbmQgdGhlaXIgZGVwZW5kZW50cyB3aWxsIGJlIGxvYWRlZCBwcmlvciB0byB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgY3NzKS48L2xpPg0KICAgICAgICAgPGxpPjxiPm5vbWluaWZ5PC9iPiAtIChib29sKSBFeHBsaWNpdGx5IGRpc2FibGUgbWluaWZ5aW5nIHRoaXMgQ1NTLjwvbGk+DQogICAgICAgICA8bGk+PGI+YXBwZW5kPC9iPiAtIChib29sKSBTcGVjaWZ5IHRoYXQgdGhpcyBjb2RlIHNob3VsZCBiZSBhcHBlbmRlZCBBRlRFUiBhbGwgcmVndWxhciByZXF1aXJlcywgYW5kIGluY2x1ZGVzLiAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHVzZWZ1bCBjb25zaWRlcmluZyB0aGUgb3JkZXIgaW4gd2hpY2ggQ01TTVMgdGVtcGxhdGVzIGFyZSBwcm9jZXNzZWQuPC9saT4NCiAgICAgIDwvdWw+DQogICAgPHA+VXNhZ2U6PC9wPg0KICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJmxicmFjZTsqIGFkZCBzb21lIGNzcyBzcGVjaWZpYyBmb3IgdGhpcyBwYWdlIG9yIHRlbXBsYXRlICoNCiAgJmxicmFjZTt4dGNzc19hZGR9DQogICAgaW1nLmFsYnVtICZsYnJhY2U7DQogICAgICBmbG9hdDogbGVmdDsNCiAgICAgIHdpZHRoOiAzMyU7DQogICAgICBwYWRkaW5nOiA0cHg7DQogICAgfQ0KICAmbGJyYWNlOy94dGNzc19hZGR9PC9wcmU+DQogICAgPC9kaXY+DQogIDwvbGk+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRqc19hZGR9Li4uJmxicmFjZTsveHRqc19hZGR9IDxzcGFuIGNsYXNzPSJzbWFsbCI+Q2FjaGUgYW5kIG1pbmlmeSBqYXZhc2NyaXB0PC9zcGFuPjwvaDM+DQogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4NCiAgICAgIDxwPlRoaXMgcGx1Z2luIGFsbG93cyBhZGRpbmcgamF2YXNjcmlwdCB0byB0aGUgY2FjaGVkIGphdmFzY3JpcHQgZmlsZSBnZW5lcmF0ZWQgYnkgPGNvZGU+JmxicmFjZTt4dGpzX3JlbmRlcn08L2NvZGU+LiBUaGlzIGlzIHNpbWlsYXIgdG8gKGJ1dCBiZXR0ZXIgdGhhbikgZW1iZWRkZWQgJmx0O3NjcmlwdCZndDsgdGFncyBiZWNhdXNlIHRoZSBqYXZhc2NyaXB0IGlzIGNvbmNhdGVuYXRlZCB0byBhIG1pbmltaXplZCwgYW5kIGNhY2hlZCBzdHlsZXNoZWV0IHRoYXQgaXMgZG93bmxvYWRlZCBieSB0aGUgdXNlciBvbmNlLjwvcD4NCiAgICAgIDxwPlNlZSBBbHNvOiA8Y29kZT4mbGJyYWNlO3h0anNfcmVuZGVyfTwvY29kZT48L3A+DQogICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPjxiPmRlcGVuZHM8L2I+IC0gKG1peGVkKSBBIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHJlZ2lzdGVyZWQgbGliIG5hbWVzLCBvciBhbiBhcnJheSBvZiByZWdpc3RlcmVkIGxpYiBuYW1lcy48L2xpPg0KICAgICAgICA8bGk+PGI+bm9taW5pZnk8L2I+IC0gKGJvb2wpIGV4cGxpY2l0bHkgZGlzYWJsZSBtaW5pZnlpbmcgdGhpcyBqYXZhc2NyaXB0LjwvbGk+DQogICAgICAgIDxsaT48Yj5hcHBlbmQ8L2I+IC0gKGJvb2wpIHNwZWNpZnkgdGhhdCB0aGlzIGNvZGUgc2hvdWxkIGJlIGFwcGVuZGVkIEFGVEVSIGFsbCByZWd1bGFyIHJlcXVpcmVzLCBhbmQgaW5jbHVkZXMuICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgdXNlZnVsIGlmIHRoZXJlIGlzIGphdmFzY3JpcHQgZ2VuZXJhdGVkIGluIG1vZHVsZSB0ZW1wbGF0ZXMsIGFuZCBvdXRwdXQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSBjb250ZW50LjwvbGk+DQogICAgICA8L3VsPg0KICAgICAgPHA+VXNhZ2U6PC9wPg0KICAgICAgPHByZSBjbGFzcz0iY2xpY2stdG8tY29weSIgdGl0bGU9IkNsaWNrIHRvIGNvcHkgdG8gY2xpcGJvYXJkIj4gICZsYnJhY2U7KiBhdXRvbWF0aWNhbGx5IGVuYWJsZSBqcXVlcnkgdWkgdG9vbHRpcCBmdW5jdGlvbmFsaXR5ICp9DQogICZsYnJhY2U7eHRqc19hZGQgZGVwZW5kcz11aX0NCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpJmxicmFjZTsNCiAgICAkKGRvY3VtZW50KS50b29sdGlwKCk7DQogICAgfSk7DQogICZsYnJhY2U7L3h0anNfYWRkfTwvcHJlPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0anNfcmVxdWlyZX0gPHNwYW4gY2xhc3M9InNtYWxsIj5BZGQgbGlicmFyaWVzIHRvICZsYnJhY2U7eHRqc19yZW5kZXJ9PC9zcGFuPjwvaDM+DQo8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPjxwPlRoaXMgcGx1Z2luIGFsbG93cyBhZGRpbmcgPGVtPihvbmUgb2YpPC9lbT4gYSBwcmVkZWZpbmVkIGphdmFzY3JpcHQgbGlicmFyeSAoYW5kIGl0cyBhc3NvY2lhdGVkIGNzcyksIGEgQ01TTVMgc3R5bGVzaGVldCwgYSBzdGF0aWMgQ1NTIGZpbGUsIG9yIGEgamF2YXNjcmlwdCBmaWxlIHRvIHRoZSBjb21waWxlZCBqYXZhc2NyaXB0IGFuZCBjc3Mgb3V0cHV0LiAgVGhpcyBwbHVnaW4gcmVwbGFjZXMgbXVsdGlwbGUgJmx0O3NjcmlwdCZndDsgYW5kL29yICZsdDtsaW5rIHJlbD1zdHlsZXNoZWV0IC4uLiZndDsgdGFncy48L3A+DQogICAgPHA+U2VlIEFsc286IDxjb2RlPiZsYnJhY2U7eHRqc19yZW5kZXJ9PC9jb2RlPjwvcD4NCiAgICA8cD5QYXJhbWV0ZXJzOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPjxiPmxpYjwvYj4gLSAoc3RyaW5nKSBBIG5hbWUgb2YgYSByZWdpc3RlcmVkIGxpYnJhcnkuPC9saT4NCiAgICAgICAgPGxpPjxiPmNzc25hbWU8L2I+IC0gKHN0cmluZykgVGhlIG5hbWUgb2YgYSBDTVNNUyBzdHlsZXNoZWV0LjwvbGk+DQogICAgICAgIDxsaT48Yj5jc3NmaWxlPC9iPiAtIChzdHJpbmcpIEEgQ1NTIEZpbGVuYW1lIDxlbT4ocmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgbW9kdWxlLCBvciB0byB0aGUgdXBsb2FkcyBkaXJlY3RvcnkpPC9lbT48L2xpPg0KICAgICAgICA8bGk+PGI+Y3NzdXJsPC9iPiAtIChzdHJpbmcpIEEgVVJMIHRvIGEgcmVtb3RlIENTUyBmaWxlIHRvIGZldGNoIGFuZCBjYWNoZS48L2xpPg0KICAgICAgICA8bGk+PGI+anNmaWxlPC9iPiAtIChzdHJpbmcpIEEgSmF2YXNjcmlwdCBmaWxlbmFtZSA8ZW0+KHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IG1vZHVsZSwgb3IgdG8gdGhlIHVwbG9hZHMgZGlyZWN0b3J5KTwvZW0+PC9saT4NCiAgICAgICAgPGxpPjxiPmpzdXJsPC9iPiAtIChzdHJpbmcpIEEgVVJMIHRvIGEgcmVtb3RlIEphdmFzY3JpcHQgZmlsZSB0byBmZXRjaCBhbmQgY2FjaGUuPC9saT4NCiAgICAgICAgPGxpPjxiPmRlcGVuZHM8L2I+IC0gKG1peGVkKSBBIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHJlZ2lzdGVyZWQgbGliIG5hbWVzLCBvciBhbiBhcnJheSBvZiByZWdpc3RlcmVkIGxpYiBuYW1lcy48L2xpPg0KICAgICAgICA8bGk+PGI+bm9taW5pZnk8L2I+IC0gKGJvb2wpIGV4cGxpY2l0bHkgZGlzYWJsZSBtaW5pZnlpbmcgYm90aCB0aGUgY3NzIGFuZCB0aGUgamF2YXNjcmlwdCBmcm9tIHRoaXMgbGlicmFyeSwgb3ZlcnJpZGluZyB3aGF0IGlzIHN0YXRlZCBpbiB0aGUgbGlicmFyeS48L2xpPg0KICAgICAgPC91bD4NCiAgICA8cD5Vc2FnZTo8L3A+DQogICAgICA8dWw+DQogICAgICAgIDxsaT48Y29kZT4mbGJyYWNlO3h0anNfcmVxdWlyZSBsaWI9J2ZhbmN5Ym94J308L2NvZGU+PGJyLz5FbnN1cmUgdGhhdCB0aGUgZmFuY3lib3ggbGlicmFyeSwgYW5kIGFueSAocmVnaXN0ZXJlZCkgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgbG9hZGVkLjwvbGk+DQogICAgICAgIDxsaT48Y29kZT4mbGJyYWNlO3h0anNfcmVxdWlyZSBqc2ZpbGU9J2Fzc2V0cy9teXN0dWZmLmpzJ308L2NvZGU+PGJyLz5FbnN1cmUgdGhhdCB0aGUgc3BlY2lmaWVkIGphdmFzY3JpcHQgZmlsZSBpcyBpbmNsdWRlZCBpbiB0aGUgamF2YXNjcmlwdCBvdXRwdXQgd2hlbiB0aGlzIHBhZ2UgaXMgcmVuZGVyZWQuPC9saT4NCiAgICAgICAgPGxpPjxjb2RlPiZsYnJhY2U7eHRqc19yZXF1aXJlIGNzc25hbWU9J215c3R1ZmYnfTwvY29kZT48YnIvPkVuc3VyZSB0aGF0IHRoZSBzcGVjaWZpZWQgQ01TTVMgc3R5bGVzaGVldCBuYW1lZCAnbXlzdHVmZicgaXMgaW5jbHVkZWQgaW4gdGhlIGNzcyBvdXRwdXQgd2hlbiB0aGlzIHBhZ2UgaXMgcmVuZGVyZWQuPC9saT4NCiAgICAgICAgPGxpPjxjb2RlPiZsYnJhY2U7eHRqc19yZXF1aXJlIGNzc2ZpbGU9J2Fzc2V0cy9teXN0dWZmLmNzcyd9PC9jb2RlPjxici8+RW5zdXJlIHRoYXQgdGhlIHNwZWNpZmllZCBDU1MgZmlsZSBpcyBpbmNsdWRlZCBpbiB0aGUgY3NzIG91dHB1dCB3aGVuIHRoaXMgcGFnZSBpcyByZW5kZXJlZC48L2xpPg0KICAgICAgICA8bGk+PGNvZGU+JmxicmFjZTt4dGpzX3JlcXVpcmUganNmaWxlPSdhc3NldHMvbXlzdHVmZjIuanMnIGRlcGVuZHM9J2ZhbmN5Ym94J308L2NvZGU+PGJyLz5FbnN1cmUgdGhhdCB0aGUgYXNzZXRzL215c3R1ZmYyLmpzIGZpbGUsIGFuZCBpdCdzIGRlcGVuZGVudHMgKGZhbmN5Ym94KSBpcyBpbmNsdWRlZCBpbiB0aGUgamF2YXNjcmlwdCBvdXRwdXQsPC9saT4NCiAgICAgIDwvdWw+DQogICAgPHA+Tm90ZXM6PC9wPg0KICAgICAgIDx1bD4NCiAgICAgICAgIDxsaT5Pbmx5IG9uZSBvZjogbGliLCBqc2ZpbGUsIGpzdXJsLCBjc3NmaWxlLCBjc3N1cmwsIGFuZCBjc3NuYW1lIGFyZSByZXF1aXJlZC4gIFNwZWNpZnlpbmcgbXVsdGlwbGUgYXJndW1lbnRzIGNvdWxkIHJlc3VsdCBpbiByYW5kb20gYmVoYXZpb3IuPC9saT4NCiAgICAgICAgIDxsaT5UaGUganNmaWxlLCBjc3NmaWxlLCBhbmQgY3NzbmFtZSBhcmd1bWVudHMgYWxsIHN1cHBvcnQgdGhlICdkZXBlbmRzJyBhcmd1bWVudC4uLiBob3dldmVyIGl0IGlzIGlnbm9yZWQgd2hlbiBzcGVjaWZ5aW5nIHRoZSAmcXVvdDtsaWImcXVvdDsgYXJndW1lbnQuPC9saT4NCiAgICAgICAgIDxsaT5XaGVuIHVzaW5nIHJlbW90ZSBVUkxTLCB0aGV5IGFyZSBjYWNoZWQgbG9jYWxseSBiZWZvcmUgbWluaWZ5aW5nIG9yIGF0dGFjaGluZyB0byB0aGUgY3NzLjwvbGk+DQogICAgICAgICA8bGk+TGlicmFyaWVzLCBmaWxlcyBhbmQgY29kZSBhcmUgbGFyZ2VseSBhdHRhY2hlZCBpbiB0aGUgb3JkZXIgdGhleSBhcmUgc3BlY2lmaWVkLjwvbGk+DQogICAgICAgPC91bD4NCiAgPC9saT4NCiAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dGpzX3JlbmRlcn0gPHNwYW4gY2xhc3M9InNtYWxsIj5SZW5kZXIgYWxsIGxpYnJhcnkgZGVwZW5kZW5jaWVzPC9zcGFuPjwvaDM+DQogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4NCiAgICAgIDxwPlRoaXMgcGx1Z2luIGludGVsbGlnZW50bHkgYW5kIHJlY3Vyc2l2ZWx5IHJlc29sdmVzIGFsbCBsaWJyYXJ5IGRlcGVuZGVuY2llcywgYW5kIG91dHB1dHMgdHdvIHRhZ3M6PC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+QSBzY3JpcHQgdGFnIHRvIGluY2x1ZGUgYWxsIHRoZSByZXF1ZXN0ZWQgamF2YXNjcmlwdCAoaW5jbHVkaW5nIGphdmFzY3JpcHQgbGlicmFyaWVzLCBqYXZhc2NyaXB0IGZpbGVzLCBhbmQgZW1iZWRkZWQgamF2YXNjcmlwdCksIGluIGEgc2luZ2xlIG1pbmltaXplZCBmaWxlLjwvbGk+DQogICAgICAgIDxsaT5BIHN0eWxlc2hlZXQgdGFnIHRvIGluY2x1ZGUgYWxsIHRoZSByZXF1ZXN0ZWQgQ1NTIChpbmNsdWRpbmcgdGhhdCBkZWZpbmVkIGZvciBqYXZhc2NyaXB0IGxpYnJhcmllcyksIENTUyBmaWxlcywgYW5kIGVtYmVkZGVkIENTUyksIGluIGEgc2luZ2xlIG1pbmltaXplZCBmaWxlLjwvbGk+DQogICAgICA8L3VsPg0KICAgIDxwPlRoZSBwbHVnaW4gYWxsb3dzIGNhY2hpbmcgdGhlIG91dHB1dCBmb3IgYW4gYWRqdXN0YWJsZSBudW1iZXIgb2YgaG91cnMsIHNvIHRoYXQgdGhlIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBmdW5jdGlvbiBvZiByZXNvbHZpbmcgYWxsIHRoZSBkZXBlbmRlbmNpZXMsIHJlYWRpbmcgYWxsIHRoZSBjb2RlIGFuZCBjb25jYXRlbmF0aW5nIHRoZW0gaXMgbWluaW1pemVkLjwvcD4NCiAgICA8cD5QYXJhbWV0ZXJzOjwvcD4NCiAgICA8dWw+DQogICAgICA8bGk+PGI+ZXhjbHVkZXM8L2I+IC0gKHN0cmluZ1tdKSAtIEFuIGFycmF5IG9mIGxpYnJhcnkgbmFtZXMgdG8gZXhjbHVkZSBmcm9tIHRoZSBvdXRwdXQgPGVtPihldmVuIGlmIHRoZXkgYXJlIHJlcXVpcmVkIGJ5IG90aGVyIGxpYmFyaWVzKTwvZW0+IFRoaXMgaXMgdXNlZnVsIGlmIHNvbWUgbGlicmFyaWVzIHdpbGwgYmUgaW5jbHVkZWQgYnkgbWVhbnMgZXh0ZXJuYWwgdG8gdGhlIDxjb2RlPiZsYnJhY2U7eHRqc19yZXF1aXJlfTwvY29kZT4gdGFnLjwvbGk+DQogICAgICA8bGk+PGI+Y2FjaGVfbGlmZXRpbWU8L2I+IC0gKGludCkgLSBUaGUgbnVtYmVyIG9mIGhvdXJzIHRoYXQgdGhlIG91dHB1dCBzaG91bGQgYmUgY2FjaGVkIGZvci4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDI0LiAgVGhpcyB2YWx1ZSBjYW4gYmUgb3ZlcnJpZGRlbiBnbG9iYWxseSB3aXRoIHRoZSAmcXVvdDt4dGVqc19jYWNoZWxpZmUmcXVvdDsgY29uZmlnIGVudHJ5LjwvbGk+DQogICAgICA8bGk+PGI+bm9jYWNoZTwvYj4gLSAoaW50KSAtIEFueSBub24gemVybyB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCBjYWNoaW5nIHNob3VsZCBiZSB0dXJuZWQgb2ZmIGVudGlyZWx5Li4uIHRoaXMgaXMgcG90ZW50aWFsbHkgYW4gZXhwZW5zaXZlIG9wdGlvbiwgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGRldmVsb3BtZW50LiAgVGhpcyB2YWx1ZSBjYW4gYmUgb3ZlcnJpZGRlbiBnbG9iYWxseSB3aXRoIHRoZSAmcXVvdDt4dGVqc19ub2NhY2hlJnF1b3Q7IGNvbmZpZyBlbnRyeS48L2xpPg0KICAgICAgPGxpPjxiPm5vbWluaWZ5PC9iPiAtIChpbnQpIC0gQW55IG5vbiB6ZXJvIHZhbHVlIGluZGljYXRlcyB0aGF0IG1pbmlmeWluZyBvZiBqYXZhc2NyaXB0IGFuZCBDU1Mgb3V0cHV0IHNob3VsZCBiZSB0dXJuZWQgb2ZmIGVudGlyZWx5Li4uIFRoaXMgdmFsdWUgY2FuIGJlIG92ZXJyaWRkZW4gZ2xvYmFsbHkgd2l0aCB0aGUgJnF1b3Q7eHRlanNfbm9taW5pZnkmcXVvdDsgY29uZmlnIGVudHJ5LjwvbGk+DQogICAgICA8bGk+PGI+bm9fY3NzPC9iPiAtIChpbnQpIC0gQW55IG5vbiB6ZXJvIHZhbHVlIGluZGljYXRlcyB0aGF0IHN0eWxlc2hlZXQgdGFncyBzaG91bGQgbm90IGJlIG91dHB1dC48L2xpPg0KICAgICAgPGxpPjxiPm5vX2pzPC9iPiAtIChpbnQpIC0gQW55IG5vbiB6ZXJvIHZhbHVlIGluZGljYXRlcyB0aGF0IGphdmFzY3JpcHQgdGFncyBzaG91bGQgbm90IGJlIG91dHB1dC48L2xpPg0KICAgICAgPGxpPjxiPmFkZGtleTwvYj4gLSAoc3RyaW5nKSBBZGQgZW50cm9weSBpbnRvIHRoZSBjYWNoZSBmaWxlIG5hbWUgZ2VuZXJhdGlvbiBhbGdvcml0aG0uPC9saT4NCiAgICAgIDxsaT48Yj5hc3NpZ248L2I+IC0gKHN0cmluZykgQXNzaWduIHRoZSBodG1sIG91dHB1dCBvZiB0aGlzIHBsdWdpbiB0byB0aGUgbmFtZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+DQogICAgPC91bD4NCiAgICA8cD5Vc2FnZTo8L3A+DQogIDxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+ICAmbGJyYWNlOyogb3V0cHV0IGFsbCBqYXZhc2NyaXB0IGFuZCBDU1MgZGF0YSBxdWV1ZWQgdmlhIHRoZSB4dGpzX3JlcXVpcmUsIHh0anNfYWRkanMsIGFuZCB4dGpzX2FkZGNzcyBwbHVnaW5zICp9DQogICAgJmxicmFjZTt4dGpzX3JlbmRlcn0NCiAgJmx0Oy9oZWFkJmd0OzwvcHJlPg0KICAgIDxwPk5vdGVzOjwvcD4NCiAgICA8dWw+DQogICAgICA8bGk+VGhpcyBwbHVnaW4gaXMgbWVyZWx5IGEgd3JhcHBlciBhcm91bmQgdGhlIDxjb2RlPnh0X2pzbG9hZGVyOjpyZW5kZXI8L2NvZGU+IEFQSSBmdW5jdGlvbi48L2xpPg0KICAgICAgPGxpPlRoZSA8Y29kZT54dF9qc2xvYWRlcjo6cmVuZGVyPC9jb2RlPiBBUEkgZnVuY3Rpb24gaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgZm9yIGFkbWluIGFjdGlvbnMgaW4gbW9kdWxlcyB0aGF0IGluaGVyaXQgZnJvbSBDTVNNU0V4dC4gIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIHVzZSAmbGJyYWNlO3h0anNfcmVxdWlyZX0sICZsYnJhY2U7eHRqc19hZGRjc3N9IGFuZCAmbGJyYWNlO3h0anNfYWRkanN9IGluIGFueSBhZG1pbiBzaWRlIGFjdGlvbiBpbiBhbnkgb2YgbXkgbW9kdWxlcy48L2xpPg0KICAgICAgPGxpPkluIGFkbWluIHNpZGUgYWN0aW9ucywgYmVjYXVzZSB0aGUgQ01TTVMgYWRtaW4gdGhlbWUgPGVtPihPbmVFbGV2ZW4sIGFuZCBOQ2xlYW5HcmV5KTwvZW0+IGF1dG9tYXRpY2FsbHkgaW5jbHVkZSBKUXVlcnksIGFuZCBKUXVlcnkgVUksIHRoZXNlIGxpYnJhcmllcyA8ZW0+KGpxdWVyeSwgdWkpPC9lbT4gYXJlIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gdGhlIGV4Y2x1ZGUgbGlzdC48L2xpPg0KICAgICAgPGxpPkluIGZyb250ZW5kIHBhZ2UgdGVtcGxhdGVzLCBJIHJlY29tbWVuZCBhZGRpbmcgdGhpcyB0YWcgdG8gdGhlIGJvdHRvbSBvZiB0aGUgJmx0O2hlYWQmZ3Q7IHRhZyBzbyB0aGF0ICZsYnJhY2U7eHRqc19yZXF1aXJlfSwgJmxicmFjZTt4dGpzX2FkZH0gYW5kICZsYnJhY2U7eHRjc3NfYWRkfSBjYW4gYmUgY2FsbGVkIGFueXdoZXJlIGluIG1vZHVsZSBhY3Rpb24gdGVtcGxhdGVzLCBwYWdlIHRlbXBsYXRlcywgZXRjLjwvbGk+DQogICAgPC91bD4NCiAgICA8L2Rpdj4NCiAgPC9saT4NCiAgICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO2NoZWNrX3Nlc3Npb25fc3RhdHVzfSA8c3BhbiBjbGFzcz0ic21hbGwiPkNoZWNrcyB0aGUgc2Vzc2lvbiBleHBpcmF0aW9uIHN0YXR1cyA8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPihuZXcpPC9zcGFuPjwvc3Bhbj48L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+IDxwPkEgc21hcnR5IHBsdWdpbiB1c2VkIHRvIGNoZWNrIHRoZSBzZXNzaW9uIGV4cGlyYXRpb24gc3RhdHVzLCBkaXNwbGF5IGEgY291bnRkb3duIHRpbWVyIHRvIHRoZSB1c2VyIGFuZCBkaXNwbGF5IGEgbWVzc2FnZSBvciBhIHRvYXN0IHRvIHRoZSB1c2VyIGlmIGFuZCB3aGVuIHRoZSBzZXNzaW9uIGhhcyBleHBpcmVkLiBFeGNlcHQgZm9yIHRoZSBzY3JpcHQgdGhhdCBpcyBnZW5lcmF0ZWQgYnkgdGhpcyBwbHVnaW4sIHRoZSByZXN0IG9mIGh0bWwgYW5kIGNzcyBhcmUgb3B0aW9uYWwgYW5kIGNhbiBiZSBjdXN0b21pemVkIG9yIG92ZXJyaWRkZW4uPC9wPg0KICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPjxiPnNlc3Npb25fY2hlY2tfaW50ZXJ2YWw8L2I+IC0gKGludGVnZXIsIG9wdGlvbmFsKTogVGhlIGludGVydmFsIChpbiBzZWNvbmRzKSBhdCB3aGljaCB0aGUgc2Vzc2lvbiBzdGF0dXMgaXMgY2hlY2tlZC4gRGVmYXVsdCB2YWx1ZSBpcyAxIHNlY29uZC48L2xpPg0KICAgICAgICA8bGk+PGI+dG9hc3RfZGlzcGxheV9pbnRlcnZhbDwvYj4gLSAoaW50ZWdlciwgb3B0aW9uYWwpOiBUaGUgZHVyYXRpb24gKGluIHNlY29uZHMpIGZvciB3aGljaCB0aGUgdG9hc3QgbWVzc2FnZSBpcyBkaXNwbGF5ZWQuIERlZmF1bHQgdmFsdWUgaXMgMTAgc2Vjb25kcy48L2xpPg0KICAgICAgICA8bGk+PGI+dXNlX3RvYXN0PC9iPiAtIChpbnRlZ2VyLCBvcHRpb25hbCk6IEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHVzZSB0b2FzdCBmb3IgZGlzcGxheWluZyB0aGUgc2Vzc2lvbiBleHBpcmVkIG1lc3NhZ2UuIFNldCB0byAxIGZvciB0cnVlLCAwIGZvciBmYWxzZS4gRGVmYXVsdCB2YWx1ZSBpcyAxLjwvbGk+DQogICAgICAgIDxsaT48Yj51c2VfY3VzdG9tX2h0bWw8L2I+IC0gKGludGVnZXIsIG9wdGlvbmFsKTogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gdXNlIGN1c3RvbSBIVE1MIGZvciBzZXNzaW9uIHN0YXR1cyBkaXNwbGF5LiBTZXQgdG8gMSBmb3IgdHJ1ZSwgMCBmb3IgZmFsc2UuIERlZmF1bHQgdmFsdWUgaXMgMC48L2xpPg0KICAgICAgICA8bGk+PGI+dXNlX2N1c3RvbV9jc3M8L2I+IC0gKGludGVnZXIsIG9wdGlvbmFsKTogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gdXNlIGN1c3RvbSBDU1MgZm9yIHNlc3Npb24gc3RhdHVzIGRpc3BsYXkuIFNldCB0byAxIGZvciB0cnVlLCAwIGZvciBmYWxzZS4gRGVmYXVsdCB2YWx1ZSBpcyAwLjwvbGk+DQogICAgICAgIDxsaT48Yj5jb3VudGVyX2lkPC9iPiAtIChzdHJpbmcsIG9wdGlvbmFsKTogVGhlIElEIGF0dHJpYnV0ZSBmb3IgdGhlIGNvdW50ZG93biB0aW1lciBlbGVtZW50LiBEZWZhdWx0IHZhbHVlIGlzICdzZXNzaW9uX3N0YXR1c19jb3VudGRvd24nLjwvbGk+DQogICAgICAgIDxsaT48Yj5jb3VudGVyX2NsYXNzPC9iPiAtIChzdHJpbmcsIG9wdGlvbmFsKTogVGhlIGNsYXNzIGF0dHJpYnV0ZSBmb3IgdGhlIGNvdW50ZG93biB0aW1lciBlbGVtZW50LiBEZWZhdWx0IHZhbHVlIGlzICdzZXNzaW9uX3N0YXR1c19jb3VudGRvd24nLjwvbGk+DQogICAgICAgIDxsaT48Yj5jb3VudGVyX3NwYW5faWQ8L2I+IC0gKHN0cmluZywgb3B0aW9uYWwpOiBUaGUgSUQgYXR0cmlidXRlIGZvciB0aGUgY291bnRkb3duIHRpbWVyIHNwYW4gZWxlbWVudC4gRGVmYXVsdCB2YWx1ZSBpcyAnc2Vzc2lvbl9zdGF0dXNfY291bnRkb3duX3NwYW4nLjwvbGk+DQogICAgICAgIDxsaT48Yj5jb3VudGVyX3NwYW5fY2xhc3M8L2I+IC0gKHN0cmluZywgb3B0aW9uYWwpOiBUaGUgY2xhc3MgYXR0cmlidXRlIGZvciB0aGUgY291bnRkb3duIHRpbWVyIHNwYW4gZWxlbWVudC4gRGVmYXVsdCB2YWx1ZSBpcyAnc2Vzc2lvbl9zdGF0dXNfY291bnRkb3duX3NwYW4nLjwvbGk+DQogICAgICAgIDxsaT48Yj50b2FzdF9pZDwvYj4gLSAoc3RyaW5nLCBvcHRpb25hbCk6IFRoZSBJRCBhdHRyaWJ1dGUgZm9yIHRoZSB0b2FzdCBlbGVtZW50LiBEZWZhdWx0IHZhbHVlIGlzICdzZXNzaW9uX3N0YXR1c190b2FzdCcuPC9saT4NCiAgICAgICAgPGxpPjxiPnRvYXN0X2NsYXNzPC9iPiAtIChzdHJpbmcsIG9wdGlvbmFsKTogVGhlIGNsYXNzIGF0dHJpYnV0ZSBmb3IgdGhlIHRvYXN0IGVsZW1lbnQuIERlZmF1bHQgdmFsdWUgaXMgJ3Nlc3Npb25fc3RhdHVzX3RvYXN0Jy48L2xpPg0KICAgICAgICA8bGk+PGI+bm90aWZpY2F0aW9uX2lkPC9iPiAtIChzdHJpbmcsIG9wdGlvbmFsKTogVGhlIElEIGF0dHJpYnV0ZSBmb3IgdGhlIHNlc3Npb24gZXhwaXJlZCBub3RpZmljYXRpb24gZWxlbWVudC4gRGVmYXVsdCB2YWx1ZSBpcyAnc2Vzc2lvbl9zdGF0dXNfZXhwaXJlZF9hbGVydCcuPC9saT4NCiAgICAgICAgPGxpPjxiPm5vdGlmaWNhdGlvbl9jbGFzczwvYj4gLSAoc3RyaW5nLCBvcHRpb25hbCk6IFRoZSBjbGFzcyBhdHRyaWJ1dGUgZm9yIHRoZSBzZXNzaW9uIGV4cGlyZWQgbm90aWZpY2F0aW9uIGVsZW1lbnQuIERlZmF1bHQgdmFsdWUgaXMgJ3Nlc3Npb25fc3RhdHVzX2FsZXJ0Jy48L2xpPg0KICAgICAgICA8bGk+PGI+YWxlcnRfbWVzc2FnZV9pZDwvYj4gLSAoc3RyaW5nLCBvcHRpb25hbCk6IFRoZSBJRCBhdHRyaWJ1dGUgZm9yIHRoZSBhbGVydCBtZXNzYWdlIGVsZW1lbnQgd2l0aGluIHRoZSBub3RpZmljYXRpb24uIERlZmF1bHQgdmFsdWUgaXMgJ2FsZXJ0X21lc3NhZ2UnLjwvbGk+DQogICAgICAgIDxsaT48Yj5lbmRfc2Vzc2lvbl9tZXNzYWdlPC9iPiAtIChzdHJpbmcsIG9wdGlvbmFsKTogVGhlIG1lc3NhZ2UgdG8gZGlzcGxheSB3aGVuIHRoZSBzZXNzaW9uIGhhcyBleHBpcmVkLiBEZWZhdWx0IHZhbHVlIGlzICdZb3VyIHNlc3Npb24gaGFzIGV4cGlyZWQuIFBsZWFzZSByZWZyZXNoIHRoZSBwYWdlIHRvIGNvbnRpbnVlLicuPC9saT4NCiAgICAgICAgPGxpPjxiPmN1c3RvbV9jYWxsYmFjazwvYj4gLSAoc3RyaW5nLCBvcHRpb25hbCk6IFRoZSBuYW1lIG9mIGEgY3VzdG9tIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIHNlc3Npb24gZXhwaXJlcy4gRGVmYXVsdCB2YWx1ZSBpcyBhbiBlbXB0eSBzdHJpbmcuPC9saT4NCiAgICAgIDwvdWw+DQogICAgPC9kaXY+DQogIDwvbGk+DQogICAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTtyZXN0cmljdF9ieV9pcF9saXN0fSA8c3BhbiBjbGFzcz0ic21hbGwiPnJlc3RyaWN0cyBhY2Nlc3MgYnkgSVAgYWRkcmVzcy4gPHNwYW4gc3R5bGU9ImNvbG9yOmdyZWVuIj4obmV3KTwvc3Bhbj48L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPiA8cD5BIHNtYXJ0eSBwbHVnaW4gdXNlZCB0byByZXN0cmljdCBhY2Nlc3MgYnkgYSBzaW5nbGUgSVAgYWRkcmVzcyBvciBhIGxpc3Qgb2YgdGhlbSBiZSBpdCBJUFY0IG9yIElQVjYuIFRocm93cyBhIDxiPkNtc0Vycm9yNDAzRXhjZXB0aW9uPC9iPiBleGNlcHRpb24gd2hpY2ggd2lsbCByZWRpcmVjdCB0byBhIENNU01TIGN1c3RvbSBwYWdlIGlmIHNldCwgb3IgYSBob3N0IGN1c3RvbSBwYWdlIGlmIG5vdC4gQ2FuIGJlIHVzZWQgb24gYSB0ZW1wbGF0ZSBvciBvbiBhIHBhZ2UuPC9wPg0KICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICA8bGk+PGI+bGlzdDwvYj4gLSAoc3RyaW5nIG9yIGFycmF5KSBBbiBhcnJheSBvZiBJUCBhZGRyZXNzZXMgb3IgYSBzaW5nbGUgSVAgYWRkcmVzcy48L2xpPg0KICAgICAgPC91bD4NCiAgICA8L2Rpdj4NCiAgPC9saT4NCiAgPC91bD4NCnsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8aDM+VGFiIEZ1bmN0aW9uczo8L2gzPg0KICA8cCBzdHlsZT0iY29sb3I6IHJlZDsiPkRlcHJlY2F0ZWQhIFRoZSBjb3JlIG5vdyBoYXMgdGhlIGZ1bmN0aW9uYWxpdHkgYnVpbHQgaW4uPC9wPg0KICA8cD5UaGlzIG1vZHVsZSBwcm92aWRlcyBzb21lIHNtYXJ0eSBwbHVnaW5zIHRvIGFzc2lzdCBpbiBidWlsZGluZyB0YWJiZWQgb3V0cHV0IGluIGFkbWluIHNpZGUgdGVtcGxhdGVzLiAgVGhpcyBhaWRzIGluIGZ1cnRoZXIgc2VwYXJhdGluZyB0aGUgZGlzcGxheSBpc3N1ZXMgZnJvbSBsb2dpYyBpc3N1ZXMuPC9wPg0KICA8aDQ+RXhhbXBsZTo8L2g0Pg0KICA8cHJlIGNsYXNzPSJjbGljay10by1jb3B5IiB0aXRsZT0iQ2xpY2sgdG8gY29weSB0byBjbGlwYm9hcmQiPiAgJmxicmFjZTt4dF9zdGFydF90YWJzfQ0KICAmbGJyYWNlO3h0X3RhYmhlYWRlciBuYW1lPSd0YWIxJyBsYWJlbD0nVGFiIE9uZSd9DQogICZsYnJhY2U7eHRfdGFiaGVhZGVyIG5hbWU9J3RhYjInIGxhYmVsPSdUYWIgVHdvJ30NCiAgJmxicmFjZTt4dF90YWJjb250ZW50X3N0YXJ0IG5hbWU9J3RhYjEnfQ0KICAgICZsdDtwJmd0O0NvbnRlbnQgZm9yIHRhYiBvbmUmbHQ7L3AmZ3Q7DQogICZsYnJhY2U7eHRfdGFiY29udGVudF9lbmR9JmxicmFjZTsqIG5vdCBuZWNlc3NhcnksIGJ1dCBwcm92aWRlZCBmb3IgY29tcGxldGVuZXNzICp9DQogICZsYnJhY2U7eHRfdGFiY29udGVudF9zdGFydCBuYW1lPSd0YWIyJ30NCiAgICAmbHQ7cCZndDtDb250ZW50IGZvciB0YWIgdHdvJmx0Oy9wJmd0Ow0KICAmbGJyYWNlO3h0X2VuZF90YWJzfTwvcHJlPg0KeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIDx1bCBjbGFzcz0iYWNjb3JkaW9uLWxpc3QiPg0KDQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dF9zdGFydF90YWJzfSA8c3BhbiBjbGFzcz0ic21hbGwiPkluZGljYXRlcyB0aGUgc3RhcnQgb2YgdGFiYmVkIG91dHB1dDwvc3Bhbj48L2gzPg0KPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4gPHA+QW4gYWRtaW4gb25seSBzbWFydHkgcGx1Z2luIHVzZWZ1bCBpbiBhZG1pbiB0YWJzIHRvIGluZGljYXRlIHRoZSBzdGFydCBvZiB0YWJiZWQgb3V0cHV0LiAgU2VlIHRoZSBicmllZiBkZW1vIGFib3ZlLjwvcD4NCiAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgIDx1bD4NCiAgICAgICA8bGk+PGI+YXNzaWduPC9iPiAtIChzdHJpbmcpIEFzc2lnbiB0aGUgb3V0cHV0IG9mIHRoaXMgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4NCiAgICAgPC91bD4NCiAgICA8L2Rpdj48L2xpPg0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfdGFiaGVhZGVyIG5hbWU9c3RyaW5nfSA8c3BhbiBjbGFzcz0ic21hbGwiPkluZGljYXRlcyB0aGUgc3RhcnQgb2YgYSB0YWIgaGVhZGVyPC9zcGFuPjwvaDM+DQogICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbS1ib2R5Ij4NCiAgICAgICA8cD5BbiBhZG1pbiBvbmx5IHNtYXJ0eSBwbHVnaW4gdXNlZCB0byBkZW5vdGUgdGhlIHN0YXJ0IG9mIGEgdGFiIGhlYWRlci4gIFNlZSB0aGUgYnJpZWYgZGVtbyBhYm92ZS48L3A+DQogICAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgICAgPHVsPg0KICAgICAgICAgPGxpPjxiPm5hbWU8L2I+IC0gKHN0cmluZykgVGhlIG5hbWUgZm9yIHRoZSB0YWIuICBUaGlzIHNob3VsZCBiZSBhbGwgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIG9yIHVuZGVyc2NvcmUuPC9saT4NCiAgICAgICAgIDxsaT48Yj5sYWJlbDwvYj4gLSAoc3RyaW5nKSBUaGUgaHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIHRoaXMgdGFiLjwvbGk+DQogICAgICAgICA8bGk+PGI+YXNzaWduPC9iPiAtIChzdHJpbmcpIEFzc2lnbiB0aGUgb3V0cHV0IG9mIHRoaXMgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4NCiAgICAgICAgPC91bD4NCiAgICA8L2Rpdj4NCiAgPC9saT4NCiAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIDxsaSBjbGFzcz0iYWNjb3JkaW9uLWxpc3QtaXRlbSI+DQogICAgPGgzIGNsYXNzPSJhbCI+JmxicmFjZTt4dF90YWJjb250ZW50X3N0YXJ0fSA8c3BhbiBjbGFzcz0ic21hbGwiPkluZGljYXRlcyB0aGUgc3RhcnQgb2YgYSB0YWIgY29udGVudDwvc3Bhbj48L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+DQogICAgIDxwPkFuIGFkbWluIG9ubHkgc21hcnR5IHBsdWdpbiB1c2VkIHRvIGRlbm90ZSB0aGUgc3RhcnQgb2YgYSB0YWIgY29udGVudC4gIFNlZSB0aGUgZGVtbyBhYm92ZS48L3A+DQogICAgIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhlIG9yZGVyIG9mIHRoZSB0YWJjb250ZW50cyBtdXN0IG1hdGNoIGV4YWN0bHkgdGhlIG9yZGVyIG9mIHRoZSB0YWIgaGVhZGVycyBzcGVjaWZpZWQuICBBZGRpdGlvbmFsbHksIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gZGVub3RlIHRoZSBlbmRpbmcgb2YgdGhlIHRhYiBoZWFkZXJzLCBhcyB0aGlzIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGZpcnN0IGNhbGwgdG8gJmxicmFjZTt4dF90YWJjb250ZW50X3N0YXJ0fS48L3A+DQogICAgIDxwPlBhcmFtZXRlcnM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgIDxsaT48Yj5uYW1lPC9iPiAtIChzdHJpbmcpIFRoZSBuYW1lIGZvciB0aGUgdGFiLiAgVGhpcyBzaG91bGQgYmUgYWxsIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCBvciB1bmRlcnNjb3JlLjwvbGk+DQogICAgICAgPGxpPjxiPmFzc2lnbjwvYj4gLSAoc3RyaW5nKSBBc3NpZ24gdGhlIG91dHB1dCBvZiB0aGlzIHBsdWdpbiB0byB0aGUgbmFtZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+DQogICAgICA8L3VsPg0KICAgIDwvZGl2Pg0KICA8L2xpPg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgPGxpIGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtIj4NCiAgICA8aDMgY2xhc3M9ImFsIj4mbGJyYWNlO3h0X3RhYmNvbnRlbnRfZW5kfSA8c3BhbiBjbGFzcz0ic21hbGwiPkluZGljYXRlcyB0aGUgZW5kIG9mIGEgdGFiIGNvbnRlbnQ8L3NwYW4+PC9oMz4NCiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tbGlzdC1pdGVtLWJvZHkiPg0KICAgICA8cD5BbiBhZG1pbiBvbmx5IHNtYXJ0eSBwbHVnaW4gdXNlZCB0byBkZW5vdGUgdGhlIGVuZCBvZiBhIHRhYnMgY29udGVudC4gIFNlZSB0aGUgZGVtbyBhYm92ZS48L3A+DQogICAgIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY2FsbCB0aGlzIHBsdWdpbiBmb3IgZWFjaCB0YWIsIGFzIGl0IGlzIGRvbmUgaW1wbGljaXRseSBieSB0aGUgY2FsbCB0byAmbGJyYWNlO3h0X3RhYmNvbnRlbnRfc3RhcnR9IG9yICZsYnJhY2U7eHRfZW5kX3RhYnN9LjwvcD4NCiAgICAgPHA+UGFyYW1ldGVyczo8L3A+DQogICAgIDx1bD4NCiAgICAgICA8bGk+PGI+YXNzaWduPC9iPiAtIChzdHJpbmcpIEFzc2lnbiB0aGUgb3V0cHV0IG9mIHRoaXMgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4NCiAgICAgPC91bD4NCiAgPC9kaXY+DQogIDwvbGk+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICA8bGkgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0iPg0KICAgIDxoMyBjbGFzcz0iYWwiPiZsYnJhY2U7eHRfZW5kX3RhYnN9IDxzcGFuIGNsYXNzPSJzbWFsbCI+SW5kaWNhdGVzIHRoZSBlbmQgb2YgdGFiYmVkIG91dHB1dDwvc3Bhbj48L2gzPg0KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1saXN0LWl0ZW0tYm9keSI+IDxwPkFuIGFkbWluIG9ubHkgc21hcnR5IHBsdWdpbiB1c2VkIHRvIGRlbm90ZSB0aGUgZW5kIG9mIHRhYmJlZCBvdXRwdXQuLi4gIFNlZSB0aGUgZGVtbyBhYm92ZS48L3A+DQogICAgIDxwPlBhcmFtZXRlcnM6PC9wPg0KICAgICAgPHVsPg0KICAgICAgIDxsaT48Yj5hc3NpZ248L2I+IC0gKHN0cmluZykgQXNzaWduIHRoZSBvdXRwdXQgb2YgdGhpcyBwbHVnaW4gdG8gdGhlIG5hbWVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPg0KICAgICAgPC91bD4NCiAgICA8L2Rpdj4NCiAgPC9saT4NCjwvdWw+]]></data>
	</file>
	<file>
	  <filename>/templates/help_smarty_resources_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPlNtYXJ0eSBSZXNvdXJjZXM8L2gzPg0KPHA+Q01TTVNFeHQgcHJvdmlkZXMgdGhlIDxjb2RlPnh0X21vZGZpbGU8L2NvZGU+IHNtYXJ0eSByZXNvdXJjZS4gIFRoaXMgaXMgYSBzcGVjaWFsIHJlc291cmNlLCBzaW1pbGFyIHRvIHRoZSBDTVNNUyBjb3JlIHJlc291cmNlIGNhbGxlZCA8Y29kZT5tb2R1bGVfZmlsZV90cGw8L2NvZGU+IGV4Y2VwdCB0aGF0IGl0IGRvZXMgTk9UIHNlYXJjaCB0aGUgbW9kdWxlX2N1c3RvbSBkaXJlY3RvcnkgZm9yIG1vZHVsZSB0ZW1wbGF0ZXMuPC9wPg0KPHA+VGhpcyByZXNvdXJjZSBpcyB1c2VmdWwgd2hlbiB3YW50aW5nIHRvIHByZXBlbmQgb3IgYXBwZW5kIGNvbnRlbnQgdG8gYSBzdGFuZGFyZCBtb2R1bGUgdGVtcGxhdGUuPC9wPg0KPHA+SW5zdHJ1Y3Rpb25zOjwvcD4NCjx1bD4NCiAgIDxsaT5DcmVhdGUgdGhlIGFwcHJvcHJpYXRlIG1vZHVsZV9jdXN0b20gZGlyZWN0b3J5IGZvciB0aGUgbW9kdWxlIHRoYXQgaGFzIHRoZSB0ZW1wbGF0ZSB5b3Ugd2FudCB0byBlbmhhbmNlDQogICAgPHA+PHByZT48Y29kZT5ta2RpciAtcCBhc3NldHMvbW9kdWxlX2N1c3RvbS8mbHQ7bW9kdWxlX25hbWUmZ3Q7L3RlbXBsYXRlczwvY29kZT48L3ByZT48L3A+DQogICA8L2xpPg0KICAgPGxpPkNyZWF0ZSBhIG5ldyBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZmlsZSB5b3Ugd2FudCB0byBlbmhhbmNlLg0KICAgICAgIDxwPkluIHRoYXQgZmlsZSBhZGQgdGhlIGNvZGUgdGhhdCB5b3Ugd2FudCwgYW5kIGluY2x1ZGUgdGhlIHByaW1hcnkgZmlsZSB1c2luZyB0aGUgPGNvZGU+eHRfbW9kZmlsZTwvY29kZT4gcmVzb3VyY2UuIGkuZS46PC9wPg0KICAgICAgIDxwcmU+PGNvZGU+Jmx0O3N0eWxlJmd0Ow0KdGFibGUgdGJvZHkgdHIuZXZlbiB0ZCAmbGJyYWNlOw0KICAgY29sb3I6IGdyZWVuOw0KfQ0KJmx0Oy9zdHlsZSZndDsNCiZsYnJhY2U7aW5jbHVkZSBmaWxlPSd4dF9tb2RmaWxlOiZsdDttb2R1bGVfbmFtZSZndDs7dXNlcmxpc3QudHBsJ30NCiAgICAgICA8L2NvZGU+PC9wcmU+DQogICA8L2xpPg0KPC91bD4=]]></data>
	</file>
	<file>
	  <filename>/templates/help_using_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+DQo8cD5TdGFydCB5b3VyIG93biBtb2R1bGUgKHdlIHN1Z2dlc3Qgc3RhcnRpbmcgYnkgcmVhZGluZyB0aGUgZ3JlYXQgbW9kdWxlIHdyaXRpbmcgdHV0b3JpYWwgYXZhaWxhYmxlIG9uIHRoZSBDTVNNUyB3ZWJzaXRlKS48L3A+DQo8cD5Zb3UgY2FuIG1ha2UgeW91ciBtb2R1bGUgZGVwZW5kYW50IG9uIDxiPkNNU01TRXh0PC9iPiBhbmQgZXh0ZW5kICB0byBtYWtlIHRoZSBtb3N0IG9mIHdoYXQgdGhlIGV4dGVuc2lvbnMgaGF2ZSB0byBvZmZlci48L3A+DQo8cD5FeGFtcGxlOjwvcD4NCjxwcmUgY2xhc3M9ImNsaWNrLXRvLWNvcHkiIHRpdGxlPSJDbGljayB0byBjb3B5IHRvIGNsaXBib2FyZCI+Y2xhc3MgJmx0O1lvdXJNb2R1bGVDbGFzc05hbWU+IGV4dGVuZHMgXENNU01TRXh0XFhUTW9kdWxlICYjMTIzO30gPC9wcmU+DQo8cD5FdmVuIGlmIHlvdSBkb24ndCBleHRlbmQgdGhlIGNsYXNzIG9uIHlvdXIgbW9kdWxlLCBhbmQgc3RpbGwgd2FudCB0byB1c2Ugc29tZSBvZiB0aGUgbGlicmFyaWVzIHRoYXQgY29tZSB3aXRoIGl0LCB3ZSByZWNvbW1lbmQgeW91IG1ha2UgaXQgYSBkZXBlbmRlbmN5IHRvIG1ha2Ugc3VyZSBDTVNFeHQgaXMgaW5zdGFsbGVkIHRvZ3VldGhlciB3aXRoIHlvdXIgbW9kdWxlPC9wPg0KPHA+VGhlbiB5b3UnbGwgYmUgYWJsZSB0byB1c2UgYSB3aG9sZSByYW5nZSBvZiBsaWJyYXJpZXMgaW5jbHVkZWQgd2l0aCB0aGUgZXh0ZW5zaW9ucy48L3A+DQoNCg==]]></data>
	</file>
	<file>
	  <filename>/templates/help_what_is_new_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgyPldoYXQgaXMgTmV3PC9oMj4NCg0KPHA+SGVyZSdzIHdoYXQgd2UgaGF2ZSBiZWVuIHdvcmtpbmcgb246PC9wPg0KDQo8aDM+V2hhdCdzIG5ldyBpbiAxLjQuMzwvaDM+DQo8dWw+DQogICAgPGxpPk5ldyBQbHVnaW5zOg0KICAgIDx1bD4NCiAgICAgIDxsaT48c3Ryb25nPiYjMTIzO2NoZWNrX3Nlc3Npb25fc3RhdHVzfTwvc3Ryb25nPiAtIENoZWNrcyB0aGUgc2Vzc2lvbiBleHBpcmF0aW9uIHN0YXR1cyB3aXRoIGEgY291bnRkb3duIGFuZCBhIG5vdGlmaWNhdGlvbiBvciB0b2FzdDs8L2xpPg0KICAgICAgPGxpPjxzdHJvbmc+JiMxMjM7cmVzdHJpY3RfYnlfaXBfbGlzdH08L3N0cm9uZz4gLSByZXN0cmljdHMgYWNjZXNzIGJ5IElQIGFkZHJlc3MoZXMpLjs8L2xpPg0KICAgIDwvdWw+DQogIDwvbGk+DQo8L3VsPg0KPGgzPldoYXQncyBuZXcgaW4gMS40LjI8L2gzPg0KPHVsPg0KICA8bGk+TmV3IFBsdWdpbnM6DQogICAgPHVsPg0KICAgICAgPGxpPjxzdHJvbmc+JiMxMjM7eHRfY29va2llX3NldH08L3N0cm9uZz4gLSBTZXQgdmFsdWVzIGluIGNvb2tpZXMgZnJvbSBTbWFydHk7PC9saT4NCiAgICAgIDxsaT5BZGRlZCBhIGZldyBhbGlhc2VzIHRvIHNvbWUgZXhpc3RpbmcgcGx1Z2lucyBzbyB0aGF0IHRoZSBuYW1pbmcgZ290IGEgYml0IG1vcmUgY29uc2lzdGVudDs8L2xpPg0KICAgIDwvdWw+DQogIDwvbGk+DQogIDxsaT5BIG5ldyBhbmQgbW9yZSBvcmdhbml6ZWQgaGVscDs8L2xpPg0KICA8bGk+T2xkIGxlZnRvdmVycyBvZiBwbHVnaW5zIG9uIHRoZSBoZWxwIGhhdmUgYmVlbiByZW1vdmVkOzwvbGk+DQogIDxsaT5EZXByZWNhdGVkIHNvbWUgcGx1Z2lucyB0aGF0IGFyZSBubyBsb25nZXIgbmVlZGVkIG1haW5seSBiZWNhdXNlIHRoZXJlIGFyZSBiZXR0ZXIgcmVwbGFjZW1lbnRzIGZvciB0aGVtOzwvbGk+DQogIDxsaT5OZXcgPHN0cm9uZz5jbGljayB0byBjb3B5PC9zdHJvbmc+IGZlYXR1cmUgb24gY29kZSBzbmlwcGV0cyAocGF5IGF0dGVudGlvbiB0byB0aGUgY3Vyc29yIHdoaWxlIGhvdmVyaW5nIG92ZXIgdGhlIHNuaXBwZXRzKTs8L2xpPg0KICA8bGk+VGhlIG1vZHVsZSBzaG91bGQgYmUgZnVsbHkgUEhQIDguMSBjb21wYXRpYmxlIGJ5IG5vdyB1bmxlc3Mgd2UgbWlzc2VkIHNvbWV0aGluZzs8L2xpPg0KPC91bD4NCg==]]></data>
	</file>
	<file>
	  <filename>/templates/jquery.xt_cmsms.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCQpewogICAgdmFyIGNvbmZpZyA9IHsKICAgICAgICByb290X3VybDogJ3skY29uZmlnLnJvb3RfdXJsfScsCiAgICAgICAgc3NsX3VybDogICd7JGNvbmZpZy5zc2xfdXJsfScsCiAgICAgICAgYWRtaW5fdXJsOiAneyRjb25maWcuYWRtaW5fdXJsfScsCiAgICAgICAgdXBsb2Fkc191cmw6ICd7JGNvbmZpZy5zc2xfdXBsb2Fkc191cmx9JywKICAgICAgICBtYXhfdXBsb2FkX3NpemU6ICd7JGNvbmZpZy5tYXhfdXBsb2FkX3NpemV9JywKICAgICAgICB1cmxfcmV3cml0aW5nOiAneyRjb25maWcudXJsX3Jld3JpdGluZ30nLAogICAgICAgIHBhZ2VfZXh0ZW5zaW9uOiAneyRjb25maWcucGFnZV9leHRlbnNpb259JywKICAgICAgICBxdWVyeV92YXI6ICd7JGNvbmZpZy5xdWVyeV92YXJ9JywKICAgICAgICB0aHVtYnNpemU6IHskbW9kLT5HZXRQcmVmZXJlbmNlKCd0aHVtYm5haWxzaXplJywxNTApfSwKICAgIH07CgogICAgLy8gZ2V0IGEgY29uZmlnIHZhcmlhYmxlLgogICAgJC5mbi5jbXNtc19jb25maWcgPSBmdW5jdGlvbihrZXkpIHsKICAgICAgICBpZiggdHlwZW9mKGNvbmZpZ1trZXldKSAhPSAndW5kZWZpbmVkJyApIHJldHVybiBjb25maWdba2V5XTsKICAgIH07CgogICAgLy8gZGlzcGxheSBhbiBhZG1pbiBlcnJvciB1c2luZyBhZG1pbnRoZW1lIHN0eWxlcwogICAgJC5mbi5jbXNtc19hZG1pbl9lcnJvciA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgdmFyIGVsMSA9ICQoJzxkaXYgY2xhc3M9InBhZ2VlcnJvcmNvbnRhaW5lciIvPicpOwogICAgICAgdmFyIGVsMiA9ICQoJzxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyIvPicpOwogICAgICAgdmFyIGVsMyA9ICQoJzx1bCBjbGFzcz0icGFnZWVycm9yIi8+Jyk7CiAgICAgICBlbDMuYXBwZW5kKCc8bGk+JytzdHIrJzwvbGk+Jyk7CiAgICAgICBlbDIuYXBwZW5kKGVsMyk7CiAgICAgICBlbDEuYXBwZW5kKGVsMik7CiAgICAgICAkKCdib2R5JykuYXBwZW5kKGVsMSk7CiAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgIGVsMS5zbGlkZVVwKDQwMCkucmVtb3ZlKCk7CiAgICAgICB9LCA0MDAwKTsKICAgIH0KCn0oIGpRdWVyeSApKTsKCiQoZnVuY3Rpb24oKXsKICAgICQoJ2lucHV0OnJlcXVpcmVkLHNlbGVjdDpyZXF1aXJlZCcpLmFkZENsYXNzKCdyZXF1aXJlZCcpOwogICAgJCgnaW5wdXRbcmVhZG9ubHldLHNlbGVjdFtyZWFkb25seV0nKS5hZGRDbGFzcygncmVhZG9ubHknKTsKICAgICQoJ2Rpdi5wYWdlY29udGFpbmVyJykudG9vbHRpcCgpOwogICAgJCgnLnh0X3Rvb2x0aXAnKS50b29sdGlwKHsKICAgICAgY29udGVudDogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGRhdGEgPSAkKHRoaXMpLmRhdGEoJ3Rvb2x0aXAnKTsKICAgICAgICBpZiggdHlwZW9mIGRhdGEgPT0gJ3VuZGVmaW5lZCcgfHwgZGF0YS5sZW5ndGggPT0gMCApIHsKICAgICAgICAgIGRhdGEgPSAkKHRoaXMpLm5leHQoJ2Rpdi54dF90b29sdGlwX2RhdGEnKS5odG1sKCk7CiAgCSAgaWYoIHR5cGVvZiBkYXRhID09ICd1bmRlZmluZWQnIHx8IGRhdGEubGVuZ3RoID09IDAgKSB7CgkgICAgZGF0YSA9ICQodGhpcykucHJvcCgndGl0bGUnKTsKCSAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZGF0YTsKICAgICAgfQogICAgfSkKfSk7]]></data>
	</file>
	<file>
	  <filename>/templates/listtemplates.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskbmV3dGVtcGxhdGVsaW5rfTwvcD4KPC9kaXY+Cjx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InBhZ2V0YWJsZSI+CiAgPHRoZWFkPgogICAgPHRyPgogICAgICA8dGggd2lkdGg9Ijc1JSI+eyRuYW1lcHJvbXB0fTwvdGg+CiAgICAgIDx0aD57JGRlZmF1bHRwcm9tcHR9PC90aD4KICAgICAgPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4KICAgICAgPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4KICAgIDwvdHI+CiAgPC90aGVhZD4Ke2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1lbnRyeX0KICAge2N5Y2xlIHZhbHVlcz0icm93MSxyb3cyIiBhc3NpZ249J3Jvd2NsYXNzJ30KICAgPHRyIGNsYXNzPSJ7JHJvd2NsYXNzfSIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPSd7JHJvd2NsYXNzfWhvdmVyJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPSd7JHJvd2NsYXNzfSc7Ij4KICAgICA8dGQ+eyRlbnRyeS0+bmFtZX08L3RkPgogICAgIDx0ZD57JGVudHJ5LT5kZWZhdWx0fTwvdGQ+CiAgICAgPHRkPnskZW50cnktPmVkaXRsaW5rfTwvdGQ+CiAgICAgPHRkPnskZW50cnktPmRlbGV0ZWxpbmt9PC90ZD4KICAgPC90cj4Key9mb3JlYWNofQo8L3RhYmxlPgo=]]></data>
	</file>
	<file>
	  <filename>/templates/lookup_table_list.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPgogIDxhIGhyZWY9InskYWRkX3VybH0iPnt4dGltYWdlIGltYWdlPSdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZid9IHt4dHhfbGFuZygnYWRkX2xrcF9lbnRyeScpfTwvYT4KPC9kaXY+Cgp7aWYgY291bnQoJGl0ZW1zKX0KICA8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSI+CiAgICA8dGhlYWQ+CiAgICAgIDx0cj4KICAgICAgICA8dGggY2xhc3M9InBhZ2VpY29uIj57eHR4X2xhbmcoJ2lkJyl9PC90aD4KICAgICAgICA8dGg+e3h0eF9sYW5nKCduYW1lJyl9PC90aD4KICAgICAgICA8dGg+e3h0eF9sYW5nKCdkZXNjcmlwdGlvbicpfTwvdGg+Cgk8dGggY2xhc3M9InBhZ2VpY29uIj57KiBtb3ZlICp9PC90aD4KCTx0aCBjbGFzcz0icGFnZWljb24iPnsqIG1vdmUgKn08L3RoPgoJPHRoIGNsYXNzPSJwYWdlaWNvbiI+eyogZWRpdCAqfTwvdGg+Cgk8dGggY2xhc3M9InBhZ2VpY29uIj57KiBkZWxldGUgKn08L3RoPgogICAgICA8L3RyPgogICAgPC90aGVhZD4KICAgIDx0Ym9keT4KICAgIHtmb3JlYWNoICRpdGVtcyBhcyAkaXRlbX0KICAgICAgPHRyPgogICAgICAgIDx0ZD57JGl0ZW0tPmlkfTwvdGQ+CiAgICAgICAgPHRkPjxhIGhyZWY9InskaXRlbS0+ZWRpdF91cmx9IiB0aXRsZT0ie3h0eF9sYW5nKCdlZGl0X2xrcGl0ZW0nKX0iPnskaXRlbS0+bmFtZX08L2E+PC90ZD4KICAgICAgICA8dGQ+eyRpdGVtLT5kZXNjcmlwdGlvbnxzdW1tYXJpemV9PC90ZD4KCTx0ZD4KCSAgIHtpZiBpc3NldCgkaXRlbS0+dXBfdXJsKX0KCSAgICAgPGEgaHJlZj0ieyRpdGVtLT51cF91cmx9Ij57eHRpbWFnZSBpbWFnZT0naWNvbnMvc3lzdGVtL3NvcnRfdXAuZ2lmJyBhbHQ9eHR4X2xhbmcoJ21vdmVfdXAnKX08L2E+CgkgICB7L2lmfQoJPC90ZD4KCTx0ZD4KCSAgIHtpZiBpc3NldCgkaXRlbS0+ZG93bl91cmwpfQoJICAgICA8YSBocmVmPSJ7JGl0ZW0tPmRvd25fdXJsfSI+e3h0aW1hZ2UgaW1hZ2U9J2ljb25zL3N5c3RlbS9zb3J0X2Rvd24uZ2lmJyBhbHQ9eHR4X2xhbmcoJ21vdmVfZG93bicpfTwvYT4KCSAgIHsvaWZ9Cgk8L3RkPgoJPHRkPjxhIGhyZWY9InskaXRlbS0+ZWRpdF91cmx9Ij57eHRpbWFnZSBpbWFnZT0naWNvbnMvc3lzdGVtL2VkaXQuZ2lmJyBhbHQ9eHR4X2xhbmcoJ2VkaXRfbGtwaXRlbScpfTwvYT48L3RkPgoJPHRkPjxhIGhyZWY9InskaXRlbS0+ZGVsX3VybH0iIGNsYXNzPSJkZWxfbGtwaXRlbSI+e3h0aW1hZ2UgaW1hZ2U9J2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJyBhbHQ9eHR4X2xhbmcoJ2RlbF9sa3BpdGVtJyl9PC9hPjwvdGQ+CiAgICAgIDwvdHI+CiAgICB7L2ZvcmVhY2h9CiAgICA8L3Rib2R5PgogIDwvdGFibGU+CnsvaWZ9]]></data>
	</file>
	<file>
	  <filename>/templates/sortablelist.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogc29ydGFibGUgbGlzdCB0ZW1wbGF0ZSAqfQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KdWwuc29ydGFibGVfc2VsZWN0ZWQgewogIG1pbi1oZWlnaHQ6IDEwZW07CiAgbWF4LWhlaWdodDogMjBlbTsKICBvdmVyZmxvdy15OiBhdXRvOwogIGJvcmRlcjogMXB4IHNvbGlkIGdyZWVuOwp9CnVsLnNvcnRhYmxlX21hc3RlciB7CiAgbWluLWhlaWdodDogMTBlbTsKICBtYXgtaGVpZ2h0OiAyMGVtOwogIG92ZXJmbG93LXk6IGF1dG87CiAgYm9yZGVyOiAxcHggc29saWQgYmx1ZTsKfQouc29ydGFibGVfbGlzdCB0ZCB7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9Ci5zb3J0YWJsZV9saXN0IHVsIHsKICBtYXJnaW4tbGVmdDogMTBweCAhaW1wb3J0YW50OwogIG1hcmdpbi1yaWdodDogMTBweCAhaW1wb3J0YW50OwogIHBhZGRpbmctcmlnaHQ6IDEwcHg7CiAgdGV4dC1hbGlnbjogbGVmdDsKfQouc29ydGFibGVfbGlzdCB1bCBsaSB7CiAgbGlzdC1zdHlsZTogbm9uZTsKICBtYXJnaW4tbGVmdDogMTBweDsKICBtYXJnaW4tdG9wOiA1cHg7CiAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgY3Vyc29yOiBtb3ZlOwp9Cjwvc3R5bGU+Cgo8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+CmZ1bmN0aW9uIHNvcnRhYmxlX2xpc3QoX2NvbnRhaW5lcikgewogICAgdmFyIGNvbnRhaW5lciwgc2VsZWN0ZWQsIG1hc3RlciwgdmFsdWVfZmxkOwoKICAgIGNvbnRhaW5lciA9IF9jb250YWluZXI7CiAgICB2YXIgZWxlbWVudF9uYW1lID0gY29udGFpbmVyLmF0dHIoJ2lkJyk7CiAgICBzZWxlY3RlZCA9ICQoJ3VsLnNvcnRhYmxlX3NlbGVjdGVkJyxjb250YWluZXIpOwogICAgbWFzdGVyID0gJCgndWwuc29ydGFibGVfbWFzdGVyJyxjb250YWluZXIpOwogICAgdmFyIHNlbCA9ICdpbnB1dFtuYW1lPSInK2VsZW1lbnRfbmFtZSsnIl0nOwogICAgdmFsdWVfZmxkID0gJChzZWwsY29udGFpbmVyKTsKCiAgICB2YXIgaCA9IE1hdGgubWF4KG1hc3Rlci5oZWlnaHQoKSxzZWxlY3RlZC5oZWlnaHQoKSk7CiAgICB2YXIgdyA9IE1hdGgubWF4KG1hc3Rlci53aWR0aCgpLHNlbGVjdGVkLndpZHRoKCkpOwogICAgc2VsZWN0ZWQuaGVpZ2h0KGgpOyBtYXN0ZXIuaGVpZ2h0KGgpOwogICAgaWYoIHcgPiAwICkgewogICAgICAgIHNlbGVjdGVkLndpZHRoKHcpOyBtYXN0ZXIud2lkdGgodyk7CiAgICB9CiAgICBzZWxlY3RlZC5zb3J0YWJsZSh7CiAgICAgICBjb25uZWN0V2l0aDogbWFzdGVyLAogICAgICAgdXBkYXRlOiBmdW5jdGlvbiggZXYsIHVpICkgewogICAgICAgICAgY29uc29sZS5kZWJ1ZygnaW4gc2VsZWN0dGVkIHVwZGF0ZScpOwogICAgICAgICAgaWYoIHskbWF4X3NlbGVjdGVkfSA+IDAgJiYgJCgnbGknLHRoaXMpLmxlbmd0aCA+IHskbWF4X3NlbGVjdGVkfSApIHsKICAgICAgICAgICAgICQodWkuc2VuZGVyKS5zb3J0YWJsZSgnY2FuY2VsJyk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKCSAgICAgdmFyIHNlbCA9IFtdOwoJICAgICAkKCdsaScsdGhpcykuZWFjaChmdW5jdGlvbigpewoJICAgICAgICB2YXIga2V5ID0gJCh0aGlzKS5kYXRhKCdrZXknKTsKCQlzZWwucHVzaChrZXkpOwoJICAgICB9KTsKCSAgICAgdmFsdWVfZmxkLnZhbChzZWwuam9pbigpKTsKICAgICAgICAgIH0KICAgICAgIH0KICAgIH0pOwogICAgbWFzdGVyLnNvcnRhYmxlKHsKICAgICAgIGNvbm5lY3RXaXRoOiBzZWxlY3RlZAogICAgfSk7Cn07CgokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICB2YXIgY29udCA9ICQoJyN7JHNlbGVjdGFyZWFfcHJlZml4fScpOwogICB2YXIgbXlfc29ydGFibGVfbGlzdCA9IG5ldyBzb3J0YWJsZV9saXN0KGNvbnQpOwp9KTsKPC9zY3JpcHQ+Cgp7KiBub3RlOiAkc2VsZWN0YXJlYV9wcmVmaXggY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGlucHV0IGVsZW1lbnQgdGhhdCBtdXN0IGV4aXN0L2JlIGNyZWF0ZWQgb24gZm9ybSBzdWJtaXQuCiAgICAgICAgIE9uIHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIHRoaXMgZmllbGQgbXVzdCBjb250YWluIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBrZXlzLgogICAgICAgICAkc2VsZWN0YXJlYV9zZWxlY3RlZCBpcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBrZXlzIGFuZCB2YWx1ZXMgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbS4KCSAkc2VsZWN0YXJlYV9zZWxlY3RlZF9zdHIgaXMgYSBzdHJpbmcgY29uc2lzdGluZyBvZiBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGN1cnJlbnRseSBzZWxlY3RlZCBrZXlzLgoqfQo8ZGl2IGNsYXNzPSJzb3J0YWJsZV9saXN0IiBpZD0ieyRzZWxlY3RhcmVhX3ByZWZpeH0iPgogIDx0YWJsZT4KICA8dHI+CiAgICA8dGQ+eyRsYWJlbF9sZWZ0fTwvdGQ+CiAgICA8dGQ+eyRsYWJlbF9yaWdodH08L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkIHZhbGlnbj0idG9wIj4KICAgICAgeyogbGVmdCBjb2x1bW4gLSBmb3IgdGhlIHNlbGVjdGVkIGl0ZW1zICp9CiAgICAgIDx1bCBjbGFzcz0ic29ydGFibGVfc2VsZWN0ZWQiIHRpdGxlPSJ7JHh0LT5MYW5nKCdzb3J0YWJsZWxpc3Rfc2VsZWN0bGlzdCcpfSI+CiAgICAgIHtpZiBpc3NldCgkc2VsZWN0YXJlYV9zZWxlY3RlZCl9CiAgICAgICAge2ZvcmVhY2ggJHNlbGVjdGFyZWFfc2VsZWN0ZWQgYXMgJGtleSA9PiAkdmFsfQogICAgICAgICAgPGxpIGRhdGEta2V5PSJ7JGtleX0iPnskdmFsfTwvbGk+CiAgICAgICAgey9mb3JlYWNofQogICAgICB7L2lmfQogICAgICA8L3VsPgogICAgPC90ZD4KICAgIDx0ZCB2YWxpZ249InRvcCI+CiAgICAgIHsqIHJpZ2h0IGNvbHVtbiAtIGZvciB0aGUgbWFzdGVyIGxpc3QgKn0KICAgICAgPHVsIGNsYXNzPSJzb3J0YWJsZV9tYXN0ZXIiIHRpdGxlPSJ7JHh0LT5MYW5nKCdzb3J0YWJsZWxpc3RfbWFzdGVybGlzdCcpfSI+CiAgICAgIHtmb3JlYWNoICRzZWxlY3RhcmVhX21hc3Rlcmxpc3QgYXMgJGtleSA9PiAkdmFsfQogICAgICAgIHtpZiAhaXNzZXQoJHNlbGVjdGFyZWFfc2VsZWN0ZWQpIHx8ICFpc3NldCgkc2VsZWN0YXJlYV9zZWxlY3RlZFska2V5XSl9CiAgICAgICAgICA8bGkgZGF0YS1rZXk9Inska2V5fSI+eyR2YWx9PC9saT4KCXsvaWZ9CiAgICAgIHsvZm9yZWFjaH0KICAgICAgPC91bD4KICAgIDwvdGQ+CiAgPC90cj4KICA8L3RhYmxlPgogIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGNsYXNzPSJzb3J0YWJsZV92YWwiIG5hbWU9Inskc2VsZWN0YXJlYV9wcmVmaXh9IiB2YWx1ZT0ieyRzZWxlY3RhcmVhX3NlbGVjdGVkX3N0cn0iLz4KPC9kaXY+IHsqIC5zb3J0YWJsZV9saXN0ICp9Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/verify_modules.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCd2ZXJpZnlfbW9kdWxlX2ludGVncml0eScpfTo8L2gzPgoKPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPgogIDxhIGhyZWY9InskcmV0dXJuX3VybH0iPnt4dGltYWdlIGltYWdlPSdpY29ucy9zeXN0ZW0vYmFjay5naWYnIGFsdD0kbW9kLT5MYW5nKCdyZXR1cm4nKX0geyRtb2QtPkxhbmcoJ3JldHVybicpfTwvYT4KPC9kaXY+Cgo8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSI+CiAgPHRoZWFkPgogICAgPHRyPgogICAgICA8dGg+e2xhbmcoJ21vZHVsZScpfTwvdGg+CiAgICAgIDx0aD57bGFuZygndmVyc2lvbicpfTwvdGg+CiAgICAgIDx0aD57bGFuZygnc3RhdHVzJyl9PC90aD4KICAgICAgPHRoPjxzcGFuIHRpdGxlPSJ7JG1vZC0+TGFuZygndGl0bGVfdnJmeV9jaGVja3N1bScpfSI+eyRtb2QtPkxhbmcoJ2NoZWNrc3VtJyl9PC90aD4KICAgIDwvdHI+CiAgPC90aGVhZD4KICA8dGJvZHk+CiAge2ZvcmVhY2ggJHJlcG9ydF9kYXRhIGFzICRyb3d9CiAgICB7Y3ljbGUgdmFsdWVzPSdyb3cxLHJvdzInIGFzc2lnbj0ncm93Y2xhc3MnfQogICAgPHRyIGNsYXNzPSJ7JHJvd2NsYXNzfSI+CiAgICAgIDx0ZD57JHJvdy5tb2R1bGV9PC90ZD4KICAgICAgPHRkPnskcm93LnZlcnNpb259PC90ZD4KICAgICAgPHRkPgogICAgICAgIHtpZiAkcm93LnN0YXR1cyA9PSAtMX0KCSAge3h0aW1hZ2UgaW1hZ2U9J2ljb25zL3N5c3RlbS93YXJuaW5nLmdpZicgYWx0PSRtb2QtPkxhbmcoJ3N0YXRfdnJmeV9ub2RhdGEnKX0KCXtlbHNlaWYgJHJvdy5zdGF0dXMgPT0gMH0KCSAge3h0aW1hZ2UgaW1hZ2U9J2ljb25zL3N5c3RlbS9zdG9wLmdpZicgYWx0PSRtb2QtPkxhbmcoJ3N0YXRfdnJmeV9mYWlsZWQnKX0KCXtlbHNlaWYgJHJvdy5zdGF0dXMgPT0gMX0KCSAge3h0aW1hZ2UgaW1hZ2U9J2ljb25zL3N5c3RlbS90cnVlLmdpZicgYWx0PSRtb2QtPkxhbmcoJ3N0YXRfdnJmeV9wYXNzZWQnKX0KICAgICAgICB7L2lmfQogICAgICA8dGQgc3R5bGU9ImZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Ij57JHJvdy5jaGVja3N1bX08L3RkPgogICAgPC90cj4KICAgIHtpZiAkcm93Lm1lc3NhZ2V9CiAgICA8dHIgY2xhc3M9Inskcm93Y2xhc3N9Ij4KICAgICAgPHRkPjwvdGQ+CiAgICAgIDx0ZCBjb2xzcGFuPSIzIj57JHJvdy5tZXNzYWdlfTwvdGQ+CiAgICA8L3RyPgogICAgey9pZn0KICB7L2ZvcmVhY2h9CiAgPC90Ym9keT4KPC90YWJsZT4K]]></data>
	</file>
	<file>
	  <filename>/testing</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/testing/autoload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRfX2F1dG9sb2FkZXIgPSBmdW5jdGlvbigkY2xhc3NuYW1lKQp7CiAgICAkdG1wID0gc3RyX3JlcGxhY2UoJ1xcJywnLycsJGNsYXNzbmFtZSk7CiAgICAkY2xhc3NuYW1lID0gYmFzZW5hbWUoJHRtcCk7CiAgICAkZm4gPSBkaXJuYW1lKF9fRElSX18pLiIvbGliL2NsYXNzLnskY2xhc3NuYW1lfS5waHAiOwogICAgaWYoIGZpbGVfZXhpc3RzKCRmbikgKSByZXF1aXJlX29uY2UoJGZuKTsKfTsKCnNwbF9hdXRvbG9hZF9yZWdpc3RlcigkX19hdXRvbG9hZGVyKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/testing/test_csvfileresultset.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCnJlcXVpcmVfb25jZSgnLi4vLi4vLi4vaW5jbHVkZS5waHAnKTsKCiRtYXAgPSBhcnJheSgwPT4neWVhcklEJywxPT4ndGVhbUlEJywyPT4nbGdJRCcsMz0+J3BsYXllcklEJyw0PT4nc2FsYXJ5Jyk7CiRxdWVyeSA9IG5ldyBcQ01TTVNFeHRccXVlcnlcY3N2ZmlsZXF1ZXJ5KGFycmF5KCdmaWxlbmFtZSc9Pid0ZXN0X2RhdGEvYmFzZWJhbGxfc2FsYXJpZXMuY3N2Jywnb2Zmc2V0Jz0+MTUwLCdtYXAnPT4kbWFwKSk7CiRycyA9ICRxdWVyeS0+ZXhlY3V0ZSgpOwp3aGlsZSggISRycy0+RU9GKCkgKSB7CiAgICAkb2JqID0gJHJzLT5nZXRfb2JqZWN0KCk7CiAgICBwcmludF9yKCRvYmopOwogICAgJHJzLT5Nb3ZlTmV4dCgpOwp9Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/testing/test_data</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/testing/test_data/baseball_salaries.csv</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eWVhcklELHRlYW1JRCxsZ0lELHBsYXllcklELHNhbGFyeQ0KMTk4NSxCQUwsQUwsbXVycmFlZDAyLDE0NzI4MTkNCjE5ODUsQkFMLEFMLGx5bm5mcjAxLDEwOTAwMDANCjE5ODUsQkFMLEFMLHJpcGtlY2EwMSw4MDAwMDANCjE5ODUsQkFMLEFMLGxhY3lsZTAxLDcyNTAwMA0KMTk4NSxCQUwsQUwsZmxhbmFtaTAxLDY0MTY2Nw0KMTk4NSxCQUwsQUwsYm9kZGltaTAxLDYyNTAwMA0KMTk4NSxCQUwsQUwsc3Rld2FzYTAxLDU4MTI1MA0KMTk4NSxCQUwsQUwsbWFydGlkZTAxLDU2MDAwMA0KMTk4NSxCQUwsQUwscm9lbmlnYTAxLDU1ODMzMw0KMTk4NSxCQUwsQUwsbWNncmVzYzAxLDU0NzE0Mw0KMTk4NSxCQUwsQUwsZGVtcHNyaTAxLDUxMjUwMA0KMTk4NSxCQUwsQUwsZ3Jvc3N3YTAxLDQ4MzMzMw0KMTk4NSxCQUwsQUwsZGF1ZXJyaTAxLDQ4MDAwMA0KMTk4NSxCQUwsQUwsZm9yZGRhMDEsNDUwMDAwDQoxOTg1LEJBTCxBTCxtYXJ0aXRpMDEsNDQwMDAwDQoxOTg1LEJBTCxBTCxkYXZpc3N0MDIsNDM3NTAwDQoxOTg1LEJBTCxBTCxkd3llcmppMDEsMzc1MDAwDQoxOTg1LEJBTCxBTCxub2xhbmpvMDEsMzQxNjY3DQoxOTg1LEJBTCxBTCxzaGVsYmpvMDEsMTMwMDAwDQoxOTg1LEJBTCxBTCxyYXlmb2ZsMDEsMTI4NTAwDQoxOTg1LEJBTCxBTCx5b3VuZ21pMDEsMTIxMDAwDQoxOTg1LEJBTCxBTCxzaGVldGxhMDEsNjAwMDANCjE5ODUsQk9TLEFMLHN0YW5sYm8wMSwxMDc1MDAwDQoxOTg1LEJPUyxBTCxib2dnc3dhMDEsMTAwMDAwMA0KMTk4NSxCT1MsQUwsYXJtYXN0bzAxLDkxNTAwMA0KMTk4NSxCT1MsQUwsZXZhbnNkdzAxLDgwMDAwMA0KMTk4NSxCT1MsQUwscmljZWppMDEsNzc5MjI3DQoxOTg1LEJPUyxBTCxidWNrbmJpMDEsNzQ3NTAwDQoxOTg1LEJPUyxBTCxlYXNsZW1pMDEsNjUwMDAwDQoxOTg1LEJPUyxBTCxjbGVhcm1hMDEsNTgwMDAwDQoxOTg1LEJPUyxBTCxyZW15amUwMSw0ODMzMzMNCjE5ODUsQk9TLEFMLGdlZG1hcmkwMSw0Nzc1MDANCjE5ODUsQk9TLEFMLGtpc29uYnIwMSwzNzAwMDANCjE5ODUsQk9TLEFMLGhvZmZtZ2wwMSwzMzUwMDANCjE5ODUsQk9TLEFMLHN0YXBsZGEwMSwzMjUwMDANCjE5ODUsQk9TLEFMLGh1cnN0YnIwMSwzMDAwMDANCjE5ODUsQk9TLEFMLG1pbGxlcmkwMSwyNzUwMDANCjE5ODUsQk9TLEFMLGJhcnJlbWEwMiwyNzI1MDANCjE5ODUsQk9TLEFMLG5pY2hvcmUwMSwyNjAwMDANCjE5ODUsQk9TLEFMLG9qZWRhYm8wMSwyNDAwMDANCjE5ODUsQk9TLEFMLGJveWRvaTAxLDE3NzUwMA0KMTk4NSxCT1MsQUwsbmlwcGVhbDAxLDE2NTAwMA0KMTk4NSxCT1MsQUwsY3Jhd2ZzdDAxLDE2MDAwMA0KMTk4NSxCT1MsQUwsY2xlbWVybzAyLDE0MDAwMA0KMTk4NSxCT1MsQUwsZ3V0aWVqYTAxLDEzMDAwMA0KMTk4NSxCT1MsQUwsanVyYWtlZDAxLDEyNTAwMA0KMTk4NSxCT1MsQUwsYm9yZGlyaTAxLDExNTAwMA0KMTk4NSxDQUwsQUwsZGVjaW5kbzAxLDExMDAwMDANCjE5ODUsQ0FMLEFMLGphY2tzcmUwMSwxMDU4ODk0DQoxOTg1LENBTCxBTCxib29uZWJvMDEsODgzMDAwDQoxOTg1LENBTCxBTCxjYXJld3JvMDEsODc1MDAwDQoxOTg1LENBTCxBTCxidXJsZXJpMDEsODU2NjY3DQoxOTg1LENBTCxBTCxkb3duaWJyMDEsODA4MzMzDQoxOTg1LENBTCxBTCxzdXR0b2RvMDEsNzUwMDAwDQoxOTg1LENBTCxBTCxoZW5kcmdlMDEsNzM3MDAwDQoxOTg1LENBTCxBTCxncmljaGJvMDEsNzAwMDAwDQoxOTg1LENBTCxBTCx3aXR0bWkwMSw2ODMzMzMNCjE5ODUsQ0FMLEFMLGZvcnNja2UwMSw2MzMzMzMNCjE5ODUsQ0FMLEFMLGhvbGxhYWwwMSw2MjUwMDANCjE5ODUsQ0FMLEFMLGNhbmRlam8wMSw2MTI1MDANCjE5ODUsQ0FMLEFMLHphaG5nZTAxLDU1MDAwMA0KMTk4NSxDQUwsQUwsc2xhdG9qaTAxLDQzNzUwMA0KMTk4NSxDQUwsQUwsbW9vcmVkbzAxLDQwNzUwMA0KMTk4NSxDQUwsQUwsam9uZXNydTAxLDM5MDAwMA0KMTk4NSxDQUwsQUwsYmVuaXFqdTAxLDM2NTAwMA0KMTk4NSxDQUwsQUwsY29yYmVkbzAxLDM2MDAwMA0KMTk4NSxDQUwsQUwsbGFjb3JmcjAxLDM0NjY2Nw0KMTk4NSxDQUwsQUwsc2FuY2hsdTAxLDM0MDAwMA0KMTk4NSxDQUwsQUwsd2lsZm9ybzAxLDI2NjY2Nw0KMTk4NSxDQUwsQUwscm9tYW5ybzAxLDE0NjUwMA0KMTk4NSxDQUwsQUwsc2NvbmlkYTAxLDEzMDAwMA0KMTk4NSxDQUwsQUwscGV0dGlnYTAxLDEyNTAwMA0KMTk4NSxDQUwsQUwsc2Nob2ZkaTAyLDEyMDAwMA0KMTk4NSxDQUwsQUwsY2xpYnVzdDAyLDYwMDAwDQoxOTg1LENBTCxBTCxtY2Nhc2tpMDEsNjAwMDANCjE5ODUsQ0hBLEFMLGNydXpqdTAxLDEyNDIzMzMNCjE5ODUsQ0hBLEFMLHNlYXZldG8wMSwxMTM2MjYyDQoxOTg1LENIQSxBTCxkb3Rzb3JpMDEsOTAwMDAwDQoxOTg1LENIQSxBTCxiYW5uaWZsMDEsODExMjUwDQoxOTg1LENIQSxBTCxidXJuc2JyMDEsNzI3NTAwDQoxOTg1LENIQSxBTCxmaXNrY2EwMSw2ODUwMDANCjE5ODUsQ0hBLEFMLGJhaW5laGEwMSw2NzUwMDANCjE5ODUsQ0hBLEFMLGxhd3J1MDEsNTY1MDAwDQoxOTg1LENIQSxBTCxsb2xsYXRpMDEsNDYzMDAwDQoxOTg1LENIQSxBTCxzcGlsbGRhMDEsMzkwMDAwDQoxOTg1LENIQSxBTCxwYWNpb3RvMDEsMzMzMzMzDQoxOTg1LENIQSxBTCxzYWxhemx1MDEsMzI1MDAwDQoxOTg1LENIQSxBTCxraXR0bHJvMDEsMzAwMDAwDQoxOTg1LENIQSxBTCxqYW1lc2JvMDEsMjY1MDAwDQoxOTg1LENIQSxBTCxoaWxsbWEwMSwyMDAwMDANCjE5ODUsQ0hBLEFMLHdhbGtlZ3IwMSwxOTUwMDANCjE5ODUsQ0hBLEFMLGZsZXRjc2MwMSwxNjUwMDANCjE5ODUsQ0hBLEFMLGhhaXJzamUwMSwxNTAwMDANCjE5ODUsQ0hBLEFMLGFnb3N0anUwMSwxNDc1MDANCjE5ODUsQ0hBLEFMLG5lbHNvZ2UwMSwxMTAwMDANCjE5ODUsQ0hBLEFMLGd1aWxsb3owMSw2MDAwMA0KMTk4NSxDTEUsQUwsdGhvcm5hbjAxLDExMDAwMDANCjE5ODUsQ0xFLEFMLGJseWxlYmUwMSw2NTAwMDANCjE5ODUsQ0xFLEFMLGhhcmdybWkwMSw0NTgzMzMNCjE5ODUsQ0xFLEFMLGZyYW5janUwMSw0NTUwMDANCjE5ODUsQ0xFLEFMLGJ1dGxlYnIwMSw0MjUwMDANCjE5ODUsQ0xFLEFMLGJlcm5hdG8wMSw0MDAwMDANCjE5ODUsQ0xFLEFMLHZ1a292Z2UwMSwzNzUwMDANCjE5ODUsQ0xFLEFMLGF5YWxhYmUwMSwzMDMzMzMNCjE5ODUsQ0xFLEFMLHJ1aGxldmUwMSwyOTUwMDANCjE5ODUsQ0xFLEFMLHRhYmxlcGEwMSwyODUwMDANCjE5ODUsQ0xFLEFMLGVhc3RlamEwMSwyNjUwMDANCjE5ODUsQ0xFLEFMLGJhbmRvY2gwMSwyMjUwMDANCjE5ODUsQ0xFLEFMLGhlYXRvbmUwMSwyMjUwMDANCjE5ODUsQ0xFLEFMLGhhbGxtZTAxLDIxMDAwMA0KMTk4NSxDTEUsQUwsZ2FybGF3YTAxLDIwMDAwMA0KMTk4NSxDTEUsQUwsZmlzY2htaTAxLDE5MDAwMA0KMTk4NSxDTEUsQUwsamFjb2JicjAxLDE0MDAwMA0KMTk4NSxDTEUsQUwsd2FkZGV0bzAxLDEyNTAwMA0KMTk4NSxDTEUsQUwsY2FtYWNlcjAxLDExNTAwMA0KMTk4NSxDTEUsQUwsY2FydGVqbzAxLDExMDAwMA0KMTk4NSxERVQsQUwsZXZhbnNkYTAxLDEwODMzMzMNCjE5ODUsREVULEFMLG1vcnJpamEwMiw4ODUwMDANCjE5ODUsREVULEFMLHBldHJ5ZGEwMSw4NzUwMDANCjE5ODUsREVULEFMLHBhcnJpbGEwMiw3NjY2NjcNCjE5ODUsREVULEFMLGdpYnNva2kwMSw2ODUwMDANCjE5ODUsREVULEFMLGhlcm5kbGEwMSw2NzUwMDANCjE5ODUsREVULEFMLGxlbW9uY2gwMSw2NzAwMDANCjE5ODUsREVULEFMLHdoaXRhbG8wMSw2NzAwMDANCjE5ODUsREVULEFMLGhlcm5hd2kwMSw2NjAwMDANCjE5ODUsREVULEFMLGxvcGV6YXUwMSw1NzUwMDANCjE5ODUsREVULEFMLHdpbGNvbWkwMSw1NTAwMDANCjE5ODUsREVULEFMLHRyYW1tYWwwMSw1MTcxNDMNCjE5ODUsREVULEFMLGxhcG9pZGEwMSwzODAwMDANCjE5ODUsREVULEFMLGJlcmdtZGEwMSwyNjI1MDANCjE5ODUsREVULEFMLGJyb29rdG8wMSwyNTAwMDANCjE5ODUsREVULEFMLGdydWJiam8wMSwyNTAwMDANCjE5ODUsREVULEFMLGJlcmVuanUwMSwyNDAwMDANCjE5ODUsREVULEFMLHRlcnJld2EwMSwxNzc1MDANCjE5ODUsREVULEFMLHNjaGVyYmkwMSwxMDAwMDANCjE5ODUsREVULEFMLGNhc3RpbWEwMiw3NjAwMA0KMTk4NSxLQ0EsQUwsYnJldHRnZTAxLDEwMDAwMDANCjE5ODUsS0NBLEFMLHF1aXNlZGEwMSw5NzUwMDANCjE5ODUsS0NBLEFMLGxlb25hZGUwMSw4NzE0MjkNCjE5ODUsS0NBLEFMLHdpbHNvd2kwMiw4NDM3NTANCjE5ODUsS0NBLEFMLG1jcmFlaGEwMSw4MDAwMDANCjE5ODUsS0NBLEFMLHN1bmRiamkwMSw2MDgzMzMNCjE5ODUsS0NBLEFMLGxhbXBkZTAxLDUzNTAwMA0KMTk4NSxLQ0EsQUwsYmxhY2tidTAyLDQ2NTAwMA0KMTk4NSxLQ0EsQUwsb3J0YWpvMDEsNDUwMDAwDQoxOTg1LEtDQSxBTCx3YXRoYWpvMDEsNDI1MDAwDQoxOTg1LEtDQSxBTCxiZWNrd2pvMDEsMzU4MDAwDQoxOTg1LEtDQSxBTCxwcnlvcmdyMDEsMzE2NjY3DQoxOTg1LEtDQSxBTCxjb25jZW9uMDEsMjUwMDAwDQoxOTg1LEtDQSxBTCxsZWlicmNoMDEsMjI1MDAwDQoxOTg1LEtDQSxBTCxiYWxib3N0MDEsMjA1MDAwDQoxOTg1LEtDQSxBTCxqb25lc2x5MDEsMjAyNTAwDQoxOTg1LEtDQSxBTCxzaGVyaXBhMDEsMTc1MDAwDQoxOTg1LEtDQSxBTCxtb3RsZWRhMDEsMTU1NTAwDQoxOTg1LEtDQSxBTCxzYWJlcmJyMDEsMTUwMDAwDQoxOTg1LEtDQSxBTCxndWJpY21hMDEsMTE1MDAwDQoxOTg1LEtDQSxBTCxqb25lc21pMDIsMTAwMDAwDQoxOTg1LEtDQSxBTCxqYWNrc2RhMDIsOTUwMDANCjE5ODUsTUlOLEFMLHNtYWxscm8wMiw3Mjg1NzENCjE5ODUsTUlOLEFMLGRhdmlzcm8wMiw2NTAwMDANCjE5ODUsTUlOLEFMLGhyYmVra2UwMSw1NjAwMDANCjE5ODUsTUlOLEFMLGNhc3Rpam8wMSw1NTAwMDANCjE5ODUsTUlOLEFMLGJydW5hdG8wMSw0MjUwMDANCjE5ODUsTUlOLEFMLGdhZXR0Z2EwMSw0MTUwMDANCjE5ODUsTUlOLEFMLHZpb2xhZnIwMSwzNzUwMDANCjE5ODUsTUlOLEFMLHNtaXRobWkwMywzMzUwMDANCjE5ODUsTUlOLEFMLGJ1dGNoam8wMSwzMjAwMDANCjE5ODUsTUlOLEFMLGhhdGNobWkwMSwyOTM3NTANCjE5ODUsTUlOLEFMLGVuZ2xlZGEwMSwyMTUwMDANCjE5ODUsTUlOLEFMLHNjaHJva2UwMSwxNTAwMDANCjE5ODUsTUlOLEFMLGxhdWRudGkwMSwxNDUwMDANCjE5ODUsTUlOLEFMLHB1Y2tla2kwMSwxMzAwMDANCjE5ODUsTUlOLEFMLGJ1c2hyYTAxLDEyMDAwMA0KMTk4NSxNSU4sQUwsZmlsc29wZTAxLDEyMDAwMA0KMTk4NSxNSU4sQUwsdGV1ZmV0aTAxLDExMDAwMA0KMTk4NSxNSU4sQUwsYW5kZXJhbDAyLDYyNTAwDQoxOTg1LE1JTixBTCxzYWxhc21hMDEsNjAwMDANCjE5ODUsTUw0LEFMLGNvb3BlY2UwMSwxMTc2MTkwDQoxOTg1LE1MNCxBTCxmaW5nZXJvMDEsMTA2NTAwMA0KMTk4NSxNTDQsQUwsc2ltbW90ZTAxLDEwMDAwMDANCjE5ODUsTUw0LEFMLHlvdW50cm8wMSwxMDAwMDAwDQoxOTg1LE1MNCxBTCxtb2xpdHBhMDEsOTUwMDAwDQoxOTg1LE1MNCxBTCxnYW50bmppMDEsNjg3NTAwDQoxOTg1LE1MNCxBTCxoYWFzbW8wMSw2NzkxNjcNCjE5ODUsTUw0LEFMLGJ1cnJpcmEwMSw1ODEyNTANCjE5ODUsTUw0LEFMLGRhcndpZGEwMSw1NjUwMDANCjE5ODUsTUw0LEFMLG9nbGl2YmUwMSw1NjAwMDANCjE5ODUsTUw0LEFMLHZ1Y2tvcGUwMSw1NDAwMDANCjE5ODUsTUw0LEFMLG1hbm5pcmkwMSw1MTAwMDANCjE5ODUsTUw0LEFMLG1jY2x1Ym8wMSw0ODAwMDANCjE5ODUsTUw0LEFMLHdhaXRzcmkwMSw0NjAwMDANCjE5ODUsTUw0LEFMLG1vb3JlY2gwMiwzNjUwMDANCjE5ODUsTUw0LEFMLHJvbWVyZWQwMSwyOTAwMDANCjE5ODUsTUw0LEFMLGhvdXNlcGEwMiwyMTUwMDANCjE5ODUsTUw0LEFMLHNjaHJvYmkwMSwxMDAwMDANCjE5ODUsTUw0LEFMLGhpZ3VldGUwMSw2MDAwMA0KMTk4NSxOWUEsQUwsd2luZmlkYTAxLDE3OTU3MDQNCjE5ODUsTllBLEFMLGhlbmRlcmkwMSwxNDcwMDAwDQoxOTg1LE5ZQSxBTCxrZW1wc3QwMSwxNDIwMDAwDQoxOTg1LE5ZQSxBTCxncmlmZmtlMDEsMTA3NTAwMA0KMTk4NSxOWUEsQUwsZ3VpZHJybzAxLDkwMDAwMA0KMTk4NSxOWUEsQUwsYmF5bG9kbzAxLDgxMDAwMA0KMTk4NSxOWUEsQUwsd2hpdHNlZDAxLDgwMDAwMA0KMTk4NSxOWUEsQUwscmlnaGVkYTAxLDY4MDAwMA0KMTk4NSxOWUEsQUwsbW9udGVqbzAxLDYzNzUwMA0KMTk4NSxOWUEsQUwsc2hpcmxibzAxLDYzNzUwMA0KMTk4NSxOWUEsQUwsbmlla3JwaDAxLDYwMDAwMA0KMTk4NSxOWUEsQUwscmFuZG93aTAxLDYwMDAwMA0KMTk4NSxOWUEsQUwsd3luZWdidTAxLDU1MDAwMA0KMTk4NSxOWUEsQUwsYmVycmFkYTAxLDQ3NzUwMA0KMTk4NSxOWUEsQUwsbWF0dGlkbzAxLDQ1NTAwMA0KMTk4NSxOWUEsQUwsc2FtcGxiaTAxLDQzNTAwMA0KMTk4NSxOWUEsQUwsaGFzc2VybzAxLDQyNTAwMA0KMTk4NSxOWUEsQUwsYnlzdHJtYTAxLDI1MDAwMA0KMTk4NSxOWUEsQUwsY293bGVqbzAxLDEyMDAwMA0KMTk4NSxOWUEsQUwsbWVhY2hibzAxLDEwMDAwMA0KMTk4NSxPQUssQUwsa2luZ21kYTAxLDEwODc1MDANCjE5ODUsT0FLLEFMLGxhbnNmY2EwMSw5MDAwMDANCjE5ODUsT0FLLEFMLG11cnBoZHcwMSw4NDU4MzMNCjE5ODUsT0FLLEFMLGNvbGxpZGEwMiw3MDAwMDANCjE5ODUsT0FLLEFMLGdyaWZmYWwwMSw2MTAwMDANCjE5ODUsT0FLLEFMLGxhbmdmcmkwMSw2MDgzMzMNCjE5ODUsT0FLLEFMLGpvaG50bzAxLDYwMDAwMA0KMTk4NSxPQUssQUwsYmFrZXJkdTAxLDU3NTAwMA0KMTk4NSxPQUssQUwsbWNjYXRzdDAxLDUyMDAwMA0KMTk4NSxPQUssQUwsaGVhdGhtaTAyLDQyNTAwMA0KMTk4NSxPQUssQUwsYm9jaHRicjAxLDM1MDAwMA0KMTk4NSxPQUssQUwsZGF2aXNtaTAyLDMwNTAwMA0KMTk4NSxPQUssQUwsbm9ycmltaTAxLDI4MzEwNw0KMTk4NSxPQUssQUwsaG93ZWxqYTAxLDI2MjUwMA0KMTk4NSxPQUssQUwscGhpbGx0bzAyLDIyMDAwMA0KMTk4NSxPQUssQUwsdGVsbG10bzAxLDIwNzUwMA0KMTk4NSxPQUssQUwsaGVuZGVzdDAxLDE1MDAwMA0KMTk4NSxPQUssQUwsY29kaXJjaDAxLDE0MTUwMA0KMTk4NSxPQUssQUwsYXRoZXJrZTAxLDEwNzMzMw0KMTk4NSxPQUssQUwscGljY2lybzAxLDEwMDAwMA0KMTk4NSxPQUssQUwsYmlydHN0aTAxLDYwMDAwDQoxOTg1LFNFQSxBTCx0aG9tYWdvMDEsNjkwMDAwDQoxOTg1LFNFQSxBTCxiZWF0dGppMDEsNDcwMDAwDQoxOTg1LFNFQSxBTCxib25uZWJhMDEsNDM3NTAwDQoxOTg1LFNFQSxBTCxjb3dlbmFsMDEsNDAwMDAwDQoxOTg1LFNFQSxBTCx2YW5kZWVkMDEsMzE1MDAwDQoxOTg1LFNFQSxBTCxoZW5kZWRhMDEsMzEwMDAwDQoxOTg1LFNFQSxBTCx6aXNrcmkwMSwyNzI1MDANCjE5ODUsU0VBLEFMLG1vb3JlbWkwMSwyMjgwMDANCjE5ODUsU0VBLEFMLGRhdmlzYWwwMSwyMjUwMDANCjE5ODUsU0VBLEFMLGtlYXJuYm8wMSwxODMwMDANCjE5ODUsU0VBLEFMLHBoZWxwa2UwMSwxODAwMDANCjE5ODUsU0VBLEFMLHBlcmNvamEwMSwxNzUwMDANCjE5ODUsU0VBLEFMLGxhbmdzbWEwMSwxNjAwMDANCjE5ODUsU0VBLEFMLHlvdW5nbWEwMSwxNTkwMDANCjE5ODUsU0VBLEFMLGJyYWRscGgwMSwxMjUwMDANCjE5ODUsU0VBLEFMLG93ZW5zcDAxLDExNDQwMA0KMTk4NSxTRUEsQUwsbnVuZXplZDAxLDk3MDAwDQoxOTg1LFNFQSxBTCxwcmVzbGppMDEsNzE2MDANCjE5ODUsVEVYLEFMLHdhcmRnYTAxLDcyMDAwMA0KMTk4NSxURVgsQUwsam9obnNjbDAxLDY4MzMzMw0KMTk4NSxURVgsQUwsaGFycmF0bzAxLDY1MDAwMA0KMTk4NSxURVgsQUwsaG91Z2hjaDAxLDYzNjY2Nw0KMTk4NSxURVgsQUwsdGFuYW5mcjAxLDU5MDAwMA0KMTk4NSxURVgsQUwsaG9vdG9idTAxLDU2NTAwMA0KMTk4NSxURVgsQUwscGFycmlsYTAxLDU2MDAwMA0KMTk4NSxURVgsQUwsc3Rld2FkYTAxLDUwNTAwMA0KMTk4NSxURVgsQUwsd3JpZ2hnZTAzLDQwMDAwMA0KMTk4NSxURVgsQUwsYmFubmlhbDAxLDM1MDAwMA0KMTk4NSxURVgsQUwsc2NobWlkYTAxLDM0NDAwMA0KMTk4NSxURVgsQUwscm96ZW1kYTAxLDMxMDAwMA0KMTk4NSxURVgsQUwsc3RlaW5iaTAyLDI1MDAwMA0KMTk4NSxURVgsQUwsbm9sZXNkaTAxLDIzNTAwMA0KMTk4NSxURVgsQUwsc2xhdWdkbzAxLDIxNTAwMA0KMTk4NSxURVgsQUwsd2Fsa2VkdTAxLDE4NTAwMA0KMTk4NSxURVgsQUwsb2JyaWVwZTAzLDE2NTAwMA0KMTk4NSxURVgsQUwsdG9sbGV3YTAxLDEzNTAwMA0KMTk4NSxURVgsQUwsam9uZXNibzAyLDExNzUwMA0KMTk4NSxURVgsQUwsbWNkb3dvZDAxLDYwMDAwDQoxOTg1LFRPUixBTCxzdGllYmRhMDEsMTAwMDAwMA0KMTk4NSxUT1IsQUwsYWxleGFkbzAxLDg3NTAwMA0KMTk4NSxUT1IsQUwsY2F1ZGliaTAxLDgzMzMzMw0KMTk4NSxUT1IsQUwsZ2FyY2lkYTAxLDc0MDAwMA0KMTk4NSxUT1IsQUwsdXBzaGF3aTAxLDczMDAwMA0KMTk4NSxUT1IsQUwsbW9zZWJsbDAxLDU4NzUwMA0KMTk4NSxUT1IsQUwsY2xhbmNqaTAxLDU4MDAwMA0KMTk4NSxUT1IsQUwsbGF2ZWxnYTAxLDQ3NTAwMA0KMTk4NSxUT1IsQUwsd2hpdHRlcjAxLDM3MDAwMA0KMTk4NSxUT1IsQUwsbWFydGlidTAxLDM1NjMwMA0KMTk4NSxUT1IsQUwsYnVycm9qZTAxLDM1MDAwMA0KMTk4NSxUT1IsQUwsYmVsbGdlMDIsMzM1MDAwDQoxOTg1LFRPUixBTCxiYXJmaWplMDEsMzI1MDAwDQoxOTg1LFRPUixBTCxtdWxsaXJhMDEsMzI1MDAwDQoxOTg1LFRPUixBTCxpb3JnZ2EwMSwyNTY2NjcNCjE5ODUsVE9SLEFMLG1hdHVzbGUwMSwxODUwMDANCjE5ODUsVE9SLEFMLGFja2VyamkwMSwxNzAwMDANCjE5ODUsVE9SLEFMLGtleWppMDEsMTMxMjUwDQoxOTg1LFRPUixBTCxmZXJuYXRvMDEsMTI3NTAwDQoxOTg1LFRPUixBTCxoZW5rZXRvMDEsNjAwMDANCjE5ODUsQVRMLE5MLG11cnBoZGEwNSwxNjI1MDAwDQoxOTg1LEFUTCxOTCxob3JuZWJvMDEsMTUwMDAwMA0KMTk4NSxBVEwsTkwsc3V0dGVicjAxLDEzNTQxNjcNCjE5ODUsQVRMLE5MLGJhcmtlbGUwMSw4NzAwMDANCjE5ODUsQVRMLE5MLGNoYW1iY2gwMSw4MDAwMDANCjE5ODUsQVRMLE5MLHdhc2hpY2wwMSw4MDAwMDANCjE5ODUsQVRMLE5MLG11bXBoamUwMSw3NzUwMDANCjE5ODUsQVRMLE5MLGdhcmJlZ2UwMSw3NzIwMDANCjE5ODUsQVRMLE5MLHJhbWlycmEwMSw3NTAwMDANCjE5ODUsQVRMLE5MLGNhbXByaTAxLDYzMzMzMw0KMTk4NSxBVEwsTkwsY2Vyb25yaTAxLDYyNTAwMA0KMTk4NSxBVEwsTkwsb2JlcmtrZTAxLDYxNjY2Nw0KMTk4NSxBVEwsTkwsYmVkcm9zdDAxLDU1MDAwMA0KMTk4NSxBVEwsTkwsYmVuZWRicjAxLDU0NTAwMA0KMTk4NSxBVEwsTkwsZm9yc3R0ZTAxLDQ4MzMzMw0KMTk4NSxBVEwsTkwsaHViYmFnbDAxLDQ1NTAwMA0KMTk4NSxBVEwsTkwscGVyZXpwYTAxLDQ1MDAwMA0KMTk4NSxBVEwsTkwsbWFobGVyaTAxLDQwNzUwMA0KMTk4NSxBVEwsTkwsbWNtdXJjcjAxLDI3NTAwMA0KMTk4NSxBVEwsTkwsaGFycGV0ZTAxLDI1MDAwMA0KMTk4NSxBVEwsTkwsZGVkbW9qZTAxLDE1MDAwMA0KMTk4NSxBVEwsTkwscGVycnlnZTAxLDEyMDAwMA0KMTk4NSxDSE4sTkwsY2V5cm8wMSwxNDUwMDAwDQoxOTg1LENITixOTCxzdXRjbHJpMDEsMTI2MDAwMA0KMTk4NSxDSE4sTkwsbW9yZWxrZTAxLDg2NTAwMA0KMTk4NSxDSE4sTkwsZHVyaGFsZTAxLDgwMDAwMA0KMTk4NSxDSE4sTkwscnV0aHZkaTAxLDc2NjY2Nw0KMTk4NSxDSE4sTkwsZWNrZXJkZTAxLDc1MDAwMA0KMTk4NSxDSE4sTkwsc21pdGhsZTAyLDY3MDAwMA0KMTk4NSxDSE4sTkwsdHJvdXRzdDAxLDY0MDAwMA0KMTk4NSxDSE4sTkwsbWF0dGhnYTAxLDYwMDAwMA0KMTk4NSxDSE4sTkwsZGF2aXNqbzAyLDU1MDAwMA0KMTk4NSxDSE4sTkwsc2FuZGJyeTAxLDUwNTAwMA0KMTk4NSxDSE4sTkwsc2FuZGVzYzAxLDUwMDAwMA0KMTk4NSxDSE4sTkwsbG9wZXNkYTAxLDQ5MDAwMA0KMTk4NSxDSE4sTkwsZnJhemlnZTAxLDQ4MzMzMw0KMTk4NSxDSE4sTkwsZGVybmlibzAxLDQwNjI1MA0KMTk4NSxDSE4sTkwsYnJ1c3N3YTAxLDM3NTAwMA0KMTk4NSxDSE4sTkwsd29vZHNnYTAxLDMyMTY2Nw0KMTk4NSxDSE4sTkwsc29yZW5sYTAxLDMyMDAwMA0KMTk4NSxDSE4sTkwsaGVibmVyaTAxLDMxMDAwMA0KMTk4NSxDSE4sTkwsc3BlaWVjaDAxLDIyNTAwMA0KMTk4NSxDSE4sTkwsYm9zbGV0aDAxLDIxNTAwMA0KMTk4NSxDSE4sTkwsZm9udGVyYTAxLDIwMDAwMA0KMTk4NSxDSU4sTkwsc290b21hMDEsMTA3MTQyOQ0KMTk4NSxDSU4sTkwscGFya2VkYTAxLDk3MDAwMA0KMTk4NSxDSU4sTkwsY29uY2VkYTAxLDkyMDAwMA0KMTk4NSxDSU4sTkwsaHVtZXRvMDEsODMzMzMzDQoxOTg1LENJTixOTCxiZWxsYnUwMSw3NTEyOTcNCjE5ODUsQ0lOLE5MLG9lc3Rlcm8wMSw1NTAwMDANCjE5ODUsQ0lOLE5MLHByaWNlam8wMiw0MTAwMDANCjE5ODUsQ0lOLE5MLHJvc2VwZTAxLDM1ODg1OA0KMTk4NSxDSU4sTkwscGFzdG9mcjAxLDM1MDAwMA0KMTk4NSxDSU4sTkwsbWlsbmVlZDAxLDMwMDAwMA0KMTk4NSxDSU4sTkwscG93ZXJ0ZTAxLDI1NTAwMA0KMTk4NSxDSU4sTkwsa3JlbmN3YTAxLDI1MDAwMA0KMTk4NSxDSU4sTkwsc3R1cGVqbzAxLDI1MDAwMA0KMTk4NSxDSU4sTkwscmVkdXNnYTAxLDIyNzUwMA0KMTk4NSxDSU4sTkwscGVyZXp0bzAxLDIyNTAwMA0KMTk4NSxDSU4sTkwsdmVuYWJtYTAxLDE1NTAwMA0KMTk4NSxDSU4sTkwsZm9sZXl0bzAyLDExNzUwMA0KMTk4NSxDSU4sTkwsbWNnYWZhbjAxLDExMDAwMA0KMTk4NSxDSU4sTkwsZnJhbmNqbzAxLDc1MDAwDQoxOTg1LENJTixOTCxicm93bnRvMDUsNjAwMDANCjE5ODUsQ0lOLE5MLHRpYmJzamEwMSw2MDAwMA0KMTk4NSxDSU4sTkwsdmFuZ29kYTAxLDYwMDAwDQoxOTg1LEhPVSxOTCxyeWFubm8wMSwxMzUwMDAwDQoxOTg1LEhPVSxOTCxrbmVwcGJvMDEsODUwMDAwDQoxOTg1LEhPVSxOTCxuaWVrcmpvMDEsODI1MDAwDQoxOTg1LEhPVSxOTCxjcnV6am8wMSw3OTYzODMNCjE5ODUsSE9VLE5MLGdhcm5lcGgwMSw3NDUwMDANCjE5ODUsSE9VLE5MLG1vcmVub20wMSw3MDAwMDANCjE5ODUsSE9VLE5MLHRob25kaTAxLDY3NTAwMA0KMTk4NSxIT1UsTkwscHVobHRlMDEsNTQxNjY3DQoxOTg1LEhPVSxOTCxzbWl0aGRhMDIsNTAwMDAwDQoxOTg1LEhPVSxOTCxhc2hieWFsMDEsNDE2NjY3DQoxOTg1LEhPVSxOTCxzY290dG1pMDMsMzYwMDAwDQoxOTg1LEhPVSxOTCxyZXlub2NyMDEsMzUwMDAwDQoxOTg1LEhPVSxOTCx3YWxsaWRlMDEsMzQxNjY3DQoxOTg1LEhPVSxOTCxkb3JhbmJpMDIsMzI1MDAwDQoxOTg1LEhPVSxOTCxkYXdsZWJpMDEsMjk1MDAwDQoxOTg1LEhPVSxOTCxjYWJlbGVuMDEsMjkxNjY3DQoxOTg1LEhPVSxOTCxkaXBpbmZyMDEsMjU1MDAwDQoxOTg1LEhPVSxOTCxzcGlsbWhhMDEsMTYwMDAwDQoxOTg1LEhPVSxOTCxiYXNza2UwMSwxNTUwMDANCjE5ODUsSE9VLE5MLGRhdmlzZ2wwMSw2MDAwMA0KMTk4NSxMQU4sTkwsZ3VlcnJwZTAxLDEyNzAwMDANCjE5ODUsTEFOLE5MLHZhbGVuZmUwMSwxMjAwMDAwDQoxOTg1LExBTixOTCxyZXVzc2plMDEsOTgwMDAwDQoxOTg1LExBTixOTCxvbGl2ZWFsMDEsNzUwMDAwDQoxOTg1LExBTixOTCxob25leXJpMDEsNzA1MDAwDQoxOTg1LExBTixOTCx3ZWxjaGJvMDEsNjQzNzUwDQoxOTg1LExBTixOTCxsYW5kcmtlMDEsNTM3NTAwDQoxOTg1LExBTixOTCxnb2x0emRhMDEsNTAwMDAwDQoxOTg1LExBTixOTCx5ZWFnZXN0MDEsNTAwMDAwDQoxOTg1LExBTixOTCxzYXhzdDAxLDQ2NTAwMA0KMTk4NSxMQU4sTkwscnVzc2ViaTAxLDQ1MDAwMA0KMTk4NSxMQU4sTkwsc2Npb3NtaTAxLDQzNTAwMA0KMTk4NSxMQU4sTkwsbmllZGV0bzAxLDM3MDAwMA0KMTk4NSxMQU4sTkwscGVuYWFsMDEsMzUwMDAwDQoxOTg1LExBTixOTCxtYXJzaG1pMDIsMzMzMDAwDQoxOTg1LExBTixOTCxiYWlsb2JvMDEsMzMwMDAwDQoxOTg1LExBTixOTCx3aGl0ZnRlMDEsMzE2NjY3DQoxOTg1LExBTixOTCxoZXJzaG9yMDEsMjEyMDAwDQoxOTg1LExBTixOTCxicm9ja2dyMDEsMTUwMDAwDQoxOTg1LExBTixOTCxqb2huc2phMDEsMTUwMDAwDQoxOTg1LExBTixOTCxtYWxkb2NhMDEsMTQwMDAwDQoxOTg1LExBTixOTCxkaWF6Y2EwMSwxMjAwMDANCjE5ODUsTEFOLE5MLGR1bmNhbWEwMSw2MDAwMA0KMTk4NSxNT04sTkwscmFpbmV0aTAxLDEyMDAwMDANCjE5ODUsTU9OLE5MLGRhd3NvYW4wMSwxMDMzMzMzDQoxOTg1LE1PTixOTCxyZWFyZGplMDEsODUwMDAwDQoxOTg1LE1PTixOTCxndWxsaWJpMDEsNzAwMDAwDQoxOTg1LE1PTixOTCxsZWFjaDAxLDY1MDAwMA0KMTk4NSxNT04sTkwsd2FzaGl1bDAxLDY1MDAwMA0KMTk4NSxNT04sTkwsd2FsbGF0aTAxLDU2NTAwMA0KMTk4NSxNT04sTkwsYnJvb2todTAxLDU1MDAwMA0KMTk4NSxNT04sTkwsbHVjYXNnYTAxLDUxMzUwMA0KMTk4NSxNT04sTkwsbGF3dmEwMSwzNzUwMDANCjE5ODUsTU9OLE5MLHBhbG1lZGEwMSwzNzUwMDANCjE5ODUsTU9OLE5MLHNjaGF0ZGEwMSwzNzUwMDANCjE5ODUsTU9OLE5MLGZseW5uZG8wMSwzNTAwMDANCjE5ODUsTU9OLE5MLHdvaGxmamkwMSwzMDgzMzMNCjE5ODUsTU9OLE5MLHNtaXRoYnIwMSwyOTAwMDANCjE5ODUsTU9OLE5MLGZyYW5jdGUwMSwyNTAwMDANCjE5ODUsTU9OLE5MLGRpbG9ubWkwMSwxNzUwMDANCjE5ODUsTU9OLE5MLG5pY29zc3QwMSwxMDUwMDANCjE5ODUsTU9OLE5MLHJvYmVyYmUwMSw5NTAwMA0KMTk4NSxNT04sTkwsZmlzaGVicjAxLDYwMDAwDQoxOTg1LE5ZTixOTCxjYXJ0ZWdhMDEsMjAyODU3MQ0KMTk4NSxOWU4sTkwsZm9zdGVnZTAxLDE5NDI4NTcNCjE5ODUsTllOLE5MLGhlcm5ha2UwMSwxMTAwMDAwDQoxOTg1LE5ZTixOTCxvcm9zY2plMDEsNjUwMDAwDQoxOTg1LE5ZTixOTCx3aWxzb21vMDEsNTkxNjY3DQoxOTg1LE5ZTixOTCxrbmlnaHJhMDEsNTYwMDAwDQoxOTg1LE5ZTixOTCxib3dhbGEwMSw1MjUwMDANCjE5ODUsTllOLE5MLHN0cmF3ZGEwMSw1MTY2NjcNCjE5ODUsTllOLE5MLGdvb2RlZHcwMSw0NTAwMDANCjE5ODUsTllOLE5MLGx5bmNoZWQwMSwzMzAwMDANCjE5ODUsTllOLE5MLGJlcmVuYnIwMSwzMjUwMDANCjE5ODUsTllOLE5MLHN0YXVicnUwMSwzMDAwMDANCjE5ODUsTllOLE5MLHNpc2tkbzAxLDI3NTAwMA0KMTk4NSxOWU4sTkwsaGVlcGRhMDEsMjYwMDAwDQoxOTg1LE5ZTixOTCxkYXJsaXJvMDEsMjMwMDAwDQoxOTg1LE5ZTixOTCxiYWNrbXdhMDEsMjAwMDAwDQoxOTg1LE5ZTixOTCxnb3JtYXRvMDMsMTUwMDAwDQoxOTg1LE5ZTixOTCxzYW50YXJhMDEsMTI1MDAwDQoxOTg1LE5ZTixOTCxqb2huc2hvMDEsMTE1MDAwDQoxOTg1LE5ZTixOTCxnYXJkZXJvMDEsMTAwMDAwDQoxOTg1LE5ZTixOTCxtY2Rvd3JvMDEsNjAwMDANCjE5ODUsUEhJLE5MLHNjaG1pbWkwMSwyMTMwMzAwDQoxOTg1LFBISSxOTCxkZW5ueWpvMDEsMTEwOTMzMw0KMTk4NSxQSEksTkwsY2FybHRzdDAxLDEwNzUwMDANCjE5ODUsUEhJLE5MLG1hZGRvZ2EwMSw4MjAzMzMNCjE5ODUsUEhJLE5MLHJhd2xlc2gwMSw3MDAwMDANCjE5ODUsUEhJLE5MLGRpYXpibzAxLDYyMDAwMA0KMTk4NSxQSEksTkwsa29vc21qZTAxLDYwMDAwMA0KMTk4NSxQSEksTkwsaGF5ZXN2bzAxLDUwMDAwMA0KMTk4NSxQSEksTkwsZ3Jvc3NncjAxLDM1MDAwMA0KMTk4NSxQSEksTkwsdmlyZ2lvejAyLDM1MDAwMA0KMTk4NSxQSEksTkwsbGVmZWJqbzAxLDMxMDAwMA0KMTk4NSxQSEksTkwsYW5kZXJsYTAyLDI1MDUwMA0KMTk4NSxQSEksTkwsc2FtdWVqdTAxLDI0MDAwMA0KMTk4NSxQSEksTkwsYWd1YXlsdTAxLDIzNzAwMA0KMTk4NSxQSEksTkwsY29yY290aTAxLDIyMDAwMA0KMTk4NSxQSEksTkwscnVja2VkYTAxLDIyMDAwMA0KMTk4NSxQSEksTkwsaHVkc29jaDAyLDE5MjUwMA0KMTk4NSxQSEksTkwsZ3Jvc3NrZTAxLDE0MDAwMA0KMTk4NSxQSEksTkwsa25pY2VhbDAxLDYwMDAwDQoxOTg1LFBJVCxOTCxwZW5hdG8wMSwxMDc1MDAwDQoxOTg1LFBJVCxOTCx0aG9tcGphMDEsMTA2NjY2Nw0KMTk4NSxQSVQsTkwsbWFkbG9iaTAxLDk3NTUwMA0KMTk4NSxQSVQsTkwsdGVrdWxrZTAxLDgzMDAwMA0KMTk4NSxQSVQsTkwsbWN3aWxsYTAxLDc5NjY2Nw0KMTk4NSxQSVQsTkwscmhvZGVyaTAxLDY0NTAwMA0KMTk4NSxQSVQsTkwscmF5am8wMSw2MzIwMDANCjE5ODUsUElULE5MLG1henppbGUwMSw2MDAwMDANCjE5ODUsUElULE5MLHJvYmluZG8wMSw1MjAwMDANCjE5ODUsUElULE5MLGxlemNhc2kwMSw0MjUwMDANCjE5ODUsUElULE5MLHNjdXJycm8wMSwzNTAwMDANCjE5ODUsUElULE5MLGFsbW9uYmkwMSwyNTUwMDANCjE5ODUsUElULE5MLG1vcnJpamkwMSwyMzI1MDANCjE5ODUsUElULE5MLHJldXNjcmkwMSwyMDAwMDANCjE5ODUsUElULE5MLGRlbGVvam8wMSwxNTUwMDANCjE5ODUsUElULE5MLGd1YW50Y2UwMSwxNTAwMDANCjE5ODUsUElULE5MLHR1bm5lbGUwMSwxMzAwMDANCjE5ODUsUElULE5MLGhhc3NsYW4wMSwxMjkxNjYNCjE5ODUsUElULE5MLG9yc3Vsam8wMSw2MDAwMA0KMTk4NSxTRE4sTkwsZ29zc2FyaTAxLDE3MTMzMzMNCjE5ODUsU0ROLE5MLHRlbXBsZ2EwMSwxMTM3MDAwDQoxOTg1LFNETixOTCxnYXJ2ZXN0MDEsOTc1MDAwDQoxOTg1LFNETixOTCxob3l0bGEwMSw5NzUwMDANCjE5ODUsU0ROLE5MLG5ldHRsZ3IwMSw5MDAwMDANCjE5ODUsU0ROLE5MLGtlbm5ldGUwMiw4NzAwMDANCjE5ODUsU0ROLE5MLHN0b2RkdGkwMSw1NTYyNTANCjE5ODUsU0ROLE5MLHNob3dlcjAxLDUzNzUwMA0KMTk4NSxTRE4sTkwsd2lnZ2lhbDAxLDUxMjUwMA0KMTk4NSxTRE4sTkwsZ3d5bm50bzAxLDQ0MDAwMA0KMTk4NSxTRE4sTkwsamFja3NybzAzLDM0MDAwMA0KMTk4NSxTRE4sTkwscm95c3RqZTAxLDMyNTAwMA0KMTk4NSxTRE4sTkwsbGVmZmVjcjAxLDI3MDAwMA0KMTk4NSxTRE4sTkwsZHJhdmVkYTAxLDI0MDAwMA0KMTk4NSxTRE4sTkwsaGF3a2lhbjAxLDIwMDAwMA0KMTk4NSxTRE4sTkwsZmxhbm50aTAxLDE3NTAwMA0KMTk4NSxTRE4sTkwsYnVtYnJhbDAxLDE2MDAwMA0KMTk4NSxTRE4sTkwsYnJvd25ibzA0LDE1MDAwMA0KMTk4NSxTRE4sTkwsbWNyZXlrZTAxLDE1MDAwMA0KMTk4NSxTRE4sTkwsYmV2YWNrdTAxLDE0MDAwMA0KMTk4NSxTRE4sTkwsbWFydGljYTAxLDE0MDAwMA0KMTk4NSxTRE4sTkwsdGh1cm1tYTAxLDEzMDAwMA0KMTk4NSxTRk4sTkwsbGVvbmFqZTAxLDkwMDAwMA0KMTk4NSxTRk4sTkwsbWludG9ncjAxLDg2NTAwMA0KMTk4NSxTRk4sTkwsZHJpZXNkYTAxLDc2NzUwMA0KMTk4NSxTRk4sTkwsdHJpbGxtYTAxLDcwOTcxNA0KMTk4NSxTRk4sTkwsa3J1a29taTAxLDYzMDAwMA0KMTk4NSxTRk4sTkwsZGF2aXNjaDAxLDU1MDAwMA0KMTk4NSxTRk4sTkwsbGVtYXNqbzAxLDUwMDAwMA0KMTk4NSxTRk4sTkwsdHJldmlhbDAxLDQ2MjUwMA0KMTk4NSxTRk4sTkwsYnJlbmxibzAxLDM4NTAwMA0KMTk4NSxTRk4sTkwseW91bmdqbzAyLDM3NTAwMA0KMTk4NSxTRk4sTkwsaGFtbWFhdDAxLDM1NTAwMA0KMTk4NSxTRk4sTkwsbGFza2ViaTAxLDM1NTAwMA0KMTk4NSxTRk4sTkwsZ3JlZW5kYTAzLDI3NTAwMA0KMTk4NSxTRk4sTkwsYmx1ZXZpMDEsMjUwMDAwDQoxOTg1LFNGTixOTCx0aG9tcHNjMDEsMTk3MDAwDQoxOTg1LFNGTixOTCxkYXZpc21hMDEsMTk1MDAwDQoxOTg1LFNGTixOTCxnb3R0amkwMSwxNzAwMDANCjE5ODUsU0ZOLE5MLGdsYWRkZGEwMSwxMzUwMDANCjE5ODUsU0ZOLE5MLGdhcnJlc2MwMSw4NTAwMA0KMTk4NSxTRk4sTkwsYnJvd25jaDAyLDYwMDAwDQoxOTg1LFNMTixOTCxjbGFya2phMDEsMTU1NTAwMA0KMTk4NSxTTE4sTkwsc21pdGhvejAxLDE0NDAwMDANCjE5ODUsU0xOLE5MLGFuZHVqam8wMSwxMDMwMDAwDQoxOTg1LFNMTixOTCxhbGxlbm5lMDEsNzUwMDAwDQoxOTg1LFNMTixOTCxwb3J0ZWRhMDIsNzQwMDAwDQoxOTg1LFNMTixOTCxzbWl0aGxvMDEsNzQwMDAwDQoxOTg1LFNMTixOTCxkZWplc2l2MDEsNzAwMDAwDQoxOTg1LFNMTixOTCxmb3JzY2JvMDEsNTgzMzMzDQoxOTg1LFNMTixOTCxjZWRlbmNlMDEsNTYyNTAwDQoxOTg1LFNMTixOTCxoZXJydG8wMSw1NjAwMDANCjE5ODUsU0xOLE5MLG1jZ2Vld2kwMSw0NzUwMDANCjE5ODUsU0xOLE5MLGNhbXBiYmkwMiw0NTc1MDANCjE5ODUsU0xOLE5MLHR1ZG9yam8wMSw0NTc1MDANCjE5ODUsU0xOLE5MLGxhaHRpamUwMSwyNTAwMDANCjE5ODUsU0xOLE5MLGxhbmRydGkwMSwyMDg3NTANCjE5ODUsU0xOLE5MLGpvcmdlbWkwMSwyMDAwMDANCjE5ODUsU0xOLE5MLHZhbnNsYW4wMSwxNzAwMDANCjE5ODUsU0xOLE5MLGJyYXVuc3QwMSwxNjAwMDANCjE5ODUsU0xOLE5MLGRheWxla2UwMSwxNTAwMDANCjE5ODUsU0xOLE5MLGhhcnBlYnIwMSwxMzUwMDANCjE5ODUsU0xOLE5MLHBlbmRsdGUwMSwxMTI1MDANCjE5ODUsU0xOLE5MLGNveGRhMDEsMTEwMDAwDQoxOTg1LFNMTixOTCxob3J0b3JpMDEsMTEwMDAwDQoxOTg1LFNMTixOTCxrZXBzaGt1MDEsMTAwMDAwDQoxOTg1LFNMTixOTCxjb2xlbXZpMDEsNjAwMDANCjE5ODYsQkFMLEFMLGx5bm5mcjAxLDExOTAwMDANCjE5ODYsQkFMLEFMLHJpcGtlY2EwMSwxMTUwMDAwDQoxOTg2LEJBTCxBTCxtdXJyYWVkMDIsOTI1ODE0DQoxOTg2LEJBTCxBTCxtY2dyZXNjMDEsOTExMDUxDQoxOTg2LEJBTCxBTCxib2RkaW1pMDEsODM3NTAwDQoxOTg2LEJBTCxBTCxsYWN5bGUwMSw3MjUwMDANCjE5ODYsQkFMLEFMLGZsYW5hbWkwMSw2Mzk3OTENCjE5ODYsQkFMLEFMLGFhc2VkbzAxLDYwMDAwMA0KMTk4NixCQUwsQUwsbWFydGlkZTAxLDU2MDQ1OA0KMTk4NixCQUwsQUwsZGF2aXNzdDAyLDUxMDAwMA0KMTk4NixCQUwsQUwsbWFydGl0aTAxLDQ4NzA3OA0KMTk4NixCQUwsQUwsYmVuaXFqdTAxLDQ1MDAwMA0KMTk4NixCQUwsQUwsZ3Jvc3N3YTAxLDQ1MDAwMA0KMTk4NixCQUwsQUwsZGVtcHNyaTAxLDQ0MjA2Ng0KMTk4NixCQUwsQUwsZHd5ZXJqaTAxLDQwMDAwMA0KMTk4NixCQUwsQUwseW91bmdtaTAxLDM4NzUwMA0KMTk4NixCQUwsQUwsZm9yZGRhMDEsMzUwMDAwDQoxOTg2LEJBTCxBTCxyYXlmb2ZsMDEsMzEwMDAwDQoxOTg2LEJBTCxBTCxuaWNob3JlMDEsMjg1MDAwDQoxOTg2LEJBTCxBTCxib3JkaXJpMDEsMjUwMDAwDQoxOTg2LEJBTCxBTCxzaGVsYmpvMDEsMjQwMDAwDQoxOTg2LEJBTCxBTCxndXRpZWphMDEsMTY3NTAwDQoxOTg2LEJBTCxBTCxkaXhvbmtlMDEsMTQwMDAwDQoxOTg2LEJBTCxBTCxib25pbGp1MDEsMTIwMDAwDQoxOTg2LEJBTCxBTCxzaGVldGxhMDEsMTIwMDAwDQoxOTg2LEJBTCxBTCxoYXZlbmJyMDEsMTE1MDAwDQoxOTg2LEJBTCxBTCxqb25lc29kMDEsMTA3NTAwDQoxOTg2LEJBTCxBTCxzdGVmZWpvMDEsNzAwMDANCjE5ODYsQkFMLEFMLHRyYWJlamkwMSw2MDAwMA0KMTk4NixCT1MsQUwscmljZWppMDEsMTk4NDQyMw0KMTk4NixCT1MsQUwsYm9nZ3N3YTAxLDEzNTAwMDANCjE5ODYsQk9TLEFMLHN0YW5sYm8wMSwxMDYwMDAwDQoxOTg2LEJPUyxBTCxldmFuc2R3MDEsMTAxNzc1Nw0KMTk4NixCT1MsQUwsYXJtYXN0bzAxLDEwMDAwMDANCjE5ODYsQk9TLEFMLGJ1Y2tuYmkwMSw3ODUwMDANCjE5ODYsQk9TLEFMLGJheWxvZG8wMSw2NjA2OTYNCjE5ODYsQk9TLEFMLGdlZG1hcmkwMSw2NTAwMDANCjE5ODYsQk9TLEFMLGxvbGxhdGkwMSw1NDEyNTANCjE5ODYsQk9TLEFMLHNhbWJpam8wMSw1MDAwMDANCjE5ODYsQk9TLEFMLGh1cnN0YnIwMSw0OTUwMDANCjE5ODYsQk9TLEFMLGJhcnJlbWEwMiw0MzUwMDANCjE5ODYsQk9TLEFMLGhlbmRlZGEwMSw0MTIwMDANCjE5ODYsQk9TLEFMLHN0ZXdhc2EwMSwzODExMTMNCjE5ODYsQk9TLEFMLGJveWRvaTAxLDM3NTAwMA0KMTk4NixCT1MsQUwscm9tZXJlZDAxLDM3NTAwMA0KMTk4NixCT1MsQUwsaG9mZm1nbDAxLDM1MDAwMA0KMTk4NixCT1MsQUwsY2xlbWVybzAyLDM0MDAwMA0KMTk4NixCT1MsQUwsY3Jhd2ZzdDAxLDMzMDAwMA0KMTk4NixCT1MsQUwsc3RhcGxkYTAxLDMwMDAwMA0KMTk4NixCT1MsQUwsbmlwcGVhbDAxLDI2NTAwMA0KMTk4NixCT1MsQUwsb3dlbnNwMDEsMjU1MDAwDQoxOTg2LEJPUyxBTCxzdWxsaW1hMDIsMTEwMDAwDQoxOTg2LEJPUyxBTCx0cnVqaW1pMDEsODUwMDANCjE5ODYsQk9TLEFMLGJyb3dubWkwMSw4MDAwMA0KMTk4NixCT1MsQUwsc2NoaXJjYTAxLDc1MDAwDQoxOTg2LEJPUyxBTCxnYXJkbndlMDEsNzAwMDANCjE5ODYsQk9TLEFMLGdyZWVubWkwMSw2MDAwMA0KMTk4NixCT1MsQUwscXVpbm9yZTAxLDYwMDAwDQoxOTg2LENBTCxBTCxkZWNpbmRvMDEsMTIwMDAwMA0KMTk4NixDQUwsQUwsamFja3NyZTAxLDExMDI5NDYNCjE5ODYsQ0FMLEFMLG1vb3JlZG8wMSwxMDAwMDAwDQoxOTg2LENBTCxBTCxoZW5kcmdlMDEsOTM5MzMzDQoxOTg2LENBTCxBTCx3aXR0bWkwMSw5MzMzMzMNCjE5ODYsQ0FMLEFMLHN1dHRvZG8wMSw4OTAwMDANCjE5ODYsQ0FMLEFMLGJ1cmxlcmkwMSw4NTY2NjcNCjE5ODYsQ0FMLEFMLGJvb25lYm8wMSw4NTM0NzkNCjE5ODYsQ0FMLEFMLGRvd25pYnIwMSw4MDgzMzMNCjE5ODYsQ0FMLEFMLGNhbmRlam8wMSw4MDAwMDANCjE5ODYsQ0FMLEFMLGpvbmVzcnUwMSw1NjAwMDANCjE5ODYsQ0FMLEFMLGdyaWNoYm8wMSw1MDAwMDANCjE5ODYsQ0FMLEFMLGx1Y2FzZ2EwMSw1MDAwMDANCjE5ODYsQ0FMLEFMLGpvaG50bzAxLDQ0MDAwMA0KMTk4NixDQUwsQUwscm9tYW5ybzAxLDQyNTAwMA0KMTk4NixDQUwsQUwsd2lsZm9ybzAxLDQxNjY2Nw0KMTk4NixDQUwsQUwsY29yYmVkbzAxLDQxMDAwMA0KMTk4NixDQUwsQUwsc2xhdG9qaTAxLDQwMDAwMA0KMTk4NixDQUwsQUwscGV0dGlnYTAxLDMwMDAwMA0KMTk4NixDQUwsQUwsc2Nob2ZkaTAyLDIxMDAwMA0KMTk4NixDQUwsQUwsZm9yc3R0ZTAxLDE3MDAwMA0KMTk4NixDQUwsQUwsbWNjYXNraTAxLDE0MjAwMA0KMTk4NixDQUwsQUwsbmFycm9qZTAxLDE0MjAwMA0KMTk4NixDQUwsQUwsZm9yc2NrZTAxLDEwMDAwMA0KMTk4NixDQUwsQUwsaG93ZWxqYTAyLDgyNTAwDQoxOTg2LENBTCxBTCxqb3luZXdhMDEsNjUwMDANCjE5ODYsQ0FMLEFMLGZpbmxlY2gwMSw2MDAwMA0KMTk4NixDQUwsQUwscnVobGV2ZTAxLDYwMDAwDQoxOTg2LENBTCxBTCx3aGl0ZWRlMDMsNjAwMDANCjE5ODYsQ0hBLEFMLHNlYXZldG8wMSwxMTMyNjUyDQoxOTg2LENIQSxBTCxkb3Rzb3JpMDEsOTc1MDAwDQoxOTg2LENIQSxBTCxiYW5uaWZsMDEsOTMwMDAwDQoxOTg2LENIQSxBTCxhbGxlbm5lMDEsOTAwMDAwDQoxOTg2LENIQSxBTCxmaXNrY2EwMSw4NzUwMDANCjE5ODYsQ0hBLEFMLGJhaW5laGEwMSw3NzUwMDANCjE5ODYsQ0hBLEFMLGNydXpqdTAxLDYwMDAwMA0KMTk4NixDSEEsQUwsamFtZXNibzAxLDU1NTAwMA0KMTk4NixDSEEsQUwsc2NobWlkYTAxLDQ2NTAwMA0KMTk4NixDSEEsQUwsa2l0dGxybzAxLDQwMDAwMA0KMTk4NixDSEEsQUwsd2Fsa2VncjAxLDQwMDAwMA0KMTk4NixDSEEsQUwsY293bGVqbzAxLDI5NTAwMA0KMTk4NixDSEEsQUwsbmVsc29nZTAxLDI0MDAwMA0KMTk4NixDSEEsQUwsaGlsbG1hMDEsMjAwMDAwDQoxOTg2LENIQSxBTCxzcXVpcm1pMDEsMjAwMDAwDQoxOTg2LENIQSxBTCxodWxldHRpMDEsMTk1MDAwDQoxOTg2LENIQSxBTCxoYWlyc2plMDEsMTU2NjY3DQoxOTg2LENIQSxBTCxndWlsbG96MDEsMTUwMDAwDQoxOTg2LENIQSxBTCxwZXJjb2phMDEsMTUwMDAwDQoxOTg2LENIQSxBTCxib25pbGJvMDEsMTE1MDAwDQoxOTg2LENIQSxBTCxnaWxlc2JyMDEsODAwMDANCjE5ODYsQ0hBLEFMLHNraW5uam8wMSw3NTAwMA0KMTk4NixDSEEsQUwsYm9zdG9kYTAxLDY4MDAwDQoxOTg2LENIQSxBTCxicmFkbHNjMDEsNjY1MDANCjE5ODYsQ0hBLEFMLGNhbmdlam8wMSw2MDAwMA0KMTk4NixDSEEsQUwsY2FybHRzdDAxLDYwMDAwDQoxOTg2LENIQSxBTCxmb3N0ZWdlMDEsNjAwMDANCjE5ODYsQ0hBLEFMLGthcmtvcm8wMSw2MDAwMA0KMTk4NixDSEEsQUwsbWNrZW9qbzAxLDYwMDAwDQoxOTg2LENIQSxBTCxtb3JtYXJ1MDEsNjAwMDANCjE5ODYsQ0hBLEFMLHRoaWdwYm8wMSw2MDAwMA0KMTk4NixDTEUsQUwsdGhvcm5hbjAxLDExMDAwMDANCjE5ODYsQ0xFLEFMLGJ1dGxlYnIwMSw4NTAwMDANCjE5ODYsQ0xFLEFMLGJlcm5hdG8wMSw1ODAwMDANCjE5ODYsQ0xFLEFMLGZyYW5janUwMSw1NzUwMDANCjE5ODYsQ0xFLEFMLGphY29iYnIwMSw0Mzc1MDANCjE5ODYsQ0xFLEFMLHRhYmxlcGEwMSwzOTUwMDANCjE5ODYsQ0xFLEFMLGVhc3RlamEwMSwzNTAwMDANCjE5ODYsQ0xFLEFMLGhhbGxtZTAxLDM1MDAwMA0KMTk4NixDTEUsQUwsaGVhdG9uZTAxLDMxMDAwMA0KMTk4NixDTEUsQUwsbmlla3JwaDAxLDMwMDAwMA0KMTk4NixDTEUsQUwsc2Nocm9rZTAxLDI3NTAwMA0KMTk4NixDTEUsQUwsd2FkZGV0bzAxLDI3MDAwMA0KMTk4NixDTEUsQUwsYmFuZG9jaDAxLDIyNTAwMA0KMTk4NixDTEUsQUwsZ2FybGF3YTAxLDIxNTAwMA0KMTk4NixDTEUsQUwsY2FydGVqbzAxLDE5MDAwMA0KMTk4NixDTEUsQUwsY2FzdGljYTAxLDE3NzUwMA0KMTk4NixDTEUsQUwsY2FtYWNlcjAxLDE0NTAwMA0KMTk4NixDTEUsQUwsbm9sZXNkaTAxLDExMDAwMA0KMTk4NixDTEUsQUwsc2NodWxkbzAxLDExMDAwMA0KMTk4NixDTEUsQUwsbml4b25vdDAxLDk3NTAwDQoxOTg2LENMRSxBTCx3aWxsc2ZyMDEsOTIwMDANCjE5ODYsQ0xFLEFMLGtlcm5qaTAxLDkwMDAwDQoxOTg2LENMRSxBTCxjYW5kaXRvMDEsODAwMDANCjE5ODYsQ0xFLEFMLG9lbGtlYnIwMSw2NTAwMA0KMTk4NixDTEUsQUwsYWxsYW5hbjAxLDYwMDAwDQoxOTg2LENMRSxBTCxiYWlsZXNjMDEsNjAwMDANCjE5ODYsQ0xFLEFMLG11bGxpZnIwMSw2MDAwMA0KMTk4NixDTEUsQUwscm9tYW5qbzAyLDYwMDAwDQoxOTg2LENMRSxBTCxzbnlkZWNvMDIsNjAwMDANCjE5ODYsQ0xFLEFMLHN3aW5kZ3IwMSw2MDAwMA0KMTk4NixDTEUsQUwseWV0dHJpMDEsNjAwMDANCjE5ODYsREVULEFMLGdpYnNva2kwMSwxMjAwMDAwDQoxOTg2LERFVCxBTCxoZXJuYXdpMDEsOTYwMDAwDQoxOTg2LERFVCxBTCxtb3JyaWphMDIsODc1MDAwDQoxOTg2LERFVCxBTCxwZXRyeWRhMDEsODc1MDAwDQoxOTg2LERFVCxBTCxwYXJyaWxhMDIsODUwMDAwDQoxOTg2LERFVCxBTCxldmFuc2RhMDEsNzkzMzMzDQoxOTg2LERFVCxBTCxjb2xsaWRhMDIsNzAwMDAwDQoxOTg2LERFVCxBTCxsZW1vbmNoMDEsNjk4NTcxDQoxOTg2LERFVCxBTCxoZXJuZGxhMDEsNjg3NTAwDQoxOTg2LERFVCxBTCx3aGl0YWxvMDEsNjcwMDAwDQoxOTg2LERFVCxBTCx0YW5hbmZyMDEsNjYyNTAwDQoxOTg2LERFVCxBTCx0cmFtbWFsMDEsNTY3MTQzDQoxOTg2LERFVCxBTCxsYXBvaWRhMDEsNTUwMDAwDQoxOTg2LERFVCxBTCxicm9va3RvMDEsMzI1MDAwDQoxOTg2LERFVCxBTCxiZXJnbWRhMDEsMzE2NjY3DQoxOTg2LERFVCxBTCx0b2xsZXdhMDEsMjc1MDAwDQoxOTg2LERFVCxBTCx0ZXJyZXdhMDEsMjYwMDAwDQoxOTg2LERFVCxBTCxncnViYmpvMDEsMjUwMDAwDQoxOTg2LERFVCxBTCxjYW1wYmJpMDIsMjAwMDAwDQoxOTg2LERFVCxBTCxzaGVyaXBhMDEsMTUwMDAwDQoxOTg2LERFVCxBTCxvbmVhbHJhMDEsODAwMDANCjE5ODYsREVULEFMLGNvbGVzZGEwMSw3NTAwMA0KMTk4NixERVQsQUwsbGFnYW1pMDEsNzI1MDANCjE5ODYsREVULEFMLGxvd3J5ZHcwMSw2MjUwMA0KMTk4NixERVQsQUwsa2luZ2VyMDEsNjAwMDANCjE5ODYsREVULEFMLHNsYXRvamkwMSw2MDAwMA0KMTk4NixERVQsQUwsc3BpbG1oYTAxLDYwMDAwDQoxOTg2LEtDQSxBTCxicmV0dGdlMDEsMTQ3MTQyOQ0KMTk4NixLQ0EsQUwsd2lsc293aTAyLDExNzUwMDANCjE5ODYsS0NBLEFMLHNtaXRobG8wMSwxMDAwMDAwDQoxOTg2LEtDQSxBTCxxdWlzZWRhMDEsOTI1MDAwDQoxOTg2LEtDQSxBTCxzYWJlcmJyMDEsOTI1MDAwDQoxOTg2LEtDQSxBTCxsZW9uYWRlMDEsODgzMzMzDQoxOTg2LEtDQSxBTCxsZWlicmNoMDEsNzcwMDAwDQoxOTg2LEtDQSxBTCxzdW5kYmppMDEsNjUzMTI4DQoxOTg2LEtDQSxBTCxtY3JhZWhhMDEsNjUwMDAwDQoxOTg2LEtDQSxBTCxibGFja2J1MDIsNjQ1MDAwDQoxOTg2LEtDQSxBTCxiYWxib3N0MDEsNTI1MDAwDQoxOTg2LEtDQSxBTCx3aGl0ZWZyMDEsNDg1MDAwDQoxOTg2LEtDQSxBTCxvcnRham8wMSw0NTAwMDANCjE5ODYsS0NBLEFMLHdhdGhham8wMSw0MDAwMDANCjE5ODYsS0NBLEFMLGxhd3J1MDEsMzYwMDAwDQoxOTg2LEtDQSxBTCxwcnlvcmdyMDEsMjkzODA4DQoxOTg2LEtDQSxBTCxndWJpY21hMDEsMjUwMDAwDQoxOTg2LEtDQSxBTCxqb25lc2x5MDEsMTg1MDAwDQoxOTg2LEtDQSxBTCxqYWNrc2RhMDIsMTc1MDAwDQoxOTg2LEtDQSxBTCxiaWFuY2J1MDEsMTY1MDAwDQoxOTg2LEtDQSxBTCxxdWlya2phMDEsMTUwMDAwDQoxOTg2LEtDQSxBTCxodWlzbW1hMDEsMTAwMDAwDQoxOTg2LEtDQSxBTCxmYXJyc3QwMSw4NTAwMA0KMTk4NixLQ0EsQUwsc2FsYXphbjAxLDc1MDAwDQoxOTg2LEtDQSxBTCxoYXJnZWFsMDEsNjcwMDANCjE5ODYsS0NBLEFMLGJhbmtoc2MwMSw2MDAwMA0KMTk4NixLQ0EsQUwsY29uZWRhMDEsNjAwMDANCjE5ODYsS0NBLEFMLGtpbmdlbWkwMSw2MDAwMA0KMTk4NixNSU4sQUwsYmx5bGViZTAxLDE0NTAwMDANCjE5ODYsTUlOLEFMLGhyYmVra2UwMSwxMDYwMDAwDQoxOTg2LE1JTixBTCxicnVuYXRvMDEsNzQwMDAwDQoxOTg2LE1JTixBTCxzbWFsbHJvMDIsNzQwMDAwDQoxOTg2LE1JTixBTCxkYXZpc3JvMDIsNzI1MDAwDQoxOTg2LE1JTixBTCx2aW9sYWZyMDEsNjc0MDAwDQoxOTg2LE1JTixBTCxoYXRjaG1pMDEsNjY2NjY3DQoxOTg2LE1JTixBTCxnYWV0dGdhMDEsNTE1MDAwDQoxOTg2LE1JTixBTCxzbWl0aG1pMDMsNDUwMDAwDQoxOTg2LE1JTixBTCxidXRjaGpvMDEsMzg1MDAwDQoxOTg2LE1JTixBTCxwdWNrZWtpMDEsMjU1MDAwDQoxOTg2LE1JTixBTCxidXNocmEwMSwyMjAwMDANCjE5ODYsTUlOLEFMLGxhdWRudGkwMSwxNTUwMDANCjE5ODYsTUlOLEFMLGphY2tzcm8wMywxMTUwMDANCjE5ODYsTUlOLEFMLHNhbGFzbWEwMSwxMTUwMDANCjE5ODYsTUlOLEFMLGdhZ25lZ3IwMSwxMDAwMDANCjE5ODYsTUlOLEFMLGxvbWJhc3QwMSw3NTAwMA0KMTk4NixNSU4sQUwsYmVhbmViaTAxLDY1MDAwDQoxOTg2LE1JTixBTCxwb3J0dW1hMDEsNjI1MDANCjE5ODYsTUlOLEFMLGVzcGluYWwwMSw2MDAwMA0KMTk4NixNSU4sQUwscGFzdG9mcjAxLDYwMDAwDQoxOTg2LE1JTixBTCxyZWVkamUwMiw2MDAwMA0KMTk4NixNTDQsQUwsbW9saXRwYTAxLDExNjAwMDANCjE5ODYsTUw0LEFMLHlvdW50cm8wMSw5NTAwMDANCjE5ODYsTUw0LEFMLGdhbnRuamkwMSw4ODc1MDANCjE5ODYsTUw0LEFMLGhhYXNtbzAxLDc3OTE2Nw0KMTk4NixNTDQsQUwsb2dsaXZiZTAxLDc2NjU5Mw0KMTk4NixNTDQsQUwsY2Vyb25yaTAxLDY3NTAwMA0KMTk4NixNTDQsQUwsY2xlYXJtYTAxLDY3MTU2MA0KMTk4NixNTDQsQUwsZGFyd2lkYTAxLDYxMDAwMA0KMTk4NixNTDQsQUwsY29vcGVjZTAxLDYwNzMyMg0KMTk4NixNTDQsQUwsbWFubmlyaTAxLDQ5NTAwMA0KMTk4NixNTDQsQUwsbWNjbHVibzAxLDQ4NzUwMA0KMTk4NixNTDQsQUwsbW9vcmVjaDAyLDQwMjUwMA0KMTk4NixNTDQsQUwsaGlndWV0ZTAxLDE5NTAwMA0KMTk4NixNTDQsQUwscmlsZXNlcjAxLDE3NTAwMA0KMTk4NixNTDQsQUwsc2Nocm9iaTAxLDE1NTAwMA0KMTk4NixNTDQsQUwsc2VhcmFyYTAxLDEyMTUwMA0KMTk4NixNTDQsQUwsZGVlcnJvMDEsOTUwMDANCjE5ODYsTUw0LEFMLGxlYXJ5dGkwMSw5MDAwMA0KMTk4NixNTDQsQUwsbmlldmVqdTAxLDcwMDAwDQoxOTg2LE1MNCxBTCx3ZWdtYWJpMDEsNzAwMDANCjE5ODYsTUw0LEFMLGJpcmtibWkwMSw2MDAwMA0KMTk4NixNTDQsQUwsYm9zaW9jaDAxLDYwMDAwDQoxOTg2LE1MNCxBTCxicmFnZ2dsMDEsNjAwMDANCjE5ODYsTUw0LEFMLGNsdXR0YnIwMSw2MDAwMA0KMTk4NixNTDQsQUwsam9obnNqbzA0LDYwMDAwDQoxOTg2LE1MNCxBTCxwbGVzYWRhMDEsNjAwMDANCjE5ODYsTUw0LEFMLHN2ZXVtZGEwMSw2MDAwMA0KMTk4NixNTDQsQUwsdGhvbWFnbzAxLDYwMDAwDQoxOTg2LE5ZQSxBTCx3aW5maWRhMDEsMTg4NjcxNA0KMTk4NixOWUEsQUwsaGVuZGVyaTAxLDE1NzAwMDANCjE5ODYsTllBLEFMLG1hdHRpZG8wMSwxMzc1MDAwDQoxOTg2LE5ZQSxBTCxrZW1wc3QwMSwxMjIwMDAwDQoxOTg2LE5ZQSxBTCxyYW5kb3dpMDEsMTA2MDAwMA0KMTk4NixOWUEsQUwsZ3JpZmZrZTAxLDEwNTAwMDANCjE5ODYsTllBLEFMLGd1aWRycm8wMSw5NzUwMDANCjE5ODYsTllBLEFMLHJpZ2hlZGEwMSw4Mzc1MDANCjE5ODYsTllBLEFMLHdoaXRzZWQwMSw4MDAwMDANCjE5ODYsTllBLEFMLGJ1cm5zYnIwMSw3NTAwMDANCjE5ODYsTllBLEFMLG5pZWtyam8wMSw3NTAwMDANCjE5ODYsTllBLEFMLHNoaXJsYm8wMSw3NTAwMDANCjE5ODYsTllBLEFMLHd5bmVnYnUwMSw3MzMzMzMNCjE5ODYsTllBLEFMLG1vbnRlam8wMSw3MTY2NjcNCjE5ODYsTllBLEFMLGVhc2xlbWkwMSw2NTgzMzMNCjE5ODYsTllBLEFMLHJvZW5pZ2EwMSw2NTgzMzMNCjE5ODYsTllBLEFMLGJlcnJhZGEwMSw1NTc1MDANCjE5ODYsTllBLEFMLG1vcmVub20wMSw1MDAwMDANCjE5ODYsTllBLEFMLHNjdXJycm8wMSw0NTAwMDANCjE5ODYsTllBLEFMLGhhc3Nlcm8wMSw0MDA4NzMNCjE5ODYsTllBLEFMLGZpc2NobWkwMSwyMDAwMDANCjE5ODYsTllBLEFMLGZpc2hlYnIwMSwxMjAwMDANCjE5ODYsTllBLEFMLHBhZ2xpbWkwMSwxMjAwMDANCjE5ODYsTllBLEFMLHJhc211ZGUwMSwxMDAwMDANCjE5ODYsTllBLEFMLHBhc3F1ZGEwMSw3MDAwMA0KMTk4NixOWUEsQUwsZXNwaW5qdTAxLDY1MDAwDQoxOTg2LE5ZQSxBTCxkcmFiZWRvMDEsNjAwMDANCjE5ODYsTllBLEFMLGpvaG50bzAxLDYwMDAwDQoxOTg2LE9BSyxBTCxhbmR1ampvMDEsMTIzMzMzMw0KMTk4NixPQUssQUwsbGFuc2ZjYTAxLDEyMDAwMDANCjE5ODYsT0FLLEFMLG11cnBoZHcwMSw5MDAxNDkNCjE5ODYsT0FLLEFMLGtpbmdtZGEwMSw3MzAwMDANCjE5ODYsT0FLLEFMLGRhdmlzbWkwMiw2MDAwMDANCjE5ODYsT0FLLEFMLGdyaWZmYWwwMSw1Nzc1ODkNCjE5ODYsT0FLLEFMLGJvY2h0YnIwMSw1NzI1MDANCjE5ODYsT0FLLEFMLGhvd2VsamEwMSw1MzAwMDANCjE5ODYsT0FLLEFMLGxhbmdmcmkwMSw1MDAwMDANCjE5ODYsT0FLLEFMLGJha2VyZHUwMSw0NzUwMDANCjE5ODYsT0FLLEFMLHBoaWxsdG8wMiwzMDA5NTANCjE5ODYsT0FLLEFMLGNvZGlyY2gwMSwyNzAwMDANCjE5ODYsT0FLLEFMLGhpbGxkbzAxLDIxODIwMA0KMTk4NixPQUssQUwsaGVuZGVzdDAxLDIwMDAwMA0KMTk4NixPQUssQUwsa3J1ZWdiaTAxLDE5NTAwMA0KMTk4NixPQUssQUwsYXRoZXJrZTAxLDE4MzcwMA0KMTk4NixPQUssQUwsYmFpcmRvMDEsOTYwMDANCjE5ODYsT0FLLEFMLHRldHRsbWkwMSw5NTAwMA0KMTk4NixPQUssQUwsb250aXZzdDAyLDg4MDAwDQoxOTg2LE9BSyxBTCxyaWpvam8wMSw4NTAwMA0KMTk4NixPQUssQUwsd2lsbGFqZTAxLDgwMDAwDQoxOTg2LE9BSyxBTCx5b3VuZ2N1MDEsNzkwMDANCjE5ODYsT0FLLEFMLGNhbnNlam8wMSw3NTAwMA0KMTk4NixPQUssQUwsc2FrYXRsZTAxLDc1MDAwDQoxOTg2LE9BSyxBTCxncm9zc3dhMDEsNjAwMDANCjE5ODYsT0FLLEFMLGxlaXBlZGEwMSw2MDAwMA0KMTk4NixPQUssQUwsbWNnd2ltYTAxLDYwMDAwDQoxOTg2LE9BSyxBTCxtb29uZWJpMDEsNjAwMDANCjE5ODYsT0FLLEFMLHBsdW5rZXIwMSw2MDAwMA0KMTk4NixPQUssQUwsc3Rld2FkYTAxLDYwMDAwDQoxOTg2LE9BSyxBTCx0aWxsbXJ1MDEsNjAwMDANCjE5ODYsU0VBLEFMLHRob21hZ28wMSw2MDAwMDANCjE5ODYsU0VBLEFMLGJlYXR0amkwMSw1NzUwMDANCjE5ODYsU0VBLEFMLGJyYWRscGgwMSw0NzUwMDANCjE5ODYsU0VBLEFMLHllYWdlc3QwMSw0MTI4MDkNCjE5ODYsU0VBLEFMLGRhdmlzYWwwMSw0MDAwMDANCjE5ODYsU0VBLEFMLG1vb3JlbWkwMSw0MDAwMDANCjE5ODYsU0VBLEFMLGNvd2VuYWwwMSwzNjAwMDANCjE5ODYsU0VBLEFMLGtlYXJuYm8wMSwzMDAwMDANCjE5ODYsU0VBLEFMLHppc2tyaTAxLDI3MjUwMA0KMTk4NixTRUEsQUwsbGFuZ3NtYTAxLDI0MjUwMA0KMTk4NixTRUEsQUwscGhlbHBrZTAxLDIzNTAwMA0KMTk4NixTRUEsQUwseW91bmdtYTAxLDIwNTAwMA0KMTk4NixTRUEsQUwscHJlc2xqaTAxLDE5MjUwMA0KMTk4NixTRUEsQUwsdGhvbWFybzAyLDE2NTAwMA0KMTk4NixTRUEsQUwsbGFkZHBlMDEsMTYwMDAwDQoxOTg2LFNFQSxBTCx3aWxjb21pMDEsMTUwMDAwDQoxOTg2LFNFQSxBTCxtb3JnYW1pMDEsMTI1MDAwDQoxOTg2LFNFQSxBTCxyYW1vc2RvMDEsODUwMDANCjE5ODYsU0VBLEFMLHJleW5vaGEwMSw4NTAwMA0KMTk4NixTRUEsQUwsdGFydGFkYTAxLDg1MDAwDQoxOTg2LFNFQSxBTCxtb3Nlc2pvMDEsODI1MDANCjE5ODYsU0VBLEFMLHJlZWRqZTAxLDgxNTAwDQoxOTg2LFNFQSxBTCxzd2lmdGJpMDIsNzUwMDANCjE5ODYsU0VBLEFMLGJlc3RrYTAxLDcwMDAwDQoxOTg2LFNFQSxBTCxmaXJlb3N0MDEsNjQwMDANCjE5ODYsU0VBLEFMLGJyYW50bWkwMSw2MDAwMA0KMTk4NixURVgsQUwsd2FyZGdhMDEsODY1MDAwDQoxOTg2LFRFWCxBTCxoYXJyYXRvMDEsNzAwMDAwDQoxOTg2LFRFWCxBTCxob290b2J1MDEsNjkwMDAwDQoxOTg2LFRFWCxBTCxob3VnaGNoMDEsNjkwMDAwDQoxOTg2LFRFWCxBTCxwYXJyaWxhMDEsNTYwNjE5DQoxOTg2LFRFWCxBTCxyb3plbWRhMDEsMzUwMDAwDQoxOTg2LFRFWCxBTCxvYnJpZXBlMDMsMzM3NTAwDQoxOTg2LFRFWCxBTCxzbGF1Z2RvMDEsMzMxNTAwDQoxOTg2LFRFWCxBTCxoYXJyaWdyMDEsMzEwMDAwDQoxOTg2LFRFWCxBTCxmbGV0Y3NjMDEsMjgyNTAwDQoxOTg2LFRFWCxBTCxpbmNhdnBlMDEsMjEwMDAwDQoxOTg2LFRFWCxBTCxwYWNpb3RvMDEsMjAxNTAwDQoxOTg2LFRFWCxBTCx3aWxrZWN1MDEsMTY1MDAwDQoxOTg2LFRFWCxBTCxwb3J0ZWRhMDIsMTYyNTAwDQoxOTg2LFRFWCxBTCxtY2Rvd29kMDEsMTM1MDAwDQoxOTg2LFRFWCxBTCxidWVjaHN0MDEsODUwMDANCjE5ODYsVEVYLEFMLHJ1c3NlamUwMSw4MDAwMA0KMTk4NixURVgsQUwscGV0cmFnZTAxLDc5NTAwDQoxOTg2LFRFWCxBTCxndXptYWpvMDEsNzUwMDANCjE5ODYsVEVYLEFMLHdyaWdocmkwMSw3MDAwMA0KMTk4NixURVgsQUwsY29ycmVlZDAxLDYyNTAwDQoxOTg2LFRFWCxBTCxsb3luZG1pMDEsNjAwMDANCjE5ODYsVEVYLEFMLG1vaG9yZGEwMSw2MDAwMA0KMTk4NixURVgsQUwsc2llcnJydTAxLDYwMDAwDQoxOTg2LFRFWCxBTCx3aWxsaW1pMDIsNjAwMDANCjE5ODYsVEVYLEFMLHdpdHRibzAxLDYwMDAwDQoxOTg2LFRPUixBTCxjYXVkaWJpMDEsMTUzMzMzMw0KMTk4NixUT1IsQUwsc3RpZWJkYTAxLDEwMDAwMDANCjE5ODYsVE9SLEFMLHVwc2hhd2kwMSw5NDAwMDANCjE5ODYsVE9SLEFMLGdhcmNpZGEwMSw3OTAwMDANCjE5ODYsVE9SLEFMLG1vc2VibGwwMSw3MzI1MDANCjE5ODYsVE9SLEFMLGJhcmZpamUwMSw3MjUwMDANCjE5ODYsVE9SLEFMLGJlbGxnZTAyLDcyNTAwMA0KMTk4NixUT1IsQUwsam9obnNjbDAxLDcyNTAwMA0KMTk4NixUT1IsQUwsYWxleGFkbzAxLDcwMDAwMA0KMTk4NixUT1IsQUwsY2xhbmNqaTAxLDY4MDAwMA0KMTk4NixUT1IsQUwsbGFtcGRlMDEsNTY2NjY3DQoxOTg2LFRPUixBTCxrZXlqaTAxLDU1MjUwMA0KMTk4NixUT1IsQUwsbGF2ZWxnYTAxLDUzMzMzMw0KMTk4NixUT1IsQUwsbWFydGlidTAxLDM0NzA5Ng0KMTk4NixUT1IsQUwsd2hpdHRlcjAxLDMyNTAwMA0KMTk4NixUT1IsQUwsaW9yZ2dhMDEsMzA2NjY3DQoxOTg2LFRPUixBTCxmZXJuYXRvMDEsMjc1MDAwDQoxOTg2LFRPUixBTCxtdWxsaXJhMDEsMjU1OTUxDQoxOTg2LFRPUixBTCxoZW5rZXRvMDEsMTkxMDAwDQoxOTg2LFRPUixBTCxsZWFjaHJpMDEsMTYyNTAwDQoxOTg2LFRPUixBTCxjZXJ1dGpvMDEsOTAwMDANCjE5ODYsVE9SLEFMLHNoZXBocm8wMSw5MDAwMA0KMTk4NixUT1IsQUwsZ3J1YmVrZTAxLDg4MDAwDQoxOTg2LFRPUixBTCxmaWxlcnRvMDEsODI1MDANCjE5ODYsVE9SLEFMLGVpY2hobWEwMSw3NDAwMA0KMTk4NixUT1IsQUwsbGVlbWEwMiw2MDAwMA0KMTk4NixUT1IsQUwsbXVzc2VqZTAxLDYwMDAwDQoxOTg2LEFUTCxOTCxtdXJwaGRhMDUsMTgyNTAwMA0KMTk4NixBVEwsTkwsaG9ybmVibzAxLDE4MDAwMDANCjE5ODYsQVRMLE5MLHN1dHRlYnIwMSwxNzI5MTY3DQoxOTg2LEFUTCxOTCxzaW1tb3RlMDEsMTAwMDAwMA0KMTk4NixBVEwsTkwsYmFya2VsZTAxLDg4MDAwMA0KMTk4NixBVEwsTkwsb2JlcmtrZTAxLDgyNTAwMA0KMTk4NixBVEwsTkwscmFtaXJyYTAxLDgyNTAwMA0KMTk4NixBVEwsTkwsZ2FyYmVnZTAxLDc4NjY2Nw0KMTk4NixBVEwsTkwsY2hhbWJjaDAxLDc2OTQ1Mg0KMTk4NixBVEwsTkwsd2FzaGljbDAxLDc1MDAwMA0KMTk4NixBVEwsTkwsbWFobGVyaTAxLDY4NzUwMA0KMTk4NixBVEwsTkwsY2FtcHJpMDEsNjAwMDAwDQoxOTg2LEFUTCxOTCx2aXJnaW96MDIsNTc1MDAwDQoxOTg2LEFUTCxOTCxiZW5lZGJyMDEsNTY1MDAwDQoxOTg2LEFUTCxOTCxodWJiYWdsMDEsNTA1MDAwDQoxOTg2LEFUTCxOTCxzYW1wbGJpMDEsNDcwMDAwDQoxOTg2LEFUTCxOTCxoYXJwZXRlMDEsNDI1MDAwDQoxOTg2LEFUTCxOTCxwYWxtZWRhMDEsMzkwMDAwDQoxOTg2LEFUTCxOTCxhY2tlcmppMDEsMzY3NTAwDQoxOTg2LEFUTCxOTCxtb3RsZWRhMDEsMjU3NTAwDQoxOTg2LEFUTCxOTCxtY211cmNyMDEsMjI1MDAwDQoxOTg2LEFUTCxOTCxkZWRtb2plMDEsMjAwMDAwDQoxOTg2LEFUTCxOTCxzbWl0aHphMDEsMjAwMDAwDQoxOTg2LEFUTCxOTCxqb2huc2pvMDUsMTA1MDAwDQoxOTg2LEFUTCxOTCxtb3Jlbm9tMDEsMTAwMDAwDQoxOTg2LEFUTCxOTCxhc3NlbnBhMDEsNjAwMDANCjE5ODYsQVRMLE5MLG9sd2luZWQwMSw2MDAwMA0KMTk4NixBVEwsTkwsc3BlY2tjbDAxLDYwMDAwDQoxOTg2LEFUTCxOTCx0aG9tYWFuMDEsNjAwMDANCjE5ODYsQ0hOLE5MLHN1dGNscmkwMSwxNTMwMDAwDQoxOTg2LENITixOTCxjZXlybzAxLDE0MDAwMDANCjE5ODYsQ0hOLE5MLHJ1dGh2ZGkwMSwxMDUwMDAwDQoxOTg2LENITixOTCxkdXJoYWxlMDEsOTgzMzMzDQoxOTg2LENITixOTCx0cm91dHN0MDEsODkwMDAwDQoxOTg2LENITixOTCxtYXR0aGdhMDEsODUwMDAwDQoxOTg2LENITixOTCxtdW1waGplMDEsODUwMDAwDQoxOTg2LENITixOTCxkYXZpc2pvMDIsODMzMzMzDQoxOTg2LENITixOTCxzYW5kZXNjMDEsODAwMDAwDQoxOTg2LENITixOTCxlY2tlcmRlMDEsNzgzMzMzDQoxOTg2LENITixOTCxtb3JlbGtlMDEsNzYwMDAwDQoxOTg2LENITixOTCxzbWl0aGxlMDIsNzIwMDAwDQoxOTg2LENITixOTCxzYW5kYnJ5MDEsNjY1MDAwDQoxOTg2LENITixOTCxmcmF6aWdlMDEsNjMzMzMzDQoxOTg2LENITixOTCxicnVzc3dhMDEsNTc1MDAwDQoxOTg2LENITixOTCxkZXJuaWJvMDEsNTU4MzMzDQoxOTg2LENITixOTCx0cmlsbG1hMDEsNTUwMDAwDQoxOTg2LENITixOTCxsb3Blc2RhMDEsNDkwMDAwDQoxOTg2LENITixOTCxib3NsZXRoMDEsMzI3NTAwDQoxOTg2LENITixOTCxzYWxhemx1MDEsMzI1MDAwDQoxOTg2LENITixOTCx3b29kc2dhMDEsMzI1MDAwDQoxOTg2LENITixOTCxzcGVpZWNoMDEsMjc1MDAwDQoxOTg2LENITixOTCxmcmFuY3RlMDEsMjUwMDAwDQoxOTg2LENITixOTCxmb250ZXJhMDEsMjQwMDAwDQoxOTg2LENITixOTCxkdW5zdHNoMDEsMTAwMDAwDQoxOTg2LENITixOTCxoZWJuZXJpMDEsMTAwMDAwDQoxOTg2LENITixOTCxrZW91Z21hMDIsMTAwMDAwDQoxOTg2LENITixOTCxndW1wZWRhMDEsNjQwMDANCjE5ODYsQ0hOLE5MLGxha2VzdDAxLDYwMDAwDQoxOTg2LENITixOTCxtYXJ0aW1pMDEsNjAwMDANCjE5ODYsQ0hOLE5MLG1veWVyamEwMSw2MDAwMA0KMTk4NixDSU4sTkwsc290b21hMDEsMTE1MDAwMA0KMTk4NixDSU4sTkwscGFya2VkYTAxLDExMDAwMDANCjE5ODYsQ0lOLE5MLGRlbm55am8wMSwxMDgzMzMzDQoxOTg2LENJTixOTCxyb3NlcGUwMSwxMDAwMDAwDQoxOTg2LENJTixOTCxjb25jZWRhMDEsOTIwMDAwDQoxOTg2LENJTixOTCxiZWxsYnUwMSw4NzAwMDANCjE5ODYsQ0lOLE5MLGRpYXpibzAxLDc3NTAwMA0KMTk4NixDSU4sTkwsb2VzdGVybzAxLDY1MDAwMA0KMTk4NixDSU4sTkwsZ3VsbGliaTAxLDU0NTU1NQ0KMTk4NixDSU4sTkwscG93ZXJ0ZTAxLDUwMDAwMA0KMTk4NixDSU4sTkwscHJpY2VqbzAyLDQzMDAwMA0KMTk4NixDSU4sTkwscGFzdG9mcjAxLDQwNTAwMA0KMTk4NixDSU4sTkwsbWlsbmVlZDAxLDM1MDAwMA0KMTk4NixDSU4sTkwscGVyZXp0bzAxLDI3NTAwMA0KMTk4NixDSU4sTkwsZXNhc2tuaTAxLDI3MjUwMA0KMTk4NixDSU4sTkwsdmVuYWJtYTAxLDIyNTAwMA0KMTk4NixDSU4sTkwsYnJvd250bzA1LDIxNTAwMA0KMTk4NixDSU4sTkwsZnJhbmNqbzAxLDE5NTAwMA0KMTk4NixDSU4sTkwsdmFuZ29kYTAxLDE1MDAwMA0KMTk4NixDSU4sTkwsYnV0ZXJzYTAxLDEwMjUwMA0KMTk4NixDSU4sTkwscm9iaW5ybzAxLDkyNTAwDQoxOTg2LENJTixOTCxkYXZpc2VyMDEsOTAwMDANCjE5ODYsQ0lOLE5MLHdlbHNoY2gwMSw4MDAwMA0KMTk4NixDSU4sTkwsd2lsbGljYTAxLDcwMDAwDQoxOTg2LENJTixOTCxkYW5pZWthMDEsNjAwMDANCjE5ODYsQ0lOLE5MLGpvbmVzdHIwMSw2MDAwMA0KMTk4NixDSU4sTkwsbGFuZHJiaTAxLDYwMDAwDQoxOTg2LENJTixOTCxsYXJraWJhMDEsNjAwMDANCjE5ODYsQ0lOLE5MLG11cnBocm8wMSw2MDAwMA0KMTk4NixDSU4sTkwsc3RpbGxrdTAxLDYwMDAwDQoxOTg2LEhPVSxOTCxyeWFubm8wMSwxMTI1MDAwDQoxOTg2LEhPVSxOTCxrbmVwcGJvMDEsMTAwMDAwMA0KMTk4NixIT1UsTkwscHVobHRlMDEsODUwMDAwDQoxOTg2LEhPVSxOTCxjcnV6am8wMSw3NTUwMDANCjE5ODYsSE9VLE5MLHNjb3R0bWkwMyw2NjY2NjcNCjE5ODYsSE9VLE5MLHNtaXRoZGEwMiw2NTAwMDANCjE5ODYsSE9VLE5MLGdhcm5lcGgwMSw2MDAwMDANCjE5ODYsSE9VLE5MLHRob25kaTAxLDYwMDAwMA0KMTk4NixIT1UsTkwsZG9yYW5iaTAyLDU1MDAwMA0KMTk4NixIT1UsTkwsYXNoYnlhbDAxLDUyNTAwMA0KMTk4NixIT1UsTkwscmV5bm9jcjAxLDQxNjY2Nw0KMTk4NixIT1UsTkwsd2FsbGlkZTAxLDM2NjY2Nw0KMTk4NixIT1UsTkwsZGF3bGViaTAxLDMyNTAwMA0KMTk4NixIT1UsTkwsYmFzc2tlMDEsMzEwMDAwDQoxOTg2LEhPVSxOTCxkaXBpbmZyMDEsMjgwMDAwDQoxOTg2LEhPVSxOTCxsb3BlemF1MDEsMjIzMjc1DQoxOTg2LEhPVSxOTCxkYXZpc2dsMDEsMTIwMDAwDQoxOTg2LEhPVSxOTCxjYWxob2plMDEsOTUwMDANCjE5ODYsSE9VLE5MLHBhbmtvamkwMSw4NTAwMA0KMTk4NixIT1UsTkwsaGF0Y2hiaTAxLDgwMDAwDQoxOTg2LEhPVSxOTCxkZXNoYWppMDEsNjUwMDANCjE5ODYsSE9VLE5MLGtlcmZlY2gwMSw2NTAwMA0KMTk4NixIT1UsTkwsYW5kZXJsYTAyLDYwMDAwDQoxOTg2LEhPVSxOTCxtaXplcmpvMDEsNjAwMDANCjE5ODYsTEFOLE5MLHZhbGVuZmUwMSwxNjAwMDAwDQoxOTg2LExBTixOTCxndWVycnBlMDEsMTM3MDAwMA0KMTk4NixMQU4sTkwsaGVyc2hvcjAxLDEwMDAwMDANCjE5ODYsTEFOLE5MLHJldXNzamUwMSwxMDAwMDAwDQoxOTg2LExBTixOTCxtYWRsb2JpMDEsODQxNjY3DQoxOTg2LExBTixOTCxzY2lvc21pMDEsODAwMDAwDQoxOTg2LExBTixOTCxob25leXJpMDEsNzU1MDAwDQoxOTg2LExBTixOTCx3ZWxjaGJvMDEsNzQzNzUwDQoxOTg2LExBTixOTCxtYXJzaG1pMDIsNjUwMDAwDQoxOTg2LExBTixOTCxsYW5kcmtlMDEsNjM3NTAwDQoxOTg2LExBTixOTCxzYXhzdDAxLDU4NDYyNA0KMTk4NixMQU4sTkwsbmllZGV0bzAxLDUzMTI1MA0KMTk4NixMQU4sTkwsdmFuZGVlZDAxLDQ1NTAwMA0KMTk4NixMQU4sTkwsY2FiZWxlbjAxLDQ1MDAwMA0KMTk4NixMQU4sTkwscnVzc2ViaTAxLDQ1MDAwMA0KMTk4NixMQU4sTkwsdHJldmlhbDAxLDQwOTQ4NQ0KMTk4NixMQU4sTkwsYmFpbG9ibzAxLDM3NTAwMA0KMTk4NixMQU4sTkwscGVuYWFsMDEsMzUwMDAwDQoxOTg2LExBTixOTCxicm9ja2dyMDEsMzI1MDAwDQoxOTg2LExBTixOTCxtYXR1c2xlMDEsMjIwMDAwDQoxOTg2LExBTixOTCxhbmRlcmRhMDIsMjAwMDAwDQoxOTg2LExBTixOTCxiZWNrd2pvMDEsMjAwMDAwDQoxOTg2LExBTixOTCxjZWRlbmNlMDEsMjAwMDAwDQoxOTg2LExBTixOTCxob3dlbGtlMDEsMTc1MDAwDQoxOTg2LExBTixOTCxkdW5jYW1hMDEsMTUwMDAwDQoxOTg2LExBTixOTCx2b25vaGRhMDEsNjg1MDANCjE5ODYsTEFOLE5MLGdvbnpham8wMiw2NTAwMA0KMTk4NixMQU4sTkwsc3R1YmJmcjAxLDY1MDAwDQoxOTg2LExBTixOTCxwb3dlbGRlMDEsNjIwMDANCjE5ODYsTEFOLE5MLGhhbWlsamUwMSw2MDAwMA0KMTk4NixMQU4sTkwsaG9sdG9icjAxLDYwMDAwDQoxOTg2LExBTixOTCx3aWxsaXJlMDEsNjAwMDANCjE5ODYsTU9OLE5MLHJhaW5ldGkwMSwxNTE1MDAwDQoxOTg2LE1PTixOTCxkYXdzb2FuMDEsMTA0NzAwMA0KMTk4NixNT04sTkwsdGhvbXBqYTAxLDEwMDAwMDANCjE5ODYsTU9OLE5MLGxlYWNoMDEsODUwMDAwDQoxOTg2LE1PTixOTCxyZWFyZGplMDEsODUwMDAwDQoxOTg2LE1PTixOTCxzbWl0aGJyMDEsNzAwMDAwDQoxOTg2LE1PTixOTCxicm9va2h1MDEsNjUwMDAwDQoxOTg2LE1PTixOTCx3YWxsYXRpMDEsNjUwMDAwDQoxOTg2LE1PTixOTCxsYXd2YTAxLDQ1MDAwMA0KMTk4NixNT04sTkwsc2NoYXRkYTAxLDQxNTAwMA0KMTk4NixNT04sTkwsd29obGZqaTAxLDM1MDAwMA0KMTk4NixNT04sTkwsZmx5bm5kbzAxLDMyNTAwMA0KMTk4NixNT04sTkwsa3JlbmN3YTAxLDMyMDAwMA0KMTk4NixNT04sTkwsbWNnYWZhbjAxLDE4MDAwMA0KMTk4NixNT04sTkwsaGVza2VqbzAxLDE3MDAwMA0KMTk4NixNT04sTkwsdGhvbXBzYzAxLDE3MDAwMA0KMTk4NixNT04sTkwsYnVya2V0aTAxLDE2MDAwMA0KMTk4NixNT04sTkwsZml0emdtaTAyLDE0NzAwMA0KMTk4NixNT04sTkwscm9iZXJiZTAxLDEzODEwMA0KMTk4NixNT04sTkwsdGliYnNqYTAxLDEyNzUwMA0KMTk4NixNT04sTkwsd2Vic3RtaTAxLDEyMDAwMA0KMTk4NixNT04sTkwsbmlldG90bzAxLDkwMDAwDQoxOTg2LE1PTixOTCx3aW5uaWhlMDEsODc1MDANCjE5ODYsTU9OLE5MLGJpbGFyZGEwMSw4MDAwMA0KMTk4NixNT04sTkwseW91bWFmbDAxLDcwMDAwDQoxOTg2LE1PTixOTCxnYWxhcmFuMDEsNjc1MDANCjE5ODYsTU9OLE5MLGh1bnRyYTAxLDY1MDAwDQoxOTg2LE1PTixOTCxqb2huc3dhMDMsNjUwMDANCjE5ODYsTU9OLE5MLG5ld21hYWwwMSw2MjUwMA0KMTk4NixNT04sTkwsc2VicmFibzAxLDYxNTAwDQoxOTg2LE1PTixOTCxyaXZlcmx1MDEsNjAwMDANCjE5ODYsTU9OLE5MLHRvbWxpZGEwMSw2MDAwMA0KMTk4NixOWU4sTkwsZm9zdGVnZTAxLDI4MDAwMDANCjE5ODYsTllOLE5MLGNhcnRlZ2EwMSwyMTYwNzE0DQoxOTg2LE5ZTixOTCxoZXJuYWtlMDEsMTY1MDAwMA0KMTk4NixOWU4sTkwsZ29vZGVkdzAxLDEzMjAwMDANCjE5ODYsTllOLE5MLHN0cmF3ZGEwMSw5NDUwMDANCjE5ODYsTllOLE5MLG9yb3NjamUwMSw4MjUwMDANCjE5ODYsTllOLE5MLHdpbHNvbW8wMSw3MDAwMDANCjE5ODYsTllOLE5MLGtuaWdocmEwMSw2NDUwMDANCjE5ODYsTllOLE5MLG9qZWRhYm8wMSw1NTAwMDANCjE5ODYsTllOLE5MLGx5bmNoZWQwMSw1MzAwMDANCjE5ODYsTllOLE5MLGRhcmxpcm8wMSw0NDAwMDANCjE5ODYsTllOLE5MLGhlZXBkYTAxLDM1MDAwMA0KMTk4NixOWU4sTkwsYmFja213YTAxLDMyNTAwMA0KMTk4NixOWU4sTkwsc2lza2RvMDEsMjc1MDAwDQoxOTg2LE5ZTixOTCxzYW50YXJhMDEsMjM1MDAwDQoxOTg2LE5ZTixOTCxqb2huc2hvMDEsMjI3NTAwDQoxOTg2LE5ZTixOTCxjb3Jjb3RpMDEsMjIwMDAwDQoxOTg2LE5ZTixOTCxmZXJuYXNpMDEsMjAwMDAwDQoxOTg2LE5ZTixOTCx0ZXVmZXRpMDEsMjAwMDAwDQoxOTg2LE5ZTixOTCxtY2Rvd3JvMDEsMTg1MDAwDQoxOTg2LE5ZTixOTCxhZ3VpbHJpMDEsMTMwMDAwDQoxOTg2LE5ZTixOTCxkeWtzdGxlMDEsOTI1MDANCjE5ODYsTllOLE5MLG5pZW1hcmEwMSw4MzAwMA0KMTk4NixOWU4sTkwsZ2liYm9qbzAyLDY1MDAwDQoxOTg2LE5ZTixOTCxlbHN0ZWtlMDEsNjAwMDANCjE5ODYsTllOLE5MLGhlYXJuZWQwMiw2MDAwMA0KMTk4NixOWU4sTkwsbWF6emlsZTAxLDYwMDAwDQoxOTg2LE5ZTixOTCxtaXRjaGtlMDEsNjAwMDANCjE5ODYsUEhJLE5MLHNjaG1pbWkwMSwyMTM2NjY2DQoxOTg2LFBISSxOTCxjYXJsdHN0MDEsMTAwMDAwMA0KMTk4NixQSEksTkwsdGVrdWxrZTAxLDg5MDAwMA0KMTk4NixQSEksTkwsaHVtZXRvMDEsODAwMDAwDQoxOTg2LFBISSxOTCxyYXdsZXNoMDEsODAwMDAwDQoxOTg2LFBISSxOTCxiZWRyb3N0MDEsNjUwMDAwDQoxOTg2LFBISSxOTCxoYXllc3ZvMDEsNjUwMDAwDQoxOTg2LFBISSxOTCxzYW11ZWp1MDEsNTEyNTAwDQoxOTg2LFBISSxOTCx3aWxzb2dsMDEsNDg3NTAwDQoxOTg2LFBISSxOTCxzdGVmZWpvMDEsNDAwMDAwDQoxOTg2LFBISSxOTCxncm9zc2dyMDEsMzc1MDAwDQoxOTg2LFBISSxOTCxncm9zc2tlMDEsMzU1MDAwDQoxOTg2LFBISSxOTCxyZWR1c2dhMDEsMzUwMDAwDQoxOTg2LFBISSxOTCxodWRzb2NoMDIsMjc3NTAwDQoxOTg2LFBISSxOTCxhZ3VheWx1MDEsMjc1MDAwDQoxOTg2LFBISSxOTCxhbmRlcmxhMDIsMjQwMDAwDQoxOTg2LFBISSxOTCxmb2xleXRvMDIsMjEwMDAwDQoxOTg2LFBISSxOTCxjYXJtYWRvMDEsMTY1MDAwDQoxOTg2LFBISSxOTCxydXNzZWpvMDIsMTAwMDAwDQoxOTg2LFBISSxOTCxzY2h1cmkwMSwxMDAwMDANCjE5ODYsUEhJLE5MLHN0b25lamUwMSwxMDAwMDANCjE5ODYsUEhJLE5MLHRob21wbWkwMiw5NTAwMA0KMTk4NixQSEksTkwscm9lbmlybzAxLDg1MDAwDQoxOTg2LFBISSxOTCxkYXVsdGRhMDEsODAwMDANCjE5ODYsUEhJLE5MLGtuaWNlYWwwMSw4MDAwMA0KMTk4NixQSEksTkwsamVsdHpzdDAxLDcwMDAwDQoxOTg2LFBISSxOTCxyZXlub3JvMDIsNjYwMDANCjE5ODYsUEhJLE5MLGphY2tzbWkwMiw2MDAwMA0KMTk4NixQSEksTkwsbWFkZHVtaTAxLDYwMDAwDQoxOTg2LFBISSxOTCxydWZmaWJyMDEsNjAwMDANCjE5ODYsUEhJLE5MLHRvbGl2ZnIwMSw2MDAwMA0KMTk4NixQSVQsTkwsZGVsZW9qbzAxLDE4MjUwMDANCjE5ODYsUElULE5MLHBlbmF0bzAxLDEyMjUwMDANCjE5ODYsUElULE5MLG1jd2lsbGEwMSwxMDgwMDAwDQoxOTg2LFBJVCxOTCxyYXlqbzAxLDc1NzAwMA0KMTk4NixQSVQsTkwscmV1c2NyaTAxLDcwMDAwMA0KMTk4NixQSVQsTkwscm9iaW5kbzAxLDY3MDAwMA0KMTk4NixQSVQsTkwscmhvZGVyaTAxLDYyMDAwMA0KMTk4NixQSVQsTkwsbWF6emlsZTAxLDYwMDAwMA0KMTk4NixQSVQsTkwsbGV6Y2FzaTAxLDUwMDAwMA0KMTk4NixQSVQsTkwsbGVtYXNqbzAxLDQwMDAwMA0KMTk4NixQSVQsTkwsbW9ycmlqaTAxLDMxNzUwMA0KMTk4NixQSVQsTkwsZ3VhbnRjZTAxLDMwNzUwMA0KMTk4NixQSVQsTkwsYWxtb25iaTAxLDI2MDAwMA0KMTk4NixQSVQsTkwsd2FzaGl1bDAxLDE4MDAwMA0KMTk4NixQSVQsTkwsd2Fsa2JvMDEsMTc1MDAwDQoxOTg2LFBJVCxOTCxvcnN1bGpvMDEsMTM1MDAwDQoxOTg2LFBJVCxOTCxyZXlub3JqMDEsMTMwMDAwDQoxOTg2LFBJVCxOTCxiaWVsZW1pMDEsMTEwNTAwDQoxOTg2LFBJVCxOTCx3aW5uamkwMSwxMTAwMDANCjE5ODYsUElULE5MLGNsZW1lcGEwMSwxMDI1MDANCjE5ODYsUElULE5MLG9ydGl6anUwMSw5NzAwMA0KMTk4NixQSVQsTkwsYnJlYW1zaTAxLDkyMDAwDQoxOTg2LFBJVCxOTCxrcmF3Y3JhMDEsNjcwMDANCjE5ODYsUElULE5MLGRpYXptaTAxLDY2NTAwDQoxOTg2LFBJVCxOTCxkaXN0ZWJlMDEsNjYwMDANCjE5ODYsUElULE5MLGJlbGxpcmEwMSw2NTAwMA0KMTk4NixQSVQsTkwsa2lwcGVibzAxLDY1MDAwDQoxOTg2LFBJVCxOTCxib25kc2JhMDEsNjAwMDANCjE5ODYsUElULE5MLGpvbmVzYmEwMSw2MDAwMA0KMTk4NixTRE4sTkwsZ2FydmVzdDAxLDEyNTAwMDANCjE5ODYsU0ROLE5MLHRlbXBsZ2EwMSwxMTAzMDE4DQoxOTg2LFNETixOTCxnb3NzYXJpMDEsMTA0Njc2MQ0KMTk4NixTRE4sTkwsaG95dGxhMDEsMTAwMDAwMA0KMTk4NixTRE4sTkwsa2VubmV0ZTAyLDkyMDAwMA0KMTk4NixTRE4sTkwsbmV0dGxncjAxLDkxMjI0Nw0KMTk4NixTRE4sTkwsc2hvd2VyMDEsNjg3NTAwDQoxOTg2LFNETixOTCxzdG9kZHRpMDEsNjc1MDAwDQoxOTg2LFNETixOTCxnd3lubnRvMDEsNTQwMDAwDQoxOTg2LFNETixOTCxsZWZmZWNyMDEsMzkwMDAwDQoxOTg2LFNETixOTCxyb3lzdGplMDEsMzYyNTAwDQoxOTg2LFNETixOTCxkcmF2ZWRhMDEsMzUwMDAwDQoxOTg2LFNETixOTCxoYXdraWFuMDEsMzAwMDAwDQoxOTg2LFNETixOTCxtY3JleWtlMDEsMjc1MDAwDQoxOTg2LFNETixOTCx0aHVybW1hMDEsMjcwMDAwDQoxOTg2LFNETixOTCxtYXJ0aWNhMDEsMjQwMDAwDQoxOTg2LFNETixOTCxpb3JnZGEwMSwyMTAwMDANCjE5ODYsU0ROLE5MLHd5bm5lbWEwMSwyMDUwMDANCjE5ODYsU0ROLE5MLGZsYW5udGkwMSwxOTE2NjcNCjE5ODYsU0ROLE5MLGJvY2h5YnIwMSwxMjUwMDANCjE5ODYsU0ROLE5MLG1jY3VsbGEwMSw3MjAwMA0KMTk4NixTRE4sTkwsd2FsdGVnZTAxLDcwMDAwDQoxOTg2LFNETixOTCx3b2puYWVkMDEsNjUwMDANCjE5ODYsU0ROLE5MLGtydWtqbzAxLDYwMDAwDQoxOTg2LFNETixOTCxyb2JlcmJpMDEsNjAwMDANCjE5ODYsU0ZOLE5MLGxlb25hamUwMSw5MDAwMDANCjE5ODYsU0ZOLE5MLG1pbnRvZ3IwMSw3NjUwMDANCjE5ODYsU0ZOLE5MLGtydWtvbWkwMSw3NDUwMDANCjE5ODYsU0ZOLE5MLGRyaWVzZGEwMSw3MDAwMDANCjE5ODYsU0ZOLE5MLGRhdmlzY2gwMSw2OTAwMDANCjE5ODYsU0ZOLE5MLGJyZW5sYm8wMSw0NjAwMDANCjE5ODYsU0ZOLE5MLGhhbW1hYXQwMSw0NjAwMDANCjE5ODYsU0ZOLE5MLGJsdWV2aTAxLDQ1MDAwMA0KMTk4NixTRk4sTkwsbWFsZG9jYTAxLDQ1MDAwMA0KMTk4NixTRk4sTkwseW91bmdqbzAyLDQ1MDAwMA0KMTk4NixTRk4sTkwsZ290dGppMDEsMzc1MDAwDQoxOTg2LFNGTixOTCxkYXZpc21hMDEsMzUwMDAwDQoxOTg2LFNGTixOTCxiZXJlbmp1MDEsMzQ1MDAwDQoxOTg2LFNGTixOTCx3aWxsaWZyMDEsMjc1MDAwDQoxOTg2LFNGTixOTCxsYWNvc21pMDEsMjI1MDAwDQoxOTg2LFNGTixOTCxnYXJyZXNjMDEsMjA1MDAwDQoxOTg2LFNGTixOTCxnbGFkZGRhMDEsMTc1MDAwDQoxOTg2LFNGTixOTCxicm93bmNoMDIsMTU1MDAwDQoxOTg2LFNGTixOTCx1cmliZWpvMDEsMTMzMDAwDQoxOTg2LFNGTixOTCxyb2JpbmplMDEsMTI3NTAwDQoxOTg2LFNGTixOTCxtZWx2aWJvMDEsNzUwMDANCjE5ODYsU0ZOLE5MLG1hc29ucm8wMSw3MTUwMA0KMTk4NixTRk4sTkwscXVpbm9sdTAxLDY1MDAwDQoxOTg2LFNGTixOTCxhbGRyZW1pMDEsNjAwMDANCjE5ODYsU0ZOLE5MLGNsYXJrd2kwMiw2MDAwMA0KMTk4NixTRk4sTkwsZG93bnNrZTAxLDYwMDAwDQoxOTg2LFNGTixOTCxrdXRjaHJhMDEsNjAwMDANCjE5ODYsU0ZOLE5MLHRob21wcm8wMSw2MDAwMA0KMTk4NixTTE4sTkwsc21pdGhvejAxLDE5NDAwMDANCjE5ODYsU0xOLE5MLGNsYXJramEwMSwxMzAwMDAwDQoxOTg2LFNMTixOTCx0dWRvcmpvMDEsMTAwMDAwMA0KMTk4NixTTE4sTkwsaGVycnRvMDEsNzUwMDAwDQoxOTg2LFNMTixOTCxoZWF0aG1pMDIsNTMzMzMzDQoxOTg2LFNMTixOTCxmb3JzY2JvMDEsNTI3MjM1DQoxOTg2LFNMTixOTCxtY2dlZXdpMDEsNTAwMDAwDQoxOTg2LFNMTixOTCxsYWh0aWplMDEsNDUwMDAwDQoxOTg2LFNMTixOTCxjb3hkYTAxLDQwMDAwMA0KMTk4NixTTE4sTkwsdmFuc2xhbjAxLDMzNTAwMA0KMTk4NixTTE4sTkwsZGF5bGVrZTAxLDMwMDAwMA0KMTk4NixTTE4sTkwsaG9ydG9yaTAxLDI3NTAwMA0KMTk4NixTTE4sTkwsbGFuZHJ0aTAxLDIzNjY2Nw0KMTk4NixTTE4sTkwscGVuZGx0ZTAxLDE5MDAwMA0KMTk4NixTTE4sTkwsY29sZW12aTAxLDE1MDAwMA0KMTk4NixTTE4sTkwsaHVyZGxjbDAxLDEyMDAwMA0KMTk4NixTTE4sTkwsY29ucm90aTAxLDExMzc3NQ0KMTk4NixTTE4sTkwsbGF3bGV0bzAxLDEwMDAwMA0KMTk4NixTTE4sTkwsd2hpdGVqZTAxLDEwMDAwMA0KMTk4NixTTE4sTkwsd29ycmV0bzAxLDEwMDAwMA0KMTk4NixTTE4sTkwsb3F1ZW5qbzAxLDc5MDAwDQoxOTg2LFNMTixOTCxsYXZhbG1pMDEsNzAwMDANCjE5ODYsU0xOLE5MLHBlcnJ5cGEwMiw2NTAwMA0KMTk4NixTTE4sTkwsZm9yZGN1MDEsNjAwMDANCjE5ODYsU0xOLE5MLG1hdGhlZ3IwMSw2MDAwMA0KMTk4NixTTE4sTkwsbW9ycmlqbzA3LDYwMDAwDQoxOTg2LFNMTixOTCxzb2ZmcmEwMSw2MDAwMA0K]]></data>
	</file>
	<file>
	  <filename>/testing/test_data/Salaries.csv</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eWVhcklELHRlYW1JRCxsZ0lELHBsYXllcklELHNhbGFyeQ0KMTk4NSxCQUwsQUwsbXVycmFlZDAyLDE0NzI4MTkNCjE5ODUsQkFMLEFMLGx5bm5mcjAxLDEwOTAwMDANCjE5ODUsQkFMLEFMLHJpcGtlY2EwMSw4MDAwMDANCjE5ODUsQkFMLEFMLGxhY3lsZTAxLDcyNTAwMA0KMTk4NSxCQUwsQUwsZmxhbmFtaTAxLDY0MTY2Nw0KMTk4NSxCQUwsQUwsYm9kZGltaTAxLDYyNTAwMA0KMTk4NSxCQUwsQUwsc3Rld2FzYTAxLDU4MTI1MA0KMTk4NSxCQUwsQUwsbWFydGlkZTAxLDU2MDAwMA0KMTk4NSxCQUwsQUwscm9lbmlnYTAxLDU1ODMzMw0KMTk4NSxCQUwsQUwsbWNncmVzYzAxLDU0NzE0Mw0KMTk4NSxCQUwsQUwsZGVtcHNyaTAxLDUxMjUwMA0KMTk4NSxCQUwsQUwsZ3Jvc3N3YTAxLDQ4MzMzMw0KMTk4NSxCQUwsQUwsZGF1ZXJyaTAxLDQ4MDAwMA0KMTk4NSxCQUwsQUwsZm9yZGRhMDEsNDUwMDAwDQoxOTg1LEJBTCxBTCxtYXJ0aXRpMDEsNDQwMDAwDQoxOTg1LEJBTCxBTCxkYXZpc3N0MDIsNDM3NTAwDQoxOTg1LEJBTCxBTCxkd3llcmppMDEsMzc1MDAwDQoxOTg1LEJBTCxBTCxub2xhbmpvMDEsMzQxNjY3DQoxOTg1LEJBTCxBTCxzaGVsYmpvMDEsMTMwMDAwDQoxOTg1LEJBTCxBTCxyYXlmb2ZsMDEsMTI4NTAwDQoxOTg1LEJBTCxBTCx5b3VuZ21pMDEsMTIxMDAwDQoxOTg1LEJBTCxBTCxzaGVldGxhMDEsNjAwMDANCjE5ODUsQk9TLEFMLHN0YW5sYm8wMSwxMDc1MDAwDQoxOTg1LEJPUyxBTCxib2dnc3dhMDEsMTAwMDAwMA0KMTk4NSxCT1MsQUwsYXJtYXN0bzAxLDkxNTAwMA0KMTk4NSxCT1MsQUwsZXZhbnNkdzAxLDgwMDAwMA0KMTk4NSxCT1MsQUwscmljZWppMDEsNzc5MjI3DQoxOTg1LEJPUyxBTCxidWNrbmJpMDEsNzQ3NTAwDQoxOTg1LEJPUyxBTCxlYXNsZW1pMDEsNjUwMDAwDQoxOTg1LEJPUyxBTCxjbGVhcm1hMDEsNTgwMDAwDQoxOTg1LEJPUyxBTCxyZW15amUwMSw0ODMzMzMNCjE5ODUsQk9TLEFMLGdlZG1hcmkwMSw0Nzc1MDANCjE5ODUsQk9TLEFMLGtpc29uYnIwMSwzNzAwMDANCjE5ODUsQk9TLEFMLGhvZmZtZ2wwMSwzMzUwMDANCjE5ODUsQk9TLEFMLHN0YXBsZGEwMSwzMjUwMDANCjE5ODUsQk9TLEFMLGh1cnN0YnIwMSwzMDAwMDANCjE5ODUsQk9TLEFMLG1pbGxlcmkwMSwyNzUwMDANCjE5ODUsQk9TLEFMLGJhcnJlbWEwMiwyNzI1MDANCjE5ODUsQk9TLEFMLG5pY2hvcmUwMSwyNjAwMDANCjE5ODUsQk9TLEFMLG9qZWRhYm8wMSwyNDAwMDANCjE5ODUsQk9TLEFMLGJveWRvaTAxLDE3NzUwMA0KMTk4NSxCT1MsQUwsbmlwcGVhbDAxLDE2NTAwMA0KMTk4NSxCT1MsQUwsY3Jhd2ZzdDAxLDE2MDAwMA0KMTk4NSxCT1MsQUwsY2xlbWVybzAyLDE0MDAwMA0KMTk4NSxCT1MsQUwsZ3V0aWVqYTAxLDEzMDAwMA0KMTk4NSxCT1MsQUwsanVyYWtlZDAxLDEyNTAwMA0KMTk4NSxCT1MsQUwsYm9yZGlyaTAxLDExNTAwMA0KMTk4NSxDQUwsQUwsZGVjaW5kbzAxLDExMDAwMDANCjE5ODUsQ0FMLEFMLGphY2tzcmUwMSwxMDU4ODk0DQoxOTg1LENBTCxBTCxib29uZWJvMDEsODgzMDAwDQoxOTg1LENBTCxBTCxjYXJld3JvMDEsODc1MDAwDQoxOTg1LENBTCxBTCxidXJsZXJpMDEsODU2NjY3DQoxOTg1LENBTCxBTCxkb3duaWJyMDEsODA4MzMzDQoxOTg1LENBTCxBTCxzdXR0b2RvMDEsNzUwMDAwDQoxOTg1LENBTCxBTCxoZW5kcmdlMDEsNzM3MDAwDQoxOTg1LENBTCxBTCxncmljaGJvMDEsNzAwMDAwDQoxOTg1LENBTCxBTCx3aXR0bWkwMSw2ODMzMzMNCjE5ODUsQ0FMLEFMLGZvcnNja2UwMSw2MzMzMzMNCjE5ODUsQ0FMLEFMLGhvbGxhYWwwMSw2MjUwMDANCjE5ODUsQ0FMLEFMLGNhbmRlam8wMSw2MTI1MDANCjE5ODUsQ0FMLEFMLHphaG5nZTAxLDU1MDAwMA0KMTk4NSxDQUwsQUwsc2xhdG9qaTAxLDQzNzUwMA0KMTk4NSxDQUwsQUwsbW9vcmVkbzAxLDQwNzUwMA0KMTk4NSxDQUwsQUwsam9uZXNydTAxLDM5MDAwMA0KMTk4NSxDQUwsQUwsYmVuaXFqdTAxLDM2NTAwMA0KMTk4NSxDQUwsQUwsY29yYmVkbzAxLDM2MDAwMA0KMTk4NSxDQUwsQUwsbGFjb3JmcjAxLDM0NjY2Nw0KMTk4NSxDQUwsQUwsc2FuY2hsdTAxLDM0MDAwMA0KMTk4NSxDQUwsQUwsd2lsZm9ybzAxLDI2NjY2Nw0KMTk4NSxDQUwsQUwscm9tYW5ybzAxLDE0NjUwMA0KMTk4NSxDQUwsQUwsc2NvbmlkYTAxLDEzMDAwMA0KMTk4NSxDQUwsQUwscGV0dGlnYTAxLDEyNTAwMA0KMTk4NSxDQUwsQUwsc2Nob2ZkaTAyLDEyMDAwMA0KMTk4NSxDQUwsQUwsY2xpYnVzdDAyLDYwMDAwDQoxOTg1LENBTCxBTCxtY2Nhc2tpMDEsNjAwMDANCjE5ODUsQ0hBLEFMLGNydXpqdTAxLDEyNDIzMzMNCjE5ODUsQ0hBLEFMLHNlYXZldG8wMSwxMTM2MjYyDQoxOTg1LENIQSxBTCxkb3Rzb3JpMDEsOTAwMDAwDQoxOTg1LENIQSxBTCxiYW5uaWZsMDEsODExMjUwDQoxOTg1LENIQSxBTCxidXJuc2JyMDEsNzI3NTAwDQoxOTg1LENIQSxBTCxmaXNrY2EwMSw2ODUwMDANCjE5ODUsQ0hBLEFMLGJhaW5laGEwMSw2NzUwMDANCjE5ODUsQ0hBLEFMLGxhd3J1MDEsNTY1MDAwDQoxOTg1LENIQSxBTCxsb2xsYXRpMDEsNDYzMDAwDQoxOTg1LENIQSxBTCxzcGlsbGRhMDEsMzkwMDAwDQoxOTg1LENIQSxBTCxwYWNpb3RvMDEsMzMzMzMzDQoxOTg1LENIQSxBTCxzYWxhemx1MDEsMzI1MDAwDQoxOTg1LENIQSxBTCxraXR0bHJvMDEsMzAwMDAwDQoxOTg1LENIQSxBTCxqYW1lc2JvMDEsMjY1MDAwDQoxOTg1LENIQSxBTCxoaWxsbWEwMSwyMDAwMDANCjE5ODUsQ0hBLEFMLHdhbGtlZ3IwMSwxOTUwMDANCjE5ODUsQ0hBLEFMLGZsZXRjc2MwMSwxNjUwMDANCjE5ODUsQ0hBLEFMLGhhaXJzamUwMSwxNTAwMDANCjE5ODUsQ0hBLEFMLGFnb3N0anUwMSwxNDc1MDANCjE5ODUsQ0hBLEFMLG5lbHNvZ2UwMSwxMTAwMDANCjE5ODUsQ0hBLEFMLGd1aWxsb3owMSw2MDAwMA0KMTk4NSxDTEUsQUwsdGhvcm5hbjAxLDExMDAwMDANCjE5ODUsQ0xFLEFMLGJseWxlYmUwMSw2NTAwMDANCjE5ODUsQ0xFLEFMLGhhcmdybWkwMSw0NTgzMzMNCjE5ODUsQ0xFLEFMLGZyYW5janUwMSw0NTUwMDANCjE5ODUsQ0xFLEFMLGJ1dGxlYnIwMSw0MjUwMDANCjE5ODUsQ0xFLEFMLGJlcm5hdG8wMSw0MDAwMDANCjE5ODUsQ0xFLEFMLHZ1a292Z2UwMSwzNzUwMDANCjE5ODUsQ0xFLEFMLGF5YWxhYmUwMSwzMDMzMzMNCjE5ODUsQ0xFLEFMLHJ1aGxldmUwMSwyOTUwMDANCjE5ODUsQ0xFLEFMLHRhYmxlcGEwMSwyODUwMDANCjE5ODUsQ0xFLEFMLGVhc3RlamEwMSwyNjUwMDANCjE5ODUsQ0xFLEFMLGJhbmRvY2gwMSwyMjUwMDANCjE5ODUsQ0xFLEFMLGhlYXRvbmUwMSwyMjUwMDANCjE5ODUsQ0xFLEFMLGhhbGxtZTAxLDIxMDAwMA0KMTk4NSxDTEUsQUwsZ2FybGF3YTAxLDIwMDAwMA0KMTk4NSxDTEUsQUwsZmlzY2htaTAxLDE5MDAwMA0KMTk4NSxDTEUsQUwsamFjb2JicjAxLDE0MDAwMA0KMTk4NSxDTEUsQUwsd2FkZGV0bzAxLDEyNTAwMA0KMTk4NSxDTEUsQUwsY2FtYWNlcjAxLDExNTAwMA0KMTk4NSxDTEUsQUwsY2FydGVqbzAxLDExMDAwMA0KMTk4NSxERVQsQUwsZXZhbnNkYTAxLDEwODMzMzMNCjE5ODUsREVULEFMLG1vcnJpamEwMiw4ODUwMDANCjE5ODUsREVULEFMLHBldHJ5ZGEwMSw4NzUwMDANCjE5ODUsREVULEFMLHBhcnJpbGEwMiw3NjY2NjcNCjE5ODUsREVULEFMLGdpYnNva2kwMSw2ODUwMDANCjE5ODUsREVULEFMLGhlcm5kbGEwMSw2NzUwMDANCjE5ODUsREVULEFMLGxlbW9uY2gwMSw2NzAwMDANCjE5ODUsREVULEFMLHdoaXRhbG8wMSw2NzAwMDANCjE5ODUsREVULEFMLGhlcm5hd2kwMSw2NjAwMDANCjE5ODUsREVULEFMLGxvcGV6YXUwMSw1NzUwMDANCjE5ODUsREVULEFMLHdpbGNvbWkwMSw1NTAwMDANCjE5ODUsREVULEFMLHRyYW1tYWwwMSw1MTcxNDMNCjE5ODUsREVULEFMLGxhcG9pZGEwMSwzODAwMDANCjE5ODUsREVULEFMLGJlcmdtZGEwMSwyNjI1MDANCjE5ODUsREVULEFMLGJyb29rdG8wMSwyNTAwMDANCjE5ODUsREVULEFMLGdydWJiam8wMSwyNTAwMDANCjE5ODUsREVULEFMLGJlcmVuanUwMSwyNDAwMDANCjE5ODUsREVULEFMLHRlcnJld2EwMSwxNzc1MDANCjE5ODUsREVULEFMLHNjaGVyYmkwMSwxMDAwMDANCjE5ODUsREVULEFMLGNhc3RpbWEwMiw3NjAwMA0KMTk4NSxLQ0EsQUwsYnJldHRnZTAxLDEwMDAwMDANCjE5ODUsS0NBLEFMLHF1aXNlZGEwMSw5NzUwMDANCjE5ODUsS0NBLEFMLGxlb25hZGUwMSw4NzE0MjkNCjE5ODUsS0NBLEFMLHdpbHNvd2kwMiw4NDM3NTANCjE5ODUsS0NBLEFMLG1jcmFlaGEwMSw4MDAwMDANCjE5ODUsS0NBLEFMLHN1bmRiamkwMSw2MDgzMzMNCjE5ODUsS0NBLEFMLGxhbXBkZTAxLDUzNTAwMA0KMTk4NSxLQ0EsQUwsYmxhY2tidTAyLDQ2NTAwMA0KMTk4NSxLQ0EsQUwsb3J0YWpvMDEsNDUwMDAwDQoxOTg1LEtDQSxBTCx3YXRoYWpvMDEsNDI1MDAwDQoxOTg1LEtDQSxBTCxiZWNrd2pvMDEsMzU4MDAwDQoxOTg1LEtDQSxBTCxwcnlvcmdyMDEsMzE2NjY3DQoxOTg1LEtDQSxBTCxjb25jZW9uMDEsMjUwMDAwDQoxOTg1LEtDQSxBTCxsZWlicmNoMDEsMjI1MDAwDQoxOTg1LEtDQSxBTCxiYWxib3N0MDEsMjA1MDAwDQoxOTg1LEtDQSxBTCxqb25lc2x5MDEsMjAyNTAwDQoxOTg1LEtDQSxBTCxzaGVyaXBhMDEsMTc1MDAwDQoxOTg1LEtDQSxBTCxtb3RsZWRhMDEsMTU1NTAwDQoxOTg1LEtDQSxBTCxzYWJlcmJyMDEsMTUwMDAwDQoxOTg1LEtDQSxBTCxndWJpY21hMDEsMTE1MDAwDQoxOTg1LEtDQSxBTCxqb25lc21pMDIsMTAwMDAwDQoxOTg1LEtDQSxBTCxqYWNrc2RhMDIsOTUwMDANCjE5ODUsTUlOLEFMLHNtYWxscm8wMiw3Mjg1NzENCjE5ODUsTUlOLEFMLGRhdmlzcm8wMiw2NTAwMDANCjE5ODUsTUlOLEFMLGhyYmVra2UwMSw1NjAwMDANCjE5ODUsTUlOLEFMLGNhc3Rpam8wMSw1NTAwMDANCjE5ODUsTUlOLEFMLGJydW5hdG8wMSw0MjUwMDANCjE5ODUsTUlOLEFMLGdhZXR0Z2EwMSw0MTUwMDANCjE5ODUsTUlOLEFMLHZpb2xhZnIwMSwzNzUwMDANCjE5ODUsTUlOLEFMLHNtaXRobWkwMywzMzUwMDANCjE5ODUsTUlOLEFMLGJ1dGNoam8wMSwzMjAwMDANCjE5ODUsTUlOLEFMLGhhdGNobWkwMSwyOTM3NTANCjE5ODUsTUlOLEFMLGVuZ2xlZGEwMSwyMTUwMDANCjE5ODUsTUlOLEFMLHNjaHJva2UwMSwxNTAwMDANCjE5ODUsTUlOLEFMLGxhdWRudGkwMSwxNDUwMDANCjE5ODUsTUlOLEFMLHB1Y2tla2kwMSwxMzAwMDANCjE5ODUsTUlOLEFMLGJ1c2hyYTAxLDEyMDAwMA0KMTk4NSxNSU4sQUwsZmlsc29wZTAxLDEyMDAwMA0KMTk4NSxNSU4sQUwsdGV1ZmV0aTAxLDExMDAwMA0KMTk4NSxNSU4sQUwsYW5kZXJhbDAyLDYyNTAwDQoxOTg1LE1JTixBTCxzYWxhc21hMDEsNjAwMDANCjE5ODUsTUw0LEFMLGNvb3BlY2UwMSwxMTc2MTkwDQoxOTg1LE1MNCxBTCxmaW5nZXJvMDEsMTA2NTAwMA0KMTk4NSxNTDQsQUwsc2ltbW90ZTAxLDEwMDAwMDANCjE5ODUsTUw0LEFMLHlvdW50cm8wMSwxMDAwMDAwDQoxOTg1LE1MNCxBTCxtb2xpdHBhMDEsOTUwMDAwDQoxOTg1LE1MNCxBTCxnYW50bmppMDEsNjg3NTAwDQoxOTg1LE1MNCxBTCxoYWFzbW8wMSw2NzkxNjcNCjE5ODUsTUw0LEFMLGJ1cnJpcmEwMSw1ODEyNTANCjE5ODUsTUw0LEFMLGRhcndpZGEwMSw1NjUwMDANCjE5ODUsTUw0LEFMLG9nbGl2YmUwMSw1NjAwMDANCjE5ODUsTUw0LEFMLHZ1Y2tvcGUwMSw1NDAwMDANCjE5ODUsTUw0LEFMLG1hbm5pcmkwMSw1MTAwMDANCjE5ODUsTUw0LEFMLG1jY2x1Ym8wMSw0ODAwMDANCjE5ODUsTUw0LEFMLHdhaXRzcmkwMSw0NjAwMDANCjE5ODUsTUw0LEFMLG1vb3JlY2gwMiwzNjUwMDANCjE5ODUsTUw0LEFMLHJvbWVyZWQwMSwyOTAwMDANCjE5ODUsTUw0LEFMLGhvdXNlcGEwMiwyMTUwMDANCjE5ODUsTUw0LEFMLHNjaHJvYmkwMSwxMDAwMDANCjE5ODUsTUw0LEFMLGhpZ3VldGUwMSw2MDAwMA0KMTk4NSxOWUEsQUwsd2luZmlkYTAxLDE3OTU3MDQNCjE5ODUsTllBLEFMLGhlbmRlcmkwMSwxNDcwMDAwDQoxOTg1LE5ZQSxBTCxrZW1wc3QwMSwxNDIwMDAwDQoxOTg1LE5ZQSxBTCxncmlmZmtlMDEsMTA3NTAwMA0KMTk4NSxOWUEsQUwsZ3VpZHJybzAxLDkwMDAwMA0KMTk4NSxOWUEsQUwsYmF5bG9kbzAxLDgxMDAwMA0KMTk4NSxOWUEsQUwsd2hpdHNlZDAxLDgwMDAwMA0KMTk4NSxOWUEsQUwscmlnaGVkYTAxLDY4MDAwMA0KMTk4NSxOWUEsQUwsbW9udGVqbzAxLDYzNzUwMA0KMTk4NSxOWUEsQUwsc2hpcmxibzAxLDYzNzUwMA0KMTk4NSxOWUEsQUwsbmlla3JwaDAxLDYwMDAwMA0KMTk4NSxOWUEsQUwscmFuZG93aTAxLDYwMDAwMA0KMTk4NSxOWUEsQUwsd3luZWdidTAxLDU1MDAwMA0KMTk4NSxOWUEsQUwsYmVycmFkYTAxLDQ3NzUwMA0KMTk4NSxOWUEsQUwsbWF0dGlkbzAxLDQ1NTAwMA0KMTk4NSxOWUEsQUwsc2FtcGxiaTAxLDQzNTAwMA0KMTk4NSxOWUEsQUwsaGFzc2VybzAxLDQyNTAwMA0KMTk4NSxOWUEsQUwsYnlzdHJtYTAxLDI1MDAwMA0KMTk4NSxOWUEsQUwsY293bGVqbzAxLDEyMDAwMA0KMTk4NSxOWUEsQUwsbWVhY2hibzAxLDEwMDAwMA0KMTk4NSxPQUssQUwsa2luZ21kYTAxLDEwODc1MDANCjE5ODUsT0FLLEFMLGxhbnNmY2EwMSw5MDAwMDANCjE5ODUsT0FLLEFMLG11cnBoZHcwMSw4NDU4MzMNCjE5ODUsT0FLLEFMLGNvbGxpZGEwMiw3MDAwMDANCjE5ODUsT0FLLEFMLGdyaWZmYWwwMSw2MTAwMDANCjE5ODUsT0FLLEFMLGxhbmdmcmkwMSw2MDgzMzMNCjE5ODUsT0FLLEFMLGpvaG50bzAxLDYwMDAwMA0KMTk4NSxPQUssQUwsYmFrZXJkdTAxLDU3NTAwMA0KMTk4NSxPQUssQUwsbWNjYXRzdDAxLDUyMDAwMA0KMTk4NSxPQUssQUwsaGVhdGhtaTAyLDQyNTAwMA0KMTk4NSxPQUssQUwsYm9jaHRicjAxLDM1MDAwMA0KMTk4NSxPQUssQUwsZGF2aXNtaTAyLDMwNTAwMA0KMTk4NSxPQUssQUwsbm9ycmltaTAxLDI4MzEwNw0KMTk4NSxPQUssQUwsaG93ZWxqYTAxLDI2MjUwMA0KMTk4NSxPQUssQUwscGhpbGx0bzAyLDIyMDAwMA0KMTk4NSxPQUssQUwsdGVsbG10bzAxLDIwNzUwMA0KMTk4NSxPQUssQUwsaGVuZGVzdDAxLDE1MDAwMA0KMTk4NSxPQUssQUwsY29kaXJjaDAxLDE0MTUwMA0KMTk4NSxPQUssQUwsYXRoZXJrZTAxLDEwNzMzMw0KMTk4NSxPQUssQUwscGljY2lybzAxLDEwMDAwMA0KMTk4NSxPQUssQUwsYmlydHN0aTAxLDYwMDAwDQoxOTg1LFNFQSxBTCx0aG9tYWdvMDEsNjkwMDAwDQoxOTg1LFNFQSxBTCxiZWF0dGppMDEsNDcwMDAwDQoxOTg1LFNFQSxBTCxib25uZWJhMDEsNDM3NTAwDQoxOTg1LFNFQSxBTCxjb3dlbmFsMDEsNDAwMDAwDQoxOTg1LFNFQSxBTCx2YW5kZWVkMDEsMzE1MDAwDQoxOTg1LFNFQSxBTCxoZW5kZWRhMDEsMzEwMDAwDQoxOTg1LFNFQSxBTCx6aXNrcmkwMSwyNzI1MDANCjE5ODUsU0VBLEFMLG1vb3JlbWkwMSwyMjgwMDANCjE5ODUsU0VBLEFMLGRhdmlzYWwwMSwyMjUwMDANCjE5ODUsU0VBLEFMLGtlYXJuYm8wMSwxODMwMDANCjE5ODUsU0VBLEFMLHBoZWxwa2UwMSwxODAwMDANCjE5ODUsU0VBLEFMLHBlcmNvamEwMSwxNzUwMDANCjE5ODUsU0VBLEFMLGxhbmdzbWEwMSwxNjAwMDANCjE5ODUsU0VBLEFMLHlvdW5nbWEwMSwxNTkwMDANCjE5ODUsU0VBLEFMLGJyYWRscGgwMSwxMjUwMDANCjE5ODUsU0VBLEFMLG93ZW5zcDAxLDExNDQwMA0KMTk4NSxTRUEsQUwsbnVuZXplZDAxLDk3MDAwDQoxOTg1LFNFQSxBTCxwcmVzbGppMDEsNzE2MDANCjE5ODUsVEVYLEFMLHdhcmRnYTAxLDcyMDAwMA0KMTk4NSxURVgsQUwsam9obnNjbDAxLDY4MzMzMw0KMTk4NSxURVgsQUwsaGFycmF0bzAxLDY1MDAwMA0KMTk4NSxURVgsQUwsaG91Z2hjaDAxLDYzNjY2Nw0KMTk4NSxURVgsQUwsdGFuYW5mcjAxLDU5MDAwMA0KMTk4NSxURVgsQUwsaG9vdG9idTAxLDU2NTAwMA0KMTk4NSxURVgsQUwscGFycmlsYTAxLDU2MDAwMA0KMTk4NSxURVgsQUwsc3Rld2FkYTAxLDUwNTAwMA0KMTk4NSxURVgsQUwsd3JpZ2hnZTAzLDQwMDAwMA0KMTk4NSxURVgsQUwsYmFubmlhbDAxLDM1MDAwMA0KMTk4NSxURVgsQUwsc2NobWlkYTAxLDM0NDAwMA0KMTk4NSxURVgsQUwscm96ZW1kYTAxLDMxMDAwMA0KMTk4NSxURVgsQUwsc3RlaW5iaTAyLDI1MDAwMA0KMTk4NSxURVgsQUwsbm9sZXNkaTAxLDIzNTAwMA0KMTk4NSxURVgsQUwsc2xhdWdkbzAxLDIxNTAwMA0KMTk4NSxURVgsQUwsd2Fsa2VkdTAxLDE4NTAwMA0KMTk4NSxURVgsQUwsb2JyaWVwZTAzLDE2NTAwMA0KMTk4NSxURVgsQUwsdG9sbGV3YTAxLDEzNTAwMA0KMTk4NSxURVgsQUwsam9uZXNibzAyLDExNzUwMA0KMTk4NSxURVgsQUwsbWNkb3dvZDAxLDYwMDAwDQoxOTg1LFRPUixBTCxzdGllYmRhMDEsMTAwMDAwMA0KMTk4NSxUT1IsQUwsYWxleGFkbzAxLDg3NTAwMA0KMTk4NSxUT1IsQUwsY2F1ZGliaTAxLDgzMzMzMw0KMTk4NSxUT1IsQUwsZ2FyY2lkYTAxLDc0MDAwMA0KMTk4NSxUT1IsQUwsdXBzaGF3aTAxLDczMDAwMA0KMTk4NSxUT1IsQUwsbW9zZWJsbDAxLDU4NzUwMA0KMTk4NSxUT1IsQUwsY2xhbmNqaTAxLDU4MDAwMA0KMTk4NSxUT1IsQUwsbGF2ZWxnYTAxLDQ3NTAwMA0KMTk4NSxUT1IsQUwsd2hpdHRlcjAxLDM3MDAwMA0KMTk4NSxUT1IsQUwsbWFydGlidTAxLDM1NjMwMA0KMTk4NSxUT1IsQUwsYnVycm9qZTAxLDM1MDAwMA0KMTk4NSxUT1IsQUwsYmVsbGdlMDIsMzM1MDAwDQoxOTg1LFRPUixBTCxiYXJmaWplMDEsMzI1MDAwDQoxOTg1LFRPUixBTCxtdWxsaXJhMDEsMzI1MDAwDQoxOTg1LFRPUixBTCxpb3JnZ2EwMSwyNTY2NjcNCjE5ODUsVE9SLEFMLG1hdHVzbGUwMSwxODUwMDANCjE5ODUsVE9SLEFMLGFja2VyamkwMSwxNzAwMDANCjE5ODUsVE9SLEFMLGtleWppMDEsMTMxMjUwDQoxOTg1LFRPUixBTCxmZXJuYXRvMDEsMTI3NTAwDQoxOTg1LFRPUixBTCxoZW5rZXRvMDEsNjAwMDANCjE5ODUsQVRMLE5MLG11cnBoZGEwNSwxNjI1MDAwDQoxOTg1LEFUTCxOTCxob3JuZWJvMDEsMTUwMDAwMA0KMTk4NSxBVEwsTkwsc3V0dGVicjAxLDEzNTQxNjcNCjE5ODUsQVRMLE5MLGJhcmtlbGUwMSw4NzAwMDANCjE5ODUsQVRMLE5MLGNoYW1iY2gwMSw4MDAwMDANCjE5ODUsQVRMLE5MLHdhc2hpY2wwMSw4MDAwMDANCjE5ODUsQVRMLE5MLG11bXBoamUwMSw3NzUwMDANCjE5ODUsQVRMLE5MLGdhcmJlZ2UwMSw3NzIwMDANCjE5ODUsQVRMLE5MLHJhbWlycmEwMSw3NTAwMDANCjE5ODUsQVRMLE5MLGNhbXByaTAxLDYzMzMzMw0KMTk4NSxBVEwsTkwsY2Vyb25yaTAxLDYyNTAwMA0KMTk4NSxBVEwsTkwsb2JlcmtrZTAxLDYxNjY2Nw0KMTk4NSxBVEwsTkwsYmVkcm9zdDAxLDU1MDAwMA0KMTk4NSxBVEwsTkwsYmVuZWRicjAxLDU0NTAwMA0KMTk4NSxBVEwsTkwsZm9yc3R0ZTAxLDQ4MzMzMw0KMTk4NSxBVEwsTkwsaHViYmFnbDAxLDQ1NTAwMA0KMTk4NSxBVEwsTkwscGVyZXpwYTAxLDQ1MDAwMA0KMTk4NSxBVEwsTkwsbWFobGVyaTAxLDQwNzUwMA0KMTk4NSxBVEwsTkwsbWNtdXJjcjAxLDI3NTAwMA0KMTk4NSxBVEwsTkwsaGFycGV0ZTAxLDI1MDAwMA0KMTk4NSxBVEwsTkwsZGVkbW9qZTAxLDE1MDAwMA0KMTk4NSxBVEwsTkwscGVycnlnZTAxLDEyMDAwMA0KMTk4NSxDSE4sTkwsY2V5cm8wMSwxNDUwMDAwDQoxOTg1LENITixOTCxzdXRjbHJpMDEsMTI2MDAwMA0KMTk4NSxDSE4sTkwsbW9yZWxrZTAxLDg2NTAwMA0KMTk4NSxDSE4sTkwsZHVyaGFsZTAxLDgwMDAwMA0KMTk4NSxDSE4sTkwscnV0aHZkaTAxLDc2NjY2Nw0KMTk4NSxDSE4sTkwsZWNrZXJkZTAxLDc1MDAwMA0KMTk4NSxDSE4sTkwsc21pdGhsZTAyLDY3MDAwMA0KMTk4NSxDSE4sTkwsdHJvdXRzdDAxLDY0MDAwMA0KMTk4NSxDSE4sTkwsbWF0dGhnYTAxLDYwMDAwMA0KMTk4NSxDSE4sTkwsZGF2aXNqbzAyLDU1MDAwMA0KMTk4NSxDSE4sTkwsc2FuZGJyeTAxLDUwNTAwMA0KMTk4NSxDSE4sTkwsc2FuZGVzYzAxLDUwMDAwMA0KMTk4NSxDSE4sTkwsbG9wZXNkYTAxLDQ5MDAwMA0KMTk4NSxDSE4sTkwsZnJhemlnZTAxLDQ4MzMzMw0KMTk4NSxDSE4sTkwsZGVybmlibzAxLDQwNjI1MA0KMTk4NSxDSE4sTkwsYnJ1c3N3YTAxLDM3NTAwMA0KMTk4NSxDSE4sTkwsd29vZHNnYTAxLDMyMTY2Nw0KMTk4NSxDSE4sTkwsc29yZW5sYTAxLDMyMDAwMA0KMTk4NSxDSE4sTkwsaGVibmVyaTAxLDMxMDAwMA0KMTk4NSxDSE4sTkwsc3BlaWVjaDAxLDIyNTAwMA0KMTk4NSxDSE4sTkwsYm9zbGV0aDAxLDIxNTAwMA0KMTk4NSxDSE4sTkwsZm9udGVyYTAxLDIwMDAwMA0KMTk4NSxDSU4sTkwsc290b21hMDEsMTA3MTQyOQ0KMTk4NSxDSU4sTkwscGFya2VkYTAxLDk3MDAwMA0KMTk4NSxDSU4sTkwsY29uY2VkYTAxLDkyMDAwMA0KMTk4NSxDSU4sTkwsaHVtZXRvMDEsODMzMzMzDQoxOTg1LENJTixOTCxiZWxsYnUwMSw3NTEyOTcNCjE5ODUsQ0lOLE5MLG9lc3Rlcm8wMSw1NTAwMDANCjE5ODUsQ0lOLE5MLHByaWNlam8wMiw0MTAwMDANCjE5ODUsQ0lOLE5MLHJvc2VwZTAxLDM1ODg1OA0KMTk4NSxDSU4sTkwscGFzdG9mcjAxLDM1MDAwMA0KMTk4NSxDSU4sTkwsbWlsbmVlZDAxLDMwMDAwMA0KMTk4NSxDSU4sTkwscG93ZXJ0ZTAxLDI1NTAwMA0KMTk4NSxDSU4sTkwsa3JlbmN3YTAxLDI1MDAwMA0KMTk4NSxDSU4sTkwsc3R1cGVqbzAxLDI1MDAwMA0KMTk4NSxDSU4sTkwscmVkdXNnYTAxLDIyNzUwMA0KMTk4NSxDSU4sTkwscGVyZXp0bzAxLDIyNTAwMA0KMTk4NSxDSU4sTkwsdmVuYWJtYTAxLDE1NTAwMA0KMTk4NSxDSU4sTkwsZm9sZXl0bzAyLDExNzUwMA0KMTk4NSxDSU4sTkwsbWNnYWZhbjAxLDExMDAwMA0KMTk4NSxDSU4sTkwsZnJhbmNqbzAxLDc1MDAwDQoxOTg1LENJTixOTCxicm93bnRvMDUsNjAwMDANCjE5ODUsQ0lOLE5MLHRpYmJzamEwMSw2MDAwMA0KMTk4NSxDSU4sTkwsdmFuZ29kYTAxLDYwMDAwDQoxOTg1LEhPVSxOTCxyeWFubm8wMSwxMzUwMDAwDQoxOTg1LEhPVSxOTCxrbmVwcGJvMDEsODUwMDAwDQoxOTg1LEhPVSxOTCxuaWVrcmpvMDEsODI1MDAwDQoxOTg1LEhPVSxOTCxjcnV6am8wMSw3OTYzODMNCjE5ODUsSE9VLE5MLGdhcm5lcGgwMSw3NDUwMDANCjE5ODUsSE9VLE5MLG1vcmVub20wMSw3MDAwMDANCjE5ODUsSE9VLE5MLHRob25kaTAxLDY3NTAwMA0KMTk4NSxIT1UsTkwscHVobHRlMDEsNTQxNjY3DQoxOTg1LEhPVSxOTCxzbWl0aGRhMDIsNTAwMDAwDQoxOTg1LEhPVSxOTCxhc2hieWFsMDEsNDE2NjY3DQoxOTg1LEhPVSxOTCxzY290dG1pMDMsMzYwMDAwDQoxOTg1LEhPVSxOTCxyZXlub2NyMDEsMzUwMDAwDQoxOTg1LEhPVSxOTCx3YWxsaWRlMDEsMzQxNjY3DQoxOTg1LEhPVSxOTCxkb3JhbmJpMDIsMzI1MDAwDQoxOTg1LEhPVSxOTCxkYXdsZWJpMDEsMjk1MDAwDQoxOTg1LEhPVSxOTCxjYWJlbGVuMDEsMjkxNjY3DQoxOTg1LEhPVSxOTCxkaXBpbmZyMDEsMjU1MDAwDQoxOTg1LEhPVSxOTCxzcGlsbWhhMDEsMTYwMDAwDQoxOTg1LEhPVSxOTCxiYXNza2UwMSwxNTUwMDANCjE5ODUsSE9VLE5MLGRhdmlzZ2wwMSw2MDAwMA0KMTk4NSxMQU4sTkwsZ3VlcnJwZTAxLDEyNzAwMDANCjE5ODUsTEFOLE5MLHZhbGVuZmUwMSwxMjAwMDAwDQoxOTg1LExBTixOTCxyZXVzc2plMDEsOTgwMDAwDQoxOTg1LExBTixOTCxvbGl2ZWFsMDEsNzUwMDAwDQoxOTg1LExBTixOTCxob25leXJpMDEsNzA1MDAwDQoxOTg1LExBTixOTCx3ZWxjaGJvMDEsNjQzNzUwDQoxOTg1LExBTixOTCxsYW5kcmtlMDEsNTM3NTAwDQoxOTg1LExBTixOTCxnb2x0emRhMDEsNTAwMDAwDQoxOTg1LExBTixOTCx5ZWFnZXN0MDEsNTAwMDAwDQoxOTg1LExBTixOTCxzYXhzdDAxLDQ2NTAwMA0KMTk4NSxMQU4sTkwscnVzc2ViaTAxLDQ1MDAwMA0KMTk4NSxMQU4sTkwsc2Npb3NtaTAxLDQzNTAwMA0KMTk4NSxMQU4sTkwsbmllZGV0bzAxLDM3MDAwMA0KMTk4NSxMQU4sTkwscGVuYWFsMDEsMzUwMDAwDQoxOTg1LExBTixOTCxtYXJzaG1pMDIsMzMzMDAwDQoxOTg1LExBTixOTCxiYWlsb2JvMDEsMzMwMDAwDQoxOTg1LExBTixOTCx3aGl0ZnRlMDEsMzE2NjY3DQoxOTg1LExBTixOTCxoZXJzaG9yMDEsMjEyMDAwDQoxOTg1LExBTixOTCxicm9ja2dyMDEsMTUwMDAwDQoxOTg1LExBTixOTCxqb2huc2phMDEsMTUwMDAwDQoxOTg1LExBTixOTCxtYWxkb2NhMDEsMTQwMDAwDQoxOTg1LExBTixOTCxkaWF6Y2EwMSwxMjAwMDANCjE5ODUsTEFOLE5MLGR1bmNhbWEwMSw2MDAwMA0KMTk4NSxNT04sTkwscmFpbmV0aTAxLDEyMDAwMDANCjE5ODUsTU9OLE5MLGRhd3NvYW4wMSwxMDMzMzMzDQoxOTg1LE1PTixOTCxyZWFyZGplMDEsODUwMDAwDQoxOTg1LE1PTixOTCxndWxsaWJpMDEsNzAwMDAwDQoxOTg1LE1PTixOTCxsZWFjaDAxLDY1MDAwMA0KMTk4NSxNT04sTkwsd2FzaGl1bDAxLDY1MDAwMA0KMTk4NSxNT04sTkwsd2FsbGF0aTAxLDU2NTAwMA0KMTk4NSxNT04sTkwsYnJvb2todTAxLDU1MDAwMA0KMTk4NSxNT04sTkwsbHVjYXNnYTAxLDUxMzUwMA0KMTk4NSxNT04sTkwsbGF3dmEwMSwzNzUwMDANCjE5ODUsTU9OLE5MLHBhbG1lZGEwMSwzNzUwMDANCjE5ODUsTU9OLE5MLHNjaGF0ZGEwMSwzNzUwMDANCjE5ODUsTU9OLE5MLGZseW5uZG8wMSwzNTAwMDANCjE5ODUsTU9OLE5MLHdvaGxmamkwMSwzMDgzMzMNCjE5ODUsTU9OLE5MLHNtaXRoYnIwMSwyOTAwMDANCjE5ODUsTU9OLE5MLGZyYW5jdGUwMSwyNTAwMDANCjE5ODUsTU9OLE5MLGRpbG9ubWkwMSwxNzUwMDANCjE5ODUsTU9OLE5MLG5pY29zc3QwMSwxMDUwMDANCjE5ODUsTU9OLE5MLHJvYmVyYmUwMSw5NTAwMA0KMTk4NSxNT04sTkwsZmlzaGVicjAxLDYwMDAwDQoxOTg1LE5ZTixOTCxjYXJ0ZWdhMDEsMjAyODU3MQ0KMTk4NSxOWU4sTkwsZm9zdGVnZTAxLDE5NDI4NTcNCjE5ODUsTllOLE5MLGhlcm5ha2UwMSwxMTAwMDAwDQoxOTg1LE5ZTixOTCxvcm9zY2plMDEsNjUwMDAwDQoxOTg1LE5ZTixOTCx3aWxzb21vMDEsNTkxNjY3DQoxOTg1LE5ZTixOTCxrbmlnaHJhMDEsNTYwMDAwDQoxOTg1LE5ZTixOTCxib3dhbGEwMSw1MjUwMDANCjE5ODUsTllOLE5MLHN0cmF3ZGEwMSw1MTY2NjcNCjE5ODUsTllOLE5MLGdvb2RlZHcwMSw0NTAwMDANCjE5ODUsTllOLE5MLGx5bmNoZWQwMSwzMzAwMDANCjE5ODUsTllOLE5MLGJlcmVuYnIwMSwzMjUwMDANCjE5ODUsTllOLE5MLHN0YXVicnUwMSwzMDAwMDANCjE5ODUsTllOLE5MLHNpc2tkbzAxLDI3NTAwMA0KMTk4NSxOWU4sTkwsaGVlcGRhMDEsMjYwMDAwDQoxOTg1LE5ZTixOTCxkYXJsaXJvMDEsMjMwMDAwDQoxOTg1LE5ZTixOTCxiYWNrbXdhMDEsMjAwMDAwDQoxOTg1LE5ZTixOTCxnb3JtYXRvMDMsMTUwMDAwDQoxOTg1LE5ZTixOTCxzYW50YXJhMDEsMTI1MDAwDQoxOTg1LE5ZTixOTCxqb2huc2hvMDEsMTE1MDAwDQoxOTg1LE5ZTixOTCxnYXJkZXJvMDEsMTAwMDAwDQoxOTg1LE5ZTixOTCxtY2Rvd3JvMDEsNjAwMDANCjE5ODUsUEhJLE5MLHNjaG1pbWkwMSwyMTMwMzAwDQoxOTg1LFBISSxOTCxkZW5ueWpvMDEsMTEwOTMzMw0KMTk4NSxQSEksTkwsY2FybHRzdDAxLDEwNzUwMDANCjE5ODUsUEhJLE5MLG1hZGRvZ2EwMSw4MjAzMzMNCjE5ODUsUEhJLE5MLHJhd2xlc2gwMSw3MDAwMDANCjE5ODUsUEhJLE5MLGRpYXpibzAxLDYyMDAwMA0KMTk4NSxQSEksTkwsa29vc21qZTAxLDYwMDAwMA0KMTk4NSxQSEksTkwsaGF5ZXN2bzAxLDUwMDAwMA0KMTk4NSxQSEksTkwsZ3Jvc3NncjAxLDM1MDAwMA0KMTk4NSxQSEksTkwsdmlyZ2lvejAyLDM1MDAwMA0KMTk4NSxQSEksTkwsbGVmZWJqbzAxLDMxMDAwMA0KMTk4NSxQSEksTkwsYW5kZXJsYTAyLDI1MDUwMA0KMTk4NSxQSEksTkwsc2FtdWVqdTAxLDI0MDAwMA0KMTk4NSxQSEksTkwsYWd1YXlsdTAxLDIzNzAwMA0KMTk4NSxQSEksTkwsY29yY290aTAxLDIyMDAwMA0KMTk4NSxQSEksTkwscnVja2VkYTAxLDIyMDAwMA0KMTk4NSxQSEksTkwsaHVkc29jaDAyLDE5MjUwMA0KMTk4NSxQSEksTkwsZ3Jvc3NrZTAxLDE0MDAwMA0KMTk4NSxQSEksTkwsa25pY2VhbDAxLDYwMDAwDQoxOTg1LFBJVCxOTCxwZW5hdG8wMSwxMDc1MDAwDQoxOTg1LFBJVCxOTCx0aG9tcGphMDEsMTA2NjY2Nw0KMTk4NSxQSVQsTkwsbWFkbG9iaTAxLDk3NTUwMA0KMTk4NSxQSVQsTkwsdGVrdWxrZTAxLDgzMDAwMA0KMTk4NSxQSVQsTkwsbWN3aWxsYTAxLDc5NjY2Nw0KMTk4NSxQSVQsTkwscmhvZGVyaTAxLDY0NTAwMA0KMTk4NSxQSVQsTkwscmF5am8wMSw2MzIwMDANCjE5ODUsUElULE5MLG1henppbGUwMSw2MDAwMDANCjE5ODUsUElULE5MLHJvYmluZG8wMSw1MjAwMDANCjE5ODUsUElULE5MLGxlemNhc2kwMSw0MjUwMDANCjE5ODUsUElULE5MLHNjdXJycm8wMSwzNTAwMDANCjE5ODUsUElULE5MLGFsbW9uYmkwMSwyNTUwMDANCjE5ODUsUElULE5MLG1vcnJpamkwMSwyMzI1MDANCjE5ODUsUElULE5MLHJldXNjcmkwMSwyMDAwMDANCjE5ODUsUElULE5MLGRlbGVvam8wMSwxNTUwMDANCjE5ODUsUElULE5MLGd1YW50Y2UwMSwxNTAwMDANCjE5ODUsUElULE5MLHR1bm5lbGUwMSwxMzAwMDANCjE5ODUsUElULE5MLGhhc3NsYW4wMSwxMjkxNjYNCjE5ODUsUElULE5MLG9yc3Vsam8wMSw2MDAwMA0KMTk4NSxTRE4sTkwsZ29zc2FyaTAxLDE3MTMzMzMNCjE5ODUsU0ROLE5MLHRlbXBsZ2EwMSwxMTM3MDAwDQoxOTg1LFNETixOTCxnYXJ2ZXN0MDEsOTc1MDAwDQoxOTg1LFNETixOTCxob3l0bGEwMSw5NzUwMDANCjE5ODUsU0ROLE5MLG5ldHRsZ3IwMSw5MDAwMDANCjE5ODUsU0ROLE5MLGtlbm5ldGUwMiw4NzAwMDANCjE5ODUsU0ROLE5MLHN0b2RkdGkwMSw1NTYyNTANCjE5ODUsU0ROLE5MLHNob3dlcjAxLDUzNzUwMA0KMTk4NSxTRE4sTkwsd2lnZ2lhbDAxLDUxMjUwMA0KMTk4NSxTRE4sTkwsZ3d5bm50bzAxLDQ0MDAwMA0KMTk4NSxTRE4sTkwsamFja3NybzAzLDM0MDAwMA0KMTk4NSxTRE4sTkwscm95c3RqZTAxLDMyNTAwMA0KMTk4NSxTRE4sTkwsbGVmZmVjcjAxLDI3MDAwMA0KMTk4NSxTRE4sTkwsZHJhdmVkYTAxLDI0MDAwMA0KMTk4NSxTRE4sTkwsaGF3a2lhbjAxLDIwMDAwMA0KMTk4NSxTRE4sTkwsZmxhbm50aTAxLDE3NTAwMA0KMTk4NSxTRE4sTkwsYnVtYnJhbDAxLDE2MDAwMA0KMTk4NSxTRE4sTkwsYnJvd25ibzA0LDE1MDAwMA0KMTk4NSxTRE4sTkwsbWNyZXlrZTAxLDE1MDAwMA0KMTk4NSxTRE4sTkwsYmV2YWNrdTAxLDE0MDAwMA0KMTk4NSxTRE4sTkwsbWFydGljYTAxLDE0MDAwMA0KMTk4NSxTRE4sTkwsdGh1cm1tYTAxLDEzMDAwMA0KMTk4NSxTRk4sTkwsbGVvbmFqZTAxLDkwMDAwMA0KMTk4NSxTRk4sTkwsbWludG9ncjAxLDg2NTAwMA0KMTk4NSxTRk4sTkwsZHJpZXNkYTAxLDc2NzUwMA0KMTk4NSxTRk4sTkwsdHJpbGxtYTAxLDcwOTcxNA0KMTk4NSxTRk4sTkwsa3J1a29taTAxLDYzMDAwMA0KMTk4NSxTRk4sTkwsZGF2aXNjaDAxLDU1MDAwMA0KMTk4NSxTRk4sTkwsbGVtYXNqbzAxLDUwMDAwMA0KMTk4NSxTRk4sTkwsdHJldmlhbDAxLDQ2MjUwMA0KMTk4NSxTRk4sTkwsYnJlbmxibzAxLDM4NTAwMA0KMTk4NSxTRk4sTkwseW91bmdqbzAyLDM3NTAwMA0KMTk4NSxTRk4sTkwsaGFtbWFhdDAxLDM1NTAwMA0KMTk4NSxTRk4sTkwsbGFza2ViaTAxLDM1NTAwMA0KMTk4NSxTRk4sTkwsZ3JlZW5kYTAzLDI3NTAwMA0KMTk4NSxTRk4sTkwsYmx1ZXZpMDEsMjUwMDAwDQoxOTg1LFNGTixOTCx0aG9tcHNjMDEsMTk3MDAwDQoxOTg1LFNGTixOTCxkYXZpc21hMDEsMTk1MDAwDQoxOTg1LFNGTixOTCxnb3R0amkwMSwxNzAwMDANCjE5ODUsU0ZOLE5MLGdsYWRkZGEwMSwxMzUwMDANCjE5ODUsU0ZOLE5MLGdhcnJlc2MwMSw4NTAwMA0KMTk4NSxTRk4sTkwsYnJvd25jaDAyLDYwMDAwDQoxOTg1LFNMTixOTCxjbGFya2phMDEsMTU1NTAwMA0KMTk4NSxTTE4sTkwsc21pdGhvejAxLDE0NDAwMDANCjE5ODUsU0xOLE5MLGFuZHVqam8wMSwxMDMwMDAwDQoxOTg1LFNMTixOTCxhbGxlbm5lMDEsNzUwMDAwDQoxOTg1LFNMTixOTCxwb3J0ZWRhMDIsNzQwMDAwDQoxOTg1LFNMTixOTCxzbWl0aGxvMDEsNzQwMDAwDQoxOTg1LFNMTixOTCxkZWplc2l2MDEsNzAwMDAwDQoxOTg1LFNMTixOTCxmb3JzY2JvMDEsNTgzMzMzDQoxOTg1LFNMTixOTCxjZWRlbmNlMDEsNTYyNTAwDQoxOTg1LFNMTixOTCxoZXJydG8wMSw1NjAwMDANCjE5ODUsU0xOLE5MLG1jZ2Vld2kwMSw0NzUwMDANCjE5ODUsU0xOLE5MLGNhbXBiYmkwMiw0NTc1MDANCjE5ODUsU0xOLE5MLHR1ZG9yam8wMSw0NTc1MDANCjE5ODUsU0xOLE5MLGxhaHRpamUwMSwyNTAwMDANCjE5ODUsU0xOLE5MLGxhbmRydGkwMSwyMDg3NTANCjE5ODUsU0xOLE5MLGpvcmdlbWkwMSwyMDAwMDANCjE5ODUsU0xOLE5MLHZhbnNsYW4wMSwxNzAwMDANCjE5ODUsU0xOLE5MLGJyYXVuc3QwMSwxNjAwMDANCjE5ODUsU0xOLE5MLGRheWxla2UwMSwxNTAwMDANCjE5ODUsU0xOLE5MLGhhcnBlYnIwMSwxMzUwMDANCjE5ODUsU0xOLE5MLHBlbmRsdGUwMSwxMTI1MDANCjE5ODUsU0xOLE5MLGNveGRhMDEsMTEwMDAwDQoxOTg1LFNMTixOTCxob3J0b3JpMDEsMTEwMDAwDQoxOTg1LFNMTixOTCxrZXBzaGt1MDEsMTAwMDAwDQoxOTg1LFNMTixOTCxjb2xlbXZpMDEsNjAwMDANCjE5ODYsQkFMLEFMLGx5bm5mcjAxLDExOTAwMDANCjE5ODYsQkFMLEFMLHJpcGtlY2EwMSwxMTUwMDAwDQoxOTg2LEJBTCxBTCxtdXJyYWVkMDIsOTI1ODE0DQoxOTg2LEJBTCxBTCxtY2dyZXNjMDEsOTExMDUxDQoxOTg2LEJBTCxBTCxib2RkaW1pMDEsODM3NTAwDQoxOTg2LEJBTCxBTCxsYWN5bGUwMSw3MjUwMDANCjE5ODYsQkFMLEFMLGZsYW5hbWkwMSw2Mzk3OTENCjE5ODYsQkFMLEFMLGFhc2VkbzAxLDYwMDAwMA0KMTk4NixCQUwsQUwsbWFydGlkZTAxLDU2MDQ1OA0KMTk4NixCQUwsQUwsZGF2aXNzdDAyLDUxMDAwMA0KMTk4NixCQUwsQUwsbWFydGl0aTAxLDQ4NzA3OA0KMTk4NixCQUwsQUwsYmVuaXFqdTAxLDQ1MDAwMA0KMTk4NixCQUwsQUwsZ3Jvc3N3YTAxLDQ1MDAwMA0KMTk4NixCQUwsQUwsZGVtcHNyaTAxLDQ0MjA2Ng0KMTk4NixCQUwsQUwsZHd5ZXJqaTAxLDQwMDAwMA0KMTk4NixCQUwsQUwseW91bmdtaTAxLDM4NzUwMA0KMTk4NixCQUwsQUwsZm9yZGRhMDEsMzUwMDAwDQoxOTg2LEJBTCxBTCxyYXlmb2ZsMDEsMzEwMDAwDQoxOTg2LEJBTCxBTCxuaWNob3JlMDEsMjg1MDAwDQoxOTg2LEJBTCxBTCxib3JkaXJpMDEsMjUwMDAwDQoxOTg2LEJBTCxBTCxzaGVsYmpvMDEsMjQwMDAwDQoxOTg2LEJBTCxBTCxndXRpZWphMDEsMTY3NTAwDQoxOTg2LEJBTCxBTCxkaXhvbmtlMDEsMTQwMDAwDQoxOTg2LEJBTCxBTCxib25pbGp1MDEsMTIwMDAwDQoxOTg2LEJBTCxBTCxzaGVldGxhMDEsMTIwMDAwDQoxOTg2LEJBTCxBTCxoYXZlbmJyMDEsMTE1MDAwDQoxOTg2LEJBTCxBTCxqb25lc29kMDEsMTA3NTAwDQoxOTg2LEJBTCxBTCxzdGVmZWpvMDEsNzAwMDANCjE5ODYsQkFMLEFMLHRyYWJlamkwMSw2MDAwMA0KMTk4NixCT1MsQUwscmljZWppMDEsMTk4NDQyMw0KMTk4NixCT1MsQUwsYm9nZ3N3YTAxLDEzNTAwMDANCjE5ODYsQk9TLEFMLHN0YW5sYm8wMSwxMDYwMDAwDQoxOTg2LEJPUyxBTCxldmFuc2R3MDEsMTAxNzc1Nw0KMTk4NixCT1MsQUwsYXJtYXN0bzAxLDEwMDAwMDANCjE5ODYsQk9TLEFMLGJ1Y2tuYmkwMSw3ODUwMDANCjE5ODYsQk9TLEFMLGJheWxvZG8wMSw2NjA2OTYNCjE5ODYsQk9TLEFMLGdlZG1hcmkwMSw2NTAwMDANCjE5ODYsQk9TLEFMLGxvbGxhdGkwMSw1NDEyNTANCjE5ODYsQk9TLEFMLHNhbWJpam8wMSw1MDAwMDANCjE5ODYsQk9TLEFMLGh1cnN0YnIwMSw0OTUwMDANCjE5ODYsQk9TLEFMLGJhcnJlbWEwMiw0MzUwMDANCjE5ODYsQk9TLEFMLGhlbmRlZGEwMSw0MTIwMDANCjE5ODYsQk9TLEFMLHN0ZXdhc2EwMSwzODExMTMNCjE5ODYsQk9TLEFMLGJveWRvaTAxLDM3NTAwMA0KMTk4NixCT1MsQUwscm9tZXJlZDAxLDM3NTAwMA0KMTk4NixCT1MsQUwsaG9mZm1nbDAxLDM1MDAwMA0KMTk4NixCT1MsQUwsY2xlbWVybzAyLDM0MDAwMA0KMTk4NixCT1MsQUwsY3Jhd2ZzdDAxLDMzMDAwMA0KMTk4NixCT1MsQUwsc3RhcGxkYTAxLDMwMDAwMA0KMTk4NixCT1MsQUwsbmlwcGVhbDAxLDI2NTAwMA0KMTk4NixCT1MsQUwsb3dlbnNwMDEsMjU1MDAwDQoxOTg2LEJPUyxBTCxzdWxsaW1hMDIsMTEwMDAwDQoxOTg2LEJPUyxBTCx0cnVqaW1pMDEsODUwMDANCjE5ODYsQk9TLEFMLGJyb3dubWkwMSw4MDAwMA0KMTk4NixCT1MsQUwsc2NoaXJjYTAxLDc1MDAwDQoxOTg2LEJPUyxBTCxnYXJkbndlMDEsNzAwMDANCjE5ODYsQk9TLEFMLGdyZWVubWkwMSw2MDAwMA0KMTk4NixCT1MsQUwscXVpbm9yZTAxLDYwMDAwDQoxOTg2LENBTCxBTCxkZWNpbmRvMDEsMTIwMDAwMA0KMTk4NixDQUwsQUwsamFja3NyZTAxLDExMDI5NDYNCjE5ODYsQ0FMLEFMLG1vb3JlZG8wMSwxMDAwMDAwDQoxOTg2LENBTCxBTCxoZW5kcmdlMDEsOTM5MzMzDQoxOTg2LENBTCxBTCx3aXR0bWkwMSw5MzMzMzMNCjE5ODYsQ0FMLEFMLHN1dHRvZG8wMSw4OTAwMDANCjE5ODYsQ0FMLEFMLGJ1cmxlcmkwMSw4NTY2NjcNCjE5ODYsQ0FMLEFMLGJvb25lYm8wMSw4NTM0NzkNCjE5ODYsQ0FMLEFMLGRvd25pYnIwMSw4MDgzMzMNCjE5ODYsQ0FMLEFMLGNhbmRlam8wMSw4MDAwMDANCjE5ODYsQ0FMLEFMLGpvbmVzcnUwMSw1NjAwMDANCjE5ODYsQ0FMLEFMLGdyaWNoYm8wMSw1MDAwMDANCjE5ODYsQ0FMLEFMLGx1Y2FzZ2EwMSw1MDAwMDANCjE5ODYsQ0FMLEFMLGpvaG50bzAxLDQ0MDAwMA0KMTk4NixDQUwsQUwscm9tYW5ybzAxLDQyNTAwMA0KMTk4NixDQUwsQUwsd2lsZm9ybzAxLDQxNjY2Nw0KMTk4NixDQUwsQUwsY29yYmVkbzAxLDQxMDAwMA0KMTk4NixDQUwsQUwsc2xhdG9qaTAxLDQwMDAwMA0KMTk4NixDQUwsQUwscGV0dGlnYTAxLDMwMDAwMA0KMTk4NixDQUwsQUwsc2Nob2ZkaTAyLDIxMDAwMA0KMTk4NixDQUwsQUwsZm9yc3R0ZTAxLDE3MDAwMA0KMTk4NixDQUwsQUwsbWNjYXNraTAxLDE0MjAwMA0KMTk4NixDQUwsQUwsbmFycm9qZTAxLDE0MjAwMA0KMTk4NixDQUwsQUwsZm9yc2NrZTAxLDEwMDAwMA0KMTk4NixDQUwsQUwsaG93ZWxqYTAyLDgyNTAwDQoxOTg2LENBTCxBTCxqb3luZXdhMDEsNjUwMDANCjE5ODYsQ0FMLEFMLGZpbmxlY2gwMSw2MDAwMA0KMTk4NixDQUwsQUwscnVobGV2ZTAxLDYwMDAwDQoxOTg2LENBTCxBTCx3aGl0ZWRlMDMsNjAwMDANCjE5ODYsQ0hBLEFMLHNlYXZldG8wMSwxMTMyNjUyDQoxOTg2LENIQSxBTCxkb3Rzb3JpMDEsOTc1MDAwDQoxOTg2LENIQSxBTCxiYW5uaWZsMDEsOTMwMDAwDQoxOTg2LENIQSxBTCxhbGxlbm5lMDEsOTAwMDAwDQoxOTg2LENIQSxBTCxmaXNrY2EwMSw4NzUwMDANCjE5ODYsQ0hBLEFMLGJhaW5laGEwMSw3NzUwMDANCjE5ODYsQ0hBLEFMLGNydXpqdTAxLDYwMDAwMA0KMTk4NixDSEEsQUwsamFtZXNibzAxLDU1NTAwMA0KMTk4NixDSEEsQUwsc2NobWlkYTAxLDQ2NTAwMA0KMTk4NixDSEEsQUwsa2l0dGxybzAxLDQwMDAwMA0KMTk4NixDSEEsQUwsd2Fsa2VncjAxLDQwMDAwMA0KMTk4NixDSEEsQUwsY293bGVqbzAxLDI5NTAwMA0KMTk4NixDSEEsQUwsbmVsc29nZTAxLDI0MDAwMA0KMTk4NixDSEEsQUwsaGlsbG1hMDEsMjAwMDAwDQoxOTg2LENIQSxBTCxzcXVpcm1pMDEsMjAwMDAwDQoxOTg2LENIQSxBTCxodWxldHRpMDEsMTk1MDAwDQoxOTg2LENIQSxBTCxoYWlyc2plMDEsMTU2NjY3DQoxOTg2LENIQSxBTCxndWlsbG96MDEsMTUwMDAwDQoxOTg2LENIQSxBTCxwZXJjb2phMDEsMTUwMDAwDQoxOTg2LENIQSxBTCxib25pbGJvMDEsMTE1MDAwDQoxOTg2LENIQSxBTCxnaWxlc2JyMDEsODAwMDANCjE5ODYsQ0hBLEFMLHNraW5uam8wMSw3NTAwMA0KMTk4NixDSEEsQUwsYm9zdG9kYTAxLDY4MDAwDQoxOTg2LENIQSxBTCxicmFkbHNjMDEsNjY1MDANCjE5ODYsQ0hBLEFMLGNhbmdlam8wMSw2MDAwMA0KMTk4NixDSEEsQUwsY2FybHRzdDAxLDYwMDAwDQoxOTg2LENIQSxBTCxmb3N0ZWdlMDEsNjAwMDANCjE5ODYsQ0hBLEFMLGthcmtvcm8wMSw2MDAwMA0KMTk4NixDSEEsQUwsbWNrZW9qbzAxLDYwMDAwDQoxOTg2LENIQSxBTCxtb3JtYXJ1MDEsNjAwMDANCjE5ODYsQ0hBLEFMLHRoaWdwYm8wMSw2MDAwMA0KMTk4NixDTEUsQUwsdGhvcm5hbjAxLDExMDAwMDANCjE5ODYsQ0xFLEFMLGJ1dGxlYnIwMSw4NTAwMDANCjE5ODYsQ0xFLEFMLGJlcm5hdG8wMSw1ODAwMDANCjE5ODYsQ0xFLEFMLGZyYW5janUwMSw1NzUwMDANCjE5ODYsQ0xFLEFMLGphY29iYnIwMSw0Mzc1MDANCjE5ODYsQ0xFLEFMLHRhYmxlcGEwMSwzOTUwMDANCjE5ODYsQ0xFLEFMLGVhc3RlamEwMSwzNTAwMDANCjE5ODYsQ0xFLEFMLGhhbGxtZTAxLDM1MDAwMA0KMTk4NixDTEUsQUwsaGVhdG9uZTAxLDMxMDAwMA0KMTk4NixDTEUsQUwsbmlla3JwaDAxLDMwMDAwMA0KMTk4NixDTEUsQUwsc2Nocm9rZTAxLDI3NTAwMA0KMTk4NixDTEUsQUwsd2FkZGV0bzAxLDI3MDAwMA0KMTk4NixDTEUsQUwsYmFuZG9jaDAxLDIyNTAwMA0KMTk4NixDTEUsQUwsZ2FybGF3YTAxLDIxNTAwMA0KMTk4NixDTEUsQUwsY2FydGVqbzAxLDE5MDAwMA0KMTk4NixDTEUsQUwsY2FzdGljYTAxLDE3NzUwMA0KMTk4NixDTEUsQUwsY2FtYWNlcjAxLDE0NTAwMA0KMTk4NixDTEUsQUwsbm9sZXNkaTAxLDExMDAwMA0KMTk4NixDTEUsQUwsc2NodWxkbzAxLDExMDAwMA0KMTk4NixDTEUsQUwsbml4b25vdDAxLDk3NTAwDQoxOTg2LENMRSxBTCx3aWxsc2ZyMDEsOTIwMDANCjE5ODYsQ0xFLEFMLGtlcm5qaTAxLDkwMDAwDQoxOTg2LENMRSxBTCxjYW5kaXRvMDEsODAwMDANCjE5ODYsQ0xFLEFMLG9lbGtlYnIwMSw2NTAwMA0KMTk4NixDTEUsQUwsYWxsYW5hbjAxLDYwMDAwDQoxOTg2LENMRSxBTCxiYWlsZXNjMDEsNjAwMDANCjE5ODYsQ0xFLEFMLG11bGxpZnIwMSw2MDAwMA0KMTk4NixDTEUsQUwscm9tYW5qbzAyLDYwMDAwDQoxOTg2LENMRSxBTCxzbnlkZWNvMDIsNjAwMDANCjE5ODYsQ0xFLEFMLHN3aW5kZ3IwMSw2MDAwMA0KMTk4NixDTEUsQUwseWV0dHJpMDEsNjAwMDANCjE5ODYsREVULEFMLGdpYnNva2kwMSwxMjAwMDAwDQoxOTg2LERFVCxBTCxoZXJuYXdpMDEsOTYwMDAwDQoxOTg2LERFVCxBTCxtb3JyaWphMDIsODc1MDAwDQoxOTg2LERFVCxBTCxwZXRyeWRhMDEsODc1MDAwDQoxOTg2LERFVCxBTCxwYXJyaWxhMDIsODUwMDAwDQoxOTg2LERFVCxBTCxldmFuc2RhMDEsNzkzMzMzDQoxOTg2LERFVCxBTCxjb2xsaWRhMDIsNzAwMDAwDQoxOTg2LERFVCxBTCxsZW1vbmNoMDEsNjk4NTcxDQoxOTg2LERFVCxBTCxoZXJuZGxhMDEsNjg3NTAwDQoxOTg2LERFVCxBTCx3aGl0YWxvMDEsNjcwMDAwDQoxOTg2LERFVCxBTCx0YW5hbmZyMDEsNjYyNTAwDQoxOTg2LERFVCxBTCx0cmFtbWFsMDEsNTY3MTQzDQoxOTg2LERFVCxBTCxsYXBvaWRhMDEsNTUwMDAwDQoxOTg2LERFVCxBTCxicm9va3RvMDEsMzI1MDAwDQoxOTg2LERFVCxBTCxiZXJnbWRhMDEsMzE2NjY3DQoxOTg2LERFVCxBTCx0b2xsZXdhMDEsMjc1MDAwDQoxOTg2LERFVCxBTCx0ZXJyZXdhMDEsMjYwMDAwDQoxOTg2LERFVCxBTCxncnViYmpvMDEsMjUwMDAwDQoxOTg2LERFVCxBTCxjYW1wYmJpMDIsMjAwMDAwDQoxOTg2LERFVCxBTCxzaGVyaXBhMDEsMTUwMDAwDQoxOTg2LERFVCxBTCxvbmVhbHJhMDEsODAwMDANCjE5ODYsREVULEFMLGNvbGVzZGEwMSw3NTAwMA0KMTk4NixERVQsQUwsbGFnYW1pMDEsNzI1MDANCjE5ODYsREVULEFMLGxvd3J5ZHcwMSw2MjUwMA0KMTk4NixERVQsQUwsa2luZ2VyMDEsNjAwMDANCjE5ODYsREVULEFMLHNsYXRvamkwMSw2MDAwMA0KMTk4NixERVQsQUwsc3BpbG1oYTAxLDYwMDAwDQoxOTg2LEtDQSxBTCxicmV0dGdlMDEsMTQ3MTQyOQ0KMTk4NixLQ0EsQUwsd2lsc293aTAyLDExNzUwMDANCjE5ODYsS0NBLEFMLHNtaXRobG8wMSwxMDAwMDAwDQoxOTg2LEtDQSxBTCxxdWlzZWRhMDEsOTI1MDAwDQoxOTg2LEtDQSxBTCxzYWJlcmJyMDEsOTI1MDAwDQoxOTg2LEtDQSxBTCxsZW9uYWRlMDEsODgzMzMzDQoxOTg2LEtDQSxBTCxsZWlicmNoMDEsNzcwMDAwDQoxOTg2LEtDQSxBTCxzdW5kYmppMDEsNjUzMTI4DQoxOTg2LEtDQSxBTCxtY3JhZWhhMDEsNjUwMDAwDQoxOTg2LEtDQSxBTCxibGFja2J1MDIsNjQ1MDAwDQoxOTg2LEtDQSxBTCxiYWxib3N0MDEsNTI1MDAwDQoxOTg2LEtDQSxBTCx3aGl0ZWZyMDEsNDg1MDAwDQoxOTg2LEtDQSxBTCxvcnRham8wMSw0NTAwMDANCjE5ODYsS0NBLEFMLHdhdGhham8wMSw0MDAwMDANCjE5ODYsS0NBLEFMLGxhd3J1MDEsMzYwMDAwDQoxOTg2LEtDQSxBTCxwcnlvcmdyMDEsMjkzODA4DQoxOTg2LEtDQSxBTCxndWJpY21hMDEsMjUwMDAwDQoxOTg2LEtDQSxBTCxqb25lc2x5MDEsMTg1MDAwDQoxOTg2LEtDQSxBTCxqYWNrc2RhMDIsMTc1MDAwDQoxOTg2LEtDQSxBTCxiaWFuY2J1MDEsMTY1MDAwDQoxOTg2LEtDQSxBTCxxdWlya2phMDEsMTUwMDAwDQoxOTg2LEtDQSxBTCxodWlzbW1hMDEsMTAwMDAwDQoxOTg2LEtDQSxBTCxmYXJyc3QwMSw4NTAwMA0KMTk4NixLQ0EsQUwsc2FsYXphbjAxLDc1MDAwDQoxOTg2LEtDQSxBTCxoYXJnZWFsMDEsNjcwMDANCjE5ODYsS0NBLEFMLGJhbmtoc2MwMSw2MDAwMA0KMTk4NixLQ0EsQUwsY29uZWRhMDEsNjAwMDANCjE5ODYsS0NBLEFMLGtpbmdlbWkwMSw2MDAwMA0KMTk4NixNSU4sQUwsYmx5bGViZTAxLDE0NTAwMDANCjE5ODYsTUlOLEFMLGhyYmVra2UwMSwxMDYwMDAwDQoxOTg2LE1JTixBTCxicnVuYXRvMDEsNzQwMDAwDQoxOTg2LE1JTixBTCxzbWFsbHJvMDIsNzQwMDAwDQoxOTg2LE1JTixBTCxkYXZpc3JvMDIsNzI1MDAwDQoxOTg2LE1JTixBTCx2aW9sYWZyMDEsNjc0MDAwDQoxOTg2LE1JTixBTCxoYXRjaG1pMDEsNjY2NjY3DQoxOTg2LE1JTixBTCxnYWV0dGdhMDEsNTE1MDAwDQoxOTg2LE1JTixBTCxzbWl0aG1pMDMsNDUwMDAwDQoxOTg2LE1JTixBTCxidXRjaGpvMDEsMzg1MDAwDQoxOTg2LE1JTixBTCxwdWNrZWtpMDEsMjU1MDAwDQoxOTg2LE1JTixBTCxidXNocmEwMSwyMjAwMDANCjE5ODYsTUlOLEFMLGxhdWRudGkwMSwxNTUwMDANCjE5ODYsTUlOLEFMLGphY2tzcm8wMywxMTUwMDANCjE5ODYsTUlOLEFMLHNhbGFzbWEwMSwxMTUwMDANCjE5ODYsTUlOLEFMLGdhZ25lZ3IwMSwxMDAwMDANCjE5ODYsTUlOLEFMLGxvbWJhc3QwMSw3NTAwMA0KMTk4NixNSU4sQUwsYmVhbmViaTAxLDY1MDAwDQoxOTg2LE1JTixBTCxwb3J0dW1hMDEsNjI1MDANCjE5ODYsTUlOLEFMLGVzcGluYWwwMSw2MDAwMA0KMTk4NixNSU4sQUwscGFzdG9mcjAxLDYwMDAwDQoxOTg2LE1JTixBTCxyZWVkamUwMiw2MDAwMA0KMTk4NixNTDQsQUwsbW9saXRwYTAxLDExNjAwMDANCjE5ODYsTUw0LEFMLHlvdW50cm8wMSw5NTAwMDANCjE5ODYsTUw0LEFMLGdhbnRuamkwMSw4ODc1MDANCjE5ODYsTUw0LEFMLGhhYXNtbzAxLDc3OTE2Nw0KMTk4NixNTDQsQUwsb2dsaXZiZTAxLDc2NjU5Mw0KMTk4NixNTDQsQUwsY2Vyb25yaTAxLDY3NTAwMA0KMTk4NixNTDQsQUwsY2xlYXJtYTAxLDY3MTU2MA0KMTk4NixNTDQsQUwsZGFyd2lkYTAxLDYxMDAwMA0KMTk4NixNTDQsQUwsY29vcGVjZTAxLDYwNzMyMg0KMTk4NixNTDQsQUwsbWFubmlyaTAxLDQ5NTAwMA0KMTk4NixNTDQsQUwsbWNjbHVibzAxLDQ4NzUwMA0KMTk4NixNTDQsQUwsbW9vcmVjaDAyLDQwMjUwMA0KMTk4NixNTDQsQUwsaGlndWV0ZTAxLDE5NTAwMA0KMTk4NixNTDQsQUwscmlsZXNlcjAxLDE3NTAwMA0KMTk4NixNTDQsQUwsc2Nocm9iaTAxLDE1NTAwMA0KMTk4NixNTDQsQUwsc2VhcmFyYTAxLDEyMTUwMA0KMTk4NixNTDQsQUwsZGVlcnJvMDEsOTUwMDANCjE5ODYsTUw0LEFMLGxlYXJ5dGkwMSw5MDAwMA0KMTk4NixNTDQsQUwsbmlldmVqdTAxLDcwMDAwDQoxOTg2LE1MNCxBTCx3ZWdtYWJpMDEsNzAwMDANCjE5ODYsTUw0LEFMLGJpcmtibWkwMSw2MDAwMA0KMTk4NixNTDQsQUwsYm9zaW9jaDAxLDYwMDAwDQoxOTg2LE1MNCxBTCxicmFnZ2dsMDEsNjAwMDANCjE5ODYsTUw0LEFMLGNsdXR0YnIwMSw2MDAwMA0KMTk4NixNTDQsQUwsam9obnNqbzA0LDYwMDAwDQoxOTg2LE1MNCxBTCxwbGVzYWRhMDEsNjAwMDANCjE5ODYsTUw0LEFMLHN2ZXVtZGEwMSw2MDAwMA0KMTk4NixNTDQsQUwsdGhvbWFnbzAxLDYwMDAwDQoxOTg2LE5ZQSxBTCx3aW5maWRhMDEsMTg4NjcxNA0KMTk4NixOWUEsQUwsaGVuZGVyaTAxLDE1NzAwMDANCjE5ODYsTllBLEFMLG1hdHRpZG8wMSwxMzc1MDAwDQoxOTg2LE5ZQSxBTCxrZW1wc3QwMSwxMjIwMDAwDQoxOTg2LE5ZQSxBTCxyYW5kb3dpMDEsMTA2MDAwMA0KMTk4NixOWUEsQUwsZ3JpZmZrZTAxLDEwNTAwMDANCjE5ODYsTllBLEFMLGd1aWRycm8wMSw5NzUwMDANCjE5ODYsTllBLEFMLHJpZ2hlZGEwMSw4Mzc1MDANCjE5ODYsTllBLEFMLHdoaXRzZWQwMSw4MDAwMDANCjE5ODYsTllBLEFMLGJ1cm5zYnIwMSw3NTAwMDANCjE5ODYsTllBLEFMLG5pZWtyam8wMSw3NTAwMDANCjE5ODYsTllBLEFMLHNoaXJsYm8wMSw3NTAwMDANCjE5ODYsTllBLEFMLHd5bmVnYnUwMSw3MzMzMzMNCjE5ODYsTllBLEFMLG1vbnRlam8wMSw3MTY2NjcNCjE5ODYsTllBLEFMLGVhc2xlbWkwMSw2NTgzMzMNCjE5ODYsTllBLEFMLHJvZW5pZ2EwMSw2NTgzMzMNCjE5ODYsTllBLEFMLGJlcnJhZGEwMSw1NTc1MDANCjE5ODYsTllBLEFMLG1vcmVub20wMSw1MDAwMDANCjE5ODYsTllBLEFMLHNjdXJycm8wMSw0NTAwMDANCjE5ODYsTllBLEFMLGhhc3Nlcm8wMSw0MDA4NzMNCjE5ODYsTllBLEFMLGZpc2NobWkwMSwyMDAwMDANCjE5ODYsTllBLEFMLGZpc2hlYnIwMSwxMjAwMDANCjE5ODYsTllBLEFMLHBhZ2xpbWkwMSwxMjAwMDANCjE5ODYsTllBLEFMLHJhc211ZGUwMSwxMDAwMDANCjE5ODYsTllBLEFMLHBhc3F1ZGEwMSw3MDAwMA0KMTk4NixOWUEsQUwsZXNwaW5qdTAxLDY1MDAwDQoxOTg2LE5ZQSxBTCxkcmFiZWRvMDEsNjAwMDANCjE5ODYsTllBLEFMLGpvaG50bzAxLDYwMDAwDQoxOTg2LE9BSyxBTCxhbmR1ampvMDEsMTIzMzMzMw0KMTk4NixPQUssQUwsbGFuc2ZjYTAxLDEyMDAwMDANCjE5ODYsT0FLLEFMLG11cnBoZHcwMSw5MDAxNDkNCjE5ODYsT0FLLEFMLGtpbmdtZGEwMSw3MzAwMDANCjE5ODYsT0FLLEFMLGRhdmlzbWkwMiw2MDAwMDANCjE5ODYsT0FLLEFMLGdyaWZmYWwwMSw1Nzc1ODkNCjE5ODYsT0FLLEFMLGJvY2h0YnIwMSw1NzI1MDANCjE5ODYsT0FLLEFMLGhvd2VsamEwMSw1MzAwMDANCjE5ODYsT0FLLEFMLGxhbmdmcmkwMSw1MDAwMDANCjE5ODYsT0FLLEFMLGJha2VyZHUwMSw0NzUwMDANCjE5ODYsT0FLLEFMLHBoaWxsdG8wMiwzMDA5NTANCjE5ODYsT0FLLEFMLGNvZGlyY2gwMSwyNzAwMDANCjE5ODYsT0FLLEFMLGhpbGxkbzAxLDIxODIwMA0KMTk4NixPQUssQUwsaGVuZGVzdDAxLDIwMDAwMA0KMTk4NixPQUssQUwsa3J1ZWdiaTAxLDE5NTAwMA0KMTk4NixPQUssQUwsYXRoZXJrZTAxLDE4MzcwMA0KMTk4NixPQUssQUwsYmFpcmRvMDEsOTYwMDANCjE5ODYsT0FLLEFMLHRldHRsbWkwMSw5NTAwMA0KMTk4NixPQUssQUwsb250aXZzdDAyLDg4MDAwDQoxOTg2LE9BSyxBTCxyaWpvam8wMSw4NTAwMA0KMTk4NixPQUssQUwsd2lsbGFqZTAxLDgwMDAwDQoxOTg2LE9BSyxBTCx5b3VuZ2N1MDEsNzkwMDANCjE5ODYsT0FLLEFMLGNhbnNlam8wMSw3NTAwMA0KMTk4NixPQUssQUwsc2FrYXRsZTAxLDc1MDAwDQoxOTg2LE9BSyxBTCxncm9zc3dhMDEsNjAwMDANCjE5ODYsT0FLLEFMLGxlaXBlZGEwMSw2MDAwMA0KMTk4NixPQUssQUwsbWNnd2ltYTAxLDYwMDAwDQoxOTg2LE9BSyxBTCxtb29uZWJpMDEsNjAwMDANCjE5ODYsT0FLLEFMLHBsdW5rZXIwMSw2MDAwMA0KMTk4NixPQUssQUwsc3Rld2FkYTAxLDYwMDAwDQoxOTg2LE9BSyxBTCx0aWxsbXJ1MDEsNjAwMDANCjE5ODYsU0VBLEFMLHRob21hZ28wMSw2MDAwMDANCjE5ODYsU0VBLEFMLGJlYXR0amkwMSw1NzUwMDANCjE5ODYsU0VBLEFMLGJyYWRscGgwMSw0NzUwMDANCjE5ODYsU0VBLEFMLHllYWdlc3QwMSw0MTI4MDkNCjE5ODYsU0VBLEFMLGRhdmlzYWwwMSw0MDAwMDANCjE5ODYsU0VBLEFMLG1vb3JlbWkwMSw0MDAwMDANCjE5ODYsU0VBLEFMLGNvd2VuYWwwMSwzNjAwMDANCjE5ODYsU0VBLEFMLGtlYXJuYm8wMSwzMDAwMDANCjE5ODYsU0VBLEFMLHppc2tyaTAxLDI3MjUwMA0KMTk4NixTRUEsQUwsbGFuZ3NtYTAxLDI0MjUwMA0KMTk4NixTRUEsQUwscGhlbHBrZTAxLDIzNTAwMA0KMTk4NixTRUEsQUwseW91bmdtYTAxLDIwNTAwMA0KMTk4NixTRUEsQUwscHJlc2xqaTAxLDE5MjUwMA0KMTk4NixTRUEsQUwsdGhvbWFybzAyLDE2NTAwMA0KMTk4NixTRUEsQUwsbGFkZHBlMDEsMTYwMDAwDQoxOTg2LFNFQSxBTCx3aWxjb21pMDEsMTUwMDAwDQoxOTg2LFNFQSxBTCxtb3JnYW1pMDEsMTI1MDAwDQoxOTg2LFNFQSxBTCxyYW1vc2RvMDEsODUwMDANCjE5ODYsU0VBLEFMLHJleW5vaGEwMSw4NTAwMA0KMTk4NixTRUEsQUwsdGFydGFkYTAxLDg1MDAwDQoxOTg2LFNFQSxBTCxtb3Nlc2pvMDEsODI1MDANCjE5ODYsU0VBLEFMLHJlZWRqZTAxLDgxNTAwDQoxOTg2LFNFQSxBTCxzd2lmdGJpMDIsNzUwMDANCjE5ODYsU0VBLEFMLGJlc3RrYTAxLDcwMDAwDQoxOTg2LFNFQSxBTCxmaXJlb3N0MDEsNjQwMDANCjE5ODYsU0VBLEFMLGJyYW50bWkwMSw2MDAwMA0KMTk4NixURVgsQUwsd2FyZGdhMDEsODY1MDAwDQoxOTg2LFRFWCxBTCxoYXJyYXRvMDEsNzAwMDAwDQoxOTg2LFRFWCxBTCxob290b2J1MDEsNjkwMDAwDQoxOTg2LFRFWCxBTCxob3VnaGNoMDEsNjkwMDAwDQoxOTg2LFRFWCxBTCxwYXJyaWxhMDEsNTYwNjE5DQoxOTg2LFRFWCxBTCxyb3plbWRhMDEsMzUwMDAwDQoxOTg2LFRFWCxBTCxvYnJpZXBlMDMsMzM3NTAwDQoxOTg2LFRFWCxBTCxzbGF1Z2RvMDEsMzMxNTAwDQoxOTg2LFRFWCxBTCxoYXJyaWdyMDEsMzEwMDAwDQoxOTg2LFRFWCxBTCxmbGV0Y3NjMDEsMjgyNTAwDQoxOTg2LFRFWCxBTCxpbmNhdnBlMDEsMjEwMDAwDQoxOTg2LFRFWCxBTCxwYWNpb3RvMDEsMjAxNTAwDQoxOTg2LFRFWCxBTCx3aWxrZWN1MDEsMTY1MDAwDQoxOTg2LFRFWCxBTCxwb3J0ZWRhMDIsMTYyNTAwDQoxOTg2LFRFWCxBTCxtY2Rvd29kMDEsMTM1MDAwDQoxOTg2LFRFWCxBTCxidWVjaHN0MDEsODUwMDANCjE5ODYsVEVYLEFMLHJ1c3NlamUwMSw4MDAwMA0KMTk4NixURVgsQUwscGV0cmFnZTAxLDc5NTAwDQoxOTg2LFRFWCxBTCxndXptYWpvMDEsNzUwMDANCjE5ODYsVEVYLEFMLHdyaWdocmkwMSw3MDAwMA0KMTk4NixURVgsQUwsY29ycmVlZDAxLDYyNTAwDQoxOTg2LFRFWCxBTCxsb3luZG1pMDEsNjAwMDANCjE5ODYsVEVYLEFMLG1vaG9yZGEwMSw2MDAwMA0KMTk4NixURVgsQUwsc2llcnJydTAxLDYwMDAwDQoxOTg2LFRFWCxBTCx3aWxsaW1pMDIsNjAwMDANCjE5ODYsVEVYLEFMLHdpdHRibzAxLDYwMDAwDQoxOTg2LFRPUixBTCxjYXVkaWJpMDEsMTUzMzMzMw0KMTk4NixUT1IsQUwsc3RpZWJkYTAxLDEwMDAwMDANCjE5ODYsVE9SLEFMLHVwc2hhd2kwMSw5NDAwMDANCjE5ODYsVE9SLEFMLGdhcmNpZGEwMSw3OTAwMDANCjE5ODYsVE9SLEFMLG1vc2VibGwwMSw3MzI1MDANCjE5ODYsVE9SLEFMLGJhcmZpamUwMSw3MjUwMDANCjE5ODYsVE9SLEFMLGJlbGxnZTAyLDcyNTAwMA0KMTk4NixUT1IsQUwsam9obnNjbDAxLDcyNTAwMA0KMTk4NixUT1IsQUwsYWxleGFkbzAxLDcwMDAwMA0KMTk4NixUT1IsQUwsY2xhbmNqaTAxLDY4MDAwMA0KMTk4NixUT1IsQUwsbGFtcGRlMDEsNTY2NjY3DQoxOTg2LFRPUixBTCxrZXlqaTAxLDU1MjUwMA0KMTk4NixUT1IsQUwsbGF2ZWxnYTAxLDUzMzMzMw0KMTk4NixUT1IsQUwsbWFydGlidTAxLDM0NzA5Ng0KMTk4NixUT1IsQUwsd2hpdHRlcjAxLDMyNTAwMA0KMTk4NixUT1IsQUwsaW9yZ2dhMDEsMzA2NjY3DQoxOTg2LFRPUixBTCxmZXJuYXRvMDEsMjc1MDAwDQoxOTg2LFRPUixBTCxtdWxsaXJhMDEsMjU1OTUxDQoxOTg2LFRPUixBTCxoZW5rZXRvMDEsMTkxMDAwDQoxOTg2LFRPUixBTCxsZWFjaHJpMDEsMTYyNTAwDQoxOTg2LFRPUixBTCxjZXJ1dGpvMDEsOTAwMDANCjE5ODYsVE9SLEFMLHNoZXBocm8wMSw5MDAwMA0KMTk4NixUT1IsQUwsZ3J1YmVrZTAxLDg4MDAwDQoxOTg2LFRPUixBTCxmaWxlcnRvMDEsODI1MDANCjE5ODYsVE9SLEFMLGVpY2hobWEwMSw3NDAwMA0KMTk4NixUT1IsQUwsbGVlbWEwMiw2MDAwMA0KMTk4NixUT1IsQUwsbXVzc2VqZTAxLDYwMDAwDQoxOTg2LEFUTCxOTCxtdXJwaGRhMDUsMTgyNTAwMA0KMTk4NixBVEwsTkwsaG9ybmVibzAxLDE4MDAwMDANCjE5ODYsQVRMLE5MLHN1dHRlYnIwMSwxNzI5MTY3DQoxOTg2LEFUTCxOTCxzaW1tb3RlMDEsMTAwMDAwMA0KMTk4NixBVEwsTkwsYmFya2VsZTAxLDg4MDAwMA0KMTk4NixBVEwsTkwsb2JlcmtrZTAxLDgyNTAwMA0KMTk4NixBVEwsTkwscmFtaXJyYTAxLDgyNTAwMA0KMTk4NixBVEwsTkwsZ2FyYmVnZTAxLDc4NjY2Nw0KMTk4NixBVEwsTkwsY2hhbWJjaDAxLDc2OTQ1Mg0KMTk4NixBVEwsTkwsd2FzaGljbDAxLDc1MDAwMA0KMTk4NixBVEwsTkwsbWFobGVyaTAxLDY4NzUwMA0KMTk4NixBVEwsTkwsY2FtcHJpMDEsNjAwMDAwDQoxOTg2LEFUTCxOTCx2aXJnaW96MDIsNTc1MDAwDQoxOTg2LEFUTCxOTCxiZW5lZGJyMDEsNTY1MDAwDQoxOTg2LEFUTCxOTCxodWJiYWdsMDEsNTA1MDAwDQoxOTg2LEFUTCxOTCxzYW1wbGJpMDEsNDcwMDAwDQoxOTg2LEFUTCxOTCxoYXJwZXRlMDEsNDI1MDAwDQoxOTg2LEFUTCxOTCxwYWxtZWRhMDEsMzkwMDAwDQoxOTg2LEFUTCxOTCxhY2tlcmppMDEsMzY3NTAwDQoxOTg2LEFUTCxOTCxtb3RsZWRhMDEsMjU3NTAwDQoxOTg2LEFUTCxOTCxtY211cmNyMDEsMjI1MDAwDQoxOTg2LEFUTCxOTCxkZWRtb2plMDEsMjAwMDAwDQoxOTg2LEFUTCxOTCxzbWl0aHphMDEsMjAwMDAwDQoxOTg2LEFUTCxOTCxqb2huc2pvMDUsMTA1MDAwDQoxOTg2LEFUTCxOTCxtb3Jlbm9tMDEsMTAwMDAwDQoxOTg2LEFUTCxOTCxhc3NlbnBhMDEsNjAwMDANCjE5ODYsQVRMLE5MLG9sd2luZWQwMSw2MDAwMA0KMTk4NixBVEwsTkwsc3BlY2tjbDAxLDYwMDAwDQoxOTg2LEFUTCxOTCx0aG9tYWFuMDEsNjAwMDANCjE5ODYsQ0hOLE5MLHN1dGNscmkwMSwxNTMwMDAwDQoxOTg2LENITixOTCxjZXlybzAxLDE0MDAwMDANCjE5ODYsQ0hOLE5MLHJ1dGh2ZGkwMSwxMDUwMDAwDQoxOTg2LENITixOTCxkdXJoYWxlMDEsOTgzMzMzDQoxOTg2LENITixOTCx0cm91dHN0MDEsODkwMDAwDQoxOTg2LENITixOTCxtYXR0aGdhMDEsODUwMDAwDQoxOTg2LENITixOTCxtdW1waGplMDEsODUwMDAwDQoxOTg2LENITixOTCxkYXZpc2pvMDIsODMzMzMzDQoxOTg2LENITixOTCxzYW5kZXNjMDEsODAwMDAwDQoxOTg2LENITixOTCxlY2tlcmRlMDEsNzgzMzMzDQoxOTg2LENITixOTCxtb3JlbGtlMDEsNzYwMDAwDQoxOTg2LENITixOTCxzbWl0aGxlMDIsNzIwMDAwDQoxOTg2LENITixOTCxzYW5kYnJ5MDEsNjY1MDAwDQoxOTg2LENITixOTCxmcmF6aWdlMDEsNjMzMzMzDQoxOTg2LENITixOTCxicnVzc3dhMDEsNTc1MDAwDQoxOTg2LENITixOTCxkZXJuaWJvMDEsNTU4MzMzDQoxOTg2LENITixOTCx0cmlsbG1hMDEsNTUwMDAwDQoxOTg2LENITixOTCxsb3Blc2RhMDEsNDkwMDAwDQoxOTg2LENITixOTCxib3NsZXRoMDEsMzI3NTAwDQoxOTg2LENITixOTCxzYWxhemx1MDEsMzI1MDAwDQoxOTg2LENITixOTCx3b29kc2dhMDEsMzI1MDAwDQoxOTg2LENITixOTCxzcGVpZWNoMDEsMjc1MDAwDQoxOTg2LENITixOTCxmcmFuY3RlMDEsMjUwMDAwDQoxOTg2LENITixOTCxmb250ZXJhMDEsMjQwMDAwDQoxOTg2LENITixOTCxkdW5zdHNoMDEsMTAwMDAwDQoxOTg2LENITixOTCxoZWJuZXJpMDEsMTAwMDAwDQoxOTg2LENITixOTCxrZW91Z21hMDIsMTAwMDAwDQoxOTg2LENITixOTCxndW1wZWRhMDEsNjQwMDANCjE5ODYsQ0hOLE5MLGxha2VzdDAxLDYwMDAwDQoxOTg2LENITixOTCxtYXJ0aW1pMDEsNjAwMDANCjE5ODYsQ0hOLE5MLG1veWVyamEwMSw2MDAwMA0KMTk4NixDSU4sTkwsc290b21hMDEsMTE1MDAwMA0KMTk4NixDSU4sTkwscGFya2VkYTAxLDExMDAwMDANCjE5ODYsQ0lOLE5MLGRlbm55am8wMSwxMDgzMzMzDQoxOTg2LENJTixOTCxyb3NlcGUwMSwxMDAwMDAwDQoxOTg2LENJTixOTCxjb25jZWRhMDEsOTIwMDAwDQoxOTg2LENJTixOTCxiZWxsYnUwMSw4NzAwMDANCjE5ODYsQ0lOLE5MLGRpYXpibzAxLDc3NTAwMA0KMTk4NixDSU4sTkwsb2VzdGVybzAxLDY1MDAwMA0KMTk4NixDSU4sTkwsZ3VsbGliaTAxLDU0NTU1NQ0KMTk4NixDSU4sTkwscG93ZXJ0ZTAxLDUwMDAwMA0KMTk4NixDSU4sTkwscHJpY2VqbzAyLDQzMDAwMA0KMTk4NixDSU4sTkwscGFzdG9mcjAxLDQwNTAwMA0KMTk4NixDSU4sTkwsbWlsbmVlZDAxLDM1MDAwMA0KMTk4NixDSU4sTkwscGVyZXp0bzAxLDI3NTAwMA0KMTk4NixDSU4sTkwsZXNhc2tuaTAxLDI3MjUwMA0KMTk4NixDSU4sTkwsdmVuYWJtYTAxLDIyNTAwMA0KMTk4NixDSU4sTkwsYnJvd250bzA1LDIxNTAwMA0KMTk4NixDSU4sTkwsZnJhbmNqbzAxLDE5NTAwMA0KMTk4NixDSU4sTkwsdmFuZ29kYTAxLDE1MDAwMA0KMTk4NixDSU4sTkwsYnV0ZXJzYTAxLDEwMjUwMA0KMTk4NixDSU4sTkwscm9iaW5ybzAxLDkyNTAwDQoxOTg2LENJTixOTCxkYXZpc2VyMDEsOTAwMDANCjE5ODYsQ0lOLE5MLHdlbHNoY2gwMSw4MDAwMA0KMTk4NixDSU4sTkwsd2lsbGljYTAxLDcwMDAwDQoxOTg2LENJTixOTCxkYW5pZWthMDEsNjAwMDANCjE5ODYsQ0lOLE5MLGpvbmVzdHIwMSw2MDAwMA0KMTk4NixDSU4sTkwsbGFuZHJiaTAxLDYwMDAwDQoxOTg2LENJTixOTCxsYXJraWJhMDEsNjAwMDANCjE5ODYsQ0lOLE5MLG11cnBocm8wMSw2MDAwMA0KMTk4NixDSU4sTkwsc3RpbGxrdTAxLDYwMDAwDQoxOTg2LEhPVSxOTCxyeWFubm8wMSwxMTI1MDAwDQoxOTg2LEhPVSxOTCxrbmVwcGJvMDEsMTAwMDAwMA0KMTk4NixIT1UsTkwscHVobHRlMDEsODUwMDAwDQoxOTg2LEhPVSxOTCxjcnV6am8wMSw3NTUwMDANCjE5ODYsSE9VLE5MLHNjb3R0bWkwMyw2NjY2NjcNCjE5ODYsSE9VLE5MLHNtaXRoZGEwMiw2NTAwMDANCjE5ODYsSE9VLE5MLGdhcm5lcGgwMSw2MDAwMDANCjE5ODYsSE9VLE5MLHRob25kaTAxLDYwMDAwMA0KMTk4NixIT1UsTkwsZG9yYW5iaTAyLDU1MDAwMA0KMTk4NixIT1UsTkwsYXNoYnlhbDAxLDUyNTAwMA0KMTk4NixIT1UsTkwscmV5bm9jcjAxLDQxNjY2Nw0KMTk4NixIT1UsTkwsd2FsbGlkZTAxLDM2NjY2Nw0KMTk4NixIT1UsTkwsZGF3bGViaTAxLDMyNTAwMA0KMTk4NixIT1UsTkwsYmFzc2tlMDEsMzEwMDAwDQoxOTg2LEhPVSxOTCxkaXBpbmZyMDEsMjgwMDAwDQoxOTg2LEhPVSxOTCxsb3BlemF1MDEsMjIzMjc1DQoxOTg2LEhPVSxOTCxkYXZpc2dsMDEsMTIwMDAwDQoxOTg2LEhPVSxOTCxjYWxob2plMDEsOTUwMDANCjE5ODYsSE9VLE5MLHBhbmtvamkwMSw4NTAwMA0KMTk4NixIT1UsTkwsaGF0Y2hiaTAxLDgwMDAwDQoxOTg2LEhPVSxOTCxkZXNoYWppMDEsNjUwMDANCjE5ODYsSE9VLE5MLGtlcmZlY2gwMSw2NTAwMA0KMTk4NixIT1UsTkwsYW5kZXJsYTAyLDYwMDAwDQoxOTg2LEhPVSxOTCxtaXplcmpvMDEsNjAwMDANCjE5ODYsTEFOLE5MLHZhbGVuZmUwMSwxNjAwMDAwDQoxOTg2LExBTixOTCxndWVycnBlMDEsMTM3MDAwMA0KMTk4NixMQU4sTkwsaGVyc2hvcjAxLDEwMDAwMDANCjE5ODYsTEFOLE5MLHJldXNzamUwMSwxMDAwMDAwDQoxOTg2LExBTixOTCxtYWRsb2JpMDEsODQxNjY3DQoxOTg2LExBTixOTCxzY2lvc21pMDEsODAwMDAwDQoxOTg2LExBTixOTCxob25leXJpMDEsNzU1MDAwDQoxOTg2LExBTixOTCx3ZWxjaGJvMDEsNzQzNzUwDQoxOTg2LExBTixOTCxtYXJzaG1pMDIsNjUwMDAwDQoxOTg2LExBTixOTCxsYW5kcmtlMDEsNjM3NTAwDQoxOTg2LExBTixOTCxzYXhzdDAxLDU4NDYyNA0KMTk4NixMQU4sTkwsbmllZGV0bzAxLDUzMTI1MA0KMTk4NixMQU4sTkwsdmFuZGVlZDAxLDQ1NTAwMA0KMTk4NixMQU4sTkwsY2FiZWxlbjAxLDQ1MDAwMA0KMTk4NixMQU4sTkwscnVzc2ViaTAxLDQ1MDAwMA0KMTk4NixMQU4sTkwsdHJldmlhbDAxLDQwOTQ4NQ0KMTk4NixMQU4sTkwsYmFpbG9ibzAxLDM3NTAwMA0KMTk4NixMQU4sTkwscGVuYWFsMDEsMzUwMDAwDQoxOTg2LExBTixOTCxicm9ja2dyMDEsMzI1MDAwDQoxOTg2LExBTixOTCxtYXR1c2xlMDEsMjIwMDAwDQoxOTg2LExBTixOTCxhbmRlcmRhMDIsMjAwMDAwDQoxOTg2LExBTixOTCxiZWNrd2pvMDEsMjAwMDAwDQoxOTg2LExBTixOTCxjZWRlbmNlMDEsMjAwMDAwDQoxOTg2LExBTixOTCxob3dlbGtlMDEsMTc1MDAwDQoxOTg2LExBTixOTCxkdW5jYW1hMDEsMTUwMDAwDQoxOTg2LExBTixOTCx2b25vaGRhMDEsNjg1MDANCjE5ODYsTEFOLE5MLGdvbnpham8wMiw2NTAwMA0KMTk4NixMQU4sTkwsc3R1YmJmcjAxLDY1MDAwDQoxOTg2LExBTixOTCxwb3dlbGRlMDEsNjIwMDANCjE5ODYsTEFOLE5MLGhhbWlsamUwMSw2MDAwMA0KMTk4NixMQU4sTkwsaG9sdG9icjAxLDYwMDAwDQoxOTg2LExBTixOTCx3aWxsaXJlMDEsNjAwMDANCjE5ODYsTU9OLE5MLHJhaW5ldGkwMSwxNTE1MDAwDQoxOTg2LE1PTixOTCxkYXdzb2FuMDEsMTA0NzAwMA0KMTk4NixNT04sTkwsdGhvbXBqYTAxLDEwMDAwMDANCjE5ODYsTU9OLE5MLGxlYWNoMDEsODUwMDAwDQoxOTg2LE1PTixOTCxyZWFyZGplMDEsODUwMDAwDQoxOTg2LE1PTixOTCxzbWl0aGJyMDEsNzAwMDAwDQoxOTg2LE1PTixOTCxicm9va2h1MDEsNjUwMDAwDQoxOTg2LE1PTixOTCx3YWxsYXRpMDEsNjUwMDAwDQoxOTg2LE1PTixOTCxsYXd2YTAxLDQ1MDAwMA0KMTk4NixNT04sTkwsc2NoYXRkYTAxLDQxNTAwMA0KMTk4NixNT04sTkwsd29obGZqaTAxLDM1MDAwMA0KMTk4NixNT04sTkwsZmx5bm5kbzAxLDMyNTAwMA0KMTk4NixNT04sTkwsa3JlbmN3YTAxLDMyMDAwMA0KMTk4NixNT04sTkwsbWNnYWZhbjAxLDE4MDAwMA0KMTk4NixNT04sTkwsaGVza2VqbzAxLDE3MDAwMA0KMTk4NixNT04sTkwsdGhvbXBzYzAxLDE3MDAwMA0KMTk4NixNT04sTkwsYnVya2V0aTAxLDE2MDAwMA0KMTk4NixNT04sTkwsZml0emdtaTAyLDE0NzAwMA0KMTk4NixNT04sTkwscm9iZXJiZTAxLDEzODEwMA0KMTk4NixNT04sTkwsdGliYnNqYTAxLDEyNzUwMA0KMTk4NixNT04sTkwsd2Vic3RtaTAxLDEyMDAwMA0KMTk4NixNT04sTkwsbmlldG90bzAxLDkwMDAwDQoxOTg2LE1PTixOTCx3aW5uaWhlMDEsODc1MDANCjE5ODYsTU9OLE5MLGJpbGFyZGEwMSw4MDAwMA0KMTk4NixNT04sTkwseW91bWFmbDAxLDcwMDAwDQoxOTg2LE1PTixOTCxnYWxhcmFuMDEsNjc1MDANCjE5ODYsTU9OLE5MLGh1bnRyYTAxLDY1MDAwDQoxOTg2LE1PTixOTCxqb2huc3dhMDMsNjUwMDANCjE5ODYsTU9OLE5MLG5ld21hYWwwMSw2MjUwMA0KMTk4NixNT04sTkwsc2VicmFibzAxLDYxNTAwDQoxOTg2LE1PTixOTCxyaXZlcmx1MDEsNjAwMDANCjE5ODYsTU9OLE5MLHRvbWxpZGEwMSw2MDAwMA0KMTk4NixOWU4sTkwsZm9zdGVnZTAxLDI4MDAwMDANCjE5ODYsTllOLE5MLGNhcnRlZ2EwMSwyMTYwNzE0DQoxOTg2LE5ZTixOTCxoZXJuYWtlMDEsMTY1MDAwMA0KMTk4NixOWU4sTkwsZ29vZGVkdzAxLDEzMjAwMDANCjE5ODYsTllOLE5MLHN0cmF3ZGEwMSw5NDUwMDANCjE5ODYsTllOLE5MLG9yb3NjamUwMSw4MjUwMDANCjE5ODYsTllOLE5MLHdpbHNvbW8wMSw3MDAwMDANCjE5ODYsTllOLE5MLGtuaWdocmEwMSw2NDUwMDANCjE5ODYsTllOLE5MLG9qZWRhYm8wMSw1NTAwMDANCjE5ODYsTllOLE5MLGx5bmNoZWQwMSw1MzAwMDANCjE5ODYsTllOLE5MLGRhcmxpcm8wMSw0NDAwMDANCjE5ODYsTllOLE5MLGhlZXBkYTAxLDM1MDAwMA0KMTk4NixOWU4sTkwsYmFja213YTAxLDMyNTAwMA0KMTk4NixOWU4sTkwsc2lza2RvMDEsMjc1MDAwDQoxOTg2LE5ZTixOTCxzYW50YXJhMDEsMjM1MDAwDQoxOTg2LE5ZTixOTCxqb2huc2hvMDEsMjI3NTAwDQoxOTg2LE5ZTixOTCxjb3Jjb3RpMDEsMjIwMDAwDQoxOTg2LE5ZTixOTCxmZXJuYXNpMDEsMjAwMDAwDQoxOTg2LE5ZTixOTCx0ZXVmZXRpMDEsMjAwMDAwDQoxOTg2LE5ZTixOTCxtY2Rvd3JvMDEsMTg1MDAwDQoxOTg2LE5ZTixOTCxhZ3VpbHJpMDEsMTMwMDAwDQoxOTg2LE5ZTixOTCxkeWtzdGxlMDEsOTI1MDANCjE5ODYsTllOLE5MLG5pZW1hcmEwMSw4MzAwMA0KMTk4NixOWU4sTkwsZ2liYm9qbzAyLDY1MDAwDQoxOTg2LE5ZTixOTCxlbHN0ZWtlMDEsNjAwMDANCjE5ODYsTllOLE5MLGhlYXJuZWQwMiw2MDAwMA0KMTk4NixOWU4sTkwsbWF6emlsZTAxLDYwMDAwDQoxOTg2LE5ZTixOTCxtaXRjaGtlMDEsNjAwMDANCjE5ODYsUEhJLE5MLHNjaG1pbWkwMSwyMTM2NjY2DQoxOTg2LFBISSxOTCxjYXJsdHN0MDEsMTAwMDAwMA0KMTk4NixQSEksTkwsdGVrdWxrZTAxLDg5MDAwMA0KMTk4NixQSEksTkwsaHVtZXRvMDEsODAwMDAwDQoxOTg2LFBISSxOTCxyYXdsZXNoMDEsODAwMDAwDQoxOTg2LFBISSxOTCxiZWRyb3N0MDEsNjUwMDAwDQoxOTg2LFBISSxOTCxoYXllc3ZvMDEsNjUwMDAwDQoxOTg2LFBISSxOTCxzYW11ZWp1MDEsNTEyNTAwDQoxOTg2LFBISSxOTCx3aWxzb2dsMDEsNDg3NTAwDQoxOTg2LFBISSxOTCxzdGVmZWpvMDEsNDAwMDAwDQoxOTg2LFBISSxOTCxncm9zc2dyMDEsMzc1MDAwDQoxOTg2LFBISSxOTCxncm9zc2tlMDEsMzU1MDAwDQoxOTg2LFBISSxOTCxyZWR1c2dhMDEsMzUwMDAwDQoxOTg2LFBISSxOTCxodWRzb2NoMDIsMjc3NTAwDQoxOTg2LFBISSxOTCxhZ3VheWx1MDEsMjc1MDAwDQoxOTg2LFBISSxOTCxhbmRlcmxhMDIsMjQwMDAwDQoxOTg2LFBISSxOTCxmb2xleXRvMDIsMjEwMDAwDQoxOTg2LFBISSxOTCxjYXJtYWRvMDEsMTY1MDAwDQoxOTg2LFBISSxOTCxydXNzZWpvMDIsMTAwMDAwDQoxOTg2LFBISSxOTCxzY2h1cmkwMSwxMDAwMDANCjE5ODYsUEhJLE5MLHN0b25lamUwMSwxMDAwMDANCjE5ODYsUEhJLE5MLHRob21wbWkwMiw5NTAwMA0KMTk4NixQSEksTkwscm9lbmlybzAxLDg1MDAwDQoxOTg2LFBISSxOTCxkYXVsdGRhMDEsODAwMDANCjE5ODYsUEhJLE5MLGtuaWNlYWwwMSw4MDAwMA0KMTk4NixQSEksTkwsamVsdHpzdDAxLDcwMDAwDQoxOTg2LFBISSxOTCxyZXlub3JvMDIsNjYwMDANCjE5ODYsUEhJLE5MLGphY2tzbWkwMiw2MDAwMA0KMTk4NixQSEksTkwsbWFkZHVtaTAxLDYwMDAwDQoxOTg2LFBISSxOTCxydWZmaWJyMDEsNjAwMDANCjE5ODYsUEhJLE5MLHRvbGl2ZnIwMSw2MDAwMA0KMTk4NixQSVQsTkwsZGVsZW9qbzAxLDE4MjUwMDANCjE5ODYsUElULE5MLHBlbmF0bzAxLDEyMjUwMDANCjE5ODYsUElULE5MLG1jd2lsbGEwMSwxMDgwMDAwDQoxOTg2LFBJVCxOTCxyYXlqbzAxLDc1NzAwMA0KMTk4NixQSVQsTkwscmV1c2NyaTAxLDcwMDAwMA0KMTk4NixQSVQsTkwscm9iaW5kbzAxLDY3MDAwMA0KMTk4NixQSVQsTkwscmhvZGVyaTAxLDYyMDAwMA0KMTk4NixQSVQsTkwsbWF6emlsZTAxLDYwMDAwMA0KMTk4NixQSVQsTkwsbGV6Y2FzaTAxLDUwMDAwMA0KMTk4NixQSVQsTkwsbGVtYXNqbzAxLDQwMDAwMA0KMTk4NixQSVQsTkwsbW9ycmlqaTAxLDMxNzUwMA0KMTk4NixQSVQsTkwsZ3VhbnRjZTAxLDMwNzUwMA0KMTk4NixQSVQsTkwsYWxtb25iaTAxLDI2MDAwMA0KMTk4NixQSVQsTkwsd2FzaGl1bDAxLDE4MDAwMA0KMTk4NixQSVQsTkwsd2Fsa2JvMDEsMTc1MDAwDQoxOTg2LFBJVCxOTCxvcnN1bGpvMDEsMTM1MDAwDQoxOTg2LFBJVCxOTCxyZXlub3JqMDEsMTMwMDAwDQoxOTg2LFBJVCxOTCxiaWVsZW1pMDEsMTEwNTAwDQoxOTg2LFBJVCxOTCx3aW5uamkwMSwxMTAwMDANCjE5ODYsUElULE5MLGNsZW1lcGEwMSwxMDI1MDANCjE5ODYsUElULE5MLG9ydGl6anUwMSw5NzAwMA0KMTk4NixQSVQsTkwsYnJlYW1zaTAxLDkyMDAwDQoxOTg2LFBJVCxOTCxrcmF3Y3JhMDEsNjcwMDANCjE5ODYsUElULE5MLGRpYXptaTAxLDY2NTAwDQoxOTg2LFBJVCxOTCxkaXN0ZWJlMDEsNjYwMDANCjE5ODYsUElULE5MLGJlbGxpcmEwMSw2NTAwMA0KMTk4NixQSVQsTkwsa2lwcGVibzAxLDY1MDAwDQoxOTg2LFBJVCxOTCxib25kc2JhMDEsNjAwMDANCjE5ODYsUElULE5MLGpvbmVzYmEwMSw2MDAwMA0KMTk4NixTRE4sTkwsZ2FydmVzdDAxLDEyNTAwMDANCjE5ODYsU0ROLE5MLHRlbXBsZ2EwMSwxMTAzMDE4DQoxOTg2LFNETixOTCxnb3NzYXJpMDEsMTA0Njc2MQ0KMTk4NixTRE4sTkwsaG95dGxhMDEsMTAwMDAwMA0KMTk4NixTRE4sTkwsa2VubmV0ZTAyLDkyMDAwMA0KMTk4NixTRE4sTkwsbmV0dGxncjAxLDkxMjI0Nw0KMTk4NixTRE4sTkwsc2hvd2VyMDEsNjg3NTAwDQoxOTg2LFNETixOTCxzdG9kZHRpMDEsNjc1MDAwDQoxOTg2LFNETixOTCxnd3lubnRvMDEsNTQwMDAwDQoxOTg2LFNETixOTCxsZWZmZWNyMDEsMzkwMDAwDQoxOTg2LFNETixOTCxyb3lzdGplMDEsMzYyNTAwDQoxOTg2LFNETixOTCxkcmF2ZWRhMDEsMzUwMDAwDQoxOTg2LFNETixOTCxoYXdraWFuMDEsMzAwMDAwDQoxOTg2LFNETixOTCxtY3JleWtlMDEsMjc1MDAwDQoxOTg2LFNETixOTCx0aHVybW1hMDEsMjcwMDAwDQoxOTg2LFNETixOTCxtYXJ0aWNhMDEsMjQwMDAwDQoxOTg2LFNETixOTCxpb3JnZGEwMSwyMTAwMDANCjE5ODYsU0ROLE5MLHd5bm5lbWEwMSwyMDUwMDANCjE5ODYsU0ROLE5MLGZsYW5udGkwMSwxOTE2NjcNCjE5ODYsU0ROLE5MLGJvY2h5YnIwMSwxMjUwMDANCjE5ODYsU0ROLE5MLG1jY3VsbGEwMSw3MjAwMA0KMTk4NixTRE4sTkwsd2FsdGVnZTAxLDcwMDAwDQoxOTg2LFNETixOTCx3b2puYWVkMDEsNjUwMDANCjE5ODYsU0ROLE5MLGtydWtqbzAxLDYwMDAwDQoxOTg2LFNETixOTCxyb2JlcmJpMDEsNjAwMDANCjE5ODYsU0ZOLE5MLGxlb25hamUwMSw5MDAwMDANCjE5ODYsU0ZOLE5MLG1pbnRvZ3IwMSw3NjUwMDANCjE5ODYsU0ZOLE5MLGtydWtvbWkwMSw3NDUwMDANCjE5ODYsU0ZOLE5MLGRyaWVzZGEwMSw3MDAwMDANCjE5ODYsU0ZOLE5MLGRhdmlzY2gwMSw2OTAwMDANCjE5ODYsU0ZOLE5MLGJyZW5sYm8wMSw0NjAwMDANCjE5ODYsU0ZOLE5MLGhhbW1hYXQwMSw0NjAwMDANCjE5ODYsU0ZOLE5MLGJsdWV2aTAxLDQ1MDAwMA0KMTk4NixTRk4sTkwsbWFsZG9jYTAxLDQ1MDAwMA0KMTk4NixTRk4sTkwseW91bmdqbzAyLDQ1MDAwMA0KMTk4NixTRk4sTkwsZ290dGppMDEsMzc1MDAwDQoxOTg2LFNGTixOTCxkYXZpc21hMDEsMzUwMDAwDQoxOTg2LFNGTixOTCxiZXJlbmp1MDEsMzQ1MDAwDQoxOTg2LFNGTixOTCx3aWxsaWZyMDEsMjc1MDAwDQoxOTg2LFNGTixOTCxsYWNvc21pMDEsMjI1MDAwDQoxOTg2LFNGTixOTCxnYXJyZXNjMDEsMjA1MDAwDQoxOTg2LFNGTixOTCxnbGFkZGRhMDEsMTc1MDAwDQoxOTg2LFNGTixOTCxicm93bmNoMDIsMTU1MDAwDQoxOTg2LFNGTixOTCx1cmliZWpvMDEsMTMzMDAwDQoxOTg2LFNGTixOTCxyb2JpbmplMDEsMTI3NTAwDQoxOTg2LFNGTixOTCxtZWx2aWJvMDEsNzUwMDANCjE5ODYsU0ZOLE5MLG1hc29ucm8wMSw3MTUwMA0KMTk4NixTRk4sTkwscXVpbm9sdTAxLDY1MDAwDQoxOTg2LFNGTixOTCxhbGRyZW1pMDEsNjAwMDANCjE5ODYsU0ZOLE5MLGNsYXJrd2kwMiw2MDAwMA0KMTk4NixTRk4sTkwsZG93bnNrZTAxLDYwMDAwDQoxOTg2LFNGTixOTCxrdXRjaHJhMDEsNjAwMDANCjE5ODYsU0ZOLE5MLHRob21wcm8wMSw2MDAwMA0KMTk4NixTTE4sTkwsc21pdGhvejAxLDE5NDAwMDANCjE5ODYsU0xOLE5MLGNsYXJramEwMSwxMzAwMDAwDQoxOTg2LFNMTixOTCx0dWRvcmpvMDEsMTAwMDAwMA0KMTk4NixTTE4sTkwsaGVycnRvMDEsNzUwMDAwDQoxOTg2LFNMTixOTCxoZWF0aG1pMDIsNTMzMzMzDQoxOTg2LFNMTixOTCxmb3JzY2JvMDEsNTI3MjM1DQoxOTg2LFNMTixOTCxtY2dlZXdpMDEsNTAwMDAwDQoxOTg2LFNMTixOTCxsYWh0aWplMDEsNDUwMDAwDQoxOTg2LFNMTixOTCxjb3hkYTAxLDQwMDAwMA0KMTk4NixTTE4sTkwsdmFuc2xhbjAxLDMzNTAwMA0KMTk4NixTTE4sTkwsZGF5bGVrZTAxLDMwMDAwMA0KMTk4NixTTE4sTkwsaG9ydG9yaTAxLDI3NTAwMA0KMTk4NixTTE4sTkwsbGFuZHJ0aTAxLDIzNjY2Nw0KMTk4NixTTE4sTkwscGVuZGx0ZTAxLDE5MDAwMA0KMTk4NixTTE4sTkwsY29sZW12aTAxLDE1MDAwMA0KMTk4NixTTE4sTkwsaHVyZGxjbDAxLDEyMDAwMA0KMTk4NixTTE4sTkwsY29ucm90aTAxLDExMzc3NQ0KMTk4NixTTE4sTkwsbGF3bGV0bzAxLDEwMDAwMA0KMTk4NixTTE4sTkwsd2hpdGVqZTAxLDEwMDAwMA0KMTk4NixTTE4sTkwsd29ycmV0bzAxLDEwMDAwMA0KMTk4NixTTE4sTkwsb3F1ZW5qbzAxLDc5MDAwDQoxOTg2LFNMTixOTCxsYXZhbG1pMDEsNzAwMDANCjE5ODYsU0xOLE5MLHBlcnJ5cGEwMiw2NTAwMA0KMTk4NixTTE4sTkwsZm9yZGN1MDEsNjAwMDANCjE5ODYsU0xOLE5MLG1hdGhlZ3IwMSw2MDAwMA0KMTk4NixTTE4sTkwsbW9ycmlqbzA3LDYwMDAwDQoxOTg2LFNMTixOTCxzb2ZmcmEwMSw2MDAwMA0KMTk4NyxCQUwsQUwsbXVycmFlZDAyLDIwNDQ3NTcNCjE5ODcsQkFMLEFMLHJpcGtlY2EwMSwxMzUwMDAwDQoxOTg3LEJBTCxBTCxseW5uZnIwMSwxMzQwMDAwDQoxOTg3LEJBTCxBTCxrZW5uZXRlMDIsMTAyMDAwMA0KMTk4NyxCQUwsQUwsbWNncmVzYzAxLDk0MDAxNg0KMTk4NyxCQUwsQUwsYm9kZGltaTAxLDgyNTAwMA0KMTk4NyxCQUwsQUwsd2lnZ2lhbDAxLDc2MjUwMA0KMTk4NyxCQUwsQUwsYWFzZWRvMDEsNjI1MDAwDQoxOTg3LEJBTCxBTCxmbGFuYW1pMDEsNjI1MDAwDQoxOTg3LEJBTCxBTCxrbmlnaHJhMDEsNjAwMDAwDQoxOTg3LEJBTCxBTCxsYWN5bGUwMSw1MjUwMDANCjE5ODcsQkFMLEFMLHNjaG1pZGEwMSw0MzUwMDANCjE5ODcsQkFMLEFMLGJlbmlxanUwMSw0MzAwMDANCjE5ODcsQkFMLEFMLHlvdW5nbWkwMSwzNTAwMDANCjE5ODcsQkFMLEFMLGR3eWVyamkwMSwzMDc1MDANCjE5ODcsQkFMLEFMLHNoZWxiam8wMSwzMDAwMDANCjE5ODcsQkFMLEFMLHJheWZvZmwwMSwyNDgwMDANCjE5ODcsQkFMLEFMLGJ1cmxlcmkwMSwyMDAwMDANCjE5ODcsQkFMLEFMLGRpeG9ua2UwMSwxNTUwMDANCjE5ODcsQkFMLEFMLHNoZWV0bGEwMSwxNDUwMDANCjE5ODcsQkFMLEFMLG9jb25uamEwMiw4NTAwMA0KMTk4NyxCQUwsQUwsd2FzaGlybzAxLDg1MDAwDQoxOTg3LEJBTCxBTCxncmlmZm1pMDIsNjUwMDANCjE5ODcsQkFMLEFMLGFybm9sdG8wMSw2MjUwMA0KMTk4NyxCQUwsQUwsYmVsbGVyMDEsNjI1MDANCjE5ODcsQkFMLEFMLGdlcmhha2UwMSw2MjUwMA0KMTk4NyxCQUwsQUwsaGFieWFqbzAxLDYyNTAwDQoxOTg3LEJBTCxBTCxoYXJ0bWkwMiw2MjUwMA0KMTk4NyxCQUwsQUwscmlwa2ViaTAxLDYyNTAwDQoxOTg3LEJBTCxBTCx3aWxsaW1hMDUsNjI1MDANCjE5ODcsQk9TLEFMLHJpY2VqaTAxLDIxMTAwMDANCjE5ODcsQk9TLEFMLGJvZ2dzd2EwMSwxNjc1MDAwDQoxOTg3LEJPUyxBTCxzdGFubGJvMDEsMTA3NTAwMA0KMTk4NyxCT1MsQUwsZXZhbnNkdzAxLDEwNzAwMDANCjE5ODcsQk9TLEFMLGh1cnN0YnIwMSw3MDAwMDANCjE5ODcsQk9TLEFMLGNsZW1lcm8wMiw2NTAwMDANCjE5ODcsQk9TLEFMLGJhcnJlbWEwMiw1NzUwMDANCjE5ODcsQk9TLEFMLGJveWRvaTAxLDU1MDAwMA0KMTk4NyxCT1MsQUwsaGVuZGVkYTAxLDUyNTAwMA0KMTk4NyxCT1MsQUwsYnVja25iaTAxLDM2NjY2Nw0KMTk4NyxCT1MsQUwsc2FtYmlqbzAxLDM2MDAwMA0KMTk4NyxCT1MsQUwsaG9mZm1nbDAxLDMwMDAwMA0KMTk4NyxCT1MsQUwsYmVueml0bzAxLDYyNTAwDQoxOTg3LEJPUyxBTCxib2x0b3RvMDEsNjI1MDANCjE5ODcsQk9TLEFMLGJ1cmtzZWwwMSw2MjUwMA0KMTk4NyxDQUwsQUwsd2l0dG1pMDEsMTEzMzMzMw0KMTk4NyxDQUwsQUwsZGVjaW5kbzAxLDEwNTAwMDANCjE5ODcsQ0FMLEFMLG1vb3JlZG8wMSwxMDAwMDAwDQoxOTg3LENBTCxBTCxoZW5kcmdlMDEsOTg5MzMzDQoxOTg3LENBTCxBTCxkb3duaWJyMDEsOTAwMDAwDQoxOTg3LENBTCxBTCxzdXR0b2RvMDEsODkwMDAwDQoxOTg3LENBTCxBTCxib29uZWJvMDEsODgzMDAwDQoxOTg3LENBTCxBTCxkYXZpc2NoMDEsODE1MDAwDQoxOTg3LENBTCxBTCxjYW5kZWpvMDEsODAwMDAwDQoxOTg3LENBTCxBTCx3eW5lZ2J1MDEsNzMzMzMzDQoxOTg3LENBTCxBTCxsdWNhc2dhMDEsNjYyMDAwDQoxOTg3LENBTCxBTCxqYWNrc3JlMDEsNTI1MDAwDQoxOTg3LENBTCxBTCxzY2hvZmRpMDIsNDc1MDAwDQoxOTg3LENBTCxBTCxqb25lc3J1MDEsNDUwMDAwDQoxOTg3LENBTCxBTCxwZXR0aWdhMDEsNDAwMDAwDQoxOTg3LENBTCxBTCxtY2Nhc2tpMDEsMjMyMDAwDQoxOTg3LENBTCxBTCxqb3luZXdhMDEsMTgwMDAwDQoxOTg3LENBTCxBTCxob3dlbGphMDIsOTUwMDANCjE5ODcsQ0FMLEFMLG1pbGxlZGEwMSw5MTAwMA0KMTk4NyxDQUwsQUwsZmlubGVjaDAxLDc3NTAwDQoxOTg3LENBTCxBTCxmaW1wbGphMDEsNzUwMDANCjE5ODcsQ0FMLEFMLHdoaXRlZGUwMyw3MDAwMA0KMTk4NyxDQUwsQUwscG9saWRndTAxLDY3MDAwDQoxOTg3LENBTCxBTCxhcm1hc3RvMDEsNjI1MDANCjE5ODcsQ0FMLEFMLGJ1Y2tuYmkwMSw2MjUwMA0KMTk4NyxDQUwsQUwsYnVpY2VkZTAxLDYyNTAwDQoxOTg3LENBTCxBTCxmcmFzZXdpMDEsNjI1MDANCjE5ODcsQ0hBLEFMLGFsbGVubmUwMSwxMjUwMDAwDQoxOTg3LENIQSxBTCxkb3Rzb3JpMDEsMTA3NTAwMA0KMTk4NyxDSEEsQUwsYmFpbmVoYTAxLDk1MDAwMA0KMTk4NyxDSEEsQUwsYmFubmlmbDAxLDkzMDAwMA0KMTk4NyxDSEEsQUwsZmlza2NhMDEsOTAwMDAwDQoxOTg3LENIQSxBTCxtY2tlb2pvMDEsNjc1MDAwDQoxOTg3LENIQSxBTCxrYXJrb3JvMDEsNjI1MDAwDQoxOTg3LENIQSxBTCx0aGlncGJvMDEsNjI1MDAwDQoxOTg3LENIQSxBTCxoYXNzZXJvMDEsNTM0MzQzDQoxOTg3LENIQSxBTCx3YWxrZWdyMDEsNTAwMDAwDQoxOTg3LENIQSxBTCxqYW1lc2JvMDEsNDcwMDAwDQoxOTg3LENIQSxBTCxyZWR1c2dhMDEsNDAwMDAwDQoxOTg3LENIQSxBTCxoaWxsbWEwMSwyNzUwMDANCjE5ODcsQ0hBLEFMLHJveXN0amUwMSwyNjAwMDANCjE5ODcsQ0hBLEFMLGRlbGVvam8wMSwxOTUwMDANCjE5ODcsQ0hBLEFMLGh1bGV0dGkwMSwxODUwMDANCjE5ODcsQ0hBLEFMLGd1aWxsb3owMSwxNzUwMDANCjE5ODcsQ0hBLEFMLHdpbm5qaTAxLDE0MDAwMA0KMTk4NyxDSEEsQUwsc2VhcmFyYTAxLDEyNTAwMA0KMTk4NyxDSEEsQUwsY2FsZGVpdjAxLDg1MDAwDQoxOTg3LENIQSxBTCxib3N0b2RhMDEsNzUwMDANCjE5ODcsQ0hBLEFMLGRhdmlzam8wMyw2NTAwMA0KMTk4NyxDSEEsQUwsbGFwb2lkYTAxLDY1MDAwDQoxOTg3LENIQSxBTCxtYW5yaWZyMDEsNjI1MDANCjE5ODcsQ0xFLEFMLHRob3JuYW4wMSwxMTAwMDAwDQoxOTg3LENMRSxBTCxmcmFuY2p1MDEsNzc1MDAwDQoxOTg3LENMRSxBTCxidXRsZWJyMDEsNzY1MDAwDQoxOTg3LENMRSxBTCxiZXJuYXRvMDEsNjMwMDAwDQoxOTg3LENMRSxBTCxqYWNvYmJyMDEsNjEyNTAwDQoxOTg3LENMRSxBTCx0YWJsZXBhMDEsNjA1MDAwDQoxOTg3LENMRSxBTCxoYWxsbWUwMSw1NTAwMDANCjE5ODcsQ0xFLEFMLHNjaHJva2UwMSw0NTAwMDANCjE5ODcsQ0xFLEFMLGRlbXBzcmkwMSw0MDAwMDANCjE5ODcsQ0xFLEFMLGVhc3RlamEwMSwzNzAwMDANCjE5ODcsQ0xFLEFMLGJhbmRvY2gwMSwzMDUwMDANCjE5ODcsQ0xFLEFMLHZhbmRlZWQwMSwzMDAwMDANCjE5ODcsQ0xFLEFMLGNhcnRlam8wMSwyNTAwMDANCjE5ODcsQ0xFLEFMLGNhc3RpY2EwMSwyNDc1MDANCjE5ODcsQ0xFLEFMLHN0ZXdhc2EwMSwxNzUwMDANCjE5ODcsQ0xFLEFMLGNhbmRpdG8wMSwxNjAwMDANCjE5ODcsQ0xFLEFMLHNueWRlY28wMiw5MDAwMA0KMTk4NyxDTEUsQUwsYmFpbGVzYzAxLDgwMDAwDQoxOTg3LENMRSxBTCxhbGxhbmFuMDEsNzUwMDANCjE5ODcsQ0xFLEFMLHN3aW5kZ3IwMSw2ODc1MA0KMTk4NyxDTEUsQUwseWV0dHJpMDEsNjc1MDANCjE5ODcsQ0xFLEFMLGFrZXJmZGEwMSw2MjUwMA0KMTk4NyxDTEUsQUwsZmFycmVqbzAzLDYyNTAwDQoxOTg3LENMRSxBTCxoaW56b3RvMDEsNjI1MDANCjE5ODcsQ0xFLEFMLGpvbmVzZG8wMSw2MjUwMA0KMTk4NyxDTEUsQUwsbm9ib2FqdTAxLDYyNTAwDQoxOTg3LENMRSxBTCxyaXR0ZXJlMDEsNjI1MDANCjE5ODcsQ0xFLEFMLHdpbGxpZWQwMSw2MjUwMA0KMTk4NyxERVQsQUwsbW9ycmlqYTAyLDE4NTAwMDANCjE5ODcsREVULEFMLGdpYnNva2kwMSwxMzM1MDAwDQoxOTg3LERFVCxBTCxoZXJuYXdpMDEsMTA2MDAwMA0KMTk4NyxERVQsQUwscGV0cnlkYTAxLDk3NTAwMA0KMTk4NyxERVQsQUwsbGVtb25jaDAxLDY5ODU3MQ0KMTk4NyxERVQsQUwsdGFuYW5mcjAxLDY2MjUwMA0KMTk4NyxERVQsQUwsaGVhdGhtaTAyLDY1MDAwMA0KMTk4NyxERVQsQUwsdHJhbW1hbDAxLDYxNzE0Mw0KMTk4NyxERVQsQUwsdGVycmV3YTAxLDYwMDAwMA0KMTk4NyxERVQsQUwsZXZhbnNkYTAxLDUyNTAwMA0KMTk4NyxERVQsQUwsaGFycGV0ZTAxLDQyNTAwMA0KMTk4NyxERVQsQUwsd2hpdGFsbzAxLDQyMDAwMA0KMTk4NyxERVQsQUwsdGh1cm1tYTAxLDM3MDAwMA0KMTk4NyxERVQsQUwsZ3J1YmJqbzAxLDM2NTAwMA0KMTk4NyxERVQsQUwsYnJvb2t0bzAxLDM2MDAwMA0KMTk4NyxERVQsQUwsYmVyZ21kYTAxLDMzMTY2Nw0KMTk4NyxERVQsQUwsaGVybmRsYTAxLDIyNTAwMA0KMTk4NyxERVQsQUwsc2hlcmlwYTAxLDE5MDAwMA0KMTk4NyxERVQsQUwsY29sZXNkYTAxLDE3MDAwMA0KMTk4NyxERVQsQUwsa2luZ2VyMDEsMTAwMDAwDQoxOTg3LERFVCxBTCxub2tlc21hMDEsNjgwMDANCjE5ODcsREVULEFMLGhlbm5lbWkwMSw2MjUwMA0KMTk4NyxERVQsQUwscm9iaW5qZTAyLDYyNTAwDQoxOTg3LEtDQSxBTCxicmV0dGdlMDEsMjA1NTAwMA0KMTk4NyxLQ0EsQUwsd2lsc293aTAyLDEzODk3MDYNCjE5ODcsS0NBLEFMLHF1aXNlZGEwMSwxMjYyMzUwDQoxOTg3LEtDQSxBTCx3aGl0ZWZyMDEsODc1MDAwDQoxOTg3LEtDQSxBTCxsZWlicmNoMDEsODUwMDAwDQoxOTg3LEtDQSxBTCxzYWJlcmJyMDEsNzQwMDAwDQoxOTg3LEtDQSxBTCxiYWxib3N0MDEsNjI1MDAwDQoxOTg3LEtDQSxBTCxibGFja2J1MDIsNjAwMDAwDQoxOTg3LEtDQSxBTCxzbWl0aGxvMDEsNTAwMDAwDQoxOTg3LEtDQSxBTCxib3NsZXRoMDEsNDU3NTAwDQoxOTg3LEtDQSxBTCxndWJpY21hMDEsNDUwMDAwDQoxOTg3LEtDQSxBTCxqYWNrc2JvMDEsMzMwMDAwDQoxOTg3LEtDQSxBTCxsYXdydTAxLDMwMDAwMA0KMTk4NyxLQ0EsQUwsamFja3NkYTAyLDIyNTAwMA0KMTk4NyxLQ0EsQUwscXVpcmtqYTAxLDIwMDAwMA0KMTk4NyxLQ0EsQUwsdGFydGFkYTAxLDE0NTAwMA0KMTk4NyxLQ0EsQUwsb3dlbmxhMDEsMTAwMDAwDQoxOTg3LEtDQSxBTCxzYWxhemFuMDEsMTAwMDAwDQoxOTg3LEtDQSxBTCxnbGVhdGplMDEsOTUwMDANCjE5ODcsS0NBLEFMLGhlYXJuZWQwMiw3NjAwMA0KMTk4NyxLQ0EsQUwsZWlzZW5qaTAxLDcyNTAwDQoxOTg3LEtDQSxBTCxqb25lc3JvMDEsNjUwMDANCjE5ODcsS0NBLEFMLHN0b2RkYm8wMSw2NTAwMA0KMTk4NyxLQ0EsQUwsZGF2aXNqbzA0LDYyNTAwDQoxOTg3LEtDQSxBTCxwZWNvdGJpMDEsNjI1MDANCjE5ODcsS0NBLEFMLHNlaXR6a2UwMSw2MjUwMA0KMTk4NyxLQ0EsQUwsdGh1cm1nYTAxLDYyNTAwDQoxOTg3LE1JTixBTCxocmJla2tlMDEsMTMxMDAwMA0KMTk4NyxNSU4sQUwsYmx5bGViZTAxLDExNTAwMDANCjE5ODcsTUlOLEFMLGdhZXR0Z2EwMSw5NTAwMDANCjE5ODcsTUlOLEFMLGJydW5hdG8wMSw5NDAwMDANCjE5ODcsTUlOLEFMLHZpb2xhZnIwMSw4MzAwMDANCjE5ODcsTUlOLEFMLHB1Y2tla2kwMSw0NjUwMDANCjE5ODcsTUlOLEFMLGF0aGVya2UwMSwzMDAwMDANCjE5ODcsTUlOLEFMLGJ1c2hyYTAxLDMwMDAwMA0KMTk4NyxNSU4sQUwsYmVyZW5qdTAxLDE1MjUwMA0KMTk4NyxNTDQsQUwsbW9saXRwYTAxLDEyNjAwMDANCjE5ODcsTUw0LEFMLHlvdW50cm8wMSwxMTUwMDAwDQoxOTg3LE1MNCxBTCxjbGVhcm1hMDEsNjg1MDAwDQoxOTg3LE1MNCxBTCxtYW5uaXJpMDEsNTYwMDAwDQoxOTg3LE1MNCxBTCxjb29wZWNlMDEsNDkzMjI0DQoxOTg3LE1MNCxBTCxicm9ja2dyMDEsNDA1MDAwDQoxOTg3LE1MNCxBTCxnYW50bmppMDEsMzc1MDAwDQoxOTg3LE1MNCxBTCxoaWd1ZXRlMDEsMzM1MDAwDQoxOTg3LE1MNCxBTCxkZWVycm8wMSwyMjUwMDANCjE5ODcsTUw0LEFMLHNjaHJvYmkwMSwxODUwMDANCjE5ODcsTUw0LEFMLHBsZXNhZGEwMSwxODAwMDANCjE5ODcsTUw0LEFMLHJpbGVzZXIwMSwxNjAwMDANCjE5ODcsTUw0LEFMLG5pZXZlanUwMSwxMTUwMDANCjE5ODcsTUw0LEFMLGJ1cnJpcmEwMSwxMDAwMDANCjE5ODcsTUw0LEFMLG1jY2x1Ym8wMSwxMDAwMDANCjE5ODcsTUw0LEFMLHdlZ21hYmkwMSw5NTAwMA0KMTk4NyxNTDQsQUwsc3ZldW1kYTAxLDkyNTAwDQoxOTg3LE1MNCxBTCxjYXN0aWp1MDEsOTAwMDANCjE5ODcsTUw0LEFMLGJyYWdnZ2wwMSw4MDAwMA0KMTk4NyxNTDQsQUwsZmVsZGVtaTAxLDc1MDAwDQoxOTg3LE1MNCxBTCxiYXJrZWxlMDEsNzI1MDANCjE5ODcsTUw0LEFMLGFkZHVjamkwMSw3MDAwMA0KMTk4NyxNTDQsQUwsYmlya2JtaTAxLDcwMDAwDQoxOTg3LE1MNCxBTCxrbnVkc21hMDEsNzAwMDANCjE5ODcsTUw0LEFMLGFsZHJpamEwMSw2MjUwMA0KMTk4NyxNTDQsQUwsYm9zaW9jaDAxLDYyNTAwDQoxOTg3LE1MNCxBTCxjcmltY2gwMSw2MjUwMA0KMTk4NyxNTDQsQUwsc3VyaG9iajAxLDYyNTAwDQoxOTg3LE5ZQSxBTCxtYXR0aWRvMDEsMTk3NTAwMA0KMTk4NyxOWUEsQUwsd2luZmlkYTAxLDE5MTE3MTQNCjE5ODcsTllBLEFMLGhlbmRlcmkwMSwxNjcwMDAwDQoxOTg3LE5ZQSxBTCxrZW1wc3QwMSwxMzIwMDAwDQoxOTg3LE5ZQSxBTCxyYW5kb3dpMDEsOTAwMDAwDQoxOTg3LE5ZQSxBTCxndWlkcnJvMDEsODUwMDAwDQoxOTg3LE5ZQSxBTCxyaWdoZWRhMDEsODAwMDAwDQoxOTg3LE5ZQSxBTCxzdG9kZHRpMDEsNzc1MDAwDQoxOTg3LE5ZQSxBTCxiZXJyYWRhMDEsNjU3NTAwDQoxOTg3LE5ZQSxBTCx3YXJkZ2EwMSw2MzMwMDANCjE5ODcsTllBLEFMLHJob2RlcmkwMSw2MDAwMDANCjE5ODcsTllBLEFMLHdhc2hpY2wwMSw0ODAwMDANCjE5ODcsTllBLEFMLGtpdHRscm8wMSw0MjUwMDANCjE5ODcsTllBLEFMLGd1YW50Y2UwMSw0MDUwMDANCjE5ODcsTllBLEFMLGhvbGxhYWwwMSw0MDAwMDANCjE5ODcsTllBLEFMLHRvbGxld2EwMSwzODUwMDANCjE5ODcsTllBLEFMLGpvaG50bzAxLDM1MDAwMA0KMTk4NyxOWUEsQUwsc2N1cnJybzAxLDM0MDAwMA0KMTk4NyxOWUEsQUwsaHVkc29jaDAyLDMwNTAwMA0KMTk4NyxOWUEsQUwsY2Vyb25yaTAxLDI1MDAwMA0KMTk4NyxOWUEsQUwsZmlsc29wZTAxLDE4MDAwMA0KMTk4NyxOWUEsQUwscGFnbGltaTAxLDE3NTAwMA0KMTk4NyxOWUEsQUwscmFzbXVkZTAxLDE3NTAwMA0KMTk4NyxOWUEsQUwsc2FsYXNtYTAxLDEzNzAwMA0KMTk4NyxOWUEsQUwsY2xlbWVwYTAxLDEyNTAwMA0KMTk4NyxOWUEsQUwsc2FrYXRsZTAxLDEyNTAwMA0KMTk4NyxOWUEsQUwscGFzcXVkYTAxLDExMDAwMA0KMTk4NyxOWUEsQUwsc2tpbm5qbzAxLDExMDAwMA0KMTk4NyxOWUEsQUwsbWVhY2hibzAxLDEwNTAwMA0KMTk4NyxOWUEsQUwsZHJhYmVkbzAxLDg1MDAwDQoxOTg3LE5ZQSxBTCx0ZXdrc2JvMDEsODUwMDANCjE5ODcsTllBLEFMLGFybnNiYnIwMSw2ODAwMA0KMTk4NyxOWUEsQUwsaHVnaGVrZTAxLDYyNTAwDQoxOTg3LE5ZQSxBTCxwZWRyaWFsMDEsNjI1MDANCjE5ODcsTllBLEFMLHZlbGFycmEwMSw2MjUwMA0KMTk4NyxPQUssQUwsY2F1ZGliaTAxLDE2MzMzMzMNCjE5ODcsT0FLLEFMLGFuZHVqam8wMSwxMzUzMzMzDQoxOTg3LE9BSyxBTCxsYW5zZmNhMDEsMTMwMDAwMA0KMTk4NyxPQUssQUwsZWNrZXJkZTAxLDgzMzMzMw0KMTk4NyxPQUssQUwsZGF2aXNtaTAyLDc4MDAwMA0KMTk4NyxPQUssQUwsbXVycGhkdzAxLDc1OTAwMA0KMTk4NyxPQUssQUwsYmF5bG9kbzAxLDczMTEyMw0KMTk4NyxPQUssQUwsZ3JpZmZhbDAxLDYwNzY1Mw0KMTk4NyxPQUssQUwsaGFhc21vMDEsNTc4ODg5DQoxOTg3LE9BSyxBTCxzdGV3YWRhMDEsNTUwMDAwDQoxOTg3LE9BSyxBTCxob3dlbGphMDEsNTMwMDAwDQoxOTg3LE9BSyxBTCxwaGlsbHRvMDIsNDI1MDAwDQoxOTg3LE9BSyxBTCxuZWxzb2dlMDEsMzY1MDAwDQoxOTg3LE9BSyxBTCxjYW5zZWpvMDEsMTgwMDAwDQoxOTg3LE9BSyxBTCx5b3VuZ2N1MDEsMTcxODc1DQoxOTg3LE9BSyxBTCxvbnRpdnN0MDIsMTMxNTAwDQoxOTg3LE9BSyxBTCx0ZXR0bG1pMDEsMTIwMDAwDQoxOTg3LE9BSyxBTCxwbHVua2VyMDEsNzc2NjcNCjE5ODcsT0FLLEFMLGhlbmRlc3QwMSw3NTAwMA0KMTk4NyxPQUssQUwsamF2aWVzdDAxLDc1MDAwDQoxOTg3LE9BSyxBTCxsZWlwZWRhMDEsNzMxMzMNCjE5ODcsT0FLLEFMLG1jZ3dpbWEwMSw3MjUwMA0KMTk4NyxPQUssQUwsaGFycGVicjAxLDcwMDAwDQoxOTg3LE9BSyxBTCxjYWRhcmdyMDEsNjI1MDANCjE5ODcsT0FLLEFMLHBvbG9ubHUwMSw2MjUwMA0KMTk4NyxPQUssQUwsc3RlaW50ZTAxLDYyNTAwDQoxOTg3LFNFQSxBTCxicmFkbHBoMDEsNzUwMDAwDQoxOTg3LFNFQSxBTCxtb29yZW1pMDEsNTM2MDAwDQoxOTg3LFNFQSxBTCxwaGVscGtlMDEsMzAwMDAwDQoxOTg3LFNFQSxBTCx6aXNrcmkwMSwyNzI1MDANCjE5ODcsU0VBLEFMLGJyYWRsc2MwMSwxMTAwMDANCjE5ODcsU0VBLEFMLHJhbW9zZG8wMSw4MDAwMA0KMTk4NyxTRUEsQUwsYnJhbnRtaTAxLDc3NTAwDQoxOTg3LFNFQSxBTCxiYW5raHNjMDEsNzUwMDANCjE5ODcsU0VBLEFMLG51bmV6am8wMSw2MjUwMA0KMTk4NyxURVgsQUwsaGFycmlncjAxLDYyMDAwMA0KMTk4NyxURVgsQUwsYnVlY2hzdDAxLDEzNTAwMA0KMTk4NyxURVgsQUwsYnJvd2VibzAxLDYyNTAwDQoxOTg3LFRFWCxBTCxicm93bmplMDEsNjI1MDANCjE5ODcsVE9SLEFMLGJhcmZpamUwMSwxNTI1MDAwDQoxOTg3LFRPUixBTCxiZWxsZ2UwMiwxMTc1MDAwDQoxOTg3LFRPUixBTCxzdGllYmRhMDEsMTAwMDAwMA0KMTk4NyxUT1IsQUwsdXBzaGF3aTAxLDk0MDAwMA0KMTk4NyxUT1IsQUwsY2xhbmNqaTAxLDg1MDAwMA0KMTk4NyxUT1IsQUwsbW9zZWJsbDAxLDgwNzUwMA0KMTk4NyxUT1IsQUwsd2hpdHRlcjAxLDc1MDAwMA0KMTk4NyxUT1IsQUwsa2V5amkwMSw1NTQzOTENCjE5ODcsVE9SLEFMLG11bGxpcmEwMSw0NzUwMDANCjE5ODcsVE9SLEFMLGZlcm5hdG8wMSw0MDAwMDANCjE5ODcsVE9SLEFMLGlvcmdnYTAxLDM4MDAwMA0KMTk4NyxUT1IsQUwsaGVua2V0bzAxLDMzMTAwMA0KMTk4NyxUT1IsQUwsbGVhY2hyaTAxLDI1OTExMA0KMTk4NyxUT1IsQUwsbW9vcmVjaDAyLDI1NjAwMA0KMTk4NyxUT1IsQUwsZWljaGhtYTAxLDE2NTUwMA0KMTk4NyxUT1IsQUwsY2VydXRqbzAxLDExNTAwMA0KMTk4NyxUT1IsQUwsZ3J1YmVrZTAxLDk2MDAwDQoxOTg3LFRPUixBTCxmaWVsZGNlMDEsNzg1MDANCjE5ODcsVE9SLEFMLGdvcmRvZG8wMSw3MTUwMA0KMTk4NyxUT1IsQUwsbGF2ZWxnYTAxLDYyNTAwDQoxOTg3LFRPUixBTCxsaXJpYW5lMDEsNjI1MDANCjE5ODcsVE9SLEFMLG1jZ3JpZnIwMSw2MjUwMA0KMTk4NyxUT1IsQUwsbXVzc2VqZTAxLDYyNTAwDQoxOTg3LEFUTCxOTCxtdXJwaGRhMDUsMTkyNTAwMA0KMTk4NyxBVEwsTkwsc3V0dGVicjAxLDE3MjkxNjcNCjE5ODcsQVRMLE5MLGdyaWZma2UwMSwxMTUwMDAwDQoxOTg3LEFUTCxOTCxiYXJrZWxlMDEsODkwMDAwDQoxOTg3LEFUTCxOTCxyYW1pcnJhMDEsODc1MDAwDQoxOTg3LEFUTCxOTCxnYXJiZWdlMDEsNzg2NjY3DQoxOTg3LEFUTCxOTCx2aXJnaW96MDIsNzYwMDAwDQoxOTg3LEFUTCxOTCxvYmVya2tlMDEsNzI1MDAwDQoxOTg3LEFUTCxOTCxwYWxtZWRhMDEsNzI1MDAwDQoxOTg3LEFUTCxOTCxtYWhsZXJpMDEsNjk1MDAwDQoxOTg3LEFUTCxOTCxhbGV4YWRvMDEsNjUwMDAwDQoxOTg3LEFUTCxOTCxnYXJjaWRhMDEsNjQ2NzI2DQoxOTg3LEFUTCxOTCxib2V2ZWpvMDEsNjI1MDAwDQoxOTg3LEFUTCxOTCxiZW5lZGJyMDEsNjE1MDAwDQoxOTg3LEFUTCxOTCxodWJiYWdsMDEsNTU1MDAwDQoxOTg3LEFUTCxOTCxzaW1tb3RlMDEsNTAwMDAwDQoxOTg3LEFUTCxOTCxyb2VuaWdhMDEsMzgwMDAwDQoxOTg3LEFUTCxOTCxhY2tlcmppMDEsMzUwMDAwDQoxOTg3LEFUTCxOTCxkZWRtb2plMDEsMzAwMDAwDQoxOTg3LEFUTCxOTCxzbWl0aHphMDEsMjUwMDAwDQoxOTg3LEFUTCxOTCxuZXR0bGdyMDEsMjE5NTAwDQoxOTg3LEFUTCxOTCxtb3RsZWRhMDEsMjEwMDAwDQoxOTg3LEFUTCxOTCxoYWxsYWwwMiwxNTAwMDANCjE5ODcsQVRMLE5MLHBlcnJ5Z2UwMSwxNTAwMDANCjE5ODcsQVRMLE5MLGphbWVzZGkwMSwxMjAwMDANCjE5ODcsQVRMLE5MLHB1bGVvY2gwMSwxMTc1MDANCjE5ODcsQVRMLE5MLHJ1bmdlcGEwMSw5NTAwMA0KMTk4NyxBVEwsTkwsYXNzZW5wYTAxLDgwMDAwDQoxOTg3LEFUTCxOTCx0aG9tYWFuMDEsNzUwMDANCjE5ODcsQVRMLE5MLG9sd2luZWQwMSw3MDAwMA0KMTk4NyxBVEwsTkwsYmxhdXNqZTAxLDYyNTAwDQoxOTg3LEFUTCxOTCxnbGF2aXRvMDIsNjI1MDANCjE5ODcsQ0hOLE5MLHN1dGNscmkwMSwxODAwMDAwDQoxOTg3LENITixOTCxkdXJoYWxlMDEsMTE4MzMzMw0KMTk4NyxDSE4sTkwsY2V5cm8wMSwxMDUwMDAwDQoxOTg3LENITixOTCxtb3JlbGtlMDEsMTA0MzMzMw0KMTk4NyxDSE4sTkwsZGF2aXNqbzAyLDEwMDgzMzMNCjE5ODcsQ0hOLE5MLHRyb3V0c3QwMSw4OTAwMDANCjE5ODcsQ0hOLE5MLHNhbmRlc2MwMSw4NTAwMDANCjE5ODcsQ0hOLE5MLHNtaXRobGUwMiw4NDAwMDANCjE5ODcsQ0hOLE5MLHN1bmRiamkwMSw3OTE2NjcNCjE5ODcsQ0hOLE5MLHNhbmRicnkwMSw3NjAwMDANCjE5ODcsQ0hOLE5MLG11bXBoamUwMSw3NTAwMDANCjE5ODcsQ0hOLE5MLGRlcm5pYm8wMSw3MDgzMzMNCjE5ODcsQ0hOLE5MLGRhd3NvYW4wMSw3MDAwMDANCjE5ODcsQ0hOLE5MLGx5bmNoZWQwMSw1NTAwMDANCjE5ODcsQ0hOLE5MLGRpcGluZnIwMSwzMDAwMDANCjE5ODcsQ0hOLE5MLHRyaWxsbWEwMSwyOTAwMDANCjE5ODcsQ0hOLE5MLGR1bnN0c2gwMSwxNTUwMDANCjE5ODcsQ0hOLE5MLGRheWV0YnIwMSwxMDAwMDANCjE5ODcsQ0hOLE5MLGJhbGxlamEwMSw3NTAwMA0KMTk4NyxDSE4sTkwsbm9sZXNkaTAxLDc1MDAwDQoxOTg3LENITixOTCxtb3llcmphMDEsNzAwMDANCjE5ODcsQ0hOLE5MLHF1aW5vbHUwMSw2ODAwMA0KMTk4NyxDSE4sTkwsaGFsbGRyMDEsNjI1MDANCjE5ODcsQ0hOLE5MLGxhbmNhbGUwMSw2MjUwMA0KMTk4NyxDSE4sTkwsbWFydGlkYTAxLDYyNTAwDQoxOTg3LENITixOTCxwYWxtZXJhMDEsNjI1MDANCjE5ODcsQ0lOLE5MLHNvdG9tYTAxLDEyMDAwMDANCjE5ODcsQ0lOLE5MLHBhcmtlZGEwMSwxMTAwMDAwDQoxOTg3LENJTixOTCxndWxsaWJpMDEsOTAwMDAwDQoxOTg3LENJTixOTCxiZWxsYnUwMSw4NzAwMDANCjE5ODcsQ0lOLE5MLGRpYXpibzAxLDgyNTAwMA0KMTk4NyxDSU4sTkwsb2VzdGVybzAxLDc1MDAwMA0KMTk4NyxDSU4sTkwscG93ZXJ0ZTAxLDUwMDAwMA0KMTk4NyxDSU4sTkwsZGF2aXNlcjAxLDMzMDAwMA0KMTk4NyxDSU4sTkwsY29uY2VkYTAxLDMyMDAwMA0KMTk4NyxDSU4sTkwsZXNhc2tuaTAxLDMwNTAwMA0KMTk4NyxDSU4sTkwsZnJhbmNqbzAxLDMwMDAwMA0KMTk4NyxDSU4sTkwsd2lsbGlmcjAxLDMwMDAwMA0KMTk4NyxDSU4sTkwsYnJvd250bzA1LDI4NzUwMA0KMTk4NyxDSU4sTkwsZnJhbmN0ZTAxLDIyNTAwMA0KMTk4NyxDSU4sTkwscm9iaW5ybzAxLDE4NTAwMA0KMTk4NyxDSU4sTkwsY29sbGlkYTAyLDEwMDAwMA0KMTk4NyxDSU4sTkwsaHVtZXRvMDEsMTAwMDAwDQoxOTg3LENJTixOTCxtdXJwaHJvMDEsOTUwMDANCjE5ODcsQ0lOLE5MLGRhbmlla2EwMSw4NjUwMA0KMTk4NyxDSU4sTkwsam9uZXN0cjAxLDgwMDAwDQoxOTg3LENJTixOTCxzdGlsbGt1MDEsODAwMDANCjE5ODcsQ0lOLE5MLGxhcmtpYmEwMSw3NzUwMA0KMTk4NyxDSU4sTkwsaG9mZm1ndTAxLDc1MDAwDQoxOTg3LENJTixOTCxvbmVpbHBhMDEsNjUwMDANCjE5ODcsQ0lOLE5MLGJ1dGVyc2EwMSw2MjUwMA0KMTk4NyxDSU4sTkwsbWNncml0ZTAxLDYyNTAwDQoxOTg3LEhPVSxOTCxyeWFubm8wMSwxMjI1MDAwDQoxOTg3LEhPVSxOTCxrbmVwcGJvMDEsMTAwMDAwMA0KMTk4NyxIT1UsTkwscHVobHRlMDEsOTAwMDAwDQoxOTg3LEhPVSxOTCxjcnV6am8wMSw3NTUwMDANCjE5ODcsSE9VLE5MLGRhcndpZGEwMSw3NDAwMDANCjE5ODcsSE9VLE5MLG1vcmVub20wMSw3MDAwMDANCjE5ODcsSE9VLE5MLHNtaXRoZGEwMiw3MDAwMDANCjE5ODcsSE9VLE5MLHNjb3R0bWkwMyw2OTE2NjcNCjE5ODcsSE9VLE5MLHRob25kaTAxLDY3NTAwMA0KMTk4NyxIT1UsTkwsYmFzc2tlMDEsNjMwMDAwDQoxOTg3LEhPVSxOTCxkb3JhbmJpMDIsNjI1MDAwDQoxOTg3LEhPVSxOTCx3YWxsaWRlMDEsNTk1MDAwDQoxOTg3LEhPVSxOTCxhc2hieWFsMDEsNTc1MDAwDQoxOTg3LEhPVSxOTCxsb3Blc2RhMDEsNTUwMDAwDQoxOTg3LEhPVSxOTCxnYXJuZXBoMDEsNDUwMDAwDQoxOTg3LEhPVSxOTCxyZXlub2NyMDEsNDE2NjY3DQoxOTg3LEhPVSxOTCxhbmRlcmxhMDIsMzAwMDAwDQoxOTg3LEhPVSxOTCxkYXZpc2dsMDEsMjE1MDAwDQoxOTg3LEhPVSxOTCxrZXJmZWNoMDEsMTEwMDM3DQoxOTg3LEhPVSxOTCxkZXNoYWppMDEsMTEwMDAwDQoxOTg3LEhPVSxOTCxoYXRjaGJpMDEsMTEwMDAwDQoxOTg3LEhPVSxOTCxhZ29zdGp1MDEsMTAwMDAwDQoxOTg3LEhPVSxOTCxwYW5rb2ppMDEsMTAwMDAwDQoxOTg3LEhPVSxOTCxyZXlub3JvMDIsODAwMDANCjE5ODcsSE9VLE5MLGhlYXRoamUwMiw2NzUwMA0KMTk4NyxIT1UsTkwsYmVycmFkYTAxLDYyNTAwDQoxOTg3LEhPVSxOTCxjYW1pbmtlMDEsNjI1MDANCjE5ODcsSE9VLE5MLHlvdW5nZ2UwMiw2MjUwMA0KMTk4NyxMQU4sTkwsdmFsZW5mZTAxLDE4NTAwMDANCjE5ODcsTEFOLE5MLGd1ZXJycGUwMSwxNTIwMDAwDQoxOTg3LExBTixOTCxyZXVzc2plMDEsMTEwMDAwMA0KMTk4NyxMQU4sTkwsc2Npb3NtaTAxLDg3NTAwMA0KMTk4NyxMQU4sTkwsbWFkbG9iaTAxLDg1MDAwMA0KMTk4NyxMQU4sTkwsd2VsY2hibzAxLDgzNzUwMA0KMTk4NyxMQU4sTkwsaG9uZXlyaTAxLDgwNTAwMA0KMTk4NyxMQU4sTkwsaGVyc2hvcjAxLDgwMDAwMA0KMTk4NyxMQU4sTkwsbGFuZHJrZTAxLDczNzUwMA0KMTk4NyxMQU4sTkwsbmllZGV0bzAxLDczMTI1MA0KMTk4NyxMQU4sTkwsbWFyc2htaTAyLDY3MDAwMA0KMTk4NyxMQU4sTkwsdHJldmlhbDAxLDM3MDE1Mw0KMTk4NyxMQU4sTkwseW91bmdtYTAxLDM1MDAwMA0KMTk4NyxMQU4sTkwsaGVlcGRhMDEsMzAwMDAwDQoxOTg3LExBTixOTCxwZW5hYWwwMSwyODAwMDANCjE5ODcsTEFOLE5MLG1hdHVzbGUwMSwyNjUwMDANCjE5ODcsTEFOLE5MLGFuZGVyZGEwMiwyMjUwMDANCjE5ODcsTEFOLE5MLGxlYXJ5dGkwMSwxNzAwMDANCjE5ODcsTEFOLE5MLGhhdmVuYnIwMSwxNjUwMDANCjE5ODcsTEFOLE5MLGR1bmNhbWEwMSwxNTAwMDANCjE5ODcsTEFOLE5MLHN0dWJiZnIwMSwxNDQwMDANCjE5ODcsTEFOLE5MLHdlbGxtYnIwMSwxMDAwMDANCjE5ODcsTEFOLE5MLGhhbWlsamUwMSw2NTAwMA0KMTk4NyxMQU4sTkwsaG9sdG9icjAxLDY1MDAwDQoxOTg3LExBTixOTCxoYXRjaG1pMDEsNjI1MDANCjE5ODcsTEFOLE5MLGhpbGxlc2gwMSw2MjUwMA0KMTk4NyxMQU4sTkwsc2hpcGxjcjAxLDYyNTAwDQoxOTg3LExBTixOTCx3b29kc3RyMDEsNjI1MDANCjE5ODcsTU9OLE5MLHJhaW5ldGkwMSwxNjY2MzMzDQoxOTg3LE1PTixOTCxicm9va2h1MDEsNzY1MDAwDQoxOTg3LE1PTixOTCx3YWxsYXRpMDEsNzY1MDAwDQoxOTg3LE1PTixOTCxsYXd2YTAxLDUyNTAwMA0KMTk4NyxNT04sTkwsc21pdGhicjAxLDQ2NjcxOQ0KMTk4NyxNT04sTkwsaGVhdG9uZTAxLDQwMDAwMA0KMTk4NyxNT04sTkwsbWNnYWZhbjAxLDI5MjUwMA0KMTk4NyxNT04sTkwsZm9sZXl0bzAyLDI1MDAwMA0KMTk4NyxNT04sTkwsYnVya2V0aTAxLDIxMDAwMA0KMTk4NyxNT04sTkwsZml0emdtaTAyLDIxMDAwMA0KMTk4NyxNT04sTkwsd2Vic3RtaTAxLDIxMDAwMA0KMTk4NyxNT04sTkwsbWFydGlkZTAxLDE2MjUwMA0KMTk4NyxNT04sTkwsaGVza2VqbzAxLDE1MDAwMA0KMTk4NyxNT04sTkwsZW5nbGVkYTAxLDE0NTAwMA0KMTk4NyxNT04sTkwseW91bWFmbDAxLDkxNTAwDQoxOTg3LE1PTixOTCxnYWxhcmFuMDEsOTAwMDANCjE5ODcsTU9OLE5MLHdpbm5paGUwMSw4MjUwMA0KMTk4NyxNT04sTkwscGVyZXpwYTAxLDc1MDAwDQoxOTg3LE1PTixOTCxyZWVkamUwMiw3MjUwMA0KMTk4NyxNT04sTkwsY2FuZGFjYTAxLDYyNTAwDQoxOTg3LE1PTixOTCxqb2huc3dhMDMsNjI1MDANCjE5ODcsTU9OLE5MLG5pY2hvcmUwMSw2MjUwMA0KMTk4NyxNT04sTkwscGFycmVqZTAxLDYyNTAwDQoxOTg3LE1PTixOTCxzZWJyYWJvMDEsNjI1MDANCjE5ODcsTllOLE5MLGNhcnRlZ2EwMSwyMDYwNzE0DQoxOTg3LE5ZTixOTCxoZXJuYWtlMDEsMTgwMDAwMA0KMTk4NyxOWU4sTkwsZ29vZGVkdzAxLDE1MDAwMDANCjE5ODcsTllOLE5MLHN0cmF3ZGEwMSwxMjQ1MDAwDQoxOTg3LE5ZTixOTCxkYXJsaXJvMDEsMTA1MDAwMA0KMTk4NyxOWU4sTkwsb3Jvc2NqZTAxLDkyNTAwMA0KMTk4NyxOWU4sTkwsd2lsc29tbzAxLDgwMDAwMA0KMTk4NyxOWU4sTkwsb2plZGFibzAxLDY1MDAwMA0KMTk4NyxOWU4sTkwsbWNyZXlrZTAxLDYyNTAwMA0KMTk4NyxOWU4sTkwsYmFja213YTAxLDU1MDAwMA0KMTk4NyxOWU4sTkwsc2lza2RvMDEsMzMwMDAwDQoxOTg3LE5ZTixOTCxmZXJuYXNpMDEsMzA4MDAwDQoxOTg3LE5ZTixOTCxtY2Rvd3JvMDEsMzA1MDAwDQoxOTg3LE5ZTixOTCxqb2huc2hvMDEsMjk3NTAwDQoxOTg3LE5ZTixOTCx0ZXVmZXRpMDEsMjc3NTAwDQoxOTg3LE5ZTixOTCxzYW50YXJhMDEsMjUwMDAwDQoxOTg3LE5ZTixOTCxkeWtzdGxlMDEsMjAyNTAwDQoxOTg3LE5ZTixOTCxhZ3VpbHJpMDEsMTk1MDAwDQoxOTg3LE5ZTixOTCxsZWFjaHRlMDEsOTUwMDANCjE5ODcsTllOLE5MLG15ZXJzcmEwMSw2ODAwMA0KMTk4NyxOWU4sTkwsY29uZWRhMDEsNjI1MDANCjE5ODcsTllOLE5MLGx5b25zYmEwMSw2MjUwMA0KMTk4NyxOWU4sTkwsbWFnYWRkYTAxLDYyNTAwDQoxOTg3LE5ZTixOTCxtYXp6aWxlMDEsNjI1MDANCjE5ODcsTllOLE5MLG1pbGxla2UwMSw2MjUwMA0KMTk4NyxQSEksTkwsc2NobWltaTAxLDIxMjczMzMNCjE5ODcsUEhJLE5MLGhheWVzdm8wMSwxMzAwMDAwDQoxOTg3LFBISSxOTCxiZWRyb3N0MDEsMTA1MDAwMA0KMTk4NyxQSEksTkwscGFycmlsYTAyLDEwMDAwMDANCjE5ODcsUEhJLE5MLHRla3Vsa2UwMSw5MjUwMDANCjE5ODcsUEhJLE5MLHJhd2xlc2gwMSw4MDAwMDANCjE5ODcsUEhJLE5MLGVhc2xlbWkwMSw3MDAwMDANCjE5ODcsUEhJLE5MLHdpbHNvZ2wwMSw2NjI0MDANCjE5ODcsUEhJLE5MLHNhbXVlanUwMSw2NjAwMDANCjE5ODcsUEhJLE5MLGdyb3NzZ3IwMSw0MjAwMDANCjE5ODcsUEhJLE5MLGFndWF5bHUwMSwzMjUwMDANCjE5ODcsUEhJLE5MLGNhcm1hZG8wMSwyNDUwMDANCjE5ODcsUEhJLE5MLHJvZW5pcm8wMSwxOTE1MDANCjE5ODcsUEhJLE5MLGplbHR6c3QwMSwxNTAwMDANCjE5ODcsUEhJLE5MLHNjaHVyaTAxLDE0MDAwMA0KMTk4NyxQSEksTkwsc3RvbmVqZTAxLDE0MDAwMA0KMTk4NyxQSEksTkwsdGhvbXBtaTAyLDE0MDAwMA0KMTk4NyxQSEksTkwscnVmZmlicjAxLDEwMDAwMA0KMTk4NyxQSEksTkwsZGF1bHRkYTAxLDk4MDAwDQoxOTg3LFBISSxOTCxjYWxob2plMDEsODUwMDANCjE5ODcsUEhJLE5MLGphbWVzY2gwMiw2NTAwMA0KMTk4NyxQSEksTkwsbWFkZHVtaTAxLDY1MDAwDQoxOTg3LFBISSxOTCxqYWNrc21pMDIsNjI1MDANCjE5ODcsUEhJLE5MLHJpdGNod2EwMSw2MjUwMA0KMTk4NyxQSVQsTkwsdGhvbXBqYTAxLDExNTAwMDANCjE5ODcsUElULE5MLHJheWpvMDEsODA3MDAwDQoxOTg3LFBJVCxOTCxjYW5nZWpvMDEsODAwMDAwDQoxOTg3LFBJVCxOTCxyb2JpbmRvMDEsNzk1MDAwDQoxOTg3LFBJVCxOTCxyZXVzY3JpMDEsNzUwMDAwDQoxOTg3LFBJVCxOTCx2YW5zbGFuMDEsNTUwMDAwDQoxOTg3LFBJVCxOTCxtb3JyaWppMDEsMzE3NTAwDQoxOTg3LFBJVCxOTCx3YWxrYm8wMSwyODUwMDANCjE5ODcsUElULE5MLGFsbW9uYmkwMSwyNTAwMDANCjE5ODcsUElULE5MLGJyZWFtc2kwMSwyMDAwMDANCjE5ODcsUElULE5MLG9ydGl6anUwMSwxOTAwMDANCjE5ODcsUElULE5MLHJleW5vcmowMSwxOTAwMDANCjE5ODcsUElULE5MLGZpc2hlYnIwMSwxODAwMDANCjE5ODcsUElULE5MLHJvYmluamUwMSwxODAwMDANCjE5ODcsUElULE5MLGJlbGxpcmEwMSwxMzAwMDANCjE5ODcsUElULE5MLGxhdmFsbWkwMSwxMjAwMDANCjE5ODcsUElULE5MLGJvbmlsYm8wMSwxMTUwMDANCjE5ODcsUElULE5MLGJpZWxlbWkwMSwxMTAwMDANCjE5ODcsUElULE5MLGJvbmRzYmEwMSwxMDAwMDANCjE5ODcsUElULE5MLGRpYXptaTAxLDkwMDAwDQoxOTg3LFBJVCxOTCx3YXNoaXVsMDEsODAwMDANCjE5ODcsUElULE5MLGpvbmVzYmEwMSw3NTAwMA0KMTk4NyxQSVQsTkwsZ2lkZW9icjAxLDYyNTAwDQoxOTg3LFBJVCxOTCxsaW5kam8wMSw2MjUwMA0KMTk4NyxQSVQsTkwsc21pbGVqbzAxLDYyNTAwDQoxOTg3LFNETixOTCxnYXJ2ZXN0MDEsMTQ1MDAwMA0KMTk4NyxTRE4sTkwsZ29zc2FyaTAxLDEyNzM5MDQNCjE5ODcsU0ROLE5MLHRlbXBsZ2EwMSwxMTQzMjI1DQoxOTg3LFNETixOTCx3aGl0c2VkMDEsODAwMDAwDQoxOTg3LFNETixOTCxzaG93ZXIwMSw3ODc1MDANCjE5ODcsU0ROLE5MLGd3eW5udG8wMSw3NjUwMDANCjE5ODcsU0ROLE5MLGRhdmlzc3QwMiw2MDUwMDANCjE5ODcsU0ROLE5MLGRyYXZlZGEwMSw1NzUwMDANCjE5ODcsU0ROLE5MLGhhd2tpYW4wMSw1MzUwMDANCjE5ODcsU0ROLE5MLGxlZmZlY3IwMSw1MDAwMDANCjE5ODcsU0ROLE5MLGRhdmlzbWEwMSw0MTUwMDANCjE5ODcsU0ROLE5MLG1hcnRpY2EwMSwzNDAwMDANCjE5ODcsU0ROLE5MLGZsYW5udGkwMSwzMjY2NjcNCjE5ODcsU0ROLE5MLHd5bm5lbWEwMSwyNDAwMDANCjE5ODcsU0ROLE5MLGJyb3duY2gwMiwyMTUwMDANCjE5ODcsU0ROLE5MLGJvY2h5YnIwMSwxMzUwMDANCjE5ODcsU0ROLE5MLG1jY3VsbGEwMSwxMjUwMDANCjE5ODcsU0ROLE5MLG1pdGNoa2UwMSwxMjUwMDANCjE5ODcsU0ROLE5MLGtydWtqbzAxLDExMDAwMA0KMTk4NyxTRE4sTkwscmVhZHlyYTAxLDExMDAwMA0KMTk4NyxTRE4sTkwsYm9va2VncjAxLDEwMDAwMA0KMTk4NyxTRE4sTkwsc2FsYXpsdTAxLDc1MDAwDQoxOTg3LFNETixOTCxqb25lc2ppMDIsNjM1MDANCjE5ODcsU0ROLE5MLHNhbnRpYmUwMSw2MzUwMA0KMTk4NyxTRE4sTkwsamVmZmVzdDAxLDYyNTAwDQoxOTg3LFNETixOTCxtYWNrc2gwMSw2MjUwMA0KMTk4NyxTRE4sTkwsbm9sdGVlcjAxLDYyNTAwDQoxOTg3LFNGTixOTCxsZW9uYWplMDEsOTc1MDAwDQoxOTg3LFNGTixOTCxtaW50b2dyMDEsNzUwMDAwDQoxOTg3LFNGTixOTCxrcnVrb21pMDEsNjQ4MDAwDQoxOTg3LFNGTixOTCxicmVubGJvMDEsNjAwMDAwDQoxOTg3LFNGTixOTCxtaWxuZWVkMDEsNDkwMDAwDQoxOTg3LFNGTixOTCx5b3VuZ2pvMDIsNDUwMDAwDQoxOTg3LFNGTixOTCxtYWxkb2NhMDEsNDE1MDAwDQoxOTg3LFNGTixOTCxoYW1tYWF0MDEsMzgwMDAwDQoxOTg3LFNGTixOTCxnb3R0amkwMSwzMTcwMDANCjE5ODcsU0ZOLE5MLGxhY29zbWkwMSwzMDAwMDANCjE5ODcsU0ZOLE5MLGdhcnJlc2MwMSwyOTAwMDANCjE5ODcsU0ZOLE5MLG1hc29ubWkwMSwyODAwMDANCjE5ODcsU0ZOLE5MLHNwZWllY2gwMSwyNzUwMDANCjE5ODcsU0ZOLE5MLHVyaWJlam8wMSwxOTUwMDANCjE5ODcsU0ZOLE5MLHNwaWxtaGEwMSwxNzUwMDANCjE5ODcsU0ZOLE5MLHRob21wcm8wMSwxNDAwMDANCjE5ODcsU0ZOLE5MLGNsYXJrd2kwMiwxMjAwMDANCjE5ODcsU0ZOLE5MLHByaWNlam8wMiwxMDAwMDANCjE5ODcsU0ZOLE5MLG1lbHZpYm8wMSw5MDAwMA0KMTk4NyxTRk4sTkwsZ3JhbnRtYTAxLDg3NTAwDQoxOTg3LFNGTixOTCxhbGRyZW1pMDEsNzUwMDANCjE5ODcsU0ZOLE5MLGRvd25za2UwMSw3NTAwMA0KMTk4NyxTRk4sTkwsY29tc3RrZTAxLDYyNTAwDQoxOTg3LFNMTixOTCxzbWl0aG96MDEsMTk0MDAwMA0KMTk4NyxTTE4sTkwsY2xhcmtqYTAxLDEzMDAwMDANCjE5ODcsU0xOLE5MLHBlbmF0bzAxLDExNTA1MDANCjE5ODcsU0xOLE5MLHR1ZG9yam8wMSwxMDUwMDAwDQoxOTg3LFNMTixOTCxoZXJydG8wMSw5MjUwMDANCjE5ODcsU0xOLE5MLG1jZ2Vld2kwMSw3NjUwMDANCjE5ODcsU0xOLE5MLGZvcnNjYm8wMSw3NTAwMDANCjE5ODcsU0xOLE5MLGNveGRhMDEsNjAwMDAwDQoxOTg3LFNMTixOTCxsYWh0aWplMDEsNDUwMDAwDQoxOTg3LFNMTixOTCxob3J0b3JpMDEsNDEwMDAwDQoxOTg3LFNMTixOTCxkYXlsZWtlMDEsMzI1MDAwDQoxOTg3LFNMTixOTCxkYXdsZWJpMDEsMjc1MDAwDQoxOTg3LFNMTixOTCxwZW5kbHRlMDEsMjEwMDAwDQoxOTg3LFNMTixOTCx3b3JyZXRvMDEsMTcwMDAwDQoxOTg3LFNMTixOTCxjb2xlbXZpMDEsMTYwMDAwDQoxOTg3LFNMTixOTCxjb25yb3RpMDEsMTE1MDAwDQoxOTg3LFNMTixOTCxsYXdsZXRvMDEsMTE1MDAwDQoxOTg3LFNMTixOTCxkcmllc2RhMDEsMTAwMDAwDQoxOTg3LFNMTixOTCxtYXRoZWdyMDEsMTAwMDAwDQoxOTg3LFNMTixOTCxvcXVlbmpvMDEsMTAwMDAwDQoxOTg3LFNMTixOTCxsYWtlc3QwMSw5NTAwMA0KMTk4NyxTTE4sTkwscGVycnlwYTAyLDgwMDAwDQoxOTg3LFNMTixOTCxmb3JkY3UwMSw3MDAwMA0KMTk4NyxTTE4sTkwsbW9ycmlqbzA3LDY1MDAwDQoxOTg3LFNMTixOTCxqb2huc2xhMDMsNjI1MDANCjE5ODcsU0xOLE5MLGxhbmRydGkwMSw2MjUwMA0KMTk4NyxTTE4sTkwsbGluZGVqaTAxLDYyNTAwDQoxOTg3LFNMTixOTCxtYWdyYWpvMDEsNjI1MDANCjE5ODcsU0xOLE5MLHBhZ25vdG8wMSw2MjUwMA0KMTk4NyxTTE4sTkwscGV0ZXJzdDAxLDYyNTAwDQoxOTg3LFNMTixOTCx0dW5uZWxlMDEsNjI1MDANCjE5ODgsQkFMLEFMLG11cnJhZWQwMiwyMTQyOTA0DQoxOTg4LEJBTCxBTCxyaXBrZWNhMDEsMTcwMDAwMA0KMTk4OCxCQUwsQUwsbHlubmZyMDEsMTU0MDAwMA0KMTk4OCxCQUwsQUwsbWNncmVzYzAxLDEwNjYxNzENCjE5ODgsQkFMLEFMLGJvZGRpbWkwMSw4NTAwMDANCjE5ODgsQkFMLEFMLGtlbm5ldGUwMiw4NTAwMDANCjE5ODgsQkFMLEFMLG5pZWRldG8wMSw4NTAwMDANCjE5ODgsQkFMLEFMLGFhc2VkbzAxLDY3NTAwMA0KMTk4OCxCQUwsQUwsc2NobWlkYTAxLDYyNTAwMA0KMTk4OCxCQUwsQUwsc2hlZXRsYTAxLDU0MDAwMA0KMTk4OCxCQUwsQUwsdGh1cm1tYTAxLDQzNTAwMA0KMTk4OCxCQUwsQUwsc2lza2RvMDEsNDEwMDAwDQoxOTg4LEJBTCxBTCxtb3JnYW1pMDEsMzc1MDAwDQoxOTg4LEJBTCxBTCxkd3llcmppMDEsMzAwMDAwDQoxOTg4LEJBTCxBTCxzY2h1cmkwMSwxNjUwMDANCjE5ODgsQkFMLEFMLHN0b25lamUwMSwxNjAwMDANCjE5ODgsQkFMLEFMLG9yc3Vsam8wMSwxMjAwMDANCjE5ODgsQkFMLEFMLHdpbGxpbWEwNSw4NTAwMA0KMTk4OCxCQUwsQUwsZ2VyaGFrZTAxLDgzMDAwDQoxOTg4LEJBTCxBTCxyaXBrZWJpMDEsODAwMDANCjE5ODgsQkFMLEFMLHRyYWJlamkwMSw4MDAwMA0KMTk4OCxCQUwsQUwsZ29uemFyZTAxLDc1MDAwDQoxOTg4LEJBTCxBTCxyb3dkb3dhMDEsNzI1MDANCjE5ODgsQkFMLEFMLG5pY2hvY2EwMSw2NTAwMA0KMTk4OCxCQUwsQUwsYmF1dGlqbzAxLDYyNTAwDQoxOTg4LEJBTCxBTCxtZXNham8wMSw2MjUwMA0KMTk4OCxCQUwsQUwscGVyYXpvczAxLDYyNTAwDQoxOTg4LEJPUyxBTCxyaWNlamkwMSwyMjE0ODY1DQoxOTg4LEJPUyxBTCxib2dnc3dhMDEsMTY1MDAwMA0KMTk4OCxCT1MsQUwsZXZhbnNkdzAxLDE2MDAwMDANCjE5ODgsQk9TLEFMLGNsZW1lcm8wMiwxMzUwMDAwDQoxOTg4LEJPUyxBTCxzdGFubGJvMDEsMTA2MDAwMA0KMTk4OCxCT1MsQUwsZ2VkbWFyaTAxLDk1MjcyNw0KMTk4OCxCT1MsQUwsaHVyc3RicjAxLDkwMDAwMA0KMTk4OCxCT1MsQUwsc21pdGhsZTAyLDg1MDAwMA0KMTk4OCxCT1MsQUwsYmFycmVtYTAyLDY3NTAwMA0KMTk4OCxCT1MsQUwsYm95ZG9pMDEsNTUwMDAwDQoxOTg4LEJPUyxBTCxvd2Vuc3AwMSw1MjUwMDANCjE5ODgsQk9TLEFMLHJvbWVyZWQwMSw0MTUwMDANCjE5ODgsQk9TLEFMLGdyZWVubWkwMSwyMDUwMDANCjE5ODgsQk9TLEFMLHNlbGxlamUwMSwxMzUwMDANCjE5ODgsQk9TLEFMLGJ1cmtzZWwwMSwxMjUwMDANCjE5ODgsQk9TLEFMLGdhcmRud2UwMSwxMTcwMDANCjE5ODgsQk9TLEFMLGJlbnppdG8wMSw4NTAwMA0KMTk4OCxCT1MsQUwsaG9ybnNhMDEsODAwMDANCjE5ODgsQk9TLEFMLHJvbWlua2UwMSw3NzUwMA0KMTk4OCxCT1MsQUwsbWFyemFqbzAxLDc3MDAwDQoxOTg4LEJPUyxBTCxyZWVkam8wMSw2NDUwMA0KMTk4OCxCT1MsQUwsYW5kZXJicjAxLDYyNTAwDQoxOTg4LEJPUyxBTCxlbGxzd3N0MDEsNjI1MDANCjE5ODgsQk9TLEFMLHRyYXV0am8wMSw2MjUwMA0KMTk4OCxDQUwsQUwsd2l0dG1pMDEsMTQwMDAwMA0KMTk4OCxDQUwsQUwsbW9vcmVkbzAxLDEwMDAwMDANCjE5ODgsQ0FMLEFMLGhlbmRyZ2UwMSw5ODkzMzMNCjE5ODgsQ0FMLEFMLGRvd25pYnIwMSw5MDAwMDANCjE5ODgsQ0FMLEFMLGJvb25lYm8wMSw4ODMwMDANCjE5ODgsQ0FMLEFMLGRhdmlzY2gwMSw4NTAwMDANCjE5ODgsQ0FMLEFMLHBldHJ5ZGEwMSw3ODUwMDANCjE5ODgsQ0FMLEFMLHd5bmVnYnUwMSw3MzMzMzMNCjE5ODgsQ0FMLEFMLHJheWpvMDEsNzMyMDAwDQoxOTg4LENBTCxBTCxzY2hvZmRpMDIsNTUyMjIyDQoxOTg4LENBTCxBTCxtaW50b2dyMDEsNTAwMDAwDQoxOTg4LENBTCxBTCxidWNrbmJpMDEsNDAwMDAwDQoxOTg4LENBTCxBTCxqb3luZXdhMDEsMzQwMDAwDQoxOTg4LENBTCxBTCxtY2Nhc2tpMDEsMjYyMDAwDQoxOTg4LENBTCxBTCxob3dlbGphMDIsMjAwMDAwDQoxOTg4LENBTCxBTCx3aGl0ZWRlMDMsMTg1MDAwDQoxOTg4LENBTCxBTCxqb2huc2pvMDUsMTU3NTAwDQoxOTg4LENBTCxBTCxidWljZWRlMDEsMTUwMDAwDQoxOTg4LENBTCxBTCxmcmFzZXdpMDEsMTI1MDAwDQoxOTg4LENBTCxBTCxtY2xlbW1hMDEsMTIyNTAwDQoxOTg4LENBTCxBTCxmaW5sZWNoMDEsMTExMDAwDQoxOTg4LENBTCxBTCxhcm1hc3RvMDEsMTAwMDAwDQoxOTg4LENBTCxBTCxsYXpvcmphMDEsOTcwMDANCjE5ODgsQ0FMLEFMLHBvbGlkZ3UwMSw5NzAwMA0KMTk4OCxDQUwsQUwsd2Fsa2VjaDAxLDg4MDAwDQoxOTg4LENBTCxBTCxkaW1pY2ZyMDEsNjI1MDANCjE5ODgsQ0FMLEFMLGVwcGFyamkwMSw2MjUwMA0KMTk4OCxDQUwsQUwsaGFydmVicjAxLDYyNTAwDQoxOTg4LENIQSxBTCxiYWluZWhhMDEsMTAwMDAwMA0KMTk4OCxDSEEsQUwsd2Fsa2VncjAxLDczMDAwMA0KMTk4OCxDSEEsQUwsZmlza2NhMDEsNzAwMDAwDQoxOTg4LENIQSxBTCxndWlsbG96MDEsNTM3NTAwDQoxOTg4LENIQSxBTCxob3J0b3JpMDEsNTMyNTAwDQoxOTg4LENIQSxBTCxyZWR1c2dhMDEsNDYwMDAwDQoxOTg4LENIQSxBTCxsYXBvaWRhMDEsNDI1MDAwDQoxOTg4LENIQSxBTCxoaWxsZG8wMSwyNzUwMDANCjE5ODgsQ0hBLEFMLHJldXNzamUwMSwyMDAwMDANCjE5ODgsQ0hBLEFMLHNhbGFzbWEwMSwxODUwMDANCjE5ODgsQ0hBLEFMLGx5b25zc3QwMSwxNzUwMDANCjE5ODgsQ0hBLEFMLHBhc3F1ZGEwMSwxNjUwMDANCjE5ODgsQ0hBLEFMLGNhbGRlaXYwMSwxNDAwMDANCjE5ODgsQ0hBLEFMLGxvbmdiaTAxLDEwMjUwMA0KMTk4OCxDSEEsQUwsc2VndXJqbzAxLDEwMjUwMA0KMTk4OCxDSEEsQUwsd2lsbGlrZTAyLDEwMjUwMA0KMTk4OCxDSEEsQUwsbWFucmlmcjAxLDk3NTAwDQoxOTg4LENIQSxBTCxib3N0b2RhMDEsNzUwMDANCjE5ODgsQ0hBLEFMLHRoaWdwYm8wMSw3MDAwMA0KMTk4OCxDSEEsQUwsZGF2aXNqbzA0LDY1MDAwDQoxOTg4LENIQSxBTCxqb2huc2xhMDMsNjI1MDANCjE5ODgsQ0hBLEFMLG1jZG93amEwMSw2MjUwMA0KMTk4OCxDSEEsQUwscGF3bG9qbzAxLDYyNTAwDQoxOTg4LENIQSxBTCxwZXJlem1lMDEsNjI1MDANCjE5ODgsQ0xFLEFMLHRob3JuYW4wMSwxMTAwMDAwDQoxOTg4LENMRSxBTCxmcmFuY2p1MDEsOTc1MDAwDQoxOTg4LENMRSxBTCx1cHNoYXdpMDEsOTAwMDAwDQoxOTg4LENMRSxBTCxjYXJ0ZWpvMDEsODQwMDAwDQoxOTg4LENMRSxBTCxqYWNvYmJyMDEsODEyNTAwDQoxOTg4LENMRSxBTCx0YWJsZXBhMDEsODAwMDAwDQoxOTg4LENMRSxBTCxoYWxsbWUwMSw3MjUwMDANCjE5ODgsQ0xFLEFMLGRlZG1vamUwMSwzNTAwMDANCjE5ODgsQ0xFLEFMLGJhbmRvY2gwMSwzMjUwMDANCjE5ODgsQ0xFLEFMLHNjaGF0ZGEwMSwzMjUwMDANCjE5ODgsQ0xFLEFMLGNhc3RpY2EwMSwzMTAwMDANCjE5ODgsQ0xFLEFMLGtpdHRscm8wMSwzMDAwMDANCjE5ODgsQ0xFLEFMLGNhbmRpdG8wMSwyMzAwMDANCjE5ODgsQ0xFLEFMLHNueWRlY28wMiwxODUwMDANCjE5ODgsQ0xFLEFMLGJhaWxlc2MwMSwxNTAwMDANCjE5ODgsQ0xFLEFMLGpvbmVzZG8wMSwxMTUwMDANCjE5ODgsQ0xFLEFMLGFsbGFuYW4wMSwxMDI1MDANCjE5ODgsQ0xFLEFMLHN3aW5kZ3IwMSw5MDAwMA0KMTk4OCxDTEUsQUwseWV0dHJpMDEsOTAwMDANCjE5ODgsQ0xFLEFMLGNsYXJrZGEwNSw3MjAwMA0KMTk4OCxDTEUsQUwsZmFycmVqbzAzLDcyMDAwDQoxOTg4LENMRSxBTCxiZWxsamEwMSw2NzUwMA0KMTk4OCxERVQsQUwsbW9ycmlqYTAyLDE5ODgwMDANCjE5ODgsREVULEFMLGhlcm5hd2kwMSwxMjEwMDAwDQoxOTg4LERFVCxBTCx0YW5hbmZyMDEsMTEwMDAwMA0KMTk4OCxERVQsQUwsdHJhbW1hbDAxLDEwMDAwMDANCjE5ODgsREVULEFMLHdoaXRhbG8wMSw5NzUwMDANCjE5ODgsREVULEFMLGV2YW5zZGEwMSw4NjAwMDANCjE5ODgsREVULEFMLGxlbW9uY2gwMSw4Mjg1NzENCjE5ODgsREVULEFMLHRlcnJld2EwMSw2NjUwMDANCjE5ODgsREVULEFMLGtuaWdocmEwMSw1MjUwMDANCjE5ODgsREVULEFMLGFsZXhhZG8wMSw1MDAwMDANCjE5ODgsREVULEFMLGhlYXRobWkwMiw0MDAwMDANCjE5ODgsREVULEFMLHBldHRpZ2EwMSw0MDAwMDANCjE5ODgsREVULEFMLGhlcm5kbGEwMSwzNzUwMDANCjE5ODgsREVULEFMLGJlcmdtZGEwMSwzNjAwMDANCjE5ODgsREVULEFMLGJyb29rdG8wMSwzNTAwMDANCjE5ODgsREVULEFMLHNoZXJpcGEwMSwzNDMwMDANCjE5ODgsREVULEFMLG1vcnJpamkwMSwyNzc1MDANCjE5ODgsREVULEFMLG5va2VzbWEwMSwxNjUwMDANCjE5ODgsREVULEFMLHNhbGF6bHUwMSwxNTAwMDANCjE5ODgsREVULEFMLGtpbmdlcjAxLDEyNTAwMA0KMTk4OCxERVQsQUwsaGVubmVtaTAxLDExNTAwMA0KMTk4OCxERVQsQUwscm9iaW5qZTAyLDk1MDAwDQoxOTg4LERFVCxBTCxnaWJzb3BhMDEsNjI1MDANCjE5ODgsS0NBLEFMLGJyZXR0Z2UwMSwyMzA1MDAwDQoxOTg4LEtDQSxBTCxxdWlzZWRhMDEsMTU2MjM1MA0KMTk4OCxLQ0EsQUwsd2lsc293aTAyLDEzODM3MTINCjE5ODgsS0NBLEFMLGxlaWJyY2gwMSwxMjUwMDAwDQoxOTg4LEtDQSxBTCxzYWJlcmJyMDEsMTEwMDAwMA0KMTk4OCxLQ0EsQUwsYmFubmlmbDAxLDkwMDAwMA0KMTk4OCxLQ0EsQUwsd2hpdGVmcjAxLDgyNTAwMA0KMTk4OCxLQ0EsQUwsYmxhY2tidTAyLDYzNTAwMA0KMTk4OCxLQ0EsQUwsZ3ViaWNtYTAxLDYzNTAwMA0KMTk4OCxLQ0EsQUwscG93ZXJ0ZTAxLDU3NTAwMA0KMTk4OCxLQ0EsQUwsZ2FyYmVnZTAxLDUwMDAwMA0KMTk4OCxLQ0EsQUwsYm9zbGV0aDAxLDQwMDAwMA0KMTk4OCxLQ0EsQUwsamFja3NibzAxLDM4MzAwMA0KMTk4OCxLQ0EsQUwsYmFsYm9zdDAxLDM1MDAwMA0KMTk4OCxLQ0EsQUwscXVpcmtqYTAxLDMzNTAwMA0KMTk4OCxLQ0EsQUwsdGFydGFkYTAxLDMzMDAwMA0KMTk4OCxLQ0EsQUwsZmFycnN0MDEsMjI1MDAwDQoxOTg4LEtDQSxBTCxzZWl0emtlMDEsMTc1MDAwDQoxOTg4LEtDQSxBTCxzdGlsbGt1MDEsMTM3NTAwDQoxOTg4LEtDQSxBTCx3ZWxsbWJyMDEsMTI1MDAwDQoxOTg4LEtDQSxBTCxlaXNlbmppMDEsOTAwMDANCjE5ODgsS0NBLEFMLGhlYXJuZWQwMiw4MDAwMA0KMTk4OCxLQ0EsQUwsbWFkaXNzYzAxLDY1MDAwDQoxOTg4LEtDQSxBTCxwZWNvdGJpMDEsNjUwMDANCjE5ODgsS0NBLEFMLG1hY2ZhbWkwMSw2MjUwMA0KMTk4OCxLQ0EsQUwsdGh1cm1nYTAxLDYyNTAwDQoxOTg4LE1JTixBTCxnYWV0dGdhMDEsMTY2NjY2Ng0KMTk4OCxNSU4sQUwsaHJiZWtrZTAxLDE0MTAwMDANCjE5ODgsTUlOLEFMLHZpb2xhZnIwMSwxMzUwMDAwDQoxOTg4LE1JTixBTCxicnVuYXRvMDEsMTE0MDAwMA0KMTk4OCxNSU4sQUwscHVja2VraTAxLDEwOTAwMDANCjE5ODgsTUlOLEFMLGJseWxlYmUwMSwxMDAwMDAwDQoxOTg4LE1JTixBTCxyZWFyZGplMDEsODUwMDAwDQoxOTg4LE1JTixBTCxuaWVrcmpvMDEsODAwMDAwDQoxOTg4LE1JTixBTCxiZXJlbmp1MDEsNTAwMDAwDQoxOTg4LE1JTixBTCxnYWduZWdyMDEsNDQwMDAwDQoxOTg4LE1JTixBTCxnbGFkZGRhMDEsMzYwMDAwDQoxOTg4LE1JTixBTCxidXNocmEwMSwzNTAwMDANCjE5ODgsTUlOLEFMLGF0aGVya2UwMSwzNDUwMDANCjE5ODgsTUlOLEFMLGxhdWRudGkwMSwyOTUwMDANCjE5ODgsTUlOLEFMLGxvbWJhc3QwMSwxNTI1MDANCjE5ODgsTUlOLEFMLGNhcmx0c3QwMSwxMTUwMDANCjE5ODgsTUlOLEFMLG5pZXRvdG8wMSwxMDM1MDANCjE5ODgsTUlOLEFMLG5ld21hYWwwMSwxMDAwMDANCjE5ODgsTUlOLEFMLHN0cmFrbGUwMSw5MzAwMA0KMTk4OCxNSU4sQUwsZGF2aWRtYTAxLDg5MDAwDQoxOTg4LE1JTixBTCxsYXJraWdlMDEsODMwMDANCjE5ODgsTUlOLEFMLGxvd3J5ZHcwMSw2NzUwMA0KMTk4OCxNSU4sQUwsbGVhY2gwMSw2MjUwMA0KMTk4OCxNTDQsQUwsbW9saXRwYTAxLDE0MDAwMDANCjE5ODgsTUw0LEFMLHlvdW50cm8wMSwxMTUwMDAwDQoxOTg4LE1MNCxBTCxoaWd1ZXRlMDEsMTAyNTAwMA0KMTk4OCxNTDQsQUwsZ2FudG5qaTAxLDkzNzUwMA0KMTk4OCxNTDQsQUwsYnJvY2tncjAxLDYwMDAwMA0KMTk4OCxNTDQsQUwsY2xlYXJtYTAxLDUzNTAwMA0KMTk4OCxNTDQsQUwsZGVlcnJvMDEsNDYwMDAwDQoxOTg4LE1MNCxBTCxzY2hyb2JpMDEsMzcyNTAwDQoxOTg4LE1MNCxBTCxwbGVzYWRhMDEsMjc1MDAwDQoxOTg4LE1MNCxBTCxyaWxlc2VyMDEsMjUwMDAwDQoxOTg4LE1MNCxBTCxuaWV2ZWp1MDEsMTk1MDAwDQoxOTg4LE1MNCxBTCxzdmV1bWRhMDEsMTg1MDAwDQoxOTg4LE1MNCxBTCx3ZWdtYWJpMDEsMTc1MDAwDQoxOTg4LE1MNCxBTCxicmFnZ2dsMDEsMTIyMDAwDQoxOTg4LE1MNCxBTCxzdXJob2JqMDEsMTIyMDAwDQoxOTg4LE1MNCxBTCxib3Npb2NoMDEsMTA3MDAwDQoxOTg4LE1MNCxBTCxmZWxkZW1pMDEsMTAyNTAwDQoxOTg4LE1MNCxBTCxjcmltY2gwMSwxMDEwMDANCjE5ODgsTUw0LEFMLGNhc3RpanUwMSw5MDAwMA0KMTk4OCxNTDQsQUwsYmlya2JtaTAxLDcwMDAwDQoxOTg4LE1MNCxBTCxzdGFwbGRhMDIsNjUwMDANCjE5ODgsTUw0LEFMLG1leWVyam8wMSw2MjUwMA0KMTk4OCxOWUEsQUwsbWF0dGlkbzAxLDIwMDAwMDANCjE5ODgsTllBLEFMLHdpbmZpZGEwMSwxOTU4NjUyDQoxOTg4LE5ZQSxBTCxoZW5kZXJpMDEsMTc3MDAwMA0KMTk4OCxOWUEsQUwsY2xhcmtqYTAxLDE1MDAwMDANCjE5ODgsTllBLEFMLHJpZ2hlZGEwMSwxMzAwMDAwDQoxOTg4LE5ZQSxBTCxkb3Rzb3JpMDEsOTAwMDAwDQoxOTg4LE5ZQSxBTCxyaG9kZXJpMDEsOTAwMDAwDQoxOTg4LE5ZQSxBTCxyYW5kb3dpMDEsODc1MDAwDQoxOTg4LE5ZQSxBTCxndWlkcnJvMDEsODI1MDAwDQoxOTg4LE5ZQSxBTCxjYW5kZWpvMDEsNzAwMDAwDQoxOTg4LE5ZQSxBTCxzdG9kZHRpMDEsNzAwMDAwDQoxOTg4LE5ZQSxBTCx3YXJkZ2EwMSw2MjUwMDANCjE5ODgsTllBLEFMLHNsYXVnZG8wMSw1MzE1MDANCjE5ODgsTllBLEFMLHBhZ2xpbWkwMSw1MDAwMDANCjE5ODgsTllBLEFMLHdhc2hpY2wwMSw0ODAwMDANCjE5ODgsTllBLEFMLGh1ZHNvY2gwMiw0NTAwMDANCjE5ODgsTllBLEFMLHNhbnRhcmEwMSw0MjUwMDANCjE5ODgsTllBLEFMLHRvbGxld2EwMSw0MTAwMDANCjE5ODgsTllBLEFMLGd1YW50Y2UwMSwzODAwMDANCjE5ODgsTllBLEFMLGpvaG50bzAxLDM3NTAwMA0KMTk4OCxOWUEsQUwsY3J1empvMDEsMzUwMDAwDQoxOTg4LE5ZQSxBTCxjZXJvbnJpMDEsMzAwMDAwDQoxOTg4LE5ZQSxBTCxyb3lzdGplMDEsMjc1MDAwDQoxOTg4LE5ZQSxBTCxhbGxlbm5lMDEsMjUwMDAwDQoxOTg4LE5ZQSxBTCxtZWFjaGJvMDEsMjEyNTAwDQoxOTg4LE5ZQSxBTCxndWV0dGxlMDEsMTM3NTAwDQoxOTg4LE5ZQSxBTCxza2lubmpvMDEsMTEwMDAwDQoxOTg4LE5ZQSxBTCxidWhuZWphMDEsNjcwMDANCjE5ODgsTllBLEFMLGtlbGx5cm8wMSw2NzAwMA0KMTk4OCxOWUEsQUwsbGVpdGVhbDAxLDY3MDAwDQoxOTg4LE9BSyxBTCxsYW5zZmNhMDEsMTMwMDAwMA0KMTk4OCxPQUssQUwscGFya2VkYTAxLDEwMDAwMDANCjE5ODgsT0FLLEFMLHdlbGNoYm8wMSw5Mzc1MDANCjE5ODgsT0FLLEFMLGhvbmV5cmkwMSw4NTUwMDANCjE5ODgsT0FLLEFMLGVja2VyZGUwMSw2NTAwMDANCjE5ODgsT0FLLEFMLHN0ZXdhZGEwMSw2MDAwMDANCjE5ODgsT0FLLEFMLGRhdmlzc3QwMiw1NTAwMDANCjE5ODgsT0FLLEFMLGJheWxvZG8wMSw0OTUwMDANCjE5ODgsT0FLLEFMLG5lbHNvZ2UwMSw0NTAwMDANCjE5ODgsT0FLLEFMLGh1YmJhZ2wwMSw0MjUwMDANCjE5ODgsT0FLLEFMLHlvdW5nY3UwMSw0MTAwMDANCjE5ODgsT0FLLEFMLGNhbnNlam8wMSwzMjUwMDANCjE5ODgsT0FLLEFMLGhhc3Nlcm8wMSwzMDAwMDANCjE5ODgsT0FLLEFMLG1jZ3dpbWEwMSwyNTAwMDANCjE5ODgsT0FLLEFMLGhlbmRlZGEwMSwyMjUwMDANCjE5ODgsT0FLLEFMLG9udGl2c3QwMiwyMDAwMDANCjE5ODgsT0FLLEFMLHBoaWxsdG8wMiwyMDAwMDANCjE5ODgsT0FLLEFMLHN0ZWludGUwMSwxMjUwMDANCjE5ODgsT0FLLEFMLGdhbGxlbWkwMSwxMDAwMDANCjE5ODgsT0FLLEFMLHBsdW5rZXIwMSw5MDAwMA0KMTk4OCxPQUssQUwsamF2aWVzdDAxLDc3NTAwDQoxOTg4LE9BSyxBTCxqZW5uaWRvMDEsNjI1MDANCjE5ODgsT0FLLEFMLHdlaXNzd2EwMSw2MjUwMA0KMTk4OCxTRUEsQUwsdHJvdXRzdDAxLDk5MDAwMA0KMTk4OCxTRUEsQUwsZGF2aXNhbDAxLDg4NzUwMA0KMTk4OCxTRUEsQUwsd2lsc29nbDAxLDg1MDAwMA0KMTk4OCxTRUEsQUwsbGFuZ3NtYTAxLDgyMDAwMA0KMTk4OCxTRUEsQUwscGhlbHBrZTAxLDY3MDAwMA0KMTk4OCxTRUEsQUwscHJlc2xqaTAxLDUzNTAwMA0KMTk4OCxTRUEsQUwsbW9vcmVtaTAxLDQ4MTk1MA0KMTk4OCxTRUEsQUwsbnVuZXplZDAxLDMyMDAwMA0KMTk4OCxTRUEsQUwscmV5bm9oYTAxLDIwMDAwMA0KMTk4OCxTRUEsQUwsYnJhZGxzYzAxLDEzMDAwMA0KMTk4OCxTRUEsQUwscmVlZGplMDEsMTI1MDAwDQoxOTg4LFNFQSxBTCx2YWxsZWRhMDEsMTI1MDAwDQoxOTg4LFNFQSxBTCxxdWlub3JlMDEsMTIwMDAwDQoxOTg4LFNFQSxBTCxiYW5raHNjMDEsMTEyNTAwDQoxOTg4LFNFQSxBTCxicmFudG1pMDEsMTEyNTAwDQoxOTg4LFNFQSxBTCxraW5nZW1pMDEsMTEyNTAwDQoxOTg4LFNFQSxBTCx3aWxraWJpMDEsMTAwMDAwDQoxOTg4LFNFQSxBTCxjb3R0b2hlMDEsOTAwMDANCjE5ODgsU0VBLEFMLHNvbGFuanUwMSw4MDAwMA0KMTk4OCxTRUEsQUwsamFja3NtaTAyLDc3NTAwDQoxOTg4LFNFQSxBTCxzd2lmdGJpMDIsNzc1MDANCjE5ODgsU0VBLEFMLHBvd2VsZGUwMSw3MjUwMA0KMTk4OCxTRUEsQUwscmVudGVyaTAxLDY1NTAwDQoxOTg4LFNFQSxBTCxjYW1wYm1pMDEsNjI1MDANCjE5ODgsU0VBLEFMLGRpYXptYTAxLDYyNTAwDQoxOTg4LFNFQSxBTCxmaWVsZGJyMDEsNjI1MDANCjE5ODgsVEVYLEFMLGhvdWdoY2gwMSw4NTAwMDANCjE5ODgsVEVYLEFMLGZsZXRjc2MwMSw1NzUwMDANCjE5ODgsVEVYLEFMLG9icmllcGUwMyw1NjI1MDANCjE5ODgsVEVYLEFMLHBhcnJpbGEwMSw1NTAxMzENCjE5ODgsVEVYLEFMLGluY2F2cGUwMSwyNzUwMDANCjE5ODgsVEVYLEFMLHdpbGtlY3UwMSwyNTI1MDANCjE5ODgsVEVYLEFMLG1jZG93b2QwMSwyNTAwMDANCjE5ODgsVEVYLEFMLHNpZXJycnUwMSwyMzAwMDANCjE5ODgsVEVYLEFMLHdpbGxpbWkwMiwyMDAwMDANCjE5ODgsVEVYLEFMLHJ1c3NlamUwMSwxOTAwMDANCjE5ODgsVEVYLEFMLGJ1ZWNoc3QwMSwxODAwMDANCjE5ODgsVEVYLEFMLGd1em1ham8wMSwxNzAwMDANCjE5ODgsVEVYLEFMLG1vaG9yZGEwMSwxNTc1MDANCjE5ODgsVEVYLEFMLHBldHJhZ2UwMSwxMzUwMDANCjE5ODgsVEVYLEFMLGNvcnJlZWQwMSwxMzAwMDANCjE5ODgsVEVYLEFMLHdpdHRibzAxLDEzMDAwMA0KMTk4OCxURVgsQUwsYnJvd25qZTAxLDExNzUwMA0KMTk4OCxURVgsQUwsYnJvd2VibzAxLDk4MDAwDQoxOTg4LFRFWCxBTCxzdGFubG1pMDIsODQwMDANCjE5ODgsVEVYLEFMLGtpbGd1cGEwMSw4MDAwMA0KMTk4OCxURVgsQUwsY2VjZW5qbzAxLDYyNTAwDQoxOTg4LFRFWCxBTCxlc3B5Y2UwMSw2MjUwMA0KMTk4OCxUT1IsQUwsYmVsbGdlMDIsMTkwMDAwMA0KMTk4OCxUT1IsQUwsYmFyZmlqZTAxLDE0MDAwMDANCjE5ODgsVE9SLEFMLHN0aWViZGEwMSwxMDAwMDAwDQoxOTg4LFRPUixBTCxjbGFuY2ppMDEsOTAwMDAwDQoxOTg4LFRPUixBTCxmZXJuYXRvMDEsODc1MDAwDQoxOTg4LFRPUixBTCxtb3NlYmxsMDEsODU3NTAwDQoxOTg4LFRPUixBTCx3aGl0dGVyMDEsNzUwMDAwDQoxOTg4LFRPUixBTCxoZW5rZXRvMDEsNzI1MDAwDQoxOTg4LFRPUixBTCxtdWxsaXJhMDEsNjAwMDAwDQoxOTg4LFRPUixBTCxmbGFuYW1pMDEsNTUwMDAwDQoxOTg4LFRPUixBTCxrZXlqaTAxLDQ0MDIyNQ0KMTk4OCxUT1IsQUwsYmVuaXFqdTAxLDQwMDAwMA0KMTk4OCxUT1IsQUwsbGVhY2hyaTAxLDMwMDAwMA0KMTk4OCxUT1IsQUwsZWljaGhtYTAxLDI3MjUwMA0KMTk4OCxUT1IsQUwsY2VydXRqbzAxLDIzMDAwMA0KMTk4OCxUT1IsQUwsZ3J1YmVrZTAxLDEzMDAwMA0KMTk4OCxUT1IsQUwsbWNncmlmcjAxLDEyNzUwMA0KMTk4OCxUT1IsQUwsbXVzc2VqZTAxLDEyNzAwMA0KMTk4OCxUT1IsQUwsZmllbGRjZTAxLDEyNTAwMA0KMTk4OCxUT1IsQUwsbGVlbWEwMiwxMDMwMDANCjE5ODgsVE9SLEFMLHdlbGxzZGEwMSw4MjAwMA0KMTk4OCxUT1IsQUwsd2FyZGR1MDEsODAwMDANCjE5ODgsVE9SLEFMLGxpcmlhbmUwMSw3NTAwMA0KMTk4OCxUT1IsQUwsc3RhcmttYTAxLDY2NTAwDQoxOTg4LFRPUixBTCxib3JkZXBhMDEsNjI1MDANCjE5ODgsVE9SLEFMLGNhbXB1c2kwMSw2MjUwMA0KMTk4OCxBVEwsTkwsbXVycGhkYTA1LDIwMDAwMDANCjE5ODgsQVRMLE5MLHN1dHRlYnIwMSwxNzI5MTY3DQoxOTg4LEFUTCxOTCxiYXJrZWxlMDEsOTAwMDAwDQoxOTg4LEFUTCxOTCx2aXJnaW96MDIsOTAwMDAwDQoxOTg4LEFUTCxOTCxtYWhsZXJpMDEsNzM3NTAwDQoxOTg4LEFUTCxOTCxvYmVya2tlMDEsNzI1MDAwDQoxOTg4LEFUTCxOTCxnYXJjaWRhMDEsNjkxNTA3DQoxOTg4LEFUTCxOTCxiZW5lZGJyMDEsNjY1MDAwDQoxOTg4LEFUTCxOTCxncmlmZmtlMDEsNTAwMDAwDQoxOTg4LEFUTCxOTCxzaW1tb3RlMDEsNDcwMDAwDQoxOTg4LEFUTCxOTCxzbWl0aHphMDEsNDUwMDAwDQoxOTg4LEFUTCxOTCxhY2tlcmppMDEsNDM1MDAwDQoxOTg4LEFUTCxOTCxwZXJyeWdlMDEsNDI1MDAwDQoxOTg4LEFUTCxOTCxyb2VuaWdhMDEsMzgwMDAwDQoxOTg4LEFUTCxOTCxqYW1lc2RpMDEsMzYwMDAwDQoxOTg4LEFUTCxOTCxoYWxsYWwwMiwyNTAwMDANCjE5ODgsQVRMLE5MLHB1bGVvY2gwMSwxOTUwMDANCjE5ODgsQVRMLE5MLHRob21hYW4wMSwxMTAwMDANCjE5ODgsQVRMLE5MLHJ1bmdlcGEwMSwxMDc1MDANCjE5ODgsQVRMLE5MLGFzc2VucGEwMSw4MTAwMA0KMTk4OCxBVEwsTkwsb2x3aW5lZDAxLDc5MDAwDQoxOTg4LEFUTCxOTCxjYXJ5Y2gwMSw3ODAwMA0KMTk4OCxBVEwsTkwsYmxvY2t0ZTAxLDcwMDAwDQoxOTg4LEFUTCxOTCxibGF1c2plMDEsNjcwMDANCjE5ODgsQVRMLE5MLGNvZmZta2UwMSw2NTAwMA0KMTk4OCxBVEwsTkwsZ2FudHJvMDEsNjUwMDANCjE5ODgsQVRMLE5MLGdsYXZpdG8wMiw2NTAwMA0KMTk4OCxBVEwsTkwsc21pdGhwZTAyLDY1MDAwDQoxOTg4LEFUTCxOTCxlYXZlZ2EwMSw2MjUwMA0KMTk4OCxDSE4sTkwsc3V0Y2xyaTAxLDIwNzAwMDANCjE5ODgsQ0hOLE5MLGRhd3NvYW4wMSwxODUwMDAwDQoxOTg4LENITixOTCxkdXJoYWxlMDEsMTM4MzMzMw0KMTk4OCxDSE4sTkwsZ29zc2FyaTAxLDEzMzE1MzINCjE5ODgsQ0hOLE5MLGRhdmlzam8wMiwxMTA4MzMzDQoxOTg4LENITixOTCxzYW5kZXNjMDEsOTUwMDAwDQoxOTg4LENITixOTCxzYW5kYnJ5MDEsODQwMDAwDQoxOTg4LENITixOTCxtdW1waGplMDEsNjA4MDAwDQoxOTg4LENITixOTCxkaXBpbmZyMDEsNDY1MDAwDQoxOTg4LENITixOTCxuaXBwZWFsMDEsMzk3MDAwDQoxOTg4LENITixOTCxsYXd2YTAxLDM3NTAwMA0KMTk4OCxDSE4sTkwsdHJpbGxtYTAxLDM1NzAwMA0KMTk4OCxDSE4sTkwsZHVuc3RzaDAxLDIwNzUwMA0KMTk4OCxDSE4sTkwsc2NoaXJjYTAxLDIwNzUwMA0KMTk4OCxDSE4sTkwsbW95ZXJqYTAxLDE0MjUwMA0KMTk4OCxDSE4sTkwsbWFydGlkYTAxLDEzNTAwMA0KMTk4OCxDSE4sTkwsYmllbGVtaTAxLDExMDAwMA0KMTk4OCxDSE4sTkwsbGFuY2FsZTAxLDkwMDAwDQoxOTg4LENITixOTCxwYWxtZXJhMDEsOTAwMDANCjE5ODgsQ0hOLE5MLG1hZGR1Z3IwMSw4MjUwMA0KMTk4OCxDSE4sTkwsaGFsbGRyMDEsNjgwMDANCjE5ODgsQ0hOLE5MLGphY2tzZGEwMyw2MzUwMA0KMTk4OCxDSE4sTkwsYmVycnlkYTAxLDYyNTAwDQoxOTg4LENITixOTCxjYXBlbG1pMDEsNjI1MDANCjE5ODgsQ0hOLE5MLHJvb21lcm8wMSw2MjUwMA0KMTk4OCxDSU4sTkwsc290b21hMDEsMTIwMDAwMA0KMTk4OCxDSU4sTkwsZGF2aXNlcjAxLDg5OTAwMA0KMTk4OCxDSU4sTkwsZGlhemJvMDEsODUwMDAwDQoxOTg4LENJTixOTCxiZWxsYnUwMSw3OTA5MDkNCjE5ODgsQ0lOLE5MLGZyYW5jam8wMSw2NzUwMDANCjE5ODgsQ0lOLE5MLGVzYXNrbmkwMSw0NjAwMDANCjE5ODgsQ0lOLE5MLHJhc211ZGUwMSw0NTc1MDANCjE5ODgsQ0lOLE5MLGJyb3dudG8wNSw0NDI1MDANCjE5ODgsQ0lOLE5MLHdpbGxpZnIwMSw0NDI1MDANCjE5ODgsQ0lOLE5MLGphY2tzZGEwMiwzOTAwMDANCjE5ODgsQ0lOLE5MLHJvYmlucm8wMSwzOTAwMDANCjE5ODgsQ0lOLE5MLGNvbmNlZGEwMSwzNzAwMDANCjE5ODgsQ0lOLE5MLGRhbmlla2EwMSwxODUwMDANCjE5ODgsQ0lOLE5MLGNvbGxpZGEwMiwxNzUwMDANCjE5ODgsQ0lOLE5MLG11cnBocm8wMSwxNzUwMDANCjE5ODgsQ0lOLE5MLGpvbmVzdHIwMSwxNTc1MDANCjE5ODgsQ0lOLE5MLHBlcnJ5cGEwMiwxMzI1MDANCjE5ODgsQ0lOLE5MLGxhcmtpYmEwMSwxMjc1MDANCjE5ODgsQ0lOLE5MLHJpam9qbzAxLDEyNzUwMA0KMTk4OCxDSU4sTkwsb25laWxwYTAxLDk3NTAwDQoxOTg4LENJTixOTCxsYW5kcmJpMDEsNzUwMDANCjE5ODgsQ0lOLE5MLG1jY2xlbGwwMSw3NTAwMA0KMTk4OCxDSU4sTkwsbWNncml0ZTAxLDY2MDAwDQoxOTg4LENJTixOTCx0cmVhZGplMDEsNjUwMDANCjE5ODgsQ0lOLE5MLHNhYm9jaDAxLDYyNTAwDQoxOTg4LEhPVSxOTCxzbWl0aGRhMDIsMTEwMDAwMA0KMTk4OCxIT1UsTkwsa25lcHBibzAxLDEwMDAwMDANCjE5ODgsSE9VLE5MLHJ5YW5ubzAxLDEwMDAwMDANCjE5ODgsSE9VLE5MLHB1aGx0ZTAxLDk1MDAwMA0KMTk4OCxIT1UsTkwsZG9yYW5iaTAyLDkzMzAwMA0KMTk4OCxIT1UsTkwscmFtaXJyYTAxLDkyNTAwMA0KMTk4OCxIT1UsTkwsYmFzc2tlMDEsODgwMDAwDQoxOTg4LEhPVSxOTCxkYXJ3aWRhMDEsNzYwMDAwDQoxOTg4LEhPVSxOTCxzY290dG1pMDMsNjY2NjY3DQoxOTg4LEhPVSxOTCx3YWxsaWRlMDEsNTc1MDAwDQoxOTg4LEhPVSxOTCxyZXlub2NyMDEsNTAwMDAwDQoxOTg4LEhPVSxOTCxhbmRlcmxhMDIsNDUwMDAwDQoxOTg4LEhPVSxOTCxhbmR1ampvMDEsNDUwMDAwDQoxOTg4LEhPVSxOTCxhc2hieWFsMDEsNDUwMDAwDQoxOTg4LEhPVSxOTCxkYXZpc2dsMDEsMzQwMDAwDQoxOTg4LEhPVSxOTCxoYXRjaGJpMDEsMjQwMDAwDQoxOTg4LEhPVSxOTCxkZXNoYWppMDEsMjA1MDAwDQoxOTg4LEhPVSxOTCxhZ29zdGp1MDEsMTU3NTAwDQoxOTg4LEhPVSxOTCxwYW5rb2ppMDEsMTUwMDAwDQoxOTg4LEhPVSxOTCxiYWlsZW1hMDEsMTAwMDAwDQoxOTg4LEhPVSxOTCxrZXJmZWNoMDEsMTAwMDAwDQoxOTg4LEhPVSxOTCx5b3VuZ2dlMDIsODUwMDANCjE5ODgsSE9VLE5MLGhlYXRoamUwMiw3MjAwMA0KMTk4OCxIT1UsTkwsZ2FpbmV0eTAxLDY4MDAwDQoxOTg4LEhPVSxOTCxqYWNrc2NoMDMsNjY1MDANCjE5ODgsSE9VLE5MLG1lZHZpc2MwMSw2MjUwMA0KMTk4OCxMQU4sTkwsdmFsZW5mZTAxLDIwNTAwMDANCjE5ODgsTEFOLE5MLGdpYnNva2kwMSwxODMzMzMzDQoxOTg4LExBTixOTCxndWVycnBlMDEsMTcyMDAwMA0KMTk4OCxMQU4sTkwsaGVyc2hvcjAxLDExMDAwMDANCjE5ODgsTEFOLE5MLG9yb3NjamUwMSwxMDAwMDAwDQoxOTg4LExBTixOTCxzY2lvc21pMDEsMTAwMDAwMA0KMTk4OCxMQU4sTkwsZGF2aXNtaTAyLDk4NzUwMA0KMTk4OCxMQU4sTkwsc2F4c3QwMSw4MzgxODINCjE5ODgsTEFOLE5MLG1hcnNobWkwMiw3NjAwMDANCjE5ODgsTEFOLE5MLGdyaWZmYWwwMSw3NTAwMDANCjE5ODgsTEFOLE5MLGhvd2VsamEwMSw1OTUwMDANCjE5ODgsTEFOLE5MLHNoZWxiam8wMSw0NjUwMDANCjE5ODgsTEFOLE5MLHBlbmFhbDAxLDQwMDAwMA0KMTk4OCxMQU4sTkwsc3V0dG9kbzAxLDM1MDAwMA0KMTk4OCxMQU4sTkwsdHJldmlhbDAxLDMxMjUwMA0KMTk4OCxMQU4sTkwsaGF0Y2htaTAxLDMwMDAwMA0KMTk4OCxMQU4sTkwsaGVlcGRhMDEsMzAwMDAwDQoxOTg4LExBTixOTCxsYW5kcnRpMDEsMzAwMDAwDQoxOTg4LExBTixOTCxhbmRlcmRhMDIsMjYyNTAwDQoxOTg4LExBTixOTCxkZW1wc3JpMDEsMjUwMDAwDQoxOTg4LExBTixOTCxzdHViYmZyMDEsMjM1MDAwDQoxOTg4LExBTixOTCxob3dlbGtlMDEsMjE1MDAwDQoxOTg4LExBTixOTCxsZWFyeXRpMDEsMTkwMDAwDQoxOTg4LExBTixOTCxoYXZlbmJyMDEsMTg1MDAwDQoxOTg4LExBTixOTCxoYW1pbGplMDEsODI1MDANCjE5ODgsTEFOLE5MLGJlbGNodGkwMSw3ODAwMA0KMTk4OCxMQU4sTkwsY3Jld3N0aTAxLDc4MDAwDQoxOTg4LExBTixOTCxoaWxsZXNoMDEsNzgwMDANCjE5ODgsTEFOLE5MLGJyeWFucmEwMSw3MjUwMA0KMTk4OCxMQU4sTkwsYnJlbm53aTAxLDYyNTAwDQoxOTg4LE1PTixOTCxyYWluZXRpMDEsMTY2NjMzMw0KMTk4OCxNT04sTkwsYnJvb2todTAxLDg1MDAwMA0KMTk4OCxNT04sTkwsd2FsbGF0aTAxLDg1MDAwMA0KMTk4OCxNT04sTkwsbWFydGlkZTAxLDczNTAwMA0KMTk4OCxNT04sTkwsYnVya2V0aTAxLDYyNTAwMA0KMTk4OCxNT04sTkwsaGVhdG9uZTAxLDYyNTAwMA0KMTk4OCxNT04sTkwsd2Vic3RtaTAxLDU1MDAwMA0KMTk4OCxNT04sTkwsc21pdGhicjAxLDUyNTAwMA0KMTk4OCxNT04sTkwsbWNjbHVibzAxLDUwMDAwMA0KMTk4OCxNT04sTkwsbWNnYWZhbjAxLDUwMDAwMA0KMTk4OCxNT04sTkwsZml0emdtaTAyLDMzNTAwMA0KMTk4OCxNT04sTkwsZm9sZXl0bzAyLDI1MDAwMA0KMTk4OCxNT04sTkwsZ2FsYXJhbjAxLDI0MDAwMA0KMTk4OCxNT04sTkwsbmV0dGxncjAxLDIwMDAwMA0KMTk4OCxNT04sTkwseW91bWFmbDAxLDE2MDAwMA0KMTk4OCxNT04sTkwsZW5nbGVkYTAxLDE1MDAwMA0KMTk4OCxNT04sTkwsd2lubmloZTAxLDE0MDAwMA0KMTk4OCxNT04sTkwsY2FuZGFjYTAxLDExMDAwMA0KMTk4OCxNT04sTkwsam9obnN3YTAzLDEwMDAwMA0KMTk4OCxNT04sTkwsc3RjbGFyYTAxLDEwMDAwMA0KMTk4OCxNT04sTkwscGFycmVqZTAxLDkwMDAwDQoxOTg4LE1PTixOTCxyZWVkamUwMiw5MDAwMA0KMTk4OCxNT04sTkwsc2hlcGhybzAxLDcyMDAwDQoxOTg4LE1PTixOTCxwZXJlenBhMDEsNzAwMDANCjE5ODgsTU9OLE5MLHJpdmVybHUwMSw3MDAwMA0KMTk4OCxOWU4sTkwsY2FydGVnYTAxLDIxNjA3MTQNCjE5ODgsTllOLE5MLGhlcm5ha2UwMSwxODUwMDAwDQoxOTg4LE5ZTixOTCxnb29kZWR3MDEsMTQwMDAwMA0KMTk4OCxOWU4sTkwsc3RyYXdkYTAxLDEzMjAwMDANCjE5ODgsTllOLE5MLGRhcmxpcm8wMSwxMDAwMDAwDQoxOTg4LE5ZTixOTCxtY3JleWtlMDEsOTc1MDAwDQoxOTg4LE5ZTixOTCx3aWxzb21vMDEsOTAwMDAwDQoxOTg4LE5ZTixOTCxvamVkYWJvMDEsNzI1MDAwDQoxOTg4LE5ZTixOTCxqb2huc2hvMDEsNjk1MDAwDQoxOTg4LE5ZTixOTCxiYWNrbXdhMDEsNjUwMDAwDQoxOTg4LE5ZTixOTCxtY2Rvd3JvMDEsNjE1MDAwDQoxOTg4LE5ZTixOTCxmZXJuYXNpMDEsNTgwMDAwDQoxOTg4LE5ZTixOTCx0ZXVmZXRpMDEsNTM3NTAwDQoxOTg4LE5ZTixOTCxtYXp6aWxlMDEsMzUwMDAwDQoxOTg4LE5ZTixOTCxkeWtzdGxlMDEsMzA1MDAwDQoxOTg4LE5ZTixOTCxhZ3VpbHJpMDEsMjk1MDAwDQoxOTg4LE5ZTixOTCxsZWFjaHRlMDEsMTkwMDAwDQoxOTg4LE5ZTixOTCxtYWdhZGRhMDEsMTEyNTAwDQoxOTg4LE5ZTixOTCx3YWx0ZWdlMDEsMTExNjAwDQoxOTg4LE5ZTixOTCxteWVyc3JhMDEsMTA4MDAwDQoxOTg4LE5ZTixOTCxjb25lZGEwMSw5MjUwMA0KMTk4OCxOWU4sTkwsbHlvbnNiYTAxLDkwMDAwDQoxOTg4LE5ZTixOTCxnaWJib2pvMDIsNzUwMDANCjE5ODgsTllOLE5MLGVsc3Rla2UwMSw2OTAwMA0KMTk4OCxOWU4sTkwsc2Fzc2VtYTAxLDYyNTAwDQoxOTg4LFBISSxOTCxzY2htaW1pMDEsMjI1MDAwMA0KMTk4OCxQSEksTkwsaGF5ZXN2bzAxLDEzMDAwMDANCjE5ODgsUEhJLE5MLHNhbXVlanUwMSwxMDYwMDAwDQoxOTg4LFBISSxOTCxwYXJyaWxhMDIsMTAwMDAwMA0KMTk4OCxQSEksTkwsYmVkcm9zdDAxLDkyNTAwMA0KMTk4OCxQSEksTkwsYnJhZGxwaDAxLDkwNTAwMA0KMTk4OCxQSEksTkwscmF3bGVzaDAxLDkwMDAwMA0KMTk4OCxQSEksTkwsdGVrdWxrZTAxLDg1MDAwMA0KMTk4OCxQSEksTkwscGFsbWVkYTAxLDY3NTAwMA0KMTk4OCxQSEksTkwsY2FybWFkbzAxLDQ1MDAwMA0KMTk4OCxQSEksTkwsZ3Jvc3NrZTAxLDQ1MDAwMA0KMTk4OCxQSEksTkwsZGVybmlibzAxLDQwMDAwMA0KMTk4OCxQSEksTkwseW91bmdtaTAxLDM5NTAwMA0KMTk4OCxQSEksTkwsYWd1YXlsdTAxLDM3NTAwMA0KMTk4OCxQSEksTkwsZ3Jvc3NncjAxLDMyMDAwMA0KMTk4OCxQSEksTkwsYWxtb25iaTAxLDI1MDAwMA0KMTk4OCxQSEksTkwsdGhvbXBtaTAyLDI0MDAwMA0KMTk4OCxQSEksTkwsamVsdHpzdDAxLDIxNTAwMA0KMTk4OCxQSEksTkwscnVzc2VqbzAyLDE1MDAwMA0KMTk4OCxQSEksTkwscnVmZmlicjAxLDE0MDAwMA0KMTk4OCxQSEksTkwsamFtZXNjaDAyLDEzODAwMA0KMTk4OCxQSEksTkwsY2FsaG9qZTAxLDEyNTAwMA0KMTk4OCxQSEksTkwsZGF1bHRkYTAxLDExNTAwMA0KMTk4OCxQSEksTkwscml0Y2h3YTAxLDc3NTAwDQoxOTg4LFBISSxOTCxtYWRkdW1pMDEsNzAwMDANCjE5ODgsUEhJLE5MLGZyb2h3dG8wMSw2MjUwMA0KMTk4OCxQSVQsTkwsdmFuc2xhbjAxLDgyNTAwMA0KMTk4OCxQSVQsTkwsZ290dGppMDEsNTAwMDAwDQoxOTg4LFBJVCxOTCxyb2JpbmplMDEsNDc1MDAwDQoxOTg4LFBJVCxOTCx3YWxrYm8wMSw0NTAwMDANCjE5ODgsUElULE5MLGNvbGVzZGEwMSwzNzUwMDANCjE5ODgsUElULE5MLGJyZWFtc2kwMSwzNjAwMDANCjE5ODgsUElULE5MLHJleW5vcmowMSwyOTAwMDANCjE5ODgsUElULE5MLGZpc2hlYnIwMSwyNTUwMDANCjE5ODgsUElULE5MLG9ydGl6anUwMSwyNTAwMDANCjE5ODgsUElULE5MLGJvbmlsYm8wMSwyMzAwMDANCjE5ODgsUElULE5MLGJvbmRzYmEwMSwyMjAwMDANCjE5ODgsUElULE5MLGxhdmFsbWkwMSwyMTUwMDANCjE5ODgsUElULE5MLGRpYXptaTAxLDE3MjUwMA0KMTk4OCxQSVQsTkwsZHJhYmVkbzAxLDE2MDAwMA0KMTk4OCxQSVQsTkwsZHVubmVtaTAxLDE0MjUwMA0KMTk4OCxQSVQsTkwsYmVsbGlyYTAxLDEzMDAwMA0KMTk4OCxQSVQsTkwsY2FuZ2VqbzAxLDEyNTAwMA0KMTk4OCxQSVQsTkwsa2lwcGVibzAxLDEyNTAwMA0KMTk4OCxQSVQsTkwsc21pbGVqbzAxLDEwNzUwMA0KMTk4OCxQSVQsTkwscGVkcmlhbDAxLDkxMDAwDQoxOTg4LFBJVCxOTCxqb25lc2JhMDEsOTAwMDANCjE5ODgsUElULE5MLHBhdHRlYm8wMSw4MDAwMA0KMTk4OCxQSVQsTkwsbGluZGpvMDEsNzUwMDANCjE5ODgsUElULE5MLGZlcm1pZmUwMSw2NzUwMA0KMTk4OCxQSVQsTkwsbWlsbGlyYTAxLDYyNTAwDQoxOTg4LFBJVCxOTCxwYWxhY3ZpMDEsNjI1MDANCjE5ODgsUElULE5MLHJvZHJpcnUwMSw2MjUwMA0KMTk4OCxTRE4sTkwsbW9yZWxrZTAxLDEyNDMzMzMNCjE5ODgsU0ROLE5MLHRlbXBsZ2EwMSwxMTQzNTAyDQoxOTg4LFNETixOTCx3aGl0c2VkMDEsMTAwMDAwMA0KMTk4OCxTRE4sTkwsc2hvd2VyMDEsODg3NTAwDQoxOTg4LFNETixOTCxnd3lubnRvMDEsODQwMDAwDQoxOTg4LFNETixOTCxkYXZpc21hMDEsNTIwMDAwDQoxOTg4LFNETixOTCxoYXdraWFuMDEsNDUzMDAwDQoxOTg4LFNETixOTCxtYXJ0aWNhMDEsNDQwMDAwDQoxOTg4LFNETixOTCxmbGFubnRpMDEsMzgxNjY3DQoxOTg4LFNETixOTCxrZW5uZXRlMDIsMzAwMDAwDQoxOTg4LFNETixOTCxicm93bmNoMDIsMjY1MDAwDQoxOTg4LFNETixOTCx3eW5uZW1hMDEsMjU1MDAwDQoxOTg4LFNETixOTCxrcnVram8wMSwyNTAwMDANCjE5ODgsU0ROLE5MLHJlYWR5cmEwMSwyMTAwMDANCjE5ODgsU0ROLE5MLHRob25kaTAxLDIwMDAwMA0KMTk4OCxTRE4sTkwsbWNjdWxsYTAxLDE5MDAwMA0KMTk4OCxTRE4sTkwsc2FudGliZTAxLDE2NzUwMA0KMTk4OCxTRE4sTkwsYm9va2VncjAxLDEzMDAwMA0KMTk4OCxTRE4sTkwsam9uZXNqaTAyLDk1MDAwDQoxOTg4LFNETixOTCxncmFudG1hMDEsOTAwMDANCjE5ODgsU0ROLE5MLGplZmZlc3QwMSw5MDAwMA0KMTk4OCxTRE4sTkwsbGVpcGVkYTAxLDc1MDAwDQoxOTg4LFNETixOTCxtYWNrc2gwMSw3MzUwMA0KMTk4OCxTRE4sTkwsbm9sdGVlcjAxLDcwMDAwDQoxOTg4LFNETixOTCxwYXJlbm1hMDEsNjUwMDANCjE5ODgsU0ROLE5MLGFibmVyc2gwMSw2MzUwMA0KMTk4OCxTRE4sTkwsc2llcnJjYTAxLDYyNTAwDQoxOTg4LFNGTixOTCxidXRsZWJyMDEsOTAwMDAwDQoxOTg4LFNGTixOTCxrcnVrb21pMDEsOTAwMDAwDQoxOTg4LFNGTixOTCxsZW9uYWplMDEsOTAwMDAwDQoxOTg4LFNGTixOTCxyb2JpbmRvMDEsOTAwMDAwDQoxOTg4LFNGTixOTCxyZXVzY3JpMDEsODAwMDAwDQoxOTg4LFNGTixOTCxoYW1tYWF0MDEsNzUwMDAwDQoxOTg4LFNGTixOTCxtYWxkb2NhMDEsNzUwMDAwDQoxOTg4LFNGTixOTCxkcmF2ZWRhMDEsNzAwMDAwDQoxOTg4LFNGTixOTCxnYXJyZXNjMDEsNjI1MDAwDQoxOTg4LFNGTixOTCxicmVubGJvMDEsNjAwMDAwDQoxOTg4LFNGTixOTCxsZWZmZWNyMDEsNTc1MDAwDQoxOTg4LFNGTixOTCx1cmliZWpvMDEsNTM1MDAwDQoxOTg4LFNGTixOTCxsYWNvc21pMDEsNTAwMDAwDQoxOTg4LFNGTixOTCxzcGVpZWNoMDEsNDAwMDAwDQoxOTg4LFNGTixOTCxnYXJuZXBoMDEsMzc1MDAwDQoxOTg4LFNGTixOTCxjbGFya3dpMDIsMzIwMDAwDQoxOTg4LFNGTixOTCx5b3VuZ2pvMDIsMzIwMDAwDQoxOTg4LFNGTixOTCxwcmljZWpvMDIsMzAwMDAwDQoxOTg4LFNGTixOTCxtaXRjaGtlMDEsMjM3NTAwDQoxOTg4LFNGTixOTCx0aG9tcHJvMDEsMjMyNTAwDQoxOTg4LFNGTixOTCxzcGlsbWhhMDEsMjI1MDAwDQoxOTg4LFNGTixOTCxhbGRyZW1pMDEsMTYwMDAwDQoxOTg4LFNGTixOTCxkb3duc2tlMDEsMTYwMDAwDQoxOTg4LFNGTixOTCxtZWx2aWJvMDEsMTQ1MDAwDQoxOTg4LFNGTixOTCxtZWxlbmZyMDEsNzAwMDANCjE5ODgsU0xOLE5MLHNtaXRob3owMSwyMzQwMDAwDQoxOTg4LFNMTixOTCxtY2dlZXdpMDEsMTIwMDAwMA0KMTk4OCxTTE4sTkwscGVuYXRvMDEsMTEwMDAwMA0KMTk4OCxTTE4sTkwsdHVkb3JqbzAxLDExMDAwMDANCjE5ODgsU0xOLE5MLGhvcm5lYm8wMSw5NTAwMDANCjE5ODgsU0xOLE5MLGhlcnJ0bzAxLDg3NTAwMA0KMTk4OCxTTE4sTkwsY294ZGEwMSw3NTAwMDANCjE5ODgsU0xOLE5MLGNvbGVtdmkwMSw3MDAwMDANCjE5ODgsU0xOLE5MLHBlbmRsdGUwMSw2NjAwMDANCjE5ODgsU0xOLE5MLGRheWxla2UwMSw2MTAwMDANCjE5ODgsU0xOLE5MLGZvcnNjYm8wMSw0MDAwMDANCjE5ODgsU0xOLE5MLGRlbGVvam8wMSwzNzUwMDANCjE5ODgsU0xOLE5MLG9xdWVuam8wMSwyNzUwMDANCjE5ODgsU0xOLE5MLGxha2VzdDAxLDI0MDAwMA0KMTk4OCxTTE4sTkwsd29ycmV0bzAxLDIwMDAwMA0KMTk4OCxTTE4sTkwsbGF3bGV0bzAxLDEyNTAwMA0KMTk4OCxTTE4sTkwsbWF0aGVncjAxLDEyNTAwMA0KMTk4OCxTTE4sTkwsdHVja2VlZDAxLDEyNTAwMA0KMTk4OCxTTE4sTkwsZm9yZGN1MDEsMTAwMDAwDQoxOTg4LFNMTixOTCxsYWdhbWkwMSwxMDAwMDANCjE5ODgsU0xOLE5MLG1hZ3Jham8wMSwxMDAwMDANCjE5ODgsU0xOLE5MLGxpbmRlamkwMSw3NTAwMA0KMTk4OCxTTE4sTkwsbW9ycmlqbzA3LDc1MDAwDQoxOTg4LFNMTixOTCx0ZXJyeXNjMDEsNzUwMDANCjE5ODgsU0xOLE5MLHBhZ25vdG8wMSw3MjUwMA0KMTk4OCxTTE4sTkwsYm9va2VybzAxLDcwMDAwDQoxOTg4LFNMTixOTCxoaWxsa2UwMSw2MjUwMA0KMTk4OSxCQUwsQUwscmlwa2VjYTAxLDI0NjY2NjcNCjE5ODksQkFMLEFMLGJyYWRscGgwMSwxMTUwMDAwDQoxOTg5LEJBTCxBTCxzY2htaWRhMDEsNjc1MDAwDQoxOTg5LEJBTCxBTCxzaGVldGxhMDEsNjYwMDAwDQoxOTg5LEJBTCxBTCx0aHVybW1hMDEsNDcwMDAwDQoxOTg5LEJBTCxBTCxvcnN1bGpvMDEsMzAwMDAwDQoxOTg5LEJBTCxBTCx0ZXR0bG1pMDEsMjkwMDAwDQoxOTg5LEJBTCxBTCxtZWx2aWJvMDEsMjMwMDAwDQoxOTg5LEJBTCxBTCxzY2h1cmkwMSwxODUwMDANCjE5ODksQkFMLEFMLGhvbG1hYnIwMSwxODI1MDANCjE5ODksQkFMLEFMLGhpY2tla2UwMSwxODAwMDANCjE5ODksQkFMLEFMLHRpYmJzamEwMSwxNzUwMDANCjE5ODksQkFMLEFMLGh1aXNtbWEwMSwxNTAwMDANCjE5ODksQkFMLEFMLGh1bGV0dGkwMSwxNTAwMDANCjE5ODksQkFMLEFMLHdpbGxpbWEwNSwxMjAwMDANCjE5ODksQkFMLEFMLHJpcGtlYmkwMSwxMDAwMDANCjE5ODksQkFMLEFMLGJhbGxhamUwMSw5NzAwMA0KMTk4OSxCQUwsQUwsZ29uemFyZTAxLDk1MDAwDQoxOTg5LEJBTCxBTCx0cmFiZWppMDEsOTAwMDANCjE5ODksQkFMLEFMLGRldmVybWkwMSw4MDAwMA0KMTk4OSxCQUwsQUwscGVyYXpvczAxLDc3NTAwDQoxOTg5LEJBTCxBTCxtaWxsaXJhMDEsNzUwMDANCjE5ODksQkFMLEFMLGpvaG5zZGEwNCw3MDUwMA0KMTk4OSxCQUwsQUwsb2xzb25ncjAxLDcwMDAwDQoxOTg5LEJBTCxBTCxmaW5sZXN0MDEsNjgwMDANCjE5ODksQkFMLEFMLHdvcnRoY3IwMSw2ODAwMA0KMTk4OSxCT1MsQUwscmljZWppMDEsMjM1NDc0OA0KMTk4OSxCT1MsQUwsY2xlbWVybzAyLDIzMDAwMDANCjE5ODksQk9TLEFMLGJvZ2dzd2EwMSwxODUwMDAwDQoxOTg5LEJPUyxBTCxzbWl0aGxlMDIsMTQyNTAwMA0KMTk4OSxCT1MsQUwsYm9kZGltaTAxLDEzNzUwMDANCjE5ODksQk9TLEFMLGdlZG1hcmkwMSwxMTUwMDAwDQoxOTg5LEJPUyxBTCxldmFuc2R3MDEsMTEwMDAwMA0KMTk4OSxCT1MsQUwsYmFycmVtYTAyLDc3NTAwMA0KMTk4OSxCT1MsQUwsZXNhc2tuaTAxLDU3MDAwMA0KMTk4OSxCT1MsQUwsYm95ZG9pMDEsNTUwMDAwDQoxOTg5LEJPUyxBTCxzbWl0aG1pMDMsNTQwMDAwDQoxOTg5LEJPUyxBTCxncmVlbm1pMDEsNTAwMDAwDQoxOTg5LEJPUyxBTCxjZXJvbnJpMDEsNDkwMDAwDQoxOTg5LEJPUyxBTCxsYW1wZGUwMSwzODAwMDANCjE5ODksQk9TLEFMLGhlZXBkYTAxLDM2NTAwMA0KMTk4OSxCT1MsQUwsbXVycGhybzAxLDI5NTAwMA0KMTk4OSxCT1MsQUwsZ2FyZG53ZTAxLDI4NTAwMA0KMTk4OSxCT1MsQUwsYnVya3NlbDAxLDI3NTAwMA0KMTk4OSxCT1MsQUwscm9taW5rZTAxLDIwMDAwMA0KMTk4OSxCT1MsQUwscmVlZGpvMDEsMTc1MDAwDQoxOTg5LEJPUyxBTCxkb3Bzb2pvMDEsMTI1MDAwDQoxOTg5LEJPUyxBTCxyaXZlcmx1MDEsMTA1MDAwDQoxOTg5LEJPUyxBTCxrdXRjaHJhMDEsOTAwMDANCjE5ODksQk9TLEFMLHF1aW50Y2EwMSw3MTAwMA0KMTk4OSxCT1MsQUwsaGV0emVlcjAxLDY4MDAwDQoxOTg5LEJPUyxBTCxyb21lcmVkMDEsNjgwMDANCjE5ODksQ0FMLEFMLGRhdmlzY2gwMSwxNDc1MDAwDQoxOTg5LENBTCxBTCx3aXR0bWkwMSwxNDAwMDAwDQoxOTg5LENBTCxBTCxkb3duaWJyMDEsMTI1MDAwMA0KMTk4OSxDQUwsQUwsYmx5bGViZTAxLDEyMjUwMDANCjE5ODksQ0FMLEFMLHBhcnJpbGEwMiwxMDAwMDAwDQoxOTg5LENBTCxBTCx3YXNoaWNsMDEsOTc1MDAwDQoxOTg5LENBTCxBTCxqb3luZXdhMDEsOTIwMDAwDQoxOTg5LENBTCxBTCxzY2hvZmRpMDIsOTA4MzMzDQoxOTg5LENBTCxBTCxyYXlqbzAxLDg1MDAwMA0KMTk4OSxDQUwsQUwsbWludG9ncjAxLDgzMDAwMA0KMTk4OSxDQUwsQUwscGV0cnlkYTAxLDc4NTAwMA0KMTk4OSxDQUwsQUwsYXJtYXN0bzAxLDUyNTAwMA0KMTk4OSxDQUwsQUwsaG93ZWxqYTAyLDQ3NTAwMA0KMTk4OSxDQUwsQUwsbWNjYXNraTAxLDQ2MDAwMA0KMTk4OSxDQUwsQUwsd2hpdGVkZTAzLDM4MDAwMA0KMTk4OSxDQUwsQUwsc2Nocm9iaTAxLDM3MjUwMA0KMTk4OSxDQUwsQUwsZnJhc2V3aTAxLDIwMDAwMA0KMTk4OSxDQUwsQUwsbWNjbHVibzAxLDIwMDAwMA0KMTk4OSxDQUwsQUwsZmlubGVjaDAxLDE4MDAwMA0KMTk4OSxDQUwsQUwsaGFydmVicjAxLDE3MDAwMA0KMTk4OSxDQUwsQUwsaG9mZm1nbDAxLDE2MDAwMA0KMTk4OSxDQUwsQUwsY2xhcmt0ZTAxLDg1MDAwDQoxOTg5LENBTCxBTCxhYmJvdGppMDEsNjgwMDANCjE5ODksQ0FMLEFMLGFuZGVya2UwMSw2ODAwMA0KMTk4OSxDQUwsQUwsbW9udGVyaTAxLDY4MDAwDQoxOTg5LENBTCxBTCxyb3NlYm8wMSw2ODAwMA0KMTk4OSxDSEEsQUwsZmlza2NhMDEsMTIwMDAwMA0KMTk4OSxDSEEsQUwsZ3VpbGxvejAxLDgwMDAwMA0KMTk4OSxDSEEsQUwsd2Fsa2VncjAxLDcxODgxMA0KMTk4OSxDSEEsQUwscmV1c3NqZTAxLDU5MDAwMA0KMTk4OSxDSEEsQUwsa2l0dGxybzAxLDU1MDAwMA0KMTk4OSxDSEEsQUwsdGhpZ3BibzAxLDQ2NzUwMA0KMTk4OSxDSEEsQUwsY2FsZGVpdjAxLDM4MDAwMA0KMTk4OSxDSEEsQUwsbG9uZ2JpMDEsMzU3NTAwDQoxOTg5LENIQSxBTCxseW9uc3N0MDEsMzI1MDAwDQoxOTg5LENIQSxBTCxwYXNxdWRhMDEsMjQwMDAwDQoxOTg5LENIQSxBTCxwZXJlem1lMDEsMjI4NTAwDQoxOTg5LENIQSxBTCxib3N0b2RhMDEsMjEwMDAwDQoxOTg5LENIQSxBTCxtYW5yaWZyMDEsMTkyNTAwDQoxOTg5LENIQSxBTCxraW5nZXIwMSwxNjUwMDANCjE5ODksQ0hBLEFMLGthcmtvcm8wMSwxMDYwMDANCjE5ODksQ0hBLEFMLGdhbGxhZGEwMSw4MDAwMA0KMTk4OSxDSEEsQUwscm9zZW5zdDAxLDgwMDAwDQoxOTg5LENIQSxBTCxqb2huc2xhMDMsNzY2MDANCjE5ODksQ0hBLEFMLGhpbGxlc2gwMSw3NTAwMA0KMTk4OSxDSEEsQUwsbWNjYXJ0bzAzLDc1MDAwDQoxOTg5LENIQSxBTCxwYWxsZG8wMSw3MjAwMA0KMTk4OSxDSEEsQUwscGF0dGVrZTAxLDcyMDAwDQoxOTg5LENIQSxBTCxoaWJiYWdyMDEsNjgwMDANCjE5ODksQ0hBLEFMLG1hcnRpY2EwMiw2ODAwMA0KMTk4OSxDSEEsQUwsbW9ybWFydTAxLDY4MDAwDQoxOTg5LENMRSxBTCxjYXJ0ZWpvMDEsMTYzMDAwMA0KMTk4OSxDTEUsQUwsamFjb2JicjAxLDk2MjUwMA0KMTk4OSxDTEUsQUwsb3Jvc2NqZTAxLDgyNTAwMA0KMTk4OSxDTEUsQUwsb2JyaWVwZTAzLDcwMDAwMA0KMTk4OSxDTEUsQUwsYmxhY2tidTAyLDYwMDAwMA0KMTk4OSxDTEUsQUwsY2FuZGl0bzAxLDUwNTAwMA0KMTk4OSxDTEUsQUwsbWNkb3dvZDAxLDM3NTAwMA0KMTk4OSxDTEUsQUwsc255ZGVjbzAyLDM0MDAwMA0KMTk4OSxDTEUsQUwsYWxsZW5uZTAxLDMyNTAwMA0KMTk4OSxDTEUsQUwsam9uZXNkbzAxLDMwNzUwMA0KMTk4OSxDTEUsQUwsYmFpbGVzYzAxLDMwMDAwMA0KMTk4OSxDTEUsQUwsc3dpbmRncjAxLDI4NTAwMA0KMTk4OSxDTEUsQUwsYWd1YXlsdTAxLDI3NTAwMA0KMTk4OSxDTEUsQUwsYWxsYW5hbjAxLDIzNTAwMA0KMTk4OSxDTEUsQUwsc2tpbm5qbzAxLDIwMDAwMA0KMTk4OSxDTEUsQUwsZmFycmVqbzAzLDE3NTAwMA0KMTk4OSxDTEUsQUwseWV0dHJpMDEsMTU1MDAwDQoxOTg5LENMRSxBTCx5b3VuZ21pMDEsMTUwMDAwDQoxOTg5LENMRSxBTCxicm93bmplMDEsMTI1MDAwDQoxOTg5LENMRSxBTCxjbGFya2RhMDUsOTc1MDANCjE5ODksQ0xFLEFMLGZlcm1pZmUwMSw4NTAwMA0KMTk4OSxDTEUsQUwsa29tbWlicjAxLDgwMDAwDQoxOTg5LENMRSxBTCx3b2puYWVkMDEsNzc1MDANCjE5ODksQ0xFLEFMLGhpbnpvdG8wMSw3NTAwMA0KMTk4OSxDTEUsQUwsbmljaG9ybzAyLDczNTAwDQoxOTg5LENMRSxBTCxiZWxsZWFsMDEsNjgwMDANCjE5ODksQ0xFLEFMLG9saW5zdDAxLDY4MDAwDQoxOTg5LERFVCxBTCxtb3JyaWphMDIsMTk4OTAwMA0KMTk4OSxERVQsQUwsbHlubmZyMDEsMTU5MDAwMA0KMTk4OSxERVQsQUwsbW9yZWxrZTAxLDE0ODMzMzMNCjE5ODksREVULEFMLGhlcm5hd2kwMSwxMzEwMDAwDQoxOTg5LERFVCxBTCx0cmFtbWFsMDEsMTEwMDAwMA0KMTk4OSxERVQsQUwsd2hpdGFsbzAxLDEwMjUwMDANCjE5ODksREVULEFMLGFsZXhhZG8wMSwxMDAwMDAwDQoxOTg5LERFVCxBTCx0YW5hbmZyMDEsOTI1MDAwDQoxOTg5LERFVCxBTCxsZW1vbmNoMDEsODI4NTcxDQoxOTg5LERFVCxBTCxodWRzb2NoMDIsNTI1MDAwDQoxOTg5LERFVCxBTCxwZXR0aWdhMDEsNDQwMDAwDQoxOTg5LERFVCxBTCxiZXJnbWRhMDEsNDM3NTAwDQoxOTg5LERFVCxBTCxzaGVyaXBhMDEsNDMwMDAwDQoxOTg5LERFVCxBTCxoZWF0aG1pMDIsNDI1MDAwDQoxOTg5LERFVCxBTCx3aWxsaWZyMDEsNDI1MDAwDQoxOTg5LERFVCxBTCxoZW5uZW1pMDEsMTk1MDAwDQoxOTg5LERFVCxBTCxub2tlc21hMDEsMTk1MDAwDQoxOTg5LERFVCxBTCxyb2JpbmplMDIsMTc1MDAwDQoxOTg5LERFVCxBTCx3aWxsaWtlMDIsMTE3NTAwDQoxOTg5LERFVCxBTCxnaWJzb3BhMDEsOTI1MDANCjE5ODksREVULEFMLGJlYXJkZGEwMSw5MDAwMA0KMTk4OSxERVQsQUwsYnJ1bWxtaTAyLDc1MDAwDQoxOTg5LERFVCxBTCxzZWFyY3N0MDEsNjkwMDANCjE5ODksREVULEFMLGR1Ym9pYnIwMSw2ODAwMA0KMTk4OSxERVQsQUwscml0emtlMDEsNjgwMDANCjE5ODksREVULEFMLHN0cmFuZG8wMSw2ODAwMA0KMTk4OSxLQ0EsQUwscXVpc2VkYTAxLDI1MTUzNjINCjE5ODksS0NBLEFMLHdpbHNvd2kwMiwyMTEyMjA1DQoxOTg5LEtDQSxBTCxicmV0dGdlMDEsMjAwNTAwMA0KMTk4OSxLQ0EsQUwsZ3ViaWNtYTAxLDEzNzUwMDANCjE5ODksS0NBLEFMLHNhYmVyYnIwMSwxMzUwMDAwDQoxOTg5LEtDQSxBTCxsZWlicmNoMDEsMTI1MDAwMA0KMTk4OSxLQ0EsQUwsdGFydGFkYTAxLDEwMzUwMDANCjE5ODksS0NBLEFMLHdoaXRlZnIwMSwxMDAwMDAwDQoxOTg5LEtDQSxBTCxiYW5uaWZsMDEsOTAwMDAwDQoxOTg5LEtDQSxBTCxib29uZWJvMDEsODgzMDAxDQoxOTg5LEtDQSxBTCx0YWJsZXBhMDEsODI1MDAwDQoxOTg5LEtDQSxBTCxqYWNrc2JvMDEsNjEwMDAwDQoxOTg5LEtDQSxBTCxmYXJyc3QwMSw2MDUwMDANCjE5ODksS0NBLEFMLHN0aWxsa3UwMSw0NjAwMDANCjE5ODksS0NBLEFMLGJ1Y2tuYmkwMSw0MDAwMDANCjE5ODksS0NBLEFMLHNlaXR6a2UwMSwzNDAwMDANCjE5ODksS0NBLEFMLHdlbGxtYnIwMSwxNTUwMDANCjE5ODksS0NBLEFMLGNyYXdmc3QwMSwxNTAwMDANCjE5ODksS0NBLEFMLGVpc2VuamkwMSwxMjAwMDANCjE5ODksS0NBLEFMLG1vbnRnamUwMSw5NTAwMA0KMTk4OSxLQ0EsQUwscGVjb3RiaTAxLDg1MDAwDQoxOTg5LEtDQSxBTCxtYWNmYW1pMDEsNzA1MDANCjE5ODksS0NBLEFMLHNhbmNoaXMwMSw3MDUwMA0KMTk4OSxLQ0EsQUwsYXF1aW5sdTAxLDY4MDAwDQoxOTg5LEtDQSxBTCxnb3Jkb3RvMDEsNjgwMDANCjE5ODksS0NBLEFMLGx1ZWNrcmkwMSw2ODAwMA0KMTk4OSxLQ0EsQUwsd2ludGVtYTAxLDY4MDAwDQoxOTg5LE1JTixBTCx2aW9sYWZyMDEsMjc2NjY2Ng0KMTk4OSxNSU4sQUwsZ2FldHRnYTAxLDI0MDAwMDANCjE5ODksTUlOLEFMLHB1Y2tla2kwMSwyMDAwMDAwDQoxOTg5LE1JTixBTCxocmJla2tlMDEsMTU2MDAwMA0KMTk4OSxNSU4sQUwscmF3bGVzaDAxLDk1MDAwMA0KMTk4OSxNSU4sQUwsYmFja213YTAxLDc1MDAwMA0KMTk4OSxNSU4sQUwsbGF1ZG50aTAxLDcwMDAwMA0KMTk4OSxNSU4sQUwsYmVyZW5qdTAxLDYyNTAwMA0KMTk4OSxNSU4sQUwsZ2xhZGRkYTAxLDYxMDAwMA0KMTk4OSxNSU4sQUwsZ2FnbmVncjAxLDU3MDAwMA0KMTk4OSxNSU4sQUwsYnVzaHJhMDEsNTUwMDAwDQoxOTg5LE1JTixBTCxjYXN0aWNhMDEsNDMyNTAwDQoxOTg5LE1JTixBTCxhbmRlcmFsMDIsMjAwMDAwDQoxOTg5LE1JTixBTCxkd3llcmppMDEsMjAwMDAwDQoxOTg5LE1JTixBTCxtb3Nlc2pvMDEsMTgwMDAwDQoxOTg5LE1JTixBTCxuZXdtYWFsMDEsMTgwMDAwDQoxOTg5LE1JTixBTCxoYXJwZWJyMDEsMTQ3NTAwDQoxOTg5LE1JTixBTCxsYXJraWdlMDEsMTQ1MDAwDQoxOTg5LE1JTixBTCxzaGllbHN0MDEsMTI1MDAwDQoxOTg5LE1JTixBTCxzbWl0aHJvMDEsMTAwMDAwDQoxOTg5LE1JTixBTCxkcnVtbXRpMDEsNjgwMDANCjE5ODksTUlOLEFMLGR5ZXJtaTAxLDY4MDAwDQoxOTg5LE1JTixBTCxndXRocm1hMDEsNjgwMDANCjE5ODksTUlOLEFMLGhhbGVjaDAxLDY4MDAwDQoxOTg5LE1JTixBTCx3YXluZWdhMDEsNjgwMDANCjE5ODksTUw0LEFMLG1vbGl0cGEwMSwyMTAwMDAwDQoxOTg5LE1MNCxBTCxoaWd1ZXRlMDEsMTUyNTAwMA0KMTk4OSxNTDQsQUwseW91bnRybzAxLDExNTAwMDANCjE5ODksTUw0LEFMLGdhbnRuamkwMSw5MDAwMDANCjE5ODksTUw0LEFMLHBsZXNhZGEwMSw3NjUwMDANCjE5ODksTUw0LEFMLGRlZXJybzAxLDc2MDAwMA0KMTk4OSxNTDQsQUwsYnJvY2tncjAxLDcwMDAwMA0KMTk4OSxNTDQsQUwsd2VnbWFiaTAxLDQyNTAwMA0KMTk4OSxNTDQsQUwsbmlldmVqdTAxLDM3MDAwMA0KMTk4OSxNTDQsQUwsY3JpbWNoMDEsMjQ1MDAwDQoxOTg5LE1MNCxBTCxmcmFuY3RlMDEsMjQ1MDAwDQoxOTg5LE1MNCxBTCxtaXJhYnBhMDEsMjMwMDAwDQoxOTg5LE1MNCxBTCxib3Npb2NoMDEsMjI3NTAwDQoxOTg5LE1MNCxBTCxzdmV1bWRhMDEsMjI1MDAwDQoxOTg5LE1MNCxBTCxicmFnZ2dsMDEsMjA1MDAwDQoxOTg5LE1MNCxBTCxzdXJob2JqMDEsMTg1MDAwDQoxOTg5LE1MNCxBTCxrcnVlZ2JpMDEsMTUwMDAwDQoxOTg5LE1MNCxBTCxwb2xpZGd1MDEsMTMwMDAwDQoxOTg5LE1MNCxBTCxmaWxlcnRvMDEsMTI1MDAwDQoxOTg5LE1MNCxBTCxmZWxkZW1pMDEsOTc1MDANCjE5ODksTUw0LEFMLG1leWVyam8wMSw5NTAwMA0KMTk4OSxNTDQsQUwsb2JyaWVjaDAxLDkwMDAwDQoxOTg5LE1MNCxBTCxzaGVmZmdhMDEsOTAwMDANCjE5ODksTUw0LEFMLGtudWRzbWEwMSw4NTAwMA0KMTk4OSxNTDQsQUwsY2x1dHRicjAxLDczMDAwDQoxOTg5LE1MNCxBTCxiYXRlc2JpMDEsNjgwMDANCjE5ODksTUw0LEFMLG5hdmFyamEwMSw2ODAwMA0KMTk4OSxNTDQsQUwscGV0ZXJqZTAxLDY4MDAwDQoxOTg5LE1MNCxBTCxzcGllcmJpMDEsNjgwMDANCjE5ODksTUw0LEFMLHZhdWdoZ3IwMSw2ODAwMA0KMTk4OSxOWUEsQUwsbWF0dGlkbzAxLDIyMDAwMDANCjE5ODksTllBLEFMLGhlbmRlcmkwMSwyMTIwMDAwDQoxOTg5LE5ZQSxBTCx3aW5maWRhMDEsMTk1ODY1Mg0KMTk4OSxOWUEsQUwscmlnaGVkYTAxLDE0NTAwMDANCjE5ODksTllBLEFMLHNheHN0MDEsMTE1MDAwMA0KMTk4OSxOWUEsQUwsaGF3a2lhbjAxLDkzMzMzMw0KMTk4OSxOWUEsQUwsaGFsbG1lMDEsOTI1MDAwDQoxOTg5LE5ZQSxBTCxsYXBvaWRhMDEsODI1MDAwDQoxOTg5LE5ZQSxBTCxjYW5kZWpvMDEsODAwMDAwDQoxOTg5LE5ZQSxBTCxwaGVscGtlMDEsNjU1MDAwDQoxOTg5LE5ZQSxBTCxzbGF1Z2RvMDEsNjUwMDAwDQoxOTg5LE5ZQSxBTCxwYWdsaW1pMDEsNTc1MDAwDQoxOTg5LE5ZQSxBTCxzYW50YXJhMDEsNTAwMDAwDQoxOTg5LE5ZQSxBTCxicm9va3RvMDEsNDc1MDAwDQoxOTg5LE5ZQSxBTCxtY2N1bGxhMDEsNDYwMDAwDQoxOTg5LE5ZQSxBTCxwbHVua2VyMDEsMjMyMzkwDQoxOTg5LE5ZQSxBTCxndWV0dGxlMDEsMTM3NTAwDQoxOTg5LE5ZQSxBTCxraWVmZXN0MDEsOTUwMDANCjE5ODksTllBLEFMLGNhcnljaDAxLDkwMDAwDQoxOTg5LE5ZQSxBTCxqZWZmZXN0MDEsOTAwMDANCjE5ODksTllBLEFMLGJsb3dlbWkwMSw4MjAwMA0KMTk4OSxOWUEsQUwsa2VsbHlybzAxLDgwMDAwDQoxOTg5LE5ZQSxBTCxsZWl0ZWFsMDEsODAwMDANCjE5ODksTllBLEFMLHZlbGFycmEwMSw3MjUwMA0KMTk4OSxOWUEsQUwsZ2VyZW5ibzAxLDcwMDAwDQoxOTg5LE5ZQSxBTCxkb3Rzb3JpMDEsNjgwMDANCjE5ODksTllBLEFMLGVzcGluYWwwMSw2ODAwMA0KMTk4OSxOWUEsQUwsbWV1bGVoZTAxLDY4MDAwDQoxOTg5LE5ZQSxBTCxwYXJrZWNsMDEsNjgwMDANCjE5ODksTllBLEFMLHF1aXJramEwMSw2ODAwMA0KMTk4OSxOWUEsQUwsd2FyZGdhMDEsNjgwMDANCjE5ODksT0FLLEFMLGNhbnNlam8wMSwxNjAwMDAwDQoxOTg5LE9BSyxBTCxsYW5zZmNhMDEsMTM3NTAwMA0KMTk4OSxPQUssQUwsbW9vcmVtaTAxLDEyOTE2NjYNCjE5ODksT0FLLEFMLHdlbGNoYm8wMSwxMjA4MzMzDQoxOTg5LE9BSyxBTCxzdGV3YWRhMDEsMTIwMDAwMA0KMTk4OSxPQUssQUwscGFya2VkYTAxLDExMjUwMDANCjE5ODksT0FLLEFMLGVja2VyZGUwMSwxMDYyNTAwDQoxOTg5LE9BSyxBTCxoZW5kZWRhMDEsODUwMDAwDQoxOTg5LE9BSyxBTCxob25leXJpMDEsNjUwMDAwDQoxOTg5LE9BSyxBTCxuZWxzb2dlMDEsNjE1MDAwDQoxOTg5LE9BSyxBTCxoYXNzZXJvMDEsNjAwMDAwDQoxOTg5LE9BSyxBTCxkYXZpc3N0MDIsNTg3NTAwDQoxOTg5LE9BSyxBTCx5b3VuZ2N1MDEsNTcyNTAwDQoxOTg5LE9BSyxBTCxtY2d3aW1hMDEsNTEwNTAwDQoxOTg5LE9BSyxBTCxwaGlsbHRvMDIsNDUwMDAwDQoxOTg5LE9BSyxBTCx5b3VuZ21hMDEsNDI1MDAwDQoxOTg5LE9BSyxBTCxzdGVpbnRlMDEsMzUwMDAwDQoxOTg5LE9BSyxBTCxnYWxsZW1pMDEsMjA3NTAwDQoxOTg5LE9BSyxBTCxwb2xvbmx1MDEsMTgyNTAwDQoxOTg5LE9BSyxBTCx3ZWlzc3dhMDEsMTgwMDAwDQoxOTg5LE9BSyxBTCxqYXZpZXN0MDEsMTc3NTAwDQoxOTg5LE9BSyxBTCxjYWRhcmdyMDEsMTU0MDcxDQoxOTg5LE9BSyxBTCxidXJuc3RvMDIsMTAwMDAwDQoxOTg5LE9BSyxBTCxiZWFuZWJpMDEsNzA1MDANCjE5ODksT0FLLEFMLGJsYW5rbGEwMiw2ODAwMA0KMTk4OSxTRUEsQUwsZGF2aXNhbDAxLDE0MDAwMDANCjE5ODksU0VBLEFMLGxhbmdzbWEwMSwxMzUwMDAwDQoxOTg5LFNFQSxBTCxsZW9uYWplMDEsMTAwMDAwMA0KMTk4OSxTRUEsQUwsYmFsYm9zdDAxLDgwMDAwMA0KMTk4OSxTRUEsQUwsbmllZGV0bzAxLDgwMDAwMA0KMTk4OSxTRUEsQUwscmV5bm9oYTAxLDYzNTAwMA0KMTk4OSxTRUEsQUwscHJlc2xqaTAxLDU5NTAwMA0KMTk4OSxTRUEsQUwsY29sZXNkYTAxLDU2MDAwMA0KMTk4OSxTRUEsQUwsYnJhZGxzYzAxLDMzMDAwMA0KMTk4OSxTRUEsQUwsdmFsbGVkYTAxLDMxNTAwMA0KMTk4OSxTRUEsQUwsamFja3NtaTAyLDI2NTAwMA0KMTk4OSxTRUEsQUwscmVlZGplMDEsMjY1MDAwDQoxOTg5LFNFQSxBTCxjb3R0b2hlMDEsMjUwMDAwDQoxOTg5LFNFQSxBTCxiYW5raHNjMDEsMjQ1MDAwDQoxOTg5LFNFQSxBTCxzd2lmdGJpMDIsMTk1MDAwDQoxOTg5LFNFQSxBTCxzY2hvb21pMDEsMTQ1MDAwDQoxOTg5LFNFQSxBTCx3YWx0ZWdlMDEsMTIwMDAwDQoxOTg5LFNFQSxBTCxidWhuZWphMDEsODAwMDANCjE5ODksU0VBLEFMLGNvbXN0a2UwMSw4MDAwMA0KMTk4OSxTRUEsQUwsZGlhem1hMDEsNzc1MDANCjE5ODksU0VBLEFMLGJyaWxlZ3IwMSw2ODAwMA0KMTk4OSxTRUEsQUwsZ3JpZmZrZTAyLDY4MDAwDQoxOTg5LFNFQSxBTCxoYW5zb2VyMDEsNjgwMDANCjE5ODksU0VBLEFMLHZpenF1b20wMSw2ODAwMA0KMTk4OSxURVgsQUwscnlhbm5vMDEsMTgwMDAwMA0KMTk4OSxURVgsQUwsZnJhbmNqdTAxLDEzMDAwMDANCjE5ODksVEVYLEFMLGJhaW5laGEwMSwxMjA0MjgxDQoxOTg5LFRFWCxBTCxmbGV0Y3NjMDEsMTIwMDAwMA0KMTk4OSxURVgsQUwsaG91Z2hjaDAxLDkwMDAwMA0KMTk4OSxURVgsQUwscnVzc2VqZTAxLDQ4MDAwMA0KMTk4OSxURVgsQUwsaW5jYXZwZTAxLDQ3NTAwMA0KMTk4OSxURVgsQUwsc3VuZGJqaTAxLDQ3NTAwMA0KMTk4OSxURVgsQUwsZ3VhbnRjZTAxLDQ0NTAwMA0KMTk4OSxURVgsQUwsYnVlY2hzdDAxLDQzMDAwMA0KMTk4OSxURVgsQUwsZ3V6bWFqbzAxLDQyNTAwMA0KMTk4OSxURVgsQUwsbGVhY2hyaTAxLDM1MDAwMA0KMTk4OSxURVgsQUwsc2llcnJydTAxLDM1MDAwMA0KMTk4OSxURVgsQUwscGV0cmFnZTAxLDMyNTAwMA0KMTk4OSxURVgsQUwsbWNtdXJjcjAxLDI3NTAwMA0KMTk4OSxURVgsQUwsbW95ZXJqYTAxLDIwNTAwMA0KMTk4OSxURVgsQUwsd2l0dGJvMDEsMjA1MDAwDQoxOTg5LFRFWCxBTCxjb3JyZWVkMDEsMTMwMDAwDQoxOTg5LFRFWCxBTCxlc3B5Y2UwMSw5NzUwMA0KMTk4OSxURVgsQUwsc3RhbmxtaTAyLDk1MDAwDQoxOTg5LFRFWCxBTCxqZWZmY21pMDEsODMwMDANCjE5ODksVEVYLEFMLGt1bmtlamUwMSw4MDAwMA0KMTk4OSxURVgsQUwsaGFsbGRyMDEsNzQwMDANCjE5ODksVEVYLEFMLG1pbGFjYm8wMSw3MzAwMA0KMTk4OSxURVgsQUwsYnJvd25rZTAxLDcyNTAwDQoxOTg5LFRFWCxBTCxrcmV1dGNoMDEsNzI1MDANCjE5ODksVEVYLEFMLGRhdWdoamEwMSw2ODAwMA0KMTk4OSxURVgsQUwsbWllbGtnYTAxLDY4MDAwDQoxOTg5LFRFWCxBTCxyb2dlcmtlMDEsNjgwMDANCjE5ODksVEVYLEFMLHNvc2FzYTAxLDY4MDAwDQoxOTg5LFRPUixBTCxiZWxsZ2UwMiwxOTAwMDAwDQoxOTg5LFRPUixBTCxrZXlqaTAxLDE3NjY2NjYNCjE5ODksVE9SLEFMLHN0aWViZGEwMSwxNTAwMDAwDQoxOTg5LFRPUixBTCxmZXJuYXRvMDEsMTQwMDAwMA0KMTk4OSxUT1IsQUwsbW9zZWJsbDAxLDEzNzUwMDANCjE5ODksVE9SLEFMLGJhcmZpamUwMSwxMzAwMDAwDQoxOTg5LFRPUixBTCxoZW5rZXRvMDEsOTc1MDAwDQoxOTg5LFRPUixBTCxmbGFuYW1pMDEsODg3NTAwDQoxOTg5LFRPUixBTCx3aGl0dGVyMDEsODAwMDAwDQoxOTg5LFRPUixBTCxicmVubGJvMDEsNjgwMDAwDQoxOTg5LFRPUixBTCxtdWxsaXJhMDEsNjUwMDAwDQoxOTg5LFRPUixBTCxncnViZWtlMDEsNDYyNTAwDQoxOTg5LFRPUixBTCxjZXJ1dGpvMDEsNDE3MDAwDQoxOTg5LFRPUixBTCxtY2dyaWZyMDEsMzAwMDAwDQoxOTg5LFRPUixBTCxlaWNoaG1hMDEsMjcyNTAwDQoxOTg5LFRPUixBTCxtdXNzZWplMDEsMjAwMDAwDQoxOTg5LFRPUixBTCxsYXdsZXRvMDEsMTc1MDAwDQoxOTg5LFRPUixBTCxudW5lemVkMDEsMTc1MDAwDQoxOTg5LFRPUixBTCx3YXJkZHUwMSwxNjg1MDANCjE5ODksVE9SLEFMLGxlZW1hMDIsMTYwMDAwDQoxOTg5LFRPUixBTCxsaXJpYW5lMDEsMTEyNTAwDQoxOTg5LFRPUixBTCx3ZWxsc2RhMDEsMTA3MDAwDQoxOTg5LFRPUixBTCxib3JkZXBhMDEsMTAxMDAwDQoxOTg5LFRPUixBTCxzdG90dHRvMDEsODUwMDANCjE5ODksVE9SLEFMLGR1Y2V5cm8wMSw4NDAwMA0KMTk4OSxUT1IsQUwsY2FzdGl0bzAyLDcxNTAwDQoxOTg5LFRPUixBTCxmZWxpeGp1MDEsNjgwMDANCjE5ODksVE9SLEFMLGdvenpvbWEwMSw2ODAwMA0KMTk4OSxBVEwsTkwsbXVycGhkYTA1LDIwMDAwMDANCjE5ODksQVRMLE5MLHN1dHRlYnIwMSwxNzI5MTY3DQoxOTg5LEFUTCxOTCxkYXZpc2pvMDIsODg2NjY3DQoxOTg5LEFUTCxOTCxhY2tlcmppMDEsNjg4MDAwDQoxOTg5LEFUTCxOTCxwZXJyeWdlMDEsNjYyNTAwDQoxOTg5LEFUTCxOTCxzbWl0aHphMDEsNjUwMDAwDQoxOTg5LEFUTCxOTCx0aG9tYWFuMDEsNTEwMDAwDQoxOTg5LEFUTCxOTCxldmFuc2RhMDEsNDE1MDAwDQoxOTg5LEFUTCxOTCxqYW1lc2RpMDEsNDAwMDAwDQoxOTg5LEFUTCxOTCxzbWl0aGxvMDEsNDAwMDAwDQoxOTg5LEFUTCxOTCxiZW5lZGJyMDEsMzk1MDAwDQoxOTg5LEFUTCxOTCxzbWl0aHBlMDIsMjc1MDAwDQoxOTg5LEFUTCxOTCxhc3NlbnBhMDEsMjcxMDAwDQoxOTg5LEFUTCxOTCxoYWxsYWwwMiwyNTAwMDANCjE5ODksQVRMLE5MLGJvZXZlam8wMSwxNjcwMDANCjE5ODksQVRMLE5MLHJ1c3Nlam8wMiwxNDUwMDANCjE5ODksQVRMLE5MLHp1dmVscGEwMSwxNDUwMDANCjE5ODksQVRMLE5MLGFsdmFyam8wMSwxMjUwMDANCjE5ODksQVRMLE5MLG9uZWFscmEwMSwxMjUwMDANCjE5ODksQVRMLE5MLGdsYXZpdG8wMiwxMTc1MDANCjE5ODksQVRMLE5MLHRyZWFkamUwMSw5NTAwMA0KMTk4OSxBVEwsTkwsc21vbHRqbzAxLDg2MDAwDQoxOTg5LEFUTCxOTCxibGF1c2plMDEsODIwMDANCjE5ODksQVRMLE5MLGdyZWdndG8wMSw4MjAwMA0KMTk4OSxBVEwsTkwsYmVycm9nZTAxLDcwNTAwDQoxOTg5LEFUTCxOTCxjbGFyeW1hMDEsNjgwMDANCjE5ODksQVRMLE5MLGxpbGxpZGUwMSw2ODAwMA0KMTk4OSxBVEwsTkwsdmFsZGVzZTAxLDY4MDAwDQoxOTg5LEFUTCxOTCx3ZXRoZWplMDEsNjgwMDANCjE5ODksQVRMLE5MLHdoaXRlZWQwMiw2ODAwMA0KMTk4OSxDSE4sTkwsc3V0Y2xyaTAxLDIzNDAwMDANCjE5ODksQ0hOLE5MLGRhd3NvYW4wMSwyMTAwMDAwDQoxOTg5LENITixOTCxzYW5kYnJ5MDEsOTUwMDAwDQoxOTg5LENITixOTCxzYW5kZXNjMDEsODAwMDAwDQoxOTg5LENITixOTCxkdW5zdHNoMDEsNTUwMDAwDQoxOTg5LENITixOTCx3ZWJzdG1pMDEsNTUwMDAwDQoxOTg5LENITixOTCx3aWxrZWN1MDEsNTAwMDAwDQoxOTg5LENITixOTCxsYXd2YTAxLDQyNTAwMA0KMTk4OSxDSE4sTkwsc2NoaXJjYTAxLDQwMDAwMA0KMTk4OSxDSE4sTkwsd2lsbGltaTAyLDM3NzUwMA0KMTk4OSxDSE4sTkwsbWFkZHVncjAxLDI3NTAwMA0KMTk4OSxDSE4sTkwscGFsbWVyYTAxLDIxMjAwMA0KMTk4OSxDSE4sTkwsZ3JhY2VtYTAxLDE0MDAwMA0KMTk4OSxDSE4sTkwsa2lsZ3VwYTAxLDEzMDAwMA0KMTk4OSxDSE4sTkwscmFtb3NkbzAxLDEzMDAwMA0KMTk4OSxDSE4sTkwsYmllbGVtaTAxLDEyMjUwMA0KMTk4OSxDSE4sTkwsbGFuY2FsZTAxLDEyMDAwMA0KMTk4OSxDSE4sTkwsYmVycnlkYTAxLDExNTAwMA0KMTk4OSxDSE4sTkwsbWNjbGVsbDAxLDkxMDAwDQoxOTg5LENITixOTCxnaXJhcmpvMDEsNjgwMDANCjE5ODksQ0hOLE5MLHNtaXRoZHcwMSw2ODAwMA0KMTk4OSxDSE4sTkwsd2FsdG9qZTAxLDY4MDAwDQoxOTg5LENITixOTCx3aWxzb3N0MDEsNjgwMDANCjE5ODksQ0hOLE5MLHdyb25hcmkwMSw2ODAwMA0KMTk4OSxDSU4sTkwsZGF2aXNlcjAxLDE1MTUwMDANCjE5ODksQ0lOLE5MLGphY2tzZGEwMiwxMTUwMDAwDQoxOTg5LENJTixOTCxmcmFuY2pvMDEsMTA2NzUwMA0KMTk4OSxDSU4sTkwsYnJvd250bzA1LDEwMjUwMDANCjE5ODksQ0lOLE5MLGRpYXpibzAxLDkwMDAwMA0KMTk4OSxDSU4sTkwsbWFobGVyaTAxLDc5MDAwMA0KMTk4OSxDSU4sTkwsb2VzdGVybzAxLDY1MDAwMA0KMTk4OSxDSU4sTkwscmlqb2pvMDEsNDU3NTAwDQoxOTg5LENJTixOTCxyb2JpbnJvMDEsMzUwMDAwDQoxOTg5LENJTixOTCxkYW5pZWthMDEsMzI1MDAwDQoxOTg5LENJTixOTCxncmlmZmtlMDEsMzIwMDAwDQoxOTg5LENJTixOTCx5b3VuZ2pvMDIsMzIwMDAwDQoxOTg5LENJTixOTCxsYXJraWJhMDEsMzAyNTAwDQoxOTg5LENJTixOTCx3aW5uaWhlMDEsMjMwMDAwDQoxOTg5LENJTixOTCxjb2xsaWRhMDIsMjI1MDAwDQoxOTg5LENJTixOTCxvbmVpbHBhMDEsMjE1MDAwDQoxOTg5LENJTixOTCxyZWVkamUwMiwxNzUwMDANCjE5ODksQ0lOLE5MLGJlbnppdG8wMSwxNjAwMDANCjE5ODksQ0lOLE5MLHNhYm9jaDAxLDE1NTAwMA0KMTk4OSxDSU4sTkwsYmlydHN0aTAxLDg1MDAwDQoxOTg5LENJTixOTCxkaWJibHJvMDEsODUwMDANCjE5ODksQ0lOLE5MLHF1aW5vbHUwMSw4NTAwMA0KMTk4OSxDSU4sTkwsY2hhcmxubzAxLDcyNTAwDQoxOTg5LENJTixOTCxtYWRpc3NjMDEsNzAwMDANCjE5ODksQ0lOLE5MLHJvb21lcm8wMSw3MDAwMA0KMTk4OSxDSU4sTkwsb2xpdmVqbzAxLDY4MDAwDQoxOTg5LENJTixOTCxyaWNoYWplMDEsNjgwMDANCjE5ODksQ0lOLE5MLHJvZXNsbWkwMSw2ODAwMA0KMTk4OSxDSU4sTkwsc2N1ZGRzYzAxLDY4MDAwDQoxOTg5LEhPVSxOTCxzY290dG1pMDMsMTMwMDAwMA0KMTk4OSxIT1UsTkwsY2xhbmNqaTAxLDEyMjUwMDANCjE5ODksSE9VLE5MLHNtaXRoZGEwMiwxMTAwMDAwDQoxOTg5LEhPVSxOTCxkYXZpc2dsMDEsMTA4NTAwMA0KMTk4OSxIT1UsTkwscmFtaXJyYTAxLDEwNTAwMDANCjE5ODksSE9VLE5MLGZvcnNjYm8wMSw5NzUwMDANCjE5ODksSE9VLE5MLHB1aGx0ZTAxLDk1MDAwMA0KMTk4OSxIT1UsTkwsYmFzc2tlMDEsOTQwMDAwDQoxOTg5LEhPVSxOTCxkb3JhbmJpMDIsOTMzMDAwDQoxOTg5LEhPVSxOTCxyaG9kZXJpMDEsOTAwMDAwDQoxOTg5LEhPVSxOTCxkYXJ3aWRhMDEsODU1MDAwDQoxOTg5LEhPVSxOTCxhZ29zdGp1MDEsNjEwMDAwDQoxOTg5LEhPVSxOTCxyZXlub2NyMDEsNjAwMDAwDQoxOTg5LEhPVSxOTCxhbmRlcmxhMDIsNDc1MDAwDQoxOTg5LEhPVSxOTCxkZXNoYWppMDEsNDcwMDAwDQoxOTg5LEhPVSxOTCx0cmV2aWFsMDEsMzUwMDAwDQoxOTg5LEhPVSxOTCxzY2hhdGRhMDEsMjQ1MDAwDQoxOTg5LEhPVSxOTCxzcGlsbWhhMDEsMTUwMDAwDQoxOTg5LEhPVSxOTCx5b3VuZ2dlMDIsMTUwMDAwDQoxOTg5LEhPVSxOTCxjYW1pbmtlMDEsMTI5MDAwDQoxOTg5LEhPVSxOTCxwb3J0dW1hMDEsOTUwMDANCjE5ODksSE9VLE5MLG1lYWRzZGEwMSw5MjUwMA0KMTk4OSxIT1UsTkwsYmlnZ2ljcjAxLDc4MDAwDQoxOTg5LEhPVSxOTCxhbnRob2VyMDEsNjgwMDANCjE5ODksSE9VLE5MLGtuZXBwYm8wMSw2ODAwMA0KMTk4OSxIT1UsTkwsbWV5ZXJicjAxLDY4MDAwDQoxOTg5LEhPVSxOTCx5ZWxkaWVyMDEsNjgwMDANCjE5ODksTEFOLE5MLGhlcnNob3IwMSwyNzY2NjY3DQoxOTg5LExBTixOTCxtdXJyYWVkMDIsMjMzMTA2Mg0KMTk4OSxMQU4sTkwsdmFsZW5mZTAxLDE4NTAwMDANCjE5ODksTEFOLE5MLGdpYnNva2kwMSwxMzMzMzMzDQoxOTg5LExBTixOTCx0dWRvcmpvMDEsMTMwMDAwMA0KMTk4OSxMQU4sTkwsbWFyc2htaTAyLDExMDAwMDANCjE5ODksTEFOLE5MLHNjaW9zbWkwMSwxMTAwMDAwDQoxOTg5LExBTixOTCxncmlmZmFsMDEsMTAwMDAwMA0KMTk4OSxMQU4sTkwsZGF2aXNtaTAyLDk4NzUwMA0KMTk4OSxMQU4sTkwsaG93ZWxqYTAxLDkyNTAwMA0KMTk4OSxMQU4sTkwscGVuYWFsMDEsODc1MDAwDQoxOTg5LExBTixOTCxyYW5kb3dpMDEsODc1MDAwDQoxOTg5LExBTixOTCxsZWFyeXRpMDEsNjcwMDAwDQoxOTg5LExBTixOTCxzaGVsYmpvMDEsNTUwMDAwDQoxOTg5LExBTixOTCxoYXRjaG1pMDEsNDUwMDAwDQoxOTg5LExBTixOTCxhbmRlcmRhMDIsNDIwMDAwDQoxOTg5LExBTixOTCxkZW1wc3JpMDEsNDIwMDAwDQoxOTg5LExBTixOTCxtb3JnYW1pMDEsMzc1MDAwDQoxOTg5LExBTixOTCxzdHViYmZyMDEsMzQ1MDAwDQoxOTg5LExBTixOTCxiZWxjaHRpMDEsMjI1MDAwDQoxOTg5LExBTixOTCxkdW5jYW1hMDEsMjAwMDAwDQoxOTg5LExBTixOTCxoYW1pbGplMDEsMTUwMDAwDQoxOTg5LExBTixOTCxzZWFyYXJhMDEsMTQxMDAwDQoxOTg5LExBTixOTCxjcmV3c3RpMDEsMTMwMDAwDQoxOTg5LExBTixOTCxnb256YWpvMDIsOTAwMDANCjE5ODksTEFOLE5MLHNoYXJwbWkwMSw5MDAwMA0KMTk4OSxMQU4sTkwsbWFydGlyYTAyLDg1MDAwDQoxOTg5LExBTixOTCxnd3lubmNoMDEsODAwMDANCjE5ODksTEFOLE5MLGhhcnJpbGUwMSw3MTAwMA0KMTk4OSxMQU4sTkwsaG9ydG9yaTAxLDY4MDAwDQoxOTg5LExBTixOTCx3ZXR0ZWpvMDEsNjgwMDANCjE5ODksTU9OLE5MLHJhaW5ldGkwMSwyMTA0ODg5DQoxOTg5LE1PTixOTCxyZWFyZGplMDEsMTQwMDAwMA0KMTk4OSxNT04sTkwsYnJvb2todTAxLDk1MDAwMA0KMTk4OSxNT04sTkwsd2FsbGF0aTAxLDk1MDAwMA0KMTk4OSxNT04sTkwsZ2FsYXJhbjAxLDg2NTAwMA0KMTk4OSxNT04sTkwsZ3Jvc3NrZTAxLDg1MDAwMA0KMTk4OSxNT04sTkwscGVyZXpwYTAxLDg1MDAwMA0KMTk4OSxNT04sTkwsYnVya2V0aTAxLDc0MDAwMA0KMTk4OSxNT04sTkwsbWFydGlkZTAxLDczNTAwMA0KMTk4OSxNT04sTkwsbWNnYWZhbjAxLDYzMjUwMA0KMTk4OSxNT04sTkwsb3dlbnNwMDEsNTY1MDAwDQoxOTg5LE1PTixOTCxzbWl0aGJyMDEsNTUwMDAwDQoxOTg5LE1PTixOTCxoZXNrZWpvMDEsNDE3MDAwDQoxOTg5LE1PTixOTCxmaXR6Z21pMDIsMzM1MDAwDQoxOTg5LE1PTixOTCxmb2xleXRvMDIsMzIwMDAwDQoxOTg5LE1PTixOTCxhbGRyZW1pMDEsMjAyNTAwDQoxOTg5LE1PTixOTCxnYXJjaWRhMDEsMjAwMDAwDQoxOTg5LE1PTixOTCxtYXJ0aWRhMDEsMTg1MDAwDQoxOTg5LE1PTixOTCxuaXhvbm90MDEsMTc3NTAwDQoxOTg5LE1PTixOTCxqb2huc3dhMDMsMTc3MDAwDQoxOTg5LE1PTixOTCxzYW50b25lMDEsOTg1MDANCjE5ODksTU9OLE5MLGh1ZGxlcmUwMSw5MDAwMA0KMTk4OSxNT04sTkwscGFyZWRqbzAxLDcwNTAwDQoxOTg5LE1PTixOTCxqb2huc3JhMDUsNzAwMDANCjE5ODksTU9OLE5MLGdyaXNzbWEwMiw2ODAwMA0KMTk4OSxNT04sTkwsaGFycmlnZTAxLDY4MDAwDQoxOTg5LE1PTixOTCxrcmFtZXJhMDEsNjgwMDANCjE5ODksTU9OLE5MLHRob21wcmkwMSw2ODAwMA0KMTk4OSxOWU4sTkwsZ29vZGVkdzAxLDI0MTY2NjcNCjE5ODksTllOLE5MLGNhcnRlZ2EwMSwyMTk4NTcyDQoxOTg5LE5ZTixOTCxoZXJuYWtlMDEsMjAwMDAwMA0KMTk4OSxOWU4sTkwsZGFybGlybzAxLDE5NjY2NjYNCjE5ODksTllOLE5MLG1jcmV5a2UwMSwxOTY2NjY2DQoxOTg5LE5ZTixOTCxzdHJhd2RhMDEsMTQ5NTAwMA0KMTk4OSxOWU4sTkwsd2lsc29tbzAxLDEwMDAwMDANCjE5ODksTllOLE5MLG9qZWRhYm8wMSw5MjUwMDANCjE5ODksTllOLE5MLGZlcm5hc2kwMSw3OTUwMDANCjE5ODksTllOLE5MLGpvaG5zaG8wMSw3NzI1MDANCjE5ODksTllOLE5MLHRldWZldGkwMSw1OTAwMDANCjE5ODksTllOLE5MLGR5a3N0bGUwMSw1NzUwMDANCjE5ODksTllOLE5MLGxlYWNodGUwMSw0MjUwMDANCjE5ODksTllOLE5MLGFhc2VkbzAxLDQwMDAwMA0KMTk4OSxOWU4sTkwsbWF6emlsZTAxLDM1MDAwMA0KMTk4OSxOWU4sTkwsY29uZWRhMDEsMzMyNTAwDQoxOTg5LE5ZTixOTCxhZ3VpbHJpMDEsMzEwMDAwDQoxOTg5LE5ZTixOTCxteWVyc3JhMDEsMzAwMDAwDQoxOTg5LE5ZTixOTCxtYWdhZGRhMDEsMTcwMDAwDQoxOTg5LE5ZTixOTCxvbWFsbHRvMDEsMTQ1MDAwDQoxOTg5LE5ZTixOTCxlbHN0ZWtlMDEsMTQwMDAwDQoxOTg5LE5ZTixOTCxseW9uc2JhMDEsMTE1MDAwDQoxOTg5LE5ZTixOTCxqZWZmZWdyMDEsMTAwNTAwDQoxOTg5LE5ZTixOTCxzYXNzZW1hMDEsOTUwMDANCjE5ODksTllOLE5MLG1pbGxla2UwMSw4NTAwMA0KMTk4OSxOWU4sTkwsaW5uaXNqZTAxLDc4MDAwDQoxOTg5LE5ZTixOTCxjYXJyZW1hMDEsNzAwMDANCjE5ODksTllOLE5MLHdlc3RkYTAxLDY4MDAwDQoxOTg5LFBISSxOTCxiZWRyb3N0MDEsMTQ1MDAwMA0KMTk4OSxQSEksTkwsc2FtdWVqdTAxLDE0NTAwMDANCjE5ODksUEhJLE5MLGhheWVzdm8wMSwxMzAwMDAwDQoxOTg5LFBISSxOTCxoZXJydG8wMSw4MjUwMDANCjE5ODksUEhJLE5MLG1jZG93cm8wMSw3NjIwMDANCjE5ODksUEhJLE5MLHRob25kaTAxLDYwMDAwMA0KMTk4OSxQSEksTkwsY2FybWFkbzAxLDU3NTAwMA0KMTk4OSxQSEksTkwsZGVybmlibzAxLDQwMDAwMA0KMTk4OSxQSEksTkwsbXVycGhkdzAxLDQwMDAwMA0KMTk4OSxQSEksTkwsaGFycmlncjAxLDMyNTAwMA0KMTk4OSxQSEksTkwsZGF1bHRkYTAxLDI4NTAwMA0KMTk4OSxQSEksTkwsbGFrZXN0MDEsMjgwMDAwDQoxOTg5LFBISSxOTCxqZWx0enN0MDEsMjYwMDAwDQoxOTg5LFBISSxOTCxqYW1lc2NoMDIsMjMwMDAwDQoxOTg5LFBISSxOTCxob3dlbGtlMDEsMjI1MDAwDQoxOTg5LFBISSxOTCxwYXJyZWplMDEsMjEyMDAwDQoxOTg5LFBISSxOTCxvbnRpdnN0MDIsMTgwMDAwDQoxOTg5LFBISSxOTCxydWZmaWJyMDEsMTc1MDAwDQoxOTg5LFBISSxOTCxuaWV0b3RvMDEsMTE1MDAwDQoxOTg5LFBISSxOTCxmb3JkY3UwMSwxMTEwMDANCjE5ODksUEhJLE5MLGpvcmRhcmkwMiw5NTAwMA0KMTk4OSxQSEksTkwsam9uZXNybzAyLDc0MDAwDQoxOTg5LFBISSxOTCxmcmVlbW1hMDIsNzEwMDANCjE5ODksUEhJLE5MLGZyb2h3dG8wMSw2ODAwMA0KMTk4OSxQSEksTkwsaGF5ZXNjaDAxLDY4MDAwDQoxOTg5LFBISSxOTCxtY3dpbGxhMDEsNjgwMDANCjE5ODksUElULE5MLHZhbnNsYW4wMSwyMTUwMDAwDQoxOTg5LFBJVCxOTCx3YWxrYm8wMSw4MDAwMDANCjE5ODksUElULE5MLHJvYmluamUwMSw3NTAwMDANCjE5ODksUElULE5MLHdpbHNvZ2wwMSw3NTAwMDANCjE5ODksUElULE5MLGJvbmlsYm8wMSw3NDAwMDANCjE5ODksUElULE5MLG9iZXJra2UwMSw3MjUwMDANCjE5ODksUElULE5MLGhlYXRvbmUwMSw2NTAwMDANCjE5ODksUElULE5MLGdvdHRqaTAxLDYwMDAwMA0KMTk4OSxQSVQsTkwsYnJlYW1zaTAxLDUxMDAwMA0KMTk4OSxQSVQsTkwscmVkdXNnYTAxLDUwMDAwMA0KMTk4OSxQSVQsTkwsaGF0Y2hiaTAxLDQ5NTAwMA0KMTk4OSxQSVQsTkwsbGF2YWxtaTAxLDQ4MjUwMA0KMTk4OSxQSVQsTkwscmV5bm9yajAxLDQyNTAwMA0KMTk4OSxQSVQsTkwsZmlzaGVicjAxLDQwNDAwMA0KMTk4OSxQSVQsTkwsYm9uZHNiYTAxLDM2MDAwMA0KMTk4OSxQSVQsTkwsZHJhYmVkbzAxLDMyNTAwMA0KMTk4OSxQSVQsTkwsb3J0aXpqdTAxLDMwMDAwMA0KMTk4OSxQSVQsTkwsa2lwcGVibzAxLDIzMDAwMA0KMTk4OSxQSVQsTkwsc21pbGVqbzAxLDIzMDAwMA0KMTk4OSxQSVQsTkwsYmVsbGlyYTAxLDIyNTAwMA0KMTk4OSxQSVQsTkwsZHVubmVtaTAxLDIyMjUwMA0KMTk4OSxQSVQsTkwsbGluZGpvMDEsMTgwMDAwDQoxOTg5LFBJVCxOTCxjYW5nZWpvMDEsMTUyNTAwDQoxOTg5LFBJVCxOTCxiYWlyZG8wMSwxNTAwMDANCjE5ODksUElULE5MLGJlbGxqYTAxLDg1MDAwDQoxOTg5LFBJVCxOTCxkaXN0ZWJlMDEsODUwMDANCjE5ODksUElULE5MLGxhbmRyYmkwMSw3NTAwMA0KMTk4OSxQSVQsTkwsa2luZ2plMDEsNjgwMDANCjE5ODksUElULE5MLHJlZWRyaTAxLDY4MDAwDQoxOTg5LFNETixOTCxjbGFya2phMDEsMjAwMDAwMA0KMTk4OSxTRE4sTkwsaHVyc3RicjAxLDE3MzMzMzMNCjE5ODksU0ROLE5MLHNob3dlcjAxLDE0NTAwMDANCjE5ODksU0ROLE5MLGd3eW5udG8wMSwxMTQxNjY3DQoxOTg5LFNETixOTCx3aGl0c2VkMDEsMTA1MDAwMA0KMTk4OSxTRE4sTkwscmFzbXVkZTAxLDgwMjUwMA0KMTk4OSxTRE4sTkwsdGVycmV3YTAxLDc3NTAwMA0KMTk4OSxTRE4sTkwsdGVtcGxnYTAxLDcwMDAwMA0KMTk4OSxTRE4sTkwsZGF2aXNtYTAxLDYwMDAwMA0KMTk4OSxTRE4sTkwsbWFydGljYTAxLDQ5MDAwMA0KMTk4OSxTRE4sTkwsa3J1a2pvMDEsNDUwMDAwDQoxOTg5LFNETixOTCxmbGFubnRpMDEsNDAwMDAwDQoxOTg5LFNETixOTCxzYWxhemx1MDEsNDAwMDAwDQoxOTg5LFNETixOTCxyZWFkeXJhMDEsMzcwMDAwDQoxOTg5LFNETixOTCx3eW5uZW1hMDEsMzUwMDAwDQoxOTg5LFNETixOTCxzYW50aWJlMDEsMzQ1MDAwDQoxOTg5LFNETixOTCxjbGVtZXBhMDEsMjA1MDAwDQoxOTg5LFNETixOTCxncmFudG1hMDEsMTU1MDAwDQoxOTg5LFNETixOTCxhbG9tYXJvMDEsMTUwMDAwDQoxOTg5LFNETixOTCxwYXJlbm1hMDEsMTAwMDAwDQoxOTg5LFNETixOTCxqYWNrc2RhMDMsOTAwMDANCjE5ODksU0ROLE5MLGFibmVyc2gwMSw3NzUwMA0KMTk4OSxTRE4sTkwsY29yYWpvMDEsNzc1MDANCjE5ODksU0ROLE5MLHJvYmVyYmkwMSw3NDAwMA0KMTk4OSxTRE4sTkwsaGFycmlncjAyLDcyNTAwDQoxOTg5LFNETixOTCxiZW5lc2FuMDEsNjgwMDANCjE5ODksU0ROLE5MLG11cnBoZGEwNiw2ODAwMA0KMTk4OSxTRk4sTkwscmV1c2NyaTAxLDExNzUwMDANCjE5ODksU0ZOLE5MLGNsYXJrd2kwMiwxMTI1MDAwDQoxOTg5LFNGTixOTCxsYWNvc21pMDEsMTEwMDAwMA0KMTk4OSxTRk4sTkwsaGFtbWFhdDAxLDk4MzMzNA0KMTk4OSxTRk4sTkwsYnV0bGVicjAxLDkwMDAwMA0KMTk4OSxTRk4sTkwsbWFsZG9jYTAxLDkwMDAwMA0KMTk4OSxTRk4sTkwscm9iaW5kbzAxLDkwMDAwMA0KMTk4OSxTRk4sTkwsa3J1a29taTAxLDg3NTAwMA0KMTk4OSxTRk4sTkwsa2VubmV0ZTAyLDg1MDAwMA0KMTk4OSxTRk4sTkwsZHJhdmVkYTAxLDc1MDAwMA0KMTk4OSxTRk4sTkwsZ2FycmVzYzAxLDcwNjAwMA0KMTk4OSxTRk4sTkwsdXJpYmVqbzAxLDY4NzUwMA0KMTk4OSxTRk4sTkwsbWl0Y2hrZTAxLDYxMDAwMA0KMTk4OSxTRk4sTkwsbGVmZmVjcjAxLDYwMDAwMA0KMTk4OSxTRk4sTkwsdGhvbXBybzAxLDUzNjAwMA0KMTk4OSxTRk4sTkwscmlsZXNlcjAxLDQ3MDAwMA0KMTk4OSxTRk4sTkwsc3BlaWVjaDAxLDQyNTAwMA0KMTk4OSxTRk4sTkwsZG93bnNrZTAxLDMxNTAwMA0KMTk4OSxTRk4sTkwsam9uZXN0cjAxLDMwMDAwMA0KMTk4OSxTRk4sTkwsYmVzdGthMDEsMTA1MDAwDQoxOTg5LFNGTixOTCxuaXhvbmRvMDEsMTAyNTAwDQoxOTg5LFNGTixOTCxtdWxob3RlMDEsOTUwMDANCjE5ODksU0ZOLE5MLHdpbGxpbWEwNCw5NTAwMA0KMTk4OSxTRk4sTkwsbWFud2FraTAxLDc4MDAwDQoxOTg5LFNGTixOTCxiYXRoZWJpMDEsNzU1MDANCjE5ODksU0ZOLE5MLGdvc3NhcmkwMSw2ODAwMA0KMTk4OSxTRk4sTkwsbGl0dG9ncjAxLDY4MDAwDQoxOTg5LFNGTixOTCxwcmljZWpvMDIsNjgwMDANCjE5ODksU0xOLE5MLHNtaXRob3owMSwyMjQwMDAwDQoxOTg5LFNMTixOTCxndWVycnBlMDEsMTgzMzMzMw0KMTk4OSxTTE4sTkwsbWNnZWV3aTAxLDE0MDAwMDANCjE5ODksU0xOLE5MLGJydW5hdG8wMSwxMjQwMDAwDQoxOTg5LFNMTixOTCxwZW5hdG8wMSwxMjIwMDAwDQoxOTg5LFNMTixOTCxkYXlsZWtlMDEsOTI1MDAwDQoxOTg5LFNMTixOTCx3b3JyZXRvMDEsODc1MDAwDQoxOTg5LFNMTixOTCxjb2xlbXZpMDEsNzc1MDAwDQoxOTg5LFNMTixOTCxwZW5kbHRlMDEsNzEwMDAwDQoxOTg5LFNMTixOTCxkZWxlb2pvMDEsNjYyNTAwDQoxOTg5LFNMTixOTCx3YWxsaWRlMDEsNjE1MDAwDQoxOTg5LFNMTixOTCxjb3hkYTAxLDYwMDAwMA0KMTk4OSxTTE4sTkwsb3F1ZW5qbzAxLDUyNTAwMA0KMTk4OSxTTE4sTkwsdGhvbXBtaTAyLDUwNTAwMA0KMTk4OSxTTE4sTkwsZGlwaW5mcjAxLDQ1MjUwMA0KMTk4OSxTTE4sTkwsbWFncmFqbzAxLDMyMDAwMA0KMTk4OSxTTE4sTkwsZHVyaGFsZTAxLDE3NTAwMA0KMTk4OSxTTE4sTkwscG93ZXJ0ZTAxLDE1MDAwMA0KMTk4OSxTTE4sTkwsbWF0aGVncjAxLDEyNTAwMA0KMTk4OSxTTE4sTkwsdGVycnlzYzAxLDEwNTAwMA0KMTk4OSxTTE4sTkwsbW9ycmlqbzA3LDk1MDAwDQoxOTg5LFNMTixOTCxwYWdub3RvMDEsOTAwMDANCjE5ODksU0xOLE5MLGNvc3Rlam8wMSw4NTAwMA0KMTk4OSxTTE4sTkwsaGVpbmtkbzAxLDg1MDAwDQoxOTg5LFNMTixOTCxoaWxsa2UwMSw3MDAwMA0KMTk4OSxTTE4sTkwsam9uZXN0aTAyLDcwMDAwDQoxOTg5LFNMTixOTCx6ZWlsZXRvMDEsNjgwMDANCjE5ODksU0xOLE5MLHF1aXNlZGEwMSw2MjUwMA0KMTk5MCxCQUwsQUwscmlwa2VjYTAxLDEzMTY2NjcNCjE5OTAsQkFMLEFMLGJyYWRscGgwMSwxMTUwMDAwDQoxOTkwLEJBTCxBTCx0ZXR0bG1pMDEsNzUwMDAwDQoxOTkwLEJBTCxBTCxvcnN1bGpvMDEsNjEwMDAwDQoxOTkwLEJBTCxBTCxtZWx2aWJvMDEsMzUwMDAwDQoxOTkwLEJBTCxBTCxob2x0b2JyMDEsMzQ3NTAwDQoxOTkwLEJBTCxBTCx0aWJic2phMDEsMzM1MDAwDQoxOTkwLEJBTCxBTCxwcmljZWpvMDIsMzI1MDAwDQoxOTkwLEJBTCxBTCx3aWxsaW1hMDUsMjc1MDAwDQoxOTkwLEJBTCxBTCxvbHNvbmdyMDEsMjcwMDAwDQoxOTkwLEJBTCxBTCxoaWNrZWtlMDEsMjUwMDAwDQoxOTkwLEJBTCxBTCxtY2RvbmJlMDEsMjQxNjY3DQoxOTkwLEJBTCxBTCxtaWxhY2JvMDEsMjM1MDAwDQoxOTkwLEJBTCxBTCxyaXBrZWJpMDEsMjE1MDAwDQoxOTkwLEJBTCxBTCxodWxldHRpMDEsMjA3NTAwDQoxOTkwLEJBTCxBTCx3b3J0aGNyMDEsMjA3NTAwDQoxOTkwLEJBTCxBTCxiYWxsYWplMDEsMjAwMDAwDQoxOTkwLEJBTCxBTCxnb256YXJlMDEsMTkxMjUwDQoxOTkwLEJBTCxBTCxqZWZmZXN0MDEsMTU1MDAwDQoxOTkwLEJBTCxBTCxtaWxsaXJhMDEsMTU1MDAwDQoxOTkwLEJBTCxBTCxkZXZlcm1pMDEsMTQ1MDAwDQoxOTkwLEJBTCxBTCxhbmRlcmJyMDEsMTIwMDAwDQoxOTkwLEJBTCxBTCxiYXV0aWpvMDEsMTIwMDAwDQoxOTkwLEJBTCxBTCxicnVtbG1pMDIsMTIwMDAwDQoxOTkwLEJBTCxBTCxmaW5sZXN0MDEsMTIwMDAwDQoxOTkwLEJBTCxBTCxoYXJuaXBlMDEsMTIwMDAwDQoxOTkwLEJBTCxBTCxqb2huc2RhMDQsMTEzNTAwDQoxOTkwLEJBTCxBTCxtZWxlbmZyMDEsMTEyMDAwDQoxOTkwLEJBTCxBTCxtaXRjaGpvMDIsMTExMDAwDQoxOTkwLEJBTCxBTCx3ZXN0b21pMDEsMTA0NTAwDQoxOTkwLEJBTCxBTCxzY2hpbGN1MDEsMTAzMDAwDQoxOTkwLEJBTCxBTCxob2lsZWNoMDEsMTAyMDAwDQoxOTkwLEJBTCxBTCxzbWl0aG1pMDUsMTAyMDAwDQoxOTkwLEJBTCxBTCxiZWxsanUwMSwxMDAwMDANCjE5OTAsQkFMLEFMLGJyb3dubWEwMywxMDAwMDANCjE5OTAsQkFMLEFMLGdvbWV6bGUwMiwxMDAwMDANCjE5OTAsQkFMLEFMLHRlbGZvYW4wMSwxMDAwMDANCjE5OTAsQk9TLEFMLGNsZW1lcm8wMiwyNjAwMDAwDQoxOTkwLEJPUyxBTCxib2dnc3dhMDEsMTkwMDAwMA0KMTk5MCxCT1MsQUwscGVuYXRvMDEsMTcwMDAwMA0KMTk5MCxCT1MsQUwscmVhcmRqZTAxLDE2MzMzMzMNCjE5OTAsQk9TLEFMLGV2YW5zZHcwMSwxNTAwMDAwDQoxOTkwLEJPUyxBTCxncmVlbm1pMDEsMTIyNTAwMA0KMTk5MCxCT1MsQUwsc21pdGhsZTAyLDEyMDAwMDANCjE5OTAsQk9TLEFMLGJhcnJlbWEwMiwxMDAwMDAwDQoxOTkwLEJPUyxBTCxnZWRtYXJpMDEsOTIwMDAwDQoxOTkwLEJPUyxBTCxtdXJwaHJvMDEsNzUwMDAwDQoxOTkwLEJPUyxBTCxsYW1wZGUwMSw3MjUwMDANCjE5OTAsQk9TLEFMLGJvZGRpbWkwMSw2NzUwMDANCjE5OTAsQk9TLEFMLGhlZXBkYTAxLDU5NTAwMA0KMTk5MCxCT1MsQUwsaGFycmlncjAxLDU5MDAwMA0KMTk5MCxCT1MsQUwsYnVya3NlbDAxLDQ3NTAwMA0KMTk5MCxCT1MsQUwsZ2FyZG53ZTAxLDM2MDAwMA0KMTk5MCxCT1MsQUwscmF3bGVzaDAxLDM1MDAwMA0KMTk5MCxCT1MsQUwscmVlZGpvMDEsMzAwMDAwDQoxOTkwLEJPUyxBTCxkb3Bzb2pvMDEsMjY1MDAwDQoxOTkwLEJPUyxBTCxyaXZlcmx1MDEsMjUwMDAwDQoxOTkwLEJPUyxBTCxyb21pbmtlMDEsMjUwMDAwDQoxOTkwLEJPUyxBTCxrdXRjaHJhMDEsMTc1MDAwDQoxOTkwLEJPUyxBTCxib2x0b3RvMDEsMTM1MDAwDQoxOTkwLEJPUyxBTCxxdWludGNhMDEsMTMwMDAwDQoxOTkwLEJPUyxBTCxtYXJ6YWpvMDEsMTI1MDAwDQoxOTkwLEJPUyxBTCxoZXR6ZWVyMDEsMTE1MDAwDQoxOTkwLEJPUyxBTCxyb2NoZm1pMDEsMTE1MDAwDQoxOTkwLEJPUyxBTCxjb29wZXNjMDEsMTAwMDAwDQoxOTkwLEJPUyxBTCxpcnZpbmRhMDEsMTAwMDAwDQoxOTkwLEJPUyxBTCxraWVja2RhMDEsMTAwMDAwDQoxOTkwLEJPUyxBTCxtYW56YWpvMDEsMTAwMDAwDQoxOTkwLEJPUyxBTCxwbGFudHBoMDEsMTAwMDAwDQoxOTkwLENBTCxBTCxwYXJyaWxhMDIsMTkxNjY2Nw0KMTk5MCxDQUwsQUwsbGFuZ3NtYTAxLDE4MDAwMDANCjE5OTAsQ0FMLEFMLGpveW5ld2EwMSwxNzUwMDAwDQoxOTkwLENBTCxBTCxkYXZpc2NoMDEsMTM3NTAwMA0KMTk5MCxDQUwsQUwsd2l0dG1pMDEsMTMwMDAwMA0KMTk5MCxDQUwsQUwsZG93bmlicjAxLDEyNTAwMDANCjE5OTAsQ0FMLEFMLGJseWxlYmUwMSwxMTc1MDAwDQoxOTkwLENBTCxBTCxyYXlqbzAxLDExMjUwMDANCjE5OTAsQ0FMLEFMLHNjaG9mZGkwMiw5ODMzMzMNCjE5OTAsQ0FMLEFMLG1jY2Fza2kwMSw5Njc1MDANCjE5OTAsQ0FMLEFMLG1pbnRvZ3IwMSw4NTAwMDANCjE5OTAsQ0FMLEFMLG1jY2x1Ym8wMSw4MjUwMDANCjE5OTAsQ0FMLEFMLGZpbmxlY2gwMSw3MjUwMDANCjE5OTAsQ0FMLEFMLHdhc2hpY2wwMSw2NzUwMDANCjE5OTAsQ0FMLEFMLGhvd2VsamEwMiw2NTI1MDANCjE5OTAsQ0FMLEFMLHdoaXRlZGUwMyw1ODAwMDANCjE5OTAsQ0FMLEFMLHNtaXRobWkwMyw0ODAwMDANCjE5OTAsQ0FMLEFMLGJhaWxlc2MwMSw0MjUwMDANCjE5OTAsQ0FMLEFMLGZyYXNld2kwMSw0MTAwMDANCjE5OTAsQ0FMLEFMLHNjaHJvYmkwMSw0MDc1MDANCjE5OTAsQ0FMLEFMLGhhcnZlYnIwMSwzMzI1MDANCjE5OTAsQ0FMLEFMLHZlbmFibWEwMSwyMDAwMDANCjE5OTAsQ0FMLEFMLGFiYm90amkwMSwxODUwMDANCjE5OTAsQ0FMLEFMLG1jbGVtbWEwMSwxNzUwMDANCjE5OTAsQ0FMLEFMLG1vbnRlcmkwMSwxNTAwMDANCjE5OTAsQ0FMLEFMLGFuZGVya2UwMSwxMDUwMDANCjE5OTAsQ0FMLEFMLGJpY2hlZGEwMSwxMDAwMDANCjE5OTAsQ0FMLEFMLGNvcmJlc2gwMSwxMDAwMDANCjE5OTAsQ0FMLEFMLGRpc2FyZ2EwMSwxMDAwMDANCjE5OTAsQ0FMLEFMLGZldHRlbWkwMSwxMDAwMDANCjE5OTAsQ0FMLEFMLG9ydG9uam8wMSwxMDAwMDANCjE5OTAsQ0FMLEFMLHJvc2VibzAxLDEwMDAwMA0KMTk5MCxDQUwsQUwsc3RldmVsZTAxLDEwMDAwMA0KMTk5MCxDQUwsQUwsdGluZ2xybzAxLDEwMDAwMA0KMTk5MCxDQUwsQUwseW91bmdjbDAxLDEwMDAwMA0KMTk5MCxDSEEsQUwsZmlza2NhMDEsMTc1MDAwMA0KMTk5MCxDSEEsQUwsZmxldGNzYzAxLDEwMDAwMDANCjE5OTAsQ0hBLEFMLGd1aWxsb3owMSwxMDAwMDAwDQoxOTkwLENIQSxBTCxjYWxkZWl2MDEsOTI1MDAwDQoxOTkwLENIQSxBTCxraXR0bHJvMDEsNTUwMDAwDQoxOTkwLENIQSxBTCxseW9uc3N0MDEsNTI1MDAwDQoxOTkwLENIQSxBTCxraW5nZXIwMSw0MTUwMDANCjE5OTAsQ0hBLEFMLHRoaWdwYm8wMSwzMjUwMDANCjE5OTAsQ0hBLEFMLGJvc3RvZGEwMSwzMTAwMDANCjE5OTAsQ0hBLEFMLGxvbmdiaTAxLDI1NzUwMA0KMTk5MCxDSEEsQUwscGVyZXptZTAxLDIyODAwMA0KMTk5MCxDSEEsQUwsam9uZXNiYTAxLDIwNTAwMA0KMTk5MCxDSEEsQUwscGFzcXVkYTAxLDE2ODAwMA0KMTk5MCxDSEEsQUwscGF0dGVrZTAxLDEyNTAwMA0KMTk5MCxDSEEsQUwsa2Fya29ybzAxLDEwODAwMA0KMTk5MCxDSEEsQUwsZGF2aXNqbzA0LDEwMDAwMA0KMTk5MCxDSEEsQUwsZ2FsbGFkYTAxLDEwMDAwMA0KMTk5MCxDSEEsQUwsZ3JlYmVjcjAxLDEwMDAwMA0KMTk5MCxDSEEsQUwsaGVybmFybzAxLDEwMDAwMA0KMTk5MCxDSEEsQUwsaGliYmFncjAxLDEwMDAwMA0KMTk5MCxDSEEsQUwsaGlsbGVzaDAxLDEwMDAwMA0KMTk5MCxDSEEsQUwsam9obnNsYTAzLDEwMDAwMA0KMTk5MCxDSEEsQUwsa3V0emxqZTAxLDEwMDAwMA0KMTk5MCxDSEEsQUwsbWFydGljYTAyLDEwMDAwMA0KMTk5MCxDSEEsQUwscGFsbGRvMDEsMTAwMDAwDQoxOTkwLENIQSxBTCxyYWRpbnNjMDEsMTAwMDAwDQoxOTkwLENIQSxBTCxyb3NlbnN0MDEsMTAwMDAwDQoxOTkwLENIQSxBTCxzZWd1cmpvMDEsMTAwMDAwDQoxOTkwLENIQSxBTCxzb3Nhc2EwMSwxMDAwMDANCjE5OTAsQ0hBLEFMLHZlbnR1cm8wMSwxMDAwMDANCjE5OTAsQ0hBLEFMLHdpbGxhamUwMSwxMDAwMDANCjE5OTAsQ0xFLEFMLGhlcm5ha2UwMSwxNzUwMDAwDQoxOTkwLENMRSxBTCxjYW5kaXRvMDEsMTA1MDAwMA0KMTk5MCxDTEUsQUwsamFjb2JicjAxLDk4NzUwMA0KMTk5MCxDTEUsQUwsam9uZXNkbzAxLDk1MDAwMA0KMTk5MCxDTEUsQUwsb3Jvc2NqZTAxLDg1MDAwMA0KMTk5MCxDTEUsQUwsc3dpbmRncjAxLDg0MDAwMA0KMTk5MCxDTEUsQUwsbWFsZG9jYTAxLDgyNTAwMA0KMTk5MCxDTEUsQUwsYmxhY2tidTAyLDc3NTAwMA0KMTk5MCxDTEUsQUwsc255ZGVjbzAyLDcwMDAwMA0KMTk5MCxDTEUsQUwsZ3VhbnRjZTAxLDY1MDAwMA0KMTk5MCxDTEUsQUwsamFtZXNkaTAxLDY1MDAwMA0KMTk5MCxDTEUsQUwsd2Vic3RtaTAxLDYwMDAwMA0KMTk5MCxDTEUsQUwsamFtZXNjaDAyLDU2MDAwMA0KMTk5MCxDTEUsQUwsYnJvb2t0bzAxLDQyNTAwMA0KMTk5MCxDTEUsQUwsZmFycmVqbzAzLDMyMDAwMA0KMTk5MCxDTEUsQUwsYnJvd25qZTAxLDMxMDAwMA0KMTk5MCxDTEUsQUwsc2tpbm5qbzAxLDI4MDAwMA0KMTk5MCxDTEUsQUwsc2FudGFyYTAxLDI1MDAwMA0KMTk5MCxDTEUsQUwsZmVybWlmZTAxLDE5MDAwMA0KMTk5MCxDTEUsQUwsa29tbWlicjAxLDE3MDAwMA0KMTk5MCxDTEUsQUwsYmVsbGVhbDAxLDExNzAwMA0KMTk5MCxDTEUsQUwsYWxvbWFzYTAyLDExNTAwMA0KMTk5MCxDTEUsQUwsbmljaG9ybzAyLDExMjUwMA0KMTk5MCxDTEUsQUwsa2Fpc2VqZTAxLDExMDAwMA0KMTk5MCxDTEUsQUwsYWxscmViZTAxLDEwMDAwMA0KMTk5MCxDTEUsQUwsYmFlcmdjYTAxLDEwMDAwMA0KMTk5MCxDTEUsQUwsYmVhcnNrZTAxLDEwMDAwMA0KMTk5MCxDTEUsQUwsbGFtcGt0bzAxLDEwMDAwMA0KMTk5MCxDTEUsQUwsbWFudG9qZTAxLDEwMDAwMA0KMTk5MCxDTEUsQUwsc2hhd2plMDEsMTAwMDAwDQoxOTkwLENMRSxBTCxza2Fsc2pvMDEsMTAwMDAwDQoxOTkwLENMRSxBTCx3YWxrZW1pMDEsMTAwMDAwDQoxOTkwLENMRSxBTCx3aWNrYWtlMDEsMTAwMDAwDQoxOTkwLERFVCxBTCxtb3JyaWphMDIsMjEwMDAwMA0KMTk5MCxERVQsQUwsdHJhbW1hbDAxLDE4MDAwMDANCjE5OTAsREVULEFMLHdoaXRhbG8wMSwxODAwMDAwDQoxOTkwLERFVCxBTCxtb3NlYmxsMDEsMTQwMDAwMA0KMTk5MCxERVQsQUwsZmllbGRjZTAxLDEyNTAwMDANCjE5OTAsREVULEFMLHRhbmFuZnIwMSwxMTAwMDAwDQoxOTkwLERFVCxBTCxwaGlsbHRvMDIsODY2NjY3DQoxOTkwLERFVCxBTCxsZW1vbmNoMDEsODI4NTcxDQoxOTkwLERFVCxBTCxzaGVldGxhMDEsNjcwMDAwDQoxOTkwLERFVCxBTCxub2tlc21hMDEsNjUwMDAwDQoxOTkwLERFVCxBTCxoZWF0aG1pMDIsNjAwMDAwDQoxOTkwLERFVCxBTCx3YXJkZ2EwMSw1Mzc1MDANCjE5OTAsREVULEFMLGJlcmdtZGEwMSw1MjUwMDANCjE5OTAsREVULEFMLG51bmV6ZWQwMSw0MDAwMDANCjE5OTAsREVULEFMLGpvbmVzdHIwMSwzNzUwMDANCjE5OTAsREVULEFMLHJvbWVyZWQwMSwzNTAwMDANCjE5OTAsREVULEFMLHJvYmluamUwMiwzMzYwMDANCjE5OTAsREVULEFMLGhlbm5lbWkwMSwzMzUwMDANCjE5OTAsREVULEFMLHdpbGxpa2UwMiwxNjAwMDANCjE5OTAsREVULEFMLGdpYnNvcGEwMSwxNTAwMDANCjE5OTAsREVULEFMLHJpdHprZTAxLDExODAwMA0KMTk5MCxERVQsQUwsbHVzYWRzYzAxLDExNDUwMA0KMTk5MCxERVQsQUwsZHVib2licjAxLDExMDUwMA0KMTk5MCxERVQsQUwsc2Nod2FtaTAxLDEwNzAwMA0KMTk5MCxERVQsQUwsc2VhcmNzdDAxLDEwNzAwMA0KMTk5MCxERVQsQUwscGFyZWRqbzAxLDEwMjUwMA0KMTk5MCxERVQsQUwsYWxkcmVzYzAxLDEwMDAwMA0KMTk5MCxERVQsQUwsY2xhcmtwaDAyLDEwMDAwMA0KMTk5MCxERVQsQUwsY3V5bGVtaTAxLDEwMDAwMA0KMTk5MCxERVQsQUwsZnJ5bWF0cjAxLDEwMDAwMA0KMTk5MCxERVQsQUwsaG9sbWFzaDAxLDEwMDAwMA0KMTk5MCxERVQsQUwsbm9zZWtyYTAxLDEwMDAwMA0KMTk5MCxERVQsQUwsd2FwbmlzdDAxLDEwMDAwMA0KMTk5MCxLQ0EsQUwsYnJldHRnZTAxLDIyNTUwMDANCjE5OTAsS0NBLEFMLGRhdmlzbWEwMSwyMTI1MDAwDQoxOTkwLEtDQSxBTCxndWJpY21hMDEsMjA2NjY2Nw0KMTk5MCxLQ0EsQUwsYm9vbmVibzAxLDE5MDAwMDANCjE5OTAsS0NBLEFMLHRhcnRhZGEwMSwxNjUwMDAwDQoxOTkwLEtDQSxBTCxzYWJlcmJyMDEsMTQwMDAwMA0KMTk5MCxLQ0EsQUwsZGF2aXNzdDAyLDExNjY2NjcNCjE5OTAsS0NBLEFMLHdoaXRlZnIwMSwxMTUwMDAwDQoxOTkwLEtDQSxBTCxzZWl0emtlMDEsMTAwMTI1MA0KMTk5MCxLQ0EsQUwsamFja3NibzAxLDEwMDAwMDANCjE5OTAsS0NBLEFMLHdpbHNvd2kwMiw4MDAwMDANCjE5OTAsS0NBLEFMLHN0aWxsa3UwMSw3OTUwMDANCjE5OTAsS0NBLEFMLGZhcnJzdDAxLDc3NTAwMA0KMTk5MCxLQ0EsQUwsdGFibGVwYTAxLDcyNTAwMA0KMTk5MCxLQ0EsQUwscGVycnlnZTAxLDY2MjUwMA0KMTk5MCxLQ0EsQUwsZG90c29yaTAxLDU1MDAwMA0KMTk5MCxLQ0EsQUwsbGVhY2h0ZTAxLDUwMDAwMA0KMTk5MCxLQ0EsQUwsZWlzZW5qaTAxLDQ3NTAwMA0KMTk5MCxLQ0EsQUwsY3Jhd2ZzdDAxLDM3NTAwMA0KMTk5MCxLQ0EsQUwsbWN3aWxsYTAxLDMwMDAwMA0KMTk5MCxLQ0EsQUwsZ29yZG90bzAxLDE4NTAwMA0KMTk5MCxLQ0EsQUwsZ2xlYXRqZTAxLDE3NjAwMA0KMTk5MCxLQ0EsQUwscGVjb3RiaTAxLDExNTAwMA0KMTk5MCxLQ0EsQUwsYXF1aW5sdTAxLDEwODAwMA0KMTk5MCxLQ0EsQUwsbWFjZmFtaTAxLDEwNTAwMA0KMTk5MCxLQ0EsQUwsYXBwaWVrZTAxLDEwMDAwMA0KMTk5MCxLQ0EsQUwsZGVqZXNqbzAxLDEwMDAwMA0KMTk5MCxLQ0EsQUwsZGVsb3NsdTAxLDEwMDAwMA0KMTk5MCxLQ0EsQUwsbWFsZG9jYTAyLDEwMDAwMA0KMTk5MCxLQ0EsQUwsbWNyYWVicjAxLDEwMDAwMA0KMTk5MCxLQ0EsQUwsbW9lbGxkZTAxLDEwMDAwMA0KMTk5MCxLQ0EsQUwscGFsYWNyZTAxLDEwMDAwMA0KMTk5MCxLQ0EsQUwscHVsbGloYTAxLDEwMDAwMA0KMTk5MCxLQ0EsQUwsc2h1bXB0ZTAxLDEwMDAwMA0KMTk5MCxLQ0EsQUwsdGh1cm1nYTAxLDEwMDAwMA0KMTk5MCxNSU4sQUwscHVja2VraTAxLDI4MTY2NjcNCjE5OTAsTUlOLEFMLGhyYmVra2UwMSwyMTAwMDAwDQoxOTkwLE1JTixBTCxnYWduZWdyMDEsODMzMzMzDQoxOTkwLE1JTixBTCxiZXJlbmp1MDEsNzUwMDAwDQoxOTkwLE1JTixBTCxnbGFkZGRhMDEsNzAwMDAwDQoxOTkwLE1JTixBTCxhZ3VpbHJpMDEsNjQ4MDAwDQoxOTkwLE1JTixBTCxsYXVkbnRpMDEsNjI1MDAwDQoxOTkwLE1JTixBTCxjYXN0aWNhMDEsNTUwMDAwDQoxOTkwLE1JTixBTCxjYW5kZWpvMDEsNTAwMDAwDQoxOTkwLE1JTixBTCxnYWV0dGdhMDEsNTAwMDAwDQoxOTkwLE1JTixBTCxoYXJwZWJyMDEsNTAwMDAwDQoxOTkwLE1JTixBTCxtb3Nlc2pvMDEsMzk1MDAwDQoxOTkwLE1JTixBTCxzbWl0aHJvMDEsMzU1MDAwDQoxOTkwLE1JTixBTCxidXNocmEwMSwzNTAwMDANCjE5OTAsTUlOLEFMLG5ld21hYWwwMSwzNTAwMDANCjE5OTAsTUlOLEFMLGFuZGVyYWwwMiwzMDAwMDANCjE5OTAsTUlOLEFMLGR3eWVyamkwMSwyNDAwMDANCjE5OTAsTUlOLEFMLGxhcmtpZ2UwMSwyMjgwMDANCjE5OTAsTUlOLEFMLHlldHRyaTAxLDEyMDAwMA0KMTk5MCxNSU4sQUwsYmFrZXJkbzAxLDExNTAwMA0KMTk5MCxNSU4sQUwsd2F5bmVnYTAxLDExNTAwMA0KMTk5MCxNSU4sQUwsbWFja3NoMDEsMTA1MDAwDQoxOTkwLE1JTixBTCxkcnVtbXRpMDEsMTAyMDAwDQoxOTkwLE1JTixBTCxndXRocm1hMDEsMTAyMDAwDQoxOTkwLE1JTixBTCx0YXBhbmtlMDEsMTAyMDAwDQoxOTkwLE1JTixBTCxhYmJvdHBhMDEsMTAwMDAwDQoxOTkwLE1JTixBTCxicm93bmphMDMsMTAwMDAwDQoxOTkwLE1JTixBTCxjYXNpYWxhMDEsMTAwMDAwDQoxOTkwLE1JTixBTCxoYWxlY2gwMSwxMDAwMDANCjE5OTAsTUlOLEFMLGpvcmdldGUwMSwxMDAwMDANCjE5OTAsTUlOLEFMLGxlaXVzc2MwMSwxMDAwMDANCjE5OTAsTUlOLEFMLHBhcmtzZGUwMSwxMDAwMDANCjE5OTAsTUlOLEFMLHBvd2VsYWwwMSwxMDAwMDANCjE5OTAsTUlOLEFMLHNvcnJlcGEwMSwxMDAwMDANCjE5OTAsTUlOLEFMLHdlYnN0bGUwMSwxMDAwMDANCjE5OTAsTUlOLEFMLHdlc3RkYTAxLDEwMDAwMA0KMTk5MCxNTDQsQUwseW91bnRybzAxLDMyMDAwMDANCjE5OTAsTUw0LEFMLG1vbGl0cGEwMSwyNjAwMDAwDQoxOTkwLE1MNCxBTCxoaWd1ZXRlMDEsMjEyNTAwMA0KMTk5MCxNTDQsQUwscGxlc2FkYTAxLDE0NjY2NjcNCjE5OTAsTUw0LEFMLHBhcmtlZGEwMSwxMjAwMDAwDQoxOTkwLE1MNCxBTCxkZWVycm8wMSw4ODUwMDANCjE5OTAsTUw0LEFMLGJyb2NrZ3IwMSw3ODc1MDANCjE5OTAsTUw0LEFMLGJvc2lvY2gwMSw3MTAwMDANCjE5OTAsTUw0LEFMLGdhbnRuamkwMSw3MDAwMDANCjE5OTAsTUw0LEFMLGNyaW1jaDAxLDYwMDAwMA0KMTk5MCxNTDQsQUwsYnJhZ2dnbDAxLDU3NTAwMA0KMTk5MCxNTDQsQUwsc3VyaG9iajAxLDU3NTAwMA0KMTk5MCxNTDQsQUwsd2VnbWFiaTAxLDU1MDAwMA0KMTk5MCxNTDQsQUwsbmlldmVqdTAxLDM0MDAwMA0KMTk5MCxNTDQsQUwsa3J1ZWdiaTAxLDMyNTAwMA0KMTk5MCxNTDQsQUwsZmVsZGVtaTAxLDI2MDAwMA0KMTk5MCxNTDQsQUwsZmlsZXJ0bzAxLDI1NTAwMA0KMTk5MCxNTDQsQUwsc3ZldW1kYTAxLDIzMDAwMA0KMTk5MCxNTDQsQUwscG9saWRndTAxLDE4NTAwMA0KMTk5MCxNTDQsQUwsYXVndXNkbzAxLDE3MDAwMA0KMTk5MCxNTDQsQUwsYmlya2JtaTAxLDE1NTAwMA0KMTk5MCxNTDQsQUwsZnJhbmN0ZTAxLDE1MDAwMA0KMTk5MCxNTDQsQUwsa251ZHNtYTAxLDE1MDAwMA0KMTk5MCxNTDQsQUwsb2JyaWVjaDAxLDE1MDAwMA0KMTk5MCxNTDQsQUwsc3BpZXJiaTAxLDEzNTAwMA0KMTk5MCxNTDQsQUwsbmF2YXJqYTAxLDEyMDAwMA0KMTk5MCxNTDQsQUwsc2hlZmZnYTAxLDExNTAwMA0KMTk5MCxNTDQsQUwsZm9zc2F0bzAxLDEwNTAwMA0KMTk5MCxNTDQsQUwsYmF0ZXNiaTAxLDEwMDAwMA0KMTk5MCxNTDQsQUwsY2FuYWxnZTAxLDEwMDAwMA0KMTk5MCxNTDQsQUwsY2FycmltYTAxLDEwMDAwMA0KMTk5MCxNTDQsQUwsZGlhemVkMDEsMTAwMDAwDQoxOTkwLE1MNCxBTCxlbHZpcm5hMDEsMTAwMDAwDQoxOTkwLE1MNCxBTCxoYW1pbGRhMDIsMTAwMDAwDQoxOTkwLE1MNCxBTCxtY2ludHRpMDEsMTAwMDAwDQoxOTkwLE1MNCxBTCx2YXVnaGdyMDEsMTAwMDAwDQoxOTkwLE1MNCxBTCx2ZXJlc3JhMDEsMTAwMDAwDQoxOTkwLE5ZQSxBTCxtYXR0aWRvMDEsMjUwMDAwMA0KMTk5MCxOWUEsQUwsd2luZmlkYTAxLDE5NTg2NTINCjE5OTAsTllBLEFMLHJpZ2hlZGEwMSwxNTUwMDAwDQoxOTkwLE5ZQSxBTCxwZXJlenBhMDEsMTQwMDAwMA0KMTk5MCxOWUEsQUwsYmFyZmlqZTAxLDEyMzMzMzMNCjE5OTAsTllBLEFMLGhhd2tpYW4wMSwxMTMzMzMzDQoxOTkwLE5ZQSxBTCxoYWxsbWUwMSwxMTAwMDAwDQoxOTkwLE5ZQSxBTCxzYXhzdDAxLDk1MDAwMA0KMTk5MCxOWUEsQUwscm9iaW5qZTAxLDkyNTAwMA0KMTk5MCxOWUEsQUwsYmFsYm9zdDAxLDkwMDAwMA0KMTk5MCxOWUEsQUwsbGFwb2lkYTAxLDg1MDAwMA0KMTk5MCxOWUEsQUwsbGVhcnl0aTAxLDgyNTAwMA0KMTk5MCxOWUEsQUwsbWNjdWxsYTAxLDY1MDAwMA0KMTk5MCxOWUEsQUwsY2Vyb25yaTAxLDYwMDAwMA0KMTk5MCxOWUEsQUwsZ2FyY2lkYTAxLDUwMDAwMA0KMTk5MCxOWUEsQUwsZ3VldHRsZTAxLDQ2NTAwMA0KMTk5MCxOWUEsQUwscGx1bmtlcjAxLDQ1MDAwMA0KMTk5MCxOWUEsQUwsdG9sbGV3YTAxLDQyNTAwMA0KMTk5MCxOWUEsQUwsY2FkYXJncjAxLDI2NTAwMA0KMTk5MCxOWUEsQUwsa2VsbHlybzAxLDI2NTAwMA0KMTk5MCxOWUEsQUwsZXNwaW5hbDAxLDI1NjAwMA0KMTk5MCxOWUEsQUwsY2FyeWNoMDEsMjAwMDAwDQoxOTkwLE5ZQSxBTCxwb2xvbmx1MDEsMjAwMDAwDQoxOTkwLE5ZQSxBTCxqb25lc2ppMDIsMTkwMDAwDQoxOTkwLE5ZQSxBTCxnZXJlbmJvMDEsMTgwMDAwDQoxOTkwLE5ZQSxBTCxwYXJrZWNsMDEsMTUwMDAwDQoxOTkwLE5ZQSxBTCx2ZWxhcnJhMDEsMTM2NTAwDQoxOTkwLE5ZQSxBTCx0b2xpdmZyMDEsMTM1MDAwDQoxOTkwLE5ZQSxBTCxibG93ZW1pMDEsMTA3MDAwDQoxOTkwLE5ZQSxBTCxkb3JzZWJyMDEsMTA3MDAwDQoxOTkwLE5ZQSxBTCxlaWxhbmRhMDEsMTAzNTAwDQoxOTkwLE5ZQSxBTCxzbmlkZXZhMDEsMTAyMDAwDQoxOTkwLE5ZQSxBTCxtaWxsc2FsMDEsMTAwMDAwDQoxOTkwLE9BSyxBTCxoZW5kZXJpMDEsMjM1MDAwMA0KMTk5MCxPQUssQUwsY2Fuc2VqbzAxLDIwMDAwMDANCjE5OTAsT0FLLEFMLG1jZ3dpbWEwMSwxNTAwMDAwDQoxOTkwLE9BSyxBTCxsYW5zZmNhMDEsMTI3NTAwMA0KMTk5MCxPQUssQUwsbW9vcmVtaTAxLDExOTE2NjcNCjE5OTAsT0FLLEFMLHdlbGNoYm8wMSwxMTMzMzM0DQoxOTkwLE9BSyxBTCxzdGV3YWRhMDEsOTUwMDAwDQoxOTkwLE9BSyxBTCxoZW5kZWRhMDEsODUwMDAwDQoxOTkwLE9BSyxBTCxwaGVscGtlMDEsODI1MDAwDQoxOTkwLE9BSyxBTCxlY2tlcmRlMDEsNzg3NTAwDQoxOTkwLE9BSyxBTCxob25leXJpMDEsNzUwMDAwDQoxOTkwLE9BSyxBTCxzYW5kZXNjMDEsNzUwMDAwDQoxOTkwLE9BSyxBTCxzdGVpbnRlMDEsNzUwMDAwDQoxOTkwLE9BSyxBTCxoYXNzZXJvMDEsNzAwMDAwDQoxOTkwLE9BSyxBTCx5b3VuZ2N1MDEsNjc1MDAwDQoxOTkwLE9BSyxBTCxuZWxzb2dlMDEsNjUwMDAwDQoxOTkwLE9BSyxBTCxnYWxsZW1pMDEsNTAwMDAwDQoxOTkwLE9BSyxBTCxqYXZpZXN0MDEsMzEwMDAwDQoxOTkwLE9BSyxBTCxidXJuc3RvMDIsMjM1MDAwDQoxOTkwLE9BSyxBTCx3ZWlzc3dhMDEsMjM1MDAwDQoxOTkwLE9BSyxBTCxxdWlya2phMDEsMTUwMDAwDQoxOTkwLE9BSyxBTCxjb3JzaWppMDEsMTA3NTAwDQoxOTkwLE9BSyxBTCxibGFua2xhMDIsMTA1MDAwDQoxOTkwLE9BSyxBTCxqZW5uaWRvMDEsMTAzMDAwDQoxOTkwLE9BSyxBTCxqb3NlZmUwMSwxMDI1MDANCjE5OTAsT0FLLEFMLG90dG9kYTAxLDEwMjAwMA0KMTk5MCxPQUssQUwsYWZlbml0cjAxLDEwMDAwMA0KMTk5MCxPQUssQUwsY2Fuc2VvejAxLDEwMDAwMA0KMTk5MCxPQUssQUwsY2hpYW1zYzAxLDEwMDAwMA0KMTk5MCxPQUssQUwsaGFycmlyZTAxLDEwMDAwMA0KMTk5MCxPQUssQUwsaGVtb25zYzAxLDEwMDAwMA0KMTk5MCxPQUssQUwsaG93YXJzdDAxLDEwMDAwMA0KMTk5MCxPQUssQUwsaG93aXRkYTAxLDEwMDAwMA0KMTk5MCxPQUssQUwsbm9ycmltaTAxLDEwMDAwMA0KMTk5MCxTRUEsQUwsZGF2aXNhbDAxLDE0NzUwMDANCjE5OTAsU0VBLEFMLG9icmllcGUwMywxMTg3NTAwDQoxOTkwLFNFQSxBTCxyZXlub2hhMDEsOTY2NjY3DQoxOTkwLFNFQSxBTCxsZW9uYWplMDEsODAwMDAwDQoxOTkwLFNFQSxBTCxuaWVkZXRvMDEsODAwMDAwDQoxOTkwLFNFQSxBTCxiYW5raHNjMDEsNzU1MDAwDQoxOTkwLFNFQSxBTCxjb2xlc2RhMDEsNjkwMDAwDQoxOTkwLFNFQSxBTCx5b3VuZ21hMDEsNTg3MDAwDQoxOTkwLFNFQSxBTCx2YWxsZWRhMDEsNDg1MDAwDQoxOTkwLFNFQSxBTCxicmFkbHNjMDEsNDYwMDAwDQoxOTkwLFNFQSxBTCxjb3R0b2hlMDEsNDI1MDAwDQoxOTkwLFNFQSxBTCxqYWNrc21pMDIsNDAwMDAwDQoxOTkwLFNFQSxBTCxyZWVkamUwMSwzODAwMDANCjE5OTAsU0VBLEFMLHN3aWZ0YmkwMiwzNzAwMDANCjE5OTAsU0VBLEFMLHNjaG9vbWkwMSwyNjAwMDANCjE5OTAsU0VBLEFMLGhvbG1hYnIwMSwxOTMwMDANCjE5OTAsU0VBLEFMLGJ1aG5lamEwMSwxODAwMDANCjE5OTAsU0VBLEFMLGdyaWZma2UwMiwxODAwMDANCjE5OTAsU0VBLEFMLGJyYW50bWkwMSwxNzAwMDANCjE5OTAsU0VBLEFMLGJyaWxlZ3IwMSwxNTAwMDANCjE5OTAsU0VBLEFMLGhhbnNvZXIwMSwxNTAwMDANCjE5OTAsU0VBLEFMLGpvaG5zcmEwNSwxNTAwMDANCjE5OTAsU0VBLEFMLGtpbmdlbWkwMSwxMzUwMDANCjE5OTAsU0VBLEFMLHZpenF1b20wMSwxMzUwMDANCjE5OTAsU0VBLEFMLHBvd2VsZGUwMSwxMjUwMDANCjE5OTAsU0VBLEFMLGNvbXN0a2UwMSwxMTQwMDANCjE5OTAsU0VBLEFMLHJlbnRlcmkwMSwxMTI1MDANCjE5OTAsU0VBLEFMLGhhcnJpZ2UwMSwxMDgwMDANCjE5OTAsU0VBLEFMLG1hcnRpZWQwMSwxMDgwMDANCjE5OTAsU0VBLEFMLGNvY2hyZGEwMSwxMDIwMDANCjE5OTAsU0VBLEFMLGJ1cmJhZGEwMSwxMDAwMDANCjE5OTAsU0VBLEFMLGdvZmZqZTAxLDEwMDAwMA0KMTk5MCxTRUEsQUwsa25hY2ticjAxLDEwMDAwMA0KMTk5MCxTRUEsQUwsbGVubm9wYTAxLDEwMDAwMA0KMTk5MCxURVgsQUwsZnJhbmNqdTAxLDE2MzMzMzMNCjE5OTAsVEVYLEFMLHNpZXJycnUwMSwxNjI1MDAwDQoxOTkwLFRFWCxBTCxyeWFubm8wMSwxNDAwMDAwDQoxOTkwLFRFWCxBTCxydXNzZWplMDEsMTE2NjY2Nw0KMTk5MCxURVgsQUwsYmFpbmVoYTAxLDExNDM1MzkNCjE5OTAsVEVYLEFMLGhvdWdoY2gwMSwxMDAwMDAwDQoxOTkwLFRFWCxBTCxpbmNhdnBlMDEsODAwMDAwDQoxOTkwLFRFWCxBTCxwZXR0aWdhMDEsNzAzMzMzDQoxOTkwLFRFWCxBTCxidWVjaHN0MDEsNTUwMDAwDQoxOTkwLFRFWCxBTCxwZXRyYWdlMDEsNDYyNTAwDQoxOTkwLFRFWCxBTCx3aXR0Ym8wMSw0MTUwMDANCjE5OTAsVEVYLEFMLGd1em1ham8wMSw0MDAwMDANCjE5OTAsVEVYLEFMLG1veWVyamEwMSwzNDAwMDANCjE5OTAsVEVYLEFMLHBhbG1lcmEwMSwzMDAwMDANCjE5OTAsVEVYLEFMLGJvc2xldGgwMSwyNTAwMDANCjE5OTAsVEVYLEFMLGJyb3dua2UwMSwyMTgwMDANCjE5OTAsVEVYLEFMLGplZmZjbWkwMSwxODUwMDANCjE5OTAsVEVYLEFMLG1hbnJpZnIwMSwxNzc1MDANCjE5OTAsVEVYLEFMLGVzcHljZTAxLDE2MjUwMA0KMTk5MCxURVgsQUwsa3Vua2VqZTAxLDE0MDAwMA0KMTk5MCxURVgsQUwscm9nZXJrZTAxLDE0MDAwMA0KMTk5MCxURVgsQUwsa3JldXRjaDAxLDEyMjAwMA0KMTk5MCxURVgsQUwsc3RhbmxtaTAyLDExNTAwMA0KMTk5MCxURVgsQUwsbWllbGtnYTAxLDExMDAwMA0KMTk5MCxURVgsQUwsYXJuc2JicjAxLDEwNzUwMA0KMTk5MCxURVgsQUwsZGF1Z2hqYTAxLDEwNTAwMA0KMTk5MCxURVgsQUwsYWtlcmZkYTAxLDEwMjUwMA0KMTk5MCxURVgsQUwsYmFyZmlqbzAxLDEwMDAwMA0KMTk5MCxURVgsQUwsYmVsY2hrZTAxLDEwMDAwMA0KMTk5MCxURVgsQUwsYm9oYW5icjAxLDEwMDAwMA0KMTk5MCxURVgsQUwsY29vbGJzYzAxLDEwMDAwMA0KMTk5MCxURVgsQUwsZ29uemFqdTAzLDEwMDAwMA0KMTk5MCxURVgsQUwsaGFzZWxiaTAxLDEwMDAwMA0KMTk5MCxURVgsQUwsbWFub25yYTAxLDEwMDAwMA0KMTk5MCxURVgsQUwsbmVucm8wMSwxMDAwMDANCjE5OTAsVEVYLEFMLHBhbG1lZGUwMSwxMDAwMDANCjE5OTAsVEVYLEFMLHBldGtvbWEwMSwxMDAwMDANCjE5OTAsVE9SLEFMLGJlbGxnZTAyLDIwMDAwMDANCjE5OTAsVE9SLEFMLHN0aWViZGEwMSwxNzUwMDAwDQoxOTkwLFRPUixBTCxmZXJuYXRvMDEsMTUwMDAwMA0KMTk5MCxUT1IsQUwsa2V5amkwMSwxNDY2NjY3DQoxOTkwLFRPUixBTCxtY2dyaWZyMDEsMTQ1MDAwMA0KMTk5MCxUT1IsQUwsaGVua2V0bzAxLDExNjY2NjcNCjE5OTAsVE9SLEFMLGdydWJla2UwMSwxMTUwMDAwDQoxOTkwLFRPUixBTCx3aWxzb21vMDEsMTEyNTAwMA0KMTk5MCxUT1IsQUwsZmxhbmFtaTAxLDEwMzc1MDANCjE5OTAsVE9SLEFMLGNlcnV0am8wMSw3NjI1MDANCjE5OTAsVE9SLEFMLGFja2VyamkwMSw3MDAwMDANCjE5OTAsVE9SLEFMLG11bGxpcmEwMSw1MjAwMDANCjE5OTAsVE9SLEFMLGxlZW1hMDIsMzgwMDAwDQoxOTkwLFRPUixBTCx3YXJkZHUwMSwzMDAwMDANCjE5OTAsVE9SLEFMLHZpcmdpb3owMiwyNzUwMDANCjE5OTAsVE9SLEFMLHdlbGxzZGEwMSwyNzUwMDANCjE5OTAsVE9SLEFMLGxpcmlhbmUwMSwyNTUwMDANCjE5OTAsVE9SLEFMLGxhd2xldG8wMSwyNTAwMDANCjE5OTAsVE9SLEFMLGtpbGd1cGEwMSwyNDI1MDANCjE5OTAsVE9SLEFMLHdpbGxzZnIwMSwyNDI1MDANCjE5OTAsVE9SLEFMLGJvcmRlcGEwMSwxODAwMDANCjE5OTAsVE9SLEFMLHN0b3R0dG8wMSwxNjg1MDANCjE5OTAsVE9SLEFMLGZlbGl4anUwMSwxNTUwMDANCjE5OTAsVE9SLEFMLG15ZXJzZ3IwMSwxMDUwMDANCjE5OTAsVE9SLEFMLGJsYWlyd2kwMSwxMDAwMDANCjE5OTAsVE9SLEFMLGhpbGxnbDAxLDEwMDAwMA0KMTk5MCxUT1IsQUwsb2xlcnVqbzAxLDEwMDAwMA0KMTk5MCxBVEwsTkwsbXVycGhkYTA1LDIwMDAwMDANCjE5OTAsQVRMLE5MLHN1dHRlYnIwMSwxNzI5MTY3DQoxOTkwLEFUTCxOTCxzbWl0aGxvMDEsMTQ1ODMzNA0KMTk5MCxBVEwsTkwsZXNhc2tuaTAxLDEzNTAwMDANCjE5OTAsQVRMLE5MLHdoaXR0ZXIwMSwxMjAwMDAwDQoxOTkwLEFUTCxOTCxsZWlicmNoMDEsMTAwMDAwMA0KMTk5MCxBVEwsTkwsZGF2aXNqbzAyLDgwMDAwMA0KMTk5MCxBVEwsTkwsbWNkb3dvZDAxLDY5MDAwMA0KMTk5MCxBVEwsTkwscHJlc2xqaTAxLDY0MDAwMA0KMTk5MCxBVEwsTkwsdGhvbWFhbjAxLDU1MDAwMA0KMTk5MCxBVEwsTkwsZ2xhdml0bzAyLDI4NTAwMA0KMTk5MCxBVEwsTkwsdHJlYWRqZTAxLDI1MDAwMA0KMTk5MCxBVEwsTkwsYm9ldmVqbzAxLDIxNTAwMA0KMTk5MCxBVEwsTkwsc21vbHRqbzAxLDIxMDAwMA0KMTk5MCxBVEwsTkwsc21pdGhwZTAyLDE5MDAwMA0KMTk5MCxBVEwsTkwsYmxhdXNqZTAxLDE4MDAwMA0KMTk5MCxBVEwsTkwsZ3JlZ2d0bzAxLDE1NTAwMA0KMTk5MCxBVEwsTkwsbGlsbGlkZTAxLDEzNTAwMA0KMTk5MCxBVEwsTkwsY2xhcnltYTAxLDEyNTAwMA0KMTk5MCxBVEwsTkwsZ2FudHJvMDEsMTI1MDAwDQoxOTkwLEFUTCxOTCxoZW5yeWR3MDEsMTIwMDAwDQoxOTkwLEFUTCxOTCxzdGFudG1pMDIsMTE4MDAwDQoxOTkwLEFUTCxOTCxpbmZhbmFsMDEsMTE0MDAwDQoxOTkwLEFUTCxOTCxsdWVja3JpMDEsMTE0MDAwDQoxOTkwLEFUTCxOTCxtZXJja2tlMDEsMTAyMDAwDQoxOTkwLEFUTCxOTCxiZWxsbWkwMSwxMDAwMDANCjE5OTAsQVRMLE5MLGNhc3RpdG8wMiwxMDAwMDANCjE5OTAsQVRMLE5MLGdyZWVudG8wMSwxMDAwMDANCjE5OTAsQVRMLE5MLGh1bnRlYnIwMSwxMDAwMDANCjE5OTAsQVRMLE5MLG1pdGNoa2UwMiwxMDAwMDANCjE5OTAsQVRMLE5MLHJvc2FydmkwMSwxMDAwMDANCjE5OTAsQVRMLE5MLHZhbGRlc2UwMSwxMDAwMDANCjE5OTAsQ0hOLE5MLGRhd3NvYW4wMSwyMTAwMDAwDQoxOTkwLENITixOTCxzdXRjbHJpMDEsMTkyNTAwMA0KMTk5MCxDSE4sTkwsc2FuZGJyeTAxLDE1NTAwMDANCjE5OTAsQ0hOLE5MLGR1bnN0c2gwMSwxMjUwMDAwDQoxOTkwLENITixOTCx3aWxsaW1pMDIsMTEyNTAwMA0KMTk5MCxDSE4sTkwsc2FsYXpsdTAxLDU1MDAwMA0KMTk5MCxDSE4sTkwsd3lubmVtYTAxLDUyNTAwMA0KMTk5MCxDSE4sTkwsYXNzZW5wYTAxLDQ1MDAwMA0KMTk5MCxDSE4sTkwsbWFkZHVncjAxLDQzNzUwMA0KMTk5MCxDSE4sTkwsd2lsa2VjdTAxLDQwMDAwMA0KMTk5MCxDSE4sTkwsZ3JhY2VtYTAxLDMyNTAwMA0KMTk5MCxDSE4sTkwscmFtb3NkbzAxLDMxMDAwMA0KMTk5MCxDSE4sTkwsbGFuY2FsZTAxLDMwMDAwMA0KMTk5MCxDSE4sTkwsbWNjbGVsbDAxLDIxMDAwMA0KMTk5MCxDSE4sTkwsYmVycnlkYTAxLDIwMDAwMA0KMTk5MCxDSE4sTkwsY2xhcmtkYTA1LDE5NTAwMA0KMTk5MCxDSE4sTkwsd2FsdG9qZTAxLDE4NTAwMA0KMTk5MCxDSE4sTkwsc21pdGhkdzAxLDE2NTAwMA0KMTk5MCxDSE4sTkwsd2lsc29zdDAxLDE0ODAwMA0KMTk5MCxDSE4sTkwsbnVuZXpqbzAxLDEyNTAwMA0KMTk5MCxDSE4sTkwscGljb2plMDEsMTIwMDAwDQoxOTkwLENITixOTCxnaXJhcmpvMDEsMTE1MDAwDQoxOTkwLENITixOTCx2YXJzaGdhMDEsMTA1MDAwDQoxOTkwLENITixOTCxoYXJrZW1pMDEsMTA0NTAwDQoxOTkwLENITixOTCx3aWxraWRlMDEsMTA0MDAwDQoxOTkwLENITixOTCxibGFua2tlMDEsMTAwMDAwDQoxOTkwLENITixOTCxjYXN0aWZyMDEsMTAwMDAwDQoxOTkwLENITixOTCxjb2ZmbWtlMDEsMTAwMDAwDQoxOTkwLENITixOTCxkYXNjZWRvMDEsMTAwMDAwDQoxOTkwLENITixOTCxrcmFlbWpvMDEsMTAwMDAwDQoxOTkwLENITixOTCx3cm9uYXJpMDEsMTAwMDAwDQoxOTkwLENJTixOTCxicm93bnRvMDUsMjEyNTAwMA0KMTk5MCxDSU4sTkwsZGF2aXNlcjAxLDIxMDAwMDANCjE5OTAsQ0lOLE5MLGphY2tzZGEwMiwxMTUwMDAwDQoxOTkwLENJTixOTCxteWVyc3JhMDEsODc1MDAwDQoxOTkwLENJTixOTCxtYWhsZXJpMDEsNzkwMDAwDQoxOTkwLENJTixOTCxsYXJraWJhMDEsNzUwMDAwDQoxOTkwLENJTixOTCxvZXN0ZXJvMDEsNjUwMDAwDQoxOTkwLENJTixOTCxyaWpvam8wMSw2MzAwMDANCjE5OTAsQ0lOLE5MLG9uZWlscGEwMSw2MjUwMDANCjE5OTAsQ0lOLE5MLGdyaWZma2UwMSw1MTAwMDANCjE5OTAsQ0lOLE5MLHJvYmlucm8wMSw1MDAwMDANCjE5OTAsQ0lOLE5MLHJlZWRqZTAyLDM0NTAwMA0KMTk5MCxDSU4sTkwsd2lubmloZTAxLDMzNzUwMA0KMTk5MCxDSU4sTkwsYmVueml0bzAxLDMyNTAwMA0KMTk5MCxDSU4sTkwsZHVuY2FtYTAxLDMyNTAwMA0KMTk5MCxDSU4sTkwsZGliYmxybzAxLDIwMDAwMA0KMTk5MCxDSU4sTkwsc2Fib2NoMDEsMjAwMDAwDQoxOTkwLENJTixOTCxjaGFybG5vMDEsMTc1MDAwDQoxOTkwLENJTixOTCxxdWlub2x1MDEsMTUwMDAwDQoxOTkwLENJTixOTCxyb29tZXJvMDEsMTQwMDAwDQoxOTkwLENJTixOTCxiaXJ0c3RpMDEsMTIwNTAwDQoxOTkwLENJTixOTCxtb3JyaWhhMDIsMTE0NTAwDQoxOTkwLENJTixOTCxhcm1zdGphMDEsMTA3NTAwDQoxOTkwLENJTixOTCxvbGl2ZWpvMDEsMTA3NTAwDQoxOTkwLENJTixOTCxzY3VkZHNjMDEsMTA3MDAwDQoxOTkwLENJTixOTCxtY2dyaXRlMDEsMTA0MDAwDQoxOTkwLENJTixOTCxyb2VzbG1pMDEsMTA0MDAwDQoxOTkwLENJTixOTCxqZWZmZXJlMDEsMTAyNTAwDQoxOTkwLENJTixOTCxiZW5hdmZyMDEsMTAwMDAwDQoxOTkwLENJTixOTCxicm93bmtlMDIsMTAwMDAwDQoxOTkwLENJTixOTCxoZW5yeWJ1MDEsMTAwMDAwDQoxOTkwLENJTixOTCxsYXlhbnRpMDEsMTAwMDAwDQoxOTkwLENJTixOTCxsb2NraGtlMDEsMTAwMDAwDQoxOTkwLENJTixOTCxyb2RyaXJvMDIsMTAwMDAwDQoxOTkwLEhPVSxOTCxzY290dG1pMDMsMTk4NzUwMA0KMTk5MCxIT1UsTkwsZGF2aXNnbDAxLDE5ODUwMDANCjE5OTAsSE9VLE5MLGRhcndpZGEwMSwxMjAwMDAwDQoxOTkwLEhPVSxOTCxjbGFuY2ppMDEsMTE1MDAwMA0KMTk5MCxIT1UsTkwsc21pdGhkYTAyLDExMDAwMDANCjE5OTAsSE9VLE5MLGRlc2hhamkwMSwxMDUwMDAwDQoxOTkwLEhPVSxOTCxyYW1pcnJhMDEsMTAwMDAwMA0KMTk5MCxIT1UsTkwsYW5kZXJsYTAyLDk2NTAwMA0KMTk5MCxIT1UsTkwsZG9yYW5iaTAyLDkzNDAwMA0KMTk5MCxIT1UsTkwsZ3VsbGliaTAxLDkwMDAwMA0KMTk5MCxIT1UsTkwsYWdvc3RqdTAxLDg1MDAwMA0KMTk5MCxIT1UsTkwscHVobHRlMDEsODAwMDAwDQoxOTkwLEhPVSxOTCx3aWxzb2dsMDEsNzUwMDAwDQoxOTkwLEhPVSxOTCxvYmVya2tlMDEsNjI1MDAwDQoxOTkwLEhPVSxOTCxzY2hhdGRhMDEsNDUwMDAwDQoxOTkwLEhPVSxOTCx0cmV2aWFsMDEsMzUwMDAwDQoxOTkwLEhPVSxOTCx5b3VuZ2dlMDIsMjgwMDAwDQoxOTkwLEhPVSxOTCxiaWdnaWNyMDEsMjQwMDAwDQoxOTkwLEhPVSxOTCxjYW1pbmtlMDEsMjQwMDAwDQoxOTkwLEhPVSxOTCxsb21iYXN0MDEsMjIyNTAwDQoxOTkwLEhPVSxOTCxwb3J0dW1hMDEsMjAyMDAwDQoxOTkwLEhPVSxOTCxkYXZpZG1hMDEsMTI1MDAwDQoxOTkwLEhPVSxOTCxrZXJmZWNoMDEsMTIyMDAwDQoxOTkwLEhPVSxOTCxoZXJuYXhhMDEsMTAyMDAwDQoxOTkwLEhPVSxOTCxib3dlbnJ5MDEsMTAwMDAwDQoxOTkwLEhPVSxOTCxjZWRlbmFuMDEsMTAwMDAwDQoxOTkwLEhPVSxOTCxtYXNvbnJvMDEsMTAwMDAwDQoxOTkwLEhPVSxOTCxtZWFkb2xvMDEsMTAwMDAwDQoxOTkwLEhPVSxOTCxuaWNob2NhMDEsMTAwMDAwDQoxOTkwLEhPVSxOTCxyb2hkZWRhMDEsMTAwMDAwDQoxOTkwLEhPVSxOTCxzaW1tc21pMDEsMTAwMDAwDQoxOTkwLExBTixOTCxtdXJyYWVkMDIsMjUxMzcwMw0KMTk5MCxMQU4sTkwsdmFsZW5mZTAxLDIwMDAwMDANCjE5OTAsTEFOLE5MLGhlcnNob3IwMSwxOTY2NjY3DQoxOTkwLExBTixOTCxicm9va2h1MDEsMTM2NjY2Nw0KMTk5MCxMQU4sTkwsc2FtdWVqdTAxLDEzNTAwMDANCjE5OTAsTEFOLE5MLGdpYnNva2kwMSwxMzMzMzM0DQoxOTkwLExBTixOTCxzY2lvc21pMDEsMTIzMzMzMw0KMTk5MCxMQU4sTkwsaG93ZWxqYTAxLDEwMjUwMDANCjE5OTAsTEFOLE5MLGdyaWZmYWwwMSwxMDAwMDAwDQoxOTkwLExBTixOTCxyYW5kb3dpMDEsODc1MDAwDQoxOTkwLExBTixOTCxtb3JnYW1pMDEsNjUwMDAwDQoxOTkwLExBTixOTCxkYW5pZWthMDEsNjAwMDAwDQoxOTkwLExBTixOTCxkZW1wc3JpMDEsNTAwMDAwDQoxOTkwLExBTixOTCxzaGVsYmpvMDEsNTAwMDAwDQoxOTkwLExBTixOTCxoYW1pbGplMDEsNDY1MDAwDQoxOTkwLExBTixOTCxiZWxjaHRpMDEsNDUwMDAwDQoxOTkwLExBTixOTCxoYXRjaG1pMDEsNDUwMDAwDQoxOTkwLExBTixOTCxzdHViYmZyMDEsNDUwMDAwDQoxOTkwLExBTixOTCxzZWFyYXJhMDEsMzQyNTAwDQoxOTkwLExBTixOTCxnb3R0amkwMSwzMDAwMDANCjE5OTAsTEFOLE5MLGNyZXdzdGkwMSwyMTUwMDANCjE5OTAsTEFOLE5MLGdvbnpham8wMiwxNTAwMDANCjE5OTAsTEFOLE5MLG1hcnRpcmEwMiwxNTAwMDANCjE5OTAsTEFOLE5MLHBlcnJ5cGEwMiwxNTAwMDANCjE5OTAsTEFOLE5MLGhhcnJpbGUwMSwxNDUwMDANCjE5OTAsTEFOLE5MLHdldHRlam8wMSwxNDI1MDANCjE5OTAsTEFOLE5MLHNoYXJwbWkwMSwxMzUwMDANCjE5OTAsTEFOLE5MLGd3eW5uY2gwMSwxMjUwMDANCjE5OTAsTEFOLE5MLG1hZGR1bWkwMSwxMjIwMDANCjE5OTAsTEFOLE5MLGJpdHRpamUwMSwxMTMwMDANCjE5OTAsTEFOLE5MLGNhc3RpYnIwMSwxMDAwMDANCjE5OTAsTEFOLE5MLGZsZXRjZGEwMSwxMDAwMDANCjE5OTAsTEFOLE5MLGhhbnNlZGEwMSwxMDAwMDANCjE5OTAsTEFOLE5MLGhhcnRsbWkwMSwxMDAwMDANCjE5OTAsTEFOLE5MLG9mZmVyam8wMSwxMDAwMDANCjE5OTAsTU9OLE5MLHJhaW5ldGkwMSwyMDU1NTU1DQoxOTkwLE1PTixOTCxnYWxhcmFuMDEsMTk1MDAwMA0KMTk5MCxNT04sTkwsYnVya2V0aTAxLDE2MDAwMDANCjE5OTAsTU9OLE5MLG1hcnRpZGUwMSwxNDAwMDAwDQoxOTkwLE1PTixOTCx3YWxsYXRpMDEsMTI1MDAwMA0KMTk5MCxNT04sTkwsZ3Jvc3NrZTAxLDk1MDAwMA0KMTk5MCxNT04sTkwsb3dlbnNwMDEsOTMzMzMzDQoxOTkwLE1PTixOTCxzbWl0aHphMDEsODYwMDAwDQoxOTkwLE1PTixOTCxzY2htaWRhMDEsNjUxMDAwDQoxOTkwLE1PTixOTCxmaXR6Z21pMDIsNTI1MDAwDQoxOTkwLE1PTixOTCxtY2dhZmFuMDEsNTA2MDAwDQoxOTkwLE1PTixOTCxtYXJ0aWRhMDEsNDEwMDAwDQoxOTkwLE1PTixOTCxib3lkb2kwMSw0MDAwMDANCjE5OTAsTU9OLE5MLGhlc2tlam8wMSwzNzUwMDANCjE5OTAsTU9OLE5MLGZvbGV5dG8wMiwzMzUwMDANCjE5OTAsTU9OLE5MLG5peG9ub3QwMSwzMTUwMDANCjE5OTAsTU9OLE5MLGFsZHJlbWkwMSwyOTc1MDANCjE5OTAsTU9OLE5MLGpvaG5zd2EwMywyOTUwMDANCjE5OTAsTU9OLE5MLHNhbnRvbmUwMSwyMDUwMDANCjE5OTAsTU9OLE5MLGh1ZGxlcmUwMSwxMzUwMDANCjE5OTAsTU9OLE5MLGhhbGxkcjAxLDEzMDAwMA0KMTk5MCxNT04sTkwsdGhvbXByaTAxLDEwNDUwMA0KMTk5MCxNT04sTkwsZ3Jpc3NtYTAyLDEwMzUwMA0KMTk5MCxNT04sTkwsZGVzaGlkZTAxLDEwMDAwMA0KMTk5MCxNT04sTkwsZmFybWVobzAxLDEwMDAwMA0KMTk5MCxNT04sTkwsZnJleXN0MDEsMTAwMDAwDQoxOTkwLE1PTixOTCxub2JvYWp1MDEsMTAwMDAwDQoxOTkwLE1PTixOTCxwZXJlenlvMDEsMTAwMDAwDQoxOTkwLE1PTixOTCxyZXllc2dpMDEsMTAwMDAwDQoxOTkwLE1PTixOTCxyb2phc21lMDEsMTAwMDAwDQoxOTkwLE1PTixOTCxzYW1wZWJpMDEsMTAwMDAwDQoxOTkwLE5ZTixOTCx2aW9sYWZyMDEsMTk2NjY2Nw0KMTk5MCxOWU4sTkwsZ29vZGVkdzAxLDE4NjY2NjcNCjE5OTAsTllOLE5MLHN0cmF3ZGEwMSwxODUwMDAwDQoxOTkwLE5ZTixOTCxmZXJuYXNpMDEsMTY2NjY2Nw0KMTk5MCxOWU4sTkwsam9obnNobzAxLDE2NjY2NjYNCjE5OTAsTllOLE5MLGZyYW5jam8wMSwxNjMzMzMzDQoxOTkwLE5ZTixOTCxkYXJsaXJvMDEsMTU2NjY2Nw0KMTk5MCxOWU4sTkwsY29uZWRhMDEsMTMwMDAwMA0KMTk5MCxOWU4sTkwsb2plZGFibzAxLDEzMDAwMDANCjE5OTAsTllOLE5MLG1jcmV5a2UwMSwxMjY2NjY3DQoxOTkwLE5ZTixOTCxtYXJzaG1pMDIsMTEwMDAwMA0KMTk5MCxOWU4sTkwscGVuYWFsMDEsOTc1MDAwDQoxOTkwLE5ZTixOTCx0ZXVmZXRpMDEsNjEyNTAwDQoxOTkwLE5ZTixOTCxtYWdhZGRhMDEsMzk1MDAwDQoxOTkwLE5ZTixOTCxtdXNzZWplMDEsMzE1MDAwDQoxOTkwLE5ZTixOTCxlbHN0ZWtlMDEsMjYwMDAwDQoxOTkwLE5ZTixOTCxseW9uc2JhMDEsMjIwMDAwDQoxOTkwLE5ZTixOTCxqZWZmZWdyMDEsMjAwMDAwDQoxOTkwLE5ZTixOTCxvbWFsbHRvMDEsMTU1MDAwDQoxOTkwLE5ZTixOTCxzYXNzZW1hMDEsMTU1MDAwDQoxOTkwLE5ZTixOTCxjYXJyZW1hMDEsMTI1MDAwDQoxOTkwLE5ZTixOTCxpbm5pc2plMDEsMTEwMDAwDQoxOTkwLE5ZTixOTCxkaWF6bWEwMSwxMDgwMDANCjE5OTAsTllOLE5MLGh1Z2hla2UwMSwxMDUwMDANCjE5OTAsTllOLE5MLHRob3JubG8wMSwxMDMwMDANCjE5OTAsTllOLE5MLHdoaXRld2EwMiwxMDEwMDANCjE5OTAsTllOLE5MLGJyb3dua2UwMywxMDAwMDANCjE5OTAsTllOLE5MLGRvbm5lY2gwMSwxMDAwMDANCjE5OTAsTllOLE5MLGh1bmRsdG8wMSwxMDAwMDANCjE5OTAsTllOLE5MLG1hY2hhanUwMSwxMDAwMDANCjE5OTAsTllOLE5MLG1pbGxla2UwMSwxMDAwMDANCjE5OTAsTllOLE5MLHZhbGVyanUwMSwxMDAwMDANCjE5OTAsUEhJLE5MLGhheWVzdm8wMSwyMDAwMDAwDQoxOTkwLFBISSxOTCxtY2Rvd3JvMDEsMTQwMDAwMA0KMTk5MCxQSEksTkwsdGhvbmRpMDEsMTEwMDAwMA0KMTk5MCxQSEksTkwsaGVycnRvMDEsODI1MDAwDQoxOTkwLFBISSxOTCxob3dlbGtlMDEsNzE2NjY3DQoxOTkwLFBISSxOTCxkeWtzdGxlMDEsNzAwMDAwDQoxOTkwLFBISSxOTCxtYXJ0aWNhMDEsNzAwMDAwDQoxOTkwLFBISSxOTCxrcnVram8wMSw2NTUwMDANCjE5OTAsUEhJLE5MLHBhcnJlamUwMSw2NTAwMDANCjE5OTAsUEhJLE5MLHJlYWR5cmEwMSw1MjAwMDANCjE5OTAsUEhJLE5MLGNhcm1hZG8wMSw1MDAwMDANCjE5OTAsUEhJLE5MLGRhdWx0ZGEwMSw0MjUwMDANCjE5OTAsUEhJLE5MLGplbHR6c3QwMSw0MTAwMDANCjE5OTAsUEhJLE5MLHJ1ZmZpYnIwMSwzNTAwMDANCjE5OTAsUEhJLE5MLGxha2VzdDAxLDM0MDAwMA0KMTk5MCxQSEksTkwsam9yZGFyaTAyLDIxNTAwMA0KMTk5MCxQSEksTkwsZm9yZGN1MDEsMTk1MDAwDQoxOTkwLFBISSxOTCxtdWxob3RlMDEsMTUwMDAwDQoxOTkwLFBISSxOTCxvbnRpdnN0MDIsMTUwMDAwDQoxOTkwLFBISSxOTCxjb29rZGUwMSwxMjAwMDANCjE5OTAsUEhJLE5MLGhheWVzY2gwMSwxMjAwMDANCjE5OTAsUEhJLE5MLGNvbWJzcGEwMSwxMTIwMDANCjE5OTAsUEhJLE5MLGZyb2h3dG8wMSwxMTAwMDANCjE5OTAsUEhJLE5MLGdyaW1zamEwMSwxMDUwMDANCjE5OTAsUEhJLE5MLG1jZWxyY2gwMSwxMDUwMDANCjE5OTAsUEhJLE5MLGNhbXB1c2kwMSwxMDAwMDANCjE5OTAsUEhJLE5MLGhvbGxpZGEwMSwxMDAwMDANCjE5OTAsUEhJLE5MLG1hbG9uY2gwMiwxMDAwMDANCjE5OTAsUEhJLE5MLG1vb3JlYnIwMSwxMDAwMDANCjE5OTAsUEhJLE5MLHZhdGNoamkwMSwxMDAwMDANCjE5OTAsUElULE5MLGJvbmlsYm8wMSwxMjUwMDAwDQoxOTkwLFBJVCxOTCx2YW5zbGFuMDEsMTIwMDAwMA0KMTk5MCxQSVQsTkwsZHJhYmVkbzAxLDExMDAwMDANCjE5OTAsUElULE5MLGJvbmRzYmEwMSw4NTAwMDANCjE5OTAsUElULE5MLHdhbGtibzAxLDg1MDAwMA0KMTk5MCxQSVQsTkwsc21pbGVqbzAxLDg0MDAwMA0KMTk5MCxQSVQsTkwsdGVycmV3YTAxLDgwMDAwMA0KMTk5MCxQSVQsTkwsaGVhdG9uZTAxLDcwMDAwMA0KMTk5MCxQSVQsTkwsaGF0Y2hiaTAxLDY5MDAwMA0KMTk5MCxQSVQsTkwsc2xhdWdkbzAxLDY1MDAwMA0KMTk5MCxQSVQsTkwsbGF2YWxtaTAxLDU3NTAwMA0KMTk5MCxQSVQsTkwscmV5bm9yajAxLDUzNTAwMA0KMTk5MCxQSVQsTkwsa2lwcGVibzAxLDUyNTAwMA0KMTk5MCxQSVQsTkwsYnJlYW1zaTAxLDUxMDAwMA0KMTk5MCxQSVQsTkwscmVkdXNnYTAxLDUwMDAwMA0KMTk5MCxQSVQsTkwsYmFja213YTAxLDQwMDAwMA0KMTk5MCxQSVQsTkwsYmVsbGlyYTAxLDM4MDAwMA0KMTk5MCxQSVQsTkwsb3J0aXpqdTAxLDM1MDAwMA0KMTk5MCxQSVQsTkwscG93ZXJ0ZTAxLDM1MDAwMA0KMTk5MCxQSVQsTkwsYmFpcmRvMDEsMzI1MDAwDQoxOTkwLFBJVCxOTCxsYW5kcmJpMDEsMzAyNTAwDQoxOTkwLFBJVCxOTCxsaW5kam8wMSwyNzAwMDANCjE5OTAsUElULE5MLGJlbGxqYTAxLDE4MDAwMA0KMTk5MCxQSVQsTkwsa3JhbWVyYTAxLDE1MDAwMA0KMTk5MCxQSVQsTkwscGF0dGVibzAxLDE1MDAwMA0KMTk5MCxQSVQsTkwsa2luZ2plMDEsMTEyNTAwDQoxOTkwLFBJVCxOTCxwcmluY3RvMDEsMTA3MDAwDQoxOTkwLFBJVCxOTCx5b3JrbWkwMSwxMDQwMDANCjE5OTAsUElULE5MLGFsb3VtbzAxLDEwMDAwMA0KMTk5MCxQSVQsTkwsYmVsaW5zdDAxLDEwMDAwMA0KMTk5MCxQSVQsTkwsY2hhbWJ3ZTAxLDEwMDAwMA0KMTk5MCxQSVQsTkwsZ2FyY2ljYTAxLDEwMDAwMA0KMTk5MCxQSVQsTkwsbGl0dGxzYzAxLDEwMDAwMA0KMTk5MCxQSVQsTkwsbWVyY2VvcjAxLDEwMDAwMA0KMTk5MCxQSVQsTkwscGVndWVqdTAxLDEwMDAwMA0KMTk5MCxQSVQsTkwscnVza2lzYzAxLDEwMDAwMA0KMTk5MCxTRE4sTkwsY2xhcmtqYTAxLDIwMDAwMDANCjE5OTAsU0ROLE5MLGNhcnRlam8wMSwxODY2NjY3DQoxOTkwLFNETixOTCxodXJzdGJyMDEsMTYzMzMzMw0KMTk5MCxTRE4sTkwsbGVmZmVjcjAxLDEyNjY2NjcNCjE5OTAsU0ROLE5MLHdoaXRzZWQwMSwxMTI1MDAwDQoxOTkwLFNETixOTCxnd3lubnRvMDEsMTA2NjY2Nw0KMTk5MCxTRE4sTkwsc2hvd2VyMDEsMTA1MDAwMA0KMTk5MCxTRE4sTkwscmFzbXVkZTAxLDgwMjAwMA0KMTk5MCxTRE4sTkwsc2FudGliZTAxLDc1MDAwMA0KMTk5MCxTRE4sTkwsaGFycmlncjAyLDcxNTAwMA0KMTk5MCxTRE4sTkwsbHlubmZyMDEsNjUwMDAwDQoxOTkwLFNETixOTCxzY2hpcmNhMDEsNjAwMDAwDQoxOTkwLFNETixOTCxwYWdsaW1pMDEsNTc1MDAwDQoxOTkwLFNETixOTCx0ZW1wbGdhMDEsNTUwMDAwDQoxOTkwLFNETixOTCxncmFudG1hMDEsNDAwMDAwDQoxOTkwLFNETixOTCxhbG9tYXJvMDEsMzkwMDAwDQoxOTkwLFNETixOTCxjbGVtZXBhMDEsMjQ1MDAwDQoxOTkwLFNETixOTCxkdW5uZW1pMDEsMjIyNTAwDQoxOTkwLFNETixOTCxyb2JlcmJpMDEsMTk1MDAwDQoxOTkwLFNETixOTCxwYXJlbm1hMDEsMTkwMDAwDQoxOTkwLFNETixOTCxqYWNrc2RhMDMsMTQ1MDAwDQoxOTkwLFNETixOTCxiZW5lc2FuMDEsMTMwMDAwDQoxOTkwLFNETixOTCxjbGFya2plMDEsMTA5NTAwDQoxOTkwLFNETixOTCxub2x0ZWVyMDEsMTA2MDAwDQoxOTkwLFNETixOTCxhYm5lcnNoMDEsMTA1MDAwDQoxOTkwLFNETixOTCxib25lc3JpMDEsMTAwMDAwDQoxOTkwLFNETixOTCxjb3Jham8wMSwxMDAwMDANCjE5OTAsU0ROLE5MLGhlcm5hamUwMiwxMDAwMDANCjE5OTAsU0ROLE5MLGhvd2FydGgwMSwxMDAwMDANCjE5OTAsU0ROLE5MLG5lbHNvcm8wMywxMDAwMDANCjE5OTAsU0ROLE5MLG9saXZhb20wMSwxMDAwMDANCjE5OTAsU0ROLE5MLHN0ZXBocGgwMSwxMDAwMDANCjE5OTAsU0ZOLE5MLGNsYXJrd2kwMiwyMjUwMDAwDQoxOTkwLFNGTixOTCxtaXRjaGtlMDEsMjA4MzAwMA0KMTk5MCxTRk4sTkwsYmVkcm9zdDAxLDE0NTAwMDANCjE5OTAsU0ZOLE5MLGdhcnJlc2MwMSwxNDAwMDAwDQoxOTkwLFNGTixOTCxiYXNza2UwMSwxMjUwMDAwDQoxOTkwLFNGTixOTCxsYWNvc21pMDEsMTE1MDAwMA0KMTk5MCxTRk4sTkwsYnV0bGVicjAxLDExMDAwMDANCjE5OTAsU0ZOLE5MLHVyaWJlam8wMSw5ODMzMzMNCjE5OTAsU0ZOLE5MLHJvYmluZG8wMSw5NTAwMDANCjE5OTAsU0ZOLE5MLHRob21wcm8wMSw5MDAwMDANCjE5OTAsU0ZOLE5MLGtlbm5ldGUwMiw4NTAwMDANCjE5OTAsU0ZOLE5MLGhhbW1hYXQwMSw3NzUwMDANCjE5OTAsU0ZOLE5MLHJpbGVzZXIwMSw2NzUwMDANCjE5OTAsU0ZOLE5MLGFuZGVyZGEwMiw1MDAwMDANCjE5OTAsU0ZOLE5MLGRvd25za2UwMSw0MjUwMDANCjE5OTAsU0ZOLE5MLGNhcnRlZ2EwMSwyNTAwMDANCjE5OTAsU0ZOLE5MLG5peG9uZG8wMSwyMjUwMDANCjE5OTAsU0ZOLE5MLHdpbGxpbWEwNCwxOTAwMDANCjE5OTAsU0ZOLE5MLGJyYW50amUwMSwxNzUwMDANCjE5OTAsU0ZOLE5MLGxhZ2FtaTAxLDE1NTAwMA0KMTk5MCxTRk4sTkwsY2FtYWNlcjAxLDE1MDAwMA0KMTk5MCxTRk4sTkwsbWFud2FraTAxLDE1MDAwMA0KMTk5MCxTRk4sTkwsamFja3NjaDAzLDEzMDAwMA0KMTk5MCxTRk4sTkwsbGl0dG9ncjAxLDEyMjAwMA0KMTk5MCxTRk4sTkwsd2lsc290cjAxLDEyMjAwMA0KMTk5MCxTRk4sTkwsYmF0aGViaTAxLDEyMDAwMA0KMTk5MCxTRk4sTkwsYmVuamFtaTAxLDEwNTAwMA0KMTk5MCxTRk4sTkwsYnVya2VqbzAzLDEwMDAwMA0KMTk5MCxTRk4sTkwsZ3VuZGVlcjAxLDEwMDAwMA0KMTk5MCxTRk4sTkwsbWNjbGVwYTAxLDEwMDAwMA0KMTk5MCxTRk4sTkwscGFya2VyaTAxLDEwMDAwMA0KMTk5MCxTRk4sTkwscXVpc2VkYTAxLDEwMDAwMA0KMTk5MCxTRk4sTkwscmVtbGltaTAxLDEwMDAwMA0KMTk5MCxTRk4sTkwsc2FudGFhbjAxLDEwMDAwMA0KMTk5MCxTTE4sTkwsZ3VlcnJwZTAxLDIwODMzMzMNCjE5OTAsU0xOLE5MLHNtaXRob3owMSwxOTc1MDAwDQoxOTkwLFNMTixOTCxwZW5kbHRlMDEsMTg1MDAwMA0KMTk5MCxTTE4sTkwsZGVsZW9qbzAxLDE2NjY2NjcNCjE5OTAsU0xOLE5MLHNtaXRoYnIwMSwxNTY2NjY3DQoxOTkwLFNMTixOTCxicnVuYXRvMDEsMTUwMDAwMA0KMTk5MCxTTE4sTkwsbWNnZWV3aTAxLDE1MDAwMDANCjE5OTAsU0xOLE5MLGNvbGVtdmkwMSwxMDEyNTAwDQoxOTkwLFNMTixOTCxkYXlsZWtlMDEsOTI1MDAwDQoxOTkwLFNMTixOTCx0aG9tcG1pMDIsODY2NjY3DQoxOTkwLFNMTixOTCx3b3JyZXRvMDEsODI1MDAwDQoxOTkwLFNMTixOTCxkaXBpbmZyMDEsNjUwMDAwDQoxOTkwLFNMTixOTCxvcXVlbmpvMDEsNTc1MDAwDQoxOTkwLFNMTixOTCx3YWxsaWRlMDEsNTAwMDAwDQoxOTkwLFNMTixOTCx0ZXJyeXNjMDEsMzcwMDAwDQoxOTkwLFNMTixOTCx0dWRvcmpvMDEsMzUwMDAwDQoxOTkwLFNMTixOTCxtYWdyYWpvMDEsMzAwMDAwDQoxOTkwLFNMTixOTCxtb3JyaWpvMDcsMjA3NTAwDQoxOTkwLFNMTixOTCxjb3hkYTAxLDE1MDAwMA0KMTk5MCxTTE4sTkwsbWF0aGVncjAxLDEyNTAwMA0KMTk5MCxTTE4sTkwsaG9ydG9yaTAxLDEyMDAwMA0KMTk5MCxTTE4sTkwsY29zdGVqbzAxLDEwNTAwMA0KMTk5MCxTTE4sTkwsYnJld2VybzAxLDEwMDAwMA0KMTk5MCxTTE4sTkwsY2FycGVjcjAxLDEwMDAwMA0KMTk5MCxTTE4sTkwsZ2lsa2ViZTAxLDEwMDAwMA0KMTk5MCxTTE4sTkwsaGlsbGtlMDEsMTAwMDAwDQoxOTkwLFNMTixOTCxqb25lc3RpMDIsMTAwMDAwDQoxOTkwLFNMTixOTCxsYW5rZnJhMDEsMTAwMDAwDQoxOTkwLFNMTixOTCxwYWdub3RvMDEsMTAwMDAwDQoxOTkwLFNMTixOTCxwZW5hZ2UwMSwxMDAwMDANCjE5OTAsU0xOLE5MLHBlcmV6bWkwMSwxMDAwMDANCjE5OTAsU0xOLE5MLHN0ZXBocmEwMSwxMDAwMDANCjE5OTAsU0xOLE5MLHRld2tzYm8wMSwxMDAwMDANCjE5OTAsU0xOLE5MLHdpbHNvY3IwMSwxMDAwMDANCjE5OTAsU0xOLE5MLHplaWxldG8wMSwxMDAwMDANCjE5OTEsQkFMLEFMLGRhdmlzZ2wwMSwzMjc1MDAwDQoxOTkxLEJBTCxBTCxyaXBrZWNhMDEsMjU2NjY2Nw0KMTk5MSxCQUwsQUwsZGF2aXNzdDAyLDIzNjY2NjYNCjE5OTEsQkFMLEFMLG9yc3Vsam8wMSwxMTAwMDAwDQoxOTkxLEJBTCxBTCxldmFuc2R3MDEsODAwMDAwDQoxOTkxLEJBTCxBTCxyaXBrZWJpMDEsNzAwMDAwDQoxOTkxLEJBTCxBTCx3aWxsaW1hMDUsNjg1MDAwDQoxOTkxLEJBTCxBTCxtZWx2aWJvMDEsNjUwMDAwDQoxOTkxLEJBTCxBTCxyb2JpbmplMDIsNTc1MDAwDQoxOTkxLEJBTCxBTCxvbHNvbmdyMDEsNTA1MDAwDQoxOTkxLEJBTCxBTCxtY2RvbmJlMDEsNDkxNjY3DQoxOTkxLEJBTCxBTCxiYWxsYWplMDEsNDY1MDAwDQoxOTkxLEJBTCxBTCxtaWxsaXJhMDEsMzMwMDAwDQoxOTkxLEJBTCxBTCxodWxldHRpMDEsMzI3NTAwDQoxOTkxLEJBTCxBTCxtaWxhY2JvMDEsMjgwMDAwDQoxOTkxLEJBTCxBTCxmbGFuYW1pMDEsMjUwMDAwDQoxOTkxLEJBTCxBTCxkZXZlcm1pMDEsMjEwMDAwDQoxOTkxLEJBTCxBTCx3b3J0aGNyMDEsMjA3NTAwDQoxOTkxLEJBTCxBTCxqb2huc2RhMDQsMjAwMDAwDQoxOTkxLEJBTCxBTCxraWxndXBhMDEsMjAwMDAwDQoxOTkxLEJBTCxBTCxob3Juc2EwMSwxNzUwMDANCjE5OTEsQkFMLEFMLGFuZGVyYnIwMSwxNjUwMDANCjE5OTEsQkFMLEFMLGJhdXRpam8wMSwxMzgwMDANCjE5OTEsQkFMLEFMLGZyb2h3dG8wMSwxMzAwMDANCjE5OTEsQkFMLEFMLGhvaWxlY2gwMSwxMDc1MDANCjE5OTEsQkFMLEFMLG1lc2FqbzAxLDEwNzAwMA0KMTk5MSxCQUwsQUwsc2VndWlkYTAxLDEwNjAwMA0KMTk5MSxCQUwsQUwsYmVsbGp1MDEsMTAzMDAwDQoxOTkxLEJBTCxBTCxnb21lemxlMDIsMTAyNTAwDQoxOTkxLEJBTCxBTCxtdXNzaW1pMDEsMTAwMDAwDQoxOTkxLEJBTCxBTCxyaG9kZWFyMDEsMTAwMDAwDQoxOTkxLEJPUyxBTCxkYXJ3aWRhMDEsMzI1MDAwMA0KMTk5MSxCT1MsQUwsY2xhcmtqYTAxLDI5MDAwMDANCjE5OTEsQk9TLEFMLGJvZ2dzd2EwMSwyNzUwMDAwDQoxOTkxLEJPUyxBTCxjbGVtZXJvMDIsMjcwMDAwMA0KMTk5MSxCT1MsQUwsZ3JlZW5taTAxLDI2NTAwMDANCjE5OTEsQk9TLEFMLHJlYXJkamUwMSwyNTMzMzMzDQoxOTkxLEJPUyxBTCxicnVuYXRvMDEsMjUwMDAwMA0KMTk5MSxCT1MsQUwscGVuYXRvMDEsMjMwMDAwMA0KMTk5MSxCT1MsQUwseW91bmdtYTAxLDIyNjY2NjcNCjE5OTEsQk9TLEFMLGJ1cmtzZWwwMSwxODI1MDAwDQoxOTkxLEJPUyxBTCxoYXJyaWdyMDEsMTMwMDAwMA0KMTk5MSxCT1MsQUwsbWFyc2htaTAyLDEzMDAwMDANCjE5OTEsQk9TLEFMLGhhdGNoYmkwMSwxMjUwMDAwDQoxOTkxLEJPUyxBTCxyZWVkam8wMSw4NTAwMDANCjE5OTEsQk9TLEFMLGxhbXBkZTAxLDc1MDAwMA0KMTk5MSxCT1MsQUwsbHlvbnNzdDAxLDY1MDAwMA0KMTk5MSxCT1MsQUwscml2ZXJsdTAxLDYzNTAwMA0KMTk5MSxCT1MsQUwsaGVza2VqbzAxLDUyNTAwMA0KMTk5MSxCT1MsQUwscm9taW5rZTAxLDM1NTAwMA0KMTk5MSxCT1MsQUwscXVpbnRjYTAxLDMwNTAwMA0KMTk5MSxCT1MsQUwsYm9sdG90bzAxLDI5MDAwMA0KMTk5MSxCT1MsQUwsZG9wc29qbzAxLDI2NTAwMA0KMTk5MSxCT1MsQUwsa2llY2tkYTAxLDE2NzUwMA0KMTk5MSxCT1MsQUwsZm9zc2F0bzAxLDE2NTAwMA0KMTk5MSxCT1MsQUwsZ3JheWplMDEsMTU1MDAwDQoxOTkxLEJPUyxBTCxuYWVocnRpMDEsMTI1MDAwDQoxOTkxLEJPUyxBTCxtYXJ6YWpvMDEsMTA1MDAwDQoxOTkxLEJPUyxBTCxjb29wZXNjMDEsMTAwMDAwDQoxOTkxLEJPUyxBTCx2YXVnaG1vMDEsMTAwMDAwDQoxOTkxLEJPUyxBTCx6dXBjaWJvMDEsMTAwMDAwDQoxOTkxLENBTCxBTCxsYW5nc21hMDEsMzU1MDAwMA0KMTk5MSxDQUwsQUwsd2luZmlkYTAxLDMzMDAwMDANCjE5OTEsQ0FMLEFMLGdhZXR0Z2EwMSwyNzAwMDAwDQoxOTkxLENBTCxBTCxmaW5sZWNoMDEsMjUwMDAwMA0KMTk5MSxDQUwsQUwscGFycmlsYTAyLDI0MTY2NjcNCjE5OTEsQ0FMLEFMLGpveW5ld2EwMSwyMTAwMDAwDQoxOTkxLENBTCxBTCxtY2Nhc2tpMDEsMjEwMDAwMA0KMTk5MSxDQUwsQUwsYmx5bGViZTAxLDIwMDAwMDANCjE5OTEsQ0FMLEFMLHBhcmtlZGEwMSwxNjAwMDAwDQoxOTkxLENBTCxBTCxzY2hvZmRpMDIsMTQ4MzMzNA0KMTk5MSxDQUwsQUwsaGFydmVicjAxLDEwNDAwMDANCjE5OTEsQ0FMLEFMLHJvYmluamUwMSwxMDAwMDAwDQoxOTkxLENBTCxBTCxwb2xvbmx1MDEsODQ1MDAwDQoxOTkxLENBTCxBTCx3aGl0ZWRlMDMsODAwMDAwDQoxOTkxLENBTCxBTCxtY2NsdWJvMDEsNzAwMDAwDQoxOTkxLENBTCxBTCxlaWNoaG1hMDEsNjgwMDAwDQoxOTkxLENBTCxBTCxob3dlbGphMDIsNjUyNTAwDQoxOTkxLENBTCxBTCxoaWxsZG8wMSw1MDAwMDANCjE5OTEsQ0FMLEFMLGJhaWxlc2MwMSw0MjUwMDANCjE5OTEsQ0FMLEFMLHZlbmFibWEwMSw0MjUwMDANCjE5OTEsQ0FMLEFMLGFiYm90amkwMSwzNTc1MDANCjE5OTEsQ0FMLEFMLGdhbGxhZGEwMSwzNTc1MDANCjE5OTEsQ0FMLEFMLGZlbGl4anUwMSwzMTAwMDANCjE5OTEsQ0FMLEFMLHZhbGVuZmUwMSwzMDAwMDANCjE5OTEsQ0FMLEFMLGJhbm5pZmwwMSwyNTAwMDANCjE5OTEsQ0FMLEFMLGZldHRlbWkwMSwxMjAwMDANCjE5OTEsQ0FMLEFMLG9ydG9uam8wMSwxMjAwMDANCjE5OTEsQ0FMLEFMLHNvam9sdTAxLDExMDAwMA0KMTk5MSxDQUwsQUwscm9zZWJvMDEsMTA3NTAwDQoxOTkxLENBTCxBTCxsZXdpc3NjMDEsMTA1MDAwDQoxOTkxLENBTCxBTCx5b3VuZ2NsMDEsMTA1MDAwDQoxOTkxLENIQSxBTCxyYWluZXRpMDEsMzUwMDAwMA0KMTk5MSxDSEEsQUwsdGhpZ3BibzAxLDI0MTg2NjcNCjE5OTEsQ0hBLEFMLGd1aWxsb3owMSwxNjAwMDAwDQoxOTkxLENIQSxBTCxmbGV0Y3NjMDEsMTMwMDAwMA0KMTk5MSxDSEEsQUwsZmlza2NhMDEsMTI1MDAwMA0KMTk5MSxDSEEsQUwsamFja3NibzAxLDEwMTAwMDANCjE5OTEsQ0hBLEFMLGhvdWdoY2gwMSw4MDAwMDANCjE5OTEsQ0hBLEFMLHBhc3F1ZGEwMSw4MDAwMDANCjE5OTEsQ0hBLEFMLHNueWRlY28wMiw4MDAwMDANCjE5OTEsQ0hBLEFMLHBhbGxkbzAxLDQ0ODAwMA0KMTk5MSxDSEEsQUwsam9obnNsYTAzLDM4NTAwMA0KMTk5MSxDSEEsQUwscGVyZXptZTAxLDM1ODAwMA0KMTk5MSxDSEEsQUwsa2Fya29ybzAxLDMxMDAwMA0KMTk5MSxDSEEsQUwsbWNkb3dqYTAxLDE3NTAwMA0KMTk5MSxDSEEsQUwscGF0dGVrZTAxLDE2MDAwMA0KMTk5MSxDSEEsQUwsaGliYmFncjAxLDE1MDAwMA0KMTk5MSxDSEEsQUwsc29zYXNhMDEsMTUwMDAwDQoxOTkxLENIQSxBTCx2ZW50dXJvMDEsMTUwMDAwDQoxOTkxLENIQSxBTCxlZHdhcndhMDEsMTQwMDAwDQoxOTkxLENIQSxBTCxyYWRpbnNjMDEsMTMwMDAwDQoxOTkxLENIQSxBTCxncmViZWNyMDEsMTI1MDAwDQoxOTkxLENIQSxBTCxjb3Jham8wMSwxMjAwMDANCjE5OTEsQ0hBLEFMLGZlcm5hYWwwMSwxMjAwMDANCjE5OTEsQ0hBLEFMLHRob21hZnIwNCwxMjAwMDANCjE5OTEsQ0hBLEFMLGFsdmFyd2kwMSwxMDAwMDANCjE5OTEsQ0hBLEFMLGRyYWhtYnIwMSwxMDAwMDANCjE5OTEsQ0hBLEFMLGhlcm5hcm8wMSwxMDAwMDANCjE5OTEsQ0hBLEFMLG5ld3Nvd2EwMSwxMDAwMDANCjE5OTEsQ0xFLEFMLGNhbmRpdG8wMSwyNTAwMDAwDQoxOTkxLENMRSxBTCxqb25lc2RvMDEsMjA1MDAwMA0KMTk5MSxDTEUsQUwsc3dpbmRncjAxLDIwMjUwMDANCjE5OTEsQ0xFLEFMLGhlcm5ha2UwMSwxNzUwMDAwDQoxOTkxLENMRSxBTCxraW5nZXIwMSwxNDUwMDAwDQoxOTkxLENMRSxBTCxqYW1lc2NoMDIsMTM2NzUwMA0KMTk5MSxDTEUsQUwsb3Jvc2NqZTAxLDkwMDAwMA0KMTk5MSxDTEUsQUwsYnJvd25qZTAxLDgwMDAwMA0KMTk5MSxDTEUsQUwsd2Vic3RtaTAxLDc1MDAwMA0KMTk5MSxDTEUsQUwsc2tpbm5qbzAxLDYxMDAwMA0KMTk5MSxDTEUsQUwsZmVybWlmZTAxLDU3NTAwMA0KMTk5MSxDTEUsQUwsZmFycmVqbzAzLDQxMDAwMA0KMTk5MSxDTEUsQUwsYWxvbWFzYTAyLDM2MDAwMA0KMTk5MSxDTEUsQUwsYmFlcmdjYTAxLDIwNTAwMA0KMTk5MSxDTEUsQUwsb2xpbnN0MDEsMTc1MDAwDQoxOTkxLENMRSxBTCxoaWxsZ2wwMSwxNzAwMDANCjE5OTEsQ0xFLEFMLGNvbGVhbDAxLDE1NTAwMA0KMTk5MSxDTEUsQUwsYmVsbGVhbDAxLDEzMDAwMA0KMTk5MSxDTEUsQUwsbmljaG9ybzAyLDEyNTAwMA0KMTk5MSxDTEUsQUwsbmFneWNoMDEsMTE1MDAwDQoxOTkxLENMRSxBTCxtYW50b2plMDEsMTEwMDAwDQoxOTkxLENMRSxBTCxhbGxyZWJlMDEsMTAyNTAwDQoxOTkxLENMRSxBTCxlZ2xvZmJyMDEsMTAwMDAwDQoxOTkxLENMRSxBTCxodWZmbWkwMSwxMDAwMDANCjE5OTEsQ0xFLEFMLGtpcmJ5d2EwMSwxMDAwMDANCjE5OTEsQ0xFLEFMLGtyYW1ldG8wMSwxMDAwMDANCjE5OTEsQ0xFLEFMLG11dGlzamUwMSwxMDAwMDANCjE5OTEsQ0xFLEFMLHRhdWJlZWQwMSwxMDAwMDANCjE5OTEsQ0xFLEFMLHRob21lamkwMSwxMDAwMDANCjE5OTEsQ0xFLEFMLHdhcmR0dTAxLDEwMDAwMA0KMTk5MSxERVQsQUwsdHJhbW1hbDAxLDIyMDAwMDANCjE5OTEsREVULEFMLHdoaXRhbG8wMSwyMDAwMDAwDQoxOTkxLERFVCxBTCxkZWVycm8wMSwxOTY2NjY3DQoxOTkxLERFVCxBTCx0YW5hbmZyMDEsMTkwMDAwMA0KMTk5MSxERVQsQUwsZ3VsbGliaTAxLDE4MjUwMDANCjE5OTEsREVULEFMLGZpZWxkY2UwMSwxNzUwMDAwDQoxOTkxLERFVCxBTCxtb3NlYmxsMDEsMTYwMDAwMA0KMTk5MSxERVQsQUwsdGV0dGxtaTAxLDE2MDAwMDANCjE5OTEsREVULEFMLHBoaWxsdG8wMiwxNTY2NjY2DQoxOTkxLERFVCxBTCxoZW5uZW1pMDEsMTEwMDAwMA0KMTk5MSxERVQsQUwsdGVycmV3YTAxLDEwMDAwMDANCjE5OTEsREVULEFMLGNlcnV0am8wMSw4MDAwMDANCjE5OTEsREVULEFMLHBldHJ5ZGEwMSw2NTAwMDANCjE5OTEsREVULEFMLGJlcmdtZGEwMSw1NzUwMDANCjE5OTEsREVULEFMLGdpYnNvcGEwMSw1NjUwMDANCjE5OTEsREVULEFMLGJlcm5hdG8wMSw1MjUwMDANCjE5OTEsREVULEFMLHNoZWxiam8wMSw1MjUwMDANCjE5OTEsREVULEFMLGdsZWF0amUwMSw1MTAwMDANCjE5OTEsREVULEFMLHNhbGFzbWEwMSw0NTAwMDANCjE5OTEsREVULEFMLGZyeW1hdHIwMSwxNTAwMDANCjE5OTEsREVULEFMLGxlaXRlbWEwMSwxMzAwMDANCjE5OTEsREVULEFMLGdha2VsZGEwMSwxMjUwMDANCjE5OTEsREVULEFMLHNlYXJjc3QwMSwxMjUwMDANCjE5OTEsREVULEFMLGFsbGFuYW4wMSwxMDAwMDANCjE5OTEsREVULEFMLGN1eWxlbWkwMSwxMDAwMDANCjE5OTEsS0NBLEFMLGRhdmlzbWEwMSwzNjI1MDAwDQoxOTkxLEtDQSxBTCxib2RkaW1pMDEsMzE2NjY2Nw0KMTk5MSxLQ0EsQUwsYnJldHRnZTAxLDMxMDUwMDANCjE5OTEsS0NBLEFMLHNhYmVyYnIwMSwyOTUwMDAwDQoxOTkxLEtDQSxBTCx0YXJ0YWRhMDEsMjI1MDAwMA0KMTk5MSxLQ0EsQUwsZ3ViaWNtYTAxLDIxNjY2NjcNCjE5OTEsS0NBLEFMLGdpYnNva2kwMSwxNzAwMDAwDQoxOTkxLEtDQSxBTCxzZWl0emtlMDEsMTYyNTAwMA0KMTk5MSxLQ0EsQUwsc3RpbGxrdTAxLDEyODAwMDANCjE5OTEsS0NBLEFMLG1vbnRnamUwMSwxMDY1MDAwDQoxOTkxLEtDQSxBTCxlaXNlbmppMDEsOTUwMDAwDQoxOTkxLEtDQSxBTCxzY2hhdGRhMDEsNzAwMDAwDQoxOTkxLEtDQSxBTCxnb3Jkb3RvMDEsMzI1MDAwDQoxOTkxLEtDQSxBTCxwZWNvdGJpMDEsMzA3NTAwDQoxOTkxLEtDQSxBTCxtYWNmYW1pMDEsMjgwMDAwDQoxOTkxLEtDQSxBTCxhcHBpZWtlMDEsMjE1MDAwDQoxOTkxLEtDQSxBTCxhcXVpbmx1MDEsMTYwMDAwDQoxOTkxLEtDQSxBTCxtY3JhZWJyMDEsMTI0MDAwDQoxOTkxLEtDQSxBTCxtb3JtYXJ1MDEsMTE1MDAwDQoxOTkxLEtDQSxBTCxzaHVtcHRlMDEsMTEwMDAwDQoxOTkxLEtDQSxBTCxob3dhcmRhMDIsMTAwMDAwDQoxOTkxLE1JTixBTCxtb3JyaWphMDIsMzcwMDAwMA0KMTk5MSxNSU4sQUwscHVja2VraTAxLDMxNjY2NjcNCjE5OTEsTUlOLEFMLGhyYmVra2UwMSwyNjAwMDAwDQoxOTkxLE1JTixBTCxnYWduZWdyMDEsMTczMzMzMw0KMTk5MSxNSU4sQUwsZGF2aXNjaDAxLDE3MDAwMDANCjE5OTEsTUlOLEFMLGFndWlscmkwMSwxNTMzMzMzDQoxOTkxLE1JTixBTCxiZWRyb3N0MDEsMTM1MDAwMA0KMTk5MSxNSU4sQUwsZ2xhZGRkYTAxLDExMDAwMDANCjE5OTEsTUlOLEFMLGFuZGVyYWwwMiw3ODUwMDANCjE5OTEsTUlOLEFMLGxhcmtpZ2UwMSw3MjUwMDANCjE5OTEsTUlOLEFMLHBhZ2xpbWkwMSw2NTUwMDANCjE5OTEsTUlOLEFMLGhhcnBlYnIwMSw2MjUwMDANCjE5OTEsTUlOLEFMLGNhc3RpY2EwMSw2MDAwMDANCjE5OTEsTUlOLEFMLGxlYWNodGUwMSw1MzAwMDANCjE5OTEsTUlOLEFMLGJ1c2hyYTAxLDUwMDAwMA0KMTk5MSxNSU4sQUwsbmV3bWFhbDAxLDQ1MDAwMA0KMTk5MSxNSU4sQUwsb3J0aXpqdTAxLDQ1MDAwMA0KMTk5MSxNSU4sQUwsbWFja3NoMDEsMjcwMDAwDQoxOTkxLE1JTixBTCx0YXBhbmtlMDEsMTk3NTAwDQoxOTkxLE1JTixBTCxndXRocm1hMDEsMTYwMDAwDQoxOTkxLE1JTixBTCx3ZXN0ZGEwMSwxNjAwMDANCjE5OTEsTUlOLEFMLGVyaWNrc2MwMSwxNDM1MDANCjE5OTEsTUlOLEFMLHNvcnJlcGEwMSwxMjI1MDANCjE5OTEsTUlOLEFMLGNhc2lhbGEwMSwxMDUwMDANCjE5OTEsTUw0LEFMLG1vbGl0cGEwMSwzMjQzMzMzDQoxOTkxLE1MNCxBTCx5b3VudHJvMDEsMzIwMDAwMA0KMTk5MSxNTDQsQUwsY3JpbWNoMDEsMjgzMzMzMw0KMTk5MSxNTDQsQUwsbnVuZXplZDAxLDIyNjY2NjcNCjE5OTEsTUw0LEFMLHN0dWJiZnIwMSwxODY2NjY3DQoxOTkxLE1MNCxBTCxzdXJob2JqMDEsMTA4NTAwMA0KMTk5MSxNTDQsQUwsZ2FudG5qaTAxLDEwMDAwMDANCjE5OTEsTUw0LEFMLHBsZXNhZGEwMSwxMDAwMDAwDQoxOTkxLE1MNCxBTCxicm9ja2dyMDEsOTM3NTAwDQoxOTkxLE1MNCxBTCxib3Npb2NoMDEsODc1MDAwDQoxOTkxLE1MNCxBTCxtYWxkb2NhMDEsODc1MDAwDQoxOTkxLE1MNCxBTCxuYXZhcmphMDEsODM1MDAwDQoxOTkxLE1MNCxBTCxyYW5kb3dpMDEsNTAwMDAwDQoxOTkxLE1MNCxBTCxrbnVkc21hMDEsNDg1MDAwDQoxOTkxLE1MNCxBTCx3ZWdtYWJpMDEsNDQwMDAwDQoxOTkxLE1MNCxBTCxzaGVmZmdhMDEsNDAwMDAwDQoxOTkxLE1MNCxBTCxzcGllcmJpMDEsMjUwMDAwDQoxOTkxLE1MNCxBTCxtYWNoYWp1MDEsMTkwMDAwDQoxOTkxLE1MNCxBTCx2YXVnaGdyMDEsMTkwMDAwDQoxOTkxLE1MNCxBTCxiaWNoZWRhMDEsMTg1MDAwDQoxOTkxLE1MNCxBTCxoYW1pbGRhMDIsMTY4MDAwDQoxOTkxLE1MNCxBTCxkZW1wc3JpMDEsMTUwMDAwDQoxOTkxLE1MNCxBTCxsZWVtYTAzLDE0MDAwMA0KMTk5MSxOWUEsQUwsbWF0dGlkbzAxLDM0MjAwMDANCjE5OTEsTllBLEFMLHdpdHRtaTAxLDI0MTY2NjcNCjE5OTEsTllBLEFMLGZhcnJzdDAxLDI0MDAwMDANCjE5OTEsTllBLEFMLHBlcmV6cGEwMSwyMTMzMzMzDQoxOTkxLE5ZQSxBTCxzYW5kZXNjMDEsMjEyNTAwMA0KMTk5MSxOWUEsQUwsbGVhcnl0aTAxLDE5NzUwMDANCjE5OTEsTllBLEFMLHNheHN0MDEsMTY1MDAwMQ0KMTk5MSxOWUEsQUwsaGF3a2lhbjAxLDE1MzMzMzQNCjE5OTEsTllBLEFMLGJhcmZpamUwMSwxMzMzMzMzDQoxOTkxLE5ZQSxBTCxoYWxsbWUwMSwxMTAwMDAwDQoxOTkxLE5ZQSxBTCxndWV0dGxlMDEsMTA1MDAwMA0KMTk5MSxOWUEsQUwscGx1bmtlcjAxLDk3NTAwMA0KMTk5MSxOWUEsQUwsa2VsbHlybzAxLDkwMDAwMA0KMTk5MSxOWUEsQUwsbm9rZXNtYTAxLDg4NzUwMA0KMTk5MSxOWUEsQUwsY2FkYXJncjAxLDY3NTAwMA0KMTk5MSxOWUEsQUwsZXNwaW5hbDAxLDY1MDAwMA0KMTk5MSxOWUEsQUwsY2FyeWNoMDEsNTcwMDAwDQoxOTkxLE5ZQSxBTCxtYWFza2UwMSwyNTAwMDANCjE5OTEsTllBLEFMLGdlcmVuYm8wMSwyMzAwMDANCjE5OTEsTllBLEFMLHZlbGFycmEwMSwxNDUwMDANCjE5OTEsTllBLEFMLGxleXJpamkwMSwxMzUwMDANCjE5OTEsTllBLEFMLGJsb3dlbWkwMSwxMzAwMDANCjE5OTEsTllBLEFMLG1pbGxzYWwwMSwxMjUwMDANCjE5OTEsTllBLEFMLG1ldWxlaGUwMSwxMjAwMDANCjE5OTEsTllBLEFMLGVpbGFuZGEwMSwxMTAwMDANCjE5OTEsTllBLEFMLGhhYnlham8wMSwxMDUwMDANCjE5OTEsTllBLEFMLGxvdnVsdG8wMSwxMDAwMDANCjE5OTEsTllBLEFMLHdpbGxpYmUwMiwxMDAwMDANCjE5OTEsT0FLLEFMLGNhbnNlam8wMSwzNTAwMDAwDQoxOTkxLE9BSyxBTCx3ZWxjaGJvMDEsMzQ1MDAwMA0KMTk5MSxPQUssQUwsaGVuZGVyaTAxLDMyNTAwMDANCjE5OTEsT0FLLEFMLHN0ZXdhZGEwMSwzMTY2NjY3DQoxOTkxLE9BSyxBTCxlY2tlcmRlMDEsMzAwMDAwMA0KMTk5MSxPQUssQUwsbWNnd2ltYTAxLDI4NTAwMDANCjE5OTEsT0FLLEFMLGhlbmRlZGEwMSwyNTAwMDAwDQoxOTkxLE9BSyxBTCxtb29yZW1pMDEsMTU5MTY2Nw0KMTk5MSxPQUssQUwsYmFpbmVoYTAxLDEzNTgzMzMNCjE5OTEsT0FLLEFMLGhvbmV5cmkwMSwxMzUwMDAwDQoxOTkxLE9BSyxBTCxsYW5zZmNhMDEsMTI3NTAwMA0KMTk5MSxPQUssQUwsamFjb2JicjAxLDExNTAwMDANCjE5OTEsT0FLLEFMLG5lbHNvZ2UwMSwxMTAwMDAwDQoxOTkxLE9BSyxBTCxzdGVpbnRlMDEsMTA1MDAwMA0KMTk5MSxPQUssQUwsd2lsc293aTAyLDEwMDAwMDANCjE5OTEsT0FLLEFMLHNob3dlcjAxLDgwMDAwMA0KMTk5MSxPQUssQUwscmlsZXNlcjAxLDc5MjUwMA0KMTk5MSxPQUssQUwsd2Vpc3N3YTAxLDc4MDAwMA0KMTk5MSxPQUssQUwseW91bmdjdTAxLDc3NTAwMA0KMTk5MSxPQUssQUwsZ2FsbGVtaTAxLDU2NTAwMA0KMTk5MSxPQUssQUwsbGF3dmEwMSw1MDAwMDANCjE5OTEsT0FLLEFMLHF1aXJramEwMSw1MDAwMDANCjE5OTEsT0FLLEFMLGJ1cm5zdG8wMiwzMjUwMDANCjE5OTEsT0FLLEFMLGtsaW5ram8wMSwxNDAwMDANCjE5OTEsT0FLLEFMLGJsYW5rbGEwMiwxMjUwMDANCjE5OTEsT0FLLEFMLGNoaXRyc3QwMSwxMDUwMDANCjE5OTEsU0VBLEFMLG9icmllcGUwMywyMDM3NTAwDQoxOTkxLFNFQSxBTCxyZXlub2hhMDEsMTg2NjY2Ng0KMTk5MSxTRUEsQUwsZGF2aXNhbDAxLDE3MjUwMDANCjE5OTEsU0VBLEFMLG11cnBocm8wMSw5NTAwMDANCjE5OTEsU0VBLEFMLHN3aWZ0YmkwMiw5NTAwMDANCjE5OTEsU0VBLEFMLGJhbmtoc2MwMSw3NTUwMDANCjE5OTEsU0VBLEFMLGdyaWZma2UwMiw3MDAwMDANCjE5OTEsU0VBLEFMLGphY2tzbWkwMiw3MDAwMDANCjE5OTEsU0VBLEFMLHZhbGxlZGEwMSw2NjY2NjcNCjE5OTEsU0VBLEFMLGNvdHRvaGUwMSw2MDAwMDANCjE5OTEsU0VBLEFMLGJyYWRsc2MwMSw1NzUwMDANCjE5OTEsU0VBLEFMLGpvbmVzdHIwMSw1MjUwMDANCjE5OTEsU0VBLEFMLGtydWVnYmkwMSw1MDAwMDANCjE5OTEsU0VBLEFMLHNjaG9vbWkwMSw0OTAwMDANCjE5OTEsU0VBLEFMLGhhbnNvZXIwMSw0MDAwMDANCjE5OTEsU0VBLEFMLGpvaG5zcmEwNSwzNTAwMDANCjE5OTEsU0VBLEFMLG1hcnRpZWQwMSwzNTAwMDANCjE5OTEsU0VBLEFMLGhvbG1hYnIwMSwzMDAwMDANCjE5OTEsU0VBLEFMLGJyaWxlZ3IwMSwyNjUwMDANCjE5OTEsU0VBLEFMLGJ1aG5lamEwMSwyNDc1MDANCjE5OTEsU0VBLEFMLHZpenF1b20wMSwxODAwMDANCjE5OTEsU0VBLEFMLGhhcnJpZ2UwMSwxMzI1MDANCjE5OTEsU0VBLEFMLHNjaGFlamUwMSwxMTAwMDANCjE5OTEsU0VBLEFMLGNvY2hyZGEwMSwxMDgwMDANCjE5OTEsU0VBLEFMLHN3YW5ydTAxLDEwODAwMA0KMTk5MSxTRUEsQUwsZGVsdWNyaTAxLDEwMDAwMA0KMTk5MSxURVgsQUwscnlhbm5vMDEsMzMwMDAwMA0KMTk5MSxURVgsQUwsc2llcnJydTAxLDI2NTAwMDANCjE5OTEsVEVYLEFMLGZyYW5janUwMSwyMzUwMDAwDQoxOTkxLFRFWCxBTCxydXNzZWplMDEsMjIwMDAwMA0KMTk5MSxURVgsQUwsd2l0dGJvMDEsMTUxNjY2Nw0KMTk5MSxURVgsQUwscGFsbWVyYTAxLDE0NzUwMDANCjE5OTEsVEVYLEFMLHBldHRpZ2EwMSw5MDMzMzMNCjE5OTEsVEVYLEFMLGJ1ZWNoc3QwMSw3NzUwMDANCjE5OTEsVEVYLEFMLHBldHJhZ2UwMSw1NjI1MDANCjE5OTEsVEVYLEFMLGplZmZjbWkwMSwzOTAwMDANCjE5OTEsVEVYLEFMLGJyb3dua2UwMSwzNTUwMDANCjE5OTEsVEVYLEFMLGFybnNiYnIwMSwyODc1MDANCjE5OTEsVEVYLEFMLHJvZ2Vya2UwMSwyODc1MDANCjE5OTEsVEVYLEFMLHBhcmVubWEwMSwyODAwMDANCjE5OTEsVEVYLEFMLGRhdWdoamEwMSwyMDUwMDANCjE5OTEsVEVYLEFMLHN0YW5sbWkwMiwxNDUwMDANCjE5OTEsVEVYLEFMLGNoaWFtc2MwMSwxMTIwMDANCjE5OTEsVEVYLEFMLGJhcmZpam8wMSwxMTAwMDANCjE5OTEsVEVYLEFMLGtyZXV0Y2gwMSwxMTAwMDANCjE5OTEsVEVYLEFMLGJvaGFuYnIwMSwxMDUwMDANCjE5OTEsVEVYLEFMLHBvb2xlamkwMiwxMDUwMDANCjE5OTEsVE9SLEFMLGNhcnRlam8wMSwzNzkxNjY3DQoxOTkxLFRPUixBTCxncnViZWtlMDEsMzAzMzMzMw0KMTk5MSxUT1IsQUwsc3RpZWJkYTAxLDMwMDAwMDANCjE5OTEsVE9SLEFMLHdpbHNvbW8wMSwxNjI1MDAwDQoxOTkxLFRPUixBTCxhbG9tYXJvMDEsMTMwMDAwMA0KMTk5MSxUT1IsQUwsd2FyZGR1MDEsODAwMDAwDQoxOTkxLFRPUixBTCx3ZWxsc2RhMDEsODAwMDAwDQoxOTkxLFRPUixBTCxtdWxsaXJhMDEsNzI1MDAwDQoxOTkxLFRPUixBTCxsZWVtYTAyLDcxMjUwMA0KMTk5MSxUT1IsQUwsYm9yZGVwYTAxLDcwMDAwMA0KMTk5MSxUT1IsQUwsdGFibGVwYTAxLDcwMDAwMA0KMTk5MSxUT1IsQUwsd2lsbHNmcjAxLDQzNTAwMA0KMTk5MSxUT1IsQUwsc3RvdHR0bzAxLDMxNTAwMA0KMTk5MSxUT1IsQUwsZ29uemFyZTAxLDMwNjI1MA0KMTk5MSxUT1IsQUwsb2xlcnVqbzAxLDI5MzY2Nw0KMTk5MSxUT1IsQUwsd2lsbGlrZTAyLDI2MDAwMA0KMTk5MSxUT1IsQUwsbGVpdGVhbDAxLDE4MDAwMA0KMTk5MSxUT1IsQUwsbXllcnNncjAxLDE2MDAwMA0KMTk5MSxUT1IsQUwsZHVjZXlybzAxLDE1MDAwMA0KMTk5MSxUT1IsQUwsd2hpdGVtYTAxLDExNTAwMA0KMTk5MSxUT1IsQUwsZ3V6bWFqdTAxLDEwMDAwMA0KMTk5MSxUT1IsQUwsaGVudGdwYTAxLDEwMDAwMA0KMTk5MSxUT1IsQUwsa25vcnJyYTAxLDEwMDAwMA0KMTk5MSxUT1IsQUwsc3ByYWdlZDAyLDEwMDAwMA0KMTk5MSxUT1IsQUwsdGltbGltaTAxLDEwMDAwMA0KMTk5MSxBVEwsTkwsZXNhc2tuaTAxLDIxMDAwMDANCjE5OTEsQVRMLE5MLHNtaXRobG8wMSwyMDQxNjY3DQoxOTkxLEFUTCxOTCxsZWlicmNoMDEsMTgzMzMzMw0KMTk5MSxBVEwsTkwscGVuZGx0ZTAxLDE3NTAwMDANCjE5OTEsQVRMLE5MLGJyZWFtc2kwMSwxNjAwMDAwDQoxOTkxLEFUTCxOTCxnYW50cm8wMSwxMTk1MDAwDQoxOTkxLEFUTCxOTCxoZWF0aG1pMDIsOTUwMDAwDQoxOTkxLEFUTCxOTCxiZXJlbmp1MDEsOTAwMDAwDQoxOTkxLEFUTCxOTCxwYXJyZWplMDEsODU1MDAwDQoxOTkxLEFUTCxOTCx0cmVhZGplMDEsNzcwMDAwDQoxOTkxLEFUTCxOTCxnbGF2aXRvMDIsNjk3NTAwDQoxOTkxLEFUTCxOTCxzYW5kZWRlMDIsNjYwMDAwDQoxOTkxLEFUTCxOTCxncmFudG1hMDEsNTQwMDAwDQoxOTkxLEFUTCxOTCxzbWl0aHBlMDIsMzY1MDAwDQoxOTkxLEFUTCxOTCxzbW9sdGpvMDEsMzU1MDAwDQoxOTkxLEFUTCxOTCxqdXN0aWRhMDEsMjk2MDAwDQoxOTkxLEFUTCxOTCxibGF1c2plMDEsMjgwMDAwDQoxOTkxLEFUTCxOTCxncmVnZ3RvMDEsMjY1MDAwDQoxOTkxLEFUTCxOTCxmcmVlbW1hMDIsMTkwMDAwDQoxOTkxLEFUTCxOTCxjYXN0aXRvMDIsMTY1MDAwDQoxOTkxLEFUTCxOTCxsZW1rZW1hMDEsMTM4MDAwDQoxOTkxLEFUTCxOTCxzdGFudG1pMDIsMTIwMDAwDQoxOTkxLEFUTCxOTCxtZXJja2tlMDEsMTE3MDAwDQoxOTkxLEFUTCxOTCxhdmVyeXN0MDEsMTEwMDAwDQoxOTkxLEFUTCxOTCxjYWJyZWZyMDEsMTEwMDAwDQoxOTkxLENITixOTCxkYXdzb2FuMDEsMzMyNTAwMA0KMTk5MSxDSE4sTkwsamFja3NkYTAyLDI2MjUwMDANCjE5OTEsQ0hOLE5MLG1hZGR1Z3IwMSwyNDAwMDAwDQoxOTkxLENITixOTCxzdXRjbHJpMDEsMjI3NTAwMA0KMTk5MSxDSE4sTkwsYmVsbGdlMDIsMjE1MDAwMA0KMTk5MSxDSE4sTkwsZHVuc3RzaDAxLDIxMDAwMDANCjE5OTEsQ0hOLE5MLHNtaXRoZGEwMiwxOTAwMDAwDQoxOTkxLENITixOTCxncmFjZW1hMDEsMTIwMDAwMA0KMTk5MSxDSE4sTkwsYXNzZW5wYTAxLDExMTAwMDANCjE5OTEsQ0hOLE5MLGJpZWxlbWkwMSw4MTAwMDANCjE5OTEsQ0hOLE5MLHNhbGF6bHUwMSw1NzUwMDANCjE5OTEsQ0hOLE5MLGxhbmNhbGUwMSw1NTAwMDANCjE5OTEsQ0hOLE5MLGJlcnJ5ZGEwMSwyMzAwMDANCjE5OTEsQ0hOLE5MLHNtaXRoZHcwMSwyMjU2NjcNCjE5OTEsQ0hOLE5MLGdpcmFyam8wMSwyMjUwMDANCjE5OTEsQ0hOLE5MLGhhcmtlbWkwMSwyMjAwMDANCjE5OTEsQ0hOLE5MLHdhbHRvamUwMSwyMTAwMDANCjE5OTEsQ0hOLE5MLHdpbHNvdHIwMSwyMDUwMDANCjE5OTEsQ0hOLE5MLGRhc2NlZG8wMSwxNjUwMDANCjE5OTEsQ0hOLE5MLGJvc2tpc2gwMSwxMzAwMDANCjE5OTEsQ0hOLE5MLHZpbGxhaGUwMSwxMjAwMDANCjE5OTEsQ0hOLE5MLHZpemNham8wMSwxMTQwMDANCjE5OTEsQ0hOLE5MLG1jZWxyY2gwMSwxMTEwMDANCjE5OTEsQ0hOLE5MLHBhcHBhZXIwMSwxMDAwMDANCjE5OTEsQ0hOLE5MLHNsb2N1aGUwMSwxMDAwMDANCjE5OTEsQ0lOLE5MLGRhdmlzZXIwMSwzNjAwMDAwDQoxOTkxLENJTixOTCxkb3JhbmJpMDIsMjgzMzMzMw0KMTk5MSxDSU4sTkwsYnJvd250bzA1LDI0MjUwMDANCjE5OTEsQ0lOLE5MLHJpam9qbzAxLDIzMzMzMzMNCjE5OTEsQ0lOLE5MLGJ1cmtldGkwMSwyMjY2NjY3DQoxOTkxLENJTixOTCxsYXJraWJhMDEsMjEwMDAwMA0KMTk5MSxDSU4sTkwsbXllcnNyYTAxLDIwMDAwMDANCjE5OTEsQ0lOLE5MLHNhYm9jaDAxLDEyNTA1MDANCjE5OTEsQ0lOLE5MLG9uZWlscGEwMSw5NzUwMDANCjE5OTEsQ0lOLE5MLGR1bmNhbWEwMSw5MjUwMDANCjE5OTEsQ0lOLE5MLGJyYWdnZ2wwMSw4MjUwMDANCjE5OTEsQ0lOLE5MLGJlbnppdG8wMSw3MDUwMDANCjE5OTEsQ0lOLE5MLGNoYXJsbm8wMSw2MjUwMDANCjE5OTEsQ0lOLE5MLHJlZWRqZTAyLDYwMDAwMA0KMTk5MSxDSU4sTkwscG93ZXJ0ZTAxLDUwMDAwMA0KMTk5MSxDSU4sTkwsZGliYmxybzAxLDQ3NTAwMA0KMTk5MSxDSU4sTkwsd2lubmloZTAxLDQzNzUwMA0KMTk5MSxDSU4sTkwscXVpbm9sdTAxLDMwMDAwMA0KMTk5MSxDSU4sTkwsYXJtc3RqYTAxLDIxNTAwMA0KMTk5MSxDSU4sTkwsb2xpdmVqbzAxLDE4NjAwMA0KMTk5MSxDSU4sTkwsbW9ycmloYTAyLDE4MDAwMA0KMTk5MSxDSU4sTkwsbGF5YW50aTAxLDE0MDAwMA0KMTk5MSxDSU4sTkwsZ3Jvc3NraTAxLDEwODAwMA0KMTk5MSxDSU4sTkwsaGFtbW9jaDAxLDEwMDAwMA0KMTk5MSxDSU4sTkwsamVmZmVyZTAxLDEwMDAwMA0KMTk5MSxDSU4sTkwsbWludXRnaTAxLDEwMDAwMA0KMTk5MSxIT1UsTkwsc2NvdHRtaTAzLDI0MTI1MDANCjE5OTEsSE9VLE5MLGNhbWlua2UwMSwyMjAwMDAwDQoxOTkxLEhPVSxOTCxkZXNoYWppMDEsMjEwMDAwMA0KMTk5MSxIT1UsTkwscmFtaXJyYTAxLDEyMDAwMDANCjE5OTEsSE9VLE5MLHBvcnR1bWEwMSw3MDUwMDANCjE5OTEsSE9VLE5MLG9iZXJra2UwMSw2NzUwMDANCjE5OTEsSE9VLE5MLGJpZ2dpY3IwMSw0Mzc1MDANCjE5OTEsSE9VLE5MLGNhbmRhY2EwMSwzNTAwMDANCjE5OTEsSE9VLE5MLHlvdW5nZ2UwMiwzNDAwMDANCjE5OTEsSE9VLE5MLGRhdmlkbWEwMSwzMDAwMDANCjE5OTEsSE9VLE5MLGZpbmxlc3QwMSwyODAwMDANCjE5OTEsSE9VLE5MLHllbGRpZXIwMSwyNjAwMDANCjE5OTEsSE9VLE5MLGhhcm5pcGUwMSwyMTAwMDANCjE5OTEsSE9VLE5MLG1jbGVtbWEwMSwxNjUwMDANCjE5OTEsSE9VLE5MLHNjaGlsY3UwMSwxMjUwMDANCjE5OTEsSE9VLE5MLGhlcm5heGEwMSwxMjI1MDANCjE5OTEsSE9VLE5MLHRvbGVuam8wMSwxMTgwMDANCjE5OTEsSE9VLE5MLGFudGhvZXIwMSwxMTUwMDANCjE5OTEsSE9VLE5MLG9ydGl6amEwMSwxMTUwMDANCjE5OTEsSE9VLE5MLHJob2Rla2EwMSwxMTEwMDANCjE5OTEsSE9VLE5MLG9zdW5hYWwwMSwxMDYwMDANCjE5OTEsSE9VLE5MLGdvbnphbHUwMSwxMDUwMDANCjE5OTEsSE9VLE5MLGhlbnJ5ZHcwMSwxMDAwMDANCjE5OTEsSE9VLE5MLGtpbGVkYTAxLDEwMDAwMA0KMTk5MSxIT1UsTkwsbG9mdG9rZTAxLDEwMDAwMA0KMTk5MSxMQU4sTkwsc3RyYXdkYTAxLDM4MDAwMDANCjE5OTEsTEFOLE5MLGhlcnNob3IwMSwzMTY2NjY3DQoxOTkxLExBTixOTCxidXRsZWJyMDEsMjgzMzMzMw0KMTk5MSxMQU4sTkwsbXVycmFlZDAyLDI2MjgxNjQNCjE5OTEsTEFOLE5MLHNjaW9zbWkwMSwyMTgzMzMzDQoxOTkxLExBTixOTCxncm9zc2tlMDEsMjE2NjY2Nw0KMTk5MSxMQU4sTkwsZGFuaWVrYTAxLDIwMjUwMDANCjE5OTEsTEFOLE5MLGdvdHRqaTAxLDE3MjUwMDANCjE5OTEsTEFOLE5MLG9qZWRhYm8wMSwxNjMzMzMzDQoxOTkxLExBTixOTCxzYW11ZWp1MDEsMTU3NTAwMA0KMTk5MSxMQU4sTkwsaG93ZWxqYTAxLDEwNTAwMDANCjE5OTEsTEFOLE5MLGJlbGNodGkwMSw5MDAwMDANCjE5OTEsTEFOLE5MLGdyaWZmYWwwMSw5MDAwMDANCjE5OTEsTEFOLE5MLGNhbmRlam8wMSw4MzAwMDANCjE5OTEsTEFOLE5MLGNyZXdzdGkwMSw2NzAwMDANCjE5OTEsTEFOLE5MLGphdmllc3QwMSw2NTAwMDANCjE5OTEsTEFOLE5MLG1vcmdhbWkwMSw2NTAwMDANCjE5OTEsTEFOLE5MLGNhcnRlZ2EwMSw1MDAwMDANCjE5OTEsTEFOLE5MLG1hcnRpcmEwMiw0ODUwMDANCjE5OTEsTEFOLE5MLGhhbWlsamUwMSw0MzEwMDANCjE5OTEsTEFOLE5MLGhhcnJpbGUwMSwzMTUwMDANCjE5OTEsTEFOLE5MLHNoYXJwbWkwMSwzMDc1MDANCjE5OTEsTEFOLE5MLGd3eW5uY2gwMSwyNjAwMDANCjE5OTEsTEFOLE5MLGNvb2tkZTAxLDI0MDAwMA0KMTk5MSxMQU4sTkwsbHlvbnNiYTAxLDIyMDAwMA0KMTk5MSxMQU4sTkwsaGFydGxtaTAxLDE2NTAwMA0KMTk5MSxMQU4sTkwsc21pdGhncjAxLDEyNTY2Nw0KMTk5MSxMQU4sTkwsbmVpZGxqaTAxLDEyNTAwMA0KMTk5MSxMQU4sTkwsaGVybmFjYTAxLDExNTAwMA0KMTk5MSxMQU4sTkwsb2ZmZXJqbzAxLDExNTAwMA0KMTk5MSxNT04sTkwsbWFydGlkZTAxLDMzMzMzMzMNCjE5OTEsTU9OLE5MLGNhbGRlaXYwMSwyMjE1MDAwDQoxOTkxLE1PTixOTCxib3lkb2kwMSwxNTAwMDAwDQoxOTkxLE1PTixOTCxqb25lc2JhMDEsODc1MDAwDQoxOTkxLE1PTixOTCxmaXR6Z21pMDIsNzAwMDAwDQoxOTkxLE1PTixOTCxsb25nYmkwMSwzOTQ1MDANCjE5OTEsTU9OLE5MLHNhbnRvbmUwMSwyODI1MDANCjE5OTEsTU9OLE5MLGdhcmRubWEwMSwxODUwMDANCjE5OTEsTU9OLE5MLHdhbGtlbGEwMSwxODUwMDANCjE5OTEsTU9OLE5MLGZyZXlzdDAxLDE2NTAwMA0KMTk5MSxNT04sTkwsc2FtcGViaTAxLDE2MTAwMA0KMTk5MSxNT04sTkwscnVza2lzYzAxLDE0NzUwMA0KMTk5MSxNT04sTkwsbWFydGlkYTAxLDE0MDAwMA0KMTk5MSxNT04sTkwsbmFiaG9jaDAxLDEyMDAwMA0KMTk5MSxNT04sTkwscm9qYXNtZTAxLDExNTAwMA0KMTk5MSxNT04sTkwscmVlZGRhMDEsMTEwMDAwDQoxOTkxLE1PTixOTCxiYXJuZWJyMDEsMTAzNTAwDQoxOTkxLE5ZTixOTCx2aW9sYWZyMDEsMzE2NjY2Nw0KMTk5MSxOWU4sTkwsY29sZW12aTAxLDMxMTI1MDANCjE5OTEsTllOLE5MLGZyYW5jam8wMSwyNjMzMzMzDQoxOTkxLE5ZTixOTCxnb29kZWR3MDEsMjQ2NjY2Nw0KMTk5MSxOWU4sTkwsY29uZWRhMDEsMjM1MDAwMA0KMTk5MSxOWU4sTkwsYnJvb2todTAxLDIzMTY2NjYNCjE5OTEsTllOLE5MLG1jcmV5a2UwMSwyMjY2NjY3DQoxOTkxLE5ZTixOTCxmZXJuYXNpMDEsMjE2NjY2Nw0KMTk5MSxOWU4sTkwsam9obnNobzAxLDIxNjY2NjcNCjE5OTEsTllOLE5MLGRhcmxpcm8wMSwxOTY2NjY3DQoxOTkxLE5ZTixOTCxoZXJydG8wMSwxNDAwMDAwDQoxOTkxLE5ZTixOTCxtYWdhZGRhMDEsMTI1MDAwMA0KMTk5MSxOWU4sTkwscGVuYWFsMDEsMTAwMDAwMA0KMTk5MSxOWU4sTkwsYm9zdG9kYTAxLDc1MDAwMA0KMTk5MSxOWU4sTkwsdGV1ZmV0aTAxLDYzNzUwMA0KMTk5MSxOWU4sTkwsZWxzdGVrZTAxLDYyNTAwMA0KMTk5MSxOWU4sTkwsc2Fzc2VtYTAxLDUwNTAwMA0KMTk5MSxOWU4sTkwsamVmZmVncjAxLDQyNTAwMA0KMTk5MSxOWU4sTkwsb2JyaWVjaDAxLDMwMDAwMA0KMTk5MSxOWU4sTkwsbWlsbGVrZTAxLDI2MDAwMA0KMTk5MSxOWU4sTkwsY2FycmVtYTAxLDIxNTAwMA0KMTk5MSxOWU4sTkwsaW5uaXNqZTAxLDE1NTAwMA0KMTk5MSxOWU4sTkwsd2hpdGV3YTAyLDE1NTAwMA0KMTk5MSxOWU4sTkwsY2Vyb25yaTAxLDEwMDAwMA0KMTk5MSxOWU4sTkwsc2Nob3VwZTAxLDEwMDAwMA0KMTk5MSxOWU4sTkwsc2ltb25kbzAxLDEwMDAwMA0KMTk5MSxQSEksTkwsbXVycGhkYTA1LDI1MDAwMDANCjE5OTEsUEhJLE5MLGR5a3N0bGUwMSwyMjE2NjY2DQoxOTkxLFBISSxOTCxoYXllc3ZvMDEsMjIwMDAwMA0KMTk5MSxQSEksTkwsbWNkb3dybzAxLDIwMDAwMDANCjE5OTEsUEhJLE5MLGRhdWx0ZGEwMSwxOTE2NjY2DQoxOTkxLFBISSxOTCxob3dlbGtlMDEsMTc1MDAwMA0KMTk5MSxQSEksTkwsd2lsbGltaTAyLDE1MDAwMDANCjE5OTEsUEhJLE5MLHRob25kaTAxLDEyNTAwMDANCjE5OTEsUEhJLE5MLGtydWtqbzAxLDExNzUwMDANCjE5OTEsUEhJLE5MLGJvZXZlam8wMSw3MjUwMDANCjE5OTEsUEhJLE5MLGJhY2ttd2EwMSw2NTAwMDANCjE5OTEsUEhJLE5MLHJlYWR5cmEwMSw2MDAwMDANCjE5OTEsUEhJLE5MLGNveGRhMDEsNTIwMDAwDQoxOTkxLFBISSxOTCxtdWxob3RlMDEsNDc1MDAwDQoxOTkxLFBISSxOTCxsYWtlc3QwMSwzOTAwMDANCjE5OTEsUEhJLE5MLHN2ZXVtZGEwMSwzMzUwMDANCjE5OTEsUEhJLE5MLGhheWVzY2gwMSwyODAwMDANCjE5OTEsUEhJLE5MLGpvcmRhcmkwMiwyNTAwMDANCjE5OTEsUEhJLE5MLGNhbXB1c2kwMSwyMjAwMDANCjE5OTEsUEhJLE5MLGNvbWJzcGEwMSwyMjAwMDANCjE5OTEsUEhJLE5MLG9udGl2c3QwMiwxODAwMDANCjE5OTEsUEhJLE5MLGFrZXJmZGEwMSwxNjUwMDANCjE5OTEsUEhJLE5MLGRlamVzam8wMSwxNDUwMDANCjE5OTEsUEhJLE5MLGJvb2tlcm8wMSwxNDAwMDANCjE5OTEsUEhJLE5MLGpvbmVzcm8wMiwxMzAwMDANCjE5OTEsUEhJLE5MLGdyaW1zamEwMSwxMTgwMDANCjE5OTEsUEhJLE5MLGhvbGxpZGEwMSwxMTYwMDANCjE5OTEsUEhJLE5MLGdyZWVudG8wMSwxMTUwMDANCjE5OTEsUEhJLE5MLGNoYW1id2UwMSwxMDUwMDANCjE5OTEsUEhJLE5MLGJhdGlza2kwMSwxMDAwMDANCjE5OTEsUElULE5MLGRyYWJlZG8wMSwzMzUwMDAwDQoxOTkxLFBJVCxOTCxib25pbGJvMDEsMjQwMDAwMA0KMTk5MSxQSVQsTkwsYm9uZHNiYTAxLDIzMDAwMDANCjE5OTEsUElULE5MLHNtaXRoemEwMSwyMjI1MDAwDQoxOTkxLFBJVCxOTCx2YW5zbGFuMDEsMjE4MDAwMA0KMTk5MSxQSVQsTkwsc21pbGVqbzAxLDEwNTAwMDANCjE5OTEsUElULE5MLGxhdmFsbWkwMSwxMDM1MDAwDQoxOTkxLFBJVCxOTCxoZWF0b25lMDEsMTAwMDAwMA0KMTk5MSxQSVQsTkwsbWFydGljYTAxLDkyNTAwMA0KMTk5MSxQSVQsTkwsd2Fsa2JvMDEsODUwMDAwDQoxOTkxLFBJVCxOTCxraXBwZWJvMDEsODM1MDAwDQoxOTkxLFBJVCxOTCxsYW5kcmJpMDEsODIwMDAwDQoxOTkxLFBJVCxOTCxzbGF1Z2RvMDEsNzY2NjY3DQoxOTkxLFBJVCxOTCxyZWR1c2dhMDEsNjAwMDAwDQoxOTkxLFBJVCxOTCxsaW5kam8wMSw1NzUwMDANCjE5OTEsUElULE5MLHdpbGtlY3UwMSw0NTAwMDANCjE5OTEsUElULE5MLGJlbGxqYTAxLDM4MDAwMA0KMTk5MSxQSVQsTkwscGF0dGVibzAxLDMyNTAwMA0KMTk5MSxQSVQsTkwsZ29uemFqbzAyLDI4MDAwMA0KMTk5MSxQSVQsTkwsbWNjbGVsbDAxLDI2MDAwMA0KMTk5MSxQSVQsTkwsa2luZ2plMDEsMjE1MDAwDQoxOTkxLFBJVCxOTCxiZWxpbnN0MDEsMTkwMDAwDQoxOTkxLFBJVCxOTCx2YXJzaGdhMDEsMTU1MDAwDQoxOTkxLFBJVCxOTCxwYWxhY3ZpMDEsMTI1MDAwDQoxOTkxLFBJVCxOTCx0b21saXJhMDEsMTIwMDAwDQoxOTkxLFBJVCxOTCxwcmluY3RvMDEsMTE4MDAwDQoxOTkxLFBJVCxOTCxyaWNoYWplMDEsMTA1MDAwDQoxOTkxLFNETixOTCxtY2dyaWZyMDEsMjc1MDAwMA0KMTk5MSxTRE4sTkwsbGVmZmVjcjAxLDI2NDE2NjcNCjE5OTEsU0ROLE5MLGd3eW5udG8wMSwyMTYyNTAwDQoxOTkxLFNETixOTCxmZXJuYXRvMDEsMjEwMDAwMA0KMTk5MSxTRE4sTkwsYW5kZXJsYTAyLDIwMDAwMDANCjE5OTEsU0ROLE5MLGh1cnN0YnIwMSwxODgzMzM0DQoxOTkxLFNETixOTCxzYW50aWJlMDEsMTY1MDAwMA0KMTk5MSxTRE4sTkwsd2hpdHNlZDAxLDEzMjUwMDANCjE5OTEsU0ROLE5MLHJhc211ZGUwMSw4MDUwMDANCjE5OTEsU0ROLE5MLHJvYmVyYmkwMSw2NzUwMDANCjE5OTEsU0ROLE5MLGdhcmRud2UwMSw1NzUwMDANCjE5OTEsU0ROLE5MLHRlbXBsZ2EwMSw1MzAwMDANCjE5OTEsU0ROLE5MLGFsZHJlbWkwMSw1MTAwMDANCjE5OTEsU0ROLE5MLHByZXNsamkwMSw1MDAwMDANCjE5OTEsU0ROLE5MLGJlbmVzYW4wMSwyMzUwMDANCjE5OTEsU0ROLE5MLGxpbGxpZGUwMSwxODI1MDANCjE5OTEsU0ROLE5MLGFibmVyc2gwMSwxODAwMDANCjE5OTEsU0ROLE5MLHJvc2Vuc3QwMSwxMzAwMDANCjE5OTEsU0ROLE5MLHN0ZXBocGgwMSwxMzAwMDANCjE5OTEsU0ROLE5MLGNsYXJramUwMSwxMjc1MDANCjE5OTEsU0ROLE5MLGJpbGFyZGEwMSwxMTUwMDANCjE5OTEsU0ROLE5MLHJvZHJpcmkwMiwxMTUwMDANCjE5OTEsU0ROLE5MLHZhdGNoamkwMSwxMTUwMDANCjE5OTEsU0ROLE5MLGxhbXBrdG8wMSwxMDc1MDANCjE5OTEsU0ROLE5MLGhvd2FydGgwMSwxMDUwMDANCjE5OTEsU0ROLE5MLGZhcmllcGEwMSwxMDAwMDANCjE5OTEsU0ROLE5MLGhhbW1hYXQwMSwxMDAwMDANCjE5OTEsU0ROLE5MLGhlcm5hamUwMiwxMDAwMDANCjE5OTEsU0ROLE5MLG1lbGVuam8wMSwxMDAwMDANCjE5OTEsU0ROLE5MLG5vbHRlZXIwMSwxMDAwMDANCjE5OTEsU0ZOLE5MLGNsYXJrd2kwMiwzNzUwMDAwDQoxOTkxLFNGTixOTCxtaXRjaGtlMDEsMzc1MDAwMA0KMTk5MSxTRk4sTkwsbWNnZWV3aTAxLDM1NjI1MDANCjE5OTEsU0ZOLE5MLHJpZ2hlZGEwMSwyNTAwMDAwDQoxOTkxLFNGTixOTCxyb2JpbmRvMDEsMjQ1MDAwMA0KMTk5MSxTRk4sTkwsZ2FycmVzYzAxLDI0MDAwMDANCjE5OTEsU0ZOLE5MLGJsYWNrYnUwMiwxNzUwMDAwDQoxOTkxLFNGTixOTCx0aG9tcHJvMDEsMTUwMDAwMA0KMTk5MSxTRk4sTkwsbGFjb3NtaTAxLDE0NTAwMDANCjE5OTEsU0ZOLE5MLHJldXNjcmkwMSwxMzUwMDAwDQoxOTkxLFNGTixOTCxiYXNza2UwMSwxMzMzMzMzDQoxOTkxLFNGTixOTCx1cmliZWpvMDEsMTMzMzMzMw0KMTk5MSxTRk4sTkwsYW5kZXJkYTAyLDYwMDAwMA0KMTk5MSxTRk4sTkwsd2lsbGltYTA0LDYwMDAwMA0KMTk5MSxTRk4sTkwsZG93bnNrZTAxLDUyNTAwMA0KMTk5MSxTRk4sTkwsa2VubmV0ZTAyLDUwMDAwMA0KMTk5MSxTRk4sTkwsa2luZ2VtaTAxLDM2MjUwMA0KMTk5MSxTRk4sTkwsYnVya2VqbzAzLDIzMDAwMA0KMTk5MSxTRk4sTkwsYnJhbnRqZTAxLDE2NjAwMA0KMTk5MSxTRk4sTkwsbGl0dG9ncjAxLDE2NTAwMA0KMTk5MSxTRk4sTkwsbWFud2FraTAxLDE1MDAwMA0KMTk5MSxTRk4sTkwscGFya2VyaTAxLDExNTAwMA0KMTk5MSxTRk4sTkwsYmVuamFtaTAxLDExMDAwMA0KMTk5MSxTRk4sTkwsbGVvbmFtYTAxLDExMDAwMA0KMTk5MSxTRk4sTkwsZ3VuZGVlcjAxLDEwNTAwMA0KMTk5MSxTRk4sTkwsZGVja2VzdDAxLDEwMDAwMA0KMTk5MSxTTE4sTkwsc21pdGhsZTAyLDI3OTE2NjYNCjE5OTEsU0xOLE5MLGRlbGVvam8wMSwyMzY2NjY3DQoxOTkxLFNMTixOTCxndWVycnBlMDEsMjI4MzMzNA0KMTk5MSxTTE4sTkwsc21pdGhvejAxLDIyMjUwMDANCjE5OTEsU0xOLE5MLHNtaXRoYnIwMSwyMTMzMzMzDQoxOTkxLFNMTixOTCx0aG9tcG1pMDIsMTUxNjY2Nw0KMTk5MSxTTE4sTkwsYWdvc3RqdTAxLDExNjY2NjcNCjE5OTEsU0xOLE5MLHBlcnJ5Z2UwMSwxMTY2NjY3DQoxOTkxLFNMTixOTCxtYWdyYWpvMDEsMTAyNTAwMA0KMTk5MSxTTE4sTkwsZGlwaW5mcjAxLDg1MDAwMA0KMTk5MSxTTE4sTkwsb3F1ZW5qbzAxLDc3NTAwMA0KMTk5MSxTTE4sTkwsd29ycmV0bzAxLDY2MDAwMA0KMTk5MSxTTE4sTkwsdGVycnlzYzAxLDM1MDAwMA0KMTk5MSxTTE4sTkwscGFnbm90bzAxLDMxMDAwMA0KMTk5MSxTTE4sTkwsaHVkbGVyZTAxLDMwMDAwMA0KMTk5MSxTTE4sTkwsbW95ZXJqYTAxLDIwMDAwMA0KMTk5MSxTTE4sTkwsam9zZWZlMDEsMTYwMDAwDQoxOTkxLFNMTixOTCx0ZXdrc2JvMDEsMTYwMDAwDQoxOTkxLFNMTixOTCx6ZWlsZXRvMDEsMTYwMDAwDQoxOTkxLFNMTixOTCxoaWxsa2UwMSwxNTUwMDANCjE5OTEsU0xOLE5MLGdlZG1hcmkwMSwxNTAwMDANCjE5OTEsU0xOLE5MLHdpbHNvY3IwMSwxMzAwMDANCjE5OTEsU0xOLE5MLGdpbGtlYmUwMSwxMjUwMDANCjE5OTEsU0xOLE5MLGxhbmtmcmEwMSwxMjUwMDANCjE5OTEsU0xOLE5MLGNhcnBlY3IwMSwxMjAwMDANCjE5OTEsU0xOLE5MLG9saXZhb20wMSwxMjAwMDANCjE5OTEsU0xOLE5MLHBlbmFnZTAxLDEyMDAwMA0KMTk5MSxTTE4sTkwscGVyZXptaTAxLDExNTAwMA0KMTk5MSxTTE4sTkwsY2xhcmttYTAxLDEwMDAwMA0KMTk5MixCQUwsQUwsZGF2aXNnbDAxLDM0MTUwMDANCjE5OTIsQkFMLEFMLGRhdmlzc3QwMiwyNTY2NjY3DQoxOTkyLEJBTCxBTCxzdXRjbHJpMDEsMjQwMDAwMA0KMTk5MixCQUwsQUwscmlwa2VjYTAxLDIxMDAwMDANCjE5OTIsQkFMLEFMLG9sc29uZ3IwMSwxNDUwMDAwDQoxOTkyLEJBTCxBTCxvcnN1bGpvMDEsMTMwMDAwMA0KMTk5MixCQUwsQUwsbWlsbGlyYTAxLDEyMDAwMDANCjE5OTIsQkFMLEFMLG1pbGFjYm8wMSwxMTgwMDAwDQoxOTkyLEJBTCxBTCxkZXZlcm1pMDEsMTAyNTAwMA0KMTk5MixCQUwsQUwsd2lsbGltYTA1LDkwMDAwMA0KMTk5MixCQUwsQUwscmlwa2ViaTAxLDczMDAwMA0KMTk5MixCQUwsQUwsaG9ybnNhMDEsNjg3NTAwDQoxOTkyLEJBTCxBTCxmbGFuYW1pMDEsNjAwMDAwDQoxOTkyLEJBTCxBTCxtY2RvbmJlMDEsNTAwMDAwDQoxOTkyLEJBTCxBTCxkZW1wc3JpMDEsNDUwMDAwDQoxOTkyLEJBTCxBTCxodWxldHRpMDEsNDIwMDAwDQoxOTkyLEJBTCxBTCxhbmRlcmJyMDEsMzY1MDAwDQoxOTkyLEJBTCxBTCxtY2xlbW1hMDEsMzI1MDAwDQoxOTkyLEJBTCxBTCxmcm9od3RvMDEsMjY1MDAwDQoxOTkyLEJBTCxBTCxwYXJlbm1hMDEsMTgwMDAwDQoxOTkyLEJBTCxBTCxob2lsZWNoMDEsMTc1MDAwDQoxOTkyLEJBTCxBTCxtdXNzaW1pMDEsMTUyNTAwDQoxOTkyLEJBTCxBTCxnb21lemxlMDIsMTUwMDAwDQoxOTkyLEJBTCxBTCxzZWd1aWRhMDEsMTUwMDAwDQoxOTkyLEJBTCxBTCxtaWxsc2FsMDEsMTQyMDAwDQoxOTkyLEJBTCxBTCxtYXJ0aWNoMDEsMTQwMDAwDQoxOTkyLEJBTCxBTCxwb29sZWppMDIsMTQwMDAwDQoxOTkyLEJBTCxBTCxiZWxsanUwMSwxMjUwMDANCjE5OTIsQkFMLEFMLGxld2lzamkwMiwxMTEwMDANCjE5OTIsQkFMLEFMLGFsZXhhbWEwMiwxMDkwMDANCjE5OTIsQkFMLEFMLG1lcmNlbHUwMSwxMDkwMDANCjE5OTIsQkFMLEFMLHJob2RlYXIwMSwxMDkwMDANCjE5OTIsQkFMLEFMLHRhY2tlamUwMSwxMDkwMDANCjE5OTIsQk9TLEFMLHZpb2xhZnIwMSw0ODMzMzMzDQoxOTkyLEJPUyxBTCxjbGVtZXJvMDIsNDcwNTI1MA0KMTk5MixCT1MsQUwsZGFyd2lkYTAxLDMzNTAwMDANCjE5OTIsQk9TLEFMLGdyZWVubWkwMSwzMDUwMDAwDQoxOTkyLEJPUyxBTCxjbGFya2phMDEsMjkwMDAwMA0KMTk5MixCT1MsQUwsYnJ1bmF0bzAxLDI4NTAwMDANCjE5OTIsQk9TLEFMLGJvZ2dzd2EwMSwyNzAwMDAwDQoxOTkyLEJPUyxBTCxyZWFyZGplMDEsMjYzMzMzNA0KMTk5MixCT1MsQUwscGVuYXRvMDEsMjQwMDAwMA0KMTk5MixCT1MsQUwsYnVya3NlbDAxLDIzMDAwMDANCjE5OTIsQk9TLEFMLHlvdW5nbWEwMSwyMjY2NjY3DQoxOTkyLEJPUyxBTCxoZXNrZWpvMDEsMTc3NTAwMA0KMTk5MixCT1MsQUwscmVlZGpvMDEsMTYwMDAwMA0KMTk5MixCT1MsQUwsaGFycmlncjAxLDE0MDAwMDANCjE5OTIsQk9TLEFMLHJpdmVybHUwMSwxMDc1MDAwDQoxOTkyLEJPUyxBTCxib2x0b3RvMDEsNTI1MDAwDQoxOTkyLEJPUyxBTCx3aW5uaWhlMDEsNTI1MDAwDQoxOTkyLEJPUyxBTCxmb3NzYXRvMDEsMzkwMDAwDQoxOTkyLEJPUyxBTCxtYXJ6YWpvMDEsMzUwMDAwDQoxOTkyLEJPUyxBTCxxdWludGNhMDEsMzQwMDAwDQoxOTkyLEJPUyxBTCxkb3Bzb2pvMDEsMjY1MDAwDQoxOTkyLEJPUyxBTCxwbGFudHBoMDEsMjAwMDAwDQoxOTkyLEJPUyxBTCxnYXJkaW1pMDEsMTc3MDAwDQoxOTkyLEJPUyxBTCx2YXVnaG1vMDEsMTY1MDAwDQoxOTkyLEJPUyxBTCxjb29wZXNjMDEsMTQ1MDAwDQoxOTkyLEJPUyxBTCxuYWVocnRpMDEsMTQ1MDAwDQoxOTkyLEJPUyxBTCxob3lwZTAxLDEwOTAwMA0KMTk5MixCT1MsQUwscXVhbnRwYTAxLDEwOTAwMA0KMTk5MixCT1MsQUwscnlhbmtlMDEsMTA5MDAwDQoxOTkyLEJPUyxBTCx2YWxlbmpvMDIsMTA5MDAwDQoxOTkyLEJPUyxBTCx6dXBjaWJvMDEsMTA5MDAwDQoxOTkyLENBTCxBTCxmaW5sZWNoMDEsNDM3NTAwMA0KMTk5MixDQUwsQUwsbGFuZ3NtYTAxLDM1NTAwMDANCjE5OTIsQ0FMLEFMLGhhcnZlYnIwMSwzMTI1MDAwDQoxOTkyLENBTCxBTCxnYWV0dGdhMDEsMjcwMDAwMA0KMTk5MixDQUwsQUwscGFycmlsYTAyLDI0MTY2NjcNCjE5OTIsQ0FMLEFMLGJyb29raHUwMSwyMzE2NjY3DQoxOTkyLENBTCxBTCxoYXllc3ZvMDEsMjIwMDAwMA0KMTk5MixDQUwsQUwsYWJib3RqaTAxLDE4NTAwMDANCjE5OTIsQ0FMLEFMLGVpY2hobWEwMSwxODA1MDAwDQoxOTkyLENBTCxBTCxwb2xvbmx1MDEsMTY1MDAwMA0KMTk5MixDQUwsQUwsc2Nob2ZkaTAyLDE2MDAwMDANCjE5OTIsQ0FMLEFMLGNyaW1jaDAxLDExMDAwMDANCjE5OTIsQ0FMLEFMLGJseWxlYmUwMSw5MDAwMDANCjE5OTIsQ0FMLEFMLHJvYmluZG8wMSw5MDAwMDANCjE5OTIsQ0FMLEFMLGRhdmlzYWwwMSw4MDAwMDANCjE5OTIsQ0FMLEFMLGZlbGl4anUwMSw2NDAwMDANCjE5OTIsQ0FMLEFMLGJhaWxlc2MwMSw2MDAwMDANCjE5OTIsQ0FMLEFMLGZpdHpnbWkwMiwzNTAwMDANCjE5OTIsQ0FMLEFMLGdvbnphcmUwMSwzMjUwMDANCjE5OTIsQ0FMLEFMLG1vcnJpam8wNywyMDAwMDANCjE5OTIsQ0FMLEFMLHNvam9sdTAxLDE5MDAwMA0KMTk5MixDQUwsQUwsdGluZ2xybzAxLDE3MDAwMA0KMTk5MixDQUwsQUwsZGlzYXJnYTAxLDEzNTAwMA0KMTk5MixDQUwsQUwsb3J0b25qbzAxLDEzMDAwMA0KMTk5MixDQUwsQUwsc3RldmVsZTAxLDEzMDAwMA0KMTk5MixDQUwsQUwsZ3JhaGVqbzAxLDEyNTAwMA0KMTk5MixDQUwsQUwscm9zZWJvMDEsMTI1MDAwDQoxOTkyLENBTCxBTCxsZXdpc3NjMDEsMTIwMDAwDQoxOTkyLENBTCxBTCx2YWxlcmp1MDEsMTEyMDAwDQoxOTkyLENBTCxBTCxjdXJ0aWNoMDEsMTA5MDAwDQoxOTkyLENIQSxBTCxiZWxsZ2UwMiwzNjUwMDAwDQoxOTkyLENIQSxBTCxzYXhzdDAxLDM1NzUwMDANCjE5OTIsQ0hBLEFMLHJhaW5ldGkwMSwzNTAwMDAwDQoxOTkyLENIQSxBTCx0aGlncGJvMDEsMzE2NjY2Nw0KMTk5MixDSEEsQUwscGFzcXVkYTAxLDI1MDAwMDANCjE5OTIsQ0hBLEFMLG1jY2Fza2kwMSwyMzMzMzMzDQoxOTkyLENIQSxBTCxndWlsbG96MDEsMTkwMDAwMA0KMTk5MixDSEEsQUwsbWNkb3dqYTAxLDE2MDAwMDANCjE5OTIsQ0hBLEFMLGhvdWdoY2gwMSwxMDc1MDAwDQoxOTkyLENIQSxBTCxmaXNrY2EwMSwxMDAwMDAwDQoxOTkyLENIQSxBTCxrYXJrb3JvMDEsNjUwMDAwDQoxOTkyLENIQSxBTCx2ZW50dXJvMDEsNjQwMDAwDQoxOTkyLENIQSxBTCx0aG9tYWZyMDQsNjIwMDAwDQoxOTkyLENIQSxBTCxqb2huc2xhMDMsNTMwMDAwDQoxOTkyLENIQSxBTCxmbGV0Y3NjMDEsNDAwMDAwDQoxOTkyLENIQSxBTCxmZXJuYWFsMDEsMzczMzMzDQoxOTkyLENIQSxBTCxwYWxsZG8wMSwzNTQwMDANCjE5OTIsQ0hBLEFMLGFibmVyc2gwMSwyOTc1MDANCjE5OTIsQ0hBLEFMLGxlYWNodGUwMSwyNjAwMDANCjE5OTIsQ0hBLEFMLGNvcmFqbzAxLDIzNTAwMA0KMTk5MixDSEEsQUwsaGliYmFncjAxLDIxMDAwMA0KMTk5MixDSEEsQUwsZ3JlYmVjcjAxLDIwMDAwMA0KMTk5MixDSEEsQUwscmFkaW5zYzAxLDE5MDAwMA0KMTk5MixDSEEsQUwsaHVmZm1pMDEsMTQ1MDAwDQoxOTkyLENIQSxBTCxtZXJ1bG1hMDEsMTQwMDAwDQoxOTkyLENIQSxBTCxuZXdzb3dhMDEsMTM1MDAwDQoxOTkyLENIQSxBTCxhbHZhcndpMDEsMTMwMDAwDQoxOTkyLENIQSxBTCxkcmFobWJyMDEsMTMwMDAwDQoxOTkyLENIQSxBTCxoZXJuYXJvMDEsMTEyMDAwDQoxOTkyLENIQSxBTCxqYWNrc2JvMDEsMTA5MDAwDQoxOTkyLENMRSxBTCxmZXJtaWZlMDEsOTUwMDAwDQoxOTkyLENMRSxBTCxza2lubmpvMDEsNzAwMDAwDQoxOTkyLENMRSxBTCxqYWNvYmJyMDEsNTUwMDAwDQoxOTkyLENMRSxBTCxhbG9tYXNhMDIsNTI1MDAwDQoxOTkyLENMRSxBTCxiYWVyZ2NhMDEsNTI1MDAwDQoxOTkyLENMRSxBTCxuYWd5Y2gwMSwzOTE2NjYNCjE5OTIsQ0xFLEFMLGNvb2tkZTAxLDM3NTAwMA0KMTk5MixDTEUsQUwscGx1bmtlcjAxLDM1NzUwMA0KMTk5MixDTEUsQUwsd2hpdGVtYTAxLDMzMzMzMw0KMTk5MixDTEUsQUwsaGlsbGdsMDEsMzI1MDAwDQoxOTkyLENMRSxBTCxvbGluc3QwMSwzMDAwMDANCjE5OTIsQ0xFLEFMLG9ydGl6anUwMSwzMDAwMDANCjE5OTIsQ0xFLEFMLG90dG9kYTAxLDMwMDAwMA0KMTk5MixDTEUsQUwscG93ZXJ0ZTAxLDMwMDAwMA0KMTk5MixDTEUsQUwsYXJtc3RqYTAxLDI4MTU0NQ0KMTk5MixDTEUsQUwsbmljaG9ybzAyLDI1MDAwMA0KMTk5MixDTEUsQUwsbGlsbGlkZTAxLDE5MDAwMA0KMTk5MixDTEUsQUwsYmVsbGVhbDAxLDE3NTAwMA0KMTk5MixDTEUsQUwsc2N1ZGRzYzAxLDE3MDAwMA0KMTk5MixDTEUsQUwsY29sZWFsMDEsMTYyNTAwDQoxOTkyLENMRSxBTCxiZWxsZXIwMSwxNTc1MDANCjE5OTIsQ0xFLEFMLGFybnNiYnIwMSwxNTAwMDANCjE5OTIsQ0xFLEFMLGxld2lzbWEwMSwxNDUwMDANCjE5OTIsQ0xFLEFMLHNoYXdqZTAxLDE0MDAwMA0KMTk5MixDTEUsQUwsc29ycmVwYTAxLDEzNzUwMA0KMTk5MixDTEUsQUwsbWVzYWpvMDEsMTM1MDAwDQoxOTkyLENMRSxBTCxwZXJlenRvMDIsMTI3NTAwDQoxOTkyLENMRSxBTCxyb2hkZWRhMDEsMTI1MDAwDQoxOTkyLENMRSxBTCxqZWZmZXJlMDEsMTIwMDAwDQoxOTkyLENMRSxBTCxraXJieXdhMDEsMTE5MDAwDQoxOTkyLENMRSxBTCxib3VjaGRlMDEsMTE2MDAwDQoxOTkyLENMRSxBTCxsb2Z0b2tlMDEsMTEwMDAwDQoxOTkyLENMRSxBTCxtdXRpc2plMDEsMTEwMDAwDQoxOTkyLENMRSxBTCx0aG9tZWppMDEsMTEwMDAwDQoxOTkyLENMRSxBTCxlbWJyZWFsMDEsMTA5MDAwDQoxOTkyLERFVCxBTCxmaWVsZGNlMDEsNDUwMDAwMA0KMTk5MixERVQsQUwsdGV0dGxtaTAxLDMzMjUwMDANCjE5OTIsREVULEFMLGhlbm5lbWkwMSwyNDM3NTAwDQoxOTkyLERFVCxBTCx0cmFtbWFsMDEsMjQwMDAwMA0KMTk5MixERVQsQUwsd2hpdGFsbzAxLDIyMDAwMDANCjE5OTIsREVULEFMLGRlZXJybzAxLDIwMTY2NjcNCjE5OTIsREVULEFMLGd1bGxpYmkwMSwxOTI1MDAwDQoxOTkyLERFVCxBTCx0YW5hbmZyMDEsMTcwMDAwMA0KMTk5MixERVQsQUwscGhpbGx0bzAyLDE1NjY2NjcNCjE5OTIsREVULEFMLGtpbmdlcjAxLDEyMDAwMDANCjE5OTIsREVULEFMLGdsYWRkZGEwMSwxMDUwMDAwDQoxOTkyLERFVCxBTCxiZXJnbWRhMDEsMzc1MDAwDQoxOTkyLERFVCxBTCxjYXJyZW1hMDEsMzU1MDAwDQoxOTkyLERFVCxBTCxmcnltYXRyMDEsMzAwMDAwDQoxOTkyLERFVCxBTCxjdXlsZW1pMDEsMjMwMDAwDQoxOTkyLERFVCxBTCxsZWl0ZW1hMDEsMjMwMDAwDQoxOTkyLERFVCxBTCxrcmV1dGNoMDEsMTU1MDAwDQoxOTkyLERFVCxBTCxiYXJuZXNrMDEsMTUwMDAwDQoxOTkyLERFVCxBTCxnYWtlbGRhMDEsMTUwMDAwDQoxOTkyLERFVCxBTCxhbGRyZXNjMDEsMTMwMDAwDQoxOTkyLERFVCxBTCxyaXR6a2UwMSwxMjUwMDANCjE5OTIsREVULEFMLGN1bW1pc3QwMSwxMjAwMDANCjE5OTIsREVULEFMLGxpdmluc2MwMSwxMjAwMDANCjE5OTIsREVULEFMLHJvd2xhcmkwMSwxMjAwMDANCjE5OTIsREVULEFMLG11bm96bWkwMSwxMTUwMDANCjE5OTIsREVULEFMLGRvaGVyam8wMiwxMDkwMDANCjE5OTIsREVULEFMLGtpZWx5am8wMSwxMDkwMDANCjE5OTIsREVULEFMLHRlcnJld2EwMSwxMDkwMDANCjE5OTIsS0NBLEFMLGpveW5ld2EwMSw0MjAwMDAwDQoxOTkyLEtDQSxBTCxkYXZpc21hMDEsMzYyNTAwMA0KMTk5MixLQ0EsQUwsbWNyZXlrZTAxLDM0MTY2NjcNCjE5OTIsS0NBLEFMLGJvZGRpbWkwMSwzMTE2NjY3DQoxOTkyLEtDQSxBTCxicmV0dGdlMDEsMzEwMDAwMA0KMTk5MixLQ0EsQUwsZ3ViaWNtYTAxLDI5NTAwMDANCjE5OTIsS0NBLEFMLG1vbnRnamUwMSwyNDYwMDAwDQoxOTkyLEtDQSxBTCxlaXNlbmppMDEsMTY1MDAwMA0KMTk5MixLQ0EsQUwsamVmZmVncjAxLDExNTAwMDANCjE5OTIsS0NBLEFMLGhlYXRvbmUwMSwxMTAwMDAwDQoxOTkyLEtDQSxBTCxtZWx2aWJvMDEsOTAwMDAwDQoxOTkyLEtDQSxBTCxnb3Jkb3RvMDEsODE1MDAwDQoxOTkyLEtDQSxBTCxtYWNmYW1pMDEsNzQwMDAwDQoxOTkyLEtDQSxBTCxhcXVpbmx1MDEsNjUwMDAwDQoxOTkyLEtDQSxBTCxtaWxsZWtlMDEsNTc1MDAwDQoxOTkyLEtDQSxBTCxnd3lubmNoMDEsNDI1MDAwDQoxOTkyLEtDQSxBTCxnbGVhdGplMDEsNDAwMDAwDQoxOTkyLEtDQSxBTCx3aWxrZWN1MDEsNDAwMDAwDQoxOTkyLEtDQSxBTCx5b3VuZ2N1MDEsNDAwMDAwDQoxOTkyLEtDQSxBTCxhcHBpZWtlMDEsMzkwMDAwDQoxOTkyLEtDQSxBTCx0aHVybWdhMDEsMjg3NTAwDQoxOTkyLEtDQSxBTCxtY3JhZWJyMDEsMjc1MDAwDQoxOTkyLEtDQSxBTCxzaHVtcHRlMDEsMTgzMDAwDQoxOTkyLEtDQSxBTCxtYXluZWJyMDEsMTcwMDAwDQoxOTkyLEtDQSxBTCxob3dhcmRhMDIsMTUyNTAwDQoxOTkyLEtDQSxBTCxtYWduYW1pMDEsMTQwMDAwDQoxOTkyLEtDQSxBTCxqb2huc2pvMDYsMTEzNTAwDQoxOTkyLEtDQSxBTCxjb2xlc3QwMSwxMDkwMDANCjE5OTIsTUlOLEFMLHNtaWxlam8wMSwzNDAwMDAwDQoxOTkyLE1JTixBTCxocmJla2tlMDEsMzEwMDAwMA0KMTk5MixNSU4sQUwscHVja2VraTAxLDI5NjY2NjcNCjE5OTIsTUlOLEFMLGRhdmlzY2gwMSwyODAwMDAwDQoxOTkyLE1JTixBTCxoYXJwZWJyMDEsMjUwMDAwMA0KMTk5MixNSU4sQUwsYWd1aWxyaTAxLDIzMDgzMzMNCjE5OTIsTUlOLEFMLGdhZ25lZ3IwMSwxOTMzMzM0DQoxOTkyLE1JTixBTCxwYWdsaW1pMDEsMTIwMDAwMA0KMTk5MixNSU4sQUwsbWFja3NoMDEsMTA3NTAwMA0KMTk5MixNSU4sQUwsa2lwcGVibzAxLDEwMDAwMDANCjE5OTIsTUlOLEFMLGxhcmtpZ2UwMSw5NTAwMDANCjE5OTIsTUlOLEFMLGtydWVnYmkwMSw5MjAwMDANCjE5OTIsTUlOLEFMLHRhcGFua2UwMSw0ODUwMDANCjE5OTIsTUlOLEFMLGJ1c2hyYTAxLDQ1MDAwMA0KMTk5MixNSU4sQUwsZXJpY2tzYzAxLDQyNTAwMA0KMTk5MixNSU4sQUwsaGlsbGRvMDEsNDAwMDAwDQoxOTkyLE1JTixBTCxrbm9ibGNoMDEsMzI1MDAwDQoxOTkyLE1JTixBTCx3aWxsaWNhMDEsMzI1MDAwDQoxOTkyLE1JTixBTCxndXRocm1hMDEsMjcwMDAwDQoxOTkyLE1JTixBTCxsZWl1c3NjMDEsMTc1MDAwDQoxOTkyLE1JTixBTCxtdW5venBlMDEsMTU1MDAwDQoxOTkyLE1JTixBTCx3YXluZWdhMDEsMTU1MDAwDQoxOTkyLE1JTixBTCxlZGVuc3RvMDEsMTM3NTAwDQoxOTkyLE1JTixBTCxhYmJvdHBhMDEsMTI2MDAwDQoxOTkyLE1JTixBTCx3ZWJzdGxlMDEsMTE1MDAwDQoxOTkyLE1JTixBTCxicm93bmphMDMsMTEyMDAwDQoxOTkyLE1JTixBTCxiYW5rc3dpMDEsMTEwMDAwDQoxOTkyLE1JTixBTCxtYWhvbXBhMDEsMTA5MDAwDQoxOTkyLE1MNCxBTCxoaWd1ZXRlMDEsMzUwMDAwMA0KMTk5MixNTDQsQUwsbW9saXRwYTAxLDM0NTMzMzMNCjE5OTIsTUw0LEFMLHlvdW50cm8wMSwzMjAwMDAwDQoxOTkyLE1MNCxBTCxwbGVzYWRhMDEsMjc2NjY2Nw0KMTk5MixNTDQsQUwsc3VyaG9iajAxLDI1MzAwMDANCjE5OTIsTUw0LEFMLGJvc2lvY2gwMSwyMzg3MDAwDQoxOTkyLE1MNCxBTCx3ZWdtYWJpMDEsMjM3NTAwMA0KMTk5MixNTDQsQUwsc3R1YmJmcjAxLDIxNjY2NjcNCjE5OTIsTUw0LEFMLG9yb3NjamUwMSwxMjE1MDAwDQoxOTkyLE1MNCxBTCxnYW50bmppMDEsMTE1MDAwMA0KMTk5MixNTDQsQUwscm9iaW5ybzAxLDExMDAwMDANCjE5OTIsTUw0LEFMLG51bmV6ZWQwMSwxMDc1MDAwDQoxOTkyLE1MNCxBTCxzcGllcmJpMDEsNzUwMDAwDQoxOTkyLE1MNCxBTCxydWZmaWJyMDEsNTI1MDAwDQoxOTkyLE1MNCxBTCx2YXVnaGdyMDEsNTAwMDAwDQoxOTkyLE1MNCxBTCxuYXZhcmphMDEsNDMwMDAwDQoxOTkyLE1MNCxBTCxoYW1pbGRhMDIsMzk1MDAwDQoxOTkyLE1MNCxBTCxmbGV0Y3NjMDEsMzAwMDAwDQoxOTkyLE1MNCxBTCxiaWNoZWRhMDEsMjMwMDAwDQoxOTkyLE1MNCxBTCxmZXR0ZW1pMDEsMTQwMDAwDQoxOTkyLE1MNCxBTCxoZW5yeWRvMDEsMTQwMDAwDQoxOTkyLE1MNCxBTCxob2xtZWRhMDEsMTQwMDAwDQoxOTkyLE1MNCxBTCxhdXN0aWppMDIsMTA5MDAwDQoxOTkyLE1MNCxBTCxib25lc3JpMDEsMTA5MDAwDQoxOTkyLE1MNCxBTCxtY2ludHRpMDEsMTA5MDAwDQoxOTkyLE1MNCxBTCxzZWl0emtlMDEsMTA5MDAwDQoxOTkyLE1MNCxBTCxzdWVyb3dpMDEsMTA5MDAwDQoxOTkyLE5ZQSxBTCx0YXJ0YWRhMDEsNTMwMDAwMA0KMTk5MixOWUEsQUwsbWF0dGlkbzAxLDM2MjAwMDANCjE5OTIsTllBLEFMLHdpdHRtaTAxLDI5MTY2NjcNCjE5OTIsTllBLEFMLG5va2VzbWEwMSwyNTAwMDAwDQoxOTkyLE5ZQSxBTCxmYXJyc3QwMSwyNDAwMDAwDQoxOTkyLE5ZQSxBTCxsZWFyeXRpMDEsMjE3NTAwMA0KMTk5MixOWUEsQUwsYmFyZmlqZTAxLDIxNjY2NjcNCjE5OTIsTllBLEFMLGtlbGx5cm8wMSwyMTUwMDAwDQoxOTkyLE5ZQSxBTCxzYW5kZXNjMDEsMjEyNTAwMA0KMTk5MixOWUEsQUwsZ2FsbGVtaTAxLDE5NTAwMDANCjE5OTIsTllBLEFMLGd1ZXR0bGUwMSwxNjAwMDAwDQoxOTkyLE5ZQSxBTCxoYWxsbWUwMSwxMzAwMDAwDQoxOTkyLE5ZQSxBTCxjYWRhcmdyMDEsMTE5MDAwMA0KMTk5MixOWUEsQUwscGVyZXptZTAxLDExNjUwMDANCjE5OTIsTllBLEFMLGVzcGluYWwwMSwxMDAwMDAwDQoxOTkyLE5ZQSxBTCxob3dlc3QwMSw3MDAwMDANCjE5OTIsTllBLEFMLGhhYnlham8wMSw1MDAwMDANCjE5OTIsTllBLEFMLGphbWVzZGkwMSwzODc1MDANCjE5OTIsTllBLEFMLHZlbGFycmEwMSwzNjAwMDANCjE5OTIsTllBLEFMLGhheWVzY2gwMSwyODAwMDANCjE5OTIsTllBLEFMLG1hYXNrZTAxLDI1NTAwMA0KMTk5MixOWUEsQUwsc3RhbmxtaTAyLDE3NTAwMA0KMTk5MixOWUEsQUwsa2VsbHlwYTAzLDE0NzUwMA0KMTk5MixOWUEsQUwsbWV1bGVoZTAxLDEzMjUwMA0KMTk5MixOWUEsQUwsbGV5cmlqaTAxLDEyNjUwMA0KMTk5MixOWUEsQUwsbW9udGVyaTAxLDEyNTAwMA0KMTk5MixOWUEsQUwsd2lsbGliZTAyLDEyNTAwMA0KMTk5MixOWUEsQUwsa2FtaWVzYzAxLDEyMDAwMA0KMTk5MixOWUEsQUwsam9obnNqZTAyLDExNTAwMA0KMTk5MixOWUEsQUwscmFtb3NqbzAxLDEwOTAwMA0KMTk5MixOWUEsQUwsc3RhbmthbjAxLDEwOTAwMA0KMTk5MixOWUEsQUwsd2lja21ibzAxLDEwOTAwMA0KMTk5MixOWUEsQUwsd2lsbGlnZTAyLDEwOTAwMA0KMTk5MixPQUssQUwsY2Fuc2VqbzAxLDQzMDAwMDANCjE5OTIsT0FLLEFMLG1vb3JlbWkwMSwzNTAwMDAwDQoxOTkyLE9BSyxBTCx3ZWxjaGJvMDEsMzQ1MDAwMA0KMTk5MixPQUssQUwsaGVuZGVyaTAxLDMyNTAwMDANCjE5OTIsT0FLLEFMLHN0ZXdhZGEwMSwzMTY2NjY3DQoxOTkyLE9BSyxBTCxlY2tlcmRlMDEsMzE1MDAwMA0KMTk5MixPQUssQUwsbWNnd2ltYTAxLDI3MDAwMDANCjE5OTIsT0FLLEFMLGhlbmRlZGEwMSwyNjAwMDAwDQoxOTkyLE9BSyxBTCxkYXJsaXJvMDEsMjIwMDAwMA0KMTk5MixPQUssQUwsc3RlaW50ZTAxLDIwNTAwMDANCjE5OTIsT0FLLEFMLGJhaW5laGEwMSwxNTgzMzMzDQoxOTkyLE9BSyxBTCxob25leXJpMDEsMTQwMDAwMA0KMTk5MixPQUssQUwsbmVsc29nZTAxLDEyNTAwMDANCjE5OTIsT0FLLEFMLGxhbnNmY2EwMSwxMTUwMDAwDQoxOTkyLE9BSyxBTCx3aWxzb3dpMDIsMTEwMDAwMA0KMTk5MixPQUssQUwsd2Vpc3N3YTAxLDc2MDAwMA0KMTk5MixPQUssQUwscXVpcmtqYTAxLDUyNTAwMA0KMTk5MixPQUssQUwscmVhZHlyYTAxLDUwMDAwMA0KMTk5MixPQUssQUwscGFycmVqZTAxLDQyNTAwMA0KMTk5MixPQUssQUwsZ29zc2FyaTAxLDMwMDAwMA0KMTk5MixPQUssQUwsa2xpbmtqbzAxLDIzNTAwMA0KMTk5MixPQUssQUwsYmxhbmtsYTAyLDIwNTAwMA0KMTk5MixPQUssQUwsYm9yZGltaTAxLDE4NTAwMA0KMTk5MixPQUssQUwsY29yc2lqaTAxLDEzMDAwMA0KMTk5MixPQUssQUwsc2x1c2FqbzAxLDEyNTAwMA0KMTk5MixPQUssQUwsaGVtb25zYzAxLDEyMDAwMA0KMTk5MixPQUssQUwsZHJlc3NraTAxLDExNzUwMA0KMTk5MixPQUssQUwsY2FtcGJrZTAxLDExNTUwMA0KMTk5MixPQUssQUwsYnJvc2lzYzAxLDExMzAwMA0KMTk5MixPQUssQUwsd2FsdG9icjAxLDExMTAwMA0KMTk5MixPQUssQUwsZ3V6bWFqbzAyLDEwOTAwMA0KMTk5MixPQUssQUwsaG9yc212aTAxLDEwOTAwMA0KMTk5MixTRUEsQUwsbWl0Y2hrZTAxLDM3NTAwMDANCjE5OTIsU0VBLEFMLG9icmllcGUwMywyMTg3NTAwDQoxOTkyLFNFQSxBTCxyZXlub2hhMDEsMjE2NjY2Ng0KMTk5MixTRUEsQUwsZ3JpZmZrZTAyLDIwMjUwMDANCjE5OTIsU0VBLEFMLHZhbGxlZGEwMSwxNjY2NjY3DQoxOTkyLFNFQSxBTCxidWhuZWphMDEsMTQ0NTAwMA0KMTk5MixTRUEsQUwsam9obnNyYTA1LDEzOTI1MDANCjE5OTIsU0VBLEFMLGhhbnNvZXIwMSwxMzQ1MDAwDQoxOTkyLFNFQSxBTCxjb3R0b2hlMDEsODc1MDAwDQoxOTkyLFNFQSxBTCxicmFkbHNjMDEsODM3NTAwDQoxOTkyLFNFQSxBTCxzY2hvb21pMDEsODAwMDAwDQoxOTkyLFNFQSxBTCxob2xtYWJyMDEsNjAwMDAwDQoxOTkyLFNFQSxBTCxiZWF0dGppMDEsNTc1MDAwDQoxOTkyLFNFQSxBTCxicmlsZWdyMDEsNTcwMDAwDQoxOTkyLFNFQSxBTCxtYXJ0aWVkMDEsNTYwMDAwDQoxOTkyLFNFQSxBTCx2aXpxdW9tMDEsMzYwMDAwDQoxOTkyLFNFQSxBTCxhY2tlcmppMDEsMjc1MDAwDQoxOTkyLFNFQSxBTCxkZWx1Y3JpMDEsMjEwMDAwDQoxOTkyLFNFQSxBTCxzd2FucnUwMSwxOTUwMDANCjE5OTIsU0VBLEFMLHNjaGFlamUwMSwxNjUwMDANCjE5OTIsU0VBLEFMLGNvY2hyZGEwMSwxNjIwMDANCjE5OTIsU0VBLEFMLHNpbmF0bWEwMSwxNTAwMDANCjE5OTIsU0VBLEFMLGpvbmVzY2EwMSwxMzI1MDANCjE5OTIsU0VBLEFMLG1hcnRpdGkwMiwxMzI1MDANCjE5OTIsU0VBLEFMLGhhcnJpZ2UwMSwxMzAwMDANCjE5OTIsU0VBLEFMLHBvd2VsYWwwMSwxMjUwMDANCjE5OTIsU0VBLEFMLGZsZW1pZGEwMSwxMjQwMDANCjE5OTIsU0VBLEFMLGtuYWNrYnIwMSwxMTQwMDANCjE5OTIsU0VBLEFMLGxlbm5vcGEwMSwxMDkwMDANCjE5OTIsVEVYLEFMLHNpZXJycnUwMSw1MDAwMDAwDQoxOTkyLFRFWCxBTCxyeWFubm8wMSw0MjAwMDAwDQoxOTkyLFRFWCxBTCxwYWxtZXJhMDEsMzg1MDAwMA0KMTk5MixURVgsQUwscnVzc2VqZTAxLDI2MDAwMDANCjE5OTIsVEVYLEFMLGZyYW5janUwMSwyNDUwMDAwDQoxOTkyLFRFWCxBTCx3aXR0Ym8wMSwyMzgzMzMzDQoxOTkyLFRFWCxBTCxndXptYWpvMDEsMTQwNTAwMA0KMTk5MixURVgsQUwsYnJvd25rZTAxLDEyMDAwMDANCjE5OTIsVEVYLEFMLHBldHRpZ2EwMSwxMDUzMzM0DQoxOTkyLFRFWCxBTCxkb3duaWJyMDEsOTUwMDAwDQoxOTkyLFRFWCxBTCxwZXRyYWdlMDEsNjc1MDAwDQoxOTkyLFRFWCxBTCxyb2dlcmtlMDEsNjIwMDAwDQoxOTkyLFRFWCxBTCx0aG9uZGkwMSw2MDAwMDANCjE5OTIsVEVYLEFMLGJ1cm5zdG8wMiwzNDUwMDANCjE5OTIsVEVYLEFMLGdvbnphanUwMywyODc1MDANCjE5OTIsVEVYLEFMLG5ld21hYWwwMSwyNjAwMDANCjE5OTIsVEVYLEFMLGJhbm5pZmwwMSwyMjUwMDANCjE5OTIsVEVYLEFMLGRhdWdoamEwMSwyMTUwMDANCjE5OTIsVEVYLEFMLHJlaW1la2UwMSwyMTAwMDANCjE5OTIsVEVYLEFMLHJvYmluamUwMiwyMDAwMDANCjE5OTIsVEVYLEFMLGh1c29uamUwMSwxODI1MDANCjE5OTIsVEVYLEFMLHBhbG1lZGUwMSwxNDI1MDANCjE5OTIsVEVYLEFMLHJvZHJpaXYwMSwxNDAwMDANCjE5OTIsVEVYLEFMLHNlYnJhYm8wMSwxNDAwMDANCjE5OTIsVEVYLEFMLG1hdGhldGUwMSwxMjUwMDANCjE5OTIsVEVYLEFMLGZpcmVvc3QwMSwxMjAwMDANCjE5OTIsVEVYLEFMLGNoaWFtc2MwMSwxMTIwMDANCjE5OTIsVEVYLEFMLGZhamFyaGUwMSwxMTAwMDANCjE5OTIsVEVYLEFMLGZhcmlzbW8wMSwxMDkwMDANCjE5OTIsVEVYLEFMLGZyeWVqZTAxLDEwOTAwMA0KMTk5MixURVgsQUwsaGFzZWxiaTAxLDEwOTAwMA0KMTk5MixUT1IsQUwsbW9ycmlqYTAyLDQ0NTAwMDANCjE5OTIsVE9SLEFMLGNhcnRlam8wMSwzNjkxNjY3DQoxOTkyLFRPUixBTCxncnViZWtlMDEsMzYzMzMzMw0KMTk5MixUT1IsQUwsaGVua2V0bzAxLDMzOTE2NjcNCjE5OTIsVE9SLEFMLHN0aWViZGEwMSwzMjUwMDAwDQoxOTkyLFRPUixBTCxhbG9tYXJvMDEsMjk4MzMzMw0KMTk5MixUT1IsQUwsd2FyZGR1MDEsMjQyNTAwMA0KMTk5MixUT1IsQUwsd2hpdGVkZTAzLDIzODMzMzMNCjE5OTIsVE9SLEFMLHdpbmZpZGEwMSwyMzAwMDAwDQoxOTkyLFRPUixBTCxrZXlqaTAxLDIyNzUwMDANCjE5OTIsVE9SLEFMLHdlbGxzZGEwMSwyMDYzMDAwDQoxOTkyLFRPUixBTCxkYXlsZWtlMDEsMTk4MzMzMw0KMTk5MixUT1IsQUwsbWFsZG9jYTAxLDEzNzUwMDANCjE5OTIsVE9SLEFMLHN0b3R0dG8wMSwxMjAwMDAwDQoxOTkyLFRPUixBTCxib3JkZXBhMDEsMTAwMDAwMA0KMTk5MixUT1IsQUwsbGVlbWEwMiwxMDAwMDAwDQoxOTkyLFRPUixBTCx0YWJsZXBhMDEsOTAwMDAwDQoxOTkyLFRPUixBTCxtdWxsaXJhMDEsNzc1MDAwDQoxOTkyLFRPUixBTCxncmlmZmFsMDEsNjM3NTAwDQoxOTkyLFRPUixBTCxteWVyc2dyMDEsNTI1MDAwDQoxOTkyLFRPUixBTCxvbGVydWpvMDEsMzg3NTAwDQoxOTkyLFRPUixBTCxndXptYWp1MDEsMjQyMDAwDQoxOTkyLFRPUixBTCx0aW1saW1pMDEsMjIyMDAwDQoxOTkyLFRPUixBTCxkdWNleXJvMDEsMjAwMDAwDQoxOTkyLFRPUixBTCxtYWNkb2JvMDEsMTgyNTAwDQoxOTkyLFRPUixBTCxsZWl0ZWFsMDEsMTgwMDAwDQoxOTkyLFRPUixBTCx3YXJkdHUwMSwxMjc1MDANCjE5OTIsVE9SLEFMLHdlYXRoZGEwMSwxMjEwMDANCjE5OTIsVE9SLEFMLHNwcmFnZWQwMiwxMTc1MDANCjE5OTIsVE9SLEFMLGJlbGxkZTAxLDExMjUwMA0KMTk5MixUT1IsQUwsY294ZGEwMSwxMDkwMDANCjE5OTIsVE9SLEFMLGhlbnRncGEwMSwxMDkwMDANCjE5OTIsVE9SLEFMLGtlbnRqZTAxLDEwOTAwMA0KMTk5MixUT1IsQUwsa25vcnJyYTAxLDEwOTAwMA0KMTk5MixUT1IsQUwsdHJsaWNyaTAxLDEwOTAwMA0KMTk5MixUT1IsQUwsem9za3llZDAxLDEwOTAwMA0KMTk5MixBVEwsTkwsbGVpYnJjaDAxLDMxODMzMzMNCjE5OTIsQVRMLE5MLHBlbmRsdGUwMSwzMDI1MDAwDQoxOTkyLEFUTCxOTCxnbGF2aXRvMDIsMjk3NTAwMA0KMTk5MixBVEwsTkwsZ2FudHJvMDEsMjcwMDAwMA0KMTk5MixBVEwsTkwscGVuYWFsMDEsMjY1MDAwMA0KMTk5MixBVEwsTkwsYnJlYW1zaTAxLDI0MDAwMDANCjE5OTIsQVRMLE5MLGVzYXNrbmkwMSwyMTUwMDAwDQoxOTkyLEFUTCxOTCxuaXhvbm90MDEsMTgxMDAwMA0KMTk5MixBVEwsTkwsc21pdGhsbzAxLDE3NTAwMDANCjE5OTIsQVRMLE5MLHNtb2x0am8wMSwxNjAwMDAwDQoxOTkyLEFUTCxOTCxiaWVsZW1pMDEsMTMyNTAwMA0KMTk5MixBVEwsTkwsdHJlYWRqZTAxLDEyNjIwMDANCjE5OTIsQVRMLE5MLGJlcmVuanUwMSwxMjAwMDAwDQoxOTkyLEFUTCxOTCxibGF1c2plMDEsOTQwMDAwDQoxOTkyLEFUTCxOTCxseW9uc3N0MDEsNjUwMDAwDQoxOTkyLEFUTCxOTCxzYW5kZWRlMDIsNjAwMDAwDQoxOTkyLEFUTCxOTCxqdXN0aWRhMDEsNTU1MDAwDQoxOTkyLEFUTCxOTCxiZWxsaXJhMDEsNTAwMDAwDQoxOTkyLEFUTCxOTCxzbWl0aHBlMDIsNDEwMDAwDQoxOTkyLEFUTCxOTCxmcmVlbW1hMDIsNDAwMDAwDQoxOTkyLEFUTCxOTCxiZXJyeWRhMDEsMzcwMDAwDQoxOTkyLEFUTCxOTCxhdmVyeXN0MDEsMzU1MDAwDQoxOTkyLEFUTCxOTCxvbHNvbmdyMDIsMzUwMDAwDQoxOTkyLEFUTCxOTCxzdGFudG1pMDIsMjY1MDAwDQoxOTkyLEFUTCxOTCxsZW1rZW1hMDEsMjUwMDAwDQoxOTkyLEFUTCxOTCxncmVnZ3RvMDEsMjQ3NTAwDQoxOTkyLEFUTCxOTCxtZXJja2tlMDEsMTkwMDAwDQoxOTkyLEFUTCxOTCxjYWJyZWZyMDEsMTQ4MDAwDQoxOTkyLEFUTCxOTCxodW50ZWJyMDEsMTQ2NTAwDQoxOTkyLEFUTCxOTCxjYXN0aXZpMDIsMTA5MDAwDQoxOTkyLEFUTCxOTCxyaXZlcmJlMDEsMTA5MDAwDQoxOTkyLENITixOTCxtYWRkdWdyMDEsNDIwMDAwMA0KMTk5MixDSE4sTkwsZGF3c29hbjAxLDMzMDAwMDANCjE5OTIsQ0hOLE5MLG1vcmdhbWkwMSwyODc1MDAwDQoxOTkyLENITixOTCxqYWNrc2RhMDIsMjYyNTAwMA0KMTk5MixDSE4sTkwsc21pdGhkYTAyLDI1MDAwMDANCjE5OTIsQ0hOLE5MLGR1bnN0c2gwMSwyNDc1MDAwDQoxOTkyLENITixOTCxncmFjZW1hMDEsMjI2MjUwMA0KMTk5MixDSE4sTkwsc2FuZGJyeTAxLDIxNTAwMDANCjE5OTIsQ0hOLE5MLGFzc2VucGEwMSwxOTEzMzMzDQoxOTkyLENITixOTCxwYXR0ZWtlMDEsNjQwMDAwDQoxOTkyLENITixOTCxzYWxhemx1MDEsNjAwMDAwDQoxOTkyLENITixOTCxyb2JpbmplMDEsNTg4ODUzDQoxOTkyLENITixOTCx3YWx0b2plMDEsNTI1MDAwDQoxOTkyLENITixOTCxzbWl0aGR3MDEsNDYwMDAwDQoxOTkyLENITixOTCxnaXJhcmpvMDEsMzAwMDAwDQoxOTkyLENITixOTCx3YWxrZWNoMDEsMjc1MDAwDQoxOTkyLENITixOTCxkYXNjZWRvMDEsMjQwMDAwDQoxOTkyLENITixOTCxoYXJrZW1pMDEsMjMwMDAwDQoxOTkyLENITixOTCxtY2VscmNoMDEsMjIyMDAwDQoxOTkyLENITixOTCx2aWxsYWhlMDEsMjAwMDAwDQoxOTkyLENITixOTCxib3NraXNoMDEsMTg1MDAwDQoxOTkyLENITixOTCxzb3Nhc2EwMSwxODAwMDANCjE5OTIsQ0hOLE5MLHZpemNham8wMSwxNzcwMDANCjE5OTIsQ0hOLE5MLGNhc3RpZnIwMSwxNTAwMDANCjE5OTIsQ0hOLE5MLHNjYW5sYm8wMSwxNTAwMDANCjE5OTIsQ0hOLE5MLHNsb2N1aGUwMSwxNTAwMDANCjE5OTIsQ0hOLE5MLHdpbGtpcmkwMSwxNDAwMDANCjE5OTIsQ0hOLE5MLHNjb3R0Z2EwMSwxMTYwMDANCjE5OTIsQ0lOLE5MLGxhcmtpYmEwMSw0MzUwMDAwDQoxOTkyLENJTixOTCxyaWpvam8wMSwzNTIwODMzDQoxOTkyLENJTixOTCxicm93bnRvMDUsMzI1MDAwMA0KMTk5MixDSU4sTkwsZG9yYW5iaTAyLDI4MzMzMzMNCjE5OTIsQ0lOLE5MLG9uZWlscGEwMSwyODMzMzMzDQoxOTkyLENJTixOTCxzYWJvY2gwMSwyNzUwMDAwDQoxOTkyLENJTixOTCxzd2luZGdyMDEsMjUwMDAwMA0KMTk5MixDSU4sTkwsYmVsY2h0aTAxLDIxMDAwMDANCjE5OTIsQ0lOLE5MLGhhdGNoYmkwMSwxNjAwMDAwDQoxOTkyLENJTixOTCxyb2JlcmJpMDEsMTU1MDAwMA0KMTk5MixDSU4sTkwsZGliYmxybzAxLDE0NTAwMDANCjE5OTIsQ0lOLE5MLG1hcnRpZGEwMSwxMzAwMDAwDQoxOTkyLENJTixOTCxjaGFybG5vMDEsMTIwMDAwMA0KMTk5MixDSU4sTkwsYnJhZ2dnbDAxLDEwMDAwMDANCjE5OTIsQ0lOLE5MLGJhbmtoc2MwMSw4MDAwMDANCjE5OTIsQ0lOLE5MLHJlZWRqZTAyLDc1MDAwMA0KMTk5MixDSU4sTkwsbW9ycmloYTAyLDQzMDAwMA0KMTk5MixDSU4sTkwsaGVucnlkdzAxLDM4MDAwMA0KMTk5MixDSU4sTkwsb2xpdmVqbzAxLDI2MDAwMA0KMTk5MixDSU4sTkwscnVza2lzYzAxLDIzNTAwMA0KMTk5MixDSU4sTkwsaGFtbW9jaDAxLDE0MDAwMA0KMTk5MixDSU4sTkwsYWZlbml0cjAxLDEzMDAwMA0KMTk5MixDSU4sTkwsYmVuYXZmcjAxLDEyMDAwMA0KMTk5MixDSU4sTkwsaGlsbG1pMDEsMTE3MDAwDQoxOTkyLENJTixOTCxmb3N0ZXN0MDEsMTE0MDAwDQoxOTkyLENJTixOTCxicnVtZmphMDEsMTA5MDAwDQoxOTkyLENJTixOTCxzYW5kZXJlMDIsMTA5MDAwDQoxOTkyLEhPVSxOTCxqb25lc2RvMDEsMTY1MDAwMA0KMTk5MixIT1UsTkwsY2FtaW5rZTAxLDE1MDAwMDANCjE5OTIsSE9VLE5MLGJpZ2dpY3IwMSwxNDI1MDAwDQoxOTkyLEhPVSxOTCxwb3J0dW1hMDEsMTI1MDAwMA0KMTk5MixIT1UsTkwsZmlubGVzdDAxLDEyMTAwMDANCjE5OTIsSE9VLE5MLGNhbmRhY2EwMSw5MzUwMDANCjE5OTIsSE9VLE5MLG11cnBocm8wMSw4MTAwMDANCjE5OTIsSE9VLE5MLGluY2F2cGUwMSw4MDAwMDANCjE5OTIsSE9VLE5MLGJvZXZlam8wMSw3MjUwMDANCjE5OTIsSE9VLE5MLGpvbmVzamkwMiw1MDAwMDANCjE5OTIsSE9VLE5MLGhhcm5pcGUwMSw0NzUwMDANCjE5OTIsSE9VLE5MLHlvdW5nZ2UwMiw0MjAwMDANCjE5OTIsSE9VLE5MLHJhbWlycmEwMSw0MDAwMDANCjE5OTIsSE9VLE5MLHJpbGVzZXIwMSw0MDAwMDANCjE5OTIsSE9VLE5MLGJhZ3dlamUwMSwzNTAwMDANCjE5OTIsSE9VLE5MLHdhbGxpZGUwMSwzMDAwMDANCjE5OTIsSE9VLE5MLGdvbnphbHUwMSwyODUwMDANCjE5OTIsSE9VLE5MLG9zdW5hYWwwMSwyNDAwMDANCjE5OTIsSE9VLE5MLGhlcm5heGEwMSwyMzAwMDANCjE5OTIsSE9VLE5MLHNjaGlsY3UwMSwyMDUwMDANCjE5OTIsSE9VLE5MLGtpbGVkYTAxLDE5MDAwMA0KMTk5MixIT1UsTkwsY2VkZW5hbjAxLDEzOTAwMA0KMTk5MixIT1UsTkwsYmxhaXJ3aTAxLDEzODUwMA0KMTk5MixIT1UsTkwsdGF1YmVlZDAxLDEzMjAwMA0KMTk5MixIT1UsTkwsYm93ZW5yeTAxLDEyNTAwMA0KMTk5MixIT1UsTkwsYW50aG9lcjAxLDEyMDAwMA0KMTk5MixIT1UsTkwsc2VydmFzYzAxLDEyMDAwMA0KMTk5MixIT1UsTkwsc2ltbXNtaTAxLDExNTAwMA0KMTk5MixIT1UsTkwsZ3VlcnJqdTAxLDEwOTAwMA0KMTk5MixIT1UsTkwsaGVucnlidTAxLDEwOTAwMA0KMTk5MixMQU4sTkwsaGVyc2hvcjAxLDQzMzMzMzMNCjE5OTIsTEFOLE5MLHN0cmF3ZGEwMSw0MDUwMDAwDQoxOTkyLExBTixOTCxjYW5kaXRvMDEsMzc1MDAwMA0KMTk5MixMQU4sTkwsZGF2aXNlcjAxLDM2MDAwMDANCjE5OTIsTEFOLE5MLGJ1dGxlYnIwMSwzMzMzMzMzDQoxOTkyLExBTixOTCxob3dlbGphMDEsMjU3NTAwMA0KMTk5MixMQU4sTkwsZGFuaWVrYTAxLDI1MDAwMDANCjE5OTIsTEFOLE5MLHNhbXVlanUwMSwyMzI1MDAwDQoxOTkyLExBTixOTCxncm9zc2tlMDEsMjIxNjY2Nw0KMTk5MixMQU4sTkwsbWNkb3dybzAxLDIyMDAwMDANCjE5OTIsTEFOLE5MLHNjaW9zbWkwMSwyMTgzMzMzDQoxOTkyLExBTixOTCxnb3R0amkwMSwyMTI1MDAwDQoxOTkyLExBTixOTCxvamVkYWJvMDEsMTYwMDAwMA0KMTk5MixMQU4sTkwsY2FuZGVqbzAxLDEyNTAwMDANCjE5OTIsTEFOLE5MLGNyZXdzdGkwMSwxMTc1MDAwDQoxOTkyLExBTixOTCxiZW56aXRvMDEsMTE1MDAwMA0KMTk5MixMQU4sTkwsaGFycmlsZTAxLDg0MDAwMA0KMTk5MixMQU4sTkwsbWFydGlyYTAyLDcyNTAwMA0KMTk5MixMQU4sTkwsamF2aWVzdDAxLDcxNTAwMA0KMTk5MixMQU4sTkwsc2hhcnBtaTAxLDU4NzUwMA0KMTk5MixMQU4sTkwsYW5kZXJkYTAyLDM1MDAwMA0KMTk5MixMQU4sTkwsd2lsc29zdDAxLDI3NTAwMA0KMTk5MixMQU4sTkwsZ3Jvc3NraTAxLDE1MDAwMA0KMTk5MixMQU4sTkwsaGFuc2VkYTAxLDEzNTAwMA0KMTk5MixMQU4sTkwsaGVybmFjYTAxLDEzNTAwMA0KMTk5MixMQU4sTkwsb2ZmZXJqbzAxLDEzNTAwMA0KMTk5MixMQU4sTkwsc2VhbmVydTAxLDEzNTAwMA0KMTk5MixMQU4sTkwsa2Fycm9lcjAxLDEyNDAwMA0KMTk5MixMQU4sTkwsd2Vic3RtaTAxLDExNTAwMA0KMTk5MixNT04sTkwsbWFydGlkZTAxLDMzNDgzMzMNCjE5OTIsTU9OLE5MLGNhbGRlaXYwMSwyNjAwMDAwDQoxOTkyLE1PTixOTCx3YWxsYXRpMDEsMTkwNjUwMA0KMTk5MixNT04sTkwsb3dlbnNwMDEsMTE5MDAwMQ0KMTk5MixNT04sTkwsd2Fsa2VsYTAxLDk5MDAwMA0KMTk5MixNT04sTkwsbGFuZHJiaTAxLDk1MDAwMA0KMTk5MixNT04sTkwsY2FydGVnYTAxLDgyNTAwMA0KMTk5MixNT04sTkwsaGlsbGtlMDEsNjIwMDAwDQoxOTkyLE1PTixOTCxmb2xleXRvMDIsMzY1MDAwDQoxOTkyLE1PTixOTCxkZXNoaWRlMDEsMzAyNTAwDQoxOTkyLE1PTixOTCxnYXJkbm1hMDEsMzAwMDAwDQoxOTkyLE1PTixOTCxncmlzc21hMDIsMzAwMDAwDQoxOTkyLE1PTixOTCxjZXJvbnJpMDEsMjMwMDAwDQoxOTkyLE1PTixOTCxicmFkbHBoMDEsMjAwMDAwDQoxOTkyLE1PTixOTCxuYWJob2NoMDEsMTk1MDAwDQoxOTkyLE1PTixOTCxzYW1wZWJpMDEsMTc1MDAwDQoxOTkyLE1PTixOTCx3ZXR0ZWpvMDEsMTU2MDAwDQoxOTkyLE1PTixOTCxiYXJiZWJyMDEsMTI5MDAwDQoxOTkyLE1PTixOTCxmYXNzZWplMDEsMTI5MDAwDQoxOTkyLE1PTixOTCxmbGV0Y2RhMDEsMTI1MDAwDQoxOTkyLE1PTixOTCxyZWVkZGEwMSwxMTkwMDANCjE5OTIsTU9OLE5MLGhhbmV5Y2gwMSwxMTgwMDANCjE5OTIsTU9OLE5MLGFsb3VtbzAxLDExMDUwMA0KMTk5MixNT04sTkwsdmFuZGVqbzAyLDExMDUwMA0KMTk5MixNT04sTkwsdmFsZGVzZTAxLDExMDAwMA0KMTk5MixNT04sTkwsaHVyc3RqbzAxLDEwOTAwMA0KMTk5MixNT04sTkwsa2FyY2htYTAxLDEwOTAwMA0KMTk5MixOWU4sTkwsYm9uaWxibzAxLDYxMDAwMDANCjE5OTIsTllOLE5MLGdvb2RlZHcwMSw1MTY2NjY3DQoxOTkyLE5ZTixOTCxjb25lZGEwMSw0MjUwMDAwDQoxOTkyLE5ZTixOTCxtdXJyYWVkMDIsNDEyNTAwMA0KMTk5MixOWU4sTkwsZnJhbmNqbzAxLDMzMzMzMzQNCjE5OTIsTllOLE5MLGNvbGVtdmkwMSwzMjEyNTAwDQoxOTkyLE5ZTixOTCxzYWJlcmJyMDEsMjk1MDAwMA0KMTk5MixOWU4sTkwsYnVya2V0aTAxLDIyNjY2NjcNCjE5OTIsTllOLE5MLGpvaG5zaG8wMSwyMjY2NjY3DQoxOTkyLE5ZTixOTCxmZXJuYXNpMDEsMjIxNjY2Nw0KMTk5MixOWU4sTkwsbWFnYWRkYTAxLDEzOTM3NTANCjE5OTIsTllOLE5MLGJvc3RvZGEwMSw5MzUwMDANCjE5OTIsTllOLE5MLHJhbmRvd2kwMSw4NTAwMDANCjE5OTIsTllOLE5MLGdpYnNvcGEwMSw4MzAwMDANCjE5OTIsTllOLE5MLHBlY290YmkwMSw3ODUwMDANCjE5OTIsTllOLE5MLHNhc3NlbWEwMSw3NzUwMDANCjE5OTIsTllOLE5MLGVsc3Rla2UwMSw3NjAwMDANCjE5OTIsTllOLE5MLGdhbGxhZGEwMSw2Mjg3NTANCjE5OTIsTllOLE5MLG9icmllY2gwMSwzNzAwMDANCjE5OTIsTllOLE5MLGlubmlzamUwMSwzNTUwMDANCjE5OTIsTllOLE5MLG5vYm9hanUwMSwyNzIwMDANCjE5OTIsTllOLE5MLHdoaXRld2EwMiwyMzUwMDANCjE5OTIsTllOLE5MLHJvc2Vuc3QwMSwxNTUwMDANCjE5OTIsTllOLE5MLHNjaG91cGUwMSwxMzUwMDANCjE5OTIsTllOLE5MLGh1bmRsdG8wMSwxMjAwMDANCjE5OTIsTllOLE5MLHlvdW5nYW4wMSwxMTUwMDANCjE5OTIsUEhJLE5MLHdpbGxpbWkwMiwzMjAwMDAwDQoxOTkyLFBISSxOTCxkYXVsdGRhMDEsMjU2NjY2Nw0KMTk5MixQSEksTkwsbXVycGhkYTA1LDI1MDAwMDANCjE5OTIsUEhJLE5MLGtydWtqbzAxLDIzNTAwMDANCjE5OTIsUEhJLE5MLGR5a3N0bGUwMSwyMzE2NjY3DQoxOTkyLFBISSxOTCxkdW5jYW1hMDEsMjAwMDAwMA0KMTk5MixQSEksTkwsaG93ZWxrZTAxLDIwMDAwMDANCjE5OTIsUEhJLE5MLG11bGhvdGUwMSwxMjUwMDAwDQoxOTkyLFBISSxOTCxqb25lc2JhMDEsMTAyNTAwMA0KMTk5MixQSEksTkwsam9yZGFyaTAyLDY2MDAwMA0KMTk5MixQSEksTkwsYmFja213YTAxLDY1MDAwMA0KMTk5MixQSEksTkwsY294ZGEwMSw2MjUwMDANCjE5OTIsUEhJLE5MLHN2ZXVtZGEwMSwzNzUwMDANCjE5OTIsUEhJLE5MLGxpbmRlamkwMSwyNjAwMDANCjE5OTIsUEhJLE5MLGdyZWVudG8wMSwyNTUwMDANCjE5OTIsUEhJLE5MLGRlamVzam8wMSwyNDc1MDANCjE5OTIsUEhJLE5MLGhhcnRsbWkwMSwyMjUwMDANCjE5OTIsUEhJLE5MLGNoYW1id2UwMSwyMDAwMDANCjE5OTIsUEhJLE5MLGhvbGxpZGEwMSwxODAwMDANCjE5OTIsUEhJLE5MLG1vcmFubWkwMSwxODAwMDANCjE5OTIsUEhJLE5MLHN0ZXBocmEwMSwxNzkwMDANCjE5OTIsUEhJLE5MLHNlYXJjc3QwMSwxNzUwMDANCjE5OTIsUEhJLE5MLHJpdGNod2EwMSwxNjUwMDANCjE5OTIsUEhJLE5MLG1hdGhlZ3IwMSwxNDUwMDANCjE5OTIsUEhJLE5MLGFiYm90a3kwMSwxMDkwMDANCjE5OTIsUEhJLE5MLGFtYXJvcnUwMiwxMDkwMDANCjE5OTIsUEhJLE5MLGFzaGJ5YW4wMSwxMDkwMDANCjE5OTIsUEhJLE5MLGJhdGlza2kwMSwxMDkwMDANCjE5OTIsUEhJLE5MLGJyYW50amUwMSwxMDkwMDANCjE5OTIsUEhJLE5MLGRlbGVvam8wMSwxMDkwMDANCjE5OTIsUElULE5MLGJvbmRzYmEwMSw0ODAwMDAwDQoxOTkyLFBJVCxOTCxkcmFiZWRvMDEsNDUwMDAwMA0KMTk5MixQSVQsTkwsdmFuc2xhbjAxLDQzNTAwMDANCjE5OTIsUElULE5MLGJ1ZWNoc3QwMSwyNjAwMDAwDQoxOTkyLFBJVCxOTCxzbWl0aHphMDEsMjUyNTAwMA0KMTk5MixQSVQsTkwsd2Fsa2JvMDEsMjAyNTAwMA0KMTk5MixQSVQsTkwsbGluZGpvMDEsMjAwMDAwMA0KMTk5MixQSVQsTkwsZ2lic29raTAxLDE5NTAwMDANCjE5OTIsUElULE5MLGxhdmFsbWkwMSwxODUwMDAwDQoxOTkyLFBJVCxOTCxzbGF1Z2RvMDEsMTY5MTY2Nw0KMTk5MixQSVQsTkwsYmVsbGphMDEsODc1MDAwDQoxOTkyLFBJVCxOTCxyZWR1c2dhMDEsODI1MDAwDQoxOTkyLFBJVCxOTCxwYXR0ZWJvMDEsNzg1MDAwDQoxOTkyLFBJVCxOTCxtY2NsZWxsMDEsNTI1MDAwDQoxOTkyLFBJVCxOTCx2YXJzaGdhMDEsMzY3NTAwDQoxOTkyLFBJVCxOTCxraW5namUwMSwzMjUwMDANCjE5OTIsUElULE5MLGJlbGluc3QwMSwyODAwMDANCjE5OTIsUElULE5MLGVzcHljZTAxLDI1MDAwMA0KMTk5MixQSVQsTkwsbWFzb25ybzAxLDIyNTAwMA0KMTk5MixQSVQsTkwsdG9tbGlyYTAxLDE4MDAwMA0KMTk5MixQSVQsTkwscGFsYWN2aTAxLDE3MDAwMA0KMTk5MixQSVQsTkwsbWVyY2VvcjAxLDE1MDAwMA0KMTk5MixQSVQsTkwscHJpbmN0bzAxLDE0MDAwMA0KMTk5MixQSVQsTkwscm9kcmlybzAyLDExNDAwMA0KMTk5MixQSVQsTkwsZ2FyY2ljYTAxLDExMzAwMA0KMTk5MixQSVQsTkwsbmVhZ2xkZTAxLDExMDAwMA0KMTk5MixQSVQsTkwsYmF0aXNtaTAxLDEwOTAwMA0KMTk5MixQSVQsTkwsbWlsbGVwYTAxLDEwOTAwMA0KMTk5MixTRE4sTkwsbWNncmlmcjAxLDQwNzUwMDANCjE5OTIsU0ROLE5MLHNhbnRpYmUwMSwzMzAwMDAwDQoxOTkyLFNETixOTCxodXJzdGJyMDEsMzAwMDAwMA0KMTk5MixTRE4sTkwsZmVybmF0bzAxLDIxMDAwMDANCjE5OTIsU0ROLE5MLGxlZmZlY3IwMSwyMDQxNjY3DQoxOTkyLFNETixOTCxnd3lubnRvMDEsMjAyNTAwMA0KMTk5MixTRE4sTkwsYW5kZXJsYTAyLDIwMDAwMDANCjE5OTIsU0ROLE5MLHN0aWxsa3UwMSwxNzUwMDAwDQoxOTkyLFNETixOTCxoYXJyaWdyMDIsMTAyNTAwMA0KMTk5MixTRE4sTkwsamFja3NkYTAzLDgwNTAwMA0KMTk5MixTRE4sTkwsc2hlZmZnYTAxLDc1MDAwMA0KMTk5MixTRE4sTkwsdGV1ZmV0aTAxLDY4NzUwMA0KMTk5MixTRE4sTkwsbXllcnNyYTAxLDUyNTAwMA0KMTk5MixTRE4sTkwsbWFkZHVtaTAxLDUxMDAwMA0KMTk5MixTRE4sTkwsYmVuZXNhbjAxLDQ3NTAwMA0KMTk5MixTRE4sTkwsY2xhcmtqZTAxLDIwMDAwMA0KMTk5MixTRE4sTkwscm9kcmlyaTAyLDE3MjUwMA0KMTk5MixTRE4sTkwsaG93YXJ0aDAxLDE1ODAwMA0KMTk5MixTRE4sTkwsbWVsZW5qbzAxLDE1MDAwMA0KMTk5MixTRE4sTkwsY2xlbWVwYTAxLDE0NTAwMA0KMTk5MixTRE4sTkwsZWlsYW5kYTAxLDEzNTAwMA0KMTk5MixTRE4sTkwsYmlsYXJkYTAxLDEyNTAwMA0KMTk5MixTRE4sTkwsZmFyaWVwYTAxLDEyMjUwMA0KMTk5MixTRE4sTkwsYXpvY2FvczAxLDEyMDAwMA0KMTk5MixTRE4sTkwsc2hpcGxjcjAxLDExNzUwMA0KMTk5MixTRE4sTkwsbGFtcGt0bzAxLDExNjUwMA0KMTk5MixTRE4sTkwsd2FyZGtlMDEsMTE0MDAwDQoxOTkyLFNETixOTCxoZXJuYWplMDIsMTA5MDAwDQoxOTkyLFNGTixOTCxjbGFya3dpMDIsNDI3NTAwMA0KMTk5MixTRk4sTkwsbWNnZWV3aTAxLDM1NjI1MDANCjE5OTIsU0ZOLE5MLHJpZ2hlZGEwMSwzNTAwMDAwDQoxOTkyLFNGTixOTCxibGFja2J1MDIsMjc1MDAwMA0KMTk5MixTRk4sTkwsZ2FycmVzYzAxLDI0MDAwMDANCjE5OTIsU0ZOLE5MLHN3aWZ0YmkwMiwyMzE2NjY3DQoxOTkyLFNGTixOTCxiYXNza2UwMSwyMDAwMDAwDQoxOTkyLFNGTixOTCx3aWxsaW1hMDQsMjAwMDAwMA0KMTk5MixTRk4sTkwsamFja3NtaTAyLDE2NjY2NjcNCjE5OTIsU0ZOLE5MLHRob21wcm8wMSwxNjAwMDAwDQoxOTkyLFNGTixOTCx1cmliZWpvMDEsMTUzMzMzNA0KMTk5MixTRk4sTkwsYnJhbnRqZTAxLDExMjUwMDANCjE5OTIsU0ZOLE5MLGRvd25za2UwMSw5MjUwMDANCjE5OTIsU0ZOLE5MLGZlbGRlbWkwMSw2NTAwMDANCjE5OTIsU0ZOLE5MLGphbWVzY2gwMiw2NTAwMDANCjE5OTIsU0ZOLE5MLHNueWRlY28wMiw1NjUwMDANCjE5OTIsU0ZOLE5MLGJ1cmtlam8wMywzNzUwMDANCjE5OTIsU0ZOLE5MLG1hbndha2kwMSwzNjAwMDANCjE5OTIsU0ZOLE5MLGJlbmphbWkwMSwxNTAwMDANCjE5OTIsU0ZOLE5MLGxld2lzZGEwMSwxNDUwMDANCjE5OTIsU0ZOLE5MLGxlb25hbWEwMSwxNDAwMDANCjE5OTIsU0ZOLE5MLGJ1cmJhZGEwMSwxMzAwMDANCjE5OTIsU0ZOLE5MLGJlY2tybzAxLDEyMDAwMA0KMTk5MixTRk4sTkwsaGVyZWRnaTAxLDExNTAwMA0KMTk5MixTRk4sTkwsY2xheXRybzAxLDEwOTAwMA0KMTk5MixTTE4sTkwsc21pdGhsZTAyLDI3OTE2NjcNCjE5OTIsU0xOLE5MLGRlbGVvam8wMSwyNDY2NjY3DQoxOTkyLFNMTixOTCxndWVycnBlMDEsMjQyNTAwMA0KMTk5MixTTE4sTkwsZ2FsYXJhbjAxLDIzNjY2NjcNCjE5OTIsU0xOLE5MLHNtaXRoYnIwMSwyMjMzMzM0DQoxOTkyLFNMTixOTCxvcXVlbmpvMDEsMjA1MDAwMA0KMTk5MixTTE4sTkwsc21pdGhvejAxLDIwMDAwMDANCjE5OTIsU0xOLE5MLGFnb3N0anUwMSwxNjY2NjY3DQoxOTkyLFNMTixOTCx0aG9tcG1pMDIsMTYxNjY2Nw0KMTk5MixTTE4sTkwscGVycnlnZTAxLDExNjY2NjcNCjE5OTIsU0xOLE5MLHBhZ25vdG8wMSw5OTI1MDANCjE5OTIsU0xOLE5MLHRld2tzYm8wMSw4MjUwMDANCjE5OTIsU0xOLE5MLG1hZ3Jham8wMSw4MjAwMDANCjE5OTIsU0xOLE5MLHdvcnJldG8wMSw3OTAwMDANCjE5OTIsU0xOLE5MLG1jY2x1Ym8wMSw1MDAwMDANCjE5OTIsU0xOLE5MLGh1ZGxlcmUwMSw0MDAwMDANCjE5OTIsU0xOLE5MLGpvc2VmZTAxLDMxNTAwMA0KMTk5MixTTE4sTkwsemVpbGV0bzAxLDMxNTAwMA0KMTk5MixTTE4sTkwsdGVycnlzYzAxLDMwMDAwMA0KMTk5MixTTE4sTkwsbGFua2ZyYTAxLDIzMDAwMA0KMTk5MixTTE4sTkwsZ2VkbWFyaTAxLDIwMDAwMA0KMTk5MixTTE4sTkwsY2FycGVjcjAxLDE3MDAwMA0KMTk5MixTTE4sTkwsb2xpdmFvbTAxLDE3MDAwMA0KMTk5MixTTE4sTkwsam9uZXN0aTAyLDE2NTAwMA0KMTk5MixTTE4sTkwsZ2lsa2ViZTAxLDEzNTAwMA0KMTk5MixTTE4sTkwsd2lsc29jcjAxLDEzNTAwMA0KMTk5MixTTE4sTkwsY29ybWlyaDAxLDEyMDAwMA0KMTk5MixTTE4sTkwsY2xhcmttYTAxLDEwOTAwMA0KMTk5MixTTE4sTkwsam9yZGFicjAxLDEwOTAwMA0KMTk5MyxCQUwsQUwscmlwa2VjYTAxLDUyMDAwMDANCjE5OTMsQkFMLEFMLGRhdmlzZ2wwMSwzODE3NTAwDQoxOTkzLEJBTCxBTCxkZXZlcm1pMDEsMzAyNTAwMA0KMTk5MyxCQUwsQUwsc3V0Y2xyaTAxLDI1MDAwMDANCjE5OTMsQkFMLEFMLG9sc29uZ3IwMSwyMzAwMDAwDQoxOTkzLEJBTCxBTCxhbmRlcmJyMDEsMTg1NTAwMA0KMTk5MyxCQUwsQUwscmV5bm9oYTAxLDE2NTAwMDANCjE5OTMsQkFMLEFMLG1jZG9uYmUwMSwxMjUwMDAwDQoxOTkzLEJBTCxBTCxiYWluZWhhMDEsMTIwMDAwMA0KMTk5MyxCQUwsQUwsZnJvaHd0bzAxLDk3NTAwMA0KMTk5MyxCQUwsQUwsdmFsZW5mZTAxLDY1MDAwMA0KMTk5MyxCQUwsQUwsd2lsbGltYTA1LDUwMDAwMA0KMTk5MyxCQUwsQUwsbXVzc2ltaTAxLDQ1MDAwMA0KMTk5MyxCQUwsQUwsaHVsZXR0aTAxLDQwMDAwMA0KMTk5MyxCQUwsQUwsaG9pbGVjaDAxLDM1MDAwMA0KMTk5MyxCQUwsQUwsbWNsZW1tYTAxLDM0NTAwMA0KMTk5MyxCQUwsQUwsZ29tZXpsZTAyLDMxMjUwMA0KMTk5MyxCQUwsQUwsbWlsbHNhbDAxLDI0NTAwMA0KMTk5MyxCQUwsQUwsc2VndWlkYTAxLDIzNzUwMA0KMTk5MyxCQUwsQUwscGFyZW5tYTAxLDIxNTAwMA0KMTk5MyxCQUwsQUwsbW95ZXJqYTAxLDIwMDAwMA0KMTk5MyxCQUwsQUwsbWFydGljaDAxLDE5NzUwMA0KMTk5MyxCQUwsQUwscmhvZGVhcjAxLDE1NTAwMA0KMTk5MyxCQUwsQUwscG9vbGVqaTAyLDE1MDAwMA0KMTk5MyxCQUwsQUwsdGFja2VqZTAxLDE0MjUwMA0KMTk5MyxCQUwsQUwsbWVyY2VsdTAxLDEyMDAwMA0KMTk5MyxCQUwsQUwsYWxleGFtYTAyLDEwOTAwMA0KMTk5MyxCQUwsQUwsYnVmb3JkYTAxLDEwOTAwMA0KMTk5MyxCQUwsQUwsaGFtbW9qZTAxLDEwOTAwMA0KMTk5MyxCQUwsQUwsbWNnZWhrZTAxLDEwOTAwMA0KMTk5MyxCQUwsQUwsb2JhbmRzaDAxLDEwOTAwMA0KMTk5MyxCQUwsQUwsb2Rvbm9qbzAyLDEwOTAwMA0KMTk5MyxCT1MsQUwsZGF3c29hbjAxLDQ4NzUwMDANCjE5OTMsQk9TLEFMLHZpb2xhZnIwMSw0ODMzMzMzDQoxOTkzLEJPUyxBTCxjbGVtZXJvMDIsNDY1NTI1MA0KMTk5MyxCT1MsQUwsZ3JlZW5taTAxLDM0MjUwMDANCjE5OTMsQk9TLEFMLGRhcndpZGEwMSwyNzUwMDAwDQoxOTkzLEJPUyxBTCxwZW5hdG8wMSwyMjAwMDAwDQoxOTkzLEJPUyxBTCxydXNzZWplMDEsMjE3NTAwMA0KMTk5MyxCT1MsQUwsaGVza2VqbzAxLDE3NzUwMDANCjE5OTMsQk9TLEFMLGhhcnJpZ3IwMSwxNTAwMDAwDQoxOTkzLEJPUyxBTCxiYW5raHNjMDEsMTE1MDAwMA0KMTk5MyxCT1MsQUwscml2ZXJsdTAxLDEwNzUwMDANCjE5OTMsQk9TLEFMLGhhdGNoYmkwMSwxMDAwMDAwDQoxOTkzLEJPUyxBTCxmbGV0Y3NjMDEsODI1MDAwDQoxOTkzLEJPUyxBTCxkb3Bzb2pvMDEsNzUwMDAwDQoxOTkzLEJPUyxBTCxtZWx2aWJvMDEsNzI1MDAwDQoxOTkzLEJPUyxBTCxmb3NzYXRvMDEsNDc1MDAwDQoxOTkzLEJPUyxBTCxyaWxlc2VyMDEsNDAwMDAwDQoxOTkzLEJPUyxBTCxxdWludGNhMDEsMzQwMDAwDQoxOTkzLEJPUyxBTCx2YXVnaG1vMDEsMjkwMDAwDQoxOTkzLEJPUyxBTCxjb29wZXNjMDEsMjQwMDAwDQoxOTkzLEJPUyxBTCxtZWxlbmpvMDEsMjM1MDAwDQoxOTkzLEJPUyxBTCx6dXBjaWJvMDEsMjIyMDAwDQoxOTkzLEJPUyxBTCxuYWVocnRpMDEsMjAwMDAwDQoxOTkzLEJPUyxBTCx2YWxlbmpvMDIsMTcwMDAwDQoxOTkzLEJPUyxBTCxxdWFudHBhMDEsMTUwMDAwDQoxOTkzLEJPUyxBTCxmbGFoZWpvMDEsMTI1MDAwDQoxOTkzLEJPUyxBTCxyeWFua2UwMSwxMTgwMDANCjE5OTMsQk9TLEFMLHJpY2hhamUwMSwxMTUwMDANCjE5OTMsQk9TLEFMLGNhbGRlaXYwMSwxMDkwMDANCjE5OTMsQk9TLEFMLG9ydGl6bHUwMSwxMDkwMDANCjE5OTMsQk9TLEFMLHNlbGVhYTAxLDEwOTAwMA0KMTk5MyxDQUwsQUwsZmlubGVjaDAxLDUzNzUwMDANCjE5OTMsQ0FMLEFMLGdydWJla2UwMSw0MzMzMzM0DQoxOTkzLENBTCxBTCxsYW5nc21hMDEsMzU1MDAwMA0KMTk5MyxDQUwsQUwsZ2FldHRnYTAxLDMwMDAwMDANCjE5OTMsQ0FMLEFMLHBvbG9ubHUwMSwyNDc1MDAwDQoxOTkzLENBTCxBTCxkYXZpc2NoMDEsMjQwMDAwMA0KMTk5MyxDQUwsQUwsY3JpbWNoMDEsMTEwMDAwMA0KMTk5MyxDQUwsQUwsc2FuZGVzYzAxLDgwMDAwMA0KMTk5MyxDQUwsQUwsZ29uemFyZTAxLDc1MDAwMA0KMTk5MyxDQUwsQUwsamF2aWVzdDAxLDYwMDAwMA0KMTk5MyxDQUwsQUwsZnJleXN0MDEsNTI1MDAwDQoxOTkzLENBTCxBTCxteWVyc2dyMDEsNTI1MDAwDQoxOTkzLENBTCxBTCxkaXNhcmdhMDEsMjY1MDAwDQoxOTkzLENBTCxBTCx0aW5nbHJvMDEsMjYyNTAwDQoxOTkzLENBTCxBTCx3YWx0b2plMDEsMjUwMDAwDQoxOTkzLENBTCxBTCxncmFoZWpvMDEsMjMwMDAwDQoxOTkzLENBTCxBTCxjdXJ0aWNoMDEsMjIwMDAwDQoxOTkzLENBTCxBTCxmYXJyZWpvMDMsMjAwMDAwDQoxOTkzLENBTCxBTCx2YWxlcmp1MDEsMTkwMDAwDQoxOTkzLENBTCxBTCxvcnRvbmpvMDEsMTYwMDAwDQoxOTkzLENBTCxBTCxsZXdpc3NjMDEsMTQwMDAwDQoxOTkzLENBTCxBTCxzYWxtb3RpMDEsMTI3NTAwDQoxOTkzLENBTCxBTCxidXRjaG1pMDEsMTE1MDAwDQoxOTkzLENBTCxBTCxuaWVsc2plMDEsMTE1MDAwDQoxOTkzLENBTCxBTCxlYXNsZWRhMDEsMTEyNTAwDQoxOTkzLENBTCxBTCxzcHJpbnJ1MDEsMTEyNTAwDQoxOTkzLENBTCxBTCxzbm93anQwMSwxMTAwMDANCjE5OTMsQ0FMLEFMLGFuZGVyYnIwMiwxMDkwMDANCjE5OTMsQ0FMLEFMLGVkbW9uamkwMSwxMDkwMDANCjE5OTMsQ0FMLEFMLGhvbHplbWEwMSwxMDkwMDANCjE5OTMsQ0FMLEFMLGxvdnVsdG8wMSwxMDkwMDANCjE5OTMsQ0FMLEFMLHZhbmJ1dHkwMSwxMDkwMDANCjE5OTMsQ0hBLEFMLG1jZG93amEwMSw0MDAwMDAwDQoxOTkzLENIQSxBTCxiZWxsZ2UwMiwzNjUwMDAwDQoxOTkzLENIQSxBTCxyYWluZXRpMDEsMzUwMDAwMA0KMTk5MyxDSEEsQUwsdGhpZ3BibzAxLDM0MTY2NjcNCjE5OTMsQ0hBLEFMLG1jY2Fza2kwMSwyNTMzMzMzDQoxOTkzLENIQSxBTCxqYWNrc2JvMDEsMjQxMDAwMA0KMTk5MyxDSEEsQUwsam9obnNsYTAzLDIyNjY2NjYNCjE5OTMsQ0hBLEFMLGJ1cmtzZWwwMSwyMDUwMDAwDQoxOTkzLENIQSxBTCxndWlsbG96MDEsMjAwMDAwMA0KMTk5MyxDSEEsQUwsc2F4c3QwMSwxOTc1MDAwDQoxOTkzLENIQSxBTCx2ZW50dXJvMDEsMTg0NTAwMA0KMTk5MyxDSEEsQUwscGFzcXVkYTAxLDE3NTAwMDANCjE5OTMsQ0hBLEFMLGthcmtvcm8wMSwxNTY2NjY3DQoxOTkzLENIQSxBTCx0aG9tYWZyMDQsMTExNTAwMA0KMTk5MyxDSEEsQUwscmFkaW5zYzAxLDEwNTAwMDANCjE5OTMsQ0hBLEFMLGZlcm5hYWwwMSw4NjgzMzMNCjE5OTMsQ0hBLEFMLGdyZWJlY3IwMSw2MzI1MDANCjE5OTMsQ0hBLEFMLHBhbGxkbzAxLDUwMDAwMA0KMTk5MyxDSEEsQUwsY29yYWpvMDEsNDY1MDAwDQoxOTkzLENIQSxBTCxzdGllYmRhMDEsMzAwMDAwDQoxOTkzLENIQSxBTCxsZWFjaHRlMDEsMjYwMDAwDQoxOTkzLENIQSxBTCxjYXJ5Y2gwMSwyNTAwMDANCjE5OTMsQ0hBLEFMLGhlcm5hcm8wMSwxOTUwMDANCjE5OTMsQ0hBLEFMLGFsdmFyd2kwMSwxODAwMDANCjE5OTMsQ0hBLEFMLGh1ZmZtaTAxLDE4MDAwMA0KMTk5MyxDSEEsQUwsbmV3c293YTAxLDE2MDAwMA0KMTk5MyxDSEEsQUwsbWVydWxtYTAxLDE1MDAwMA0KMTk5MyxDSEEsQUwsYmVyZWphMDEsMTA5MDAwDQoxOTkzLENIQSxBTCxtYXJ0aW5vMDEsMTA5MDAwDQoxOTkzLENIQSxBTCxzY2h3YWplMDEsMTA5MDAwDQoxOTkzLENIQSxBTCxib2x0b3JvMDEsMTAwMDAwDQoxOTkzLENMRSxBTCxvamVkYWJvMDEsMTcwMDAwMA0KMTk5MyxDTEUsQUwsYmVsbGVhbDAxLDE2NzUwMDANCjE5OTMsQ0xFLEFMLGJhZXJnY2EwMSwxMzgzMzMzDQoxOTkzLENMRSxBTCxhbG9tYXNhMDIsMTMwMDAwMA0KMTk5MyxDTEUsQUwsZmVybWlmZTAxLDk3NTAwMA0KMTk5MyxDTEUsQUwsaGlsbGdsMDEsOTc1MDAwDQoxOTkzLENMRSxBTCxzY3VkZHNjMDEsNzUwMDAwDQoxOTkzLENMRSxBTCxza2lubmpvMDEsNzUwMDAwDQoxOTkzLENMRSxBTCxsaWxsaWRlMDEsNzI1MDAwDQoxOTkzLENMRSxBTCxwbHVua2VyMDEsNzI1MDAwDQoxOTkzLENMRSxBTCxjb29rZGUwMSw2MTAwMDANCjE5OTMsQ0xFLEFMLG5hZ3ljaDAxLDU0MTY2Nw0KMTk5MyxDTEUsQUwsYmllbGVtaTAxLDUwMDAwMA0KMTk5MyxDTEUsQUwsZXNwaW5hbDAxLDUwMDAwMA0KMTk5MyxDTEUsQUwsbWFydGljYTAyLDUwMDAwMA0KMTk5MyxDTEUsQUwsbG9mdG9rZTAxLDQ1MDAwMA0KMTk5MyxDTEUsQUwscG93ZXJ0ZTAxLDQ1MDAwMA0KMTk5MyxDTEUsQUwsb3J0aXpqdTAxLDM5NTAwMA0KMTk5MyxDTEUsQUwsdHJlYWRqZTAxLDM3NTAwMA0KMTk5MyxDTEUsQUwsc29ycmVwYTAxLDM1MDAwMA0KMTk5MyxDTEUsQUwsaG93YXJ0aDAxLDMyNTAwMA0KMTk5MyxDTEUsQUwsbWVzYWpvMDEsMzI1MDAwDQoxOTkzLENMRSxBTCxsZXdpc21hMDEsMTc1MDAwDQoxOTkzLENMRSxBTCxzbG9jdWhlMDEsMTY1MDAwDQoxOTkzLENMRSxBTCx3aWNrYWtlMDEsMTQ1MDAwDQoxOTkzLENMRSxBTCxqZWZmZXJlMDEsMTQyNTAwDQoxOTkzLENMRSxBTCx0aG9tZWppMDEsMTM1MDAwDQoxOTkzLENMRSxBTCxjbGFya21hMDEsMTMwMDAwDQoxOTkzLENMRSxBTCxncmltc2phMDEsMTI1MDAwDQoxOTkzLENMRSxBTCxwYXJyaWxhMDIsMTI1MDAwDQoxOTkzLENMRSxBTCx5b3VuZ2NsMDEsMTI1MDAwDQoxOTkzLENMRSxBTCxjaHJpc21pMDIsMTIzMDAwDQoxOTkzLENMRSxBTCxraXJieXdhMDEsMTIzMDAwDQoxOTkzLENMRSxBTCxtdXRpc2plMDEsMTEzNTAwDQoxOTkzLENMRSxBTCxkaXBvdGplMDEsMTA5MDAwDQoxOTkzLENMRSxBTCxrcmFtZXRvMDEsMTA5MDAwDQoxOTkzLENMRSxBTCxtbGlja2RhMDEsMTA5MDAwDQoxOTkzLENMRSxBTCxyYW1pcm1hMDIsMTA5MDAwDQoxOTkzLENMRSxBTCx0YXZhcmp1MDEsMTA5MDAwDQoxOTkzLENMRSxBTCx3ZXJ0emJpMDEsMTA5MDAwDQoxOTkzLERFVCxBTCxoZW5uZW1pMDEsNDMzMzMzMw0KMTk5MyxERVQsQUwsZmllbGRjZTAxLDQyNjI1MDANCjE5OTMsREVULEFMLHBoaWxsdG8wMiwzODY2NjY2DQoxOTkzLERFVCxBTCx3aGl0YWxvMDEsMzQzMzMzMw0KMTk5MyxERVQsQUwsbW9vcmVtaTAxLDMzMzMzMzMNCjE5OTMsREVULEFMLHRldHRsbWkwMSwzMzMzMzMzDQoxOTkzLERFVCxBTCxndWxsaWJpMDEsMjMwMDAwMA0KMTk5MyxERVQsQUwsZGVlcnJvMDEsMjA2NjY2Nw0KMTk5MyxERVQsQUwsdHJhbW1hbDAxLDE4Mjc1MDANCjE5OTMsREVULEFMLHdlbGxzZGEwMSwxNDUwMDAwDQoxOTkzLERFVCxBTCxrcnVlZ2JpMDEsMTIwMDAwMA0KMTk5MyxERVQsQUwsZ2xhZGRkYTAxLDExNTAwMDANCjE5OTMsREVULEFMLGdpYnNva2kwMSwxMTAwMDAwDQoxOTkzLERFVCxBTCxmcnltYXRyMDEsNjc1MDAwDQoxOTkzLERFVCxBTCxsZWl0ZW1hMDEsNTAwMDAwDQoxOTkzLERFVCxBTCxib2x0b3RvMDEsNDc1MDAwDQoxOTkzLERFVCxBTCx0aHVybWdhMDEsNDI1MDAwDQoxOTkzLERFVCxBTCxjdXlsZW1pMDEsMjc1MDAwDQoxOTkzLERFVCxBTCxiYXJuZXNrMDEsMjY1MDAwDQoxOTkzLERFVCxBTCxrcmV1dGNoMDEsMjQwMDAwDQoxOTkzLERFVCxBTCxsaXZpbnNjMDEsMjMwMDAwDQoxOTkzLERFVCxBTCxtYWNkb2JvMDEsMjI1MDAwDQoxOTkzLERFVCxBTCxtdW5vem1pMDEsMTgwMDAwDQoxOTkzLERFVCxBTCxkb2hlcmpvMDIsMTcwMDAwDQoxOTkzLERFVCxBTCxraWVseWpvMDEsMTQwMDAwDQoxOTkzLERFVCxBTCxoYWFzZGEwMSwxMzc1MDANCjE5OTMsREVULEFMLGdyb29tYnUwMSwxMjAwMDANCjE5OTMsREVULEFMLGJlcmdtc2UwMSwxMDkwMDANCjE5OTMsREVULEFMLGJvZXZlam8wMSwxMDkwMDANCjE5OTMsREVULEFMLGdvaHJncjAxLDEwOTAwMA0KMTk5MyxERVQsQUwsZ29tZXpjaDAyLDEwOTAwMA0KMTk5MyxLQ0EsQUwsY29uZWRhMDEsNTAwMDAwMA0KMTk5MyxLQ0EsQUwsam95bmV3YTAxLDQ0MDAwMDANCjE5OTMsS0NBLEFMLG1vbnRnamUwMSwzODE2NjY2DQoxOTkzLEtDQSxBTCxtY3JleWtlMDEsMzY2NjY2Nw0KMTk5MyxLQ0EsQUwsZ2FnbmVncjAxLDMzNjY2NjcNCjE5OTMsS0NBLEFMLGJvZGRpbWkwMSwyOTE2NjY3DQoxOTkzLEtDQSxBTCxicmV0dGdlMDEsMjc1MDAwMA0KMTk5MyxLQ0EsQUwsbGluZGpvMDEsMjQwMDAwMA0KMTk5MyxLQ0EsQUwsYXBwaWVrZTAxLDIwMDAwMDANCjE5OTMsS0NBLEFMLGpvc2VmZTAxLDE1MjUwMDANCjE5OTMsS0NBLEFMLGd1YmljbWEwMSwxMjUwMDAwDQoxOTkzLEtDQSxBTCxtYWNmYW1pMDEsMTE3NTAwMA0KMTk5MyxLQ0EsQUwsbWlsbGVrZTAxLDEwOTAwMDANCjE5OTMsS0NBLEFMLGdhcmRubWEwMSwxMDAwMDAwDQoxOTkzLEtDQSxBTCxnb3Jkb3RvMDEsODkwMDAwDQoxOTkzLEtDQSxBTCxnd3lubmNoMDEsNTA1MDAwDQoxOTkzLEtDQSxBTCx3aWxrZWN1MDEsNDAwMDAwDQoxOTkzLEtDQSxBTCxtY3JhZWJyMDEsMzc4NTAwDQoxOTkzLEtDQSxBTCxicm9va2h1MDEsMzUwMDAwDQoxOTkzLEtDQSxBTCxkaXBpbmZyMDEsMzUwMDAwDQoxOTkzLEtDQSxBTCxyYXNtdWRlMDEsMzI1MDAwDQoxOTkzLEtDQSxBTCx3aWxzb2NyMDEsMjQwMDAwDQoxOTkzLEtDQSxBTCxtYXluZWJyMDEsMjI1MDAwDQoxOTkzLEtDQSxBTCxtZWFjaHJ1MDEsMjIwMDAwDQoxOTkzLEtDQSxBTCxob3dhcmRhMDIsMTkzMDAwDQoxOTkzLEtDQSxBTCxwaWNoYWhpMDEsMTgzNTAwDQoxOTkzLEtDQSxBTCxtYWduYW1pMDEsMTUyNTAwDQoxOTkzLEtDQSxBTCxoYW5leWNoMDEsMTM1MDAwDQoxOTkzLEtDQSxBTCxwdWxsaWhhMDEsMTE1MDAwDQoxOTkzLEtDQSxBTCxicmV3ZWJpMDEsMTA5MDAwDQoxOTkzLEtDQSxBTCxjYWRhcmdyMDEsMTA5MDAwDQoxOTkzLEtDQSxBTCxnYWV0dGdhMDEsMTA5MDAwDQoxOTkzLE1JTixBTCxwdWNrZWtpMDEsNTMwMDAwMA0KMTk5MyxNSU4sQUwsaHJiZWtrZTAxLDMxMDAwMDANCjE5OTMsTUlOLEFMLG1hY2tzaDAxLDMwNTAwMDANCjE5OTMsTUlOLEFMLHdpbmZpZGEwMSwyNzAwMDAwDQoxOTkzLE1JTixBTCxhZ3VpbHJpMDEsMjQzMzMzMw0KMTk5MyxNSU4sQUwsaGFycGVicjAxLDI0MDAwMDANCjE5OTMsTUlOLEFMLHRhcGFua2UwMSwyMDAwMDAwDQoxOTkzLE1JTixBTCxndXRocm1hMDEsNzI1MDAwDQoxOTkzLE1JTixBTCxkZXNoYWppMDEsNzAwMDAwDQoxOTkzLE1JTixBTCxoYXJ0bG1pMDEsNjI1MDAwDQoxOTkzLE1JTixBTCxsYXJraWdlMDEsNjAwMDAwDQoxOTkzLE1JTixBTCxlcmlja3NjMDEsNTM1MDAwDQoxOTkzLE1JTixBTCxrbm9ibGNoMDEsNTEwMDAwDQoxOTkzLE1JTixBTCx3aWxsaWNhMDEsNTAwMDAwDQoxOTkzLE1JTixBTCxwYWdsaW1pMDEsNDUwMDAwDQoxOTkzLE1JTixBTCxsZWl1c3NjMDEsMjc1MDAwDQoxOTkzLE1JTixBTCxtdW5venBlMDEsMjUzNjAwDQoxOTkzLE1JTixBTCxidXNocmEwMSwyNTAwMDANCjE5OTMsTUlOLEFMLHdlYnN0bGUwMSwxNzIwMDANCjE5OTMsTUlOLEFMLGhhbGVjaDAxLDEyODAwMA0KMTk5MyxNSU4sQUwscmVib3VqZTAxLDEyODAwMA0KMTk5MyxNSU4sQUwsYmFua3N3aTAxLDEyNjAwMA0KMTk5MyxNSU4sQUwsdHJvbWJtaTAxLDEyNDAwMA0KMTk5MyxNSU4sQUwsbWFob21wYTAxLDEyMzAwMA0KMTk5MyxNSU4sQUwsYnJ1ZXRqdDAxLDEyMTAwMA0KMTk5MyxNSU4sQUwsam9yZ2V0ZTAxLDExOTAwMA0KMTk5MyxNSU4sQUwsY2FzaWFsYTAxLDExNTAwMA0KMTk5MyxNSU4sQUwsbWFrc3VtaTAxLDExMDAwMA0KMTk5MyxNSU4sQUwsYmVja2VyaTAxLDEwOTAwMA0KMTk5MyxNSU4sQUwsZ2FyY2VyaTAxLDEwOTAwMA0KMTk5MyxNSU4sQUwsZ3VhcmRlZDAxLDEwOTAwMA0KMTk5MyxNSU4sQUwsbWVhcmVwYTAxLDEwOTAwMA0KMTk5MyxNSU4sQUwsc3RhaG9zYzAxLDEwOTAwMA0KMTk5MyxNTDQsQUwsaGlndWV0ZTAxLDMyNTAwMDANCjE5OTMsTUw0LEFMLHlvdW50cm8wMSwyNzAwMDAwDQoxOTkzLE1MNCxBTCxzdXJob2JqMDEsMjUzMDAwMA0KMTk5MyxNTDQsQUwsd2VnbWFiaTAxLDIzNzUwMDANCjE5OTMsTUw0LEFMLG5hdmFyamEwMSwyMTAwMDAwDQoxOTkzLE1MNCxBTCx2YXVnaGdyMDEsMTc3NzUwMA0KMTk5MyxNTDQsQUwsZG9yYW5iaTAyLDEzMzMzMzQNCjE5OTMsTUw0LEFMLGJydW5hdG8wMSwxMTAwMDAwDQoxOTkzLE1MNCxBTCxoYW1pbGRhMDIsMTAyNTAwMA0KMTk5MyxNTDQsQUwsb3Jvc2NqZTAxLDEwMDAwMDANCjE5OTMsTUw0LEFMLHNwaWVyYmkwMSw3NTAwMDANCjE5OTMsTUw0LEFMLHJlaW1la2UwMSw3MjUwMDANCjE5OTMsTUw0LEFMLGxpc3RhcGEwMSwzNTAwMDANCjE5OTMsTUw0LEFMLHRob25kaTAxLDI1MDAwMA0KMTk5MyxNTDQsQUwsZmV0dGVtaTAxLDI0MDAwMA0KMTk5MyxNTDQsQUwsaGVucnlkbzAxLDIxMjUwMA0KMTk5MyxNTDQsQUwsYm9uZXNyaTAxLDE5MDAwMA0KMTk5MyxNTDQsQUwsZWxkcmVjYTAxLDE3NTAwMA0KMTk5MyxNTDQsQUwsYXVzdGlqaTAyLDE1MDAwMA0KMTk5MyxNTDQsQUwsbmlsc3NkYTAxLDEyMjUwMA0KMTk5MyxNTDQsQUwsbGFtcGt0bzAxLDEyMDAwMA0KMTk5MyxNTDQsQUwsbWNpbnR0aTAxLDEyMDAwMA0KMTk5MyxNTDQsQUwsamFoYWpvMDEsMTE4MDAwDQoxOTkzLE1MNCxBTCxkaWF6YWwwMSwxMTAwMDANCjE5OTMsTUw0LEFMLG1hbGRvY2EwMiwxMTAwMDANCjE5OTMsTUw0LEFMLHN1ZXJvd2kwMSwxMTAwMDANCjE5OTMsTUw0LEFMLGtpZWZlbWEwMSwxMDkwMDANCjE5OTMsTUw0LEFMLGttYWtqbzAxLDEwOTAwMA0KMTk5MyxNTDQsQUwsbGxveWRncjAxLDEwOTAwMA0KMTk5MyxNTDQsQUwsbWllc2ttYTAxLDEwOTAwMA0KMTk5MyxNTDQsQUwsbWlyYW5hbjAxLDEwOTAwMA0KMTk5MyxNTDQsQUwsc2VpdHprZTAxLDEwOTAwMA0KMTk5MyxNTDQsQUwsdmFsZW5qbzAzLDEwOTAwMA0KMTk5MyxOWUEsQUwsdGFydGFkYTAxLDUwNTAwMDANCjE5OTMsTllBLEFMLGtleWppMDEsNDkwMDAwMA0KMTk5MyxOWUEsQUwsb25laWxwYTAxLDM4MzMzMzMNCjE5OTMsTllBLEFMLG1hdHRpZG8wMSwzODIwMDAwDQoxOTkzLE5ZQSxBTCxib2dnc3dhMDEsMjk1MDAwMA0KMTk5MyxOWUEsQUwsaG93ZXN0MDEsMjUwMDAwMA0KMTk5MyxOWUEsQUwsbm9rZXNtYTAxLDI1MDAwMDANCjE5OTMsTllBLEFMLHBlcmV6bWUwMSwyNDUwMDAwDQoxOTkzLE5ZQSxBTCxhYmJvdGppMDEsMjM1MDAwMA0KMTk5MyxOWUEsQUwsb3dlbnNwMDEsMjI1MDAwMA0KMTk5MyxOWUEsQUwsd2l0dG1pMDEsMjE2NjY2Nw0KMTk5MyxOWUEsQUwsZ2FsbGVtaTAxLDE1NzUwMDANCjE5OTMsTllBLEFMLGZhcnJzdDAxLDE1MDAwMDANCjE5OTMsTllBLEFMLHZlbGFycmEwMSwxMDUwMDAwDQoxOTkzLE5ZQSxBTCxzdGFubG1pMDIsNjc1MDAwDQoxOTkzLE5ZQSxBTCxoYWJ5YWpvMDEsNjAwMDAwDQoxOTkzLE5ZQSxBTCxtYWFza2UwMSwyNTUwMDANCjE5OTMsTllBLEFMLGhlYXRvbmUwMSwyNTAwMDANCjE5OTMsTllBLEFMLG1vbnRlcmkwMSwyNTAwMDANCjE5OTMsTllBLEFMLHNhbmRlc2MwMSwyNTAwMDANCjE5OTMsTllBLEFMLGtlbGx5cGEwMywxNjAwMDANCjE5OTMsTllBLEFMLGxleXJpamkwMSwxNTIwMDANCjE5OTMsTllBLEFMLGthbWllc2MwMSwxNTAwMDANCjE5OTMsTllBLEFMLHdpbGxpYmUwMiwxNTAwMDANCjE5OTMsTllBLEFMLHN0YW5rYW4wMSwxMzgwMDANCjE5OTMsTllBLEFMLGpvaG5zamUwMiwxMjUwMDANCjE5OTMsTllBLEFMLG1pbGl0c2EwMSwxMTgwMDANCjE5OTMsTllBLEFMLHdpY2ttYm8wMSwxMTYwMDANCjE5OTMsTllBLEFMLGh1bXBobWkwMSwxMTIwMDANCjE5OTMsTllBLEFMLGhpdGNoc3QwMSwxMDkwMDANCjE5OTMsTllBLEFMLHdpbGxpZ2UwMiwxMDkwMDANCjE5OTMsTllBLEFMLHNpbHZlZGEwMSwxMDkwMA0KMTk5MyxOWUEsQUwsamFtZXNkaTAxLDANCjE5OTMsT0FLLEFMLHNpZXJycnUwMSw0MjAwMDAwDQoxOTkzLE9BSyxBTCxtY2d3aW1hMDEsNDAwMDAwMA0KMTk5MyxPQUssQUwsZWNrZXJkZTAxLDM4MDAwMDANCjE5OTMsT0FLLEFMLGhlbmRlcmkwMSwzNTUwMDAwDQoxOTkzLE9BSyxBTCx3ZWxjaGJvMDEsMzQ1MDAwMA0KMTk5MyxPQUssQUwsd2l0dGJvMDEsMzAzMzMzMw0KMTk5MyxPQUssQUwsc3RlaW50ZTAxLDI4MTUwMDANCjE5OTMsT0FLLEFMLGRhcmxpcm8wMSwyMjUwMDAwDQoxOTkzLE9BSyxBTCxoZW5kZWRhMDEsMjI1MDAwMA0KMTk5MyxPQUssQUwsZGF2aXNzdDAyLDkwMDAwMA0KMTk5MyxPQUssQUwsaG9uZXlyaTAxLDcyNTAwMA0KMTk5MyxPQUssQUwsZG93bnNrZTAxLDY3NTAwMA0KMTk5MyxPQUssQUwsYmxhbmtsYTAyLDYyNzAwMA0KMTk5MyxPQUssQUwsYnJvd25qZTAxLDYyNTAwMA0KMTk5MyxPQUssQUwsc2VpdHprZTAxLDYwMDAwMA0KMTk5MyxPQUssQUwsYm9ldmVqbzAxLDU4NTUwMA0KMTk5MyxPQUssQUwsdmFucG90bzAxLDQ1NDAwMA0KMTk5MyxPQUssQUwsYm9yZGltaTAxLDQwMDAwMA0KMTk5MyxPQUssQUwsZ29zc2FyaTAxLDMyNTAwMA0KMTk5MyxPQUssQUwseW91bmdjdTAxLDMyNTAwMA0KMTk5MyxPQUssQUwscGV0dGlnYTAxLDMwMDAwMA0KMTk5MyxPQUssQUwsaGlsbGVzaDAxLDIxMDAwMA0KMTk5MyxPQUssQUwsYWxkcmVtaTAxLDIwMDAwMA0KMTk5MyxPQUssQUwsaGVtb25zYzAxLDEzMjUwMA0KMTk5MyxPQUssQUwsYnJvc2lzYzAxLDEzMDAwMA0KMTk5MyxPQUssQUwsc2x1c2FqbzAxLDEzMDAwMA0KMTk5MyxPQUssQUwsZm94ZXIwMSwxMjUwMDANCjE5OTMsT0FLLEFMLG5lZWx0cjAxLDEyMDAwMA0KMTk5MyxPQUssQUwsbWVyY2VoZTAxLDExMTAwMA0KMTk5MyxPQUssQUwsYnJpc2NqbzAxLDExMDAwMA0KMTk5MyxPQUssQUwsYWJib3RrdTAxLDEwOTAwMA0KMTk5MyxPQUssQUwsZ2F0ZXNicjAxLDEwOTAwMA0KMTk5MyxPQUssQUwsaGVsZmFlcjAxLDEwOTAwMA0KMTk5MyxPQUssQUwsa2Fyc2FzdDAxLDEwOTAwMA0KMTk5MyxPQUssQUwsbW9obGVtaTAxLDEwOTAwMA0KMTk5MyxPQUssQUwscGFxdWVjcjAxLDEwOTAwMA0KMTk5MyxTRUEsQUwsZ3JpZmZrZTAyLDQxNTAwMDANCjE5OTMsU0VBLEFMLG1hcnRpZWQwMSwzMDE2NjY2DQoxOTkzLFNFQSxBTCxidWhuZWphMDEsMjc3MjUwMA0KMTk5MyxTRUEsQUwsYm9zaW9jaDAxLDI3NTAwMDANCjE5OTMsU0VBLEFMLGpvaG5zcmEwNSwyNjI1MDAwDQoxOTkzLFNFQSxBTCx2YWxsZWRhMDEsMjM2NjY2Nw0KMTk5MyxTRUEsQUwsY2hhcmxubzAxLDIzMzUwMDANCjE5OTMsU0VBLEFMLG9icmllcGUwMywyMTg3NTAwDQoxOTkzLFNFQSxBTCxsZWFyeXRpMDEsMTgwMDAwMA0KMTk5MyxTRUEsQUwsaGFuc29lcjAxLDEyNTAwMDANCjE5OTMsU0VBLEFMLHZpenF1b20wMSwxMTEyNTAwDQoxOTkzLFNFQSxBTCxob2xtYWJyMDEsOTUwMDAwDQoxOTkzLFNFQSxBTCxjb3R0b2hlMDEsOTAwMDAwDQoxOTkzLFNFQSxBTCxmZWxkZW1pMDEsODUwMDAwDQoxOTkzLFNFQSxBTCxzYXNzZW1hMDEsNDc1MDAwDQoxOTkzLFNFQSxBTCxzd2FucnUwMSw0MzUwMDANCjE5OTMsU0VBLEFMLGZsZW1pZGEwMSwzMDAwMDANCjE5OTMsU0VBLEFMLG1hcnRpdGkwMiwyODc1MDANCjE5OTMsU0VBLEFMLGRlbHVjcmkwMSwyNzAwMDANCjE5OTMsU0VBLEFMLGxpdHRvZ3IwMSwyMDAwMDANCjE5OTMsU0VBLEFMLG5lbHNvamUwMSwxOTUwMDANCjE5OTMsU0VBLEFMLHBvd2VsZGUwMSwxNzUwMDANCjE5OTMsU0VBLEFMLGJsb3dlbWkwMSwxNTUwMDANCjE5OTMsU0VBLEFMLGFtYXJhcmkwMSwxMzc1MDANCjE5OTMsU0VBLEFMLGhhc2VsYmkwMSwxMjI1MDANCjE5OTMsU0VBLEFMLG9udGl2c3QwMiwxMTUwMDANCjE5OTMsU0VBLEFMLGNvbnZlamkwMSwxMDkwMDANCjE5OTMsU0VBLEFMLGN1bW1pam8wMSwxMDkwMDANCjE5OTMsU0VBLEFMLGhhbXB0bWkwMSwxMDkwMDANCjE5OTMsU0VBLEFMLG5ld2ZpbWEwMSwxMDkwMDANCjE5OTMsU0VBLEFMLHBpcmtsZ3IwMSwxMDkwMDANCjE5OTMsU0VBLEFMLHRpbnNsbGUwMSwxMDkwMDANCjE5OTMsU0VBLEFMLHZpbmFmZTAxLDEwOTAwMA0KMTk5MyxURVgsQUwsY2Fuc2VqbzAxLDQ4MDAwMDANCjE5OTMsVEVYLEFMLHBhbG1lcmEwMSw0NTUwMDAwDQoxOTkzLFRFWCxBTCxoZW5rZXRvMDEsMzc3NzYyNQ0KMTk5MyxURVgsQUwscnlhbm5vMDEsMzc1NzAwMA0KMTk5MyxURVgsQUwsZnJhbmNqdTAxLDMwMDAwMDANCjE5OTMsVEVYLEFMLGxlaWJyY2gwMSwyODMzMzM0DQoxOTkzLFRFWCxBTCxicm93bmtlMDEsMjgwMDAwMA0KMTk5MyxURVgsQUwsbGVlbWEwMiwxOTAwMDAwDQoxOTkzLFRFWCxBTCxsZWZmZWNyMDEsMTEwMDAwMA0KMTk5MyxURVgsQUwscm9nZXJrZTAxLDEwMDAwMDANCjE5OTMsVEVYLEFMLHBhdHRlYm8wMSw4MjUwMDANCjE5OTMsVEVYLEFMLHBldHJhZ2UwMSw2NTAwMDANCjE5OTMsVEVYLEFMLGJ1cm5zdG8wMiw1NzUwMDANCjE5OTMsVEVYLEFMLGdvbnphanUwMyw1MjUwMDANCjE5OTMsVEVYLEFMLHJlZHVzZ2EwMSw1MDAwMDANCjE5OTMsVEVYLEFMLGRhc2NlZG8wMSw0NTAwMDANCjE5OTMsVEVYLEFMLGh1c29uamUwMSwzNjIwMDANCjE5OTMsVEVYLEFMLHJvZHJpaXYwMSwzMDAwMDANCjE5OTMsVEVYLEFMLHBhbG1lZGUwMSwyNzUwMDANCjE5OTMsVEVYLEFMLHJpcGtlYmkwMSwyMDAwMDANCjE5OTMsVEVYLEFMLHJ1c3Nlam8wMiwxNzAwMDANCjE5OTMsVEVYLEFMLGRpYXptYTAxLDE2NTAwMA0KMTk5MyxURVgsQUwsYm9oYW5icjAxLDEzMDAwMA0KMTk5MyxURVgsQUwsZGF2aXNidTAyLDEzMDAwMA0KMTk5MyxURVgsQUwscGF2bGlybzAxLDEzMDAwMA0KMTk5MyxURVgsQUwsd2hpdGVtYTAyLDEzMDAwMA0KMTk5MyxURVgsQUwsc3RyYW5kbzAxLDEyNTAwMA0KMTk5MyxURVgsQUwsaHVsc2VkYTAxLDEyMDAwMA0KMTk5MyxURVgsQUwsZnJ5ZWplMDEsMTE1MDAwDQoxOTkzLFRFWCxBTCxmYWphcmhlMDEsMTEwMDAwDQoxOTkzLFRFWCxBTCxicm9ua2plMDEsMTA5MDAwDQoxOTkzLFRFWCxBTCxnaWxiZTAxLDEwOTAwMA0KMTk5MyxURVgsQUwsbWFudWViYTAxLDEwOTAwMA0KMTk5MyxURVgsQUwsbWF1cmVybzAxLDEwOTAwMA0KMTk5MyxURVgsQUwsbmVucm8wMSwxMDkwMDANCjE5OTMsVEVYLEFMLG9saXZlZGEwMiwxMDkwMDANCjE5OTMsVEVYLEFMLHBlbHRpZGEwMSwxMDkwMDANCjE5OTMsVEVYLEFMLHNtaXRoZGEwNSwxMDkwMDANCjE5OTMsVE9SLEFMLGNhcnRlam8wMSw1NTUwMDAwDQoxOTkzLFRPUixBTCxtb3JyaWphMDIsNTQyNTAwMA0KMTk5MyxUT1IsQUwsYWxvbWFybzAxLDQ5MzMzMzMNCjE5OTMsVE9SLEFMLHN0ZXdhZGEwMSw0MzAwMDAwDQoxOTkzLFRPUixBTCx3aGl0ZWRlMDMsMzY1ODMzMw0KMTk5MyxUT1IsQUwsbW9saXRwYTAxLDM2NTAwMDANCjE5OTMsVE9SLEFMLHdhcmRkdTAxLDMzNTAwMDANCjE5OTMsVE9SLEFMLGJvcmRlcGEwMSwyNTAwMDAwDQoxOTkzLFRPUixBTCxzdG90dHRvMDEsMjMyNTAwMA0KMTk5MyxUT1IsQUwsamFja3NkYTAzLDIxMDAwMDANCjE5OTMsVE9SLEFMLGRheWxla2UwMSwxODAwMDAwDQoxOTkzLFRPUixBTCxvbGVydWpvMDEsMTU2MjUwMA0KMTk5MyxUT1IsQUwsZWljaGhtYTAxLDg1MDAwMA0KMTk5MyxUT1IsQUwsc2Nob2ZkaTAyLDgwMDAwMA0KMTk5MyxUT1IsQUwsY294ZGEwMSw1NTAwMDANCjE5OTMsVE9SLEFMLGNvbGVzZGEwMSw1MDAwMDANCjE5OTMsVE9SLEFMLGdyaWZmYWwwMSw1MDAwMDANCjE5OTMsVE9SLEFMLGd1em1hanUwMSw1MDAwMDANCjE5OTMsVE9SLEFMLHNvam9sdTAxLDI5MDAwMA0KMTk5MyxUT1IsQUwsbGVpdGVhbDAxLDI4NzUwMA0KMTk5MyxUT1IsQUwsdGltbGltaTAxLDI2MjAwMA0KMTk5MyxUT1IsQUwsY2FzdGl0bzAyLDE4NTAwMA0KMTk5MyxUT1IsQUwsaGVudGdwYTAxLDE4MjUwMA0KMTk5MyxUT1IsQUwsc3ByYWdlZDAyLDE4MjUwMA0KMTk5MyxUT1IsQUwsd2FyZHR1MDEsMTYwMDAwDQoxOTkzLFRPUixBTCxrbm9ycnJhMDEsMTEyNTAwDQoxOTkzLFRPUixBTCxicm93c2MwMSwxMDkwMDANCjE5OTMsVE9SLEFMLGJ1dGxlcm8wMSwxMDkwMDANCjE5OTMsVE9SLEFMLGNhbmF0d2kwMSwxMDkwMDANCjE5OTMsVE9SLEFMLGNlZGVuZG8wMSwxMDkwMDANCjE5OTMsVE9SLEFMLGdyZWVuc2gwMSwxMDkwMDANCjE5OTMsVE9SLEFMLG1hcnRpZG8wMiwxMDkwMDANCjE5OTMsVE9SLEFMLHdpbGxpd28wMiwxMDkwMDANCjE5OTMsQVRMLE5MLG1hZGR1Z3IwMSw1ODc1MDAwDQoxOTkzLEFUTCxOTCxnbGF2aXRvMDIsNDkyNTAwMA0KMTk5MyxBVEwsTkwsZ2FudHJvMDEsMzcwMDAwMA0KMTk5MyxBVEwsTkwsc2FuZGVkZTAyLDMxNjY2NjcNCjE5OTMsQVRMLE5MLG5peG9ub3QwMSwyODE1MDAwDQoxOTkzLEFUTCxOTCxzbW9sdGpvMDEsMjcwMDAwMA0KMTk5MyxBVEwsTkwscGVuZGx0ZTAxLDIyNTAwMDANCjE5OTMsQVRMLE5MLGJsYXVzamUwMSwyMDAwMDAwDQoxOTkzLEFUTCxOTCxqdXN0aWRhMDEsMTg3NTAwMA0KMTk5MyxBVEwsTkwsYnJlYW1zaTAxLDE2MDAwMDANCjE5OTMsQVRMLE5MLHNtaXRocGUwMiwxMDI1MDAwDQoxOTkzLEFUTCxOTCxiZXJyeWRhMDEsMTAwMDAwMA0KMTk5MyxBVEwsTkwsaG93ZWxqYTAxLDEwMDAwMDANCjE5OTMsQVRMLE5MLG9sc29uZ3IwMiw5MjUwMDANCjE5OTMsQVRMLE5MLHN0YW50bWkwMiw4NTAwMDANCjE5OTMsQVRMLE5MLGJlbGxpcmEwMSw4MDAwMDANCjE5OTMsQVRMLE5MLGZyZWVtbWEwMiw3MjUwMDANCjE5OTMsQVRMLE5MLG1lcmNra2UwMSw3MjEyNTANCjE5OTMsQVRMLE5MLHBlY290YmkwMSw2NzUwMDANCjE5OTMsQVRMLE5MLGF2ZXJ5c3QwMSw1NjAwMDANCjE5OTMsQVRMLE5MLGxlbWtlbWEwMSw1NTAwMDANCjE5OTMsQVRMLE5MLGJlZHJvc3QwMSw1MDAwMDANCjE5OTMsQVRMLE5MLGh1bnRlYnIwMSwyMDUwMDANCjE5OTMsQVRMLE5MLGNhYnJlZnIwMSwxODE1MDANCjE5OTMsQVRMLE5MLHdvaGxlbWEwMSwxNDAwMDANCjE5OTMsQVRMLE5MLG1pdGNoa2UwMiwxMTQwMDANCjE5OTMsQVRMLE5MLGJvcmJvcGUwMiwxMDkwMDANCjE5OTMsQVRMLE5MLGNhcmFicmEwMSwxMDkwMDANCjE5OTMsQVRMLE5MLGpvbmVzY2gwNiwxMDkwMDANCjE5OTMsQVRMLE5MLGtsZXNrcnkwMSwxMDkwMDANCjE5OTMsQVRMLE5MLGxvcGV6amEwMSwxMDkwMDANCjE5OTMsQVRMLE5MLG1jbWljZ3IwMSwxMDkwMDANCjE5OTMsQVRMLE5MLHRhcmFzdG8wMSwxMDkwMDANCjE5OTMsQ0hOLE5MLHNhbmRicnkwMSw1OTc1MDAwDQoxOTkzLENITixOTCxteWVyc3JhMDEsMzgzMzMzMw0KMTk5MyxDSE4sTkwsZ3V6bWFqbzAxLDM1MDAwMDANCjE5OTMsQ0hOLE5MLGR1bnN0c2gwMSwzMzc1MDAwDQoxOTkzLENITixOTCxtb3JnYW1pMDEsMzM3NTAwMA0KMTk5MyxDSE4sTkwsZ3JhY2VtYTAxLDMxMDAwMDANCjE5OTMsQ0hOLE5MLGJ1ZWNoc3QwMSwyOTAwMDAwDQoxOTkzLENITixOTCxhc3NlbnBhMDEsMjY2NTMzMw0KMTk5MyxDSE4sTkwscGxlc2FkYTAxLDE3MDAwMDANCjE5OTMsQ0hOLE5MLG1hbGRvY2EwMSwxNjUwMDAwDQoxOTkzLENITixOTCxoaWJiYWdyMDEsMTQyNTAwMA0KMTk5MyxDSE4sTkwsc29zYXNhMDEsNzQ1MDAwDQoxOTkzLENITixOTCx3aWxzb3dpMDIsNzAwMDAwDQoxOTkzLENITixOTCxzbWl0aGR3MDEsNjgwMDAwDQoxOTkzLENITixOTCxoYXJrZW1pMDEsMzk3NTAwDQoxOTkzLENITixOTCxtY2VscmNoMDEsMzEyNTAwDQoxOTkzLENITixOTCxsYWtlc3QwMSwyNzUwMDANCjE5OTMsQ0hOLE5MLGNhc3RpZnIwMSwyNTAwMDANCjE5OTMsQ0hOLE5MLHNtaXRoZGEwMiwyNTAwMDANCjE5OTMsQ0hOLE5MLHNjYW5sYm8wMSwyNDUwMDANCjE5OTMsQ0hOLE5MLHZpemNham8wMSwyMzUwMDANCjE5OTMsQ0hOLE5MLHllbGRpZXIwMSwyMjUwMDANCjE5OTMsQ0hOLE5MLG1heWRlMDEsMjEyNTAwDQoxOTkzLENITixOTCx3aWxraXJpMDEsMjEyNTAwDQoxOTkzLENITixOTCxib3NraXNoMDEsMjEwMDAwDQoxOTkzLENITixOTCxzYW5jaHJlMDEsMTgwMDAwDQoxOTkzLENITixOTCxiYXV0aWpvMDEsMTU1MDAwDQoxOTkzLENITixOTCxidWxsaWppMDEsMTQ1MDAwDQoxOTkzLENITixOTCxzaGllbHRvMDEsMTMwMDAwDQoxOTkzLENITixOTCxoZXJuYWpvMDEsMTEwMDAwDQoxOTkzLENITixOTCx0cmFjaHN0MDEsMTA5MDAwDQoxOTkzLENITixOTCx3YWxiZW1hMDEsMTA5MDAwDQoxOTkzLENJTixOTCxsYXJraWJhMDEsNTc1MDAwMA0KMTk5MyxDSU4sTkwscmlqb2pvMDEsNDA4MzMzMw0KMTk5MyxDSU4sTkwscm9iZXJiaTAxLDM5MDAwMDANCjE5OTMsQ0lOLE5MLGJlbGNodGkwMSwzODI1MDAwDQoxOTkzLENJTixOTCxtaXRjaGtlMDEsMzc1MDAwMA0KMTk5MyxDSU4sTkwsc21pbGVqbzAxLDM0NzUwMDANCjE5OTMsQ0lOLE5MLGtlbGx5cm8wMSwzMTMzMzMzDQoxOTkzLENJTixOTCxzYWJvY2gwMSwzMTAwMDAwDQoxOTkzLENJTixOTCxkaWJibHJvMDEsMjUwMDAwMA0KMTk5MyxDSU4sTkwsYnJvd250bzA1LDIyNTAwMDANCjE5OTMsQ0lOLE5MLG1vcnJpaGEwMiwxMjc1MDAwDQoxOTkzLENJTixOTCxvbGl2ZWpvMDEsMTIwMDAwMA0KMTk5MyxDSU4sTkwsY2FkYXJncjAxLDExOTAwMDANCjE5OTMsQ0lOLE5MLHNhbXVlanUwMSw3MDAwMDANCjE5OTMsQ0lOLE5MLG1pbGxpcmEwMSw2MzUwMDANCjE5OTMsQ0lOLE5MLHJlYXJkamUwMSw1MDAwMDANCjE5OTMsQ0lOLE5MLGhlbnJ5ZHcwMSw0NTAwMDANCjE5OTMsQ0lOLE5MLGVzcHljZTAxLDQwMDAwMA0KMTk5MyxDSU4sTkwsaGF0Y2hiaTAxLDQwMDAwMA0KMTk5MyxDSU4sTkwsdmFyc2hnYTAxLDQwMDAwMA0KMTk5MyxDSU4sTkwsZ3JlZ2d0bzAxLDM3NTAwMA0KMTk5MyxDSU4sTkwsc2FuZGVyZTAyLDI3NTAwMA0KMTk5MyxDSU4sTkwsYnJhbnNqZTAxLDE1NzUwMA0KMTk5MyxDSU4sTkwsZm9zdGVzdDAxLDEzNTAwMA0KMTk5MyxDSU4sTkwsYm9vbmVicjAxLDEyMDAwMA0KMTk5MyxDSU4sTkwsaGVybmFjZTAxLDEyMDAwMA0KMTk5MyxDSU4sTkwsYnJ1bWZqYTAxLDExNzUwMA0KMTk5MyxDSU4sTkwscHVnaHRpMDEsMTE1MDAwDQoxOTkzLENJTixOTCxheWFsYWJvMDEsMTEyMDAwDQoxOTkzLENJTixOTCxjb3N0b3RpMDEsMTA5MDAwDQoxOTkzLENJTixOTCxwb3dlbHJvMDEsMTA5MDAwDQoxOTkzLENJTixOTCxydWZmaWpvMDEsMTA5MDAwDQoxOTkzLENJTixOTCx3aWxzb2RhMDEsMTA5MDAwDQoxOTkzLENPTCxOTCxoYXllc2NoMDEsMTMyNTAwMA0KMTk5MyxDT0wsTkwsZ2FsYXJhbjAxLDg1MDAwMA0KMTk5MyxDT0wsTkwscGFycmVqZTAxLDgzNTAwMA0KMTk5MyxDT0wsTkwsYmljaGVkYTAxLDczNTAwMA0KMTk5MyxDT0wsTkwsY2xhcmtqZTAxLDY5MDAwMA0KMTk5MyxDT0wsTkwsZ2lyYXJqbzAxLDY3MDAwMA0KMTk5MyxDT0wsTkwsYm9zdG9kYTAxLDU1MDAwMA0KMTk5MyxDT0wsTkwscnVmZmlicjAxLDU1MDAwMA0KMTk5MyxDT0wsTkwsY29sZWFsMDEsMzUwMDAwDQoxOTkzLENPTCxOTCx3YXluZWdhMDEsMzI1MDAwDQoxOTkzLENPTCxOTCx5b3VuZ2dlMDIsMzEwMDAwDQoxOTkzLENPTCxOTCxzbWl0aGJyMDEsMjUwMDAwDQoxOTkzLENPTCxOTCxob2xtZWRhMDEsMjM1MDAwDQoxOTkzLENPTCxOTCxtdXJwaGRhMDUsMjAwMDAwDQoxOTkzLENPTCxOTCxibGFpcndpMDEsMTcyNTAwDQoxOTkzLENPTCxOTCxiZW5hdmZyMDEsMTY3NTAwDQoxOTkzLENPTCxOTCxoZW5yeWJ1MDEsMTUyMDAwDQoxOTkzLENPTCxOTCxhc2hieWFuMDEsMTUwMDAwDQoxOTkzLENPTCxOTCxuaWVkZGEwMSwxNTAwMDANCjE5OTMsQ09MLE5MLGFsZHJlc2MwMSwxNDAwMDANCjE5OTMsQ09MLE5MLGpvbmVzY2gwNSwxNDAwMDANCjE5OTMsQ09MLE5MLHNlYW5lcnUwMSwxMzUwMDANCjE5OTMsQ09MLE5MLGNhc3RpdmkwMiwxMjAwMDANCjE5OTMsQ09MLE5MLHJleW5vYXIwMiwxMjAwMDANCjE5OTMsQ09MLE5MLHNoZWFmZGEwMSwxMjAwMDANCjE5OTMsQ09MLE5MLHdlZGdlZXIwMSwxMjAwMDANCjE5OTMsQ09MLE5MLHlvdW5nZXIwMSwxMjAwMDANCjE5OTMsQ09MLE5MLHNlcnZpc2MwMSwxMTc1MDANCjE5OTMsQ09MLE5MLHJlZWRzdDAxLDExNTAwMA0KMTk5MyxDT0wsTkwsdGF0dW1qaTAxLDExMjAwMA0KMTk5MyxDT0wsTkwsbGVza2FjdTAxLDEwOTAwMA0KMTk5MyxDT0wsTkwsb3dlbnNqYTAyLDEwOTAwMA0KMTk5MyxDT0wsTkwscGFpbnRsYTAxLDEwOTAwMA0KMTk5MyxGTE8sTkwsaGFydmVicjAxLDQyMjUwMDANCjE5OTMsRkxPLE5MLHNhbnRpYmUwMSwzNDAwMDAwDQoxOTkzLEZMTyxOTCxkZXN0cm9yMDEsMjAwMDAwMA0KMTk5MyxGTE8sTkwsZmVsaXhqdTAxLDEyNTAwMDANCjE5OTMsRkxPLE5MLHdlaXNzd2EwMSw5MjUwMDANCjE5OTMsRkxPLE5MLG1hZ2FkZGEwMSw5MDAwMDANCjE5OTMsRkxPLE5MLGFybXN0amEwMSw4NTQ1NDUNCjE5OTMsRkxPLE5MLGhvdWdoY2gwMSw4MDAwMDANCjE5OTMsRkxPLE5MLGFxdWlubHUwMSw3MzUwMDANCjE5OTMsRkxPLE5MLGNhcnBlY3IwMSw3MjUwMDANCjE5OTMsRkxPLE5MLGNvcnNpamkwMSwzNzUwMDANCjE5OTMsRkxPLE5MLGhhbW1vY2gwMSwyNjAwMDANCjE5OTMsRkxPLE5MLGtsaW5ram8wMSwyMDAwMDANCjE5OTMsRkxPLE5MLG1jY2x1Ym8wMSwyMDAwMDANCjE5OTMsRkxPLE5MLGJhcmJlYnIwMSwxOTAwMDANCjE5OTMsRkxPLE5MLGJlcnJvZ2UwMSwxNTAwMDANCjE5OTMsRkxPLE5MLGRlY2tlc3QwMSwxMzgwMDANCjE5OTMsRkxPLE5MLGZhcmlzbW8wMSwxMzYwMDANCjE5OTMsRkxPLE5MLGJvd2VucnkwMSwxMzIwMDANCjE5OTMsRkxPLE5MLHdlYXRoZGEwMSwxMzAwMDANCjE5OTMsRkxPLE5MLGNoaWFtc2MwMSwxMjYwMDANCjE5OTMsRkxPLE5MLGNvbmluamUwMSwxMjUwMDANCjE5OTMsRkxPLE5MLGFyaWFzYWwwMSwxMjMwMDANCjE5OTMsRkxPLE5MLGNhcnJjaDAyLDEyMzAwMA0KMTk5MyxGTE8sTkwsbmF0YWxybzAxLDExODAwMA0KMTk5MyxGTE8sTkwscmFwcHBhMDEsMTE4MDAwDQoxOTkzLEZMTyxOTCxicmlsZWdyMDEsMTA5MDAwDQoxOTkzLEZMTyxOTCxldmVyZWNhMDEsMTA5MDAwDQoxOTkzLEZMTyxOTCxob2ZmbXRyMDEsMTA5MDAwDQoxOTkzLEZMTyxOTCxqb2huc2pvMDcsMTA5MDAwDQoxOTkzLEZMTyxOTCxsZXdpc3JpMDEsMTA5MDAwDQoxOTkzLEZMTyxOTCxwb3Nlc2MwMSwxMDkwMDANCjE5OTMsRkxPLE5MLHJlbnRlcmkwMSwxMDkwMDANCjE5OTMsRkxPLE5MLHdoaXRtZGEwMiwxMDkwMDANCjE5OTMsSE9VLE5MLGRyYWJlZG8wMSw0MjUwMDAwDQoxOTkzLEhPVSxOTCxzd2luZGdyMDEsMzc1MDAwMA0KMTk5MyxIT1UsTkwsY2FtaW5rZTAxLDMxNTAwMDANCjE5OTMsSE9VLE5MLGJpZ2dpY3IwMSwzMDUwMDAwDQoxOTkzLEhPVSxOTCxmaW5sZXN0MDEsMjkwMDAwMA0KMTk5MyxIT1UsTkwsam9uZXNkbzAxLDI1MDAwMDANCjE5OTMsSE9VLE5MLHBvcnR1bWEwMSwyMDk1MDAwDQoxOTkzLEhPVSxOTCxoYXJuaXBlMDEsMTgyNTAwMA0KMTk5MyxIT1UsTkwsaGVybmF4YTAxLDkwMDAwMA0KMTk5MyxIT1UsTkwsY2FuZGFjYTAxLDc3NTAwMA0KMTk5MyxIT1UsTkwsYmFnd2VqZTAxLDY1NTAwMA0KMTk5MyxIT1UsTkwsYmFzc2tlMDEsNjUwMDAwDQoxOTkzLEhPVSxOTCxqYW1lc2NoMDIsNTAwMDAwDQoxOTkzLEhPVSxOTCx1cmliZWpvMDEsNDAwMDAwDQoxOTkzLEhPVSxOTCxnb256YWx1MDEsMzYwMDAwDQoxOTkzLEhPVSxOTCxhbnRob2VyMDEsMzUwMDAwDQoxOTkzLEhPVSxOTCxlZGVuc3RvMDEsMzI1MDAwDQoxOTkzLEhPVSxOTCxraWxlZGEwMSwyNDc1MDANCjE5OTMsSE9VLE5MLGNlZGVuYW4wMSwxNzgwMDANCjE5OTMsSE9VLE5MLHNlcnZhc2MwMSwxNzAwMDANCjE5OTMsSE9VLE5MLHRhdWJlZWQwMSwxNzAwMDANCjE5OTMsSE9VLE5MLGJlbGxlcjAxLDE0NTAwMA0KMTk5MyxIT1UsTkwscGFya2VyaTAxLDE0MDAwMA0KMTk5MyxIT1UsTkwsd2lsbGlicjAxLDE0MDAwMA0KMTk5MyxIT1UsTkwsZG9ubmVjaDAxLDEzNzAwMA0KMTk5MyxIT1UsTkwscmhvZGVrYTAxLDExODAwMA0KMTk5MyxIT1UsTkwscmV5bm9zaDAxLDExMjAwMA0KMTk5MyxIT1UsTkwsam9uZXN0bzAyLDEwOTAwMA0KMTk5MyxIT1UsTkwsanVkZW5qZTAxLDEwOTAwMA0KMTk5MyxMQU4sTkwsaGVyc2hvcjAxLDQzMzMzMzMNCjE5OTMsTEFOLE5MLHN0cmF3ZGEwMSwzODAwMDAwDQoxOTkzLExBTixOTCxjYW5kaXRvMDEsMzY1MDAwMA0KMTk5MyxMQU4sTkwsd2FsbGF0aTAxLDMzNjI1MDANCjE5OTMsTEFOLE5MLGJ1dGxlYnIwMSwzMzMzMzMzDQoxOTkzLExBTixOTCxyZWVkam8wMSwyNTAwMDAwDQoxOTkzLExBTixOTCx3b3JyZXRvMDEsMjQxNjY2Ng0KMTk5MyxMQU4sTkwsZGF2aXNlcjAxLDIwMDAwMDANCjE5OTMsTEFOLE5MLGdyb3Nza2UwMSwxOTY2NjY3DQoxOTkzLExBTixOTCxnb3R0amkwMSwxODAwMDAwDQoxOTkzLExBTixOTCxtYXJ0aXJhMDIsMTc3NTAwMA0KMTk5MyxMQU4sTkwsc255ZGVjbzAyLDE1MDAwMDANCjE5OTMsTEFOLE5MLG1jZG93cm8wMSwxMzUwMDAwDQoxOTkzLExBTixOTCxzaGFycG1pMDEsOTcwMDAwDQoxOTkzLExBTixOTCxoYXJyaWxlMDEsOTAwMDAwDQoxOTkzLExBTixOTCx3ZWJzdG1pMDEsNjAwMDAwDQoxOTkzLExBTixOTCxrYXJyb2VyMDEsNDM1MDAwDQoxOTkzLExBTixOTCxuaWNob3JvMDIsMzUwMDAwDQoxOTkzLExBTixOTCx3aWxzb3N0MDEsMzUwMDAwDQoxOTkzLExBTixOTCxvZmZlcmpvMDEsMzAwMDAwDQoxOTkzLExBTixOTCxoZXJuYWNhMDEsMTc1MDAwDQoxOTkzLExBTixOTCxoYW5zZWRhMDEsMTczMDAwDQoxOTkzLExBTixOTCxncm9zc2tpMDEsMTY1MDAwDQoxOTkzLExBTixOTCxnb29kd3RvMDEsMTQwMDAwDQoxOTkzLExBTixOTCxhc3RhY3BlMDEsMTM2MDAwDQoxOTkzLExBTixOTCxyb2RyaWhlMDIsMTM2MDAwDQoxOTkzLExBTixOTCxwaWF6em1pMDEsMTI2MDAwDQoxOTkzLExBTixOTCxhc2hsZWJpMDEsMTI0MDAwDQoxOTkzLExBTixOTCxib3VybnJhMDEsMTI0MDAwDQoxOTkzLExBTixOTCxtYXJ0aXBlMDIsMTE5MDAwDQoxOTkzLExBTixOTCx0cmxpY3JpMDEsMTEyNTAwDQoxOTkzLExBTixOTCxtb25kZXJhMDEsMTA5MDAwDQoxOTkzLE1PTixOTCxjYWxkZWl2MDEsMzAwMDAwMA0KMTk5MyxNT04sTkwsd2Fsa2VsYTAxLDMwMDAwMDANCjE5OTMsTU9OLE5MLG1hcnRpZGUwMSwyODMzMzMzDQoxOTkzLE1PTixOTCxoaWxsa2UwMSwyMDAwMDAwDQoxOTkzLE1PTixOTCxkZXNoaWRlMDEsMTUzNzUwMA0KMTk5MyxNT04sTkwsZ3Jpc3NtYTAyLDE1MDAwMDANCjE5OTMsTU9OLE5MLGpvbmVzamkwMiw0MDAwMDANCjE5OTMsTU9OLE5MLHdldHRlam8wMSwzMTUwMDANCjE5OTMsTU9OLE5MLG5hYmhvY2gwMSwzMDc1MDANCjE5OTMsTU9OLE5MLHJvamFzbWUwMSwzMDAwMDANCjE5OTMsTU9OLE5MLGFsb3VtbzAxLDIxMDAwMA0KMTk5MyxNT04sTkwsZmFzc2VqZTAxLDE4NzUwMA0KMTk5MyxNT04sTkwsYmFybmVicjAxLDE4MjUwMA0KMTk5MyxNT04sTkwsdmFsZGVzZTAxLDE3MjUwMA0KMTk5MyxNT04sTkwsZmxldGNkYTAxLDE3MDAwMA0KMTk5MyxNT04sTkwsdmFuZGVqbzAyLDE0MjUwMA0KMTk5MyxNT04sTkwsc2hhd2plMDEsMTQwMDAwDQoxOTkzLE1PTixOTCxjaWFuZmFyMDEsMTMwMDAwDQoxOTkzLE1PTixOTCxjb3JkZXdpMDEsMTI2NTAwDQoxOTkzLE1PTixOTCxjb2xicmdyMDEsMTI2MDAwDQoxOTkzLE1PTixOTCxoZXJlZGdpMDEsMTIyMDAwDQoxOTkzLE1PTixOTCxiZXJyeXNlMDEsMTIxMDAwDQoxOTkzLE1PTixOTCxzcGVocnRpMDEsMTE1MDAwDQoxOTkzLE1PTixOTCx3YWx0b2JyMDEsMTE1MDAwDQoxOTkzLE1PTixOTCxib3R0ZWtlMDEsMTEzNTAwDQoxOTkzLE1PTixOTCxsYWtlcnRpMDEsMTEzNTAwDQoxOTkzLE1PTixOTCxzdGFpcm1hMDEsMTEwMDAwDQoxOTkzLE1PTixOTCxyaXNsZWJpMDEsMTA5NTAwDQoxOTkzLE1PTixOTCxib2xpY2ZyMDEsMTA5MDAwDQoxOTkzLE1PTixOTCxjbGFya2phMDEsMTA5MDAwDQoxOTkzLE1PTixOTCxmbG95ZGNsMDEsMTA5MDAwDQoxOTkzLE1PTixOTCxmcmF6aWxvMDEsMTA5MDAwDQoxOTkzLE1PTixOTCxnYXJkaW1pMDEsMTA5MDAwDQoxOTkzLE1PTixOTCxsYW5zaW1pMDEsMTA5MDAwDQoxOTkzLE1PTixOTCxydWV0ZWtpMDEsMTA5MDAwDQoxOTkzLE1PTixOTCxzaWRkYWpvMDEsMTA5MDAwDQoxOTkzLE1PTixOTCx3aGl0ZWRlMDQsMTA5MDAwDQoxOTkzLE1PTixOTCx3aGl0ZXJvMDIsMTA5MDAwDQoxOTkzLE1PTixOTCx3b29kdGUwMSwxMDkwMDANCjE5OTMsTllOLE5MLGJvbmlsYm8wMSw2MjAwMDAwDQoxOTkzLE5ZTixOTCxnb29kZWR3MDEsNTkxNjY2Nw0KMTk5MyxOWU4sTkwsZnJhbmNqbzAxLDQwMDAwMDANCjE5OTMsTllOLE5MLG11cnJhZWQwMiwzMzc1MDAwDQoxOTkzLE5ZTixOTCxzYWJlcmJyMDEsMzAwMDAwMA0KMTk5MyxOWU4sTkwsY29sZW12aTAxLDIzMTI1MDANCjE5OTMsTllOLE5MLGZlcm5hdG8wMSwyMzAwMDAwDQoxOTkzLE5ZTixOTCxmZXJuYXNpMDEsMjEwMDAwMA0KMTk5MyxOWU4sTkwsam9obnNobzAxLDIxMDAwMDANCjE5OTMsTllOLE5MLHRhbmFuZnIwMSwxNTAwMDAwDQoxOTkzLE5ZTixOTCxtYWRkdW1pMDEsMTAxMjUwMA0KMTk5MyxOWU4sTkwsaW5uaXNqZTAxLDg1MDAwMA0KMTk5MyxOWU4sTkwsb3JzdWxqbzAxLDY2MDAwMA0KMTk5MyxOWU4sTkwsd2Fsa2VjaDAxLDYzNTAwMA0KMTk5MyxOWU4sTkwsZ2FsbGFkYTAxLDUwMDAwMA0KMTk5MyxOWU4sTkwsb2JyaWVjaDAxLDUwMDAwMA0KMTk5MyxOWU4sTkwsc2Nob3VwZTAxLDIyMDAwMA0KMTk5MyxOWU4sTkwseW91bmdhbjAxLDIwNTAwMA0KMTk5MyxOWU4sTkwsZ2lic29wYTAxLDIwMDAwMA0KMTk5MyxOWU4sTkwsaHVuZGx0bzAxLDE5NTAwMA0KMTk5MyxOWU4sTkwsa2VudGplMDEsMTk1MDAwDQoxOTkzLE5ZTixOTCxyZWVkZGEwMSwxNTgwMDANCjE5OTMsTllOLE5MLG1ja25pamUwMSwxNDYwMDANCjE5OTMsTllOLE5MLGJvZ2FydGkwMSwxMDkwMDANCjE5OTMsTllOLE5MLGRyYXBlbWkwMSwxMDkwMDANCjE5OTMsTllOLE5MLGh1c2tlYnUwMSwxMDkwMDANCjE5OTMsTllOLE5MLGpvbmVzYm8wMywxMDkwMDANCjE5OTMsTllOLE5MLG1hbnpham8wMSwxMDkwMDANCjE5OTMsTllOLE5MLHRlbGdoZGEwMSwxMDkwMDANCjE5OTMsTllOLE5MLHRob21wcnkwMSwxMDkwMDANCjE5OTMsUEhJLE5MLHdpbGxpbWkwMiwzNTAwMDAwDQoxOTkzLFBISSxOTCxkeWtzdGxlMDEsMzA2NjY2Nw0KMTk5MyxQSEksTkwsbXVsaG90ZTAxLDI2NTAwMDANCjE5OTMsUEhJLE5MLGphY2tzZGEwMiwyNjI1MDAwDQoxOTkzLFBISSxOTCxkYXVsdGRhMDEsMjQ2NjY2Nw0KMTk5MyxQSEksTkwsa3J1a2pvMDEsMjQ1MDAwMA0KMTk5MyxQSEksTkwsZHVuY2FtYTAxLDIwMDAwMDANCjE5OTMsUEhJLE5MLHRob21wbWkwMiwxNDc1MDAwDQoxOTkzLFBISSxOTCxpbmNhdnBlMDEsMTA1MDAwMA0KMTk5MyxQSEksTkwsc2NoaWxjdTAxLDEwMjUwMDANCjE5OTMsUEhJLE5MLGpvcmRhcmkwMiwxMDAwMDAwDQoxOTkzLFBISSxOTCxhbmRlcmxhMDIsNzAwMDAwDQoxOTkzLFBISSxOTCxlaXNlbmppMDEsNjc1MDAwDQoxOTkzLFBISSxOTCxob2xsaWRhMDEsNjI1MDAwDQoxOTkzLFBISSxOTCxncmVlbnRvMDEsMzkwMDAwDQoxOTkzLFBISSxOTCx3ZXN0ZGEwMSwzMTUwMDANCjE5OTMsUEhJLE5MLG1vcmFubWkwMSwzMDAwMDANCjE5OTMsUEhJLE5MLGRlbGVvam8wMSwyNzUwMDANCjE5OTMsUEhJLE5MLGNoYW1id2UwMSwyNTAwMDANCjE5OTMsUEhJLE5MLGRlamVzam8wMSwyMDAwMDANCjE5OTMsUEhJLE5MLHJpdmVyYmUwMSwxODUwMDANCjE5OTMsUEhJLE5MLGFtYXJvcnUwMiwxNTAwMDANCjE5OTMsUEhJLE5MLGJlbGxqdTAxLDE1MDAwMA0KMTk5MyxQSEksTkwsYXlyYXVibzAxLDEyNTAwMA0KMTk5MyxQSEksTkwsYmF0aXNraTAxLDEyMjUwMA0KMTk5MyxQSEksTkwscHJhdHR0bzAyLDEyMjUwMA0KMTk5MyxQSEksTkwsZm9zdGVrZTAxLDEwOTAwMA0KMTk5MyxQSEksTkwsZ3JlZW50eTAxLDEwOTAwMA0KMTk5MyxQSEksTkwsbG9uZ210bzAxLDEwOTAwMA0KMTk5MyxQSEksTkwsbXVub3pibzAxLDEwOTAwMA0KMTk5MyxQSEksTkwsd2lsbGltaTAzLDEwOTAwMA0KMTk5MyxQSEksTkwsc3RvY2trZTAxLDEwMDAwMA0KMTk5MyxQSVQsTkwsdmFuc2xhbjAxLDQ5MDAwMDANCjE5OTMsUElULE5MLGJlbGxqYTAxLDI5NzUwMDANCjE5OTMsUElULE5MLHNtaXRoemEwMSwyNzI1MDAwDQoxOTkzLFBJVCxOTCxsYXZhbG1pMDEsMjM1MDAwMA0KMTk5MyxQSVQsTkwsd2Fsa2JvMDEsMjE3NTAwMA0KMTk5MyxQSVQsTkwsYmVsaW5zdDAxLDExNjUwMDANCjE5OTMsUElULE5MLHNsYXVnZG8wMSwxMTE2NjY3DQoxOTkzLFBJVCxOTCxzbWl0aGxvMDEsMTAwMDAwMA0KMTk5MyxQSVQsTkwsY2FuZGVqbzAxLDc2MDAwMA0KMTk5MyxQSVQsTkwsa2luZ2plMDEsNjc1MDAwDQoxOTkzLFBJVCxOTCxwZW5hYWwwMSw2NzUwMDANCjE5OTMsUElULE5MLG1jY2xlbGwwMSw2NTAwMDANCjE5OTMsUElULE5MLG90dG9kYTAxLDUyNTAwMA0KMTk5MyxQSVQsTkwsZm9sZXl0bzAyLDM2MDAwMA0KMTk5MyxQSVQsTkwsdG9tbGlyYTAxLDMyNTAwMA0KMTk5MyxQSVQsTkwsbWVyY2VvcjAxLDMwNTAwMA0KMTk5MyxQSVQsTkwscGFycmlsYTAyLDIwOTAwMA0KMTk5MyxQSVQsTkwsY2xhcmtkYTA1LDE4MDAwMA0KMTk5MyxQSVQsTkwsd2FrZWZ0aTAxLDE1MDAwMA0KMTk5MyxQSVQsTkwsbmVhZ2xkZTAxLDE0MDAwMA0KMTk5MyxQSVQsTkwsZGV3ZXltYTAxLDEyMDAwMA0KMTk5MyxQSVQsTkwsZ2FyY2ljYTAxLDEyMDAwMA0KMTk5MyxQSVQsTkwsY29va2VzdDAxLDExNTAwMA0KMTk5MyxQSVQsTkwsd2VobmVqbzAxLDExNTAwMA0KMTk5MyxQSVQsTkwsbWlub3JibDAxLDExMjAwMA0KMTk5MyxQSVQsTkwsbW9lbGxkZTAxLDExMjAwMA0KMTk5MyxQSVQsTkwsd2FnbmVwYTAxLDExMjAwMA0KMTk5MyxQSVQsTkwsYnVsbGVzYzAxLDExMDgwMA0KMTk5MyxQSVQsTkwsY3VtbWltaTAxLDEwOTAwMA0KMTk5MyxQSVQsTkwsbWFydGlhbDAzLDEwOTAwMA0KMTk5MyxQSVQsTkwsbWljZWxkYTAxLDEwOTAwMA0KMTk5MyxQSVQsTkwscGV0a29tYTAxLDEwOTAwMA0KMTk5MyxQSVQsTkwseW91bmdrZTAxLDEwOTAwMA0KMTk5MyxTRE4sTkwsZ3d5bm50bzAxLDQzMzMzMzMNCjE5OTMsU0ROLE5MLG1jZ3JpZnIwMSw0MzAwMDAwDQoxOTkzLFNETixOTCxzaGVmZmdhMDEsMzExMDAwMA0KMTk5MyxTRE4sTkwsaHVyc3RicjAxLDMwMDAwMDANCjE5OTMsU0ROLE5MLGJlbmVzYW4wMSwyMDUwMDAwDQoxOTkzLFNETixOTCxoYXJyaWdyMDIsMjAyNTAwMA0KMTk5MyxTRE4sTkwsc3RpbGxrdTAxLDE3NTAwMDANCjE5OTMsU0ROLE5MLHRldWZldGkwMSw3NjI1MDANCjE5OTMsU0ROLE5MLHdoaXRld2EwMiw0ODc1MDANCjE5OTMsU0ROLE5MLG1hc29ucm8wMSwzMDAwMDANCjE5OTMsU0ROLE5MLHNjaW9zbWkwMSwzMDAwMDANCjE5OTMsU0ROLE5MLHJvZHJpcmkwMiwyNjUwMDANCjE5OTMsU0ROLE5MLHBsYW50cGgwMSwyNDUwMDANCjE5OTMsU0ROLE5MLGJlbGxkZTAxLDE2NTAwMA0KMTk5MyxTRE4sTkwsaGFycmlnZTAxLDE1NTAwMA0KMTk5MyxTRE4sTkwsc2VtaW5mcjAxLDE1MDAwMA0KMTk5MyxTRE4sTkwsc2hpcGxjcjAxLDE0OTAwMA0KMTk5MyxTRE4sTkwsZWlsYW5kYTAxLDEzNTAwMA0KMTk5MyxTRE4sTkwsd2FsdGVkYTAxLDEzMjUwMA0KMTk5MyxTRE4sTkwsZ2VyZW5ibzAxLDEyNTAwMA0KMTk5MyxTRE4sTkwsc2NvdHR0aTAxLDEyNTAwMA0KMTk5MyxTRE4sTkwsY2xhcmtwaDAyLDEyMjUwMA0KMTk5MyxTRE4sTkwsaGVybmFqZTAyLDEyMjUwMA0KMTk5MyxTRE4sTkwsZ2FyZG5qZTAxLDExMTUwMA0KMTk5MyxTRE4sTkwsYXVzbXVicjAxLDEwOTAwMA0KMTk5MyxTRE4sTkwsYnJvY2FkbzAxLDEwOTAwMA0KMTk5MyxTRE4sTkwsZ29tZXpwYTAxLDEwOTAwMA0KMTk5MyxTRE4sTkwsZ3V0aWVyaTAxLDEwOTAwMA0KMTk5MyxTRE4sTkwsbmlldmVtZTAxLDEwOTAwMA0KMTk5MyxTRE4sTkwsc2FuZGVzYzAyLDEwOTAwMA0KMTk5MyxTRE4sTkwsc2hlcm1kYTAyLDEwOTAwMA0KMTk5MyxTRE4sTkwsdGF5bG9rZTAxLDEwOTAwMA0KMTk5MyxTRE4sTkwsdmVsYXNndTAxLDEwOTAwMA0KMTk5MyxTRE4sTkwsd29ycmV0aTAxLDEwOTAwMA0KMTk5MyxTRk4sTkwsY2xhcmt3aTAyLDQ3NTAwMDANCjE5OTMsU0ZOLE5MLGJvbmRzYmEwMSw0NTE2NjY2DQoxOTkzLFNGTixOTCxzd2lmdGJpMDIsMzMxNjY2Nw0KMTk5MyxTRk4sTkwsbWNnZWV3aTAxLDIzMTI1MDANCjE5OTMsU0ZOLE5MLHdpbGxpbWEwNCwyMjc1MDAwDQoxOTkzLFNGTixOTCxqYWNrc21pMDIsMjI2NjY2Nw0KMTk5MyxTRk4sTkwsYmxhY2tidTAyLDIyNTAwMDANCjE5OTMsU0ZOLE5MLHJpZ2hlZGEwMSwyMjUwMDAwDQoxOTkzLFNGTixOTCx0aG9tcHJvMDEsMTkyNTAwMA0KMTk5MyxTRk4sTkwsYnVya2VqbzAzLDE3MDAwMDANCjE5OTMsU0ZOLE5MLGJyYW50amUwMSwxNTAwMDAwDQoxOTkzLFNGTixOTCxtYXJ0aWRhMDEsMTEwMDAwMA0KMTk5MyxTRk4sTkwsd2lsc290cjAxLDkwMDAwMA0KMTk5MyxTRk4sTkwsbWFud2FraTAxLDc2NTAwMA0KMTk5MyxTRk4sTkwsYmVueml0bzAxLDUwMDAwMA0KMTk5MyxTRk4sTkwscmVlZGplMDIsNDc1MDAwDQoxOTkzLFNGTixOTCxjYXJyZW1hMDEsMzAwMDAwDQoxOTkzLFNGTixOTCxiZWNrcm8wMSwyNTAwMDANCjE5OTMsU0ZOLE5MLGhpY2tlYnIwMSwxODc1MDANCjE5OTMsU0ZOLE5MLGxld2lzZGEwMSwxNzI1MDANCjE5OTMsU0ZOLE5MLGNsYXl0cm8wMSwxNTUwMDANCjE5OTMsU0ZOLE5MLGJlbmphbWkwMSwxNDI1MDANCjE5OTMsU0ZOLE5MLGJ1cmJhZGEwMSwxNDAwMDANCjE5OTMsU0ZOLE5MLGFsbGFuYW4wMSwxMjAwMDANCjE5OTMsU0ZOLE5MLHBhdHRlam8wMSwxMTUwMDANCjE5OTMsU0ZOLE5MLHNjYXJzc3QwMSwxMTUwMDANCjE5OTMsU0ZOLE5MLHJvZ2Vya2UwMiwxMTQwMDANCjE5OTMsU0ZOLE5MLGJydW1tZ3IwMSwxMDkwMDANCjE5OTMsU0ZOLE5MLGh1aXNtcmkwMSwxMDkwMDANCjE5OTMsU0ZOLE5MLG1pbnV0Z2kwMSwxMDkwMDANCjE5OTMsU0ZOLE5MLHBoaWxsanIwMSwxMDkwMDANCjE5OTMsU0xOLE5MLHNtaXRob3owMSwzMDAwMDAwDQoxOTkzLFNMTixOTCxzbWl0aGxlMDIsMjY5MTY2Nw0KMTk5MyxTTE4sTkwsamVmZmVncjAxLDI2NTAwMDANCjE5OTMsU0xOLE5MLHRld2tzYm8wMSwyNjI1MDAwDQoxOTkzLFNMTixOTCxwYWdub3RvMDEsMjU3NTAwMA0KMTk5MyxTTE4sTkwsb3F1ZW5qbzAxLDIwNTAwMDANCjE5OTMsU0xOLE5MLHplaWxldG8wMSwxMDI1MDAwDQoxOTkzLFNMTixOTCxwZXJyeWdlMDEsOTY2NjY3DQoxOTkzLFNMTixOTCxtYWdyYWpvMDEsNzM4MDAwDQoxOTkzLFNMTixOTCxqb3JkYWJyMDEsNzE2NjY3DQoxOTkzLFNMTixOTCxtdXJwaHJvMDEsNjAwMDAwDQoxOTkzLFNMTixOTCx3aGl0ZW1hMDEsNTA4MzMzDQoxOTkzLFNMTixOTCxsYW5jYWxlMDEsMzUwMDAwDQoxOTkzLFNMTixOTCx0aG9tcG1pMDIsMzAwMDAwDQoxOTkzLFNMTixOTCxsYW5rZnJhMDEsMjkwMDAwDQoxOTkzLFNMTixOTCx2aWxsYWhlMDEsMjI1MDAwDQoxOTkzLFNMTixOTCxnaWxrZWJlMDEsMjAwMDAwDQoxOTkzLFNMTixOTCxvbGl2YW9tMDEsMTkwMDAwDQoxOTkzLFNMTixOTCxwZXJlem1pMDEsMTc1MDAwDQoxOTkzLFNMTixOTCxwZW5hZ2UwMSwxNzAwMDANCjE5OTMsU0xOLE5MLGFsaWNlbHUwMSwxNjAwMDANCjE5OTMsU0xOLE5MLGNvcm1pcmgwMSwxNTUwMDANCjE5OTMsU0xOLE5MLG9zYm9yZG8wMSwxNTUwMDANCjE5OTMsU0xOLE5MLHdvb2RzdHIwMSwxNTAwMDANCjE5OTMsU0xOLE5MLGNhbnNlb3owMSwxNDAwMDANCjE5OTMsU0xOLE5MLGJyZXdlcm8wMSwxMjUwMDANCjE5OTMsU0xOLE5MLGFyb2NocmUwMSwxMDkwMDANCjE5OTMsU0xOLE5MLGNyb21ldHIwMSwxMDkwMDANCjE5OTMsU0xOLE5MLHVyYmFudG8wMSwxMDkwMDANCjE5OTMsU0xOLE5MLHdhdHNvYWwwMSwxMDkwMDANCjE5OTQsQkFMLEFMLHJpcGtlY2EwMSw1NTAwMDAwDQoxOTk0LEJBTCxBTCxwYWxtZXJhMDEsNTQwNjYwMw0KMTk5NCxCQUwsQUwsZGV2ZXJtaTAxLDMzNzUwMDANCjE5OTQsQkFMLEFMLGZlcm5hc2kwMSwzMzMzMzMzDQoxOTk0LEJBTCxBTCxhbmRlcmJyMDEsMzA4MzMzMw0KMTk5NCxCQUwsQUwsbWNkb25iZTAxLDI2NzUwMDANCjE5OTQsQkFMLEFMLHNtaXRobGUwMiwyMDI1MDAwDQoxOTk0LEJBTCxBTCxob2lsZWNoMDEsMjAwMDAwMA0KMTk5NCxCQUwsQUwsc2Fib2NoMDEsMjAwMDAwMA0KMTk5NCxCQUwsQUwsYmFpbmVoYTAxLDE5MjUwMDANCjE5OTQsQkFMLEFMLG1jbGVtbWEwMSwxMDAwMDAwDQoxOTk0LEJBTCxBTCxtdXNzaW1pMDEsNzc1MDAwDQoxOTk0LEJBTCxBTCxzbWl0aGxvMDEsNzUwMDAwDQoxOTk0LEJBTCxBTCxtb3llcmphMDEsNzI1MDAwDQoxOTk0LEJBTCxBTCxlaWNoaG1hMDEsNTUwMDAwDQoxOTk0LEJBTCxBTCxnb21lemxlMDIsNTUwMDAwDQoxOTk0LEJBTCxBTCxodWxldHRpMDEsNTUwMDAwDQoxOTk0LEJBTCxBTCxtaWxsc2FsMDEsNTAwMDAwDQoxOTk0LEJBTCxBTCx3aWxsaW1hMDUsMzUwMDAwDQoxOTk0LEJBTCxBTCxwb29sZWppMDIsMjcwMDAwDQoxOTk0LEJBTCxBTCxyaG9kZWFyMDEsMjMwMDAwDQoxOTk0LEJBTCxBTCx0YWNrZWplMDEsMTYyNTAwDQoxOTk0LEJBTCxBTCxoYW1tb2plMDEsMTUwMDAwDQoxOTk0LEJBTCxBTCx2b2lndGphMDEsMTUwMDAwDQoxOTk0LEJBTCxBTCxidWZvcmRhMDEsMTMwMDAwDQoxOTk0LEJBTCxBTCxwZW5uaWJyMDEsMTMwMDAwDQoxOTk0LEJBTCxBTCxjYXJleXBhMDEsMTE1MDAwDQoxOTk0LEJBTCxBTCxvcXVpc21pMDEsMTEyMDAwDQoxOTk0LEJBTCxBTCxiZW5pdGFyMDEsMTA5MDAwDQoxOTk0LEJBTCxBTCxrbGluZ3NjMDEsMTA5MDAwDQoxOTk0LEJBTCxBTCxzbWl0aG1hMDMsMTA5MDAwDQoxOTk0LEJPUyxBTCxjbGVtZXJvMDIsNTE1NTI1MA0KMTk5NCxCT1MsQUwsZGF3c29hbjAxLDQ0MjUwMDANCjE5OTQsQk9TLEFMLHZpb2xhZnIwMSw0MzMzMzM0DQoxOTk0LEJPUyxBTCxncmVlbm1pMDEsMzMyNTAwMA0KMTk5NCxCT1MsQUwsbml4b25vdDAxLDMyNTAwMDANCjE5OTQsQk9TLEFMLHJ1c3NlamUwMSwyOTc1MDAwDQoxOTk0LEJPUyxBTCxkYXJ3aWRhMDEsMjY1MDAwMA0KMTk5NCxCT1MsQUwsaGVza2VqbzAxLDE3NTAwMDANCjE5OTQsQk9TLEFMLGhhcnJpZ3IwMSwxNzI1MDAwDQoxOTk0LEJPUyxBTCxiYW5raHNjMDEsMTQ1MDAwMA0KMTk5NCxCT1MsQUwsdmFsbGVkYTAxLDEyMDAwMDANCjE5OTQsQk9TLEFMLHZhdWdobW8wMSw2NzUwMDANCjE5OTQsQk9TLEFMLGhhdGNoYmkwMSw2NTAwMDANCjE5OTQsQk9TLEFMLGJlcnJ5ZGEwMSw1MDAwMDANCjE5OTQsQk9TLEFMLGNvb3Blc2MwMSw1MDAwMDANCjE5OTQsQk9TLEFMLGZsZXRjc2MwMSw1MDAwMDANCjE5OTQsQk9TLEFMLGZvc3NhdG8wMSw0NzUwMDANCjE5OTQsQk9TLEFMLHZhbGVuam8wMiwzNzAwMDANCjE5OTQsQk9TLEFMLG5hZWhydGkwMSwzMDAwMDANCjE5OTQsQk9TLEFMLHF1YW50cGEwMSwyMzUwMDANCjE5OTQsQk9TLEFMLHNlbGVhYTAxLDE5MDAwMA0KMTk5NCxCT1MsQUwscnlhbmtlMDEsMTgwMDAwDQoxOTk0LEJPUyxBTCx2YWxkZXNlMDEsMTcwMDAwDQoxOTk0LEJPUyxBTCx0cmxpY3JpMDEsMTY1MDAwDQoxOTk0LEJPUyxBTCxyb3dsYXJpMDEsMTQyNTAwDQoxOTk0LEJPUyxBTCxtaW5jaG5hMDEsMTIyMDAwDQoxOTk0LEJPUyxBTCx0aW5zbGxlMDEsMTE5MDAwDQoxOTk0LEJPUyxBTCxibG9zc2dyMDEsMTA5MDAwDQoxOTk0LEJPUyxBTCxyb2RyaWNhMDEsMTA5MDAwDQoxOTk0LEJPUyxBTCx2YW5lZ3RpMDEsMTA5MDAwDQoxOTk0LENBTCxBTCxmaW5sZWNoMDEsMzg3NTAwMA0KMTk5NCxDQUwsQUwsbGFuZ3NtYTAxLDM1NTAwMDANCjE5OTQsQ0FMLEFMLGdhZXR0Z2EwMSwzMDAwMDAwDQoxOTk0LENBTCxBTCxkYXZpc2NoMDEsMjkwMDAwMA0KMTk5NCxDQUwsQUwsbWFncmFqbzAxLDE1MDAwMDANCjE5OTQsQ0FMLEFMLG93ZW5zcDAxLDEyNTAwMDANCjE5OTQsQ0FMLEFMLGphY2tzYm8wMSwxMDAwMDAwDQoxOTk0LENBTCxBTCxncmFoZWpvMDEsOTI1MDAwDQoxOTk0LENBTCxBTCxzbWl0aGR3MDEsNzU1NzE4DQoxOTk0LENBTCxBTCxteWVyc2dyMDEsNzAwMDAwDQoxOTk0LENBTCxBTCxwYXR0ZWJvMDEsNjUwMDAwDQoxOTk0LENBTCxBTCxsZWl0ZW1hMDEsNjAwMDAwDQoxOTk0LENBTCxBTCxzYWxtb3RpMDEsNjAwMDAwDQoxOTk0LENBTCxBTCxodWRsZXJlMDEsNDExMDAwDQoxOTk0LENBTCxBTCxkaXNhcmdhMDEsNDAwMDAwDQoxOTk0LENBTCxBTCxkb3Bzb2pvMDEsNDAwMDAwDQoxOTk0LENBTCxBTCxsZWZmZWNyMDEsNDAwMDAwDQoxOTk0LENBTCxBTCxyZXlub2hhMDEsMjMwMDAwDQoxOTk0LENBTCxBTCxzYW1wZWJpMDEsMjI1MDAwDQoxOTk0LENBTCxBTCxzbm93anQwMSwyMDAwMDANCjE5OTQsQ0FMLEFMLGVhc2xlZGEwMSwxNzAwMDANCjE5OTQsQ0FMLEFMLGJ1dGNobWkwMSwxNjAwMDANCjE5OTQsQ0FMLEFMLGxld2lzc2MwMSwxNTUwMDANCjE5OTQsQ0FMLEFMLGFsbGFuYW4wMSwxNTAwMDANCjE5OTQsQ0FMLEFMLHBlcmV6ZWQwMSwxMzUwMDANCjE5OTQsQ0FMLEFMLHNwcmlucnUwMSwxMjUwMDANCjE5OTQsQ0FMLEFMLHR1cm5lY2gwMSwxMjUwMDANCjE5OTQsQ0FMLEFMLGFuZGVyYnIwMiwxMjAwMDANCjE5OTQsQ0FMLEFMLGVkbW9uamkwMSwxMTc1MDANCjE5OTQsQ0FMLEFMLGFuZGVyZ2EwMSwxMDkwMDANCjE5OTQsQ0FMLEFMLGZhYnJlam8wMSwxMDkwMDANCjE5OTQsQ0FMLEFMLGxlZnR3cGgwMSwxMDkwMDANCjE5OTQsQ0hBLEFMLG1jZG93amEwMSw1MzAwMDAwDQoxOTk0LENIQSxBTCxyYWluZXRpMDEsMzY1MDAwMA0KMTk5NCxDSEEsQUwsdmVudHVybzAxLDM1MDAwMDANCjE5OTQsQ0hBLEFMLHNheHN0MDEsMzQ3NTAwMA0KMTk5NCxDSEEsQUwsdGhvbWFmcjA0LDI3NTUwMDANCjE5OTQsQ0hBLEFMLGpvaG5zbGEwMywyNjY2NjY3DQoxOTk0LENIQSxBTCxhc3NlbnBhMDEsMjYzNzMzNA0KMTk5NCxDSEEsQUwsbWNjYXNraTAxLDIxMzMzMzQNCjE5OTQsQ0hBLEFMLGd1aWxsb3owMSwyMTAwMDAwDQoxOTk0LENIQSxBTCxwYXNxdWRhMDEsMTc1MDAwMA0KMTk5NCxDSEEsQUwsa2Fya29ybzAxLDE0MjkxNjcNCjE5OTQsQ0hBLEFMLHJhZGluc2MwMSwxMTUwMDAwDQoxOTk0LENIQSxBTCxmcmFuY2p1MDEsMTAwMDAwMA0KMTk5NCxDSEEsQUwsZmVybmFhbDAxLDc1ODMzNA0KMTk5NCxDSEEsQUwsamFja3NkYTAzLDc1MDAwMA0KMTk5NCxDSEEsQUwsZ3JlYmVjcjAxLDY2MDAwMA0KMTk5NCxDSEEsQUwsY29yYWpvMDEsNjI1MDAwDQoxOTk0LENIQSxBTCxkZWxlb2pvMDEsNjI1MDAwDQoxOTk0LENIQSxBTCxzYW5kZXNjMDEsMzUwMDAwDQoxOTk0LENIQSxBTCxjb29rZGUwMSwzMjUwMDANCjE5OTQsQ0hBLEFMLGFsdmFyd2kwMSwyODUwMDANCjE5OTQsQ0hBLEFMLGhlcm5hcm8wMSwyNzUwMDANCjE5OTQsQ0hBLEFMLG5ld3Nvd2EwMSwxNzUwMDANCjE5OTQsQ0hBLEFMLGJlcmVqYTAxLDE3MDAwMA0KMTk5NCxDSEEsQUwsc2Nod2FqZTAxLDE1MDAwMA0KMTk5NCxDSEEsQUwsbWFydGlubzAxLDExMjAwMA0KMTk5NCxDSEEsQUwsaGFsbGpvMDIsMTA5MDAwDQoxOTk0LENIQSxBTCxqb2huc2RhMDUsMTA5MDAwDQoxOTk0LENIQSxBTCxsYXZhbG1pMDEsMTA5MDAwDQoxOTk0LENIQSxBTCxjYXJ5Y2gwMSw1MDAwMA0KMTk5NCxDTEUsQUwsbWFydGlkZTAxLDQ1MDAwMDANCjE5OTQsQ0xFLEFMLG11cnJhZWQwMiwzMDAwMDAwDQoxOTk0LENMRSxBTCxiZWxsZWFsMDEsMjc3NTAwMA0KMTk5NCxDTEUsQUwsYmFlcmdjYTAxLDIzNTgzMzMNCjE5OTQsQ0xFLEFMLHZpenF1b20wMSwyMzUwMDAwDQoxOTk0LENMRSxBTCxhbG9tYXNhMDIsMjIwMDAwMA0KMTk5NCxDTEUsQUwsbWFsZG9jYTAxLDE2NTAwMDANCjE5OTQsQ0xFLEFMLGxpbGxpZGUwMSwxMzUwMDAwDQoxOTk0LENMRSxBTCxuYWd5Y2gwMSwxMjQxNjY3DQoxOTk0LENMRSxBTCxuYWJob2NoMDEsOTUwMDAwDQoxOTk0LENMRSxBTCxsb2Z0b2tlMDEsOTI1MDAwDQoxOTk0LENMRSxBTCxmYXJyc3QwMSw5MDAwMDANCjE5OTQsQ0xFLEFMLHNvcnJlcGEwMSw2NzUwMDANCjE5OTQsQ0xFLEFMLHBsdW5rZXIwMSw2MjUwMDANCjE5OTQsQ0xFLEFMLG1lc2FqbzAxLDYwMDAwMA0KMTk5NCxDTEUsQUwsZXNwaW5hbDAxLDQ3NTAwMA0KMTk5NCxDTEUsQUwscGVuYXRvMDEsNDAwMDAwDQoxOTk0LENMRSxBTCxzd2FucnUwMSw0MDAwMDANCjE5OTQsQ0xFLEFMLGdvbnphcmUwMSwzNTAwMDANCjE5OTQsQ0xFLEFMLG1vcnJpamEwMiwzNTAwMDANCjE5OTQsQ0xFLEFMLGNsYXJrbWEwMSwzMjUwMDANCjE5OTQsQ0xFLEFMLHRob21lamkwMSwzMjUwMDANCjE5OTQsQ0xFLEFMLGtpcmJ5d2EwMSwxOTAwMDANCjE5OTQsQ0xFLEFMLGxld2lzbWEwMSwxODI1MDANCjE5OTQsQ0xFLEFMLGFtYXJvcnUwMiwxNjMwMDANCjE5OTQsQ0xFLEFMLG1lcnVsbWEwMSwxNjAwMDANCjE5OTQsQ0xFLEFMLGRpcG90amUwMSwxNDAwMDANCjE5OTQsQ0xFLEFMLHR1cm5lbWEwMSwxMzkwMDANCjE5OTQsQ0xFLEFMLGxldmlzamUwMSwxMjUwMDANCjE5OTQsQ0xFLEFMLHRhdmFyanUwMSwxMTUwMDANCjE5OTQsQ0xFLEFMLGxvcGV6YWwwMiwxMTMwMDANCjE5OTQsQ0xFLEFMLHJhbWlybWEwMiwxMTEwMDANCjE5OTQsQ0xFLEFMLG9nZWFjaDAxLDEwOTAwMA0KMTk5NCxDTEUsQUwscGVycnloZTAxLDEwOTAwMA0KMTk5NCxDTEUsQUwsc2h1ZXlwYTAxLDEwOTAwMA0KMTk5NCxERVQsQUwsZmllbGRjZTAxLDQyMzc1MDANCjE5OTQsREVULEFMLGJlbGNodGkwMSwzNDAwMDAwDQoxOTk0LERFVCxBTCxtb29yZW1pMDEsMzMzMzMzNA0KMTk5NCxERVQsQUwsZGF2aXNlcjAxLDMwMDAwMDANCjE5OTQsREVULEFMLHRyYW1tYWwwMSwzMDAwMDAwDQoxOTk0LERFVCxBTCx3aGl0YWxvMDEsMjc4MzMzMw0KMTk5NCxERVQsQUwsd2VsbHNkYTAxLDI1MDAwMDANCjE5OTQsREVULEFMLGZyeW1hdHIwMSwyNDI1MDAwDQoxOTk0LERFVCxBTCxndWxsaWJpMDEsMjQwMDAwMA0KMTk5NCxERVQsQUwscGhpbGx0bzAyLDIzNjY2NjcNCjE5OTQsREVULEFMLHRldHRsbWkwMSwxODU4MzM0DQoxOTk0LERFVCxBTCxnaWJzb2tpMDEsMTUwMDAwMA0KMTk5NCxERVQsQUwsaGVubmVtaTAxLDEzMzMzMzMNCjE5OTQsREVULEFMLGtydWVnYmkwMSwxMzAwMDAwDQoxOTk0LERFVCxBTCxrcmV1dGNoMDEsMTAwMDAwMA0KMTk5NCxERVQsQUwsYm9ldmVqbzAxLDgwMDAwMA0KMTk5NCxERVQsQUwsZGF2aXNzdDAyLDgwMDAwMA0KMTk5NCxERVQsQUwsY3VydGljaDAxLDYwMDAwMA0KMTk5NCxERVQsQUwsc2FtdWVqdTAxLDQwMDAwMA0KMTk5NCxERVQsQUwsbGl2aW5zYzAxLDM2NTAwMA0KMTk5NCxERVQsQUwsZG9oZXJqbzAyLDM1MDAwMA0KMTk5NCxERVQsQUwsZmVsaXhqdTAxLDM1MDAwMA0KMTk5NCxERVQsQUwsY3V5bGVtaTAxLDI3NTAwMA0KMTk5NCxERVQsQUwsZ2FyZGltaTAxLDE1MDAwMA0KMTk5NCxERVQsQUwsZ3Jvb21idTAxLDE0NzUwMA0KMTk5NCxERVQsQUwsZmxhaGVqbzAxLDE0MDAwMA0KMTk5NCxERVQsQUwsZ29tZXpjaDAyLDE0MDAwMA0KMTk5NCxERVQsQUwsZ29ocmdyMDEsMTM3NTAwDQoxOTk0LERFVCxBTCxiYXV0aWRhMDEsMTI1MDAwDQoxOTk0LERFVCxBTCxiZXJnbXNlMDEsMTIwMDAwDQoxOTk0LERFVCxBTCxsaW1ham8wMSwxMDkwMDANCjE5OTQsS0NBLEFMLGNvbmVkYTAxLDUwMDAwMDANCjE5OTQsS0NBLEFMLGpveW5ld2EwMSw0NjAwMDAwDQoxOTk0LEtDQSxBTCxhcHBpZWtlMDEsMzgwMDAwMA0KMTk5NCxLQ0EsQUwsY29sZW12aTAxLDMzMTI1MDANCjE5OTQsS0NBLEFMLG1vbnRnamUwMSwzMTY2NjY3DQoxOTk0LEtDQSxBTCxnYWduZWdyMDEsMjk2NjY2Nw0KMTk5NCxLQ0EsQUwsZ29yZG90bzAxLDI2MzUwMDANCjE5OTQsS0NBLEFMLG1hY2ZhbWkwMSwyNjAwMDAwDQoxOTk0LEtDQSxBTCxsaW5kam8wMSwyMzUwMDAwDQoxOTk0LEtDQSxBTCxqb3NlZmUwMSwxOTUwMDAwDQoxOTk0LEtDQSxBTCxtY3JhZWJyMDEsMTkwMDAwMA0KMTk5NCxLQ0EsQUwsYmVsaW5zdDAxLDE2MDAwMDANCjE5OTQsS0NBLEFMLGhlbmRlZGEwMSw3NTAwMDANCjE5OTQsS0NBLEFMLG1pbGxla2UwMSw3MDAwMDANCjE5OTQsS0NBLEFMLGd1YmljbWEwMSw2MTAwMDANCjE5OTQsS0NBLEFMLG1heW5lYnIwMSw1MDAwMDANCjE5OTQsS0NBLEFMLGJyb29raHUwMSwzNTAwMDANCjE5OTQsS0NBLEFMLHBpY2hhaGkwMSwyOTUwMDANCjE5OTQsS0NBLEFMLGhvd2FyZGEwMiwyMjAwMDANCjE5OTQsS0NBLEFMLHNodW1wdGUwMSwyMDUwMDANCjE5OTQsS0NBLEFMLGhhbmV5Y2gwMSwxOTMwMDANCjE5OTQsS0NBLEFMLG1hZ25hbWkwMSwxODAwMDANCjE5OTQsS0NBLEFMLGJyZXdlYmkwMSwxNjUwMDANCjE5OTQsS0NBLEFMLGdvb2R3dG8wMSwxNDM1MDANCjE5OTQsS0NBLEFMLGtvc2xva2UwMSwxMzAwMDANCjE5OTQsS0NBLEFMLGhhbWVsYm8wMSwxMTAwMDANCjE5OTQsS0NBLEFMLGdhZXR0Z2EwMSwxMDkwMDANCjE5OTQsTUlOLEFMLHB1Y2tla2kwMSw1MzAwMDAwDQoxOTk0LE1JTixBTCxhZ3VpbHJpMDEsMzI2MDAwMA0KMTk5NCxNSU4sQUwsbWFja3NoMDEsMzI1MDAwMA0KMTk5NCxNSU4sQUwsaHJiZWtrZTAxLDMxMDAwMDANCjE5OTQsTUlOLEFMLHdpbmZpZGEwMSwyNzI1MDAwDQoxOTk0LE1JTixBTCx0YXBhbmtlMDEsMjU3NTAwMA0KMTk5NCxNSU4sQUwsa25vYmxjaDAxLDE2MjUwMDANCjE5OTQsTUlOLEFMLGVyaWNrc2MwMSwxMzI1MDAwDQoxOTk0LE1JTixBTCxndXRocm1hMDEsODc1MDAwDQoxOTk0LE1JTixBTCxtdW5venBlMDEsNTkwMDAwDQoxOTk0LE1JTixBTCxkZXNoYWppMDEsNTc1MDAwDQoxOTk0LE1JTixBTCx3aWxsaWNhMDEsNTAwMDAwDQoxOTk0LE1JTixBTCxjb2xlYWwwMSwzNzUwMDANCjE5OTQsTUlOLEFMLGxlaXVzc2MwMSwyNzUwMDANCjE5OTQsTUlOLEFMLGNhc2lhbGEwMSwxODAwMDANCjE5OTQsTUlOLEFMLHRyb21ibWkwMSwxNzUwMDANCjE5OTQsTUlOLEFMLHJlYm91amUwMSwxNjI1MDANCjE5OTQsTUlOLEFMLG1lYXJlcGEwMSwxNjAwMDANCjE5OTQsTUlOLEFMLGhhbGVjaDAxLDE1MDAwMA0KMTk5NCxNSU4sQUwsbWNjYXJkYTAxLDEzMDAwMA0KMTk5NCxNSU4sQUwsbWFob21wYTAxLDEyNjAwMA0KMTk5NCxNSU4sQUwsZ3VhcmRlZDAxLDEyMDAwMA0KMTk5NCxNSU4sQUwscGFya3NkZTAxLDExNjAwMA0KMTk5NCxNSU4sQUwsd2FsYmVtYTAxLDExNTAwMA0KMTk5NCxNSU4sQUwsYmVja2VyaTAxLDEwOTAwMA0KMTk5NCxNSU4sQUwsZ2FyYWdrZTAxLDEwOTAwMA0KMTk5NCxNSU4sQUwsaG9ja2lkZTAxLDEwOTAwMA0KMTk5NCxNSU4sQUwscHVsaWRjYTAxLDEwOTAwMA0KMTk5NCxNSU4sQUwsc2NodWxlcjAxLDEwOTAwMA0KMTk5NCxNSU4sQUwsc3RldmVkYTAxLDEwOTAwMA0KMTk5NCxNTDQsQUwsaGlndWV0ZTAxLDM1MDAwMDANCjE5OTQsTUw0LEFMLHZhdWdoZ3IwMSwzMDAwMDAwDQoxOTk0LE1MNCxBTCxzdXJob2JqMDEsMjUwMDAwMA0KMTk5NCxNTDQsQUwsbmF2YXJqYTAxLDI0MDAwMDANCjE5OTQsTUw0LEFMLHdlZ21hYmkwMSwyMzc1MDAwDQoxOTk0LE1MNCxBTCxoYW1pbGRhMDIsMTgwMDAwMA0KMTk5NCxNTDQsQUwsYnJ1bmF0bzAxLDExMDAwMDANCjE5OTQsTUw0LEFMLGhhcnBlYnIwMSwxMDAwMDAwDQoxOTk0LE1MNCxBTCxvcm9zY2plMDEsNzc1MDAwDQoxOTk0LE1MNCxBTCxyZWVkam8wMSw3NTAwMDANCjE5OTQsTUw0LEFMLHNlaXR6a2UwMSw2NzUwMDANCjE5OTQsTUw0LEFMLGxpc3RhcGEwMSw1MDAwMDANCjE5OTQsTUw0LEFMLHNjYW5sYm8wMSw1MDAwMDANCjE5OTQsTUw0LEFMLHNwaWVyYmkwMSw0NTAwMDANCjE5OTQsTUw0LEFMLGZldHRlbWkwMSw0MDAwMDANCjE5OTQsTUw0LEFMLGVsZHJlY2EwMSwzNzUwMDANCjE5OTQsTUw0LEFMLGJvbmVzcmkwMSwzNTAwMDANCjE5OTQsTUw0LEFMLGphaGFqbzAxLDIyNjAwMA0KMTk5NCxNTDQsQUwsbmlsc3NkYTAxLDE4MjUwMA0KMTk5NCxNTDQsQUwsaGVucnlkbzAxLDE4MDAwMA0KMTk5NCxNTDQsQUwsd2FyZHR1MDEsMTYwMDAwDQoxOTk0LE1MNCxBTCxsbG95ZGdyMDEsMTUyMDAwDQoxOTk0LE1MNCxBTCxicm9ua2plMDEsMTE0MDAwDQoxOTk0LE1MNCxBTCxtaWVza21hMDEsMTEzMDAwDQoxOTk0LE1MNCxBTCx2YWxlbmpvMDMsMTEzMDAwDQoxOTk0LE1MNCxBTCxkaWF6YWwwMSwxMTIwMDANCjE5OTQsTUw0LEFMLG1pcmFuYW4wMSwxMTIwMDANCjE5OTQsTUw0LEFMLGNpcmlsamUwMSwxMDkwMDANCjE5OTQsTUw0LEFMLGtpZWZlbWEwMSwxMDkwMDANCjE5OTQsTUw0LEFMLG1hdGhlbWkwMSwxMDkwMDANCjE5OTQsTUw0LEFMLG1lcmNlam8wMiwxMDkwMDANCjE5OTQsTllBLEFMLGtleWppMDEsNTM1MDAwMA0KMTk5NCxOWUEsQUwsdGFydGFkYTAxLDQ1NTAwMDANCjE5OTQsTllBLEFMLG1hdHRpZG8wMSw0MDIwMDAwDQoxOTk0LE5ZQSxBTCxvbmVpbHBhMDEsMzg1ODMzNA0KMTk5NCxOWUEsQUwscGVyZXptZTAxLDM0NTAwMDANCjE5OTQsTllBLEFMLG11bGhvdGUwMSwzMzUwMDAwDQoxOTk0LE5ZQSxBTCxib2dnc3dhMDEsMzIwMDAwMA0KMTk5NCxOWUEsQUwsYWJib3RqaTAxLDI3NzUwMDANCjE5OTQsTllBLEFMLG5va2VzbWEwMSwyNTAwMDAwDQoxOTk0LE5ZQSxBTCxob3dlc3QwMSwyMTAwMDAwDQoxOTk0LE5ZQSxBTCxnYWxsZW1pMDEsMTU3NTAwMA0KMTk5NCxOWUEsQUwsaGVybmF4YTAxLDE1MjUwMDANCjE5OTQsTllBLEFMLHBvbG9ubHUwMSwxNTAwMDAwDQoxOTk0LE5ZQSxBTCx2ZWxhcnJhMDEsMTEyNTAwMA0KMTk5NCxOWUEsQUwsa2VsbHlwYTAzLDgxMDAwMA0KMTk5NCxOWUEsQUwsbGV5cmlqaTAxLDc0MjUwMA0KMTk5NCxOWUEsQUwsc3RhbmxtaTAyLDYxMjUwMA0KMTk5NCxOWUEsQUwscGFsbGRvMDEsNTAwMDAwDQoxOTk0LE5ZQSxBTCxib3N0b2RhMDEsNDAwMDAwDQoxOTk0LE5ZQSxBTCxnaWJzb3BhMDEsMjUwMDAwDQoxOTk0LE5ZQSxBTCxyZWFyZGplMDEsMjUwMDAwDQoxOTk0LE5ZQSxBTCxrYW1pZXNjMDEsMjM1MDAwDQoxOTk0LE5ZQSxBTCx3aWxsaWJlMDIsMjI1MDAwDQoxOTk0LE5ZQSxBTCxlbHN0ZWtlMDEsMjAwMDAwDQoxOTk0LE5ZQSxBTCx3aWNrbWJvMDEsMTgwMDAwDQoxOTk0LE5ZQSxBTCx3aWxsaWdlMDIsMTE1MDAwDQoxOTk0LE5ZQSxBTCxoaXRjaHN0MDEsMTEyMDAwDQoxOTk0LE5ZQSxBTCxzaWx2ZWRhMDEsMTEyMDAwDQoxOTk0LE5ZQSxBTCxkYXZpc3J1MDEsMTA5MDAwDQoxOTk0LE9BSyxBTCxoZW5kZXJpMDEsNDgwMDAwMA0KMTk5NCxPQUssQUwsc2llcnJydTAxLDQ3MDAwMDANCjE5OTQsT0FLLEFMLGVja2VyZGUwMSwzODAwMDAwDQoxOTk0LE9BSyxBTCx3ZWxjaGJvMDEsMzQ1MDAwMA0KMTk5NCxPQUssQUwsd2l0dGJvMDEsMzI1MDAwMA0KMTk5NCxPQUssQUwsbWNnd2ltYTAxLDMwMDAwMDANCjE5OTQsT0FLLEFMLHN0ZWludGUwMSwyODAwMDAwDQoxOTk0LE9BSyxBTCxkYXJsaXJvMDEsMjI1MDAwMA0KMTk5NCxPQUssQUwsYm9yZGltaTAxLDEwNTAwMDANCjE5OTQsT0FLLEFMLGphdmllc3QwMSw2NTAwMDANCjE5OTQsT0FLLEFMLGJsYW5rbGEwMiw1NTAwMDANCjE5OTQsT0FLLEFMLGFsZHJlbWkwMSw0MzAwMDANCjE5OTQsT0FLLEFMLG51bmV6ZWQwMSw0MzAwMDANCjE5OTQsT0FLLEFMLHZhbnBvdG8wMSwzOTcwMDANCjE5OTQsT0FLLEFMLG5lZWx0cjAxLDIyNTAwMA0KMTk5NCxPQUssQUwsaGVtb25zYzAxLDIxMDAwMA0KMTk5NCxPQUssQUwsZ2F0ZXNicjAxLDE5MDAwMA0KMTk5NCxPQUssQUwsb250aXZzdDAyLDE3NTAwMA0KMTk5NCxPQUssQUwsYnJvc2lzYzAxLDE2NTAwMA0KMTk5NCxPQUssQUwsYmVycm9nZTAxLDE0MDAwMA0KMTk5NCxPQUssQUwscGFxdWVjcjAxLDE0MDAwMA0KMTk5NCxPQUssQUwsdGF5bG9iaTA0LDEzMjUwMA0KMTk5NCxPQUssQUwsbm9ib2FqdTAxLDEyMDAwMA0KMTk5NCxPQUssQUwsa2Fyc2FzdDAxLDExOTAwMA0KMTk5NCxPQUssQUwsbW9obGVtaTAxLDExNTAwMA0KMTk5NCxPQUssQUwsdm9zYmVlZDAxLDExNTAwMA0KMTk5NCxPQUssQUwsYnJpc2NqbzAxLDExNDAwMA0KMTk5NCxPQUssQUwsaGVsZmFlcjAxLDExMDAwMA0KMTk5NCxPQUssQUwsYWNyZW1hMDEsMTA5MDAwDQoxOTk0LE9BSyxBTCxsZWlwZWRhMDEsMTA5MDAwDQoxOTk0LE9BSyxBTCxyZXllc2NhMDEsMTA5MDAwDQoxOTk0LE9BSyxBTCxyaWdoZWRhMDEsMTA5MDAwDQoxOTk0LE9BSyxBTCxzYXhzdDAxLDEwOTAwMA0KMTk5NCxTRUEsQUwsZ3JpZmZrZTAyLDUxMDAwMDANCjE5OTQsU0VBLEFMLGJ1aG5lamEwMSw0MzUwMDAwDQoxOTk0LFNFQSxBTCxib3Npb2NoMDEsNDAwMDAwMA0KMTk5NCxTRUEsQUwsam9obnNyYTA1LDMzMjUwMDANCjE5OTQsU0VBLEFMLG1hcnRpZWQwMSwzMzE2NjY3DQoxOTk0LFNFQSxBTCxoaWJiYWdyMDEsMTI1MDAwMA0KMTk5NCxTRUEsQUwsYW50aG9lcjAxLDExMDAwMDANCjE5OTQsU0VBLEFMLGZlcm1pZmUwMSwxMDAwMDAwDQoxOTk0LFNFQSxBTCxzYXNzZW1hMDEsNTg1MDAwDQoxOTk0LFNFQSxBTCxmbGVtaWRhMDEsNTA1MDAwDQoxOTk0LFNFQSxBTCxtYXJ0aXRpMDIsNTAwMDAwDQoxOTk0LFNFQSxBTCxwb3dlcnRlMDEsNTAwMDAwDQoxOTk0LFNFQSxBTCxyb2RyaWFsMDEsNDQyMzMzDQoxOTk0LFNFQSxBTCxibG93ZW1pMDEsMzAwMDAwDQoxOTk0LFNFQSxBTCxuZWxzb2plMDEsMjUwMDAwDQoxOTk0LFNFQSxBTCxzb2pvbHUwMSwyNTAwMDANCjE5OTQsU0VBLEFMLGplZmZlcmUwMSwyNDAwMDANCjE5OTQsU0VBLEFMLGFtYXJhcmkwMSwyMzI1MDANCjE5OTQsU0VBLEFMLHRoaWdwYm8wMSwyMDAwMDANCjE5OTQsU0VBLEFMLGF5YWxhYm8wMSwxODAwMDANCjE5OTQsU0VBLEFMLGhhc2VsYmkwMSwxNzUwMDANCjE5OTQsU0VBLEFMLGxvdnVsdG8wMSwxNjUwMDANCjE5OTQsU0VBLEFMLHdpbHNvZGEwMSwxNDAwMDANCjE5OTQsU0VBLEFMLG1pdGNoa2UwMiwxMjUwMDANCjE5OTQsU0VBLEFMLHR1cmFuYnIwMSwxMTYwMDANCjE5OTQsU0VBLEFMLGN1bW1pam8wMSwxMTQwMDANCjE5OTQsU0VBLEFMLG5ld2ZpbWEwMSwxMTIwMDANCjE5OTQsU0VBLEFMLHJpc2xlYmkwMSwxMTAwMDANCjE5OTQsU0VBLEFMLGNvbnZlamkwMSwxMDkwMDANCjE5OTQsU0VBLEFMLGRhcndpamUwMSwxMDkwMDANCjE5OTQsU0VBLEFMLGRhdmlzdGkwMSwxMDkwMDANCjE5OTQsU0VBLEFMLGtpbmdrZTAxLDEwOTAwMA0KMTk5NCxTRUEsQUwscGlya2xncjAxLDEwOTAwMA0KMTk5NCxURVgsQUwsY2Fuc2VqbzAxLDUxMDAwMDANCjE5OTQsVEVYLEFMLGJyb3dua2UwMSw0MjI1MDAwDQoxOTk0LFRFWCxBTCxjbGFya3dpMDIsMzg3NTk3Mg0KMTk5NCxURVgsQUwsaGVua2V0bzAxLDM3NTI2MjUNCjE5OTQsVEVYLEFMLGdvbnphanUwMywzNDAwMDAwDQoxOTk0LFRFWCxBTCxyb2dlcmtlMDEsMjMwMDAwMA0KMTk5NCxURVgsQUwsbGVlbWEwMiwxMzAwMDAwDQoxOTk0LFRFWCxBTCxhcm1zdGphMDEsMTE1MDAwMA0KMTk5NCxURVgsQUwsY2FycGVjcjAxLDEwMDAwMDANCjE5OTQsVEVYLEFMLGhvbmV5cmkwMSw5MDAwMDANCjE5OTQsVEVYLEFMLGhvd2VsamEwMSw4MDUwMDANCjE5OTQsVEVYLEFMLHJvZHJpaXYwMSw1MjAwMDANCjE5OTQsVEVYLEFMLGphbWVzY2gwMiw1MDAwMDANCjE5OTQsVEVYLEFMLHJlZHVzZ2EwMSw1MDAwMDANCjE5OTQsVEVYLEFMLHBhbG1lZGUwMSw0NzUwMDANCjE5OTQsVEVYLEFMLG9ydGl6anUwMSwzNTAwMDANCjE5OTQsVEVYLEFMLGh1c29uamUwMSwzNDAwMDANCjE5OTQsVEVYLEFMLGR1Y2V5cm8wMSwyNzUwMDANCjE5OTQsVEVYLEFMLHBhdmxpcm8wMSwyMzc1MDANCjE5OTQsVEVYLEFMLHN0cmFuZG8wMSwyMjUwMDANCjE5OTQsVEVYLEFMLGh1bHNlZGEwMSwyMTAwMDANCjE5OTQsVEVYLEFMLHJpcGtlYmkwMSwyMDAwMDANCjE5OTQsVEVYLEFMLHdoaXRlbWEwMiwxNjUwMDANCjE5OTQsVEVYLEFMLGJvaGFuYnIwMSwxNDUwMDANCjE5OTQsVEVYLEFMLGJlbHRyZXMwMSwxMzAwMDANCjE5OTQsVEVYLEFMLGRyZXllc3QwMSwxMTg1MDANCjE5OTQsVEVYLEFMLGZyeWVqZTAxLDExNTAwMA0KMTk5NCxURVgsQUwsZ2lsYmUwMSwxMTE1MDANCjE5OTQsVEVYLEFMLHNoYXZlam8wMSwxMTE1MDANCjE5OTQsVEVYLEFMLGdyZWVycnUwMSwxMDkwMDANCjE5OTQsVEVYLEFMLGh1cnN0amEwMSwxMDkwMDANCjE5OTQsVEVYLEFMLG9saXZlZGEwMiwxMDkwMDANCjE5OTQsVEVYLEFMLHNtaXRoZGEwNSwxMDkwMDANCjE5OTQsVE9SLEFMLGNhcnRlam8wMSw1NTUwMDAwDQoxOTk0LFRPUixBTCxhbG9tYXJvMDEsNTQzMzMzNA0KMTk5NCxUT1IsQUwsc3Rld2FkYTAxLDQyNTAwMDANCjE5OTQsVE9SLEFMLG1vbGl0cGEwMSw0MDI1MDAwDQoxOTk0LFRPUixBTCx3YXJkZHUwMSw0MDAwMDAwDQoxOTk0LFRPUixBTCxvbGVydWpvMDEsMzc1MDAwMA0KMTk5NCxUT1IsQUwsd2hpdGVkZTAzLDMxMzMzMzQNCjE5OTQsVE9SLEFMLGJvcmRlcGEwMSwyNTAwMDAwDQoxOTk0LFRPUixBTCxzdG90dHRvMDEsMjQxNTAwMA0KMTk5NCxUT1IsQUwsZ3V6bWFqdTAxLDEwMDAwMDANCjE5OTQsVE9SLEFMLG1vcnJpamEwMiwxMDAwMDAwDQoxOTk0LFRPUixBTCxjb3hkYTAxLDgwMDAwMA0KMTk5NCxUT1IsQUwsc2Nob2ZkaTAyLDY0MDAwMA0KMTk5NCxUT1IsQUwsbGVpdGVhbDAxLDU2NTAwMA0KMTk5NCxUT1IsQUwsY2FkYXJncjAxLDU1MDAwMA0KMTk5NCxUT1IsQUwsaGVudGdwYTAxLDU1MDAwMA0KMTk5NCxUT1IsQUwsdGltbGltaTAxLDUxMDAwMA0KMTk5NCxUT1IsQUwsY29sZXNkYTAxLDUwMDAwMA0KMTk5NCxUT1IsQUwsc3ByYWdlZDAyLDUwMDAwMA0KMTk5NCxUT1IsQUwsY2FzdGl0bzAyLDQzNzUwMA0KMTk5NCxUT1IsQUwsaHVmZm1pMDEsMjIyMDAwDQoxOTk0LFRPUixBTCxrbm9ycnJhMDEsMTcwMDAwDQoxOTk0LFRPUixBTCx3aWxsaXdvMDIsMTUwMDAwDQoxOTk0LFRPUixBTCxjZWRlbmRvMDEsMTIyNTAwDQoxOTk0LFRPUixBTCxicm93c2MwMSwxMTUwMDANCjE5OTQsVE9SLEFMLGRlbGdhY2EwMSwxMDkwMDANCjE5OTQsVE9SLEFMLGdvbnphYWwwMSwxMDkwMDANCjE5OTQsVE9SLEFMLGdyZWVuc2gwMSwxMDkwMDANCjE5OTQsVE9SLEFMLHBlcmV6cm8wMSwxMDkwMDANCjE5OTQsVE9SLEFMLHNwb2xqcGEwMSwxMDkwMDANCjE5OTQsQVRMLE5MLGdhbnRybzAxLDU1MDAwMDANCjE5OTQsQVRMLE5MLG1hZGR1Z3IwMSw0OTc1MDAwDQoxOTk0LEFUTCxOTCxnbGF2aXRvMDIsNDc1MDAwMA0KMTk5NCxBVEwsTkwsbWNncmlmcjAxLDM3NzUwMDANCjE5OTQsQVRMLE5MLGJsYXVzamUwMSwzNzUwMDAwDQoxOTk0LEFUTCxOTCxzYW5kZWRlMDIsMzYzMjUxMw0KMTk5NCxBVEwsTkwsc21vbHRqbzAxLDMyNTAwMDANCjE5OTQsQVRMLE5MLGp1c3RpZGEwMSwzMjAwMDAwDQoxOTk0LEFUTCxOTCxwZW5kbHRlMDEsMzIwMDAwMA0KMTk5NCxBVEwsTkwsYXZlcnlzdDAxLDI4MDAwMDANCjE5OTQsQVRMLE5MLG9sc29uZ3IwMSwxOTAwMDAwDQoxOTk0LEFUTCxOTCxzdGFudG1pMDIsMTQwMDAwMA0KMTk5NCxBVEwsTkwsbWVyY2trZTAxLDEyMzc1MDANCjE5OTQsQVRMLE5MLGxlbWtlbWEwMSwxMTAwMDAwDQoxOTk0LEFUTCxOTCxiZWxsaXJhMDEsODAwMDAwDQoxOTk0LEFUTCxOTCxiZWRyb3N0MDEsNzUwMDAwDQoxOTk0LEFUTCxOTCxnYWxsYWRhMDEsNzM1MDAwDQoxOTk0LEFUTCxOTCxwZWNvdGJpMDEsNTc1MDAwDQoxOTk0LEFUTCxOTCxvYnJpZWNoMDEsNTUwMDAwDQoxOTk0LEFUTCxOTCxtY21pY2dyMDEsMjQ1MDAwDQoxOTk0LEFUTCxOTCx3b2hsZW1hMDEsMTgwMDAwDQoxOTk0LEFUTCxOTCxoaWxsbWkwMSwxNTgwMDANCjE5OTQsQVRMLE5MLGJpZWxlbWkwMSwxNTAwMDANCjE5OTQsQVRMLE5MLGtsZXNrcnkwMSwxMTE1MDANCjE5OTQsQVRMLE5MLGxvcGV6amEwMSwxMTE1MDANCjE5OTQsQVRMLE5MLHRhcmFzdG8wMSwxMTE1MDANCjE5OTQsQVRMLE5MLGpvbmVzY2gwNiwxMDkwMDANCjE5OTQsQVRMLE5MLGtlbGx5bWkwMiwxMDkwMDANCjE5OTQsQVRMLE5MLG1vcmRlbWkwMSwxMDkwMDANCjE5OTQsQVRMLE5MLG9saXZham8wMSwxMDkwMDANCjE5OTQsQ0hOLE5MLHNhbmRicnkwMSw1OTc1MDAwDQoxOTk0LENITixOTCxncmFjZW1hMDEsNDQwMDAwMA0KMTk5NCxDSE4sTkwsbXllcnNyYTAxLDM2MzMzMzMNCjE5OTQsQ0hOLE5MLGd1em1ham8wMSwzNTAwMDAwDQoxOTk0LENITixOTCxtb3JnYW1pMDEsMzM3NTAwMA0KMTk5NCxDSE4sTkwsc29zYXNhMDEsMjk1MDAwMA0KMTk5NCxDSE4sTkwsYnVlY2hzdDAxLDI1NTAwMDANCjE5OTQsQ0hOLE5MLGR1bnN0c2gwMSwyMzc1MDAwDQoxOTk0LENITixOTCxwbGVzYWRhMDEsMTcwMDAwMA0KMTk5NCxDSE4sTkwsaGlsbGdsMDEsMTAwMDAwMA0KMTk5NCxDSE4sTkwsYmF1dGlqbzAxLDcxMDAwMA0KMTk5NCxDSE4sTkwsd2lsc293aTAyLDcwMDAwMA0KMTk5NCxDSE4sTkwsd2lsa2lyaTAxLDM1MDAwMA0KMTk5NCxDSE4sTkwsYm9za2lzaDAxLDMwMDAwMA0KMTk5NCxDSE4sTkwsbWF5ZGUwMSwzMDAwMDANCjE5OTQsQ0hOLE5MLHBhcmVubWEwMSwyNjAwMDANCjE5OTQsQ0hOLE5MLHlvdW5nYW4wMSwyMzAwMDANCjE5OTQsQ0hOLE5MLGNhc3RpZnIwMSwyMjUwMDANCjE5OTQsQ0hOLE5MLHNhbmNocmUwMSwyMjUwMDANCjE5OTQsQ0hOLE5MLGJhbmtzd2kwMSwxOTAwMDANCjE5OTQsQ0hOLE5MLHZlcmVzcmEwMSwxNjAwMDANCjE5OTQsQ0hOLE5MLGJ1bGxpamkwMSwxNTAwMDANCjE5OTQsQ0hOLE5MLHJob2Rla2EwMSwxNDUwMDANCjE5OTQsQ0hOLE5MLGhlcm5ham8wMSwxMTIwMDANCjE5OTQsQ0hOLE5MLHRyYWNoc3QwMSwxMTIwMDANCjE5OTQsQ0hOLE5MLHdlbmRldHUwMSwxMTIwMDANCjE5OTQsQ0hOLE5MLHphbWJyZWQwMSwxMTIwMDANCjE5OTQsQ0hOLE5MLGZvc3Rla2UwMSwxMDkwMDANCjE5OTQsQ0hOLE5MLGhhbmV5dG8wMSwxMDkwMDANCjE5OTQsQ0hOLE5MLGhvbGxpamUwMSwxMDkwMDANCjE5OTQsQ0hOLE5MLGlsc2xlYmwwMSwxMDkwMDANCjE5OTQsQ0lOLE5MLHNtaWxlam8wMSw0OTc1MDAwDQoxOTk0LENJTixOTCxsYXJraWJhMDEsNDQwMDAwMA0KMTk5NCxDSU4sTkwscmlqb2pvMDEsMzk3NTAwMA0KMTk5NCxDSU4sTkwsYnJvd250bzA1LDM3NTAwMDANCjE5OTQsQ0lOLE5MLG1pdGNoa2UwMSwzNzUwMDAwDQoxOTk0LENJTixOTCxrZWxseXJvMDEsMzEzMzMzMw0KMTk5NCxDSU4sTkwsaGFuc29lcjAxLDI3MDAwMDANCjE5OTQsQ0lOLE5MLG9saXZlam8wMSwyNTAwMDAwDQoxOTk0LENJTixOTCxkaWJibHJvMDEsMjQ1MDAwMA0KMTk5NCxDSU4sTkwsbW9ycmloYTAyLDIxNTAwMDANCjE5OTQsQ0lOLE5MLGJyYW50amUwMSwxNTAwMDAwDQoxOTk0LENJTixOTCxzYW5kZXJlMDIsOTI1MDAwDQoxOTk0LENJTixOTCxmZXJuYXRvMDEsNzg3NTAwDQoxOTk0LENJTixOTCxob3dhcnRoMDEsNTc1MDAwDQoxOTk0LENJTixOTCxtY2VscmNoMDEsNTQwMDAwDQoxOTk0LENJTixOTCxoYXJyaWxlMDEsNDUwMDAwDQoxOTk0LENJTixOTCx3YWx0b2plMDEsMzUwMDAwDQoxOTk0LENJTixOTCxkZWx1Y3JpMDEsMjQwMDAwDQoxOTk0LENJTixOTCxicmFuc2plMDEsMTkwMDAwDQoxOTk0LENJTixOTCxib29uZWJyMDEsMTc1MDAwDQoxOTk0LENJTixOTCxicnVtZmphMDEsMTcwMDAwDQoxOTk0LENJTixOTCxkb3JzZWJyMDEsMTcwMDAwDQoxOTk0LENJTixOTCxwdWdodGkwMSwxNzAwMDANCjE5OTQsQ0lOLE5MLGZvc3Rlc3QwMSwxMzUwMDANCjE5OTQsQ0lOLE5MLGdyZWVud2kwMSwxMjUwMDANCjE5OTQsQ0lOLE5MLHNlcnZpc2MwMSwxMjUwMDANCjE5OTQsQ0lOLE5MLHJ1ZmZpam8wMSwxMTUwMDANCjE5OTQsQ0lOLE5MLGNhcnJhaGUwMSwxMDkwMDANCjE5OTQsQ0lOLE5MLGdhbnRybzAxLDEwOTAwMA0KMTk5NCxDSU4sTkwsamFydmlrZTAxLDEwOTAwMA0KMTk5NCxDSU4sTkwscGVndWVzdDAxLDEwOTAwMA0KMTk5NCxDT0wsTkwsZ2FsYXJhbjAxLDM4NTAwMDANCjE5OTQsQ09MLE5MLGhheWVzY2gwMSwzMDc1MDAwDQoxOTk0LENPTCxOTCxiaWNoZWRhMDEsMjg1MDAwMA0KMTk5NCxDT0wsTkwsYnVya3NlbDAxLDIzMzMzMzMNCjE5OTQsQ09MLE5MLGhhcnJpZ3IwMiwxOTAwMDAwDQoxOTk0LENPTCxOTCxqb2huc2hvMDEsMTcwMDAwMA0KMTk5NCxDT0wsTkwsZ2lyYXJqbzAxLDEwMDAwMDANCjE5OTQsQ09MLE5MLHJ1ZmZpYnIwMSw4MDAwMDANCjE5OTQsQ09MLE5MLGhvbG1lZGEwMSw3NDAwMDANCjE5OTQsQ09MLE5MLGhhcmtlbWkwMSw2MjUwMDANCjE5OTQsQ09MLE5MLHdlaXNzd2EwMSw2MDAwMDANCjE5OTQsQ09MLE5MLGZyZWVtbWEwMiw1MTI1MDANCjE5OTQsQ09MLE5MLGJsYWlyd2kwMSwzMjUwMDANCjE5OTQsQ09MLE5MLGxpcmlhbmUwMSwyNzUwMDANCjE5OTQsQ09MLE5MLGtpbmdlbWkwMSwyNTAwMDANCjE5OTQsQ09MLE5MLHJleW5vYXIwMiwyMjQwMDANCjE5OTQsQ09MLE5MLHlvdW5nZXIwMSwyMDUwMDANCjE5OTQsQ09MLE5MLG11bm96bWkwMSwxOTUwMDANCjE5OTQsQ09MLE5MLHZhbmRlam8wMiwxOTUwMDANCjE5OTQsQ09MLE5MLGNhc3RpdmkwMiwxOTI1MDANCjE5OTQsQ09MLE5MLG5pZWRkYTAxLDE5MDAwMA0KMTk5NCxDT0wsTkwsYm90dGVrZTAxLDE4NzUwMA0KMTk5NCxDT0wsTkwscmVlZHN0MDEsMTg1MDAwDQoxOTk0LENPTCxOTCxzaGVhZmRhMDEsMTg1MDAwDQoxOTk0LENPTCxOTCxqb25lc2NoMDUsMTc1MDAwDQoxOTk0LENPTCxOTCxyaXR6a2UwMSwxNjUwMDANCjE5OTQsQ09MLE5MLG1lamlhcm8wMiwxMzAwMDANCjE5OTQsQ09MLE5MLG1vb3JlbWEwMSwxMjMwMDANCjE5OTQsQ09MLE5MLGxlc2thY3UwMSwxMjIwMDANCjE5OTQsQ09MLE5MLG93ZW5zamEwMiwxMjE1MDANCjE5OTQsQ09MLE5MLHBhaW50bGEwMSwxMjAwMDANCjE5OTQsQ09MLE5MLGZyZWRyc2MwMSwxMTgwMDANCjE5OTQsQ09MLE5MLGh1YmJhdHIwMSwxMDkwMDANCjE5OTQsQ09MLE5MLHRob21wbWEwMSwxMDkwMDANCjE5OTQsRkxPLE5MLHNoZWZmZ2EwMSw0NjI1MDAwDQoxOTk0LEZMTyxOTCxzYW50aWJlMDEsMzgwMDAwMA0KMTk5NCxGTE8sTkwsaGFydmVicjAxLDMzNzUwMDANCjE5OTQsRkxPLE5MLGRlc3Ryb3IwMSwxNTAwMDAwDQoxOTk0LEZMTyxOTCxoYW1tb2NoMDEsOTI1MDAwDQoxOTk0LEZMTyxOTCxtYWdhZGRhMDEsODUwMDAwDQoxOTk0LEZMTyxOTCxob3VnaGNoMDEsODAwMDAwDQoxOTk0LEZMTyxOTCxicm93bmplMDEsNjUwMDAwDQoxOTk0LEZMTyxOTCxhcXVpbmx1MDEsNTc1MDAwDQoxOTk0LEZMTyxOTCxnYXJkbm1hMDEsNDAwMDAwDQoxOTk0LEZMTyxOTCxiYXJiZWJyMDEsMzAyNTAwDQoxOTk0LEZMTyxOTCx0aW5nbHJvMDEsMjcwMDAwDQoxOTk0LEZMTyxOTCxjYXJyY2gwMiwyMzAwMDANCjE5OTQsRkxPLE5MLGNvbmluamUwMSwyMzAwMDANCjE5OTQsRkxPLE5MLGJvd2VucnkwMSwxODUwMDANCjE5OTQsRkxPLE5MLGhlcm5hamUwMiwxODUwMDANCjE5OTQsRkxPLE5MLHJlbnRlcmkwMSwxNjAwMDANCjE5OTQsRkxPLE5MLGFyaWFzYWwwMSwxNTUwMDANCjE5OTQsRkxPLE5MLGxld2lzcmkwMSwxNTM1MDANCjE5OTQsRkxPLE5MLGNvbGJyZ3IwMSwxNTAwMDANCjE5OTQsRkxPLE5MLGRpYXptYTAxLDE1MDAwMA0KMTk5NCxGTE8sTkwsbmF0YWxybzAxLDE0NzUwMA0KMTk5NCxGTE8sTkwscmFwcHBhMDEsMTM2MDAwDQoxOTk0LEZMTyxOTCx3ZWF0aGRhMDEsMTM1MDAwDQoxOTk0LEZMTyxOTCx3aGl0bWRhMDIsMTMxMDAwDQoxOTk0LEZMTyxOTCxuZW5ybzAxLDEzMDAwMA0KMTk5NCxGTE8sTkwscGVyZXp5bzAxLDEyNzUwMA0KMTk5NCxGTE8sTkwsbW9ybWFydTAxLDEyNTAwMA0KMTk5NCxGTE8sTkwsY2FycmltYTAxLDEyMDAwMA0KMTk5NCxGTE8sTkwsZnJhc2V3aTAxLDEyMDAwMA0KMTk5NCxGTE8sTkwsZXZlcmVjYTAxLDExODAwMA0KMTk5NCxGTE8sTkwsam9obnNqbzA3LDExODAwMA0KMTk5NCxGTE8sTkwsbWF0aGV0ZTAxLDExODAwMA0KMTk5NCxGTE8sTkwsYWJib3RrdTAxLDEwOTAwMA0KMTk5NCxGTE8sTkwsam9obnNjaDA0LDEwOTAwMA0KMTk5NCxGTE8sTkwsbWlsbGVrdTAxLDEwOTAwMA0KMTk5NCxGTE8sTkwsdGF2YXJqZTAxLDEwOTAwMA0KMTk5NCxIT1UsTkwsZHJhYmVkbzAxLDQyNzUwMDANCjE5OTQsSE9VLE5MLHN3aW5kZ3IwMSwzNzUwMDAwDQoxOTk0LEhPVSxOTCxiaWdnaWNyMDEsMzUwMDAwMA0KMTk5NCxIT1UsTkwsY2FtaW5rZTAxLDMyNTAwMDANCjE5OTQsSE9VLE5MLGhhcm5pcGUwMSwzMjA1MDAwDQoxOTk0LEhPVSxOTCxmaW5sZXN0MDEsMzA1MDAwMA0KMTk5NCxIT1UsTkwsYmFnd2VqZTAxLDI1MjUwMDANCjE5OTQsSE9VLE5MLHdpbGxpbWkwMiwyNTAwMDAwDQoxOTk0LEhPVSxOTCxnb256YWx1MDEsMTYzMDAwMA0KMTk5NCxIT1UsTkwsZmVsZGVtaTAxLDg1MDAwMA0KMTk5NCxIT1UsTkwsa2lsZWRhMDEsNDc3NTAwDQoxOTk0LEhPVSxOTCxlZGVuc3RvMDEsNDc1MDAwDQoxOTk0LEhPVSxOTCxiYXNza2UwMSw0MDAwMDANCjE5OTQsSE9VLE5MLGNlZGVuYW4wMSwzNDAwMDANCjE5OTQsSE9VLE5MLGJyZWFtc2kwMSwzMDAwMDANCjE5OTQsSE9VLE5MLHNlcnZhc2MwMSwyODAwMDANCjE5OTQsSE9VLE5MLHRhdWJlZWQwMSwyNzUwMDANCjE5OTQsSE9VLE5MLHdpbGxpYnIwMSwxOTUwMDANCjE5OTQsSE9VLE5MLGRvbm5lY2gwMSwxNzAwMDANCjE5OTQsSE9VLE5MLGpvbmVzdG8wMiwxNDY1MDANCjE5OTQsSE9VLE5MLHN0YW5rYW4wMSwxMzgwMDANCjE5OTQsSE9VLE5MLHJleW5vc2gwMSwxMzc1MDANCjE5OTQsSE9VLE5MLGhhbXB0bWkwMSwxMjkwMDANCjE5OTQsSE9VLE5MLGV1c2VidG8wMSwxMjE1MDANCjE5OTQsSE9VLE5MLGNhc3RpYnIwMSwxMjAwMDANCjE5OTQsSE9VLE5MLHNpbW1zbWkwMSwxMjAwMDANCjE5OTQsSE9VLE5MLHBvd2Vscm8wMSwxMTIwMDANCjE5OTQsSE9VLE5MLGh1ZGVram8wMSwxMDkwMDANCjE5OTQsSE9VLE5MLGh1bnRlYnIwMiwxMDkwMDANCjE5OTQsSE9VLE5MLG1pbGxlb3IwMSwxMDkwMDANCjE5OTQsSE9VLE5MLG1vdXRvamEwMSwxMDkwMDANCjE5OTQsSE9VLE5MLHBldGFncm8wMSwxMDkwMDANCjE5OTQsSE9VLE5MLHZlcmVzZGEwMSwxMDkwMDANCjE5OTQsTEFOLE5MLGNhbmRpdG8wMSwzNjUwMDAwDQoxOTk0LExBTixOTCxidXRsZWJyMDEsMzUwMDAwMA0KMTk5NCxMQU4sTkwsd2FsbGF0aTAxLDM0MTI1MDANCjE5OTQsTEFOLE5MLGhlcnNob3IwMSwzMzMzMzM0DQoxOTk0LExBTixOTCxzdHJhd2RhMDEsMzMwMDAwMA0KMTk5NCxMQU4sTkwsZGVzaGlkZTAxLDI3MDAwMDANCjE5OTQsTEFOLE5MLGdyb3Nza2UwMSwyNzAwMDAwDQoxOTk0LExBTixOTCxtYXJ0aXJhMDIsMjY4NzUwMA0KMTk5NCxMQU4sTkwsd29ycmV0bzAxLDI0MTY2NjcNCjE5OTQsTEFOLE5MLGdvdHRqaTAxLDE4MDAwMDANCjE5OTQsTEFOLE5MLHNueWRlY28wMiwxNTAwMDAwDQoxOTk0LExBTixOTCxtY2Rvd3JvMDEsMTM1MDAwMA0KMTk5NCxMQU4sTkwsa2Fycm9lcjAxLDY1MDAwMA0KMTk5NCxMQU4sTkwscGlhenptaTAxLDYwMDAwMA0KMTk5NCxMQU4sTkwsd2Vic3RtaTAxLDYwMDAwMA0KMTk5NCxMQU4sTkwsb2ZmZXJqbzAxLDUxNTAwMA0KMTk5NCxMQU4sTkwsdHJlYWRqZTAxLDUwMDAwMA0KMTk5NCxMQU4sTkwsd2F5bmVnYTAxLDM1MDAwMA0KMTk5NCxMQU4sTkwsYXN0YWNwZTAxLDMyNTAwMA0KMTk5NCxMQU4sTkwsaGFuc2VkYTAxLDI3NTAwMA0KMTk5NCxMQU4sTkwscHJpbmN0bzAxLDI3NTAwMA0KMTk5NCxMQU4sTkwsaGVybmFjYTAxLDI2NTAwMA0KMTk5NCxMQU4sTkwsZ3d5bm5jaDAxLDI1MDAwMA0KMTk5NCxMQU4sTkwscm9kcmloZTAyLDE3NzAwMA0KMTk5NCxMQU4sTkwsZGFhbG9tMDEsMTQ3MDAwDQoxOTk0LExBTixOTCxhc2hsZWJpMDEsMTM0MDAwDQoxOTk0LExBTixOTCxib3VybnJhMDEsMTM0MDAwDQoxOTk0LExBTixOTCxtb25kZXJhMDEsMTI2MDAwDQoxOTk0LExBTixOTCxkcmVpZmRhMDEsMTA5MDAwDQoxOTk0LExBTixOTCxwYXJrY2gwMSwxMDkwMDANCjE5OTQsTEFOLE5MLHZhbGRlaXMwMSwxMDkwMDANCjE5OTQsTU9OLE5MLHdhbGtlbGEwMSw0MDI1MDAwDQoxOTk0LE1PTixOTCxncmlzc21hMDIsMzU3NTAwMA0KMTk5NCxNT04sTkwsaGlsbGtlMDEsMjYxNTAwMA0KMTk5NCxNT04sTkwsd2V0dGVqbzAxLDIyMjUwMDANCjE5OTQsTU9OLE5MLGFsb3VtbzAxLDE0MTUwMDANCjE5OTQsTU9OLE5MLHJvamFzbWUwMSw4NTAwMDANCjE5OTQsTU9OLE5MLGZsZXRjZGEwMSw2MTUwMDANCjE5OTQsTU9OLE5MLG1pbGxpcmEwMSw2MDAwMDANCjE5OTQsTU9OLE5MLGZhc3NlamUwMSwzMTUwMDANCjE5OTQsTU9OLE5MLGJlcnJ5c2UwMSwyMDAwMDANCjE5OTQsTU9OLE5MLGNvcmRld2kwMSwyMDAwMDANCjE5OTQsTU9OLE5MLGxhbnNpbWkwMSwyMDAwMDANCjE5OTQsTU9OLE5MLG1hcnRpcGUwMiwyMDAwMDANCjE5OTQsTU9OLE5MLGJlbmF2ZnIwMSwxOTUwMDANCjE5OTQsTU9OLE5MLHdlYnN0bGUwMSwxODAwMDANCjE5OTQsTU9OLE5MLHNoYXdqZTAxLDE3MjUwMA0KMTk5NCxNT04sTkwsc2NvdHR0aTAxLDE2NTAwMA0KMTk5NCxNT04sTkwsZnJhemlsbzAxLDE0MDAwMA0KMTk5NCxNT04sTkwsYm91Y2hkZTAxLDEzNTAwMA0KMTk5NCxNT04sTkwsaGVyZWRnaTAxLDEzNTAwMA0KMTk5NCxNT04sTkwsc3BlaHJ0aTAxLDEzMjAwMA0KMTk5NCxNT04sTkwsaGVucnlidTAxLDEzMDAwMA0KMTk5NCxNT04sTkwscnVldGVraTAxLDEzMDAwMA0KMTk5NCxNT04sTkwsd2hpdGVybzAyLDExMjAwMA0KMTk5NCxNT04sTkwsZmxveWRjbDAxLDEwOTUwMA0KMTk5NCxNT04sTkwsZWlzY2hqbzAxLDEwOTAwMA0KMTk5NCxNT04sTkwsZ2FyZG5qZTAxLDEwOTAwMA0KMTk5NCxNT04sTkwsaGVuZGVybzAxLDEwOTAwMA0KMTk5NCxOWU4sTkwsYm9uaWxibzAxLDYzMDAwMDANCjE5OTQsTllOLE5MLHNhYmVyYnIwMSw0NjQ3MjQ5DQoxOTk0LE5ZTixOTCxnb29kZWR3MDEsNDYxNjY2Nw0KMTk5NCxOWU4sTkwsZnJhbmNqbzAxLDQwMDAwMDANCjE5OTQsTllOLE5MLG1jcmV5a2UwMSwyOTE2NjY3DQoxOTk0LE5ZTixOTCxtYWRkdW1pMDEsMTM2MjUwMA0KMTk5NCxOWU4sTkwsc21pdGhwZTAyLDExMDAwMDANCjE5OTQsTllOLE5MLG9yc3Vsam8wMSw4NTAwMDANCjE5OTQsTllOLE5MLHZpemNham8wMSw4NTAwMDANCjE5OTQsTllOLE5MLHNlZ3VpZGEwMSw1NTAwMDANCjE5OTQsTllOLE5MLHJpdmVybHUwMSw0NTAwMDANCjE5OTQsTllOLE5MLGtlbnRqZTAxLDQzNzUwMA0KMTk5NCxOWU4sTkwsaHVuZGx0bzAxLDI5MDAwMA0KMTk5NCxOWU4sTkwsc2Nob3VwZTAxLDIyNTAwMA0KMTk5NCxOWU4sTkwsbWNrbmlqZTAxLDE4MDAwMA0KMTk5NCxOWU4sTkwsYnVybmlqZTAxLDE3NTAwMA0KMTk5NCxOWU4sTkwsY2FuZ2VqbzAxLDE3NTAwMA0KMTk5NCxOWU4sTkwsdGhvbXByeTAxLDE3NTAwMA0KMTk5NCxOWU4sTkwsaGlsbG1lcjAxLDE3MDAwMA0KMTk5NCxOWU4sTkwsYm9nYXJ0aTAxLDE2MjUwMA0KMTk5NCxOWU4sTkwsbGludG9kbzAxLDEzNTAwMA0KMTk5NCxOWU4sTkwsdGVsZ2hkYTAxLDEzNTAwMA0KMTk5NCxOWU4sTkwsam9uZXNibzAzLDEzMDAwMA0KMTk5NCxOWU4sTkwsbWFuemFqbzAxLDEyNzUwMA0KMTk5NCxOWU4sTkwsaHVyc3RqbzAxLDEyNTAwMA0KMTk5NCxOWU4sTkwsdmluYWZlMDEsMTIwMDAwDQoxOTk0LE5ZTixOTCxyZW1saW1pMDEsMTE1MDAwDQoxOTk0LE5ZTixOTCxicm9nbnJpMDEsMTA5MDAwDQoxOTk0LE5ZTixOTCxndW5kZWVyMDEsMTA5MDAwDQoxOTk0LE5ZTixOTCxqYWNvbWphMDEsMTA5MDAwDQoxOTk0LE5ZTixOTCxzdGlubmtlMDEsMTA5MDAwDQoxOTk0LFBISSxOTCxqb25lc2RvMDEsMjg3NTAwMA0KMTk5NCxQSEksTkwsamFja3NkYTAyLDI2NzUwMDANCjE5OTQsUEhJLE5MLGR5a3N0bGUwMSwyNjUwMDAwDQoxOTk0LFBISSxOTCxrcnVram8wMSwyNDUwMDAwDQoxOTk0LFBISSxOTCxkYXVsdGRhMDEsMjMwMDAwMA0KMTk5NCxQSEksTkwsc2NoaWxjdTAxLDIzMDAwMDANCjE5OTQsUEhJLE5MLGR1bmNhbWEwMSwyMjUwMDAwDQoxOTk0LFBISSxOTCxncmVlbnRvMDEsMjAwMDAwMA0KMTk5NCxQSEksTkwsaG9sbGlkYTAxLDIwMDAwMDANCjE5OTQsUEhJLE5MLHRob21wbWkwMiwxMzc1MDAwDQoxOTk0LFBISSxOTCxlaXNlbmppMDEsMTIyNTAwMA0KMTk5NCxQSEksTkwsam9yZGFyaTAyLDExMDAwMDANCjE5OTQsUEhJLE5MLGluY2F2cGUwMSwxMDUwMDAwDQoxOTk0LFBISSxOTCxjaGFybG5vMDEsODUwMDAwDQoxOTk0LFBISSxOTCxtb3Jhbm1pMDEsNzUwMDAwDQoxOTk0LFBISSxOTCx3ZXN0ZGEwMSw2MDAwMDANCjE5OTQsUEhJLE5MLG1hc29ucm8wMSw1MDAwMDANCjE5OTQsUEhJLE5MLGFuZGVybGEwMiwzNTAwMDANCjE5OTQsUEhJLE5MLGNoYW1id2UwMSwzNTAwMDANCjE5OTQsUEhJLE5MLHJpdmVyYmUwMSwzMzUwMDANCjE5OTQsUEhJLE5MLHN0b2Nra2UwMSwxOTAwMDANCjE5OTQsUEhJLE5MLHNsb2N1aGUwMSwxODUwMDANCjE5OTQsUEhJLE5MLGJhdGlza2kwMSwxNzUwMDANCjE5OTQsUEhJLE5MLHByYXR0dG8wMiwxNTUwMDANCjE5OTQsUEhJLE5MLHdpbGxpbWkwMywxMzAwMDANCjE5OTQsUEhJLE5MLG11bm96Ym8wMSwxMjUwMDANCjE5OTQsUEhJLE5MLGJvcmxhdG8wMiwxMDkwMDANCjE5OTQsUEhJLE5MLGp1ZGVuamUwMSwxMDkwMDANCjE5OTQsUEhJLE5MLGxpZWJlbWkwMSwxMDkwMDANCjE5OTQsUEhJLE5MLGxvbmdtdG8wMSwxMDkwMDANCjE5OTQsUEhJLE5MLG1hcnNodG8wMSwxMDkwMDANCjE5OTQsUEhJLE5MLHdlbGxzYm8wMSwxMDkwMDANCjE5OTQsUElULE5MLHZhbnNsYW4wMSwzNTUwMDAwDQoxOTk0LFBJVCxOTCxiZWxsamEwMSwzNDAwMDAwDQoxOTk0LFBJVCxOTCxzbWl0aHphMDEsMzEyNTAwMA0KMTk5NCxQSVQsTkwsa2luZ2plMDEsMjQwMDAwMA0KMTk5NCxQSVQsTkwsbGF2YWxtaTAxLDIxMDAwMDANCjE5OTQsUElULE5MLG1lcmNlb3IwMSwxNDg1MDAwDQoxOTk0LFBJVCxOTCxzbGF1Z2RvMDEsMTQ3NTAwMA0KMTk5NCxQSVQsTkwsdG9tbGlyYTAxLDk3NTAwMA0KMTk5NCxQSVQsTkwscGVuYWFsMDEsODAwMDAwDQoxOTk0LFBJVCxOTCxtY2NsZWxsMDEsNjUwMDAwDQoxOTk0LFBJVCxOTCxmb2xleXRvMDIsNDAwMDAwDQoxOTk0LFBJVCxOTCxjbGFya2RhMDUsMzgwMDAwDQoxOTk0LFBJVCxOTCxodW50ZWJyMDEsMjUwMDAwDQoxOTk0LFBJVCxOTCx2YXJzaGdhMDEsMjQzNzUwDQoxOTk0LFBJVCxOTCxkeWVybWkwMSwyMzAwMDANCjE5OTQsUElULE5MLG5lYWdsZGUwMSwyMjAwMDANCjE5OTQsUElULE5MLGdhcmNpY2EwMSwxOTI1MDANCjE5OTQsUElULE5MLG1hcnRpYWwwMywxOTI1MDANCjE5OTQsUElULE5MLGNvb2tlc3QwMSwxODc1MDANCjE5OTQsUElULE5MLHdhZ25lcGEwMSwxODAwMDANCjE5OTQsUElULE5MLGJhbGxhamUwMSwxNzUwMDANCjE5OTQsUElULE5MLHlvdW5na2UwMSwxNjAwMDANCjE5OTQsUElULE5MLGdvZmZqZTAxLDE0NTAwMA0KMTk5NCxQSVQsTkwsbWlub3JibDAxLDE0NTAwMA0KMTk5NCxQSVQsTkwsZGV3ZXltYTAxLDE0MDAwMA0KMTk5NCxQSVQsTkwsam9obnNqbzA2LDEzMDAwMA0KMTk5NCxQSVQsTkwsd2VobmVqbzAxLDExNjAwMA0KMTk5NCxQSVQsTkwscGVubnl3aTAxLDExNTAwMA0KMTk5NCxQSVQsTkwsbWljZWxkYTAxLDExMDAwMA0KMTk5NCxQSVQsTkwsY3VtbWltaTAxLDEwOTAwMA0KMTk5NCxQSVQsTkwsbGllYmVqbzAxLDEwOTAwMA0KMTk5NCxQSVQsTkwsbWFuemFyYTAxLDEwOTAwMA0KMTk5NCxQSVQsTkwsdGFiYWtqZTAxLDEwOTAwMA0KMTk5NCxQSVQsTkwsd2hpdGVyaTAxLDEwOTAwMA0KMTk5NCxTRE4sTkwsZ3d5bm50bzAxLDM2MzMzMzMNCjE5OTQsU0ROLE5MLGJlbmVzYW4wMSwzMDA1MDAwDQoxOTk0LFNETixOTCxyb2JlcmJpMDEsMTY1MDAwMA0KMTk5NCxTRE4sTkwsaGFycmlnZTAxLDc1MDAwMA0KMTk5NCxTRE4sTkwsd2hpdGV3YTAyLDY5NTAwMA0KMTk5NCxTRE4sTkwscGxhbnRwaDAxLDUwMDAwMA0KMTk5NCxTRE4sTkwsZGF2aXNtYTAxLDQwMDAwMA0KMTk5NCxTRE4sTkwsYmVsbGRlMDEsMzg1MDAwDQoxOTk0LFNETixOTCxzaGlwbGNyMDEsMjc1MDAwDQoxOTk0LFNETixOTCx2YWxlbmZlMDEsMjc1MDAwDQoxOTk0LFNETixOTCxhc2hieWFuMDEsMjI1MDAwDQoxOTk0LFNETixOTCxndXRpZXJpMDEsMTg3NTAwDQoxOTk0LFNETixOTCxjaWFuZmFyMDEsMTg1MDAwDQoxOTk0LFNETixOTCxob2ZmbXRyMDEsMTgwMDAwDQoxOTk0LFNETixOTCxjbGFya3BoMDIsMTU1MDAwDQoxOTk0LFNETixOTCxicm9jYWRvMDEsMTUwMDAwDQoxOTk0LFNETixOTCxiZWFuYmkwMSwxNDUwMDANCjE5OTQsU0ROLE5MLG1hdXNldGkwMSwxNDUwMDANCjE5OTQsU0ROLE5MLHdpbGxpZWQwMSwxNDAwMDANCjE5OTQsU0ROLE5MLG1hcnRpcGUwMywxMzUwMDANCjE5OTQsU0ROLE5MLHdvcnJldGkwMSwxMzUwMDANCjE5OTQsU0ROLE5MLGF1c211YnIwMSwxMzM1MDANCjE5OTQsU0ROLE5MLG5pZXZlbWUwMSwxMTgwMDANCjE5OTQsU0ROLE5MLHNhbmRlc2MwMiwxMTUwMDANCjE5OTQsU0ROLE5MLGNhbXBibWkwMSwxMDkwMDANCjE5OTQsU0ROLE5MLGVsbGlvZG8wMSwxMDkwMDANCjE5OTQsU0ROLE5MLGZsb3JpYnIwMSwxMDkwMDANCjE5OTQsU0ROLE5MLGhhbWlsam8wMiwxMDkwMDANCjE5OTQsU0ROLE5MLGhvbGJlcmEwMSwxMDkwMDANCjE5OTQsU0ROLE5MLGh5ZXJzdGkwMSwxMDkwMDANCjE5OTQsU0ROLE5MLGpvaG5zYnIwMSwxMDkwMDANCjE5OTQsU0ROLE5MLGxvY2toa2UwMSwxMDkwMDANCjE5OTQsU0ROLE5MLGxvcGV6bHUwMiwxMDkwMDANCjE5OTQsU0ROLE5MLHNhZ2VyYWowMSwxMDkwMDANCjE5OTQsU0ROLE5MLHN0YXRvZGEwMSwxMDkwMDANCjE5OTQsU0ZOLE5MLGJvbmRzYmEwMSw1MTY2NjY2DQoxOTk0LFNGTixOTCx3aWxsaW1hMDQsNDIwMDAwMA0KMTk5NCxTRk4sTkwsbWNnZWV3aTAxLDM1NjI1MDANCjE5OTQsU0ZOLE5MLGJ1cmtlam8wMywzNTUwMDAwDQoxOTk0LFNGTixOTCx0aG9tcHJvMDEsMzMzMzMzMw0KMTk5NCxTRk4sTkwsYmxhY2tidTAyLDMyNTAwMDANCjE5OTQsU0ZOLE5MLGphY2tzbWkwMiwyOTY2NjY3DQoxOTk0LFNGTixOTCxwb3J0dW1hMDEsMjMzMzMzMw0KMTk5NCxTRk4sTkwsc3dpZnRiaTAyLDIzMTY2NjcNCjE5OTQsU0ZOLE5MLG1hbndha2kwMSwxODAwMDAwDQoxOTk0LFNGTixOTCxyaWdoZWRhMDEsMTc1MDAwMA0KMTk5NCxTRk4sTkwsbWFydGlkYTAxLDExMDAwMDANCjE5OTQsU0ZOLE5MLHdpbHNvdHIwMSwxMDAwMDAwDQoxOTk0LFNGTixOTCxmcmV5c3QwMSw5MTUwMDANCjE5OTQsU0ZOLE5MLGJlY2tybzAxLDc1MDAwMA0KMTk5NCxTRk4sTkwsYmVueml0bzAxLDcwMDAwMA0KMTk5NCxTRk4sTkwsY2FycmVtYTAxLDY1MDAwMA0KMTk5NCxTRk4sTkwscmVlZGplMDIsNjAwMDAwDQoxOTk0LFNGTixOTCxsZXdpc2RhMDEsMzUwMDAwDQoxOTk0LFNGTixOTCxjbGF5dHJvMDEsMzI1MDAwDQoxOTk0LFNGTixOTCxtb250ZXJpMDEsMjg3NTAwDQoxOTk0LFNGTixOTCxoaWNrZWJyMDEsMjcwMDAwDQoxOTk0LFNGTixOTCxidXJiYWRhMDEsMjMwMDAwDQoxOTk0LFNGTixOTCxiZW5qYW1pMDEsMjI1MDAwDQoxOTk0LFNGTixOTCxyb2dlcmtlMDIsMjAwMDAwDQoxOTk0LFNGTixOTCxzY2Fyc3N0MDEsMTMwMDAwDQoxOTk0LFNGTixOTCxwYXR0ZWpvMDEsMTE1MDAwDQoxOTk0LFNGTixOTCxwaGlsbGpyMDEsMTE1MDAwDQoxOTk0LFNGTixOTCx0b3JyZXNhMDEsMTE1MDAwDQoxOTk0LFNGTixOTCxnb21lenBhMDEsMTE0MDAwDQoxOTk0LFNGTixOTCxzdHJhd2RhMDEsMTA5MDAwDQoxOTk0LFNGTixOTCx2YW5sYXdpMDEsMTA5MDAwDQoxOTk0LFNMTixOTCxqZWZmZWdyMDEsNDYwMDAwMA0KMTk5NCxTTE4sTkwsdGV3a3NibzAxLDM1MDAwMDANCjE5OTQsU0xOLE5MLHNtaXRob3owMSwzMDAwMDAwDQoxOTk0LFNMTixOTCx6ZWlsZXRvMDEsMjcwMDAwMA0KMTk5NCxTTE4sTkwscGFnbm90bzAxLDI2MDAwMDANCjE5OTQsU0xOLE5MLG9xdWVuam8wMSwyMTUwMDAwDQoxOTk0LFNMTixOTCxsYW5rZnJhMDEsMTY1MDAwMA0KMTk5NCxTTE4sTkwsZ2lsa2ViZTAxLDE2MzUwMDANCjE5OTQsU0xOLE5MLHdoaXRlbWEwMSwxMDc5OTM0DQoxOTk0LFNMTixOTCxqb3JkYWJyMDEsODQ2NjY3DQoxOTk0LFNMTixOTCxhbGljZWx1MDEsNjUwMDAwDQoxOTk0LFNMTixOTCxwZXJyeWdlMDEsNjUwMDAwDQoxOTk0LFNMTixOTCxtdXJwaHJvMDEsNjAwMDAwDQoxOTk0LFNMTixOTCxwZW5hZ2UwMSw1NzUwMDANCjE5OTQsU0xOLE5MLGhhYnlham8wMSw1MDAwMDANCjE5OTQsU0xOLE5MLHJvZHJpcmkwMiw0MDAwMDANCjE5OTQsU0xOLE5MLHN1dGNscmkwMSwyNTAwMDANCjE5OTQsU0xOLE5MLGtpbGd1cGEwMSwyMjUwMDANCjE5OTQsU0xOLE5MLHBlcmV6bWkwMSwyMDAwMDANCjE5OTQsU0xOLE5MLHBhbGFjdmkwMSwxNzUwMDANCjE5OTQsU0xOLE5MLGFyb2NocmUwMSwxNjAwMDANCjE5OTQsU0xOLE5MLGNvcm1pcmgwMSwxNjAwMDANCjE5OTQsU0xOLE5MLHBhcHBhZXIwMSwxNDAwMDANCjE5OTQsU0xOLE5MLHJveWVyc3QwMSwxMzAwMDANCjE5OTQsU0xOLE5MLHVyYmFudG8wMSwxMzAwMDANCjE5OTQsU0xOLE5MLHdhdHNvYWwwMSwxMzAwMDANCjE5OTQsU0xOLE5MLG9zYm9yZG8wMSwxMTIwMDANCjE5OTQsU0xOLE5MLGNyb21ldHIwMSwxMDkwMDANCjE5OTQsU0xOLE5MLG1hYnJ5am8wMSwxMDkwMDANCjE5OTQsU0xOLE5MLG1jZ3JpdGUwMSwxMDkwMDANCjE5OTUsQkFMLEFMLHJpcGtlY2EwMSw2NzAwMDAwDQoxOTk1LEJBTCxBTCxwYWxtZXJhMDEsNDkwNjYwMw0KMTk5NSxCQUwsQUwsbWNkb25iZTAxLDQ1MDAwMDANCjE5OTUsQkFMLEFMLGJyb3dua2UwMSw0MjI1MDAwDQoxOTk1LEJBTCxBTCxhbmRlcmJyMDEsMzMzMzMzMw0KMTk5NSxCQUwsQUwsbXVzc2ltaTAxLDI5MjUwMDANCjE5OTUsQkFMLEFMLGhvaWxlY2gwMSwyODUwMDAwDQoxOTk1LEJBTCxBTCxmZXJuYXNpMDEsMjMzMzMzMw0KMTk5NSxCQUwsQUwsYmFpbmVoYTAxLDE5MTk0NDUNCjE5OTUsQkFMLEFMLGpvbmVzZG8wMSwxMzAwMDAwDQoxOTk1LEJBTCxBTCxtb3llcmphMDEsMTEwMDAwMA0KMTk5NSxCQUwsQUwsYmFyYmVicjAxLDk1ODc1MA0KMTk5NSxCQUwsQUwsZ29tZXpsZTAyLDkyNTAwMA0KMTk5NSxCQUwsQUwsbm9rZXNtYTAxLDcwMDAwMA0KMTk5NSxCQUwsQUwsb3Jvc2NqZTAxLDY1MDAwMA0KMTk5NSxCQUwsQUwsdmFuc2xhbjAxLDYwMDAwMA0KMTk5NSxCQUwsQUwsZWljaGhtYTAxLDUzNzUwMA0KMTk5NSxCQUwsQUwsaGFycmlnZTAxLDQ1MDU1Nw0KMTk5NSxCQUwsQUwsYmFzc2tlMDEsNDE1MDAwDQoxOTk1LEJBTCxBTCxyaG9kZWFyMDEsMjc1MDAwDQoxOTk1LEJBTCxBTCxodXNvbmplMDEsMjY1MDAwDQoxOTk1LEJBTCxBTCxoYW1tb2plMDEsMjUwMDAwDQoxOTk1LEJBTCxBTCxsZWVtYTAzLDE1MDAwMA0KMTk5NSxCQUwsQUwsbWFudG9qZTAxLDE0MDAwMA0KMTk5NSxCQUwsQUwsb2JhbmRzaDAxLDE0MDAwMA0KMTk5NSxCQUwsQUwsY2xhcmt0ZTAxLDEzNTAwMA0KMTk5NSxCQUwsQUwsYWxleGFtYTAyLDEzMDAwMA0KMTk5NSxCQUwsQUwsYmVuaXRhcjAxLDEyNTAwMA0KMTk5NSxCQUwsQUwsb3F1aXNtaTAxLDEyNTAwMA0KMTk5NSxCQUwsQUwsc21pdGhtYTAzLDExNTAwMA0KMTk5NSxCQUwsQUwsYm9yb3dqbzAxLDEwOTAwMA0KMTk5NSxCQUwsQUwsZGVkcmlqaTAxLDEwOTAwMA0KMTk5NSxCQUwsQUwsZGVzaWxqbzAxLDEwOTAwMA0KMTk5NSxCQUwsQUwsZ29vZHdjdTAxLDEwOTAwMA0KMTk5NSxCQUwsQUwsa2xpbmdzYzAxLDEwOTAwMA0KMTk5NSxCQUwsQUwsa3JpdmRyaTAxLDEwOTAwMA0KMTk5NSxCQUwsQUwsemF1bmdyMDEsMTA5MDAwDQoxOTk1LEJPUyxBTCxjYW5zZWpvMDEsNTgwMDAwMA0KMTk5NSxCT1MsQUwsY2xlbWVybzAyLDU2NTUyNTANCjE5OTUsQk9TLEFMLGdyZWVubWkwMSwzNjAwMDAwDQoxOTk1LEJPUyxBTCx2YXVnaG1vMDEsMjc3NTAwMA0KMTk5NSxCT1MsQUwsbWFjZmFtaTAxLDE3MjUwMDANCjE5OTUsQk9TLEFMLHdoaXRlbWEwMSwxNjM4MjY4DQoxOTk1LEJPUyxBTCxzbWl0aHphMDEsMTUyNTAwMA0KMTk5NSxCT1MsQUwsaGFuc29lcjAxLDE1MDAwMDANCjE5OTUsQk9TLEFMLGFsaWNlbHUwMSw4MDAwMDANCjE5OTUsQk9TLEFMLG5hZWhydGkwMSw2NDI1MDANCjE5OTUsQk9TLEFMLHZhbGVuam8wMiw2Mzc1MDANCjE5OTUsQk9TLEFMLGJlbGluc3QwMSw1NzUwMDANCjE5OTUsQk9TLEFMLGplZmZlcmUwMSw1NjI1MDANCjE5OTUsQk9TLEFMLGNvcm1pcmgwMSw1NTAwMDANCjE5OTUsQk9TLEFMLGxpbGxpZGUwMSw0NTAwMDANCjE5OTUsQk9TLEFMLHBlbmFhbDAxLDQ1MDAwMA0KMTk5NSxCT1MsQUwsbWNnZWV3aTAxLDMwMDAwMA0KMTk5NSxCT1MsQUwsc2VsZWFhMDEsMjkyNTAwDQoxOTk1LEJPUyxBTCxyeWFua2UwMSwyNzI1MDANCjE5OTUsQk9TLEFMLHNodW1wdGUwMSwyNTAwMDANCjE5OTUsQk9TLEFMLGJlbGxqdTAxLDIwMDAwMA0KMTk5NSxCT1MsQUwsYmVycnlkYTAxLDIwMDAwMA0KMTk5NSxCT1MsQUwsZG9ubmVjaDAxLDIwMDAwMA0KMTk5NSxCT1MsQUwsaGFzZWxiaTAxLDIwMDAwMA0KMTk5NSxCT1MsQUwsd2FrZWZ0aTAxLDE3NTAwMA0KMTk5NSxCT1MsQUwscm9kcmljYTAxLDE2NzAwMA0KMTk5NSxCT1MsQUwscm93bGFyaTAxLDE2MjUwMA0KMTk5NSxCT1MsQUwsdGluc2xsZTAxLDE0MDAwMA0KMTk5NSxCT1MsQUwsb2xlYXJ0cjAxLDEyNTAwMA0KMTk5NSxCT1MsQUwsc3RhaXJtYTAxLDExNTAwMA0KMTk5NSxCT1MsQUwsdmFuZWd0aTAxLDExNTAwMA0KMTk5NSxCT1MsQUwsaG9zZXlkdzAxLDExMDAwMA0KMTk5NSxCT1MsQUwsZXNoZWx2YTAxLDEwOTAwMA0KMTk5NSxCT1MsQUwsaHVkc29qbzAyLDEwOTAwMA0KMTk5NSxCT1MsQUwsbWFkZHVtaTAxLDEwOTAwMA0KMTk5NSxCT1MsQUwscm9kcmlmcjAyLDEwOTAwMA0KMTk5NSxCT1MsQUwsc3VwcGFqZTAxLDEwOTAwMA0KMTk5NSxDQUwsQUwsbGFuZ3NtYTAxLDUwMDAwMDANCjE5OTUsQ0FMLEFMLGZpbmxlY2gwMSw0ODc1MDAwDQoxOTk1LENBTCxBTCxwaGlsbHRvMDIsNDM2NjY2Nw0KMTk5NSxDQUwsQUwsZGF2aXNjaDAxLDM4MDAwMDANCjE5OTUsQ0FMLEFMLG93ZW5zcDAxLDM1MDAwMDANCjE5OTUsQ0FMLEFMLHNtaXRobGUwMiwyNTYxMTEzDQoxOTk1LENBTCxBTCxzYWxtb3RpMDEsOTUwMDAwDQoxOTk1LENBTCxBTCxkaXNhcmdhMDEsOTI1MDAwDQoxOTk1LENBTCxBTCxteWVyc2dyMDEsODUxNjY4DQoxOTk1LENBTCxBTCxwYXR0ZWJvMDEsNTM1MDAwDQoxOTk1LENBTCxBTCxib3NraXNoMDEsMzUwMDAwDQoxOTk1LENBTCxBTCxodWRsZXJlMDEsMzQ3MjIzDQoxOTk1LENBTCxBTCxzYW5kZXNjMDEsMjUwMDAwDQoxOTk1LENBTCxBTCxlYXNsZWRhMDEsMjMwMDAwDQoxOTk1LENBTCxBTCxnb256YXJlMDEsMjI1MDAwDQoxOTk1LENBTCxBTCxzbm93anQwMSwyMjUwMDANCjE5OTUsQ0FMLEFMLGJ1dGNobWkwMSwxNzUwMDANCjE5OTUsQ0FMLEFMLGVkbW9uamkwMSwxNjc1MDANCjE5OTUsQ0FMLEFMLGJpZWxlbWkwMSwxNjAwMDANCjE5OTUsQ0FMLEFMLGFsbGFuYW4wMSwxNTAwMDANCjE5OTUsQ0FMLEFMLG1hcnRpY2EwMiwxNTAwMDANCjE5OTUsQ0FMLEFMLHNwcmlucnUwMSwxNDAwMDANCjE5OTUsQ0FMLEFMLGFuZGVyYnIwMiwxMzUwMDANCjE5OTUsQ0FMLEFMLGxlZnR3cGgwMSwxMzUwMDANCjE5OTUsQ0FMLEFMLHBlcmV6ZWQwMSwxMzUwMDANCjE5OTUsQ0FMLEFMLGFuZGVyZ2EwMSwxMTQwMDANCjE5OTUsQ0FMLEFMLGhvbHplbWEwMSwxMTI1MDANCjE5OTUsQ0FMLEFMLGZhYnJlam8wMSwxMTE1MDANCjE5OTUsQ0FMLEFMLGZsb3Jha2UwMSwxMTAwMDANCjE5OTUsQ0FMLEFMLGphbWVzbWkwMSwxMDkwMDANCjE5OTUsQ0FMLEFMLG1vbnRlcmkwMSwxMDkwMDANCjE5OTUsQ0FMLEFMLHBhbG1lb3IwMSwxMDkwMDANCjE5OTUsQ0FMLEFMLHBlcmNpdHIwMSwxMDkwMDANCjE5OTUsQ0hBLEFMLHRob21hZnIwNCw3MTUwMDAwDQoxOTk1LENIQSxBTCx2ZW50dXJvMDEsNTEwMDAwMA0KMTk5NSxDSEEsQUwscmFpbmV0aTAxLDM3MDAwMDANCjE5OTUsQ0hBLEFMLGd1aWxsb3owMSwzNTAwMDAwDQoxOTk1LENIQSxBTCxzYXhzdDAxLDM0NzUwMDANCjE5OTUsQ0hBLEFMLGZlcm5hYWwwMSwzMjUwMDAwDQoxOTk1LENIQSxBTCxhYmJvdGppMDEsMjc3NTAwMA0KMTk5NSxDSEEsQUwsam9obnNsYTAzLDI2NjY2NjcNCjE5OTUsQ0hBLEFMLGFsdmFyd2kwMSwyMjUwMDAwDQoxOTk1LENIQSxBTCxrYXJrb3JvMDEsMTc3MzYxNQ0KMTk5NSxDSEEsQUwsZGV2ZXJtaTAxLDEzNTAwMDANCjE5OTUsQ0hBLEFMLGhlcm5hcm8wMSwxMTc1MDAwDQoxOTk1LENIQSxBTCxyYWRpbnNjMDEsMTE1MDAwMA0KMTk5NSxDSEEsQUwsa3J1a2pvMDEsMTAwMDAwMA0KMTk5NSxDSEEsQUwsbWNjYXNraTAxLDk0MDAwMA0KMTk5NSxDSEEsQUwsbGF2YWxtaTAxLDc1MDAwMA0KMTk5NSxDSEEsQUwsZGVsZW9qbzAxLDcwNTAwMA0KMTk5NSxDSEEsQUwsZ3JlYmVjcjAxLDY3MDAwMA0KMTk5NSxDSEEsQUwsbWFydGlkYTAxLDY1MDAwMA0KMTk5NSxDSEEsQUwsc2Fib2NoMDEsNTUwMDAwDQoxOTk1LENIQSxBTCxkaWJibHJvMDEsNDAwMDAwDQoxOTk1LENIQSxBTCxyaWdoZWRhMDEsMzAwMDAwDQoxOTk1LENIQSxBTCxiZXJlamEwMSwyMDUwMDANCjE5OTUsQ0hBLEFMLG5ld3Nvd2EwMSwyMDAwMDANCjE5OTUsQ0hBLEFMLG1hcnRpbm8wMSwxNjUwMDANCjE5OTUsQ0hBLEFMLGZvcnR1dGkwMSwxMzAwMDANCjE5OTUsQ0hBLEFMLGJhbGR3amEwMSwxMDkwMDANCjE5OTUsQ0hBLEFMLGJlcnRvbWkwMSwxMDkwMDANCjE5OTUsQ0hBLEFMLGNhbWVybWkwMSwxMDkwMDANCjE5OTUsQ0hBLEFMLGR1cmhhcmEwMSwxMDkwMDANCjE5OTUsQ0hBLEFMLGtleXNlYnIwMSwxMDkwMDANCjE5OTUsQ0hBLEFMLG1vdXRvbHkwMSwxMDkwMDANCjE5OTUsQ0hBLEFMLHNpbWFzYmkwMSwxMDkwMDANCjE5OTUsQ0hBLEFMLHRob21hbGEwMSwxMDkwMDANCjE5OTUsQ0hBLEFMLHRyZW1pY2gwMSwxMDkwMDANCjE5OTUsQ0xFLEFMLG1hcnRpZGUwMSw0NTUwMDAwDQoxOTk1LENMRSxBTCxiZWxsZWFsMDEsNDUwMDAwMA0KMTk5NSxDTEUsQUwsYmFlcmdjYTAxLDM2MzMzMzMNCjE5OTUsQ0xFLEFMLG11cnJhZWQwMiwzMDAwMDAwDQoxOTk1LENMRSxBTCx2aXpxdW9tMDEsMjkwMDAwMA0KMTk5NSxDTEUsQUwsYWxvbWFzYTAyLDI1NTAwMDANCjE5OTUsQ0xFLEFMLGxvZnRva2UwMSwxOTI1MDAwDQoxOTk1LENMRSxBTCxuYWd5Y2gwMSwxODg4ODkwDQoxOTk1LENMRSxBTCxoZXJzaG9yMDEsMTUwMDAwMA0KMTk5NSxDTEUsQUwsbWVzYWpvMDEsMTQ0NzIyMw0KMTk5NSxDTEUsQUwsYXNzZW5wYTAxLDEyODcwMDANCjE5OTUsQ0xFLEFMLHNvcnJlcGEwMSwxMDk4MjIzDQoxOTk1LENMRSxBTCx0aG9tZWppMDEsODI1MDAwDQoxOTk1LENMRSxBTCxjbGFya21hMDEsNzUwMDAwDQoxOTk1LENMRSxBTCxvbHNvbmdyMDEsNzUwMDAwDQoxOTk1LENMRSxBTCxwbHVua2VyMDEsNzI1MDAwDQoxOTk1LENMRSxBTCx3aW5maWRhMDEsNjAwMDAwDQoxOTk1LENMRSxBTCxwZW5hdG8wMSw1MTY2NjYNCjE5OTUsQ0xFLEFMLGVzcGluYWwwMSw0NTAwMDANCjE5OTUsQ0xFLEFMLGtpcmJ5d2EwMSwzNjI1MDANCjE5OTUsQ0xFLEFMLGJsYWNrYnUwMiwzNTAwMDANCjE5OTUsQ0xFLEFMLHBvb2xlamkwMiwzNTAwMDANCjE5OTUsQ0xFLEFMLGdyaW1zamEwMSwzMjUwMDANCjE5OTUsQ0xFLEFMLG1hbGRvY2EwMSwyMDAwMDANCjE5OTUsQ0xFLEFMLGJ1cm5pamUwMSwxODUwMDANCjE5OTUsQ0xFLEFMLGFtYXJvcnUwMiwxNzUwMDANCjE5OTUsQ0xFLEFMLHJhbWlybWEwMiwxNTAwMDANCjE5OTUsQ0xFLEFMLGxldmlzamUwMSwxMjgwMDANCjE5OTUsQ0xFLEFMLGVtYnJlYWwwMSwxMjUwMDANCjE5OTUsQ0xFLEFMLHNodWV5cGEwMSwxMjUwMDANCjE5OTUsQ0xFLEFMLHRhdmFyanUwMSwxMjAwMDANCjE5OTUsQ0xFLEFMLGxvcGV6YWwwMiwxMTgwMDANCjE5OTUsQ0xFLEFMLHBlcnJ5aGUwMSwxMTAwMDANCjE5OTUsQ0xFLEFMLGdpbGVzYnIwMiwxMDkwMDANCjE5OTUsQ0xFLEFMLG9nZWFjaDAxLDEwOTAwMA0KMTk5NSxERVQsQUwsZmllbGRjZTAxLDkyMzc1MDANCjE5OTUsREVULEFMLGhlbm5lbWkwMSw0ODMzMzM0DQoxOTk1LERFVCxBTCxmcnltYXRyMDEsNDE1MDAwMA0KMTk5NSxERVQsQUwsd2hpdGFsbzAxLDM3ODMzMzQNCjE5OTUsREVULEFMLG1vb3JlbWkwMSwzMzMzMzMzDQoxOTk1LERFVCxBTCx3ZWxsc2RhMDEsMjE5MTY2Nw0KMTk5NSxERVQsQUwsY3VydGljaDAxLDE5MDAwMDANCjE5OTUsREVULEFMLGdpYnNva2kwMSwxMzAwMDAwDQoxOTk1LERFVCxBTCx0cmFtbWFsMDEsMTMwMDAwMA0KMTk5NSxERVQsQUwsYm9ldmVqbzAxLDYwMDAwMA0KMTk5NSxERVQsQUwsZG9oZXJqbzAyLDM3NTAwMA0KMTk5NSxERVQsQUwsc2FtdWVqdTAxLDM3NTAwMA0KMTk5NSxERVQsQUwsY3V5bGVtaTAxLDM0MDAwMA0KMTk5NSxERVQsQUwsc3R1YmJmcjAxLDMxMDAwMA0KMTk5NSxERVQsQUwsdGluZ2xybzAxLDI4MDAwMA0KMTk5NSxERVQsQUwsZmxldGNzYzAxLDI1MDAwMA0KMTk5NSxERVQsQUwsZ29tZXpjaDAyLDIxNTAwMA0KMTk5NSxERVQsQUwsZ3Jvb21idTAxLDE5MDAwMA0KMTk5NSxERVQsQUwsYm9oYW5icjAxLDE4NTAwMA0KMTk5NSxERVQsQUwsZmxhaGVqbzAxLDE3MjUwMA0KMTk5NSxERVQsQUwsZ2FyZGltaTAxLDE2NTAwMA0KMTk5NSxERVQsQUwsZ29ocmdyMDEsMTY1MDAwDQoxOTk1LERFVCxBTCx3aWNrYWtlMDEsMTYwMDAwDQoxOTk1LERFVCxBTCxjaHJpc21pMDIsMTU2MDAwDQoxOTk1LERFVCxBTCxiYXV0aWRhMDEsMTQ1MDAwDQoxOTk1LERFVCxBTCxiZXJnbXNlMDEsMTM3NTAwDQoxOTk1LERFVCxBTCxsaW1ham8wMSwxMjkwMDANCjE5OTUsREVULEFMLGhhbGxqbzAyLDEyMDAwMA0KMTk5NSxERVQsQUwsaGlnZ2libzAyLDEwOTAwMA0KMTk5NSxERVQsQUwsbGlyYWZlMDEsMTA5MDAwDQoxOTk1LERFVCxBTCxtYXhjeWJyMDEsMTA5MDAwDQoxOTk1LERFVCxBTCxzdGV2ZXRvMDEsMTA5MDAwDQoxOTk1LERFVCxBTCx3aGl0ZWRlMDQsMTA5MDAwDQoxOTk1LEtDQSxBTCxqb3luZXdhMDEsNDgwMDAwMA0KMTk5NSxLQ0EsQUwsYXBwaWVrZTAxLDQzODc1MDANCjE5OTUsS0NBLEFMLGdhZ25lZ3IwMSw0MzY2NjY3DQoxOTk1LEtDQSxBTCxtb250Z2plMDEsNDE2NjY2Nw0KMTk5NSxLQ0EsQUwsZ29yZG90bzAxLDMzMDAwMDANCjE5OTUsS0NBLEFMLGdhZXR0Z2EwMSwxMDY1MDAwDQoxOTk1LEtDQSxBTCxndWJpY21hMDEsNzUwMDAwDQoxOTk1LEtDQSxBTCxtYXluZWJyMDEsNjc1MDAwDQoxOTk1LEtDQSxBTCxtZWFjaHJ1MDEsNDY1MDAwDQoxOTk1LEtDQSxBTCxoYW1lbGJvMDEsNDM1MDAwDQoxOTk1LEtDQSxBTCxob3dhcmRhMDIsMzg1MDAwDQoxOTk1LEtDQSxBTCxwaWNoYWhpMDEsMzYwMDAwDQoxOTk1LEtDQSxBTCxib3JkZXBhMDEsMzEwMDAwDQoxOTk1LEtDQSxBTCxqYW1lc2NoMDIsMzEwMDAwDQoxOTk1LEtDQSxBTCxicm93bnRvMDUsMzAwMDAwDQoxOTk1LEtDQSxBTCxjb2xlbXZpMDEsMjUwMDAwDQoxOTk1LEtDQSxBTCxicmV3ZWJpMDEsMjIwMDAwDQoxOTk1LEtDQSxBTCxoYW5leWNoMDEsMjIwMDAwDQoxOTk1LEtDQSxBTCxtYWduYW1pMDEsMjIwMDAwDQoxOTk1LEtDQSxBTCxyYXNtdWRlMDEsMTg1MDAwDQoxOTk1LEtDQSxBTCxsaW50b2RvMDEsMTU5MDAwDQoxOTk1LEtDQSxBTCxoaWF0dHBoMDEsMTUwMDAwDQoxOTk1LEtDQSxBTCxtZXJjZWhlMDEsMTQ5MDAwDQoxOTk1LEtDQSxBTCxnb29kd3RvMDEsMTQ1MDAwDQoxOTk1LEtDQSxBTCxsb2NraGtlMDEsMTI0MDAwDQoxOTk1LEtDQSxBTCxjYWNlcmVkMDEsMTA5MDAwDQoxOTk1LEtDQSxBTCxjb29rc2JyMDEsMTA5MDAwDQoxOTk1LEtDQSxBTCxkYW1vbmpvMDEsMTA5MDAwDQoxOTk1LEtDQSxBTCxncm90ZWplMDIsMTA5MDAwDQoxOTk1LEtDQSxBTCxodWlzbXJpMDEsMTA5MDAwDQoxOTk1LEtDQSxBTCxtb3Rham8wMSwxMDkwMDANCjE5OTUsS0NBLEFMLG5vcm1hbGUwMSwxMDkwMDANCjE5OTUsS0NBLEFMLG51bm5ham8wMSwxMDkwMDANCjE5OTUsS0NBLEFMLHBpdHRzamkwMSwxMDkwMDANCjE5OTUsS0NBLEFMLHJhbmRham8wMSwxMDkwMDANCjE5OTUsS0NBLEFMLHN0eW5lY2gwMSwxMDkwMDANCjE5OTUsS0NBLEFMLHN3ZWVubWkwMSwxMDkwMDANCjE5OTUsS0NBLEFMLHRvcnJlZGkwMSwxMDkwMDANCjE5OTUsS0NBLEFMLHR1Y2tlbWkwMSwxMDkwMDANCjE5OTUsS0NBLEFMLHZpdGllam8wMSwxMDkwMDANCjE5OTUsTUlOLEFMLHB1Y2tla2kwMSw2MzAwMDAwDQoxOTk1LE1JTixBTCxhZ3VpbHJpMDEsNDM1MDAwMA0KMTk5NSxNSU4sQUwsdGFwYW5rZTAxLDM2MDAwMDANCjE5OTUsTUlOLEFMLGtub2JsY2gwMSwyOTg3NTAwDQoxOTk1LE1JTixBTCxlcmlja3NjMDEsMTg2MjUwMA0KMTk5NSxNSU4sQUwsZ3V0aHJtYTAxLDgxMDAwMA0KMTk5NSxNSU4sQUwsbGVpdXNzYzAxLDc2MDAwMA0KMTk5NSxNSU4sQUwsbXVub3pwZTAxLDcyNTAwMA0KMTk5NSxNSU4sQUwsY29sZWFsMDEsNTAwMDAwDQoxOTk1LE1JTixBTCxjbGFya2plMDEsNDAwMDAwDQoxOTk1LE1JTixBTCxyZWJvdWplMDEsMjUwMDAwDQoxOTk1LE1JTixBTCxtZXJ1bG1hMDEsMjAwMDAwDQoxOTk1LE1JTixBTCxtYWhvbXBhMDEsMTc3NTAwDQoxOTk1LE1JTixBTCxoYWxlY2gwMSwxNjc1MDANCjE5OTUsTUlOLEFMLHdhbGJlbWEwMSwxNjYwMDANCjE5OTUsTUlOLEFMLG1lYXJlcGEwMSwxNjUwMDANCjE5OTUsTUlOLEFMLG1jY2FyZGEwMSwxNTAwMDANCjE5OTUsTUlOLEFMLHRyb21ibWkwMSwxNDAwMDANCjE5OTUsTUlOLEFMLHN0ZXZlZGEwMSwxMjUwMDANCjE5OTUsTUlOLEFMLGd1YXJkZWQwMSwxMjI1MDANCjE5OTUsTUlOLEFMLGJlY2tlcmkwMSwxMjAwMDANCjE5OTUsTUlOLEFMLHJvYmVycmkwMiwxMjAwMDANCjE5OTUsTUlOLEFMLGhhcnJpZ3IwMiwxMTUwMDANCjE5OTUsTUlOLEFMLHNjaHVsZXIwMSwxMTMwMDANCjE5OTUsTUlOLEFMLGhvY2tpZGUwMSwxMTIwMDANCjE5OTUsTUlOLEFMLGNvb21lcm8wMSwxMDkwMDANCjE5OTUsTUlOLEFMLGNvcmRvbWEwMSwxMDkwMDANCjE5OTUsTUlOLEFMLGxhd3RvbWEwMiwxMDkwMDANCjE5OTUsTUlOLEFMLG1hc3RlZGEwMSwxMDkwMDANCjE5OTUsTUlOLEFMLG11bm96b3MwMSwxMDkwMDANCjE5OTUsTUlOLEFMLHJhZGtlYnIwMSwxMDkwMDANCjE5OTUsTUlOLEFMLHN0YWhvc2MwMSwxMDkwMDANCjE5OTUsTUlOLEFMLHdhdGtpc2MwMSwxMDkwMDANCjE5OTUsTUw0LEFMLHZhdWdoZ3IwMSw0ODc1MDAwDQoxOTk1LE1MNCxBTCx3ZWdtYWJpMDEsMjM3NTAwMA0KMTk5NSxNTDQsQUwsaGFtaWxkYTAyLDIxMzg4OTANCjE5OTUsTUw0LEFMLHNlaXR6a2UwMSw5Mzg4OTANCjE5OTUsTUw0LEFMLGZldHRlbWkwMSw5MDAwMDANCjE5OTUsTUw0LEFMLHNjYW5sYm8wMSw4MDAwMDANCjE5OTUsTUw0LEFMLGJvbmVzcmkwMSw1ODE5NDUNCjE5OTUsTUw0LEFMLGxpc3RhcGEwMSw1MDAwMDANCjE5OTUsTUw0LEFMLG9saXZlam8wMSw0NjIxMDANCjE5OTUsTUw0LEFMLGVsZHJlY2EwMSw0NTAwMDANCjE5OTUsTUw0LEFMLHN1cmhvYmowMSw0MjUwMDANCjE5OTUsTUw0LEFMLG5pbHNzZGEwMSwyOTAwMDANCjE5OTUsTUw0LEFMLHdhcmR0dTAxLDI1MDAwMA0KMTk5NSxNTDQsQUwsamFoYWpvMDEsMjI5MDAwDQoxOTk1LE1MNCxBTCxodWxzZWRhMDEsMjIwMDAwDQoxOTk1LE1MNCxBTCx2YWxlbmpvMDMsMTU4MDAwDQoxOTk1LE1MNCxBTCxsbG95ZGdyMDEsMTU1MDAwDQoxOTk1LE1MNCxBTCxtaWVza21hMDEsMTM1MDAwDQoxOTk1LE1MNCxBTCxpZ25hc21pMDEsMTI1MDAwDQoxOTk1LE1MNCxBTCxtZXJjZWpvMDIsMTI1MDAwDQoxOTk1LE1MNCxBTCx2aW5hZmUwMSwxMjUwMDANCjE5OTUsTUw0LEFMLGJyb25ramUwMSwxMTYwMDANCjE5OTUsTUw0LEFMLG1pcmFuYW4wMSwxMTUwMDANCjE5OTUsTUw0LEFMLG1hdGhlbWkwMSwxMTAwMDANCjE5OTUsTUw0LEFMLGNpcmlsamUwMSwxMDkwMDANCjE5OTUsTUw0LEFMLGRpYmJscm8wMSwxMDkwMDANCjE5OTUsTUw0LEFMLGdpdmVuYnIwMSwxMDkwMDANCjE5OTUsTUw0LEFMLGthcmxzYzAxLDEwOTAwMA0KMTk5NSxNTDQsQUwsbG9yZXRtYTAxLDEwOTAwMA0KMTk5NSxNTDQsQUwsbWNhbmRqYTAxLDEwOTAwMA0KMTk5NSxNTDQsQUwscmV5ZXNhbDAxLDEwOTAwMA0KMTk5NSxNTDQsQUwscmlnaHRybzAxLDEwOTAwMA0KMTk5NSxNTDQsQUwscm9iZXJzaTAxLDEwOTAwMA0KMTk5NSxNTDQsQUwsc2x1c2FqbzAxLDEwOTAwMA0KMTk5NSxNTDQsQUwsc3BhcmtzdDAxLDEwOTAwMA0KMTk5NSxOWUEsQUwsbWNkb3dqYTAxLDU0MDAwMDANCjE5OTUsTllBLEFMLHRhcnRhZGEwMSw1MzAwMDAwDQoxOTk1LE5ZQSxBTCxrZXlqaTAxLDQ4NzM3MDANCjE5OTUsTllBLEFMLGJvZ2dzd2EwMSw0NzI0MzE2DQoxOTk1LE5ZQSxBTCxtYXR0aWRvMDEsNDQyMDAwMA0KMTk5NSxOWUEsQUwscGVyZXptZTAxLDM0NTAwMDANCjE5OTUsTllBLEFMLHdldHRlam8wMSwzMzc1MDAwDQoxOTk1LE5ZQSxBTCxvbmVpbHBhMDEsMjg1MDAwMA0KMTk5NSxOWUEsQUwsaG93ZXN0MDEsMjMwMDAwMA0KMTk5NSxOWUEsQUwsZmVybmF0bzAxLDE2MzMzMzUNCjE5OTUsTllBLEFMLHBvbG9ubHUwMSwxNTAwMDAwDQoxOTk1LE5ZQSxBTCxsZXlyaWppMDEsMTM1MDAwMA0KMTk5NSxOWUEsQUwsa2FtaWVzYzAxLDExMDAwMDANCjE5OTUsTllBLEFMLGtlbGx5cGEwMywxMDg1MDAwDQoxOTk1LE5ZQSxBTCxzdGFubG1pMDIsOTEyNTAwDQoxOTk1LE5ZQSxBTCxzdHJhd2RhMDEsNjc1MDAwDQoxOTk1LE5ZQSxBTCxiYW5raHNjMDEsNTAwMDAwDQoxOTk1LE5ZQSxBTCx2ZWxhcnJhMDEsNTAwMDAwDQoxOTk1LE5ZQSxBTCx3aWxsaWJlMDIsNDAwMDAwDQoxOTk1LE5ZQSxBTCxqYW1lc2RpMDEsMzUwMDAwDQoxOTk1LE5ZQSxBTCxlbHN0ZWtlMDEsMzAwMDAwDQoxOTk1LE5ZQSxBTCxtYWNkb2JvMDEsMjYwMDAwDQoxOTk1LE5ZQSxBTCx3aWNrbWJvMDEsMjIwMDAwDQoxOTk1LE5ZQSxBTCxoYXJyaWdyMDEsMjAwMDAwDQoxOTk1LE5ZQSxBTCxtYW56YWpvMDEsMTc1MDAwDQoxOTk1LE5ZQSxBTCxoaXRjaHN0MDEsMTI1MDAwDQoxOTk1LE5ZQSxBTCx3aWxsaWdlMDIsMTI1MDAwDQoxOTk1LE5ZQSxBTCxzaWx2ZWRhMDEsMTE2MDAwDQoxOTk1LE5ZQSxBTCxhdXNhbmpvMDEsMTEwMDAwDQoxOTk1LE5ZQSxBTCxib2VocmJyMDEsMTA5MDAwDQoxOTk1LE5ZQSxBTCxkYXZpc3J1MDEsMTA5MDAwDQoxOTk1LE5ZQSxBTCxwYXZsYWRhMDEsMTA5MDAwDQoxOTk1LE5ZQSxBTCxwZXR0aWFuMDEsMTA5MDAwDQoxOTk1LE5ZQSxBTCxyaXZlcm1hMDEsMTA5MDAwDQoxOTk1LE9BSyxBTCxtY2d3aW1hMDEsNjkyNTAwMA0KMTk5NSxPQUssQUwsc2llcnJydTAxLDYyMDAwMDANCjE5OTUsT0FLLEFMLHN0ZWludGUwMSw0MjAwMDAwDQoxOTk1LE9BSyxBTCxoZW5kZXJpMDEsMzgwMDAwMA0KMTk5NSxPQUssQUwsZGFybGlybzAxLDMwMDAwMDANCjE5OTUsT0FLLEFMLGVja2VyZGUwMSwyODYxMTEzDQoxOTk1LE9BSyxBTCxzdG90dHRvMDEsMjA1MDAwMA0KMTk5NSxPQUssQUwsYm9yZGltaTAxLDEzNTAwMDANCjE5OTUsT0FLLEFMLHN0ZXdhZGEwMSwxMDAwMDAwDQoxOTk1LE9BSyxBTCxvbnRpdnN0MDIsOTY1MDAwDQoxOTk1LE9BSyxBTCxqYXZpZXN0MDEsNzIyMjIzDQoxOTk1LE9BSyxBTCxhbGRyZW1pMDEsNDMwMDAwDQoxOTk1LE9BSyxBTCx2YW5wb3RvMDEsMzk3MDAwDQoxOTk1LE9BSyxBTCxoYXJrZW1pMDEsMzI1MDAwDQoxOTk1LE9BSyxBTCxnYWxsZW1pMDEsMzAwMDAwDQoxOTk1LE9BSyxBTCxjb3JzaWppMDEsMjM4ODg5DQoxOTk1LE9BSyxBTCxiZXJyb2dlMDEsMjM1MDAwDQoxOTk1LE9BSyxBTCxicm9zaXNjMDEsMjM1MDAwDQoxOTk1LE9BSyxBTCxob25leXJpMDEsMjAwMDAwDQoxOTk1LE9BSyxBTCxsZWlwZWRhMDEsMTk1MDAwDQoxOTk1LE9BSyxBTCxnYXRlc2JyMDEsMTkwMDAwDQoxOTk1LE9BSyxBTCxicmlzY2pvMDEsMTUwMDAwDQoxOTk1LE9BSyxBTCxwYXF1ZWNyMDEsMTQ1MDAwDQoxOTk1LE9BSyxBTCxrYXJzYXN0MDEsMTM1MDAwDQoxOTk1LE9BSyxBTCxyZXllc2NhMDEsMTMwMDAwDQoxOTk1LE9BSyxBTCx0b21iZWFuMDEsMTI5MDAwDQoxOTk1LE9BSyxBTCxtb2hsZW1pMDEsMTI1MDAwDQoxOTk1LE9BSyxBTCxhY3JlbWEwMSwxMjAwMDANCjE5OTUsT0FLLEFMLGhlbGZhZXIwMSwxMTIwMDANCjE5OTUsT0FLLEFMLHlvdW5nZXIwMiwxMTEwMDANCjE5OTUsT0FLLEFMLGdpYW1iamEwMSwxMDkwMDANCjE5OTUsT0FLLEFMLGhlcnJlam8wMiwxMDkwMDANCjE5OTUsT0FLLEFMLGpvaG5zZG8wNCwxMDkwMDANCjE5OTUsT0FLLEFMLHByaWV0YXIwMSwxMDkwMDANCjE5OTUsT0FLLEFMLHdhc2Rpam8wMSwxMDkwMDANCjE5OTUsT0FLLEFMLHdlbmdlZG8wMSwxMDkwMDANCjE5OTUsT0FLLEFMLHdvamNpc3QwMSwxMDkwMDANCjE5OTUsU0VBLEFMLGdyaWZma2UwMiw3NjAwMDAwDQoxOTk1LFNFQSxBTCxqb2huc3JhMDUsNDY3NTAwMA0KMTk5NSxTRUEsQUwsYm9zaW9jaDAxLDQyNTAwMDANCjE5OTUsU0VBLEFMLGJ1aG5lamEwMSw0MDY2NjY2DQoxOTk1LFNFQSxBTCxtYXJ0aWVkMDEsMzU5MTM2Nw0KMTk5NSxTRUEsQUwsaGliYmFncjAxLDI2NTAwMDANCjE5OTUsU0VBLEFMLG1hcnRpdGkwMiwxMDI1MDAwDQoxOTk1LFNFQSxBTCxmcmV5c3QwMSw5MTUwMDANCjE5OTUsU0VBLEFMLGZlcm1pZmUwMSw5MDAwMDANCjE5OTUsU0VBLEFMLGZsZW1pZGEwMSw3NTAwMDANCjE5OTUsU0VBLEFMLGJsb3dlbWkwMSw2OTQ0NDUNCjE5OTUsU0VBLEFMLGJlbGNodGkwMSw1ODAwMDANCjE5OTUsU0VBLEFMLGtyZXV0Y2gwMSw1NTUwMDANCjE5OTUsU0VBLEFMLHJvZHJpYWwwMSw0NDIzMzMNCjE5OTUsU0VBLEFMLGNvcmFqbzAxLDQyNTAwMA0KMTk5NSxTRUEsQUwsc29qb2x1MDEsNDAwMDAwDQoxOTk1LFNFQSxBTCxuZWxzb2plMDEsMjc1MDAwDQoxOTk1LFNFQSxBTCxhbWFyYXJpMDEsMjUwMDAwDQoxOTk1LFNFQSxBTCxheWFsYWJvMDEsMjUwMDAwDQoxOTk1LFNFQSxBTCx0aHVybWdhMDEsMjUwMDAwDQoxOTk1LFNFQSxBTCxkaWF6YWwwMSwyMDAwMDANCjE5OTUsU0VBLEFMLHN0cmFuZG8wMSwxOTUwMDANCjE5OTUsU0VBLEFMLHdpbHNvZGEwMSwxNzUwMDANCjE5OTUsU0VBLEFMLHJpc2xlYmkwMSwxMzUwMDANCjE5OTUsU0VBLEFMLGRhdmlzdGkwMSwxMjAwMDANCjE5OTUsU0VBLEFMLGNvbnZlamkwMSwxMTUwMDANCjE5OTUsU0VBLEFMLG5ld2ZpbWEwMSwxMTUwMDANCjE5OTUsU0VBLEFMLHRvcnJlc2EwMSwxMTUwMDANCjE5OTUsU0VBLEFMLHBpcmtsZ3IwMSwxMTI1MDANCjE5OTUsU0VBLEFMLGJyYWdnZGEwMSwxMDkwMDANCjE5OTUsU0VBLEFMLGNhcm1vcmEwMSwxMDkwMDANCjE5OTUsU0VBLEFMLGNoYXJsbm8wMSwxMDkwMDANCjE5OTUsU0VBLEFMLHZpbGxvcm8wMSwxMDkwMDANCjE5OTUsU0VBLEFMLHdlbGxzYm8wMSwxMDkwMDANCjE5OTUsU0VBLEFMLHdpZGdlY2gwMSwxMDkwMDANCjE5OTUsVEVYLEFMLGNsYXJrd2kwMiw1NjQ3NzI2DQoxOTk1LFRFWCxBTCxnb256YWp1MDMsNTQwMDAwMA0KMTk5NSxURVgsQUwscm9nZXJrZTAxLDM3NTAwMDANCjE5OTUsVEVYLEFMLG5peG9ub3QwMSwzMTUwMDAwDQoxOTk1LFRFWCxBTCxncm9zc2tlMDEsMjg4ODg5MA0KMTk5NSxURVgsQUwscm9kcmlpdjAxLDI2NzUwMDANCjE5OTUsVEVYLEFMLHBhbG1lZGUwMSwxOTI1MDAwDQoxOTk1LFRFWCxBTCx0ZXdrc2JvMDEsMTUwMDAwMA0KMTk5NSxURVgsQUwsbWNsZW1tYTAxLDEyMTM4OTANCjE5OTUsVEVYLEFMLHRldHRsbWkwMSwxMDAwMDAwDQoxOTk1LFRFWCxBTCx2YWxsZWRhMDEsNjE5NDQ1DQoxOTk1LFRFWCxBTCxydXNzZWplMDEsNjE1MDAwDQoxOTk1LFRFWCxBTCxtY2Rvd3JvMDEsNTc1MDAwDQoxOTk1LFRFWCxBTCxjb29rZGUwMSw0NDAwMDANCjE5OTUsVEVYLEFMLHBhZ2xpbWkwMSwzNzUwMDANCjE5OTUsVEVYLEFMLHBhdmxpcm8wMSwyNTUwMDANCjE5OTUsVEVYLEFMLHdoaXRlbWEwMiwyMjAwMDANCjE5OTUsVEVYLEFMLHdvcnRoY3IwMSwyMDUwMDANCjE5OTUsVEVYLEFMLGZyeWVqZTAxLDE5MDAwMA0KMTk5NSxURVgsQUwsZ3JlZXJydTAxLDE3NTAwMA0KMTk5NSxURVgsQUwsb2xpdmVkYTAyLDE2NTAwMA0KMTk5NSxURVgsQUwsdm9pZ3RqYTAxLDE1NTAwMA0KMTk5NSxURVgsQUwsZm94ZXIwMSwxNTQwMDANCjE5OTUsVEVYLEFMLGJlbHRyZXMwMSwxNTAwMDANCjE5OTUsVEVYLEFMLGdpbGJlMDEsMTMwMDAwDQoxOTk1LFRFWCxBTCx2b3NiZWVkMDEsMTI1MDAwDQoxOTk1LFRFWCxBTCxvcnRpemx1MDEsMTE2NTAwDQoxOTk1LFRFWCxBTCxzbWl0aGRhMDUsMTEyMDAwDQoxOTk1LFRFWCxBTCxhbGJlcmpvMDEsMTA5MDAwDQoxOTk1LFRFWCxBTCxicmFuZG1hMDEsMTA5MDAwDQoxOTk1LFRFWCxBTCxidXJyb3RlMDEsMTA5MDAwDQoxOTk1LFRFWCxBTCxkYXJ3aWRhMDEsMTA5MDAwDQoxOTk1LFRFWCxBTCxoZXJlZHdpMDEsMTA5MDAwDQoxOTk1LFRFWCxBTCxuaWNodGNoMDEsMTA5MDAwDQoxOTk1LFRPUixBTCxjb25lZGEwMSw4MDAwMDAwDQoxOTk1LFRPUixBTCxjYXJ0ZWpvMDEsNzUwMDAwMA0KMTk5NSxUT1IsQUwsb2xlcnVqbzAxLDU3NTAwMDANCjE5OTUsVE9SLEFMLGFsb21hcm8wMSw1NTAwMDAwDQoxOTk1LFRPUixBTCx3YXJkZHUwMSw0NzUwMDAwDQoxOTk1LFRPUixBTCxtb2xpdHBhMDEsNDUwMDAwMA0KMTk5NSxUT1IsQUwsd2hpdGVkZTAzLDQwNTAwMDANCjE5OTUsVE9SLEFMLGd1em1hanUwMSwyODAwMDAwDQoxOTk1LFRPUixBTCxoZW50Z3BhMDEsMTI1MDAwMA0KMTk5NSxUT1IsQUwsbGVpdGVhbDAxLDc5NTAwMA0KMTk5NSxUT1IsQUwsc3ByYWdlZDAyLDc2MDAwMA0KMTk5NSxUT1IsQUwsY294ZGEwMSw3MDAwMDANCjE5OTUsVE9SLEFMLGNhc3RpdG8wMiw2MTA1MDANCjE5OTUsVE9SLEFMLHRpbWxpbWkwMSw1MDAwMDANCjE5OTUsVE9SLEFMLGh1ZmZtaTAxLDM2MDAwMA0KMTk5NSxUT1IsQUwsZGFyd2lkYTAxLDMwMDAwMA0KMTk5NSxUT1IsQUwscGFycmlsYTAyLDI5MDAwMA0KMTk5NSxUT1IsQUwsa25vcnJyYTAxLDI0MDAwMA0KMTk5NSxUT1IsQUwsbWFsZG9jYTAxLDIwMDAwMA0KMTk5NSxUT1IsQUwsaGFsbGRhMDEsMTc1MDAwDQoxOTk1LFRPUixBTCx3aWxsaXdvMDIsMTc1MDAwDQoxOTk1LFRPUixBTCxjZWRlbmRvMDEsMTQwMDAwDQoxOTk1LFRPUixBTCxnb256YWFsMDEsMTMwMDAwDQoxOTk1LFRPUixBTCxncmVlbnNoMDEsMTMwMDAwDQoxOTk1LFRPUixBTCxwZXJlenJvMDEsMTEyNTAwDQoxOTk1LFRPUixBTCxjYXJyYWdpMDEsMTA5MDAwDQoxOTk1LFRPUixBTCxjcmFidHRpMDEsMTA5MDAwDQoxOTk1LFRPUixBTCxodXJ0YWVkMDEsMTA5MDAwDQoxOTk1LFRPUixBTCxqb3JkYXJpMDMsMTA5MDAwDQoxOTk1LFRPUixBTCxtYXJ0aXNhMDEsMTA5MDAwDQoxOTk1LFRPUixBTCxtZW5oYXBhMDEsMTA5MDAwDQoxOTk1LFRPUixBTCxwZXJlenRvMDMsMTA5MDAwDQoxOTk1LFRPUixBTCxyb2dlcmppMDIsMTA5MDAwDQoxOTk1LEFUTCxOTCxtYWRkdWdyMDEsNjUwMDAwMA0KMTk5NSxBVEwsTkwsanVzdGlkYTAxLDUyMDAwMDANCjE5OTUsQVRMLE5MLGdyaXNzbWEwMiw0OTUwMDAwDQoxOTk1LEFUTCxOTCxzbW9sdGpvMDEsNDg5NDQ0NQ0KMTk5NSxBVEwsTkwsZ2xhdml0bzAyLDQ3NTAwMDANCjE5OTUsQVRMLE5MLG1jZ3JpZnIwMSw0Mjc1MDAwDQoxOTk1LEFUTCxOTCxhdmVyeXN0MDEsNDAwMDAwMA0KMTk5NSxBVEwsTkwsYmxhdXNqZTAxLDM0MjAwMDANCjE5OTUsQVRMLE5MLG1lcmNra2UwMSwyMjUwMDAwDQoxOTk1LEFUTCxOTCxzdGFudG1pMDIsMTUwMDAwMA0KMTk5NSxBVEwsTkwsbGVta2VtYTAxLDEyNTAwMDANCjE5OTUsQVRMLE5MLGJlZHJvc3QwMSw3NTAwMDANCjE5OTUsQVRMLE5MLGJlbGxpcmEwMSw1NTAwMDANCjE5OTUsQVRMLE5MLG9icmllY2gwMSw1NTAwMDANCjE5OTUsQVRMLE5MLG1jbWljZ3IwMSwzMDUwMDANCjE5OTUsQVRMLE5MLHNtaXRoZHcwMSwzMDAwMDANCjE5OTUsQVRMLE5MLHNoYXJwbWkwMSwyNTUwMDANCjE5OTUsQVRMLE5MLHdvaGxlbWEwMSwyMDI1MDANCjE5OTUsQVRMLE5MLGtsZXNrcnkwMSwxOTAwMDANCjE5OTUsQVRMLE5MLGxvcGV6amEwMSwxNTAwMDANCjE5OTUsQVRMLE5MLGpvbmVzY2gwNiwxMTQwMDANCjE5OTUsQVRMLE5MLGJvcmJvcGUwMiwxMTE1MDANCjE5OTUsQVRMLE5MLGtlbGx5bWkwMiwxMTE1MDANCjE5OTUsQVRMLE5MLG9saXZham8wMSwxMTE1MDANCjE5OTUsQVRMLE5MLGNsb250YnIwMSwxMDkwMDANCjE5OTUsQVRMLE5MLG1vcmRlbWkwMSwxMDkwMDANCjE5OTUsQVRMLE5MLHBlbmFhbDAxLDEwOTAwMA0KMTk5NSxBVEwsTkwscGVyZXplZDAyLDEwOTAwMA0KMTk5NSxBVEwsTkwsc2NobWlqYTAxLDEwOTAwMA0KMTk5NSxDSE4sTkwsZ3JhY2VtYTAxLDQ0MDAwMDANCjE5OTUsQ0hOLE5MLHNvc2FzYTAxLDQzMDAwMDANCjE5OTUsQ0hOLE5MLG15ZXJzcmEwMSw0MjMzMzM0DQoxOTk1LENITixOTCxkdW5zdHNoMDEsMzc3NTAwMA0KMTk5NSxDSE4sTkwsZ3V6bWFqbzAxLDM2NzUwMDANCjE5OTUsQ0hOLE5MLG1jcmFlYnIwMSwyNjUwMDAwDQoxOTk1LENITixOTCxuYXZhcmphMDEsMTMwMDAwMA0KMTk5NSxDSE4sTkwsc2FuY2hyZTAxLDY3NTAwMA0KMTk5NSxDSE4sTkwsaGlja2VicjAxLDQwMDAwMA0KMTk5NSxDSE4sTkwseW91bmdhbjAxLDM4MDAwMA0KMTk5NSxDSE4sTkwscGVyZXptaTAxLDM0MDAwMA0KMTk5NSxDSE4sTkwsam9obnNobzAxLDMyNTAwMA0KMTk5NSxDSE4sTkwsbmFiaG9jaDAxLDMwMDAwMA0KMTk5NSxDSE4sTkwsY2FzdGlmcjAxLDI1MDAwMA0KMTk5NSxDSE4sTkwsYmFua3N3aTAxLDI0MDAwMA0KMTk5NSxDSE4sTkwscHJhdHR0bzAyLDIxNTAwMA0KMTk5NSxDSE4sTkwsYnVsbGlqaTAxLDE4NzUwMA0KMTk5NSxDSE4sTkwsdHJhY2hzdDAxLDE4MDAwMA0KMTk5NSxDSE4sTkwsY2FzaWFsYTAxLDE2MDAwMA0KMTk5NSxDSE4sTkwsZm9zdGVrZTAxLDE0MDAwMA0KMTk5NSxDSE4sTkwsaGVybmFqbzAxLDEzNTAwMA0KMTk5NSxDSE4sTkwsa21ha2pvMDEsMTMwMDAwDQoxOTk1LENITixOTCx3YWxrZW1pMDEsMTI1MDAwDQoxOTk1LENITixOTCxidWxsZXNjMDEsMTE1MDAwDQoxOTk1LENITixOTCx3ZW5kZXR1MDEsMTEyMDAwDQoxOTk1LENITixOTCxhZGFtc3RlMDEsMTA5MDAwDQoxOTk1LENITixOTCxmcmFuY21hMDEsMTA5MDAwDQoxOTk1LENITixOTCxnYXJjZXJpMDEsMTA5MDAwDQoxOTk1LENITixOTCxoYW5leXRvMDEsMTA5MDAwDQoxOTk1LENITixOTCxodWJiYW1pMDEsMTA5MDAwDQoxOTk1LENITixOTCxyaXZlcnJvMDEsMTA5MDAwDQoxOTk1LENITixOTCx0aW1tb296MDEsMTA5MDAwDQoxOTk1LENJTixOTCxsYXJraWJhMDEsNTkwMDAwMA0KMTk5NSxDSU4sTkwscmlqb2pvMDEsNTc1MDAwMA0KMTk5NSxDSU4sTkwsc21pbGVqbzAxLDQ5NzUwMDANCjE5OTUsQ0lOLE5MLHNhbmRlZGUwMiwzNjY2NjY3DQoxOTk1LENJTixOTCxnYW50cm8wMSwzNjMzMzM1DQoxOTk1LENJTixOTCxtb3JyaWhhMDIsMzMwMDAwMA0KMTk5NSxDSU4sTkwsc2FuZGVyZTAyLDE5NzUwMDANCjE5OTUsQ0lOLE5MLGJyYW50amUwMSwxNzUwMDAwDQoxOTk1LENJTixOTCxoZXJuYXhhMDEsMTQ3ODMzNA0KMTk5NSxDSU4sTkwsamFja3NtaTAyLDEyNTAwMDANCjE5OTUsQ0lOLE5MLG1jZWxyY2gwMSw4NTAwMDANCjE5OTUsQ0lOLE5MLHNjaG91cGUwMSw3NjI3NzgNCjE5OTUsQ0lOLE5MLGh1bnRlYnIwMSw3NDAwMDANCjE5OTUsQ0lOLE5MLHRhdWJlZWQwMSw3MTAwMDANCjE5OTUsQ0lOLE5MLGhvd2FydGgwMSw2NzUwMDANCjE5OTUsQ0lOLE5MLHNhbnRpYmUwMSw2NTAwMDANCjE5OTUsQ0lOLE5MLGJyb3dudG8wNSw1ODMzMzMNCjE5OTUsQ0lOLE5MLGJlcnJ5ZGEwMSw1ODAwMDANCjE5OTUsQ0lOLE5MLGFudGhvZXIwMSw1NzUwMDANCjE5OTUsQ0lOLE5MLGhhcnJpbGUwMSw1MjIyMjMNCjE5OTUsQ0lOLE5MLHdhbHRvamUwMSw1MDAwMDANCjE5OTUsQ0lOLE5MLGJvb25lYnIwMSw0MDAwMDANCjE5OTUsQ0lOLE5MLGJyYW5zamUwMSwzMDAwMDANCjE5OTUsQ0lOLE5MLHJ1ZmZpam8wMSwxOTUwMDANCjE5OTUsQ0lOLE5MLGxld2lzbWEwMSwxOTAwMDANCjE5OTUsQ0lOLE5MLHZpb2xhZnIwMSwxOTAwMDANCjE5OTUsQ0lOLE5MLHB1Z2h0aTAxLDE3MDAwMA0KMTk5NSxDSU4sTkwsY2FycmFoZTAxLDE1MDAwMA0KMTk5NSxDSU4sTkwscGVubmlicjAxLDEzNTAwMA0KMTk5NSxDSU4sTkwsZ3JlZW53aTAxLDEzMDAwMA0KMTk5NSxDSU4sTkwsd2lsc29uaTAxLDEyNTAwMA0KMTk5NSxDSU4sTkwsamFydmlrZTAxLDExNTAwMA0KMTk5NSxDSU4sTkwsbml0a29jajAxLDEwOTAwMA0KMTk5NSxDSU4sTkwsb3dlbnNlcjAxLDEwOTAwMA0KMTk5NSxDT0wsTkwsd2Fsa2VsYTAxLDUwMTkzODINCjE5OTUsQ09MLE5MLGdhbGFyYW4wMSwzOTUwMDAwDQoxOTk1LENPTCxOTCxzd2lmdGJpMDIsMzkzMzMzMw0KMTk5NSxDT0wsTkwsYmljaGVkYTAxLDM0MDAwMDANCjE5OTUsQ09MLE5MLGJ1cmtzZWwwMSwzMzMzMzMzDQoxOTk1LENPTCxOTCx3ZWlzc3dhMDEsMjI1NjQ0Ng0KMTk5NSxDT0wsTkwsZnJlZW1tYTAyLDE5MDAwMDANCjE5OTUsQ09MLE5MLGdpcmFyam8wMSwxODUwMDAwDQoxOTk1LENPTCxOTCxob2xtZWRhMDEsMTQ1MDAwMA0KMTk5NSxDT0wsTkwscnVmZmlicjAxLDEwMDAwMDANCjE5OTUsQ09MLE5MLGtpbmdlbWkwMSw3MDAwMDANCjE5OTUsQ09MLE5MLGdyYWhlam8wMSw1NzUwMDANCjE5OTUsQ09MLE5MLHJpdHprZTAxLDQ0NzIyMw0KMTk5NSxDT0wsTkwsb2xpdmFvbTAxLDQxMDAwMA0KMTk5NSxDT0wsTkwsam9obnNobzAxLDQwMDAwMA0KMTk5NSxDT0wsTkwsbXVub3ptaTAxLDMwMDAwMA0KMTk5NSxDT0wsTkwsdmFuZGVqbzAyLDMwMDAwMA0KMTk5NSxDT0wsTkwsbmllZGRhMDEsMjc1MDAwDQoxOTk1LENPTCxOTCxjYXN0aXZpMDIsMjY1MDAwDQoxOTk1LENPTCxOTCxyZWVkc3QwMSwyNjUwMDANCjE5OTUsQ09MLE5MLHJleW5vYXIwMiwyNTgwMDANCjE5OTUsQ09MLE5MLHlvdW5nZXIwMSwyNTI1MDANCjE5OTUsQ09MLE5MLHRhdHVtamkwMSwxMzUwMDANCjE5OTUsQ09MLE5MLHBhaW50bGEwMSwxMzEwMDANCjE5OTUsQ09MLE5MLGxlc2thY3UwMSwxMzAwMDANCjE5OTUsQ09MLE5MLG93ZW5zamEwMiwxMjM1MDANCjE5OTUsQ09MLE5MLGh1YmJhdHIwMSwxMTQwMDANCjE5OTUsQ09MLE5MLGFjZXZlanUwMSwxMDkwMDANCjE5OTUsQ09MLE5MLGJhaWxlcm8wMSwxMDkwMDANCjE5OTUsQ09MLE5MLGJhdGVzamEwMSwxMDkwMDANCjE5OTUsQ09MLE5MLGJyaXRvam8wMSwxMDkwMDANCjE5OTUsQ09MLE5MLG1jY3JhcXUwMSwxMDkwMDANCjE5OTUsQ09MLE5MLG5va2VzbWEwMSwxMDkwMDANCjE5OTUsQ09MLE5MLHJla2FyYnIwMSwxMDkwMDANCjE5OTUsQ09MLE5MLHNhZ2VyYWowMSwxMDkwMDANCjE5OTUsQ09MLE5MLHRob21wbWEwMSwxMDkwMDANCjE5OTUsRkxPLE5MLHNoZWZmZ2EwMSw1NjI1MDAwDQoxOTk1LEZMTyxOTCxoYXJ2ZWJyMDEsNDg3NTAwMA0KMTk5NSxGTE8sTkwsYnVya2VqbzAzLDMzNTAwMDANCjE5OTUsRkxPLE5MLHdpdHRibzAxLDE4MDAwMDANCjE5OTUsRkxPLE5MLHBlbmRsdGUwMSwxNjAwMDAwDQoxOTk1LEZMTyxOTCxoYW1tb2NoMDEsMTAyNTAwMA0KMTk5NSxGTE8sTkwsYnJvd25qZTAxLDY1MDAwMA0KMTk5NSxGTE8sTkwsY29uaW5qZTAxLDUxMDAwMA0KMTk5NSxGTE8sTkwsZGF3c29hbjAxLDUwMDAwMA0KMTk5NSxGTE8sTkwsZ2FyZG5tYTAxLDM3NTAwMA0KMTk5NSxGTE8sTkwsY2FycmNoMDIsMjU1MDAwDQoxOTk1LEZMTyxOTCxtdXJwaHJvMDEsMjUwMDAwDQoxOTk1LEZMTyxOTCxjb2xicmdyMDEsMjI1MDAwDQoxOTk1LEZMTyxOTCxkaWF6bWEwMSwyMjUwMDANCjE5OTUsRkxPLE5MLGhlcm5hamUwMiwyMDcyODENCjE5OTUsRkxPLE5MLGFyaWFzYWwwMSwyMDAwMDANCjE5OTUsRkxPLE5MLGJvd2VucnkwMSwxODUwMDANCjE5OTUsRkxPLE5MLG5lbnJvMDEsMTgwMDAwDQoxOTk1LEZMTyxOTCxkZWNrZXN0MDEsMTc1MDAwDQoxOTk1LEZMTyxOTCxyYXBwcGEwMSwxNjE1MDANCjE5OTUsRkxPLE5MLHZlcmVzcmEwMSwxNjAwMDANCjE5OTUsRkxPLE5MLHdlYXRoZGEwMSwxNTc1MDANCjE5OTUsRkxPLE5MLG5hdGFscm8wMSwxNTE1MDANCjE5OTUsRkxPLE5MLG1vcm1hcnUwMSwxNDAwMDANCjE5OTUsRkxPLE5MLG1hdGhldGUwMSwxMzQwMDANCjE5OTUsRkxPLE5MLHBlcmV6eW8wMSwxMzQwMDANCjE5OTUsRkxPLE5MLHdoaXRtZGEwMiwxMzIwMDANCjE5OTUsRkxPLE5MLGdyZWdndG8wMSwxMjUwMDANCjE5OTUsRkxPLE5MLGFiYm90a3UwMSwxMTkwMDANCjE5OTUsRkxPLE5MLGpvaG5zam8wNywxMTY1MDANCjE5OTUsRkxPLE5MLHRhdmFyamUwMSwxMTQwMDANCjE5OTUsRkxPLE5MLGpvaG5zY2gwNCwxMTM1MDANCjE5OTUsRkxPLE5MLG1hbnRlbWEwMSwxMDkwMDANCjE5OTUsRkxPLE5MLG15ZXJzbWkwMSwxMDkwMDANCjE5OTUsRkxPLE5MLHBvd2VsamEwNCwxMDkwMDANCjE5OTUsRkxPLE5MLHZhbGRlbWEwMSwxMDkwMDANCjE5OTUsRkxPLE5MLHZlcmFzcXUwMSwxMDkwMDANCjE5OTUsSE9VLE5MLGJhZ3dlamUwMSw2ODc1MDAwDQoxOTk1LEhPVSxOTCxkcmFiZWRvMDEsNTAwMDAwMA0KMTk5NSxIT1UsTkwsYmlnZ2ljcjAxLDQ3MjUwMDANCjE5OTUsSE9VLE5MLHN3aW5kZ3IwMSw0NDUwMDAwDQoxOTk1LEhPVSxOTCxwbGFudHBoMDEsMjAwMDAwMA0KMTk5NSxIT1UsTkwsZ29uemFsdTAxLDE1MDAwMDANCjE5OTUsSE9VLE5MLHdpbGtpcmkwMSwxNDc1MDAwDQoxOTk1LEhPVSxOTCxiZWxsZGUwMSwxNDUwMDAwDQoxOTk1LEhPVSxOTCxraWxlZGEwMSwxMjcyNTAwDQoxOTk1LEhPVSxOTCxzaGlwbGNyMDEsNTYyNTAwDQoxOTk1LEhPVSxOTCx0aG9tcG1pMDIsNTI1MDAwDQoxOTk1LEhPVSxOTCxtYWdhZGRhMDEsMzYwMDAwDQoxOTk1LEhPVSxOTCxtYXlkZTAxLDM1ODMzNA0KMTk5NSxIT1UsTkwsc2VydmFzYzAxLDM0MDAwMA0KMTk5NSxIT1UsTkwsbWNtdXJjcjAxLDI3NTAwMA0KMTk5NSxIT1UsTkwsZ3V0aWVyaTAxLDIxMDAwMA0KMTk5NSxIT1UsTkwsaHVkZWtqbzAxLDE4NTAwMA0KMTk5NSxIT1UsTkwsY2FuZ2VqbzAxLDE4MjUwMA0KMTk5NSxIT1UsTkwsam9uZXN0bzAyLDE3NTAwMA0KMTk5NSxIT1UsTkwsbWFydGlwZTAzLDE3NTAwMA0KMTk5NSxIT1UsTkwscmV5bm9zaDAxLDE3NTAwMA0KMTk5NSxIT1UsTkwsZXVzZWJ0bzAxLDE2MDAwMA0KMTk5NSxIT1UsTkwsYnJvY2FkbzAxLDE1NTAwMA0KMTk5NSxIT1UsTkwsbW91dG9qYTAxLDE0NTAwMA0KMTk5NSxIT1UsTkwsc3RhbmthbjAxLDE0NTAwMA0KMTk5NSxIT1UsTkwsbWlsbGVvcjAxLDE0MDAwMA0KMTk5NSxIT1UsTkwsaGFtcHRtaTAxLDEzNTAwMA0KMTk5NSxIT1UsTkwsc2ltbXNtaTAxLDEyNTAwMA0KMTk5NSxIT1UsTkwsdmVyZXNkYTAxLDEyNTAwMA0KMTk5NSxIT1UsTkwscG93ZWxybzAxLDExNTAwMA0KMTk5NSxIT1UsTkwsZG91Z2hqaTAxLDEwOTAwMA0KMTk5NSxIT1UsTkwsaGFydGdkZTAxLDEwOTAwMA0KMTk5NSxIT1UsTkwsaHVudGVicjAyLDEwOTAwMA0KMTk5NSxIT1UsTkwsbmV2aW5waDAxLDEwOTAwMA0KMTk5NSxIT1UsTkwsd2FnbmViaTAyLDEwOTAwMA0KMTk5NSxIT1UsTkwsd2FsbGRvMDEsMTA5MDAwDQoxOTk1LExBTixOTCxzdHJhd2RhMDEsNTMwMDAwMA0KMTk5NSxMQU4sTkwsd29ycmV0bzAxLDQ2NjY2NjcNCjE5OTUsTEFOLE5MLGNhbmRpdG8wMSw0NDUwMDAwDQoxOTk1LExBTixOTCxtYXJ0aXJhMDIsMzkyNTAwMA0KMTk5NSxMQU4sTkwsa2VsbHlybzAxLDM3MzMzMzQNCjE5OTUsTEFOLE5MLGRlc2hpZGUwMSwzMDAwMDAwDQoxOTk1LExBTixOTCxrYXJyb2VyMDEsMjM1MDAwMA0KMTk5NSxMQU4sTkwsbm9tb2hpMDEsMjEwOTAwMA0KMTk5NSxMQU4sTkwsd2FsbGF0aTAxLDIwMDIyMDANCjE5OTUsTEFOLE5MLG9mZmVyam8wMSwxNjAwMDAwDQoxOTk1LExBTixOTCxwaWF6em1pMDEsOTAwMDAwDQoxOTk1LExBTixOTCxtb25kZXJhMDEsNDM1MDAwDQoxOTk1LExBTixOTCxhc3RhY3BlMDEsNDI1MDAwDQoxOTk1LExBTixOTCxzY2hvZmRpMDIsMzUwMDAwDQoxOTk1LExBTixOTCxzZWFuZXJ1MDEsMzUwMDAwDQoxOTk1LExBTixOTCxoYW5zZWRhMDEsMzI1MDAwDQoxOTk1LExBTixOTCxwcmluY3RvMDEsMzA2MDAwDQoxOTk1LExBTixOTCxoZXJuYWNhMDEsMzAwMDAwDQoxOTk1LExBTixOTCxtY2Rvd3JvMDEsMzAwMDAwDQoxOTk1LExBTixOTCxnd3lubmNoMDEsMjc1MDAwDQoxOTk1LExBTixOTCx3ZWJzdG1pMDEsMjUwMDAwDQoxOTk1LExBTixOTCxkYWFsb20wMSwxNTYwMDANCjE5OTUsTEFOLE5MLGN1bW1pam8wMSwxNTUwMDANCjE5OTUsTEFOLE5MLGFzaGxlYmkwMSwxMzYwMDANCjE5OTUsTEFOLE5MLHZhbGRlaXMwMSwxMzYwMDANCjE5OTUsTEFOLE5MLGRyZWlmZGEwMSwxMzQwMDANCjE5OTUsTEFOLE5MLHBhcmtjaDAxLDExNDAwMA0KMTk5NSxMQU4sTkwsYnVzY2htaTAxLDEwOTAwMA0KMTk5NSxMQU4sTkwsY2FzdHJqdTAxLDEwOTAwMA0KMTk5NSxMQU4sTkwsY2VkZW5ybzAxLDEwOTAwMA0KMTk5NSxMQU4sTkwsZm9udmljaDAxLDEwOTAwMA0KMTk5NSxMQU4sTkwsZ2FyY2lrYTAxLDEwOTAwMA0KMTk5NSxMQU4sTkwsZ29yZWNyaTAxLDEwOTAwMA0KMTk5NSxMQU4sTkwsaGFuc2VncjAxLDEwOTAwMA0KMTk5NSxMQU4sTkwsaG9sbGF0bzAxLDEwOTAwMA0KMTk5NSxMQU4sTkwsb3N1bmFhbjAxLDEwOTAwMA0KMTk5NSxMQU4sTkwscGFycmFqbzAxLDEwOTAwMA0KMTk5NSxNT04sTkwsYWxvdW1vMDEsMzAwMDAwMA0KMTk5NSxNT04sTkwsZmFzc2VqZTAxLDE1MDAwMDANCjE5OTUsTU9OLE5MLHJvamFzbWUwMSwxMzAwMDAwDQoxOTk1LE1PTixOTCxmbGV0Y2RhMDEsOTAwMDAwDQoxOTk1LE1PTixOTCx0cmVhZGplMDEsNTAwMDAwDQoxOTk1LE1PTixOTCxhcXVpbmx1MDEsNDIwMDAwDQoxOTk1LE1PTixOTCxzaGF3amUwMSwzMjUwMDANCjE5OTUsTU9OLE5MLGNvcmRld2kwMSwzMTUwMDANCjE5OTUsTU9OLE5MLGJlcnJ5c2UwMSwyODUwMDANCjE5OTUsTU9OLE5MLG1hcnRpcGUwMiwyNzAwMDANCjE5OTUsTU9OLE5MLGxhbnNpbWkwMSwyNTAwMDANCjE5OTUsTU9OLE5MLGhlbnJ5YnUwMSwyNDAwMDANCjE5OTUsTU9OLE5MLGhhcnJpZ3IwMSwyMzUwMDANCjE5OTUsTU9OLE5MLHNjb3R0dGkwMSwyMjUwMDANCjE5OTUsTU9OLE5MLGhlcmVkZ2kwMSwyMTAwMDANCjE5OTUsTU9OLE5MLHJvZHJpaGUwMiwyMTAwMDANCjE5OTUsTU9OLE5MLGZyYXppbG8wMSwxNjUwMDANCjE5OTUsTU9OLE5MLGZvbGV5dG8wMiwxNjAwMDANCjE5OTUsTU9OLE5MLHJ1ZXRla2kwMSwxNTEwMDANCjE5OTUsTU9OLE5MLGZyYXNld2kwMSwxNTAwMDANCjE5OTUsTU9OLE5MLHNwZWhydGkwMSwxNTAwMDANCjE5OTUsTU9OLE5MLGZsb3lkY2wwMSwxNDUwMDANCjE5OTUsTU9OLE5MLHRhcmFzdG8wMSwxMzUwMDANCjE5OTUsTU9OLE5MLHdoaXRlcm8wMiwxMzAwMDANCjE5OTUsTU9OLE5MLGxha2VydGkwMSwxMjEwMDANCjE5OTUsTU9OLE5MLGFuZHJlc2gwMSwxMDkwMDANCjE5OTUsTU9OLE5MLGVpc2Noam8wMSwxMDkwMDANCjE5OTUsTU9OLE5MLGdydWR6bWEwMSwxMDkwMDANCjE5OTUsTU9OLE5MLHBlcmV6Y2EwMSwxMDkwMDANCjE5OTUsTU9OLE5MLHByaWRlY3UwMSwxMDkwMDANCjE5OTUsTU9OLE5MLHNhbnRhZnAwMSwxMDkwMDANCjE5OTUsTU9OLE5MLHVyYmludWcwMSwxMDkwMDANCjE5OTUsTU9OLE5MLHdoaXRlZ2EwMSwxMDkwMDANCjE5OTUsTllOLE5MLHNhYmVyYnIwMSw1NTYyOTkwDQoxOTk1LE5ZTixOTCxib25pbGJvMDEsNTMwMDAwMA0KMTk5NSxOWU4sTkwsaGFybmlwZTAxLDMwMDAwMDANCjE5OTUsTllOLE5MLGZyYW5jam8wMSwyNTUwMDAwDQoxOTk1LE5ZTixOTCxidXRsZWJyMDEsMjAwMDAwMA0KMTk5NSxOWU4sTkwsdml6Y2FqbzAxLDEzNTUwMDANCjE5OTUsTllOLE5MLGh1bmRsdG8wMSw5NzUwMDANCjE5OTUsTllOLE5MLG9yc3Vsam8wMSw4OTQ0NDUNCjE5OTUsTllOLE5MLHNlZ3VpZGEwMSw3NTU1NTcNCjE5OTUsTllOLE5MLGtlbnRqZTAxLDcxMDAwMA0KMTk5NSxOWU4sTkwsc3BpZXJiaTAxLDQyNTAwMA0KMTk5NSxOWU4sTkwsaGVucnlkbzAxLDQwMDAwMA0KMTk5NSxOWU4sTkwsam9uZXNibzAzLDIyMDAwMA0KMTk5NSxOWU4sTkwsdGhvbXByeTAxLDIyMDAwMA0KMTk5NSxOWU4sTkwsam9uZXNjaDA1LDIwMDAwMA0KMTk5NSxOWU4sTkwsYm9nYXJ0aTAxLDE2NTAwMA0KMTk5NSxOWU4sTkwsZGlwb3RqZTAxLDE1MDAwMA0KMTk5NSxOWU4sTkwsbWlub3JibDAxLDE0NTAwMA0KMTk5NSxOWU4sTkwsYnVmb3JkYTAxLDE0MDAwMA0KMTk5NSxOWU4sTkwsdGVsZ2hkYTAxLDEzNTAwMA0KMTk5NSxOWU4sTkwsYnJvZ25yaTAxLDEyNTAwMA0KMTk5NSxOWU4sTkwsZXZlcmVjYTAxLDEyNTAwMA0KMTk5NSxOWU4sTkwsamFjb21qYTAxLDEyNTAwMA0KMTk5NSxOWU4sTkwsc3Rpbm5rZTAxLDEyNTAwMA0KMTk5NSxOWU4sTkwsZ3VuZGVlcjAxLDExODUwMA0KMTk5NSxOWU4sTkwscmVtbGltaTAxLDExODUwMA0KMTk5NSxOWU4sTkwsYWxmb25lZDAxLDEwOTAwMA0KMTk5NSxOWU4sTkwsYmFycnlqZTAxLDEwOTAwMA0KMTk5NSxOWU4sTkwsYnlyZHBhMDEsMTA5MDAwDQoxOTk1LE5ZTixOTCxjYXN0aWFsMDEsMTA5MDAwDQoxOTk1LE5ZTixOTCxjb3JuZXJlMDEsMTA5MDAwDQoxOTk1LE5ZTixOTCxmbG9yZWRvMDEsMTA5MDAwDQoxOTk1LE5ZTixOTCxodXNrZWJ1MDEsMTA5MDAwDQoxOTk1LE5ZTixOTCxpc3JpbmphMDEsMTA5MDAwDQoxOTk1LE5ZTixOTCxsZWRlc2FhMDEsMTA5MDAwDQoxOTk1LE5ZTixOTCxtbGlja2RhMDEsMTA5MDAwDQoxOTk1LE5ZTixOTCxvY2hvYWFsMDEsMTA5MDAwDQoxOTk1LE5ZTixOTCxvdGVyb3JpMDEsMTA5MDAwDQoxOTk1LE5ZTixOTCxwZXJzb3JvMDEsMTA5MDAwDQoxOTk1LE5ZTixOTCxwdWxzaWJpMDEsMTA5MDAwDQoxOTk1LE5ZTixOTCx3YWxrZXBlMDEsMTA5MDAwDQoxOTk1LFBISSxOTCxkeWtzdGxlMDEsNjIwMDAwMA0KMTk5NSxQSEksTkwsZGF1bHRkYTAxLDUzMDAwMDANCjE5OTUsUEhJLE5MLGplZmZlZ3IwMSwzMDAwMDAwDQoxOTk1LFBISSxOTCxzY2hpbGN1MDEsMjMwMDAwMA0KMTk5NSxQSEksTkwsZ3JlZW50bzAxLDIwMDAwMDANCjE5OTUsUEhJLE5MLGhvbGxpZGEwMSwyMDAwMDAwDQoxOTk1LFBISSxOTCxoYXllc2NoMDEsMTUwMDAwMA0KMTk5NSxQSEksTkwsZWlzZW5qaTAxLDEzNjk0NDUNCjE5OTUsUEhJLE5MLG1vcmFubWkwMSwxMDI1MDAwDQoxOTk1LFBISSxOTCx3ZXN0ZGEwMSw5NTAwMDANCjE5OTUsUEhJLE5MLGNoYXJsbm8wMSw1MjUwMDANCjE5OTUsUEhJLE5MLGR1bmNhbWEwMSw1MDAwMDANCjE5OTUsUEhJLE5MLHdlYnN0bGUwMSwyNzUwMDANCjE5OTUsUEhJLE5MLGdhbGxhZGEwMSwyNTAwMDANCjE5OTUsUEhJLE5MLGpvbmVzZG8wMSwyNTAwMDANCjE5OTUsUEhJLE5MLHF1YW50cGEwMSwyNDI1MDANCjE5OTUsUEhJLE5MLHN0b2Nra2UwMSwyMDUwMDANCjE5OTUsUEhJLE5MLHNsb2N1aGUwMSwyMDAwMDANCjE5OTUsUEhJLE5MLGFiYm90a3kwMSwxNTAwMDANCjE5OTUsUEhJLE5MLHJlYWR5cmEwMSwxNTAwMDANCjE5OTUsUEhJLE5MLHZhcnNoZ2EwMSwxNTAwMDANCjE5OTUsUEhJLE5MLG11bm96Ym8wMSwxNDAwMDANCjE5OTUsUEhJLE5MLHdpbGxpbWkwMywxMzAwMDANCjE5OTUsUEhJLE5MLGJlbm5lZ2EwMSwxMDkwMDANCjE5OTUsUEhJLE5MLGJvcmxhdG8wMiwxMDkwMDANCjE5OTUsUEhJLE5MLGJvdHRhcmkwMSwxMDkwMDANCjE5OTUsUEhJLE5MLGVsc3Rla2UwMSwxMDkwMDANCjE5OTUsUEhJLE5MLGZlcm5hc2kwMSwxMDkwMDANCjE5OTUsUEhJLE5MLGdyYWNlbWkwMiwxMDkwMDANCjE5OTUsUEhJLE5MLGdyZWVudHkwMSwxMDkwMDANCjE5OTUsUEhJLE5MLGpvcmRha2UwMSwxMDkwMDANCjE5OTUsUEhJLE5MLGp1ZGVuamUwMSwxMDkwMDANCjE5OTUsUEhJLE5MLGxpZWJlbWkwMSwxMDkwMDANCjE5OTUsUEhJLE5MLGxvbmdtdG8wMSwxMDkwMDANCjE5OTUsUEhJLE5MLG1hcnNodG8wMSwxMDkwMDANCjE5OTUsUEhJLE5MLG1pbWJzbWkwMSwxMDkwMDANCjE5OTUsUEhJLE5MLHNjaGFsZ2UwMSwxMDkwMDANCjE5OTUsUEhJLE5MLHNlZmNpa2UwMSwxMDkwMDANCjE5OTUsUEhJLE5MLHNwcmluZGUwMSwxMDkwMDANCjE5OTUsUElULE5MLGJlbGxqYTAxLDQ0MDAwMDANCjE5OTUsUElULE5MLGtpbmdqZTAxLDIxNjAwMDANCjE5OTUsUElULE5MLHNsYXVnZG8wMSwyMDI1MDAwDQoxOTk1LFBJVCxOTCxtZXJjZW9yMDEsMjAwMDAwMA0KMTk5NSxQSVQsTkwscGxlc2FkYTAxLDEwOTExMTINCjE5OTUsUElULE5MLGdvdHRqaTAxLDkwMDAwMA0KMTk5NSxQSVQsTkwsbmVhZ2xkZTAxLDc0MDAwMA0KMTk5NSxQSVQsTkwsY2xhcmtkYTA1LDY0NzIzMw0KMTk5NSxQSVQsTkwsbWFydGlhbDAzLDM3NTAwMA0KMTk5NSxQSVQsTkwsZ2FyY2ljYTAxLDM1MDAwMA0KMTk5NSxQSVQsTkwsbGlyaWFuZTAxLDM1MDAwMA0KMTk5NSxQSVQsTkwscGFyZW5tYTAxLDMzMDAwMA0KMTk5NSxQSVQsTkwsYnJ1bWZqYTAxLDIyNTAwMA0KMTk5NSxQSVQsTkwsY29va2VzdDAxLDIyNTAwMA0KMTk5NSxQSVQsTkwsd2FnbmVwYTAxLDIyNTAwMA0KMTk5NSxQSVQsTkwsd2VobmVqbzAxLDIyNTAwMA0KMTk5NSxQSVQsTkwsbWFkZHVtaTAxLDIwMDAwMA0KMTk5NSxQSVQsTkwseW91bmdrZTAxLDE2MDAwMA0KMTk5NSxQSVQsTkwsbGllYmVqbzAxLDE0MDAwMA0KMTk5NSxQSVQsTkwsZHllcm1pMDEsMTM1MDAwDQoxOTk1LFBJVCxOTCxtaWNlbGRhMDEsMTI1MDAwDQoxOTk1LFBJVCxOTCxjdW1taW1pMDEsMTIyMDAwDQoxOTk1LFBJVCxOTCxwZWd1ZXN0MDEsMTE1MDAwDQoxOTk1LFBJVCxOTCxjaHJpc2phMDEsMTA5MDAwDQoxOTk1LFBJVCxOTCxlbmNhcmFuMDEsMTA5MDAwDQoxOTk1LFBJVCxOTCxlcmlja2pvMDEsMTA5MDAwDQoxOTk1LFBJVCxOTCxnYXJjaWZyMDEsMTA5MDAwDQoxOTk1LFBJVCxOTCxob3Blam8wMSwxMDkwMDANCjE5OTUsUElULE5MLGpvaG5zbWEwMSwxMDkwMDANCjE5OTUsUElULE5MLGxvYWl6ZXMwMSwxMDkwMDANCjE5OTUsUElULE5MLG1jY3VyamUwMSwxMDkwMDANCjE5OTUsUElULE5MLG1vcmVscmEwMSwxMDkwMDANCjE5OTUsUElULE5MLHBhcnJpc3QwMSwxMDkwMDANCjE5OTUsU0ROLE5MLGd3eW5udG8wMSw0NjU4MzM0DQoxOTk1LFNETixOTCxjYW1pbmtlMDEsNDYwMDAwMA0KMTk5NSxTRE4sTkwsZmlubGVzdDAxLDQ1MDAwMDANCjE5OTUsU0ROLE5MLGJlbmVzYW4wMSwzNDAwMDAwDQoxOTk1LFNETixOTCxyb2JlcmJpMDEsMjMwMDAwMA0KMTk5NSxTRE4sTkwsY2VkZW5hbjAxLDExNTAwMDANCjE5OTUsU0ROLE5MLGFzaGJ5YW4wMSw3NTUwMDANCjE5OTUsU0ROLE5MLGxpdmluc2MwMSw0NzUwMDANCjE5OTUsU0ROLE5MLHJlZWRqbzAxLDQ1MDAwMA0KMTk5NSxTRE4sTkwsdmFsZW5mZTAxLDQyNTAwMA0KMTk5NSxTRE4sTkwsYmxhaXJ3aTAxLDQwMDAwMA0KMTk5NSxTRE4sTkwsaG9mZm10cjAxLDMxNTAwMA0KMTk5NSxTRE4sTkwsd2lsbGlicjAxLDI3NTAwMA0KMTk5NSxTRE4sTkwsd2lsbGllZDAxLDIzMDAwMA0KMTk5NSxTRE4sTkwsY2lhbmZhcjAxLDIwMDAwMA0KMTk5NSxTRE4sTkwsY2xhcmtwaDAyLDIwMDAwMA0KMTk5NSxTRE4sTkwsYXVzbXVicjAxLDE5NzAwMA0KMTk5NSxTRE4sTkwsc2FuZGVzYzAyLDE4MDAwMA0KMTk5NSxTRE4sTkwsaGFtaWxqbzAyLDE3MDAwMA0KMTk5NSxTRE4sTkwsd29ycmV0aTAxLDE1MDAwMA0KMTk5NSxTRE4sTkwsbG9wZXpsdTAyLDE0NTAwMA0KMTk5NSxTRE4sTkwsdGFiYWtqZTAxLDE0MDAwMA0KMTk5NSxTRE4sTkwsZWxsaW9kbzAxLDEzNTAwMA0KMTk5NSxTRE4sTkwsam9obnNicjAxLDEzNTAwMA0KMTk5NSxTRE4sTkwsbmlldmVtZTAxLDEyNTAwMA0KMTk5NSxTRE4sTkwsZmxvcmlicjAxLDExNTAwMA0KMTk5NSxTRE4sTkwsaG9sYmVyYTAxLDExNTAwMA0KMTk5NSxTRE4sTkwscGV0YWdybzAxLDExNTAwMA0KMTk5NSxTRE4sTkwsYmVydW1hbjAxLDEwOTAwMA0KMTk5NSxTRE4sTkwsYm9jaHRkbzAxLDEwOTAwMA0KMTk5NSxTRE4sTkwsZGlzaG1nbDAxLDEwOTAwMA0KMTk5NSxTRk4sTkwsYm9uZHNiYTAxLDgxNjY2NjYNCjE5OTUsU0ZOLE5MLHdpbGxpbWEwNCw1ODUwMDAwDQoxOTk1LFNGTixOTCxwb3J0dW1hMDEsMzM3Nzc3OA0KMTk5NSxTRk4sTkwsdGhvbXBybzAxLDMzMzMzMzMNCjE5OTUsU0ZOLE5MLGJlY2tybzAxLDIyNDI1MDANCjE5OTUsU0ZOLE5MLGxld2lzZGEwMSwxODUwMDAwDQoxOTk1LFNGTixOTCxtYW53YWtpMDEsMTgwMDAwMA0KMTk5NSxTRk4sTkwsbXVsaG90ZTAxLDEyNTAwMDANCjE5OTUsU0ZOLE5MLGhpbGxnbDAxLDgwMDAwMA0KMTk5NSxTRk4sTkwsYmF1dGlqbzAxLDc2MDAwMA0KMTk5NSxTRk4sTkwsY2FycmVtYTAxLDc1MDAwMA0KMTk5NSxTRk4sTkwsbGVpdGVtYTAxLDcwMDAwMA0KMTk5NSxTRk4sTkwscmVlZGplMDIsNzAwMDAwDQoxOTk1LFNGTixOTCx3aWxzb3RyMDEsNzAwMDAwDQoxOTk1LFNGTixOTCxidXJiYWRhMDEsNjAwMDAwDQoxOTk1LFNGTixOTCxjbGF5dHJvMDEsNDc1MDAwDQoxOTk1LFNGTixOTCxiZW5qYW1pMDEsMzIwMDAwDQoxOTk1LFNGTixOTCxyb2dlcmtlMDIsMjAwMDAwDQoxOTk1LFNGTixOTCxkZXdleW1hMDEsMTcwMDAwDQoxOTk1LFNGTixOTCx2YWxkZXNlMDEsMTcwMDAwDQoxOTk1LFNGTixOTCxsYW1wa3RvMDEsMTUwMDAwDQoxOTk1LFNGTixOTCx2YW5sYXdpMDEsMTQyNTAwDQoxOTk1LFNGTixOTCxzZXJ2aXNjMDEsMTQwMDAwDQoxOTk1LFNGTixOTCxzY2Fyc3N0MDEsMTM3NTAwDQoxOTk1LFNGTixOTCxwYXR0ZWpvMDEsMTIyNTAwDQoxOTk1LFNGTixOTCxnb21lenBhMDEsMTIwMDAwDQoxOTk1LFNGTixOTCxwaGlsbGpyMDEsMTIwMDAwDQoxOTk1LFNGTixOTCxmYW5leXJpMDEsMTE1MDAwDQoxOTk1LFNGTixOTCxidXJnb2VuMDEsMTEwMDAwDQoxOTk1LFNGTixOTCxhdXJpbHJpMDEsMTA5MDAwDQoxOTk1LFNGTixOTCxiYXJ0b3NoMDEsMTA5MDAwDQoxOTk1LFNGTixOTCxiZW5hcm1hMDEsMTA5MDAwDQoxOTk1LFNGTixOTCxicmV3aWphMDEsMTA5MDAwDQoxOTk1LFNGTixOTCxjcmVla2RvMDEsMTA5MDAwDQoxOTk1LFNGTixOTCxlc3Rlc3NoMDEsMTA5MDAwDQoxOTk1LFNGTixOTCxncmVlcmtlMDEsMTA5MDAwDQoxOTk1LFNGTixOTCxob29rY2gwMSwxMDkwMDANCjE5OTUsU0ZOLE5MLG1pbnR6c3QwMSwxMDkwMDANCjE5OTUsU0ZOLE5MLHJvc3Nlam8wMSwxMDkwMDANCjE5OTUsU0xOLE5MLGhpbGxrZTAxLDQ1MjUwMDANCjE5OTUsU0xOLE5MLHplaWxldG8wMSwzNzAwMDAwDQoxOTk1LFNMTixOTCxtb3JnYW1pMDEsMzM3NTAwMA0KMTk5NSxTTE4sTkwsc21pdGhvejAxLDMwMDAwMDANCjE5OTUsU0xOLE5MLGxhbmtmcmEwMSwyODAwMDAwDQoxOTk1LFNMTixOTCxwYWdub3RvMDEsMjY3NTAwMA0KMTk5NSxTTE4sTkwsaGVua2V0bzAxLDIzMjUwMDANCjE5OTUsU0xOLE5MLG9xdWVuam8wMSwyMjUwMDAwDQoxOTk1LFNMTixOTCxqYWNrc2RhMDIsMjEwMDAwMA0KMTk5NSxTTE4sTkwsZ2lsa2ViZTAxLDE2MjUwMDANCjE5OTUsU0xOLE5MLGNvb3Blc2MwMSwxNTI1MDAwDQoxOTk1LFNMTixOTCxwZW5hZ2UwMSw3NzAwMDANCjE5OTUsU0xOLE5MLGpvcmRhYnIwMSw3MjUwMDANCjE5OTUsU0xOLE5MLGhhYnlham8wMSw2MDAwMDANCjE5OTUsU0xOLE5MLHBhcnJlamUwMSw2MDAwMDANCjE5OTUsU0xOLE5MLHJvZHJpcmkwMiw1NzUwMDANCjE5OTUsU0xOLE5MLGhlbW9uc2MwMSwzNTAwMDANCjE5OTUsU0xOLE5MLGNvbGVzZGEwMSwzMDAwMDANCjE5OTUsU0xOLE5MLGRlbHVjcmkwMSwzMDAwMDANCjE5OTUsU0xOLE5MLHBlcnJ5Z2UwMSwyOTkwMDANCjE5OTUsU0xOLE5MLGZvc3NhdG8wMSwyNzUwMDANCjE5OTUsU0xOLE5MLG9zYm9yZG8wMSwyNTAwMDANCjE5OTUsU0xOLE5MLHBhbGFjdmkwMSwyNTAwMDANCjE5OTUsU0xOLE5MLHNoZWFmZGEwMSwyMDAwMDANCjE5OTUsU0xOLE5MLGFyb2NocmUwMSwxOTUwMDANCjE5OTUsU0xOLE5MLHdhdHNvYWwwMSwxNTUwMDANCjE5OTUsU0xOLE5MLHVyYmFudG8wMSwxNTAwMDANCjE5OTUsU0xOLE5MLHBldGtvbWEwMSwxMTQwMDANCjE5OTUsU0xOLE5MLGNyb21ldHIwMSwxMTIwMDANCjE5OTUsU0xOLE5MLGJhdHRsYWwwMSwxMDkwMDANCjE5OTUsU0xOLE5MLGJlbGxkYTAxLDEwOTAwMA0KMTk5NSxTTE4sTkwsYmVuZXNhbDAxLDEwOTAwMA0KMTk5NSxTTE4sTkwsYnJhZHN0ZTAxLDEwOTAwMA0KMTk5NSxTTE4sTkwsY2FyYWJyYTAxLDEwOTAwMA0KMTk5NSxTTE4sTkwsbWFicnlqbzAxLDEwOTAwMA0KMTk5NSxTTE4sTkwsbWF0aGV0ajAxLDEwOTAwMA0KMTk5NSxTTE4sTkwsc2Fib2NoMDEsMTA5MDAwDQoxOTk1LFNMTixOTCxzd2Vlbm1hMDEsMTA5MDAwDQoxOTk2LEJBTCxBTCxyaXBrZWNhMDEsNjY1MDAwMA0KMTk5NixCQUwsQUwscGFsbWVyYTAxLDU0MDY2MDMNCjE5OTYsQkFMLEFMLGJvbmlsYm8wMSw1MTAwMDAwDQoxOTk2LEJBTCxBTCxhbG9tYXJvMDEsNDI3OTM3OQ0KMTk5NixCQUwsQUwsbXVzc2ltaTAxLDQwMDAwMDANCjE5OTYsQkFMLEFMLGFuZGVyYnIwMSwzNjEzMzMzDQoxOTk2LEJBTCxBTCxob2lsZWNoMDEsMzM1MDAwMA0KMTk5NixCQUwsQUwsZmVybmFzaTAxLDMzMzMzMzMNCjE5OTYsQkFMLEFMLHdlbGxzZGEwMSwzMjAwMDAwDQoxOTk2LEJBTCxBTCxlcmlja3NjMDEsMjkwMDAwMA0KMTk5NixCQUwsQUwsbWVyY2trZTAxLDI4MjUwMDANCjE5OTYsQkFMLEFMLG15ZXJzcmEwMSwyNjAwMDAwDQoxOTk2LEJBTCxBTCxzdXJob2JqMDEsMTQxNjY2Nw0KMTk5NixCQUwsQUwsZGV2ZXJtaTAxLDkwMDAwMA0KMTk5NixCQUwsQUwsbWNkb3dybzAxLDc1MDAwMA0KMTk5NixCQUwsQUwsb3Jvc2NqZTAxLDc1MDAwMA0KMTk5NixCQUwsQUwsbWlsbHNhbDAxLDYwMDAwMA0KMTk5NixCQUwsQUwsaHVzb25qZTAxLDMyMDAwMA0KMTk5NixCQUwsQUwsaGFtbW9qZTAxLDMwMDAwMA0KMTk5NixCQUwsQUwscmhvZGVhcjAxLDMwMDAwMA0KMTk5NixCQUwsQUwscG9sb25sdTAxLDI1MDAwMA0KMTk5NixCQUwsQUwscmlwa2ViaTAxLDI1MDAwMA0KMTk5NixCQUwsQUwsdGFyYXN0bzAxLDIzMDAwMA0KMTk5NixCQUwsQUwsYWxleGFtYTAyLDE5MDAwMA0KMTk5NixCQUwsQUwsYmVuaXRhcjAxLDE1NTAwMA0KMTk5NixCQUwsQUwsemF1bmdyMDEsMTQwMDAwDQoxOTk2LEJBTCxBTCxzbWl0aG1hMDMsMTMwMDAwDQoxOTk2LEJBTCxBTCxoYXluZWppMDEsMTE1MDAwDQoxOTk2LEJBTCxBTCxjb3BwaXJvMDEsMTA5MDAwDQoxOTk2LEJBTCxBTCxjb3JiaWFyMDEsMTA5MDAwDQoxOTk2LEJBTCxBTCxtaWxjaG1pMDEsMTA5MDAwDQoxOTk2LEJBTCxBTCxwYXJlbm1hMDEsMTA5MDAwDQoxOTk2LEJPUyxBTCxjbGVtZXJvMDIsNTUwMDAwMA0KMTk5NixCT1MsQUwsdmF1Z2htbzAxLDU0MDAwMDANCjE5OTYsQk9TLEFMLGNhbnNlam8wMSw0NzI1MDAwDQoxOTk2LEJPUyxBTCxncmVlbm1pMDEsMzcwMDAwMA0KMTk5NixCT1MsQUwsZ29yZG90bzAxLDMwNTAwMDANCjE5OTYsQk9TLEFMLHZhbGVuam8wMiwyNjcyNTAwDQoxOTk2LEJPUyxBTCxzdGFubG1pMDIsMjMwMDAwMA0KMTk5NixCT1MsQUwsY29yZGV3aTAxLDE4NTAwMDANCjE5OTYsQk9TLEFMLHN0YW50bWkwMiwxNzUwMDAwDQoxOTk2LEJPUyxBTCxzbG9jdWhlMDEsMTQyNTAwMA0KMTk5NixCT1MsQUwsYmVsaW5zdDAxLDEyNzUwMDANCjE5OTYsQk9TLEFMLG5hZWhydGkwMSwxMjAwMDAwDQoxOTk2LEJPUyxBTCxtaXRjaGtlMDEsMTEzNTAwMA0KMTk5NixCT1MsQUwsbW95ZXJqYTAxLDgyNTAwMA0KMTk5NixCT1MsQUwsamVmZmVyZTAxLDY5NTAwMA0KMTk5NixCT1MsQUwsbWFkZHVtaTAxLDYwMDAwMA0KMTk5NixCT1MsQUwsd2FrZWZ0aTAxLDQ1MDAwMA0KMTk5NixCT1MsQUwsZG9oZXJqbzAyLDQwMDAwMA0KMTk5NixCT1MsQUwsaGVucnlidTAxLDQwMDAwMA0KMTk5NixCT1MsQUwsc2VsZWFhMDEsMzgwMDAwDQoxOTk2LEJPUyxBTCxoYXNlbGJpMDEsMzEwMDAwDQoxOTk2LEJPUyxBTCxjdXlsZW1pMDEsMjQyNTAwDQoxOTk2LEJPUyxBTCxvbGVhcnRyMDEsMjQwMDAwDQoxOTk2LEJPUyxBTCxob3NleWR3MDEsMjI1MDAwDQoxOTk2LEJPUyxBTCxiZWx0cmVzMDEsMjAwMDAwDQoxOTk2LEJPUyxBTCxtYW50b2plMDEsMjAwMDAwDQoxOTk2LEJPUyxBTCxwZW5uaWJyMDEsMTYwMDAwDQoxOTk2LEJPUyxBTCxlc2hlbHZhMDEsMTQwMDAwDQoxOTk2LEJPUyxBTCxnYXJjZXJpMDEsMTMyNTAwDQoxOTk2LEJPUyxBTCxtaW5jaG5hMDEsMTMwMDAwDQoxOTk2LEJPUyxBTCxmcnllamUwMSwxMjUwMDANCjE5OTYsQk9TLEFMLHN1cHBhamUwMSwxMTcwMDANCjE5OTYsQk9TLEFMLGhhcnJpcmUwMSwxMTIwMDANCjE5OTYsQk9TLEFMLGRlbGdhYWwwMSwxMDkwMDANCjE5OTYsQk9TLEFMLGdhcmNpbm8wMSwxMDkwMDANCjE5OTYsQk9TLEFMLGxhY3lrZTAxLDEwOTAwMA0KMTk5NixDQUwsQUwsbGFuZ3NtYTAxLDUwMDAwMDANCjE5OTYsQ0FMLEFMLGRhdmlzY2gwMSwzODAwMDAwDQoxOTk2LENBTCxBTCxmaW5sZWNoMDEsMzA2MDAwMA0KMTk5NixDQUwsQUwsc2FsbW90aTAxLDI1MDAwMDANCjE5OTYsQ0FMLEFMLGFiYm90amkwMSwyMjAwMDAwDQoxOTk2LENBTCxBTCxzbWl0aGxlMDIsMjEwMDAwMA0KMTk5NixDQUwsQUwsZGlzYXJnYTAxLDE2MDAwMDANCjE5OTYsQ0FMLEFMLHZlbGFycmEwMSw4MDAwMDANCjE5OTYsQ0FMLEFMLHNub3dqdDAxLDcyNTAwMA0KMTk5NixDQUwsQUwsZWRtb25qaTAxLDYyNTAwMA0KMTk5NixDQUwsQUwsaGFydmVicjAxLDUwMDAwMA0KMTk5NixDQUwsQUwsYm9za2lzaDAxLDQ1MDAwMA0KMTk5NixDQUwsQUwsZ3JpbXNqYTAxLDQyNTAwMA0KMTk5NixDQUwsQUwsaHVkbGVyZTAxLDQwMDAwMA0KMTk5NixDQUwsQUwsd2FsbGF0aTAxLDQwMDAwMA0KMTk5NixDQUwsQUwscGVyY2l0cjAxLDM1NTAwMA0KMTk5NixDQUwsQUwsc2xhdWdkbzAxLDM1MDAwMA0KMTk5NixDQUwsQUwsZWFzbGVkYTAxLDMwNTAwMA0KMTk5NixDQUwsQUwsaG93ZWxqYTAyLDMwMDAwMA0KMTk5NixDQUwsQUwsYWxkcmVtaTAxLDI1MDAwMA0KMTk5NixDQUwsQUwsYW5kZXJnYTAxLDI1MDAwMA0KMTk5NixDQUwsQUwsc2Nob2ZkaTAyLDI1MDAwMA0KMTk5NixDQUwsQUwsb250aXZzdDAyLDIyNTAwMA0KMTk5NixDQUwsQUwsc2FuZGVzYzAxLDIwMDAwMA0KMTk5NixDQUwsQUwsZmFicmVqbzAxLDE3NTAwMA0KMTk5NixDQUwsQUwsZWljaGhtYTAxLDE3MDAwMA0KMTk5NixDQUwsQUwsamFtZXNtaTAxLDE1MDAwMA0KMTk5NixDQUwsQUwsc3ByaW5kZTAxLDE1MDAwMA0KMTk5NixDQUwsQUwsbW9udGVyaTAxLDEzNTAwMA0KMTk5NixDQUwsQUwsaG9semVtYTAxLDExNzUwMA0KMTk5NixDQUwsQUwscGFsbWVvcjAxLDExMzUwMA0KMTk5NixDQUwsQUwsZWRlbmZrZTAxLDExMjAwMA0KMTk5NixDQUwsQUwsYXJpYXNnZTAxLDEwOTAwMA0KMTk5NixDQUwsQUwsZGlja3NqYTAxLDEwOTAwMA0KMTk5NixDQUwsQUwsZ3JlZW50bzAyLDEwOTAwMA0KMTk5NixDQUwsQUwsaGFycmlwZTAxLDEwOTAwMA0KMTk5NixDQUwsQUwsaG9sdHptaTAxLDEwOTAwMA0KMTk5NixDSEEsQUwsdGhvbWFmcjA0LDcxNTAwMDANCjE5OTYsQ0hBLEFMLHZlbnR1cm8wMSw2MDAwMDAwDQoxOTk2LENIQSxBTCx0YXJ0YWRhMDEsNTMwMDAwMA0KMTk5NixDSEEsQUwsZmVybmFhbDAxLDQ1MDAwMDANCjE5OTYsQ0hBLEFMLGd1aWxsb3owMSw0MDAwMDAwDQoxOTk2LENIQSxBTCxhbHZhcndpMDEsMjgyNTAwMA0KMTk5NixDSEEsQUwsa2Fya29ybzAxLDIyMjUwMDANCjE5OTYsQ0hBLEFMLGhlcm5hcm8wMSwyMTA1MDAwDQoxOTk2LENIQSxBTCxwaGlsbHRvMDIsMjEwMDAwMA0KMTk5NixDSEEsQUwsYmFpbmVoYTAxLDE4NzUwMDANCjE5OTYsQ0hBLEFMLGxld2lzZGEwMSwxNjI1MDAwDQoxOTk2LENIQSxBTCx0YXBhbmtlMDEsMTUwMDAwMA0KMTk5NixDSEEsQUwsbWFydGlkYTAxLDkzMDAwMA0KMTk5NixDSEEsQUwsbWNjYXNraTAxLDgwMDAwMA0KMTk5NixDSEEsQUwsa3JldXRjaDAxLDM1MDAwMA0KMTk5NixDSEEsQUwsYmVyZWphMDEsMjMwMDAwDQoxOTk2LENIQSxBTCxtYWdyYWpvMDEsMTc1MDAwDQoxOTk2LENIQSxBTCxtYXJ0aW5vMDEsMTYwMDAwDQoxOTk2LENIQSxBTCxkdXJoYXJhMDEsMTUwMDAwDQoxOTk2LENIQSxBTCxrZXlzZWJyMDEsMTQ1MDAwDQoxOTk2LENIQSxBTCxrYXJjaG1hMDEsMTM1MDAwDQoxOTk2LENIQSxBTCxtb3V0b2x5MDEsMTM1MDAwDQoxOTk2LENIQSxBTCxzaW1hc2JpMDEsMTMwMDAwDQoxOTk2LENIQSxBTCx0aG9tYWxhMDEsMTMwMDAwDQoxOTk2LENIQSxBTCxzbm9wZWNoMDEsMTI1MDAwDQoxOTk2LENIQSxBTCxiYWxkd2phMDEsMTE1MDAwDQoxOTk2LENIQSxBTCxjYW1lcm1pMDEsMTE1MDAwDQoxOTk2LENIQSxBTCxiZXJ0b21pMDEsMTA5NTAwDQoxOTk2LENMRSxBTCxiZWxsZWFsMDEsNTcwMDAwMA0KMTk5NixDTEUsQUwsbWNkb3dqYTAxLDQ4MDAwMDANCjE5OTYsQ0xFLEFMLGJhZXJnY2EwMSw0NzUwMDAwDQoxOTk2LENMRSxBTCxtYXJ0aWRlMDEsMzgxNjc2Ng0KMTk5NixDTEUsQUwsbG9mdG9rZTAxLDM1NzUwMDANCjE5OTYsQ0xFLEFMLG5hZ3ljaDAxLDM0ODc1MDANCjE5OTYsQ0xFLEFMLHZpenF1b20wMSwzMDUwMDAwDQoxOTk2LENMRSxBTCxhbG9tYXNhMDIsMjU3NTAwMA0KMTk5NixDTEUsQUwsZnJhbmNqdTAxLDI0MDE5NzINCjE5OTYsQ0xFLEFMLG11cnJhZWQwMiwyMDAwMDAwDQoxOTk2LENMRSxBTCxtZXNham8wMSwxODcyMjIzDQoxOTk2LENMRSxBTCxoZXJzaG9yMDEsMTc1MDAwMA0KMTk5NixDTEUsQUwsdGhvbWVqaTAxLDE2MDAwMDANCjE5OTYsQ0xFLEFMLHJhbWlybWEwMiwxMTAwMDAwDQoxOTk2LENMRSxBTCxhc3NlbnBhMDEsODcxNDAwDQoxOTk2LENMRSxBTCxwbHVua2VyMDEsNzUwMDAwDQoxOTk2LENMRSxBTCxwZW5hdG8wMSw1NTgzMzMNCjE5OTYsQ0xFLEFMLHBvb2xlamkwMiw1MDAwMDANCjE5OTYsQ0xFLEFMLGtpcmJ5d2EwMSw0Mzc1MDANCjE5OTYsQ0xFLEFMLGVzcGluYWwwMSw0MDAwMDANCjE5OTYsQ0xFLEFMLHRhdmFyanUwMSwzOTE2NjYNCjE5OTYsQ0xFLEFMLGxlaXVzc2MwMSwzMDAwMDANCjE5OTYsQ0xFLEFMLHRob21wcnkwMSwyNzUwMDANCjE5OTYsQ0xFLEFMLGJ1cm5pamUwMSwxOTAwMDANCjE5OTYsQ0xFLEFMLGVtYnJlYWwwMSwxNTUwMDANCjE5OTYsQ0xFLEFMLGNhbmRhY2EwMSwxNTAwMDANCjE5OTYsQ0xFLEFMLG9nZWFjaDAxLDE0NTAwMA0KMTk5NixDTEUsQUwsc2h1ZXlwYTAxLDEzODAwMA0KMTk5NixDTEUsQUwsbG9wZXphbDAyLDEzMjAwMA0KMTk5NixDTEUsQUwsd2lsc29uaTAxLDEyNTAwMA0KMTk5NixDTEUsQUwsZ2lsZXNicjAyLDExMDAwMA0KMTk5NixERVQsQUwsZmllbGRjZTAxLDkyMzc1MDANCjE5OTYsREVULEFMLGZyeW1hdHIwMSw1MTc1MDAwDQoxOTk2LERFVCxBTCxjdXJ0aWNoMDEsMjAwMDAwMA0KMTk5NixERVQsQUwsbGV3aXNtYTAxLDY3MDAwMA0KMTk5NixERVQsQUwsdHJhbW1hbDAxLDYwMDAwMA0KMTk5NixERVQsQUwsb2xpdmFvbTAxLDUwNTAwMA0KMTk5NixERVQsQUwscGFyZW5tYTAxLDUwMDAwMA0KMTk5NixERVQsQUwsd2lsbGlicjAxLDUwMDAwMA0KMTk5NixERVQsQUwsb2xzb25ncjAxLDQwMDAwMA0KMTk5NixERVQsQUwsd2lsbGllZDAxLDM1MDAwMA0KMTk5NixERVQsQUwsZmxhaGVqbzAxLDI3NTAwMA0KMTk5NixERVQsQUwsZ29tZXpjaDAyLDI3NTAwMA0KMTk5NixERVQsQUwsY2hyaXNtaTAyLDIwMDAwMA0KMTk5NixERVQsQUwsZ29ocmdyMDEsMjAwMDAwDQoxOTk2LERFVCxBTCxiYXV0aWRhMDEsMTg1MDAwDQoxOTk2LERFVCxBTCx2ZXJlc3JhMDEsMTc5MDAwDQoxOTk2LERFVCxBTCxoaWdnaWJvMDIsMTcwMDAwDQoxOTk2LERFVCxBTCxsZXdpc3JpMDEsMTcwMDAwDQoxOTk2LERFVCxBTCxsaXJhZmUwMSwxNzAwMDANCjE5OTYsREVULEFMLG5pZXZlbWUwMSwxNzAwMDANCjE5OTYsREVULEFMLHNhZ2VyYWowMSwxNjAwMDANCjE5OTYsREVULEFMLGFsZHJlc2MwMSwxNTAwMDANCjE5OTYsREVULEFMLHByaWRlY3UwMSwxNTAwMDANCjE5OTYsREVULEFMLGxpbWFqbzAxLDE0NTAwMA0KMTk5NixERVQsQUwsbXllcnNtaTAxLDEyNzUwMA0KMTk5NixERVQsQUwsbmV2aW5waDAxLDEyMDAwMA0KMTk5NixERVQsQUwsYmFydGVraTAxLDEwOTAwMA0KMTk5NixERVQsQUwsY2xhcmt0bzAyLDEwOTAwMA0KMTk5NixERVQsQUwsa2VhZ2xncjAxLDEwOTAwMA0KMTk5NixERVQsQUwsbWlsbGV0cjAyLDEwOTAwMA0KMTk5NixERVQsQUwsc29kb3djbDAxLDEwOTAwMA0KMTk5NixERVQsQUwsdGhvbXBqdTAyLDEwOTAwMA0KMTk5NixLQ0EsQUwsYXBwaWVrZTAxLDUwNTEyNTANCjE5OTYsS0NBLEFMLHJvYmVyYmkwMSwyNTAwMDAwDQoxOTk2LEtDQSxBTCxtb250Z2plMDEsMjE1MDAwMA0KMTk5NixLQ0EsQUwsZ3ViaWNtYTAxLDE2MDAwMDANCjE5OTYsS0NBLEFMLGJlbGNodGkwMSwxNDAwMDAwDQoxOTk2LEtDQSxBTCxvZmZlcmpvMDEsMTEwMDAwMA0KMTk5NixLQ0EsQUwsbWFjZmFtaTAxLDg1MDAwMA0KMTk5NixLQ0EsQUwscGljaGFoaTAxLDYyNTAwMA0KMTk5NixLQ0EsQUwsaG93YXJkYTAyLDYwMDAwMA0KMTk5NixLQ0EsQUwsaGFuZXljaDAxLDU3NTAwMA0KMTk5NixLQ0EsQUwsaGFtZWxibzAxLDM3NTAwMA0KMTk5NixLQ0EsQUwsZ29vZHd0bzAxLDMxMjUwMA0KMTk5NixLQ0EsQUwsbWFnbmFtaTAxLDI1MDAwMA0KMTk5NixLQ0EsQUwsbG9ja2hrZTAxLDIwNzUwMA0KMTk5NixLQ0EsQUwsbnVubmFqbzAxLDE5MDAwMA0KMTk5NixLQ0EsQUwsY2xhcmt0ZTAxLDE4MDAwMA0KMTk5NixLQ0EsQUwsZGFtb25qbzAxLDE4MDAwMA0KMTk5NixLQ0EsQUwsdmFsZXJqdTAxLDE3NTAwMA0KMTk5NixLQ0EsQUwsdHVja2VtaTAxLDE2MDAwMA0KMTk5NixLQ0EsQUwsamFjb21qYTAxLDE1MDAwMA0KMTk5NixLQ0EsQUwscGFxdWVjcjAxLDE1MDAwMA0KMTk5NixLQ0EsQUwsdml0aWVqbzAxLDE1MDAwMA0KMTk5NixLQ0EsQUwseW91bmdrZTAxLDE1MDAwMA0KMTk5NixLQ0EsQUwsY29udmVqaTAxLDE0ODAwMA0KMTk5NixLQ0EsQUwscGl0dHNqaTAxLDEzNTAwMA0KMTk5NixLQ0EsQUwsbGVubm9wYTAxLDEyMDAwMA0KMTk5NixLQ0EsQUwscmFuZGFqbzAxLDEyMDAwMA0KMTk5NixLQ0EsQUwsaHVpc21yaTAxLDExODAwMA0KMTk5NixLQ0EsQUwsbm9ybWFsZTAxLDExODAwMA0KMTk5NixLQ0EsQUwsc3dlZW5taTAxLDExNDAwMA0KMTk5NixLQ0EsQUwsYmx1bWFqYTAxLDEwOTAwMA0KMTk5NixLQ0EsQUwsZmFzYW5zYTAxLDEwOTAwMA0KMTk5NixLQ0EsQUwscm9zYWRqbzAxLDEwOTAwMA0KMTk5NixNSU4sQUwscHVja2VraTAxLDYyMDAwMDANCjE5OTYsTUlOLEFMLGtub2JsY2gwMSw0NjcwMDAwDQoxOTk2LE1JTixBTCxhZ3VpbHJpMDEsMzUwMDAwMA0KMTk5NixNSU4sQUwsbW9saXRwYTAxLDIwMjUwMDANCjE5OTYsTUlOLEFMLGhvbGxpZGEwMSwxMzUwMDAwDQoxOTk2LE1JTixBTCxrZWxseXJvMDEsNTUwMDAwDQoxOTk2LE1JTixBTCxjb3Jkb21hMDEsNTAwMDAwDQoxOTk2LE1JTixBTCxteWVyc2dyMDEsNDc1MDAwDQoxOTk2LE1JTixBTCxyZWJvdWplMDEsMzUwMDAwDQoxOTk2LE1JTixBTCxtZWFyZXBhMDEsMjc1MDAwDQoxOTk2LE1JTixBTCx3YWxiZW1hMDEsMjI1MDAwDQoxOTk2LE1JTixBTCxtYWhvbXBhMDEsMjAyNTAwDQoxOTk2LE1JTixBTCxoYWxlY2gwMSwxNzUwMDANCjE5OTYsTUlOLEFMLHJhZGtlYnIwMSwxNzUwMDANCjE5OTYsTUlOLEFMLHN0ZXZlZGEwMSwxNzIwMDANCjE5OTYsTUlOLEFMLHRyb21ibWkwMSwxNjI1MDANCjE5OTYsTUlOLEFMLGd1YXJkZWQwMSwxNTUwMDANCjE5OTYsTUlOLEFMLGJlY2tlcmkwMSwxNTI1MDANCjE5OTYsTUlOLEFMLHJvYmVycmkwMiwxNDAwMDANCjE5OTYsTUlOLEFMLHN0YWhvc2MwMSwxNDAwMDANCjE5OTYsTUlOLEFMLHJvZHJpZnIwMiwxMzc1MDANCjE5OTYsTUlOLEFMLHBhcnJham8wMSwxMjUwMDANCjE5OTYsTUlOLEFMLHF1aW5sdG8wMSwxMjUwMDANCjE5OTYsTUlOLEFMLGNvb21lcm8wMSwxMjI1MDANCjE5OTYsTUlOLEFMLGhhbnNlZ3IwMSwxMTc1MDANCjE5OTYsTUlOLEFMLGhhd2tpbGEwMSwxMTc1MDANCjE5OTYsTUlOLEFMLGhvY2tpZGUwMSwxMTc1MDANCjE5OTYsTUlOLEFMLGxhd3RvbWEwMiwxMTUwMDANCjE5OTYsTUlOLEFMLGJlbm5lZXIwMSwxMDkwMDANCjE5OTYsTUlOLEFMLGR1cmFubWkwMSwxMDkwMDANCjE5OTYsTUlOLEFMLG1pbGxldHIwMSwxMDkwMDANCjE5OTYsTUlOLEFMLG5hdWx0ZGEwMSwxMDkwMDANCjE5OTYsTUlOLEFMLHdhbGtldG8wNCwxMDkwMDANCjE5OTYsTUw0LEFMLHZhdWdoZ3IwMSw1ODc1MDAwDQoxOTk2LE1MNCxBTCxsaXN0YXBhMDEsMjIwMDAwMA0KMTk5NixNTDQsQUwsbWNkb25iZTAxLDIwMDAwMDANCjE5OTYsTUw0LEFMLGZldHRlbWkwMSwxNzAwMDAwDQoxOTk2LE1MNCxBTCxib25lc3JpMDEsMTQyNTAwMA0KMTk5NixNTDQsQUwsc2VpdHprZTAxLDExNTAwMDANCjE5OTYsTUw0LEFMLGphaGFqbzAxLDExMDAwMDANCjE5OTYsTUw0LEFMLG5pbHNzZGEwMSwxMDc1MDAwDQoxOTk2LE1MNCxBTCxlbGRyZWNhMDEsNzEyMDAwDQoxOTk2LE1MNCxBTCx3YXJkdHUwMSw0MDAwMDANCjE5OTYsTUw0LEFMLGNhcnJjaDAyLDMyNTAwMA0KMTk5NixNTDQsQUwsdmFsZW5qbzAzLDMwMDAwMA0KMTk5NixNTDQsQUwsd2lja2FrZTAxLDI5MDAwMA0KMTk5NixNTDQsQUwsaHVsc2VkYTAxLDI3MDAwMA0KMTk5NixNTDQsQUwsbGxveWRncjAxLDIxNTAwMA0KMTk5NixNTDQsQUwsbWllc2ttYTAxLDIwMDAwMA0KMTk5NixNTDQsQUwsdmluYWZlMDEsMTkwMDAwDQoxOTk2LE1MNCxBTCxjaXJpbGplMDEsMTg3NTAwDQoxOTk2LE1MNCxBTCxzcGFya3N0MDEsMTc1MDAwDQoxOTk2LE1MNCxBTCxrYXJsc2MwMSwxNTUwMDANCjE5OTYsTUw0LEFMLGNhcnBlY3IwMSwxNTAwMDANCjE5OTYsTUw0LEFMLGxldmlzamUwMSwxNTAwMDANCjE5OTYsTUw0LEFMLG1hdGhlbWkwMSwxNTAwMDANCjE5OTYsTUw0LEFMLHN0aW5ua2UwMSwxNDc1MDANCjE5OTYsTUw0LEFMLGdpdmVuYnIwMSwxMzUwMDANCjE5OTYsTUw0LEFMLG1pcmFuYW4wMSwxMzUwMDANCjE5OTYsTUw0LEFMLGtpZWZlbWEwMSwxMzAwMDANCjE5OTYsTUw0LEFMLG1jYW5kamEwMSwxMjgwMDANCjE5OTYsTUw0LEFMLHZhbmVndGkwMSwxMTUwMDANCjE5OTYsTUw0LEFMLGRhbWljamUwMSwxMDkwMDANCjE5OTYsTUw0LEFMLGdhcmNpcmEwMywxMDkwMDANCjE5OTYsTUw0LEFMLGpvbmVzZG8wMSwxMDkwMDANCjE5OTYsTUw0LEFMLGxvcmV0bWEwMSwxMDkwMDANCjE5OTYsTUw0LEFMLHBvdHRzbWkwMSwxMDkwMDANCjE5OTYsTllBLEFMLHNpZXJycnUwMSw2MjAwMDAwDQoxOTk2LE5ZQSxBTCxvbmVpbHBhMDEsNTMwMDAwMA0KMTk5NixOWUEsQUwscm9nZXJrZTAxLDUwMDAwMDANCjE5OTYsTllBLEFMLGNvbmVkYTAxLDQ2NjY2NjcNCjE5OTYsTllBLEFMLHBlcmV6bWUwMSw0NjUwMDAwDQoxOTk2LE5ZQSxBTCx3ZXR0ZWpvMDEsNDAwMDAwMA0KMTk5NixOWUEsQUwsd2lsbGliZTAyLDMwMDAwMDANCjE5OTYsTllBLEFMLGdpcmFyam8wMSwyMzI1MDAwDQoxOTk2LE5ZQSxBTCxtYXJ0aXRpMDIsMjMwMDAwMA0KMTk5NixOWUEsQUwscmFpbmV0aTAxLDIxMDAwMDANCjE5OTYsTllBLEFMLGJvZ2dzd2EwMSwyMDUwMDAwDQoxOTk2LE5ZQSxBTCxrZXlqaTAxLDE3NTAwMDANCjE5OTYsTllBLEFMLGZlcm5hdG8wMSwxNTAwMDAwDQoxOTk2LE5ZQSxBTCxsZXlyaWppMDEsMTQ3MDAwMA0KMTk5NixOWUEsQUwsa2FtaWVzYzAxLDExMDAwMDANCjE5OTYsTllBLEFMLGdvb2RlZHcwMSw5NTAwMDANCjE5OTYsTllBLEFMLGtlbGx5cGEwMyw5MDAwMDANCjE5OTYsTllBLEFMLG5lbHNvamUwMSw4NjAwMDANCjE5OTYsTllBLEFMLHdpY2ttYm8wMSw4NTAwMDANCjE5OTYsTllBLEFMLGR1bmNhbWEwMSw4NDUwMDANCjE5OTYsTllBLEFMLGhvd2VzdDAxLDUwMDAwMA0KMTk5NixOWUEsQUwsc3RyYXdkYTAxLDMwMDAwMA0KMTk5NixOWUEsQUwsd2lsbGlnZTAyLDIwMDAwMA0KMTk5NixOWUEsQUwscGV0dGlhbjAxLDE5NTAwMA0KMTk5NixOWUEsQUwscml2ZXJtYTAxLDEzMTEyNQ0KMTk5NixOWUEsQUwsamV0ZXJkZTAxLDEzMDAwMA0KMTk5NixOWUEsQUwsd2hpdGV3YTAyLDEyNTAwMA0KMTk5NixOWUEsQUwscGF2bGFkYTAxLDEyMDAwMA0KMTk5NixOWUEsQUwsZWVuaG9ybzAxLDExOTAwMA0KMTk5NixOWUEsQUwsaHV0dG9tYTAxLDExOTAwMA0KMTk5NixOWUEsQUwsZm94YW4wMSwxMDkwMDANCjE5OTYsTllBLEFMLGx1a2VtYTAxLDEwOTAwMA0KMTk5NixOWUEsQUwscG9sbGVkYTAxLDEwOTAwMA0KMTk5NixOWUEsQUwscml2ZXJydTAxLDEwOTAwMA0KMTk5NixPQUssQUwsbWNnd2ltYTAxLDcwNTAwMDANCjE5OTYsT0FLLEFMLHN0ZWludGUwMSw0MjAwMDAwDQoxOTk2LE9BSyxBTCxib3JkaW1pMDEsMjAwMDAwMA0KMTk5NixPQUssQUwsYmVycm9nZTAxLDExNTAwMDANCjE5OTYsT0FLLEFMLGJyb3Npc2MwMSw5NzAwMDANCjE5OTYsT0FLLEFMLG11bm96cGUwMSw1OTUwMDANCjE5OTYsT0FLLEFMLHBsYW50cGgwMSw1MDAwMDANCjE5OTYsT0FLLEFMLGNvcnNpamkwMSw0NTAwMDANCjE5OTYsT0FLLEFMLHZhbnBvdG8wMSwzMTgwMDANCjE5OTYsT0FLLEFMLGVja2VyZGUwMSwzMDAwMDANCjE5OTYsT0FLLEFMLGdhdGVzYnIwMSwyOTAwMDANCjE5OTYsT0FLLEFMLGdyb29tYnUwMSwxOTUwMDANCjE5OTYsT0FLLEFMLHByaWV0YXIwMSwxODEwMDANCjE5OTYsT0FLLEFMLGxvdnVsdG8wMSwxODAwMDANCjE5OTYsT0FLLEFMLHJleWVzY2EwMSwxNzAwMDANCjE5OTYsT0FLLEFMLG1vaGxlbWkwMSwxNTUwMDANCjE5OTYsT0FLLEFMLGJvdXJucmEwMSwxNTAwMDANCjE5OTYsT0FLLEFMLGJyaXNjam8wMSwxNTAwMDANCjE5OTYsT0FLLEFMLHRlbGdoZGEwMSwxNDc1MDANCjE5OTYsT0FLLEFMLGFjcmVtYTAxLDE0MDAwMA0KMTk5NixPQUssQUwsdGF5bG9iaTA0LDEzNTAwMA0KMTk5NixPQUssQUwsc3RhaXJtYTAxLDEzMDAwMA0KMTk5NixPQUssQUwsZ2lhbWJqYTAxLDEyMDAwMA0KMTk5NixPQUssQUwsc21hbGxhYTAxLDExODAwMA0KMTk5NixPQUssQUwsYmF0dGxhbDAxLDExNzAwMA0KMTk5NixPQUssQUwsd2VuZ2VkbzAxLDExNzAwMA0KMTk5NixPQUssQUwsd2lsbGlnZTAzLDExNTAwMA0KMTk5NixPQUssQUwsam9obnNkbzA0LDExMzUwMA0KMTk5NixPQUssQUwseW91bmdlcjAyLDExMjAwMA0KMTk5NixPQUssQUwsd2FzZGlqbzAxLDExMTAwMA0KMTk5NixPQUssQUwsYWRhbXN3aTAyLDEwOTAwMA0KMTk5NixPQUssQUwsYmF0aXN0bzAxLDEwOTAwMA0KMTk5NixPQUssQUwsbGVzaGVicjAxLDEwOTAwMA0KMTk5NixPQUssQUwsbWFzaG9kYTAxLDEwOTAwMA0KMTk5NixPQUssQUwsbW9saW5pejAxLDEwOTAwMA0KMTk5NixPQUssQUwsbW9udGdzdDAxLDEwOTAwMA0KMTk5NixPQUssQUwsbW9vcmVrZTAyLDEwOTAwMA0KMTk5NixTRUEsQUwsZ3JpZmZrZTAyLDc2NTAwMDANCjE5OTYsU0VBLEFMLGpvaG5zcmEwNSw2MDI1MDAwDQoxOTk2LFNFQSxBTCxidWhuZWphMDEsNTY0MTY2Nw0KMTk5NixTRUEsQUwsYm9zaW9jaDAxLDQyNTAwMDANCjE5OTYsU0VBLEFMLG1hcnRpZWQwMSwzNTAwMDAwDQoxOTk2LFNFQSxBTCxoaWJiYWdyMDEsMjg1MDAwMA0KMTk5NixTRUEsQUwsY2hhcmxubzAxLDIwNzUwMDANCjE5OTYsU0VBLEFMLGphY2tzbWkwMiwxMjAwMDAwDQoxOTk2LFNFQSxBTCxzb3JyZXBhMDEsMTAyNTAwMA0KMTk5NixTRUEsQUwsY29yYWpvMDEsODUwMDAwDQoxOTk2LFNFQSxBTCxmZXJtaWZlMDEsODUwMDAwDQoxOTk2LFNFQSxBTCxzb2pvbHUwMSw2MjUwMDANCjE5OTYsU0VBLEFMLGFtYXJhcmkwMSw0NTAwMDANCjE5OTYsU0VBLEFMLHJvZHJpYWwwMSw0NDIzMzQNCjE5OTYsU0VBLEFMLHdpbHNvZGEwMSw0MDAwMDANCjE5OTYsU0VBLEFMLHN0cmFuZG8wMSwzODAwMDANCjE5OTYsU0VBLEFMLGRpYXphbDAxLDM1MDAwMA0KMTk5NixTRUEsQUwsYXlhbGFibzAxLDMyNTAwMA0KMTk5NixTRUEsQUwsaHVudGVicjAxLDMwMDAwMA0KMTk5NixTRUEsQUwsam9yZGFyaTAyLDI1MDAwMA0KMTk5NixTRUEsQUwsaGl0Y2hzdDAxLDIzNTAwMA0KMTk5NixTRUEsQUwsbWFyemFqbzAxLDE3NTAwMA0KMTk5NixTRUEsQUwsd2VsbHNibzAxLDE1NTAwMA0KMTk5NixTRUEsQUwsZGF2aXN0aTAxLDE0MDAwMA0KMTk5NixTRUEsQUwsbWVuaGFwYTAxLDE0MDAwMA0KMTk5NixTRUEsQUwsYnJhZ2dkYTAxLDEzMDAwMA0KMTk5NixTRUEsQUwsY2FybW9yYTAxLDEyNTAwMA0KMTk5NixTRUEsQUwsZGF2aXNydTAxLDEyMDAwMA0KMTk5NixTRUEsQUwsaHVydGFlZDAxLDExNzUwMA0KMTk5NixTRUEsQUwsd29sY29ibzAxLDExNTAwMA0KMTk5NixTRUEsQUwsZGFyd2lqZTAxLDExMDAwMA0KMTk5NixTRUEsQUwsbWNjYXJncjAxLDEwOTAwMA0KMTk5NixTRUEsQUwsc2hlZXRhbjAxLDEwOTAwMA0KMTk5NixTRUEsQUwsd2hpdGVtYTAxLDEwOTAwMA0KMTk5NixURVgsQUwsZ29uemFqdTAzLDc0MjUwMDANCjE5OTYsVEVYLEFMLGNsYXJrd2kwMiw1NjU3MzY1DQoxOTk2LFRFWCxBTCxyb2RyaWl2MDEsNDAwMDAwMA0KMTk5NixURVgsQUwsZ3Jvc3NrZTAxLDMzMDAwMDANCjE5OTYsVEVYLEFMLGhpbGxrZTAxLDMxMDAwMDANCjE5OTYsVEVYLEFMLHBhbG1lZGUwMSwyMDAwMDAwDQoxOTk2LFRFWCxBTCxoZW5uZW1pMDEsMTUxOTY4MQ0KMTk5NixURVgsQUwsdGV0dGxtaTAxLDE0NjE2NDkNCjE5OTYsVEVYLEFMLHdpdHRibzAxLDEzNTAwMDANCjE5OTYsVEVYLEFMLGhhbWlsZGEwMiwxMzAwMDAwDQoxOTk2LFRFWCxBTCxwYXZsaXJvMDEsMTI1MDAwMA0KMTk5NixURVgsQUwsbWNsZW1tYTAxLDEyMjUwMDANCjE5OTYsVEVYLEFMLHZhbGxlZGEwMSw3MjUwMDANCjE5OTYsVEVYLEFMLHJ1c3NlamUwMSw2MTUwMDANCjE5OTYsVEVYLEFMLHdoaXRlbWEwMiwzNzUwMDANCjE5OTYsVEVYLEFMLGhlcmVkZ2kwMSwzNjAwMDANCjE5OTYsVEVYLEFMLG5peG9ub3QwMSwzNTAwMDANCjE5OTYsVEVYLEFMLGNvb2tkZTAxLDMzMDAwMA0KMTk5NixURVgsQUwsZWxzdGVrZTAxLDI3MDAwMA0KMTk5NixURVgsQUwsZ3JlZXJydTAxLDI1ODMzMw0KMTk5NixURVgsQUwsbmV3c293YTAxLDI1MDAwMA0KMTk5NixURVgsQUwsb2xpdmVkYTAyLDIyMDAwMA0KMTk5NixURVgsQUwsZ2lsYmUwMSwyMDAwMDANCjE5OTYsVEVYLEFMLHZvc2JlZWQwMSwxOTgwMDANCjE5OTYsVEVYLEFMLGdvbnphcmUwMSwxNzUwMDANCjE5OTYsVEVYLEFMLHdvcnRoY3IwMSwxNjc1MDANCjE5OTYsVEVYLEFMLGZyYXppbG8wMSwxNjU1MDANCjE5OTYsVEVYLEFMLGJ1Zm9yZGEwMSwxNjUwMDANCjE5OTYsVEVYLEFMLHN0aWxsa3UwMSwxNTAwMDANCjE5OTYsVEVYLEFMLGhvd2FyY2gwMiwxMzAwMDANCjE5OTYsVEVYLEFMLGJyYW5kbWEwMSwxMjM1MDANCjE5OTYsVEVYLEFMLG5pY2h0Y2gwMSwxMTYwMDANCjE5OTYsVEVYLEFMLHN0ZXZlbGUwMSwxMDkwMDANCjE5OTYsVE9SLEFMLGNhcnRlam8wMSw2NTI1MDAwDQoxOTk2LFRPUixBTCxvbGVydWpvMDEsNjUwMDAwMA0KMTk5NixUT1IsQUwsaGVudGdwYTAxLDIzNTAwMDANCjE5OTYsVE9SLEFMLGhhbnNvZXIwMSwyMzMzMzMzDQoxOTk2LFRPUixBTCxndXptYWp1MDEsMjI0MDAwMA0KMTk5NixUT1IsQUwsbml4b25vdDAxLDE5MDAwMDANCjE5OTYsVE9SLEFMLHNwcmFnZWQwMiwxNDUwMDAwDQoxOTk2LFRPUixBTCxxdWFudHBhMDEsNzc1MDAwDQoxOTk2LFRPUixBTCxjYXN0aXRvMDIsNjYwMDAwDQoxOTk2LFRPUixBTCx0aW1saW1pMDEsNjM1MDAwDQoxOTk2LFRPUixBTCxvYnJpZWNoMDEsNTAwMDAwDQoxOTk2LFRPUixBTCxzYW11ZWp1MDEsMzI1MDAwDQoxOTk2LFRPUixBTCxncmVlbnNoMDEsMjg3NTAwDQoxOTk2LFRPUixBTCxyaXNsZWJpMDEsMjM1MDAwDQoxOTk2LFRPUixBTCxnb256YWFsMDEsMjMyODc1DQoxOTk2LFRPUixBTCxnb256YXJlMDEsMjMyODc1DQoxOTk2LFRPUixBTCxjZWRlbmRvMDEsMjMwMDAwDQoxOTk2LFRPUixBTCx3aWxsaXdvMDIsMjI1MDAwDQoxOTk2LFRPUixBTCxib2hhbmJyMDEsMTg1MDAwDQoxOTk2LFRPUixBTCxkZWxnYWNhMDEsMTY1MDAwDQoxOTk2LFRPUixBTCxtYXJ0aXNhMDEsMTY1MDAwDQoxOTk2LFRPUixBTCxwZXJlenRvMDMsMTQwMDAwDQoxOTk2LFRPUixBTCxjcmFidHRpMDEsMTMzMDAwDQoxOTk2LFRPUixBTCxqb2huc2RhMDUsMTI1MDAwDQoxOTk2LFRPUixBTCxicm93c2MwMSwxMTUwMDANCjE5OTYsVE9SLEFMLGNhcnJhZ2kwMSwxMTUwMDANCjE5OTYsVE9SLEFMLHBlcmV6cm8wMSwxMTQ1MDANCjE5OTYsVE9SLEFMLHNwb2xqcGEwMSwxMTI1MDANCjE5OTYsVE9SLEFMLHdhcmVqZTAxLDExMjUwMA0KMTk5NixUT1IsQUwsYnJpdG90aTAxLDEwOTAwMA0KMTk5NixUT1IsQUwsY3Jlc3BmZTAxLDEwOTAwMA0KMTk5NixUT1IsQUwsZmxlbmVodTAxLDEwOTAwMA0KMTk5NixUT1IsQUwsbW9zcXVqdTAxLDEwOTAwMA0KMTk5NixBVEwsTkwsbWFkZHVncjAxLDY2NzUwMDANCjE5OTYsQVRMLE5MLGp1c3RpZGEwMSw2MjAwMDAwDQoxOTk2LEFUTCxOTCxzbW9sdGpvMDEsNjAwMDAwMA0KMTk5NixBVEwsTkwsZ2xhdml0bzAyLDUzNTAwMDANCjE5OTYsQVRMLE5MLG1jZ3JpZnIwMSw1MDUwMDAwDQoxOTk2LEFUTCxOTCxncmlzc21hMDIsNDg1MDAwMA0KMTk5NixBVEwsTkwsYXZlcnlzdDAxLDQyMDAwMDANCjE5OTYsQVRMLE5MLGJsYXVzamUwMSwzNTAwMDAwDQoxOTk2LEFUTCxOTCxsZW1rZW1hMDEsMTUwMDAwMA0KMTk5NixBVEwsTkwsd29obGVtYTAxLDE0MjUwMDANCjE5OTYsQVRMLE5MLGpvbmVzY2gwNiw4MjUwMDANCjE5OTYsQVRMLE5MLGJlbGxpcmEwMSw1NzUwMDANCjE5OTYsQVRMLE5MLHdhbHRvamUwMSw1MDAwMDANCjE5OTYsQVRMLE5MLG1jbWljZ3IwMSw0NjAwMDANCjE5OTYsQVRMLE5MLHNtaXRoZHcwMSw0NTUwMDANCjE5OTYsQVRMLE5MLGtsZXNrcnkwMSwzMTUwMDANCjE5OTYsQVRMLE5MLGxvcGV6amEwMSwyOTAwMDANCjE5OTYsQVRMLE5MLGJvcmJvcGUwMiwxNDI1MDANCjE5OTYsQVRMLE5MLGNsb250YnIwMSwxMzc1MDANCjE5OTYsQVRMLE5MLG1vcmRlbWkwMSwxMzUwMDANCjE5OTYsQVRMLE5MLGJpZWxlbWkwMSwxMjUwMDANCjE5OTYsQVRMLE5MLGJvcm93am8wMSwxMTE1MDANCjE5OTYsQVRMLE5MLHBlcmV6ZWQwMiwxMTE1MDANCjE5OTYsQVRMLE5MLHNjaG1pamEwMSwxMTE1MDANCjE5OTYsQVRMLE5MLGR5ZWplMDEsMTA5MDAwDQoxOTk2LEFUTCxOTCxnaW92YWVkMDEsMTA5MDAwDQoxOTk2LEFUTCxOTCxob3VzdHR5MDEsMTA5MDAwDQoxOTk2LEFUTCxOTCxqb25lc2FuMDEsMTA5MDAwDQoxOTk2LEFUTCxOTCxwb2xvbmx1MDEsMTA5MDAwDQoxOTk2LEFUTCxOTCx3YWRldGUwMSwxMDkwMDANCjE5OTYsQ0hOLE5MLHNvc2FzYTAxLDQ3NTAwMDANCjE5OTYsQ0hOLE5MLGdyYWNlbWEwMSw0MTc1MDAwDQoxOTk2LENITixOTCxndXptYWpvMDEsMzY3NTAwMA0KMTk5NixDSE4sTkwsbmF2YXJqYTAxLDM2MDAwMDANCjE5OTYsQ0hOLE5MLG1jcmFlYnIwMSwzNDAwMDAwDQoxOTk2LENITixOTCxzYW5kYnJ5MDEsMjMwMDAwMA0KMTk5NixDSE4sTkwsY2FzdGlmcjAxLDE2MDAwMDANCjE5OTYsQ0hOLE5MLGdvbnphbHUwMSwxNDAwMDAwDQoxOTk2LENITixOTCxzYW5jaHJlMDEsMTIwMDAwMA0KMTk5NixDSE4sTkwsam9uZXNkbzAxLDgyNTAwMA0KMTk5NixDSE4sTkwsc2VydmFzYzAxLDgyMjUwMA0KMTk5NixDSE4sTkwscGF0dGVibzAxLDY3NTAwMA0KMTk5NixDSE4sTkwsZ29tZXpsZTAyLDU1MDAwMA0KMTk5NixDSE4sTkwsbWFnYWRkYTAxLDUwMDAwMA0KMTk5NixDSE4sTkwscGVyZXptaTAxLDUwMDAwMA0KMTk5NixDSE4sTkwsYnVsbGlqaTAxLDM4NTAwMA0KMTk5NixDSE4sTkwsY2FzaWFsYTAxLDI3NTAwMA0KMTk5NixDSE4sTkwsaGVybmFqbzAxLDI1MzAwMA0KMTk5NixDSE4sTkwsZm9zdGVrZTAxLDIzMDAwMA0KMTk5NixDSE4sTkwsdHJhY2hzdDAxLDIyMDAwMA0KMTk5NixDSE4sTkwsZG9yc2VicjAxLDIxMDAwMA0KMTk5NixDSE4sTkwsYnVsbGVzYzAxLDE2MDAwMA0KMTk5NixDSE4sTkwsd2VuZGV0dTAxLDE2MDAwMA0KMTk5NixDSE4sTkwsc2h1bXB0ZTAxLDE1MDAwMA0KMTk5NixDSE4sTkwsdGltbW9vejAxLDE1MDAwMA0KMTk5NixDSE4sTkwsaGFuZXl0bzAxLDEyNzUwMA0KMTk5NixDSE4sTkwsY2FtcGJtaTAxLDEyNTAwMA0KMTk5NixDSE4sTkwsYWRhbXN0ZTAxLDExMzAwMA0KMTk5NixDSE4sTkwsaHViYmFtaTAxLDExMjAwMA0KMTk5NixDSE4sTkwsYm90dGVrZTAxLDExMTAwMA0KMTk5NixDSE4sTkwsa2llc2NicjAxLDEwOTAwMA0KMTk5NixDSE4sTkwsbXllcnNybzAxLDEwOTAwMA0KMTk5NixDSE4sTkwsdGVsZW1hbTAxLDEwOTAwMA0KMTk5NixDSU4sTkwscmlqb2pvMDEsNjE1MDAwMA0KMTk5NixDSU4sTkwsbGFya2liYTAxLDU3MDAwMDANCjE5OTYsQ0lOLE5MLHNtaWxlam8wMSw0OTc1MDAwDQoxOTk2LENJTixOTCxwb3J0dW1hMDEsNDMzMzMzNA0KMTk5NixDSU4sTkwsc2FuZGVyZTAyLDM1NzUwMDANCjE5OTYsQ0lOLE5MLHNjaG91cGUwMSwzMzAwMDAwDQoxOTk2LENJTixOTCxicmFudGplMDEsMTg1MDAwMA0KMTk5NixDSU4sTkwsbW9ycmloYTAyLDE2MDAwMDANCjE5OTYsQ0lOLE5MLGJ1cmJhZGEwMSwxMTI1MDAwDQoxOTk2LENJTixOTCxhbnRob2VyMDEsMTAyNTAwMA0KMTk5NixDSU4sTkwsbWNlbHJjaDAxLDgxNzAwMA0KMTk5NixDSU4sTkwsZGF2aXNlcjAxLDc1MDAwMA0KMTk5NixDSU4sTkwsYm9vbmVicjAxLDcyNTAwMA0KMTk5NixDSU4sTkwsb2xpdmVqbzAxLDcwODAwMA0KMTk5NixDSU4sTkwsaG93YXJ0aDAxLDY3NTAwMA0KMTk5NixDSU4sTkwsdGF1YmVlZDAxLDYyNTAwMA0KMTk5NixDSU4sTkwsaGVybmF4YTAxLDYwMDAwMA0KMTk5NixDSU4sTkwsaGFycmlsZTAxLDU1MDAwMA0KMTk5NixDSU4sTkwsY29sZW12aTAxLDUwMDAwMA0KMTk5NixDSU4sTkwsc2hhd2plMDEsNDUwMDAwDQoxOTk2LENJTixOTCxicmFuc2plMDEsNDI1MDAwDQoxOTk2LENJTixOTCxzYWJvY2gwMSwyMDAwMDANCjE5OTYsQ0lOLE5MLGNhcnJhaGUwMSwxOTUwMDANCjE5OTYsQ0lOLE5MLHB1Z2h0aTAxLDE5NTAwMA0KMTk5NixDSU4sTkwscnVmZmlqbzAxLDE5NTAwMA0KMTk5NixDSU4sTkwsZ29vZHdjdTAxLDE0NTAwMA0KMTk5NixDSU4sTkwscGVyZXplZDAxLDE0MDAwMA0KMTk5NixDSU4sTkwsc2VydmlzYzAxLDE0MDAwMA0KMTk5NixDSU4sTkwsbW9vcmVtYTAxLDEzNTAwMA0KMTk5NixDSU4sTkwsZ3JlZW53aTAxLDEzMDAwMA0KMTk5NixDSU4sTkwscmVtbGltaTAxLDEzMDAwMA0KMTk5NixDSU4sTkwsa2VsbHltaTAyLDEyNTAwMA0KMTk5NixDSU4sTkwsc2Fsa2VybzAxLDEyMDAwMA0KMTk5NixDSU4sTkwsZ2licmFzdDAxLDEwOTAwMA0KMTk5NixDSU4sTkwsb3dlbnNlcjAxLDEwOTAwMA0KMTk5NixDT0wsTkwsc2FiZXJicjAxLDU2MTI5OTENCjE5OTYsQ09MLE5MLHN3aWZ0YmkwMiw0NjA4MzMzDQoxOTk2LENPTCxOTCxnYWxhcmFuMDEsNDQ1MDAwMA0KMTk5NixDT0wsTkwsd2Fsa2VsYTAxLDQzNzUwMDANCjE5OTYsQ09MLE5MLGJ1cmtzZWwwMSw0MDMzMzMzDQoxOTk2LENPTCxOTCxiaWNoZWRhMDEsMzU5MTY2Ng0KMTk5NixDT0wsTkwsZnJlZW1tYTAyLDI1MDAwMDANCjE5OTYsQ09MLE5MLHdlaXNzd2EwMSwxNjUwMDAwDQoxOTk2LENPTCxOTCxjYXN0aXZpMDIsMTIwMDAwMA0KMTk5NixDT0wsTkwsaG9sbWVkYTAxLDExNjUwMDANCjE5OTYsQ09MLE5MLHlvdW5nZXIwMSwxMTI1MDAwDQoxOTk2LENPTCxOTCxydWZmaWJyMDEsMTAwMDAwMA0KMTk5NixDT0wsTkwscml0emtlMDEsNzQwMDAwDQoxOTk2LENPTCxOTCxyZWVkamUwMiw1MjUwMDANCjE5OTYsQ09MLE5MLHZhbmRlam8wMiw1MTI1MDANCjE5OTYsQ09MLE5MLHJlZWRzdDAxLDQ1MDAwMA0KMTk5NixDT0wsTkwscmV5bm9hcjAyLDQ0MDAwMA0KMTk5NixDT0wsTkwsbXVub3ptaTAxLDI5MDAwMA0KMTk5NixDT0wsTkwsbGVza2FjdTAxLDI3MDAwMA0KMTk5NixDT0wsTkwsYmF0ZXNqYTAxLDE4MTUwMA0KMTk5NixDT0wsTkwscGFpbnRsYTAxLDE2NzAwMA0KMTk5NixDT0wsTkwsb3dlbnNqYTAyLDE1NTAwMA0KMTk5NixDT0wsTkwsYmFpbGVybzAxLDE1MDAwMA0KMTk5NixDT0wsTkwsdGhvbXBtYTAxLDE0NTAwMA0KMTk5NixDT0wsTkwscmVrYXJicjAxLDEzNTAwMA0KMTk5NixDT0wsTkwsYnJpdG9qbzAxLDEzMDAwMA0KMTk5NixDT0wsTkwsaHViYmF0cjAxLDEyNzUwMA0KMTk5NixDT0wsTkwsY2FzdGVwZTAxLDEyMDAwMA0KMTk5NixDT0wsTkwsbWNjcmFxdTAxLDExMjAwMA0KMTk5NixDT0wsTkwscGVyZXpuZTAxLDEwOTAwMA0KMTk5NixDT0wsTkwsd3JpZ2hqYTAxLDEwOTAwMA0KMTk5NixGTE8sTkwsc2hlZmZnYTAxLDYxMzUwMDANCjE5OTYsRkxPLE5MLGJ1cmtlam8wMywzNTUwMDAwDQoxOTk2LEZMTyxOTCxicm93bmtlMDEsMzM1MDAwMA0KMTk5NixGTE8sTkwsd2hpdGVkZTAzLDMwMDAwMDANCjE5OTYsRkxPLE5MLGxlaXRlYWwwMSwyNzUwMDAwDQoxOTk2LEZMTyxOTCxjb25pbmplMDEsMTgwMDAwMA0KMTk5NixGTE8sTkwscGVuZGx0ZTAxLDE2MjUwMDANCjE5OTYsRkxPLE5MLGhhbW1vY2gwMSwxNjAwMDAwDQoxOTk2LEZMTyxOTCxjb2xicmdyMDEsMTIwMDAwMA0KMTk5NixGTE8sTkwscGVuYWFsMDEsNzUwMDAwDQoxOTk2LEZMTyxOTCxvcnN1bGpvMDEsNjI1MDAwDQoxOTk2LEZMTyxOTCxkYXdzb2FuMDEsNTAwMDAwDQoxOTk2LEZMTyxOTCxhcmlhc2FsMDEsNDEyNTAwDQoxOTk2LEZMTyxOTCxncmViZWNyMDEsNDAwMDAwDQoxOTk2LEZMTyxOTCxyYXBwcGEwMSwzNTAwMDANCjE5OTYsRkxPLE5MLG5lbnJvMDEsMzQwMDAwDQoxOTk2LEZMTyxOTCxtYXRoZXRlMDEsMjkyNTAwDQoxOTk2LEZMTyxOTCxhYmJvdGt1MDEsMjUwMDAwDQoxOTk2LEZMTyxOTCx2ZXJhc3F1MDEsMjMwMDAwDQoxOTk2LEZMTyxOTCx3ZWF0aGRhMDEsMjI1MDAwDQoxOTk2LEZMTyxOTCxqb2huc2NoMDQsMjIwMDAwDQoxOTk2LEZMTyxOTCxwZXJlenlvMDEsMTg3NTAwDQoxOTk2LEZMTyxOTCxuYXRhbHJvMDEsMTY1MDAwDQoxOTk2LEZMTyxOTCx0YXZhcmplMDEsMTM0MDAwDQoxOTk2LEZMTyxOTCxtYW50ZW1hMDEsMTMwMDAwDQoxOTk2LEZMTyxOTCxiYXRpc21pMDEsMTIwMDAwDQoxOTk2LEZMTyxOTCxtaWxsZWt1MDEsMTE4MDAwDQoxOTk2LEZMTyxOTCxwb3dlbGphMDQsMTE4MDAwDQoxOTk2LEZMTyxOTCx2YWxkZW1hMDEsMTE4MDAwDQoxOTk2LEZMTyxOTCxjYXN0aWx1MDEsMTA5MDAwDQoxOTk2LEZMTyxOTCxoZXJlZGZlMDEsMTA5MDAwDQoxOTk2LEZMTyxOTCxtY21pbGJpMDEsMTA5MDAwDQoxOTk2LEhPVSxOTCxkcmFiZWRvMDEsNTA1MDAwMA0KMTk5NixIT1UsTkwsYmFnd2VqZTAxLDQ4NzUwMDANCjE5OTYsSE9VLE5MLHN3aW5kZ3IwMSw0NDUwMDAwDQoxOTk2LEhPVSxOTCxiZWxsZGUwMSwyODAwMDAwDQoxOTk2LEhPVSxOTCxiaWdnaWNyMDEsMjA3NTAwMA0KMTk5NixIT1UsTkwsd2lsa2lyaTAxLDE1NTAwMDANCjE5OTYsSE9VLE5MLGtpbGVkYTAxLDEyNTAwMDANCjE5OTYsSE9VLE5MLGJlcnJ5c2UwMSw5OTUwMDANCjE5OTYsSE9VLE5MLG1heWRlMDEsNzUwMDAwDQoxOTk2LEhPVSxOTCxzcGllcmJpMDEsNDAwMDAwDQoxOTk2LEhPVSxOTCxyZXlub3NoMDEsMzMwMDAwDQoxOTk2LEhPVSxOTCxldXNlYnRvMDEsMzAwMDAwDQoxOTk2LEhPVSxOTCxqb25lc3RvMDIsMzAwMDAwDQoxOTk2LEhPVSxOTCxjYW5nZWpvMDEsMjgwMDAwDQoxOTk2LEhPVSxOTCxrbm9ycnJhMDEsMjgwMDAwDQoxOTk2LEhPVSxOTCxoYW1wdG1pMDEsMjc1MDAwDQoxOTk2LEhPVSxOTCx5b3VuZ2FuMDEsMjc1MDAwDQoxOTk2LEhPVSxOTCxndXRpZXJpMDEsMjM1MDAwDQoxOTk2LEhPVSxOTCxicm9jYWRvMDEsMjIwMDAwDQoxOTk2LEhPVSxOTCxodWRla2pvMDEsMjEwMDAwDQoxOTk2LEhPVSxOTCxtaWxsZW9yMDEsMjA1MDAwDQoxOTk2LEhPVSxOTCxtb3V0b2phMDEsMTk2MDAwDQoxOTk2LEhPVSxOTCxodW50ZWJyMDIsMTgwMDAwDQoxOTk2LEhPVSxOTCx0YWJha2plMDEsMTY1MDAwDQoxOTk2LEhPVSxOTCxzaW1tc21pMDEsMTYwMDAwDQoxOTk2LEhPVSxOTCxoYXJ0Z2RlMDEsMTMwMDAwDQoxOTk2LEhPVSxOTCx3YWxsZG8wMSwxMTUwMDANCjE5OTYsSE9VLE5MLGhlcm5heGEwMSwxMDkwMDANCjE5OTYsSE9VLE5MLG1vcm1hYWwwMSwxMDkwMDANCjE5OTYsSE9VLE5MLHNtYWxsbWEwMSwxMDkwMDANCjE5OTYsSE9VLE5MLHdhZ25lYmkwMiwxMDkwMDANCjE5OTYsTEFOLE5MLG1hcnRpcmEwMiw0ODAwMDAwDQoxOTk2LExBTixOTCx3b3JyZXRvMDEsNDAwMDAwMA0KMTk5NixMQU4sTkwsa2Fycm9lcjAxLDMxNTAwMDANCjE5OTYsTEFOLE5MLGNhbmRpdG8wMSwzMDAwMDAwDQoxOTk2LExBTixOTCxkZXNoaWRlMDEsMzAwMDAwMA0KMTk5NixMQU4sTkwscGlhenptaTAxLDI3MDAwMDANCjE5OTYsTEFOLE5MLGdhZ25lZ3IwMSwyNjAwMDAwDQoxOTk2LExBTixOTCxibG93ZW1pMDEsMjMwMDAwMA0KMTk5NixMQU4sTkwsYnV0bGVicjAxLDIwMDAwMDANCjE5OTYsTEFOLE5MLGFzdGFjcGUwMSwxMTAwMDAwDQoxOTk2LExBTixOTCxtb25kZXJhMDEsOTUwMDAwDQoxOTk2LExBTixOTCxndXRocm1hMDEsODcwMDAwDQoxOTk2LExBTixOTCxub21vaGkwMSw2MDAwMDANCjE5OTYsTEFOLE5MLHJhZGluc2MwMSw2MDAwMDANCjE5OTYsTEFOLE5MLHZhbGRlaXMwMSw0MjUwMDANCjE5OTYsTEFOLE5MLGhhbnNlZGEwMSw0MDAwMDANCjE5OTYsTEFOLE5MLGhlcm5hY2EwMSwzNzUwMDANCjE5OTYsTEFOLE5MLHByaW5jdG8wMSwzMjUwMDANCjE5OTYsTEFOLE5MLHRob21wbWkwMiwzMDAwMDANCjE5OTYsTEFOLE5MLGFzaGxlYmkwMSwxOTUwMDANCjE5OTYsTEFOLE5MLGZvbnZpY2gwMSwxNzUwMDANCjE5OTYsTEFOLE5MLGhhbGxkYTAxLDE3NTAwMA0KMTk5NixMQU4sTkwsY3VtbWlqbzAxLDE3MDAwMA0KMTk5NixMQU4sTkwsb3N1bmFhbjAxLDE1MDAwMA0KMTk5NixMQU4sTkwsaG9sbGF0bzAxLDEzNjAwMA0KMTk5NixMQU4sTkwsZWlzY2hqbzAxLDEzNTAwMA0KMTk5NixMQU4sTkwsZHJlaWZkYTAxLDEzNDAwMA0KMTk5NixMQU4sTkwsY2FzdHJqdTAxLDEyNDAwMA0KMTk5NixMQU4sTkwsY2VkZW5ybzAxLDEyNDAwMA0KMTk5NixMQU4sTkwscGFya2NoMDEsMTI0MDAwDQoxOTk2LExBTixOTCxnb3JlY3JpMDEsMTA5MDAwDQoxOTk2LExBTixOTCx3YWxsYXRpMDEsMTA5MDAwDQoxOTk2LE1PTixOTCxhbG91bW8wMSwzMDUwMDAwDQoxOTk2LE1PTixOTCxmYXNzZWplMDEsMjgwMDAwMA0KMTk5NixNT04sTkwscm9qYXNtZTAxLDIwMjUwMDANCjE5OTYsTU9OLE5MLHNlZ3VpZGEwMSwxNTUwMDAwDQoxOTk2LE1PTixOTCxmbGV0Y2RhMDEsMTEyNTAwMA0KMTk5NixNT04sTkwsY29ybWlyaDAxLDk1MDAwMA0KMTk5NixNT04sTkwsc2NvdHR0aTAxLDcwMDAwMA0KMTk5NixNT04sTkwsbGFuc2ltaTAxLDMxNTAwMA0KMTk5NixNT04sTkwsbWFydGlwZTAyLDMxNTAwMA0KMTk5NixNT04sTkwsd2hpdGVybzAyLDMwMDAwMA0KMTk5NixNT04sTkwscm9kcmloZTAyLDIyMDAwMA0KMTk5NixNT04sTkwsdmVyZXNkYTAxLDIwMDAwMA0KMTk5NixNT04sTkwsd2Vic3RsZTAxLDIwMDAwMA0KMTk5NixNT04sTkwsc3RhbmthbjAxLDE5MDAwMA0KMTk5NixNT04sTkwsZHllcm1pMDEsMTc1MDAwDQoxOTk2LE1PTixOTCxvYmFuZHNoMDEsMTY1MDAwDQoxOTk2LE1PTixOTCxwZXJlemNhMDEsMTY1MDAwDQoxOTk2LE1PTixOTCxydWV0ZWtpMDEsMTYwMDAwDQoxOTk2LE1PTixOTCxkYWFsb20wMSwxNTYwMDANCjE5OTYsTU9OLE5MLGZsb3lkY2wwMSwxNTAwMDANCjE5OTYsTU9OLE5MLHNwZWhydGkwMSwxNTAwMDANCjE5OTYsTU9OLE5MLGFuZHJlc2gwMSwxMzUwMDANCjE5OTYsTU9OLE5MLGdydWR6bWEwMSwxMzUwMDANCjE5OTYsTU9OLE5MLHNpbHZlZGEwMSwxMzI1MDANCjE5OTYsTU9OLE5MLGxha2VydGkwMSwxMjEwMDANCjE5OTYsTU9OLE5MLHNhbnRhZnAwMSwxMjEwMDANCjE5OTYsTU9OLE5MLG1hbnVlYmEwMSwxMjAwMDANCjE5OTYsTU9OLE5MLHVyYmludWcwMSwxMTIwMDANCjE5OTYsTU9OLE5MLGFsdmFydGEwMSwxMDkwMDANCjE5OTYsTU9OLE5MLGNoYXZlcmEwMSwxMDkwMDANCjE5OTYsTU9OLE5MLHBhbmlham8wMSwxMDkwMDANCjE5OTYsTllOLE5MLGhhcm5pcGUwMSwzNzI1MDAwDQoxOTk2LE5ZTixOTCxnaWxrZWJlMDEsMjc4NzUwMA0KMTk5NixOWU4sTkwsam9obnNsYTAzLDI3MTUwMDANCjE5OTYsTllOLE5MLGZyYW5jam8wMSwyNjAwMDAwDQoxOTk2LE5ZTixOTCx2aXpjYWpvMDEsMjIwMDAwMA0KMTk5NixOWU4sTkwsa2VudGplMDEsMTk2MDAwMA0KMTk5NixOWU4sTkwsaHVuZGx0bzAxLDE4Mzc1MDANCjE5OTYsTllOLE5MLGNsYXJrbWEwMSwxMTAwMDAwDQoxOTk2LE5ZTixOTCxoZW5yeWRvMDEsNzUwMDAwDQoxOTk2LE5ZTixOTCxtYXluZWJyMDEsNzI1MDAwDQoxOTk2LE5ZTixOTCxqb25lc2JvMDMsNDA1MDAwDQoxOTk2LE5ZTixOTCxqb25lc2NoMDUsMzM3NTAwDQoxOTk2LE5ZTixOTCxicm9nbnJpMDEsMzI1MDAwDQoxOTk2LE5ZTixOTCxkaXBvdGplMDEsMjI1MDAwDQoxOTk2LE5ZTixOTCxib2dhcnRpMDEsMjE1MDAwDQoxOTk2LE5ZTixOTCxtYWNkb2JvMDEsMjAwMDAwDQoxOTk2LE5ZTixOTCxtaW5vcmJsMDEsMTk4MDAwDQoxOTk2LE5ZTixOTCxtbGlja2RhMDEsMTk1MDAwDQoxOTk2LE5ZTixOTCxhbGZvbmVkMDEsMTgwMDAwDQoxOTk2LE5ZTixOTCxldmVyZWNhMDEsMTc4MDAwDQoxOTk2LE5ZTixOTCxpc3JpbmphMDEsMTY5MDAwDQoxOTk2LE5ZTixOTCxwdWxzaWJpMDEsMTU1MDAwDQoxOTk2LE5ZTixOTCxwZXRhZ3JvMDEsMTM1MDAwDQoxOTk2LE5ZTixOTCx0b21iZWFuMDEsMTMwMDAwDQoxOTk2LE5ZTixOTCxyb2JlcmtlMDEsMTI1MDAwDQoxOTk2LE5ZTixOTCxhY2V2ZWp1MDEsMTIzMDAwDQoxOTk2LE5ZTixOTCxieXJkcGEwMSwxMjMwMDANCjE5OTYsTllOLE5MLGh1c2tlYnUwMSwxMTYwMDANCjE5OTYsTllOLE5MLG9jaG9hYWwwMSwxMDkwMDANCjE5OTYsTllOLE5MLG9yZG9ucmUwMSwxMDkwMDANCjE5OTYsTllOLE5MLHBlcnNvcm8wMSwxMDkwMDANCjE5OTYsTllOLE5MLHdhbGxhZGUwMSwxMDkwMDANCjE5OTYsTllOLE5MLHdpbHNvcGEwMiwxMDkwMDANCjE5OTYsUEhJLE5MLGR5a3N0bGUwMSw2MjAwMDAwDQoxOTk2LFBISSxOTCxqZWZmZWdyMDEsNTUwMDAwMA0KMTk5NixQSEksTkwsZGF1bHRkYTAxLDUyNTAwMDANCjE5OTYsUEhJLE5MLHplaWxldG8wMSwyNzAwMDAwDQoxOTk2LFBISSxOTCxzY2hpbGN1MDEsMjAwMDAwMA0KMTk5NixQSEksTkwsbW9yYW5taTAxLDE5MDAwMDANCjE5OTYsUEhJLE5MLHNhbnRpYmUwMSwxNzAwMDAwDQoxOTk2LFBISSxOTCxlaXNlbmppMDEsMTIwMDAwMA0KMTk5NixQSEksTkwsd2hpdGVtYTAxLDgwMDAwMA0KMTk5NixQSEksTkwsbXVsaG90ZTAxLDcwMDAwMA0KMTk5NixQSEksTkwsZmVybmFzaTAxLDY1MDAwMA0KMTk5NixQSEksTkwsaW5jYXZwZTAxLDU1MDAwMA0KMTk5NixQSEksTkwsd2VzdGRhMDEsNTAwMDAwDQoxOTk2LFBISSxOTCxiZW5qYW1pMDEsMzI1MDAwDQoxOTk2LFBISSxOTCxyeWFua2UwMSwyNzI1MDANCjE5OTYsUEhJLE5MLHN0b2Nra2UwMSwyNjUwMDANCjE5OTYsUEhJLE5MLGxlaXBlZGEwMSwyNTAwMDANCjE5OTYsUEhJLE5MLGxvbmdtdG8wMSwyMjUwMDANCjE5OTYsUEhJLE5MLHRpbnNsbGUwMSwyMjUwMDANCjE5OTYsUEhJLE5MLHdpbGxpbWkwMywyMDAwMDANCjE5OTYsUEhJLE5MLGJvdHRhcmkwMSwxODUwMDANCjE5OTYsUEhJLE5MLHNwcmlucnUwMSwxODUwMDANCjE5OTYsUEhJLE5MLGJvcmxhdG8wMiwxNzUwMDANCjE5OTYsUEhJLE5MLG1pbWJzbWkwMSwxNjAwMDANCjE5OTYsUEhJLE5MLGdyZWVudHkwMSwxNTUwMDANCjE5OTYsUEhJLE5MLG11bm96Ym8wMSwxNDUwMDANCjE5OTYsUEhJLE5MLHBhcnJlamUwMSwxMzcwMDANCjE5OTYsUEhJLE5MLGxpZWJlbWkwMSwxMjUwMDANCjE5OTYsUEhJLE5MLGFtYXJvcnUwMiwxMDkwMDANCjE5OTYsUEhJLE5MLGJlZWNobWEwMSwxMDkwMDANCjE5OTYsUEhJLE5MLGJlbm5lZ2EwMSwxMDkwMDANCjE5OTYsUEhJLE5MLGdyYWNlbWkwMiwxMDkwMDANCjE5OTYsUEhJLE5MLGh1bnRlcmkwMSwxMDkwMDANCjE5OTYsUEhJLE5MLGpvcmRha2UwMSwxMDkwMDANCjE5OTYsUEhJLE5MLGpvcmRhcmkwMywxMDkwMDANCjE5OTYsUEhJLE5MLG1hZ2Vld2UwMSwxMDkwMDANCjE5OTYsUEhJLE5MLG1pdGNobGEwMSwxMDkwMDANCjE5OTYsUEhJLE5MLG11cnJhZ2wwMSwxMDkwMDANCjE5OTYsUEhJLE5MLG90ZXJvcmkwMSwxMDkwMDANCjE5OTYsUEhJLE5MLHJvbGVuc2MwMSwxMDkwMDANCjE5OTYsUEhJLE5MLHNjaGFsZ2UwMSwxMDkwMDANCjE5OTYsUEhJLE5MLHNlZmNpa2UwMSwxMDkwMDANCjE5OTYsUEhJLE5MLHp1YmVyam8wMSwxMDkwMDANCjE5OTYsUElULE5MLGJlbGxqYTAxLDQ3MDAwMDANCjE5OTYsUElULE5MLG1lcmNlb3IwMSwyNzAwMDAwDQoxOTk2LFBJVCxOTCxraW5namUwMSwyNTAwMDAwDQoxOTk2LFBJVCxOTCxuZWFnbGRlMDEsMjMwMDAwMA0KMTk5NixQSVQsTkwsaGF5ZXNjaDAxLDE3NTAwMDANCjE5OTYsUElULE5MLGdhcmNpY2EwMSwxMzUwMDAwDQoxOTk2LFBJVCxOTCxwbGVzYWRhMDEsMTEwMDAwMA0KMTk5NixQSVQsTkwsY2xhcmtkYTA1LDgwMDAwMA0KMTk5NixQSVQsTkwsa2luZ2VtaTAxLDc1MDAwMA0KMTk5NixQSVQsTkwsZGFyd2lkYTAxLDU1MDAwMA0KMTk5NixQSVQsTkwsbWFydGlhbDAzLDUwMDAwMA0KMTk5NixQSVQsTkwsc21pdGh6YTAxLDQwMDAwMA0KMTk5NixQSVQsTkwsYnJ1bWZqYTAxLDM1MDAwMA0KMTk5NixQSVQsTkwsbGlyaWFuZTAxLDM1MDAwMA0KMTk5NixQSVQsTkwsd2FnbmVwYTAxLDI3NTAwMA0KMTk5NixQSVQsTkwsbWljZWxkYTAxLDIyMDAwMA0KMTk5NixQSVQsTkwsd2VobmVqbzAxLDIwMDAwMA0KMTk5NixQSVQsTkwsY29va2VzdDAxLDE4MDAwMA0KMTk5NixQSVQsTkwsbGllYmVqbzAxLDE1MDAwMA0KMTk5NixQSVQsTkwsbG9haXplczAxLDE1MDAwMA0KMTk5NixQSVQsTkwsY2hyaXNqYTAxLDE0MzUwMA0KMTk5NixQSVQsTkwsZXJpY2tqbzAxLDEzNTAwMA0KMTk5NixQSVQsTkwscGFycmlzdDAxLDEzNTAwMA0KMTk5NixQSVQsTkwsam9obnNtYTAxLDEyNzUwMA0KMTk5NixQSVQsTkwsaGFuY29sZTAxLDExMDUwMA0KMTk5NixQSVQsTkwsbW9yZWxyYTAxLDExMDAwMA0KMTk5NixQSVQsTkwsYWxsZW5qZTAxLDEwOTAwMA0KMTk5NixQSVQsTkwsY29yZG9mcjAxLDEwOTAwMA0KMTk5NixQSVQsTkwsZGVzc2VlbDAxLDEwOTAwMA0KMTk5NixQSVQsTkwsa2VuZGFqYTAxLDEwOTAwMA0KMTk5NixQSVQsTkwsb3Npa2tlMDEsMTA5MDAwDQoxOTk2LFBJVCxOTCxwZXRlcmNoMDEsMTA5MDAwDQoxOTk2LFBJVCxOTCxydWViZW1hMDEsMTA5MDAwDQoxOTk2LFBJVCxOTCx3YWluaGRhMDEsMTA5MDAwDQoxOTk2LFBJVCxOTCx3aWxraW1hMDEsMTA5MDAwDQoxOTk2LFNETixOTCxnd3lubnRvMDEsNDMwMDAwMA0KMTk5NixTRE4sTkwsY2FtaW5rZTAxLDMyNzUwMDANCjE5OTYsU0ROLE5MLGhlbmRlcmkwMSwzMjUwMDAwDQoxOTk2LFNETixOTCxmaW5sZXN0MDEsMjg4NjY3Mg0KMTk5NixTRE4sTkwsam95bmV3YTAxLDI1NTAwMDANCjE5OTYsU0ROLE5MLGFzaGJ5YW4wMSwyMDAwMDAwDQoxOTk2LFNETixOTCx0ZXdrc2JvMDEsMTUwMDAwMA0KMTk5NixTRE4sTkwscmVlZGpvMDEsMTAwMDAwMA0KMTk5NixTRE4sTkwsdmFsZW5mZTAxLDEwMDAwMDANCjE5OTYsU0ROLE5MLGhvZmZtdHIwMSw5NTUwMDANCjE5OTYsU0ROLE5MLGJsYWlyd2kwMSw3NTAwMDANCjE5OTYsU0ROLE5MLGxpdmluc2MwMSw1NTAwMDANCjE5OTYsU0ROLE5MLGNlZGVuYW4wMSw1MDAwMDANCjE5OTYsU0ROLE5MLHNoaXBsY3IwMSw1MDAwMDANCjE5OTYsU0ROLE5MLGd3eW5uY2gwMSwzNjAwMDANCjE5OTYsU0ROLE5MLGF1c211YnIwMSwzNTAwMDANCjE5OTYsU0ROLE5MLGhhbWlsam8wMiwzMjUwMDANCjE5OTYsU0ROLE5MLHNhbmRlc2MwMiwzMDAwMDANCjE5OTYsU0ROLE5MLGNpYW5mYXIwMSwyNjI1MDANCjE5OTYsU0ROLE5MLHdvcnJldGkwMSwyMzAwMDANCjE5OTYsU0ROLE5MLGJlcmdtc2UwMSwyMDUwMDANCjE5OTYsU0ROLE5MLGZsb3JpYnIwMSwxNzI1MDANCjE5OTYsU0ROLE5MLGpvaG5zYnIwMSwxNzAwMDANCjE5OTYsU0ROLE5MLGxvcGV6bHUwMiwxNTUwMDANCjE5OTYsU0ROLE5MLG9xdWlzbWkwMSwxNTAwMDANCjE5OTYsU0ROLE5MLGJvY2h0ZG8wMSwxNDUwMDANCjE5OTYsU0ROLE5MLG5ld2ZpbWEwMSwxNDI1MDANCjE5OTYsU0ROLE5MLHZpbGxvcm8wMSwxMzAwMDANCjE5OTYsU0ROLE5MLHN0ZXZldG8wMSwxMjUwMDANCjE5OTYsU0ROLE5MLHZlcmFzZGEwMSwxMDkwMDANCjE5OTYsU0ZOLE5MLGJvbmRzYmEwMSw4NDE2NjY3DQoxOTk2LFNGTixOTCx3aWxsaW1hMDQsNjYwMDAwMA0KMTk5NixTRk4sTkwsdGhvbXBybzAxLDQ5NTgzMzMNCjE5OTYsU0ZOLE5MLGJlY2tybzAxLDI5NTQ0NTENCjE5OTYsU0ZOLE5MLG1hbndha2kwMSwxODc1MDAwDQoxOTk2LFNGTixOTCxsZWl0ZW1hMDEsMTg1MDAwMA0KMTk5NixTRk4sTkwsaGlsbGdsMDEsMTcwMDAwMA0KMTk5NixTRk4sTkwsZHVuc3RzaDAxLDE0NjA5NDENCjE5OTYsU0ZOLE5MLGNhcnJlbWEwMSwxMDAwMDAwDQoxOTk2LFNGTixOTCxqYXZpZXN0MDEsMTAwMDAwMA0KMTk5NixTRk4sTkwsYmF1dGlqbzAxLDc5MDAwMA0KMTk5NixTRk4sTkwsZmVybmFvczAxLDYzMzMzMw0KMTk5NixTRk4sTkwsZGVsdWNyaTAxLDQ3NTAwMA0KMTk5NixTRk4sTkwsc2NhcnNzdDAxLDM3NTAwMA0KMTk5NixTRk4sTkwsd2F0c29hbDAxLDI0MDAwMA0KMTk5NixTRk4sTkwsbGFtcGt0bzAxLDIzMDAwMA0KMTk5NixTRk4sTkwsZGV3ZXltYTAxLDIyNTAwMA0KMTk5NixTRk4sTkwsZ2FyZG5tYTAxLDIwMjUwMA0KMTk5NixTRk4sTkwsdmFsZGVzZTAxLDIwMDAwMA0KMTk5NixTRk4sTkwsdmFubGF3aTAxLDIwMDAwMA0KMTk5NixTRk4sTkwsYmF0aXNraTAxLDE1MDAwMA0KMTk5NixTRk4sTkwsbWNjYXJkYTAxLDE1MDAwMA0KMTk5NixTRk4sTkwscGhpbGxqcjAxLDEyNTAwMA0KMTk5NixTRk4sTkwsaGFsbG1lMDEsMTIwMDAwDQoxOTk2LFNGTixOTCxqdWRlbmplMDEsMTE5MDAwDQoxOTk2LFNGTixOTCxhdXJpbHJpMDEsMTEwNTAwDQoxOTk2LFNGTixOTCxiZW5hcm1hMDEsMTEwNTAwDQoxOTk2LFNGTixOTCxjcmVla2RvMDEsMTEwNTAwDQoxOTk2LFNGTixOTCxib3VyZ3N0MDEsMTA5MDAwDQoxOTk2LFNGTixOTCxjYW5pemphMDEsMTA5MDAwDQoxOTk2LFNGTixOTCxlc3Rlc3NoMDEsMTA5MDAwDQoxOTk2LFNGTixOTCxob29rY2gwMSwxMDkwMDANCjE5OTYsU0ZOLE5MLGpvbmVzZGEwNSwxMDkwMDANCjE5OTYsU0ZOLE5MLG1pcmFiZG8wMSwxMDkwMDANCjE5OTYsU0ZOLE5MLHdpbHNvZGUwMSwxMDkwMDANCjE5OTYsU0xOLE5MLGphY2tzZGEwMiw0MTAwMDAwDQoxOTk2LFNMTixOTCxnYW50cm8wMSw0MDAwMDAwDQoxOTk2LFNMTixOTCxzdG90dHRvMDEsNDAwMDAwMA0KMTk5NixTTE4sTkwsc21pdGhvejAxLDM1MDAwMDANCjE5OTYsU0xOLE5MLGJlbmVzYW4wMSwzMzc1MDAwDQoxOTk2LFNMTixOTCxwYWdub3RvMDEsMjY3NTAwMA0KMTk5NixTTE4sTkwsam9yZGFicjAxLDI1MDAwMDANCjE5OTYsU0xOLE5MLGxhbmtmcmEwMSwyNDE2NjY3DQoxOTk2LFNMTixOTCxlY2tlcmRlMDEsMjI1MDAwMA0KMTk5NixTTE4sTkwsZ2FldHRnYTAxLDIwMDAwMDANCjE5OTYsU0xOLE5MLGNsYXl0cm8wMSwxNjAwMDAwDQoxOTk2LFNMTixOTCxtb3JnYW1pMDEsMTI1MDAwMA0KMTk5NixTTE4sTkwsYWxpY2VsdTAxLDc1MDAwMA0KMTk5NixTTE4sTkwsb3Nib3JkbzAxLDcyNTAwMA0KMTk5NixTTE4sTkwscGFycmVqZTAxLDY3NTAwMA0KMTk5NixTTE4sTkwsZm9zc2F0bzAxLDY1MDAwMA0KMTk5NixTTE4sTkwsaG9uZXlyaTAxLDYwMDAwMA0KMTk5NixTTE4sTkwsbWNnZWV3aTAxLDYwMDAwMA0KMTk5NixTTE4sTkwsYm9yZGVwYTAxLDM3NTAwMA0KMTk5NixTTE4sTkwsc2hlYWZkYTAxLDMzNTAwMA0KMTk5NixTTE4sTkwsZ2FsbGVtaTAxLDMwMDAwMA0KMTk5NixTTE4sTkwsbWFicnlqbzAxLDIwMDAwMA0KMTk5NixTTE4sTkwsdXJiYW50bzAxLDE4MDAwMA0KMTk5NixTTE4sTkwscGV0a29tYTAxLDE1MDAwMA0KMTk5NixTTE4sTkwsbWF0aGV0ajAxLDEzMDAwMA0KMTk5NixTTE4sTkwsYmFpbGVjbzAxLDEyNTAwMA0KMTk5NixTTE4sTkwsYmVsbGRhMDEsMTI1MDAwDQoxOTk2LFNMTixOTCxzd2Vlbm1hMDEsMTI1MDAwDQoxOTk2LFNMTixOTCxiZW5lc2FsMDEsMTIyMDAwDQoxOTk2LFNMTixOTCxidXNieW1pMDEsMTA5MDAwDQoxOTk2LFNMTixOTCxsdWR3aWVyMDEsMTA5MDAwDQoxOTk2LFNMTixOTCxtZWppYW1pMDEsMTA5MDAwDQoxOTk2LFNMTixOTCx5b3VuZ2RtMDEsMTA5MDAwDQoxOTk3LEFOQSxBTCxmaW5sZWNoMDEsNDAwMDAwMA0KMTk5NyxBTkEsQUwsbGFuZ3NtYTAxLDQwMDAwMDANCjE5OTcsQU5BLEFMLHNhbG1vdGkwMSwzNTAwMDAwDQoxOTk3LEFOQSxBTCxkaXNhcmdhMDEsMjcwMDAwMA0KMTk5NyxBTkEsQUwsaG9sbGlkYTAxLDIwNTAwMDANCjE5OTcsQU5BLEFMLGVkbW9uamkwMSwyMDI1MDAwDQoxOTk3LEFOQSxBTCxsZXlyaWppMDEsMTkxNjk3Mg0KMTk5NyxBTkEsQUwsZ3ViaWNtYTAxLDE2MDAwMDANCjE5OTcsQU5BLEFMLHdhdHNvYWwwMSwxMzAwMDAwDQoxOTk3LEFOQSxBTCxtY2VscmNoMDEsODE3MDAwDQoxOTk3LEFOQSxBTCx2ZWxhcnJhMDEsODAwMDAwDQoxOTk3LEFOQSxBTCxtdXJyYWVkMDIsNzUwMDAwDQoxOTk3LEFOQSxBTCxhbGljZWx1MDEsNjUwMDAwDQoxOTk3LEFOQSxBTCxwZXJjaXRyMDEsNjUwMDAwDQoxOTk3LEFOQSxBTCxhbmRlcmdhMDEsNjAwMDAwDQoxOTk3LEFOQSxBTCxoYXNlZ3NoMDEsNTc1MDAwDQoxOTk3LEFOQSxBTCxncmViZWNyMDEsNDAwMDAwDQoxOTk3LEFOQSxBTCxob3dlbGphMDIsNDAwMDAwDQoxOTk3LEFOQSxBTCxqYW1lc21pMDEsMzMwMDAwDQoxOTk3LEFOQSxBTCxmYWJyZWpvMDEsMjc1MDAwDQoxOTk3LEFOQSxBTCxzcHJpbmRlMDEsMTk1MDAwDQoxOTk3LEFOQSxBTCxlbmNhcmFuMDEsMTc1MDAwDQoxOTk3LEFOQSxBTCxlcnN0YWRhMDEsMTc1MDAwDQoxOTk3LEFOQSxBTCxkaWNrc2phMDEsMTYyMDAwDQoxOTk3LEFOQSxBTCxob2x0em1pMDEsMTYwMDAwDQoxOTk3LEFOQSxBTCxwYWxtZW9yMDEsMTYwMDAwDQoxOTk3LEFOQSxBTCxoYXJyaXBlMDEsMTU3NTAwDQoxOTk3LEFOQSxBTCx0dXJuZWNoMDEsMTU1MDAwDQoxOTk3LEFOQSxBTCxvbnRpdnN0MDIsMTU0MDAwDQoxOTk3LEFOQSxBTCxncmVlbnRvMDIsMTUzMDAwDQoxOTk3LEFOQSxBTCxtYXlkYTAyLDE1MDAwMA0KMTk5NyxCQUwsQUwscmlwa2VjYTAxLDY4NTAwMDANCjE5OTcsQkFMLEFMLG11c3NpbWkwMSw2ODI1MDAwDQoxOTk3LEJBTCxBTCxhbG9tYXJvMDEsNjM1NDM3OQ0KMTk5NyxCQUwsQUwscGFsbWVyYTAxLDUzMzcwMjENCjE5OTcsQkFMLEFMLGFuZGVyYnIwMSw0MDUwMDAwDQoxOTk3LEJBTCxBTCxteWVyc3JhMDEsMzk1MDAwMA0KMTk5NyxCQUwsQUwsaG9pbGVjaDAxLDM2MDAwMDANCjE5OTcsQkFMLEFMLGVyaWNrc2MwMSwzMzAwMDAwDQoxOTk3LEJBTCxBTCxrZXlqaTAxLDIzNDAwMDANCjE5OTcsQkFMLEFMLGJvcmRpbWkwMSwyMzMzMzMzDQoxOTk3LEJBTCxBTCxkYXZpc2VyMDEsMjIwMDAwMA0KMTk5NyxCQUwsQUwsc3VyaG9iajAxLDE2MTY2NjcNCjE5OTcsQkFMLEFMLHJob2RlYXIwMSwxNjAwMDAwDQoxOTk3LEJBTCxBTCxrYW1pZXNjMDEsMTUzNTAwMA0KMTk5NyxCQUwsQUwsb3Jvc2NqZTAxLDExMDAwMDANCjE5OTcsQkFMLEFMLG1pbGxzYWwwMSw4NTAwMDANCjE5OTcsQkFMLEFMLG1hdGhldGUwMSw2ODUwMDANCjE5OTcsQkFMLEFMLGJvc2tpc2gwMSw2NjAwMDANCjE5OTcsQkFMLEFMLGluY2F2cGUwMSw2NTAwMDANCjE5OTcsQkFMLEFMLGhhbW1vamUwMSw0OTAwMDANCjE5OTcsQkFMLEFMLHdlYnN0bGUwMSw0MjUwMDANCjE5OTcsQkFMLEFMLHdhbHRvamUwMSwzODUwMDANCjE5OTcsQkFMLEFMLGJlbml0YXIwMSwyNzUwMDANCjE5OTcsQkFMLEFMLHRhcmFzdG8wMSwyNzAwMDANCjE5OTcsQkFMLEFMLHJlYm91amUwMSwyMDAwMDANCjE5OTcsQkFMLEFMLGNvcHBpcm8wMSwxODUwMDANCjE5OTcsQkFMLEFMLGpvaG5zbWkwMiwxNTAwMDANCjE5OTcsQkFMLEFMLGtyaXZkcmkwMSwxNTAwMDANCjE5OTcsQkFMLEFMLGxlZGVzYWEwMSwxNTAwMDANCjE5OTcsQk9TLEFMLHZhdWdobW8wMSw2MzUwMDAwDQoxOTk3LEJPUyxBTCxhdmVyeXN0MDEsNDg1MDAwMA0KMTk5NyxCT1MsQUwsdmFsZW5qbzAyLDM3NTAwMDANCjE5OTcsQk9TLEFMLGNvcmRld2kwMSwzMDAwMDAwDQoxOTk3LEJPUyxBTCxnb3Jkb3RvMDEsMjkwMDAwMA0KMTk5NyxCT1MsQUwsbmFlaHJ0aTAxLDI3MDAwMDANCjE5OTcsQk9TLEFMLHdha2VmdGkwMSwyNTAwMDAwDQoxOTk3LEJPUyxBTCxzbG9jdWhlMDEsMjMwMDAwMA0KMTk5NyxCT1MsQUwsc3RhbmxtaTAyLDIxMDAwMDANCjE5OTcsQk9TLEFMLGplZmZlcmUwMSwxOTAwMDAwDQoxOTk3LEJPUyxBTCxtYWNrc2gwMSwxODUwMDAwDQoxOTk3LEJPUyxBTCxzZWxlYWEwMSwxMTI2MDAwDQoxOTk3LEJPUyxBTCxvbGVhcnRyMDEsMTEwMDAwMA0KMTk5NyxCT1MsQUwsY2hlY29ybzAxLDkyNTAwMA0KMTk5NyxCT1MsQUwsZnJ5ZWplMDEsOTAwMDAwDQoxOTk3LEJPUyxBTCxoYW1tb2NoMDEsNzAwMDAwDQoxOTk3LEJPUyxBTCxoYXNlbGJpMDEsNjUwMDAwDQoxOTk3LEJPUyxBTCxzYWJlcmJyMDEsNTAwMDAwDQoxOTk3LEJPUyxBTCxjb3JzaWppMDEsNDcwMDAwDQoxOTk3LEJPUyxBTCxoZW5yeWJ1MDEsNDAwMDAwDQoxOTk3LEJPUyxBTCxtYWhvbXBhMDEsMzYwMDAwDQoxOTk3LEJPUyxBTCxicmFnZ2RhMDEsMjQwMDAwDQoxOTk3LEJPUyxBTCxicmFuZG1hMDEsMTg3NTAwDQoxOTk3LEJPUyxBTCx3YXNkaWpvMDEsMTg1MDAwDQoxOTk3LEJPUyxBTCx0cmxpY3JpMDEsMTg0MjUwDQoxOTk3LEJPUyxBTCxlc2hlbHZhMDEsMTgyMDAwDQoxOTk3LEJPUyxBTCx0YXZhcmplMDEsMTc1MDAwDQoxOTk3LEJPUyxBTCxnYXJjZXJpMDEsMTcyMDAwDQoxOTk3LEJPUyxBTCxwZW1iZXJ1MDEsMTUyMDAwDQoxOTk3LEJPUyxBTCxnYXJjaW5vMDEsMTUwMDAwDQoxOTk3LEJPUyxBTCxoYXR0ZXNjMDEsMTUwMDAwDQoxOTk3LEJPUyxBTCxodWRzb2pvMDIsMTUwMDAwDQoxOTk3LEJPUyxBTCxtYWhheXJvMDEsMTUwMDAwDQoxOTk3LEJPUyxBTCxtYWxhdmpvMDEsMTUwMDAwDQoxOTk3LENIQSxBTCxiZWxsZWFsMDEsMTAwMDAwMDANCjE5OTcsQ0hBLEFMLHRob21hZnIwNCw3MTUwMDAwDQoxOTk3LENIQSxBTCx2ZW50dXJvMDEsNjAwMDAwMA0KMTk5NyxDSEEsQUwsbmF2YXJqYTAxLDUwMDAwMDANCjE5OTcsQ0hBLEFMLGFsdmFyd2kwMSw0NjYyNTAwDQoxOTk3LENIQSxBTCxoZXJuYXJvMDEsNDYyMDAwMA0KMTk5NyxDSEEsQUwsZ3VpbGxvejAxLDQ1MDAwMDANCjE5OTcsQ0hBLEFMLHBoaWxsdG8wMiwyMjAwMDAwDQoxOTk3LENIQSxBTCxiYWluZWhhMDEsMTkyNTAwMA0KMTk5NyxDSEEsQUwsa2Fya29ybzAxLDE1MDAwMDANCjE5OTcsQ0hBLEFMLGxld2lzZGEwMSwxMzI1MDAwDQoxOTk3LENIQSxBTCxkcmFiZWRvMDEsMTMwMDAwMA0KMTk5NyxDSEEsQUwsY2FzdGl0bzAyLDEyMDAwMDANCjE5OTcsQ0hBLEFMLG1hcnRpZGEwMSw5NTAwMDANCjE5OTcsQ0hBLEFMLGtyZXV0Y2gwMSw2NDc1MDANCjE5OTcsQ0hBLEFMLGRhcndpZGEwMSw0NzUwMDANCjE5OTcsQ0hBLEFMLHBlbmF0bzAxLDQyNTAwMA0KMTk5NyxDSEEsQUwsYmVyZWphMDEsNDIwMDAwDQoxOTk3LENIQSxBTCxtYXJ0aW5vMDEsMzUwMDAwDQoxOTk3LENIQSxBTCxkdXJoYXJhMDEsMzEwMDAwDQoxOTk3LENIQSxBTCxiYWxkd2phMDEsMjUwMDAwDQoxOTk3LENIQSxBTCxtb3V0b2x5MDEsMjI1MDAwDQoxOTk3LENIQSxBTCxrYXJjaG1hMDEsMjAwMDAwDQoxOTk3LENIQSxBTCxzaW1hc2JpMDEsMjAwMDAwDQoxOTk3LENIQSxBTCxzbm9wZWNoMDEsMTg1MDAwDQoxOTk3LENIQSxBTCxkYXJ3aWplMDEsMTcyNTAwDQoxOTk3LENIQSxBTCxzaXJvdG1pMDEsMTY1MDAwDQoxOTk3LENIQSxBTCxiZXJ0b21pMDEsMTYwMDAwDQoxOTk3LENIQSxBTCxjYW1lcm1pMDEsMTYwMDAwDQoxOTk3LENIQSxBTCxsZXZpbmFsMDEsMTU3NTAwDQoxOTk3LENIQSxBTCxub3J0b2dyMDEsMTU1MDAwDQoxOTk3LENIQSxBTCxjYXN0aWNhMDIsMTUwMDAwDQoxOTk3LENIQSxBTCxleXJlc2MwMSwxNTAwMDANCjE5OTcsQ0hBLEFMLGZvdWxra2UwMSwxNTAwMDANCjE5OTcsQ0hBLEFMLG9yZG9ubWEwMSwxNTAwMDANCjE5OTcsQ0hBLEFMLHZhbGRlbWEwMiwxNTAwMDANCjE5OTcsQ0xFLEFMLHdpbGxpbWEwNCw3MTUwMDAwDQoxOTk3LENMRSxBTCxqdXN0aWRhMDEsNjMwMDAwMA0KMTk5NyxDTEUsQUwsZ3Jpc3NtYTAyLDQ4NTAwMDANCjE5OTcsQ0xFLEFMLG1jZG93amEwMSw0ODAwMDAwDQoxOTk3LENMRSxBTCxuYWd5Y2gwMSwzNDM3NTAwDQoxOTk3LENMRSxBTCxmcmFuY2p1MDEsMzI5MjQwNA0KMTk5NyxDTEUsQUwsaGVyc2hvcjAxLDMxMDAwMDANCjE5OTcsQ0xFLEFMLHZpenF1b20wMSwzMDUwMDAwDQoxOTk3LENMRSxBTCx0aG9tZWppMDEsMjYyNTAwMA0KMTk5NyxDTEUsQUwsYWxvbWFzYTAyLDI2MDAwMDANCjE5OTcsQ0xFLEFMLHJhbWlybWEwMiwyMTAwMDAwDQoxOTk3LENMRSxBTCxqYWNrc21pMDIsMjAwMDAwMA0KMTk5NyxDTEUsQUwsbWVzYWpvMDEsMTk0NzIyMw0KMTk5NyxDTEUsQUwscGx1bmtlcjAxLDE4NTAwMDANCjE5OTcsQ0xFLEFMLGZlcm5hdG8wMSwxNTUwMDAwDQoxOTk3LENMRSxBTCxzZWl0emtlMDEsMTIyMDAwMA0KMTk5NyxDTEUsQUwsY3VydGljaDAxLDkwMDAwMA0KMTk5NyxDTEUsQUwsYXNzZW5wYTAxLDg3NTAwMA0KMTk5NyxDTEUsQUwsb2dlYWNoMDEsNTMzMzMzDQoxOTk3LENMRSxBTCxtaXRjaGtlMDEsNTAwMDAwDQoxOTk3LENMRSxBTCxib3JkZXBhMDEsNDAwMDAwDQoxOTk3LENMRSxBTCxtYW50b2plMDEsMjQwMDAwDQoxOTk3LENMRSxBTCxzaHVleXBhMDEsMTk3MDAwDQoxOTk3LENMRSxBTCxsb3BlemFsMDIsMTc2MDAwDQoxOTk3LENMRSxBTCxnaWxlc2JyMDIsMTc1MDAwDQoxOTk3LENMRSxBTCxwZXJyeWhlMDEsMTY5MDAwDQoxOTk3LENMRSxBTCxtb3JtYWFsMDEsMTY1MDAwDQoxOTk3LENMRSxBTCxjb2xvbmJhMDEsMTUwMDAwDQoxOTk3LENMRSxBTCxrbGluZXN0MDIsMTUwMDAwDQoxOTk3LENMRSxBTCxyYW1pcmFsMDIsMTUwMDAwDQoxOTk3LENMRSxBTCx3cmlnaGphMDIsMTUwMDAwDQoxOTk3LERFVCxBTCxmcnltYXRyMDEsNjQwMDAwMA0KMTk5NyxERVQsQUwsb2xpdmFvbTAxLDExMjUwMDANCjE5OTcsREVULEFMLGpvbmVzdG8wMiw5NzUwMDANCjE5OTcsREVULEFMLGJsYWlyd2kwMSw4MDAwMDANCjE5OTcsREVULEFMLGVhc2xlZGEwMSw2NzUwMDANCjE5OTcsREVULEFMLHJlZWRqbzAxLDY3NTAwMA0KMTk5NyxERVQsQUwsam9obnNicjAxLDYwMDAwMA0KMTk5NyxERVQsQUwsd2FsYmVtYTAxLDU1MDAwMA0KMTk5NyxERVQsQUwsY29sZW12aTAxLDUwMDAwMA0KMTk5NyxERVQsQUwsbWljZWxkYTAxLDQ3NTAwMA0KMTk5NyxERVQsQUwsYnJvY2FkbzAxLDQyNTAwMA0KMTk5NyxERVQsQUwsaGlnZ2libzAyLDM3NTAwMA0KMTk5NyxERVQsQUwsbWlsbGVvcjAxLDMzNzUwMA0KMTk5NyxERVQsQUwsbmlldmVtZTAxLDMzNTAwMA0KMTk5NyxERVQsQUwsaHVudGVicjAyLDMxMDAwMA0KMTk5NyxERVQsQUwsbGlyYWZlMDEsMjg1MDAwDQoxOTk3LERFVCxBTCxjbGFya3RvMDIsMjYwMDAwDQoxOTk3LERFVCxBTCxteWVyc21pMDEsMjM1MDAwDQoxOTk3LERFVCxBTCxwcmlkZWN1MDEsMjE2MDAwDQoxOTk3LERFVCxBTCxjdW1taWpvMDEsMjE1MDAwDQoxOTk3LERFVCxBTCxzYWdlcmFqMDEsMjAwMDAwDQoxOTk3LERFVCxBTCx0aG9tcGp1MDIsMTk4MDAwDQoxOTk3LERFVCxBTCxuZXZpbnBoMDEsMTc4MDAwDQoxOTk3LERFVCxBTCxrZWFnbGdyMDEsMTcwMDAwDQoxOTk3LERFVCxBTCxjYXNhbnJhMDEsMTU3NTAwDQoxOTk3LERFVCxBTCxjcnV6ZGUwMSwxNTAwMDANCjE5OTcsREVULEFMLGhlcm5hZmUwMSwxNTAwMDANCjE5OTcsREVULEFMLG1vZWhsYnIwMSwxNTAwMDANCjE5OTcsREVULEFMLHRyYW1tYnUwMSwxNTAwMDANCjE5OTcsS0NBLEFMLGJlbGxqYTAxLDUwMDAwMDANCjE5OTcsS0NBLEFMLGFwcGlla2UwMSw0ODAwMDAwDQoxOTk3LEtDQSxBTCxkYXZpc2NoMDEsMzgwMDAwMA0KMTk5NyxLQ0EsQUwsa2luZ2plMDEsMjUwMDAwMA0KMTk5NyxLQ0EsQUwsYmVsY2h0aTAxLDIzMDAwMDANCjE5OTcsS0NBLEFMLG1vbnRnamUwMSwyMzAwMDAwDQoxOTk3LEtDQSxBTCxyb2JlcmJpMDEsMTk1MDAwMA0KMTk5NyxLQ0EsQUwsaGFuZXljaDAxLDE3MDAwMDANCjE5OTcsS0NBLEFMLG9mZmVyam8wMSwxNjAwMDAwDQoxOTk3LEtDQSxBTCxnb29kd3RvMDEsMTA1MDAwMA0KMTk5NyxLQ0EsQUwsbWFjZmFtaTAxLDg4NzUwMA0KMTk5NyxLQ0EsQUwscGljaGFoaTAxLDc4MDAwMA0KMTk5NyxLQ0EsQUwsaG93YXJkYTAyLDc2MjUwMA0KMTk5NyxLQ0EsQUwsY2FycmFoZTAxLDU2MDAwMA0KMTk5NyxLQ0EsQUwsYm9uZXNyaTAxLDM5MDAwMA0KMTk5NyxLQ0EsQUwsY29vcGVzYzAxLDM3NTAwMA0KMTk5NyxLQ0EsQUwscGFxdWVjcjAxLDM0MDAwMA0KMTk5NyxLQ0EsQUwsc3BlaHJ0aTAxLDI2MDAwMA0KMTk5NyxLQ0EsQUwsZGFtb25qbzAxLDI0MDAwMA0KMTk5NyxLQ0EsQUwsamFjb21qYTAxLDIyMDAwMA0KMTk5NyxLQ0EsQUwsb2xzb25ncjAxLDIxMDAwMA0KMTk5NyxLQ0EsQUwsdml0aWVqbzAxLDIxMDAwMA0KMTk5NyxLQ0EsQUwscm9zYWRqbzAxLDIwMDAwMA0KMTk5NyxLQ0EsQUwsdmVyZXNyYTAxLDE4NTAwMA0KMTk5NyxLQ0EsQUwsZHllamUwMSwxNzUwMDANCjE5OTcsS0NBLEFMLHN3ZWVubWkwMSwxNzUwMDANCjE5OTcsS0NBLEFMLGJsdW1hamEwMSwxNjUwMDANCjE5OTcsS0NBLEFMLGh1aXNtcmkwMSwxNjUwMDANCjE5OTcsS0NBLEFMLG15ZXJzcm8wMiwxNTUwMDANCjE5OTcsS0NBLEFMLGJlbml0eWEwMSwxNTAwMDANCjE5OTcsS0NBLEFMLGJldmlsYnIwMSwxNTAwMDANCjE5OTcsS0NBLEFMLGhhbHRlc2gwMSwxNTAwMDANCjE5OTcsS0NBLEFMLGhhbnNlamUwMSwxNTAwMDANCjE5OTcsS0NBLEFMLHJ1c2NoZ2wwMSwxNTAwMDANCjE5OTcsS0NBLEFMLHN1dHRvbGEwMSwxNTAwMDANCjE5OTcsS0NBLEFMLHdhbGtlamEwMSwxNTAwMDANCjE5OTcsS0NBLEFMLHdoaXNlbWEwMSwxNTAwMDANCjE5OTcsTUlOLEFMLHB1Y2tla2kwMSw3MjAwMDAwDQoxOTk3LE1JTixBTCxrbm9ibGNoMDEsNjE1MDAwMA0KMTk5NyxNSU4sQUwsbW9saXRwYTAxLDM1MDAwMDANCjE5OTcsTUlOLEFMLGFndWlscmkwMSwzMDc1MDAwDQoxOTk3LE1JTixBTCxzdGVpbnRlMDEsMjg1MDAwMA0KMTk5NyxNSU4sQUwsdGV3a3NibzAxLDIwMDAwMDANCjE5OTcsTUlOLEFMLG1lYXJlcGEwMSwxNDI1MDAwDQoxOTk3LE1JTixBTCxjb3Jkb21hMDEsODAwMDAwDQoxOTk3LE1JTixBTCxjb2xicmdyMDEsNzUwMDAwDQoxOTk3LE1JTixBTCxrZWxseXJvMDEsNzUwMDAwDQoxOTk3LE1JTixBTCxzd2luZGdyMDEsNzUwMDAwDQoxOTk3LE1JTixBTCxteWVyc2dyMDEsNTc1MDAwDQoxOTk3LE1JTixBTCxyYWRrZWJyMDEsNDUwMDAwDQoxOTk3LE1JTixBTCxvbHNvbmdyMDEsNDAwMDAwDQoxOTk3LE1JTixBTCx0cm9tYm1pMDEsMzc1MDAwDQoxOTk3LE1JTixBTCxndWFyZGVkMDEsMzAwMDAwDQoxOTk3LE1JTixBTCxzdGFob3NjMDEsMjc1MDAwDQoxOTk3LE1JTixBTCxiZWNrZXJpMDEsMjYwMDAwDQoxOTk3LE1JTixBTCxhbGRyZXNjMDEsMjI1MDAwDQoxOTk3LE1JTixBTCxyb2RyaWZyMDIsMjIwMDAwDQoxOTk3LE1JTixBTCxyb2JlcnJpMDIsMjA1MDAwDQoxOTk3LE1JTixBTCxjb29tZXJvMDEsMTcwMDAwDQoxOTk3LE1JTixBTCxuYXVsdGRhMDEsMTY1MDAwDQoxOTk3LE1JTixBTCxob2NraWRlMDEsMTUyNTAwDQoxOTk3LE1JTixBTCxicmVkZWJyMDEsMTUwMDAwDQoxOTk3LE1JTixBTCxoYXdraWxhMDEsMTUwMDAwDQoxOTk3LE1JTixBTCxsYXd0b21hMDIsMTUwMDAwDQoxOTk3LE1JTixBTCxtaWxsZWRhMDIsMTUwMDAwDQoxOTk3LE1JTixBTCxtaWxsZXRyMDEsMTUwMDAwDQoxOTk3LE1JTixBTCxyaXRjaHRvMDEsMTUwMDAwDQoxOTk3LE1JTixBTCx3YWxrZXRvMDQsMTUwMDAwDQoxOTk3LE1MNCxBTCxtY2RvbmJlMDEsNTAwMDAwMA0KMTk5NyxNTDQsQUwsamFoYWpvMDEsMzM4NzUwMA0KMTk5NyxNTDQsQUwsbmlsc3NkYTAxLDI3MDAwMDANCjE5OTcsTUw0LEFMLGZldHRlbWkwMSwxNzI1MDAwDQoxOTk3LE1MNCxBTCx2YWxlbmpvMDMsMTQ0NTY2Nw0KMTk5NyxNTDQsQUwsd2lja21ibzAxLDEyMTYwMDANCjE5OTcsTUw0LEFMLHZpbmFmZTAxLDgxMDAwMA0KMTk5NyxNTDQsQUwsZWxkcmVjYTAxLDc2NjY2Nw0KMTk5NyxNTDQsQUwsd2lsbGlnZTAyLDcwMDAwMA0KMTk5NyxNTDQsQUwsam9uZXNkbzAxLDYwMDAwNA0KMTk5NyxNTDQsQUwsbWllc2ttYTAxLDUwMDAwMA0KMTk5NyxNTDQsQUwsY2lyaWxqZTAxLDM1MDAwMA0KMTk5NyxNTDQsQUwsbWlyYW5hbjAxLDM1MDAwMA0KMTk5NyxNTDQsQUwsY2FycmNoMDIsMzI1MDAwDQoxOTk3LE1MNCxBTCxqYWNrc2RhMDMsMjc1MDAwDQoxOTk3LE1MNCxBTCxrYXJsc2MwMSwyNTAwMDANCjE5OTcsTUw0LEFMLGh1c29uamUwMSwyNDAwMDANCjE5OTcsTUw0LEFMLGJ1cm5pamUwMSwyMjUwMDANCjE5OTcsTUw0LEFMLG5ld2ZpbWEwMSwyMjUwMDANCjE5OTcsTUw0LEFMLGZsb3JpYnIwMSwyMTUwMDANCjE5OTcsTUw0LEFMLG1hdGhlbWkwMSwyMTAwMDANCjE5OTcsTUw0LEFMLGxldmlzamUwMSwyMDc1MDANCjE5OTcsTUw0LEFMLHZpbGxvcm8wMSwyMDUwMDANCjE5OTcsTUw0LEFMLHNwYXJrc3QwMSwxNzUwMDANCjE5OTcsTUw0LEFMLGRhbWljamUwMSwxNzI1MDANCjE5OTcsTUw0LEFMLGxvcmV0bWEwMSwxNjc1MDANCjE5OTcsTUw0LEFMLG1jYW5kamEwMSwxNTUwMDANCjE5OTcsTUw0LEFMLG1lcmNlam8wMiwxNTMwMDANCjE5OTcsTUw0LEFMLHJleWVzYWwwMSwxNTMwMDANCjE5OTcsTUw0LEFMLGFkYW1zam8wMiwxNTEwMDANCjE5OTcsTUw0LEFMLGJhbmtzYnIwMSwxNTAwMDANCjE5OTcsTUw0LEFMLGZyYW5janUwMSwxNTAwMDANCjE5OTcsTUw0LEFMLHZvaWd0amEwMSwxNTAwMDANCjE5OTcsTUw0LEFMLHdvb2Rhc3QwMSwxNTAwMDANCjE5OTcsTllBLEFMLGZpZWxkY2UwMSw5MjM3NTAwDQoxOTk3LE5ZQSxBTCxjb25lZGEwMSw2NjY2NjY3DQoxOTk3LE5ZQSxBTCxvbmVpbHBhMDEsNTUwMDAwMA0KMTk5NyxOWUEsQUwsd2lsbGliZTAyLDUzMDAwMDANCjE5OTcsTllBLEFMLHJvZ2Vya2UwMSw1MDAwMDAwDQoxOTk3LE5ZQSxBTCxtYXJ0aXRpMDIsNDQwMDAwMA0KMTk5NyxOWUEsQUwsd2VsbHNkYTAxLDM3NjY2NjcNCjE5OTcsTllBLEFMLGlyYWJ1aGkwMSwyMzI1MDAwDQoxOTk3LE5ZQSxBTCxnaXJhcmpvMDEsMjI1MDAwMA0KMTk5NyxOWUEsQUwsYm9nZ3N3YTAxLDIwMDAwMDANCjE5OTcsTllBLEFMLGdvb2RlZHcwMSwyMDAwMDAwDQoxOTk3LE5ZQSxBTCxyYWluZXRpMDEsMTcwMzY0NA0KMTk5NyxOWUEsQUwsaGF5ZXNjaDAxLDE3MDAwMDANCjE5OTcsTllBLEFMLHN0YW50bWkwMiwxNjE2NjY3DQoxOTk3LE5ZQSxBTCxrZWxseXBhMDMsMTEwMDAwMA0KMTk5NyxOWUEsQUwsbmVsc29qZTAxLDEwOTAwMDANCjE5OTcsTllBLEFMLHdoaXRlbWEwMSwxMDAwMDAwDQoxOTk3LE5ZQSxBTCxkdW5jYW1hMDEsODcwMDAwDQoxOTk3LE5ZQSxBTCxsbG95ZGdyMDEsNzcwMDAwDQoxOTk3LE5ZQSxBTCxzdHJhd2RhMDEsNzUwMDAwDQoxOTk3LE5ZQSxBTCxwZXR0aWFuMDEsNjAwMDAwDQoxOTk3LE5ZQSxBTCxqZXRlcmRlMDEsNTUwMDAwDQoxOTk3LE5ZQSxBTCxyaXZlcm1hMDEsNTUwMDAwDQoxOTk3LE5ZQSxBTCx3ZWF0aGRhMDEsNDM1MDAwDQoxOTk3LE5ZQSxBTCxzb2pvbHUwMSw0MjUwMDANCjE5OTcsTllBLEFMLGJvZWhyYnIwMSwxNjExMDANCjE5OTcsTllBLEFMLHJpdmVycnUwMSwxNTg4MDANCjE5OTcsTllBLEFMLHBvc2Fkam8wMSwxNTg1MDANCjE5OTcsTllBLEFMLG1lbmRvcmEwMSwxNTcwMDANCjE5OTcsT0FLLEFMLG1jZ3dpbWEwMSw3MTUwMDAwDQoxOTk3LE9BSyxBTCxjYW5zZWpvMDEsNDIyNTAwMA0KMTk5NyxPQUssQUwsYmVycm9nZTAxLDMzMDAwMDANCjE5OTcsT0FLLEFMLGJyb3Npc2MwMSwyNTUwMDAwDQoxOTk3LE9BSyxBTCx0YXlsb2JpMDQsNTc1MDAwDQoxOTk3LE9BSyxBTCxncm9vbWJ1MDEsMzkwMDAwDQoxOTk3LE9BSyxBTCxtYWdhZGRhMDEsMjU1MDAwDQoxOTk3LE9BSyxBTCxsZXdpc3JpMDEsMjUwMDAwDQoxOTk3LE9BSyxBTCxtb2hsZW1pMDEsMjUwMDAwDQoxOTk3LE9BSyxBTCxtYXluZWJyMDEsMjI1MDAwDQoxOTk3LE9BSyxBTCxzZXJ2aXNjMDEsMjI1MDAwDQoxOTk3LE9BSyxBTCxnaWFtYmphMDEsMjA1MDAwDQoxOTk3LE9BSyxBTCxyZXllc2NhMDEsMjAwMDAwDQoxOTk3LE9BSyxBTCxvcXVpc21pMDEsMTk1MDAwDQoxOTk3LE9BSyxBTCx5b3VuZ2VyMDIsMTk1MDAwDQoxOTk3LE9BSyxBTCxwcmlldGFyMDEsMTk0MDAwDQoxOTk3LE9BSyxBTCxqb2huc2RhMDUsMTcyNTAwDQoxOTk3LE9BSyxBTCx3ZW5nZWRvMDEsMTcyNTAwDQoxOTk3LE9BSyxBTCxhY3JlbWEwMSwxNjUwMDANCjE5OTcsT0FLLEFMLGhheW5lamkwMSwxNjUwMDANCjE5OTcsT0FLLEFMLHN0YWlybWEwMSwxNjUwMDANCjE5OTcsT0FLLEFMLHRlbGdoZGEwMSwxNjUwMDANCjE5OTcsT0FLLEFMLHdpbGxpZ2UwMywxNjUwMDANCjE5OTcsT0FLLEFMLGJhdGlzdG8wMSwxNjI1MDANCjE5OTcsT0FLLEFMLGJvdXJucmEwMSwxNjI1MDANCjE5OTcsT0FLLEFMLGthcnNhc3QwMSwxNjAwMDANCjE5OTcsT0FLLEFMLGFkYW1zd2kwMiwxNTc1MDANCjE5OTcsT0FLLEFMLHNtYWxsYWEwMSwxNTUwMDANCjE5OTcsT0FLLEFMLGxvcnJhYW4wMSwxNTQwMDANCjE5OTcsT0FLLEFMLG1hc2hvZGEwMSwxNTQwMDANCjE5OTcsT0FLLEFMLHdvamNpc3QwMSwxNTQwMDANCjE5OTcsT0FLLEFMLGxlc2hlYnIwMSwxNTIwMDANCjE5OTcsT0FLLEFMLG1vbGluaXowMSwxNTIwMDANCjE5OTcsT0FLLEFMLHNwaWV6c2MwMSwxNTEwMDANCjE5OTcsT0FLLEFMLGJlbGxobWEwMSwxNTAwMDANCjE5OTcsT0FLLEFMLGt1YmludGkwMSwxNTAwMDANCjE5OTcsT0FLLEFMLGxlbm5vcGEwMSwxNTAwMDANCjE5OTcsT0FLLEFMLHJpZ2J5YnIwMSwxNTAwMDANCjE5OTcsT0FLLEFMLHRlamFkbWkwMSwxNTAwMDANCjE5OTcsU0VBLEFMLGdyaWZma2UwMiw3ODg1NTMyDQoxOTk3LFNFQSxBTCxqb2huc3JhMDUsNjMyNTAwMA0KMTk5NyxTRUEsQUwsYnVobmVqYTAxLDQ4Mjc5NjINCjE5OTcsU0VBLEFMLGZhc3NlamUwMSwzNDY2NjY3DQoxOTk3LFNFQSxBTCxtYXJ0aWVkMDEsMzA1MDAwMA0KMTk5NyxTRUEsQUwsY2hhcmxubzAxLDI5NTAwMDANCjE5OTcsU0VBLEFMLG1veWVyamEwMSwxNzAwMDAwDQoxOTk3LFNFQSxBTCxzb3JyZXBhMDEsMTUwMDAwMA0KMTk5NyxTRUEsQUwsc2FuZGVzYzAyLDEzMDAwMDANCjE5OTcsU0VBLEFMLHdpbHNvZGEwMSwxMTI1MDAwDQoxOTk3LFNFQSxBTCxyb2RyaWFsMDEsMTA2MjUwMA0KMTk5NyxTRUEsQUwsY29yYWpvMDEsMTAyNTAwMA0KMTk5NyxTRUEsQUwsYXlhbGFibzAxLDkwMDAwMA0KMTk5NyxTRUEsQUwsYW1hcmFyaTAxLDU1MDAwMA0KMTk5NyxTRUEsQUwsYmxvd2VtaTAxLDQwMDAwMA0KMTk5NyxTRUEsQUwsdGluc2xsZTAxLDQwMDAwMA0KMTk5NyxTRUEsQUwsZ2F0ZXNicjAxLDMwMDAwMA0KMTk5NyxTRUEsQUwsd2VsbHNibzAxLDI4MDAwMA0KMTk5NyxTRUEsQUwsbWFyemFqbzAxLDI1MDAwMA0KMTk5NyxTRUEsQUwsZGF2aXN0aTAxLDIxNzUwMA0KMTk5NyxTRUEsQUwsZHVjZXlybzAxLDIwMDAwMA0KMTk5NyxTRUEsQUwsbWFuemFqbzAxLDIwMDAwMA0KMTk5NyxTRUEsQUwsd29sY29ibzAxLDE5NTAwMA0KMTk5NyxTRUEsQUwsZGF2aXNydTAxLDE4NTAwMA0KMTk5NyxTRUEsQUwsdG9ycmVzYTAxLDE3NTAwMA0KMTk5NyxTRUEsQUwscmFhYmVicjAxLDE2MDAwMA0KMTk5NyxTRUEsQUwsaHVydGFlZDAxLDE1NTAwMA0KMTk5NyxTRUEsQUwsc2hlZXRhbjAxLDE1MjUwMA0KMTk5NyxTRUEsQUwsaGliYmFncjAxLDE1MjAwMA0KMTk5NyxTRUEsQUwsbWNjYXJncjAxLDE1MTAwMA0KMTk5NyxTRUEsQUwsaWJhbmVyYTAxLDE1MDAwMA0KMTk5NyxTRUEsQUwsd2lsa2lyaTAxLDE1MDAwMA0KMTk5NyxURVgsQUwsZ29uemFqdTAzLDc1MDAwMDANCjE5OTcsVEVYLEFMLHJvZHJpaXYwMSw2ODI1MDAwDQoxOTk3LFRFWCxBTCxjbGFya3dpMDIsNTY1NzM2NQ0KMTk5NyxURVgsQUwsaGlsbGtlMDEsNDg1MDAwMA0KMTk5NyxURVgsQUwscGFsbWVkZTAxLDQ4MDAwMDANCjE5OTcsVEVYLEFMLHdldHRlam8wMSw0NTc1MDAwDQoxOTk3LFRFWCxBTCxidXJrZWpvMDMsMzU1MDAwMA0KMTk5NyxURVgsQUwscGF2bGlybzAxLDI4NTAwMDANCjE5OTcsVEVYLEFMLHdpdHRibzAxLDIwMDAwMDANCjE5OTcsVEVYLEFMLG1jbGVtbWEwMSwxODAwMDAwDQoxOTk3LFRFWCxBTCx0ZXR0bG1pMDEsMTc4MzE0MA0KMTk5NyxURVgsQUwsb2xpdmVkYTAyLDEwNzUwMDANCjE5OTcsVEVYLEFMLGhlcm5heGEwMSw2MDAwMDANCjE5OTcsVEVYLEFMLHZvc2JlZWQwMSw0NTAwMDANCjE5OTcsVEVYLEFMLG5ld3Nvd2EwMSwzNzUwMDANCjE5OTcsVEVYLEFMLHdoaXRlbWEwMiwzNzUwMDANCjE5OTcsVEVYLEFMLGdyZWVycnUwMSwzNTgzMzMNCjE5OTcsVEVYLEFMLHN0ZXZlbGUwMSwzMDAwMDANCjE5OTcsVEVYLEFMLGNlZGVuZG8wMSwyODUwMDANCjE5OTcsVEVYLEFMLHJpcGtlYmkwMSwyNzUwMDANCjE5OTcsVEVYLEFMLGRldmVybWkwMSwyNTAwMDANCjE5OTcsVEVYLEFMLGRpYXphbDAxLDI1MDAwMA0KMTk5NyxURVgsQUwsaGVubmVtaTAxLDI1MDAwMA0KMTk5NyxURVgsQUwsYnVmb3JkYTAxLDIyNTAwMA0KMTk5NyxURVgsQUwsY2xhcmt0ZTAxLDIwMDAwMA0KMTk5NyxURVgsQUwsZ2lsYmUwMSwyMDAwMDANCjE5OTcsVEVYLEFMLHNpbW1zbWkwMSwyMDAwMDANCjE5OTcsVEVYLEFMLHNpbHZlZGEwMSwxODUwMDANCjE5OTcsVEVYLEFMLG1lcmNlaGUwMSwxODAwMDANCjE5OTcsVEVYLEFMLGhlbGxpcmkwMSwxNjUwMDANCjE5OTcsVEVYLEFMLGd1bmRlZXIwMSwxNjAwMDANCjE5OTcsVEVYLEFMLGJhaWxlc2MwMSwxNTAwMDANCjE5OTcsVEVYLEFMLGV2ZXJzYnIwMSwxNTAwMDANCjE5OTcsVEVYLEFMLGhlcmVkd2kwMSwxNTAwMDANCjE5OTcsVEVYLEFMLHBhdHRlZGEwNCwxNTAwMDANCjE5OTcsVEVYLEFMLHNhbnRhanUwMSwxNTAwMDANCjE5OTcsVEVYLEFMLHRhdGlzZmUwMSwxNTAwMDANCjE5OTcsVE9SLEFMLGNsZW1lcm8wMiw4NDAwMDAwDQoxOTk3LFRPUixBTCxjYXJ0ZWpvMDEsNjUwMDAwMA0KMTk5NyxUT1IsQUwsZ3V6bWFqdTAxLDQwMDAwMDANCjE5OTcsVE9SLEFMLGhhbnNvZXIwMSwzNTMzMzMzDQoxOTk3LFRPUixBTCxoZW50Z3BhMDEsMzMwMDAwMA0KMTk5NyxUT1IsQUwsbWVyY2VvcjAxLDI3MDAwMDANCjE5OTcsVE9SLEFMLGdhcmNpY2EwMSwyNTUwMDAwDQoxOTk3LFRPUixBTCxuaXhvbm90MDEsMjUwMDAwMA0KMTk5NyxUT1IsQUwsc2FudGliZTAxLDI1MDAwMDANCjE5OTcsVE9SLEFMLHNwcmFnZWQwMiwxOTAwMDAwDQoxOTk3LFRPUixBTCx0aW1saW1pMDEsMTMwMDAwMA0KMTk5NyxUT1IsQUwsYnJ1bWZqYTAxLDEwNTAwMDANCjE5OTcsVE9SLEFMLHBsZXNhZGEwMSw4MDAwMDANCjE5OTcsVE9SLEFMLHF1YW50cGEwMSw3MDAwMDANCjE5OTcsVE9SLEFMLG9icmllY2gwMSw2MjUwMDANCjE5OTcsVE9SLEFMLGRlbGdhY2EwMSw1MDAwMDANCjE5OTcsVE9SLEFMLGdvbnphYWwwMSw1MDAwMDANCjE5OTcsVE9SLEFMLGdyZWVuc2gwMSw1MDAwMDANCjE5OTcsVE9SLEFMLHdpbGxpd28wMiwzODc1MDANCjE5OTcsVE9SLEFMLHJpc2xlYmkwMSwzODAwMDANCjE5OTcsVE9SLEFMLHNhbXVlanUwMSwzNzUwMDANCjE5OTcsVE9SLEFMLGNyYWJ0dGkwMSwyNDUwMDANCjE5OTcsVE9SLEFMLHBlcmV6cm8wMSwxODUwMDANCjE5OTcsVE9SLEFMLHBlcmV6dG8wMywxODUwMDANCjE5OTcsVE9SLEFMLHBlcnNvcm8wMSwxODUwMDANCjE5OTcsVE9SLEFMLHNwb2xqcGEwMSwxODUwMDANCjE5OTcsVE9SLEFMLGFuZHVqbHUwMSwxNzAwMDANCjE5OTcsVE9SLEFMLGJyaXRvdGkwMSwxNjAwMDANCjE5OTcsVE9SLEFMLGNyZXNwZmUwMSwxNjAwMDANCjE5OTcsVE9SLEFMLHN0ZXdhc2gwMSwxNTQwMDANCjE5OTcsVE9SLEFMLGNhcnBlY2gwMSwxNTAwMDANCjE5OTcsVE9SLEFMLGNydXpqbzAyLDE1MDAwMA0KMTk5NyxUT1IsQUwsZXNjb2JrZTAxLDE1MDAwMA0KMTk5NyxBVEwsTkwsc21vbHRqbzAxLDcwMDAwMDANCjE5OTcsQVRMLE5MLG1hZGR1Z3IwMSw2Nzc1MDAwDQoxOTk3LEFUTCxOTCxtY2dyaWZyMDEsNTUwMDAwMA0KMTk5NyxBVEwsTkwsZ2xhdml0bzAyLDUwNTAwMDANCjE5OTcsQVRMLE5MLGxvZnRva2UwMSw0ODI1MDAwDQoxOTk3LEFUTCxOTCxibGF1c2plMDEsNDAyMDAwMA0KMTk5NyxBVEwsTkwsbmVhZ2xkZTAxLDM2MTAwMDANCjE5OTcsQVRMLE5MLHdvaGxlbWEwMSwzMDAwMDAwDQoxOTk3LEFUTCxOTCxrbGVza3J5MDEsMjQ1MDAwMA0KMTk5NyxBVEwsTkwsbG9wZXpqYTAxLDIwNTAwMDANCjE5OTcsQVRMLE5MLGxlbWtlbWEwMSwyMDAwMDAwDQoxOTk3LEFUTCxOTCxqb25lc2NoMDYsMTUyNTAwMA0KMTk5NyxBVEwsTkwsYmllbGVtaTAxLDcwNzUwMA0KMTk5NyxBVEwsTkwsaGFydmVicjAxLDUwMDAwMA0KMTk5NyxBVEwsTkwsbG9ja2hrZTAxLDI5MDAwMA0KMTk5NyxBVEwsTkwsYmVsbGlyYTAxLDI1MDAwMA0KMTk5NyxBVEwsTkwsdHVja2VtaTAxLDI1MDAwMA0KMTk5NyxBVEwsTkwsY2xvbnRicjAxLDI0NTAwMA0KMTk5NyxBVEwsTkwsZW1icmVhbDAxLDIwNjAwMA0KMTk5NyxBVEwsTkwsYmF1dGlkYTAxLDIwMDAwMA0KMTk5NyxBVEwsTkwsbW9yZGVtaTAxLDIwMDAwMA0KMTk5NyxBVEwsTkwsYm9yYm9wZTAyLDE4NTAwMA0KMTk5NyxBVEwsTkwsd2FkZXRlMDEsMTgwMDAwDQoxOTk3LEFUTCxOTCxieXJkcGEwMSwxNzUwMDANCjE5OTcsQVRMLE5MLHBlcmV6ZWQwMiwxNzI1MDANCjE5OTcsQVRMLE5MLGJvcm93am8wMSwxNTc1MDANCjE5OTcsQVRMLE5MLGdyYWZmdG8wMSwxNTI1MDANCjE5OTcsQVRMLE5MLGpvbmVzYW4wMSwxNTI1MDANCjE5OTcsQVRMLE5MLGNhdGhlbWkwMSwxNTAwMDANCjE5OTcsQVRMLE5MLGZveGNoMDIsMTUwMDAwDQoxOTk3LEFUTCxOTCxzcGVocnRpMDEsMTUwMDAwDQoxOTk3LENITixOTCxzb3Nhc2EwMSw1NTAwMDAwDQoxOTk3LENITixOTCxyb2phc21lMDEsNDU4MzMzMw0KMTk5NyxDSE4sTkwsZ3JhY2VtYTAxLDQ1MjUwMDANCjE5OTcsQ0hOLE5MLG1jcmFlYnIwMSwzOTAwMDAwDQoxOTk3LENITixOTCx0YXBhbmtlMDEsMzc1MDAwMA0KMTk5NyxDSE4sTkwsc2FuZGJyeTAxLDMyNTAwMDANCjE5OTcsQ0hOLE5MLG11bGhvdGUwMSwyNDAwMDAwDQoxOTk3LENITixOTCxkdW5zdHNoMDEsMjMyNTAwMA0KMTk5NyxDSE4sTkwsdHJhY2hzdDAxLDIxMDAwMDANCjE5OTcsQ0hOLE5MLGNhc3RpZnIwMSwxNzQwMDAwDQoxOTk3LENITixOTCxzZXJ2YXNjMDEsMTM3MDAwMA0KMTk5NyxDSE4sTkwsc2FuY2hyZTAxLDEyODc1MDANCjE5OTcsQ0hOLE5MLHBhdHRlYm8wMSwxMDUwMDAwDQoxOTk3LENITixOTCxjbGFya2RhMDUsNDUwMDAwDQoxOTk3LENITixOTCxoZXJuYWpvMDEsNDUwMDAwDQoxOTk3LENITixOTCxjYXNpYWxhMDEsMzUwMDAwDQoxOTk3LENITixOTCx3ZW5kZXR1MDEsMzUwMDAwDQoxOTk3LENITixOTCxoYW5zZWRhMDEsMzI1MDAwDQoxOTk3LENITixOTCxmb3N0ZWtlMDEsMjc1MDAwDQoxOTk3LENITixOTCxhZGFtc3RlMDEsMjE1MDAwDQoxOTk3LENITixOTCxzdGV2ZWRhMDEsMjEwMDAwDQoxOTk3LENITixOTCxib3R0ZWtlMDEsMTk1MDAwDQoxOTk3LENITixOTCxob3VzdHR5MDEsMTg1MDAwDQoxOTk3LENITixOTCxicm93bmJyMDEsMTU1MDAwDQoxOTk3LENITixOTCxnbGFudmRvMDEsMTU1MDAwDQoxOTk3LENITixOTCxzd2FydGRhMDEsMTUzNTAwDQoxOTk3LENITixOTCxiYXRpc21pMDEsMTUzMDAwDQoxOTk3LENITixOTCxodWJiYW1pMDEsMTUzMDAwDQoxOTk3LENITixOTCxnb256YWplMDEsMTUwMDAwDQoxOTk3LENITixOTCxvcmlla2UwMSwxNTAwMDANCjE5OTcsQ0hOLE5MLHBpc2NpbWEwMSwxNTAwMDANCjE5OTcsQ0hOLE5MLHRhdGlzcmEwMSwxNTAwMDANCjE5OTcsQ0lOLE5MLHNpZXJycnUwMSw2NzAwMDAwDQoxOTk3LENJTixOTCxyaWpvam8wMSw2MTUwMDAwDQoxOTk3LENJTixOTCxsYXJraWJhMDEsNTM1MDAwMA0KMTk5NyxDSU4sTkwsc21pbGVqbzAxLDM3NTAwMDANCjE5OTcsQ0lOLE5MLHNhbmRlcmUwMiwzNzAwMDAwDQoxOTk3LENJTixOTCxtb3JyaWhhMDIsMzEwMDAwMA0KMTk5NyxDSU4sTkwsYnJhbnRqZTAxLDI4MDAwMDANCjE5OTcsQ0lOLE5MLHNjaG91cGUwMSwyNjQwMDAwDQoxOTk3LENJTixOTCxidXJiYWRhMDEsMjEwMDAwMA0KMTk5NyxDSU4sTkwsYm9vbmVicjAxLDE3MDAwMDANCjE5OTcsQ0lOLE5MLG1lcmNra2UwMSwxNzAwMDAwDQoxOTk3LENJTixOTCxzYW5kZWRlMDIsMTIwMDAwMA0KMTk5NyxDSU4sTkwsYmVsaW5zdDAxLDk1MDAwMA0KMTk5NyxDSU4sTkwsdGF1YmVlZDAxLDkwMDAwMA0KMTk5NyxDSU4sTkwsaGFycmlsZTAxLDY1MDAwMA0KMTk5NyxDSU4sTkwsc2hhd2plMDEsNjUwMDAwDQoxOTk3LENJTixOTCxicmFuc2plMDEsNTUwMDAwDQoxOTk3LENJTixOTCxtb3JnYW1pMDEsNTAwMDAwDQoxOTk3LENJTixOTCxwb3J0dW1hMDEsNDAwMDAwDQoxOTk3LENJTixOTCxvbGl2ZWpvMDEsMzc1MDAwDQoxOTk3LENJTixOTCxib25lc3JpMDEsMzUwMDAwDQoxOTk3LENJTixOTCxwZW5kbHRlMDEsMzUwMDAwDQoxOTk3LENJTixOTCxncmVlbndpMDEsMzAwMDAwDQoxOTk3LENJTixOTCxtYXJ0aXBlMDMsMjE2MDAwDQoxOTk3LENJTixOTCxlaXNjaGpvMDEsMjE1MDAwDQoxOTk3LENJTixOTCxqYXJ2aWtlMDEsMTk3MDAwDQoxOTk3LENJTixOTCxudW5uYWpvMDEsMTkwMDAwDQoxOTk3LENJTixOTCxwZXJlemVkMDEsMTgwMDAwDQoxOTk3LENJTixOTCxrZWxseW1pMDIsMTc1MDAwDQoxOTk3LENJTixOTCxvd2Vuc2VyMDEsMTc1MDAwDQoxOTk3LENJTixOTCxyb2RyaWZlMDEsMTc1MDAwDQoxOTk3LENJTixOTCxzdHluZWNoMDEsMTY1MDAwDQoxOTk3LENJTixOTCxncmF2ZWRhMDEsMTYwMDAwDQoxOTk3LENJTixOTCxyZW1saW1pMDEsMTU1MDAwDQoxOTk3LENJTixOTCxmb3JkeWJyMDEsMTUwMDAwDQoxOTk3LENJTixOTCxnaWJyYXN0MDEsMTUwMDAwDQoxOTk3LENJTixOTCxyZWVzZXBvMDEsMTUwMDAwDQoxOTk3LENJTixOTCxzdWxsaXNjMDEsMTUwMDAwDQoxOTk3LENJTixOTCx0b21rb2JyMDEsMTUwMDAwDQoxOTk3LENJTixOTCx3aGl0ZWdhMDEsMTUwMDAwDQoxOTk3LENPTCxOTCx3YWxrZWxhMDEsNjMyNTAwMA0KMTk5NyxDT0wsTkwsYmljaGVkYTAxLDUxNjY2NjcNCjE5OTcsQ09MLE5MLGdhbGFyYW4wMSw0OTUwMDAwDQoxOTk3LENPTCxOTCxzd2lmdGJpMDIsNDYwODMzMw0KMTk5NyxDT0wsTkwsYnVya3NlbDAxLDQwMDAwMDANCjE5OTcsQ09MLE5MLHlvdW5nZXIwMSwzMjAwMDAwDQoxOTk3LENPTCxOTCx3ZWlzc3dhMDEsMjcwMDAwMA0KMTk5NyxDT0wsTkwscml0emtlMDEsMjUwMDAwMA0KMTk5NyxDT0wsTkwsY2FzdGl2aTAyLDIyMjUwMDANCjE5OTcsQ09MLE5MLG1hbndha2kwMSwxNjc1MDAwDQoxOTk3LENPTCxOTCxyZWVkc3QwMSwxMjAwMDAwDQoxOTk3LENPTCxOTCxyZWVkamUwMiw2NTAwMDANCjE5OTcsQ09MLE5MLGRpcG90amUwMSw1NTAwMDANCjE5OTcsQ09MLE5MLGxlc2thY3UwMSw1MTY2NjcNCjE5OTcsQ09MLE5MLHZhbmRlam8wMiw1MDAwMDANCjE5OTcsQ09MLE5MLG11bm96bWkwMSwzNTAwMDANCjE5OTcsQ09MLE5MLHRob21wbWEwMSwyNTIwMDANCjE5OTcsQ09MLE5MLGJhaWxlcm8wMSwyMDAwMDANCjE5OTcsQ09MLE5MLGNvbGVzZGEwMSwyMDAwMDANCjE5OTcsQ09MLE5MLG1jY3JhcXUwMSwxOTgwMDANCjE5OTcsQ09MLE5MLGJhdGVzamEwMSwxOTUwMDANCjE5OTcsQ09MLE5MLG1jY3VyamUwMSwxNzUwMDANCjE5OTcsQ09MLE5MLHdyaWdoamEwMSwxNjk1MDANCjE5OTcsQ09MLE5MLGFsc3RvZ2EwMSwxNTIwMDANCjE5OTcsQ09MLE5MLGJ1cmtlam8wNCwxNTE1MDANCjE5OTcsQ09MLE5MLGRlamVhbWkwMSwxNTAwMDANCjE5OTcsQ09MLE5MLGhlbHRvdG8wMSwxNTAwMDANCjE5OTcsQ09MLE5MLHBlcmV6bmUwMSwxNTAwMDANCjE5OTcsQ09MLE5MLHB1bGxpaGEwMSwxNTAwMDANCjE5OTcsQ09MLE5MLHRob21zam8wMSwxNTAwMDANCjE5OTcsRkxPLE5MLGZlcm5hYWwwMSw3MDAwMDAwDQoxOTk3LEZMTyxOTCxzaGVmZmdhMDEsNjEwMDAwMA0KMTk5NyxGTE8sTkwsYm9uaWxibzAxLDU2MDAwMDANCjE5OTcsRkxPLE5MLGJyb3dua2UwMSw0NTEwMDAwDQoxOTk3LEZMTyxOTCxhbG91bW8wMSw0NTAwMDAwDQoxOTk3LEZMTyxOTCx3aGl0ZWRlMDMsMzQwMDAwMA0KMTk5NyxGTE8sTkwsbmVucm8wMSwzMDgwMDAwDQoxOTk3LEZMTyxOTCxsZWl0ZWFsMDEsMjkwMDAwMA0KMTk5NyxGTE8sTkwsY29uaW5qZTAxLDI4MDAwMDANCjE5OTcsRkxPLE5MLGVpc2VuamkwMSwxNDAwMDAwDQoxOTk3LEZMTyxOTCxyYXBwcGEwMSwxMTI1MDAwDQoxOTk3LEZMTyxOTCxoZXJuYWxpMDEsMTA1MDAwMA0KMTk5NyxGTE8sTkwsY29va2RlMDEsODUwMDAwDQoxOTk3LEZMTyxOTCxhYmJvdGt1MDEsNjUwMDAwDQoxOTk3LEZMTyxOTCxjYW5nZWpvMDEsNTI1MDAwDQoxOTk3LEZMTyxOTCxhcmlhc2FsMDEsNDUwMDAwDQoxOTk3LEZMTyxOTCxmbG95ZGNsMDEsMzkwMDAwDQoxOTk3LEZMTyxOTCxqb2huc2NoMDQsMjkwMDAwDQoxOTk3LEZMTyxOTCxtYW50ZW1hMDEsMjI1MDAwDQoxOTk3LEZMTyxOTCxwb3dlbGphMDQsMjA4MDAwDQoxOTk3LEZMTyxOTCxodXR0b21hMDEsMjA1MDAwDQoxOTk3LEZMTyxOTCx6YXVuZ3IwMSwyMDUwMDANCjE5OTcsRkxPLE5MLG1pbGxla3UwMSwxNjMwMDANCjE5OTcsRkxPLE5MLGNhc3RpbHUwMSwxNTQwMDANCjE5OTcsRkxPLE5MLGhlcmVkZmUwMSwxNTMwMDANCjE5OTcsRkxPLE5MLGFsZm9uYW4wMSwxNTAwMDANCjE5OTcsRkxPLE5MLGNvdW5zY3IwMSwxNTAwMDANCjE5OTcsRkxPLE5MLHNhdW5kdG8wMSwxNTAwMDANCjE5OTcsRkxPLE5MLHdoaXNlbWEwMSwxNTAwMDANCjE5OTcsRkxPLE5MLHJlbnRlZWQwMSwxMDk1MDANCjE5OTcsRkxPLE5MLHBlbmFhbDAxLDUwMDAwDQoxOTk3LEhPVSxOTCxiYWd3ZWplMDEsODA0MDAwMA0KMTk5NyxIT1UsTkwsYmlnZ2ljcjAxLDYyODAwMDANCjE5OTcsSE9VLE5MLGJlbGxkZTAxLDMyNTAwMDANCjE5OTcsSE9VLE5MLGJlcnJ5c2UwMSwyMjUwMDAwDQoxOTk3LEhPVSxOTCxyZXlub3NoMDEsMjA1MDAwMA0KMTk5NyxIT1UsTkwsa2lsZWRhMDEsMTcwMDAwMA0KMTk5NyxIT1UsTkwsaGFtcHRtaTAxLDE0MjAwMDANCjE5OTcsSE9VLE5MLGdvbnphbHUwMSwxNDAwMDAwDQoxOTk3LEhPVSxOTCxhdXNtdWJyMDEsMTA3NTAwMA0KMTk5NyxIT1UsTkwsaG93YXJ0aDAxLDc1MDAwMA0KMTk5NyxIT1UsTkwsbGlzdGFwYTAxLDc1MDAwMA0KMTk5NyxIT1UsTkwsZXVzZWJ0bzAxLDY1MDAwMA0KMTk5NyxIT1UsTkwsc3BpZXJiaTAxLDYwMDAwMA0KMTk5NyxIT1UsTkwsZ3V0aWVyaTAxLDQyMDAwMA0KMTk5NyxIT1UsTkwsbW91dG9qYTAxLDQxNTAwMA0KMTk5NyxIT1UsTkwsaHVkZWtqbzAxLDQxMjUwMA0KMTk5NyxIT1UsTkwsc3ByaW5ydTAxLDQwMDAwMA0KMTk5NyxIT1UsTkwsZmVybmFzaTAxLDM3NTAwMA0KMTk5NyxIT1UsTkwsa25vcnJyYTAxLDMwMDAwMA0KMTk5NyxIT1UsTkwsbWFnbmFtaTAxLDI5MDAwMA0KMTk5NyxIT1UsTkwsYm9nYXJ0aTAxLDI3NTAwMA0KMTk5NyxIT1UsTkwsY2FycmNoMDIsMjUwMDAwDQoxOTk3LEhPVSxOTCx3YWduZWJpMDIsMTg1MDAwDQoxOTk3LEhPVSxOTCxsaW1ham8wMSwxNzAwMDANCjE5OTcsSE9VLE5MLGdhcmNpcmEwMywxNjAwMDANCjE5OTcsSE9VLE5MLG1vbnRncmEwMSwxNTUwMDANCjE5OTcsSE9VLE5MLHNtYWxsbWEwMSwxNTUwMDANCjE5OTcsSE9VLE5MLGFicmV1Ym8wMSwxNTAwMDANCjE5OTcsSE9VLE5MLGhpZGFscmkwMSwxNTAwMDANCjE5OTcsSE9VLE5MLGhvbHRjaDAxLDE1MDAwMA0KMTk5NyxIT1UsTkwsbWFydGl0bzAyLDE1MDAwMA0KMTk5NyxMQU4sTkwscGlhenptaTAxLDcwMDAwMDANCjE5OTcsTEFOLE5MLG1hcnRpcmEwMiw0ODAwMDAwDQoxOTk3LExBTixOTCxrYXJyb2VyMDEsNDUwMDAwMA0KMTk5NyxMQU4sTkwsd29ycmV0bzAxLDM3NTAwMDANCjE5OTcsTEFOLE5MLHplaWxldG8wMSwzMTAwMDAwDQoxOTk3LExBTixOTCxjYW5kaXRvMDEsMzAwMDAwMA0KMTk5NyxMQU4sTkwsZ2FnbmVncjAxLDMwMDAwMDANCjE5OTcsTEFOLE5MLGFzdGFjcGUwMSwyOTAwMDAwDQoxOTk3LExBTixOTCxtb25kZXJhMDEsMjcwMDAwMA0KMTk5NyxMQU4sTkwsYnV0bGVicjAxLDE3MzMzMDQNCjE5OTcsTEFOLE5MLGd1dGhybWEwMSwxNjAwMDAwDQoxOTk3LExBTixOTCxub21vaGkwMSw5MDAwMDANCjE5OTcsTEFOLE5MLHJhZGluc2MwMSw5MDAwMDANCjE5OTcsTEFOLE5MLHZhbGRlaXMwMSw5MDAwMDANCjE5OTcsTEFOLE5MLGhvbGxhdG8wMSw1NTAwMDANCjE5OTcsTEFOLE5MLGtpcmJ5d2EwMSw0NTAwMDANCjE5OTcsTEFOLE5MLGxpcmlhbmUwMSwzNzUwMDANCjE5OTcsTEFOLE5MLGhhbGxkYTAxLDM2NTAwMA0KMTk5NyxMQU4sTkwscHJpbmN0bzAxLDM1MDAwMA0KMTk5NyxMQU4sTkwsb3N1bmFhbjAxLDMwMDAwMA0KMTk5NyxMQU4sTkwsaGFsZWNoMDEsMjgwMDAwDQoxOTk3LExBTixOTCxhc2hsZWJpMDEsMjc1MDAwDQoxOTk3LExBTixOTCxwYXJrY2gwMSwyNzAwMDANCjE5OTcsTEFOLE5MLGZvbnZpY2gwMSwyNDAwMDANCjE5OTcsTEFOLE5MLGRyZWlmZGEwMSwyMjAwMDANCjE5OTcsTEFOLE5MLGNhc3RyanUwMSwyMTUwMDANCjE5OTcsTEFOLE5MLGNlZGVucm8wMSwyMDAwMDANCjE5OTcsTEFOLE5MLGNyb21ldHIwMSwxODEwMDANCjE5OTcsTEFOLE5MLGluZ3JhZ2EwMSwxNzYwMDANCjE5OTcsTEFOLE5MLGd1ZXJyd2kwMSwxNTAwMDANCjE5OTcsTU9OLE5MLG1hcnRpcGUwMiwzNjE1MDAwDQoxOTk3LE1PTixOTCxsYW5zaW1pMDEsMjcwMDAwMA0KMTk5NyxNT04sTkwscm9kcmloZTAyLDIzMDAwMDANCjE5OTcsTU9OLE5MLHNlZ3VpZGEwMSwxNTUwMDAwDQoxOTk3LE1PTixOTCxmbGV0Y2RhMDEsMTM1MDAwMA0KMTk5NyxNT04sTkwsY29ybWlyaDAxLDEwNTAwMDANCjE5OTcsTU9OLE5MLHZlcmVzZGEwMSw3MjUwMDANCjE5OTcsTU9OLE5MLG9yc3Vsam8wMSw2NTAwMDANCjE5OTcsTU9OLE5MLGRhYWxvbTAxLDU1MDAwMA0KMTk5NyxNT04sTkwsYnVsbGlqaTAxLDUyNTAwMA0KMTk5NyxNT04sTkwsd2hpdGVybzAyLDUwMDAwMA0KMTk5NyxNT04sTkwsc21pdGhsZTAyLDQwMDAwMA0KMTk5NyxNT04sTkwsYW5kcmVzaDAxLDIyNTAwMA0KMTk5NyxNT04sTkwsZ3J1ZHptYTAxLDIyMDAwMA0KMTk5NyxNT04sTkwsc3RhbmthbjAxLDIyMDAwMA0KMTk5NyxNT04sTkwsc3RyYW5kbzAxLDIyMDAwMA0KMTk5NyxNT04sTkwsc2FudGFmcDAxLDIxMjUwMA0KMTk5NyxNT04sTkwscGVyZXpjYTAxLDIxMDAwMA0KMTk5NyxNT04sTkwsanVkZW5qZTAxLDE4NTAwMA0KMTk5NyxNT04sTkwsb2JhbmRzaDAxLDE4NTAwMA0KMTk5NyxNT04sTkwsdXJiaW51ZzAxLDE3NTAwMA0KMTk5NyxNT04sTkwsaGVybWFkdTAxLDE2MzAwMA0KMTk5NyxNT04sTkwscGFuaWFqbzAxLDE1NTAwMA0KMTk5NyxNT04sTkwsd2FnbmVtYTAyLDE1NTAwMA0KMTk5NyxNT04sTkwsdmFsZGVtYTAxLDE1MjUwMA0KMTk5NyxNT04sTkwsd2lkZ2VjaDAxLDE1MjUwMA0KMTk5NyxNT04sTkwsYmVubmVzaDAxLDE1MDAwMA0KMTk5NyxNT04sTkwsZ3VlcnJ2bDAxLDE1MDAwMA0KMTk5NyxNT04sTkwsbWNndWlyeTAxLDE1MDAwMA0KMTk5NyxNT04sTkwsdGVsZm9hbjAxLDE1MDAwMA0KMTk5NyxNT04sTkwsdmlkcm9qbzAxLDE1MDAwMA0KMTk5NyxOWU4sTkwsb2xlcnVqbzAxLDY1MDAwMDANCjE5OTcsTllOLE5MLGJhZXJnY2EwMSw0NzUwMDAwDQoxOTk3LE5ZTixOTCxodW5kbHRvMDEsNDE1MDAwMA0KMTk5NyxOWU4sTkwsZ2lsa2ViZTAxLDM4NTAwMDANCjE5OTcsTllOLE5MLGhhcm5pcGUwMSwzMjEzNDAwDQoxOTk3LE5ZTixOTCxqb2huc2xhMDMsMzA1MDAwMA0KMTk5NyxOWU4sTkwsZnJhbmNqbzAxLDMwMDAwMDANCjE5OTcsTllOLE5MLGNsYXJrbWEwMSwyMjAwMDAwDQoxOTk3LE5ZTixOTCxqb25lc2JvMDMsMTkyNTAwMA0KMTk5NyxOWU4sTkwsbWNtaWNncjAxLDExMDAwMDANCjE5OTcsTllOLE5MLHJleW5vYXIwMiwxMDAwMDAwDQoxOTk3LE5ZTixOTCxtbGlja2RhMDEsNjEwMDAwDQoxOTk3LE5ZTixOTCxwZXJlenlvMDEsMzc1MDAwDQoxOTk3LE5ZTixOTCxib3JsYXRvMDIsMjYyNTAwDQoxOTk3LE5ZTixOTCxhbGZvbmVkMDEsMjE1MDAwDQoxOTk3LE5ZTixOTCxodXNrZWJ1MDEsMjEyMDAwDQoxOTk3LE5ZTixOTCxpc3JpbmphMDEsMjEyMDAwDQoxOTk3LE5ZTixOTCxyZWVkcmkwMSwyMTIwMDANCjE5OTcsTllOLE5MLGFsZXhhbWEwMiwyMDUwMDANCjE5OTcsTllOLE5MLGJvaGFuYnIwMSwyMDUwMDANCjE5OTcsTllOLE5MLGV2ZXJlY2EwMSwyMDUwMDANCjE5OTcsTllOLE5MLHByYXR0dG8wMiwyMDAwMDANCjE5OTcsTllOLE5MLHRvbWJlYW4wMSwyMDAwMDANCjE5OTcsTllOLE5MLG9yZG9ucmUwMSwxOTI1MDANCjE5OTcsTllOLE5MLG1hbnVlYmEwMSwxODUwMDANCjE5OTcsTllOLE5MLHRybGljcmkwMSwxNzc1MDANCjE5OTcsTllOLE5MLHdpbHNvcGEwMiwxNjc1MDANCjE5OTcsTllOLE5MLGZyYW5jbWEwMSwxNjAwMDANCjE5OTcsTllOLE5MLGpvcmRhcmkwMywxNTUwMDANCjE5OTcsTllOLE5MLHB1bHNpYmkwMSwxNTUwMDANCjE5OTcsTllOLE5MLGNhc3RpYWwwMSwxNTI1MDANCjE5OTcsTllOLE5MLG9jaG9hYWwwMSwxNTIwMDANCjE5OTcsTllOLE5MLHdhbGxhZGUwMSwxNTE1MDANCjE5OTcsTllOLE5MLGJpZXNlc3QwMSwxNTAwMDANCjE5OTcsTllOLE5MLGxpZGxlY28wMSwxNTAwMDANCjE5OTcsUEhJLE5MLGR5a3N0bGUwMSw2MDAwMDAwDQoxOTk3LFBISSxOTCxqZWZmZWdyMDEsNTUwMDAwMA0KMTk5NyxQSEksTkwsZGF1bHRkYTAxLDQ4MjUwMDANCjE5OTcsUEhJLE5MLHNjaGlsY3UwMSwzNTAwMDAwDQoxOTk3LFBISSxOTCxwb3J0dW1hMDEsMjM1MDAwMA0KMTk5NyxQSEksTkwsdGFydGFkYTAxLDIwMDAwMDANCjE5OTcsUEhJLE5MLGxlaXRlbWEwMSwxOTAwMDAwDQoxOTk3LFBISSxOTCxtb3Jhbm1pMDEsMTg1MDAwMA0KMTk5NyxQSEksTkwsaHVkbGVyZTAxLDExNTAwMDANCjE5OTcsUEhJLE5MLHJ5YW5rZTAxLDkwMDAwMA0KMTk5NyxQSEksTkwsc3RvY2trZTAxLDg5MDAwMA0KMTk5NyxQSEksTkwsYnJvZ25yaTAxLDQ1MDAwMA0KMTk5NyxQSEksTkwsYm90dGFyaTAxLDQyNTAwMA0KMTk5NyxQSEksTkwscGFyZW5tYTAxLDQwMDAwMA0KMTk5NyxQSEksTkwsbWF5ZGUwMSwzMDAwMDANCjE5OTcsUEhJLE5MLGFtYXJvcnUwMiwyNzUwMDANCjE5OTcsUEhJLE5MLGxpZWJlbWkwMSwyMTUwMDANCjE5OTcsUEhJLE5MLGJyZXdlYmkwMSwyMDAwMDANCjE5OTcsUEhJLE5MLG1pbWJzbWkwMSwyMDAwMDANCjE5OTcsUEhJLE5MLG11bm96Ym8wMSwyMDAwMDANCjE5OTcsUEhJLE5MLGdyYWNlbWkwMiwxODUwMDANCjE5OTcsUEhJLE5MLGdyZWVudHkwMSwxODAwMDANCjE5OTcsUEhJLE5MLGhhcnJpcmUwMSwxNzUwMDANCjE5OTcsUEhJLE5MLGpvcmRha2UwMSwxNzUwMDANCjE5OTcsUEhJLE5MLHJ1ZmZjc2MwMSwxNTg1MDANCjE5OTcsUEhJLE5MLG1jbWlsYmkwMSwxNTMwMDANCjE5OTcsUEhJLE5MLGJhcnJvdG8wMSwxNTAwMDANCjE5OTcsUEhJLE5MLGJlZWNobWEwMSwxNTAwMDANCjE5OTcsUEhJLE5MLGJsYXppcm8wMSwxNTAwMDANCjE5OTcsUEhJLE5MLGdvbWVzd2EwMSwxNTAwMDANCjE5OTcsUEhJLE5MLGthcnByeTAxLDE1MDAwMA0KMTk5NyxQSEksTkwsbWFkdXJjYTAxLDE1MDAwMA0KMTk5NyxQSEksTkwsbWFnZWV3ZTAxLDE1MDAwMA0KMTk5NyxQSEksTkwscGxhbnRlcjAxLDE1MDAwMA0KMTk5NyxQSEksTkwscmFtb3NlZDAxLDE1MDAwMA0KMTk5NyxQSEksTkwscm9iZXJtaTAxLDE1MDAwMA0KMTk5NyxQSEksTkwscm9sZW5zYzAxLDE1MDAwMA0KMTk5NyxQSEksTkwsc2VmY2lrZTAxLDE1MDAwMA0KMTk5NyxQSEksTkwsc3ByYWRqZTAxLDE1MDAwMA0KMTk5NyxQSEksTkwsc3RlcGhnYTAxLDE1MDAwMA0KMTk5NyxQSVQsTkwsbWFydGlhbDAzLDIyNjY2NjcNCjE5OTcsUElULE5MLGVsc3Rla2UwMSwxNjUwMDAwDQoxOTk3LFBJVCxOTCxzdmV1bWRhMDEsNDAwMDAwDQoxOTk3LFBJVCxOTCx5b3VuZ2tlMDEsNDAwMDAwDQoxOTk3LFBJVCxOTCxsaWViZWpvMDEsMzM1MDAwDQoxOTk3LFBJVCxOTCxjb29rZXN0MDEsMzAwMDAwDQoxOTk3LFBJVCxOTCx3YWduZXBhMDEsMzAwMDAwDQoxOTk3LFBJVCxOTCx3YXJkdHUwMSwzMDAwMDANCjE5OTcsUElULE5MLHdpbGxpZWQwMSwyNTAwMDANCjE5OTcsUElULE5MLGpvaG5zbWEwMSwyMzc1MDANCjE5OTcsUElULE5MLGtlbmRhamEwMSwyMzUwMDANCjE5OTcsUElULE5MLHJhbmRham8wMSwyMjAwMDANCjE5OTcsUElULE5MLGNvcmRvZnIwMSwyMTAwMDANCjE5OTcsUElULE5MLHNjaG1pamEwMSwyMTAwMDANCjE5OTcsUElULE5MLGVyaWNram8wMSwyMDAwMDANCjE5OTcsUElULE5MLGdyYW5namUwMSwyMDAwMDANCjE5OTcsUElULE5MLGxvYWl6ZXMwMSwyMDAwMDANCjE5OTcsUElULE5MLGNocmlzamEwMSwxOTUwMDANCjE5OTcsUElULE5MLGN1bW1pbWkwMSwxODAwMDANCjE5OTcsUElULE5MLG9zaWtrZTAxLDE3NTAwMA0KMTk5NyxQSVQsTkwsd2lsa2ltYTAxLDE2MjUwMA0KMTk5NyxQSVQsTkwsYWxsZW5qZTAxLDE2MDAwMA0KMTk5NyxQSVQsTkwscnVlYmVtYTAxLDE2MDAwMA0KMTk5NyxQSVQsTkwsd2FpbmhkYTAxLDE2MDAwMA0KMTk5NyxQSVQsTkwsd29tYWN0bzAxLDE2MDAwMA0KMTk5NyxQSVQsTkwsbG9pc2VyaTAxLDE1NTAwMA0KMTk5NyxQSVQsTkwsYnJvd25lbTAxLDE1MDAwMA0KMTk5NyxQSVQsTkwsZGF2aXNrYTAxLDE1MDAwMA0KMTk5NyxQSVQsTkwsZ3VpbGxqbzAxLDE1MDAwMA0KMTk5NyxQSVQsTkwsam9obnNqYTAyLDE1MDAwMA0KMTk5NyxQSVQsTkwsbnVuZXphYjAxLDE1MDAwMA0KMTk5NyxQSVQsTkwscG9sY29rZTAxLDE1MDAwMA0KMTk5NyxQSVQsTkwscmluY29yaTAxLDE1MDAwMA0KMTk5NyxQSVQsTkwsc21pdGhtYTAzLDE1MDAwMA0KMTk5NyxQSVQsTkwsd2FsbGFqZTAxLDE1MDAwMA0KMTk5NyxTRE4sTkwsZ3d5bm50bzAxLDQ1NzUwMDANCjE5OTcsU0ROLE5MLHZhdWdoZ3IwMSw0MDAwMDAwDQoxOTk3LFNETixOTCxqb3luZXdhMDEsMzgwMDAwMA0KMTk5NyxTRE4sTkwsYXNoYnlhbjAxLDM0MDAwMDANCjE5OTcsU0ROLE5MLGNhbWlua2UwMSwzMTUwMDAwDQoxOTk3LFNETixOTCxoZW5kZXJpMDEsMzA0NTAwMA0KMTk5NyxTRE4sTkwsZmlubGVzdDAxLDI5ODY2NzINCjE5OTcsU0ROLE5MLHZhbGVuZmUwMSwxNjUwMDAwDQoxOTk3LFNETixOTCxob2ZmbXRyMDEsMTUwMDAwMA0KMTk5NyxTRE4sTkwsaGl0Y2hzdDAxLDEyMDAwMDANCjE5OTcsU0ROLE5MLGZsYWhlam8wMSw5MDAwMDANCjE5OTcsU0ROLE5MLGdvbWV6Y2gwMiw4NTAwMDANCjE5OTcsU0ROLE5MLHdvcnJldGkwMSw4MzUwMDANCjE5OTcsU0ROLE5MLGhhbWlsam8wMiw2NzUwMDANCjE5OTcsU0ROLE5MLGxpdmluc2MwMSw2MDAwMDANCjE5OTcsU0ROLE5MLHNoaXBsY3IwMSw1MDAwMDANCjE5OTcsU0ROLE5MLHNtaXRocGUwMiw0MzUwMDANCjE5OTcsU0ROLE5MLGhlcm5hY2EwMSw0MjUwMDANCjE5OTcsU0ROLE5MLHNjb3R0dGkwMSw0MTUwMDANCjE5OTcsU0ROLE5MLGNpYW5mYXIwMSw0MDAwMDANCjE5OTcsU0ROLE5MLGpvbmVzY2gwNSwzODAwMDANCjE5OTcsU0ROLE5MLHZlcmFzcXUwMSwzMTAwMDANCjE5OTcsU0ROLE5MLGJlcmdtc2UwMSwyNzUwMDANCjE5OTcsU0ROLE5MLGJvY2h0ZG8wMSwyNTAwMDANCjE5OTcsU0ROLE5MLGJydXNramkwMSwxODUwMDANCjE5OTcsU0ROLE5MLG1lbmhhcGEwMSwxNzUwMDANCjE5OTcsU0ROLE5MLHZlcmFzZGEwMSwxNzIwMDANCjE5OTcsU0ROLE5MLGN1bm5hd2kwMSwxNTAwMDANCjE5OTcsU0ROLE5MLHRld2tzYm8wMSwxMjUwMDANCjE5OTcsU0ZOLE5MLGJvbmRzYmEwMSw4NjY2NjY3DQoxOTk3LFNGTixOTCxiZWNrcm8wMSwzMTgzMzgwDQoxOTk3LFNGTixOTCx2aXpjYWpvMDEsMjgwMDAwMA0KMTk5NyxTRk4sTkwsa2VudGplMDEsMjYyNTAwMA0KMTk5NyxTRk4sTkwsd2lsa2lyaTAxLDIwMDAwMDANCjE5OTcsU0ZOLE5MLHNub3dqdDAxLDE4MjUwMDANCjE5OTcsU0ZOLE5MLGhhbWlsZGEwMiwxNzUwMDAwDQoxOTk3LFNGTixOTCxoaWxsZ2wwMSwxNzAwMDAwDQoxOTk3LFNGTixOTCxsZXdpc21hMDEsMTY2NDAwMA0KMTk5NyxTRk4sTkwsamF2aWVzdDAxLDEzNTAwMDANCjE5OTcsU0ZOLE5MLGZlcm5hb3MwMSw5NTgzMzMNCjE5OTcsU0ZOLE5MLGdhcmRubWEwMSw5MDAwMDANCjE5OTcsU0ZOLE5MLHBvb2xlamkwMiw4NTAwMDANCjE5OTcsU0ZOLE5MLHRhdmFyanUwMSw2ODMzMzMNCjE5OTcsU0ZOLE5MLGRlbHVjcmkwMSw2MjUwMDANCjE5OTcsU0ZOLE5MLGhlbnJ5ZG8wMSw1NTAwMDANCjE5OTcsU0ZOLE5MLGJlcnJ5ZGEwMSw0NjY2NjUNCjE5OTcsU0ZOLE5MLHRob21wcm8wMSwzNzUwMDANCjE5OTcsU0ZOLE5MLHJvZHJpcmkwMiwzMDAwMDANCjE5OTcsU0ZOLE5MLHZhbmxhd2kwMSwyOTUwMDANCjE5OTcsU0ZOLE5MLHJ1ZXRla2kwMSwyNjAwMDANCjE5OTcsU0ZOLE5MLGJlbmFybWEwMSwxODUwMDANCjE5OTcsU0ZOLE5MLGJhaWxlY28wMSwxODEwMDANCjE5OTcsU0ZOLE5MLGF1cmlscmkwMSwxNzUwMDANCjE5OTcsU0ZOLE5MLGVzdGVzc2gwMSwxNjI1MDANCjE5OTcsU0ZOLE5MLG11ZWxsYmkwMiwxNjAwMDANCjE5OTcsU0ZOLE5MLGplbnNlbWEwMSwxNTE1MDANCjE5OTcsU0ZOLE5MLGNhcmxzZGEwMSwxNTAwMDANCjE5OTcsU0ZOLE5MLGRlbGdhd2kwMSwxNTAwMDANCjE5OTcsU0ZOLE5MLHBvd2VsZGEwMSwxNTAwMDANCjE5OTcsU0ZOLE5MLHJvYWpvMDEsMTUwMDAwDQoxOTk3LFNGTixOTCx3aWxzb2RlMDEsMTUwMDAwDQoxOTk3LFNMTixOTCxiZW5lc2FuMDEsNDg1MDAwMA0KMTk5NyxTTE4sTkwsamFja3NkYTAyLDQ2MDAwMDANCjE5OTcsU0xOLE5MLGdhbnRybzAxLDQ1MDAwMDANCjE5OTcsU0xOLE5MLGxhbmtmcmEwMSw0NDY2NjY3DQoxOTk3LFNMTixOTCxzdG90dHRvMDEsNDEwMDAwMA0KMTk5NyxTTE4sTkwsam9yZGFicjAxLDMzMDAwMDANCjE5OTcsU0xOLE5MLG9zYm9yZG8wMSwyNzUwMDAwDQoxOTk3LFNMTixOTCxjbGF5dHJvMDEsMjY1MDAwMA0KMTk5NyxTTE4sTkwsZ2FldHRnYTAxLDIxMDAwMDANCjE5OTcsU0xOLE5MLHBhZ25vdG8wMSwxNjUwMDAwDQoxOTk3LFNMTixOTCxlY2tlcmRlMDEsMTYyNTAwMA0KMTk5NyxTTE4sTkwsZGVzaGlkZTAxLDE2MDAwMDANCjE5OTcsU0xOLE5MLG1jZ2Vld2kwMSwxMzAwMDAwDQoxOTk3LFNMTixOTCxmb3NzYXRvMDEsNzUwMDAwDQoxOTk3LFNMTixOTCxob25leXJpMDEsNTAwMDAwDQoxOTk3LFNMTixOTCxsYW1wa3RvMDEsNTAwMDAwDQoxOTk3LFNMTixOTCxzaGVhZmRhMDEsNDI1MDAwDQoxOTk3LFNMTixOTCxtYWJyeWpvMDEsMzkwMDAwDQoxOTk3LFNMTixOTCxwYWludGxhMDEsMzc1MDAwDQoxOTk3LFNMTixOTCxwZXRrb21hMDEsMzI1MDAwDQoxOTk3LFNMTixOTCxiZW5lc2FsMDEsMjQwMDAwDQoxOTk3LFNMTixOTCxtYXRoZXRqMDEsMjQwMDAwDQoxOTk3LFNMTixOTCxtZWppYXJvMDIsMTg1MDAwDQoxOTk3LFNMTixOTCxzd2Vlbm1hMDEsMTg1MDAwDQoxOTk3LFNMTixOTCxiZWxsZGEwMSwxNzAwMDANCjE5OTcsU0xOLE5MLGJhdGNocmkwMSwxNTc1MDANCjE5OTcsU0xOLE5MLGJhcmJlYnIwMiwxNTUwMDANCjE5OTcsU0xOLE5MLGZyYXNjam8wMSwxNTUwMDANCjE5OTcsU0xOLE5MLGx1ZHdpZXIwMSwxNTUwMDANCjE5OTcsU0xOLE5MLHlvdW5nZG0wMSwxNTUwMDANCjE5OTcsU0xOLE5MLGRpZmVsbWkwMSwxNTI1MDANCjE5OTcsU0xOLE5MLGJhdXRpam8wMSwxNTAwMDANCjE5OTcsU0xOLE5MLGJlbHRycmkwMSwxNTAwMDANCjE5OTcsU0xOLE5MLGdyZWVuc2MwMSwxNTAwMDANCjE5OTcsU0xOLE5MLGtpbmdjdTAxLDE1MDAwMA0KMTk5NyxTTE4sTkwsbW9ycmltYTAxLDE1MDAwMA0KMTk5OCxBTkEsQUwsZmlubGVjaDAxLDUwMDAwMDANCjE5OTgsQU5BLEFMLGhpbGxrZTAxLDUwMDAwMDANCjE5OTgsQU5BLEFMLHNhbG1vdGkwMSw1MDAwMDAwDQoxOTk4LEFOQSxBTCxlZG1vbmppMDEsMzE3NTAwMA0KMTk5OCxBTkEsQUwsd2F0c29hbDAxLDI5MDAwMDANCjE5OTgsQU5BLEFMLGRpc2FyZ2EwMSwyODAwMDAwDQoxOTk4LEFOQSxBTCxmaWVsZGNlMDEsMjgwMDAwMA0KMTk5OCxBTkEsQUwsaG9sbGlkYTAxLDE5MDAwMDANCjE5OTgsQU5BLEFMLGFuZGVyZ2EwMSwxNTAwMDAwDQoxOTk4LEFOQSxBTCxtY2Rvd2phMDEsMTUwMDAwMA0KMTk5OCxBTkEsQUwsb2xpdmFvbTAxLDExNTAwMDANCjE5OTgsQU5BLEFMLHBlcmNpdHIwMSwxMTI1MDAwDQoxOTk4LEFOQSxBTCx2ZWxhcnJhMDEsODUwMDAwDQoxOTk4LEFOQSxBTCxoYXNlZ3NoMDEsNzkwMDAwDQoxOTk4LEFOQSxBTCxqYW1lc21pMDEsNzAwMDAwDQoxOTk4LEFOQSxBTCx3YWxiZW1hMDEsNzAwMDAwDQoxOTk4LEFOQSxBTCxlcnN0YWRhMDEsNTUwMDAwDQoxOTk4LEFOQSxBTCxtYXJ0aW5vMDEsNDI1MDAwDQoxOTk4LEFOQSxBTCxkZWx1Y3JpMDEsNDAwMDAwDQoxOTk4LEFOQSxBTCxkaWNrc2phMDEsMjk1MDAwDQoxOTk4LEFOQSxBTCxoYXJyaXBlMDEsMjI2NTAwDQoxOTk4LEFOQSxBTCxob2x0em1pMDEsMjI2NTAwDQoxOTk4LEFOQSxBTCx3aWxzb3RyMDEsMjI1MDAwDQoxOTk4LEFOQSxBTCxtYXNob2RhMDEsMjEwMDAwDQoxOTk4LEFOQSxBTCxuZXZpbnBoMDEsMjEwMDAwDQoxOTk4LEFOQSxBTCxncmVlbnRvMDIsMjAwMDAwDQoxOTk4LEFOQSxBTCxwYWxtZW9yMDEsMTg5MDAwDQoxOTk4LEFOQSxBTCxlZW5ob3JvMDEsMTgyNTAwDQoxOTk4LEFOQSxBTCxnYXJjaWNhMDEsMTgyNTAwDQoxOTk4LEFOQSxBTCxlbmNhcmFuMDEsMTgwMDAwDQoxOTk4LEFOQSxBTCxib2xpY2ZyMDEsMTc4MDAwDQoxOTk4LEFOQSxBTCxwcml0Y2NoMDEsMTcxMDAwDQoxOTk4LEFOQSxBTCxnbGF1c3RyMDEsMTcwMDAwDQoxOTk4LEFOQSxBTCxzY2htaWplMDEsMTcwMDAwDQoxOTk4LEJBTCxBTCxtdXNzaW1pMDEsNjc1NTQ5Mg0KMTk5OCxCQUwsQUwscGFsbWVyYTAxLDY1MTU4MjgNCjE5OTgsQkFMLEFMLHJpcGtlY2EwMSw2NDAwMDAwDQoxOTk4LEJBTCxBTCxhbG9tYXJvMDEsNjM0Mzc3MQ0KMTk5OCxCQUwsQUwsYW5kZXJicjAxLDU0NDE4NDMNCjE5OTgsQkFMLEFMLGtleWppMDEsNTM5MDgyNQ0KMTk5OCxCQUwsQUwsZXJpY2tzYzAxLDM3MDAwMDANCjE5OTgsQkFMLEFMLGhvaWxlY2gwMSwzNjAwMDAwDQoxOTk4LEJBTCxBTCxib3JkaW1pMDEsMzU4MzMzMw0KMTk5OCxCQUwsQUwsY2FydGVqbzAxLDMxNTEzODANCjE5OTgsQkFMLEFMLGthbWllc2MwMSwyODUwMDAwDQoxOTk4LEJBTCxBTCxyaG9kZWFyMDEsMjg1MDAwMA0KMTk5OCxCQUwsQUwsZGF2aXNlcjAxLDI1MDAwMDANCjE5OTgsQkFMLEFMLHN1cmhvYmowMSwxNzE2NjY3DQoxOTk4LEJBTCxBTCxkcmFiZWRvMDEsMTY2MzE2Mg0KMTk5OCxCQUwsQUwsaGFtbW9qZTAxLDEzMzMzMzMNCjE5OTgsQkFMLEFMLGJhaW5laGEwMSwxMjc1MDAwDQoxOTk4LEJBTCxBTCxiZW5pdGFyMDEsMTEwMDAwMA0KMTk5OCxCQUwsQUwsb3Jvc2NqZTAxLDExMDAwMDANCjE5OTgsQkFMLEFMLG1pbGxzYWwwMSwxMDAwMDAwDQoxOTk4LEJBTCxBTCxtYXRoZXRlMDEsODY1MDAwDQoxOTk4LEJBTCxBTCx3ZWJzdGxlMDEsNzQwMDAwDQoxOTk4LEJBTCxBTCxjaGFybG5vMDEsNjUwMDAwDQoxOTk4LEJBTCxBTCxndWlsbG96MDEsNDUwMDAwDQoxOTk4LEJBTCxBTCxyZWJvdWplMDEsNDUwMDAwDQoxOTk4LEJBTCxBTCxqb2huc2RvMDQsMjUwMDAwDQoxOTk4LEJBTCxBTCxjbHlidWRhMDEsMTcwMDAwDQoxOTk4LEJBTCxBTCxvdGFuZXdpMDEsMTcwMDAwDQoxOTk4LEJBTCxBTCxwb25zb3NpMDEsMTcwMDAwDQoxOTk4LEJBTCxBTCxzdHVsbGV2MDEsMTcwMDAwDQoxOTk4LEJPUyxBTCxtYXJ0aXBlMDIsNzU3NTAwMA0KMTk5OCxCT1MsQUwsdmF1Z2htbzAxLDY2NTAwMDANCjE5OTgsQk9TLEFMLHZhbGVuam8wMiw1MzUwMDAwDQoxOTk4LEJPUyxBTCxhdmVyeXN0MDEsMzkwMDAwMA0KMTk5OCxCT1MsQUwsc2FiZXJicjAxLDM4MDAwMDANCjE5OTgsQk9TLEFMLHdha2VmdGkwMSwzNTAwMDAwDQoxOTk4LEJPUyxBTCxnb3Jkb3RvMDEsMzMwMDAwMA0KMTk5OCxCT1MsQUwsamVmZmVyZTAxLDMyMDAwMDANCjE5OTgsQk9TLEFMLG5hZWhydGkwMSwyODAwMDAwDQoxOTk4LEJPUyxBTCxvbGVhcnRyMDEsMjQwMDAwMA0KMTk5OCxCT1MsQUwsZnJ5ZWplMDEsMjEwMDAwMA0KMTk5OCxCT1MsQUwsbGV5cmlqaTAxLDIwMDAwMDANCjE5OTgsQk9TLEFMLHNjaG91cGUwMSwxNjAwMDAwDQoxOTk4LEJPUyxBTCxlY2tlcmRlMDEsMTUwMDAwMA0KMTk5OCxCT1MsQUwsaGVucnlidTAxLDEzNjc1MDANCjE5OTgsQk9TLEFMLGdhcmNpbm8wMSwxMDc1MDAwDQoxOTk4LEJPUyxBTCxjb3JzaWppMDEsNjAwMDAwDQoxOTk4LEJPUyxBTCxsZXdpc2RhMDEsNTAwMDAwDQoxOTk4LEJPUyxBTCxidWZvcmRhMDEsNDYwMDAwDQoxOTk4LEJPUyxBTCxyZXllc2NhMDEsMzcwMDAwDQoxOTk4LEJPUyxBTCxicmFnZ2RhMDEsMzY3NTAwDQoxOTk4LEJPUyxBTCxjdW1taW1pMDEsMjUwMDAwDQoxOTk4LEJPUyxBTCxiZW5qYW1pMDEsMjQyNTAwDQoxOTk4LEJPUyxBTCxoYXR0ZXNjMDEsMjQwMDAwDQoxOTk4LEJPUyxBTCx3YXNkaWpvMDEsMjI3NTAwDQoxOTk4LEJPUyxBTCxnYXJjZXJpMDEsMTkwMDAwDQoxOTk4LEJPUyxBTCxsb3dlZGUwMSwxNzIwMDANCjE5OTgsQk9TLEFMLGxhY3lrZTAxLDE3MDAwMA0KMTk5OCxCT1MsQUwsbWVybG9sbzAxLDE3MDAwMA0KMTk5OCxCT1MsQUwsbWl0Y2hrZTAyLDE3MDAwMA0KMTk5OCxCT1MsQUwscm9zZWJyMDEsMTcwMDAwDQoxOTk4LEJPUyxBTCxzYWRsZWRvMDEsMTcwMDAwDQoxOTk4LEJPUyxBTCx2YXJpdGphMDEsMTcwMDAwDQoxOTk4LENIQSxBTCxiZWxsZWFsMDEsMTAwMDAwMDANCjE5OTgsQ0hBLEFMLHRob21hZnIwNCw3MDAwMDAwDQoxOTk4LENIQSxBTCx2ZW50dXJvMDEsNjEwMDAwMA0KMTk5OCxDSEEsQUwsbmF2YXJqYTAxLDUwMDAwMDANCjE5OTgsQ0hBLEFMLGR1cmhhcmEwMSwxOTM1MDAwDQoxOTk4LENIQSxBTCxjYXN0aXRvMDIsMTI1MDAwMA0KMTk5OCxDSEEsQUwsa3JldXRjaDAxLDcxMDAwMA0KMTk5OCxDSEEsQUwsYmVyZWphMDEsNzAwMDAwDQoxOTk4LENIQSxBTCxvYnJpZWNoMDEsNzAwMDAwDQoxOTk4LENIQSxBTCxzaWVycnJ1MDEsNTAwMDAwDQoxOTk4LENIQSxBTCxiYWxkd2phMDEsMzAwMDAwDQoxOTk4LENIQSxBTCxrYXJjaG1hMDEsMzAwMDAwDQoxOTk4LENIQSxBTCxzaW1hc2JpMDEsMjUwMDAwDQoxOTk4LENIQSxBTCxjYW1lcm1pMDEsMjMwMDAwDQoxOTk4LENIQSxBTCxjYXN0aWNhMDIsMTk1MDAwDQoxOTk4LENIQSxBTCxzaXJvdG1pMDEsMTk1MDAwDQoxOTk4LENIQSxBTCxzbm9wZWNoMDEsMTkwMDAwDQoxOTk4LENIQSxBTCxleXJlc2MwMSwxODUwMDANCjE5OTgsQ0hBLEFMLGZvdWxra2UwMSwxODUwMDANCjE5OTgsQ0hBLEFMLG5vcnRvZ3IwMSwxODAwMDANCjE5OTgsQ0hBLEFMLGFiYm90amUwMSwxNzUwMDANCjE5OTgsQ0hBLEFMLGZvcmRodG8wMSwxNzUwMDANCjE5OTgsQ0hBLEFMLG1hY2hhcm8wMSwxNzUwMDANCjE5OTgsQ0hBLEFMLG9yZG9ubWEwMSwxNzUwMDANCjE5OTgsQ0hBLEFMLGJyYWRmY2gwMSwxNzAwMDANCjE5OTgsQ0hBLEFMLGNhcnVzbWkwMSwxNzAwMDANCjE5OTgsQ0hBLEFMLGZyYXppbG8wMSwxNzAwMDANCjE5OTgsQ0hBLEFMLGhvd3J5Ym8wMSwxNzAwMDANCjE5OTgsQ0hBLEFMLHBhcnF1amkwMSwxNzAwMDANCjE5OTgsQ0hBLEFMLHJpenpvdG8wMSwxNzAwMDANCjE5OTgsQ0hBLEFMLHNueWRlam8wMiwxNzAwMDANCjE5OTgsQ0hBLEFMLHdhcmRicjAxLDE3MDAwMA0KMTk5OCxDSEEsQUwsd2lsc29jcjAyLDE3MDAwMA0KMTk5OCxDTEUsQUwsbG9mdG9rZTAxLDc1NTAwMDANCjE5OTgsQ0xFLEFMLGp1c3RpZGEwMSw2NTAwMDAwDQoxOTk4LENMRSxBTCxmcnltYXRyMDEsNTQwMDAwMA0KMTk5OCxDTEUsQUwsdGhvbWVqaTAxLDQ4MDAwMDANCjE5OTgsQ0xFLEFMLHNtaWxlam8wMSwzNzUwMDAwDQoxOTk4LENMRSxBTCxuYWd5Y2gwMSwzNDE2NjY2DQoxOTk4LENMRSxBTCx2aXpxdW9tMDEsMzA1MDAwMA0KMTk5OCxDTEUsQUwscmFtaXJtYTAyLDI4NTAwMDANCjE5OTgsQ0xFLEFMLGJ1cmJhZGEwMSwyODAwMDAwDQoxOTk4LENMRSxBTCxnb29kZWR3MDEsMjc4NzUwMA0KMTk5OCxDTEUsQUwsYWxvbWFzYTAyLDI3MjUwMDANCjE5OTgsQ0xFLEFMLGJlcnJvZ2UwMSwyMjAwMDAwDQoxOTk4LENMRSxBTCxqYWNrc21pMDIsMjAwMDAwMA0KMTk5OCxDTEUsQUwscGx1bmtlcjAxLDE4MDAwMDANCjE5OTgsQ0xFLEFMLG1lc2FqbzAxLDE3MDAwMDANCjE5OTgsQ0xFLEFMLGFzc2VucGEwMSwxMzI1MDAwDQoxOTk4LENMRSxBTCxvZ2VhY2gwMSwxMDMzMzMzDQoxOTk4LENMRSxBTCxkdW5zdHNoMDEsMTAwMDAwMA0KMTk5OCxDTEUsQUwsc2h1ZXlwYTAxLDU2NzY2Nw0KMTk5OCxDTEUsQUwsYnJhbnNqZTAxLDU1MDAwMA0KMTk5OCxDTEUsQUwsYm9yZGVwYTAxLDUwMDAwMA0KMTk5OCxDTEUsQUwsZ2lsZXNicjAyLDMwMDAwMA0KMTk5OCxDTEUsQUwsbWFudG9qZTAxLDI1MDAwMA0KMTk5OCxDTEUsQUwsdmlsbG9ybzAxLDI0MDAwMA0KMTk5OCxDTEUsQUwsbW9ybWFhbDAxLDIyMDAwMA0KMTk5OCxDTEUsQUwsa3JpdmRyaTAxLDIwNTAwMA0KMTk5OCxDTEUsQUwsd2hpdGVtYTAxLDIwMDAwMA0KMTk5OCxDTEUsQUwsbWFydGl0bzAyLDE5MDAwMA0KMTk5OCxDTEUsQUwsd3JpZ2hqYTAyLDE5MDAwMA0KMTk5OCxDTEUsQUwsY29sb25iYTAxLDE4MDAwMA0KMTk5OCxDTEUsQUwsc2V4c29yaTAxLDE3NTAwMA0KMTk5OCxDTEUsQUwsd2lsc29lbjAxLDE3NTAwMA0KMTk5OCxDTEUsQUwsZmllbGRjZTAxLDE3MDAwMA0KMTk5OCxERVQsQUwsaGlnZ2libzAyLDI0MjUwMDANCjE5OTgsREVULEFMLHJvYmVyYmkwMSwyMzAwMDAwDQoxOTk4LERFVCxBTCxqb25lc3RvMDIsMjI1MDAwMA0KMTk5OCxERVQsQUwsZWFzbGVkYTAxLDIwNTAwMDANCjE5OTgsREVULEFMLGdvbnphbHUwMSwyMDAwMDAwDQoxOTk4LERFVCxBTCxjYXN0aWZyMDEsMTc1MDAwMA0KMTk5OCxERVQsQUwsc2FuZGVzYzAyLDE3MDAwMDANCjE5OTgsREVULEFMLHdvcnJldGkwMSwxMDAwMDAwDQoxOTk4LERFVCxBTCxicm9jYWRvMDEsODUwMDAwDQoxOTk4LERFVCxBTCxjbGFya3RvMDIsNzYyNTAwDQoxOTk4LERFVCxBTCxvbGl2ZWpvMDEsNzUwMDAwDQoxOTk4LERFVCxBTCxmbG9yaWJyMDEsNjAwMDAwDQoxOTk4LERFVCxBTCxodW50ZWJyMDIsNTYyNTAwDQoxOTk4LERFVCxBTCxyaXBrZWJpMDEsNDAwMDAwDQoxOTk4LERFVCxBTCx0aG9tcGp1MDIsNDAwMDAwDQoxOTk4LERFVCxBTCxyYW5kYWpvMDEsMzc1MDAwDQoxOTk4LERFVCxBTCxpbmNhdnBlMDEsMzAwMDAwDQoxOTk4LERFVCxBTCxib2NodGRvMDEsMjg3NTAwDQoxOTk4LERFVCxBTCxzYWdlcmFqMDEsMjg3NTAwDQoxOTk4LERFVCxBTCxjcnV6ZGUwMSwyNDUwMDANCjE5OTgsREVULEFMLG1vZWhsYnIwMSwyNDAwMDANCjE5OTgsREVULEFMLGNhc2FucmEwMSwyMjUwMDANCjE5OTgsREVULEFMLGtlYWdsZ3IwMSwyMDAwMDANCjE5OTgsREVULEFMLGJhcnRla2kwMSwxOTAwMDANCjE5OTgsREVULEFMLHNpZGRham8wMSwxOTAwMDANCjE5OTgsREVULEFMLGJlYW1vdHIwMSwxODc1MDANCjE5OTgsREVULEFMLGR1cmFucm8wMSwxNzc1MDANCjE5OTgsREVULEFMLGFsdmFyZ2EwMSwxNzAwMDANCjE5OTgsREVULEFMLGFuZGVybWEwMSwxNzAwMDANCjE5OTgsREVULEFMLGJha29wYTAxLDE3MDAwMA0KMTk5OCxERVQsQUwsY2F0YWxmcjAxLDE3MDAwMA0KMTk5OCxERVQsQUwsZW5jYXJqdTAxLDE3MDAwMA0KMTk5OCxERVQsQUwsZ3JlaXNzZTAxLDE3MDAwMA0KMTk5OCxERVQsQUwscG93ZWxicjAxLDE3MDAwMA0KMTk5OCxERVQsQUwscnVueWFzZTAxLDE3MDAwMA0KMTk5OCxLQ0EsQUwscGFsbWVkZTAxLDU4MjUwMDANCjE5OTgsS0NBLEFMLGFwcGlla2UwMSw0ODAwMDAwDQoxOTk4LEtDQSxBTCxraW5namUwMSw0MDAwMDAwDQoxOTk4LEtDQSxBTCxtb250Z2plMDEsMjgwMDAwMA0KMTk5OCxLQ0EsQUwsYmVsY2h0aTAxLDIzMDAwMDANCjE5OTgsS0NBLEFMLGNvbmluamUwMSwyMjQwMDAwDQoxOTk4LEtDQSxBTCxwaWNoYWhpMDEsMjE1MDAwMA0KMTk5OCxLQ0EsQUwsb2ZmZXJqbzAxLDIwMDAwMDANCjE5OTgsS0NBLEFMLGhhbmV5Y2gwMSwxODAwMDAwDQoxOTk4LEtDQSxBTCxtb3JyaWhhMDIsMTQwMDAwMA0KMTk5OCxLQ0EsQUwscmFwcHBhMDEsODAwMDAwDQoxOTk4LEtDQSxBTCxtYWNmYW1pMDEsNzI1MDAwDQoxOTk4LEtDQSxBTCxkYW1vbmpvMDEsNDYwMDAwDQoxOTk4LEtDQSxBTCxwZW5kbHRlMDEsNDI1MDAwDQoxOTk4LEtDQSxBTCxib25lc3JpMDEsNDAwMDAwDQoxOTk4LEtDQSxBTCxyaXZlcmx1MDEsMjQ1MDAwDQoxOTk4LEtDQSxBTCxyb3NhZGpvMDEsMjQyNTAwDQoxOTk4LEtDQSxBTCxkeWVqZTAxLDIzMDAwMA0KMTk5OCxLQ0EsQUwsc2VydmlzYzAxLDIzMDAwMA0KMTk5OCxLQ0EsQUwsc3dlZW5taTAxLDIzMDAwMA0KMTk5OCxLQ0EsQUwsdml0aWVqbzAxLDIyNTAwMA0KMTk5OCxLQ0EsQUwscnVzY2hnbDAxLDIyMDAwMA0KMTk5OCxLQ0EsQUwscGl0dHNqaTAxLDIxNTAwMA0KMTk5OCxLQ0EsQUwseW91bmdlcjAyLDIxNTAwMA0KMTk5OCxLQ0EsQUwsd2Fsa2VqYTAxLDIwNTAwMA0KMTk5OCxLQ0EsQUwsaGFsdGVzaDAxLDIwMDAwMA0KMTk5OCxLQ0EsQUwsbXllcnNybzAyLDE5NTAwMA0KMTk5OCxLQ0EsQUwsd2hpc2VtYTAxLDE4NTAwMA0KMTk5OCxLQ0EsQUwsbGVpdXNzYzAxLDE4MDAwMA0KMTk5OCxLQ0EsQUwsYmFyYmVicjAyLDE3NTAwMA0KMTk5OCxLQ0EsQUwsYmV2aWxicjAxLDE3NTAwMA0KMTk5OCxLQ0EsQUwsZmFzYW5zYTAxLDE3NTAwMA0KMTk5OCxLQ0EsQUwsaGFuc2VqZTAxLDE3MjUwMA0KMTk5OCxLQ0EsQUwsc3V0dG9sYTAxLDE3MjUwMA0KMTk5OCxLQ0EsQUwsZXZhbnNiYTAyLDE3MDAwMA0KMTk5OCxLQ0EsQUwsbG9wZXptZTAxLDE3MDAwMA0KMTk5OCxLQ0EsQUwsbWFydGlmZTAxLDE3MDAwMA0KMTk5OCxLQ0EsQUwsbWNkaWxhbDAxLDE3MDAwMA0KMTk5OCxLQ0EsQUwsb3J0aXpoZTAxLDE3MDAwMA0KMTk5OCxNSU4sQUwsbW9saXRwYTAxLDQyNTAwMDANCjE5OTgsTUlOLEFMLHN0ZWludGUwMSwyODUwMDAwDQoxOTk4LE1JTixBTCxhZ3VpbHJpMDEsMjc1MDAwMA0KMTk5OCxNSU4sQUwsbWVhcmVwYTAxLDI1MDAwMDANCjE5OTgsTUlOLEFMLGNvcmRvbWEwMSwyMDAwMDAwDQoxOTk4LE1JTixBTCxuaXhvbm90MDEsMjAwMDAwMA0KMTk5OCxNSU4sQUwsdGV3a3NibzAxLDE3NTAwMDANCjE5OTgsTUlOLEFMLHJhZGtlYnIwMSwxNDAwMDAwDQoxOTk4LE1JTixBTCxtb3JnYW1pMDEsMTMwMDAwMA0KMTk5OCxNSU4sQUwsc3dpbmRncjAxLDEzMDAwMDANCjE5OTgsTUlOLEFMLG1lcmNlb3IwMSw4MDAwMDANCjE5OTgsTUlOLEFMLGNhcnJhaGUwMSw3MDAwMDANCjE5OTgsTUlOLEFMLGd1YXJkZWQwMSw2NTAwMDANCjE5OTgsTUlOLEFMLHJvZHJpZnIwMiw0MjUwMDANCjE5OTgsTUlOLEFMLHRyb21ibWkwMSw0MjUwMDANCjE5OTgsTUlOLEFMLGdhdGVzYnIwMSwzNTAwMDANCjE5OTgsTUlOLEFMLGNvb21lcm8wMSwzMjUwMDANCjE5OTgsTUlOLEFMLGxhd3RvbWEwMiwyMTUwMDANCjE5OTgsTUlOLEFMLGhvY2tpZGUwMSwxODUwMDANCjE5OTgsTUlOLEFMLG5hdWx0ZGEwMSwxODUwMDANCjE5OTgsTUlOLEFMLG9jaG9hYWwwMSwxODI1MDANCjE5OTgsTUlOLEFMLGhhd2tpbGEwMSwxODAwMDANCjE5OTgsTUlOLEFMLHJpdGNodG8wMSwxODAwMDANCjE5OTgsTUlOLEFMLHdhbGtldG8wNCwxNzUwMDANCjE5OTgsTUlOLEFMLGJhcHRpdHIwMSwxNzAwMDANCjE5OTgsTUlOLEFMLG1pbHRvZXIwMSwxNzAwMDANCjE5OTgsTUlOLEFMLG9ydGl6ZGEwMSwxNzAwMDANCjE5OTgsTUlOLEFMLHNlcmFmZGEwMSwxNzAwMDANCjE5OTgsTUlOLEFMLHZhbGVuamEwMSwxNzAwMDANCjE5OTgsTllBLEFMLHdpbGxpYmUwMiw4MzAwMDAwDQoxOTk4LE5ZQSxBTCxjb25lZGEwMSw2NjY2NjY3DQoxOTk4LE5ZQSxBTCxrbm9ibGNoMDEsNjAwMDAwMA0KMTk5OCxOWUEsQUwsb25laWxwYTAxLDU1MDAwMDANCjE5OTgsTllBLEFMLHdlbGxzZGEwMSw0NjY2NjY2DQoxOTk4LE5ZQSxBTCxkYXZpc2NoMDEsNDMzMzMzMw0KMTk5OCxOWUEsQUwsbWFydGl0aTAyLDQzMDAwMDANCjE5OTgsTllBLEFMLHBldHRpYW4wMSwzODAwMDAwDQoxOTk4LE5ZQSxBTCxpcmFidWhpMDEsMjkyNTAwMA0KMTk5OCxOWUEsQUwsZ2lyYXJqbzAxLDI4NTAwMDANCjE5OTgsTllBLEFMLGJyb3Npc2MwMSwyNjUwMDAwDQoxOTk4LE5ZQSxBTCxzdGFudG1pMDIsMTkxNjY2Nw0KMTk5OCxOWUEsQUwsbmVsc29qZTAxLDE3NjY2NjcNCjE5OTgsTllBLEFMLHJhaW5ldGkwMSwxMzAwMDAwDQoxOTk4LE5ZQSxBTCxjdXJ0aWNoMDEsMTI1MDAwMA0KMTk5OCxOWUEsQUwsaG9sbWVkYTAxLDEwNjY2NjcNCjE5OTgsTllBLEFMLGxsb3lkZ3IwMSw4NzUwMDANCjE5OTgsTllBLEFMLHN0cmF3ZGEwMSw4NzUwMDANCjE5OTgsTllBLEFMLHNvam9sdTAxLDgwMDAwMA0KMTk5OCxOWUEsQUwsc3ZldW1kYTAxLDgwMDAwMA0KMTk5OCxOWUEsQUwsaGVybmFvcjAxLDc1MDAwMA0KMTk5OCxOWUEsQUwsamV0ZXJkZTAxLDc1MDAwMA0KMTk5OCxOWUEsQUwscml2ZXJtYTAxLDc1MDAwMA0KMTk5OCxOWUEsQUwsYmFua3N3aTAxLDM0MjUwMA0KMTk5OCxOWUEsQUwsbWVuZG9yYTAxLDI3NTAwMA0KMTk5OCxOWUEsQUwscG9zYWRqbzAxLDI1MDAwMA0KMTk5OCxOWUEsQUwsYm9yb3dqbzAxLDE4ODgwMA0KMTk5OCxOWUEsQUwsYnVzaGhvMDEsMTc4OTAwDQoxOTk4LE5ZQSxBTCxlaW5lcmRhMDEsMTcwMDAwDQoxOTk4LE5ZQSxBTCxzZWFib3NjMDEsMTcwMDAwDQoxOTk4LE5ZQSxBTCxzcGVuY3NoMDEsMTcwMDAwDQoxOTk4LE5ZQSxBTCx0ZXNzbWphMDEsMTcwMDAwDQoxOTk4LE9BSyxBTCxyb2dlcmtlMDEsNTAwMDAwMA0KMTk5OCxPQUssQUwsY2FuZGl0bzAxLDI4NTAwMDANCjE5OTgsT0FLLEFMLGZldHRlbWkwMSwyNDc1MDAwDQoxOTk4LE9BSyxBTCxoZW5kZXJpMDEsMTE1MDAwMA0KMTk5OCxPQUssQUwsdGF5bG9iaTA0LDExMDAwMDANCjE5OTgsT0FLLEFMLGFiYm90a3UwMSwxMDAwMDAwDQoxOTk4LE9BSyxBTCxncm9vbWJ1MDEsNTk1MDAwDQoxOTk4LE9BSyxBTCxtb2hsZW1pMDEsNTI1MDAwDQoxOTk4LE9BSyxBTCxibG93ZW1pMDEsNDc1MDAwDQoxOTk4LE9BSyxBTCxtYWdhZGRhMDEsNDc1MDAwDQoxOTk4LE9BSyxBTCxtYWNrc2gwMSw0NTAwMDANCjE5OTgsT0FLLEFMLGJvdXJucmEwMSwzODUwMDANCjE5OTgsT0FLLEFMLHN0YWlybWEwMSwzMjUwMDANCjE5OTgsT0FLLEFMLGdpYW1iamEwMSwzMTUwMDANCjE5OTgsT0FLLEFMLG1hdGhldGowMSwzMTUwMDANCjE5OTgsT0FLLEFMLGhlcmVkZ2kwMSwyNzUwMDANCjE5OTgsT0FLLEFMLGhvbHplbWEwMSwyNTAwMDANCjE5OTgsT0FLLEFMLG1pdGNoa2UwMSwyMjUwMDANCjE5OTgsT0FLLEFMLG9xdWlzbWkwMSwyMTUwMDANCjE5OTgsT0FLLEFMLHdpbGxpZ2UwMywyMTUwMDANCjE5OTgsT0FLLEFMLHNwaWV6c2MwMSwyMDUwMDANCjE5OTgsT0FLLEFMLHRlbGdoZGEwMSwyMDAwMDANCjE5OTgsT0FLLEFMLHNtYWxsYWEwMSwxOTc1MDANCjE5OTgsT0FLLEFMLGhheW5lamkwMSwxODc1MDANCjE5OTgsT0FLLEFMLGFkYW1zd2kwMiwxNzcwMDANCjE5OTgsT0FLLEFMLG1vbGluaXowMSwxNzUwMDANCjE5OTgsT0FLLEFMLGxlc2hlYnIwMSwxNzQwMDANCjE5OTgsT0FLLEFMLG1jZG9uamEwMiwxNzQwMDANCjE5OTgsT0FLLEFMLHJpZ2J5YnIwMSwxNzQwMDANCjE5OTgsT0FLLEFMLGdyaWV2YmUwMSwxNzIwMDANCjE5OTgsT0FLLEFMLHRlamFkbWkwMSwxNzIwMDANCjE5OTgsT0FLLEFMLGNocmlzcnkwMSwxNzAwMDANCjE5OTgsT0FLLEFMLGhpbmNoYWowMSwxNzAwMDANCjE5OTgsT0FLLEFMLHN0ZWluYmwwMSwxNzAwMDANCjE5OTgsT0FLLEFMLHdvb2RqYTAyLDE3MDAwMA0KMTk5OCxTRUEsQUwsZ3JpZmZrZTAyLDgxNTM2NjcNCjE5OTgsU0VBLEFMLGpvaG5zcmEwNSw2MDAwMDAwDQoxOTk4LFNFQSxBTCxidWhuZWphMDEsNTM2NzcwMg0KMTk5OCxTRUEsQUwsZmFzc2VqZTAxLDUwMTY2NjcNCjE5OTgsU0VBLEFMLG1hcnRpZWQwMSwzNTAwMDAwDQoxOTk4LFNFQSxBTCx0aW1saW1pMDEsMzAyNTAwMA0KMTk5OCxTRUEsQUwsc2xvY3VoZTAxLDMwMDAwMDANCjE5OTgsU0VBLEFMLHdpbHNvZGEwMSwyNTI1MDAwDQoxOTk4LFNFQSxBTCxzZWd1aWRhMDEsMjM1MDAwMA0KMTk5OCxTRUEsQUwscm9kcmlhbDAxLDIxNjI1MDANCjE5OTgsU0VBLEFMLG1veWVyamEwMSwyMDAwMDAwDQoxOTk4LFNFQSxBTCxjb3Jham8wMSwxNzAwMDAwDQoxOTk4LFNFQSxBTCxheWFsYWJvMDEsMTUwMDAwMA0KMTk5OCxTRUEsQUwsZGF2aXNydTAxLDEwMDAwMDANCjE5OTgsU0VBLEFMLGZvc3NhdG8wMSw2NTAwMDANCjE5OTgsU0VBLEFMLGFtYXJhcmkwMSw1NTAwMDANCjE5OTgsU0VBLEFMLHdlbGxzYm8wMSw0NzUwMDANCjE5OTgsU0VBLEFMLHN3aWZ0YmkwMiw0MjUwMDANCjE5OTgsU0VBLEFMLHdpbGtpcmkwMSw0MjUwMDANCjE5OTgsU0VBLEFMLGJ1bGxpamkwMSw0MDAwMDANCjE5OTgsU0VBLEFMLGR1Y2V5cm8wMSwzNzUwMDANCjE5OTgsU0VBLEFMLGhpbGxnbDAxLDMyNTAwMA0KMTk5OCxTRUEsQUwsbWFyemFqbzAxLDMwMDAwMA0KMTk5OCxTRUEsQUwsc3BvbGpwYTAxLDI1NTAwMA0KMTk5OCxTRUEsQUwsZGF2aXN0aTAxLDIyNzUwMA0KMTk5OCxTRUEsQUwsaHVzb25qZTAxLDIyNTAwMA0KMTk5OCxTRUEsQUwscGVyZXpybzAxLDIxNTAwMA0KMTk5OCxTRUEsQUwsY2FybW9yYTAxLDE5NTAwMA0KMTk5OCxTRUEsQUwscGFuaWFqbzAxLDE4NTAwMA0KMTk5OCxTRUEsQUwscm9zc3lyaTAxLDE4NTAwMA0KMTk5OCxTRUEsQUwsbWNjYXJncjAxLDE4MDAwMA0KMTk5OCxTRUEsQUwsY2xvdWRrZTAxLDE3NDAwMA0KMTk5OCxTRUEsQUwsZ2lwc29jaDAxLDE3MDAwMA0KMTk5OCxTRUEsQUwsZ3VldmFnaTAxLDE3MDAwMA0KMTk5OCxTRUEsQUwsaG9sZHJkYTAxLDE3MDAwMA0KMTk5OCxTRUEsQUwsaWJhbmVyYTAxLDE3MDAwMA0KMTk5OCxTRUEsQUwsbW9uYWhzaDAxLDE3MDAwMA0KMTk5OCxTRUEsQUwsb2xpdmVqbzAxLDE3MDAwMA0KMTk5OCxUQkEsQUwsbWNncmlmcjAxLDU1MDAwMDANCjE5OTgsVEJBLEFMLGFsdmFyd2kwMSw0NTAwMDAwDQoxOTk4LFRCQSxBTCxoZXJuYXJvMDEsNDAwMDAwMA0KMTk5OCxUQkEsQUwsc29ycmVwYTAxLDIwMDAwMDANCjE5OTgsVEJBLEFMLHN0b2Nra2UwMSwxODAwMDAwDQoxOTk4LFRCQSxBTCxmbGFoZWpvMDEsMTYwMDAwMA0KMTk5OCxUQkEsQUwsbWFydGlkYTAxLDE1MDAwMDANCjE5OTgsVEJBLEFMLGJvZ2dzd2EwMSwxMTUwMDAwDQoxOTk4LFRCQSxBTCxhbGRyZXNjMDEsMjc1MDAwDQoxOTk4LFRCQSxBTCxtY2NyYXF1MDEsMjcwMDAwDQoxOTk4LFRCQSxBTCx3aGl0ZXJpMDEsMjUwMDAwDQoxOTk4LFRCQSxBTCxhcnJvanJvMDEsMjQ1MDAwDQoxOTk4LFRCQSxBTCxsb3BlemFsMDIsMjQ1MDAwDQoxOTk4LFRCQSxBTCxzcHJpbmRlMDEsMjQ1MDAwDQoxOTk4LFRCQSxBTCxrZWxseW1pMDIsMjM1MDAwDQoxOTk4LFRCQSxBTCx3YWRldGUwMSwyMjI1MDANCjE5OTgsVEJBLEFMLHNhdW5kdG8wMSwyMTUwMDANCjE5OTgsVEJBLEFMLGRpZmVsbWkwMSwyMTAwMDANCjE5OTgsVEJBLEFMLG1lY2lyamkwMSwyMDUwMDANCjE5OTgsVEJBLEFMLHRhdGlzcmEwMSwyMDUwMDANCjE5OTgsVEJBLEFMLGdvcmVjcmkwMSwyMDAwMDANCjE5OTgsVEJBLEFMLHBlcnJ5aGUwMSwyMDAwMDANCjE5OTgsVEJBLEFMLHNhbnRhanUwMSwxOTc1MDANCjE5OTgsVEJBLEFMLGNhaXJvbWkwMSwxOTUwMDANCjE5OTgsVEJBLEFMLGxlZGVzYWEwMSwxOTUwMDANCjE5OTgsVEJBLEFMLHlhbmVzMDEsMTk1MDAwDQoxOTk4LFRCQSxBTCxyZWthcmJyMDEsMTkwMDAwDQoxOTk4LFRCQSxBTCx0cmFtbWJ1MDEsMTgwMDAwDQoxOTk4LFRCQSxBTCxjYXJsc2RhMDEsMTc1MDAwDQoxOTk4LFRCQSxBTCxidXRsZXJpMDEsMTcwMDAwDQoxOTk4LFRCQSxBTCxqb2huc2phMDIsMTcwMDAwDQoxOTk4LFRCQSxBTCxzbWl0aGJvMDYsMTcwMDAwDQoxOTk4LFRCQSxBTCx3aW5ucmEwMSwxNzAwMDANCjE5OTgsVEVYLEFMLGdvbnphanUwMyw3ODAwMDAwDQoxOTk4LFRFWCxBTCxyb2RyaWl2MDEsNjcwMDAwMA0KMTk5OCxURVgsQUwsY2xhcmt3aTAyLDU4MTI1OTUNCjE5OTgsVEVYLEFMLHdldHRlam8wMSw1ODAwMDAwDQoxOTk4LFRFWCxBTCxidXJrZWpvMDMsNDAwMDAwMA0KMTk5OCxURVgsQUwsd2l0dGJvMDEsMzI1MDAwMA0KMTk5OCxURVgsQUwsb2xpdmVkYTAyLDMwNTAwMDANCjE5OTgsVEVYLEFMLHNlbGVhYTAxLDI4NTAwMDANCjE5OTgsVEVYLEFMLGdvb2R3dG8wMSwyMzUwMDAwDQoxOTk4LFRFWCxBTCxtY2xlbW1hMDEsMjMwMDAwMA0KMTk5OCxURVgsQUwsa2VsbHlybzAxLDE2MjUwMDANCjE5OTgsVEVYLEFMLHBhdmxpcm8wMSwxNjAwMDAwDQoxOTk4LFRFWCxBTCxlbHN0ZWtlMDEsMTUwMDAwMA0KMTk5OCxURVgsQUwsc3RldmVsZTAxLDEyNTAwMDANCjE5OTgsVEVYLEFMLGdyZWVycnUwMSwxMDI1MDAwDQoxOTk4LFRFWCxBTCxoZXJuYXhhMDEsMTAwMDAwMA0KMTk5OCxURVgsQUwsYWxpY2VsdTAxLDc1MDAwMA0KMTk5OCxURVgsQUwsaGFzZWxiaTAxLDYyNTAwMA0KMTk5OCxURVgsQUwsZ3VuZGVlcjAxLDUxMDAwMA0KMTk5OCxURVgsQUwsY2VkZW5kbzAxLDUwMDAwMA0KMTk5OCxURVgsQUwsY2FkYXJncjAxLDMzMDAwMA0KMTk5OCxURVgsQUwsY3JhYnR0aTAxLDI5MDAwMA0KMTk5OCxURVgsQUwsc2ltbXNtaTAxLDI3NTAwMA0KMTk5OCxURVgsQUwsYnJhbmRtYTAxLDIyMjUwMA0KMTk5OCxURVgsQUwsaGVsbGlyaTAxLDIxNjUwMA0KMTk5OCxURVgsQUwsYmFpbGVzYzAxLDIxMDAwMA0KMTk5OCxURVgsQUwscGF0dGVkYTA0LDIwODAwMA0KMTk5OCxURVgsQUwsc2FudGFqdTAxLDE4MjUwMA0KMTk5OCxURVgsQUwsZm9zc2F0bzAxLDE3MDAwMA0KMTk5OCxURVgsQUwsdGF0aXNmZTAxLDE3MDAwMA0KMTk5OCxUT1IsQUwsY2xlbWVybzAyLDg1NTAwMDANCjE5OTgsVE9SLEFMLGd1em1hanUwMSw1MDAwMDAwDQoxOTk4LFRPUixBTCxteWVyc3JhMDEsNDQxNjY2Nw0KMTk5OCxUT1IsQUwsc2FudGliZTAxLDQwMDAwMDANCjE5OTgsVE9SLEFMLGhhbnNvZXIwMSwzNTMzMzMzDQoxOTk4LFRPUixBTCxoZW50Z3BhMDEsMzI1MDAwMA0KMTk5OCxUT1IsQUwsZGVsZ2FjYTAxLDI0MDAwMDANCjE5OTgsVE9SLEFMLHNwcmFnZWQwMiwyMzUwMDAwDQoxOTk4LFRPUixBTCxjYW5zZWpvMDEsMjEyNTAwMA0KMTk5OCxUT1IsQUwsZmVybmF0bzAxLDIwMDAwMDANCjE5OTgsVE9SLEFMLHN0YW5sbWkwMiwxODAwMDAwDQoxOTk4LFRPUixBTCx3aWxsaXdvMDIsMTYxNTAwMA0KMTk5OCxUT1IsQUwsZ29uemFhbDAxLDE0OTc1MDANCjE5OTgsVE9SLEFMLGZsZXRjZGEwMSwxNDc1MDAwDQoxOTk4LFRPUixBTCxncmVlbnNoMDEsMTQ3NTAwMA0KMTk5OCxUT1IsQUwscXVhbnRwYTAxLDExNTAwMDANCjE5OTgsVE9SLEFMLHBsZXNhZGEwMSw4MDAwMDANCjE5OTgsVE9SLEFMLHN0aWViZGEwMSw0NTAwMDANCjE5OTgsVE9SLEFMLHNhbXVlanUwMSw0MjEwMDANCjE5OTgsVE9SLEFMLGdyZWJlY3IwMSw0MTUwMDANCjE5OTgsVE9SLEFMLHJpc2xlYmkwMSw0MDUwMDANCjE5OTgsVE9SLEFMLGNydXpqbzAyLDMyNTAwMA0KMTk5OCxUT1IsQUwscGVyc29ybzAxLDI2NTAwMA0KMTk5OCxUT1IsQUwsZXNjb2JrZTAxLDIyMDAwMA0KMTk5OCxUT1IsQUwsc3Rld2FzaDAxLDE5MjUwMA0KMTk5OCxUT1IsQUwsY2FycGVjaDAxLDE5MDAwMA0KMTk5OCxUT1IsQUwsY3Jlc3BmZTAxLDE4NTAwMA0KMTk5OCxUT1IsQUwsZGFsZXNtYTAxLDE4NTAwMA0KMTk5OCxUT1IsQUwsYWxtYW5jYTAxLDE3MjUwMA0KMTk5OCxUT1IsQUwscm9kcmluZTAxLDE3MjUwMA0KMTk5OCxUT1IsQUwsYnJvd25rZTA0LDE3MDAwMA0KMTk5OCxUT1IsQUwsc2luY2xzdDAxLDE3MDAwMA0KMTk5OCxBUkksTkwsYmVuZXNhbjAxLDY0NTAwMDANCjE5OTgsQVJJLE5MLGJlbGxqYTAxLDUwMDAwMDANCjE5OTgsQVJJLE5MLHdpbGxpbWEwNCw0ODAwMDAwDQoxOTk4LEFSSSxOTCx3aGl0ZWRlMDMsMzUxMDAwMA0KMTk5OCxBUkksTkwsYmxhaXJ3aTAxLDMyNTAwMDANCjE5OTgsQVJJLE5MLGZhYnJlam8wMSwxMDUwMDAwDQoxOTk4LEFSSSxOTCxhbmRlcmJyMDIsNzc1MDAwDQoxOTk4LEFSSSxOTCxzcHJpbnJ1MDEsNzAwMDAwDQoxOTk4LEFSSSxOTCxvbHNvbmdyMDEsNjUwMDAwDQoxOTk4LEFSSSxOTCxkYWFsb20wMSw1NzUwMDANCjE5OTgsQVJJLE5MLGpvbmVzY2gwNSw0NTAwMDANCjE5OTgsQVJJLE5MLHN0YW5rYW4wMSwzNTAwMDANCjE5OTgsQVJJLE5MLG1hbnVlYmEwMSwyODUwMDANCjE5OTgsQVJJLE5MLHN0aW5ua2UwMSwyNzUwMDANCjE5OTgsQVJJLE5MLGZveGFuMDEsMjQwMDAwDQoxOTk4LEFSSSxOTCxicm93c2MwMSwyMjUwMDANCjE5OTgsQVJJLE5MLHNvZG93Y2wwMSwyMTQwMDANCjE5OTgsQVJJLE5MLHN1cHBhamUwMSwyMTQwMDANCjE5OTgsQVJJLE5MLGFkYW1zam8wMiwyMTAwMDANCjE5OTgsQVJJLE5MLGJhdGlzdG8wMSwyMTAwMDANCjE5OTgsQVJJLE5MLHJvZHJpZmUwMSwyMTAwMDANCjE5OTgsQVJJLE5MLHNtYWxsYWEwMSwxOTc1MDANCjE5OTgsQVJJLE5MLGJlbml0eWEwMSwxOTUwMDANCjE5OTgsQVJJLE5MLGxpZGxlY28wMSwxOTUwMDANCjE5OTgsQVJJLE5MLGJyZWRlYnIwMSwxOTAwMDANCjE5OTgsQVJJLE5MLGdhcmNpa2EwMSwxODc1MDANCjE5OTgsQVJJLE5MLHJvYmlua2UwMSwxODUwMDANCjE5OTgsQVJJLE5MLGRlbGx1ZGEwMSwxNzc1MDANCjE5OTgsQVJJLE5MLG1pbGxlZGEwMiwxNzc1MDANCjE5OTgsQVJJLE5MLGNob3VpYm8wMSwxNzUwMDANCjE5OTgsQVJJLE5MLHRlbGVtYW0wMSwxNzMwMDANCjE5OTgsQVJJLE5MLGZyaWFzaGEwMSwxNzEwMDANCjE5OTgsQVJJLE5MLGRpYXplZDAzLDE3MDAwMA0KMTk5OCxBUkksTkwsZm9yZGJlMDEsMTcwMDAwDQoxOTk4LEFSSSxOTCxsZWV0cjAxLDE3MDAwMA0KMTk5OCxBUkksTkwsbWljaGFjaDAxLDE3MDAwMA0KMTk5OCxBVEwsTkwsbWFkZHVncjAxLDk2MDAwMDANCjE5OTgsQVRMLE5MLGdhbGFyYW4wMSw4NDAwMDAwDQoxOTk4LEFUTCxOTCxzbW9sdGpvMDEsNzc1MDAwMA0KMTk5OCxBVEwsTkwsZ2xhdml0bzAyLDcwMDAwMDANCjE5OTgsQVRMLE5MLG5lYWdsZGUwMSw0NTAwMDAwDQoxOTk4LEFUTCxOTCx3b2hsZW1hMDEsNDEyNTAwMA0KMTk5OCxBVEwsTkwsbG9wZXpqYTAxLDM4NTAwMDANCjE5OTgsQVRMLE5MLGtsZXNrcnkwMSwzNTAwMDAwDQoxOTk4LEFUTCxOTCx3ZWlzc3dhMDEsMzA1MDAwMA0KMTk5OCxBVEwsTkwsam9uZXNjaDA2LDI1NTAwMDANCjE5OTgsQVRMLE5MLHdpbGxpZ2UwMiwxMjUwMDAwDQoxOTk4LEFUTCxOTCxsb2NraGtlMDEsNzAwMDAwDQoxOTk4LEFUTCxOTCxlbWJyZWFsMDEsNTc1MDAwDQoxOTk4LEFUTCxOTCxtYXJ0aWRlMDEsNTUwMDAwDQoxOTk4LEFUTCxOTCx0dWNrZW1pMDEsMzcwMDAwDQoxOTk4LEFUTCxOTCxiYXV0aWRhMDEsMzQ1MDAwDQoxOTk4LEFUTCxOTCxiZWxsaXJhMDEsMjUwMDAwDQoxOTk4LEFUTCxOTCxwZXJlemVkMDIsMjI1MDAwDQoxOTk4LEFUTCxOTCxzZWFuZXJ1MDEsMjI1MDAwDQoxOTk4LEFUTCxOTCxwcmlkZWN1MDEsMjE2MDAwDQoxOTk4LEFUTCxOTCxqb25lc2FuMDEsMjE1MDAwDQoxOTk4LEFUTCxOTCxib3Jib3BlMDIsMTk1MDAwDQoxOTk4LEFUTCxOTCxncmFmZnRvMDEsMTkyNTAwDQoxOTk4LEFUTCxOTCxjYXRoZW1pMDEsMTgyNTAwDQoxOTk4LEFUTCxOTCxsaWd0ZWtlMDEsMTc1MDAwDQoxOTk4LEFUTCxOTCxtaWxsd2tlMDEsMTc1MDAwDQoxOTk4LEFUTCxOTCxidXRsZWFkMDEsMTcwMDAwDQoxOTk4LEFUTCxOTCxjaGFybG5vMDEsMTcwMDAwDQoxOTk4LEFUTCxOTCxlZG1vbmJyMDEsMTcwMDAwDQoxOTk4LEFUTCxOTCxndWlsbG96MDEsMTcwMDAwDQoxOTk4LEFUTCxOTCxtb3NzZGEwMSwxNzAwMDANCjE5OTgsQVRMLE5MLHJvY2tlam8wMSwxNzAwMDANCjE5OTgsQ0hOLE5MLHNvc2FzYTAxLDgzMjUwMDANCjE5OTgsQ0hOLE5MLGNsYXJrbWEwMSw1MDUwMDAwDQoxOTk4LENITixOTCxqb2huc2xhMDMsNDkwMDAwMA0KMTk5OCxDSE4sTkwsZ3JhY2VtYTAxLDQyMjUwMDANCjE5OTgsQ0hOLE5MLGJsYXVzamUwMSw0MDAwMDAwDQoxOTk4LENITixOTCx0YXBhbmtlMDEsNDAwMDAwMA0KMTk5OCxDSE4sTkwsYmVja3JvMDEsMzYwMDAwMA0KMTk5OCxDSE4sTkwsdHJhY2hzdDAxLDI5ODc1MDANCjE5OTgsQ0hOLE5MLHJvZHJpaGUwMiwyNzAwMDAwDQoxOTk4LENITixOTCxtb3Jhbm1pMDEsMjAwMDAwMA0KMTk5OCxDSE4sTkwsc2VydmFzYzAxLDE2NDUwMDANCjE5OTgsQ0hOLE5MLGZvc3Rla2UwMSwxNDUwMDAwDQoxOTk4LENITixOTCxwYXR0ZWJvMDEsOTAwMDAwDQoxOTk4LENITixOTCxoZXJuYWpvMDEsNzI1MDAwDQoxOTk4LENITixOTCxtdWxob3RlMDEsNjAwMDAwDQoxOTk4LENITixOTCxtaWVza21hMDEsNTUwMDAwDQoxOTk4LENITixOTCxhbGV4YW1hMDIsNDI1MDAwDQoxOTk4LENITixOTCxhZGFtc3RlMDEsMjk1MDAwDQoxOTk4LENITixOTCxvcmlla2UwMSwyNDAwMDANCjE5OTgsQ0hOLE5MLGhvdXN0dHkwMSwyMjUwMDANCjE5OTgsQ0hOLE5MLHN0ZXZlZGEwMSwyMjUwMDANCjE5OTgsQ0hOLE5MLGdvbnphamUwMSwyMTAwMDANCjE5OTgsQ0hOLE5MLGJyb3duYnIwMSwxODAwMDANCjE5OTgsQ0hOLE5MLHBpc2NpbWEwMSwxODAwMDANCjE5OTgsQ0hOLE5MLG1hcnRpc2EwMSwxNzQ1MDANCjE5OTgsQ0hOLE5MLGplbm5pcm8wMSwxNzMwMDANCjE5OTgsQ0hOLE5MLHRlbGVtYW0wMSwxNzMwMDANCjE5OTgsQ0hOLE5MLGdhZXR0Z2EwMSwxNzAwMDANCjE5OTgsQ0hOLE5MLHZhbGRlcGUwMSwxNzAwMDANCjE5OTgsQ0hOLE5MLHZhbnJ5YmUwMSwxNzAwMDANCjE5OTgsQ0hOLE5MLHdvb2RrZTAyLDE3MDAwMA0KMTk5OCxDSU4sTkwsbGFya2liYTAxLDUzMDAwMDANCjE5OTgsQ0lOLE5MLHNhbmRlcmUwMiwzNzAwMDAwDQoxOTk4LENJTixOTCxib29uZWJyMDEsMjgwMDAwMA0KMTk5OCxDSU4sTkwsZ3JlZW53aTAxLDE3NTAwMDANCjE5OTgsQ0lOLE5MLHRhdWJlZWQwMSw5NzUwMDANCjE5OTgsQ0lOLE5MLGJlbGluc3QwMSw4MzUwMDANCjE5OTgsQ0lOLE5MLG5pZXZlbWUwMSw4MjAwMDANCjE5OTgsQ0lOLE5MLGhhcnJpbGUwMSw3NzUwMDANCjE5OTgsQ0lOLE5MLHNoYXdqZTAxLDY1MDAwMA0KMTk5OCxDSU4sTkwsY29va2VzdDAxLDMwMDAwMA0KMTk5OCxDSU4sTkwsaGFybmlwZTAxLDMwMDAwMA0KMTk5OCxDSU4sTkwscGVyZXplZDAxLDMwMDAwMA0KMTk5OCxDSU4sTkwscmVtbGltaTAxLDMwMDAwMA0KMTk5OCxDSU4sTkwsd2VhdGhkYTAxLDMwMDAwMA0KMTk5OCxDSU4sTkwsaHV0dG9tYTAxLDI2NTAwMA0KMTk5OCxDSU4sTkwsbnVubmFqbzAxLDI0NTAwMA0KMTk5OCxDSU4sTkwsc3VsbGlzYzAxLDIzNTAwMA0KMTk5OCxDSU4sTkwsdG9ta29icjAxLDIzMDAwMA0KMTk5OCxDSU4sTkwscmVlc2VwbzAxLDIyMDAwMA0KMTk5OCxDSU4sTkwseW91bmdkbTAxLDIxNTAwMA0KMTk5OCxDSU4sTkwsam9yZGFyaTAzLDIwMDAwMA0KMTk5OCxDSU4sTkwsc3R5bmVjaDAxLDIwMDAwMA0KMTk5OCxDSU4sTkwsd2hpdGVnYTAxLDE5MDAwMA0KMTk5OCxDSU4sTkwsZm9yZHlicjAxLDE4MDAwMA0KMTk5OCxDSU4sTkwsY2FzZXlzZTAxLDE3NTAwMA0KMTk5OCxDSU4sTkwsZ3JhdmVkYTAxLDE3NTAwMA0KMTk5OCxDSU4sTkwscGFycmlzdDAxLDE3NTAwMA0KMTk5OCxDSU4sTkwscGV0YWdybzAxLDE3NTAwMA0KMTk5OCxDSU4sTkwsYmVyZWphMDEsMTcwMDAwDQoxOTk4LENJTixOTCxib29uZWFhMDEsMTcwMDAwDQoxOTk4LENJTixOTCxnbGF1YmtlMDEsMTcwMDAwDQoxOTk4LENJTixOTCxqYWNrc2RhMDQsMTcwMDAwDQoxOTk4LENJTixOTCxyZXllc2RlMDEsMTcwMDAwDQoxOTk4LENJTixOTCx3YXRraXBhMDEsMTcwMDAwDQoxOTk4LENPTCxOTCx3YWxrZWxhMDEsNjA1MDAwMA0KMTk5OCxDT0wsTkwsa2lsZWRhMDEsNTQ5Mjk4MQ0KMTk5OCxDT0wsTkwsYmljaGVkYTAxLDUyOTE2NjcNCjE5OTgsQ09MLE5MLGNhc3RpdmkwMiw1MDI1MDAwDQoxOTk4LENPTCxOTCxidXJrc2VsMDEsNDkwMDAwMA0KMTk5OCxDT0wsTkwsbGFuc2ltaTAxLDM5NTAwMDANCjE5OTgsQ09MLE5MLHJpdHprZTAxLDM1MDAwMDANCjE5OTgsQ09MLE5MLGFzdGFjcGUwMSwzMzUwMDAwDQoxOTk4LENPTCxOTCxtYW53YWtpMDEsMjE1MDAwMA0KMTk5OCxDT0wsTkwsZGlwb3RqZTAxLDE4MDAwMDANCjE5OTgsQ09MLE5MLHJlZWRqZTAyLDE1MDAwMDANCjE5OTgsQ09MLE5MLHZlcmVzZGEwMSwxMDUwMDAwDQoxOTk4LENPTCxOTCxtY2VscmNoMDEsODE3MDAwDQoxOTk4LENPTCxOTCxjb2xicmdyMDEsNzM1MDAwDQoxOTk4LENPTCxOTCxsZXNrYWN1MDEsNzMwMDAwDQoxOTk4LENPTCxOTCxtdW5vem1pMDEsNTg1MDAwDQoxOTk4LENPTCxOTCx2YW5kZWpvMDIsNTYwMDAwDQoxOTk4LENPTCxOTCxiYWlsZXJvMDEsMzU1MDAwDQoxOTk4LENPTCxOTCxiYXRlc2phMDEsMzI1MDAwDQoxOTk4LENPTCxOTCx0aG9tcG1hMDEsMzAwMDAwDQoxOTk4LENPTCxOTCx3cmlnaGphMDEsMjQwMDAwDQoxOTk4LENPTCxOTCxkZWplYW1pMDEsMjE1MDAwDQoxOTk4LENPTCxOTCxwZXJlem5lMDEsMjEwMDAwDQoxOTk4LENPTCxOTCxzaHVtcHRlMDEsMjEwMDAwDQoxOTk4LENPTCxOTCx0aG9tc2pvMDEsMjEwMDAwDQoxOTk4LENPTCxOTCxnb29kd2N1MDEsMjA4MDAwDQoxOTk4LENPTCxOTCxidXJrZWpvMDQsMTkwMDAwDQoxOTk4LENPTCxOTCxoZWx0b3RvMDEsMTkwMDAwDQoxOTk4LENPTCxOTCxlY2hldmFuMDEsMTc1MDAwDQoxOTk4LENPTCxOTCxqb25lc2JvMDQsMTcwMDAwDQoxOTk4LEZMTyxOTCxzaGVmZmdhMDEsMTQ5MzY2NjcNCjE5OTgsRkxPLE5MLGZlcm5hYWwwMSw3MDAwMDAwDQoxOTk4LEZMTyxOTCxib25pbGJvMDEsNTkwMDAwMA0KMTk5OCxGTE8sTkwsam9obnNjaDA0LDMzMDAwMDANCjE5OTgsRkxPLE5MLGhlcm5hbGkwMSwxNDc1MDAwDQoxOTk4LEZMTyxOTCxlaXNlbmppMDEsMTQwMDAwMA0KMTk5OCxGTE8sTkwsY2FuZ2VqbzAxLDU1MDAwMA0KMTk5OCxGTE8sTkwsZmxveWRjbDAxLDUwMDAwMA0KMTk5OCxGTE8sTkwscG93ZWxqYTA0LDMyMDAwMA0KMTk5OCxGTE8sTkwsemF1bmdyMDEsMjgwMDAwDQoxOTk4LEZMTyxOTCx3ZWhuZWpvMDEsMjc1MDAwDQoxOTk4LEZMTyxOTCxyZW50ZWVkMDEsMjU1MDAwDQoxOTk4LEZMTyxOTCxrbm9ycnJhMDEsMjUwMDAwDQoxOTk4LEZMTyxOTCxtYW50ZW1hMDEsMjUwMDAwDQoxOTk4LEZMTyxOTCxoZXJlZGZlMDEsMjI1MDAwDQoxOTk4LEZMTyxOTCxvamFsYWtpMDEsMjI1MDAwDQoxOTk4LEZMTyxOTCxjYXN0aWx1MDEsMjAwMDAwDQoxOTk4LEZMTyxOTCxwYWxsZG8wMSwyMDAwMDANCjE5OTgsRkxPLE5MLGNvdW5zY3IwMSwxODUwMDANCjE5OTgsRkxPLE5MLHN0YW5pcm8wMSwxODUwMDANCjE5OTgsRkxPLE5MLGFsZm9uYW4wMSwxNzUwMDANCjE5OTgsRkxPLE5MLGR1bndvdG8wMSwxNzIwMDANCjE5OTgsRkxPLE5MLGxlZWRlMDIsMTcyMDAwDQoxOTk4LEZMTyxOTCxrb3RzYW1hMDEsMTcxMDAwDQoxOTk4LEZMTyxOTCxsdWR3aWVyMDEsMTcxMDAwDQoxOTk4LEZMTyxOTCxiZXJnZGEwMSwxNzAwMDANCjE5OTgsRkxPLE5MLGJvb3R5am8wMSwxNzAwMDANCjE5OTgsRkxPLE5MLGRhcmVudmkwMSwxNzAwMDANCjE5OTgsRkxPLE5MLGVkbW9uYnIwMSwxNzAwMDANCjE5OTgsRkxPLE5MLGZvbnRlam8wMSwxNzAwMDANCjE5OTgsRkxPLE5MLGdvbnphYWwwMiwxNzAwMDANCjE5OTgsRkxPLE5MLGdvbnphZ2EwMSwxNzAwMDANCjE5OTgsRkxPLE5MLGhlbnJpb3MwMSwxNzAwMDANCjE5OTgsRkxPLE5MLGphY2tzcnkwMSwxNzAwMDANCjE5OTgsRkxPLE5MLG1lYWRvYnIwMSwxNzAwMDANCjE5OTgsRkxPLE5MLG1lZGlucmEwMSwxNzAwMDANCjE5OTgsRkxPLE5MLG1pbGxha2UwMSwxNzAwMDANCjE5OTgsRkxPLE5MLHJlZG1vbWkwMSwxNzAwMDANCjE5OTgsRkxPLE5MLHNhbmNoamUwMSwxNzAwMDANCjE5OTgsRkxPLE5MLHNwZWllanUwMSwxNzAwMDANCjE5OTgsSE9VLE5MLGJhZ3dlamUwMSw3OTQ1MDAwDQoxOTk4LEhPVSxOTCxiaWdnaWNyMDEsNjE0NTAwMA0KMTk5OCxIT1UsTkwsYWxvdW1vMDEsNTAyMDAwMA0KMTk5OCxIT1UsTkwsYmVsbGRlMDEsNDI1MDAwMA0KMTk5OCxIT1UsTkwscmV5bm9zaDAxLDMzMjUwMDANCjE5OTgsSE9VLE5MLGhhbXB0bWkwMSwyMjUwMDAwDQoxOTk4LEhPVSxOTCxhdXNtdWJyMDEsMTYwMDAwMA0KMTk5OCxIT1UsTkwsc3BpZXJiaTAxLDE2MDAwMDANCjE5OTgsSE9VLE5MLGV2ZXJlY2EwMSwxMDc1MDAwDQoxOTk4LEhPVSxOTCxiZXJyeXNlMDEsMTAwMDAwMA0KMTk5OCxIT1UsTkwsZ3V0aWVyaTAxLDg1MDAwMA0KMTk5OCxIT1UsTkwsYm9nYXJ0aTAxLDcyNTAwMA0KMTk5OCxIT1UsTkwsZXVzZWJ0bzAxLDcyNTAwMA0KMTk5OCxIT1UsTkwsaGVucnlkbzAxLDcyNTAwMA0KMTk5OCxIT1UsTkwsY2xhcmtkYTA1LDcwMDAwMA0KMTk5OCxIT1UsTkwsbWFnbmFtaTAxLDYwMDAwMA0KMTk5OCxIT1UsTkwsaG93ZWxqYTAyLDUwMDAwMA0KMTk5OCxIT1UsTkwsYmVyZ21zZTAxLDQ2NTAwMA0KMTk5OCxIT1UsTkwsd2FnbmViaTAyLDI4MDAwMA0KMTk5OCxIT1UsTkwsaG9sdGNoMDEsMjY5MDAwDQoxOTk4LEhPVSxOTCxnYXJjaXJhMDMsMjYwMDAwDQoxOTk4LEhPVSxOTCxwaGlsbGpyMDEsMjUwMDAwDQoxOTk4LEhPVSxOTCxsaW1ham8wMSwyNDAwMDANCjE5OTgsSE9VLE5MLG1vbnRncmEwMSwxODUwMDANCjE5OTgsSE9VLE5MLG5pdGtvY2owMSwxODUwMDANCjE5OTgsSE9VLE5MLGNhYnJlam8wMSwxODAwMDANCjE5OTgsSE9VLE5MLG1pbGxldHIwMiwxNzUwMDANCjE5OTgsSE9VLE5MLGVsYXJ0c2MwMSwxNzAwMDANCjE5OTgsSE9VLE5MLGhhbGFtam8wMSwxNzAwMDANCjE5OTgsSE9VLE5MLGhpZGFscmkwMSwxNzAwMDANCjE5OTgsSE9VLE5MLGluY2F2cGUwMSwxNzAwMDANCjE5OTgsSE9VLE5MLG1lbHVzbWkwMSwxNzAwMDANCjE5OTgsTEFOLE5MLHBpYXp6bWkwMSw4MDAwMDAwDQoxOTk4LExBTixOTCxtb25kZXJhMDEsNTUwMDAwMA0KMTk5OCxMQU4sTkwsbWFydGlyYTAyLDQ4MDAwMDANCjE5OTgsTEFOLE5MLGthcnJvZXIwMSw0NTAwMDAwDQoxOTk4LExBTixOTCx5b3VuZ2VyMDEsNDUwMDAwMA0KMTk5OCxMQU4sTkwsemVpbGV0bzAxLDMyMDAwMDANCjE5OTgsTEFOLE5MLHZpemNham8wMSwzMDAwMDAwDQoxOTk4LExBTixOTCxub21vaGkwMSwyODAwMDAwDQoxOTk4LExBTixOTCx2YWxkZWlzMDEsMjgwMDAwMA0KMTk5OCxMQU4sTkwsZ3V0aHJtYTAxLDE2MDAwMDANCjE5OTgsTEFOLE5MLHJhZGluc2MwMSw5MDAwMDANCjE5OTgsTEFOLE5MLGhvbGxhdG8wMSw3MDAwMDANCjE5OTgsTEFOLE5MLHBhcmtjaDAxLDcwMDAwMA0KMTk5OCxMQU4sTkwsZHJlaWZkYTAxLDY4NTAwMA0KMTk5OCxMQU4sTkwsaGFsbGRhMDEsNjUwMDAwDQoxOTk4LExBTixOTCxvc3VuYWFuMDEsNDUwMDAwDQoxOTk4LExBTixOTCxob3dhcnRoMDEsNDI1MDAwDQoxOTk4LExBTixOTCxwcmluY3RvMDEsMzUwMDAwDQoxOTk4LExBTixOTCxjZWRlbnJvMDEsMjgwMDAwDQoxOTk4LExBTixOTCxndWVycndpMDEsMjY1MDAwDQoxOTk4LExBTixOTCxkZXZlcm1pMDEsMjUwMDAwDQoxOTk4LExBTixOTCxodWJiYXRyMDEsMjUwMDAwDQoxOTk4LExBTixOTCxjcm9tZXRyMDEsMjQ1MDAwDQoxOTk4LExBTixOTCxjYXN0cmp1MDEsMjQwMDAwDQoxOTk4LExBTixOTCxicnVza2ppMDEsMjAwMDAwDQoxOTk4LExBTixOTCxiZWx0cmFkMDEsMTcwMDAwDQoxOTk4LExBTixOTCxibGFuY2hlMDEsMTcwMDAwDQoxOTk4LExBTixOTCxqdWRkbWkwMSwxNzAwMDANCjE5OTgsTEFOLE5MLGtvbmVycGEwMSwxNzAwMDANCjE5OTgsTEFOLE5MLGxhbmtmZnIwMSwxNzAwMDANCjE5OTgsTEFOLE5MLGx1a2VtYTAxLDE3MDAwMA0KMTk5OCxMQU4sTkwsbWFsb25zZTAxLDE3MDAwMA0KMTk5OCxMQU4sTkwsbW9udGdzdDAxLDE3MDAwMA0KMTk5OCxMQU4sTkwscmlnZ3NhZDAxLDE3MDAwMA0KMTk5OCxNSUwsTkwsZ3Jpc3NtYTAyLDUwMDAwMDANCjE5OTgsTUlMLE5MLG5pbHNzZGEwMSwzNzAwMDAwDQoxOTk4LE1JTCxOTCxqYWhham8wMSwzMzg3NTAwDQoxOTk4LE1JTCxOTCxlbGRyZWNhMDEsMzI2NjY2Nw0KMTk5OCxNSUwsTkwsam9uZXNkbzAxLDI1MDAwMDANCjE5OTgsTUlMLE5MLHZhbGVuam8wMywyMTM2MDk1DQoxOTk4LE1JTCxOTCx3aWNrbWJvMDEsMTUzMjAwMA0KMTk5OCxNSUwsTkwsY2lyaWxqZTAxLDE1MDAwMDANCjE5OTgsTUlMLE5MLHZpbmFmZTAxLDExMDAwMDANCjE5OTgsTUlMLE5MLG1lcmNlam8wMiwxMDUwMDAwDQoxOTk4LE1JTCxOTCxqdWRlbmplMDEsMTAwMDAwMA0KMTk5OCxNSUwsTkwsYnVybmlqZTAxLDkxMjUwMA0KMTk5OCxNSUwsTkwsa2FybHNjMDEsODAwMDAwDQoxOTk4LE1JTCxOTCxtYXRoZW1pMDEsODAwMDAwDQoxOTk4LE1JTCxOTCxqYWNrc2RhMDMsNTUwMDAwDQoxOTk4LE1JTCxOTCxteWVyc21pMDEsNTI1MDAwDQoxOTk4LE1JTCxOTCxoYW1lbGJvMDEsNDUwMDAwDQoxOTk4LE1JTCxOTCx3YWduZXBhMDEsNDUwMDAwDQoxOTk4LE1JTCxOTCxsZXZpc2plMDEsMzUwMDAwDQoxOTk4LE1JTCxOTCxuZXdmaW1hMDEsMzE4NzUwDQoxOTk4LE1JTCxOTCxsb3JldG1hMDEsMjc1MDAwDQoxOTk4LE1JTCxOTCxkYW1pY2plMDEsMjM4ODkyDQoxOTk4LE1JTCxOTCxvd2Vuc2VyMDEsMTgwMDAwDQoxOTk4LE1JTCxOTCxyZXllc2FsMDEsMTgwMDAwDQoxOTk4LE1JTCxOTCx3b29kYXN0MDEsMTc0NTAwDQoxOTk4LE1JTCxOTCxmb3hjaDAyLDE3NDAwMA0KMTk5OCxNSUwsTkwsZHVubnRvMDEsMTcyMDAwDQoxOTk4LE1JTCxOTCx3b29kYWJyMDEsMTcyMDAwDQoxOTk4LE1JTCxOTCxkZWxvc3ZhMDEsMTcwMDAwDQoxOTk4LE1JTCxOTCxodWdoZWJvMDEsMTcwMDAwDQoxOTk4LE1JTCxOTCxtYXJ0aWdyMDEsMTcwMDAwDQoxOTk4LE1JTCxOTCxwYXRyaWJyMDEsMTcwMDAwDQoxOTk4LE1JTCxOTCxyb3F1ZXJhMDEsMTcwMDAwDQoxOTk4LE1JTCxOTCxzbWl0aHRyMDEsMTcwMDAwDQoxOTk4LE1PTixOTCx3aGl0ZXJvMDIsMjAwMDAwMA0KMTk5OCxNT04sTkwscGVyZXpjYTAxLDE1MDAwMDANCjE5OTgsTU9OLE5MLHVyYmludWcwMSw1NjUwMDANCjE5OTgsTU9OLE5MLGFuZHJlc2gwMSw0NTAwMDANCjE5OTgsTU9OLE5MLGdydWR6bWEwMSwzNTAwMDANCjE5OTgsTU9OLE5MLHdpZGdlY2gwMSwzNTAwMDANCjE5OTgsTU9OLE5MLHNhbnRhZnAwMSwzMjAwMDANCjE5OTgsTU9OLE5MLGhlcm1hZHUwMSwyNTAwMDANCjE5OTgsTU9OLE5MLGxpdmluc2MwMSwyNTAwMDANCjE5OTgsTU9OLE5MLG1heWRlMDEsMjUwMDAwDQoxOTk4LE1PTixOTCxtb3JkZW1pMDEsMjUwMDAwDQoxOTk4LE1PTixOTCxtYWRkdW1pMDEsMjM1MDAwDQoxOTk4LE1PTixOTCxndWVycnZsMDEsMjMwMDAwDQoxOTk4LE1PTixOTCx0ZWxmb2FuMDEsMjI1MDAwDQoxOTk4LE1PTixOTCx2YWxkZW1hMDEsMjI1MDAwDQoxOTk4LE1PTixOTCx2aWRyb2pvMDEsMjIyNTAwDQoxOTk4LE1PTixOTCxwZXJlenJvMDEsMjE1MDAwDQoxOTk4LE1PTixOTCxtY2d1aXJ5MDEsMTg1MDAwDQoxOTk4LE1PTixOTCxodWJiYW1pMDEsMTc0MDAwDQoxOTk4LE1PTixOTCxrbGluZXN0MDIsMTczNTAwDQoxOTk4LE1PTixOTCxiYXRpc21pMDEsMTczMDAwDQoxOTk4LE1PTixOTCxiZW5uZXNoMDEsMTcyNTAwDQoxOTk4LE1PTixOTCxkZWhhcnJpMDEsMTcyNTAwDQoxOTk4LE1PTixOTCxmdWxsbWJyMDEsMTcyNTAwDQoxOTk4LE1PTixOTCxjYWJyZW9yMDEsMTcwNTAwDQoxOTk4LE1PTixOTCx0aHVybW1pMDEsMTcwNTAwDQoxOTk4LE1PTixOTCxidWxsaWtpMDEsMTcwMDAwDQoxOTk4LE1PTixOTCxoZW5sZWJvMDEsMTcwMDAwDQoxOTk4LE1PTixOTCxqb25lc3RlMDIsMTcwMDAwDQoxOTk4LE1PTixOTCxtb29yZXRyMDEsMTcwMDAwDQoxOTk4LE1PTixOTCxwYXZhbmNhMDEsMTcwMDAwDQoxOTk4LE1PTixOTCxzdG92YWRhMDEsMTcwMDAwDQoxOTk4LE1PTixOTCx2YXpxdWphMDEsMTcwMDAwDQoxOTk4LE5ZTixOTCxnaWxrZWJlMDEsNTA1MDAwMA0KMTk5OCxOWU4sTkwsaHVuZGx0bzAxLDQ5MjUwMDANCjE5OTgsTllOLE5MLGJhZXJnY2EwMSw0NzQ5OTk5DQoxOTk4LE5ZTixOTCxyb2phc21lMDEsNDU4MzMzMw0KMTk5OCxOWU4sTkwsbWNyYWVicjAxLDM4NTAwMDANCjE5OTgsTllOLE5MLG9sZXJ1am8wMSwzNzUwMDAwDQoxOTk4LE5ZTixOTCxqb25lc2JvMDMsMzExNjY2Nw0KMTk5OCxOWU4sTkwsbGVpdGVhbDAxLDMwMDAwMDANCjE5OTgsTllOLE5MLGZyYW5jam8wMSwyOTAwMDAwDQoxOTk4LE5ZTixOTCxtY21pY2dyMDEsMTkwMDAwMA0KMTk5OCxOWU4sTkwsYWxmb25lZDAxLDE3NTAwMDANCjE5OTgsTllOLE5MLGJlY2tlcmkwMSwxNTUwMDAwDQoxOTk4LE5ZTixOTCxyZWVkcmkwMSwxMzc1MDAwDQoxOTk4LE5ZTixOTCxtbGlja2RhMDEsMTI1MDAwMA0KMTk5OCxOWU4sTkwscmV5bm9hcjAyLDEyNTAwMDANCjE5OTgsTllOLE5MLHlvc2hpbWEwMSwxMDc1MDAwDQoxOTk4LE5ZTixOTCxjb29rZGUwMSw4NTAwMDANCjE5OTgsTllOLE5MLHdlbmRldHUwMSw2NjE1MDANCjE5OTgsTllOLE5MLHBoaWxsdG8wMiw1NjAwMDANCjE5OTgsTllOLE5MLGh1ZGVram8wMSw0OTkwMDANCjE5OTgsTllOLE5MLGxvcGV6bHUwMiwzNzUwMDANCjE5OTgsTllOLE5MLGJvaGFuYnIwMSwzNTAwMDANCjE5OTgsTllOLE5MLG9yZG9ucmUwMSwzMjAwMDANCjE5OTgsTllOLE5MLGh1c2tlYnUwMSwzMDAwMDANCjE5OTgsTllOLE5MLHBhcXVlY3IwMSwzMDAwMDANCjE5OTgsTllOLE5MLHByYXR0dG8wMiwzMDAwMDANCjE5OTgsTllOLE5MLHNwZWhydGkwMSwyODUwMDANCjE5OTgsTllOLE5MLHRhdHVtamkwMSwyMjUwMDANCjE5OTgsTllOLE5MLGlzcmluamEwMSwyMjAwMDANCjE5OTgsTllOLE5MLGZyYW5jbWEwMSwyMDI1MDANCjE5OTgsTllOLE5MLGNhc3RpYWwwMSwxOTI1MDANCjE5OTgsTllOLE5MLHdpbHNvcGEwMiwxOTI1MDANCjE5OTgsTllOLE5MLG1lcmNhaGUwMSwxNzAwMDANCjE5OTgsUEhJLE5MLGR5a3N0bGUwMSw2MDAwMDAwDQoxOTk4LFBISSxOTCxqZWZmZWdyMDEsNjAwMDAwMA0KMTk5OCxQSEksTkwsc2NoaWxjdTAxLDQ3MDAwMDANCjE5OTgsUEhJLE5MLHBvcnR1bWEwMSwyMzUwMDAwDQoxOTk4LFBISSxOTCxib3R0YXJpMDEsMjIwMDAwMA0KMTk5OCxQSEksTkwsbGVpdGVtYTAxLDIwMDAwMDANCjE5OTgsUEhJLE5MLGJyb2ducmkwMSwxNzI1MDAwDQoxOTk4LFBISSxOTCxsZXdpc21hMDEsMTcyMDAwMA0KMTk5OCxQSEksTkwsbGllYmVtaTAxLDEyMDAwMDANCjE5OTgsUEhJLE5MLGh1ZGxlcmUwMSwxMTUwMDAwDQoxOTk4LFBISSxOTCxyeWFua2UwMSw5OTAwMDANCjE5OTgsUEhJLE5MLHJvbGVuc2MwMSw3NTAwMDANCjE5OTgsUEhJLE5MLGdyZWVudHkwMSw1NTAwMDANCjE5OTgsUEhJLE5MLGFyaWFzYWwwMSw0MjUwMDANCjE5OTgsUEhJLE5MLHBhcmVubWEwMSw0MDAwMDANCjE5OTgsUEhJLE5MLGJyZXdlYmkwMSwzMTAwMDANCjE5OTgsUEhJLE5MLGFtYXJvcnUwMiwyNjUwMDANCjE5OTgsUEhJLE5MLGdsYW52ZG8wMSwyNjAwMDANCjE5OTgsUEhJLE5MLHBlcmV6eW8wMSwyNjAwMDANCjE5OTgsUEhJLE5MLGJ5cmRwYTAxLDIzNzUwMA0KMTk5OCxQSEksTkwsc3ByYWRqZTAxLDIzNTAwMA0KMTk5OCxQSEksTkwsam9yZGFrZTAxLDIzMDAwMA0KMTk5OCxQSEksTkwsZ3JhY2VtaTAyLDIyNTAwMA0KMTk5OCxQSEksTkwsc2VmY2lrZTAxLDE5NTAwMA0KMTk5OCxQSEksTkwsYmVlY2htYTAxLDE4NTAwMA0KMTk5OCxQSEksTkwsc3RlcGhnYTAxLDE4NTAwMA0KMTk5OCxQSEksTkwsYWJyZXVibzAxLDE4MDAwMA0KMTk5OCxQSEksTkwsYmxhemlybzAxLDE4MDAwMA0KMTk5OCxQSEksTkwsZXN0YWxibzAyLDE3MDAwMA0KMTk5OCxQSEksTkwsZ29tZXN3YTAxLDE3MDAwMA0KMTk5OCxQSEksTkwsbG9ld2VjYTAxLDE3MDAwMA0KMTk5OCxQSEksTkwsbWFnZWV3ZTAxLDE3MDAwMA0KMTk5OCxQSEksTkwscmVsYWZkZTAxLDE3MDAwMA0KMTk5OCxQSEksTkwsd2hpdGVtYTAyLDE3MDAwMA0KMTk5OCxQSEksTkwsd2luc3RkYTAxLDE3MDAwMA0KMTk5OCxQSVQsTkwsbWFydGlhbDAzLDI2MDAwMDANCjE5OTgsUElULE5MLHlvdW5na2UwMSwxNjAwMDAwDQoxOTk4LFBJVCxOTCxsaWViZWpvMDEsMTQ1MDAwMA0KMTk5OCxQSVQsTkwsd2FyZHR1MDEsODI1MDAwDQoxOTk4LFBJVCxOTCxrZW5kYWphMDEsNjAwMDAwDQoxOTk4LFBJVCxOTCxzdHJhbmRvMDEsNTc1MDAwDQoxOTk4LFBJVCxOTCxjb3Jkb2ZyMDEsNTAwMDAwDQoxOTk4LFBJVCxOTCxzY2htaWphMDEsNTAwMDAwDQoxOTk4LFBJVCxOTCxsb2FpemVzMDEsNDUwMDAwDQoxOTk4LFBJVCxOTCx3aWxsaW1pMDMsMzUwMDAwDQoxOTk4LFBJVCxOTCxjaHJpc2phMDEsMzIwMDAwDQoxOTk4LFBJVCxOTCx0YWJha2plMDEsMzAwMDAwDQoxOTk4LFBJVCxOTCx2YW5wb3RvMDEsMzAwMDAwDQoxOTk4LFBJVCxOTCx3b21hY3RvMDEsMjkwMDAwDQoxOTk4LFBJVCxOTCxsb2lzZXJpMDEsMjc1MDAwDQoxOTk4LFBJVCxOTCxvc2lra2UwMSwyNzUwMDANCjE5OTgsUElULE5MLHdpbGtpbWEwMSwyNzUwMDANCjE5OTgsUElULE5MLGFsbGVuamUwMSwyNjAwMDANCjE5OTgsUElULE5MLHNtaXRobWEwMywyNjAwMDANCjE5OTgsUElULE5MLGd1aWxsam8wMSwyNTUwMDANCjE5OTgsUElULE5MLHJpbmNvcmkwMSwyNDUwMDANCjE5OTgsUElULE5MLG1jY3VyamUwMSwyMDUwMDANCjE5OTgsUElULE5MLHBldGVyY2gwMSwyMDUwMDANCjE5OTgsUElULE5MLHBvbGNva2UwMSwyMDAwMDANCjE5OTgsUElULE5MLGdhcmNpZnIwMSwxOTAwMDANCjE5OTgsUElULE5MLG1hcnRpbWEwMiwxOTAwMDANCjE5OTgsUElULE5MLGRlc3NlZWwwMSwxODAwMDANCjE5OTgsUElULE5MLHNpbHZham8wMSwxODAwMDANCjE5OTgsUElULE5MLGJyb3duYWQwMSwxNzgwMDANCjE5OTgsUElULE5MLGNvbGxpbG8wMSwxNzYwMDANCjE5OTgsUElULE5MLHdhbGxhamUwMSwxNzYwMDANCjE5OTgsUElULE5MLGRhdmlza2EwMSwxNzAwMDANCjE5OTgsUElULE5MLGxhd3Jlc2UwMSwxNzAwMDANCjE5OTgsUElULE5MLG1hcnRpamEwMiwxNzAwMDANCjE5OTgsUElULE5MLHJhbWlyYXIwMSwxNzAwMDANCjE5OTgsU0ROLE5MLHZhdWdoZ3IwMSw1Mjc1MDAwDQoxOTk4LFNETixOTCxicm93bmtlMDEsNDkzNTAwMA0KMTk5OCxTRE4sTkwsYXNoYnlhbjAxLDQxMjUwMDANCjE5OTgsU0ROLE5MLGd3eW5udG8wMSw0MDUwMDAwDQoxOTk4LFNETixOTCxqb3luZXdhMDEsMzc1MDAwMA0KMTk5OCxTRE4sTkwsY2FtaW5rZTAxLDM1MDAwMDANCjE5OTgsU0ROLE5MLGZpbmxlc3QwMSwzNDAwMDAwDQoxOTk4LFNETixOTCxoYW1pbGpvMDIsMzI1MDAwMA0KMTk5OCxTRE4sTkwsaG9mZm10cjAxLDI5MjUwMDANCjE5OTgsU0ROLE5MLGhpdGNoc3QwMSwyMjUwMDAwDQoxOTk4LFNETixOTCxnb21lemNoMDIsMTE1MDAwMA0KMTk5OCxTRE4sTkwsdmVyYXNxdTAxLDExMDAwMDANCjE5OTgsU0ROLE5MLHNtaXRocGUwMiw5NzUwMDANCjE5OTgsU0ROLE5MLG1pY2VsZGEwMSw3NTAwMDANCjE5OTgsU0ROLE5MLG15ZXJzZ3IwMSw3NTAwMDANCjE5OTgsU0ROLE5MLGhlcm5hY2EwMSw3MDAwMDANCjE5OTgsU0ROLE5MLHZvc2JlZWQwMSw1NzUwMDANCjE5OTgsU0ROLE5MLGxhbmdzbWEwMSw1MDAwMDANCjE5OTgsU0ROLE5MLGNpYW5mYXIwMSw0NzUwMDANCjE5OTgsU0ROLE5MLG1vdXRvamEwMSw0MzUwMDANCjE5OTgsU0ROLE5MLHdlbmdlZG8wMSwyNDAwMDANCjE5OTgsU0ROLE5MLHN3ZWVubWEwMSwyMzUwMDANCjE5OTgsU0ROLE5MLGJvZWhyYnIwMSwyMzAwMDANCjE5OTgsU0ROLE5MLHdhbGxkbzAxLDIxNTAwMA0KMTk5OCxTRE4sTkwscml2ZXJydTAxLDE4MjUwMA0KMTk5OCxTRE4sTkwsYXJpYXNnZTAxLDE4MTAwMA0KMTk5OCxTRE4sTkwsZ2lvdmFlZDAxLDE4MTAwMA0KMTk5OCxTRE4sTkwsc2hlZXRhbjAxLDE4MTAwMA0KMTk5OCxTRE4sTkwsa3Jvb25tYTAxLDE3NjAwMA0KMTk5OCxTRE4sTkwsc3BlbmNzdDAyLDE3MDAwMA0KMTk5OCxTRk4sTkwsYm9uZHNiYTAxLDg5MTY2NjcNCjE5OTgsU0ZOLE5MLG5lbnJvMDEsNDA5MDAwMA0KMTk5OCxTRk4sTkwsaGVyc2hvcjAxLDM3MjAwMDANCjE5OTgsU0ZOLE5MLGtlbnRqZTAxLDM0MDAwMDANCjE5OTgsU0ZOLE5MLGhhbWlsZGEwMiwyNzUwMDAwDQoxOTk4LFNGTixOTCxzbm93anQwMSwyNzUwMDAwDQoxOTk4LFNGTixOTCxydWV0ZWtpMDEsMTgzNTAwMA0KMTk5OCxTRk4sTkwsaGF5ZXNjaDAxLDE4MDAwMDANCjE5OTgsU0ZOLE5MLGphdmllc3QwMSwxNzUwMDAwDQoxOTk4LFNGTixOTCxmZXJuYW9zMDEsMTIzMzMzMw0KMTk5OCxTRk4sTkwsdGF2YXJqdTAxLDExMDgzMzQNCjE5OTgsU0ZOLE5MLGdhcmRubWEwMSwxMTAwMDAwDQoxOTk4LFNGTixOTCxqb2huc2JyMDEsMTAyNTAwMA0KMTk5OCxTRk4sTkwscG9vbGVqaTAyLDEwMDAwMDANCjE5OTgsU0ZOLE5MLHJlZWRzdDAxLDEwMDAwMDANCjE5OTgsU0ZOLE5MLGRhcndpZGEwMSw3MTAwMDANCjE5OTgsU0ZOLE5MLHJvZHJpcmkwMiw3MTAwMDANCjE5OTgsU0ZOLE5MLG1heW5lYnIwMSw3MDAwMDANCjE5OTgsU0ZOLE5MLGVzdGVzc2gwMSw2NTAwMDANCjE5OTgsU0ZOLE5MLHNhbmNocmUwMSw1MDAwMDANCjE5OTgsU0ZOLE5MLG11ZWxsYmkwMiwzMDAwMDANCjE5OTgsU0ZOLE5MLGF1cmlscmkwMSwyNjUwMDANCjE5OTgsU0ZOLE5MLGJlbmFybWEwMSwyNTAwMDANCjE5OTgsU0ZOLE5MLGpvaG5zam8wNywyMzAwMDANCjE5OTgsU0ZOLE5MLG1vcm1hYWwwMSwyMjAwMDANCjE5OTgsU0ZOLE5MLHJvYWpvMDEsMTkyNTAwDQoxOTk4LFNGTixOTCxicm9ja2NoMDEsMTkwMDAwDQoxOTk4LFNGTixOTCxvcnRpenJ1MDEsMTcwMDAwDQoxOTk4LFNMTixOTCxtY2d3aW1hMDEsODkyODM1NA0KMTk5OCxTTE4sTkwsZ2FudHJvMDEsNTUwMDAwMA0KMTk5OCxTTE4sTkwsc3RvdHR0bzAxLDQ5MDAwMDANCjE5OTgsU0xOLE5MLGxhbmtmcmEwMSw0NjY2NjY3DQoxOTk4LFNMTixOTCxvc2JvcmRvMDEsMzc1MDAwMA0KMTk5OCxTTE4sTkwsam9yZGFicjAxLDM3MDAwMDANCjE5OTgsU0xOLE5MLGNsYXl0cm8wMSwzNTAwMDAwDQoxOTk4LFNMTixOTCxkZXNoaWRlMDEsMzAwMDAwMA0KMTk5OCxTTE4sTkwsYnJhbnRqZTAxLDI4MDAwMDANCjE5OTgsU0xOLE5MLHBhZ25vdG8wMSwyMTAwMDAwDQoxOTk4LFNMTixOTCxtYWJyeWpvMDEsMTQwMDAwMA0KMTk5OCxTTE4sTkwsbWNnZWV3aTAxLDE0MDAwMDANCjE5OTgsU0xOLE5MLG1lcmNra2UwMSwxMzAwMDAwDQoxOTk4LFNMTixOTCxnYWV0dGdhMDEsMTAwMDAwMA0KMTk5OCxTTE4sTkwsaG93YXJkYTAyLDg1MDAwMA0KMTk5OCxTTE4sTkwsYm90dGVrZTAxLDgwMDAwMA0KMTk5OCxTTE4sTkwsYmVuZXNhbDAxLDU1MDAwMA0KMTk5OCxTTE4sTkwsbGFtcGt0bzAxLDUwMDAwMA0KMTk5OCxTTE4sTkwscGV0a29tYTAxLDQ3NTAwMA0KMTk5OCxTTE4sTkwscGFpbnRsYTAxLDQzMDAwMA0KMTk5OCxTTE4sTkwsa2VsbHlwYTAzLDMyNTAwMA0KMTk5OCxTTE4sTkwsaHVudGVicjAxLDMwMDAwMA0KMTk5OCxTTE4sTkwsbW9ycmltYTAxLDMwMDAwMA0KMTk5OCxTTE4sTkwsZnJhc2NqbzAxLDI0MDAwMA0KMTk5OCxTTE4sTkwsYWNldmVqdTAxLDIwMDAwMA0KMTk5OCxTTE4sTkwsYmVsbGRhMDEsMjAwMDAwDQoxOTk4LFNMTixOTCxldmVyc2JyMDEsMTg1MDAwDQoxOTk4LFNMTixOTCxheWJhcm1hMDEsMTc1MDAwDQoxOTk4LFNMTixOTCxidXNieW1pMDEsMTcyNTAwDQoxOTk4LFNMTixOTCxtYXJyZWVsMDEsMTcyNTAwDQoxOTk4LFNMTixOTCxvcmRhemx1MDEsMTcyNTAwDQoxOTk4LFNMTixOTCxsb29wZWJyMDEsMTcwMDAwDQoxOTk4LFNMTixOTCxwb2xhbnBsMDEsMTcwMDAwDQoxOTk4LFNMTixOTCxwb2xpdGNsMDEsMTcwMDAwDQoxOTk4LFNMTixOTCx0YXRpc2ZlMDEsMTcwMDAwDQoxOTk5LEFOQSxBTCx2YXVnaG1vMDEsNzE2NjY2Ng0KMTk5OSxBTkEsQUwsZmlubGVjaDAxLDU4MDAwMDANCjE5OTksQU5BLEFMLGhpbGxrZTAxLDU1MDAwMDANCjE5OTksQU5BLEFMLHNhbG1vdGkwMSw1NTAwMDAwDQoxOTk5LEFOQSxBTCxiZWxjaHRpMDEsNDY1MDAwMA0KMTk5OSxBTkEsQUwsZWRtb25qaTAxLDM1NTAwMDANCjE5OTksQU5BLEFMLGRpc2FyZ2EwMSwzMTI1MDAwDQoxOTk5LEFOQSxBTCxhbmRlcmdhMDEsMjIwMDAwMA0KMTk5OSxBTkEsQUwscGVyY2l0cjAxLDE5NzUwMDANCjE5OTksQU5BLEFMLG9saXZhb20wMSwxODI1MDAwDQoxOTk5LEFOQSxBTCx2ZWxhcnJhMDEsMTYwMDAwMA0KMTk5OSxBTkEsQUwsc3BhcmtzdDAxLDEzODc1MDANCjE5OTksQU5BLEFMLGhhc2Vnc2gwMSw5MDAwMDANCjE5OTksQU5BLEFMLHBldGtvbWEwMSw4NTAwMDANCjE5OTksQU5BLEFMLHdhbGJlbWEwMSw4MjUwMDANCjE5OTksQU5BLEFMLGphbWVzbWkwMSw4MDUwMDANCjE5OTksQU5BLEFMLGVyc3RhZGEwMSw4MDAwMDANCjE5OTksQU5BLEFMLG1hZ25hbWkwMSw3NzUwMDANCjE5OTksQU5BLEFMLG9icmllY2gwMSw3MDAwMDANCjE5OTksQU5BLEFMLGh1c29uamUwMSw1MDAwMDANCjE5OTksQU5BLEFMLG1jZG93amEwMSw1MDAwMDANCjE5OTksQU5BLEFMLGRpY2tzamEwMSwzNzUwMDANCjE5OTksQU5BLEFMLGhhcnJpcGUwMSwzMDUwMDANCjE5OTksQU5BLEFMLGhvbHR6bWkwMSwyOTAwMDANCjE5OTksQU5BLEFMLHBhbG1lb3IwMSwyNzYwMDANCjE5OTksQU5BLEFMLHNoZWV0YW4wMSwyNzUwMDANCjE5OTksQU5BLEFMLGx1a2VtYTAxLDI1MDAwMA0KMTk5OSxBTkEsQUwsZ3JlZW50bzAyLDIyNTAwMA0KMTk5OSxBTkEsQUwsd2FzaGJqYTAxLDIxNzUwMA0KMTk5OSxBTkEsQUwsYmF1Z2hqdTAxLDIxNTAwMA0KMTk5OSxBTkEsQUwsd2lsbGlyZTAyLDIxMDAwMA0KMTk5OSxBTkEsQUwsbGV2aW5hbDAxLDIwODAwMA0KMTk5OSxBTkEsQUwsZ2xhdXN0cjAxLDIwNzUwMA0KMTk5OSxBTkEsQUwsY29sYW5taTAxLDIwMDAwMA0KMTk5OSxBTkEsQUwsZHVycml0cjAxLDIwMDAwMA0KMTk5OSxBTkEsQUwsbW9saW5iZTAxLDIwMDAwMA0KMTk5OSxBTkEsQUwsb3J0aXpyYTAxLDIwMDAwMA0KMTk5OSxBTkEsQUwscG90ZWxvMDEsMjAwMDAwDQoxOTk5LEFOQSxBTCxzY2hvZXNjMDEsMjAwMDAwDQoxOTk5LEFOQSxBTCx1bnJvZXRpMDEsMjAwMDAwDQoxOTk5LEJBTCxBTCxiZWxsZWFsMDEsMTE5NDk3OTQNCjE5OTksQkFMLEFMLG11c3NpbWkwMSw2NjIzMTQzDQoxOTk5LEJBTCxBTCxyaXBrZWNhMDEsNjUwMDAwMA0KMTk5OSxCQUwsQUwsZXJpY2tzYzAxLDYwNzk5MzENCjE5OTksQkFMLEFMLGFuZGVyYnIwMSw1Njc0ODk3DQoxOTk5LEJBTCxBTCxndXptYWp1MDEsNTI1MDAwMA0KMTk5OSxCQUwsQUwsY2xhcmt3aTAyLDQ5MjA4NDANCjE5OTksQkFMLEFMLGRlc2hpZGUwMSwzNzE5NzU4DQoxOTk5LEJBTCxBTCxzdXJob2JqMDEsMzcwNTUxNg0KMTk5OSxCQUwsQUwsam9obnNjaDA0LDM2MDAwMDANCjE5OTksQkFMLEFMLGthbWllc2MwMSwzMzUwMDAwDQoxOTk5LEJBTCxBTCxib3JkaW1pMDEsMzA4MzMzNA0KMTk5OSxCQUwsQUwsdGltbGltaTAxLDIyNTAwMDANCjE5OTksQkFMLEFMLHJob2RlYXIwMSwyMjAwMDAwDQoxOTk5LEJBTCxBTCxjb25pbmplMDEsMTk2MDAwMA0KMTk5OSxCQUwsQUwsYmFpbmVoYTAxLDE3MzAwMDANCjE5OTksQkFMLEFMLHNsb2N1aGUwMSwxMTAwMDAwDQoxOTk5LEJBTCxBTCxib25lc3JpMDEsODAwMDAwDQoxOTk5LEJBTCxBTCxvcm9zY2plMDEsODAwMDAwDQoxOTk5LEJBTCxBTCx3ZWJzdGxlMDEsNzYwMDAwDQoxOTk5LEJBTCxBTCxmZXR0ZW1pMDEsNzUwMDAwDQoxOTk5LEJBTCxBTCxyZWJvdWplMDEsNTI1MDAwDQoxOTk5LEJBTCxBTCxhbWFyYXJpMDEsNTAwMDAwDQoxOTk5LEJBTCxBTCxsaW50b2RvMDEsNDAwMDAwDQoxOTk5LEJBTCxBTCxqb2huc2RvMDQsMzAwMDAwDQoxOTk5LEJBTCxBTCxwb25zb3NpMDEsMjUwMDAwDQoxOTk5LEJBTCxBTCxqb2huc2phMDIsMjIwMDAwDQoxOTk5LEJBTCxBTCxmaWdnYW1pMDEsMjAzNjUwDQoxOTk5LEJBTCxBTCxjb3JzaWppMDEsMjAwMDAwDQoxOTk5LEJBTCxBTCxnYXJjaWplMDEsMjAwMDAwDQoxOTk5LEJBTCxBTCxraW5nc2dlMDEsMjAwMDAwDQoxOTk5LEJBTCxBTCxtYXlkZTAxLDIwMDAwMA0KMTk5OSxCQUwsQUwsbWlub3JyeTAxLDIwMDAwMA0KMTk5OSxCQUwsQUwsb3RhbmV3aTAxLDIwMDAwMA0KMTk5OSxCQUwsQUwscnlhbmJqMDEsMjAwMDAwDQoxOTk5LEJPUyxBTCxtYXJ0aXBlMDIsMTExMDAwMDANCjE5OTksQk9TLEFMLHZhbGVuam8wMiw2MzUwMDAwDQoxOTk5LEJPUyxBTCxvZmZlcmpvMDEsNDk1MDAwMA0KMTk5OSxCT1MsQUwsd2FrZWZ0aTAxLDQwMDAwMDANCjE5OTksQk9TLEFMLGdvcmRvdG8wMSwzNzUwMDAwDQoxOTk5LEJPUyxBTCxvbGVhcnRyMDEsMzUwMDAwMA0KMTk5OSxCT1MsQUwsc2FiZXJicjAxLDM1MDAwMDANCjE5OTksQk9TLEFMLHN0YW5sbWkwMiwzNTAwMDAwDQoxOTk5LEJPUyxBTCxqZWZmZXJlMDEsMzQwMDAwMA0KMTk5OSxCT1MsQUwscG9ydHVtYTAxLDI3MDAwMDANCjE5OTksQk9TLEFMLGZyeWVqZTAxLDI0MDAwMDANCjE5OTksQk9TLEFMLGxld2lzZGEwMSwyMTAwMDAwDQoxOTk5LEJPUyxBTCxyYXBwcGEwMSwxNjUwMDAwDQoxOTk5LEJPUyxBTCxndXRocm1hMDEsMTYwMDAwMA0KMTk5OSxCT1MsQUwsbWFydGlyYTAyLDE1MDAwMDANCjE5OTksQk9TLEFMLGdhcmNpbm8wMSwxNDAwMDAwDQoxOTk5LEJPUyxBTCxidWZvcmRhMDEsMTEwMDAwMA0KMTk5OSxCT1MsQUwsY29ybWlyaDAxLDkwMDAwMA0KMTk5OSxCT1MsQUwsY29yc2lqaTAxLDc1MDAwMA0KMTk5OSxCT1MsQUwsZ3Jvc3NraTAxLDUwMDAwMA0KMTk5OSxCT1MsQUwsd2FzZGlqbzAxLDUwMDAwMA0KMTk5OSxCT1MsQUwsaGF0dGVzYzAxLDM1MDAwMA0KMTk5OSxCT1MsQUwsZ2FyY2VyaTAxLDMwMDAwMA0KMTk5OSxCT1MsQUwsbG93ZWRlMDEsMjQ1MDAwDQoxOTk5LEJPUyxBTCx2YXJpdGphMDEsMjM3NTAwDQoxOTk5LEJPUyxBTCxkYXViYWJyMDEsMjE1MDAwDQoxOTk5LEJPUyxBTCxoaWxsZXNoMDIsMjAwMDAwDQoxOTk5LEJPUyxBTCxtZXJsb2xvMDEsMjAwMDAwDQoxOTk5LEJPUyxBTCxuaXhvbnRyMDEsMjAwMDAwDQoxOTk5LEJPUyxBTCxzYWRsZWRvMDEsMjAwMDAwDQoxOTk5LEJPUyxBTCx2ZXJhc3dpMDEsMjAwMDAwDQoxOTk5LENIQSxBTCx0aG9tYWZyMDQsNzAwMDAwMA0KMTk5OSxDSEEsQUwsbmF2YXJqYTAxLDUwMDAwMDANCjE5OTksQ0hBLEFMLGR1cmhhcmEwMSwzNDAwMDAwDQoxOTk5LENIQSxBTCxiYWxkd2phMDEsMTkwMDAwMA0KMTk5OSxDSEEsQUwsc2ltYXNiaTAxLDExNTAwMDANCjE5OTksQ0hBLEFMLGhhbGxkYTAxLDg1MDAwMA0KMTk5OSxDSEEsQUwsc2lyb3RtaTAxLDUwMDAwMA0KMTk5OSxDSEEsQUwsamFja3NkYTAzLDQyNTAwMA0KMTk5OSxDSEEsQUwsb3Jkb25tYTAxLDMwNTAwMA0KMTk5OSxDSEEsQUwsY2FydXNtaTAxLDI3NTAwMA0KMTk5OSxDSEEsQUwsYWJib3RqZTAxLDI1NTAwMA0KMTk5OSxDSEEsQUwsZm91bGtrZTAxLDI1NTAwMA0KMTk5OSxDSEEsQUwsbm9ydG9ncjAxLDI1NTAwMA0KMTk5OSxDSEEsQUwsY2FzdGljYTAyLDI1MDAwMA0KMTk5OSxDSEEsQUwsZXlyZXNjMDEsMjQwMDAwDQoxOTk5LENIQSxBTCxob3dyeWJvMDEsMjM1MDAwDQoxOTk5LENIQSxBTCxmb3JkeWJyMDEsMjMwMDAwDQoxOTk5LENIQSxBTCxwYXJxdWppMDEsMjMwMDAwDQoxOTk5LENIQSxBTCxzbnlkZWpvMDIsMjMwMDAwDQoxOTk5LENIQSxBTCxrb25lcnBhMDEsMjE1MDAwDQoxOTk5LENIQSxBTCx3YXJkYnIwMSwyMTUwMDANCjE5OTksQ0hBLEFMLHdpbHNvY3IwMiwyMDUwMDANCjE5OTksQ0hBLEFMLGNocmlzbWMwMSwyMDAwMDANCjE5OTksQ0hBLEFMLGpvaG5zbWEwMiwyMDAwMDANCjE5OTksQ0hBLEFMLGxlZWNhMDEsMjAwMDAwDQoxOTk5LENIQSxBTCxsaWVmZWplMDEsMjAwMDAwDQoxOTk5LENIQSxBTCxsb3dlc2UwMSwyMDAwMDANCjE5OTksQ0hBLEFMLGx1bmRxZGEwMSwyMDAwMDANCjE5OTksQ0hBLEFMLHBlbmFqZTAxLDIwMDAwMA0KMTk5OSxDSEEsQUwscm9kcmlsaTAxLDIwMDAwMA0KMTk5OSxDSEEsQUwsc2ltbW9icjAxLDIwMDAwMA0KMTk5OSxDSEEsQUwsc2luZ2xjaDAxLDIwMDAwMA0KMTk5OSxDTEUsQUwsdGhvbWVqaTAxLDgyMjUwMDANCjE5OTksQ0xFLEFMLGxvZnRva2UwMSw3NTUwMDAwDQoxOTk5LENMRSxBTCxhbG9tYXJvMDEsNzA0OTk2Ng0KMTk5OSxDTEUsQUwsanVzdGlkYTAxLDcwMDAwMDANCjE5OTksQ0xFLEFMLG5hZ3ljaDAxLDYwMDAwMDANCjE5OTksQ0xFLEFMLGZyeW1hdHIwMSw1MjUwMDAwDQoxOTk5LENMRSxBTCxidXJiYWRhMDEsNDY2NjY2NA0KMTk5OSxDTEUsQUwscmFtaXJtYTAyLDQzNTAwMDANCjE5OTksQ0xFLEFMLHZpenF1b20wMSwzMDUwMDAwDQoxOTk5LENMRSxBTCxhbG9tYXNhMDIsMjgwMDAwMA0KMTk5OSxDTEUsQUwsZ29vZGVkdzAxLDI2Mzc1MDANCjE5OTksQ0xFLEFMLGphY2tzbWkwMiwyMTAwMDAwDQoxOTk5LENMRSxBTCxhc3NlbnBhMDEsMTUwNzAwMA0KMTk5OSxDTEUsQUwscmVlZHN0MDEsMTM2NjY2Ng0KMTk5OSxDTEUsQUwsc2h1ZXlwYTAxLDExMTc2NjYNCjE5OTksQ0xFLEFMLHdyaWdoamEwMiw4MTI1MDANCjE5OTksQ0xFLEFMLHNwcmFkamUwMSw2ODc1MDANCjE5OTksQ0xFLEFMLGNvbG9uYmEwMSw2MjUwMDANCjE5OTksQ0xFLEFMLGhhbmV5Y2gwMSw1NTAwMDANCjE5OTksQ0xFLEFMLGJhZXJnY2EwMSw1MDAwMDANCjE5OTksQ0xFLEFMLGNvcmRld2kwMSw1MDAwMDANCjE5OTksQ0xFLEFMLGthcnNhc3QwMSw1MDAwMDANCjE5OTksQ0xFLEFMLHJpbmNvcmkwMSw0NTAwMDANCjE5OTksQ0xFLEFMLHdoaXRlbWEwMSw0NTAwMDANCjE5OTksQ0xFLEFMLGxldmlzamUwMSw0MDAwMDANCjE5OTksQ0xFLEFMLGxhbmdzbWEwMSwzNTAwMDANCjE5OTksQ0xFLEFMLG1hcnRpdG8wMiwyMjUwMDANCjE5OTksQ0xFLEFMLHNleHNvcmkwMSwyMTkwMDANCjE5OTksQ0xFLEFMLHdpbHNvZW4wMSwyMTQwMDANCjE5OTksQ0xFLEFMLGRpYXplaTAxLDIwOTAwMA0KMTk5OSxDTEUsQUwsY3J1emphMDEsMjA1MDAwDQoxOTk5LENMRSxBTCxyYW1pcmFsMDIsMjA1MDAwDQoxOTk5LENMRSxBTCxjYWJyZWpvMDIsMjAzMDAwDQoxOTk5LENMRSxBTCxyYWtlcmphMDEsMjAzMDAwDQoxOTk5LENMRSxBTCxkZXBhdXNlMDEsMjAwMDAwDQoxOTk5LENMRSxBTCxwb29sZWppMDIsMjAwMDAwDQoxOTk5LENMRSxBTCxyaXNrZWRhMDEsMjAwMDAwDQoxOTk5LENMRSxBTCxyb2JlcmRhMDcsMjAwMDAwDQoxOTk5LERFVCxBTCxwYWxtZWRlMDEsNTAwMDAwMA0KMTk5OSxERVQsQUwsaGlnZ2libzAyLDM4MjUwMDANCjE5OTksREVULEFMLGJsYWlyd2kwMSwzNzUwMDAwDQoxOTk5LERFVCxBTCxlYXNsZWRhMDEsMzM1MDAwMA0KMTk5OSxERVQsQUwsam9uZXN0bzAyLDI1MDAwMDANCjE5OTksREVULEFMLGNsYXJrdG8wMiwyMzYyNTAwDQoxOTk5LERFVCxBTCxhdXNtdWJyMDEsMjIwMDAwMA0KMTk5OSxERVQsQUwsaHVudGVicjAyLDE3NTAwMDANCjE5OTksREVULEFMLGtpZGFtYTAxLDE2MDAwMDANCjE5OTksREVULEFMLGplZmZlZ3IwMSwxMzc1MDAwDQoxOTk5LERFVCxBTCxmbG9yaWJyMDEsMTMwMDAwMA0KMTk5OSxERVQsQUwsYnJvY2FkbzAxLDkwMDAwMA0KMTk5OSxERVQsQUwsaGFzZWxiaTAxLDY1MDAwMA0KMTk5OSxERVQsQUwsdGhvbXBqdTAyLDY1MDAwMA0KMTk5OSxERVQsQUwsbW9laGxicjAxLDQ2NjY2Ng0KMTk5OSxERVQsQUwsY3J1emRlMDEsNDMwMDAwDQoxOTk5LERFVCxBTCxsaXJhZmUwMSwzODAwMDANCjE5OTksREVULEFMLG5pdGtvY2owMSwzMDAwMDANCjE5OTksREVULEFMLHBvbG9ubHUwMSwzMDAwMDANCjE5OTksREVULEFMLHJ1bnlhc2UwMSwyODAwMDANCjE5OTksREVULEFMLGdhcmNpa2EwMSwyNzAwMDANCjE5OTksREVULEFMLGFuZGVybWEwMSwyNDAwMDANCjE5OTksREVULEFMLGJhcnRla2kwMSwyNDAwMDANCjE5OTksREVULEFMLGNhc2FucmEwMSwyNDAwMDANCjE5OTksREVULEFMLGdyZWlzc2UwMSwyNDAwMDANCjE5OTksREVULEFMLGNhdGFsZnIwMSwyMzc1MDANCjE5OTksREVULEFMLGVuY2FyanUwMSwyMzMwMDANCjE5OTksREVULEFMLGNydXpuZTAxLDIxMDAwMA0KMTk5OSxERVQsQUwsd29vZGphMDIsMjEwMDAwDQoxOTk5LERFVCxBTCxib3Jrb2RhMDEsMjAwMDAwDQoxOTk5LERFVCxBTCxjb3JkZWZyMDEsMjAwMDAwDQoxOTk5LERFVCxBTCxmaWNrcm8wMSwyMDAwMDANCjE5OTksREVULEFMLGthcGxlZ2EwMSwyMDAwMDANCjE5OTksREVULEFMLHdlYXZlamUwMSwyMDAwMDANCjE5OTksS0NBLEFMLGFwcGlla2UwMSw0ODAwMDAwDQoxOTk5LEtDQSxBTCxraW5namUwMSw0MDAwMDAwDQoxOTk5LEtDQSxBTCxwaWNoYWhpMDEsMjYyNTAwMA0KMTk5OSxLQ0EsQUwsbW9udGdqZTAxLDI1MDAwMDANCjE5OTksS0NBLEFMLGRhbW9uam8wMSwyMTAwMDAwDQoxOTk5LEtDQSxBTCxzYW5jaHJlMDEsMTIwMDAwMA0KMTk5OSxLQ0EsQUwscmFuZGFqbzAxLDkxMDAwMA0KMTk5OSxLQ0EsQUwsa3JldXRjaDAxLDg3NTAwMA0KMTk5OSxLQ0EsQUwsc2VydmlzYzAxLDc0NTAwMA0KMTk5OSxLQ0EsQUwsbW9ybWFhbDAxLDM2NTAwMA0KMTk5OSxLQ0EsQUwsc3BlaHJ0aTAxLDMzMDAwMA0KMTk5OSxLQ0EsQUwscm9zYWRqbzAxLDMwMDAwMA0KMTk5OSxLQ0EsQUwsd2hpc2VtYTAxLDI3MDAwMA0KMTk5OSxLQ0EsQUwsc3dlZW5taTAxLDI2NTAwMA0KMTk5OSxLQ0EsQUwsZHllamUwMSwyNjAwMDANCjE5OTksS0NBLEFMLHdlbmdlZG8wMSwyNjAwMDANCjE5OTksS0NBLEFMLHBpdHRzamkwMSwyNTUwMDANCjE5OTksS0NBLEFMLHN1dHRvbGEwMSwyNDAwMDANCjE5OTksS0NBLEFMLHN1cHBhamUwMSwyMzUwMDANCjE5OTksS0NBLEFMLHBvc2VzYzAxLDIyNTAwMA0KMTk5OSxLQ0EsQUwsd2FsbGFkZTAxLDIxNjAwMA0KMTk5OSxLQ0EsQUwsaG9sYmVyYTAxLDIxNTAwMA0KMTk5OSxLQ0EsQUwsYmFyYmVicjAyLDIxMDAwMA0KMTk5OSxLQ0EsQUwsd2l0YXNqYTAxLDIxMDAwMA0KMTk5OSxLQ0EsQUwsc3RlaW5ibDAxLDIwNzUwMA0KMTk5OSxLQ0EsQUwsaGFuc2VqZTAxLDIwNDAwMA0KMTk5OSxLQ0EsQUwscmlnYnlicjAxLDIwMTUwMA0KMTk5OSxLQ0EsQUwsc2FudGlqbzAzLDIwMTAwMA0KMTk5OSxLQ0EsQUwsYmVsdHJjYTAxLDIwMDAwMA0KMTk5OSxLQ0EsQUwsYnlyZGF0aTAxLDIwMDAwMA0KMTk5OSxLQ0EsQUwsZmVibGVjYTAxLDIwMDAwMA0KMTk5OSxLQ0EsQUwsZnVzc2VjaDAxLDIwMDAwMA0KMTk5OSxLQ0EsQUwsZ2lhbWJqZTAxLDIwMDAwMA0KMTk5OSxLQ0EsQUwsbGVpdXNzYzAxLDIwMDAwMA0KMTk5OSxLQ0EsQUwsbW9yZW5vcjAxLDIwMDAwMA0KMTk5OSxLQ0EsQUwscmVpY2hkYTAxLDIwMDAwMA0KMTk5OSxLQ0EsQUwsc2NhcnNzdDAxLDIwMDAwMA0KMTk5OSxNSU4sQUwsYWd1aWxyaTAxLDQzMDAwMDANCjE5OTksTUlOLEFMLGNvcmRvbWEwMSwzMDAwMDAwDQoxOTk5LE1JTixBTCxyYWRrZWJyMDEsMjIyNTAwMA0KMTk5OSxNSU4sQUwsbGF3dG9tYTAyLDE3MDAwMDANCjE5OTksTUlOLEFMLHRyb21ibWkwMSwxNTAwMDAwDQoxOTk5LE1JTixBTCxjb29tZXJvMDEsMTE1MDAwMA0KMTk5OSxNSU4sQUwsc3RlaW50ZTAxLDEwMDAwMDANCjE5OTksTUlOLEFMLGd1YXJkZWQwMSw4NTAwMDANCjE5OTksTUlOLEFMLGNhcnJhaGUwMSw4MDAwMDANCjE5OTksTUlOLEFMLGdhdGVzYnIwMSw0MjUwMDANCjE5OTksTUlOLEFMLHdlbGxzYm8wMSwzNTAwMDANCjE5OTksTUlOLEFMLGhvY2tpZGUwMSwzMjUwMDANCjE5OTksTUlOLEFMLGhhd2tpbGEwMSwzMDAwMDANCjE5OTksTUlOLEFMLHdhbGtldG8wNCwyNzc1MDANCjE5OTksTUlOLEFMLG1pbHRvZXIwMSwyNDAwMDANCjE5OTksTUlOLEFMLHZhbGVuamEwMSwyMDc1MDANCjE5OTksTUlOLEFMLG1pbGxldHIwMSwyMDUwMDANCjE5OTksTUlOLEFMLGxhdGhhY2gwMSwyMDI1MDANCjE5OTksTUlOLEFMLGFsbGVuY2gwMSwyMDAwMDANCjE5OTksTUlOLEFMLGd1em1hY3IwMSwyMDAwMDANCjE5OTksTUlOLEFMLGh1bnRldG8wMSwyMDAwMDANCjE5OTksTUlOLEFMLGpvbmVzamEwNCwyMDAwMDANCjE5OTksTUlOLEFMLGtvc2tpY28wMSwyMDAwMDANCjE5OTksTUlOLEFMLGxpbmNvbWkwMSwyMDAwMDANCjE5OTksTUlOLEFMLG1heXNqbzAxLDIwMDAwMA0KMTk5OSxNSU4sQUwsbWllbnRkbzAxLDIwMDAwMA0KMTk5OSxNSU4sQUwscGVya2lkYTAxLDIwMDAwMA0KMTk5OSxNSU4sQUwscnlhbmphMDQsMjAwMDAwDQoxOTk5LE1JTixBTCxzYW1wc2JlMDEsMjAwMDAwDQoxOTk5LE5ZQSxBTCx3aWxsaWJlMDIsOTg1NzE0Mw0KMTk5OSxOWUEsQUwsY29uZWRhMDEsOTUwMDAwMA0KMTk5OSxOWUEsQUwsY2xlbWVybzAyLDgyNTAwMDANCjE5OTksTllBLEFMLG9uZWlscGEwMSw2MjUwMDAwDQoxOTk5LE5ZQSxBTCxrbm9ibGNoMDEsNjAwMDAwMA0KMTk5OSxOWUEsQUwscGV0dGlhbjAxLDU5NTAwMDANCjE5OTksTllBLEFMLGJyb3Npc2MwMSw1MjUwMDAwDQoxOTk5LE5ZQSxBTCxqZXRlcmRlMDEsNTAwMDAwMA0KMTk5OSxOWUEsQUwsZGF2aXNjaDAxLDQzMzMzMzMNCjE5OTksTllBLEFMLG1hcnRpdGkwMiw0MzAwMDAwDQoxOTk5LE5ZQSxBTCxyaXZlcm1hMDEsNDI1MDAwMA0KMTk5OSxOWUEsQUwsZ2lyYXJqbzAxLDM0MDAwMDANCjE5OTksTllBLEFMLGlyYWJ1aGkwMSwzMTI1MDAwDQoxOTk5LE5ZQSxBTCxzdGFudG1pMDIsMjAxNjY2Nw0KMTk5OSxOWUEsQUwsY3VydGljaDAxLDIwMDAwMDANCjE5OTksTllBLEFMLGhlcm5hb3IwMSwxODUwMDAwDQoxOTk5LE5ZQSxBTCxuZWxzb2plMDEsMTgxNjY2Ng0KMTk5OSxOWUEsQUwsc29qb2x1MDEsODAwMDAwDQoxOTk5LE5ZQSxBTCxtZW5kb3JhMDEsMzc1MDAwDQoxOTk5LE5ZQSxBTCxncmltc2phMDEsMzUwMDAwDQoxOTk5LE5ZQSxBTCxwb3NhZGpvMDEsMzUwMDAwDQoxOTk5LE5ZQSxBTCxuYXVsdGRhMDEsMzAwMDAwDQoxOTk5LE5ZQSxBTCxzcGVuY3NoMDEsMjA0MDUwDQoxOTk5LE5ZQSxBTCxmaWdnYW1pMDEsMjAzNjUwDQoxOTk5LE5ZQSxBTCxsZWRlZXJpMDEsMjAyODUwDQoxOTk5LE5ZQSxBTCxiZWxsaWNsMDEsMjAwMDAwDQoxOTk5LE5ZQSxBTCxlaW5lcmRhMDEsMjAwMDAwDQoxOTk5LE5ZQSxBTCxqZXJ6ZW1pMDEsMjAwMDAwDQoxOTk5LE5ZQSxBTCx3YXRzb2FsMDEsMjAwMDAwDQoxOTk5LE9BSyxBTCxyb2dlcmtlMDEsNTAwMDAwMA0KMTk5OSxPQUssQUwsY2FuZGl0bzAxLDMwMDAwMDANCjE5OTksT0FLLEFMLHRheWxvYmkwNCwyNTAwMDAwDQoxOTk5LE9BSyxBTCxnaWFtYmphMDEsMjEwMzMzMw0KMTk5OSxPQUssQUwsc3RhaXJtYTAxLDE5NTAwMDANCjE5OTksT0FLLEFMLHdvcnJldGkwMSw5MDAwMDANCjE5OTksT0FLLEFMLGdyb29tYnUwMSw4NTAwMDANCjE5OTksT0FLLEFMLG1hdGhldGowMSw3NTAwMDANCjE5OTksT0FLLEFMLHBoaWxsdG8wMiw3MDAwMDANCjE5OTksT0FLLEFMLG1hY2ZhbWkwMSw2MDAwMDANCjE5OTksT0FLLEFMLHJhaW5ldGkwMSw2MDAwMDANCjE5OTksT0FLLEFMLGphaGFqbzAxLDUyNTAwMA0KMTk5OSxPQUssQUwsaXNyaW5qYTAxLDQ3NTAwMA0KMTk5OSxPQUssQUwsaGVyZWRnaTAxLDQ1MDAwMA0KMTk5OSxPQUssQUwsb3F1aXNtaTAxLDQ1MDAwMA0KMTk5OSxPQUssQUwsam9uZXNkbzAxLDQwMDAwMA0KMTk5OSxPQUssQUwsZ3JpZXZiZTAxLDMwMDAwMA0KMTk5OSxPQUssQUwsaGF5bmVqaTAxLDI4MDAwMA0KMTk5OSxPQUssQUwsc3BpZXpzYzAxLDI2MDAwMA0KMTk5OSxPQUssQUwsc2FlbnpvbDAxLDI0MDAwMA0KMTk5OSxPQUssQUwsaGluY2hhajAxLDIzMDAwMA0KMTk5OSxPQUssQUwsdGVqYWRtaTAxLDIzMDAwMA0KMTk5OSxPQUssQUwsbWNkb25qYTAyLDIyMjUwMA0KMTk5OSxPQUssQUwscHJpZXRhcjAxLDIxMDAwMA0KMTk5OSxPQUssQUwsY2hyaXNyeTAxLDIwMjUwMA0KMTk5OSxPQUssQUwscmlnYnlicjAxLDIwMTUwMA0KMTk5OSxPQUssQUwsY2hhdmVlcjAxLDIwMTAwMA0KMTk5OSxPQUssQUwsdmVsYW5qbzAxLDIwMTAwMA0KMTk5OSxPQUssQUwsaGVybmFyYTAyLDIwMDAwMA0KMTk5OSxPQUssQUwsaHVkc290aTAxLDIwMDAwMA0KMTk5OSxTRUEsQUwsZ3JpZmZrZTAyLDg3NjA1MzINCjE5OTksU0VBLEFMLGZhc3NlamUwMSw1MDE2NjY3DQoxOTk5LFNFQSxBTCxidWhuZWphMDEsNDgxNjgwNA0KMTk5OSxTRUEsQUwsd2lsc29kYTAxLDM2MjUwMDANCjE5OTksU0VBLEFMLG1hcnRpZWQwMSwzNTAwMDAwDQoxOTk5LFNFQSxBTCxyb2RyaWFsMDEsMzExMjUwMA0KMTk5OSxTRUEsQUwsbGVpdGVtYTAxLDMwMDAwMDANCjE5OTksU0VBLEFMLG1lc2FqbzAxLDI4NTAwMDANCjE5OTksU0VBLEFMLHNlZ3VpZGEwMSwyNTAwMDAwDQoxOTk5LFNFQSxBTCxkYXZpc3J1MDEsMjM1MDAwMA0KMTk5OSxTRUEsQUwsbW95ZXJqYTAxLDIzMDAwMDANCjE5OTksU0VBLEFMLGF5YWxhYm8wMSwxODAwMDAwDQoxOTk5LFNFQSxBTCxoZW5yeWJ1MDEsMTUwMDAwMA0KMTk5OSxTRUEsQUwsaHVza2VidTAxLDE1MDAwMDANCjE5OTksU0VBLEFMLG1hYnJ5am8wMSwxNDAwMDAwDQoxOTk5LFNFQSxBTCxiZWxsZGEwMSw3MDAwMDANCjE5OTksU0VBLEFMLGxhbXBrdG8wMSw2MjUwMDANCjE5OTksU0VBLEFMLG1pZXNrbWEwMSw1MDAwMDANCjE5OTksU0VBLEFMLHJvZHJpZnIwMiw0NTUwMDANCjE5OTksU0VBLEFMLGJvdXJucmEwMSw0MDAwMDANCjE5OTksU0VBLEFMLGNsb3Vka2UwMSwyNzUwMDANCjE5OTksU0VBLEFMLGFiYm90cGEwMSwyMzUwMDANCjE5OTksU0VBLEFMLGphY2tzcnkwMSwyMzAwMDANCjE5OTksU0VBLEFMLHBhbmlham8wMSwyMzAwMDANCjE5OTksU0VBLEFMLGliYW5lcmEwMSwyMjAwMDANCjE5OTksU0VBLEFMLHN1enVrbWEwMSwyMTIwMDANCjE5OTksU0VBLEFMLGdpcHNvY2gwMSwyMTAwMDANCjE5OTksU0VBLEFMLHdpbGxpdG8wMiwyMDE1MDANCjE5OTksU0VBLEFMLGRhdmV5dG8wMSwyMDAwMDANCjE5OTksU0VBLEFMLGdhcmNpZnIwMiwyMDAwMDANCjE5OTksU0VBLEFMLGd1aWxsY2EwMSwyMDAwMDANCjE5OTksU0VBLEFMLGhhbGFtam8wMSwyMDAwMDANCjE5OTksU0VBLEFMLGhpbmNoYnIwMSwyMDAwMDANCjE5OTksU0VBLEFMLG1lY2hlZ2kwMSwyMDAwMDANCjE5OTksU0VBLEFMLHJhbXNhcm8wMSwyMDAwMDANCjE5OTksU0VBLEFMLHdlYXZlZXIwMSwyMDAwMDANCjE5OTksVEJBLEFMLGhlcm5hcm8wMSw2MTgwMDAwDQoxOTk5LFRCQSxBTCxtY2dyaWZyMDEsNTI1MDAwMA0KMTk5OSxUQkEsQUwsYWx2YXJ3aTAxLDQ1MDAwMDANCjE5OTksVEJBLEFMLGNhbnNlam8wMSwzMzI1MDAwDQoxOTk5LFRCQSxBTCxzb3JyZXBhMDEsMzAwMDAwMA0KMTk5OSxUQkEsQUwsc3RvY2trZTAxLDI0MDAwMDANCjE5OTksVEJBLEFMLG1hcnRpZGEwMSwyMDAwMDAwDQoxOTk5LFRCQSxBTCxtY2NyYXF1MDEsMTg1MDAwMA0KMTk5OSxUQkEsQUwsZmxhaGVqbzAxLDEyODAwMDANCjE5OTksVEJBLEFMLHdpdHRibzAxLDExMDAwMDANCjE5OTksVEJBLEFMLGJvZ2dzd2EwMSw3NTAwMDANCjE5OTksVEJBLEFMLGxvcGV6YWwwMiw2MzAwMDANCjE5OTksVEJBLEFMLGFsZHJlc2MwMSw1NDUwMDANCjE5OTksVEJBLEFMLGNoYXJsbm8wMSw1MDAwMDANCjE5OTksVEJBLEFMLGVpbGFuZGEwMSwyODAwMDANCjE5OTksVEJBLEFMLHNhdW5kdG8wMSwyNzc1MDANCjE5OTksVEJBLEFMLHNhbnRhanUwMSwyNzI1MDANCjE5OTksVEJBLEFMLGRpZmVsbWkwMSwyNjc1MDANCjE5OTksVEJBLEFMLG1lY2lyamkwMSwyNjc1MDANCjE5OTksVEJBLEFMLGdyYWZmdG8wMSwyNjI1MDANCjE5OTksVEJBLEFMLHdoaXRlcmkwMSwyNTUwMDANCjE5OTksVEJBLEFMLGFycm9qcm8wMSwyNTAwMDANCjE5OTksVEJBLEFMLGNhaXJvbWkwMSwyMzUwMDANCjE5OTksVEJBLEFMLHNtaXRoYm8wNiwyMzUwMDANCjE5OTksVEJBLEFMLHRyYW1tYnUwMSwyMzAwMDANCjE5OTksVEJBLEFMLGxlZGVzYWEwMSwyMjc1MDANCjE5OTksVEJBLEFMLHlhbmVzMDEsMjI1MDAwDQoxOTk5LFRCQSxBTCxidXRsZXJpMDEsMjE1MDAwDQoxOTk5LFRCQSxBTCxkdXZhbG1pMDEsMjE1MDAwDQoxOTk5LFRCQSxBTCxnb3JlY3JpMDEsMjEwMDAwDQoxOTk5LFRCQSxBTCxsaWRsZWNvMDEsMjEwMDAwDQoxOTk5LFRCQSxBTCxwZXJyeWhlMDEsMjEwMDAwDQoxOTk5LFRCQSxBTCxjbHlidWRhMDEsMjA1MDAwDQoxOTk5LFRCQSxBTCxsb3dlcnRlMDEsMjA1MDAwDQoxOTk5LFRCQSxBTCx3aW5ucmEwMSwyMDUwMDANCjE5OTksVEJBLEFMLGxhbWJkYTAxLDIwMDAwMA0KMTk5OSxUQkEsQUwsbmV3bWFhbDAyLDIwMDAwMA0KMTk5OSxUQkEsQUwscnVwZXJ5MDEsMjAwMDAwDQoxOTk5LFRFWCxBTCxyb2RyaWl2MDEsODk1MDAwMA0KMTk5OSxURVgsQUwscGFsbWVyYTAxLDg4NDk5MzENCjE5OTksVEVYLEFMLGdvbnphanUwMyw4NTAwMDAwDQoxOTk5LFRFWCxBTCx3ZXR0ZWpvMDEsNjM1MDAwMA0KMTk5OSxURVgsQUwsc2VsZWFhMDEsNTUyNTAwMA0KMTk5OSxURVgsQUwsY2xheXRybzAxLDQ1MDAwMDANCjE5OTksVEVYLEFMLGJ1cmtlam8wMyw0MDAwMDAwDQoxOTk5LFRFWCxBTCxjbGFya21hMDEsNDAwMDAwMA0KMTk5OSxURVgsQUwsZ3JlZXJydTAxLDMzMDAwMDANCjE5OTksVEVYLEFMLGdvb2R3dG8wMSwzMjI1MDAwDQoxOTk5LFRFWCxBTCx6ZWlsZXRvMDEsMzIwMDAwMA0KMTk5OSxURVgsQUwsbWNsZW1tYTAxLDI0MDAwMDANCjE5OTksVEVYLEFMLGhlbGxpcmkwMSwyMjUwMDAwDQoxOTk5LFRFWCxBTCxrZWxseXJvMDEsMjIyNTAwMA0KMTk5OSxURVgsQUwsc3RldmVsZTAxLDIxMDAwMDANCjE5OTksVEVYLEFMLGxvYWl6ZXMwMSwxNDc1MDAwDQoxOTk5LFRFWCxBTCxtb3JnYW1pMDEsOTAwMDAwDQoxOTk5LFRFWCxBTCxhbGljZWx1MDEsODI1MDAwDQoxOTk5LFRFWCxBTCxjcmFidHRpMDEsNjcwMDAwDQoxOTk5LFRFWCxBTCxzaW1tc21pMDEsNjI1MDAwDQoxOTk5LFRFWCxBTCxndW5kZWVyMDEsNDUwMDAwDQoxOTk5LFRFWCxBTCxtdW5vem1pMDEsNDUwMDAwDQoxOTk5LFRFWCxBTCx6YXVuZ3IwMSw0NTAwMDANCjE5OTksVEVYLEFMLHBhdHRlZGEwNCwyOTAwMDANCjE5OTksVEVYLEFMLGdyZWVuc2MwMSwyMDAwMDANCjE5OTksVEVYLEFMLGtvbGJkYTAxLDIwMDAwMA0KMTk5OSxURVgsQUwsbWF0ZW9ydTAxLDIwMDAwMA0KMTk5OSxURVgsQUwsc2hhdmVqbzAxLDIwMDAwMA0KMTk5OSxURVgsQUwsdmVuYWZtaTAxLDIwMDAwMA0KMTk5OSxURVgsQUwsemltbWVqZTAyLDIwMDAwMA0KMTk5OSxUT1IsQUwsaGVudGdwYTAxLDg2MDAwMDANCjE5OTksVE9SLEFMLGRlbGdhY2EwMSw1MDc1MDAwDQoxOTk5LFRPUixBTCx3ZWxsc2RhMDEsNDgxNjY2Nw0KMTk5OSxUT1IsQUwsaGFtaWxqbzAyLDQyNTAwMDANCjE5OTksVE9SLEFMLGdyZWVuc2gwMSwzMTI1MDAwDQoxOTk5LFRPUixBTCxmbGV0Y2RhMDEsMjYyNTAwMA0KMTk5OSxUT1IsQUwsZ29uemFhbDAxLDIyNzUwMDANCjE5OTksVE9SLEFMLGZlcm5hdG8wMSwyMjUwMDAwDQoxOTk5LFRPUixBTCxob2xsaWRhMDEsMTkwMDAwMA0KMTk5OSxUT1IsQUwscGxlc2FkYTAxLDE1MDAwMDANCjE5OTksVE9SLEFMLGxsb3lkZ3IwMSwxMDI1MDAwDQoxOTk5LFRPUixBTCxncmVlbndpMDEsMTAwMDAwMA0KMTk5OSxUT1IsQUwsbWF0aGVtaTAxLDYwMDAwMA0KMTk5OSxUT1IsQUwscmlzbGViaTAxLDU3NTAwMA0KMTk5OSxUT1IsQUwsZ3JlYmVjcjAxLDU1MDAwMA0KMTk5OSxUT1IsQUwsYmVycm9nZTAxLDUwMDAwMA0KMTk5OSxUT1IsQUwscXVhbnRwYTAxLDUwMDAwMA0KMTk5OSxUT1IsQUwsY2FycGVjaDAxLDQ4MzMzMw0KMTk5OSxUT1IsQUwsc3Rld2FzaDAxLDQzMzMzMw0KMTk5OSxUT1IsQUwsY3J1empvMDIsNDAwMDAwDQoxOTk5LFRPUixBTCxwZXJzb3JvMDEsMzc5MDAwDQoxOTk5LFRPUixBTCxlc2NvYmtlMDEsMzUwMDAwDQoxOTk5LFRPUixBTCxidXRsZXJvMDEsMjc1MDAwDQoxOTk5LFRPUixBTCxib3JkZXBhMDEsMjcwMDAwDQoxOTk5LFRPUixBTCxicnVtZmphMDEsMjQwMDAwDQoxOTk5LFRPUixBTCxidXNoaG8wMSwyMjcwMDANCjE5OTksVE9SLEFMLGx1ZHdpZXIwMSwyMjAwMDANCjE5OTksVE9SLEFMLGhhbGxhcm8wMSwyMDAwMDANCjE5OTksVE9SLEFMLGtvY2hiaTAxLDIwMDAwMA0KMTk5OSxUT1IsQUwsbXVucm9wZTAxLDIwMDAwMA0KMTk5OSxUT1IsQUwsd2VsbHN2ZTAxLDIwMDAwMA0KMTk5OSxUT1IsQUwsd29vZHdjaDAxLDIwMDAwMA0KMTk5OSxBUkksTkwsam9obnNyYTA1LDk3MDAwMDANCjE5OTksQVJJLE5MLHdpbGxpbWEwNCw4MTAwMDAwDQoxOTk5LEFSSSxOTCxzdG90dHRvMDEsODAwMDAwMA0KMTk5OSxBUkksTkwsYmVsbGphMDEsNjEwMDAwMA0KMTk5OSxBUkksTkwsYmVuZXNhbjAxLDYwMDAwMDANCjE5OTksQVJJLE5MLGZpbmxlc3QwMSw1Mzc1MDAwDQoxOTk5LEFSSSxOTCxnaWxrZWJlMDEsNTI1MDAwMA0KMTk5OSxBUkksTkwsZGFhbG9tMDEsMjYyNTAwMA0KMTk5OSxBUkksTkwsZ29uemFsdTAxLDIwNTAwMDANCjE5OTksQVJJLE5MLGFuZGVyYnIwMiwxODAwMDAwDQoxOTk5LEFSSSxOTCx3b21hY3RvMDEsMTY1MDAwMA0KMTk5OSxBUkksTkwscmV5bm9hcjAyLDE2MjUwMDANCjE5OTksQVJJLE5MLGhvbG1lZGEwMSwxNDY2NjY2DQoxOTk5LEFSSSxOTCxzd2luZGdyMDEsMTMzMzMzMw0KMTk5OSxBUkksTkwsY29sYnJncjAxLDkwMDAwMA0KMTk5OSxBUkksTkwsb2xzb25ncjAxLDg1MDAwMA0KMTk5OSxBUkksTkwsa2ltYnkwMSw3NjI1MDANCjE5OTksQVJJLE5MLHN0aW5ua2UwMSw3NTAwMDANCjE5OTksQVJJLE5MLHlvdW5nZXIwMiw0NTAwMDANCjE5OTksQVJJLE5MLGxlZXRyMDEsNDAwMDAwDQoxOTk5LEFSSSxOTCxiYXRpc3RvMDEsMzc1MDAwDQoxOTk5LEFSSSxOTCxmb3hhbjAxLDM1MDAwMA0KMTk5OSxBUkksTkwsZnJhc2NqbzAxLDM0NTAwMA0KMTk5OSxBUkksTkwsdGVsZW1hbTAxLDMyNTAwMA0KMTk5OSxBUkksTkwsZGVsbHVkYTAxLDI2MDAwMA0KMTk5OSxBUkksTkwsbWlsbGVkYTAyLDI0MDAwMA0KMTk5OSxBUkksTkwsY2hvdWlibzAxLDIxMjUwMA0KMTk5OSxBUkksTkwsZnJpYXNoYTAxLDIwOTAwMA0KMTk5OSxBUkksTkwsYnJvaGF0cjAxLDIwMDAwMA0KMTk5OSxBUkksTkwsZHVyYXplcjAxLDIwMDAwMA0KMTk5OSxBUkksTkwscG93ZWxkYTAxLDIwMDAwMA0KMTk5OSxBUkksTkwscnlhbnJvMDIsMjAwMDAwDQoxOTk5LEFSSSxOTCxzcGl2ZWp1MDEsMjAwMDAwDQoxOTk5LEFSSSxOTCx3YXJkdHUwMSwyMDAwMDANCjE5OTksQVRMLE5MLG1hZGR1Z3IwMSwxMDYwMDAwMA0KMTk5OSxBVEwsTkwsZ2FsYXJhbjAxLDgyNTAwMDANCjE5OTksQVRMLE5MLHNtb2x0am8wMSw3NzUwMDAwDQoxOTk5LEFUTCxOTCxnbGF2aXRvMDIsNzAwMDAwMA0KMTk5OSxBVEwsTkwsbG9wZXpqYTAxLDUyNTAwMDANCjE5OTksQVRMLE5MLHdvaGxlbWEwMSw1MjAwMDAwDQoxOTk5LEFUTCxOTCxrbGVza3J5MDEsNDc1MDAwMA0KMTk5OSxBVEwsTkwsam9yZGFicjAxLDQ2MDAwMDANCjE5OTksQVRMLE5MLGpvbmVzY2gwNiw0MTc1MDAwDQoxOTk5LEFUTCxOTCx3ZWlzc3dhMDEsMzAwMDAwMA0KMTk5OSxBVEwsTkwsYm9vbmVicjAxLDI5MDAwMDANCjE5OTksQVRMLE5MLG5peG9ub3QwMSwxNTAwMDAwDQoxOTk5LEFUTCxOTCx3aWxsaWdlMDIsMTQ3NTAwMA0KMTk5OSxBVEwsTkwscmVtbGltaTAxLDExMDAwMDANCjE5OTksQVRMLE5MLGxvY2toa2UwMSwxMDAwMDAwDQoxOTk5LEFUTCxOTCxzZWFuZXJ1MDEsNzc1MDAwDQoxOTk5LEFUTCxOTCxwZXJlemVkMDIsNjMwMDAwDQoxOTk5LEFUTCxOTCxndWlsbG96MDEsNTUwMDAwDQoxOTk5LEFUTCxOTCxodW50ZWJyMDEsMzc1MDAwDQoxOTk5LEFUTCxOTCxqb25lc2FuMDEsMzMwMDAwDQoxOTk5LEFUTCxOTCxsaWd0ZWtlMDEsMjU1MDAwDQoxOTk5LEFUTCxOTCxtaWxsd2tlMDEsMjMwMDAwDQoxOTk5LEFUTCxOTCxjYXRoZW1pMDEsMjI1MDAwDQoxOTk5LEFUTCxOTCxyb2NrZWpvMDEsMjE3NTAwDQoxOTk5LEFUTCxOTCxzaW1vbnJhMDEsMjAyNTAwDQoxOTk5LEFUTCxOTCxjaGVuYnIwMSwyMDAwMDANCjE5OTksQVRMLE5MLGZhYnJlam8wMSwyMDAwMDANCjE5OTksQVRMLE5MLG1jZ2xpa2UwMSwyMDAwMDANCjE5OTksQVRMLE5MLHBlcmV6b2QwMSwyMDAwMDANCjE5OTksQ0hOLE5MLHNvc2FzYTAxLDkwMDAwMDANCjE5OTksQ0hOLE5MLGJlY2tybzAxLDU1MDAwMDANCjE5OTksQ0hOLE5MLHRyYWNoc3QwMSw1MjUwMDAwDQoxOTk5LENITixOTCxqb2huc2xhMDMsNTEwMDAwMA0KMTk5OSxDSE4sTkwsYmxhdXNqZTAxLDQyMDAwMDANCjE5OTksQ0hOLE5MLGdyYWNlbWEwMSw0MTAwMDAwDQoxOTk5LENITixOTCxyb2RyaWhlMDIsMzcwMDAwMA0KMTk5OSxDSE4sTkwsdGFwYW5rZTAxLDM1MDAwMDANCjE5OTksQ0hOLE5MLG11bGhvdGUwMSwyOTI1MDAwDQoxOTk5LENITixOTCxoZXJuYWpvMDEsMjQwMDAwMA0KMTk5OSxDSE4sTkwsbGllYmVqbzAxLDIxMDAwMDANCjE5OTksQ0hOLE5MLGdhZXR0Z2EwMSwyMDAwMDAwDQoxOTk5LENITixOTCxtb3Jhbm1pMDEsMjAwMDAwMA0KMTk5OSxDSE4sTkwsc2FudGliZTAxLDE3MDAwMDANCjE5OTksQ0hOLE5MLGhpbGxnbDAxLDExNTAwMDANCjE5OTksQ0hOLE5MLHNhbmRlc2MwMiw4MjUwMDANCjE5OTksQ0hOLE5MLGthcmNobWEwMSw3NzYwMDANCjE5OTksQ0hOLE5MLGFkYW1zdGUwMSw3MzYwMDANCjE5OTksQ0hOLE5MLGhvdXN0dHkwMSw3MTUwMDANCjE5OTksQ0hOLE5MLHdvb2RrZTAyLDY5MDAwMA0KMTk5OSxDSE4sTkwsYWxleGFtYTAyLDQ3NTAwMA0KMTk5OSxDSE4sTkwsZ29vZHdjdTAxLDMwODAwMA0KMTk5OSxDSE4sTkwsaGVyZWRmZTAxLDI3NTAwMA0KMTk5OSxDSE4sTkwsZ29uemFqZTAxLDI2NTAwMA0KMTk5OSxDSE4sTkwsbG9ycmFhbjAxLDIyMDAwMA0KMTk5OSxDSE4sTkwsbWFydGlzYTAxLDIyMDAwMA0KMTk5OSxDSE4sTkwsbWlsbGVrdTAxLDIwNTAwMA0KMTk5OSxDSE4sTkwsbXllcnNybzAxLDIwNTAwMA0KMTk5OSxDSE4sTkwsamVubmlybzAxLDIwMTUwMA0KMTk5OSxDSE4sTkwsbmlldmVqbzAxLDIwMTUwMA0KMTk5OSxDSE4sTkwsYm93aWVtaTAxLDIwMDAwMA0KMTk5OSxDSE4sTkwsZmFybnNreTAxLDIwMDAwMA0KMTk5OSxDSE4sTkwsbWV5ZXJjaDAyLDIwMDAwMA0KMTk5OSxDSE4sTkwsbW9saW5qbzAxLDIwMDAwMA0KMTk5OSxDSE4sTkwscmVlZGplMDIsMjAwMDAwDQoxOTk5LENITixOTCxzZXJhZmRhMDEsMjAwMDAwDQoxOTk5LENITixOTCx3b29kYWJyMDEsMjAwMDAwDQoxOTk5LENJTixOTCx2YXVnaGdyMDEsNTYxNTQyOA0KMTk5OSxDSU4sTkwsbGFya2liYTAxLDUzMDAwMDANCjE5OTksQ0lOLE5MLG5lYWdsZGUwMSw0NzUwMDAwDQoxOTk5LENJTixOTCxoYXJuaXBlMDEsMzAwMDAwMA0KMTk5OSxDSU4sTkwsaGFtbW9qZTAxLDI0ODMzMzMNCjE5OTksQ0lOLE5MLHR1Y2tlbWkwMSwxNjAwMDAwDQoxOTk5LENJTixOTCxiZXJlamEwMSwxMjAwMDAwDQoxOTk5LENJTixOTCx0YXViZWVkMDEsMTIwMDAwMA0KMTk5OSxDSU4sTkwsYmVsaW5zdDAxLDgzNTAwMA0KMTk5OSxDSU4sTkwsaHVkZWtqbzAxLDgwMDAwMA0KMTk5OSxDSU4sTkwsam9obnNicjAxLDc3NTAwMA0KMTk5OSxDSU4sTkwsYXZlcnlzdDAxLDc1MDAwMA0KMTk5OSxDSU4sTkwsc3dlZW5tYTAxLDUxNTAwMA0KMTk5OSxDSU4sTkwsbGV3aXNtYTAxLDUwMDAwMA0KMTk5OSxDSU4sTkwsbW9ycmloYTAyLDQ1MDAwMA0KMTk5OSxDSU4sTkwsdG9ta29icjAxLDQwMDAwMA0KMTk5OSxDSU4sTkwseW91bmdkbTAxLDM3NTAwMA0KMTk5OSxDSU4sTkwsc3VsbGlzYzAxLDMwMDAwMA0KMTk5OSxDSU4sTkwsd2hpdGVnYTAxLDMwMDAwMA0KMTk5OSxDSU4sTkwsY2FtZXJtaTAxLDI5NTAwMA0KMTk5OSxDSU4sTkwscGFycmlzdDAxLDI3NTAwMA0KMTk5OSxDSU4sTkwscmVlc2VwbzAxLDI3MDAwMA0KMTk5OSxDSU4sTkwsc3R5bmVjaDAxLDI3MDAwMA0KMTk5OSxDSU4sTkwsZ3JhdmVkYTAxLDI2MDAwMA0KMTk5OSxDSU4sTkwsY2FzZXlzZTAxLDIyMDAwMA0KMTk5OSxDSU4sTkwsYm9vbmVhYTAxLDIxMDAwMA0KMTk5OSxDSU4sTkwsbWlsbGlyYTAyLDIxMDAwMA0KMTk5OSxDSU4sTkwscmV5ZXNkZTAxLDIwMjAwMA0KMTk5OSxDSU4sTkwsd2luY2hzYzAxLDIwMjAwMA0KMTk5OSxDSU4sTkwsbGFydWVqYTAxLDIwMDAwMA0KMTk5OSxDSU4sTkwsd2lsbGlzYzAxLDIwMDAwMA0KMTk5OSxDT0wsTkwsa2lsZWRhMDEsODQ0Mjk4MQ0KMTk5OSxDT0wsTkwsYmljaGVkYTAxLDcyNTAwMDANCjE5OTksQ09MLE5MLGFzdGFjcGUwMSw2MTUwMDAwDQoxOTk5LENPTCxOTCxjYXN0aXZpMDIsNjAwMDAwMA0KMTk5OSxDT0wsTkwsbGFuc2ltaTAxLDU3NTAwMDANCjE5OTksQ09MLE5MLHdhbGtlbGEwMSw1NDE3ODU3DQoxOTk5LENPTCxOTCxoYW1pbGRhMDIsMzYxMzMzMw0KMTk5OSxDT0wsTkwscml0emtlMDEsMzAwMDAwMA0KMTk5OSxDT0wsTkwsZGlwb3RqZTAxLDIyNTAwMDANCjE5OTksQ09MLE5MLGJvaGFuYnIwMSwyMTEwMDAwDQoxOTk5LENPTCxOTCxyZWVkamUwMiwxMzAwMDAwDQoxOTk5LENPTCxOTCx2ZXJlc2RhMDEsMTE2NjY2Ng0KMTk5OSxDT0wsTkwsaGFycmlsZTAxLDExMjUwMDANCjE5OTksQ09MLE5MLGxlc2thY3UwMSwxMDUwMDAwDQoxOTk5LENPTCxOTCxtY2VscmNoMDEsMTA1MDAwMA0KMTk5OSxDT0wsTkwsYWJib3RrdTAxLDkwMDAwMA0KMTk5OSxDT0wsTkwsaGVsdG90bzAxLDc1MDAwMA0KMTk5OSxDT0wsTkwsbWFud2FraTAxLDcwMDAwMA0KMTk5OSxDT0wsTkwscGVyZXpuZTAxLDQwMDAwMA0KMTk5OSxDT0wsTkwsd3JpZ2hqYTAxLDM3NTAwMA0KMTk5OSxDT0wsTkwsZGVqZWFtaTAxLDMwMDAwMA0KMTk5OSxDT0wsTkwsdGhvbXNqbzAxLDMwMDAwMA0KMTk5OSxDT0wsTkwsam9uZXNibzA0LDI0NTAwMA0KMTk5OSxDT0wsTkwsZWNoZXZhbjAxLDIyMDAwMA0KMTk5OSxDT0wsTkwsc2h1bXB0ZTAxLDIyMDAwMA0KMTk5OSxDT0wsTkwsYmVsdHJyaTAxLDIxNTAwMA0KMTk5OSxDT0wsTkwsYmxhbmNoZTAxLDIxNTAwMA0KMTk5OSxDT0wsTkwsd2F0a2lwYTAxLDIwODAwMA0KMTk5OSxDT0wsTkwscmFtaXJybzAxLDIwNjAwMA0KMTk5OSxDT0wsTkwsYmFycnlqZTAxLDIwMjAwMA0KMTk5OSxDT0wsTkwsY2xlbWVlZDAyLDIwMjAwMA0KMTk5OSxDT0wsTkwsc2V4dG9jaDAxLDIwMjAwMA0KMTk5OSxDT0wsTkwsbGVlZGEwMSwyMDAwMDANCjE5OTksQ09MLE5MLHBvcnppbWkwMSwyMDAwMDANCjE5OTksRkxPLE5MLGZlcm5hYWwwMSw3MDAwMDAwDQoxOTk5LEZMTyxOTCxmbG95ZGNsMDEsMjUwMDAwMA0KMTk5OSxGTE8sTkwsaGVybmFsaTAxLDE4NzUwMDANCjE5OTksRkxPLE5MLGZhYnJlam8wMSwxODUwMDAwDQoxOTk5LEZMTyxOTCxtYW50ZW1hMDEsNzM1MDAwDQoxOTk5LEZMTyxOTCxzcHJpbmRlMDEsMzM1MDAwDQoxOTk5LEZMTyxOTCxiYXV0aWRhMDEsMzI1MDAwDQoxOTk5LEZMTyxOTCxrb3RzYW1hMDEsMjgwMDAwDQoxOTk5LEZMTyxOTCxkYXJlbnZpMDEsMjY1MDAwDQoxOTk5LEZMTyxOTCxsZWVkZTAyLDI2NTAwMA0KMTk5OSxGTE8sTkwsbWVhZG9icjAxLDI2NTAwMA0KMTk5OSxGTE8sTkwsc2FuY2hqZTAxLDI2NTAwMA0KMTk5OSxGTE8sTkwsYWxmb25hbjAxLDI1MDAwMA0KMTk5OSxGTE8sTkwsY291bnNjcjAxLDI0NTAwMA0KMTk5OSxGTE8sTkwsZWRtb25icjAxLDI0MDAwMA0KMTk5OSxGTE8sTkwsb2phbGFraTAxLDI0MDAwMA0KMTk5OSxGTE8sTkwsb3JpZWtlMDEsMjQwMDAwDQoxOTk5LEZMTyxOTCxiZXJnZGEwMSwyMzUwMDANCjE5OTksRkxPLE5MLGNhc3RpbHUwMSwyMjUwMDANCjE5OTksRkxPLE5MLGR1bndvdG8wMSwyMjIwMDANCjE5OTksRkxPLE5MLHJlZG1vbWkwMSwyMjAwMDANCjE5OTksRkxPLE5MLGRlbXBzcnkwMSwyMDIwMDANCjE5OTksRkxPLE5MLG51bmV6dmwwMSwyMDIwMDANCjE5OTksRkxPLE5MLGdvbnphYWwwMiwyMDEwMDANCjE5OTksRkxPLE5MLGxvb3BlYnIwMSwyMDEwMDANCjE5OTksRkxPLE5MLGxvd2VsbWkwMSwyMDEwMDANCjE5OTksRkxPLE5MLHdpbHNvcHIwMSwyMDEwMDANCjE5OTksRkxPLE5MLGFsbWFuYXIwMSwyMDAwMDANCjE5OTksRkxPLE5MLGF2ZW5icjAxLDIwMDAwMA0KMTk5OSxGTE8sTkwsYnVybmVhajAxLDIwMDAwMA0KMTk5OSxGTE8sTkwsY2FzdHJyYTAxLDIwMDAwMA0KMTk5OSxGTE8sTkwsY2xhcGljaDAxLDIwMDAwMA0KMTk5OSxGTE8sTkwsZ2FyY2lndTAxLDIwMDAwMA0KMTk5OSxGTE8sTkwsaHllcnN0aTAxLDIwMDAwMA0KMTk5OSxGTE8sTkwsbWVkaW5yYTAxLDIwMDAwMA0KMTk5OSxGTE8sTkwsbWlsbGFrZTAxLDIwMDAwMA0KMTk5OSxIT1UsTkwsYmFnd2VqZTAxLDY1MDAwMDANCjE5OTksSE9VLE5MLGJpZ2dpY3IwMSw2MDYwMDAwDQoxOTk5LEhPVSxOTCxhbG91bW8wMSw1MDAwMDAwDQoxOTk5LEhPVSxOTCxiZWxsZGUwMSw0NTAwMDAwDQoxOTk5LEhPVSxOTCxjYW1pbmtlMDEsNDUwMDAwMA0KMTk5OSxIT1UsTkwscmV5bm9zaDAxLDQ0NzUwMDANCjE5OTksSE9VLE5MLGhhbXB0bWkwMSw0MTI1MDAwDQoxOTk5LEhPVSxOTCxldmVyZWNhMDEsMjUwMDAwMA0KMTk5OSxIT1UsTkwsbGltYWpvMDEsMjI1MDAwMA0KMTk5OSxIT1UsTkwsd2FnbmViaTAyLDIyNTAwMDANCjE5OTksSE9VLE5MLGd1dGllcmkwMSwyMjEyNTAwDQoxOTk5LEhPVSxOTCxiZXJnbXNlMDEsMTg3NTAwMA0KMTk5OSxIT1UsTkwsc3BpZXJiaTAxLDE2MDAwMDANCjE5OTksSE9VLE5MLGV1c2VidG8wMSw5MDAwMDANCjE5OTksSE9VLE5MLHBvd2VsamEwNCw4MDAwMDANCjE5OTksSE9VLE5MLGhlbnJ5ZG8wMSw3MjUwMDANCjE5OTksSE9VLE5MLGJvZ2FydGkwMSw3MDAwMDANCjE5OTksSE9VLE5MLGhvd2VsamEwMiw1NTAwMDANCjE5OTksSE9VLE5MLHdpbGxpYnIwMSwzNzUwMDANCjE5OTksSE9VLE5MLGhvbHRjaDAxLDI3OTAwMA0KMTk5OSxIT1UsTkwsZGlhemFsMDEsMjc1MDAwDQoxOTk5LEhPVSxOTCx0aG9tcHJ5MDEsMjc1MDAwDQoxOTk5LEhPVSxOTCxoaWRhbHJpMDEsMjYwMDAwDQoxOTk5LEhPVSxOTCxtaWxsZXRyMDIsMjQ3NTAwDQoxOTk5LEhPVSxOTCxiYWtvcGEwMSwyMzAwMDANCjE5OTksSE9VLE5MLGVsYXJ0c2MwMSwyMzAwMDANCjE5OTksSE9VLE5MLGNhYnJlam8wMSwyMTUwMDANCjE5OTksSE9VLE5MLGpvaG5zcnUwMSwyMDUwMDANCjE5OTksSE9VLE5MLGJhcmtlZ2wwMSwyMDAwMDANCjE5OTksSE9VLE5MLGJlcmttbGEwMSwyMDAwMDANCjE5OTksSE9VLE5MLG1lbHVzbWkwMSwyMDAwMDANCjE5OTksSE9VLE5MLHdhcmRkYTAxLDIwMDAwMA0KMTk5OSxMQU4sTkwsYnJvd25rZTAxLDEwNzE0Mjg2DQoxOTk5LExBTixOTCxzaGVmZmdhMDEsOTk1NjY2Nw0KMTk5OSxMQU4sTkwsbW9uZGVyYTAxLDkwMDAwMDANCjE5OTksTEFOLE5MLGthcnJvZXIwMSw1NTAwMDAwDQoxOTk5LExBTixOTCxodW5kbHRvMDEsNTMyNTAwMA0KMTk5OSxMQU4sTkwscm9qYXNtZTAxLDQ1ODMzMzQNCjE5OTksTEFOLE5MLHlvdW5nZXIwMSw0NTAwMDAwDQoxOTk5LExBTixOTCx2YWxkZWlzMDEsNDI3NTAwMA0KMTk5OSxMQU4sTkwsc2hhd2plMDEsMzQwODMzMw0KMTk5OSxMQU4sTkwsdml6Y2FqbzAxLDMwMDAwMDANCjE5OTksTEFOLE5MLHdoaXRlZGUwMywyNTAwMDAwDQoxOTk5LExBTixOTCxwZXJlemNhMDEsMjMzMzMzMw0KMTk5OSxMQU4sTkwscGFya2NoMDEsMjMwMDAwMA0KMTk5OSxMQU4sTkwsbWxpY2tkYTAxLDIyNTAwMDANCjE5OTksTEFOLE5MLGRyZWlmZGEwMSwxOTAwMDAwDQoxOTk5LExBTixOTCxncnVkem1hMDEsMTkwMDAwMA0KMTk5OSxMQU4sTkwsbWlsbHNhbDAxLDEyNTAwMDANCjE5OTksTEFOLE5MLG9zdW5hYW4wMSwxMDUwMDAwDQoxOTk5LExBTixOTCxob2xsYXRvMDEsODUwMDAwDQoxOTk5LExBTixOTCxoYW5zZWRhMDEsNDUwMDAwDQoxOTk5LExBTixOTCx3aWxraXJpMDEsNDEwMDAwDQoxOTk5LExBTixOTCxicnVtZmphMDEsMzg1MDAwDQoxOTk5LExBTixOTCxib3Jib3BlMDIsMzc1MDAwDQoxOTk5LExBTixOTCxjcm9tZXRyMDEsMzQ2NTAwDQoxOTk5LExBTixOTCxjaGVjb3JvMDEsMzAwMDAwDQoxOTk5LExBTixOTCxodWJiYXRyMDEsMzAwMDAwDQoxOTk5LExBTixOTCxtYWRkdW1pMDEsMjY1MDAwDQoxOTk5LExBTixOTCxiZWx0cmFkMDEsMjIwMDAwDQoxOTk5LExBTixOTCxjb3JhYWwwMSwyMTAwMDANCjE5OTksTEFOLE5MLGp1ZGRtaTAxLDIwNTAwMA0KMTk5OSxMQU4sTkwsaGVyZ2VtYTAxLDIwMDAwMA0KMTk5OSxMQU4sTkwsbG9kdWNwYTAxLDIwMDAwMA0KMTk5OSxMQU4sTkwsbWFzYW9vbjAxLDIwMDAwMA0KMTk5OSxMQU4sTkwsbW9udGdqZTAxLDIwMDAwMA0KMTk5OSxNSUwsTkwsbmlsc3NkYTAxLDU2OTQxMzMNCjE5OTksTUlMLE5MLGdyaXNzbWEwMiw1MDAwMDAwDQoxOTk5LE1JTCxOTCxlbGRyZWNhMDEsNDc2NjY2Nw0KMTk5OSxNSUwsTkwsYnVybmlqZTAxLDM2MTI1MDANCjE5OTksTUlMLE5MLHdpY2ttYm8wMSwzMzAwMDAwDQoxOTk5LE1JTCxOTCx2YWxlbmpvMDMsMzAzNjA5NQ0KMTk5OSxNSUwsTkwsY2lyaWxqZTAxLDMwMDAwMDANCjE5OTksTUlMLE5MLGthcmxzYzAxLDI5MDAwMDANCjE5OTksTUlMLE5MLHZpbmFmZTAxLDIwMDAwMDANCjE5OTksTUlMLE5MLHBsdW5rZXIwMSwxODUwMDAwDQoxOTk5LE1JTCxOTCxsb3JldG1hMDEsMTQ5NTAwMA0KMTk5OSxNSUwsTkwsYmVycnlzZTAxLDEwNTAwMDANCjE5OTksTUlMLE5MLG15ZXJzbWkwMSw4MDAwMDANCjE5OTksTUlMLE5MLGJlY2tlcmkwMSw0NzUwMDANCjE5OTksTUlMLE5MLHdlYXRoZGEwMSw0MDUwMDANCjE5OTksTUlMLE5MLGFiYm90amkwMSw0MDAwMDANCjE5OTksTUlMLE5MLHdvb2Rhc3QwMSwyNzAwMDANCjE5OTksTUlMLE5MLHB1bHNpYmkwMSwyNTc1MDANCjE5OTksTUlMLE5MLGZveGNoMDIsMjU1MDAwDQoxOTk5LE1JTCxOTCxub21vaGkwMSwyNTAwMDANCjE5OTksTUlMLE5MLG9jaG9hYWwwMSwyNDUwMDANCjE5OTksTUlMLE5MLGRhbWljamUwMSwyNDI1MDANCjE5OTksTUlMLE5MLGh1Z2hlYm8wMSwyMTcwMDANCjE5OTksTUlMLE5MLGplbmtpZ2UwMSwyMTYwMDANCjE5OTksTUlMLE5MLGNvbGxpbG8wMSwyMTUwMDANCjE5OTksTUlMLE5MLHJvcXVlcmEwMSwyMTIwMDANCjE5OTksTUlMLE5MLGRlbG9zdmEwMSwyMTAwMDANCjE5OTksTUlMLE5MLGJhbmtzYnIwMSwyMDMwMDANCjE5OTksTUlMLE5MLGJhcmtla2UwMSwyMDAwMDANCjE5OTksTUlMLE5MLGJlbGxpcm8wMSwyMDAwMDANCjE5OTksTUlMLE5MLHBldGVya3kwMSwyMDAwMDANCjE5OTksTUlMLE5MLHJhbWlyaGUwMSwyMDAwMDANCjE5OTksTU9OLE5MLHdoaXRlcm8wMiwzMDAwMDAwDQoxOTk5LE1PTixOTCx1cmJpbnVnMDEsMjIwMDAwMA0KMTk5OSxNT04sTkwsaGVybWFkdTAxLDIwNzUwMDANCjE5OTksTU9OLE5MLGFuZHJlc2gwMSwxMjUwMDAwDQoxOTk5LE1PTixOTCxndWVycnZsMDEsMTA1MDAwMA0KMTk5OSxNT04sTkwsd2lkZ2VjaDAxLDkwMDAwMA0KMTk5OSxNT04sTkwsbWFkZHVtaTAxLDYxMDAwMA0KMTk5OSxNT04sTkwsbWVyY2VvcjAxLDU2MDAwMA0KMTk5OSxNT04sTkwsZ3VlcnJ3aTAxLDM0MDAwMA0KMTk5OSxNT04sTkwsbW9yZGVtaTAxLDMyNTAwMA0KMTk5OSxNT04sTkwsdGVsZm9hbjAxLDMyMDAwMA0KMTk5OSxNT04sTkwsZnVsbG1icjAxLDI3MDAwMA0KMTk5OSxNT04sTkwsa2xpbmVzdDAyLDI2MDAwMA0KMTk5OSxNT04sTkwsYmF0aXNtaTAxLDI1MDAwMA0KMTk5OSxNT04sTkwsbW91dG9qYTAxLDI1MDAwMA0KMTk5OSxNT04sTkwsdmF6cXVqYTAxLDIzNTAwMA0KMTk5OSxNT04sTkwsYmVubmVzaDAxLDIzMDAwMA0KMTk5OSxNT04sTkwsY2FicmVvcjAxLDIyNTAwMA0KMTk5OSxNT04sTkwsbWFydGltYTAyLDIyNTAwMA0KMTk5OSxNT04sTkwsbWNndWlyeTAxLDIyNTAwMA0KMTk5OSxNT04sTkwscGF2YW5jYTAxLDIyNTAwMA0KMTk5OSxNT04sTkwsdmlkcm9qbzAxLDIyNTAwMA0KMTk5OSxNT04sTkwsaGVubGVibzAxLDIxNTAwMA0KMTk5OSxNT04sTkwsam9uZXN0ZTAyLDIxNTAwMA0KMTk5OSxNT04sTkwsdGh1cm1taTAxLDIxMjUwMA0KMTk5OSxNT04sTkwsbW9vcmV0cjAxLDIwNzUwMA0KMTk5OSxNT04sTkwsc2VndWlmZTAxLDIwMTUwMA0KMTk5OSxNT04sTkwscG93ZWxqZTAxLDIwMTAwMA0KMTk5OSxNT04sTkwsYmFycmVtaTAxLDIwMDUwMA0KMTk5OSxNT04sTkwsYmx1bWdlMDEsMjAwMDAwDQoxOTk5LE1PTixOTCxjb3hkYTAyLDIwMDAwMA0KMTk5OSxNT04sTkwsbWFjaGFybzAxLDIwMDAwMA0KMTk5OSxNT04sTkwsbW90YWd1MDEsMjAwMDAwDQoxOTk5LE1PTixOTCxzbWl0aGRhMDYsMjAwMDAwDQoxOTk5LE1PTixOTCxzdHJpY3NjMDEsMjAwMDAwDQoxOTk5LE5ZTixOTCxwaWF6em1pMDEsNzE3MTQyOA0KMTk5OSxOWU4sTkwsdmVudHVybzAxLDcwMDAwMDANCjE5OTksTllOLE5MLGJvbmlsYm8wMSw1OTAwMDAwDQoxOTk5LE5ZTixOTCxsZWl0ZWFsMDEsNTI1MDAwMA0KMTk5OSxOWU4sTkwsam9uZXNibzAzLDQ4NjY2NjYNCjE5OTksTllOLE5MLG9sZXJ1am8wMSw0MjUwMDAwDQoxOTk5LE5ZTixOTCxtY3JhZWJyMDEsMzc1MDAwMA0KMTk5OSxOWU4sTkwsZnJhbmNqbzAxLDI5NTAwMDANCjE5OTksTllOLE5MLGFsZm9uZWQwMSwyODAwMDAwDQoxOTk5LE5ZTixOTCxoZXJzaG9yMDEsMjUwMDAwMA0KMTk5OSxOWU4sTkwsYmVuaXRhcjAxLDIwMzc1MDANCjE5OTksTllOLE5MLGNvb2tkZTAxLDIwMDAwMDANCjE5OTksTllOLE5MLHlvc2hpbWEwMSwyMDAwMDAwDQoxOTk5LE5ZTixOTCxtY21pY2dyMDEsMTk1MDAwMA0KMTk5OSxOWU4sTkwsaGVuZGVyaTAxLDE5MDAwMDANCjE5OTksTllOLE5MLHJlZWRyaTAxLDE2ODc1MDANCjE5OTksTllOLE5MLG9yZG9ucmUwMSwxNjUwMDAwDQoxOTk5LE5ZTixOTCx3ZW5kZXR1MDEsMTIxNDk5OA0KMTk5OSxOWU4sTkwsd2F0c29hbDAxLDc1MDAwMA0KMTk5OSxOWU4sTkwsbG9wZXpsdTAyLDU3NTAwMA0KMTk5OSxOWU4sTkwsY2VkZW5ybzAxLDQ4NzUwMA0KMTk5OSxOWU4sTkwscHJhdHR0bzAyLDM1MDAwMA0KMTk5OSxOWU4sTkwsbWFob21wYTAxLDMxMDAwMA0KMTk5OSxOWU4sTkwsYWxsZW5qZTAxLDI4NDAwMA0KMTk5OSxOWU4sTkwsZnJhbmNtYTAxLDI1MDAwMA0KMTk5OSxOWU4sTkwsdGFtamUwMSwyMDc1MDANCjE5OTksTllOLE5MLGFnYmF5YmUwMSwyMDAwMDANCjE5OTksTllOLE5MLGRvdGVsb2MwMSwyMDAwMDANCjE5OTksTllOLE5MLGtpbmthbWkwMSwyMDAwMDANCjE5OTksTllOLE5MLG1hbnpham8wMSwyMDAwMDANCjE5OTksTllOLE5MLHdpbHNvdmEwMSwyMDAwMDANCjE5OTksUEhJLE5MLGdhbnRybzAxLDYwMDAwMDANCjE5OTksUEhJLE5MLHNjaGlsY3UwMSw1MjUwMDAwDQoxOTk5LFBISSxOTCxicm9nbnJpMDEsMzIwMDAwMA0KMTk5OSxQSEksTkwsYnJhbnRqZTAxLDI4MDAwMDANCjE5OTksUEhJLE5MLGxpZWJlbWkwMSwyMjUwMDAwDQoxOTk5LFBISSxOTCxvZ2VhY2gwMSwxNzgzMzM0DQoxOTk5LFBISSxOTCxyb2xlbnNjMDEsMTAwMDAwMA0KMTk5OSxQSEksTkwsZ3JlZW50eTAxLDcyNTAwMA0KMTk5OSxQSEksTkwsYXJpYXNhbDAxLDYyNTAwMA0KMTk5OSxQSEksTkwscnlhbmtlMDEsNjAwMDAwDQoxOTk5LFBISSxOTCxqb3JkYWtlMDEsNTUwMDAwDQoxOTk5LFBISSxOTCxnbGFudmRvMDEsNTQxNjY2DQoxOTk5LFBISSxOTCxwb29sZWppMDIsNTAwMDAwDQoxOTk5LFBISSxOTCxwZXJlenlvMDEsNDc1MDAwDQoxOTk5LFBISSxOTCxzcG9sanBhMDEsNDUwMDAwDQoxOTk5LFBISSxOTCxzZWZjaWtlMDEsNDI1MDAwDQoxOTk5LFBISSxOTCxhYnJldWJvMDEsNDAwMDAwDQoxOTk5LFBISSxOTCxkdWNleXJvMDEsNDAwMDAwDQoxOTk5LFBISSxOTCxicmV3ZWJpMDEsMzIwMDAwDQoxOTk5LFBISSxOTCxwcmluY3RvMDEsMzAwMDAwDQoxOTk5LFBISSxOTCxieXJkcGEwMSwyOTc1MDANCjE5OTksUEhJLE5MLGdvbWVzd2EwMSwyNjAwMDANCjE5OTksUEhJLE5MLHJlbGFmZGUwMSwyNjAwMDANCjE5OTksUEhJLE5MLGdyYWNlbWkwMiwyNDAwMDANCjE5OTksUEhJLE5MLGJlZWNobWEwMSwyMTUwMDANCjE5OTksUEhJLE5MLGxvZXdlY2EwMSwyMTUwMDANCjE5OTksUEhJLE5MLGVzdGFsYm8wMiwyMTAwMDANCjE5OTksUEhJLE5MLGFuZGVybWEwMiwyMDAwMDANCjE5OTksUEhJLE5MLGJlbm5lZ2EwMSwyMDAwMDANCjE5OTksUEhJLE5MLGRvc3RlZGEwMSwyMDAwMDANCjE5OTksUEhJLE5MLGdyYWhlam8wMSwyMDAwMDANCjE5OTksUEhJLE5MLG1vbnRnc3QwMSwyMDAwMDANCjE5OTksUEhJLE5MLHNjaHJlc3QwMSwyMDAwMDANCjE5OTksUEhJLE5MLHdvbGZyYTAyLDIwMDAwMA0KMTk5OSxQSVQsTkwsbWFydGlhbDAzLDI3MDAwMDANCjE5OTksUElULE5MLHlvdW5na2UwMSwyMTAwMDAwDQoxOTk5LFBJVCxOTCxzY2hvdXBlMDEsMjAwMDAwMA0KMTk5OSxQSVQsTkwsbWVhcmVwYTAxLDE1MDAwMDANCjE5OTksUElULE5MLHNjaG1pamEwMSwxNDUwMDAwDQoxOTk5LFBJVCxOTCxzcHJhZ2VkMDIsMTMwMDAwMA0KMTk5OSxQSVQsTkwsY29yZG9mcjAxLDEyNTAwMDANCjE5OTksUElULE5MLGtlbmRhamEwMSwxMjUwMDAwDQoxOTk5LFBJVCxOTCxnaWxlc2JyMDIsMTExNjY2Ng0KMTk5OSxQSVQsTkwsd2FyZHR1MDEsODUwMDAwDQoxOTk5LFBJVCxOTCxjaHJpc2phMDEsNzI1MDAwDQoxOTk5LFBJVCxOTCxiZW5qYW1pMDEsNzAwMDAwDQoxOTk5LFBJVCxOTCx3aWxraW1hMDEsNjYwMDAwDQoxOTk5LFBJVCxOTCx3aWxsaW1pMDMsNjUwMDAwDQoxOTk5LFBJVCxOTCxzdHJhbmRvMDEsNTUwMDAwDQoxOTk5LFBJVCxOTCx0YWJha2plMDEsNTAwMDAwDQoxOTk5LFBJVCxOTCxsb2lzZXJpMDEsNDAwMDAwDQoxOTk5LFBJVCxOTCxndWlsbGpvMDEsMzc1MDAwDQoxOTk5LFBJVCxOTCxjbG9udGJyMDEsMzUwMDAwDQoxOTk5LFBJVCxOTCxvc2lra2UwMSwzNTAwMDANCjE5OTksUElULE5MLHBldGVyY2gwMSwzNTAwMDANCjE5OTksUElULE5MLGJyb3duYnIwMSwyOTAwMDANCjE5OTksUElULE5MLHNpbHZham8wMSwyNzAwMDANCjE5OTksUElULE5MLGdhcmNpZnIwMSwyNjUwMDANCjE5OTksUElULE5MLHdlaG5lam8wMSwyNTAwMDANCjE5OTksUElULE5MLGhhbnNlZ3IwMSwyMzAwMDANCjE5OTksUElULE5MLHJpdGNodG8wMSwyMjUwMDANCjE5OTksUElULE5MLGJyb3duYWQwMSwyMjAwMDANCjE5OTksUElULE5MLG51bmV6YWIwMSwyMTAwMDANCjE5OTksUElULE5MLHdhbGxhamUwMSwyMDYwMDANCjE5OTksUElULE5MLGNydXppdjAxLDIwNTAwMA0KMTk5OSxQSVQsTkwsYW5kZXJqaTAyLDIwMDAwMA0KMTk5OSxQSVQsTkwsYmVuc29rcjAxLDIwMDAwMA0KMTk5OSxQSVQsTkwsbW9ycml3YTAyLDIwMDAwMA0KMTk5OSxQSVQsTkwscGhpbGxqYTAzLDIwMDAwMA0KMTk5OSxQSVQsTkwsc2F1ZXJzYzAxLDIwMDAwMA0KMTk5OSxQSVQsTkwsc3ZldW1kYTAxLDIwMDAwMA0KMTk5OSxQSVQsTkwsbWFydGlqYTAyLDANCjE5OTksU0ROLE5MLG15ZXJzcmEwMSw2NjY2NjY2DQoxOTk5LFNETixOTCxhc2hieWFuMDEsNTA1MDAwMA0KMTk5OSxTRE4sTkwsaG9mZm10cjAxLDQ3NzUwMDANCjE5OTksU0ROLE5MLGd3eW5udG8wMSw0NDAwMDAwDQoxOTk5LFNETixOTCxzYW5kZXJlMDIsMzcwMDAwMA0KMTk5OSxTRE4sTkwsaGl0Y2hzdDAxLDM1MDAwMDANCjE5OTksU0ROLE5MLHdpbGxpd28wMiwzMDgzMzMzDQoxOTk5LFNETixOTCxqb3luZXdhMDEsMjg0MTY4MA0KMTk5OSxTRE4sTkwsZ29tZXpjaDAyLDIyMDAwMDANCjE5OTksU0ROLE5MLHZlcmFzcXUwMSwyMTEwMDAwDQoxOTk5LFNETixOTCxsZXlyaWppMDEsMTkwMDAwMA0KMTk5OSxTRE4sTkwsaGVybmFjYTAxLDEyNTAwMDANCjE5OTksU0ROLE5MLG1pY2VsZGEwMSwxMTAwMDAwDQoxOTk5LFNETixOTCx2YW5kZWpvMDIsMTA3NTAwMA0KMTk5OSxTRE4sTkwsbXllcnNncjAxLDg1MDAwMA0KMTk5OSxTRE4sTkwsdm9zYmVlZDAxLDY3NTAwMA0KMTk5OSxTRE4sTkwsbWFnYWRkYTAxLDU3NTAwMA0KMTk5OSxTRE4sTkwscmV5ZXNjYTAxLDQwMDAwMA0KMTk5OSxTRE4sTkwsd2hpdGVtYTAyLDM3NTAwMA0KMTk5OSxTRE4sTkwsYm9laHJicjAxLDI3NTAwMA0KMTk5OSxTRE4sTkwsb3dlbnNlcjAxLDI3NTAwMA0KMTk5OSxTRE4sTkwsd2FsbGRvMDEsMjc1MDAwDQoxOTk5LFNETixOTCxnYXJjaWNhMDEsMjY1MDAwDQoxOTk5LFNETixOTCxuZXZpbnBoMDEsMjY1MDAwDQoxOTk5LFNETixOTCxyaXZlcnJ1MDEsMjY1MDAwDQoxOTk5LFNETixOTCxhcmlhc2dlMDEsMjE1MDAwDQoxOTk5LFNETixOTCxqYWNrc2RhMDQsMjAzMDAwDQoxOTk5LFNETixOTCxtdXJyYWhlMDEsMjAxNTAwDQoxOTk5LFNETixOTCxjbGVtZW1hMDEsMjAxMDAwDQoxOTk5LFNETixOTCxzcGVuY3N0MDIsMjAxMDAwDQoxOTk5LFNETixOTCxjYXJseWJ1MDEsMjAwMDAwDQoxOTk5LFNETixOTCxkYXZpc2JlMDEsMjAwMDAwDQoxOTk5LFNETixOTCxnb256YXdpMDEsMjAwMDAwDQoxOTk5LFNGTixOTCxib25kc2JhMDEsOTM4MTA1Nw0KMTk5OSxTRk4sTkwsa2VudGplMDEsNTc1MDAwMA0KMTk5OSxTRk4sTkwsbmVucm8wMSw1MTUwMDAwDQoxOTk5LFNGTixOTCxidXJrc2VsMDEsNDUwMDAwMA0KMTk5OSxTRk4sTkwsc25vd2p0MDEsMzAwMDAwMA0KMTk5OSxTRk4sTkwscnVldGVraTAxLDI4MTAwMDANCjE5OTksU0ZOLE5MLGdhcmRubWEwMSwyMDAwMDAwDQoxOTk5LFNGTixOTCxoYXllc2NoMDEsMTkwMDAwMA0KMTk5OSxTRk4sTkwsamF2aWVzdDAxLDE3NTAwMDANCjE5OTksU0ZOLE5MLHRhdmFyanUwMSwxMTUwMDAwDQoxOTk5LFNGTixOTCxhdXJpbHJpMDEsOTUwMDAwDQoxOTk5LFNGTixOTCxlbWJyZWFsMDEsOTAwMDAwDQoxOTk5LFNGTixOTCxiZW5hcm1hMDEsODUwMDAwDQoxOTk5LFNGTixOTCxlc3Rlc3NoMDEsODUwMDAwDQoxOTk5LFNGTixOTCxtYXluZWJyMDEsNzUwMDAwDQoxOTk5LFNGTixOTCxyb2RyaXJpMDIsNzMwMDAwDQoxOTk5LFNGTixOTCxqb2huc2pvMDcsNzAyNTAwDQoxOTk5LFNGTixOTCxzYW50YWZwMDEsNTUwMDAwDQoxOTk5LFNGTixOTCxtdWVsbGJpMDIsNTI1MDAwDQoxOTk5LFNGTixOTCxzZXJ2YXNjMDEsNTAwMDAwDQoxOTk5LFNGTixOTCxyb2RyaWZlMDEsMjUwMDAwDQoxOTk5LFNGTixOTCxvcnRpenJ1MDEsMjIwMDAwDQoxOTk5LFNGTixOTCxicm9ja2NoMDEsMjE1MDAwDQoxOTk5LFNGTixOTCxtaXJhYmRvMDEsMjA4NTAwDQoxOTk5LFNGTixOTCxtYXJ0aXJhMDMsMjAzMDAwDQoxOTk5LFNGTixOTCxkZWx0b21pMDEsMjAwMDAwDQoxOTk5LFNGTixOTCxtdXJyYWNhMDEsMjAwMDAwDQoxOTk5LFNGTixOTCxuYXRoYWpvMDEsMjAwMDAwDQoxOTk5LFNGTixOTCxyaW9zYXIwMSwyMDAwMDANCjE5OTksU0xOLE5MLG1jZ3dpbWEwMSw5MzU4NjY3DQoxOTk5LFNMTixOTCxsYW5rZnJhMDEsNjYwMDAwMA0KMTk5OSxTTE4sTkwsb3Nib3JkbzAxLDUwODAwMDANCjE5OTksU0xOLE5MLG9saXZlZGEwMiwzNTUwMDAwDQoxOTk5LFNMTixOTCxkYXZpc2VyMDEsMzQyMDg0MA0KMTk5OSxTTE4sTkwsbWVyY2trZTAxLDI1MDAwMDANCjE5OTksU0xOLE5MLHJhZGluc2MwMSwyNTAwMDAwDQoxOTk5LFNMTixOTCxib3R0YXJpMDEsMjMwMDAwMA0KMTk5OSxTTE4sTkwscmVudGVlZDAxLDIwMDAwMDANCjE5OTksU0xOLE5MLGRyZXdqZDAxLDE3OTE2ODgNCjE5OTksU0xOLE5MLG1jZ2Vld2kwMSwxMDAwMDAwDQoxOTk5LFNMTixOTCxob3dhcmRhMDIsOTUwMDAwDQoxOTk5LFNMTixOTCxib3R0ZWtlMDEsODUwMDAwDQoxOTk5LFNMTixOTCxicmFnZ2RhMDEsODAwMDAwDQoxOTk5LFNMTixOTCxwYWludGxhMDEsODAwMDAwDQoxOTk5LFNMTixOTCxkdW5zdHNoMDEsNjEwMDAwDQoxOTk5LFNMTixOTCxiZW5lc2FsMDEsNTUwMDAwDQoxOTk5LFNMTixOTCxtb3JyaW1hMDEsNTUwMDAwDQoxOTk5LFNMTixOTCxtb2hsZW1pMDEsNDkwMDAwDQoxOTk5LFNMTixOTCxhY2V2ZWp1MDEsNDc1MDAwDQoxOTk5LFNMTixOTCxob3dhcnRoMDEsMzI1MDAwDQoxOTk5LFNMTixOTCxwYXF1ZWNyMDEsMzAwMDAwDQoxOTk5LFNMTixOTCx0YXRpc2ZlMDEsMjcwMDAwDQoxOTk5LFNMTixOTCxjYXN0aWFsMDEsMjI1MDAwDQoxOTk5LFNMTixOTCxidXNieW1pMDEsMjIwMDAwDQoxOTk5LFNMTixOTCxzdGVwaGdhMDEsMjE1MDAwDQoxOTk5LFNMTixOTCxsdWViYmxhMDEsMjEyMDAwDQoxOTk5LFNMTixOTCxheWJhcm1hMDEsMjEwMDAwDQoxOTk5LFNMTixOTCxraW5nY3UwMSwyMTAwMDANCjE5OTksU0xOLE5MLG1hcnJlZWwwMSwyMTAwMDANCjE5OTksU0xOLE5MLGNyb3VzcmkwMSwyMDUwMDANCjE5OTksU0xOLE5MLGFua2llcmkwMSwyMDAwMDANCjE5OTksU0xOLE5MLGppbWVuam8wMSwyMDAwMDANCjE5OTksU0xOLE5MLGtlbm5lYWQwMSwyMDAwMDANCjE5OTksU0xOLE5MLG1jZXdpam8wMSwyMDAwMDANCjE5OTksU0xOLE5MLHNsb2N1aGUwMSwyMDAwMDANCjIwMDAsQU5BLEFMLHZhdWdobW8wMSwxMTE2NjY2Nw0KMjAwMCxBTkEsQUwsc2FsbW90aTAxLDYwMDAwMDANCjIwMDAsQU5BLEFMLGhpbGxrZTAxLDU2MDAwMDANCjIwMDAsQU5BLEFMLGJlbGNodGkwMSw0NjAwMDAwDQoyMDAwLEFOQSxBTCxib3R0ZWtlMDEsNDAwMDAwMA0KMjAwMCxBTkEsQUwsYW5kZXJnYTAxLDMyNTAwMDANCjIwMDAsQU5BLEFMLGRpc2FyZ2EwMSwzMjI1MDAwDQoyMDAwLEFOQSxBTCxlcnN0YWRhMDEsMjUwMDAwMA0KMjAwMCxBTkEsQUwscGVyY2l0cjAxLDIzNTAwMDANCjIwMDAsQU5BLEFMLHBldGtvbWEwMSwxNTEyNTAwDQoyMDAwLEFOQSxBTCx3YWxiZW1hMDEsOTI1MDAwDQoyMDAwLEFOQSxBTCxoYXNlZ3NoMDEsOTAwMDAwDQoyMDAwLEFOQSxBTCxtZXJja2tlMDEsODUwMDAwDQoyMDAwLEFOQSxBTCxzcGllenNjMDEsNjAwMDAwDQoyMDAwLEFOQSxBTCxwYWxtZW9yMDEsNTUwMDAwDQoyMDAwLEFOQSxBTCxkaWNrc2phMDEsMzc1MDAwDQoyMDAwLEFOQSxBTCxnbGF1c3RyMDEsMjc1MDAwDQoyMDAwLEFOQSxBTCxsZXZpbmFsMDEsMjc1MDAwDQoyMDAwLEFOQSxBTCxnaWxiZTAxLDIyNTAwMA0KMjAwMCxBTkEsQUwsd2FzaGJqYTAxLDIyMjUwMA0KMjAwMCxBTkEsQUwsY2xlbWVlZDAyLDIxNTAwMA0KMjAwMCxBTkEsQUwsZnlocmltaTAxLDIxMDAwMA0KMjAwMCxBTkEsQUwsbW9saW5iZTAxLDIxMDAwMA0KMjAwMCxBTkEsQUwsc2Nob2VzYzAxLDIxMDAwMA0KMjAwMCxBTkEsQUwsb3J0aXpyYTAxLDIwNzUwMA0KMjAwMCxBTkEsQUwscG90ZWxvMDEsMjA3NTAwDQoyMDAwLEFOQSxBTCxrZW5uZWFkMDEsMjAyNTAwDQoyMDAwLEFOQSxBTCxjb2xhbm1pMDEsMjAwMDAwDQoyMDAwLEFOQSxBTCxkYXZhbmplMDIsMjAwMDAwDQoyMDAwLEFOQSxBTCx0dXJuYmRlMDEsMjAwMDAwDQoyMDAwLEJBTCxBTCxiZWxsZWFsMDEsMTI4Njg2NzANCjIwMDAsQkFMLEFMLGFuZGVyYnIwMSw3MTI3MTk5DQoyMDAwLEJBTCxBTCxtdXNzaW1pMDEsNjc4NjAzMg0KMjAwMCxCQUwsQUwsZXJpY2tzYzAxLDY2MjA5MjENCjIwMDAsQkFMLEFMLHJpcGtlY2EwMSw2MzAwMDAwDQoyMDAwLEJBTCxBTCxjbGFya3dpMDIsNjAwMDAwMA0KMjAwMCxCQUwsQUwsam9obnNjaDA0LDQ2MDAwMDANCjIwMDAsQkFMLEFMLHRpbWxpbWkwMSw0MjUwMDAwDQoyMDAwLEJBTCxBTCxkZXNoaWRlMDEsNDIwOTMyNA0KMjAwMCxCQUwsQUwsc3VyaG9iajAxLDQxNDY3ODkNCjIwMDAsQkFMLEFMLGJvcmRpbWkwMSwzMDAwMDAwDQoyMDAwLEJBTCxBTCxjb25pbmplMDEsMjUwMDAwMA0KMjAwMCxCQUwsQUwsdHJvbWJtaTAxLDIyNTAwMDANCjIwMDAsQkFMLEFMLGJhaW5laGEwMSwyMDAwMDAwDQoyMDAwLEJBTCxBTCxncm9vbWJ1MDEsMTc1MDAwMA0KMjAwMCxCQUwsQUwsbWNlbHJjaDAxLDE0NTAwMDANCjIwMDAsQkFMLEFMLG15ZXJzZ3IwMSwxMjAwMDAwDQoyMDAwLEJBTCxBTCxyYXBwcGEwMSw3NTAwMDANCjIwMDAsQkFMLEFMLHdvcnJldGkwMSw3MDAwMDANCjIwMDAsQkFMLEFMLHJleWVzYWwwMSw2MjAwMDANCjIwMDAsQkFMLEFMLGFtYXJhcmkwMSw1MDAwMDANCjIwMDAsQkFMLEFMLHBvbnNvc2kwMSw0MDAwMDANCjIwMDAsQkFMLEFMLGhhaXJzamUwMiwyMDUwMDANCjIwMDAsQkFMLEFMLG1hZHVyY2EwMSwyMDUwMDANCjIwMDAsQkFMLEFMLHJ5YW5iajAxLDIwNDAwMA0KMjAwMCxCQUwsQUwsa2luZ3NnZTAxLDIwMzUwMA0KMjAwMCxCQUwsQUwsZ2FyY2lqZTAxLDIwMTAwMA0KMjAwMCxCQUwsQUwsZmFsa2VicjAxLDIwMDAwMA0KMjAwMCxCQUwsQUwsbW9yYWx3aTAxLDIwMDAwMA0KMjAwMCxCT1MsQUwsbWFydGlwZTAyLDExNTAwMDAwDQoyMDAwLEJPUyxBTCx2YWxlbmpvMDIsNjM1MDAwMA0KMjAwMCxCT1MsQUwsbWFydGlyYTAyLDYzMjAwMDANCjIwMDAsQk9TLEFMLG9mZmVyam8wMSw1NzUwMDAwDQoyMDAwLEJPUyxBTCxldmVyZWNhMDEsNTAwMDMzMw0KMjAwMCxCT1MsQUwsc2FiZXJicjAxLDQ1MDAwMDANCjIwMDAsQk9TLEFMLHdha2VmdGkwMSw0NTAwMDAwDQoyMDAwLEJPUyxBTCxvbGVhcnRyMDEsNDAwMDAwMA0KMjAwMCxCT1MsQUwsZ29yZG90bzAxLDM3NTAwMDANCjIwMDAsQk9TLEFMLGdhcmNpbm8wMSwzNzAwMDAwDQoyMDAwLEJPUyxBTCxiZWNrcm8wMSwzNTAwMDAwDQoyMDAwLEJPUyxBTCxzdGFubG1pMDIsMzUwMDAwMA0KMjAwMCxCT1MsQUwsZnJ5ZWplMDEsMjUwMDAwMA0KMjAwMCxCT1MsQUwsbGV3aXNkYTAxLDI0MDAwMDANCjIwMDAsQk9TLEFMLGNvcm1pcmgwMSwyMDAwMDAwDQoyMDAwLEJPUyxBTCxmYXNzZWplMDEsMjAwMDAwMA0KMjAwMCxCT1MsQUwsZmxvcmlicjAxLDEzNTAwMDANCjIwMDAsQk9TLEFMLGhhdHRlc2MwMSw2OTUwMDANCjIwMDAsQk9TLEFMLGxvd2VkZTAxLDYyNTAwMA0KMjAwMCxCT1MsQUwsd2FzZGlqbzAxLDYyNTAwMA0KMjAwMCxCT1MsQUwsYWxleGFtYTAyLDYxMjUwMA0KMjAwMCxCT1MsQUwsZ2FyY2VyaTAxLDYxMDAwMA0KMjAwMCxCT1MsQUwsdmFyaXRqYTAxLDM3NTAwMA0KMjAwMCxCT1MsQUwsZ2FldHRnYTAxLDM1MDAwMA0KMjAwMCxCT1MsQUwsZGF1YmFicjAxLDI5NTAwMA0KMjAwMCxCT1MsQUwsbml4b250cjAxLDI3MDAwMA0KMjAwMCxCT1MsQUwscm9zZWJyMDEsMjUwMDAwDQoyMDAwLEJPUyxBTCxjaG9qaTAxLDIxMDAwMA0KMjAwMCxCT1MsQUwscGVuYWp1MDEsMjAyNTAwDQoyMDAwLEJPUyxBTCxzY2hvdXBlMDEsMjAwMDAwDQoyMDAwLENIQSxBTCx0aG9tYWZyMDQsNzEwMDAwMA0KMjAwMCxDSEEsQUwsZWxkcmVjYTAxLDU0MDAwMDANCjIwMDAsQ0hBLEFMLGR1cmhhcmEwMSw0OTAwMDAwDQoyMDAwLENIQSxBTCxiYWxkd2phMDEsMzMwMDAwMA0KMjAwMCxDSEEsQUwsc2lyb3RtaTAxLDE0MDAwMDANCjIwMDAsQ0hBLEFMLHNpbWFzYmkwMSwxMzUwMDAwDQoyMDAwLENIQSxBTCx2YWxlbmpvMDMsMTMyMDAwMA0KMjAwMCxDSEEsQUwsZm9yZHlicjAxLDY3NTAwMA0KMjAwMCxDSEEsQUwscGFycXVqaTAxLDQ3NTAwMA0KMjAwMCxDSEEsQUwsb3Jkb25tYTAxLDQyNTAwMA0KMjAwMCxDSEEsQUwsZm91bGtrZTAxLDM3NTAwMA0KMjAwMCxDSEEsQUwsaG93cnlibzAxLDMyNTAwMA0KMjAwMCxDSEEsQUwsa29uZXJwYTAxLDMwNTAwMA0KMjAwMCxDSEEsQUwsbm9ydG9ncjAxLDI4NTAwMA0KMjAwMCxDSEEsQUwsc2luZ2xjaDAxLDI4NTAwMA0KMjAwMCxDSEEsQUwsbGVlY2EwMSwyNzUwMDANCjIwMDAsQ0hBLEFMLGFiYm90amUwMSwyNTUwMDANCjIwMDAsQ0hBLEFMLGxvd2VzZTAxLDI1NTAwMA0KMjAwMCxDSEEsQUwsZXlyZXNjMDEsMjUwMDAwDQoyMDAwLENIQSxBTCxqb2huc21hMDIsMjUwMDAwDQoyMDAwLENIQSxBTCx3aWxzb2NyMDIsMjUwMDAwDQoyMDAwLENIQSxBTCxsaWVmZWplMDEsMjI1MDAwDQoyMDAwLENIQSxBTCxzaW1tb2JyMDEsMjI1MDAwDQoyMDAwLENIQSxBTCxjaHJpc21jMDEsMjEyNTAwDQoyMDAwLENIQSxBTCx3ZWxsc2JvMDEsMjEwMDAwDQoyMDAwLENIQSxBTCxzdHVydHRhMDEsMjA2MDAwDQoyMDAwLENIQSxBTCxteWV0dGFhMDEsMjAwMDAwDQoyMDAwLENIQSxBTCxwYXVsam8wMSwyMDAwMDANCjIwMDAsQ0hBLEFMLHd1bnNja2UwMSwyMDAwMDANCjIwMDAsQ0xFLEFMLHRob21lamkwMSw4MTc1MDAwDQoyMDAwLENMRSxBTCxmaW5sZWNoMDEsNzkxMTk0OA0KMjAwMCxDTEUsQUwsbG9mdG9rZTAxLDc1MDAwMDANCjIwMDAsQ0xFLEFMLGFsb21hcm8wMSw3MTk2NjU2DQoyMDAwLENMRSxBTCxqdXN0aWRhMDEsNzAwMDAwMA0KMjAwMCxDTEUsQUwsbmFneWNoMDEsNjAwMDAwMA0KMjAwMCxDTEUsQUwsZnJ5bWF0cjAxLDU1NTAwMDANCjIwMDAsQ0xFLEFMLGJ1cmJhZGEwMSw1MDAwMDAwDQoyMDAwLENMRSxBTCxyYW1pcm1hMDIsNDI1MDAwMA0KMjAwMCxDTEUsQUwsdml6cXVvbTAxLDMwMDAwMDANCjIwMDAsQ0xFLEFMLGFsb21hc2EwMiwyNzAwMDAwDQoyMDAwLENMRSxBTCxrYW1pZXNjMDEsMTg1MDAwMA0KMjAwMCxDTEUsQUwsc2h1ZXlwYTAxLDE2MTc2NjcNCjIwMDAsQ0xFLEFMLHJlZWRzdDAxLDE2MDAwMDANCjIwMDAsQ0xFLEFMLGthcnNhc3QwMSwxMjAwMDAwDQoyMDAwLENMRSxBTCxjb2xvbmJhMDEsMTEyNTAwMA0KMjAwMCxDTEUsQUwsd3JpZ2hqYTAyLDEwNjI1MDANCjIwMDAsQ0xFLEFMLHJpbmNvcmkwMSwxMDAwMDAwDQoyMDAwLENMRSxBTCx3aXR0Ym8wMSw1NTAwMDANCjIwMDAsQ0xFLEFMLHNleHNvcmkwMSwyNDcwMDANCjIwMDAsQ0xFLEFMLGRpYXplaTAxLDIzNzUwMA0KMjAwMCxDTEUsQUwsd2lsc29lbjAxLDIzMjUwMA0KMjAwMCxDTEUsQUwsY3J1emphMDEsMjI3NTAwDQoyMDAwLENMRSxBTCxtYXJ0aXRvMDIsMjI1MDAwDQoyMDAwLENMRSxBTCxyYW1pcmFsMDIsMjE3NTAwDQoyMDAwLENMRSxBTCxyaXNrZWRhMDEsMjA1MDAwDQoyMDAwLERFVCxBTCxnb256YWp1MDMsNzUwMDAwMA0KMjAwMCxERVQsQUwscGFsbWVkZTAxLDcwMDAwMDANCjIwMDAsREVULEFMLGJsYWlyd2kwMSw0NTAwMDAwDQoyMDAwLERFVCxBTCxtbGlja2RhMDEsNDUwMDAwMA0KMjAwMCxERVQsQUwsaGlnZ2libzAyLDQ0MjUwMDANCjIwMDAsREVULEFMLGNsYXJrdG8wMiw0MDYyNTAwDQoyMDAwLERFVCxBTCxhdXNtdWJyMDEsNDAwMDAwMA0KMjAwMCxERVQsQUwsZWFzbGVkYTAxLDM5NTAwMDANCjIwMDAsREVULEFMLGpvbmVzdG8wMiwzNjUwMDAwDQoyMDAwLERFVCxBTCxqZWZmZWdyMDEsMzEyNTAwMA0KMjAwMCxERVQsQUwsY3J1emRlMDEsMTk3NTAwMA0KMjAwMCxERVQsQUwsbW9laGxicjAxLDE4MTY2NjcNCjIwMDAsREVULEFMLGJyb2NhZG8wMSwxMzAwMDAwDQoyMDAwLERFVCxBTCxwb2xvbmx1MDEsMTEwMDAwMA0KMjAwMCxERVQsQUwsbm9tb2hpMDEsMTAwMDAwMA0KMjAwMCxERVQsQUwsbml0a29jajAxLDk1MDAwMA0KMjAwMCxERVQsQUwsZ2FyY2lrYTAxLDcwMDAwMA0KMjAwMCxERVQsQUwscGF0dGVkYTA0LDU1MDAwMA0KMjAwMCxERVQsQUwsZW5jYXJqdTAxLDMyNTAwMA0KMjAwMCxERVQsQUwscnVueWFzZTAxLDMwMDAwMA0KMjAwMCxERVQsQUwsYW5kZXJtYTAxLDI1NTAwMA0KMjAwMCxERVQsQUwsZ3JlaXNzZTAxLDI0MDAwMA0KMjAwMCxERVQsQUwsaGFsdGVzaDAxLDIzNjAwMA0KMjAwMCxERVQsQUwsbWFnZWV3ZTAxLDIwNTAwMA0KMjAwMCxERVQsQUwsZmlja3JvMDEsMjAwMDAwDQoyMDAwLERFVCxBTCxqb2huc21hMDMsMjAwMDAwDQoyMDAwLERFVCxBTCxwb29sZWppMDIsMjAwMDAwDQoyMDAwLEtDQSxBTCxkYW1vbmpvMDEsNDAwMDAwMA0KMjAwMCxLQ0EsQUwsZHllamUwMSwyMzAwMDAwDQoyMDAwLEtDQSxBTCxzYW5jaHJlMDEsMjMwMDAwMA0KMjAwMCxLQ0EsQUwscm9zYWRqbzAxLDIyNTAwMDANCjIwMDAsS0NBLEFMLHN3ZWVubWkwMSwyMjUwMDAwDQoyMDAwLEtDQSxBTCxib3R0YXJpMDEsMTUwMDAwMA0KMjAwMCxLQ0EsQUwsc3VwcGFqZTAxLDE0NTAwMDANCjIwMDAsS0NBLEFMLHJhbmRham8wMSwxMDAwMDAwDQoyMDAwLEtDQSxBTCxzcHJhZGplMDEsOTYyNTAwDQoyMDAwLEtDQSxBTCxyZWJvdWplMDEsNTc1MDAwDQoyMDAwLEtDQSxBTCxqb2huc2JyMDEsNTUwMDAwDQoyMDAwLEtDQSxBTCx6YXVuZ3IwMSw1MjUwMDANCjIwMDAsS0NBLEFMLGJlbHRyY2EwMSwzNTAwMDANCjIwMDAsS0NBLEFMLG1jY2FyZGEwMSwzMjUwMDANCjIwMDAsS0NBLEFMLGZlYmxlY2EwMSwyNTAwMDANCjIwMDAsS0NBLEFMLHdpdGFzamEwMSwyNTAwMDANCjIwMDAsS0NBLEFMLGR1bndvdG8wMSwyMzI1MDANCjIwMDAsS0NBLEFMLHBvc2VzYzAxLDIzMjUwMA0KMjAwMCxLQ0EsQUwsaG9sYmVyYTAxLDIyNTAwMA0KMjAwMCxLQ0EsQUwsc3RlaW5ibDAxLDIyNTAwMA0KMjAwMCxLQ0EsQUwscmlnYnlicjAxLDIyMDAwMA0KMjAwMCxLQ0EsQUwsc3V6dWttYTAxLDIyMDAwMA0KMjAwMCxLQ0EsQUwsc2FudGlqbzAzLDIxNTAwMA0KMjAwMCxLQ0EsQUwsZnVzc2VjaDAxLDIxMDAwMA0KMjAwMCxLQ0EsQUwscXVpbm5tYTAxLDIwNTAwMA0KMjAwMCxLQ0EsQUwscmVpY2hkYTAxLDIwNTAwMA0KMjAwMCxLQ0EsQUwsZHVyYmljaDAxLDIwMzAwMA0KMjAwMCxLQ0EsQUwsbW9yZW5vcjAxLDIwMjUwMA0KMjAwMCxNSU4sQUwscmFka2VicjAxLDM1MDAwMDANCjIwMDAsTUlOLEFMLGxhd3RvbWEwMiwyMDAwMDAwDQoyMDAwLE1JTixBTCxjb29tZXJvMDEsMTUwMDAwMA0KMjAwMCxNSU4sQUwsYmVyZ21zZTAxLDEyMDAwMDANCjIwMDAsTUlOLEFMLGhhd2tpbGEwMSwxMTE1MDAwDQoyMDAwLE1JTixBTCxndWFyZGVkMDEsODc1MDAwDQoyMDAwLE1JTixBTCxjYXJyYWhlMDEsODI1MDAwDQoyMDAwLE1JTixBTCx3ZWxsc2JvMDEsNzAwMDAwDQoyMDAwLE1JTixBTCxob2NraWRlMDEsNTAwMDAwDQoyMDAwLE1JTixBTCxodXNrZWJ1MDEsNTAwMDAwDQoyMDAwLE1JTixBTCx3YWxrZXRvMDQsMzIyNTAwDQoyMDAwLE1JTixBTCxjdW1taW1pMDEsMzAwMDAwDQoyMDAwLE1JTixBTCxqZW5zZW1hMDEsMjg1MDAwDQoyMDAwLE1JTixBTCxtaWx0b2VyMDEsMjg1MDAwDQoyMDAwLE1JTixBTCxrb3NraWNvMDEsMjQ1MDAwDQoyMDAwLE1JTixBTCxtYXlzam8wMSwyNDAwMDANCjIwMDAsTUlOLEFMLGd1em1hY3IwMSwyMzAwMDANCjIwMDAsTUlOLEFMLGh1bnRldG8wMSwyMjUwMDANCjIwMDAsTUlOLEFMLGpvbmVzamEwNCwyMjUwMDANCjIwMDAsTUlOLEFMLG1pbGxldHIwMSwyMjUwMDANCjIwMDAsTUlOLEFMLG9ydGl6ZGEwMSwyMjAwMDANCjIwMDAsTUlOLEFMLG1heHdlamEwMSwyMDIwMDANCjIwMDAsTUlOLEFMLGxlY3JvbWEwMSwyMDAwMDANCjIwMDAsTUlOLEFMLHJlZG1hbWEwMSwyMDAwMDANCjIwMDAsTUlOLEFMLHJvbWVyamMwMSwyMDAwMDANCjIwMDAsTUlOLEFMLHNhbnRham8wMSwyMDAwMDANCjIwMDAsTllBLEFMLHdpbGxpYmUwMiwxMjM1NzE0Mw0KMjAwMCxOWUEsQUwsY29uZWRhMDEsMTIwMDAwMDANCjIwMDAsTllBLEFMLGpldGVyZGUwMSwxMDAwMDAwMA0KMjAwMCxOWUEsQUwscml2ZXJtYTAxLDcyNTAwMDANCjIwMDAsTllBLEFMLHBldHRpYW4wMSw3MDAwMDAwDQoyMDAwLE5ZQSxBTCxvbmVpbHBhMDEsNjUwMDAwMA0KMjAwMCxOWUEsQUwsY2xlbWVybzAyLDYzNTAwMDANCjIwMDAsTllBLEFMLGtub2JsY2gwMSw2MDAwMDAwDQoyMDAwLE5ZQSxBTCxicm9zaXNjMDEsNTI1MDAwMA0KMjAwMCxOWUEsQUwsbWFydGl0aTAyLDQ4MDAwMDANCjIwMDAsTllBLEFMLHN0YW50bWkwMiwyNDAwMDAwDQoyMDAwLE5ZQSxBTCxoZXJuYW9yMDEsMTk1MDAwMA0KMjAwMCxOWUEsQUwsbmVsc29qZTAxLDE5MTY2NjcNCjIwMDAsTllBLEFMLG1lbmRvcmEwMSwxNDAwMDAwDQoyMDAwLE5ZQSxBTCx3YXRzb2FsMDEsMTMwMDAwMA0KMjAwMCxOWUEsQUwscG9zYWRqbzAxLDEyNTAwMDANCjIwMDAsTllBLEFMLGxleXJpamkwMSwxMDAwMDAwDQoyMDAwLE5ZQSxBTCxrZWxseXJvMDEsODAwMDAwDQoyMDAwLE5ZQSxBTCxncmltc2phMDEsNzUwMDAwDQoyMDAwLE5ZQSxBTCxqb2huc2xhMDMsMzUwMDAwDQoyMDAwLE5ZQSxBTCxzcGVuY3NoMDEsMjUwMDAwDQoyMDAwLE5ZQSxBTCxsZWRlZXJpMDEsMjQwMDAwDQoyMDAwLE5ZQSxBTCxkZWxnYXdpMDEsMjEzMDAwDQoyMDAwLE5ZQSxBTCxiZWxsaWNsMDEsMjA2NjUwDQoyMDAwLE5ZQSxBTCxlcmRvc3RvMDEsMjAzODAwDQoyMDAwLE5ZQSxBTCxsaWxseXRlMDEsMjAxMDAwDQoyMDAwLE5ZQSxBTCxqaW1lbmRhMDEsMjAwMDAwDQoyMDAwLE5ZQSxBTCxqb2huc25pMDEsMjAwMDAwDQoyMDAwLE9BSyxBTCxhcHBpZWtlMDEsNTYwMDAwMA0KMjAwMCxPQUssQUwsb2xpdmFvbTAxLDQwMDAwMDANCjIwMDAsT0FLLEFMLGdpYW1iamEwMSwzMTAzMzMzDQoyMDAwLE9BSyxBTCxzdGFpcm1hMDEsMzA1MDAwMA0KMjAwMCxPQUssQUwsdmVsYXJyYTAxLDMwNTAwMDANCjIwMDAsT0FLLEFMLGphaGFqbzAxLDI3NTAwMDANCjIwMDAsT0FLLEFMLGhlcmVkZ2kwMSwyMTAwMDAwDQoyMDAwLE9BSyxBTCxtYXRoZXRqMDEsMTIyNTAwMA0KMjAwMCxPQUssQUwsbWFnbmFtaTAxLDkwMDAwMA0KMjAwMCxPQUssQUwsaXNyaW5qYTAxLDgyNTAwMA0KMjAwMCxPQUssQUwsZ3JpZXZiZTAxLDc1MDAwMA0KMjAwMCxPQUssQUwsam9uZXNkbzAxLDYwMDAwMA0KMjAwMCxPQUssQUwsYmVja2VyaTAxLDUwMDAwMA0KMjAwMCxPQUssQUwsc2VydmlzYzAxLDUwMDAwMA0KMjAwMCxPQUssQUwsdGVqYWRtaTAxLDI5MDAwMA0KMjAwMCxPQUssQUwsc2FlbnpvbDAxLDI2MDAwMA0KMjAwMCxPQUssQUwsaHVkc290aTAxLDI1MDAwMA0KMjAwMCxPQUssQUwsY2hhdmVlcjAxLDI0MDAwMA0KMjAwMCxPQUssQUwsZmFzYW5zYTAxLDI0MDAwMA0KMjAwMCxPQUssQUwsdGFtamUwMSwyNDAwMDANCjIwMDAsT0FLLEFMLGdpYW1iamUwMSwyMjgwMDANCjIwMDAsT0FLLEFMLGNocmlzcnkwMSwyMjEwMDANCjIwMDAsT0FLLEFMLHZlbGFuam8wMSwyMTk1MDANCjIwMDAsT0FLLEFMLG1haGF5cm8wMSwyMTcwMDANCjIwMDAsT0FLLEFMLGhlcm5hcmEwMiwyMTEwMDANCjIwMDAsT0FLLEFMLG1lbmVjZnIwMSwyMDEwMDANCjIwMDAsT0FLLEFMLHZpemNhbHUwMSwyMDA1MDANCjIwMDAsU0VBLEFMLHNlbGVhYTAxLDc1MDAwMDANCjIwMDAsU0VBLEFMLG9sZXJ1am8wMSw2MzUwMDAwDQoyMDAwLFNFQSxBTCxtb3llcmphMDEsNjAwMDAwMA0KMjAwMCxTRUEsQUwsbWFydGllZDAxLDU0MDAwMDANCjIwMDAsU0VBLEFMLHJvZHJpYWwwMSw0MzYyNTAwDQoyMDAwLFNFQSxBTCxzYXNha2thMDEsNDAwMDAwMA0KMjAwMCxTRUEsQUwsd2lsc29kYTAxLDQwMDAwMDANCjIwMDAsU0VBLEFMLG1lc2FqbzAxLDM5NTAwMDANCjIwMDAsU0VBLEFMLHJob2RlYXIwMSwyNzUwMDAwDQoyMDAwLFNFQSxBTCxjYW1lcm1pMDEsMjIyNTAwMA0KMjAwMCxTRUEsQUwsbWNsZW1tYTAxLDIwMDAwMDANCjIwMDAsU0VBLEFMLG1hYnJ5am8wMSwxODUwMDAwDQoyMDAwLFNFQSxBTCxqYXZpZXN0MDEsMTUwMDAwMA0KMjAwMCxTRUEsQUwsYnVobmVqYTAxLDE0NTAwMDANCjIwMDAsU0VBLEFMLGJlbGxkYTAxLDE0MjUwMDANCjIwMDAsU0VBLEFMLGxhbXBrdG8wMSw5NTAwMDANCjIwMDAsU0VBLEFMLHJvZHJpZnIwMiw1ODAwMDANCjIwMDAsU0VBLEFMLG9saXZlam8wMSw1MDAwMDANCjIwMDAsU0VBLEFMLGdhcmNpZnIwMiwzMjUwMDANCjIwMDAsU0VBLEFMLGhhbGFtam8wMSwyOTAwMDANCjIwMDAsU0VBLEFMLGFiYm90cGEwMSwyODUwMDANCjIwMDAsU0VBLEFMLGliYW5lcmEwMSwyNzUwMDANCjIwMDAsU0VBLEFMLHBhbmlham8wMSwyNzUwMDANCjIwMDAsU0VBLEFMLG1lY2hlZ2kwMSwyNTI1MDANCjIwMDAsU0VBLEFMLGdpcHNvY2gwMSwyMTUwMDANCjIwMDAsU0VBLEFMLGd1aWxsY2EwMSwyMDUwMDANCjIwMDAsVEJBLEFMLGFsdmFyd2kwMSw5MDAwMDAwDQoyMDAwLFRCQSxBTCx2YXVnaGdyMDEsNzA5Nzk2Mg0KMjAwMCxUQkEsQUwsY2FzdGl2aTAyLDYyNTAwMDANCjIwMDAsVEJBLEFMLGd1em1hanUwMSw2MDAwMDAwDQoyMDAwLFRCQSxBTCxoZXJuYXJvMDEsNjAwMDAwMA0KMjAwMCxUQkEsQUwsbWNncmlmcjAxLDU5NDU4MTgNCjIwMDAsVEJBLEFMLHN0b2Nra2UwMSwzMzAwMDAwDQoyMDAwLFRCQSxBTCxjYW5zZWpvMDEsMzAwMDAwMA0KMjAwMCxUQkEsQUwsZmxhaGVqbzAxLDI5NDc0MTANCjIwMDAsVEJBLEFMLHdpbGxpZ2UwMiwyMzczNDM5DQoyMDAwLFRCQSxBTCxtYXJ0aWRhMDEsMjAwMDAwMA0KMjAwMCxUQkEsQUwsbWNjcmFxdTAxLDE4NTAwMDANCjIwMDAsVEJBLEFMLHRyYWNoc3QwMSwxMDAwMDAwDQoyMDAwLFRCQSxBTCxsb3BlemFsMDIsODAwMDAwDQoyMDAwLFRCQSxBTCx3aGl0ZXJpMDEsNjEwMDAwDQoyMDAwLFRCQSxBTCxkaWZlbG1pMDEsNTI1MDAwDQoyMDAwLFRCQSxBTCxzYXVuZHRvMDEsNDI1MDAwDQoyMDAwLFRCQSxBTCxndWlsbGpvMDEsMzc1MDAwDQoyMDAwLFRCQSxBTCxtZWNpcmppMDEsMzUwMDAwDQoyMDAwLFRCQSxBTCxlaWxhbmRhMDEsMzAwMDAwDQoyMDAwLFRCQSxBTCxjYWlyb21pMDEsMjk1MDAwDQoyMDAwLFRCQSxBTCxncmFmZnRvMDEsMjcwMDAwDQoyMDAwLFRCQSxBTCxyZWthcmJyMDEsMjY1MDAwDQoyMDAwLFRCQSxBTCx5YW5lczAxLDI2NTAwMA0KMjAwMCxUQkEsQUwsdHJhbW1idTAxLDI1MzAwMA0KMjAwMCxUQkEsQUwsc21pdGhibzA2LDIzNzUwMA0KMjAwMCxUQkEsQUwscnVwZXJ5MDEsMjMwMDAwDQoyMDAwLFRCQSxBTCxjb3hzdDAxLDIwMDAwMA0KMjAwMCxUQkEsQUwsbW9ycmlqaTAyLDIwMDAwMA0KMjAwMCxUQkEsQUwscm9sbHNkYTAxLDIwMDAwMA0KMjAwMCxUQkEsQUwsd2hlZWxkYTAxLDIwMDAwMA0KMjAwMCxURVgsQUwscGFsbWVyYTAxLDg2MjA5MjENCjIwMDAsVEVYLEFMLHJvZHJpaXYwMSw4NjAwMDAwDQoyMDAwLFRFWCxBTCxyb2dlcmtlMDEsNzUwMDAwMA0KMjAwMCxURVgsQUwsd2V0dGVqbzAxLDY1MDAwMDANCjIwMDAsVEVYLEFMLGNsYXJrbWEwMSw1MDAwMDAwDQoyMDAwLFRFWCxBTCxvbGl2ZWRhMDIsNTAwMDAwMA0KMjAwMCxURVgsQUwsY2xheXRybzAxLDQ1MDAwMDANCjIwMDAsVEVYLEFMLHNlZ3VpZGEwMSw0MzI1MDAwDQoyMDAwLFRFWCxBTCxoZWxsaXJpMDEsMzc1MDAwMA0KMjAwMCxURVgsQUwsZ3JlZXJydTAxLDM2MDAwMDANCjIwMDAsVEVYLEFMLHRob21wanUwMiwzMDI1MDAwDQoyMDAwLFRFWCxBTCxsb2FpemVzMDEsMjY1MDAwMA0KMjAwMCxURVgsQUwsY3VydGljaDAxLDIwMDAwMDANCjIwMDAsVEVYLEFMLGhhc2VsYmkwMSwxMTAwMDAwDQoyMDAwLFRFWCxBTCxjcmFidHRpMDEsOTc1MDAwDQoyMDAwLFRFWCxBTCxhbGljZWx1MDEsNzUwMDAwDQoyMDAwLFRFWCxBTCxtdW5vem1pMDEsNzUwMDAwDQoyMDAwLFRFWCxBTCxjYXRhbGZyMDEsMzA1MDAwDQoyMDAwLFRFWCxBTCxrYXBsZWdhMDEsMjgwMDAwDQoyMDAwLFRFWCxBTCx6aW1tZWplMDIsMjUwMDAwDQoyMDAwLFRFWCxBTCx2ZW5hZm1pMDEsMjQ1MDAwDQoyMDAwLFRFWCxBTCxtYXRlb3J1MDEsMjMwMDAwDQoyMDAwLFRFWCxBTCxldmFuc3RvMDEsMjIwMDAwDQoyMDAwLFRFWCxBTCxwZXJpc21hMDEsMjIwMDAwDQoyMDAwLFRFWCxBTCxjb3JkZWZyMDEsMjAwMDAwDQoyMDAwLFRFWCxBTCxzaGVsZHNjMDEsMjAwMDAwDQoyMDAwLFRPUixBTCxtb25kZXJhMDEsMTAwMDAwMDANCjIwMDAsVE9SLEFMLGRlbGdhY2EwMSw2NjAwMDAwDQoyMDAwLFRPUixBTCxoYW1pbGpvMDIsNTUwMDAwMA0KMjAwMCxUT1IsQUwsd2VsbHNkYTAxLDU1MDAwMDANCjIwMDAsVE9SLEFMLGdvbnphYWwwMSwzMDI1MDAwDQoyMDAwLFRPUixBTCxmbGV0Y2RhMDEsMjUwMDAwMA0KMjAwMCxUT1IsQUwscXVhbnRwYTAxLDE4MDAwMDANCjIwMDAsVE9SLEFMLGJ1c2hobzAxLDE0NTAwMDANCjIwMDAsVE9SLEFMLHBhaW50bGEwMSw5MDAwMDANCjIwMDAsVE9SLEFMLGJvcmJvcGUwMiw4MDAwMDANCjIwMDAsVE9SLEFMLGdyZWJlY3IwMSw4MDAwMDANCjIwMDAsVE9SLEFMLGNhcnBlY2gwMSw3MzMzMzMNCjIwMDAsVE9SLEFMLGZyYXNjam8wMSw3MDAwMDANCjIwMDAsVE9SLEFMLHN0ZXdhc2gwMSw2ODMzMzMNCjIwMDAsVE9SLEFMLGNvcmRvbWEwMSw1MDAwMDANCjIwMDAsVE9SLEFMLGVzY29ia2UwMSw1MDAwMDANCjIwMDAsVE9SLEFMLGNhc3RpYWwwMSw0MjUwMDANCjIwMDAsVE9SLEFMLGNydXpqbzAyLDM5NTAwMA0KMjAwMCxUT1IsQUwsaGFsbGFybzAxLDM4MzMzMw0KMjAwMCxUT1IsQUwsY2FzdGlmcjAxLDM3NTAwMA0KMjAwMCxUT1IsQUwsa29jaGJpMDEsMzMzMzMzDQoyMDAwLFRPUixBTCxmdWxsbWJyMDEsMzEwMDAwDQoyMDAwLFRPUixBTCxtdW5yb3BlMDEsMjIwMDAwDQoyMDAwLFRPUixBTCx3b29kd2NoMDEsMjA1MDAwDQoyMDAwLFRPUixBTCx3aXNlZGUwMSwyMDAwMDANCjIwMDAsQVJJLE5MLGpvaG5zcmEwNSwxMzM1MDAwMA0KMjAwMCxBUkksTkwsd2lsbGltYTA0LDg1MDAwMDANCjIwMDAsQVJJLE5MLHN0b3R0dG8wMSw4MDAwMDAwDQoyMDAwLEFSSSxOTCxiZWxsamEwMSw3MDAwMDAwDQoyMDAwLEFSSSxOTCxkYWFsb20wMSw1NjI1MDAwDQoyMDAwLEFSSSxOTCxmaW5sZXN0MDEsNTM3NTAwMA0KMjAwMCxBUkksTkwsZ2lsa2ViZTAxLDUyNTAwMDANCjIwMDAsQVJJLE5MLHJleW5vYXIwMiwzMzc1MDAwDQoyMDAwLEFSSSxOTCxnb256YWx1MDEsMzMzMzMzMw0KMjAwMCxBUkksTkwsbWFudGVtYTAxLDI4MzEwMDANCjIwMDAsQVJJLE5MLHdvbWFjdG8wMSwyNTAwMDAwDQoyMDAwLEFSSSxOTCxhbmRlcmJyMDIsMjI1MDAwMA0KMjAwMCxBUkksTkwsaG9sbWVkYTAxLDE5MTY2NjcNCjIwMDAsQVJJLE5MLHN3aW5kZ3IwMSwxODMzMzMzDQoyMDAwLEFSSSxOTCxzcHJpbnJ1MDEsMTcyNTAwMA0KMjAwMCxBUkksTkwscGxlc2FkYTAxLDE1MDAwMDANCjIwMDAsQVJJLE5MLGhhcnJpbGUwMSwxMTAwMDAwDQoyMDAwLEFSSSxOTCxjb2xicmdyMDEsMTAwNTAwMA0KMjAwMCxBUkksTkwsc3Rpbm5rZTAxLDEwMDAwMDANCjIwMDAsQVJJLE5MLGtpbWJ5MDEsNzYyNTAwDQoyMDAwLEFSSSxOTCxmb3hhbjAxLDc1MDAwMA0KMjAwMCxBUkksTkwsbGVldHIwMSw1MDAwMDANCjIwMDAsQVJJLE5MLGRlbGx1ZGEwMSwzMTI1MDANCjIwMDAsQVJJLE5MLG1pbGxlZGEwMiwzMDAwMDANCjIwMDAsQVJJLE5MLGR1cmF6ZXIwMSwyNjAwMDANCjIwMDAsQVJJLE5MLGZyaWFzaGEwMSwyNDM1MDANCjIwMDAsQVJJLE5MLGtsYXNzZGEwMSwyMTUwMDANCjIwMDAsQVJJLE5MLG9yZGF6bHUwMSwyMTUwMDANCjIwMDAsQVRMLE5MLG1hZGR1Z3IwMSwxMTEwMDAwMA0KMjAwMCxBVEwsTkwsZ2xhdml0bzAyLDk0NjMyMzcNCjIwMDAsQVRMLE5MLGdhbGFyYW4wMSw4NTAwMDAwDQoyMDAwLEFUTCxOTCxzbW9sdGpvMDEsODUwMDAwMA0KMjAwMCxBVEwsTkwsam9yZGFicjAxLDc2MDAwMDANCjIwMDAsQVRMLE5MLGxvcGV6amEwMSw2MjUwMDAwDQoyMDAwLEFUTCxOTCxqb25lc2NoMDYsNDc1MDAwMA0KMjAwMCxBVEwsTkwsam9uZXNhbjAxLDM3MDAwMDANCjIwMDAsQVRMLE5MLHNhbmRlcmUwMiwzNzAwMDAwDQoyMDAwLEFUTCxOTCxqb3luZXdhMDEsMzM2NTA5OQ0KMjAwMCxBVEwsTkwsdmVyYXNxdTAxLDMwMDAwMDANCjIwMDAsQVRMLE5MLHdlaXNzd2EwMSwzMDAwMDAwDQoyMDAwLEFUTCxOTCxtdWxob3RlMDEsMjk3NTAwMA0KMjAwMCxBVEwsTkwsc2VhbmVydTAxLDE2NTAwMDANCjIwMDAsQVRMLE5MLHJlbWxpbWkwMSwxNDAwMDAwDQoyMDAwLEFUTCxOTCxsb2NraGtlMDEsMTAwMDAwMA0KMjAwMCxBVEwsTkwsYnVya2VqbzAzLDc1MDAwMA0KMjAwMCxBVEwsTkwscGVyZXplZDAyLDY1MDAwMA0KMjAwMCxBVEwsTkwsbWlsbHdrZTAxLDQyMDAwMA0KMjAwMCxBVEwsTkwsaHViYmF0cjAxLDQwMDAwMA0KMjAwMCxBVEwsTkwsbWNtaWNncjAxLDM1MDAwMA0KMjAwMCxBVEwsTkwscm9ja2VqbzAxLDI5MDAwMA0KMjAwMCxBVEwsTkwsbGlndGVrZTAxLDI1NTAwMA0KMjAwMCxBVEwsTkwsbWNnbGlrZTAxLDI0MjAwMA0KMjAwMCxBVEwsTkwscGVyZXpvZDAxLDIyMDAwMA0KMjAwMCxBVEwsTkwsY2hlbmJyMDEsMjA3NTAwDQoyMDAwLEFUTCxOTCxib25pbGJvMDEsMjAwMDAwDQoyMDAwLEFUTCxOTCxjb3J0ZWRhMDEsMjAwMDAwDQoyMDAwLEFUTCxOTCxmdXJjYXJhMDEsMjAwMDAwDQoyMDAwLEFUTCxOTCxyaXZlcmx1MDIsMjAwMDAwDQoyMDAwLENITixOTCxzb3Nhc2EwMSwxMTAwMDAwMA0KMjAwMCxDSE4sTkwsdGFwYW5rZTAxLDYwMDAwMDANCjIwMDAsQ0hOLE5MLHZhbGRlaXMwMSw1NzM3NTAwDQoyMDAwLENITixOTCxncmFjZW1hMDEsNTMwMDAwMA0KMjAwMCxDSE4sTkwscm9kcmloZTAyLDQ2MDAwMDANCjIwMDAsQ0hOLE5MLHlvdW5nZXIwMSw0NTAwMDAwDQoyMDAwLENITixOTCxsaWViZWpvMDEsMzgzMzMzMw0KMjAwMCxDSE4sTkwsYWd1aWxyaTAxLDM1MDAwMDANCjIwMDAsQ0hOLE5MLGd1dGllcmkwMSwyNTAwMDAwDQoyMDAwLENITixOTCxnaXJhcmpvMDEsMjAwMDAwMA0KMjAwMCxDSE4sTkwsZ3V0aHJtYTAxLDE2MDAwMDANCjIwMDAsQ0hOLE5MLGhpbGxnbDAxLDE1MDAwMDANCjIwMDAsQ0hOLE5MLGJ1Zm9yZGEwMSwxMTAwMDAwDQoyMDAwLENITixOTCxhbmRyZXNoMDEsMTAwMDAwMA0KMjAwMCxDSE4sTkwscmVlZGplMDIsMTAwMDAwMA0KMjAwMCxDSE4sTkwsa2FyY2htYTAxLDc3NjAwMA0KMjAwMCxDSE4sTkwsd29vZGtlMDIsNjkwMDAwDQoyMDAwLENITixOTCxoZXJlZGZlMDEsNjI1MDAwDQoyMDAwLENITixOTCx3aWxsaWJyMDEsNjAwMDAwDQoyMDAwLENITixOTCxncmVlbndpMDEsMzk1MDAwDQoyMDAwLENITixOTCxodXNvbmplMDEsMzAwMDAwDQoyMDAwLENITixOTCxnb256YWplMDEsMjY1MDAwDQoyMDAwLENITixOTCxsb3JyYWFuMDEsMjQ1MDAwDQoyMDAwLENITixOTCxmYXJuc2t5MDEsMjM1MDAwDQoyMDAwLENITixOTCxuaWV2ZWpvMDEsMjE3NTAwDQoyMDAwLENITixOTCxicm93bnJvMDEsMjEwMDAwDQoyMDAwLENITixOTCxsaW5pYWNvMDEsMjA1MDAwDQoyMDAwLENITixOTCxtb2xpbmpvMDEsMjA1MDAwDQoyMDAwLENITixOTCxicm9ja3RhMDEsMjAwMDAwDQoyMDAwLENITixOTCx5b3VuZ2RhMDEsMjAwMDAwDQoyMDAwLENJTixOTCxncmlmZmtlMDIsOTMyOTcwMA0KMjAwMCxDSU4sTkwsYmljaGVkYTAxLDcwMDAwMDANCjIwMDAsQ0lOLE5MLGxhcmtpYmEwMSw1MzAwMDAwDQoyMDAwLENJTixOTCxuZWFnbGRlMDEsNDc1MDAwMA0KMjAwMCxDSU4sTkwsaGFybmlwZTAxLDMyNTAwMDANCjIwMDAsQ0lOLE5MLHJlZXNlcG8wMSwxOTUwMDAwDQoyMDAwLENJTixOTCx5b3VuZ2RtMDEsMTk1MDAwMA0KMjAwMCxDSU4sTkwsdHVja2VtaTAxLDE3MDAwMDANCjIwMDAsQ0lOLE5MLHZpbGxvcm8wMSwxNjAwMDAwDQoyMDAwLENJTixOTCxwYXJyaXN0MDEsMTQwMDAwMA0KMjAwMCxDSU4sTkwsdGF1YmVlZDAxLDE0MDAwMDANCjIwMDAsQ0lOLE5MLHN1bGxpc2MwMSwxMTAwMDAwDQoyMDAwLENJTixOTCxvY2hvYWFsMDEsODYyNTAwDQoyMDAwLENJTixOTCxzYW50aWJlMDEsNjUwMDAwDQoyMDAwLENJTixOTCx3aGl0ZWdhMDEsNjMwMDAwDQoyMDAwLENJTixOTCxsZXdpc21hMDEsNjAwMDAwDQoyMDAwLENJTixOTCxtb3JyaWhhMDIsNTAwMDAwDQoyMDAwLENJTixOTCxjYXNleXNlMDEsNDAwMDAwDQoyMDAwLENJTixOTCxncmF2ZWRhMDEsNDAwMDAwDQoyMDAwLENJTixOTCxzdHluZWNoMDEsMzc1MDAwDQoyMDAwLENJTixOTCxib29uZWFhMDEsMzAwMDAwDQoyMDAwLENJTixOTCxzYW5kZWRlMDIsMzAwMDAwDQoyMDAwLENJTixOTCx3aWxsaXNjMDEsMzAwMDAwDQoyMDAwLENJTixOTCxtZXJjYWhlMDEsMjIwMDAwDQoyMDAwLENJTixOTCxiZWxscm8wMSwyMDAwMDANCjIwMDAsQ0lOLE5MLGNyb21lZHQwMSwyMDAwMDANCjIwMDAsQ0lOLE5MLHJleWVzZGUwMSwyMDAwMDANCjIwMDAsQ09MLE5MLHdhbGtlbGEwMSwxMjE0Mjg1Nw0KMjAwMCxDT0wsTkwsYXN0YWNwZTAxLDYzNTAwMDANCjIwMDAsQ09MLE5MLGxhbnNpbWkwMSw2MjUwMDAwDQoyMDAwLENPTCxOTCxrYXJsc2MwMSwzNzAwMDAwDQoyMDAwLENPTCxOTCxjaXJpbGplMDEsMzYwMDAwMA0KMjAwMCxDT0wsTkwsZ29vZHd0bzAxLDM0MTY2NjcNCjIwMDAsQ09MLE5MLGhhbW1vamUwMSwzMTgzMzMzDQoyMDAwLENPTCxOTCxib2hhbmJyMDEsMzAwMDAwMA0KMjAwMCxDT0wsTkwseW9zaGltYTAxLDMwMDAwMDANCjIwMDAsQ09MLE5MLGRpcG90amUwMSwyMzUwMDAwDQoyMDAwLENPTCxOTCxwZXJlem5lMDEsMjIxMjUwMA0KMjAwMCxDT0wsTkwsbWF5bmVicjAxLDE3NTAwMDANCjIwMDAsQ09MLE5MLGJlbGluc3QwMSwxNTAwMDAwDQoyMDAwLENPTCxOTCxoZWx0b3RvMDEsMTMwMDAwMA0KMjAwMCxDT0wsTkwsdGF2YXJqdTAxLDEyMDAwMDANCjIwMDAsQ09MLE5MLG15ZXJzbWkwMSw5MzMzMzMNCjIwMDAsQ09MLE5MLGJyYWdnZGEwMSw3NTAwMDANCjIwMDAsQ09MLE5MLHNodW1wdGUwMSw2NTAwMDANCjIwMDAsQ09MLE5MLHNlcnZhc2MwMSw2MjUwMDANCjIwMDAsQ09MLE5MLGRlamVhbWkwMSw1NjAwMDANCjIwMDAsQ09MLE5MLGxlZGVzYWEwMSw1MjUwMDANCjIwMDAsQ09MLE5MLG1hbnRvamUwMSw0NTAwMDANCjIwMDAsQ09MLE5MLGFycm9qcm8wMSwzMjUwMDANCjIwMDAsQ09MLE5MLGh1bnRlYnIwMiwzMDAwMDANCjIwMDAsQ09MLE5MLHRob21zam8wMSwzMDAwMDANCjIwMDAsQ09MLE5MLGF5YmFybWEwMSwyNzAwMDANCjIwMDAsQ09MLE5MLGppbWVuam8wMSwyNDUwMDANCjIwMDAsQ09MLE5MLGxlZWRhMDEsMjIyNTAwDQoyMDAwLEZMTyxOTCxmZXJuYWFsMDEsNzAwMDAwMA0KMjAwMCxGTE8sTkwsZmxveWRjbDAxLDQ1MDAwMDANCjIwMDAsRkxPLE5MLG1pY2VsZGEwMSwxNTAwMDAwDQoyMDAwLEZMTyxOTCxiYXV0aWRhMDEsNTAwMDAwDQoyMDAwLEZMTyxOTCxjYXN0aWx1MDEsMzkwMDAwDQoyMDAwLEZMTyxOTCxhbGZvbmFuMDEsMzgwMDAwDQoyMDAwLEZMTyxOTCxrb3RzYW1hMDEsMzI0MDAwDQoyMDAwLEZMTyxOTCxtYXJ0aXNhMDEsMzE4MDAwDQoyMDAwLEZMTyxOTCxicm93bmJyMDEsMzE1MDAwDQoyMDAwLEZMTyxOTCxiZXJnZGEwMSwyOTUwMDANCjIwMDAsRkxPLE5MLGdvbnphYWwwMiwyOTUwMDANCjIwMDAsRkxPLE5MLHdpbHNvcHIwMSwyODcwMDANCjIwMDAsRkxPLE5MLGVkbW9uYnIwMSwyNjkwMDANCjIwMDAsRkxPLE5MLGRlbXBzcnkwMSwyNjgwMDANCjIwMDAsRkxPLE5MLG1pbGxha2UwMSwyNjUwMDANCjIwMDAsRkxPLE5MLHNhbmNoamUwMSwyNjUwMDANCjIwMDAsRkxPLE5MLG51bmV6dmwwMSwyNjQwMDANCjIwMDAsRkxPLE5MLGxvb3BlYnIwMSwyNTUwMDANCjIwMDAsRkxPLE5MLGxvd2VsbWkwMSwyNTUwMDANCjIwMDAsRkxPLE5MLHJlZG1vbWkwMSwyNDUwMDANCjIwMDAsRkxPLE5MLGRhcmVudmkwMSwyNDAwMDANCjIwMDAsRkxPLE5MLGxlZWRlMDIsMjI1MDAwDQoyMDAwLEZMTyxOTCxnaWJzb2RlMDEsMjA4MDAwDQoyMDAwLEZMTyxOTCxidXJuZWFqMDEsMjA0MDAwDQoyMDAwLEZMTyxOTCxhbG1hbmFyMDEsMjAzMDAwDQoyMDAwLEZMTyxOTCxjbGFwaWNoMDEsMjAxMDAwDQoyMDAwLEZMTyxOTCx0ZWplcm1pMDEsMjAxMDAwDQoyMDAwLEZMTyxOTCxwZW5ueWJyMDEsMjAwMDAwDQoyMDAwLEhPVSxOTCxiaWdnaWNyMDEsNjc1MDAwMA0KMjAwMCxIT1UsTkwscmV5bm9zaDAxLDY2NjY2NjcNCjIwMDAsSE9VLE5MLGJhZ3dlamUwMSw2NTAwMDAwDQoyMDAwLEhPVSxOTCxhbG91bW8wMSw1MjUwMDAwDQoyMDAwLEhPVSxOTCxsaW1ham8wMSw1MDMyNDQ0DQoyMDAwLEhPVSxOTCxjYW1pbmtlMDEsNDUwMDAwMA0KMjAwMCxIT1UsTkwsd2FnbmViaTAyLDMyMDAwMDANCjIwMDAsSE9VLE5MLGNlZGVucm8wMSwyNDAwMDAwDQoyMDAwLEhPVSxOTCxzcGllcmJpMDEsMTcwMDAwMA0KMjAwMCxIT1UsTkwscG93ZWxqYTA0LDEyNTAwMDANCjIwMDAsSE9VLE5MLGV1c2VidG8wMSwxMTAwMDAwDQoyMDAwLEhPVSxOTCxob2x0Y2gwMSwxMDI1MDAwDQoyMDAwLEhPVSxOTCxoZW5yeWRvMDEsODAwMDAwDQoyMDAwLEhPVSxOTCxib2dhcnRpMDEsNzAwMDAwDQoyMDAwLEhPVSxOTCxtaWVza21hMDEsNzAwMDAwDQoyMDAwLEhPVSxOTCxnb29kZWR3MDEsNTAwMDAwDQoyMDAwLEhPVSxOTCxwZXJlenlvMDEsNTAwMDAwDQoyMDAwLEhPVSxOTCxtYWRkdW1pMDEsMzUwMDAwDQoyMDAwLEhPVSxOTCxoaWRhbHJpMDEsMzMwMDAwDQoyMDAwLEhPVSxOTCxlbGFydHNjMDEsMzAwMDAwDQoyMDAwLEhPVSxOTCxiYWtvcGEwMSwyNzUwMDANCjIwMDAsSE9VLE5MLGpvaG5zcnUwMSwyNjAwMDANCjIwMDAsSE9VLE5MLGJhcmtlZ2wwMSwyNTUwMDANCjIwMDAsSE9VLE5MLGNhYnJlam8wMSwyNTI1MDANCjIwMDAsSE9VLE5MLGRvdGVsb2MwMSwyNDAwMDANCjIwMDAsSE9VLE5MLHdhcmRkYTAxLDIzNzUwMA0KMjAwMCxIT1UsTkwsbWVsdXNtaTAxLDIxNTAwMA0KMjAwMCxMQU4sTkwsYnJvd25rZTAxLDE1NzE0Mjg2DQoyMDAwLExBTixOTCxzaGVmZmdhMDEsOTkxNjY2Nw0KMjAwMCxMQU4sTkwsZ3JlZW5zaDAxLDk0MTY2NjcNCjIwMDAsTEFOLE5MLGh1bmRsdG8wMSw2MTI1MDAwDQoyMDAwLExBTixOTCxzaGF3amUwMSw1MzgzMzMzDQoyMDAwLExBTixOTCxrYXJyb2VyMDEsNTM3NTAwMA0KMjAwMCxMQU4sTkwscGVyZXpjYTAxLDUzMzMzMzMNCjIwMDAsTEFOLE5MLHdoaXRlZGUwMyw0MDAwMDAwDQoyMDAwLExBTixOTCxwYXJrY2gwMSwzODUwMDAwDQoyMDAwLExBTixOTCxkcmVpZmRhMDEsMzcwMDAwMA0KMjAwMCxMQU4sTkwsdml6Y2FqbzAxLDM1MDAwMDANCjIwMDAsTEFOLE5MLGdydWR6bWEwMSwzMDAwMDAwDQoyMDAwLExBTixOTCxtaWxsc2FsMDEsMjI1MDAwMA0KMjAwMCxMQU4sTkwsaGVyc2hvcjAxLDIwMDAwMDANCjIwMDAsTEFOLE5MLGhvbGxhdG8wMSwxNDUwMDAwDQoyMDAwLExBTixOTCxhZGFtc3RlMDEsMTQwMDAwMA0KMjAwMCxMQU4sTkwsb2xzb25ncjAxLDEyNTAwMDANCjIwMDAsTEFOLE5MLGJlbHRyYWQwMSwxMDAwMDAwDQoyMDAwLExBTixOTCxzYW50YWZwMDEsNzUwMDAwDQoyMDAwLExBTixOTCxmZXR0ZW1pMDEsNTUwMDAwDQoyMDAwLExBTixOTCxrcmV1dGNoMDEsNTAwMDAwDQoyMDAwLExBTixOTCxoYW5zZWRhMDEsNDc1MDAwDQoyMDAwLExBTixOTCxlbHN0ZWtlMDEsMzAwMDAwDQoyMDAwLExBTixOTCxvc3VuYWFuMDEsMjUwMDAwDQoyMDAwLExBTixOTCxtYXNhb29uMDEsMjMwMDAwDQoyMDAwLExBTixOTCxoZXJnZW1hMDEsMjA1MDAwDQoyMDAwLE1JTCxOTCxncmlzc21hMDIsNTAwMDAwMA0KMjAwMCxNSUwsTkwsbmF2YXJqYTAxLDUwMDAwMDANCjIwMDAsTUlMLE5MLGJ1cm5pamUwMSw0NDYyNTAwDQoyMDAwLE1JTCxOTCxoZXJuYWpvMDEsMzMzMzMzMw0KMjAwMCxNSUwsTkwsbG9yZXRtYTAxLDI1MDAwMDANCjIwMDAsTUlMLE5MLHdpY2ttYm8wMSwyNDAwMDAwDQoyMDAwLE1JTCxOTCxiZXJyeXNlMDEsMjM1MDAwMA0KMjAwMCxNSUwsTkwsbGVza2FjdTAxLDE0NTAwMDANCjIwMDAsTUlMLE5MLHdyaWdoamEwMSwxMDI1MDAwDQoyMDAwLE1JTCxOTCxoYXluZWppMDEsOTAwMDAwDQoyMDAwLE1JTCxOTCxob3VzdHR5MDEsODM1MDAwDQoyMDAwLE1JTCxOTCxiZXJlamEwMSw4MDAwMDANCjIwMDAsTUlMLE5MLGxvcGV6bHUwMiw3NzUwMDANCjIwMDAsTUlMLE5MLHdlYXRoZGEwMSw2NTAwMDANCjIwMDAsTUlMLE5MLGFjZXZlanUwMSw2MTI1MDANCjIwMDAsTUlMLE5MLHN3ZWVubWEwMSw1MTUwMDANCjIwMDAsTUlMLE5MLHdvb2Rhc3QwMSwzNTAwMDANCjIwMDAsTUlMLE5MLGhheWVzY2gwMSwzMDAwMDANCjIwMDAsTUlMLE5MLGplbmtpZ2UwMSwyODIwMDANCjIwMDAsTUlMLE5MLG1vdXRvbHkwMSwyNzUwMDANCjIwMDAsTUlMLE5MLG1vdXRvamEwMSwyNjAwMDANCjIwMDAsTUlMLE5MLHNueWRlam8wMiwyNTgwMDANCjIwMDAsTUlMLE5MLGZveGNoMDIsMjU1MDAwDQoyMDAwLE1JTCxOTCxiZWxsaXJvMDEsMjUwMDAwDQoyMDAwLE1JTCxOTCxibGFuY2hlMDEsMjM1MDAwDQoyMDAwLE1JTCxOTCxwZXRlcmt5MDEsMjE1MDAwDQoyMDAwLE1JTCxOTCxkZWxvc3ZhMDEsMjEwMDAwDQoyMDAwLE1JTCxOTCxiYXJrZWtlMDEsMjA1MDAwDQoyMDAwLE1JTCxOTCxjb3BwaXJvMDEsMjAxNTAwDQoyMDAwLE1JTCxOTCxjYW5jZXJvMDEsMjAwNTAwDQoyMDAwLE1JTCxOTCxicnVza2ppMDEsMjAwMDAwDQoyMDAwLE1JTCxOTCx3aWxsaW1hMDYsMjAwMDAwDQoyMDAwLE1PTixOTCxpcmFidWhpMDEsNDEyNTAwMA0KMjAwMCxNT04sTkwsd2hpdGVybzAyLDQwMDAwMDANCjIwMDAsTU9OLE5MLGhlcm1hZHUwMSwzNjMzMzMzDQoyMDAwLE1PTixOTCxndWVycnZsMDEsMzUwMDAwMA0KMjAwMCxNT04sTkwsc3RldmVsZTAxLDM1MDAwMDANCjIwMDAsTU9OLE5MLHVyYmludWcwMSwzMjAwMDAwDQoyMDAwLE1PTixOTCxsbG95ZGdyMDEsMzAwMDAwMA0KMjAwMCxNT04sTkwsd2lkZ2VjaDAxLDEzNTAwMDANCjIwMDAsTU9OLE5MLGd1ZXJyd2kwMSw4MjUwMDANCjIwMDAsTU9OLE5MLHRlbGZvYW4wMSw3MDAwMDANCjIwMDAsTU9OLE5MLHdlYnN0bGUwMSw2MDAwMDANCjIwMDAsTU9OLE5MLGtsaW5lc3QwMiwzNTUwMDANCjIwMDAsTU9OLE5MLG1vcmRlbWkwMSwzNTAwMDANCjIwMDAsTU9OLE5MLHZpZHJvam8wMSwzNDAwMDANCjIwMDAsTU9OLE5MLGJhdGlzbWkwMSwzMjUwMDANCjIwMDAsTU9OLE5MLHZhenF1amEwMSwyODAwMDANCjIwMDAsTU9OLE5MLHRodXJtbWkwMSwyNjc1MDANCjIwMDAsTU9OLE5MLGJhcnJlbWkwMSwyNjUwMDANCjIwMDAsTU9OLE5MLGNhYnJlb3IwMSwyNjUwMDANCjIwMDAsTU9OLE5MLHBhdmFuY2EwMSwyNTUwMDANCjIwMDAsTU9OLE5MLGpvbmVzdGUwMiwyMjUwMDANCjIwMDAsTU9OLE5MLHBvd2VsamUwMSwyMTgwMDANCjIwMDAsTU9OLE5MLGJsdW1nZTAxLDIxMDAwMA0KMjAwMCxNT04sTkwsc3RyaWNzYzAxLDIwMjUwMA0KMjAwMCxNT04sTkwsYmVyZ2VwZTAxLDIwMTUwMA0KMjAwMCxNT04sTkwsY29xdWl0cjAxLDIwMTUwMA0KMjAwMCxNT04sTkwsYXJtYXN0bzAyLDIwMDAwMA0KMjAwMCxNT04sTkwsYmxhbmttYTAxLDIwMDAwMA0KMjAwMCxNT04sTkwsaGVubGVibzAxLDIwMDAwMA0KMjAwMCxOWU4sTkwscGlhenptaTAxLDEyMDcxNDI5DQoyMDAwLE5ZTixOTCx2ZW50dXJvMDEsODAwMDAwMA0KMjAwMCxOWU4sTkwsbGVpdGVhbDAxLDc3NTAwMDANCjIwMDAsTllOLE5MLGhhbXB0bWkwMSw1NzUwMDAwDQoyMDAwLE5ZTixOTCxqb25lc2JvMDMsNTM2NjY2Nw0KMjAwMCxOWU4sTkwsYmVsbGRlMDEsNTAwMDAwMA0KMjAwMCxOWU4sTkwscmVlZHJpMDEsNDM3NTAwMA0KMjAwMCxOWU4sTkwsemVpbGV0bzAxLDQzMzMzMzMNCjIwMDAsTllOLE5MLGFsZm9uZWQwMSw0MjI1MDAwDQoyMDAwLE5ZTixOTCxoYW1pbGRhMDIsMzYzMzMzMw0KMjAwMCxOWU4sTkwsYmVuaXRhcjAxLDM0Mzc1MDANCjIwMDAsTllOLE5MLGZyYW5jam8wMSwzMzUwMDAwDQoyMDAwLE5ZTixOTCxvcmRvbnJlMDEsMjI1MDAwMA0KMjAwMCxOWU4sTkwsY29va2RlMDEsMjIwMDAwMA0KMjAwMCxOWU4sTkwsd2VuZGV0dTAxLDIwNTAwMTQNCjIwMDAsTllOLE5MLGhlbmRlcmkwMSwyMDAwMDAwDQoyMDAwLE5ZTixOTCxtYWhvbXBhMDEsNzUwMDAwDQoyMDAwLE5ZTixOTCxyb2RyaXJpMDIsNjAwMDAwDQoyMDAwLE5ZTixOTCxhYmJvdGt1MDEsNTAwMDAwDQoyMDAwLE5ZTixOTCxwcmF0dHRvMDIsNTAwMDAwDQoyMDAwLE5ZTixOTCxmcmFuY21hMDEsNDYyNTAwDQoyMDAwLE5ZTixOTCxudW5uYWpvMDEsMjYwMDAwDQoyMDAwLE5ZTixOTCxhZ2JheWJlMDEsMjIwMDAwDQoyMDAwLE5ZTixOTCxwYXl0b2phMDEsMjE1MDAwDQoyMDAwLE5ZTixOTCxtb3JhbWUwMSwyMTAwMDANCjIwMDAsUEhJLE5MLGFzaGJ5YW4wMSw1OTAwMDAwDQoyMDAwLFBISSxOTCxzY2hpbGN1MDEsNTY1MDAwMA0KMjAwMCxQSEksTkwsZ2FudHJvMDEsNTA2NjY2Nw0KMjAwMCxQSEksTkwsbGllYmVtaTAxLDQ4MzMzMzMNCjIwMDAsUEhJLE5MLGJyb2ducmkwMSw0MjAwMDAwDQoyMDAwLFBISSxOTCxqYWNrc21pMDIsMzAwMDAwMA0KMjAwMCxQSEksTkwsYWJyZXVibzAxLDI5MzMzMzMNCjIwMDAsUEhJLE5MLHJvbGVuc2MwMSwyNzUwMDAwDQoyMDAwLFBISSxOTCxnbGFudmRvMDEsMjAxNjY2Nw0KMjAwMCxQSEksTkwsYnlyZHBhMDEsMTg4NTAwMA0KMjAwMCxQSEksTkwscGVyc29ybzAxLDE0MDAwMDANCjIwMDAsUEhJLE5MLGpvcmRha2UwMSwxMDAwMDAwDQoyMDAwLFBISSxOTCxtb3Jhbm1pMDEsNzUwMDAwDQoyMDAwLFBISSxOTCxhbGRyZXNjMDEsNjAwMDAwDQoyMDAwLFBISSxOTCxhcmlhc2FsMDEsNTUwMDAwDQoyMDAwLFBISSxOTCxicmFudGplMDEsNTAwMDAwDQoyMDAwLFBISSxOTCxkdWNleXJvMDEsNTAwMDAwDQoyMDAwLFBISSxOTCxyZXllc2NhMDEsNTAwMDAwDQoyMDAwLFBISSxOTCxzZWZjaWtlMDEsNDc1MDAwDQoyMDAwLFBISSxOTCxnb21lc3dhMDEsMzkwMDAwDQoyMDAwLFBISSxOTCx0ZWxlbWFtMDEsMzc1MDAwDQoyMDAwLFBISSxOTCxyZWxhZmRlMDEsMzQ1MDAwDQoyMDAwLFBISSxOTCxwcmluY3RvMDEsMzAwMDAwDQoyMDAwLFBISSxOTCxtaWxsZXRyMDIsMjgwMDAwDQoyMDAwLFBISSxOTCxicm9ja2NoMDEsMjUwMDAwDQoyMDAwLFBISSxOTCx3b2xmcmEwMiwyNDAwMDANCjIwMDAsUEhJLE5MLHNjaHJlc3QwMSwyMTAwMDANCjIwMDAsUEhJLE5MLGJ1bGxpamkwMSwyMDUwMDANCjIwMDAsUEhJLE5MLGJveWRqYTAyLDIwMzAwMA0KMjAwMCxQSVQsTkwseW91bmdrZTAxLDU2MjUwMDANCjIwMDAsUElULE5MLG1lYXJlcGEwMSwzMjkwMDAwDQoyMDAwLFBJVCxOTCxzY2htaWphMDEsMjc1MDAwMA0KMjAwMCxQSVQsTkwsa2VuZGFqYTAxLDIyNTAwMDANCjIwMDAsUElULE5MLGNvcmRld2kwMSwyMTY2NjY3DQoyMDAwLFBJVCxOTCxjb3Jkb2ZyMDEsMjA1MDAwMA0KMjAwMCxQSVQsTkwsZ2lsZXNicjAyLDE4MTY2NjcNCjIwMDAsUElULE5MLGNocmlzamEwMSwxMDAwMDAwDQoyMDAwLFBJVCxOTCx3aWxsaW1pMDMsMTAwMDAwMA0KMjAwMCxQSVQsTkwsdmFuZGVqbzAyLDg3NTAwMA0KMjAwMCxQSVQsTkwsd2lsa2ltYTAxLDc1MDAwMA0KMjAwMCxQSVQsTkwsYmVuamFtaTAxLDcwMDAwMA0KMjAwMCxQSVQsTkwscGV0ZXJjaDAxLDU1MDAwMA0KMjAwMCxQSVQsTkwsc29qb2x1MDEsNDUwMDAwDQoyMDAwLFBJVCxOTCxsb2lzZXJpMDEsNDAwMDAwDQoyMDAwLFBJVCxOTCxvc2lra2UwMSw0MDAwMDANCjIwMDAsUElULE5MLHJpdGNodG8wMSwzODAwMDANCjIwMDAsUElULE5MLHNpbHZham8wMSwzMzUwMDANCjIwMDAsUElULE5MLGF2ZW5icjAxLDMyMDAwMA0KMjAwMCxQSVQsTkwsYmVuc29rcjAxLDMwMDAwMA0KMjAwMCxQSVQsTkwsbW9ycml3YTAyLDMwMDAwMA0KMjAwMCxQSVQsTkwsYnJvd25hZDAxLDI4NTAwMA0KMjAwMCxQSVQsTkwsc2F1ZXJzYzAxLDI4NTAwMA0KMjAwMCxQSVQsTkwscmFtaXJhcjAxLDIzMDAwMA0KMjAwMCxQSVQsTkwsYW5kZXJqaTAyLDIxNTAwMA0KMjAwMCxQSVQsTkwsaGVybWFjaDAxLDIwNTAwMA0KMjAwMCxTRE4sTkwsbXllcnNyYTAxLDY5MTY2NjcNCjIwMDAsU0ROLE5MLGhvZmZtdHIwMSw2NjAwMDAwDQoyMDAwLFNETixOTCxnd3lubnRvMDEsNjMwMDAwMA0KMjAwMCxTRE4sTkwsaGl0Y2hzdDAxLDYxMDAwMDANCjIwMDAsU0ROLE5MLGtsZXNrcnkwMSw1NzUwMDAwDQoyMDAwLFNETixOTCx3aWxsaXdvMDIsNDU4MzMzMw0KMjAwMCxTRE4sTkwsYm9vbmVicjAxLDM3NTAwMDANCjIwMDAsU0ROLE5MLGdvbWV6Y2gwMiwyNjAwMDAwDQoyMDAwLFNETixOTCxoZXJuYWNhMDEsMTc1MDAwMA0KMjAwMCxTRE4sTkwsbWFydGlhbDAzLDE3NTAwMDANCjIwMDAsU0ROLE5MLG5ldmlucGgwMSw4NzUwMDANCjIwMDAsU0ROLE5MLGJvZWhyYnIwMSw4MzAwMDANCjIwMDAsU0ROLE5MLHNwcmFnZWQwMiw4MDAwMDANCjIwMDAsU0ROLE5MLG1hZ2FkZGEwMSw3NzUwMDANCjIwMDAsU0ROLE5MLHJpdmVycnUwMSw3MDAwMDANCjIwMDAsU0ROLE5MLHdhbGxkbzAxLDcwMDAwMA0KMjAwMCxTRE4sTkwsY2xlbWVtYTAxLDYwMDAwMA0KMjAwMCxTRE4sTkwsd2hpc2VtYTAxLDQ1MDAwMA0KMjAwMCxTRE4sTkwsb3dlbnNlcjAxLDM3MDAwMA0KMjAwMCxTRE4sTkwsbWVhZG9icjAxLDM2MDAwMA0KMjAwMCxTRE4sTkwsamFja3NkYTA0LDI1MDAwMA0KMjAwMCxTRE4sTkwsbW9udGdzdDAxLDI1MDAwMA0KMjAwMCxTRE4sTkwsbXllcnNybzAxLDI1MDAwMA0KMjAwMCxTRE4sTkwsY3VubmF3aTAxLDIzMDAwMA0KMjAwMCxTRE4sTkwsc2VyYWZkYTAxLDIzMDAwMA0KMjAwMCxTRE4sTkwsbG9ld2VjYTAxLDIyNTAwMA0KMjAwMCxTRE4sTkwsYWxtYW5jYTAxLDIxNTAwMA0KMjAwMCxTRE4sTkwsZ29uemF3aTAxLDIwODAwMA0KMjAwMCxTRE4sTkwsbmV3aGFkYTAxLDIwMzAwMA0KMjAwMCxTRE4sTkwsZGVoYWFrbzAxLDIwMDAwMA0KMjAwMCxTRk4sTkwsYm9uZHNiYTAxLDEwNjU4ODI2DQoyMDAwLFNGTixOTCxrZW50amUwMSw2MDAwMDAwDQoyMDAwLFNGTixOTCxidXJrc2VsMDEsNTUwMDAwMA0KMjAwMCxTRk4sTkwsbmVucm8wMSw1NTAwMDAwDQoyMDAwLFNGTixOTCxzbm93anQwMSw0NzUwMDAwDQoyMDAwLFNGTixOTCxydWV0ZWtpMDEsNDAwMDAwMA0KMjAwMCxTRk4sTkwsZ2FyZG5tYTAxLDMwMDAwMDANCjIwMDAsU0ZOLE5MLGVzdGVzc2gwMSwyNDUwMDAwDQoyMDAwLFNGTixOTCxhdXJpbHJpMDEsMTU1MDAwMA0KMjAwMCxTRk4sTkwsZW1icmVhbDAxLDE0NTAwMDANCjIwMDAsU0ZOLE5MLGhlcm5hbGkwMSwxMzI1MDAwDQoyMDAwLFNGTixOTCxtdWVsbGJpMDIsMTMyNTAwMA0KMjAwMCxTRk4sTkwsam9obnNqbzA3LDExNzUwMDANCjIwMDAsU0ZOLE5MLGJlbmFybWEwMSwxMTI1MDAwDQoyMDAwLFNGTixOTCxkYXZpc3J1MDEsMTAwMDAwMA0KMjAwMCxTRk4sTkwscm9kcmlmZTAxLDUzNzUwMA0KMjAwMCxTRk4sTkwsb3J0aXpydTAxLDQ2MjUwMA0KMjAwMCxTRk4sTkwsY3Jlc3BmZTAxLDIzMjAwMA0KMjAwMCxTRk4sTkwsbmF0aGFqbzAxLDIyNTAwMA0KMjAwMCxTRk4sTkwscmlvc2FyMDEsMjI1MDAwDQoyMDAwLFNGTixOTCxtYXJ0aXJhMDMsMjIwMDAwDQoyMDAwLFNGTixOTCxtaXJhYmRvMDEsMjE1MDAwDQoyMDAwLFNGTixOTCxlc3RhbGJvMDIsMjEwMDAwDQoyMDAwLFNGTixOTCxtdXJyYWNhMDEsMjAyMDAwDQoyMDAwLFNGTixOTCxmdWx0emFhMDEsMjAwMDAwDQoyMDAwLFNGTixOTCx3ZWJlcmJlMDEsMjAwMDAwDQoyMDAwLFNMTixOTCxtY2d3aW1hMDEsOTMzMzMzMw0KMjAwMCxTTE4sTkwsbGFua2ZyYTAxLDc2MDAwMDANCjIwMDAsU0xOLE5MLGtpbGVkYTAxLDc0MTc5ODENCjIwMDAsU0xOLE5MLGhlbnRncGEwMSw2MDAwMDAwDQoyMDAwLFNMTixOTCxlZG1vbmppMDEsNDUwMDAwMA0KMjAwMCxTTE4sTkwsZGF2aXNlcjAxLDQ0MjA4NDANCjIwMDAsU0xOLE5MLGJlbmVzYW4wMSwyODY3NTQyDQoyMDAwLFNMTixOTCxyYWRpbnNjMDEsMjUwMDAwMA0KMjAwMCxTTE4sTkwsdmluYWZlMDEsMjMwMDAwMA0KMjAwMCxTTE4sTkwscmVudGVlZDAxLDIyNTAwMDANCjIwMDAsU0xOLE5MLGRyZXdqZDAxLDE3NTAwMDANCjIwMDAsU0xOLE5MLHNsb2N1aGUwMSwxNjAwMDAwDQoyMDAwLFNMTixOTCx2ZXJlc2RhMDEsMTM2NjY2Nw0KMjAwMCxTTE4sTkwsb3Jvc2NqZTAxLDExMDAwMDANCjIwMDAsU0xOLE5MLG1hdGhlbWkwMSw3NTAwMDANCjIwMDAsU0xOLE5MLHRhdGlzZmUwMSw3NTAwMDANCjIwMDAsU0xOLE5MLG1vaGxlbWkwMSw2OTAwMDANCjIwMDAsU0xOLE5MLGhvd2FydGgwMSw2NTAwMDANCjIwMDAsU0xOLE5MLGR1bnN0c2gwMSw2MDAwMDANCjIwMDAsU0xOLE5MLHBhcXVlY3IwMSw1OTUwMDANCjIwMDAsU0xOLE5MLG1vcnJpbWEwMSw1NTAwMDANCjIwMDAsU0xOLE5MLHN0ZXBoZ2EwMSw1NTAwMDANCjIwMDAsU0xOLE5MLHRob21wbWEwMSw0MDAwMDANCjIwMDAsU0xOLE5MLHdhaW5oZGEwMSwyNTAwMDANCjIwMDAsU0xOLE5MLG1hcnJlZWwwMSwyNDAwMDANCjIwMDAsU0xOLE5MLHBvbGFucGwwMSwyMjAwMDANCjIwMDAsU0xOLE5MLGFua2llcmkwMSwyMDI1MDANCjIwMDEsQU5BLEFMLHZhdWdobW8wMSwxMzE2NjY2Nw0KMjAwMSxBTkEsQUwsc2FsbW90aTAxLDY1MDAwMDANCjIwMDEsQU5BLEFMLGFuZGVyZ2EwMSw0NTAwMDAwDQoyMDAxLEFOQSxBTCxlcnN0YWRhMDEsMzQ1MDAwMA0KMjAwMSxBTkEsQUwscGVyY2l0cjAxLDM0MDAwMDANCjIwMDEsQU5BLEFMLHZhbGRlaXMwMSwyNTAwMDAwDQoyMDAxLEFOQSxBTCxyYXBwcGEwMSwyMDAwMDAwDQoyMDAxLEFOQSxBTCxoYXNlZ3NoMDEsMTUwMDAwMA0KMjAwMSxBTkEsQUwsaGlsbGdsMDEsMTUwMDAwMA0KMjAwMSxBTkEsQUwsZ2xhdXN0cjAxLDEyNTAwMDANCjIwMDEsQU5BLEFMLHNwaWV6c2MwMSwxMTI1MDAwDQoyMDAxLEFOQSxBTCxwYWxtZW9yMDEsOTAwMDAwDQoyMDAxLEFOQSxBTCxsZXZpbmFsMDEsNzE1MDAwDQoyMDAxLEFOQSxBTCxob2x0em1pMDEsNzA1MDAwDQoyMDAxLEFOQSxBTCxmYWJyZWpvMDEsNTAwMDAwDQoyMDAxLEFOQSxBTCxnaWxiZTAxLDM1MDAwMA0KMjAwMSxBTkEsQUwsbW9saW5iZTAxLDM1MDAwMA0KMjAwMSxBTkEsQUwsZGlzYXJnYTAxLDMyMDAwMA0KMjAwMSxBTkEsQUwsa2VubmVhZDAxLDI4MDAwMA0KMjAwMSxBTkEsQUwsc2Nob2VzYzAxLDI3NTAwMA0KMjAwMSxBTkEsQUwsYmFydGVraTAxLDI3MDAwMA0KMjAwMSxBTkEsQUwsd2FzaGJqYTAxLDI3MDAwMA0KMjAwMSxBTkEsQUwsb3J0aXpyYTAxLDI1MDAwMA0KMjAwMSxBTkEsQUwsbmlldmVqbzAxLDIzMjAwMA0KMjAwMSxBTkEsQUwscG90ZWxvMDEsMjE1MDAwDQoyMDAxLEFOQSxBTCx3aXNlbWEwMSwyMDc1MDANCjIwMDEsQU5BLEFMLHdlYmVyYmUwMSwyMDM1MDANCjIwMDEsQU5BLEFMLHdvb3Rlc2gwMSwyMDA1MDANCjIwMDEsQU5BLEFMLGVja3N0ZGEwMSwyMDAwMDANCjIwMDEsQU5BLEFMLGpveW5ld2EwMSwyMDAwMDANCjIwMDEsQkFMLEFMLGJlbGxlYWwwMSwxMjA0OTA0MA0KMjAwMSxCQUwsQUwsYW5kZXJicjAxLDcyMDAwMDANCjIwMDEsQkFMLEFMLHNlZ3VpZGEwMSw3MDAwMDAwDQoyMDAxLEJBTCxBTCxyaXBrZWNhMDEsNjMwMDAwMA0KMjAwMSxCQUwsQUwsYm9yZGltaTAxLDQ1MDAwMDANCjIwMDEsQkFMLEFMLGhlbnRncGEwMSw0NTAwMDAwDQoyMDAxLEJBTCxBTCxkZXNoaWRlMDEsNDMzMzY2Nw0KMjAwMSxCQUwsQUwsY29uaW5qZTAxLDMwMDAwMDANCjIwMDEsQkFMLEFMLG1pbGxzYWwwMSwzMDAwMDAwDQoyMDAxLEJBTCxBTCxtZXJjZWpvMDIsMjc1MDAwMA0KMjAwMSxCQUwsQUwsdHJvbWJtaTAxLDIzMzMzMzMNCjIwMDEsQkFMLEFMLHBvbnNvc2kwMSwyMTAwMDAwDQoyMDAxLEJBTCxBTCxncm9vbWJ1MDEsMjAwMDAwMA0KMjAwMSxCQUwsQUwsbWNlbHJjaDAxLDE1MjAwMDANCjIwMDEsQkFMLEFMLG15ZXJzZ3IwMSwxMjAwMDAwDQoyMDAxLEJBTCxBTCxmb3JkeWJyMDEsODI1MDAwDQoyMDAxLEJBTCxBTCxqb2huc2phMDIsMzUwMDAwDQoyMDAxLEJBTCxBTCxtb3JhbWUwMSwyNzAwMDANCjIwMDEsQkFMLEFMLGhhaXJzamUwMiwyMzUwMDANCjIwMDEsQkFMLEFMLHJpY2hhY2gwMSwyMzI1MDANCjIwMDEsQkFMLEFMLGtvaGxtcnkwMSwyMzAwMDANCjIwMDEsQkFMLEFMLG1hdG9zbHUwMSwyMjYwMDANCjIwMDEsQkFMLEFMLGtpbmthbWkwMSwyMTUwMDANCjIwMDEsQkFMLEFMLG1hZHVyY2EwMSwyMTAwMDANCjIwMDEsQkFMLEFMLHJ5YW5iajAxLDIxMDAwMA0KMjAwMSxCQUwsQUwsbHVuYXJmZTAxLDIwNTAwMA0KMjAwMSxCQUwsQUwscml2ZXJsdTAyLDIwNTAwMA0KMjAwMSxCQUwsQUwsZ2liYm9qYTAxLDIwMDAwMA0KMjAwMSxCQUwsQUwscm9iZXJ3aTAxLDIwMDAwMA0KMjAwMSxCT1MsQUwscmFtaXJtYTAyLDEzMDUwMDAwDQoyMDAxLEJPUyxBTCxtYXJ0aXBlMDIsMTMwMDAwMDANCjIwMDEsQk9TLEFMLGV2ZXJlY2EwMSw3MzMzMzMzDQoyMDAxLEJPUyxBTCxnYXJjaW5vMDEsNzI1MDAwMA0KMjAwMSxCT1MsQUwsYmljaGVkYTAxLDcwMDAwMDANCjIwMDEsQk9TLEFMLG9mZmVyam8wMSw2NzUwMDAwDQoyMDAxLEJPUyxBTCx2YWxlbmpvMDIsNjM1MDAwMA0KMjAwMSxCT1MsQUwsbGFuc2ltaTAxLDYyNTAwMDANCjIwMDEsQk9TLEFMLHNhYmVyYnIwMSw1MDAwMDAwDQoyMDAxLEJPUyxBTCxvbGVhcnRyMDEsNDYwMDAwMA0KMjAwMSxCT1MsQUwsYmVja3JvMDEsNDUwMDAwMA0KMjAwMSxCT1MsQUwsbm9tb2hpMDEsNDUwMDAwMA0KMjAwMSxCT1MsQUwsd2FrZWZ0aTAxLDMwMDAwMDANCjIwMDEsQk9TLEFMLGxld2lzZGEwMSwyNTAwMDAwDQoyMDAxLEJPUyxBTCxjYXN0aWZyMDEsMjI1MDAwMA0KMjAwMSxCT1MsQUwsbG93ZWRlMDEsMjEyNTAwMA0KMjAwMSxCT1MsQUwsdmFyaXRqYTAxLDE4MDAwMDANCjIwMDEsQk9TLEFMLHBpY2hhaGkwMSwxNjYwMDAwDQoyMDAxLEJPUyxBTCxhcnJvanJvMDEsMTYyNTAwMA0KMjAwMSxCT1MsQUwsZmxvcmlicjAxLDE0NTAwMDANCjIwMDEsQk9TLEFMLGdhcmNlcmkwMSwxMzc1MDAwDQoyMDAxLEJPUyxBTCxzdHluZWNoMDEsMTMwMDAwMA0KMjAwMSxCT1MsQUwsaGF0dGVzYzAxLDEwNTAwMDANCjIwMDEsQk9TLEFMLGNvbmVkYTAxLDEwMDAwMDANCjIwMDEsQk9TLEFMLHNjaG91cGUwMSwxMDAwMDAwDQoyMDAxLEJPUyxBTCxncmViZWNyMDEsNzAwMDAwDQoyMDAxLEJPUyxBTCxkYXViYWJyMDEsNDAwMDAwDQoyMDAxLEJPUyxBTCxuaXhvbnRyMDEsMzkwMDAwDQoyMDAxLEJPUyxBTCxvaGthdG8wMSwyMjUwMDANCjIwMDEsQk9TLEFMLHBlbmFqdTAxLDIwMjUwMA0KMjAwMSxCT1MsQUwsY3Jhd2ZwYTAyLDIwMDAwMA0KMjAwMSxCT1MsQUwsaGlsbGVzaDAyLDIwMDAwMA0KMjAwMSxDSEEsQUwsdGhvbWFmcjA0LDk5MjcwMDANCjIwMDEsQ0hBLEFMLHdlbGxzZGEwMSw5MjUwMDAwDQoyMDAxLENIQSxBTCxkdXJoYXJhMDEsOTAwMDAwMA0KMjAwMSxDSEEsQUwsYmFsZHdqYTAxLDU5NTAwMDANCjIwMDEsQ0hBLEFMLHZhbGVuam8wMyw1MTY2NjY3DQoyMDAxLENIQSxBTCxjbGF5dHJvMDEsNDUwMDAwMA0KMjAwMSxDSEEsQUwsb3Jkb25tYTAxLDM3NTAwMDANCjIwMDEsQ0hBLEFMLGZvdWxra2UwMSwzMTAwMDAwDQoyMDAxLENIQSxBTCxhbG9tYXNhMDIsMjkwMDAwMA0KMjAwMSxDSEEsQUwsa29uZXJwYTAxLDIzMDAwMDANCjIwMDEsQ0hBLEFMLHNpbWFzYmkwMSwxOTUwMDAwDQoyMDAxLENIQSxBTCxvc3VuYWFuMDEsMTUwMDAwMA0KMjAwMSxDSEEsQUwsYmFpbmVoYTAxLDEwMDAwMDANCjIwMDEsQ0hBLEFMLHBlcnJ5aGUwMSw5NzUwMDANCjIwMDEsQ0hBLEFMLGVsZHJlY2EwMSw3NTAwMDANCjIwMDEsQ0hBLEFMLHBhcnF1amkwMSw1NTAwMDANCjIwMDEsQ0hBLEFMLGxlZWNhMDEsNDAwMDAwDQoyMDAxLENIQSxBTCxncmFmZnRvMDEsMzc1MDAwDQoyMDAxLENIQSxBTCxob3dyeWJvMDEsMzc1MDAwDQoyMDAxLENIQSxBTCxzaW5nbGNoMDEsMzE1MDAwDQoyMDAxLENIQSxBTCxsb3dlc2UwMSwzMDAwMDANCjIwMDEsQ0hBLEFMLHd1bnNja2UwMSwyNjAwMDANCjIwMDEsQ0hBLEFMLHBhdWxqbzAxLDIzMDAwMA0KMjAwMSxDSEEsQUwsYnVlaHJtYTAxLDIyNTAwMA0KMjAwMSxDSEEsQUwsYmlkZGxybzAxLDIwNTAwMA0KMjAwMSxDSEEsQUwsZ2xvdmVnYTAxLDIwMDAwMA0KMjAwMSxDSEEsQUwscmFtaXJqdTAxLDIwMDAwMA0KMjAwMSxDTEUsQUwsZ29uemFqdTAzLDEwMDAwMDAwDQoyMDAxLENMRSxBTCxmaW5sZWNoMDEsOTY2NjY2Nw0KMjAwMSxDTEUsQUwsbG9mdG9rZTAxLDgwMDAwMDANCjIwMDEsQ0xFLEFMLHRob21lamkwMSw3ODc1MDAwDQoyMDAxLENMRSxBTCxhbG9tYXJvMDEsNzc1MDAwMA0KMjAwMSxDTEUsQUwsbmFneWNoMDEsNjAwMDAwMA0KMjAwMSxDTEUsQUwsZnJ5bWF0cjAxLDU3NTAwMDANCjIwMDEsQ0xFLEFMLGJ1cmtzZWwwMSw1NjY2NjY3DQoyMDAxLENMRSxBTCxidXJiYWRhMDEsNTAwMDAwMA0KMjAwMSxDTEUsQUwsdml6cXVvbTAxLDMwMDAwMDANCjIwMDEsQ0xFLEFMLGthcnNhc3QwMSwyNzAwMDAwDQoyMDAxLENMRSxBTCxjb3JkZXdpMDEsMjY2NjY2Nw0KMjAwMSxDTEUsQUwsY29sb25iYTAxLDI2MjUwMDANCjIwMDEsQ0xFLEFMLHdpY2ttYm8wMSwyNjAwMDAwDQoyMDAxLENMRSxBTCx3cmlnaGphMDIsMjU2MjUwMA0KMjAwMSxDTEUsQUwsc2h1ZXlwYTAxLDIwMDAwMDANCjIwMDEsQ0xFLEFMLHRhdWJlZWQwMSwxODAwMDAwDQoyMDAxLENMRSxBTCxyZWVkc3QwMSwxNjAwMDAwDQoyMDAxLENMRSxBTCxyaW5jb3JpMDEsMTUwMDAwMA0KMjAwMSxDTEUsQUwsd29vZGFzdDAxLDEzMjUwMDANCjIwMDEsQ0xFLEFMLHNwcmFkamUwMSw2MjUwMDANCjIwMDEsQ0xFLEFMLGNvcmRvbWEwMSw1MDAwMDANCjIwMDEsQ0xFLEFMLGRpYXplaTAxLDM4NzUwMA0KMjAwMSxDTEUsQUwsc3BlaWVqdTAxLDI0MzAwMA0KMjAwMSxDTEUsQUwsY2FicmVqbzAyLDIzNzAwMA0KMjAwMSxDTEUsQUwsY3J1emphMDEsMjMwMDAwDQoyMDAxLENMRSxBTCxicmFueXJ1MDEsMjE5MDAwDQoyMDAxLENMRSxBTCxyb2JlcmRhMDcsMjEyMDAwDQoyMDAxLENMRSxBTCxtY2RvbmpvMDMsMjA5MDAwDQoyMDAxLENMRSxBTCxkcmV3dGkwMSwyMDIwMDANCjIwMDEsREVULEFMLHBhbG1lZGUwMSw3NTAwMDAwDQoyMDAxLERFVCxBTCxoaWdnaWJvMDIsNTMyNTAwMA0KMjAwMSxERVQsQUwsbWxpY2tkYTAxLDUzMDAwMDANCjIwMDEsREVULEFMLGVhc2xlZGEwMSw1MDc1MDAwDQoyMDAxLERFVCxBTCxjbGFya3RvMDIsNDQ2MjUwMA0KMjAwMSxERVQsQUwsZW5jYXJqdTAxLDQ0MDAwMDANCjIwMDEsREVULEFMLGpvbmVzdG8wMiwzOTc1MDAwDQoyMDAxLERFVCxBTCxjcnV6ZGUwMSwzNTI1MDAwDQoyMDAxLERFVCxBTCxjZWRlbnJvMDEsMjcwMDAwMA0KMjAwMSxERVQsQUwsbW9laGxicjAxLDI0MTY2NjcNCjIwMDEsREVULEFMLGhvbHRjaDAxLDE4NTAwMDANCjIwMDEsREVULEFMLG5pdGtvY2owMSwxMjAwMDAwDQoyMDAxLERFVCxBTCxwYXR0ZWRhMDQsMTEwMDAwMA0KMjAwMSxERVQsQUwsc3BhcmtzdDAxLDY1MDAwMA0KMjAwMSxERVQsQUwsd2VhdmVqZTAxLDQyNTAwMA0KMjAwMSxERVQsQUwsaGFsdGVzaDAxLDQyMDAwMA0KMjAwMSxERVQsQUwsYW5kZXJtYTAxLDM1NTAwMA0KMjAwMSxERVQsQUwsbWVsdXNtaTAxLDM0NTAwMA0KMjAwMSxERVQsQUwsbWFnZWV3ZTAxLDI3NTAwMA0KMjAwMSxERVQsQUwsbWNtaWxiaTAxLDI2MDAwMA0KMjAwMSxERVQsQUwsZmlja3JvMDEsMjU1MDAwDQoyMDAxLERFVCxBTCxwZXJpc21hMDEsMjU1MDAwDQoyMDAxLERFVCxBTCxqYWNrc3J5MDEsMjUwMDAwDQoyMDAxLERFVCxBTCxncmVpc3NlMDEsMjQwMDAwDQoyMDAxLERFVCxBTCxtYWNpYWpvMDEsMjQwMDAwDQoyMDAxLERFVCxBTCxjYXJkb2phMDEsMjE3MDAwDQoyMDAxLERFVCxBTCxjbGFya2plMDIsMjAwMDAwDQoyMDAxLERFVCxBTCxpbmdlYnIwMSwyMDAwMDANCjIwMDEsS0NBLEFMLGhlcm5hcm8wMSw2MDAwMDAwDQoyMDAxLEtDQSxBTCxzd2Vlbm1pMDEsNTAwMDAwMA0KMjAwMSxLQ0EsQUwsZHllamUwMSwzODAwMDAwDQoyMDAxLEtDQSxBTCxyb3NhZGpvMDEsMzI1MDAwMA0KMjAwMSxLQ0EsQUwsc3VwcGFqZTAxLDIzNTAwMDANCjIwMDEsS0NBLEFMLHJhbmRham8wMSwyMzAwMDAwDQoyMDAxLEtDQSxBTCxzYW5jaHJlMDEsMjMwMDAwMA0KMjAwMSxLQ0EsQUwsbWVhZG9icjAxLDE5MDAwMDANCjIwMDEsS0NBLEFMLGhlbnJ5ZG8wMSwxMjAwMDAwDQoyMDAxLEtDQSxBTCx6YXVuZ3IwMSwxMTUwMDAwDQoyMDAxLEtDQSxBTCxhbGljZWx1MDEsODAwMDAwDQoyMDAxLEtDQSxBTCxncmltc2phMDEsNzUwMDAwDQoyMDAxLEtDQSxBTCxtY2NhcmRhMDEsNzUwMDAwDQoyMDAxLEtDQSxBTCxiZWx0cmNhMDEsNDI1MDAwDQoyMDAxLEtDQSxBTCxzdXp1a21hMDEsMzIwMDAwDQoyMDAxLEtDQSxBTCxmZWJsZWNhMDEsMzEwMDAwDQoyMDAxLEtDQSxBTCxxdWlubm1hMDEsMjgwMDAwDQoyMDAxLEtDQSxBTCxzdGVpbmJsMDEsMjc1MDAwDQoyMDAxLEtDQSxBTCxyZWljaGRhMDEsMjY1MDAwDQoyMDAxLEtDQSxBTCxoaW5jaGFqMDEsMjYwMDAwDQoyMDAxLEtDQSxBTCxzYW50aWpvMDMsMjYwMDAwDQoyMDAxLEtDQSxBTCxvcmRhemx1MDEsMjM1MDAwDQoyMDAxLEtDQSxBTCxvcnRpemhlMDEsMjMwMDAwDQoyMDAxLEtDQSxBTCxicm93bmRlMDIsMjA1MDAwDQoyMDAxLEtDQSxBTCx3aWxzb2tyMDEsMjA1MDAwDQoyMDAxLEtDQSxBTCxtb3Jlbm9yMDEsMjAyNTAwDQoyMDAxLEtDQSxBTCxjb2dhbnRvMDEsMjAwMDAwDQoyMDAxLEtDQSxBTCxtdWxsZXNjMDEsMjAwMDAwDQoyMDAxLE1JTixBTCxyYWRrZWJyMDEsNzc1MDAwMA0KMjAwMSxNSU4sQUwsbGF3dG9tYTAyLDM5MDAwMDANCjIwMDEsTUlOLEFMLG1pbHRvZXIwMSwyMTUwMDAwDQoyMDAxLE1JTixBTCxndWFyZGVkMDEsMTgwMDAwMA0KMjAwMSxNSU4sQUwsaGF3a2lsYTAxLDE0NTAwMDANCjIwMDEsTUlOLEFMLHdlbGxzYm8wMSwxMTAwMDAwDQoyMDAxLE1JTixBTCxob2NraWRlMDEsOTAwMDAwDQoyMDAxLE1JTixBTCxjYXJyYWhlMDEsNDAwMDAwDQoyMDAxLE1JTixBTCxwcmluY3RvMDEsNDAwMDAwDQoyMDAxLE1JTixBTCxndXptYWNyMDEsMzI1MDAwDQoyMDAxLE1JTixBTCxrb3NraWNvMDEsMzAwMDAwDQoyMDAxLE1JTixBTCxqb25lc2phMDQsMjc1MDAwDQoyMDAxLE1JTixBTCxtYXlzam8wMSwyNjAwMDANCjIwMDEsTUlOLEFMLG9ydGl6ZGEwMSwyNjAwMDANCjIwMDEsTUlOLEFMLG1pbGxldHIwMSwyNTUwMDANCjIwMDEsTUlOLEFMLGFsbGVuY2gwMSwyNDAwMDANCjIwMDEsTUlOLEFMLGNhbml6amEwMSwyMzUwMDANCjIwMDEsTUlOLEFMLHJlZG1hbWEwMSwyMzUwMDANCjIwMDEsTUlOLEFMLGh1bnRldG8wMSwyMzAwMDANCjIwMDEsTUlOLEFMLG1heHdlamEwMSwyMTUwMDANCjIwMDEsTUlOLEFMLG1pZW50ZG8wMSwyMTUwMDANCjIwMDEsTUlOLEFMLHNhbnRham8wMSwyMTI1MDANCjIwMDEsTUlOLEFMLHBpZXJ6YWowMSwyMTAwMDANCjIwMDEsTUlOLEFMLHJvbWVyamMwMSwyMDc1MDANCjIwMDEsTUlOLEFMLGJ1Y2hhYnIwMSwyMDUwMDANCjIwMDEsTUlOLEFMLGJhcm5lam8wMSwyMDAwMDANCjIwMDEsTUlOLEFMLHJpdmFzbHUwMSwyMDAwMDANCjIwMDEsTllBLEFMLGpldGVyZGUwMSwxMjYwMDAwMA0KMjAwMSxOWUEsQUwsd2lsbGliZTAyLDEyMzU3MTQzDQoyMDAxLE5ZQSxBTCxjbGVtZXJvMDIsMTAzMDAwMDANCjIwMDEsTllBLEFMLG11c3NpbWkwMSwxMDAwMDAwMA0KMjAwMSxOWUEsQUwscml2ZXJtYTAxLDkxNTAwMDANCjIwMDEsTllBLEFMLGp1c3RpZGEwMSw3ODAwMDAwDQoyMDAxLE5ZQSxBTCxvbmVpbHBhMDEsNzI1MDAwMA0KMjAwMSxOWUEsQUwscGV0dGlhbjAxLDcwMDAwMDANCjIwMDEsTllBLEFMLG1hcnRpdGkwMiw2MzAwMDAwDQoyMDAxLE5ZQSxBTCxrbm9ibGNoMDEsNjAwMDAwMA0KMjAwMSxOWUEsQUwsYnJvc2lzYzAxLDUyNTAwMDANCjIwMDEsTllBLEFMLHBvc2Fkam8wMSw0MDUwMDAwDQoyMDAxLE5ZQSxBTCxzdGFudG1pMDIsMjQ1MDAwMA0KMjAwMSxOWUEsQUwsaGVybmFvcjAxLDIwNTAwMDANCjIwMDEsTllBLEFMLHdhdHNvYWwwMSwxNzAwMDAwDQoyMDAxLE5ZQSxBTCxtZW5kb3JhMDEsMTYwMDAwMA0KMjAwMSxOWUEsQUwscm9kcmloZTAyLDE1MDAwMDANCjIwMDEsTllBLEFMLG9saXZlam8wMSwxMTAwMDAwDQoyMDAxLE5ZQSxBTCxzb3JpYWFsMDEsNjMwMDAwDQoyMDAxLE5ZQSxBTCxzb2pvbHUwMSw1MDAwMDANCjIwMDEsTllBLEFMLGJvZWhyYnIwMSwzNTAwMDANCjIwMDEsTllBLEFMLHNwZW5jc2gwMSwzMjAwMDANCjIwMDEsTllBLEFMLHdpbGxpdG8wMiwzMjAwMDANCjIwMDEsTllBLEFMLGFsbWFuY2EwMSwyNzAwMDANCjIwMDEsTllBLEFMLGJlbGxpY2wwMSwyMzAwMDANCjIwMDEsTllBLEFMLGVpbmVyZGEwMSwyMDYwMDANCjIwMDEsTllBLEFMLGNvbGVtbWkwMSwyMDQwMDANCjIwMDEsTllBLEFMLGNob2F0cmEwMSwyMDAwMDANCjIwMDEsTllBLEFMLGppbWVuZGEwMSwyMDAwMDANCjIwMDEsTllBLEFMLHBhcmtlY2gwMSwyMDAwMDANCjIwMDEsTllBLEFMLHNlYWJvc2MwMSwyMDAwMDANCjIwMDEsT0FLLEFMLGRhbW9uam8wMSw3MTAwMDAwDQoyMDAxLE9BSyxBTCxnaWFtYmphMDEsNDEwMzMzMw0KMjAwMSxPQUssQUwsaGVyZWRnaTAxLDMzMDAwMDANCjIwMDEsT0FLLEFMLGlzcmluamEwMSwzMzAwMDAwDQoyMDAxLE9BSyxBTCxqYWhham8wMSwzMjUwMDAwDQoyMDAxLE9BSyxBTCx0ZWphZG1pMDEsMjAyNTAwMA0KMjAwMSxPQUssQUwsbWF0aGV0ajAxLDE5MDAwMDANCjIwMDEsT0FLLEFMLGd1dGhybWEwMSwxODAwMDAwDQoyMDAxLE9BSyxBTCxtZWNpcmppMDEsMTExNjY2Nw0KMjAwMSxPQUssQUwsbWFnbmFtaTAxLDkwMDAwMA0KMjAwMSxPQUssQUwsY2hhdmVlcjAxLDYyNTAwMA0KMjAwMSxPQUssQUwsaHVkc290aTAxLDUyNTAwMA0KMjAwMSxPQUssQUwsZmFzYW5zYTAxLDM3NTAwMA0KMjAwMSxPQUssQUwsdGFtamUwMSwzNTAwMDANCjIwMDEsT0FLLEFMLGplbm5pcm8wMSwyOTAwMDANCjIwMDEsT0FLLEFMLHNhZW56b2wwMSwyOTAwMDANCjIwMDEsT0FLLEFMLGdpYW1iamUwMSwyODI1MDANCjIwMDEsT0FLLEFMLGNocmlzcnkwMSwyNjc1MDANCjIwMDEsT0FLLEFMLGhlcm5hcmEwMiwyNDUwMDANCjIwMDEsT0FLLEFMLGxvbmd0ZTAxLDI0MDc1MA0KMjAwMSxPQUssQUwseml0b2JhMDEsMjQwMDAwDQoyMDAxLE9BSyxBTCxtdWxkZW1hMDEsMjMyNTAwDQoyMDAxLE9BSyxBTCxtZW5lY2ZyMDEsMjI1MDAwDQoyMDAxLE9BSyxBTCxwaWF0dGFkMDEsMjE3NTAwDQoyMDAxLE9BSyxBTCx2YWxkZW1hMDIsMjA1MDAwDQoyMDAxLE9BSyxBTCxoYXJ2aWNoMDEsMjA0MDAwDQoyMDAxLE9BSyxBTCxvcnRpempvMDIsMjAxMDAwDQoyMDAxLFNFQSxBTCxzZWxlYWEwMSw3MDAwMDAwDQoyMDAxLFNFQSxBTCxvbGVydWpvMDEsNjcwMDAwMA0KMjAwMSxTRUEsQUwsbW95ZXJqYTAxLDY1MDAwMDANCjIwMDEsU0VBLEFMLHN1enVraWMwMSw1NjY2NjY3DQoyMDAxLFNFQSxBTCxtYXJ0aWVkMDEsNTUwMDAwMA0KMjAwMSxTRUEsQUwsbWFydGlhbDAzLDUwMDAwMDANCjIwMDEsU0VBLEFMLHNhc2Fra2EwMSw0NjY2NjY3DQoyMDAxLFNFQSxBTCx3aWxzb2RhMDEsNDQwMDAwMA0KMjAwMSxTRUEsQUwsY2FtZXJtaTAxLDM0MTY2NjcNCjIwMDEsU0VBLEFMLG5lbHNvamUwMSwzMzMzMzMzDQoyMDAxLFNFQSxBTCxib29uZWJyMDEsMzI1MDAwMA0KMjAwMSxTRUEsQUwscmhvZGVhcjAxLDMyNTAwMDANCjIwMDEsU0VBLEFMLGJlbGxkYTAxLDIyMDAwMDANCjIwMDEsU0VBLEFMLG1jbGVtbWEwMSwyMDAwMDAwDQoyMDAxLFNFQSxBTCxidWhuZWphMDEsMTg1MDAwMA0KMjAwMSxTRUEsQUwsYWJib3RwYTAxLDE3MDAwMDANCjIwMDEsU0VBLEFMLHdpZGdlY2gwMSwxNzAwMDAwDQoyMDAxLFNFQSxBTCxqYXZpZXN0MDEsMTUwMDAwMA0KMjAwMSxTRUEsQUwsbGFtcGt0bzAxLDExMDAwMDANCjIwMDEsU0VBLEFMLHRvbWtvYnIwMSwxMTAwMDAwDQoyMDAxLFNFQSxBTCxwYW5pYWpvMDEsODM3NTAwDQoyMDAxLFNFQSxBTCxnYXJjaWZyMDIsNDI1MDAwDQoyMDAxLFNFQSxBTCxoYWxhbWpvMDEsNDI1MDAwDQoyMDAxLFNFQSxBTCxndWlsbGNhMDEsMjg1MDAwDQoyMDAxLFNFQSxBTCxtZWNoZWdpMDEsMjc1MDAwDQoyMDAxLFNFQSxBTCxnaXBzb2NoMDEsMjM1MDAwDQoyMDAxLFNFQSxBTCxmcmFua3J5MDEsMjAyNTAwDQoyMDAxLFNFQSxBTCxzYW5kZWFuMDEsMjAyNTAwDQoyMDAxLFRCQSxBTCxhbHZhcndpMDEsOTAwMDAwMA0KMjAwMSxUQkEsQUwsdmF1Z2hncjAxLDgyNTAwMDANCjIwMDEsVEJBLEFMLGNhc3RpdmkwMiw3MjUwMDAwDQoyMDAxLFRCQSxBTCxtY2dyaWZyMDEsNjUwMDAwMA0KMjAwMSxUQkEsQUwsZ3V6bWFqdTAxLDYwMDAwMDANCjIwMDEsVEJBLEFMLGZsYWhlam8wMSwzMDAwMDAwDQoyMDAxLFRCQSxBTCx3aWxsaWdlMDIsMzAwMDAwMA0KMjAwMSxUQkEsQUwsbG9wZXphbDAyLDI5NzUwMDANCjIwMDEsVEJBLEFMLGdyaWV2YmUwMSwyNzUwMDAwDQoyMDAxLFRCQSxBTCxyZWthcmJyMDEsMTQwMDAwMA0KMjAwMSxUQkEsQUwsZ3VpbGxqbzAxLDk3NTAwMA0KMjAwMSxUQkEsQUwsZGlmZWxtaTAxLDc3NTAwMA0KMjAwMSxUQkEsQUwsaGlsbGtlMDEsNzUwMDAwDQoyMDAxLFRCQSxBTCxwcmlldGFyMDEsNzAwMDAwDQoyMDAxLFRCQSxBTCx5YW5lczAxLDY1MDAwMA0KMjAwMSxUQkEsQUwsd2lsc29wYTAyLDM1MDAwMA0KMjAwMSxUQkEsQUwsam9obnNydTAxLDI3MDAwMA0KMjAwMSxUQkEsQUwsd2lubnJhMDEsMjcwMDAwDQoyMDAxLFRCQSxBTCxjcmVla2RvMDEsMjYwMDAwDQoyMDAxLFRCQSxBTCxjb3hzdDAxLDI1NTAwMA0KMjAwMSxUQkEsQUwsbWFydGlmZTAxLDI1NTAwMA0KMjAwMSxUQkEsQUwsc21pdGhibzA2LDI1NTAwMA0KMjAwMSxUQkEsQUwscnVwZXJ5MDEsMjQyNTAwDQoyMDAxLFRCQSxBTCxzdHVydHRhMDEsMjM3NTAwDQoyMDAxLFRCQSxBTCxqdWRkbWkwMSwyMDgwMDANCjIwMDEsVEJBLEFMLGhhcnBldHIwMSwyMDIwMDANCjIwMDEsVEJBLEFMLHJvbGxzZGEwMSwyMDAwMDANCjIwMDEsVEVYLEFMLHJvZHJpYWwwMSwyMjAwMDAwMA0KMjAwMSxURVgsQUwscGFsbWVyYTAxLDkwMDAwMDANCjIwMDEsVEVYLEFMLHJvZHJpaXYwMSw4MjAwMDAwDQoyMDAxLFRFWCxBTCxyb2dlcmtlMDEsNzUwMDAwMA0KMjAwMSxURVgsQUwsb2xpdmVkYTAyLDcwMDAwMDANCjIwMDEsVEVYLEFMLGdhbGFyYW4wMSw2MDAwMDAwDQoyMDAxLFRFWCxBTCxncmVlcnJ1MDEsNDYwMDAwMA0KMjAwMSxURVgsQUwsaGVsbGlyaTAxLDQ1MDAwMDANCjIwMDEsVEVYLEFMLGNhbWlua2UwMSwzNTAwMDAwDQoyMDAxLFRFWCxBTCx2ZWxhcnJhMDEsMzE1MDAwMA0KMjAwMSxURVgsQUwscGV0a29tYTAxLDIwNTAwMDANCjIwMDEsVEVYLEFMLGN1cnRpY2gwMSwxOTAwMDAwDQoyMDAxLFRFWCxBTCx0aG9tcGp1MDIsMTQyMDAwMA0KMjAwMSxURVgsQUwsY3JhYnR0aTAxLDEzMDAwMDANCjIwMDEsVEVYLEFMLGNhdGFsZnIwMSw4NTAwMDANCjIwMDEsVEVYLEFMLGhhc2VsYmkwMSw4MDAwMDANCjIwMDEsVEVYLEFMLGJyYW50amUwMSw2NTAwMDANCjIwMDEsVEVYLEFMLG1haG9tcGEwMSw1MDAwMDANCjIwMDEsVEVYLEFMLGthcGxlZ2EwMSw0NTAwMDANCjIwMDEsVEVYLEFMLGxlZGVlcmkwMSw0MDY1MDANCjIwMDEsVEVYLEFMLHZlbmFmbWkwMSwzMTAwMDANCjIwMDEsVEVYLEFMLHppbW1lamUwMiwzMDc1MDANCjIwMDEsVEVYLEFMLG1hdGVvcnUwMSwzMDAwMDANCjIwMDEsVEVYLEFMLG1pcmFiZG8wMSwyOTUwMDANCjIwMDEsVEVYLEFMLGNvcmRlZnIwMSwyNzc1MDANCjIwMDEsVEVYLEFMLHNoZWxkc2MwMSwyNjUwMDANCjIwMDEsVEVYLEFMLGRhdmlzZG8wMiwyNTAwMDANCjIwMDEsVEVYLEFMLGdseW5ucnkwMSwyNDAwMDANCjIwMDEsVEVYLEFMLHBvcnRlYm8wMywyMDcwMDANCjIwMDEsVEVYLEFMLGpvaG5zam8wOCwyMDI1MDANCjIwMDEsVEVYLEFMLGtvbGJkYTAxLDIwMjUwMA0KMjAwMSxUT1IsQUwsZGVsZ2FjYTAxLDEzNjUwMDAwDQoyMDAxLFRPUixBTCxtb25kZXJhMDEsMTE1MDAwMDANCjIwMDEsVE9SLEFMLGhhbWlsam8wMiw3MjUwMDAwDQoyMDAxLFRPUixBTCxnb256YWFsMDEsNDI1MDAwMA0KMjAwMSxUT1IsQUwsbG9haXplczAxLDQyNTAwMDANCjIwMDEsVE9SLEFMLGZsZXRjZGEwMSwzNTI1MDAwDQoyMDAxLFRPUixBTCxiYXRpc3RvMDEsMzMwMDAwMA0KMjAwMSxUT1IsQUwsc2lyb3RtaTAxLDMwMDAwMDANCjIwMDEsVE9SLEFMLGNhcnBlY2gwMSwyNTgzMzMzDQoyMDAxLFRPUixBTCxidXNoaG8wMSwyNTUwMDAwDQoyMDAxLFRPUixBTCxmdWxsbWJyMDEsMjUwMDAwMA0KMjAwMSxUT1IsQUwsY3J1empvMDIsMjM1MDAwMA0KMjAwMSxUT1IsQUwscGFycmlzdDAxLDIyNzUwMDANCjIwMDEsVE9SLEFMLHBsZXNhZGEwMSwyMjAwMDAwDQoyMDAxLFRPUixBTCxzdGV3YXNoMDEsMjE4MzMzMw0KMjAwMSxUT1IsQUwscXVhbnRwYTAxLDE4MDAwMDANCjIwMDEsVE9SLEFMLGJvcmJvcGUwMiwxNTAwMDAwDQoyMDAxLFRPUixBTCxlc2NvYmtlMDEsMTUwMDAwMA0KMjAwMSxUT1IsQUwsZnJ5ZWplMDEsMTAwMDAwMA0KMjAwMSxUT1IsQUwscGFpbnRsYTAxLDEwMDAwMDANCjIwMDEsVE9SLEFMLGtvY2hiaTAxLDczMzMzMw0KMjAwMSxUT1IsQUwsY2FzdGlhbDAxLDcyNTAwMA0KMjAwMSxUT1IsQUwsc2ltbW9icjAxLDIyNTAwMA0KMjAwMSxUT1IsQUwsYmVpcm5rZTAxLDIyMzAwMA0KMjAwMSxUT1IsQUwsd29vZHdjaDAxLDIyMzAwMA0KMjAwMSxUT1IsQUwsZnJlZWxyeTAxLDIwMDAwMA0KMjAwMSxUT1IsQUwsbWljaGFjaDAxLDIwMDAwMA0KMjAwMSxUT1IsQUwsdGhvbXBhbjAyLDIwMDAwMA0KMjAwMSxBUkksTkwsam9obnNyYTA1LDEzMzUwMDAwDQoyMDAxLEFSSSxOTCx3aWxsaW1hMDQsOTAwMDAwMA0KMjAwMSxBUkksTkwsYmVsbGphMDEsODA1MDAwMA0KMjAwMSxBUkksTkwsc3RvdHR0bzAxLDgwMDAwMDANCjIwMDEsQVJJLE5MLHNjaGlsY3UwMSw2NTAwMDAwDQoyMDAxLEFSSSxOTCxmaW5sZXN0MDEsNTM3NTAwMA0KMjAwMSxBUkksTkwsZ29uemFsdTAxLDQ4MzMzMzMNCjIwMDEsQVJJLE5MLGFuZGVyYnIwMiw0MTI1MDAwDQoyMDAxLEFSSSxOTCx3b21hY3RvMDEsNDAwMDAwMA0KMjAwMSxBUkksTkwsbWFudGVtYTAxLDM1ODMzMzMNCjIwMDEsQVJJLE5MLGdyYWNlbWEwMSwzMDAwMDAwDQoyMDAxLEFSSSxOTCxzd2luZGdyMDEsMjUzMzMzMw0KMjAwMSxBUkksTkwscmV5bm9hcjAyLDIwMDAwMDANCjIwMDEsQVJJLE5MLHNwcmlucnUwMSwxNzAwMDAwDQoyMDAxLEFSSSxOTCxjb2xicmdyMDEsMTYwMDAwMA0KMjAwMSxBUkksTkwsc2FuZGVyZTAyLDE1MDAwMDANCjIwMDEsQVJJLE5MLG1pbGxlZGEwMiwxMjUwMDAwDQoyMDAxLEFSSSxOTCxraW1ieTAxLDc2MjUwMA0KMjAwMSxBUkksTkwsbW9yZ2FtaTAxLDcwMDAwMA0KMjAwMSxBUkksTkwsYmF1dGlkYTAxLDY3NTAwMA0KMjAwMSxBUkksTkwsd2l0dGJvMDEsNTAwMDAwDQoyMDAxLEFSSSxOTCxjdW1taW1pMDEsNDI1MDAwDQoyMDAxLEFSSSxOTCxiYXRpc21pMDEsNDAwMDAwDQoyMDAxLEFSSSxOTCxkZWxsdWRhMDEsMzI1MDAwDQoyMDAxLEFSSSxOTCxkdXJhemVyMDEsMjYwMDAwDQoyMDAxLEFSSSxOTCxrbGFzc2RhMDEsMjI3NTAwDQoyMDAxLEFSSSxOTCxiYXJhanJvMDEsMjA4MDAwDQoyMDAxLEFSSSxOTCxiaWVyYm5pMDEsMjAwMDAwDQoyMDAxLEFUTCxOTCxtYWRkdWdyMDEsMTI1MDAwMDANCjIwMDEsQVRMLE5MLGpvbmVzY2gwNiwxMDMzMzMzMw0KMjAwMSxBVEwsTkwsZ2xhdml0bzAyLDk1MDAwMDANCjIwMDEsQVRMLE5MLGpvcmRhYnIwMSw5MTAwMDAwDQoyMDAxLEFUTCxOTCxqb25lc2FuMDEsODIwMDAwMA0KMjAwMSxBVEwsTkwsc21vbHRqbzAxLDgwMDAwMDANCjIwMDEsQVRMLE5MLGxvcGV6amEwMSw3NzUwMDAwDQoyMDAxLEFUTCxOTCxzdXJob2JqMDEsNDgzMzMzMw0KMjAwMSxBVEwsTkwsdmVyYXNxdTAxLDM5MDAwMDANCjIwMDEsQVRMLE5MLG1pbGx3a2UwMSwzMTAwMDAwDQoyMDAxLEFUTCxOTCxyb2NrZWpvMDEsMTkwMDAwMA0KMjAwMSxBVEwsTkwsYnVya2VqbzAzLDE3NTAwMDANCjIwMDEsQVRMLE5MLHJlbWxpbWkwMSwxNjAwMDAwDQoyMDAxLEFUTCxOTCxicm9nbnJpMDEsMTUwMDAwMA0KMjAwMSxBVEwsTkwsbWFydGlkYTAxLDE1MDAwMDANCjIwMDEsQVRMLE5MLGxpZ3Rla2UwMSwxMjAwMDAwDQoyMDAxLEFUTCxOTCxsb2NraGtlMDEsODAwMDAwDQoyMDAxLEFUTCxOTCxwZXJlemVkMDIsNjUwMDAwDQoyMDAxLEFUTCxOTCxhYmJvdGt1MDEsNjAwMDAwDQoyMDAxLEFUTCxOTCxiYWtvcGEwMSw0NTAwMDANCjIwMDEsQVRMLE5MLHZhbGRlbWEwMSwzNzUwMDANCjIwMDEsQVRMLE5MLHNsdXNham8wMSwzNjAwMDANCjIwMDEsQVRMLE5MLGZ1cmNhcmEwMSwzNTUwMDANCjIwMDEsQVRMLE5MLG1jZ2xpa2UwMSwyNDIwMDANCjIwMDEsQVRMLE5MLHBlcmV6b2QwMSwyMjAwMDANCjIwMDEsQVRMLE5MLGhlbG1zd2UwMSwyMTAwMDANCjIwMDEsQVRMLE5MLG1hcnF1amEwMSwyMDUwMDANCjIwMDEsQVRMLE5MLGxvbWJhZ2UwMSwyMDI1MDANCjIwMDEsQVRMLE5MLHNlZWxiY2gwMiwyMDAwMDANCjIwMDEsQVRMLE5MLHNvYmtvc2MwMSwyMDAwMDANCjIwMDEsQVRMLE5MLHZveWxlYnIwMSwyMDAwMDANCjIwMDEsQ0hOLE5MLHNvc2FzYTAxLDEyNTAwMDAwDQoyMDAxLENITixOTCx0YXBhbmtlMDEsNjUwMDAwMA0KMjAwMSxDSE4sTkwsbGllYmVqbzAxLDUwODMzMzMNCjIwMDEsQ0hOLE5MLHlvdW5nZXIwMSw0NTAwMDAwDQoyMDAxLENITixOTCx3aGl0ZXJvMDIsNDAwMDAwMA0KMjAwMSxDSE4sTkwsaHVuZGx0bzAxLDM1MDAwMDANCjIwMDEsQ0hOLE5MLGd1dGllcmkwMSwzNDAwMDAwDQoyMDAxLENITixOTCxzdGFpcm1hMDEsMzIwMDAwMA0KMjAwMSxDSE4sTkwsbXVlbGxiaTAyLDI3NTAwMDANCjIwMDEsQ0hOLE5MLGZhc3NlamUwMSwyNDAwMDAwDQoyMDAxLENITixOTCx0YXZhcmp1MDEsMjI3NTAwMA0KMjAwMSxDSE4sTkwsYmVyZWphMDEsMjI1MDAwMA0KMjAwMSxDSE4sTkwsZ2lyYXJqbzAxLDIwMDAwMDANCjIwMDEsQ0hOLE5MLGdvcmRvdG8wMSwyMDAwMDAwDQoyMDAxLENITixOTCx3b29ka2UwMiwxOTQwMDAwDQoyMDAxLENITixOTCxoZXJlZGZlMDEsMTE1MDAwMA0KMjAwMSxDSE4sTkwsYnVmb3JkYTAxLDExMDAwMDANCjIwMDEsQ0hOLE5MLGNvb21lcm8wMSwxMTAwMDAwDQoyMDAxLENITixOTCx2YW5wb3RvMDEsODUwMDAwDQoyMDAxLENITixOTCxheWJhcm1hMDEsNjY1MDAwDQoyMDAxLENITixOTCxmYXJuc2t5MDEsMjQ1MDAwDQoyMDAxLENITixOTCxmeWhyaW1pMDEsMjQwMDAwDQoyMDAxLENITixOTCxicm93bnJvMDEsMjMwMDAwDQoyMDAxLENITixOTCxtYXR0aGdhMDIsMjI1MDAwDQoyMDAxLENITixOTCxvamVkYWF1MDEsMjEyNTAwDQoyMDAxLENITixOTCxkdW5jYWNvMDEsMjAwMDAwDQoyMDAxLENITixOTCx6dWxldGp1MDEsMjAwMDAwDQoyMDAxLENJTixOTCxncmlmZmtlMDIsMTI1MDAwMDANCjIwMDEsQ0lOLE5MLGxhcmtpYmEwMSw5MDAwMDAwDQoyMDAxLENJTixOTCxoYXJuaXBlMDEsMzc1MDAwMA0KMjAwMSxDSU4sTkwseW91bmdkbTAxLDM1MDAwMDANCjIwMDEsQ0lOLE5MLHJlZXNlcG8wMSwzMjAwMDAwDQoyMDAxLENJTixOTCxjYXNleXNlMDEsMzAwMDAwMA0KMjAwMSxDSU4sTkwsZ3JhdmVkYTAxLDIxMDAwMDANCjIwMDEsQ0lOLE5MLHR1Y2tlbWkwMSwxODAwMDAwDQoyMDAxLENJTixOTCxzdWxsaXNjMDEsMTcwMDAwMA0KMjAwMSxDSU4sTkwsb2Nob2FhbDAxLDE2MDAwMDANCjIwMDEsQ0lOLE5MLHJpdmVycnUwMSwxMDAwMDAwDQoyMDAxLENJTixOTCxyZXllc2RlMDEsNjI1MDAwDQoyMDAxLENJTixOTCxmZXJuYW9zMDEsNjAwMDAwDQoyMDAxLENJTixOTCxzdGlubmtlMDEsNTAwMDAwDQoyMDAxLENJTixOTCx3b2hsZW1hMDEsNTAwMDAwDQoyMDAxLENJTixOTCxkZXNzZWVsMDEsNDc1MDAwDQoyMDAxLENJTixOTCxib29uZWFhMDEsNDAwMDAwDQoyMDAxLENJTixOTCxjYXN0cmp1MDEsNDAwMDAwDQoyMDAxLENJTixOTCxndWVycndpMDEsNDAwMDAwDQoyMDAxLENJTixOTCx3aWxsaXNjMDEsNDAwMDAwDQoyMDAxLENJTixOTCxiZWxscm8wMSwyNTAwMDANCjIwMDEsQ0lOLE5MLGxhcnVlamEwMSwyMzUwMDANCjIwMDEsQ0lOLE5MLHNhZGxlZG8wMSwyMjUwMDANCjIwMDEsQ0lOLE5MLHJpZWRsam8wMSwyMTQwMDANCjIwMDEsQ0lOLE5MLGV0aGVyc2UwMSwyMTAwMDANCjIwMDEsQ0lOLE5MLHdpbmNoc2MwMSwyMDIwMDANCjIwMDEsQ0lOLE5MLHJlaXRzY2gwMSwyMDAwMDANCjIwMDEsQ09MLE5MLHdhbGtlbGEwMSwxMjE2NjY2Nw0KMjAwMSxDT0wsTkwsaGFtcHRtaTAxLDEwNTAwMDAwDQoyMDAxLENPTCxOTCxuZWFnbGRlMDEsNzIwMDAwMA0KMjAwMSxDT0wsTkwsYXN0YWNwZTAxLDY4NTAwMDANCjIwMDEsQ09MLE5MLGhlbHRvdG8wMSw0OTUwMDAwDQoyMDAxLENPTCxOTCxjaXJpbGplMDEsNDg1MDAwMA0KMjAwMSxDT0wsTkwsYm9oYW5icjAxLDQwMDAwMDANCjIwMDEsQ09MLE5MLHBlcmV6bmUwMSwzNTUwMDAwDQoyMDAxLENPTCxOTCx2aWxsb3JvMDEsMjgwMDAwMA0KMjAwMSxDT0wsTkwsaG9sbGF0bzAxLDI3NTAwMDANCjIwMDEsQ09MLE5MLG1heW5lYnIwMSwyMTUwMDAwDQoyMDAxLENPTCxOTCxnYW50cm8wMSwxNzUwMDAwDQoyMDAxLENPTCxOTCxteWVyc21pMDEsMTI1MDAwMA0KMjAwMSxDT0wsTkwsd2hpdGVnYTAxLDExNjY2NjcNCjIwMDEsQ09MLE5MLHdhbGtldG8wNCwxMDUwMDAwDQoyMDAxLENPTCxOTCx3YXNkaWpvMDEsOTc1MDAwDQoyMDAxLENPTCxOTCxzaHVtcHRlMDEsNzI1MDAwDQoyMDAxLENPTCxOTCxrYXJsc2MwMSw2MjUwMDANCjIwMDEsQ09MLE5MLG5vcnRvZ3IwMSw0NTAwMDANCjIwMDEsQ09MLE5MLGppbWVuam8wMSwzNDUwMDANCjIwMDEsQ09MLE5MLHRob21zam8wMSwzMDAwMDANCjIwMDEsQ09MLE5MLGNob3VpYm8wMSwyNzgwMDANCjIwMDEsQ09MLE5MLHBldHJpYmUwMSwyMzIwMDANCjIwMDEsQ09MLE5MLHBpZXJyanUwMSwyMTUwMDANCjIwMDEsQ09MLE5MLGxpdHRsbWEwMSwyMTAwMDANCjIwMDEsQ09MLE5MLGVzdHJhaG8wMSwyMDMwMDANCjIwMDEsRkxPLE5MLGZlcm5hYWwwMSw3MDAwMDAwDQoyMDAxLEZMTyxOTCxmbG95ZGNsMDEsNTUwMDAwMA0KMjAwMSxGTE8sTkwsam9obnNjaDA0LDUwMDAwMDANCjIwMDEsRkxPLE5MLGFsZm9uYW4wMSwyNDUwMDAwDQoyMDAxLEZMTyxOTCxjYXN0aWx1MDEsMjIwMDAwMA0KMjAwMSxGTE8sTkwsbWljZWxkYTAxLDIwMDAwMDANCjIwMDEsRkxPLE5MLG93ZW5zZXIwMSwxMjUwMDAwDQoyMDAxLEZMTyxOTCx3aWxzb3ByMDEsMTAwMDAwMA0KMjAwMSxGTE8sTkwsY2xlbWVtYTAxLDkwMDAwMA0KMjAwMSxGTE8sTkwsYm9uZXNyaTAxLDgwMDAwMA0KMjAwMSxGTE8sTkwsZm94YW4wMSw3NzUwMDANCjIwMDEsRkxPLE5MLG1pbGxha2UwMSw3MDAwMDANCjIwMDEsRkxPLE5MLGRhcmVudmkwMSw2MjUwMDANCjIwMDEsRkxPLE5MLGJlcmdkYTAxLDU4NzUwMA0KMjAwMSxGTE8sTkwsbG93ZWxtaTAxLDUwMDAwMA0KMjAwMSxGTE8sTkwsZGVtcHNyeTAxLDQwMDAwMA0KMjAwMSxGTE8sTkwsbG9vcGVicjAxLDQwMDAwMA0KMjAwMSxGTE8sTkwsbGVlZGUwMiwzNzUwMDANCjIwMDEsRkxPLE5MLG1vdXRvbHkwMSwzNTAwMDANCjIwMDEsRkxPLE5MLGFiYm90amUwMSwzMDAwMDANCjIwMDEsRkxPLE5MLHJlZG1vbWkwMSwzMDAwMDANCjIwMDEsRkxPLE5MLGdvbnphYWwwMiwyOTUwMDANCjIwMDEsRkxPLE5MLG51bmV6dmwwMSwyNjQwMDANCjIwMDEsRkxPLE5MLHBlbm55YnIwMSwyNjAwMDANCjIwMDEsRkxPLE5MLGJ1cm5lYWowMSwyNTAwMDANCjIwMDEsRkxPLE5MLHNtaXRoY2gwNiwyNDAwMDANCjIwMDEsRkxPLE5MLGFsbWFuYXIwMSwyMjUwMDANCjIwMDEsRkxPLE5MLGNhc3RycmEwMSwyMTQwMDANCjIwMDEsRkxPLE5MLG96dW5hcGEwMSwyMDIwMDANCjIwMDEsRkxPLE5MLGdyaWxsamEwMSwyMDAwMDANCjIwMDEsRkxPLE5MLHJvbGlzbmEwMSwyMDAwMDANCjIwMDEsSE9VLE5MLGJpZ2dpY3IwMSw3NzUwMDAwDQoyMDAxLEhPVSxOTCxyZXlub3NoMDEsNzE2NjY2Nw0KMjAwMSxIT1UsTkwsYmFnd2VqZTAxLDY1MDAwMDANCjIwMDEsSE9VLE5MLGxpbWFqbzAxLDYyNTAwMDANCjIwMDEsSE9VLE5MLGFsb3VtbzAxLDUyNTAwMDANCjIwMDEsSE9VLE5MLHdhZ25lYmkwMiw1MDAwMDAwDQoyMDAxLEhPVSxOTCxhdXNtdWJyMDEsNDI1MDAwMA0KMjAwMSxIT1UsTkwsaGlkYWxyaTAxLDM1MDAwMDANCjIwMDEsSE9VLE5MLGJyb2NhZG8wMSwyMzAwMDAwDQoyMDAxLEhPVSxOTCxib3R0ZWtlMDEsMjAwMDAwMA0KMjAwMSxIT1UsTkwsc3BpZXJiaTAxLDE3MDAwMDANCjIwMDEsSE9VLE5MLHBvd2VsamEwNCwxNjAwMDAwDQoyMDAxLEhPVSxOTCx2aXpjYWpvMDEsMTUwMDAwMA0KMjAwMSxIT1UsTkwsZXVzZWJ0bzAxLDEzMDAwMDANCjIwMDEsSE9VLE5MLGphY2tzbWkwMiw3NTAwMDANCjIwMDEsSE9VLE5MLGhheWVzY2gwMSw1MDAwMDANCjIwMDEsSE9VLE5MLGVsYXJ0c2MwMSw0MDAwMDANCjIwMDEsSE9VLE5MLGJlcmttbGEwMSwzMDUwMDANCjIwMDEsSE9VLE5MLGRvdGVsb2MwMSwzMDUwMDANCjIwMDEsSE9VLE5MLG1lcmNlb3IwMSwzMDAwMDANCjIwMDEsSE9VLE5MLHdhcmRkYTAxLDI4NzUwMA0KMjAwMSxIT1UsTkwsY3J1em5lMDEsMjg1MDAwDQoyMDAxLEhPVSxOTCxiYXJrZWdsMDEsMjcwMDAwDQoyMDAxLEhPVSxOTCxsdWdvanUwMSwyNDUwMDANCjIwMDEsSE9VLE5MLG1pbGxld2EwNCwyNDEwMDANCjIwMDEsSE9VLE5MLHRydWJ5Y2gwMSwyMzc1MDANCjIwMDEsSE9VLE5MLGZyYW5rd2EwMSwyMTAwMDANCjIwMDEsSE9VLE5MLGxpbmVic2MwMSwyMTAwMDANCjIwMDEsTEFOLE5MLGJyb3dua2UwMSwxNTcxNDI4Ng0KMjAwMSxMQU4sTkwsZ3JlZW5zaDAxLDEyMTY2NjY3DQoyMDAxLExBTixOTCxzaGVmZmdhMDEsOTkxNjY2Nw0KMjAwMSxMQU4sTkwscGFya2NoMDEsOTkwMDAwMA0KMjAwMSxMQU4sTkwsZHJlaWZkYTAxLDk0MDAwMDANCjIwMDEsTEFOLE5MLHBlcmV6Y2EwMSw3ODMzMzMzDQoyMDAxLExBTixOTCxrYXJyb2VyMDEsNzUwMDAwMA0KMjAwMSxMQU4sTkwsc2hhd2plMDEsNjM4MzMzMw0KMjAwMSxMQU4sTkwsYXNoYnlhbjAxLDYwMDAwMDANCjIwMDEsTEFOLE5MLGdyaXNzbWEwMiw1MDAwMDAwDQoyMDAxLExBTixOTCxncnVkem1hMDEsNDAwMDAwMA0KMjAwMSxMQU4sTkwsZ29vZHd0bzAxLDM0MTY2NjcNCjIwMDEsTEFOLE5MLGFkYW1zdGUwMSwyNjAwMDAwDQoyMDAxLExBTixOTCxvbHNvbmdyMDEsMTc1MDAwMA0KMjAwMSxMQU4sTkwsZmV0dGVtaTAxLDE3MjUwMDANCjIwMDEsTEFOLE5MLGJlbHRyYWQwMSwxMjUwMDAwDQoyMDAxLExBTixOTCxrcmV1dGNoMDEsOTAwMDAwDQoyMDAxLExBTixOTCxoYW5zZWRhMDEsNjI1MDAwDQoyMDAxLExBTixOTCxib2dhcnRpMDEsNTI1MDAwDQoyMDAxLExBTixOTCxyZWJvdWplMDEsNDUwMDAwDQoyMDAxLExBTixOTCxkb25uZWNoMDEsMzAwMDAwDQoyMDAxLExBTixOTCxoZXJnZW1hMDEsMjUwMDAwDQoyMDAxLExBTixOTCxjb3JhYWwwMSwyNDAwMDANCjIwMDEsTEFOLE5MLGxvZHVjcGEwMSwyMzAwMDANCjIwMDEsTEFOLE5MLGdhZ25lZXIwMSwyMjAwMDANCjIwMDEsTEFOLE5MLHBlbmFhbjAxLDIxMDAwMA0KMjAwMSxMQU4sTkwsYm9jYWNoaTAxLDIwMDAwMA0KMjAwMSxMQU4sTkwsbnVuZXpqbzAyLDIwMDAwMA0KMjAwMSxMQU4sTkwscHJva29sdTAxLDIwMDAwMA0KMjAwMSxNSUwsTkwsaGFtbW9qZTAxLDY1MDAwMDANCjIwMDEsTUlMLE5MLGJ1cm5pamUwMSw1NTEyNTAwDQoyMDAxLE1JTCxOTCx3aGl0ZWRlMDMsNTAwMDAwMA0KMjAwMSxNSUwsTkwsbG9yZXRtYTAxLDM1MDAwMDANCjIwMDEsTUlMLE5MLGhlcm5ham8wMSwzMzMzMzMzDQoyMDAxLE1JTCxOTCx3cmlnaGphMDEsMjM1MDAwMA0KMjAwMSxNSUwsTkwsZGFtaWNqZTAxLDIzMDAwMDANCjIwMDEsTUlMLE5MLGhheW5lamkwMSwyMjAwMDAwDQoyMDAxLE1JTCxOTCxsZXNrYWN1MDEsMjIwMDAwMA0KMjAwMSxNSUwsTkwsaG91c3R0eTAxLDEzNzUwMDANCjIwMDEsTUlMLE5MLHdlYXRoZGEwMSwxMjAwMDAwDQoyMDAxLE1JTCxOTCxqZW5raWdlMDEsMTE4NzUwMA0KMjAwMSxNSUwsTkwsc2V4c29yaTAxLDExMjUwMDANCjIwMDEsTUlMLE5MLGRlamVhbWkwMSw5MTAwMDANCjIwMDEsTUlMLE5MLGJsYW5jaGUwMSw3MTI1MDANCjIwMDEsTUlMLE5MLGxvcGV6bHUwMiw3MDAwMDANCjIwMDEsTUlMLE5MLGZlcm5hdG8wMSw2MDAwMDANCjIwMDEsTUlMLE5MLGxlaXRlbWEwMSw1MDAwMDANCjIwMDEsTUlMLE5MLGNhc2FucmEwMSw0MDAwMDANCjIwMDEsTUlMLE5MLGJlbGxpcm8wMSwzMTAwMDANCjIwMDEsTUlMLE5MLG1vdXRvamEwMSwzMDAwMDANCjIwMDEsTUlMLE5MLGVjaGV2YW4wMSwyODAwMDANCjIwMDEsTUlMLE5MLGRlbG9zdmEwMSwyNzUwMDANCjIwMDEsTUlMLE5MLGN1bm5hd2kwMSwyNTUwMDANCjIwMDEsTUlMLE5MLHJpZ2RvcGEwMSwyMjUwMDANCjIwMDEsTUlMLE5MLGtpbmdyYTAxLDIyMDAwMA0KMjAwMSxNSUwsTkwsc3R1bGxldjAxLDIxNjAwMA0KMjAwMSxNSUwsTkwsc2hlZXRiZTAxLDIwMDAwMA0KMjAwMSxNT04sTkwsZ3VlcnJ2bDAxLDYwMDAwMDANCjIwMDEsTU9OLE5MLHVyYmludWcwMSw0MjAwMDAwDQoyMDAxLE1PTixOTCxzdGV2ZWxlMDEsNDAwMDAwMA0KMjAwMSxNT04sTkwsbGxveWRncjAxLDMwMDAwMDANCjIwMDEsTU9OLE5MLHRhdGlzZmUwMSwyNzUwMDAwDQoyMDAxLE1PTixOTCxpcmFidWhpMDEsMjUwMDAwMA0KMjAwMSxNT04sTkwsdmlkcm9qbzAxLDI1MDAwMDANCjIwMDEsTU9OLE5MLHZhenF1amEwMSwyMDAwMDAwDQoyMDAxLE1PTixOTCxwYXZhbmNhMDEsMTMwMDAwMA0KMjAwMSxNT04sTkwsdGVsZm9hbjAxLDEyMjUwMDANCjIwMDEsTU9OLE5MLHBldGVyY2gwMSw0NTAwMDANCjIwMDEsTU9OLE5MLG1vcmRlbWkwMSwzNzUwMDANCjIwMDEsTU9OLE5MLHJhaW5ldGkwMSwzNTAwMDANCjIwMDEsTU9OLE5MLGNhYnJlb3IwMSwzNDAwMDANCjIwMDEsTU9OLE5MLG1hcnRpc2EwMSwzMjAwMDANCjIwMDEsTU9OLE5MLGtub3JycmEwMSwzMTAwMDANCjIwMDEsTU9OLE5MLHRodXJtbWkwMSwzMDAwMDANCjIwMDEsTU9OLE5MLGJhcnJlbWkwMSwyODUwMDANCjIwMDEsTU9OLE5MLGJsdW1nZTAxLDI2MDAwMA0KMjAwMSxNT04sTkwsc3RyaWNzYzAxLDI1MDAwMA0KMjAwMSxNT04sTkwsYmVyZ2VwZTAxLDI0MjUwMA0KMjAwMSxNT04sTkwsbW90YWd1MDEsMjMzMDAwDQoyMDAxLE1PTixOTCxzZWd1aWZlMDEsMjMxNTAwDQoyMDAxLE1PTixOTCxhcm1hc3RvMDIsMjMwMDAwDQoyMDAxLE1PTixOTCxkb3duc3NjMDEsMjI1MDAwDQoyMDAxLE1PTixOTCxqb25lc3RlMDIsMjI1MDAwDQoyMDAxLE1PTixOTCxqb2huc21pMDIsMjIwMDAwDQoyMDAxLE1PTixOTCx0cmFjeWFuMDEsMjE4MDAwDQoyMDAxLE1PTixOTCxyZWFtZWJyMDEsMjEyNTAwDQoyMDAxLE1PTixOTCxicmFkbG1pMDEsMjA3MDAwDQoyMDAxLE1PTixOTCxzdGV3YXNjMDEsMjAwMDAwDQoyMDAxLE5ZTixOTCxwaWF6em1pMDEsMTM1NzE0MjkNCjIwMDEsTllOLE5MLGxlaXRlYWwwMSw5NzUwMDAwDQoyMDAxLE5ZTixOTCxhcHBpZWtlMDEsODUwMDAwMA0KMjAwMSxOWU4sTkwsdmVudHVybzAxLDgwMDAwMDANCjIwMDEsTllOLE5MLHplaWxldG8wMSw2ODMzMzMzDQoyMDAxLE5ZTixOTCxyZWVkcmkwMSw2NzUwMDAwDQoyMDAxLE5ZTixOTCxiZW5pdGFyMDEsNTgxMjUwMA0KMjAwMSxOWU4sTkwsYWxmb25lZDAxLDU3NTAwMDANCjIwMDEsTllOLE5MLG9yZG9ucmUwMSw0MDAwMDAwDQoyMDAxLE5ZTixOTCxmcmFuY2pvMDEsMzU4MzMzMw0KMjAwMSxOWU4sTkwsaGFtaWxkYTAyLDMzMzMzMzMNCjIwMDEsTllOLE5MLHdlbmRldHUwMSwzMTAwMDAwDQoyMDAxLE5ZTixOTCx0cmFjaHN0MDEsMzAwMDAwMA0KMjAwMSxOWU4sTkwsY29va2RlMDEsMjQwMDAwMA0KMjAwMSxOWU4sTkwscnVzY2hnbDAxLDE4MDAwMDANCjIwMDEsTllOLE5MLHdhbGxkbzAxLDExNTAwMDANCjIwMDEsTllOLE5MLHdoaXRlcmkwMSwxMTUwMDAwDQoyMDAxLE5ZTixOTCxoYXJyaWxlMDEsMTEwMDAwMA0KMjAwMSxOWU4sTkwscHJhdHR0bzAyLDYwMDAwMA0KMjAwMSxOWU4sTkwsc2hpbmp0czAxLDUwMDAwMA0KMjAwMSxOWU4sTkwscmVsYWZkZTAxLDQ3NTAwMA0KMjAwMSxOWU4sTkwscGF5dG9qYTAxLDI5MDAwMA0KMjAwMSxOWU4sTkwscm9zZWJyMDEsMjc4MDAwDQoyMDAxLE5ZTixOTCxqb25lc2JvMDQsMjcwMDAwDQoyMDAxLE5ZTixOTCxhZ2JheWJlMDEsMjYwMDAwDQoyMDAxLE5ZTixOTCxjcm91c3JpMDEsMjU1MDAwDQoyMDAxLE5ZTixOTCxtY2V3aWpvMDEsMjUyNTAwDQoyMDAxLE5ZTixOTCxjYW1tYWVyMDEsMjA1MDAwDQoyMDAxLE5ZTixOTCxwZXJlenRpMDEsMjA1MDAwDQoyMDAxLFBISSxOTCxsaWViZW1pMDEsNjMzMzMzMw0KMjAwMSxQSEksTkwscm9sZW5zYzAxLDU1MDAwMDANCjIwMDEsUEhJLE5MLGFicmV1Ym8wMSw0OTgzMDAwDQoyMDAxLFBISSxOTCxnbGFudmRvMDEsMzAxNjY2Nw0KMjAwMSxQSEksTkwscGVyc29ybzAxLDI5NzUwMDANCjIwMDEsUEhJLE5MLG1lc2FqbzAxLDI5MDAwMDANCjIwMDEsUEhJLE5MLGRhYWxvbTAxLDI3NTAwMDANCjIwMDEsUEhJLE5MLGNvcm1pcmgwMSwyNTgzMzMzDQoyMDAxLFBISSxOTCxidXJyZXBhMDEsMTkwNTAwMA0KMjAwMSxQSEksTkwsYm90dGFyaTAxLDE1MDAwMDANCjIwMDEsUEhJLE5MLGdvbWVzd2EwMSw5MjUwMDANCjIwMDEsUEhJLE5MLGh1bnRlYnIwMiw5MDAwMDANCjIwMDEsUEhJLE5MLGxlZXRyMDEsODAwMDAwDQoyMDAxLFBISSxOTCxicm9ja2NoMDEsNzAwMDAwDQoyMDAxLFBISSxOTCxqb3JkYWtlMDEsNzAwMDAwDQoyMDAxLFBISSxOTCxkdWNleXJvMDEsNTAwMDAwDQoyMDAxLFBISSxOTCx0ZWxlbWFtMDEsMzc1MDAwDQoyMDAxLFBISSxOTCx3b2xmcmEwMiwzNjUwMDANCjIwMDEsUEhJLE5MLGNoZW5icjAxLDMwMDAwMA0KMjAwMSxQSEksTkwsYW5kZXJtYTAyLDI4MDAwMA0KMjAwMSxQSEksTkwscGVyZXp0bzAzLDI4MDAwMA0KMjAwMSxQSEksTkwsYmVubmVnYTAxLDIzNzUwMA0KMjAwMSxQSEksTkwscGFkaWx2aTAxLDIzMDAwMA0KMjAwMSxQSEksTkwscG9saXRjbDAxLDIyNTAwMA0KMjAwMSxQSEksTkwsb3JvcGVlZDAxLDIwMDAwMA0KMjAwMSxQSEksTkwscm9sbGlqaTAxLDIwMDAwMA0KMjAwMSxQSVQsTkwsZ2lsZXNicjAyLDczMzMzMzMNCjIwMDEsUElULE5MLHlvdW5na2UwMSw2MTI1MDAwDQoyMDAxLFBJVCxOTCxrZW5kYWphMDEsNTEwMDAwMA0KMjAwMSxQSVQsTkwsYmVsbGRlMDEsNTAwMDAwMA0KMjAwMSxQSVQsTkwsb2xpdmFvbTAxLDQwMDAwMDANCjIwMDEsUElULE5MLGNvcmRvZnIwMSwzODUwMDAwDQoyMDAxLFBJVCxOTCxtZWFyZXBhMDEsMzc5MDAwMA0KMjAwMSxQSVQsTkwsYmVuc29rcjAxLDM0NTAwMDANCjIwMDEsUElULE5MLHNjaG1pamEwMSwzMjAwMDAwDQoyMDAxLFBJVCxOTCxtdWxob3RlMDEsMjc1MDAwMA0KMjAwMSxQSVQsTkwscml0Y2h0bzAxLDE5MzMzMzMNCjIwMDEsUElULE5MLHZhbmRlam8wMiwxODUwMDAwDQoyMDAxLFBJVCxOTCx3aWxsaW1pMDMsMTIwMDAwMA0KMjAwMSxQSVQsTkwsYmVuamFtaTAxLDkyNTAwMA0KMjAwMSxQSVQsTkwsb3Npa2tlMDEsODg3NTAwDQoyMDAxLFBJVCxOTCxzaWx2YWpvMDEsNzk1MDAwDQoyMDAxLFBJVCxOTCxsb2lzZXJpMDEsNzc1MDAwDQoyMDAxLFBJVCxOTCx3aWxzb2VuMDEsNjM1MDAwDQoyMDAxLFBJVCxOTCxtYW56YWpvMDEsNTUwMDAwDQoyMDAxLFBJVCxOTCx3aWxraW1hMDEsNTAwMDAwDQoyMDAxLFBJVCxOTCxzYXVlcnNjMDEsNDE2NjY3DQoyMDAxLFBJVCxOTCxicm93bmFkMDEsMzgwMDAwDQoyMDAxLFBJVCxOTCx3ZWhuZWpvMDEsMzc1MDAwDQoyMDAxLFBJVCxOTCxhbmRlcmppMDIsMjg1MDAwDQoyMDAxLFBJVCxOTCxyYW1pcmFyMDEsMjg1MDAwDQoyMDAxLFBJVCxOTCxudW5lemFiMDEsMjc1MDAwDQoyMDAxLFBJVCxOTCxicm93bmVtMDEsMjY1MDAwDQoyMDAxLFBJVCxOTCxhcnJveWJyMDEsMjI1MDAwDQoyMDAxLFBJVCxOTCxoZXJuYWFsMDEsMjA1MDAwDQoyMDAxLFBJVCxOTCxiZWltZWpvMDEsMjAwMDAwDQoyMDAxLFBJVCxOTCx3aWxzb2phMDIsMjAwMDAwDQoyMDAxLFNETixOTCxob2ZmbXRyMDEsNjc1MDAwMA0KMjAwMSxTRE4sTkwsaGl0Y2hzdDAxLDYwMDAwMDANCjIwMDEsU0ROLE5MLGtsZXNrcnkwMSw1NzUwMDAwDQoyMDAxLFNETixOTCx3aWxsaXdvMDIsNTA4MzMzMw0KMjAwMSxTRE4sTkwsZ29tZXpjaDAyLDMwMDAwMDANCjIwMDEsU0ROLE5MLGtvdHNhbWEwMSwyMTI1MDAwDQoyMDAxLFNETixOTCxnd3lubnRvMDEsMjAwMDAwMA0KMjAwMSxTRE4sTkwsbmV2aW5waDAxLDE2MjUwMDANCjIwMDEsU0ROLE5MLHdpdGFzamEwMSw4MDAwMDANCjIwMDEsU0ROLE5MLGpvbmVzYm8wMyw2MjUwMDANCjIwMDEsU0ROLE5MLG1hZ2FkZGEwMSw1NzUwMDANCjIwMDEsU0ROLE5MLGFyaWFzYWwwMSw1NTAwMDANCjIwMDEsU0ROLE5MLGphcnZpa2UwMSw1NTAwMDANCjIwMDEsU0ROLE5MLGphY2tzZGEwNCwzNTAwMDANCjIwMDEsU0ROLE5MLHRyYW1tYnUwMSwzMzUwMDANCjIwMDEsU0ROLE5MLGhlbmRlcmkwMSwzMDAwMDANCjIwMDEsU0ROLE5MLG15ZXJzcm8wMSwyOTAwMDANCjIwMDEsU0ROLE5MLHdhbGtla2UwMSwyNTUwMDANCjIwMDEsU0ROLE5MLGdvbnphd2kwMSwyNDAwMDANCjIwMDEsU0ROLE5MLGRhdmlzYmUwMSwyMzUwMDANCjIwMDEsU0ROLE5MLGVhdG9uYWQwMSwyMzUwMDANCjIwMDEsU0ROLE5MLGRhdmV5dG8wMSwyMzAwMDANCjIwMDEsU0ROLE5MLHRvbGxiYnIwMSwyMzAwMDANCjIwMDEsU0ROLE5MLGxvZXdlY2EwMSwyMjUwMDANCjIwMDEsU0ROLE5MLGRhcnJtaTAyLDIxNTAwMA0KMjAwMSxTRE4sTkwscGVyZXpzYTAxLDIwNzAwMA0KMjAwMSxTRE4sTkwsbWF1cmVkYTAxLDIwMjUwMA0KMjAwMSxTRE4sTkwsbWVuZGVkbzAxLDIwMDAwMA0KMjAwMSxTRk4sTkwsYm9uZHNiYTAxLDEwMzAwMDAwDQoyMDAxLFNGTixOTCxuZW5ybzAxLDY2MDAwMDANCjIwMDEsU0ZOLE5MLGtlbnRqZTAxLDYwMDAwMDANCjIwMDEsU0ZOLE5MLHNub3dqdDAxLDU3NTAwMDANCjIwMDEsU0ZOLE5MLHJ1ZXRla2kwMSw0ODY2NjY3DQoyMDAxLFNGTixOTCxlc3Rlc3NoMDEsNDcyNTAwMA0KMjAwMSxTRk4sTkwsYXVyaWxyaTAxLDMyNTAwMDANCjIwMDEsU0ZOLE5MLGhlcm5hbGkwMSwzMDI1MDAwDQoyMDAxLFNGTixOTCxiZW5hcm1hMDEsMjcwMDAwMA0KMjAwMSxTRk4sTkwsZW1icmVhbDAxLDI0MDAwMDANCjIwMDEsU0ZOLE5MLGpvaG5zam8wNywyMTc1MDAwDQoyMDAxLFNGTixOTCxnYXJkbm1hMDEsMTc1MDAwMA0KMjAwMSxTRk4sTkwsZGF2aXNlcjAxLDE1MDAwMDANCjIwMDEsU0ZOLE5MLGRhdmlzcnUwMSwxMzAwMDAwDQoyMDAxLFNGTixOTCx3b3JyZXRpMDEsMTMwMDAwMA0KMjAwMSxTRk4sTkwscm9kcmlmZTAxLDEwMzc1MDANCjIwMDEsU0ZOLE5MLGR1bnN0c2gwMSwxMDAwMDAwDQoyMDAxLFNGTixOTCxvcnRpenJ1MDEsOTEyNTAwDQoyMDAxLFNGTixOTCxzYW50aWJlMDEsNTAwMDAwDQoyMDAxLFNGTixOTCxjcmVzcGZlMDEsNDI1MDAwDQoyMDAxLFNGTixOTCxlc3RhbGJvMDIsMzEwMDAwDQoyMDAxLFNGTixOTCxyaW9zYXIwMSwzMTAwMDANCjIwMDEsU0ZOLE5MLG1hcnRpcmEwMywzMDAwMDANCjIwMDEsU0ZOLE5MLG11cnJhY2EwMSwyMjI1MDANCjIwMDEsU0ZOLE5MLGZ1bHR6YWEwMSwyMjAwMDANCjIwMDEsU0ZOLE5MLGZlbGl6cGUwMSwyMDEwMDANCjIwMDEsU0ZOLE5MLG1pbm9yZGEwMSwyMDAwMDANCjIwMDEsU0xOLE5MLG1jZ3dpbWEwMSwxMTAwMDAwMA0KMjAwMSxTTE4sTkwsbGFua2ZyYTAxLDgxMDAwMDANCjIwMDEsU0xOLE5MLGJlbmVzYW4wMSw2NjY2NjY3DQoyMDAxLFNMTixOTCxraWxlZGEwMSw2NjY2NjY3DQoyMDAxLFNMTixOTCxlZG1vbmppMDEsNjMzMzMzMw0KMjAwMSxTTE4sTkwsaGVybWFkdTAxLDUzMzMzMzMNCjIwMDEsU0xOLE5MLHJlbnRlZWQwMSw0NTAwMDAwDQoyMDAxLFNMTixOTCx2aW5hZmUwMSw0MzMzMzMzDQoyMDAxLFNMTixOTCx0aW1saW1pMDEsNDI1MDAwMA0KMjAwMSxTTE4sTkwsaGVybmFjYTAxLDM1MDAwMDANCjIwMDEsU0xOLE5MLGRyZXdqZDAxLDI3NTAwMDANCjIwMDEsU0xOLE5MLHZlcmVzZGEwMSwxOTAwMDAwDQoyMDAxLFNMTixOTCxjaHJpc2phMDEsMTYwMDAwMA0KMjAwMSxTTE4sTkwsamFtZXNtaTAxLDE1MjUwMDANCjIwMDEsU0xOLE5MLHBhcXVlY3IwMSwxNTAwMDAwDQoyMDAxLFNMTixOTCxtb3JyaW1hMDEsMTIwMDAwMA0KMjAwMSxTTE4sTkwsaHV0Y2hjaDAxLDExNzUwMDANCjIwMDEsU0xOLE5MLHN0ZXBoZ2EwMSwxMDI1MDAwDQoyMDAxLFNMTixOTCxib25pbGJvMDEsOTAwMDAwDQoyMDAxLFNMTixOTCxtYXRoZW1pMDEsOTAwMDAwDQoyMDAxLFNMTixOTCxrbGluZXN0MDIsNzUwMDAwDQoyMDAxLFNMTixOTCxhbmtpZXJpMDEsNDAwMDAwDQoyMDAxLFNMTixOTCx0YWJha2plMDEsNDAwMDAwDQoyMDAxLFNMTixOTCxtYXJyZWVsMDEsMzc1MDAwDQoyMDAxLFNMTixOTCxwb2xhbnBsMDEsMzIwMDAwDQoyMDAxLFNMTixOTCxzdXR0b2xhMDEsMzA1MDAwDQoyMDAxLFNMTixOTCxtYXR0aG1pMDEsMjI1MDAwDQoyMDAxLFNMTixOTCxzdGVjaGdlMDEsMjA1MDAwDQoyMDAxLFNMTixOTCxoYWNrbWx1MDEsMjAwMDAwDQoyMDAxLFNMTixOTCxwdWpvbGFsMDEsMjAwMDAwDQoyMDAyLEFOQSxBTCxzYWxtb3RpMDEsOTY1MDAwMA0KMjAwMixBTkEsQUwsYXBwaWVrZTAxLDk1MDAwMDANCjIwMDIsQU5BLEFMLHNlbGVhYTAxLDcxNjY2NjcNCjIwMDIsQU5BLEFMLGVyc3RhZGEwMSw2MjUwMDAwDQoyMDAyLEFOQSxBTCxwZXJjaXRyMDEsNTI1MDAwMA0KMjAwMixBTkEsQUwsYW5kZXJnYTAxLDUwMDAwMDANCjIwMDIsQU5BLEFMLGZ1bGxtYnIwMSw0MDAwMDAwDQoyMDAyLEFOQSxBTCxnbGF1c3RyMDEsNDAwMDAwMA0KMjAwMixBTkEsQUwsc3BpZXpzYzAxLDIyNzUwMDANCjIwMDIsQU5BLEFMLGxldmluYWwwMSwxMzI1MDAwDQoyMDAyLEFOQSxBTCxjb29rZGUwMSwxMjUwMDAwDQoyMDAyLEFOQSxBTCxwYWxtZW9yMDEsMTAwMDAwMA0KMjAwMixBTkEsQUwsb3J0aXpyYTAxLDU3NTAwMA0KMjAwMixBTkEsQUwsZmFicmVqbzAxLDUwMDAwMA0KMjAwMixBTkEsQUwsZ2lsYmUwMSw0MDAwMDANCjIwMDIsQU5BLEFMLGtlbm5lYWQwMSwzNzUwMDANCjIwMDIsQU5BLEFMLG1vbGluYmUwMSwzNTAwMDANCjIwMDIsQU5BLEFMLHdhc2hiamEwMSwzNTAwMDANCjIwMDIsQU5BLEFMLHNjaG9lc2MwMSwzMjUwMDANCjIwMDIsQU5BLEFMLHdhbGxkbzAxLDMwMDAwMA0KMjAwMixBTkEsQUwsZWNrc3RkYTAxLDI4MDAwMA0KMjAwMixBTkEsQUwscG90ZWxvMDEsMjU1MDAwDQoyMDAyLEFOQSxBTCx3b290ZXNoMDEsMjUwMDAwDQoyMDAyLEFOQSxBTCxuaWV2ZWpvMDEsMjQwMDAwDQoyMDAyLEFOQSxBTCx3ZWJlcmJlMDEsMjQwMDAwDQoyMDAyLEFOQSxBTCxkYXZhbmplMDIsMjA3NTAwDQoyMDAyLEFOQSxBTCxsdWthc21hMDEsMjA3NTAwDQoyMDAyLEFOQSxBTCxncmVlbnN0MDEsMjAwMDAwDQoyMDAyLEJBTCxBTCxiZWxsZWFsMDEsMTIzNjg3OTANCjIwMDIsQkFMLEFMLHNlZ3VpZGEwMSw2NzYyODk1DQoyMDAyLEJBTCxBTCxlcmlja3NjMDEsNTE0Mjk4Ng0KMjAwMixCQUwsQUwsYmF0aXN0bzAxLDQ5MDAwMDANCjIwMDIsQkFMLEFMLGJvcmRpbWkwMSw0ODczNDM5DQoyMDAyLEJBTCxBTCxoZW50Z3BhMDEsNDI0Njg3Nw0KMjAwMixCQUwsQUwsY29uaW5qZTAxLDM1MDAwMDANCjIwMDIsQkFMLEFMLHBvbnNvc2kwMSwyNjUwMDAwDQoyMDAyLEJBTCxBTCxjb3Jkb21hMDEsMjUwMDAwMA0KMjAwMixCQUwsQUwsZm9yZHlicjAxLDI1MDAwMDANCjIwMDIsQkFMLEFMLGdyb29tYnUwMSwyNTAwMDAwDQoyMDAyLEJBTCxBTCxqb2huc2phMDIsMTgwMDAwMA0KMjAwMixCQUwsQUwsc2luZ2xjaDAxLDE0MDAwMDANCjIwMDIsQkFMLEFMLGJyb2NrY2gwMSwxMDAwMDAwDQoyMDAyLEJBTCxBTCxtb3JhbWUwMSwzNTAwMDANCjIwMDIsQkFMLEFMLGhhaXJzamUwMiwzMDAwMDANCjIwMDIsQkFMLEFMLHJpY2hhY2gwMSwzMDAwMDANCjIwMDIsQkFMLEFMLHJ5YW5iajAxLDMwMDAwMA0KMjAwMixCQUwsQUwsbWFkdXJjYTAxLDI3MDAwMA0KMjAwMixCQUwsQUwscm9iZXJ3aTAxLDI2MDAwMA0KMjAwMixCQUwsQUwsdG93ZXJqbzAxLDI0NTAwMA0KMjAwMixCQUwsQUwsZ2liYm9qYTAxLDIzMjUwMA0KMjAwMixCQUwsQUwsbWF0b3NsdTAxLDIzMDAwMA0KMjAwMixCQUwsQUwsbHVuYXJmZTAxLDIyNTAwMA0KMjAwMixCQUwsQUwsanVsaW9qbzAxLDIxNjAwMA0KMjAwMixCQUwsQUwscGFycmlqbzAxLDIxNTAwMA0KMjAwMixCQUwsQUwscml2ZXJsdTAyLDIwNTAwMA0KMjAwMixCQUwsQUwsYmF1ZXJyaTAxLDIwMDAwMA0KMjAwMixCQUwsQUwsZ2FyY2lsdTAyLDIwMDAwMA0KMjAwMixCQUwsQUwsZ2lsZ2UwMSwyMDAwMDANCjIwMDIsQkFMLEFMLGxvcGV6cm8wMSwyMDAwMDANCjIwMDIsQkFMLEFMLG1vcmlhbWkwMSwyMDAwMDANCjIwMDIsQk9TLEFMLHJhbWlybWEwMiwxNTQ2MjcyNw0KMjAwMixCT1MsQUwsbWFydGlwZTAyLDE0MDAwMDAwDQoyMDAyLEJPUyxBTCxnYXJjaW5vMDEsOTAwMDAwMA0KMjAwMixCT1MsQUwsZGFtb25qbzAxLDcyNTAwMDANCjIwMDIsQk9TLEFMLG9saXZlZGEwMiw3MDAwMDAwDQoyMDAyLEJPUyxBTCxvZmZlcmpvMDEsNjc1MDAwMA0KMjAwMixCT1MsQUwsdXJiaW51ZzAxLDY3MDAwMDANCjIwMDIsQk9TLEFMLGhlcm1hZHUwMSw1ODMzMzMzDQoyMDAyLEJPUyxBTCxidXJrZWpvMDMsNTUwMDAwMA0KMjAwMixCT1MsQUwsY2xhcmt0bzAyLDUwMDAwMDANCjIwMDIsQk9TLEFMLHZhcml0amEwMSwzNTAwMDAwDQoyMDAyLEJPUyxBTCx3YWtlZnRpMDEsMzIwMDAwMA0KMjAwMixCT1MsQUwsbG93ZWRlMDEsMzEyNTAwMA0KMjAwMixCT1MsQUwsbml4b250cjAxLDI3MDAwMDANCjIwMDIsQk9TLEFMLGRhdWJhYnIwMSwyMzI1MDAwDQoyMDAyLEJPUyxBTCxjYXN0aWZyMDEsMjI1MDAwMA0KMjAwMixCT1MsQUwsZ2FyY2VyaTAxLDIyMDAwMDANCjIwMDIsQk9TLEFMLGFycm9qcm8wMSwxOTAwMDAwDQoyMDAyLEJPUyxBTCxiYWVyZ2NhMDEsNzAwMDAwDQoyMDAyLEJPUyxBTCxzYW5jaHJlMDEsNzAwMDAwDQoyMDAyLEJPUyxBTCxtaXJhYmRvMDEsNjUwMDAwDQoyMDAyLEJPUyxBTCxiYW5rc3dpMDEsNDUwMDAwDQoyMDAyLEJPUyxBTCx3YWxsYWplMDEsNDAwMDAwDQoyMDAyLEJPUyxBTCxoZW5kZXJpMDEsMzUwMDAwDQoyMDAyLEJPUyxBTCxtZXJsb2xvMDEsMjkwMDAwDQoyMDAyLEJPUyxBTCxoaWxsZXNoMDIsMjYwMDAwDQoyMDAyLEJPUyxBTCxjb2xlbW1pMDEsMjUwMDAwDQoyMDAyLEJPUyxBTCxmb3NzdWNhMDEsMjE1MDAwDQoyMDAyLEJPUyxBTCxjcmF3ZnBhMDIsMjA1MDAwDQoyMDAyLEJPUyxBTCxwaWNrZWNhMDEsMjAwMDAwDQoyMDAyLENIQSxBTCx0aG9tYWZyMDQsOTkyNzAwMA0KMjAwMixDSEEsQUwsb3Jkb25tYTAxLDY1MDAwMDANCjIwMDIsQ0hBLEFMLGR1cmhhcmEwMSw2MzAwMDAwDQoyMDAyLENIQSxBTCx2YWxlbmpvMDMsNTAwMDAwMA0KMjAwMixDSEEsQUwsY2xheXRybzAxLDQ1MDAwMDANCjIwMDIsQ0hBLEFMLGZvdWxra2UwMSw0MDAwMDAwDQoyMDAyLENIQSxBTCxrb25lcnBhMDEsMzgwMDAwMA0KMjAwMixDSEEsQUwscml0Y2h0bzAxLDM1MzMzMzMNCjIwMDIsQ0hBLEFMLGxlZWNhMDEsMjcwMDAwMA0KMjAwMixDSEEsQUwsYWxvbWFzYTAyLDI1MDAwMDANCjIwMDIsQ0hBLEFMLG9zdW5hYW4wMSwyMjAwMDAwDQoyMDAyLENIQSxBTCxob3dyeWJvMDEsMTIwMDAwMA0KMjAwMixDSEEsQUwsbG9mdG9rZTAxLDEwMjUwMDANCjIwMDIsQ0hBLEFMLGdyYWZmdG8wMSw1NzUwMDANCjIwMDIsQ0hBLEFMLGpvaG5zbWEwMiwzMjAwMDANCjIwMDIsQ0hBLEFMLGJ1ZWhybWEwMSwzMTAwMDANCjIwMDIsQ0hBLEFMLGxpZWZlamUwMSwyODUwMDANCjIwMDIsQ0hBLEFMLHd1bnNja2UwMSwyODUwMDANCjIwMDIsQ0hBLEFMLGdhcmxham8wMSwyNzUwMDANCjIwMDIsQ0hBLEFMLGJpZGRscm8wMSwyNTAwMDANCjIwMDIsQ0hBLEFMLGJhcmNlbG8wMSwyNDAwMDANCjIwMDIsQ0hBLEFMLGdsb3ZlZ2EwMSwyNDAwMDANCjIwMDIsQ0hBLEFMLG1hcnRlZGEwMSwyMjc1MDANCjIwMDIsQ0hBLEFMLHJvd2FuYWEwMSwyMjUwMDANCjIwMDIsQ0hBLEFMLHdyaWdoZGEwMiwyMjAwMDANCjIwMDIsQ0hBLEFMLHBvcnppbWkwMSwyMTUwMDANCjIwMDIsQ0hBLEFMLHJhdWNoam8wMSwyMDAwMDANCjIwMDIsQ0xFLEFMLHRob21lamkwMSw4MDAwMDAwDQoyMDAyLENMRSxBTCxmaW5sZWNoMDEsNzkxMTk0OA0KMjAwMixDTEUsQUwsYnVya3NlbDAxLDY2NjY2NjcNCjIwMDIsQ0xFLEFMLG5hZ3ljaDAxLDYwMDAwMDANCjIwMDIsQ0xFLEFMLGZyeW1hdHIwMSw1ODI1MDAwDQoyMDAyLENMRSxBTCxsYXd0b21hMDIsNTI1MDAwMA0KMjAwMixDTEUsQUwsY29sb25iYTAxLDQ5MjUwMDANCjIwMDIsQ0xFLEFMLHZpenF1b20wMSw0NTAwMDAwDQoyMDAyLENMRSxBTCx3cmlnaGphMDIsNDMxMjUwMA0KMjAwMixDTEUsQUwsY29yZGV3aTAxLDQxNjY2NjcNCjIwMDIsQ0xFLEFMLGJhZXpkYTAxLDQxMjUwMDANCjIwMDIsQ0xFLEFMLHdpY2ttYm8wMSwzNDAwMDAwDQoyMDAyLENMRSxBTCxzaHVleXBhMDEsMzI1MDAwMA0KMjAwMixDTEUsQUwsZ3V0aWVyaTAxLDIxNjY2NjcNCjIwMDIsQ0xFLEFMLHRhdWJlZWQwMSwxODAwMDAwDQoyMDAyLENMRSxBTCxyaW5jb3JpMDEsMTUwMDAwMA0KMjAwMixDTEUsQUwsZGlhemVpMDEsMTA4NzUwMA0KMjAwMixDTEUsQUwsc2FiYXRjYzAxLDcwMDAwMA0KMjAwMixDTEUsQUwsd29obGVtYTAxLDYwMDAwMA0KMjAwMixDTEUsQUwscGVyZXplZDAyLDUwMDAwMA0KMjAwMixDTEUsQUwsY2FicmVqbzAyLDI2NjAwMA0KMjAwMixDTEUsQUwsYnJhbnlydTAxLDI1MTAwMA0KMjAwMixDTEUsQUwscmlza2VkYTAxLDIyNzUwMA0KMjAwMixDTEUsQUwsYnJhZGxtaTAxLDIyMTAwMA0KMjAwMixDTEUsQUwscmlnZ2FqZTAxLDIxODAwMA0KMjAwMixDTEUsQUwsd2VzdGJqYTAxLDIxNzAwMA0KMjAwMixDTEUsQUwsbWNkb25qbzAzLDIxMDAwMA0KMjAwMixDTEUsQUwsZHJlc2VyeTAxLDIwNjUwMA0KMjAwMixDTEUsQUwsZXNjb2JhbDAxLDIwNTUwMA0KMjAwMixDTEUsQUwsYW5kZXJicjAxLDIwMDAwMA0KMjAwMixERVQsQUwscGFsbWVkZTAxLDgwMDAwMDANCjIwMDIsREVULEFMLGxpbWFqbzAxLDcyNTAwMDANCjIwMDIsREVULEFMLGVhc2xlZGEwMSw2MjUwMDAwDQoyMDAyLERFVCxBTCxoaWdnaWJvMDIsNTg1MDAwMA0KMjAwMixERVQsQUwseW91bmdkbTAxLDU1MDAwMDANCjIwMDIsREVULEFMLHNwYXJrc3QwMSwzMDAwMDAwDQoyMDAyLERFVCxBTCxtb2VobGJyMDEsMjQwMDAwMA0KMjAwMixERVQsQUwsd2VhdmVqZTAxLDIzNTAwMDANCjIwMDIsREVULEFMLHBhcXVlY3IwMSwyMTI1MDAwDQoyMDAyLERFVCxBTCxhbmRlcm1hMDEsMTgwMDAwMA0KMjAwMixERVQsQUwscGF0dGVkYTA0LDE3MDAwMDANCjIwMDIsREVULEFMLGhhbHRlc2gwMSwxNTAwMDAwDQoyMDAyLERFVCxBTCxwYW5pYWpvMDEsMTMyNTAwMA0KMjAwMixERVQsQUwsZmlja3JvMDEsMTE1MDAwMA0KMjAwMixERVQsQUwsYWNldmVqdTAxLDg1MDAwMA0KMjAwMixERVQsQUwsamFja3NkYTA0LDYyNTAwMA0KMjAwMixERVQsQUwsbWFnZWV3ZTAxLDQyNTAwMA0KMjAwMixERVQsQUwsY3J1emphMDEsNDAwMDAwDQoyMDAyLERFVCxBTCxtYWNpYWpvMDEsMzc1MDAwDQoyMDAyLERFVCxBTCxtZWx1c21pMDEsMzQ1MDAwDQoyMDAyLERFVCxBTCxyZWRtYW1hMDEsMzAwMDAwDQoyMDAyLERFVCxBTCxzaW1vbnJhMDEsMjkwMDAwDQoyMDAyLERFVCxBTCxjb3JuZW5hMDEsMjE4MDAwDQoyMDAyLERFVCxBTCxwZXR0eWFkMDEsMjE3NTAwDQoyMDAyLERFVCxBTCxtaWxsZW1hMDEsMjAyNTAwDQoyMDAyLERFVCxBTCxmYXJuc2plMDEsMjAwMDAwDQoyMDAyLERFVCxBTCxwZWFyc3RlMDEsMjAwMDAwDQoyMDAyLERFVCxBTCxyaXZlcm1pMDIsMjAwMDAwDQoyMDAyLEtDQSxBTCxzd2Vlbm1pMDEsODAwMDAwMA0KMjAwMixLQ0EsQUwsaGVybmFybzAxLDYwMDAwMDANCjIwMDIsS0NBLEFMLHN1cHBhamUwMSw0MTUwMDAwDQoyMDAyLEtDQSxBTCxwZXJlem5lMDEsNDEwMDAwMA0KMjAwMixLQ0EsQUwscmFuZGFqbzAxLDQwMDAwMDANCjIwMDIsS0NBLEFMLGJlbHRyY2EwMSwzNTAwMDAwDQoyMDAyLEtDQSxBTCxtYXluZWJyMDEsMjUwMDAwMA0KMjAwMixLQ0EsQUwsdHVja2VtaTAxLDIyNTAwMDANCjIwMDIsS0NBLEFMLGtub2JsY2gwMSwyMDAwMDAwDQoyMDAyLEtDQSxBTCxncmltc2phMDEsMTkwMDAwMA0KMjAwMixLQ0EsQUwsc3RlaW5ibDAxLDEzNTAwMDANCjIwMDIsS0NBLEFMLGJ5cmRwYTAxLDg1MDAwMA0KMjAwMixLQ0EsQUwsbWNjYXJkYTAxLDg1MDAwMA0KMjAwMixLQ0EsQUwsYWxpY2VsdTAxLDgwMDAwMA0KMjAwMixLQ0EsQUwsaWJhbmVyYTAxLDgwMDAwMA0KMjAwMixLQ0EsQUwsZmVibGVjYTAxLDc3NTAwMA0KMjAwMixLQ0EsQUwsbWF5ZGEwMiwzNzUwMDANCjIwMDIsS0NBLEFMLHF1aW5ubWEwMSwzNzUwMDANCjIwMDIsS0NBLEFMLGJhaWxlY28wMSwzMjAwMDANCjIwMDIsS0NBLEFMLHJlaWNoZGEwMSwzMTAwMDANCjIwMDIsS0NBLEFMLGR1cmJpY2gwMSwyNzUwMDANCjIwMDIsS0NBLEFMLGhpbmNoYWowMSwyNjAwMDANCjIwMDIsS0NBLEFMLHNhZGxlZG8wMSwyNTUwMDANCjIwMDIsS0NBLEFMLHdpbHNva3IwMSwyNDAwMDANCjIwMDIsS0NBLEFMLHNob3VzYnIwMSwyMTUwMDANCjIwMDIsS0NBLEFMLGF1c3RpamUwMSwyMDUwMDANCjIwMDIsS0NBLEFMLGJlcmdlYnIwMSwyMDIwMDANCjIwMDIsS0NBLEFMLGFmZmVsamUwMSwyMDAwMDANCjIwMDIsS0NBLEFMLGFzZW5jbWkwMSwyMDAwMDANCjIwMDIsTUlOLEFMLHJhZGtlYnIwMSw4NzUwMDAwDQoyMDAyLE1JTixBTCxyZWVkcmkwMSw3MDAwMDAwDQoyMDAyLE1JTixBTCxtaWx0b2VyMDEsNDAwMDAwMA0KMjAwMixNSU4sQUwsaGF3a2lsYTAxLDI3NTAwMDANCjIwMDIsTUlOLEFMLGh1bnRldG8wMSwyNDAwMDAwDQoyMDAyLE1JTixBTCxtYXlzam8wMSwyMzUwMDAwDQoyMDAyLE1JTixBTCxrb3NraWNvMDEsMjE1MDAwMA0KMjAwMixNSU4sQUwsZ3VhcmRlZDAxLDE4MDAwMDANCjIwMDIsTUlOLEFMLHdlbGxzYm8wMSwxNzAwMDAwDQoyMDAyLE1JTixBTCxndXptYWNyMDEsMTQyNTAwMA0KMjAwMixNSU4sQUwsaG9ja2lkZTAxLDExMDAwMDANCjIwMDIsTUlOLEFMLG9ydGl6ZGEwMSw5NTAwMDANCjIwMDIsTUlOLEFMLGphY2tzbWkwMiw1MDAwMDANCjIwMDIsTUlOLEFMLHByaW5jdG8wMSw0NTAwMDANCjIwMDIsTUlOLEFMLGpvbmVzamEwNCwzMTI1MDANCjIwMDIsTUlOLEFMLG1pZW50ZG8wMSwyODUwMDANCjIwMDIsTUlOLEFMLG1vcnJpd2EwMiwyNzUwMDANCjIwMDIsTUlOLEFMLHBpZXJ6YWowMSwyNTAwMDANCjIwMDIsTUlOLEFMLHJpdmFzbHUwMSwyNDAwMDANCjIwMDIsTUlOLEFMLGNhbml6amEwMSwyMzUwMDANCjIwMDIsTUlOLEFMLGJ1Y2hhYnIwMSwyMjUwMDANCjIwMDIsTUlOLEFMLGR1dmFsbWkwMSwyMjUwMDANCjIwMDIsTUlOLEFMLGNyZXNzamEwMSwyMjI1MDANCjIwMDIsTUlOLEFMLGxvaHNla3kwMSwyMTUwMDANCjIwMDIsTUlOLEFMLHJvbWVyamMwMSwyMTUwMDANCjIwMDIsTUlOLEFMLGZyZWRla2UwMSwyMDAwMDANCjIwMDIsTUlOLEFMLG1vaHJkdTAxLDIwMDAwMA0KMjAwMixOWUEsQUwsamV0ZXJkZTAxLDE0NjAwMDAwDQoyMDAyLE5ZQSxBTCx3aWxsaWJlMDIsMTIzNTcxNDMNCjIwMDIsTllBLEFMLG11c3NpbWkwMSwxMTAwMDAwMA0KMjAwMixOWUEsQUwsZ2lhbWJqYTAxLDEwNDI4NTcxDQoyMDAyLE5ZQSxBTCxjbGVtZXJvMDIsMTAzMDAwMDANCjIwMDIsTllBLEFMLHBldHRpYW4wMSw5NTAwMDAwDQoyMDAyLE5ZQSxBTCxyaXZlcm1hMDEsOTQ1MDAwMA0KMjAwMixOWUEsQUwsdmVudHVybzAxLDg1MDAwMDANCjIwMDIsTllBLEFMLHBvc2Fkam8wMSw3MDAwMDAwDQoyMDAyLE5ZQSxBTCxoaXRjaHN0MDEsNDkzNjcxOQ0KMjAwMixOWUEsQUwsd2hpdGVybzAyLDQ1MDAwMDANCjIwMDIsTllBLEFMLGthcnNhc3QwMSw0MDAwMDAwDQoyMDAyLE5ZQSxBTCxoZXJuYW9yMDEsMzIwMDAwMA0KMjAwMixOWUEsQUwsbWVuZG9yYTAxLDI2MDAwMDANCjIwMDIsTllBLEFMLHN0YW50bWkwMiwyNTAwMDAwDQoyMDAyLE5ZQSxBTCx3ZWxsc2RhMDEsMjI1MDAwMA0KMjAwMixOWUEsQUwsd2lsbGlnZTAyLDIwMDAwMDANCjIwMDIsTllBLEFMLHZhbmRlam8wMiwxODUwMDAwDQoyMDAyLE5ZQSxBTCxzcGVuY3NoMDEsODg1MDAwDQoyMDAyLE5ZQSxBTCxjb29tZXJvMDEsNzUwMDAwDQoyMDAyLE5ZQSxBTCx3aWxzb2VuMDEsNzIwMDAwDQoyMDAyLE5ZQSxBTCxjYXN0aWFsMDEsNjUwMDAwDQoyMDAyLE5ZQSxBTCxzb3JpYWFsMDEsNjMwMDAwDQoyMDAyLE5ZQSxBTCxsaWxseXRlMDEsMjM3MTUwDQoyMDAyLE5ZQSxBTCxjaG9hdHJhMDEsMjIzMzUwDQoyMDAyLE5ZQSxBTCxqb2huc25pMDEsMjIwNjUwDQoyMDAyLE5ZQSxBTCxwYXJrZWNoMDEsMjE4NjAwDQoyMDAyLE5ZQSxBTCxrZWlzbHJhMDEsMjExNDAwDQoyMDAyLE5ZQSxBTCx0ZXNzbWphMDEsMjEwMDAwDQoyMDAyLE9BSyxBTCxkeWVqZTAxLDcxNjY2NjcNCjIwMDIsT0FLLEFMLGp1c3RpZGEwMSw3MDAwMDAwDQoyMDAyLE9BSyxBTCx0ZWphZG1pMDEsMzYyNTAwMA0KMjAwMixPQUssQUwsbGlkbGVjbzAxLDI1NTAwMDANCjIwMDIsT0FLLEFMLGtvY2hiaTAxLDI0MzMzMzMNCjIwMDIsT0FLLEFMLG1lY2lyamkwMSwyMzY2NjY3DQoyMDAyLE9BSyxBTCxjaGF2ZWVyMDEsMjEyNTAwMA0KMjAwMixPQUssQUwsbWFnbmFtaTAxLDEyMDAwMDANCjIwMDIsT0FLLEFMLGdpYW1iamUwMSwxMDY1MDAwDQoyMDAyLE9BSyxBTCx2ZWxhcnJhMDEsMTAwMDAwMA0KMjAwMixPQUssQUwsaGF0dGVzYzAxLDkwMDAwMA0KMjAwMixPQUssQUwsaHVkc290aTAxLDg3NTAwMA0KMjAwMixPQUssQUwsaG9sdHptaTAxLDgyNTAwMA0KMjAwMixPQUssQUwsdmVuYWZtaTAxLDgxMjUwMA0KMjAwMixPQUssQUwsbXVsZGVtYTAxLDgwMDAwMA0KMjAwMixPQUssQUwsbXllcnNncjAxLDgwMDAwMA0KMjAwMixPQUssQUwsc2FlbnpvbDAxLDgwMDAwMA0KMjAwMixPQUssQUwsdGFtamUwMSw3MDAwMDANCjIwMDIsT0FLLEFMLGxvbmd0ZTAxLDY3NTAwMA0KMjAwMixPQUssQUwsaGVybmFyYTAyLDQ5NzUwMA0KMjAwMixPQUssQUwsY29sYW5taTAxLDMwMDAwMA0KMjAwMixPQUssQUwsbWVuZWNmcjAxLDI5NTAwMA0KMjAwMixPQUssQUwseml0b2JhMDEsMjk1MDAwDQoyMDAyLE9BSyxBTCxoaWxqdWVyMDEsMjM3NTAwDQoyMDAyLE9BSyxBTCxicmFkZmNoMDEsMjM1MDAwDQoyMDAyLE9BSyxBTCx2YWxkZW1hMDIsMjIzMDAwDQoyMDAyLE9BSyxBTCxwZW5hY2EwMSwyMDIwMDANCjIwMDIsU0VBLEFMLGJvb25lYnIwMSw4MDAwMDAwDQoyMDAyLFNFQSxBTCxtYXJ0aWVkMDEsNzA4NjY2OA0KMjAwMixTRUEsQUwsb2xlcnVqbzAxLDY5NTAwMDANCjIwMDIsU0VBLEFMLG1veWVyamEwMSw2NTAwMDAwDQoyMDAyLFNFQSxBTCxjaXJpbGplMDEsNjM3NTAwMA0KMjAwMixTRUEsQUwsc2FzYWtrYTAxLDUwNzAwMDANCjIwMDIsU0VBLEFMLGNhbWVybWkwMSw0NjY2NjY3DQoyMDAyLFNFQSxBTCx3aWxzb2RhMDEsNDUwMDAwMA0KMjAwMixTRUEsQUwsZ2FyY2lmcjAyLDM4MDAwMDANCjIwMDIsU0VBLEFMLHN1enVraWMwMSwzNjk2MDAwDQoyMDAyLFNFQSxBTCxyaG9kZWFyMDEsMzUwMDAwMA0KMjAwMixTRUEsQUwsYWJib3RwYTAxLDM0MjUwMDANCjIwMDIsU0VBLEFMLG5lbHNvamUwMSwzMzMzMzMzDQoyMDAyLFNFQSxBTCxtY2xlbW1hMDEsMzE1MDAwMA0KMjAwMixTRUEsQUwsc2llcnJydTAxLDE5MDAwMDANCjIwMDIsU0VBLEFMLGhhc2Vnc2gwMSwxNTAwMDAwDQoyMDAyLFNFQSxBTCxndWlsbGNhMDEsMTQwMDAwMA0KMjAwMixTRUEsQUwsaGFsYW1qbzAxLDE0MDAwMDANCjIwMDIsU0VBLEFMLHJlbGFmZGUwMSwxMjc1MDAwDQoyMDAyLFNFQSxBTCxiYWxkd2phMDEsMTI1MDAwMA0KMjAwMixTRUEsQUwsZ2lwc29jaDAxLDQ1MDAwMA0KMjAwMixTRUEsQUwsZGF2aXNiZTAxLDM1MDAwMA0KMjAwMixTRUEsQUwscGluZWlqbzAxLDI1NTAwMA0KMjAwMixTRUEsQUwsZnJhbmtyeTAxLDI1MDAwMA0KMjAwMixTRUEsQUwsdWd1ZXRsdTAxLDIwMDAwMA0KMjAwMixUQkEsQUwsdmF1Z2hncjAxLDg3NTAwMDANCjIwMDIsVEJBLEFMLGFsdmFyd2kwMSw4MDAwMDAwDQoyMDAyLFRCQSxBTCxncmlldmJlMDEsNDAwMDAwMA0KMjAwMixUQkEsQUwsZmxhaGVqbzAxLDMyNTAwMDANCjIwMDIsVEJBLEFMLHlhbmVzMDEsMTUwMDAwMA0KMjAwMixUQkEsQUwsd2lsc29wYTAyLDEyMDAwMDANCjIwMDIsVEJBLEFMLGdvbWV6Y2gwMiwxMDAwMDAwDQoyMDAyLFRCQSxBTCx3aW5ucmEwMSw5NjAwMDANCjIwMDIsVEJBLEFMLGNyZWVrZG8wMSw2ODUwMDANCjIwMDIsVEJBLEFMLGpvaG5zcnUwMSw1NzUwMDANCjIwMDIsVEJBLEFMLHJ1cGVyeTAxLDU3NTAwMA0KMjAwMixUQkEsQUwsbWNnbGlrZTAxLDMwMDAwMA0KMjAwMixUQkEsQUwsc3R1cnR0YTAxLDI5NTAwMA0KMjAwMixUQkEsQUwsY294c3QwMSwyODAwMDANCjIwMDIsVEJBLEFMLHNtaXRoYm8wNiwyNTUwMDANCjIwMDIsVEJBLEFMLHR5bmVyamEwMSwyNTAwMDANCjIwMDIsVEJBLEFMLGtlbm5lam8wNCwyMjUwMDANCjIwMDIsVEJBLEFMLHBoZWxwdHIwMSwyMTgwMDANCjIwMDIsVEJBLEFMLGFiZXJuYnIwMSwyMTUwMDANCjIwMDIsVEJBLEFMLGNvbG9tamUwMSwyMTUwMDANCjIwMDIsVEJBLEFMLHphbWJydmkwMSwyMTUwMDANCjIwMDIsVEJBLEFMLGhhbGx0bzAyLDIxMDAwMA0KMjAwMixUQkEsQUwsY29udGlqYTAxLDIwNTAwMA0KMjAwMixUQkEsQUwsc2VheWJvMDEsMjAyMDAwDQoyMDAyLFRCQSxBTCxlc2NhbGZlMDEsMjAwMDAwDQoyMDAyLFRCQSxBTCxrZW50c3QwMSwyMDAwMDANCjIwMDIsVEJBLEFMLHNtaXRoamEwNSwyMDAwMDANCjIwMDIsVEJBLEFMLHNvc2FqbzAyLDIwMDAwMA0KMjAwMixURVgsQUwscm9kcmlhbDAxLDIyMDAwMDAwDQoyMDAyLFRFWCxBTCxnb256YWp1MDMsMTEwMDAwMDANCjIwMDIsVEVYLEFMLHJvZHJpaXYwMSw5NjAwMDAwDQoyMDAyLFRFWCxBTCxwYWxtZXJhMDEsODcxMjk4Ng0KMjAwMixURVgsQUwsZXZlcmVjYTAxLDg2NjY2NjYNCjIwMDIsVEVYLEFMLHJvZ2Vya2UwMSw3NTAwMDAwDQoyMDAyLFRFWCxBTCxwYXJrY2gwMSw2ODg0ODAzDQoyMDAyLFRFWCxBTCxncmVlcnJ1MDEsNjgwMDAwMA0KMjAwMixURVgsQUwscm9ja2VqbzAxLDI1MDAwMDANCjIwMDIsVEVYLEFMLHZhbGRlaXMwMSwyNTAwMDAwDQoyMDAyLFRFWCxBTCxjYXRhbGZyMDEsMjQ3NTAwMA0KMjAwMixURVgsQUwscG93ZWxqYTA0LDIyNTAwMDANCjIwMDIsVEVYLEFMLHppbW1lamUwMiwyMTY2NjY3DQoyMDAyLFRFWCxBTCxidXJiYWRhMDEsMjAwMDAwMA0KMjAwMixURVgsQUwsdmFucG90bzAxLDIwMDAwMDANCjIwMDIsVEVYLEFMLGthcGxlZ2EwMSwxODUwMDAwDQoyMDAyLFRFWCxBTCxtaWNlbGRhMDEsMTAwMDAwMA0KMjAwMixURVgsQUwsc2VhbmVydTAxLDEwMDAwMDANCjIwMDIsVEVYLEFMLHBlcnJ5aGUwMSw5MDAwMDANCjIwMDIsVEVYLEFMLGhhc2VsYmkwMSw4MDAwMDANCjIwMDIsVEVYLEFMLHJvZHJpcmkwMiw2MDAwMDANCjIwMDIsVEVYLEFMLGlyYWJ1aGkwMSw1NTAwMDANCjIwMDIsVEVYLEFMLHdvb2Rhc3QwMSw1NTAwMDANCjIwMDIsVEVYLEFMLGRhdmlzZG8wMiwzMTAwMDANCjIwMDIsVEVYLEFMLGtvbGJkYTAxLDI2MDAwMA0KMjAwMixURVgsQUwseW91bmdtaTAyLDI1MDAwMA0KMjAwMixURVgsQUwsYmxhbG9oYTAxLDIwMDAwMA0KMjAwMixURVgsQUwsbGV3aXNjbzAxLDIwMDAwMA0KMjAwMixUT1IsQUwsZGVsZ2FjYTAxLDE5NDAwMDAwDQoyMDAyLFRPUixBTCxtb25kZXJhMDEsMTEwMDAwMDANCjIwMDIsVE9SLEFMLGxvYWl6ZXMwMSw2MDUwMDAwDQoyMDAyLFRPUixBTCxzdGV3YXNoMDEsNDI1MDAwMA0KMjAwMixUT1IsQUwsY3J1empvMDIsMzk1MDAwMA0KMjAwMixUT1IsQUwsZmxldGNkYTAxLDM4MjUwMDANCjIwMDIsVE9SLEFMLHNpcm90bWkwMSwzODAwMDAwDQoyMDAyLFRPUixBTCxwYXJyaXN0MDEsMzc3NTAwMA0KMjAwMixUT1IsQUwsY2FycGVjaDAxLDM0NTAwMDANCjIwMDIsVE9SLEFMLGJ1c2hobzAxLDMzNzUwMDANCjIwMDIsVE9SLEFMLGhhbGxhcm8wMSwyNTgzMzMzDQoyMDAyLFRPUixBTCxlc2NvYmtlMDEsMjMwMDAwMA0KMjAwMixUT1IsQUwscGxlc2FkYTAxLDIyMDAwMDANCjIwMDIsVE9SLEFMLGhlcmVkZmUwMSwxODUwMDAwDQoyMDAyLFRPUixBTCxib3Jib3BlMDIsMTY1MDAwMA0KMjAwMixUT1IsQUwsYmVyZ2RhMDEsNDUwMDAwDQoyMDAyLFRPUixBTCxleXJlc2MwMSwyODAwMDANCjIwMDIsVE9SLEFMLHByb2tvbHUwMSwyNjgwMDANCjIwMDIsVE9SLEFMLGZpbGVibzAxLDI0NTAwMA0KMjAwMixUT1IsQUwsbGVzaGVicjAxLDI0NTAwMA0KMjAwMixUT1IsQUwsd29vZHdjaDAxLDIzNTAwMA0KMjAwMixUT1IsQUwsbG9wZXpmZTAxLDIyMTAwMA0KMjAwMixUT1IsQUwsbHlvbmJyMDEsMjIxMDAwDQoyMDAyLFRPUixBTCx3ZWxsc3ZlMDEsMjIxMDAwDQoyMDAyLFRPUixBTCx3aWxzb3RvMDIsMjIwMDAwDQoyMDAyLFRPUixBTCxjYXNzaXNjMDEsMjAwMDAwDQoyMDAyLFRPUixBTCxoaW5za2VyMDEsMjAwMDAwDQoyMDAyLFRPUixBTCxsYXdyZWpvMDEsMjAwMDAwDQoyMDAyLFRPUixBTCx0aHVybWNvMDEsMjAwMDAwDQoyMDAyLEFSSSxOTCxqb2huc3JhMDUsMTMzNTAwMDANCjIwMDIsQVJJLE5MLHNjaGlsY3UwMSwxMDAwMDAwMA0KMjAwMixBUkksTkwsd2lsbGltYTA0LDk1MDAwMDANCjIwMDIsQVJJLE5MLGJlbGxqYTAxLDgwMDAwMDANCjIwMDIsQVJJLE5MLHN0b3R0dG8wMSw4MDAwMDAwDQoyMDAyLEFSSSxOTCxhbmRlcmJyMDIsNTM3NTAwMA0KMjAwMixBUkksTkwsZmlubGVzdDAxLDUzNzUwMDANCjIwMDIsQVJJLE5MLHdvbWFjdG8wMSw0NTAwMDAwDQoyMDAyLEFSSSxOTCxnb256YWx1MDEsNDMzMzMzMw0KMjAwMixBUkksTkwsbWFudGVtYTAxLDQzMzMzMzMNCjIwMDIsQVJJLE5MLHJleW5vYXIwMiw0MTI1MDAwDQoyMDAyLEFSSSxOTCxncmFjZW1hMDEsMzAwMDAwMA0KMjAwMixBUkksTkwsaGVsbGlyaTAxLDMwMDAwMDANCjIwMDIsQVJJLE5MLHN3aW5kZ3IwMSwyODMzMzMzDQoyMDAyLEFSSSxOTCxtaWxsZWRhMDIsMjY1MDAwMA0KMjAwMixBUkksTkwsYmF0aXNtaTAxLDIxMjUwMDANCjIwMDIsQVJJLE5MLGJhdXRpZGEwMSwyMDAwMDAwDQoyMDAyLEFSSSxOTCxjb2xicmdyMDEsMTgwMDAwMA0KMjAwMixBUkksTkwsbXllcnNtaTAxLDE1MzMzMzMNCjIwMDIsQVJJLE5MLGNvdW5zY3IwMSwxNTE2NjY3DQoyMDAyLEFSSSxOTCxkZWxsdWRhMDEsNzc1MDAwDQoyMDAyLEFSSSxOTCxraW1ieTAxLDc2MjUwMA0KMjAwMixBUkksTkwsbW9yZ2FtaTAxLDc1MDAwMA0KMjAwMixBUkksTkwsZ3VpbGxqbzAxLDUwMDAwMA0KMjAwMixBUkksTkwsbWNjcmFxdTAxLDUwMDAwMA0KMjAwMixBUkksTkwsZHVyYXplcjAxLDM3NTAwMA0KMjAwMixBUkksTkwsZG9ubmVjaDAxLDM1MDAwMA0KMjAwMixBUkksTkwsb3JvcGVlZDAxLDM1MDAwMA0KMjAwMixBUkksTkwscHJpbnpicjAxLDIzNTAwMA0KMjAwMixBUkksTkwsa2xhc3NkYTAxLDIyNzUwMA0KMjAwMixBUkksTkwsYmFyYWpybzAxLDIxNTAwMA0KMjAwMixBUkksTkwsbW9lbGxjaDAxLDIxNTAwMA0KMjAwMixBUkksTkwsc3BpdmVqdTAxLDIxNTAwMA0KMjAwMixBVEwsTkwsbWFkZHVncjAxLDEzMTAwMDAwDQoyMDAyLEFUTCxOTCxqb25lc2NoMDYsMTEzMzMzMzMNCjIwMDIsQVRMLE5MLGpvbmVzYW4wMSwxMDAwMDAwMA0KMjAwMixBVEwsTkwsc2hlZmZnYTAxLDk5MTY2NjcNCjIwMDIsQVRMLE5MLGdsYXZpdG8wMiw4NjIzNzAwDQoyMDAyLEFUTCxOTCxzbW9sdGpvMDEsNzY2NjY2Nw0KMjAwMixBVEwsTkwsbG9wZXpqYTAxLDYwMDAwMDANCjIwMDIsQVRMLE5MLHN1cmhvYmowMSw0NTAwMDAwDQoyMDAyLEFUTCxOTCxsb3BlemFsMDIsNDAwMDAwMA0KMjAwMixBVEwsTkwsbWlsbHdrZTAxLDM5MDAwMDANCjIwMDIsQVRMLE5MLGNhc3RpdmkwMiwzMDAwMDAwDQoyMDAyLEFUTCxOTCxyZW1saW1pMDEsMjAwMDAwMA0KMjAwMixBVEwsTkwsbGlndGVrZTAxLDE3MDAwMDANCjIwMDIsQVRMLE5MLGJsYW5jaGUwMSwxNTEyNTAwDQoyMDAyLEFUTCxOTCxtYXJ0aWRhMDEsMTUwMDAwMA0KMjAwMixBVEwsTkwsZnJhbmNqdTAxLDYwMDAwMA0KMjAwMixBVEwsTkwsbG9ja2hrZTAxLDYwMDAwMA0KMjAwMixBVEwsTkwsaGFtbW9jaDAxLDQ1MDAwMA0KMjAwMixBVEwsTkwsZnVyY2FyYTAxLDQwNTAwMA0KMjAwMixBVEwsTkwsaG9sbWVkYTAxLDMyNTAwMA0KMjAwMixBVEwsTkwsaGVsbXN3ZTAxLDI1MDAwMA0KMjAwMixBVEwsTkwsbWFycXVqYTAxLDIzMDAwMA0KMjAwMixBVEwsTkwsZGVyb3NtYTAxLDIyMjUwMA0KMjAwMixBVEwsTkwsbW9zc2RhMDEsMjE1MDAwDQoyMDAyLEFUTCxOTCxnaWxlc21hMDEsMjEwMDAwDQoyMDAyLEFUTCxOTCxsb21iYWdlMDEsMjEwMDAwDQoyMDAyLEFUTCxOTCxhbGRyaWNvMDEsMjAwMDAwDQoyMDAyLEFUTCxOTCxzcG9vbnRpMDEsMjAwMDAwDQoyMDAyLENITixOTCxzb3Nhc2EwMSwxNTAwMDAwMA0KMjAwMixDSE4sTkwsbWNncmlmcjAxLDcyNTAwMDANCjIwMDIsQ0hOLE5MLGh1bmRsdG8wMSw2NTAwMDAwDQoyMDAyLENITixOTCxhbG91bW8wMSw2MDAwMDAwDQoyMDAyLENITixOTCxsaWViZWpvMDEsNTgzMzMzMw0KMjAwMixDSE4sTkwsZ29uemFhbDAxLDQyNTAwMDANCjIwMDIsQ0hOLE5MLHdvb2RrZTAyLDM2OTUwMDANCjIwMDIsQ0hOLE5MLGFsZm9uYW4wMSwzNTUwMDAwDQoyMDAyLENITixOTCxtdWVsbGJpMDIsMzQ1MDAwMA0KMjAwMixDSE4sTkwsYmVyZWphMDEsMzQwMDAwMA0KMjAwMixDSE4sTkwsZmFzc2VqZTAxLDI4MDAwMDANCjIwMDIsQ0hOLE5MLGdvcmRvdG8wMSwyODAwMDAwDQoyMDAyLENITixOTCxjbGVtZW1hMDEsMjUwMDAwMA0KMjAwMixDSE4sTkwsZ2lyYXJqbzAxLDE1MDAwMDANCjIwMDIsQ0hOLE5MLHNhbmNoamUwMSwxNDI1MDAwDQoyMDAyLENITixOTCxkZXNoaWRlMDEsMTI1MDAwMA0KMjAwMixDSE4sTkwsc3R5bmVjaDAxLDEyNTAwMDANCjIwMDIsQ0hOLE5MLGxld2lzZGEwMSw1MDAwMDANCjIwMDIsQ0hOLE5MLG9zYm9yZG8wMSw0NTAwMDANCjIwMDIsQ0hOLE5MLGZhcm5za3kwMSw0MTAwMDANCjIwMDIsQ0hOLE5MLG1hY2hhcm8wMSwyNzc1MDANCjIwMDIsQ0hOLE5MLGJyb3ducm8wMSwyNTUwMDANCjIwMDIsQ0hOLE5MLG9qZWRhYXUwMSwyNDAwMDANCjIwMDIsQ0hOLE5MLGJvcm93am8wMSwyMzUwMDANCjIwMDIsQ0hOLE5MLHBhdHRlY28wMSwyMjc1MDANCjIwMDIsQ0hOLE5MLGJlbGxobWEwMSwyMjQwMDANCjIwMDIsQ0hOLE5MLGNydXpqdTAyLDIxNTAwMA0KMjAwMixDSE4sTkwsb2htYW53aTAxLDIwMzUwMA0KMjAwMixDSU4sTkwsbGFya2liYTAxLDkwMDAwMDANCjIwMDIsQ0lOLE5MLGdyaWZma2UwMiw4NTU3MjIzDQoyMDAyLENJTixOTCxjYXNleXNlMDEsNDAwMDAwMA0KMjAwMixDSU4sTkwsZ3JhdmVkYTAxLDM1MjUwMDANCjIwMDIsQ0lOLE5MLHdoaXRlZ2EwMSwyNDkxNjY3DQoyMDAyLENJTixOTCxzdWxsaXNjMDEsMjIwMDAwMA0KMjAwMixDSU4sTkwsYm9vbmVhYTAxLDIxMDAwMDANCjIwMDIsQ0lOLE5MLHdhbGtldG8wNCwyMDUwMDAwDQoyMDAyLENJTixOTCxkZXNzZWVsMDEsMTgyNTAwMA0KMjAwMixDSU4sTkwsZW5jYXJqdTAxLDE1NTAwMDANCjIwMDIsQ0lOLE5MLHN0aW5ua2UwMSwxMDAwMDAwDQoyMDAyLENJTixOTCxndWVycndpMDEsODUwMDAwDQoyMDAyLENJTixOTCxzaWx2YWpvMDEsNjUwMDAwDQoyMDAyLENJTixOTCxoYW1pbGpvMDIsNTAwMDAwDQoyMDAyLENJTixOTCxoYXluZWppMDEsNTAwMDAwDQoyMDAyLENJTixOTCxyaWpvam8wMSw1MDAwMDANCjIwMDIsQ0lOLE5MLGNhc3RyanUwMSw0MDAwMDANCjIwMDIsQ0lOLE5MLHdpbGxpc2MwMSw0MDAwMDANCjIwMDIsQ0lOLE5MLGplbm5pcm8wMSwzMTAwMDANCjIwMDIsQ0lOLE5MLGxhcnVlamEwMSwzMDUwMDANCjIwMDIsQ0lOLE5MLHJlaXRzY2gwMSwyNTIwMDANCjIwMDIsQ0lOLE5MLGJyb3dlamkwMSwyNTAwMDANCjIwMDIsQ0lOLE5MLGR1bm5hZDAxLDI1MDAwMA0KMjAwMixDSU4sTkwsZGF2aXNsYTAxLDI0NjUwMA0KMjAwMixDSU4sTkwscmllZGxqbzAxLDI0MDAwMA0KMjAwMixDSU4sTkwsYWNldmVqbzAxLDIzMzAwMA0KMjAwMixDSU4sTkwsY2xhcmticjAyLDIzMzAwMA0KMjAwMixDSU4sTkwsZXRoZXJzZTAxLDIyNDAwMA0KMjAwMixDSU4sTkwscGluZWRsdTAxLDIwODAwMA0KMjAwMixDSU4sTkwsdGF5bG9yZTAxLDIwMDAwMA0KMjAwMixDT0wsTkwsd2Fsa2VsYTAxLDEyNjY2NjY3DQoyMDAyLENPTCxOTCxoYW1wdG1pMDEsOTUwMzU0Mw0KMjAwMixDT0wsTkwsbmVhZ2xkZTAxLDcwMDAwMDANCjIwMDIsQ09MLE5MLHplaWxldG8wMSw2ODMzMzMzDQoyMDAyLENPTCxOTCxoZWx0b3RvMDEsNTAwMDAwMA0KMjAwMixDT0wsTkwsaG9sbGF0bzAxLDI3NTAwMDANCjIwMDIsQ09MLE5MLGppbWVuam8wMSwxOTM3NTAwDQoyMDAyLENPTCxOTCxlbGFydHNjMDEsMTQwMDAwMA0KMjAwMixDT0wsTkwsdGhvbXNqbzAxLDExMDAwMDANCjIwMDIsQ09MLE5MLGpvbmVzdG8wMiwxMDAwMDAwDQoyMDAyLENPTCxOTCx3aGl0ZXJpMDEsMTAwMDAwMA0KMjAwMixDT0wsTkwscmV5ZXNkZTAxLDkwMDAwMA0KMjAwMixDT0wsTkwsc2h1bXB0ZTAxLDc3NTAwMA0KMjAwMixDT0wsTkwsYWdiYXliZTAxLDYwMDAwMA0KMjAwMixDT0wsTkwscGllcnJqdTAxLDYwMDAwMA0KMjAwMixDT0wsTkwsbm9ydG9ncjAxLDUyNTAwMA0KMjAwMixDT0wsTkwsamFtZXNtaTAxLDUwMDAwMA0KMjAwMixDT0wsTkwsbWVyY2trZTAxLDUwMDAwMA0KMjAwMixDT0wsTkwsc3BlaWVqdTAxLDMxMDAwMA0KMjAwMixDT0wsTkwsYmVubmVnYTAxLDI5MDAwMA0KMjAwMixDT0wsTkwscGV0cmliZTAxLDI2NTAwMA0KMjAwMixDT0wsTkwsaGFybmlwZTAxLDI1MDAwMA0KMjAwMixDT0wsTkwsbGl0dGxtYTAxLDI1MDAwMA0KMjAwMixDT0wsTkwsY2hhY29zaDAxLDIzNTAwMA0KMjAwMixDT0wsTkwsb3J0aXpqbzAyLDIzMjAwMA0KMjAwMixDT0wsTkwsdXJpYmVqdTAxLDIyMjAwMA0KMjAwMixDT0wsTkwsamVubmlqYTAxLDIwNjAwMA0KMjAwMixGTE8sTkwsZmxveWRjbDAxLDY1MDAwMDANCjIwMDIsRkxPLE5MLGpvaG5zY2gwNCw1MDAwMDAwDQoyMDAyLEZMTyxOTCx3aWxzb3ByMDEsMzUwMDAwMA0KMjAwMixGTE8sTkwsY2FzdGlsdTAxLDMzMjUwMDANCjIwMDIsRkxPLE5MLHRhdmFyanUwMSwzMTAwMDAwDQoyMDAyLEZMTyxOTCxsZWVkZTAyLDI3MDAwMDANCjIwMDIsRkxPLE5MLGRlbXBzcnkwMSwyNDc1MDAwDQoyMDAyLEZMTyxOTCxsb3dlbG1pMDEsMjMwMDAwMA0KMjAwMixGTE8sTkwsb3dlbnNlcjAxLDIxNjY2NjcNCjIwMDIsRkxPLE5MLGJlY2tlam8wMiwyMTU2MjUwDQoyMDAyLEZMTyxOTCxnb256YWFsMDIsMTcwMDAwMA0KMjAwMixGTE8sTkwsbWlsbGFrZTAxLDkwMDAwMA0KMjAwMixGTE8sTkwsbG9vcGVicjAxLDgwMDAwMA0KMjAwMixGTE8sTkwsZGFyZW52aTAxLDc3NTAwMA0KMjAwMixGTE8sTkwsZm94YW4wMSw3MDAwMDANCjIwMDIsRkxPLE5MLHJlZG1vbWkwMSw2NTAwMDANCjIwMDIsRkxPLE5MLHBlbm55YnIwMSwzNzc1MDANCjIwMDIsRkxPLE5MLGJ1cm5lYWowMSwzNjc1MDANCjIwMDIsRkxPLE5MLG51bmV6dmwwMSwzNjAwMDANCjIwMDIsRkxPLE5MLHJhaW5ldGkwMSwzNTAwMDANCjIwMDIsRkxPLE5MLGFsbWFuYXIwMSwzNDYwMDANCjIwMDIsRkxPLE5MLGNhc3RycmEwMSwyMTYwMDANCjIwMDIsRkxPLE5MLG1hbGxvbWEwMSwyMTAwMDANCjIwMDIsRkxPLE5MLGJhZXpiZTAxLDIwMjAwMA0KMjAwMixGTE8sTkwsb3p1bmFwYTAxLDIwMjAwMA0KMjAwMixGTE8sTkwsdGVqZXJtaTAxLDIwMTAwMA0KMjAwMixGTE8sTkwsa25vdHRnYTAxLDIwMDAwMA0KMjAwMixGTE8sTkwsb2xzZW5rZTAxLDIwMDAwMA0KMjAwMixIT1UsTkwsYmFnd2VqZTAxLDExMDAwMDAwDQoyMDAyLEhPVSxOTCxiaWdnaWNyMDEsODc1MDAwMA0KMjAwMixIT1UsTkwsd2FnbmViaTAyLDgwMDAwMDANCjIwMDIsSE9VLE5MLHJleW5vc2gwMSw3NjY2NjY3DQoyMDAyLEhPVSxOTCxtbGlja2RhMDEsNjIwMDAwMA0KMjAwMixIT1UsTkwsaGlkYWxyaTAxLDU1MDAwMDANCjIwMDIsSE9VLE5MLGF1c211YnIwMSw1MDAwMDAwDQoyMDAyLEhPVSxOTCx2aXpjYWpvMDEsMTcwMDAwMA0KMjAwMixIT1UsTkwsemF1bmdyMDEsMTE1MDAwMA0KMjAwMixIT1UsTkwsbWVyY2VvcjAxLDEwNTAwMDANCjIwMDIsSE9VLE5MLGh1bnRlYnIwMiwxMDAwMDAwDQoyMDAyLEhPVSxOTCxtYXRoZXRqMDEsMTAwMDAwMA0KMjAwMixIT1UsTkwsYnJvY2FkbzAxLDc1MDAwMA0KMjAwMixIT1UsTkwsYmVya21sYTAxLDUwMDAwMA0KMjAwMixIT1UsTkwscGljaGFoaTAxLDUwMDAwMA0KMjAwMixIT1UsTkwsZG90ZWxvYzAxLDQzNTAwMA0KMjAwMixIT1UsTkwsY3J1em5lMDEsMzc1MDAwDQoyMDAyLEhPVSxOTCx3YXJkZGEwMSwzNzUwMDANCjIwMDIsSE9VLE5MLGV2ZXJlYWQwMSwzNjY3NTANCjIwMDIsSE9VLE5MLG1pbGxld2EwNCwzNTAwMDANCjIwMDIsSE9VLE5MLGx1Z29qdTAxLDMyNTAwMA0KMjAwMixIT1UsTkwsYmx1bWdlMDEsMzE1MDAwDQoyMDAyLEhPVSxOTCxvc3dhbHJvMDEsMzAwMDAwDQoyMDAyLEhPVSxOTCxsaW5lYnNjMDEsMjMwMDAwDQoyMDAyLEhPVSxOTCxoZXJuYWNhMDMsMjEwMDAwDQoyMDAyLEhPVSxOTCxlbnNiZW1vMDEsMjAwMDAwDQoyMDAyLEhPVSxOTCxzdG9uZXJpMDEsMjAwMDAwDQoyMDAyLExBTixOTCxicm93bmtlMDEsMTU3MTQyODYNCjIwMDIsTEFOLE5MLGdyZWVuc2gwMSwxMzQxNjY2Nw0KMjAwMixMQU4sTkwsZHJlaWZkYTAxLDk0MDAwMDANCjIwMDIsTEFOLE5MLGFzaGJ5YW4wMSw4MDAwMDAwDQoyMDAyLExBTixOTCxrYXJyb2VyMDEsNjg3NTAwMA0KMjAwMixMQU4sTkwsam9yZGFicjAxLDY2MDAwMDANCjIwMDIsTEFOLE5MLGRhYWxvbTAxLDUwMDAwMDANCjIwMDIsTEFOLE5MLGdyaXNzbWEwMiw1MDAwMDAwDQoyMDAyLExBTixOTCxncnVkem1hMDEsNTAwMDAwMA0KMjAwMixMQU4sTkwsbm9tb2hpMDEsNDUwMDAwMA0KMjAwMixMQU4sTkwsbXVsaG90ZTAxLDMyNTAwMDANCjIwMDIsTEFOLE5MLHF1YW50cGEwMSwyODMzMzMzDQoyMDAyLExBTixOTCxiZWx0cmFkMDEsMjgwMDAwMA0KMjAwMixMQU4sTkwsa3JldXRjaDAxLDExMDAwMDANCjIwMDIsTEFOLE5MLGlzaGlpa2EwMSw5MDAwMDANCjIwMDIsTEFOLE5MLGhhbnNlZGEwMSw2NzUwMDANCjIwMDIsTEFOLE5MLGNvcmFhbDAxLDYyNTAwMA0KMjAwMixMQU4sTkwscGVyZXpvZDAxLDYyNTAwMA0KMjAwMixMQU4sTkwsbG9kdWNwYTAxLDU0NjY2Nw0KMjAwMixMQU4sTkwscmVib3VqZTAxLDQ1MDAwMA0KMjAwMixMQU4sTkwsY2FycmFnaTAxLDM2MDAwMA0KMjAwMixMQU4sTkwsZ2FnbmVlcjAxLDMwMDAwMA0KMjAwMixMQU4sTkwsYm9jYWNoaTAxLDIyNTAwMA0KMjAwMixMQU4sTkwsY2hyaXNtYzAxLDIyMjUwMA0KMjAwMixMQU4sTkwscm9iZXJkYTA3LDIxNzUwMA0KMjAwMixMQU4sTkwsaXp0dXJjZTAxLDIxNTAwMA0KMjAwMixNSUwsTkwsaGFtbW9qZTAxLDc1MDAwMDANCjIwMDIsTUlMLE5MLGxvcmV0bWEwMSw1MDAwMDAwDQoyMDAyLE1JTCxOTCx3cmlnaGphMDEsNDI1MDAwMA0KMjAwMixNSUwsTkwsbGVza2FjdTAxLDM1MDAwMDANCjIwMDIsTUlMLE5MLGhlcm5ham8wMSwzMzMzMzMzDQoyMDAyLE1JTCxOTCxqZW5raWdlMDEsMzE4NzUwMA0KMjAwMixNSUwsTkwsc2V4c29yaTAxLDMxMjUwMDANCjIwMDIsTUlMLE5MLHJ1c2NoZ2wwMSwyODAwMDAwDQoyMDAyLE1JTCxOTCxvY2hvYWFsMDEsMjc1MDAwMA0KMjAwMixNSUwsTkwseW91bmdlcjAxLDIwMDAwMDANCjIwMDIsTUlMLE5MLGJlbGxpcm8wMSwxNjUwMDAwDQoyMDAyLE1JTCxOTCxob3VzdHR5MDEsMTYyNTAwMA0KMjAwMixNSUwsTkwsZGVqZWFtaTAxLDE0MDAwMDANCjIwMDIsTUlMLE5MLGZveGNoMDIsMTIwMDAwMA0KMjAwMixNSUwsTkwsaGFycmlsZTAxLDExMDAwMDANCjIwMDIsTUlMLE5MLGNhc2FucmEwMSw4NTAwMDANCjIwMDIsTUlMLE5MLGJha29wYTAxLDc1MDAwMA0KMjAwMixNSUwsTkwsY2FicmVqbzAxLDcwNTAwMA0KMjAwMixNSUwsTkwsbG9wZXpsdTAyLDcwMDAwMA0KMjAwMixNSUwsTkwsc3RhaXJtYTAxLDUwMDAwMA0KMjAwMixNSUwsTkwsbm9tdXJ0YTAxLDQzMDAwMA0KMjAwMixNSUwsTkwsa2luZ3JhMDEsMzAwMDAwDQoyMDAyLE1JTCxOTCxzaGVldGJlMDEsMjkwMDAwDQoyMDAyLE1JTCxOTCxyaWdkb3BhMDEsMjU1MDAwDQoyMDAyLE1JTCxOTCxxdWV2ZXJ1MDEsMjUyNTAwDQoyMDAyLE1JTCxOTCxidWRkaW1pMDEsMjE4MDAwDQoyMDAyLE1JTCxOTCx2aXpjYWx1MDEsMjEyNTAwDQoyMDAyLE1JTCxOTCxuZXVnZW5pMDEsMjAyMDAwDQoyMDAyLE1JTCxOTCxzYW5jaGFsMDMsMjAyMDAwDQoyMDAyLE1PTixOTCxndWVycnZsMDEsODAwMDAwMA0KMjAwMixNT04sTkwsdmF6cXVqYTAxLDQ3MjUwMDANCjIwMDIsTU9OLE5MLHRhdGlzZmUwMSw0NTAwMDAwDQoyMDAyLE1PTixOTCxzdGV2ZWxlMDEsNDAwMDAwMA0KMjAwMixNT04sTkwsdmlkcm9qbzAxLDQwMDAwMDANCjIwMDIsTU9OLE5MLGxsb3lkZ3IwMSwzMDAwMDAwDQoyMDAyLE1PTixOTCxjYWJyZW9yMDEsMjQwMDAwMA0KMjAwMixNT04sTkwscGF2YW5jYTAxLDEzMTI1MDANCjIwMDIsTU9OLE5MLGJhcnJlbWkwMSwxMTUwMDAwDQoyMDAyLE1PTixOTCxnYWxhcmFuMDEsNTAwMDAwDQoyMDAyLE1PTixOTCxtb3JkZW1pMDEsNTAwMDAwDQoyMDAyLE1PTixOTCx2b3NiZWVkMDEsNDAwMDAwDQoyMDAyLE1PTixOTCxoZXJnZW1hMDEsMzcwMDAwDQoyMDAyLE1PTixOTCxzdHJpY3NjMDEsMzU1MDAwDQoyMDAyLE1PTixOTCxhcm1hc3RvMDIsMzM1MDAwDQoyMDAyLE1PTixOTCxyb2RyaWhlMDIsMzAwMDAwDQoyMDAyLE1PTixOTCx5b3NoaW1hMDEsMzAwMDAwDQoyMDAyLE1PTixOTCx0cnVieWNoMDEsMjcwMDAwDQoyMDAyLE1PTixOTCxiZXJnZXBlMDEsMjUwMDAwDQoyMDAyLE1PTixOTCxjb2xsaWxvMDEsMjUwMDAwDQoyMDAyLE1PTixOTCxvaGthdG8wMSwyNDAwMDANCjIwMDIsTU9OLE5MLHJlYW1lYnIwMSwyMzUwMDANCjIwMDIsTU9OLE5MLHN0ZXdhc2MwMSwyMzUwMDANCjIwMDIsTU9OLE5MLGRvd25zc2MwMSwyMjUwMDANCjIwMDIsTU9OLE5MLHNjaG5lYnIwMSwyMTIwMDANCjIwMDIsTU9OLE5MLHdpbGtlYnIwMSwyMDYwMDANCjIwMDIsTU9OLE5MLG1hdHRldHIwMSwyMDAwMDANCjIwMDIsTU9OLE5MLHR1Y2tldGowMSwyMDAwMDANCjIwMDIsTllOLE5MLHZhdWdobW8wMSwxMjE2NjY2Nw0KMjAwMixOWU4sTkwscGlhenptaTAxLDEwNTcxNDI5DQoyMDAyLE5ZTixOTCxsZWl0ZWFsMDEsOTI1MDAwMA0KMjAwMixOWU4sTkwsYWxvbWFybzAxLDc5Mzk2NjQNCjIwMDIsTllOLE5MLGJ1cm5pamUwMSw3MTY2NjY3DQoyMDAyLE5ZTixOTCxvcmRvbnJlMDEsNjI1MDAwMA0KMjAwMixOWU4sTkwsYWxmb25lZDAxLDYyMDAwMDANCjIwMDIsTllOLE5MLGVzdGVzc2gwMSw2MjAwMDAwDQoyMDAyLE5ZTixOTCxiZW5pdGFyMDEsNTgxMjUwMA0KMjAwMixOWU4sTkwsdHJhY2hzdDAxLDQzMDAwMDANCjIwMDIsTllOLE5MLGFzdGFjcGUwMSw0MDAwMDAwDQoyMDAyLE5ZTixOTCxmcmFuY2pvMDEsMzA4MzMzMw0KMjAwMixOWU4sTkwsY2VkZW5ybzAxLDIzNzUwMDANCjIwMDIsTllOLE5MLGRhbWljamUwMSwxODQwMDAwDQoyMDAyLE5ZTixOTCx3ZWF0aGRhMDEsMTgzMzMzMw0KMjAwMixOWU4sTkwsZ3V0aHJtYTAxLDE4MDAwMDANCjIwMDIsTllOLE5MLG1jZXdpam8wMSw3NTAwMDANCjIwMDIsTllOLE5MLHZhbGVuam8wMiw1NTAwMDANCjIwMDIsTllOLE5MLGtvbWl5c2EwMSw1MDAwMDANCjIwMDIsTllOLE5MLGpvaG5zbWEwMSw0NzUwMDANCjIwMDIsTllOLE5MLHBheXRvamEwMSwzNjI1MDANCjIwMDIsTllOLE5MLGNoZW5icjAxLDMwMDAwMA0KMjAwMixOWU4sTkwsbWF0dGhnYTAyLDIzNzUwMA0KMjAwMixOWU4sTkwsZGF2aXNrYTAxLDIzNTAwMA0KMjAwMixOWU4sTkwsd2lsc292YTAxLDIyMjUwMA0KMjAwMixOWU4sTkwscm9iZXJncjAxLDIxMjUwMA0KMjAwMixQSEksTkwscm9sZW5zYzAxLDg2MDAwMDANCjIwMDIsUEhJLE5MLGxpZWJlbWkwMSw3MzMzMzMzDQoyMDAyLFBISSxOTCxhYnJldWJvMDEsNjMzMzMzMw0KMjAwMixQSEksTkwscGVyc29ybzAxLDYyNTAwMDANCjIwMDIsUEhJLE5MLG1lc2FqbzAxLDQyMDAwMDANCjIwMDIsUEhJLE5MLGdsYW52ZG8wMSw0MDAwMDAwDQoyMDAyLFBISSxOTCxsZWV0cjAxLDMwMDAwMDANCjIwMDIsUEhJLE5MLHdlbmRldHUwMSwyOTUwMDAwDQoyMDAyLFBISSxOTCxjb3JtaXJoMDEsMjg4MzMzMw0KMjAwMixQSEksTkwsYWRhbXN0ZTAxLDI3MDAwMDANCjIwMDIsUEhJLE5MLGJ1cnJlcGEwMSwxOTA1MDAwDQoyMDAyLFBISSxOTCxib3R0YXJpMDEsMTUwMDAwMA0KMjAwMixQSEksTkwsbGVkZWVyaTAxLDc1MDAwMA0KMjAwMixQSEksTkwsc2FudGlqbzAzLDcwMDAwMA0KMjAwMixQSEksTkwscHJhdHR0bzAyLDY1MDAwMA0KMjAwMixQSEksTkwsbWFicnlqbzAxLDUwMDAwMA0KMjAwMixQSEksTkwscGVyZXp0bzAzLDQ3NTAwMA0KMjAwMixQSEksTkwsd29sZnJhMDIsNDUwMDAwDQoyMDAyLFBISSxOTCxhbmRlcm1hMDIsNDAwMDAwDQoyMDAyLFBISSxOTCxob2xsaWRhMDEsNDAwMDAwDQoyMDAyLFBISSxOTCxyb2xsaWppMDEsMzU1MDAwDQoyMDAyLFBISSxOTCxtZXJjYWhlMDEsMjU1MDAwDQoyMDAyLFBISSxOTCxwYWRpbHZpMDEsMjQ1MDAwDQoyMDAyLFBISSxOTCxwb2xpdGNsMDEsMjQ1MDAwDQoyMDAyLFBISSxOTCxjb2dnaWRhMDEsMjQwMDAwDQoyMDAyLFBISSxOTCxkdWNrd2JyMDEsMjM1MDAwDQoyMDAyLFBISSxOTCxwdW50b25pMDEsMjAwMDAwDQoyMDAyLFBISSxOTCxzaWx2YWNhMDEsMjAwMDAwDQoyMDAyLFBJVCxOTCxnaWxlc2JyMDIsODA2MzAwMw0KMjAwMixQSVQsTkwsa2VuZGFqYTAxLDY1NzE0MjkNCjIwMDIsUElULE5MLHlvdW5na2UwMSw1NjI1MDAwDQoyMDAyLFBJVCxOTCxtZWFyZXBhMDEsMzc5MDAwMA0KMjAwMixQSVQsTkwsYmVuc29rcjAxLDI3MDAwMDANCjIwMDIsUElULE5MLGZldHRlbWkwMSwyMjc1MDAwDQoyMDAyLFBJVCxOTCx3aWxsaW1pMDMsMjAwMDAwMA0KMjAwMixQSVQsTkwscmVlc2VwbzAxLDE3NTAwMDANCjIwMDIsUElULE5MLGxvd2VzZTAxLDk1MDAwMA0KMjAwMixQSVQsTkwsYmVuamFtaTAxLDkyNTAwMA0KMjAwMixQSVQsTkwscmlvc2FyMDEsOTI1MDAwDQoyMDAyLFBJVCxOTCx2aWxsb3JvMDEsOTAwMDAwDQoyMDAyLFBJVCxOTCxzYXVlcnNjMDEsNzY2NjY3DQoyMDAyLFBJVCxOTCxib2VocmJyMDEsNjc1MDAwDQoyMDAyLFBJVCxOTCxvc2lra2UwMSw2MjUwMDANCjIwMDIsUElULE5MLHJhbWlyYXIwMSw1MDAwMDANCjIwMDIsUElULE5MLGJyb3duYWQwMSw0NTAwMDANCjIwMDIsUElULE5MLGFuZGVyamkwMiwzMDUwMDANCjIwMDIsUElULE5MLHdlbGxza2kwMSwyNzI1MDANCjIwMDIsUElULE5MLGxpbmNvbWkwMSwyNjc1MDANCjIwMDIsUElULE5MLHdpbGxpZGEwNywyMzQwMDANCjIwMDIsUElULE5MLHdpbHNvamEwMiwyMzIwMDANCjIwMDIsUElULE5MLHdpbHNvY3IwMywyMjkwMDANCjIwMDIsUElULE5MLGJlaW1lam8wMSwyMjcwMDANCjIwMDIsUElULE5MLG1hY2tvcm8wMSwyMjcwMDANCjIwMDIsUElULE5MLGhlcm1hY2gwMSwyMjMwMDANCjIwMDIsUElULE5MLHZvZ2VscnkwMSwyMTI1MDANCjIwMDIsUElULE5MLGZvZ2dqbzAxLDIwMzAwMA0KMjAwMixQSVQsTkwsbnVuZXphYjAxLDIwMDAwMA0KMjAwMixTRE4sTkwsbGFua2ZyYTAxLDgxMDAwMDANCjIwMDIsU0ROLE5MLGhvZmZtdHIwMSw2NjAwMDAwDQoyMDAyLFNETixOTCxrbGVza3J5MDEsNjAwMDAwMA0KMjAwMixTRE4sTkwsam9uZXNibzAzLDQwMDAwMDANCjIwMDIsU0ROLE5MLGtvdHNhbWEwMSwzMDUwMDAwDQoyMDAyLFNETixOTCxuZXZpbnBoMDEsMjYwMDAwMA0KMjAwMixTRE4sTkwsdHJhbW1idTAxLDE1MDAwMDANCjIwMDIsU0ROLE5MLGphcnZpa2UwMSwxMjUwMDAwDQoyMDAyLFNETixOTCxsYW1wa3RvMDEsMTI1MDAwMA0KMjAwMixTRE4sTkwsdG9ta29icjAxLDExMDAwMDANCjIwMDIsU0ROLE5MLGNydXpkZTAxLDYwMDAwMA0KMjAwMixTRE4sTkwsZW1icmVhbDAxLDUwMDAwMA0KMjAwMixTRE4sTkwsZ2FudHJvMDEsNTAwMDAwDQoyMDAyLFNETixOTCxyZWVkc3QwMSw1MDAwMDANCjIwMDIsU0ROLE5MLGdvbnphd2kwMSwzNTAwMDANCjIwMDIsU0ROLE5MLGh1YmJhdHIwMSwzMDAwMDANCjIwMDIsU0ROLE5MLHN3ZWVubWEwMSwzMDAwMDANCjIwMDIsU0ROLE5MLHRvbGxiYnIwMSwyODUwMDANCjIwMDIsU0ROLE5MLGVhdG9uYWQwMSwyODAwMDANCjIwMDIsU0ROLE5MLGRhdmV5dG8wMSwyNzAwMDANCjIwMDIsU0ROLE5MLHdhbGtla2UwMSwyNjcwMDANCjIwMDIsU0ROLE5MLGJveWRqYTAyLDI1MzAwMA0KMjAwMixTRE4sTkwsbnVuZXpqbzAyLDI0NTAwMA0KMjAwMixTRE4sTkwsamltZW5kYTAxLDI0MDAwMA0KMjAwMixTRE4sTkwsbGF3cmVicjAyLDIzNTAwMA0KMjAwMixTRE4sTkwscmFtc2FybzAxLDIzNTAwMA0KMjAwMixTRE4sTkwsZmlrYWNqZTAxLDIxMDAwMA0KMjAwMixTRE4sTkwsdmF6cXVyYTAxLDIwNTAwMA0KMjAwMixTRE4sTkwsYnVycm9zZTAxLDIwMDAwMA0KMjAwMixTRk4sTkwsYm9uZHNiYTAxLDE1MDAwMDAwDQoyMDAyLFNGTixOTCxuZW5ybzAxLDgzMDAwMDANCjIwMDIsU0ZOLE5MLGtlbnRqZTAxLDYwMDAwMDANCjIwMDIsU0ZOLE5MLHNub3dqdDAxLDU5MDAwMDANCjIwMDIsU0ZOLE5MLGF1cmlscmkwMSw1MjUwMDAwDQoyMDAyLFNGTixOTCxzY2htaWphMDEsNDkzNzUwMA0KMjAwMixTRk4sTkwscnVldGVraTAxLDQ4NjY2NjcNCjIwMDIsU0ZOLE5MLGJlbmFybWEwMSw0MjAwMDAwDQoyMDAyLFNGTixOTCxoZXJuYWxpMDEsMzYyNTAwMA0KMjAwMixTRk4sTkwsb3J0aXpydTAxLDI4NjI1MDANCjIwMDIsU0ZOLE5MLHJvZHJpZmUwMSwyNTE2NjY3DQoyMDAyLFNGTixOTCxzYW50aWJlMDEsMjA0NDE2OA0KMjAwMixTRk4sTkwsYmVsbGRhMDEsMTc1MDAwMA0KMjAwMixTRk4sTkwsc2FuZGVyZTAyLDE3NTAwMDANCjIwMDIsU0ZOLE5MLGNocmlzamEwMSwxNzMzMzMzDQoyMDAyLFNGTixOTCx3b3JyZXRpMDEsMTQwMDAwMA0KMjAwMixTRk4sTkwsc2hpbmp0czAxLDEzNTAwMDANCjIwMDIsU0ZOLE5MLHdpdGFzamEwMSwxMjUwMDAwDQoyMDAyLFNGTixOTCxkdW5zdHNoMDEsMTE1MDAwMA0KMjAwMixTRk4sTkwsbWFydGlyYTAzLDc3NTAwMA0KMjAwMixTRk4sTkwsbXVycmFjYTAxLDMwNTAwMA0KMjAwMixTRk4sTkwsZnVsdHphYTAxLDMwMDAwMA0KMjAwMixTRk4sTkwsZmVsaXpwZTAxLDIyMjAwMA0KMjAwMixTRk4sTkwsamVuc2VyeTAxLDIwOTAwMA0KMjAwMixTRk4sTkwsbWlub3JkYTAxLDIwMzAwMA0KMjAwMixTRk4sTkwsYWluc3drdTAxLDIwMDAwMA0KMjAwMixTRk4sTkwsdG9ycmV5bzAxLDIwMDAwMA0KMjAwMixTTE4sTkwsZWRtb25qaTAxLDczMzMzMzMNCjIwMDIsU0xOLE5MLHdpbGxpd28wMiw3MzAwMDAwDQoyMDAyLFNMTixOTCxraWxlZGEwMSw3MTY2NjY3DQoyMDAyLFNMTixOTCxiZW5lc2FuMDEsNjM2NzU0Mg0KMjAwMixTTE4sTkwscmVudGVlZDAxLDYwMDAwMDANCjIwMDIsU0xOLE5MLG1hcnRpdGkwMiw1NzUwMDAwDQoyMDAyLFNMTixOTCx0aW1saW1pMDEsNTI1MDAwMA0KMjAwMixTTE4sTkwsdmluYWZlMDEsNDMzMzMzMw0KMjAwMixTTE4sTkwsdmVyZXNkYTAxLDQyNTAwMDANCjIwMDIsU0xOLE5MLG1vcnJpbWEwMSw0MDAwMDAwDQoyMDAyLFNMTixOTCxkcmV3amQwMSwzMTAwMDAwDQoyMDAyLFNMTixOTCxpc3JpbmphMDEsMjc1MDAwMA0KMjAwMixTTE4sTkwsbWF0aGVtaTAxLDI1MDAwMDANCjIwMDIsU0xOLE5MLHBvbGFucGwwMSwxNzUwMDAwDQoyMDAyLFNMTixOTCxrbGluZXN0MDIsMTIwMDAwMA0KMjAwMixTTE4sTkwsc3RlcGhnYTAxLDkwMDAwMA0KMjAwMixTTE4sTkwsbWFycmVlbDAxLDg1MDAwMA0KMjAwMixTTE4sTkwsZGlmZWxtaTAxLDc1MDAwMA0KMjAwMixTTE4sTkwsY2Fpcm9taTAxLDYwMDAwMA0KMjAwMixTTE4sTkwscHVqb2xhbDAxLDYwMDAwMA0KMjAwMixTTE4sTkwscGVyZXplZDAxLDQ1MDAwMA0KMjAwMixTTE4sTkwsYW5raWVyaTAxLDQwMDAwMA0KMjAwMixTTE4sTkwsbWF0dGhtaTAxLDMwMDAwMA0KMjAwMixTTE4sTkwsc3RlY2hnZTAxLDI2NTAwMA0KMjAwMixTTE4sTkwscm9iaW5rZTAyLDI1MDAwMA0KMjAwMixTTE4sTkwsaGFja21sdTAxLDI0NTAwMA0KMjAwMyxBTkEsQUwsYXBwaWVrZTAxLDExNTAwMDAwDQoyMDAzLEFOQSxBTCxzYWxtb3RpMDEsOTkwMDAwMA0KMjAwMyxBTkEsQUwsc2VsZWFhMDEsODE2NjY2Nw0KMjAwMyxBTkEsQUwscGVyY2l0cjAxLDc4MzMzMzMNCjIwMDMsQU5BLEFMLGVyc3RhZGEwMSw3MjUwMDAwDQoyMDAzLEFOQSxBTCxnbGF1c3RyMDEsNzI1MDAwMA0KMjAwMyxBTkEsQUwsYW5kZXJnYTAxLDUzNTAwMDANCjIwMDMsQU5BLEFMLHNwaWV6c2MwMSw0MjUwMDAwDQoyMDAzLEFOQSxBTCx3YXNoYmphMDEsMzg3NTAwMA0KMjAwMyxBTkEsQUwsa2VubmVhZDAxLDIyNzAwMDANCjIwMDMsQU5BLEFMLG9ydGl6cmEwMSwyMjY2NjY3DQoyMDAzLEFOQSxBTCxtb2xpbmJlMDEsMTQyNTAwMA0KMjAwMyxBTkEsQUwsc2Nob2VzYzAxLDE0MjUwMDANCjIwMDMsQU5BLEFMLGZ1bGxtYnIwMSwxMDAwMDAwDQoyMDAzLEFOQSxBTCxvd2Vuc2VyMDEsOTI1MDAwDQoyMDAzLEFOQSxBTCxnaWxiZTAxLDcyNTAwMA0KMjAwMyxBTkEsQUwsZWNrc3RkYTAxLDQyNTAwMA0KMjAwMyxBTkEsQUwsd2ViZXJiZTAxLDM3NTAwMA0KMjAwMyxBTkEsQUwsd29vdGVzaDAxLDMzNzUwMA0KMjAwMyxBTkEsQUwsZG9ubmVicjAxLDMyNTAwMA0KMjAwMyxBTkEsQUwsbW9saW5qbzAxLDMyMDAwMA0KMjAwMyxBTkEsQUwsbGFja2VqbzAxLDMxNTAwMA0KMjAwMyxBTkEsQUwscm9kcmlmcjAzLDMxMjUwMA0KMjAwMyxBTkEsQUwsc2hpZWxzYzAxLDMwNTAwMA0KMjAwMyxBTkEsQUwsY2FsbGFtaTAxLDMwMjUwMA0KMjAwMyxBTkEsQUwsd2lzZW1hMDEsMzAyNTAwDQoyMDAzLEFOQSxBTCxyYW1pcmp1MDEsMzAwMDAwDQoyMDAzLEJBTCxBTCxiZWxsZWFsMDEsMTMwMDAwMDANCjIwMDMsQkFMLEFMLGVyaWNrc2MwMSw3MDMwMDAwDQoyMDAzLEJBTCxBTCxzZWd1aWRhMDEsNzAwMDAwMA0KMjAwMyxCQUwsQUwsYmF0aXN0bzAxLDY0MDAwMDANCjIwMDMsQkFMLEFMLGNvbmluamUwMSw0MjUwMDAwDQoyMDAzLEJBTCxBTCxwb25zb3NpMDEsNDI1MDAwMA0KMjAwMyxCQUwsQUwsZm9yZHlicjAxLDM1MDAwMDANCjIwMDMsQkFMLEFMLHJvYmVyd2kwMSwzNTAwMDAwDQoyMDAzLEJBTCxBTCxjb3Jkb21hMDEsMzEwMDAwMA0KMjAwMyxCQUwsQUwsZGFhbG9tMDEsMzAwMDAwMA0KMjAwMyxCQUwsQUwsZ3Jvb21idTAxLDMwMDAwMDANCjIwMDMsQkFMLEFMLGpvaG5zamEwMiwyOTAwMDAwDQoyMDAzLEJBTCxBTCxtb3JhbWUwMSwxNzI1MDAwDQoyMDAzLEJBTCxBTCxoYWlyc2plMDIsMTU1MDAwMA0KMjAwMyxCQUwsQUwsaGVudGdwYTAxLDEyMDAwMDANCjIwMDMsQkFMLEFMLGxpZ3Rla2UwMSwxMjAwMDAwDQoyMDAzLEJBTCxBTCxjcnV6ZGUwMSwxMDAwMDAwDQoyMDAzLEJBTCxBTCxoZWxsaXJpMDEsMTAwMDAwMA0KMjAwMyxCQUwsQUwsc3VyaG9iajAxLDEwMDAwMDANCjIwMDMsQkFMLEFMLG1hdHRoZ2EwMiw5MDAwMDANCjIwMDMsQkFMLEFMLHJ5YW5iajAxLDc2MjUwMA0KMjAwMyxCQUwsQUwsZ2liYm9qYTAxLDM3NTAwMA0KMjAwMyxCQUwsQUwsanVsaW9qbzAxLDM1MDAwMA0KMjAwMyxCQUwsQUwsZ2lsZ2UwMSwzMzAwMDANCjIwMDMsQkFMLEFMLGJhdWVycmkwMSwzMjUwMDANCjIwMDMsQkFMLEFMLGxvcGV6cm8wMSwzMjUwMDANCjIwMDMsQkFMLEFMLGxlb25qbzAxLDMwNTAwMA0KMjAwMyxCQUwsQUwsYmVkYXJlcjAxLDMwMDAwMA0KMjAwMyxCQUwsQUwsbW9yYmFqbzAxLDMwMDAwMA0KMjAwMyxCT1MsQUwscmFtaXJtYTAyLDIwMDAwMDAwDQoyMDAzLEJPUyxBTCxtYXJ0aXBlMDIsMTU1MDAwMDANCjIwMDMsQk9TLEFMLGdhcmNpbm8wMSwxMTAwMDAwMA0KMjAwMyxCT1MsQUwsZGFtb25qbzAxLDc1MDAwMDANCjIwMDMsQk9TLEFMLGJ1cmtlam8wMyw1NTAwMDAwDQoyMDAzLEJPUyxBTCx2YXJpdGphMDEsNDcwMDAwMA0KMjAwMyxCT1MsQUwsbml4b250cjAxLDQwMDAwMDANCjIwMDMsQk9TLEFMLHdha2VmdGkwMSw0MDAwMDAwDQoyMDAzLEJPUyxBTCxsb3dlZGUwMSwzNjI1MDAwDQoyMDAzLEJPUyxBTCx3YWxrZXRvMDQsMzQ1MDAwMA0KMjAwMyxCT1MsQUwsZW1icmVhbDAxLDMwMDAwMDANCjIwMDMsQk9TLEFMLG1lbmRvcmEwMSwyOTAwMDAwDQoyMDAzLEJPUyxBTCxtdWVsbGJpMDIsMjEwMDAwMA0KMjAwMyxCT1MsQUwsZ2lhbWJqZTAxLDIwMDAwMDANCjIwMDMsQk9TLEFMLG1pbGxha2UwMSwyMDAwMDAwDQoyMDAzLEJPUyxBTCx0aW1saW1pMDEsMTg1MDAwMA0KMjAwMyxCT1MsQUwsaG93cnlibzAxLDE3MDAwMDANCjIwMDMsQk9TLEFMLG9ydGl6ZGEwMSwxMjUwMDAwDQoyMDAzLEJPUyxBTCxtaXJhYmRvMDEsODA1MDAwDQoyMDAzLEJPUyxBTCxqYWNrc2RhMDQsNjI1MDAwDQoyMDAzLEJPUyxBTCxmb3hjaDAyLDUwMDAwMA0KMjAwMyxCT1MsQUwsaGlsbGVzaDAyLDQwNzUwMA0KMjAwMyxCT1MsQUwsZm9zc3VjYTAxLDMyNDUwMA0KMjAwMyxCT1MsQUwsbHlvbmJyMDEsMzA5NTAwDQoyMDAzLEJPUyxBTCxnb256YWRpMDEsMzAwMDAwDQoyMDAzLEJPUyxBTCxwZXJzb3JvMDEsMzAwMDAwDQoyMDAzLEJPUyxBTCx3aGl0ZW1hMDMsMzAwMDAwDQoyMDAzLENIQSxBTCxvcmRvbm1hMDEsOTAwMDAwMA0KMjAwMyxDSEEsQUwsY29sb25iYTAxLDgyNTAwMDANCjIwMDMsQ0hBLEFMLGtvbmVycGEwMSw2MjUwMDAwDQoyMDAzLENIQSxBTCx0aG9tYWZyMDQsNTAwMDAwMA0KMjAwMyxDSEEsQUwsdmFsZW5qbzAzLDUwMDAwMDANCjIwMDMsQ0hBLEFMLGtvY2hiaTAxLDQyNTAwMDANCjIwMDMsQ0hBLEFMLGxlZWNhMDEsNDIwMDAwMA0KMjAwMyxDSEEsQUwsZ29yZG90bzAxLDE0MDAwMDANCjIwMDMsQ0hBLEFMLGFsb21hc2EwMiw3MDAwMDANCjIwMDMsQ0hBLEFMLGdyYWZmdG8wMSw2NzUwMDANCjIwMDMsQ0hBLEFMLHdoaXRlcmkwMSw2MDAwMDANCjIwMDMsQ0hBLEFMLHd1bnNja2UwMSw1NzUwMDANCjIwMDMsQ0hBLEFMLGxvYWl6ZXMwMSw1MDAwMDANCjIwMDMsQ0hBLEFMLGRhdWJhYnIwMSw0NTAwMDANCjIwMDMsQ0hBLEFMLHJpb3NhcjAxLDQ1MDAwMA0KMjAwMyxDSEEsQUwsYnVlaHJtYTAxLDQ0NTAwMA0KMjAwMyxDSEEsQUwsZ2FybGFqbzAxLDM3NTAwMA0KMjAwMyxDSEEsQUwsamltZW5kYTAxLDM0NTAwMA0KMjAwMyxDSEEsQUwsZ2xvdmVnYTAxLDMzMDAwMA0KMjAwMyxDSEEsQUwsbWFydGVkYTAxLDMzMDAwMA0KMjAwMyxDSEEsQUwscGF1bGpvMDEsMzI1MDAwDQoyMDAzLENIQSxBTCx3cmlnaGRhMDIsMzI1MDAwDQoyMDAzLENIQSxBTCxyb3dhbmFhMDEsMzIwMDAwDQoyMDAzLENIQSxBTCxjcmVkZWpvMDEsMzE1MDAwDQoyMDAzLENIQSxBTCxvbGl2b21pMDEsMzAwMDAwDQoyMDAzLENIQSxBTCxzdGV3YWpvMDIsMzAwMDAwDQoyMDAzLENMRSxBTCxidXJrc2VsMDEsNzE2NjY2Nw0KMjAwMyxDTEUsQUwsbGF3dG9tYTAyLDY3NTAwMDANCjIwMDMsQ0xFLEFMLHdpY2ttYm8wMSw2MDAwMDAwDQoyMDAzLENMRSxBTCx2aXpxdW9tMDEsNTUwMDAwMA0KMjAwMyxDTEUsQUwsYmFlemRhMDEsNTEyNTAwMA0KMjAwMyxDTEUsQUwsZ3V0aWVyaTAxLDM5MTY2NjcNCjIwMDMsQ0xFLEFMLHdvaGxlbWEwMSwyNjAwMDAwDQoyMDAzLENMRSxBTCxhbmRlcmJyMDIsMTUwMDAwMA0KMjAwMyxDTEUsQUwsc2FiYXRjYzAxLDExMDAwMDANCjIwMDMsQ0xFLEFMLGJlcmVqYTAxLDEwMDAwMDANCjIwMDMsQ0xFLEFMLGdhcmNpa2EwMSw5MDAwMDANCjIwMDMsQ0xFLEFMLHNhbnRpam8wMyw2MDAwMDANCjIwMDMsQ0xFLEFMLHNwZW5jc2gwMSw2MDAwMDANCjIwMDMsQ0xFLEFMLG11bGhvdGUwMSw1MDAwMDANCjIwMDMsQ0xFLEFMLGxha2VydGkwMSw0MDAwMDANCjIwMDMsQ0xFLEFMLGJsYWtlY2EwMSwzMzAwMDANCjIwMDMsQ0xFLEFMLHNlbGJ5YmkwMSwzMjUwMDANCjIwMDMsQ0xFLEFMLG1jZG9uam8wMywzMTQ0MDANCjIwMDMsQ0xFLEFMLGJyYWRsbWkwMSwzMTQzMDANCjIwMDMsQ0xFLEFMLHJpc2tlZGEwMSwzMTQwMDANCjIwMDMsQ0xFLEFMLG15ZXR0YWEwMSwzMDc1MDANCjIwMDMsQ0xFLEFMLHdlc3RiamEwMSwzMDU1MDANCjIwMDMsQ0xFLEFMLHNhZGxlY2EwMSwzMDMyMDANCjIwMDMsQ0xFLEFMLGJyb3VzYmUwMSwzMDMwMDANCjIwMDMsQ0xFLEFMLHJvZHJpcmkwMywzMDI0MDANCjIwMDMsQ0xFLEFMLGhhZm5ldHIwMSwzMDIyMDANCjIwMDMsQ0xFLEFMLGJhcmRqbzAxLDMwMjEwMA0KMjAwMyxDTEUsQUwsZGF2aXNqYTAyLDMwMTEwMA0KMjAwMyxDTEUsQUwsbGVlY2wwMiwzMDA5MDANCjIwMDMsQ0xFLEFMLHBoaWxsYnIwMSwzMDA5MDANCjIwMDMsQ0xFLEFMLHRyYWJlYmkwMSwzMDAwMDANCjIwMDMsREVULEFMLGhpZ2dpYm8wMiwxMTg1MDAwMA0KMjAwMyxERVQsQUwscGFsbWVkZTAxLDg1MDAwMDANCjIwMDMsREVULEFMLHlvdW5nZG0wMSw2NzUwMDAwDQoyMDAzLERFVCxBTCxzcGFya3N0MDEsNDUwMDAwMA0KMjAwMyxERVQsQUwsYW5kZXJtYTAxLDMyMDAwMDANCjIwMDMsREVULEFMLHBhcXVlY3IwMSwyNjI1MDAwDQoyMDAzLERFVCxBTCxwYXR0ZWRhMDQsMjUwMDAwMA0KMjAwMyxERVQsQUwsaGFsdGVzaDAxLDIxNTAwMDANCjIwMDMsREVULEFMLG11bnNvZXIwMSwxNzAwMDAwDQoyMDAzLERFVCxBTCx3YWxiZW1hMDEsNDAwMDAwDQoyMDAzLERFVCxBTCx3YWxrZWphMDEsMzYwMDAwDQoyMDAzLERFVCxBTCxraW5nc2dlMDEsMzQwMDAwDQoyMDAzLERFVCxBTCxib2NhY2hpMDEsMzI1MDAwDQoyMDAzLERFVCxBTCxpbmdlYnIwMSwzMTUwMDANCjIwMDMsREVULEFMLGJlcm5lYWQwMSwzMTQwMDANCjIwMDMsREVULEFMLHBlbmFjYTAxLDMxMDAwMA0KMjAwMyxERVQsQUwsbWFyb3RtaTAxLDMwOTAwMA0KMjAwMyxERVQsQUwsc2FudGlyYTAxLDMwNzAwMA0KMjAwMyxERVQsQUwsa25vdHRnYTAxLDMwNTAwMA0KMjAwMyxERVQsQUwsc3B1cmxjaDAxLDMwNTAwMA0KMjAwMyxERVQsQUwsY29ybmVuYTAxLDMwMzAwMA0KMjAwMyxERVQsQUwsYm9uZGVqZTAxLDMwMDAwMA0KMjAwMyxERVQsQUwsZ2VybWFmcjAxLDMwMDAwMA0KMjAwMyxERVQsQUwsaW5mYW5vbTAxLDMwMDAwMA0KMjAwMyxERVQsQUwsbGVkZXp3aTAxLDMwMDAwMA0KMjAwMyxERVQsQUwscm9uZXltYTAxLDMwMDAwMA0KMjAwMyxLQ0EsQUwsc3dlZW5taTAxLDExMDAwMDAwDQoyMDAzLEtDQSxBTCxiZWx0cmNhMDEsNjAwMDAwMA0KMjAwMyxLQ0EsQUwscmFuZGFqbzAxLDQ1MDAwMDANCjIwMDMsS0NBLEFMLGliYW5lcmEwMSwzMDAwMDAwDQoyMDAzLEtDQSxBTCxtYXluZWJyMDEsMjc1MDAwMA0KMjAwMyxLQ0EsQUwsdHVja2VtaTAxLDI3NTAwMDANCjIwMDMsS0NBLEFMLGdyaW1zamEwMSwyMDAwMDAwDQoyMDAzLEtDQSxBTCxsb3BlemFsMDIsMTUwMDAwMA0KMjAwMyxLQ0EsQUwscmVsYWZkZTAxLDkwMDAwMA0KMjAwMyxLQ0EsQUwsZmVibGVjYTAxLDc3NTAwMA0KMjAwMyxLQ0EsQUwsZGlmZWxtaTAxLDYyNTAwMA0KMjAwMyxLQ0EsQUwsbWF5ZGEwMiw0NTAwMDANCjIwMDMsS0NBLEFMLGFzZW5jbWkwMSwzMTQwMDANCjIwMDMsS0NBLEFMLGFmZmVsamUwMSwzMTMwMDANCjIwMDMsS0NBLEFMLHdpbHNva3IwMSwzMTEwMDANCjIwMDMsS0NBLEFMLGJyb3duZGUwMiwzMDk1MDANCjIwMDMsS0NBLEFMLGhlcm5hcnUwMywzMDU1MDANCjIwMDMsS0NBLEFMLGJ1a3ZpcnkwMSwzMDQ1MDANCjIwMDMsS0NBLEFMLGJlcmdlYnIwMSwzMDQwMDANCjIwMDMsS0NBLEFMLGdlb3JnY2gwMiwzMDM1MDANCjIwMDMsS0NBLEFMLGJlcnJvYW4wMSwzMDIwMDANCjIwMDMsS0NBLEFMLG1hY2RvbWkwMSwzMDEwMDANCjIwMDMsS0NBLEFMLGNhcnJhZGowMSwzMDAwMDANCjIwMDMsS0NBLEFMLGhhcnZla2UwMSwzMDAwMDANCjIwMDMsS0NBLEFMLGpvaG5zcm8wNiwzMDAwMDANCjIwMDMsS0NBLEFMLGxvcGV6bWUwMSwzMDAwMDANCjIwMDMsTUlOLEFMLHJhZGtlYnIwMSw4NzUwMDAwDQoyMDAzLE1JTixBTCxyZWVkcmkwMSw4MDAwMDAwDQoyMDAzLE1JTixBTCxtaWx0b2VyMDEsNjAwMDAwMA0KMjAwMyxNSU4sQUwsaHVudGV0bzAxLDQ3NTAwMDANCjIwMDMsTUlOLEFMLG1heXNqbzAxLDQxNTAwMDANCjIwMDMsTUlOLEFMLGtvc2tpY28wMSwzNDAwMDAwDQoyMDAzLE1JTixBTCxoYXdraWxhMDEsMzAwMDAwMA0KMjAwMyxNSU4sQUwsam9uZXNqYTA0LDI3NTAwMDANCjIwMDMsTUlOLEFMLGd1YXJkZWQwMSwyNzAwMDAwDQoyMDAzLE1JTixBTCxndXptYWNyMDEsMjUyNTAwMA0KMjAwMyxNSU4sQUwscm9nZXJrZTAxLDIwMDAwMDANCjIwMDMsTUlOLEFMLG1pZW50ZG8wMSwxNzUwMDAwDQoyMDAzLE1JTixBTCxob2NraWRlMDEsMTAwMDAwMA0KMjAwMyxNSU4sQUwsZmV0dGVtaTAxLDUwMDAwMA0KMjAwMyxNSU4sQUwsZ29tZXpjaDAyLDUwMDAwMA0KMjAwMyxNSU4sQUwscHJpbmN0bzAxLDQ1MDAwMA0KMjAwMyxNSU4sQUwscGllcnphajAxLDM2NTAwMA0KMjAwMyxNSU4sQUwscml2YXNsdTAxLDM0MDAwMA0KMjAwMyxNSU4sQUwsc2FudGFqbzAxLDMzNTAwMA0KMjAwMyxNSU4sQUwsZmlvcmV0bzAxLDMzMDAwMA0KMjAwMyxNSU4sQUwsbG9oc2VreTAxLDMzMDAwMA0KMjAwMyxNSU4sQUwsa2llbHRibzAxLDMyNTAwMA0KMjAwMyxNSU4sQUwscm9tZXJqYzAxLDMyNTAwMA0KMjAwMyxNSU4sQUwsbW9ocmR1MDEsMzE1MDAwDQoyMDAzLE1JTixBTCxsZWNyb21hMDEsMzEyNTAwDQoyMDAzLE1JTixBTCxjdWRkeW1pMDEsMzAyNTAwDQoyMDAzLE5ZQSxBTCxqZXRlcmRlMDEsMTU2MDAwMDANCjIwMDMsTllBLEFMLG1vbmRlcmEwMSwxMzAwMDAwMA0KMjAwMyxOWUEsQUwsd2lsbGliZTAyLDEyMzU3MTQzDQoyMDAzLE5ZQSxBTCxtdXNzaW1pMDEsMTIwMDAwMDANCjIwMDMsTllBLEFMLHBldHRpYW4wMSwxMTUwMDAwMA0KMjAwMyxOWUEsQUwsZ2lhbWJqYTAxLDExNDI4NTcxDQoyMDAzLE5ZQSxBTCxyaXZlcm1hMDEsMTA1MDAwMDANCjIwMDMsTllBLEFMLGNsZW1lcm8wMiwxMDEwMDAwMA0KMjAwMyxOWUEsQUwscG9zYWRqbzAxLDgwMDAwMDANCjIwMDMsTllBLEFMLGhpdGNoc3QwMSw2MDAwMDAwDQoyMDAzLE5ZQSxBTCxtYXRzdWhpMDEsNjAwMDAwMA0KMjAwMyxOWUEsQUwsY29udHJqbzAxLDU1MDAwMDANCjIwMDMsTllBLEFMLGthcnNhc3QwMSw1MDAwMDAwDQoyMDAzLE5ZQSxBTCx2ZW50dXJvMDEsNTAwMDAwMA0KMjAwMyxOWUEsQUwsd2VhdmVqZTAxLDQxNTAwMDANCjIwMDMsTllBLEFMLHdlbGxzZGEwMSwzMjUwMDAwDQoyMDAzLE5ZQSxBTCx0cmFtbWJ1MDEsMjUwMDAwMA0KMjAwMyxOWUEsQUwsb3N1bmFhbjAxLDI0MDAwMDANCjIwMDMsTllBLEFMLGhhbW1vY2gwMSwyMjAwMDAwDQoyMDAzLE5ZQSxBTCx6ZWlsZXRvMDEsMTUwMDAwMA0KMjAwMyxOWUEsQUwsYWNldmVqdTAxLDkwMDAwMA0KMjAwMyxOWUEsQUwsc29yaWFhbDAxLDgwMDAwMA0KMjAwMyxOWUEsQUwsZmxhaGVqbzAxLDc1MDAwMA0KMjAwMyxOWUEsQUwsd2lsc29lbjAxLDcwMDAwMA0KMjAwMyxOWUEsQUwsbGllYmVqbzAxLDU1MDAwMA0KMjAwMyxOWUEsQUwsbGF0aGFjaDAxLDQwMDAwMA0KMjAwMyxOWUEsQUwsam9obnNuaTAxLDM2NDEwMA0KMjAwMyxOWUEsQUwsYW5kZXJqYTAxLDMwMDAwMA0KMjAwMyxPQUssQUwsZHllamUwMSwxMTY2NjY2Nw0KMjAwMyxPQUssQUwsZm91bGtrZTAxLDYwMDAwMDANCjIwMDMsT0FLLEFMLHRlamFkbWkwMSw1MTI1MDAwDQoyMDAzLE9BSyxBTCxjaGF2ZWVyMDEsMzY3NTAwMA0KMjAwMyxPQUssQUwsbWVjaXJqaTAxLDMyMTY2NjcNCjIwMDMsT0FLLEFMLGh1ZHNvdGkwMSwyNzAwMDAwDQoyMDAzLE9BSyxBTCxtdWxkZW1hMDEsMjY1MDAwMA0KMjAwMyxPQUssQUwsbG9uZ3RlMDEsMjE3NTAwMA0KMjAwMyxPQUssQUwsaGVybmFyYTAyLDE4ODc1MDANCjIwMDMsT0FLLEFMLGhhdHRlc2MwMSwxNzUwMDAwDQoyMDAzLE9BSyxBTCxyaW5jb3JpMDEsMTcwMDAwMA0KMjAwMyxPQUssQUwsc2luZ2xjaDAxLDEyMDAwMDANCjIwMDMsT0FLLEFMLGR1cmF6ZXIwMSwxMDY1MDAwDQoyMDAzLE9BSyxBTCx6aXRvYmEwMSwxMDAwMDAwDQoyMDAzLE9BSyxBTCxoYWxhbWpvMDEsNzUwMDAwDQoyMDAzLE9BSyxBTCxqb2huc21hMDIsNTAwMDAwDQoyMDAzLE9BSyxBTCxnYW50cm8wMSwzNTAwMDANCjIwMDMsT0FLLEFMLGxpbGx5dGUwMSwzMzUwMDANCjIwMDMsT0FLLEFMLG1lbmVjZnIwMSwzMzQ1MDANCjIwMDMsT0FLLEFMLGJyYWRmY2gwMSwzMzEwMDANCjIwMDMsT0FLLEFMLHBpYXR0YWQwMSwzMjIwMDANCjIwMDMsT0FLLEFMLGZpa2FjamUwMSwzMTYwMDANCjIwMDMsT0FLLEFMLGVsbGlzbWEwMSwzMDc1MDANCjIwMDMsT0FLLEFMLGJvd2llbWkwMSwzMDQwMDANCjIwMDMsT0FLLEFMLGJ5cm5lZXIwMSwzMDAwMDANCjIwMDMsT0FLLEFMLG5ldW1pMDEsMzAwMDAwDQoyMDAzLFNFQSxBTCxib29uZWJyMDEsODAwMDAwMA0KMjAwMyxTRUEsQUwsc2FzYWtrYTAxLDgwMDAwMDANCjIwMDMsU0VBLEFMLG9sZXJ1am8wMSw3NzAwMDAwDQoyMDAzLFNFQSxBTCxjYW1lcm1pMDEsNzQxNjY2Nw0KMjAwMyxTRUEsQUwsZ2FyY2lmcjAyLDY4NzUwMDANCjIwMDMsU0VBLEFMLGNpcmlsamUwMSw2NzI1MDAwDQoyMDAzLFNFQSxBTCxtb3llcmphMDEsNjUwMDAwMA0KMjAwMyxTRUEsQUwsc3V6dWtpYzAxLDQ2NjY2NjcNCjIwMDMsU0VBLEFMLG1hcnRpZWQwMSw0MDAwMDAwDQoyMDAzLFNFQSxBTCxuZWxzb2plMDEsMzk4MzMzMw0KMjAwMyxTRUEsQUwscmhvZGVhcjAxLDM1MDAwMDANCjIwMDMsU0VBLEFMLHdpbHNvZGEwMSwzNTAwMDAwDQoyMDAzLFNFQSxBTCx3aW5ucmEwMSwzMzAwMDAwDQoyMDAzLFNFQSxBTCxtY2xlbW1hMDEsMzE1MDAwMA0KMjAwMyxTRUEsQUwsZ3VpbGxjYTAxLDI1MDAwMDANCjIwMDMsU0VBLEFMLGhhc2Vnc2gwMSwxODAwMDAwDQoyMDAzLFNFQSxBTCxkYXZpc2JlMDEsMTAwMDAwMA0KMjAwMyxTRUEsQUwsY29sYnJncjAxLDc1MDAwMA0KMjAwMyxTRUEsQUwsbWFicnlqbzAxLDYwMDAwMA0KMjAwMyxTRUEsQUwsYm9yZGVwYTAxLDUwMDAwMA0KMjAwMyxTRUEsQUwscGluZWlqbzAxLDQ0MDAwMA0KMjAwMyxTRUEsQUwsZnJhbmtyeTAxLDQyNTAwMA0KMjAwMyxTRUEsQUwsY2FycmFnaTAxLDQwMDAwMA0KMjAwMyxTRUEsQUwsbWVjaGVnaTAxLDMyNTAwMA0KMjAwMyxTRUEsQUwsbWF0ZW9qdTAxLDMwMjUwMA0KMjAwMyxTRUEsQUwsYmxvb213aTAxLDMwMDAwMA0KMjAwMyxTRUEsQUwsc25lbGxjaDAyLDMwMDAwMA0KMjAwMyxUQkEsQUwsb3Jkb25yZTAxLDY1MDAwMDANCjIwMDMsVEJBLEFMLGdyaWV2YmUwMSw1NTAwMDAwDQoyMDAzLFRCQSxBTCxhbmRlcm1hMDIsNjAwMDAwDQoyMDAzLFRCQSxBTCxsZWV0cjAxLDUwMDAwMA0KMjAwMyxUQkEsQUwscGFycXVqaTAxLDQwMDAwMA0KMjAwMyxUQkEsQUwscGFycmlzdDAxLDQwMDAwMA0KMjAwMyxUQkEsQUwsaHVmZmF1MDEsMzI1MDAwDQoyMDAzLFRCQSxBTCx2YWxlbmphMDEsMzA1MDAwDQoyMDAzLFRCQSxBTCxhYmVybmJyMDEsMzAwMDAwDQoyMDAzLFRCQSxBTCxiYWxkZXJvMDEsMzAwMDAwDQoyMDAzLFRCQSxBTCxiaWVyYm5pMDEsMzAwMDAwDQoyMDAzLFRCQSxBTCxjYXJ0ZWxhMDIsMzAwMDAwDQoyMDAzLFRCQSxBTCxjb2xvbWplMDEsMzAwMDAwDQoyMDAzLFRCQSxBTCxjcmF3ZmNhMDIsMzAwMDAwDQoyMDAzLFRCQSxBTCxoYWxsdG8wMiwzMDAwMDANCjIwMDMsVEJBLEFMLGhhcnBldHIwMSwzMDAwMDANCjIwMDMsVEJBLEFMLGtlbm5lam8wNCwzMDAwMDANCjIwMDMsVEJBLEFMLG1hcnRpYWwwMywzMDAwMDANCjIwMDMsVEJBLEFMLG1jY2x1c2UwMSwzMDAwMDANCjIwMDMsVEJBLEFMLHJvbGxzZGEwMSwzMDAwMDANCjIwMDMsVEJBLEFMLHNlYXlibzAxLDMwMDAwMA0KMjAwMyxUQkEsQUwsc2h1bXB0ZTAxLDMwMDAwMA0KMjAwMyxUQkEsQUwsc29zYWpvMDIsMzAwMDAwDQoyMDAzLFRCQSxBTCx2ZW5hZm1pMDEsMzAwMDAwDQoyMDAzLFRCQSxBTCx6YW1icnZpMDEsMzAwMDAwDQoyMDAzLFRFWCxBTCxyb2RyaWFsMDEsMjIwMDAwMDANCjIwMDMsVEVYLEFMLGdvbnphanUwMywxMzAwMDAwMA0KMjAwMyxURVgsQUwscGFya2NoMDEsMTMwMDAwMDANCjIwMDMsVEVYLEFMLGV2ZXJlY2EwMSw5MTUwMDAwDQoyMDAzLFRFWCxBTCxwYWxtZXJhMDEsOTAwMDAwMA0KMjAwMyxURVgsQUwsZ3JlZXJydTAxLDcwMDAwMDANCjIwMDMsVEVYLEFMLHVyYmludWcwMSw0NTAwMDAwDQoyMDAzLFRFWCxBTCx6aW1tZWplMDIsMzM2NjY2Nw0KMjAwMyxURVgsQUwscG93ZWxqYTA0LDMyNTAwMDANCjIwMDMsVEVYLEFMLHZhbGRlaXMwMSwyNTAwMDAwDQoyMDAzLFRFWCxBTCx2YW5wb3RvMDEsMjUwMDAwMA0KMjAwMyxURVgsQUwsZGlhemVpMDEsMTgzNzUwMA0KMjAwMyxURVgsQUwseWFuZXMwMSwxNTAwMDAwDQoyMDAzLFRFWCxBTCxwZXJyeWhlMDEsMTMwMDAwMA0KMjAwMyxURVgsQUwsdGhvbXNqbzAxLDEzMDAwMDANCjIwMDMsVEVYLEFMLGdsYW52ZG8wMSwxMDAwMDAwDQoyMDAzLFRFWCxBTCxjb3JkZWZyMDEsOTAwMDAwDQoyMDAzLFRFWCxBTCxncmVlbnRvMDIsNzUwMDAwDQoyMDAzLFRFWCxBTCxrcmV1dGNoMDEsNzUwMDAwDQoyMDAzLFRFWCxBTCx0ZWl4ZW1hMDEsNzUwMDAwDQoyMDAzLFRFWCxBTCxmdWx0emFhMDEsNjAwMDAwDQoyMDAzLFRFWCxBTCxzaWVycnJ1MDEsNjAwMDAwDQoyMDAzLFRFWCxBTCxuaXRrb2NqMDEsNTUwMDAwDQoyMDAzLFRFWCxBTCxsYW1ibWkwMSw0NDAwMDANCjIwMDMsVEVYLEFMLHlvdW5nbWkwMiw0MTUwMDANCjIwMDMsVEVYLEFMLG1lbmNoa2UwMSwzMjc1MDANCjIwMDMsVEVYLEFMLGJsYWxvaGEwMSwzMDI1MDANCjIwMDMsVEVYLEFMLGxld2lzY28wMSwzMDI1MDANCjIwMDMsVEVYLEFMLGNsYXJramUwMiwzMDAwMDANCjIwMDMsVEVYLEFMLGdhcmNpcmUwMSwzMDAwMDANCjIwMDMsVE9SLEFMLGRlbGdhY2EwMSwxODcwMDAwMA0KMjAwMyxUT1IsQUwsc3Rld2FzaDAxLDYyMDAwMDANCjIwMDMsVE9SLEFMLGxpZGxlY28wMSw1MzUwMDAwDQoyMDAzLFRPUixBTCxlc2NvYmtlMDEsMzkwMDAwMA0KMjAwMyxUT1IsQUwsaGFsbGFybzAxLDM4MjUwMDANCjIwMDMsVE9SLEFMLGNhdGFsZnIwMSwyMjAwMDAwDQoyMDAzLFRPUixBTCxib3JkaW1pMDEsMTAwMDAwMA0KMjAwMyxUT1IsQUwsc3R1cnR0YTAxLDEwMDAwMDANCjIwMDMsVE9SLEFMLHBvbGl0Y2wwMSw4NDUwMDANCjIwMDMsVE9SLEFMLG15ZXJzZ3IwMSw4MDAwMDANCjIwMDMsVE9SLEFMLHdvb2R3Y2gwMSw3NzUwMDANCjIwMDMsVE9SLEFMLGJlcmdkYTAxLDcwMDAwMA0KMjAwMyxUT1IsQUwsY3JlZWtkbzAxLDcwMDAwMA0KMjAwMyxUT1IsQUwsaGluc2tlcjAxLDYwMDAwMA0KMjAwMyxUT1IsQUwsdGFtamUwMSw2MDAwMDANCjIwMDMsVE9SLEFMLHdlbGxzdmUwMSw1MjAwMDANCjIwMDMsVE9SLEFMLHdhbGtlcGUwMSw0MjUwMDANCjIwMDMsVE9SLEFMLGxpbnRvZG8wMSwzNTAwMDANCjIwMDMsVE9SLEFMLHBoZWxwam8wMSwzMjAwMDANCjIwMDMsVE9SLEFMLHdpbHNvdG8wMiwzMTYwMDANCjIwMDMsVE9SLEFMLGh1Y2tha2UwMSwzMTMwMDANCjIwMDMsVE9SLEFMLGh1ZHNvb3IwMSwzMTMwMDANCjIwMDMsVE9SLEFMLGZpbGVibzAxLDMxMDAwMA0KMjAwMyxUT1IsQUwsbWlsbGV0cjAyLDMwNTAwMA0KMjAwMyxUT1IsQUwsaGVuZHJtYTAxLDMwMjAwMA0KMjAwMyxUT1IsQUwsbG9wZXphcTAxLDMwMDAwMA0KMjAwMyxUT1IsQUwsd2VydGhqYTAxLDMwMDAwMA0KMjAwMyxBUkksTkwsam9obnNyYTA1LDE1MDAwMDAwDQoyMDAzLEFSSSxOTCxzY2hpbGN1MDEsMTAwMDAwMDANCjIwMDMsQVJJLE5MLHdpbGxpbWEwNCwxMDAwMDAwMA0KMjAwMyxBUkksTkwsbWFudGVtYTAxLDcwODMzMzMNCjIwMDMsQVJJLE5MLHdvbWFjdG8wMSw2MDAwMDAwDQoyMDAzLEFSSSxOTCxmaW5sZXN0MDEsNDI1MDAwMA0KMjAwMyxBUkksTkwsZ29uemFsdTAxLDQwMDAwMDANCjIwMDMsQVJJLE5MLGJhdGlzbWkwMSwzMzc1MDAwDQoyMDAzLEFSSSxOTCxraW1ieTAxLDMyNTAwMDANCjIwMDMsQVJJLE5MLGJhdXRpZGEwMSwzMDAwMDAwDQoyMDAzLEFSSSxOTCxkZXNzZWVsMDEsMzAwMDAwMA0KMjAwMyxBUkksTkwsY291bnNjcjAxLDI1MTY2NjcNCjIwMDMsQVJJLE5MLGdyYWNlbWEwMSwxNzUwMDAwDQoyMDAzLEFSSSxOTCxtY2NyYXF1MDEsMTc1MDAwMA0KMjAwMyxBUkksTkwsbXllcnNtaTAxLDE3NTAwMDANCjIwMDMsQVJJLE5MLGRlbGx1ZGEwMSw5MDAwMDANCjIwMDMsQVJJLE5MLGJhZXJnY2EwMSw1MDAwMDANCjIwMDMsQVJJLE5MLHNwaXZlanUwMSw0MzIwMDANCjIwMDMsQVJJLE5MLGJhcmFqcm8wMSwzMDAwMDANCjIwMDMsQVJJLE5MLGtvcGxvbWkwMSwzMDAwMDANCjIwMDMsQVJJLE5MLG1vZWxsY2gwMSwzMDAwMDANCjIwMDMsQVJJLE5MLG92ZXJibHkwMSwzMDAwMDANCjIwMDMsQVJJLE5MLHByaW56YnIwMSwzMDAwMDANCjIwMDMsQVJJLE5MLHJhbmRvc3QwMSwzMDAwMDANCjIwMDMsQVJJLE5MLHZpbGxhb3MwMSwzMDAwMDANCjIwMDMsQVRMLE5MLG1hZGR1Z3IwMSwxNDc1MDAwMA0KMjAwMyxBVEwsTkwsaGFtcHRtaTAxLDEzNjI1MDAwDQoyMDAzLEFUTCxOTCxqb25lc2NoMDYsMTMzMzMzMzMNCjIwMDMsQVRMLE5MLGpvbmVzYW4wMSwxMjAwMDAwMA0KMjAwMyxBVEwsTkwsc2hlZmZnYTAxLDExNDE2NjY3DQoyMDAzLEFUTCxOTCxzbW9sdGpvMDEsMTA2NjY2NjcNCjIwMDMsQVRMLE5MLGxvcGV6amEwMSw3MDAwMDAwDQoyMDAzLEFUTCxOTCxjYXN0aXZpMDIsNTAwMDAwMA0KMjAwMyxBVEwsTkwsb3J0aXpydTAxLDQ2NjI1MDANCjIwMDMsQVRMLE5MLGJ5cmRwYTAxLDMwMDAwMDANCjIwMDMsQVRMLE5MLGZ1cmNhcmEwMSwyMjAwMDAwDQoyMDAzLEFUTCxOTCxibGFuY2hlMDEsMTMwMDAwMA0KMjAwMyxBVEwsTkwsZmlja3JvMDEsMTAwMDAwMA0KMjAwMyxBVEwsTkwsZnJhbmNtYTAxLDgwMDAwMA0KMjAwMyxBVEwsTkwsaG9sbWVkYTAxLDcwMDAwMA0KMjAwMyxBVEwsTkwsZnJhbmNqdTAxLDYwMDAwMA0KMjAwMyxBVEwsTkwsaGVybmFybzAxLDYwMDAwMA0KMjAwMyxBVEwsTkwsa2luZ3JhMDEsNjAwMDAwDQoyMDAzLEFUTCxOTCxicmFnZ2RhMDEsNDUwMDAwDQoyMDAzLEFUTCxOTCxtYXJxdWphMDEsMzY4MDAwDQoyMDAzLEFUTCxOTCxkZXJvc21hMDEsMzQwMDAwDQoyMDAzLEFUTCxOTCxnaWxlc21hMDEsMzE2NTAwDQoyMDAzLEFUTCxOTCxncnlib2tlMDEsMzE1MDAwDQoyMDAzLEFUTCxOTCxib25nanUwMSwzMDAwMDANCjIwMDMsQVRMLE5MLGRhd2xlam8wMSwzMDAwMDANCjIwMDMsQVRMLE5MLGhvZGdldHIwMSwzMDAwMDANCjIwMDMsQVRMLE5MLHJhbWlyaG8wMSwzMDAwMDANCjIwMDMsQ0hOLE5MLHNvc2FzYTAxLDE2MDAwMDAwDQoyMDAzLENITixOTCxhbG91bW8wMSw5NTAwMDAwDQoyMDAzLENITixOTCxrYXJyb2VyMDEsODM3NTAwMA0KMjAwMyxDSE4sTkwsd29vZGtlMDIsNjE5MDAwMA0KMjAwMyxDSE4sTkwsZ29uemFhbDAxLDU3NTAwMDANCjIwMDMsQ0hOLE5MLGdydWR6bWEwMSw1NTAwMDAwDQoyMDAzLENITixOTCxhbGZvbmFuMDEsNDAwMDAwMA0KMjAwMyxDSE4sTkwsY2xlbWVtYTAxLDQwMDAwMDANCjIwMDMsQ0hOLE5MLGVzdGVzc2gwMSwzMDAwMDAwDQoyMDAzLENITixOTCxtaWxsZWRhMDIsMjcwMDAwMA0KMjAwMyxDSE4sTkwscmVtbGltaTAxLDI2MzMzMzMNCjIwMDMsQ0hOLE5MLHZlcmVzZGEwMSwyMDAwMDAwDQoyMDAzLENITixOTCxndXRocm1hMDEsMTYwMDAwMA0KMjAwMyxDSE4sTkwscHJpb3JtYTAxLDE0NTAwMDANCjIwMDMsQ0hOLE5MLGhhcnJpbGUwMSw4MDAwMDANCjIwMDMsQ0hOLE5MLG1hcnRpcmEwMyw4MDAwMDANCjIwMDMsQ0hOLE5MLGJha29wYTAxLDc1MDAwMA0KMjAwMyxDSE4sTkwsb2xlYXJ0cjAxLDc1MDAwMA0KMjAwMyxDSE4sTkwsZ29vZHd0bzAxLDYzNTAwMA0KMjAwMyxDSE4sTkwsZmFybnNreTAxLDYwMDAwMA0KMjAwMyxDSE4sTkwsYmVsbGhtYTAxLDQ2NTAwMA0KMjAwMyxDSE4sTkwsYm9yb3dqbzAxLDQxMDAwMA0KMjAwMyxDSE4sTkwscGF0dGVjbzAxLDM2NTAwMA0KMjAwMyxDSE4sTkwsY3J1emp1MDIsMzQwMDAwDQoyMDAzLENITixOTCx6YW1icmNhMDEsMzQwMDAwDQoyMDAzLENITixOTCxjaGlhc3NjMDEsMzA1MDAwDQoyMDAzLENITixOTCxjaG9paGUwMSwzMDUwMDANCjIwMDMsQ0hOLE5MLG9obWFud2kwMSwzMDUwMDANCjIwMDMsQ0lOLE5MLGdyaWZma2UwMiwxMjUwMDAwMA0KMjAwMyxDSU4sTkwsbGFya2liYTAxLDkwMDAwMDANCjIwMDMsQ0lOLE5MLGNhc2V5c2UwMSw1NjAwMDAwDQoyMDAzLENJTixOTCxncmF2ZWRhMDEsNTAwMDAwMA0KMjAwMyxDSU4sTkwsYm9vbmVhYTAxLDM3MDAwMDANCjIwMDMsQ0lOLE5MLHdoaXRlZ2EwMSwzMzE2NjY3DQoyMDAzLENJTixOTCxkZW1wc3J5MDEsMzI1MDAwMA0KMjAwMyxDSU4sTkwsc3VsbGlzYzAxLDI4MDAwMDANCjIwMDMsQ0lOLE5MLGhheW5lamkwMSwyNTAwMDAwDQoyMDAzLENJTixOTCx3aWxsaXNjMDEsMTYwMDAwMA0KMjAwMyxDSU4sTkwsc3Rpbm5rZTAxLDEzMDAwMDANCjIwMDMsQ0lOLE5MLGxhcnVlamEwMSwxMjUwMDAwDQoyMDAzLENJTixOTCxjYXN0cmp1MDEsODAwMDAwDQoyMDAzLENJTixOTCxwZW5hd2kwMSw3ODgwMDANCjIwMDMsQ0lOLE5MLGFuZGVyamkwMiw2MDAwMDANCjIwMDMsQ0lOLE5MLGhlcmVkZmUwMSw2MDAwMDANCjIwMDMsQ0lOLE5MLG1lcmNra2UwMSw1NTAwMDANCjIwMDMsQ0lOLE5MLG1hbnpham8wMSw1MDAwMDANCjIwMDMsQ0lOLE5MLHdpbHNvcGEwMiw1MDAwMDANCjIwMDMsQ0lOLE5MLGR1bm5hZDAxLDQwMDAwMA0KMjAwMyxDSU4sTkwsYnJhbnlydTAxLDM5NTAwMA0KMjAwMyxDSU4sTkwscHJva29sdTAxLDM5MDAwMA0KMjAwMyxDSU4sTkwsa2Vhcm5hdTAxLDM1MDAwMA0KMjAwMyxDSU4sTkwscmllZGxqbzAxLDM1MDAwMA0KMjAwMyxDSU4sTkwsbWF0ZW9ydTAxLDM0MDAwMA0KMjAwMyxDSU4sTkwsbG9wZXpmZTAxLDMzNDAwMA0KMjAwMyxDSU4sTkwsdGF5bG9yZTAxLDMzNDAwMA0KMjAwMyxDSU4sTkwsbGFyc29icjAxLDMwODAwMA0KMjAwMyxDT0wsTkwsd2Fsa2VsYTAxLDEyNjY2NjY3DQoyMDAzLENPTCxOTCxoZWx0b3RvMDEsMTA2MDAwMDANCjIwMDMsQ09MLE5MLG5lYWdsZGUwMSw5MDAwMDAwDQoyMDAzLENPTCxOTCxqb2huc2NoMDQsNzAwMDAwMA0KMjAwMyxDT0wsTkwsd2lsc29wcjAxLDY1MDAwMDANCjIwMDMsQ09MLE5MLGppbWVuam8wMSwzNjAwMDAwDQoyMDAzLENPTCxOTCxrYXBsZWdhMDEsMzQyNTAwMA0KMjAwMyxDT0wsTkwsam9uZXN0bzAyLDMwMDAwMDANCjIwMDMsQ09MLE5MLHBheXRvamEwMSwxODUwMDAwDQoyMDAzLENPTCxOTCxoZXJuYWpvMDEsMTAwMDAwMA0KMjAwMyxDT0wsTkwsc3BlaWVqdTAxLDg1MDAwMA0KMjAwMyxDT0wsTkwsc3R5bmVjaDAxLDc1MDAwMA0KMjAwMyxDT0wsTkwsY3J1em5lMDEsNzAwMDAwDQoyMDAzLENPTCxOTCxub3J0b2dyMDEsNjAwMDAwDQoyMDAzLENPTCxOTCxyZWVkc3QwMSw2MDAwMDANCjIwMDMsQ09MLE5MLGVzdGFsYm8wMiw1MDAwMDANCjIwMDMsQ09MLE5MLGJlbGxpcm8wMSw0NzUwMDANCjIwMDMsQ09MLE5MLG1pY2VsZGEwMSwzNTAwMDANCjIwMDMsQ09MLE5MLG9saXZlZGEwMiwzNTAwMDANCjIwMDMsQ09MLE5MLGplbm5pamEwMSwzMjUwMDANCjIwMDMsQ09MLE5MLHJpY2hhY2gwMSwzMjUwMDANCjIwMDMsQ09MLE5MLHN0YXJrZGUwMSwzMTAwMDANCjIwMDMsQ09MLE5MLGJ1dGxlYnIwMiwzMDMwMDANCjIwMDMsQ09MLE5MLGNoYWNvc2gwMSwzMDAwMDANCjIwMDMsQ09MLE5MLGNvb2thYTAxLDMwMDAwMA0KMjAwMyxDT0wsTkwsZWxhcnRzYzAxLDMwMDAwMA0KMjAwMyxDT0wsTkwsZnVlbnRicjAxLDMwMDAwMA0KMjAwMyxDT0wsTkwsbG9wZXpqYTAyLDMwMDAwMA0KMjAwMyxDT0wsTkwsb3p1bmFwYTAxLDMwMDAwMA0KMjAwMyxDT0wsTkwsdXJpYmVqdTAxLDMwMDAwMA0KMjAwMyxGTE8sTkwscm9kcmlpdjAxLDEwMDAwMDAwDQoyMDAzLEZMTyxOTCxjYXN0aWx1MDEsNDg1MDAwMA0KMjAwMyxGTE8sTkwsbGVlZGUwMiw0MjUwMDAwDQoyMDAzLEZMTyxOTCxsb3dlbG1pMDEsMzcwMDAwMA0KMjAwMyxGTE8sTkwsZW5jYXJqdTAxLDM0NTAwMDANCjIwMDMsRkxPLE5MLGJ1cm5lYWowMSwyNTAwMDAwDQoyMDAzLEZMTyxOTCxyZWRtYW1hMDEsMjE1MDAwMA0KMjAwMyxGTE8sTkwscGVubnlicjAxLDE4NzUwMDANCjIwMDMsRkxPLE5MLGJlY2tlam8wMiwxNzI1MDAwDQoyMDAzLEZMTyxOTCxnb256YWFsMDIsMTcwMDAwMA0KMjAwMyxGTE8sTkwsbG9vcGVicjAxLDE2MDAwMDANCjIwMDMsRkxPLE5MLGhvbGxhdG8wMSwxNTAwMDAwDQoyMDAzLEZMTyxOTCxwYXZhbmNhMDEsMTUwMDAwMA0KMjAwMyxGTE8sTkwsbnVuZXp2bDAxLDE0MDAwMDANCjIwMDMsRkxPLE5MLHJlZG1vbWkwMSwxMDUwMDAwDQoyMDAzLEZMTyxOTCxwaWVycmp1MDEsMTAwMDAwMA0KMjAwMyxGTE8sTkwsZm94YW4wMSw4MDAwMDANCjIwMDMsRkxPLE5MLGFsbWFuYXIwMSw3NzUwMDANCjIwMDMsRkxPLE5MLG1vcmRlbWkwMSw1MDAwMDANCjIwMDMsRkxPLE5MLHdpbGxpZ2UwMiwzMjUwMDANCjIwMDMsRkxPLE5MLGJhbmtzYnIwMSwzMDAwMDANCjIwMDMsRkxPLE5MLGNhc3RycmEwMSwzMDAwMDANCjIwMDMsRkxPLE5MLG5lYWxibDAxLDMwMDAwMA0KMjAwMyxGTE8sTkwsbnVuZXphYjAyLDMwMDAwMA0KMjAwMyxGTE8sTkwscGhlbHB0bzAxLDMwMDAwMA0KMjAwMyxGTE8sTkwsc3Bvb250aTAxLDMwMDAwMA0KMjAwMyxGTE8sTkwsdGVqZXJtaTAxLDMwMDAwMA0KMjAwMyxGTE8sTkwsd2F5bmVqdTAxLDMwMDAwMA0KMjAwMyxGTE8sTkwsd2lsbGlkbzAzLDIzNDQyNg0KMjAwMyxGTE8sTkwsY2FicmVtaTAxLDE2NTU3NA0KMjAwMyxIT1UsTkwsYmFnd2VqZTAxLDEzMDAwMDAwDQoyMDAzLEhPVSxOTCxiaWdnaWNyMDEsOTc1MDAwMA0KMjAwMyxIT1UsTkwsaGlkYWxyaTAxLDg1MDAwMDANCjIwMDMsSE9VLE5MLHdhZ25lYmkwMiw4MDAwMDAwDQoyMDAzLEhPVSxOTCxrZW50amUwMSw3NTAwMDAwDQoyMDAzLEhPVSxOTCxhdXNtdWJyMDEsNTUwMDAwMA0KMjAwMyxIT1UsTkwsYmVya21sYTAxLDM1MDAwMDANCjIwMDMsSE9VLE5MLHZpemNham8wMSwyMDAwMDAwDQoyMDAzLEhPVSxOTCxtZXJjZW9yMDEsMTcwMDAwMA0KMjAwMyxIT1UsTkwsZG90ZWxvYzAxLDE2MDAwMDANCjIwMDMsSE9VLE5MLGx1Z29qdTAxLDE1NzUwMDANCjIwMDMsSE9VLE5MLGJsdW1nZTAxLDE1MDAwMDANCjIwMDMsSE9VLE5MLGh1bnRlYnIwMiwxMjAwMDAwDQoyMDAzLEhPVSxOTCx6YXVuZ3IwMSwxMjAwMDAwDQoyMDAzLEhPVSxOTCxjaGVuYnIwMSw1NTAwMDANCjIwMDMsSE9VLE5MLG1pbGxld2EwNCw1MjUwMDANCjIwMDMsSE9VLE5MLG1vZWhsYnIwMSw1MDAwMDANCjIwMDMsSE9VLE5MLG9zd2Fscm8wMSw1MDAwMDANCjIwMDMsSE9VLE5MLHN0b25lcmkwMSwzMjUwMDANCjIwMDMsSE9VLE5MLGhlcm5hY2EwMywzMTAwMDANCjIwMDMsSE9VLE5MLG11bnJvcGUwMSwzMDUwMDANCjIwMDMsSE9VLE5MLGNoYXZlcmEwMSwzMDAwMDANCjIwMDMsSE9VLE5MLGVuc2JlbW8wMSwzMDAwMDANCjIwMDMsSE9VLE5MLGxpZGdlYnIwMSwzMDAwMDANCjIwMDMsSE9VLE5MLHJlZGRpdGkwMSwzMDAwMDANCjIwMDMsSE9VLE5MLHJvYmVyamUwMiwzMDAwMDANCjIwMDMsTEFOLE5MLGJyb3dua2UwMSwxNTcxNDI4Ng0KMjAwMyxMQU4sTkwsZ3JlZW5zaDAxLDE1NjY2NjY3DQoyMDAzLExBTixOTCxkcmVpZmRhMDEsMTI0MDAwMDANCjIwMDMsTEFOLE5MLGpvcmRhYnIwMSw5NjAwMDAwDQoyMDAzLExBTixOTCxhc2hieWFuMDEsODUwMDAwMA0KMjAwMyxMQU4sTkwsbm9tb2hpMDEsNzc1MDAwMA0KMjAwMyxMQU4sTkwsaHVuZGx0bzAxLDY1MDAwMDANCjIwMDMsTEFOLE5MLHNodWV5cGEwMSwzOTE2NjY3DQoyMDAzLExBTixOTCxtY2dyaWZyMDEsMzc1MDAwMA0KMjAwMyxMQU4sTkwsYmVsdHJhZDAxLDM3MDAwMDANCjIwMDMsTEFOLE5MLHBlcmV6b2QwMSwzNDAwMDAwDQoyMDAzLExBTixOTCxxdWFudHBhMDEsMzMzMzMzMw0KMjAwMyxMQU4sTkwsbG9kdWNwYTAxLDI2MzY2NjcNCjIwMDMsTEFOLE5MLGlzaGlpa2EwMSwyNTc1MDAwDQoyMDAzLExBTixOTCx3YXJkZGEwMSwxMzUwMDAwDQoyMDAzLExBTixOTCxjb3JhYWwwMSwxMTUwMDAwDQoyMDAzLExBTixOTCxtb3RhZ3UwMSw2NzUwMDANCjIwMDMsTEFOLE5MLGdhZ25lZXIwMSw1NTAwMDANCjIwMDMsTEFOLE5MLGNhYnJlam8wMiw0MzUwMDANCjIwMDMsTEFOLE5MLHJvYmVyZGEwNyw0MDAwMDANCjIwMDMsTEFOLE5MLGl6dHVyY2UwMSwzMzUwMDANCjIwMDMsTEFOLE5MLGtpbmthbWkwMSwzMjAwMDANCjIwMDMsTEFOLE5MLGhlcm1hY2gwMSwzMTI1MDANCjIwMDMsTEFOLE5MLHJvbWFuamEwMSwzMDI1MDANCjIwMDMsTEFOLE5MLGNvbHllc3QwMSwzMDAwMDANCjIwMDMsTUlMLE5MLGhhbW1vamUwMSw4MjAwMDAwDQoyMDAzLE1JTCxOTCxqZW5raWdlMDEsNTE4NzUwMA0KMjAwMyxNSUwsTkwsc2V4c29yaTAxLDUxMjUwMDANCjIwMDMsTUlMLE5MLHJ1c2NoZ2wwMSw0MjUwMDAwDQoyMDAzLE1JTCxOTCxsZXNrYWN1MDEsMzcwMDAwMA0KMjAwMyxNSUwsTkwseW91bmdlcjAxLDIwMDAwMDANCjIwMDMsTUlMLE5MLGRlamVhbWkwMSwxNzAwMDAwDQoyMDAzLE1JTCxOTCxjbGF5dHJvMDEsMTUwMDAwMA0KMjAwMyxNSUwsTkwscml0Y2h0bzAxLDExNTAwMDANCjIwMDMsTUlMLE5MLGRlbG9zdmEwMSw5MjUwMDANCjIwMDMsTUlMLE5MLGhlbG1zd2UwMSw1NzUwMDANCjIwMDMsTUlMLE5MLHZhbmRlam8wMiw1NTAwMDANCjIwMDMsTUlMLE5MLHBlcmV6ZWQwMiw1MDAwMDANCjIwMDMsTUlMLE5MLG9zaWtrZTAxLDQ1NTAwMA0KMjAwMyxNSUwsTkwsc2hlZXRiZTAxLDQyODAwMA0KMjAwMyxNSUwsTkwsdml6Y2FsdTAxLDM3MDAwMA0KMjAwMyxNSUwsTkwsc2FuY2hhbDAzLDM0MDAwMA0KMjAwMyxNSUwsTkwsZHVyb2NqYTAxLDMyMDAwMA0KMjAwMyxNSUwsTkwsa2lubmVtYTAxLDMxODAwMA0KMjAwMyxNSUwsTkwsZnJhbmt3YTAxLDMxNTAwMA0KMjAwMyxNSUwsTkwsY2xhcmticjAyLDMxMjUwMA0KMjAwMyxNSUwsTkwsbmV1Z2VuaTAxLDMwNTAwMA0KMjAwMyxNSUwsTkwsZ2ludGVrZTAxLDMwMTAwMA0KMjAwMyxNSUwsTkwsY29udGlqYTAxLDMwMDAwMA0KMjAwMyxNSUwsTkwsY3J1emVuMDEsMzAwMDAwDQoyMDAzLE1JTCxOTCxmb3JkbWEwMSwzMDAwMDANCjIwMDMsTUlMLE5MLGZvc3Rlam8wMSwzMDAwMDANCjIwMDMsTUlMLE5MLG5hbmNlc2gwMSwzMDAwMDANCjIwMDMsTUlMLE5MLHBvZHNlc2MwMSwzMDAwMDANCjIwMDMsTU9OLE5MLGd1ZXJydmwwMSwxMTUwMDAwMA0KMjAwMyxNT04sTkwsdGF0aXNmZTAxLDY1MDAwMDANCjIwMDMsTU9OLE5MLHZhenF1amEwMSw2MDAwMDAwDQoyMDAzLE1PTixOTCx2aWRyb2pvMDEsNTUwMDAwMA0KMjAwMyxNT04sTkwsaGVybmFvcjAxLDQxMDAwMDANCjIwMDMsTU9OLE5MLGhlcm5hbGkwMSwzODI1MDAwDQoyMDAzLE1PTixOTCxjYWJyZW9yMDEsMzMwMDAwMA0KMjAwMyxNT04sTkwsYmFycmVtaTAxLDI2MDAwMDANCjIwMDMsTU9OLE5MLGFybWFzdG8wMiwyMTAwMDAwDQoyMDAzLE1PTixOTCxtYWNpYWpvMDEsODI1MDAwDQoyMDAzLE1PTixOTCxlaXNjaGpvMDEsNzUwMDAwDQoyMDAzLE1PTixOTCxjb3JkZXdpMDEsNjAwMDAwDQoyMDAzLE1PTixOTCxvaGthdG8wMSwzNDAwMDANCjIwMDMsTU9OLE5MLHN0ZXdhc2MwMSwzMjcwMDANCjIwMDMsTU9OLE5MLGJpZGRscm8wMSwzMjAwMDANCjIwMDMsTU9OLE5MLGxpZWZlamUwMSwzMjAwMDANCjIwMDMsTU9OLE5MLHdpbGtlYnIwMSwzMTUwMDANCjIwMDMsTU9OLE5MLHNjaG5lYnIwMSwzMTAwMDANCjIwMDMsTU9OLE5MLHR1Y2tldGowMSwzMTAwMDANCjIwMDMsTU9OLE5MLHNtaXRoZGEwNiwzMDUwMDANCjIwMDMsTU9OLE5MLGRheXphMDEsMzAxNTAwDQoyMDAzLE1PTixOTCxheWFsYWx1MDEsMzAwMDAwDQoyMDAzLE1PTixOTCxjYWxsb3JvMDEsMzAwMDAwDQoyMDAzLE1PTixOTCxjYXJyb2phMDEsMzAwMDAwDQoyMDAzLE1PTixOTCxjaGF2ZWVuMDEsMzAwMDAwDQoyMDAzLE1PTixOTCxtYXRlb2hlMDEsMzAwMDAwDQoyMDAzLE5ZTixOTCx2YXVnaG1vMDEsMTcxNjY2NjcNCjIwMDMsTllOLE5MLHBpYXp6bWkwMSwxNTU3MTQyOQ0KMjAwMyxOWU4sTkwsYnVybmlqZTAxLDEyMTY2NjY3DQoyMDAzLE5ZTixOTCxnbGF2aXRvMDIsMTEwMDAwMDANCjIwMDMsTllOLE5MLGFsb21hcm8wMSw4MDAwMDAwDQoyMDAzLE5ZTixOTCxsZWl0ZWFsMDEsODAwMDAwMA0KMjAwMyxOWU4sTkwsYXN0YWNwZTAxLDcwMDAwMDANCjIwMDMsTllOLE5MLGJlbml0YXIwMSw2OTM3NTAwDQoyMDAzLE5ZTixOTCxmbG95ZGNsMDEsNjUwMDAwMA0KMjAwMyxOWU4sTkwsY2VkZW5ybzAxLDQ4NzUwMDANCjIwMDMsTllOLE5MLGZyYW5jam8wMSwzODMzMzMzDQoyMDAzLE5ZTixOTCx3ZWF0aGRhMDEsMzczMzMzMw0KMjAwMyxOWU4sTkwsdHJhY2hzdDAxLDMwMDAwMDANCjIwMDMsTllOLE5MLHN0YW50bWkwMiwyMDAwMDAwDQoyMDAzLE5ZTixOTCxzYW5jaHJlMDEsMTMwMDAwMA0KMjAwMyxOWU4sTkwsc3RyaWNzYzAxLDk1MDAwMA0KMjAwMyxOWU4sTkwsbGxveWRncjAxLDY1MDAwMA0KMjAwMyxOWU4sTkwsbWNld2lqbzAxLDYwMDAwMA0KMjAwMyxOWU4sTkwsc2hpbmp0czAxLDYwMDAwMA0KMjAwMyxOWU4sTkwsYmVsbGphMDEsNTUwMDAwDQoyMDAzLE5ZTixOTCx3aWxzb3ZhMDEsMzE1MDAwDQoyMDAzLE5ZTixOTCxwZXJlenRpMDEsMzEyNTAwDQoyMDAzLE5ZTixOTCxyb2JlcmdyMDEsMzEwMDAwDQoyMDAzLE5ZTixOTCxiYWNzaW1pMDIsMzAyNTAwDQoyMDAzLE5ZTixOTCx3aWdnaXR5MDEsMzAyNTAwDQoyMDAzLE5ZTixOTCxjZXJkYWphMDEsMzAwMDAwDQoyMDAzLE5ZTixOTCxwaGlsbGphMDQsMzAwMDAwDQoyMDAzLE5ZTixOTCxzZW9qYTAxLDMwMDAwMA0KMjAwMyxQSEksTkwsdGhvbWVqaTAxLDExMTY2NjY3DQoyMDAzLFBISSxOTCxtaWxsd2tlMDEsOTkwMDAwMA0KMjAwMyxQSEksTkwsYWJyZXVibzAxLDkxMDAwMDANCjIwMDMsUEhJLE5MLGxpZWJlbWkwMSw3MjUwMDAwDQoyMDAzLFBISSxOTCxtZXNham8wMSw1MjAwMDAwDQoyMDAzLFBISSxOTCx3ZW5kZXR1MDEsMzM1MDAwMA0KMjAwMyxQSEksTkwsYmVsbGRhMDEsMzIwMDAwMA0KMjAwMyxQSEksTkwsY29ybWlyaDAxLDI5ODMzMzMNCjIwMDMsUEhJLE5MLGFkYW1zdGUwMSwyOTAwMDAwDQoyMDAzLFBISSxOTCxwb2xhbnBsMDEsMjg3NTAwMA0KMjAwMyxQSEksTkwsd29sZnJhMDIsMjM3NTAwMA0KMjAwMyxQSEksTkwscGxlc2FkYTAxLDIwMDAwMDANCjIwMDMsUEhJLE5MLGJ1cnJlcGEwMSwxMjUwMDAwDQoyMDAzLFBISSxOTCxob3VzdHR5MDEsMTAwMDAwMA0KMjAwMyxQSEksTkwsbGVkZWVyaTAxLDg1MDAwMA0KMjAwMyxQSEksTkwscHJhdHR0bzAyLDg1MDAwMA0KMjAwMyxQSEksTkwscGVyZXp0bzAzLDU1MDAwMA0KMjAwMyxQSEksTkwscm9sbGlqaTAxLDQ1MDAwMA0KMjAwMyxQSEksTkwscGFkaWx2aTAxLDQyNTAwMA0KMjAwMyxQSEksTkwsbWVyY2FoZTAxLDMzMDAwMA0KMjAwMyxQSEksTkwsZHVja3dicjAxLDMyNTAwMA0KMjAwMyxQSEksTkwsY29nZ2lkYTAxLDMyMDAwMA0KMjAwMyxQSEksTkwscm9ham8wMSwzMTUwMDANCjIwMDMsUEhJLE5MLHNpbHZhY2EwMSwzMTAwMDANCjIwMDMsUEhJLE5MLG1pY2hhamEwMSwzMDUwMDANCjIwMDMsUEhJLE5MLGJ5cmRtYTAxLDMwMDAwMA0KMjAwMyxQSEksTkwsbXllcnNicjAxLDMwMDAwMA0KMjAwMyxQSEksTkwscHVudG9uaTAxLDMwMDAwMA0KMjAwMyxQSEksTkwsdXRsZXljaDAxLDMwMDAwMA0KMjAwMyxQSVQsTkwsZ2lsZXNicjAyLDg4MzMzMzMNCjIwMDMsUElULE5MLGtlbmRhamEwMSw4NTcxNDI5DQoyMDAzLFBJVCxOTCx5b3VuZ2tlMDEsNjYyNTAwMA0KMjAwMyxQSVQsTkwsYmVuc29rcjAxLDQzMDAwMDANCjIwMDMsUElULE5MLG1lYXJlcGEwMSwzNzkwMDAwDQoyMDAzLFBJVCxOTCx3aWxsaW1pMDMsMzUwMDAwMA0KMjAwMyxQSVQsTkwscmFtaXJhcjAxLDMwMDAwMDANCjIwMDMsUElULE5MLHJlZXNlcG8wMSwyNTAwMDAwDQoyMDAzLFBJVCxOTCxzYXVlcnNjMDEsMTU2NjY2Nw0KMjAwMyxQSVQsTkwsYm9laHJicjAxLDE1MDAwMDANCjIwMDMsUElULE5MLHNpbW9ucmEwMSwxNDc1MDAwDQoyMDAzLFBJVCxOTCxsb2Z0b2tlMDEsMTAyNTAwMA0KMjAwMyxQSVQsTkwsc2FuZGVyZTAyLDEwMDAwMDANCjIwMDMsUElULE5MLHN0YWlybWEwMSw5MDAwMDANCjIwMDMsUElULE5MLGRhbWljamUwMSw3NTAwMDANCjIwMDMsUElULE5MLHRhdmFyanUwMSw3NTAwMDANCjIwMDMsUElULE5MLG51bmV6YWIwMSw2NzUwMDANCjIwMDMsUElULE5MLHJleWVzZGUwMSw2MDAwMDANCjIwMDMsUElULE5MLHN1cHBhamUwMSw1MDAwMDANCjIwMDMsUElULE5MLHdlbGxza2kwMSwzNzAwMDANCjIwMDMsUElULE5MLHdpbHNvamEwMiwzMzUwMDANCjIwMDMsUElULE5MLHdpbHNvY3IwMywzMjcwMDANCjIwMDMsUElULE5MLHRvcnJlc2EwMSwzMjUwMDANCjIwMDMsUElULE5MLGJlaW1lam8wMSwzMjIwMDANCjIwMDMsUElULE5MLGZvZ2dqbzAxLDMyMjAwMA0KMjAwMyxQSVQsTkwsbWFja29ybzAxLDMyMjAwMA0KMjAwMyxQSVQsTkwsbGluY29taTAxLDMxNTUwMA0KMjAwMyxQSVQsTkwsd2lsbGlkYTA3LDMxMjUwMA0KMjAwMyxTRE4sTkwsaG9mZm10cjAxLDk2MDAwMDANCjIwMDMsU0ROLE5MLGtsZXNrcnkwMSw1NTAwMDAwDQoyMDAzLFNETixOTCx3aGl0ZXJvMDIsNTUwMDAwMA0KMjAwMyxTRE4sTkwsbmV2aW5waDAxLDUwMDAwMDANCjIwMDMsU0ROLE5MLGtvdHNhbWEwMSw0NDUwMDAwDQoyMDAzLFNETixOTCxqYXJ2aWtlMDEsMzAwMDAwMA0KMjAwMyxTRE4sTkwsbG9yZXRtYTAxLDEyNTAwMDANCjIwMDMsU0ROLE5MLG9yb3NjamUwMSw4MDAwMDANCjIwMDMsU0ROLE5MLG5hZHl4YTAxLDc1MDAwMA0KMjAwMyxTRE4sTkwsd2l0YXNqYTAxLDc1MDAwMA0KMjAwMyxTRE4sTkwsd3JpZ2hqYTAyLDcyNTAwMA0KMjAwMyxTRE4sTkwsYmVubmVnYTAxLDcwMDAwMA0KMjAwMyxTRE4sTkwsZ29uemF3aTAxLDcwMDAwMA0KMjAwMyxTRE4sTkwsbGF3cmVicjAyLDYyNTAwMA0KMjAwMyxTRE4sTkwsbWVybG9sbzAxLDU2MDAwMA0KMjAwMyxTRE4sTkwsaGFuc2VkYTAxLDU1MDAwMA0KMjAwMyxTRE4sTkwsbG9ja2hrZTAxLDUwMDAwMA0KMjAwMyxTRE4sTkwsd2Fsa2VrZTAxLDQ1MDAwMA0KMjAwMyxTRE4sTkwsZWF0b25hZDAxLDM1MDAwMA0KMjAwMyxTRE4sTkwsbWF0dGhtaTAxLDM1MDAwMA0KMjAwMyxTRE4sTkwsaGFja21sdTAxLDM0NTAwMA0KMjAwMyxTRE4sTkwsYnVjaGFicjAxLDMyNTAwMA0KMjAwMyxTRE4sTkwsdmF6cXVyYTAxLDMxNTAwMA0KMjAwMyxTRE4sTkwscGVhdnlqYTAxLDMwNTAwMA0KMjAwMyxTRE4sTkwscGVyZXpvbDAxLDMwNTAwMA0KMjAwMyxTRE4sTkwsYnVycm9zZTAxLDMwMjAwMA0KMjAwMyxTRE4sTkwsdmlsbGFicjAxLDMwMjAwMA0KMjAwMyxTRE4sTkwsYnludW1taTAxLDMwMDUwMA0KMjAwMyxTRE4sTkwsY29uZHJjbDAxLDMwMDUwMA0KMjAwMyxTRE4sTkwsdmljdG9zaDAxLDMwMDAwMA0KMjAwMyxTRk4sTkwsYm9uZHNiYTAxLDE1NTAwMDAwDQoyMDAzLFNGTixOTCxuZW5ybzAxLDg3NTAwMDANCjIwMDMsU0ZOLE5MLHNub3dqdDAxLDY4NTAwMDANCjIwMDMsU0ZOLE5MLGF1cmlscmkwMSw2MjUwMDAwDQoyMDAzLFNGTixOTCxzY2htaWphMDEsNTkzNzUwMA0KMjAwMyxTRk4sTkwscnVldGVraTAxLDU4NjY2NjcNCjIwMDMsU0ZOLE5MLGR1cmhhcmEwMSw1MjAwMDAwDQoyMDAzLFNGTixOTCxiZW5hcm1hMDEsNDIwMDAwMA0KMjAwMyxTRk4sTkwsYWxmb25lZDAxLDQwMDAwMDANCjIwMDMsU0ZOLE5MLHJvZHJpZmUwMSwzMTY2NjY3DQoyMDAzLFNGTixOTCxjcnV6am8wMiwyNTAwMDAwDQoyMDAzLFNGTixOTCxjaHJpc2phMDEsMjMzMzMzMw0KMjAwMyxTRk4sTkwsd29ycmV0aTAxLDIwMDAwMDANCjIwMDMsU0ZOLE5MLGdyaXNzbWEwMiwxODc1MDAwDQoyMDAzLFNGTixOTCxzYW50aWJlMDEsMTc3NTAwMA0KMjAwMyxTRk4sTkwsbW9zc2RhMDEsMTU1MDAwMA0KMjAwMyxTRk4sTkwscGVyZXpuZTAxLDE1MDAwMDANCjIwMDMsU0ZOLE5MLGV5cmVzYzAxLDcyNTAwMA0KMjAwMyxTRk4sTkwsZ2FsYXJhbjAxLDUwMDAwMA0KMjAwMyxTRk4sTkwscml2ZXJydTAxLDUwMDAwMA0KMjAwMyxTRk4sTkwsZmVsaXpwZTAxLDMyNTAwMA0KMjAwMyxTRk4sTkwsamVuc2VyeTAxLDMxNzAwMA0KMjAwMyxTRk4sTkwsemVyYmVjaDAxLDMxNzAwMA0KMjAwMyxTRk4sTkwsdG9ycmV5bzAxLDMxMjAwMA0KMjAwMyxTRk4sTkwsYWluc3drdTAxLDMwMjAwMA0KMjAwMyxTRk4sTkwsbmF0aGFqbzAxLDMwMDAwMA0KMjAwMyxTTE4sTkwsbW9ycmltYTAxLDEwNTAwMDAwDQoyMDAzLFNMTixOTCxlZG1vbmppMDEsODMzMzMzMw0KMjAwMyxTTE4sTkwscm9sZW5zYzAxLDc2MjUwMDANCjIwMDMsU0xOLE5MLG1hcnRpdGkwMiw3NTAwMDAwDQoyMDAzLFNMTixOTCxpc3JpbmphMDEsNzI1MDAwMA0KMjAwMyxTTE4sTkwscmVudGVlZDAxLDY1MDAwMDANCjIwMDMsU0xOLE5MLHdpbGxpd28wMiw2MDAwMDAwDQoyMDAzLFNMTixOTCx2aW5hZmUwMSw1MzMzMzMzDQoyMDAzLFNMTixOTCxkcmV3amQwMSwzNzAwMDAwDQoyMDAzLFNMTixOTCx0b21rb2JyMDEsMzMwMDAwMA0KMjAwMyxTTE4sTkwsbWF0aGVtaTAxLDMyNTAwMDANCjIwMDMsU0xOLE5MLGtsaW5lc3QwMiwxODAwMDAwDQoyMDAzLFNMTixOTCxtYXJyZWVsMDEsMTUwMDAwMA0KMjAwMyxTTE4sTkwsZmFzc2VqZTAxLDEyNTAwMDANCjIwMDMsU0xOLE5MLHRhZ3Vjc28wMSwxMjAwMDAwDQoyMDAzLFNMTixOTCxoZXJtYWR1MDEsOTAwMDAwDQoyMDAzLFNMTixOTCxwdWpvbGFsMDEsOTAwMDAwDQoyMDAzLFNMTixOTCxjYWlyb21pMDEsODUwMDAwDQoyMDAzLFNMTixOTCxzdGVwaGdhMDEsODAwMDAwDQoyMDAzLFNMTixOTCxnaXJhcmpvMDEsNzI1MDAwDQoyMDAzLFNMTixOTCxwYWxtZW9yMDEsNzAwMDAwDQoyMDAzLFNMTixOTCxwYWludGxhMDEsNTc1MDAwDQoyMDAzLFNMTixOTCxlbGRyZWNhMDEsNTAwMDAwDQoyMDAzLFNMTixOTCxwZXJlemVkMDEsNTAwMDAwDQoyMDAzLFNMTixOTCxzcHJpbnJ1MDEsNDUwMDAwDQoyMDAzLFNMTixOTCxyb2JpbmtlMDIsMzIwMDAwDQoyMDAzLFNMTixOTCxzaW1vbmphMDEsMzE1MDAwDQoyMDAzLFNMTixOTCxkZWxnYXdpMDEsMzA1MDAwDQoyMDAzLFNMTixOTCxzdGVjaGdlMDEsMzA1MDAwDQoyMDAzLFNMTixOTCxjYXJwZWNoMDEsMzAwMDAwDQoyMDAzLFNMTixOTCx0b3JyZXN0MDEsMzAwMDAwDQoyMDA0LEFOQSxBTCxjb2xvbmJhMDEsMTEwMDAwMDANCjIwMDQsQU5BLEFMLGd1ZXJydmwwMSwxMTAwMDAwMA0KMjAwNCxBTkEsQUwsZ2xhdXN0cjAxLDk5MDAwMDANCjIwMDQsQU5BLEFMLHNhbG1vdGkwMSw5OTAwMDAwDQoyMDA0LEFOQSxBTCxzZWxlYWEwMSw4NjY2NjY3DQoyMDA0LEFOQSxBTCxwZXJjaXRyMDEsNzgzMzMzMw0KMjAwNCxBTkEsQUwsZXJzdGFkYTAxLDc3NTAwMDANCjIwMDQsQU5BLEFMLGFuZGVyZ2EwMSw2MjAwMDAwDQoyMDA0LEFOQSxBTCxlc2NvYmtlMDEsNTc1MDAwMA0KMjAwNCxBTkEsQUwsd2FzaGJqYTAxLDU0NTAwMDANCjIwMDQsQU5BLEFMLG9ydGl6cmEwMSwzMjY2NjY3DQoyMDA0LEFOQSxBTCxrZW5uZWFkMDEsMjUwMDAwMA0KMjAwNCxBTkEsQUwsZ3VpbGxqbzAxLDIyMDAwMDANCjIwMDQsQU5BLEFMLGVja3N0ZGEwMSwyMTUwMDAwDQoyMDA0LEFOQSxBTCxtb2xpbmJlMDEsMjAyNTAwMA0KMjAwNCxBTkEsQUwsd2ViZXJiZTAxLDkwMDAwMA0KMjAwNCxBTkEsQUwsaGFsdGVzaDAxLDU3NTAwMA0KMjAwNCxBTkEsQUwsZGF2YW5qZTAyLDM3NTAwMA0KMjAwNCxBTkEsQUwsZG9ubmVicjAxLDM3NTAwMA0KMjAwNCxBTkEsQUwsbGFja2VqbzAxLDM3NTAwMA0KMjAwNCxBTkEsQUwscm9kcmlmcjAzLDM3NTAwMA0KMjAwNCxBTkEsQUwsc2hpZWxzYzAxLDM3NTAwMA0KMjAwNCxBTkEsQUwsbW9saW5qbzAxLDMzNTAwMA0KMjAwNCxBTkEsQUwscGF1bGpvMDEsMzM1MDAwDQoyMDA0LEFOQSxBTCxmaWdnaWNoMDEsMzIwMDAwDQoyMDA0LEFOQSxBTCxncmVnZ2tlMDEsMzAxNTAwDQoyMDA0LEFOQSxBTCxqb25lc2dyMDEsMzAxNTAwDQoyMDA0LEJBTCxBTCxzZWd1aWRhMDEsNzAwMDAwMA0KMjAwNCxCQUwsQUwsbG9wZXpqYTAxLDYwMDAwMDANCjIwMDQsQkFMLEFMLHRlamFkbWkwMSw1MDAwMDAwDQoyMDA0LEJBTCxBTCxkYWFsb20wMSw0NTAwMDAwDQoyMDA0LEJBTCxBTCxwYWxtZXJhMDEsNDAwMDAwMA0KMjAwNCxCQUwsQUwsY29yZG9tYTAxLDM1MDAwMDANCjIwMDQsQkFMLEFMLGdyb29tYnUwMSwzMDAwMDAwDQoyMDA0LEJBTCxBTCxwb25zb3NpMDEsMzAwMDAwMA0KMjAwNCxCQUwsQUwsZ2liYm9qYTAxLDI2MDAwMDANCjIwMDQsQkFMLEFMLG1vcmFtZTAxLDIzMzMzMzMNCjIwMDQsQkFMLEFMLGhhaXJzamUwMiwxNjUwMDAwDQoyMDA0LEJBTCxBTCxkZWplYW1pMDEsMTUwMDAwMA0KMjAwNCxCQUwsQUwscnlhbmJqMDEsMTI3NTAwMA0KMjAwNCxCQUwsQUwsbWF0b3NsdTAxLDk3NTAwMA0KMjAwNCxCQUwsQUwsc3VyaG9iajAxLDgwMDAwMA0KMjAwNCxCQUwsQUwsb3Npa2tlMDEsNTAwMDAwDQoyMDA0LEJBTCxBTCxqdWxpb2pvMDEsMzg1MDAwDQoyMDA0LEJBTCxBTCxsb3Blemx1MDIsMzY1MDAwDQoyMDA0LEJBTCxBTCxsb3BlenJvMDEsMzY1MDAwDQoyMDA0LEJBTCxBTCxyb2JlcmJyMDEsMzQ1MDAwDQoyMDA0LEJBTCxBTCxiaWdiaWxhMDEsMzQwMDAwDQoyMDA0LEJBTCxBTCxiYXVlcnJpMDEsMzM1MDAwDQoyMDA0LEJBTCxBTCxwYXJyaWpvMDEsMzIwMDAwDQoyMDA0LEJBTCxBTCxhaW5zd2t1MDEsMzE1MDAwDQoyMDA0LEJBTCxBTCxyaWxleW1hMDEsMzEwMDAwDQoyMDA0LEJBTCxBTCxjdXN0amEwMSwzMDUwMDANCjIwMDQsQkFMLEFMLGR1Ym9zZXIwMSwzMDUwMDANCjIwMDQsQkFMLEFMLGJhdXRpam8wMiwzMDAwMDANCjIwMDQsQk9TLEFMLHJhbWlybWEwMiwyMjUwMDAwMA0KMjAwNCxCT1MsQUwsbWFydGlwZTAyLDE3NTAwMDAwDQoyMDA0LEJPUyxBTCxzY2hpbGN1MDEsMTIwMDAwMDANCjIwMDQsQk9TLEFMLGdhcmNpbm8wMSwxMTUwMDAwMA0KMjAwNCxCT1MsQUwsZGFtb25qbzAxLDgwMDAwMDANCjIwMDQsQk9TLEFMLHZhcml0amEwMSw2OTAwMDAwDQoyMDA0LEJPUyxBTCxvcnRpemRhMDEsNDU4NzUwMA0KMjAwNCxCT1MsQUwsbG93ZWRlMDEsNDUwMDAwMA0KMjAwNCxCT1MsQUwsbml4b250cjAxLDQ1MDAwMDANCjIwMDQsQk9TLEFMLHdha2VmdGkwMSw0MzUwMDAwDQoyMDA0LEJPUyxBTCxtZW5kb3JhMDEsMzYwMDAwMA0KMjAwNCxCT1MsQUwsZm91bGtrZTAxLDM1MDAwMDANCjIwMDQsQk9TLEFMLGtpbWJ5MDEsMzQyNTAwMA0KMjAwNCxCT1MsQUwsbWlsbGFrZTAxLDMzMDAwMDANCjIwMDQsQk9TLEFMLHdpbGxpc2MwMSwzMTc1MDAwDQoyMDA0LEJPUyxBTCxlbWJyZWFsMDEsMzAwMDAwMA0KMjAwNCxCT1MsQUwsdGltbGltaTAxLDI1MDAwMDANCjIwMDQsQk9TLEFMLG11ZWxsYmkwMiwyMTAwMDAwDQoyMDA0LEJPUyxBTCxyZWVzZXBvMDEsMTAwMDAwMA0KMjAwNCxCT1MsQUwsbWlyYWJkbzAxLDgyNTAwMA0KMjAwNCxCT1MsQUwsYnVya3NlbDAxLDc1MDAwMA0KMjAwNCxCT1MsQUwsa2FwbGVnYTAxLDc1MDAwMA0KMjAwNCxCT1MsQUwsZGF1YmFicjAxLDUwMDAwMA0KMjAwNCxCT1MsQUwsbWNjYXJkYTAxLDUwMDAwMA0KMjAwNCxCT1MsQUwsYmVsbGhtYTAxLDQ5MDAwMA0KMjAwNCxCT1MsQUwsYXJyb3licjAxLDMzMjUwMA0KMjAwNCxCT1MsQUwsY3Jlc3BjZTAxLDMwOTAwMA0KMjAwNCxCT1MsQUwsc2hpZWxqYTAxLDMwMzAwMA0KMjAwNCxCT1MsQUwsZ2FyY2lyZTAxLDMwMTUwMA0KMjAwNCxCT1MsQUwsZGluYXJsZTAxLDMwMDAwMA0KMjAwNCxDSEEsQUwsb3Jkb25tYTAxLDE0MDAwMDAwDQoyMDA0LENIQSxBTCxrb25lcnBhMDEsODAwMDAwMA0KMjAwNCxDSEEsQUwsbGVlY2EwMSw2NTAwMDAwDQoyMDA0LENIQSxBTCxrb2NoYmkwMSw2Mzc1MDAwDQoyMDA0LENIQSxBTCx0aG9tYWZyMDQsNjAwMDAwMA0KMjAwNCxDSEEsQUwsdmFsZW5qbzAzLDUwMDAwMDANCjIwMDQsQ0hBLEFMLGxvYWl6ZXMwMSw0MDAwMDAwDQoyMDA0LENIQSxBTCxidWVocm1hMDEsMzUwMDAwMA0KMjAwNCxDSEEsQUwsZ2FybGFqbzAxLDIzMDAwMDANCjIwMDQsQ0hBLEFMLHNjaG9lc2MwMSwxNzI1MDAwDQoyMDA0LENIQSxBTCxwZXJlenRpMDEsODUwMDAwDQoyMDA0LENIQSxBTCxwb2xpdGNsMDEsODAwMDAwDQoyMDA0LENIQSxBTCx3dW5zY2tlMDEsODAwMDAwDQoyMDA0LENIQSxBTCx0YWthdHNoMDEsNzUwMDAwDQoyMDA0LENIQSxBTCxhbG9tYXNhMDIsNzAwMDAwDQoyMDA0LENIQSxBTCxqYWNrc21pMDIsNTAwMDAwDQoyMDA0LENIQSxBTCxtYXJ0ZWRhMDEsNTAwMDAwDQoyMDA0LENIQSxBTCx1cmliZWp1MDEsMzUwMDAwDQoyMDA0LENIQSxBTCxjcmVkZWpvMDEsMzQwMDAwDQoyMDA0LENIQSxBTCxyb3dhbmFhMDEsMzQwMDAwDQoyMDA0LENIQSxBTCx3cmlnaGRhMDIsMzQwMDAwDQoyMDA0LENIQSxBTCxvbGl2b21pMDEsMzIwMDAwDQoyMDA0LENIQSxBTCxoYXJyaXdpMDEsMzE4NTAwDQoyMDA0LENIQSxBTCxnbG9hZHJvMDEsMzAyMDAwDQoyMDA0LENIQSxBTCxhZGtpbmpvMDEsMzAxMDAwDQoyMDA0LENIQSxBTCxjb3R0c25lMDEsMzAxMDAwDQoyMDA0LENMRSxBTCxsYXd0b21hMDIsNzI1MDAwMA0KMjAwNCxDTEUsQUwsdml6cXVvbTAxLDYwMDAwMDANCjIwMDQsQ0xFLEFMLHdpY2ttYm8wMSw2MDAwMDAwDQoyMDA0LENMRSxBTCxzYWJhdGNjMDEsMjcwMDAwMA0KMjAwNCxDTEUsQUwsYmVsbGlybzAxLDExMDAwMDANCjIwMDQsQ0xFLEFMLGppbWVuam8wMSwxMDI1MDAwDQoyMDA0LENMRSxBTCxyaXNrZWRhMDEsMTAyNTAwMA0KMjAwNCxDTEUsQUwsd2VzdGJqYTAxLDkyNTAwMA0KMjAwNCxDTEUsQUwsc3Rld2FzYzAxLDg1MDAwMA0KMjAwNCxDTEUsQUwsZGFtaWNqZTAxLDc1MDAwMA0KMjAwNCxDTEUsQUwsbWVybG9sbzAxLDU2MDAwMA0KMjAwNCxDTEUsQUwsbGFrZXJ0aTAxLDQ1MDAwMA0KMjAwNCxDTEUsQUwsYmxha2VjYTAxLDM1MjQwMA0KMjAwNCxDTEUsQUwsZGF2aXNqYTAyLDMyNjgwMA0KMjAwNCxDTEUsQUwsZ2VydXRqbzAxLDMyNTYwMA0KMjAwNCxDTEUsQUwsbWNkb25qbzAzLDMyNDQwMA0KMjAwNCxDTEUsQUwsYnJvdXNiZTAxLDMyNDEwMA0KMjAwNCxDTEUsQUwsY3Jlc3NqYTAxLDMyMjQwMA0KMjAwNCxDTEUsQUwsY3Jpc3BjbzAxLDMxOTQwMA0KMjAwNCxDTEUsQUwsdHJhYmViaTAxLDMxNzUwMA0KMjAwNCxDTEUsQUwsYmFyZGpvMDEsMzE2NzAwDQoyMDA0LENMRSxBTCxoYWZuZXRyMDEsMzE2MzAwDQoyMDA0LENMRSxBTCxkdXJiaWNoMDEsMzE1MDAwDQoyMDA0LENMRSxBTCxiZXRhbnJhMDEsMzA1MjAwDQoyMDA0LENMRSxBTCxsdWR3aXJ5MDEsMzA0NzAwDQoyMDA0LENMRSxBTCxtYXJ0aXZpMDEsMzA0NTAwDQoyMDA0LENMRSxBTCxsZWVjbDAyLDMwMzIwMA0KMjAwNCxDTEUsQUwsc3RhbmZqYTAxLDMwMjkwMA0KMjAwNCxDTEUsQUwsZXNjb2JhbDAxLDMwMjIwMA0KMjAwNCxDTEUsQUwsdGFsbGVicjAxLDMwMTAwMA0KMjAwNCxERVQsQUwsaGlnZ2libzAyLDg4NTAwMDANCjIwMDQsREVULEFMLHlvdW5nZG0wMSw3NzUwMDAwDQoyMDA0LERFVCxBTCxyb2RyaWl2MDEsNzAwMDAwMA0KMjAwNCxERVQsQUwsam9obnNqYTAyLDMwMDAwMDANCjIwMDQsREVULEFMLHZpbmFmZTAxLDMwMDAwMDANCjIwMDQsREVULEFMLHBhdHRlZGEwNCwyODAwMDAwDQoyMDA0LERFVCxBTCx3aGl0ZXJvMDIsMjc1MDAwMA0KMjAwNCxERVQsQUwsZ3VpbGxjYTAxLDI1MDAwMDANCjIwMDQsREVULEFMLG11bnNvZXIwMSwxNDg3NTAwDQoyMDA0LERFVCxBTCxsZXZpbmFsMDEsODI1MDAwDQoyMDA0LERFVCxBTCx3YWxrZWphMDEsNzc1MDAwDQoyMDA0LERFVCxBTCx5YW5lczAxLDY1MDAwMA0KMjAwNCxERVQsQUwsbm9ydG9ncjAxLDYwMDAwMA0KMjAwNCxERVQsQUwsc2FuY2hhbDAzLDM4NTAwMA0KMjAwNCxERVQsQUwsaW5nZWJyMDEsMzQwMDAwDQoyMDA0LERFVCxBTCxjb3JuZW5hMDEsMzM1MDAwDQoyMDA0LERFVCxBTCxtb25yb2NyMDEsMzM1MDAwDQoyMDA0LERFVCxBTCxtYXJvdG1pMDEsMzMyNTAwDQoyMDA0LERFVCxBTCxib25kZWplMDEsMzMwMDAwDQoyMDA0LERFVCxBTCxwZW5hY2EwMSwzMzAwMDANCjIwMDQsREVULEFMLHNwdXJsY2gwMSwzMjUwMDANCjIwMDQsREVULEFMLGtub3R0Z2EwMSwzMTYwMDANCjIwMDQsREVULEFMLGluZmFub20wMSwzMDUwMDANCjIwMDQsREVULEFMLHJvYmVybmEwMSwzMDUwMDANCjIwMDQsREVULEFMLHJvZG5lZmUwMSwzMDQwMDANCjIwMDQsREVULEFMLGNvbHllc3QwMSwzMDIwMDANCjIwMDQsREVULEFMLHNoZWx0Y2gwMSwzMDAwMDANCjIwMDQsREVULEFMLHVyZGFubGkwMSwzMDAwMDANCjIwMDQsS0NBLEFMLHN3ZWVubWkwMSwxMTAwMDAwMA0KMjAwNCxLQ0EsQUwsYmVsdHJjYTAxLDkwMDAwMDANCjIwMDQsS0NBLEFMLGdvbnphanUwMyw0MDAwMDAwDQoyMDA0LEtDQSxBTCxhbmRlcmJyMDIsMzI1MDAwMA0KMjAwNCxLQ0EsQUwscmFuZGFqbzAxLDMyNTAwMDANCjIwMDQsS0NBLEFMLHNhbnRpYmUwMSwyMTUwMDAwDQoyMDA0LEtDQSxBTCxzdWxsaXNjMDEsMjEwMDAwMA0KMjAwNCxLQ0EsQUwsbWF5ZGEwMiwxNzUwMDAwDQoyMDA0LEtDQSxBTCxsZXNrYWN1MDEsMTI1MDAwMA0KMjAwNCxLQ0EsQUwsZ3JhZmZ0bzAxLDExMDAwMDANCjIwMDQsS0NBLEFMLGdyaW1zamEwMSwxMDAwMDAwDQoyMDA0LEtDQSxBTCxzdGFpcm1hMDEsMTAwMDAwMA0KMjAwNCxLQ0EsQUwscmVsYWZkZTAxLDkwMDAwMA0KMjAwNCxLQ0EsQUwscmV5ZXNkZTAxLDU1MDAwMA0KMjAwNCxLQ0EsQUwsc3Rpbm5rZTAxLDUwMDAwMA0KMjAwNCxLQ0EsQUwsYmVycm9hbjAxLDM3MjUwMA0KMjAwNCxLQ0EsQUwsYWZmZWxqZTAxLDM1MDAwMA0KMjAwNCxLQ0EsQUwsbWFjZG9taTAxLDM0NjUwMA0KMjAwNCxLQ0EsQUwsbG9wZXptZTAxLDMzMDAwMA0KMjAwNCxLQ0EsQUwsYXNlbmNtaTAxLDMyODUwMA0KMjAwNCxLQ0EsQUwsY2FycmFkajAxLDMyMDUwMA0KMjAwNCxLQ0EsQUwsZ3VpZWxhYTAxLDMyMDAwMA0KMjAwNCxLQ0EsQUwsaGFydmVrZTAxLDMxNzUwMA0KMjAwNCxLQ0EsQUwsc255ZGVreTAxLDMwNzUwMA0KMjAwNCxLQ0EsQUwsZmllbGRuYTAxLDMwNjUwMA0KMjAwNCxLQ0EsQUwsaGVybmFydTAzLDMwNTUwMA0KMjAwNCxLQ0EsQUwsZ29iYmxqaTAxLDMwNDAwMA0KMjAwNCxLQ0EsQUwsYXBwaWVrZTAxLDMwMDAwMA0KMjAwNCxLQ0EsQUwsY2FtcHNoMDEsMzAwMDAwDQoyMDA0LEtDQSxBTCx0aG9tcHJpMDIsMzAwMDAwDQoyMDA0LE1JTixBTCxyYWRrZWJyMDEsMTA3NTAwMDANCjIwMDQsTUlOLEFMLGh1bnRldG8wMSw2NTAwMDAwDQoyMDA0LE1JTixBTCxtYXlzam8wMSw1NzUwMDAwDQoyMDA0LE1JTixBTCxzdGV3YXNoMDEsNTUwMDAwMA0KMjAwNCxNSU4sQUwsa29za2ljbzAxLDQ1MDAwMDANCjIwMDQsTUlOLEFMLGpvbmVzamEwNCw0MzUwMDAwDQoyMDA0LE1JTixBTCxndXptYWNyMDEsMzcyNTAwMA0KMjAwNCxNSU4sQUwsbWllbnRkbzAxLDI4MDAwMDANCjIwMDQsTUlOLEFMLHNhbnRham8wMSwxNjAwMDAwDQoyMDA0LE1JTixBTCxyaXZhc2x1MDEsMTUwMDAwMA0KMjAwNCxNSU4sQUwscm9tZXJqYzAxLDgyMDAwMA0KMjAwNCxNSU4sQUwsYmxhbmNoZTAxLDc1MDAwMA0KMjAwNCxNSU4sQUwsZnVsdHphYTAxLDU1MDAwMA0KMjAwNCxNSU4sQUwsb2ZmZXJqbzAxLDUwMDAwMA0KMjAwNCxNSU4sQUwsbmF0aGFqbzAxLDQ0MDAwMA0KMjAwNCxNSU4sQUwsbG9oc2VreTAxLDM5NTAwMA0KMjAwNCxNSU4sQUwsbGVjcm9tYTAxLDM0MDAwMA0KMjAwNCxNSU4sQUwsc2lsdmFjYTAxLDM0MDAwMA0KMjAwNCxNSU4sQUwscmluY29qdTAxLDMzMDAwMA0KMjAwNCxNSU4sQUwscm9ham8wMSwzMjAwMDANCjIwMDQsTUlOLEFMLGN1ZGR5bWkwMSwzMDc1MDANCjIwMDQsTUlOLEFMLHB1bnRvbmkwMSwzMDc1MDANCjIwMDQsTUlOLEFMLHB1bGlkY2EwMSwzMDUwMDANCjIwMDQsTUlOLEFMLHJ5YW5taTAzLDMwNTAwMA0KMjAwNCxNSU4sQUwsbWF1ZXJqbzAxLDMwMDAwMA0KMjAwNCxNSU4sQUwsdGhvbWFicjAxLDMwMDAwMA0KMjAwNCxOWUEsQUwscm9kcmlhbDAxLDIyMDAwMDAwDQoyMDA0LE5ZQSxBTCxqZXRlcmRlMDEsMTg2MDAwMDANCjIwMDQsTllBLEFMLG11c3NpbWkwMSwxNjAwMDAwMA0KMjAwNCxOWUEsQUwsYnJvd25rZTAxLDE1NzE0Mjg2DQoyMDA0LE5ZQSxBTCxzaGVmZmdhMDEsMTMwMDAwMDANCjIwMDQsTllBLEFMLGdpYW1iamEwMSwxMjQyODU3MQ0KMjAwNCxOWUEsQUwsd2lsbGliZTAyLDEyMzU3MTQzDQoyMDA0LE5ZQSxBTCxyaXZlcm1hMDEsMTA4OTAwMDANCjIwMDQsTllBLEFMLHBvc2Fkam8wMSw5MDAwMDAwDQoyMDA0LE5ZQSxBTCx2YXpxdWphMDEsOTAwMDAwMA0KMjAwNCxOWUEsQUwsY29udHJqbzAxLDg1MDAwMDANCjIwMDQsTllBLEFMLG1hdHN1aGkwMSw3MDAwMDAwDQoyMDA0LE5ZQSxBTCxrYXJzYXN0MDEsNjAwMDAwMA0KMjAwNCxOWUEsQUwsZ29yZG90bzAxLDM1MDAwMDANCjIwMDQsTllBLEFMLGxvZnRva2UwMSwzMTAwMDAwDQoyMDA0LE5ZQSxBTCxxdWFudHBhMDEsMzAwMDAwMA0KMjAwNCxOWUEsQUwsbGllYmVqbzAxLDI3MDAwMDANCjIwMDQsTllBLEFMLGxlZXRyMDEsMjAwMDAwMA0KMjAwNCxOWUEsQUwsd2hpdGVnYTAxLDE5MjUwMDANCjIwMDQsTllBLEFMLGhlcmVkZmUwMSwxODAwMDAwDQoyMDA0LE5ZQSxBTCxzaWVycnJ1MDEsMTAwMDAwMA0KMjAwNCxOWUEsQUwsY2Fpcm9taTAxLDkwMDAwMA0KMjAwNCxOWUEsQUwsZmxhaGVqbzAxLDc3NTAwMA0KMjAwNCxOWUEsQUwsY2xhcmt0bzAyLDc1MDAwMA0KMjAwNCxOWUEsQUwsd2lsc29lbjAxLDcwMDAwMA0KMjAwNCxOWUEsQUwsaGVybmFvcjAxLDUwMDAwMA0KMjAwNCxOWUEsQUwsb3Nib3JkbzAxLDQ1MDAwMA0KMjAwNCxOWUEsQUwsZGVwYXVqbzAxLDMwMjU1MA0KMjAwNCxOWUEsQUwsY3Jvc2JidTAxLDMwMTQwMA0KMjAwNCxPQUssQUwsZHllamUwMSwxMTY2NjY2Nw0KMjAwNCxPQUssQUwsa290c2FtYTAxLDU1MDAwMDANCjIwMDQsT0FLLEFMLGNoYXZlZXIwMSw1MzI1MDAwDQoyMDA0LE9BSyxBTCxodWRzb3RpMDEsNTAwMDAwMA0KMjAwNCxPQUssQUwsbXVsZGVtYTAxLDQ0NTAwMDANCjIwMDQsT0FLLEFMLG1lY2lyamkwMSwzMzAwMDAwDQoyMDA0LE9BSyxBTCxtaWxsZWRhMDIsMzAwMDAwMA0KMjAwNCxPQUssQUwseml0b2JhMDEsMzAwMDAwMA0KMjAwNCxPQUssQUwsaGFtbW9jaDAxLDI0MDAwMDANCjIwMDQsT0FLLEFMLGhhdHRlc2MwMSwyMzAwMDAwDQoyMDA0LE9BSyxBTCxkdXJhemVyMDEsMjEwMDAwMA0KMjAwNCxPQUssQUwscmVkbWFtYTAxLDIwMDAwMDANCjIwMDQsT0FLLEFMLHJob2RlYXIwMSwxODAwMDAwDQoyMDA0LE9BSyxBTCxyaW5jb3JpMDEsMTc1MDAwMA0KMjAwNCxPQUssQUwsYnJhZGZjaDAxLDk2NTAwMA0KMjAwNCxPQUssQUwsbWNsZW1tYTAxLDYwMDAwMA0KMjAwNCxPQUssQUwsa2Fycm9lcjAxLDU1MDAwMA0KMjAwNCxPQUssQUwsbWNtaWxiaTAxLDQ1MDAwMA0KMjAwNCxPQUssQUwsbWVuZWNmcjAxLDQwMDAwMA0KMjAwNCxPQUssQUwsbWVsaHVhZDAxLDM1NzUwMA0KMjAwNCxPQUssQUwsa2llbHRibzAxLDM0NzUwMA0KMjAwNCxPQUssQUwsYnlybmVlcjAxLDMyODAwMA0KMjAwNCxPQUssQUwsZWxsaXNtYTAxLDMyMzUwMA0KMjAwNCxPQUssQUwsaGFydmljaDAxLDMwNzAwMA0KMjAwNCxPQUssQUwsZHVjaHNqdTAxLDMwMjUwMA0KMjAwNCxPQUssQUwsc2N1dGFtYTAxLDMwMTUwMA0KMjAwNCxPQUssQUwsZ2VybWFlczAxLDMwMTAwMA0KMjAwNCxPQUssQUwsY3Jvc2JibzAxLDMwMDUwMA0KMjAwNCxTRUEsQUwsYm9vbmVicjAxLDgwMDAwMDANCjIwMDQsU0VBLEFMLG9sZXJ1am8wMSw3NzAwMDAwDQoyMDA0LFNFQSxBTCxtb3llcmphMDEsNzAwMDAwMA0KMjAwNCxTRUEsQUwsZ2FyY2lmcjAyLDY4NzUwMDANCjIwMDQsU0VBLEFMLHN1enVraWMwMSw2NTAwMDAwDQoyMDA0LFNFQSxBTCxqYXJ2aWtlMDEsNDI1MDAwMA0KMjAwNCxTRUEsQUwsZ3VhcmRlZDAxLDQwMDAwMDANCjIwMDQsU0VBLEFMLGliYW5lcmEwMSwzOTE2NjY3DQoyMDA0LFNFQSxBTCx3aWxzb2RhMDEsMzUwMDAwMA0KMjAwNCxTRUEsQUwsd2lubnJhMDEsMzUwMDAwMA0KMjAwNCxTRUEsQUwsYXVyaWxyaTAxLDMxNTAwMDANCjIwMDQsU0VBLEFMLG1hcnRpZWQwMSwzMDAwMDAwDQoyMDA0LFNFQSxBTCxwaW5laWpvMDEsMzAwMDAwMA0KMjAwNCxTRUEsQUwsaGFzZWdzaDAxLDI3NTAwMDANCjIwMDQsU0VBLEFMLHNwaWV6c2MwMSwyNTY2NjY3DQoyMDA0LFNFQSxBTCxtZWNoZWdpMDEsMTk1MDAwMA0KMjAwNCxTRUEsQUwsZnJhbmtyeTAxLDE4MDAwMDANCjIwMDQsU0VBLEFMLG1jY3JhcXUwMSwxNzUwMDAwDQoyMDA0LFNFQSxBTCxkYXZpc2JlMDEsMTQwMDAwMA0KMjAwNCxTRUEsQUwsY2FicmVqbzAyLDEwMDAwMDANCjIwMDQsU0VBLEFMLHZpbGxvcm8wMSwxMDAwMDAwDQoyMDA0LFNFQSxBTCxoYW5zZWRhMDEsNzUwMDAwDQoyMDA0LFNFQSxBTCxteWVyc21pMDEsNTUwMDAwDQoyMDA0LFNFQSxBTCxtYXRlb2p1MDEsMzQ1MDAwDQoyMDA0LFNFQSxBTCxzb3JpYXJhMDEsMzM1MDAwDQoyMDA0LFNFQSxBTCxibG9vbXdpMDEsMzI1MDAwDQoyMDA0LFNFQSxBTCx0YXlsb2FhMDEsMzAyNTAwDQoyMDA0LFNFQSxBTCxzbmVsbGNoMDIsMzAwMDAwDQoyMDA0LFRCQSxBTCxtYXJ0aXRpMDIsNzUwMDAwMA0KMjAwNCxUQkEsQUwsaHVmZmF1MDEsMjY2NjY2Nw0KMjAwNCxUQkEsQUwsY3J1empvMDIsMjUwMDAwMA0KMjAwNCxUQkEsQUwsYmFlemRhMDEsMTc1MDAwMA0KMjAwNCxUQkEsQUwsbHVnb2p1MDEsMTc1MDAwMA0KMjAwNCxUQkEsQUwsZ29uemFqZTAxLDE3MDAwMDANCjIwMDQsVEJBLEFMLGJsdW1nZTAxLDE1MDAwMDANCjIwMDQsVEJBLEFMLHNhbmNocmUwMSwxMDAwMDAwDQoyMDA0LFRCQSxBTCxtb3NzZGEwMSw4NTAwMDANCjIwMDQsVEJBLEFMLGZpY2tybzAxLDgwMDAwMA0KMjAwNCxUQkEsQUwscm9sbHNkYTAxLDgwMDAwMA0KMjAwNCxUQkEsQUwscGVyZXplZDAxLDc1MDAwMA0KMjAwNCxUQkEsQUwsZm9yZHlicjAxLDY1MDAwMA0KMjAwNCxUQkEsQUwsbWlsbGV0cjAyLDY1MDAwMA0KMjAwNCxUQkEsQUwsYWJib3RwYTAxLDYwMDAwMA0KMjAwNCxUQkEsQUwsaGFsYW1qbzAxLDYwMDAwMA0KMjAwNCxUQkEsQUwsZ2lwc29jaDAxLDM1MDAwMA0KMjAwNCxUQkEsQUwsemFtYnJ2aTAxLDMyNTAwMA0KMjAwNCxUQkEsQUwsYmFsZGVybzAxLDMyMDAwMA0KMjAwNCxUQkEsQUwsY2FydGVsYTAyLDMyMDAwMA0KMjAwNCxUQkEsQUwsY3Jhd2ZjYTAyLDMyMDAwMA0KMjAwNCxUQkEsQUwsaGFsbHRvMDIsMzIwMDAwDQoyMDA0LFRCQSxBTCxoZW5kcm1hMDEsMzE1MDAwDQoyMDA0LFRCQSxBTCxzb3Nham8wMiwzMTI1MDANCjIwMDQsVEJBLEFMLGdhdWRpY2gwMSwzMDI1MDANCjIwMDQsVEJBLEFMLG1jY2x1c2UwMSwzMDI1MDANCjIwMDQsVEJBLEFMLHN0YW5kamEwMSwzMDI1MDANCjIwMDQsVEVYLEFMLHBhcmtjaDAxLDE0MDAwMDAwDQoyMDA0LFRFWCxBTCxncmVlcnJ1MDEsNzQwMDAwMA0KMjAwNCxURVgsQUwsc29yaWFhbDAxLDU0MDAwMDANCjIwMDQsVEVYLEFMLHppbW1lamUwMiw0NDY2NjY3DQoyMDA0LFRFWCxBTCxwb3dlbGphMDQsMzUwMDAwMA0KMjAwNCxURVgsQUwsdGVpeGVtYTAxLDI2MjUwMDANCjIwMDQsVEVYLEFMLHJvZ2Vya2UwMSwyNTAwMDAwDQoyMDA0LFRFWCxBTCxjb3JkZWZyMDEsMjAwMDAwMA0KMjAwNCxURVgsQUwsbmVsc29qZTAxLDE4MDAwMDANCjIwMDQsVEVYLEFMLHBlcnJ5aGUwMSwxNzAwMDAwDQoyMDA0LFRFWCxBTCxqb3JkYWJyMDEsMTI1MDAwMA0KMjAwNCxURVgsQUwsZnVsbG1icjAxLDEwMDAwMDANCjIwMDQsVEVYLEFMLHlvdW5nZXIwMSwxMDAwMDAwDQoyMDA0LFRFWCxBTCxkZWxsdWRhMDEsNzUwMDAwDQoyMDA0LFRFWCxBTCxibGFsb2hhMDEsNTUwMDAwDQoyMDA0LFRFWCxBTCxiYXJhanJvMDEsNTAwMDAwDQoyMDA0LFRFWCxBTCxtYWhheXJvMDEsNTAwMDAwDQoyMDA0LFRFWCxBTCx5b3VuZ21pMDIsNDUwMDAwDQoyMDA0LFRFWCxBTCxhbG1hbmNhMDEsNDIwMDAwDQoyMDA0LFRFWCxBTCxzaG91c2JyMDEsMzYwMDAwDQoyMDA0LFRFWCxBTCxtZW5jaGtlMDEsMzQ1MDAwDQoyMDA0LFRFWCxBTCxkaWNrZXJhMDEsMzM3NTAwDQoyMDA0LFRFWCxBTCxsZXdpc2NvMDEsMzM3NTAwDQoyMDA0LFRFWCxBTCxiZW5vaWpvMDEsMzM1MDAwDQoyMDA0LFRFWCxBTCxjYWxsYW1pMDEsMzIwMDAwDQoyMDA0LFRFWCxBTCxyYW1pcmVyMDEsMzAzNzUwDQoyMDA0LFRFWCxBTCxsYWlyZGdlMDEsMzAwMDAwDQoyMDA0LFRFWCxBTCxuaXZhcnJhMDEsMzAwMDAwDQoyMDA0LFRFWCxBTCxuaXhsYTAxLDMwMDAwMA0KMjAwNCxUT1IsQUwsZGVsZ2FjYTAxLDE5NzAwMDAwDQoyMDA0LFRPUixBTCxoYWxsYXJvMDEsNjAwMDAwMA0KMjAwNCxUT1IsQUwsYmF0aXNtaTAxLDM2MDAwMDANCjIwMDQsVE9SLEFMLGNhdGFsZnIwMSwyMzAwMDAwDQoyMDA0LFRPUixBTCxoZW50Z3BhMDEsMjIwMDAwMA0KMjAwNCxUT1IsQUwsbGlndGVrZTAxLDIwMDAwMDANCjIwMDQsVE9SLEFMLGxpbGx5dGUwMSwxOTAwMDAwDQoyMDA0LFRPUixBTCxhZGFtc3RlMDEsMTcwMDAwMA0KMjAwNCxUT1IsQUwsc3BlaWVqdTAxLDE2MDAwMDANCjIwMDQsVE9SLEFMLGhpbnNrZXIwMSw5MDAwMDANCjIwMDQsVE9SLEFMLG15ZXJzZ3IwMSw5MDAwMDANCjIwMDQsVE9SLEFMLHdlbGxzdmUwMSw4NzAwMDANCjIwMDQsVE9SLEFMLGRlbG9zdmEwMSw4NTAwMDANCjIwMDQsVE9SLEFMLGJlcmdkYTAxLDgwMDAwMA0KMjAwNCxUT1IsQUwsd29vZHdjaDAxLDc3NTAwMA0KMjAwNCxUT1IsQUwsZ29tZXpjaDAyLDc1MDAwMA0KMjAwNCxUT1IsQUwscGhlbHBqbzAxLDM0MjAwMA0KMjAwNCxUT1IsQUwsdG93ZXJqbzAxLDM0MDAwMA0KMjAwNCxUT1IsQUwsaHVkc29vcjAxLDMyMjAwMA0KMjAwNCxUT1IsQUwsam9obnNyZTAyLDMxODAwMA0KMjAwNCxUT1IsQUwsbG9wZXphcTAxLDMxODAwMA0KMjAwNCxUT1IsQUwsa2Vyc2hqYTAxLDMxNTAwMA0KMjAwNCxUT1IsQUwsZmlsZWJvMDEsMzEwMDAwDQoyMDA0LFRPUixBTCxkb3VnbHNlMDEsMzA1MDAwDQoyMDA0LFRPUixBTCxjYXNoa2UwMSwzMDIwMDANCjIwMDQsVE9SLEFMLHBvbmRzaTAxLDMwMDAwMA0KMjAwNCxBUkksTkwsam9obnNyYTA1LDE2MDAwMDAwDQoyMDA0LEFSSSxOTCxzZXhzb3JpMDEsODcyNTAwMA0KMjAwNCxBUkksTkwsZ29uemFsdTAxLDgyNTAwMDANCjIwMDQsQVJJLE5MLGZpbmxlc3QwMSw3MDAwMDAwDQoyMDA0LEFSSSxOTCxtYW50ZW1hMDEsNzAwMDAwMA0KMjAwNCxBUkksTkwsYmF1dGlkYTAxLDQwMDAwMDANCjIwMDQsQVJJLE5MLGRlc3NlZWwwMSw0MDAwMDAwDQoyMDA0LEFSSSxOTCxjb2xicmdyMDEsMjc1MDAwMA0KMjAwNCxBUkksTkwsaGlsbGVzaDAyLDI2MDAwMDANCjIwMDQsQVJJLE5MLGFsb21hcm8wMSwxMDAwMDAwDQoyMDA0LEFSSSxOTCxiYWVyZ2NhMDEsMTAwMDAwMA0KMjAwNCxBUkksTkwscmV5bm9zaDAxLDEwMDAwMDANCjIwMDQsQVJJLE5MLG1heW5lYnIwMSw4MDAwMDANCjIwMDQsQVJJLE5MLGVzdGFsYm8wMiw1NTAwMDANCjIwMDQsQVJJLE5MLHNwYXJrc3QwMSw1MDAwMDANCjIwMDQsQVJJLE5MLHNhZGxlZG8wMSw0MDAwMDANCjIwMDQsQVJJLE5MLGZvc3N1Y2EwMSwzNDUwMDANCjIwMDQsQVJJLE5MLGNpbnRyYWwwMSwzMzUwMDANCjIwMDQsQVJJLE5MLHdlYmJicjAxLDMzNTAwMA0KMjAwNCxBUkksTkwsa29wbG9taTAxLDMzMDAwMA0KMjAwNCxBUkksTkwsbHlvbmJyMDEsMzMwMDAwDQoyMDA0LEFSSSxOTCxjaG9hdHJhMDEsMzI1NzUwDQoyMDA0LEFSSSxOTCx2aWxsYW9zMDEsMzI1MDAwDQoyMDA0LEFSSSxOTCxyYW5kb3N0MDEsMzIyNTAwDQoyMDA0LEFSSSxOTCx2YWx2ZWpvMDEsMzIwMDAwDQoyMDA0LEFSSSxOTCxoYW1tb3JvMDEsMzE1MDAwDQoyMDA0LEFSSSxOTCxrYXRhbWEwMSwzMTUwMDANCjIwMDQsQVJJLE5MLG5hbmNlc2gwMSwzMDc1MDANCjIwMDQsQVJJLE5MLGRhaWdsY2EwMSwzMDAwMDANCjIwMDQsQVRMLE5MLGpvbmVzY2gwNiwxNTMzMzMzMw0KMjAwNCxBVEwsTkwsaGFtcHRtaTAxLDE0NjI1MDAwDQoyMDA0LEFUTCxOTCxqb25lc2FuMDEsMTI1MDAwMDANCjIwMDQsQVRMLE5MLHNtb2x0am8wMSwxMTY2NjY2Nw0KMjAwNCxBVEwsTkwsYnlyZHBhMDEsNzAwMDAwMA0KMjAwNCxBVEwsTkwsb3J0aXpydTAxLDYyMDAwMDANCjIwMDQsQVRMLE5MLGRyZXdqZDAxLDQyMDAwMDANCjIwMDQsQVRMLE5MLGZ1cmNhcmEwMSwzNzAwMDAwDQoyMDA0LEFUTCxOTCxtYXJyZWVsMDEsMzAwMDAwMA0KMjAwNCxBVEwsTkwsdGhvbXNqbzAxLDIyNTAwMDANCjIwMDQsQVRMLE5MLGFsZm9uYW4wMSwxMzUwMDAwDQoyMDA0LEFUTCxOTCxyZWl0c2NoMDEsOTUwMDAwDQoyMDA0LEFUTCxOTCx3cmlnaGphMDIsODUwMDAwDQoyMDA0LEFUTCxOTCxmcmFuY2p1MDEsNzUwMDAwDQoyMDA0LEFUTCxOTCxkZXJvc21hMDEsNzI1MDAwDQoyMDA0LEFUTCxOTCxwZXJlemVkMDIsNjI1MDAwDQoyMDA0LEFUTCxOTCxjdW5uYXdpMDEsNTI1MDAwDQoyMDA0LEFUTCxOTCxhbG1hbmFyMDEsNTAwMDAwDQoyMDA0LEFUTCxOTCxnaWxlc21hMDEsNDMwMDAwDQoyMDA0LEFUTCxOTCxncnlib2tlMDEsMzc3NTAwDQoyMDA0LEFUTCxOTCxuaXRrb2NqMDEsMzc1MDAwDQoyMDA0LEFUTCxOTCxjcnV6anUwMiwzNzAwMDANCjIwMDQsQVRMLE5MLHJhbWlyaG8wMSwzMzAwMDANCjIwMDQsQVRMLE5MLHdpc2VkZTAxLDMyNTAwMA0KMjAwNCxBVEwsTkwsZXN0cmFqbzAxLDMxMjUwMA0KMjAwNCxBVEwsTkwsZ2FyY2lqZTAxLDMxMjUwMA0KMjAwNCxBVEwsTkwsaGVzc21taTAxLDMwMDAwMA0KMjAwNCxBVEwsTkwsbGFyb2NhZDAxLDMwMDAwMA0KMjAwNCxDSE4sTkwsc29zYXNhMDEsMTYwMDAwMDANCjIwMDQsQ0hOLE5MLGFsb3VtbzAxLDk1MDAwMDANCjIwMDQsQ0hOLE5MLHdvb2RrZTAyLDgwMDAwMDANCjIwMDQsQ0hOLE5MLGxlZWRlMDIsNjE2NjY2Nw0KMjAwNCxDSE4sTkwsY2xlbWVtYTAxLDYwMDAwMDANCjIwMDQsQ0hOLE5MLG1hZGR1Z3IwMSw2MDAwMDAwDQoyMDA0LENITixOTCxyYW1pcmFyMDEsNjAwMDAwMA0KMjAwNCxDSE4sTkwsZ29uemFhbDAxLDU3NTAwMDANCjIwMDQsQ0hOLE5MLHJlbWxpbWkwMSwzOTgzMzMzDQoyMDA0LENITixOTCxwcmlvcm1hMDEsMzE1MDAwMA0KMjAwNCxDSE4sTkwsaGF3a2lsYTAxLDMwMDAwMDANCjIwMDQsQ0hOLE5MLGdydWR6bWEwMSwyNTAwMDAwDQoyMDA0LENITixOTCxib3Jvd2pvMDEsMjAwMDAwMA0KMjAwNCxDSE4sTkwsd2Fsa2V0bzA0LDE3NTAwMDANCjIwMDQsQ0hOLE5MLGJhcnJlbWkwMSwxNTUwMDAwDQoyMDA0LENITixOTCxmYXJuc2t5MDEsMTQwMDAwMA0KMjAwNCxDSE4sTkwsbWVyY2trZTAxLDEyMDAwMDANCjIwMDQsQ0hOLE5MLGhvbGxhdG8wMSwxMDAwMDAwDQoyMDA0LENITixOTCxtYXJ0aXJhMDMsOTAwMDAwDQoyMDA0LENITixOTCxiYWtvcGEwMSw4NjUwMDANCjIwMDQsQ0hOLE5MLG1hY2lham8wMSw3NTAwMDANCjIwMDQsQ0hOLE5MLGdvb2R3dG8wMSw2NTAwMDANCjIwMDQsQ0hOLE5MLHBhdHRlY28wMSw0ODAwMDANCjIwMDQsQ0hOLE5MLHphbWJyY2EwMSw0NTAwMDANCjIwMDQsQ0hOLE5MLHdlbGxldG8wMSwzMTAwMDANCjIwMDQsQ0hOLE5MLG1pdHJlc2UwMSwzMDUwMDANCjIwMDQsQ0hOLE5MLGRlbXBzcnkwMSwzMDAwMDANCjIwMDQsQ0hOLE5MLHByYXR0YW4wMSwzMDAwMDANCjIwMDQsQ0hOLE5MLHd1ZXJ0bWkwMSwzMDAwMDANCjIwMDQsQ0lOLE5MLGdyaWZma2UwMiwxMjUwMDAwMA0KMjAwNCxDSU4sTkwsY2FzZXlzZTAxLDY4MDAwMDANCjIwMDQsQ0lOLE5MLGdyYXZlZGEwMSw2MDAwMDAwDQoyMDA0LENJTixOTCx3aWxzb3BhMDIsMzUwMDAwMA0KMjAwNCxDSU4sTkwsbGlkbGVjbzAxLDI3NTAwMDANCjIwMDQsQ0lOLE5MLGxhcnVlamEwMSwyNjAwMDAwDQoyMDA0LENJTixOTCxoYXluZWppMDEsMjUwMDAwMA0KMjAwNCxDSU4sTkwsamltZW5kYTAxLDE2MTUwMDANCjIwMDQsQ0lOLE5MLGNhc3RyanUwMSwxMDAwMDAwDQoyMDA0LENJTixOTCxsYXJraWJhMDEsNzAwMDAwDQoyMDA0LENJTixOTCxyaWVkbGpvMDEsNjUwMDAwDQoyMDA0LENJTixOTCxqb25lc3RvMDIsNTAwMDAwDQoyMDA0LENJTixOTCx2YWxlbmphMDEsNTAwMDAwDQoyMDA0LENJTixOTCxkdW5uYWQwMSw0NDUwMDANCjIwMDQsQ0lOLE5MLGtlYXJuYXUwMSw0MDAwMDANCjIwMDQsQ0lOLE5MLGhhcmFuYWEwMSwzNjAwMDANCjIwMDQsQ0lOLE5MLHBlbmF3aTAxLDM0NTAwMA0KMjAwNCxDSU4sTkwsYWNldmVqbzAxLDM0MDAwMA0KMjAwNCxDSU4sTkwscmVpdGhicjAxLDMyNzI1MA0KMjAwNCxDSU4sTkwsb2xtZWRyYTAxLDMyMjAwMA0KMjAwNCxDSU4sTkwsZnJlZWxyeTAxLDMyMDAwMA0KMjAwNCxDSU4sTkwsbGFyc29icjAxLDMxODAwMA0KMjAwNCxDSU4sTkwsbWlsbGVjbzAxLDMxNzAwMA0KMjAwNCxDSU4sTkwsbm9ydG9waDAxLDMwMzUwMA0KMjAwNCxDSU4sTkwsd2FnbmVyeTAxLDMwMjUwMA0KMjAwNCxDSU4sTkwsaGFsbGpvMDMsMzAwMDAwDQoyMDA0LENJTixOTCxtYWNoYWFuMDEsMzAwMDAwDQoyMDA0LENJTixOTCx2YW5wb3RvMDEsMzAwMDAwDQoyMDA0LENPTCxOTCx3YWxrZWxhMDEsMTI2NjY2NjcNCjIwMDQsQ09MLE5MLGhlbHRvdG8wMSwxMTYwMDAwMA0KMjAwNCxDT0wsTkwsam9obnNjaDA0LDkwMDAwMDANCjIwMDQsQ09MLE5MLG5lYWdsZGUwMSw5MDAwMDAwDQoyMDA0LENPTCxOTCx3aWxzb3ByMDEsOTAwMDAwMA0KMjAwNCxDT0wsTkwsY2FzdGl2aTAyLDIxMDAwMDANCjIwMDQsQ09MLE5MLGNoYWNvc2gwMSwxODUwMDAwDQoyMDA0LENPTCxOTCxidXJuaWplMDEsMTI1MDAwMA0KMjAwNCxDT0wsTkwsbnVuZXp2bDAxLDcwMDAwMA0KMjAwNCxDT0wsTkwsd2VuZGV0dTAxLDcwMDAwMA0KMjAwNCxDT0wsTkwsY2xheXRybzAxLDY1MDAwMA0KMjAwNCxDT0wsTkwsaG9ja2lkZTAxLDY1MDAwMA0KMjAwNCxDT0wsTkwsZXN0ZXNzaDAxLDYwMDAwMA0KMjAwNCxDT0wsTkwscmVlZHN0MDEsNjAwMDAwDQoyMDA0LENPTCxOTCxncmVlbnRvMDIsNTUwMDAwDQoyMDA0LENPTCxOTCxmYXNzZWplMDEsNTAwMDAwDQoyMDA0LENPTCxOTCxlbGFydHNjMDEsNDgwMDAwDQoyMDA0LENPTCxOTCxzd2Vlbm1hMDEsNDAwMDAwDQoyMDA0LENPTCxOTCxqZW5uaWphMDEsMzQwMDAwDQoyMDA0LENPTCxOTCxzdGFya2RlMDEsMzIxMDAwDQoyMDA0LENPTCxOTCxiZXJuZWFkMDEsMzIwMDAwDQoyMDA0LENPTCxOTCxmdWVudGJyMDEsMzIwMDAwDQoyMDA0LENPTCxOTCxrZW5uZWpvMDQsMzIwMDAwDQoyMDA0LENPTCxOTCxsb3BlemphMDIsMzE3NTAwDQoyMDA0LENPTCxOTCxwZWxsb2tpMDEsMzEwMDAwDQoyMDA0LENPTCxOTCxnb256YWx1MDIsMzAwMDAwDQoyMDA0LENPTCxOTCxtaWxlc2FhMDEsMzAwMDAwDQoyMDA0LENPTCxOTCxyZXllc3JlMDEsMzAwMDAwDQoyMDA0LEZMTyxOTCxsb3dlbG1pMDEsNjUwMDAwMA0KMjAwNCxGTE8sTkwsY2FzdGlsdTAxLDQ2NjY2NjcNCjIwMDQsRkxPLE5MLHBhdmFuY2EwMSwzODAwMDAwDQoyMDA0LEZMTyxOTCxwZW5ueWJyMDEsMzcyNTAwMA0KMjAwNCxGTE8sTkwsYmVuaXRhcjAxLDM1MDAwMDANCjIwMDQsRkxPLE5MLGNvbmluamUwMSwzMDAwMDAwDQoyMDA0LEZMTyxOTCxnb256YWFsMDIsMjgwMDAwMA0KMjAwNCxGTE8sTkwsYnVybmVhajAxLDI1MDAwMDANCjIwMDQsRkxPLE5MLHBpZXJyanUwMSwyNDAwMDAwDQoyMDA0LEZMTyxOTCxiZWNrZWpvMDIsMTUwOTM3NQ0KMjAwNCxGTE8sTkwsZm94Y2gwMiwxMjAwMDAwDQoyMDA0LEZMTyxOTCxyZWRtb21pMDEsODQwMDAwDQoyMDA0LEZMTyxOTCxvbGl2ZWRhMDIsNzUwMDAwDQoyMDA0LEZMTyxOTCxjb3JkZXdpMDEsNjAwMDAwDQoyMDA0LEZMTyxOTCxtb3JkZW1pMDEsNDI1MDAwDQoyMDA0LEZMTyxOTCxjYXN0cnJhMDEsNDAwMDAwDQoyMDA0LEZMTyxOTCxoYXJyaWxlMDEsNDAwMDAwDQoyMDA0LEZMTyxOTCx3aWxsaWRvMDMsMzUzNTAwDQoyMDA0LEZMTyxOTCxwZXJpc21hMDEsMzI1MDAwDQoyMDA0LEZMTyxOTCxjYWJyZW1pMDEsMzIwMDAwDQoyMDA0LEZMTyxOTCxjaG9paGUwMSwzMTAwMDANCjIwMDQsRkxPLE5MLHBoZWxwdG8wMSwzMDc1MDANCjIwMDQsRkxPLE5MLGJ1bXBuYTAxLDMwNTAwMA0KMjAwNCxGTE8sTkwsc3Bvb250aTAxLDMwNTAwMA0KMjAwNCxGTE8sTkwsd2F5bmVqdTAxLDMwMTAwMA0KMjAwNCxGTE8sTkwsZWFzbGVkYTAxLDMwMDAwMA0KMjAwNCxGTE8sTkwsbnVuZXphYjAyLDMwMDAwMA0KMjAwNCxIT1UsTkwsYmFnd2VqZTAxLDE2MDAwMDAwDQoyMDA0LEhPVSxOTCxoaWRhbHJpMDEsMTI1MDAwMDANCjIwMDQsSE9VLE5MLGtlbnRqZTAxLDEwMDAwMDAwDQoyMDA0LEhPVSxOTCxiZXJrbWxhMDEsNjUwMDAwMA0KMjAwNCxIT1UsTkwscGV0dGlhbjAxLDU1MDAwMDANCjIwMDQsSE9VLE5MLGNsZW1lcm8wMiw1MDAwMDAwDQoyMDA0LEhPVSxOTCxtaWxsZXdhMDQsMzQwMDAwMA0KMjAwNCxIT1UsTkwsb3N3YWxybzAxLDMyNTAwMDANCjIwMDQsSE9VLE5MLGJpZ2dpY3IwMSwzMDAwMDAwDQoyMDA0LEhPVSxOTCxkb3RlbG9jMDEsMjgwMDAwMA0KMjAwNCxIT1UsTkwsdml6Y2FqbzAxLDEyMDAwMDANCjIwMDQsSE9VLE5MLGF1c211YnIwMSwxMDAwMDAwDQoyMDA0LEhPVSxOTCxwYWxtZW9yMDEsNzUwMDAwDQoyMDA0LEhPVSxOTCxtaWNlbGRhMDEsNjAwMDAwDQoyMDA0LEhPVSxOTCxyZWRkaXRpMDEsMzk1MDAwDQoyMDA0LEhPVSxOTCxzdG9uZXJpMDEsMzk1MDAwDQoyMDA0LEhPVSxOTCxkdWNrd2JyMDEsMzkwMDAwDQoyMDA0LEhPVSxOTCxlbnNiZW1vMDEsMzgwMDAwDQoyMDA0LEhPVSxOTCxldmVyZWFkMDEsMzcwMDAwDQoyMDA0LEhPVSxOTCxsaWRnZWJyMDEsMzYwMDAwDQoyMDA0LEhPVSxOTCxsYW1ibWkwMSwzNTIwMDANCjIwMDQsSE9VLE5MLGZlcm5hamEwMSwzMjUwMDANCjIwMDQsSE9VLE5MLGNoYXZlcmEwMSwzMTUwMDANCjIwMDQsSE9VLE5MLGJydW50ZXIwMSwzMDc1MDANCjIwMDQsSE9VLE5MLGxhbmVqYTAxLDMwNzUwMA0KMjAwNCxMQU4sTkwsZ3JlZW5zaDAxLDE2NjY2NjY3DQoyMDA0LExBTixOTCxkcmVpZmRhMDEsMTI0MDAwMDANCjIwMDQsTEFOLE5MLG5vbW9oaTAxLDkwMDAwMDANCjIwMDQsTEFOLE5MLGh1bmRsdG8wMSw3MDAwMDAwDQoyMDA0LExBTixOTCx3ZWF2ZWplMDEsNjI1MDAwMA0KMjAwNCxMQU4sTkwsYmVsdHJhZDAxLDUwMDAwMDANCjIwMDQsTEFOLE5MLGdhZ25lZXIwMSw1MDAwMDAwDQoyMDA0LExBTixOTCxwZXJlem9kMDEsNTAwMDAwMA0KMjAwNCxMQU4sTkwsbG9kdWNwYTAxLDQwNjY2NjcNCjIwMDQsTEFOLE5MLHNodWV5cGEwMSwzOTE2NjY3DQoyMDA0LExBTixOTCxlbmNhcmp1MDEsMzU2NTAwMA0KMjAwNCxMQU4sTkwsaXNoaWlrYTAxLDI5NzUwMDANCjIwMDQsTEFOLE5MLGJyYWRsbWkwMSwxNzMwMDAwDQoyMDA0LExBTixOTCxhbHZhcndpMDEsMTUwMDAwMA0KMjAwNCxMQU4sTkwsbW90YWd1MDEsMTQ3NTAwMA0KMjAwNCxMQU4sTkwsbWFydGl0bzAyLDE0MDAwMDANCjIwMDQsTEFOLE5MLGNvcmFhbDAxLDEzMDAwMDANCjIwMDQsTEFOLE5MLHZlbnR1cm8wMSwxMjAwMDAwDQoyMDA0LExBTixOTCxyb2JlcmRhMDcsOTc1MDAwDQoyMDA0LExBTixOTCxpenR1cmNlMDEsMzU4NTAwDQoyMDA0LExBTixOTCxyb3NzZGEwMSwzMTAwMDANCjIwMDQsTEFOLE5MLHNhbmNoZHUwMSwzMDUwMDANCjIwMDQsTEFOLE5MLHdlcnRoamEwMSwzMDMwMDANCjIwMDQsTEFOLE5MLGZhbGtlYnIwMSwzMDI1MDANCjIwMDQsTEFOLE5MLGdyYWJvamEwMSwzMDEwMDANCjIwMDQsTEFOLE5MLHJ1YW53aTAxLDMwMTAwMA0KMjAwNCxMQU4sTkwsdGh1cnNqbzAxLDMwMTAwMA0KMjAwNCxNSUwsTkwsamVua2lnZTAxLDg3Mzc1MDANCjIwMDQsTUlMLE5MLGNvdW5zY3IwMSwzMTY2NjY3DQoyMDA0LE1JTCxOTCxzaGVldGJlMDEsMjQyNTAwMA0KMjAwNCxNSUwsTkwsc3BpdmVqdTAxLDIzNjc1MDANCjIwMDQsTUlMLE5MLGhlbG1zd2UwMSwxNjg3NTAwDQoyMDA0LE1JTCxOTCxrb2xiZGEwMSwxNTAwMDAwDQoyMDA0LE1JTCxOTCxncmlldmJlMDEsNzAwMDAwDQoyMDA0LE1JTCxOTCxiZW5uZWdhMDEsNjAwMDAwDQoyMDA0LE1JTCxOTCx2aXpjYWx1MDEsNTUwMDAwDQoyMDA0LE1JTCxOTCxkYXZpc2RvMDIsNDUwMDAwDQoyMDA0LE1JTCxOTCxidXJiYWRhMDEsNDQwMDAwDQoyMDA0LE1JTCxOTCxoZXJuYWFkMDEsNDI1MDAwDQoyMDA0LE1JTCxOTCxraW5uZW1hMDEsNDAwMDAwDQoyMDA0LE1JTCxOTCxwb2RzZXNjMDEsNDAwMDAwDQoyMDA0LE1JTCxOTCxnaW50ZWtlMDEsMzgzMzMzDQoyMDA0LE1JTCxOTCxraWVzY2JyMDEsMzgwMDAwDQoyMDA0LE1JTCxOTCxjbGFya2JyMDIsMzc2MDAwDQoyMDA0LE1JTCxOTCxtb2VsbGNoMDEsMzcwMDAwDQoyMDA0LE1JTCxOTCxvdmVyYmx5MDEsMzI2MDAwDQoyMDA0LE1JTCxOTCxvYmVybXdlMDEsMzE0MDAwDQoyMDA0LE1JTCxOTCxmb3JkYmUwMSwzMTAwMDANCjIwMDQsTUlMLE5MLGhhbGxiaTAzLDMxMDAwMA0KMjAwNCxNSUwsTkwsY2FwdWFjaDAxLDMwNTAwMA0KMjAwNCxNSUwsTkwsZHVycml0cjAxLDMwNTAwMA0KMjAwNCxNSUwsTkwsYmVubmVqZTAxLDMwMDAwMA0KMjAwNCxNT04sTkwsdmlkcm9qbzAxLDcwMDAwMDANCjIwMDQsTU9OLE5MLGNhYnJlb3IwMSw2MDAwMDAwDQoyMDA0LE1PTixOTCxoZXJuYWxpMDEsNjAwMDAwMA0KMjAwNCxNT04sTkwsZXZlcmVjYTAxLDMwMDAwMDANCjIwMDQsTU9OLE5MLGRpYXplaTAxLDI1ODc1MDANCjIwMDQsTU9OLE5MLG9oa2F0bzAxLDIzMzc1MDANCjIwMDQsTU9OLE5MLGFybWFzdG8wMiwyMTAwMDAwDQoyMDA0LE1PTixOTCxiaWRkbHJvMDEsMTk1MDAwMA0KMjAwNCxNT04sTkwsYmF0aXN0bzAxLDE1MDAwMDANCjIwMDQsTU9OLE5MLGVpc2Noam8wMSwxMzAwMDAwDQoyMDA0LE1PTixOTCxqb2huc25pMDEsMTI1MDAwMA0KMjAwNCxNT04sTkwsZm94YW4wMSw0NTAwMDANCjIwMDQsTU9OLE5MLHdpbGtlYnIwMSwzNzUwMDANCjIwMDQsTU9OLE5MLGZpa2FjamUwMSwzNTAwMDANCjIwMDQsTU9OLE5MLGxvcGV6bHUwMywzNTAwMDANCjIwMDQsTU9OLE5MLHNjaG5lYnIwMSwzNTAwMDANCjIwMDQsTU9OLE5MLGF5YWxhbHUwMSwzMTc1MDANCjIwMDQsTU9OLE5MLGRheXphMDEsMzE1MDAwDQoyMDA0LE1PTixOTCxjYWxsb3JvMDEsMzEyNTAwDQoyMDA0LE1PTixOTCxyaXZlcmp1MDEsMzEyMDAwDQoyMDA0LE1PTixOTCxjYXJyb2phMDEsMzEwMDAwDQoyMDA0LE1PTixOTCxwYXR0ZWpvMDIsMzEwMDAwDQoyMDA0LE1PTixOTCxzbWl0aGRhMDYsMzEwMDAwDQoyMDA0LE1PTixOTCx2YXJnYWNsMDEsMzA3NTAwDQoyMDA0LE1PTixOTCxraW1zdTAxLDMwMzAwMA0KMjAwNCxNT04sTkwsYmVudHpjaDAxLDMwMDAwMA0KMjAwNCxNT04sTkwsYmVyZ2VwZTAxLDMwMDAwMA0KMjAwNCxNT04sTkwsY29yZGVjaDAxLDMwMDAwMA0KMjAwNCxNT04sTkwsc2xlZGd0ZTAxLDMwMDAwMA0KMjAwNCxOWU4sTkwsdmF1Z2htbzAxLDE3MTY2NjY3DQoyMDA0LE5ZTixOTCxwaWF6em1pMDEsMTYwNzE0MjkNCjIwMDQsTllOLE5MLGdsYXZpdG8wMiwxMDc2NTYwOA0KMjAwNCxOWU4sTkwsbGVpdGVhbDAxLDEwMjk1NjAwDQoyMDA0LE5ZTixOTCxmbG95ZGNsMDEsNjUwMDAwMA0KMjAwNCxOWU4sTkwsbWF0c3VrYTAxLDUwMzMzMzMNCjIwMDQsTllOLE5MLHRyYWNoc3QwMSw1MDAwMDAwDQoyMDA0LE5ZTixOTCxjYW1lcm1pMDEsNDMzMzMzMw0KMjAwNCxOWU4sTkwsZ3V0aWVyaTAxLDQxNjY2NjcNCjIwMDQsTllOLE5MLHdlYXRoZGEwMSwzOTMzMzMzDQoyMDA0LE5ZTixOTCxzdGFudG1pMDIsMzAwMDAwMA0KMjAwNCxOWU4sTkwsbG9vcGVicjAxLDIwMDAwMDANCjIwMDQsTllOLE5MLGZyYW5jam8wMSwxMDAwMDAwDQoyMDA0LE5ZTixOTCx6ZWlsZXRvMDEsMTAwMDAwMA0KMjAwNCxOWU4sTkwsZ2FyY2lrYTAxLDgwMDAwMA0KMjAwNCxOWU4sTkwsd2lsc292YTAxLDcxNTAwMA0KMjAwNCxOWU4sTkwsZXJpY2tzYzAxLDcwMDAwMA0KMjAwNCxOWU4sTkwsc3RyaWNzYzAxLDY1MDAwMA0KMjAwNCxOWU4sTkwsc3BlbmNzaDAxLDUzNzUwMA0KMjAwNCxOWU4sTkwsbWNld2lqbzAxLDUwMDAwMA0KMjAwNCxOWU4sTkwscm9iZXJncjAxLDMxOTUwMA0KMjAwNCxOWU4sTkwscGhpbGxqYTA0LDMxODAwMA0KMjAwNCxOWU4sTkwsbW9yZW5vcjAxLDMxNzUwMA0KMjAwNCxOWU4sTkwsd2lnZ2l0eTAxLDMxNjAwMA0KMjAwNCxOWU4sTkwsd2hlZWxkYTAxLDMxMTUwMA0KMjAwNCxOWU4sTkwscmV5ZXNqbzAxLDMwNzUwMA0KMjAwNCxOWU4sTkwsdmFsZW5lcjAxLDMwMjUwMA0KMjAwNCxOWU4sTkwseWF0ZXN0eTAxLDMwMDAwMA0KMjAwNCxQSEksTkwsdGhvbWVqaTAxLDEyMTY2NjY3DQoyMDA0LFBISSxOTCxtaWxsd2tlMDEsMTEwMDAwMDANCjIwMDQsUEhJLE5MLGFicmV1Ym8wMSwxMDYwMDAwMA0KMjAwNCxQSEksTkwsbWlsdG9lcjAxLDkwMDAwMDANCjIwMDQsUEhJLE5MLHdhZ25lYmkwMiw4MDAwMDAwDQoyMDA0LFBISSxOTCxsaWViZW1pMDEsNzUwMDAwMA0KMjAwNCxQSEksTkwsYmVsbGRhMDEsNDQwMDAwMA0KMjAwNCxQSEksTkwsd29sZnJhMDIsNDM3NTAwMA0KMjAwNCxQSEksTkwsYnVycmVwYTAxLDQyNTAwMDANCjIwMDQsUEhJLE5MLHBvbGFucGwwMSwzOTUwMDAwDQoyMDA0LFBISSxOTCxjb3JtaXJoMDEsMzAwMDAwMA0KMjAwNCxQSEksTkwsd29ycmV0aTAxLDI3NTAwMDANCjIwMDQsUEhJLE5MLHBhZGlsdmkwMSwyNjAwMDAwDQoyMDA0LFBISSxOTCxyb2xsaWppMDEsMjQyNTAwMA0KMjAwNCxQSEksTkwsbGVkZWVyaTAxLDEyMjUwMDANCjIwMDQsUEhJLE5MLHByYXR0dG8wMiw4NzUwMDANCjIwMDQsUEhJLE5MLGhlcm5hcm8wMSw3NTAwMDANCjIwMDQsUEhJLE5MLHBlcmV6dG8wMyw3NTAwMDANCjIwMDQsUEhJLE5MLHdvb3Rlc2gwMSw1NzUwMDANCjIwMDQsUEhJLE5MLGdsYW52ZG8wMSw1NTAwMDANCjIwMDQsUEhJLE5MLHRlbGVtYW0wMSw1MjUwMDANCjIwMDQsUEhJLE5MLG15ZXJzYnIwMSwzNjI1MDANCjIwMDQsUEhJLE5MLGJ5cmRtYTAxLDM1NTAwMA0KMjAwNCxQSEksTkwsbWljaGFqYTAxLDMzNTAwMA0KMjAwNCxQSEksTkwsanVuZ2VlcjAxLDMwMDAwMA0KMjAwNCxQSEksTkwsbWFkc29yeTAxLDMwMDAwMA0KMjAwNCxQSVQsTkwsa2VuZGFqYTAxLDg1NzE0MjkNCjIwMDQsUElULE5MLGJlbnNva3IwMSw2MTUwMDAwDQoyMDA0LFBJVCxOTCx3ZWxsc2tpMDEsMjU3NTAwMA0KMjAwNCxQSVQsTkwsYm9laHJicjAxLDIwMDAwMDANCjIwMDQsUElULE5MLHdpbHNvamEwMiwxODUwMDAwDQoyMDA0LFBJVCxOTCxtb25kZXJhMDEsMTE1MDAwMA0KMjAwNCxQSVQsTkwsd2lsc29jcjAzLDExNTAwMDANCjIwMDQsUElULE5MLG1lc2FqbzAxLDgwMDAwMA0KMjAwNCxQSVQsTkwsc2ltb25yYTAxLDgwMDAwMA0KMjAwNCxQSVQsTkwsdG9ycmVzYTAxLDc3NTAwMA0KMjAwNCxQSVQsTkwsc3R5bmVjaDAxLDc1MDAwMA0KMjAwNCxQSVQsTkwsbWVhZG9icjAxLDYyNTAwMA0KMjAwNCxQSVQsTkwsbnVuZXphYjAxLDYyNTAwMA0KMjAwNCxQSVQsTkwsYm95ZGphMDIsMzUwMDAwDQoyMDA0LFBJVCxOTCxmb2dnam8wMSwzNDIwMDANCjIwMDQsUElULE5MLG1hY2tvcm8wMSwzMzUwMDANCjIwMDQsUElULE5MLHBlcmV6b2wwMSwzMjEwMDANCjIwMDQsUElULE5MLHJlZG1hdGkwMSwzMjEwMDANCjIwMDQsUElULE5MLGhpbGxibzAxLDMxNTAwMA0KMjAwNCxQSVQsTkwsdm9nZWxyeTAxLDMxMTUwMA0KMjAwNCxQSVQsTkwsYmF5amEwMSwzMDUwMDANCjIwMDQsUElULE5MLGNvdGFodTAxLDMwMzAwMA0KMjAwNCxQSVQsTkwsc2FuY2hmcjAxLDMwMzAwMA0KMjAwNCxQSVQsTkwsY2FzdGlqbzAyLDMwMDAwMA0KMjAwNCxQSVQsTkwsZGF2aXNqajAxLDMwMDAwMA0KMjAwNCxQSVQsTkwsZ3JhYm9qbzAyLDMwMDAwMA0KMjAwNCxQSVQsTkwsam9obnNtaTAzLDMwMDAwMA0KMjAwNCxTRE4sTkwsZ2lsZXNicjAyLDg4MzMzMzMNCjIwMDQsU0ROLE5MLG5ldmlucGgwMSw4NTAwMDAwDQoyMDA0LFNETixOTCxjaXJpbGplMDEsNjk3NTAwMA0KMjAwNCxTRE4sTkwsa2xlc2tyeTAxLDYwMDAwMDANCjIwMDQsU0ROLE5MLGxvbmd0ZTAxLDM1NzUwMDANCjIwMDQsU0ROLE5MLGhlcm5hcmEwMiwyOTM3NTAwDQoyMDA0LFNETixOTCxob2ZmbXRyMDEsMjUwMDAwMA0KMjAwNCxTRE4sTkwsbG9yZXRtYTAxLDI1MDAwMDANCjIwMDQsU0ROLE5MLGVhdG9uYWQwMSwxOTI1MDAwDQoyMDA0LFNETixOTCx3aXRhc2phMDEsMTc1MDAwMA0KMjAwNCxTRE4sTkwscGF5dG9qYTAxLDE1MDAwMDANCjIwMDQsU0ROLE5MLHdlbGxzZGEwMSwxMjUwMDAwDQoyMDA0LFNETixOTCxsYXdyZWJyMDIsOTI1MDAwDQoyMDA0LFNETixOTCx2YWxkZWlzMDEsODAwMDAwDQoyMDA0LFNETixOTCxvc3VuYWFuMDEsNzUwMDAwDQoyMDA0LFNETixOTCxvdHN1a2FrMDEsNzAwMDAwDQoyMDA0LFNETixOTCxidWNoYWJyMDEsNjUwMDAwDQoyMDA0LFNETixOTCxvcm9wZWVkMDEsNjAwMDAwDQoyMDA0LFNETixOTCxyb2JpbmtlMDIsNDUwMDAwDQoyMDA0LFNETixOTCxwZWF2eWphMDEsMzUwMDAwDQoyMDA0LFNETixOTCx2YXpxdXJhMDEsMzQyNTAwDQoyMDA0LFNETixOTCxidXJyb3NlMDEsMzQwMDAwDQoyMDA0LFNETixOTCxsaW5lYnNjMDEsMzI2MDAwDQoyMDA0LFNETixOTCxvamVkYW1pMDEsMzA1MDAwDQoyMDA0LFNETixOTCxncmVlbmtoMDEsMzAwNTAwDQoyMDA0LFNETixOTCxzenVtaWphMDEsMzAwMDAwDQoyMDA0LFNGTixOTCxib25kc2JhMDEsMTgwMDAwMDANCjIwMDQsU0ZOLE5MLG5lbnJvMDEsOTE1MDAwMA0KMjAwNCxTRk4sTkwsc2NobWlqYTAxLDc5Mzc1MDANCjIwMDQsU0ZOLE5MLGR1cmhhcmEwMSw3MjAwMDAwDQoyMDA0LFNGTixOTCxhbGZvbmVkMDEsNjUwMDAwMA0KMjAwNCxTRk4sTkwscnVldGVraTAxLDYxMzMzMzMNCjIwMDQsU0ZOLE5MLHBpZXJ6YWowMSwzNTAwMDAwDQoyMDA0LFNGTixOTCxyb2RyaWZlMDEsMzA1MDAwMA0KMjAwNCxTRk4sTkwscGVyZXpuZTAxLDI3NTAwMDANCjIwMDQsU0ZOLE5MLGNocmlzamEwMSwyNDMzMzMzDQoyMDA0LFNGTixOTCxncmlzc21hMDIsMjEyNTAwMA0KMjAwNCxTRk4sTkwsc25vd2p0MDEsMTUwMDAwMA0KMjAwNCxTRk4sTkwsdHVja2VtaTAxLDE1MDAwMDANCjIwMDQsU0ZOLE5MLHRvbWtvYnIwMSwxMjAwMDAwDQoyMDA0LFNGTixOTCxoZXJnZW1hMDEsMTEwMDAwMA0KMjAwNCxTRk4sTkwsZXlyZXNjMDEsMTAwMDAwMA0KMjAwNCxTRk4sTkwsaGFtbW9qZTAxLDEwMDAwMDANCjIwMDQsU0ZOLE5MLGZlbGl6cGUwMSw4NTAwMDANCjIwMDQsU0ZOLE5MLGhlcm1hZHUwMSw4MDAwMDANCjIwMDQsU0ZOLE5MLGJyb3dlamkwMSw2NjI1MDANCjIwMDQsU0ZOLE5MLHdhbGtla2UwMSw0NTAwMDANCjIwMDQsU0ZOLE5MLGZyYW5rd2EwMSwzNjAwMDANCjIwMDQsU0ZOLE5MLG1vaHJkdTAxLDM0MjUwMA0KMjAwNCxTRk4sTkwsdG9ycmV5bzAxLDMzNDAwMA0KMjAwNCxTRk4sTkwsZXN0cmVsZTAxLDMxNjAwMA0KMjAwNCxTRk4sTkwsZm9wcGVqZTAxLDMxMjAwMA0KMjAwNCxTRk4sTkwsd2lsbGlqZTAyLDMwODAwMA0KMjAwNCxTRk4sTkwscmFuc29jbzAxLDMwMzAwMA0KMjAwNCxTRk4sTkwsdG9yY2F0bzAxLDMwMjAwMA0KMjAwNCxTRk4sTkwsYWFyZHNkYTAxLDMwMDAwMA0KMjAwNCxTRk4sTkwsbmlla3JsYTAxLDMwMDAwMA0KMjAwNCxTTE4sTkwsbW9ycmltYTAxLDEyNTAwMDAwDQoyMDA0LFNMTixOTCxlZG1vbmppMDEsOTMzMzMzMw0KMjAwNCxTTE4sTkwscm9sZW5zYzAxLDg2MjUwMDANCjIwMDQsU0xOLE5MLHdpbGxpd28wMiw4MDAwMDAwDQoyMDA0LFNMTixOTCxpc3JpbmphMDEsNzc1MDAwMA0KMjAwNCxTTE4sTkwscmVudGVlZDAxLDcyNTAwMDANCjIwMDQsU0xOLE5MLHB1am9sYWwwMSw3MDAwMDAwDQoyMDA0LFNMTixOTCxjZWRlbnJvMDEsNTM3NTAwMA0KMjAwNCxTTE4sTkwsbWF0aGVtaTAxLDQwMDAwMDANCjIwMDQsU0xOLE5MLHNhbmRlcmUwMiwyMDAwMDAwDQoyMDA0LFNMTixOTCxrbGluZXN0MDIsMTcwMDAwMA0KMjAwNCxTTE4sTkwsdGF2YXJqdTAxLDE2MDAwMDANCjIwMDQsU0xOLE5MLHRhZ3Vjc28wMSwxMjAwMDAwDQoyMDA0LFNMTixOTCxzdXBwYWplMDEsMTAwMDAwMA0KMjAwNCxTTE4sTkwsZWxkcmVjYTAxLDkwMDAwMA0KMjAwNCxTTE4sTkwsa2luZ3JhMDEsOTAwMDAwDQoyMDA0LFNMTixOTCxsYW5rZnJhMDEsNjUwMDAwDQoyMDA0LFNMTixOTCxhbmRlcm1hMDIsNjAwMDAwDQoyMDA0LFNMTixOTCxtYXJxdWphMDEsNTI1MDAwDQoyMDA0LFNMTixOTCxsaW5jb21pMDEsNDUwMDAwDQoyMDA0LFNMTixOTCxzaW1vbmphMDEsMzUwMDAwDQoyMDA0LFNMTixOTCxhbmtpZXJpMDEsMzIwMDAwDQoyMDA0LFNMTixOTCxjYXJwZWNoMDEsMzAwMDAwDQoyMDA0LFNMTixOTCxsdW5haGUwMSwzMDAwMDANCjIwMDQsU0xOLE5MLG1ja2F5Y28wMSwzMDAwMDANCjIwMDQsU0xOLE5MLHdvbWFjdG8wMSwzMDAwMDANCjIwMDUsQkFMLEFMLHNvc2FzYTAxLDE3MDAwMDAwDQoyMDA1LEJBTCxBTCx0ZWphZG1pMDEsMTEwMDAwMDANCjIwMDUsQkFMLEFMLHBvbnNvc2kwMSw4NTAwMDAwDQoyMDA1LEJBTCxBTCxsb3BlemphMDEsNzUwMDAwMA0KMjAwNSxCQUwsQUwsbW9yYW1lMDEsMzgzMzMzMw0KMjAwNSxCQUwsQUwscGFsbWVyYTAxLDMwMDAwMDANCjIwMDUsQkFMLEFMLGdpYmJvamEwMSwyNjAwMDAwDQoyMDA1LEJBTCxBTCxyeWFuYmowMSwyNjAwMDAwDQoyMDA1LEJBTCxBTCxqdWxpb2pvMDEsMjUwMDAwMA0KMjAwNSxCQUwsQUwsa2xpbmVzdDAyLDI1MDAwMDANCjIwMDUsQkFMLEFMLGxvcGV6cm8wMSwyMzc1MDAwDQoyMDA1LEJBTCxBTCxncmltc2phMDEsMjAwMDAwMA0KMjAwNSxCQUwsQUwsc3VyaG9iajAxLDExMDAwMDANCjIwMDUsQkFMLEFMLG1hdG9zbHUwMSwxMDI1MDAwDQoyMDA1LEJBTCxBTCxyZWVkc3QwMSw5MDAwMDANCjIwMDUsQkFMLEFMLGdvbWV6Y2gwMiw4NTAwMDANCjIwMDUsQkFMLEFMLHBhcnJpam8wMSw2MTI1MDANCjIwMDUsQkFMLEFMLGNoZW5icjAxLDU1MDAwMA0KMjAwNSxCQUwsQUwscm9iZXJicjAxLDM5MDAwMA0KMjAwNSxCQUwsQUwsYmlnYmlsYTAxLDM4MDAwMA0KMjAwNSxCQUwsQUwsbmV3aGFkYTAxLDM2NTAwMA0KMjAwNSxCQUwsQUwsYmF1ZXJyaTAxLDM1MDAwMA0KMjAwNSxCQUwsQUwsd2lsbGl0bzAyLDM0NzUwMA0KMjAwNSxCQUwsQUwsZ2lsZ2UwMSwzNDI1MDANCjIwMDUsQkFMLEFMLGJlZGFyZXIwMSwzMzAwMDANCjIwMDUsQkFMLEFMLGNhYnJlZGEwMSwzMjUwMDANCjIwMDUsQkFMLEFMLGFpbnN3a3UwMSwzMjI1MDANCjIwMDUsQkFMLEFMLG1hamV3dmEwMSwzMTYwMDANCjIwMDUsQk9TLEFMLHJhbWlybWEwMiwyMjAwMDAwMA0KMjAwNSxCT1MsQUwsc2NoaWxjdTAxLDE0NTAwMDAwDQoyMDA1LEJPUyxBTCxkYW1vbmpvMDEsODI1MDAwMA0KMjAwNSxCT1MsQUwscmVudGVlZDAxLDgwMDAwMDANCjIwMDUsQk9TLEFMLHZhcml0amEwMSw4MDAwMDAwDQoyMDA1LEJPUyxBTCxmb3Vsa2tlMDEsNzUwMDAwMA0KMjAwNSxCT1MsQUwsbml4b250cjAxLDc1MDAwMDANCjIwMDUsQk9TLEFMLGNsZW1lbWEwMSw2NTAwMDAwDQoyMDA1LEJPUyxBTCxvcnRpemRhMDEsNTI1MDAwMA0KMjAwNSxCT1MsQUwsd2FrZWZ0aTAxLDQ2NzAwMDANCjIwMDUsQk9TLEFMLHdlbGxzZGEwMSw0MDc1MDAwDQoyMDA1LEJPUyxBTCxtaWxsYWtlMDEsMzUwMDAwMA0KMjAwNSxCT1MsQUwscGF5dG9qYTAxLDM1MDAwMDANCjIwMDUsQk9TLEFMLGVtYnJlYWwwMSwzMDAwMDAwDQoyMDA1LEJPUyxBTCxiZWxsaG1hMDEsMjc1MDAwMA0KMjAwNSxCT1MsQUwsdGltbGltaTAxLDI3NTAwMDANCjIwMDUsQk9TLEFMLG11ZWxsYmkwMiwyNTAwMDAwDQoyMDA1LEJPUyxBTCxhcnJveWJyMDEsMTg1MDAwMA0KMjAwNSxCT1MsQUwsbWlsbGV3YTA0LDE1MDAwMDANCjIwMDUsQk9TLEFMLG1pcmFiZG8wMSwxNTAwMDAwDQoyMDA1LEJPUyxBTCxoYWxhbWpvMDEsODUwMDAwDQoyMDA1LEJPUyxBTCxtYW50ZW1hMDEsNzUwMDAwDQoyMDA1LEJPUyxBTCx2YXpxdXJhMDEsNzAwMDAwDQoyMDA1LEJPUyxBTCxteWVyc21pMDEsNjAwMDAwDQoyMDA1LEJPUyxBTCxtY2NhcmRhMDEsNTUwMDAwDQoyMDA1LEJPUyxBTCx5b3VrbGtlMDEsMzIzMTI1DQoyMDA1LEJPUyxBTCxuZWFsYmwwMSwzMjEwMDANCjIwMDUsQk9TLEFMLHN0ZXJuYWQwMSwzMTYwMDANCjIwMDUsQ0hBLEFMLGtvbmVycGEwMSw4NzUwMDAwDQoyMDA1LENIQSxBTCxjb250cmpvMDEsODUwMDAwMA0KMjAwNSxDSEEsQUwsZ2FyY2lmcjAyLDgwMDAwMDANCjIwMDUsQ0hBLEFMLHRob21hZnIwNCw4MDAwMDAwDQoyMDA1LENIQSxBTCxidWVocm1hMDEsNjAwMDAwMA0KMjAwNSxDSEEsQUwsZHllamUwMSw0MDAwMDAwDQoyMDA1LENIQSxBTCxldmVyZWNhMDEsNDAwMDAwMA0KMjAwNSxDSEEsQUwsaGVybmFvcjAxLDM1MDAwMDANCjIwMDUsQ0hBLEFMLGdhcmxham8wMSwzNDAwMDAwDQoyMDA1LENIQSxBTCx0YWthdHNoMDEsMjUwMDAwMA0KMjAwNSxDSEEsQUwsaWd1Y2h0YTAxLDIzMDAwMDANCjIwMDUsQ0hBLEFMLHBpZXJ6YWowMSwyMjUwMDAwDQoyMDA1LENIQSxBTCx1cmliZWp1MDEsMjE1MDAwMA0KMjAwNSxDSEEsQUwsaGVybWFkdTAxLDIwMDAwMDANCjIwMDUsQ0hBLEFMLHJvd2FuYWEwMSwyMDAwMDAwDQoyMDA1LENIQSxBTCx2aXpjYWx1MDEsMTMwMDAwMA0KMjAwNSxDSEEsQUwsbWFydGVkYTAxLDEyNTAwMDANCjIwMDUsQ0hBLEFMLHBlcmV6dGkwMSwxMDAwMDAwDQoyMDA1LENIQSxBTCxwb2xpdGNsMDEsMTAwMDAwMA0KMjAwNSxDSEEsQUwscG9kc2VzYzAxLDcwMDAwMA0KMjAwNSxDSEEsQUwsd2lkZ2VjaDAxLDUwMDAwMA0KMjAwNSxDSEEsQUwsY3JlZGVqbzAxLDQwMDAwMA0KMjAwNSxDSEEsQUwsaGFycml3aTAxLDM2NTAwMA0KMjAwNSxDSEEsQUwsZ2xvYWRybzAxLDMzNTAwMA0KMjAwNSxDSEEsQUwsY290dHNuZTAxLDMzMDAwMA0KMjAwNSxDSEEsQUwsb3p1bmFwYTAxLDMzMDAwMA0KMjAwNSxDSEEsQUwsZGlhemZlMDEsMzE4MDAwDQoyMDA1LENMRSxBTCxtaWxsd2tlMDEsNzAwMDAwMA0KMjAwNSxDTEUsQUwsc2FiYXRjYzAxLDUyNTAwMDANCjIwMDUsQ0xFLEFMLHJob2RlYXIwMSwzNzAwMDAwDQoyMDA1LENMRSxBTCxib29uZWFhMDEsMzAwMDAwMA0KMjAwNSxDTEUsQUwsd2VzdGJqYTAxLDI5MDAwMDANCjIwMDUsQ0xFLEFMLHdpY2ttYm8wMSwyNzUwMDAwDQoyMDA1LENMRSxBTCxiZWxsaXJvMDEsMjUwMDAwMA0KMjAwNSxDTEUsQUwsYmxha2VjYTAxLDIyNTAwMDANCjIwMDUsQ0xFLEFMLGhlcm5ham8wMSwxODAwMDAwDQoyMDA1LENMRSxBTCxyaXNrZWRhMDEsMTQyNTAwMA0KMjAwNSxDTEUsQUwsY29yYWFsMDEsMTMwMDAwMA0KMjAwNSxDTEUsQUwsaG93cnlibzAxLDkwMDAwMA0KMjAwNSxDTEUsQUwsZWxhcnRzYzAxLDg1MDAwMA0KMjAwNSxDTEUsQUwsZ29uemFqdTAzLDYwMDAwMA0KMjAwNSxDTEUsQUwsc2F1ZXJzYzAxLDUwMDAwMA0KMjAwNSxDTEUsQUwsaGFmbmV0cjAxLDM3NzQwMA0KMjAwNSxDTEUsQUwsbWFydGl2aTAxLDM3MjEwMA0KMjAwNSxDTEUsQUwsYnJvdXNiZTAxLDM2NTAwMA0KMjAwNSxDTEUsQUwsY3Jpc3BjbzAxLDM2NDkwMA0KMjAwNSxDTEUsQUwsZ2VydXRqbzAxLDM1NjIwMA0KMjAwNSxDTEUsQUwsbGVlY2wwMiwzNDUwMDANCjIwMDUsQ0xFLEFMLGRhdmlzamEwMiwzNDE3MDANCjIwMDUsQ0xFLEFMLGJldGFucmEwMSwzMzg2MDANCjIwMDUsQ0xFLEFMLG1pbGxlbWEwMiwzMjk3MDANCjIwMDUsQ0xFLEFMLHNpemVtZ3IwMSwzMTgzMDANCjIwMDUsQ0xFLEFMLGJhcmRqbzAxLDMxNzkwMA0KMjAwNSxDTEUsQUwsbHVkd2lyeTAxLDMxNzUwMA0KMjAwNSxDTEUsQUwscGVyYWxqaDAxLDMxNjcwMA0KMjAwNSxDTEUsQUwsc3RhbmZqYTAxLDMxNjUwMA0KMjAwNSxERVQsQUwsaGlnZ2libzAyLDg4NTAwMDANCjIwMDUsREVULEFMLHJvZHJpaXYwMSw4MDAwMDAwDQoyMDA1LERFVCxBTCx5b3VuZ2RtMDEsODAwMDAwMA0KMjAwNSxERVQsQUwsb3Jkb25tYTAxLDcyMDAwMDANCjIwMDUsREVULEFMLHBlcmNpdHIwMSw2MDAwMDAwDQoyMDA1LERFVCxBTCxndWlsbGNhMDEsNDAwMDAwMA0KMjAwNSxERVQsQUwsam9obnNqYTAyLDQwMDAwMDANCjIwMDUsREVULEFMLHVyYmludWcwMSw0MDAwMDAwDQoyMDA1LERFVCxBTCx3aGl0ZXJvMDIsMzI1MDAwMA0KMjAwNSxERVQsQUwsdmluYWZlMDEsMzAwMDAwMA0KMjAwNSxERVQsQUwscGVuYWNhMDEsMjU3NTAwMA0KMjAwNSxERVQsQUwsZmFybnNreTAxLDE5NzUwMDANCjIwMDUsREVULEFMLGluZ2VicjAxLDEzNTAwMDANCjIwMDUsREVULEFMLG1hcnRpcmEwMywxMDI1MDAwDQoyMDA1LERFVCxBTCx3YWxrZWphMDEsOTAwMDAwDQoyMDA1LERFVCxBTCx3aWxzb3ZhMDEsNzYwMDAwDQoyMDA1LERFVCxBTCxtYXJvdG1pMDEsNDA1MDAwDQoyMDA1LERFVCxBTCxib25kZWplMDEsNDAwMDAwDQoyMDA1LERFVCxBTCxtb25yb2NyMDEsNDAwMDAwDQoyMDA1LERFVCxBTCxpbmZhbm9tMDEsMzU1MDAwDQoyMDA1LERFVCxBTCxyb2Jlcm5hMDEsMzU1MDAwDQoyMDA1LERFVCxBTCxsZXdpc2NvMDEsMzM5NTAwDQoyMDA1LERFVCxBTCxsZWRlendpMDEsMzM1MDAwDQoyMDA1LERFVCxBTCxnaW50ZW1hMDEsMzMzMDAwDQoyMDA1LERFVCxBTCxzbWl0aGphMDUsMzI1MDAwDQoyMDA1LERFVCxBTCxnZXJtYWZyMDEsMzIxMDAwDQoyMDA1LERFVCxBTCxsb2dhbm5vMDEsMzIwMDAwDQoyMDA1LERFVCxBTCxyb2RuZWZlMDEsMzE4NTAwDQoyMDA1LEtDQSxBTCxzd2Vlbm1pMDEsMTEwMDAwMDANCjIwMDUsS0NBLEFMLGxvbmd0ZTAxLDQ4NzUwMDANCjIwMDUsS0NBLEFMLGFuZGVyYnIwMiwzMjUwMDAwDQoyMDA1LEtDQSxBTCxtYXJyZWVsMDEsMzIwMDAwMA0KMjAwNSxLQ0EsQUwsc3VsbGlzYzAxLDI2MDAwMDANCjIwMDUsS0NBLEFMLGxpbWFqbzAxLDI1MDAwMDANCjIwMDUsS0NBLEFMLHN0YWlybWEwMSwxMjAwMDAwDQoyMDA1LEtDQSxBTCxncmFmZnRvMDEsMTEwMDAwMA0KMjAwNSxLQ0EsQUwsYWZmZWxqZTAxLDk1MDAwMA0KMjAwNSxLQ0EsQUwsYmVycm9hbjAxLDUwMDAwMA0KMjAwNSxLQ0EsQUwsY2FzdGlhbDAxLDQ1MDAwMA0KMjAwNSxLQ0EsQUwsdHJ1YnljaDAxLDM2MDAwMA0KMjAwNSxLQ0EsQUwsYnJvd25lbTAxLDM1NTAwMA0KMjAwNSxLQ0EsQUwsbWFjZG9taTAxLDM1MjAwMA0KMjAwNSxLQ0EsQUwsY2VyZGFqYTAxLDM0MTUwMA0KMjAwNSxLQ0EsQUwsZ3JlaW56YTAxLDMzMDUwMA0KMjAwNSxLQ0EsQUwsZmllbGRuYTAxLDMyNzUwMA0KMjAwNSxLQ0EsQUwsaGVybmFydTAzLDMyNTAwMA0KMjAwNSxLQ0EsQUwscGlja2VjYTAxLDMyMzUwMA0KMjAwNSxLQ0EsQUwsZGVqZXNkYTAxLDMyMDAwMA0KMjAwNSxLQ0EsQUwsY2FtcHNoMDEsMzE5NTAwDQoyMDA1LEtDQSxBTCx3b29kbWkwMSwzMTkwMDANCjIwMDUsS0NBLEFMLGJ1Y2tqbzAxLDMxODUwMA0KMjAwNSxLQ0EsQUwsYmF1dGlkZTAxLDMxNjAwMA0KMjAwNSxLQ0EsQUwsZ290YXlydTAxLDMxNjAwMA0KMjAwNSxLQ0EsQUwsc2lzY29hbjAxLDMxNjAwMA0KMjAwNSxLQ0EsQUwsdGVhaGVtYTAxLDMxNjAwMA0KMjAwNSxMQUEsQUwsZ3VlcnJ2bDAxLDEyNTAwMDAwDQoyMDA1LExBQSxBTCxzYWxtb3RpMDEsMTAxNTAwMDANCjIwMDUsTEFBLEFMLGNvbG9uYmEwMSwxMDAwMDAwMA0KMjAwNSxMQUEsQUwsYW5kZXJnYTAxLDk2MDAwMDANCjIwMDUsTEFBLEFMLGVyc3RhZGEwMSw4MjUwMDAwDQoyMDA1LExBQSxBTCx3YXNoYmphMDEsNjUwMDAwMA0KMjAwNSxMQUEsQUwsZXNjb2JrZTAxLDYyNTAwMDANCjIwMDUsTEFBLEFMLGNhYnJlb3IwMSw2MDAwMDAwDQoyMDA1LExBQSxBTCxmaW5sZXN0MDEsNjAwMDAwMA0KMjAwNSxMQUEsQUwsYnlyZHBhMDEsNTAwMDAwMA0KMjAwNSxMQUEsQUwsa2VubmVhZDAxLDMwMDAwMDANCjIwMDUsTEFBLEFMLG1vbGluYmUwMSwzMDAwMDAwDQoyMDA1LExBQSxBTCx5YW5lczAxLDEwMDAwMDANCjIwMDUsTEFBLEFMLGRhdmFuamUwMiw5MjUwMDANCjIwMDUsTEFBLEFMLHNoaWVsc2MwMSw5MjUwMDANCjIwMDUsTEFBLEFMLG1vbGluam8wMSw3MjUwMDANCjIwMDUsTEFBLEFMLG1lcmxvbG8wMSw1MDAwMDANCjIwMDUsTEFBLEFMLHBhdWxqbzAxLDQ1MDAwMA0KMjAwNSxMQUEsQUwsbGFja2VqbzAxLDQ0MDAwMA0KMjAwNSxMQUEsQUwscm9kcmlmcjAzLDQ0MDAwMA0KMjAwNSxMQUEsQUwsZG9ubmVicjAxLDQyMDAwMA0KMjAwNSxMQUEsQUwsZmlnZ2ljaDAxLDM5MDAwMA0KMjAwNSxMQUEsQUwscml2ZXJqdTAxLDM5MDAwMA0KMjAwNSxMQUEsQUwsZ3JlZ2drZTAxLDM2MDAwMA0KMjAwNSxMQUEsQUwscXVpbmxybzAxLDM2MDAwMA0KMjAwNSxMQUEsQUwscHJpbnpicjAxLDM0MjMyMg0KMjAwNSxMQUEsQUwsaGVuc2xtYTAxLDMxNzUwMA0KMjAwNSxMQUEsQUwsaXp0dXJtYTAxLDMxNzAwMA0KMjAwNSxMQUEsQUwsd29vZHNqYTAxLDMxNjAwMA0KMjAwNSxNSU4sQUwscmFka2VicjAxLDkwMDAwMDANCjIwMDUsTUlOLEFMLGh1bnRldG8wMSw4MDAwMDAwDQoyMDA1LE1JTixBTCxtYXlzam8wMSw3MjUwMDAwDQoyMDA1LE1JTixBTCxzdGV3YXNoMDEsNjAwMDAwMA0KMjAwNSxNSU4sQUwsam9uZXNqYTA0LDUwMDAwMDANCjIwMDUsTUlOLEFMLHNhbnRham8wMSw0NzUwMDAwDQoyMDA1LE1JTixBTCxsb2hzZWt5MDEsMjQwMDAwMA0KMjAwNSxNSU4sQUwsbmF0aGFqbzAxLDIxMDAwMDANCjIwMDUsTUlOLEFMLHNpbHZhY2EwMSwxNzUwMDAwDQoyMDA1LE1JTixBTCxyaXZhc2x1MDEsMTYyNTAwMA0KMjAwNSxNSU4sQUwscm9tZXJqYzAxLDEyNTAwMDANCjIwMDUsTUlOLEFMLGNhc3RyanUwMSwxMDAwMDAwDQoyMDA1LE1JTixBTCxyZWRtb21pMDEsOTAwMDAwDQoyMDA1LE1JTixBTCxsZWNyb21hMDEsNzUwMDAwDQoyMDA1LE1JTixBTCxyaW5jb2p1MDEsNDQwMDAwDQoyMDA1LE1JTixBTCxmb3JkbGUwMSwzODUwMDANCjIwMDUsTUlOLEFMLGN1ZGR5bWkwMSwzNDc1MDANCjIwMDUsTUlOLEFMLG1vcm5lanUwMSwzNDUwMDANCjIwMDUsTUlOLEFMLGJhbGZvZ3IwMSwzMzAwMDANCjIwMDUsTUlOLEFMLG1hdWVyam8wMSwzMjUwMDANCjIwMDUsTUlOLEFMLHB1bnRvbmkwMSwzMjUwMDANCjIwMDUsTUlOLEFMLGNyYWluamUwMSwzMjEwMDANCjIwMDUsTUlOLEFMLG1pbGxlY28wMSwzMjEwMDANCjIwMDUsTUlOLEFMLHJ5YW5taTAzLDMyMTAwMA0KMjAwNSxNSU4sQUwsZ3VlcnJtYTAyLDMxODUwMA0KMjAwNSxNSU4sQUwsYmFydGxqYTAxLDMxNjAwMA0KMjAwNSxNSU4sQUwsa3ViZWxqYTAxLDMxNjAwMA0KMjAwNSxOWUEsQUwscm9kcmlhbDAxLDI2MDAwMDAwDQoyMDA1LE5ZQSxBTCxqZXRlcmRlMDEsMTk2MDAwMDANCjIwMDUsTllBLEFMLG11c3NpbWkwMSwxOTAwMDAwMA0KMjAwNSxOWUEsQUwsam9obnNyYTA1LDE2MDAwMDAwDQoyMDA1LE5ZQSxBTCxicm93bmtlMDEsMTU3MTQyODYNCjIwMDUsTllBLEFMLGdpYW1iamEwMSwxMzQyODU3MQ0KMjAwNSxOWUEsQUwsc2hlZmZnYTAxLDEzMDAwMDAwDQoyMDA1LE5ZQSxBTCx3aWxsaWJlMDIsMTIzNTcxNDMNCjIwMDUsTllBLEFMLHBvc2Fkam8wMSwxMTAwMDAwMA0KMjAwNSxOWUEsQUwscml2ZXJtYTAxLDEwNTAwMDAwDQoyMDA1LE5ZQSxBTCxwYXZhbmNhMDEsOTAwMDAwMA0KMjAwNSxOWUEsQUwsbWF0c3VoaTAxLDgwMDAwMDANCjIwMDUsTllBLEFMLGthcnNhc3QwMSw2MDAwMDAwDQoyMDA1LE5ZQSxBTCx3cmlnaGphMDIsNTY2NjY2Nw0KMjAwNSxOWUEsQUwsc3RhbnRtaTAyLDQwMDAwMDANCjIwMDUsTllBLEFMLGdvcmRvdG8wMSwzNzUwMDAwDQoyMDA1LE5ZQSxBTCxyb2RyaWZlMDEsMzE1MDAwMA0KMjAwNSxOWUEsQUwscXVhbnRwYTAxLDMwMDAwMDANCjIwMDUsTllBLEFMLG1hcnRpdGkwMiwyNzUwMDAwDQoyMDA1LE5ZQSxBTCx3b21hY3RvMDEsMjAwMDAwMA0KMjAwNSxOWUEsQUwsc2llcnJydTAxLDE1MDAwMDANCjIwMDUsTllBLEFMLHN0dXJ0dGEwMSw4NTAwMDANCjIwMDUsTllBLEFMLGZsYWhlam8wMSw4MDAwMDANCjIwMDUsTllBLEFMLHNhbmNocmUwMSw2MDAwMDANCjIwMDUsTllBLEFMLGNyb3NiYnUwMSwzMjI5NTANCjIwMDUsTllBLEFMLHBoaWxsYW4wMSwzMTcyMDANCjIwMDUsT0FLLEFMLGtlbmRhamEwMSwxMDU3MTQyOQ0KMjAwNSxPQUssQUwsY2hhdmVlcjAxLDg1MDAwMDANCjIwMDUsT0FLLEFMLGtvdHNhbWEwMSw2NTAwMDAwDQoyMDA1LE9BSyxBTCx6aXRvYmEwMSw1NjAwMDAwDQoyMDA1LE9BSyxBTCxkb3RlbG9jMDEsNDc1MDAwMA0KMjAwNSxPQUssQUwsZHVyYXplcjAxLDQ3MDAwMDANCjIwMDUsT0FLLEFMLGhhdHRlc2MwMSwyNDUwMDAwDQoyMDA1LE9BSyxBTCxieXJuZWVyMDEsMjIwMDAwMA0KMjAwNSxPQUssQUwscmluY29yaTAxLDE5MDAwMDANCjIwMDUsT0FLLEFMLGJyYWRmY2gwMSwxNDAwMDAwDQoyMDA1LE9BSyxBTCxraWVsdGJvMDEsODc1MDAwDQoyMDA1LE9BSyxBTCx5YWJ1a2UwMSw3NTAwMDANCjIwMDUsT0FLLEFMLGNydXpqdTAyLDYwMDAwMA0KMjAwNSxPQUssQUwsZ2ludGVrZTAxLDU4MzMzMw0KMjAwNSxPQUssQUwsZWxsaXNtYTAxLDQwMDAwMA0KMjAwNSxPQUssQUwsbWVsaHVhZDAxLDM4NTAwMA0KMjAwNSxPQUssQUwsY3Jvc2JibzAxLDM1MDAwMA0KMjAwNSxPQUssQUwsaGFyZGVyaTAxLDMzNjUwMA0KMjAwNSxPQUssQUwsY2FsZXJraTAxLDMzMDAwMA0KMjAwNSxPQUssQUwsZHVjaHNqdTAxLDMyOTUwMA0KMjAwNSxPQUssQUwsaGFyZW5kYTAxLDMyMzUwMA0KMjAwNSxPQUssQUwsc2N1dGFtYTAxLDMyMzUwMA0KMjAwNSxPQUssQUwsdGhvbWFjaDAxLDMxOTAwMA0KMjAwNSxPQUssQUwsYmxhbnRqbzAxLDMxNjUwMA0KMjAwNSxPQUssQUwsc3dpc2huaTAxLDMxNjUwMA0KMjAwNSxPQUssQUwsc3RyZWVodTAxLDMxNjAwMA0KMjAwNSxTRUEsQUwsc3V6dWtpYzAxLDEyNTAwMDAwDQoyMDA1LFNFQSxBTCxiZWx0cmFkMDEsMTE0MDAwMDANCjIwMDUsU0VBLEFMLGJvb25lYnIwMSw5MDAwMDAwDQoyMDA1LFNFQSxBTCxtb3llcmphMDEsODAwMDAwMA0KMjAwNSxTRUEsQUwsZ3VhcmRlZDAxLDYwMDAwMDANCjIwMDUsU0VBLEFMLHNleHNvcmkwMSw2MDAwMDAwDQoyMDA1LFNFQSxBTCxwaW5laWpvMDEsNDcwMDAwMA0KMjAwNSxTRUEsQUwsaWJhbmVyYTAxLDQ0MTY2NjcNCjIwMDUsU0VBLEFMLHdpbm5yYTAxLDM3NTAwMDANCjIwMDUsU0VBLEFMLGhhc2Vnc2gwMSwzMjI1MDAwDQoyMDA1LFNFQSxBTCxzcGllenNjMDEsMzE2NjY2Nw0KMjAwNSxTRUEsQUwsZnJhbmtyeTAxLDI2MDAwMDANCjIwMDUsU0VBLEFMLG1lY2hlZ2kwMSwyNTM1MDAwDQoyMDA1LFNFQSxBTCx2aWxsb3JvMDEsMTk1MDAwMA0KMjAwNSxTRUEsQUwsd2lsc29kYTAxLDE3NTAwMDANCjIwMDUsU0VBLEFMLHJlZXNlcG8wMSw5MDAwMDANCjIwMDUsU0VBLEFMLHNlbGVhYTAxLDcwMDAwMA0KMjAwNSxTRUEsQUwsbmVsc29qZTAxLDQwMDAwMA0KMjAwNSxTRUEsQUwsb2xpdm9taTAxLDQwMDAwMA0KMjAwNSxTRUEsQUwsbWF0ZW9qdTAxLDM5MDAwMA0KMjAwNSxTRUEsQUwsYmxvb213aTAxLDM4NTAwMA0KMjAwNSxTRUEsQUwscHV0empqMDEsMzYwMDAwDQoyMDA1LFNFQSxBTCxzb3JpYXJhMDEsMzQwMDAwDQoyMDA1LFNFQSxBTCxtYWRyaWJvMDEsMzM1MDAwDQoyMDA1LFNFQSxBTCxqYWNvYmJ1MDIsMzI1MDAwDQoyMDA1LFNFQSxBTCxhdGNoaXNjMDEsMzIzMDAwDQoyMDA1LFNFQSxBTCx0aG9ybm1hMDEsMzIzMDAwDQoyMDA1LFNFQSxBTCxibGFja3RyMDEsMzE2MDAwDQoyMDA1LFNFQSxBTCxkb2Jic2dyMDEsMzE2MDAwDQoyMDA1LFNFQSxBTCxyZWVkamUwMywzMTYwMDANCjIwMDUsU0VBLEFMLHNuZWxsY2gwMiwzMTYwMDANCjIwMDUsU0VBLEFMLHZhbGRld2kwMSwzMTYwMDANCjIwMDUsVEJBLEFMLGh1ZmZhdTAxLDQ5MTY2NjcNCjIwMDUsVEJBLEFMLGJhZXpkYTAxLDM3NTAwMDANCjIwMDUsVEJBLEFMLGx1Z29qdTAxLDMyNTAwMDANCjIwMDUsVEJBLEFMLGhhbGx0bzAyLDE5NTAwMDANCjIwMDUsVEJBLEFMLGdvbnphYWwwMSwxNzUwMDAwDQoyMDA1LFRCQSxBTCxsZWV0cjAxLDEzMDAwMDANCjIwMDUsVEJBLEFMLGJyYXplZGUwMSwxMTI0MDAwDQoyMDA1LFRCQSxBTCxtaWxsZXRyMDIsMTEwMDAwMA0KMjAwNSxUQkEsQUwsZm9zc3VjYTAxLDk1MDAwMA0KMjAwNSxUQkEsQUwscGVyZXplZDAxLDk1MDAwMA0KMjAwNSxUQkEsQUwsYmVsbHJvMDEsODAwMDAwDQoyMDA1LFRCQSxBTCxub21vaGkwMSw4MDAwMDANCjIwMDUsVEJBLEFMLHBoZWxwam8wMSw4MDAwMDANCjIwMDUsVEJBLEFMLGhhcnBldHIwMSw3NDUwMDANCjIwMDUsVEJBLEFMLGNvbG9tamUwMSw2MDAwMDANCjIwMDUsVEJBLEFMLHNpbmdsY2gwMSw1NTAwMDANCjIwMDUsVEJBLEFMLGNyYXdmY2EwMiwzNzAwMDANCjIwMDUsVEJBLEFMLGJhbGRlcm8wMSwzNjkwMDANCjIwMDUsVEJBLEFMLGhlbmRybWEwMSwzNjI1MDANCjIwMDUsVEJBLEFMLGNhcnRlbGEwMiwzNjEwMDANCjIwMDUsVEJBLEFMLGNhc2hrZTAxLDMyNzUwMA0KMjAwNSxUQkEsQUwsZ3JlZW5uaTAxLDMyNTAwMA0KMjAwNSxUQkEsQUwsc2VheWJvMDEsMzI1MDAwDQoyMDA1LFRCQSxBTCxtY2NsdXNlMDEsMzIwMDAwDQoyMDA1LFRCQSxBTCxyZXN0b21pMDEsMzE4NTAwDQoyMDA1LFRCQSxBTCxjYW50dWpvMDEsMzE2OTAwDQoyMDA1LFRCQSxBTCxrYXptaXNjMDEsMzE2MDAwDQoyMDA1LFRCQSxBTCxudW5lemZyMDEsMzE2MDAwDQoyMDA1LFRCQSxBTCxzYW5jaGFsMDMsMzE2MDAwDQoyMDA1LFRFWCxBTCxwYXJrY2gwMSwxNTAwMDAwMA0KMjAwNSxURVgsQUwsc29yaWFhbDAxLDc1MDAwMDANCjIwMDUsVEVYLEFMLGhpZGFscmkwMSw1MDAwMDAwDQoyMDA1LFRFWCxBTCxjb3JkZWZyMDEsMzg3NTAwMA0KMjAwNSxURVgsQUwsdGVpeGVtYTAxLDM2MjUwMDANCjIwMDUsVEVYLEFMLHJvZ2Vya2UwMSwzNTAwMDAwDQoyMDA1LFRFWCxBTCx5b3VuZ21pMDIsMjU3NTAwMA0KMjAwNSxURVgsQUwsYmFyYWpybzAxLDE4NTAwMDANCjIwMDUsVEVYLEFMLGFsbWFuY2EwMSwxMTAwMDAwDQoyMDA1LFRFWCxBTCxtYXR0aGdhMDIsMTEwMDAwMA0KMjAwNSxURVgsQUwsYnJvY2FkbzAxLDEwMDAwMDANCjIwMDUsVEVYLEFMLGJsYWxvaGEwMSw4NTAwMDANCjIwMDUsVEVYLEFMLGRlbGx1ZGEwMSw4NTAwMDANCjIwMDUsVEVYLEFMLGFzdGFjcGUwMSw4MDAwMDANCjIwMDUsVEVYLEFMLG1haGF5cm8wMSw3NzUwMDANCjIwMDUsVEVYLEFMLGNvbGJyZ3IwMSw2NTAwMDANCjIwMDUsVEVYLEFMLGFsb21hc2EwMiw1NTAwMDANCjIwMDUsVEVYLEFMLGRyZXNlcnkwMSw1NTAwMDANCjIwMDUsVEVYLEFMLGRlcm9zbWEwMSw1MDAwMDANCjIwMDUsVEVYLEFMLHlvdW5nY2gwMyw0MDAwMDANCjIwMDUsVEVYLEFMLHNob3VzYnIwMSwzOTUwMDANCjIwMDUsVEVYLEFMLGFsbGVuY2gwMSwzODAwMDANCjIwMDUsVEVYLEFMLGJlbm9pam8wMSwzNzI1MDANCjIwMDUsVEVYLEFMLGRpY2tlcmEwMSwzNzI1MDANCjIwMDUsVEVYLEFMLG1lbmNoa2UwMSwzNDUwMDANCjIwMDUsVEVYLEFMLHJhbWlyZXIwMSwzMzI1MDANCjIwMDUsVEVYLEFMLHJpbGV5bWEwMSwzMjgwMDANCjIwMDUsVEVYLEFMLGZyYW5jZnIwMSwzMjE1MDANCjIwMDUsVEVYLEFMLGJ1a3ZpcnkwMSwzMTk1MDANCjIwMDUsVEVYLEFMLHJlZ2lsbmkwMSwzMTY1MDANCjIwMDUsVEVYLEFMLGdvbnphYWQwMSwzMTYwMDANCjIwMDUsVE9SLEFMLGhhbGxhcm8wMSwxMDUwMDAwMA0KMjAwNSxUT1IsQUwsYmF0aXNtaTAxLDQ3NTAwMDANCjIwMDUsVE9SLEFMLGhpbGxlc2gwMiwzODcwMDAwDQoyMDA1LFRPUixBTCxrb3NraWNvMDEsMzUwMDAwMA0KMjAwNSxUT1IsQUwsaGluc2tlcjAxLDMxMDAwMDANCjIwMDUsVE9SLEFMLGxpbGx5dGUwMSwzMTAwMDAwDQoyMDA1LFRPUixBTCx3ZWxsc3ZlMDEsMzA3MDAwMA0KMjAwNSxUT1IsQUwsY2F0YWxmcjAxLDI3MDAwMDANCjIwMDUsVE9SLEFMLHNjaG9lc2MwMSwyNTAwMDAwDQoyMDA1LFRPUixBTCxzcGVpZWp1MDEsMTkwMDAwMA0KMjAwNSxUT1IsQUwsemF1bmdyMDEsOTUwMDAwDQoyMDA1LFRPUixBTCxteWVyc2dyMDEsNzAwMDAwDQoyMDA1LFRPUixBTCxtZW5lY2ZyMDEsNjUwMDAwDQoyMDA1LFRPUixBTCxtY2RvbmpvMDMsNDAwMDAwDQoyMDA1LFRPUixBTCx3YWxrZXBlMDEsNDAwMDAwDQoyMDA1LFRPUixBTCxodWRzb29yMDEsMzY1MDAwDQoyMDA1LFRPUixBTCx0b3dlcmpvMDEsMzU4MDAwDQoyMDA1LFRPUixBTCxqb2huc3JlMDIsMzQyMDAwDQoyMDA1LFRPUixBTCxmcmFzb2phMDEsMzMyNTAwDQoyMDA1LFRPUixBTCxyaW9zYWwwMSwzMzEwMDANCjIwMDUsVE9SLEFMLGJ1c2hkYTAxLDMyNzAwMA0KMjAwNSxUT1IsQUwsY2h1bGt2aTAxLDMyNjAwMA0KMjAwNSxUT1IsQUwsYWRhbXNydTAxLDMxNjAwMA0KMjAwNSxUT1IsQUwsY2hhY2lndTAxLDMxNjAwMA0KMjAwNSxUT1IsQUwsbGVhZ3VicjAxLDMxNjAwMA0KMjAwNSxUT1IsQUwsZ3Jvc3NnYTAxLDMwMDAwMA0KMjAwNSxBUkksTkwsdmF6cXVqYTAxLDExMDAwMDAwDQoyMDA1LEFSSSxOTCxnb256YWx1MDEsMTAwODMzMzMNCjIwMDUsQVJJLE5MLGdsYXVzdHIwMSw5MDAwMDAwDQoyMDA1LEFSSSxOTCxncmVlbnNoMDEsNzgzMzMzMw0KMjAwNSxBUkksTkwsb3J0aXpydTAxLDczNzUwMDANCjIwMDUsQVJJLE5MLGNydXpqbzAyLDQwMDAwMDANCjIwMDUsQVJJLE5MLGVzdGVzc2gwMSwyNTAwMDAwDQoyMDA1LEFSSSxOTCxjbGF5dHJvMDEsMTM1MDAwMA0KMjAwNSxBUkksTkwsY291bnNjcjAxLDEzNTAwMDANCjIwMDUsQVJJLE5MLGtvcGxvbWkwMSw4MjUwMDANCjIwMDUsQVJJLE5MLGNsYXJrdG8wMiw3NTAwMDANCjIwMDUsQVJJLE5MLG1jY3JhcXUwMSw3NTAwMDANCjIwMDUsQVJJLE5MLHdlYmJicjAxLDcxNTAwMA0KMjAwNSxBUkksTkwsY2hvYXRyYTAxLDU1MDAwMA0KMjAwNSxBUkksTkwsY2ludHJhbDAxLDM2MDAwMA0KMjAwNSxBUkksTkwsdHJhY3ljaDAxLDMzNTAwMA0KMjAwNSxBUkksTkwsdmFsdmVqbzAxLDMzNTAwMA0KMjAwNSxBUkksTkwsa2F0YW1hMDEsMzMwMDAwDQoyMDA1LEFSSSxOTCxseW9uYnIwMSwzMzAwMDANCjIwMDUsQVJJLE5MLGFxdWluZ3IwMSwzMjUwMDANCjIwMDUsQVJJLE5MLGJydW5lYnIwMSwzMjI1MDANCjIwMDUsQVJJLE5MLHRlcnJlbHUwMSwzMjEwMDANCjIwMDUsQVJJLE5MLGdpbGplMDEsMzE4MDAwDQoyMDA1LEFSSSxOTCxoaWxsa28wMSwzMTgwMDANCjIwMDUsQVJJLE5MLHNueWRlY2gwMiwzMTgwMDANCjIwMDUsQVJJLE5MLGdvc2xpbWkwMSwzMTc1MDANCjIwMDUsQVJJLE5MLGhhbHNlYnIwMSwzMTc1MDANCjIwMDUsQVRMLE5MLGpvbmVzY2gwNiwxNjA2MTgwMg0KMjAwNSxBVEwsTkwsaGFtcHRtaTAxLDE1MTI1MDAwDQoyMDA1LEFUTCxOTCxqb25lc2FuMDEsMTMwMDAwMDANCjIwMDUsQVRMLE5MLHNtb2x0am8wMSw5MDAwMDAwDQoyMDA1LEFUTCxOTCxodWRzb3RpMDEsNjUwMDAwMA0KMjAwNSxBVEwsTkwsZnVyY2FyYTAxLDU2MDAwMDANCjIwMDUsQVRMLE5MLHRob21zam8wMSw0MjUwMDAwDQoyMDA1LEFUTCxOTCxrb2xiZGEwMSwzNDAwMDAwDQoyMDA1LEFUTCxOTCxnaWxlc21hMDEsMjM1MDAwMA0KMjAwNSxBVEwsTkwsbWFydGl0bzAyLDE5MDAwMDANCjIwMDUsQVRMLE5MLHJlaXRzY2gwMSwxNjUwMDAwDQoyMDA1LEFUTCxOTCxmcmFuY2p1MDEsMTAwMDAwMA0KMjAwNSxBVEwsTkwsbW9uZGVyYTAxLDEwMDAwMDANCjIwMDUsQVRMLE5MLGdyeWJva2UwMSw4Nzc1MDANCjIwMDUsQVRMLE5MLHNvc2FqbzAyLDY1MDAwMA0KMjAwNSxBVEwsTkwscGVyZXplZDAyLDYyNTAwMA0KMjAwNSxBVEwsTkwsam9yZGFicjAxLDYwMDAwMA0KMjAwNSxBVEwsTkwsZXN0cmFqbzAxLDQ2MDAwMA0KMjAwNSxBVEwsTkwsYmVybmVhZDAxLDQ1MDAwMA0KMjAwNSxBVEwsTkwscmFtaXJobzAxLDM3MDAwMA0KMjAwNSxBVEwsTkwsbGFyb2NhZDAxLDMzNzUwMA0KMjAwNSxBVEwsTkwsY29sb25ybzAxLDMxODUwMA0KMjAwNSxBVEwsTkwsYmV0ZW13aTAxLDMxNjAwMA0KMjAwNSxBVEwsTkwsbGFuZ2VyeTAxLDMxNjAwMA0KMjAwNSxBVEwsTkwsb3JycGUwMSwzMDAwMDANCjIwMDUsQ0hOLE5MLHdvb2RrZTAyLDk1MDAwMDANCjIwMDUsQ0hOLE5MLG1hZGR1Z3IwMSw5MDAwMDAwDQoyMDA1LENITixOTCxyYW1pcmFyMDEsODk1MDAwMA0KMjAwNSxDSE4sTkwsZ2FyY2lubzAxLDgyNTAwMDANCjIwMDUsQ0hOLE5MLGxlZWRlMDIsNzY2NjY2Nw0KMjAwNSxDSE4sTkwsYnVybmlqZTAxLDQ1MDAwMDANCjIwMDUsQ0hOLE5MLGhhd2tpbGEwMSw0NTAwMDAwDQoyMDA1LENITixOTCxyZW1saW1pMDEsNDIzMzMzMw0KMjAwNSxDSE4sTkwsemFtYnJjYTAxLDM3NjAwMDANCjIwMDUsQ0hOLE5MLHByaW9ybWEwMSwzNTUwMDAwDQoyMDA1LENITixOTCxiYXJyZW1pMDEsMzEzMzMzMw0KMjAwNSxDSE4sTkwscGF0dGVjbzAxLDI4MDAwMDANCjIwMDUsQ0hOLE5MLHdhbGtldG8wNCwyNTAwMDAwDQoyMDA1LENITixOTCxib3Jvd2pvMDEsMjMwMDAwMA0KMjAwNSxDSE4sTkwsZGVtcHNyeTAxLDIwMDAwMDANCjIwMDUsQ0hOLE5MLHJ1c2NoZ2wwMSwyMDAwMDAwDQoyMDA1LENITixOTCxoYWlyc2plMDIsMTgwMDAwMA0KMjAwNSxDSE4sTkwsYmxhbmNoZTAxLDEyMDAwMDANCjIwMDUsQ0hOLE5MLHBlcmV6bmUwMSwxMDAwMDAwDQoyMDA1LENITixOTCxob2xsYXRvMDEsOTAwMDAwDQoyMDA1LENITixOTCxtYWNpYWpvMDEsODI1MDAwDQoyMDA1LENITixOTCxmb3hjaDAyLDU3NTAwMA0KMjAwNSxDSE4sTkwsd2lsbGlzYzAxLDUwMDAwMA0KMjAwNSxDSE4sTkwsd2VsbGV0bzAxLDMyOTAwMA0KMjAwNSxDSE4sTkwsd3VlcnRtaTAxLDMyMjAwMA0KMjAwNSxDSE4sTkwsZHVib2lqYTAxLDMyMDAwMA0KMjAwNSxDSE4sTkwsYmFydG9jbDAxLDMxODYwMA0KMjAwNSxDSE4sTkwsbGVpY2VqbzAxLDMwMDAwMA0KMjAwNSxDSU4sTkwsZ3JpZmZrZTAyLDEyNTAwMDAwDQoyMDA1LENJTixOTCxjYXNleXNlMDEsNzgwMDAwMA0KMjAwNSxDSU4sTkwsZ3JhdmVkYTAxLDYyNTAwMDANCjIwMDUsQ0lOLE5MLG1pbHRvZXIwMSw1MzMzMzMzDQoyMDA1LENJTixOTCxkdW5uYWQwMSw0NjAwMDAwDQoyMDA1LENJTixOTCx3aWxzb3BhMDIsMzYwMDAwMA0KMjAwNSxDSU4sTkwsb3J0aXpyYTAxLDM1NTAwMDANCjIwMDUsQ0lOLE5MLGxhcnVlamEwMSwzMDAwMDAwDQoyMDA1LENJTixOTCxqaW1lbmRhMDEsMjg3MDAwMA0KMjAwNSxDSU4sTkwscmFuZGFqbzAxLDIxNTAwMDANCjIwMDUsQ0lOLE5MLG1lcmNra2UwMSwxMjUwMDAwDQoyMDA1LENJTixOTCx3ZWF0aGRhMDEsMTI1MDAwMA0KMjAwNSxDSU4sTkwsa2Vhcm5hdTAxLDkzMDAwMA0KMjAwNSxDSU4sTkwsYXVyaWxyaTAxLDYwMDAwMA0KMjAwNSxDSU4sTkwsd2ViZXJiZTAxLDYwMDAwMA0KMjAwNSxDSU4sTkwsY3J1emphMDEsNTAwMDAwDQoyMDA1LENJTixOTCx2YWxlbmphMDEsNDUwMDAwDQoyMDA1LENJTixOTCxoYXJhbmFhMDEsNDQwMDAwDQoyMDA1LENJTixOTCxwZW5hd2kwMSw0NDAwMDANCjIwMDUsQ0lOLE5MLGxvcGV6ZmUwMSw0MTUwMDANCjIwMDUsQ0lOLE5MLGZyZWVscnkwMSw0MDUwMDANCjIwMDUsQ0lOLE5MLHdhZ25lcnkwMSwzODAwMDANCjIwMDUsQ0lOLE5MLGJvbmdqdTAxLDM0MDAwMA0KMjAwNSxDSU4sTkwsaGFuY29qbzAxLDMyNzI1MA0KMjAwNSxDSU4sTkwsb2xtZWRyYTAxLDMyMjAwMA0KMjAwNSxDSU4sTkwsY2xhdXNicjAxLDMyMDAwMA0KMjAwNSxDSU4sTkwsdmFsZW5qbzA0LDMyMDAwMA0KMjAwNSxDSU4sTkwsaHVkc29sdTAxLDMxODAwMA0KMjAwNSxDSU4sTkwsYmVsaXNtYTAxLDMxNjAwMA0KMjAwNSxDSU4sTkwsbWFjaGFhbjAxLDMxNjAwMA0KMjAwNSxDT0wsTkwsaGVsdG90bzAxLDEyNjAwMDAwDQoyMDA1LENPTCxOTCx3aWxzb3ByMDEsMTI1MDAwMDANCjIwMDUsQ09MLE5MLGtpbWJ5MDEsNjU3NTAwMA0KMjAwNSxDT0wsTkwsamVubmlqYTAxLDI0MDAwMDANCjIwMDUsQ09MLE5MLGNoYWNvc2gwMSwyMzUwMDAwDQoyMDA1LENPTCxOTCxrZW5uZWpvMDQsMjIwMDAwMA0KMjAwNSxDT0wsTkwsbW9ocmR1MDEsOTUwMDAwDQoyMDA1LENPTCxOTCxyZWxhZmRlMDEsOTUwMDAwDQoyMDA1LENPTCxOTCxncmVlbnRvMDIsNjUwMDAwDQoyMDA1LENPTCxOTCx3cmlnaGphMDEsNTUwMDAwDQoyMDA1LENPTCxOTCxob2xsaW1hMDEsMzY2MDAwDQoyMDA1LENPTCxOTCxmdWVudGJyMDEsMzI4MDAwDQoyMDA1LENPTCxOTCxjb29rYWEwMSwzMjYwMDANCjIwMDUsQ09MLE5MLG1pbGVzYWEwMSwzMjYwMDANCjIwMDUsQ09MLE5MLGdvbnphbHUwMiwzMjQwMDANCjIwMDUsQ09MLE5MLGxvcGV6amEwMiwzMjEwMDANCjIwMDUsQ09MLE5MLGFtZXphYWwwMSwzMjAwMDANCjIwMDUsQ09MLE5MLGRvaG1hc2MwMSwzMTkwMDANCjIwMDUsQ09MLE5MLHNpbXBzYWwwMSwzMTgwMDANCjIwMDUsQ09MLE5MLGF0a2luZ2EwMSwzMTcwMDANCjIwMDUsQ09MLE5MLGJhcm1lY2wwMSwzMTcwMDANCjIwMDUsQ09MLE5MLGNsb3NzamQwMSwzMTcwMDANCjIwMDUsQ09MLE5MLGZyYW5jamUwMSwzMTcwMDANCjIwMDUsQ09MLE5MLGhhd3BlYnIwMSwzMTcwMDANCjIwMDUsQ09MLE5MLHRzYW9jaDAxLDMxNzAwMA0KMjAwNSxDT0wsTkwsYmFrZXJqZTAzLDMxNjAwMA0KMjAwNSxDT0wsTkwsY2FydmFtYTAxLDMxNjAwMA0KMjAwNSxDT0wsTkwsc3BlaWVyeTAxLDMxNjAwMA0KMjAwNSxDT0wsTkwsc3VsbGljbzAxLDMxNjAwMA0KMjAwNSxGTE8sTkwsbG93ZWxtaTAxLDc1MDAwMDANCjIwMDUsRkxPLE5MLGxlaXRlYWwwMSw3MDAwMDAwDQoyMDA1LEZMTyxOTCxjYXN0aWx1MDEsNTE2NjY2Nw0KMjAwNSxGTE8sTkwsbG9kdWNwYTAxLDQ2NjY2NjcNCjIwMDUsRkxPLE5MLGVuY2FyanUwMSw0NDM1MDAwDQoyMDA1LEZMTyxOTCxkZWxnYWNhMDEsNDAwMDAwMA0KMjAwNSxGTE8sTkwscGllcnJqdTAxLDM3MDAwMDANCjIwMDUsRkxPLE5MLGJ1cm5lYWowMSwzNjUwMDAwDQoyMDA1LEZMTyxOTCxnb256YWFsMDIsMzQwMDAwMA0KMjAwNSxGTE8sTkwsY29uaW5qZTAxLDMwMDAwMDANCjIwMDUsRkxPLE5MLG1vdGFndTAxLDI2MDAwMDANCjIwMDUsRkxPLE5MLGJlY2tlam8wMiwyNDAwMDAwDQoyMDA1LEZMTyxOTCx2YWxkZWlzMDEsMTUwMDAwMA0KMjAwNSxGTE8sTkwsam9uZXN0bzAyLDExMDAwMDANCjIwMDUsRkxPLE5MLG1lY2lyamkwMSwxMTAwMDAwDQoyMDA1LEZMTyxOTCxlYXNsZWRhMDEsNzUwMDAwDQoyMDA1LEZMTyxOTCxyaWVkbGpvMDEsNzUwMDAwDQoyMDA1LEZMTyxOTCxwZXJpc21hMDEsNDc1MDAwDQoyMDA1LEZMTyxOTCxoYXJyaWxlMDEsNDI1MDAwDQoyMDA1LEZMTyxOTCxtb2VobGJyMDEsNDAwMDAwDQoyMDA1LEZMTyxOTCx3aWxsaWRvMDMsMzc4NTAwDQoyMDA1LEZMTyxOTCxjYWJyZW1pMDEsMzcwMDAwDQoyMDA1LEZMTyxOTCxidW1wbmEwMSwzNjAwMDANCjIwMDUsRkxPLE5MLHNwb29udGkwMSwzNTAwMDANCjIwMDUsRkxPLE5MLGFndWlsY2gwMSwzMTYwMDANCjIwMDUsRkxPLE5MLHRyZWFubWEwMSwzMTYwMDANCjIwMDUsRkxPLE5MLGFsZm9uYW4wMSwzMDAwMDANCjIwMDUsSE9VLE5MLGJhZ3dlamUwMSwxODAwMDAwMA0KMjAwNSxIT1UsTkwsY2xlbWVybzAyLDE4MDAwMDAwDQoyMDA1LEhPVSxOTCxiZXJrbWxhMDEsMTA1MDAwMDANCjIwMDUsSE9VLE5MLHBldHRpYW4wMSw4NTAwMDAwDQoyMDA1LEhPVSxOTCxvc3dhbHJvMDEsNTkwMDAwMA0KMjAwNSxIT1UsTkwsYXVzbXVicjAxLDMwMDAwMDANCjIwMDUsSE9VLE5MLGJpZ2dpY3IwMSwzMDAwMDAwDQoyMDA1LEhPVSxOTCxsYW1ibWkwMSwxMzAwMDAwDQoyMDA1LEhPVSxOTCx2aXpjYWpvMDEsMTI1MDAwMA0KMjAwNSxIT1UsTkwscGFsbWVvcjAxLDgwMDAwMA0KMjAwNSxIT1UsTkwsZnJhbmNqbzAxLDcwMDAwMA0KMjAwNSxIT1UsTkwsc3ByaW5ydTAxLDU1MDAwMA0KMjAwNSxIT1UsTkwsZHVja3dicjAxLDUwMDAwMA0KMjAwNSxIT1UsTkwsbGlkZ2VicjAxLDUwMDAwMA0KMjAwNSxIT1UsTkwsZW5zYmVtbzAxLDQ1MDAwMA0KMjAwNSxIT1UsTkwsZXZlcmVhZDAxLDQ0NTAwMA0KMjAwNSxIT1UsTkwsaGFydmljaDAxLDM2NTAwMA0KMjAwNSxIT1UsTkwsd2hlZWxkYTAxLDM2NTAwMA0KMjAwNSxIT1UsTkwsY2hhdmVyYTAxLDM2MDAwMA0KMjAwNSxIT1UsTkwsYmFja2VicjAxLDM1MDAwMA0KMjAwNSxIT1UsTkwsbGFuZWphMDEsMzQ1MDAwDQoyMDA1LEhPVSxOTCxicnVudGVyMDEsMzM1MDAwDQoyMDA1LEhPVSxOTCxidXJrZWNoMDEsMzE2MDAwDQoyMDA1LEhPVSxOTCxxdWFsbGNoMDEsMzE2MDAwDQoyMDA1LEhPVSxOTCxzY290dGx1MDEsMzE2MDAwDQoyMDA1LEhPVSxOTCx0YXZlcndpMDEsMzE2MDAwDQoyMDA1LExBTixOTCxkcmVpZmRhMDEsMTM0MDAwMDANCjIwMDUsTEFOLE5MLGRyZXdqZDAxLDk0MDAwMDANCjIwMDUsTEFOLE5MLHdlYXZlamUwMSw5MzUwMDAwDQoyMDA1LExBTixOTCxnYWduZWVyMDEsODAwMDAwMA0KMjAwNSxMQU4sTkwsa2VudGplMDEsNzM1MDAwMA0KMjAwNSxMQU4sTkwsbG93ZWRlMDEsNzAwMDAwMA0KMjAwNSxMQU4sTkwscGVubnlicjAxLDUxMDAwMDANCjIwMDUsTEFOLE5MLHBlcmV6b2QwMSw0NTAwMDAwDQoyMDA1LExBTixOTCx2YWxlbmpvMDMsMzUwMDAwMA0KMjAwNSxMQU4sTkwsYnJhZGxtaTAxLDI1MDAwMDANCjIwMDUsTEFOLE5MLGl6dHVyY2UwMSwyMTUwMDAwDQoyMDA1LExBTixOTCxhbHZhcndpMDEsMjAwMDAwMA0KMjAwNSxMQU4sTkwsZGVzc2VlbDAxLDEzMDAwMDANCjIwMDUsTEFOLE5MLGxlZGVlcmkwMSwxMDAwMDAwDQoyMDA1LExBTixOTCxiYWtvcGEwMSw2NTAwMDANCjIwMDUsTEFOLE5MLHNhZW56b2wwMSw2NTAwMDANCjIwMDUsTEFOLE5MLHd1bnNja2UwMSw1NTAwMDANCjIwMDUsTEFOLE5MLGVyaWNrc2MwMSw1MjUwMDANCjIwMDUsTEFOLE5MLGNhcnJhZ2kwMSw1MDAwMDANCjIwMDUsTEFOLE5MLGNob2loZTAxLDM1MTUwMA0KMjAwNSxMQU4sTkwscGhpbGxqYTA0LDMzOTAwMA0KMjAwNSxMQU4sTkwsd2VydGhqYTAxLDMzNzAwMA0KMjAwNSxMQU4sTkwsc2FuY2hkdTAxLDMzMjAwMA0KMjAwNSxMQU4sTkwsY2FybHlidTAxLDMzMDAwMA0KMjAwNSxMQU4sTkwscGVyZXphbjAxLDMzMDAwMA0KMjAwNSxMQU4sTkwsZ3JhYm9qYTAxLDMyNzAwMA0KMjAwNSxMQU4sTkwsYnJhem95aDAxLDMxOTUwMA0KMjAwNSxMQU4sTkwsaG91bHRkajAxLDMxNjAwMA0KMjAwNSxMQU4sTkwscmVwa29qYTAxLDMxNjAwMA0KMjAwNSxMQU4sTkwsc2NobW9zdDAxLDMxNjAwMA0KMjAwNSxNSUwsTkwsbGVlY2EwMSw4MDAwMDAwDQoyMDA1LE1JTCxOTCxqZW5raWdlMDEsNzMzMzMzMw0KMjAwNSxNSUwsTkwsc2hlZXRiZTAxLDYwMDAwMDANCjIwMDUsTUlMLE5MLG1pbGxlZGEwMiwzMjUwMDAwDQoyMDA1LE1JTCxOTCxoZWxtc3dlMDEsMjgxMjUwMA0KMjAwNSxNSUwsTkwsc3BpdmVqdTAxLDIxMjUwMDANCjIwMDUsTUlMLE5MLGRhdmlzZG8wMiwyMDUwMDAwDQoyMDA1LE1JTCxOTCxjbGFya2JyMDIsMTE1MDAwMA0KMjAwNSxNSUwsTkwsYm90dGFyaTAxLDgwMDAwMA0KMjAwNSxNSUwsTkwsYnJhbnlydTAxLDgwMDAwMA0KMjAwNSxNSUwsTkwsbW9lbGxjaDAxLDcwMDAwMA0KMjAwNSxNSUwsTkwsb3ZlcmJseTAxLDQ0NjAwMA0KMjAwNSxNSUwsTkwsc2FudG92aTAxLDQyMDAwMA0KMjAwNSxNSUwsTkwsZ2xvdmVnYTAxLDM5MDAwMA0KMjAwNSxNSUwsTkwscGhlbHB0bzAxLDM2MDAwMA0KMjAwNSxNSUwsTkwsd2lzZW1hMDEsMzQ1MDAwDQoyMDA1LE1JTCxOTCxoYWxsYmkwMywzNDQwMDANCjIwMDUsTUlMLE5MLG9iZXJtd2UwMSwzNDIwMDANCjIwMDUsTUlMLE5MLGNhcHVhY2gwMSwzNDAwMDANCjIwMDUsTUlMLE5MLGFkYW1zbWkwMywzMzEwMDANCjIwMDUsTUlMLE5MLG1hZ3J1Y2gwMSwzMjUwMDANCjIwMDUsTUlMLE5MLHR1cm5iZGUwMSwzMjIwMDANCjIwMDUsTUlMLE5MLGRlbGFyam8wMSwzMTcwMDANCjIwMDUsTUlMLE5MLGNpcmlsamUwMSwzMTYwMDANCjIwMDUsTUlMLE5MLGhhcmR5amowMSwzMTYwMDANCjIwMDUsTllOLE5MLHBpYXp6bWkwMSwxNjA3MTQyOQ0KMjAwNSxOWU4sTkwsYmVsdHJjYTAxLDExNTcxNDI5DQoyMDA1LE5ZTixOTCxtYXJ0aXBlMDIsMTA4NzUwMDANCjIwMDUsTllOLE5MLGdsYXZpdG8wMiwxMDc2NTYwOA0KMjAwNSxOWU4sTkwsY2FtZXJtaTAxLDczMzMzMzMNCjIwMDUsTllOLE5MLG1hdHN1a2EwMSw3MDMzMzMzDQoyMDA1LE5ZTixOTCx0cmFjaHN0MDEsNjc4MjUwMA0KMjAwNSxOWU4sTkwsZmxveWRjbDAxLDY2MTY4NTYNCjIwMDUsTllOLE5MLGJlbnNva3IwMSw1MzMzMzMzDQoyMDA1LE5ZTixOTCxtaWVudGRvMDEsMzc1MDAwMA0KMjAwNSxOWU4sTkwsaXNoaWlrYTAxLDM1NzUwMDANCjIwMDUsTllOLE5MLHphbWJydmkwMSwyMTAwMDAwDQoyMDA1LE5ZTixOTCxoZXJlZGZlMDEsMTgwMDAwMA0KMjAwNSxOWU4sTkwsZGVqZWFtaTAxLDExNTAwMDANCjIwMDUsTllOLE5MLGNhaXJvbWkwMSw5MDAwMDANCjIwMDUsTllOLE5MLGxvb3BlYnIwMSw4MDAwMDANCjIwMDUsTllOLE5MLHdvb2R3Y2gwMSw3MDAwMDANCjIwMDUsTllOLE5MLGhlcm5hcm8wMSw2NTAwMDANCjIwMDUsTllOLE5MLGNhc3RycmEwMSw1MDAwMDANCjIwMDUsTllOLE5MLG1hdHRobWkwMSw1MDAwMDANCjIwMDUsTllOLE5MLGtvb2RhMDEsNDUwMDAwDQoyMDA1LE5ZTixOTCxheWJhcm1hMDEsNDI1MDAwDQoyMDA1LE5ZTixOTCxyZXllc2pvMDEsMzMyMDAwDQoyMDA1LE5ZTixOTCx2YWxlbmVyMDEsMzMyMDAwDQoyMDA1LE5ZTixOTCx3cmlnaGRhMDMsMzIyNTAwDQoyMDA1LE5ZTixOTCx5YXRlc3R5MDEsMzE5NTAwDQoyMDA1LE5ZTixOTCxmb3J0dWJhMDEsMzE3MDAwDQoyMDA1LFBISSxOTCx0aG9tZWppMDEsMTMxNjY2NjcNCjIwMDUsUEhJLE5MLGFicmV1Ym8wMSwxMzEwMDAwMA0KMjAwNSxQSEksTkwsd2FnbmViaTAyLDkwMDAwMDANCjIwMDUsUEhJLE5MLGxpZWJlbWkwMSw3NTAwMDAwDQoyMDA1LFBISSxOTCxidXJyZXBhMDEsNzI1MDAwMA0KMjAwNSxQSEksTkwsd29sZnJhMDIsNjYyNTAwMA0KMjAwNSxQSEksTkwsbGllYmVqbzAxLDU1ODMzMzMNCjIwMDUsUEhJLE5MLGJlbGxkYTAxLDQ3MDAwMDANCjIwMDUsUEhJLE5MLHBvbGFucGwwMSw0NjAwMDAwDQoyMDA1LFBISSxOTCxyb2xsaWppMDEsMzg1MDAwMA0KMjAwNSxQSEksTkwscGFkaWx2aTAxLDMyMDAwMDANCjIwMDUsUEhJLE5MLGxvZnRva2UwMSwzMTAwMDAwDQoyMDA1LFBISSxOTCx3b3JyZXRpMDEsMzA1MDAwMA0KMjAwNSxQSEksTkwsbGlkbGVjbzAxLDMwMDAwMDANCjIwMDUsUEhJLE5MLGNvcm1pcmgwMSwyMjUwMDAwDQoyMDA1LFBISSxOTCxtaWNoYWphMDEsODI1MDAwDQoyMDA1LFBISSxOTCxwcmF0dHRvMDIsNzUwMDAwDQoyMDA1LFBISSxOTCxwZXJlenRvMDMsNjUwMDAwDQoyMDA1LFBISSxOTCxmdWx0emFhMDEsNTUwMDAwDQoyMDA1LFBISSxOTCxhZGFtc3RlMDEsNTAwMDAwDQoyMDA1LFBISSxOTCxvZmZlcmpvMDEsNTAwMDAwDQoyMDA1LFBISSxOTCxteWVyc2JyMDEsNDQ1MDAwDQoyMDA1LFBISSxOTCxtYWRzb3J5MDEsMzUwMDAwDQoyMDA1LFBISSxOTCx1dGxleWNoMDEsMzQ1MDAwDQoyMDA1LFBISSxOTCxmbG95ZGdhMDEsMzE2MDAwDQoyMDA1LFBISSxOTCxsaXJpYXBlMDEsMzE2MDAwDQoyMDA1LFBJVCxOTCxsYXd0b21hMDIsNzc1MDAwMA0KMjAwNSxQSVQsTkwscmVkbWFtYTAxLDQ1MDAwMDANCjIwMDUsUElULE5MLHdpbHNvamEwMiwzMjUwMDAwDQoyMDA1LFBJVCxOTCx3ZWxsc2tpMDEsMzE3NTAwMA0KMjAwNSxQSVQsTkwsd2lsc29jcjAzLDMwMDAwMDANCjIwMDUsUElULE5MLGZvZ2dqbzAxLDIxNTAwMDANCjIwMDUsUElULE5MLHNhbnRpYmUwMSwyMTUwMDAwDQoyMDA1LFBJVCxOTCxtZXNham8wMSwyMDAwMDAwDQoyMDA1LFBJVCxOTCxtYWNrb3JvMDEsMTUwMDAwMA0KMjAwNSxQSVQsTkwsbWVhZG9icjAxLDExMjUwMDANCjIwMDUsUElULE5MLHRvcnJlc2EwMSwxMTAwMDAwDQoyMDA1LFBJVCxOTCx3YXJkZGEwMSw5NTAwMDANCjIwMDUsUElULE5MLHdoaXRlcmkwMSw0NzUwMDANCjIwMDUsUElULE5MLHBlcmV6b2wwMSwzODEwMDANCjIwMDUsUElULE5MLGJheWphMDEsMzU1MDAwDQoyMDA1LFBJVCxOTCx3aWdnaXR5MDEsMzQyMDAwDQoyMDA1LFBJVCxOTCxyb3NzZGEwMSwzMzg1MDANCjIwMDUsUElULE5MLHJlZG1hdGkwMSwzMzY1MDANCjIwMDUsUElULE5MLHZvZ2VscnkwMSwzMzIwMDANCjIwMDUsUElULE5MLGdvbnphbWkwMiwzMzAwMDANCjIwMDUsUElULE5MLHdpbGxpZGEwNywzMzAwMDANCjIwMDUsUElULE5MLGNhc3Rpam8wMiwzMjcwMDANCjIwMDUsUElULE5MLGdyYWJvam8wMiwzMjcwMDANCjIwMDUsUElULE5MLGhpbGxibzAxLDMyNjAwMA0KMjAwNSxQSVQsTkwsY290YWh1MDEsMzI0MDAwDQoyMDA1LFBJVCxOTCxzYW5jaGZyMDEsMzIyMDAwDQoyMDA1LFBJVCxOTCxidXJuZXNlMDEsMzIxMDAwDQoyMDA1LFBJVCxOTCx2YW5iZWpvMDEsMzE2MDAwDQoyMDA1LFNETixOTCxuZXZpbnBoMDEsOTYyNTAwMA0KMjAwNSxTRE4sTkwsa2xlc2tyeTAxLDkwMDAwMDANCjIwMDUsU0ROLE5MLGdpbGVzYnIwMiw4MzMzMzMzDQoyMDA1LFNETixOTCxob2ZmbXRyMDEsNTAwMDAwMA0KMjAwNSxTRE4sTkwsaGVybmFyYTAyLDQzMTI1MDANCjIwMDUsU0ROLE5MLGVhdG9uYWQwMSwzMzc1MDAwDQoyMDA1LFNETixOTCxtYXlkYTAyLDMyMjUwMDANCjIwMDUsU0ROLE5MLHdpbGxpd28wMiwzMDAwMDAwDQoyMDA1LFNETixOTCxsb3JldG1hMDEsMjc1MDAwMA0KMjAwNSxTRE4sTkwsbGF3cmVicjAyLDIzNzUwMDANCjIwMDUsU0ROLE5MLGJ1cnJvc2UwMSwxNjc1MDAwDQoyMDA1LFNETixOTCxyb2JlcmRhMDcsMTM1MDAwMA0KMjAwNSxTRE4sTkwsbGluZWJzYzAxLDkxMDAwMA0KMjAwNSxTRE4sTkwseW91bmdlcjAxLDg1MDAwMA0KMjAwNSxTRE4sTkwsb3RzdWthazAxLDgwMDAwMA0KMjAwNSxTRE4sTkwsaGFtbW9jaDAxLDc1MDAwMA0KMjAwNSxTRE4sTkwscGVhdnlqYTAxLDc1MDAwMA0KMjAwNSxTRE4sTkwscmVkZGl0aTAxLDc1MDAwMA0KMjAwNSxTRE4sTkwsYmx1bWdlMDEsNTc1MDAwDQoyMDA1LFNETixOTCxzd2Vlbm1hMDEsNTc1MDAwDQoyMDA1LFNETixOTCxyZXllc2RlMDEsNTUwMDAwDQoyMDA1LFNETixOTCxzZWFuZXJ1MDEsNTUwMDAwDQoyMDA1LFNETixOTCxuYWR5eGEwMSw0ODgwMDANCjIwMDUsU0ROLE5MLGh5emR1YWQwMSwzNzUwMDANCjIwMDUsU0ROLE5MLGdyZWVua2gwMSwzNTUwMDANCjIwMDUsU0ROLE5MLGFzZW5jbWkwMSwzNTAwMDANCjIwMDUsU0ROLE5MLG9qZWRhbWkwMSwzMjUwMDANCjIwMDUsU0ROLE5MLGd1em1hZnIwMSwzMTcwMDANCjIwMDUsU0ZOLE5MLGJvbmRzYmEwMSwyMjAwMDAwMA0KMjAwNSxTRk4sTkwsc2NobWlqYTAxLDgxODc1MDANCjIwMDUsU0ZOLE5MLGFsZm9uZWQwMSw3NTAwMDAwDQoyMDA1LFNGTixOTCxhbG91bW8wMSw3MjUwMDAwDQoyMDA1LFNGTixOTCxkdXJoYXJhMDEsNzIwMDAwMA0KMjAwNSxTRk4sTkwscnVldGVraTAxLDcxMzMzMzMNCjIwMDUsU0ZOLE5MLGJlbml0YXIwMSw0OTY2NjY3DQoyMDA1LFNGTixOTCx2aXpxdW9tMDEsMzI1MDAwMA0KMjAwNSxTRk4sTkwsZ3Jpc3NtYTAyLDI3NTAwMDANCjIwMDUsU0ZOLE5MLHRvbWtvYnIwMSwyNjUwMDAwDQoyMDA1LFNGTixOTCxmZWxpenBlMDEsMjMyNTAwMA0KMjAwNSxTRk4sTkwsbWF0aGVtaTAxLDIwMDAwMDANCjIwMDUsU0ZOLE5MLHNub3dqdDAxLDIwMDAwMDANCjIwMDUsU0ZOLE5MLHR1Y2tlbWkwMSwyMDAwMDAwDQoyMDA1LFNGTixOTCxoZXJnZW1hMDEsMTYwMDAwMA0KMjAwNSxTRk4sTkwsZXlyZXNjMDEsMTU0MDAwMA0KMjAwNSxTRk4sTkwsYnJvd2VqaTAxLDExNjI1MDANCjIwMDUsU0ZOLE5MLGNocmlzamEwMSwxMDUwMDAwDQoyMDA1LFNGTixOTCxjcnV6ZGUwMSw4MDAwMDANCjIwMDUsU0ZOLE5MLHRvcnJleW8wMSw3MTUwMDANCjIwMDUsU0ZOLE5MLGZhc3NlamUwMSw1MDAwMDANCjIwMDUsU0ZOLE5MLHdpbGxpamUwMiwzMzYwMDANCjIwMDUsU0ZOLE5MLHdhbGtldHkwMSwzMjYwMDANCjIwMDUsU0ZOLE5MLGxvd3J5bm8wMSwzMjI1MDANCjIwMDUsU0ZOLE5MLHRvcmNhdG8wMSwzMTg1MDANCjIwMDUsU0ZOLE5MLGVsbGlzamEwMSwzMTY1MDANCjIwMDUsU0xOLE5MLHdhbGtlbGEwMSwxMjY2NjY2Nw0KMjAwNSxTTE4sTkwscm9sZW5zYzAxLDExNjI1MDAwDQoyMDA1LFNMTixOTCxwdWpvbGFsMDEsMTEwMDAwMDANCjIwMDUsU0xOLE5MLGVkbW9uamkwMSwxMDMzMzMzMw0KMjAwNSxTTE4sTkwsaXNyaW5qYTAxLDcwMDAwMDANCjIwMDUsU0xOLE5MLG11bGRlbWEwMSw2MDUwMDAwDQoyMDA1LFNMTixOTCxjZWRlbnJvMDEsNTUwMDAwMA0KMjAwNSxTTE4sTkwsc2FuZGVyZTAyLDQwMDAwMDANCjIwMDUsU0xOLE5MLHN1cHBhamUwMSw0MDAwMDAwDQoyMDA1LFNMTixOTCxtYXJxdWphMDEsMzAwMDAwMA0KMjAwNSxTTE4sTkwsdGF2YXJqdTAxLDI2MDAwMDANCjIwMDUsU0xOLE5MLG1vcnJpbWEwMSwyNTAwMDAwDQoyMDA1LFNMTixOTCxlY2tzdGRhMDEsMjMzMzMzMw0KMjAwNSxTTE4sTkwsY2FycGVjaDAxLDIwMDAwMDANCjIwMDUsU0xOLE5MLGtpbmdyYTAxLDE4NTAwMDANCjIwMDUsU0xOLE5MLGdydWR6bWEwMSwxMDAwMDAwDQoyMDA1LFNMTixOTCxtYWJyeWpvMDEsNzI1MDAwDQoyMDA1LFNMTixOTCxkaWF6ZWkwMSw2MDAwMDANCjIwMDUsU0xOLE5MLGVsZHJlY2EwMSw2MDAwMDANCjIwMDUsU0xOLE5MLHRhZ3Vjc28wMSw1NTAwMDANCjIwMDUsU0xOLE5MLHJleWVzYWwwMSw0NTAwMDANCjIwMDUsU0xOLE5MLGFua2llcmkwMSw0MDAwMDANCjIwMDUsU0xOLE5MLGxpbmNvbWkwMSwzNjAwMDANCjIwMDUsU0xOLE5MLG1vbGlueWEwMSwzMjM1MDANCjIwMDUsU0xOLE5MLGZsb3JlcmEwMSwzMjAwMDANCjIwMDUsU0xOLE5MLGx1bmFoZTAxLDMyMDAwMA0KMjAwNSxXQVMsTkwsaGVybmFsaTAxLDgwMDAwMDANCjIwMDUsV0FTLE5MLHZpZHJvam8wMSw3MDAwMDAwDQoyMDA1LFdBUyxOTCxndXptYWNyMDEsNDIwMDAwMA0KMjAwNSxXQVMsTkwsZ3VpbGxqbzAxLDM1MDAwMDANCjIwMDUsV0FTLE5MLHdpbGtlYnIwMSwzMDUwMDAwDQoyMDA1LFdBUyxOTCxjYXN0aXZpMDIsMzAwMDAwMA0KMjAwNSxXQVMsTkwsbG9haXplczAxLDI5MDAwMDANCjIwMDUsV0FTLE5MLG9oa2F0bzAxLDI3NTAwMDANCjIwMDUsV0FTLE5MLGFybWFzdG8wMiwyMjYwMDAwDQoyMDA1LFdBUyxOTCxzY2huZWJyMDEsMjAwMDAwMA0KMjAwNSxXQVMsTkwsam9obnNuaTAxLDE0NTAwMDANCjIwMDUsV0FTLE5MLGVpc2Noam8wMSwxMDQwMDAwDQoyMDA1LFdBUyxOTCxvc3VuYWFuMDEsODAwMDAwDQoyMDA1LFdBUyxOTCxiZW5uZWdhMDEsNzUwMDAwDQoyMDA1LFdBUyxOTCx0dWNrZXRqMDEsNjU3MDAwDQoyMDA1LFdBUyxOTCxjb3JkZXdpMDEsNjAwMDAwDQoyMDA1LFdBUyxOTCxheWFsYWx1MDEsMzYzMDAwDQoyMDA1LFdBUyxOTCxkYXl6YTAxLDM1NzUwMA0KMjAwNSxXQVMsTkwsY29yZGVjaDAxLDM0NjUwMA0KMjAwNSxXQVMsTkwsc2xlZGd0ZTAxLDM0NTAwMA0KMjAwNSxXQVMsTkwsY2Fycm9qYTAxLDMzNTAwMA0KMjAwNSxXQVMsTkwsZXNjb2JhbDAxLDMyNjAwMA0KMjAwNSxXQVMsTkwsdmFyZ2FjbDAxLDMyNTAwMA0KMjAwNSxXQVMsTkwscGF0dGVqbzAyLDMyMjUwMA0KMjAwNSxXQVMsTkwsaG9yZ2FqbzAxLDMxOTAwMA0KMjAwNSxXQVMsTkwsYmVsdHJmcjAxLDMxODUwMA0KMjAwNSxXQVMsTkwsbWF0ZW9oZTAxLDMxODAwMA0KMjAwNSxXQVMsTkwsZGF2aXNqajAxLDMxNjUwMA0KMjAwNSxXQVMsTkwsYmxhbmN0bzAxLDMxNjAwMA0KMjAwNSxXQVMsTkwsY2h1cmNyeTAxLDMxNjAwMA0KMjAwNixCQUwsQUwsdGVqYWRtaTAxLDExODExNDE1DQoyMDA2LEJBTCxBTCxsb3BlemphMDEsOTAwMDAwMA0KMjAwNixCQUwsQUwsYmVuc29rcjAxLDgzMzMzMzMNCjIwMDYsQkFMLEFMLGhhd2tpbGEwMSw0NDAwMDAwDQoyMDA2LEJBTCxBTCxtb3JhbWUwMSw0MzMzMzM0DQoyMDA2LEJBTCxBTCxnaWJib2phMDEsNDIwMDAwMA0KMjAwNixCQUwsQUwsaGVybmFyYTAyLDQwMDAwMDANCjIwMDYsQkFMLEFMLGNoZW5icjAxLDM4MDAwMDANCjIwMDYsQkFMLEFMLGxvcGV6cm8wMSwzNzUwMDAwDQoyMDA2LEJBTCxBTCxyb2JlcmJyMDEsMzA3NTAwMA0KMjAwNixCQUwsQUwscGF0dGVjbzAxLDI4MDAwMDANCjIwMDYsQkFMLEFMLG1pbGxha2UwMSwyMTAwMDAwDQoyMDA2LEJBTCxBTCxjb25pbmplMDEsMTcwMDAwMA0KMjAwNixCQUwsQUwsbWF0b3NsdTAxLDE2MjUwMDANCjIwMDYsQkFMLEFMLGJlZGFyZXIwMSwxNDAwMDAwDQoyMDA2LEJBTCxBTCxnb21lemNoMDIsODUwMDAwDQoyMDA2LEJBTCxBTCx3aWxsaXRvMDIsNzc1MDAwDQoyMDA2LEJBTCxBTCxicm93ZWppMDEsNzAwMDAwDQoyMDA2LEJBTCxBTCxwYXJyaWpvMDEsNjEyNTAwDQoyMDA2LEJBTCxBTCxuZXdoYWRhMDEsNTUwMDAwDQoyMDA2LEJBTCxBTCxjaGF2ZXJhMDEsNDAwMDAwDQoyMDA2LEJBTCxBTCxjYWJyZWRhMDEsMzg1MDAwDQoyMDA2LEJBTCxBTCxieXJkYXRpMDEsMzM1MDAwDQoyMDA2LEJBTCxBTCxyYXljaDAxLDMzNTAwMA0KMjAwNixCQUwsQUwsZHVib3NlcjAxLDMzNDAwMA0KMjAwNixCQUwsQUwsbWFya2FuaTAxLDMyNzAwMA0KMjAwNixCQUwsQUwscmFrZXJhYTAxLDMyNzAwMA0KMjAwNixCQUwsQUwscmxlYWxzZTAxLDMyNzAwMA0KMjAwNixCT1MsQUwscmFtaXJtYTAyLDE4Mjc5MjM4DQoyMDA2LEJPUyxBTCxzY2hpbGN1MDEsMTMwMDAwMDANCjIwMDYsQk9TLEFMLHZhcml0amEwMSwxMDAwMDAwMA0KMjAwNixCT1MsQUwsY2xlbWVtYTAxLDk4MjUwMDANCjIwMDYsQk9TLEFMLGxvd2VsbWkwMSw5MDAwMDAwDQoyMDA2LEJPUyxBTCxmb3Vsa2tlMDEsNzc1MDAwMA0KMjAwNixCT1MsQUwsbml4b250cjAxLDc1MDAwMDANCjIwMDYsQk9TLEFMLG9ydGl6ZGEwMSw2NTAwMDAwDQoyMDA2LEJPUyxBTCxiZWNrZWpvMDIsNDMyNTAwMA0KMjAwNixCT1MsQUwsd2VsbHNkYTAxLDQwNzUwMDANCjIwMDYsQk9TLEFMLHdha2VmdGkwMSw0MDAwMDAwDQoyMDA2LEJPUyxBTCx0YXZhcmp1MDEsMzM1MDAwMA0KMjAwNixCT1MsQUwsbG9yZXRtYTAxLDMyNTAwMDANCjIwMDYsQk9TLEFMLHRpbWxpbWkwMSwzMDIzODk0DQoyMDA2LEJPUyxBTCxjcmlzcGNvMDEsMjc1MDAwMA0KMjAwNixCT1MsQUwsZ29uemFhbDAyLDI2ODI1OTINCjIwMDYsQk9TLEFMLHNub3dqdDAxLDIwMDAwMDANCjIwMDYsQk9TLEFMLHNlYW5lcnUwMSwxOTAwMDAwDQoyMDA2LEJPUyxBTCxyaXNrZWRhMDEsMTgwMDAwMA0KMjAwNixCT1MsQUwsY29yYWFsMDEsMTQwMDAwMA0KMjAwNixCT1MsQUwscGVuYXdpMDEsMTI1MDAwMA0KMjAwNixCT1MsQUwsY2hvaWhlMDEsNzI1MDAwDQoyMDA2LEJPUyxBTCx5b3VrbGtlMDEsMzU0NjAwDQoyMDA2LEJPUyxBTCxiYXJkam8wMSwzNTM0MDANCjIwMDYsQk9TLEFMLGRpbmFybGUwMSwzMzU3MDANCjIwMDYsQk9TLEFMLHBhcGVsam8wMSwzMzU0MDANCjIwMDYsQk9TLEFMLHN0ZXJuYWQwMSwzMzUwMDANCjIwMDYsQ0hBLEFMLHRob21lamkwMSwxNDE2NjY2Nw0KMjAwNixDSEEsQUwsa29uZXJwYTAxLDEyMDAwMDAwDQoyMDA2LENIQSxBTCx2YXpxdWphMDEsMTIwMDAwMDANCjIwMDYsQ0hBLEFMLGNvbnRyam8wMSw5NTAwMDAwDQoyMDA2LENIQSxBTCxnYXJjaWZyMDIsOTAwMDAwMA0KMjAwNixDSEEsQUwsYnVlaHJtYTAxLDgwMDAwMDANCjIwMDYsQ0hBLEFMLGdhcmxham8wMSw3MDAwMDAwDQoyMDA2LENIQSxBTCxkeWVqZTAxLDUwMDAwMDANCjIwMDYsQ0hBLEFMLHBpZXJ6YWowMSw0MDAwMDAwDQoyMDA2LENIQSxBTCxoZXJtYWR1MDEsMzE1MDAwMA0KMjAwNixDSEEsQUwsdXJpYmVqdTAxLDMxNTAwMDANCjIwMDYsQ0hBLEFMLGNyZWRlam8wMSwyNjc1MDAwDQoyMDA2LENIQSxBTCxpZ3VjaHRhMDEsMjQwMDAwMA0KMjAwNixDSEEsQUwsbWFja29ybzAxLDIyNTAwMDANCjIwMDYsQ0hBLEFMLHBvZHNlc2MwMSwyMDc1MDAwDQoyMDA2LENIQSxBTCxjaW50cmFsMDEsMTYwMDAwMA0KMjAwNixDSEEsQUwscG9saXRjbDAxLDEyMDAwMDANCjIwMDYsQ0hBLEFMLHdpZGdlY2gwMSw2NTAwMDANCjIwMDYsQ0hBLEFMLG96dW5hcGEwMSw1MDAwMDANCjIwMDYsQ0hBLEFMLGNvdHRzbmUwMSw0MDAwMDANCjIwMDYsQ0hBLEFMLHRob3JubWEwMSwzNTUwMDANCjIwMDYsQ0hBLEFMLGdsb2Fkcm8wMSwzNTAwMDANCjIwMDYsQ0hBLEFMLGplbmtzYm8wMSwzNDAwMDANCjIwMDYsQ0hBLEFMLG1jY2FyYnIwMSwzMzIwMDANCjIwMDYsQ0hBLEFMLGFuZGVyYnIwMywzMzAwMDANCjIwMDYsQ0hBLEFMLGxvZ2FuYm8wMiwzMjcwMDANCjIwMDYsQ0xFLEFMLGJ5cmRwYTAxLDcwMDAwMDANCjIwMDYsQ0xFLEFMLHNhYmF0Y2MwMSw3MDAwMDAwDQoyMDA2LENMRSxBTCx3aWNrbWJvMDEsNTAwMDAwMA0KMjAwNixDTEUsQUwsd2VzdGJqYTAxLDQyNTAwMDANCjIwMDYsQ0xFLEFMLGJlbGxpcm8wMSw0MDAwMDAwDQoyMDA2LENMRSxBTCxib29uZWFhMDEsMzc1MDAwMA0KMjAwNixDTEUsQUwsam9obnNqYTAyLDM1MDAwMDANCjIwMDYsQ0xFLEFMLGJsYWtlY2EwMSwzMDUwMDAwDQoyMDA2LENMRSxBTCxtb3RhZ3UwMSwzMDAwMDAwDQoyMDA2LENMRSxBTCxoYWZuZXRyMDEsMjcwMDAwMA0KMjAwNixDTEUsQUwsYnJvdXNiZTAxLDI0ODc1MDANCjIwMDYsQ0xFLEFMLHBlcmV6ZWQwMSwxNzUwMDAwDQoyMDA2LENMRSxBTCxtaWNoYWphMDEsMTUwMDAwMA0KMjAwNixDTEUsQUwsc2F1ZXJzYzAxLDEyMDAwMDANCjIwMDYsQ0xFLEFMLG1hcnRpdmkwMSwxMDAwMDAwDQoyMDA2LENMRSxBTCxob2xsYXRvMDEsOTAwMDAwDQoyMDA2LENMRSxBTCx2YXpxdXJhMDEsNzAwMDAwDQoyMDA2LENMRSxBTCxncmF2ZWRhMDEsNjAwMDAwDQoyMDA2LENMRSxBTCxzaXplbWdyMDEsNTAwMDAwDQoyMDA2LENMRSxBTCxsZWVjbDAyLDQwNjIwMA0KMjAwNixDTEUsQUwscGVyYWxqaDAxLDM3NzMwMA0KMjAwNixDTEUsQUwsYmV0YW5yYTAxLDM2NTMwMA0KMjAwNixDTEUsQUwsbWlsbGVtYTAyLDMzNzQwMA0KMjAwNixDTEUsQUwsY2FicmVmZTAxLDMzMDgwMA0KMjAwNixDTEUsQUwsc2hvcHBrZTAxLDMyNzAwMA0KMjAwNixERVQsQUwsb3Jkb25tYTAxLDE2MjAwMDAwDQoyMDA2LERFVCxBTCxyb2RyaWl2MDEsMTA2MTY0MTANCjIwMDYsREVULEFMLHJvZ2Vya2UwMSw4MDAwMDAwDQoyMDA2LERFVCxBTCx5b3VuZ2RtMDEsODAwMDAwMA0KMjAwNixERVQsQUwscGVyY2l0cjAxLDYwMDAwMDANCjIwMDYsREVULEFMLGpvbmVzdG8wMiw1NzkyOTU2DQoyMDA2LERFVCxBTCxndWlsbGNhMDEsNTAwMDAwMA0KMjAwNixERVQsQUwscG9sYW5wbDAxLDQ2MDAwMDANCjIwMDYsREVULEFMLGluZ2VicjAxLDMwMDAwMDANCjIwMDYsREVULEFMLG1vbnJvY3IwMSwyODAwMDAwDQoyMDA2LERFVCxBTCxib25kZWplMDEsMjMwMDAwMA0KMjAwNixERVQsQUwsbWFyb3RtaTAxLDIzMDAwMDANCjIwMDYsREVULEFMLHdhbGtlamEwMSwxMjUwMDAwDQoyMDA2LERFVCxBTCx2ZXJsYWp1MDEsOTgwMDAwDQoyMDA2LERFVCxBTCx3aWxzb3ZhMDEsNzUwMDAwDQoyMDA2LERFVCxBTCxzcHVybGNoMDEsNzI1MDAwDQoyMDA2LERFVCxBTCxyb2Jlcm5hMDEsNDAyNTAwDQoyMDA2LERFVCxBTCxpbmZhbm9tMDEsMzg1MDAwDQoyMDA2LERFVCxBTCxyb2RuZWZlMDEsMzg1MDAwDQoyMDA2LERFVCxBTCxzYW50aXJhMDEsMzc1MDAwDQoyMDA2LERFVCxBTCxzZWF5Ym8wMSwzNzUwMDANCjIwMDYsREVULEFMLHNoZWx0Y2gwMSwzNjUwMDANCjIwMDYsREVULEFMLGdyaWxsamEwMSwzNTAwMDANCjIwMDYsREVULEFMLHRoYW1lbWEwMSwzNDIwMDANCjIwMDYsREVULEFMLGdyYW5kY3UwMSwzMzUwMDANCjIwMDYsREVULEFMLGRpbmdtY3IwMSwzMzAwMDANCjIwMDYsREVULEFMLHRhdGFqbzAxLDMyNzAwMA0KMjAwNixERVQsQUwsenVtYXlqbzAxLDMyNzAwMA0KMjAwNixLQ0EsQUwsc3dlZW5taTAxLDExMDAwMDAwDQoyMDA2LEtDQSxBTCxzYW5kZXJlMDIsNTAwMDAwMA0KMjAwNixLQ0EsQUwscmVkbWFtYTAxLDQ1MDAwMDANCjIwMDYsS0NBLEFMLGVsYXJ0c2MwMSw0MDAwMDAwDQoyMDA2LEtDQSxBTCxncnVkem1hMDEsNDAwMDAwMA0KMjAwNixLQ0EsQUwsZ3JhZmZ0bzAxLDIwNTAwMDANCjIwMDYsS0NBLEFMLGJlcnJvYW4wMSwyMDAwMDAwDQoyMDA2LEtDQSxBTCxtaWVudGRvMDEsMTg1MDAwMA0KMjAwNixLQ0EsQUwsYnJvd25lbTAxLDE3NzUwMDANCjIwMDYsS0NBLEFMLGRlc3NlZWwwMSwxNzAwMDAwDQoyMDA2LEtDQSxBTCxzdGFpcm1hMDEsMTM1MDAwMA0KMjAwNixLQ0EsQUwsYWZmZWxqZTAxLDEwMDAwMDANCjIwMDYsS0NBLEFMLG1heXNqbzAxLDEwMDAwMDANCjIwMDYsS0NBLEFMLGJha29wYTAxLDcwMDAwMA0KMjAwNixLQ0EsQUwsZGVqZXNkYTAxLDUwMDAwMA0KMjAwNixLQ0EsQUwsbWFjZG9taTAxLDQzMDAwMA0KMjAwNixLQ0EsQUwsZ3JlaW56YTAxLDM2NTUwMA0KMjAwNixLQ0EsQUwsd29vZG1pMDEsMzUwMDAwDQoyMDA2LEtDQSxBTCxidWNram8wMSwzNDk1MDANCjIwMDYsS0NBLEFMLHNpc2NvYW4wMSwzNDY1MDANCjIwMDYsS0NBLEFMLGdvYmJsamkwMSwzNDU1MDANCjIwMDYsS0NBLEFMLHRlYWhlbWEwMSwzNDQ1MDANCjIwMDYsS0NBLEFMLGJ1cmdvYW0wMSwzMzk1MDANCjIwMDYsS0NBLEFMLGh1ZHNvbHUwMSwzMzcwMDANCjIwMDYsS0NBLEFMLGJhdXRpZGUwMSwzMzU1MDANCjIwMDYsS0NBLEFMLG1hZHJpYm8wMSwzMzUwMDANCjIwMDYsS0NBLEFMLGdlcm1hZXMwMSwzMzMwMDANCjIwMDYsS0NBLEFMLHN0ZW1sc3QwMSwzMzAwMDANCjIwMDYsS0NBLEFMLGNvc3Rhc2gwMSwzMjc1MDANCjIwMDYsTEFBLEFMLGNvbG9uYmEwMSwxNDAwMDAwMA0KMjAwNixMQUEsQUwsZ3VlcnJ2bDAxLDEzNTAwMDAwDQoyMDA2LExBQSxBTCxhbmRlcmdhMDEsMTA2MDAwMDANCjIwMDYsTEFBLEFMLGVyc3RhZGEwMSw4NzUwMDAwDQoyMDA2LExBQSxBTCx3ZWF2ZWplMDEsODMyNTAwMA0KMjAwNixMQUEsQUwsYWxmb25lZDAxLDgwMDAwMDANCjIwMDYsTEFBLEFMLGNhYnJlb3IwMSw3NTAwMDAwDQoyMDA2LExBQSxBTCxlc2NvYmtlMDEsNjc1MDAwMA0KMjAwNixMQUEsQUwscm9kcmlmcjAzLDM3NzUwMDANCjIwMDYsTEFBLEFMLGtlbm5lYWQwMSwzMzUwMDAwDQoyMDA2LExBQSxBTCxsYWNrZWpvMDEsMzM0MDAwMA0KMjAwNixMQUEsQUwsY2FycmFoZTAxLDI2MDAwMDANCjIwMDYsTEFBLEFMLGZpZ2dpY2gwMSwyMjUwMDAwDQoyMDA2LExBQSxBTCxyb21lcmpjMDEsMjIwMDAwMA0KMjAwNixMQUEsQUwsc2hpZWxzYzAxLDIxMDAwMDANCjIwMDYsTEFBLEFMLHJpdmVyanUwMSwxMjUwMDAwDQoyMDA2LExBQSxBTCx5YW5lczAxLDEyNTAwMDANCjIwMDYsTEFBLEFMLGRvbm5lYnIwMSw5NTAwMDANCjIwMDYsTEFBLEFMLG1vbGluam8wMSw4NTAwMDANCjIwMDYsTEFBLEFMLHNhbG1vdGkwMSw0MDAwMDANCjIwMDYsTEFBLEFMLHF1aW5scm8wMSwzNjUwMDANCjIwMDYsTEFBLEFMLGl6dHVybWEwMSwzNTAwMDANCjIwMDYsTEFBLEFMLHNhbnRhZXIwMSwzNTAwMDANCjIwMDYsTEFBLEFMLGtvdGNoY2EwMSwzNDAwMDANCjIwMDYsTEFBLEFMLG1hdGhpamUwMSwzMjcwMDANCjIwMDYsTUlOLEFMLGh1bnRldG8wMSwxMDc1MDAwMA0KMjAwNixNSU4sQUwscmFka2VicjAxLDkwMDAwMDANCjIwMDYsTUlOLEFMLHNhbnRham8wMSw4NzUwMDAwDQoyMDA2LE1JTixBTCxzdGV3YXNoMDEsNjUwMDAwMA0KMjAwNixNSU4sQUwsY2FzdGlsdTAxLDUwNzE1MDYNCjIwMDYsTUlOLEFMLGxvaHNla3kwMSwzOTUwMDAwDQoyMDA2LE1JTixBTCxuYXRoYWpvMDEsMzc1MDAwMA0KMjAwNixNSU4sQUwsc2lsdmFjYTAxLDMyMDAwMDANCjIwMDYsTUlOLEFMLHdoaXRlcm8wMiwyNTAwMDAwDQoyMDA2LE1JTixBTCxjdWRkeW1pMDEsMTMwMDAwMA0KMjAwNixNSU4sQUwsYmF0aXN0bzAxLDEyNTAwMDANCjIwMDYsTUlOLEFMLGNhc3RyanUwMSwxMDAwMDAwDQoyMDA2LE1JTixBTCxyZWRtb21pMDEsOTAwMDAwDQoyMDA2LE1JTixBTCxyaW5jb2p1MDEsOTAwMDAwDQoyMDA2LE1JTixBTCxwdW50b25pMDEsNjkwMDAwDQoyMDA2LE1JTixBTCxmb3JkbGUwMSw0MjUwMDANCjIwMDYsTUlOLEFMLG1hdWVyam8wMSw0MDAwMDANCjIwMDYsTUlOLEFMLG1vcm5lanUwMSwzODUwMDANCjIwMDYsTUlOLEFMLGNyYWluamUwMSwzNjEwMDANCjIwMDYsTUlOLEFMLGd1ZXJybWEwMiwzNDM1MDANCjIwMDYsTUlOLEFMLHJvZHJpbHUwMSwzMzIwMDANCjIwMDYsTUlOLEFMLGJha2Vyc2MwMiwzMzAwMDANCjIwMDYsTUlOLEFMLGV5cmV3aTAxLDMyNzAwMA0KMjAwNixNSU4sQUwsZ2Fzc25kYTAxLDMyNzAwMA0KMjAwNixNSU4sQUwsa3ViZWxqYTAxLDMyNzAwMA0KMjAwNixNSU4sQUwsbGlyaWFmcjAxLDMyNzAwMA0KMjAwNixOWUEsQUwscm9kcmlhbDAxLDIxNjgwNzI3DQoyMDA2LE5ZQSxBTCxqZXRlcmRlMDEsMjA2MDAwMDANCjIwMDYsTllBLEFMLGdpYW1iamEwMSwyMDQyODU3MQ0KMjAwNixOWUEsQUwsbXVzc2ltaTAxLDE5MDAwMDAwDQoyMDA2LE5ZQSxBTCxqb2huc3JhMDUsMTU2NjE0MjcNCjIwMDYsTllBLEFMLGRhbW9uam8wMSwxMzAwMDAwMA0KMjAwNixOWUEsQUwsbWF0c3VoaTAxLDEzMDAwMDAwDQoyMDA2LE5ZQSxBTCxwb3NhZGpvMDEsMTIwMDAwMDANCjIwMDYsTllBLEFMLHNoZWZmZ2EwMSwxMDc1NjE3MQ0KMjAwNixOWUEsQUwscml2ZXJtYTAxLDEwNTAwMDAwDQoyMDA2LE5ZQSxBTCxwYXZhbmNhMDEsODAwMDAwMA0KMjAwNixOWUEsQUwsd3JpZ2hqYTAyLDc2NjY2NjcNCjIwMDYsTllBLEFMLGZhcm5za3kwMSw1NDE2NjY2DQoyMDA2LE5ZQSxBTCxjaGFjb3NoMDEsMzYwMDAwMA0KMjAwNixOWUEsQUwsdmlsbG9ybzAxLDIyNTAwMDANCjIwMDYsTllBLEFMLGRvdGVsb2MwMSwyMDAwMDAwDQoyMDA2LE5ZQSxBTCxzdHVydHRhMDEsMTUwMDAwMA0KMjAwNixOWUEsQUwsd2lsbGliZTAyLDE1MDAwMDANCjIwMDYsTllBLEFMLHNtYWxsYWEwMSwxMjAwMDAwDQoyMDA2LE5ZQSxBTCxteWVyc21pMDEsMTE1MDAwMA0KMjAwNixOWUEsQUwsY2Fpcm9taTAxLDEwMDAwMDANCjIwMDYsTllBLEFMLHN0aW5ua2UwMSw2NTAwMDANCjIwMDYsTllBLEFMLGNhbm9ybzAxLDM4MTAwMA0KMjAwNixOWUEsQUwsY3Jvc2JidTAxLDM1NDI1MA0KMjAwNixOWUEsQUwsd2FuZ2NoMDEsMzUzMTc1DQoyMDA2LE5ZQSxBTCxwcm9jdHNjMDEsMzUyNjc1DQoyMDA2LE5ZQSxBTCxwaGlsbGFuMDEsMzMzMTUwDQoyMDA2LE5ZQSxBTCxuaWV2ZXdpMDEsMzI4NjAwDQoyMDA2LE9BSyxBTCxrZW5kYWphMDEsMTE0OTI0NTQNCjIwMDYsT0FLLEFMLGNoYXZlZXIwMSw5NTAwMDAwDQoyMDA2LE9BSyxBTCx6aXRvYmEwMSw3OTAwMDAwDQoyMDA2LE9BSyxBTCxrb3RzYW1hMDEsNzAwMDAwMA0KMjAwNixPQUssQUwsbG9haXplczAxLDYwMDAwMDANCjIwMDYsT0FLLEFMLHBheXRvamEwMSw0MDAwMDAwDQoyMDA2LE9BSyxBTCxicmFkbG1pMDEsMzAwMDAwMA0KMjAwNixPQUssQUwsa2VubmVqbzA0LDI0MDAwMDANCjIwMDYsT0FLLEFMLGVsbGlzbWEwMSwyMjUwMDAwDQoyMDA2LE9BSyxBTCxoYXJkZXJpMDEsMTI1MDAwMA0KMjAwNixPQUssQUwsd2l0YXNqYTAxLDEwMDAwMDANCjIwMDYsT0FLLEFMLGNhbGVya2kwMSw4NTAwMDANCjIwMDYsT0FLLEFMLGNyb3NiYm8wMSw4MDAwMDANCjIwMDYsT0FLLEFMLG1lbGh1YWQwMSw3MDAwMDANCjIwMDYsT0FLLEFMLGhhcmVuZGEwMSw1NTAwMDANCjIwMDYsT0FLLEFMLHRob21hZnIwNCw1MDAwMDANCjIwMDYsT0FLLEFMLHNhYXJsa2kwMSwzNTQwMDANCjIwMDYsT0FLLEFMLGhhbHNlYnIwMSwzNDYwMDANCjIwMDYsT0FLLEFMLGR1Y2hzanUwMSwzNDQ1MDANCjIwMDYsT0FLLEFMLHNjdXRhbWEwMSwzNDAwMDANCjIwMDYsT0FLLEFMLHN0cmVlaHUwMSwzMzk2MjUNCjIwMDYsT0FLLEFMLHN3aXNobmkwMSwzMzUwMDANCjIwMDYsT0FLLEFMLHBlcmV6YW4wMSwzMzQ1MDANCjIwMDYsT0FLLEFMLGpvaG5zZGEwNiwzMzAwMDANCjIwMDYsT0FLLEFMLGJsYW50am8wMSwzMjcwMDANCjIwMDYsU0VBLEFMLHNleHNvcmkwMSwxMzAwMDAwMA0KMjAwNixTRUEsQUwsYmVsdHJhZDAxLDEyOTAwMDAwDQoyMDA2LFNFQSxBTCxzdXp1a2ljMDEsMTI1MDAwMDANCjIwMDYsU0VBLEFMLHdhc2hiamEwMSw3NDUwMDAwDQoyMDA2LFNFQSxBTCxwaW5laWpvMDEsNjgwMDAwMA0KMjAwNixTRUEsQUwsZ3VhcmRlZDAxLDYyNTAwMDANCjIwMDYsU0VBLEFMLG1veWVyamEwMSw1NTAwMDAwDQoyMDA2LFNFQSxBTCxqb2hqaWtlMDEsNTQzMzMzMw0KMjAwNixTRUEsQUwsaWJhbmVyYTAxLDQyNTAwMDANCjIwMDYsU0VBLEFMLG1lY2hlZ2kwMSwzNzAwMDAwDQoyMDA2LFNFQSxBTCxldmVyZWNhMDEsMzQwMDAwMA0KMjAwNixTRUEsQUwsbWF0ZW9qdTAxLDcwMDAwMA0KMjAwNixTRUEsQUwsYmV0YW55dTAxLDY3NzUwMA0KMjAwNixTRUEsQUwsYmxvb213aTAxLDY1MDAwMA0KMjAwNixTRUEsQUwscGV0YWdybzAxLDQ1MDAwMA0KMjAwNixTRUEsQUwsc29yaWFyYTAxLDQ1MDAwMA0KMjAwNixTRUEsQUwscHV0empqMDEsNDE1MDAwDQoyMDA2LFNFQSxBTCxsYXd0b21hMDIsNDAwMDAwDQoyMDA2LFNFQSxBTCxyZWVkamUwMywzNzUwMDANCjIwMDYsU0VBLEFMLGhlcm5hZmUwMiwzNDAwMDANCjIwMDYsU0VBLEFMLGxvcGV6am8wMSwzMzUwMDANCjIwMDYsU0VBLEFMLHNoZXJyZ2UwMSwzMzMwMDANCjIwMDYsU0VBLEFMLGhhcnJpamUwMiwzMzIwMDANCjIwMDYsU0VBLEFMLHdvb2RzamEwMSwzMzIwMDANCjIwMDYsU0VBLEFMLGJvcmNoam8wMSwzMzEwMDANCjIwMDYsU0VBLEFMLHNuZWxsY2gwMiwzMjg1MDANCjIwMDYsU0VBLEFMLHF1aXJvZ3UwMSwzMjc1MDANCjIwMDYsVEJBLEFMLGh1ZmZhdTAxLDY5MTY2NjcNCjIwMDYsVEJBLEFMLGx1Z29qdTAxLDQ5NTAwMDANCjIwMDYsVEJBLEFMLGNyYXdmY2EwMiwyNjI1MDAwDQoyMDA2LFRCQSxBTCxsZWV0cjAxLDI0NTAwMDANCjIwMDYsVEJBLEFMLGhhbGx0bzAyLDIyNTAwMDANCjIwMDYsVEJBLEFMLGZvc3N1Y2EwMSwyMDI1MDAwDQoyMDA2LFRCQSxBTCxiYWxkZXJvMDEsMjAwMDAwMA0KMjAwNixUQkEsQUwsaGVuZHJtYTAxLDE5NTAwMDANCjIwMDYsVEJBLEFMLGJ1cnJvc2UwMSwxNTAwMDAwDQoyMDA2LFRCQSxBTCxoYXJwZXRyMDEsODUwMDAwDQoyMDA2LFRCQSxBTCxjb2xvbWplMDEsODE1MDAwDQoyMDA2LFRCQSxBTCx3aWdnaXR5MDEsNjc1MDAwDQoyMDA2LFRCQSxBTCxtaWNlbGRhMDEsNjUwMDAwDQoyMDA2LFRCQSxBTCxtZWFkb2JyMDEsNjAwMDAwDQoyMDA2LFRCQSxBTCxwYXVsam8wMSw0NzUwMDANCjIwMDYsVEJBLEFMLG9yZGF6bHUwMSwzNzUwMDANCjIwMDYsVEJBLEFMLGthem1pc2MwMSwzNzE3MDANCjIwMDYsVEJBLEFMLGdyZWVubmkwMSwzNTY3MDANCjIwMDYsVEJBLEFMLHdhZWNoZG8wMSwzNTU5MDANCjIwMDYsVEJBLEFMLGNhbnR1am8wMSwzNTU4MDANCjIwMDYsVEJBLEFMLGdvbWVzam8wMSwzNTU4MDANCjIwMDYsVEJBLEFMLGhvbGxpZGEwMiwzNDYyMDANCjIwMDYsVEJBLEFMLG1jY2x1c2UwMSwzNDMwMDANCjIwMDYsVEJBLEFMLGdhdGhyam8wMSwzMzcyMDANCjIwMDYsVEJBLEFMLGNhbXBzaDAxLDMzNTAwMA0KMjAwNixUQkEsQUwsY2hpbGRqYTAxLDMyNzAwMA0KMjAwNixUQkEsQUwsbHVnb3J1MDEsMzI3MDAwDQoyMDA2LFRFWCxBTCxuZXZpbnBoMDEsMTA0NzI0MDkNCjIwMDYsVEVYLEFMLG1pbGx3a2UwMSw3ODY4ODkzDQoyMDA2LFRFWCxBTCx0ZWl4ZW1hMDEsNjQwMDAwMA0KMjAwNixURVgsQUwsZWF0b25hZDAxLDQ2NTAwMDANCjIwMDYsVEVYLEFMLHBhZGlsdmkwMSw0NDEwMDAwDQoyMDA2LFRFWCxBTCxjb3JkZWZyMDEsNDEyNTAwMA0KMjAwNixURVgsQUwsd2lsa2VicjAxLDM5MDAwMDANCjIwMDYsVEVYLEFMLGJhcmFqcm8wMSwzMjAwMDAwDQoyMDA2LFRFWCxBTCx5b3VuZ21pMDIsMzA3NTAwMA0KMjAwNixURVgsQUwsYmxhbG9oYTAxLDMwNTAwMDANCjIwMDYsVEVYLEFMLG1lbmNoa2UwMSwyODAwMDAwDQoyMDA2LFRFWCxBTCxhbGZvbmFuMDEsMjc1MDAwMA0KMjAwNixURVgsQUwsbWF0dGhnYTAyLDIzODc1MDANCjIwMDYsVEVYLEFMLG90c3VrYWswMSwxNzUwMDAwDQoyMDA2LFRFWCxBTCxiZW5vaWpvMDEsNzc1MDAwDQoyMDA2LFRFWCxBTCxqaW1lbmRhMDEsNzUwMDAwDQoyMDA2LFRFWCxBTCxzaG91c2JyMDEsNzI1MDAwDQoyMDA2LFRFWCxBTCxkZXJvc21hMDEsNjc1MDAwDQoyMDA2LFRFWCxBTCxicm93bmFkMDEsNDI1MDAwDQoyMDA2LFRFWCxBTCxkaWNrZXJhMDEsMzgwMDAwDQoyMDA2LFRFWCxBTCxsb2VrYTAxLDM0ODc3MA0KMjAwNixURVgsQUwsbml4bGEwMSwzNDUyNjANCjIwMDYsVEVYLEFMLGxhaXJkZ2UwMSwzMzIzMzANCjIwMDYsVEVYLEFMLGZyYW5jZnIwMSwzMzE1MDANCjIwMDYsVEVYLEFMLG1jZG91bWEwMSwzMzEwMDANCjIwMDYsVEVYLEFMLHdpbHNvY2owMSwzMzEwMDANCjIwMDYsVEVYLEFMLGZlbGRtc2MwMSwzMjkwMDANCjIwMDYsVEVYLEFMLGtvcm9uam8wMSwzMjkwMDANCjIwMDYsVEVYLEFMLHJ1cGVqbzAxLDMyODAwMA0KMjAwNixURVgsQUwsY2FzdHJmYTAxLDMyNzAwMA0KMjAwNixURVgsQUwsa2luc2xpYTAxLDMyNzAwMA0KMjAwNixUT1IsQUwsaGFsbGFybzAxLDEyNzUwMDAwDQoyMDA2LFRPUixBTCxnbGF1c3RyMDEsMTAwMDAwMDANCjIwMDYsVE9SLEFMLGhpbGxlc2gwMiw1ODAwMDAwDQoyMDA2LFRPUixBTCxtb2xpbmJlMDEsNDUwMDAwMA0KMjAwNixUT1IsQUwsd2VsbHN2ZTAxLDQ0NzAwMDANCjIwMDYsVE9SLEFMLGhpbnNrZXIwMSw0NDI1MDAwDQoyMDA2LFRPUixBTCxsaWxseXRlMDEsNDAwMDAwMA0KMjAwNixUT1IsQUwscnlhbmJqMDEsNDAwMDAwMA0KMjAwNixUT1IsQUwsc2Nob2VzYzAxLDI3NTAwMDANCjIwMDYsVE9SLEFMLGNhdGFsZnIwMSwyNzAwMDAwDQoyMDA2LFRPUixBTCxvdmVyYmx5MDEsMjUyNTAwMA0KMjAwNixUT1IsQUwsdG93ZXJqbzAxLDIzMDAwMDANCjIwMDYsVE9SLEFMLHNwZWllanUwMSwyMjUwMDAwDQoyMDA2LFRPUixBTCxidXJuZWFqMDEsMjIwMDAwMA0KMjAwNixUT1IsQUwsam9obnNyZTAyLDE0MjUwMDANCjIwMDYsVE9SLEFMLHphdW5ncjAxLDEwMDAwMDANCjIwMDYsVE9SLEFMLGRvd25zc2MwMSw3MDUwMDANCjIwMDYsVE9SLEFMLHdhbGtlcGUwMSw2NTAwMDANCjIwMDYsVE9SLEFMLG1jZG9uam8wMyw1MDAwMDANCjIwMDYsVE9SLEFMLGZyYXNvamEwMSwzNTkwMDANCjIwMDYsVE9SLEFMLHJpb3NhbDAxLDM1NDAwMA0KMjAwNixUT1IsQUwsY2h1bGt2aTAxLDM0ODUwMA0KMjAwNixUT1IsQUwsY2hhY2lndTAxLDM0NzUwMA0KMjAwNixUT1IsQUwsYWRhbXNydTAxLDM0MzAwMA0KMjAwNixUT1IsQUwsaGlsbGFhMDEsMzM2MDAwDQoyMDA2LFRPUixBTCx0YWxsZWJyMDEsMzI3MDAwDQoyMDA2LEFSSSxOTCxnb256YWx1MDEsMTA2NzMzMjgNCjIwMDYsQVJJLE5MLGdyZWVuc2gwMSwxMDIxMzg5OA0KMjAwNixBUkksTkwsb3J0aXpydTAxLDc4NzUwMDANCjIwMDYsQVJJLE5MLGJhdGlzbWkwMSw0NzUwMDAwDQoyMDA2LEFSSSxOTCxoZXJuYW9yMDEsNDYyNTAwMA0KMjAwNixBUkksTkwsd2ViYmJyMDEsMjUwMDAwMA0KMjAwNixBUkksTkwsaHVkc29vcjAxLDIzMDAwMDANCjIwMDYsQVJJLE5MLGJ5cm5lZXIwMSwyMjUwMDAwDQoyMDA2LEFSSSxOTCxlc3RyYWpvMDEsMjAwMDAwMA0KMjAwNixBUkksTkwsdml6Y2FsdTAxLDE3NzUwMDANCjIwMDYsQVJJLE5MLGNvdW5zY3IwMSwxNzUwMDAwDQoyMDA2LEFSSSxOTCx2YXJnYWNsMDEsMTI3NTAwMA0KMjAwNixBUkksTkwsY2xhcmt0bzAyLDEwMzQwMDANCjIwMDYsQVJJLE5MLGx5b25icjAxLDgzMDAwMA0KMjAwNixBUkksTkwsZ3JpbXNqYTAxLDgyNTAwMA0KMjAwNixBUkksTkwsbXVsaG90ZTAxLDgwMDAwMA0KMjAwNixBUkksTkwsZWFzbGVkYTAxLDcwMDAwMA0KMjAwNixBUkksTkwsY3J1emp1MDIsNTc1MDAwDQoyMDA2LEFSSSxOTCxkYXZhbmplMDIsNTI1MDAwDQoyMDA2LEFSSSxOTCx0cmFjeWNoMDEsMzgxMDAwDQoyMDA2LEFSSSxOTCx2YWx2ZWpvMDEsMzU5MDAwDQoyMDA2LEFSSSxOTCxhcXVpbmdyMDEsMzQyMDAwDQoyMDA2LEFSSSxOTCxzbnlkZWNoMDIsMzQxMDAwDQoyMDA2LEFSSSxOTCxncmVlbmFuMDEsMzMwMDAwDQoyMDA2LEFSSSxOTCxqYWNrc2NvMDEsMzI4MDAwDQoyMDA2LEFSSSxOTCxtZWRkZWJyMDEsMzI3MDAwDQoyMDA2LEFUTCxOTCxoYW1wdG1pMDEsMTQ1MDM1NDMNCjIwMDYsQVRMLE5MLGpvbmVzYW4wMSwxMzUwMDAwMA0KMjAwNixBVEwsTkwsam9uZXNjaDA2LDEyMzMzMzMzDQoyMDA2LEFUTCxOTCxzbW9sdGpvMDEsMTEwMDAwMDANCjIwMDYsQVRMLE5MLHJlbnRlZWQwMSw5MDAwMDAwDQoyMDA2LEFUTCxOTCxodWRzb3RpMDEsNjUwMDAwMA0KMjAwNixBVEwsTkwsdGhvbXNqbzAxLDQ3NTAwMDANCjIwMDYsQVRMLE5MLGdpbGVzbWEwMSwzODUwMDAwDQoyMDA2LEFUTCxOTCxyZWl0c2NoMDEsMjc1MDAwMA0KMjAwNixBVEwsTkwscmFtaXJobzAxLDIyMDAwMDANCjIwMDYsQVRMLE5MLHNvc2FqbzAyLDIyMDAwMDANCjIwMDYsQVRMLE5MLHByYXR0dG8wMiw4NTAwMDANCjIwMDYsQVRMLE5MLGpvcmRhYnIwMSw3MDAwMDANCjIwMDYsQVRMLE5MLHJlbWxpbWkwMSw3MDAwMDANCjIwMDYsQVRMLE5MLHZpbGxhb3MwMSw0NjI1MDANCjIwMDYsQVRMLE5MLGxhcm9jYWQwMSw0MjAwMDANCjIwMDYsQVRMLE5MLGZyYW5jamUwMiwzODQ1MDANCjIwMDYsQVRMLE5MLGZvc3Rlam8wMSwzNTAwMDANCjIwMDYsQVRMLE5MLGJldGVtd2kwMSwzNDUwMDANCjIwMDYsQVRMLE5MLGNvcm1pbGEwMSwzNDUwMDANCjIwMDYsQVRMLE5MLGxhbmdlcnkwMSwzNDUwMDANCjIwMDYsQVRMLE5MLG9ycnBlMDEsMzQwMDAwDQoyMDA2LEFUTCxOTCxib3llcmJsMDEsMzM2MDAwDQoyMDA2LEFUTCxOTCxqb2huc2tlMDUsMzM2MDAwDQoyMDA2LEFUTCxOTCxkYXZpZWt5MDEsMzMzNTAwDQoyMDA2LEFUTCxOTCxtY2NhbmJyMDEsMzMzNTAwDQoyMDA2LEFUTCxOTCxtY2JyaW1hMDEsMzMyMDAwDQoyMDA2LEFUTCxOTCxkaWF6bWEwMiwzMzAwMDANCjIwMDYsQVRMLE5MLGphbWVzY2gwMywzMjcwMDANCjIwMDYsQ0hOLE5MLHdvb2RrZTAyLDEyMDAwMDAwDQoyMDA2LENITixOTCxyYW1pcmFyMDEsMTA3NTAwMDANCjIwMDYsQ0hOLE5MLGxlZWRlMDIsOTQxNjY2Nw0KMjAwNixDSE4sTkwsbWFkZHVncjAxLDkwMDAwMDANCjIwMDYsQ0hOLE5MLHphbWJyY2EwMSw2NTAwMDAwDQoyMDA2LENITixOTCxwaWVycmp1MDEsNTc1MDAwMA0KMjAwNixDSE4sTkwsYmFycmVtaTAxLDQzMzMzMzMNCjIwMDYsQ0hOLE5MLGRlbXBzcnkwMSw0MzMzMzMzDQoyMDA2LENITixOTCxqb25lc2phMDUsNDAzMzMzMw0KMjAwNixDSE4sTkwscHJpb3JtYTAxLDM2NTAwMDANCjIwMDYsQ0hOLE5MLGV5cmVzYzAxLDMwMzMzMzMNCjIwMDYsQ0hOLE5MLGhvd3J5Ym8wMSwzMDAwMDAwDQoyMDA2LENITixOTCxydXNjaGdsMDEsMjc1MDAwMA0KMjAwNixDSE4sTkwscGVyZXpuZTAxLDI1MDAwMDANCjIwMDYsQ0hOLE5MLHdhbGtldG8wNCwyNTAwMDAwDQoyMDA2LENITixOTCxoYWlyc2plMDIsMjMwMDAwMA0KMjAwNixDSE4sTkwsd2lsbGlzYzAxLDIwMDAwMDANCjIwMDYsQ0hOLE5MLGJsYW5jaGUwMSwxNTAwMDAwDQoyMDA2LENITixOTCxtYWJyeWpvMDEsMTA3NTAwMA0KMjAwNixDSE4sTkwsbWlsbGV3YTA0LDEwMDAwMDANCjIwMDYsQ0hOLE5MLG9obWFud2kwMSw2MTAwMDANCjIwMDYsQ0hOLE5MLHdpbGxpamUwMiwzODAwMDANCjIwMDYsQ0hOLE5MLHd1ZXJ0bWkwMSwzNTUwMDANCjIwMDYsQ0hOLE5MLG11cnRvbWEwMSwzMzcwMDANCjIwMDYsQ0hOLE5MLGNlZGVucm8wMiwzMzYwMDANCjIwMDYsQ0hOLE5MLGJ5bnVtZnIwMSwzMjc1MDANCjIwMDYsQ0hOLE5MLG1hcnNoc2UwMSwzMjcwMDANCjIwMDYsQ0hOLE5MLHBhZ2FuYW4wMSwzMjcwMDANCjIwMDYsQ0lOLE5MLGdyaWZma2UwMiwxMDQ2NDY4Ng0KMjAwNixDSU4sTkwsbWlsdG9lcjAxLDk4MzMzMzMNCjIwMDYsQ0lOLE5MLGR1bm5hZDAxLDc1MDAwMDANCjIwMDYsQ0lOLE5MLGxhcnVlamEwMSwzOTAwMDAwDQoyMDA2LENJTixOTCx3aWxzb3BhMDIsMzc1MDAwMA0KMjAwNixDSU4sTkwsYXJyb3licjAxLDMwMDAwMDANCjIwMDYsQ0lOLE5MLGxvcGV6ZmUwMSwyNzAwMDAwDQoyMDA2LENJTixOTCxoYXJhbmFhMDEsMjM1MDAwMA0KMjAwNixDSU4sTkwsd29tYWN0bzAxLDIwMDAwMDANCjIwMDYsQ0lOLE5MLGtlYXJuYXUwMSwxODUwMDAwDQoyMDA2LENJTixOTCxtZXJja2tlMDEsMTU1MDAwMA0KMjAwNixDSU4sTkwsd2VhdGhkYTAxLDE1MDAwMDANCjIwMDYsQ0lOLE5MLHdpbGxpZGEwNywxNDAwMDAwDQoyMDA2LENJTixOTCxhdXJpbHJpMDEsMTMwMDAwMA0KMjAwNixDSU4sTkwsZnJlZWxyeTAxLDEzMDAwMDANCjIwMDYsQ0lOLE5MLHZhbGVuamEwMSwxMTUwMDAwDQoyMDA2LENJTixOTCxoYW1tb2NoMDEsODAwMDAwDQoyMDA2LENJTixOTCxoYXR0ZXNjMDEsNzUwMDAwDQoyMDA2LENJTixOTCx3aGl0ZXJpMDEsNjAwMDAwDQoyMDA2LENJTixOTCxyb3NzZGEwMSw1MDAwMDANCjIwMDYsQ0lOLE5MLGNsYXVzYnIwMSwzNzAwMDANCjIwMDYsQ0lOLE5MLGJlbGlzbWEwMSwzNDM1MDANCjIwMDYsQ0lOLE5MLGJhbGZvZ3IwMSwzNDAwMDANCjIwMDYsQ0lOLE5MLGNvZmZldG8wMSwzMzkwMDANCjIwMDYsQ0lOLE5MLGJ1cm5zbWkwMSwzMzI1MDANCjIwMDYsQ0lOLE5MLGVuY2FyZWQwMSwzMzI1MDANCjIwMDYsQ0lOLE5MLGFiYWRhbjAxLDMyNzAwMA0KMjAwNixDSU4sTkwsZGVub3JjaDAxLDMyNzAwMA0KMjAwNixDT0wsTkwsaGVsdG90bzAxLDE2NjAwMDAwDQoyMDA2LENPTCxOTCxqZW5uaWphMDEsNDUwMDAwMA0KMjAwNixDT0wsTkwsa2luZ3JhMDEsMjUwMDAwMA0KMjAwNixDT0wsTkwsZnVlbnRicjAxLDIwMDAwMDANCjIwMDYsQ09MLE5MLG1lc2FqbzAxLDIwMDAwMDANCjIwMDYsQ09MLE5MLGNvb2thYTAxLDEyNTAwMDANCjIwMDYsQ09MLE5MLGtpbWJ5MDEsMTI1MDAwMA0KMjAwNixDT0wsTkwsZGVqZWFtaTAxLDExNTAwMDANCjIwMDYsQ09MLE5MLHRvcnJleW8wMSw4NTAwMDANCjIwMDYsQ09MLE5MLGNhcnJvamEwMSw3MDAwMDANCjIwMDYsQ09MLE5MLGRheXphMDEsNjAwMDAwDQoyMDA2LENPTCxOTCxraW1zdTAxLDYwMDAwMA0KMjAwNixDT0wsTkwsbWFydGl0bzAyLDU1MDAwMA0KMjAwNixDT0wsTkwsaG9sbGltYTAxLDUwMDAwMA0KMjAwNixDT0wsTkwsZm9nZ2pvMDEsNDUwMDAwDQoyMDA2LENPTCxOTCxjb3J0ZWRhMDEsMzUwMDAwDQoyMDA2LENPTCxOTCxtYXJyZWVsMDEsMzUwMDAwDQoyMDA2LENPTCxOTCxvamVkYW1pMDEsMzUwMDAwDQoyMDA2LENPTCxOTCxnb256YWx1MDIsMzQ1MDAwDQoyMDA2LENPTCxOTCxjZXJkYWphMDEsMzQyMDAwDQoyMDA2LENPTCxOTCxmcmFuY2plMDEsMzM2MDAwDQoyMDA2LENPTCxOTCxhcmRvaWRhMDEsMzM1MDAwDQoyMDA2LENPTCxOTCxhdGtpbmdhMDEsMzM1MDAwDQoyMDA2LENPTCxOTCxiYXJtZWNsMDEsMzM1MDAwDQoyMDA2LENPTCxOTCxwaWVkcmpvMDEsMzM1MDAwDQoyMDA2LENPTCxOTCxzbWl0aGphMDUsMzM1MDAwDQoyMDA2LENPTCxOTCxzdWxsaWNvMDEsMzM1MDAwDQoyMDA2LENPTCxOTCxkb2htYXNjMDEsMzMzMDAwDQoyMDA2LENPTCxOTCx0c2FvY2gwMSwzMzIwMDANCjIwMDYsQ09MLE5MLGZyZWVtY2gwMSwzMjkwMDANCjIwMDYsQ09MLE5MLHNoZWFscnkwMSwzMjkwMDANCjIwMDYsQ09MLE5MLHdpbHNvam8wMywzMjcwMDANCjIwMDYsRkxPLE5MLHdpbGxpZG8wMyw0MzUwMDAwDQoyMDA2LEZMTyxOTCxtb2VobGJyMDEsMTUwMDAwMA0KMjAwNixGTE8sTkwsaGVsbXN3ZTAxLDgwMDAwMA0KMjAwNixGTE8sTkwsb2xpdm9taTAxLDcwMDAwMA0KMjAwNixGTE8sTkwsaGVyZ2VtYTAxLDYwMDAwMA0KMjAwNixGTE8sTkwsY2FicmVtaTAxLDQ3MjAwMA0KMjAwNixGTE8sTkwsd2VsbGV0bzAxLDM0NzUwMA0KMjAwNixGTE8sTkwsYW1lemFhbDAxLDM0MDAwMA0KMjAwNixGTE8sTkwsbWl0cmVzZTAxLDMzMDAwMA0KMjAwNixGTE8sTkwsYWJlcmNyZTAxLDMyNzAwMA0KMjAwNixGTE8sTkwsYWd1aWxjaDAxLDMyNzAwMA0KMjAwNixGTE8sTkwsYm9yb3dqbzAxLDMyNzAwMA0KMjAwNixGTE8sTkwsaGVybWlqZTAxLDMyNzAwMA0KMjAwNixGTE8sTkwsamFjb2JtaTAyLDMyNzAwMA0KMjAwNixGTE8sTkwsam9obnNqbzA5LDMyNzAwMA0KMjAwNixGTE8sTkwsbWFydGljYTAzLDMyNzAwMA0KMjAwNixGTE8sTkwsbWVzc2VyYTAxLDMyNzAwMA0KMjAwNixGTE8sTkwsbm9sYXNyaTAxLDMyNzAwMA0KMjAwNixGTE8sTkwscmFtaXJoYTAxLDMyNzAwMA0KMjAwNixGTE8sTkwscmVlZGVyMDEsMzI3MDAwDQoyMDA2LEZMTyxOTCxyZXNvcGNoMDEsMzI3MDAwDQoyMDA2LEZMTyxOTCx0cmVhbm1hMDEsMzI3MDAwDQoyMDA2LEZMTyxOTCx1Z2dsYWRhMDEsMzI3MDAwDQoyMDA2LEZMTyxOTCx2YXJnYWphMDEsMzI3MDAwDQoyMDA2LEZMTyxOTCx3aWxsaWpvMDMsMzI3MDAwDQoyMDA2LEhPVSxOTCxiYWd3ZWplMDEsMTkzNjkwMTkNCjIwMDYsSE9VLE5MLHBldHRpYW4wMSwxNjQyODQxNg0KMjAwNixIT1UsTkwsYmVya21sYTAxLDE0NTAwMDAwDQoyMDA2LEhPVSxOTCxvc3dhbHJvMDEsMTEwMDAwMDANCjIwMDYsSE9VLE5MLGJpZ2dpY3IwMSw0MDAwMDAwDQoyMDA2LEhPVSxOTCx3aWxzb3ByMDEsNDAwMDAwMA0KMjAwNixIT1UsTkwsbGlkZ2VicjAxLDM5NzUwMDANCjIwMDYsSE9VLE5MLGVuc2JlbW8wMSwzODAwMDAwDQoyMDA2LEhPVSxOTCxldmVyZWFkMDEsMTkwMDAwMA0KMjAwNixIT1UsTkwsbGFtYm1pMDEsMTcwMDAwMA0KMjAwNixIT1UsTkwsbWlsbGV0cjAyLDEzMDAwMDANCjIwMDYsSE9VLE5MLHBhbG1lb3IwMSw5NTAwMDANCjIwMDYsSE9VLE5MLHdoZWVsZGEwMSw5MzAwMDANCjIwMDYsSE9VLE5MLHNwcmlucnUwMSw3NTAwMDANCjIwMDYsSE9VLE5MLGxhbmVqYTAxLDQ1MDAwMA0KMjAwNixIT1UsTkwsYmFja2VicjAxLDQ0MjUwMA0KMjAwNixIT1UsTkwsdGF2ZXJ3aTAxLDQwMDAwMA0KMjAwNixIT1UsTkwscXVhbGxjaDAxLDM3NjAwMA0KMjAwNixIT1UsTkwsYnJ1bnRlcjAxLDM2NTAwMA0KMjAwNixIT1UsTkwsZ2FsbG9taTAxLDM2NTAwMA0KMjAwNixIT1UsTkwsYnVya2VjaDAxLDM2MjUwMA0KMjAwNixIT1UsTkwsbXVuc29lcjAxLDM1MDAwMA0KMjAwNixIT1UsTkwsYnVjaGh0YTAxLDMyNzAwMA0KMjAwNixIT1UsTkwsbmlldmVmZTAxLDMyNzAwMA0KMjAwNixIT1UsTkwscm9kcml3YTAxLDMyNzAwMA0KMjAwNixMQU4sTkwsZHJld2pkMDEsMTE0MDAwMDANCjIwMDYsTEFOLE5MLGdhZ25lZXIwMSwxMDAwMDAwMA0KMjAwNixMQU4sTkwsbG93ZWRlMDEsOTUwMDAwMA0KMjAwNixMQU4sTkwsa2VudGplMDEsOTQwMDAwMA0KMjAwNixMQU4sTkwscGVyZXpvZDAxLDg3NTAwMDANCjIwMDYsTEFOLE5MLGZ1cmNhcmEwMSw4NzE1NTA4DQoyMDA2LExBTixOTCxnYXJjaW5vMDEsNjAwMDAwMA0KMjAwNixMQU4sTkwscGVubnlicjAxLDUyNTAwMDANCjIwMDYsTEFOLE5MLG11ZWxsYmkwMiw0NTY5NDQzDQoyMDA2LExBTixOTCxiYWV6ZGEwMSw0MDAwMDAwDQoyMDA2LExBTixOTCxsb2Z0b2tlMDEsMzgyMTIzNg0KMjAwNixMQU4sTkwsdG9ta29icjAxLDM2MDAwMDANCjIwMDYsTEFOLE5MLGl6dHVyY2UwMSwzMjAwMDAwDQoyMDA2LExBTixOTCxjcnV6am8wMiwyOTEwMDAwDQoyMDA2LExBTixOTCxsZWRlZXJpMDEsMTUwMDAwMA0KMjAwNixMQU4sTkwsc2FlbnpvbDAxLDEwMDAwMDANCjIwMDYsTEFOLE5MLGFsb21hc2EwMiw2NTAwMDANCjIwMDYsTEFOLE5MLG1hcnRpcmEwMyw2MDAwMDANCjIwMDYsTEFOLE5MLGNhcnRlbGEwMiw1NTAwMDANCjIwMDYsTEFOLE5MLHdlcnRoamEwMSwzNTUwMDANCjIwMDYsTEFOLE5MLHNlb2phMDEsMzUwMDAwDQoyMDA2LExBTixOTCxicmF6b3loMDEsMzQ1MDAwDQoyMDA2LExBTixOTCxyZXBrb2phMDEsMzM4MDAwDQoyMDA2LExBTixOTCxuYXZhcmRpMDEsMzMyMDAwDQoyMDA2LExBTixOTCxvc29yaWZyMDEsMzI4NTAwDQoyMDA2LExBTixOTCxoYW11bHRpMDEsMzI3NTAwDQoyMDA2LExBTixOTCxrdW9obzAxLDMyNzUwMA0KMjAwNixMQU4sTkwscm9zc2NvMDEsMzI3NTAwDQoyMDA2LE1JTCxOTCxzaGVldGJlMDEsOTYyNTAwMA0KMjAwNixNSUwsTkwsbGVlY2EwMSw4NTAwMDAwDQoyMDA2LE1JTCxOTCxqZW5raWdlMDEsNzgzMzMzMw0KMjAwNixNSUwsTkwsa29za2ljbzAxLDYyNTAwMDANCjIwMDYsTUlMLE5MLG9oa2F0bzAxLDQ1MzAwMDANCjIwMDYsTUlMLE5MLG1pbGxlZGEwMiwzMjUwMDAwDQoyMDA2LE1JTCxOTCxjbGFya2JyMDIsMzIwMDAwMA0KMjAwNixNSUwsTkwsZGF2aXNkbzAyLDMyMDAwMDANCjIwMDYsTUlMLE5MLGtvbGJkYTAxLDIwMDAwMDANCjIwMDYsTUlMLE5MLHdlZWtzcmkwMSwxMjIwMDAwDQoyMDA2LE1JTCxOTCx0dXJuYmRlMDEsMTAwMDAwMA0KMjAwNixNSUwsTkwsY2lyaWxqZTAxLDg1MDAwMA0KMjAwNixNSUwsTkwsaGVsbGlyaTAxLDg1MDAwMA0KMjAwNixNSUwsTkwsbW9lbGxjaDAxLDcwMDAwMA0KMjAwNixNSUwsTkwsd2lzZW1hMDEsNjUwMDAwDQoyMDA2LE1JTCxOTCxjYXB1YWNoMDEsNDUwMDAwDQoyMDA2LE1JTCxOTCxoYWxsYmkwMyw0MTgwMDANCjIwMDYsTUlMLE5MLGhhcmR5amowMSwzNTUwMDANCjIwMDYsTUlMLE5MLGJ1c2hkYTAxLDM1MjAwMA0KMjAwNixNSUwsTkwsZGVsYXJqbzAxLDMzNzAwMA0KMjAwNixNSUwsTkwsZmVybmFqYTAxLDMzNzAwMA0KMjAwNixNSUwsTkwsbGVocmp1MDEsMzM3MDAwDQoyMDA2LE1JTCxOTCxncm9zc2dhMDEsMzM1MDAwDQoyMDA2LE1JTCxOTCxjYXBlbGpvMDEsMzMwMDAwDQoyMDA2LE1JTCxOTCxmaWVsZHByMDEsMzI5NTAwDQoyMDA2LE1JTCxOTCxoYXJ0Y28wMSwzMjk1MDANCjIwMDYsTllOLE5MLG1hcnRpcGUwMiwxNDg3NTAwMA0KMjAwNixOWU4sTkwsYmVsdHJjYTAxLDEzNTcxNDI4DQoyMDA2LE5ZTixOTCxkZWxnYWNhMDEsMTM1MDAwMDANCjIwMDYsTllOLE5MLHdhZ25lYmkwMiwxMDUwMDAwMA0KMjAwNixOWU4sTkwsZ2xhdml0bzAyLDk5OTM2NDANCjIwMDYsTllOLE5MLG1hdHN1a2EwMSw4MDMzMzMzDQoyMDA2LE5ZTixOTCxmbG95ZGNsMDEsNjYxNjg1Ng0KMjAwNixOWU4sTkwsbG9kdWNwYTAxLDY1OTkyMDYNCjIwMDYsTllOLE5MLHphbWJydmkwMSwzMDAwMDAwDQoyMDA2LE5ZTixOTCxqdWxpb2pvMDEsMjUyNTAwMA0KMjAwNixOWU4sTkwsdHJhY2hzdDAxLDI1MDAwMDANCjIwMDYsTllOLE5MLGJyYWRmY2gwMSwxNDAwMDAwDQoyMDA2LE5ZTixOTCxmcmFuY2p1MDEsMTA1MDAwMA0KMjAwNixOWU4sTkwsdmFsZW5qbzAzLDkxMjUwMA0KMjAwNixOWU4sTkwsd29vZHdjaDAxLDgyNTAwMA0KMjAwNixOWU4sTkwsY2FzdHJyYTAxLDgwMDAwMA0KMjAwNixOWU4sTkwsb2xpdmVkYTAyLDYwMDAwMA0KMjAwNixOWU4sTkwsY2hhdmVlbjAxLDUwMDAwMA0KMjAwNixOWU4sTkwsbmFkeXhhMDEsNDI3MDAwDQoyMDA2LE5ZTixOTCxyZXllc2pvMDEsNDAxNTAwDQoyMDA2LE5ZTixOTCxzYW5jaGR1MDEsMzk5NTAwDQoyMDA2LE5ZTixOTCx3cmlnaGRhMDMsMzc0MDAwDQoyMDA2LE5ZTixOTCxoZWlsbWFhMDEsMzU5MDAwDQoyMDA2LE5ZTixOTCxkaWF6dmkwMSwzMzUwMDANCjIwMDYsTllOLE5MLHBhZGlsanUwMSwzMzMwMDANCjIwMDYsTllOLE5MLGJhbm5pYnIwMSwzMjcwMDANCjIwMDYsTllOLE5MLGhlcm5hYW4wMSwzMjcwMDANCjIwMDYsUEhJLE5MLGFicmV1Ym8wMSwxMzYwMDAwMA0KMjAwNixQSEksTkwsYnVycmVwYTAxLDk3NTAwMDANCjIwMDYsUEhJLE5MLHdvbGZyYTAyLDkxMjUwMDANCjIwMDYsUEhJLE5MLGxpZWJlam8wMSw3NTgzMzMzDQoyMDA2LFBISSxOTCxsaWViZW1pMDEsNzUwMDAwMA0KMjAwNixQSEksTkwscm9sbGlqaTAxLDUwMDAwMDANCjIwMDYsUEhJLE5MLGJlbGxkYTAxLDQ3MDAwMDANCjIwMDYsUEhJLE5MLGdvcmRvdG8wMSw0NTAwMDAwDQoyMDA2LFBISSxOTCxyaG9kZWFyMDEsMzcwMDAwMA0KMjAwNixQSEksTkwsbGlkbGVjbzAxLDMzMDAwMDANCjIwMDYsUEhJLE5MLG15ZXJzYnIwMSwzMzAwMDAwDQoyMDA2LFBISSxOTCxyb3dhbmFhMDEsMzI1MDAwMA0KMjAwNixQSEksTkwsZnJhbmtyeTAxLDI2MDAwMDANCjIwMDYsUEhJLE5MLGNvcm1pcmgwMSwyNTAwMDAwDQoyMDA2LFBISSxOTCxmdWx0emFhMDEsMTIwMDAwMA0KMjAwNixQSEksTkwsbnVuZXphYjAxLDExMjUwMDANCjIwMDYsUEhJLE5MLGRlbGx1ZGEwMSw5NTAwMDANCjIwMDYsUEhJLE5MLHNhbnRhanUwMSw4MDAwMDANCjIwMDYsUEhJLE5MLGdvbnphYWwwMSw3NTAwMDANCjIwMDYsUEhJLE5MLHV0bGV5Y2gwMSw1MDAwMDANCjIwMDYsUEhJLE5MLGZhc2Fuc2EwMSw0MjUwMDANCjIwMDYsUEhJLE5MLG1hZHNvcnkwMSw0MDAwMDANCjIwMDYsUEhJLE5MLGhvd2FycnkwMSwzNTUwMDANCjIwMDYsUEhJLE5MLGJvb2tlY2gwMSwzNTAwMDANCjIwMDYsUEhJLE5MLGdlYXJ5Z2UwMSwzNTAwMDANCjIwMDYsUEhJLE5MLGZsb3lkZ2EwMSwzMzAwMDANCjIwMDYsUEhJLE5MLHZpY3Rvc2gwMSwzMzAwMDANCjIwMDYsUElULE5MLGNhc2V5c2UwMSw4NTAwMDAwDQoyMDA2LFBJVCxOTCxidXJuaWplMDEsNjAwMDAwMA0KMjAwNixQSVQsTkwsd2lsc29qYTAyLDQ3NTAwMDANCjIwMDYsUElULE5MLHdlbGxza2kwMSw0MTUwMDAwDQoyMDA2LFBJVCxOTCxyYW5kYWpvMDEsNDAwMDAwMA0KMjAwNixQSVQsTkwsd2lsc29jcjAzLDMzMDAwMDANCjIwMDYsUElULE5MLGhlcm5hcm8wMSwyNzUwMDAwDQoyMDA2LFBJVCxOTCxtYXJ0ZWRhMDEsMjI1MDAwMA0KMjAwNixQSVQsTkwscGVyZXpvbDAxLDE5MDAwMDANCjIwMDYsUElULE5MLHRvcnJlc2EwMSwxNTI1MDAwDQoyMDA2LFBJVCxOTCxiYXlqYTAxLDEwMDAwMDANCjIwMDYsUElULE5MLGhlcm5ham8wMSw4NTAwMDANCjIwMDYsUElULE5MLHZvZ2VscnkwMSw1NTUwMDANCjIwMDYsUElULE5MLHNhbnRvdmkwMSw1MDAwMDANCjIwMDYsUElULE5MLGNhc3Rpam8wMiwzNDgwMDANCjIwMDYsUElULE5MLGdvbnphbWkwMiwzNDcwMDANCjIwMDYsUElULE5MLGNvdGFodTAxLDM0MjAwMA0KMjAwNixQSVQsTkwsc2FuY2hmcjAxLDM0MjAwMA0KMjAwNixQSVQsTkwsZ3JhYm9qbzAyLDM0MTc1MA0KMjAwNixQSVQsTkwsZHVrZXphMDEsMzM1MDAwDQoyMDA2LFBJVCxOTCxkb3VtaXJ5MDEsMzMzMDAwDQoyMDA2LFBJVCxOTCxkdWZmeWNoMDEsMzMxMDAwDQoyMDA2LFBJVCxOTCxzbmVsbGlhMDEsMzMwMDAwDQoyMDA2LFBJVCxOTCxtY2xvdW5hMDEsMzI5MDAwDQoyMDA2LFBJVCxOTCxtYWhvbHBhMDEsMzI4MDAwDQoyMDA2LFBJVCxOTCxidWxsaWJyMDEsMzI3MDAwDQoyMDA2LFBJVCxOTCxjYXBwc21hMDEsMzI3MDAwDQoyMDA2LFBJVCxOTCx2YW5iZWpvMDEsMzI3MDAwDQoyMDA2LFNETixOTCxwYXJrY2gwMSwxNTUwNTE0Mg0KMjAwNixTRE4sTkwsa2xlc2tyeTAxLDkwMDAwMDANCjIwMDYsU0ROLE5MLGdpbGVzYnIwMiw3NjY2NjY2DQoyMDA2LFNETixOTCxjYW1lcm1pMDEsNzMzMzMzMw0KMjAwNixTRE4sTkwsd2lsbGl3bzAyLDUwMDAwMDANCjIwMDYsU0ROLE5MLGhvZmZtdHIwMSw0NTAwMDAwDQoyMDA2LFNETixOTCxjYXN0aXZpMDIsMzIwMDAwMA0KMjAwNixTRE4sTkwscGVhdnlqYTAxLDI1MDAwMDANCjIwMDYsU0ROLE5MLHJvYmVyZGEwNywyMjUwMDAwDQoyMDA2LFNETixOTCxtaXJhYmRvMDEsMTUwMDAwMA0KMjAwNixTRE4sTkwsbGluZWJzYzAxLDEzNjUwMDANCjIwMDYsU0ROLE5MLHBpYXp6bWkwMSwxMjUwMDAwDQoyMDA2LFNETixOTCxlc3Rlc3NoMDEsMTEwMDAwMA0KMjAwNixTRE4sTkwsYnJvY2FkbzAxLDEwMDAwMDANCjIwMDYsU0ROLE5MLGVtYnJlYWwwMSw4NTAwMDANCjIwMDYsU0ROLE5MLGJlbGxobWEwMSw4MDAwMDANCjIwMDYsU0ROLE5MLHlvdW5nZXIwMSw3MDAwMDANCjIwMDYsU0ROLE5MLGJsdW1nZTAxLDY1MDAwMA0KMjAwNixTRE4sTkwsYnJhemVkZTAxLDUwMDAwMA0KMjAwNixTRE4sTkwseW91bmdjaDAzLDUwMDAwMA0KMjAwNixTRE4sTkwsZ3JlZW5raDAxLDQwNTAwMA0KMjAwNixTRE4sTkwsc2xlZGd0ZTAxLDM0NzAwMA0KMjAwNixTRE4sTkwsc3dlZW5icjAxLDMzNTAwMA0KMjAwNixTRE4sTkwsaGVuc2xjbDAxLDMyOTAwMA0KMjAwNixTRE4sTkwsY2Fzc2lzYzAxLDMyODAwMA0KMjAwNixTRE4sTkwsZ29uemFhZDAxLDMyNzUwMA0KMjAwNixTRE4sTkwsam9obnNiZTAyLDMyNzUwMA0KMjAwNixTRE4sTkwsYmFyZmlqbzAyLDMyNzAwMA0KMjAwNixTRk4sTkwsYm9uZHNiYTAxLDE5MzMxNDcwDQoyMDA2LFNGTixOTCxzY2htaWphMDEsMTA1MDAwMDANCjIwMDYsU0ZOLE5MLGR1cmhhcmEwMSw3MDAwMDAwDQoyMDA2LFNGTixOTCxmaW5sZXN0MDEsNzAwMDAwMA0KMjAwNixTRk4sTkwsYmVuaXRhcjAxLDYyNzEyMDYNCjIwMDYsU0ZOLE5MLGFsb3VtbzAxLDU4Mjc5NzQNCjIwMDYsU0ZOLE5MLHdpbm5yYTAxLDU3NTAwMDANCjIwMDYsU0ZOLE5MLG1vcnJpbWEwMSw1NTI1NTI3DQoyMDA2LFNGTixOTCxmZWxpenBlMDEsNDAwMDAwMA0KMjAwNixTRk4sTkwsdml6cXVvbTAxLDM2NDAwODQNCjIwMDYsU0ZOLE5MLG1hdGhlbWkwMSwzMzUwMDAwDQoyMDA2LFNGTixOTCxrbGluZXN0MDIsMzAwMDAwMA0KMjAwNixTRk4sTkwsd29ycmV0aTAxLDE3NTAwMDANCjIwMDYsU0ZOLE5MLHZpemNham8wMSwxMjI2MTU4DQoyMDA2LFNGTixOTCxzd2Vlbm1hMDEsODUwMDAwDQoyMDA2LFNGTixOTCx3cmlnaGphMDEsODAwMDAwDQoyMDA2LFNGTixOTCxmYXNzZWplMDEsNzUwMDAwDQoyMDA2LFNGTixOTCxncmVlbnRvMDIsNzAwMDAwDQoyMDA2LFNGTixOTCx3YWxrZXR5MDEsMzg3MDAwDQoyMDA2LFNGTixOTCxsb3dyeW5vMDEsMzg1MDAwDQoyMDA2LFNGTixOTCxlbGxpc2phMDEsMzQ1MDAwDQoyMDA2LFNGTixOTCxuaWVrcmxhMDEsMzQ1MDAwDQoyMDA2LFNGTixOTCxtdW50ZXNjMDEsMzM0MDAwDQoyMDA2LFNGTixOTCxhY2NhcmplMDEsMzMwMDAwDQoyMDA2LFNGTixOTCx0YXNjaGphMDEsMzMwMDAwDQoyMDA2LFNGTixOTCxjYWlubWEwMSwzMjgwMDANCjIwMDYsU0xOLE5MLHB1am9sYWwwMSwxNDAwMDAwMA0KMjAwNixTTE4sTkwscm9sZW5zYzAxLDEyNDU2MzM2DQoyMDA2LFNMTixOTCxlZG1vbmppMDEsMTIwNzQ3MDINCjIwMDYsU0xOLE5MLGlzcmluamEwMSw4NzUwMDAwDQoyMDA2LFNMTixOTCxtdWxkZW1hMDEsNzc1MDAwMA0KMjAwNixTTE4sTkwsbWFycXVqYTAxLDUxNTAwMDANCjIwMDYsU0xOLE5MLGNhcnBlY2gwMSw1MDAwMDAwDQoyMDA2LFNMTixOTCxzdXBwYWplMDEsNDAwMDAwMA0KMjAwNixTTE4sTkwsZW5jYXJqdTAxLDM1MDAwMDANCjIwMDYsU0xOLE5MLGxvb3BlYnIwMSwzNTAwMDAwDQoyMDA2LFNMTixOTCxlY2tzdGRhMDEsMzMzMzMzMw0KMjAwNixTTE4sTkwscmluY29yaTAxLDEyMDAwMDANCjIwMDYsU0xOLE5MLHNwaXZlanUwMSwxMjAwMDAwDQoyMDA2LFNMTixOTCxwb25zb3NpMDEsMTAwMDAwMA0KMjAwNixTTE4sTkwsYmlnYmlsYTAxLDkwMDAwMA0KMjAwNixTTE4sTkwsdGFndWNzbzAxLDgyNTAwMA0KMjAwNixTTE4sTkwsYmVubmVnYTAxLDgwMDAwMA0KMjAwNixTTE4sTkwsbW9saW55YTAxLDQwMDAwMA0KMjAwNixTTE4sTkwsaGFuY29qbzAxLDM1NTAwMA0KMjAwNixTTE4sTkwsZmxvcmVyYTAxLDM1MDAwMA0KMjAwNixTTE4sTkwsbWlsZXNhYTAxLDM1MDAwMA0KMjAwNixTTE4sTkwsbHVuYWhlMDEsMzQwMDAwDQoyMDA2LFNMTixOTCxhbmtpZXJpMDEsMzM1MDAwDQoyMDA2LFNMTixOTCx0aG9tcGJyMDEsMzM0MDAwDQoyMDA2LFNMTixOTCxyb2RyaWpvMDMsMzMyMDAwDQoyMDA2LFNMTixOTCxzY2h1bXNrMDEsMzI5MDAwDQoyMDA2LFNMTixOTCx3YWlud2FkMDEsMzI3MDAwDQoyMDA2LFdBUyxOTCxzb3JpYWFsMDEsMTAwMDAwMDANCjIwMDYsV0FTLE5MLGhlcm5hbGkwMSw4MDAwMDAwDQoyMDA2LFdBUyxOTCx2aWRyb2pvMDEsNzAwMDAwMA0KMjAwNixXQVMsTkwsZ3V6bWFjcjAxLDQyMDAwMDANCjIwMDYsV0FTLE5MLGd1aWxsam8wMSw0MDAwMDAwDQoyMDA2LFdBUyxOTCxsYXdyZWJyMDIsMzg3NTAwMA0KMjAwNixXQVMsTkwsam9obnNuaTAxLDMyMDAwMDANCjIwMDYsV0FTLE5MLHNjaG5lYnIwMSwyNzAwMDAwDQoyMDA2LFdBUyxOTCxvcnRpenJhMDEsMjUwMDAwMA0KMjAwNixXQVMsTkwsYXJtYXN0bzAyLDIxMDAwMDANCjIwMDYsV0FTLE5MLGRyZXNlcnkwMSwxOTAwMDAwDQoyMDA2LFdBUyxOTCxlaXNjaGpvMDEsMTMwMDAwMA0KMjAwNixXQVMsTkwsY2xheXRybzAxLDEwMDAwMDANCjIwMDYsV0FTLE5MLHN0YW50bWkwMiwxMDAwMDAwDQoyMDA2LFdBUyxOTCxhbmRlcm1hMDIsOTI1MDAwDQoyMDA2LFdBUyxOTCxheWFsYWx1MDEsOTAwMDAwDQoyMDA2LFdBUyxOTCxmaWNrcm8wMSw4NTAwMDANCjIwMDYsV0FTLE5MLGxlY3JvbWEwMSw4NTAwMDANCjIwMDYsV0FTLE5MLGJ5cmRtYTAxLDgwMDAwMA0KMjAwNixXQVMsTkwsYXN0YWNwZTAxLDc1MDAwMA0KMjAwNixXQVMsTkwsamFja3NkYTA0LDcwMDAwMA0KMjAwNixXQVMsTkwsd2FyZGRhMDEsNzAwMDAwDQoyMDA2LFdBUyxOTCxnb256YXdpMDEsNjUwMDAwDQoyMDA2LFdBUyxOTCxyb2RyaWZlMDEsNjAwMDAwDQoyMDA2LFdBUyxOTCxjb3JkZWNoMDEsNTI1MDAwDQoyMDA2LFdBUyxOTCxwYXR0ZWpvMDIsNDUwMDAwDQoyMDA2LFdBUyxOTCxtYWpld2dhMDEsMzUyMDAwDQoyMDA2LFdBUyxOTCxyYXVjaGpvMDEsMzM1MDAwDQoyMDA2LFdBUyxOTCxiZXJnbWphMDEsMzI3MDAwDQoyMDA2LFdBUyxOTCx3YXRzb2JyMDEsMzI3MDAwDQoyMDA2LFdBUyxOTCx6aW1tZXJ5MDEsMzI3MDAwDQoyMDA3LEJBTCxBTCx0ZWphZG1pMDEsMTM4MTE0MTUNCjIwMDcsQkFMLEFMLG1vcmFtZTAxLDc3NTg1MDMNCjIwMDcsQkFMLEFMLGJlbnNva3IwMSw3MTQ0NTU2DQoyMDA3LEJBTCxBTCx3cmlnaGphMDIsNzAwMDAwMA0KMjAwNyxCQUwsQUwsaGVybmFyYTAyLDY1MDAwMDANCjIwMDcsQkFMLEFMLGJhZXpkYTAxLDU2NjY2NjcNCjIwMDcsQkFMLEFMLGdpYmJvamEwMSw1MDAwMDAwDQoyMDA3LEJBTCxBTCxwYXl0b2phMDEsNDUwMDAwMA0KMjAwNyxCQUwsQUwscGF0dGVjbzAxLDQzMDAwMDANCjIwMDcsQkFMLEFMLHJvYmVyYnIwMSw0MjAwMDAwDQoyMDA3LEJBTCxBTCxodWZmYXUwMSw0MDAwMDAwDQoyMDA3LEJBTCxBTCxiZWRhcmVyMDEsMzQwMDAwMA0KMjAwNyxCQUwsQUwsYnJhZGZjaDAxLDMxNjY2NjcNCjIwMDcsQkFMLEFMLHRyYWNoc3QwMSwzMDAwMDAwDQoyMDA3LEJBTCxBTCx3YWxrZWphMDEsMzAwMDAwMA0KMjAwNyxCQUwsQUwsbWlsbGFrZTAxLDI3NTAwMDANCjIwMDcsQkFMLEFMLGNhYnJlZGEwMSwxODI1MDAwDQoyMDA3LEJBTCxBTCxsb2V3ZWFkMDEsOTY3MDAwDQoyMDA3LEJBTCxBTCxiYWtvcGEwMSw5MDAwMDANCjIwMDcsQkFMLEFMLHdpbGxpc2MwMSw5MDAwMDANCjIwMDcsQkFMLEFMLGdvbWV6Y2gwMiw4NTAwMDANCjIwMDcsQkFMLEFMLHBhcnJpam8wMSw1NzUwMDANCjIwMDcsQkFMLEFMLHJheWNoMDEsNDIwMDAwDQoyMDA3LEJBTCxBTCxtYXJrYW5pMDEsNDAwMDAwDQoyMDA3LEJBTCxBTCxieW51bWZyMDEsMzgwMDAwDQoyMDA3LEJBTCxBTCxndXRocmplMDEsMzgwMDAwDQoyMDA3LEJBTCxBTCxybGVhbHNlMDEsMzgwMDAwDQoyMDA3LEJPUyxBTCxyYW1pcm1hMDIsMTcwMTYzODENCjIwMDcsQk9TLEFMLGRyZXdqZDAxLDE0MDAwMDAwDQoyMDA3LEJPUyxBTCxvcnRpemRhMDEsMTMyNTAwMDANCjIwMDcsQk9TLEFMLHNjaGlsY3UwMSwxMzAwMDAwMA0KMjAwNyxCT1MsQUwsdmFyaXRqYTAxLDExMDAwMDAwDQoyMDA3LEJPUyxBTCxjbGVtZW1hMDEsOTUwMDAwMA0KMjAwNyxCT1MsQUwsbG93ZWxtaTAxLDkwMDAwMDANCjIwMDcsQk9TLEFMLGx1Z29qdTAxLDgyNTAwMDANCjIwMDcsQk9TLEFMLGJlY2tlam8wMiw2NjY2NjY3DQoyMDA3LEJPUyxBTCxtYXRzdWRhMDEsNjMzMzMzMw0KMjAwNyxCT1MsQUwsaGluc2tlcjAxLDU2MjUwMDANCjIwMDcsQk9TLEFMLHBpbmVpam8wMSw0MDAwMDAwDQoyMDA3LEJPUyxBTCx3YWtlZnRpMDEsNDAwMDAwMA0KMjAwNyxCT1MsQUwsY3Jpc3BjbzAxLDM4MzMzMzMNCjIwMDcsQk9TLEFMLHRhdmFyanUwMSwzMzUwMDAwDQoyMDA3LEJPUyxBTCx0aW1saW1pMDEsMjgwMDAwMA0KMjAwNyxCT1MsQUwsY29yYWFsMDEsMjAwMDAwMA0KMjAwNyxCT1MsQUwscGVuYXdpMDEsMTg3NTAwMA0KMjAwNyxCT1MsQUwscm9tZXJqYzAxLDE2MDAwMDANCjIwMDcsQk9TLEFMLGRvbm5lYnIwMSwxNDAwMDAwDQoyMDA3LEJPUyxBTCxva2FqaWhpMDEsMTIyNTAwMA0KMjAwNyxCT1MsQUwsbWlyYWJkbzAxLDc1MDAwMA0KMjAwNyxCT1MsQUwsc255ZGVreTAxLDUzNTAwMA0KMjAwNyxCT1MsQUwscGFwZWxqbzAxLDQyNTUwMA0KMjAwNyxCT1MsQUwseW91a2xrZTAxLDQyNDUwMA0KMjAwNyxCT1MsQUwsbG9wZXpqYTAyLDQwMjUwMA0KMjAwNyxCT1MsQUwsbGVzdGVqbzAxLDM4NDAwMA0KMjAwNyxCT1MsQUwscGVkcm9kdTAxLDM4MDAwMA0KMjAwNyxDSEEsQUwsdGhvbWVqaTAxLDE0ODMzMzMzDQoyMDA3LENIQSxBTCx2YXpxdWphMDEsMTI1MDAwMDANCjIwMDcsQ0hBLEFMLGtvbmVycGEwMSwxMjAwMDAwMA0KMjAwNyxDSEEsQUwsZ2FybGFqbzAxLDEwMDAwMDAwDQoyMDA3LENIQSxBTCxidWVocm1hMDEsOTUwMDAwMA0KMjAwNyxDSEEsQUwsY29udHJqbzAxLDkwMDAwMDANCjIwMDcsQ0hBLEFMLGR5ZWplMDEsNzUwMDAwMA0KMjAwNyxDSEEsQUwscGllcnphajAxLDU1MDAwMDANCjIwMDcsQ0hBLEFMLGNyZWRlam8wMSw0OTQwMDAwDQoyMDA3LENIQSxBTCx1cmliZWp1MDEsNDE1MDAwMA0KMjAwNyxDSEEsQUwsaWd1Y2h0YTAxLDMyNTAwMDANCjIwMDcsQ0hBLEFMLHBvZHNlc2MwMSwyOTAwMDAwDQoyMDA3LENIQSxBTCxtYWNrb3JvMDEsMjc1MDAwMA0KMjAwNyxDSEEsQUwsY2ludHJhbDAxLDE5MDAwMDANCjIwMDcsQ0hBLEFMLGhhbGx0bzAyLDE3NTAwMDANCjIwMDcsQ0hBLEFMLG1hY2RvbWkwMSwxNTAwMDAwDQoyMDA3LENIQSxBTCxvenVuYXBhMDEsODAwMDAwDQoyMDA3LENIQSxBTCxlcnN0YWRhMDEsNzUwMDAwDQoyMDA3LENIQSxBTCx0aG9ybm1hMDEsNDI1MDAwDQoyMDA3LENIQSxBTCxzaXNjb2FuMDEsNDA1MDAwDQoyMDA3LENIQSxBTCxqZW5rc2JvMDEsNDAwMDAwDQoyMDA3LENIQSxBTCxhbmRlcmJyMDMsMzkwMDAwDQoyMDA3LENIQSxBTCxhYXJkc2RhMDEsMzg3NTAwDQoyMDA3LENIQSxBTCxtYXNzZW5pMDEsMzgxMDAwDQoyMDA3LENIQSxBTCxkYW5rc2pvMDEsMzgwMDAwDQoyMDA3LENIQSxBTCxtb2xpbmd1MDEsMzgwMDAwDQoyMDA3LENMRSxBTCxzYWJhdGNjMDEsODc1MDAwMA0KMjAwNyxDTEUsQUwsYnlyZHBhMDEsNzAwMDAwMA0KMjAwNyxDTEUsQUwsd2VzdGJqYTAxLDYxMDAwMDANCjIwMDcsQ0xFLEFMLGhhZm5ldHIwMSw0MDUwMDAwDQoyMDA3LENMRSxBTCxib3Jvd2pvMDEsNDAwMDAwMA0KMjAwNyxDTEUsQUwsYmxha2VjYTAxLDM3NTAwMDANCjIwMDcsQ0xFLEFMLGRlbGx1ZGEwMSwzNzUwMDAwDQoyMDA3LENMRSxBTCxoZXJuYXJvMDEsMzMwMDAwMA0KMjAwNyxDTEUsQUwsbWFydGl2aTAxLDMyMDAwMDANCjIwMDcsQ0xFLEFMLGxlZWNsMDIsMzAwMDAwMA0KMjAwNyxDTEUsQUwsbml4b250cjAxLDMwMDAwMDANCjIwMDcsQ0xFLEFMLG1pY2hhamEwMSwyMDUwMDAwDQoyMDA3LENMRSxBTCxmdWx0emFhMDEsMTUwMDAwMA0KMjAwNyxDTEUsQUwscGVyYWxqaDAxLDEwMDAwMDANCjIwMDcsQ0xFLEFMLHNpemVtZ3IwMSw5MTY2NjcNCjIwMDcsQ0xFLEFMLGJldGFucmEwMSw4NDAwMDANCjIwMDcsQ0xFLEFMLGRhdmlzamEwMiw2NzAwMDANCjIwMDcsQ0xFLEFMLG1pbGxlbWEwMiw1NjAwMDANCjIwMDcsQ0xFLEFMLGJhcmZpam8wMiwzOTU4MDANCjIwMDcsQ0xFLEFMLGNhYnJlZmUwMSwzOTE4MDANCjIwMDcsQ0xFLEFMLGNhcm1vZmEwMSwzODc1MDANCjIwMDcsQ0xFLEFMLHNvd2VyamUwMSwzODQ4MDANCjIwMDcsQ0xFLEFMLGluZ2xlam8wMSwzODM2MDANCjIwMDcsQ0xFLEFMLHNob3Bwa2UwMSwzODM0MDANCjIwMDcsQ0xFLEFMLGdhcmtvcnkwMSwzODMxMDANCjIwMDcsQ0xFLEFMLG1hcnRlYW4wMSwzODMxMDANCjIwMDcsQ0xFLEFMLGd1dGllZnIwMSwzODE5MDANCjIwMDcsQ0xFLEFMLG1hc3RudG8wMSwzODE1MDANCjIwMDcsQ0xFLEFMLHJvdXNlbWkwMSwzODAxMDANCjIwMDcsREVULEFMLG9yZG9ubWEwMSwxMzIwMDAwMA0KMjAwNyxERVQsQUwsc2hlZmZnYTAxLDEwOTE2MDcxDQoyMDA3LERFVCxBTCxyb2RyaWl2MDEsMTA1Njc2MzkNCjIwMDcsREVULEFMLHJvZ2Vya2UwMSw4MDAwMDAwDQoyMDA3LERFVCxBTCxndWlsbGNhMDEsNTAwMDAwMA0KMjAwNyxERVQsQUwsaW5nZWJyMDEsNDkwMDAwMA0KMjAwNyxERVQsQUwsam9uZXN0bzAyLDQ4MDkxNTkNCjIwMDcsREVULEFMLG1vbnJvY3IwMSw0Nzc1MDAwDQoyMDA3LERFVCxBTCxwb2xhbnBsMDEsNDYwMDAwMA0KMjAwNyxERVQsQUwsYm9uZGVqZTAxLDQ1MDAwMDANCjIwMDcsREVULEFMLGNhc2V5c2UwMSw0MDAwMDAwDQoyMDA3LERFVCxBTCxyb2Jlcm5hMDEsMzI2MDAwMA0KMjAwNyxERVQsQUwsbWFyb3RtaTAxLDI5NTAwMDANCjIwMDcsREVULEFMLG1lc2FqbzAxLDI1MDAwMDANCjIwMDcsREVULEFMLHBlcmV6bmUwMSwyNTAwMDAwDQoyMDA3LERFVCxBTCxpbmZhbm9tMDEsMTMwMDAwMA0KMjAwNyxERVQsQUwsdmVybGFqdTAxLDEwMzAwMDANCjIwMDcsREVULEFMLHJvZG5lZmUwMSwxMDAwMDAwDQoyMDA3LERFVCxBTCx3aWxzb3ZhMDEsOTUwMDAwDQoyMDA3LERFVCxBTCxzZWF5Ym8wMSw0NTAwMDANCjIwMDcsREVULEFMLHRoYW1lbWEwMSw0MzI1MDANCjIwMDcsREVULEFMLGxlZGV6d2kwMSw0MTUwMDANCjIwMDcsREVULEFMLGdyYW5kY3UwMSw0MTAwMDANCjIwMDcsREVULEFMLHp1bWF5am8wMSw0MTAwMDANCjIwMDcsREVULEFMLGdyaWxsamEwMSwzOTUwMDANCjIwMDcsREVULEFMLGNvbG9ucm8wMSwzODUwMDANCjIwMDcsREVULEFMLGR1cmJpY2gwMSwzODUwMDANCjIwMDcsREVULEFMLGdpYXJydG8wMSwzODAwMDANCjIwMDcsREVULEFMLHJhYmVsbWkwMSwzODAwMDANCjIwMDcsS0NBLEFMLHN3ZWVubWkwMSwxMTAwMDAwMA0KMjAwNyxLQ0EsQUwscGVyZXpvZDAxLDc3NTAwMDANCjIwMDcsS0NBLEFMLG1lY2hlZ2kwMSw3NDAwMDAwDQoyMDA3LEtDQSxBTCxsYXJ1ZWphMDEsNTIwMDAwMA0KMjAwNyxLQ0EsQUwsZG90ZWxvYzAxLDUwMDAwMDANCjIwMDcsS0NBLEFMLHNhbmRlcmUwMiw1MDAwMDAwDQoyMDA3LEtDQSxBTCxlbGFydHNjMDEsNDAwMDAwMA0KMjAwNyxLQ0EsQUwsZ3J1ZHptYTAxLDQwMDAwMDANCjIwMDcsS0NBLEFMLGJyb3duZW0wMSwzNDUwMDAwDQoyMDA3LEtDQSxBTCxkZWplc2RhMDEsMjAwMDAwMA0KMjAwNyxLQ0EsQUwscmlza2VkYTAxLDIwMDAwMDANCjIwMDcsS0NBLEFMLGJhbGVqbzAxLDE4MDAwMDANCjIwMDcsS0NBLEFMLGdvYmJsamkwMSw3MTI1MDANCjIwMDcsS0NBLEFMLHdlbGxldG8wMSw2MzUwMDANCjIwMDcsS0NBLEFMLGdsb2Fkcm8wMSw2MjUwMDANCjIwMDcsS0NBLEFMLGR1Y2t3YnIwMSw1NTAwMDANCjIwMDcsS0NBLEFMLGJ1Y2tqbzAxLDQ0MDAwMA0KMjAwNyxLQ0EsQUwsZ2VybWFlczAxLDQyMzAwMA0KMjAwNyxLQ0EsQUwsaHVkc29sdTAxLDQyMjAwMA0KMjAwNyxLQ0EsQUwsZGVsYXJqbzAxLDQxNzAwMA0KMjAwNyxLQ0EsQUwsdGVhaGVtYTAxLDQxNjAwMA0KMjAwNyxLQ0EsQUwsZ3JlaW56YTAxLDQwNzAwMA0KMjAwNyxLQ0EsQUwscGVyYWxqbzAxLDQwMDUwMA0KMjAwNyxLQ0EsQUwsbmVsc29qbzAxLDM5NDAwMA0KMjAwNyxLQ0EsQUwsc2hlYWxyeTAxLDM5MjUwMA0KMjAwNyxLQ0EsQUwsbnVuZXpsZTAxLDM4MjAwMA0KMjAwNyxLQ0EsQUwsYnJhdW5yeTAxLDM4MDAwMA0KMjAwNyxLQ0EsQUwsZ29yZG9hbDAxLDM4MDAwMA0KMjAwNyxLQ0EsQUwscGVuYXRvMDIsMzgwMDAwDQoyMDA3LEtDQSxBTCxzYW5jaGFuMDIsMzgwMDAwDQoyMDA3LEtDQSxBTCxzb3JpYWpvMDEsMzgwMDAwDQoyMDA3LExBQSxBTCxjb2xvbmJhMDEsMTYwMDAwMDANCjIwMDcsTEFBLEFMLGd1ZXJydmwwMSwxNDUwMDAwMA0KMjAwNyxMQUEsQUwsYW5kZXJnYTAxLDExNjAwMDAwDQoyMDA3LExBQSxBTCxlc2NvYmtlMDEsOTAwMDAwMA0KMjAwNyxMQUEsQUwsY2FicmVvcjAxLDg1MDAwMDANCjIwMDcsTEFBLEFMLHJvZHJpZnIwMyw3MDAwMDAwDQoyMDA3LExBQSxBTCxtYXR0aGdhMDIsNjQwMDAwMA0KMjAwNyxMQUEsQUwsaGlsbGVzaDAyLDYwMDAwMDANCjIwMDcsTEFBLEFMLGxhY2tlam8wMSw1ODMzMzMzDQoyMDA3LExBQSxBTCxzcGVpZWp1MDEsMzc1MDAwMA0KMjAwNyxMQUEsQUwsZmlnZ2ljaDAxLDM1MDAwMDANCjIwMDcsTEFBLEFMLHNoaWVsc2MwMSwzNDAwMDAwDQoyMDA3LExBQSxBTCxjYXJyYWhlMDEsMzAwMDAwMA0KMjAwNyxMQUEsQUwscml2ZXJqdTAxLDIwMjUwMDANCjIwMDcsTEFBLEFMLG9saXZlZGEwMiwxNTAwMDAwDQoyMDA3LExBQSxBTCxtb2xpbmpvMDEsMTM1MDAwMA0KMjAwNyxMQUEsQUwscXVpbmxybzAxLDgwMDAwMA0KMjAwNyxMQUEsQUwsaXp0dXJtYTAxLDQ0MDAwMA0KMjAwNyxMQUEsQUwsc2FudGFlcjAxLDQyNTAwMA0KMjAwNyxMQUEsQUwsa2VuZHJobzAxLDM5NTAwMA0KMjAwNyxMQUEsQUwsbmFwb2xtaTAxLDM5NTAwMA0KMjAwNyxMQUEsQUwsd2VhdmVqZTAyLDM4NTAwMA0KMjAwNyxMQUEsQUwsYXliYXJlcjAxLDM4MjUwMA0KMjAwNyxMQUEsQUwsa290Y2hjYTAxLDM4MjUwMA0KMjAwNyxMQUEsQUwsbWNwaGVkYTAxLDM4MjUwMA0KMjAwNyxMQUEsQUwsbXVycGh0bzAzLDM4MjUwMA0KMjAwNyxMQUEsQUwsd2lsbGlyZTAzLDM4MjUwMA0KMjAwNyxMQUEsQUwsbW9zZWxkdTAxLDM4MDUwMA0KMjAwNyxMQUEsQUwsYm9vdGNjaDAxLDM4MDAwMA0KMjAwNyxMQUEsQUwsc2F1bmRqbzAxLDM4MDAwMA0KMjAwNyxNSU4sQUwsc2FudGFqbzAxLDEzMDAwMDAwDQoyMDA3LE1JTixBTCxodW50ZXRvMDEsMTIwMDAwMDANCjIwMDcsTUlOLEFMLGNhc3RpbHUwMSw1NzUwMDAwDQoyMDA3LE1JTixBTCxuYXRoYWpvMDEsNTI1MDAwMA0KMjAwNyxNSU4sQUwsbW9ybmVqdTAxLDQ1MDAwMDANCjIwMDcsTUlOLEFMLHNpbHZhY2EwMSw0MzI1MDAwDQoyMDA3LE1JTixBTCxtYXVlcmpvMDEsMzc1MDAwMA0KMjAwNyxNSU4sQUwsY3VkZHltaTAxLDM1NzUwMDANCjIwMDcsTUlOLEFMLG9ydGl6cmEwMSwzMTAwMDAwDQoyMDA3LE1JTixBTCx3aGl0ZXJvMDIsMjUwMDAwMA0KMjAwNyxNSU4sQUwscmluY29qdTAxLDIwMDAwMDANCjIwMDcsTUlOLEFMLHB1bnRvbmkwMSwxODAwMDAwDQoyMDA3LE1JTixBTCxjaXJpbGplMDEsMTUwMDAwMA0KMjAwNyxNSU4sQUwscG9uc29zaTAxLDEwMDAwMDANCjIwMDcsTUlOLEFMLHJleWVzZGUwMSwxMDAwMDAwDQoyMDA3LE1JTixBTCxmb3JkbGUwMSw5ODUwMDANCjIwMDcsTUlOLEFMLHJlZG1vbWkwMSw5NTAwMDANCjIwMDcsTUlOLEFMLGNyYWluamUwMSw1MDAwMDANCjIwMDcsTUlOLEFMLGxpcmlhZnIwMSw0MTAwMDANCjIwMDcsTUlOLEFMLGd1ZXJybWEwMiw0MDc1MDANCjIwMDcsTUlOLEFMLGJhcnRsamEwMSw0MDUwMDANCjIwMDcsTUlOLEFMLHR5bmVyamEwMSw0MDAwMDANCjIwMDcsTUlOLEFMLGJvbnNlYm8wMSwzOTc1MDANCjIwMDcsTUlOLEFMLG5lc2hlcGEwMSwzOTUwMDANCjIwMDcsTUlOLEFMLHJvZHJpbHUwMSwzOTIwMDANCjIwMDcsTUlOLEFMLGt1YmVsamEwMSwzODc1MDANCjIwMDcsTUlOLEFMLGhlaW50Y2gwMSwzODAwMDANCjIwMDcsTUlOLEFMLG1hY2hhYWwwMSwzODAwMDANCjIwMDcsTllBLEFMLGdpYW1iamEwMSwyMzQyODU3MQ0KMjAwNyxOWUEsQUwscm9kcmlhbDAxLDIyNzA4NTI1DQoyMDA3LE5ZQSxBTCxqZXRlcmRlMDEsMjE2MDAwMDANCjIwMDcsTllBLEFMLHBldHRpYW4wMSwxNjAwMDAwMA0KMjAwNyxOWUEsQUwsYWJyZXVibzAxLDE1MDAwMDAwDQoyMDA3LE5ZQSxBTCxkYW1vbmpvMDEsMTMwMDAwMDANCjIwMDcsTllBLEFMLG1hdHN1aGkwMSwxMzAwMDAwMA0KMjAwNyxOWUEsQUwscG9zYWRqbzAxLDEyMDAwMDAwDQoyMDA3LE5ZQSxBTCxtdXNzaW1pMDEsMTEwNzA0MjMNCjIwMDcsTllBLEFMLHJpdmVybWEwMSwxMDUwMDAwMA0KMjAwNyxOWUEsQUwscGF2YW5jYTAxLDEwMDAwMDAwDQoyMDA3LE5ZQSxBTCxmYXJuc2t5MDEsNTY2NjY2Nw0KMjAwNyxOWUEsQUwsaWdhd2FrZTAxLDQwMDAwMDANCjIwMDcsTllBLEFMLHZpemNhbHUwMSwzMDAwMDAwDQoyMDA3LE5ZQSxBTCxtaWVudGRvMDEsMTUwMDAwMA0KMjAwNyxOWUEsQUwsbXllcnNtaTAxLDEyNTAwMDANCjIwMDcsTllBLEFMLGNhaXJvbWkwMSw3NTAwMDANCjIwMDcsTllBLEFMLHBoZWxwam8wMSw2MDAwMDANCjIwMDcsTllBLEFMLGNhbm9ybzAxLDQ5MDgwMA0KMjAwNyxOWUEsQUwsd2FuZ2NoMDEsNDg5NTAwDQoyMDA3LE5ZQSxBTCxwcm9jdHNjMDEsNDU1OTIzDQoyMDA3LE5ZQSxBTCxjYWJyZW1lMDEsNDMyNDAwDQoyMDA3LE5ZQSxBTCxicnVuZWJyMDEsMzk1NTQ1DQoyMDA3LE5ZQSxBTCxrYXJzdGplMDEsMzg5NDk1DQoyMDA3LE5ZQSxBTCxyYXNuZWRhMDEsMzg0NTIzDQoyMDA3LE5ZQSxBTCx2ZXJhc2pvMDEsMzgyNDc1DQoyMDA3LE5ZQSxBTCxuaWV2ZXdpMDEsMzgyMTUwDQoyMDA3LE5ZQSxBTCxoZW5uc2UwMSwzODIwNDgNCjIwMDcsT0FLLEFMLGtlbmRhamEwMSwxMjg1ODE5NA0KMjAwNyxPQUssQUwsY2hhdmVlcjAxLDk1MDAwMDANCjIwMDcsT0FLLEFMLHBpYXp6bWkwMSw4NTAwMDAwDQoyMDA3LE9BSyxBTCxrb3RzYW1hMDEsODAwMDAwMA0KMjAwNyxPQUssQUwsbG9haXplczAxLDc1MDAwMDANCjIwMDcsT0FLLEFMLGJyYWRsbWkwMSw0MDAwMDAwDQoyMDA3LE9BSyxBTCxlbGxpc21hMDEsMzUwMDAwMA0KMjAwNyxPQUssQUwsa2VubmVqbzA0LDI4MDAwMDANCjIwMDcsT0FLLEFMLGNyb3NiYm8wMSwyNTUwMDAwDQoyMDA3LE9BSyxBTCxlbWJyZWFsMDEsMjM1NjQ5Ng0KMjAwNyxPQUssQUwsaGFyZGVyaTAxLDIyNTAwMDANCjIwMDcsT0FLLEFMLGhhcmVuZGEwMSwyMjUwMDAwDQoyMDA3LE9BSyxBTCxraWVsdGJvMDEsMjEwMDAwMA0KMjAwNyxPQUssQUwsY2FsZXJraTAxLDE2MDAwMDANCjIwMDcsT0FLLEFMLHNjdXRhbWEwMSwxNTUwMDAwDQoyMDA3LE9BSyxBTCx3aXRhc2phMDEsMTUwMDAwMA0KMjAwNyxPQUssQUwsZHVjaHNqdTAxLDExODc1MDANCjIwMDcsT0FLLEFMLHN0ZXdhc2gwMSwxMDAwMDAwDQoyMDA3LE9BSyxBTCxtZWxodWFkMDEsODE1MDAwDQoyMDA3LE9BSyxBTCx3YWxrZXRvMDQsNDUwMDAwDQoyMDA3LE9BSyxBTCxnYXVkaWNoMDEsNDAwMDAwDQoyMDA3LE9BSyxBTCxzd2lzaG5pMDEsNDAwMDAwDQoyMDA3LE9BSyxBTCxqb2huc2RhMDYsMzkwMDAwDQoyMDA3LE9BSyxBTCxkaW5hcmxlMDEsMzg5NzUwDQoyMDA3LE9BSyxBTCxibGFudGpvMDEsMzgwMDAwDQoyMDA3LE9BSyxBTCxidWNrdHIwMSwzODAwMDANCjIwMDcsT0FLLEFMLG1hcnNoamEwMSwzODAwMDANCjIwMDcsT0FLLEFMLHN0cmVlaHUwMSwzODAwMDANCjIwMDcsU0VBLEFMLHNleHNvcmkwMSwxNTUwMDAwMA0KMjAwNyxTRUEsQUwsYmVsdHJhZDAxLDEyOTAwMDAwDQoyMDA3LFNFQSxBTCxzdXp1a2ljMDEsMTI1MDAwMDANCjIwMDcsU0VBLEFMLHdhc2hiamEwMSw5ODUwMDAwDQoyMDA3LFNFQSxBTCx3ZWF2ZWplMDEsODMyNTAwMA0KMjAwNyxTRUEsQUwsdmlkcm9qbzAxLDc1MDAwMDANCjIwMDcsU0VBLEFMLGJhdGlzbWkwMSw2MDAwMDAwDQoyMDA3LFNFQSxBTCxqb2hqaWtlMDEsNTkzMzMzMw0KMjAwNyxTRUEsQUwsaWJhbmVyYTAxLDU1MDAwMDANCjIwMDcsU0VBLEFMLGd1aWxsam8wMSw1MDAwMDAwDQoyMDA3LFNFQSxBTCxicm91c2JlMDEsMzU1MDAwMA0KMjAwNyxTRUEsQUwscHV0empqMDEsMjcwMDAwMA0KMjAwNyxTRUEsQUwscmFtaXJobzAxLDI2NTAwMDANCjIwMDcsU0VBLEFMLHJlaXRzY2gwMSwxMzUwMDAwDQoyMDA3LFNFQSxBTCxtYXRlb2p1MDEsMTA3NTAwMA0KMjAwNyxTRUEsQUwscmhvZGVhcjAxLDEwMDAwMDANCjIwMDcsU0VBLEFMLGJsb29td2kwMSw4NzUwMDANCjIwMDcsU0VBLEFMLGJldGFueXUwMSw3Mjc1MDANCjIwMDcsU0VBLEFMLGhlcm5hZmUwMiw0MjAwMDANCjIwMDcsU0VBLEFMLGxvcGV6am8wMSw0MjAwMDANCjIwMDcsU0VBLEFMLHNoZXJyZ2UwMSwzOTUwMDANCjIwMDcsU0VBLEFMLGVsbGlzamEwMSwzOTAwMDANCjIwMDcsU0VBLEFMLGJ1cmtlamEwMiwzODAwMDANCjIwMDcsU0VBLEFMLGppbWVuY2UwMSwzODAwMDANCjIwMDcsU0VBLEFMLGxvd2VtYTAxLDM4MDAwMA0KMjAwNyxTRUEsQUwsbW9ycm9icjAxLDM4MDAwMA0KMjAwNyxTRUEsQUwsd2hpdGVzZTAyLDM4MDAwMA0KMjAwNyxUQkEsQUwsY3Jhd2ZjYTAyLDQxMjUwMDANCjIwMDcsVEJBLEFMLGZvc3N1Y2EwMSwyNzI1MDAwDQoyMDA3LFRCQSxBTCx3aWdnaXR5MDEsMjcwMDAwMA0KMjAwNyxUQkEsQUwsaXdhbXVhazAxLDE4MDAwMDANCjIwMDcsVEJBLEFMLHlvdW5nZGUwMywxMzQwMDAwDQoyMDA3LFRCQSxBTCxzZW9qYTAxLDEyMDAwMDANCjIwMDcsVEJBLEFMLG5vcnRvZ3IwMSw4MDAwMDANCjIwMDcsVEJBLEFMLHBlbmFjYTAxLDgwMDAwMA0KMjAwNyxUQkEsQUwsYmFsZGVybzAxLDc1MDAwMA0KMjAwNyxUQkEsQUwscmV5ZXNhbDAxLDc1MDAwMA0KMjAwNyxUQkEsQUwscGF1bGpvMDEsNjI1MDAwDQoyMDA3LFRCQSxBTCxnbG92ZWdhMDEsNjAwMDAwDQoyMDA3LFRCQSxBTCxrYXptaXNjMDEsNDI0MzAwDQoyMDA3LFRCQSxBTCxjYW1wc2gwMSw0MTEwMDANCjIwMDcsVEJBLEFMLGdvbWVzam8wMSw0MDc4MDANCjIwMDcsVEJBLEFMLGx1Z29ydTAxLDQwMzYwMA0KMjAwNyxUQkEsQUwsbmF2YXJkaTAxLDM5OTgwMA0KMjAwNyxUQkEsQUwsc2hpZWxqYTAyLDM5NDkwMA0KMjAwNyxUQkEsQUwsamFja3NlZDAxLDM5MjMwMA0KMjAwNyxUQkEsQUwsc3dpdHpqbzAxLDM5MTEwMA0KMjAwNyxUQkEsQUwsdXB0b25iajAxLDM4NjkwMA0KMjAwNyxUQkEsQUwsaGFycmlicjAxLDM4NjEwMA0KMjAwNyxUQkEsQUwsem9icmliZTAxLDM4MzQwMA0KMjAwNyxUQkEsQUwsc3Rva2VicjAxLDM4MzEwMA0KMjAwNyxUQkEsQUwscnl1amEwMSwzODIyMDANCjIwMDcsVEJBLEFMLHNhbGFzanUwMSwzODIwMDANCjIwMDcsVEJBLEFMLGR1a2VzZWwwMSwzODAwMDANCjIwMDcsVEVYLEFMLG1pbGx3a2UwMSw5ODM2MTE2DQoyMDA3LFRFWCxBTCxwYWRpbHZpMDEsOTAwMDAwMA0KMjAwNyxURVgsQUwsdGVpeGVtYTAxLDkwMDAwMDANCjIwMDcsVEVYLEFMLGdhZ25lZXIwMSw2MDAwMDAwDQoyMDA3LFRFWCxBTCxsb2Z0b2tlMDEsNjAwMDAwMA0KMjAwNyxURVgsQUwsYmxhbG9oYTAxLDQ4MDAwMDANCjIwMDcsVEVYLEFMLHdpbGtlYnIwMSw0MzUwMDAwDQoyMDA3LFRFWCxBTCx5b3VuZ21pMDIsMzU3NTAwMA0KMjAwNyxURVgsQUwsY2F0YWxmcjAxLDM1MDAwMDANCjIwMDcsVEVYLEFMLG90c3VrYWswMSwzMDAwMDAwDQoyMDA3LFRFWCxBTCxtYWhheXJvMDEsMTI1MDAwMA0KMjAwNyxURVgsQUwsYmVub2lqbzAxLDEwNTAwMDANCjIwMDcsVEVYLEFMLGhhaXJzamUwMiw3NTAwMDANCjIwMDcsVEVYLEFMLGNoZW5icjAxLDYwMDAwMA0KMjAwNyxURVgsQUwsc29zYXNhMDEsNTAwMDAwDQoyMDA3LFRFWCxBTCx3b29kbWkwMSw0MjAwMDANCjIwMDcsVEVYLEFMLGthdGFtYTAxLDQxNTAwMA0KMjAwNyxURVgsQUwsbGFpcmRnZTAxLDQwMDMyMg0KMjAwNyxURVgsQUwsbWNjYXJicjAxLDM5NjA2OA0KMjAwNyxURVgsQUwsd2lsc29jajAxLDM5MTA0Mw0KMjAwNyxURVgsQUwsbG9la2EwMSwzOTA3NjUNCjIwMDcsVEVYLEFMLGtpbnNsaWEwMSwzOTA3MDgNCjIwMDcsVEVYLEFMLHRlamVkcm8wMSwzODk0NTANCjIwMDcsVEVYLEFMLGZlbGRtc2MwMSwzODgyMDMNCjIwMDcsVEVYLEFMLGNydXpuZTAyLDM4MjAwMA0KMjAwNyxURVgsQUwscmhlaW5qbzAxLDM4MjAwMA0KMjAwNyxURVgsQUwsYXJpYXNqbzAxLDM4MTAwMA0KMjAwNyxURVgsQUwsc3Rld2FjaDAxLDM4MTAwMA0KMjAwNyxUT1IsQUwsYnVybmVhajAxLDEzMjAwMDAwDQoyMDA3LFRPUixBTCxoYWxsYXJvMDEsMTI3NTAwMDANCjIwMDcsVE9SLEFMLGdsYXVzdHIwMSwxMDUwMDAwMA0KMjAwNyxUT1IsQUwsd2VsbHN2ZTAxLDg3ODc1MDANCjIwMDcsVE9SLEFMLHJ5YW5iajAxLDcwMDAwMDANCjIwMDcsVE9SLEFMLHRob21hZnIwNCw1NTYwMDAwDQoyMDA3LFRPUixBTCx6YXVuZ3IwMSwzNTAwMDAwDQoyMDA3LFRPUixBTCxqb2huc3JlMDIsMzA3NTAwMA0KMjAwNyxUT1IsQUwsdG93ZXJqbzAxLDI5MDAwMDANCjIwMDcsVE9SLEFMLHJpb3NhbDAxLDI1MzUwMDANCjIwMDcsVE9SLEFMLGNsYXl0cm8wMSwxNTAwMDAwDQoyMDA3LFRPUixBTCxvaGthdG8wMSwxNTAwMDAwDQoyMDA3LFRPUixBTCxvdmVyYmx5MDEsMTM1MDAwMA0KMjAwNyxUT1IsQUwsZG93bnNzYzAxLDEwMjUwMDANCjIwMDcsVE9SLEFMLHN0YWlybWEwMSw4NTAwMDANCjIwMDcsVE9SLEFMLGZyYXNvamEwMSw4MjUwMDANCjIwMDcsVE9SLEFMLG1jZG9uam8wMyw3NTAwMDANCjIwMDcsVE9SLEFMLHBoaWxsamEwNCw1MDAwMDANCjIwMDcsVE9SLEFMLHNtaXRoamEwNSw1MDAwMDANCjIwMDcsVE9SLEFMLHRob21zam8wMSw1MDAwMDANCjIwMDcsVE9SLEFMLHphbWJydmkwMSw1MDAwMDANCjIwMDcsVE9SLEFMLGNoYWNpZ3UwMSwzOTUzMDANCjIwMDcsVE9SLEFMLGhpbGxhYTAxLDM5NTAwMA0KMjAwNyxUT1IsQUwsYWNjYXJqZTAxLDM5MjIwMA0KMjAwNyxUT1IsQUwsbWFyY3VzaDAxLDM4NjEwMA0KMjAwNyxUT1IsQUwsamFuc3NjYTAxLDM4NTIwMA0KMjAwNyxUT1IsQUwscm9tZXJkYTAxLDM4MTUwMA0KMjAwNyxBUkksTkwsam9obnNyYTA1LDkxMDA1NDYNCjIwMDcsQVJJLE5MLGhlcm5hbGkwMSw3MDAwMDAwDQoyMDA3LEFSSSxOTCxkYXZpc2RvMDIsNTUwMDAwMA0KMjAwNyxBUkksTkwsYnlybmVlcjAxLDQ1NzUwMDANCjIwMDcsQVJJLE5MLHdlYmJicjAxLDQ1MDAwMDANCjIwMDcsQVJJLE5MLGh1ZHNvb3IwMSwzOTAwMDAwDQoyMDA3LEFSSSxOTCx0cmFjeWNoMDEsMzAwMDAwMA0KMjAwNyxBUkksTkwsdmFsdmVqbzAxLDIwMDAwMDANCjIwMDcsQVJJLE5MLGRyZXdzdDAxLDE1MDAwMDANCjIwMDcsQVJJLE5MLGx5b25icjAxLDE1MDAwMDANCjIwMDcsQVJJLE5MLGNydXpqdTAyLDE0Mzc1MDANCjIwMDcsQVJJLE5MLGRhdmFuamUwMiwxMjUwMDAwDQoyMDA3LEFSSSxOTCxjbGFya3RvMDIsMTAzNDAwMA0KMjAwNyxBUkksTkwsc255ZGVjaDAyLDQwMDAwMA0KMjAwNyxBUkksTkwsamFja3NjbzAxLDM5MjAwMA0KMjAwNyxBUkksTkwsbWVkZGVicjAxLDM5MDUwMA0KMjAwNyxBUkksTkwsaGFtbW9ybzAxLDM4OTUwMA0KMjAwNyxBUkksTkwsaGFpcnNzYzAxLDM4OTAwMA0KMjAwNyxBUkksTkwsZ29uemFlZDAxLDM4NzUwMA0KMjAwNyxBUkksTkwscGVuYXRvMDMsMzgxMDAwDQoyMDA3LEFSSSxOTCxxdWVudGNhMDEsMzgxMDAwDQoyMDA3LEFSSSxOTCxiYXJkZWJyMDEsMzgwMDAwDQoyMDA3LEFSSSxOTCxjYWxsYWFsMDEsMzgwMDAwDQoyMDA3LEFSSSxOTCxkdXJiaWpkMDEsMzgwMDAwDQoyMDA3LEFSSSxOTCxtb250ZW1pMDEsMzgwMDAwDQoyMDA3LEFSSSxOTCxuaXBwZWR1MDEsMzgwMDAwDQoyMDA3LEFSSSxOTCxzbGF0ZWRvMDEsMzgwMDAwDQoyMDA3LEFSSSxOTCx5b3VuZ2NoMDQsMzgwMDAwDQoyMDA3LEFUTCxOTCxoYW1wdG1pMDEsMTQ1MDAwMDANCjIwMDcsQVRMLE5MLGpvbmVzYW4wMSwxNDAwMDAwMA0KMjAwNyxBVEwsTkwsam9uZXNjaDA2LDEyMzMzMzMzDQoyMDA3LEFUTCxOTCxyZW50ZWVkMDEsOTAwMDAwMA0KMjAwNyxBVEwsTkwsaHVkc290aTAxLDg1MDAwMDANCjIwMDcsQVRMLE5MLHNtb2x0am8wMSw4MDAwMDAwDQoyMDA3LEFUTCxOTCx3aWNrbWJvMDEsNjUwMDAwMA0KMjAwNyxBVEwsTkwsZ29uemFtaTAyLDIzNTAwMDANCjIwMDcsQVRMLE5MLHdpbHNvY3IwMywyMDAwMDAwDQoyMDA3LEFUTCxOTCxzb3JpYXJhMDEsMTIwMDAwMA0KMjAwNyxBVEwsTkwsdmlsbGFvczAxLDkyNTAwMA0KMjAwNyxBVEwsTkwsd29vZHdjaDAxLDg1MDAwMA0KMjAwNyxBVEwsTkwscmVkbWFtYTAxLDc1MDAwMA0KMjAwNyxBVEwsTkwsc3R1cnR0YTAxLDc1MDAwMA0KMjAwNyxBVEwsTkwsbWNjYW5icjAxLDQ0MDAwMA0KMjAwNyxBVEwsTkwsZnJhbmNqZTAyLDQyNzUwMA0KMjAwNyxBVEwsTkwscGFyb25jaDAxLDQyMDAwMA0KMjAwNyxBVEwsTkwseWF0ZXN0eTAxLDQxMjUwMA0KMjAwNyxBVEwsTkwsbGFuZ2VyeTAxLDQxMDAwMA0KMjAwNyxBVEwsTkwsY29ybWlsYTAxLDQwNTAwMA0KMjAwNyxBVEwsTkwsbWNicmltYTAxLDQwMDAwMA0KMjAwNyxBVEwsTkwsb3JycGUwMSw0MDAwMDANCjIwMDcsQVRMLE5MLGphbWVzY2gwMywzOTc1MDANCjIwMDcsQVRMLE5MLGRpYXptYTAyLDM5NTAwMA0KMjAwNyxBVEwsTkwsYXliYXJ3aTAxLDM4NTAwMA0KMjAwNyxBVEwsTkwsam9obnNrZTA1LDM4MDAwMA0KMjAwNyxBVEwsTkwscGVuYWJyMDEsMzgwMDAwDQoyMDA3LEFUTCxOTCx0aG9ybXNjMDEsMzgwMDAwDQoyMDA3LENITixOTCxsZWVkZTAyLDEzMjUwMDAwDQoyMDA3LENITixOTCx6YW1icmNhMDEsMTI0MDAwMDANCjIwMDcsQ0hOLE5MLHNvcmlhYWwwMSwxMDAwMDAwMA0KMjAwNyxDSE4sTkwscmFtaXJhcjAxLDkwMDAwMDANCjIwMDcsQ0hOLE5MLGxpbGx5dGUwMSw2MDAwMDAwDQoyMDA3LENITixOTCxqb25lc2phMDQsNTYzMzMzMw0KMjAwNyxDSE4sTkwsZGVtcHNyeTAxLDUzMzMzMzMNCjIwMDcsQ0hOLE5MLG1hcnF1amEwMSw0NzUwMDAwDQoyMDA3LENITixOTCxiYXJyZW1pMDEsNDUzMzMzMw0KMjAwNyxDSE4sTkwsaG93cnlibzAxLDQ1MDAwMDANCjIwMDcsQ0hOLE5MLGl6dHVyY2UwMSw0MTUwMDAwDQoyMDA3LENITixOTCxleXJlc2MwMSwzODMzMzMzDQoyMDA3LENITixOTCxmbG95ZGNsMDEsMzAwMDAwMA0KMjAwNyxDSE4sTkwsZGVyb3NtYTAxLDI3NTAwMDANCjIwMDcsQ0hOLE5MLGJsYW5jaGUwMSwxNzc1MDAwDQoyMDA3LENITixOTCx3b29ka2UwMiwxNzUwMDAwDQoyMDA3LENITixOTCxtaWxsZXdhMDQsMTUwMDAwMA0KMjAwNyxDSE4sTkwsd2FyZGRhMDEsMTAwMDAwMA0KMjAwNyxDSE4sTkwsb2htYW53aTAxLDkwMDAwMA0KMjAwNyxDSE4sTkwsY290dHNuZTAxLDgyNTAwMA0KMjAwNyxDSE4sTkwsbXVydG9tYTAxLDQxNTAwMA0KMjAwNyxDSE4sTkwsd3VlcnRtaTAxLDQxNTAwMA0KMjAwNyxDSE4sTkwsY2VkZW5ybzAyLDQwMDAwMA0KMjAwNyxDSE4sTkwsaGlsbHJpMDEsNDAwMDAwDQoyMDA3LENITixOTCx0aGVyaXJ5MDEsMzkwMDAwDQoyMDA3LENITixOTCxndXptYWFuMDEsMzg0MDAwDQoyMDA3LENITixOTCxtYXRlb2p1MDIsMzgzMDAwDQoyMDA3LENJTixOTCxkdW5uYWQwMSwxMDUwMDAwMA0KMjAwNyxDSU4sTkwsbWlsdG9lcjAxLDEwMzMzMzMzDQoyMDA3LENJTixOTCxncmlmZmtlMDIsODQ0NjY0Nw0KMjAwNyxDSU4sTkwsaGFyYW5hYTAxLDQyNTAwMDANCjIwMDcsQ0lOLE5MLGxvaHNla3kwMSw0MjAwMDAwDQoyMDA3LENJTixOTCxhcnJveWJyMDEsNDEyNTAwMA0KMjAwNyxDSU4sTkwsZ29uemFhbDAyLDM1MDAwMDANCjIwMDcsQ0lOLE5MLGZyZWVscnkwMSwyMzI1MDAwDQoyMDA3LENJTixOTCxjb3JtaXJoMDEsMjI1MDAwMA0KMjAwNyxDSU4sTkwsd2VhdGhkYTAxLDIyNTAwMDANCjIwMDcsQ0lOLE5MLGNvbmluamUwMSwyMDAwMDAwDQoyMDA3LENJTixOTCxzdGFudG1pMDIsMjAwMDAwMA0KMjAwNyxDSU4sTkwscm9zc2RhMDEsMTYwMDAwMA0KMjAwNyxDSU4sTkwsaGF0dGVzYzAxLDE1MDAwMDANCjIwMDcsQ0lOLE5MLHZhbGVuamEwMSwxMjUwMDAwDQoyMDA3LENJTixOTCxzYWFybGtpMDEsMTIwMDAwMA0KMjAwNyxDSU4sTkwsY2FzdHJqdTAxLDkyNTAwMA0KMjAwNyxDSU4sTkwsbW9lbGxjaDAxLDcwMDAwMA0KMjAwNyxDSU4sTkwsZ3VhcmRlZDAxLDUwMDAwMA0KMjAwNyxDSU4sTkwsY29mZmV0bzAxLDQwNzUwMA0KMjAwNyxDSU4sTkwsZW5jYXJlZDAxLDQwNzUwMA0KMjAwNyxDSU4sTkwscGhpbGxicjAxLDQwNzUwMA0KMjAwNyxDSU4sTkwsYmVsaXNtYTAxLDM5MDAwMA0KMjAwNyxDSU4sTkwscmFtaXJlbDAxLDM5MDAwMA0KMjAwNyxDSU4sTkwsYnJheWJpMDEsMzgyNTAwDQoyMDA3LENJTixOTCxkZW5vcmNoMDEsMzgyNTAwDQoyMDA3LENJTixOTCxrZXBwaWplMDEsMzgyNTAwDQoyMDA3LENJTixOTCxidXJ0b2phMDEsMzgwMDAwDQoyMDA3LENJTixOTCxjb3V0bGpvMDEsMzgwMDAwDQoyMDA3LENJTixOTCxnaWxqZTAxLDM4MDAwMA0KMjAwNyxDSU4sTkwsaGFtaWxqbzAzLDM4MDAwMA0KMjAwNyxDT0wsTkwsaGVsdG90bzAxLDE2NjAwMDAwDQoyMDA3LENPTCxOTCxob2xsaW1hMDEsNDQwMDAwMA0KMjAwNyxDT0wsTkwsbG9wZXpybzAxLDQzMjUwMDANCjIwMDcsQ09MLE5MLGZvZ2dqbzAxLDM2MjUwMDANCjIwMDcsQ09MLE5MLGZ1ZW50YnIwMSwzNTAwMDAwDQoyMDA3LENPTCxOTCxoYXdraWxhMDEsMzI1MDAwMA0KMjAwNyxDT0wsTkwsY29va2FhMDEsMzEwMDAwMA0KMjAwNyxDT0wsTkwsa2ltYnkwMSwyNTAwMDAwDQoyMDA3LENPTCxOTCxjYXJyb2phMDEsMTcwMDAwMA0KMjAwNyxDT0wsTkwsbWF0c3VrYTAxLDE1MDAwMDANCjIwMDcsQ09MLE5MLGFmZmVsamUwMSwxMjUwMDAwDQoyMDA3LENPTCxOTCx0b3JyZXlvMDEsMTA3NTAwMA0KMjAwNyxDT0wsTkwsZmlubGVzdDAxLDEwMDAwMDANCjIwMDcsQ09MLE5MLGZyYW5jamUwMSw3NTAwMDANCjIwMDcsQ09MLE5MLG1hYnJ5am8wMSw3NTAwMDANCjIwMDcsQ09MLE5MLG1hcnRpdG8wMiw3MDAwMDANCjIwMDcsQ09MLE5MLGxhd3JlYnIwMSw1MDAwMDANCjIwMDcsQ09MLE5MLGhhd3BlYnIwMSw0MDMwMDANCjIwMDcsQ09MLE5MLHRhdmVyd2kwMSw0MDIwMDANCjIwMDcsQ09MLE5MLGF0a2luZ2EwMSw0MDAwMDANCjIwMDcsQ09MLE5MLGJha2VyamUwMyw0MDAwMDANCjIwMDcsQ09MLE5MLHJhbWlycmEwMiwzODYwMDANCjIwMDcsQ09MLE5MLGNvcnBhbWEwMSwzODIwMDANCjIwMDcsQ09MLE5MLGhpcnNoamEwMSwzODEwMDANCjIwMDcsQ09MLE5MLGlhbm5lY2gwMSwzODEwMDANCjIwMDcsQ09MLE5MLHR1bG93dHIwMSwzODEwMDANCjIwMDcsRkxPLE5MLGNhYnJlbWkwMSw3NDAwMDAwDQoyMDA3LEZMTyxOTCx3aWxsaWRvMDMsNjQ1MDAwMA0KMjAwNyxGTE8sTkwsanVsaW9qbzAxLDM2MDAwMDANCjIwMDcsRkxPLE5MLG9saXZvbWkwMSwyMDAwMDAwDQoyMDA3LEZMTyxOTCxib29uZWFhMDEsOTI1MDAwDQoyMDA3LEZMTyxOTCxncmVnZ2tlMDEsNTc1MDAwDQoyMDA3LEZMTyxOTCxyYW1pcmhhMDEsNDAyMDAwDQoyMDA3LEZMTyxOTCx1Z2dsYWRhMDEsMzkyMDAwDQoyMDA3LEZMTyxOTCxnYXJkbmxlMDEsMzkwMDAwDQoyMDA3LEZMTyxOTCx3b29kamEwMiwzOTAwMDANCjIwMDcsRkxPLE5MLGpvaG5zam8wOSwzODIwMDANCjIwMDcsRkxPLE5MLHNhbmNoYW4wMSwzODEwMDANCjIwMDcsRkxPLE5MLGFtZXphYWwwMSwzODAwMDANCjIwMDcsRkxPLE5MLGJvcmNoam8wMSwzODAwMDANCjIwMDcsRkxPLE5MLGRlYXphYWwwMSwzODAwMDANCjIwMDcsRkxPLE5MLGdhcmNpam8wMSwzODAwMDANCjIwMDcsRkxPLE5MLGhlcm1pamUwMSwzODAwMDANCjIwMDcsRkxPLE5MLGphY29ibWkwMiwzODAwMDANCjIwMDcsRkxPLE5MLGtlbnNpbG8wMSwzODAwMDANCjIwMDcsRkxPLE5MLGxpbmRzbWEwMSwzODAwMDANCjIwMDcsRkxPLE5MLG1hcnRpY2EwMywzODAwMDANCjIwMDcsRkxPLE5MLG1lc3NlcmEwMSwzODAwMDANCjIwMDcsRkxPLE5MLG1pdHJlc2UwMSwzODAwMDANCjIwMDcsRkxPLE5MLG5vbGFzcmkwMSwzODAwMDANCjIwMDcsRkxPLE5MLG9sc2Vuc2MwMSwzODAwMDANCjIwMDcsRkxPLE5MLG93ZW5zaGUwMSwzODAwMDANCjIwMDcsRkxPLE5MLHBpbnRvcmUwMSwzODAwMDANCjIwMDcsRkxPLE5MLHJvc3NjbzAxLDM4MDAwMA0KMjAwNyxGTE8sTkwsdGFua2V0YTAxLDM4MDAwMA0KMjAwNyxGTE8sTkwsdHJlYW5tYTAxLDM4MDAwMA0KMjAwNyxGTE8sTkwsd2lsbGlqbzAzLDM4MDAwMA0KMjAwNyxIT1UsTkwsYmVya21sYTAxLDE0NTAwMDAwDQoyMDA3LEhPVSxOTCxvc3dhbHJvMDEsMTMwMDAwMDANCjIwMDcsSE9VLE5MLGxlZWNhMDEsMTE1MDAwMDANCjIwMDcsSE9VLE5MLHdpbGxpd28wMiw2MDAwMDAwDQoyMDA3LEhPVSxOTCxqZW5uaWphMDEsNTUwMDAwMA0KMjAwNyxIT1UsTkwsbGlkZ2VicjAxLDUzNTAwMDANCjIwMDcsSE9VLE5MLGJpZ2dpY3IwMSw1MTUwMDAwDQoyMDA3LEhPVSxOTCxlbnNiZW1vMDEsNDM1MDAwMA0KMjAwNyxIT1UsTkwsYXVzbXVicjAxLDQwMDAwMDANCjIwMDcsSE9VLE5MLGV2ZXJlYWQwMSwyODAwMDAwDQoyMDA3LEhPVSxOTCxsYW1ibWkwMSwyNzAwMDAwDQoyMDA3LEhPVSxOTCxsb3JldG1hMDEsMjUwMDAwMA0KMjAwNyxIT1UsTkwsd2hlZWxkYTAxLDIxMDAwMDANCjIwMDcsSE9VLE5MLG1pbGxldHIwMiwxMzAwMDAwDQoyMDA3LEhPVSxOTCxsYW5lamEwMSwxMDUwMDAwDQoyMDA3LEhPVSxOTCxwYWxtZW9yMDEsOTUwMDAwDQoyMDA3LEhPVSxOTCx3aGl0ZXJpMDEsNjAwMDAwDQoyMDA3LEhPVSxOTCxib3Jrb2RhMDEsNTc1MDAwDQoyMDA3LEhPVSxOTCxiYWNrZWJyMDEsNTQ1MDAwDQoyMDA3LEhPVSxOTCxtb2VobGJyMDEsNTAwMDAwDQoyMDA3LEhPVSxOTCxxdWFsbGNoMDEsNDQxMDAwDQoyMDA3LEhPVSxOTCxidXJrZWNoMDEsNDE1MDAwDQoyMDA3LEhPVSxOTCxyb2RyaXdhMDEsNDA2MDAwDQoyMDA3LEhPVSxOTCxxdWludGh1MDEsMzg1MDAwDQoyMDA3LEhPVSxOTCxzY290dGx1MDEsMzgyMDAwDQoyMDA3LEhPVSxOTCxnaW1lbmhlMDEsMzgwMDAwDQoyMDA3LEhPVSxOTCxzYW1wc2NoMDEsMzgwMDAwDQoyMDA3LExBTixOTCxzY2htaWphMDEsMTU3MDM5NDYNCjIwMDcsTEFOLE5MLGZ1cmNhcmEwMSwxMzczMDE5Ng0KMjAwNyxMQU4sTkwsa2VudGplMDEsOTgxNDExNw0KMjAwNyxMQU4sTkwsbG93ZWRlMDEsOTUwMDAwMA0KMjAwNyxMQU4sTkwsZ2FyY2lubzAxLDg1MTY2OTcNCjIwMDcsTEFOLE5MLHBlbm55YnIwMSw3NzUwMDAwDQoyMDA3LExBTixOTCxwaWVycmp1MDEsNzUwMDAwMA0KMjAwNyxMQU4sTkwsd29sZnJhMDIsNzQ3Nzk2OQ0KMjAwNyxMQU4sTkwsZ29uemFsdTAxLDcxNTY1OTkNCjIwMDcsTEFOLE5MLHRvbWtvYnIwMSw0MTAwMDAwDQoyMDA3LExBTixOTCxjbGFya2JyMDIsMzkwMDAwMA0KMjAwNyxMQU4sTkwsaGVuZHJtYTAxLDI5MjUwMDANCjIwMDcsTEFOLE5MLGxpZWJlbWkwMSwxMTUwMDAwDQoyMDA3LExBTixOTCxzYWVuem9sMDEsMTAwMDAwMA0KMjAwNyxMQU4sTkwsc2FpdG90YTAxLDEwMDAwMDANCjIwMDcsTEFOLE5MLGFuZGVybWEwMiw5MjUwMDANCjIwMDcsTEFOLE5MLGJlaW1lam8wMSw5MTI1MDANCjIwMDcsTEFOLE5MLG1hcnRpcmEwMyw4MDAwMDANCjIwMDcsTEFOLE5MLHNlYW5lcnUwMSw3MDAwMDANCjIwMDcsTEFOLE5MLGJldGVtd2kwMSw0MDUwMDANCjIwMDcsTEFOLE5MLGJyYXpveWgwMSwzOTUwMDANCjIwMDcsTEFOLE5MLHJlcGtvamEwMSwzOTUwMDANCjIwMDcsTEFOLE5MLGJyb3h0am8wMSwzOTAwMDANCjIwMDcsTEFOLE5MLGV0aGllYW4wMSwzODc1MDANCjIwMDcsTEFOLE5MLG1hcnRpcnUwMSwzODc1MDANCjIwMDcsTEFOLE5MLGJpbGxpY2gwMSwzODQ1MDANCjIwMDcsTEFOLE5MLGt1b2hvMDEsMzg0MDAwDQoyMDA3LExBTixOTCxrZW1wbWEwMSwzODMwMDANCjIwMDcsTEFOLE5MLHZhbGRld2kwMSwzODEwMDANCjIwMDcsTUlMLE5MLHNoZWV0YmUwMSwxMTEyNTAwMA0KMjAwNyxNSUwsTkwsamVua2lnZTAxLDczMzMzMzMNCjIwMDcsTUlMLE5MLHN1cHBhamUwMSw2MjUwMDAwDQoyMDA3LE1JTCxOTCxrb3NraWNvMDEsNTc1MDAwMA0KMjAwNyxNSUwsTkwsY29yZGVmcjAxLDU0MjUwMDANCjIwMDcsTUlMLE5MLGVzdHJham8wMSwzNDAwMDAwDQoyMDA3LE1JTCxOTCxtZW5jaGtlMDEsMzQwMDAwMA0KMjAwNyxNSUwsTkwsY2FwdWFjaDAxLDMyNTAwMDANCjIwMDcsTUlMLE5MLGdyYWZmdG8wMSwzMjUwMDAwDQoyMDA3LE1JTCxOTCxoYWxsYmkwMywzMTI1MDAwDQoyMDA3LE1JTCxOTCxjb3Vuc2NyMDEsMjgwMDAwMA0KMjAwNyxNSUwsTkwsdmFyZ2FjbDAxLDI1MDAwMDANCjIwMDcsTUlMLE5MLHR1cm5iZGUwMSwyNDcwNjY3DQoyMDA3LE1JTCxOTCxtaWxsZWRhMDIsMjI1MDAwMA0KMjAwNyxNSUwsTkwsZGVzc2VlbDAxLDE3MDAwMDANCjIwMDcsTUlMLE5MLHdlZWtzcmkwMSwxMzIwMDAwDQoyMDA3LE1JTCxOTCx3aXNlbWEwMSwxMDUwMDAwDQoyMDA3LE1JTCxOTCxzaG91c2JyMDEsOTc1MDAwDQoyMDA3LE1JTCxOTCxidXNoZGEwMSw0NTAwMDANCjIwMDcsTUlMLE5MLGZpZWxkcHIwMSw0MTUwMDANCjIwMDcsTUlMLE5MLGhhcmR5amowMSw0MDAwMDANCjIwMDcsTUlMLE5MLGFxdWluZ3IwMSwzOTkwMDANCjIwMDcsTUlMLE5MLGdyb3NzZ2EwMSwzOTgwMDANCjIwMDcsTUlMLE5MLGhhcnRjbzAxLDM5NTAwMA0KMjAwNyxNSUwsTkwsbml4bGEwMSwzOTAwMDANCjIwMDcsTUlMLE5MLHZpbGxhY2EwMSwzODQ1MDANCjIwMDcsTUlMLE5MLGd3eW5udG8wMiwzODEwMDANCjIwMDcsTllOLE5MLGRlbGdhY2EwMSwxNDUwMDAwMA0KMjAwNyxOWU4sTkwsbWFydGlwZTAyLDE0MDAyMjM0DQoyMDA3LE5ZTixOTCxiZWx0cmNhMDEsMTM1NzE0MjkNCjIwMDcsTllOLE5MLHdhZ25lYmkwMiwxMDUwMDAwMA0KMjAwNyxOWU4sTkwsZ3JlZW5zaDAxLDk1MDAwMDANCjIwMDcsTllOLE5MLGFsb3VtbzAxLDc1MDAwMDANCjIwMDcsTllOLE5MLGdsYXZpdG8wMiw3NTAwMDAwDQoyMDA3LE5ZTixOTCxsb2R1Y3BhMDEsNjI1MDAwMA0KMjAwNyxOWU4sTkwsaGVybmFvcjAxLDUwMDAwMDANCjIwMDcsTllOLE5MLHZhbGVuam8wMywzODAwMDAwDQoyMDA3LE5ZTixOTCxzY2hvZXNjMDEsMzYwMDAwMA0KMjAwNyxOWU4sTkwscmV5ZXNqbzAxLDI4NzUwMDANCjIwMDcsTllOLE5MLHBlcmV6b2wwMSwyMzI1MDAwDQoyMDA3LE5ZTixOTCxtb3RhZ3UwMSwxODAwMDAwDQoyMDA3LE5ZTixOTCxjaGF2ZWVuMDEsMTcyNTAwMA0KMjAwNyxOWU4sTkwsd2lsbGlkYTA3LDEyNTAwMDANCjIwMDcsTllOLE5MLHdyaWdoZGEwMywxMjUwMDAwDQoyMDA3LE5ZTixOTCxmcmFuY2p1MDEsMTE1MDAwMA0KMjAwNyxOWU4sTkwsc2VsZWFhMDEsMTAwMDAwMA0KMjAwNyxOWU4sTkwsY2FzdHJyYTAxLDg1MDAwMA0KMjAwNyxOWU4sTkwsZWFzbGVkYTAxLDg1MDAwMA0KMjAwNyxOWU4sTkwsc2FuY2hkdTAxLDg1MDAwMA0KMjAwNyxOWU4sTkwsZmVsaWNwZTAxLDYwMjAwMA0KMjAwNyxOWU4sTkwsbmV3aGFkYTAxLDU3NTAwMA0KMjAwNyxOWU4sTkwsaGVpbG1hYTAxLDQ1MzAwMA0KMjAwNyxOWU4sTkwsYnVyZ29hbTAxLDQxNTAwMA0KMjAwNyxOWU4sTkwsbWFpbmVqbzAxLDM5MTAwMA0KMjAwNyxOWU4sTkwscGFkaWxqdTAxLDM4NDAwMA0KMjAwNyxOWU4sTkwsbWlsbGVsYTAyLDM4MzAwMA0KMjAwNyxOWU4sTkwsc21pdGhqbzA1LDM4MDAwMA0KMjAwNyxQSEksTkwsYnVycmVwYTAxLDEzMjUwMDAwDQoyMDA3LFBISSxOTCxnYXJjaWZyMDIsMTAwMDAwMDANCjIwMDcsUEhJLE5MLHJvbGxpamkwMSw4MDAwMDAwDQoyMDA3LFBISSxOTCxsaWViZWpvMDEsNzgzMzMzMw0KMjAwNyxQSEksTkwsZWF0b25hZDAxLDcyMDgzMzMNCjIwMDcsUEhJLE5MLGdvcmRvdG8wMSw3MDAwMDAwDQoyMDA3LFBISSxOTCxtb3llcmphMDEsNjUwMDAwMA0KMjAwNyxQSEksTkwsbXllcnNicjAxLDUwODMzMzMNCjIwMDcsUEhJLE5MLHV0bGV5Y2gwMSw0Nzg1NzE0DQoyMDA3LFBISSxOTCxyb3dhbmFhMDEsNDM1MDAwMA0KMjAwNyxQSEksTkwsYmFyYWpybzAxLDI1MDAwMDANCjIwMDcsUEhJLE5MLGhlbG1zd2UwMSwyMzAwMDAwDQoyMDA3LFBISSxOTCxudW5lemFiMDEsMTkyNTAwMA0KMjAwNyxQSEksTkwsbWFkc29yeTAxLDExMDAwMDANCjIwMDcsUEhJLE5MLGhvd2FycnkwMSw5MDAwMDANCjIwMDcsUEhJLE5MLHdlcnRoamEwMSw4NTAwMDANCjIwMDcsUEhJLE5MLGdlYXJ5Z2UwMSw4Mzc1MDANCjIwMDcsUEhJLE5MLHZpY3Rvc2gwMSw0MTAwMDANCjIwMDcsUEhJLE5MLGhhbWVsY28wMSw0MDAwMDANCjIwMDcsUEhJLE5MLGNvbmRyY2wwMSwzODUwMDANCjIwMDcsUEhJLE5MLGNvc3RlY2gwMSwzODUwMDANCjIwMDcsUEhJLE5MLGRvYmJzZ3IwMSwzODUwMDANCjIwMDcsUEhJLE5MLGFsZm9uYW4wMSwzODAwMDANCjIwMDcsUEhJLE5MLGJpc2Vuam8wMSwzODAwMDANCjIwMDcsUEhJLE5MLGJvdXJubWkwMSwzODAwMDANCjIwMDcsUEhJLE5MLGJ1ZGRlcnkwMSwzODAwMDANCjIwMDcsUEhJLE5MLG1hdGhpc2MwMSwzODAwMDANCjIwMDcsUEhJLE5MLHJ1aXpjYTAxLDM4MDAwMA0KMjAwNyxQSEksTkwsc2Vnb3Z6YTAxLDM4MDAwMA0KMjAwNyxQSEksTkwsc21pdGhtYTA0LDM4MDAwMA0KMjAwNyxQSVQsTkwsd2lsc29qYTAyLDU0MDAwMDANCjIwMDcsUElULE5MLGNoYWNvc2gwMSwzODI1MDAwDQoyMDA3LFBJVCxOTCxiYXlqYTAxLDM1MDAwMDANCjIwMDcsUElULE5MLGxhcm9jYWQwMSwzMjAwMDAwDQoyMDA3LFBJVCxOTCxhcm1hc3RvMDIsMzAwMDAwMA0KMjAwNyxQSVQsTkwsc2FuY2hmcjAxLDI3NTAwMDANCjIwMDcsUElULE5MLHRvcnJlc2EwMSwyNzMzMzMzDQoyMDA3LFBJVCxOTCxtYXJ0ZWRhMDEsMjYwMDAwMA0KMjAwNyxQSVQsTkwsbmFkeXhhMDEsMjE1MDAwMA0KMjAwNyxQSVQsTkwsY2FzdGlqbzAyLDE5MDAwMDANCjIwMDcsUElULE5MLGdyYWJvam8wMiw4MzI1MDANCjIwMDcsUElULE5MLHdhc2Rpam8wMSw2MDAwMDANCjIwMDcsUElULE5MLGNvdGFodTAxLDUzNzUwMA0KMjAwNyxQSVQsTkwsZHVrZXphMDEsNDEwMDAwDQoyMDA3LFBJVCxOTCxzbmVsbGlhMDEsNDA4MDAwDQoyMDA3LFBJVCxOTCxtYWhvbHBhMDEsNDAzMDAwDQoyMDA3LFBJVCxOTCxjYXBwc21hMDEsNDAxMDAwDQoyMDA3LFBJVCxOTCxwYXVsaXJvMDEsNDAxMDAwDQoyMDA3LFBJVCxOTCxiYXV0aWpvMDIsMzk3NTAwDQoyMDA3LFBJVCxOTCxkdWZmeWNoMDEsMzk1MDAwDQoyMDA3LFBJVCxOTCxtY2xvdW5hMDEsMzkyMDAwDQoyMDA3LFBJVCxOTCxkb3VtaXJ5MDEsMzkwMDAwDQoyMDA3LFBJVCxOTCxnb3J6ZXRvMDEsMzg2MDAwDQoyMDA3LFBJVCxOTCxiYXlsaWpvMDEsMzg0MDAwDQoyMDA3LFBJVCxOTCxlbGRyZWJyMDEsMzgyMDAwDQoyMDA3LFBJVCxOTCxrZWxseWRvMDEsMzgwMDAwDQoyMDA3LFBJVCxOTCxwZXJlemp1MDEsMzgwMDAwDQoyMDA3LFNETixOTCxtYWRkdWdyMDEsMTAwMDAwMDANCjIwMDcsU0ROLE5MLGdpbGVzYnIwMiw5NjY2NjY3DQoyMDA3LFNETixOTCxjYW1lcm1pMDEsNzAwMDAwMA0KMjAwNyxTRE4sTkwsaG9mZm10cjAxLDcwMDAwMDANCjIwMDcsU0ROLE5MLHBlYXZ5amEwMSw0NzUwMDAwDQoyMDA3LFNETixOTCxnaWxlc21hMDEsMzI1MDAwMA0KMjAwNyxTRE4sTkwsd2VsbHNkYTAxLDMwMDAwMDANCjIwMDcsU0ROLE5MLGdyZWVua2gwMSwyMjUwMDAwDQoyMDA3LFNETixOTCxsaW5lYnNjMDEsMjE1MDAwMA0KMjAwNyxTRE4sTkwsYmFyZGpvMDEsMTA1MDAwMA0KMjAwNyxTRE4sTkwsYnJhbnlydTAxLDEwMDAwMDANCjIwMDcsU0ROLE5MLGJsdW1nZTAxLDkwMDAwMA0KMjAwNyxTRE4sTkwsY3J1empvMDIsNjUwMDAwDQoyMDA3LFNETixOTCx5b3VuZ2NoMDMsNjAwMDAwDQoyMDA3LFNETixOTCxicm9jYWRvMDEsNTAwMDAwDQoyMDA3LFNETixOTCxnb256YWFkMDEsNTAwMDAwDQoyMDA3LFNETixOTCxoZW5zbGNsMDEsMzkyMDAwDQoyMDA3LFNETixOTCxzbGVkZ3RlMDEsMzkwMDAwDQoyMDA3LFNETixOTCxtZXJlZGNsMDEsMzg3MDAwDQoyMDA3LFNETixOTCxiZWxsaGUwMSwzODU1MDANCjIwMDcsU0ROLE5MLGNhc3Npc2MwMSwzODQwMDANCjIwMDcsU0ROLE5MLGJvd2Vucm8wMSwzODIzMDANCjIwMDcsU0ROLE5MLHRob21wbWkwMywzODIwMDANCjIwMDcsU0ROLE5MLGtvdXpta2UwMSwzODA4MDANCjIwMDcsU0ROLE5MLG1jYW51cGEwMSwzODAzMDANCjIwMDcsU0ROLE5MLGNhbWVya2UwMSwzODAwMDANCjIwMDcsU0ZOLE5MLGJvbmRzYmEwMSwxNTUzMzk3MA0KMjAwNyxTRk4sTkwsbW9ycmltYTAxLDEwMDM3MjgzDQoyMDA3LFNGTixOTCx6aXRvYmEwMSwxMDAwMDAwMA0KMjAwNyxTRk4sTkwsYmVuaXRhcjAxLDk4NjYyMTkNCjIwMDcsU0ZOLE5MLGR1cmhhcmEwMSw3MDAwMDAwDQoyMDA3LFNGTixOTCx2aXpxdW9tMDEsNTE0MDA4NA0KMjAwNyxTRk4sTkwsZmVsaXpwZTAxLDUxMDAwMDANCjIwMDcsU0ZOLE5MLHJvYmVyZGEwNyw1MDAwMDAwDQoyMDA3LFNGTixOTCx3aW5ucmEwMSw0NzUwMDAwDQoyMDA3LFNGTixOTCxtb2xpbmJlMDEsNDAwMDAwMA0KMjAwNyxTRk4sTkwsYXVyaWxyaTAxLDM1MDAwMDANCjIwMDcsU0ZOLE5MLGtsZXNrcnkwMSwxNzUwMDAwDQoyMDA3LFNGTixOTCxrbGluZXN0MDIsMTc1MDAwMA0KMjAwNyxTRk4sTkwsbG93cnlubzAxLDEzNjUwMDANCjIwMDcsU0ZOLE5MLHN3ZWVubWEwMSw5MDAwMDANCjIwMDcsU0ZOLE5MLGNhaW5tYTAxLDY1MDAwMA0KMjAwNyxTRk4sTkwsY29ycmVrZTAxLDQwMDAwMA0KMjAwNyxTRk4sTkwsaGVubmVicjAxLDQwMDAwMA0KMjAwNyxTRk4sTkwsY2h1bGt2aTAxLDM5NjAwMA0KMjAwNyxTRk4sTkwsbmlla3JsYTAxLDM5MDAwMA0KMjAwNyxTRk4sTkwsbGluZGV0bzAxLDM4NTAwMA0KMjAwNyxTRk4sTkwsYWxmb25lbDAxLDM4MjAwMA0KMjAwNyxTRk4sTkwsdGFzY2hqYTAxLDM4MjAwMA0KMjAwNyxTRk4sTkwsc2FuY2hqbzAxLDM4MTAwMA0KMjAwNyxTRk4sTkwsZnJhbmRrZTAxLDM4MDUwMA0KMjAwNyxTRk4sTkwsb3J0aXpydTAxLDM4MDAwMA0KMjAwNyxTTE4sTkwscHVqb2xhbDAxLDEyOTM3ODEzDQoyMDA3LFNMTixOTCxyb2xlbnNjMDEsMTIzMTE2MzcNCjIwMDcsU0xOLE5MLGVkbW9uamkwMSw5NTYyNTQwDQoyMDA3LFNMTixOTCxpc3JpbmphMDEsODc1MDAwMA0KMjAwNyxTTE4sTkwsY2FycGVjaDAxLDg1MDAwMDANCjIwMDcsU0xOLE5MLGVuY2FyanUwMSw1MDAwMDAwDQoyMDA3LFNMTixOTCxlY2tzdGRhMDEsNDU4MzMzMw0KMjAwNyxTTE4sTkwsbG9vcGVicjAxLDQ1MDAwMDANCjIwMDcsU0xOLE5MLG11bGRlbWEwMSw0NTAwMDAwDQoyMDA3LFNMTixOTCx3ZWxsc2tpMDEsNDAwMDAwMA0KMjAwNyxTTE4sTkwsa2VubmVhZDAxLDI1MDAwMDANCjIwMDcsU0xOLE5MLHNwaWV6c2MwMSwyMTAwMDAwDQoyMDA3LFNMTixOTCxzcHJpbnJ1MDEsMTc1MDAwMA0KMjAwNyxTTE4sTkwsZnJhbmtyeTAxLDEwMDAwMDANCjIwMDcsU0xOLE5MLG1pbGVzYWEwMSwxMDAwMDAwDQoyMDA3LFNMTixOTCx3aWxzb3ByMDEsMTAwMDAwMA0KMjAwNyxTTE4sTkwsdGFndWNzbzAxLDkyNTAwMA0KMjAwNyxTTE4sTkwsYmVubmVnYTAxLDg1MDAwMA0KMjAwNyxTTE4sTkwsZmxvcmVyYTAxLDgwMDAwMA0KMjAwNyxTTE4sTkwsbW9saW55YTAxLDUyNTAwMA0KMjAwNyxTTE4sTkwsaGFuY29qbzAxLDQzMDAwMA0KMjAwNyxTTE4sTkwsd2FpbndhZDAxLDQxMDAwMA0KMjAwNyxTTE4sTkwsZHVuY2FjaDAxLDQwMDAwMA0KMjAwNyxTTE4sTkwsdGhvbXBicjAxLDQwMDAwMA0KMjAwNyxTTE4sTkwsam9obnN0eTAxLDM5NTAwMA0KMjAwNyxTTE4sTkwscmV5ZXNhbjAxLDM5MjUwMA0KMjAwNyxTTE4sTkwsa2lubmVqbzAxLDM4MjAwMA0KMjAwNyxTTE4sTkwsc2NodW1zazAxLDM4MjAwMA0KMjAwNyxXQVMsTkwsam9obnNuaTAxLDU1MDAwMDANCjIwMDcsV0FTLE5MLGd1em1hY3IwMSw0MjAwMDAwDQoyMDA3LFdBUyxOTCxjb3JkZWNoMDEsNDE1MDAwMA0KMjAwNyxXQVMsTkwsbG9wZXpmZTAxLDM5MDAwMDANCjIwMDcsV0FTLE5MLGtlYXJuYXUwMSwzNTAwMDAwDQoyMDA3LFdBUyxOTCxzY2huZWJyMDEsMzUwMDAwMA0KMjAwNyxXQVMsTkwsYXlhbGFsdTAxLDEzMDAwMDANCjIwMDcsV0FTLE5MLGZpY2tybzAxLDg1MDAwMA0KMjAwNyxXQVMsTkwsa2luZ3JhMDEsODUwMDAwDQoyMDA3LFdBUyxOTCxwYXR0ZWpvMDIsODUwMDAwDQoyMDA3LFdBUyxOTCxjb2xvbWplMDEsODE1MDAwDQoyMDA3LFdBUyxOTCxiZWxsaXJvMDEsNzUwMDAwDQoyMDA3LFdBUyxOTCxlc2NvYmFsMDEsNTMwMDAwDQoyMDA3LFdBUyxOTCx3aWxsaWplMDIsNTAwMDAwDQoyMDA3LFdBUyxOTCx5b3VuZ2RtMDEsNTAwMDAwDQoyMDA3LFdBUyxOTCxyYXVjaGpvMDEsNDU1MDAwDQoyMDA3LFdBUyxOTCxzbmVsbGNoMDIsNDUwMDAwDQoyMDA3LFdBUyxOTCxib3dpZW1pMDEsNDM1MDAwDQoyMDA3LFdBUyxOTCx3YWduZXJ5MDEsNDI1MDAwDQoyMDA3LFdBUyxOTCx3aWxzb2pvMDMsNDIwMDAwDQoyMDA3LFdBUyxOTCxjaHVyY3J5MDEsMzk1MDAwDQoyMDA3LFdBUyxOTCxsb2dhbm5vMDEsMzkyNTAwDQoyMDA3LFdBUyxOTCxiZXJnbWphMDEsMzgwMDAwDQoyMDA3LFdBUyxOTCxjaGljb21hMDEsMzgwMDAwDQoyMDA3LFdBUyxOTCxmbG9yZWplMDIsMzgwMDAwDQoyMDA3LFdBUyxOTCxoaWxsc2gwMSwzODAwMDANCjIwMDcsV0FTLE5MLG9jb25ubWkwMSwzODAwMDANCjIwMDcsV0FTLE5MLHNwZWlnbGUwMSwzODAwMDANCjIwMDgsQkFMLEFMLGh1ZmZhdTAxLDgwMDAwMDANCjIwMDgsQkFMLEFMLG1vcmFtZTAxLDc4MjY5MTQNCjIwMDgsQkFMLEFMLGhlcm5hcmEwMiw3NTAwMDAwDQoyMDA4LEJBTCxBTCxyb2JlcmJyMDEsNjMwMDAwMA0KMjAwOCxCQUwsQUwsYmFlemRhMDEsNjE2NjY2Ng0KMjAwOCxCQUwsQUwscGF5dG9qYTAxLDUwMDAwMDANCjIwMDgsQkFMLEFMLHdhbGtlamEwMSw0NTAwMDAwDQoyMDA4LEJBTCxBTCxtaWxsYWtlMDEsMzgwMDAwMA0KMjAwOCxCQUwsQUwsYnJhZGZjaDAxLDM2NjY2NjYNCjIwMDgsQkFMLEFMLGNhYnJlZGEwMSwyODc1MDAwDQoyMDA4LEJBTCxBTCx0cmFjaHN0MDEsMTUwMDAwMA0KMjAwOCxCQUwsQUwsc2hlcnJnZTAxLDk4MDAwMA0KMjAwOCxCQUwsQUwsbG9ld2VhZDAxLDgxNjAwMA0KMjAwOCxCQUwsQUwsZ3V0aHJqZTAxLDc3MDAwMA0KMjAwOCxCQUwsQUwsY2FicmVmZTAxLDU3NTAwMA0KMjAwOCxCQUwsQUwsYXF1aW5ncjAxLDUwMDAwMA0KMjAwOCxCQUwsQUwsbWFya2FuaTAxLDQ1NTAwMA0KMjAwOCxCQUwsQUwscmF5Y2gwMSw0NDUwMDANCjIwMDgsQkFMLEFMLHNjb3R0bHUwMSw0MzAwMDANCjIwMDgsQkFMLEFMLHF1aXJvZ3UwMSw0MDAwMDANCjIwMDgsQkFMLEFMLGFsYmVybWEwMSwzOTUwMDANCjIwMDgsQkFMLEFMLGJ1cnJlYnIwMSwzOTUwMDANCjIwMDgsQkFMLEFMLGJpZXJkcmEwMSwzOTAwMDANCjIwMDgsQkFMLEFMLGJ5bnVtZnIwMSwzOTAwMDANCjIwMDgsQkFMLEFMLGNoZXJycm8wMSwzOTAwMDANCjIwMDgsQkFMLEFMLGZhaGV5YnIwMSwzOTAwMDANCjIwMDgsQkFMLEFMLGhlcm5hbHUwMSwzOTAwMDANCjIwMDgsQkFMLEFMLGhvZXlqYTAyLDM5MDAwMA0KMjAwOCxCQUwsQUwsam9uZXNhZDAxLDM5MDAwMA0KMjAwOCxCQUwsQUwsbW9vcmVzYzAyLDM5MDAwMA0KMjAwOCxCQUwsQUwscGF0dG90cjAxLDM5MDAwMA0KMjAwOCxCQUwsQUwsc2FyZmFkZTAxLDM5MDAwMA0KMjAwOCxCT1MsQUwscmFtaXJtYTAyLDE4OTI5OTIzDQoyMDA4LEJPUyxBTCxkcmV3amQwMSwxNDAwMDAwMA0KMjAwOCxCT1MsQUwsb3J0aXpkYTAxLDEzMDAwMDAwDQoyMDA4LEJPUyxBTCxsb3dlbG1pMDEsMTI1MDAwMDANCjIwMDgsQk9TLEFMLHZhcml0amEwMSwxMDQ0MjAzMA0KMjAwOCxCT1MsQUwsYmVja2VqbzAyLDEwMTY2NjY2DQoyMDA4LEJPUyxBTCxsdWdvanUwMSw5MjUwMDAwDQoyMDA4LEJPUyxBTCxtYXRzdWRhMDEsODMzMzMzMw0KMjAwOCxCT1MsQUwsc2NoaWxjdTAxLDgwMDAwMDANCjIwMDgsQk9TLEFMLGNyaXNwY28wMSw1MDgzMzMzDQoyMDA4LEJPUyxBTCx3YWtlZnRpMDEsNDAwMDAwMA0KMjAwOCxCT1MsQUwsdGF2YXJqdTAxLDM4NTAwMDANCjIwMDgsQk9TLEFMLHRpbWxpbWkwMSwzMDAwMDAwDQoyMDA4LEJPUyxBTCx5b3VrbGtlMDEsMzAwMDAwMA0KMjAwOCxCT1MsQUwsY29yYWFsMDEsMjAwMDAwMA0KMjAwOCxCT1MsQUwsb2thamloaTAxLDEyNzUwMDANCjIwMDgsQk9TLEFMLGxvcGV6amEwMiw4NDAwMDANCjIwMDgsQk9TLEFMLHNueWRla3kwMSw4MzUwMDANCjIwMDgsQk9TLEFMLGNhc2V5c2UwMSw4MDAwMDANCjIwMDgsQk9TLEFMLHBhcGVsam8wMSw3NzUwMDANCjIwMDgsQk9TLEFMLHBlZHJvZHUwMSw0NTcwMDANCjIwMDgsQk9TLEFMLGxlc3Rlam8wMSw0MjE1MDANCjIwMDgsQk9TLEFMLGRlbGNhbWEwMSw0MjEwMDANCjIwMDgsQk9TLEFMLGVsbHNiamEwMSw0MDYwMDANCjIwMDgsQk9TLEFMLGNvcmV5YnIwMSw0MDUwMDANCjIwMDgsQk9TLEFMLGFhcmRzZGEwMSw0MDMyNTANCjIwMDgsQk9TLEFMLGNhc2hrZTAxLDQwMDAwMA0KMjAwOCxCT1MsQUwsYnVjaGhjbDAxLDM5NjAwMA0KMjAwOCxDSEEsQUwsdGhvbWVqaTAxLDE1NjY2NjY2DQoyMDA4LENIQSxBTCxidWVocm1hMDEsMTQwMDAwMDANCjIwMDgsQ0hBLEFMLGtvbmVycGEwMSwxMjAwMDAwMA0KMjAwOCxDSEEsQUwsdmF6cXVqYTAxLDExNTAwMDAwDQoyMDA4LENIQSxBTCxjYWJyZW9yMDEsMTAwMDAwMDANCjIwMDgsQ0hBLEFMLGNvbnRyam8wMSwxMDAwMDAwMA0KMjAwOCxDSEEsQUwsZHllamUwMSw5NTAwMDAwDQoyMDA4LENIQSxBTCxwaWVyemFqMDEsNTg1MDAwMA0KMjAwOCxDSEEsQUwsY3JlZGVqbzAxLDUxMDAwMDANCjIwMDgsQ0hBLEFMLGRvdGVsb2MwMSw1MDAwMDAwDQoyMDA4LENIQSxBTCx1cmliZWp1MDEsNDUwMDAwMA0KMjAwOCxDSEEsQUwsbGluZWJzYzAxLDQwMDAwMDANCjIwMDgsQ0hBLEFMLHN3aXNobmkwMSwzNjAwMDAwDQoyMDA4LENIQSxBTCxtYWNkb21pMDEsMTk1MDAwMA0KMjAwOCxDSEEsQUwsaGFsbHRvMDIsMTc1MDAwMA0KMjAwOCxDSEEsQUwscmFtaXJhbDAzLDExMTE2NjYNCjIwMDgsQ0hBLEFMLG96dW5hcGEwMSwxMDUwMDAwDQoyMDA4LENIQSxBTCx0aG9ybm1hMDEsODc1MDAwDQoyMDA4LENIQSxBTCxqZW5rc2JvMDEsNTUwMDAwDQoyMDA4LENIQSxBTCxsb2dhbmJvMDIsNDA1MDAwDQoyMDA4LENIQSxBTCxkYW5rc2pvMDEsNDAwMDAwDQoyMDA4LENIQSxBTCxmbG95ZGdhMDEsNDAwMDAwDQoyMDA4LENIQSxBTCxxdWVudGNhMDEsNDAwMDAwDQoyMDA4LENIQSxBTCxvd2Vuc2plMDEsMzk3NTAwDQoyMDA4LENIQSxBTCxtYXNzZW5pMDEsMzk2MDAwDQoyMDA4LENIQSxBTCxhbmRlcmJyMDMsMzk1MDAwDQoyMDA4LENIQSxBTCxyaWNoYWRhMDIsMzkyNTAwDQoyMDA4LENMRSxBTCxzYWJhdGNjMDEsMTEwMDAwMDANCjIwMDgsQ0xFLEFMLHdlc3RiamEwMSwxMDAwMDAwMA0KMjAwOCxDTEUsQUwsaGFmbmV0cjAxLDgwNTAwMDANCjIwMDgsQ0xFLEFMLGJ5cmRwYTAxLDc1MDAwMDANCjIwMDgsQ0xFLEFMLGJsYWtlY2EwMSw2MTAwMDAwDQoyMDA4LENMRSxBTCxtYXJ0aXZpMDEsNDQ1MDAwMA0KMjAwOCxDTEUsQUwsYm9yb3dqbzAxLDQwMDAwMDANCjIwMDgsQ0xFLEFMLGxlZWNsMDIsNDAwMDAwMA0KMjAwOCxDTEUsQUwsZGVsbHVkYTAxLDM3NTAwMDANCjIwMDgsQ0xFLEFMLHNpemVtZ3IwMSwzMTY2NjY2DQoyMDA4LENMRSxBTCxrb2JheW1hMDEsMzAwMDAwMA0KMjAwOCxDTEUsQUwscGVyYWxqaDAxLDI1MDAwMDANCjIwMDgsQ0xFLEFMLG1pY2hhamEwMSwyMjAwMDAwDQoyMDA4LENMRSxBTCxjYXJyb2phMDEsMjE1MDAwMA0KMjAwOCxDTEUsQUwsYmV0YW5yYTAxLDIwNTAwMDANCjIwMDgsQ0xFLEFMLGp1bGlvam8wMSwxMDAwMDAwDQoyMDA4LENMRSxBTCxjYXJtb2ZhMDEsNDU3ODAwDQoyMDA4LENMRSxBTCxnYXJrb3J5MDEsNDIwMTAwDQoyMDA4LENMRSxBTCxwZXJlenJhMDEsNDA2NzAwDQoyMDA4LENMRSxBTCxndXRpZWZyMDEsNDA0NDAwDQoyMDA4LENMRSxBTCxzaG9wcGtlMDEsNDA0MTAwDQoyMDA4LENMRSxBTCxjYWJyZWFzMDEsMzkzMzAwDQoyMDA4LENMRSxBTCxsZXdpc2plMDEsMzkzMDAwDQoyMDA4LENMRSxBTCxicmVzbGNyMDEsMzkyMDAwDQoyMDA4LENMRSxBTCxtYXJ0ZWFuMDEsMzkxNjAwDQoyMDA4LENMRSxBTCxjaG9vc2gwMSwzOTA0MDANCjIwMDgsREVULEFMLG9yZG9ubWEwMSwxNTc2ODE3NA0KMjAwOCxERVQsQUwsc2hlZmZnYTAxLDEzMzI2MzA2DQoyMDA4LERFVCxBTCxyb2RyaWl2MDEsMTIzNzk4ODMNCjIwMDgsREVULEFMLGd1aWxsY2EwMSwxMjAwMDAwMA0KMjAwOCxERVQsQUwsY2FicmVtaTAxLDExMzAwMDAwDQoyMDA4LERFVCxBTCxyZW50ZWVkMDEsMTAwMDAwMDANCjIwMDgsREVULEFMLGJvbmRlamUwMSw4NTAwMDAwDQoyMDA4LERFVCxBTCxyb2dlcmtlMDEsODAwMDAwMA0KMjAwOCxERVQsQUwsam9uZXN0bzAyLDcwMDAwMDANCjIwMDgsREVULEFMLHdpbGxpZG8wMyw3MDAwMDAwDQoyMDA4LERFVCxBTCxqb25lc2phMDQsNjMzMzMzMw0KMjAwOCxERVQsQUwsaW5nZWJyMDEsNjIwMDAwMA0KMjAwOCxERVQsQUwscG9sYW5wbDAxLDQ2MDAwMDANCjIwMDgsREVULEFMLHJvYmVybmEwMSw0MjUwMDAwDQoyMDA4LERFVCxBTCxyb2RuZWZlMDEsMTcwMDAwMA0KMjAwOCxERVQsQUwsdGhhbWVtYTAxLDEyNzUwMDANCjIwMDgsREVULEFMLHZlcmxhanUwMSwxMTMwMDAwDQoyMDA4LERFVCxBTCxncmFuZGN1MDEsMTAwMDAwMA0KMjAwOCxERVQsQUwsd2lsc292YTAxLDk1MDAwMA0KMjAwOCxERVQsQUwsc2VheWJvMDEsNzgwMDAwDQoyMDA4LERFVCxBTCxzYW50aXJhMDEsNTc1MDAwDQoyMDA4LERFVCxBTCxncmlsbGphMDEsNDIwMDAwDQoyMDA4LERFVCxBTCx6dW1heWpvMDEsNDIwMDAwDQoyMDA4LERFVCxBTCxtaW5lcnphMDEsNDEwMDAwDQoyMDA4LERFVCxBTCxsb3BlemFxMDEsNDAwMDAwDQoyMDA4LERFVCxBTCxyYWJ1cnJ5MDEsMzk2MDAwDQoyMDA4LERFVCxBTCxiYXV0aWRlMDEsMzk1MDAwDQoyMDA4LERFVCxBTCxiYXphcnlvMDEsMzk1MDAwDQoyMDA4LERFVCxBTCx0YXRham8wMSwzOTE1MDANCjIwMDgsREVULEFMLHRob21hY2wwMiwzOTAwMDANCjIwMDgsS0NBLEFMLGd1aWxsam8wMSwxMjAwMDAwMA0KMjAwOCxLQ0EsQUwsbWVjaGVnaTAxLDExNDAwMDAwDQoyMDA4LEtDQSxBTCxncnVkem1hMDEsNDUwMDAwMA0KMjAwOCxLQ0EsQUwsbWFoYXlybzAxLDQwMDAwMDANCjIwMDgsS0NBLEFMLHRvbWtvYnIwMSwzMDAwMDAwDQoyMDA4LEtDQSxBTCxkZWplc2RhMDEsMjUwMDAwMA0KMjAwOCxLQ0EsQUwseWFidXR5YTAxLDI1MDAwMDANCjIwMDgsS0NBLEFMLHRlYWhlbWEwMSwyMzM3NTAwDQoyMDA4LEtDQSxBTCxiYWxlam8wMSwyMjAwMDAwDQoyMDA4LEtDQSxBTCxidWNram8wMSwyMjAwMDAwDQoyMDA4LEtDQSxBTCxvbGl2b21pMDEsMjA1MDAwMA0KMjAwOCxLQ0EsQUwsZ3JlaW56YTAxLDE0MDAwMDANCjIwMDgsS0NBLEFMLGdvYmJsamkwMSwxMzEyNTAwDQoyMDA4LEtDQSxBTCxnbG9hZHJvMDEsMTMwMDAwMA0KMjAwOCxLQ0EsQUwsZ2VybWFlczAxLDEwMDAwMDANCjIwMDgsS0NBLEFMLGh1ZHNvbHUwMSw0NzUwMDANCjIwMDgsS0NBLEFMLGdhdGhyam8wMSw0MjcwMDANCjIwMDgsS0NBLEFMLHNvcmlham8wMSw0MjY1MDANCjIwMDgsS0NBLEFMLGJhbm5pYnIwMSw0MjEwMDANCjIwMDgsS0NBLEFMLGdvcmRvYWwwMSw0MDYwMDANCjIwMDgsS0NBLEFMLG51bmV6bGUwMSw0MDUwMDANCjIwMDgsS0NBLEFMLHBlbmF0bzAyLDQwNTAwMA0KMjAwOCxLQ0EsQUwsYnV0bGViaTAzLDM5OTAwMA0KMjAwOCxLQ0EsQUwscmFtaXJyYTAyLDM5NzAwMA0KMjAwOCxLQ0EsQUwsY2FsbGFhbDAxLDM5NDAwMA0KMjAwOCxLQ0EsQUwsdHVwbWFtYTAxLDM5MDAwMA0KMjAwOCxMQUEsQUwsaHVudGV0bzAxLDE2NTAwMDAwDQoyMDA4LExBQSxBTCxndWVycnZsMDEsMTU1MDAwMDANCjIwMDgsTEFBLEFMLGFuZGVyZ2EwMSwxMjYwMDAwMA0KMjAwOCxMQUEsQUwsZ2FybGFqbzAxLDEyMDAwMDAwDQoyMDA4LExBQSxBTCxyb2RyaWZyMDMsMTAwMDAwMDANCjIwMDgsTEFBLEFMLGVzY29ia2UwMSw5NTAwMDAwDQoyMDA4LExBQSxBTCxtYXR0aGdhMDIsOTQwMDAwMA0KMjAwOCxMQUEsQUwsbGFja2VqbzAxLDczMzMzMzMNCjIwMDgsTEFBLEFMLGZpZ2dpY2gwMSw0NzUwMDAwDQoyMDA4LExBQSxBTCxzaGllbHNjMDEsNDI1MDAwMA0KMjAwOCxMQUEsQUwsc3BlaWVqdTAxLDQyNTAwMDANCjIwMDgsTEFBLEFMLHJpdmVyanUwMSwyMDI1MDAwDQoyMDA4LExBQSxBTCxvbGl2ZWRhMDIsMjAwMDAwMA0KMjAwOCxMQUEsQUwsa290Y2hjYTAxLDE0NTAwMDANCjIwMDgsTEFBLEFMLGl6dHVybWEwMSwxMjAwMDAwDQoyMDA4LExBQSxBTCxxdWlubHJvMDEsMTA1MDAwMA0KMjAwOCxMQUEsQUwsd2VhdmVqZTAyLDQzNTAwMA0KMjAwOCxMQUEsQUwsa2VuZHJobzAxLDQzMjUwMA0KMjAwOCxMQUEsQUwsd2lsbGlyZTAzLDQzMjUwMA0KMjAwOCxMQUEsQUwsbmFwb2xtaTAxLDQyNTAwMA0KMjAwOCxMQUEsQUwsc2F1bmRqbzAxLDQyNTAwMA0KMjAwOCxMQUEsQUwsbW9zZWxkdTAxLDQyMDAwMA0KMjAwOCxMQUEsQUwsc2FudGFlcjAxLDQyMDAwMA0KMjAwOCxMQUEsQUwsYXliYXJlcjAxLDQxNTAwMA0KMjAwOCxMQUEsQUwsYm9vdGNjaDAxLDQxNTAwMA0KMjAwOCxMQUEsQUwsbWF0aGlqZTAxLDQxNTAwMA0KMjAwOCxMQUEsQUwsYnVsZ2VqYTAxLDM5MjAwMA0KMjAwOCxMQUEsQUwsdGhvbXByaTAzLDM5MTAwMA0KMjAwOCxMQUEsQUwsb2RheWRhMDEsMzkwMDAwDQoyMDA4LE1JTixBTCxtb3JuZWp1MDEsODQwMDAwMA0KMjAwOCxNSU4sQUwsbWF1ZXJqbzAxLDYyNTAwMDANCjIwMDgsTUlOLEFMLG5hdGhham8wMSw2MDAwMDAwDQoyMDA4LE1JTixBTCxjdWRkeW1pMDEsNTkxNjY2Ng0KMjAwOCxNSU4sQUwsaGVybmFsaTAxLDUwMDAwMDANCjIwMDgsTUlOLEFMLG1vbnJvY3IwMSwzODIwMDAwDQoyMDA4LE1JTixBTCxsYW1ibWkwMSwzNTAwMDAwDQoyMDA4LE1JTixBTCxldmVyZWFkMDEsMjgwMDAwMA0KMjAwOCxNSU4sQUwscmluY29qdTAxLDI0NzUwMDANCjIwMDgsTUlOLEFMLHB1bnRvbmkwMSwyNDAwMDAwDQoyMDA4LE1JTixBTCx5b3VuZ2RlMDMsMTQ0MDAwMA0KMjAwOCxNSU4sQUwsa3ViZWxqYTAxLDEzMDAwMDANCjIwMDgsTUlOLEFMLGNyYWluamUwMSwxMDUwMDAwDQoyMDA4LE1JTixBTCxyZXllc2RlMDEsMTAwMDAwMA0KMjAwOCxNSU4sQUwsZ3VlcnJtYTAyLDk1MDAwMA0KMjAwOCxNSU4sQUwscmVkbW9taTAxLDk1MDAwMA0KMjAwOCxNSU4sQUwsbmVzaGVwYTAxLDQzNTAwMA0KMjAwOCxNSU4sQUwsYm9uc2VibzAxLDQzMjUwMA0KMjAwOCxNSU4sQUwsaGFycmlicjAxLDQzMTEwMA0KMjAwOCxNSU4sQUwsYmFrZXJzYzAyLDQyMjUwMA0KMjAwOCxNSU4sQUwsZ29tZXpjYTAxLDM5NTAwMA0KMjAwOCxNSU4sQUwsc2xvd2VrZTAxLDM5NTAwMA0KMjAwOCxNSU4sQUwsYmFzc2JyMDEsMzkwMDAwDQoyMDA4LE1JTixBTCxibGFja25pMDEsMzkwMDAwDQoyMDA4LE1JTixBTCx0b2xiZW1hMDEsMzkwMDAwDQoyMDA4LE5ZQSxBTCxyb2RyaWFsMDEsMjgwMDAwMDANCjIwMDgsTllBLEFMLGdpYW1iamEwMSwyMzQyODU3MQ0KMjAwOCxOWUEsQUwsamV0ZXJkZTAxLDIxNjAwMDAwDQoyMDA4LE5ZQSxBTCxhYnJldWJvMDEsMTYwMDAwMDANCjIwMDgsTllBLEFMLHBldHRpYW4wMSwxNjAwMDAwMA0KMjAwOCxOWUEsQUwscml2ZXJtYTAxLDE1MDAwMDAwDQoyMDA4LE5ZQSxBTCxwb3NhZGpvMDEsMTMxMDAwMDANCjIwMDgsTllBLEFMLGRhbW9uam8wMSwxMzAwMDAwMA0KMjAwOCxOWUEsQUwsbWF0c3VoaTAxLDEzMDAwMDAwDQoyMDA4LE5ZQSxBTCxtdXNzaW1pMDEsMTEwNzEwMjkNCjIwMDgsTllBLEFMLHBhdmFuY2EwMSwxMTAwMDAwMA0KMjAwOCxOWUEsQUwsZmFybnNreTAxLDU5MTY2NjYNCjIwMDgsTllBLEFMLHdhbmdjaDAxLDQwMDAwMDANCjIwMDgsTllBLEFMLGhhd2tpbGEwMSwzNzUwMDAwDQoyMDA4LE5ZQSxBTCxjYW5vcm8wMSwzMDAwMDAwDQoyMDA4LE5ZQSxBTCxtb2xpbmpvMDEsMTg3NTAwMA0KMjAwOCxOWUEsQUwsZW5zYmVtbzAxLDE3NTAwMDANCjIwMDgsTllBLEFMLGJldGVtd2kwMSwxMTY1MDAwDQoyMDA4LE5ZQSxBTCxicnVuZWJyMDEsNzI1MDAwDQoyMDA4LE5ZQSxBTCx0cmFiZWJpMDEsNTAwMDAwDQoyMDA4LE5ZQSxBTCxjYWJyZW1lMDEsNDYxMjAwDQoyMDA4LE5ZQSxBTCxodWdoZXBoMDEsNDA2MzUwDQoyMDA4LE5ZQSxBTCxkdW5jYXNoMDEsMzk4MzAwDQoyMDA4LE5ZQSxBTCxoZW5uc2UwMSwzOTc0NDgNCjIwMDgsTllBLEFMLGtlbm5laWEwMSwzOTQyNzUNCjIwMDgsTllBLEFMLGthcnN0amUwMSwzOTMzMDANCjIwMDgsTllBLEFMLGFsYmFsam8wMSwzOTMyMjUNCjIwMDgsTllBLEFMLG9obGVucm8wMSwzOTE0MjUNCjIwMDgsTllBLEFMLGNoYW1iam8wMywzOTAwMDANCjIwMDgsTllBLEFMLHNhbmNoaHUwMSwzOTAwMDANCjIwMDgsT0FLLEFMLGNoYXZlZXIwMSwxMTUwMDAwMA0KMjAwOCxPQUssQUwsZWxsaXNtYTAxLDUwMDAwMDANCjIwMDgsT0FLLEFMLGhhcmRlcmkwMSw0NzUwMDAwDQoyMDA4LE9BSyxBTCxibGFudGpvMDEsMzcwMDAwMA0KMjAwOCxPQUssQUwsY3Jvc2JibzAxLDM1NTAwMDANCjIwMDgsT0FLLEFMLHN0cmVlaHUwMSwzMzAwMDAwDQoyMDA4LE9BSyxBTCxlbWJyZWFsMDEsMzEwNzEyNg0KMjAwOCxPQUssQUwsZ2F1ZGljaDAxLDE3NzUwMDANCjIwMDgsT0FLLEFMLGJyb3duZW0wMSwxNDAwMDAwDQoyMDA4LE9BSyxBTCxkdWNoc2p1MDEsMTIwMDAwMA0KMjAwOCxPQUssQUwsY2FsZXJraTAxLDEwMDAwMDANCjIwMDgsT0FLLEFMLGRpbmFybGUwMSw5MDAwMDANCjIwMDgsT0FLLEFMLGZvdWxra2UwMSw3MDAwMDANCjIwMDgsT0FLLEFMLHN3ZWVubWkwMSw1MDAwMDANCjIwMDgsT0FLLEFMLGJvd2Vucm8wMSw0MTAwMDANCjIwMDgsT0FLLEFMLGN1c3RqYTAxLDQxMDAwMA0KMjAwOCxPQUssQUwsam9obnNkYTA2LDQxMDAwMA0KMjAwOCxPQUssQUwsYnVja3RyMDEsNDAwMDAwDQoyMDA4LE9BSyxBTCxkZW5vcmNoMDEsNDAwMDAwDQoyMDA4LE9BSyxBTCxnYXJjaWphMDEsNDAwMDAwDQoyMDA4LE9BSyxBTCxtdXJwaGRvMDEsNDAwMDAwDQoyMDA4LE9BSyxBTCxicm93bmFuMDEsMzk1MDAwDQoyMDA4LE9BSyxBTCxldmVsYWRhMDEsMzk1MDAwDQoyMDA4LE9BSyxBTCxoYW5uYWphMDEsMzk1MDAwDQoyMDA4LE9BSyxBTCxzdXp1a2t1MDEsMzk1MDAwDQoyMDA4LE9BSyxBTCxzd2VlbnJ5MDEsMzk1MDAwDQoyMDA4LE9BSyxBTCxiYXJ0b2RhMDIsMzkwMDAwDQoyMDA4LE9BSyxBTCxoZXJuYWZlMDMsMzkwMDAwDQoyMDA4LFNFQSxBTCxzdXp1a2ljMDEsMTcxMDIxNDkNCjIwMDgsU0VBLEFMLHNleHNvcmkwMSwxNTUwMDAwMA0KMjAwOCxTRUEsQUwsYmVsdHJhZDAxLDEzNDAwMDAwDQoyMDA4LFNFQSxBTCx3YXNoYmphMDEsOTg1MDAwMA0KMjAwOCxTRUEsQUwsYmF0aXNtaTAxLDk1MDAwMDANCjIwMDgsU0VBLEFMLHZpZHJvam8wMSw4NTAwMDAwDQoyMDA4LFNFQSxBTCxzaWx2YWNhMDEsODI1MDAwMA0KMjAwOCxTRUEsQUwsYmVkYXJlcjAxLDcwMDAwMDANCjIwMDgsU0VBLEFMLGpvaGppa2UwMSw2MzgzMzMzDQoyMDA4LFNFQSxBTCxpYmFuZXJhMDEsNTUwMDAwMA0KMjAwOCxTRUEsQUwscHV0empqMDEsNDQwMDAwMA0KMjAwOCxTRUEsQUwsd2lsa2VicjAxLDMwMDAwMDANCjIwMDgsU0VBLEFMLGxvcGV6am8wMSwxNzUwMDAwDQoyMDA4LFNFQSxBTCxiZXRhbnl1MDEsMTU1MDAwMA0KMjAwOCxTRUEsQUwsYmxvb213aTAxLDEwMDAwMDANCjIwMDgsU0VBLEFMLGNhaXJvbWkwMSw4NTAwMDANCjIwMDgsU0VBLEFMLGhlcm5hZmUwMiw1NDAwMDANCjIwMDgsU0VBLEFMLGJ1cmtlamEwMiw0MzUwMDANCjIwMDgsU0VBLEFMLGdyZWVuc2UwMSw0MDUwMDANCjIwMDgsU0VBLEFMLG9mbGFoZXIwMSw0MDAwMDANCjIwMDgsU0VBLEFMLHJvd2xhcnkwMSwzOTUwMDANCjIwMDgsU0VBLEFMLG1vcnNlbWkwMSwzOTM1MDANCjIwMDgsU0VBLEFMLGJhZWtjaDAxLDM5MjUwMA0KMjAwOCxTRUEsQUwsZ2FyY2lhbjAxLDM5MDAwMA0KMjAwOCxTRUEsQUwsamltZXJjaDAxLDM5MDAwMA0KMjAwOCxTRUEsQUwsbG93ZW1hMDEsMzkwMDAwDQoyMDA4LFRCQSxBTCxwZW5hY2EwMSw2MDAwMDAwDQoyMDA4LFRCQSxBTCxjcmF3ZmNhMDIsNTM3NTAwMA0KMjAwOCxUQkEsQUwscGVyY2l0cjAxLDM4OTc3OTcNCjIwMDgsVEJBLEFMLGthem1pc2MwMSwzNzg1MDAwDQoyMDA4LFRCQSxBTCx3aGVlbGRhMDEsMjg3NTAwMA0KMjAwOCxUQkEsQUwsZmxveWRjbDAxLDI3NTAwMDANCjIwMDgsVEJBLEFMLGl3YW11YWswMSwyNDAwMDAwDQoyMDA4LFRCQSxBTCxyZXllc2FsMDEsMjMwMDAwMA0KMjAwOCxUQkEsQUwsYmFsZGVybzAxLDIyNTAwMDANCjIwMDgsVEJBLEFMLG1pbGxldHIwMiwxNjAwMDAwDQoyMDA4LFRCQSxBTCxnb21lc2pvMDEsMTI3NTAwMA0KMjAwOCxUQkEsQUwsZ2xvdmVnYTAxLDEwNzUwMDANCjIwMDgsVEJBLEFMLHNoaWVsamEwMiwxMDAwMDAwDQoyMDA4LFRCQSxBTCxoaW5za2VyMDEsODAwMDAwDQoyMDA4LFRCQSxBTCxiYXJ0bGphMDEsNDE2NjAwDQoyMDA4LFRCQSxBTCxqYWNrc2VkMDEsNDEyNzAwDQoyMDA4LFRCQSxBTCxuYXZhcmRpMDEsNDEyNTAwDQoyMDA4LFRCQSxBTCxkb2htYXNjMDEsNDEyNDAwDQoyMDA4LFRCQSxBTCx1cHRvbmJqMDEsNDEyMTAwDQoyMDA4LFRCQSxBTCxnYXJ6YW1hMDEsNDA0NjAwDQoyMDA4LFRCQSxBTCxheWJhcndpMDEsNDAxMjAwDQoyMDA4LFRCQSxBTCxvcnZlbGNoMDEsNDAwNzAwDQoyMDA4LFRCQSxBTCxoYXluZW5hMDEsNDAwMDAwDQoyMDA4LFRCQSxBTCxiaXJraWt1MDEsMzk3NjAwDQoyMDA4LFRCQSxBTCxob3dlbGpwMDEsMzk3NDAwDQoyMDA4LFRCQSxBTCxoYW1tZWphMDEsMzk2MzAwDQoyMDA4LFRCQSxBTCxzb25uYWFuMDEsMzk1ODAwDQoyMDA4LFRCQSxBTCx6b2JyaWJlMDEsMzk1ODAwDQoyMDA4LFRCQSxBTCxyaWdnYXNoMDEsMzkyMTAwDQoyMDA4LFRCQSxBTCxqb2huc2VsMDIsMzkwMDAwDQoyMDA4LFRFWCxBTCxwYWRpbHZpMDEsMTEwMDAwMDANCjIwMDgsVEVYLEFMLG1pbGx3a2UwMSwxMDM2ODg5Mg0KMjAwOCxURVgsQUwseW91bmdtaTAyLDYxNzQ5NzQNCjIwMDgsVEVYLEFMLGJsYWxvaGEwMSw2MDAwMDAwDQoyMDA4LFRFWCxBTCxicmFkbG1pMDEsNTI1MDAwMA0KMjAwOCxURVgsQUwsY2F0YWxmcjAxLDQwMDAwMDANCjIwMDgsVEVYLEFMLGplbm5pamEwMSw0MDAwMDAwDQoyMDA4LFRFWCxBTCxicm91c2JlMDEsMzg1MDAwMA0KMjAwOCxURVgsQUwsYmVub2lqbzAxLDIyNTAwMDANCjIwMDgsVEVYLEFMLGd1YXJkZWQwMSwyMDAwMDAwDQoyMDA4LFRFWCxBTCxieXJkbWEwMSwxODAwMDAwDQoyMDA4LFRFWCxBTCxsYWlyZGdlMDEsMTYwMDAwMA0KMjAwOCxURVgsQUwsZnVrdW1rYTAxLDE0MDAwMDANCjIwMDgsVEVYLEFMLHdyaWdoamEwMSwxMDAwMDAwDQoyMDA4LFRFWCxBTCx2YXpxdXJhMDEsODEwMDAwDQoyMDA4LFRFWCxBTCxtZWxodWFkMDEsNzUwMDAwDQoyMDA4LFRFWCxBTCxraW5zbGlhMDEsNzAwMDAwDQoyMDA4LFRFWCxBTCx3aWxzb2NqMDEsNDE3NDYwDQoyMDA4LFRFWCxBTCxtY2NhcmJyMDEsNDA0NzYwDQoyMDA4LFRFWCxBTCxoYW1pbGpvMDMsMzk2ODMwDQoyMDA4LFRFWCxBTCxnYWJiYWthMDEsMzk2MzkwDQoyMDA4LFRFWCxBTCxuaXBwZWR1MDEsMzk1NTAwDQoyMDA4LFRFWCxBTCxyaGVpbmpvMDEsMzk1MzMwDQoyMDA4LFRFWCxBTCxib3R0c2phMDEsMzk0MTkwDQoyMDA4LFRFWCxBTCxtdXJwaGRhMDcsMzkzMDAwDQoyMDA4LFRFWCxBTCxtZXRjYXRyMDEsMzkyMDAwDQoyMDA4LFRFWCxBTCxydXBlam8wMSwzOTIwMDANCjIwMDgsVEVYLEFMLG1lbmRvbHUwMSwzOTEwMDANCjIwMDgsVEVYLEFMLGdlcm1hZnIwMSwzOTAwMDANCjIwMDgsVE9SLEFMLGJ1cm5lYWowMSwxMzIwMDAwMA0KMjAwOCxUT1IsQUwsdGhvbWFmcjA0LDEyNTYwMDAwDQoyMDA4LFRPUixBTCxyeWFuYmowMSwxMjAwMDAwMA0KMjAwOCxUT1IsQUwscm9sZW5zYzAxLDExNjI1MDAwDQoyMDA4LFRPUixBTCxoYWxsYXJvMDEsMTAwMDAwMDANCjIwMDgsVE9SLEFMLG92ZXJibHkwMSw2NzUwMDAwDQoyMDA4LFRPUixBTCxyaW9zYWwwMSw0ODM1MDAwDQoyMDA4LFRPUixBTCxlY2tzdGRhMDEsNDUwMDAwMA0KMjAwOCxUT1IsQUwsemF1bmdyMDEsMzc1MDAwMA0KMjAwOCxUT1IsQUwsd2VsbHN2ZTAxLDM2ODc1MDANCjIwMDgsVE9SLEFMLGRvd25zc2MwMSwyMjUwMDAwDQoyMDA4LFRPUixBTCxtY2RvbmpvMDMsMTkwMDAwMA0KMjAwOCxUT1IsQUwsc3RhaXJtYTAxLDE2MjUwMDANCjIwMDgsVE9SLEFMLHNjdXRhbWEwMSwxNTUwMDAwDQoyMDA4LFRPUixBTCxzdGV3YXNoMDEsMTUwMDAwMA0KMjAwOCxUT1IsQUwsZnJhc29qYTAxLDExMjUwMDANCjIwMDgsVE9SLEFMLGJhcmFqcm8wMSw3MDAwMDANCjIwMDgsVE9SLEFMLHRhbGxlYnIwMSw2NDAwMDANCjIwMDgsVE9SLEFMLGhpbGxhYTAxLDQxMDAwMA0KMjAwOCxUT1IsQUwsbWNnb3dkdTAxLDQwNDEwMA0KMjAwOCxUT1IsQUwsamFuc3NjYTAxLDQwMzkwMA0KMjAwOCxUT1IsQUwsbWFyY3VzaDAxLDQwMjUwMA0KMjAwOCxUT1IsQUwsbGVhZ3VicjAxLDQwMDMwMA0KMjAwOCxUT1IsQUwsbGl0c2NqZTAxLDM5NTgwMA0KMjAwOCxUT1IsQUwsd29sZmVicjAxLDM5NTUwMA0KMjAwOCxUT1IsQUwsYWNjYXJqZTAxLDM5MjIwMA0KMjAwOCxUT1IsQUwsY29hdHNidTAxLDM5MjEwMA0KMjAwOCxBUkksTkwsam9obnNyYTA1LDE1MTAwNTQ2DQoyMDA4LEFSSSxOTCxkYXZpc2RvMDIsNzc1MDAwMA0KMjAwOCxBUkksTkwsYnlybmVlcjAxLDY2NjY2NjYNCjIwMDgsQVJJLE5MLGh1ZHNvb3IwMSw2MjUwMDAwDQoyMDA4LEFSSSxOTCx3ZWJiYnIwMSw1NTAwMDAwDQoyMDA4LEFSSSxOTCxoYXJlbmRhMDEsNDA1MDAwMA0KMjAwOCxBUkksTkwsdHJhY3ljaDAxLDQwMDAwMDANCjIwMDgsQVJJLE5MLGx5b25icjAxLDMxMjUwMDANCjIwMDgsQVJJLE5MLGNydXpqdTAyLDE5Mzc1MDANCjIwMDgsQVJJLE5MLHNueWRlY2gwMiwxODc1MDAwDQoyMDA4LEFSSSxOTCxkcmV3c3QwMSwxNTAwMDAwDQoyMDA4LEFSSSxOTCxxdWFsbGNoMDEsMTMxMjUwMA0KMjAwOCxBUkksTkwsYnVya2VjaDAxLDk1NTAwMA0KMjAwOCxBUkksTkwsb2plZGFhdTAxLDU1MDAwMA0KMjAwOCxBUkksTkwsamFja3NjbzAxLDQxOTUwMA0KMjAwOCxBUkksTkwsZ29uemFlZDAxLDQxMTAwMA0KMjAwOCxBUkksTkwsaGFtbW9ybzAxLDQwOTUwMA0KMjAwOCxBUkksTkwsbWVkZGVicjAxLDQwOTUwMA0KMjAwOCxBUkksTkwseW91bmdjaDA0LDQwNjAwMA0KMjAwOCxBUkksTkwscGVuYXRvMDMsNDA1NTAwDQoyMDA4LEFSSSxOTCxvd2luZ21pMDEsNDAyMDAwDQoyMDA4LEFSSSxOTCxtb250ZW1pMDEsNDAwNTAwDQoyMDA4LEFSSSxOTCxzbGF0ZWRvMDEsNDAwNTAwDQoyMDA4LEFSSSxOTCxyZXlub21hMDEsMzk2NTAwDQoyMDA4LEFSSSxOTCxwZXRpdHl1MDEsMzk0MDAwDQoyMDA4LEFSSSxOTCxzYWxhemplMDEsMzkzMDAwDQoyMDA4LEFSSSxOTCx1cHRvbmp1MDEsMzkzMDAwDQoyMDA4LEFSSSxOTCxyb21lcmFsMDEsMzkwMDAwDQoyMDA4LEFUTCxOTCxoYW1wdG1pMDEsMTU5NzUxODQNCjIwMDgsQVRMLE5MLGh1ZHNvdGkwMSwxNTUwMDAwMA0KMjAwOCxBVEwsTkwsc21vbHRqbzAxLDE0MDAwMDAwDQoyMDA4LEFUTCxOTCx0ZWl4ZW1hMDEsMTI1MDAwMDANCjIwMDgsQVRMLE5MLGpvbmVzY2gwNiwxMjMzMzMzMw0KMjAwOCxBVEwsTkwsZ2xhdml0bzAyLDgwMDAwMDANCjIwMDgsQVRMLE5MLGtvdHNhbWEwMSw3MDAwMDAwDQoyMDA4LEFUTCxOTCxzb3JpYXJhMDEsMjY1MDAwMA0KMjAwOCxBVEwsTkwsZ29uemFtaTAyLDIzNjI1MDANCjIwMDgsQVRMLE5MLG9obWFud2kwMSwxNjAwMDAwDQoyMDA4LEFUTCxOTCxpbmZhbm9tMDEsMTQwMDAwMA0KMjAwOCxBVEwsTkwsZGlhem1hMDIsMTIyNTAwMA0KMjAwOCxBVEwsTkwsbWNjYW5icjAxLDk2NjY2Ng0KMjAwOCxBVEwsTkwsZnJhbmNqZTAyLDQ2MDAwMA0KMjAwOCxBVEwsTkwsam9obnNrZTA1LDQzMDAwMA0KMjAwOCxBVEwsTkwsamFtZXNjaDAzLDQyNzUwMA0KMjAwOCxBVEwsTkwsbW95bGFwZTAxLDQxMDAwMA0KMjAwOCxBVEwsTkwsZ290YXlydTAxLDQwMzAwMA0KMjAwOCxBVEwsTkwsZXNjb2J5dTAxLDQwMjUwMA0KMjAwOCxBVEwsTkwsYmVubmVqZTAxLDQwMDAwMA0KMjAwOCxBVEwsTkwsbWlsbGVjbzAxLDQwMDAwMA0KMjAwOCxBVEwsTkwscmluZ3JvMDEsMzk3NTAwDQoyMDA4LEFUTCxOTCxhY29zdG1hMDEsMzkyNTAwDQoyMDA4LEFUTCxOTCxibGFuY2dyMDEsMzkwMDAwDQoyMDA4LEFUTCxOTCxib3llcmJsMDEsMzkwMDAwDQoyMDA4LEFUTCxOTCxqdXJyamphMDEsMzkwMDAwDQoyMDA4LEFUTCxOTCxsZXJld2FuMDEsMzkwMDAwDQoyMDA4LEFUTCxOTCxwZW5hYnIwMSwzOTAwMDANCjIwMDgsQVRMLE5MLHByYWRvbWEwMSwzOTAwMDANCjIwMDgsQVRMLE5MLHJlc29wY2gwMSwzOTAwMDANCjIwMDgsQ0hOLE5MLHphbWJyY2EwMSwxNjAwMDAwMA0KMjAwOCxDSE4sTkwscmFtaXJhcjAxLDE1MDAwMDAwDQoyMDA4LENITixOTCxzb3JpYWFsMDEsMTQwMDAwMDANCjIwMDgsQ0hOLE5MLGxlZWRlMDIsMTMyNTAwMDANCjIwMDgsQ0hOLE5MLGxpbGx5dGUwMSw4MDAwMDAwDQoyMDA4LENITixOTCxkZW1wc3J5MDEsNzMzMzMzMw0KMjAwOCxDSE4sTkwsZnVrdWRrbzAxLDcwMDAwMDANCjIwMDgsQ0hOLE5MLG1hcnF1amEwMSw2Mzc1MDAwDQoyMDA4LENITixOTCxkZXJvc21hMDEsNDc1MDAwMA0KMjAwOCxDSE4sTkwsaG93cnlibzAxLDQ1MDAwMDANCjIwMDgsQ0hOLE5MLHdvb2RrZTAyLDQyMDAwMDANCjIwMDgsQ0hOLE5MLGV5cmVzYzAxLDM4MDAwMDANCjIwMDgsQ0hOLE5MLGxpZWJlam8wMSwzNTAwMDAwDQoyMDA4LENITixOTCxibGFuY2hlMDEsMzE3NTAwMA0KMjAwOCxDSE4sTkwsam9obnNyZTAyLDEzMDAwMDANCjIwMDgsQ0hOLE5MLHdhcmRkYTAxLDEyMDAwMDANCjIwMDgsQ0hOLE5MLHd1ZXJ0bWkwMSw4NjAwMDANCjIwMDgsQ0hOLE5MLGhpbGxyaTAxLDQ0NTAwMA0KMjAwOCxDSE4sTkwsbWFybW9jYTAxLDQzMDAwMA0KMjAwOCxDSE4sTkwsdGhlcmlyeTAxLDQyODAwMA0KMjAwOCxDSE4sTkwsY2VkZW5ybzAyLDQwNzAwMA0KMjAwOCxDSE4sTkwsZm9udGVtaTAxLDQwNTAwMA0KMjAwOCxDSE4sTkwscGllZmUwMSw0MDE1MDANCjIwMDgsQ0hOLE5MLGd1em1hYW4wMSw0MDEwMDANCjIwMDgsQ0hOLE5MLHNvdG9nZTAxLDQwMTAwMA0KMjAwOCxDSE4sTkwsaGFydGtlMDEsMzkyNTAwDQoyMDA4LENITixOTCxwaWduYWNhMDEsMzkxNTAwDQoyMDA4LENJTixOTCxkdW5uYWQwMSwxMzAwMDAwMA0KMjAwOCxDSU4sTkwsY29yZGVmcjAxLDg2MjUwMDANCjIwMDgsQ0lOLE5MLGdyaWZma2UwMiw4MjgyNjk1DQoyMDA4LENJTixOTCxoYXJhbmFhMDEsNjc1MDAwMA0KMjAwOCxDSU4sTkwsZ29uemFhbDAyLDQ2MjUwMDANCjIwMDgsQ0lOLE5MLGFycm95YnIwMSw0NTc1MDAwDQoyMDA4LENJTixOTCx3ZWF0aGRhMDEsMzMwMDAwMA0KMjAwOCxDSU4sTkwsYWZmZWxqZTAxLDMwMDAwMDANCjIwMDgsQ0lOLE5MLGZyZWVscnkwMSwzMDAwMDAwDQoyMDA4LENJTixOTCxwYXR0ZWNvMDEsMzAwMDAwMA0KMjAwOCxDSU4sTkwscGhpbGxicjAxLDI5Mzc1MDANCjIwMDgsQ0lOLE5MLHJvc3NkYTAxLDI1MjUwMDANCjIwMDgsQ0lOLE5MLGhhdHRlc2MwMSwxODUwMDAwDQoyMDA4LENJTixOTCxiZWxpc21hMDEsMTI1MDAwMA0KMjAwOCxDSU4sTkwsY2FzdHJqdTAxLDk3NTAwMA0KMjAwOCxDSU4sTkwsY29mZmV0bzAxLDkwNzUwMA0KMjAwOCxDSU4sTkwsYmFrb3BhMDEsNzUwMDAwDQoyMDA4LENJTixOTCxtZXJja2tlMDEsNjAwMDAwDQoyMDA4LENJTixOTCxsaW5jb21pMDEsNTUwMDAwDQoyMDA4LENJTixOTCxlbmNhcmVkMDEsNDUwMDAwDQoyMDA4LENJTixOTCxob3BwZW5vMDEsNDAyNTAwDQoyMDA4LENJTixOTCxrZXBwaWplMDEsNDAyNTAwDQoyMDA4LENJTixOTCxmb2dnam8wMSw0MDAwMDANCjIwMDgsQ0lOLE5MLGJ1cnRvamEwMSwzOTUwMDANCjIwMDgsQ0lOLE5MLGxpdmluYm8wMSwzOTI1MDANCjIwMDgsQ0lOLE5MLHZvbHF1ZWQwMSwzOTI1MDANCjIwMDgsQ0lOLE5MLGN1ZXRvam8wMSwzOTAwMDANCjIwMDgsQ0lOLE5MLHZvdHRvam8wMSwzOTAwMDANCjIwMDgsQ09MLE5MLGhlbHRvdG8wMSwxNjYwMDAwMA0KMjAwOCxDT0wsTkwsaG9sbGltYTAxLDk1MDAwMDANCjIwMDgsQ09MLE5MLGNvb2thYTAxLDUxMjUwMDANCjIwMDgsQ09MLE5MLGZ1ZW50YnIwMSw1MDUwMDAwDQoyMDA4LENPTCxOTCxhdGtpbmdhMDEsNDM4NzUwMA0KMjAwOCxDT0wsTkwsaGF3cGVicjAxLDM5MjUwMDANCjIwMDgsQ09MLE5MLHZpemNhbHUwMSwzNTAwMDAwDQoyMDA4LENPTCxOTCx3ZWxsc2tpMDEsMzEwMDAwMA0KMjAwOCxDT0wsTkwsZnJhbmNqZTAxLDMwMDAwMDANCjIwMDgsQ09MLE5MLHRvcnJleW8wMSwzMDAwMDAwDQoyMDA4LENPTCxOTCxoZXJnZW1hMDEsMjAwMDAwMA0KMjAwOCxDT0wsTkwsdGF2ZXJ3aTAxLDE5NzUwMDANCjIwMDgsQ09MLE5MLHJlZG1hbWEwMSwxMDAwMDAwDQoyMDA4LENPTCxOTCxjb3JwYW1hMDEsNzc1MDAwDQoyMDA4LENPTCxOTCxwb2RzZXNjMDEsNzUwMDAwDQoyMDA4LENPTCxOTCx0dWxvd3RyMDEsNzUwMDAwDQoyMDA4LENPTCxOTCxib3dpZW1pMDEsNjUwMDAwDQoyMDA4LENPTCxOTCxiYXJtZWNsMDEsNDA1MDAwDQoyMDA4LENPTCxOTCxiYWtlcmplMDMsNDAzMDAwDQoyMDA4LENPTCxOTCxidWNoaHRhMDEsMzk5MDAwDQoyMDA4LENPTCxOTCxoaXJzaGphMDEsMzk2MDAwDQoyMDA4LENPTCxOTCxpYW5uZWNoMDEsMzk2MDAwDQoyMDA4LENPTCxOTCxzcGlsYnJ5MDEsMzk2MDAwDQoyMDA4LENPTCxOTCxqaW1lbnViMDEsMzkyMDAwDQoyMDA4LENPTCxOTCxtb3JhbGZyMDEsMzkxMDAwDQoyMDA4LENPTCxOTCxuaXhqYTAxLDM5MDAwMA0KMjAwOCxGTE8sTkwsZ3JlZ2drZTAxLDI1MDAwMDANCjIwMDgsRkxPLE5MLG1pbGxlYW4wMSwyMjEyNTAwDQoyMDA4LEZMTyxOTCxnb256YWx1MDEsMjAwMDAwMA0KMjAwOCxGTE8sTkwsaGVuZHJtYTAxLDE1MDAwMDANCjIwMDgsRkxPLE5MLG1pdHJlc2UwMSwxMjAwMDAwDQoyMDA4LEZMTyxOTCxhbWV6YWFsMDEsOTQ1MDAwDQoyMDA4LEZMTyxOTCxtaWxsZWp1MDEsNzUwMDAwDQoyMDA4LEZMTyxOTCx0cmVhbm1hMDEsNzA1MDAwDQoyMDA4LEZMTyxOTCxjYW50dWpvMDEsNTAwMDAwDQoyMDA4LEZMTyxOTCxyYW1pcmhhMDEsNDM5MDAwDQoyMDA4LEZMTyxOTCx1Z2dsYWRhMDEsNDE3MDAwDQoyMDA4LEZMTyxOTCxvbHNlbnNjMDEsNDA1MDAwDQoyMDA4LEZMTyxOTCx3aWxsaWpvMDMsNDA1MDAwDQoyMDA4LEZMTyxOTCxnYXJkbmxlMDEsNDAyNTAwDQoyMDA4LEZMTyxOTCxoZXJtaWplMDEsMzk1MDAwDQoyMDA4LEZMTyxOTCxqYWNvYm1pMDIsMzk1MDAwDQoyMDA4LEZMTyxOTCxsaW5kc21hMDEsMzk1MDAwDQoyMDA4LEZMTyxOTCx0YW5rZXRhMDEsMzkyNTAwDQoyMDA4LEZMTyxOTCxwaW50b3JlMDEsMzkxNTAwDQoyMDA4LEZMTyxOTCx2YW5kZXJpMDEsMzkxNTAwDQoyMDA4LEZMTyxOTCxhbmRpbnJvMDEsMzkwMDAwDQoyMDA4LEZMTyxOTCxjYXJyb2JyMDEsMzkwMDAwDQoyMDA4LEZMTyxOTCxkZWF6YWFsMDEsMzkwMDAwDQoyMDA4LEZMTyxOTCxnYXJjaWhhMDEsMzkwMDAwDQoyMDA4LEZMTyxOTCxob292ZXBhMDEsMzkwMDAwDQoyMDA4LEZMTyxOTCxqb2huc2pvMDksMzkwMDAwDQoyMDA4LEZMTyxOTCxrZW5zaWxvMDEsMzkwMDAwDQoyMDA4LEZMTyxOTCxub2xhc3JpMDEsMzkwMDAwDQoyMDA4LEZMTyxOTCxvd2Vuc2hlMDEsMzkwMDAwDQoyMDA4LEZMTyxOTCxyYWJlbG1pMDEsMzkwMDAwDQoyMDA4LEZMTyxOTCxyb3NzY28wMSwzOTAwMDANCjIwMDgsRkxPLE5MLHNhbmNoYW4wMSwzOTAwMDANCjIwMDgsRkxPLE5MLHdvb2RqYTAyLDM5MDAwMA0KMjAwOCxIT1UsTkwsdGVqYWRtaTAxLDE0ODExNDE0DQoyMDA4LEhPVSxOTCxiZXJrbWxhMDEsMTQ1MDAwMDANCjIwMDgsSE9VLE5MLG9zd2Fscm8wMSwxMzAwMDAwMA0KMjAwOCxIT1UsTkwsbGVlY2EwMSwxMjUwMDAwMA0KMjAwOCxIT1UsTkwsbWF0c3VrYTAxLDU1MDAwMDANCjIwMDgsSE9VLE5MLHZhbHZlam8wMSw0NzAwMDAwDQoyMDA4LEhPVSxOTCx3aWdnaXR5MDEsNDM1MDAwMA0KMjAwOCxIT1UsTkwsbG9yZXRtYTAxLDI3NTAwMDANCjIwMDgsSE9VLE5MLGJyb2NhZG8wMSwyNTAwMDAwDQoyMDA4LEhPVSxOTCxhdXNtdWJyMDEsMjAwMDAwMA0KMjAwOCxIT1UsTkwsY2hhY29zaDAxLDIwMDAwMDANCjIwMDgsSE9VLE5MLGdlYXJ5Z2UwMSwxMTI1MDAwDQoyMDA4LEhPVSxOTCx2aWxsYW9zMDEsMTEyNTAwMA0KMjAwOCxIT1UsTkwsYmx1bWdlMDEsMTEwMDAwMA0KMjAwOCxIT1UsTkwsZXJzdGFkYTAxLDEwMDAwMDANCjIwMDgsSE9VLE5MLGJhY2tlYnIwMSw4MDAwMDANCjIwMDgsSE9VLE5MLGJvcmtvZGEwMSw4MDAwMDANCjIwMDgsSE9VLE5MLGNydXpqbzAyLDY1MDAwMA0KMjAwOCxIT1UsTkwsbW9laGxicjAxLDUwMDAwMA0KMjAwOCxIT1UsTkwscm9kcml3YTAxLDQ1MTAwMA0KMjAwOCxIT1UsTkwscXVpbnRodTAxLDQwNTAwMA0KMjAwOCxIT1UsTkwsc2FtcHNjaDAxLDQwMTAwMA0KMjAwOCxIT1UsTkwsYm91cm5taTAxLDM5NjAwMA0KMjAwOCxIT1UsTkwscGVuY2VodTAxLDM5NjAwMA0KMjAwOCxIT1UsTkwscGF1bGlmZTAxLDM5MDAwMA0KMjAwOCxIT1UsTkwsdG93bGVqcjAxLDM5MDAwMA0KMjAwOCxIT1UsTkwsd3JpZ2h3ZTAxLDM5MDAwMA0KMjAwOCxMQU4sTkwsZnVyY2FyYTAxLDE1NzMwMTk1DQoyMDA4LExBTixOTCxzY2htaWphMDEsMTUyMTc0MDENCjIwMDgsTEFOLE5MLGpvbmVzYW4wMSwxNDcyNjkxMA0KMjAwOCxMQU4sTkwsbG93ZWRlMDEsMTAwMDAwMDANCjIwMDgsTEFOLE5MLGdhcmNpbm8wMSw5NTE2Njk3DQoyMDA4LExBTixOTCxwZW5ueWJyMDEsOTI1MDAwMA0KMjAwOCxMQU4sTkwsa2VudGplMDEsOTAwMDAwMA0KMjAwOCxMQU4sTkwscGllcnJqdTAxLDgwMDAwMDANCjIwMDgsTEFOLE5MLGxvYWl6ZXMwMSw3NTAwMDAwDQoyMDA4LExBTixOTCxrdXJvZGhpMDEsNzQzMzMzMw0KMjAwOCxMQU4sTkwsc2FpdG90YTAxLDIwMDAwMDANCjIwMDgsTEFOLE5MLGJlaW1lam8wMSwxOTI1MDAwDQoyMDA4LExBTixOTCxwcm9jdHNjMDEsMTExNTAwMA0KMjAwOCxMQU4sTkwsYmVubmVnYTAxLDgyNTAwMA0KMjAwOCxMQU4sTkwsc3dlZW5tYTAxLDYwMDAwMA0KMjAwOCxMQU4sTkwsbWFydGlydTAxLDUwMDAwMA0KMjAwOCxMQU4sTkwsYnJveHRqbzAxLDQ1NDAwMA0KMjAwOCxMQU4sTkwsZXRoaWVhbjAxLDQyNDUwMA0KMjAwOCxMQU4sTkwsYmlsbGljaDAxLDQxNTAwMA0KMjAwOCxMQU4sTkwsbG9uZXlqYTAxLDQxMTAwMA0KMjAwOCxMQU4sTkwsa2VtcG1hMDEsNDA2MDAwDQoyMDA4LExBTixOTCxjaGF2ZWFuMDIsNDAwMDAwDQoyMDA4LExBTixOTCxhYnJldXRvMDEsMzkzMDAwDQoyMDA4LExBTixOTCxsYXJvY2FuMDEsMzkyNTAwDQoyMDA4LExBTixOTCxrdW9obzAxLDM5MjAwMA0KMjAwOCxMQU4sTkwseW91bmdkZTA0LDM5MTAwMA0KMjAwOCxMQU4sTkwsZGV3aXRibDAxLDM5MDAwMA0KMjAwOCxMQU4sTkwsaHVjaDAxLDM5MDAwMA0KMjAwOCxMQU4sTkwsdHJvbmNyYTAxLDM5MDAwMA0KMjAwOCxNSUwsTkwsc2hlZXRiZTAxLDEyMTI1MDAwDQoyMDA4LE1JTCxOTCxnYWduZWVyMDEsMTAwMDAwMDANCjIwMDgsTUlMLE5MLHN1cHBhamUwMSw4MjUwMDAwDQoyMDA4LE1JTCxOTCxjYW1lcm1pMDEsNjI1MDAwMA0KMjAwOCxNSUwsTkwsaGFsbGJpMDMsNDkyNTAwMA0KMjAwOCxNSUwsTkwsa2VuZGFqYTAxLDQyNTAwMDANCjIwMDgsTUlMLE5MLHJpc2tlZGEwMSw0MDAwMDAwDQoyMDA4LE1JTCxOTCxjYXB1YWNoMDEsMzc1MDAwMA0KMjAwOCxNSUwsTkwsdHVybmJkZTAxLDMzNzA2NjYNCjIwMDgsTUlMLE5MLHRvcnJlc2EwMSwzMzMzMzMzDQoyMDA4LE1JTCxOTCxtb3RhZ3UwMSwzMjAwMDAwDQoyMDA4LE1JTCxOTCxjb3Vuc2NyMDEsMjgwMDAwMA0KMjAwOCxNSUwsTkwsaGFyZHlqajAxLDI2NTAwMDANCjIwMDgsTUlMLE5MLGJ1c2hkYTAxLDI1NTAwMDANCjIwMDgsTUlMLE5MLHNob3VzYnIwMSwyMDAwMDAwDQoyMDA4LE1JTCxOTCx3ZWVrc3JpMDEsMTA1NjAwMA0KMjAwOCxNSUwsTkwsa2FwbGVnYTAxLDgwMDAwMA0KMjAwOCxNSUwsTkwsbWNjbHVzZTAxLDc1MDAwMA0KMjAwOCxNSUwsTkwsZmllbGRwcjAxLDY3MDAwMA0KMjAwOCxNSUwsTkwsY2hvYXRyYTAxLDUwMDAwMA0KMjAwOCxNSUwsTkwsYnJhdW5yeTAyLDQ1NTAwMA0KMjAwOCxNSUwsTkwsaGFydGNvMDEsNDQ0MDAwDQoyMDA4LE1JTCxOTCxncm9zc2dhMDEsNDE0MDAwDQoyMDA4LE1JTCxOTCx2aWxsYWNhMDEsNDEzMDAwDQoyMDA4LE1JTCxOTCxnYWxsYXlvMDEsNDA0MDAwDQoyMDA4LE1JTCxOTCxnd3lubnRvMDIsMzk3NTAwDQoyMDA4LE1JTCxOTCxyaXZlcm1pMDIsMzk1MDAwDQoyMDA4LE1JTCxOTCxkaWxsb2pvMDIsMzkzMDAwDQoyMDA4LE1JTCxOTCxwYXJyYW1hMDEsMzkyMDAwDQoyMDA4LE5ZTixOTCxiZWx0cmNhMDEsMTg2MjI4MDkNCjIwMDgsTllOLE5MLHNhbnRham8wMSwxNjk4NDIxNg0KMjAwOCxOWU4sTkwsZGVsZ2FjYTAxLDE2MDAwMDAwDQoyMDA4LE5ZTixOTCxtYXJ0aXBlMDIsMTE4MTMzNTENCjIwMDgsTllOLE5MLHdhZ25lYmkwMiwxMDUwMDAwMA0KMjAwOCxOWU4sTkwsYWxvdW1vMDEsNzUwMDAwMA0KMjAwOCxOWU4sTkwsaGVybmFvcjAxLDcwMDAwMDANCjIwMDgsTllOLE5MLHBlcmV6b2wwMSw2NTAwMDAwDQoyMDA4LE5ZTixOTCxjYXN0aWx1MDEsNjI1MDAwMA0KMjAwOCxOWU4sTkwsd3JpZ2hkYTAzLDUyNTAwMDANCjIwMDgsTllOLE5MLHNjaG5lYnIwMSw0OTAwMDAwDQoyMDA4LE5ZTixOTCxyZXllc2pvMDEsNDM3NTAwMA0KMjAwOCxOWU4sTkwsc2Nob2VzYzAxLDM2MDAwMDANCjIwMDgsTllOLE5MLGNodXJjcnkwMSwyMDAwMDAwDQoyMDA4LE5ZTixOTCxzb3Nham8wMiwyMDAwMDAwDQoyMDA4LE5ZTixOTCxwZWxmcm1pMDEsMTk4NzUwMA0KMjAwOCxOWU4sTkwsY2FzdHJyYTAxLDE5NzUwMDANCjIwMDgsTllOLE5MLGNoYXZlZW4wMSwxODAwMDAwDQoyMDA4LE5ZTixOTCxoZWlsbWFhMDEsMTIwMDAwMA0KMjAwOCxOWU4sTkwsd2lzZW1hMDEsMTIwMDAwMA0KMjAwOCxOWU4sTkwsYW5kZXJtYTAyLDEwNTAwMDANCjIwMDgsTllOLE5MLGZlbGljcGUwMSwxMDI1MDAwDQoyMDA4LE5ZTixOTCxlYXNsZWRhMDEsOTUwMDAwDQoyMDA4LE5ZTixOTCxzYW5jaGR1MDEsODUwMDAwDQoyMDA4LE5ZTixOTCxtYWluZWpvMDEsNDUwMDAwDQoyMDA4LE5ZTixOTCxidXJnb2FtMDEsNDE1MDAwDQoyMDA4LE5ZTixOTCxzdG9rZWJyMDEsNDAyMDAwDQoyMDA4LE5ZTixOTCxwYWdhbmFuMDEsNDAxNTAwDQoyMDA4LE5ZTixOTCxzbWl0aGpvMDUsMzk4MDAwDQoyMDA4LE5ZTixOTCx2YXJnYWphMDEsMzk0MDAwDQoyMDA4LFBISSxOTCxidXJyZXBhMDEsMTQyNTAwMDANCjIwMDgsUEhJLE5MLGhvd2FycnkwMSwxMDAwMDAwMA0KMjAwOCxQSEksTkwsbXllcnNicjAxLDg1ODMzMzMNCjIwMDgsUEhJLE5MLHJvbGxpamkwMSw4MDAwMDAwDQoyMDA4LFBISSxOTCxlYXRvbmFkMDEsNzk1ODMzMw0KMjAwOCxQSEksTkwsdXRsZXljaDAxLDc3ODU3MTQNCjIwMDgsUEhJLE5MLGxpZGdlYnIwMSw2MzUwMDAwDQoyMDA4LFBISSxOTCxtb3llcmphMDEsNjAwMDAwMA0KMjAwOCxQSEksTkwsZ29yZG90bzAxLDU1MDAwMDANCjIwMDgsUEhJLE5MLGplbmtpZ2UwMSw1MDAwMDAwDQoyMDA4LFBISSxOTCxyb21lcmpjMDEsMzI1MDAwMA0KMjAwOCxQSEksTkwsZmVsaXpwZTAxLDMwMDAwMDANCjIwMDgsUEhJLE5MLGhlbG1zd2UwMSwyNDAwMDAwDQoyMDA4LFBISSxOTCx3ZXJ0aGphMDEsMTcwMDAwMA0KMjAwOCxQSEksTkwsbWFkc29yeTAxLDE0MDAwMDANCjIwMDgsUEhJLE5MLGR1cmJpY2gwMSw5MDAwMDANCjIwMDgsUEhJLE5MLHRhZ3Vjc28wMSw5MDAwMDANCjIwMDgsUEhJLE5MLGJydW50ZXIwMSw2MDAwMDANCjIwMDgsUEhJLE5MLGhhbWVsY28wMSw1MDAwMDANCjIwMDgsUEhJLE5MLHZpY3Rvc2gwMSw0ODAwMDANCjIwMDgsUEhJLE5MLGtlbmRya3kwMSw0NDUwMDANCjIwMDgsUEhJLE5MLGRvYmJzZ3IwMSw0NDAwMDANCjIwMDgsUEhJLE5MLHJ1aXpjYTAxLDQyNTAwMA0KMjAwOCxQSEksTkwsY29uZHJjbDAxLDQyMDAwMA0KMjAwOCxQSEksTkwsY29zdGVjaDAxLDQxNTAwMA0KMjAwOCxQSEksTkwscm9zYXJmcjAxLDM5NTAwMA0KMjAwOCxQSEksTkwsemFndXJtaTAxLDM5MjUwMA0KMjAwOCxQSEksTkwsbWF0aGlzYzAxLDM5MDAwMA0KMjAwOCxQSVQsTkwsbW9ycmltYTAxLDEwMDM3MjgzDQoyMDA4LFBJVCxOTCx3aWxzb2phMDIsNjY1MDAwMA0KMjAwOCxQSVQsTkwsYmF5amEwMSw2MDAwMDAwDQoyMDA4LFBJVCxOTCxsYXJvY2FkMDEsNTAwMDAwMA0KMjAwOCxQSVQsTkwsc2FuY2hmcjAxLDQxNTAwMDANCjIwMDgsUElULE5MLG5hZHl4YTAxLDMzNTAwMDANCjIwMDgsUElULE5MLG1hcnRlZGEwMSwyMTUwMDAwDQoyMDA4LFBJVCxOTCxiYXV0aWpvMDIsMTgwMDAwMA0KMjAwOCxQSVQsTkwsZ3JhYm9qbzAyLDExMzUwMDANCjIwMDgsUElULE5MLGdvbWV6Y2gwMiwxMDAwMDAwDQoyMDA4LFBJVCxOTCx5YXRlc3R5MDEsODAwMDAwDQoyMDA4LFBJVCxOTCxtaWVudGRvMDEsNzUwMDAwDQoyMDA4LFBJVCxOTCxyaXZhc2x1MDEsNTI1MDAwDQoyMDA4LFBJVCxOTCxjYXBwc21hMDEsNDM1NTAwDQoyMDA4LFBJVCxOTCxzbmVsbGlhMDEsNDM1MDAwDQoyMDA4LFBJVCxOTCxtY2xvdW5hMDEsNDI1MDAwDQoyMDA4LFBJVCxOTCxtYWhvbHBhMDEsNDI0NTAwDQoyMDA4LFBJVCxOTCxwYXVsaXJvMDEsNDIzNTAwDQoyMDA4LFBJVCxOTCxnb3J6ZXRvMDEsNDE5MDAwDQoyMDA4LFBJVCxOTCxkb3VtaXJ5MDEsNDEyMDAwDQoyMDA4LFBJVCxOTCxkdWZmeWNoMDEsNDAzNTAwDQoyMDA4LFBJVCxOTCxkdWtlemEwMSw0MDAwMDANCjIwMDgsUElULE5MLG9zb3JpZnIwMSwzOTMwMDANCjIwMDgsUElULE5MLG1vcmdhbnkwMSwzOTEwMDANCjIwMDgsUElULE5MLGR1bWF0cGgwMSwzOTA1MDANCjIwMDgsUElULE5MLG1lZWtldjAxLDM5MDAwMA0KMjAwOCxTRE4sTkwsbWFkZHVncjAxLDEwMDAwMDAwDQoyMDA4LFNETixOTCxnaWxlc2JyMDIsOTY2NjY2Ng0KMjAwOCxTRE4sTkwsZWRtb25qaTAxLDgwMDAwMDANCjIwMDgsU0ROLE5MLGhvZmZtdHIwMSw3NTAwMDAwDQoyMDA4LFNETixOTCxwZWF2eWphMDEsNjUwMDAwMA0KMjAwOCxTRE4sTkwsd29sZnJhMDIsNDc1MDAwMA0KMjAwOCxTRE4sTkwsZ3JlZW5raDAxLDQ1MDAwMDANCjIwMDgsU0ROLE5MLGlndWNodGEwMSwzODUwMDAwDQoyMDA4LFNETixOTCxiYXJyZW1pMDEsMzUwMDAwMA0KMjAwOCxTRE4sTkwseW91bmdjaDAzLDI2MjUwMDANCjIwMDgsU0ROLE5MLGJhcmRqbzAxLDIyMzc1MDANCjIwMDgsU0ROLE5MLHByaW9ybWEwMSwxMDAwMDAwDQoyMDA4LFNETixOTCxjbGFya3RvMDIsOTAwMDAwDQoyMDA4LFNETixOTCxnb256YWFkMDEsODc1MDAwDQoyMDA4LFNETixOTCxydXNjaGdsMDEsODUwMDAwDQoyMDA4LFNETixOTCxnZXJ1dGpvMDEsNzAwMDAwDQoyMDA4LFNETixOTCxsZWRlendpMDEsNjIwMDAwDQoyMDA4LFNETixOTCxiZWxsaGUwMSw0MjAwMDANCjIwMDgsU0ROLE5MLG1lcmVkY2wwMSw0MTUwMDANCjIwMDgsU0ROLE5MLGhlbnNsY2wwMSw0MTAwMDANCjIwMDgsU0ROLE5MLGtvdXpta2UwMSw0MTAwMDANCjIwMDgsU0ROLE5MLGhhaXJzc2MwMSw0MDYwMDANCjIwMDgsU0ROLE5MLGdlcm1hanUwMSw0MDQ1MDANCjIwMDgsU0ROLE5MLGhhbXBzanUwMSw0MDI1MDANCjIwMDgsU0ROLE5MLHRoYXRjam8wMSwzOTMwMDANCjIwMDgsU0ROLE5MLG1jYW51cGEwMSwzOTEyNTANCjIwMDgsU0ROLE5MLHN0YXVmdGkwMSwzOTEyMDANCjIwMDgsU0ROLE5MLGNyYWJiY2EwMSwzOTAwMDANCjIwMDgsU0ROLE5MLGdvbnphZW4wMSwzOTAwMDANCjIwMDgsU0ROLE5MLGd1ZXZhY2EwMSwzOTAwMDANCjIwMDgsU0ROLE5MLGh1YmVyanUwMSwzOTAwMDANCjIwMDgsU0ZOLE5MLHppdG9iYTAxLDE0NTAwMDAwDQoyMDA4LFNGTixOTCxyb3dhbmFhMDEsOTYwMDAwMA0KMjAwOCxTRk4sTkwsd2lubnJhMDEsODg3NTAwMA0KMjAwOCxTRk4sTkwsZHVyaGFyYTAxLDc1MDAwMDANCjIwMDgsU0ZOLE5MLHJvYmVyZGEwNyw2NTAwMDAwDQoyMDA4LFNGTixOTCxtb2xpbmJlMDEsNjI1MDAwMA0KMjAwOCxTRk4sTkwsdml6cXVvbTAxLDUwMDAwMDANCjIwMDgsU0ZOLE5MLGF1cmlscmkwMSw0NTAwMDAwDQoyMDA4LFNGTixOTCxsb3dyeW5vMDEsMjUwMDAwMA0KMjAwOCxTRk4sTkwsaGVubmVicjAxLDE2MDAwMDANCjIwMDgsU0ZOLE5MLGNvcnJla2UwMSwxMDc1MDAwDQoyMDA4LFNGTixOTCxjYWlubWEwMSw5NTAwMDANCjIwMDgsU0ZOLE5MLGNodWxrdmkwMSw4Mzc1MDANCjIwMDgsU0ZOLE5MLHdhbGtldHkwMSw3NTAwMDANCjIwMDgsU0ZOLE5MLGNhc3Rpam8wMiw2NTAwMDANCjIwMDgsU0ZOLE5MLGxpbmNldGkwMSw0MDUwMDANCjIwMDgsU0ZOLE5MLHRhc2NoamEwMSw0MDA1MDANCjIwMDgsU0ZOLE5MLGZyYW5ka2UwMSwzOTc1MDANCjIwMDgsU0ZOLE5MLHNhbmNoam8wMSwzOTUwMDANCjIwMDgsU0ZOLE5MLGRhdmlzcmEwMSwzOTI1MDANCjIwMDgsU0ZOLE5MLHdpbHNvYnIwMSwzOTI1MDANCjIwMDgsU0ZOLE5MLGxld2lzZnIwMiwzOTIwMDANCjIwMDgsU0ZOLE5MLG9ydG1lZGEwMSwzOTIwMDANCjIwMDgsU0ZOLE5MLGJvY29jYnIwMSwzOTAwMDANCjIwMDgsU0ZOLE5MLGhvbG1zdDAxLDM5MDAwMA0KMjAwOCxTRk4sTkwsdGhyZWVlcjAxLDM5MDAwMA0KMjAwOCxTRk4sTkwsdmFsZGVtZTAxLDM5MDAwMA0KMjAwOCxTRk4sTkwsdmVsZXpldTAxLDM5MDAwMA0KMjAwOCxTRk4sTkwseWFidWtlMDEsMzkwMDAwDQoyMDA4LFNMTixOTCxwdWpvbGFsMDEsMTM4NzA5NDkNCjIwMDgsU0xOLE5MLGdsYXVzdHIwMSwxMjUwMDAwMA0KMjAwOCxTTE4sTkwsY2FycGVjaDAxLDEwNTAwMDAwDQoyMDA4LFNMTixOTCxpc3JpbmphMDEsODAwMDAwMA0KMjAwOCxTTE4sTkwsbXVsZGVtYTAxLDcwMDAwMDANCjIwMDgsU0xOLE5MLGVuY2FyanUwMSw2NTAwMDAwDQoyMDA4LFNMTixOTCxsb29wZWJyMDEsNTUwMDAwMA0KMjAwOCxTTE4sTkwscGluZWlqbzAxLDU1MDAwMDANCjIwMDgsU0xOLE5MLGxvaHNla3kwMSw0MjUwMDAwDQoyMDA4LFNMTixOTCxrZW5uZWFkMDEsMzUwMDAwMA0KMjAwOCxTTE4sTkwsc3ByaW5ydTAxLDM1MDAwMDANCjIwMDgsU0xOLE5MLGl6dHVyY2UwMSwyODUwMDAwDQoyMDA4LFNMTixOTCxmcmFua3J5MDEsMjI1MDAwMA0KMjAwOCxTTE4sTkwsbW9saW55YTAxLDE4MTI1MDANCjIwMDgsU0xOLE5MLG1pbGVzYWEwMSwxNDAwMDAwDQoyMDA4LFNMTixOTCxjbGVtZW1hMDEsMTI1MDAwMA0KMjAwOCxTTE4sTkwsZmxvcmVyYTAxLDEwMDAwMDANCjIwMDgsU0xOLE5MLHdlbGxldG8wMSwxMDAwMDAwDQoyMDA4LFNMTixOTCxhbmtpZXJpMDEsOTAwMDAwDQoyMDA4LFNMTixOTCxsYXJ1ZWphMDEsODUwMDAwDQoyMDA4LFNMTixOTCx3YWlud2FkMDEsNjg3NTAwDQoyMDA4LFNMTixOTCx2aWxsb3JvMDEsNjAwMDAwDQoyMDA4LFNMTixOTCxkdW5jYWNoMDEsNDM5MDAwDQoyMDA4LFNMTixOTCx0aG9tcGJyMDEsNDE0MDAwDQoyMDA4LFNMTixOTCxsdWR3aXJ5MDEsNDExMDAwDQoyMDA4LFNMTixOTCxqb2huc3R5MDEsMzk4MDAwDQoyMDA4LFNMTixOTCxzY2h1bXNrMDEsMzk2MDAwDQoyMDA4LFNMTixOTCxyeWFuYnIwMSwzOTMwMDANCjIwMDgsU0xOLE5MLHJleWVzYW4wMSwzOTI1MDANCjIwMDgsU0xOLE5MLGJhcnRvYnIwMSwzOTAwMDANCjIwMDgsU0xOLE5MLGtpbm5lam8wMSwzOTAwMDANCjIwMDgsU0xOLE5MLG1jY2xla3kwMSwzOTAwMDANCjIwMDgsU0xOLE5MLHdhc2hpcmkwMSwzOTAwMDANCjIwMDgsV0FTLE5MLGNvcmRlY2gwMSw2MjAwMDAwDQoyMDA4LFdBUyxOTCxqb2huc25pMDEsNTUwMDAwMA0KMjAwOCxXQVMsTkwsa2Vhcm5hdTAxLDUwMDAwMDANCjIwMDgsV0FTLE5MLGxvZHVjcGEwMSw1MDAwMDAwDQoyMDA4LFdBUyxOTCx5b3VuZ2RtMDEsNTAwMDAwMA0KMjAwOCxXQVMsTkwsbG9wZXpmZTAxLDQ5MDAwMDANCjIwMDgsV0FTLE5MLGd1em1hY3IwMSw0MjAwMDAwDQoyMDA4LFdBUyxOTCxwZW5hd2kwMSwyMDAwMDAwDQoyMDA4LFdBUyxOTCxheWFsYWx1MDEsMTcwMDAwMA0KMjAwOCxXQVMsTkwsYmVsbGlybzAxLDE2MDAwMDANCjIwMDgsV0FTLE5MLG1hY2tvcm8wMSwxNTAwMDAwDQoyMDA4LFdBUyxOTCxjb2xvbWplMDEsMTI1MDAwMA0KMjAwOCxXQVMsTkwsZXN0cmFqbzAxLDEyNTAwMDANCjIwMDgsV0FTLE5MLHJhdWNoam8wMSwxMjAwMDAwDQoyMDA4LFdBUyxOTCxib29uZWFhMDEsMTAwMDAwMA0KMjAwOCxXQVMsTkwscmVkZGl0aTAxLDEwMDAwMDANCjIwMDgsV0FTLE5MLGtpbmdyYTAxLDg1MDAwMA0KMjAwOCxXQVMsTkwscGVyZXpvZDAxLDg1MDAwMA0KMjAwOCxXQVMsTkwsaGFycml3aTAxLDgwMDAwMA0KMjAwOCxXQVMsTkwsemltbWVyeTAxLDQ2NTAwMA0KMjAwOCxXQVMsTkwsd2FnbmVyeTAxLDQ1MDAwMA0KMjAwOCxXQVMsTkwscml2ZXJzYTAxLDQzNjAwMA0KMjAwOCxXQVMsTkwsY2hpY29tYTAxLDQwOTAwMA0KMjAwOCxXQVMsTkwsYmVyZ21qYTAxLDQwNDAwMA0KMjAwOCxXQVMsTkwsbWlsbGVsYTAyLDQwMjUwMA0KMjAwOCxXQVMsTkwsaGlsbHNoMDEsNDAyMDAwDQoyMDA4LFdBUyxOTCxmbG9yZWplMDIsNDAwMDAwDQoyMDA4LFdBUyxOTCxoYW5yYWpvMDEsNDAwMDAwDQoyMDA4LFdBUyxOTCxkdWtlc2VsMDEsMzkyNTAwDQoyMDA5LEJBTCxBTCxodWZmYXUwMSw4MDAwMDAwDQoyMDA5LEJBTCxBTCxtb3JhbWUwMSw4MDAwMDAwDQoyMDA5LEJBTCxBTCxyb2JlcmJyMDEsODAwMDAwMA0KMjAwOSxCQUwsQUwsYmFlemRhMDEsNzE2NjY2Ng0KMjAwOSxCQUwsQUwsdWVoYXJrbzAxLDUwMDAwMDANCjIwMDksQkFMLEFMLHdhbGtlamEwMSw0NTAwMDAwDQoyMDA5LEJBTCxBTCxmcmVlbHJ5MDEsNDAwMDAwMA0KMjAwOSxCQUwsQUwsbWFya2FuaTAxLDMzNTAwMDANCjIwMDksQkFMLEFMLHNoZXJyZ2UwMSwyNzUwMDAwDQoyMDA5LEJBTCxBTCx3aWdnaXR5MDEsMjUwMDAwMA0KMjAwOSxCQUwsQUwsaXp0dXJjZTAxLDI0MDAwMDANCjIwMDksQkFMLEFMLHNjb3R0bHUwMSwyNDAwMDAwDQoyMDA5LEJBTCxBTCxoZW5kcm1hMDEsMTUwMDAwMA0KMjAwOSxCQUwsQUwsemF1bmdyMDEsMTUwMDAwMA0KMjAwOSxCQUwsQUwscmF5Y2gwMSw4NTAwMDANCjIwMDksQkFMLEFMLG1vZWxsY2gwMSw4MDAwMDANCjIwMDksQkFMLEFMLGd1dGhyamUwMSw2NTAwMDANCjIwMDksQkFMLEFMLGhpbGxyaTAxLDQ0NTAwMA0KMjAwOSxCQUwsQUwsam9uZXNhZDAxLDQzNTAwMA0KMjAwOSxCQUwsQUwsam9obnNqaTA0LDQyMDAwMA0KMjAwOSxCQUwsQUwsYWxiZXJtYTAxLDQxMDAwMA0KMjAwOSxCQUwsQUwscGllZmUwMSw0MTAwMDANCjIwMDksQkFMLEFMLHNhcmZhZGUwMSw0MTAwMDANCjIwMDksQkFMLEFMLGJhc3NicjAxLDQwNTAwMA0KMjAwOSxCQUwsQUwsYW5kaW5ybzAxLDQwMDAwMA0KMjAwOSxCQUwsQUwsc2ltb25hbDAxLDQwMDAwMA0KMjAwOSxCT1MsQUwsZHJld2pkMDEsMTQwMDAwMDANCjIwMDksQk9TLEFMLG9ydGl6ZGEwMSwxMzAwMDAwMA0KMjAwOSxCT1MsQUwsbG93ZWxtaTAxLDEyNTAwMDAwDQoyMDA5LEJPUyxBTCxiZWNrZWpvMDIsMTExNjY2NjYNCjIwMDksQk9TLEFMLGx1Z29qdTAxLDkyNTAwMDANCjIwMDksQk9TLEFMLG1hdHN1ZGEwMSw4MzMzMzMzDQoyMDA5LEJPUyxBTCxiYXlqYTAxLDc4MDAwMDANCjIwMDksQk9TLEFMLHBhcGVsam8wMSw2MjUwMDAwDQoyMDA5LEJPUyxBTCx5b3VrbGtlMDEsNjI1MDAwMA0KMjAwOSxCT1MsQUwsc21vbHRqbzAxLDU1MDAwMDANCjIwMDksQk9TLEFMLHBlbm55YnIwMSw1MDAwMDAwDQoyMDA5LEJPUyxBTCx2YXJpdGphMDEsNTAwMDAwMA0KMjAwOSxCT1MsQUwsd2FrZWZ0aTAxLDQwMDAwMDANCjIwMDksQk9TLEFMLG9rYWppaGkwMSwxNzUwMDAwDQoyMDA5LEJPUyxBTCxwZWRyb2R1MDEsMTc1MDAwMA0KMjAwOSxCT1MsQUwsa290c2FtYTAxLDE1MDAwMDANCjIwMDksQk9TLEFMLHNhaXRvdGEwMSwxNTAwMDAwDQoyMDA5LEJPUyxBTCxsb3BlemphMDIsMTM1MDAwMA0KMjAwOSxCT1MsQUwsbGVzdGVqbzAxLDEwMDAwMDANCjIwMDksQk9TLEFMLGdyZWVubmkwMSw1NTAwMDANCjIwMDksQk9TLEFMLGJhbGRlcm8wMSw1MDAwMDANCjIwMDksQk9TLEFMLGRlbGNhbWEwMSw0NzYwMDANCjIwMDksQk9TLEFMLGVsbHNiamEwMSw0NDk1MDANCjIwMDksQk9TLEFMLHJhbWlycmEwMiw0NDEwMDANCjIwMDksQk9TLEFMLG1hc3RlanUwMSw0MTU1MDANCjIwMDksQk9TLEFMLGxvd3JpamUwMSw0MTQwMDANCjIwMDksQk9TLEFMLGNhcnRlY2gwMSw0MDAwMDANCjIwMDksQk9TLEFMLGtvdHRhZ2UwMSw0MDAwMDANCjIwMDksQk9TLEFMLHZhbmV2am8wMSw0MDAwMDANCjIwMDksQ0hBLEFMLGJ1ZWhybWEwMSwxNDAwMDAwMA0KMjAwOSxDSEEsQUwsdGhvbWVqaTAxLDEzMDAwMDAwDQoyMDA5LENIQSxBTCxrb25lcnBhMDEsMTIwMDAwMDANCjIwMDksQ0hBLEFMLGR5ZWplMDEsMTE1MDAwMDANCjIwMDksQ0hBLEFMLGNvbnRyam8wMSwxMDAwMDAwMA0KMjAwOSxDSEEsQUwscGllcnphajAxLDYyNTAwMDANCjIwMDksQ0hBLEFMLGRvdGVsb2MwMSw2MDAwMDAwDQoyMDA5LENIQSxBTCxqZW5rc2JvMDEsNTYwMDAwMA0KMjAwOSxDSEEsQUwsbGluZWJzYzAxLDQ1MDAwMDANCjIwMDksQ0hBLEFMLG1hY2RvbWkwMSwyNjUwMDAwDQoyMDA5LENIQSxBTCx0aG9ybm1hMDEsMTMyNTAwMA0KMjAwOSxDSEEsQUwsYmV0ZW13aTAxLDEzMDAwMDANCjIwMDksQ0hBLEFMLHJhbWlyYWwwMywxMjI1MDAwDQoyMDA5LENIQSxBTCxjb2xvbmJhMDEsMTAwMDAwMA0KMjAwOSxDSEEsQUwsZmxveWRnYTAxLDc1MDAwMA0KMjAwOSxDSEEsQUwscXVlbnRjYTAxLDU1MDAwMA0KMjAwOSxDSEEsQUwsd2lzZWRlMDEsNTUwMDAwDQoyMDA5LENIQSxBTCxkYW5rc2pvMDEsNTIwMDAwDQoyMDA5LENIQSxBTCxtaWxsZWNvMDEsNDUwMDAwDQoyMDA5LENIQSxBTCxhbmRlcmJyMDMsNDQwMDAwDQoyMDA5LENIQSxBTCxjYXJyYWRqMDEsNDQwMDAwDQoyMDA5LENIQSxBTCxmaWVsZGpvMDIsNDEwMDAwDQoyMDA5LENIQSxBTCxyaWNoYWNsMDEsNDA1MDAwDQoyMDA5LENIQSxBTCxsaWxsaWJyMDEsNDAyNTAwDQoyMDA5LENIQSxBTCxnZXR6Y2gwMSw0MDEwMDANCjIwMDksQ0hBLEFMLG5peGphMDEsNDAwMDAwDQoyMDA5LENMRSxBTCxoYWZuZXRyMDEsMTE1MDAwMDANCjIwMDksQ0xFLEFMLHdlc3RiamEwMSwxMDAwMDAwMA0KMjAwOSxDTEUsQUwsd29vZGtlMDIsMTAwMDAwMDANCjIwMDksQ0xFLEFMLGxlZWNsMDIsNjAwMDAwMA0KMjAwOSxDTEUsQUwsbWFydGl2aTAxLDU5MDAwMDANCjIwMDksQ0xFLEFMLGRlcm9zbWEwMSw1NTAwMDAwDQoyMDA5LENMRSxBTCxzaXplbWdyMDEsNDc2NjY2Ng0KMjAwOSxDTEUsQUwsZGVsbHVkYTAxLDQwMDAwMDANCjIwMDksQ0xFLEFMLHBlcmFsamgwMSwzNjUwMDAwDQoyMDA5LENMRSxBTCxiZXRhbnJhMDEsMzM1MDAwMA0KMjAwOSxDTEUsQUwsa29iYXltYTAxLDMwMDAwMDANCjIwMDksQ0xFLEFMLGNhcm1vZmEwMSwyOTM3NTAwDQoyMDA5LENMRSxBTCxjYXJyb2phMDEsMjUwMDAwMA0KMjAwOSxDTEUsQUwsc2hvcHBrZTAxLDE5NTAwMDANCjIwMDksQ0xFLEFMLHBhdmFuY2EwMSwxNTAwMDAwDQoyMDA5LENMRSxBTCxnYXJrb3J5MDEsNDQ2MTAwDQoyMDA5LENMRSxBTCxwZXJlenJhMDEsNDM2MzAwDQoyMDA5LENMRSxBTCxzbWl0aGpvMDUsNDI3NTAwDQoyMDA5LENMRSxBTCxmcmFuY2JlMDEsNDIxNDAwDQoyMDA5LENMRSxBTCxjaG9vc2gwMSw0MjAzMDANCjIwMDksQ0xFLEFMLGxld2lzamUwMSw0MTg2MDANCjIwMDksQ0xFLEFMLGNhYnJlYXMwMSw0MTY3MDANCjIwMDksQ0xFLEFMLGJhcmZpam8wMiw0MTYxMDANCjIwMDksQ0xFLEFMLHJleWVzYW4wMSw0MTQyMDANCjIwMDksQ0xFLEFMLGxld2lzc2MwMiw0MDQwMDANCjIwMDksQ0xFLEFMLGphY2tzemEwMSw0MDM4MDANCjIwMDksQ0xFLEFMLGNyb3dldHIwMSw0MDAwMDANCjIwMDksREVULEFMLG9yZG9ubWEwMSwxODk3MTU5Ng0KMjAwOSxERVQsQUwsY2FicmVtaTAxLDE0MzgzMDQ5DQoyMDA5LERFVCxBTCxib25kZWplMDEsMTI1MDAwMDANCjIwMDksREVULEFMLGd1aWxsY2EwMSwxMDAwMDAwMA0KMjAwOSxERVQsQUwsd2lsbGlkbzAzLDEwMDAwMDAwDQoyMDA5LERFVCxBTCxyb2Jlcm5hMDEsNzAwMDAwMA0KMjAwOSxERVQsQUwsaW5nZWJyMDEsNjMwMDAwMA0KMjAwOSxERVQsQUwscG9sYW5wbDAxLDQ2MDAwMDANCjIwMDksREVULEFMLGx5b25icjAxLDQyNTAwMDANCjIwMDksREVULEFMLHZlcmxhanUwMSwzNjc1MDAwDQoyMDA5LERFVCxBTCxncmFuZGN1MDEsMzUwMDAwMA0KMjAwOSxERVQsQUwsbGFpcmRnZTAxLDI4MDAwMDANCjIwMDksREVULEFMLHJvZG5lZmUwMSwyNzAwMDAwDQoyMDA5LERFVCxBTCx0aGFtZW1hMDEsMjI3NTAwMA0KMjAwOSxERVQsQUwsamFja3NlZDAxLDIyMDAwMDANCjIwMDksREVULEFMLHBvcmNlcmkwMSwyMDk1MDAwDQoyMDA5LERFVCxBTCxzZWF5Ym8wMSwxMzAwMDAwDQoyMDA5LERFVCxBTCxldmVyZWFkMDEsMTAwMDAwMA0KMjAwOSxERVQsQUwsc2FudGlyYTAxLDgyNTAwMA0KMjAwOSxERVQsQUwscmluY29qdTAxLDc1MDAwMA0KMjAwOSxERVQsQUwsdHJlYW5tYTAxLDc1MDAwMA0KMjAwOSxERVQsQUwsenVtYXlqbzAxLDczNTAwMA0KMjAwOSxERVQsQUwsbWluZXJ6YTAxLDQzNzUwMA0KMjAwOSxERVQsQUwsZ2FsYXJhcjAxLDQzNTAwMA0KMjAwOSxERVQsQUwsbGFyaXNqZTAxLDQwMzAwMA0KMjAwOSxERVQsQUwsYW5kZXJqbzAzLDQwMDAwMA0KMjAwOSxERVQsQUwsYm9uaW5lZDAxLDQwMDAwMA0KMjAwOSxERVQsQUwscGVycnlyeTAxLDQwMDAwMA0KMjAwOSxLQ0EsQUwsZ3VpbGxqbzAxLDEyMDAwMDAwDQoyMDA5LEtDQSxBTCxtZWNoZWdpMDEsMTE0MDAwMDANCjIwMDksS0NBLEFMLGNyaXNwY28wMSw2MDgzMzMzDQoyMDA5LEtDQSxBTCxmYXJuc2t5MDEsNDI1MDAwMA0KMjAwOSxLQ0EsQUwsbWFoYXlybzAxLDQwMDAwMDANCjIwMDksS0NBLEFMLGdyZWluemEwMSwzNzUwMDAwDQoyMDA5LEtDQSxBTCxkZWplc2RhMDEsMzYwMDAwMA0KMjAwOSxLQ0EsQUwsdGVhaGVtYTAxLDM1NzUwMDANCjIwMDksS0NBLEFMLGphY29ibWkwMiwzMjc1MDAwDQoyMDA5LEtDQSxBTCxidWNram8wMSwyOTAwMDAwDQoyMDA5LEtDQSxBTCxvbGl2b21pMDEsMjcwMDAwMA0KMjAwOSxLQ0EsQUwsY3J1emp1MDIsMjI1MDAwMA0KMjAwOSxLQ0EsQUwscmFtaXJobzAxLDE4MDAwMDANCjIwMDksS0NBLEFMLGJsb29td2kwMSwxNDAwMDAwDQoyMDA5LEtDQSxBTCxkYXZpZWt5MDEsMTMwMDAwMA0KMjAwOSxLQ0EsQUwsYmFsZWpvMDEsMTIwMDAwMA0KMjAwOSxLQ0EsQUwsc29yaWFqbzAxLDEwMDAwMDANCjIwMDksS0NBLEFMLHdhZWNoZG8wMSw2NDAwMDANCjIwMDksS0NBLEFMLGdvcmRvYWwwMSw0NTcwMDANCjIwMDksS0NBLEFMLHRlamVkcm8wMSw0MzcwMDANCjIwMDksS0NBLEFMLHBlbmF0bzAyLDQyNTAwMA0KMjAwOSxLQ0EsQUwsYXZpbGVtaTAxLDQyNDUwMA0KMjAwOSxLQ0EsQUwsYnV0bGViaTAzLDQyMTAwMA0KMjAwOSxLQ0EsQUwsY2FsbGFhbDAxLDQxNTUwMA0KMjAwOSxLQ0EsQUwsY29zdGFzaDAxLDQxMTAwMA0KMjAwOSxLQ0EsQUwscGVuYWJyMDEsNDA1MDAwDQoyMDA5LExBQSxBTCxodW50ZXRvMDEsMTgwMDAwMDANCjIwMDksTEFBLEFMLGd1ZXJydmwwMSwxNTAwMDAwMA0KMjAwOSxMQUEsQUwsbWF0dGhnYTAyLDEwNDAwMDAwDQoyMDA5LExBQSxBTCxlc2NvYmtlMDEsMTAwMDAwMDANCjIwMDksTEFBLEFMLGxhY2tlam8wMSwxMDAwMDAwMA0KMjAwOSxMQUEsQUwsZnVlbnRicjAxLDg1MDAwMDANCjIwMDksTEFBLEFMLGZpZ2dpY2gwMSw1Nzc1MDAwDQoyMDA5LExBQSxBTCxhYnJldWJvMDEsNTAwMDAwMA0KMjAwOSxMQUEsQUwsc2hpZWxzYzAxLDUwMDAwMDANCjIwMDksTEFBLEFMLHNwZWllanUwMSw0NzUwMDAwDQoyMDA5LExBQSxBTCxzYW50YWVyMDEsMzgwMDAwMA0KMjAwOSxMQUEsQUwsb2xpdmVkYTAyLDM2NjUwMDANCjIwMDksTEFBLEFMLHJpdmVyanUwMSwzMjUwMDAwDQoyMDA5LExBQSxBTCxuYXBvbG1pMDEsMjAwMDAwMA0KMjAwOSxMQUEsQUwsaXp0dXJtYTAxLDE2MDAwMDANCjIwMDksTEFBLEFMLG1vcmFsa2UwMSwxMTAwMDAwDQoyMDA5LExBQSxBTCxxdWlubHJvMDEsMTEwMDAwMA0KMjAwOSxMQUEsQUwsc2F1bmRqbzAxLDQ3NTAwMA0KMjAwOSxMQUEsQUwsa2VuZHJobzAxLDQ2NTAwMA0KMjAwOSxMQUEsQUwsd2VhdmVqZTAyLDQ2NTAwMA0KMjAwOSxMQUEsQUwsYXliYXJlcjAxLDQ2MDAwMA0KMjAwOSxMQUEsQUwsbWF0aGlqZTAxLDQ1MDAwMA0KMjAwOSxMQUEsQUwsbW9zZWxkdTAxLDQzNTAwMA0KMjAwOSxMQUEsQUwsYXJyZWRqbzAxLDQxMDAwMA0KMjAwOSxMQUEsQUwsbG91eHNoMDEsNDA1MDAwDQoyMDA5LExBQSxBTCxidWxnZWphMDEsNDAzMDAwDQoyMDA5LExBQSxBTCxqZXBzZWtlMDEsNDAxMDAwDQoyMDA5LExBQSxBTCxhZGVuaG5pMDEsNDAwMDAwDQoyMDA5LE1JTixBTCxtb3JuZWp1MDEsMTE2MDAwMDANCjIwMDksTUlOLEFMLG5hdGhham8wMSwxMTI1MDAwMA0KMjAwOSxNSU4sQUwsbWF1ZXJqbzAxLDEwNTAwMDAwDQoyMDA5LE1JTixBTCxjdWRkeW1pMDEsNzY2NjY2Ng0KMjAwOSxNSU4sQUwscHVudG9uaTAxLDQwMDAwMDANCjIwMDksTUlOLEFMLGt1YmVsamEwMSwyNzUwMDAwDQoyMDA5LE1JTixBTCxjcmVkZWpvMDEsMjUwMDAwMA0KMjAwOSxNSU4sQUwsY3JhaW5qZTAxLDE3MDAwMDANCjIwMDksTUlOLEFMLGd1ZXJybWEwMiwxNDc1MDAwDQoyMDA5LE1JTixBTCxheWFsYWx1MDEsMTMwMDAwMA0KMjAwOSxNSU4sQUwseW91bmdkZTAzLDExNTIwMDANCjIwMDksTUlOLEFMLGh1bWJlcGgwMSwxMTUwMDAwDQoyMDA5LE1JTixBTCxyZWRtb21pMDEsOTUwMDAwDQoyMDA5LE1JTixBTCxiYWtlcnNjMDIsNzUwMDAwDQoyMDA5LE1JTixBTCxkaWNrZXJhMDEsNTI1MDAwDQoyMDA5LE1JTixBTCxoYXJyaWJyMDEsNDY2MTAwDQoyMDA5LE1JTixBTCxib25zZWJvMDEsNDUwMDAwDQoyMDA5LE1JTixBTCxibGFja25pMDEsNDQwMDAwDQoyMDA5LE1JTixBTCxuZXNoZXBhMDEsNDQwMDAwDQoyMDA5LE1JTixBTCxzbG93ZWtlMDEsNDQwMDAwDQoyMDA5LE1JTixBTCxnb21lemNhMDEsNDM3NTAwDQoyMDA5LE1JTixBTCxzcGFuZGUwMSw0MzUwMDANCjIwMDksTUlOLEFMLGxpcmlhZnIwMSw0MzAwMDANCjIwMDksTUlOLEFMLHBlcmtpZ2wwMSw0MzAwMDANCjIwMDksTUlOLEFMLGNhc2lsYWwwMSw0Mjc1MDANCjIwMDksTUlOLEFMLGJyZXNsY3IwMSw0MjIwMDANCjIwMDksTUlOLEFMLGJ1c2NoYnIwMSw0MTI1MDANCjIwMDksTUlOLEFMLGR1ZW5zYnIwMSw0MDAwMDANCjIwMDksTUlOLEFMLG1vcmFsam8wMiw0MDAwMDANCjIwMDksTllBLEFMLHJvZHJpYWwwMSwzMzAwMDAwMA0KMjAwOSxOWUEsQUwsamV0ZXJkZTAxLDIxNjAwMDAwDQoyMDA5LE5ZQSxBTCx0ZWl4ZW1hMDEsMjA2MjUwMDANCjIwMDksTllBLEFMLGJ1cm5lYWowMSwxNjUwMDAwMA0KMjAwOSxOWUEsQUwsc2FiYXRjYzAxLDE1Mjg1NzE0DQoyMDA5LE5ZQSxBTCxyaXZlcm1hMDEsMTUwMDAwMDANCjIwMDksTllBLEFMLHBvc2Fkam8wMSwxMzEwMDAwMA0KMjAwOSxOWUEsQUwsZGFtb25qbzAxLDEzMDAwMDAwDQoyMDA5LE5ZQSxBTCxtYXRzdWhpMDEsMTMwMDAwMDANCjIwMDksTllBLEFMLG5hZHl4YTAxLDY1NTAwMDANCjIwMDksTllBLEFMLGNhbm9ybzAxLDYwMDAwMDANCjIwMDksTllBLEFMLHBldHRpYW4wMSw1NTAwMDAwDQoyMDA5LE5ZQSxBTCxzd2lzaG5pMDEsNTQwMDAwMA0KMjAwOSxOWUEsQUwsd2FuZ2NoMDEsNTAwMDAwMA0KMjAwOSxOWUEsQUwsbWFydGVkYTAxLDM3NTAwMDANCjIwMDksTllBLEFMLG1vbGluam8wMSwyMTI1MDAwDQoyMDA5LE5ZQSxBTCxjYWJyZW1lMDEsMTQwMDAwMA0KMjAwOSxOWUEsQUwsYnJ1bmVicjAxLDEyNTAwMDANCjIwMDksTllBLEFMLHJhbnNvY28wMSw0NTUxMDANCjIwMDksTllBLEFMLHZlcmFzam8wMSw0MzI5NzUNCjIwMDksTllBLEFMLGNoYW1iam8wMyw0MzI1NzUNCjIwMDksTllBLEFMLHJhbWlyZWQwMSw0MjI0NTANCjIwMDksTllBLEFMLGdhcmRuYnIwMSw0MTQwMDANCjIwMDksTllBLEFMLGNva2VwaDAxLDQwMzMwMA0KMjAwOSxOWUEsQUwsYWxiYWxqbzAxLDQwMzA3NQ0KMjAwOSxOWUEsQUwscGVuYXJhMDIsNDAwMDAwDQoyMDA5LE9BSyxBTCxob2xsaW1hMDEsMTM1MDAwMDANCjIwMDksT0FLLEFMLGNoYXZlZXIwMSwxMTUwMDAwMA0KMjAwOSxPQUssQUwsY3Jvc2JibzAxLDUzMDAwMDANCjIwMDksT0FLLEFMLGVsbGlzbWEwMSw1MDAwMDAwDQoyMDA5LE9BSyxBTCxjYWJyZW9yMDEsNDAwMDAwMA0KMjAwOSxPQUssQUwsZ2lhbWJqYTAxLDQwMDAwMDANCjIwMDksT0FLLEFMLGR1Y2hzanUwMSwzOTAwMDAwDQoyMDA5LE9BSyxBTCxzcHJpbnJ1MDEsMzMwMDAwMA0KMjAwOSxPQUssQUwsY3VzdGphMDEsMjgwMDAwMA0KMjAwOSxPQUssQUwsd3VlcnRtaTAxLDExMDAwMDANCjIwMDksT0FLLEFMLGdhcmNpbm8wMSwxMDAwMDAwDQoyMDA5LE9BSyxBTCxnYXJjaWphMDEsNDIwMDAwDQoyMDA5LE9BSyxBTCxicmFkZWRhMDEsNDEwMDAwDQoyMDA5LE9BSyxBTCxidWNrdHIwMSw0MTAwMDANCjIwMDksT0FLLEFMLGRhdmlzcmEwMSw0MTAwMDANCjIwMDksT0FLLEFMLGRldmluam8wMSw0MTAwMDANCjIwMDksT0FLLEFMLGV2ZWxhZGEwMSw0MTAwMDANCjIwMDksT0FLLEFMLGdhbGxhc2UwMSw0MTAwMDANCjIwMDksT0FLLEFMLHN1enVra3UwMSw0MTAwMDANCjIwMDksT0FLLEFMLHN3ZWVucnkwMSw0MTAwMDANCjIwMDksT0FLLEFMLGJsZXZpamUwMSw0MDUwMDANCjIwMDksT0FLLEFMLHppZWdsYnIwMSw0MDUwMDANCjIwMDksT0FLLEFMLGFuZGVyYnIwNCw0MDAwMDANCjIwMDksT0FLLEFMLGJhaWxlYW4wMSw0MDAwMDANCjIwMDksT0FLLEFMLGNhaGlsdHIwMSw0MDAwMDANCjIwMDksT0FLLEFMLG91dG1ham8wMSw0MDAwMDANCjIwMDksT0FLLEFMLHBvd2VsbGEwMSw0MDAwMDANCjIwMDksU0VBLEFMLHN1enVraWMwMSwxODAwMDAwMA0KMjAwOSxTRUEsQUwsYmVsdHJhZDAxLDEzNDAwMDAwDQoyMDA5LFNFQSxBTCxzaWx2YWNhMDEsMTIyNTAwMDANCjIwMDksU0VBLEFMLHdhc2hiamEwMSw5ODUwMDAwDQoyMDA5LFNFQSxBTCxiYXRpc21pMDEsOTUwMDAwMA0KMjAwOSxTRUEsQUwsYmVkYXJlcjAxLDc3NTAwMDANCjIwMDksU0VBLEFMLGpvaGppa2UwMSw3NjY2NjY2DQoyMDA5LFNFQSxBTCxoZXJuYWZlMDIsMzgwMDAwMA0KMjAwOSxTRUEsQUwsYmV0YW55dTAxLDIzMDAwMDANCjIwMDksU0VBLEFMLGxvcGV6am8wMSwyMjUwMDAwDQoyMDA5LFNFQSxBTCxjaGF2ZWVuMDEsMjA1MDAwMA0KMjAwOSxTRUEsQUwsZ3JpZmZrZTAyLDIwMDAwMDANCjIwMDksU0VBLEFMLGJyYW55cnUwMSwxNDAwMDAwDQoyMDA5LFNFQSxBTCxjZWRlbnJvMDIsODIyNTAwDQoyMDA5LFNFQSxBTCxzd2Vlbm1pMDEsNTAwMDAwDQoyMDA5LFNFQSxBTCxndXRpZWZyMDEsNDU1MDAwDQoyMDA5LFNFQSxBTCxtb3Jyb2JyMDEsNDI1MDAwDQoyMDA5LFNFQSxBTCxyb3dsYXJ5MDEsNDIwMDAwDQoyMDA5LFNFQSxBTCxhYXJkc2RhMDEsNDE5MDAwDQoyMDA5LFNFQSxBTCxsb3dlbWEwMSw0MTgwMDANCjIwMDksU0VBLEFMLGNvcmNvcm8wMSw0MTMwMDANCjIwMDksU0VBLEFMLGJhbGVud2wwMSw0MDUwMDANCjIwMDksU0VBLEFMLGZlaWVycnkwMSw0MDUwMDANCjIwMDksU0VBLEFMLGppbWVuY2UwMSw0MDUwMDANCjIwMDksU0VBLEFMLGpha3ViY2gwMSw0MDAwMDANCjIwMDksU0VBLEFMLGpvaG5zcm8wNyw0MDAwMDANCjIwMDksU0VBLEFMLGtlbGxlc2gwMSw0MDAwMDANCjIwMDksU0VBLEFMLHR1aWFzbWEwMSw0MDAwMDANCjIwMDksVEJBLEFMLGNyYXdmY2EwMiw4MjUwMDAwDQoyMDA5LFRCQSxBTCxwZW5hY2EwMSw4MDAwMDAwDQoyMDA5LFRCQSxBTCxidXJyZXBhMDEsNzAwMDAwMA0KMjAwOSxUQkEsQUwsa2F6bWlzYzAxLDYwMDAwMDANCjIwMDksVEJBLEFMLHBlcmNpdHIwMSw0NDQ1MDAwDQoyMDA5LFRCQSxBTCxicmFkZmNoMDEsMzY2NjY2Ng0KMjAwOSxUQkEsQUwsaXdhbXVhazAxLDMyNTAwMDANCjIwMDksVEJBLEFMLHdoZWVsZGEwMSwzMjAwMDAwDQoyMDA5LFRCQSxBTCxuYXZhcmRpMDEsMjEwMDAwMA0KMjAwOSxUQkEsQUwsYmFydGxqYTAxLDE5ODEyNTANCjIwMDksVEJBLEFMLHNoaWVsamEwMiwxNTAwMDAwDQoyMDA5LFRCQSxBTCxiYWxmb2dyMDEsMTQwMDAwMA0KMjAwOSxUQkEsQUwsc2hvdXNicjAxLDEzNTAwMDANCjIwMDksVEJBLEFMLG5lbHNvam8wMSwxMzAwMDAwDQoyMDA5LFRCQSxBTCxuaWVtYWplMDEsMTI5MDAwMA0KMjAwOSxUQkEsQUwsZ3Jvc3NnYTAxLDEyNTUwMDANCjIwMDksVEJBLEFMLGthcGxlZ2EwMSwxMDAwMDE4DQoyMDA5LFRCQSxBTCxheWJhcndpMDEsOTc1MDAwDQoyMDA5LFRCQSxBTCxpc3JpbmphMDEsNzUwMDAwDQoyMDA5LFRCQSxBTCxjb3JtaWxhMDEsNjc1MDAwDQoyMDA5LFRCQSxBTCxsb25nb2V2MDEsNTUwMDAwDQoyMDA5LFRCQSxBTCx1cHRvbmJqMDEsNDM1MDAwDQoyMDA5LFRCQSxBTCxob3dlbGpwMDEsNDMzNzAwDQoyMDA5LFRCQSxBTCxnYXJ6YW1hMDEsNDMzMzAwDQoyMDA5LFRCQSxBTCxzb25uYWFuMDEsNDMwMTAwDQoyMDA5LFRCQSxBTCx6b2JyaWJlMDEsNDE1OTAwDQoyMDA5LFRCQSxBTCxyaWdnYXNoMDEsNDEzOTAwDQoyMDA5LFRCQSxBTCxqb3ljZW1hMDEsNDEwNDAwDQoyMDA5LFRCQSxBTCxwZXJlemZlMDEsNDAyODAwDQoyMDA5LFRFWCxBTCx5b3VuZ21pMDIsMTMwNTQ1MjYNCjIwMDksVEVYLEFMLG1pbGx3a2UwMSwxMjg2ODg5Mg0KMjAwOSxURVgsQUwscGFkaWx2aTAxLDEyMDAwMDAwDQoyMDA5LFRFWCxBTCxibGFsb2hhMDEsNjIwMDAwMA0KMjAwOSxURVgsQUwsYmVub2lqbzAxLDM3NTAwMDANCjIwMDksVEVYLEFMLGtpbnNsaWEwMSwzMjAwMDAwDQoyMDA5LFRFWCxBTCxieXJkbWEwMSwzMDYwMDAwDQoyMDA5LFRFWCxBTCx3aWxzb2NqMDEsMTg1MDAwMA0KMjAwOSxURVgsQUwsZnJhbmNmcjAxLDE2MTUwMDANCjIwMDksVEVYLEFMLGd1YXJkZWQwMSwxMDAwMDAwDQoyMDA5LFRFWCxBTCx2aXpxdW9tMDEsMTAwMDAwMA0KMjAwOSxURVgsQUwsamVubmlqYTAxLDgwMDAwMA0KMjAwOSxURVgsQUwsYmVuc29rcjAxLDc1MDAwMA0KMjAwOSxURVgsQUwsbWNjYXJicjAxLDY1MDAwMA0KMjAwOSxURVgsQUwsaGFtaWxqbzAzLDU1NTAwMA0KMjAwOSxURVgsQUwsam9uZXNhbjAxLDUwMDAwMA0KMjAwOSxURVgsQUwsZmVsZG1zYzAxLDQzNDY4MA0KMjAwOSxURVgsQUwscnVwZWpvMDEsNDE2MzEwDQoyMDA5LFRFWCxBTCxtdXJwaGRhMDcsNDE0ODIwDQoyMDA5LFRFWCxBTCxuaXBwZWR1MDEsNDExNzYwDQoyMDA5LFRFWCxBTCxzYWx0YWphMDEsNDEwODkwDQoyMDA5LFRFWCxBTCxleXJld2kwMSw0MTAwMDANCjIwMDksVEVYLEFMLGNydXpuZTAyLDQwODA3MA0KMjAwOSxURVgsQUwsZGF2aXNjaDAyLDQwNjYyMA0KMjAwOSxURVgsQUwsaGFycmltYTAxLDQwNTUwMA0KMjAwOSxURVgsQUwsbWFkcml3YTAxLDQwNDczMA0KMjAwOSxURVgsQUwsaHVybGVlcjAxLDQwMTAwMA0KMjAwOSxURVgsQUwsdGVhZ2F0YTAxLDQwMTAwMA0KMjAwOSxURVgsQUwsYW5kcnVlbDAxLDQwMDAwMA0KMjAwOSxUT1IsQUwsaGFsbGFybzAxLDE0MjUwMDAwDQoyMDA5LFRPUixBTCxyeWFuYmowMSwxMjAwMDAwMA0KMjAwOSxUT1IsQUwscm9sZW5zYzAxLDExNjI1MDAwDQoyMDA5LFRPUixBTCxvdmVyYmx5MDEsNzk1MDAwMA0KMjAwOSxUT1IsQUwscmlvc2FsMDEsNjQwMDAwMA0KMjAwOSxUT1IsQUwsd2VsbHN2ZTAxLDQ2ODc1MDANCjIwMDksVE9SLEFMLGRvd25zc2MwMSwzNzUwMDAwDQoyMDA5LFRPUixBTCxoaWxsYWEwMSwyNTkwMDAwDQoyMDA5LFRPUixBTCxiYXJhanJvMDEsMjUwMDAwMA0KMjAwOSxUT1IsQUwsYmF1dGlqbzAyLDI0MDAwMDANCjIwMDksVE9SLEFMLG1jZG9uam8wMywxOTAwMDAwDQoyMDA5LFRPUixBTCxmcmFzb2phMDEsMTQ1MDAwMA0KMjAwOSxUT1IsQUwsc2N1dGFtYTAxLDExMDAwMDANCjIwMDksVE9SLEFMLHRhbGxlYnIwMSwxMDE1MDAwDQoyMDA5LFRPUixBTCxtaWxsYWtlMDEsODUwMDAwDQoyMDA5LFRPUixBTCxjYW1wc2gwMSw3NTAwMDANCjIwMDksVE9SLEFMLGxlYWd1YnIwMSw2NDAwMDANCjIwMDksVE9SLEFMLGJhcnJlbWkwMSw2MDAwMDANCjIwMDksVE9SLEFMLG1jZ293ZHUwMSw0MTk0MDANCjIwMDksVE9SLEFMLGxpdHNjamUwMSw0MTQ0MDANCjIwMDksVE9SLEFMLGphbnNzY2EwMSw0MTM5MDANCjIwMDksVE9SLEFMLGxpbmRhZDAxLDQxMTgwMA0KMjAwOSxUT1IsQUwsY2FybHNqZTAxLDQwODcwMA0KMjAwOSxUT1IsQUwsbWFyY3VzaDAxLDQwNTIwMA0KMjAwOSxUT1IsQUwscHVyY2VkYTAxLDQwMzcwMA0KMjAwOSxUT1IsQUwscmljaG1zYzAxLDQwMjMwMA0KMjAwOSxUT1IsQUwsc25pZGV0cjAxLDQwMTQwMA0KMjAwOSxUT1IsQUwscm9tZXJyaTAxLDQwMDAwMA0KMjAwOSxBUkksTkwsYnlybmVlcjAxLDExNjY2NjY2DQoyMDA5LEFSSSxOTCxkYXZpc2RvMDIsODc1MDAwMA0KMjAwOSxBUkksTkwsaGFyZW5kYTAxLDc1MDAwMDANCjIwMDksQVJJLE5MLHdlYmJicjAxLDY1MDAwMDANCjIwMDksQVJJLE5MLGdhcmxham8wMSw2MjUwMDAwDQoyMDA5LEFSSSxOTCx0cmFjeWNoMDEsNTAwMDAwMA0KMjAwOSxBUkksTkwsc2Nob2VzYzAxLDM2MDAwMDANCjIwMDksQVJJLE5MLGxvcGV6ZmUwMSwzNTAwMDAwDQoyMDA5LEFSSSxOTCxqYWNrc2NvMDEsMzA1MDAwMA0KMjAwOSxBUkksTkwscXVhbGxjaDAxLDI1MzUwMDANCjIwMDksQVJJLE5MLHJhdWNoam8wMSwyNTI1MDAwDQoyMDA5LEFSSSxOTCxzbnlkZWNoMDIsMjAwMDAwMA0KMjAwOSxBUkksTkwseW91bmdjaDA0LDE5NTAwMDANCjIwMDksQVJJLE5MLGRyZXdzdDAxLDE1MDAwMDANCjIwMDksQVJJLE5MLHNjaGVybWEwMSwxNDUwMDAwDQoyMDA5LEFSSSxOTCxjbGFya3RvMDIsODAwMDAwDQoyMDA5LEFSSSxOTCxvamVkYWF1MDEsNzEyNTAwDQoyMDA5LEFSSSxOTCxnb3Jkb3RvMDEsNTAwMDAwDQoyMDA5LEFSSSxOTCxwZW5hdG8wMyw0MzAwMDANCjIwMDksQVJJLE5MLG1vbnRlbWkwMSw0MjUwMDANCjIwMDksQVJJLE5MLHJleW5vbWEwMSw0MjI1MDANCjIwMDksQVJJLE5MLHNsYXRlZG8wMSw0MjI1MDANCjIwMDksQVJJLE5MLHVwdG9uanUwMSw0MTIwMDANCjIwMDksQVJJLE5MLHBldGl0eXUwMSw0MTE1MDANCjIwMDksQVJJLE5MLGJ1Y2tuYmkwMiw0MDMwMDANCjIwMDksQVJJLE5MLHJvYmVycnkwMSw0MDAwMDANCjIwMDksQVRMLE5MLGh1ZHNvdGkwMSwxNTUwMDAwMA0KMjAwOSxBVEwsTkwsbG93ZWRlMDEsMTUwMDAwMDANCjIwMDksQVRMLE5MLHZhenF1amEwMSwxMTUwMDAwMA0KMjAwOSxBVEwsTkwsam9uZXNjaDA2LDEwMDAwMDAwDQoyMDA5LEFUTCxOTCxrYXdha2tlMDEsODMzMzY2Ng0KMjAwOSxBVEwsTkwsc29yaWFyYTAxLDYzNTAwMDANCjIwMDksQVRMLE5MLG1jY2FuYnIwMSwzNzAwMDAwDQoyMDA5LEFUTCxOTCxnb256YW1pMDIsMzQ1MDAwMA0KMjAwOSxBVEwsTkwsZnJhbmNqZTAyLDMzNzUwMDANCjIwMDksQVRMLE5MLGtvdGNoY2EwMSwyODg1MDAwDQoyMDA5LEFUTCxOTCxqb2huc2tlMDUsMjgyNTAwMA0KMjAwOSxBVEwsTkwsYW5kZXJnYTAxLDI1MDAwMDANCjIwMDksQVRMLE5MLGluZmFub20wMSwxODUwMDAwDQoyMDA5LEFUTCxOTCxyb3NzZGEwMSwxNDAwMDAwDQoyMDA5LEFUTCxOTCxkaWF6bWEwMiwxMjM3NTAwDQoyMDA5LEFUTCxOTCxnbGF2aXRvMDIsMTAwMDAwMA0KMjAwOSxBVEwsTkwsbm9ydG9ncjAxLDgwMDAwMA0KMjAwOSxBVEwsTkwsanVycmpqYTAxLDQ1MDAwMA0KMjAwOSxBVEwsTkwsYmVubmVqZTAxLDQzNzUwMA0KMjAwOSxBVEwsTkwsYm95ZXJibDAxLDQzMjUwMA0KMjAwOSxBVEwsTkwsY2FybHlidTAxLDQyNTAwMA0KMjAwOSxBVEwsTkwsZXNjb2J5dTAxLDQyNTAwMA0KMjAwOSxBVEwsTkwsY2FtcGlqbzAxLDQyMDAwMA0KMjAwOSxBVEwsTkwscHJhZG9tYTAxLDQxNTAwMA0KMjAwOSxBVEwsTkwsbW95bGFwZTAxLDQxMDAwMA0KMjAwOSxBVEwsTkwsbW9ydG9jaDAyLDQwNTAwMA0KMjAwOSxBVEwsTkwsb2ZsYWhlcjAxLDQwMDAwMA0KMjAwOSxBVEwsTkwsc2FtbW9jbDAxLDQwMDAwMA0KMjAwOSxBVEwsTkwsc2NoYWZqbzAyLDQwMDAwMA0KMjAwOSxDSE4sTkwsemFtYnJjYTAxLDE4NzUwMDAwDQoyMDA5LENITixOTCxzb3JpYWFsMDEsMTcwMDAwMDANCjIwMDksQ0hOLE5MLHJhbWlyYXIwMSwxNjY1MDAwMA0KMjAwOSxDSE4sTkwsbGVlZGUwMiwxMzI1MDAwMA0KMjAwOSxDSE4sTkwsbGlsbHl0ZTAxLDEzMDAwMDAwDQoyMDA5LENITixOTCxmdWt1ZGtvMDEsMTI1MDAwMDANCjIwMDksQ0hOLE5MLGRlbXBzcnkwMSw5MDAwMDAwDQoyMDA5LENITixOTCxicmFkbG1pMDEsNzAwMDAwMA0KMjAwOSxDSE4sTkwsaGFyZGVyaTAxLDcwMDAwMDANCjIwMDksQ0hOLE5MLGdyZWdna2UwMSw0MjAwMDAwDQoyMDA5LENITixOTCx2aXpjYWx1MDEsMzUwMDAwMA0KMjAwOSxDSE4sTkwsam9obnNyZTAyLDMwMDAwMDANCjIwMDksQ0hOLE5MLG1pbGVzYWEwMSwyMjAwMDAwDQoyMDA5LENITixOTCxoZWlsbWFhMDEsMTYyNTAwMA0KMjAwOSxDSE4sTkwsY290dHNuZTAxLDExMDAwMDANCjIwMDksQ0hOLE5MLGdhdGhyam8wMSw4MDAwMDANCjIwMDksQ0hOLE5MLG1hcm1vY2EwMSw1NzUwMDANCjIwMDksQ0hOLE5MLHNvdG9nZTAxLDU3NTAwMA0KMjAwOSxDSE4sTkwsdGhlcmlyeTAxLDUwMDAwMA0KMjAwOSxDSE4sTkwsaGlsbGtvMDEsNDc1MDAwDQoyMDA5LENITixOTCxtYXJzaHNlMDEsNDUwMDAwDQoyMDA5LENITixOTCxmb250ZW1pMDEsNDMwMDAwDQoyMDA5LENITixOTCxndXptYWFuMDEsNDIxNTAwDQoyMDA5LENITixOTCxob2ZmcG1pMDEsNDA3NTAwDQoyMDA5LENITixOTCxwYXR0b2RhMDEsNDAwMDAwDQoyMDA5LENJTixOTCxoYXJhbmFhMDEsMTQwMDAwMDANCjIwMDksQ0lOLE5MLGNvcmRlZnIwMSwxMjEyNTAwMA0KMjAwOSxDSU4sTkwsYXJyb3licjAxLDEwMTI1MDAwDQoyMDA5LENJTixOTCxoZXJuYXJhMDIsODUwMDAwMA0KMjAwOSxDSU4sTkwsZ29uemFhbDAyLDUzNzUwMDANCjIwMDksQ0lOLE5MLHBoaWxsYnIwMSw1MTg3NTAwDQoyMDA5LENJTixOTCx3ZWF0aGRhMDEsMzUwMDAwMA0KMjAwOSxDSU4sTkwsZW5jYXJlZDAxLDI0MjUwMDANCjIwMDksQ0lOLE5MLHRhdmVyd2kwMSwyMjUwMDAwDQoyMDA5LENJTixOTCxoYWlyc2plMDIsMjAwMDAwMA0KMjAwOSxDSU4sTkwscmhvZGVhcjAxLDIwMDAwMDANCjIwMDksQ0lOLE5MLGxpbmNvbWkwMSwxNTAwMDAwDQoyMDA5LENJTixOTCx2b2xxdWVkMDEsNDQwMDAwDQoyMDA5LENJTixOTCx2b3R0b2pvMDEsNDM3NTAwDQoyMDA5LENJTixOTCxidXJ0b2phMDEsNDIwMDAwDQoyMDA5LENJTixOTCxvd2luZ21pMDEsNDIwMDAwDQoyMDA5LENJTixOTCxjdWV0b2pvMDEsNDE4MDAwDQoyMDA5LENJTixOTCxtYXNzZW5pMDEsNDE4MDAwDQoyMDA5LENJTixOTCxicnVjZWphMDEsNDE3NTAwDQoyMDA5LENJTixOTCxkaWNrZWNoMDEsNDAwMDAwDQoyMDA5LENJTixOTCxoYW5pZ3J5MDEsNDAwMDAwDQoyMDA5LENJTixOTCxoZXJyZWRhMDEsNDAwMDAwDQoyMDA5LENJTixOTCxqYW5pc3BhMDEsNDAwMDAwDQoyMDA5LENPTCxOTCxoZWx0b3RvMDEsMTY2MDAwMDANCjIwMDksQ09MLE5MLG1hcnF1amEwMSw5ODc1MDAwDQoyMDA5LENPTCxOTCxjb29rYWEwMSw5Mzc1MDAwDQoyMDA5LENPTCxOTCxhdGtpbmdhMDEsNzA1MDAwMA0KMjAwOSxDT0wsTkwsaGF3cGVicjAxLDU1MDAwMDANCjIwMDksQ09MLE5MLHN0cmVlaHUwMSw0NTAwMDAwDQoyMDA5LENPTCxOTCxmcmFuY2plMDEsMzc1MDAwMA0KMjAwOSxDT0wsTkwsdG9ycmV5bzAxLDM3NTAwMDANCjIwMDksQ09MLE5MLGRlbGFyam8wMSwyMDAwMDAwDQoyMDA5LENPTCxOTCxlbWJyZWFsMDEsMjAwMDAwMA0KMjAwOSxDT0wsTkwsYmFybWVjbDAxLDE2MjUwMDANCjIwMDksQ09MLE5MLGJ1Y2hodGEwMSwxMDU1MDAwDQoyMDA5LENPTCxOTCx0dWxvd3RyMDEsMTAwMDAwMA0KMjAwOSxDT0wsTkwsZ3JpbGxqYTAxLDgwMDAwMA0KMjAwOSxDT0wsTkwsY29ycGFtYTAxLDc1MDAwMA0KMjAwOSxDT0wsTkwsamltZW51YjAxLDc1MDAwMA0KMjAwOSxDT0wsTkwscnVzY2hnbDAxLDc1MDAwMA0KMjAwOSxDT0wsTkwsYmFrZXJqZTAzLDQxNTAwMA0KMjAwOSxDT0wsTkwsaWFubmVjaDAxLDQxNTAwMA0KMjAwOSxDT0wsTkwsc3BpbGJyeTAxLDQxNTAwMA0KMjAwOSxDT0wsTkwscXVpbnRvbTAxLDQwODAwMA0KMjAwOSxDT0wsTkwsc3BlaWVyeTAxLDQwNzAwMA0KMjAwOSxDT0wsTkwsc3Rld2FpYTAxLDQwNDAwMA0KMjAwOSxDT0wsTkwsc21pdGhzZTAxLDQwMzAwMA0KMjAwOSxDT0wsTkwsbW9yYWxmcjAxLDQwMjAwMA0KMjAwOSxDT0wsTkwsZm93bGVkZTAxLDQwMTAwMA0KMjAwOSxDT0wsTkwsbW9yaWxqdTAxLDQwMTAwMA0KMjAwOSxGTE8sTkwscmFtaXJoYTAxLDU1MDAwMDANCjIwMDksRkxPLE5MLHVnZ2xhZGEwMSw1MzUwMDAwDQoyMDA5LEZMTyxOTCxjYW50dWpvMDEsMzUwMDAwMA0KMjAwOSxGTE8sTkwsbWlsbGVhbjAxLDI0NjI1MDANCjIwMDksRkxPLE5MLG5vbGFzcmkwMSwyNDAwMDAwDQoyMDA5LEZMTyxOTCxoZXJtaWplMDEsMjI1MDAwMA0KMjAwOSxGTE8sTkwscm9zc2NvMDEsMjIyNTAwMA0KMjAwOSxGTE8sTkwsZ2xvYWRybzAxLDE5MDAwMDANCjIwMDksRkxPLE5MLGpvaG5zam8wOSwxNDAwMDAwDQoyMDA5LEZMTyxOTCxhbWV6YWFsMDEsMTMwMDAwMA0KMjAwOSxGTE8sTkwsaGVsbXN3ZTAxLDk1MDAwMA0KMjAwOSxGTE8sTkwscHJvY3RzYzAxLDc1MDAwMA0KMjAwOSxGTE8sTkwsa2Vuc2lsbzAxLDY2MDAwMA0KMjAwOSxGTE8sTkwsY2FsZXJraTAxLDUwMDAwMA0KMjAwOSxGTE8sTkwscGF1bGlybzAxLDQ0MDAwMA0KMjAwOSxGTE8sTkwsZ29uemFhbjAxLDQyMDAwMA0KMjAwOSxGTE8sTkwsbnVuZXpsZTAxLDQxMjUwMA0KMjAwOSxGTE8sTkwsbGluZHNtYTAxLDQxMDAwMA0KMjAwOSxGTE8sTkwscGludG9yZTAxLDQwNDAwMA0KMjAwOSxGTE8sTkwsYmFrZXJqbzAxLDQwMDAwMA0KMjAwOSxGTE8sTkwsYm9uaWZlbTAxLDQwMDAwMA0KMjAwOSxGTE8sTkwsY2Fycm9icjAxLDQwMDAwMA0KMjAwOSxGTE8sTkwsbWF5YmljYTAxLDQwMDAwMA0KMjAwOSxGTE8sTkwsbWV5ZXJkYTAyLDQwMDAwMA0KMjAwOSxGTE8sTkwscGVubmhhMDEsNDAwMDAwDQoyMDA5LEZMTyxOTCxzYW5jaGFuMDEsNDAwMDAwDQoyMDA5LEZMTyxOTCx2YW5kZXJpMDEsNDAwMDAwDQoyMDA5LEZMTyxOTCx2b2xzdGNoMDEsNDAwMDAwDQoyMDA5LEhPVSxOTCxsZWVjYTAxLDE5MDAwMDAwDQoyMDA5LEhPVSxOTCx0ZWphZG1pMDEsMTQ4MTE0MTQNCjIwMDksSE9VLE5MLGJlcmttbGEwMSwxNDUwMDAwMA0KMjAwOSxIT1UsTkwsb3N3YWxybzAxLDE0MDAwMDAwDQoyMDA5LEhPVSxOTCx2YWx2ZWpvMDEsODAwMDAwMA0KMjAwOSxIT1UsTkwsbWF0c3VrYTAxLDU1MDAwMDANCjIwMDksSE9VLE5MLGhhd2tpbGEwMSwzNTAwMDAwDQoyMDA5LEhPVSxOTCxyb2RyaXdhMDEsMjYwMDAwMA0KMjAwOSxIT1UsTkwsYnJvY2FkbzAxLDI1MDAwMDANCjIwMDksSE9VLE5MLG1vZWhsYnIwMSwyMzAwMDAwDQoyMDA5LEhPVSxOTCxoYW1wdG1pMDEsMjAwMDAwMA0KMjAwOSxIT1UsTkwsZXJzdGFkYTAxLDE3NTAwMDANCjIwMDksSE9VLE5MLGdlYXJ5Z2UwMSwxNzAwMDAwDQoyMDA5LEhPVSxOTCxiYWNrZWJyMDEsMTU1MDAwMA0KMjAwOSxIT1UsTkwscm9kcmlpdjAxLDE1MDAwMDANCjIwMDksSE9VLE5MLGJsdW1nZTAxLDEyNTAwMDANCjIwMDksSE9VLE5MLGJ5cmRhdGkwMSwxMDAwMDAwDQoyMDA5LEhPVSxOTCxib29uZWFhMDEsNzUwMDAwDQoyMDA5LEhPVSxOTCxtaWNoYWphMDEsNzUwMDAwDQoyMDA5LEhPVSxOTCxvcnRpenJ1MDEsNzUwMDAwDQoyMDA5LEhPVSxOTCxxdWludGh1MDEsNjEwMDAwDQoyMDA5LEhPVSxOTCxzbWl0aGphMDUsNTAwMDAwDQoyMDA5LEhPVSxOTCxzYW1wc2NoMDEsNDQ5MDAwDQoyMDA5LEhPVSxOTCxwZW5jZWh1MDEsNDM5MDAwDQoyMDA5LEhPVSxOTCxib3Vybm1pMDEsNDM0NTAwDQoyMDA5LEhPVSxOTCxrZXBwaWplMDEsNDI3NTAwDQoyMDA5LEhPVSxOTCx3cmlnaHdlMDEsNDI1MDAwDQoyMDA5LExBTixOTCxyYW1pcm1hMDIsMjM4NTQ0OTQNCjIwMDksTEFOLE5MLHNjaG1pamEwMSwxNTIxNzQwMQ0KMjAwOSxMQU4sTkwsa3Vyb2RoaTAxLDEyNDMzMzMzDQoyMDA5LExBTixOTCxwaWVycmp1MDEsMTAwMDAwMDANCjIwMDksTEFOLE5MLGZ1cmNhcmEwMSw3NTAwMDAwDQoyMDA5LExBTixOTCxibGFrZWNhMDEsNTAwMDAwMA0KMjAwOSxMQU4sTkwsd29sZnJhMDIsNDk1NjIzNw0KMjAwOSxMQU4sTkwsbWFydGlydTAxLDM5MDAwMDANCjIwMDksTEFOLE5MLGh1ZHNvb3IwMSwzMzY0ODc3DQoyMDA5LExBTixOTCxldGhpZWFuMDEsMzEwMDAwMA0KMjAwOSxMQU4sTkwsbW90YWd1MDEsMjM1MDAwMA0KMjAwOSxMQU4sTkwsYnJveHRqbzAxLDE4MjUwMDANCjIwMDksTEFOLE5MLGxvcmV0bWEwMSwxMjUwMDAwDQoyMDA5LExBTixOTCxhdXNtdWJyMDEsMTAwMDAwMA0KMjAwOSxMQU4sTkwsYmlsbGljaDAxLDQ3NTAwMA0KMjAwOSxMQU4sTkwsa2VtcG1hMDEsNDY3MDAwDQoyMDA5LExBTixOTCxsb25leWphMDEsNDY1MDAwDQoyMDA5LExBTixOTCxrdW9obzAxLDQzNzAwMA0KMjAwOSxMQU4sTkwseW91bmdkZTA0LDQwNjAwMA0KMjAwOSxMQU4sTkwsZGV3aXRibDAxLDQwNTAwMA0KMjAwOSxMQU4sTkwsa2Vyc2hjbDAxLDQwNDAwMA0KMjAwOSxMQU4sTkwsd2FkZWNvMDEsNDAyNTAwDQoyMDA5LExBTixOTCx0cm9uY3JhMDEsNDAxMDAwDQoyMDA5LExBTixOTCxtY2RvbmphMDMsNDAwNzUwDQoyMDA5LExBTixOTCx2YXJnYWNsMDEsNDAwMDAwDQoyMDA5LE1JTCxOTCxzdXBwYWplMDEsMTI3NTAwMDANCjIwMDksTUlMLE5MLGNhbWVybWkwMSwxMDAwMDAwMA0KMjAwOSxNSUwsTkwsZmllbGRwcjAxLDcwMDAwMDANCjIwMDksTUlMLE5MLGhhbGxiaTAzLDY5MjUwMDANCjIwMDksTUlMLE5MLGhvZmZtdHIwMSw2MDAwMDAwDQoyMDA5LE1JTCxOTCxrZW5kYWphMDEsNTAwMDAwMA0KMjAwOSxNSUwsTkwsbG9vcGVicjAxLDQ3NTAwMDANCjIwMDksTUlMLE5MLGhhcmR5amowMSw0NjUwMDAwDQoyMDA5LE1JTCxOTCxyaXNrZWRhMDEsNDI1MDAwMA0KMjAwOSxNSUwsTkwsYnVzaGRhMDEsNDAwMDAwMA0KMjAwOSxNSUwsTkwsaGFydGNvMDEsMzI1MDAwMA0KMjAwOSxNSUwsTkwsd2Vla3NyaTAxLDI0NTAwMDANCjIwMDksTUlMLE5MLG1jY2x1c2UwMSwxNjYyNTAwDQoyMDA5LE1JTCxOTCxicmF1bnJ5MDIsMTAzMjUwMA0KMjAwOSxNSUwsTkwsY291bnNjcjAxLDEwMDAwMDANCjIwMDksTUlMLE5MLGp1bGlvam8wMSw5NTAwMDANCjIwMDksTUlMLE5MLGNvZmZldG8wMSw4MDAwMDINCjIwMDksTUlMLE5MLHZpbGxhY2EwMSw0NDcwMDANCjIwMDksTUlMLE5MLHBhcnJhbWEwMSw0MjYwMDANCjIwMDksTUlMLE5MLHJpdmVybWkwMiw0MTUwMDANCjIwMDksTUlMLE5MLGdhbGxheW8wMSw0MTQwMDANCjIwMDksTUlMLE5MLHN0ZXR0bWkwMSw0MDc1MDANCjIwMDksTUlMLE5MLGRpZmVsbWEwMSw0MDMwMDANCjIwMDksTUlMLE5MLGR1ZmZ5Y2gwMSw0MDAwMDANCjIwMDksTUlMLE5MLG1jZ2VoY2EwMSw0MDAwMDANCjIwMDksTUlMLE5MLG5lbHNvYnIwMiw0MDAwMDANCjIwMDksTllOLE5MLGJlbHRyY2EwMSwxOTI0MzY4Mg0KMjAwOSxOWU4sTkwsc2FudGFqbzAxLDE4ODc2MTM5DQoyMDA5LE5ZTixOTCxzaGVmZmdhMDEsMTQwMDAwMDANCjIwMDksTllOLE5MLGRlbGdhY2EwMSwxMjAwMDAwMA0KMjAwOSxOWU4sTkwscGVyZXpvbDAxLDEyMDAwMDAwDQoyMDA5LE5ZTixOTCx3YWduZWJpMDIsMTA1MDAwMDANCjIwMDksTllOLE5MLHJvZHJpZnIwMyw5MTY2NjY2DQoyMDA5LE5ZTixOTCx3cmlnaGRhMDMsNzc1MDAwMA0KMjAwOSxOWU4sTkwsY2FzdGlsdTAxLDYyNTAwMDANCjIwMDksTllOLE5MLHJleWVzam8wMSw2MTI1MDAwDQoyMDA5LE5ZTixOTCxwdXR6amowMSw2MDAwMDAwDQoyMDA5LE5ZTixOTCxzY2huZWJyMDEsNDkwMDAwMA0KMjAwOSxOWU4sTkwsY2h1cmNyeTAxLDI4MDAwMDANCjIwMDksTllOLE5MLGNhc3RycmEwMSwyNjI1MDAwDQoyMDA5LE5ZTixOTCxtYWluZWpvMDEsMjYwMDAwMA0KMjAwOSxOWU4sTkwscmVkZGl0aTAxLDIyNTAwMDANCjIwMDksTllOLE5MLHBlbGZybWkwMSwyMjM3NTAwDQoyMDA5LE5ZTixOTCxjb3JhYWwwMSwyMDAwMDAwDQoyMDA5LE5ZTixOTCx0YXRpc2ZlMDEsMTcwMDAwMA0KMjAwOSxOWU4sTkwsZmVsaWNwZTAxLDE2MTI1MDANCjIwMDksTllOLE5MLGFuZGVybWEwMiwxMTUwMDAwDQoyMDA5LE5ZTixOTCxyZWVkamUwMyw5MjUwMDANCjIwMDksTllOLE5MLHBhZ2FuYW4wMSw1NzUwMDANCjIwMDksTllOLE5MLGdyZWVuc2UwMSw0NzEwMDANCjIwMDksTllOLE5MLHN0b2tlYnIwMSw0MDk1MDANCjIwMDksTllOLE5MLG9kYXlkYTAxLDQwNjAwMA0KMjAwOSxOWU4sTkwsbXVycGhkYTA4LDQwMTAwMA0KMjAwOSxOWU4sTkwscGFybmVibzAxLDQwMDAwMA0KMjAwOSxQSEksTkwsaG93YXJyeTAxLDE1MDAwMDAwDQoyMDA5LFBISSxOTCxteWVyc2JyMDEsMTIwODMzMzMNCjIwMDksUEhJLE5MLGxpZGdlYnIwMSwxMjAwMDAwMA0KMjAwOSxQSEksTkwsdXRsZXljaDAxLDExMjg1NzE0DQoyMDA5LFBISSxOTCxyb2xsaWppMDEsODUwMDAwMA0KMjAwOSxQSEksTkwsaWJhbmVyYTAxLDcxNjY2NjYNCjIwMDksUEhJLE5MLG1veWVyamEwMSw2NTAwMDAwDQoyMDA5LFBISSxOTCxibGFudGpvMDEsNTQ3NTAwMA0KMjAwOSxQSEksTkwsZmVsaXpwZTAxLDUwMDAwMDANCjIwMDksUEhJLE5MLGhhbWVsY28wMSw0MzUwMDAwDQoyMDA5LFBISSxOTCxyb21lcmpjMDEsNDI1MDAwMA0KMjAwOSxQSEksTkwsdmljdG9zaDAxLDMxMjUwMDANCjIwMDksUEhJLE5MLHBhcmtjaDAxLDI1MDAwMDANCjIwMDksUEhJLE5MLHdlcnRoamEwMSwyNTAwMDAwDQoyMDA5LFBISSxOTCxtYWRzb3J5MDEsMjMzMzMzMw0KMjAwOSxQSEksTkwsZXlyZXNjMDEsMjAwMDAwMA0KMjAwOSxQSEksTkwsZHVyYmljaDAxLDE2MzUwMDANCjIwMDksUEhJLE5MLHN0YWlybWEwMSwxNjI1MDAwDQoyMDA5LFBISSxOTCxkb2Jic2dyMDEsMTE1MDAwMA0KMjAwOSxQSEksTkwsdGFzY2hqYTAxLDgzNTAwMA0KMjAwOSxQSEksTkwsYnJ1bnRlcjAxLDgwMDAwMA0KMjAwOSxQSEksTkwsY29uZHJjbDAxLDY1MDAwMA0KMjAwOSxQSEksTkwsY2Fpcm9taTAxLDUwMDAwMA0KMjAwOSxQSEksTkwscnVpemNhMDEsNDc1MDAwDQoyMDA5LFBISSxOTCxjb3N0ZWNoMDEsNDYwMDAwDQoyMDA5LFBISSxOTCxoYXBwamEwMSw0MDUwMDANCjIwMDksUEhJLE5MLHphZ3VybWkwMSw0MDAwMDANCjIwMDksUElULE5MLHdpbHNvamEwMiw3NDAwMDAwDQoyMDA5LFBJVCxOTCxsYXJvY2FkMDEsNzA1MDAwMA0KMjAwOSxQSVQsTkwsc2FuY2hmcjAxLDYyNTAwMDANCjIwMDksUElULE5MLHNuZWxsaWEwMSwzMjAwMDAwDQoyMDA5LFBJVCxOTCxtYWhvbHBhMDEsMjUwMDAwMA0KMjAwOSxQSVQsTkwsbWNsb3VuYTAxLDI1MDAwMDANCjIwMDksUElULE5MLGNhcHBzbWEwMSwyNDI1MDAwDQoyMDA5LFBJVCxOTCxncmFib2pvMDIsMjMwMDAwMA0KMjAwOSxQSVQsTkwsZHVrZXphMDEsMjIwMDAwMA0KMjAwOSxQSVQsTkwsZG91bWlyeTAxLDIxNTAwMDANCjIwMDksUElULE5MLHZhenF1cmEwMSwxODc1MDAwDQoyMDA5LFBJVCxOTCxoaW5za2VyMDEsMTUwMDAwMA0KMjAwOSxQSVQsTkwseWF0ZXN0eTAxLDEzMDAwMDANCjIwMDksUElULE5MLGhhbnNlY3IwMSw4MjUwMDANCjIwMDksUElULE5MLG1vbnJvY3IwMSw3NTAwMDANCjIwMDksUElULE5MLG1vc3NicjAxLDQxNDUwMA0KMjAwOSxQSVQsTkwsbGFyb2NhbjAxLDQxMzUwMA0KMjAwOSxQSVQsTkwsb2hsZW5ybzAxLDQxMzUwMA0KMjAwOSxQSVQsTkwsbW9yZ2FueTAxLDQxMTUwMA0KMjAwOSxQSVQsTkwsYnVybmVzZTAxLDQwODUwMA0KMjAwOSxQSVQsTkwsY2hhdmVqZTAxLDQwMjAwMA0KMjAwOSxQSVQsTkwsY3J1emx1MDEsNDAxNTAwDQoyMDA5LFBJVCxOTCxkdW1hdHBoMDEsNDAxNTAwDQoyMDA5LFBJVCxOTCxrYXJzdGplMDEsNDAxNTAwDQoyMDA5LFBJVCxOTCxqYXJhbWphMDEsNDAwMDAwDQoyMDA5LFBJVCxOTCx2ZWFsZG8wMSw0MDAwMDANCjIwMDksU0ROLE5MLHBlYXZ5amEwMSwxMTAwMDAwMA0KMjAwOSxTRE4sTkwsZ2lsZXNicjAyLDkwMDAwMDANCjIwMDksU0ROLE5MLHlvdW5nY2gwMyw0NjI1MDAwDQoyMDA5LFNETixOTCxnb256YWFkMDEsMzEyNTAwMA0KMjAwOSxTRE4sTkwsZ2VydXRqbzAxLDE3NzUwMDANCjIwMDksU0ROLE5MLHNhbmNoZHUwMSwxNjg3NTAwDQoyMDA5LFNETixOTCxiZWxsaGUwMSwxMjU1MDAwDQoyMDA5LFNETixOTCxoYWlyc3NjMDEsMTI1MDAwMA0KMjAwOSxTRE4sTkwsZWNrc3RkYTAxLDg1MDAwMA0KMjAwOSxTRE4sTkwsYmxhbmNoZTAxLDc1MDAwMA0KMjAwOSxTRE4sTkwsY29ycmVrZTAxLDc1MDAwMA0KMjAwOSxTRE4sTkwsZmxveWRjbDAxLDc1MDAwMA0KMjAwOSxTRE4sTkwscm9kcmlsdTAxLDY3NTAwMA0KMjAwOSxTRE4sTkwsaGlsbHNoMDEsNTAwMDAwDQoyMDA5LFNETixOTCxrb3V6bWtlMDEsNDMyNDAwDQoyMDA5LFNETixOTCxtZXJlZGNsMDEsNDMwOTAwDQoyMDA5LFNETixOTCxiYWVrY2gwMSw0Mjk5MDANCjIwMDksU0ROLE5MLGFkYW1zbWkwMyw0MTQ4MDANCjIwMDksU0ROLE5MLGhlYWRsY2gwMSw0MTE1MDANCjIwMDksU0ROLE5MLG11amljZWQwMSw0MTAwMDANCjIwMDksU0ROLE5MLGdvbnphZWQwMiw0MDczMDANCjIwMDksU0ROLE5MLGh1bmRsbmkwMSw0MDQ0MDANCjIwMDksU0ROLE5MLGNhYnJlZXYwMSw0MDAwMDANCjIwMDksU0ROLE5MLGRlbGFjZXUwMSw0MDAwMDANCjIwMDksU0ROLE5MLGdyZWdlbHUwMSw0MDAwMDANCjIwMDksU0ROLE5MLG1vcmVuZWQwMSw0MDAwMDANCjIwMDksU0ROLE5MLHNpbHZhd2EwMSw0MDAwMDANCjIwMDksU0ZOLE5MLHppdG9iYTAxLDE4NTAwMDAwDQoyMDA5LFNGTixOTCxyb3dhbmFhMDEsOTYwMDAwMA0KMjAwOSxTRk4sTkwsd2lubnJhMDEsOTYwMDAwMA0KMjAwOSxTRk4sTkwsam9obnNyYTA1LDgwMDAwMDANCjIwMDksU0ZOLE5MLHJlbnRlZWQwMSw4MDAwMDAwDQoyMDA5LFNGTixOTCxtb2xpbmJlMDEsNjUwMDAwMA0KMjAwOSxTRk4sTkwsbG93cnlubzAxLDQ3NTAwMDANCjIwMDksU0ZOLE5MLGFmZmVsamUwMSwzNTAwMDAwDQoyMDA5LFNGTixOTCxjYWlubWEwMSwyOTAwMDAwDQoyMDA5LFNGTixOTCxob3dyeWJvMDEsMjc1MDAwMA0KMjAwOSxTRk4sTkwsYXVyaWxyaTAxLDEwMDAwMDANCjIwMDksU0ZOLE5MLHVyaWJlanUwMSwxMDAwMDAwDQoyMDA5LFNGTixOTCxsaW5jZXRpMDEsNjUwMDAwDQoyMDA5LFNGTixOTCx3aWxzb2JyMDEsNDgwMDAwDQoyMDA5LFNGTixOTCxtZWRkZWJyMDEsNDc1MDAwDQoyMDA5LFNGTixOTCxzYW5jaGpvMDEsNDU1MDAwDQoyMDA5LFNGTixOTCxsZXdpc2ZyMDIsNDQwMDAwDQoyMDA5LFNGTixOTCxtY2RvbmRhMDEsNDEwMDAwDQoyMDA5LFNGTixOTCxidXJyaWVtMDEsNDA0MDAwDQoyMDA5LFNGTixOTCx2ZWxlemV1MDEsNDA0MDAwDQoyMDA5LFNGTixOTCxoaW5zaGFsMDEsNDAxNzUwDQoyMDA5LFNGTixOTCxzYW5kb3BhMDEsNDAxNzUwDQoyMDA5LFNGTixOTCxyb21vc2UwMSw0MDE3MDANCjIwMDksU0ZOLE5MLHNjaGllbmEwMSw0MDEyNTANCjIwMDksU0ZOLE5MLGlzaGlrdHIwMSw0MDEwMDANCjIwMDksU0ZOLE5MLHZhbGRlbWUwMSw0MDEwMDANCjIwMDksU0ZOLE5MLG1hcnRpam8wNyw0MDAwMDANCjIwMDksU0ZOLE5MLHRvcnJlYW4wMiw0MDAwMDANCjIwMDksU0xOLE5MLHB1am9sYWwwMSwxNDQyNzMyNg0KMjAwOSxTTE4sTkwsY2FycGVjaDAxLDEzMzAyNTgzDQoyMDA5LFNMTixOTCxnbGF1c3RyMDEsMTIxMzcwMDANCjIwMDksU0xOLE5MLHBpbmVpam8wMSw3NTAwMDAwDQoyMDA5LFNMTixOTCxsb2hzZWt5MDEsNzQzNzUwMA0KMjAwOSxTTE4sTkwsZ3JlZW5raDAxLDY1MDAwMDANCjIwMDksU0xOLE5MLHdlbGxldG8wMSw0MDUwMDAwDQoyMDA5LFNMTixOTCxsdWR3aXJ5MDEsMzcwMDAwMA0KMjAwOSxTTE4sTkwsbW9saW55YTAxLDMzMTI1MDANCjIwMDksU0xOLE5MLGFua2llcmkwMSwyODI1MDAwDQoyMDA5LFNMTixOTCx3YWlud2FkMDEsMjc4NzUwMA0KMjAwOSxTTE4sTkwsZnJhbmtyeTAxLDI1MDAwMDANCjIwMDksU0xOLE5MLHJleWVzZGUwMSwxMDAwMDAwDQoyMDA5LFNMTixOTCxsYXJ1ZWphMDEsOTUwMDAwDQoyMDA5LFNMTixOTCxkdW5jYWNoMDEsODI1MDAwDQoyMDA5LFNMTixOTCx0aG9tcGJyMDEsNjUwMDAwDQoyMDA5LFNMTixOTCxtaWxsZXRyMDIsNTAwMDAwDQoyMDA5LFNMTixOTCx0aHVyc2pvMDEsNDc1MDAwDQoyMDA5LFNMTixOTCxzY2h1bXNrMDEsNDMwMDAwDQoyMDA5LFNMTixOTCxtY2NsZWt5MDEsNDExMDAwDQoyMDA5LFNMTixOTCxraW5uZWpvMDEsNDA1MDAwDQoyMDA5LFNMTixOTCxyeWFuYnIwMSw0MDMwMDANCjIwMDksU0xOLE5MLGJhcmRlYnIwMSw0MDAwMDANCjIwMDksU0xOLE5MLGZyZWVzZGEwMSw0MDAwMDANCjIwMDksU0xOLE5MLGdhcmNpamEwMiw0MDAwMDANCjIwMDksU0xOLE5MLG1vdHRlamEwMSw0MDAwMDANCjIwMDksU0xOLE5MLHJhc211Y28wMSw0MDAwMDANCjIwMDksV0FTLE5MLGR1bm5hZDAxLDgwMDAwMDANCjIwMDksV0FTLE5MLGd1em1hY3IwMSw4MDAwMDAwDQoyMDA5LFdBUyxOTCxrZWFybmF1MDEsODAwMDAwMA0KMjAwOSxXQVMsTkwsam9obnNuaTAxLDU1MDAwMDANCjIwMDksV0FTLE5MLHlvdW5nZG0wMSw1MDAwMDAwDQoyMDA5LFdBUyxOTCx6aW1tZXJ5MDEsMzMyNTAwMA0KMjAwOSxXQVMsTkwsd2lsbGlqbzAzLDI5NTAwMDANCjIwMDksV0FTLE5MLG9sc2Vuc2MwMSwyODAwMDAwDQoyMDA5LFdBUyxOTCxjYWJyZWRhMDEsMjYwMDAwMA0KMjAwOSxXQVMsTkwsYmVpbWVqbzAxLDIwMDAwMDANCjIwMDksV0FTLE5MLGJlbGxpcm8wMSwxOTAwMDAwDQoyMDA5LFdBUyxOTCxiYXJkam8wMSwxNjAwMDAwDQoyMDA5LFdBUyxOTCxoYXJyaXdpMDEsMTUwMDAwMA0KMjAwOSxXQVMsTkwsbGVkZXp3aTAxLDc1MDAwMA0KMjAwOSxXQVMsTkwsdGF2YXJqdTAxLDUwMDAwMA0KMjAwOSxXQVMsTkwscml2ZXJzYTAxLDQ3NTAwMA0KMjAwOSxXQVMsTkwsbWlsbGVsYTAyLDQ1MjAwMA0KMjAwOSxXQVMsTkwsbmlldmV3aTAxLDQ0NTAwMA0KMjAwOSxXQVMsTkwsY2hpY29tYTAxLDQzMTAwMA0KMjAwOSxXQVMsTkwsc2hlbGxzdDAxLDQyNTAwMA0KMjAwOSxXQVMsTkwsbGFubmFqbzAxLDQyNDAwMA0KMjAwOSxXQVMsTkwsaGFucmFqbzAxLDQyMDAwMA0KMjAwOSxXQVMsTkwsZHVrZXNlbDAxLDQxNTUwMA0KMjAwOSxXQVMsTkwsZmxvcmVqZTAyLDQxNTUwMA0KMjAwOSxXQVMsTkwsZ29uemFhbDAzLDQwMDAwMA0KMjAwOSxXQVMsTkwsaGVybmFhbjAxLDQwMDAwMA0KMjAwOSxXQVMsTkwsaGluY2ttaTAxLDQwMDAwMA0KMjAwOSxXQVMsTkwsbWFydGlzaDAxLDQwMDAwMA0KMjAxMCxCQUwsQUwsbWlsbHdrZTAxLDEyMDAwMDAwDQoyMDEwLEJBTCxBTCxyb2JlcmJyMDEsMTAwMDAwMDANCjIwMTAsQkFMLEFMLGx1Z29qdTAxLDkyNTAwMDANCjIwMTAsQkFMLEFMLG1hcmthbmkwMSw3MTAwMDAwDQoyMDEwLEJBTCxBTCxnb256YW1pMDIsNjAwMDAwMA0KMjAxMCxCQUwsQUwsdGVqYWRtaTAxLDYwMDAwMDANCjIwMTAsQkFMLEFMLHVlaGFya28wMSw1MDAwMDAwDQoyMDEwLEJBTCxBTCxzY290dGx1MDEsNDA1MDAwMA0KMjAxMCxCQUwsQUwsYXRraW5nYTAxLDQwMDAwMDANCjIwMTAsQkFMLEFMLHdpZ2dpdHkwMSwzNTAwMDAwDQoyMDEwLEJBTCxBTCxndXRocmplMDEsMzAwMDAwMA0KMjAxMCxCQUwsQUwsaXp0dXJjZTAxLDI2MDAwMDANCjIwMTAsQkFMLEFMLG9obWFud2kwMSwxMzUwMDAwDQoyMDEwLEJBTCxBTCxtYXR1c2JyMDEsMTMwMDAwMA0KMjAxMCxCQUwsQUwsaGVuZHJtYTAxLDEyMDAwMDANCjIwMTAsQkFMLEFMLG1lcmVkY2wwMSw4NTAwMDANCjIwMTAsQkFMLEFMLGFsYmVybWEwMSw2ODAwMDANCjIwMTAsQkFMLEFMLGpvbmVzYWQwMSw0NjUwMDANCjIwMTAsQkFMLEFMLGpvaG5zamkwNCw0NDAwMDANCjIwMTAsQkFMLEFMLHBpZWZlMDEsNDIwMDAwDQoyMDEwLEJBTCxBTCxiZXJnZWJyMDIsNDA1MDAwDQoyMDEwLEJBTCxBTCxoZXJuYWRhMDEsNDAyNTAwDQoyMDEwLEJBTCxBTCxiZXJrZWphMDEsNDAwMDAwDQoyMDEwLEJBTCxBTCxyZWltb25vMDEsNDAwMDAwDQoyMDEwLEJBTCxBTCx0YXR1bWNyMDEsNDAwMDAwDQoyMDEwLEJBTCxBTCx3aWV0ZW1hMDEsNDAwMDAwDQoyMDEwLEJPUyxBTCxsYWNrZWpvMDEsMTg3MDAwMDANCjIwMTAsQk9TLEFMLGRyZXdqZDAxLDE0MDAwMDAwDQoyMDEwLEJPUyxBTCxvcnRpemRhMDEsMTMwMDAwMDANCjIwMTAsQk9TLEFMLGxvd2VsbWkwMSwxMjUwMDAwMA0KMjAxMCxCT1MsQUwsYmVja2VqbzAyLDEyMTAwMDAwDQoyMDEwLEJPUyxBTCx5b3VrbGtlMDEsOTM3NTAwMA0KMjAxMCxCT1MsQUwscGFwZWxqbzAxLDkzNTAwMDANCjIwMTAsQk9TLEFMLGJlbHRyYWQwMSw5MDAwMDAwDQoyMDEwLEJPUyxBTCxoYWxsYmkwMyw4NTI1MDAwDQoyMDEwLEJPUyxBTCxtYXRzdWRhMDEsODMzMzMzMw0KMjAxMCxCT1MsQUwsY2FtZXJtaTAxLDc3NTAwMDANCjIwMTAsQk9TLEFMLG1hcnRpdmkwMSw3NzAwMDAwDQoyMDEwLEJPUyxBTCxzY3V0YW1hMDEsNTUwMDAwMA0KMjAxMCxCT1MsQUwsbGVzdGVqbzAxLDM3NTAwMDANCjIwMTAsQk9TLEFMLHBlZHJvZHUwMSwzNzUwMDAwDQoyMDEwLEJPUyxBTCx3YWtlZnRpMDEsMzUwMDAwMA0KMjAxMCxCT1MsQUwsaGVybWlqZTAxLDMzNDUwMDANCjIwMTAsQk9TLEFMLHZhcml0amEwMSwzMDAwMDAwDQoyMDEwLEJPUyxBTCxva2FqaWhpMDEsMjc1MDAwMA0KMjAxMCxCT1MsQUwscmFtaXJyYTAyLDExNTUwMDANCjIwMTAsQk9TLEFMLHRhemF3anUwMSwxMTAwMDAwDQoyMDEwLEJPUyxBTCxkZWxjYW1hMDEsOTA1MDAwDQoyMDEwLEJPUyxBTCxib25zZWJvMDEsNjUwMDAwDQoyMDEwLEJPUyxBTCxzY2hvZXNjMDEsNTAwMDAwDQoyMDEwLEJPUyxBTCxlbGxzYmphMDEsNDk2NTAwDQoyMDEwLEJPUyxBTCxidWNoaGNsMDEsNDQzMDAwDQoyMDEwLEJPUyxBTCxsb3dyaWplMDEsNDM0MDAwDQoyMDEwLEJPUyxBTCxhdGNoaXNjMDEsNDIwMDAwDQoyMDEwLEJPUyxBTCxiYXJkZGEwMSw0MTU1MDANCjIwMTAsQ0hBLEFMLHBlYXZ5amEwMSwxNTAwMDAwMA0KMjAxMCxDSEEsQUwsYnVlaHJtYTAxLDE0MDAwMDAwDQoyMDEwLENIQSxBTCxrb25lcnBhMDEsMTIwMDAwMDANCjIwMTAsQ0hBLEFMLHJpb3NhbDAxLDEwMjAwMDAwDQoyMDEwLENIQSxBTCxqZW5rc2JvMDEsNzUwMDAwMA0KMjAxMCxDSEEsQUwscGllcnJqdTAxLDcwMDAwMDANCjIwMTAsQ0hBLEFMLHBpZXJ6YWowMSw2NzUwMDAwDQoyMDEwLENIQSxBTCxsaW5lYnNjMDEsNTAwMDAwMA0KMjAxMCxDSEEsQUwsdGVhaGVtYTAxLDM3NTAwMDANCjIwMTAsQ0hBLEFMLGRhbmtzam8wMSwzNDUwMDAwDQoyMDEwLENIQSxBTCxxdWVudGNhMDEsMzIwMDAwMA0KMjAxMCxDSEEsQUwscHV0empqMDEsMzAwMDAwMA0KMjAxMCxDSEEsQUwsZmxveWRnYTAxLDI3NTAwMDANCjIwMTAsQ0hBLEFMLHRob3JubWEwMSwyMjUwMDAwDQoyMDEwLENIQSxBTCxrb3RzYW1hMDEsMTUwMDAwMA0KMjAxMCxDSEEsQUwsdml6cXVvbTAxLDEzNzUwMDANCjIwMTAsQ0hBLEFMLHJhbWlyYWwwMywxMjI1MDAwDQoyMDEwLENIQSxBTCxwZW5hcmEwMSwxMjAwMDAwDQoyMDEwLENIQSxBTCxnYXJjaWZyMDIsMTAwMDAwMA0KMjAxMCxDSEEsQUwsY2FzdHJyYTAxLDgwMDAwMA0KMjAxMCxDSEEsQUwsam9uZXNhbjAxLDUwMDAwMA0KMjAxMCxDSEEsQUwsYmVja2hnbzAxLDQ0NTAwMA0KMjAxMCxDSEEsQUwsbml4amEwMSw0MjAwMDANCjIwMTAsQ0hBLEFMLHdpbGxpcmEwMSw0MTUwMDANCjIwMTAsQ0hBLEFMLGx1Y3lkbzAxLDQwMDAwMA0KMjAxMCxDSEEsQUwsc2FudG9zZTAxLDQwMDAwMA0KMjAxMCxDTEUsQUwsaGFmbmV0cjAxLDExNTAwMDAwDQoyMDEwLENMRSxBTCx3ZXN0YmphMDEsMTEwMDAwMDANCjIwMTAsQ0xFLEFMLHdvb2RrZTAyLDEwNTAwMDAwDQoyMDEwLENMRSxBTCxzaXplbWdyMDEsNTc2NjY2Ng0KMjAxMCxDTEUsQUwsY2FybW9mYTAxLDUwODc1MDANCjIwMTAsQ0xFLEFMLHBlcmFsamgwMSw0ODUwMDAwDQoyMDEwLENMRSxBTCxicmFueXJ1MDEsMTUwMDAwMA0KMjAxMCxDTEUsQUwsd3JpZ2hqYTAxLDkwMDAwMA0KMjAxMCxDTEUsQUwscmVkbW9taTAxLDg1MDAwMA0KMjAxMCxDTEUsQUwscGVyZXpyYTAxLDc5NTAwMA0KMjAxMCxDTEUsQUwsa2Vhcm5hdTAxLDc1MDAwMA0KMjAxMCxDTEUsQUwsZ3J1ZHptYTAxLDYwMDAwMA0KMjAxMCxDTEUsQUwsY2hvb3NoMDEsNDYxMTAwDQoyMDEwLENMRSxBTCxjYWJyZWFzMDEsNDQ0NjAwDQoyMDEwLENMRSxBTCxzbWl0aGpvMDUsNDI3NTAwDQoyMDEwLENMRSxBTCxtYXN0ZWp1MDEsNDI3MDAwDQoyMDEwLENMRSxBTCxyZXllc2FuMDEsNDI1MDAwDQoyMDEwLENMRSxBTCxwZXJlemNoMDEsNDIzODAwDQoyMDEwLENMRSxBTCxsZXdpc2plMDEsNDIyNDAwDQoyMDEwLENMRSxBTCxsYWZmZWFhMDEsNDIxOTAwDQoyMDEwLENMRSxBTCx2YWxidWx1MDEsNDE0NzAwDQoyMDEwLENMRSxBTCxtYXJ0ZWFuMDEsNDEzNDAwDQoyMDEwLENMRSxBTCxodWZmZGEwMSw0MTA3MDANCjIwMTAsQ0xFLEFMLHNpcHB0bzAxLDQwNzMwMA0KMjAxMCxDTEUsQUwsbGFwb3JtYTAxLDQwMjcwMA0KMjAxMCxDTEUsQUwsbWFyc29sbzAxLDQwMTIwMA0KMjAxMCxDTEUsQUwsYnJhbnRtaTAyLDQwMDgwMA0KMjAxMCxDTEUsQUwsdGFsYm9taTAxLDQwMDcwMA0KMjAxMCxDTEUsQUwsYW1icmloZTAxLDQwMDAwMA0KMjAxMCxERVQsQUwsY2FicmVtaTAxLDIwMDAwMDAwDQoyMDEwLERFVCxBTCxvcmRvbm1hMDEsMTc4MjU5NzYNCjIwMTAsREVULEFMLGd1aWxsY2EwMSwxMzAwMDAwMA0KMjAxMCxERVQsQUwsYm9uZGVqZTAxLDEyNTAwMDAwDQoyMDEwLERFVCxBTCx3aWxsaWRvMDMsMTIwMDAwMDANCjIwMTAsREVULEFMLGRhbW9uam8wMSw4MDAwMDAwDQoyMDEwLERFVCxBTCx2YWx2ZWpvMDEsNjg4NjA1Mg0KMjAxMCxERVQsQUwsdmVybGFqdTAxLDY4NTAwMDANCjIwMTAsREVULEFMLGluZ2VicjAxLDY2MDAwMDANCjIwMTAsREVULEFMLGxhaXJkZ2UwMSwzOTUwMDAwDQoyMDEwLERFVCxBTCxzZWF5Ym8wMSwyNDc1MDAwDQoyMDEwLERFVCxBTCxwb3JjZXJpMDEsMTkyMDAwMA0KMjAxMCxERVQsQUwsZXZlcmVhZDAxLDE1NTAwMDANCjIwMTAsREVULEFMLHNjaGVybWEwMSwxNTAwMDAwDQoyMDEwLERFVCxBTCxzYW50aXJhMDEsMTI1MDAwMA0KMjAxMCxERVQsQUwsdGhvbWFicjAxLDEwMDAwMDANCjIwMTAsREVULEFMLG1pbmVyemEwMSw5NTAwMDANCjIwMTAsREVULEFMLHp1bWF5am8wMSw5MTUwMDANCjIwMTAsREVULEFMLHJhYnVycnkwMSw0MzgwMDANCjIwMTAsREVULEFMLGNva2VwaDAxLDQyNTAwMA0KMjAxMCxERVQsQUwscGVycnlyeTAxLDQwODUwMA0KMjAxMCxERVQsQUwsbmlmdTAxLDQwNzUwMA0KMjAxMCxERVQsQUwsa2VsbHlkbzAxLDQwNTAwMA0KMjAxMCxERVQsQUwsYXZpbGFhbDAxLDQwNDkwMA0KMjAxMCxERVQsQUwsYm9uaW5lZDAxLDQwNDAwMA0KMjAxMCxERVQsQUwsamFja3NhdTAxLDQwMDAwMA0KMjAxMCxERVQsQUwsc2l6ZW1zYzAxLDQwMDAwMA0KMjAxMCxLQ0EsQUwsbWVjaGVnaTAxLDEyNDAwMDAwDQoyMDEwLEtDQSxBTCxndWlsbGpvMDEsMTIwMDAwMDANCjIwMTAsS0NBLEFMLGdyZWluemEwMSw3MjUwMDAwDQoyMDEwLEtDQSxBTCxkZWplc2RhMDEsNDcwMDAwMA0KMjAxMCxLQ0EsQUwsZmFybnNreTAxLDQ1MDAwMDANCjIwMTAsS0NBLEFMLGJldGFueXUwMSwzMzAwMDAwDQoyMDEwLEtDQSxBTCxjcnV6anUwMiwzMjUwMDAwDQoyMDEwLEtDQSxBTCxzb3JpYWpvMDEsMzAwMDAwMA0KMjAxMCxLQ0EsQUwsYW5raWVyaTAxLDI3NTAwMDANCjIwMTAsS0NBLEFMLGJhbm5pYnIwMSwyMzAwMDAwDQoyMDEwLEtDQSxBTCxrZW5kYWphMDEsMjI1MDAwMA0KMjAxMCxLQ0EsQUwsZGF2aWVreTAxLDE4MDAwMDANCjIwMTAsS0NBLEFMLGhvY2hlbHUwMSwxNzYwMDAwDQoyMDEwLEtDQSxBTCxibG9vbXdpMDEsMTcwMDAwMA0KMjAxMCxLQ0EsQUwscG9kc2VzYzAxLDE2NTAwMDANCjIwMTAsS0NBLEFMLGdvcmRvYWwwMSwxMTUwMDAwDQoyMDEwLEtDQSxBTCx0ZWplZHJvMDEsOTUwMDAwDQoyMDEwLEtDQSxBTCxjb2xvbnJvMDEsNjY1MDAwDQoyMDEwLEtDQSxBTCxwYXJyaWpvMDEsNjAwMDAwDQoyMDEwLEtDQSxBTCxidXRsZWJpMDMsNDcwMDAwDQoyMDEwLEtDQSxBTCxjYWxsYWFsMDEsNDYwMDAwDQoyMDEwLEtDQSxBTCxhdmlsZW1pMDEsNDI5MDAwDQoyMDEwLEtDQSxBTCxwZW5hYnIwMSw0MjgwMDANCjIwMTAsS0NBLEFMLGZpZWxkam8wMiw0MjIwMDANCjIwMTAsS0NBLEFMLGdldHpjaDAxLDQxNDUwMA0KMjAxMCxLQ0EsQUwsbWVuZG9sdTAxLDQwNjIxMA0KMjAxMCxLQ0EsQUwsaHVnaGVkdTAxLDQwMDUwMA0KMjAxMCxMQUEsQUwsaHVudGV0bzAxLDE4NTAwMDAwDQoyMDEwLExBQSxBTCxhYnJldWJvMDEsOTAwMDAwMA0KMjAxMCxMQUEsQUwsZnVlbnRicjAxLDkwMDAwMDANCjIwMTAsTEFBLEFMLGthem1pc2MwMSw4MDAwMDAwDQoyMDEwLExBQSxBTCxwaW5laWpvMDEsODAwMDAwMA0KMjAxMCxMQUEsQUwsbWF0c3VoaTAxLDYwMDAwMDANCjIwMTAsTEFBLEFMLHNhbnRhZXIwMSw2MDAwMDAwDQoyMDEwLExBQSxBTCxyb2RuZWZlMDEsNTUwMDAwMA0KMjAxMCxMQUEsQUwsc2hpZWxzYzAxLDUzNTAwMDANCjIwMTAsTEFBLEFMLHdlYXZlamUwMiw0MjY1MDAwDQoyMDEwLExBQSxBTCxyaXZlcmp1MDEsNDI1MDAwMA0KMjAxMCxMQUEsQUwsc2F1bmRqbzAxLDM3MDAwMDANCjIwMTAsTEFBLEFMLG5hcG9sbWkwMSwzNjAwMDAwDQoyMDEwLExBQSxBTCxpenR1cm1hMDEsMjc2NjY2Ng0KMjAxMCxMQUEsQUwsYXliYXJlcjAxLDIwNTAwMDANCjIwMTAsTEFBLEFMLGtlbmRyaG8wMSwxNzUwMDAwDQoyMDEwLExBQSxBTCxtYXRoaWplMDEsMTMwMDAwMA0KMjAxMCxMQUEsQUwsbW9yYWxrZTAxLDEyMDAwMDANCjIwMTAsTEFBLEFMLHdpbGxpcmUwMyw2MjUwMDANCjIwMTAsTEFBLEFMLHN0b2tlYnIwMSw0MzUwMDANCjIwMTAsTEFBLEFMLHBhbG1lbWEwMSw0MjAwMDANCjIwMTAsTEFBLEFMLGJ1bGdlamEwMSw0MTgwMDANCjIwMTAsTEFBLEFMLGplcHNla2UwMSw0MTUwMDANCjIwMTAsTEFBLEFMLHdvb2RicjAxLDQxMDAwMA0KMjAxMCxMQUEsQUwsZXZhbnN0ZTAxLDQwNTAwMA0KMjAxMCxMQUEsQUwsYnVkZGVyeTAxLDQwMjIwMA0KMjAxMCxMQUEsQUwsd2lsc29ibzAyLDQwMjAwMA0KMjAxMCxMQUEsQUwsb3J0ZWdhbjAxLDQwMDAwMA0KMjAxMCxMQUEsQUwscGV0dGljaDAxLDQwMDAwMA0KMjAxMCxNSU4sQUwsbW9ybmVqdTAxLDE1MDAwMDAwDQoyMDEwLE1JTixBTCxtYXVlcmpvMDEsMTI1MDAwMDANCjIwMTAsTUlOLEFMLG5hdGhham8wMSwxMTI1MDAwMA0KMjAxMCxNSU4sQUwsY3VkZHltaTAxLDk0MTY2NjYNCjIwMTAsTUlOLEFMLHBhdmFuY2EwMSw3MDAwMDAwDQoyMDEwLE1JTixBTCxoYXJkeWpqMDEsNTEwMDAwMA0KMjAxMCxNSU4sQUwsaHVkc29vcjAxLDUwMDAwMDANCjIwMTAsTUlOLEFMLGt1YmVsamEwMSw0MTAwMDAwDQoyMDEwLE1JTixBTCxwdW50b25pMDEsNDAwMDAwMA0KMjAxMCxNSU4sQUwsZ3VlcnJtYTAyLDMxNTAwMDANCjIwMTAsTUlOLEFMLGJha2Vyc2MwMiwzMDAwMDAwDQoyMDEwLE1JTixBTCxyYXVjaGpvMDEsMjkwMDAwMA0KMjAxMCxNSU4sQUwseW91bmdkZTAzLDI2MDAwMDANCjIwMTAsTUlOLEFMLGNyYWluamUwMSwyMDAwMDAwDQoyMDEwLE1JTixBTCxsaXJpYWZyMDEsMTYwMDAwMA0KMjAxMCxNSU4sQUwsdGhvbWVqaTAxLDE1MDAwMDANCjIwMTAsTUlOLEFMLGhhcnJpYnIwMSwxNDUwMDAwDQoyMDEwLE1JTixBTCxjb25kcmNsMDEsOTAwMDAwDQoyMDEwLE1JTixBTCxibGFja25pMDEsNzUwMDAwDQoyMDEwLE1JTixBTCxzcGFuZGUwMSw3NTAwMDANCjIwMTAsTUlOLEFMLG5lc2hlcGEwMSw2MjUwMDANCjIwMTAsTUlOLEFMLHNsb3dla2UwMSw0NzAwMDANCjIwMTAsTUlOLEFMLGNhc2lsYWwwMSw0Mzc1MDANCjIwMTAsTUlOLEFMLG1pamFyam8wMSw0MzAwMDANCjIwMTAsTUlOLEFMLGR1ZW5zYnIwMSw0MTc1MDANCjIwMTAsTUlOLEFMLG1vcmFsam8wMiw0MTI1MDANCjIwMTAsTUlOLEFMLGJ1cm5lYWwwMSw0MDAwMDANCjIwMTAsTUlOLEFMLGJ1dGVyZHIwMSw0MDAwMDANCjIwMTAsTllBLEFMLHJvZHJpYWwwMSwzMzAwMDAwMA0KMjAxMCxOWUEsQUwsc2FiYXRjYzAxLDI0Mjg1NzE0DQoyMDEwLE5ZQSxBTCxqZXRlcmRlMDEsMjI2MDAwMDANCjIwMTAsTllBLEFMLHRlaXhlbWEwMSwyMDYyNTAwMA0KMjAxMCxOWUEsQUwsYnVybmVhajAxLDE2NTAwMDAwDQoyMDEwLE5ZQSxBTCxyaXZlcm1hMDEsMTUwMDAwMDANCjIwMTAsTllBLEFMLHBvc2Fkam8wMSwxMzEwMDAwMA0KMjAxMCxOWUEsQUwscGV0dGlhbjAxLDExNzUwMDAwDQoyMDEwLE5ZQSxBTCx2YXpxdWphMDEsMTE1MDAwMDANCjIwMTAsTllBLEFMLGNhbm9ybzAxLDkwMDAwMDANCjIwMTAsTllBLEFMLHN3aXNobmkwMSw2ODUwMDAwDQoyMDEwLE5ZQSxBTCxncmFuZGN1MDEsNTUwMDAwMA0KMjAxMCxOWUEsQUwsam9obnNuaTAxLDU1MDAwMDANCjIwMTAsTllBLEFMLG1hcnRlZGEwMSw0MDAwMDAwDQoyMDEwLE5ZQSxBTCxwYXJrY2gwMSwxMjAwMDAwDQoyMDEwLE5ZQSxBTCx3aW5ucmEwMSwxMTAwMDAwDQoyMDEwLE5ZQSxBTCx0aGFtZW1hMDEsOTAwMDAwDQoyMDEwLE5ZQSxBTCxtaXRyZXNlMDEsODUwMDAwDQoyMDEwLE5ZQSxBTCxjaGFtYmpvMDMsNDg3OTc1DQoyMDEwLE5ZQSxBTCxnYXJkbmJyMDEsNDUyNTAwDQoyMDEwLE5ZQSxBTCxodWdoZXBoMDEsNDQ3MDAwDQoyMDEwLE5ZQSxBTCxhY2V2ZWFsMDEsNDM1NjUwDQoyMDEwLE5ZQSxBTCxyb2JlcmRhMDgsNDI2NjUwDQoyMDEwLE5ZQSxBTCxwZW5hcmEwMiw0MTIxMDANCjIwMTAsTllBLEFMLGNlcnZlZnIwMSw0MTA4MDANCjIwMTAsT0FLLEFMLGNoYXZlZXIwMSwxMjUwMDAwMA0KMjAxMCxPQUssQUwsc2hlZXRiZTAxLDEwMDAwMDAwDQoyMDEwLE9BSyxBTCxlbGxpc21hMDEsNTUwMDAwMA0KMjAxMCxPQUssQUwsY3Jpc3BjbzAxLDUwMDAwMDANCjIwMTAsT0FLLEFMLHRhdmVyd2kwMSwzNjAwMDAwDQoyMDEwLE9BSyxBTCxrb3V6bWtlMDEsMzEwMDAwMA0KMjAxMCxPQUssQUwsd3VlcnRtaTAxLDIyMDAwMDANCjIwMTAsT0FLLEFMLGR1Y2hzanUwMSwxNzUwMDAwDQoyMDEwLE9BSyxBTCxkYXZpc3JhMDEsMTM1MDAwMA0KMjAxMCxPQUssQUwsZ3Jvc3NnYTAxLDc1MDAwMA0KMjAxMCxPQUssQUwsZ2F1ZGljaDAxLDcwMDAwMA0KMjAxMCxPQUssQUwsZGV2aW5qbzAxLDU1NzUwMA0KMjAxMCxPQUssQUwsYmFpbGVhbjAxLDQzNTAwMA0KMjAxMCxPQUssQUwscmFtaXJlZDAxLDQyNzQwMA0KMjAxMCxPQUssQUwsYnJlc2xjcjAxLDQyNTAwMA0KMjAxMCxPQUssQUwsYnJhZGVkYTAxLDQyMDAwMA0KMjAxMCxPQUssQUwsc3V6dWtrdTAxLDQyMDAwMA0KMjAxMCxPQUssQUwsc3dlZW5yeTAxLDQyMDAwMA0KMjAxMCxPQUssQUwsYW5kZXJicjA0LDQxMDAwMA0KMjAxMCxPQUssQUwsYmFydG9kYTAyLDQxMDAwMA0KMjAxMCxPQUssQUwsYnVja3RyMDEsNDEwMDAwDQoyMDEwLE9BSyxBTCxjYWhpbHRyMDEsNDEwMDAwDQoyMDEwLE9BSyxBTCxvdXRtYWpvMDEsNDEwMDAwDQoyMDEwLE9BSyxBTCxyb3NhbGFkMDEsNDEwMDAwDQoyMDEwLE9BSyxBTCx6aWVnbGJyMDEsNDEwMDAwDQoyMDEwLE9BSyxBTCxibGV2aWplMDEsNDA1MDAwDQoyMDEwLE9BSyxBTCxmb3hqYTAyLDQwNTAwMA0KMjAxMCxPQUssQUwsZ29uemFnaTAxLDQwNTAwMA0KMjAxMCxPQUssQUwsbWVsb2FqbzAxLDQwNTAwMA0KMjAxMCxPQUssQUwscGF0dGVlcjAxLDQwNTAwMA0KMjAxMCxPQUssQUwscGVubmljbDAxLDQwNTAwMA0KMjAxMCxPQUssQUwscm9zc3R5MDEsNDAwMDAwDQoyMDEwLFNFQSxBTCxzdXp1a2ljMDEsMTgwMDAwMDANCjIwMTAsU0VBLEFMLGJyYWRsbWkwMSwxMTAwMDAwMA0KMjAxMCxTRUEsQUwsbGVlY2wwMiw5MDAwMDAwDQoyMDEwLFNFQSxBTCxmaWdnaWNoMDEsODUwMDAwMA0KMjAxMCxTRUEsQUwsaGVybmFmZTAyLDcyMDAwMDANCjIwMTAsU0VBLEFMLHdpbHNvamEwMiw1MDAwMDAwDQoyMDEwLFNFQSxBTCxzbmVsbGlhMDEsNDQ1MDAwMA0KMjAxMCxTRUEsQUwsa290Y2hjYTAxLDM1MTc1MDANCjIwMTAsU0VBLEFMLGxvcGV6am8wMSwzMDAwMDAwDQoyMDEwLFNFQSxBTCxhYXJkc2RhMDEsMjc1MDAwMA0KMjAxMCxTRUEsQUwsZ3JpZmZrZTAyLDIzNTAwMDANCjIwMTAsU0VBLEFMLGd1dGllZnIwMSwyMzEyNTAwDQoyMDEwLFNFQSxBTCxiZWRhcmVyMDEsMTUwMDAwMA0KMjAxMCxTRUEsQUwsbG93ZW1hMDEsMTE1MDAwMA0KMjAxMCxTRUEsQUwsbGVhZ3VicjAxLDEwODc1MDANCjIwMTAsU0VBLEFMLHN3ZWVubWkwMSw2NTAwMDANCjIwMTAsU0VBLEFMLGxhbmdlcnkwMSw1MjUwMDANCjIwMTAsU0VBLEFMLHJvd2xhcnkwMSw0NDAwMDANCjIwMTAsU0VBLEFMLGhhbm5hamEwMSw0MTY1MDANCjIwMTAsU0VBLEFMLHdoaXRlc2UwMiw0MTUwMDANCjIwMTAsU0VBLEFMLGpvaG5zcm8wNyw0MTI1MDANCjIwMTAsU0VBLEFMLGtlbGxlc2gwMSw0MTI1MDANCjIwMTAsU0VBLEFMLHZhcmdhamEwMSw0MTI1MDANCjIwMTAsU0VBLEFMLGZpc3RlZG8wMSw0MDY1MDANCjIwMTAsU0VBLEFMLG1vb3JlYWQwMSw0MDEwMDANCjIwMTAsU0VBLEFMLHR1aWFzbWEwMSw0MDEwMDANCjIwMTAsU0VBLEFMLGJ5cm5lZXIwMSw0MDAwMDANCjIwMTAsU0VBLEFMLHRleGVpa2EwMSw0MDAwMDANCjIwMTAsVEJBLEFMLHBlbmFjYTAxLDEwMTI1MDAwDQoyMDEwLFRCQSxBTCxjcmF3ZmNhMDIsMTAwMDAwMDANCjIwMTAsVEJBLEFMLGJ1cnJlcGEwMSw5MDAwMDAwDQoyMDEwLFRCQSxBTCxzb3JpYXJhMDEsNzI1MDAwMA0KMjAxMCxUQkEsQUwsYmFydGxqYTAxLDQwMDAwMDANCjIwMTAsVEJBLEFMLHdoZWVsZGEwMSwzNTAwMDAwDQoyMDEwLFRCQSxBTCxnYXJ6YW1hMDEsMzM1MDAwMA0KMjAxMCxUQkEsQUwsdXB0b25iajAxLDMwMDAwMDANCjIwMTAsVEJBLEFMLHNoaWVsamEwMiwyNTAwMDAwDQoyMDEwLFRCQSxBTCxzaG9wcGtlMDEsMjI1MDAwMA0KMjAxMCxUQkEsQUwsbmF2YXJkaTAxLDIxMDAwMDANCjIwMTAsVEJBLEFMLGJhbGZvZ3IwMSwyMDUwMDAwDQoyMDEwLFRCQSxBTCxwcmljZWRhMDEsMTgzNDY3MQ0KMjAxMCxUQkEsQUwsaG93ZWxqcDAxLDE4MDAwMDANCjIwMTAsVEJBLEFMLGF5YmFyd2kwMSwxMzUwMDAwDQoyMDEwLFRCQSxBTCxjb3JtaWxhMDEsMTIwMDAwMA0KMjAxMCxUQkEsQUwsa2FwbGVnYTAxLDEwNTQwMDANCjIwMTAsVEJBLEFMLG5pZW1hamUwMSwxMDMyMDAwDQoyMDEwLFRCQSxBTCxsb25nb2V2MDEsOTUwMDAwDQoyMDEwLFRCQSxBTCxjaG9hdHJhMDEsNzAwMDAwDQoyMDEwLFRCQSxBTCx6b2JyaWJlMDEsNDM4MTAwDQoyMDEwLFRCQSxBTCxzb25uYWFuMDEsNDE2OTAwDQoyMDEwLFRCQSxBTCxqb3ljZW1hMDEsNDA2MDAwDQoyMDEwLFRCQSxBTCxyb2RyaXNlMDEsNDA1NTAwDQoyMDEwLFRCQSxBTCxkYXZpc3dhMDEsNDA0OTAwDQoyMDEwLFRCQSxBTCxicmlnbnJlMDEsNDAzNzAwDQoyMDEwLFRCQSxBTCxla3N0cm1pMDEsNDAyNzAwDQoyMDEwLFRFWCxBTCx5b3VuZ21pMDIsMTMxNzQ5NzQNCjIwMTAsVEVYLEFMLGhhcmRlcmkwMSw2NTAwMDAwDQoyMDEwLFRFWCxBTCxndWVycnZsMDEsNTUwMDAwMA0KMjAxMCxURVgsQUwsa2luc2xpYTAxLDQyMDAwMDANCjIwMTAsVEVYLEFMLGZyYW5jZnIwMSwzMjY1MDAwDQoyMDEwLFRFWCxBTCxoYW1pbGpvMDMsMzI1MDAwMA0KMjAxMCxURVgsQUwsd2lsc29jajAxLDMxMDAwMDANCjIwMTAsVEVYLEFMLG9saXZlZGEwMiwzMDAwMDAwDQoyMDEwLFRFWCxBTCxmZWxkbXNjMDEsMjQyNTAwMA0KMjAxMCxURVgsQUwsbGV3aXNjbzAxLDE3NTAwMDANCjIwMTAsVEVYLEFMLHJheWNoMDEsOTc1MDAwDQoyMDEwLFRFWCxBTCxuaXBwZWR1MDEsNjY1MDAwDQoyMDEwLFRFWCxBTCxib3Jib2p1MDEsNjAwMDAwDQoyMDEwLFRFWCxBTCxnYXJrb3J5MDEsNTUwMDAwDQoyMDEwLFRFWCxBTCxibGFuY2FuMDEsNTEwMDAwDQoyMDEwLFRFWCxBTCxjcnV6bmUwMiw0NDAwMDANCjIwMTAsVEVYLEFMLG11cnBoZGEwNyw0Mjc2NzANCjIwMTAsVEVYLEFMLG9kYXlkYTAxLDQyNjcwMA0KMjAxMCxURVgsQUwsc2FsdGFqYTAxLDQxODU4MA0KMjAxMCxURVgsQUwsYW5kcnVlbDAxLDQxODQyMA0KMjAxMCxURVgsQUwsZGF2aXNjaDAyLDQxNDEyMA0KMjAxMCxURVgsQUwsaHVudGV0bzAyLDQwOTg1MA0KMjAxMCxURVgsQUwsbWF0aGlkbzAxLDQwNzQwMA0KMjAxMCxURVgsQUwsdGVhZ2F0YTAxLDQwNzAxMA0KMjAxMCxURVgsQUwsaGFycmltYTAxLDQwNjA5MA0KMjAxMCxURVgsQUwsbWFkcml3YTAxLDQwNDczMA0KMjAxMCxURVgsQUwsYXJpYXNqbzAxLDQwMjAwMA0KMjAxMCxURVgsQUwsZmVsaXpuZTAxLDQwMjAwMA0KMjAxMCxURVgsQUwsaHVybGVlcjAxLDQwMTAwMA0KMjAxMCxUT1IsQUwsd2VsbHN2ZTAxLDE1Njg3NTAwDQoyMDEwLFRPUixBTCxvdmVyYmx5MDEsNzk1MDAwMA0KMjAxMCxUT1IsQUwsZW5jYXJlZDAxLDUxNzUwMDANCjIwMTAsVE9SLEFMLGRvd25zc2MwMSw0MDAwMDAwDQoyMDEwLFRPUixBTCxoaWxsYWEwMSw0MDAwMDAwDQoyMDEwLFRPUixBTCxnb256YWFsMDIsMjc1MDAwMA0KMjAxMCxUT1IsQUwsZnJhc29qYTAxLDI2NTAwMDANCjIwMTAsVE9SLEFMLGJhdXRpam8wMiwyNDAwMDAwDQoyMDEwLFRPUixBTCxidWNram8wMSwyMDAwMDAwDQoyMDEwLFRPUixBTCxncmVnZ2tlMDEsMjAwMDAwMA0KMjAxMCxUT1IsQUwsdGFsbGVicjAxLDIwMDAwMDANCjIwMTAsVE9SLEFMLG1jZG9uam8wMywxNTAwMDAwDQoyMDEwLFRPUixBTCxjYW1wc2gwMSwxMTUwMDAwDQoyMDEwLFRPUixBTCxhY2NhcmplMDEsMTA4MDAwMA0KMjAxMCxUT1IsQUwsbWFyY3VzaDAxLDg1MDAwMA0KMjAxMCxUT1IsQUwsbW9saW5qbzAxLDgwMDAwMA0KMjAxMCxUT1IsQUwsamFuc3NjYTAxLDcwMDAwMA0KMjAxMCxUT1IsQUwsbGluZGFkMDEsNTUwMDAwDQoyMDEwLFRPUixBTCxtY2dvd2R1MDEsNTAwMDAwDQoyMDEwLFRPUixBTCxldmVsYWRhMDEsNDE5NTAwDQoyMDEwLFRPUixBTCxsaXRzY2plMDEsNDE0NzAwDQoyMDEwLFRPUixBTCxyaWNobXNjMDEsNDA5OTAwDQoyMDEwLFRPUixBTCxtb3Jyb2JyMDEsNDA5ODAwDQoyMDEwLFRPUixBTCx2YWxkZW1lMDEsNDA5NTAwDQoyMDEwLFRPUixBTCxyb21lcnJpMDEsNDA4MzAwDQoyMDEwLFRPUixBTCxzbmlkZXRyMDEsNDA1ODAwDQoyMDEwLFRPUixBTCxoYXlodWRpMDEsNDA1MDAwDQoyMDEwLFRPUixBTCxydWl6cmEwMSw0MDQzMDANCjIwMTAsVE9SLEFMLHJ6ZXBjbWEwMSw0MDQwMDANCjIwMTAsVE9SLEFMLG1jY295bWkwMSw0MDA3MDANCjIwMTAsQVJJLE5MLHdlYmJicjAxLDg1MDAwMDANCjIwMTAsQVJJLE5MLGhhcmVuZGEwMSw4MjUwMDAwDQoyMDEwLEFSSSxOTCxzbnlkZWNoMDIsNTI1MDAwMA0KMjAxMCxBUkksTkwsamFja3NlZDAxLDQ2MDAwMDANCjIwMTAsQVJJLE5MLGxhcm9jYWQwMSw0NTAwMDAwDQoyMDEwLEFSSSxOTCxxdWFsbGNoMDEsNDE4NTAwMA0KMjAxMCxBUkksTkwseW91bmdjaDA0LDM0NTAwMDANCjIwMTAsQVJJLE5MLGRyZXdzdDAxLDM0MDAwMDANCjIwMTAsQVJJLE5MLGphY2tzY28wMSwzMTAwMDAwDQoyMDEwLEFSSSxOTCxqb2huc2tlMDUsMjM1MDAwMA0KMjAxMCxBUkksTkwsaGVpbG1hYTAxLDIxNTAwMDANCjIwMTAsQVJJLE5MLGhvd3J5Ym8wMSwyMDAwMDAwDQoyMDEwLEFSSSxOTCxtb250ZW1pMDEsMjAwMDAwMA0KMjAxMCxBUkksTkwscmV5bm9tYTAxLDgzMzMzMw0KMjAxMCxBUkksTkwsb2plZGFhdTAxLDgyNTAwMA0KMjAxMCxBUkksTkwsYm95ZXJibDAxLDcyNTAwMA0KMjAxMCxBUkksTkwsdXB0b25qdTAxLDcwODMzMw0KMjAxMCxBUkksTkwsbG9wZXpybzAxLDY1MDAwMA0KMjAxMCxBUkksTkwsZ3V0aWVqdTAxLDQxMTAwMA0KMjAxMCxBUkksTkwscm9zYWxsZTAxLDQwOTUwMA0KMjAxMCxBUkksTkwsYWJyZXV0bzAxLDQwNzAwMA0KMjAxMCxBUkksTkwscGFycmFnZTAxLDQwNTUwMA0KMjAxMCxBUkksTkwsdmFzcXVlczAxLDQwNDUwMA0KMjAxMCxBUkksTkwsa2VubmVpYTAxLDQwMzAwMA0KMjAxMCxBUkksTkwscnlhbHJ1MDEsNDAxMDAwDQoyMDEwLEFSSSxOTCxub3JiZWpvMDEsNDAwMDAwDQoyMDEwLEFUTCxOTCxsb3dlZGUwMSwxNTAwMDAwMA0KMjAxMCxBVEwsTkwsam9uZXNjaDA2LDE0MDAwMDAwDQoyMDEwLEFUTCxOTCxodWRzb3RpMDEsOTAwMDAwMA0KMjAxMCxBVEwsTkwsa2F3YWtrZTAxLDczMzM2NjYNCjIwMTAsQVRMLE5MLHdhZ25lYmkwMiw2NzUwMDAwDQoyMDEwLEFUTCxOTCxtY2NhbmJyMDEsNTcwMDAwMA0KMjAxMCxBVEwsTkwsbWNsb3VuYTAxLDUwMDAwMDANCjIwMTAsQVRMLE5MLHNhaXRvdGEwMSwzMjAwMDAwDQoyMDEwLEFUTCxOTCxjYWJyZW1lMDEsMzEwMDAwMA0KMjAxMCxBVEwsTkwsZGlhem1hMDIsMjU1MDAwMA0KMjAxMCxBVEwsTkwsaW5mYW5vbTAxLDIyMjUwMDANCjIwMTAsQVRMLE5MLGdsYXVzdHIwMSwxNzUwMDAwDQoyMDEwLEFUTCxOTCxyb3NzZGEwMSwxNjAwMDAwDQoyMDEwLEFUTCxOTCxtb3lsYXBlMDEsMTE1MDAwMA0KMjAxMCxBVEwsTkwsaGluc2tlcjAxLDEwMDAwMDANCjIwMTAsQVRMLE5MLGp1cnJqamEwMSw0ODAwMDANCjIwMTAsQVRMLE5MLG9mbGFoZXIwMSw0NDAwMDANCjIwMTAsQVRMLE5MLHByYWRvbWEwMSw0NDAwMDANCjIwMTAsQVRMLE5MLGVzY29ieXUwMSw0MzUwMDANCjIwMTAsQVRMLE5MLGhhbnNvdG8wMSw0MzUwMDANCjIwMTAsQVRMLE5MLGNoYXZlamUwMSw0MTUwMDANCjIwMTAsQVRMLE5MLHJleWVzam8wMyw0MTAwMDANCjIwMTAsQVRMLE5MLG1lZGxla3IwMSw0MDc1MDANCjIwMTAsQVRMLE5MLHNjaGFmam8wMiw0MDI1MDANCjIwMTAsQVRMLE5MLGNvbnJhYnIwMSw0MDAwMDANCjIwMTAsQVRMLE5MLGhlcm5hZGkwMSw0MDAwMDANCjIwMTAsQVRMLE5MLGhleXdhamEwMSw0MDAwMDANCjIwMTAsQ0hOLE5MLHNvcmlhYWwwMSwxOTAwMDAwMA0KMjAxMCxDSE4sTkwsemFtYnJjYTAxLDE4ODc1MDAwDQoyMDEwLENITixOTCxyYW1pcmFyMDEsMTY3NTAwMDANCjIwMTAsQ0hOLE5MLGZ1a3Vka28wMSwxNDAwMDAwMA0KMjAxMCxDSE4sTkwsZGVtcHNyeTAxLDEzNTAwMDAwDQoyMDEwLENITixOTCxsZWVkZTAyLDEzMjUwMDAwDQoyMDEwLENITixOTCxsaWxseXRlMDEsMTMwMDAwMDANCjIwMTAsQ0hOLE5MLHNpbHZhY2EwMSwxMjc1MDAwMA0KMjAxMCxDSE4sTkwsbmFkeXhhMDEsMzMwMDAwMA0KMjAxMCxDSE4sTkwsYnlyZG1hMDEsMzAwMDAwMA0KMjAxMCxDSE4sTkwsc2FtYXJqZTAxLDMwMDAwMDANCjIwMTAsQ0hOLE5MLGdyYWJvam8wMiwyNzAwMDAwDQoyMDEwLENITixOTCx0aGVyaXJ5MDEsMjYwMDAwMA0KMjAxMCxDSE4sTkwsbWFybW9jYTAxLDIxMjUwMDANCjIwMTAsQ0hOLE5MLGZvbnRlbWkwMSwxMDAwMDAwDQoyMDEwLENITixOTCxiYWtlcmplMDMsOTc1MDAwDQoyMDEwLENITixOTCxtYXJzaHNlMDEsOTUwMDAwDQoyMDEwLENITixOTCx0cmFjeWNoMDEsOTAwMDAwDQoyMDEwLENITixOTCxndXptYWFuMDEsODI1MDAwDQoyMDEwLENITixOTCxnb3J6ZXRvMDEsODAwMDAwDQoyMDEwLENITixOTCxoaWxsa28wMSw3MDAwMDANCjIwMTAsQ0hOLE5MLHNvdG9nZTAxLDU3NTAwMA0KMjAxMCxDSE4sTkwsd2VsbHNyYTAxLDQyNzAwMA0KMjAxMCxDSE4sTkwsYmVyZ2p1MDEsNDAzMDAwDQoyMDEwLENITixOTCxjYXJpZGVzMDEsNDAzMDAwDQoyMDEwLENITixOTCxjb2x2aXR5MDEsNDAxMDAwDQoyMDEwLENITixOTCxydXNzZWphMDIsNDAwMDAwDQoyMDEwLENJTixOTCxoYXJhbmFhMDEsMTI1MDAwMDANCjIwMTAsQ0lOLE5MLGNvcmRlZnIwMSwxMjEyNTAwMA0KMjAxMCxDSU4sTkwsYXJyb3licjAxLDExNjI1MDAwDQoyMDEwLENJTixOTCxyb2xlbnNjMDEsNzY2NjY2Ng0KMjAxMCxDSU4sTkwscGhpbGxicjAxLDY5Mzc1MDANCjIwMTAsQ0lOLE5MLGhlcm5hcmEwMiwzODY4Mzc2DQoyMDEwLENJTixOTCxtaWxlc2FhMDEsMjcwMDAwMA0KMjAxMCxDSU4sTkwsbGluY29taTAxLDI1MDAwMDANCjIwMTAsQ0lOLE5MLGNhYnJlb3IwMSwyMDIwMDAwDQoyMDEwLENJTixOTCxyaG9kZWFyMDEsMjAwMDAwMA0KMjAxMCxDSU4sTkwsbWFzc2VuaTAxLDEwMzUwMDANCjIwMTAsQ0lOLE5MLGdvbWVzam8wMSw4MDAwMDANCjIwMTAsQ0lOLE5MLHZvdHRvam8wMSw1MjUwMDANCjIwMTAsQ0lOLE5MLGN1ZXRvam8wMSw0NDUwMDANCjIwMTAsQ0lOLE5MLHZvbHF1ZWQwMSw0NDUwMDANCjIwMTAsQ0lOLE5MLGJydWNlamEwMSw0NDAwMDANCjIwMTAsQ0lOLE5MLG93aW5nbWkwMSw0NDAwMDANCjIwMTAsQ0lOLE5MLGJhaWxlaG8wMiw0MTgwMDANCjIwMTAsQ0lOLE5MLGJhbGVud2wwMSw0MTYwMDANCjIwMTAsQ0lOLE5MLGRpY2tlY2gwMSw0MTUwMDANCjIwMTAsQ0lOLE5MLGhhbmlncnkwMSw0MTUwMDANCjIwMTAsQ0lOLE5MLGhlcnJlZGEwMSw0MTI1MDANCjIwMTAsQ0lOLE5MLGphbmlzcGEwMSw0MTI1MDANCjIwMTAsQ0lOLE5MLGZyYW5janUwMiw0MDAwMDANCjIwMTAsQ0lOLE5MLG9uZHJ1bG8wMSw0MDAwMDANCjIwMTAsQ0lOLE5MLHN0dWJiZHIwMSw0MDAwMDANCjIwMTAsQ09MLE5MLGhlbHRvdG8wMSwxNzc3NTAwMA0KMjAxMCxDT0wsTkwsY29va2FhMDEsOTYyNTAwMA0KMjAxMCxDT0wsTkwsaGF3cGVicjAxLDc1MDAwMDANCjIwMTAsQ09MLE5MLHN0cmVlaHUwMSw3MjAwMDAwDQoyMDEwLENPTCxOTCxmcmFuY2plMDEsNTc1MDAwMA0KMjAxMCxDT0wsTkwsZGVsYXJqbzAxLDU2MDAwMDANCjIwMTAsQ09MLE5MLGJldGFucmEwMSwzNzc1MDAwDQoyMDEwLENPTCxOTCx0dWxvd3RyMDEsMzUwMDAwMA0KMjAxMCxDT0wsTkwsYmFybWVjbDAxLDMzMjUwMDANCjIwMTAsQ09MLE5MLGNvcnBhbWEwMSwyNzUwMDAwDQoyMDEwLENPTCxOTCxvbGl2b21pMDEsMjAwMDAwMA0KMjAxMCxDT0wsTkwsaGFtbWVqYTAxLDE5MDAwMDANCjIwMTAsQ09MLE5MLGdpYW1iamEwMSwxNzUwMDAwDQoyMDEwLENPTCxOTCxpYW5uZWNoMDEsMTc1MDAwMA0KMjAxMCxDT0wsTkwsc3BpbGJyeTAxLDEzMDAwMDANCjIwMTAsQ09MLE5MLG1vcmFtZTAxLDEyNzUwMDANCjIwMTAsQ09MLE5MLGppbWVudWIwMSwxMjUwMDAwDQoyMDEwLENPTCxOTCxidWNoaHRhMDEsMTA1NTAwMA0KMjAxMCxDT0wsTkwsYmVsaXNtYTAxLDg1MDAwMA0KMjAxMCxDT0wsTkwsZmxvcmVyYTAxLDY1MDAwMA0KMjAxMCxDT0wsTkwsc3Rld2FpYTAxLDQwODAwMA0KMjAxMCxDT0wsTkwsc21pdGhzZTAxLDQwNzAwMA0KMjAxMCxDT0wsTkwsZm93bGVkZTAxLDQwNjAwMA0KMjAxMCxDT0wsTkwsZ29uemFjYTAxLDQwNjAwMA0KMjAxMCxDT0wsTkwsbW9yYWxmcjAxLDQwNjAwMA0KMjAxMCxDT0wsTkwsc21pdGhncjAyLDQwNjAwMA0KMjAxMCxDT0wsTkwsZGFsZXltYTAxLDQwNDAwMA0KMjAxMCxDT0wsTkwscmV5bm9ncjAxLDQwMzAwMA0KMjAxMCxDT0wsTkwscm9nZXJlczAxLDQwMTAwMA0KMjAxMCxGTE8sTkwscm9iZXJuYTAxLDEwMDAwMDAwDQoyMDEwLEZMTyxOTCx1Z2dsYWRhMDEsNzgwMDAwMA0KMjAxMCxGTE8sTkwscmFtaXJoYTAxLDcwMDAwMDANCjIwMTAsRkxPLE5MLGNhbnR1am8wMSw2MDAwMDAwDQoyMDEwLEZMTyxOTCxyb3NzY28wMSw0NDUwMDAwDQoyMDEwLEZMTyxOTCxub2xhc3JpMDEsMzgwMDAwMA0KMjAxMCxGTE8sTkwsam9obnNqbzA5LDM3NTAwMDANCjIwMTAsRkxPLE5MLG51bmV6bGUwMSwyMDAwMDAwDQoyMDEwLEZMTyxOTCxtaWxsZWFuMDEsMTc5MDIxOQ0KMjAxMCxGTE8sTkwsc2FuY2hhbjAxLDEyNTAwMDANCjIwMTAsRkxPLE5MLHBhdWxpcm8wMSwxMTAwMDAwDQoyMDEwLEZMTyxOTCxwaW50b3JlMDEsMTA3NTAwMA0KMjAxMCxGTE8sTkwsaGVsbXN3ZTAxLDk1MDAwMA0KMjAxMCxGTE8sTkwsdmVyYXNqbzAxLDU1MDAwMA0KMjAxMCxGTE8sTkwsbGFtYm1pMDEsNTAwMDAwDQoyMDEwLEZMTyxOTCxjb2dobGNoMDEsNDc1MDAwDQoyMDEwLEZMTyxOTCxoZW5zbGNsMDEsNDI1MDAwDQoyMDEwLEZMTyxOTCxib25pZmVtMDEsNDIwMDAwDQoyMDEwLEZMTyxOTCx2b2xzdGNoMDEsNDIwMDAwDQoyMDEwLEZMTyxOTCxiYWtlcmpvMDEsNDE1MDAwDQoyMDEwLEZMTyxOTCxiYXJkZWJyMDEsNDE1MDAwDQoyMDEwLEZMTyxOTCxtZXllcmRhMDIsNDE1MDAwDQoyMDEwLEZMTyxOTCxzYW5jaGJyMDEsNDEyNTAwDQoyMDEwLEZMTyxOTCxiYWRlbmJ1MDEsNDA3NTAwDQoyMDEwLEZMTyxOTCxtYXliaWNhMDEsNDA1MDAwDQoyMDEwLEZMTyxOTCxjYXJyb2JyMDEsNDAzNTAwDQoyMDEwLEZMTyxOTCxzYW5jaGdhMDEsNDAxMDAwDQoyMDEwLEhPVSxOTCxsZWVjYTAxLDE5MDAwMDAwDQoyMDEwLEhPVSxOTCxvc3dhbHJvMDEsMTUwMDAwMDANCjIwMTAsSE9VLE5MLGJlcmttbGEwMSwxNDUwMDAwMA0KMjAxMCxIT1UsTkwsbWF0c3VrYTAxLDU1MDAwMDANCjIwMTAsSE9VLE5MLHJvZHJpd2EwMSw1MDAwMDAwDQoyMDEwLEhPVSxOTCxmZWxpenBlMDEsNDUwMDAwMA0KMjAxMCxIT1UsTkwsbHlvbmJyMDEsNDI1MDAwMA0KMjAxMCxIT1UsTkwscGVuY2VodTAxLDM1MDAwMDANCjIwMTAsSE9VLE5MLG15ZXJzYnIwMSwzMTAwMDAwDQoyMDEwLEhPVSxOTCxtb2VobGJyMDEsMzAwMDAwMA0KMjAxMCxIT1UsTkwsYm91cm5taTAxLDI0MDAwMDANCjIwMTAsSE9VLE5MLGxpbmRzbWEwMSwxNjI1MDAwDQoyMDEwLEhPVSxOTCxieXJkYXRpMDEsMTYwMDAwMA0KMjAxMCxIT1UsTkwsYmx1bWdlMDEsMTUwMDAwMA0KMjAxMCxIT1UsTkwsa2VwcGlqZTAxLDExNTAwMDANCjIwMTAsSE9VLE5MLHNhbXBzY2gwMSw4MTUwMDANCjIwMTAsSE9VLE5MLG1pY2hhamEwMSw4MDAwMDANCjIwMTAsSE9VLE5MLHF1aW50aHUwMSw3NTAwMDANCjIwMTAsSE9VLE5MLHN1bGxpY28wMSw3MDAwMDANCjIwMTAsSE9VLE5MLGZ1bGNoamUwMSw0MjUwMDANCjIwMTAsSE9VLE5MLGFyaWFzYWwwMiw0MTU1MDANCjIwMTAsSE9VLE5MLHBhdWxpZmUwMSw0MTUwMDANCjIwMTAsSE9VLE5MLHRvd2xlanIwMSw0MDY1MDANCjIwMTAsSE9VLE5MLGdlcnZhc2EwMSw0MDI1MDANCjIwMTAsSE9VLE5MLG5vcnJpYnUwMSw0MDEwMDANCjIwMTAsSE9VLE5MLGJhemFyeW8wMSw0MDAwMDANCjIwMTAsSE9VLE5MLGpvaG5zY2gwNSw0MDAwMDANCjIwMTAsSE9VLE5MLG1hbnpldG8wMSw0MDAwMDANCjIwMTAsTEFOLE5MLHJhbWlybWEwMiwxODY5NTAwNg0KMjAxMCxMQU4sTkwsa3Vyb2RoaTAxLDE1NDMzMzMzDQoyMDEwLExBTixOTCxmdXJjYXJhMDEsOTUwMDAwMA0KMjAxMCxMQU4sTkwsYmxha2VjYTAxLDYyNTAwMDANCjIwMTAsTEFOLE5MLGV0aGllYW4wMSw1NzUwMDAwDQoyMDEwLExBTixOTCxtYXJ0aXJ1MDEsNTA1MDAwMA0KMjAxMCxMQU4sTkwscGFkaWx2aTAxLDUwMjUwMDANCjIwMTAsTEFOLE5MLHNoZXJyZ2UwMSw0NTAwMDAwDQoyMDEwLExBTixOTCxicm94dGpvMDEsNDAwMDAwMA0KMjAxMCxMQU4sTkwsa2VtcG1hMDEsNDAwMDAwMA0KMjAxMCxMQU4sTkwsYmlsbGljaDAxLDM4NTAwMDANCjIwMTAsTEFOLE5MLGxvbmV5amEwMSwzMTAwMDAwDQoyMDEwLExBTixOTCxjYXJyb2phMDEsMTUzNTY3Nw0KMjAxMCxMQU4sTkwsb3J0aXpyYTAxLDEwMDAwMDANCjIwMTAsTEFOLE5MLGt1b2hvMDEsOTUwMDAwDQoyMDEwLExBTixOTCxhdXNtdWJyMDEsODUwMDAwDQoyMDEwLExBTixOTCxiZWxsaXJvMDEsODI1MDAwDQoyMDEwLExBTixOTCxqb2huc3JlMDIsODAwMDAwDQoyMDEwLExBTixOTCx3ZWF2ZWplMDEsODAwMDAwDQoyMDEwLExBTixOTCxhbmRlcmdhMDEsNTUwMDAwDQoyMDEwLExBTixOTCxrZXJzaGNsMDEsNDQwMDAwDQoyMDEwLExBTixOTCx0cm9uY3JhMDEsNDE2MDAwDQoyMDEwLExBTixOTCxiZWxpc3JvMDEsNDEyNTAwDQoyMDEwLExBTixOTCxoYWVnZWNoMDEsNDExMDAwDQoyMDEwLExBTixOTCxkZXdpdGJsMDEsNDEwMDAwDQoyMDEwLExBTixOTCx3YWRlY28wMSw0MDQ1MDANCjIwMTAsTEFOLE5MLG1vbmFzY2EwMSw0MDAwMDANCjIwMTAsTUlMLE5MLHN1cHBhamUwMSwxMjc1MDAwMA0KMjAxMCxNSUwsTkwsZmllbGRwcjAxLDExMDAwMDAwDQoyMDEwLE1JTCxOTCx3b2xmcmEwMiw4ODAwMjc2DQoyMDEwLE1JTCxOTCxob2ZmbXRyMDEsNzUwMDAwMA0KMjAxMCxNSUwsTkwsaGFydGNvMDEsNDgwMDAwMA0KMjAxMCxNSUwsTkwscmlza2VkYTAxLDQ1MDAwMDANCjIwMTAsTUlMLE5MLGRhdmlzZG8wMiw0MjUwMDAwDQoyMDEwLE1JTCxOTCxidXNoZGEwMSw0MjE1MDAwDQoyMDEwLE1JTCxOTCxoYXdraWxhMDEsMzI1MDAwMA0KMjAxMCxNSUwsTkwsd2Vla3NyaTAxLDI3NTAwMDANCjIwMTAsTUlMLE5MLGNvdW5zY3IwMSwyMTAwMDAwDQoyMDEwLE1JTCxOTCxjb2ZmZXRvMDEsMjAyNTAwMg0KMjAxMCxNSUwsTkwsZ2VydXRqbzAxLDIwMDAwMDANCjIwMTAsTUlMLE5MLHphdW5ncjAxLDE5MDAwMDANCjIwMTAsTUlMLE5MLGJyYXVucnkwMiwxMjg3NTAwDQoyMDEwLE1JTCxOTCxnb21lemNhMDEsMTEwMDAwMA0KMjAxMCxNSUwsTkwsdmlsbGFjYTAxLDk1MDAwMA0KMjAxMCxNSUwsTkwsdmFyZ2FjbDAxLDkwMDAwMA0KMjAxMCxNSUwsTkwsZWRtb25qaTAxLDg1MDAwMA0KMjAxMCxNSUwsTkwsZ2FsbGF5bzAxLDQ1MDAwMA0KMjAxMCxNSUwsTkwscGFycmFtYTAxLDQ0MDAwMA0KMjAxMCxNSUwsTkwsbWNnZWhjYTAxLDQyNzUwMA0KMjAxMCxNSUwsTkwsc3RldHRtaTAxLDQyMDAwMA0KMjAxMCxNSUwsTkwsaW5nbGVqbzAxLDQxNjAwMA0KMjAxMCxNSUwsTkwsa290dGFnZTAxLDQwODUwMA0KMjAxMCxNSUwsTkwsZ2FtZWxtYTAxLDQwNjUwMA0KMjAxMCxNSUwsTkwsbmFydmVjaDAxLDQwNjUwMA0KMjAxMCxNSUwsTkwsZXNjb2JhbDAyLDQwNTUwMA0KMjAxMCxNSUwsTkwsYnV0bGVqbzAzLDQwMDAwMA0KMjAxMCxOWU4sTkwsc2FudGFqbzAxLDIwMTQ0NzA3DQoyMDEwLE5ZTixOTCxiZWx0cmNhMDEsMTk0MDE1NjkNCjIwMTAsTllOLE5MLHJvZHJpZnIwMywxMjE2NjY2Ng0KMjAxMCxOWU4sTkwscGVyZXpvbDAxLDEyMDAwMDAwDQoyMDEwLE5ZTixOTCxtYXR0aGdhMDIsMTE0MDAwMDANCjIwMTAsTllOLE5MLHdyaWdoZGEwMywxMDI1MDAwMA0KMjAxMCxOWU4sTkwscmV5ZXNqbzAxLDkzNzUwMDANCjIwMTAsTllOLE5MLGJheWphMDEsODYyNTAwMA0KMjAxMCxOWU4sTkwsY2FzdGlsdTAxLDYyNTAwMDANCjIwMTAsTllOLE5MLGZyYW5jamUwMiw1MDAwMDAwDQoyMDEwLE5ZTixOTCxtYWluZWpvMDEsMzMwMDAwMA0KMjAxMCxOWU4sTkwsZmVsaWNwZTAxLDI5MDAwMDANCjIwMTAsTllOLE5MLGNvcmFhbDAxLDE4NTAwMDANCjIwMTAsTllOLE5MLHBhZ2FuYW4wMSwxNTAwMDAwDQoyMDEwLE5ZTixOTCxlc2NvYmtlMDEsMTI1MDAwMA0KMjAxMCxOWU4sTkwsaWdhcmFyeTAxLDEyNTAwMDANCjIwMTAsTllOLE5MLHRha2FoaGkwMSwxMDAwMDAwDQoyMDEwLE5ZTixOTCxncmVlbnNlMDEsOTc1MDAwDQoyMDEwLE5ZTixOTCxqYWNvYm1pMDIsOTAwMDAwDQoyMDEwLE5ZTixOTCx0YXRpc2ZlMDEsODUwMDAwDQoyMDEwLE5ZTixOTCxibGFuY2hlMDEsNzUwMDAwDQoyMDEwLE5ZTixOTCxjYXRhbGZyMDEsNjUwMDAwDQoyMDEwLE5ZTixOTCxiYXJhanJvMDEsNTAwMDAwDQoyMDEwLE5ZTixOTCxwZWxmcm1pMDEsNTAwMDAwDQoyMDEwLE5ZTixOTCxtdXJwaGRhMDgsNDE5MDAwDQoyMDEwLE5ZTixOTCxuaWV2ZWZlMDEsNDE0MDAwDQoyMDEwLE5ZTixOTCxuaWVzZWpvMDEsNDAyMDAwDQoyMDEwLE5ZTixOTCx0ZWphZHJ1MDEsNDAwMDAwDQoyMDEwLFBISSxOTCxob3dhcnJ5MDEsMTkwMDAwMDANCjIwMTAsUEhJLE5MLGhhbGxhcm8wMSwxNTc1MDAwMA0KMjAxMCxQSEksTkwsdXRsZXljaDAxLDE1Mjg1NzE0DQoyMDEwLFBISSxOTCxpYmFuZXJhMDEsMTIxNjY2NjYNCjIwMTAsUEhJLE5MLGxpZGdlYnIwMSwxMjAwMDAwMA0KMjAxMCxQSEksTkwscm9sbGlqaTAxLDg1MDAwMDANCjIwMTAsUEhJLE5MLG1veWVyamEwMSw4MDAwMDAwDQoyMDEwLFBISSxOTCx3ZXJ0aGphMDEsNzUwMDAwMA0KMjAxMCxQSEksTkwsaGFtZWxjbzAxLDY2NTAwMDANCjIwMTAsUEhJLE5MLHBvbGFucGwwMSw1MTY2NjY2DQoyMDEwLFBISSxOTCx2aWN0b3NoMDEsNTAwMDAwMA0KMjAxMCxQSEksTkwsbWFkc29yeTAxLDQ4MzMzMzMNCjIwMTAsUEhJLE5MLHJvbWVyamMwMSw0MjUwMDAwDQoyMDEwLFBISSxOTCxibGFudGpvMDEsMzAwMDAwMA0KMjAxMCxQSEksTkwsYmFlemRhMDEsMjUwMDAwMA0KMjAxMCxQSEksTkwsZHVyYmljaDAxLDIxMjUwMDANCjIwMTAsUEhJLE5MLHJ1aXpjYTAxLDE5MDAwMDANCjIwMTAsUEhJLE5MLGNvbnRyam8wMSwxNTAwMDAwDQoyMDEwLFBISSxOTCxkb2Jic2dyMDEsMTM1MDAwMA0KMjAxMCxQSEksTkwsc2NobmVicjAxLDExMjUwMDANCjIwMTAsUEhJLE5MLGdsb2Fkcm8wMSwxMDAwMDAwDQoyMDEwLFBISSxOTCxjYXN0cmp1MDEsNzAwMDAwDQoyMDEwLFBISSxOTCxrZW5kcmt5MDEsNDgwMDAwDQoyMDEwLFBISSxOTCxmcmFuY2JlMDEsNDcwMDAwDQoyMDEwLFBISSxOTCxoYXBwamEwMSw0NzAwMDANCjIwMTAsUEhJLE5MLGJhc3RhYW4wMSw0MDUwMDANCjIwMTAsUEhJLE5MLGNhcnBlYW4wMSw0MDEwMDANCjIwMTAsUEhJLE5MLGhlcm5kZGEwMSw0MDAwMDANCjIwMTAsUElULE5MLG1haG9scGEwMSw1MDAwMDAwDQoyMDEwLFBJVCxOTCxpd2FtdWFrMDEsNDg1MDAwMA0KMjAxMCxQSVQsTkwsZHVrZXphMDEsNDMwMDAwMA0KMjAxMCxQSVQsTkwsZG91bWlyeTAxLDM2NTAwMDANCjIwMTAsUElULE5MLGRvdGVsb2MwMSwzMjUwMDAwDQoyMDEwLFBJVCxOTCxjaHVyY3J5MDEsMTUwMDAwMA0KMjAxMCxQSVQsTkwsZG9ubmVicjAxLDEzNTAwMDANCjIwMTAsUElULE5MLGNlZGVucm8wMiwxMTI1MDAwDQoyMDEwLFBJVCxOTCxjcm9zYmJvMDEsMTAwMDAwMA0KMjAxMCxQSVQsTkwsY2FycmFkajAxLDk1MDAwMA0KMjAxMCxQSVQsTkwsdGFzY2hqYTAxLDgzNTAwMA0KMjAxMCxQSVQsTkwsbG9wZXpqYTAyLDc3NTAwMA0KMjAxMCxQSVQsTkwsaGFucmFqbzAxLDQ1MzAwMA0KMjAxMCxQSVQsTkwsbWlsbGVsYTAyLDQ1MjAwMA0KMjAxMCxQSVQsTkwsbGFyb2NhbjAxLDQ1MTAwMA0KMjAxMCxQSVQsTkwseW91bmdkZTA0LDQ0NDUwMA0KMjAxMCxQSVQsTkwsb2hsZW5ybzAxLDQzOTAwMA0KMjAxMCxQSVQsTkwsam9uZXNnYTAyLDQyNTAwMA0KMjAxMCxQSVQsTkwsbWNjdXRhbjAxLDQyMjUwMA0KMjAxMCxQSVQsTkwsbW9ydG9jaDAyLDQyMjUwMA0KMjAxMCxQSVQsTkwsamFyYW1qYTAxLDQxNjUwMA0KMjAxMCxQSVQsTkwsbWVla2V2MDEsNDEzNTAwDQoyMDEwLFBJVCxOTCxhc2NhbmpvMDEsNDEwMDAwDQoyMDEwLFBJVCxOTCxjbGVtZWplMDEsNDA1MDAwDQoyMDEwLFBJVCxOTCxwZW5uaGEwMSw0MDIwMDANCjIwMTAsUElULE5MLG1jY3V0ZGEwMSw0MDE1MDANCjIwMTAsUElULE5MLHJheW5vam8wMSw0MDAwMDANCjIwMTAsU0ROLE5MLHlvdW5nY2gwMyw2Mzc1MDAwDQoyMDEwLFNETixOTCxnb256YWFkMDEsNDg3NTAwMA0KMjAxMCxTRE4sTkwsZ2FybGFqbzAxLDQ3MDAwMDANCjIwMTAsU0ROLE5MLGJlbGxoZTAxLDQwMDAwMDANCjIwMTAsU0ROLE5MLGNvcnJla2UwMSwzNjAwMDAwDQoyMDEwLFNETixOTCxoYWlyc3NjMDEsMjQ1MDAwMA0KMjAxMCxTRE4sTkwsaGFpcnNqZTAyLDIxMjUwMDANCjIwMTAsU0ROLE5MLGFkYW1zbWkwMywxMDAwMDAwDQoyMDEwLFNETixOTCxlY2tzdGRhMDEsMTAwMDAwMA0KMjAxMCxTRE4sTkwsdG9ycmV5bzAxLDc1MDAwMA0KMjAxMCxTRE4sTkwsc3RhaXJtYTAxLDcwMDAwMA0KMjAxMCxTRE4sTkwsaGVhZGxjaDAxLDQyNzcwMA0KMjAxMCxTRE4sTkwscmljaGFjbDAxLDQyMzcwMA0KMjAxMCxTRE4sTkwsZ3d5bm50bzAyLDQxOTgwMA0KMjAxMCxTRE4sTkwsbXVqaWNlZDAxLDQxOTgwMA0KMjAxMCxTRE4sTkwsY2FicmVldjAxLDQxODgwMA0KMjAxMCxTRE4sTkwsZ3JlZ2VsdTAxLDQxNjUwMA0KMjAxMCxTRE4sTkwsaHVuZGxuaTAxLDQxNTcwMA0KMjAxMCxTRE4sTkwsc3RhdWZ0aTAxLDQxNTEwMA0KMjAxMCxTRE4sTkwsZ2FsbGFzZTAxLDQxMzUwMA0KMjAxMCxTRE4sTkwsdmVuYWJtYTAxLDQxMjgwMA0KMjAxMCxTRE4sTkwsdGhhdGNqbzAxLDQxMjcwMA0KMjAxMCxTRE4sTkwsYmxhbmtreTAxLDQxMDYwMA0KMjAxMCxTRE4sTkwsc2FsYXpvczAxLDQwODUwMA0KMjAxMCxTRE4sTkwsbGF0b3NtYTAxLDQwNzgwMA0KMjAxMCxTRE4sTkwscmFtb3NjZTAxLDQwMTMwMA0KMjAxMCxTRk4sTkwseml0b2JhMDEsMTg1MDAwMDANCjIwMTAsU0ZOLE5MLHJvd2FuYWEwMSwxMzYwMDAwMA0KMjAxMCxTRk4sTkwscmVudGVlZDAxLDEwMDAwMDAwDQoyMDEwLFNGTixOTCxsaW5jZXRpMDEsOTAwMDAwMA0KMjAxMCxTRk4sTkwsd2lsc29icjAxLDY1MDAwMDANCjIwMTAsU0ZOLE5MLGRlcm9zbWEwMSw2MDAwMDAwDQoyMDEwLFNGTixOTCxzYW5jaGZyMDEsNjAwMDAwMA0KMjAxMCxTRk4sTkwsY2Fpbm1hMDEsNDU4MzMzMw0KMjAxMCxTRk4sTkwsbW9saW5iZTAxLDQ1MDAwMDANCjIwMTAsU0ZOLE5MLGFmZmVsamUwMSw0MDAwMDAwDQoyMDEwLFNGTixOTCx1cmliZWp1MDEsMzI1MDAwMA0KMjAxMCxTRk4sTkwsaHVmZmF1MDEsMzAwMDAwMA0KMjAxMCxTRk4sTkwsc2FuY2hqbzAxLDIxMDAwMDANCjIwMTAsU0ZOLE5MLHdlbGxldG8wMSwxMDAwMDAwDQoyMDEwLFNGTixOTCxtZWRkZWJyMDEsODIwMDAwDQoyMDEwLFNGTixOTCxtb3RhZ3UwMSw3NTAwMDANCjIwMTAsU0ZOLE5MLHNhbmRvcGEwMSw0NjUwMDANCjIwMTAsU0ZOLE5MLGxld2lzZnIwMiw0NTUwMDANCjIwMTAsU0ZOLE5MLHRvcnJlYW4wMiw0MjYwMDANCjIwMTAsU0ZOLE5MLGlzaGlrdHIwMSw0MTcwMDANCjIwMTAsU0ZOLE5MLHJvbW9zZTAxLDQxNjUwMA0KMjAxMCxTRk4sTkwsc2NoaWVuYTAxLDQxNjUwMA0KMjAxMCxTRk4sTkwsdmVsZXpldTAxLDQxNjAwMA0KMjAxMCxTRk4sTkwsYm93a2VqbzAxLDQxMDAwMA0KMjAxMCxTRk4sTkwsYnVycmllbTAxLDQxMDAwMA0KMjAxMCxTRk4sTkwsd2hpdGVlbDAzLDQwNTAwMA0KMjAxMCxTRk4sTkwsam9hcXV3YTAxLDQwMDUwMA0KMjAxMCxTRk4sTkwscnVuemxkYTAxLDQwMDUwMA0KMjAxMCxTTE4sTkwsaG9sbGltYTAxLDE2MzMzMzI3DQoyMDEwLFNMTixOTCxjYXJwZWNoMDEsMTU4NDA5NzENCjIwMTAsU0xOLE5MLHB1am9sYWwwMSwxNDU5NTk1Mw0KMjAxMCxTTE4sTkwsbG9oc2VreTAxLDkxODc1MDANCjIwMTAsU0xOLE5MLHBlbm55YnIwMSw3NTAwMDAwDQoyMDEwLFNMTixOTCxsdWR3aXJ5MDEsNTQ1MDAwMA0KMjAxMCxTTE4sTkwsd2FpbndhZDAxLDQ4Mzc1MDANCjIwMTAsU0xOLE5MLG1vbGlueWEwMSw0MzEyNTAwDQoyMDEwLFNMTixOTCxmcmFua3J5MDEsMzA1MDAwMA0KMjAxMCxTTE4sTkwsbWlsbGV0cjAyLDIwMDAwMDANCjIwMTAsU0xOLE5MLHJleWVzZGUwMSwyMDAwMDAwDQoyMDEwLFNMTixOTCxzY2h1bXNrMDEsMjAwMDAwMA0KMjAxMCxTTE4sTkwsbG9wZXpmZTAxLDEwMDAwMDANCjIwMTAsU0xOLE5MLGxhcnVlamEwMSw5NTAwMDANCjIwMTAsU0xOLE5MLG1jY2xla3kwMSw0MjUwMDANCjIwMTAsU0xOLE5MLHJ5YW5icjAxLDQyNTAwMA0KMjAxMCxTTE4sTkwscmFzbXVjbzAxLDQxODAwMA0KMjAxMCxTTE4sTkwsbW90dGVqYTAxLDQxMTAwMA0KMjAxMCxTTE4sTkwsYm9nZ3NtaTAxLDQwMjAwMA0KMjAxMCxTTE4sTkwsaGF3a3NibDAxLDQwMjAwMA0KMjAxMCxTTE4sTkwsY3JhaWdhbDAxLDQwMDAwMA0KMjAxMCxTTE4sTkwsZnJlZXNkYTAxLDQwMDAwMA0KMjAxMCxTTE4sTkwsZ2FyY2lqYTAyLDQwMDAwMA0KMjAxMCxTTE4sTkwsbWF0aGVqbzAyLDQwMDAwMA0KMjAxMCxTTE4sTkwsc3RhdmluaTAxLDQwMDAwMA0KMjAxMCxXQVMsTkwsZHVubmFkMDEsMTIwMDAwMDANCjIwMTAsV0FTLE5MLGd1em1hY3IwMSw4MDAwMDAwDQoyMDEwLFdBUyxOTCxtYXJxdWphMDEsNzUwMDAwMA0KMjAxMCxXQVMsTkwsemltbWVyeTAxLDYzNTAwMDANCjIwMTAsV0FTLE5MLHdpbGxpam8wMyw0NjAwMDAwDQoyMDEwLFdBUyxOTCxjYXBwc21hMDEsMzUwMDAwMA0KMjAxMCxXQVMsTkwscm9kcmlpdjAxLDMwMDAwMDANCjIwMTAsV0FTLE5MLHdhbmdjaDAxLDIwMDAwMDANCjIwMTAsV0FTLE5MLGJydW5lYnIwMSwxNTAwMDAwDQoyMDEwLFdBUyxOTCxoYXJyaXdpMDEsMTUwMDAwMA0KMjAxMCxXQVMsTkwsa2VubmVhZDAxLDEyNTAwMDANCjIwMTAsV0FTLE5MLGJhdGlzbWkwMSwxMDAwMDAwDQoyMDEwLFdBUyxOTCxidXJuZXNlMDEsNzc1MDAwDQoyMDEwLFdBUyxOTCxiZXJnbWphMDEsNzUwMDAwDQoyMDEwLFdBUyxOTCxmbG9yZWplMDIsNzUwMDAwDQoyMDEwLFdBUyxOTCxuaWV2ZXdpMDEsNzAwMDAwDQoyMDEwLFdBUyxOTCxjb3N0ZWNoMDEsNjUwMDAwDQoyMDEwLFdBUyxOTCx3YWxrZXR5MDEsNjUwMDAwDQoyMDEwLFdBUyxOTCxsYW5uYWpvMDEsNDU4MDAwDQoyMDEwLFdBUyxOTCxtb3JnYW55MDEsNDI2NTAwDQoyMDEwLFdBUyxOTCxnb256YWFsMDMsNDE1NTAwDQoyMDEwLFdBUyxOTCxtb2NrZ2EwMSw0MTEwMDANCjIwMTAsV0FTLE5MLG1vcnNlbWkwMSw0MTAwMDANCjIwMTAsV0FTLE5MLHN0YW1tY3IwMSw0MDIwMDANCjIwMTAsV0FTLE5MLGNsaXBwdHkwMSw0MDEwMDANCjIwMTAsV0FTLE5MLHppbW1lam8wMSw0MDEwMDANCjIwMTAsV0FTLE5MLGRlc21vaWEwMSw0MDAwMDANCjIwMTAsV0FTLE5MLGRldHdpcm8wMSw0MDAwMDANCjIwMTAsV0FTLE5MLGVuZ2xpamUwMSw0MDAwMDANCjIwMTAsV0FTLE5MLHRhdmVyd2kwMSw0MDAwMDANCjIwMTEsQkFMLEFMLG1hcmthbmkwMSwxMDYwMDAwMA0KMjAxMSxCQUwsQUwscm9iZXJicjAxLDEwMDAwMDAwDQoyMDExLEJBTCxBTCxndWVycnZsMDEsNzYxMTQ1NQ0KMjAxMSxCQUwsQUwsbGVlZGUwMiw3MjUwMDAwDQoyMDExLEJBTCxBTCxzY290dGx1MDEsNjQwMDAwMA0KMjAxMSxCQUwsQUwsZ29uemFtaTAyLDYwMDAwMDANCjIwMTEsQkFMLEFMLGhhcmR5amowMSw1ODUwMDAwDQoyMDExLEJBTCxBTCxndXRocmplMDEsNTc1MDAwMA0KMjAxMSxCQUwsQUwscmV5bm9tYTAxLDUzMzMzMzMNCjIwMTEsQkFMLEFMLGdyZWdna2UwMSw0MjAwMDAwDQoyMDExLEJBTCxBTCxqb25lc2FkMDEsMzI1MDAwMA0KMjAxMSxCQUwsQUwsdWVoYXJrbzAxLDMwMDAwMDANCjIwMTEsQkFMLEFMLGl6dHVyY2UwMSwxNTAwMDAwDQoyMDExLEJBTCxBTCxtYXR1c2JyMDEsMTM1MDAwMA0KMjAxMSxCQUwsQUwsYWNjYXJqZTAxLDEwODAwMDANCjIwMTEsQkFMLEFMLHBpZWZlMDEsOTg1MDAwDQoyMDExLEJBTCxBTCxqb2huc2ppMDQsOTc1MDAwDQoyMDExLEJBTCxBTCxkdWNoc2p1MDEsNzAwMDAwDQoyMDExLEJBTCxBTCxydXBlam8wMSw0NzUwMDANCjIwMTEsQkFMLEFMLHdpZXRlbWEwMSw0NTIyNTANCjIwMTEsQkFMLEFMLGJlcmdlYnIwMiw0MzQwMDANCjIwMTEsQkFMLEFMLGJlcmtlamEwMSw0MjY1MDANCjIwMTEsQkFMLEFMLGZveGphMDIsNDI0MDAwDQoyMDExLEJBTCxBTCxhbmRpbnJvMDEsNDIxNTAwDQoyMDExLEJBTCxBTCxhcnJpZWphMDEsNDE5MDAwDQoyMDExLEJBTCxBTCx0aWxsbWNoMDEsNDE3MDAwDQoyMDExLEJPUyxBTCxiZWNrZWpvMDIsMTcwMDAwMDANCjIwMTEsQk9TLEFMLGxhY2tlam8wMSwxNTk1MDAwMA0KMjAxMSxCT1MsQUwsY3Jhd2ZjYTAyLDE0ODU3MTQyDQoyMDExLEJPUyxBTCxkcmV3amQwMSwxNDAwMDAwMA0KMjAxMSxCT1MsQUwsb3J0aXpkYTAxLDEyNTAwMDAwDQoyMDExLEJPUyxBTCx5b3VrbGtlMDEsMTIyNTAwMDANCjIwMTEsQk9TLEFMLHBhcGVsam8wMSwxMjAwMDAwMA0KMjAxMSxCT1MsQUwsbWF0c3VkYTAxLDEwMzMzMzMzDQoyMDExLEJPUyxBTCxjYW1lcm1pMDEsNzc1MDAwMA0KMjAxMSxCT1MsQUwsZ29uemFhZDAxLDYzMDAwMDANCjIwMTEsQk9TLEFMLGplbmtzYm8wMSw2MDAwMDAwDQoyMDExLEJPUyxBTCxwZWRyb2R1MDEsNTc1MDAwMA0KMjAxMSxCT1MsQUwsbGVzdGVqbzAxLDU3NTAwMDANCjIwMTEsQk9TLEFMLHNjdXRhbWEwMSw1NTAwMDAwDQoyMDExLEJPUyxBTCx3aGVlbGRhMDEsMzAwMDAwMA0KMjAxMSxCT1MsQUwsZWxsc2JqYTAxLDI0MDAwMDANCjIwMTEsQk9TLEFMLHZhcml0amEwMSwyMDAwMDAwDQoyMDExLEJPUyxBTCx3YWtlZnRpMDEsMjAwMDAwMA0KMjAxMSxCT1MsQUwsdGF6YXdqdTAxLDE1MDAwMDANCjIwMTEsQk9TLEFMLHJleWVzZGUwMSw5MDAwMDANCjIwMTEsQk9TLEFMLGFsYmVybWEwMSw4NzUwMDANCjIwMTEsQk9TLEFMLHNhbHRhamEwMSw3NTAwMDANCjIwMTEsQk9TLEFMLGJ1Y2hoY2wwMSw1NTUwMDANCjIwMTEsQk9TLEFMLGJhcmRkYTAxLDUwNTAwMA0KMjAxMSxCT1MsQUwsbWNkb25kYTAyLDQ3MDAwMA0KMjAxMSxCT1MsQUwsbG93cmlqZTAxLDQ1MDAwMA0KMjAxMSxCT1MsQUwsZG91YnJmZTAxLDQxNzAwMA0KMjAxMSxDSEEsQUwscGVhdnlqYTAxLDE2MDAwMDAwDQoyMDExLENIQSxBTCxidWVocm1hMDEsMTQwMDAwMDANCjIwMTEsQ0hBLEFMLHJpb3NhbDAxLDEyNTAwMDAwDQoyMDExLENIQSxBTCxkdW5uYWQwMSwxMjAwMDAwMA0KMjAxMSxDSEEsQUwsa29uZXJwYTAxLDEyMDAwMDAwDQoyMDExLENIQSxBTCxqYWNrc2VkMDEsODc1MDAwMA0KMjAxMSxDSEEsQUwscGllcnJqdTAxLDg1MDAwMDANCjIwMTEsQ0hBLEFMLGRhbmtzam8wMSw2MDAwMDAwDQoyMDExLENIQSxBTCxxdWVudGNhMDEsNTA1MDAwMA0KMjAxMSxDSEEsQUwsZmxveWRnYTAxLDUwMDAwMDANCjIwMTEsQ0hBLEFMLHRlYWhlbWEwMSw0NzUwMDAwDQoyMDExLENIQSxBTCxjcmFpbmplMDEsNDAwMDAwMA0KMjAxMSxDSEEsQUwsdGhvcm5tYTAxLDMwMDAwMDANCjIwMTEsQ0hBLEFMLHJhbWlyYWwwMywyNzUwMDAwDQoyMDExLENIQSxBTCx2aWNpZWRhMDEsMjI1MDAwMA0KMjAxMSxDSEEsQUwscGllcnphajAxLDIwMDAwMDANCjIwMTEsQ0hBLEFMLHZpenF1b20wMSwxNzUwMDAwDQoyMDExLENIQSxBTCxwZW5hdG8wMywxNjAwMDAwDQoyMDExLENIQSxBTCxvaG1hbndpMDEsMTUwMDAwMA0KMjAxMSxDSEEsQUwsY2FzdHJyYTAxLDEyMDAwMDANCjIwMTEsQ0hBLEFMLGh1bWJlcGgwMSw1MDAwMDANCjIwMTEsQ0hBLEFMLG1pbGxlbGEwMiw1MDAwMDANCjIwMTEsQ0hBLEFMLGJlY2toZ28wMSw0ODUwMDANCjIwMTEsQ0hBLEFMLHNhbnRvc2UwMSw0MzUwMDANCjIwMTEsQ0hBLEFMLGxpbGxpYnIwMSw0MzAwMDANCjIwMTEsQ0hBLEFMLHNhbGVjaDAxLDQyNTAwMA0KMjAxMSxDSEEsQUwsbW9yZWxicjAxLDQxNDAwMA0KMjAxMSxDTEUsQUwsaGFmbmV0cjAxLDEzMDAwMDAwDQoyMDExLENMRSxBTCxzaXplbWdyMDEsNzY2NjY2Ng0KMjAxMSxDTEUsQUwsY2FybW9mYTAxLDYyODc1MDANCjIwMTEsQ0xFLEFMLGNob29zaDAxLDM5NzUwMDANCjIwMTEsQ0xFLEFMLHBlcmV6Y2gwMSwyMjI1MDAwDQoyMDExLENMRSxBTCxjYWJyZWFzMDEsMjAyNTAwMA0KMjAxMSxDTEUsQUwscGVyZXpyYTAxLDEzMzAwMDANCjIwMTEsQ0xFLEFMLGtlYXJuYXUwMSwxMzAwMDAwDQoyMDExLENMRSxBTCxjYWJyZW9yMDEsMTAwMDAwMA0KMjAxMSxDTEUsQUwsc21pdGhqbzA1LDg3MDAwMA0KMjAxMSxDTEUsQUwsZHVyYmljaDAxLDgwMDAwMA0KMjAxMSxDTEUsQUwsZXZlcmVhZDAxLDcwMDAwMA0KMjAxMSxDTEUsQUwsYnVja3RyMDEsNjI1MDAwDQoyMDExLENMRSxBTCxkdW5jYXNoMDEsNTAwMDAwDQoyMDExLENMRSxBTCxoYW5uYWphMDEsNTAwMDAwDQoyMDExLENMRSxBTCxtYXN0ZWp1MDEsNDY4NDAwDQoyMDExLENMRSxBTCxzaXBwdG8wMSw0MzY4MDANCjIwMTEsQ0xFLEFMLGNyb3dldHIwMSw0MzU3MDANCjIwMTEsQ0xFLEFMLHRhbGJvbWkwMSw0MzE3MDANCjIwMTEsQ0xFLEFMLGxhcG9ybWEwMSw0MzE0MDANCjIwMTEsQ0xFLEFMLG1hcnNvbG8wMSw0MjQzMDANCjIwMTEsQ0xFLEFMLGRvbmFsamEwMSw0MjMyMDANCjIwMTEsQ0xFLEFMLGJyYW50bWkwMiw0MjE4MDANCjIwMTEsQ0xFLEFMLGhlcnJtZnIwMSw0MTk4MDANCjIwMTEsQ0xFLEFMLHRvbWxpam8wMSw0MTcyMDANCjIwMTEsQ0xFLEFMLHNhbnRhY2EwMSw0MTY2MDANCjIwMTEsQ0xFLEFMLGNhcnJhY2EwMSw0MTU4MDANCjIwMTEsQ0xFLEFMLGdlcm1hanUwMSw0MTU2MDANCjIwMTEsQ0xFLEFMLHBlc3RhdmkwMSw0MTQxMDANCjIwMTEsREVULEFMLGNhYnJlbWkwMSwyMDAwMDAwMA0KMjAxMSxERVQsQUwsZ3VpbGxjYTAxLDEyOTIyMjMxDQoyMDExLERFVCxBTCx2ZXJsYWp1MDEsMTI4NTAwMDANCjIwMTEsREVULEFMLG1hcnRpdmkwMSwxMjAwMDAwMA0KMjAxMSxERVQsQUwsb3Jkb25tYTAxLDEwMDAwMDAwDQoyMDExLERFVCxBTCx2YWx2ZWpvMDEsNzAwMDAwMA0KMjAxMSxERVQsQUwsYmVub2lqbzAxLDU1MDAwMDANCjIwMTEsREVULEFMLGluZ2VicjAxLDU1MDAwMDANCjIwMTEsREVULEFMLHBlcmFsamgwMSw1MjUwMDAwDQoyMDExLERFVCxBTCxwZW5ueWJyMDEsMzAwMDAwMA0KMjAxMSxERVQsQUwscG9yY2VyaTAxLDE1MzYwMDANCjIwMTEsREVULEFMLHp1bWF5am8wMSwxNDAwMDAwDQoyMDExLERFVCxBTCxzYW50aXJhMDEsMTM1MDAwMA0KMjAxMSxERVQsQUwscmFidXJyeTAxLDEzMDAwMDANCjIwMTEsREVULEFMLHRob21hYnIwMSw4MDAwMDANCjIwMTEsREVULEFMLHNjaGVybWEwMSw2MDAwMDANCjIwMTEsREVULEFMLGNva2VwaDAxLDQ0MDAwMA0KMjAxMSxERVQsQUwsamFja3NhdTAxLDQ0MDAwMA0KMjAxMSxERVQsQUwsZ29uemFlbjAxLDQzNTAwMA0KMjAxMSxERVQsQUwsYm9lc2NicjAxLDQzMDAwMA0KMjAxMSxERVQsQUwscGVycnlyeTAxLDQzMDAwMA0KMjAxMSxERVQsQUwsYXZpbGFhbDAxLDQyNTAwMA0KMjAxMSxERVQsQUwsa2VsbHlkbzAxLDQyMzAwMA0KMjAxMSxERVQsQUwscmh5bWV3aTAxLDQxOTAwMA0KMjAxMSxERVQsQUwsc2NobGVkYTAxLDQxODAwMA0KMjAxMSxERVQsQUwsd2VsbHNjYTAxLDQxODAwMA0KMjAxMSxERVQsQUwsdmlsbGFicjAyLDQxNDAwMA0KMjAxMSxLQ0EsQUwsc29yaWFqbzAxLDQwMDAwMDANCjIwMTEsS0NBLEFMLGtlbmRhamEwMSwzNzUwMDAwDQoyMDExLEtDQSxBTCxidXRsZWJpMDMsMzUwMDAwMA0KMjAxMSxLQ0EsQUwsZGF2aWVreTAxLDMyMDAwMDANCjIwMTEsS0NBLEFMLGZyYW5jamUwMiwyNTAwMDAwDQoyMDExLEtDQSxBTCxjaGVuYnIwMSwyMDAwMDAwDQoyMDExLEtDQSxBTCxmcmFuY2plMDEsMjAwMDAwMA0KMjAxMSxLQ0EsQUwsaG9jaGVsdTAxLDE3NjAwMDANCjIwMTEsS0NBLEFMLHRlamVkcm8wMSwxNTUwMDAwDQoyMDExLEtDQSxBTCxjcm93YWEwMSwxNDAwMDAwDQoyMDExLEtDQSxBTCxnb3Jkb2FsMDEsMTQwMDAwMA0KMjAxMSxLQ0EsQUwsY2FicmVtZTAxLDEyNTAwMDANCjIwMTEsS0NBLEFMLGJldGVtd2kwMSwxMDAwMDAwDQoyMDExLEtDQSxBTCx0cmVhbm1hMDEsODUwMDAwDQoyMDExLEtDQSxBTCxwZW5hYnIwMSw2NjAwMDANCjIwMTEsS0NBLEFMLGF2aWxlbWkwMSw2NDAwMDANCjIwMTEsS0NBLEFMLG1haWVybWkwMSw0NTkwMDANCjIwMTEsS0NBLEFMLGdldHpjaDAxLDQ0MzAwMA0KMjAxMSxLQ0EsQUwsZXNjb2JhbDAyLDQyODAwMA0KMjAxMSxLQ0EsQUwsdGV4ZWlrYTAxLDQyNjAwMA0KMjAxMSxLQ0EsQUwsb3N1bGxzZTAxLDQyMDUwMA0KMjAxMSxLQ0EsQUwsa2FhaWhraTAxLDQxOTAwMA0KMjAxMSxLQ0EsQUwsamVmZnJqZTAxLDQxNDUwMA0KMjAxMSxLQ0EsQUwsY29sbGl0aTAxLDQxNDAwMA0KMjAxMSxLQ0EsQUwsZHlzb25qYTAxLDQxNDAwMA0KMjAxMSxLQ0EsQUwsYWRjb2NuYTAxLDQxNDAwMA0KMjAxMSxMQUEsQUwsd2VsbHN2ZTAxLDI2MTg3NTAwDQoyMDExLExBQSxBTCxodW50ZXRvMDEsMTg1MDAwMDANCjIwMTEsTEFBLEFMLGhhcmVuZGEwMSwxMjc1MDAwMA0KMjAxMSxMQUEsQUwsa2F6bWlzYzAxLDEyMDAwMDAwDQoyMDExLExBQSxBTCxhYnJldWJvMDEsOTAwMDAwMA0KMjAxMSxMQUEsQUwscGluZWlqbzAxLDgwMDAwMDANCjIwMTEsTEFBLEFMLHNhbnRhZXIwMSw4MDAwMDAwDQoyMDExLExBQSxBTCx3ZWF2ZWplMDIsNzM2NTAwMA0KMjAxMSxMQUEsQUwscm9kbmVmZTAxLDU1MDAwMDANCjIwMTEsTEFBLEFMLGRvd25zc2MwMSw1MDAwMDAwDQoyMDExLExBQSxBTCx0YWthaGhpMDEsMzgwMDAwMA0KMjAxMSxMQUEsQUwsa2VuZHJobzAxLDMzMDAwMDANCjIwMTEsTEFBLEFMLGl6dHVybWEwMSwzMjY2NjY2DQoyMDExLExBQSxBTCxheWJhcmVyMDEsMzAwMDAwMA0KMjAxMSxMQUEsQUwsbW9yYWxrZTAxLDI5NzUwMDANCjIwMTEsTEFBLEFMLGNhbGxhYWwwMSwyMDAwMDAwDQoyMDExLExBQSxBTCxtYXRoaWplMDEsMTcwMDAwMA0KMjAxMSxMQUEsQUwsd2lsbGlyZTAzLDc3NTAwMA0KMjAxMSxMQUEsQUwsamVwc2VrZTAxLDQzNTAwMA0KMjAxMSxMQUEsQUwsYnVsZ2VqYTAxLDQyMzAwMA0KMjAxMSxMQUEsQUwsd29vZGJyMDEsNDIwMDAwDQoyMDExLExBQSxBTCx0aG9tcHJpMDMsNDE4MDAwDQoyMDExLExBQSxBTCx3aWxzb2JvMDIsNDE2MDAwDQoyMDExLExBQSxBTCxib3VyanBlMDEsNDE0MDAwDQoyMDExLExBQSxBTCxjYXNzZWJvMDEsNDE0MDAwDQoyMDExLExBQSxBTCxjb25nZWhhMDEsNDE0MDAwDQoyMDExLExBQSxBTCxrb2hubWkwMSw0MTQwMDANCjIwMTEsTEFBLEFMLHBldHRpY2gwMSw0MTQwMDANCjIwMTEsTEFBLEFMLHNhbmRvZnIwMSw0MTQwMDANCjIwMTEsTEFBLEFMLHRydW1ibWEwMSw0MTQwMDANCjIwMTEsTEFBLEFMLHdhbGRlam8wMSw0MTQwMDANCjIwMTEsTUlOLEFMLG1hdWVyam8wMSwyMzAwMDAwMA0KMjAxMSxNSU4sQUwsbW9ybmVqdTAxLDE1MDAwMDAwDQoyMDExLE1JTixBTCxuYXRoYWpvMDEsMTEyNTAwMDANCjIwMTEsTUlOLEFMLGN1ZGR5bWkwMSwxMDUwMDAwMA0KMjAxMSxNSU4sQUwscGF2YW5jYTAxLDgwMDAwMDANCjIwMTEsTUlOLEFMLGNhcHBzbWEwMSw3MTUwMDAwDQoyMDExLE1JTixBTCx5b3VuZ2RlMDMsNTM3NTAwMA0KMjAxMSxNSU4sQUwsa3ViZWxqYTAxLDUyNTAwMDANCjIwMTEsTUlOLEFMLGJha2Vyc2MwMiw1MDAwMDAwDQoyMDExLE1JTixBTCxsaXJpYWZyMDEsNDMwMDAwMA0KMjAxMSxNSU4sQUwsYmxhY2tuaTAxLDMwMDAwMDANCjIwMTEsTUlOLEFMLG5pc2hpdHMwMSwzMDAwMDAwDQoyMDExLE1JTixBTCx0aG9tZWppMDEsMzAwMDAwMA0KMjAxMSxNSU4sQUwsc2xvd2VrZTAxLDI3MDAwMDANCjIwMTEsTUlOLEFMLHNwYW5kZTAxLDEwMDAwMDANCjIwMTEsTUlOLEFMLGNhc2lsYWwwMSw4NjUwMDANCjIwMTEsTUlOLEFMLHBlcmtpZ2wwMSw3MDAwMDANCjIwMTEsTUlOLEFMLHJlcGtvamEwMSw2MDAwMDANCjIwMTEsTUlOLEFMLGR1ZW5zYnIwMSw0NjI1MDANCjIwMTEsTUlOLEFMLG1pamFyam8wMSw0NDUwMDANCjIwMTEsTUlOLEFMLHZhbGVuZGEwMSw0Mzc1MDANCjIwMTEsTUlOLEFMLGJ1dGVyZHIwMSw0MjkwMDANCjIwMTEsTUlOLEFMLGh1Z2hlZHUwMSw0MjkwMDANCjIwMTEsTUlOLEFMLHRvbGJlbWEwMSw0MjUwMDANCjIwMTEsTUlOLEFMLG1hbnNoamUwMSw0MTkwMDANCjIwMTEsTllBLEFMLHJvZHJpYWwwMSwzMjAwMDAwMA0KMjAxMSxOWUEsQUwsc2FiYXRjYzAxLDI0Mjg1NzE0DQoyMDExLE5ZQSxBTCx0ZWl4ZW1hMDEsMjMxMjUwMDANCjIwMTEsTllBLEFMLGJ1cm5lYWowMSwxNjUwMDAwMA0KMjAxMSxOWUEsQUwscml2ZXJtYTAxLDE0OTExNzAwDQoyMDExLE5ZQSxBTCxqZXRlcmRlMDEsMTQ3MjkzNjQNCjIwMTEsTllBLEFMLHBvc2Fkam8wMSwxMzEwMDAwMA0KMjAxMSxOWUEsQUwsY2Fub3JvMDEsMTAwMDAwMDANCjIwMTEsTllBLEFMLHNvcmlhcmEwMSwxMDAwMDAwMA0KMjAxMSxOWUEsQUwsc3dpc2huaTAxLDkxMDAwMDANCjIwMTEsTllBLEFMLGdyYW5kY3UwMSw4MjUwMDAwDQoyMDExLE5ZQSxBTCxtYXJ0ZWRhMDEsNDAwMDAwMA0KMjAxMSxOWUEsQUwsbWFydGlydTAxLDQwMDAwMDANCjIwMTEsTllBLEFMLGZlbGljcGUwMSwzNzUwMDAwDQoyMDExLE5ZQSxBTCxodWdoZXBoMDEsMjcwMDAwMA0KMjAxMSxOWUEsQUwsY2hhdmVlcjAxLDE1MDAwMDANCjIwMTEsTllBLEFMLGpvbmVzYW4wMSwxNTAwMDAwDQoyMDExLE5ZQSxBTCxnYXJjaWZyMDIsMTUwMDAwMA0KMjAxMSxOWUEsQUwsY2hhbWJqbzAzLDE0MDAwMDANCjIwMTEsTllBLEFMLGxvZ2FuYm8wMiwxMjAwMDAwDQoyMDExLE5ZQSxBTCxjb2xvbmJhMDEsOTAwMDAwDQoyMDExLE5ZQSxBTCxheWFsYWx1MDEsNjUwMDAwDQoyMDExLE5ZQSxBTCxnYXJkbmJyMDEsNTI5NTAwDQoyMDExLE5ZQSxBTCxyb2JlcmRhMDgsNDYwNDUwDQoyMDExLE5ZQSxBTCxjZXJ2ZWZyMDEsNDU1NzAwDQoyMDExLE5ZQSxBTCxtb2xpbmd1MDEsNDU1MDAwDQoyMDExLE5ZQSxBTCxub3ZhaXYwMSw0MzI5MDANCjIwMTEsTllBLEFMLGN1cnRpY28wMSw0MjA0MDANCjIwMTEsTllBLEFMLG51bmV6ZWQwMiw0MTkzMDANCjIwMTEsT0FLLEFMLGRlamVzZGEwMSw2MDAwMDAwDQoyMDExLE9BSyxBTCxlbGxpc21hMDEsNjAwMDAwMA0KMjAxMSxPQUssQUwsd2lsbGlqbzAzLDYwMDAwMDANCjIwMTEsT0FLLEFMLGNyaXNwY28wMSw1NzUwMDAwDQoyMDExLE9BSyxBTCxmdWVudGJyMDEsNTAwMDAwMA0KMjAxMSxPQUssQUwsa291em1rZTAxLDQ3NTAwMDANCjIwMTEsT0FLLEFMLG1hdHN1aGkwMSw0MjUwMDAwDQoyMDExLE9BSyxBTCxiYWxmb2dyMDEsMzc1MDAwMA0KMjAxMSxPQUssQUwsc3V6dWtrdTAxLDM0Mzc1MDANCjIwMTEsT0FLLEFMLGJyYWRlZGEwMSwzMzUwMDAwDQoyMDExLE9BSyxBTCxqYWNrc2NvMDEsMzIwMDAwMA0KMjAxMSxPQUssQUwsd3VlcnRtaTAxLDI4MDAwMDANCjIwMTEsT0FLLEFMLGhhcmRlcmkwMSwxNTAwMDAwDQoyMDExLE9BSyxBTCxicmVzbGNyMDEsMTQwMDAwMA0KMjAxMSxPQUssQUwsc3dlZW5yeTAxLDE0MDAwMDANCjIwMTEsT0FLLEFMLGFuZGVyYnIwNCwxMjUwMDAwDQoyMDExLE9BSyxBTCx6aWVnbGJyMDEsMTI1MDAwMA0KMjAxMSxPQUssQUwsbWNjYXJicjAxLDEwMDAwMDANCjIwMTEsT0FLLEFMLGxhcm9jYW4wMSw2MDAwMDANCjIwMTEsT0FLLEFMLGJhaWxlYW4wMSw0NjUwMDANCjIwMTEsT0FLLEFMLGNhaGlsdHIwMSw0NDAwMDANCjIwMTEsT0FLLEFMLGJhcnRvZGEwMiw0MjUwMDANCjIwMTEsT0FLLEFMLHJvc2FsYWQwMSw0MjUwMDANCjIwMTEsT0FLLEFMLGJsZXZpamUwMSw0MjAwMDANCjIwMTEsT0FLLEFMLHBlbm5pY2wwMSw0MjAwMDANCjIwMTEsT0FLLEFMLHBvd2VsbGEwMSw0MjAwMDANCjIwMTEsT0FLLEFMLGdvbnphZ2kwMSw0MjAwMDANCjIwMTEsT0FLLEFMLGNyYW1lYm8wMSw0MTQwMDANCjIwMTEsU0VBLEFMLHN1enVraWMwMSwxODAwMDAwMA0KMjAxMSxTRUEsQUwsYnJhZGxtaTAxLDEzMDAwMDAwDQoyMDExLFNFQSxBTCxoZXJuYWZlMDIsMTE3MDAwMDANCjIwMTEsU0VBLEFMLGZpZ2dpY2gwMSw5NTAwMDAwDQoyMDExLFNFQSxBTCx3aWxzb2phMDIsNTAwMDAwMA0KMjAxMSxTRUEsQUwsYWFyZHNkYTAxLDQ1MDAwMDANCjIwMTEsU0VBLEFMLGd1dGllZnIwMSw0MzEyNTAwDQoyMDExLFNFQSxBTCxjdXN0amEwMSwyNTAwMDAwDQoyMDExLFNFQSxBTCxvbGl2b21pMDEsMjUwMDAwMA0KMjAxMSxTRUEsQUwsdmFyZ2FqYTAxLDI0NTAwMDANCjIwMTEsU0VBLEFMLGxlYWd1YnIwMSwyMjUwMDAwDQoyMDExLFNFQSxBTCxiZWRhcmVyMDEsMTAwMDAwMA0KMjAxMSxTRUEsQUwscmF5Y2gwMSwxMDAwMDAwDQoyMDExLFNFQSxBTCxyeWFuYnIwMSwxMDAwMDAwDQoyMDExLFNFQSxBTCx3cmlnaGphMDEsOTAwMDAwDQoyMDExLFNFQSxBTCxrZW5uZWFkMDEsNzUwMDAwDQoyMDExLFNFQSxBTCxyb2RyaWx1MDEsNjAwMDAwDQoyMDExLFNFQSxBTCxsYW5nZXJ5MDEsNTI1MDAwDQoyMDExLFNFQSxBTCxmaXN0ZWRvMDEsNDM2NTAwDQoyMDExLFNFQSxBTCxsYWZmZWFhMDEsNDMxNjAwDQoyMDExLFNFQSxBTCxwYXVsZWRhMDEsNDIyMDAwDQoyMDExLFNFQSxBTCxrZWxsZXNoMDEsNDIwMDAwDQoyMDExLFNFQSxBTCxzYXVuZG1pMDEsNDIwMDAwDQoyMDExLFNFQSxBTCxzbW9ha2p1MDEsNDE5MDAwDQoyMDExLFNFQSxBTCxtb29yZWFkMDEsNDE3NTAwDQoyMDExLFNFQSxBTCxtYW5naW1hMDEsNDE0NTAwDQoyMDExLFNFQSxBTCxsdWVrZWpvMDEsNDE0MDAwDQoyMDExLFNFQSxBTCxwaW5lZG1pMDEsNDE0MDAwDQoyMDExLFNFQSxBTCx3aWxoZXRvMDEsNDE0MDAwDQoyMDExLFRCQSxBTCxkYW1vbmpvMDEsNTI1MDAwMA0KMjAxMSxUQkEsQUwsdXB0b25iajAxLDQ4MjUwMDANCjIwMTEsVEJBLEFMLHpvYnJpYmUwMSw0Njg3MzAwDQoyMDExLFRCQSxBTCxzaGllbGphMDIsNDI1MDAwMA0KMjAxMSxUQkEsQUwsc2hvcHBrZTAxLDMwMDAwMDANCjIwMTEsVEJBLEFMLGZhcm5za3kwMSwyNjAwMDAwDQoyMDExLFRCQSxBTCxwcmljZWRhMDEsMjA4NDY3MQ0KMjAxMSxUQkEsQUwscmFtaXJtYTAyLDIwMjAwMDANCjIwMTEsVEJBLEFMLGxvbmdvZXYwMSwyMDAwMDAwDQoyMDExLFRCQSxBTCxob3dlbGpwMDEsMTEwMDAwMA0KMjAxMSxUQkEsQUwsam9obnNkYTA2LDEwMDAwMDANCjIwMTEsVEJBLEFMLHBlcmFsam8wMSw5MjUwMDANCjIwMTEsVEJBLEFMLHNvbm5hYW4wMSw5MTI1MDANCjIwMTEsVEJBLEFMLG5pZW1hamUwMSw5MDMwMDANCjIwMTEsVEJBLEFMLGNydXpqdTAyLDg1MDAwMA0KMjAxMSxUQkEsQUwsZGF2aXN3YTAxLDQzNDEwMA0KMjAxMSxUQkEsQUwscm9kcmlzZTAxLDQyODYwMA0KMjAxMSxUQkEsQUwsamFzb2pvMDEsNDI3MjAwDQoyMDExLFRCQSxBTCxqb3ljZW1hMDEsNDI2NTAwDQoyMDExLFRCQSxBTCxicmlnbnJlMDEsNDI1NDAwDQoyMDExLFRCQSxBTCxydXNzZWFkMDEsNDIwODAwDQoyMDExLFRCQSxBTCxoZWxsaWplMDEsNDE4NDAwDQoyMDExLFRCQSxBTCxmdWxkc2EwMSw0MTgzMDANCjIwMTEsVEJBLEFMLHJhbW9zY2UwMSw0MTY3MDANCjIwMTEsVEJBLEFMLG1jZ2VlamEwMSw0MTUyMDANCjIwMTEsVEJBLEFMLGpvaG5zZWwwMiw0MTQ5MDANCjIwMTEsVEVYLEFMLHlvdW5nbWkwMiwxNjE3NDk3NA0KMjAxMSxURVgsQUwsYmVsdHJhZDAxLDE0MDAwMDAwDQoyMDExLFRFWCxBTCxoYW1pbGpvMDMsODc1MDAwMA0KMjAxMSxURVgsQUwsd2lsc29jajAxLDcwMDAwMDANCjIwMTEsVEVYLEFMLGtpbnNsaWEwMSw2MjAwMDAwDQoyMDExLFRFWCxBTCxuYXBvbG1pMDEsNTgwMDAwMA0KMjAxMSxURVgsQUwsZmVsZG1zYzAxLDQ0MDAwMDANCjIwMTEsVEVYLEFMLHJob2RlYXIwMSwzOTAwMDAwDQoyMDExLFRFWCxBTCxjcnV6bmUwMiwzNjUwMDAwDQoyMDExLFRFWCxBTCxvbGl2ZWRhMDIsMzI1MDAwMA0KMjAxMSxURVgsQUwsdG9ycmV5bzAxLDMwMDAwMDANCjIwMTEsVEVYLEFMLHdlYmJicjAxLDMwMDAwMDANCjIwMTEsVEVYLEFMLG11cnBoZGEwNywyNDAwMDAwDQoyMDExLFRFWCxBTCxsZXdpc2NvMDEsMjAwMDAwMA0KMjAxMSxURVgsQUwsb2RheWRhMDEsMTI1MTAwMA0KMjAxMSxURVgsQUwsbG93ZW1hMDEsMTIwMDAwMA0KMjAxMSxURVgsQUwsYnVzaGRhMDEsMTAwMDAwMA0KMjAxMSxURVgsQUwsYmxhbmNhbjAxLDUyMDAwMA0KMjAxMSxURVgsQUwsYm9yYm9qdTAxLDQ5MDAwMA0KMjAxMSxURVgsQUwsZmVsaXpuZTAxLDQ1NzE2MA0KMjAxMSxURVgsQUwsYW5kcnVlbDAxLDQ1MjE4MA0KMjAxMSxURVgsQUwsaHVudGV0bzAyLDQ0MjE2MA0KMjAxMSxURVgsQUwsaG9sbGFkZTAxLDQzMTgxMA0KMjAxMSxURVgsQUwsb2dhbmRhbDAxLDQzMDE1MA0KMjAxMSxURVgsQUwsaGFycmltYTAxLDQyODgzMA0KMjAxMSxURVgsQUwsbW9yZWxtaTAxLDQyNjAwMA0KMjAxMSxURVgsQUwsc3Ryb3BwZTAxLDQxNjAwMA0KMjAxMSxURVgsQUwsYmVsdHJvbTAxLDQxNTAwMA0KMjAxMSxURVgsQUwsdG9iaW5tYTAxLDQxNDAwMA0KMjAxMSxUT1IsQUwsYmF1dGlqbzAyLDgwMDAwMDANCjIwMTEsVE9SLEFMLHJpdmVyanUwMSw1MjUwMDAwDQoyMDExLFRPUixBTCxsaW5kYWQwMSw1MTUwMDAwDQoyMDExLFRPUixBTCxoaWxsYWEwMSw1MDAwMDAwDQoyMDExLFRPUixBTCxmcmFuY2ZyMDEsNDAwMDAwMA0KMjAxMSxUT1IsQUwsZnJhc29qYTAxLDM1MDAwMDANCjIwMTEsVE9SLEFMLHJhdWNoam8wMSwzNTAwMDAwDQoyMDExLFRPUixBTCxkb3RlbG9jMDEsMzAwMDAwMA0KMjAxMSxUT1IsQUwsZXNjb2J5dTAxLDI5MDAwMDANCjIwMTEsVE9SLEFMLGRhdmlzcmEwMSwyNTAwMDAwDQoyMDExLFRPUixBTCxlbmNhcmVkMDEsMjUwMDAwMA0KMjAxMSxUT1IsQUwsbW9ycm9icjAxLDIzMDAwMDANCjIwMTEsVE9SLEFMLGNhbXBzaDAxLDIyNTAwMDANCjIwMTEsVE9SLEFMLG1jZG9uam8wMywxNTAwMDAwDQoyMDExLFRPUixBTCx2aWxsYWNhMDEsMTQxNTAwMA0KMjAxMSxUT1IsQUwsbW9saW5qbzAxLDEyMDAwMDANCjIwMTEsVE9SLEFMLGphbnNzY2EwMSwxMDk1MDAwDQoyMDExLFRPUixBTCxyb21lcnJpMDEsMTAwMDAwMA0KMjAxMSxUT1IsQUwscGF0dGVjbzAxLDkwMDAwMA0KMjAxMSxUT1IsQUwsbGl0c2NqZTAxLDgzMDAwMA0KMjAxMSxUT1IsQUwsY2FybHNqZTAxLDQ1MDAwMA0KMjAxMSxUT1IsQUwsbWNnb3dkdTAxLDQ1MDAwMA0KMjAxMSxUT1IsQUwsY2VjaWxicjAxLDQ0MzEwMA0KMjAxMSxUT1IsQUwscmV5ZXNqbzAzLDQzOTEwMA0KMjAxMSxUT1IsQUwsbml4amEwMSw0MzgxMDANCjIwMTEsVE9SLEFMLHB1cmNlZGEwMSw0MzY0MDANCjIwMTEsVE9SLEFMLHNuaWRldHIwMSw0MzU4MDANCjIwMTEsVE9SLEFMLHJ6ZXBjbWEwMSw0Mjk2MDANCjIwMTEsVE9SLEFMLG1jY295bWkwMSw0MjIzMDANCjIwMTEsVE9SLEFMLGFyZW5janAwMSw0MTc0MDANCjIwMTEsVE9SLEFMLGRyYWJla3kwMSw0MTYwMDANCjIwMTEsQVJJLE5MLGpvaG5za2UwNSw1ODUwMDAwDQoyMDExLEFSSSxOTCxzYXVuZGpvMDEsNTUwMDAwMA0KMjAxMSxBUkksTkwseW91bmdjaDA0LDUyMDAwMDANCjIwMTEsQVJJLE5MLGRyZXdzdDAxLDQ2NTAwMDANCjIwMTEsQVJJLE5MLHVwdG9uanUwMSw0NDU4MzMzDQoyMDExLEFSSSxOTCxwdXR6amowMSw0MDAwMDAwDQoyMDExLEFSSSxOTCxkdWtlemEwMSwzNTAwMDAwDQoyMDExLEFSSSxOTCxtb250ZW1pMDEsMzIwMDAwMA0KMjAxMSxBUkksTkwsbW9yYW1lMDEsMjM1MDAwMA0KMjAxMSxBUkksTkwsZ2FsYXJhcjAxLDIzMDAwMDANCjIwMTEsQVJJLE5MLGhlaWxtYWEwMSwyMDAwMDAwDQoyMDExLEFSSSxOTCxuYWR5eGEwMSwxNzUwMDAwDQoyMDExLEFSSSxOTCxibHVtZ2UwMSwxMzUwMDAwDQoyMDExLEFSSSxOTCxibGFuY2hlMDEsMTAwMDAwMA0KMjAxMSxBUkksTkwsYnJhbnlydTAxLDEwMDAwMDANCjIwMTEsQVJJLE5MLGJsb29td2kwMSw5MDAwMDANCjIwMTEsQVJJLE5MLGd1dGllanUwMSw0MzA1MDANCjIwMTEsQVJJLE5MLHBhcnJhZ2UwMSw0MjYwMDANCjIwMTEsQVJJLE5MLGhlcm5hZGEwMSw0MjM1MDANCjIwMTEsQVJJLE5MLHJvYmVycnkwMSw0MjM1MDANCjIwMTEsQVJJLE5MLGtlbm5laWEwMSw0MjMwMDANCjIwMTEsQVJJLE5MLG1pcmFuanUwMSw0MjAwMDANCjIwMTEsQVJJLE5MLGh1ZHNvZGEwMSw0MTkwMDANCjIwMTEsQVJJLE5MLGVucmlnYmEwMSw0MTgwMDANCjIwMTEsQVJJLE5MLGRlbWVsc2EwMSw0MTcwMDANCjIwMTEsQVJJLE5MLG1pY2tva2EwMSw0MTcwMDANCjIwMTEsQVJJLE5MLHBhdGVyam8wMSw0MTQwMDANCjIwMTEsQVRMLE5MLGxvd2VkZTAxLDE1MDAwMDAwDQoyMDExLEFUTCxOTCxqb25lc2NoMDYsMTQwMDAwMDANCjIwMTEsQVRMLE5MLHVnZ2xhZGEwMSw5MTQ2OTQyDQoyMDExLEFUTCxOTCxodWRzb3RpMDEsOTAwMDAwMA0KMjAxMSxBVEwsTkwsbWNsb3VuYTAxLDcwMDAwMDANCjIwMTEsQVRMLE5MLG1jY2FuYnIwMSw2NzAwMDAwDQoyMDExLEFUTCxOTCxsaW5lYnNjMDEsNTUwMDAwMA0KMjAxMSxBVEwsTkwsanVycmpqYTAxLDMyNTAwMDANCjIwMTEsQVRMLE5MLHByYWRvbWEwMSwzMTAwMDAwDQoyMDExLEFUTCxOTCxnb256YWFsMDIsMjUwMDAwMA0KMjAxMSxBVEwsTkwsbW95bGFwZTAxLDIwMDAwMDANCjIwMTEsQVRMLE5MLHJvc3NkYTAxLDE2MjUwMDANCjIwMTEsQVRMLE5MLGhpbnNrZXIwMSwxMzUwMDAwDQoyMDExLEFUTCxOTCxzaGVycmdlMDEsMTIwMDAwMA0KMjAxMSxBVEwsTkwsb2ZsYWhlcjAxLDg5NTAwMA0KMjAxMSxBVEwsTkwsaGV5d2FqYTAxLDQ5NjUwMA0KMjAxMSxBVEwsTkwsaGFuc290bzAxLDQ1NjUwMA0KMjAxMSxBVEwsTkwsbWVkbGVrcjAxLDQyOTUwMA0KMjAxMSxBVEwsTkwsdmVudGVqbzAxLDQyOTUwMA0KMjAxMSxBVEwsTkwsY29ucmFicjAxLDQyNzI1MA0KMjAxMSxBVEwsTkwsa2ltYnJjcjAxLDQxOTAwMA0KMjAxMSxBVEwsTkwsbWFydGljcjAxLDQxOTAwMA0KMjAxMSxBVEwsTkwsYmVhY2hicjAxLDQxNjUwMA0KMjAxMSxBVEwsTkwsZnJlZW1mcjAxLDQxNDAwMA0KMjAxMSxBVEwsTkwsaGlja3NicjAxLDQxNDAwMA0KMjAxMSxBVEwsTkwseW91bmdtYTAyLDQxNDAwMA0KMjAxMSxDSE4sTkwsc29yaWFhbDAxLDE5MDAwMDAwDQoyMDExLENITixOTCx6YW1icmNhMDEsMTg4NzUwMDANCjIwMTEsQ0hOLE5MLHJhbWlyYXIwMSwxNDYwMDAwMA0KMjAxMSxDSE4sTkwsZnVrdWRrbzAxLDE0NTAwMDAwDQoyMDExLENITixOTCxkZW1wc3J5MDEsMTM1MDAwMDANCjIwMTEsQ0hOLE5MLHBlbmFjYTAxLDk5NTk5OTYNCjIwMTEsQ0hOLE5MLGdhcnphbWEwMSw1OTUwMDAwDQoyMDExLENITixOTCxieXJkbWEwMSw1NTAwMDAwDQoyMDExLENITixOTCxncmFib2pvMDIsNDgwMDAwMA0KMjAxMSxDSE4sTkwsc2FtYXJqZTAxLDMzMDAwMDANCjIwMTEsQ0hOLE5MLHNvdG9nZTAxLDMwMDAwMDANCjIwMTEsQ0hOLE5MLG1hcm1vY2EwMSwyNTMzMzMzDQoyMDExLENITixOTCxtYXJzaHNlMDEsMTYwMDAwMA0KMjAxMSxDSE4sTkwsd29vZGtlMDIsMTUwMDAwMA0KMjAxMSxDSE4sTkwsYmFrZXJqZTAzLDExNzUwMDANCjIwMTEsQ0hOLE5MLGpvaG5zcmUwMiw5MDAwMDANCjIwMTEsQ0hOLE5MLGhpbGxrbzAxLDg1MDAwMA0KMjAxMSxDSE4sTkwsd2VsbHNyYTAxLDQ3NTAwMA0KMjAxMSxDSE4sTkwsZGV3aXRibDAxLDQ2MDAwMA0KMjAxMSxDSE4sTkwsY2FzdHJzdDAxLDQ0MDAwMA0KMjAxMSxDSE4sTkwsY29sdml0eTAxLDQ0MDAwMA0KMjAxMSxDSE4sTkwsY2FzaG5hbjAxLDQyNzUwMA0KMjAxMSxDSE4sTkwscnVzc2VqYTAyLDQyNzUwMA0KMjAxMSxDSE4sTkwsYmFybmVkYTAxLDQxNzAwMA0KMjAxMSxDSE4sTkwsbWF0ZW9tYTAxLDQxNzAwMA0KMjAxMSxDSU4sTkwsY29yZGVmcjAxLDEyMTI1MDAwDQoyMDExLENJTixOTCxwaGlsbGJyMDEsMTE0Mzc1MDANCjIwMTEsQ0lOLE5MLHJvbGVuc2MwMSw4MTY2NjY2DQoyMDExLENJTixOTCxhcnJveWJyMDEsNzY2NjY2Ng0KMjAxMSxDSU4sTkwsdm90dG9qbzAxLDc0MTA2NTUNCjIwMTEsQ0lOLE5MLGNoYXBtYXIwMSwzODM1NzcyDQoyMDExLENJTixOTCxjdWV0b2pvMDEsMzQwMDAwMA0KMjAxMSxDSU4sTkwsaGVybmFyYTAyLDI5NDczMTgNCjIwMTEsQ0lOLE5MLGJydWNlamEwMSwyNzkxNjY2DQoyMDExLENJTixOTCxyZW50ZWVkMDEsMjA2ODM5MQ0KMjAxMSxDSU4sTkwsZ29tZXNqbzAxLDE3NTAwMDANCjIwMTEsQ0lOLE5MLG1hc3NlbmkwMSwxNzI1MDAwDQoyMDExLENJTixOTCx2b2xxdWVkMDEsMTYyNTAwMA0KMjAxMSxDSU4sTkwsY2Fpcm9taTAxLDEwMDAwMDANCjIwMTEsQ0lOLE5MLGxld2lzZnIwMiw5MDAwMDANCjIwMTEsQ0lOLE5MLGJ1cnRvamEwMSw3NTAwMDANCjIwMTEsQ0lOLE5MLGJyYXliaTAxLDY0NTAwMA0KMjAxMSxDSU4sTkwsaGFuaWdyeTAxLDU1MDAwMA0KMjAxMSxDSU4sTkwsYXJyZWRqbzAxLDQ4MDAwMA0KMjAxMSxDSU4sTkwsc3R1YmJkcjAxLDQ1MDAwMA0KMjAxMSxDSU4sTkwsYmFpbGVobzAyLDQ0MTAwMA0KMjAxMSxDSU4sTkwsamFuaXNwYTAxLDQzNzUwMA0KMjAxMSxDSU4sTkwsbGVha2VtaTAxLDQyNTAwMA0KMjAxMSxDSU4sTkwsd29vZHRyMDEsNDIyNTAwDQoyMDExLENJTixOTCxoZWlzZWNoMDEsNDE5MDAwDQoyMDExLENJTixOTCxvbmRydWxvMDEsNDE4MDAwDQoyMDExLENJTixOTCxzbWl0aGpvMDYsNDE2NTAwDQoyMDExLENJTixOTCxtYWxvbm1hMDIsNDE1MDAwDQoyMDExLENJTixOTCxmcmFuY2p1MDIsNDE0MDAwDQoyMDExLENJTixOTCxsZWN1cnNhMDEsNDE0MDAwDQoyMDExLENPTCxOTCxoZWx0b3RvMDEsMjAyNzUwMDANCjIwMTEsQ09MLE5MLGRlbGFyam8wMSwxMDAwMDAwMA0KMjAxMSxDT0wsTkwsY29va2FhMDEsOTg3NTAwMA0KMjAxMSxDT0wsTkwsc3RyZWVodTAxLDczMDAwMDANCjIwMTEsQ09MLE5MLHR1bG93dHIwMSw1NTAwMDAwDQoyMDExLENPTCxOTCxiZXRhbnJhMDEsMzc3NTAwMA0KMjAxMSxDT0wsTkwsbG9wZXpqbzAxLDM2MDAwMDANCjIwMTEsQ09MLE5MLHdpZ2dpdHkwMSwzNTAwMDAwDQoyMDExLENPTCxOTCxoYW1tZWphMDEsMzAwMDAwMA0KMjAxMSxDT0wsTkwsamltZW51YjAxLDI4MDAwMDANCjIwMTEsQ09MLE5MLGxpbmRzbWEwMSwyODAwMDAwDQoyMDExLENPTCxOTCxpYW5uZWNoMDEsMjU1MDAwMA0KMjAxMSxDT0wsTkwsYmVsaXNtYTAxLDIzNTAwMDANCjIwMTEsQ09MLE5MLHN0ZXdhaWEwMSwyMjg3NTAwDQoyMDExLENPTCxOTCxzcGlsYnJ5MDEsMTk1MDAwMA0KMjAxMSxDT0wsTkwsZ29uemFjYTAxLDE0Mjg1NzENCjIwMTEsQ09MLE5MLGdpYW1iamEwMSwxMDAwMDAwDQoyMDExLENPTCxOTCxwYXVsaWZlMDEsNzkwMDAwDQoyMDExLENPTCxOTCxzbWl0aHNlMDEsNDI5MDAwDQoyMDExLENPTCxOTCxmb3dsZWRlMDEsNDI0MDAwDQoyMDExLENPTCxOTCxtb3JhbGZyMDEsNDI0MDAwDQoyMDExLENPTCxOTCxtb3JhbGpvMDIsNDIwMDAwDQoyMDExLENPTCxOTCxjaGFjaWpoMDEsNDE5MDAwDQoyMDExLENPTCxOTCxoZXJyZWpvMDMsNDE5MDAwDQoyMDExLENPTCxOTCxyb2dlcmVzMDEsNDE3MDAwDQoyMDExLENPTCxOTCxyZXlub21hMDIsNDE1MDAwDQoyMDExLEZMTyxOTCxyYW1pcmhhMDEsMTEwMDAwMDANCjIwMTEsRkxPLE5MLGpvaG5zam8wOSw3NzUwMDAwDQoyMDExLEZMTyxOTCx2YXpxdWphMDEsNzAwMDAwMA0KMjAxMSxGTE8sTkwsbm9sYXNyaTAxLDYwMDAwMDANCjIwMTEsRkxPLE5MLGJ1Y2tqbzAxLDUwMDAwMDANCjIwMTEsRkxPLE5MLHNhbmNoYW4wMSwzNzAwMDAwDQoyMDExLEZMTyxOTCxudW5lemxlMDEsMzY1MDAwMA0KMjAxMSxGTE8sTkwsaW5mYW5vbTAxLDI1MDAwMDANCjIwMTEsRkxPLE5MLGhlbnNsY2wwMSwxNDAwMDAwDQoyMDExLEZMTyxOTCxjaG9hdHJhMDEsMTAwMDAwMA0KMjAxMSxGTE8sTkwsaGVsbXN3ZTAxLDEwMDAwMDANCjIwMTEsRkxPLE5MLG11amljZWQwMSw4MDAwMDANCjIwMTEsRkxPLE5MLGRvYmJzZ3IwMSw2MDAwMDANCjIwMTEsRkxPLE5MLGNvZ2hsY2gwMSw0OTAwMDANCjIwMTEsRkxPLE5MLHZvbHN0Y2gwMSw0NDUwMDANCjIwMTEsRkxPLE5MLHNhbmNoZ2EwMSw0MzEwMDANCjIwMTEsRkxPLE5MLGJvbmlmZW0wMSw0MjUwMDANCjIwMTEsRkxPLE5MLG11cnBoZG8wMSw0MjUwMDANCjIwMTEsRkxPLE5MLHNhbmNoYnIwMSw0MjUwMDANCjIwMTEsRkxPLE5MLGJha2Vyam8wMSw0MTcwMDANCjIwMTEsRkxPLE5MLHN0YW50bWkwMyw0MTYwMDANCjIwMTEsRkxPLE5MLGNvdXNpc2MwMSw0MTQwMDANCjIwMTEsRkxPLE5MLGR1bm5taTAxLDQxNDAwMA0KMjAxMSxGTE8sTkwsaGF5ZXNicjAxLDQxNDAwMA0KMjAxMSxGTE8sTkwsbW9ycmlsbzAxLDQxNDAwMA0KMjAxMSxGTE8sTkwsd2ViYnJ5MDEsNDE0MDAwDQoyMDExLEhPVSxOTCxsZWVjYTAxLDE5MDAwMDAwDQoyMDExLEhPVSxOTCxteWVyc2JyMDEsODAwMDAwMA0KMjAxMSxIT1UsTkwscm9kcml3YTAxLDc1MDAwMDANCjIwMTEsSE9VLE5MLHBlbmNlaHUwMSw2OTAwMDAwDQoyMDExLEhPVSxOTCxseW9uYnIwMSw1MjUwMDAwDQoyMDExLEhPVSxOTCxib3Vybm1pMDEsNDQwMDAwMA0KMjAxMSxIT1UsTkwsYmFybWVjbDAxLDM5MjUwMDANCjIwMTEsSE9VLE5MLGhhbGxiaTAzLDMwMDAwMDANCjIwMTEsSE9VLE5MLGtlcHBpamUwMSwyMzAwMDAwDQoyMDExLEhPVSxOTCxxdWludGh1MDEsMTAwMDAwMA0KMjAxMSxIT1UsTkwsZmlndWVuZTAxLDkwMDAwMA0KMjAxMSxIT1UsTkwsbWljaGFqYTAxLDkwMDAwMA0KMjAxMSxIT1UsTkwscm93bGFyeTAxLDcyNTAwMA0KMjAxMSxIT1UsTkwsaGFwcGphMDEsNDc0MDAwDQoyMDExLEhPVSxOTCxmdWxjaGplMDEsNDY3MDAwDQoyMDExLEhPVSxOTCxsb3BlendpMDEsNDQyMDAwDQoyMDExLEhPVSxOTCxhcmlhc2FsMDIsNDM5NTAwDQoyMDExLEhPVSxOTCxub3JyaWJ1MDEsNDM3NTAwDQoyMDExLEhPVSxOTCxzYW5jaGFuMDIsNDMyNTAwDQoyMDExLEhPVSxOTCxqb2huc2NoMDUsNDI0MDAwDQoyMDExLEhPVSxOTCx0b3dsZWpyMDEsNDI0MDAwDQoyMDExLEhPVSxOTCxib3VyZ2phMDEsNDIzMDAwDQoyMDExLEhPVSxOTCxjYXN0cmphMDEsNDIxNTAwDQoyMDExLEhPVSxOTCxkb3duc21hMDEsNDIxMDAwDQoyMDExLEhPVSxOTCxtZWxhbm1hMDEsNDIxMDAwDQoyMDExLEhPVSxOTCxhYmFkZmUwMSw0MTgwMDANCjIwMTEsSE9VLE5MLHdhbGxhYnIwMSw0MTgwMDANCjIwMTEsSE9VLE5MLGRlbHJvZW4wMSw0MTcwMDANCjIwMTEsSE9VLE5MLHJvZHJpYW4wMSw0MTQwMDANCjIwMTEsTEFOLE5MLGZ1cmNhcmEwMSwxMzAwMDAwMA0KMjAxMSxMQU4sTkwsa3Vyb2RoaTAxLDExNzY1NzI0DQoyMDExLExBTixOTCxldGhpZWFuMDEsOTUwMDAwMA0KMjAxMSxMQU4sTkwsbGlsbHl0ZTAxLDgxNjY2NjYNCjIwMTEsTEFOLE5MLGtlbXBtYTAxLDcxMDAwMDANCjIwMTEsTEFOLE5MLGJyb3h0am8wMSw3MDAwMDAwDQoyMDExLExBTixOTCxiaWxsaWNoMDEsNjI3NTAwMA0KMjAxMSxMQU4sTkwsYmxha2VjYTAxLDU1MDAwMDANCjIwMTEsTEFOLE5MLHVyaWJlanUwMSw1Mjk1OTEwDQoyMDExLExBTixOTCxsb25leWphMDEsNDg3NTAwMA0KMjAxMSxMQU4sTkwsZ2FybGFqbzAxLDQ0NDIwMjMNCjIwMTEsTEFOLE5MLGJhcmFqcm8wMSwzMjUwMDAwDQoyMDExLExBTixOTCxrdW9obzAxLDI3MjUwMDANCjIwMTEsTEFOLE5MLGd1ZXJybWEwMiwyNDYxNDk5DQoyMDExLExBTixOTCxjYXJyb2phMDEsMjI4NTY3Nw0KMjAxMSxMQU4sTkwscGFkaWx2aTAxLDIwMDAwMDANCjIwMTEsTEFOLE5MLGNvcm1pbGEwMSwxMjAwMDAwDQoyMDExLExBTixOTCxuYXZhcmRpMDEsMTAwMDAwMA0KMjAxMSxMQU4sTkwsdGhhbWVtYTAxLDEwMDAwMDANCjIwMTEsTEFOLE5MLGd3eW5udG8wMiw2NzUwMDANCjIwMTEsTEFOLE5MLGdpYmJvamEwMSw2NTAwMDANCjIwMTEsTEFOLE5MLGtlcnNoY2wwMSw1MDAwMDANCjIwMTEsTEFOLE5MLG1hY2RvbWkwMSw1MDAwMDANCjIwMTEsTEFOLE5MLG1pbGVzYWEwMSw1MDAwMDANCjIwMTEsTEFOLE5MLGhhd2tzYmwwMSw0MjYwMDANCjIwMTEsTEFOLE5MLGdpbWVuaGUwMSw0MjUwMDANCjIwMTEsTEFOLE5MLGVsbGlzYWowMSw0MjEwMDANCjIwMTEsTEFOLE5MLHBhdWx4YTAxLDQxOTUwMA0KMjAxMSxMQU4sTkwsamFuc2VrZTAxLDQxNjAwMA0KMjAxMSxMQU4sTkwsZGVqZXNpdjAyLDQxNDAwMA0KMjAxMSxNSUwsTkwsZmllbGRwcjAxLDE1NTAwMDAwDQoyMDExLE1JTCxOTCxncmVpbnphMDEsMTM1MDAwMDANCjIwMTEsTUlMLE5MLHdvbGZyYTAyLDk1MDAwMDANCjIwMTEsTUlMLE5MLGhhcnRjbzAxLDY4MzMzMzMNCjIwMTEsTUlMLE5MLHdlZWtzcmkwMSw0NTAwMDAwDQoyMDExLE1JTCxOTCxiZXRhbnl1MDEsNDMwMDAwMA0KMjAxMSxNSUwsTkwsYnJhdW5yeTAyLDQyODc1MDANCjIwMTEsTUlMLE5MLGhhd2tpbGEwMSw0MjUwMDAwDQoyMDExLE1JTCxOTCxtYXJjdXNoMDEsMzk1MDAwMA0KMjAxMSxNSUwsTkwsZ2FsbGF5bzAxLDM1MDAwMDANCjIwMTEsTUlMLE5MLHNhaXRvdGEwMSwxNzUwMDAwDQoyMDExLE1JTCxOTCxnb21lemNhMDEsMTUwMDAwMA0KMjAxMSxNSUwsTkwsY291bnNjcjAxLDE0MDAwMDANCjIwMTEsTUlMLE5MLGxvZWthMDEsMTI1MDAwMA0KMjAxMSxNSUwsTkwscGFycmFtYTAxLDEyMDAwMDANCjIwMTEsTUlMLE5MLG1pdHJlc2UwMSw5MDAwMDANCjIwMTEsTUlMLE5MLGdyZWVuc2UwMSw4NzUwMDANCjIwMTEsTUlMLE5MLGtvdHNhbWEwMSw4MDAwMDANCjIwMTEsTUlMLE5MLG5pZXZld2kwMSw3NzUwMDANCjIwMTEsTUlMLE5MLHJlZWRqZTAzLDU1MDAwMA0KMjAxMSxNSUwsTkwsbWNnZWhjYTAxLDQ3ODAwMA0KMjAxMSxNSUwsTkwsbW9yZ2FueTAxLDQ3MTUwMA0KMjAxMSxNSUwsTkwsYXhmb3JqbzAxLDQ0MjUwMA0KMjAxMSxNSUwsTkwsbmFydmVjaDAxLDQ0MTUwMA0KMjAxMSxNSUwsTkwsa290dGFnZTAxLDQ0MDAwMA0KMjAxMSxNSUwsTkwsc3RldHRtaTAxLDQyNzAwMA0KMjAxMSxNSUwsTkwsYnJhZGR6YTAxLDQyNDAwMA0KMjAxMSxNSUwsTkwsbHVjcm9qbzAxLDQyNDAwMA0KMjAxMSxNSUwsTkwsYWxtb25lcjAxLDQxNDAwMA0KMjAxMSxNSUwsTkwsa2ludHpicjAxLDQxNDAwMA0KMjAxMSxOWU4sTkwsc2FudGFqbzAxLDIxNjQ0NzA3DQoyMDExLE5ZTixOTCxiZWx0cmNhMDEsMTkzMjU0MzYNCjIwMTEsTllOLE5MLGJheWphMDEsMTgxMjUwMDANCjIwMTEsTllOLE5MLHdyaWdoZGEwMywxNDI1MDAwMA0KMjAxMSxOWU4sTkwscm9kcmlmcjAzLDEyMTY2NjY2DQoyMDExLE5ZTixOTCxyZXllc2pvMDEsMTEwMDAwMDANCjIwMTEsTllOLE5MLHBlbGZybWkwMSwzOTI1MDAwDQoyMDExLE5ZTixOTCxwYWdhbmFuMDEsMzUwMDAwMA0KMjAxMSxOWU4sTkwsZGlja2VyYTAxLDI3NTAwMDANCjIwMTEsTllOLE5MLGNhcHVhY2gwMSwxNTAwMDAwDQoyMDExLE5ZTixOTCxjYXJyYWRqMDEsMTIwMDAwMA0KMjAxMSxOWU4sTkwsaGFpcnNzYzAxLDExMDAwMDANCjIwMTEsTllOLE5MLHlvdW5nY2gwMywxMTAwMDAwDQoyMDExLE5ZTixOTCxieXJkYXRpMDEsOTAwMDAwDQoyMDExLE5ZTixOTCxoYXJyaXdpMDEsODAwMDAwDQoyMDExLE5ZTixOTCxib3llcmJsMDEsNzI1MDAwDQoyMDExLE5ZTixOTCxidWNoaHRhMDEsNjAwMDAwDQoyMDExLE5ZTixOTCxuaWVzZWpvMDEsNDUyMDAwDQoyMDExLE5ZTixOTCxwYXJuZWJvMDEsNDMzNTAwDQoyMDExLE5ZTixOTCxkYXZpc2lrMDIsNDMyMDAwDQoyMDExLE5ZTixOTCxtdXJwaGRhMDgsNDIyMDAwDQoyMDExLE5ZTixOTCxodWNoMDEsNDIwMDAwDQoyMDExLE5ZTixOTCx0aG9sZWpvMDEsNDIwMDAwDQoyMDExLE5ZTixOTCxiZWF0b3BlMDEsNDE0MDAwDQoyMDExLE5ZTixOTCxkdWRhbHUwMSw0MTQwMDANCjIwMTEsTllOLE5MLGVtYXVzYnIwMSw0MTQwMDANCjIwMTEsTllOLE5MLG5pY2tlbWkwMSw0MTQwMDANCjIwMTEsUEhJLE5MLGhhbGxhcm8wMSwyMDAwMDAwMA0KMjAxMSxQSEksTkwsaG93YXJyeTAxLDIwMDAwMDAwDQoyMDExLFBISSxOTCxvc3dhbHJvMDEsMTYwMDAwMDANCjIwMTEsUEhJLE5MLHV0bGV5Y2gwMSwxNTI4NTcxNA0KMjAxMSxQSEksTkwsaWJhbmVyYTAxLDEyMTY2NjY2DQoyMDExLFBISSxOTCxsaWRnZWJyMDEsMTIwMDAwMDANCjIwMTEsUEhJLE5MLGxlZWNsMDIsMTEwMDAwMDANCjIwMTEsUEhJLE5MLGJsYW50am8wMSwxMDUwMDAwMA0KMjAxMSxQSEksTkwsaGFtZWxjbzAxLDk1MDAwMDANCjIwMTEsUEhJLE5MLHJvbGxpamkwMSw4NTAwMDAwDQoyMDExLFBISSxOTCx2aWN0b3NoMDEsNzUwMDAwMA0KMjAxMSxQSEksTkwscG9sYW5wbDAxLDU0MTY2NjYNCjIwMTEsUEhJLE5MLG1hZHNvcnkwMSw0ODMzMzMzDQoyMDExLFBISSxOTCxiYWV6ZGEwMSwyNzUwMDAwDQoyMDExLFBISSxOTCxydWl6Y2EwMSwyNzUwMDAwDQoyMDExLFBISSxOTCxjb250cmpvMDEsMjUwMDAwMA0KMjAxMSxQSEksTkwsa2VuZHJreTAxLDI0NTAwMDANCjIwMTEsUEhJLE5MLHNjaG5lYnIwMSwxNjI1MDAwDQoyMDExLFBISSxOTCxnbG9hZHJvMDEsMTYwMDAwMA0KMjAxMSxQSEksTkwscm9tZXJqYzAxLDEzNTAwMDANCjIwMTEsUEhJLE5MLGZyYW5jYmUwMSwxMTc1MDAwDQoyMDExLFBISSxOTCxvcnJwZTAxLDYwMDAwMA0KMjAxMSxQSEksTkwsdmFsZGV3aTAxLDU2MDAwMA0KMjAxMSxQSEksTkwsaGVybmRkYTAxLDQyNTAwMA0KMjAxMSxQSEksTkwsYmFzdGFhbjAxLDQxOTAwMA0KMjAxMSxQSEksTkwsYm9jb2NicjAxLDQxNDAwMA0KMjAxMSxQSEksTkwsYnJvd25kbzAxLDQxNDAwMA0KMjAxMSxQSEksTkwsbWFydGltaTAyLDQxNDAwMA0KMjAxMSxQSEksTkwsbWF5YmVqbzAyLDQxNDAwMA0KMjAxMSxQSEksTkwsc2NobGlicjAxLDQxNDAwMA0KMjAxMSxQSVQsTkwsbWFob2xwYTAxLDYyNTAwMDANCjIwMTEsUElULE5MLHNueWRlY2gwMiw2MjUwMDAwDQoyMDExLFBJVCxOTCxkb3VtaXJ5MDEsNTIwMDAwMA0KMjAxMSxQSVQsTkwsb3ZlcmJseTAxLDUwMDAwMDANCjIwMTEsUElULE5MLGNvcnJla2UwMSw0MDAwMDAwDQoyMDExLFBJVCxOTCxkaWF6bWEwMiwyMTI1MDAwDQoyMDExLFBJVCxOTCxhbHZhcnBlMDEsMjA1MDAwMA0KMjAxMSxQSVQsTkwsb2hsZW5ybzAxLDIwMjUwMDANCjIwMTEsUElULE5MLGNlZGVucm8wMiwxODUwMDAwDQoyMDExLFBJVCxOTCxoYW5yYWpvMDEsMTQwMDAwMA0KMjAxMSxQSVQsTkwsa2Fyc3RqZTAxLDExMDAwMDANCjIwMTEsUElULE5MLG1lZWtldjAxLDQ2MTUwMA0KMjAxMSxQSVQsTkwsam9uZXNnYTAyLDQ1NTUwMA0KMjAxMSxQSVQsTkwsbWNjdXRhbjAxLDQ1MjUwMA0KMjAxMSxQSVQsTkwsb2xzZW5zYzAxLDQ1MDAwMA0KMjAxMSxQSVQsTkwsbWNkb25qYTAzLDQ0MzAwMA0KMjAxMSxQSVQsTkwsYm93a2VqbzAxLDQ0MTUwMA0KMjAxMSxQSVQsTkwsbW9ydG9jaDAyLDQ0MTAwMA0KMjAxMSxQSVQsTkwsd2Fsa2VuZTAxLDQzNzAwMA0KMjAxMSxQSVQsTkwscmVzb3BjaDAxLDQzMTUwMA0KMjAxMSxQSVQsTkwsb2xzb25nYTAxLDQzMDAwMA0KMjAxMSxQSVQsTkwsdGFiYXRqbzAxLDQyODAwMA0KMjAxMSxQSVQsTkwscGVhcmNzdDAxLDQyNzUwMA0KMjAxMSxQSVQsTkwsamFyYW1qYTAxLDQyMjUwMA0KMjAxMSxQSVQsTkwsaGFydGtlMDEsNDE3MDAwDQoyMDExLFBJVCxOTCxhc2NhbmpvMDEsNDE2MDAwDQoyMDExLFBJVCxOTCxsaW5jb2JyMDEsNDE0NTAwDQoyMDExLFBJVCxOTCxyb2RyaWpvMDUsNDE0MDAwDQoyMDExLFBJVCxOTCxjcm90dG1pMDEsNDE0MDAwDQoyMDExLFNETixOTCxiZWxsaGUwMSw3NTAwMDAwDQoyMDExLFNETixOTCxsdWR3aXJ5MDEsNjc3NTAwMA0KMjAxMSxTRE4sTkwsYmFydGxqYTAxLDQwMDAwMDANCjIwMTEsU0ROLE5MLGh1ZHNvb3IwMSw0MDAwMDAwDQoyMDExLFNETixOTCxoYXJhbmFhMDEsMzUwMDAwMA0KMjAxMSxTRE4sTkwsYWRhbXNtaTAzLDI1MzUwMDANCjIwMTEsU0ROLE5MLGhlYWRsY2gwMSwyMzI1MDAwDQoyMDExLFNETixOTCxoYXdwZWJyMDEsMjAwMDAwMA0KMjAxMSxTRE4sTkwscXVhbGxjaDAxLDE1MDAwMDANCjIwMTEsU0ROLE5MLHN0YXVmdGkwMSwxMDc1MDAwDQoyMDExLFNETixOTCxtb3NlbGR1MDEsOTAwMDAwDQoyMDExLFNETixOTCxjYW50dWpvMDEsODUwMDAwDQoyMDExLFNETixOTCxkZW5vcmNoMDEsODAwMDAwDQoyMDExLFNETixOTCxuZXNoZXBhMDEsNjI1MDAwDQoyMDExLFNETixOTCxnb256YWFsMDMsNjAwMDAwDQoyMDExLFNETixOTCxyaWNoYWNsMDEsNDY4ODAwDQoyMDExLFNETixOTCxsYXRvc21hMDEsNDYwNzAwDQoyMDExLFNETixOTCxncmVnZWx1MDEsNDQ3ODAwDQoyMDExLFNETixOTCx2ZW5hYndpMDEsNDQ0NDAwDQoyMDExLFNETixOTCxodW5kbG5pMDEsNDM5OTAwDQoyMDExLFNETixOTCx0aGF0Y2pvMDEsNDMzOTAwDQoyMDExLFNETixOTCxtYXliaWNhMDEsNDI5MTAwDQoyMDExLFNETixOTCxibGFua2t5MDEsNDI0NzAwDQoyMDExLFNETixOTCxwYXR0ZWVyMDEsNDIzMzAwDQoyMDExLFNETixOTCxqb2huc3JvMDcsNDIxNzAwDQoyMDExLFNETixOTCxmcmllcmVyMDEsNDE3MTAwDQoyMDExLFNETixOTCxsdWVia2NvMDEsNDE1NjAwDQoyMDExLFNETixOTCxob2ZmcGphMDEsNDE0ODAwDQoyMDExLFNETixOTCxkZWR1bnNhMDEsNDE0MjQwDQoyMDExLFNETixOTCxiYXh0ZW1pMDEsNDE0MTAwDQoyMDExLFNETixOTCxodW50ZWNlMDEsNDE0MDAwDQoyMDExLFNGTixOTCx6aXRvYmEwMSwxODUwMDAwMA0KMjAxMSxTRk4sTkwsbGluY2V0aTAxLDE0MDAwMDAwDQoyMDExLFNGTixOTCxyb3dhbmFhMDEsMTM2MDAwMDANCjIwMTEsU0ZOLE5MLGh1ZmZhdTAxLDEwMDAwMDAwDQoyMDExLFNGTixOTCxjYWlubWEwMSw3MzMzMzMzDQoyMDExLFNGTixOTCx0ZWphZG1pMDEsNjUwMDAwMA0KMjAxMSxTRk4sTkwsd2lsc29icjAxLDY1MDAwMDANCjIwMTEsU0ZOLE5MLHJvc3NjbzAxLDYzMDAwMDANCjIwMTEsU0ZOLE5MLHNhbmNoZnIwMSw2MDAwMDAwDQoyMDExLFNGTixOTCxkZXJvc21hMDEsNjAwMDAwMA0KMjAxMSxTRk4sTkwsc2FuY2hqbzAxLDQ4MDAwMDANCjIwMTEsU0ZOLE5MLGFmZmVsamUwMSw0NTAwMDAwDQoyMDExLFNGTixOTCxsb3BlemphMDIsMjM3NTAwMA0KMjAxMSxTRk4sTkwsdG9ycmVhbjAyLDIyMDAwMDANCjIwMTEsU0ZOLE5MLHJhbWlycmEwMiwxNjUwMDAwDQoyMDExLFNGTixOTCxnYXJjaWphMDEsMTMwMDAwMA0KMjAxMSxTRk4sTkwsZm9udGVtaTAxLDEwNTAwMDANCjIwMTEsU0ZOLE5MLGJ1cnJlcGEwMSwxMDAwMDAwDQoyMDExLFNGTixOTCxtb3RhZ3UwMSw5MjUwMDANCjIwMTEsU0ZOLE5MLHBvc2V5YnUwMSw1NzUwMDANCjIwMTEsU0ZOLE5MLHNhbmRvcGEwMSw1MDAwMDANCjIwMTEsU0ZOLE5MLGJ1bWdhbWEwMSw0NTAwMDANCjIwMTEsU0ZOLE5MLHJvbW9zZTAxLDQ1MDAwMA0KMjAxMSxTRk4sTkwsc2NoaWVuYTAxLDQzMjUwMA0KMjAxMSxTRk4sTkwsd2hpdGVlbDAzLDQyNTAwMA0KMjAxMSxTRk4sTkwscnVuemxkYTAxLDQxODUwMA0KMjAxMSxTRk4sTkwsYmVsdGJyMDEsNDE0MDAwDQoyMDExLFNMTixOTCxob2xsaW1hMDEsMTYzMTc3NzQNCjIwMTEsU0xOLE5MLHB1am9sYWwwMSwxNDUwODM5NQ0KMjAxMSxTTE4sTkwsY2FycGVjaDAyLDE0MjU5NDAzDQoyMDExLFNMTixOTCxsb2hzZWt5MDEsMTIxODc1MDANCjIwMTEsU0xOLE5MLGJlcmttbGEwMSw4MDAwMDAwDQoyMDExLFNMTixOTCx3ZXN0YmphMDEsODAwMDAwMA0KMjAxMSxTTE4sTkwsd2FpbndhZDAxLDY2ODc1MDANCjIwMTEsU0xOLE5MLG1vbGlueWEwMSw1MzEyNTAwDQoyMDExLFNMTixOTCx0aGVyaXJ5MDEsMzMwMDAwMA0KMjAxMSxTTE4sTkwsZnJhbmtyeTAxLDMyNTAwMDANCjIwMTEsU0xOLE5MLHNjaHVtc2swMSwyNzUwMDAwDQoyMDExLFNMTixOTCxtaWxsZXRyMDIsMjAwMDAwMA0KMjAxMSxTTE4sTkwsbWNjbGVreTAxLDEzNzUwMDANCjIwMTEsU0xOLE5MLGxhaXJkZ2UwMSwxMDAwMDAwDQoyMDExLFNMTixOTCxiYXRpc21pMDEsNzUwMDAwDQoyMDExLFNMTixOTCxwdW50b25pMDEsNzUwMDAwDQoyMDExLFNMTixOTCx0YWxsZWJyMDEsNzUwMDAwDQoyMDExLFNMTixOTCxyYXNtdWNvMDEsNDQzMDAwDQoyMDExLFNMTixOTCxnYXJjaWphMDIsNDM3MDAwDQoyMDExLFNMTixOTCxtb3R0ZWphMDEsNDM1MDAwDQoyMDExLFNMTixOTCxib2dnc21pMDEsNDMxMDAwDQoyMDExLFNMTixOTCxmcmVlc2RhMDEsNDE2MDAwDQoyMDExLFNMTixOTCxqYXlqbzAyLDQxNjAwMA0KMjAxMSxTTE4sTkwsZ3JlZW50eTAyLDQxNTUwMA0KMjAxMSxTTE4sTkwsYXVnZW5icjAxLDQxNDAwMA0KMjAxMSxTTE4sTkwsY3JhaWdhbDAxLDQxNDAwMA0KMjAxMSxTTE4sTkwsZGVzY2FkYTAxLDQxNDAwMA0KMjAxMSxXQVMsTkwsd2VydGhqYTAxLDEwNTcxNDI4DQoyMDExLFdBUyxOTCx6aW1tZXJ5MDEsOTAyNTAwMA0KMjAxMSxXQVMsTkwsbWFycXVqYTAxLDc1MDAwMDANCjIwMTEsV0FTLE5MLGxhcm9jYWQwMSw3MDAwMDAwDQoyMDExLFdBUyxOTCxzdHJhc3N0MDEsNDM3NTAwMA0KMjAxMSxXQVMsTkwscm9kcmlpdjAxLDMwMDAwMDANCjIwMTEsV0FTLE5MLGxhbm5ham8wMSwyNzUwMDAwDQoyMDExLFdBUyxOTCxnb3J6ZXRvMDEsMjEwMDAwMA0KMjAxMSxXQVMsTkwsaGFpcnNqZTAyLDIwMDAwMDANCjIwMTEsV0FTLE5MLGFua2llcmkwMSwxNTAwMDAwDQoyMDExLFdBUyxOTCxidXJuZXNlMDEsMTM1MDAwMA0KMjAxMSxXQVMsTkwsY29mZmV0bzAxLDEzNTAwMDANCjIwMTEsV0FTLE5MLGhlcm5hbGkwMSwxMjUwMDAwDQoyMDExLFdBUyxOTCx3YW5nY2gwMSwxMjAwMDAwDQoyMDExLFdBUyxOTCxtb3JzZW1pMDEsMTA1MDAwMA0KMjAxMSxXQVMsTkwsY29yYWFsMDEsOTAwMDAwDQoyMDExLFdBUyxOTCxnYXVkaWNoMDEsOTAwMDAwDQoyMDExLFdBUyxOTCxzdGFpcm1hMDEsODUwMDAwDQoyMDExLFdBUyxOTCxuaXhsYTAxLDcwMDAwMA0KMjAxMSxXQVMsTkwsc2xhdGVkbzAxLDY5NTAwMA0KMjAxMSxXQVMsTkwsY2xpcHB0eTAxLDQ0MzAwMA0KMjAxMSxXQVMsTkwsZGVzbW9pYTAxLDQ0MTUwMA0KMjAxMSxXQVMsTkwsc3RvcmVkcjAxLDQxODAwMA0KMjAxMSxXQVMsTkwsZXNwaW5kYTAxLDQxNTAwMA0KMjAxMSxXQVMsTkwscmFtb3N3aTAxLDQxNTAwMA0KMjAxMSxXQVMsTkwscm9kcmloZTAzLDQxNTAwMA0KMjAxMSxXQVMsTkwsemltbWVqbzAyLDQxNTAwMA0KMjAxMSxXQVMsTkwsYnJvZGVicjAxLDQxNDAwMA0KMjAxMSxXQVMsTkwscmFtaXJlbDAyLDQxNDAwMA0KMjAxMixCQUwsQUwsbWFya2FuaTAxLDEyMzUwMDAwDQoyMDEyLEJBTCxBTCxyb2JlcmJyMDEsMTAwMDAwMDANCjIwMTIsQkFMLEFMLHJleW5vbWEwMSw3ODMzMzMzDQoyMDEyLEJBTCxBTCxoYXJkeWpqMDEsNzQxNjY2Ng0KMjAxMixCQUwsQUwsam9uZXNhZDAxLDYxNTAwMDANCjIwMTIsQkFMLEFMLGdyZWdna2UwMSw1MjAwMDAwDQoyMDEyLEJBTCxBTCxoYW1tZWphMDEsNDc1MDAwMA0KMjAxMixCQUwsQUwsbGluZHNtYTAxLDM2MDAwMDANCjIwMTIsQkFMLEFMLGNoZW53ZTAyLDMwNzIwMDANCjIwMTIsQkFMLEFMLGpvaG5zamkwNCwyNjI1MDAwDQoyMDEyLEJBTCxBTCxjaGF2ZWVuMDEsMTUwMDAwMA0KMjAxMixCQUwsQUwsbWF0dXNicjAxLDE0NTAwMDANCjIwMTIsQkFMLEFMLG9kYXlkYTAxLDEzNTAwMDANCjIwMTIsQkFMLEFMLGFuZGlucm8wMSwxMzAwMDAwDQoyMDEyLEJBTCxBTCxiZXRlbXdpMDEsMTI1MDAwMA0KMjAxMixCQUwsQUwscGF1bGlybzAxLDEwMDAwMDANCjIwMTIsQkFMLEFMLGF5YWxhbHUwMSw4MjUwMDANCjIwMTIsQkFMLEFMLGpvaG5zbmkwMSw4MDAwMDANCjIwMTIsQkFMLEFMLHdpZXRlbWEwMSw1MDAwMDANCjIwMTIsQkFMLEFMLGh1bnRldG8wMiw0OTM1MDANCjIwMTIsQkFMLEFMLHJlaW1vbm8wMSw0OTA1MDANCjIwMTIsQkFMLEFMLHRlYWdhdGEwMSw0ODk1MDANCjIwMTIsQkFMLEFMLGFycmllamEwMSw0ODg1MDANCjIwMTIsQkFMLEFMLGRhdmlzY2gwMiw0ODgwMDANCjIwMTIsQkFMLEFMLGJyaXR0emEwMSw0ODYwMDANCjIwMTIsQkFMLEFMLHBhdHRvdHIwMSw0ODM1MDANCjIwMTIsQkFMLEFMLHN0cm9wcGUwMSw0ODI1MDANCjIwMTIsQkFMLEFMLGZsYWhlcnkwMSw0ODAwMDANCjIwMTIsQk9TLEFMLGdvbnphYWQwMSwyMTg1NzE0Mg0KMjAxMixCT1MsQUwsY3Jhd2ZjYTAyLDIwMzU3MTQyDQoyMDEyLEJPUyxBTCxiZWNrZWpvMDIsMTcwMDAwMDANCjIwMTIsQk9TLEFMLGxhY2tlam8wMSwxNTk1MDAwMA0KMjAxMixCT1MsQUwsb3J0aXpkYTAxLDE0NTc1MDAwDQoyMDEyLEJPUyxBTCx5b3VrbGtlMDEsMTIyNTAwMDANCjIwMTIsQk9TLEFMLG1hdHN1ZGEwMSwxMDMzMzMzMw0KMjAxMixCT1MsQUwscGVkcm9kdTAxLDgyNTAwMDANCjIwMTIsQk9TLEFMLGVsbHNiamEwMSw4MDUwMDAwDQoyMDEyLEJPUyxBTCxsZXN0ZWpvMDEsNzYyNTAwMA0KMjAxMixCT1MsQUwsamVua3NibzAxLDYwMDAwMDANCjIwMTIsQk9TLEFMLGJhaWxlYW4wMSwzOTAwMDAwDQoyMDEyLEJPUyxBTCxidWNoaGNsMDEsMzc1MDAwMA0KMjAxMixCT1MsQUwscm9zc2NvMDEsMzAwMDAwMA0KMjAxMixCT1MsQUwsc2FsdGFqYTAxLDI1MDAwMDANCjIwMTIsQk9TLEFMLHN3ZWVucnkwMSwxNzUwMDAwDQoyMDEyLEJPUyxBTCxiYXJkZGEwMSwxNjEyNTAwDQoyMDEyLEJPUyxBTCxwYWRpbHZpMDEsMTUwMDAwMA0KMjAxMixCT1MsQUwscHVudG9uaTAxLDE1MDAwMDANCjIwMTIsQk9TLEFMLHNob3Bwa2UwMSwxMzUwMDAwDQoyMDEyLEJPUyxBTCxhY2V2ZWFsMDEsMTIwMDAwMA0KMjAxMixCT1MsQUwsYXZpbGVtaTAxLDEyMDAwMDANCjIwMTIsQk9TLEFMLGFsYmVybWEwMSwxMDc1MDAwDQoyMDEyLEJPUyxBTCxtaWxsZWFuMDEsMTA0MDAwMA0KMjAxMixCT1MsQUwsbW9yYWxmcjAxLDg1MDAwMA0KMjAxMixCT1MsQUwsaGlsbHJpMDEsNzI1MDAwDQoyMDEyLEJPUyxBTCxtZWxhbm1hMDEsNTIxMDAwDQoyMDEyLEJPUyxBTCx0aG9tYWp1MDEsNTE2MDAwDQoyMDEyLEJPUyxBTCxhdGNoaXNjMDEsNTEwMDAwDQoyMDEyLEJPUyxBTCxtY2RvbmRhMDIsNTA2NTAwDQoyMDEyLEJPUyxBTCxib3dkZW1pMDEsNDg0MDAwDQoyMDEyLEJPUyxBTCxkb3VicmZlMDEsNDg0MDAwDQoyMDEyLEJPUyxBTCxrYWxpc3J5MDEsNDgzMDAwDQoyMDEyLEJPUyxBTCxjYXJwZWNoMDIsNDgyMDAwDQoyMDEyLENIQSxBTCxwZWF2eWphMDEsMTcwMDAwMDANCjIwMTIsQ0hBLEFMLGR1bm5hZDAxLDE0MDAwMDAwDQoyMDEyLENIQSxBTCxyaW9zYWwwMSwxMjUwMDAwMA0KMjAxMixDSEEsQUwsa29uZXJwYTAxLDEyMDAwMDAwDQoyMDEyLENIQSxBTCxmbG95ZGdhMDEsNzAwMDAwMA0KMjAxMixDSEEsQUwscGllcnphajAxLDYwMDAwMDANCjIwMTIsQ0hBLEFMLHRob3JubWEwMSw1NTAwMDAwDQoyMDEyLENIQSxBTCxyYW1pcmFsMDMsNTAwMDAwMA0KMjAxMixDSEEsQUwsY3JhaW5qZTAxLDQ1MDAwMDANCjIwMTIsQ0hBLEFMLG9obWFud2kwMSwyNTAwMDAwDQoyMDEyLENIQSxBTCx2aWNpZWRhMDEsMjUwMDAwMA0KMjAxMixDSEEsQUwsZGFua3NqbzAxLDIwMDAwMDANCjIwMTIsQ0hBLEFMLGh1bWJlcGgwMSw1MzAwMDANCjIwMTIsQ0hBLEFMLGJlY2toZ28wMSw1MjAwMDANCjIwMTIsQ0hBLEFMLGZ1a3Vka28wMSw1MDAwMDANCjIwMTIsQ0hBLEFMLGxpbGxpYnIwMSw1MDAwMDANCjIwMTIsQ0hBLEFMLHNhbGVjaDAxLDUwMDAwMA0KMjAxMixDSEEsQUwsZGVhemFhbDAxLDQ5NTAwMA0KMjAxMixDSEEsQUwsbW9yZWxicjAxLDQ5MDAwMA0KMjAxMixDSEEsQUwsZmxvd2V0eTAxLDQ4MzAwMA0KMjAxMixDSEEsQUwsc3Rld2F6YTAxLDQ4MTUwMA0KMjAxMixDSEEsQUwsZXNjb2JlZDAxLDQ4MDAwMA0KMjAxMixDSEEsQUwscmVlZGFkMDEsNDgwMDAwDQoyMDEyLENIQSxBTCxzYW50aWhlMDEsNDgwMDAwDQoyMDEyLENIQSxBTCxqb25lc25hMDEsNDgwMDAwDQoyMDEyLENMRSxBTCxsb3dlZGUwMSwxNTAwMDAwMA0KMjAxMixDTEUsQUwsaGFmbmV0cjAxLDEzMDAwMDAwDQoyMDEyLENMRSxBTCxoZXJuYXJvMDEsNzAwMDAwMA0KMjAxMixDTEUsQUwsc2l6ZW1ncjAxLDUwMDAwMDANCjIwMTIsQ0xFLEFMLGNob29zaDAxLDQ5MDAwMDANCjIwMTIsQ0xFLEFMLGNhYnJlYXMwMSw0NTUwMDAwDQoyMDEyLENMRSxBTCxwZXJlemNoMDEsNDUwMDAwMA0KMjAxMixDTEUsQUwsamltZW51YjAxLDQyMDAwMDANCjIwMTIsQ0xFLEFMLG1hc3RlanUwMSwzODI1MDAwDQoyMDEyLENMRSxBTCxrb3RjaGNhMDEsMzAwMDAwMA0KMjAxMixDTEUsQUwscGVyZXpyYTAxLDIwMDUwMDANCjIwMTIsQ0xFLEFMLHNtaXRoam8wNSwxNzUwMDAwDQoyMDEyLENMRSxBTCxoYW5uYWphMDEsMTEzNTAwMA0KMjAxMixDTEUsQUwsd2hlZWxkYTAxLDkwMDAwMA0KMjAxMixDTEUsQUwsbG9wZXpqbzAxLDgwMDAwMA0KMjAxMixDTEUsQUwsc2lwcHRvMDEsNTA0OTAwDQoyMDEyLENMRSxBTCxzYW50YWNhMDEsNTAxOTAwDQoyMDEyLENMRSxBTCxkdW5jYXNoMDEsNTAwMDAwDQoyMDEyLENMRSxBTCxicmFudG1pMDIsNDk1MzAwDQoyMDEyLENMRSxBTCx0b21saWpvMDEsNDk0NTAwDQoyMDEyLENMRSxBTCxtYXJzb2xvMDEsNDkxNzAwDQoyMDEyLENMRSxBTCxwZXN0YXZpMDEsNDkxMjAwDQoyMDEyLENMRSxBTCxjYXJyYWNhMDEsNDg4NTAwDQoyMDEyLENMRSxBTCxodWZmZGEwMSw0ODYyMDANCjIwMTIsQ0xFLEFMLGRvbmFsamEwMSw0ODQwMDANCjIwMTIsQ0xFLEFMLGdvbWV6amUwMSw0ODI3MDANCjIwMTIsQ0xFLEFMLGN1bm5pYWEwMSw0ODIzMDANCjIwMTIsQ0xFLEFMLGtpcG5pamEwMSw0ODIxMDANCjIwMTIsQ0xFLEFMLHZhbGRlbHUwMSw0ODAwMDANCjIwMTIsREVULEFMLGZpZWxkcHIwMSwyMzAwMDAwMA0KMjAxMixERVQsQUwsY2FicmVtaTAxLDIxMDAwMDAwDQoyMDEyLERFVCxBTCx2ZXJsYWp1MDEsMjAxMDAwMDANCjIwMTIsREVULEFMLG1hcnRpdmkwMSwxMzAwMDAwMA0KMjAxMixERVQsQUwsdmFsdmVqbzAxLDkwMDAwMDANCjIwMTIsREVULEFMLHlvdW5nZGUwMyw2NzUwMDAwDQoyMDEyLERFVCxBTCxiZW5vaWpvMDEsNTUwMDAwMA0KMjAxMixERVQsQUwsaW5nZWJyMDEsNTUwMDAwMA0KMjAxMixERVQsQUwscGVyYWxqaDAxLDU1MDAwMDANCjIwMTIsREVULEFMLHNjaGVybWEwMSwzNzUwMDAwDQoyMDEyLERFVCxBTCxwb3JjZXJpMDEsMzEwMDAwMA0KMjAxMixERVQsQUwsZG90ZWxvYzAxLDMwMDAwMDANCjIwMTIsREVULEFMLHJhYnVycnkwMSwyMTAwMDAwDQoyMDEyLERFVCxBTCxzYW50aXJhMDEsMjEwMDAwMA0KMjAxMixERVQsQUwsY29rZXBoMDEsMTEwMDAwMA0KMjAxMixERVQsQUwsbGFpcmRnZTAxLDEwMDAwMDANCjIwMTIsREVULEFMLGtlbGx5ZG8wMSw5MDAwMDANCjIwMTIsREVULEFMLGF2aWxhYWwwMSw1MTAwMDANCjIwMTIsREVULEFMLGZpc3RlZG8wMSw1MDc1MDANCjIwMTIsREVULEFMLGJvZXNjYnIwMSw1MDI1MDANCjIwMTIsREVULEFMLGphY2tzYXUwMSw1MDAwMDANCjIwMTIsREVULEFMLGFsYnVyYWwwMSw0OTUwMDANCjIwMTIsREVULEFMLHNjaGxlZGEwMSw0OTAwMDANCjIwMTIsREVULEFMLGJhbGVzY28wMSw0ODUwMDANCjIwMTIsREVULEFMLGRpcmtzYW4wMSw0ODUwMDANCjIwMTIsREVULEFMLGJlbG93ZHUwMSw0ODIwMDANCjIwMTIsREVULEFMLHdvcnRoZGEwMSw0ODIwMDANCjIwMTIsREVULEFMLHRob21hY2wwMiw0ODEwMDANCjIwMTIsREVULEFMLG1hcnRlbHUwMSw0ODAwMDANCjIwMTIsS0NBLEFMLGJ1dGxlYmkwMyw4NTAwMDAwDQoyMDEyLEtDQSxBTCxmcmFuY2plMDIsNjc1MDAwMA0KMjAxMixLQ0EsQUwsc29yaWFqbzAxLDYwMDAwMDANCjIwMTIsS0NBLEFMLHNhbmNoam8wMSw1NjAwMDAwDQoyMDEyLEtDQSxBTCxnb3Jkb2FsMDEsNDc3NTAwMA0KMjAxMixLQ0EsQUwsY2hlbmJyMDEsNDUwMDAwMA0KMjAxMixLQ0EsQUwsYnJveHRqbzAxLDQwMDAwMDANCjIwMTIsS0NBLEFMLGhvY2hlbHUwMSwzNTEwMDAwDQoyMDEyLEtDQSxBTCxiZXRhbnl1MDEsMjAwMDAwMA0KMjAxMixLQ0EsQUwscGF1bGlmZTAxLDE5MDAwMDANCjIwMTIsS0NBLEFMLGNyb3dhYTAxLDE2MDAwMDANCjIwMTIsS0NBLEFMLHF1aW50aHUwMSwxMDAwMDAwDQoyMDEyLEtDQSxBTCxnZXR6Y2gwMSw5Njc1MDANCjIwMTIsS0NBLEFMLG1pamFyam8wMSw5MjUwMDANCjIwMTIsS0NBLEFMLHBlbmFicjAxLDg3NTAwMA0KMjAxMixLQ0EsQUwsbWFpZXJtaTAxLDg2NTAwMA0KMjAxMixLQ0EsQUwscGVyZXpzYTAyLDc1MDAwMA0KMjAxMixLQ0EsQUwsZXNjb2JhbDAyLDUxOTUwMA0KMjAxMixLQ0EsQUwsaG9zbWVlcjAxLDUwMjUwMA0KMjAxMixLQ0EsQUwsd29vZGJsMDEsNTAyMDAwDQoyMDEyLEtDQSxBTCxob2xsYWdyMDEsNDk3MTUwDQoyMDEyLEtDQSxBTCxjb2xsaXRpMDEsNDk1NzI1DQoyMDEyLEtDQSxBTCxtZW5kb2x1MDEsNDg4OTI1DQoyMDEyLEtDQSxBTCxib3VyZ2phMDEsNDg4MDAwDQoyMDEyLEtDQSxBTCx0ZWFmb2V2MDEsNDg4MDAwDQoyMDEyLEtDQSxBTCxkdWZmeWRhMDEsNDg3NzUwDQoyMDEyLEtDQSxBTCxtb3VzdG1pMDEsNDg3MjUwDQoyMDEyLEtDQSxBTCxjYWlubG8wMSw0ODA4NTANCjIwMTIsS0NBLEFMLGhlcnJla2UwMSw0ODA2NTANCjIwMTIsS0NBLEFMLHBpbmFtYTAxLDQ4MDQyNQ0KMjAxMixMQUEsQUwsd2VsbHN2ZTAxLDI0MTg3NTAwDQoyMDEyLExBQSxBTCxodW50ZXRvMDEsMTg1MDAwMDANCjIwMTIsTEFBLEFMLHdlYXZlamUwMiwxNDIwMDAwMA0KMjAxMixMQUEsQUwsaGFyZW5kYTAxLDEyNzUwMDAwDQoyMDEyLExBQSxBTCxwdWpvbGFsMDEsMTIwMDAwMDANCjIwMTIsTEFBLEFMLHNhbnRhZXIwMSwxMTIwMDAwMA0KMjAxMixMQUEsQUwsd2lsc29jajAxLDEwNTAwMDAwDQoyMDEyLExBQSxBTCxhYnJldWJvMDEsOTAwMDAwMA0KMjAxMixMQUEsQUwsYXliYXJlcjAxLDUwNzUwMDANCjIwMTIsTEFBLEFMLGRvd25zc2MwMSw1MDAwMDAwDQoyMDEyLExBQSxBTCxrZW5kcmhvMDEsNDg1MDAwMA0KMjAxMixMQUEsQUwsdGFrYWhoaTAxLDQyMDAwMDANCjIwMTIsTEFBLEFMLGl6dHVybWEwMSwzOTY2NjY2DQoyMDEyLExBQSxBTCxpYW5uZWNoMDEsMzU1MDAwMA0KMjAxMixMQUEsQUwsY2FsbGFhbDAxLDMxNTAwMDANCjIwMTIsTEFBLEFMLGhhd2tpbGEwMSwzMDAwMDAwDQoyMDEyLExBQSxBTCxtb3JhbGtlMDEsMjk3NTAwMA0KMjAxMixMQUEsQUwsd2lsbGlqZTAyLDgyMDAwMA0KMjAxMixMQUEsQUwsaXNyaW5qYTAxLDY1MDAwMA0KMjAxMixMQUEsQUwsamVwc2VrZTAxLDUwMTAwMA0KMjAxMixMQUEsQUwsYm91cmpwZTAxLDUwMDAwMA0KMjAxMixMQUEsQUwsdHJ1bWJtYTAxLDUwMDAwMA0KMjAxMixMQUEsQUwsdGhvbXByaTAzLDQ5NTAwMA0KMjAxMixMQUEsQUwsd2FsZGVqbzAxLDQ5NTAwMA0KMjAxMixMQUEsQUwsY2Fzc2VibzAxLDQ5MDAwMA0KMjAxMixMQUEsQUwsd2lsc29ibzAyLDQ4NzUwMA0KMjAxMixMQUEsQUwsa29obm1pMDEsNDgxNTAwDQoyMDEyLExBQSxBTCxhbWFyaWFsMDEsNDgxMDAwDQoyMDEyLExBQSxBTCxtb29yZWplMDIsNDgwMDAwDQoyMDEyLE1JTixBTCxtYXVlcmpvMDEsMjMwMDAwMDANCjIwMTIsTUlOLEFMLG1vcm5lanUwMSwxNTAwMDAwMA0KMjAxMixNSU4sQUwscGF2YW5jYTAxLDkwMDAwMDANCjIwMTIsTUlOLEFMLHdpbGxpam8wMyw3MDAwMDAwDQoyMDEyLE1JTixBTCxiYWtlcnNjMDIsNjUwMDAwMA0KMjAxMixNSU4sQUwsbGlyaWFmcjAxLDU1MDAwMDANCjIwMTIsTUlOLEFMLGJsYWNrbmkwMSw0NzUwMDAwDQoyMDEyLE1JTixBTCxjYXBwc21hMDEsNDUwMDAwMA0KMjAxMixNSU4sQUwsZG91bWlyeTAxLDMwMDAwMDANCjIwMTIsTUlOLEFMLHNwYW5kZTAxLDMwMDAwMDANCjIwMTIsTUlOLEFMLGNhcnJvamEwMSwyNzUwMDAwDQoyMDEyLE1JTixBTCxwZXJraWdsMDEsMTU1MDAwMA0KMjAxMixNSU4sQUwsY2FzaWxhbDAxLDEzODI1MDANCjIwMTIsTUlOLEFMLGJ1cnRvamEwMSw3NTAwMDANCjIwMTIsTUlOLEFMLGJ1cnJvc2UwMSw1MjUwMDANCjIwMTIsTUlOLEFMLGR1ZW5zYnIwMSw1MTUwMDANCjIwMTIsTUlOLEFMLHZhbGVuZGEwMSw1MTUwMDANCjIwMTIsTUlOLEFMLHJldmVyYmUwMSw0OTI1MDANCjIwMTIsTUlOLEFMLGJ1cm5lYWwwMSw0OTAwMDANCjIwMTIsTUlOLEFMLHN3YXJ6YW4wMSw0ODc1MDANCjIwMTIsTUlOLEFMLGdyYXlqZTAyLDQ4NTAwMA0KMjAxMixNSU4sQUwsaHVnaGVsdTAxLDQ4NTAwMA0KMjAxMixNSU4sQUwscGxvdWZ0cjAxLDQ4NTAwMA0KMjAxMixNSU4sQUwsbWFsb25tYTAyLDQ4MjUwMA0KMjAxMixNSU4sQUwsaGVuZHJsaTAxLDQ4MDAwMA0KMjAxMixNSU4sQUwscGFybWVjaDAxLDQ4MDAwMA0KMjAxMixNSU4sQUwsd2FsZHJreTAxLDQ4MDAwMA0KMjAxMixOWUEsQUwscm9kcmlhbDAxLDMwMDAwMDAwDQoyMDEyLE5ZQSxBTCx0ZWl4ZW1hMDEsMjMxMjUwMDANCjIwMTIsTllBLEFMLHNhYmF0Y2MwMSwyMzAwMDAwMA0KMjAxMixOWUEsQUwsamV0ZXJkZTAxLDE1NzI5MzY0DQoyMDEyLE5ZQSxBTCxyaXZlcm1hMDEsMTQ5NDAwMjUNCjIwMTIsTllBLEFMLGNhbm9ybzAxLDE0MDAwMDAwDQoyMDEyLE5ZQSxBTCxzb3JpYXJhMDEsMTEwMDAwMDANCjIwMTIsTllBLEFMLHN3aXNobmkwMSwxMDI1MDAwMA0KMjAxMixOWUEsQUwsZ3JhbmRjdTAxLDEwMDAwMDAwDQoyMDEyLE5ZQSxBTCxrdXJvZGhpMDEsMTAwMDAwMDANCjIwMTIsTllBLEFMLG1hcnRpcnUwMSw3NTAwMDAwDQoyMDEyLE5ZQSxBTCxnYXJjaWZyMDEsNDAwMDAwMA0KMjAxMixOWUEsQUwsZmVsaWNwZTAxLDM3NTAwMDANCjIwMTIsTllBLEFMLGh1Z2hlcGgwMSwzMjAwMDAwDQoyMDEyLE5ZQSxBTCxnYXJkbmJyMDEsMjgwMDAwMA0KMjAxMixOWUEsQUwsam9uZXNhbjAxLDIwMDAwMDANCjIwMTIsTllBLEFMLGxvZ2FuYm8wMiwxODc1MDAwDQoyMDEyLE5ZQSxBTCxjaGFtYmpvMDMsMTY3NTAwMA0KMjAxMixOWUEsQUwscm9iZXJkYTA4LDE2MDAwMDANCjIwMTIsTllBLEFMLGliYW5lcmEwMSwxMTAwMDAwDQoyMDEyLE5ZQSxBTCxjaGF2ZWVyMDEsOTAwMDAwDQoyMDEyLE5ZQSxBTCxwaW5lZG1pMDEsNTI4NDc1DQoyMDEyLE5ZQSxBTCxub3ZhaXYwMSw1MjcyMDANCjIwMTIsTllBLEFMLHJhcGFkY2wwMSw1MjUwMDANCjIwMTIsTllBLEFMLG51bmV6ZWQwMiw1MjM4MDANCjIwMTIsTllBLEFMLHdhZGVjbzAxLDUwODkyNQ0KMjAxMixOWUEsQUwsYWFyZHNkYTAxLDUwMDAwMA0KMjAxMixOWUEsQUwsc3Rld2FjaDAxLDQ4MjUwMA0KMjAxMixOWUEsQUwscm9taW5hdTAxLDQ4MjAwMA0KMjAxMixPQUssQUwsY2VzcGV5bzAxLDkwMDAwMDANCjIwMTIsT0FLLEFMLGNyaXNwY28wMSw2MDAwMDAwDQoyMDEyLE9BSyxBTCxzdXp1a2t1MDEsNTAzNzUwMA0KMjAxMixPQUssQUwsZnVlbnRicjAxLDUwMDAwMDANCjIwMTIsT0FLLEFMLG1jY2FyYnIwMSw0Mjc1MDAwDQoyMDEyLE9BSyxBTCxiYWxmb2dyMDEsNDAwMDAwMA0KMjAxMixPQUssQUwsYnJhZGVkYTAxLDMzNTAwMDANCjIwMTIsT0FLLEFMLGFuZGVyYnIwNCwzMjUwMDAwDQoyMDEyLE9BSyxBTCxzbWl0aHNlMDEsMjQxNTAwMA0KMjAxMixPQUssQUwsY29sb25iYTAxLDIwMDAwMDANCjIwMTIsT0FLLEFMLGJhcnRvZGEwMiwxMTAwMDAwDQoyMDEyLE9BSyxBTCxnb21lc2pvMDEsMTAwMDAwMA0KMjAxMixPQUssQUwsZGV2aW5qbzAxLDczNzUwMA0KMjAxMixPQUssQUwsYmxldmlqZTAxLDQ5MDAwMA0KMjAxMixPQUssQUwscGVubmljbDAxLDQ5MDAwMA0KMjAxMixPQUssQUwscmVkZGlqbzAxLDQ4NTAwMA0KMjAxMixPQUssQUwsc2l6ZW1zYzAxLDQ4NTAwMA0KMjAxMixPQUssQUwsYWxsZW5icjAxLDQ4MjUwMA0KMjAxMixPQUssQUwsY293Z2ljbzAxLDQ4MjUwMA0KMjAxMixPQUssQUwsZGVsb3NmYTAxLDQ4MjUwMA0KMjAxMixPQUssQUwsbm9yYmVqbzAxLDQ4MjUwMA0KMjAxMixPQUssQUwsc29nYXJlcjAxLDQ4MjUwMA0KMjAxMixPQUssQUwsd2Vla3NqZTAxLDQ4MjUwMA0KMjAxMixPQUssQUwsa2FhaWhraTAxLDQ4MjUwMA0KMjAxMixPQUssQUwsY2FyaWdhbjAxLDQ4MDAwMA0KMjAxMixPQUssQUwsY29va3J5MDEsNDgwMDAwDQoyMDEyLE9BSyxBTCxkb25hbGpvMDIsNDgwMDAwDQoyMDEyLE9BSyxBTCxnb2RmcmdyMDEsNDgwMDAwDQoyMDEyLE9BSyxBTCxtaWxvbnRvMDEsNDgwMDAwDQoyMDEyLE9BSyxBTCxyZWNrZWFuMDEsNDgwMDAwDQoyMDEyLFNFQSxBTCxoZXJuYWZlMDIsMTk3MDAwMDANCjIwMTIsU0VBLEFMLHN1enVraWMwMSwxODAwMDAwMA0KMjAxMixTRUEsQUwsZmlnZ2ljaDAxLDk1MDAwMDANCjIwMTIsU0VBLEFMLGd1dGllZnIwMSw1ODEyNTAwDQoyMDEyLFNFQSxBTCxsZWFndWJyMDEsNTAwMDAwMA0KMjAxMixTRUEsQUwsdmFyZ2FqYTAxLDQ4NTAwMDANCjIwMTIsU0VBLEFMLG9saXZvbWkwMSwzNzUwMDAwDQoyMDEyLFNFQSxBTCxhY2tsZWR1MDEsMjEwMDAwMA0KMjAxMixTRUEsQUwscnlhbmJyMDEsMTc1MDAwMA0KMjAxMixTRUEsQUwsaXdha3VoaTAxLDE1MDAwMDANCjIwMTIsU0VBLEFMLHNoZXJyZ2UwMSwxMTAwMDAwDQoyMDEyLFNFQSxBTCxtaWxsd2tlMDEsMTAwMDAwMA0KMjAxMixTRUEsQUwsa2F3YXNtdTAxLDYyNTAwMA0KMjAxMixTRUEsQUwsamFzb2pvMDEsNDk1MjAwDQoyMDEyLFNFQSxBTCxzbW9ha2p1MDEsNDk1MTAwDQoyMDEyLFNFQSxBTCxzYXVuZG1pMDEsNDg5MTAwDQoyMDEyLFNFQSxBTCxjYXJwbWkwMSw0ODg4MDANCjIwMTIsU0VBLEFMLHdlbGxzY2EwMSw0ODgyMDANCjIwMTIsU0VBLEFMLG5vZXNpaGUwMSw0ODgwMDANCjIwMTIsU0VBLEFMLG1vbnRlamUwMSw0ODY5MDANCjIwMTIsU0VBLEFMLGJlYXZhYmwwMSw0ODY1MDANCjIwMTIsU0VBLEFMLHNlYWdla3kwMSw0ODQzMDANCjIwMTIsU0VBLEFMLG1vb3JlYWQwMSw0ODM2MDANCjIwMTIsU0VBLEFMLHdpbGhldG8wMSw0ODI5MDANCjIwMTIsU0VBLEFMLGxpZGRpYWwwMSw0ODEzMDANCjIwMTIsU0VBLEFMLGRlbGFic3QwMSw0ODA3MDANCjIwMTIsU0VBLEFMLHJhbWlyZXIwMSw0ODAwMDANCjIwMTIsU0VBLEFMLGx1ZXRnbHUwMSw0ODAwMDANCjIwMTIsVEJBLEFMLHNoaWVsamEwMiw4MDAwMDAwDQoyMDEyLFRCQSxBTCxwZW5hY2EwMSw3MjUwMDAwDQoyMDEyLFRCQSxBTCx1cHRvbmJqMDEsNzAwMDAwMA0KMjAxMixUQkEsQUwsc2NvdHRsdTAxLDUwMDAwMDANCjIwMTIsVEJBLEFMLHpvYnJpYmUwMSw0Njg3MzAwDQoyMDEyLFRCQSxBTCxsb25nb2V2MDEsNDUwMDAwMA0KMjAxMixUQkEsQUwscHJpY2VkYTAxLDQzNTAwMDANCjIwMTIsVEJBLEFMLGZhcm5za3kwMSwzMzAwMDAwDQoyMDEyLFRCQSxBTCxuaWVtYWplMDEsMjc1MDAwMA0KMjAxMixUQkEsQUwscGVyYWxqbzAxLDIxNzUwMDANCjIwMTIsVEJBLEFMLHJvZG5lZmUwMSwxNzUwMDAwDQoyMDEyLFRCQSxBTCxrZXBwaWplMDEsMTUyNTAwMA0KMjAxMixUQkEsQUwsZGF2aXN3YTAxLDE1MDAwMDANCjIwMTIsVEJBLEFMLG1vbGluam8wMSwxNTAwMDAwDQoyMDEyLFRCQSxBTCxob3dlbGpwMDEsMTM1MDAwMA0KMjAxMixUQkEsQUwsbW9vcmVtYTAyLDExMDAwMDANCjIwMTIsVEJBLEFMLGJhZGVuYnUwMSwxMDc1MDAwDQoyMDEyLFRCQSxBTCxqb3ljZW1hMDEsNDk5NTAwDQoyMDEyLFRCQSxBTCxyb2RyaXNlMDEsNDkyODAwDQoyMDEyLFRCQSxBTCxicmlnbnJlMDEsNDkwNjAwDQoyMDEyLFRCQSxBTCxoZWxsaWplMDEsNDg5NTAwDQoyMDEyLFRCQSxBTCxmdWxkc2EwMSw0ODk0MDANCjIwMTIsVEJBLEFMLGplbm5pZGUwMSw0ODY5MDANCjIwMTIsVEJBLEFMLGpvaG5zZWwwMiw0ODYxMDANCjIwMTIsVEJBLEFMLG1jZ2VlamEwMSw0ODQyMDANCjIwMTIsVEJBLEFMLGxvYmF0am8wMSw0ODE1MDANCjIwMTIsVEJBLEFMLGNoaXJpcm8wMSw0ODA3MDANCjIwMTIsVEJBLEFMLHZvZ3RzdDAxLDQ4MDAwMA0KMjAxMixURVgsQUwseW91bmdtaTAyLDE2MTc0OTc0DQoyMDEyLFRFWCxBTCxoYW1pbGpvMDMsMTUyNTAwMDANCjIwMTIsVEVYLEFMLGJlbHRyYWQwMSwxNTAwMDAwMA0KMjAxMixURVgsQUwsbmFwb2xtaTAxLDk0MDAwMDANCjIwMTIsVEVYLEFMLGtpbnNsaWEwMSw3MjAwMDAwDQoyMDEyLFRFWCxBTCxuYXRoYWpvMDEsNzAwMDAwMA0KMjAxMixURVgsQUwsZmVsZG1zYzAxLDY1MDAwMDANCjIwMTIsVEVYLEFMLGNydXpuZTAyLDYyNTAwMDANCjIwMTIsVEVYLEFMLGRhcnZpeXUwMSw1NTAwMDAwDQoyMDEyLFRFWCxBTCxhZGFtc21pMDMsNDQwMDAwMA0KMjAxMixURVgsQUwsbGV3aXNjbzAxLDQwMDAwMDANCjIwMTIsVEVYLEFMLHVlaGFya28wMSw0MDAwMDAwDQoyMDEyLFRFWCxBTCxtdXJwaGRhMDcsMzYyNTAwMA0KMjAxMixURVgsQUwsdG9ycmV5bzAxLDMyNTAwMDANCjIwMTIsVEVYLEFMLGhhcnJpbWEwMSwyOTUwMDAwDQoyMDEyLFRFWCxBTCxhbmRydWVsMDEsMjYyNTAwMA0KMjAxMixURVgsQUwsbG93ZW1hMDEsMTcwMDAwMA0KMjAxMixURVgsQUwsaG9sbGFkZTAxLDEwMDAwMDANCjIwMTIsVEVYLEFMLHRhdGV5eW8wMSwxMDAwMDAwDQoyMDEyLFRFWCxBTCxnb256YWFsMDMsNzUwMDAwDQoyMDEyLFRFWCxBTCxmZWxpem5lMDEsNTAyMDAwDQoyMDEyLFRFWCxBTCxvZ2FuZGFsMDEsNDk3NjAwDQoyMDEyLFRFWCxBTCxtb3JlbG1pMDEsNDkxMTAwDQoyMDEyLFRFWCxBTCxnZW50cmNyMDEsNDg0MzAwDQoyMDEyLFRFWCxBTCxzbnlkZWJyMDMsNDgxMDAwDQoyMDEyLFRFWCxBTCxyb3Nzcm8wMSw0ODAwMDANCjIwMTIsVE9SLEFMLGJhdXRpam8wMiwxNDAwMDAwMA0KMjAxMixUT1IsQUwsam9obnNrZTA1LDYzNzUwMDANCjIwMTIsVE9SLEFMLHJvbWVycmkwMSw1MjUwMDAwDQoyMDEyLFRPUixBTCxsaW5kYWQwMSw1MTUwMDAwDQoyMDEyLFRPUixBTCxlc2NvYnl1MDEsNTAwMDAwMA0KMjAxMixUT1IsQUwsY29yZGVmcjAxLDQ1MDAwMDANCjIwMTIsVE9SLEFMLG1vcnJvYnIwMSw0MDAwMDAwDQoyMDEyLFRPUixBTCxvbGl2ZWRhMDIsNDAwMDAwMA0KMjAxMixUT1IsQUwsZnJhc29qYTAxLDM3NTAwMDANCjIwMTIsVE9SLEFMLGVuY2FyZWQwMSwzNTAwMDAwDQoyMDEyLFRPUixBTCxkYXZpc3JhMDEsMjc1MDAwMA0KMjAxMixUT1IsQUwscmFzbXVjbzAxLDI3MDAwMDANCjIwMTIsVE9SLEFMLHZpbGxhY2EwMSwyMjc3NTAwDQoyMDEyLFRPUixBTCxqYW5zc2NhMDEsMjAwMDAwMA0KMjAxMixUT1IsQUwsZnJhbmNiZTAxLDE1Mzc1MDANCjIwMTIsVE9SLEFMLG1hdGhpamUwMSwxNTAwMDAwDQoyMDEyLFRPUixBTCxzYW50b3NlMDEsMTAwMDAwMA0KMjAxMixUT1IsQUwsbGl0c2NqZTAxLDk3NTAwMA0KMjAxMixUT1IsQUwsdml6cXVvbTAxLDc1MDAwMA0KMjAxMixUT1IsQUwsbWNnb3dkdTAxLDYwMDAwMA0KMjAxMixUT1IsQUwsYXJlbmNqcDAxLDQ4OTYwMA0KMjAxMixUT1IsQUwsZHJhYmVreTAxLDQ4NTkwMA0KMjAxMixUT1IsQUwsdGhhbWVlcjAxLDQ4NTkwMA0KMjAxMixUT1IsQUwscGVyZXpsdTAxLDQ4NTcwMA0KMjAxMixUT1IsQUwsYWx2YXJoZTAxLDQ4MjkwMA0KMjAxMixUT1IsQUwsbGF3cmlicjAxLDQ4MjUwMA0KMjAxMixUT1IsQUwsY2FycmVqbzAxLDQ4MTcwMA0KMjAxMixBUkksTkwsZHJld3N0MDEsNzc1MDAwMA0KMjAxMixBUkksTkwsa3ViZWxqYTAxLDc1MDAwMDANCjIwMTIsQVJJLE5MLHlvdW5nY2gwNCw3MjAwMDAwDQoyMDEyLEFSSSxOTCx1cHRvbmp1MDEsNjk1ODMzMw0KMjAxMixBUkksTkwsc2F1bmRqbzAxLDYwMDAwMDANCjIwMTIsQVJJLE5MLG1vbnRlbWkwMSw1OTAwMDAwDQoyMDEyLEFSSSxOTCxoaWxsYWEwMSw1NTAwMDAwDQoyMDEyLEFSSSxOTCxwdXR6amowMSw0NTAwMDAwDQoyMDEyLEFSSSxOTCxjYWhpbHRyMDEsMzcwMDAwMA0KMjAxMixBUkksTkwscm9iZXJyeTAxLDIwMTI1MDANCjIwMTIsQVJJLE5MLGJsb29td2kwMSwxOTAwMDAwDQoyMDEyLEFSSSxOTCxicmVzbGNyMDEsMTc5NTAwMA0KMjAxMixBUkksTkwsemllZ2xicjAxLDE3OTUwMDANCjIwMTIsQVJJLE5MLHNhaXRvdGEwMSwxNzUwMDAwDQoyMDEyLEFSSSxOTCxtY2RvbmpvMDMsMTUwMDAwMA0KMjAxMixBUkksTkwsYmx1bWdlMDEsMTM1MDAwMA0KMjAxMixBUkksTkwsYmxhbmNoZTAxLDEyNTAwMDANCjIwMTIsQVJJLE5MLG92ZXJibHkwMSwxMDAwMDAwDQoyMDEyLEFSSSxOTCxrZW5uZWlhMDEsNTE5NTAwDQoyMDEyLEFSSSxOTCxodWRzb2RhMDEsNTA0MDAwDQoyMDEyLEFSSSxOTCxwYXJyYWdlMDEsNTAyMDAwDQoyMDEyLEFSSSxOTCxoZXJuYWRhMDEsNDk5MDAwDQoyMDEyLEFSSSxOTCxwYXRlcmpvMDEsNDg3NTAwDQoyMDEyLEFSSSxOTCxjb2xsbWpvMDEsNDg2MDAwDQoyMDEyLEFSSSxOTCxzaGF3YnIwMSw0ODMwMDANCjIwMTIsQVJJLE5MLGdvbGRzcGEwMSw0ODIwMDANCjIwMTIsQVJJLE5MLG1pbGV5d2EwMSw0ODEwMDANCjIwMTIsQVRMLE5MLGpvbmVzY2gwNiwxNDAwMDAwMA0KMjAxMixBVEwsTkwsdWdnbGFkYTAxLDEzMTQ2OTQyDQoyMDEyLEFUTCxOTCxtY2NhbmJyMDEsMTE1MDAwMDANCjIwMTIsQVRMLE5MLGh1ZHNvdGkwMSw5MDAwMDAwDQoyMDEyLEFUTCxOTCxib3Vybm1pMDEsNjg0NTAwMA0KMjAxMixBVEwsTkwsanVycmpqYTAxLDU1MDAwMDANCjIwMTIsQVRMLE5MLHByYWRvbWEwMSw0NzUwMDAwDQoyMDEyLEFUTCxOTCxvZmxhaGVyMDEsMjQ5MDAwMA0KMjAxMixBVEwsTkwsZGlhem1hMDIsMjEyNTAwMA0KMjAxMixBVEwsTkwscm9zc2RhMDEsMTYyNTAwMA0KMjAxMixBVEwsTkwsaGluc2tlcjAxLDE2MDAwMDANCjIwMTIsQVRMLE5MLHdpbHNvamEwMiwxMDAwMDAwDQoyMDEyLEFUTCxOTCxkdXJiaWNoMDEsOTAwMDAwDQoyMDEyLEFUTCxOTCxoZXJuYWxpMDEsNzUwMDAwDQoyMDEyLEFUTCxOTCxraW1icmNyMDEsNTkwMDAwDQoyMDEyLEFUTCxOTCxoZXl3YWphMDEsNTY1MDAwDQoyMDEyLEFUTCxOTCxmcmVlbWZyMDEsNTM1MDAwDQoyMDEyLEFUTCxOTCxoYW5zb3RvMDEsNTM1MDAwDQoyMDEyLEFUTCxOTCx2ZW50ZWpvMDEsNTMzMDAwDQoyMDEyLEFUTCxOTCxiZWFjaGJyMDEsNDk1MDAwDQoyMDEyLEFUTCxOTCxtYXJ0aWNyMDEsNDkxMjUwDQoyMDEyLEFUTCxOTCxtZWRsZWtyMDEsNDkwMDAwDQoyMDEyLEFUTCxOTCxtaW5vcm1pMDEsNDgyNTAwDQoyMDEyLEFUTCxOTCx2YXJ2YWFuMDEsNDgxMjUwDQoyMDEyLEFUTCxOTCxjb25zdGpvMDEsNDgwMDAwDQoyMDEyLEFUTCxOTCxkZWxnYXJhMDEsNDgwMDAwDQoyMDEyLEFUTCxOTCxmcmFuY2p1MDIsNDgwMDAwDQoyMDEyLEFUTCxOTCx2aXpjYWFyMDEsNDgwMDAwDQoyMDEyLEFUTCxOTCxwYXN0b3R5MDEsNDgwMDAwDQoyMDEyLENITixOTCxzb3JpYWFsMDEsMTkwMDAwMDANCjIwMTIsQ0hOLE5MLGRlbXBzcnkwMSwxNDAwMDAwMA0KMjAxMixDSE4sTkwsZ2FyemFtYTAxLDk1MDAwMDANCjIwMTIsQ0hOLE5MLG1hcm1vY2EwMSw3MzMzMzMzDQoyMDEyLENITixOTCxieXJkbWEwMSw2NTAwMDAwDQoyMDEyLENITixOTCxzb3RvZ2UwMSw0MzAwMDAwDQoyMDEyLENITixOTCxkZWplc2RhMDEsNDI1MDAwMA0KMjAxMixDSE4sTkwsbWFob2xwYTAxLDQyNTAwMDANCjIwMTIsQ0hOLE5MLHdvb2RrZTAyLDMwMDAwMDANCjIwMTIsQ0hOLE5MLHZvbHN0Y2gwMSwyNjU1MDAwDQoyMDEyLENITixOTCxzYW1hcmplMDEsMjY0MDAwMA0KMjAxMixDSE4sTkwsc3Rld2FpYTAxLDIyMzc1MDANCjIwMTIsQ0hOLE5MLGJha2VyamUwMywxMzc1MDAwDQoyMDEyLENITixOTCxqb2huc3JlMDIsMTE1MDAwMA0KMjAxMixDSE4sTkwsY2FzdHJzdDAxLDU2NzAwMA0KMjAxMixDSE4sTkwsY2FtcHNoMDEsNTUwMDAwDQoyMDEyLENITixOTCxydXNzZWphMDIsNTEyNTAwDQoyMDEyLENITixOTCxiYXJuZWRhMDEsNTAwMDAwDQoyMDEyLENITixOTCx2YWxidWx1MDEsNDk1MjAwDQoyMDEyLENITixOTCxtYXRoZWpvMDIsNDkwMDAwDQoyMDEyLENITixOTCxtYXRlb21hMDEsNDg1MDAwDQoyMDEyLENITixOTCxjYW1wYXRvMDEsNDgzMDAwDQoyMDEyLENITixOTCxsYWhhaWJyMDEsNDgyNTAwDQoyMDEyLENITixOTCxjbGV2ZXN0MDEsNDgwNTAwDQoyMDEyLENITixOTCxkb2xpc3JhMDEsNDgwNTAwDQoyMDEyLENITixOTCxjYXN0aWxlMDEsNDgwMDAwDQoyMDEyLENJTixOTCxwaGlsbGJyMDEsMTI1MDAwMDANCjIwMTIsQ0lOLE5MLHZvdHRvam8wMSwxMTQxMDY1NQ0KMjAxMixDSU4sTkwsYXJyb3licjAxLDgxNjY2NjYNCjIwMTIsQ0lOLE5MLHJvbGVuc2MwMSw4MTY2NjY2DQoyMDEyLENJTixOTCxtYWRzb3J5MDEsNTg5NzY5MQ0KMjAxMixDSU4sTkwsY3VldG9qbzAxLDU0MDAwMDANCjIwMTIsQ0lOLE5MLGJydWNlamEwMSw1MDQxNjY2DQoyMDEyLENJTixOTCxjaGFwbWFyMDEsNDgzNTc3Mg0KMjAxMixDSU4sTkwsbWFyc2hzZTAxLDI3MjUwMDANCjIwMTIsQ0lOLE5MLGJhaWxlaG8wMiwyNDI1MDAwDQoyMDEyLENJTixOTCxtYXNzZW5pMDEsMjQwMDAwMA0KMjAxMixDSU4sTkwsbHVkd2lyeTAxLDIwMDAwMDANCjIwMTIsQ0lOLE5MLGJyYXliaTAxLDE0MTc1MDANCjIwMTIsQ0lOLE5MLGhhbmlncnkwMSwxMzAwMDAwDQoyMDEyLENJTixOTCxjYWlyb21pMDEsMTAwMDAwMA0KMjAxMixDSU4sTkwsdmFsZGV3aTAxLDkzMDAwMA0KMjAxMixDSU4sTkwsYXJyZWRqbzAxLDgwMDAwMA0KMjAxMixDSU4sTkwsaGFycml3aTAxLDgwMDAwMA0KMjAxMixDSU4sTkwsbGF0b3NtYTAxLDU1MDAwMA0KMjAxMixDSU4sTkwsc3R1YmJkcjAxLDUyNzUwMA0KMjAxMixDSU4sTkwsbGVha2VtaTAxLDUwNzUwMA0KMjAxMixDSU4sTkwsaGVpc2VjaDAxLDQ5NTAwMA0KMjAxMixDSU4sTkwsb25kcnVsbzAxLDQ5MjUwMA0KMjAxMixDSU4sTkwsbGVjdXJzYTAxLDQ4NzUwMA0KMjAxMixDSU4sTkwsc2ltb25hbDAxLDQ4NzAwMA0KMjAxMixDSU4sTkwsY296YXJ6YTAxLDQ4MDAwMA0KMjAxMixDSU4sTkwsbWVzb3JkZTAxLDQ4MDAwMA0KMjAxMixDSU4sTkwsc21pdGhqbzA2LDQ4MDAwMA0KMjAxMixDT0wsTkwsY3VkZHltaTAxLDEwNTAwMDAwDQoyMDEyLENPTCxOTCxkZWxhcmpvMDEsMTA1MDAwMDANCjIwMTIsQ09MLE5MLHR1bG93dHIwMSw4MjUwMDAwDQoyMDEyLENPTCxOTCxndXRocmplMDEsODIwMDAwMA0KMjAxMixDT0wsTkwsaGVsdG90bzAxLDYwNzUwMDANCjIwMTIsQ09MLE5MLHNjdXRhbWEwMSw2MDAwMDAwDQoyMDEyLENPTCxOTCxnb256YWNhMDEsNTQyODU3MQ0KMjAxMixDT0wsTkwsYmV0YW5yYTAxLDQwMDAwMDANCjIwMTIsQ09MLE5MLGJlbGlzbWEwMSwzNzc1MDAwDQoyMDEyLENPTCxOTCxoZXJuYXJhMDIsMzIwMDAwMA0KMjAxMixDT0wsTkwsZm93bGVkZTAxLDIzNTAwMDANCjIwMTIsQ09MLE5MLG1veWVyamEwMSwxMTAwMDAwDQoyMDEyLENPTCxOTCxnaWFtYmphMDEsMTAwMDAwMA0KMjAxMixDT0wsTkwsY2hhY2lqaDAxLDQ4MjAwMA0KMjAxMixDT0wsTkwsaGVycmVqbzAzLDQ4MjAwMA0KMjAxMixDT0wsTkwsb3V0bWFqbzAxLDQ4MjAwMA0KMjAxMixDT0wsTkwsY29sdml0eTAxLDQ4MTAwMA0KMjAxMixDT0wsTkwscmV5bm9tYTAyLDQ4MTAwMA0KMjAxMixDT0wsTkwscm9lbmlqbzAxLDQ4MTAwMA0KMjAxMixDT0wsTkwscm9nZXJlczAxLDQ4MTAwMA0KMjAxMixDT0wsTkwseW91bmdlcjAzLDQ4MTAwMA0KMjAxMixDT0wsTkwsYnJvdGhyZTAxLDQ4MDAwMA0KMjAxMixDT0wsTkwsY2hhdHd0eTAxLDQ4MDAwMA0KMjAxMixDT0wsTkwsZ29tZXpoZTAxLDQ4MDAwMA0KMjAxMixDT0wsTkwsbmVsc29jaDAxLDQ4MDAwMA0KMjAxMixDT0wsTkwsbmljYXNqdTAxLDQ4MDAwMA0KMjAxMixDT0wsTkwscGFjaGVqbzAxLDQ4MDAwMA0KMjAxMixDT0wsTkwscm9zYXJ3aTAxLDQ4MDAwMA0KMjAxMixDT0wsTkwsYmxhY2tjaDAyLDQ4MDAwMA0KMjAxMixIT1UsTkwsbGVlY2EwMSwxOTAwMDAwMA0KMjAxMixIT1UsTkwsbXllcnNicjAxLDEyMDAwMDAwDQoyMDEyLEhPVSxOTCxyb2RyaXdhMDEsMTA1MDAwMDANCjIwMTIsSE9VLE5MLGx5b25icjAxLDU1MDAwMDANCjIwMTIsSE9VLE5MLGhhcHBqYTAxLDIzNTAwMDANCjIwMTIsSE9VLE5MLGxvd3JpamUwMSwxMTUwMDAwDQoyMDEyLEhPVSxOTCxzbnlkZWNoMDIsNzUwMDAwDQoyMDEyLEhPVSxOTCxidWNrdHIwMSw1ODAwMDANCjIwMTIsSE9VLE5MLGxvcGV6d2kwMSw1MTU1MDANCjIwMTIsSE9VLE5MLHdyaWdod2UwMSw1MTIwMDANCjIwMTIsSE9VLE5MLG5vcnJpYnUwMSw1MTEwMDANCjIwMTIsSE9VLE5MLGpvaG5zY2gwNSw0OTUwMDANCjIwMTIsSE9VLE5MLHJvZHJpZmUwMiw0OTIwMDANCjIwMTIsSE9VLE5MLGVzY2Fsc2UwMSw0OTA1MDANCjIwMTIsSE9VLE5MLHNjaGFmam8wMiw0ODkwMDANCjIwMTIsSE9VLE5MLGRvd25zbWEwMSw0ODc1MDANCjIwMTIsSE9VLE5MLGNhc3RyamEwMSw0ODYwMDANCjIwMTIsSE9VLE5MLGFiYWRmZTAxLDQ4NTAwMA0KMjAxMixIT1UsTkwsY2FycGVkYTAxLDQ4NTAwMA0KMjAxMixIT1UsTkwsYWx0dXZqbzAxLDQ4MzAwMA0KMjAxMixIT1UsTkwsYm9ndXNicjAxLDQ4MzAwMA0KMjAxMixIT1UsTkwsbWFydGlqZDAyLDQ4MzAwMA0KMjAxMixIT1UsTkwsaGFycmVsdTAxLDQ4MjAwMA0KMjAxMixIT1UsTkwsd2VpbGFreTAxLDQ4MTUwMA0KMjAxMixIT1UsTkwsY3J1enJoMDEsNDgwMDAwDQoyMDEyLEhPVSxOTCxnb256YW1hMDEsNDgwMDAwDQoyMDEyLExBTixOTCxsaWxseXRlMDEsMTE2NjY2NjYNCjIwMTIsTEFOLE5MLGV0aGllYW4wMSwxMDk1MDAwMA0KMjAxMixMQU4sTkwsa2VtcG1hMDEsMTAyNTAwMDANCjIwMTIsTEFOLE5MLGJpbGxpY2gwMSw5MDAwMDAwDQoyMDEyLExBTixOTCx1cmliZWp1MDEsODI5NTkxMA0KMjAxMixMQU4sTkwsa2Vyc2hjbDAxLDc3NTAwMDANCjIwMTIsTEFOLE5MLGxvbmV5amEwMSw2Mzc1MDAwDQoyMDEyLExBTixOTCxndWVycm1hMDIsNDcxMTQ5OQ0KMjAxMixMQU4sTkwsaGFyYW5hYTAxLDQwMDAwMDANCjIwMTIsTEFOLE5MLHJpdmVyanUwMSw0MDAwMDAwDQoyMDEyLExBTixOTCxjYXB1YWNoMDEsMzAwMDAwMA0KMjAxMixMQU4sTkwsZWxsaXNtYTAxLDI1MDAwMDANCjIwMTIsTEFOLE5MLGhhaXJzamUwMiwyMjUwMDAwDQoyMDEyLExBTixOTCxjb2ZmZXRvMDEsMTAwMDAwMA0KMjAxMixMQU4sTkwsd3JpZ2hqYTAxLDkwMDAwMA0KMjAxMixMQU4sTkwsZ3d5bm50bzAyLDg1MDAwMA0KMjAxMixMQU4sTkwsdHJlYW5tYTAxLDg1MDAwMA0KMjAxMixMQU4sTkwsa2VubmVhZDAxLDgwMDAwMA0KMjAxMixMQU4sTkwsbWFjZG9taTAxLDY1MDAwMA0KMjAxMixMQU4sTkwsaGF3a3NibDAxLDQ5NTAwMA0KMjAxMixMQU4sTkwsamFuc2VrZTAxLDQ5MTAwMA0KMjAxMixMQU4sTkwsZWxsaXNhajAxLDQ5MDAwMA0KMjAxMixMQU4sTkwsZWxiZXJzYzAxLDQ4ODUwMA0KMjAxMixMQU4sTkwsZ3VlcnJqYTAxLDQ4ODAwMA0KMjAxMixMQU4sTkwsZ29yZG9kZTAxLDQ4NTAwMA0KMjAxMixMQU4sTkwsbGluZGJqbzAxLDQ4MzAwMA0KMjAxMixMQU4sTkwsZGVsYXJydTAxLDQ4MjUwMA0KMjAxMixMQU4sTkwsc2VsbGVqdTAxLDQ4MTAwMA0KMjAxMixMQU4sTkwsZGVqZXNpdjAyLDQ4MDUwMA0KMjAxMixMQU4sTkwsYmVsaXNybzAxLDQ4MDAwMA0KMjAxMixNSUEsTkwsemFtYnJjYTAxLDE5MDAwMDAwDQoyMDEyLE1JQSxOTCxyYW1pcmhhMDEsMTUwMDAwMDANCjIwMTIsTUlBLE5MLGpvaG5zam8wOSwxMzc1MDAwMA0KMjAxMixNSUEsTkwscmV5ZXNqbzAxLDEwMDAwMDAwDQoyMDEyLE1JQSxOTCxub2xhc3JpMDEsOTAwMDAwMA0KMjAxMixNSUEsTkwsc2FuY2hhbjAxLDgwMDAwMDANCjIwMTIsTUlBLE5MLGJlbGxoZTAxLDcwMDAwMDANCjIwMTIsTUlBLE5MLGJ1ZWhybWEwMSw3MDAwMDAwDQoyMDEyLE1JQSxOTCxidWNram8wMSw2NTAwMDAwDQoyMDEyLE1JQSxOTCxudW5lemxlMDEsNjAwMDAwMA0KMjAxMixNSUEsTkwsaW5mYW5vbTAxLDQwMDAwMDANCjIwMTIsTUlBLE5MLGJvbmlmZW0wMSwyMjAwMDAwDQoyMDEyLE1JQSxOTCxtdWppY2VkMDEsMTYyNTAwMA0KMjAxMixNSUEsTkwsY2hvYXRyYTAxLDE1MDAwMDANCjIwMTIsTUlBLE5MLGRvYmJzZ3IwMSwxNDAwMDAwDQoyMDEyLE1JQSxOTCxnYXVkaWNoMDEsNjAwMDAwDQoyMDEyLE1JQSxOTCxrZWFybmF1MDEsNjAwMDAwDQoyMDEyLE1JQSxOTCxtdXJwaGRvMDEsNTYwMDAwDQoyMDEyLE1JQSxOTCxjb2dobGNoMDEsNTAwMDAwDQoyMDEyLE1JQSxOTCxzYW5jaGdhMDEsNDgzMDAwDQoyMDEyLE1JQSxOTCxjZWRham8wMSw0ODAwMDANCjIwMTIsTUlBLE5MLGNpc2hlc3QwMSw0ODAwMDANCjIwMTIsTUlBLE5MLGR1bm5taTAxLDQ4MDAwMA0KMjAxMixNSUEsTkwsaGF5ZXNicjAxLDQ4MDAwMA0KMjAxMixNSUEsTkwsbW9ycmlsbzAxLDQ4MDAwMA0KMjAxMixNSUEsTkwsc3RhbnRtaTAzLDQ4MDAwMA0KMjAxMixNSUEsTkwsd2ViYnJ5MDEsNDgwMDAwDQoyMDEyLE1JTCxOTCxncmVpbnphMDEsMTM1MDAwMDANCjIwMTIsTUlMLE5MLHdlZWtzcmkwMSwxMTAwMDAwMA0KMjAxMixNSUwsTkwsd29sZnJhMDIsOTUwMDAwMA0KMjAxMixNSUwsTkwsaGFydGNvMDEsOTMzMzMzMw0KMjAxMixNSUwsTkwscm9kcmlmcjAzLDgwMDAwMDANCjIwMTIsTUlMLE5MLG1hcmN1c2gwMSw3NzI1MDAwDQoyMDEyLE1JTCxOTCxicmF1bnJ5MDIsNzExMTExMQ0KMjAxMixNSUwsTkwscmFtaXJhcjAxLDYwMDAwMDANCjIwMTIsTUlMLE5MLGdhbGxheW8wMSw1NzUwMDAwDQoyMDEyLE1JTCxOTCxnb256YWFsMDIsMzUwMDAwMA0KMjAxMixNSUwsTkwsbW9yZ2FueTAxLDIzNTAwMDANCjIwMTIsTUlMLE5MLGxvZWthMDEsMjE3NTAwMA0KMjAxMixNSUwsTkwsdmVyYXNqbzAxLDIwMDAwMDANCjIwMTIsTUlMLE5MLGdvbWV6Y2EwMSwxOTYyNTAwDQoyMDEyLE1JTCxOTCxwYXJyYW1hMDEsMTIwMDAwMA0KMjAxMixNSUwsTkwsYW9raW5vMDEsMTAwMDAwMA0KMjAxMixNSUwsTkwsaXp0dXJjZTAxLDg3NTAwMA0KMjAxMixNSUwsTkwsa290dGFnZTAxLDcwMDAwMA0KMjAxMixNSUwsTkwsYXhmb3JqbzAxLDUyNTAwMA0KMjAxMixNSUwsTkwsaXNoaWt0cjAxLDUyNTAwMA0KMjAxMixNSUwsTkwsbmFydmVjaDAxLDUwMDAwMA0KMjAxMixNSUwsTkwsbHVjcm9qbzAxLDQ5MjAwMA0KMjAxMixNSUwsTkwsZXN0cmFtYTAxLDQ4NjAwMA0KMjAxMixNSUwsTkwsZGlsbGF0aTAxLDQ4MjAwMA0KMjAxMixNSUwsTkwsZ2FtZWxtYTAxLDQ4MTAwMA0KMjAxMixNSUwsTkwsa2ludHpicjAxLDQ4MTAwMA0KMjAxMixOWU4sTkwsc2FudGFqbzAxLDIzMTQ1MDExDQoyMDEyLE5ZTixOTCxiYXlqYTAxLDE4MTI1MDAwDQoyMDEyLE5ZTixOTCx3cmlnaGRhMDMsMTUyNTAwMDANCjIwMTIsTllOLE5MLHBlbGZybWkwMSw1Njg3NTAwDQoyMDEyLE5ZTixOTCxmcmFuY2ZyMDEsNTUwMDAwMA0KMjAxMixOWU4sTkwsZGlja2VyYTAxLDQ3NTAwMDANCjIwMTIsTllOLE5MLHJhdWNoam8wMSwzNTAwMDAwDQoyMDEyLE5ZTixOTCx0b3JyZWFuMDIsMjcwMDAwMA0KMjAxMixOWU4sTkwscmFtaXJyYTAyLDI2NTAwMDANCjIwMTIsTllOLE5MLGNhcnJhZGowMSwxMjAwMDAwDQoyMDEyLE5ZTixOTCxjZWRlbnJvMDIsMTE1MDAwMA0KMjAxMixOWU4sTkwsaGFpcnNzYzAxLDExMDAwMDANCjIwMTIsTllOLE5MLGJ5cmRhdGkwMSwxMDAwMDAwDQoyMDEyLE5ZTixOTCxhY29zdG1hMDEsODc1MDAwDQoyMDEyLE5ZTixOTCxiYXRpc21pMDEsNzUwMDAwDQoyMDEyLE5ZTixOTCxuaWVzZWpvMDEsNTE5NTUwDQoyMDEyLE5ZTixOTCxtdXJwaGRhMDgsNTEyMTk2DQoyMDEyLE5ZTixOTCxkYXZpc2lrMDIsNTA2NjkwDQoyMDEyLE5ZTixOTCxwYXJuZWJvMDEsNTA0MDAwDQoyMDEyLE5ZTixOTCxnZWVkaTAxLDUwMjAwMA0KMjAxMixOWU4sTkwsdGhvbGVqbzAxLDQ5ODkyMA0KMjAxMixOWU4sTkwsZHVkYWx1MDEsNDk3MzE4DQoyMDEyLE5ZTixOTCx0ZWphZHJ1MDEsNDkxMjA5DQoyMDEyLE5ZTixOTCx0dXJuZWp1MDEsNDkxMjA5DQoyMDEyLE5ZTixOTCxiZWF0b3BlMDEsNDg3NTAwDQoyMDEyLE5ZTixOTCxuaWNrZW1pMDEsNDgwODgwDQoyMDEyLE5ZTixOTCxiYXh0ZW1pMDEsNDgwMDAwDQoyMDEyLFBISSxOTCxsZWVjbDAyLDIxNTAwMDAwDQoyMDEyLFBISSxOTCxoYWxsYXJvMDEsMjAwMDAwMDANCjIwMTIsUEhJLE5MLGhvd2FycnkwMSwyMDAwMDAwMA0KMjAxMixQSEksTkwsdXRsZXljaDAxLDE1Mjg1NzE0DQoyMDEyLFBISSxOTCxoYW1lbGNvMDEsMTUwMDAwMDANCjIwMTIsUEhJLE5MLHBhcGVsam8wMSwxMTAwMDA1OA0KMjAxMixQSEksTkwscm9sbGlqaTAxLDExMDAwMDAwDQoyMDEyLFBISSxOTCxibGFudGpvMDEsMTA1MDAwMDANCjIwMTIsUEhJLE5MLHBlbmNlaHUwMSwxMDQwMDAwMA0KMjAxMixQSEksTkwsdmljdG9zaDAxLDk1MDAwMDANCjIwMTIsUEhJLE5MLHBvbGFucGwwMSw2NDE2NjY2DQoyMDEyLFBISSxOTCx3aWdnaXR5MDEsNDAwMDAwMA0KMjAxMixQSEksTkwscnVpemNhMDEsMzcwMDAwMA0KMjAxMixQSEksTkwsa2VuZHJreTAxLDM1ODUwMDANCjIwMTIsUEhJLE5MLGNvbnRyam8wMSwyNTAwMDAwDQoyMDEyLFBISSxOTCx0aG9tZWppMDEsMTI1MDAwMA0KMjAxMixQSEksTkwsbml4bGEwMSwxMTUwMDAwDQoyMDEyLFBISSxOTCxxdWFsbGNoMDEsMTE1MDAwMA0KMjAxMixQSEksTkwscGllcnJqdTAxLDgwMDAwMA0KMjAxMixQSEksTkwsc2NobmVicjAxLDgwMDAwMA0KMjAxMixQSEksTkwsb3JycGUwMSw2MDAwMDANCjIwMTIsUEhJLE5MLGJhc3RhYW4wMSw1MDUwMDANCjIwMTIsUEhJLE5MLGhlcm5kZGEwMSw0OTUwMDANCjIwMTIsUEhJLE5MLG1heWJlam8wMiw0OTUwMDANCjIwMTIsUEhJLE5MLHdvcmxldmEwMSw0OTUwMDANCjIwMTIsUEhJLE5MLG1hcnRpbWkwMiw0ODY1MDANCjIwMTIsUEhJLE5MLHN0dXRlbWkwMSw0ODUwMDANCjIwMTIsUEhJLE5MLGRlZnJhanUwMSw0ODAwMDANCjIwMTIsUEhJLE5MLHNhdmVyam8wMSw0ODAwMDANCjIwMTIsUEhJLE5MLGdhbHZpZnIwMSw0ODAwMDANCjIwMTIsUElULE5MLGJ1cm5lYWowMSwxNjUwMDAwMA0KMjAxMixQSVQsTkwsYmFybWVjbDAxLDUwMDAwMDANCjIwMTIsUElULE5MLGJlZGFyZXIwMSw0NTAwMDAwDQoyMDEyLFBJVCxOTCxoYW5yYWpvMDEsNDEwMDAwMA0KMjAxMixQSVQsTkwsYmFyYWpybzAxLDQwMDAwMDANCjIwMTIsUElULE5MLGNvcnJla2UwMSw0MDAwMDAwDQoyMDEyLFBJVCxOTCxrYXJzdGplMDEsMzEwMDAwMA0KMjAxMixQSVQsTkwsbWNnZWhjYTAxLDI1Mzc1MDANCjIwMTIsUElULE5MLG1vcnRvY2gwMiwyNDQ1MDAwDQoyMDEyLFBJVCxOTCxqb25lc2dhMDIsMjI1MDAwMA0KMjAxMixQSVQsTkwsYWx2YXJwZTAxLDIyMDAwMDANCjIwMTIsUElULE5MLG1jbG91bmEwMSwxNzUwMDAwDQoyMDEyLFBJVCxOTCxjcnV6anUwMiwxMjUwMDAwDQoyMDEyLFBJVCxOTCxncmlsbGphMDEsMTEwMDAwMA0KMjAxMixQSVQsTkwsdGFiYXRqbzAxLDkxNjY2Ng0KMjAxMixQSVQsTkwsbWVla2V2MDEsODc1MDAwDQoyMDEyLFBJVCxOTCxyZXNvcGNoMDEsODUwMDAwDQoyMDEyLFBJVCxOTCxtY2N1dGFuMDEsNzA4MzMzDQoyMDEyLFBJVCxOTCxtY2RvbmphMDMsNTAyNTAwDQoyMDEyLFBJVCxOTCx3YWxrZW5lMDEsNTAwMDAwDQoyMDEyLFBJVCxOTCxsZXJvdWNoMDEsNDg2MDAwDQoyMDEyLFBJVCxOTCxtY2tlbm1pMDEsNDg1MDAwDQoyMDEyLFBJVCxOTCxoYXJyaWpvMDUsNDg0MDAwDQoyMDEyLFBJVCxOTCxwcmVzbGFsMDEsNDg0MDAwDQoyMDEyLFBJVCxOTCx3YXRzb3RvMDEsNDg0MDAwDQoyMDEyLFBJVCxOTCxuYXZhcnlhMDEsNDgzMDAwDQoyMDEyLFBJVCxOTCxodWdoZWphMDIsNDgxMDAwDQoyMDEyLFBJVCxOTCxoYWd1ZW1hMDEsNDgwMDAwDQoyMDEyLFNETixOTCxzdHJlZWh1MDEsNzUwMDAwMA0KMjAxMixTRE4sTkwscXVlbnRjYTAxLDcwMjUwMDANCjIwMTIsU0ROLE5MLGJhcnRsamEwMSw1NTAwMDAwDQoyMDEyLFNETixOTCxodWRzb29yMDEsNTUwMDAwMA0KMjAxMixTRE4sTkwsaGVhZGxjaDAxLDM0NzUwMDANCjIwMTIsU0ROLE5MLHN0YXVmdGkwMSwzMjAwMDAwDQoyMDEyLFNETixOTCxyaWNoYWNsMDEsMjcwNTAwMA0KMjAxMixTRE4sTkwsdm9scXVlZDAxLDIyMzc1MDANCjIwMTIsU0ROLE5MLG1vc2VsZHUwMSwyMDEyNTAwDQoyMDEyLFNETixOTCxodW5kbG5pMDEsMjAwMDAwMA0KMjAxMixTRE4sTkwsZ3JlZ2VsdTAxLDE1NTAwMDANCjIwMTIsU0ROLE5MLHZlbmFid2kwMSwxNDc1MDAwDQoyMDEyLFNETixOTCxhbG9uc3lvMDEsMTQwMDAwMA0KMjAxMixTRE4sTkwsa290c2FtYTAxLDEyNTAwMDANCjIwMTIsU0ROLE5MLGRlbm9yY2gwMSwxMTY1MDAwDQoyMDEyLFNETixOTCxoZXJtaWplMDEsODAwMDAwDQoyMDEyLFNETixOTCxiYWtlcmpvMDEsNzUwMDAwDQoyMDEyLFNETixOTCx0aGF0Y2pvMDEsNzAwMDAwDQoyMDEyLFNETixOTCxtYXliaWNhMDEsNjAwMDAwDQoyMDEyLFNETixOTCxvd2luZ21pMDEsNTAwMDAwDQoyMDEyLFNETixOTCxsdWVia2NvMDEsNDk3ODAwDQoyMDEyLFNETixOTCxibGFua2t5MDEsNDkyNDAwDQoyMDEyLFNETixOTCxmcmllcmVyMDEsNDg5MTAwDQoyMDEyLFNETixOTCxndXptYWplMDEsNDg2NjAwDQoyMDEyLFNETixOTCxjYXNobmFuMDEsNDg2MTAwDQoyMDEyLFNETixOTCxiYXNzYW4wMSw0ODUzMDANCjIwMTIsU0ROLE5MLGZvcnN5bG8wMSw0ODE0MDANCjIwMTIsU0ROLE5MLHBhcnJpYW4wMSw0ODEwMDANCjIwMTIsU0ZOLE5MLHppdG9iYTAxLDE5MDAwMDAwDQoyMDEyLFNGTixOTCxsaW5jZXRpMDEsMTgyNTAwMDANCjIwMTIsU0ZOLE5MLGNhaW5tYTAxLDE1MzMzMzMzDQoyMDEyLFNGTixOTCxodWZmYXUwMSwxMDAwMDAwMA0KMjAxMixTRk4sTkwsd2lsc29icjAxLDg1MDAwMDANCjIwMTIsU0ZOLE5MLGNhYnJlbWUwMSw2MDAwMDAwDQoyMDEyLFNGTixOTCxzYW5jaGZyMDEsNjAwMDAwMA0KMjAxMixTRk4sTkwsYWZmZWxqZTAxLDUwMDAwMDANCjIwMTIsU0ZOLE5MLHBhZ2FuYW4wMSw0ODUwMDAwDQoyMDEyLFNGTixOTCxsb3BlemphMDIsNDI1MDAwMA0KMjAxMixTRk4sTkwsc2FuZG9wYTAxLDMyMDAwMDANCjIwMTIsU0ZOLE5MLHZvZ2VscnkwMSwzMDAwMDAwDQoyMDEyLFNGTixOTCxnYXJjaWphMDEsMjIwMDAwMA0KMjAxMixTRk4sTkwscm9tb3NlMDEsMTU3NTAwMA0KMjAxMixTRk4sTkwsc2NoaWVuYTAxLDEzMDAwMDANCjIwMTIsU0ZOLE5MLHRoZXJpcnkwMSwxMjUwMDAwDQoyMDEyLFNGTixOTCxtb3RhZ3UwMSwxMDAwMDAwDQoyMDEyLFNGTixOTCxoZW5zbGNsMDEsNzUwMDAwDQoyMDEyLFNGTixOTCxidXJyaWVtMDEsNjI1MDAwDQoyMDEyLFNGTixOTCxwb3NleWJ1MDEsNjE1MDAwDQoyMDEyLFNGTixOTCxidW1nYW1hMDEsNTYwMDAwDQoyMDEyLFNGTixOTCxibGFuY2dyMDEsNTE2MDAwDQoyMDEyLFNGTixOTCxydW56bGRhMDEsNDgzMDAwDQoyMDEyLFNGTixOTCxrb250b2dlMDEsNDgxMzUwDQoyMDEyLFNGTixOTCxiZWx0YnIwMSw0ODEwMDANCjIwMTIsU0ZOLE5MLGNyYXdmYnIwMSw0ODEwMDANCjIwMTIsU0ZOLE5MLHBpbGxicjAxLDQ4MDAwMA0KMjAxMixTRk4sTkwsc2FuY2hoZTAxLDQ4MDAwMA0KMjAxMixTRk4sTkwsc3Vya2FlcjAxLDQ4MDAwMA0KMjAxMixTRk4sTkwsb3Rlcm9kYTAxLDQ4MDAwMA0KMjAxMixTTE4sTkwsaG9sbGltYTAxLDE2MjkyMzYyDQoyMDEyLFNMTixOTCxiZWx0cmNhMDEsMTMwMDAwMDANCjIwMTIsU0xOLE5MLGxvaHNla3kwMSwxMjE4NzUwMA0KMjAxMixTTE4sTkwsYmVya21sYTAxLDEyMDAwMDAwDQoyMDEyLFNMTixOTCx3YWlud2FkMDEsOTAwMDAwMA0KMjAxMixTTE4sTkwsY2FycGVjaDAxLDg1MDAwMDANCjIwMTIsU0xOLE5MLHdlc3RiamEwMSw4NTAwMDAwDQoyMDEyLFNMTixOTCxtb2xpbnlhMDEsNzAwMDAwMA0KMjAxMixTTE4sTkwsZnVyY2FyYTAxLDY1MDAwMDANCjIwMTIsU0xOLE5MLGdhcmNpamEwMiwzMzc1MDAwDQoyMDEyLFNMTixOTCxtY2NsZWt5MDEsMjUwMDAwMA0KMjAxMixTTE4sTkwsbW90dGVqYTAxLDE5NTAwMDANCjIwMTIsU0xOLE5MLHNjaHVtc2swMSwxNTAwMDAwDQoyMDEyLFNMTixOTCxsaW5lYnNjMDEsODUwMDAwDQoyMDEyLFNMTixOTCxyb21lcmpjMDEsNzUwMDAwDQoyMDEyLFNMTixOTCxmcmVlc2RhMDEsNTA4MDAwDQoyMDEyLFNMTixOTCxib2dnc21pMDEsNTA2MDAwDQoyMDEyLFNMTixOTCxqYXlqbzAyLDUwNDAwMA0KMjAxMixTTE4sTkwscnplcGNtYTAxLDUwNDAwMA0KMjAxMixTTE4sTkwsc2FsYXNmZTAxLDQ5ODAwMA0KMjAxMixTTE4sTkwsY3JhaWdhbDAxLDQ5NTAwMA0KMjAxMixTTE4sTkwsZGVzY2FkYTAxLDQ5NTAwMA0KMjAxMixTTE4sTkwsZ3JlZW50eTAyLDQ4MzAwMA0KMjAxMixTTE4sTkwsbHlubmxhMDEsNDgyMDAwDQoyMDEyLFNMTixOTCxjcnV6dG8wMyw0ODEwMDANCjIwMTIsU0xOLE5MLGNhcnBlbWEwMSw0ODAwMDANCjIwMTIsU0xOLE5MLHJvYmluc2gwMSw0ODAwMDANCjIwMTIsU0xOLE5MLGtvbWF0ZXIwMSw0ODAwMDANCjIwMTIsV0FTLE5MLHdlcnRoamEwMSwxMzU3MTQyOA0KMjAxMixXQVMsTkwsemltbWVyeTAxLDEyMDAwMDAwDQoyMDEyLFdBUyxOTCxqYWNrc2VkMDEsMTA5NTc3MTUNCjIwMTIsV0FTLE5MLGxhcm9jYWQwMSw4MDAwMDAwDQoyMDEyLFdBUyxOTCxzdHJhc3N0MDEsNDg3NTAwMA0KMjAxMixXQVMsTkwsd2FuZ2NoMDEsNDAwMDAwMA0KMjAxMixXQVMsTkwsbW9yc2VtaTAxLDM1MDAwMDANCjIwMTIsV0FTLE5MLGdvbnphZ2kwMSwzMzUwMDAwDQoyMDEyLFdBUyxOTCxnb3J6ZXRvMDEsMzAwMDAwMA0KMjAxMixXQVMsTkwsYnVybmVzZTAxLDIzNTAwMDANCjIwMTIsV0FTLE5MLHppbW1lam8wMiwyMzAwMDAwDQoyMDEyLFdBUyxOTCxjbGlwcHR5MDEsMTY1MDAwMA0KMjAxMixXQVMsTkwsYW5raWVyaTAxLDEyNTAwMDANCjIwMTIsV0FTLE5MLGxpZGdlYnIwMSwxMDAwMDAwDQoyMDEyLFdBUyxOTCxmbG9yZWplMDIsODE1MDAwDQoyMDEyLFdBUyxOTCxkZXJvc21hMDEsODAwMDAwDQoyMDEyLFdBUyxOTCx0cmFjeWNoMDEsNzUwMDAwDQoyMDEyLFdBUyxOTCxuYWR5eGEwMSw3MDAwMDANCjIwMTIsV0FTLE5MLGNhcnJvYnIwMSw1ODAwMDANCjIwMTIsV0FTLE5MLGRlc21vaWEwMSw1MTI1MDANCjIwMTIsV0FTLE5MLGVzcGluZGEwMSw1MDYwMDANCjIwMTIsV0FTLE5MLHN0b3JlZHIwMSw0OTg3NTANCjIwMTIsV0FTLE5MLGJlcm5hcm8wMSw0OTM1MDANCjIwMTIsV0FTLE5MLHJhbW9zd2kwMSw0OTEyNTANCjIwMTIsV0FTLE5MLHJvZHJpaGUwMyw0OTEwMDANCjIwMTIsV0FTLE5MLGRldHdpcm8wMSw0ODUwMDANCjIwMTIsV0FTLE5MLHN0YW1tY3IwMSw0ODUwMDANCjIwMTIsV0FTLE5MLG1hcnJlY2gwMSw0ODEwMDANCjIwMTIsV0FTLE5MLG1hdHRocnkwMSw0ODEwMDANCjIwMTIsV0FTLE5MLGxvbWJhc3QwMiw0ODEwMDANCjIwMTMsQkFMLEFMLG1hcmthbmkwMSwxNTM1MDAwMA0KMjAxMyxCQUwsQUwscm9iZXJicjAxLDEwMDAwMDAwDQoyMDEzLEJBTCxBTCxqb25lc2FkMDEsODgzMzMzMw0KMjAxMyxCQUwsQUwsaGFyZHlqajAxLDc0MTY2NjcNCjIwMTMsQkFMLEFMLGhhbW1lamEwMSw2NzUwMDAwDQoyMDEzLEJBTCxBTCxqb2huc2ppMDQsNjUwMDAwMA0KMjAxMyxCQUwsQUwsd2lldGVtYTAxLDU1MDAwMDANCjIwMTMsQkFMLEFMLGNoZW53ZTAyLDM2NTUzMzMNCjIwMTMsQkFMLEFMLGRhdmlzY2gwMiwzMzAwMDAwDQoyMDEzLEJBTCxBTCxvZGF5ZGEwMSwyMjAwMDAwDQoyMDEzLEJBTCxBTCxiZXRlbXdpMDEsMjAwMDAwMA0KMjAxMyxCQUwsQUwsbWNsb3VuYTAxLDIwMDAwMDANCjIwMTMsQkFMLEFMLGh1bnRldG8wMiwxODIwMDAwDQoyMDEzLEJBTCxBTCxtYXR1c2JyMDEsMTYwMDAwMA0KMjAxMyxCQUwsQUwsYXlhbGFsdTAxLDEwMDAwMDANCjIwMTMsQkFMLEFMLHJlaW1vbm8wMSwxMDAwMDAwDQoyMDEzLEJBTCxBTCxwYXR0b3RyMDEsODE1MDAwDQoyMDEzLEJBTCxBTCx0ZWFnYXRhMDEsNjUwMDAwDQoyMDEzLEJBTCxBTCxhcnJpZWphMDEsNTE2NTAwDQoyMDEzLEJBTCxBTCx0aWxsbWNoMDEsNTA4NTAwDQoyMDEzLEJBTCxBTCxzdHJvcHBlMDEsNTAyNTAwDQoyMDEzLEJBTCxBTCxnb256YW1pMDMsNTAyMDAwDQoyMDEzLEJBTCxBTCxqb2huc3N0MDIsNDk1MDAwDQoyMDEzLEJBTCxBTCxtYWNoYW1hMDEsNDk1MDAwDQoyMDEzLEJBTCxBTCxmbGFoZXJ5MDEsNDkzNTAwDQoyMDEzLEJBTCxBTCxtY2ZhcnRqMDEsNDkwMDAwDQoyMDEzLEJPUyxBTCxsYWNrZWpvMDEsMTU5NTAwMDANCjIwMTMsQk9TLEFMLG9ydGl6ZGEwMSwxNDUwMDAwMA0KMjAxMyxCT1MsQUwsZGVtcHNyeTAxLDEzMjUwMDAwDQoyMDEzLEJPUyxBTCx2aWN0b3NoMDEsMTMwMDAwMDANCjIwMTMsQk9TLEFMLGxlc3Rlam8wMSwxMTYyNTAwMA0KMjAxMyxCT1MsQUwscGVkcm9kdTAxLDEwMjUwMDAwDQoyMDEzLEJPUyxBTCxkcmV3c3QwMSw5NTAwMDAwDQoyMDEzLEJPUyxBTCxlbGxzYmphMDEsOTAwMDAwMA0KMjAxMyxCT1MsQUwsaGFucmFqbzAxLDcwNDAwMDANCjIwMTMsQk9TLEFMLGJ1Y2hoY2wwMSw1NzUwMDAwDQoyMDEzLEJPUyxBTCxnb21lc2pvMDEsNTAwMDAwMA0KMjAxMyxCT1MsQUwsbmFwb2xtaTAxLDUwMDAwMDANCjIwMTMsQk9TLEFMLHNhbHRhamEwMSw0NTAwMDAwDQoyMDEzLEJPUyxBTCx1ZWhhcmtvMDEsNDI1MDAwMA0KMjAxMyxCT1MsQUwsYmFpbGVhbjAxLDQxMDAwMDANCjIwMTMsQk9TLEFMLHJvc3NkYTAxLDMxMDAwMDANCjIwMTMsQk9TLEFMLGFjZXZlYWwwMSwyNjUwMDAwDQoyMDEzLEJPUyxBTCxicmVzbGNyMDEsMjMyNTAwMA0KMjAxMyxCT1MsQUwsaWdsZXNqbzAxLDIwNjI1MDANCjIwMTMsQk9TLEFMLGJhcmRkYTAxLDE4NjI1MDANCjIwMTMsQk9TLEFMLG1vcmFsZnIwMSwxNDg3NTAwDQoyMDEzLEJPUyxBTCxtaWxsZWFuMDEsMTQ3NTAwMA0KMjAxMyxCT1MsQUwsdGF6YXdqdTAxLDgxNTAwMA0KMjAxMyxCT1MsQUwsZG91YnJmZTAxLDUxODUwMA0KMjAxMyxCT1MsQUwsY2FycG1pMDEsNTA4NTAwDQoyMDEzLEJPUyxBTCxuYXZhZGEwMSw1MDU1MDANCjIwMTMsQk9TLEFMLG1vcnRlY2wwMSw1MDQ1MDANCjIwMTMsQk9TLEFMLGNpcmlhcGUwMSw1MDI1MDANCjIwMTMsQk9TLEFMLG1pZGRsd2kwMSw0OTgwMDANCjIwMTMsQ0hBLEFMLHBlYXZ5amEwMSwxNjE1NzI3MQ0KMjAxMyxDSEEsQUwsZGFua3NqbzAxLDE1NzUwMDAwDQoyMDEzLENIQSxBTCxkdW5uYWQwMSwxNTAwMDAwMA0KMjAxMyxDSEEsQUwscmlvc2FsMDEsMTMwMDAwMDANCjIwMTMsQ0hBLEFMLGtvbmVycGEwMSwxMjUwMTUwNg0KMjAxMyxDSEEsQUwsZmxveWRnYTAxLDk1MDAwMDANCjIwMTMsQ0hBLEFMLHJhbWlyYWwwMyw3MDAwMDAwDQoyMDEzLENIQSxBTCx0aG9ybm1hMDEsNTUwMDAwMA0KMjAxMyxDSEEsQUwsY3JhaW5qZTAxLDQ1MDAwMDANCjIwMTMsQ0hBLEFMLGtlcHBpamUwMSwzNTAwMDAwDQoyMDEzLENIQSxBTCxiZWNraGdvMDEsMjkyNTAwMA0KMjAxMyxDSEEsQUwsdmljaWVkYTAxLDI4MDAwMDANCjIwMTMsQ0hBLEFMLGxpbmRzbWEwMSwyMzAwMDAwDQoyMDEzLENIQSxBTCxkZWF6YWFsMDEsMjA3NTAwMA0KMjAxMyxDSEEsQUwsc2FsZWNoMDEsODUwMDAwDQoyMDEzLENIQSxBTCx3aXNlZGUwMSw3MDAwMDANCjIwMTMsQ0hBLEFMLHJlZWRhZDAxLDUyMDAwMA0KMjAxMyxDSEEsQUwsZmxvd2V0eTAxLDUxMDAwMA0KMjAxMyxDSEEsQUwsam9uZXNuYTAxLDUwNzUwMA0KMjAxMyxDSEEsQUwsc2FuY2hhbjAyLDUwNTAwMA0KMjAxMyxDSEEsQUwsc2FudGloZTAxLDUwNTAwMA0KMjAxMyxDSEEsQUwscXVpbnRqbzAxLDUwMDAwMA0KMjAxMyxDSEEsQUwsdmVhbGRvMDEsNDk3NTAwDQoyMDEzLENIQSxBTCxheGVscmR5MDEsNDkzMDAwDQoyMDEzLENIQSxBTCxnaW1lbmhlMDEsNDkzMDAwDQoyMDEzLENIQSxBTCxzZW1pZW1hMDEsNDkzMDAwDQoyMDEzLENIQSxBTCxvbW9ncmJyMDEsNDkyMDAwDQoyMDEzLENIQSxBTCxnaWxsYWNvMDEsNDkwNTAwDQoyMDEzLENMRSxBTCxzd2lzaG5pMDEsMTEwMDAwMDANCjIwMTMsQ0xFLEFMLHBlcmV6Y2gwMSw3MzAwMDAwDQoyMDEzLENMRSxBTCxib3Vybm1pMDEsNzAwMDAwMA0KMjAxMyxDTEUsQUwsbXllcnNicjAxLDcwMDAwMDANCjIwMTMsQ0xFLEFMLGNhYnJlYXMwMSw2NTAwMDAwDQoyMDEzLENMRSxBTCxyZXlub21hMDEsNjAwMDAwMA0KMjAxMyxDTEUsQUwsamltZW51YjAxLDU3NTAwMDANCjIwMTMsQ0xFLEFMLG1hc3RlanUwMSw1Njg3NTAwDQoyMDEzLENMRSxBTCxzbWl0aGpvMDUsMzE1MDAwMA0KMjAxMyxDTEUsQUwsc3R1YmJkcjAxLDI4MjUwMDANCjIwMTMsQ0xFLEFMLGF2aWxlbWkwMSwyMjUwMDAwDQoyMDEzLENMRSxBTCxhbGJlcm1hMDEsMTc1MDAwMA0KMjAxMyxDTEUsQUwsaGlsbHJpMDEsMTAwMDAwMA0KMjAxMyxDTEUsQUwsbWFyc29sbzAxLDEwMDAwMDANCjIwMTMsQ0xFLEFMLGdpYW1iamEwMSw3NTAwMDANCjIwMTMsQ0xFLEFMLHNhbnRhY2EwMSw3NTAwMDANCjIwMTMsQ0xFLEFMLHdvb2RibDAxLDU2MDAwMA0KMjAxMyxDTEUsQUwsYnJhbnRtaTAyLDUyNjkwMA0KMjAxMyxDTEUsQUwsa2lwbmlqYTAxLDUwOTQwMA0KMjAxMyxDTEUsQUwscGVzdGF2aTAxLDUwMTkwMA0KMjAxMyxDTEUsQUwsdG9tbGlqbzAxLDUwMTgwMA0KMjAxMyxDTEUsQUwsc2hhd2JyMDEsNTAxNzAwDQoyMDEzLENMRSxBTCxtY2FsbHphMDEsNDk2NDAwDQoyMDEzLENMRSxBTCxodWZmZGEwMSw0OTM2MDANCjIwMTMsQ0xFLEFMLGNoaXNlbG8wMSw0OTI5MDANCjIwMTMsQ0xFLEFMLGFsbGVuY28wMSw0OTI2MDANCjIwMTMsQ0xFLEFMLGhhZ2FkbmkwMSw0OTIxMDANCjIwMTMsQ0xFLEFMLGNhcnJhY2EwMSw0OTAwMDANCjIwMTMsREVULEFMLGZpZWxkcHIwMSwyMzAwMDAwMA0KMjAxMyxERVQsQUwsY2FicmVtaTAxLDIxMDAwMDAwDQoyMDEzLERFVCxBTCx2ZXJsYWp1MDEsMjAxMDAwMDANCjIwMTMsREVULEFMLG1hcnRpdmkwMSwxMzAwMDAwMA0KMjAxMyxERVQsQUwsaHVudGV0bzAxLDEyMDAwMDAwDQoyMDEzLERFVCxBTCxzYW5jaGFuMDEsODgwMDAwMA0KMjAxMyxERVQsQUwsc2NoZXJtYTAxLDY3MjUwMDANCjIwMTMsREVULEFMLHBlcmFsamgwMSw2MDAwMDAwDQoyMDEzLERFVCxBTCxiZW5vaWpvMDEsNTUwMDAwMA0KMjAxMyxERVQsQUwscG9yY2VyaTAxLDUxMDAwMDANCjIwMTMsREVULEFMLGZpc3RlZG8wMSw0MDAwMDAwDQoyMDEzLERFVCxBTCxpbmZhbm9tMDEsNDAwMDAwMA0KMjAxMyxERVQsQUwsZG90ZWxvYzAxLDM1MDAwMDANCjIwMTMsREVULEFMLGphY2tzYXUwMSwzNTAwMDAwDQoyMDEzLERFVCxBTCxhdmlsYWFsMDEsMjk1MDAwMA0KMjAxMyxERVQsQUwsc2FudGlyYTAxLDIxMDAwMDANCjIwMTMsREVULEFMLHBlbmFicjAxLDg3NTAwMA0KMjAxMyxERVQsQUwsY29rZXBoMDEsODUwMDAwDQoyMDEzLERFVCxBTCxkaXJrc2FuMDEsNTA1MDAwDQoyMDEzLERFVCxBTCx2aWxsYWJyMDIsNTAyNTAwDQoyMDEzLERFVCxBTCxhbGJ1cmFsMDEsNTAwMDAwDQoyMDEzLERFVCxBTCxzbXlseWRyMDEsNDk4MDAwDQoyMDEzLERFVCxBTCxkb3duc2RhMDIsNDk0MDAwDQoyMDEzLERFVCxBTCxnYXJjaWF2MDEsNDkwMDAwDQoyMDEzLEhPVSxBTCxub3JyaWJ1MDEsMzAwMDAwMA0KMjAxMyxIT1UsQUwscGVuYWNhMDEsMjkwMDAwMA0KMjAxMyxIT1UsQUwsdmVyYXNqbzAxLDE4NTAwMDANCjIwMTMsSE9VLEFMLHdyaWdod2UwMSwxMDI1MDAwDQoyMDEzLEhPVSxBTCxjZWRlbnJvMDIsNzE4MDAwDQoyMDEzLEhPVSxBTCxhbHR1dmpvMDEsNTA1NzAwDQoyMDEzLEhPVSxBTCxoYXJyZWx1MDEsNTAwNzAwDQoyMDEzLEhPVSxBTCxjcnV6cmgwMSw0OTgwMDANCjIwMTMsSE9VLEFMLGNhc3RyamEwMSw0OTY2MDANCjIwMTMsSE9VLEFMLGNlZGVueGEwMSw0OTU5MDANCjIwMTMsSE9VLEFMLGNvcnBvY2EwMSw0OTUwMDANCjIwMTMsSE9VLEFMLHdhbGxhYnIwMSw0OTUwMDANCjIwMTMsSE9VLEFMLGdvbnphbWEwMSw0OTQ0MDANCjIwMTMsSE9VLEFMLGNhcnRlY2gwMiw0OTQwMDANCjIwMTMsSE9VLEFMLGFtYnJpaGUwMSw0OTM0MDANCjIwMTMsSE9VLEFMLG1hcnRpZmUwMiw0OTMwMDANCjIwMTMsSE9VLEFMLG1heHdlanUwMSw0OTI1MDANCjIwMTMsSE9VLEFMLGRvbWlubWEwMSw0OTE4MDANCjIwMTMsSE9VLEFMLGJhcm5lYnIwMiw0OTE3MDANCjIwMTMsSE9VLEFMLGZpZWxkam8wMyw0OTAwMDANCjIwMTMsSE9VLEFMLHBlYWNvYnIwMSw0OTAwMDANCjIwMTMsSE9VLEFMLGh1bWJlcGgwMSw0ODAwMDANCjIwMTMsS0NBLEFMLHNhbnRhZXIwMSwxMzAwMDAwMA0KMjAxMyxLQ0EsQUwsc2hpZWxqYTAyLDExMDAwMDAwDQoyMDEzLEtDQSxBTCxnb3Jkb2FsMDEsOTAwMDAwMA0KMjAxMyxLQ0EsQUwsYnV0bGViaTAzLDg1MDAwMDANCjIwMTMsS0NBLEFMLGZyYW5jamUwMiw2NzUwMDAwDQoyMDEzLEtDQSxBTCxndXRocmplMDEsNTAwMDAwMA0KMjAxMyxLQ0EsQUwsaG9jaGVsdTAxLDQ1NjAwMDANCjIwMTMsS0NBLEFMLGNoZW5icjAxLDQ1MDAwMDANCjIwMTMsS0NBLEFMLGVzY29iYWwwMiwzMDAwMDAwDQoyMDEzLEtDQSxBTCxkYXZpc3dhMDEsMjgwMDAwMA0KMjAxMyxLQ0EsQUwsY3Jvd2FhMDEsMTI4MDAwMA0KMjAxMyxLQ0EsQUwsdGVqYWRtaTAxLDExMDAwMDANCjIwMTMsS0NBLEFMLGdldHpjaDAxLDEwNTAwMDANCjIwMTMsS0NBLEFMLGtvdHRhZ2UwMSwxMDAwMDAwDQoyMDEzLEtDQSxBTCxwZXJlenNhMDIsMTAwMDAwMA0KMjAxMyxLQ0EsQUwsZ3V0aWVqdTAxLDc1MDAwMA0KMjAxMyxLQ0EsQUwsaGF5ZXNicjAxLDYwMDAwMA0KMjAxMyxLQ0EsQUwsaG9sbGFncjAxLDUzOTUwMA0KMjAxMyxLQ0EsQUwsY29sbGl0aTAxLDUzNDUwMA0KMjAxMyxLQ0EsQUwsbWVuZG9sdTAxLDUzMjAwMA0KMjAxMyxLQ0EsQUwsaG9zbWVlcjAxLDUyODI1MA0KMjAxMyxLQ0EsQUwsbW91c3RtaTAxLDUyNDUwMA0KMjAxMyxLQ0EsQUwsam9obnNlbDAyLDUyMDUwMA0KMjAxMyxLQ0EsQUwsaGVycmVrZTAxLDUwODE3NQ0KMjAxMyxLQ0EsQUwsZHlzb25qYTAxLDUwNjAwMA0KMjAxMyxLQ0EsQUwsZHVmZnlkYTAxLDUwNTEyNQ0KMjAxMyxLQ0EsQUwsY2FpbmxvMDEsNTAzMTc1DQoyMDEzLExBQSxBTCxoYW1pbGpvMDMsMTc0MDAwMDANCjIwMTMsTEFBLEFMLHdlYXZlamUwMiwxNjIwMDAwMA0KMjAxMyxMQUEsQUwscHVqb2xhbDAxLDE2MDAwMDAwDQoyMDEzLExBQSxBTCx3aWxzb2NqMDEsMTE1MDAwMDANCjIwMTMsTEFBLEFMLGtlbmRyaG8wMSw5MTAwMDAwDQoyMDEzLExBQSxBTCxheWJhcmVyMDEsODc1MDAwMA0KMjAxMyxMQUEsQUwsdmFyZ2FqYTAxLDg1MDAwMDANCjIwMTMsTEFBLEFMLGJsYW50am8wMSw2NTAwMDAwDQoyMDEzLExBQSxBTCxpYW5uZWNoMDEsNTA1MDAwMA0KMjAxMyxMQUEsQUwsZG93bnNzYzAxLDUwMDAwMDANCjIwMTMsTEFBLEFMLGNhbGxhYWwwMSw0MTAwMDAwDQoyMDEzLExBQSxBTCxoYW5zb3RvMDEsMzcyNTAwMA0KMjAxMyxMQUEsQUwsYnVybmVzZTAxLDM2MjUwMDANCjIwMTMsTEFBLEFMLHdpbGxpamUwMSwyMDAwMDAwDQoyMDEzLExBQSxBTCxqZXBzZWtlMDEsMTE4MTI1MA0KMjAxMyxMQUEsQUwsdHJ1bWJtYTAxLDU0MDAwMA0KMjAxMyxMQUEsQUwsZnJpZXJlcjAxLDUzMDAwMA0KMjAxMyxMQUEsQUwsYm91cmpwZTAxLDUxMjUwMA0KMjAxMyxMQUEsQUwsdHJvdXRtaTAxLDUxMDAwMA0KMjAxMyxMQUEsQUwsY29uZ2VoYTAxLDQ5NTAwMA0KMjAxMyxMQUEsQUwsaGVzdGVqbzAxLDQ5NTAwMA0KMjAxMyxMQUEsQUwscmljaGFnYTAxLDQ5NTAwMA0KMjAxMyxMQUEsQUwsY2FycGVkYTAyLDQ5MzAwMA0KMjAxMyxMQUEsQUwscm9taW5hbjAxLDQ5MjAwMA0KMjAxMyxMQUEsQUwsY2FsaG9rbzAxLDQ5MTAwMA0KMjAxMyxMQUEsQUwsamltZW5sdTAyLDQ5MDAwMA0KMjAxMyxNSU4sQUwsbWF1ZXJqbzAxLDIzMDAwMDAwDQoyMDEzLE1JTixBTCxtb3JuZWp1MDEsMTUwMDAwMDANCjIwMTMsTUlOLEFMLHdpbGxpam8wMyw3MDAwMDAwDQoyMDEzLE1JTixBTCxjb3JyZWtlMDEsNDUwMDAwMA0KMjAxMyxNSU4sQUwscGVsZnJtaTAxLDQwMDAwMDANCjIwMTMsTUlOLEFMLGNhcnJvamEwMSwzNzUwMDAwDQoyMDEzLE1JTixBTCxkb3VtaXJ5MDEsMzUwMDAwMA0KMjAxMyxNSU4sQUwscGVya2lnbDAxLDI1MDAwMDANCjIwMTMsTUlOLEFMLGJ1cnRvamEwMSwyMDUwMDAwDQoyMDEzLE1JTixBTCxkdWVuc2JyMDEsMTMwMDAwMA0KMjAxMyxNSU4sQUwsYnV0ZXJkcjAxLDcwMDAwMA0KMjAxMyxNSU4sQUwsZGlhbW9zYzAxLDUzMDAwMA0KMjAxMyxNSU4sQUwsd29ybGV2YTAxLDUyNTAwMA0KMjAxMyxNSU4sQUwscGxvdWZ0cjAxLDUyMDAwMA0KMjAxMyxNSU4sQUwscm9lbmlqbzAxLDUwNTAwMA0KMjAxMyxNSU4sQUwsc3dhcnphbjAxLDUwMjUwMA0KMjAxMyxNSU4sQUwsZGV2cmljbzAxLDUwMDAwMA0KMjAxMyxNSU4sQUwsZmllbmNhMDEsNTAwMDAwDQoyMDEzLE1JTixBTCxtYXN0cmRhMDEsNTAwMDAwDQoyMDEzLE1JTixBTCxkb3ppZWJyMDEsNDk3NTAwDQoyMDEzLE1JTixBTCxwYXJtZWNoMDEsNDk3NTAwDQoyMDEzLE1JTixBTCxlc2NvYmVkMDEsNDk1MDAwDQoyMDEzLE1JTixBTCxmbG9yaXBlMDEsNDk1MDAwDQoyMDEzLE1JTixBTCxoZW5kcmxpMDEsNDk1MDAwDQoyMDEzLE1JTixBTCxyb2JlcnR5MDEsNDk1MDAwDQoyMDEzLE1JTixBTCxoaWNrc2FhMDEsNDkwMDAwDQoyMDEzLE1JTixBTCxwcmVzc3J5MDEsNDkwMDAwDQoyMDEzLE5ZQSxBTCxyb2RyaWFsMDEsMjkwMDAwMDANCjIwMTMsTllBLEFMLHdlbGxzdmUwMSwyNDY0Mjg1Nw0KMjAxMyxOWUEsQUwsc2FiYXRjYzAxLDI0Mjg1NzE0DQoyMDEzLE5ZQSxBTCx0ZWl4ZW1hMDEsMjMxMjUwMDANCjIwMTMsTllBLEFMLGpldGVyZGUwMSwxNjcyOTM2NQ0KMjAxMyxOWUEsQUwsY2Fub3JvMDEsMTUwMDAwMDANCjIwMTMsTllBLEFMLGdyYW5kY3UwMSwxNTAwMDAwMA0KMjAxMyxOWUEsQUwsa3Vyb2RoaTAxLDE1MDAwMDAwDQoyMDEzLE5ZQSxBTCxwZXR0aWFuMDEsMTIwMDAwMDANCjIwMTMsTllBLEFMLHlvdWtsa2UwMSwxMjAwMDAwMA0KMjAxMyxOWUEsQUwscml2ZXJtYTAxLDEwMDAwMDAwDQoyMDEzLE5ZQSxBTCxodWdoZXBoMDEsNzE1MDAwMA0KMjAxMyxOWUEsQUwsc3V6dWtpYzAxLDY1MDAwMDANCjIwMTMsTllBLEFMLGxvZ2FuYm8wMiwzMTUwMDAwDQoyMDEzLE5ZQSxBTCxyb2JlcmRhMDgsMzEwMDAwMA0KMjAxMyxOWUEsQUwsZ2FyZG5icjAxLDI4NTAwMDANCjIwMTMsTllBLEFMLGhhZm5ldHIwMSwyMDAwMDAwDQoyMDEzLE5ZQSxBTCxjaGFtYmpvMDMsMTg3NTAwMA0KMjAxMyxOWUEsQUwsYm9lc2NicjAxLDE1MDAwMDANCjIwMTMsTllBLEFMLGtlbGxlc2gwMSw5MzUwMDANCjIwMTMsTllBLEFMLG5peGphMDEsOTAwMDAwDQoyMDEzLE5ZQSxBTCxub3ZhaXYwMSw1NzU2MDANCjIwMTMsTllBLEFMLHJhcGFkY2wwMSw1NTM2MjUNCjIwMTMsTllBLEFMLGFkYW1zZGEwMiw1NDAwMDANCjIwMTMsTllBLEFMLG51bmV6ZWQwMiw1MzMzMDANCjIwMTMsTllBLEFMLGNlcnZlZnIwMSw1MTUzNTANCjIwMTMsTllBLEFMLHN0ZXdhY2gwMSw1MTUxMDANCjIwMTMsTllBLEFMLHBoZWxwZGEwMSw1MTI0MjUNCjIwMTMsTllBLEFMLGVwcGxlY28wMSw1MTAzNTANCjIwMTMsTllBLEFMLG1lc2FtZTAxLDQ5MDIwMA0KMjAxMyxOWUEsQUwsY2FicmFjZTAxLDQ5MDAwMA0KMjAxMyxPQUssQUwseW91bmdjaDA0LDg3MDAwMDANCjIwMTMsT0FLLEFMLGNlc3BleW8wMSw4NTAwMDAwDQoyMDEzLE9BSyxBTCxjcmlzcGNvMDEsNzAwMDAwMA0KMjAxMyxPQUssQUwsYW5kZXJicjA0LDU3NTAwMDANCjIwMTMsT0FLLEFMLGJhbGZvZ3IwMSw0NTAwMDAwDQoyMDEzLE9BSyxBTCxzbWl0aHNlMDEsMzY3NTAwMA0KMjAxMyxPQUssQUwsY29sb25iYTAxLDMwMDAwMDANCjIwMTMsT0FLLEFMLGxvd3JpamUwMSwyNDAwMDAwDQoyMDEzLE9BSyxBTCxqYXNvam8wMSwxODAwMDAwDQoyMDEzLE9BSyxBTCxtb3NzYnIwMSwxNjAwMDAwDQoyMDEzLE9BSyxBTCxyZXNvcGNoMDEsMTM1MDAwMA0KMjAxMyxPQUssQUwsYmFydG9kYTAyLDExMDAwMDANCjIwMTMsT0FLLEFMLGJsZXZpamUwMSwxMTAwMDAwDQoyMDEzLE9BSyxBTCxuZXNoZXBhMDEsOTc1MDAwDQoyMDEzLE9BSyxBTCxyb3NhbGFkMDEsNzAwMDAwDQoyMDEzLE9BSyxBTCxibGFja3RyMDEsNTUwMDAwDQoyMDEzLE9BSyxBTCxyZWRkaWpvMDEsNTEwMDAwDQoyMDEzLE9BSyxBTCxjb29rcnkwMSw1MDUwMDANCjIwMTMsT0FLLEFMLHNpemVtc2MwMSw1MDAwMDANCjIwMTMsT0FLLEFMLG1pbG9udG8wMSw0OTUwMDANCjIwMTMsT0FLLEFMLHBhcmtlamEwMiw0OTUwMDANCjIwMTMsT0FLLEFMLHNjcmliZXYwMSw0OTUwMDANCjIwMTMsT0FLLEFMLHNvZ2FyZXIwMSw0OTUwMDANCjIwMTMsT0FLLEFMLGRvbmFsam8wMiw0OTI1MDANCjIwMTMsT0FLLEFMLGRvb2xpc2UwMSw0OTI1MDANCjIwMTMsT0FLLEFMLGZpZ3VlcGUwMSw0OTI1MDANCjIwMTMsT0FLLEFMLGdyaWZmYWowMSw0OTI1MDANCjIwMTMsT0FLLEFMLG5vcnJpZGUwMSw0OTI1MDANCjIwMTMsT0FLLEFMLHBhcnJpYW4wMSw0OTI1MDANCjIwMTMsT0FLLEFMLHN0cmFpZGEwMSw0OTI1MDANCjIwMTMsT0FLLEFMLGZyZWltbmEwMSw0OTAwMDANCjIwMTMsU0VBLEFMLGhlcm5hZmUwMiwyMDU1NzE0Mw0KMjAxMyxTRUEsQUwsZ3V0aWVmcjAxLDczMTI1MDANCjIwMTMsU0VBLEFMLG1vcnNlbWkwMSw3MDAwMDAwDQoyMDEzLFNFQSxBTCxpd2FrdWhpMDEsNjUwMDAwMA0KMjAxMyxTRUEsQUwsc2F1bmRqbzAxLDYwMDAwMDANCjIwMTMsU0VBLEFMLG1vcmFsa2UwMSw1MjUwMDAwDQoyMDEzLFNFQSxBTCxyeWFuYnIwMSwzMjUwMDAwDQoyMDEzLFNFQSxBTCxpYmFuZXJhMDEsMjc1MDAwMA0KMjAxMyxTRUEsQUwsYWNrbGVkdTAxLDI3MDAwMDANCjIwMTMsU0VBLEFMLGFuZGlucm8wMSwxNjAwMDAwDQoyMDEzLFNFQSxBTCxwZXJlem9sMDEsMTUwMDAwMA0KMjAxMyxTRUEsQUwsc2hvcHBrZTAxLDE1MDAwMDANCjIwMTMsU0VBLEFMLGxvZWthMDEsMTA1MDAwMA0KMjAxMyxTRUEsQUwsYmF5amEwMSwxMDAwMDAwDQoyMDEzLFNFQSxBTCxzbW9ha2p1MDEsNTE0MDAwDQoyMDEzLFNFQSxBTCxzYXVuZG1pMDEsNTEyNjAwDQoyMDEzLFNFQSxBTCxzZWFnZWt5MDEsNTEwNDAwDQoyMDEzLFNFQSxBTCx3aWxoZXRvMDEsNTA5MTAwDQoyMDEzLFNFQSxBTCxiZWF2YWJsMDEsNTA2NzAwDQoyMDEzLFNFQSxBTCx3ZWxsc2NhMDEsNTA1NDAwDQoyMDEzLFNFQSxBTCxmdXJidWNoMDEsNTA0NTAwDQoyMDEzLFNFQSxBTCxtb250ZWplMDEsNTAzMzAwDQoyMDEzLFNFQSxBTCxsdWV0Z2x1MDEsNDk1NTAwDQoyMDEzLFNFQSxBTCxwcnlvcnN0MDEsNDkyMjAwDQoyMDEzLFNFQSxBTCxjYXBwc2NhMDEsNDkxNzAwDQoyMDEzLFNFQSxBTCxtYXVyZWJyMDEsNDkwMDAwDQoyMDEzLFRCQSxBTCxwcmljZWRhMDEsOTgzMTk1NA0KMjAxMyxUQkEsQUwsem9icmliZTAxLDU2ODczMDANCjIwMTMsVEJBLEFMLGVzY29ieXUwMSw1MDAwMDAwDQoyMDEzLFRCQSxBTCxjYXJtb2ZhMDEsMzI1MDAwMA0KMjAxMyxUQkEsQUwscGVyYWxqbzAxLDMwMDAwMDANCjIwMTMsVEJBLEFMLHJvYmVycnkwMSwyOTUwMDAwDQoyMDEzLFRCQSxBTCxzY290dGx1MDEsMjc1MDAwMA0KMjAxMyxUQkEsQUwsbG9uZ29ldjAxLDI1MDAwMTgNCjIwMTMsVEJBLEFMLHJvZG5lZmUwMSwyNTAwMDAwDQoyMDEzLFRCQSxBTCxqb2huc2tlMDUsMjQ1MDAwMA0KMjAxMyxUQkEsQUwsam95Y2VtYTAxLDI0NTAwMDANCjIwMTMsVEJBLEFMLGxvbmV5amEwMSwyMDAwMDAwDQoyMDEzLFRCQSxBTCxtb2xpbmpvMDEsMTUwMDAwMA0KMjAxMyxUQkEsQUwsZmFybnNreTAxLDEyNTAwMDANCjIwMTMsVEJBLEFMLG1vb3JlbWEwMiwxMTAwMDAwDQoyMDEzLFRCQSxBTCxyb2RyaXNlMDEsMTAwMDAwMA0KMjAxMyxUQkEsQUwsZnVsZHNhMDEsNzI1MDAwDQoyMDEzLFRCQSxBTCxtY2dlZWphMDEsNTA2MjAwDQoyMDEzLFRCQSxBTCxoZWxsaWplMDEsNTAzMDAwDQoyMDEzLFRCQSxBTCxjb2JiYWwwMSw1MDIyMDANCjIwMTMsVEJBLEFMLGplbm5pZGUwMSw1MDE4MDANCjIwMTMsVEJBLEFMLHJhbW9zY2UwMSw1MDEzMDANCjIwMTMsVEJBLEFMLHRvcnJlYWwwMSw0OTY1MDANCjIwMTMsVEVYLEFMLGJlbHRyYWQwMSwxNjAwMDAwMA0KMjAxMyxURVgsQUwsa2luc2xpYTAxLDEzMDAwMDAwDQoyMDEzLFRFWCxBTCxjcnV6bmUwMiwxMDI1MDAwMA0KMjAxMyxURVgsQUwsYmVya21sYTAxLDEwMDAwMDAwDQoyMDEzLFRFWCxBTCxkYXJ2aXl1MDEsOTUwMDAwMA0KMjAxMyxURVgsQUwsbmF0aGFqbzAxLDgwMDAwMDANCjIwMTMsVEVYLEFMLHBpZXJ6YWowMSw3NTAwMDAwDQoyMDEzLFRFWCxBTCxtdXJwaGRhMDcsNTc3NTAwMA0KMjAxMyxURVgsQUwsaGFycmltYTAxLDUyMDAwMDANCjIwMTMsVEVYLEFMLGFuZHJ1ZWwwMSw1MDUwMDAwDQoyMDEzLFRFWCxBTCxob2xsYWRlMDEsMzQwMDAwMA0KMjAxMyxURVgsQUwsbWFydGlsZTAxLDMyNTAwMDANCjIwMTMsVEVYLEFMLGZlbGl6bmUwMSwyOTAwMDAwDQoyMDEzLFRFWCxBTCxzb3RvZ2UwMSwyNzUwMDAwDQoyMDEzLFRFWCxBTCxzb3JpYWpvMDEsMjAwMDAwMA0KMjAxMyxURVgsQUwsZnJhc29qYTAxLDE1MDAwMDANCjIwMTMsVEVYLEFMLG9nYW5kYWwwMSw1MDYwMDANCjIwMTMsVEVYLEFMLG1vcmVsbWkwMSw1MDI3MDANCjIwMTMsVEVYLEFMLGdlbnRyY3IwMSw1MDEwMDANCjIwMTMsVEVYLEFMLGxpbmRiam8wMSw1MDAxMDANCjIwMTMsVEVYLEFMLHJvc3NybzAxLDQ5NzQwMA0KMjAxMyxURVgsQUwsYm9yYm9qdTAxLDQ5NjAwMA0KMjAxMyxURVgsQUwsa2lya21taTAxLDQ5NTgwMA0KMjAxMyxURVgsQUwsc2NoZXB0YTAxLDQ5MzYwMA0KMjAxMyxURVgsQUwsYnVybnNjbzAxLDQ5MjAwMA0KMjAxMyxURVgsQUwscGVyZXptYTAyLDQ5MjAwMA0KMjAxMyxURVgsQUwscHJvZmFqdTAxLDQ5MTAwMA0KMjAxMyxURVgsQUwsZ2FyY2lsZTAyLDQ5MDAwMA0KMjAxMyxURVgsQUwsb3J0aXpqbzA1LDQ5MDAwMA0KMjAxMyxUT1IsQUwsYmF1dGlqbzAyLDE0MDAwMDAwDQoyMDEzLFRPUixBTCxqb2huc2pvMDksMTM3NTAwMDANCjIwMTMsVE9SLEFMLGJ1ZWhybWEwMSwxMjAwMDAwMA0KMjAxMyxUT1IsQUwscmV5ZXNqbzAxLDEwMDAwMDAwDQoyMDEzLFRPUixBTCxjYWJyZW1lMDEsODAwMDAwMA0KMjAxMyxUT1IsQUwsZW5jYXJlZDAxLDgwMDAwMDANCjIwMTMsVE9SLEFMLG1vcnJvYnIwMSw4MDAwMDAwDQoyMDEzLFRPUixBTCxyb21lcnJpMDEsNzUwMDAwMA0KMjAxMyxUT1IsQUwsbGluZGFkMDEsNTE1MDAwMA0KMjAxMyxUT1IsQUwsZGlja2VyYTAxLDUwMDAwMDANCjIwMTMsVE9SLEFMLHJhc211Y28wMSw0Njc1MDAwDQoyMDEzLFRPUixBTCxqYW5zc2NhMDEsMzkwMDAwMA0KMjAxMyxUT1IsQUwsaGFwcGphMDEsMzcwMDAwMA0KMjAxMyxUT1IsQUwsaXp0dXJtYTAxLDMwMDAwMDANCjIwMTMsVE9SLEFMLG9saXZlZGEwMiwzMDAwMDAwDQoyMDEzLFRPUixBTCxzYW50b3NlMDEsMjc1MDAwMA0KMjAxMyxUT1IsQUwsYm9uaWZlbTAxLDI2MDAwMDANCjIwMTMsVE9SLEFMLGRhdmlzcmEwMSwyNTAwMDAwDQoyMDEzLFRPUixBTCxtY2dvd2R1MDEsMTUwMDAwMA0KMjAxMyxUT1IsQUwsdGhvbGVqbzAxLDEyNTAwMDANCjIwMTMsVE9SLEFMLGJsYW5jaGUwMSw3NTAwMDANCjIwMTMsVE9SLEFMLGRlcm9zbWEwMSw3NTAwMDANCjIwMTMsVE9SLEFMLGNlY2lsYnIwMSw1MTAwMDANCjIwMTMsVE9SLEFMLHJvZ2VyZXMwMSw1MDkwMDANCjIwMTMsVE9SLEFMLGFyZW5janAwMSw1MDU2MDANCjIwMTMsVE9SLEFMLGxhd3JpYnIwMSw1MDAwMDANCjIwMTMsVE9SLEFMLHBlcmV6bHUwMSw1MDAwMDANCjIwMTMsVE9SLEFMLGRyYWJla3kwMSw0OTk1MDANCjIwMTMsVE9SLEFMLGRlbGFic3QwMSw0OTg5MDANCjIwMTMsVE9SLEFMLGplZmZyamUwMSw0OTU5MDANCjIwMTMsVE9SLEFMLGxvdXBhYTAxLDQ5NDIwMA0KMjAxMyxBUkksTkwsYmVsbGhlMDEsMTAwMDAwMDANCjIwMTMsQVJJLE5MLG1vbnRlbWkwMSwxMDAwMDAwMA0KMjAxMyxBUkksTkwsa3ViZWxqYTAxLDc1MDAwMDANCjIwMTMsQVJJLE5MLHByYWRvbWEwMSw3MDAwMDAwDQoyMDEzLEFSSSxOTCxwdXR6amowMSw2NTAwMDAwDQoyMDEzLEFSSSxOTCxyb3NzY28wMSw2MDAwMDAwDQoyMDEzLEFSSSxOTCxjYWhpbHRyMDEsNTcwMDAwMA0KMjAxMyxBUkksTkwsaGlsbGFhMDEsNTUwMDAwMA0KMjAxMyxBUkksTkwsbWNjYXJicjAxLDUyNTAwMDANCjIwMTMsQVJJLE5MLGtlbm5laWEwMSw0MjY1MDAwDQoyMDEzLEFSSSxOTCx6aWVnbGJyMDEsMzE1MDAwMA0KMjAxMyxBUkksTkwsY2hhdmVlcjAxLDMwMDAwMDANCjIwMTMsQVJJLE5MLHBhcnJhZ2UwMSwyMzUwMDAwDQoyMDEzLEFSSSxOTCxibG9vbXdpMDEsMTkwMDAwMA0KMjAxMyxBUkksTkwscGVubmljbDAxLDE3NTAwMDANCjIwMTMsQVJJLE5MLGhlcm5hZGEwMSwxMzc1MDAwDQoyMDEzLEFSSSxOTCxoaW5za2VyMDEsMTM1MDAwMA0KMjAxMyxBUkksTkwsc2lwcHRvMDEsMTI3NTAwMA0KMjAxMyxBUkksTkwsbmlldmV3aTAxLDgwMDAwMA0KMjAxMyxBUkksTkwscmV5bm9tYTAyLDUwNTUwMA0KMjAxMyxBUkksTkwsY29sbG1qbzAxLDUwNDAwMA0KMjAxMyxBUkksTkwsbWlsZXl3YTAxLDUwMDUwMA0KMjAxMyxBUkksTkwsZ29sZHNwYTAxLDUwMDAwMA0KMjAxMyxBUkksTkwsY2FtcGF0bzAxLDQ5NzUwMA0KMjAxMyxBUkksTkwscGF0ZXJqbzAxLDQ5NzUwMA0KMjAxMyxBUkksTkwsZGVsZ2FyYTAxLDQ5NTAwMA0KMjAxMyxBUkksTkwsY29yYmlwYTAxLDQ5NDAwMA0KMjAxMyxBUkksTkwsZWF0b25hZDAyLDQ5MTAwMA0KMjAxMyxBUkksTkwsZ3JlZ29kaTAxLDQ5MTAwMA0KMjAxMyxBUkksTkwscG9sbG9hajAxLDQ5MTAwMA0KMjAxMyxBVEwsTkwsdWdnbGFkYTAxLDEzMTQ2OTQyDQoyMDEzLEFUTCxOTCx1cHRvbmJqMDEsMTMwNTAwMDANCjIwMTMsQVRMLE5MLG1jY2FuYnIwMSwxMjAwMDAwMA0KMjAxMyxBVEwsTkwsdXB0b25qdTAxLDk5NTgzMzMNCjIwMTMsQVRMLE5MLGh1ZHNvdGkwMSw5MDAwMDAwDQoyMDEzLEFUTCxOTCxtYWhvbHBhMDEsNjUwMDAwMA0KMjAxMyxBVEwsTkwsb2ZsYWhlcjAxLDQzMjAwMDANCjIwMTMsQVRMLE5MLGhleXdhamEwMSwzNjUwMDAwDQoyMDEzLEFUTCxOTCxtZWRsZWtyMDEsMjYwMDAwMA0KMjAxMyxBVEwsTkwsam9obnNjaDA1LDIyODc1MDANCjIwMTMsQVRMLE5MLGpvaG5zcmUwMiwxNjAwMDAwDQoyMDEzLEFUTCxOTCxsYWlyZGdlMDEsMTUwMDAwMA0KMjAxMyxBVEwsTkwsbWFydGljcjAxLDc0OTc1MA0KMjAxMyxBVEwsTkwsamFuaXNwYTAxLDcyNTAwMA0KMjAxMyxBVEwsTkwsa2ltYnJjcjAxLDY1NTAwMA0KMjAxMyxBVEwsTkwsZnJlZW1mcjAxLDU2MDAwMA0KMjAxMyxBVEwsTkwscGVuYXJhMDIsNTUwMDAwDQoyMDEzLEFUTCxOTCx3YWxkZWpvMDEsNTQxNTAwDQoyMDEzLEFUTCxOTCxzY2hhZmpvMDIsNTEyNTAwDQoyMDEzLEFUTCxOTCxiZWFjaGJyMDEsNTEwMDAwDQoyMDEzLEFUTCxOTCxtaW5vcm1pMDEsNTA1MDAwDQoyMDEzLEFUTCxOTCxmcmFuY2p1MDIsNDk2MjUwDQoyMDEzLEFUTCxOTCxhdmlsYWx1MDEsNDkxMjUwDQoyMDEzLEFUTCxOTCxnZWFycmNvMDEsNDkxMjUwDQoyMDEzLEFUTCxOTCxzaW1tb2FuMDEsNDkxMjUwDQoyMDEzLEFUTCxOTCx0ZWhlcmp1MDEsNDkwMDAwDQoyMDEzLEFUTCxOTCx2YXJ2YWFuMDEsNDkwMDAwDQoyMDEzLENITixOTCxzb3JpYWFsMDEsMTkwMDAwMDANCjIwMTMsQ0hOLE5MLGphY2tzZWQwMSwxMzAwMDAwMA0KMjAxMyxDSE4sTkwsZ2FyemFtYTAxLDEwMjUwMDAwDQoyMDEzLENITixOTCxtYXJtb2NhMDEsMTAxMzMzMzMNCjIwMTMsQ0hOLE5MLGZlbGRtc2MwMSw2MDAwMDAwDQoyMDEzLENITixOTCxjYXN0cnN0MDEsNTg1NzE0Mw0KMjAxMyxDSE4sTkwsYmFrZXJzYzAyLDU1MDAwMDANCjIwMTMsQ0hOLE5MLHZpbGxhY2EwMSw1MDAwMDAwDQoyMDEzLENITixOTCxmdWppa2t5MDEsNDUwMDAwMA0KMjAxMyxDSE4sTkwsZGVqZXNkYTAxLDQyNTAwMDANCjIwMTMsQ0hOLE5MLHNhbWFyamUwMSwyNjQwMDAwDQoyMDEzLENITixOTCxoYWlyc3NjMDEsMjUwMDAwMA0KMjAxMyxDSE4sTkwsc2NoaWVuYTAxLDIyNTAwMDANCjIwMTMsQ0hOLE5MLG5hdmFyZGkwMSwxNzUwMDAwDQoyMDEzLENITixOTCxjYW1wc2gwMSwxMzUwMDAwDQoyMDEzLENITixOTCxydXNzZWphMDIsMTA3NTAwMA0KMjAxMyxDSE4sTkwsdmFsYnVsdTAxLDkzMDAwMA0KMjAxMyxDSE4sTkwsYmFybmVkYTAxLDU2MjAwMA0KMjAxMyxDSE4sTkwsd29vZHRyMDEsNTI3NTAwDQoyMDEzLENITixOTCxib3dkZW1pMDEsNTA5NTAwDQoyMDEzLENITixOTCxtb3Njb2d1MDEsNTA0MjUwDQoyMDEzLENITixOTCxjYXN0aXdlMDEsNTAzMDAwDQoyMDEzLENITixOTCxyaXp6b2FuMDEsNDk4MDAwDQoyMDEzLENITixOTCxjbGV2ZXN0MDEsNDk2MDAwDQoyMDEzLENITixOTCxzYXBwZWRhMDEsNDkyMDAwDQoyMDEzLENITixOTCxyb25kb2hlMDEsNDkwMDAwDQoyMDEzLENJTixOTCx2b3R0b2pvMDEsMTg5MTA2NTUNCjIwMTMsQ0lOLE5MLGFycm95YnIwMSwxNjQ0NTUzNQ0KMjAxMyxDSU4sTkwscGhpbGxicjAxLDEwMDgzMzMzDQoyMDEzLENJTixOTCxicnVjZWphMDEsNzU0MTY2Nw0KMjAxMyxDSU4sTkwsY3VldG9qbzAxLDc0MDAwMDANCjIwMTMsQ0lOLE5MLGNob29zaDAxLDczNzUwMDANCjIwMTMsQ0lOLE5MLGJhaWxlaG8wMiw1MzUwMDAwDQoyMDEzLENJTixOTCxjaGFwbWFyMDEsNDgzNTc3Mg0KMjAxMyxDSU4sTkwsbWFyc2hzZTAxLDQ2MjUwMDANCjIwMTMsQ0lOLE5MLGxhdG9zbWEwMSw0MjUwMDAwDQoyMDEzLENJTixOTCxicm94dGpvMDEsNDAwMDAwMA0KMjAxMyxDSU4sTkwsbGVha2VtaTAxLDMwNjAwMDANCjIwMTMsQ0lOLE5MLGhhbmlncnkwMSwyMzUwMDAwDQoyMDEzLENJTixOTCxsdWR3aXJ5MDEsMjAwMDAwMA0KMjAxMyxDSU4sTkwsaGVpc2VjaDAxLDEzMjUwMDANCjIwMTMsQ0lOLE5MLGhhbm5hamEwMSwxMDAwMDAwDQoyMDEzLENJTixOTCxwYXJyYW1hMDEsMTAwMDAwMA0KMjAxMyxDSU4sTkwsb25kcnVsbzAxLDk1MDAwMA0KMjAxMyxDSU4sTkwsc2ltb25hbDAxLDg5MDAwMA0KMjAxMyxDSU4sTkwsZnJheml0bzAxLDUyNzUwMA0KMjAxMyxDSU4sTkwsbGVjdXJzYTAxLDUxMDAwMA0KMjAxMyxDSU4sTkwscGF1bHhhMDEsNTA1MDAwDQoyMDEzLENJTixOTCxjb3phcnphMDEsNDk3NTAwDQoyMDEzLENJTixOTCxob292ZWpqMDEsNDkyNTAwDQoyMDEzLENJTixOTCxtZXNvcmRlMDEsNDgwMDAwDQoyMDEzLENPTCxOTCxkZWxhcmpvMDEsMTEwMDAwMDANCjIwMTMsQ09MLE5MLGN1ZGR5bWkwMSwxMDUwMDAwMA0KMjAxMyxDT0wsTkwsdHVsb3d0cjAxLDEwMDAwMDAwDQoyMDEzLENPTCxOTCxnb256YWNhMDEsNzkyODU3MQ0KMjAxMyxDT0wsTkwsaGVsdG90bzAxLDYxNzUwMDANCjIwMTMsQ09MLE5MLGJldGFucmEwMSw0MjUwMDAwDQoyMDEzLENPTCxOTCxiZWxpc21hMDEsNDEwMDAwMA0KMjAxMyxDT0wsTkwsZm93bGVkZTAxLDM3NTAwMDANCjIwMTMsQ09MLE5MLGhlcm5hcmEwMiwzMjAwMDAwDQoyMDEzLENPTCxOTCxjb2x2aXR5MDEsMjI3NTAwMA0KMjAxMyxDT0wsTkwsbG9wZXp3aTAxLDE3NjI1MDANCjIwMTMsQ09MLE5MLGNoYWNpamgwMSwxNjUwMDAwDQoyMDEzLENPTCxOTCxmcmFuY2plMDEsMTUwMDAwMA0KMjAxMyxDT0wsTkwsaGVycmVqbzAzLDkwMDAwMA0KMjAxMyxDT0wsTkwsZ2FybGFqbzAxLDUwMDAwMA0KMjAxMyxDT0wsTkwsYnJpZ25yZTAxLDQ5OTAwMA0KMjAxMyxDT0wsTkwseW91bmdlcjAzLDQ5MjAwMA0KMjAxMyxDT0wsTkwsYnJvdGhyZTAxLDQ5MTAwMA0KMjAxMyxDT0wsTkwsZXNjYWxlZDAxLDQ5MTAwMA0KMjAxMyxDT0wsTkwsbmVsc29jaDAxLDQ5MTAwMA0KMjAxMyxDT0wsTkwsbmljYXNqdTAxLDQ5MTAwMA0KMjAxMyxDT0wsTkwsb3R0YXZhZDAxLDQ5MTAwMA0KMjAxMyxDT0wsTkwscGFjaGVqbzAxLDQ5MTAwMA0KMjAxMyxDT0wsTkwscm9zYXJ3aTAxLDQ5MTAwMA0KMjAxMyxDT0wsTkwscnV0bGVqbzAxLDQ5MDAwMA0KMjAxMyxMQU4sTkwsZ29uemFhZDAxLDIxODU3MTQzDQoyMDEzLExBTixOTCxncmVpbnphMDEsMjEwMDAwMDANCjIwMTMsTEFOLE5MLGNyYXdmY2EwMiwyMDg1NzE0Mw0KMjAxMyxMQU4sTkwsa2VtcG1hMDEsMjAyNTAwMDANCjIwMTMsTEFOLE5MLGJlY2tlam8wMiwxNzAwMDAwMA0KMjAxMyxMQU4sTkwscmFtaXJoYTAxLDE1NTAwMDAwDQoyMDEzLExBTixOTCxldGhpZWFuMDEsMTM1MDAwMDANCjIwMTMsTEFOLE5MLGxpbGx5dGUwMSwxMzE2NjY2Nw0KMjAxMyxMQU4sTkwsa2Vyc2hjbDAxLDExNzUwMDAwDQoyMDEzLExBTixOTCxiaWxsaWNoMDEsMTEwMDAwMDANCjIwMTMsTEFOLE5MLHVyaWJlanUwMSw3Mjk1OTExDQoyMDEzLExBTixOTCxjYXB1YWNoMDEsNjM3NTAwMA0KMjAxMyxMQU4sTkwsaGVybmFyYTAyLDYwMDAwMDANCjIwMTMsTEFOLE5MLGxlYWd1YnIwMSw1NTAwMDAwDQoyMDEzLExBTixOTCxlbGxpc21hMDEsNTI1MDAwMA0KMjAxMyxMQU4sTkwsZ3VlcnJtYTAyLDQ3MTE0OTkNCjIwMTMsTEFOLE5MLGhhaXJzamUwMiwzNzUwMDAwDQoyMDEzLExBTixOTCxyeXVoeTAxLDMzMzMzMzMNCjIwMTMsTEFOLE5MLGhvd2VsanAwMSwyODUwMDAwDQoyMDEzLExBTixOTCxlbGxpc2FqMDEsMjAwMDAwMA0KMjAxMyxMQU4sTkwscHVpZ3lhMDEsMjAwMDAwMA0KMjAxMyxMQU4sTkwscHVudG9uaTAxLDE1MDAwMDANCjIwMTMsTEFOLE5MLHNjaHVtc2swMSwxNTAwMDAwDQoyMDEzLExBTixOTCxiZWxpc3JvMDEsMTQ1MDAwMA0KMjAxMyxMQU4sTkwsamFuc2VrZTAxLDUxMjAwMA0KMjAxMyxMQU4sTkwsY3J1emx1MDEsNTA1MDAwDQoyMDEzLExBTixOTCxmaWZlc3QwMSw0OTI1MDANCjIwMTMsTEFOLE5MLGhlcnJlZWwwMSw0OTI1MDANCjIwMTMsTEFOLE5MLHJvZHJpc3QwMiw0OTE1MDANCjIwMTMsTEFOLE5MLGZlZGVydGkwMSw0OTEwMDANCjIwMTMsTEFOLE5MLGNhc3RlYWwwMSw0OTA1MDANCjIwMTMsTEFOLE5MLHdhbGxqbzAyLDQ5MDUwMA0KMjAxMyxNSUEsTkwsbm9sYXNyaTAxLDExNTAwMDAwDQoyMDEzLE1JQSxOTCxoZWNoYWFkMDEsMjc1MDAwMA0KMjAxMyxNSUEsTkwscG9sYW5wbDAxLDI3NTAwMDANCjIwMTMsTUlBLE5MLHR1cm5lamEwMSwyMTUwMDAwDQoyMDEzLE1JQSxOTCxkb2Jic2dyMDEsMTYwMDAwMA0KMjAxMyxNSUEsTkwscGllcnJqdTAxLDE2MDAwMDANCjIwMTMsTUlBLE5MLG1hdGhpamUwMSwxNTAwMDAwDQoyMDEzLE1JQSxOTCxyYXVjaGpvMDEsMTAwMDAwMA0KMjAxMyxNSUEsTkwsd2ViYnJ5MDEsOTc1MDAwDQoyMDEzLE1JQSxOTCxvbGl2b21pMDEsODAwMDAwDQoyMDEzLE1JQSxOTCxzdGFudG1pMDMsNTM3MDAwDQoyMDEzLE1JQSxOTCxhbHZhcmhlMDEsNTA3OTAwDQoyMDEzLE1JQSxOTCxjaXNoZXN0MDEsNTA1MDAwDQoyMDEzLE1JQSxOTCxjb2dobGNoMDEsNTAzNTAwDQoyMDEzLE1JQSxOTCxlb3ZhbG5hMDEsNTAyMDAwDQoyMDEzLE1JQSxOTCxydWdnaWp1MDEsNDk0NTAwDQoyMDEzLE1JQSxOTCxkdW5ubWkwMSw0OTI1MDANCjIwMTMsTUlBLE5MLGxlYmxhd2EwMSw0OTE1MDANCjIwMTMsTUlBLE5MLG1vcnJpbG8wMSw0OTE1MDANCjIwMTMsTUlBLE5MLHNvbGFuZG8wMSw0OTE1MDANCjIwMTMsTUlBLE5MLGJyYW50cm8wMSw0OTAwMDANCjIwMTMsTUlBLE5MLG1haG9uam8wMSw0OTAwMDANCjIwMTMsTUlBLE5MLHJhbW9zYWowMSw0OTAwMDANCjIwMTMsTUlBLE5MLHNraXB3a3kwMSw0OTAwMDANCjIwMTMsTUlMLE5MLHdlZWtzcmkwMSwxMTAwMDAwMA0KMjAxMyxNSUwsTkwsbG9oc2VreTAxLDEwMDYzOTIyDQoyMDEzLE1JTCxOTCxyYW1pcmFyMDEsMTAwMDAwMDANCjIwMTMsTUlMLE5MLGJyYXVucnkwMiw5ODk4NjExDQoyMDEzLE1JTCxOTCxnYWxsYXlvMDEsODAwMDAwMA0KMjAxMyxNSUwsTkwsYXhmb3JqbzAxLDUwMDAwMDANCjIwMTMsTUlMLE5MLGdvbWV6Y2EwMSw0MzAwMDAwDQoyMDEzLE1JTCxOTCxnb3J6ZXRvMDEsMjc1MDAwMA0KMjAxMyxNSUwsTkwsZ29uemFtaTAyLDIyNTAwMDANCjIwMTMsTUlMLE5MLGVzdHJhbWEwMSwxOTU1MDAwDQoyMDEzLE1JTCxOTCxhb2tpbm8wMSwxNzEyNTAwDQoyMDEzLE1JTCxOTCxiYWRlbmJ1MDEsMTU1MDAwMA0KMjAxMyxNSUwsTkwsZ29uemFhbDAyLDE0NTAwMDANCjIwMTMsTUlMLE5MLGJldGFueXUwMSw5MDAwMDANCjIwMTMsTUlMLE5MLGx1Y3Jvam8wMSw4NTAwMDANCjIwMTMsTUlMLE5MLG5hcnZlY2gwMSw4NDAwMDANCjIwMTMsTUlMLE5MLGZpZXJzbWkwMSw0OTgwMDANCjIwMTMsTUlMLE5MLG1hbGRvbWEwMSw0OTQwMDANCjIwMTMsTUlMLE5MLGhlbmRlamkwMSw0OTIwMDANCjIwMTMsTUlMLE5MLHNlZ3VyamUwMSw0OTIwMDANCjIwMTMsTUlMLE5MLGtpbnR6YnIwMSw0OTEwMDANCjIwMTMsTUlMLE5MLGJpYW5jamUwMSw0OTAwMDANCjIwMTMsTUlMLE5MLGRhdmlza2gwMSw0OTAwMDANCjIwMTMsTUlMLE5MLHBlcmFsd2kwMSw0OTAwMDANCjIwMTMsTUlMLE5MLHNjaGFmbG8wMSw0OTAwMDANCjIwMTMsTllOLE5MLHdyaWdoZGEwMywxMDE5MjA3MQ0KMjAxMyxOWU4sTkwsYnVja2pvMDEsNjUwMDAwMA0KMjAxMyxOWU4sTkwsZnJhbmNmcjAxLDY1MDAwMDANCjIwMTMsTllOLE5MLG1hcmN1c2gwMSw0MDAwMDAwDQoyMDEzLE5ZTixOTCxkYXZpc2lrMDIsMzEyNTAwMA0KMjAxMyxOWU4sTkwsbmllc2VqbzAxLDMwNTAwMDANCjIwMTMsTllOLE5MLG11cnBoZGEwOCwyOTI1MDAwDQoyMDEzLE5ZTixOTCxwYXJuZWJvMDEsMTcwMDAwMA0KMjAxMyxOWU4sTkwsbHlvbmJyMDEsNzUwMDAwDQoyMDEzLE5ZTixOTCxhdGNoaXNjMDEsNzAwMDAwDQoyMDEzLE5ZTixOTCxidXJrZWdyMDEsNTUwMDAwDQoyMDEzLE5ZTixOTCxnZWVkaTAxLDUyNzM3NQ0KMjAxMyxOWU4sTkwsZHVkYWx1MDEsNTE5MjQwDQoyMDEzLE5ZTixOTCx0ZWphZHJ1MDEsNTE0NzAxDQoyMDEzLE5ZTixOTCx0dXJuZWp1MDEsNTA0NTQ3DQoyMDEzLE5ZTixOTCxoZWZuZWplMDEsNTAwNjI1DQoyMDEzLE5ZTixOTCxiYXh0ZW1pMDEsNTAwMzE4DQoyMDEzLE5ZTixOTCxoYXJ2ZW1hMDEsNDk4NzUwDQoyMDEzLE5ZTixOTCxuaWV1d2tpMDEsNDk4MTI0DQoyMDEzLE5ZTixOTCx2YWxkZWpvMDIsNDk2NjQ1DQoyMDEzLE5ZTixOTCxtZWppYWplMDEsNDk0OTI1DQoyMDEzLE5ZTixOTCxjb3dnaWNvMDEsNDkzNTIwDQoyMDEzLE5ZTixOTCxlZGdpbmpvMDEsNDkzNTAwDQoyMDEzLE5ZTixOTCxmYW1pbGplMDEsNDkxNzUwDQoyMDEzLE5ZTixOTCxjYXJzb3JvMDEsNDkxMzc1DQoyMDEzLE5ZTixOTCxyZWNrZWFuMDEsNDkwODQwDQoyMDEzLE5ZTixOTCxsdXR6emEwMSw0OTAwNDANCjIwMTMsTllOLE5MLHJpY2VzYzAxLDQ5MDAwMA0KMjAxMyxOWU4sTkwsaGF3a2lsYTAxLDQ4MDAwMA0KMjAxMyxOWU4sTkwsbGFmZmVhYTAxLDQ4MDAwMA0KMjAxMyxQSEksTkwsbGVlY2wwMiwyNTAwMDAwMA0KMjAxMyxQSEksTkwsaGFtZWxjbzAxLDIwNTAwMDAwDQoyMDEzLFBISSxOTCxoYWxsYXJvMDEsMjAwMDAwMDANCjIwMTMsUEhJLE5MLGhvd2FycnkwMSwyMDAwMDAwMA0KMjAxMyxQSEksTkwseW91bmdtaTAyLDE4Mzc0OTc1DQoyMDEzLFBISSxOTCx1dGxleWNoMDEsMTUyODU3MTQNCjIwMTMsUEhJLE5MLHBhcGVsam8wMSwxMzAwMDAwMA0KMjAxMyxQSEksTkwscm9sbGlqaTAxLDExMDAwMDAwDQoyMDEzLFBISSxOTCxhZGFtc21pMDMsNTAwMDAwMA0KMjAxMyxQSEksTkwscnVpemNhMDEsNTAwMDAwMA0KMjAxMyxQSEksTkwsa2VuZHJreTAxLDQ1MDAwMDANCjIwMTMsUEhJLE5MLGxhbm5ham8wMSwyNTAwMDAwDQoyMDEzLFBISSxOTCxiYXN0YWFuMDEsMTQwMDAwMA0KMjAxMyxQSEksTkwsbml4bGEwMSwxMzUwMDAwDQoyMDEzLFBISSxOTCxkdXJiaWNoMDEsODUwMDAwDQoyMDEzLFBISSxOTCxmcmFuZGtlMDEsODUwMDAwDQoyMDEzLFBISSxOTCx5b3VuZ2RlMDMsNzUwMDAwDQoyMDEzLFBISSxOTCxtYXliZWpvMDIsNTE3MDAwDQoyMDEzLFBISSxOTCxyZXZlcmJlMDEsNTE1MDAwDQoyMDEzLFBISSxOTCx2YWxkZXJhMDIsNTA1MDAwDQoyMDEzLFBISSxOTCxicm93bmRvMDEsNTAwMDAwDQoyMDEzLFBISSxOTCxob3JzdGplMDEsNDk3MDAwDQoyMDEzLFBISSxOTCxrcmF0emVyMDEsNDk2MDAwDQoyMDEzLFBISSxOTCxzdHV0ZW1pMDEsNDkyNTAwDQoyMDEzLFBISSxOTCxhdW1vbnBoMDEsNDkwMDAwDQoyMDEzLFBISSxOTCxnYWx2aWZyMDEsNDkwMDAwDQoyMDEzLFBJVCxOTCxidXJuZWFqMDEsMTY1MDAwMDANCjIwMTMsUElULE5MLHJvZHJpd2EwMSwxMzUwMDAwMA0KMjAxMyxQSVQsTkwsbWFydGlydTAxLDc1MDAwMDANCjIwMTMsUElULE5MLGJhcm1lY2wwMSw1NTAwMDAwDQoyMDEzLFBJVCxOTCxtY2N1dGFuMDEsNDcwODMzMw0KMjAxMyxQSVQsTkwsam9uZXNnYTAyLDQ1MDAwMDANCjIwMTMsUElULE5MLHdhbGtlbmUwMSwzMzAwMDAwDQoyMDEzLFBJVCxOTCxtY2RvbmphMDMsMzAyNTAwMA0KMjAxMyxQSVQsTkwsZ3JpbGxqYTAxLDI1MDAwMDANCjIwMTMsUElULE5MLG1vcnRvY2gwMiwyMDAwMDAwDQoyMDEzLFBJVCxOTCxzYW5jaGdhMDEsMTc1MDAwMA0KMjAxMyxQSVQsTkwsbWNkb25qbzAzLDE1MDAwMDANCjIwMTMsUElULE5MLHNhbmNoam8wMSwxMzc1MDAwDQoyMDEzLFBJVCxOTCxpbmdlYnIwMSwxMjUwMDAwDQoyMDEzLFBJVCxOTCxsaXJpYWZyMDEsMTAwMDAwMA0KMjAxMyxQSVQsTkwsdGFiYXRqbzAxLDkxNjY2Nw0KMjAxMyxQSVQsTkwsYWx2YXJwZTAxLDcwMDAwMA0KMjAxMyxQSVQsTkwsbWVsYW5tYTAxLDUyMTAwMA0KMjAxMyxQSVQsTkwsd2F0c290bzAxLDUwNTUwMA0KMjAxMyxQSVQsTkwsbWNrZW5taTAxLDUwNTAwMA0KMjAxMyxQSVQsTkwsc25pZGV0cjAxLDUwNTAwMA0KMjAxMyxQSVQsTkwsaHVnaGVqYTAyLDUwNDUwMA0KMjAxMyxQSVQsTkwsaGFycmlqbzA1LDUwMzAwMA0KMjAxMyxQSVQsTkwsbGVyb3VjaDAxLDUwMjAwMA0KMjAxMyxQSVQsTkwsZ29tZXpqZTAxLDUwMDAwMA0KMjAxMyxQSVQsTkwsbWFydGVzdDAxLDUwMDAwMA0KMjAxMyxQSVQsTkwsbG9ja2VqZTAxLDQ5NzUwMA0KMjAxMyxQSVQsTkwsd2lsc29qdTEwLDQ5MzUwMA0KMjAxMyxTRE4sTkwscXVlbnRjYTAxLDk1MDAwMDANCjIwMTMsU0ROLE5MLGhlYWRsY2gwMSw4NTc1MDAwDQoyMDEzLFNETixOTCxzdHJlZWh1MDEsNzAwMDAwMA0KMjAxMyxTRE4sTkwsdm9scXVlZDAxLDU3MjUwMDANCjIwMTMsU0ROLE5MLHJpY2hhY2wwMSw1MjQwMDAwDQoyMDEzLFNETixOTCxncmVnZWx1MDEsMzIwMDAwMA0KMjAxMyxTRE4sTkwsbWF5YmljYTAxLDMxMDAwMDANCjIwMTMsU0ROLE5MLGh1bmRsbmkwMSwzMDAwMDAwDQoyMDEzLFNETixOTCxtYXJxdWphMDEsMzAwMDAwMA0KMjAxMyxTRE4sTkwsdmVuYWJ3aTAxLDI2NzUwMDANCjIwMTMsU0ROLE5MLGRlbm9yY2gwMSwyMDAwMDAwDQoyMDEzLFNETixOTCx0aGF0Y2pvMDEsMTM1MDAwMA0KMjAxMyxTRE4sTkwsa290c2FtYTAxLDEzMDAwMDANCjIwMTMsU0ROLE5MLGNhYnJlZXYwMSwxMjc1MDAwDQoyMDEzLFNETixOTCxhbG9uc3lvMDEsMTEyMDAwMA0KMjAxMyxTRE4sTkwsZ3JhbmR5YTAxLDk5MDAwMA0KMjAxMyxTRE4sTkwsYmFrZXJqbzAxLDkzMDAwMA0KMjAxMyxTRE4sTkwsYmxhbmtreTAxLDYwNTAwMA0KMjAxMyxTRE4sTkwsc3R1bHRlcjAxLDUwNzYwMA0KMjAxMyxTRE4sTkwsYmFzc2FuMDEsNTAzNjAwDQoyMDEzLFNETixOTCxndXptYWplMDEsNTAzMjAwDQoyMDEzLFNETixOTCxjYXNobmFuMDEsNTAwODAwDQoyMDEzLFNETixOTCxyb3NzdHkwMSw1MDA1MDANCjIwMTMsU0ROLE5MLGZvcnN5bG8wMSw0OTkwMDANCjIwMTMsU0ROLE5MLHRoYXllZGEwMSw0OTg5MDANCjIwMTMsU0ROLE5MLGJyYWNoYnIwMSw0OTgyMDANCjIwMTMsU0ROLE5MLGFtYXJpYWwwMSw0OTc0MDANCjIwMTMsU0ROLE5MLGxheW5ldG8wMSw0OTEzMDANCjIwMTMsU0ZOLE5MLGxpbmNldGkwMSwyMjI1MDAwMA0KMjAxMyxTRk4sTkwsY2Fpbm1hMDEsMjA4MzMzMzMNCjIwMTMsU0ZOLE5MLHppdG9iYTAxLDIwMDAwMDAwDQoyMDEzLFNGTixOTCxwZW5jZWh1MDEsMTM4MDAwMDANCjIwMTMsU0ZOLE5MLHBhZ2FuYW4wMSw4MjUwMDAwDQoyMDEzLFNGTixOTCxwb3NleWJ1MDEsODAwMDAwMA0KMjAxMyxTRk4sTkwsc2N1dGFtYTAxLDY2NjY2NjcNCjIwMTMsU0ZOLE5MLGFmZmVsamUwMSw2MDAwMDAwDQoyMDEzLFNGTixOTCxzYW5kb3BhMDEsNTcwMDAwMA0KMjAxMyxTRk4sTkwsdm9nZWxyeTAxLDUwMDAwMDANCjIwMTMsU0ZOLE5MLGxvcGV6amEwMiw0MjUwMDAwDQoyMDEzLFNGTixOTCxnYXJjaWphMDEsNDE2NjY2Nw0KMjAxMyxTRk4sTkwscm9tb3NlMDEsMzUwMDAwMA0KMjAxMyxTRk4sTkwsbWlqYXJqbzAxLDE4MDAwMDANCjIwMTMsU0ZOLE5MLHRvcnJlYW4wMiwxNTAwMDAwDQoyMDEzLFNGTixOTCxibGFuY2dyMDEsMTM1MDAwMA0KMjAxMyxTRk4sTkwsYXJpYXNqbzAxLDkyNTAwMA0KMjAxMyxTRk4sTkwsYnVtZ2FtYTAxLDkxNjY2Nw0KMjAxMyxTRk4sTkwsZ2F1ZGljaDAxLDc1MDAwMA0KMjAxMyxTRk4sTkwsYmVsdGJyMDEsNTMxNTAwDQoyMDEzLFNGTixOTCxjcmF3ZmJyMDEsNTMwMDAwDQoyMDEzLFNGTixOTCxzYW5jaGhlMDEsNTAyNTAwDQoyMDEzLFNGTixOTCxhYnJldXRvMDEsNDk4MDAwDQoyMDEzLFNGTixOTCxrb250b2dlMDEsNDk0NTAwDQoyMDEzLFNGTixOTCxwaWxsYnIwMSw0OTQwMDANCjIwMTMsU0ZOLE5MLG1hY2hpamUwMSw0OTA1MDANCjIwMTMsU0ZOLE5MLHBlZ3VlZnIwMSw0OTA1MDANCjIwMTMsU0ZOLE5MLHN1cmthZXIwMSw0OTA1MDANCjIwMTMsU0xOLE5MLGhvbGxpbWEwMSwxNjI3MjExMA0KMjAxMyxTTE4sTkwsbW9saW55YTAxLDE0MjAwMDAwDQoyMDEzLFNMTixOTCxiZWx0cmNhMDEsMTMwMDAwMDANCjIwMTMsU0xOLE5MLHdhaW53YWQwMSwxMjAwMDAwMA0KMjAxMyxTTE4sTkwsd2VzdGJqYTAxLDg3NTAwMDANCjIwMTMsU0xOLE5MLGdhcmNpamEwMiw1ODc1MDAwDQoyMDEzLFNMTixOTCxtdWppY2VkMDEsMzIwMDAwMA0KMjAxMyxTTE4sTkwsZnJlZXNkYTAxLDMxNTAwMDANCjIwMTMsU0xOLE5MLHdpZ2dpdHkwMSwyNTAwMDAwDQoyMDEzLFNMTixOTCxjcmFpZ2FsMDEsMTc1MDAwMA0KMjAxMyxTTE4sTkwsY2hvYXRyYTAxLDE1MDAwMDANCjIwMTMsU0xOLE5MLGJvZ2dzbWkwMSwxNDc1MDAwDQoyMDEzLFNMTixOTCxyemVwY21hMDEsMTEwMDAwMA0KMjAxMyxTTE4sTkwsamF5am8wMiw1MjQwMDANCjIwMTMsU0xOLE5MLGx5bm5sYTAxLDUxMzAwMA0KMjAxMyxTTE4sTkwsc2FsYXNmZTAxLDUxMjAwMA0KMjAxMyxTTE4sTkwsZGVzY2FkYTAxLDUxMTAwMA0KMjAxMyxTTE4sTkwsY2FycGVtYTAxLDUwNDAwMA0KMjAxMyxTTE4sTkwsY3J1enRvMDMsNTAzMDAwDQoyMDEzLFNMTixOTCxyb2JpbnNoMDEsNDk4MDAwDQoyMDEzLFNMTixOTCxrZWxseWpvMDUsNDkzMDAwDQoyMDEzLFNMTixOTCxhZGFtc21hMDEsNDkwMDAwDQoyMDEzLFNMTixOTCxjaGFtYmFkMDEsNDkwMDAwDQoyMDEzLFNMTixOTCxjbGV0b21hMDEsNDkwMDAwDQoyMDEzLFNMTixOTCxqYWNrc3J5MDIsNDkwMDAwDQoyMDEzLFNMTixOTCxrb3ptYXBlMDEsNDkwMDAwDQoyMDEzLFNMTixOTCxtaWxsZXNoMDEsNDkwMDAwDQoyMDEzLFNMTixOTCxyb3NlbnRyMDEsNDkwMDAwDQoyMDEzLFdBUyxOTCx3ZXJ0aGphMDEsMTY1NzE0MjkNCjIwMTMsV0FTLE5MLHppbW1lcnkwMSwxNDEwMDAwMA0KMjAxMyxXQVMsTkwsaGFyZW5kYTAxLDEzMDAwMDAwDQoyMDEzLFdBUyxOTCxzb3JpYXJhMDEsMTE3NDIwOTENCjIwMTMsV0FTLE5MLGxhcm9jYWQwMSwxMDAwMDAwMA0KMjAxMyxXQVMsTkwsc3V6dWtrdTAxLDY0ODc1MDANCjIwMTMsV0FTLE5MLGdvbnphZ2kwMSw2MzUwMDAwDQoyMDEzLFdBUyxOTCx6aW1tZWpvMDIsNTM1MDAwMA0KMjAxMyxXQVMsTkwsc3BhbmRlMDEsNDc1MDAwMA0KMjAxMyxXQVMsTkwsY2xpcHB0eTAxLDQwMDAwMDANCjIwMTMsV0FTLE5MLHN0cmFzc3QwMSwzOTAwMDAwDQoyMDEzLFdBUyxOTCxkZXNtb2lhMDEsMzgwMDAwMA0KMjAxMyxXQVMsTkwsc3RvcmVkcjAxLDI1MDAwMDANCjIwMTMsV0FTLE5MLGRldHdpcm8wMSwyMzM3NTAwDQoyMDEzLFdBUyxOTCxoYXJwZWJyMDMsMjAwMDAwMA0KMjAxMyxXQVMsTkwsYmVybmFybzAxLDEyMTI1MDANCjIwMTMsV0FTLE5MLHRyYWN5Y2gwMSwxMDAwMDAwDQoyMDEzLFdBUyxOTCxzdGFtbWNyMDEsODc1MDAwDQoyMDEzLFdBUyxOTCxkdWtlemEwMSw3MDAwMDANCjIwMTMsV0FTLE5MLGVzcGluZGEwMSw1MjYyNTANCjIwMTMsV0FTLE5MLG1hdHRocnkwMSw1MDQ1MDANCjIwMTMsV0FTLE5MLGxvbWJhc3QwMiw1MDEyNTANCjIwMTMsV0FTLE5MLHJhbW9zd2kwMSw1MDEyNTANCjIwMTMsV0FTLE5MLHJvZHJpaGUwMyw1MDEwMDANCjIwMTMsV0FTLE5MLG1vb3JldHkwMSw0OTMwMDANCg==]]></data>
	</file>
	<file>
	  <filename>/testing/test_datareport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENNU01TRXh0CnJlcXVpcmVfb25jZSgnLi4vLi4vLi4vaW5jbHVkZS5waHAnKTsKCi8vIG5vdGU6IHF1ZXJ5IGlzIGluZGVwZW5kZW50IGZyb20gcmVwb3J0CiRtYXAgPSBhcnJheSgwPT4neWVhcklEJywxPT4ndGVhbUlEJywyPT4nbGdJRCcsMz0+J3BsYXllcklEJyw0PT4nc2FsYXJ5Jyk7CiRxdWVyeSA9IG5ldyBxdWVyeVxjc3ZmaWxlcXVlcnkoYXJyYXkoJ2ZpbGVuYW1lJz0+J3Rlc3RfZGF0YS9iYXNlYmFsbF9zYWxhcmllcy5jc3YnLCdvZmZzZXQnPT4xLCdsaW1pdCc9PjEwMDAwMDAsJ21hcCc9PiRtYXApKTsKCi8vIHRoaXMgZGVmaW5lcyB0aGUgcmVwb3J0CiRiYXNlYmFsbF9yZXBvcnQgPSBuZXcgcmVwb3J0c1x0YWJ1bGFyX3JlcG9ydF9kZWZuKCk7CiRiYXNlYmFsbF9yZXBvcnQtPnNldF9xdWVyeSgkcXVlcnkpOwokYmFzZWJhbGxfcmVwb3J0LT5zZXRfdGl0bGUoJ0Jhc2ViYWxsIFNhbGFyaWVzJyk7CiRiYXNlYmFsbF9yZXBvcnQtPnNldF9kZXNjcmlwdGlvbignU2FsYXJpZXMgYnkgdGVhbScpOwovLyBvcmRlciBvZiBjb2x1bW4gZGVmaW5pdGlvbiBpcyBpbXBvcnRhbnQKJGJhc2ViYWxsX3JlcG9ydC0+ZGVmaW5lX2NvbHVtbihuZXcgcmVwb3J0c1x0YWJ1bGFyX3JlcG9ydF9kZWZuX2NvbHVtbigneWVhcklEJywnWWVhcicpKTsKJGJhc2ViYWxsX3JlcG9ydC0+ZGVmaW5lX2NvbHVtbihuZXcgcmVwb3J0c1x0YWJ1bGFyX3JlcG9ydF9kZWZuX2NvbHVtbignbGdJRCcsJ0xlYWd1ZScpKTsKJGJhc2ViYWxsX3JlcG9ydC0+ZGVmaW5lX2NvbHVtbihuZXcgcmVwb3J0c1x0YWJ1bGFyX3JlcG9ydF9kZWZuX2NvbHVtbigndGVhbUlEJywnVGVhbScpKTsKJGJhc2ViYWxsX3JlcG9ydC0+ZGVmaW5lX2NvbHVtbihuZXcgcmVwb3J0c1x0YWJ1bGFyX3JlcG9ydF9kZWZuX2NvbHVtbigncGxheWVySUQnLCdQbGF5ZXInKSk7CiRiYXNlYmFsbF9yZXBvcnQtPmRlZmluZV9jb2x1bW4obmV3IHJlcG9ydHNcdGFidWxhcl9yZXBvcnRfZGVmbl9jb2x1bW4oJ3NhbGFyeScsJ1NhbGFyeScsJ3skdmFsfG51bWJlcl9mb3JtYXQ6Mn0nKSk7CiRiYXNlYmFsbF9yZXBvcnQtPnNldF9jb250ZW50X2NvbHVtbnMoYXJyYXkoJ3BsYXllcklEJywnc2FsYXJ5JykpOwoKLy8gZGVmaW5lIGdyb3VwcyAoZnJvbSBsZWZ0bW9zdCBjb2x1bW4gdG8gcmlnaHRtb3N0IGNvbHVtbikKJGdycCA9IG5ldyByZXBvcnRzXHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXAoJ3llYXJJRCcpOwokZ3JwLT5hZGRfaGVhZGVyX2xpbmUobmV3IHJlcG9ydHNcdGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cF9saW5lKGFycmF5KCd5ZWFySUQnPT4neyR2YWx9JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xnSUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVhbUlEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXllcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NhbGFyeSc9Pm51bGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKTsKJGdycC0+YWRkX2Zvb3Rlcl9saW5lKG5ldyByZXBvcnRzXHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXBfbGluZShhcnJheSgneWVhcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xnSUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVhbUlEJz0+J1llYXJseSBNZWRpYW46JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXllcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NhbGFyeSc9Pid7JGdycF9tZWRpYW58bnVtYmVyX2Zvcm1hdDoyfScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSk7CiRiYXNlYmFsbF9yZXBvcnQtPmFkZF9ncm91cCgkZ3JwKTsKJGdycCA9IG5ldyByZXBvcnRzXHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXAoJ2xnSUQnKTsKJGdycC0+YWRkX2hlYWRlcl9saW5lKG5ldyByZXBvcnRzXHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXBfbGluZShhcnJheSgneWVhcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xnSUQnPT4neyR2YWx9JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RlYW1JRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF5ZXJJRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzYWxhcnknPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpOwokZ3JwLT5hZGRfZm9vdGVyX2xpbmUobmV3IHJlcG9ydHNcdGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cF9saW5lKGFycmF5KCd5ZWFySUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGdJRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZWFtSUQnPT4nTGVhZ3VlIFRvdGFsOicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF5ZXJJRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzYWxhcnknPT4neyRncnBfc3VtfG51bWJlcl9mb3JtYXQ6Mn0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpOwokZ3JwLT5hZGRfZm9vdGVyX2xpbmUobmV3IHJlcG9ydHNcdGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cF9saW5lKGFycmF5KCd5ZWFySUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGdJRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZWFtSUQnPT4nTGVhZ3VlIEF2ZXJhZ2U6JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXllcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NhbGFyeSc9Pid7JGdycF9tZWFufG51bWJlcl9mb3JtYXQ6Mn0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpOwokYmFzZWJhbGxfcmVwb3J0LT5hZGRfZ3JvdXAoJGdycCk7CiRncnAgPSBuZXcgcmVwb3J0c1x0YWJ1bGFyX3JlcG9ydF9kZWZuX2dyb3VwKCd0ZWFtSUQnKTsKJGdycC0+YWRkX2hlYWRlcl9saW5lKG5ldyByZXBvcnRzXHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXBfbGluZShhcnJheSgneWVhcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xnSUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVhbUlEJz0+J3skdmFsfScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF5ZXJJRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzYWxhcnknPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpOwokZ3JwLT5hZGRfZm9vdGVyX2xpbmUobmV3IHJlcG9ydHNcdGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cF9saW5lKGFycmF5KCd5ZWFySUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGdJRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZWFtSUQnPT4nVGVhbSBUb3RhbDonLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGxheWVySUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2FsYXJ5Jz0+J3skZ3JwX3N1bXxudW1iZXJfZm9ybWF0OjJ9JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKTsKJGdycC0+YWRkX2Zvb3Rlcl9saW5lKG5ldyByZXBvcnRzXHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXBfbGluZShhcnJheSgneWVhcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xnSUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVhbUlEJz0+J1RlYW0gQXZlcmFnZTonLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGxheWVySUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2FsYXJ5Jz0+J3skZ3JwX21lYW58bnVtYmVyX2Zvcm1hdDoyfScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSk7CiRiYXNlYmFsbF9yZXBvcnQtPmFkZF9ncm91cCgkZ3JwKTsKCiRnZW5lcmF0b3IgPSBuZXcgcmVwb3J0c1xkYXRhX3JlcG9ydF9nZW5lcmF0b3IoJGJhc2ViYWxsX3JlcG9ydCk7CiRnZW5lcmF0b3ItPmdlbmVyYXRlKCk7CiRkYXRhID0gJGdlbmVyYXRvci0+Z2V0X291dHB1dCgpOwpwcmludF9yKCRkYXRhKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/testing/test_htmlreport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENNU01TRXh0CnJlcXVpcmVfb25jZSgnLi4vLi4vLi4vaW5jbHVkZS5waHAnKTsKCi8vIG5vdGU6IHF1ZXJ5IGlzIGluZGVwZW5kZW50IGZyb20gcmVwb3J0CiRtYXAgPSBhcnJheSgwPT4neWVhcklEJywxPT4ndGVhbUlEJywyPT4nbGdJRCcsMz0+J3BsYXllcklEJyw0PT4nc2FsYXJ5Jyk7CiRxdWVyeSA9IG5ldyBxdWVyeVxjc3ZmaWxlcXVlcnkoYXJyYXkoJ2ZpbGVuYW1lJz0+J3Rlc3RfZGF0YS9iYXNlYmFsbF9zYWxhcmllcy5jc3YnLCdvZmZzZXQnPT4xLCdsaW1pdCc9PjEwMDAwMDAsJ21hcCc9PiRtYXApKTsKCi8vIHRoaXMgZGVmaW5lcyB0aGUgcmVwb3J0CiRiYXNlYmFsbF9yZXBvcnQgPSBuZXcgcmVwb3J0c1x0YWJ1bGFyX3JlcG9ydF9kZWZuKCk7CiRiYXNlYmFsbF9yZXBvcnQtPnNldF9xdWVyeSgkcXVlcnkpOwokYmFzZWJhbGxfcmVwb3J0LT5zZXRfdGl0bGUoJ0Jhc2ViYWxsIFNhbGFyaWVzJyk7CiRiYXNlYmFsbF9yZXBvcnQtPnNldF9kZXNjcmlwdGlvbignU2FsYXJpZXMgYnkgdGVhbScpOwovLyBvcmRlciBvZiBjb2x1bW4gZGVmaW5pdGlvbiBpcyBpbXBvcnRhbnQKJGJhc2ViYWxsX3JlcG9ydC0+ZGVmaW5lX2NvbHVtbihuZXcgcmVwb3J0c1x0YWJ1bGFyX3JlcG9ydF9kZWZuX2NvbHVtbigneWVhcklEJywnWWVhcicpKTsKJGJhc2ViYWxsX3JlcG9ydC0+ZGVmaW5lX2NvbHVtbihuZXcgcmVwb3J0c1x0YWJ1bGFyX3JlcG9ydF9kZWZuX2NvbHVtbignbGdJRCcsJ0xlYWd1ZScpKTsKJGJhc2ViYWxsX3JlcG9ydC0+ZGVmaW5lX2NvbHVtbihuZXcgcmVwb3J0c1x0YWJ1bGFyX3JlcG9ydF9kZWZuX2NvbHVtbigndGVhbUlEJywnVGVhbScpKTsKJGJhc2ViYWxsX3JlcG9ydC0+ZGVmaW5lX2NvbHVtbihuZXcgcmVwb3J0c1x0YWJ1bGFyX3JlcG9ydF9kZWZuX2NvbHVtbigncGxheWVySUQnLCdQbGF5ZXInKSk7CiRiYXNlYmFsbF9yZXBvcnQtPmRlZmluZV9jb2x1bW4obmV3IHJlcG9ydHNcdGFidWxhcl9yZXBvcnRfZGVmbl9jb2x1bW4oJ3NhbGFyeScsJ1NhbGFyeScsJ3skdmFsfG51bWJlcl9mb3JtYXQ6Mn0nKSk7CiRiYXNlYmFsbF9yZXBvcnQtPnNldF9jb250ZW50X2NvbHVtbnMoYXJyYXkoJ3BsYXllcklEJywnc2FsYXJ5JykpOwoKLy8gZGVmaW5lIGdyb3VwcyAoZnJvbSBsZWZ0bW9zdCBjb2x1bW4gdG8gcmlnaHRtb3N0IGNvbHVtbikKJGdycCA9IG5ldyByZXBvcnRzXHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXAoJ3llYXJJRCcpOwokZ3JwLT5hZGRfaGVhZGVyX2xpbmUobmV3IHJlcG9ydHNcdGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cF9saW5lKGFycmF5KCd5ZWFySUQnPT4neyR2YWx9JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xnSUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVhbUlEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXllcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NhbGFyeSc9Pm51bGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKTsKJGdycC0+YWRkX2Zvb3Rlcl9saW5lKG5ldyByZXBvcnRzXHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXBfbGluZShhcnJheSgneWVhcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xnSUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVhbUlEJz0+J1llYXJseSBNZWRpYW46JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXllcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NhbGFyeSc9Pid7JGdycF9tZWRpYW58bnVtYmVyX2Zvcm1hdDoyfScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSk7CiRiYXNlYmFsbF9yZXBvcnQtPmFkZF9ncm91cCgkZ3JwKTsKJGdycCA9IG5ldyByZXBvcnRzXHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXAoJ2xnSUQnKTsKJGdycC0+YWRkX2hlYWRlcl9saW5lKG5ldyByZXBvcnRzXHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXBfbGluZShhcnJheSgneWVhcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xnSUQnPT4neyR2YWx9JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RlYW1JRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF5ZXJJRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzYWxhcnknPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpOwokZ3JwLT5hZGRfZm9vdGVyX2xpbmUobmV3IHJlcG9ydHNcdGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cF9saW5lKGFycmF5KCd5ZWFySUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGdJRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZWFtSUQnPT4nTGVhZ3VlIFRvdGFsOicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF5ZXJJRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzYWxhcnknPT4neyRncnBfc3VtfG51bWJlcl9mb3JtYXQ6Mn0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpOwokZ3JwLT5hZGRfZm9vdGVyX2xpbmUobmV3IHJlcG9ydHNcdGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cF9saW5lKGFycmF5KCd5ZWFySUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGdJRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZWFtSUQnPT4nTGVhZ3VlIEF2ZXJhZ2U6JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXllcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NhbGFyeSc9Pid7JGdycF9tZWFufG51bWJlcl9mb3JtYXQ6Mn0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpOwokYmFzZWJhbGxfcmVwb3J0LT5hZGRfZ3JvdXAoJGdycCk7CiRncnAgPSBuZXcgcmVwb3J0c1x0YWJ1bGFyX3JlcG9ydF9kZWZuX2dyb3VwKCd0ZWFtSUQnKTsKJGdycC0+YWRkX2hlYWRlcl9saW5lKG5ldyByZXBvcnRzXHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXBfbGluZShhcnJheSgneWVhcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xnSUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVhbUlEJz0+J3skdmFsfScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF5ZXJJRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzYWxhcnknPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpOwokZ3JwLT5hZGRfZm9vdGVyX2xpbmUobmV3IHJlcG9ydHNcdGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cF9saW5lKGFycmF5KCd5ZWFySUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGdJRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZWFtSUQnPT4nVGVhbSBUb3RhbDonLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGxheWVySUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2FsYXJ5Jz0+J3skZ3JwX3N1bXxudW1iZXJfZm9ybWF0OjJ9JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKTsKJGdycC0+YWRkX2Zvb3Rlcl9saW5lKG5ldyByZXBvcnRzXHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXBfbGluZShhcnJheSgneWVhcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xnSUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVhbUlEJz0+J1RlYW0gQXZlcmFnZTonLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGxheWVySUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2FsYXJ5Jz0+J3skZ3JwX21lYW58bnVtYmVyX2Zvcm1hdDoyfScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSk7CiRiYXNlYmFsbF9yZXBvcnQtPmFkZF9ncm91cCgkZ3JwKTsKCiRnZW5lcmF0b3IgPSBuZXcgcmVwb3J0c1xodG1sX3JlcG9ydF9nZW5lcmF0b3IoJGJhc2ViYWxsX3JlcG9ydCk7CiRnZW5lcmF0b3ItPmdlbmVyYXRlKCk7CmVjaG8gJGdlbmVyYXRvci0+Z2V0X291dHB1dCgpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/testing/test_textreport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIENNU01TRXh0CnJlcXVpcmVfb25jZSgnLi4vLi4vLi4vaW5jbHVkZS5waHAnKTsKCi8vIG5vdGU6IHF1ZXJ5IGlzIGluZGVwZW5kZW50IGZyb20gcmVwb3J0CiRtYXAgPSBhcnJheSgwPT4neWVhcklEJywxPT4ndGVhbUlEJywyPT4nbGdJRCcsMz0+J3BsYXllcklEJyw0PT4nc2FsYXJ5Jyk7CiRxdWVyeSA9IG5ldyBxdWVyeVxjc3ZmaWxlcXVlcnkoYXJyYXkoJ2ZpbGVuYW1lJz0+J3Rlc3RfZGF0YS9iYXNlYmFsbF9zYWxhcmllcy5jc3YnLCdvZmZzZXQnPT4xLCdsaW1pdCc9PjEwMDAwMDAsJ21hcCc9PiRtYXApKTsKCi8vIHRoaXMgZGVmaW5lcyB0aGUgcmVwb3J0CiRiYXNlYmFsbF9yZXBvcnQgPSBuZXcgcmVwb3J0c1x0YWJ1bGFyX3JlcG9ydF9kZWZuKCk7CiRiYXNlYmFsbF9yZXBvcnQtPnNldF9xdWVyeSgkcXVlcnkpOwokYmFzZWJhbGxfcmVwb3J0LT5zZXRfdGl0bGUoJ0Jhc2ViYWxsIFNhbGFyaWVzJyk7CiRiYXNlYmFsbF9yZXBvcnQtPnNldF9kZXNjcmlwdGlvbignU2FsYXJpZXMgYnkgdGVhbScpOwovLyBvcmRlciBvZiBjb2x1bW4gZGVmaW5pdGlvbiBpcyBpbXBvcnRhbnQKJGJhc2ViYWxsX3JlcG9ydC0+ZGVmaW5lX2NvbHVtbihuZXcgcmVwb3J0c1x0YWJ1bGFyX3JlcG9ydF9kZWZuX2NvbHVtbigneWVhcklEJywnWWVhcicpKTsKJGJhc2ViYWxsX3JlcG9ydC0+ZGVmaW5lX2NvbHVtbihuZXcgcmVwb3J0c1x0YWJ1bGFyX3JlcG9ydF9kZWZuX2NvbHVtbignbGdJRCcsJ0xlYWd1ZScpKTsKJGJhc2ViYWxsX3JlcG9ydC0+ZGVmaW5lX2NvbHVtbihuZXcgcmVwb3J0c1x0YWJ1bGFyX3JlcG9ydF9kZWZuX2NvbHVtbigndGVhbUlEJywnVGVhbScpKTsKJGJhc2ViYWxsX3JlcG9ydC0+ZGVmaW5lX2NvbHVtbihuZXcgcmVwb3J0c1x0YWJ1bGFyX3JlcG9ydF9kZWZuX2NvbHVtbigncGxheWVySUQnLCdQbGF5ZXInKSk7CiRiYXNlYmFsbF9yZXBvcnQtPmRlZmluZV9jb2x1bW4obmV3IHJlcG9ydHNcdGFidWxhcl9yZXBvcnRfZGVmbl9jb2x1bW4oJ3NhbGFyeScsJ1NhbGFyeScsJ3skdmFsfG51bWJlcl9mb3JtYXQ6Mn0nKSk7CiRiYXNlYmFsbF9yZXBvcnQtPnNldF9jb250ZW50X2NvbHVtbnMoYXJyYXkoJ3BsYXllcklEJywnc2FsYXJ5JykpOwoKLy8gZGVmaW5lIGdyb3VwcyAoZnJvbSBsZWZ0bW9zdCBjb2x1bW4gdG8gcmlnaHRtb3N0IGNvbHVtbikKJGdycCA9IG5ldyByZXBvcnRzXHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXAoJ3llYXJJRCcpOwokZ3JwLT5hZGRfaGVhZGVyX2xpbmUobmV3IHJlcG9ydHNcdGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cF9saW5lKGFycmF5KCd5ZWFySUQnPT4neyR2YWx9JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xnSUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVhbUlEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXllcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NhbGFyeSc9Pm51bGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKTsKJGdycC0+YWRkX2Zvb3Rlcl9saW5lKG5ldyByZXBvcnRzXHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXBfbGluZShhcnJheSgneWVhcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xnSUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVhbUlEJz0+J1llYXJseSBNZWRpYW46JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXllcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NhbGFyeSc9Pid7JGdycF9tZWRpYW58bnVtYmVyX2Zvcm1hdDoyfScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSk7CiRiYXNlYmFsbF9yZXBvcnQtPmFkZF9ncm91cCgkZ3JwKTsKJGdycCA9IG5ldyByZXBvcnRzXHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXAoJ2xnSUQnKTsKJGdycC0+YWRkX2hlYWRlcl9saW5lKG5ldyByZXBvcnRzXHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXBfbGluZShhcnJheSgneWVhcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xnSUQnPT4neyR2YWx9JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RlYW1JRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF5ZXJJRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzYWxhcnknPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpOwokZ3JwLT5hZGRfZm9vdGVyX2xpbmUobmV3IHJlcG9ydHNcdGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cF9saW5lKGFycmF5KCd5ZWFySUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGdJRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZWFtSUQnPT4nTGVhZ3VlIFRvdGFsOicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF5ZXJJRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzYWxhcnknPT4neyRncnBfc3VtfG51bWJlcl9mb3JtYXQ6Mn0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpOwokZ3JwLT5hZGRfZm9vdGVyX2xpbmUobmV3IHJlcG9ydHNcdGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cF9saW5lKGFycmF5KCd5ZWFySUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGdJRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZWFtSUQnPT4nTGVhZ3VlIEF2ZXJhZ2U6JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXllcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NhbGFyeSc9Pid7JGdycF9tZWFufG51bWJlcl9mb3JtYXQ6Mn0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpOwokYmFzZWJhbGxfcmVwb3J0LT5hZGRfZ3JvdXAoJGdycCk7CiRncnAgPSBuZXcgcmVwb3J0c1x0YWJ1bGFyX3JlcG9ydF9kZWZuX2dyb3VwKCd0ZWFtSUQnKTsKJGdycC0+YWRkX2hlYWRlcl9saW5lKG5ldyByZXBvcnRzXHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXBfbGluZShhcnJheSgneWVhcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xnSUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVhbUlEJz0+J3skdmFsfScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF5ZXJJRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzYWxhcnknPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpOwokZ3JwLT5hZGRfZm9vdGVyX2xpbmUobmV3IHJlcG9ydHNcdGFidWxhcl9yZXBvcnRfZGVmbl9ncm91cF9saW5lKGFycmF5KCd5ZWFySUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGdJRCc9Pm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZWFtSUQnPT4nVGVhbSBUb3RhbDonLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGxheWVySUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2FsYXJ5Jz0+J3skZ3JwX3N1bXxudW1iZXJfZm9ybWF0OjJ9JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpKTsKJGdycC0+YWRkX2Zvb3Rlcl9saW5lKG5ldyByZXBvcnRzXHRhYnVsYXJfcmVwb3J0X2RlZm5fZ3JvdXBfbGluZShhcnJheSgneWVhcklEJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xnSUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVhbUlEJz0+J1RlYW0gQXZlcmFnZTonLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGxheWVySUQnPT5udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2FsYXJ5Jz0+J3skZ3JwX21lYW58bnVtYmVyX2Zvcm1hdDoyfScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSk7CiRiYXNlYmFsbF9yZXBvcnQtPmFkZF9ncm91cCgkZ3JwKTsKCiRnZW5lcmF0b3IgPSBuZXcgcmVwb3J0c1x0ZXh0X3JlcG9ydF9nZW5lcmF0b3IoJGJhc2ViYWxsX3JlcG9ydCk7CiRnZW5lcmF0b3ItPmdlbmVyYXRlKCk7CmVjaG8gJGdlbmVyYXRvci0+Z2V0X291dHB1dCgpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/tests</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/tests/PlainSettingsTest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy9kZWNsYXJlKHN0cmljdF90eXBlcz0xKTsjIHJldmlzaXQKCnVzZSBQSFBVbml0XEZyYW1ld29ya1xUZXN0Q2FzZTsKdXNlIENNU01TRXh0XHNlY3VyZV9zZXR0aW5ncyBBUyBzZWN1cmVfc2V0dGluZ3NfaW87CgpjbGFzcyBQbGFpblNldHRpbmdzVGVzdCBleHRlbmRzIFRlc3RDYXNlCnsKICAgIHByaXZhdGUgJHRlc3RfYXJyYXkgPSBbICdBcHBsZScsICdCYW5hbmEnLCAnQ2Fycm90JyBdOwogICAgcHJpdmF0ZSAkdGVzdF9oYXNoID0gWwogICAgICAgJ3Rlc3QxJz0+J2ZvbycsICd0ZXN0Mic9PidiYXInCiAgICBdOwogICAgcHJpdmF0ZSAkZmlsZW5hbWU7CgogICAgcHVibGljIGZ1bmN0aW9uIHNldHVwKCkKICAgIHsKCSR0aGlzLT5maWxlbmFtZSA9ICcvdG1wL3NlY3VyZV9zZXR0aW5nc190ZXN0X2F0XycudGltZSgpLicuanNvbic7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDYW5Xcml0ZUFycmF5KCkKICAgIHsgICAgCgkkb2JqID0gbmV3IHNlY3VyZV9zZXR0aW5nc19pbygpOwoJJG9iai0+d3JpdGVfdG8oJHRoaXMtPmZpbGVuYW1lLCR0aGlzLT50ZXN0X2FycmF5KTsgCiAgICAgICAgJHRoaXMtPmFzc2VydEZpbGVFeGlzdHMoJHRoaXMtPmZpbGVuYW1lKTsgCiAgICB9CiAgCiAgICAvKioKICAgICAqIEBkZXBlbmRzIHRlc3RDYW5Xcml0ZUFycmF5CiAgICAgKi8gCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENhblJlYWRXaXRob3V0Q2hlY2tzdW0oKSAgIAogICAgewoJJG9iaiA9IG5ldyBzZWN1cmVfc2V0dGluZ3NfaW8oKTsKCSRkYXRhID0gJG9iai0+cmVhZF9mcm9tKCR0aGlzLT5maWxlbmFtZSk7CgkkdGhpcy0+YXNzZXJ0SXNBcnJheSgkZGF0YSk7CgkkdGhpcy0+YXNzZXJ0VHJ1ZShpbl9hcnJheSgnQXBwbGUnLCRkYXRhKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGVwZW5kcyB0ZXN0Q2FuV3JpdGVBcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENhblJlYWRXaXRoQ2hlY2tzdW0oKQogICAgewoJJG9iaiA9IG5ldyBzZWN1cmVfc2V0dGluZ3NfaW8oKTsKCSRkYXRhID0gJG9iai0+cmVhZF9mcm9tKCR0aGlzLT5maWxlbmFtZSwgdHJ1ZSk7CgkkdGhpcy0+YXNzZXJ0SXNBcnJheSgkZGF0YSk7CgkkdGhpcy0+YXNzZXJ0VHJ1ZShpbl9hcnJheSgnQXBwbGUnLCRkYXRhKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDYW5ub3RXcml0ZU51bGwoKQogICAgewoJJG9iaiA9IG5ldyBzZWN1cmVfc2V0dGluZ3NfaW8oKTsKCSRvYmotPndyaXRlX3RvKCR0aGlzLT5maWxlbmFtZSxudWxsKTsKCSR0aGlzLT5hc3NlcnRFeGNlcHRpb24oJ1xJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24nKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENhbm5vdFdyaXRlRW1wdHkoKQogICAgewoJJG9iaiA9IG5ldyBzZWN1cmVfc2V0dGluZ3NfaW8oKTsKCSRvYmotPndyaXRlX3RvKCR0aGlzLT5maWxlbmFtZSwnJyk7CgkkdGhpcy0+YXNzZXJ0RXhjZXB0aW9uKCdcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDYW5ub3RXcml0ZVNpbXBsZVN0cmluZygpCiAgICB7CiAgICAgICAgJG9iaiA9IG5ldyBzZWN1cmVfc2V0dGluZ3NfaW8oKTsKICAgICAgICAkb2JqLT53cml0ZV90bygkdGhpcy0+ZmlsZW5hbWUsJ3Rlc3Qgc3RyaW5nJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEV4Y2VwdGlvbignXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbicpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q2Fubm90V3JpdGVTY2FsYXIoKQogICAgewogICAgICAgICRvYmogPSBuZXcgc2VjdXJlX3NldHRpbmdzX2lvKCk7CiAgICAgICAgJG9iai0+d3JpdGVfdG8oJHRoaXMtPmZpbGVuYW1lLCAzLjE0MTU5ICk7CiAgICAgICAgJHRoaXMtPmFzc2VydEV4Y2VwdGlvbignXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbicpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q2FuV3JpdGVFbmNvZGFibGUoKQogICAgewoJY2xhc3MgbXlDbGFzcyBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUKCXsKICAgICAgICAgICAgcHVibGljIGZ1bmN0aW9uIEpzb25TZXJpYWxpemUoKSAKICAgICAgICAgICAgewogICAgICAgICAgICAgICByZXR1cm4gWyAnZm9vJyA9PiAnYmFyJyBdOwoJICAgIH0KCgl9IC8vIGNsYXNzCgoJQHVubGluaygkdGhpcy0+ZmlsZW5hbWUpOwoJJHRlc3QgPSBuZXcgbXlDbGFzczsKCSRvYmogPSBuZXcgc2VjdXJlX3NldHRpbmdzX2lvKCk7Cgkkb2JqLT53cml0ZV90bygkdGhpcy0+ZmlsZW5hbWUsICR0ZXN0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RmlsZUV4aXN0cygkdGhpcy0+ZmlsZW5hbWUpOyAKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENhbm5vdFdyaXRlTm90RW5jb2RhYmxlKCkKICAgIHsgCglAdW5saW5rKCR0aGlzLT5maWxlbmFtZSk7CgkkdGVzdCA9IG5ldyBcU3RkQ2xhc3M7CgkkdGVzdC0+Zm9vID0gJ2Jhcic7CgkKCSRvYmogPSBuZXcgc2VjdXJlX3NldHRpbmdzX2lvKCk7Cgkkb2JqLT53cml0ZV90bygkdGhpcy0+ZmlsZW5hbWUsICR0ZXN0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXhjZXB0aW9uKCdcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlYXJkb3duKCkKICAgIHsKCUB1bmxpbmsoJHRoaXMtPmZpbGVuYW1lKTsKICAgIH0KfSAvLyB0ZXN0IGNhc2UK]]></data>
	</file>
	<file>
	  <filename>/xtjs_features.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Rm9yIFNpdGUgRGV2ZWxvcGVycwogIFdIWToKICAgIEJlbmVmaXQgb2YgaW5saW5lIHN0eWxpbmcgd2l0aG91dCB0aGUgY29zdCAoY3NzIGlzIGNvbmNhdGVuYXRlZCwgc3RvcmVkIGFzIG9uZSB1cmwsIGFuZCBjYWNoZWQgYnkgYnJvd3NlcikKICAgIEJlbmVmaXQgb2YgaW5saW5lIGpzIHdpdGhvdXQgdGhlIGNvc3QgKGpzIGlzIG1pbmlmaWVkLCBjb25jYXRlbmF0ZWQsIHN0b3JlZCBhcyBvbmUgdXJsLCBhbmQgY2FjaGVkIGJ5IGJyb3dzZXIpCiAgICBrZWVwIHJlbGV2YW50IGNzcyBjb2RlIChzbWFsbCBiaXRzLCBhbmQganMgY29kZSkgd2l0aCB0aGUgaHRtbC9zbWFydHkgdGVtcGxhdGUuCgogIC0gRHluYW1pY2FsbHkgaW5jbHVkZSBqYXZhc2NyaXB0CiAgICAtIGZyb20gZmlsZXMKICAgIC0gZnJvbSB1cmxzICh0byB0YWtlIGFkdmFudGFnZSBvZiBDRE4ncykKICAgIC0gZnJvbSBsaWJyYXJpZXMgcHJvdmlkZWQgYnkgbW9kdWxlcwogICAgLSBmcm9tIGEgYmxvY2sgdGFnCiAgLSBEeW5hbWljYWxseSBpbmNsdWRlIHN0eWxlc2hlZXRzCiAgICAtIGZyb20gZmlsZXMKICAgIC0gZnJvbSB1cmxzCiAgICAtIGZyb20gbGlicmFyaWVzIHByb3ZpZGVkIGJ5IG1vZHVsZXMKICAgIC0gZnJvbSBhIGJsb2NrIHRhZwogICAgLSBmcm9tIGEgQ01TTVMgc3R5bGVzaGVldCAoQ01TTVMgMi4wKQoKICAtIFNtYXJ0IGZpbGUgZmluZGluZwogIC0gRGVwZW5kZW5jaWVzIGJldHdlZW4gbGlicmFyaWVzIGlzIGF1dG9tYXRpYwogIC0gSlMgaXMgY29uY2F0ZW5hdGVkIGluIG9uZSBmaWxlLCBhbmQgbWluaW1pemVkIChleGNlcHQgZm9yIFVSTFMpCiAgLSBDU1MgaXMgY29uY2F0ZW5hdGVkIGludG8gb25lIGZpbGUsIGFuZCBtaW5pbWl6ZWQgKGV4Y2VwdCBmb3IgVVJMUykKICAtIGNhY2hlIGxpZmV0aW1lCiAgLSBvcHRpb24gdG8gZGlzYWJsZSBtaW5pZnkKICAtIG9wdGlvbiB0byBleGNsdWRlIGxpYnJhcmllcwogIC0gbGVzcyBjc3MKCiAgY2F2ZWF0czoKICAgIC0geHRqcyBhbmQgeHRjc3MgbWV0aG9kcyBoYXZlIG5vIGVmZmVjdCB3aGVuIGNhbGxlZCB2aWEgYW4gYWpheCBhY3Rpb24gKGFzIHJlbmRlciBkb2VzIG5vdCBnZXQgY2FsbGVkKQoKRm9yIFByb2dyYW1tZXJzCiAgLSBDcmVhdGUganF1ZXJ5IHBsdWdpbnMgb3Igb3RoZXIgamF2YXNjcmlwdCBsaWJyYXJpZXMgaW4gbW9kdWxlcwogIC0gcmVnaXN0ZXIgb24gaW5zdGFsbC91cGdyYWRlIG9mIG1vZHVsZQogIC0gdW5yZWdpc3RlciBsaWJyYXJpZXMgb24gcmVtb3ZlCiAgLSBkZXBlbmRlbmN5IG1hbmFnZW1lbnQKClRPRE86CiAgLSBHZXQgcmVnaXN0ZXJlZCBsaWJyYXJpZXMgZnVuY3Rpb24KICAtIGRvY3VtZW50YXRpb24KICAtIHJlcGxhY2VtZW50IGZvciB7Y21zX3N0eWxlc2hlZXR9CiAgLSBsZXNzIGNzcwogIC0gYWRkIGZldGNoaW5nIG9mIHJlbW90ZSB1cmxzCg==]]></data>
	</file>
</module>
